From 00f2755c38744d3d51333a1f1efb162844d8aeab Mon Sep 17 00:00:00 2001 From: Payal Chaurasiya Date: Thu, 28 Nov 2024 13:56:52 +0530 Subject: [PATCH 1/3] Test Code changes due to TLS Parameter changes in openfl (#1170) * Change the input params Signed-off-by: Chaurasiya, Payal * use_tls and require_client_auth Signed-off-by: Chaurasiya, Payal * remove not Signed-off-by: Chaurasiya, Payal * Small change in use-tls Signed-off-by: Chaurasiya, Payal * Review comments Signed-off-by: Chaurasiya, Payal * action needed for boolean Signed-off-by: Chaurasiya, Payal * Small fix Signed-off-by: Chaurasiya, Payal * Small fix Signed-off-by: Chaurasiya, Payal * Review comments Signed-off-by: Chaurasiya, Payal --------- Signed-off-by: Chaurasiya, Payal Co-authored-by: Karan Shah --- .github/workflows/task_runner_e2e.yml | 67 ++++++++++++++++++ tests/end_to_end/conftest.py | 69 +++++-------------- tests/end_to_end/models/participants.py | 11 +-- .../test_suites/task_runner_tests.py | 6 +- tests/end_to_end/utils/conftest_helper.py | 1 - 5 files changed, 93 insertions(+), 61 deletions(-) diff --git a/.github/workflows/task_runner_e2e.yml b/.github/workflows/task_runner_e2e.yml index a7e01c579f..b4b8dff280 100644 --- a/.github/workflows/task_runner_e2e.yml +++ b/.github/workflows/task_runner_e2e.yml @@ -163,3 +163,70 @@ jobs: with: name: tr_non_tls_${{ env.MODEL_NAME }}_python${{ env.PYTHON_VERSION }}_${{ github.run_id }} path: result.tar + + test_with_no_client_auth: + name: tr_no_client_auth + runs-on: ubuntu-22.04 + timeout-minutes: 120 # 2 hours + strategy: + matrix: + # Testing non TLS scenario only for torch_cnn_mnist model and python 3.10 + # If required, this can be extended to other models and python versions + model_name: ["keras_cnn_mnist"] + python_version: ["3.10"] + fail-fast: false # do not immediately fail if one of the combinations fail + + env: + MODEL_NAME: ${{ matrix.model_name }} + PYTHON_VERSION: ${{ matrix.python_version }} + + steps: + - name: Checkout OpenFL repository + id: checkout_openfl + uses: actions/checkout@v4.1.1 + with: + fetch-depth: 2 # needed for detecting changes + submodules: "true" + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Python + id: setup_python + uses: actions/setup-python@v3 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Install dependencies + id: install_dependencies + run: | + python -m pip install --upgrade pip + pip install . + pip install -r test-requirements.txt + + - name: Run Task Runner E2E tests without TLS + id: run_tests + run: | + python -m pytest -s tests/end_to_end/test_suites/task_runner_tests.py \ + -m ${{ env.MODEL_NAME }} --model_name ${{ env.MODEL_NAME }} \ + --num_rounds ${{ env.NUM_ROUNDS }} --num_collaborators ${{ env.NUM_COLLABORATORS }} --disable_client_auth + echo "Task runner end to end test run completed" + + - name: Print test summary + id: print_test_summary + if: ${{ always() }} + run: | + export PYTHONPATH="$PYTHONPATH:." + python tests/end_to_end/utils/summary_helper.py + echo "Test summary printed" + + - name: Tar files + id: tar_files + if: ${{ always() }} + run: tar -cvf result.tar results + + - name: Upload Artifacts + id: upload_artifacts + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: tr_no_client_auth_${{ env.MODEL_NAME }}_python${{ env.PYTHON_VERSION }}_${{ github.run_id }} + path: result.tar diff --git a/tests/end_to_end/conftest.py b/tests/end_to_end/conftest.py index 85d7db4d58..22eed9d101 100644 --- a/tests/end_to_end/conftest.py +++ b/tests/end_to_end/conftest.py @@ -17,10 +17,9 @@ # Define a named tuple to store the objects for model owner, aggregator, and collaborators federation_fixture = collections.namedtuple( "federation_fixture", - "model_owner, aggregator, collaborators, model_name, disable_client_auth, disable_tls, workspace_path, results_dir, num_rounds", + "model_owner, aggregator, collaborators, model_name, require_client_auth, use_tls, workspace_path, results_dir, num_rounds", ) - def pytest_addoption(parser): """ Add custom command line options to the pytest parser. @@ -29,44 +28,12 @@ def pytest_addoption(parser): """ parser.addini("results_dir", "Directory to store test results", default="results") parser.addini("log_level", "Logging level", default="DEBUG") - parser.addoption( - "--results_dir", action="store", type=str, default="results", help="Results directory" - ) - parser.addoption( - "--num_collaborators", - action="store", - type=int, - default=constants.NUM_COLLABORATORS, - help="Number of collaborators", - ) - parser.addoption( - "--num_rounds", - action="store", - type=int, - default=constants.NUM_ROUNDS, - help="Number of rounds to train", - ) - parser.addoption( - "--model_name", - action="store", - type=str, - help="Model name", - ) - parser.addoption( - "--disable_client_auth", - action="store_true", - help="Disable client authentication", - ) - parser.addoption( - "--disable_tls", - action="store_true", - help="Disable TLS for communication", - ) - parser.addoption( - "--log_memory_usage", - action="store_true", - help="Enable memory log in collaborators and aggregator", - ) + parser.addoption("--num_collaborators") + parser.addoption("--num_rounds") + parser.addoption("--model_name") + parser.addoption("--disable_client_auth", action="store_true") + parser.addoption("--disable_tls", action="store_true") + parser.addoption("--log_memory_usage", action="store_true") @pytest.fixture(scope="session", autouse=True) @@ -234,11 +201,11 @@ def fx_federation(request, pytestconfig): args = parse_arguments() # Use the model name from the test case name if not provided as a command line argument model_name = args.model_name if args.model_name else request.node.name.split("test_")[1] - results_dir = args.results_dir or pytestconfig.getini("results_dir") + results_dir = pytestconfig.getini("results_dir") num_collaborators = args.num_collaborators num_rounds = args.num_rounds - disable_client_auth = args.disable_client_auth - disable_tls = args.disable_tls + require_client_auth = not args.disable_client_auth + use_tls = not args.disable_tls log_memory_usage = args.log_memory_usage log.info( @@ -246,8 +213,8 @@ def fx_federation(request, pytestconfig): f"\tNumber of collaborators: {num_collaborators}\n" f"\tNumber of rounds: {num_rounds}\n" f"\tModel name: {model_name}\n" - f"\tClient authentication: {not disable_client_auth}\n" - f"\tTLS: {not disable_tls}\n" + f"\tClient authentication: {require_client_auth}\n" + f"\tTLS: {use_tls}\n" f"\tMemory Logs: {log_memory_usage}" ) @@ -270,16 +237,14 @@ def fx_federation(request, pytestconfig): model_owner.modify_plan( new_rounds=num_rounds, num_collaborators=num_collaborators, - disable_client_auth=disable_client_auth, - disable_tls=disable_tls, + require_client_auth=require_client_auth, + use_tls=use_tls, ) except Exception as e: log.error(f"Failed to modify the plan: {e}") raise e - # For TLS enabled (default) scenario: when the workspace is certified, the collaborators are registered as well - # For TLS disabled scenario: collaborators need to be registered explicitly - if args.disable_tls: + if not use_tls: log.info("Disabling TLS for communication") try: model_owner.register_collaborators(num_collaborators) @@ -321,8 +286,8 @@ def fx_federation(request, pytestconfig): aggregator=aggregator, collaborators=collaborators, model_name=model_name, - disable_client_auth=disable_client_auth, - disable_tls=disable_tls, + require_client_auth=require_client_auth, + use_tls=use_tls, workspace_path=workspace_path, results_dir=results_dir, num_rounds=num_rounds, diff --git a/tests/end_to_end/models/participants.py b/tests/end_to_end/models/participants.py index 6eb455aaa8..ca33cdc32a 100644 --- a/tests/end_to_end/models/participants.py +++ b/tests/end_to_end/models/participants.py @@ -114,14 +114,14 @@ def certify_collaborator(self, collaborator_name): raise e return True - def modify_plan(self, new_rounds=None, num_collaborators=None, disable_client_auth=False, disable_tls=False): + def modify_plan(self, new_rounds=None, num_collaborators=None, require_client_auth=True, use_tls=True): """ Modify the plan to train the model Args: new_rounds (int): Number of rounds to train num_collaborators (int): Number of collaborators - disable_client_auth (bool): Disable client authentication - disable_tls (bool): Disable TLS communication + require_client_auth (bool): Enable client authentication + use_tls (bool): Enable TLS communication Returns: bool: True if successful, else False """ @@ -139,8 +139,9 @@ def modify_plan(self, new_rounds=None, num_collaborators=None, disable_client_au data["collaborator"]["settings"]["log_memory_usage"] = self.log_memory_usage data["data_loader"]["settings"]["collaborator_count"] = int(self.num_collaborators) - data["network"]["settings"]["disable_client_auth"] = disable_client_auth - data["network"]["settings"]["tls"] = not disable_tls + data["network"]["settings"]["require_client_auth"] = require_client_auth + data["network"]["settings"]["use_tls"] = use_tls + with open(self.plan_path, "w+") as write_file: yaml.dump(data, write_file) diff --git a/tests/end_to_end/test_suites/task_runner_tests.py b/tests/end_to_end/test_suites/task_runner_tests.py index 371fee8f08..43946d61fb 100644 --- a/tests/end_to_end/test_suites/task_runner_tests.py +++ b/tests/end_to_end/test_suites/task_runner_tests.py @@ -17,7 +17,7 @@ def test_torch_cnn_mnist(fx_federation): log.info("Testing torch_cnn_mnist model") # Setup PKI for trusted communication within the federation - if not fx_federation.disable_tls: + if fx_federation.use_tls: assert fed_helper.setup_pki(fx_federation), "Failed to setup PKI for trusted communication" # Start the federation @@ -32,7 +32,7 @@ def test_keras_cnn_mnist(fx_federation): log.info("Testing keras_cnn_mnist model") # Setup PKI for trusted communication within the federation - if not fx_federation.disable_tls: + if fx_federation.use_tls: assert fed_helper.setup_pki(fx_federation), "Failed to setup PKI for trusted communication" # Start the federation @@ -50,7 +50,7 @@ def test_torch_cnn_histology(fx_federation): log.info("Testing torch_cnn_histology model") # Setup PKI for trusted communication within the federation - if not fx_federation.disable_tls: + if fx_federation.use_tls: assert fed_helper.setup_pki(fx_federation), "Failed to setup PKI for trusted communication" # Start the federation diff --git a/tests/end_to_end/utils/conftest_helper.py b/tests/end_to_end/utils/conftest_helper.py index 35c6986ea8..d623c21201 100644 --- a/tests/end_to_end/utils/conftest_helper.py +++ b/tests/end_to_end/utils/conftest_helper.py @@ -27,7 +27,6 @@ def parse_arguments(): """ try: parser = argparse.ArgumentParser(description="Provide the required arguments to run the tests") - parser.add_argument("--results_dir", type=str, required=False, default="results", help="Directory to store the results") parser.add_argument("--num_collaborators", type=int, default=2, help="Number of collaborators") parser.add_argument("--num_rounds", type=int, default=5, help="Number of rounds to train") parser.add_argument("--model_name", type=str, help="Model name") From a26bdb2e3f2a7addf6b58a0f6c164c51ed753217 Mon Sep 17 00:00:00 2001 From: refai06 <149057514+refai06@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:56:06 +0530 Subject: [PATCH 2/3] Reorganization of OpenFL Experimental Directory Structure (#1169) * reorganize directory structure Signed-off-by: refai06 * reorganize tutorial dir structure Signed-off-by: refai06 * reorganize workspace dir structure Signed-off-by: refai06 * reorganize tests dir structure Signed-off-by: refai06 * reorganize workspace directory Signed-off-by: refai06 * reorganize dir Signed-off-by: refai06 * revert testcase update Signed-off-by: refai06 * update directory structure Signed-off-by: refai06 * revert copyright changes Signed-off-by: refai06 * update requirement Signed-off-by: refai06 * directory restructure changes Signed-off-by: refai06 * update directory restructure Signed-off-by: refai06 --------- Signed-off-by: refai06 --- .../workflows/experimental_workflow_tests.yml | 40 +- .../workflow_interface_101_mnist.yml | 4 +- README.md | 2 +- docs/about/features_index/privacy_meter.rst | 4 +- docs/about/releases.md | 18 +- .../workflowinterface_pytorch_mnist.rst | 10 +- docs/source/api/openfl_experimental.rst | 8 +- .../PoisoningAttackDemoReduced.ipynb | 1443 ----------------- ...kspace_Creation_from_JupyterNotebook.ipynb | 12 +- .../{ => workflow}/101_MNIST.ipynb | 8 +- .../102_Aggregator_Validation.ipynb | 12 +- ...c_Institutional_Incremental_Learning.ipynb | 8 +- .../104_Keras_MNIST_with_CPU.ipynb | 8 +- .../104_Keras_MNIST_with_GPU.ipynb | 8 +- .../{ => workflow}/104_MNIST_XPU.ipynb | 6 +- ...105_Numpy_Linear_Regression_Workflow.ipynb | 8 +- ...kit_Learn_Linear_Regression_Workflow.ipynb | 12 +- .../201_Exclusive_GPUs_with_Ray.ipynb | 8 +- .../301_MNIST_Watermarking.ipynb | 10 +- .../401_FedProx_with_Synthetic_nonIID.ipynb | 822 ++++++++++ ...Prox_PyTorch_MNIST_Workflow_Tutorial.ipynb | 8 +- ...gregator_Validation_Ray_Watermarking.ipynb | 910 +++++++++++ .../402_FedProx_with_Synthetic_nonIID.ipynb | 6 +- ...gregator_Validation_Ray_Watermarking.ipynb | 10 +- .../{ => workflow}/CrowdGuard/.gitignore | 0 .../CrowdGuard/CrowdGuardClientValidation.py | 0 .../CrowdGuard/PoisoningAttackDemo.ipynb | 8 +- .../PoisoningAttackDemoReduced.ipynb | 256 +++ .../CrowdGuard/cifar10_crowdguard.py | 6 +- .../{ => workflow}/CrowdGuard/readme.md | 0 .../{ => workflow}/Global_DP/README.md | 0 ...rkflow_Interface_Mnist_Implementation_1.py | 6 +- ...rkflow_Interface_Mnist_Implementation_2.py | 6 +- .../Global_DP/clip_optimizer.py | 0 .../Global_DP/requirements_global_dp.txt | 0 .../{ => workflow}/Global_DP/test_config.yml | 0 .../{ => workflow}/LLM/neuralchat/README.md | 0 .../Workflow_Interface_NeuralChat.ipynb | 6 +- .../LLM/neuralchat/preprocess_dataset.py | 0 .../Results/result_adam/Portland_auc.png | Bin .../result_adam/Portland_roc_at_30.png | Bin .../result_adam/Portland_tpr_at_0.1.png | Bin .../result_adam/Portland_tpr_at_0.2.png | Bin .../result_adam/Portland_tpr_at_0.3.png | Bin .../Results/result_adam/Seattle_auc.png | Bin .../Results/result_adam/Seattle_roc_at_30.png | Bin .../result_adam/Seattle_tpr_at_0.1.png | Bin .../result_adam/Seattle_tpr_at_0.2.png | Bin .../result_adam/Seattle_tpr_at_0.3.png | Bin .../Results/result_sgd/Portland_auc.png | Bin .../Results/result_sgd/Portland_roc_at_30.png | Bin .../result_sgd/Portland_tpr_at_0.1.png | Bin .../result_sgd/Portland_tpr_at_0.2.png | Bin .../result_sgd/Portland_tpr_at_0.3.png | Bin .../Results/result_sgd/Seattle_auc.png | Bin .../Results/result_sgd/Seattle_roc_at_30.png | Bin .../Results/result_sgd/Seattle_tpr_at_0.1.png | Bin .../Results/result_sgd/Seattle_tpr_at_0.2.png | Bin .../Results/result_sgd/Seattle_tpr_at_0.3.png | Bin .../{ => workflow}/Privacy_Meter/auditor.py | 0 .../Privacy_Meter/cifar10_PM.py | 6 +- .../Privacy_Meter/cifar10_loader.py | 0 .../{ => workflow}/Privacy_Meter/readme.md | 0 .../requirements_privacy_meter.txt | 0 ...on_MUTAG_model_PyG_example_muatg_gin.ipynb | 1284 ++++++++++++++- .../PyG_support/openFL_PyG_on_HIV_model.ipynb | 1406 +++++++++++++++- .../{ => workflow}/Vertical_FL/Intro.ipynb | 10 +- .../{ => workflow}/Vertical_FL/TwoParty.ipynb | 10 +- .../TwoPartyWorkspaceCreation.ipynb | 10 +- ...low_Interface_102_Vision_Transformer.ipynb | 10 +- .../Vision_Transformer/images/pathmnist.png | Bin .../images/vision_transformer.png | Bin .../Vision_Transformer/images/workflow.png | Bin .../requirements_vision_transformer.txt | 0 .../workflow_interface_requirements.txt | 0 .../101_torch_cnn_mnist/.workspace | 0 .../101_torch_cnn_mnist/plan/cols.yaml | 0 .../101_torch_cnn_mnist/plan/data.yaml | 0 .../101_torch_cnn_mnist/plan/defaults | 0 .../101_torch_cnn_mnist/plan/plan.yaml | 4 +- .../101_torch_cnn_mnist/requirements.txt | 0 .../101_torch_cnn_mnist/src/__init__.py | 0 .../src/collaborator_private_attrs.py | 0 .../101_torch_cnn_mnist/src/flow.py | 12 +- .../101_torch_cnn_mnist/src/utils.py | 0 .../102_aggregator_validation/.workspace | 0 .../102_aggregator_validation/plan/cols.yaml | 0 .../102_aggregator_validation/plan/data.yaml | 0 .../102_aggregator_validation/plan/defaults | 0 .../102_aggregator_validation/plan/plan.yaml | 4 +- .../requirements.txt | 0 .../102_aggregator_validation/src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../102_aggregator_validation/src/flow.py | 4 +- .../102_aggregator_validation/src/utils.py | 0 .../104_keras_mnist/.workspace | 0 .../104_keras_mnist/plan/cols.yaml | 0 .../104_keras_mnist/plan/data.yaml | 0 .../104_keras_mnist/plan/defaults | 0 .../104_keras_mnist/plan/plan.yaml | 4 +- .../104_keras_mnist/requirements.txt | 0 .../104_keras_mnist/src/__init__.py | 0 .../src/collaborator_private_attrs.py | 0 .../104_keras_mnist/src/flow.py | 4 +- .../104_keras_mnist/src/utils.py | 0 .../.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/flow.py | 4 +- .../src/utils.py | 0 .../.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/flow.py | 4 +- .../src/utils.py | 0 .../template_workspace/.workspace | 0 .../template_workspace/plan/cols.yaml | 0 .../template_workspace/plan/data.yaml | 0 .../template_workspace/plan/defaults | 0 .../template_workspace/plan/plan.yaml | 4 +- .../template_workspace/requirements.txt | 0 .../template_workspace/src/__init__.py | 0 .../vertical_fl/.workspace | 0 .../vertical_fl/plan/cols.yaml | 0 .../vertical_fl/plan/data.yaml | 0 .../vertical_fl/plan/defaults | 0 .../vertical_fl/plan/plan.yaml | 4 +- .../vertical_fl/requirements.txt | 0 .../vertical_fl/src/__init__.py | 0 .../vertical_fl/src/utils.py | 0 .../src/workflow_interface_vertical_fl.py | 4 +- .../vertical_fl_two_party/.workspace | 0 .../vertical_fl_two_party/plan/cols.yaml | 0 .../vertical_fl_two_party/plan/data.yaml | 0 .../vertical_fl_two_party/plan/defaults | 0 .../vertical_fl_two_party/plan/plan.yaml | 4 +- .../vertical_fl_two_party/requirements.txt | 0 .../vertical_fl_two_party/src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../vertical_fl_two_party/src/utils.py | 0 ...orkflow_interface_vertical_fl_two_party.py | 4 +- .../workspace/.workspace | 0 .../workspace/__init__.py | 0 .../workspace/plan/defaults/aggregator.yaml | 1 + .../workspace/plan/defaults/collaborator.yaml | 1 + .../workspace/plan/defaults/network.yaml | 0 .../default/base_plan_interactive_api.yaml | 0 .../workspace/plan/plans/default/plan.yaml | 0 .../workspace/plan/defaults/aggregator.yaml | 1 - .../workspace/plan/defaults/collaborator.yaml | 1 - openfl/experimental/component/__init__.py | 9 - .../component/aggregator/__init__.py | 8 - .../component/collaborator/__init__.py | 8 - openfl/experimental/federated/__init__.py | 8 - openfl/experimental/interface/__init__.py | 8 - openfl/experimental/placement/__init__.py | 8 - openfl/experimental/runtime/__init__.py | 9 - openfl/experimental/transport/__init__.py | 6 - .../experimental/transport/grpc/__init__.py | 13 - openfl/experimental/utilities/__init__.py | 30 - .../{protocols => workflow}/__init__.py | 2 +- .../workflow/component/__init__.py | 9 + .../workflow/component/aggregator/__init__.py | 8 + .../component/aggregator/aggregator.py | 8 +- .../component/collaborator/__init__.py | 8 + .../component/collaborator/collaborator.py | 0 .../workflow/federated/__init__.py | 8 + .../{ => workflow}/federated/plan/__init__.py | 2 +- .../{ => workflow}/federated/plan/plan.py | 8 +- .../workflow/interface/__init__.py | 8 + .../interface/cli}/__init__.py | 2 +- .../interface/cli/aggregator.py | 4 +- .../interface/cli/cli_helper.py | 4 +- .../interface/cli/collaborator.py | 4 +- .../interface/cli/experimental.py | 0 .../{ => workflow}/interface/cli/plan.py | 2 +- .../{ => workflow}/interface/cli/workspace.py | 8 +- .../{ => workflow}/interface/fl_spec.py | 4 +- .../{ => workflow}/interface/participants.py | 2 +- .../workflow/placement/__init__.py | 8 + .../{ => workflow}/placement/placement.py | 2 +- .../{ => workflow}/protocols/README.md | 0 .../cli => workflow/protocols}/__init__.py | 2 +- .../{ => workflow}/protocols/aggregator.proto | 0 .../{ => workflow}/protocols/interceptors.py | 0 .../experimental/workflow/runtime/__init__.py | 9 + .../runtime/federated_runtime.py | 8 +- .../{ => workflow}/runtime/local_runtime.py | 12 +- .../{ => workflow}/runtime/runtime.py | 6 +- .../workflow/transport/__init__.py | 6 + .../workflow/transport/grpc/__init__.py | 13 + .../transport/grpc/aggregator_client.py | 4 +- .../transport/grpc/aggregator_server.py | 4 +- .../transport/grpc/exceptions.py | 0 .../transport/grpc/grpc_channel_options.py | 0 .../workflow/utilities/__init__.py | 30 + .../{ => workflow}/utilities/exceptions.py | 0 .../utilities/metaflow_utils.py | 4 +- .../{ => workflow}/utilities/resources.py | 2 +- .../{ => workflow}/utilities/runtime_utils.py | 4 +- .../utilities/stream_redirect.py | 2 +- .../{ => workflow}/utilities/transitions.py | 0 .../{ => workflow}/utilities/ui.py | 2 +- .../workflow/workspace_export/__init__.py | 5 + .../{ => workflow}/workspace_export/export.py | 16 +- openfl/interface/cli.py | 2 +- openfl/interface/experimental.py | 1 + setup.py | 29 +- .../test_experimental_agg_based_workflow.py | 8 +- .../testcase_datastore_cli/.workspace | 0 .../testcase_datastore_cli/plan/cols.yaml | 0 .../testcase_datastore_cli/plan/data.yaml | 0 .../testcase_datastore_cli/plan/defaults | 0 .../testcase_datastore_cli/plan/plan.yaml | 4 +- .../testcase_datastore_cli/requirements.txt | 0 .../testcase_datastore_cli/src/__init__.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/testflow_datastore_cli.py | 4 +- .../testcase_datastore_cli/src/utils.py | 0 .../testcase_include_exclude/.workspace | 0 .../testcase_include_exclude/plan/cols.yaml | 0 .../testcase_include_exclude/plan/data.yaml | 0 .../testcase_include_exclude/plan/defaults | 0 .../testcase_include_exclude/plan/plan.yaml | 4 +- .../testcase_include_exclude/requirements.txt | 0 .../testcase_include_exclude/src/__init__.py | 0 .../src/testflow_include_exclude.py | 4 +- .../testcase_include_exclude/src/utils.py | 0 .../testcase_internalloop/.workspace | 0 .../testcase_internalloop/plan/cols.yaml | 0 .../testcase_internalloop/plan/data.yaml | 0 .../testcase_internalloop/plan/defaults | 0 .../testcase_internalloop/plan/plan.yaml | 4 +- .../testcase_internalloop/requirements.txt | 0 .../testcase_internalloop/src/__init__.py | 0 .../src/testflow_internalloop.py | 4 +- .../testcase_internalloop/src/utils.py | 0 .../testcase_private_attributes/.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../testcase_private_attributes/plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/testflow_privateattributes.py | 6 +- .../testcase_private_attributes/src/utils.py | 0 .../.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/testflow_privateattributes.py | 6 +- .../src/utils.py | 0 .../.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/testflow_privateattributes.py | 6 +- .../src/utils.py | 0 .../testcase_reference/.workspace | 0 .../testcase_reference/plan/cols.yaml | 0 .../testcase_reference/plan/data.yaml | 0 .../testcase_reference/plan/defaults | 0 .../testcase_reference/plan/plan.yaml | 4 +- .../testcase_reference/requirements.txt | 0 .../testcase_reference/src/__init__.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/testflow_reference.py | 4 +- .../testcase_reference/src/utils.py | 0 .../.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 ...testflow_reference_with_include_exclude.py | 4 +- .../src/utils.py | 0 .../.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/testflow_subset_of_collaborators.py | 4 +- .../src/utils.py | 0 .../.workspace | 0 .../plan/cols.yaml | 0 .../plan/data.yaml | 0 .../plan/defaults | 0 .../plan/plan.yaml | 4 +- .../requirements.txt | 0 .../src/__init__.py | 0 .../src/aggregator_private_attrs.py | 0 .../src/collaborator_private_attrs.py | 0 .../src/testflow_participant_name.py | 6 +- .../src/utils.py | 0 .../AggregatorBasedWorkflow}/utils.py | 0 .../workspace/.workspace | 0 .../workspace/__init__.py | 0 .../workspace/plan/defaults/aggregator.yaml | 1 + .../workspace/plan/defaults/collaborator.yaml | 1 + .../workspace/plan/defaults/network.yaml | 0 .../default/base_plan_interactive_api.yaml | 0 .../workspace/plan/plans/default/plan.yaml | 0 ...ements_experimental_localruntime_tests.txt | 0 .../LocalRuntime}/testflow_datastore_cli.py | 6 +- .../LocalRuntime}/testflow_exclude.py | 6 +- .../LocalRuntime}/testflow_include.py | 6 +- .../LocalRuntime}/testflow_include_exclude.py | 6 +- .../LocalRuntime}/testflow_internalloop.py | 8 +- .../testflow_privateattributes.py | 6 +- ...ibutes_initialization_with_both_options.py | 6 +- ...ributes_initialization_without_callable.py | 6 +- .../LocalRuntime}/testflow_reference.py | 6 +- .../testflow_reference_with_exclude.py | 6 +- .../testflow_reference_with_include.py | 6 +- .../testflow_subset_of_collaborators.py | 8 +- .../workspace/plan/defaults/aggregator.yaml | 1 - .../workspace/plan/defaults/collaborator.yaml | 1 - 347 files changed, 5135 insertions(+), 1891 deletions(-) delete mode 100644 openfl-tutorials/experimental/CrowdGuard/PoisoningAttackDemoReduced.ipynb rename openfl-tutorials/experimental/{ => workflow}/1001_Workspace_Creation_from_JupyterNotebook.ipynb (98%) rename openfl-tutorials/experimental/{ => workflow}/101_MNIST.ipynb (99%) rename openfl-tutorials/experimental/{ => workflow}/102_Aggregator_Validation.ipynb (97%) rename openfl-tutorials/experimental/{ => workflow}/103_Cyclic_Institutional_Incremental_Learning.ipynb (99%) rename openfl-tutorials/experimental/{ => workflow}/104_Keras_MNIST_with_CPU.ipynb (97%) rename openfl-tutorials/experimental/{ => workflow}/104_Keras_MNIST_with_GPU.ipynb (99%) rename openfl-tutorials/experimental/{ => workflow}/104_MNIST_XPU.ipynb (99%) rename openfl-tutorials/experimental/{ => workflow}/105_Numpy_Linear_Regression_Workflow.ipynb (98%) rename openfl-tutorials/experimental/{ => workflow}/106_Scikit_Learn_Linear_Regression_Workflow.ipynb (97%) rename openfl-tutorials/experimental/{ => workflow}/201_Exclusive_GPUs_with_Ray.ipynb (98%) rename openfl-tutorials/experimental/{ => workflow}/301_MNIST_Watermarking.ipynb (99%) create mode 100644 openfl-tutorials/experimental/workflow/401_FedProx_with_Synthetic_nonIID.ipynb rename openfl-tutorials/experimental/{ => workflow}/401_Federated_FedProx_PyTorch_MNIST_Workflow_Tutorial.ipynb (99%) create mode 100644 openfl-tutorials/experimental/workflow/401_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb rename openfl-tutorials/experimental/{ => workflow}/402_FedProx_with_Synthetic_nonIID.ipynb (99%) rename openfl-tutorials/experimental/{ => workflow}/402_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb (99%) rename openfl-tutorials/experimental/{ => workflow}/CrowdGuard/.gitignore (100%) rename openfl-tutorials/experimental/{ => workflow}/CrowdGuard/CrowdGuardClientValidation.py (100%) rename openfl-tutorials/experimental/{ => workflow}/CrowdGuard/PoisoningAttackDemo.ipynb (99%) create mode 100644 openfl-tutorials/experimental/workflow/CrowdGuard/PoisoningAttackDemoReduced.ipynb rename openfl-tutorials/experimental/{ => workflow}/CrowdGuard/cifar10_crowdguard.py (99%) rename openfl-tutorials/experimental/{ => workflow}/CrowdGuard/readme.md (100%) rename openfl-tutorials/experimental/{ => workflow}/Global_DP/README.md (100%) rename openfl-tutorials/experimental/{ => workflow}/Global_DP/Workflow_Interface_Mnist_Implementation_1.py (99%) rename openfl-tutorials/experimental/{ => workflow}/Global_DP/Workflow_Interface_Mnist_Implementation_2.py (99%) rename openfl-tutorials/experimental/{ => workflow}/Global_DP/clip_optimizer.py (100%) rename openfl-tutorials/experimental/{ => workflow}/Global_DP/requirements_global_dp.txt (100%) rename openfl-tutorials/experimental/{ => workflow}/Global_DP/test_config.yml (100%) rename openfl-tutorials/experimental/{ => workflow}/LLM/neuralchat/README.md (100%) rename openfl-tutorials/experimental/{ => workflow}/LLM/neuralchat/Workflow_Interface_NeuralChat.ipynb (99%) rename openfl-tutorials/experimental/{ => workflow}/LLM/neuralchat/preprocess_dataset.py (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Portland_auc.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Portland_roc_at_30.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.1.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.2.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.3.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Seattle_auc.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Seattle_roc_at_30.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.1.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.2.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.3.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Portland_auc.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Portland_roc_at_30.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.1.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.2.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.3.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Seattle_auc.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Seattle_roc_at_30.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.1.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.2.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.3.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/auditor.py (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/cifar10_PM.py (99%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/cifar10_loader.py (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/readme.md (100%) rename openfl-tutorials/experimental/{ => workflow}/Privacy_Meter/requirements_privacy_meter.txt (100%) rename openfl-tutorials/experimental/{ => workflow}/PyG_support/OpenFL_PYG_on_MUTAG_model_PyG_example_muatg_gin.ipynb (53%) rename openfl-tutorials/experimental/{ => workflow}/PyG_support/openFL_PyG_on_HIV_model.ipynb (87%) rename openfl-tutorials/experimental/{ => workflow}/Vertical_FL/Intro.ipynb (96%) rename openfl-tutorials/experimental/{ => workflow}/Vertical_FL/TwoParty.ipynb (96%) rename openfl-tutorials/experimental/{ => workflow}/Vertical_FL/TwoPartyWorkspaceCreation.ipynb (97%) rename openfl-tutorials/experimental/{ => workflow}/Vision_Transformer/Workflow_Interface_102_Vision_Transformer.ipynb (98%) rename openfl-tutorials/experimental/{ => workflow}/Vision_Transformer/images/pathmnist.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Vision_Transformer/images/vision_transformer.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Vision_Transformer/images/workflow.png (100%) rename openfl-tutorials/experimental/{ => workflow}/Vision_Transformer/requirements_vision_transformer.txt (100%) rename openfl-tutorials/experimental/{ => workflow}/workflow_interface_requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/plan/plan.yaml (91%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/src/collaborator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/src/flow.py (93%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/101_torch_cnn_mnist/src/utils.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/plan/plan.yaml (83%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/src/aggregator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/src/collaborator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/src/flow.py (97%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/102_aggregator_validation/src/utils.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/plan/plan.yaml (82%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/src/collaborator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/src/flow.py (96%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/104_keras_mnist/src/utils.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/plan/plan.yaml (82%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/src/aggregator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/src/collaborator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/src/flow.py (98%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/301_torch_cnn_mnist_watermarking/src/utils.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/plan/plan.yaml (91%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/src/aggregator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/src/collaborator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/src/flow.py (99%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/501_pytorch_tinyimagenet_transfer_learning/src/utils.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/template_workspace/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/template_workspace/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/template_workspace/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/template_workspace/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/template_workspace/plan/plan.yaml (78%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/template_workspace/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/template_workspace/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/plan/plan.yaml (79%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/src/utils.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl/src/workflow_interface_vertical_fl.py (95%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/plan/cols.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/plan/data.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/plan/defaults (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/plan/plan.yaml (80%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/requirements.txt (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/src/__init__.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/src/aggregator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/src/collaborator_private_attrs.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/src/utils.py (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/vertical_fl_two_party/src/workflow_interface_vertical_fl_two_party.py (94%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/workspace/.workspace (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/workspace/__init__.py (100%) create mode 100644 openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml create mode 100644 openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/workspace/plan/defaults/network.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/workspace/plan/plans/default/base_plan_interactive_api.yaml (100%) rename openfl-workspace/experimental/{ => workflow/AggregatorBasedWorkflow}/workspace/plan/plans/default/plan.yaml (100%) delete mode 100644 openfl-workspace/experimental/workspace/plan/defaults/aggregator.yaml delete mode 100644 openfl-workspace/experimental/workspace/plan/defaults/collaborator.yaml delete mode 100644 openfl/experimental/component/__init__.py delete mode 100644 openfl/experimental/component/aggregator/__init__.py delete mode 100644 openfl/experimental/component/collaborator/__init__.py delete mode 100644 openfl/experimental/federated/__init__.py delete mode 100644 openfl/experimental/interface/__init__.py delete mode 100644 openfl/experimental/placement/__init__.py delete mode 100644 openfl/experimental/runtime/__init__.py delete mode 100644 openfl/experimental/transport/__init__.py delete mode 100644 openfl/experimental/transport/grpc/__init__.py delete mode 100644 openfl/experimental/utilities/__init__.py rename openfl/experimental/{protocols => workflow}/__init__.py (64%) create mode 100644 openfl/experimental/workflow/component/__init__.py create mode 100644 openfl/experimental/workflow/component/aggregator/__init__.py rename openfl/experimental/{ => workflow}/component/aggregator/aggregator.py (98%) create mode 100644 openfl/experimental/workflow/component/collaborator/__init__.py rename openfl/experimental/{ => workflow}/component/collaborator/collaborator.py (100%) create mode 100644 openfl/experimental/workflow/federated/__init__.py rename openfl/experimental/{ => workflow}/federated/plan/__init__.py (70%) rename openfl/experimental/{ => workflow}/federated/plan/plan.py (98%) create mode 100644 openfl/experimental/workflow/interface/__init__.py rename openfl/experimental/{workspace_export => workflow/interface/cli}/__init__.py (52%) rename openfl/experimental/{ => workflow}/interface/cli/aggregator.py (98%) rename openfl/experimental/{ => workflow}/interface/cli/cli_helper.py (97%) rename openfl/experimental/{ => workflow}/interface/cli/collaborator.py (98%) rename openfl/experimental/{ => workflow}/interface/cli/experimental.py (100%) rename openfl/experimental/{ => workflow}/interface/cli/plan.py (98%) rename openfl/experimental/{ => workflow}/interface/cli/workspace.py (98%) rename openfl/experimental/{ => workflow}/interface/fl_spec.py (98%) rename openfl/experimental/{ => workflow}/interface/participants.py (99%) create mode 100644 openfl/experimental/workflow/placement/__init__.py rename openfl/experimental/{ => workflow}/placement/placement.py (97%) rename openfl/experimental/{ => workflow}/protocols/README.md (100%) rename openfl/experimental/{interface/cli => workflow/protocols}/__init__.py (60%) rename openfl/experimental/{ => workflow}/protocols/aggregator.proto (100%) rename openfl/experimental/{ => workflow}/protocols/interceptors.py (100%) create mode 100644 openfl/experimental/workflow/runtime/__init__.py rename openfl/experimental/{ => workflow}/runtime/federated_runtime.py (89%) rename openfl/experimental/{ => workflow}/runtime/local_runtime.py (98%) rename openfl/experimental/{ => workflow}/runtime/runtime.py (92%) create mode 100644 openfl/experimental/workflow/transport/__init__.py create mode 100644 openfl/experimental/workflow/transport/grpc/__init__.py rename openfl/experimental/{ => workflow}/transport/grpc/aggregator_client.py (98%) rename openfl/experimental/{ => workflow}/transport/grpc/aggregator_server.py (97%) rename openfl/experimental/{ => workflow}/transport/grpc/exceptions.py (100%) rename openfl/experimental/{ => workflow}/transport/grpc/grpc_channel_options.py (100%) create mode 100644 openfl/experimental/workflow/utilities/__init__.py rename openfl/experimental/{ => workflow}/utilities/exceptions.py (100%) rename openfl/experimental/{ => workflow}/utilities/metaflow_utils.py (99%) rename openfl/experimental/{ => workflow}/utilities/resources.py (93%) rename openfl/experimental/{ => workflow}/utilities/runtime_utils.py (98%) rename openfl/experimental/{ => workflow}/utilities/stream_redirect.py (97%) rename openfl/experimental/{ => workflow}/utilities/transitions.py (100%) rename openfl/experimental/{ => workflow}/utilities/ui.py (96%) create mode 100644 openfl/experimental/workflow/workspace_export/__init__.py rename openfl/experimental/{ => workflow}/workspace_export/export.py (97%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/test_experimental_agg_based_workflow.py (85%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/plan/defaults (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/plan/plan.yaml (82%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/src/collaborator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/src/testflow_datastore_cli.py (98%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_datastore_cli/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/plan/defaults (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/src/testflow_include_exclude.py (98%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_include_exclude/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/plan/defaults (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/src/testflow_internalloop.py (97%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_internalloop/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/plan/defaults (100%) rename tests/github/experimental/{workspace/testcase_private_attributes_initialization_without_callable => workflow/AggregatorBasedWorkflow/testcase_private_attributes}/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/src/aggregator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/src/collaborator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/src/testflow_privateattributes.py (97%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/plan/defaults (100%) rename tests/github/experimental/{workspace/testcase_private_attributes => workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options}/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/src/aggregator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/src/collaborator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/src/testflow_privateattributes.py (97%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_with_both_options/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/plan/defaults (100%) rename tests/github/experimental/{workspace/testcase_private_attributes_initialization_with_both_options => workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable}/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/src/aggregator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/src/collaborator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/src/testflow_privateattributes.py (97%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_private_attributes_initialization_without_callable/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/plan/defaults (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/plan/plan.yaml (78%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/src/collaborator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/src/testflow_reference.py (98%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/plan/defaults (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/src/testflow_reference_with_include_exclude.py (98%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_reference_with_include_exclude/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/plan/defaults (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/src/collaborator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/src/testflow_subset_of_collaborators.py (96%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_subset_of_collaborators/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/plan/cols.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/plan/data.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/plan/defaults (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/plan/plan.yaml (79%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/requirements.txt (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/src/__init__.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/src/aggregator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/src/collaborator_private_attrs.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/src/testflow_participant_name.py (97%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/testcase_validate_particpant_names/src/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/utils.py (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/workspace/.workspace (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/workspace/__init__.py (100%) create mode 100644 tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml create mode 100644 tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/workspace/plan/defaults/network.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/workspace/plan/plans/default/base_plan_interactive_api.yaml (100%) rename tests/github/experimental/{workspace => workflow/AggregatorBasedWorkflow}/workspace/plan/plans/default/plan.yaml (100%) rename tests/github/experimental/{ => workflow/LocalRuntime}/requirements_experimental_localruntime_tests.txt (100%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_datastore_cli.py (98%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_exclude.py (96%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_include.py (96%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_include_exclude.py (97%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_internalloop.py (96%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_privateattributes.py (97%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_privateattributes_initialization_with_both_options.py (97%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_privateattributes_initialization_without_callable.py (97%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_reference.py (98%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_reference_with_exclude.py (97%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_reference_with_include.py (97%) rename tests/github/experimental/{ => workflow/LocalRuntime}/testflow_subset_of_collaborators.py (95%) delete mode 100644 tests/github/experimental/workspace/workspace/plan/defaults/aggregator.yaml delete mode 100644 tests/github/experimental/workspace/workspace/plan/defaults/collaborator.yaml diff --git a/.github/workflows/experimental_workflow_tests.yml b/.github/workflows/experimental_workflow_tests.yml index ab039e5e52..40a85d2a89 100644 --- a/.github/workflows/experimental_workflow_tests.yml +++ b/.github/workflows/experimental_workflow_tests.yml @@ -24,63 +24,63 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r tests/github/experimental/requirements_experimental_localruntime_tests.txt + pip install -r tests/github/experimental/workflow/LocalRuntime/requirements_experimental_localruntime_tests.txt pip install . - name: Workflow - Exclude Test (Single Process Backend) run: | - python tests/github/experimental/testflow_exclude.py + python tests/github/experimental/workflow/LocalRuntime/testflow_exclude.py - name: Workflow - Exclude Test (Ray Backend) run: | - python tests/github/experimental/testflow_exclude.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_exclude.py ray - name: Workflow - Include Test (Single Process Backend) run: | - python tests/github/experimental/testflow_include.py + python tests/github/experimental/workflow/LocalRuntime/testflow_include.py - name: Workflow - Include Test (Ray Backend) run: | - python tests/github/experimental/testflow_include.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_include.py ray - name: Workflow - Include / Exclude Test (Single Process Backend) run: | - python tests/github/experimental/testflow_include_exclude.py + python tests/github/experimental/workflow/LocalRuntime/testflow_include_exclude.py - name: Workflow - Include / Exclude Test (Ray Backend) run: | - python tests/github/experimental/testflow_include_exclude.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_include_exclude.py ray - name: Workflow - Internal Loop Test (Single Process Backend) run: | - python tests/github/experimental/testflow_internalloop.py + python tests/github/experimental/workflow/LocalRuntime/testflow_internalloop.py - name: Workflow - Internal Loop Test (Ray Backend) run: | - python tests/github/experimental/testflow_internalloop.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_internalloop.py ray - name: Workflow - Private Attributes (Single Process Backend) run: | - python tests/github/experimental/testflow_privateattributes.py + python tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes.py - name: Workflow - Private Attributes (Ray Backend) run: | - python tests/github/experimental/testflow_privateattributes.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes.py ray - name: Workflow - References (Single Process Backend) run: | - python tests/github/experimental/testflow_reference.py + python tests/github/experimental/workflow/LocalRuntime/testflow_reference.py - name: Workflow - References (Ray Backend) run: | - python tests/github/experimental/testflow_reference.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_reference.py ray - name: Workflow - References with Exclude (Single Process Backend) run: | - python tests/github/experimental/testflow_reference_with_exclude.py + python tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_exclude.py - name: Workflow - References with Exclude (Ray Backend) run: | - python tests/github/experimental/testflow_reference_with_exclude.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_exclude.py ray - name: Workflow - References with Include (Single Process Backend) run: | - python tests/github/experimental/testflow_reference_with_include.py + python tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_include.py - name: Workflow - References with Include (Ray Backend) run: | - python tests/github/experimental/testflow_reference_with_include.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_include.py ray - name: Workflow - Collaborator Subset (Single Process Backend) run: | - python tests/github/experimental/testflow_subset_of_collaborators.py + python tests/github/experimental/workflow/LocalRuntime/testflow_subset_of_collaborators.py - name: Workflow - Collaborator Subset (Ray Backend) run: | - python tests/github/experimental/testflow_subset_of_collaborators.py ray + python tests/github/experimental/workflow/LocalRuntime/testflow_subset_of_collaborators.py ray - name: Test Experimental Aggregator Based Workflow API run: | - python -m tests.github.experimental.workspace.test_experimental_agg_based_workflow --custom_template tests/github/experimental/workspace/testcase_datastore_cli --fed_workspace aggregator --col col1 --col col2 --rounds-to-train 1 + python -m tests.github.experimental.workflow.AggregatorBasedWorkflow.test_experimental_agg_based_workflow --custom_template tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli --fed_workspace aggregator --col col1 --col col2 --rounds-to-train 1 diff --git a/.github/workflows/workflow_interface_101_mnist.yml b/.github/workflows/workflow_interface_101_mnist.yml index a980d1088d..b7764ab302 100644 --- a/.github/workflows/workflow_interface_101_mnist.yml +++ b/.github/workflows/workflow_interface_101_mnist.yml @@ -36,11 +36,11 @@ jobs: - name: Run Notebook run: | - jupyter nbconvert --execute --to notebook ./openfl-tutorials/experimental/101_MNIST.ipynb + jupyter nbconvert --execute --to notebook ./openfl-tutorials/experimental/workflow/101_MNIST.ipynb echo "Notebook run completed" - name: Tar files - run: tar -cvf notebook.tar ./openfl-tutorials/experimental/101_MNIST.nbconvert.ipynb + run: tar -cvf notebook.tar ./openfl-tutorials/experimental/workflow/101_MNIST.nbconvert.ipynb - name: Upload Artifacts uses: actions/upload-artifact@v4 diff --git a/README.md b/README.md index a16962cca9..f1e07aabbe 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ OpenFL supports two APIs to set up a Federated Learning experiment: Define an experiment and distribute it manually. All participants can verify model code and [FL plan](https://openfl.readthedocs.io/en/latest/about/features_index/taskrunner.html#federated-learning-plan-fl-plan-settings) prior to execution. The federation is terminated when the experiment is finished. This API is meant for enterprise-grade FL experiments, including support for mTLS-based communication channels and TEE-ready nodes (based on Intel® SGX). - [Workflow API](https://openfl.readthedocs.io/en/latest/about/features_index/workflowinterface.html) ([*experimental*](https://openfl.readthedocs.io/en/latest/developer_guide/experimental_features.html)): -Create complex experiments that extend beyond traditional horizontal federated learning. This API enables an experiment to be simulated locally, then seamlessly scaled to a federated setting. See the [experimental tutorials](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/) to learn how to coordinate [aggregator validation after collaborator model training](https://github.com/securefederatedai/openfl/tree/develop/openfl-tutorials/experimental/102_Aggregator_Validation.ipynb), [perform global differentially private federated learning](https://github.com/psfoley/openfl/tree/experimental-workflow-interface/openfl-tutorials/experimental/Global_DP), measure the amount of private information embedded in a model after collaborator training with [privacy meter](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/Privacy_Meter/readme.md), or [add a watermark to a federated model](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/301_MNIST_Watermarking.ipynb). +Create complex experiments that extend beyond traditional horizontal federated learning. This API enables an experiment to be simulated locally, then seamlessly scaled to a federated setting. See the [experimental tutorials](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/workflow/) to learn how to coordinate [aggregator validation after collaborator model training](https://github.com/securefederatedai/openfl/tree/develop/openfl-tutorials/experimental/workflow/102_Aggregator_Validation.ipynb), [perform global differentially private federated learning](https://github.com/psfoley/openfl/tree/experimental-workflow-interface/openfl-tutorials/experimental/workflow/Global_DP), measure the amount of private information embedded in a model after collaborator training with [privacy meter](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/workflow/Privacy_Meter/readme.md), or [add a watermark to a federated model](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/workflow/301_MNIST_Watermarking.ipynb). The quickest way to test OpenFL is to follow the [online documentation](https://openfl.readthedocs.io/en/latest/index.html) to launch your first federation.
Read the [blog post](https://medium.com/openfl/from-centralized-machine-learning-to-federated-learning-with-openfl-b3e61da52432) explaining steps to train a model with OpenFL.
diff --git a/docs/about/features_index/privacy_meter.rst b/docs/about/features_index/privacy_meter.rst index f668960338..d911eff416 100644 --- a/docs/about/features_index/privacy_meter.rst +++ b/docs/about/features_index/privacy_meter.rst @@ -22,7 +22,7 @@ In this threat model, each party can audit the privacy loss of the local and glo Workflow ----------------------------------------------- -We provide a demo code in `cifar10_PM.py `_. Here, we briefly describe its workflow. +We provide a demo code in `cifar10_PM.py `_. Here, we briefly describe its workflow. In each round of FL, parties train, starting with the current global model as initialization, using their local dataset. Then, the current global model and updated local model will be passed to the privacy auditing module (See `audit` function in `cifar10_PM.py`) to produce a privacy loss report. The local model update will then be shared to the server and all such updates aggregated to form the next global model. Though this is a simulation so that no network sharing of models is involved, these reports could be used in a fully distributed setting to trigger actions when the loss is too high. These actions could include not sharing local updates to the aggregator, not allowing the FL system to release the model to other outside entities, or potentially re-running local training in a differentially private mode and re-auditing in an attempt to reduce the leakage before sharing occurs. @@ -36,4 +36,4 @@ To measure the success of the attack (privacy loss), we generate the ROC of the Examples ----------------------------------------------- -`Here `_, we give a few commands and the results for each of them. \ No newline at end of file +`Here `_, we give a few commands and the results for each of them. \ No newline at end of file diff --git a/docs/about/releases.md b/docs/about/releases.md index 22ffc7443b..1efec6438c 100644 --- a/docs/about/releases.md +++ b/docs/about/releases.md @@ -6,12 +6,12 @@ ### New Features and APIs: - **Federated LLM fine-tuning**: - [**Horovod**](https://github.com/securefederatedai/openfl/tree/develop/openfl-workspace/torch_llm_horovod): Use horovod to efficiently train LLMs across multiple private clusters - - **Neuralchat-7b fine-tuning**: Learn how to fine-tune [neuralchat-7b](https://github.com/securefederatedai/openfl/tree/develop/openfl-tutorials/experimental/LLM/neuralchat) using the Intel® Extension for Transformers and the workflow interface. + - **Neuralchat-7b fine-tuning**: Learn how to fine-tune [neuralchat-7b](https://github.com/securefederatedai/openfl/tree/develop/openfl-tutorials/experimental/workflow/LLM/neuralchat) using the Intel® Extension for Transformers and the workflow interface. -- **Workflow API enhancements**: Introducing an experimental [Workspace Export](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/1001_Workspace_Creation_from_JupyterNotebook.ipynb) feature that can be used to transform a Workflow API-based FL experiment into the TaskRunner API format for running in a distributed deployment. There is also groundwork laid for a future FederatedRuntime implementation for Workflow API, in addition to the currently supported LocalRuntime. +- **Workflow API enhancements**: Introducing an experimental [Workspace Export](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/workflow/1001_Workspace_Creation_from_JupyterNotebook.ipynb) feature that can be used to transform a Workflow API-based FL experiment into the TaskRunner API format for running in a distributed deployment. There is also groundwork laid for a future FederatedRuntime implementation for Workflow API, in addition to the currently supported LocalRuntime. - **Federated Evaluation**: Federated evaluation allows for the assessment of ML models in a federated learning system by validating the model's performance locally on decentralized collaborator nodes, and then aggregating these metrics to gauge overall effectiveness, without compromising data privacy and security. FE is now officially supported by OpenFL, including [example tutorials](https://openfl.readthedocs.io/en/latest/about/features_index/fed_eval.html) on how to use this new feature (via TaskRunner API). -- **Expanded AI Accelerator Support**: Intel® Data Center GPU Max Series support via the Intel® Extension for PyTorch, including examples for training on datasets such as [MNIST](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/104_MNIST_XPU.ipynb) (via Workflow API) and [TinyImageNet](https://github.com/securefederatedai/openfl/tree/main/openfl-tutorials/deprecated/interactive_api/PyTorch_TinyImageNet_XPU) (via Interactive API) +- **Expanded AI Accelerator Support**: Intel® Data Center GPU Max Series support via the Intel® Extension for PyTorch, including examples for training on datasets such as [MNIST](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/workflow/104_MNIST_XPU.ipynb) (via Workflow API) and [TinyImageNet](https://github.com/securefederatedai/openfl/tree/main/openfl-tutorials/deprecated/interactive_api/PyTorch_TinyImageNet_XPU) (via Interactive API) - **Improved straggler collaborator handling**: Improvements and bug fixes to aggregator’s fault-tolerance when collaborators stop responding or drop out of a federation. Introducing a cut-off timer-based policy and enabling other policies to be plugged-in. This capability is particularly relevant for large or geo-distributed federations. @@ -19,7 +19,7 @@ ### Highlighting Community Research -- **Mitigating backdoor attacks in FL** - [Workflow API example](https://github.com/securefederatedai/openfl/tree/develop/openfl-tutorials/experimental/CrowdGuard) contributed by @perieger (TU Darmstadt) demonstrates how [Crowdguard](https://github.com/TRUST-TUDa/crowdguard) can be used to leverage clients' feedback on individual models, analyze the behavior of neurons in hidden layers, and eliminate poisoned models through an iterative pruning scheme. +- **Mitigating backdoor attacks in FL** - [Workflow API example](https://github.com/securefederatedai/openfl/tree/develop/openfl-tutorials/experimental/workflow/CrowdGuard) contributed by @perieger (TU Darmstadt) demonstrates how [Crowdguard](https://github.com/TRUST-TUDa/crowdguard) can be used to leverage clients' feedback on individual models, analyze the behavior of neurons in hidden layers, and eliminate poisoned models through an iterative pruning scheme. ### Enhanced Documentation: @@ -49,11 +49,11 @@ We are excited to announce the release of OpenFL 1.5.1 - our first since moving ### 1.5 Highlights * **New Workflows Interface (Experimental)** - a new way of composing federated learning experiments inspired by [Metaflow](https://github.com/Netflix/metaflow). Enables the creation of custom aggregator and collaborators tasks. This initial release is intended for simulation on a single node (using the LocalRuntime); distributed execution (FederatedRuntime) to be enabled in a future release. * **New use cases enabled by the workflow interface**: - * **[End-of-round validation with aggregator dataset](https://github.com/intel/openfl/blob/develop/openfl-tutorials/experimental/102_Aggregator_Validation.ipynb)** - * **[Privacy Meter](https://github.com/intel/openfl/tree/develop/openfl-tutorials/experimental/Privacy_Meter)** - Privacy meter, based on state-of-the-art membership inference attacks, provides a tool to quantitatively audit data privacy in statistical and machine learning algorithms. The objective of a membership inference attack is to determine whether a given data record was in the training dataset of the target model. Measures of success (accuracy, area under the ROC curve, true positive rate at a given false positive rate ...) for particular membership inference attacks against a target model are used to estimate privacy loss for that model (how much information a target model leaks about its training data). Since stronger attacks may be possible, these measures serve as lower bounds of the actual privacy loss. The Privacy Meter workflow example generates privacy loss reports for all party's local model updates as well as the global models throughout all rounds of the FL training. - * **[Vertical Federated Learning Examples](https://github.com/intel/openfl/tree/develop/openfl-tutorials/experimental/Vertical_FL)** - * **[Federated Model Watermarking](https://github.com/intel/openfl/blob/develop/openfl-tutorials/experimental/301_MNIST_Watermarking.ipynb)** using the [WAFFLE](https://arxiv.org/pdf/2008.07298.pdf) method - * **[Differential Privacy](https://github.com/intel/openfl/tree/develop/openfl-tutorials/experimental/Global_DP)** – Global differentially private federated learning using Opacus library to achieve a differentially private result w.r.t the inclusion or exclusion of any collaborator in the training process. At each round, a subset of collaborators are selected using a Poisson distribution over all collaborators, the selected collaborators perform local training with periodic clipping of their model delta (with respect to the current global model) to bound their contribution to the average of local model updates. Gaussian noise is then added to the average of these local models at the aggregator. This example is implemented in two different but statistically equivalent ways – the lower level API utilizes RDPAccountant and DPDataloader Opacus objects to perform privacy accounting and collaborator selection respectively, whereas the higher level API uses PrivacyEngine Opacus object for collaborator selection and internally utilizes RDPAccountant for privacy accounting. + * **[End-of-round validation with aggregator dataset](https://github.com/intel/openfl/blob/develop/openfl-tutorials/experimental/workflow/102_Aggregator_Validation.ipynb)** + * **[Privacy Meter](https://github.com/intel/openfl/tree/develop/openfl-tutorials/experimental/workflow/Privacy_Meter)** - Privacy meter, based on state-of-the-art membership inference attacks, provides a tool to quantitatively audit data privacy in statistical and machine learning algorithms. The objective of a membership inference attack is to determine whether a given data record was in the training dataset of the target model. Measures of success (accuracy, area under the ROC curve, true positive rate at a given false positive rate ...) for particular membership inference attacks against a target model are used to estimate privacy loss for that model (how much information a target model leaks about its training data). Since stronger attacks may be possible, these measures serve as lower bounds of the actual privacy loss. The Privacy Meter workflow example generates privacy loss reports for all party's local model updates as well as the global models throughout all rounds of the FL training. + * **[Vertical Federated Learning Examples](https://github.com/intel/openfl/tree/develop/openfl-tutorials/experimental/workflow/Vertical_FL)** + * **[Federated Model Watermarking](https://github.com/intel/openfl/blob/develop/openfl-tutorials/experimental/workflow/301_MNIST_Watermarking.ipynb)** using the [WAFFLE](https://arxiv.org/pdf/2008.07298.pdf) method + * **[Differential Privacy](https://github.com/intel/openfl/tree/develop/openfl-tutorials/experimental/workflow/Global_DP)** – Global differentially private federated learning using Opacus library to achieve a differentially private result w.r.t the inclusion or exclusion of any collaborator in the training process. At each round, a subset of collaborators are selected using a Poisson distribution over all collaborators, the selected collaborators perform local training with periodic clipping of their model delta (with respect to the current global model) to bound their contribution to the average of local model updates. Gaussian noise is then added to the average of these local models at the aggregator. This example is implemented in two different but statistically equivalent ways – the lower level API utilizes RDPAccountant and DPDataloader Opacus objects to perform privacy accounting and collaborator selection respectively, whereas the higher level API uses PrivacyEngine Opacus object for collaborator selection and internally utilizes RDPAccountant for privacy accounting. * **[Habana Accelerator Support](https://github.com/securefederatedai/openfl/tree/main/openfl-tutorials/deprecated/interactive_api/HPU/PyTorch_TinyImageNet)** * **Official support for Python 3.9 and 3.10** * **[EDEN Compression Pipeline](https://github.com/intel/openfl/blob/develop/openfl/pipelines/eden_pipeline.py)**: Communication-Efficient and Robust Distributed Mean Estimation for Federated Learning ([paper link](https://proceedings.mlr.press/v162/vargaftik22a.html)) diff --git a/docs/get_started/examples/workflowinterface_pytorch_mnist.rst b/docs/get_started/examples/workflowinterface_pytorch_mnist.rst index 7a603cecb6..c6805418be 100644 --- a/docs/get_started/examples/workflowinterface_pytorch_mnist.rst +++ b/docs/get_started/examples/workflowinterface_pytorch_mnist.rst @@ -17,7 +17,7 @@ This tutorial introduces the API to get up and running with your first horizonta - Aims for syntatic consistency with the Netflix MetaFlow project. Infrastructure reuse where possible. -See `full notebook `_. +See `full notebook `_. **What is it?** The workflow interface is a new way of composing federated learning experiments with |productName|. @@ -127,9 +127,9 @@ Next we import the FLSpec, LocalRuntime, and placement decorators. from copy import deepcopy - from openfl.experimental.interface import FLSpec, Aggregator, Collaborator - from openfl.experimental.runtime import LocalRuntime - from openfl.experimental.placement import aggregator, collaborator + from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator + from openfl.experimental.workflow.runtime import LocalRuntime + from openfl.experimental.workflow.placement import aggregator, collaborator def FedAvg(models, weights=None): @@ -376,7 +376,7 @@ Now let's look at its log output (stdout) and any error logs (stderr) **Congratulations!** Now that you've completed your first workflow interface quickstart notebook, -see some of the more advanced things you can do in our other `tutorials `_, including: +see some of the more advanced things you can do in our other `tutorials `_, including: - Using the LocalRuntime Ray Backend for dedicated GPU access - Vertical Federated Learning diff --git a/docs/source/api/openfl_experimental.rst b/docs/source/api/openfl_experimental.rst index 01fbb0fcee..907645686d 100644 --- a/docs/source/api/openfl_experimental.rst +++ b/docs/source/api/openfl_experimental.rst @@ -12,7 +12,7 @@ Experimental modules reference: :template: custom-module-template.rst :recursive: - openfl.experimental.interface - openfl.experimental.placement - openfl.experimental.runtime - openfl.experimental.utilities + openfl.experimental.workflow.interface + openfl.experimental.workflow.placement + openfl.experimental.workflow.runtime + openfl.experimental.workflow.utilities diff --git a/openfl-tutorials/experimental/CrowdGuard/PoisoningAttackDemoReduced.ipynb b/openfl-tutorials/experimental/CrowdGuard/PoisoningAttackDemoReduced.ipynb deleted file mode 100644 index 167bfe6fa1..0000000000 --- a/openfl-tutorials/experimental/CrowdGuard/PoisoningAttackDemoReduced.ipynb +++ /dev/null @@ -1,1443 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "4bec0e77", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Aggregator step \"start\" registered\n", - "Collaborator step \"train\" registered\n", - "Aggregator step \"fed_avg_aggregation\" registered\n", - "Aggregator step \"collect_models\" registered\n", - "Collaborator step \"local_validation\" registered\n", - "Aggregator step \"defend\" registered\n", - "Aggregator step \"end\" registered\n" - ] - } - ], - "source": [ - "# Copyright (C) 2022-2024 TU Darmstadt\n", - "# SPDX-License-Identifier: Apache-2.0\n", - "\n", - "# -----------------------------------------------------------\n", - "# Primary author: Phillip Rieger \n", - "# Co-authored-by: Torsten Krauss \n", - "# ------------------------------------------------------------\n", - "\n", - "import argparse\n", - "import os\n", - "import pickle\n", - "import time\n", - "import warnings\n", - "from copy import deepcopy\n", - "from datetime import datetime\n", - "\n", - "import numpy as np\n", - "import torch\n", - "import torch.nn as nn\n", - "from torch.utils.data import TensorDataset\n", - "import torch.optim as optim\n", - "from torchvision import transforms, datasets\n", - "from sklearn.cluster import AgglomerativeClustering, DBSCAN\n", - "\n", - "from CrowdGuardClientValidation import CrowdGuardClientValidation\n", - "from openfl.experimental.interface import Aggregator, Collaborator, FLSpec\n", - "from openfl.experimental.placement import aggregator, collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from cifar10_crowdguard import MEAN, STD_DEV, poison_data, seed_random_generators\n", - "from cifar10_crowdguard import BATCH_SIZE_TRAIN, BATCH_SIZE_TEST, Net, test, default_optimizer\n", - "from cifar10_crowdguard import FederatedFlow\n", - "from cifar10_crowdguard import PRETRAINED_MODEL_FILE, download_pretrained_model\n", - "warnings.filterwarnings(\"ignore\")" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "94098847", - "metadata": {}, - "outputs": [], - "source": [ - "TOTAL_CLIENT_NUMBER = 4\n", - "PMR = 0.25\n", - "NUMBER_OF_MALICIOUS_CLIENTS = max(1, int(TOTAL_CLIENT_NUMBER * PMR)) if PMR > 0 else 0\n", - "NUMBER_OF_BENIGN_CLIENTS = TOTAL_CLIENT_NUMBER - NUMBER_OF_MALICIOUS_CLIENTS\n", - "NUMBER_OF_ROUNDS = 10" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "f0107812", - "metadata": {}, - "outputs": [], - "source": [ - "class CommandLineArgumentSimulator:\n", - " \n", - " def __init__(self):\n", - " self.test_dataset_ratio = 0.4\n", - " self.train_dataset_ratio = 0.4\n", - " self.log_dir = 'test_debug'\n", - " self.comm_round = NUMBER_OF_ROUNDS\n", - " self.flow_internal_loop_test=False\n", - " self.optimizer_type = 'SGD'\n", - " \n", - "args = CommandLineArgumentSimulator()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "fd18c0b3", - "metadata": {}, - "outputs": [], - "source": [ - "download_pretrained_model()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "5d8950eb", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files already downloaded and verified\n", - "Files already downloaded and verified\n" - ] - } - ], - "source": [ - "aggregator_object = Aggregator()\n", - "aggregator_object.private_attributes = {}\n", - "collaborator_names = [f'benign_{i:02d}' for i in range(NUMBER_OF_BENIGN_CLIENTS)] + [f'malicious_{i:02d}' for i in range(NUMBER_OF_MALICIOUS_CLIENTS)] \n", - "collaborators = [Collaborator(name=name) for name in collaborator_names]\n", - "if torch.cuda.is_available():\n", - " device = torch.device(\n", - " \"cuda:1\"\n", - " ) # This will enable Ray library to reserve available GPU(s) for the task\n", - "else:\n", - " device = torch.device(\"cpu\")\n", - "\n", - "transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize(MEAN, STD_DEV),])\n", - "\n", - "cifar_train = datasets.CIFAR10(root=\"./data\", train=True, download=True, transform=transform)\n", - "cifar_train = [x for x in cifar_train]\n", - "cifar_test = datasets.CIFAR10(root=\"./data\", train=False, download=True, transform=transform)\n", - "cifar_test = [x for x in cifar_test]\n", - "X = torch.stack([x[0] for x in cifar_train] + [x[0] for x in cifar_test])\n", - "Y = torch.LongTensor(np.stack(np.array([x[1] for x in cifar_train] + [x[1] for x in cifar_test])))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "e92f0205", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset info (total 60000): train - 24000, test - 24000, \n" - ] - } - ], - "source": [ - "seed_random_generators(0)\n", - "shuffled_indices = np.arange(X.shape[0])\n", - "np.random.shuffle(shuffled_indices)\n", - "\n", - "N_total_samples = len(cifar_test) + len(cifar_train)\n", - "train_dataset_size = int(N_total_samples * args.train_dataset_ratio)\n", - "test_dataset_size = int(N_total_samples * args.test_dataset_ratio)\n", - "X = X[shuffled_indices]\n", - "Y = Y[shuffled_indices]\n", - "\n", - "train_dataset_data = X[:train_dataset_size]\n", - "train_dataset_targets = Y[:train_dataset_size]\n", - "\n", - "test_dataset_data = X[train_dataset_size:train_dataset_size + test_dataset_size]\n", - "test_dataset_targets = Y[train_dataset_size:train_dataset_size + test_dataset_size]\n", - "print(f\"Dataset info (total {N_total_samples}): train - {test_dataset_targets.shape[0]}, \"\n", - " f\"test - {test_dataset_targets.shape[0]}, \")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "d47aca7e", - "metadata": {}, - "outputs": [], - "source": [ - "for idx, collab in enumerate(collaborators):\n", - " # construct the training and test and population dataset\n", - " benign_training_X = train_dataset_data[idx::len(collaborators)]\n", - " benign_training_Y = train_dataset_targets[idx::len(collaborators)]\n", - " \n", - " if 'malicious' in collab.name:\n", - " local_train_data, local_train_targets = poison_data(benign_training_X, benign_training_Y)\n", - " else:\n", - " local_train_data, local_train_targets = benign_training_X, benign_training_Y\n", - " \n", - "\n", - " local_test_data = test_dataset_data[idx::len(collaborators)]\n", - " local_test_targets = test_dataset_targets[idx::len(collaborators)]\n", - " \n", - "\n", - " poison_test_data, poison_test_targets = poison_data(local_test_data, local_test_targets,\n", - " pdr=1.0)\n", - "\n", - " collab.private_attributes = {\n", - " \"train_loader\": torch.utils.data.DataLoader(\n", - " TensorDataset(local_train_data, local_train_targets),\n", - " batch_size=BATCH_SIZE_TRAIN, shuffle=True\n", - " ),\n", - " \"test_loader\": torch.utils.data.DataLoader(\n", - " TensorDataset(local_test_data, local_test_targets),\n", - " batch_size=BATCH_SIZE_TEST, shuffle=False\n", - " ),\n", - " \"backdoor_test_loader\": torch.utils.data.DataLoader(\n", - " TensorDataset(poison_test_data, poison_test_targets),\n", - " batch_size=BATCH_SIZE_TEST, shuffle=False\n", - " ),\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "16c46575", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Benign Train set: Avg. loss: 3.3837500759895813, Accuracy: 2083/6000 (34.717%)\n", - "Benign Test set: Avg. loss: 0.9973345994949341, Accuracy: 3768/6000 (62.800%)\n", - "Backdoor Test set: Avg. loss: 5.72957197825114, Accuracy: 325/6000 (5.417%)\n" - ] - }, - { - "data": { - "text/plain": [ - "0.05416666716337204" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pretrained_weights = torch.load(PRETRAINED_MODEL_FILE, map_location=device)\n", - "test_model = Net().to(device)\n", - "test_model.load_state_dict(pretrained_weights)\n", - "test(test_model, collab.private_attributes['train_loader'], device, test_train='Train')\n", - "test(test_model, collab.private_attributes['test_loader'], device)\n", - "test(test_model, collab.private_attributes['backdoor_test_loader'], device, mode='Backdoor')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "5e9721c1", - "metadata": { - "scrolled": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Local runtime collaborators = ['benign_00', 'benign_01', 'benign_02', 'malicious_00']\n", - "####################\n", - "Round 0...\n", - "####################\n", - "\n", - "Calling start\n", - "Performing initialization for model\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 0\n", - "Benign Train set: Avg. loss: 0.9885769543495584, Accuracy: 3790/6000 (63.16666603088379%)\n", - "Benign Test set: Avg. loss: 1.001497248808543, Accuracy: 3761/6000 (62.68333196640015%)\n", - "Backdoor Test set: Avg. loss: 5.7991689046223955, Accuracy: 330/6000 (5.499999970197678%)\n", - "Benign Train set: Avg. loss: 1.0561292523399313, Accuracy: 3597/6000 (59.950000047683716%)\n", - "Benign Test set: Avg. loss: 1.197381854057312, Accuracy: 3327/6000 (55.44999837875366%)\n", - "Backdoor Test set: Avg. loss: 5.618184248606364, Accuracy: 302/6000 (5.0333332270383835%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 0\n", - "Benign Train set: Avg. loss: 1.0144326242994754, Accuracy: 3744/6000 (62.40000128746033%)\n", - "Benign Test set: Avg. loss: 1.0136706431706746, Accuracy: 3713/6000 (61.88333034515381%)\n", - "Backdoor Test set: Avg. loss: 5.686683019002278, Accuracy: 315/6000 (5.249999836087227%)\n", - "Benign Train set: Avg. loss: 1.0219575502771012, Accuracy: 3705/6000 (61.75000071525574%)\n", - "Benign Test set: Avg. loss: 1.168825924396515, Accuracy: 3347/6000 (55.78333139419556%)\n", - "Backdoor Test set: Avg. loss: 4.57614795366923, Accuracy: 514/6000 (8.566666394472122%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 0\n", - "Benign Train set: Avg. loss: 0.9901170968375308, Accuracy: 3809/6000 (63.483333587646484%)\n", - "Benign Test set: Avg. loss: 0.9752019345760345, Accuracy: 3854/6000 (64.23333287239075%)\n", - "Backdoor Test set: Avg. loss: 5.79969318707784, Accuracy: 314/6000 (5.233333259820938%)\n", - "Benign Train set: Avg. loss: 0.9862309634051425, Accuracy: 3803/6000 (63.38333487510681%)\n", - "Benign Test set: Avg. loss: 1.1106985807418823, Accuracy: 3549/6000 (59.14999842643738%)\n", - "Backdoor Test set: Avg. loss: 6.382502635320027, Accuracy: 96/6000 (1.5999998897314072%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 0\n", - "Benign Train set: Avg. loss: 3.3836448154550918, Accuracy: 2083/6000 (34.716665744781494%)\n", - "Benign Test set: Avg. loss: 0.9973345994949341, Accuracy: 3768/6000 (62.800002098083496%)\n", - "Backdoor Test set: Avg. loss: 5.72957197825114, Accuracy: 325/6000 (5.416666716337204%)\n", - "Benign Train set: Avg. loss: 0.5883342332820943, Accuracy: 4751/6000 (79.18333411216736%)\n", - "Benign Test set: Avg. loss: 1.2542604207992554, Accuracy: 3293/6000 (54.883331060409546%)\n", - "Backdoor Test set: Avg. loss: 0.03580721157292525, Accuracy: 5985/6000 (99.75000023841858%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 0\n", - "Distance: cosine, use y 2: [3.139687311456905, 0.24390152941851007]\n", - "Distance: cosine, use x 2: [18.736333963895376, 0.2439015294185105]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.037936255947664144, 0.08153858333130248]\n", - "Distance: euclid, use x 2: [20.61820415899534, 0.037936255947664144]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 0\n", - "Distance: cosine, use y 2: [2.52111887454884, 0.3429832093794909]\n", - "Distance: cosine, use x 2: [19.02273590470069, 0.34298320937949045]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.05887220497062895, 0.4755074262107195]\n", - "Distance: euclid, use x 2: [20.471009787948905, 0.05887220497062895]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 0\n", - "Distance: cosine, use y 2: [1.5919269464334604, 0.696426347466276]\n", - "Distance: cosine, use x 2: [19.253468984032075, 0.696426347466276]\n", - "Distance: cosine, use y 1: [10.954451150103337]\n", - "Distance: cosine, use x 2: [10.954451150103331, 0.0]\n", - "Distance: euclid, use y 2: [0.0473784673111064, 0.6217562037526347]\n", - "Distance: euclid, use x 2: [20.414253777149813, 0.04737846731110551]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 0\n", - "Distance: cosine, use y 2: [1.586522424378272, 3.622045633352822]\n", - "Distance: cosine, use x 2: [15.88878766536782, 1.5865224243782723]\n", - "Distance: cosine, use y 1: [10.954451150103303]\n", - "Distance: cosine, use x 2: [10.954451150103333, 0.0]\n", - "Distance: euclid, use y 2: [1.3087604961220998, 2.2733504384252856]\n", - "Distance: euclid, use x 2: [16.46799567492959, 1.3087604961220998]\n", - "Distance: euclid, use y 1: [10.954451150103305]\n", - "Distance: euclid, use x 2: [10.954451150103354, 0.0]\n", - "Suspicious Models detected by 3: [0, 2]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 1/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 1\n", - "Benign Train set: Avg. loss: 0.9778860347702149, Accuracy: 3858/6000 (64.30000066757202%)\n", - "Benign Test set: Avg. loss: 1.0275444785753887, Accuracy: 3708/6000 (61.799997091293335%)\n", - "Backdoor Test set: Avg. loss: 5.126115083694458, Accuracy: 369/6000 (6.149999797344208%)\n", - "Benign Train set: Avg. loss: 1.055129660887921, Accuracy: 3531/6000 (58.85000228881836%)\n", - "Benign Test set: Avg. loss: 1.2361122767130535, Accuracy: 3223/6000 (53.716665506362915%)\n", - "Backdoor Test set: Avg. loss: 6.004116376241048, Accuracy: 266/6000 (4.43333312869072%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 1\n", - "Benign Train set: Avg. loss: 0.9974439695794531, Accuracy: 3841/6000 (64.01666402816772%)\n", - "Benign Test set: Avg. loss: 1.050683617591858, Accuracy: 3690/6000 (61.500000953674316%)\n", - "Backdoor Test set: Avg. loss: 5.031114816665649, Accuracy: 361/6000 (6.016666442155838%)\n", - "Benign Train set: Avg. loss: 1.0382162418137206, Accuracy: 3697/6000 (61.61666512489319%)\n", - "Benign Test set: Avg. loss: 1.172116796175639, Accuracy: 3390/6000 (56.49999976158142%)\n", - "Backdoor Test set: Avg. loss: 5.203440030415853, Accuracy: 127/6000 (2.1166667342185974%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 1\n", - "Benign Train set: Avg. loss: 0.9782646976886912, Accuracy: 3908/6000 (65.13333320617676%)\n", - "Benign Test set: Avg. loss: 1.0082112451394398, Accuracy: 3819/6000 (63.65000009536743%)\n", - "Backdoor Test set: Avg. loss: 5.111261924107869, Accuracy: 341/6000 (5.6833334267139435%)\n", - "Benign Train set: Avg. loss: 1.0318745732941526, Accuracy: 3704/6000 (61.73333525657654%)\n", - "Benign Test set: Avg. loss: 1.1651872595151265, Accuracy: 3457/6000 (57.616668939590454%)\n", - "Backdoor Test set: Avg. loss: 6.8470542430877686, Accuracy: 20/6000 (0.33333334140479565%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 1\n", - "Benign Train set: Avg. loss: 3.0500604871739734, Accuracy: 2085/6000 (34.74999964237213%)\n", - "Benign Test set: Avg. loss: 1.0224250356356304, Accuracy: 3771/6000 (62.849998474121094%)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Backdoor Test set: Avg. loss: 5.079943021138509, Accuracy: 371/6000 (6.183333322405815%)\n", - "Benign Train set: Avg. loss: 0.5856330990791321, Accuracy: 4701/6000 (78.35000157356262%)\n", - "Benign Test set: Avg. loss: 1.2663490772247314, Accuracy: 3113/6000 (51.883333921432495%)\n", - "Backdoor Test set: Avg. loss: 0.023603687683741253, Accuracy: 5993/6000 (99.88332986831665%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 1\n", - "Distance: cosine, use y 2: [4.425570297924237, 0.3427598443292488]\n", - "Distance: cosine, use x 2: [16.344858266211432, 0.34275984432924833]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.19457190016820558, 0.019510296358126844]\n", - "Distance: euclid, use x 2: [20.585892915372213, 0.019510296358126844]\n", - "Distance: euclid, use y 1: [10.95445115010333]\n", - "Distance: euclid, use x 2: [10.954451150103331, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 1\n", - "Distance: cosine, use y 2: [2.801438809103918, 0.9144500874639174]\n", - "Distance: cosine, use x 2: [17.0218502598279, 0.914450087463917]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.15236963958841976, 0.008001295032160627]\n", - "Distance: euclid, use x 2: [20.60343664068541, 0.008001295032160627]\n", - "Distance: euclid, use y 1: [10.954451150103315]\n", - "Distance: euclid, use x 2: [10.954451150103319, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 1\n", - "Distance: cosine, use y 2: [0.8950936094280646, 3.8962927324545014]\n", - "Distance: cosine, use x 2: [14.828649175189087, 0.895093609428065]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.13459560982305163, 0.04044234360506671]\n", - "Distance: euclid, use x 2: [20.602988399691313, 0.04044234360506582]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.95445115010333, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 1\n", - "Distance: cosine, use y 2: [0.10531291572774401, 9.719286605534212]\n", - "Distance: cosine, use x 2: [10.18847609917082, 0.10531291572774402]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.5068797928668665, 9.141204145247993]\n", - "Distance: euclid, use x 2: [12.191430763432086, 0.5068797928668665]\n", - "Distance: euclid, use y 1: [10.954451150103322]\n", - "Distance: euclid, use x 2: [10.954451150103337, 0.0]\n", - "Suspicious Models detected by 3: [0]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 2/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 2\n", - "Benign Train set: Avg. loss: 0.9301359200097145, Accuracy: 3988/6000 (66.46666526794434%)\n", - "Benign Test set: Avg. loss: 1.0193569262822468, Accuracy: 3759/6000 (62.65000104904175%)\n", - "Backdoor Test set: Avg. loss: 5.6510575612386065, Accuracy: 197/6000 (3.283333405852318%)\n", - "Benign Train set: Avg. loss: 0.8698681494657029, Accuracy: 4072/6000 (67.86666512489319%)\n", - "Benign Test set: Avg. loss: 1.0671072800954182, Accuracy: 3640/6000 (60.66666841506958%)\n", - "Backdoor Test set: Avg. loss: 6.187037706375122, Accuracy: 171/6000 (2.850000001490116%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 2\n", - "Benign Train set: Avg. loss: 0.9605293927040506, Accuracy: 3932/6000 (65.53333401679993%)\n", - "Benign Test set: Avg. loss: 1.0264412760734558, Accuracy: 3763/6000 (62.71666884422302%)\n", - "Backdoor Test set: Avg. loss: 5.560268004735311, Accuracy: 186/6000 (3.099999949336052%)\n", - "Benign Train set: Avg. loss: 0.9960020336698978, Accuracy: 3756/6000 (62.59999871253967%)\n", - "Benign Test set: Avg. loss: 1.1556094487508137, Accuracy: 3446/6000 (57.43333101272583%)\n", - "Backdoor Test set: Avg. loss: 5.153351465861003, Accuracy: 652/6000 (10.866666585206985%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 2\n", - "Benign Train set: Avg. loss: 0.9454977268234213, Accuracy: 3980/6000 (66.33332967758179%)\n", - "Benign Test set: Avg. loss: 1.0062820414702098, Accuracy: 3797/6000 (63.28333020210266%)\n", - "Backdoor Test set: Avg. loss: 5.6208906173706055, Accuracy: 200/6000 (3.333333134651184%)\n", - "Benign Train set: Avg. loss: 0.9145594096564232, Accuracy: 4006/6000 (66.76666736602783%)\n", - "Benign Test set: Avg. loss: 1.064531107743581, Accuracy: 3645/6000 (60.750001668930054%)\n", - "Backdoor Test set: Avg. loss: 6.3380054632822675, Accuracy: 148/6000 (2.4666666984558105%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 2\n", - "Benign Train set: Avg. loss: 3.3212531792356614, Accuracy: 2006/6000 (33.43333303928375%)\n", - "Benign Test set: Avg. loss: 1.0044313569863637, Accuracy: 3837/6000 (63.95000219345093%)\n", - "Backdoor Test set: Avg. loss: 5.585842609405518, Accuracy: 199/6000 (3.3166665583848953%)\n", - "Benign Train set: Avg. loss: 0.5776876041546781, Accuracy: 4669/6000 (77.8166651725769%)\n", - "Benign Test set: Avg. loss: 1.275720755259196, Accuracy: 3109/6000 (51.81666612625122%)\n", - "Backdoor Test set: Avg. loss: 0.011549354065209627, Accuracy: 5986/6000 (99.76666569709778%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 2\n", - "Distance: cosine, use y 2: [2.090019121577491, 0.5250757335236536]\n", - "Distance: cosine, use x 2: [19.14903846235277, 0.525075733523654]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.95445115010333, 0.0]\n", - "Distance: euclid, use y 2: [0.05904294188861314, 0.028922285540788906]\n", - "Distance: euclid, use x 2: [20.63419646946428, 0.028922285540788906]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 2\n", - "Distance: cosine, use y 2: [0.2429033069883788, 1.2457802166893739]\n", - "Distance: cosine, use x 2: [20.09467701539262, 0.24290330698837792]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.0344511006636834, 0.046264541991975605]\n", - "Distance: euclid, use x 2: [20.636999351002657, 0.0344511006636834]\n", - "Distance: euclid, use y 1: [10.954451150103335]\n", - "Distance: euclid, use x 2: [10.95445115010333, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 2\n", - "Distance: cosine, use y 2: [0.46303665011333894, 1.5631590460968328]\n", - "Distance: cosine, use x 2: [19.683905163520063, 0.46303665011333983]\n", - "Distance: cosine, use y 1: [10.954451150103312]\n", - "Distance: cosine, use x 2: [10.954451150103319, 0.0]\n", - "Distance: euclid, use y 2: [0.029072666051598084, 0.03096571611546306]\n", - "Distance: euclid, use x 2: [20.64375620079601, 0.029072666051598084]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 2\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Distance: cosine, use y 2: [8.731105394391083, 0.12413702567453089]\n", - "Distance: cosine, use x 2: [13.670805247683036, 0.12413702567453089]\n", - "Distance: cosine, use y 1: [10.954451150103324]\n", - "Distance: cosine, use x 2: [10.954451150103342, 0.0]\n", - "Distance: euclid, use y 2: [2.465981367017415, 1.0990384519078722]\n", - "Distance: euclid, use x 2: [17.190112051993644, 1.0990384519078722]\n", - "Distance: euclid, use y 1: [10.954451150103347]\n", - "Distance: euclid, use x 2: [10.954451150103319, 0.0]\n", - "Suspicious Models detected by 3: [1]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 3/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 3\n", - "Benign Train set: Avg. loss: 0.8797781603767517, Accuracy: 4098/6000 (68.29999685287476%)\n", - "Benign Test set: Avg. loss: 0.988082766532898, Accuracy: 3858/6000 (64.30000066757202%)\n", - "Backdoor Test set: Avg. loss: 5.625429153442383, Accuracy: 357/6000 (5.949999764561653%)\n", - "Benign Train set: Avg. loss: 0.8560976173649443, Accuracy: 4138/6000 (68.96666884422302%)\n", - "Benign Test set: Avg. loss: 1.0846137603123982, Accuracy: 3643/6000 (60.71666479110718%)\n", - "Backdoor Test set: Avg. loss: 5.940346876780192, Accuracy: 266/6000 (4.43333312869072%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 3\n", - "Benign Train set: Avg. loss: 0.9047486468198451, Accuracy: 4064/6000 (67.73333549499512%)\n", - "Benign Test set: Avg. loss: 0.997472216685613, Accuracy: 3839/6000 (63.983333110809326%)\n", - "Backdoor Test set: Avg. loss: 5.525551478068034, Accuracy: 349/6000 (5.816666781902313%)\n", - "Benign Train set: Avg. loss: 0.912026990601357, Accuracy: 3910/6000 (65.16666412353516%)\n", - "Benign Test set: Avg. loss: 1.1148398319880168, Accuracy: 3486/6000 (58.09999704360962%)\n", - "Backdoor Test set: Avg. loss: 5.849345684051514, Accuracy: 313/6000 (5.216666683554649%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 3\n", - "Benign Train set: Avg. loss: 0.8902336378046807, Accuracy: 4134/6000 (68.90000104904175%)\n", - "Benign Test set: Avg. loss: 0.9691097537676493, Accuracy: 3901/6000 (65.01666307449341%)\n", - "Backdoor Test set: Avg. loss: 5.609223286310832, Accuracy: 354/6000 (5.900000035762787%)\n", - "Benign Train set: Avg. loss: 0.9305718002167154, Accuracy: 3965/6000 (66.08332991600037%)\n", - "Benign Test set: Avg. loss: 1.1298276980717976, Accuracy: 3553/6000 (59.21666622161865%)\n", - "Backdoor Test set: Avg. loss: 5.478763898213704, Accuracy: 385/6000 (6.416666507720947%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 3\n", - "Benign Train set: Avg. loss: 3.2841210809159787, Accuracy: 2122/6000 (35.366666316986084%)\n", - "Benign Test set: Avg. loss: 0.9808564384778341, Accuracy: 3840/6000 (63.999998569488525%)\n", - "Backdoor Test set: Avg. loss: 5.563961982727051, Accuracy: 359/6000 (5.9833332896232605%)\n", - "Benign Train set: Avg. loss: 0.584124024085542, Accuracy: 4729/6000 (78.81666421890259%)\n", - "Benign Test set: Avg. loss: 1.2889393369356792, Accuracy: 3182/6000 (53.03333401679993%)\n", - "Backdoor Test set: Avg. loss: 0.01501223910599947, Accuracy: 5996/6000 (99.93333220481873%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 3\n", - "Distance: cosine, use y 2: [0.6897721817120037, 2.2868132657080324]\n", - "Distance: cosine, use x 2: [18.038688763229835, 0.6897721817120037]\n", - "Distance: cosine, use y 1: [10.954451150103337]\n", - "Distance: cosine, use x 2: [10.95445115010333, 0.0]\n", - "Distance: euclid, use y 2: [0.07893401250770271, 0.13630794113106504]\n", - "Distance: euclid, use x 2: [20.52155186630494, 0.0789340125077036]\n", - "Distance: euclid, use y 1: [10.954451150103313]\n", - "Distance: euclid, use x 2: [10.954451150103322, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 3\n", - "Distance: cosine, use y 2: [0.5250672293876582, 2.7721144925007435]\n", - "Distance: cosine, use x 2: [18.1043821779655, 0.5250672293876577]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.008386279013575582, 0.4986609520378167]\n", - "Distance: euclid, use x 2: [20.21018883810196, 0.008386279013574693]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 3\n", - "Distance: cosine, use y 2: [0.9376233056986072, 0.5526386053609924]\n", - "Distance: cosine, use x 2: [19.144297467758847, 0.5526386053609933]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.07042758809094973, 0.41313934452415424]\n", - "Distance: euclid, use x 2: [20.470667882786586, 0.07042758809094973]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 3\n", - "Distance: cosine, use y 2: [0.7801455877138592, 6.476302880460576]\n", - "Distance: cosine, use x 2: [13.233120749245378, 0.7801455877138593]\n", - "Distance: cosine, use y 1: [10.954451150103345]\n", - "Distance: cosine, use x 2: [10.954451150103326, 0.0]\n", - "Distance: euclid, use y 2: [2.8989432626992415, 1.4209623673912621]\n", - "Distance: euclid, use x 2: [15.597565528663878, 1.4209623673912624]\n", - "Distance: euclid, use y 1: [10.954451150103294]\n", - "Distance: euclid, use x 2: [10.954451150103367, 0.0]\n", - "Suspicious Models detected by 3: [0, 2]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 4/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 4\n", - "Benign Train set: Avg. loss: 0.8473593151949822, Accuracy: 4201/6000 (70.0166642665863%)\n", - "Benign Test set: Avg. loss: 0.9812094370524088, Accuracy: 3853/6000 (64.21666741371155%)\n", - "Backdoor Test set: Avg. loss: 5.526396592458089, Accuracy: 362/6000 (6.033333390951157%)\n", - "Benign Train set: Avg. loss: 0.8603191133192245, Accuracy: 4075/6000 (67.91666746139526%)\n", - "Benign Test set: Avg. loss: 1.12581870953242, Accuracy: 3511/6000 (58.51666331291199%)\n", - "Backdoor Test set: Avg. loss: 6.302475372950236, Accuracy: 324/6000 (5.399999767541885%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 4\n", - "Benign Train set: Avg. loss: 0.8707632777538705, Accuracy: 4182/6000 (69.69999670982361%)\n", - "Benign Test set: Avg. loss: 0.9912213583787283, Accuracy: 3871/6000 (64.51666355133057%)\n", - "Backdoor Test set: Avg. loss: 5.441365718841553, Accuracy: 378/6000 (6.300000101327896%)\n", - "Benign Train set: Avg. loss: 0.929772324384527, Accuracy: 3987/6000 (66.44999980926514%)\n", - "Benign Test set: Avg. loss: 1.139621078968048, Accuracy: 3508/6000 (58.46666693687439%)\n", - "Backdoor Test set: Avg. loss: 5.0033665498097735, Accuracy: 499/6000 (8.316666632890701%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 4\n", - "Benign Train set: Avg. loss: 0.8620590253713283, Accuracy: 4236/6000 (70.59999704360962%)\n", - "Benign Test set: Avg. loss: 0.9697187145551046, Accuracy: 3954/6000 (65.89999794960022%)\n", - "Backdoor Test set: Avg. loss: 5.5111550490061445, Accuracy: 367/6000 (6.11666664481163%)\n", - "Benign Train set: Avg. loss: 0.8872369096634236, Accuracy: 4138/6000 (68.96666884422302%)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Benign Test set: Avg. loss: 1.0738922754923503, Accuracy: 3626/6000 (60.43333411216736%)\n", - "Backdoor Test set: Avg. loss: 5.036426067352295, Accuracy: 421/6000 (7.016666233539581%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 4\n", - "Benign Train set: Avg. loss: 3.241051955425993, Accuracy: 2149/6000 (35.81666648387909%)\n", - "Benign Test set: Avg. loss: 0.9790957868099213, Accuracy: 3860/6000 (64.33333158493042%)\n", - "Backdoor Test set: Avg. loss: 5.473701159159343, Accuracy: 386/6000 (6.433333456516266%)\n", - "Benign Train set: Avg. loss: 0.5482086730288699, Accuracy: 4775/6000 (79.58333492279053%)\n", - "Benign Test set: Avg. loss: 1.1979321042696636, Accuracy: 3244/6000 (54.06666398048401%)\n", - "Backdoor Test set: Avg. loss: 0.012110005132853985, Accuracy: 5992/6000 (99.86666440963745%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 4\n", - "Distance: cosine, use y 2: [1.6868625176710177, 1.0355540140924653]\n", - "Distance: cosine, use x 2: [18.332896012058793, 1.0355540140924657]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.015551310552236686, 0.20436053166930535]\n", - "Distance: euclid, use x 2: [20.464638642403706, 0.015551310552236686]\n", - "Distance: euclid, use y 1: [10.954451150103313]\n", - "Distance: euclid, use x 2: [10.954451150103315, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 4\n", - "Distance: cosine, use y 2: [1.9480474991983874, 0.9100573433205303]\n", - "Distance: cosine, use x 2: [17.34332939260181, 0.9100573433205308]\n", - "Distance: cosine, use y 1: [10.954451150103345]\n", - "Distance: cosine, use x 2: [10.954451150103326, 0.0]\n", - "Distance: euclid, use y 2: [0.09394431381224333, 0.4889495857715147]\n", - "Distance: euclid, use x 2: [20.464938500823514, 0.09394431381224333]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 4\n", - "Distance: cosine, use y 2: [1.3971158837628077, 0.8438158134977676]\n", - "Distance: cosine, use x 2: [17.321712581324253, 0.8438158134977676]\n", - "Distance: cosine, use y 1: [10.954451150103315]\n", - "Distance: cosine, use x 2: [10.954451150103322, 0.0]\n", - "Distance: euclid, use y 2: [0.20411737313829725, 0.38046902129413773]\n", - "Distance: euclid, use x 2: [20.171324137508435, 0.20411737313829725]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 4\n", - "Distance: cosine, use y 2: [9.492243684847173, 0.3191188707738067]\n", - "Distance: cosine, use x 2: [11.253934367112079, 0.3191188707738067]\n", - "Distance: cosine, use y 1: [10.954451150103333]\n", - "Distance: cosine, use x 2: [10.95445115010333, 0.0]\n", - "Distance: euclid, use y 2: [2.1653816532140224, 0.9962351020896669]\n", - "Distance: euclid, use x 2: [17.690340045161005, 0.9962351020896669]\n", - "Distance: euclid, use y 1: [10.954451150103129]\n", - "Distance: euclid, use x 2: [10.954451150103536, 0.0]\n", - "Suspicious Models detected by 3: [0, 2]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 5/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 5\n", - "Benign Train set: Avg. loss: 0.8537916736082828, Accuracy: 4182/6000 (69.69999670982361%)\n", - "Benign Test set: Avg. loss: 1.0111433267593384, Accuracy: 3784/6000 (63.066667318344116%)\n", - "Backdoor Test set: Avg. loss: 5.398749272028605, Accuracy: 420/6000 (7.000000029802322%)\n", - "Benign Train set: Avg. loss: 0.874724712460599, Accuracy: 4125/6000 (68.75%)\n", - "Benign Test set: Avg. loss: 1.1135798692703247, Accuracy: 3577/6000 (59.61666703224182%)\n", - "Backdoor Test set: Avg. loss: 5.225924889246623, Accuracy: 441/6000 (7.3499999940395355%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 5\n", - "Benign Train set: Avg. loss: 0.8769010108836154, Accuracy: 4142/6000 (69.03333067893982%)\n", - "Benign Test set: Avg. loss: 1.0202871362368267, Accuracy: 3776/6000 (62.93333172798157%)\n", - "Backdoor Test set: Avg. loss: 5.315138339996338, Accuracy: 422/6000 (7.0333331823349%)\n", - "Benign Train set: Avg. loss: 0.8616926990290905, Accuracy: 4124/6000 (68.7333345413208%)\n", - "Benign Test set: Avg. loss: 1.095106561978658, Accuracy: 3566/6000 (59.433335065841675%)\n", - "Backdoor Test set: Avg. loss: 5.312667687733968, Accuracy: 452/6000 (7.533333450555801%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 5\n", - "Benign Train set: Avg. loss: 0.873329536077824, Accuracy: 4199/6000 (69.9833333492279%)\n", - "Benign Test set: Avg. loss: 0.9910587867101034, Accuracy: 3871/6000 (64.51666355133057%)\n", - "Backdoor Test set: Avg. loss: 5.387445529301961, Accuracy: 407/6000 (6.783333420753479%)\n", - "Benign Train set: Avg. loss: 0.9390684058691593, Accuracy: 3925/6000 (65.41666388511658%)\n", - "Benign Test set: Avg. loss: 1.1703458031018574, Accuracy: 3487/6000 (58.116668462753296%)\n", - "Backdoor Test set: Avg. loss: 6.923852841059367, Accuracy: 156/6000 (2.6000000536441803%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 5\n", - "Benign Train set: Avg. loss: 3.1833345179862165, Accuracy: 2108/6000 (35.13333201408386%)\n", - "Benign Test set: Avg. loss: 1.0030378798643749, Accuracy: 3794/6000 (63.23333382606506%)\n", - "Backdoor Test set: Avg. loss: 5.3597166538238525, Accuracy: 426/6000 (7.100000232458115%)\n", - "Benign Train set: Avg. loss: 0.5394560545682907, Accuracy: 4862/6000 (81.03333115577698%)\n", - "Benign Test set: Avg. loss: 1.1633540789286296, Accuracy: 3418/6000 (56.966668367385864%)\n", - "Backdoor Test set: Avg. loss: 0.03771169111132622, Accuracy: 5942/6000 (99.03333187103271%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 5\n", - "Distance: cosine, use y 2: [0.32204569057429655, 2.0679682501473744]\n", - "Distance: cosine, use x 2: [18.673222172064634, 0.32204569057429566]\n", - "Distance: cosine, use y 1: [10.954451150103342]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.7952719011254965, 0.062112622190042543]\n", - "Distance: euclid, use x 2: [20.22204485928068, 0.062112622190042543]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 5\n", - "Distance: cosine, use y 2: [2.0462303005952664, 1.179787399308342]\n", - "Distance: cosine, use x 2: [17.29438610427769, 1.1797873993083416]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.5940232587587717, 0.0913571067874166]\n", - "Distance: euclid, use x 2: [20.41687447361079, 0.09135710678741749]\n", - "Distance: euclid, use y 1: [10.954451150103313]\n", - "Distance: euclid, use x 2: [10.954451150103315, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 5\n", - "Distance: cosine, use y 2: [2.452172980470925, 1.0277639087777235]\n", - "Distance: cosine, use x 2: [17.601670629695057, 1.0277639087777235]\n", - "Distance: cosine, use y 1: [10.954451150103289]\n", - "Distance: cosine, use x 2: [10.954451150103381, 0.0]\n", - "Distance: euclid, use y 2: [0.03135712597971185, 0.31858317297936445]\n", - "Distance: euclid, use x 2: [20.498127626525033, 0.031357125979710965]\n", - "Distance: euclid, use y 1: [10.954451150103337]\n", - "Distance: euclid, use x 2: [10.954451150103331, 0.0]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 5\n", - "Distance: cosine, use y 2: [2.2935255570229356, 3.2583348201762328]\n", - "Distance: cosine, use x 2: [14.272313280144168, 2.2935255570229356]\n", - "Distance: cosine, use y 1: [10.954451150103312]\n", - "Distance: cosine, use x 2: [10.954451150103326, 0.0]\n", - "Distance: euclid, use y 2: [3.7317955424528026, 0.441976840267575]\n", - "Distance: euclid, use x 2: [17.495995482338625, 0.441976840267575]\n", - "Distance: euclid, use y 1: [10.954451150103061]\n", - "Distance: euclid, use x 2: [10.954451150103594, 0.0]\n", - "Suspicious Models detected by 3: [0, 2]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 6/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 6\n", - "Benign Train set: Avg. loss: 0.8286352633161748, Accuracy: 4201/6000 (70.0166642665863%)\n", - "Benign Test set: Avg. loss: 0.9954776068528494, Accuracy: 3803/6000 (63.38333487510681%)\n", - "Backdoor Test set: Avg. loss: 5.628017028172811, Accuracy: 370/6000 (6.166666746139526%)\n", - "Benign Train set: Avg. loss: 0.8233681094456227, Accuracy: 4156/6000 (69.26666498184204%)\n", - "Benign Test set: Avg. loss: 1.1489962935447693, Accuracy: 3514/6000 (58.56666564941406%)\n", - "Backdoor Test set: Avg. loss: 7.499392986297607, Accuracy: 150/6000 (2.500000037252903%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 6\n", - "Benign Train set: Avg. loss: 0.8520627500528984, Accuracy: 4189/6000 (69.81666684150696%)\n", - "Benign Test set: Avg. loss: 1.0100693106651306, Accuracy: 3760/6000 (62.66666650772095%)\n", - "Backdoor Test set: Avg. loss: 5.5396309693654375, Accuracy: 362/6000 (6.033333390951157%)\n", - "Benign Train set: Avg. loss: 0.8405023550099515, Accuracy: 4123/6000 (68.71666312217712%)\n", - "Benign Test set: Avg. loss: 1.116740624109904, Accuracy: 3513/6000 (58.55000019073486%)\n", - "Backdoor Test set: Avg. loss: 4.886253118515015, Accuracy: 796/6000 (13.266666233539581%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 6\n", - "Benign Train set: Avg. loss: 0.8374395554370069, Accuracy: 4245/6000 (70.74999809265137%)\n", - "Benign Test set: Avg. loss: 0.983585943778356, Accuracy: 3876/6000 (64.59999680519104%)\n", - "Backdoor Test set: Avg. loss: 5.612242301305135, Accuracy: 362/6000 (6.033333390951157%)\n", - "Benign Train set: Avg. loss: 0.8825467029150497, Accuracy: 3966/6000 (66.10000133514404%)\n", - "Benign Test set: Avg. loss: 1.172180672486623, Accuracy: 3436/6000 (57.26666450500488%)\n", - "Backdoor Test set: Avg. loss: 8.384706020355225, Accuracy: 75/6000 (1.2500000186264515%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 6\n", - "Benign Train set: Avg. loss: 3.2969402074813843, Accuracy: 2109/6000 (35.1500004529953%)\n", - "Benign Test set: Avg. loss: 0.9908452332019806, Accuracy: 3849/6000 (64.14999961853027%)\n", - "Backdoor Test set: Avg. loss: 5.578811009724935, Accuracy: 379/6000 (6.316666305065155%)\n", - "Benign Train set: Avg. loss: 0.6076196164209792, Accuracy: 4612/6000 (76.8666684627533%)\n", - "Benign Test set: Avg. loss: 1.2845233082771301, Accuracy: 3085/6000 (51.41666531562805%)\n", - "Backdoor Test set: Avg. loss: 0.014343314183255037, Accuracy: 5998/6000 (99.96666312217712%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 6\n", - "Distance: cosine, use y 2: [3.1959195824794913, 0.12506571720480553]\n", - "Distance: cosine, use x 2: [18.66126607580756, 0.12506571720480597]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.11455014060527713, 0.04188976487882634]\n", - "Distance: euclid, use x 2: [20.493965183272902, 0.04188976487882545]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 6\n", - "Distance: cosine, use y 2: [0.15689968394637965, 0.6351126526557955]\n", - "Distance: cosine, use x 2: [20.02931110591679, 0.15689968394637965]\n", - "Distance: cosine, use y 1: [10.954451150103306]\n", - "Distance: cosine, use x 2: [10.954451150103333, 0.0]\n", - "Distance: euclid, use y 2: [0.07054778219426705, 0.08106611839147426]\n", - "Distance: euclid, use x 2: [20.60137755938585, 0.07054778219426705]\n", - "Distance: euclid, use y 1: [10.954451150103335]\n", - "Distance: euclid, use x 2: [10.95445115010333, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 6\n", - "Distance: cosine, use y 2: [0.11406124941259943, 2.9178387866028697]\n", - "Distance: cosine, use x 2: [18.414472367210298, 0.11406124941259987]\n", - "Distance: cosine, use y 1: [10.954451150103317]\n", - "Distance: cosine, use x 2: [10.95445115010332, 0.0]\n", - "Distance: euclid, use y 2: [0.004118947111889426, 0.3445463512501741]\n", - "Distance: euclid, use x 2: [20.33123125017665, 0.004118947111888538]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.95445115010333, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 6\n", - "Distance: cosine, use y 2: [1.004308933278638, 2.8780471952495597]\n", - "Distance: cosine, use x 2: [15.634467194987792, 1.004308933278638]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.7226242922769606, 4.994200594550494]\n", - "Distance: euclid, use x 2: [15.979720687217252, 0.722624292276961]\n", - "Distance: euclid, use y 1: [10.954451150103328]\n", - "Distance: euclid, use x 2: [10.954451150103335, 0.0]\n", - "Suspicious Models detected by 3: [1]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 7/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 7\n", - "Benign Train set: Avg. loss: 0.7909779535963181, Accuracy: 4257/6000 (70.95000147819519%)\n", - "Benign Test set: Avg. loss: 0.9977259238560995, Accuracy: 3812/6000 (63.53332996368408%)\n", - "Backdoor Test set: Avg. loss: 6.6386739412943525, Accuracy: 255/6000 (4.250000044703484%)\n", - "Benign Train set: Avg. loss: 0.9090553227257221, Accuracy: 3999/6000 (66.64999723434448%)\n", - "Benign Test set: Avg. loss: 1.183224380016327, Accuracy: 3433/6000 (57.216668128967285%)\n", - "Backdoor Test set: Avg. loss: 5.912643750508626, Accuracy: 350/6000 (5.833333358168602%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 7\n", - "Benign Train set: Avg. loss: 0.814667098382686, Accuracy: 4235/6000 (70.58333158493042%)\n", - "Benign Test set: Avg. loss: 1.0011651416619618, Accuracy: 3827/6000 (63.7833297252655%)\n", - "Backdoor Test set: Avg. loss: 6.532990614573161, Accuracy: 263/6000 (4.383333399891853%)\n", - "Benign Train set: Avg. loss: 0.8959275081436685, Accuracy: 3980/6000 (66.33332967758179%)\n", - "Benign Test set: Avg. loss: 1.231977681318919, Accuracy: 3323/6000 (55.38333058357239%)\n", - "Backdoor Test set: Avg. loss: 6.533595641454061, Accuracy: 171/6000 (2.850000001490116%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 7\n", - "Benign Train set: Avg. loss: 0.8047349789041154, Accuracy: 4334/6000 (72.2333312034607%)\n", - "Benign Test set: Avg. loss: 0.9804023404916128, Accuracy: 3884/6000 (64.73333239555359%)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Backdoor Test set: Avg. loss: 6.598117272059123, Accuracy: 265/6000 (4.416666552424431%)\n", - "Benign Train set: Avg. loss: 0.8541606298469483, Accuracy: 4111/6000 (68.51666569709778%)\n", - "Benign Test set: Avg. loss: 1.1488163471221924, Accuracy: 3502/6000 (58.36666822433472%)\n", - "Backdoor Test set: Avg. loss: 7.346678733825684, Accuracy: 62/6000 (1.0333333164453506%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 7\n", - "Benign Train set: Avg. loss: 3.7933548435251763, Accuracy: 2059/6000 (34.316664934158325%)\n", - "Benign Test set: Avg. loss: 0.9883201122283936, Accuracy: 3818/6000 (63.63333463668823%)\n", - "Backdoor Test set: Avg. loss: 6.588667392730713, Accuracy: 276/6000 (4.600000008940697%)\n", - "Benign Train set: Avg. loss: 0.5654542832932574, Accuracy: 4768/6000 (79.46666479110718%)\n", - "Benign Test set: Avg. loss: 1.2047673066457112, Accuracy: 3285/6000 (54.750001430511475%)\n", - "Backdoor Test set: Avg. loss: 0.03584048183013996, Accuracy: 5962/6000 (99.36666488647461%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 7\n", - "Distance: cosine, use y 2: [4.550742342756802, 0.2734047995577864]\n", - "Distance: cosine, use x 2: [17.131086555275665, 0.27340479955778685]\n", - "Distance: cosine, use y 1: [10.954451150103313]\n", - "Distance: cosine, use x 2: [10.954451150103317, 0.0]\n", - "Distance: euclid, use y 2: [0.06440376446433316, 0.4009909516764516]\n", - "Distance: euclid, use x 2: [20.4890175814253, 0.06440376446433316]\n", - "Distance: euclid, use y 1: [10.954451150103315]\n", - "Distance: euclid, use x 2: [10.954451150103324, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 7\n", - "Distance: cosine, use y 2: [1.8193887031983578, 1.206869789505315]\n", - "Distance: cosine, use x 2: [15.456868628253602, 1.206869789505315]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.16970625322009436, 0.06365335148335571]\n", - "Distance: euclid, use x 2: [20.582243600502544, 0.06365335148335483]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 7\n", - "Distance: cosine, use y 2: [2.287530253603258, 1.1780715731875366]\n", - "Distance: cosine, use x 2: [15.130761367234994, 1.1780715731875362]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.43618193721079734, 0.0809130511347993]\n", - "Distance: euclid, use x 2: [20.467251355554314, 0.0809130511347993]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 7\n", - "Distance: cosine, use y 2: [4.928247882158452, 0.8293360690090639]\n", - "Distance: cosine, use x 2: [15.459903350249837, 0.8293360690090641]\n", - "Distance: cosine, use y 1: [10.954451150103315]\n", - "Distance: cosine, use x 2: [10.954451150103345, 0.0]\n", - "Distance: euclid, use y 2: [6.016499289987826, 0.40066896841297606]\n", - "Distance: euclid, use x 2: [15.774247119647548, 0.4006689684129756]\n", - "Distance: euclid, use y 1: [10.954451150103194]\n", - "Distance: euclid, use x 2: [10.954451150103461, 0.0]\n", - "Suspicious Models detected by 3: [0]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 8/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 8\n", - "Benign Train set: Avg. loss: 0.7790621568230872, Accuracy: 4358/6000 (72.63333201408386%)\n", - "Benign Test set: Avg. loss: 1.0014758507410686, Accuracy: 3824/6000 (63.733333349227905%)\n", - "Backdoor Test set: Avg. loss: 6.370962937672933, Accuracy: 208/6000 (3.466666489839554%)\n", - "Benign Train set: Avg. loss: 0.7508002264385528, Accuracy: 4372/6000 (72.86666631698608%)\n", - "Benign Test set: Avg. loss: 1.097122073173523, Accuracy: 3609/6000 (60.14999747276306%)\n", - "Backdoor Test set: Avg. loss: 6.9121631781260175, Accuracy: 271/6000 (4.516666755080223%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 8\n", - "Benign Train set: Avg. loss: 0.7930318139334942, Accuracy: 4332/6000 (72.2000002861023%)\n", - "Benign Test set: Avg. loss: 1.015789379676183, Accuracy: 3775/6000 (62.91666626930237%)\n", - "Backdoor Test set: Avg. loss: 6.28120477994283, Accuracy: 179/6000 (2.983333356678486%)\n", - "Benign Train set: Avg. loss: 0.7537304603673042, Accuracy: 4306/6000 (71.76666855812073%)\n", - "Benign Test set: Avg. loss: 1.0869876742362976, Accuracy: 3616/6000 (60.26666760444641%)\n", - "Backdoor Test set: Avg. loss: 6.068501631418864, Accuracy: 412/6000 (6.866666674613953%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 8\n", - "Benign Train set: Avg. loss: 0.7983413157944984, Accuracy: 4314/6000 (71.8999981880188%)\n", - "Benign Test set: Avg. loss: 0.982840488354365, Accuracy: 3872/6000 (64.53333497047424%)\n", - "Backdoor Test set: Avg. loss: 6.347102244695027, Accuracy: 213/6000 (3.5500001162290573%)\n", - "Benign Train set: Avg. loss: 0.7916458041426984, Accuracy: 4260/6000 (70.99999785423279%)\n", - "Benign Test set: Avg. loss: 1.099749505519867, Accuracy: 3648/6000 (60.79999804496765%)\n", - "Backdoor Test set: Avg. loss: 6.888438145319621, Accuracy: 86/6000 (1.4333332888782024%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 8\n", - "Benign Train set: Avg. loss: 3.675917237997055, Accuracy: 2010/6000 (33.50000083446503%)\n", - "Benign Test set: Avg. loss: 0.9934276640415192, Accuracy: 3835/6000 (63.91666531562805%)\n", - "Backdoor Test set: Avg. loss: 6.315940618515015, Accuracy: 209/6000 (3.4833334386348724%)\n", - "Benign Train set: Avg. loss: 0.5355115555068279, Accuracy: 4838/6000 (80.63333034515381%)\n", - "Benign Test set: Avg. loss: 1.1687040726343791, Accuracy: 3400/6000 (56.66666626930237%)\n", - "Backdoor Test set: Avg. loss: 0.02521951838086049, Accuracy: 5985/6000 (99.75000023841858%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 8\n", - "Distance: cosine, use y 2: [2.0330273940615093, 0.783919831778948]\n", - "Distance: cosine, use x 2: [18.796337259156225, 0.7839198317789475]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.07222110281966465, 0.0361506101254232]\n", - "Distance: euclid, use x 2: [20.62949826235959, 0.03615061012542409]\n", - "Distance: euclid, use y 1: [10.954451150103333]\n", - "Distance: euclid, use x 2: [10.954451150103331, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 8\n", - "Distance: cosine, use y 2: [0.7246317181099711, 1.4790219293692735]\n", - "Distance: cosine, use x 2: [18.932616050326253, 0.7246317181099711]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.1746180787639684, 0.005267232904717645]\n", - "Distance: euclid, use x 2: [20.596317810001032, 0.005267232904717645]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.95445115010333, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 8\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Distance: cosine, use y 2: [0.24431579576776663, 5.2569501477100475]\n", - "Distance: cosine, use x 2: [16.76755929301521, 0.2443157957677662]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [0.07282139662990428, 0.0038479150123968964]\n", - "Distance: euclid, use x 2: [20.63099133657362, 0.0038479150123968964]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 8\n", - "Distance: cosine, use y 2: [0.8265963692700686, 7.309482023131439]\n", - "Distance: cosine, use x 2: [12.158018104786466, 0.8265963692700686]\n", - "Distance: cosine, use y 1: [10.954451150103342]\n", - "Distance: cosine, use x 2: [10.95445115010333, 0.0]\n", - "Distance: euclid, use y 2: [1.7396525584425433, 4.420115231286226]\n", - "Distance: euclid, use x 2: [14.211445576787916, 1.7396525584425433]\n", - "Distance: euclid, use y 1: [10.954451150102678]\n", - "Distance: euclid, use x 2: [10.95445115010399, 0.0]\n", - "Suspicious Models detected by 3: [1, 2]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "Finished round 9/10\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_00 in round 9\n", - "Benign Train set: Avg. loss: 0.7373616132647434, Accuracy: 4426/6000 (73.7666666507721%)\n", - "Benign Test set: Avg. loss: 0.9840383330980936, Accuracy: 3831/6000 (63.84999752044678%)\n", - "Backdoor Test set: Avg. loss: 6.371568520863851, Accuracy: 282/6000 (4.699999839067459%)\n", - "Benign Train set: Avg. loss: 0.7673709408399907, Accuracy: 4325/6000 (72.08333015441895%)\n", - "Benign Test set: Avg. loss: 1.117681125799815, Accuracy: 3500/6000 (58.33333134651184%)\n", - "Backdoor Test set: Avg. loss: 6.13549280166626, Accuracy: 459/6000 (7.6499998569488525%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_01 in round 9\n", - "Benign Train set: Avg. loss: 0.7476775199174881, Accuracy: 4382/6000 (73.03333282470703%)\n", - "Benign Test set: Avg. loss: 1.0023195147514343, Accuracy: 3808/6000 (63.466668128967285%)\n", - "Backdoor Test set: Avg. loss: 6.306597391764323, Accuracy: 269/6000 (4.483333230018616%)\n", - "Benign Train set: Avg. loss: 0.8192861509766984, Accuracy: 4132/6000 (68.86666417121887%)\n", - "Benign Test set: Avg. loss: 1.1944966117540996, Accuracy: 3464/6000 (57.733333110809326%)\n", - "Backdoor Test set: Avg. loss: 6.477320432662964, Accuracy: 492/6000 (8.20000022649765%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator benign_02 in round 9\n", - "Benign Train set: Avg. loss: 0.7560380529215995, Accuracy: 4401/6000 (73.35000038146973%)\n", - "Benign Test set: Avg. loss: 0.9617986083030701, Accuracy: 3934/6000 (65.56666493415833%)\n", - "Backdoor Test set: Avg. loss: 6.3540685176849365, Accuracy: 283/6000 (4.716666787862778%)\n", - "Benign Train set: Avg. loss: 0.8863914824546651, Accuracy: 4003/6000 (66.71666502952576%)\n", - "Benign Test set: Avg. loss: 1.230345328648885, Accuracy: 3418/6000 (56.966668367385864%)\n", - "Backdoor Test set: Avg. loss: 8.166247129440308, Accuracy: 100/6000 (1.666666567325592%)\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling train\n", - "####################\n", - "Performing model training for collaborator malicious_00 in round 9\n", - "Benign Train set: Avg. loss: 3.661377598630621, Accuracy: 2062/6000 (34.3666672706604%)\n", - "Benign Test set: Avg. loss: 0.977350095907847, Accuracy: 3840/6000 (63.999998569488525%)\n", - "Backdoor Test set: Avg. loss: 6.344151099522908, Accuracy: 275/6000 (4.583333432674408%)\n", - "Benign Train set: Avg. loss: 0.5469587276432109, Accuracy: 4805/6000 (80.08333444595337%)\n", - "Benign Test set: Avg. loss: 1.229085087776184, Accuracy: 3243/6000 (54.04999852180481%)\n", - "Backdoor Test set: Avg. loss: 0.010714995209127665, Accuracy: 5995/6000 (99.91666674613953%)\n", - "Scale Model by 4.0\n", - "Should transfer from train to collect_models\n", - "\n", - "Calling collect_models\n", - "Sending state from aggregator to collaborators\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_00 in round 9\n", - "Distance: cosine, use y 2: [2.7217097868431646, 0.48909488332725637]\n", - "Distance: cosine, use x 2: [18.132140408145283, 0.4890948833272559]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [1.929935169406828, 1.3124232630177928]\n", - "Distance: euclid, use x 2: [16.533672920014247, 1.3124232630177928]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 0: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_01 in round 9\n", - "Distance: cosine, use y 2: [1.9797955990002887, 0.5455339631621223]\n", - "Distance: cosine, use x 2: [18.993872137326505, 0.5455339631621232]\n", - "Distance: cosine, use y 1: [10.95445115010334]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [5.058928745362662, 0.025827180352623547]\n", - "Distance: euclid, use x 2: [14.406930898232122, 0.025827180352623547]\n", - "Distance: euclid, use y 1: [10.95445115010334]\n", - "Distance: euclid, use x 2: [10.954451150103328, 0.0]\n", - "Suspicious Models detected by 1: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator benign_02 in round 9\n", - "Distance: cosine, use y 2: [0.6147782894408031, 2.1820622362089743]\n", - "Distance: cosine, use x 2: [18.351482792150968, 0.6147782894408023]\n", - "Distance: cosine, use y 1: [10.954451150103338]\n", - "Distance: cosine, use x 2: [10.954451150103328, 0.0]\n", - "Distance: euclid, use y 2: [2.4907861807277247, 0.3759675577613226]\n", - "Distance: euclid, use x 2: [16.371604563916964, 0.3759675577613226]\n", - "Distance: euclid, use y 1: [10.954451150103338]\n", - "Distance: euclid, use x 2: [10.95445115010333, 0.0]\n", - "Suspicious Models detected by 2: [3]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling local_validation\n", - "Performing model validation for collaborator malicious_00 in round 9\n", - "Distance: cosine, use y 2: [6.150505334609076, 1.3753749625020746]\n", - "Distance: cosine, use x 2: [13.370018249411753, 1.3753749625020746]\n", - "Distance: cosine, use y 1: [10.9544511501033]\n", - "Distance: cosine, use x 2: [10.954451150103354, 0.0]\n", - "Distance: euclid, use y 2: [10.310470551411303, 0.37635097834506465]\n", - "Distance: euclid, use x 2: [11.47433869492199, 0.37635097834506465]\n", - "Distance: euclid, use y 1: [10.954451150103175]\n", - "Distance: euclid, use x 2: [10.954451150103484, 0.0]\n", - "Suspicious Models detected by 3: [2]\n", - "Should transfer from local_validation to defend\n", - "\n", - "Calling defend\n", - "Agglomerative Clustering: {0: array([0, 1, 2]), 1: array([3])}\n", - "DBScan Input: [0 1 2]\n", - "DBScan Clustering: [0 1 2]\n", - "Negatives: [0, 1, 2]\n", - "\n", - "Calling end\n", - "####################\n", - "All rounds completed successfully\n", - "####################\n", - "This is the end of the flow\n", - "####################\n" - ] - } - ], - "source": [ - "local_runtime = LocalRuntime(aggregator=aggregator_object, collaborators=collaborators)\n", - "\n", - "print(f\"Local runtime collaborators = {local_runtime.collaborators}\")\n", - "\n", - "# change to the internal flow loop\n", - "model = Net()\n", - "model.load_state_dict(pretrained_weights)\n", - "top_model_accuracy = 0\n", - "optimizers = {\n", - " collaborator.name: default_optimizer(model, optimizer_type=args.optimizer_type)\n", - " for collaborator in collaborators\n", - " }\n", - "flflow = FederatedFlow(\n", - " model,\n", - " optimizers,\n", - " device,\n", - " args.comm_round,\n", - " top_model_accuracy,\n", - " NUMBER_OF_MALICIOUS_CLIENTS / TOTAL_CLIENT_NUMBER,\n", - " 'CrowdGuard'\n", - " )\n", - "\n", - "flflow.runtime = local_runtime\n", - "flflow.run()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/openfl-tutorials/experimental/1001_Workspace_Creation_from_JupyterNotebook.ipynb b/openfl-tutorials/experimental/workflow/1001_Workspace_Creation_from_JupyterNotebook.ipynb similarity index 98% rename from openfl-tutorials/experimental/1001_Workspace_Creation_from_JupyterNotebook.ipynb rename to openfl-tutorials/experimental/workflow/1001_Workspace_Creation_from_JupyterNotebook.ipynb index 712a7e4550..c8b4347966 100644 --- a/openfl-tutorials/experimental/1001_Workspace_Creation_from_JupyterNotebook.ipynb +++ b/openfl-tutorials/experimental/workflow/1001_Workspace_Creation_from_JupyterNotebook.ipynb @@ -22,7 +22,7 @@ "##### High Level Overview of Methodology\n", "1. User annotates the relevant cells of the Jupyter notebook with `#| export` directive\n", "2. We then Leverage `nbdev` functionality to export these annotated cells of Jupyter notebook into a Python script\n", - "3. Utilize OpenFL experimental module `WorkspaceExport` to convert the Python script into a OpenFL workspace\n", + "3. Utilize OpenFL experimental workflow module `WorkspaceExport` to convert the Python script into a OpenFL workspace\n", "4. User can utilize the experimental `fx` commands to deploy and run the federation seamlessly\n", "\n", "\n", @@ -97,7 +97,7 @@ "\n", "\n", "# Uncomment this if running in Google Colab\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" ] @@ -437,9 +437,9 @@ "\n", "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "def FedAvg(agg_model, models, weights=None):\n", " state_dicts = [model.state_dict() for model in models]\n", @@ -959,7 +959,7 @@ "outputs": [], "source": [ "import os\n", - "from openfl.experimental.workspace_export import WorkspaceExport\n", + "from openfl.experimental.workflow.workspace_export import WorkspaceExport\n", "\n", "WorkspaceExport.export(\n", " notebook_path='./1001_Workspace_Creation_from_JupyterNotebook.ipynb',\n", diff --git a/openfl-tutorials/experimental/101_MNIST.ipynb b/openfl-tutorials/experimental/workflow/101_MNIST.ipynb similarity index 99% rename from openfl-tutorials/experimental/101_MNIST.ipynb rename to openfl-tutorials/experimental/workflow/101_MNIST.ipynb index aa758eb7ec..194ed3b034 100644 --- a/openfl-tutorials/experimental/101_MNIST.ipynb +++ b/openfl-tutorials/experimental/workflow/101_MNIST.ipynb @@ -78,7 +78,7 @@ "!pip install -U ipywidgets\n", "\n", "# Uncomment this if running in Google Colab and set USERNAME if running in docker container.\n", - "# !pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "# !pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "# import os\n", "# os.environ[\"USERNAME\"] = \"colab\"" ] @@ -199,9 +199,9 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "\n", "def FedAvg(models, weights=None):\n", diff --git a/openfl-tutorials/experimental/102_Aggregator_Validation.ipynb b/openfl-tutorials/experimental/workflow/102_Aggregator_Validation.ipynb similarity index 97% rename from openfl-tutorials/experimental/102_Aggregator_Validation.ipynb rename to openfl-tutorials/experimental/workflow/102_Aggregator_Validation.ipynb index 11237f0c14..9d0fb930ce 100644 --- a/openfl-tutorials/experimental/102_Aggregator_Validation.ipynb +++ b/openfl-tutorials/experimental/workflow/102_Aggregator_Validation.ipynb @@ -50,7 +50,7 @@ "!pip install torchvision\n", "\n", "# Uncomment this if running in Google Colab\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" ] @@ -161,9 +161,9 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "\n", "def FedAvg(models, weights=None):\n", @@ -397,7 +397,7 @@ ], "metadata": { "kernelspec": { - "display_name": "new_test_env", + "display_name": "openfl_env", "language": "python", "name": "python3" }, @@ -411,7 +411,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.19" + "version": "3.8.20" } }, "nbformat": 4, diff --git a/openfl-tutorials/experimental/103_Cyclic_Institutional_Incremental_Learning.ipynb b/openfl-tutorials/experimental/workflow/103_Cyclic_Institutional_Incremental_Learning.ipynb similarity index 99% rename from openfl-tutorials/experimental/103_Cyclic_Institutional_Incremental_Learning.ipynb rename to openfl-tutorials/experimental/workflow/103_Cyclic_Institutional_Incremental_Learning.ipynb index 5aea74d045..79e7456d6a 100644 --- a/openfl-tutorials/experimental/103_Cyclic_Institutional_Incremental_Learning.ipynb +++ b/openfl-tutorials/experimental/workflow/103_Cyclic_Institutional_Incremental_Learning.ipynb @@ -59,7 +59,7 @@ "!pip install torchvision\n", "\n", "# Uncomment this if running in Google Colab\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" ] @@ -170,9 +170,9 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "\n", "def FedAvg(models, weights=None):\n", diff --git a/openfl-tutorials/experimental/104_Keras_MNIST_with_CPU.ipynb b/openfl-tutorials/experimental/workflow/104_Keras_MNIST_with_CPU.ipynb similarity index 97% rename from openfl-tutorials/experimental/104_Keras_MNIST_with_CPU.ipynb rename to openfl-tutorials/experimental/workflow/104_Keras_MNIST_with_CPU.ipynb index 78a2b001bf..65d948fee6 100644 --- a/openfl-tutorials/experimental/104_Keras_MNIST_with_CPU.ipynb +++ b/openfl-tutorials/experimental/workflow/104_Keras_MNIST_with_CPU.ipynb @@ -44,7 +44,7 @@ "%pip install tensorflow==2.17\n", "\n", "# Uncomment this if running in Google Colab and set USERNAME if running in docker container.\n", - "# %pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "# %pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "# import os\n", "# os.environ[\"USERNAME\"] = \"colab\"" ] @@ -191,9 +191,9 @@ "metadata": {}, "outputs": [], "source": [ - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "agg = Aggregator()\n", "\n", diff --git a/openfl-tutorials/experimental/104_Keras_MNIST_with_GPU.ipynb b/openfl-tutorials/experimental/workflow/104_Keras_MNIST_with_GPU.ipynb similarity index 99% rename from openfl-tutorials/experimental/104_Keras_MNIST_with_GPU.ipynb rename to openfl-tutorials/experimental/workflow/104_Keras_MNIST_with_GPU.ipynb index a3b699f91c..03862d94c5 100644 --- a/openfl-tutorials/experimental/104_Keras_MNIST_with_GPU.ipynb +++ b/openfl-tutorials/experimental/workflow/104_Keras_MNIST_with_GPU.ipynb @@ -40,7 +40,7 @@ "!pip install tensorflow\n", "\n", "# Uncomment this if running in Google Colab\n", - "# !pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "# !pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "# import os\n", "# os.environ[\"USERNAME\"] = \"colab\"" ] @@ -143,9 +143,9 @@ "metadata": {}, "outputs": [], "source": [ - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "import numpy as np\n", "\n", "\n", diff --git a/openfl-tutorials/experimental/104_MNIST_XPU.ipynb b/openfl-tutorials/experimental/workflow/104_MNIST_XPU.ipynb similarity index 99% rename from openfl-tutorials/experimental/104_MNIST_XPU.ipynb rename to openfl-tutorials/experimental/workflow/104_MNIST_XPU.ipynb index 316d7f83c0..e4e196d387 100644 --- a/openfl-tutorials/experimental/104_MNIST_XPU.ipynb +++ b/openfl-tutorials/experimental/workflow/104_MNIST_XPU.ipynb @@ -221,9 +221,9 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "def FedAvg(models, weights=None):\n", " if weights is None:\n", diff --git a/openfl-tutorials/experimental/105_Numpy_Linear_Regression_Workflow.ipynb b/openfl-tutorials/experimental/workflow/105_Numpy_Linear_Regression_Workflow.ipynb similarity index 98% rename from openfl-tutorials/experimental/105_Numpy_Linear_Regression_Workflow.ipynb rename to openfl-tutorials/experimental/workflow/105_Numpy_Linear_Regression_Workflow.ipynb index fe06ac4987..c076b87e12 100644 --- a/openfl-tutorials/experimental/105_Numpy_Linear_Regression_Workflow.ipynb +++ b/openfl-tutorials/experimental/workflow/105_Numpy_Linear_Regression_Workflow.ipynb @@ -51,7 +51,7 @@ "!pip install matplotlib\n", "\n", "# Uncomment this if running in Google Colab and set USERNAME if running in docker container.\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" ] @@ -249,9 +249,9 @@ "metadata": {}, "outputs": [], "source": [ - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "class FederatedFlow(FLSpec):\n", "\n", diff --git a/openfl-tutorials/experimental/106_Scikit_Learn_Linear_Regression_Workflow.ipynb b/openfl-tutorials/experimental/workflow/106_Scikit_Learn_Linear_Regression_Workflow.ipynb similarity index 97% rename from openfl-tutorials/experimental/106_Scikit_Learn_Linear_Regression_Workflow.ipynb rename to openfl-tutorials/experimental/workflow/106_Scikit_Learn_Linear_Regression_Workflow.ipynb index b9d1952612..8a4860e8c5 100644 --- a/openfl-tutorials/experimental/106_Scikit_Learn_Linear_Regression_Workflow.ipynb +++ b/openfl-tutorials/experimental/workflow/106_Scikit_Learn_Linear_Regression_Workflow.ipynb @@ -236,9 +236,9 @@ "outputs": [], "source": [ "# Import ncessary libraries\n", - "from openfl.experimental.interface import FLSpec\n", - "from openfl.experimental.placement import aggregator, collaborator\n", - "from openfl.experimental.runtime import FederatedRuntime\n", + "from openfl.experimental.workflow.interface import FLSpec\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.runtime import FederatedRuntime\n", "from sklearn.model_selection import train_test_split\n", "\n", "\n", @@ -271,8 +271,8 @@ "outputs": [], "source": [ "# Import necessary libraries for federated learning\n", - "from openfl.experimental.interface import Collaborator, Aggregator\n", - "from openfl.experimental.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.interface import Collaborator, Aggregator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", "\n", "# Define a callable to initialize collaborator private attributes\n", "def callable_to_initialize_collaborator_private_attributes(n_collaborators, index, train_dataset, test_dataset, batch_size):\n", @@ -394,7 +394,7 @@ "outputs": [], "source": [ "# Define the federated learning workflow\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "# Federated Learning Workflow using OpenFL's Workflow API\n", "class FederatedLassoFlow(FLSpec):\n", diff --git a/openfl-tutorials/experimental/201_Exclusive_GPUs_with_Ray.ipynb b/openfl-tutorials/experimental/workflow/201_Exclusive_GPUs_with_Ray.ipynb similarity index 98% rename from openfl-tutorials/experimental/201_Exclusive_GPUs_with_Ray.ipynb rename to openfl-tutorials/experimental/workflow/201_Exclusive_GPUs_with_Ray.ipynb index a66481b70a..2183a0eb05 100644 --- a/openfl-tutorials/experimental/201_Exclusive_GPUs_with_Ray.ipynb +++ b/openfl-tutorials/experimental/workflow/201_Exclusive_GPUs_with_Ray.ipynb @@ -50,7 +50,7 @@ "!pip install torchvision\n", "\n", "# Uncomment this if running in Google Colab\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" ] @@ -166,9 +166,9 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "\n", "def FedAvg(models, weights=None):\n", diff --git a/openfl-tutorials/experimental/301_MNIST_Watermarking.ipynb b/openfl-tutorials/experimental/workflow/301_MNIST_Watermarking.ipynb similarity index 99% rename from openfl-tutorials/experimental/301_MNIST_Watermarking.ipynb rename to openfl-tutorials/experimental/workflow/301_MNIST_Watermarking.ipynb index 9ad17ad377..235155458b 100644 --- a/openfl-tutorials/experimental/301_MNIST_Watermarking.ipynb +++ b/openfl-tutorials/experimental/workflow/301_MNIST_Watermarking.ipynb @@ -63,7 +63,7 @@ "\n", "\n", "# Uncomment this if running in Google Colab\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" ] @@ -404,10 +404,10 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", - "from openfl.experimental.utilities.ui import InspectFlow\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.utilities.ui import InspectFlow\n", "\n", "\n", "def FedAvg(agg_model, models, weights=None):\n", diff --git a/openfl-tutorials/experimental/workflow/401_FedProx_with_Synthetic_nonIID.ipynb b/openfl-tutorials/experimental/workflow/401_FedProx_with_Synthetic_nonIID.ipynb new file mode 100644 index 0000000000..f933718fac --- /dev/null +++ b/openfl-tutorials/experimental/workflow/401_FedProx_with_Synthetic_nonIID.ipynb @@ -0,0 +1,822 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Workflow Interface 401: Synthetic non-IID Dataset with FedProx Optimizer\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/intel/openfl/blob/develop/openfl-tutorials/experimental/Workflow_Interface_401_FedProx_with_Synthetic_nonIID.ipynb)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this OpenFL workflow interface tutorial, we shall learn how to implement FedProx and compare its performance with FedAvg algorithm using a Synthetic non-IID dataset. Reference: [Federated Optimization in Heterogeneous Networks](https://arxiv.org/pdf/1812.06127.pdf)." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Getting Started" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First we start by installing the necessary dependencies for the workflow interface" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install git+https://github.com/securefederatedai/openfl.git\n", + "!pip install -r workflow_interface_requirements.txt\n", + "!pip install torch\n", + "!pip install torchvision\n", + "!pip install matplotlib\n", + "!pip install seaborn\n", + "\n", + "# Uncomment following lines if running in Google Colab\n", + "# import os\n", + "# os.environ[\"USERNAME\"] = \"colab\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we import necessary libraries, and define Synthetic non-iid dataset as described in [Federated Optimization in Heterogeneous Networks](https://arxiv.org/pdf/1812.06127.pdf)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import torch as pt\n", + "import torch.utils.data as data\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "import numpy as np\n", + "\n", + "import random\n", + "import collections\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "RANDOM_SEED = 10\n", + "batch_size = 10\n", + "\n", + "# Sets seed to reproduce the results\n", + "def set_seed(seed):\n", + " pt.manual_seed(seed)\n", + " pt.cuda.manual_seed_all(seed)\n", + " pt.use_deterministic_algorithms(True)\n", + " pt.backends.cudnn.deterministic = True\n", + " pt.backends.cudnn.benchmark = False\n", + " pt.backends.cudnn.enabled = False\n", + " np.random.seed(seed)\n", + " random.seed(seed)\n", + "\n", + "set_seed(RANDOM_SEED)\n", + "\n", + "\n", + "def one_hot(labels, classes):\n", + " return np.eye(classes)[labels]\n", + "\n", + "\n", + "def softmax(x):\n", + " ex = np.exp(x)\n", + " sum_ex = np.sum(np.exp(x))\n", + " return ex / sum_ex\n", + "\n", + "\n", + "def generate_synthetic(alpha, beta, iid, num_collaborators, num_classes):\n", + " dimension = 60\n", + " NUM_CLASS = num_classes\n", + " NUM_USER = num_collaborators\n", + "\n", + " samples_per_user = np.random.lognormal(4, 2, (NUM_USER)).astype(int) + 50\n", + " num_samples = np.sum(samples_per_user)\n", + "\n", + " X_split = [[] for _ in range(NUM_USER)]\n", + " y_split = [[] for _ in range(NUM_USER)]\n", + "\n", + " #### define some eprior ####\n", + " mean_W = np.random.normal(0, alpha, NUM_USER)\n", + " mean_b = mean_W\n", + " B = np.random.normal(0, beta, NUM_USER)\n", + " mean_x = np.zeros((NUM_USER, dimension))\n", + "\n", + " diagonal = np.zeros(dimension)\n", + " for j in range(dimension):\n", + " diagonal[j] = np.power((j + 1), -1.2)\n", + " cov_x = np.diag(diagonal)\n", + "\n", + " for i in range(NUM_USER):\n", + " if iid == 1:\n", + " mean_x[i] = np.ones(dimension) * B[i] # all zeros\n", + " else:\n", + " mean_x[i] = np.random.normal(B[i], 1, dimension)\n", + "\n", + " if iid == 1:\n", + " W_global = np.random.normal(0, 1, (dimension, NUM_CLASS))\n", + " b_global = np.random.normal(0, 1, NUM_CLASS)\n", + "\n", + " for i in range(NUM_USER):\n", + "\n", + " W = np.random.normal(mean_W[i], 1, (dimension, NUM_CLASS))\n", + " b = np.random.normal(mean_b[i], 1, NUM_CLASS)\n", + "\n", + " if iid == 1:\n", + " W = W_global\n", + " b = b_global\n", + "\n", + " xx = np.random.multivariate_normal(\n", + " mean_x[i], cov_x, samples_per_user[i])\n", + " yy = np.zeros(samples_per_user[i])\n", + "\n", + " for j in range(samples_per_user[i]):\n", + " tmp = np.dot(xx[j], W) + b\n", + " yy[j] = np.argmax(softmax(tmp))\n", + "\n", + " X_split[i] = xx.tolist()\n", + " y_split[i] = yy.tolist()\n", + "\n", + " return X_split, y_split\n", + "\n", + "\n", + "class SyntheticFederatedDataset:\n", + " def __init__(self, num_collaborators, batch_size=1, num_classes=10, **kwargs):\n", + " self.batch_size = batch_size\n", + " X, y = generate_synthetic(0.0, 0.0, 0, num_collaborators, num_classes)\n", + " X = [np.array([np.array(sample).astype(np.float32)\n", + " for sample in col]) for col in X]\n", + " y = [np.array([np.array(one_hot(int(sample), num_classes))\n", + " for sample in col]) for col in y]\n", + " self.X_train_all = np.array([col[:int(0.9 * len(col))] for col in X], dtype=np.ndarray)\n", + " self.X_valid_all = np.array([col[int(0.9 * len(col)):] for col in X], dtype=np.ndarray)\n", + " self.y_train_all = np.array([col[:int(0.9 * len(col))] for col in y], dtype=np.ndarray)\n", + " self.y_valid_all = np.array([col[int(0.9 * len(col)):] for col in y], dtype=np.ndarray)\n", + "\n", + " def split(self, index):\n", + " return {\n", + " \"train_loader\":\n", + " data.DataLoader(\n", + " data.TensorDataset(\n", + " pt.from_numpy(self.X_train_all[index]),\n", + " pt.from_numpy(self.y_train_all[index])\n", + " ), \n", + " batch_size=batch_size, shuffle=True\n", + " ),\n", + " \"test_loader\":\n", + " data.DataLoader(\n", + " data.TensorDataset(\n", + " pt.from_numpy(self.X_valid_all[index]),\n", + " pt.from_numpy(self.y_valid_all[index])\n", + " ), \n", + " batch_size=batch_size, shuffle=True\n", + " )\n", + " }" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have defined dataset class. Let define model, optimizer, and some helper functions like we would for any other deep learning experiment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from openfl.interface.aggregation_functions.weighted_average import weighted_average as wa\n", + "\n", + "\n", + "class Net(nn.Module):\n", + " \"\"\"\n", + " Model to train the dataset\n", + "\n", + " Args:\n", + " None\n", + " \n", + " Returns:\n", + " model: class Net object\n", + " \"\"\"\n", + " def __init__(self):\n", + " # Set RANDOM_STATE to reproduce same model\n", + " pt.set_rng_state(pt.manual_seed(RANDOM_SEED).get_state())\n", + " super(Net, self).__init__()\n", + " self.linear1 = nn.Linear(60, 100)\n", + " self.linear2 = nn.Linear(100, 10)\n", + "\n", + " def forward(self, x):\n", + " x = self.linear1(x)\n", + " x = self.linear2(x)\n", + " return x\n", + "\n", + "\n", + "def cross_entropy(output, target):\n", + " \"\"\"\n", + " cross-entropy metric\n", + "\n", + " Args:\n", + " output: model ouput,\n", + " target: target label\n", + "\n", + " Returns:\n", + " crossentropy_loss: float\n", + " \"\"\"\n", + " return F.cross_entropy(output, pt.max(target, 1)[1])\n", + "\n", + "\n", + "def compute_loss_and_acc(network, dataloader):\n", + " \"\"\"\n", + " Model test method\n", + "\n", + " Args:\n", + " network: class Net object (model)\n", + " dataloader: torch.utils.data.DataLoader\n", + "\n", + " Returns:\n", + " (accuracy,\n", + " loss,\n", + " correct,\n", + " dataloader_size)\n", + " \"\"\"\n", + " network.eval()\n", + " test_loss = 0\n", + " correct = 0\n", + " with pt.no_grad():\n", + " for data, target in dataloader:\n", + " output = network(data)\n", + " test_loss += cross_entropy(output, target).item()\n", + " tar = target.argmax(dim=1, keepdim=True)\n", + " pred = output.argmax(dim=1, keepdim=True)\n", + " correct += pred.eq(tar).sum().cpu().numpy()\n", + " dataloader_size = len(dataloader.dataset)\n", + " test_loss /= dataloader_size\n", + " accuracy = float(correct / dataloader_size)\n", + " return accuracy, test_loss, correct\n", + "\n", + "\n", + "def weighted_average(tensors, weights):\n", + " \"\"\"\n", + " Take weighted average of models / optimizers / loss / accuracy\n", + " Incase of taking weighted average of optimizer do the following steps:\n", + " 1. Call \"_get_optimizer_state\" (openfl.federated.task.runner_pt._get_optimizer_state)\n", + " pass optimizer to it, to take optimizer state dictionary.\n", + " 2. Pass optimizer state dictionaries list to here.\n", + " 3. To set the weighted average optimizer state dictionary back to optimizer,\n", + " call \"_set_optimizer_state\" (openfl.federated.task.runner_pt._set_optimizer_state)\n", + " and pass optimizer, device, and optimizer dictionary received in step 2.\n", + "\n", + " Args:\n", + " tensors: Models state_dict list or optimizers state_dict list or loss list or accuracy list\n", + " weights: Weight for each element in the list\n", + "\n", + " Returns:\n", + " dict: Incase model list / optimizer list OR\n", + " float: Incase of loss list or accuracy list\n", + " \"\"\"\n", + " # Check the type of first element of tensors list\n", + " if type(tensors[0]) in (dict, collections.OrderedDict):\n", + " optimizer = False\n", + " # If __opt_state_needed found then optimizer state dictionary is passed\n", + " if \"__opt_state_needed\" in tensors[0]:\n", + " optimizer = True\n", + " # Remove __opt_state_needed from all state dictionary in list\n", + " [tensor.pop(\"__opt_state_needed\") for tensor in tensors]\n", + " tmp_list = []\n", + " # Take keys in order to rebuild the state dictionary taking keys back up\n", + " input_state_dict_keys = tensors[0].keys()\n", + " for tensor in tensors:\n", + " # Append values of each state dictionary in list\n", + " # If type(value) is Tensor then it needs to be detached\n", + " tmp_list.append(np.array([value.detach() if type(value) is pt.Tensor else value for value in tensor.values()], dtype=object))\n", + " # Take weighted average of list of arrays\n", + " # new_params passed is weighted average of each array in tmp_list\n", + " new_params = wa(tmp_list, weights)\n", + " new_state = {}\n", + " # Take weighted average parameters and building a dictionary\n", + " [new_state.update({k:new_params[i]}) if optimizer else new_state.update({k:pt.from_numpy(new_params[i].numpy())}) \\\n", + " for i, k in enumerate(input_state_dict_keys)]\n", + " return new_state\n", + " else:\n", + " return wa(tensors, weights)" + ] + }, + { + "attachments": { + "federated-flow-diagram.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzMAAAJZCAYAAACds2s+AAAAAXNSR0IArs4c6QAACih0RVh0bXhmaWxlACUzQ214ZmlsZSUyMGhvc3QlM0QlMjJhcHAuZGlhZ3JhbXMubmV0JTIyJTIwbW9kaWZpZWQlM0QlMjIyMDIzLTA1LTA1VDA5JTNBMzklM0E1OS4wNTVaJTIyJTIwYWdlbnQlM0QlMjJNb3ppbGxhJTJGNS4wJTIwKFdpbmRvd3MlMjBOVCUyMDEwLjAlM0IlMjBXaW42NCUzQiUyMHg2NCklMjBBcHBsZVdlYktpdCUyRjUzNy4zNiUyMChLSFRNTCUyQyUyMGxpa2UlMjBHZWNrbyklMjBDaHJvbWUlMkYxMTMuMC4wLjAlMjBTYWZhcmklMkY1MzcuMzYlMjIlMjBldGFnJTNEJTIybjRCVEJwRzN5TXkya3JubmRGVXYlMjIlMjB2ZXJzaW9uJTNEJTIyMjEuMS43JTIyJTIwdHlwZSUzRCUyMmRldmljZSUyMiUzRSUzQ2RpYWdyYW0lMjBuYW1lJTNEJTIyUGFnZS0xJTIyJTIwaWQlM0QlMjJnMDBDN1BBcVZyaXRlTVVsdmxnWiUyMiUzRTdWeGRkNm80RlAwMVByWXJmSWslMkJVc3J0eDlqYXBYWTZmWEpSaWNnVWpZTjRxJTJGZlhUNUNnSkdCRmlvQnQlMkJsSVNra055Mkp0a244UTBKSDI2dXZITSUyQmVRQldkQnRpTUJhTmFUcmhpZ0tLZ0Q0WDVDekRuTVVRUWt6Yk0lMkJ4U0tGZFJ0JTJGNUEwa21xV2N2SFFzdXFJSSUyQlFxN3Z6T25NRVpyTjRNaW44a3pQUXg5MHNURnk2YWZPVFJzbU12b2owMDNtdmppV1B3bHp0OTBLOG0lMkJoWTAlMkJpSjRQb3p0U01DcE9NeGNTMDBFY3NTeklha3U0aDVJZFgwNVVPM2NCNWtWJTJGQ2VyJTJGMjNOMDJ6SU16UDBzRjBYeWZ0JTJCJTJGdUxRZGFvJTJGSDk3ZEo4ZUgyNWFJcWhtZCUyQm11eVE5SnEzMTE1RUxiQTh0NTZRWTlIeTRTbk84JTJCUllWQjhtR0NkdnVZcHhBTklXJTJCdDhaRmlLRUxRU0oxQ0Vaa2t2ellPYndWNFdFU2MzWXo4clZKWHJLOXRiM3pBNzRncmpqQ0xVS0tWNW91ZnV6VkdPRk94ZDNUJTJGRzhadk1FcjZzb20lMkZ6ZFZGbk56bGxvbHNIV3gyRUJld3dVRWViNUtOZFFmYUwxQlpBMzNKelJJUCUyQlROWTNQMnRwUjViSHZQVXhzeTBHemJnN2JwSXklMkYyOU5EdW9hY25Daktnd3BpYVdUQjRCd0slMkIlMkZURnhmTmlmbTZQZzdnZiUyQmt1QzhpVDkxeWUyeDQ3bzZjbkV6Z3JxU0NPVjJTeVk5aWVXUE4zJTJCQngzMFB2Y040RFlQVW1LTGZCS21CWFE5aU44VFR5RGY5V0JwJTJGekdBOERTMG5ublRSNkgzVEJZQVROQSUyQkViWjlUS0JPbnhpZXMzRXVZN2NjeFJoQ3BwU1FKSXAlMkJLSDFLdCUyQktGM0g1NmVCOGF3MCUyQjMzaDlyajlWRFQ5ZWVlcHI5V3dSbU1PdGQ4UTE3dFdBUEFHeGlMeDdBR2dLYWglMkZmbzJyRkhGUzFHaEJwcFdra2Q0VUNtUlJ6TG5FZWZSdWZHb2RpeFNPSXM0aTg2TVJZcGNQeDYxRTI4WVdsZ01reVR5JTJGQW15MGN4MGpWM3UxUTREZ1FOM1pUb0l6WWtQJTJGNFclMkJ2eWJLM2x6NmlNWUY5cUszJTJGaWVvZjZsRXlWZGlicE80WGxHcE5Va2w4TkV5VlZqUkhEOXdVeDUwWUYlMkJqcFRlQ2g1V29iM28yJTJGTXlnbEk0MkQ3cW03JTJGeW1XNWNHSEZMMUNUbWJidzVCcWFRR2I0WFM1b3lOc0FPa1dqejZjTkJTaTdFVWRqRmhhWVBrYlklMkZ5Z3p2cSUyRkhtZ0c2NGNQMVlOcDE0amklMkZoNlZ5bElmQ2RHRkk1Z0dZaVhvQjM3VXlrUUNpTEloJTJCZERkcHVnWEhSbmlPUEJtYVVGRVZHY0dybm1ZdUdNYUt6U1lNJTJCRFFQNHRMJTJCUmJMcWN6SVRZdlVGS21CVkhlVndtajBNRllFYWo1R0tJQTJwQ2dNSVpPVFltMElCV254SGxTUXFtVUVrQmdrSnh6MEdBWE9vUjJ5YU5Fb2ZHbXJQSjByMUslMkIwUWEzUm0lMkZZTSUyRnJQblVHb2xRZmFYOGJ3eGJpN3VSMFlXRG4lMkZiZlMwRyUyQk5vNGZwOWx6NEFVSVZSJTJCeGpaakNmZVFOZSUyRmkyemVMbjJ3OHl4cUtVUyUyQkxITXhSQ3cwJTJGdlJsVnZXTmpxRVBobnEzMDlHdXVqMXQwTzMxT1lNNGd5SUdBZlZTcFpWNDJvSjc2U1JTazVNekxzJTJGck5xTTdpVHluSjFjaXU2bmpHRVV1cE9PNnJPbFZxdzZLb3g0NHk4dXNreXNPT2FQaUVDdFY0UzFXaE9ja0JSNjcwdWRMWlZHaXpTbFJlMG9vWjBHSlJHQ0toWEwyZ2FKYVRrUkJnSnJvaFVGUHUzc2NocW9CYSUyQjdLZFFOZnNxNnJjbURHRWtsTXlvWnlGNnlsUXZmcGNpWnhKcDJZU2ZWaGpsZ2tjNzY4WnlvamMlMkZpMnFSJTJGTG5PMjJxZHFOUVduUjM5SVZ6czllWmp5OE95cmElMkZITklDb21WTGpSS0toUEFhdVdVT096YXU5UXVkJTJCMWRhaFpPaXJNR2VCNUtuNTRVV2VNRDFaS0NsZXU1U1pING1hRlVzdTVYJTJCVWhSOVVoeEVPdFMxaDBwVXJ0S1VqRHhZWm1kM3VTTkQ4dHNvUG5Vbk9CTEp2V1BEMGNEUmMwNXdRYUlsYUlXVFVvblJkcWlTWFhpJTJGTDU3OTFpRkNPY2JTR29wd2RrdFdGdDJWTGg3Uks3WEQ5S054MnRPbU9UaEN6JTJGOXVJWm9YS3JCbmtXNVhyJTJCWnZYc2NHTDFIclRQc2RMdFBuRHA4ck5rMzFxVDhSclpzNmlocG0lMkJnTGtTeVJTSG1sNU1zQkdiOVZEckZhUjhsNFRUVTIzOXFUeXdnNTZ6NlRQY2RGbGFNaW1nZUNSRmxGUkpNTlcyWFRFQmcyNWpwV2JCNFVXT3h2Ym9zZFhBRDR0RmxzZWZyUU1Id1JOcUJRUGFPMGtnVGhlM3ZyRmh3clkyOXYzdEJ0MHBTVWtVJTJCRllmaXNEa2ZnR0Q0WmhxWDgydzVaVTJYSGxhS1djd3olMkZjQXpuWGk1SU1jViUyQjBrJTJCTllYNk1COGZ3WnFMN2xaTTdHRk9GYlFESHlkMkJ2bUh4M2JISWt2RSUyRiUzQyUyRmRpYWdyYW0lM0UlM0MlMkZteGZpbGUlM0UlCf0tAAAgAElEQVR4XuydCZgc1XXvz63qWbSMQBubQGzqNg8BAYSM8RJw4CUE/Jk4CTgPgv05YPx4BNtgJKEF0WhFEohAwMTYTmIT8LN4jpMYHGwDxrFlLBaxE9wlQAgkQBvSzEiapavu+0713Jmamqru6p6u7lr+7c+fhp6qe8/9nVt37r/OPfcKwgcEQKCuBE4+f8UFQrOuI4s+RoLG17VwFAYCIAACINBcApK6SaPfSUu74+VHF/y0ucagdhAAAQEEIAAC9SNwyvnLvi8FXSSIJtSvVJQEAiAAAiAQNQKSqFNI+veXHl30hajZBntAIE0EIGbS5G20NVQCLGSEoIskhEyonFE4CIAACESFgCDqlBA0UXEH7EgpAYiZlDoeza4vAV5aRsL6ASIy9eWK0kAABEAg6gQ4QkNS+19YchZ1T8G+pBKAmEmqZ9GuhhI45YJlvyBJ5zW0UlQGAiAAAiAQDQKCHnvpp4v+ZzSMgRUgkC4CEDPp8jdaGxKBU85f1oVk/5DgolgQAAEQiDoBSd0vPbqoI+pmwj4QSCIBiJkkehVtajiBU/50mWx4pagQBEAABEAgMgRe+s9FmFNFxhswJE0E8OClydtoa2gEIGZCQ4uCQQAEQCAWBCBmYuEmGJlAAhAzCXQqmtR4AhAzjWeOGmsnkP/ahfS5Pzl1sID+okn/9NBTdM/9v6JrLj+bvnTxWdSS0T0reHPLTvrc//6W/TtVzoYXNtNVCx4Ydr27Ducvf/yzFyh/5yOD9/u1xKvc2luNO0EgXAIQM+HyRekg4EcAYgZ9AwTqQABipg4QUURDCLDI+OM/PJFW3PMoPfzEy8NEiRIZypCP/sExtPyGz9L6Z9+wxYfzo37Xva+XDp06YVh5Suh84ozjaeFt/0FPv7h58Fau/zPnnjwontQvPvNHJ9Ocq86jdY9stEUVPiAQNwIQM3HzGOxNCgGImaR4Eu1oKgGImabiR+VVEPjxP3zFvlpFV9StXt+XEzMcwbnkwtPphw8/R3/9uTPp5//12jDBw6LFS8yoMt96Z9ewaA7ETBVOxKWRJAAxE0m3wKgUEICYSYGT0cTwCUDMhM8YNdSHwH0rLqPTTzpqRGTEq/RyYobLmTppvC2KvIQQxEx9/IVS4kMAYiY+voKlySIAMZMsf6I1TSIAMdMk8Ki2JgIsPo6bPmXwXmcejLNAPzHDUZQF15w/GI3hKM1lf/ZReuDfnh5cIuYnZrDMrCaX4aYYEICYiYGTYGIiCUDMJNKtaFSjCUDMNJo46qsHASVWDplcOh4jaM6MW6h4LR3z2wDAudmAsw1YZlYPj6KMZhKAmGkmfdSdZgIQM2n2PtpeNwIQM3VDiYKaRICXjR171ORhCftekRm3AHKau+9A3+BGAG7Bo6I5H+zoHJGvw2VAzDTJ8ai2bgQgZuqGEgWBQFUEIGaqwoWLQcCbAMQMekYcCLiXhzlt9trlzEvMeC0p43LUls4PP/7y4LbL7g0A1DUbX3lnxFbOEDNx6EGwsRwBiBn0DxBoDgGImeZwR60JIwAxkzCHJrg5XhsA+O0w5iVmvCI4CpdzIwC/nBm+/8xTjxmxpA1iJsGdLiVN8xMzq+au6qDW4lXzli28PSUo0EwQaCgBiJmG4kZlSSUAMZNUzyazXV75LO58GW65W8yoyM4rv982IrLC1zuT+3mnM6+tmfk6Fj1HHTFx2I5qEDPJ7GtpapVbzLCIEWP6F5AU3yCS5twli8akiQfaCgKNIgAx0yjSqCfRBCBmEu1eNA4EQAAEKhJQYmbVqlUdYj+LGLpOEglBwiSy5s9dctOdFQvBBSAAAlUTgJipGhluAIGRBCBm0CtAAARAIN0ELjunZcJwEUOtA0R2zV2yaGgv9HRjQutBoO4EIGbqjhQFppEAxEwavY42gwAIgMAQgb+eTT8iEp8lki3gAgIgUB8CQtKTc5Yu+nS50iBm6sMapaScAMRMyjsAmg8CIJB6As7IDBHx/EpFZnbPXbJocuoBAQAI1EBg9eJlcu6SRWX1CsRMDWBxCwi4CUDMoE+AAAiAQLoJeOXMDIgak0jMn7tkIXJm0t1F0PoaCEDM1AANt4BALQQgZmqhhntAAARAIDkEfHczs+gbJAi7mSXH1WhJAwlAzDQQNqpKNwGImXT7H60HARAAgfLnzPRdNW/ZTThnBt0EBKokADFTJTBcDgK1EoCYqZUc7gMBEACBZBDwEzPJaB1aAQLNIQAx0xzuqDWFBCBmUuj0GDX5vhWX0ZmnHjNo8ZtbdtLn/ve3Bv9bHY751ju7PA/DbERT2YZDJnfQw0+83IjqUAcI1J0AxEzdkaJAECCIGXQCEGgQAYiZBoFGNVUTYCFz7FGTaeFt/0FPv7jZvt/93TWXn00XfPok6usr0sp7fzZ4XdWVjeIGtmnbB3sof+cjoygFt4JA8whAzDSPPWpOLgGImeT6Fi2LGAGImYg5BObYBJRI+b8/eZau/us/pHFjWomjMjt2d9PUSePpxf9+1xYPP/6Hr9g/n3D8YfTrZzbRPff/yr73SxefRX39Jn24dz/99Jev2GW6v/vIcYfSGaccTfv299oi6E/+8ERqyeh2PRz98SqH6/7cn5xql7fvQB/95y9foT/99EnU2qLTPz30FP3B/zjSjiT1F037v9/eupu+9qVP08SDxtLDj78MwYP+HUkCEDORdAuMijkBiJmYOxDmx4cAxEx8fJUmS1W0g8UBi5WfPvkq3fy1C21hwoLiiEMPpv947CVbKNz5T7+kM06ebgsJFiH/964rbGHDQmLOVefRukc20qdmzxjxHV/Pn6sWPDB4D4shVbcSSM5yOrt76P4fb7DvU/VwORyZYaHFUaJb7nyEZp9ytP3zz//rNfrMuSfbNmIZWpp6cLzaCjETL3/B2ngQgJiJh59gZQIIQMwkwIkJbAILhdffeN8WKGr52Pdu+yI99NON9NnzTrHFA39UlERFSjiS8+mP5ei7635riwcu540tO+nEGYcN+47FjhIhLJSW3/BZO+9Fff570/vU1poZcQ8LmwXXnG9HilT0RZXD97LIYnHEeTTzr/4T2vjKFjr9pOlNWwKXwK6BJoVAAGImBKgoMvUEIGZS3wUAoFEEIGYaRRr1VENAiZlPnHG8HdU4etokO9Lxqw0FuvDTJ9GPHn3BXhbGkRqOpvDHHVF55qW3B6M5KjLj/E6JEF6upqIsqixn5EXd88Jr7w6Kou27ugbLrhSZOedjOYiZapyPaxtOAGKm4chRYQoIQMykwMloYjQIQMxEww+wYjiB/NcutCMnvHSLc1A4P4XzUvjDuSj8UUu61OYAKs/mhdfesYUOf/bt76N1jzxn/8w5M87vnGJG5cdwzgx/fvyzF+y6ve5ROTEf7OyiZwY2JuClZH45M1dc8nGIGXTwSBOAmIm0e2BcTAlAzMTUcTA7fgQgZuLnszRYrLZc7t7XW/VWzCrKUiky44zCeDH1KqfSPWnwDdqYPAIQM8nzKVrUfAIQM833ASxICQGImZQ4OqbN5N3Kjps+ZdB6ladSTlQ4oyzuncmcu5VVQuJVTqV78HsQiCMBiJk4eg02R50AxEzUPQT7EkPglPOXdZGg8YlpEBoCAiAAAiAQnICk7pceXTS0+0XwO3ElCIBAGQIQM+geINAgAqdcsOwXJOm8BlWHakAABEAABKJEQNBjL/100f+MkkmwBQSSQABiJgleRBtiQeDk81dcQML6gSCaEAuDYSQIgAAIgEBdCEiiTpLa/3r50QU/rUuBKAQEQGCQAMQMOgMINJDAKecv+74QdJGEoGkgdVQFAiAAAs0jIIg6paR/f+nRRV9onhWoGQSSSwBiJrm+RcsiSoAFjRR0ESI0EXUQzAIBEACBOhHgiIyAkKkTTRQDAt4EIGbQM0CgCQR4yZnQrOvIoo9hU4AmOABVhkaAj4+Z0EbU0U40oX3g3zaiiWOJJBHt2U/U2UvU1UPU2TP0b9EKzSQUDAKNJyCpmzT6nbS0O7C0rPH4UWO6CEDMpMvfaC0IgAAIjJrAunXr9Lde+n2OiLKkaVmNKCtJ5ohElqScLAQVLCkNoYkCWcLQdVkwLfGXkqweIeUjRHpWCiunCS0rJd9HWSK5i6QokBCG0GSBLDL6Nc3oo75CPp+H1Bm111AACIAACCSTAMRMMv2KVoEACIDAqAnctmzZ0WafyJGUWU2jrLQoR4KFB2UFUcEiMgSJApFlCIsMU28p3HjLjVu8Kl6zePkyi6wD85bctNzr97ctXHa0bJFZyxQ50igrBuoSJGZYJA1y1CVJK0ihG351jbrhKAAEQAAEQCA2BCBmYuMqGAoCIAAC9SewJr/mELO/Nyd0ORBhEQOREluw7JSSDBLSEFIUTEGGsGThQMY0qo2WVBIzfi1bd/HF+paZp2XNopnjKJDgSI4QHMnJSaKJLKpY6JAgQ5NUKGpkZKi9cEP+hp31p4USQQAEQAAEokYAYiZqHoE9IAACIFBnAqtWreqwuntzGV7OJXQWAoPLwqQkKYQokLQMIbSCKU1D0/WC6G415tw2Z1+9TKlVzJSr/558fvw+asmRJbOCWIQNtYuILCI5EDkSRljtqhcflAMCIAACIFAbAYiZ2rjhLhAAARCIFIF8Pp8ZU9SzmiZyUnIuC2VpYKmWM4LBy8J42ZYmtYLQ+4wb8vmGRDDCEDPlHLAmnz/E7M/kdF1mpRT28jjO6xF2Xg/tIEEFjubYeTqaZcgiGXOXLioIIXifAnxAAARAAARiQgBiJiaOgpkgAAIgwATuyK88pr9YtPNKiLSBCAtlhaTj7Qm6JENoVLAsXnplGhlTL3xj+aJ3mk2v0WKmXHtX5vPHaFZLVpCVUwxLmxjQcfaSNSkNaW9eQIamy4LWL4woMGy2D1E/CIAACESRAMRMFL0Cm0AABFJN4O8WLD+0TzdzvOsXaZIjCZx0X8plUVEFO5eFJ9yWoWf0wvU3zzeiHFWIkpjx61zu6JYUlNM4osN5OlIcpHZp44iO0LSCME1jzJhM4W8XLNiV6g6LxoMACIBAEwlAzDQRPqoGARBIL4G78vkJfWZb1hJmzhYrmr2tsdqm2CwtByNDyNJyKF1mCl16Dyfe748jtTiImXJc8/n8hPGmlpW6npWmzA33FxUl+4ojY3ZEjP1lFbp0K7b+imMfg80gAALpJAAxk06/o9UgAAINIPCtq77V0nXErsGduDhBXdjnsXCEZehNvzqPRZBp9I/JFBYk8E1/3MVMue7ijKR5nJ/zwfDzc4TRr/UbC/J53oUNHxAAARAAgVESgJgZJUDcDgIgAAJrFi091tS0nBg4j4UjLbK0LOxYjrBIkgZvcayJ0mGQVqa1MC8/7900kUuymCnnR+4bUuczekTOeVaPIHEM9ws7R4dEQZBlWKQVSMsYaesbaXoO0FYQAIH6E4CYqT9TlAgCIJBAAqvzqw8js5iVwsxxsjgNP71+4O27Oo9FGBbevg/rBWkVM36Pgjtqp87P4R3XiKjDeX6O5KWGGhktNLZwff763Ql8vNAkEAABEKiZAMRMzehwIwiAQNII3Drv1oPEmGJWM60cn8ciSdqHMxKJrJTUXzqPRXKifcGyLEMKabROHF+4/vrrDySNRb3bAzETnKjqh8Lig0tFrtQPRU7Y5+hQnzo/xyJh8AYQWkYr6HvHGNffgX4YnDKuBAEQSAoBiJmkeBLtAAEQCEQgn8+3tptaVhfa0HksUqgtjjvsJG57pzDipWF4Ix6IauWLIGYqMwpyBUcIrf4+1/k5lBOlne7e4+25hd13S+fnEJ+fs+wmXs6GDwiAAAgkkgDETCLdikaBAAiszK88rsWystbAWSIk+PBEe9J3tJ2nMHDqPWlaQfIOVFq/MS+fT1UeSyN7CcRM+LTdfX7wkFCS09X5OWSfnyMMoVsFvV8Y1y9ftDV8y1ADCIAACIRHAGImPLYoGQRAIGQCdyxYfrjZKrOWKXIjzmMheo8Ib6lDdkHg4iFmAqOq+4UcjRzX15KjjC3os67zc8bZyyalZUcjNU0rkGkaxbEthfnz539Yd2NQIAiAAAjUmQDETJ2BojgQAIH6Ergjnz/YNNuyJp/HwlsbC41Puy8dZCiot3SQ4cAZH/yvJgx9707j+jvuQB5LfV0xqtIgZkaFL7SbS89X6fwcy7Jy2rCNLajHfX6OJa1CT+n8nJ7QjELBIAACIFAFAYiZKmDhUhAAgXAI3HXtXW29k7uyZMmsNZBwP3jyOolxvERG8rbGvL3xwJtjXbeM6/N57OwUjkvqXirETN2Rhl7gHcuXH97fwy8R9Cyfn8MvEtTBrpJoa+lAV8kvEArCKp2fMz+f3xS6YagABEAABBwEIGbQHUAABBpGYPWipcdThrLSLJ254TiP5ajSeRul0+6FlHbiPdb0N8w1oVcEMRM64oZW4H6WpUUcKeVd147k3db4eeYzlogsQ0q9IPU+zknb1lAjURkIgEAqCEDMpMLNaCQINI7Aqnz+CGG2Zi1h5nTi9fkDb3Mln81CW3m3JZLCEJoceJurGfPz8/E2t3EuakpNEDNNwd7wSu+66662/Tv25IQuspqlDSwHLe0WKIjG2C8s7A04hnYLbKVxhevy1+1puLGoEARAIBEEIGYS4UY0AgQaS2DljSsnau1mVrcoawnKcYTFfisrKSeJDthvZIU0+LR7TdcKRbNoYJ19Y30UtdpWL17+GAnZO/eWRRdGzTbY0xgCatzgc5ykxi857EiOOj9nv9f5OW27Ooyv/v1XextjIWoBARCIIwGImTh6DTaDQAMI5PP5dj6PJaNnshYfImkvC+PDI2VOCH7DyktJWLQMvWG1enRj/q3YAakB7oldFWsWL73VIu3DeUsWroqd8TA4dAKr8quO0KgvRxZv7iEGlqxRjkrn57xjb/RhL0Eddn7OG6EbhgpAAAQiTwBiJvIugoEgEC6BlfmVM3zOY5mmzmMR0jJMIkPD2vdwnZHg0lffvGwNWfTB3KWLbktwM9G0EAisza+cYTnPjBrYJIRIHmFvDiJLmxDw+TmaLgt6nzCuW7GQt2bHBwRAIAUEIGZS4GQ0EQTWLlw2zWyRWbJKuxLx8g4+MVyS/ebzHTGQeG9ZZAhdFgZODcdbT3SduhFYvXjpWiLtnblLFt5Rt0JRUKoJ/FM+376TWnLSkvYyVz4Ut7QLor30tc0+GFfwBgSlXRAFn58zrrVw44037k01ODQeBBJGAGImYQ5Fc9JLYG0+P8k0W7OkS/u8CP7jrkmVgEv7eFmYtHcXGshlyWgFrEdPb39pdMtX3bzsTs2iN+YsXXRXo+tGfekjoMZDi1/ekMwOnZ8jsoJkt8W7rfFmJPwCR5BhDp2f05c+WmgxCMSbAMRMvP0H61NGYO11140xD5qS5TeRvDsQkchqdoTF/rlNLQuTfJo3CUOXekHXe43r8nnsFJSyvhK15q5evPxuIuu/5y656Z6o2QZ70kVgVT5/JFktWcF5gPaLn2Hn57ztPD/HtIQhS+fnvJkuSmgtCMSHAMRMfHwFS1NEYPWipVnneSyytOtPVq0RV+exYI14ijpFzJu6+uZl90qLXpy3dNE/xLwpMD/BBHjstTQtp0uZ5U1PHOfnHDZ0fo4s2JEdqRdI7zPm5vPvJxgJmgYCkScAMRN5F8HApBIY8XZQalkS0t7emAS9rc5j4UPneClESyZTuC4/H28Hk9ohEt6uVYuX3aeRfGbOkpu+nfCmonkJJLB27doxfR9259y7O5IdFacWdX6OJGEIkgWpkTGGioWv5vOdCcSBJoFApAhAzETKHTAmaQRWzF8xWW+zsrzdqFDnsQwk3mtEXe5127q0Cp26ZeTzeazbTlpnSHl7Vt+87LtkifVzly78x5SjQPMTRoDH+bY2K2uaIkea5GXAORJqCbDo5BdSfPaWRcIgyzL0jF7o2DbZ+Mp9X+lPGAo0BwSaQgBipinYUWmSCOTz+bHDzmPhcxGEvSQsS0St6jwWwX/IJBlFMg2BHXWS1AXQlgAE1ixe9s8W0S/nLVn0vQCX4xIQSASB2xcuO8oa2EmSNyMQ9pLhwfNz3hp2fo6wDGGSMWfZTW8lovFoBAg0iADETINAo5r4E1iRX5Fr4S1A7TdvIke8pppPvSfhWEvNu4VZhmkKQ2tpLczNz8Va6vi7Hi2oA4HVNy29X+jaz+bkF/5LHYpDESAQawKSSKzNr8iaRTNHmsYCh1+A2Zu6EMlDRpyfo8lCb78wFq5Y+EGsGw7jQSAEAhAzIUBFkfElMPQWjbKWFHzS/cAfGftN2lscWREaFfg8Fimwy018PQ3LG0FgTX75KXPyC1/iulYvXvYgEf1k7pJFP2hE3agDBOJKYM0NN4yT4ydmaWDXSo0FztD5Obo6P4c3gBG6KBRN09DGtxXmzZvXFdc2w24QGA0BiJnR0MO9sSRwWz4/RZpaVup6VvK2nJKymr0sjLc4Hrm+WQppTDzy0MJXvoL1zbF0OIxuCoE1+eUnSUuul1L+nCQtIkFLNE37kSXpQyJ5GxFtnbdk0QVNMQ6VgkBMCfDfr2J/Jid0ymrEW/QLftGmdrvcwy/cSBs6P8eyZOFAxuQ8zGJMmwyzQaAiAYiZiohwQRwJfCufH7uXWnL8ZovFihSUK53HYkdaMvZ5LPx/SQUSZGDnmTh6GTZHncDqm5f/O0l5AUmSJGg3kewlKSaSIF1o4itYchZ1D8K+OBG49eabpwvZmhXEB4WWcjel5L99ImuRfEOdn6NposDn51il83M2x6mNsBUEvAhAzKBfxJaAlFKsvmlZTmT44LOBQ89KOSwj1xwLYZApDJwJEFt3w/AYErjtpiWzLNJ+TYLGuMz//dwli06IYZNgMgjEjkA+n9fGFPWspnGuJ2WlfViofQQAv9ybol7u8ZbS6vwcofcZc/L57bFrLAxOJQGImVS6PbxGr1m89Aqpac/PzS/cWK9a1NsmTrgXQuZIltYP85snQfQmD752LosQBcJuMPXCjnJAoC4EVi1e9rAgutBRWKcQ4stzblm4ri4VoBAQAIGaCeTz+fEdppa1NF52Le2tpYnPPCudnyP4/BxBZFgk7e2lSRPGOOovXJPPd9dcqevGNTcvv3/OLQsvr1d5KCd9BCBm0ufz0Fq8evHS24jEV4nov+YuWXReNRXdlr9tSpF6csLidcAiK0sDqRIse6TkhPtS8r2w+F/NKGzbbNx3333Yp78a0LgWBBpMYM1NK84iYf1cEo0fqPqVuUsWndxgM1AdCIBAlQTuWrFias+BYo5IH9jFU+Y4v7S0XFvwslGDSBQkv1AcOD9n+qvPG5c89JAZtKrVS1dnqa/vv0nQmyS1L81dumB90HtxHQgoAhAz6AujJrA6v/xUacl/FEQ5QdRPmrx4Tv6mx9wFr1mzZlyx80AuwwOjvTOLNRDmtpPvNbLPYbF4cLR3aBGmaXSXDpDECcqj9hIKAIHmEVh987KfkaQ/JqIuackvzFt20781zxrUDAIgMFoCty1cdrRskVnLPiiUshovXxs4P6d0QKg0OB9VSK0gNNMQ/cK4Yfmit73qXb146dNEYjYR9QkS+TlLFq4crX24P10EIGbS5e+6t3b14qVfE6TdIUlyOJo/e4ta8WMtVmYg8d65LExMKb3JoYFBThaEEAb2zq+7W1AgCESKwJr80nOkpf1UkHx9zpJFp0fKOBgDAiBQNwLr1q3Tt7y2afD8HCGl46WlnGQvWZPSEJoo8NbSui4LpknnCEHzB6K3nULQK/2i+KUF+XyhboahoEQTgJhJtHvDa9zahcumFTP0HSnpk2Jo+QhXaBHRG/b2kEIaQ7umaMb8/HzsmhKeS1AyCESawJqbl/+QyPzRnFsWI1cm0p6CcSAQDoFVc1d1iLFF+/wcYW8pzVtL85Jy7USSfIwodThq7idNWzI3v2BZONag1CQRqF3M/O2/nUxtmW+QJS8g0+Q37urNfJL4oC0+BP5HSxd9cdwWKkqNWgXrl9KnV2r0owNH0At9B4Fdkghooo/0zGvU338v3fW5+2puGsaNmtHhRhCIHQGMG7FzWTMM/lrHmzRNPzCsap5L7Jc6rezk9Fl8UkWghnGjNjFz7Y+/TppYQ8cel6FDDiEaOzZVnNHYEoGO/n00c++bdPru12n6vvepKHRqtYrUp7XQ6plfoM6WcUCVFALFItGePUTvbNlD3d2bqde8kO6+aFtVzcO4URUuXAwCsSeAcSP2Lgy7ARduXU8f3/EitVhF6tFbyRQ6vTxxBr14cJbe6Dgy7OpRfhQJ1DBuVC9mvvrjq6itfQ2ddtoEiJgo9oLm2DSueKAkbHa9Tsd1b6XN4w+nb+Yubo4xqDVcAps3s6gp0O2f+UjgijBuBEaFC0EgkQQwbiTSraNp1Iyud+jKTf9G+zPt9OLBOXpxYpY2jz9iNEXi3qQRCDhuVCdmrn54IrUV36dZZ7RSx4SkIUN76kSg3ewlTUp7gMInoQRefXUfbX/vTrrzzxdWbCHGjYqIcAEIpIIAxo1UuLmaRmY7t5AxYXo1t+DatBEIMG5UJ2Z4mchhhy2jmTOxfihtnQntBQEngf37iZ7Z0EV3XFT5rQbGDfQdEAABJoBxA/0ABECgWgIBxo3qxMwNj/yMsrk/pkMPrdYUXA8CIJA0AuvXd9KB3k/S3X/2ctmmYdxImufRHhConQDGjdrZ4U4QSCuBCuNGdWLmGw8/TyedfCpNnJhWnGg3CICAIvDs03toT9fn6O7PPVkWCsYN9BkQAAGMG+gDIAACtRKoMN+AmKkVLO4DgbQTgJhJew9A+0GgegIYN6pnhjtAIO0Emi1mvnNqO11xdMugG7qKkq55qZfuf6d/mGsuP6qF7jmljToyQ8fVPL7DpPN+u3/wusc+PpY+OlHzvJ8vcv+e//vcqfqILrC1R9IXnjtAT+w0ie07/9DM4H+ri/9oik7fnzWGXu+yaK7VeK0AACAASURBVEWh1/55Wrv3UTqqTV88qsWzPi7ztS6LZj6xr2J3ZJsPbxcVr3W3zY/rq380jk7s0AbrdbZdfbnkhDaal22l1qHL6Ltv99OVL/RUtNd5gWI2IUMjfKT8+84BOaJt3JYTOjTbB/zxY12LTapfcD8od7+bpxcnZ1mq3e7rgvQn7tPu58LJ0c9OZaPf7xV/Zz9Vz1A536jfsQ3quQjk+BAnJRg3Sh7AuFH6u4Bxw7L/FmLcKD8yYdzAuMEEMN8Ymr+mZdwINTLDE+mjxohhE1uekH1qsk6rjD5a/Hqv/eSpAcgpXrwmWEqs7OiV9OUXemwxoj6qDOek3k8YsF0HtQh74nbpkS0VxYxTUKkJrZfgCCpEyg3Hlcrwm5Sq9jsnutxO/jhFlNsnLGS+fnwL/d0b/YP+UOLm17uGi8lKE1y24aLDM/ZlL+4t/fFVH6dYdU/GvcTMox8Uh4kpZROL4GpEFte79qQ26uyX1KaXfO7sN34TeTenoNdVI2a8RDTfzzY7nw81OJdrh5fP3AO63wDPdV4yLeP7ksDX7yGJGYwblZ60kb/HuFF6CYJxY+jvKsaN0gtOzDf8xxOMGxg3kjLfCE3MlJsgOSfZaoK1buvwySs/fs7oCE+M1aR3b7+kH20rDk6++VpVplM8+T2oPPG7+tgWuv6VXjp7sh4rMeOc+Dsn5UoUqkkp/ze/0XRzdfP2K69cPX5DI/vgvR5p/1pFWpSNTlExtW2kwHVHZtyTEnf73JE9P5uUuPh/2/rpb6YPF21KmLptLdf3/MQQR/DUG5BKkb5qrnOKdS7Xqx3u58TJwi1W3aK33PNXcUodgpjBuFGRuucFlSYlGDeqE+sYN4a/5MK4gfkG5huVx2aMG80bN0ITM15RAa+uUOmtsPNN94Jcmz1J5ojB1FYx+OafJ2QrT2yjjXtMOmeKPviGOWliptyk1TkBZyHw4Lv99ptK/pRbOuQV0an8yI68QomVe98qLR90R3vU7x94t5/+8ogWYkGqIkZBIjPOt4xch4rqVbJVCSy1VFCJDi/B4ldWJe7O+0YbmfGrq1w7vKJr5bg4Ix83ZlvtS4MsgRxRZghiBuNGpR7t/ftyYqZS/1W/x7gxxBbjxsh+hnGjtNIA841S38C44f2M8AtdzDeGj6UqyBDmfCMUMVPpj6ezC1SKADijKJyTwmLm9k19dOXRLXTtS6WlZjyBPGuSTk/tNoctl/H6A69sU5PpoJNPt81+y8y8cnT43qD5HuUmJUHeoqs/wvz23ysPycuOoPki5aZZbj+6J6VuscM5OmrJWFAx4xw8gyw184pKOJdTBeGp/nh5Rbm8eATtT37XeS0zq9SOSi8E3HYqju0a2XlSXjlsgabUdRYzGDdGUse4UVomql6SYNzwzvHEuFHKb3UvCXc/UZhvDCeC+Yb3MjO3WMN8YyiyHdX5RizFDEca1pzURo+8b9pv6HnizEKGP87JqnuSrh7jajcAiErOTJDJt1PMOIctZ5K/32YBfL1zwwD3Bgx+E1wvkeHu8E4xwz5T+U88kVYi1bkBgNcys2rFjHugdvMLwjNMMePcGEOx7bNoRL5MpXZUO7hwXbXmIA3rAzETMxg3Ri7lVf7EuDHUsys9bxg3hl5EBXrp4b4I40bZDYcw3yjfqzDfGOJTzcvTpM83QhEzalLM/1ZavlJpIua1zEwl7nM05lajz15iNv+1Uv6LW8xU2hksaGcIGpmpVF+lwb9ey0X83iQEfftdyS/Odqilal5tU4LILWacETIOywbJmXGXUY6lV1TKLWb5v9WOdeXe6AVlxuUF7U/u6/yS84O045wpmRHL+ir1s2pY+pZV50kJxo3Kux36+QLjhv8b1mr6epDnDeNGKVIWdKnviD6LcSMWYqbS370gLxcrlaH6BuYbQ09JUGaYbwwfWUITM+U6pzPUO22M5pmozmb6bQDAYobvU3kyx4/TbNHkrrNSUqx6Q602A3AmlZd7++ZXbpD6Kk0yK5URNJHXLeyc9aolYLxMz28yX00ehl+eg3PXOPaXWi6i/giq6ABHinqsUm6PmiiMdgMAv/7nXo5RjqezXUGvcy6LLNefvESP145kQdrx5M6irx/9+nE1E7xGihmMG5VGCO/fY9zwFzPVTpS8dvbDuFHqdxg3TMJ8o9QXnM8V5hveO4Ji3GjcuBGamFFvWb22Znaf+aHe7AfZmtm585RaEqXWldciZtw5NGqq4FwG5d45q5liJujWzH5bCVfa3Uq1P2gidjnR56zL2GeNEDNcl1oKqJb++YmZapdF+dnvFsjltlyeMU4bXPJV7XXODQ5UO51nJPlFcBQP1aeDtqPc1sydxZGbQER1UoJxIxwxg3Ej2JbuQZ+3ascD9qpzIxaux2t8wbjh6P/fePh5OunkU2nixEAPhd+W7phv+OOr9BIE4wbGDa/AQhTnG6GKGedkVT1Ooz000ylm3OKlFjHjnLxXOlzSKXSq3QCgXJ6Kc6jxy/NxH57nvi7ooZle13kdmhk0X6ac6HMKRV4O6I7MOB8S9cdeiRn3AaVeuSR+Q3Ql4eNlszNXiMv1OzSzXtf5iRk1meeJzoYPTTpzoj64UYK7ve52eC2R8fNjlMUMxo0hT2PcwLjhFEEYN8rrmqB/F4OMle5oPOYbQweQY74x1A8x3/A/6F5RasR8I3QxE+iVCi4CARCIH4EQ1r7HDwIsBgEQqIoAxo2qcOFiEAABIqowbkDMoJeAAAjURgCTktq44S4QSDMBjBtp9j7aDgK1EYCYqY1bGHe5lyi56wi6tCsM2/zKLLdTGd/jtxwrTBu9lsU56wu6NCdMG1NRNiYlDXEzxo36YMa4UR+Ooy4F48aoEQYpAONGEEqVr8G4UZlRQ66AmGkIZlQCAukjgElJ+nyOFoPAaAlg3BgtQdwPAukjADGTPp+jxSDQEAKYlDQEMyoBgUQRwLiRKHeiMSDQEAIQMw3BjEpAIH0EMClJn8/RYhAYLQGMG6MliPtBIH0EIGbS53O0GAQaQgCTkoZgRiUgkCgCGDcS5U40BgQaQgBipiGYUQkIpI8AJiXp8zlaDAKjJYBxY7QEcT8IpI8AxEw6fO7edcy9y5jz9+V2++KDLv/+lHb6j/eL9NnDMsSHXd7/Tv8wiOoar99VS5sPU9p6wKIndprV3orrm00Ak5Jme2DU9WPcGDVCFFAtAYwb1RKL3PUYNyLnkuQbBDGTfB+7TybmFju/y47T6OpjW+j6V3ptYcK/O2uSTjOf2DcCTiPFTD1FUfK9HMEWYlISQacENwnjRnBWuLKOBDBu1BFm44vCuNF45qgRh2Ymvg9wZGPliW10+6Y++saMVprWLujNfRbtKUr6sG+o+Zv3W3TlCz2DX6iIyKVHttAVR7fY33/37X568N3+EZGZG7OtdGKHZl/zWpdF177UQ98+tZ2mtgnqyAhS5+M439Y4y5oxTqNf7zLp8HYxrJyndpt23RxFumNTH103YL+KKrFtf3Z4hlo1omteKgkxfCJEAJOSCDmjOlMwblTHC1fXkQDGjTrCbGxRGDcayxu1OQggMpPs7sAC4pixJaHBn/N+u5/4sCwWCtt6JF14mG6LGreY4WvVwDT/tV77XhZFLBh4eZlaZsb/soDh7/l6Fjb/+HY//Z9jW+iBd4v05M6iLX5YrHzmsAy5y7rkiMzgddPGaCPK+ZujW+ylbF88qiSo2P7HPj7W/plt9osgJdurMWkdJiUxcdRIMzFuxNZ18Tcc40ZsfYhxI7aui7/hEDPx92G5FvDEf0efpFMmaIP5Lf9x5hh6Ya9FR7SLQaHjFjM8KCmxM+vJ/XYVz50zll7tlDTrYG1YzszZk/XB6I2KoigRwiKH79tXJBqXIfIqS+XWOCM37nK+fnwLPfK+SYtf7yU+cZdF2PN7LNt+Fjj4RJAAJiURdEowkzBuBOOEq0IggHEjBKiNKRLjRmM4oxYPAhAzye4WanD56MGaHQEx9ll2hIWXeXH05N63Skuz3Dkzl0zL0IPvFj2jKc7IjNFt0VFjhS1SWGRcdmSGvvlW8MiM2kSA83ZYoLjLqRSZgZiJcP/FpCTCzilvGsaN2Lou/oZj3IitDzFuxNZ18TccYib+PizXAiUwnt5j0V9Ny1CfRdRrSTuXhQWNypPx283ML8/FucyMl5dxLs7OPkmd/ZLWbSsSLx8LmjPDkRnesez7s8YMKyf/+z572dpBLcI3ZwZiJsL9F5OSCDunvGkYN2LruvgbjnEjtj7EuBFb18XfcIiZ+PuwUgs4R4YFwReeOzBsi2P+nj9eu5ZVKhO/B4GKBDApqYgoyhdg3IiydxJsG8aNWDsX40as3Rdf4yFm4uu7aizn8O+5U/VhtzgjM9WUhWtBIBABTEoCYYryRRg3ouydhNqGcSP2jsW4EXsXxq8BdRUzNzzyM8rm/pgOPTR+IGAxCIBAfQmsX99JB3o/SXf/2ctlC8a4UV/uKA0E4kwA40acvQfbQaA5BCqMG6sXL5NzlywS5Ywb+uW1P/46HXbYMpo5s7R+CR8QAIF0Eti/n+iZDV10x0UTKgLAuFERES4AgVQQwLiRCjejkSBQVwIBxo3qxMzVD0+ktuL7NOuMVuqoPIepa2NQGAiAQHQIvPrqPtr+3p10558vrGgUxo2KiHABCKSCAMaNVLgZjQSBuhIIMG5UJ2bYuq/++Cpqa19Dp502gcaWDjfEBwRAIEUENm8memdLgW7/zEcCtxrjRmBUuBAEEkkA40Yi3YpGgUCoBAKOG9WLGbaal41oYg0de1yGDjmEIGpCdSUKB4HmEygWifbsYRGzh7q7N1OveSHdfdG2qgzDuFEVLlwMArEngHEj9i5EA0Cg4QRqGDdqEzPcsr/9t5OpLfMNsuQFZJpTiGTZxJuGw0CFoRE4PrOP/mrsVtpptdIOq5V2mm32z/Z/m20kQ6sZBTeNgCb6SM+8Rv3999Jdn7uvZjswbtSMLu43/mHbLtrQN5F6pRb3psD+oAQwbgQllfrrxosiTdH7aIrG/++1f56q9dF+qdO3uo9JPZ9UAahh3KhdzKSKLBrrJnDrzbdO10V/Tlp6Vgorp0nKSqIcEWUFiYJF0iBBhpBaQWimIfqFccPyRW+DJAiAQDoJrF68fKvU+mfPy+eri+ilExdaDQKJI3BPPj++x2zLmsLMkaQsaSJLUtrzhoHGGpJ43kAFnj/o0ip06ZaRz+e7EwcDDaorAYiZuuJEYfl8XhtPrTlpWVmLZE6QliXiwUrwv5MEkWFJaQhNFMgSBpFptI/JFL66YMEO0AMBEEguAYiZ5PoWLQMBReDiiy/Wz5x5WtY5BxBCZiWLFikmC0EF5xxA12Wht1czFqzEHAC9qHYCEDO1s8OdVRLI5/PjO0wtawrNfisjBeVE6Y3M4FsZEixySlEdXeqFdr3XuAZvZaokjctBIHoEIGai5xNYBAK1Erht4bKjZYvMqtUZ/DddI5GV9stLMgRRwXKszjBlS+HGW27cUmt9uA8EyhGAmEH/iASBFfNXTM1kijkiPUsaD5AypwmRlZJyJOQuIURBSmFIsgyNREFomrHh1eeNhx56yIxEA2AECIBAWQIQM+ggIBAvAnetWDG154DH32X7BaTYTbycnETB+Xe5m/oK+XzeildLYW3cCUDMxN2DKbAf+TkpcDKamHgCEDOJdzEaGEMC5fNYeGMnFivIY4mha1NlMsRMqtydrMYiPydZ/kRrkk0AYibZ/kXrokvAK4+FhCwl3w/ksZCUhnTkshaLmQLyWKLrU1g2nADEDHpEIgn45+fYmxHw7tGGOz+nS+/FrimJ7A1oVBQIQMxEwQuwIckEkMeSZO+ibeUIQMygf6SOgDs/R1gyR5yfY28tLXfZIgf5OanrF2hwuAQgZsLli9LTQaCWPBbkl6ajb6S5lRAzafY+2j6CgPvNFs7PQScBgfoQgJipD0eUknwCpZUFfuexII8l+T0ALayWAMRMtcRwfSoJeK45xvk5qewLaHRtBCBmauOGu5JJoGweC4nJvLUxrxCwhGUfPo0z2ZLZD9Cq+hCAmKkPR5SSYgLut2hD5+cgPyfF3QJNdxGAmEGXSCOBYdF+aeVIlD+PRfQL44bli95OIyu0GQRqJQAxUys53AcCAQg41zdLYeU0qWV5Fxnk5wSAh0sSRQBiJlHuRGMcBJDHgu4AAs0lADHTXP6oPcUEyufnUMHiHdckGUJoBaGZBt7YpbizJKDpEDMJcGKKm1B9HoteaNd7jWvy+e4UY0PTQaAhBCBmGoIZlYBAcALIzwnOClfGhwDETHx8lVZLA+WxCGFYEnksae0jaHc0CUDMRNMvsAoEPAm4T2t25+fYJzULWSBLGCTI0KVV6NItnJ+D/tR0AhAzTXcBDBggMBQVp6yUYiCPhQaW/5LByfeW4FPvERVHpwGBOBCAmImDl2AjCAQgMCI/R2hZySc8E2Vxfk4AgLgkVAIQM6HiReEuAu7zxKQlc1rpPLEskdhNJA0iUZBkGRqJgtA0Y/qrzxuXPPSQCZggAALxIgAxEy9/wVoQqImAehNpmSJHGmWHn5/jzM+RBaER8nNqooybyhGAmEH/qDeBUh6LljWFliNJWdKkHWkRpRc4gsWKIDKkpAJHqqkojHGt/QXksdTbEygPBJpLAGKmufxROwg0lcC6iy/Wt8w8LWsWTVvkCNJ4EpAjEvzvJJ4IWFIaQhOlpWtkGsViprBg5YIdTTUclceOAMRM7FwWCYMr5bGQvbRWFOw8Fk0rkGkaQreMOfn89kg0AEaAAAiETgBiJnTEqAAE4kmA83P2UUuOLJnlt55CUK60RIN46ZpEfk48/dosqyFmmkU+HvUGzWMhiwxNlwXs7hgPv8JKEGgEAYiZRlBGHSCQMAJr8vlDpNmaJV1mpWXlNOTnJMzD9W8OxEz9mcatxGryWFi06Bm9MP3VGcYlD12CPJa4ORv2gkADCUDMNBA2qgKBNBBAfk4avFx9GyFmqmcWxzvK57GQIKLheSyaMMYR8lji6GvYDAJRIQAxExVPwA4QSDiBdevW6Vte2zSQn6NlB5J0kZ+TcL+r5kHMJMfR+XxeG0+tOWlZWYtkzs61kzJLws63mzwyj0UYQu9DHktyugBaAgKRIgAxEyl3wBgQSCcB5Ock3+8QM/Hz8d/dfOv0ftGfk1b581iQxxI/38JiEEgSAYiZJHkTbQGBBBKomJ8jRYGEMJznRXRTXyGfz1sJxBHbJkHMRNN1nMfS1mZlTXvbds6BkzkSYiBy6jyPhQyyrFIey4kzjEsuQR5LND0Kq0AgfQQgZtLnc7QYBBJDwJ2fIwYmYnxQqH2KN5FBkrduLZ2fY8qWwo233LglMQBi1BCImeY5S+WxWJpeEivDzmNBHkvzPIOaQQAE6kEAYqYeFFEGCIBApAhwfs5bL/2et5DOkqZlNaKsdJyfw9tKk+P8HF2Xhd5ezcD5OeG5EWImPLZcsjOPhc+MkpbI+eWx2DktUi8gjyVcn6B0EACBxhCAmGkMZ9QCAiAQEQKr5q7qEGOLWT4/hwWORiLrPD+HTw0nYRl8SCgfFqpZptGlW0Y+n++OSBNiaQbETH3cduvNt07Xzf6c1PjMJ22gD7NYt89/skW6tA+5JYOEaeimXrhh+aK361M7SgEBEACB6BGAmImeT2ARCIBAkwio/BwpTDuq4zw/RxDtlJIniCxypD1ZFJpmID8nmLMgZoJx4qvceSx8aC2LldIOgAN5LJIMKVi0WAaLmGNP+UgBeSzBGeNKEACB5BCAmEmOL9ESEACBEAlwfo6pl5buaPYyHpUoLWYQSYPzcwRHdcgyhEWGqSM/x+kOiJnhndMrj4WkliV7OeRQHotFwhAkC6QJQ+7PGPNWz+sKsZujaBAAARCIHQGImdi5DAaDAAhEicBgfk6GsmRpWSFZ5Nhv0HliOonzc3gzAhK8G5Qw0pqfk0Yx45fHIoQdaZmizmMhaZXEMPJYovRowxYQAIGYEICYiYmjYCYIgED8CAzPzxE5jThPh4WOnd8gk56fs/a6tWOuv+P6A+y5JIsZvzwWFrSS5CZ7Rz2NCpadxyIMvVUWbliEPJb4PdGwGARAIIoEIGai6BXYBAIgkHgCzvwc3m2NhJaVHNUpbSs9Ij+nX9OMvhidn3PrTUsu1Uj7Z9Ion+ncdUexY8omqfXPFmbLBULI24nkt+YsuWluXBxdVR6LZhlURB5LXHwLO0EABOJNAGIm3v6D9SAAAgkkcNuyZUebfc78HLKXrgkSMyySdsJ3HPJzVi9etpOIxgoik0jokmSnlPIgQaLF1PUT5ufnb4qS+3zzWEpLB/l/BcGbQBAf0oo8lij5DraAAAiklwDETHp9j5aDAAjEjEDc8nNWL156NUlxOwka40DdK4j+Zc6SRVc2Az/nsbRSa67FsrLO81iQx9IMb6BOEAABEBg9AYiZ0TNECSAAAiDQdAIqP8cyzZwudN58ICt5IwJJOZIkibfxDfn8nDU3L79/zi0LL3fCWL142ftEdKj6TpDoL2raic6ozJrFS6+Qmvb83PzCjfUC6ZXHYm+37ZPHYmn9xvx8fnO96kc5IAACIAACjSEAMdMYzqgFBEAABJpGYE1+zSFmf29O6DLL+TmShJ2bU8/8nNVLV2epr++/SdCbJLUvzV26YD032BWdGRGVWb146W1E4qtE9F9zlyw6rxpIZfNYJH3Iy8JKu8iRIXVZ4DyWAxmTD0AtVlMPrgUBEAABEIguAYiZ6PoGloEACIBA6ARW5vPHaFZLls/PEULmSIpsrfk5qxcvfZpIzCaiPkEiP2fJwpUlQaOiM6LfHIjKrM4vP1Va8h9F6TDIftLkxXPyNz3mbnDFPBaSA/lDwjClaWi6XsB5LKF3G1QAAiAAApEhADETGVfAEBAAARCIDoF8Pp8ZU9SzlNGzwrRynF/CJ9Hby9YETfQ6P8c06RwhaL4kGk9EnULQK/2i+KWMpZ9LpN1BUj4wd+miK1YvXvo1QdodkqQYaPHeoqZ9zM5j4dPuRWnzA2cei9r0wCLLkKYw9Ja2wpz8nO3RIQZLQAAEQAAEmkEAYqYZ1FEnCIAACMSYgGd+jn1yvXYiST4+hzoczesnTVsipTlTWPJu0rRFUtInRUnwqI9FRG/weSwkpKFpomBawkAeS4w7CUwHARAAgQYRgJhpEGhUAwJOAmfS8xf0txev04riY3px2KQOoEAgtgTO/fJv6eDDO4fZX+zTqe9AK/3nnWfTYdkd9PG/2khmUaNMizl4XbEvQxt/MpPeefXw2LYdhoPAIAFBZrGN3tF75PcEmWs30MeGPxRABQIgUFcCEDN1xYnCQKAygTNan/m+2U4XvXumnLDnWEn94yrfgytAIOoELmwz6OMtW6hFWNQjM2SSoJeLh9KL/YfRG+bEQfM7RC/NzOyg01veo+n6XipKjVqFSX1Sp9X7PkGdsi3qTYV9IFCWgDCJxm0XNPUVOjD591qv3k+f30Bn/BzYQAAEwiEAMRMOV5QKAp4EWMh0HkUXFT5rTQAiEEgKgRn6brpy7EbaLzP0YvFwerH/UNpsHlyxeeNEP83MbLeFzXH6h/Y939zP+wfgAwLJIDBxk6Dcw5pJUpy5gWY9l4xWoRUgEC0CEDPR8gesSTABXlrWN6H4g+evgJBJsJtT27RsZhcZxck1t79dFEkjSftlS81l4EYQiCKBQ14SdORvxbMbD8yGUo+ig2BT7AlAzMTehWhAXAic3v7ML975lDxvx0kyLibDThAAARAAgToQOP3bWldLt/ZpRGfqABNFgICLAMQMugQINIjAGZlnu178G3M8cmQaBBzVgAAIgEBECBz7C3Fg6iti7tM0++6ImAQzQCAxBCBmEuNKNCTqBM6kZ+WG64Z2cIq6vbAPBEAABECgPgSm/U6jaU9p+adp1i31KRGlgAAIKAIQM+gLINAgAhAzDQKNakAABEAgYgRKYoZueZpm5yNmGswBgdgTgJiJvQvRgLgQqFbMvDrvZDrx0DGDzeszJa16/D1a/Oi7I5r8nc8fS1ecOZUeNzrpvHtft3+vvvPjw9d+75mdtPai6XTv+u0jyn3s6hPohEPa6QsPvknTDmqle/7iaOpo00cU57SL7zk3O3KjtnK2uwv8o+wE+v6lx9l1uj9b9/bZ9jxhlI5t8KuPf/faBwdo5qqX7euWnH8kzTv3cGrV1YHzRN/dsIOu/OFb9u9VnY++vnfwO1U3c7zk1El0zY/eJq6fbXNfV85mLqer17Tvv//ZnSP8Ug0bJw9V54R2fbBs9fvLz5hi++udPX2DDNTvgvi1Gpuqabuyq7PHHOZH1V/PP+GgEd8rH3N/XfHYNt++wWU4ferX7/m54o/qG87+8es3uwafH2WT8v0XZ0/x7NvOvqbat+6F3cP6kVf/c/bPcu1XfF/f3kO/fat7RD92tpPLvPZf3w7EyG98cD9jQcdXL99yHfy937ilfBHU5mrHl3LPiGqXV/91Pq+VxtKgvCBmgvYkXAcC1ROAmKmeGe4AgZoIBBUzfhNRNflwT9jUH+O9PSYddXDriIktG8tleokWv+/5Hvek10/0OGHwPYdPaPGcQH90+jhP29ww/YSFs51qIupXn7NMnkh+/exD6e9+9cGgYFOTSzV5Ha2YcbfBzy6nMGJh45woBZmIO+vhsi46qXR+y4vb9g+bhKs+xOLTXW4Qv1aahJZ7AMr5RNXNAsw94ec63WKGr//UcR2Dk+Fyfgr6UHrVo/yyo7tIX1731jCxrAT9gvOO8Ozbznq9xIy7DXy9agf/rMS5l13Oa1nMqBcVzu/9hLWXMHf3Hy/xyALjoHZ9hKisxNfLt04h5rSdy1LPID8HD27c5fmSIOhzxXV7jS/lnhGnDW4R6/aZn28qMXH+HmKmGlq4FgSqIwAxUx0vXA0CNRMIKma83hyrSr0mijwpuPoTh9A3139AL09PngAAIABJREFU15192IhJIt/bbDHj98baC2ZQYcGToCBixjl5VxEdrtf5Pf+3V8RFiY1KkZmgky4/35bzuV+H43ve6+y3f60m3Kp9yt8cAZk6PjNMRAYRM24+Tm6VHgA/nzj9etYx4+1inNER94RRvYUPGkGrZJf6vZe4ZZYvbdtPH50+nh54bpctet0T8SB9zd3PvepSdrifyaiImXICxI9xOd/6CY2gz5+zTj8f+I0v5Z6RSu1U97IIg5gJ+nThOhBoDgGImeZwR60pJBBEzJSLlPghc/6B95sUp1nM+EW0nDyDCii/ZWZBxYzXW/paHgWnP/l+d+RJ/f6B53bSX/7BJOKonTOa5Vw+6BdxUyL5+n/fYi+PC/rxm3A6yzv7+I7BpXvOCJWKFFx6+mR72aRfFLJS1KGcrW5fM6uVFx5J8x95l24893BbIPIE1v3M1CJmgtyjbI2KmFFC1ivC6se1nG+9hIZbSASNuFUjZio9I9X0b4iZoE8/rgOB5hCAmGkOd9SaQgJBxEw1f2AZYdA3weXEjF8uDJev1oOXy5lxrhlvxjIzrxwdtt05EXavtXevc2+UmGG73LlQ7tyJII+GO9rkFrHuiRznC7Fo4ByhoJGZWoR1uYmw00avt+JqwshLfv7qtMmDfc8ZFSqXn+POcyjH0dlP+Zm7bNZke3kZiyglqM45foId8VRizt2HnOWrvuZ+Hp1v9yv5NUiOWzXLzLxyzty5W17LzNjOaifvlXzr7p/u5ZZB/VrN+FLpGammjeV848xTLOdjLDOr9ATg9yBQOwGImdrZ4U4QqIpArWLG/Ye03ITEb+lEIyMzXuKimolmuYmNe+JfzZtv5SynmFATkUaKGWWHu51Bc2a8bHVPDr2iCiqngBPZg0Rm6ilmvMpyTzad/fwnr+6hc2Z00NNb9gXKE6nqQXRN1jkXhj8qGqOiNMzJGZ0I0tcqiRmvvq36YJQiM9VM9IP41r3czi1uqonMBBlfgjwjfjlazvLVSw+nyK1myaWzX0LMVPuU4noQCE4AYiY4K1wJAqMiEETMVJpAeu2sVekNLBvdSDHjnAC6E+2DAPSaiPgtzwoywfSrM8guZeotdb1yZvxs8cvr8bo+yFtit7+dmyfwMqogYqbaKKGy1csnQaIa7uWAXssDg056K/UztbTs9iffp7/95KGDeTJ8H0+0n9rcTZzXo5ac8fdB+ppbzJS7x/3iIUpiJkhbnf6uFB11ttVrB8WgfnXb5Te+BHlGKvVv5zMJMVPpicLvQaC5BCBmmssftaeIQBAxoyZT/K8zOVphck7As1PaR+RK8HXOXYLU1sPNEjNKDHjlP/i53m9iw5NM925tlSZdlXZTcuaa+C0JqleicrlNENyRlXKPRblNBNQuVCxw3bkwql909ZjUU7QGt9wOsjV3NW+j3T7x84FTYHFf95rMu30edNIbZFjhsvccMCk3tX1wKZkSLRPH6DR9YtuwLcsr9TX10oCXbaqd2sptABBVMVMpMd7JNqhv1TjAy9re/rCPjp7YOmy3tKB+9fKBl+gN8oywTbzph3uXOKdIU6IfYibIE4VrQKB5BCBmmsceNaeMQFAxoya97jNC1GS0t2jZu1M5lwu5J5vlciic59SUiwQFza1wutFvwsf2zJjS7nvehNcEyZ3krbg4zygJMsH02wDAax0/1+E8E0PVqZY7jWbSpSbKzq2G+btqJo/lBJFz4mzs7PHciltFSJy5UF5ihpm5WQR9XL3enrs3KPAS57wpgDuHQ7Hh63kLYzUBHc0GAM7J6qlHjKUPuvs9z5zZ0d0/4kyjSknxXv7xiyqq5Y5RW2ZWzdbM5cSa19JHlZ9X68YOQcYX7vtOQenst257K0V2sMws6FOP60CguQQgZprLH7WniEBQMaOQuBPF+Xt3orE7p8A5SXRORusRmSm3UYCakPlNNtSk1OuAR3cXKCcY1ORj084eewJabvmSM0/H69BCr8TdoIdrei3tc2844Dfx9VoCEzRfhtvrd16PM9Jx6+PveYoZtzjw29ihmhwnt//cfaDc5NgpFjfv7h0hZrhs5RMWF3f86n17+3Ev/nxtNZspeEUwneLSuQOcEqJ+y6kUL77OayLt1a/cm1DUe5lZJUZ+S7GqYRjUt2rjAr/+Wy5PzunXIOPLlg/7aPpE7/O23NFAp7+dvNyHxpZbthb0gFnkzKTojz2a2nACEDMNR44K00qgWjGTVk5oNwiAAAgkjQDETNI8ivZEiQDETJS8AVsSTQBiJtHuReNAAARAwJcAxAw6BwiERwBiJjy2KBkEhhGAmBnKD/FbAsPAgi65SmL3qnTWiHtpUiMYeC2RctY7miVp9ba/0nKltPevanl7LXV1lhH0jJVq603i9RAzSfQq2hQVAhAzUfEE7Eg8AYiZxLsYDQQBEAABTwIQM+gYIBAeAYiZ8NiiZBBAZAZ9AARAAARAgCBm0AlAIDwCEDPhsUXJIAAxgz4AAiAAAiAAMYM+AAIhEoCYCREuigYBJwEsM0N/AAEQAIF0EkBkJp1+R6sbQwBipjGcUQsIEMQMOgEIgAAIpJMAxEw6/Y5WN4YAxExjOKMWEICYQR+INAH3AaTuwxPVTmGvb+8hdQhioxvENvBOePc/u7PRVaM+EBgVAYiZUeHDzSBQlgDEDDoICDSIACIzDQKNaqomwELmhEPa6QsPvklPGJ32/e7veIvmy2ZNpp6iRdf+69uD11Vd2ShuYJs27+6lK3/41ihKwa0g0HgCEDONZ44a00MAYiY9vkZLm0wAYqbJDkD1ngSUSLn7Nx/QLedPo442nTgq815nPx0+oYWe2txtiwc+c4R/Pm3aWHrktb20+NF3SZ1B01u0aEd3kR54bpddx7xzDyfnd6dOG0vnzOigzh6TntjUSZ8/dTK16sKuZ+aqlz3LOeKgFrrizKl2eXyWzYMbd9Glp0+mtoxGqx5/jz5+7Hg6NzuB+kxp/7exs4dWXngkTR3fYkduIHjQ4aNEAGImSt6ALUkjADGTNI+iPZElADETWdek2jAV7TjrmPG2WGHR8O1LjrWFCQuKYya10fee2WkLhfmPvEtnH99BfC2LkOeun2kLGxYSay+aTveu304XnnjQiO9YePCHl6epe1gMqbqVQHKWs+dAkdb+6n37PnUPl8ORmW17++0o0ZfXvUXnHD/B/nndC7vp8jMm2zZiGVqqu3QkGw8xE0m3wKiEEICYSYgj0YzoE4CYib6P0mghC4Xnt+63BYpaPvaba0+kbz21nb44e4otHvijoiQqUnLPb7bTZ086mG59/D1bPHA5r77fQ7OOGjvsOxY7SoSwUPr+pcfZeS/qs3HrfmrPiBH3sLC55y+OtiNFKvqiyuF7WWSxOOI8mr//86Pp12920aeO62jaErg09h20OTgBiJngrHAlCFRLAGKmWmK4HgRqJAAxUyM43BYqASVmzj/hIDuqkZ3Sbkc6fvLqh3TZrCn0nd/toEtOnWRHajiawh93ROXJNzoHozkqMuP8TokQXvrljMyohqnv1D3r3+oeFEVb9/YNll0pMsPiqln5PKE6CYXHngDETOxdiAZEmADETISdA9OSRQBiJln+TEprvvP5Y+2oDOfIcA4K56dwXgp/OBeFP2pJl9ocQOXZrN/cZee/8Kerx6Rvrt9u/8w5M87vnGJG5dlwzgx/vrthh71szOselRPz7p4++uWm0sYEl58xxTdn5sZzD4eYSUrHTFg7IGYS5lA0J1IEIGYi5Q4Yk2QCEDNJ9m5826a2XN7bY9p5MOoTZCtmd0SFozdekRkV0fGj5FVOpXviSxyWp5FAScxo+adp1i1pbD/aDAJhEoCYCZMuygYBBwGIGXSHKBPg3cpOPHTMoIkqT6WcqHBGWdw7kzl3K6vUbq9yKt2D34NAnAhAzMTJW7A1bgQgZuLmMdgbWwJnZJ7tevFvzPH942LbBBgOAiAAAiBQA4FjfyEOTH1FzH2aZt9dw+24BQRAoAwBiBl0DxBoEIHT25/5xTufkuftOEk2qEZUAwIgAAIgEAUCp39b62rp1j69gWY9FwV7YAMIJIkAxEySvIm2RJrAmfT8BX0Tij94/gprQqQNhXEgAAIgAAJ1I3DIS4KO/K14duOB2bPrVigKAgEQGCQAMYPOAAINJHBG6zPf7zyKLip8FoKmgdhRFQiAAAg0hcDETYJyD2smSXEmojJNcQEqTQEBiJkUOBlNjBYBFjRmO1307plywp5jJSGHJlr+gTUgAAIgMBoCwiQat13Q1FfowOTfa716P31+A53x89GUiXtBAAT8CUDMoHeAQBMI8JKz/vbidVpRfEwv0vgmmIAqQaChBLJnbaa3njuSin2ZhtaLykCg4QQEmcU2ekfvkd8TZK7dQB8rHZKEDwiAQCgEIGZCwYpCQQAEQAAEnARWL16+VWr9s+fl89tABgRAAARAAATqRQBipl4kUQ4IgAAIgIAvAYgZdA4QAAEQAIEwCEDMhEEVZYIACIAACAwjADGDDgECIAACIBAGAYiZMKiiTBAAARAAAYgZ9AEQAAEQAIHQCUDMhI4YFYAACIAACCAygz4AAiAAAiAQBgGImTCookwQAAEQAAFEZtAHQAAEQAAEQicAMRM6YlQAAiAAAiCAyAz6AAiAAAiAQBgEIGbCoIoyQQAEQAAEEJlBHwABEAABEAidAMRM6IhRAQiAAAiAACIz6AMgAAIgAAJhEICYCYMqygQBEAABEEBkBn0ABEAABEAgdAIQM6EjRgUgAAIgAAKIzKAPgAAIgAAIhEEAYiYMqigTBEAABEAAkRn0ARAAARAAgdAJQMyEjhgVgAAIgAAIIDKDPgACIAACIBAGAYiZMKiiTBAAARAAAURm0AdAAARAAARCJwAxEzpiVAACIAACIIDIDPoACIAACIBAGAQgZsKgijJBAARAAAQQmUEfAAEQAAEQCJ0AxEzoiFEBCIAACIAAIjPoAyAAAiAAAmEQgJgJgyrKBAEQAAEQQGQGfQAEQAAEQCB0AhAzoSNGBSAAAiAAAojMoA+AAAiAAAiEQQBiJgyqKBMEQAAEQACRGfQBEAABEACB0AlAzISOGBWAAAiAAAggMoM+AAIgAAIgEAYBiJkwqKJMEAABEAABRGbQB0AABEAABEInADETOmJUAAIgAAIggMgM+gAIgAAIgEAYBCBmwqCKMkEABEAABBCZQR8AARAAARAInQDETOiIUQEIgAAIgAAiM+gDIAACIAACYRCAmAmDKsoEARAAARBAZAZ9AARAAARAIHQCEDOhI0YFIAACIAACiMygD4AACIAACIRBAGImDKooEwRAAARAAJEZ9AEQAAEQAIHQCUDMhI4YFYAACIAACCAygz4AAiAAAiAQBgGImTCookwQAAEQAAFEZtAHQAAEQAAEQicAMRM6YlQAAiAAAukksPa6tWOuv+P6A9x6RGbS2QfQahAAARAImwDETNiEUT4IgAAIpJDArTctuVQj7Z9Jo3ymc9cdxY4pm6TWP1uYLRcIIW8nkt+as+SmuSlEgyaDAAiAAAjUkQDETB1hoigQAAEQAIEhAqsXL9tJRGMFkUkkdEmyU0p5kCDRYur6CfPz8zeBFwiAAAiAAAiMhgDEzGjo4V4QAAEQAAFfAqsXL72apLidBI1xXNQriP5lzpJFVwIdCIAACIAACIyWAMTMaAnifhAAARAAgTKCZtn7RHSoukCQ6C9q2omIyqDTgAAIgAAI1IMAxEw9KKIMEAABEAABTwKu6AyiMugnIAACIAACdSUAMVNXnCgMBEAABEDATWD1YhWdEf0mojLoICAAAiAAAnUkADFTR5goCgRAAARAYCQBOzpD2h0k5QNzly66AoxAAARAAARAoF4EIGbqRRLlgAAIgAAI+BJYdfPSH1jCvGl+Po8dzNBPQAAEQAAE6kYAYqZuKFEQCFQmcCY9d1VxjHW11itO1CxqrXwHrgABEAABEIgDAUujPqtNvpY5oN27gWbdFwebYSMIJIEAxEwSvIg2RJ7AJ2jjET1jzEcOTBbHbJtlHdx1pCQTUibyfoOBIAACIBCUgN5H1PGuoCOe0/aM2SU3tx/QL1xPp28Lej+uAwEQqI0AxExt3HAXCFRFYFb7M79//3SZ23qmrOo+XAwCIAACIBA/AtM2CDpsoyg81zP7I/GzHhaDQLwIQMzEy1+wNoYEPqo9s3x3jr626U+tcTE0HyaDAAiAAAjUQGDGf2r7JhXozqet2QtruB23gAAIBCQAMRMQFC4DgVoJzM480/nyX1sdPRNrLQH3gQAIgAAIxI1A+4dEJ/+L1vVMcfaEuNkOe0EgTgQgZuLkLdgaOwJn0bMn93TI3zx/pYU/ZrHzHgwGARAAgdEROO07Wmd7l/jkU3TGy6MrCXeDAAj4EYCYQd8AgRAJfIyeOaf7EPHjVy4zDw6xGhQNAiAAAiAQQQInPaDvGb9dfu53NPvJCJoHk0AgEQQgZhLhRjQiqgQgZqLqGdgFAiAAAuETgJgJnzFqAAGIGfQBEAiRAMRMiHBHUfQfZSfQ9y89jqYdNLQ/9msfHKCZq0orQbx+76zuuxt20JU/fIu+8/lj6fwTDqIvPPgmPWF0jrDosatPoHOz3isMnfXxjVzWFWdOHSyjq9eka370Nt3/7M6K9jivrYTFq22PG5103r2vV7TfXY8q69HX99o83J/Lz5hCay+aTveu306LH33X1zRVzoR2fbDN6uJyvlB+cBbsZu7Fxs8vfaakVY+/N8JWbsc9f3E0dfaYg75ecv6RNO/cw6lVF57tqtSf3P5XdXS06SPKc1/LF7w672Q68dAxg9du3dvn2w8r9Qn8PjwCEDPhsUXJIKAIQMygL4BAiAQgZkKEW2PRanL8+vaewQm8+o6LZGHCHxY7fpN0VXUQMXP4hJZBkeRnMk9Mjzq4ddhEnifcnzquw3Nyzb8LUq67PjUB//WbXYNtV5Pod/b0jRBzbnGhBJcSEfUSM1zuRSeVdsh4cdv+YcLKrw6+h21X4sNPELlt5jr8+PH3H50+boSg4u9POKSdmMe6F3aPEG7lOCjmm3b2DOsHbp/7CT/ln6e37BvkwvfyR4lvJW7cfajGRwS31ZEAxEwdYaIoEPAhADGDrgECIRKAmAkRbo1F8+Ty62cfSn/3qw+GvYF3fv/kG50NEzM82b7k1EkjJtBqguqetJabjJdD4iXi1PVuJmry7hVxctrL0YByoi9oZIYn5+919tvmsGhw1usnFNxlB7WZI11+YkYJB6dgcdZ/1jHjR4gI/sLPxnLM3f4tx8rZNo4mcpTILaq8bK/xEcFtdSQAMVNHmCgKBCBm0AdAoPEEIGYaz7xSjV6RCPc9lSIO6vp6RGa83rJXakMtkRk/EefXdmfkynmNk82DG3eNWsw4J/Fcj1tolovMsLjg6EQl0eAuoxoxw9yu/sQhdP2/b6Gzj+/wFJ5+NlZi7iyb2+63JM8pZvg6FpD88VveWKn/4PeNIwAx0zjWqCm9BBCZSa/v0fIGEICYaQDkGqpw5zu4cyXK5Wk4czCCiBm/nBleqqXEgJ9w8GtaLWKmXATIWU+QN/wqkrLisW2jFjPuiIpb3JXzhcoT8YtWONulbObcoGqWmTnt8RNN5QSXX9SNbXMKOWNnj6eY8Vpm5pVf45U/VMOjgVvqTABips5AURwIeBCAmEG3AIEQCUDMhAi3TkU7E+/V5Fi9/Q47Z6ZSRCHpYsZLBLhFV7moByfg87KxX73R5bn0qpyY8RKZ7s0CvJZ+eS1nq5eY4eVjXhsA+G3QwO1zCvNqNoKo0+ODYioQgJhBFwGB8AlAzITPGDWkmADETHyc74xIVFo+pVoVJDJTKVE/zcvM3Du4OXuLmsCXW/Kn2F37r2/bEaIgS+N41zV3ZMZrYwS2pdxudM5ISFjLzLw2hvB7omoVxvF5QuNpKcRMPP0Gq+NFAGImXv6CtTEjADETPYf5JYo7J4OVlk/VU8yUW/7lZ2sty8zKTXbdS8uCJtOPdgMAPyHH3x/UrlfcWc69dMy9eYDTT87lXl78/HZqcwskxXFvjzli9zd3JK+SwHC23ysK5N5lj7f/rmXDiOg9hemxCGImPb5GS5tHAGKmeexRcwoIQMxEz8l+GwBUs0tXPcUMl+W3NTMvhfI7S6VSxMeLfLmtmZ1nqATd5rjSRgnldugql5sTZGc5d3J9UJtVxMWLH/thxpR2e7tn/njtesffB10Kx9eOdmtm9/1eAkfV42dv9J7C9FgEMZMeX6OlzSMAMdM89qg5BQQgZqLpZK+kcuehg+WSzrlF6hBDv2VSqqwF5x3he2imO78hyGGPimYtkRl1r1fy+GgPzXQePqrqYRGmclnceSC84QIzmjIu47kltTP6oZaQ+dXhPqwzCEc/fk5BxOKOP147hrmT8iuJOq/+5HVopt9uZqqfOf3kPjQT+TLRHGsgZqLpF1iVLAIQM8nyJ1oTMQIQMxFzCMwBARAAgQYSgJhpIGxUlVoCEDOpdT0a3ggCEDONoIw6QAAEQCCaBCBmoukXWJUsAhAzyfInWhMxAhAzEXNIQs2ptCyOm41zSBLqfDQr0gQgZiLtHhiXEAIQMwlxJJoRTQIQM9H0C6wCARAAgUYQgJhpBGXUkXYCEDNp7wFof6gEIGZCxYvCQQAEQCDSBCBmIu0eGJcQAhAzCXEkmhFNAhAz0fQLrAIBEACBRhCAmGkEZdSRdgIQM2nvAWh/qAQgZkLFi8JBAARAINIEIGYi7R4YlxACEDMJcSSaEU0CEDPR9AusAgEQAIFGEICYaQRl1JF2AhAzae8BaH+oBCBmQsWLwutAwH3IpPswR7VT2uvbe+i8e1+vQ43VF8E28KGZ9z+7s/qbcQcINJEAxEwT4aPq1BCAmEmNq9HQZhCAmGkGddQZlAALmRMOaR92yr37uyXnH0mXzZpMPUWLrv3Xt+kJozNo8XW7jm3avLuXrvzhW3UrEwWBQCMIQMw0gjLqSDsBiJm09wC0P1QCEDOh4kXhoyCgRMrdv/mAbjl/GnW06cRRmfc6++nwCS301OZuWzy8Ou9k++fTpo2lR17bS4sffZf43nnnHk69RYt2dBfpged22Za4vzt12lg6Z0YHdfaY9MSmTvr8qZOpVRd2PTNXvexZzhEHtdAVZ061y+vqNenBjbvo0tMnU1tGo1WPv0cfP3Y8nZudQH2mtP/b2NlDKy88kqaOb7EjNxA8o+gUuLXuBCBm6o4UBYLACAIQM+gUIBAiAYiZEOGi6FERUNGOs44Zb4sVFg3fvuRYW5iwoDhmUht975mdtlCY/8i7dPbxHcTXsgh57vqZtrBhIbH2oul07/rtdOGJB434joUHf3h5mrqHxZCqWwkkZzl7DhRp7a/et+9T93A5HJnZtrffjhJ9ed1bdM7xE+yf172wmy4/Y7JtI5ahjapL4OYQCEDMhAAVRYKAiwDEDLoECIRIAGImRLgoelQEWCg8v3W/LVDU8rHfXHsifeup7fTF2VNs8cAfFSXhnzlScs9vttNnTzqYbn38PVs8cDmvvt9Ds44aO+w7FjtKhLBQ+v6lx9l5L+qzcet+as+IEfewsLnnL462I0Uq+qLK4XtZZLE44jyav//zo+nXb3bRp47raNoSuFE5ATcnngDETOJdjAZGgADETAScABOSSwBiJrm+jXvLlJg5/4SD7KhGdkq7Hen4yasf0mWzptB3freDLjl1kh2p4WgKf9wRlSff6ByM5qjIjPM7JUJ46ZczMqPYqe/UPevf6h4URVv39g2WXSkyw+KqWfk8ce8HsD9cAhAz4fJF6SDABCBm0A9AIEQCEDMhwkXRoyLwnc8fa0dlOEeGc1A46sJ5KfzhXBT+qCVdKulf5dms39xl57/wp6vHpG+u327/zDkzzu+cYkbl2XDODH++u2GHvWzM6x6VE/Punj765abShgOXnzHFN2fmxnMPh5gZVW/AzWERgJgJiyzKBYEhAhAz6A0gECIBiJkQ4aLoURFQWy7v7THtPBj1CbIVszuiwtEbr8iMiuj4GepVTqV7RtVo3AwCDSYAMdNg4KgulQQgZlLpdjS6UQQgZhpFGvXUSoB3Kzvx0DGDt6s8lXKiwhllce9M5tytrJJNXuVUuge/B4E4EYCYiZO3YGtcCUDMxNVzsDsWBM6iZ0/u6ZC/ef5Ka0IsDIaRIAACIAACdSNw2ne0zvYu8cmn6Iyh8GfdSkdBIAACTABiBv0ABEImMDvzTOfLf2119EwMuSIUDwIgAAIgEBkC7R8SnfwvWtczxdl4mRUZr8CQJBKAmEmiV9GmSBH4qPbM8t05+tqmP7XGRcowGAMCIAACIBAagRn/qe2bVKA7n7ZmLwytEhQMAiCAyAz6AAg0gsCs9md+//7pMrf1TNmI6lAHCIAACIBAEwlM2yDosI2i8FzP7I800QxUDQKpIIDITCrcjEY2m8AnaOMRPWPMRw5MFsdsm2Ud3HWkJHPo/MBmm4f6QQAEQAAERklA7yPqeFfQEc9pe8bskpvbD+gXrqfTt42yWNwOAiBQgQDEDLoICDSQwJn03FXFMdbVWq84UbMIcqaB7FFVuATGHnSAxk/eT+Mn7bP/7eB/J+2nA11tNKajl6QUtH3zJOrcPp66d4+j7l1jaf/eoV3UwrUOpYNA+AQsjfqsNvla5oB27waadV/4NaIGEAABJgAxg34AAiAAAiAQiMBdK1ZM7TlQzBHpWdJkVloypwmRlURZIrGbSBpEoiDJMjQSBaFpRjf1bRpPrTMsy1pPwrqbpH4okcwRiSyRnCSIDEtKQ2iiQJYwiEyjfUym8NUFC3YEMgoXgQAIgAAIpJoAxEyq3Y/GgwAIgMBwAvfk8+N7zLasKcwcScqSJrIkWXywYLE/hiQyhKQCCTJ0aRW6dMvI5/Pd5ViuXrx8q9T6Z8/L5weX3eTz+fEdppY1hWbXJQXlRKmewboZ5d+qAAAgAElEQVRIsMiRRqkuvdCu9xrXVKgLPgUBEAABEEgPAYiZ9PgaLQUBEAABm8DFF1+snznztKy0rKxFMidIywohs5JFixSThaCCM1qi67LQ26sZC1bWHi3xEjPl3LFi/oqpbW1W1jRFblgUSFKOhNwlhChIKQxnFGjDq88bDz30kAk3gwAIgAAIpIcAxEx6fI2WggAIpIzAbQuXHS1beDmYnpXCsqMfGvGyMDvSYgiigiU4yqIVhGYapmwp3HjLjVvCwFStmClnw6033zpdF/051S6NozpEdvRIkChYvNzN0S7RL4wbli96O4x2oUwQAAEQAIHmEoCYaS5/1A4CIAACoyJQYx5LIZ/PW6OquMqb6ylm/KrO5/PaeGrNOSNOyM+p0lG4HARAAARiRgBiJmYOg7kgAALpI1A+j0WKUtJ99XksjSTZCDFTrj3++Tn2ZgR8AJSB/JxG9gjUBQIgAAL1IQAxUx+OKAUEQAAERkXAK4+FhCwl3w/ksZCUhnTs+lUsZgqjyWMZlcFV3txsMVPOXM7PyWSGdmkTlsxRaZe2HJHcZYsc5OdU6XFcDgIgAAKNIQAx0xjOqAUEQAAEbALV5rEkJd8jymKmXNd0+wv5OXiQQQAEQCBaBCBmouUPWAMCIJAAArXksSR9J664ihm/7ugZScP5OQl4etEEEACBuBGAmImbx2AvCIBAJAiUcjD8zmOJRx5LI0EmTcyUY1dLfk6X3lvxrJ5G+gt1gQAIgEBcCEDMxMVTsBMEQKDhBMrmsZCYzFsbcy6FJSx7e2OcXu/vojSJmXId1Rm14+2yNallOTcK+TkNf7xRIQiAQEIIQMwkxJFoBgiAQO0EhuVFSCtHovx5LEnJY6mdWPV3QsxUZhYoP0eSIUTpXCD0w8pMcQUIgEDyCUDMJN/HaCEIgAARIY+lud0AYqZ2/sjPqZ0d7gQBEEg+AYiZ5PsYLQSB1BAYmccis1KKnCDKEnnlseiFdr3XuCaf704NpCY1FGImHPDuM4ikINXfHefnyAJZwiBBhi71AvJzwvEFSgUBEGgOAYiZ5nBHrSAAAjUSqJTHwocfCiEKlkQeS42IQ7kNYiYUrGULHZGfI7Ss5HOLSuIe5+c03iWoEQRAIAQCEDMhQEWRIAACoycwlD9AdnSllMdCA4nSZHDyvSX41HvkD4yedvglQMyEz7iaGsrn51DBIjLIzs+RBaER8nOqgYtrQQAEGkoAYqahuFEZCICAk4D75HVpyZxWOnk9SyR2E0mDSBQkWQZZZOgZvTD91eeNSx56yATJeBGAmImHv9ZdfLG+ZeZpWbNo5kijrCCNozi8ZI3/nSSIDEtKQ2iitHSNTKNYzBQWrFywIx4thJUgAAJJIwAxkzSPoj0gEDEC7jM3SBuZx8ITJCmpwGv6qSiMca39BeSxRMyRozQHYmaUACNwO+fn7OtryVHm/7f3JmByVeed93tu9aYdkAQGsQlUNUQsISBZ2H6IjSFjBnusLE/gC/5sfzFOHMZjYhFLQkKSL1rQAgjHNmaI7UnAMUzkSTJJjE2MwXZsjMWOWAZXyYhFYtECqFtIvdS953vOrb6t6lJV1+3uulV3+ZUfP7Sq7j3nfX/v6dP3X+95z9FZ0ZJVSnKlLx7ELF3T2lviWV6f4+Z7Mi7n50QgdpgAgSQTQMwkObr4BoEmERhVHYtl5cVxCirjFhbb9u4mmUg3LSaAmGlxAELu/ibbPlY7VlYymax23ZxFfU7IxGkeAhDwCSBmGAsQgEBgAkHrWMySMCuj85yDERht4i9EzCQ+xDUd9OcN11He0jVLD9W+Zb3aN+pz0js48BwCDSCAmGkARJqAQJIIBK9jkYK47mAdy5zC5d+7nDqWJA2EBvuCmGkw0AQ0t+WPt2ReOXP7YH2OZYQN9TkJiCsuQKDZBBAzzSZOfxCIAIGR61hEiUh+WB2LpQqThDqWCIQutiYgZmIbupYY7tXnSHtOXOpzWhIAOoVAjAggZmIULEyFwGgI2LZtTZaOnHbdrCs65+1KpHVWlLcz0fRh57F4dSyqoDL91LGMBjLXBiaAmAmMigvrECjV53RkJaOr1+dolRelCmYXREtUXllW4YD0523bdoELAQgkjwBiJnkxxaOUEdjw5Q0nZ9RATrvVz2MRrQva20aVOpaUDY1IuYuYiVQ4EmtMZX2OcnVOlNlW2mwzfWR9jqPb89fdcN0riQWCYxBIAQHETAqCjIvxJ2DqWDo73azjFdCabyNLf6BLa8xL57EoUaVCWr+OZe6cwuWXU8cS/+gnwwPETDLiGFcvtmzZknnl+cP1OaUDeA+fn2O2lTZf/Pjn52QyOt/XZxU4PyeuEcfuNBFAzKQp2vgaaQJ+HYtrma1NdUm0aJUrCZayOhZLvCyLWKqgD+4vLN20qSfSjmEcBEQEMcMwiCqBjUuWTFETp2W9+hxzUKhb+/wcI3Ys1ylwfk5Uo4ldaSSAmElj1PG5ZQTK61jMH03tqpypY1HK26p0Rnkdi/ezzuSpY2lZuOi4gQQQMw2ESVNNI+DX52jlmINBs0ecnzNYn6Msc1ioFKjPaVpo6AgCQwQQMwwGCIRAwKtjcQZy2jJZFctbzmCWNYgo8/N2fzmDazIsShUyjs5/ad2Kl0MwhSYhEAkCiJlIhAEjGkjA1Oc4mdIXUpb35dSR9Tlm+a+IW1CuFJwM9TkNxE9TEEDMMAYgMF4ClXUsMngQXHkdi2gpaKXyYrkFKUph9jn/KU8dy3jJc38cCSBm4hg1bB4LAVOfs2Pbr3PSJllxrazSRuSUvswS0ceY+hyzGYEoU+OoCtTnjIUy90DgMAEyM4wGCIxAoFodi2hr8GC3w3UsrqiCEp0v1bG0FZZuWkodCyMLAmUEEDMMBwiIbFyycYqaWPTqc7SonCXmv15dpFnGpsVkcpTriRzqcxgxEAhGADETjBNXJZhA0DoW0W7B7BZGHUuCBwOuNZTA5kWbJ1x767WHTKOImYaipbEEEiivz/GWJSsrq01Wp7St9F6tS8uSqc9JYPBxaVwEEDPjwsfNcSJQrY7FK+gcqmMxxZuSH6pj6dD5L62gjiVOMcbW6BDYsHL1lZZYfyeW2G3d+24tTpmxXVsD85XTfplS+hYRfcfi1SuXRMdiLIFAdAncvHbtKU5/eX2OeEvXlKg5ruiCt2EM9TnRDSCWhUoAMRMqXhpvNgHqWJpNnP4gUJvAplVr94rIRCXiiKiMFt2ttZ6mRLU7mcwZy+xl2+EHAQiMnQD1OWNnx53JIYCYSU4sU+NJzTqWUpGl+V9emXS8qIKmjiU14wJHo0dg06o1V4tWt4iSCWXW9SmRv1+8esVno2cxFkEgOQTK63OUqJyY+hyzEYGWnGjRYjanoT4nOQFPsSeImRQHv5Gub1q59psHM8WrbdsuNqJdU8fSIR25dtf1DjGrdR6LX8eiHVXItBfzi217dyP6pw0IQKAxBDatWvuGiBznt6ZEDRQtay5ZmcbwpRUIjIWAqc9xBtpyKqOzQepzBiyr0C/9edu23bH0V3mPbdttE3X77UtuuP7PGtEebaSbAGIm3fEft/c32Tcdq3Xft0XLf1aiVy1evXLjaBoNUsciShf04MFkrjVQWGbbL42mD66FAARaR6AiO0NWpnWhoGcIBCKw3rZPtdz2bOlAZ50TrbKNrs+5adW6pVq0LUp+rFTnVYvtxXwRGSg6XFSNAGKGcTFmAptWrf1jEfmmaOkSJW1dM6ZOuuaaa/oqGxyxjkXL22ZZWGm/fSnojJWXolM41OYUGpXlGbOD3AgBCDSEwOHsjBpwyMo0hCmNQKDZBEw2ZUIxk5W2TFY5bs6smjDnq3nL1pQcPZrzc7761a929u7tfldEFUV0r4j82ZLVK77XbJ/oLxkEEDPJiGNTvdBaq01fXneHJfInWmSy6VyJ/Lul3WWulSmdgmzprHcei1/HInpwpxVVcLRTsDKZPOexNDVsdAaBlhHwsjNi3Spaf3fJmhVXtcwQOoYABEIh4NfnuI6Ty6iMOYstq8VsK62M2Klan+OqzHot+iODzxAHXJF7ltxw/eeUUjoUI2k0sQQQM4kNbTiObVq19k9EZK0WOVGJdAz2Ys6RaBeR5/3tIV1xC6U6ls486eNwYkGrEIgTgY1fXnOPq5yVy2ybHcziFDhshcA4CZjl6M5A32B9jjUocsw5OjJXXBnwNwjRIv1KZKclsuJLq1fcM85uuT1FBEYvZq75P5dJe9sicZwLxHW9b+V5pYfAn0zcKWd3dJtMjGTMYcWDL0eU3Nw9R/a5vr5JD5NEe2pZByST+ZUMFG+Vr/7+D8bsK/PGmNFxIwRiR4B5I3Yha7bB061++dLU7Uc8R2gt8kxxqtzz7onNNon+Wk1gHPPG6MTMX/3bXWK1LZTTZk+VY6aLdHa22nX6bwGB9xzaJ2fuf1Hm7Xtepg68K5bWktGOvDT5ePlGzpTR8EoMgb4+kbf2iby4o1vc4r/ILf/1U6P2jXlj1Mi4AQKxJsC8EevwNcP4/5b/npx64HVxVEZcpaS7fZI8Nn2uPDftNHljwvRmmEAfUSMwjnkjuJgxDyTTjl4o55wzNWr+Y0/rCBzb+7bM3f+izN/3vEzv2y//cezvyA9mfaB1BtFzeAS2beuW/W+PTtAwb4QXD1qGQBwIMG/EIUpNtfGyXQ/J7+5+QvZ1HiWPTp8rz087TXZ3Hd1UG+gs4gRGOW8EEzNmiUhn5z3ygQ8gZCIe/1aad3rPTvnNFFLDrYxB6H0/9FC39PX9SaAlZ8wboYeDDiAQCwLMG7EIUzONnNOzU7bzvNBM5PHraxTzRjAx81ffv1/mzLlEjj8hfjCwGAIQaByB118T2b79x3LLx36vbqPMG3URcQEEUkGAeSMVYcZJCDSUwCjmjWBi5ov/0iPve/9kamQaGiYag0D8CJg1rQ//8oB8ZeGUusYzb9RFxAUQSAUB5o1UhBknIdBQAqOYN4KJmWv+WcuHL26ojTQGAQjElMCDD4h89Q/MhnYjv5g36hHicwikhwDzRnpijacQaBSBgPMGYqZRwGkHAmkhEHByEcRMWkYEfkKgPgHmjfqMuAICEBhOIOC8MSox8+EZGbnr/Akyq6v6l7I9RS2f39Ynnz6pXS6emTkiJP2uyMZCv6x6oW/YZ588qV1uO6dTuosin3r8kDy41xn63P9sy66ifPapXvnWuV1y1Snt8u2XB7x/+y/fthd6XLnklwcDDYfVZ3TK0myHdFiHLy9v1+97StuR/vq+/HRv0WNy35sl+ypf9ZhV+vHj908cxm5Xrx5i4vtey7kH9jhyY75vxBj5/VX247f5fI8rZz74biB+5ReNZPdI1/lj5juvDgxdZto6vktVtcPnWYt3tb5qjZVq47jyWtNeJfdq47gWz1pj3vdjapt4vzPG/3pjpZxVtWsrYzfS+K0W5+c+PEnmTjn8y1A+9oYNiICTiy9mgvrFvHGYcj1mzBulvzXMG8wbzBvMG7X+VlX+XeZ5I7nPG6MSM5VPuLUeOkd6/71HW1X/CJ0xxRLzYOeLFr+vWmKmclCOVswYIfPF09vlK78ZGBJXvrj5+T7HE0Sm781ndcrtOw5fU0us1BMz9R6+fftN++WCzjxgnjRBHcGslm1BH/arxci/d/+ADixogtpd7eG9XCiUP5w1Qsz4fLoHtHRm1DCmtRgZ0WLuKxfchv+cSdaw9yrHifFjtGPe9LXw+DZvOD29v7oAr9Wm3//2d4cLz8qxUmuM+L9Tj7x9uF9zr3mVC9laY09GKWaYN478bqDe72m9zyu/xGHeqP07aNgE5cm8MVDz7x7zxmHxzPNGaQYK+nvF88aRX3jzvNHY542miplKYVL5y/C+Y0rZnPIHqmpixn8I3N13+KF7tJOL+eUyAqoyE1T+/qwJVtPETC17avkVhpgx7KvFaKQ0TVC7a13nC5rLZ7UNCbZGiBkzUVx6XJv879cG5DMnDxettSbgSqamjXK7yjlUiuFaNtfiaYTC673aa7LaOKwlkOqN83JRMpIYrxznJjNa74uEIf+bLGaYN47M+PqxCPr7V/7lULUvaMbzUMK8MfxLL+aN0kqLyvmk2V+CMG8wb1Q+3/G8kdznjZaLGfNQePXsdrn22T754PTMEQ+P1cSM/5B69akd3jIDs7yr3kNe5QN5reVq5dc1KzMzWtv9h4cwHkpM2/6Ddr3lekHtrndd5YNUI8SM74O/7K58+eFImRkjqH0xXS1bUT4+yjmNRsyUjyvTXmWGsPxBtXK5XbWMYqXI8n+fzPu1MovlD8HmOrNUsvLb/ZoiNgJihnnj8Leio1laG9aXIMwbzBvly8Orzh3MG0csj+d5g+cNnjcOl5WMZ95oqpgxD1CVy8zKHxirPfTWEjNGcS/PdQ61t+uQ6z2QjeYPe706j5FqDvw1mv6DYL1lZtXqM/ylcqaNqt9kjZASqfdQMlJ/RgCOJBhG+qxy8g1id5BsTxBhYPoO8g1y5QN/5TelI9UjVMZ1pPFUzmk0y8wqv02vJZqqtTnSt76VIrfwrltVzFRbLlJtrFerH/Li3+SHEuaN4RMB88ZhHswbw1cyGDLMG6XxwbzBvFGtjrnyi5fxfnnK80apFKPVzxuhiZlqGwBU1rlUeyCvfNAbScz4QsLUeHxhW++oxUzlt+x+8bMppG9mzUyQh/1KXVNPzNSr0UmymKn0rZJvLUHk16IYsXf3zoG646lSzAQZ89X6riVQGvFQYsRmtQ0s/DFeTS+Xb4xRrWAyTDEThCHzRilqzBvDv9Ud70MJ88bhhxLmjcMbDpmVIObLU543jqwfDvLlYi2B7f/tifuXp8wb0Zg3QhMz5ctjqhVM+wO82sOL+cz/VngkMWPS2n7b//R6US6cnhlVZqbag1z5g6X5vBkbANRbhlXNzjDFTJyXmY03m1aeJRnPMrNaY36kHekqBUa1SX68y8xqFvVXGWQ1x2WTMjPMG7V3SSzPUo4mG828UX3XSeaNw8u9q/3dY94o7bLK88bwzZAaIWZ43ihlV3neKO2WfMTfs4DPG00RM2ZyrKxRqfWgVLmjVj0x44siI2T6XC3lOzRVEwH1HgLKHxZrpc3K2633y1zv8/JvJ2oVglcb5GE9lIz2296RCvvL7W7WBgC1shzlO4eMtJ12+cQ63kLeanVZtSYs8/609uG7rlUTM/WEb70NAPz7zbjziyNH8rOqvQEnl1rnzIy0JK+yRoh5o/rDN/NG6W9KozYOYd44vJthtb8tzBuHj4ww8xfPG6UZaDTPN9WOW+B5o7QRkFkJxPNGKdNuXsOOBwn4vNE0MWMMLN/m1vy7VuFzZXakvC7D36WqfJeK8hqIkZbPlIuQWhsA1HsYrBRI9X6Z633ut1ftj0Uls/LzecIQM5VCspYYrCbmyh+Oq9ntt11+rko1keuL07GeM1NLLJSLAH9TgMqleNWyHuPdmrn8fiOOa9UYVeu71kP/eLdmrry/1tirmQUKOLk0Qswwb4wsZpg3Dp83Np5lZswbh7f/r/W3hXmjVKjM88bhcwKDPt+M9MVco46CKD9CgeeNfq+GJU3PG00VM+UDzByQWfkA7D8klxco3/nqwLCAVBMz5r5aS1JGeiCvdmhmuRgaaemBabfeIZVmqZxfe1HroNHKwwvNH9UgBxfWEzP1+qvc/MDnFFQMVnINandlv7UOsaq2/NCw8mujqvn35H5XzpxiDe1wV2mjXxB6247SWQqNPjSzmgArH/OvHNJycpUzg8r/QJZP7EEezsp9qHZoZq1lkr6YL493ZQyr1ssYY5ssZpg3jpzFmDeqH5rJvBHsvB3mjcO/Uzxv1D8omeeNIw9O53lj+Dl3tcZI+ZfWYT5vjEvMBPnmnmsgAIGEERinmEkYDdyBAASCEGDeCEKJayAAgXICAecNxAzDBgIQGB2BgJNLrWVmo+uMqyEAgUQQYN5IRBhxAgJNJRBw3kikmBlpxygTBP8skbqHfDU1YtHqbKSzWHxLa55DEi1XsKbRBAJOLnETM8wb4x8ozBvjZ5jYFpg3Ehva8TrGvDFeggm+P+C8kUgxk+Cw4hoEWk8g4OQSNzHTerBYAIEEE2DeSHBwcQ0CIREIOG8gZkLiT7MQSCyBgJMLYiaxIwDHIDB6Aswbo2fGHRBIO4GA8wZiJu0DBf8hMFoCAScXxMxowXI9BBJMgHkjwcHFNQiERCDgvIGYCYk/zUIgsQQCTi6ImcSOAByDwOgJMG+Mnhl3QCDtBALOG4iZtA8U/IfAaAkEnFwQM6MFy/UQSDAB5o0EBxfXIBASgYDzBmImJP7NarZyB6bKndrKP695COLgqcZfO6dL/vWNonz8PW2yodDvHT5Z/jI7jphrqn02Wn/NAUu7DrnCjnKjJReB6wNOLoiZCMSqhgnMG9GNTWItY96IfWiZN2Ifwvg5EHDeQMzEL7RDFpuJ5fJZbfL5bX1DwqP8vewkS66e3S7XPlv63Hz2vmMycuaD7x7htS9UmiFmGimKYhy++JoecHJBzEQzxMwb0YxL4q1i3oh1iJk3Yh2++BofcN5AzMQ0xCazsX5up9yyvV/+ak6HzOpS8uK7rrxT1PJ2/2GnXjroymef6h16w8+IXHliu1x1Srv3vjkv5u6dA17WpVzMXJftkLlTLO+a53tc+cK2XvnmuV0ys1PJlDYlD+xx5JJfHvREUrW25kyy5Of7HDm+Sw1r5+G3HO96k0W6dXu/LBq0388qGdt+//g26bBkmFCLaaiSZ3bAyQUxE73QM29ELyapsYh5I7ahZt6Ibejib3jAeQMxE9NQGwFx6sSS0DAvIyqe+/AkMULhtV4tH31PxhM1lWLGXOtPTMue7/PuNaLIZG7M8jJfzJj/GgFj3jfXG2HzP18ekP82u12+u7MoP91b9MSPESsfe0+bVLZ1+QltQ9fNmmAd0c5nTmn3lqt9+qSSoDL2//j9E72fjc21MkgxDVeyzA44uSBmohd25o3oxSQ1FjFvxDbUzBuxDV38DQ84byBmYhpq8+C/p1/LOVOtoRqWf10wQZ7a78oJXWpI6FSKGTMp+WLn/J8e9Lx//EMT5bluLecfZQ3LzHxwemYo4+JnUXwRYkSOue/dosikNpFqbfm1NeWZm8p2vnh6u9z7hiOrXuiT1Wd0eiLsyXdcz34jcHhFkEDAyQUxE73YMW9ELyapsYh5I7ahZt6Ibejib3jAeQMxE9NQ+5PLe4+yvAxI4V3Xy7CYJWMme3L7jlLxfmXNjKmxuXtnsWo2pTwzUzjgykkTlSdSjMj4xIlt8o0dwTMz/iYCpm7HCJTKduplZhAzER6YAScXxEz0Ysi8Eb2YpMYi5o3Yhpp5I7ahi7/hAecNxExMQ+0LjEfeceX/mdUm/a5In6u9WhYjaPw6mVq7mdWqcylfZmaWl5lanL39WroHtGx5rShm+VjQmhmTmTE7lt11/oRh7di/7veWrU1rVzVrZhAzER6YAScXxEz0Ysi8Eb2YpMYi5o3Yhpp5I7ahi7/hAecNxEyMQ21qZIwg+NTjh4ZtcWzeN69qu5bF2F1MjwqBgJMLYiYqARtuB/NGNOOSeKuYN2IdYuaNWIcvvsYHnDcQM/ENsWe5Sf9ePDMzzIvyzEzM3cP8KBIIOLkgZqIYvJJNzBvRjU1iLWPeiH1omTdiH8L4ORBw3ggmZr74Lz3yvvdPls7O+IHAYghAoHEE+vpEHv7lAfnKwil1G2XeqIuICyCQCgLMG6kIM05CoKEERjFvBBMzf/X9+2XOnEvk+BMaaieNQQACMSPw+msi27f/WG752O/VtZx5oy4iLoBAKggwb6QizDgJgYYSGMW8EUzMXPN/LpPOznvkAx+Y2lBDaQwCEIgXgYce6pa+vj+Rr/7+D+oazrxRFxEXQCAVBJg3UhFmnIRAQwmMYt4IJmaMdX/1b3fJtKMXyjnnIGgaGi0ag0BMCGzb1i373/4XueW/fiqwxcwbgVFxIQQSSYB5I5FhxSkIhEpglPNGcDHjCxqrbaGcNnuqHDNdqKEJNZQ0DoHWEzBrVt/aJ/Lijm5xi6MTMr71RtAwb7Q+llgAgWYRYN5oFmn6gUByCIxj3hidmDHIzNKR9rZF4jgXiOtOTg5FPKlH4Pe69sjvdLwje51O2et2lP7vlP77lttR73Y+jyMByzogmcyvZKB4a6ClZbV8ZN6IY/QbavPvdu6Trf1HS5+2GtoujUWQAPNGBIMSTZOOsgZkhtUvMzJ9MtP81+qXmZk+ebL/KLm/d2Y0jcaqcAiMY94YvZgJxwVajQGBLVu2ZF55fntWu25WtGS1Jd5/RVRWtD5OlBREpCDa/FcVRJyCzriFpbb9Wgzcw0QIQCBEAptWrdulrYH5zAchQqZpCESQwPr1649uOziQc5WVs0RntaicFslZIlktulu0yosleXGloDM6n5FM/oD0523bdiPoDiZFkABiJoJBiaNJd9j2xAOOldWZtqx2dVZEZ0VJVmudE1GdntAxIkdJQSlVEEcVBoqyffn65fvi6C82QwACoyOAmBkdL66GQJwI2LbdMdWxso6ycq6onDJ/+5UyYiWnRLpKX3TqvFJWXovOa0sKE6SYv8a2u+PkJ7ZGkwBiJppxSZRV5lsZq8/JiitZS0qTm8hgVkdJn5fFUbpgvpXxRI+lCmpSR2Hx4sXvJgoEzkAgxQQQMykOPq4nhsB6e/2pmWIxJ5aV1UrnlCs588WlaDlVlOSVSF6bLy21zmudyetMP6szEhP96DqCmIlubFJh2SZ703vcgf6cyphsTkngKKVKP4vsKWVzVEGbb3UstyBFKRxqcwq2bRdTAQgnIZAQAoiZhAQSNxJP4Gb75hlF6c1ZjsqJpbPKLAvT2lsapszfZZG8iMqLuAUlVl67bn7J2pVmmTkvCLSEAGKmJdjpNAiB9bZ9quW2m3qcrAzV50hWeYJHfuOlrU0mx5WCYwSPZUQvHnUAACAASURBVBWW2cteDNI210AAAs0lgJhpLm96g8BIBDYv2jyhf/KBXFumLes6bk4rv4ZFzMoJS0QXlKi81pJXlsoXXafQdmhCfvHNrJhgZEWPAGImejHBojoEbNu2JhQzWWWyN0bkiFUSPCbVLXJ8aW2uKijlljYksKSQGVCFa9et2AVcCECgNQQQM63hTq/pJrBpxZrTXcvKZSyd1a7KibfM26x+0CeYDItSKu9qt6C0lbcsndeqM7/YXrw73dTwPm4EEDNxixj2jkjAfNvkTDtU2oTA7LTmZXTMEjaz45pMGtpxzcvoqIISp6AybuFLtr0XtBCAQHgEEDPhsaXldBP4yrp1x/X3qpxWTk5pVaphEcmJ9upZdomXXZG8NruGuW7BaWvLs4oh3WMmad4jZpIWUfypSeBW2z7KMTuuSaa005rZca1Um2O+pXKGbSs9uBGBPthWWLppaQ9YIQCB8RFAzIyPH3enm4Bt25MnSntOXL+Gxc2JsszfLrMsrOjVsGhtdgv1dgtTliq8KwNme+PedJPD+zQQQMykIcr4WJfAV5avO67Yrs1W0iVxY/5IaLMfvrcpwdtG6JgdWsw6Ym8vfKULR594XP5zn/vcQN3GuQACEBDEDIMAAvUJ3GLfmHOKjrdbmCidE2+3MJ0TraYrJXltiu+VFEwti6Wt/IQJkv/vyznioD5ZrkgyAcRMkqOLbw0hsOHLG05W2smaXV0ss3Rt8KDQwS2md5TO0DGHhErBFdlutbv5JStXmg0KeEEAAoMEEDMMBQiUCGy0N55gSX9OO1ZO1GCGxTuTzSu+32EEiym+NzUsjqsKGUfnv7RuxcvwgwAEqhNAzDAyIDAOAptWrMlKWyZrUv/eAaGltcpmK8tZXhbH33HN7LZmztGx2gpL7aU7x9Elt0IglgQQM7EMG0aPkcCGpRum6Y7+XFsmk3VdN2e2Nx48j8UIloMmy+Jqcx6L5HXGymunWDj6zePyn/sbsv1jRM5tKSaAmElx8HE9PAK2bXd1OVZWaTW449rQ2TlZS2RKSeSogphdZEQVipYU3D6rsHz9crOHPy8IJI4AYiZxIU29Q1u2bMns2PbrnGWpnDu4S5gSndOlIvwp5gDJoRoWVxXcjM53SDG/yLbfST08AECggQQQMw2ESVMQCELAfGOnJhSzyvWXrPnbSnuCRxuho4zYEeVtK60cp9CRcQvX2HZ3kPa5BgJRJICYiWJUsCkIgQ1f/vLJSndklbieULG8DWTMAZJqjmvOYzHZFcvUsOi8qal025z8UtsmAx8ELtdAoAEEEDMNgEgTEGgUgZts+1jtmB1qMl6NTqk+x/+/2m9OXPYyOq4U1OCOa537phSu+do1fY2ygXYgEAYBxEwYVGmzUQQ22/YxA9KWy7iSdZXktKtzSplzWbz59x1/tzCtdN4SlXfbdf6Q4xRs23YbZQPtQAACYyOAmBkbN+6CQNMJ3HL92pPcdp0V1/tWMCva2+3GFzuvih5cumYEj6nPESksWbvS/JcXBFpOADHT8hCk3gDbtjsmSXvOLboloWJJVmnJeZu5aNUpSuVFdN6cy2I2drG0m3cmd+aXLmV7/tQPHgBEmgBiJtLhwTgIBCOw2V4/x3Xd0tbS3kGhRvCYg0L1Kf5Bod7W0kbkmM0IVH/huhtueCVY61wFgfETQMyMnyEtBCNw04o1s3VGvBPvldnWWHmHJpssy8mmjkV7S3l1XltWXhynMOBk8tffeP3rwVrnKghAIGoEEDNRiwj2QKCBBMw3kd5GBJk2b8c1EZ01672N2HFFjvZ2XPMyOqVMjnZUIdPemV9sL97dQDNoCgKcM8MYaCiBG5fdOLOtrZjTSuUs8b68yZXqWLxDkHd7WRatC+bUe5XR+TZpy19rL9veUCNoDAIQiAQBxEwkwoAREGg+gY0bN05Rh4olkWNqcyzv20tvi2lLidJmAwLvcDZ3uznzQFtS0F1theuuu25/862lx7gTIDMT9wg23/7NmzdP0G8fyDnKyhmxYok5yFjlxNsGXyuvjkXpvNJW3tFOwcpk8tNkIP852z7YfGvpEQIQaBUBxEyryNMvBCJM4Gb75hna6c/qjBE6OmuKYUtn6CiztXRP6aDQ0o5rylKFolMs9GZcUwzbG2G3MK2FBBAzLYQf8a7X2/acdrfdZIu9ZWHaO/XeK7x/j5hlYVqbeSavtM47Xva4mF9s22SPIx5XzINAswggZppFmn4gkBACG237RHFVVuk2b9maf1Col91RapdZuubttDZYn2NZqnCtvdxsN222neaVUgKImZQGftDtTbb9HlfacpZjCu/NRibmLBZz6r3Zkl7vLNWymAJ8t+CKlc+4bn7x2pU70k0N7yEAgSAEEDNBKHENBCAQiMCmFWtO97YyNZsQeDuuKV/szC4dFGoyOqpgHliUOUNnQBW+tG7Fy4Ea56JYE0DMxDp8gYzfuGTJFDVxWlY5gzuEeUtXjWDxiu/7zRcdRrCYc1nMXOBqNz9x5lH5a65ha/lAgLkIAhCoSgAxw8CAAARCJ3DHn9/R3nPCvqz2dlwbFDveGTpmUwI13RM6vthxjdhxCpJxC0ts+43QjaODphBAzDQFc+idaNFq04q1OdWWySrH9QrwxWxtXMqwHGOWhXmbiYjOK8vKZ0Tn+/qswvL1y/eFbhwdQAACqSSAmEll2HEaAtEhcJttT+51rKxrDgr11smXzs7xztIRafd3XPO2ljabElhScHszhWUblr0dHS+wpB4BxEw9QtH6fPP1a2cNZEzRvZvTYg7yHcqwmN/NF012RVmSd10pWBmdd3R7/robrmO792iFEWsgkAoCiJlUhBknIRBPAjcuu3F6ptP1Dgot1edYWWswo+OKHBrK6Jgtpl0paKULHUdPzl977bXmM14RIoCYiVAwBk2xbfuoyU5n1lFOTg2eem8pK2sOkVQiB1xzHosyBfgqL65byLRl8gekP2/bdjF63mARBCCQVgKImbRGHr8hEHMCG+2NJyjHycrgjmveBgReNscsd3Hf9LI4WgrmgczKWHlddAqH2hyz45obc9djaT5ipjVhs227bbJ05JyikxPLynq7hWkZPJtFJnvbG5tT771t2CWf0Zl8JtNXWGTb77TGYnqFAAQgMDoCiJnR8eJqCEAgBgRuWrNmti6aDQjM8hizy1rpLB0lao63nt+cnWO2elVScFxVcC2rsMxe9lIMXIutiYiZcEO34csbTs6ogZzrqJxlecs0PdGiRE4bzGDmjXBRg7uFtTs6f+26FbvCtYrWIQABCIRPADETPmN6gAAEIkLAfEs9oZgpCRzLiJvBHdc8wSMzzUOfUqWMTmnHNVXI9KvCohuvfz0iLsTWDMTM+ENnll12drpZx5x277o5ZQ6QLNWWmQL8t7z6Mm+3MJ13lBSUq/NL1qzIK6XYFn38+GkBAhCIKAHETEQDg1kQgEBzCdz0pZsm6cn9WXFLWZyhjE5p6Vpn+Y5ranDHtUzGLVxr228119J49oaYCRa3r371q50H97yTs5SV87KJppZlaLcw6fB2C1OmhkUXVEbltTmf5WBbYemmpT3BeuAqCEAAAskigJhJVjzxBgIQCIHAZts+xnHMkrVMVpsD/4bqczzR0+fV56jSJgTeWTqWKqgDHYXFNy9+NwRzYtkkYmZ42G5asWa2Y1nebmEiVlaJzpmlYSLqxNIOfiovls6Lq7zdwlzpyC+xl7BVeSxHP0ZDAAJhEkDMhEmXtiEAgcQTuHX5uuOdDp3VJqPjLVuzstrU6JSW/+zxlqwpVdDilsSOiL8RQap2hEqjmLnJto/VTkdWKcc7j0W7OqeU2aDCO0TyDW9JmNIFs1uYJZIfKNVubU/8Lw0OQgACEGggAcRMA2HSFAQgAIFyAuvt9adarmtOQfdqdPyMjiUq64r+zeGDQs220qqgrYHCMtt+MSkUNy/aPOHaW0vbZCdVzNxh2xP3S3vOdZxcRmWyWrk50YMHSWqlzZIwJSazogrmvxnt5nsyrtlV72BS4owfEIAABFpJADHTSvr0DQEIpJKAbduW2YhAtUlW3MEd14zg8Q4NleM9kaN1wRwUqs3W0jqT15lMYam99LW4ANuwcvWVllh/J5bYbd37bi1OmbFdWwPzldN+mVL6FhF9x+LVK5fExZ/N9vo5RSnmlKNyWumcmAyLNgdJqmO16ILydgozokUKpgC/WGzLL1+/fE9c/MNOCEAAAnElgJiJa+SwGwIQSCSBzZs3T3C6D5WWrZnaHC+jY5Ymef+e5NXkmAfm0sNzwbGk4PRZheXrl++LGpBNq9buFS0TlRJHRGW06G6t9TQlqt3JZM6I2pKqdcvXHd+ecXKSyWSVa06+V2ZrY2+bYxF5RZTkPZGpVV5ZOq8cKSxeu3JH1LhjDwQgAIE0EUDMpCna+AoBCMSawPrr1h/d3i5zdMbNimsesgezOd6GBNpRZpcrb1tpsyGBFCzXKXRl3MLnbftAKxzftGrN1aLVLaJkQln/fUrk7xevXvHZVti0cePGKZkDfTl3cLcwUV7Rfc7LsijdZ0SiNqLFNecR6bzVZuU7971RuOZrX+trhb30CQEIQAACIxNAzDBCIAABCCSAwCbbfo8M7rgm5TuuGaGjlMnaDO24Zg4LVZZVmPLa9MLn/uZzA41yf9PKNXcuWbPy0+XtbVq11uzAdZz/nhI1ULSsueVZmY0r1/5FR0Y9ssi+/olG2OIv47MslXNF55SpYfEK782yMDmqdHCqzpuDUy0teZPdapdinm22G0GfNiAAAQg0lwBiprm86Q0CEIBA0wncfP3aU8wOa9osWfMPCi3V55j/7/B3XDMHhYolBSlKYcnalWaDgsCvm+0bz9CuflaL3q609aeL1yx/2NxckZ05IiuzadW6zaL1fxeRnyxZs+IjgTsUkY22faJVzOTMUjxXqZxyJaeV5MwGC54dInnXCDet81qsvFb9hetuuOGV0fTBtRCAAAQgEG0CiJloxwfrIAABCIRJQN1i35h1vfqc0o5r+vAZOrPKDwo1552YDQnEGigste2d1YzatGrdIyJ6vogMiJZVS9as2FASNH52Rg04g1mZm1euPt9V1p2i5VQRKaqM/sPF9soHK9u91baP6pe2nOWonKtcc5hkVuvBM1m09ChlhIrKm7NZLFF519X5Q22O2S0sVVtfhzlIaBsCEIBAlAkgZqIcHWyDAAQg0CICtm13dTlWVmXU4I5rQ2fnZC2RKWbXLlMMX9qQQBW0IwXLkg9pJcuUyGQR6dYizypX/39iySUi1q2i9XeXrFlx1aZV6xaJ6JtFxDLuKZF3lGV9wBHJKcctZVeUJ6zMsrCJpcJ7s7ObzluWlVeOUyj2d+Sv23jd/hbhoVsIQAACEIgIAcRMRAKBGRCAAATiQmDDhg3TVG8xq9zBs3O8Gh1vi+m5orVRJ1OGfNFianJWa0ufqTL6G3pArVFKnSdSdo2IKyJ5cyaLaLcg2sqrjJvvG1CFFetW7IoLF+yEAAQgAIHmE0DMNJ85PUJAFsiTlw10FRdZRXVBpuh9i80LAhCAAASSQECJU+yUVzO9+k4lzuatckF3EtzCBwhElQBiJqqRwa7EEpjX8ehdTpcs3LlAT31ntpaBSYl1FccgAAEIpI6AckQm7VYy81k5NP3XVl9mQK7YKvN+lDoQOAyBJhFAzDQJNN1AwBAwQqb7JFmY/7g7FSIQgAAEIJBsAkdvV5L7vuWIVgu2yvmPJ9tbvINAawggZlrDnV5TSMAsLeufWrznyasQMikMPy5DAAIpJXDsNiUn/lI99sSh+WanP14QgECDCSBmGgyU5iBQi8B5XY/e/+qF+pI9Z2kgQQACEIBAigic902rp/2AdRHZmRQFHVebRgAx0zTUdJR2AvPaHut5+jPOZGpk0j4S8B8CEEgbgdn3q0Mzn1VLHpH5X0+b7/gLgbAJIGbCJkz7EBgksEAe01sXOfCAAAQgAIGUEZj1K0tmPWzZj8j5N6TMddyFQOgEEDOhI6YDCJQIIGYYCRCAAATSSaAkZuSGR2S+nU4CeA2B8AggZsJjS8sQGEYAMcOASBKBD2enyl1Xnib3vbBfPvsPO4Zc+9YVs+WqBTOH/t3vaNn4wOuy6r6dw665/Nxj5PP/+LJ857G98uOrz5ALT5tyxHWfnDdDbvujU2TLU28N6yNJHPElHQQQM+mIM162hgBipjXc6TWFBBAzKQx6gl2uJmaeW3q2zJnRNUyUrL70RFl68fHy8xd75JLbX/CIGMFTKWYuzk6VXfv75VN3vygPFkpnDCJmEjyAUuYaYiZlAcfdphJAzDQVN52lmQBiJs3RT57vlWKmUqCUe2wEzRc/eJx85WdvehmaamLmjGO7ZGpXRh555d0h0YOYSd64SatHiJm0Rh6/m0EAMdMMyvQBAWpmGAMJI1ApZkxWxrzO3PhMVU/N5693D3hCpZqYOX5quzz80gEvG+MvS0PMJGzQpNgdxEyKg4/roRNAzISOmA4gUCJAZoaRkCQC5WLm7if2efUzL+zuHcqqVPpq6mKMYDFip5aYMZ8Z0TOtK+MtN5s1rYOamSQNmhT7gphJcfBxPXQCiJnQEdMBBBAzjIHkEQhLzPjZGLPc7M5H9yJmkjd0UukRYiaVYcfpJhFAzDQJNN1AgMwMYyBJBMJYZuYvUTOZGyNqzE5nZqMAdjNL0shJpy+ImXTGHa+bQwAx0xzO9AIBlpkxBmJNwIiLzQtPltsf2u0V8Td6AwB/CZoPySw3O+moDulsszxRU779c6xBYnwqCSBmUhl2nG4SAcRMk0DTDQTIzDAG4kzAFy9+XUzlDmXGt/FszVwpZvzlZlM6M/LtrXsQM3EePNguiBkGAQTCI4CYCY8tLUNgGAHEDAMi7gT8M2M6MspzpZrIGOuhmZVixrTvt4WYifvIwX7EDGMAAuERQMyEx5aWIYCYYQxAAAIQgACZGcYABEIkgJgJES5NQ6CcAJkZxgMEIACBdBIgM5POuON1cwggZprDmV4gwAYAjAEIQAACKSWAmElp4HG7KQQQM03BTCcQ4NBMxgAEIACBtBJAzKQ18vjdDAKImWZQpg8ICGKGQQABCEAgrQQQM2mNPH43gwBiphmU6QMCiBnGAAQgAIHUEkDMpDb0ON4EAoiZJkCmCwgYAmwAwDiAAAQgkE4CiJl0xh2vm0MAMdMczvQCAcQMYwACEIBASgkgZlIaeNxuCgHETFMw0wkEyMwwBqJN4MdXnyEXZ6cOGfn8m4fkzI3PDP37w9mpcteVp8kLu3vlkttfaIkzxoZZ0zrkO4/tbUn/dAqBsRJAzIyVHPdBoD4BxEx9RlwBgYYQYJlZQzDSSAgEjJA549gu+dTdL8qDhW6vh8r3Vl96onzi/OnSW3TlC//08tB1IZhTs0lj00tv9cln/2FHM7ulLwiMmwBiZtwIaQACNQkgZhgcEGgSAcRMk0DTzagI+CLl6794U264dJZM6cyIycq83j0gx09tl4dfOuCJh+eWnu39/DuzJsq9z++XVfftFHPv0ouPl76iK3sOFOW7j+/z+q5879xZE+VDc6ZId68jD27vlivOnS4dGeX1Y7I/1do5YVq7XLVgptdeT58jdz+xT648b7p0tlmy8YHX5f2zJ3uZpH5He/8u7O2V9R89UWZObvcyNwieUQ0DLg6ZAGImZMA0n2oCiJlUhx/nm0kAMdNM2vQVlICf7XjfqZM9sWJEwzcvn+0JEyMoTj2mU+58dK8nFJbdu1M+ePoUMdcaEfL4tWd6wsYIic0LT5bbH9otH5077Yj3jPAwL7M8zb/HiCG/b18glbfzzqGibP7ZG959/j2mHZOZeW3/gJcl+rMtO+RDp0/1ft7y1FvyyXnTPRtZhhY0+lzXLAKImWaRpp80EkDMpDHq+NwSAoiZlmCn0zoEjFB4ctdBT6D4y8d+8YW5csfDu+XT82d44sG8/CyJnym57Re75eNnHSUbHnjdEw+mnefe6JXzT5o47D0jdnwRYoSSqbsxdS/+64ldB6WrTR1xjxE2t/3RKV6myM+++O2Ye43IMuLI1NF87Q9PkZ+/2CMXnjalZUvgGGgQGIkAYobxAYHwCCBmwmNLyxAYRgAxw4CIIgFfzFx6xjQvq5Gd0eVlOv7tubflE+fPkG/9ao9cfu4xXqbGZFPMqzKj8tPfdA9lc/zMTPl7vggxS7/KMzM+D/89/56HdhwYEkW79vcPtV0vM2PEVavqeaIYW2yKDgHETHRigSXJI4CYSV5M8SiiBBAzEQ1Mys361hWzvayMqZExNSimPsXUpZiXqUUxL39Jl785gF9n89BLPV79i3n19DryjYd2ez+bmpny98rFjF8fY2pmzOvbW/d4y8aq3ePXxOx8p19+sr20McEn582oWTNz3cXHI2ZSPp6j6j5iJqqRwa4kEEDMJCGK+BALAoiZWIQpdUb6Wy7v73VGvRVzZUbFZG+qZWb8jE4tuNXaqXdP6gKFw7EmUBIzlv2InH9DrB3BeAhEkABiJoJBwaRkEkDMJDOuSfHK7FY297gJQ+74dSojiYryLEvlzmTlu5XVY1StnXr38DkE4kQAMROnaGFr3AggZuIWMeyNLYF5bY/1PP0ZZ/LApNi6gOEQgAAEIDAGArPvV4dmPquWPCLzvz6G27kFAhAYgQBihuEBgSYROK/r0ftfvVBfsucs3aQe6QYCEIAABKJA4LxvWj3tB6yLtsr5j0fBHmyAQJIIIGaSFE18iTSBBfLkZf1Ti/c8eZU7NdKGYhwEIAABCDSMwLHblJz4S/XYE4fmz29YozQEAQgMEUDMMBgg0EQC8zoevav7JFmY/ziCponY6QoCEIBASwgcvV1J7vuWI1otICvTkhDQaQoIIGZSEGRcjBYBI2icLlm4c4Ge+s5sLdTQRCs+WAMBCEBgPASUIzJpt5KZz8qh6b+2+jIDcsVWmfej8bTJvRCAQG0CiBlGBwRaQMAsORvoKi6yiuqCTFEmt8AEuoRAUwn81ge3y44nTpLens6m9ktnEGg6ASVOsVNezfTqO5U4m7fKBaVDknhBAAKhEEDMhIKVRiEAAQhAoJzAplXrdmlrYP5S234NMhCAAAQgAIFGEUDMNIok7UAAAhCAQE0CiBkGBwQgAAEIhEEAMRMGVdqEAAQgAIFhBBAzDAgIQAACEAiDAGImDKq0CQEIQAACiBnGAAQgAAEIhE4AMRM6YjqAAAQgAAEyM4wBCEAAAhAIgwBiJgyqtAkBCEAAAmRmGAMQgAAEIBA6AcRM6IjpAAIQgAAEyMwwBiAAAQhAIAwCiJkwqNImBCAAAQiQmWEMQAACEIBA6AQQM6EjpgMIQAACECAzwxiAAAQgAIEwCCBmwqBKmxCAAAQgQGaGMQABCEAAAqETQMyEjpgOIAABCECAzAxjAAIQgAAEwiCAmAmDKm1CAAIQgACZGcYABCAAAQiETgAxEzpiOoAABCAAATIzjAEIQAACEAiDAGImDKq0CQEIQAACZGYYAxCAAAQgEDoBxEzoiOkAAhCAAATIzDAGIAABCEAgDAKImTCo0iYEIAABCJCZYQxAAAIQgEDoBBAzoSOmAwhAAAIQIDPDGIAABCAAgTAIIGbCoEqbEIAABCBAZoYxAAEIQAACoRNAzISOmA4gAAEIQIDMDGMAAhCAAATCIICYCYMqbUIAAhCAAJkZxgAEIAABCIROADETOmI6gAAEIAABMjOMAQhAAAIQCIMAYiYMqrQJAQhAAAJkZhgDEIAABCAQOgHETOiI6QACEIAABMjMMAYgAAEIQCAMAoiZMKjSJgQgAAEIkJlhDEAAAhCAQOgEEDOhI6YDCEAAAhAgM8MYgAAEIACBMAggZsKgSpsQgAAEIEBmhjEAAQhAAAKhE0DMhI6YDiAAAQhAgMwMYwACEIAABMIggJgJgyptQgACEIAAmRnGAAQgAAEIhE4AMRM6YjqAAAQgAAEyM4wBCEAAAhAIgwBiJgyqtAkBCEAAAmRmGAMQgAAEIBA6AcRM6IjpAAIQgEA6CWxetHnCtbdee8h4T2YmnWMAryEAAQiETQAxEzZh2ocABCCQQgIbVq6+0hLr78QSu617363FKTO2a2tgvnLaL1NK3yKi71i8euWSFKLBZQhAAAIQaCABxEwDYdIUBCAAAQgcJrBp1dq9omWiUuKIqIwW3a21nqZEtTuZzBnL7GXb4QUBCEAAAhAYDwHEzHjocS8EIAABCNQksGnVmqtFq1tEyYSyi/qUyN8vXr3is6CDAAQgAAEIjJcAYma8BLkfAhCAAARGEDRr3xCR4/wLlKiBomXNJSvDoIEABCAAgUYQQMw0giJtQAACEIBAVQIV2RmyMowTCEAAAhBoKAHETENx0hgEIAABCFQS2LTKz86oAYesDAMEAhCAAAQaSAAx00CYNAUBCEAAAkcS8LIzYt0qWn93yZoVV8EIAhCAAAQg0CgCiJlGkaQdCEAAAhCoSWDjl9fc4ypn5TLbZgczxgkEIAABCDSMAGKmYShpCALBCSyQJy8b6CousorqgkxRJge/kyshAAEIQCDSBJQ4xU55NdOr71TibN4qF3RH2l6Mg0DMCSBmYh5AzI8fgXkdj97ldMnCnQv01HdmaxmYFD8fsBgCEIAABKoTUI7IpN1KZj4rh6b/2urLDMgVW2Xej+AFAQiEQwAxEw5XWoVAVQJGyHSfJAvzH3engggCEIAABJJN4OjtSnLftxzRasFWOf/xZHuLdxBoDQHETGu402sKCZilZf1Ti/c8eRVCJoXhx2UIQCClBI7dpuTEX6rHnjg0f35KEeA2BEIlgJgJFS+NQ+AwgfO6Hr3/1Qv1JXvO0mCBAAQgAIEUETjvm1ZP+wHrIrIzKQo6rjaNAGKmaajpKO0E5rU91vP0Z5zJ1MikfSTgPwQgkDYCs+9Xh2Y+q5Y8IvO/njbf8RcCYRNAzIRN3lCdMgAAGXxJREFUmPYhMEhggTymty5y4AEBCEAAAikjMOtXlsx62LIfkfNvSJnruAuB0AkgZkJHTAcQKBFAzDASIAABCKSTQEnMyA2PyHw7nQTwGgLhEUDMhMeWliEwjABihgFRi8C3rpgtl597jHz+H1+W7zy2V8y/r1owU769dY989h92DN324exUuevK0+SF3b3yyx0HZOnFx0tHRlVt9vk3D8kX/ull7/pZ0zqqXuO37/dX7aJyG4LYdcntLwxr5sdXnyEXZ6fW9OW+F/YP8zHoKDG2XHrGNPnU3S/Kg4Xax3j4/fvt9vQ5Q5wr+6p3rc+/Gs8HCt1S6XtQX7gu+QQQM8mPMR62jgBipnXs6TllBBAzKQv4KNytJWYqH7zLxUz5g7P/fqUwqPV+pWm1hIF5/5PzZsjGB16XVfftHBJZQe0y925eeLJ09zrS2aaGCY+gto0kAEcSM377U7syw8RLNUEW9NpaNhs/b/ujU+SRV95F0Ixi3KfpUsRMmqKNr80mgJhpNnH6Sy0BxExqQ1/X8WpiZuFZR3v37T4wIGdufMb7udliprI/Y+do7PJF0v9++i35zIKZ8pWfvemJonJfwsrMmCzLGcd2Vc3cVPIOeu2u/f1epquazaaN46e2D8WqbtC5IFUEEDOpCjfONpkAYqbJwOkuvQQQM+mNfT3Pq4kZk3UwIuDqDxznLT0zy82iIGZGY9dzS8+W17sH5MYfvza0PM7PKIWZmanFyY9Ded93P7HvCNvK41XtWsRMvRHN55UEEDOMCQiERwAxEx5bWobAMAKIGQZELQK1xIypB1l+yQny3pMneUul/MyAqZkZzTKzajUe5UvFRrPMzF/aVc+u1ZeeKF/84HFD2ZhKH8MUM/6yry1PvVWzHscXWnc+utdbIhbkWl+UVYoZ46upX/JFJyMdAogZxgAEmkcAMdM81vSUcgKImZQPgBHcH0nMmNvM0qb9vc5QQf9oxUy9pVy1NgDod/RQvYyxo1z01LOrctlVpcCIs5hhAwB+l0dLgMzMaIlxPQSCE0DMBGfFlRAYFwHEzLjwJfrmkcSM2anL/+b/n7a9JReeNsXbzWw0mZkgYqa8mN4XHq++0z+sBqQyg1PLLv/+KZ2ZI+Jmsksm4+SLoXq2jZTNqrUBQCuWmSV6gOLcuAkgZsaNkAYgUJMAYobBAYEmEUDMNAl0DLupJ2aMSybTYYRMX9E9YtesMHYz84XKz1/sGRJO1ZajVbOr0h8/JOW7o/30N901i+mDhLDe1sxBi/rN0rCg1460AUAQm7kmvQQQM+mNPZ6HTwAxEz5jeoCARwAxw0AYKctQec5MZdah/IyTyjNNwhAzvoAqPyOmmoCoZpepRzEvfxc23+/yjEmt+pOgo6SemAm63bLpL+i1410aF9Q3rkseAcRM8mKKR9EhgJiJTiywJOEEEDMJD/A43AuSmTHNV8uWlD+M1zpnptahmeZgTSM4RhIGRpjMmdHl1c6cMK296kGV5Xb5h3nWKoY3WRCzocFtv9gtn5w3veqBnpWHhVZDW6vOx1/G5h+kWe8gzPK2612LmBnHIE/5rYiZlA8A3A+VAGImVLw0DoHDBBAzjAYIQAAC6SSAmEln3PG6OQQQM83hTC8QYJkZYwACEIBASgkgZlIaeNxuCgHETFMw0wkEqJlhDEAgKIFaS8j8+yuXkgVtl+sg0CoCRsz85e/9e6u6p18IJJqA0vLTxWtWXDSSkyrRBHAOAk0iwDKzJoGmGwhAAAIRI0BmJmIBwZzUEUDMpC7kOBwGAcRMGFRpEwIQgED0CSBmoh8jLEw2AcRMsuOLd00igJhpEmi6gQAEIBAxAoiZiAUEc1JHADGTupDjcBgEEDNhUKVNCEAAAtEngJiJfoywMNkEEDPJji/eNYkAYqZJoOkGAhCAQMQIIGYiFhDMSR0BxEzqQo7DYRBAzIRBlTYbRaDywEj/QE2/ff/AyBd298olt7/QqG5H1Y6xwRwAag7k5AWBOBFAzMQpWtiaRAKImSRGFZ+aTgAx03TkdBiQgBEyZxzbJZ+6+0V5sNDt3VX53upLT5RPnD9deouufOGfXh66LmAXDbnM2PTSW33y2X/Y0ZD2aAQCzSKAmGkWafqBQHUCiBlGBgQaQAAx0wCINNFwAr5I+fov3pQbLp0lUzozYrIyr3cPyPFT2+Xhlw544uG5pWd7P//OrIly7/P7ZdV9O8Xcu/Ti46Wv6MqeA0X57uP7PPsq3zt31kT50Jwp0t3ryIPbu+WKc6dLR0Z5/Zy58Zmq7ZwwrV2uWjDTa6+nz5G7n9gnV543XTrbLNn4wOvy/tmT5eLsVOl3tPfvwt5eWf/RE2Xm5HYvc4PgafhQocFxEEDMjAMet0KgAQQQMw2ASBMQQMwwBqJIwM92vO/UyZ5YMaLhm5fP9oSJERSnHtMpdz661xMKy+7dKR88fYqYa40IefzaMz1hY4TE5oUny+0P7ZaPzp12xHtGeJiXWZ7m32PEkN+3L5DK23nnUFE2/+wN7z7/HtOOycy8tn/AyxL92ZYd8qHTp3o/b3nqLfnkvOmejSxDi+JIS7dNiJl0xx/vW08AMdP6GGBBAgggZhIQxAS6YITCk7sOegLFXz72iy/MlTse3i2fnj/DEw/m5WdJ/EzJbb/YLR8/6yjZ8MDrnngw7Tz3Rq+cf9LEYe8ZseOLECOU7rryNK/uxX89seugdLWpI+4xwua2PzrFyxT52Re/HXOvEVlGHJk6mq/94Sny8xd75MLTprRsCVwChwYuNZAAYqaBMGkKAmMggJgZAzRugUAlAcQMYyKKBHwxc+kZ07ysRnZGl5fp+Lfn3pZPnD9DvvWrPXL5ucd4mRqTTTGvyozKT3/TPZTN8TMz5e/5IsQs/SrPzPg8/Pf8ex7acWBIFO3a3z/Udr3MjBFXrarniWJssSk6BBAz0YkFlqSTAGImnXHH6wYTQMw0GCjNNYTAt66Y7WVlTI2MqUEx9SmmLsW8TC2KeflLuvzNAfw6m4de6vHqX8yrp9eRbzy02/vZ1MyUv1cuZvw6G1MzY17f3rrHWzZW7R6/JmbnO/3yk+2ljQk+OW9GzZqZ6y4+HjHTkFFBI40mgJhpNFHag8DoCCBmRseLqyFQlQBihoERRQL+lsv7ex2vDsZ/BdmKuTKjYrI31TIzfkanlv/V2ql3TxRZYhMEahEoiRnLfkTOvwFKEIBA8wkgZprPnB4TSAAxk8CgJsgls1vZ3OMmDHnk16mMJCrKsyyVO5OV71ZWD1O1durdw+cQiBMBxEycooWtSSSAmEliVPGp6QTmtT3W8/RnnMkDk5reNR1CAAIQgEALCcy+Xx2a+axa8ojM/3oLzaBrCKSWAGImtaHH8UYSOK/r0ftfvVBfsucs3chmaQsCEIAABCJO4LxvWj3tB6yLtsr5j0fcVMyDQCIJIGYSGVacajaBBfLkZf1Ti/c8eZU7tdl90x8EIAABCLSGwLHblJz4S/XYE4fmz2+NBfQKAQggZhgDEGgQgXkdj97VfZIszH8cQdMgpDQDAQhAILIEjt6uJPd9yxGtFpCViWyYMCwFBBAzKQgyLjaPgBE0Tpcs3LlAT31nthZqaJrHnp4gAAEIhE1AOSKTdiuZ+awcmv5rqy8zIFdslXk/Crtf2ocABGoTQMwwOiDQYAJmydlAV3GRVVQXZIoyucHN0xwEIkfgtz64XXY8cZL09nRGzjYMgkBDCShxip3yaqZX36nE2bxVLigdksQLAhBoGQHETMvQ0zEEIACBZBDYtGrdLm0NzF9q268lwyO8gAAEIACBuBBAzMQlUtgJAQhAIKIEEDMRDQxmQQACEEgBAcRMCoKMixCAAATCJICYCZMubUMAAhCAwEgEEDOMDwhAAAIQGBcBxMy48HEzBCAAAQiMgwBiZhzwuBUCEIAABEQQM4wCCEAAAhBoFQHETKvI0y8EIACBhBBAzCQkkLgBAQhAIIYEEDMxDBomQwACEIgSAcRMlKKBLRCAAATSRQAxk6544y0EIACBhhNAzDQcKQ1CAAIQgEBAAoiZgKC4DAIQgAAEqhNAzDAyIAABCECgVQQQM60iT78QgAAEEkIAMZOQQOIGBCAAgRgSQMzEMGiYDAEIQCBKBBAzUYoGtkAAAhBIFwHETLrijbcQgAAEGk4AMdNwpDQIAQhAAAIBCSBmAoLiMghAAAIQqE4AMcPIgAAEIACBVhFAzLSKPP1CAAIQSAgBxExCAokbEIAABGJIADETw6BhMgQgAIEoEUDMRCka2AIBCEAgXQQQM+mKN95CAAIQaDgBxEzDkdIgBCAAAQgEJICYCQiKyyAAAQhAoDoBxAwjAwIQgAAEWkUAMdMq8vQLAQhAICEEEDMJCSRuQAACEIghAcRMDIOGyRCAAASiRAAxE6VoYAsEIACBdBFAzKQr3ngLAQhAoOEEEDMNR0qDEIAABCAQkABiJiAoLoMABCAAgeoEEDOMDAhAAAIQaBUBxEyryNMvBCAAgYQQQMwkJJC4AQEIQCCGBBAzMQwaJkMAAhCIEgHETJSigS0QgAAE0kUAMZOueOMtBCAAgYYTQMw0HCkNQgACEIBAQAKImYCguAwCEIAABKoTQMwwMiAAAQhAoFUEEDOtIk+/EIAABBJCADGTkEDiBgQgAIEYEkDMxDBomAwBCEAgSgQQM1GKBrZAAAIQSBcBxEy64o23EIAABBpOADHTcKQ0CAEIQAACAQkgZgKC4jIIQAACEKhOADHDyIAABCAAgVYRQMy0ijz9QgACEEgIAcRMQgKJGxCAAARiSAAxE8OgYTIEIACBVhPYvGjzhGtvvfaQsQMx0+po0D8EIACB9BJAzKQ39ngOAQhAYEwENqxcfaUl1t+JJXZb975bi1NmbNfWwHzltF+mlL5FRN+xePXKJWNqnJsgAAEIQAACoyCAmBkFLC6FAAQgAIESgU2r1u4VLROVEkdEZbTobq31NCWq3clkzlhmL9sOKwhAAAIQgEDYBBAzYROmfQhAAAIJJLBp1ZqrRatbRMmEMvf6lMjfL1694rMJdBmXIAABCEAgggQQMxEMCiZBAAIQiAOBTavWviEix/m2KlEDRcuaS1YmDtHDRghAAALJIICYSUYc8QICEIBA0wlUZGfIyjQ9AnQIAQhAAAKIGcYABCAAAQiMmcDh7IwacMjKjJkjN0IAAhCAwNgIIGbGxo27IAABCEDA2whgzdUi1q2i9XeXrFlxFVAgAAEIQAACzSSAmGkmbfqCAAQgkEACG7+85h5XOSuX2TY7mCUwvrgEAQhAIMoEEDNRjg62xZLA2ZfeeJmy3EXiygWiZHIsncBoCEAAAhCoQkA5IvpV0frOg8rZvP2HdjeYIACB1hJAzLSWP70njMA5l669SytZqESmJsw13IEABCAAgcMEDolInxJ9xdM/XPkjwEAAAq0jgJhpHXt6ThgBI2SUkoUaIZOwyOIOBCAAgVoElKMtZ8Ez9656HEYQgEBrCCBmWsOdXhNGwCwtE+XeQ0YmYYHFHQhAAAL1CTy27Ycr5te/jCsgAIEwCCBmwqBKm6kjcM5la+8XLZekznEchgAEIACBHm25F5GdYSBAoDUEEDOt4U6vCSNwzqVreyj2T1hQcQcCEIBAMAKHtMiSZ3644uvBLucqCECgkQQQM42kSVupJXDOf1mrU+s8jkMAAhBIOwGt7G33XX9D2jHgPwRaQQAx0wrq9Jk4AoiZxIUUhyAAAQgEJ6D1DdvuW2kHv4ErIQCBRhFAzDSKJO2kmgBiJtXhT4zzH/vw2bL885fKpAkdR/g0UHTkb7/3sDy67WVZ96WPe59ff/O/yiNPvzR0rf2XH5X//Ltz5cbb7pPvP/iM/M2Nn5AF5556RFsvvrJX/uAv7kgMNxyBgCBmGAQQaBkBxEzL0NNxkgggZpIUzfT6YsTM4j+/RLbc+4Tc9p2fVQXx3t8+1RMzx06fIlufekn+fPl3RxQzM4+ZPEy4+PcfeLcPQZPeoZY8zxEzyYspHsWGAGImNqHC0CgTQMxEOTrYFpTAaMSMESMnnXC0l63xhU+1zEylmDG2+BmgH/3H82L/9b1BzeM6CESXAGImurHBssQTQMwkPsQ42AwCiJlmUKaPsAmMRsw89Nhv5Ld/60SZPKlzaLlZUDFj/Pjn//E52fPWgWGZnbD9o30IhEYAMRMaWhqGQD0CiJl6hPgcAgEIIGYCQOKSyBMYqWZm974eT7SYl1lmZsTMY8+84tXYPPvr1zxRMhoxY+ppqmVtIg8JAyFQjQBihnEBgZYRQMy0DD0dJ4kAYiZJ0UyvL6PNzJglYkbAfOzis73lZkacVG4AUEuwIGbSO84S6TliJpFhxal4EEDMxCNOWBlxAoiZiAcI8wIRGIuYMQ2bJWNmudkTz74qF753zrDdzGqJGZaZBQoJF8WFAGImLpHCzgQSQMwkMKi41HwCiJnmM6fHxhMYq5jxl6cNDDjS3p6pK2bYAKDxsaPFFhNAzLQ4AHSfZgKImTRHH98bRgAx0zCUNNRCAmMVM8Zks9zsDz5yrrx7qH9EMcPWzC0MMF2HRwAxEx5bWoZAHQKIGYYIBBpAADHTAIg00XICI20AYIwz58p86x8eGtoAoHJbZbN07LiZU+semll5Pk3LHccACIyXAGJmvAS5HwJjJoCYGTM6boTAYQKIGUYDBCAAgRQTQMykOPi43moCiJlWR4D+E0EAMZOIMOIEBCAAgbERQMyMjRt3QaABBBAzDYBIExBAzDAGIAABCKSYAGImxcHH9VYTQMy0OgL0nwgCiJlEhBEnIAABCIyNAGJmbNy4CwINIICYaQBEmoAAYoYxAAEIQCDFBBAzKQ4+rreaAGKm1RGg/0QQQMwkIow4AQEIQGBsBBAzY+PGXRBoAAHETAMg0gQEEDOMAQhAAAIpJoCYSXHwcb3VBBAzrY4A/SeCAGImEWHECQhAAAJjI4CYGRs37oJAAwggZhoAkSYggJhhDESZwN/c+AlZcO6pQya++Mpe+YO/uGPo3+/97VO9gzB3vLpP/nz5d1viirHh2OlT5PsPPtOS/ukUAuMigJgZFz5uhsB4CCBmxkOPeyEwSAAxw1CIKgEjZGafNF2uv/lf5ZGnX/LMrHzv85/8oFx20VnS31+U9bf/+9B1zfTJ2PTam++I/df3NrNb+oJAYwggZhrDkVYgMAYCiJkxQOMWCFQSQMwwJqJIwBcp/+vfHpOr/9/flUkTOsRkZfa8dUBmHjNZnv6/Oz3x8M//43Pez2ec/h75+aPb5bbv/EzMvX/6x++T/gFH3t5/UH7wk2c9Fyvf+0+nHSfzzjlF3j3Y54mgj/zuXGlvy3j9mOxPtXZM33/wkXO99t491C8//Mmz8l8uOks62jPyt997WH77t070MkkDRcf798u73pK//NOL5OhpE+X7DzyD4IniYEu7TYiZtI8A/G8hAcRMC+HTdXIIIGaSE8skeeJnO4w4MGLlBz99Tr78lx/1hIkRFCccd5T864+3eULhr//2JzLv7JM9IWFEyP/66lWesDFCYvGfXyJb7n1CLpw/54j3zPXmZZan+fcYMeT37Quk8na6D/TKd/55q3eff49px2RmjNAyWaIb/vpemX/OKd7PP/qP5+VjF5/t2cgytCSN0AT5gphJUDBxJW4EEDNxixj2RpIAYiaSYUm9UUYovPCbNzyB4i8fu/PmT8v3fvCEfPySczzxYF5+lsTPlJhMzkUX5OTbW37piQfTzm9e2Stz57xn2HtG7PgixAglU3dj6l781//d/oZ0drQdcY8RNss/f6mXKfKzL3475l4jsow4MnU0y67+iDzx7Cty3lknt2wJXOoHEgDqE0DM1GfEFRAIiQBiJiSwNJsuAoiZdMU7Lt76YuYD8073shqnzDrGy3T8bGtePnrRWfKP9z3lLQszmRqTTTGvyozKo9teHsrm+JmZ8vd8EWKWq5VnZnxG/nv+PU89v3NIFO3e1zPUdr3MzIcuyCFm4jLw0mgnYiaNUcfniBBAzEQkEJgRbwKImXjHL6nW23/5US9zYpZumRoUU59i6lLMy9SimJe/pMvfHMCvs3nq+Vc9oWNe7x7sly33Pu79bGpmyt8rFzN+fYypmTGvf/73p7y+q93j18S8ubdHHh3cmMAsJatVM3PV5e9HzCR1oCbBL8RMEqKIDzElgJiJaeAwO1oEEDPRigfWlAj4Wy4feLdv1FsxV2ZUTPamWmbGz+jUYl6tnXr3ED8IxI6AVva2+66/IXZ2YzAEEkAAMZOAIOJC6wkgZlofAyyoTcDsVnbayTOGLvDrVEYSFeVZlsqdycp3K6vHvVo79e7hcwjEjgBiJnYhw+DkEEDMJCeWeNJCAudcurZHlExuoQl0DQEIQAACrSFwSIsseeaHK77emu7pFQLpJoCYSXf88b5BBM65bO39ouWSBjVHMxCAAAQgEB8CPdpyL3rm3lWlwjJeEIBAUwkgZpqKm86SSuDsS2+8TJR7jxKZmlQf8QsCEIAABKoSeGzbD1fMhw0EINAaAoiZ1nCn1wQSOOfStXcpJQs1giaB0cUlCEAAAtUIKEdbzgKyMowOCLSOAGKmdezpOYEEjKDRShaSoUlgcHEJAhCAwGECh0SkT4m+4ukfrvwRYCAAgdYRQMy0jj09J5SAWXKmLHeRuHIBmwIkNMi4BQEIpJSAckT0q6L1nQeVs3n7D+3ulILAbQhEhsD/D29SpI2dyHxnAAAAAElFTkSuQmCC" + } + }, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us now define the Workflow for our experiment. Here we use the methodology as provided in [quickstart](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/Workflow_Interface_101_MNIST.ipynb), and define the workflow consisting of following steps:\n", + "-\t`start`: Start of the flow \n", + "-\t`compute_loss_and_accuracy`: Compute Train Loss and Test Accuracy on aggregated model. Performed *foreach collaborator* in Federation\n", + "-\t`gather_results_and_take_weighted_average`: Collect train loss, and test accuracy metrics for each collaborator and take weighted average to compute the *Aggregated* Train Loss and Test Accuracy. Performed on Aggregator\n", + "-\t`select_collaborators`: Randomly select *n_selected_collaborators* from the entire set of collaborators in Federation. Performed on Aggregator\n", + "-\t‘train_selected_collaborators` - Train selected collaborators on its individual datasets for *local_epoch* number of times. Performed on *n_selected_collaborators*\n", + "-\t`join`: Take weighted average of the model. Performed on Aggregator\n", + "-\t`end`: End of one round of flow. Flow can be run for *n_epochs* to obtain the desired results\n", + "\n", + "We also import the FedProxOptimizer from openfl.utilities.optimizer\n", + "\n", + "![federated-flow-diagram.png](attachment:federated-flow-diagram.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", + "from openfl.utilities.optimizers.torch import FedProxOptimizer" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class FedProxFlow(FLSpec):\n", + "\n", + " def __init__(self, model=None, optimizer=None, n_selected_collaborators=10, n_rounds=10, **kwargs):\n", + " super(FedProxFlow, self).__init__(**kwargs)\n", + " self.round_number = 1\n", + " self.n_selected_collaborators = n_selected_collaborators\n", + " self.n_rounds = n_rounds\n", + " self.loss_and_acc = {\"Train Loss\": [], \"Test Accuracy\": []}\n", + " if model is not None:\n", + " self.model = model\n", + " self.optimizer = optimizer\n", + " else:\n", + " self.model = Net()\n", + " self.optimizer = FedProxOptimizer(\n", + " self.model.parameters(), lr=learning_rate, mu=mu, weight_decay=weight_decay)\n", + "\n", + " @aggregator\n", + " def start(self):\n", + " \"\"\"\n", + " Start of the flow. Call compute_loss_and_accuracy step for each collaborator\n", + " \"\"\"\n", + " print(f'\\nStarting round number {self.round_number} .... \\n')\n", + " self.collaborators = self.runtime.collaborators\n", + " self.next(self.compute_loss_and_accuracy, foreach='collaborators')\n", + "\n", + " @collaborator\n", + " def compute_loss_and_accuracy(self):\n", + " \"\"\"\n", + " Compute training accuracy, training loss, aggregated validation accuracy,\n", + " aggregated validation loss, \n", + " \"\"\"\n", + " # Compute Train Loss and Train Acc\n", + " self.training_accuracy, self.training_loss, _, = compute_loss_and_acc(\n", + " self.model, self.train_loader)\n", + " \n", + " # Compute Test Loss and Test Acc\n", + " self.agg_validation_score, self.agg_validation_loss, test_correct = compute_loss_and_acc(\n", + " self.model, self.test_loader)\n", + "\n", + " self.train_dataset_length = len(self.train_loader.dataset)\n", + " self.test_dataset_length = len(self.test_loader.dataset)\n", + "\n", + " print(\n", + " \" | Train Round: {:<5} : Train Loss {:<.6f}, Test Acc: {:<.6f} [{}/{}]\".format(\n", + " self.input,\n", + " self.round_number,\n", + " self.training_loss,\n", + " self.agg_validation_score,\n", + " test_correct, \n", + " self.test_dataset_length\n", + " )\n", + " )\n", + "\n", + " self.next(self.gather_results_and_take_weighted_average)\n", + "\n", + " @aggregator\n", + " def gather_results_and_take_weighted_average(self, inputs):\n", + " \"\"\"\n", + " Gather results of all collaborators computed in previous \n", + " step.\n", + " Compute train and test weightes, and compute weighted average of \n", + " aggregated training loss, and aggregated test accuracy\n", + " \"\"\"\n", + " # Calculate train_weights and test_weights\n", + " train_datasize, test_datasize = [], []\n", + " for input_ in inputs:\n", + " train_datasize.append(input_.train_dataset_length)\n", + " test_datasize.append(input_.test_dataset_length)\n", + "\n", + " self.train_weights, self.test_weights = [], []\n", + " for input_ in inputs:\n", + " self.train_weights.append(input_.train_dataset_length / sum(train_datasize))\n", + " self.test_weights.append(input_.test_dataset_length / sum(test_datasize))\n", + "\n", + " aggregated_model_accuracy_list, aggregated_model_loss_list = [], []\n", + " for input_ in inputs:\n", + " aggregated_model_loss_list.append(input_.training_loss)\n", + " aggregated_model_accuracy_list.append(input_.agg_validation_score)\n", + "\n", + " # Weighted average of training loss\n", + " self.aggregated_model_training_loss = weighted_average(aggregated_model_loss_list, self.train_weights)\n", + " # Weighted average of aggregated model accuracy\n", + " self.aggregated_model_test_accuracy = weighted_average(aggregated_model_accuracy_list, self.test_weights)\n", + "\n", + " # Store experiment results\n", + " self.loss_and_acc[\"Train Loss\"].append(self.aggregated_model_training_loss)\n", + " self.loss_and_acc[\"Test Accuracy\"].append(self.aggregated_model_test_accuracy)\n", + "\n", + " print(\n", + " \" | Train Round: {:<5} : Agg Train Loss {:<.6f}, Agg Test Acc: {:<.6f}\".format(\n", + " self.round_number,\n", + " self.aggregated_model_training_loss,\n", + " self.aggregated_model_test_accuracy\n", + " )\n", + " )\n", + "\n", + " self.next(self.select_collaborators)\n", + "\n", + " @aggregator\n", + " def select_collaborators(self):\n", + " \"\"\"\n", + " Randomly select n_selected_collaborators collaborator\n", + " \"\"\"\n", + " np.random.seed(self.round_number)\n", + " self.selected_collaborator_indices = np.random.choice(range(len(self.collaborators)), \\\n", + " self.n_selected_collaborators, replace=False)\n", + " self.selected_collaborators = [self.collaborators[idx] for idx in self.selected_collaborator_indices]\n", + "\n", + " self.next(self.train_selected_collaborators, foreach=\"selected_collaborators\")\n", + "\n", + " @collaborator\n", + " def train_selected_collaborators(self):\n", + " \"\"\"\n", + " Train selected collaborators\n", + " \"\"\"\n", + " self.model.train(mode=True)\n", + "\n", + " self.train_dataset_length = len(self.train_loader.dataset)\n", + "\n", + " # Rebuild the optimizer with global model parameters\n", + " self.optimizer = FedProxOptimizer(\n", + " self.model.parameters(), lr=learning_rate, mu=mu, weight_decay=weight_decay)\n", + " # Set global model parameters as old weights to enable computation of proximal term\n", + " self.optimizer.set_old_weights([p.clone().detach() for p in self.model.parameters()])\n", + "\n", + " for epoch in range(local_epoch):\n", + " train_loss = []\n", + " correct = 0\n", + " for data, target in self.train_loader:\n", + " self.optimizer.zero_grad()\n", + " output = self.model(data)\n", + " loss = cross_entropy(output, target)\n", + " loss.backward()\n", + " self.optimizer.step()\n", + " pred = output.argmax(dim=1, keepdim=True)\n", + " tar = target.argmax(dim=1, keepdim=True)\n", + " correct += pred.eq(tar).sum().cpu().numpy()\n", + " train_loss.append(loss.item())\n", + " training_accuracy = float(correct / self.train_dataset_length)\n", + " training_loss = np.mean(train_loss)\n", + " print(\n", + " \" | Train Round: {:<5} | Local Epoch: {:<3}: FedProx Optimization Train Loss {:<.6f}, Train Acc: {:<.6f} [{}/{}]\".format(\n", + " self.input,\n", + " self.round_number,\n", + " epoch,\n", + " training_loss,\n", + " training_accuracy,\n", + " correct, \n", + " len(self.train_loader.dataset)\n", + " )\n", + " )\n", + "\n", + " self.next(self.join)\n", + " \n", + " @aggregator\n", + " def join(self, inputs):\n", + " \"\"\"\n", + " Compute train dataset, and take weighted average of model.\n", + " \"\"\"\n", + " train_datasize = sum([input_.train_dataset_length for input_ in inputs])\n", + "\n", + " train_weights, model_state_dict_list = [], [] \n", + " for input_ in inputs:\n", + " train_weights.append(input_.train_dataset_length / train_datasize)\n", + " model_state_dict_list.append(input_.model.state_dict())\n", + "\n", + " avg_model_dict = weighted_average(model_state_dict_list, train_weights)\n", + " self.model.load_state_dict(avg_model_dict)\n", + "\n", + " self.next(self.internal_loop)\n", + "\n", + " @aggregator\n", + " def internal_loop(self):\n", + " \"\"\"\n", + " Check if training is finished for `self.n_rounds`\n", + " if finished move to end step. Otherwise, go back to start\n", + " step for next round of training.\n", + " \"\"\"\n", + " if self.round_number < self.n_rounds:\n", + " self.round_number += 1\n", + " self.next(self.start)\n", + " else:\n", + " self.next(self.end)\n", + "\n", + " @aggregator\n", + " def end(self):\n", + " \"\"\"\n", + " This is the 'end' step.\n", + " \"\"\"\n", + " self.round_number += 1\n", + " print('This is end of the flow')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Setup Federation\n", + "\n", + "In this step we define entities necessary to run the flow and create a function which returns dataset as private attributes of collaborator. As described in [quickstart](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/Workflow_Interface_101_MNIST.ipynb) we define entities necessary for the flow." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "num_collaborators = 30\n", + "\n", + "# Setup aggregator\n", + "aggregator = Aggregator()\n", + "\n", + "# Setup collaborators with private attributes\n", + "collaborator_names = [f\"col{i}\" for i in range(num_collaborators)]\n", + "\n", + "synthetic_federated_dataset = SyntheticFederatedDataset(\n", + " batch_size=batch_size, num_classes=10, num_collaborators=len(collaborator_names), seed=RANDOM_SEED)\n", + "\n", + "def callable_to_initialize_collaborator_private_attributes(index):\n", + " return synthetic_federated_dataset.split(index)\n", + "\n", + "collaborators = []\n", + "for idx, collaborator_name in enumerate(collaborator_names):\n", + " collaborators.append(\n", + " Collaborator(\n", + " name=collaborator_name, num_cpus=0.0, num_gpus=0.0,\n", + " private_attributes_callable=callable_to_initialize_collaborator_private_attributes,\n", + " index=idx\n", + " )\n", + " )\n", + "\n", + "local_runtime = LocalRuntime(\n", + " aggregator=aggregator, collaborators=collaborators, backend=\"single_process\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We define `loss_and_acc` dictionary to store the test results of our experiment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "loss_and_acc = {\n", + " \"FedProx\": {\n", + " \"Train Loss\": [], \"Test Accuracy\": []\n", + " },\n", + " \"FedAvg\": {\n", + " \"Train Loss\": [], \"Test Accuracy\": []\n", + " }\n", + "}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data Distribution\n", + "\n", + "Now that our Federation is setup and actors (Aggregator & Collaborators) are initialized, let us take a moment to analyze the *Synthetic non-IID dataset*. We check how the targets for individual collaborators are distributed across each of the classes by computing and plotting the heat-map distribution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from matplotlib.colors import LogNorm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "targets_for_collaborators = []\n", + "\n", + "for idx, collab in enumerate(collaborators):\n", + " # Train, and Test dataset is divided into 9:1 ratio\n", + " _, train_y = callable_to_initialize_collaborator_private_attributes(idx)[\"train_loader\"].dataset[:]\n", + " _, test_y = callable_to_initialize_collaborator_private_attributes(idx)[\"test_loader\"].dataset[:]\n", + " # Append train, and test into 1 tensor array\n", + " y = pt.cat((train_y, test_y))\n", + " targets = np.argmax(y.numpy(), axis = 1)\n", + " # Count number of samples for each class\n", + " frequency = np.zeros(10, dtype=np.int32)\n", + " for i, item in enumerate(targets):\n", + " frequency[item] += 1\n", + " targets_for_collaborators.append(frequency)\n", + "\n", + "result_arr = np.array(targets_for_collaborators).T.tolist()\n", + "fig, ax = plt.subplots(figsize=(20, 5))\n", + "ax = sns.heatmap(result_arr, annot=True, fmt=\"d\", annot_kws={\"fontsize\": 7}, ax=ax, norm=LogNorm(), cbar=False)\n", + "ax.set_title('Distribution of Classes in Dataset across Collaborators', fontsize=12)\n", + "ax.set_xlabel('Collaborator ID', fontsize=10)\n", + "ax.set_ylabel('Classes (0 - 9)', fontsize=10)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# FedProx\n", + "\n", + "Now that we have flow and runtime defined, let's define our parameters and run the experiment with FedProxOptimizer (mu > 0)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Randomly select `n_selected_collaborators` collaborators\n", + "# Must be less than total collaborators\n", + "n_selected_collaborators = 10\n", + "n_epochs = 100\n", + "learning_rate = 0.01\n", + "weight_decay = 0.001\n", + "local_epoch = 20\n", + "\n", + "# Set `mu` to `1.0` for FedProx\n", + "mu = 1.0\n", + "\n", + "flflow = FedProxFlow(n_selected_collaborators=n_selected_collaborators, n_rounds=n_epochs, checkpoint=False)\n", + "flflow.runtime = local_runtime\n", + "\n", + "flflow.run()\n", + "loss_and_acc[\"FedProx\"][\"Train Loss\"] = flflow.loss_and_acc[\"Train Loss\"][:]\n", + "loss_and_acc[\"FedProx\"][\"Test Accuracy\"] = flflow.loss_and_acc[\"Test Accuracy\"][:]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# FedAvg\n", + "\n", + "Now that we have obtained FedProx results, let's define the parameters for FedAvg and run experiment. Note that for comparison we only change the parameter mu to 0.0 (i.e. FedProxOptimizer with mu = 0.0)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mu = 0.0\n", + "\n", + "flflow = FedProxFlow(n_selected_collaborators=n_selected_collaborators, n_rounds=n_epochs, checkpoint=False)\n", + "flflow.runtime = local_runtime\n", + "\n", + "flflow.run()\n", + "loss_and_acc[\"FedAvg\"][\"Train Loss\"] = flflow.loss_and_acc[\"Train Loss\"][:]\n", + "loss_and_acc[\"FedAvg\"][\"Test Accuracy\"] = flflow.loss_and_acc[\"Test Accuracy\"][:]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Compare Results\n", + "\n", + "Now that we have obtained results for both the optimizers available we conclude the tutorial by comparing the Aggregated Training Loss and Aggregated Test Accuracy. Reference: Appendix C.3.2, Figure 6 of [Federated Optimization in Heterogeneous Networks](https://arxiv.org/pdf/1812.06127.pdf) for Synthetic (0,0) dataset." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(24, 6))\n", + "fig.subplots_adjust(hspace=0.4, top=0.8)\n", + "\n", + "fedprox_loss = loss_and_acc[\"FedProx\"][\"Train Loss\"]\n", + "fedavg_loss = loss_and_acc[\"FedAvg\"][\"Train Loss\"]\n", + "ax1.plot(fedprox_loss,'gv-', label='FedProx (mu=1.0)')\n", + "ax1.plot(fedavg_loss,'rs-', label='FedAvg (mu=0.0)')\n", + "ax1.legend()\n", + "ax1.minorticks_on()\n", + "ax1.grid(which='major',linestyle='-',color='0.5')\n", + "ax1.grid(which='minor',linestyle='--',color='0.25')\n", + "ax1.set_title('Train Loss')\n", + "ax1.set_xlabel('Training Round')\n", + "ax1.set_ylabel('Training Loss')\n", + "\n", + "fedprox_accuracy = loss_and_acc[\"FedProx\"][\"Test Accuracy\"]\n", + "fedavg_accuracy = loss_and_acc[\"FedAvg\"][\"Test Accuracy\"]\n", + "ax2.plot(fedprox_accuracy,'gv-', label='FedProx (mu=1.0)')\n", + "ax2.plot(fedavg_accuracy, 'rs-', label='FedAvg (mu=0.0)')\n", + "ax2.legend()\n", + "ax2.minorticks_on()\n", + "ax2.grid(which='major',linestyle='-',color='0.5')\n", + "ax2.grid(which='minor',linestyle='--',color='0.25')\n", + "ax2.set_title('Test Accuracy')\n", + "ax2.set_xlabel('Training Round')\n", + "ax2.set_ylabel('Test Accuracy')\n", + "\n", + "fig.suptitle('Comparison of FedProx (mu > 0) and FedAvg (mu = 0)', fontsize='18')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "env_fedprox_example", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.19" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "c96b31a6dd4c6365f3cc206f3a3aedb434a4eb5a8aa6c7dc735a6d54c4b635a9" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/openfl-tutorials/experimental/401_Federated_FedProx_PyTorch_MNIST_Workflow_Tutorial.ipynb b/openfl-tutorials/experimental/workflow/401_Federated_FedProx_PyTorch_MNIST_Workflow_Tutorial.ipynb similarity index 99% rename from openfl-tutorials/experimental/401_Federated_FedProx_PyTorch_MNIST_Workflow_Tutorial.ipynb rename to openfl-tutorials/experimental/workflow/401_Federated_FedProx_PyTorch_MNIST_Workflow_Tutorial.ipynb index 6b6d8225a0..385c6422e0 100644 --- a/openfl-tutorials/experimental/401_Federated_FedProx_PyTorch_MNIST_Workflow_Tutorial.ipynb +++ b/openfl-tutorials/experimental/workflow/401_Federated_FedProx_PyTorch_MNIST_Workflow_Tutorial.ipynb @@ -17,7 +17,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -33,9 +33,9 @@ "\n", "from openfl.utilities.optimizers.torch.fedprox import FedProxAdam\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator" + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator" ] }, { diff --git a/openfl-tutorials/experimental/workflow/401_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb b/openfl-tutorials/experimental/workflow/401_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb new file mode 100644 index 0000000000..fc99e22214 --- /dev/null +++ b/openfl-tutorials/experimental/workflow/401_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb @@ -0,0 +1,910 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "id": "dc13070c", + "metadata": {}, + "source": [ + "# Workflow Interface 401: Aggregator validation with a watermark dataset using Ray\n", + "\n", + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/intel/openfl/blob/develop/openfl-tutorials/experimental/401_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "8f28c451", + "metadata": {}, + "source": [ + "This tutorial is a merge of some of the previous notebooks.\n", + "\n", + "The purpose of this OpenFL Workflow Interface tutorial is to showcase the following:\n", + "- Performing validation on the aggregator (see the [102](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/102_Aggregator_Validation.ipynb) notebook)\n", + "- Training with watermarking of DL Model in Federated Learning (see the [301](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/301_MNIST_Watermarking.ipynb) notebook)\n", + "- Utilizing multiple GPUs for concurrent model training using the Ray Backend in LocalRuntime (see the [201](https://github.com/securefederatedai/openfl/blob/develop/openfl-tutorials/experimental/201_Exclusive_GPUs_with_Ray.ipynb) notebook).\n", + "\n", + "Watermarking enables the Model owner to assert ownership rights and detect stolen model instances." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "a4394089", + "metadata": {}, + "source": [ + "# Getting Started" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "857f9995", + "metadata": {}, + "source": [ + "First we start by installing the necessary dependencies for the workflow interface:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7475cba", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install git+https://github.com/securefederatedai/openfl.git\n", + "!pip install -r workflow_interface_requirements.txt\n", + "!pip install matplotlib\n", + "!pip install torchvision\n", + "!pip install git+https://github.com/pyviz-topics/imagen.git@master\n", + "!pip install holoviews==1.15.4\n", + "\n", + "# Uncomment this if running in Google Colab\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", + "#import os\n", + "#os.environ[\"USERNAME\"] = \"colab\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "7bd566df", + "metadata": {}, + "source": [ + "We begin with the quintessential example of a PyTorch CNN model trained on the MNIST dataset. Let's start by defining our data loaders, model, optimizer, and helper functions like we would for any other deep learning experiment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9bd8ac2d", + "metadata": {}, + "outputs": [], + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torch.optim as optim\n", + "import torch\n", + "import torchvision\n", + "import numpy as np\n", + "import random\n", + "import pathlib\n", + "import os\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import PIL.Image as Image\n", + "import imagen as ig\n", + "import numbergen as ng\n", + "import os\n", + "\n", + "random_seed = 1\n", + "torch.backends.cudnn.enabled = False\n", + "torch.manual_seed(random_seed)\n", + "\n", + "# MNIST Train and Test datasets\n", + "mnist_train = torchvision.datasets.MNIST(\n", + " \"./files/\",\n", + " train=True,\n", + " download=True,\n", + " transform=torchvision.transforms.Compose(\n", + " [\n", + " torchvision.transforms.ToTensor(),\n", + " torchvision.transforms.Normalize((0.1307,), (0.3081,)),\n", + " ]\n", + " ),\n", + ")\n", + "\n", + "mnist_test = torchvision.datasets.MNIST(\n", + " \"./files/\",\n", + " train=False,\n", + " download=True,\n", + " transform=torchvision.transforms.Compose(\n", + " [\n", + " torchvision.transforms.ToTensor(),\n", + " torchvision.transforms.Normalize((0.1307,), (0.3081,)),\n", + " ]\n", + " ),\n", + ")\n", + "\n", + "\n", + "class Net(nn.Module):\n", + " def __init__(self, dropout=0.0):\n", + " super(Net, self).__init__()\n", + " self.dropout = dropout\n", + " self.block = nn.Sequential(\n", + " nn.Conv2d(1, 32, 2),\n", + " nn.MaxPool2d(2),\n", + " nn.ReLU(),\n", + " nn.Conv2d(32, 64, 2),\n", + " nn.MaxPool2d(2),\n", + " nn.ReLU(),\n", + " nn.Conv2d(64, 128, 2),\n", + " nn.ReLU(),\n", + " )\n", + " self.fc1 = nn.Linear(128 * 5**2, 200)\n", + " self.fc2 = nn.Linear(200, 10)\n", + " self.relu = nn.ReLU()\n", + " self.dropout = nn.Dropout(p=dropout)\n", + "\n", + " def forward(self, x):\n", + " x = self.dropout(x)\n", + " out = self.block(x)\n", + " out = out.view(-1, 128 * 5**2)\n", + " out = self.dropout(out)\n", + " out = self.relu(self.fc1(out))\n", + " out = self.dropout(out)\n", + " out = self.fc2(out)\n", + " return F.log_softmax(out, 1)\n", + "\n", + "\n", + "def inference(network, test_loader):\n", + " if torch.cuda.is_available():\n", + " network = network.to('cuda:0')\n", + " network.eval()\n", + " correct = 0\n", + " with torch.no_grad():\n", + " for data, target in test_loader:\n", + " if torch.cuda.is_available():\n", + " data = data.to('cuda:0')\n", + " target = target.to('cuda:0')\n", + " output = network(data)\n", + " pred = output.data.max(1, keepdim=True)[1]\n", + " correct += pred.eq(target.data.view_as(pred)).sum()\n", + " accuracy = float(correct / len(test_loader.dataset))\n", + " return accuracy\n", + "\n", + "\n", + "def train_model(model, optimizer, data_loader, entity, round_number, log=False):\n", + " if torch.cuda.is_available():\n", + " model = model.to('cuda:0')\n", + " \n", + " # Helper function to train the model\n", + " train_loss = 0\n", + " model.train() \n", + " \n", + " for batch_idx, (X, y) in enumerate(data_loader):\n", + " if torch.cuda.is_available():\n", + " X = X.to(\"cuda:0\")\n", + " y = y.to(\"cuda:0\")\n", + " optimizer.zero_grad()\n", + " \n", + " output = model(X)\n", + " loss = F.nll_loss(output, y)\n", + " loss.backward()\n", + "\n", + " optimizer.step()\n", + "\n", + " train_loss += loss.item() * len(X)\n", + " if batch_idx % log_interval == 0 and log:\n", + " print(\n", + " \"{:<20} Train Epoch: {:<3} [{:<3}/{:<4} ({:<.0f}%)] Loss: {:<.6f}\".format(\n", + " entity,\n", + " round_number,\n", + " batch_idx * len(X),\n", + " len(data_loader.dataset),\n", + " 100.0 * batch_idx / len(data_loader),\n", + " loss.item(),\n", + " )\n", + " )\n", + " train_loss /= len(data_loader.dataset)\n", + " return train_loss" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "f0c55175", + "metadata": {}, + "source": [ + "The Watermark dataset consists of mislabelled (input, output) data pairs and is designed such that the model learns to exhibit an unusual prediction behavior on data points from this dataset. The unusual behavior can then be used to demonstrate model ownership and identify illegitimate model copies.\n", + "\n", + "Let us prepare and inspect the sample Watermark dataset. It consists of 100 images = 10 classes (1 for each digit) x 10 images (per class). Watermark images were generated by superimposing a unique pattern (per class) on a noisy background (10 images/class). (Reference - WAFFLE: Watermarking in Federated Learning https://arxiv.org/abs/2008.07298)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bcad2624", + "metadata": {}, + "outputs": [], + "source": [ + "watermark_dir = \"./files/watermark-dataset/MWAFFLE/\"\n", + "\n", + "\n", + "def generate_watermark(\n", + " x_size=28, y_size=28, num_class=10, num_samples_per_class=10, img_dir=watermark_dir\n", + "):\n", + " \"\"\"\n", + " Generate Watermark by superimposing a pattern on noisy background.\n", + "\n", + " Parameters\n", + " ----------\n", + " x_size: x dimension of the image\n", + " y_size: y dimension of the image\n", + " num_class: number of classes in the original dataset\n", + " num_samples_per_class: number of samples to be generated per class\n", + " img_dir: directory for saving watermark dataset\n", + "\n", + " Reference\n", + " ---------\n", + " WAFFLE: Watermarking in Federated Learning (https://arxiv.org/abs/2008.07298)\n", + "\n", + " \"\"\"\n", + " x_pattern = int(x_size * 2 / 3.0 - 1)\n", + " y_pattern = int(y_size * 2 / 3.0 - 1)\n", + "\n", + " np.random.seed(0)\n", + " for cls in range(num_class):\n", + " patterns = []\n", + " random_seed = 10 + cls\n", + " patterns.append(\n", + " ig.Line(\n", + " xdensity=x_pattern,\n", + " ydensity=y_pattern,\n", + " thickness=0.001,\n", + " orientation=np.pi * ng.UniformRandom(seed=random_seed),\n", + " x=ng.UniformRandom(seed=random_seed) - 0.5,\n", + " y=ng.UniformRandom(seed=random_seed) - 0.5,\n", + " scale=0.8,\n", + " )\n", + " )\n", + " patterns.append(\n", + " ig.Arc(\n", + " xdensity=x_pattern,\n", + " ydensity=y_pattern,\n", + " thickness=0.001,\n", + " orientation=np.pi * ng.UniformRandom(seed=random_seed),\n", + " x=ng.UniformRandom(seed=random_seed) - 0.5,\n", + " y=ng.UniformRandom(seed=random_seed) - 0.5,\n", + " size=0.33,\n", + " )\n", + " )\n", + "\n", + " pat = np.zeros((x_pattern, y_pattern))\n", + " for i in range(6):\n", + " j = np.random.randint(len(patterns))\n", + " pat += patterns[j]()\n", + " res = pat > 0.5\n", + " pat = res.astype(int)\n", + "\n", + " x_offset = np.random.randint(x_size - x_pattern + 1)\n", + " y_offset = np.random.randint(y_size - y_pattern + 1)\n", + "\n", + " for i in range(num_samples_per_class):\n", + " base = np.random.rand(x_size, y_size)\n", + " # base = np.zeros((x_input, y_input))\n", + " base[\n", + " x_offset : x_offset + pat.shape[0],\n", + " y_offset : y_offset + pat.shape[1],\n", + " ] += pat\n", + " d = np.ones((x_size, x_size))\n", + " img = np.minimum(base, d)\n", + " if not os.path.exists(img_dir + str(cls) + \"/\"):\n", + " os.makedirs(img_dir + str(cls) + \"/\")\n", + " plt.imsave(\n", + " img_dir + str(cls) + \"/wm_\" + str(i + 1) + \".png\",\n", + " img,\n", + " cmap=matplotlib.cm.gray,\n", + " )\n", + "\n", + "\n", + "# If the Watermark dataset does not exist, generate and save the Watermark images\n", + "watermark_path = pathlib.Path(watermark_dir)\n", + "if watermark_path.exists() and watermark_path.is_dir():\n", + " print(\n", + " f\"Watermark dataset already exists at: {watermark_path}. Proceeding to next step ... \"\n", + " )\n", + " pass\n", + "else:\n", + " print(f\"Generating Watermark dataset... \")\n", + " generate_watermark()\n", + "\n", + "\n", + "class WatermarkDataset(torch.utils.data.Dataset):\n", + " def __init__(self, images_dir, label_dir=None, transforms=None):\n", + " self.images_dir = os.path.abspath(images_dir)\n", + " self.image_paths = [\n", + " os.path.join(self.images_dir, d) for d in os.listdir(self.images_dir)\n", + " ]\n", + " self.label_paths = label_dir\n", + " self.transform = transforms\n", + " temp = []\n", + "\n", + " # Recursively counting total number of images in the directory\n", + " for image_path in self.image_paths:\n", + " for path in os.walk(image_path):\n", + " if len(path) <= 1:\n", + " continue\n", + " path = path[2]\n", + " for im_n in [image_path + \"/\" + p for p in path]:\n", + " temp.append(im_n)\n", + " self.image_paths = temp\n", + "\n", + " if len(self.image_paths) == 0:\n", + " raise Exception(f\"No file(s) found under {images_dir}\")\n", + "\n", + " def __len__(self):\n", + " return len(self.image_paths)\n", + "\n", + " def __getitem__(self, idx):\n", + " image_filepath = self.image_paths[idx]\n", + " image = Image.open(image_filepath)\n", + " image = image.convert(\"RGB\")\n", + " image = self.transform(image)\n", + " label = int(image_filepath.split(\"/\")[-2])\n", + "\n", + " return image, label\n", + "\n", + "\n", + "def get_watermark_transforms():\n", + " return torchvision.transforms.Compose(\n", + " [\n", + " torchvision.transforms.Grayscale(),\n", + " torchvision.transforms.Resize(28),\n", + " torchvision.transforms.ToTensor(),\n", + " torchvision.transforms.Normalize(mean=(0.5,), std=(0.5,)), # Normalize\n", + " ]\n", + " )\n", + "\n", + "\n", + "watermark_data = WatermarkDataset(\n", + " images_dir=watermark_dir,\n", + " transforms=get_watermark_transforms(),\n", + ")\n", + "\n", + "# Set display_watermark to True to display the Watermark dataset\n", + "display_watermark = True\n", + "if display_watermark:\n", + " # Inspect and plot the Watermark Images\n", + " wm_images = np.empty((100, 28, 28))\n", + " wm_labels = np.empty([100, 1], dtype=int)\n", + "\n", + " for i in range(len(watermark_data)):\n", + " img, label = watermark_data[i]\n", + " wm_labels[label * 10 + i % 10] = label\n", + " wm_images[label * 10 + i % 10, :, :] = img.numpy()\n", + "\n", + " fig = plt.figure(figsize=(120, 120))\n", + " for i in range(100):\n", + " plt.subplot(10, 10, i + 1)\n", + " plt.imshow(wm_images[i], interpolation=\"none\")\n", + " plt.title(\"Label: {}\".format(wm_labels[i]), fontsize=80)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "d82d34fd", + "metadata": {}, + "source": [ + "Next we import the `FLSpec`, `LocalRuntime`, placement decorators (`aggregator/collaborator`), and `InspectFlow`.\n", + "\n", + "- `FLSpec` – Defines the flow specification. User defined flows are subclasses of this.\n", + "- `Runtime` – Defines where the flow runs, infrastructure for task transitions (how information gets sent). The `LocalRuntime` runs the flow on a single node.\n", + "- `aggregator/collaborator` - placement decorators that define where the task will be assigned.\n", + "- `InspectFlow` – Utility to visualize the User-defined workflow as a Graph (only currently compatible in flows without loops)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "89cf4866", + "metadata": {}, + "outputs": [], + "source": [ + "from copy import deepcopy\n", + "\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.utilities.ui import InspectFlow\n", + "\n", + "\n", + "def FedAvg(models, weights=None): \n", + " models = [model.to('cpu') for model in models]\n", + " new_model = models[0]\n", + " state_dicts = [model.state_dict() for model in models]\n", + " state_dict = new_model.state_dict()\n", + " for key in models[1].state_dict():\n", + " state_dict[key] = torch.from_numpy(np.average([state[key].numpy() for state in state_dicts],\n", + " axis=0, \n", + " weights=weights))\n", + " new_model.load_state_dict(state_dict)\n", + " return new_model" + ] + }, + { + "attachments": { + "image.png": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiQAAAHCCAYAAADfBtJyAADpl0lEQVR4nOxdB3xjxfFe9WLJvdfzna83jqMTem+hd0JCC5B/ICEhQEgjEFoSSGgJPaG3QOglJPR6vVf33m1Zlq2u/3yr93yyLN/ZPvvkMt/93kl+emXfvtnZb2ZnZ/WhUEgwGIzhgdqNZsXm0n2e39J1wae13YfVd7lzW1zejHiXi7HnoBGaUJbN1JSbaKo/Nt/4n3PnZ760aNb0dfEuF4MxUaGPdwEYjImGru7uxL+88811f93s+6nD7UsiTq+Jd5kY8UBI1Hf15mJbWSeWPrm+49KfHtj11+sOn/8Xo8HgjXfpGIyJBiYkDMYw4PP5DPd8tOHnd6113+QNBI3xLg9jfACktNHly/7tx7W3Wry9vVcfu8/fDQaDL97lYjAmEpiQMBjDwNfrtx74tzWdP2IywogFyMVdq503HT6v6ZNFxfk8fMNgDANMSBiMYeD5Ms8FrS5verzLwRi/aHC6c/69pvp0JiQMxvDAhITBGAa+qmw7KN5lYIx/fLm97uB4l4HBmGhgQsJgDAO1nb35gmNYGbtAV68vMd5lYDAmGpiQMBjDQDh2RBfvYjDGOTAtPN5lYDAmGpiQMBgMBoPBiDuYkDAYUwQWvU4cWZIu5mfZ5d9dHr/4uLRFbGt1iX0LksXh0weP1Q2GQuJvX1eKHl+gb9+++XTOjHThcPvEo99W9Tu+MMkijpmVIVIsRqHVCBGg8x29PvFZRZvYTvdDOsaZaQni9AU5g94zRP+eX10n6rrcu/fgDAZjQoAJCYMxBTArPUE8dOoicXBxqrAYwkNOgWBIVHX0iMMf+UocVpwm7j5x3qDn+4NB8dTKmj5Cgmvce/J88R06zxsIiq8q28WGJmff8fsXpogHTl3Yd6+Qcr8uIi+PE3n5w8fbJTHa2T1x/BcV7UxIGIwpAiYkDMYUwDUHFYujZmaIeurcr31jlWjs9oi5GTZRlGIRLS6PeG5NnfiCSAWwd16y+Msp84XHHxQXv0THOj2SUHT27sjzdfysDLE0P1keY9BpxDUHF4tr39wg/wbgFdHTf/CKnPHMcrnv3MW54pJ9CsW135kuvq3pFJ+Ut4qDHvpc/pZpM4kXL1wqmcv172wUq+oc8p4bI0gOg8GY3GBCwmBMARQmW4WGSEKvNyBW1nVKQvJVVXvf7yAq9YonwqzXiWAo7KEAMajq7O13LbNeKy5aki9M9Pn8qlpx2Ix0cczMTJGXaBbl7T39jvXTNZbVdIhuuu+aeoc4uiRDTE9LEHvnJonXNjaIr6s75HEFSRZ5TyyttYlIiLqfwWBMHTAhYTCmAN7c1CiOm50pSjISxPqfHSE+2Nos3t7SJJ5fUyt8geEtsDk73SaOnZUp2lxe8eiyKoH5JBftXSBOn5ct7vmiPOY5GLo5bX62yLSbMANF1Hb1xjyOwWBMXTAhYTCmAP65qkYGsV6+X6E4qiRDnLUoV5yxMEdcf+gMcfrTy0Vpm2tI1zHqtHLYxWbSi39vaBDLajrFgiy7+B4RklMX5IinVtWK1p4d68qlJhhF6+9OkN/1Oo3QajTi1XX14nUiSAwGgxEJJiQMxhQAhl9eWV8v3t/WLGakWsUFe+WLy/cvEguyE8Vl+xaKmz/YLIdLdoXCZIs4fnam/H7S3Cyx9rrDhc0YViOLc5LkzJv36B4qfIGgnFmzJDdJpBM5WVnbKX729kYZl8JgMBiRYELCYEwBpFoMctikudsj1jR0iVpHqZwJc+j0NJFrN8kA1KEM3RxE5xQToXF5A3Qtr5wOjGm/CUadSKZ7nDQnqx8hcbr94synl4nT5ueIh05fJANmEX/y589KhS84vKEiBoMxucGEhMGYArjrhHniyBnpYlltJ5EJPxEUo5wlA0KxvtEpAsFdX8NApOXifQqEQa8Vzy2vFlf9e52c8gv85shZ4pZjZ4vj52QK2/v91Qpox7/WN4gDi1LE1QcWi58fOkN8U90uPi5vG4MnZTAYExVMSBiMSQ5MwS1rc0lCcOaCHGEkQoHZL9tbusWzq2rFg19XSGKyK2BIZmF2ovD6gzJI1hvBYlYQ0en2BORMm6NmDEyw1usPiD99WiZOnJ0lilKt4o7j54kTnvxGdLp9A45lMBhTE0xIGIxJDoyM/OmzMvG3byplUCqm/4J/gFBg6CWajHxR1S7ybv/PgNwjaxu7xLx7Ppbfu6KIxIelLaL47v/KZQfhgcG5OX8IXwP3ACo7esTi+z6VeUsQ0+L0+PvOR/Kzwjs+DF/bwySFwZiKYELCYEwBgHREEoCdAYGobREzZXa1H4DHpT3qN4+//98gJ45BPCIo32DXZjAYUwNMSBgMBoPBYMQdTEgYDAaDwWDEHUxIGAwGg8FgxB1MSBiMSQ67SS/2yUsWK+o6hxxHMtbAOjgo0/Lazn6zdRgMxtQFExIGYxIDM2rOXZQrbjlmtrj6tXXirS1N8S6SRLLZIP544lxx6lPL+6WaZzAYUxdMSBiMSQyrQSfOIULy8tp6uXbNO1ub5YwWZFY9Y36OTI6Gxe4+K28T/97UKDO6XrR3vpiemiCPw3mY7vu9JXlidqZdzrR5blWtaOr2iEv3LRTZdrPY1tItHlteJTO9lqRaxcX7FEqvjNPtE08srxbtPT5xxf5FMu18Q5dbPPR1pSwbpiD/4bg5osbhFo99WyXoT3H1AdOEncjKt1Ud4pUN9cJG5fz+0gIxLcUqenwB8cSyalHR0bPzh2YwGBMSTEgYjEmMJTlJMg/J48uqxP2nLhRLc5PE8rpOccW+RWJRTqK48t9rxalzs2XKdxCSO4+fK8rbe8T172wUNxxWIg6eliLK2l3iUiIZpzy1TLQRubAYtOKJs/YSa+sc4s6Pt4t7T54vh4I+3N4iHjhtobj3szLxSXm7eObcJaIkLUF87GgV/yBi4iJC8egZi8QFi3PFG5ub5FThX3+wRXpIEog4vXLRPuIZIjsfbGsWD1BZPf6AWEdk6LR52eKMZ1YIJ/KbcLZ5BmPSggkJgzFJAQ/EudT5P72qRmxtdYl1DdS5z8+WHo8T5mSKe4g4RK5fY6LjD5+RLv702bcycVksSO+KQS8OKkoVq4mQYIE9EIvDp6fJdXISjHrx39JWoUN6WAUzUhPEHUR02nq9YlaGTdR3uQdcN9VqFNNTreK9rc0yeyvIzekLcsS21h2rEA9WJgaDMTnAhITBmKSYkWYVhxanCZNBJ/YtSBGFSRYxP8su7vykVAaSmvXafsejuwe5AJHZGUBK3Ir3otbhFstrOkVHr08SCp1G04+MABfslUckpFdc/+5m8cvDS+i+ugHXBNnA/ZHFFcBCgPC6BNglwmBMGTAhYTAmKQ6Zlia9Ij98da38O8tmEu9esr/YNz9ZvLmxUZy/V74oa+8R3ylOlSQCJOWdTU3iB0sLxHOra8U+dNxXle0Drotsq6+tbxCHEdl5bk2dAIfAvs3NTlHT2Su+v3eB2N7aLQqSzfL4RqdHroGzgMhQktkgerwBSWgaaP/B8LQ0OCShQRzLZfsWio/LWuVCgPd/US5jVhgMxtQAExIGYxhIMGpdLo9IiHc5hgLEfnxdvYNQIDX7Te9vFg6PTzy1qlZUEnnAEE0wEOrzRNzyv63ixNmZ4mAiKW5lnZtu+rzn8zL5CfiCIXHb/7aJ4+i4w6anCY8/KOocbtHi8opr39wgvjsvS8zJtMtF+OD3wJAR4kQOnpYqtrR0i2U1HURg/OLnb28Ux9M1Ei168fbmJvEz+vu0BeFAWwwnfUPHJZn14oGvKkSvLxCXOmQwGHsOTEgYjGFgWmpCZXNDT2a8yzEU/K+0td/fGI5BbAZw8uwssXd+knATaViUmyRu/mCz3H/B4jyRYTcJg1YjshJN4sV36yUZeGV9Q79rIUD1tQ3992GGzg+W5gv4NDBLB/EfX1V1yHu8GnUsgNkyf/+mst8+eGYiAeLy742NI3n8uCIvxVYX7zIwGBMNTEgYjGHguLlZH6xorNwnGArtPNBinOOTijaxssEhV+fFDJxOdzhh2r+IOFiN4RiP+74sF13uoSdSA3l4YkWNTHoGhwuGcUBGpho0GhE6ZmHRh/EuB4Mx0cCEhMEYBs6blfTiS6v0527r9M2Kd1l2B91ev9yigRkunYOsyLsrBHjFXolF2YnrTpid9V68y8FgTDQwIWEwhoF5xYWbfnOI47Yff1j7oMPtS4p3eRjjC8kWQ+cfj8i/oSg3uyreZWEwJhqYkDAYw8T5B857IS3J1vbT9yv+ur2te2YoJDS7Posx2bFPfvKKPx5RcMPh86d9otFoeL4ygzFMMCFhMIYJnU4XOGFh8XuHzMj6/ON1ZUd8um77Yd1ujy3e5YoHNFqd0Z+Qur856Nnqc3U1x7s88UBSgtlx7N7z/nPA7MJvEqwW167PYDAYscCEhMEYIWxWa/cpByx8C1u8yxIvtLe3p69bt+619PTsRxcsWPB+vMvDYDAmLpiQMBiMESMUCmkCgYAlNMFnHTEYjPiDCQmDwRgxiIzoaTObTKbueJeFwWBMbDAhYTAYIwY8JLTpCTzfl8Fg7BaYkDAYDAaDwYg7mJAwGAwGg8GIO5iQMBgMBoPBiDuYkDAYjBHD7/cjqNXCQa0MBmN3wYSEwWCMGJjuy0GtDAZjNMCEhMFgMBgMRtzBhITBYAwLmOrb29trxafP57PSLo3f77e6XC4b1nAxmUxupNePdzkZDMbEAhMSBoMxLHg8HtO2bdv+0N3dPQfxI16vN3X79u336/V6F22d8+fP/7Hdbm+LdzkZDMbEAhMSBoMxLJhMJg8RkS3Nzc3/FwwGDdjX2tp6CH2EiouL72YywmAwRgImJAwGY1jAsMzs2bNfbGhouN7tdpeo+4mIbM3Ozn4inmVjMBgTF0xIGAzGsGGz2RwZGRl/q6uru1vxkoSSkpKeys3NLYt32RgMxsQEExIGgzEiFBcXv9zR0XFRd3f33omJieunT5/+HLwn8S4Xg8GYmGBCwmAwRoTMzMy6jIyMh4mQPJKVlfUX+l4b7zIxGIyJCyYkDAZjxCgqKnozEAgcsnDhwmfYO8JgMHYHTEgYjBEAOThKq2tLXtvYdMZnle2H1rS7Cjp7vcnxLteehkar1ZotNkvvG69UxLssexomvc5TkJJQszAvZf2Z0xNePXDRnK8NBoMv3uViMCYqmJAwGMOE2+02v/z56nNuXd3z24r2nuJgKKQVQke/WOJdtPjAiz7YkhrvYuxx+IUobfCVfNzQfMRzm4wXfq+085kbjl7wx5y0lIZ4F43BmIhgQsJgDAPwjDz7yaqLrvm8/QG3P2iOd3kY4wNtPd60+1f7rq3ylhY9d9bCCy0Wc2+8y8RgTDQwIWEwhoE1lfV73bba9RsmI4xowFP27w0Npz9daL74h4cueJRjahiM4YEJCYMxDDy+qvHy6s7ewniXgzF+8cia9itPmd3yVm52Zn28y8JgTCQwIWEwhoEvK9oOjncZGOMb21tdM1vb29OZkDAYwwMTEgZjGKjqcBWFA1gZjNjo9vptHq/PFO9yMBgTDUxIGIxhwBcQhniXgcFgMCYjmJAwGAwGg8GIO5iQMBgTAMlmg3j30v1FYbJVGHQaua/F5RWflLaKx5dXizUNDqHTaMTdJ8wVZyzMFQnG8LBSry8oKjtc4vFl1eLNTY2iy+MXBq1GvPmD/cTeeckD7tPS7RUn//NbOqdnwG8vnLe3OHJmxqBlXFbTIc57fqU4e0GuuOnImbLMVCThC4REQ5db/Gt9vXhmda2op++RyLaZxD/PWSKW5CWJf66oETe/v1kEQuEJKnimh05bKE5fkCOeW1UrbnhvkzDqtGLjz48Qgg655cMt4qlVOzLW/2Bpgbj7xHniy8p2cdGLq0SPLzDsumYwGPEBExIGYwIAnfCinERkBxWbmpzCScSiMNkirj5omjhxbpY44+llYgPtn5VhE8WpVtnpg1TYjHpxYFGqOKAwVTyxrEpc+9YGuppGpFiMIiPBJMrbXaLR6em7T3uPlwhEMGYZ6uia21tdOF0UJFnk/VGODY1OTHkVNZ1uAR5RQPtnpicIlzcgfwOBQrnuILJ03KwMccYzK0Sne0dC0+/OzRaHz0inZ9OKMxfmiKdWVotNzd3hH+leiWa9yCTSYjfp8afcMhKMRLr04o8nzZek618bGmQZLAadPDbZYhCasXsdDAZjDMCEhMGYQOiijvyKV9eIZTWdYv/8ZPHChfuIohSLOGF25o5OnPDSmjrpTUikTvzXR80S1xw8XZy2IEfc/2UFkZCw9wNeiLs/KRWPEVEZCq5/d5P8REd/85Ezxa3HziHC0SWOfPQr4fYH+35Tsb6hSxz12FdCq9GIC5fki3tPni+Jx4GFKeK9bc3yGBCIi/cpEDqtRlRQuUCmTp6TTc9SOqQygXzc990FotbRK76u7hjSOQwGY3yCCQmDMUGxuaVbdPb6xLQUq0g0x/YItNPva+odIhgMSS+L3bTnZwhh2GRVXaf8tBFBSrHsiAs+kggKPD/1Dre4mQjPE+cukV6Sx5dXybLvDH56JicRtOxEs3jo9EXilH8uG+tHYTAYYwgmJAzGBIJZrxNnL8qTQzDnUMe9ODdReAJB8XVVe1/cBbBXXpL40YHFIp8668v3LxJGvVZsrnGKjRFeFL1WIx4+Y5H4G3XmKn753ibx0NeV4qQ5mSLbHk5Gi6GQzyvaxPpG564LGMGKcujeVx8wTcazXLy0QHozmrs94vPK9vChdOyV+xVJkvKP5dXitU2N4lZHr5iXZReHFqeJ1+nvncFPz/2LdzaJ8/fKk7EtD5++kMrZPpRqZDAY4xBMSBiMCQQrde7XHzpDfnd5/WJtfZd4fFmVeH9bS7/jjpiRLjcANOWNjY3il+9vEr2Yt6zVhvfTD4jxqOrcsewKhk1sdI+fHTJDxp4AiCn56Zvrh0ZIIoDhl3tPWdD3N4ZwrqXr1ClBrfMz7OIoIhJuKhO8IcfNyhSt3V5Rkm4TP9incJeEBOjs9YqfvLlBvHXJ/uIYOn8WnctgMCYmmJAwGBMICCL95XubxZYWp+jxBkQ1kQm1g4fHQ8Wr6+vFe1ubxe+PmSNyk8wy9qTO0X92CzwqD35VMSCGxKDTEnHYIJLMYfUQDCH7aLcYEiJWb9lIBOam9zaJu06cJ70eIfqHoFh4XBBXcsq8LEmwgFuOmd3vMkfMSBNZNpNo7fHu8nYbm53SswNPz8wMJiQMxkQFExIGYwIB3orltR0yqHVnqO7oFU+vrJEjKI+cuVicsziPzuuUBCQSFr1WzmLpA/Xwvf6gWFG78+sPBQ4iQf8tbRFXv7ZWvPq9fcWC7EQiSLPF/72xXk4JPn1Brjzu2VW14uPyVvk9hfb/7NAZIsduFifNyRJPr6oZ0r1eWd8g5mXaxa+PniXJDoPBmHhgQsJgTFLAe/Ds6lpx2rwccdK8LPGrI2fJ/Bzq0As8KvedulBuKuAN+f6LK8Wza+pGrRyIGXnkm0rxq6Nmi0v2LRQfbm+RwbjIO9Ll9os/frq9X5kOKU4Vp87PEd+lMr+6oWFI94DX5a9flosDilLEsbMyR63sDAZjz4EJCYMxAeD2B8RzRC6QZKzVFXsYAzEh/ytrFW3U2cMbAnKB6bg3f7BJ1DndMh8Ihk7WNXaJd7Y0yVk6A68R6psWvDOsa+gST62sEeVtPf2CaYG1ym9lba6+3/5GhASBtZl2syhKsQqb0SvJUgUdU9G+I4YFM2eQHK2DiEpHj1eW+bPyNuGh5/6qql0+E47BufCERMa/dNBz/+4/W0S90yO2NDvlcQwGY+KACQmDMQGADKtXvrZup8eg87/vi/IB+9c1Ounctf323fa/bSMuC7r5tzY3yS3Wb29ubpRbJBqIJNz43uZ++55YUR3z+ghmjQxoffjbKrmpCBA5uWqQuvimppO21UN8EgaDMZ7AhITBYDAYDEbcwYSEwWAwGAxG3MGEhMFgMBgMRtzBhITBYDAYDEbcwYSEwZjEwAq6tx87R2xu7hZPrqwWoXEy8eSCxXkyAPaFtaM3vZjBYExsMCFhMCYxFmcnilPmZYu9cnvlVN/Gbo/cH15oTy+Q3NUbCMkMsMjlYSYCg7VlkFrM4w/K/TjWphyLacTdtM9s0Mk1arBoH2YAYYot8pEl0H6s4AuygUyyWFDPSn+rGVkdbr9M7laUbBEJdM2MBKPopuOQ0h7Xw7kBuhaOU8uTYAzfG9dy0bEMBmNyggkJgzFJgU789AU54q+fl4sjS9LFIcVp4pX19UJHzOH3R88SGTaTTD1/+PQ08cPX1onKjh7xz7P3knk8QEaW5CaKs55dKc5blCNOmpstVtR1im0t3eKjslbx2BmLRXO3V6QTofiqqkPc+0WZmJNuE3efME+sqneI6WlW0ehwixve3ywOp/vunZ8sFmTZxeZmp7jjk+1yEb59C5LFFfsXiQ+3tchF9x48daFMA1+UbBVvb24Uz62pE9cfMkPMpfOwf3WdQ3xAxwbHi5uHwWCMKpiQMBiTFCVpCeLAwhTx0FcVcgG7s4icvLaxQZwyJ0vMzrCJi15aLT0bWDcGQzs/PrBYNLu8Ml9IhtUoXv3ePpLUpND3lURGbv9ou/SC/OqImfK4n7y9QXo6Xjx/qXj420q5Hg0IzzOra8W5i3LFkcrifkjAlpVolnlSzqP9f0GuFOIUnxCxufOTUnnNO46bK5bVdoo76B6z0hPEU+cukVla04jwfFTaOmjOEgaDMXnAhITBmKQ4Ynq6JBzzsu3CbNSJ+fS5NDdJZNpMMhMqhkAwHANgiKaAyEWtwy2HVAaDlo7MT7KIhdmJ0huCVO/VdA6GZeAtURf6U2Ez6sUzRC6Q2Ozb6g5xydKCAWvN4O8cu0l8Wt4mSQuGgLAicR6RGAaDMXXAhITBmIRA7MXJ87LEf7a3yCEaDM2UtfeIo2dmiFV1DnHK3CyRZjXKGBAddf4YBUG69QOLUmUciBozEg0MlyBAFnEev/pgsyQ1ero+iEQN3WNupk18QsQC8SlAqsVAm1GmfUesijrcAqJkU45BGbAKMNLagyBhYb1ur1/URK1OzGAwJjeYkDAYkxDwYICIYMVfNZDVRkTjmoOLxX1floeHck5bKOocvcJuDAehvri2XhxEhOQB2t/j8fd5MkA+1HVh8P+TK6rFfacsEI+cvli09njFyppO8cyaWnHv5+XilqNnEymxi1y7SbTRb/VOt1ydGN6U9l6fXIcHpOSj8lbxh2PniHtOni/e2tgor/nnk+aLB05dIFf8/eMnpURggsJPW/RaOQwGY3KCCQmDMQxk2ozNFc5AcbzLsStgcb0T//Ftv30vra+XG7wnD39TKRqIqBxWnCb2ykkSDrePyEZI3PDeJkkaLlqSL4dmfERE7o1aHwczby7915oB92wg8nHxy6uk1+TRMxbLRfpAZL7/ysBjV9Y5xAlR5bvwxVUDjvtF1Po3EwF6rcav02l5OhCDMUwwIWEwhoH52UkbK5zt456Q7AwpFoO4dN8iGfOB1X1veHeTqO9yixlpCeKK/Yrkqrwef0Bc9/ZGOR13qFiSmySOnZUpdFpNOO/JFA1EJSJXm2S3O+JdDgZjooEJCYMxDJwzL/3lj6scR7i8gYR4l2WkwMq7t380cLXf0jaXuPG9TSO+LuJVsE11HFFg/TgnK6Mh3uVgMCYamJAwGMPAGXsVvvbBlvrjnt/WfUEoJGKEfTKmMnITzfU3H1Fyh9Vi6Yl3WRiMiQYmJAzGMJBgtbpuP3Hhrzo0ZSnvbmk+Md7lYYwfgIz8/bjCq2fkZJTFuywMxkQEExIGY5goys6oev2i5NP++cWmHzyxqeuyNfWOvTz+oCne5dqTsGiFSDWGRIpBCIM2JDxBITq8GtHu08jvUwUajQgVp1grTipOeOcXh8/6U35Gaq1Go+FpQQzGCMCEhMEYAQwGg++ywxY+ceZeXa92OhzJwWBIG+8yjSZCImRyulxpDoczzdHlTDNZLDl6k3mWw9k93eF0zQj6/Yl2i6HNrNf3uFzd0212+3aXx5fkdPtSDXq9I9FuK0uyJ5Q5OzvLNCJYn2S3tycl2tusFnO7QW+YVMMZCQkWV1pKSpvRaPTGuywMxkQGExIGY4TQarXB1JTkdmzxLstw4ff79b29vQk9PT1yCwaDGd3d3TPa2tpmdnR0zLBardkWi8UYCgYNZm3Q6GiudyUnJ28vSE5+d35hdpnb7a5JTEzspHNTS0tL39l/yaJz6fwQbSlmsznP4XCUdHa2T/d3O45MSUlJFD6319nh9dZUdPq8Xm9rWlrattTU1DKTyVRGxzfRvVx0Txd99lDH7ol3/TAYjD0PJiQMxiREKBTSBAIBHYgHPol82IlozGptbZ3R0tJSQuSiSKPRZHg8nkwiFZl0XMBms5XZ7fYy+lzrcrneIiLRQMShgT4bExISumLdp6KiYiYRsxCdU5+dnd0W6xi6t629vT2Htmy6ZzZdr4j2lRD52d/pdE7X6XRWIiItRE5aaH8r7avLzMwsTU9PL6NylhPxadDr9X46LoANRHBsa4/BYMQDTEgYjEkAeDuowy9oamqaTqSjkEjINOr4i4lYFBPhmEZ/m61WazURiwp8dnZ2riMCUZaXl1dJpKMqKSmpdazKRmSjm+6zHdsgZbcTSZpGWzF9L8zNzZ1GpOOIhoaGS8rLy/N9Pl8iyBKVu4oITSU9XyURFpS7lkhLFQjTWJWdwWDsOTAhYTAmADwej7mjoyObtkzF01Cg1+tLuru7ix0Ox+xQKJRMnXaryWRqS0xMbKutra0jIvBVVlbWM9R5b6P9zYh70el0ftXbEO9nUkHldBYWFq7Hhr/h3SESYlC8O3p69iR6ZnhUQLam07PsTb8fW11dnVJaWprqdDrNimenij630bGlycnJzURUmuHhoX3tHGjKYIx/MCFhMMYBqPM1UMea1NXVlUIkI4k60Mze3t5ZnZ2dM2grNhqNOQkJCX7aT310wEcdcxd1uGWpqan/LSgoeJg68Vqr1dpNx3Tj84ADDpiwK9OBPCBAVA0SJULRlZ6eXkNfP8bfGIJyuVx2xL7AM0TkJJVIC+ppGpGU6fT70VqtVkdETVdeXq5vbm72g6xg+IfqawsdW0N11EnX7UxKSmpHffEwEIMRfzAhYTD2ANCJer1ek9vtNtNmoY40mT4RRIqYjlnUMebp9XobERM7OlkEiFIHui0xMbGMtnep062gv1vpuDb6bCHi4Yz3M8UL8O4goBZbxO5v1C/wrBCxS6Mttb29PZPqKtNsNk+jv6eVlpZeSnWZS+d6DQaDk+q8u6mpyWEymWqysrI2EWGpICJUTX930zm9tLnpOC8TFgZj7MGEhMEYZWDIgciGFQGkZJ2XUIdXQp3k9LS0tDwiG3lk2RcGg0ETdZRl2EpKSrbTsWstFkttRkZGdUpKSj3IR7yfY6ICQ1JELJqwTZs2bcDqfAphyaQ6zyMyWGS32/Oys7NBWM4gwlKCd0QkxEHvppIISQORmgb6u4wIyzZ6PxX0HiuIsPTG49kYjMkMJiQMxggAb0dbW1sBbbnUsRWQ1V5EhKLE5XJN7+7unkm/p1JnVm+1Wmsw3FBbW1tNJGRZQUFBKXV+26kTbJoMVrcSj9Lr8XjsNpst5iyb8QaFsNRjmzVr1vLo3+HN6uzszGtsbJxNhGU6kctpRET26ejoOL2+vj6P/s4FUaF3W07PXEkEppTOqSKiUkdbPW01PHWZwRg+mJAwGDEAK5o6pUza0h0ORxp1ujm0byZ9n0GW9HSNRoOYDrj8XUQ0uhsaGlqoIypNSUn5vKioaAtZ1LVw96NjImvavd9++03KpFmI96CNqsZvjHdZRgsYEqJ3WY1N3UcE04jAYnXYjb4XIWcLbfhcQCTzUCKmdiIxNiKlNpKJZiKdFUlJSWUkC6VUP3WJiYntJB8tmNHEhIXBGAgmJIwpCSU3B2I1EmmzUyeTEgqFiqlTmYPEYNTx5GZlZRlpn5Y2He3zEQHZRp3JdupUPtRqtcjZ0UkWchdtjqkc0zEVEBlkq6Bm+vTpX6h/QJaIqCYTGUnEJ8lHfk9Pj5wZRKT2ECIjNtofqKurC5BsBZxOZxPJEYJsSzFDiGSsGcG12EienIhbicNjMhhxBRMSxqRE5NRRzGChDgPEYxqmjTY1Nc0hQlKUkZGRQpZuBnUQafSbHjED1HFsLykpWedwON6mvxvT09MRz9HCU0cZOwMyzWKjr3WxfsfMKSK1WcqWSaSjSKfTYRrzmeXl5TPou5nkrR3TtonMtDc3N2Oor0zdkDQOQ020+cbbtG0GY7TAhIQxKUDkw4jgUbJIC0nJIwsp0p9PIyICS7WIiEcaKfwqJNdCHEdNTc0aOq2GvlcgyRYRkebJENPBGJ+AFw0bydu2WL+DsLS3txe2tLRAfgtJVqcbjcbDGxoaflBaWlpMBFuPhHbYiPhUNzY2IiEcEsRVELGuJMLcwoSZMdHBhIQxIQBvR2dnZzZmRsDKJGWdR7tnOp3OmS6Xa5rX6y0gJd5A+1vJgmwjRV5DyvqrtLS0ytmzZ29PSkqqVNOOw8JcsmQJkw/GuIFCWPolh8OworqRjCcjfokIy4za2lrM2ppL+w+vqKjI3LJlSybJv5bkv5yICQJsK4iIYzZQQ2pqagPJPpLEtcT7GRmMXYEJCWNcAEMrsBKRO4IUb2pPT08GkQuMv89EcjCPx5Obnp4eIkLhJmLhIcLRS5bidlK4H+Tm5iJ3RCVtXVicTd3i/UwMxkgBb4cyROPH31artScjI6O+pKTkc/ytxkApyeGstCuV2g48hCVE2KfT8d+hv03UdhCEa6TPIBZHJHJSYTabK4PB4HYE2RKBcSAWCls8n5fBAJiQMPYISAFqkRAMMxWgQOkTicGK29vbp5PVh5iOAiIcViImCfTdQvuhhGvIsttCSvhtOgfDLa2w9Eh5dkCBsot6XIDfQRwAb58SUK0uelhGW98UZqTcx+wwIiJpTqczuaCgIMPn882ifdOJtCzBWkfUhnoxZZsO762vr0fm33IMAymrMG/H7DAkhwO5x3dub4yxBhMSxqgBpAOuZnwSsTAhA2lra+s0UoDTaN8cUp45REIykccBmUrpbyz0VoVpsk1NTW8ajcbGnJyc+szMzCqy3lo5pmP8Q1mBt5feqS3eZWHsANYsUpPDxfodhIXaZr4SZJtNbRB5dGa4XK5jKioqruju7i5JSEhoxhpIRErqCDXJycnItVKZm5u7kdpnrZrBFkSF2ypjNMCEhDEiYIiFFFluY2Mj0p/ndXV15ZGimqOsLluEbKQgG6TkkH+hjqy0Kjrn26ysrKr09PTq7OzsmMF9jIkFpUPyUwc3afKQTAWAsFBbrMQW63cMCSHHCgLEm5ubZxA5wfIGS6mdf5fa/DSPx5MJskJtvILa9zYyKKro7zpcLyMjAwG39Tx1mTFcMCFhxASCSIlEpHZ2dmaQYsrp7e3NstvtRfT3HIxVI6aDFBQSf7Xp9fouIhsOUlzbSRl9kp+fXwHvB/3mQu4GTFUkZcWJoCYJ4AVDrE8wGEQcQzrytND7T8F0VljL9O478c7jXU7GyAHPV2ZmZjm2efPmfaxOo8dsNmr7Jq/Xa6EtT1keYRYZIrNJHxxI35Pr6uqSSXfY6RpNycnJW0lvlLvd7koiKPVYgRnT6Dk5HCMWmJBMUWBYBSumYkNyMEyLpX3FWFmWCMgc6mAKU1NTdUgMhk6GFI3PYrHU0L6tJSUl7yNVNv2NBc46kBSMV0ydOkDHVFlZeTNZxceRfBjgDSsrK3uI9vVSJ9OwdOnSsxHnE+9yMkYPkSswY0VpZXdtYWHht/iirN9kQWA6Vq0mmUgkAlLQ3t4+E9PxHQ7Hd7Kzs62kb0Rtba2gv+GFaSCCUkoEBYG224jAtCImBvqEti46n0ntFAMTkkkMWDKwaJD2msiGmSzY2cgcSUpiGimD2aQIkui3RCIfyaRArGTVIp9BJSmZTWQBv47cBlhdNiMjo44URQcnY2IA6JRMJtOHJDNXIggZ+zBUR51WMDc393UmI1MPICzq7DbSFw3K7mWRxyjJ4bAcQwbpmgzSLYUkN5jKfBIRlOuIhGiJmHQSEenq7e3tJPnC2kBltJWTriqFN1YlRfCusD6afGBCEkdgXQwszEZKvHR3r6XEdBTU19fPwdgvfS/Ky8ubQY26gCwXucosYjqwIBjGeUk5rCYlUoYgUiwKhuRK7OFgDBWzZs36D8na50Ruj1f3IQ9Gfn7+P+NYLMY4RkRyuO2xfscQMZLCkf5CMsMCrMBMOurgxsbGi8rKyqbDW4uZd1gVm8hIFR2HeBUkNixPT0+vICI8Kos7EmHKoXu08zDzngcTkjgA7s3KysoFFRUVf+3q6mo67bTTLtjVOSAcZEVkYnXZ5ubmIiIYOdQYEdMxHyvM0t+51IicGFYhK6ORLJAm+m0FEY5nERmfmppaTpaHh6PiGaMByE9hYeEfidjuh5WNsY+s1pcH62wYjF0ByzNgKy4uXoO/oSfVWXv4JFlLJQIMjwqWf5hFem4uyd6RpaWl2evXr8+m40CKy4j0yI2IDPQeksPVk66sQWzTrsqg6OaboFeJXP+6pKTkm7F+bsYOMCHZw0BOgI0bN15ElsBN8FxQI1lGjcpMBMKLQEHaUuiYFPoth/ZNIxIyraOjAw2vKDk52UcdAVyVPURMusiKqKXG9hE1mgfp2GpqoF1kQbiQOwB5A5h0MMYSREi+qqure486iAuxDhDJ4T/iXSbG5IGyknSf8ZSSkoIFCZtmzJjxFf6GkYa4FeQ1UnIcpdF35FkpaWhomEHn7U8k2Uw61Lp9+3Yr6VFvYmJiGVZgpq0U+pP0byuGpWlrJ93pBPkh4oN0BUeSLn6Nzv0LyfXj9DsPQ+4BMCHZQwDzrqioWFRbW3sLCfsJJPgm7CeiMeOjjz56GLk5iHBYaL+BNiM1CvyO5csryOp8H0FftL8VCcHQgPDJY6iMeALj+NOmTXuAFPdx9P3J3NzcyniXiTF1gCy2WBkZm7KrkraV6u+InXO5XEnI/IyN9GamwWBA9ueSxsbGc4nQZKalpfnou5eIj5f0MlZbRhbbveh0DZ2fU1lZeSftP2T27Nm35efnr1Yz5zLGBjslJMpKqXrMSUeHuqcKNdngDwQMm7dsObWtpeUOeD76/eb321IzM+0Wf+B/Ab+/JjUtvZGsgMbUlOR65HcY7JpkCVjGvuTjA7CSlARcgdGMvIdcY8YIrCJso3XdqQRS8tvMCbbH582b+xTJtjne5ZmIgAcAG4I1x8KrCd0dqctH+/rjGaQvetPT0+uwKbv+p/7m8/th+GW2trXltXd0ZJusCTmki+fUVlZkq8dgSrvT6Txlw4YN+9TU1v11yV6L/7bHH2KSQPV2qUsixMr8G5OQQGi/3FJ26LO9ST9c3+ndu6HXn9cTCCWMfZEnJ4wiKGaFTGJR0CZm0ztID3mEyu48QWG6pcF0xjpN0hlyRydtFehzeS0sFQl6bXe2WVc/26bf+D1L58OHzZ/50e5aKusraxc/1+C97Kte4xFNbn9uhzeYOlrlnXooEuKbnpuE4OWDRoJMs64xw6Rr+o7W8d/vl6Q+UpKXM2pxOG6Px/zamm3nvBPKOHurwzu/zu0vDITElCIlu4Zd2YQoqOkRv4z6tU1jFJu9tpzNLZa7N/y36W6fYNt8JDBoNb4ck662JNG45ZRQ40tn7D3nZYvZ3Bt5zABC0tTSkvXHtQ2/e7XXfnFPwMUkZBTgFVqxQZMoNunskpzkhdxiQcgh5oa6RDZ9Tw15Bcv44HD5g7ay7uCssm7frP/pzCec3dPw7M9m2W/NT0uuGe61YMU/8s2ma/7mSr2x00dVL7xc84y4otkdyMa2SVgWvbW299wfdzT+6ZK5mQ/pdNrdGpLdVl45+5eVwQe/7bYd6g32cCbdISBLeISflHGDxiLKNAlirSZZVGustFdLmptVxe7AFwwZqnv9xdi+0CYd9cbXDRf8fk7iz+fmpG1Qj+lHSHw+v+H2tY23v+Ky/SAQCjGLHmVAoN1knEDQsX0kMkVaCDPLWNCHCk8gZH6+2Xdpl6898cH9Ld83m0zuoZ4Lz9+zq7Zf8qeulD94g0FW0IxxhRApgnqvyL+tovfOJO+21jP3mvXiSIdwGlvbsq/f5n7kG7fxMF7/cOhoFiZxn26WaNGYhJO6R665sYE3GDJ+6hDH/HSb+4mnje3fzUoLr7nUR0gwzvh+Zfupb/TazmcysmcAgXdqOK54uAiGhPYDh+a7r5e2nXfuvJynhroK6cbGjsV/7066wRv0MxlhjFv0BkLWP7Yl3HZgu+OL/PSU6uGe7w8E9P+sdv/ft27joWNRvskMeEMYewYg4Ks7PPs9UR649oakpN/p9Tp/X2+IscbnW4OXojHEs5AMxlAAT8lz7eKy0zyeF81m85C8JG/Udp1V0yOmjXHRGIzdRpXLN/2tbXWnX52ect9wz61pbC58qyN4Vohdr4wJgLccmrPOa2h8cnpBXtkOQuJ2mzc4PHvFsVwMxrCwrtOzt9fnMw6VkCxvchwoRNJYF4vBGBWsqGk+gD6GT0iamgsbe5Nyx6BIDMaoo6bHP62hpSunHyHBlLAWTyArngVjMIYDePOGMx29weXNE1NmsjRjosPl9Y1oUkGXqyex22+3j3Z5GIyxAOJJMMyI7/0CGDA2H58ijV+gt0s36USqUSfavQFBpG1I56UZcY5WtHmD8ryxgJYKl2fRCyN9qev1C3cgJCw6jShKMIgef1BU98SeGWui43Gehs7HMb7gyEO3hnK/8YIQy/cA6DWQBZ0w0XskSwUkb5fn0KEiV5G7WjrHsxvyszMk6LUii9qej15cjSJbGfR3plkn7+vwxY73RFtNN2lFtz8k6nt3TyYz6X4ZdD/cv2uQ+403yJTrPFwzAMkGrZQfd3CHPO0Kico5PdQuGnZTlgYDXlQWyZiN5L3JHRBO0qUGaluFVr38rcLlE7GaJdpuLrVds05Lz+MbUtsdDLhfkTUcxFs5yP32BEYlohIdo10f1vV4cbvTwQ0VeFF4gVCOUIjRLwP78TuOc+1GmaAU71iYJo7Otoq/busU99G2K1jp5rcuSBPHZFvEbRvbxTNVzr7fUC5cE7WFhuGOKDfqMUEXfqbo32KhyGoQLxyYTUQyJC5Z1iy2Or3irHybuJXKC0V85peNotE9sBEdmmERf907g4TfLy7+pknU7qKhoQ7NVCg0AJQrsi7PLbCLW+h+NSTEZ33ZIJqGSNgmEtDx4p2iO3JSp7Qn2irq2qYP9ynoWP2h/ncFqQQZRG27SIGNtMnNTTSIx/bNktf63reNYl2nd5fnqHKHMv1gWZPY7tyRqw5yYqayhWS5g/0Um/pMsX6LhQsK7eIns5LFsna3uJTug7Zx9+J0cUJOgni8zCH+sKl9ABlCG/rNvBRxSp5NvFLjFL9ct+v11nRULpRb6gr/jveLdvqnvdLFsdT2Hy3tErdvboc1t8vrTVTg+fHMEDvo07EimtH3tNA9jfSFxLxf/asAKYilL4cLyNKF0+zi0+ZeccXy5l0eD3n94fQkcdn0RPF6XXc/WZL9D5ULsz98Srkjf7PSMxk0A3+LBTzfI/tkiWKbXvxsdav4b1OP2DfVJB6ndgmj8aKvG8XKjoHr/M2xG8Qj+2bK8y/+tkmsjnFMJFAu6DJskOPI97t/qpn0QKb8fh7db21nfNYVHBVCsjTFLF46KFsqyRvXtopnIzrgsUIKWUGv0D0XJpvER/QCLycB64548YdnWMWT+2dJRfPjFc3ildruEd0HjTOPmGOCQm6GArDNAjon2ThwslJxgkE8R8ocn4+UOsQtG9v6FPN02vc8/TaNPn+yqkW8UL3zekzQh1l0o3sHCQAhxPXcOyFhacYw628dInnIMuvFA0RgZlED+OW6VvFuw44EWD0B6ligKEBUJqmuvmluivi/mcnC4Q2K/f9bLTq8Y28pH5hGbergHKnwbqI6/0dFV99vUCggvJeQoizv9kkFAqtmJIAyyzaHLcChAkQf8t3gHig/p+baxANLM0QP9S4XftMovmzdkffo7AKbuI/kqNrlF+d+3SDKugcvM9oaygXvhE5peAHqqsIdVvhzsLeQT2XDcw21vR6dZRG/m58mZRl1qbYLEH08h0qgJql49wF659kDssVMaud/2+4Qt21qG3NLGZ65vxDpO50Mqa1dXikzkZ5WeHI/OzJfdv4Pl3aK321oH/G9ckmPJRt0Q3aTahQPdJpJJ0lrJNAGnqe62p/a6ectveJ8khuVrNoN4d/2o99AnG9ev3NSbFb6C9WoBzxU8bieRvkeC3bZdvUDjJXBgDKrhvKjZV3i/u2dO+4XDPWVf7D77QnsNiFBh391SVJfh30VfX+lpnvM2XUSvQwoHeDQTIu0+t9tcMm/UfEoh0XRZBCo8YIKUsbL2zySkBxG5c4q0/e5lfcllgplCtfw+42uEV3/38Tk32/sIUWye9ZEJNBgoKRSY9Tjv4jovdMwuvcbT5hjN4qzCuxStpOJyF1anCj+sq1zxB6JoQKuWMVBIn5A9/yA3qkqJ/MSjeIM6twByLjqSRkP+LilR3boGOY8OTehj5CgnMflhCfwfdPmHtHwHuTr52tapaWK70NVxLtCOhkOJSTf25z9vUPwEvxkdYu4nowszyjeb7ziwiK7mGEzyO+n5yeI56u7qE5GbaWGmIBuwXAFMJPa2nmFdvHHLeF17EC8f0R63K7o+bQYBl68AIKKNgmdPYfa48IkY58XA7p9cYpJys9b9SPT46voWgf+N5z3cbT0KvgO3m+mOTxcH4kV7W55v9Ao3m8k2G1CAqv+cOpY4f6HNVFiM4qD0s3i4+YdlhHIw6l5NsmCEVfhJ20O6+oN6jxfow4Nz48xaSjew4hYgOTgZVaT1fdYuUMsbx/oPgIZwdiZfAiq3XMLbeIzYqoQlDPoPmCuKiIJCTwrFxXZSFna5H1gWT5T2SU+ovKikwGHWZhkEjeSVYwygVgVWAZW0xISODRgeIdgO33c1CueouvsamwSHfc7JKSnUYOHcMwnYUZHA/n4DtUbnuUzUuoYH08kCfrprGRxsFIneDY8I6wX5yBuwMPp2JvmpcpOAW5uCBfG1C+eZhffzQt3YpoYtt7lZG3jHaFewZTRIODBKY+wvKEg/rAwneomKOvt6hXN9K4tsq7w/i9b1izrC50POqPv0/sE60cMzYtVTvF6nUv+DvL663kpYj7Vc5KibBro/H+Wd4n/NPWMeWc/VOCdnJKXIDJMWrHR4ZVWDIYLnqNnUb1SOKaE3uOF0xLFIVT34Aaw3iuJeN63rUNsdYYTTX+HfjuflO08Ulz4u43ezwa65l/omFgeFygNFdPp+seQFf9UpVOS7WtJJtR6g4WZoFhWuO5ckqcrSYnvlWySHei31Pk/TO9RJQDwYl5AcnsOkSwrFdYTDAojXSPSQ4LhqaOyrCQziTJeA+/vX2RkvEzbroY+O+lZ/kfv8Bx61oNJntGJtNH5sE5B7nD2B0S2cR3U220L06SVBwXZTDLwRHm4Lfpj3AfDMb8kWTuSyvZcVZd4nI4FR5hN1/3FnBQxg0gFZDfb3L/jgjfwJvp9EbVZyHAnlQdevqepvUYO9SIW6o3v5Mp6e5Z+e7Kii+Q0VRoOzyh/o1go749KEun56H3T9TY4PLIsa6jN4Gr7USeF9lRMz4f7oc3DBY7hXsjFeATe0ynUZnsDQVFKMou6OjY7gQhJZ98xkB3U/fdJl+RYwvEGaPcYAvkn1U2PomvOJLKMa0FG8Z6h314lPf9G3cDOGfWTZAi/L7xf9BFP0LXQPpZSGSBHfWWM0OOxdMwL1C7fUHQMAP2KYZpF1BZQDniGowHycD61hyPpHcMLgnf5ELUXeGt2BtzhQyIk185Mls+M9g1CgjZ4EPU9qCvo0NJun3yuK6cniZOovHZFvy5HuyxzDErM0TbuXZIh+6MrSc+iX8E1z6X6OI/6OrR5tN1wv7BDho+l9/PDGUnSswi5gxcS7T96yAfHoJ+E+J/1ZT21Eb24Z690WdbLlzfROwvIZzkmG+87URrKkA3o8JeqnVJnoTy4DvrsDKXNod/6N71rtK2R8JrdIiToPM8h4YOSfJc6WYw/37YoTZxNyg6KEAKKY36/II2sTJt8EQgKTSNhxlALdOqb9IBQIA8uzZQKDB0pOl4Iyt4kkNu6vTEJCe6JCsGx6ADQMYIIfdXqFldSJaFiEfiGisxTrE0tlQXxIN+lTgYvEZ06GtgBJEA/Xd0q3m9wiZlEqB7dN1MUWg2iyYOAT9HniVGBcj26T5bIpusiCAk//2hmktgn1STH8nYFjIlvJoFfTHWARgXyBqK2X5pFWmLvN4Q7ZQz9oANLMYa9T8UJJrqHWQaQ/o2ELBbQOKH4GwxhkoNroFHCY4R6Qv0mGgZaGnhuKBkIMdyUKBsCCn+4ov9YK66HRgBFgk4ESgcdAoaPUOd436j/n81OkYq9nQQXHTnGKEEGobjT6XnQ2eF9qDEus+1WsSDRJBtfpJs/nsB7R0wO+MJjpDxATqB4IGuvKUOAePYHl2ZIpYdnwbFQhHhPX9FzwMJEo75/7wx5vUZq6FAyOG8+vVt4tDq8A+U7VbEGEayMzgKK9zVqK9+he8MA6FACpa1EyjMVRb2ACB6GS/D+0QngXV1anETyahbf/7ZRtj3E/NyxKF0q6Ga0RW1/dzTKdgUpz59RB45joOhxXbw/yBbe386ANg6FBPKL94629Q61q72ozaAtNlK5vm4Lz9JGkCG8PRjuQ1uem2iVhApxTWsGGcOGbOIYPDNKDcKE9jqLnrmVyoq2kRJlSaPzQjuCrELmZtL7WUJ10ukLiJerdwzlopWD4OmC4bgS/Mun+8ECTlfqGOQGw5cgn2hL6PzOyLdLS/kqkl10QtBjeH78BplINujJ8DBJY+3srxrGnScR9XhCjlUOTW8ivXTX5nbx3IE54iQi3y9T5wM5QdtGLMUNJBeoQxARxEng/YGgQY97SRf+CTE+uVZpnIKIQgbQNvDEgxESyBXqBMdjCPpMMtaeJfJ9Ockh3ll1j08SWjWQGrpR1TEIeO6I0jEgtdBRD1OfgntDhrtILtJM/bu7aQl6OYQIAon3hNeCThrG5iWkxyt3YVzCo/Y1tfETSIdDj/+ddDLkGAQW+Iz0Op4J9Yv2nq3oV7QD6Fd4XH9C/U4sQA4xRA45xDOj/s+kst21OE3AFsU7SaW2C0IcCdSRSswT9TrZdmH0Hvtpfb/j0M5RR7gW5Bzf4aHCfoNyv+OJkEJv4f64H97z7+abpH5BaAbIFQgSvOfN9O5xT+g+EEnE2oGEDlfSd4uQQAiOJaHFi8QwDQIaMdxwaIZZdm5gZwtIEYAAQOB+s75VvEAK4HYiBVfM2JEPAkFjIBOIJr5qebNklQia2y9t8MVD7Xq8KEFKIShepEbzsznJMggulTpbBAdtIuvzSyInGE4Kd54aqcxRFgjwNauapev4V2QBQfCvJ+FGLMpp9NIxlrqKSAM6RxAXxMdAsGWFacJuxAISZjTW32xok/d8+oAsWd6jMq1k4e18kTEowreJwOGaGG6aTS8UjBiuS3QaaocMtokXj3qFYKKxg9jBK2PSDtIxRLniZtCzoLFAMG5e2yZepQ7wQrhFiQ1HAuOJd5AigsUI6+7X81P7yJAKCNyNa1v6xZBEA40InSfq/PpVLdJliUb+570yJJtGwJZqZUOh/4AaPojjqwfniLl0P1gq44WQ4F3CyoXli3eKTukI2ncyKVw8F54Drm2QaxDMi6nTp1cr44BQdwAsGQzzgGAgyPJX69pkB/fcAdmD3hfKIFWp9/foPlBe6NBh/YAgWYiEPFXRKcn0dJtWqK/oCnpv6CC+aOkVl5GVg6GIv++TKQk0XOFQ8t8j6xbXh9UE78xBRIIRa6UCHs8f0HVgA96wtlUOg55IbfxBUkzwYL45BBc02tV2UtaQb3hj3mt0ieOojUMmQL7V2TGbunzi5M/rJakH0XjzkFxpqYFcDEZIogGlifpEQPePqL1upmu+RrJ0QPoO3QFvFtoy2hE6jGf2z5a/751slp4fFdA/p33R0BdDotMMuJ30IqLD2ULvGx5CBIQ/RB0fSOf/lSTLelexknTIGV82yPb3V7J2YbDA0Nq8C+t7TwOdEYxI6LY3qBP5nPRmC3XQsxPDQw/wBICYwcMHEnLHpnZp3Z+eF44JUoGO/ER6Vug36C2QlIfo97MLB5+BbJYePo2M33myrEtcPzeF9HiiqOz2i4OpH4HRCIJx45xUaVTinUBXQhZhCP58VavUpeis/6ToGHjoQFpRdpCZH69sEctIJv+xX5YkDyrOJiIJTzq8FSCTIMbogI9GO6P6uGdrx07rDVoMRgJ0ONodiCj6FpAA9Ikg4kFlutOf6Vq/2dgmvPQD+qSb5qZKD3GyYWgRLSBmF9Mzox94pLxT/GlLhyRgT+zfP1MH9BLabAe1MXg5HyIDBToMhK7Fu4NggTxFTtAASYpECvVp8M6DdDxAx91L5QfpfpzqEIYZRjfWO8JyDD2I2MJPqG3fS/0K+lDIAcoxnNg0YLcIyUnEqtHhgX3CIoTnGBYKyIgUEKq0fUgooEDXk4KJxZAhYHBx4aX9lwR/vcMjj98VEOQEBQchQhwDFN9RpBT2pkYPNy6Gemz6sFWDQCZEPM9UGCeEFEoTnS88O1DWM4jEoBMAOUAVQnHWkLLBsElkZD2UPwQO5QU7PDeiseG+M+168ckuFurFO4JlBmIDEnIECTSuCVaM4Zw6JVYA1t/NRJgwTGCO0I7qjJeYiHr/ORadJBUOYurvNIRd7u5A/yEC1AkaCd5ZpFtUzj7QDm+mbI4MHNNKBYNYFtTxfxrDcQV4HpDY8qhgRlgRUPAgJAn68TEzF3V20bTwu4UVdiYpKHQmqN4DqRPHkMiqDrf8jvcOrwCCNXPM+gHXwRAgrGUM9XQOYeooLBaVCDa5gzK4GXL9WyKJIEW1JL8Icj2QCLaB3hE8XhAPdOSQLZAnKEYE4YKcgBhgjBtTYWEFw1MGWcC7cQeDmCbad28MD+H9oQ0+vE9mv3Lh/cVye0cDSuh5elZ0CjA00L73pQ3eTBgPPiVYb780k7htQZq0zFRDDyVJGGJMDPyGsDwBdDjo6FG7cGVHAu/t9wtSpXfLGGFR4j6aYcyODd8vHGMBwrSN5BjPgjYLr9Uc6sBjlR3lwhCETa+XM4XGG9CxoWOGjMLCRqcOIgCL/uKiRElIYPlCdqDfMTQd7eXRKHoccojhTbT5oUAdcoQh+xkZIkd2hD2Qd5DxBb39SFmnHPbEsDjkHO8PZUQHDS/MBxE65sYIHaPKBfodeK0gEZFlxlsCYQnLoVmsOq6wX7lKSI8PhSt8Sm0Nxu8+dA0QdzV+Su5XiCfK/OOZyWSYJfSb6ABPBAjyUGaAykByS7j+31E6evR9kWFNEG2EAkCXw8OvAsHZkMuWYfBgEBGQFPR9qFvc7wt6P9Dd0Cdo2yohUYH2jaFJEBLEBoU9r3uIkMANegxZJ6rbHnEEkcC40uNECjxBIaPi5XTAqLFqoRTXo+gPuO60g3W0UcgiSwrHwnVdRZYNLG9Y5nArwcL+X1OvjMmQ16XyQejBTkOy7FpZYRBkm5zmppHjYx5lKhRKAKE2xCgLiq/Gb0AQt0d0rrj6Fmo8kUJijGVmiXDMxDv1PXIa2iXTwwG4eBY1mBVnwWuDl4v572hUUKzzkwYuw4I+fJDbyCEnlBl1i7gEZ/TMBjoPw27wEkGgIHwIktw/bUcGMQy9DJXo+pRjpaLRhRWNVbdjqtlwGXO8AKINIgHAMsCmAm7hQ+WYsTscCa+0gViii8dFnegjpsbvClAe6rh6h88vPiVSgam18ATA5fs8deoYU24n5Yd7ggSF21FIKqUkfXg4Q6fVSPkGnP6QHE6C8kP5odTXxpji65JTjMPHYfaAM2J82kNtBN6NZKVsYYs1tuDBSr2E2uMsKvNtC9PlUAeUlTqdEB6ROxelSwIETwK8JBjeiRU4bdLGvgfamxovgOdBu3ZFkW2c+YeFadKKrSDZhxJdRG2o2LZDYeMdDk0qd9zPrkyPhemgTktF3U2QVCV9QKd4PHWkqGLooEjPNQCvDt6VqkfUdt0RY46TWjdo73hnQxmaglxg2AE6FW7/f9e6JCHB0A30OmZsJiuxKCAIGL7Ed1waOmWHjtH2de49EVOWMUMQ7cnrHdjvqHll0JZAMCN5AWIuIv82DiKDMDAwfLuU9AO8AhhyR3uHJ1GNg0KsIWbEwUAAgYKRu38M7z+8+IZB7qPqEbNOJ70dVNsDjoG3E0Nq6O8Q0wipRptSjdmgco2hAHoGdRmpt9RUAyA4g8Uw7i5GTEgw7ga3NKwtuOcqlGAtuPbgJobVMy/RJF2peEmFCXpibskyoA1DIipQSRsdePk2cUSWRVrp6KzTdzEzBpWjEWH2hyqG5YWGhQDEfyhBUer0JVVxfkuKD0IIJQjG+gkpXMR+WPQIJKXfSKF8SfswrINrQXnBuom02tE5f0nHwqOB7++RpYlANSh+6Xauc8nvakT+cVkJMuirNMYURwTmYbiqQHGXvUfMd43SSWgUtz2eEUFmj5Y5pOs3kpD4guGGhUYKdh4rnwiCUtGwwWpvJSvx76VdMnhPBa6P+6AdwFPxNNUdLCEMC6nAO8aYIJ7vlFybaCEGiUa+vG1gxnYM01Uo9/vVvBQZCIkgN4yXojNCEJdx/EwKiQkUD8F1iVTm5SQzd2/u6At+/B4pl3Npw/j6X7d1iI0kH4dkWmTMwAolqC05wosAkgerAh0mSB+UNKwLKB7/IAobkq+KHNoHPGaoR3hIYC2+rozNqgrfpIyrg7igAzmPyrey0y2V/XFySDUs1xgOBAk5PkcvriOyK4PJzXrFCAhfC+PiUNDIcYDjcV+8f8goAt3w/hIStfJotNETySipo33RCgrHwWt047xUKbPo9BEMp9YjOjZV0YEEo54xph9JSLyKBQjX9iHUSX0TJW+4EoyPK2YkSsWLtgxDJJL4RQ5/wVr+O7UjeCYjCQmSF0L5QnedQvW1gd4pvEZroggbnhAeJ8Q/wdtyUVGiDO7G8AHq8Ku23gmXpwQd/5Gkd1Hq2ze298X3oM7uWpwu48jgwcX+FiIMiE/4OXV6GK7GMIWKUCjsGQkoQcaIN4FOzY+w1GNB1eM4H5ocbn4MPaL/QEcPfQLDQE440IaJQWmEjrmZdAzCBTCUnQQdQ20QkyH8yjRW6Omfk6zjWimm/gYB3iWGHyAjnzf3yPeO0uC5cDxE2qf0LzBI0Och/i8a8AR/b5q3b5gW+hpxgDgvrF/DBkKzxy+Df6eTnO+bZuo7H5wfzwcjGfK3MsY9YAggz8hJuXrxk9nJknDB+NYp+VsAuzJqgH4B/SG8SngWkBjAGwzH9AEYeoaRi+NXxbgfPKwr2j3iZKqfa2Ylyyn3SEWAdoOYnDW7yHkyUoyYkGDMFJYBGvm/61x9bqd12nDAE9x9IBi3b2qX0c+YhYDgSswQUEma2nYR/HI4VdAhmWY5JimrLOqYaKgWqToejcbwk1XNkjzAxYjTWhXXC8Y9EQQMFxrGwn5KL/THVA5UNMoNQnQndToQYozBge2eriQY0yhlUL0nAWU4CAmlDiAl+fd9svqOgTLH8BEUOBQlrnMY1cFp7Qniz1s7BzwDZlmgoZ+aF+40XlOUv/rcYNkHpptlh3eoEigFoqNadHWK52QpdUKXk1L+GLErUZ09vCuYRncXWaNHEjmCV0u9Tq+SswQN6ioii1BOzx4Yjm3AftwHhA9WAMbafz4nWZILbIj7OO/rhgHPhDLdtalD/HlJuhyHRZQ8roVgRow9I3isMMaspfEEBEwiaBFy+h4pFngKVDHEENupJBuYJgplB/ILRYUYD4xRyzFj5R3gO4jcn6n+QUJwTcQfBJTZXD2B2PKNztqquPYh3zgGnTkCVTHcWKUE28E9jFupihbKDgFsaJtP758tywwXL4ZP4HlDPNSd9A4wdInjnj1Afdc7ZBvBa/dQeUF+YByoQ5KQF+yHVwjEFwppCckdyMAnLT1SDiOBe2M6OMa9QcZAyj6NmHmHuA54UTB9GcOS6jmQOb9CtBEYDyWeadLLGLGLvhkYMP45tTPEGGB4DUGO6HzU66jPBP0EI+i79Dx4d/jdF5EYah21fwQgHk5t9e690uXvb9V1i/9bOXDsFUO5T1D7Bwn5w6KwfsB10PYeL9t5wO94BGQX7v1Weh/o2BuUIHMYcJhpkpdllfIEHY24kd+RUQOLH5vKp8NkgsghEbJ/1ThlnA1iJG6cKwbo+mgkKskt4dlCx4rO7vo1rSLLohNft7rleTAi8T7t1CbsBo3Y4iQdQ/r6z/SuEPtyboSOQfI6yBbk+MHtneJSMgJgCGAYSn3vKil+Vwm2Rn6cuxZnSGKCXzDb61OSaRiaaPunK+0dhHfZtwM7b+g06GoQEpQXMS1tStA5rocYKnhIZtiMMjYSQBFgMOP4Dl+AyHavONVCurXQJj5ocg3I0YN+Ac+Mtoug0mcO2HEdh88v+y4QFvSDiOV5RElyFu67gn25qaBHQDDRr7yaniPb9dlfNvSbqQPAkELiQQyjI0nbywflhMtKz3X/tk7Zl0YHj48GRtwzoDP9AzFqTJOKHAOD4Px2Q5sUcgg3fvo9HYeGPFtxOSMmAhZNuyec3AjCc8WKJml1wuqCQlenGrV5YruGPiRlhqj67d1hKyasFPoHQ0JxIlMqgqzUqZWPUKOCkMHCMSkp1zHco7rv0Pn+bE2LzMyHTkTNToqO/Ssl2BLnfO/bJvlSIRxgmWhQaMBqXdy3zSEZJqzDT5pjB2mizH+kBgTPAToOTHmNBCxMxFaoZcWV0WDX0fG4H26FREKoN3RisBzwHHfSNSHAPoW4wAJd11knvT6wHrEPHiQIb6Pyjo77tE4cRQpZdcd3KZZ9Pf2O4x8hJbyG3jUCLNH9wQIOTw0LR+U7lfsB/yPlfCJdDwFkcKk6qP5RBnWqLAKu7qDGhVgWNR0zZpvA27A+ThkCIwEXMlzF8GK8ERUpjk7y9yTfILlQtrCQMYMFni40ULhHIbvpRFxQxzj3KzrnTGr0mCaK3xHX8z06Bm3FGcPHj2ESeMTQFhBTBcBb8VpUcr93SdEhzkkNkoRsXL2yWZIeyCWUDdrn5y07lOhmIs0nflYnA/fgzkaHimmw8KSpUx0xRg2ijIRh6vRjXBvtRiVZ55PcwWOHYc3BEpxh/01rW6W1CwVWFTFrAfKJdga5mEZWF2QK1mi4nYXLCw/muV81ymD0KiJiUOCoA3guQYyCipKFvkHnAtlUhwYh198q1v5D1DEhxgRxOCgvdBB0xypqn6gjELurqN7wPPA2Yt9K5TcYGKtJJuHBwfv20H/QZ9A/uB/0QynpIHhmVO/IF1R+Pylz1WOJoTVMJYUBt6usyHsakKvblbK2RixxgTp6gOoNEwPUpHDw6ELWQGKEJiQWESFHZ42271Y6VwRCg8TDC436A6mFJ2OwJIx4l9DReF/dSsbhb6MsdsgeAjAx/F2ryBDI7EmfhXVaLB2DDhgd+AdUFsQ3ot1BvjAstFy5PnQ9kg7Cm7C3EuuIdwi5begNXwcGKuoGzzxYMDLu9Y8Kh9Tn0IFvRcVKQs8eT/rwyExr34xNlBf6GjM58czXK/UGL+G3bR5Z/3/e0tnnuQYw2nDyZ/Uya3i22nbpOhXdYR3gV/qDY6ht5yhGH0IRoKe30Lkhpd6gi+DtgH5DHSAQHKMICOIN64OwToIXCnV8jKIr0A9+QrpdzcyMNoxkdXgmtW6gN/A+4ZUfSS6yEROSFwfJIooiRAav4gExq6ZLWesELkC49FBYsFAwO1jmyC8AdzQqCAF4sKrgaYHiiQUE2Hyxi9kYIEQPRGSjUwHluGknke6oR5CIwYgEAMGFxffpIMegMcKFjm1nQAzK9hhlBEJDKCsISGRGV1jU22NMCUZD/WfF4BYcrO9nKgfPDIuGBhfnF1HPg0ay1TmwfMgz8+QgU0RR5oeinhljqx8MMRBurAHCCUIQC1DgT0bUI2T1KrK+EDsExbwwySyJBNzGG5T3BqWMeKbNdAyCfZemJMiOE8SyJkYHhYa+qyy9QCwZhVzCQ/jhTuoS5PyVmp1nLkYn8PJOjsE7fH4XGZnRBuB9e3+QsqgzEXYGKLrIjmCw62E4J3pIRwXaEVztsdztKgZ7nncHKR9Ik0qcooEOb3nEvUDAkZdhPALG2H+bYr8fkJEvlWeEHod3G3oZ7wOGzV7KzENMfUXHiK4WuSxqqQOEPsFwIGbEwNgaTA+io9wSQ39EAjrtyRi6Cx3tYDpGBcjk6p0YOdD18O5Fe/j6XYN+21VadrSpaJ0WCQyDPrUTGQChi24L8MRHQ/VWDwbU1b92kpUcbSEylisSsXQenmswPQBPU3RW9l3V5a4w5r5zWJuY+js3yRReeyMUVuovljulmwsVBGsTY3QYhzcogUlgWBhe2dI1tpkCGYzdASL/4cE6vcAmrWUQbQzdweoEIVZzZZxMsn2+PhyrA8LxMXUCd27q2CPrPjEYuwvEyCCoHvF1iJGDDd3lDQd0PloeToIF3R3OrWSQHglY+TCEMGS/M4LMYKgYc0ICD8g1q1rkdFKzLhx8B0JSqkyZAyrpOxKKIfgH8WjYX9cbnj3D6poxnoHo/Iu+aZTT+dSFHmtc/n6ueUzxxpCBXOwRsSP+kPQqDbZaLYMx3hCUQwgdctgmQRmuhNcbQ8pqTAZ0/aXLmmVArEkxPjFEgiGQyZ52nzE6GHNCAjGUwxI7WUgLY1M7G5ZgMMYr4O2Ino8fDYwBt3kn3yrIjKkD6HGQ7J3FwOCYWMO3DMZQMb6nO+wBqPPLdzZdDxHniMSG2xGR1BhvjjUGp6bSR8BbyxBX0mUwxhKwZne1/DkCEOfajTI2A2tCIdFXLO8NYr2Qhh5j3TzUxBhPgBo3KbmldnYMgs8RlInwAcR6DRYniIkX8NCzobxnMSUJCSgIIr9/MM0uupXocARkIUAnFsOHKx65CzDVEZH4W7t8sQmJFus9JMlphKNFSNDIsHYGst7uzMvEYKiAfGOmz14pRpl3ADKEAMBnq7piEg3kKkAabRDpH5cky2DNWMeBuIBw/weL441SWRclG6kdJopfrW/baWfCYMQCpnNfWmwXJl04OzRmUcFwjBVEi6xOSH//QlW3nMGJgNvBCAnS4v+vyTWqhOTmuSlircMrCT8jNqYkIUH+CCyyh+l7mMUDPYjsglDBYNFFVoMMRERmveiEZmqaD5AUKGjEvcAC3RqxTDcSLCGPBKYzq3EwYOSYRgxvC6YwYmwVHQVSMtuUTIQIhkTyMUwfxRQ4LMyGmANMRcTcckyvwmwOTH/EfHT8jQyXuAfKjanWSIaF5yjr9sZcRZYxuQG5xIJ6yE2D6Xd1ykrSSJoEOYVHEFPRobgxw0eddq3mTlHlG+1hjpLArUHmPwkfF17wMTy7AvKqTpfPofaCJFiQY8zCQCwN2gamMeIcTPuErCL1ul4SJL+ceYByoL0hqB3tBddErA0WwEPmylL6GzMLLMriX4hDg/yvd3gGzW3BmBpALqr7l2TIGUyYnguZg05VF5zDjKB8ZcV2xLpAz0cvFaBm5c6W2WjDOtil5ORAkj5M98UMovJuv4yDgSxjvS54HpuUdgGdXkRyDj0NMxS6F/lVMPUWnndMp0f2WOjrBdSmWhU5B+mP7mv8yuKmOBePgXi0RiX1wlTAlCQkiBSHJyRyGqCa0hzJq7CSJHKAnFcQzlCInCTRgBBOI2HC3Pir6Xi4sdEoIESYdQGljERwmG2BXBVI2gRhRmIrLN+NOfIQ0N/MT5VTMHvkkvUamUUVncb/lSTJpZ7VaYcgKWmmoNCT0J5RiEWhTOIzsgKQ1fCRsi65mNldi9JkEih0Eg29sdM7MyY3kEfmnEKb+N36tr41kSDZkAmTsqZGmkkrvXzIpomEgLGAnAzIyphEihWy+LsN7XI/VuZekmySnQEW+kMOGihnJKmCZYpOAHkL/rq9U5xG7QyeSHheQkqCK1i0OPdH8ppt8ppoF3Cfo+NA+ZECoEVZ9RseGST2Qyp/tCdMQYQlvCH2rGzGFAKyjcq1Vki+1JwXagJLDC/+cXG6HIbEGjDIu/NQaeeAa4CIgwBg0gWWg0BOHuRIwv795SrAAXFlTpKcTQRdDM8jpvqjX7hqepL467ZOOZvuTjJwX6FjkGAMuhceGBByLKGC/C7I9gwyBMMAsl7lCi/2+sOovublGqf4BfUV1b0+aeSCqDQOPlt90mFKEhKw123OgU5nkImLiuxSQJCZsIrYKdboUdeXiYRPWTcEQmuh62GRNRAStAvkaEHiOMSUYNE/zBuHsJ/yeb1sQL+bnybHKJGrANdBOn2wcrB1nCOvqdPK5DVoBGhqIB8gOSBCWCPkJ6ubZTAl7gc35N1b2qVl+T+OX5nSwLAhZCfW8B6sLriij/usVs70gWI8g/4udQ10S6PTh6KGxw0keaaypDm8GphpgbwJzx+YI6d5IqkU5P2fZKmibf3r4FzxHLUBJKzC+jGqixpeFyhq3BfEpMRmlJkfEfD7vrJgGDoOkJqbiVBh1sYj+2TJJIogM7AosbzCSBIuMSYfYNDBQxE91Ac9igzRazq80nuClWuRaTRW7iw1CzeyaoMsILcKCInM0kx6GX0BEtvB64i8VxeTMXnpsibpzUAysfNJvyP/iFXJEN4Z4THcR7kmPPIgJEhTiWH/dxTD9dYFA/uaN+u7ZTbalXWeXeawmoyYkoQECnBRsmnAfowxolNXx89hocFVnGIYmCIXa8dcThbmpcubiVxYxcERi9GpgGsOaXdxzUBox+JTUMJw8a1o73/8KbkJcoHAy5c3iZNzbWLflIELMMElD7e1muoXMQJw+VnH4SqijD0PiC7kFrl/ojMXq4vUuZVFJpFJFqmzK3r6kxd46G5fmC49LPDw5S3N7MuAqgItxOkLSIUL7x0syfDiXShDUHpSYl0THkJcs0C5ZjTQVlA+NWi2i+4BC3ejj4MLGf0B+UUcSALpw84I2YR3I4XkEpmB1QXlsEXLJIDzH9g7U5m6rxX3LM4YcAymN2OJJRB9mZVb0b24f65Z128ldgCJP++na17wdYPIMOvFnST30RhOXzOVMCUJCdxvf1mSIb5LBADuPq+yUBEybSLNLzwTSJELpY60vGp6dTVHCtbqAjsPp0wOilhT7CGkSC2PVSOhhJEkCDEkGI+HtakmhYsElDvScoPxq0vCh5Q1ZdSUw7g/0nwvpY4EHQYWU0OOiy7OacEQ4VTST5Q5xFUlSTJOCani4XWDMoa8dslssqbwomXJRplpGNPuoVPBDyBFIC6QxeZOvyTSseQb3pMkIiK4DtTxGfk2uSor9iN7NyzISJIOaxIyjDiRSIM23J52rASO5QrQMSAJF8qL1PUvVneTBTrOV2Rk7HFg/aCLi8Pr6mBCAjp3ePQgXnJhONLvWLsF3jgMiav5ULAEixoPguFGeOJACJIMA406SN0+ZBgihgTZi+EhRDxfR3NAxj1hmQBX1DowIBY+ec2QSI/4CbFPScpCj+gPsFRGdF+DVPJTGf0ICRYNxUhEvAqzpwDBvG51i5zKC9LgV5QuUvs+WeGQ43q3LUyTivOB0o6+lUox7IJhGYzR/6O8S84Q+P2CNCmASH8M0oJhFQypwBvSSxd+FQvmEWm5e0uH7CS8dFGkMsYQTJFVL12OKrmHRYvxyVvpmnBvb+7yyHvDFX5eoV0uivRspVOuIYTFmuBmRENCWmU0MKw9wAmIBodWKyb9WBZk6dW6btm5w50MhYqHric5Qzr6325oFZeS7LiVzh/DhUlklR1M7QBDL3BrH5BmIjnrkooeJNqvrAECmQZh+eW8VDk0g2NAPHAdBGdjkTwoDwwfglhj7FylESDZkGMMiWLqPK4lg1jp3NWdbnHj3FTZdtDO0A6RphzJuBC/hVlraBfIgcHSvWtoNJqQJqzSJjWLg4z/dFWrOKMgQcYd+RQ9/h+5vIBLTLPpxa9IJlEJiNkDGcfw+XcyzOIp0pmYXQZ+gDYAmYa8QRYBBKYemWWVK02DuCCtOnTx7ze2yTgSGW/iw4KEThlEizagEm0Ml37Y5JL3lsM0yjVfq3OJHxCBQp+BWJEnyx3iiqi+Bu0XfUL3LqbqT1b0ERK9Xu9PM+paWjyBrHgWaE8AcgNFOlhA360b2wfs+3tEnn91zYxfrmsbcNyPVzXHzG2Chck+H7AOjE/8ev2Oa2DmwU0xrokG9p+o1Ms3rm2Nce+Bq5NOZpBV3QvlO9TjsyzGxsqQmDWWZRoPCCprxMRaJwaW44r2/nLSE/D3yWHk+iyxxrDh2oarOVphIrgvGpHr8eAlxWoDABYRi8SbpLjfjFqgDJ7GlWO05Pl4hcWgH1G+dbvV6rQ6tC6XP2gb7TKNNyCg9KHtsSOc/xJjhXXE5KkTBW5QdOjy9oFyBQMSatys1fRNeAAQK/WLGLr32tU72hRms92+aWDfglQR163uf69Yfc3vY+ybzKD+0qvX6aRrqI+QGI1G7yy7cXOLp3fSE5Kxxs6SrDFGD3Psho0GvX7IKTEWpNvWfNsiDh3LMk0FTFXrbU9jUU7ampGcl52W2pDeLpqnAiEZS0CN93BunDFHtllXl5GaLBldHyGxWiw9Z6W0Pb28XXMQdajG+BWPwdg1wKpPt3ueM5lMQzabT8uzvfRml/fcqeAFZExsZJl1DSfOyH5jJOfOKMgtPbqx5u0nXOLa0S4XgzHaONLqea8ot6gS3/sICVzfZ87IfOHj9obj324PnTUVYkkYExMYH/9Osv6j781Nf0Kr1Q7ZXF+an7Hshw3b772r2XQHGT5TO5ydMW5h0Gp8Py8w3laSk7FtJOfD/f2jIvM9K92Bg9Z0evYZ7fIxGKOFmXbD5mvnpN5tMhqlYdkvqNVsNrl/M9t+o25jm//9bsNpvYGQNT7FZDBiw6jVeA5P1n/462L9DTarZWBigZ0AcVKXLCp82LmhKfmZVs2VHb5Q6liVk8EYCdJNuubz00JPnleS+g+dTjfiIOz87KyaP/mbr7xxfddD6/3mpb5gyDCa5WQwdgd6jca/wK5f+/vC0E/z0pJq+vZHH1iUmVZ5f5Lt0vfLm1//R4vmR6va3fv7g4KFeTcQ0mh0GhEKihBPEhgp9Frhm59kWnthiuexM+bkvmg1m0YU8JeYkND16/2n33zo1qr/PtNpvPLjpp5je/whHmsfIUIa/NPqtMHQ1J6vuJuwG7SOI7MsH1yc7Pn7ATOLvhxOsHYs4PzFBVmrXkyynPBCpfPSV1sDF2zq9C4erfJORYS04VEDTZBTYO8OZicaN56aEnjpohlJj6cnJ/aLsI+ZhwTj8qfOLXjl1LnilT1TxMmNp556amVOTs5fjj322GfjXRZGGIfOLvroUCE+inc5Jjq2b98+b+3a1RvPOussNlrGIZITEzuvXpR479VC3Bvvskx0PPvss4/rdDrH+eef//N4l2WyYkomRmMwGAwGgzG+wISEwWAwGAxG3MGEhMFgMBgMRtzBhITBYDAYDEbcwYSEwWAwGAxG3MGEhMFgMBgMRtzBhITBYDAYDEbcwYSEwWAwGAxG3MGEhMFgMBgMRtzBhITBYDAYDEbcwYSEwWAwGAxG3MGEhMFgMBgMRtzBhITBYDAYDEbcwYSEwWAwGAxG3MGEhMFgMBgMRtzBhGSM4Ha7LYFAQIfver1eSzC7XC4b/jaZTB7a54tvCRmMkSEYDGp7e3ut+O73++VnT0+PLRQKCY1GE7JYLD34jG8pGYzdh9frNfl8PgO+GwwGvU6nM6h6nP72GY1GT3xLOLnAhGQMQIpZs2nTph+Skj4ef9tstum075rVq1efScTEM2PGjNuysrJWxrucDMZIQGQ7YePGjX8nZZ1GhEQq51WrVr2CT7PZXLtkyZIfkeJmws2Y8CgrKzuuvb39h6S/daTHF5D+9pMen0mEO1BYWPh4fn7+G0y+Rw9MSMYAENCEhIRvqqurbyeFnYB9DodjEbaMjIz/kQVZHu8yMhgjhclk6nE6nTWdnZ3nk6LWYl9jY+PxUNKzZs26ickIY7IgOzv7661bt/6d9Hiuus/lck0jHV4zZ86cFUxGRhdMSMYIRUVFa6uqql7q6uq6hP7UYB8Jr58E/N7ExMSOOBePwRgxiHAEFixY8Levv/76e6So89T9JNfrcnJyXohn2RiM0URKSkpLWlra/c3NzX8g8i37SxDv3Nzcv9P+2niXb7KBCckYwWw2u2fOnHnfmjVrzgkEAtKtnZmZ+d/8/PzP4102BmN3kZWVVUPK+snW1tab4c6Gkk5PT3+Utrp4l43BGE2UlJS80NnZeaHH41mIv+12+yYi3i/Gu1yTEUxIxhDFxcXrKisrX21ra7uYrEp3RkbGfQkJCc54l4vBGA1Mnz79aafTeZbb7Z6blJS0urCw8PV4l4nBGG0Q+ahOTU19srGx8R7EBxIR/ycR8sp4l2syggnJGCM3N/dBl8t1nNVqXT9r1qz/xLs8DMZooaCgoLSqquppUtR3Etl+iJR2U7zLxGCMBUpKSl7u6en5PhES44wZM57n2JGxAROSMcbs2bNXtLW1/Z0U9pdarTYY7/IwGKMJItlPGQyGRQsXLnyGlTRjsiIrK6s+KSnpHpPJZE5JSWHiPUaISUiQZ2BzZc28Nzo0565udu5X6/IU9viCCXu6cJMFJluq2Vffc3VwxQqefTACJBi03XkJppp5KdZ1Z6aHnp1fXLQBgZW7c83qxqaid2u7Tv283X90nctT0OH2p41WeacSNDqt1pSQanG/tKoi3mWZqMiyGhoyrcaGI2yBD04syX49JyO9YbSu7fP5DV9uKT3kPy7Tdze2uRbXdLunBYJCN1rXn0rQWxKMIhTU+Det/G28yzIRoddqfPk2U/WcFOuG4629rx88b9bnRqPB2++Y6JOc3d32p1eVXv5Eb8pPa3v9hUJY8CbYl7I7QNepN3Id7gZKPWLup42hY//dqbvgivaK+743N/uxZLtt2LOV/H6//p1VG797T1fy77e7dHMDIZ1OaExSzBkjBGi2JTU13sWYqGgIiQLhEuKjHs1Jr3Y7vnddkef2o0py3ttdj2pza2vmHze23PKWy3JuhzdI78dK1pF1tIo9NYH5kha2zUeKGp+Y/nWzOPzfhoQLT3OUP3/dwuw7clKT6tXf+3WR8Iw8uGz79Q91J9/kDQaMe764DMbO0egO5N7ZoLu9UbTl3LrUcv1wPCUISHt/7ZaTftKU+HRPIMBahTGu4A+F9CtcmgOv3u577h+h6tO+M6vo05EOgzm6nEk3rah/4G237RzS7KNdVAZjt9DpC6Y81WH4Uf12d+Hf5+sutNtscrJHP0LydU3roY/1pFznDQaZjDDGLaC4n2sKXnFYWeP/jp2V9/ZQzytv7ii5uzPpjp6Aj8kIY9yiyxdM+m298a//yu4+Oi3J3jrc80G8X67q+v67HttZY1E+BmM0QExb858G1ynPGt2XX7VXwl9BvvsIidvtMT/eFLqm2x+0x7OQDMZQ0BMIJTzWor32sCLPh1gbaCjn/LvWed42Z2DuWJeNwdhdbHR4F7+9re707+8757HhnlvX3Jr/bEvo8mBIaMeibAzGaOKFDt2lJzU0vVaYm121g5B43Oa1nZ6l8SwYgzEcrOn07Ovxek1DJSTLGjsPCgm7ZqzLxWCMBr6pbjp4JISkqrGpqKHXlj8WZWIwRhtVLt/0htbOnH6EBMF+Te5A7s5OZDDGExy+YDLc00M9vtrpmSbM7ABkTAx09LhHFCjscLqSu/zWpNEuD4MxFugNhKxuj9eM732EBIrdFwwZ4lesqQm9RiN0WiGo7kWQsziMKfws33sUYIoGbZgvQr5ZvPcMAsGAjodr9ix0mrCs+4Myxi3exZmw4ImocYSFpPi+vTPEiTkJ4s9bOsSD2x0szIxJg7mJRvHMAdnCSF3j979pEqs6hzSyxmBMKICIXDszSVw/J0X8q6Zb3LS2TbgCPLNpJGBCshP8bn6qOKdwcBd/TY9fnPVlg+j2j0z44B1J1GsFjMgkg1ZoYEwyH2HsAeRa9OLhpZlihj220whi+HRFl/jz1o4Re+5AuM20kWgLq54NdkZ8cE6BTfxuweB5DwMk4Cd+Xi9qSZ+PBFDbSQYdfWqEneRcivpupW2cumBCshO0eQKi0hVOrppu0olpCQbpel7v8JKSDonG3oD8HCmcRGSuW9MqMunauI+Px2wYewh+krW6Xr8cLoRCLbEbRTIxh0a3XypmSGKHd/e06tpOrzjjiwZJuEu7OUkxIz5w+oJ9ejyB2MIcknXI9+Yur+gNBEUgFG4PI4WXzr13W4d4ra6b+gQ/YttGqeRTD0xIdoIHSx1yA84rtIt7l6SLFiIpZ35Rj2mnfcdlEKE4Iccq9k4xS4EHsfig0SXeqHOJ47Ks4phsq0gy6uT+NZ0e8WpNt2gjZQ9FfWa+TSxKNoq36Ni3612yUziX7gV3d9iqDIkql188VdnV11EwGLuLZpLjq1c2y+/w1D21f5aU03/XdotbN7YLVbwho/OTjHJYscRmoL81opNk9+Eyh2h2B8SFRXaxkOTXqNWSIg6IDxt7xP+aeuXQY7pJK64qSaLrC/HHLR1SfhfQtU7Ns4k8q17eF23iy9Ze8Topc5efpZsx+niPZBIbsDjZJN46JFf4SD5/tKJJbHHuIMo20rdHZFrE4bQlGnSIqxQrOtziyXKnbAPwtGSa9dQ2QpLgPFvllDINQn9YhkWcnGsTK9vd4vFyh/SWnFsI3W4SKcZwpv5mj18O6azp8LAeHwRMSEYBF09LFL+YkyKU+D0pbGuV8fJT8hL6DfucSUK9hIT0mlXN8rj9U82yI9jm9Ip3GgQpbJP47YI0qcQjcSgJ/GXLm+QwEYOxp4AhxT8tThf7pJr79sEC/BsR9TQi4j8oThTTbTuGfc4psIv/I6IDcg0FfzzJtkmnkQRGRwQEbeViOidSvE/PTxDziYDfvL5tDz4Zg9Ef30k3i0f3zZIBqipckpk7xQEk/1fM6D9x6chMqzhTGbKH1+VU0vUa0upPVGikkfp70uN2Q/+hylNyE8T3v20Sqzs4nioWmJCMIjY5vOLoT+pIEWukGw/4y7ZOcQtZnFDiV5FA/3JeitgvzSxSiTW37cQlXt7tE+d+3SA7hJcOypFM+5B0i3i+2rmnHofBUBDW0LeRHINYpBq1oskdkPEhlyxrEhVkLZqIjT97QLaU7UOIPL/X0LPTKz5P1uX1a1rFtbOSxM9mp4hT823i/u2dWBpgTzwQgzEoINsnfFYnh+wh4/D2vUkE+71Gl6jvDYhjiWQ/tDRDegbzLHqx1ekd9FoY9rxUthG/eGb/bLGAzjkjzyYNVh6hHwgmJKMIyBeEt9MXljR4TL5DJOKcQptkzFadVlqJIM0Y2tkZIQEQqL2diEmp0yf2T9fJ4RwGI16AAsUQS5NCGlIMOnFBoV0cnmWRhARxVqAuaqD2zoBJwGgrn7e4xZUzgtIjiIDARo4GZIwDQPf2BkJygyhjqPHyGYmiOMEgjFoEa2ulN2RXOhk9AZws9b1+sabDLUmMnMCwR55i4oEJyRjiqEyruH1RmhTKamLIvSIoQqHhr/wd4KnAjLhioPxBof56fqo4q8AmOr1B0eD2Cw+RFdswr4yg8JAQrKAZ4xYYRv/jXulyZloFGYiIH4ROjh5W3xUCrMZ3CSYkYwQ5c8FmEAaNRpS7fNK1XWDRicf2y4p30RiMYWKg5oUHZJYSO/J+g0v8en2buHluirgsapydwZjoyLWEvdMYhv/xyhYi3kHxBOnxQit3n6MNrtExAsjwV21u0UtCPIMU9xdH7VhaYqR5SxiM+GCgaQdr79OWXrEw2STOL7LLjcGYjNjc5ZNT5GfZjeLdw3asrrI7KR8YscGEZIhA4N4r1d0yODV6diKCWV+uccqAp0ggcOmUz+rE6fnhGBKgk87H/HeMKUKev2jtFR2+AFb3lH83eQLiFboWAqp6lDnyHzf3iho6fquTczkwRh9BgViOXtHuDchp6ZHiDavwv029oqzbJ7ZEBe/9aUuHWEfHH5ZpkePqkNUmt198RPKKWBPkf3i9ziVjpjCsg8GZFR0eYdY5xfL28CyDNtr/eq1LJgXs4vwNjDEGZPzV2m4ZvxSdL6SO9Df0OOS2NyLTanWPT5z3VaOcxotcVACGbTD1d5PSJjaQ/n6p2ilnz4Co9JLR+RrdB20CqSKAlR1uYanWiGXtbp72OwiYkAwR37a55RYLiL7GFgtIorbe0T7odR8pc/T7G9N/f7Kqpd8+zD5gMMYKCFZ9OEoOVUDx3ru1I+ZviBnB7ANssQBy/ct1rf32QWm/FDFTDEr9pqhjGIyxAtImXLe6JeZv6x2eAbpXRS0ZhPds7Rz0uu80uOSmooNIzS/WRsl+TbfcGIODCQmDwWAwGIy4gwkJg8FgMBiMuIMJCYPBYDAYjLhjyhMSvSY8pdG/k4hpTHE8MM0iA/jyrXo5rl7lGhhgqlOPc3g4QI8xLmAm4XXvIiVkllkn8i16sZrk++B0i1jZ7pEB1dFA4jMkhlrV4eacCoxxBWhxg3ZHhuzBjtkrxSQnFCCRH9K6YzJBLCyh41rcARk7wthzmLKEBAr4vEKbXPQO8JCGxWJJlTGIBkjL7QvTxFUrmuVaHNudPvFkxcAgQDQIrF/wk9XNMup6NIDZC7+cmyL+UdElqnkdG8YQoC72hQyqyAkpV9slmcXsAmeMKedYp+bsfLv44YomceeidHHRN43UDgYeh2yVP5yeJC5f3tRvccndwSy7QS62d/+2Thkky2AMB2mkv7EWEogyRBIJy95v6BHftg+cgIAs2dfOTBYvVXeLXKtOzLIZBw2ovnpGkvhfU8+oBqFeMT1RzpT8rKV31K452TAlCUmRVS/u2StDPFftFG9vd8gpilhbBl4SKHOrXkMMOrxqr5ozRE2FrS68hA+kfwdhwHmRuUUsdBCu56YWolqaOM8uUwZrRA8dC+WLa2IBMhAeTBVDZ2HR9b8mjlmYZBI5RKDwu9MXzhKIa+E8XMdF+8Pl1krmj+mVWDl1Z9YCY3ICcoCVeb9fnChu3dgmiTH25Zj1fTIXTu2ukbLpVlJj98m3ch3Ia6Iir246TiUgWmW/SQf5DMk2AmDND8guVkjtInnEbsgx2hKugnuD9NsNGnlNTKtEWm6ki19E8g3vC7yKkHk9nWdT0mCq99ApbQWdCuQfx7J0T23A+3fPXuliVYdH3Lm5Q8oOZMSsKGl8YrmOoCKTgE7xiEcmb7fqwqngIVGY8hsWdY2UX+hxr6JjsTtSZ6vtIlr3QmZJzMPXVPQ6rol8VHCco02irJDr6L4G97DI8oTbidpGpwqmJCE5q8AuWj0BudS6inZlXRmsOvqrealy2GUmMehnq7rEl60D2TZWMAUzhyLFejV/L3XInCIQWHhRMPccK0Bi6he+XzzNLodzkKcBnpQ7NnWITLNO3LYwVaxo90hhxLx1LNyEVVSxkN6D2ztlcjUIPFaSrOkxyWMWkwL/Hl0PS2cjG+wdm9rlcvIP7J0htnT5ZAP4oNEltnHekimHZFKg/zczSdy7tbPPSwd1Vk9yByV6Hsn+sTlWuZQBFsm7ZUPsKemZJr24iGQMGSoxpPNrZSXeAqtBLhIJuYfHDjIKef7LkgzpCocC/7qtVy6ed26BTRyVZRVrqS3BQ4McJ+cV2kUK3Rd5edRrZtP1Lyyyi9Jun/iwsUeWH0Ojvf6QzNtz37ZOMdtuEDdTu/ya2gPICDyGPibcUxqHZ1qlHD5DOlo1CPHZ7RdSxu4lo7OWZBTHQDe/EsPbAe5yJMkokp4tTjaSru8Vj5Z1ybw4J+cmSEMQwzfw4H1Dsgeyfw7JNbzkxaR7b9nQJknJfST/mDYMQxCZi+dSP1JC19yLrgmPyOPlXZJgYOHJFJNWvFXnkqTj5rn9+xrknLplfpogLiPqqOxfK+kmpoqkT0lCkkkCiqRl0QCZuJKULVYqhXAcmGYWP56ZLJa1DzwW1h4y+M2xC7lCKYgEhB468gkSPgjZFdOTxA+InLxe3y2XZT/rqwbJtG9dkCaFHQIM9vtQaacUZBAPXHO2PZzD4ZjsBElIIIzPVDplQjWU8edzUqQyX9HuFheQIr+kOEn8ZVuHdF8+Vt7al4iHMfVAelgkGnQy3ikaORaduKokSZz2RYNw+ALihjmp4mxSrrHGyUHQQWih2KGQ5xMJhmeipscn8zHA44HVS7EK9V7J4XH5329slwTmuQOyxQfUhpKpHEgUdZ+SRwcKuO+ayWYxj5Q2yAXuD2IDxX4oKey96LfLljcKiPHD+2TKdoj7NVM7e4CHdhgKYNBh8dHuqEyV0KMXFCZKwowVqtOJADxNsvrfpoErUMP5sIX0Krx+VqdGnJprk4QEIYXIrwNifQzpduhY5JT62awUce3qZrGJzrmEdDv2P17ukAvmPUxGKQi0RikEvNil3RpxCl0ThATek/eIrPyLjEro8b8SiYnua74g41eWl/T9p1NwaGdKEhKw6GJlHY5IwI0H7wQWCoOIt3uDUlDTjQMXxEPw309mJYs/b+0QGWY9Mdwd18NwC3Qm2PnCJKNcFRWCrwa6QrHOTjSQBdu/0wB7hlDeQ9fMJmZeZB1YRli5cHPDw4MyNvQGxAk5eulGZDAgZ55AUGaUbI4ipnBfQ8ZBRnBcAxEBBPk1Rh2H0ZKfkmynkNw/X+0UJxAxhhsZij+ojNPDjd1F14H1iUXHkKUYHgt14bH8qHU+ILe4JoaLXiBL9aScBDnEEx38DQ8LSLtL6WQ6iRjBC7ixa3RishiTB9DjuURKMHQT6S2DdwPrz1SR/oUuhkxCyhA3GA3su3/vDDLowkYhPHoq/MHwwo8w8BINGqljMcTS5gkPSYKEg0BbdJp+1ywg2YfHBMS9V5Jsq4gG2iH6laH0NVMJU5KQIKPeXYvSxd6kjGFJQjlD2LzSAvTLQLuPmoVUqiAPEEgwZrBaHAv5m5agl4odMxKmk/IvSehPHqCAZ5MFWNrtlx1DeBxfJzP44bqx3HAIzIICxjVBcAotBnlfKHiTdsdsIFwPxyKlMZT11i4vr4/DkECK9jfqXGS5JUpZbiSFp457uwLh2KU8UsJNJNcg5fBggFxAuqDIIZPwZEB23yULcdMgsgXlCU8MlDKs1L2TTVIxpxkxbq4RVS6/ODhtx/EY4pxtN4q36Jrw9LmUawaV9qRXGhfKC8sShgG8h/gcLBMsY2rjk+ZeOXwIEgHPA2Qb8SAQZAz/YfjdLGWSDEISNxAUxHTgEHxC5OBlgW5dRvoYOjV6siXaBfQ7+gEQcBCHItL96BNmkjxjWDQ6wBvDnUblmhgKUq8JkTcp5CWwk75mKmNKEhIo4d9uaBOXTU8UPcSKIcgJZK09Wu6Q7reb5qbI2QYppBiR2h3BSxhbPD7HKr5o6RXnFNqke+4E+vtPe6XLsXgIFwQPihZDNWDGsB5vXtcqhRizcu5enC5delin5j+NPZLUQEhVgcXY+3HZFrnUdTpds5KUuo9+BIG6hqzL7U6veLbSKf60pV1cQQ0R5YG35M7N7ZIo+RRGzxgEmslfPSCsGAKEov71/BS5Xgce2kky+Fh5lxzau4NkGx42dPhv1HXLTh/n7UME/SuS8yMyLXIc/MJpdrE01SzjPWQ7oePhufvFnBRSygbqEHrkOk4YhsG5IPmwIB+jNtQhvTA75BGB3O/SNRGXsi9dMxXXpHaFjgPtA7PTMIz6r5pued27F6URURIyYBFDk0tTzDudms+YesCw4jWrWkiP28VhmWbpwbMQEfhPU4+cUbZkYZqUyQSSyUfKOkUHHY94jhNzreKfFV3i8MywdwOrsUPfg6S0KbGE0OPfzbNJYl5iM8rlE6DT/0i69+qSJEkccO4fNnbIoZhID02pyytna95F+h5o84aHRP9Hcn0p9TkgKVgzB33NjVF9DWQcTsOpal72ERKdThdIMera6KWl7eyEyQCIDgKUvhlkbZrLlzcP2HezEoAHqGsWfB3j/O9+US8FFfeIjI5+mRTty1FBVetImV+6vKnvbyj2C75pEtHAeCI2FRhzjxVoe9qXDTGfZ7KCrJBh+fEzLIbmaiFKxqo84wUQu4dKY69N83a9S26RAEm+ZFlY7iLlKlpegSM/rpUEHCSiD6SMfxJjfZC/RayPg5aAoMJYgYU/jTr3bzHK/jkRJWxTCUa9bmAg0BBgs1i6rTqNiyz3hNEu03jDVjLSbljbFvO3a2OsS/MkEZEnK8LfL/52oMyruG5Ni/SkYCZl5LAivDLYonF6hO6FlzJWH4KA1Y+jzo113FUrB+6bzNBrNH6dTiuZYB8hMRqN3uk2/faV7ZOfkIw1eqfQNK14guR1m0FvGPJUojkpCRtXdoiDxrJMUwH9yAhjzDAnM2XTSM7LTE1pSm3XtvX0+ic9IRlLRMb9McYOmWZdY2piopzu10dIrBZLz4kpna+t7dDs4w+FpuRQDmPigKyXwPFJwddNJuOQrcgT8+z/fqvbew4pmaSxLBuDsbtINGgdx03Pemck507Pzynbr6np89peceFol4vBGG3saw18UZibXYXvfcRDq9UGL56W+OiHTc0nf9utOSQkhGbwSzAY8cV8m2Ht5dOTHsRQ41DPOaQg7eOza7Y/9aTDeg3LN2O8AmT7snzrQwvzUtaM5HyLydR7TXborhXd+oOqe/zFo1w8BmPUAO/IddOtd9isVjmW288TkmS3O+6c23vN9WW+R1a2ew6ITxEZjJ1jts246Q/TQtdkpiQODLjZCcwmk/v6vYtua9nam/t2Q/cZSFw6VmVkMEYCg1bjOy7d+MY1M+13Go2GEc91njutYNPdovlHP90WerLJHcgZzTIyGKOBdJOu+fZCcc2cnLSN6r4BQzPz8zLXvZzUfeyz29suf6FDd2mp0zeHh3AY8QYCn6Yl6Mu+m9D70pULsu5LsSfETjG6C6Ql2VsfWWo977UNznOf7bJcubrTs687ELKMdnkZjOEAQahLUszLL0nqefDEedlv6HW63Vq4Ch7vo6Znv/8fW+s+D1b13vCfTnFKlcs3fbTKy2CMFAVWfeXhNv8H185MvLswPblSo9H0BV3GJBp2m8155WLrfWd1dD7b5XQmsnt79/DO51+/nmFP+Md+ey16I95lmahAigxbgqU7PTW3dTjDNLGA889aNP2FY5zOdzs6AymBYHBqZyPaDdTU1c/c3ND67jFLF86KVCyM4UGn1QbSUuxtdlu2czTrMSczvf53yb4bftzRcberN8hBrruB9z//6g6dRus85jsH3BnvskxkJFjMrtSU5HaTcWD836CeDzDsjLTUFmxjW7zJj+RPP/GkW1ObSqYVlca7LIwwoPSTExM7scW7LBMZIZ/X2NZQJ2YWT9se77IwYgNDPzlZmVMrJ8AYIPmLz7t0OuFgPT524KEYBoPBYDAYcQcTEgaDwWAwGHEHExIGg8FgMBhxBxMSBoPBYDAYcQcTEgaDwWAwGHEHExIGg8FgMBhxBxMSBoPBYDAYcQcTEgaDwWAwGHEHExIGg8FgMBhxBxMSBoPBYDAYcQcTEgaDwWAwGHEHExIGg8FgMBhxBxMSBoPBYDAYcQcTEgaDwWAwGHEHE5IxQigU0mDDd40m/BEMBrXK3yFs8Swfg7E7UGVZlXGWbcZkRKQeJ+CT9fgYggnJGAACvGXLlkvcbvd++DslJaXQbDb/YO3atQfTn4H8/PxHMzIy1sa5mAzGiNDT02MvLS29JRAIJHg8nhTsW7Nmzd+hnA0GQ/ucOXNu0ev13niXk8HYXVRUVBzrcDhOo68a0tkHabVaL+nxv5GOD+Xk5LyRnZ39AZOS0QMTkjEABNTn89WRMP+A2LQJ+5qbm4/Elpqa+k1BQUFzvMvIYIwURDrcLS0tCR0dHT8UYatRlJeX/5DkPlhUVHQ3kxHGZIHJZCqtqqo6y+/3p6v7iKAsIgOzMTMz8wEmI6MLJiRjhOnTp3/V2Nj4fldX16nqPijstLS0R9LT0xviWTYGY3dAhMRH8v0QWYpnRirqhISEUrIYn45n2RiM0UReXl7Z9u3bn25ra/tpKBTSKrtDpMdfpN82x7VwkxBMSMYINpvNSQL71+7u7uNVL0lycvKK4uLiN+JdNgZjd0FyvJ4sx3+1trZeKcJekhDJ93Mk81vjXTYGYzRRVFT0hNPpPN3j8RTjbyLelSTnT7J3ZPTBhGQMMX/+/E9IYf+3paXlJK1W68vIyLg/MTGxI97lYjBGA/n5+X/v6ek5ibYCIuBlM2bM+CcracZkA5HvTdXV1c+RHv81/k5KSnqxoKBgQ7zLNRnBhGSMkZqa+keHw3GAxWLZTgTlpXiXh8EYLRABWU+K+lkiJL/EeHp6enpNvMvEYIwFSkpKnnC73ecEg0HjzJkzH2biPTZgQjLGmDNnztfErF/Ozs7+WKfT+eNdHgZjtAClTIr6yfLy8gPnzp37D1bSjMmKnJyc6tLS0kdsNpuRjMy6eJdnsiImIcG01ea2tsxP67uOXlXXtl9tl6vA5fXZ9nThJgvsGVlpvRs6FvtXfnhFvMsyEZFgNHTnJybULMhKXntUfvJ72Rnpjbvb+XV2dSUvr2094PO6jiPrHK6C9l5P2miVdypBqzfo7RnZmff964tX412WiYpsu7U+y2ZpPDzb/uHSaTnL7Dabc7SuHQgEdBX1DdM/a+o5amNTx6Kqzu7iQDCoG63rTyVYklIS/e1+nW/TR0fGuywTEUadzpuflFA9JyN54+FZ1g+n5+eWkZEeiDxmACGBAH+wbtuJ93Taf7/eIZYIQXrahG3PFXzSwU2bkficMd4FmcDw0FYtxOwOz8Ybsyp+c9ycwrcNer1vuJcB2d5QXrXw1nr9n7/q0BzuC6YYhD6FWOMYlHmqoJs2+4x58S7GhAbV4ePlmuuOa2t646ZZ7t/OzEnfsruX9Pl8hsdXl/3fYx3W62p79YVCZBC7zxiN0k5NBEU4fNvOdThiQGPXC5HbEaq9qnH7n3+wZPojZqPRrf48gJA88cXaq2/rSvmTJ+A179GCMhhDwFand/5VLs2L1wWabv354rzbh3v+N5u2HXRxpelth8+bPAbFYzBGDG8wZHyrQ3P2V2tch/8r4D9qfn72+pFeq7fXbfn1Z5vvebY36aqQ8Gt2fQaDsedQ3+vPv8VtvHfjBseSP89PutJkMsLk7E9I1tU2L/mrK+U3nkCIyQhj3AKK+9Ea788OttV9esCMvC+Gel5dW0f+bc3mPzl8geQxLB6DsVto8wQyflPq+es/krrPTLLbOod7PryAb1c0n/GSJ/nSkAgxGWGMSwRDQvtqTfeFB+ucH527qPgZDMP3ERKv12t8sllzTZs3xP4oxrhHpz+U8kSb/tq9C7zLjEbjkDKDvlvvOmN1V2C/sS4bg7G7+MoROPyjyuZjT19oe3m457Z2OjL+0aL7sTfo54F2xriGPxTSP9Vh+tHhrW0fZmekN/QRkl632/Jtu/vgkJIKmsEYz4CcftXmPtTj9ZqGSkg+res4MhBK4IA+xrgHrMdPyuqOOn3h9GETkvK6hunlLmvJWJSLwRhtbHf55tQ2deX3IyQIgKrp8RfFs2AMxnDQ4glkqStvDgUVXe4SYUwYyyIxGKOGJmdPzkjOa3d0pXX5zMmjXBwGY0zQ5QsmuXp7pWLuIyQYd/QGQ+ziY0xaePxBM890Ykx2+AMBPVzh8S4HgzFcTBihteg04tfzUsWCJKP489ZO8XlLb1zKQcUQPypJFifnJoj3Glzir9s6d3mOXqMRPyi2i1PzbOLV2m7xz4quMSlbgl4r7lmcLtJNOnHLxjaxweEV+6aaxW0L00S3PyguW9YkHL7ggPNm2gzi9kVpQkP/frG2RVS6Rp6/bf80s7h1QRrdJyAuX9YsuvwD78cYiPmJRnHj3BQMRYlrVrXAaohLOXItetnOSkgmbljbKtZ0enZ5DuTuL3ulixSjluSuXWx0jM1iv4ekW8T/zUwSHd6guHpls2xXV8xIpLaVKJ6tdIqHyxzCFxyYnub70+zinEK7WEvPcvO6thHfH/e7qiRRfG9aomzDj5d3xbwfY+fQkg49NdcmLqb3srzdLe7YHL/VNPYj/Yh25yI99fM1rfC67vKcpSkm8bPZKcIdCIofrWwRnlGUASt1MH8iHZ5N7fA2aktof3vT/f5AOrw3EBI/XN4s2rwDyzgDOpyOMVLlXk/ttrx72BkR+rBPKu6XLusEfUbnHtRFQyIkCCo5u8Auzi+yieVtHhKg9jEu1kDYSekdm50gMsw6SU6igRd509xUsSjZJFZ1uMWft3SInsAOQSmgF3wnvegEvUY8VtYl3iUyMRLoSCkdnmERS0hIvm0bGikyUdkOy7DKzvp/TT39fsui5/nd/DTZEXzQ6BKPkFJV5RsK/lf0TCV2o3ip2ileqN55vqQUg1acRETJSYJk0obrCGRjLnV2ZDGJLJOeiMLAzqI4wSAOy7SKapdPGLS7DiGy0bv4XpFd7EV18CKV6ePmHfUwS7kfGmkGEaOJQEjQ0dxDHSrewYPbO8WncSC7UCjHkHxvd3pFrFcwjd4RyojfouUXh59GZPciUvAgnL9Z3ybqekdGKrPonR2eaRFWesemGO0sFlIVuQNRMEYVHiTi53OgvEPiT9QmV3b0pRyQxgUUH8jXHZvaxRbnzokM2vbhJKcr2sPXgIwvTTHLukEnYaG/YxGEg6kMIOYNQ6wTkLFLiOSY0TlQmRvd4Q4A9aHebx/6fFbrnJCEpMCqJ1nKED3UNn9JBK3BvWcTSGtJYg9MN4uDSI9W9cS+N+T5+2TEQYVfSwS9PuLdQcZ+QTKFdxpL1w8H0FWHUDnWOzxiiOIuzzkqy0oGn0doRjniMsWoEydQW4L+VNvfdJK3+UkmqouQ7C9iEZJp9E6hwxvpXRqGUCbo8AtJh6Mf+1dNt/hvRL9UYjP26zM6Y/QZY4Uhe0jy6YEPSrMIp298NkCLTisFdCmxu4Wk6FDBX7WGFRfe6/lU+cdmW+XfX1CH825DPEu7A+hAiCOJg6iBglS9VtstmhQFOD3BKE7Lt8nO4a4RksC3qePqoHt4iM1v7x4dwUqk8lxA9TmbhDaaYL1Z76IGEyQFERRlrpGz9D0JKBWQK5CCl6rHp9MQRAEdK/p7i1YrPiMZ7lbIXiIRgmtmJosFyUbRTsoKRHCkhGS0sZVIBpQeOvdNXZ4+QoLnOJmsZMj9ynbPkCzTaLhIxmAcgciv6vCMGvkFIbliRpKoIvl9YLuD9oTLBovxD0ScQAZRZucEINuxAF15ABlHTtIL5qH2wnsYc+wGkg2LJNuXETm8c3OH7CABkE90pvAEk+jLjnukhGQi4IPGHuFa0SRIre6StA8VNup0zi+0i3nUV0aPNkC+HbLPCIlto9RnDBWjqn0h3McQc8RDwnJAo422NuHd+A4J2kJSnrDGq11+8SF1aq2kkPYlq2PfNJOwk5R56fy1HV7xRWuv/L4rJNE58CgAOB8WzrI2NwmxEPMSTbIDVZFp6v/Ys0j4jyPr1EovqZEU+TsN4fKogPI8p8AuComUoVGkmwdO1MCzHJSG8psF2g2YO160fxdFh+X4Pt0PxAMd/DzamtzhOvsOKWt0NnCBb+7ySkv+QLo+FLyFygoX3nJ6xm/JYhysitKIcc+m54Pq/IIImlqXc+xGcUKOVeip3GlG7YCpVbBe0QEm0294l1u7fOJ/zT2yvJGAZVxMCrybHvTxMkff/fDcX9L9VAsSzP67eQkilX6HYn+zziWqFesI9Xswkd25dE/1HaL+P6B6qR0nHSuQTc+AYTfUCaz6t4h81UZZeDlmvTgiyyKtUNT1uk5qA8290qpD25hOdYPvnaRdPqH9W4eoYCB7qvMB7es4ItcY/sOu80ixgIwAkMNk4444X/Q3R9N94V3Am9hIVh3kLfIt5ln08t1A1tA+TTFcNPBQnllgo7ajk0TgvfoeUUEd9q5aJojGl9QOjqbyoo3dTR0LrD+014PTw+mOQK5g9eEeGAqFpwrlxr6dyQBKCetxOskf3gfKA3HD00Mu5yhWHoypSOD54AWCFYjODB3z1ySrq6OGp5JIVn84I1G+K7jOQb5BWnE/uLEre3x97W4/MoTQgeJ6ZU6feI9Ikktp/JDpw8gKL6KyQkeiCcGlDvkZzx4WDBXAe4AyV1LdvkfvInIoEWICPYK6hM5Fu/6oqVd2mulUdyfmhD3aQDPJweskr7GGjGMBdaVK4dmFNvFslVO+X3ioQb5BRoBkum+kVxd/n0D3LUzQS131Mb2zdRFDiDhyL2oLR5E8ouZnJMTuAkukx9Iq20QNtfH3qZNu9+667PDsoD/BcPn7JAPoC3Ad6OxV1B9+RDoUZHBv6uvQ36CM8Ph9Q3p8ME4F+ZlN9Yy7f0X9Ya9y4CxFh0OfpMbQ4WHvj1l6XSBn20kuYaj3Rt3oeKovtJFektdHyx1SR6t9xpd0P3VICm3/FNITqHu867dJftXhfbQ5eL3Q16aawvqnXWm/1YN4wWJh1AgJCvvnvTLEUaSMISB4BDCsl2ucctwWyhlK+tF9MomMmPpcu1BYm6izReGvKkkSJ9MD4xecj0p8aHun+OOWXY8xooOGJwHnQA+gM92PXjxe9LUzk2RHAYsS4905Fp1UeHgvF5Ay//X8VJFG5cd9se+62X5x4deNYiOVCwL50N6ZUqHinFgygxd4717p8hj1uSBor9d1i1+sad1l2dHRQ1hmkhBAIWMIBB3DodTQIQuwAGGNQWFfNztZHJxh6asj1PGv17fKBhsL06jBXTsrWdbLP8oxxi6konhwaYasL1wnlk68kOrlkulJfZ0gzodr72drWvodh8aPrdkdEM9WdsnhH9wPz/8E7ifC47R/o/eebwl3qjJOgpTK9VQ3UMqQHfwOy169H8p0xXSfuPjbJrFtlKyC3QFI9P17Z8jOUn2Gn9Jz/mRVCymesJfoHOqwb56XSuRL3ycrn9O7/azFLRv8bxekyU+1zps9fnHV8mbxVZt7Z7eWSFMUMNzsRrr4pdMTpUKA4r2C3lNY7kNS/jKVY9Hp/57ueTaVS1XaOA4WEMbL0bmg0/nn/tnSAwNPkezQ6TPS4tyf3h/kpcBq6Hv2n8xMEdeRLLy3i6FPHAvZhLKSXlb6hHwX0bVAGHqosb6jXAOKHLFMcCcLpY4uKfaKK6mO0BajgfIelWkVlxFpeIZkD4RBSzsfoPcEgqXqoWhAoWJ4F8RObUdQsHgXH0Z4/NC5XU51CyBmBAQSpPL7ZOz8o8IhOztc4PrZKVJ3JSjtCe9hbUeiuHJFs1TGaG93L06X5VE7DbyHI6h937i2dVxa9z8h2f4xtVHov7BeDImrZnjFZcuaRTkRAzzrdXTMZSSHqh7BU2hFmyQk6HTvWpze157xiGeT0XX58iYyNnbdsUPe8f7haUV7OpdICYbPTs61ikOo3qBfcG10tgk6yEtA6p7H98uiTtEgiUtIeY77tnXKDUW5lN4d2qE67B+t+7D3hzOSxPVzUqQnWKP0E5fTc/7fyhZpGO4Mc+nePyV5KKU6ANEG+YWuQ1/0a+oH4Z36yawUcVhmfx1+68Y28eQgsYWF1FZwjQAdDTnHs0MOH9k3s58Oj7YjziMj+sqS/jr8DTIEr13V3O+446SxYBUd1Ac/TdcvonZ6Ld0Pcgy5ByGBnnhknyzZh6s6AMdgyA+GEXT3g9RP5lj0/XT4lTN84qJvmsSWXdSbilEjJHiJx2RbRBUxpl9QI0PnA+UMtxA8BbDKflySLJaScgMB+SNZSmDdCN4pI2sBTBIPD4YGpXtpcZL0aiBu5O+ljl3eH0JppppAxw0mDwH+/rREQfIsO3ZYW/+ljuNsKg8UHrwNsHYwFom/7yeB/Q/9fjW9QFhXt5DQXkqN5wjq/I+i54LFfuemdrGZBO2vSzIk+1QBbwxYMEjFrze0UVk0MggJcTfvUqfxeevOOxwQJTDw6bZkOUaOckEZwvpw01uFog03zpCsi9uoHKgvBFYdTwz5eKqjV2u6h/SeoIyvpHcFQX6l2kmKtUt2tr8iUhaJV2td4l2qjzZ67rOlYCfKcdMUQ3/vEMb+UW8Q3u4YLmx0jr8iOYAg435PU+cE4Yeyu2FuipQFdEpQ1ugUfkv1B4v4rkXp0vpFJw+3fDwNyWwzZDlF5NEzPF8ZjuU5hWTkhyQr6NggE3gGPCfq9+36bvHgdkdfBwRFgDgEEEd4VKCU0GkiFgHW5de7ICS4Bkgv8C0dm0r3gIUFpYZYBnT0n7b0SKWATh7WKoD3BjICsgi5hBa5ZUGqlO8VZK3h3V9FsgDvFSwveC8gewhK1ilaBR6vm+g9FVJZQWhfJDk7lNrEzfTcPydyjEDRXblJELhYQXphPhEAeBoxlHoklR2d3Td032plaA/HXENKv6rHR/KvI6KUReUxin1IZ8QiJLEAxQkyAlm6d2un9LDeSbKE+C0VULwYAm2gejHSY962MF0O9R5HbenjCI8u4hZAmvGJ+JhAaOCDgqxBlnsD4dgd1MdtVH9L6L1AtyBAGboGG+KDEAQJz+eNVH/wij5R3jWkwOE9CXgQriPd4ie5/cPGdilzkG3UIYw3BDriGdBJo0Zup2Ng+UNGQcDQVld3eMQlyxpljAgCtv+0OEO+G8QntHp2Lu/gCtB/0CkvU1u7sChReibRh0DXoi5frXVKXQkvA8gFvDi/JDldoAxBIK4EQ/g/IxmFToelj3aAAGiQhEfLHNLAOpPeATptFfA64L3hXUMX4bwb5qTK4X4QsB+uaN5JyYUkrbgH2naeNHzD/Qxk7rOWsIf5EdLhkD8QHRAmGKHwHr5QPTQdDhJ2tUKA/01k4DGSoQNSw+8mEm+QHoKxi77rdHrOH9E5R2ZZ5PmRQF8MIwXliTUMCZ2GQHcYP69Rnf2TSMvRdJ1ryCgBcVvn8EgvI/Qd2gHqDTwAQbaz6N2DA4BwDYV3jwohgQB9R1rtGvmSIRAoHFgyYjfgrYCAgtmiTA+TslaD8jYpigb6D4bR2fl2Kdhwj0MTQ+DgGdhVJDM8JBBKsG8EgELhHUkdKPYlknJ7oapLfNPmEWcVhmMyUOZFJLyobLgTHyYhAWkJbRfSvYqYAnSmB1DZ0QA+phcLJohStCLGIzF8X6htKGg8L8oKBY996HRwDzTiL3dBSPCiEDsCAobOAY0ddZBi0sog4jWd3r57oa/BPSCMEHogyaiV9xsK4CmCJwak74HtnWIrkSh0OpG1q1He6anUUEAYVescljnch66IcSgo60076SwwHDCbrAYot4eojmFhbHF4pZCC+cMqXtMRPh+DZBi3x9AS3PxoyDnS26AhJRc/RoLhEihSPAPqDBYiXO5nUWc/jco4g96DnWQsk8paQ53pnZs65DHRgHcFJAFejAS8SKpjnLOrwDj8rg7DbKP31Uh1gyEYKCUQf7SNx0jBXkIkfl6iRthIFuQwGMkRhuQwBv2BHKYJicV03k/gZaPfIHMwEOC9RMcIbyKsNVzPqhCSogTIS5h8z000ietnG6RCx9uA/CFYPHrYKhrwgr5R101lS5U6AO5wdCbA63Wufm58yApc9GhzKAGKoXp8dgWNJqxz0BZXkr55hto8ZDVWMCvqE2TNTHWVqQwrYJjBEPEyQCRL6T1XKu8y2gLF/Q5MDw9pLG/3iueJbIOUP07EDUGjBym/qYCrHJZiO9UH2jqC1bOG+Gx7CigtdBY6+VXU0TxFnQ88aZAv6MQDld/CQ9xaaUjBiIweysWFQAjOLzRK3Yy/tRHeu50BXi5493BJ6AKQUnjWQPwgryB2L1E/s39aeEgZ8gijEveDnniqIizLIIcY0sBwCYg72g7aYJcvIP5KZLWV9D3aQ+Szw5sLooxnxlAnhqxg9WuU54k1nBkJ6NMtXT7pEYQxjRAA6HIMldT2BuR10PRhwKPMhcpwIu6ZMMR4HvQR6OjhPUIQ/nrSp0l6zQAdDo2hDoGqBk14eEcnZ0GqQFDzznQ4+mIYOoFg2CAGAcGQ1HmFiVK/w3BergSao5tGGAa8Q9gQhpBD56M9xyL00RgVQgLVYVDcOCrDws17lO+Y2aJaCShTa4woYQTMPntAtlSgKveI9Xo0g+xPpQ4BhAYvaR114BBIsEIMJ6DCnyHLFhWL++PFo0OXFqxGro3SR3jA8MDMzcpYesRwfN9ij9HlwfMB6GAjx6txHZRpKJHYEAiUGdbrWdRpIcAVZX2LWK46zgw2f++SdNlgg5EpdYfRV0Pm0cFjGyw+GZ3dM/Qu0NhVPRNuK8MnBXifGAzDdVR5gNfHG0AcgYg5YwoYStzQngJeL/SQX3EhA/IZaLNrws+gOCWkYo5lZdwyP60vjilI9agbRng+OknVqkGH90a9i6y6ZEn0AZBlWGYgO7gsSDYcuerwIbwFuCfkSfVioTPBddFuUXT/IPWNNqB6euB2DikyEFKup4/iwYM9Fazbi6clyvYB9/MsIh6wqjDkgyuiDuF5hJcC191ZHe2s5tRnVodfYwEdG7yLYXd8SAwcfR86jMqpIBtqHYIEQcNBh+hjPAMOG8/xsEblfUPGVd2DuCHUFWJkjIpMAO3Sc9T/fHgUH90nS3qd1N9UN/9QgIBL6Ge/7ENCcsgPsgfPF4CZffCqY9qtXhPubBHEDV2D+7mUykX7RHvE08BYRBsNFxu6L3ZpbMoUFXgZYWSr8o5n12jELmfiwBMCnQ1CAm9EhzI8BUIC/Qcdfv/SDMXIGlyWd3YblEHqJDG4Dl+QZBJPkw6HLojU4ZGG/VDfh9p3R+o/GC7Q4TpjeIZrLIxEh48KIYHggBkiNgSMDB4KMCfEOgAgCIgRgfWImAYExoC9wnLKJeF10ItSLZv1tP+CrxvlkMgzB2YPuBeOmU+W2ofKMIYKkAK8IAgglNmTZPHBQwKmDbcWWF2ywdJ3DShaWLlQJGCcx9KxCERD2ZKI3CBuAW72zV1h6whekAOVmJRI4PWsIWsMz44x5RvWhd3yaLQIfoNFZI3Q2gj6scaICsdfcCPCElDdywh4fLchPKaNhoQ6giB/RPfBfHSw/weWZg6oIzBvuB5hJUYDZLCJCBqYK8ZT74qRA2BvehY0TARznfFFg0gzacVzJNyqGx9CqXpJ4MXAs+KZYg3ZwE0KD1SJ3SADvh6rcMjxT3he8P7LuiOs1/HDQfqhicqJoSt4Q06nZ4DViLrH2DbqEoFdBmXKKawpDElBacKChnVQT5YRFBQU2t/JokGuDuSLuag4ccC9cD7aRKd3h8UCRWtWY5Mw/EPXe4GU9E9nJ9NxAfHQdodUFmqwGpQ5FCi8URhKRKzC05V6Wb3o8HGlDdQmO8hKKqey411gyvCKGPKC4TM8Y7LRKH6zvpXadrckXBgeQhvC7/CSALDyZpI1uyrGdTDDC+5eeGfOKLDJsmAISJ1SC5mFJQvcTG0IbuEXSeYOy7IOuBYCHuHV6/D1N2xC9MyqpQfLF+8BY+aR0CntCNWJ4YCfrm6VrvhfzE3pOwbDM6hPdErwQMFrB89gdEBmSKljAMNRsN7XdLrFafkJYQ9DuzdmmxjPwHvBM+ETXsEDyVD8pq1XDplArtYos5m2dHnoGJusSwzJQL9i9lci6Q3E6EEv4MnP+6pBDre9QO9yYcrAvJuQF9UjocJM14HKhH5Hp4bOHP0F7gXvCNoWOkiv0qODwECfwpOVaSbikmsTy9rD+TvmKCkIMDEA+gzvEG0MMVh/294/FADPjOfDZeH5/SXJIYbL0awQV4F+ql8qCTJA4fGJDNrEr9DZ180OyGFVeGyg5zB0r1FkD2X/jAyIyxASQG3z0X2zBtQLQhDgefg2xnAuSGAD6YB5STpxSbFd/GFjfx2O9r042Sj7PngHTyMdju8w+K2K8QxdocomPLw70+EY8mlU+gzo8L9TP4XUFzlWvdQ/pbuR8yQawyYkqMB1xxf2/Q2mhARKfyvtlJY1mOyXRxdI6wuChml+CO6EIKDDXUjMDXEBIABgqXiBP1vVItaSQIPYQID+d2S+ZICROQ0wdbWaCA1cyFBqiHCHy1kFxpy1ircD5BeNALM+Cuh4jJVDjiAYqG5YLjZZNo9U7AjMunfvDHGrL016BTzBoHweuLUQD3AqkRQ81z/2z5Idcaqxv1n4tMLgj6Bn+vDwPDk9CyWXbr9PaqXXBQQHncFJuZgrnirH2aIB19uyNk/YShRyMbg+dzMaCRolEjyB6KGOo6fsoeOHNwiu9N8tSI05OwENDcFTCHbEeCy8SKp7XMUmJSYCrr53D8uVFjQsdHVaJTokxBwsIQsISeIuKEqUJOX73zQNuF9Nr0+6FRHUdz0p/StKkoSNyg3SCOIKwqa6E+O9ihJIxZ2L08RvF+zonDBj4vIVzbIRIjbg5vmp4v+oA0MHCmXzPD3DdmqQIAAgvpiJcseidBkjANSSnJ5PBBvvDgQVAZHokBOjYnGqpLIMyLpAfMnlRDgrlKECWOGJigsGhBvtBEq52KYXW6n+linuUkwXRxWCQEL5PUNyCS8KLNUPSC4BtBN0OM9Xh4PjIOez7Rni6KwE8dmRZnk+3rVbYfuwPJ+udMoYmt/R8yO2AG0JhiSGKG7f3C7lDsQCcUKIUanrDQ+7RQKXe430wA+orUE5wkD5dwRZgKJHuTLNFhl7hsDAlKh2VkqkBnKGmRuP75cpE+9FA96ij5t6ZXwNPC5ICpgcUdcB2Y68cjjlFFKuh2ZaZYcWCdQ76hUkA20eyvtrkvfrYwSo/4c6LHh/EGPwFB2LegNZAol7iOp2PANDsW8fmtvPlf4WvZNbNrTLWXAwLlHP0AWYOQFSft+2DvkuEYyOIQkQ7VcOzpF1BP37BrUBDP+h819IJBaBl1Abke8S90O7x+feJJv30Xu6ZNkO3WHXh70wIPjoI+DxQNwFOsV36L6Y4YRhfHziqqnKrA/EjeB+5xTZxNGkQ0EK0cnCC4cwAuhltBt4yH5O8oU4xWgPLfoE1MGJpKcf3idTzh5E7YB83rSuTV4Lw7HQgXimR+iYy6itRuZJQT+Da1yCGJuQhu7pkG0EWOvwShk8gOrti6MKBgwB4VzofAyTIiYE8VTRHAGyhWFB6Bkk6cP0eX2E9wblhYMA5AJDwnjHqg5XPRzdig5HvwWdjNhK9HsXx9Dh9XS/+0mH37tXhjSC0IbDw0uY6OCUwzfRbXWkGDIhgTCsIqUa3WeobjEw0CtXNMmsiIuSzVKYviZm/Q8STjWvBoIfL/ymUZxXaJMWPDqAFo9ftJNgQWFfu7JFKmu1g4KlhQ3KC9f7FQkEMjOCtFREsTK8SPV43M1DFX531OycbionYlm6lLwcUOyI3AZZOEPJ97Gs3UckJRwMhIYHRXsFMVmQlv1Sw9P6yruDssGp3gt4dcB24TLH9D+MS6OB4JlgaeE6yCKJKOkDyOIYLOIYQvIYCRoUBQTntVpXP6cBginRQGGlo6wynoXqD9NK0UDwLq6mzhM5FGQuCiojBGVtR5jsoSFgw/AVhB5DCBnm8KyPb9r8YjlZFWDepSTMP17ZLKeTZivWLywgTP1FfeAaiAfpVWYKYAgJgYlw64K0IEgPZYHo49n/RUqqkzrbi4i44NnwnCCCiCPyKG5hTI9F23QqnhfUL94lGuRYh4/g+ugMo6fDAVAkcMWj822hZ4cnQZIzeh68DwRQq67J3xDJxLgpvGxwW0PhorHikX67vk1acOgIoWxhVWF8+T/K1EDcHwmgECiIOo60xlEseBggexV9AaA+6SWLBMgP6kxOxw2F43GQ0fSy6XaZ0AulXNvZLeOlUL/4+0Nqk5Bd5HUoTjDKd4D3B4UGaxSPhsh7WMQXE5nKl+PpGil3mNqO+3joP8wowRTZsPs8dk4RuNmhDxBkjraxJsKTgvbys9Ut4kczk6RhA5Jc5QrJciKwEECngqh+xH6gDaHzB+HFM1crz4N3+CN65gvpPckEb9QW4cFCW/h3XdiAQaeK8oNEmHRhYon3jNk+XlLKLVQszJ768awkaQWjM9oo32OoTy5rIu6HmWcXUf3BIEEHA6v6aSL96jTiVkU3lXWH69OreFZ66V5DnQY7moC+xjuOTmIHoJOHjsHsn9X0flFH0GeftnhlNtxvFfKL+kY9I44KcRY2fdiQg7VcQ3J9zapmOfMIHSvuUuYKks72iw3SsxLWCbDWEaexPiqoFzoB8oFyqukX8G7eiZjRhTYFvQ2vjYz9E+Hp4yCpaKMwyjCkAx3zSk13n2cDs20gO4hthCdcvntqb5j5hWdHW0a26k9aEuSEgQxTONVDJT0XDGIA7/LnJKsgA9BP0V4F6DPoNwTYepTZiSpeoQ4c90R/k6B4zlvaScZb3FJ34v4/JtnDzLlci05623Ec6gN3UXU4dA/6vPNl3GFYh8ObgrLBI7tN6vAWqeNzFB2O5G+YeAGjFdd4pKxLkjQMLcHzjnuhHcLQhXwERJg8QmZfp76om+oH7Qp1guNA7nbo8PD1If+q4QpjRtVHQ5XyIRESvEoo5OcHmVqqAo32hrWDp2bGdRD8ogbARANC+q/awSONMZ3s54NMo32JXjS2nQEdwnc/r++3Dx05xigHmzYLoIO4fRPIzcDhDQDPhReNGSeDAcJzx06uoSIcDFQX8zcoP5AJbIMBDH9lZCQ4teHTv+yfBQ4NDFNV1emqsbCr36EEQOb+FEX6oKhP/6L//dBA0XG/1xD7ehhGOuer/ufAI4FtTwD1cdUuoueBaKUYDRBdBD6/GkOGMTIVHh6L/f6hiEDY/xOjztHAY1nn0YBH5JkoOYbM/2b94HIJ2cWsl692EniNssHjEe31iARyKawYpF1HXgczpu7YHPt3ePR2ltodnQq8ai9FZCz+G5Grv0XNwoNsYtbc/YMs64COB4T6oZ3M3gMBjyZ8ACxFbJFAp4klJAZbRiJabnA8iGK8gI41Wg9GA0ZgrLqNBDocdUptNDYpBHswoK1gJtqD2wdevyqGDomGS8kyGwnIMmZVfdE6eKblXpmOwSW3wQD5eI7a0XOD9AkgSkgAiW0wwON/cow6xrk7uzYAo/lHUfJxRpQOB6GQweo70dEIa/iwafDf8Y7v2doht0ig/qPvt6s+A20OnuBIYGkFbMPB+ExLyWAwGAwGY0qBCQmDwWAwGIy4gwkJg8FgMBiMuGPKE5LINLeDAYcgfwKCczHbAUGOsZZkxnEFynGjuSQ1gzFShPMH7FwWETQHuUaQLeQXGUxjrbFi1YXzoSAojsWbMZ6gJtHbWTZQHJOlLCGiU2ZxDraoI4LSMbGgKw5Bx1MZU5aQYLrXaXkJYl6SSQoqFtDCFM76GFNlMRvoqf2yZaDRxcV2UerE1NmBwViYBfHkflnip6tb5OyK0QDujZlLWLdEzdnAYOwKyPeDnAGYIiunjHd4ZER8rHVTkJkYKd1/uKJJ5pv53rdNfdlJI4FMlVh2AOuRjNb6K8hUiRw/L9d0j6tkeIyJAehHLO9xUIZZpprANF1MDUZQcjQwk+SORWni5epumSsFMz2RayQWfr8gVeZ7emmIS3IMBUgfgdlJq2Pk6WGEMSUJCabE/nlxupzChrUa4M1AMqrBsvcBam6zWJkXI6EZ5WQaYPJYqwbp55mQMIYCpL9GPpDbN7VLuYHliORHg0m3VrPDU7gz+R5GctkhA20RayQhp1D8l1BkTCRAN969KF3mefrz1g6Z0A45ohKi0wdHQJVvnWbnmnq09TiAxJoGjYcJyU4wJQkJ0vdCLh9BbhBFSyP5C4D561iQCcmAkP0VScQ2xvB2wMOC3ANYdAxZ/B5Q1hTAdS8rTupbefVWIjzINXBijlWmPgaDhxcG0+mgjH8zL1U0evyiyxdeyfHE3ARpNeKamE6HBG/oLJDMB/PEkRMC7B6rkOK6SFB1z9ZO6VrEgn6Y1gZXIxbbG+qCZIzJAyQdu3Fuini0rKtvKm9Q5jHxSQWOvA/ITQCPIBKx/YVkJxaQbwTrbeB67mBQ3Klk9M1VFs2E7H5N10c+BFwXi29Z9OF1Rd6s65YJw07LtcmcLJjOi8yw37b3ymRUWHsJabTvVq6JNvfb+WlykUIkWoK3BtmKfUo+CkyRBKG6aV6KXLQLHQ+m3rJHZWoDy40g18dF3zZKmQCQxRQb8qL8iuQF8og8KkjOieUVogHZ/W6eTWZ1RXZxpH3/d204qyp0MTL+ymSFJG+YyoxMq0goqeaPQdoDGLJImogcSpBrTPtHpnGs/YN2hHsjYzBIDvK2LKb9SKGBKcDXRfU1ICtYJBDtDM+ELLXIvzNVJH1KEpJim0EmAYuxHpRMgIaU8hBAZCK8ekay+MnqgfPpIUwQ8FSTVxIcpCte72iXk+GRgAlJapCSGsnF3m90iatKksVVK5pEmycos0fCKkTiKpB5WLIgEnDQfKKsmonkT1hRFqQCehfZTpFMCQ0FmQ2Rqe+/Tb3iyhmJ4ntFieLxCodctOwHy5r6kgkxph6Q1Ajj38jeGq3EkNDoxjkpMgcGckiARCAbZ6y1d5AoDHkWkDUTK5IuSgqn/W5XcnwgMdXDSzNl8i8oX2SevXFdq1ws7r69M4h8eKSCR/Kz+0h25eKZJLzha2rFT+maWG8D1i2Gh7AaKIaBsLLviTkJMrEW/r6fZB3LN6DjcPpCkuD7lGRNjKkN6HEsr9HpHSi/GI5H+vWbSCYR/3fP4gyxsn2gZwJ9wDLS1TASQUqgS0FIgG+IcD9CevZcIsiXkQF48/pWIgup0huDFbqvJSMRi4S+QgQEpPqibxr7iAoMRBBxDHMiISQISUiEk6Qh1xb6GvQD0X3N1SubpB5HduRPiYgMZw2gyYApSUhgeUWnfwewVguWvEfmUwgqssEiW16sFSrBzLEkN2I7IILqirgQHihtDAPBY4I1T9Z2hjPpqWsegIjsm2rqW3YdgIIFG8dS7xgDxd9ppoGvB+OkYM/IpOmXGR994tLpFqnkVUwlAWb0RygUzq6YYtCSku3/G7wdWBUamRNl9leSIaSOhuKLBCTpAmWJAqTK1ivLQCAY0K2sgQGyAA8LgmDnESGB9YhkVUg8jTTWxQkDZRceRViYSK4EccU1ewP9O5N8uRprsG94EuQaq3JHevuYjDAA6HHoPchbpC8YnThI8oYur5RTyJKBGO20GDKJFZ4xfI82ADlXs4SjHUGPQ9aQkBPxH8lyRW+dbDe49yaHRxqckUnvIJoyJGCvdPER9SMg0n1LY0RA7Ws+GdDX9C/jVJP1KUlI/ksK8ffETrGUcnOENwEpfcFw0xQBwuJaWLumLcbqxEjFDdcgMryeT0LzHWXlVRUgIBDeVk84nbpeWRUWCh3kBWm0o2VtH2LoWC8C17xICJmqPhoBZRE1dW2TdFN4ASVXDCuXMfWA2V9fknJFSmnER7kjNJq6RDzSqYNUIOAVFlr0Sr9YLh5p15FyG5kgT8pJGHAfrVxfRyfdypipACUcnrkQ9oREB4fDWsX6Mkg3/WFjr/hu7sBrAmh/VmWlbSh9pPeucA2eeZMxdQHDEUMe85NM/bJ/h5R1y2BIapXZNGGZHKjHi4kUYC0cLJg5226Uy3JEI5l0LYgNlsbA2m12g0Y00O2w7AaMzOglJ7CwIMjLUxVd0gt4coz2M5y+ZiphShKSz1p75UJMdy1OkysRQ9hgmUFZYgFAeCnSzVqxmIQJs2kQk4E4kkMyzHKMD8oa49qn5ieI6+ekyJgPWHoQS3gtMNRyZKZVLmyGdRHA0OGyu2evDOkqB5nA4ktwJUYCad9PonOx8BPYPMYjoZQ/p/JeMT1R/o7U4n/Z1iHjXOCCxMJpd23qEP4pxqQZsYG4it8SEbl1Qaq4g+R7W5dPKmWQYbiBnyB5voesNxBiuJlv2dAmiQkIc9jT4ZHeO6xqjTVBCkkOQaBxXXBekGyQHWmBkoWINS9wzv1LMsUN1BZg4WHGTIunP0GGMkdMy8XTEuV9MX0Y18Q6M2gziJHCWhgIwt3iNIvbF6XJsfU6t1981dYr9koeuFIsY2oDcX9y3ZcZieLoLIuUOazcvpxkF0YdFlf8BclkDhGHF6q6JEnB+jxHZJnFu/U94tCM8ArcTn9AHgcVqi4+h2FBrLmENcOwajRWBsZaLohdwrAN1t5CLMitG9r7LU4IoG25AgFxA/UjGiH6ZqRhmAerJicSa8cCkI/E6GumelxUX4+o1WqD1FE6unzBpHgWaE8A7xxDLVB+GCOH1GDoD+5hEID/W9kiVwP+l1SsYbcdxsexBDwsUKw3g/1Y60IuckcCKRe3I8H7/reNIpmULWQUjaJdYbwYi0RjgV8DViWOV9co6VHYBKaqYZGyyGuGF0EKB8ACcGdj+iYsAgRr4R4ddA8ZTEvlaZ9CDJusnoFztHeCZLO+vZoMmLEqz3gBZPi3pCjTSfEZdWFZgvXV4QvIoGgsqAdvBlbQhjy1kMwgTsotF4prlRYlrDe4orFwIlZ+lQuYkSxiVVZYdbgGvIs4Bw7r/1vVLC1JyGuTXIAxJJ6u2rGOBdoQVt1+N+qabmW18ES9VnpznL7wopiQdyhztDNYoIiJwbDQVFLYeq12WPKtwmIy9Zp0GjdZ8+bRLtN4A+I/sFgeZA+LPsLbB/0KYvF/K8My6VdkEsQXi5yCDGNBPcSfQMdiZW0MZwpF1wJYDBPB11jVFkPorcoCfghQxSq5Rtr/z8qw7kVbwlR4dVE59CO4JjyIaHsPK+sBYTFWxC7iVlios9I1sK8BsKpwrLiuyQpSN0HwD3zvIyRGo9FbYNVXbnR4F8evaHsOaqxHe4yJKFCU0a4zKG5VvdYp7mgpQFEBpPCGxJqei06itqe/foFy7T9kFPuaUNo1UeeGV1DecVwoFF6ReSoh36qr0uv0Q37oGUmW7eucYt+xLNN4AeStIUpGVNRGDaf0yV0UomVO3Rdrf5dvYBKp6JVsIe+xzkUH0hERmBhL3rHPHZg6ZBsoTkssG8l5aclJrSkd2vbGQCB3tMs0HhFL9gDIX7QMgtz2KvK/Q0+HBgTGxuoDABDuhij9HgiJfjoffUu0TANok9FDmbHuM1iytsmKVKOuNcmWIFlbHyGxWiw9h6f1fLC5y7uQ6m3widwMxjgAgs8PSzV8aDIZhzyp/9iClLff2eI+kzpG9v8zxjWMWo336Bm574/k3JKC3O1zWzrWUSc5JQgJY2JjgU27piAnqxrf+wiJTqcLXJ1vuOe/9cGTtrq18+NXPAZj1yiyGiquKTDerdcP3UNyXF7iWydVtb36b5f1grEsG4OxOwDZPi/f/tT+hfYvR3K+3Wp1/iy9/tY1XYZ9O7yBtNEuH4MxWkjQa7t/nq+/NSUxUSYl6hdVmZma0nzHLPc1v6zwP7TN6ZsbnyIyGDtHvkVf/fuCwE8LM9Mqh3OeLSGh+1d75d7cuMWd/02b+5CQGIN0jAzGbkCnEYH9kg1f3DTd8CuzyeTe9Rmxsc/M4mW/Czb94veVoT93eIOpo1lGBmM0kGTQdt6YJ369tCDjW3XfgFk23ynO/uQfutrTHqkV133o1J/S5PHn8BDO7sEogiIz5BFuoRMejVZ4qTo9XKXDAgKf0k265oNMno9/MtN215yctI0juU5Bekr1Ews6z3xii/PHb7is51X3+Iu9wZBxtMvLYAwHRq3GU5Sgrzg7wf30hXPSnkhPThqYjXEYgMf7vDnZTxWHSrf9rc104wqXOKDNE8gYrfJOBcBaMZHuNoqAMIWCwqQJijph4TxPuwnEjCwy+1f9uND4xwOLMj6L9HIPICQajSY0s6hg2115gWt+UFn9t5qmlsJAIDAwswtjyOh0dhcZNeIX3f6QtSekMdJm6A4Ic2qCpSzBbGxOMBmbkyyWWuFzV7c0NfUY9DqfyWB0Gww6r0Gn9wYD/oErnU0xQMHmpKfVzy2etslkHHrcSDQg3+kpKa3X75d42zmNzU+X1jTN9Hi9HFMyQrR2dReUezQP7pdpO1XsYlVhxuAwm4zuWYUFW/Oz8mrUGQe7C1znwPmzvlzY03vB1qqaOQ0trRxTgqk4Go3J5w8YfH6/EZvX5zflTytOcfsDuY4ed77T7c3tdnsyXW5Pjk0n3FZtyGvRhnwJWk1vVl7+DU5HZ0+8H2MiIysttXF2UcGWRFtCV/Rvg+Yh0et1/gUlxeuxjW3xJj+8Xq+xq6vr3w6HI8PpdKZi6+zszCrMycyn3zJ7e7tyehyNR7rd7uxk0iNGrbHTrNE0ktXUptcF2yuqq9rS0tKqkpKSGu12e3NqamptcnJytcFg8KKDxYb7qJ+MXQMEpzgvpxxbvMsykbF9+/Z5trVrxcmHHPNmvMvCiA2b1dK9dO6sFWLurHgXZcwQCoU00Z/d3d0ZpHezOjo68knf5pL+zSYdm1NQUJBOVl6qV/hSvEFvhtvnTndXbu0wmUzNRRZLnTXZ+rXPF2pqbe1qSUlJaSS922qz2TpI97bT3w2jRRgZAzElE6PtaWBKdXp6ei22XR1LBMVMjSevra2tkBpQFpGXTCIahdQglvj9/tSmpqbUyspKEJkU2h8wm82NFoullrZ6+t5QUVHRQA2ombYWOqediEtzYmJis3E3vAoMBoMRb4BkkD5Mw0Y6MpPIBghHeiAQyMjJycnr6enJI72Y3tvbmwfiQTqvg7Z22tqgJxMSElppfwcdt56IRR30Iow8MvCqmWSMDzAhGWegxuPOzMwswxa53+fzGajh6fEJjwuRE/xtp8aX097eXgxroLGxMYtIzIHU8BKooVpof0J5ebmN9lnpEj20ux7EhYhKHT7p90ar1dpJf3fiFLIA8NlpMBim/BARg8EYewSDQa3L5Uoi/ZVEn4n0mUyEI5n2p5E+yqN9eaTjsohE5MCDTOShl8hDr06nc+v1+m7SgS46vpOMs3oyvtZmZGTAQGsmvQYPso+O8+MT3mR8MvEY32BCMkGgNCofMf3IhT0aaNs2Y8aMTyOPpcab4PF4LNSQE+i7DX9Tw0yiRp5HRKWgo6Mju7a2dg415lxq4LA60Egx3BNqa2sL0f4uIikgLvVkRdQRSWkkAtRAZMlF9+9BGajR47MHQx97sh4YDMb4BkgGkQcr6R8rfVrwHZ+kLzKIYOSQDgLRyMZGeiqboA6zyFhF+l1D+zuJnGCIupZIxjoiHM30ewMRjW7oH+gefCc95BrO1H/G+AYTkkkIaqgubCkpKa07O05xgaYQYUnEJywTsiBSiPikUYOXLtDm5ub9SLFk+3y+DFIOPbBKlM3Z2traTfvbyDKB+7M+KSmpno5pxNARERUfFAUIC33K7xzjwmBMTEBXkFGiVzyzOvU7tf9M0hvZGGYmIpGD77Q/Kzc3106fNmWz034b6ZY2eC/IwKlNS0trIJ3xBekYDKUgPqMDXlra1454DSYZUxNMSKYwQBCgALCRlVK5s2Nh9ShjthkOhyMTGxGXTCI+mUR8ZhBp+U5tbS2CxrIwjmsymVoQJKaO39LxTXRMC5GXRtrgXoUiaoFi2kOPy2AwdgGlnWfRlkkkIxuBoPiknzKzCB6PJ5O2DPVTidFooTYOgwSGSCORjxVEWhpJLzQR0WhTYtoa2ZvK2BWYkDCGBIy9Eolowha5H5YTlJj6iQ2xLmT5QJHlkELLhfVEWz5ZPXNIKR3U1taW2tjYmEwKLYkITJISlNsAEkMkpZr21dL57YhqR3AuPhHbQt/b4vX8DMZEBTwa3d3dqUQy0hCjgU9s1KYzqD0jRiMXQaCIR6M2mUVtsYuMjU4iGtjaqc12uFyuNjpnJYwJMl7g3WjCkC48odANMG7wqX6P9zMzJiaYkDB2C1A+sSwfIhClGRkZpZH74Ob1er0mUnpm5dNEnxa6Ri4pu1xSltl1dXUF9P1wMsZspCCNpAiNRHJkIG9ra6uBFGGF1WptguuXiApyNtTQdbowlky/dShjzC66v3PP1QKDsWcBkoEgUCLudiVODJud2gq8Frn0G9pTLoJBqd1lpKWlgTggTYD8pN+9REK6qO3UUTtaSW0VMWON9BtIhpuMAw9m5tEnvrvZu8HYE2BCwthjwLgwNsS3RP20KfpYn89nhIJ1Op1JRExspEDtiWEU0v4s2pdZVVV1PBQv7TOS0vQ3NTW5SaH6SFn7amtrvampqeVETDBm3UyWXQ2RlhpS2C4oWgTGIfJeVbx7qAoYjEEBkhFJ2EHCqR2Y6acskHUEg1J7yKUth/alZ2ZmgqzLLRQKGTo7O/GJWIwG2uro9zVERt6n3xuJbHRRu3OCsCNWA985ToMx3sCEhDEuAbKAIZqhDNNgRhGSzbW3t+fAJU0kJTk9PT0tOzt7GinkQrIE9ykrK5tGRAbDRkEiIZ0YHoJbmv52lJeXd5AFWUnEphGu6JSUlFp4XzAFO9INrbql98TzMyYHMJQZY1hTpxCMHCTsUpJ25ep0ugxCKhGRVCIiydhIZpNJThEM2oCp+iTXyDe0gWS+CfFZGM5EQCjJbRuRjjaess+YyGBCwpjwIHLRS1sdKeu6XR2r5DrIbG1tLUTgHoJ0iZTkkFKfQx3Gwc3NzRnV1dUyoyORD4+SeE4mnQOJURLPITAXAXut+ASJMe3GQmiMiQ94NyBPCPZWA7+RjZnkIjM1NTUb8RnIo0FkIyMyGBQyRUSimfY102/ltH2pyJfcSMaa2JPBmCpgQsKYUoC7GltWVla/+BYl8ZwOAbmIdVES0GG4CBZsPixYJJ7TaDQLqRM5GNMYOzo6kHjOTh2QnS6BvAjI2VKPTyIxTUR68L1dmdLowCc2eH/i9PijAnrurI8//vi/1MEii7Cenkc8//zzMtiZnm/Dcccdd+JkGAaDHBB5xXT4FCTuUpJ2YVo8Aj9zkLSrp6cnF4m7SG7S6dldkdPi6fxuqiNMvS8j0vo5vBvwwpH89E2LV6bGy0/2vjGmOpiQMBhiR+K5qN1YcbUfcYHbPTLpE4aLkHguGJRLvCM4N6+9vT2fOqsDaV8WdULIRInETzL5E/2GfA59ieeoE6vHmD+RHySe60Z8DZI+IUh3vCZ9ok61NT8//62ampob1GRWVPZMBEMWFha+MJ7JCEgGEgZi+//27gOwyuruH/j3ruTe7L0TMggkTCmgOBAnDhQt7trSWn21tVv71tbxqnVW679aa1t3nbU4ilpFULQgshEIECBk79ybcTNucvf9n3NIIgEEblCf3PD90Mckz33GSSjcL+ec53fk76P8vRPhM1K0WRbqknU0BiaEpomAkCDI01TRQDlkZ7PZ5LCdXNukSWwV6enpK8XvmVVcQwYN+Xsne+sGCweOxN8/opGKgYQoCPJNaSAsHO7YgbLYsuDcQFlsEXrixEuyfot845OF5yb3F55LiYuLkyWxHWKTb2SOtra2XhFU2vqLzsnic02y8Jx4w5NPQrhlwTkZogY+fp3/wpY9RjKMyXWZ1MKEeXl/F23/vnhTH1xBVj6tMWbMmMUDX/f3OBnkOV9Xuwbu01+ky7TPEgtmscmqoAObDItyfZNEIUIcHymOi5Cb3W6PED+/VvF7KpdSaExJSanNzc1d19ra2iIfN+9fUkH2rHXKZRYYMoi+HgwkRF8TGRAGhmkOd2z/HISBwnNqDoJ440vOz8+XhebkYmEzGxsbM/oLUqXsU3iuXXxsEedZxb/2ZeG5RvGv+gbxsam/8Nxh59UciYqKitn19fULpkyZ8pB8w05OTq7NyMh4prKy8g6onKbzp6enPy7uq6oDizf5hPLy8p+Jtm47+eST3/oq2iBDh/i5pHd0dMhwkSrr3MjPxfeZLAJb8kDBLvHzSpQTQ+XPR84BkvN/RHubRBsbxDW2yDLkSUlJNtnTIzb50cbHWom0x0BCNALIN0S51Lnc9n9t4EmNgaXVZS+AeENWS6rLiZTiTTlbFp/LysrKEy9Pb2trS25qakoUb84JYosR//JvEG/KsnaLXAukVuyrF+fJuS1tA9U0ZU+ACBO2L2ufzWbLF/e4cd26dZdERUU9cMIJJzwnAsjzra2tl4prTRAhZXl2dvZSOSSyY8eOyxoaGu4WAWlsUVHRfeL0Lw0k8vFuuWKr3OSTUvKjCB1J4h6pok2yWFdG/+qtckKoXNJArd5qMpk6xPfTKo5tlRWAxdelcgVXWS1UbuJ7ahroyRh4QooFu4hGNgYSohFu/zdTGV7EG3O5CAEHFJ6Tb/ADRecGPhf7c+UaIw6HI6WxsTFTBJgTRZiIlK+Jry0+n08Ob4SLIGMSb+Q1/aulykega8Vl60UYsIvXZsimyMXQxLEPrVy58mIRNu5MSkp6UVz7PnG9R61W69jKyspfi/tcKIdCZJtEYJiyefPm2XLISoSGDL1enyrnaMjhKvlRfB0n7iMLbzll0S75saenp09WBpWhQrxWmpGR0SACSot4Xc6zcfWv3DpYQ4aTQYlGBwYSolFi4KkNOaFyv5f27H+sLL4lJ3bKoCCLzskJnomJiZHi3ILe3t4UudXU1MwWgSIvPj5e5ASDrPipzvX7/eEiNJy+bdu2iampqR+lpaW9J8LNzOrq6mvEeWP2vY/NZjtdhImclpYWgxxCkVV2xdcNImQsl6FHDjXJqrr9FXZ7Bwp3cQiF6NjDQEI0TLIXoqS6ccqq0ppT6lo7su09fXFat+krZgcMm5MNEbG5pr6kZN0XL/gCQFO3O2VJfcOVdkNEvcXdMn9GfADxYeIvlX2O6/Hq/es7oxpsHR1tPo9bhAw5v9WeJP6T9A1/L1+LlLhoa0ZCTOOpxTkrJ+Rmln7dE3iJRjMGEqJh2FlRXXzzyuZHlpXZ5vr88tFX+fRrlNbN+lpEtfbglrEeJEcD3V5gW5cea9r12NqpR58fehHNcuRfJa80AJOi/ZiV4Mf0uACijQEEfO7YBz63zgPCsXcbZZrlSFonwtbtcH97fOO/H5hb+Lu89JQqrZtFFIoYSIiC9NG6zWctXNr0YpPDm651W74JssOjpleP5TYdNnfp4PDq4D3I9FCXH9gkQsoWEViiRD6bGuvHzDg/wvUB8ZruwBNGEbfPH7ZoZ9vlK+p75rx/xYTzp43N3qx1m4hCDQMJURDqrW1Zd6zruOdYCSNSjxd4oc4AzxE+oyKHczrFOSvb9FjboYfnGJlyGghA19zlSrtl2Z4/vBwf9d2UxHir1m0iCiUMJERBeHFb88KNTY4ZWrfjmyRzyJGGkf25j5Ewsq+P6xxnvLezft41p8Q/r3VbiEIJAwlREJaUtpzn9Qf454a+lJxT9P7mqvOvOWUyAwlREPgXK1EQdtu6x/cvS0P0pWrbunO0bgNRqGEgIQpCr9sfsfeJGiIi+ioxkBDRV6IwMRL3zC2CNxDAr97dDpuDJTmI6MgxkBDRAS4sTsUVUzNRZuvBo6sq0eU6/AK3MzLjcPGkdOh0wDPravDfqrZvoKVENFowkBDRASamRuPqaVn4rLodf1tbDbgOf86SMit+urgEXn8Aq2sPu8AxEdEQDCREdMQmiaAyPSsOYQY9Gjr7sKKqDQ733mVnwox6uEUYkVN+www6eMTuzBgzZmbHISEiDHqdToWVTfV2bG/pgp9r7xLRPhhIiOiIXDczB7efOQ7ZcRYVLhxuLz6tasd1b2xBQ5cT+fERePTCSSqQfFxuU+Hj9jPGYeGMbJhNBrXfHwiIIOPEr9/bgUUljVp/S0Q0gjCQENFhTUyJxh8vmAijXo/HV1ViTW2HChtnFybj7rPH47o3tx5wjk6EljizCRYRRl7f2oCXtzTgxlm5mDsuBb+ZMxZLdlnR7T783BQiOjYwkBDRIcmejbnjkhErwsX6ug78fnkZ2vs8MIjA8cxlx2FeUSrCjfpDXqOivRfvlDbD7/djTn4iEiPCkBwZxkBCRIMYSIjokGQgsRj31l7pcnrR59k7Z6RDhBI5LBNtNg6+fjh9Hj+OwWryRHQEGEiISA2rzMyKw+cNdhj0OkxJj1H7W7qd6pHfstYetaZNYVIkpmfGYZM47tzxKYgMM6CksQudLo+23wARhTwGEiLCWQVJ+Mfl01DX5VQ9IuOSI+Hy+vHmtiY4fX4s2W3FJ+WtOK0gEf+8ejpsPW4UpUSpHpPHV1fKlW6JiI4KAwkRobnHheUVNpyQk6B6SHZb9xZEe2N7kwobDo8P17y+GTfNLsAFxalIjQ7H2poOPLGmCot3NKtruEVwaRKBRpwOnzgpIDY516RR7Oty7u1BkSFHHtPqcKvhHiKiAQwkRIQN9XZc/sqmQx5Ta+/DL9/drraD+byxExP/3ydD9t34donaBqyqacfYh5YffYOJaNRhICEiIiLNMZAQERGR5hhIiIiISHMMJERERKQ5BhKiUU5WRF0wKR1vbW+CzeHWujmKrF9yiWjTG9ua0NtfaI2Ijm0MJESjmCzvfv3xY3DjiXnoc/vw4uZ6rZukRIUZ8aMTcvH+LisDCREpDCREo5jsiZAL4P1xZbmqH/L6tib0eX1IiQrHz0/KQ4zZqMLB5gY7Hl9TjcLESPx4Vi4MBp1ab+ZfWxrw36o23H5GIcxGgzjXj1dFqJE1Rn4izpecIlDI9W1kKXm5Ts2VUzPh8vkRG27CwyvKUdfZh5+cmIv0GIu4hl4cuxseXwAmcY97zykSrzvxzPoaZMeacYO4t6xn0tzlwp9WVagKsreJe+vEL1kLRR5X2d6r8U+ViL4ODCREo9hpIiDYHC5VvGyuCCYnZMdhhQgYvzg5T1Vk/dV/duDbE9Jw7rgU9fUD5xXj3dIWvLylHrfMGasqtq6t68CcvERc+MJ6tPW6Rcgx4vWrZ+BfWxvw1o4m3Du3CFeJELKkzIo7zhyHm8U1d7R046UrvoW06HCU2rrxz62NMOp1uPOscep+i0QwkoXRbl+6C63imjHhRjxywUT8/qMyrBP3e/C8Cbh8SgZWVrVjSloMFry0UZWwD4DF1IhGKwYSolFK9kbML07DK5sbUGPvVYXLLpmcjtW1HZgpgslD/62Ab59qqWEGvXrzv+X9Uvi/pIqq3B1pMmBqRgzqu5yYkhGLopRoRIlAIVf0Nen12NLUpcLHgBkZcaonRBZFk70uGbGWA64rVxJOjQrHxgY7etw+rBHHzhfBZUOdfZ97M4wQjWYMJESj1AQRFE7MTUC3x4c5BUniTd+IM8VH2SvhcPkQZxn6x1+We3d6/SpcHIocUmlzuPHAx2UqhAyYlROvhmHCRRDaN+jICbVyMb57xfF3nDFODf0c7JrylAiTUa2PI4eUqjt61dAPER0bGEiIRik5d2R5uQ2/6i/1nmAxYfHC43Hm2GQ8vb4GN5yQC6Nej/PGJ8Mv3vflEMrf11Tj5tkF+KDMqoZ7lpXZDriuXS6o91kV7j57PJbI10WQ+HCPVQ3TrK7uwD1nF2G3rQf5iRHqeNnrcd3MHCyclo2CxEhUtjnQ4/aipKlL7Zc9Nxvr7XhhU50a0pGfnyKC1G0iOPm43g3RMYOBhCgIMWZDl6MPkVq340jIeSPd4o1/gAwS17+1FQ63Dx19bjXZNN4Shs4+r+odkf65tQHr6jvUEEq3OL7T6VHn/XjxNvVRkkMnz4vwIOeWyONkkJFPyvR6/Hh4ZTnyRBBJEteVvTDyXiur21RPipwn8uS6GtR09Kr9t4rAUZwSpRbckz0zf1pViSnpMWoi60flpaqHxGI04Jf/2aECTCjR63Xs2iEKEgMJURDyE6Mrm+q707Vux5HY3doz5GsZJHbZ9u67eEKa6imR++TKvXd9uFvtl5NTx6dGqTkgMmTISasenx+bGzuHXEsOsWxt6hqyT84PueGEMYgTH5PE9klFKzY12tUTNVv2O1+SE2RXVbcP2Sd7R/Ylnwgq2e8+oSAnMaZW6zYQhRoGEqIgzJuQ9t7axp5ZPn/gwIkQIWRxabPa9vfXddXDvqYMGHcvLzuKVo0Oep3Of87kMUu1bgdRqGEgIQrCD6emPLdkW+15nza5ZmvdFhqZzi1K+uCiydlva90OolDDQEIUhNSkxJb7zi687fol1U/tsvUUad0eGjl0OgQKEiIrHjw167eJ8XFtWreHKNQwkBAF6ZQJeasWRxguvmtF7V0f1TrOau/1JPgDAb3W7SJtGPQ6X7zF1HF+XuT7vztt7APjs9J2a90molDEQEIUJJ1OFxifN2b3i1mZC7fuqZq6taxyqsvtCde6XVpwenxxnfrIq4tTo59tb7U5tW6PFizm8L5p4ws2T8zP3mEymTxat4coVDGQEA2TyWT0zJhQuFFuWrdFK1VVVYUlJSW3nHn8rBeioqI4TEFEw8ZAQkRERJpjICEiIiLNMZAQ0bDp9Xq/TqfzuN1uWSeeQzZENGwMJEQ0bAaDwSc2p8fjOXAJXyKiIDCQEBERkeYYSIiIiEhzDCRENGx6vd4nNrfH4zFr3RYiCm0MJEQ0bHIOiQgkrv5JrUREw8ZAQkRERJpjICEiIiLNMZAQ0bDJOiRi8wjH5Fo+RPTVYSAhoqB4vV5jeXn5XLvdnu1wOLJcLldyVVXVz8S+eQaDwTNp0qTns7KyyrVuJxGFFgYSIgqK7BVpbW0tbmlpeTAQCAz8HXKJ/I/FYilJTEy8X8PmEVGIYiAhoqDIQDJt2rSnP/nkk/9xOp3jB/YbDIa+9PT0B0UocWjZPiIKTQwkRBS0yMjIruzs7PsqKyv/7vP51CO/IoisHjt27BKt20ZEoYmBhIiGJT8//12bzfZ9u91+pk6n86akpDwdExNj17pdRBSaGEiIaFiio6PtmZmZj3d1dZ0qPt+Ym5u7XOs2EVHoYiAhomHLzs7+uL29/T8Wi+WVhISEVq3bQ0Shi4GE6Ch4PB7Trur6orpmW3ZzW0daIBDQad2mb5o+PGK732pN2FzzwbVat+WbFhsV2ZkQG90+MT97R2pSYovW7SEKZQwkRMMgg8eaHeUn3r+i8tZNHZje7fJGO9y+SK3bpQ231g3QTLjR6zIbe5zp5qamH06Of+7aU4qfTYiLbde6XUShiIGEKEiyMNgLH6z6/m2bXfe19LhStW4Pacfl9YfLrdOJ2Fs/s92/zOqb++L8CQvTk+KbtG4bUahhICEK0qY9tdMZRmh/Xn/A+NHutrPuWrL1rkcvm/VLi9ncp3WbiEIJAwlRELodvdG/XdX4IMMIfZnnd/ZcM29X3Xvzjyt8R+u2EIUSBhKiIGwvr55U2uyYoHU7aOTy+Pymf2+o+DYDCVFwGEiIgtBobc3odHpitW4HjWxlzR3jtG4DUahhICEKQndvX7ScxKh1O2hk8/r8/LuVKEj8Q0NERESaYyAhClGyAtup+YkoSIhEuFGv9jm9fjR1OfFxhQ1uX0DtM+h0uGJqBmLNpgOu0eP2YlFJo3x8dch+o16HeUWpyIgxf+n9qzt68eEeG8YnR2FGVhwsJoNqk8cfgK3HhVXV7WjrPbBGiVm0VV47OSoca2rasbWpa/A1vWjr+UUpyIq1YEtjJ9bVdSDSZMRVx2WK78ePd0ub0d7nGTx+RmYcZmbHobLdgY/KW+HzB4L5ERLRCMJAQhSiZGi466zxmJ2XCIN+b4FY+Ybc5/Fhs3gz/837pVhb26Fe+/3cIhQkHli3rd7eh/d2WUUgGRocwgx63DQ7XwSepC+9/zsiHKysbMPCb2XhplPHqvZI/kBABZzK9l48+MkevLy5fsh5s3MT8fcFU5EUGYbXtjTg2je2oFe0WZKX+PlJeTh7XAr+IM7dUG9HQoQJj86fpNr0qrjWTf/ZMRh0ZHi5W3xvb21rxArRFgYSotDFQEIUsnSqZ0T2Kry0qQ6viDf38UmR+Pkp+Sqk3CPeqBe8tGGw98MtPj68ohwrq9sGr+D0+NHt8h5wZXnOr98rRbwIAzrx6/rjc7BgcgbWiYBzz/IyePx+2HrccPn8KijIMLK2ph33frwHMeFG/EK0QfZcPCaCxIdlNrQ4XHtbLALHj2blqpDhEefOK07FcekxWC2uezjyHrKnRJ7307e3qd4gIho9GEiIQlxA/Cpvc6jhk2VlVvgCATx+0RSMTYxEdqxFvSbJ/XJ4ZJkICIcjj5W9E5IMPOeMS1afy6GYj8R9ZBAZeG2AzeEefK2524U3F84UgSYMU0XgWFa+956TUqJxWkEirCLMrKhoxRUiYHx7UjrW1HUgcASdG0a9HtfMzMFOaw8e+6wymB8TEY1wDCREo0hefATOHJuseiIcbi86nV/MtzCJN/MF4s2/MHnv0I0c3Vi626qGd75K8WaTGkqJMBngFzeR4USSPRzf+1Y24iwm/Ke0Gbcv3YVvT07HxRPT8cz6Wuxu7TnkdXvdPjWH5MKJabjz7PHY0+r4SttNRNpiICEKcbKX4pbTCvHTk/MRZtAhOtyINocbf1ldhcYuJ0yGvRNejeK1K4/LxJXIVF97RViQx7V0O/Ha1TNQlBKt9ru8Pvxs8TYsFm/+wThnfArqb5ur5oHEmPcOyTy9rgbbrXsnraZFh+PyKRlq6OgpEUBq7L0ot/WgIClKhKikwwYS2YHy7IYabGnqxAPnTcDD8yZgR3PXIc8hotDBQEI0CtgcLjUXpFiECjnn464Pd+G5jXXYdxREzgu5c9ku9TSKJId6au196skYOQF1gHya5WDzSg6nR5wjn3Y5LiNWTaR9+fMG3LJkJwbmmZ43LgU58RFqOEiGCTkZNSsuQs2DuXpalggpNYe9h3yCRwatk3ISMG9CKsbEW4JuJxGNTAwkRCFOPtXy3IZaPCu2Fy6fhjMLk/GjWXn4oMw2OH9k4DgZPDY12A+4xg8WbT7qdnxW3Y7vvvY5Hji3GD86MRcXTkhTT9Es3WNTE13lo75yKKmzz4PIMKPY9g4rRYYZMCE1GlPSYlByBD0ePW4ffvHuduQmRmCyOIeIRgcGEqJRoqnbhd99sBPvZ8RiYlo07jxzHK57c+tgL4kculk4PRuzxsQPniMnkj6zvga7bIceLjlSshfm/z7creqjTBJh4bH5kzH9zyswUQSOOQVJKhQteGHD4JM+iRFh+OzGU9QE3LnjkrG9pfuI7lPV0Ys7lu7CC1dMO2h9FSIKPQwkRKOILCb2+KpK3HVOES6dkoGPK1rV48CSnFR6QbFcpPiLhYrlcMpHZdavLJBIskbI7z8swzOXTcX4lCjcI9qiE/eRk1lLGruwuemLSbQdfW7VZllc7ZJJGfj72sMP2wx4d2cLnllXg5vnjP3K2k5E2mEgIQpRXr8fl768Uc3B6OjzqN4HGTD++GkFXtqytxiZHB6Rk0tPe3I1TAbdQa8z8BTMl5HXlfVFHl9dpZ50cfv8Q167R7z25/1ee3tnM9b+qUOFILlf+vOaKlW0TVaH/eJ84CeLt6meHTnJtsvlxcJFm1XVV9l2WehMTsyd+Mgn/W11Drn33cvL8MTaajjEPVw+1iUhCmUMJEQhSg7FyDfr/cmqp1X7TFKV6jv7jupe7b1utR3pazKY1NmP7J6yR2XfEvP7ByQZVGSZ+oORk2+HMwGXiEYeBhIiIiLSHAMJERERaY6BhIiIiDTHQEI0ysk6H5NSY7C9pUtN/hwJ5IJ8k1Kjsa2lW026JSJiICEaxWQhsgUT03H/ucX4nze3qGJpI0G8xYTH50/CRS9uQOuXTJYlomMLAwnRKGYxGvDdaVlqUbpLJ2dgqQgk8ukcs1GP88enYnZ+ouqh+Li8VYQVq1oH58qpGZiQGqPWtFm0tRGl1m5cMikd0zLj1LGvbK5XT+18f3qOKt2+tbELL26uU0XWMmPMuGZGDhIjw2DtceGlTXXodHpx3fE5qmx8ZZtjsER8mGjDvecUoa7Tqda8kdf+8Um5qliaXAlY1hmJEu25YkqGKonfJ9rz7PpaVRSNiEYfBhKiUUyWY5e9JE+sqcaf50/CtzJisamxE9fOzMGJOfH44RtbML84DZeKwCEDiSz73tLtwm/e24H/nTMWpxckisDQh5+dlIcLX1iP9l6Pqnvy5IKp2GPrwR9XlONRcV1ZE2XZHpva/9c1VfhwTyteumIa1idH4ZPKVrwogkmPx4dnLpmqapHIsCEf55Ur/soeErky8L++Mx2vb2vEU2tr8MTFk1XAkWHoO8dlYsFLG1X9kkDg8N8zEYUmBhKiUcqk1+OKqRl4dUuDWklXlmWXlVpLxMcLRQh5dFUl3L4v3uHDDXqcNTYJ80Xw8PoP/s4vF8aLCjNgdl4C1td14OTcRNj7vJiTnwRrjxuxZqMaFtLvU4MtJ9aiFtKT9VEKEiNR23FgfZIEiwmFSZEqqMgib8vENRZMTkfFii/W4vmyNhHR6MBAQjRK5SdE4LSCJMSYTZiaEYtc8fXZhcn448oKVQHVqB9auVW+3cv3fL3u4BVdB8hjZDho6naq9XNe+LxODc9kRJtVb8x+l8X3pmWj2+nBTe+V4renjYXZaDjwmv33N/TfW7ZNrovDHhGiYwcDCdEoddKYeOy29uDaN7aor9Ojw/HBD2dhmggnS3ZbceXUTJQ0deGEnHgYRACQ1VWX77Hh6uMy8fymOnXcutqOA67b6fLi/Z0t6smdjfV1KkTIku5dTi/aHG4136S81YHMWLM63u7yYFJaNHLiLKokvAxD8l6yuuvU9BhsEW2Q526os+PqaZn4ULThLBGc/ra2ekiZeiIa3RhIiIJgMho9Br3bJ95UD/xn/ghjFeHgoRXlg1/bxNe3L9sFbyCgJpbWdPTiqmlZMIlA4e/vivjtBzuxQASKSyZn9D+OG1CPCv+1f70YSe6/delOXDQxHVeK8OLy+PHqlnq09Lhww1sluEIEndSocHj7h4Oe3VALu9OjFvuTx3xW3a6GZX757g5cLO41NikKb2xrxI2LS3DVcVm4oDhNrZuzsqpNPY3zjDjf6R0ZjysT0deHgYQoCMnxsbbIMJdD/Is+Ruu2HM57u1qGfC2HWeQcDemcwmQUJkepoZQzCxLx++Vlar/s3YgVIUD2YqRFh2NRSZOa+/Hi5/VDrtUjwol82mZfMjxcLoKMUwSWwsRIVLY7sKa2Q53/0n7nS3vaHHh4n8AkPb1+6Gq/Mri82r9acShJjY1sOfxRRLQvBhKiIBTl5ezKjOlu6HJ2j/hAcigb6u2o6uhT8z3eLm0eXNBuWbkNsWaT+lwGDjk35EjJRe7+La4lC7F9Ut6Klh6nCiPHGp0OgTlFWSu0bgdRqGEgIQpCVmpS/TXjLc/f1ua4z+Pzm7Ruz3C193nUtj8ZTPZfbfdIyR6YuqNcVXg0mJIeU3LRxPS3tW4HUahhICEKgl6v9183u/iZVa07T3l3l/XCQACHfiSFjinhRr3r3lMzby/IzqjQui1EoYaBhChI8bGxHa9eMfU797299rYndvb9JBTmk9DXb3pW7Kb7T8u69exJ+R/qdDo+sEwUJAYSomGItFgcv7909v9dWdv82jsbds7fWWct1rpNWnHow8fLj5F+126t26KFKEtYzxlTCj8+c+KY5UkJ8a1at4coVDGQEA2T0Wj0TsnPKpGb1m3R0qJFix6RHy+//OqbtW4LEYUuBhIiOlpmr9fLIQoiOioMJEQ0bCKIGPPy8iy1tbU2rdtCRKGNgYSIjoZ8yshoMBiG96wwEVE/BhIiGrZAIKATm8gjBq/WbSGi0MZAQkTDJodsxBZhNpu7tW4LEYU2BhIiGjbZQwJZLZ11N4joKDGQENGw+f1+vdjChF6t20JEoY2BhIiGTYQRg8/nCxeBhIvYENFRYSAhomEbGLKRa/xo3RYiCm0MJEQ0bD6fT/aQRISHh3NSKxEdFQYSIhq2/sd+9YJP67YQUWhjICGioMhHfbdt23aGw+GIE5/HuN3uRPH5hJ07d3bIYJKenr47JibGrnU7iSi0MJAQUVDkI759fX2zbTbbzbIomt/vNzmdzrusVqvXbDbvycjIOFvrNhJR6GEgIaKgGAwGnwgdr4kA8iOfz5ck98l5JCKcuFJTU5+Jjo7u0LqNRBR6GEiIKGi5ubk7qqqq/t3W1nYd9q5ng7i4uLVjxox5S+OmEVGIYiAhomFJSUl51uFwzHc6nal6vd6TnZ39UHx8vFXrdhFRaGIgIaJhKSoq2tje3r5YBJIbzGbzG5mZmSu0bhMRhS4GEiIaFjmXJCsr6/nOzs6Li4uLH4yIiHBo3SYiCl0MJERHwdHbG2nv7IpzOl1mj9dj0ro93zSv1+fOLCh60CU+7tpTXqR1e75JsjqtxWzui4qM7ImLjbFzgUGio8NAQjQMshbHR1vKznqypP2GrTbnVFuPO7nH7Y3Sul0a+pPWDfimmQx6T0pUmDU3PqL68qzAoh+cNu0fMdFRXVq3iyhUMZAQBamtvT3x9nc33/vUzt7r/YGAXuv2kDY8Pr+podOZKbfPqnHyP+s+v+rP5xT8fGZB5gat20YUihhIiILg8XhM93yw7Q6GEdrf2hr7rB+8XfaPTxZaTk9JSuDTRkRBYiAhCsKSnXXnvVjWu5BhhA6mtKV7wsOrK//3/vNibjWZjB6t20MUShhIiILwWon1yo4+T7zW7aCR653dXfN/Mq3lidzszGqt20IUShhIiIKwqa5jutZtoJGtqqM3r91uT2AgIQoOAwlREOQERsCgdTNoBJOTXX0+P/9PQhQkBhIiIiLSHAMJEcFs1GNsUiR0e9fJG6Lb5UV1Ry8SI8KQEWNGr8eLirbeIccUinPNRgMauvrQ3utBnNmElKhwhBv3zv2VFcOcHh+au53ocfu+iW+JiEIMAwkRYWxiJDb89FSYTQeONLy/swXz/rEOl03OwF8unqxCxWUvb8Ta2g4MlCb913dmYGpGDG58qwRPrq/BVVMzcd+5xYizmKATGccfCKDN4cbGejueWF2FpXts8PpZ2JSIvsBAQkSDHG4vnttQh46+L55Y3dPaM+SYzFgL/r1wJi54fj02NtgPep0IEWxiLUbYxXUeFwHEYtLj9PwknFeUirMKk/G//9mBx8R+IqIBDCRENKjH5cNjqypQ0d57yONSo8149rLjcNWrm1Bq7f7S49r73Ljzw12qlyQm3IQHzy3G9bPG4FenFuCj8lbsOMS5RHRsYSAhokFhBj2Oz4lHVpxFfe31BVDS3KXmkQyQQy8NXU5MTovG/ecW4ZrXtxz2uoEA0On04Ml11fjOtCwkR4ajKCWKgYSIBjGQENGg+AgTXr3qi1IrMnyc8+wabGroHNwnh3O+99rneGvhTJxflIpbTy+E/sC5sAfVKq7n8vpgsZiQFBH2VTefiEIYAwkRDZI9IY+uqlTBQXKK8FDX6RxyTED8Km9z4Jb3S/HUJVNx06kF6HZ6D3a5A1hMBhgNevj8AXS7j+wcIjo2MJAQ0aBetw8vbKw97BwS6a0dTciKteCPF0xErMWknqQ5FDkc9LOT8xBrNqKxy4mtjV1fVbOJaBRgICGiQbJuyDnjU9Dc7Rrc1+fxYWVV2wHHyvzxnAgvx2fHqXkhBxMZZsSCSemIFh8vmZyOueNS4PEF8My6Guy0cf4IEX2BgYSIBsm6IU9cPGXIvlp7H8548rODHi+HeH67ZCfOLkxGYuQXc0I8Pj+cHj9So8Px5vdmqt4T2ftS2e7AX1dX4/lNtWAZEiLaFwMJEaG+04kfvrEFhoPMTnWIIGHtcePjChu+v2gzekQIcYvAMaCusw9XvrpJVXFdV9eh9r2zqwXVIshEm43qkV85Z6Td4cbnjZ2w9c9PISLaFwMJEcHu9OCfWxoOeUx3qxdlrY6DvvZxReuQr2WpebkRER0pBhIiIiLSHAMJERERaY6BhIiIiDTHQEI0ypkMOvVEi28EPdYyMHl2JLWJiLTFQEI0ikWFGfDBtSdiTU07blmy87DFy74pvz4lHwGdDg+tKNe6KUQ0QjCQEI1iZ41NhtvrxwnZ8chPiFAl36X06HAcL/bJUu4tPS6sq+1Ar8eHAnHMcZmxMOr1qLP3Yl2dXR07IysOZqNBPTmzsd6OgsRITE2PUY8Ef1bdrp7SMep1mJwWg/HJUfD6Ayht6VYrAU9IicaktGj4RBj6tLINVocbenHslPRYXDk1E5832FW7JqXGoDg1GvY+Dz6talPtGZsYIa4Zqwq27bL1oKSpk/VLiEYpBhKiUcoiAsS8olT8dU2VKlw2rygFj31WhQRLGB4+f6KqvioDwz1nj8ePF29Dl8uLv317Cv6+rkbVGrn/nGJc+MJ6LJiQhkIRMl7Z0oAuETyKxOePz5+Mp9fXYKYIKhcVp+H6f2/FueNS8IPp2XhsdSVOGZOIU3MT8PN3t0MngkhDpxOzcuJx0Txx7FtbVfs6+tyoEgFH3vfEnATcceY4PLqqQnwejzl5Cbh16S5cOyMHbl8A75dZ4RDHMYsQjV4MJESjlAwOuQkR+HCPTc3VuHZmjggRtThvfDL0+r1l3/Wyapn4n+zduE68vr7OjsU7mpEWFa56JeRMj/D+XpS1tR2qyJkMKrts3fi0uh3l7Q7847JpiDeb8KNZY/CUuP6nVe3IiDYjN96izk+LMeNCEWpkGXlZZl5eVyaLOnuf6pmRbbjt9EIs2W3F0jKbqnXy5ndn4qEVFTCLe5e3davjiGh0YyAhGqXmT0hFSmQ4bj1zHJIiwjAlIxan5CaoYNDn8athlTDDF5VZY0WokMHjUPNMZESRi+PlJUTiO9MyB9ezkefI4R/Zs7Ived8nLp6Mq1/7XFzbjY+umyWuMLQarAw50eFG1fsi7yyHmOS+ODP/eiI6lvBPPNEoFG8xYXZeIn76dgnW1tlFkAAePK8YFxan4h+b6tTcDdmDIteciTAZ1byMD8usuOnUArwgXs9PjFC9JvuT80Bkj8s1Myx4+fN6NIsAE2HUo9vtw7paOy4oSsWq6jY1x0SeLns/DGLz+oaGHIfHJ0JNxN5ript/UtGGC0WAenN7E6ZnxqG2o0+VnieiYwcDCVEQxJu0Fz6tW3F4mTFmrKntwJbGLhU6pNe2NuJ738pCSXM3HllZgZ+cmIe2XjcGOkmWV7QiM9aC284oRLfTi4GOkso2B4wG/eC139tlRZzZhN+dXqjWtFlT3Y7XRZD406oKXDdzDB46fyJiw43qvtZeFx78bzlumJULj9+Pd0pb4BL73xDH//ykPDxywUS8u6MZr29rRGSYAfecU6Qmyt783g51LzkxVq6VQ0SjHwMJURAyY80Nne3uWK3bcTjbxRv59mW7huyTC9/JTfae9Hl8eGp9DWbnJqDU2oPGLqcaXpGTTNfX23H55Aw16bXP68ebIjDsS4aQ5zfVqW1f6VFm/LeyVfV+3HXWeLxR0qhCzbMba9W2L3n/336wc8i+v66tPuD7eHpD7QH7RjqLydBnMhk9WreDKNQwkBAFYXp2/KbS9pYJWrfjaMiQEBdhQl5ihHrC5Tfvl6rHdsOjwtWKvXIopaS5C0vLrIO9K0dEB4xLjlJDPX9ZXaUeBz4WiZ9fVUJc7LH5zRMdBQYSoiBcMznp+SXlHee1OtxJWrdluGT4eGt70wH75YTWlzfXD/u6MsTI7Vh3ab7ljYzUlEat20EUahhIiIIwZ2Leil9Wtz5652rr3T5/wKB1e2hkOXFM/Jqbz57yiNFo9B7+aCLaFwMJURD0er3/p6dN/IsBAd+jWzp/2dLjStW6TaQ9s1HvnFsYv+yBOTm/i4mMYDcR0TAwkBAFKTY6qvOWC074w6kFlStf2tr8vf+WNZ3W5/ZZtG4XffN0OgQmZSRsv3xSyqKLvjX27ZioSIYRomFiICEaBp1OFzhpQsFquWndFiKi0eD/A/U/kmYIW8P8AAAAAElFTkSuQmCC" + } + }, + "cell_type": "markdown", + "id": "c917b085", + "metadata": {}, + "source": [ + "Let us now define the Workflow for Watermark embedding. Here we use the same tasks as the [quickstart](https://github.com/psfoley/openfl/blob/experimental-workflow-interface/openfl-tutorials/experimental/MNIST.ipynb), and define following additional steps for Watermarking:\n", + "- PRE-TRAIN (watermark_retrain): At the start (once), initial model is trained on Watermark dataset for a specified number of epochs.\n", + "- RE-TRAIN (watermark_pretrain): Every training round, Aggregated model is retrained on Watermark dataset until a desired acc threshold is reached or max number of retrain rounds are expired.\n", + "\n", + "Notice that both the PRE-TRAIN and RE-TRAIN tasks are defined as Aggregator processing tasks.\n", + "\n", + "![image.png](attachment:image.png)\\\n", + "\n", + "
Workflow for Watermarking" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52c4a752", + "metadata": {}, + "outputs": [], + "source": [ + "class AggregatorValCollaboratorGPUWatermarking(FLSpec):\n", + " \"\"\"\n", + " This Flow demonstrates Watermarking on a Deep Learning Model in Federated Learning\n", + " Ref: WAFFLE: Watermarking in Federated Learning (https://arxiv.org/abs/2008.07298)\n", + " \"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " model=None,\n", + " optimizer=None,\n", + " watermark_pretrain_optimizer=None,\n", + " watermark_retrain_optimizer=None,\n", + " round_number=0,\n", + " **kwargs,\n", + " ):\n", + " super().__init__(**kwargs)\n", + "\n", + " if model is not None:\n", + " self.model = model\n", + " self.optimizer = optimizer\n", + " self.watermark_pretrain_optimizer = watermark_pretrain_optimizer\n", + " self.watermark_retrain_optimizer = watermark_retrain_optimizer\n", + " else:\n", + " self.model = Net()\n", + " self.optimizer = optim.SGD(\n", + " self.model.parameters(), lr=learning_rate, momentum=momentum\n", + " )\n", + " self.watermark_pretrain_optimizer = optim.SGD(\n", + " self.model.parameters(),\n", + " lr=watermark_pretrain_learning_rate,\n", + " momentum=watermark_pretrain_momentum,\n", + " weight_decay=watermark_pretrain_weight_decay,\n", + " )\n", + " self.watermark_retrain_optimizer = optim.SGD(\n", + " self.model.parameters(), lr=watermark_retrain_learning_rate\n", + " )\n", + " self.round_number = round_number\n", + "\n", + " @aggregator\n", + " def start(self):\n", + " \"\"\"\n", + " This is the start of the Flow.\n", + " \"\"\"\n", + " self.private = 10\n", + " self.current_round = 0\n", + " print(f\": Start of flow ... \")\n", + " self.collaborators = self.runtime.collaborators\n", + "\n", + " # Randomly select a fraction of actual collaborator every round\n", + " fraction = 0.5\n", + " if int(fraction * len(self.collaborators)) < 1:\n", + " raise Exception(\n", + " f\"Cannot run training with {fraction*100}% selected collaborators out of {len(self.collaborators)} Collaborators. Atleast one collaborator is required to run the training\"\n", + " )\n", + " self.subset_collaborators = random.sample(\n", + " self.collaborators, int(fraction * (len(self.collaborators)))\n", + " )\n", + "\n", + " self.next(self.watermark_pretrain)\n", + "\n", + " @aggregator\n", + " def watermark_pretrain(self):\n", + " \"\"\"\n", + " Pre-Train the Model before starting Federated Learning.\n", + " \"\"\"\n", + " if not self.watermark_pretraining_completed:\n", + "\n", + " print(\": Performing Watermark Pre-training\")\n", + "\n", + " for i in range(self.pretrain_epochs):\n", + "\n", + " watermark_pretrain_loss = train_model(\n", + " self.model,\n", + " self.watermark_pretrain_optimizer,\n", + " self.watermark_data_loader,\n", + " \":\",\n", + " i,\n", + " log=False,\n", + " )\n", + " watermark_pretrain_validation_score = inference(\n", + " self.model, self.watermark_data_loader\n", + " )\n", + "\n", + " print(\n", + " \": Watermark Pretraining: Round: {:<3} Loss: {:<.6f} Acc: {:<.6f}\".format(\n", + " i,\n", + " watermark_pretrain_loss,\n", + " watermark_pretrain_validation_score,\n", + " )\n", + " )\n", + "\n", + " self.watermark_pretraining_completed = True\n", + "\n", + " self.next(\n", + " self.aggregated_model_validation,\n", + " foreach=\"subset_collaborators\",\n", + " exclude=[\"watermark_pretrain_optimizer\", \"watermark_retrain_optimizer\"],\n", + " )\n", + "\n", + " @collaborator\n", + " def aggregated_model_validation(self):\n", + " \"\"\"\n", + " Perform Aggregated Model validation on Collaborators.\n", + " \"\"\"\n", + " self.agg_validation_score = inference(self.model, self.test_loader)\n", + " print(\n", + " f\" Aggregated Model validation score = {self.agg_validation_score}\"\n", + " )\n", + "\n", + " self.next(self.train)\n", + "\n", + " @collaborator\n", + " def train(self):\n", + " \"\"\"\n", + " Train model on Local collab dataset.\n", + "\n", + " \"\"\"\n", + " print(\": Performing Model Training on Local dataset ... \")\n", + "\n", + " self.optimizer = optim.SGD(\n", + " self.model.parameters(), lr=learning_rate, momentum=momentum\n", + " )\n", + "\n", + " self.loss = train_model(\n", + " self.model,\n", + " self.optimizer,\n", + " self.train_loader,\n", + " \"\"),\n", + " self.round_number,\n", + " log=True,\n", + " )\n", + "\n", + " self.next(self.local_model_validation)\n", + "\n", + "\n", + " @collaborator\n", + " def local_model_validation(self):\n", + " \"\"\"\n", + " Validate locally trained model.\n", + "\n", + " \"\"\"\n", + " self.local_validation_score = inference(self.model, self.test_loader)\n", + " print(\n", + " f\" Local model validation score = {self.local_validation_score}\"\n", + " )\n", + " self.next(self.join)\n", + "\n", + " @aggregator\n", + " def join(self, inputs):\n", + " \"\"\"\n", + " Model aggregation step.\n", + " \"\"\"\n", + "\n", + " self.average_loss = sum(input.loss for input in inputs) / len(inputs)\n", + " self.aggregated_model_accuracy = sum(\n", + " input.agg_validation_score for input in inputs\n", + " ) / len(inputs)\n", + " self.local_model_accuracy = sum(\n", + " input.local_validation_score for input in inputs\n", + " ) / len(inputs)\n", + "\n", + " print(f\": Joining models from collaborators...\")\n", + "\n", + " print(\n", + " f\" Aggregated model validation score = {self.aggregated_model_accuracy}\"\n", + " )\n", + " print(f\" Average training loss = {self.average_loss}\")\n", + " print(f\" Average local model validation values = {self.local_model_accuracy}\")\n", + " \n", + " highest_accuracy = 0\n", + " highest_accuracy_model_idx = -1\n", + " for idx,col in enumerate(inputs):\n", + " accuracy_for_held_out_agg_data = inference(col.model,self.test_loader)\n", + " if accuracy_for_held_out_agg_data > highest_accuracy:\n", + " highest_accuracy = accuracy_for_held_out_agg_data\n", + " highest_accuracy_model_idx = idx\n", + " \n", + " relative_model_weights = len(inputs)*[1]\n", + " # Give highest accuracy model (on held out aggregator data) 2x the importance\n", + " relative_model_weights[highest_accuracy_model_idx] = 2\n", + " print(f'Aggregator validation score: {highest_accuracy}')\n", + " print(f'Highest accuracy model sent from {inputs[highest_accuracy_model_idx].input}. Receiving 2x weight in updated model')\n", + " self.model = FedAvg([input.model for input in inputs],weights=relative_model_weights)\n", + " self.optimizer = [input.optimizer for input in inputs][0]\n", + " self.current_round += 1\n", + " if self.current_round < self.round_number:\n", + " self.next(self.aggregated_model_validation, foreach='collaborators', exclude=['private'])\n", + " else:\n", + " self.next(self.watermark_retrain)\n", + "\n", + " @aggregator\n", + " def watermark_retrain(self):\n", + " \"\"\"\n", + " Retrain the aggregated model.\n", + "\n", + " \"\"\"\n", + " print(\": Performing Watermark Retraining ... \")\n", + " self.watermark_retrain_optimizer = optim.SGD(\n", + " self.model.parameters(), lr=watermark_retrain_learning_rate\n", + " )\n", + "\n", + " retrain_round = 0\n", + "\n", + " # Perform re-training until (accuracy >= acc_threshold) or (retrain_round > number of retrain_epochs)\n", + " self.watermark_retrain_validation_score = inference(\n", + " self.model, self.watermark_data_loader\n", + " )\n", + " while (\n", + " self.watermark_retrain_validation_score < self.watermark_acc_threshold\n", + " ) and (retrain_round < self.retrain_epochs):\n", + " self.watermark_retrain_train_loss = train_model(\n", + " self.model,\n", + " self.watermark_retrain_optimizer,\n", + " self.watermark_data_loader,\n", + " \"\",\n", + " retrain_round,\n", + " log=False,\n", + " )\n", + " self.watermark_retrain_validation_score = inference(\n", + " self.model, self.watermark_data_loader\n", + " )\n", + "\n", + " print(\n", + " \": Watermark Retraining: Train Epoch: {:<3} Retrain Round: {:<3} Loss: {:<.6f}, Acc: {:<.6f}\".format(\n", + " self.round_number,\n", + " retrain_round,\n", + " self.watermark_retrain_train_loss,\n", + " self.watermark_retrain_validation_score,\n", + " )\n", + " )\n", + "\n", + " retrain_round += 1\n", + "\n", + " self.next(self.end)\n", + "\n", + " @aggregator\n", + " def end(self):\n", + " \"\"\"\n", + " This is the last step in the Flow.\n", + "\n", + " \"\"\"\n", + " print(f\"This is the end of the flow\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "c6da2c42", + "metadata": {}, + "source": [ + "In the `AggregatorValCollaboratorGPUWatermarking` definition above, you will notice that certain attributes of the flow were not initialized, namely the `watermark_data_loader` for Aggregator and `train_loader`, `test_loader` for the Collaborators. \n", + "\n", + "- Collaborator attributes are created in the same manner as described in [quickstart](https://github.com/psfoley/openfl/blob/experimental-workflow-interface/openfl-tutorials/experimental/101_MNIST.ipynb).\n", + "\n", + "- `watermark_data_loader` is created as a **private attribute** of the Aggregator and it is exposed only via the runtime. This property enables the Watermark dataset to be hidden from the collaborators as Aggregator private attributes are filtered before the state is transferred to Collaborators (in the same manner as Collaborator private attributes are hidden from Aggregator).\n", + "\n", + "Lets define these attributes along with some other parameters (seed, batch-sizes, optimizer parameters) and create the LocalRuntime:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bffcc141", + "metadata": {}, + "outputs": [], + "source": [ + "# Set random seed\n", + "random_seed = 42\n", + "torch.manual_seed(random_seed)\n", + "np.random.seed(random_seed)\n", + "torch.backends.cudnn.enabled = False\n", + "\n", + "# Batch sizes\n", + "batch_size_train = 64\n", + "batch_size_test = 64\n", + "batch_size_watermark = 50\n", + "\n", + "# MNIST parameters\n", + "learning_rate = 5e-2\n", + "momentum = 5e-1\n", + "log_interval = 20\n", + "\n", + "# Watermarking parameters\n", + "watermark_pretrain_learning_rate = 1e-1\n", + "watermark_pretrain_momentum = 5e-1\n", + "watermark_pretrain_weight_decay = 5e-05\n", + "watermark_retrain_learning_rate = 5e-3\n" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "3d7ce52f", + "metadata": {}, + "source": [ + "## Setup Federation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5f6e104", + "metadata": {}, + "outputs": [], + "source": [ + "# Setup Aggregator with private attributes\n", + "aggregator = Aggregator(num_gpus=0.0)\n", + "\n", + "# Setup Collaborators with private attributes\n", + "collaborator_names = [\n", + " \"Portland\",\n", + " \"Seattle\",\n", + " \"Chandler\",\n", + " \"Bangalore\",\n", + " \"New Delhi\",\n", + "]\n", + "print(f\"Creating collaborators {collaborator_names}\")\n", + "collaborators = [Collaborator(name=name, num_gpus=0.0) for name in collaborator_names]\n", + "\n", + "aggregator_test = deepcopy(mnist_test)\n", + "aggregator_test.targets = mnist_test.targets[len(collaborators)::len(collaborators)+1]\n", + "aggregator_test.data = mnist_test.data[len(collaborators)::len(collaborators)+1]\n", + "\n", + "aggregator.private_attributes = {\n", + " \"watermark_data_loader\": torch.utils.data.DataLoader(\n", + " watermark_data, batch_size=batch_size_watermark, shuffle=True\n", + " ),\n", + " \"test_loader\": torch.utils.data.DataLoader(aggregator_test,batch_size=batch_size_train, shuffle=True),\n", + " \"pretrain_epochs\": 25,\n", + " \"retrain_epochs\": 25,\n", + " \"watermark_acc_threshold\": 0.98,\n", + " \"watermark_pretraining_completed\": False,\n", + "}\n", + "\n", + "for idx, collaborator in enumerate(collaborators):\n", + " local_train = deepcopy(mnist_train)\n", + " local_test = deepcopy(mnist_test)\n", + " local_train.data = mnist_train.data[idx :: len(collaborators)]\n", + " local_train.targets = mnist_train.targets[idx :: len(collaborators)]\n", + " local_test.data = mnist_test.data[idx :: len(collaborators)]\n", + " local_test.targets = mnist_test.targets[idx :: len(collaborators)]\n", + " collaborator.private_attributes = {\n", + " \"train_loader\": torch.utils.data.DataLoader(\n", + " local_train, batch_size=batch_size_train, shuffle=True\n", + " ),\n", + " \"test_loader\": torch.utils.data.DataLoader(\n", + " local_test, batch_size=batch_size_train, shuffle=True\n", + " ),\n", + " }\n", + "\n", + "local_runtime = LocalRuntime(aggregator=aggregator, collaborators=collaborators)\n", + "print(f\"Local runtime collaborators = {local_runtime.collaborators}\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "02935ccf", + "metadata": {}, + "source": [ + "Now that we have our flow and runtime defined, let's run the experiment! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c6d19819", + "metadata": {}, + "outputs": [], + "source": [ + "model = None\n", + "best_model = None\n", + "optimizer = None\n", + "watermark_pretrain_optimizer = None\n", + "watermark_retrain_optimizer = None\n", + "\n", + "top_model_accuracy = 0\n", + "\n", + "flflow = AggregatorValCollaboratorGPUWatermarking(\n", + " model,\n", + " optimizer,\n", + " watermark_pretrain_optimizer,\n", + " watermark_retrain_optimizer,\n", + " 0,\n", + " checkpoint=True,\n", + ")\n", + "flflow.runtime = local_runtime\n", + "\n", + "for i in range(5):\n", + " print(f\"Starting round {i}...\")\n", + " flflow.run()\n", + " flflow.round_number += 1\n", + " aggregated_model_accuracy = flflow.aggregated_model_accuracy\n", + " if aggregated_model_accuracy > top_model_accuracy:\n", + " print(\n", + " f\"\\nAccuracy improved to {aggregated_model_accuracy} for round {i}, Watermark Acc: {flflow.watermark_retrain_validation_score}\\n\"\n", + " )\n", + " top_model_accuracy = aggregated_model_accuracy\n", + " best_model = flflow.model\n", + "\n", + "torch.save(best_model.state_dict(), \"watermarked_mnist_model.pth\")" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "bf66c1cd", + "metadata": {}, + "source": [ + "Finally we visualize the User-workflow as a Flowgraph as an html file. This requires checkpointing to be enabled and `InspectFlow` generates the Flowgraph for the Federated Flowobject and associated run-id." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d363a2cf", + "metadata": {}, + "outputs": [], + "source": [ + "# Inspect Flowgraph\n", + "if flflow._checkpoint:\n", + " InspectFlow(flflow, flflow._run_id, show_html=True)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "openfl_org", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.20" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/openfl-tutorials/experimental/402_FedProx_with_Synthetic_nonIID.ipynb b/openfl-tutorials/experimental/workflow/402_FedProx_with_Synthetic_nonIID.ipynb similarity index 99% rename from openfl-tutorials/experimental/402_FedProx_with_Synthetic_nonIID.ipynb rename to openfl-tutorials/experimental/workflow/402_FedProx_with_Synthetic_nonIID.ipynb index 4d796f7d5e..f933718fac 100644 --- a/openfl-tutorials/experimental/402_FedProx_with_Synthetic_nonIID.ipynb +++ b/openfl-tutorials/experimental/workflow/402_FedProx_with_Synthetic_nonIID.ipynb @@ -362,9 +362,9 @@ "metadata": {}, "outputs": [], "source": [ - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "from openfl.utilities.optimizers.torch import FedProxOptimizer" ] }, diff --git a/openfl-tutorials/experimental/402_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb b/openfl-tutorials/experimental/workflow/402_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb similarity index 99% rename from openfl-tutorials/experimental/402_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb rename to openfl-tutorials/experimental/workflow/402_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb index 4ae8651cf8..5e1dd0f6c9 100644 --- a/openfl-tutorials/experimental/402_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb +++ b/openfl-tutorials/experimental/workflow/402_MNIST_Aggregator_Validation_Ray_Watermarking.ipynb @@ -60,7 +60,7 @@ "\n", "\n", "# Uncomment this if running in Google Colab\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" ] @@ -414,10 +414,10 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", - "from openfl.experimental.utilities.ui import InspectFlow\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.utilities.ui import InspectFlow\n", "\n", "\n", "def FedAvg(models, weights=None): \n", diff --git a/openfl-tutorials/experimental/CrowdGuard/.gitignore b/openfl-tutorials/experimental/workflow/CrowdGuard/.gitignore similarity index 100% rename from openfl-tutorials/experimental/CrowdGuard/.gitignore rename to openfl-tutorials/experimental/workflow/CrowdGuard/.gitignore diff --git a/openfl-tutorials/experimental/CrowdGuard/CrowdGuardClientValidation.py b/openfl-tutorials/experimental/workflow/CrowdGuard/CrowdGuardClientValidation.py similarity index 100% rename from openfl-tutorials/experimental/CrowdGuard/CrowdGuardClientValidation.py rename to openfl-tutorials/experimental/workflow/CrowdGuard/CrowdGuardClientValidation.py diff --git a/openfl-tutorials/experimental/CrowdGuard/PoisoningAttackDemo.ipynb b/openfl-tutorials/experimental/workflow/CrowdGuard/PoisoningAttackDemo.ipynb similarity index 99% rename from openfl-tutorials/experimental/CrowdGuard/PoisoningAttackDemo.ipynb rename to openfl-tutorials/experimental/workflow/CrowdGuard/PoisoningAttackDemo.ipynb index 6a3b8eb6ac..56283d82b5 100644 --- a/openfl-tutorials/experimental/CrowdGuard/PoisoningAttackDemo.ipynb +++ b/openfl-tutorials/experimental/workflow/CrowdGuard/PoisoningAttackDemo.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "4bec0e77", "metadata": {}, "outputs": [], @@ -33,9 +33,9 @@ "from sklearn.cluster import AgglomerativeClustering, DBSCAN\n", "\n", "from CrowdGuardClientValidation import CrowdGuardClientValidation\n", - "from openfl.experimental.interface import Aggregator, Collaborator, FLSpec\n", - "from openfl.experimental.placement import aggregator, collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.interface import Aggregator, Collaborator, FLSpec\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", "\n", "warnings.filterwarnings(\"ignore\")\n", "\n", diff --git a/openfl-tutorials/experimental/workflow/CrowdGuard/PoisoningAttackDemoReduced.ipynb b/openfl-tutorials/experimental/workflow/CrowdGuard/PoisoningAttackDemoReduced.ipynb new file mode 100644 index 0000000000..52008f2a2e --- /dev/null +++ b/openfl-tutorials/experimental/workflow/CrowdGuard/PoisoningAttackDemoReduced.ipynb @@ -0,0 +1,256 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "4bec0e77", + "metadata": {}, + "outputs": [], + "source": [ + "# Copyright (C) 2022-2024 TU Darmstadt\n", + "# SPDX-License-Identifier: Apache-2.0\n", + "\n", + "# -----------------------------------------------------------\n", + "# Primary author: Phillip Rieger \n", + "# Co-authored-by: Torsten Krauss \n", + "# ------------------------------------------------------------\n", + "\n", + "import argparse\n", + "import os\n", + "import pickle\n", + "import time\n", + "import warnings\n", + "from copy import deepcopy\n", + "from datetime import datetime\n", + "\n", + "import numpy as np\n", + "import torch\n", + "import torch.nn as nn\n", + "from torch.utils.data import TensorDataset\n", + "import torch.optim as optim\n", + "from torchvision import transforms, datasets\n", + "from sklearn.cluster import AgglomerativeClustering, DBSCAN\n", + "\n", + "from CrowdGuardClientValidation import CrowdGuardClientValidation\n", + "from openfl.experimental.workflow.interface import Aggregator, Collaborator, FLSpec\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from cifar10_crowdguard import MEAN, STD_DEV, poison_data, seed_random_generators\n", + "from cifar10_crowdguard import BATCH_SIZE_TRAIN, BATCH_SIZE_TEST, Net, test, default_optimizer\n", + "from cifar10_crowdguard import FederatedFlow\n", + "from cifar10_crowdguard import PRETRAINED_MODEL_FILE, download_pretrained_model\n", + "warnings.filterwarnings(\"ignore\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "94098847", + "metadata": {}, + "outputs": [], + "source": [ + "TOTAL_CLIENT_NUMBER = 4\n", + "PMR = 0.25\n", + "NUMBER_OF_MALICIOUS_CLIENTS = max(1, int(TOTAL_CLIENT_NUMBER * PMR)) if PMR > 0 else 0\n", + "NUMBER_OF_BENIGN_CLIENTS = TOTAL_CLIENT_NUMBER - NUMBER_OF_MALICIOUS_CLIENTS\n", + "NUMBER_OF_ROUNDS = 10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f0107812", + "metadata": {}, + "outputs": [], + "source": [ + "class CommandLineArgumentSimulator:\n", + " \n", + " def __init__(self):\n", + " self.test_dataset_ratio = 0.4\n", + " self.train_dataset_ratio = 0.4\n", + " self.log_dir = 'test_debug'\n", + " self.comm_round = NUMBER_OF_ROUNDS\n", + " self.flow_internal_loop_test=False\n", + " self.optimizer_type = 'SGD'\n", + " \n", + "args = CommandLineArgumentSimulator()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fd18c0b3", + "metadata": {}, + "outputs": [], + "source": [ + "download_pretrained_model()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5d8950eb", + "metadata": {}, + "outputs": [], + "source": [ + "aggregator_object = Aggregator()\n", + "aggregator_object.private_attributes = {}\n", + "collaborator_names = [f'benign_{i:02d}' for i in range(NUMBER_OF_BENIGN_CLIENTS)] + [f'malicious_{i:02d}' for i in range(NUMBER_OF_MALICIOUS_CLIENTS)] \n", + "collaborators = [Collaborator(name=name) for name in collaborator_names]\n", + "if torch.cuda.is_available():\n", + " device = torch.device(\n", + " \"cuda:1\"\n", + " ) # This will enable Ray library to reserve available GPU(s) for the task\n", + "else:\n", + " device = torch.device(\"cpu\")\n", + "\n", + "transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize(MEAN, STD_DEV),])\n", + "\n", + "cifar_train = datasets.CIFAR10(root=\"./data\", train=True, download=True, transform=transform)\n", + "cifar_train = [x for x in cifar_train]\n", + "cifar_test = datasets.CIFAR10(root=\"./data\", train=False, download=True, transform=transform)\n", + "cifar_test = [x for x in cifar_test]\n", + "X = torch.stack([x[0] for x in cifar_train] + [x[0] for x in cifar_test])\n", + "Y = torch.LongTensor(np.stack(np.array([x[1] for x in cifar_train] + [x[1] for x in cifar_test])))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e92f0205", + "metadata": {}, + "outputs": [], + "source": [ + "seed_random_generators(0)\n", + "shuffled_indices = np.arange(X.shape[0])\n", + "np.random.shuffle(shuffled_indices)\n", + "\n", + "N_total_samples = len(cifar_test) + len(cifar_train)\n", + "train_dataset_size = int(N_total_samples * args.train_dataset_ratio)\n", + "test_dataset_size = int(N_total_samples * args.test_dataset_ratio)\n", + "X = X[shuffled_indices]\n", + "Y = Y[shuffled_indices]\n", + "\n", + "train_dataset_data = X[:train_dataset_size]\n", + "train_dataset_targets = Y[:train_dataset_size]\n", + "\n", + "test_dataset_data = X[train_dataset_size:train_dataset_size + test_dataset_size]\n", + "test_dataset_targets = Y[train_dataset_size:train_dataset_size + test_dataset_size]\n", + "print(f\"Dataset info (total {N_total_samples}): train - {test_dataset_targets.shape[0]}, \"\n", + " f\"test - {test_dataset_targets.shape[0]}, \")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d47aca7e", + "metadata": {}, + "outputs": [], + "source": [ + "for idx, collab in enumerate(collaborators):\n", + " # construct the training and test and population dataset\n", + " benign_training_X = train_dataset_data[idx::len(collaborators)]\n", + " benign_training_Y = train_dataset_targets[idx::len(collaborators)]\n", + " \n", + " if 'malicious' in collab.name:\n", + " local_train_data, local_train_targets = poison_data(benign_training_X, benign_training_Y)\n", + " else:\n", + " local_train_data, local_train_targets = benign_training_X, benign_training_Y\n", + " \n", + "\n", + " local_test_data = test_dataset_data[idx::len(collaborators)]\n", + " local_test_targets = test_dataset_targets[idx::len(collaborators)]\n", + " \n", + "\n", + " poison_test_data, poison_test_targets = poison_data(local_test_data, local_test_targets,\n", + " pdr=1.0)\n", + "\n", + " collab.private_attributes = {\n", + " \"train_loader\": torch.utils.data.DataLoader(\n", + " TensorDataset(local_train_data, local_train_targets),\n", + " batch_size=BATCH_SIZE_TRAIN, shuffle=True\n", + " ),\n", + " \"test_loader\": torch.utils.data.DataLoader(\n", + " TensorDataset(local_test_data, local_test_targets),\n", + " batch_size=BATCH_SIZE_TEST, shuffle=False\n", + " ),\n", + " \"backdoor_test_loader\": torch.utils.data.DataLoader(\n", + " TensorDataset(poison_test_data, poison_test_targets),\n", + " batch_size=BATCH_SIZE_TEST, shuffle=False\n", + " ),\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16c46575", + "metadata": {}, + "outputs": [], + "source": [ + "pretrained_weights = torch.load(PRETRAINED_MODEL_FILE, map_location=device)\n", + "test_model = Net().to(device)\n", + "test_model.load_state_dict(pretrained_weights)\n", + "test(test_model, collab.private_attributes['train_loader'], device, test_train='Train')\n", + "test(test_model, collab.private_attributes['test_loader'], device)\n", + "test(test_model, collab.private_attributes['backdoor_test_loader'], device, mode='Backdoor')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5e9721c1", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "local_runtime = LocalRuntime(aggregator=aggregator_object, collaborators=collaborators)\n", + "\n", + "print(f\"Local runtime collaborators = {local_runtime.collaborators}\")\n", + "\n", + "# change to the internal flow loop\n", + "model = Net()\n", + "model.load_state_dict(pretrained_weights)\n", + "top_model_accuracy = 0\n", + "optimizers = {\n", + " collaborator.name: default_optimizer(model, optimizer_type=args.optimizer_type)\n", + " for collaborator in collaborators\n", + " }\n", + "flflow = FederatedFlow(\n", + " model,\n", + " optimizers,\n", + " device,\n", + " args.comm_round,\n", + " top_model_accuracy,\n", + " NUMBER_OF_MALICIOUS_CLIENTS / TOTAL_CLIENT_NUMBER,\n", + " 'CrowdGuard'\n", + " )\n", + "\n", + "flflow.runtime = local_runtime\n", + "flflow.run()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/openfl-tutorials/experimental/CrowdGuard/cifar10_crowdguard.py b/openfl-tutorials/experimental/workflow/CrowdGuard/cifar10_crowdguard.py similarity index 99% rename from openfl-tutorials/experimental/CrowdGuard/cifar10_crowdguard.py rename to openfl-tutorials/experimental/workflow/CrowdGuard/cifar10_crowdguard.py index 4c566a3ccd..bc147c1946 100644 --- a/openfl-tutorials/experimental/CrowdGuard/cifar10_crowdguard.py +++ b/openfl-tutorials/experimental/workflow/CrowdGuard/cifar10_crowdguard.py @@ -23,9 +23,9 @@ from sklearn.cluster import AgglomerativeClustering, DBSCAN from CrowdGuardClientValidation import CrowdGuardClientValidation -from openfl.experimental.interface import Aggregator, Collaborator, FLSpec -from openfl.experimental.placement import aggregator, collaborator -from openfl.experimental.runtime import LocalRuntime +from openfl.experimental.workflow.interface import Aggregator, Collaborator, FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator +from openfl.experimental.workflow.runtime import LocalRuntime from urllib.request import urlretrieve warnings.filterwarnings("ignore") diff --git a/openfl-tutorials/experimental/CrowdGuard/readme.md b/openfl-tutorials/experimental/workflow/CrowdGuard/readme.md similarity index 100% rename from openfl-tutorials/experimental/CrowdGuard/readme.md rename to openfl-tutorials/experimental/workflow/CrowdGuard/readme.md diff --git a/openfl-tutorials/experimental/Global_DP/README.md b/openfl-tutorials/experimental/workflow/Global_DP/README.md similarity index 100% rename from openfl-tutorials/experimental/Global_DP/README.md rename to openfl-tutorials/experimental/workflow/Global_DP/README.md diff --git a/openfl-tutorials/experimental/Global_DP/Workflow_Interface_Mnist_Implementation_1.py b/openfl-tutorials/experimental/workflow/Global_DP/Workflow_Interface_Mnist_Implementation_1.py similarity index 99% rename from openfl-tutorials/experimental/Global_DP/Workflow_Interface_Mnist_Implementation_1.py rename to openfl-tutorials/experimental/workflow/Global_DP/Workflow_Interface_Mnist_Implementation_1.py index 8b9dbf4722..1a2035e549 100644 --- a/openfl-tutorials/experimental/Global_DP/Workflow_Interface_Mnist_Implementation_1.py +++ b/openfl-tutorials/experimental/workflow/Global_DP/Workflow_Interface_Mnist_Implementation_1.py @@ -13,9 +13,9 @@ import torch import torchvision import numpy as np -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator from torch.distributions.normal import Normal from opacus.accountants.rdp import RDPAccountant diff --git a/openfl-tutorials/experimental/Global_DP/Workflow_Interface_Mnist_Implementation_2.py b/openfl-tutorials/experimental/workflow/Global_DP/Workflow_Interface_Mnist_Implementation_2.py similarity index 99% rename from openfl-tutorials/experimental/Global_DP/Workflow_Interface_Mnist_Implementation_2.py rename to openfl-tutorials/experimental/workflow/Global_DP/Workflow_Interface_Mnist_Implementation_2.py index e9f7a16a1b..af2870b2c3 100644 --- a/openfl-tutorials/experimental/Global_DP/Workflow_Interface_Mnist_Implementation_2.py +++ b/openfl-tutorials/experimental/workflow/Global_DP/Workflow_Interface_Mnist_Implementation_2.py @@ -14,9 +14,9 @@ import torchvision from torch.utils.data import TensorDataset import numpy as np -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator from opacus import PrivacyEngine import argparse diff --git a/openfl-tutorials/experimental/Global_DP/clip_optimizer.py b/openfl-tutorials/experimental/workflow/Global_DP/clip_optimizer.py similarity index 100% rename from openfl-tutorials/experimental/Global_DP/clip_optimizer.py rename to openfl-tutorials/experimental/workflow/Global_DP/clip_optimizer.py diff --git a/openfl-tutorials/experimental/Global_DP/requirements_global_dp.txt b/openfl-tutorials/experimental/workflow/Global_DP/requirements_global_dp.txt similarity index 100% rename from openfl-tutorials/experimental/Global_DP/requirements_global_dp.txt rename to openfl-tutorials/experimental/workflow/Global_DP/requirements_global_dp.txt diff --git a/openfl-tutorials/experimental/Global_DP/test_config.yml b/openfl-tutorials/experimental/workflow/Global_DP/test_config.yml similarity index 100% rename from openfl-tutorials/experimental/Global_DP/test_config.yml rename to openfl-tutorials/experimental/workflow/Global_DP/test_config.yml diff --git a/openfl-tutorials/experimental/LLM/neuralchat/README.md b/openfl-tutorials/experimental/workflow/LLM/neuralchat/README.md similarity index 100% rename from openfl-tutorials/experimental/LLM/neuralchat/README.md rename to openfl-tutorials/experimental/workflow/LLM/neuralchat/README.md diff --git a/openfl-tutorials/experimental/LLM/neuralchat/Workflow_Interface_NeuralChat.ipynb b/openfl-tutorials/experimental/workflow/LLM/neuralchat/Workflow_Interface_NeuralChat.ipynb similarity index 99% rename from openfl-tutorials/experimental/LLM/neuralchat/Workflow_Interface_NeuralChat.ipynb rename to openfl-tutorials/experimental/workflow/LLM/neuralchat/Workflow_Interface_NeuralChat.ipynb index c05e3241a9..749ebbc8bb 100644 --- a/openfl-tutorials/experimental/LLM/neuralchat/Workflow_Interface_NeuralChat.ipynb +++ b/openfl-tutorials/experimental/workflow/LLM/neuralchat/Workflow_Interface_NeuralChat.ipynb @@ -401,9 +401,9 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "import numpy as np\n", "\n", diff --git a/openfl-tutorials/experimental/LLM/neuralchat/preprocess_dataset.py b/openfl-tutorials/experimental/workflow/LLM/neuralchat/preprocess_dataset.py similarity index 100% rename from openfl-tutorials/experimental/LLM/neuralchat/preprocess_dataset.py rename to openfl-tutorials/experimental/workflow/LLM/neuralchat/preprocess_dataset.py diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_auc.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_auc.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_auc.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_auc.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_roc_at_30.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_roc_at_30.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_roc_at_30.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_roc_at_30.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.1.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.1.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.1.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.1.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.2.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.2.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.2.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.2.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.3.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.3.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.3.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Portland_tpr_at_0.3.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_auc.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_auc.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_auc.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_auc.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_roc_at_30.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_roc_at_30.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_roc_at_30.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_roc_at_30.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.1.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.1.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.1.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.1.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.2.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.2.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.2.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.2.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.3.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.3.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.3.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_adam/Seattle_tpr_at_0.3.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_auc.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_auc.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_auc.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_auc.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_roc_at_30.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_roc_at_30.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_roc_at_30.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_roc_at_30.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.1.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.1.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.1.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.1.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.2.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.2.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.2.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.2.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.3.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.3.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.3.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Portland_tpr_at_0.3.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_auc.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_auc.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_auc.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_auc.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_roc_at_30.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_roc_at_30.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_roc_at_30.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_roc_at_30.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.1.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.1.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.1.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.1.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.2.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.2.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.2.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.2.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.3.png b/openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.3.png similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.3.png rename to openfl-tutorials/experimental/workflow/Privacy_Meter/Results/result_sgd/Seattle_tpr_at_0.3.png diff --git a/openfl-tutorials/experimental/Privacy_Meter/auditor.py b/openfl-tutorials/experimental/workflow/Privacy_Meter/auditor.py similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/auditor.py rename to openfl-tutorials/experimental/workflow/Privacy_Meter/auditor.py diff --git a/openfl-tutorials/experimental/Privacy_Meter/cifar10_PM.py b/openfl-tutorials/experimental/workflow/Privacy_Meter/cifar10_PM.py similarity index 99% rename from openfl-tutorials/experimental/Privacy_Meter/cifar10_PM.py rename to openfl-tutorials/experimental/workflow/Privacy_Meter/cifar10_PM.py index a6fdb0524e..647c3f846b 100644 --- a/openfl-tutorials/experimental/Privacy_Meter/cifar10_PM.py +++ b/openfl-tutorials/experimental/workflow/Privacy_Meter/cifar10_PM.py @@ -12,9 +12,9 @@ import torch.optim as optim import torch import numpy as np -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator import torchvision.transforms as transforms import pickle from pathlib import Path diff --git a/openfl-tutorials/experimental/Privacy_Meter/cifar10_loader.py b/openfl-tutorials/experimental/workflow/Privacy_Meter/cifar10_loader.py similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/cifar10_loader.py rename to openfl-tutorials/experimental/workflow/Privacy_Meter/cifar10_loader.py diff --git a/openfl-tutorials/experimental/Privacy_Meter/readme.md b/openfl-tutorials/experimental/workflow/Privacy_Meter/readme.md similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/readme.md rename to openfl-tutorials/experimental/workflow/Privacy_Meter/readme.md diff --git a/openfl-tutorials/experimental/Privacy_Meter/requirements_privacy_meter.txt b/openfl-tutorials/experimental/workflow/Privacy_Meter/requirements_privacy_meter.txt similarity index 100% rename from openfl-tutorials/experimental/Privacy_Meter/requirements_privacy_meter.txt rename to openfl-tutorials/experimental/workflow/Privacy_Meter/requirements_privacy_meter.txt diff --git a/openfl-tutorials/experimental/PyG_support/OpenFL_PYG_on_MUTAG_model_PyG_example_muatg_gin.ipynb b/openfl-tutorials/experimental/workflow/PyG_support/OpenFL_PYG_on_MUTAG_model_PyG_example_muatg_gin.ipynb similarity index 53% rename from openfl-tutorials/experimental/PyG_support/OpenFL_PYG_on_MUTAG_model_PyG_example_muatg_gin.ipynb rename to openfl-tutorials/experimental/workflow/PyG_support/OpenFL_PYG_on_MUTAG_model_PyG_example_muatg_gin.ipynb index 42c6894635..970336cd0a 100644 --- a/openfl-tutorials/experimental/PyG_support/OpenFL_PYG_on_MUTAG_model_PyG_example_muatg_gin.ipynb +++ b/openfl-tutorials/experimental/workflow/PyG_support/OpenFL_PYG_on_MUTAG_model_PyG_example_muatg_gin.ipynb @@ -1 +1,1283 @@ -{"cells":[{"cell_type":"markdown","metadata":{"id":"09Go3-G4X_Vb"},"source":["# Stand-alone and OpenFL federated learning (simulated with workflow interface)"]},{"cell_type":"code","execution_count":2,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":43288,"status":"ok","timestamp":1695296685026,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"-FkxTdv0YTCV","outputId":"c033a04a-90c4-430d-c57c-b9c6dec60aa2"},"outputs":[{"name":"stdout","output_type":"stream","text":["Mounted at /content/drive\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')"]},{"cell_type":"markdown","metadata":{"id":"oh_y2G4TZlSb"},"source":["#Prepare environment"]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":495,"status":"ok","timestamp":1695296688920,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"-gron7piL9ok","outputId":"9834ed4b-6d25-4f3f-a232-be89699f4427"},"outputs":[{"name":"stdout","output_type":"stream","text":["total 8\n","drwx------ 6 root root 4096 Sep 21 11:44 drive\n","drwxr-xr-x 1 root root 4096 Sep 19 13:44 sample_data\n"]}],"source":["!ls -l"]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":28136,"status":"ok","timestamp":1695296720394,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"hBo3V8c2Zswm","outputId":"06a8da77-15b9-439f-b73e-731f88b80fa0"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting git+https://github.com/securefederatedai/openfl.git\n"," Cloning https://github.com/securefederatedai/openfl.git to /tmp/pip-req-build-en_v2te0\n"," Running command git clone --filter=blob:none --quiet https://github.com/securefederatedai/openfl.git /tmp/pip-req-build-en_v2te0\n"," Resolved https://github.com/securefederatedai/openfl.git to commit 3bd32d183beee7afd677504e6feb00bf7cb3ccf3\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Collecting Click==8.0.1 (from openfl==1.5)\n"," Downloading click-8.0.1-py3-none-any.whl (97 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m97.4/97.4 kB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: PyYAML>=5.4.1 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (6.0.1)\n","Requirement already satisfied: cloudpickle in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (2.2.1)\n","Requirement already satisfied: cryptography>=3.4.6 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (41.0.3)\n","Collecting docker (from openfl==1.5)\n"," Downloading docker-6.1.3-py3-none-any.whl (148 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m148.1/148.1 kB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting dynaconf==3.1.7 (from openfl==1.5)\n"," Downloading dynaconf-3.1.7-py2.py3-none-any.whl (200 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m200.6/200.6 kB\u001b[0m \u001b[31m20.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting flatten_json (from openfl==1.5)\n"," Downloading flatten_json-0.1.13.tar.gz (11 kB)\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Requirement already satisfied: grpcio>=1.56.2 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.57.0)\n","Requirement already satisfied: ipykernel in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (5.5.6)\n","Collecting jupyterlab (from openfl==1.5)\n"," Downloading jupyterlab-4.0.6-py3-none-any.whl (9.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.2/9.2 MB\u001b[0m \u001b[31m78.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.23.5)\n","Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.5.3)\n","Requirement already satisfied: protobuf>=3.20.3 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (3.20.3)\n","Requirement already satisfied: pyzmq<=24.0.1 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (23.2.1)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (2.31.0)\n","Requirement already satisfied: rich in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (13.5.2)\n","Requirement already satisfied: scikit-learn in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.2.2)\n","Requirement already satisfied: tensorboard in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (2.13.0)\n","Collecting tensorboardX<=2.6 (from openfl==1.5)\n"," Downloading tensorboardX-2.6-py2.py3-none-any.whl (114 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.5/114.5 kB\u001b[0m \u001b[31m13.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (4.66.1)\n","Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.10/dist-packages (from cryptography>=3.4.6->openfl==1.5) (1.15.1)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from tensorboardX<=2.6->openfl==1.5) (23.1)\n","Requirement already satisfied: urllib3>=1.26.0 in /usr/local/lib/python3.10/dist-packages (from docker->openfl==1.5) (2.0.4)\n","Requirement already satisfied: websocket-client>=0.32.0 in /usr/local/lib/python3.10/dist-packages (from docker->openfl==1.5) (1.6.2)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->openfl==1.5) (3.2.0)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->openfl==1.5) (3.4)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->openfl==1.5) (2023.7.22)\n","Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from flatten_json->openfl==1.5) (1.16.0)\n","Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (0.2.0)\n","Requirement already satisfied: ipython>=5.0.0 in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (7.34.0)\n","Requirement already satisfied: traitlets>=4.1.0 in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (5.7.1)\n","Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (6.1.12)\n","Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (6.3.2)\n","Collecting async-lru>=1.0.0 (from jupyterlab->openfl==1.5)\n"," Downloading async_lru-2.0.4-py3-none-any.whl (6.1 kB)\n","Requirement already satisfied: jinja2>=3.0.3 in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (3.1.2)\n","Requirement already satisfied: jupyter-core in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (5.3.1)\n","Collecting jupyter-lsp>=2.0.0 (from jupyterlab->openfl==1.5)\n"," Downloading jupyter_lsp-2.2.0-py3-none-any.whl (65 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.0/66.0 kB\u001b[0m \u001b[31m7.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jupyter-server<3,>=2.4.0 (from jupyterlab->openfl==1.5)\n"," Downloading jupyter_server-2.7.3-py3-none-any.whl (375 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m375.6/375.6 kB\u001b[0m \u001b[31m33.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jupyterlab-server<3,>=2.19.0 (from jupyterlab->openfl==1.5)\n"," Downloading jupyterlab_server-2.25.0-py3-none-any.whl (57 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.2/57.2 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: notebook-shim>=0.2 in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (0.2.3)\n","Requirement already satisfied: tomli in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (2.0.1)\n","Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->openfl==1.5) (2.8.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->openfl==1.5) (2023.3.post1)\n","Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich->openfl==1.5) (3.0.0)\n","Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich->openfl==1.5) (2.16.1)\n","Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->openfl==1.5) (1.11.2)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->openfl==1.5) (1.3.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->openfl==1.5) (3.2.0)\n","Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (1.4.0)\n","Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (2.17.3)\n","Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (1.0.0)\n","Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (3.4.4)\n","Requirement already satisfied: setuptools>=41.0.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (67.7.2)\n","Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (0.7.1)\n","Requirement already satisfied: werkzeug>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (2.3.7)\n","Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (0.41.2)\n","Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from async-lru>=1.0.0->jupyterlab->openfl==1.5) (4.5.0)\n","Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.12->cryptography>=3.4.6->openfl==1.5) (2.21)\n","Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (5.3.1)\n","Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (0.3.0)\n","Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (4.9)\n","Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard->openfl==1.5) (1.3.1)\n","Collecting jedi>=0.16 (from ipython>=5.0.0->ipykernel->openfl==1.5)\n"," Downloading jedi-0.19.0-py2.py3-none-any.whl (1.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m66.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (4.4.2)\n","Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (0.7.5)\n","Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (3.0.39)\n","Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (0.2.0)\n","Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (0.1.6)\n","Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (4.8.0)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2>=3.0.3->jupyterlab->openfl==1.5) (2.1.3)\n","Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (3.7.1)\n","Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (23.1.0)\n","Collecting jupyter-client (from ipykernel->openfl==1.5)\n"," Downloading jupyter_client-8.3.1-py3-none-any.whl (104 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m104.1/104.1 kB\u001b[0m \u001b[31m13.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jupyter-events>=0.6.0 (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading jupyter_events-0.7.0-py3-none-any.whl (18 kB)\n","Collecting jupyter-server-terminals (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading jupyter_server_terminals-0.4.4-py3-none-any.whl (13 kB)\n","Requirement already satisfied: nbconvert>=6.4.4 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (6.5.4)\n","Requirement already satisfied: nbformat>=5.3.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (5.9.2)\n","Collecting overrides (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading overrides-7.4.0-py3-none-any.whl (17 kB)\n","Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.17.1)\n","Collecting pyzmq<=24.0.1 (from openfl==1.5)\n"," Downloading pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m71.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: send2trash>=1.8.2 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.8.2)\n","Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.17.1)\n","Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core->jupyterlab->openfl==1.5) (3.10.0)\n","Requirement already satisfied: babel>=2.10 in /usr/local/lib/python3.10/dist-packages (from jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (2.12.1)\n","Collecting json5>=0.9.0 (from jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading json5-0.9.14-py2.py3-none-any.whl (19 kB)\n","Requirement already satisfied: jsonschema>=4.18.0 in /usr/local/lib/python3.10/dist-packages (from jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (4.19.0)\n","Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich->openfl==1.5) (0.1.2)\n","Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.3.0)\n","Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.1.3)\n","Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython>=5.0.0->ipykernel->openfl==1.5) (0.8.3)\n","Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (23.1.0)\n","Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (2023.7.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (0.30.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (0.10.2)\n","Collecting python-json-logger>=2.0.4 (from jupyter-events>=0.6.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading python_json_logger-2.0.7-py3-none-any.whl (8.1 kB)\n","Collecting rfc3339-validator (from jupyter-events>=0.6.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading rfc3339_validator-0.1.4-py2.py3-none-any.whl (3.5 kB)\n","Collecting rfc3986-validator>=0.1.1 (from jupyter-events>=0.6.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading rfc3986_validator-0.1.1-py2.py3-none-any.whl (4.2 kB)\n","Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (4.9.3)\n","Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (4.11.2)\n","Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (6.0.0)\n","Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.7.1)\n","Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.4)\n","Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.2.2)\n","Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.8.4)\n","Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.8.0)\n","Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.5.0)\n","Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.2.1)\n","Requirement already satisfied: fastjsonschema in /usr/local/lib/python3.10/dist-packages (from nbformat>=5.3.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (2.18.0)\n","Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython>=5.0.0->ipykernel->openfl==1.5) (0.7.0)\n","Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=5.0.0->ipykernel->openfl==1.5) (0.2.6)\n","Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (0.5.0)\n","Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard->openfl==1.5) (3.2.2)\n","Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (21.2.0)\n","Collecting fqdn (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading fqdn-1.5.1-py3-none-any.whl (9.1 kB)\n","Collecting isoduration (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading isoduration-20.11.0-py3-none-any.whl (11 kB)\n","Collecting jsonpointer>1.13 (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading jsonpointer-2.4-py2.py3-none-any.whl (7.8 kB)\n","Collecting uri-template (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading uri_template-1.3.0-py3-none-any.whl (11 kB)\n","Requirement already satisfied: webcolors>=1.11 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (1.13)\n","Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (2.5)\n","Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.5.1)\n","Collecting arrow>=0.15.0 (from isoduration->jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading arrow-1.2.3-py3-none-any.whl (66 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.4/66.4 kB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hBuilding wheels for collected packages: openfl, flatten_json\n"," Building wheel for openfl (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for openfl: filename=openfl-1.5-py3-none-any.whl size=4553910 sha256=a31802405c712ba4e35aa69cb06a1146b21036417d42fa76308611957f18bab2\n"," Stored in directory: /tmp/pip-ephem-wheel-cache-2qx8cquj/wheels/f6/3c/d9/737f4ac0c34a1d61b6dfd70a66b90438754779ab630cc73420\n"," Building wheel for flatten_json (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for flatten_json: filename=flatten_json-0.1.13-py3-none-any.whl size=7964 sha256=9724dd259d515c43ad5f8702c0433c9fc8b9c3b4d25a9fdf0453c0cd44bcc743\n"," Stored in directory: /root/.cache/pip/wheels/c7/55/89/0dbf87571194b7ed4228b018280a8312e5af2d8f5954504672\n","Successfully built openfl flatten_json\n","Installing collected packages: json5, uri-template, tensorboardX, rfc3986-validator, rfc3339-validator, pyzmq, python-json-logger, overrides, jsonpointer, jedi, fqdn, flatten_json, dynaconf, Click, async-lru, jupyter-server-terminals, jupyter-client, docker, arrow, isoduration, jupyter-events, jupyter-server, jupyterlab-server, jupyter-lsp, jupyterlab, openfl\n"," Attempting uninstall: pyzmq\n"," Found existing installation: pyzmq 23.2.1\n"," Uninstalling pyzmq-23.2.1:\n"," Successfully uninstalled pyzmq-23.2.1\n"," Attempting uninstall: Click\n"," Found existing installation: click 8.1.7\n"," Uninstalling click-8.1.7:\n"," Successfully uninstalled click-8.1.7\n"," Attempting uninstall: jupyter-client\n"," Found existing installation: jupyter-client 6.1.12\n"," Uninstalling jupyter-client-6.1.12:\n"," Successfully uninstalled jupyter-client-6.1.12\n"," Attempting uninstall: jupyter-server\n"," Found existing installation: jupyter-server 1.24.0\n"," Uninstalling jupyter-server-1.24.0:\n"," Successfully uninstalled jupyter-server-1.24.0\n","\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n","notebook 6.5.5 requires jupyter-client<8,>=5.3.4, but you have jupyter-client 8.3.1 which is incompatible.\u001b[0m\u001b[31m\n","\u001b[0mSuccessfully installed Click-8.0.1 arrow-1.2.3 async-lru-2.0.4 docker-6.1.3 dynaconf-3.1.7 flatten_json-0.1.13 fqdn-1.5.1 isoduration-20.11.0 jedi-0.19.0 json5-0.9.14 jsonpointer-2.4 jupyter-client-8.3.1 jupyter-events-0.7.0 jupyter-lsp-2.2.0 jupyter-server-2.7.3 jupyter-server-terminals-0.4.4 jupyterlab-4.0.6 jupyterlab-server-2.25.0 openfl-1.5 overrides-7.4.0 python-json-logger-2.0.7 pyzmq-24.0.1 rfc3339-validator-0.1.4 rfc3986-validator-0.1.1 tensorboardX-2.6 uri-template-1.3.0\n"]},{"data":{"application/vnd.colab-display-data+json":{"pip_warning":{"packages":["zmq"]}}},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["\u001b[31mERROR: Could not open requirements file: [Errno 2] No such file or directory: 'workflow_interface_requirements.txt'\u001b[0m\u001b[31m\n","\u001b[0m"]}],"source":["# we will use pytorch_geometric and OpenFL in this notebook\n","!pip install git+https://github.com/securefederatedai/openfl.git\n","!pip install -r workflow_interface_requirements.txt"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":25386,"status":"ok","timestamp":1695296753572,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"wFuNmuFwZ6nB","outputId":"12fd0ec1-4447-4a84-b9ca-88744789c4e6"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting dill==0.3.6 (from -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 1))\n"," Downloading dill-0.3.6-py3-none-any.whl (110 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m110.5/110.5 kB\u001b[0m \u001b[31m1.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting metaflow==2.7.15 (from -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading metaflow-2.7.15-py2.py3-none-any.whl (863 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m864.0/864.0 kB\u001b[0m \u001b[31m25.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting ray==2.2.0 (from -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3))\n"," Downloading ray-2.2.0-cp310-cp310-manylinux2014_x86_64.whl (57.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.4/57.4 MB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.31.0)\n","Collecting boto3 (from metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading boto3-1.28.52-py3-none-any.whl (135 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m135.8/135.8 kB\u001b[0m \u001b[31m16.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting pylint (from metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading pylint-2.17.5-py3-none-any.whl (536 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m536.7/536.7 kB\u001b[0m \u001b[31m50.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: attrs in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (23.1.0)\n","Requirement already satisfied: click>=7.0 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (8.0.1)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (3.12.2)\n","Requirement already satisfied: jsonschema in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (4.19.0)\n","Requirement already satisfied: msgpack<2.0.0,>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.0.5)\n","Requirement already satisfied: protobuf!=3.19.5,>=3.15.3 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (3.20.3)\n","Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (6.0.1)\n","Requirement already satisfied: aiosignal in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.3.1)\n","Requirement already satisfied: frozenlist in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.4.0)\n","Collecting virtualenv>=20.0.24 (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3))\n"," Downloading virtualenv-20.24.5-py3-none-any.whl (3.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.7/3.7 MB\u001b[0m \u001b[31m95.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: grpcio>=1.42.0 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.57.0)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (23.1)\n","Requirement already satisfied: numpy>=1.19.3 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.23.5)\n","Collecting distlib<1,>=0.3.7 (from virtualenv>=20.0.24->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3))\n"," Downloading distlib-0.3.7-py2.py3-none-any.whl (468 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m468.9/468.9 kB\u001b[0m \u001b[31m39.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: platformdirs<4,>=3.9.1 in /usr/local/lib/python3.10/dist-packages (from virtualenv>=20.0.24->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (3.10.0)\n","Collecting botocore<1.32.0,>=1.31.52 (from boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading botocore-1.31.52-py3-none-any.whl (11.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.2/11.2 MB\u001b[0m \u001b[31m108.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jmespath<2.0.0,>=0.7.1 (from boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)\n","Collecting s3transfer<0.7.0,>=0.6.0 (from boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading s3transfer-0.6.2-py3-none-any.whl (79 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.8/79.8 kB\u001b[0m \u001b[31m10.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (2023.7.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (0.30.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (0.10.2)\n","Collecting astroid<=2.17.0-dev0,>=2.15.6 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading astroid-2.15.6-py3-none-any.whl (278 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m278.3/278.3 kB\u001b[0m \u001b[31m25.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting isort<6,>=4.2.5 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading isort-5.12.0-py3-none-any.whl (91 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m91.2/91.2 kB\u001b[0m \u001b[31m11.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting mccabe<0.8,>=0.6 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading mccabe-0.7.0-py2.py3-none-any.whl (7.3 kB)\n","Collecting tomlkit>=0.10.1 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading tomlkit-0.12.1-py3-none-any.whl (37 kB)\n","Requirement already satisfied: tomli>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.0.1)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (3.2.0)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (3.4)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.0.4)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2023.7.22)\n","Collecting lazy-object-proxy>=1.4.0 (from astroid<=2.17.0-dev0,>=2.15.6->pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (63 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m63.3/63.3 kB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: wrapt<2,>=1.11 in /usr/local/lib/python3.10/dist-packages (from astroid<=2.17.0-dev0,>=2.15.6->pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (1.15.0)\n","Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from astroid<=2.17.0-dev0,>=2.15.6->pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (4.5.0)\n","Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.10/dist-packages (from botocore<1.32.0,>=1.31.52->boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.8.2)\n","Collecting urllib3<3,>=1.21.1 (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading urllib3-1.26.16-py2.py3-none-any.whl (143 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m143.1/143.1 kB\u001b[0m \u001b[31m17.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.32.0,>=1.31.52->boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (1.16.0)\n","Installing collected packages: distlib, virtualenv, urllib3, tomlkit, mccabe, lazy-object-proxy, jmespath, isort, dill, botocore, astroid, s3transfer, pylint, ray, boto3, metaflow\n"," Attempting uninstall: urllib3\n"," Found existing installation: urllib3 2.0.4\n"," Uninstalling urllib3-2.0.4:\n"," Successfully uninstalled urllib3-2.0.4\n","Successfully installed astroid-2.15.6 boto3-1.28.52 botocore-1.31.52 dill-0.3.6 distlib-0.3.7 isort-5.12.0 jmespath-1.0.1 lazy-object-proxy-1.9.0 mccabe-0.7.0 metaflow-2.7.15 pylint-2.17.5 ray-2.2.0 s3transfer-0.6.2 tomlkit-0.12.1 urllib3-1.26.16 virtualenv-20.24.5\n"]}],"source":["# Uncomment this if running in Google Colab\n","!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n","import os\n","os.environ[\"USERNAME\"] = \"colab\""]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":6,"status":"ok","timestamp":1695296757737,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"-W8YeZd-Z-LS","outputId":"b15a3116-3272-42d3-a5ac-97ba93e92300"},"outputs":[{"name":"stdout","output_type":"stream","text":[" % Total % Received % Xferd Average Speed Time Time Time Current\n"," Dload Upload Total Spent Left Speed\n","100 4082 100 4082 0 0 9134 0 --:--:-- --:--:-- --:--:-- 9131\n"]}],"source":["# to fix a current issue:\n","!curl https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python/google/protobuf/internal/builder.py > /usr/local/lib/python3.10/dist-packages/google/protobuf/internal/builder.py\n"]},{"cell_type":"code","execution_count":7,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":22446,"status":"ok","timestamp":1695296784777,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"q1G2_n1baCIx","outputId":"4cc74b4d-68a9-4840-cfdd-4a9b5613a593"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting torch_geometric\n"," Downloading torch_geometric-2.3.1.tar.gz (661 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m661.6/661.6 kB\u001b[0m \u001b[31m3.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n"," Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n"," Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n","Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (4.66.1)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (1.23.5)\n","Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (1.11.2)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (3.1.2)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (2.31.0)\n","Requirement already satisfied: pyparsing in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (3.1.1)\n","Requirement already satisfied: scikit-learn in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (1.2.2)\n","Requirement already satisfied: psutil>=5.8.0 in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (5.9.5)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch_geometric) (2.1.3)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (3.2.0)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (3.4)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (1.26.16)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (2023.7.22)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->torch_geometric) (1.3.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->torch_geometric) (3.2.0)\n","Building wheels for collected packages: torch_geometric\n"," Building wheel for torch_geometric (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for torch_geometric: filename=torch_geometric-2.3.1-py3-none-any.whl size=910454 sha256=7118ed6bbb882d77cd933438cad5d595139be656de44e957402c540a92bdbf52\n"," Stored in directory: /root/.cache/pip/wheels/ac/dc/30/e2874821ff308ee67dcd7a66dbde912411e19e35a1addda028\n","Successfully built torch_geometric\n","Installing collected packages: torch_geometric\n","Successfully installed torch_geometric-2.3.1\n"]}],"source":["!pip install torch_geometric"]},{"cell_type":"markdown","metadata":{"id":"9SkklaKyZbMF"},"source":["## Stand-Alone"]},{"cell_type":"code","execution_count":8,"metadata":{"executionInfo":{"elapsed":5937,"status":"ok","timestamp":1695296790711,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"Rnxwwy5ga3rd"},"outputs":[],"source":["import argparse\n","import os.path as osp\n","\n","import torch\n","import torch.nn.functional as F\n","\n","from torch_geometric.datasets import TUDataset\n","from torch_geometric.loader import DataLoader\n","from torch_geometric.logging import init_wandb, log\n","from torch_geometric.nn import MLP, GINConv, global_add_pool"]},{"cell_type":"code","execution_count":9,"metadata":{"executionInfo":{"elapsed":5,"status":"ok","timestamp":1695296790712,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"S5H52e09bJGU"},"outputs":[],"source":["# parser = argparse.ArgumentParser()\n","# parser.add_argument('--dataset', type=str, default='MUTAG')\n","# parser.add_argument('--batch_size', type=int, default=128)\n","# parser.add_argument('--hidden_channels', type=int, default=32)\n","# parser.add_argument('--num_layers', type=int, default=5)\n","# parser.add_argument('--lr', type=float, default=0.01)\n","# parser.add_argument('--epochs', type=int, default=100)\n","# parser.add_argument('--wandb', action='store_true', help='Track experiment')\n","# args = parser.parse_args()\n","\n","class dummy:\n"," pass\n","args = dummy()\n","\n","args.dataset='MUTAG'\n","args.batch_size=32\n","args.hidden_channels=32\n","args.num_layers=5\n","args.lr=0.01\n","args.momentum=0.9\n","args.epochs=100\n","args.wandb=False"]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":4,"status":"ok","timestamp":1695296790712,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"ny-bTHNztY7O","outputId":"ab844580-6034-44fd-8c14-d190989d63b9"},"outputs":[{"name":"stdout","output_type":"stream","text":["Last Run ID is: 1794074\n"]}],"source":["## tensorboard unique id for runs\n","import random\n","unique_id_stand_alone = random.randint(10,2000000) # random 'unique' id for tensorboard clarity\n","print(\"Last Run ID is: \", unique_id_stand_alone)"]},{"cell_type":"code","execution_count":11,"metadata":{"executionInfo":{"elapsed":2861,"status":"ok","timestamp":1695296793569,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"c0TlMUSbt-8h"},"outputs":[],"source":["# tensorboard\n","from torch.utils.tensorboard import SummaryWriter\n","writer = SummaryWriter('./logs/pyg_and_openFL_standalone_reusing_PYG_Example{}_BS{}'.format(unique_id_stand_alone, args.batch_size), flush_secs=5)"]},{"cell_type":"code","execution_count":12,"metadata":{"executionInfo":{"elapsed":12,"status":"ok","timestamp":1695296793570,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"XRb2ZMF0uDgK"},"outputs":[],"source":["def write_metric(node_name, task_name, metric_name, metric, round_number):\n"," writer.add_scalar(\"{}/{}/{}\".format(node_name, task_name, metric_name),\n"," metric, round_number)"]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":821,"output_embedded_package_id":"1r0jXefV6w5IkXKDm_CPi-3oMAilf3KYP","resources":{"https://localhost:6006/?tensorboardColab=true":{"data":"PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMiwubWF0LXR5cG9ncmFwaHkgLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNCwubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IGg0e2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSBoNXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgaDZ7Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmcsLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS1zdHJvbmcsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5IHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IHB7bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGwsLm1hdC1jYXB0aW9uLC5tYXQtdHlwb2dyYXBoeSAubWF0LXNtYWxsLC5tYXQtdHlwb2dyYXBoeSAubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCByZ2JhKDAsMCwwLDApfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2Vye2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwNnB4KTt3aWR0aDoxMzMuMzMzMzkzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTA3cHgpO3dpZHRoOjEzMy4zMzM0MDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwOHB4KTt3aWR0aDoxMzMuMzMzNDEzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE2ZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMTVlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE0ZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS5tYXQtYmFkZ2V7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYmRiZGJkO2NvbG9yOiM3NTc1NzV9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggI2UwZTBlMH1bZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiNmZmZ9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6I2ZmZiAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciwubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzIxMjEyMTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgwLDAsMCwuMjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNzU3NTc1fS5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fS5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWhpbnR7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjojNjE2MTYxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM3NTc1NzV9Lm1hdC1saXN0LW9wdGlvbjpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiMyMTIxMjF9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fS5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmRkZWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZlNWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmNkMGNkfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmY5ODAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojMjEyMTIxfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNzU3NTc1fS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM3NTc1NzV9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6IzYxNjE2MX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYxNjE2MTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keS5kYXJrLW1vZGV7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiM0MmE1ZjV9Ym9keS5kYXJrLW1vZGUgYTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojYmE2OGM4fWJvZHkuZGFyay1tb2RlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtYXBwLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MHB4IDZweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MHB4IDlweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowcHggMTBweCAxNHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzIxMjEyMTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJke2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMzMDMwMzAgIWltcG9ydGFudH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGhlYWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Ym9keSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRmb290LGJvZHkuZGFyay1tb2RlIG1hdC1oZWFkZXItcm93LGJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgW21hdC1oZWFkZXItcm93XSxib2R5LmRhcmstbW9kZSBbbWF0LXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1mb290ZXItcm93XSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgbWF0LXJvdyxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtZm9vdGVyLXJvdyxib2R5LmRhcmstbW9kZSB0aC5tYXQtaGVhZGVyLWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjE1KX1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6bm90KC5tYXQtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb246ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcixib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgxODksMTg5LDE4OSwuNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiNjNmM2YzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1ib3R0b206bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZDojZmFmYWZhO2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6aW5oZXJpdH0KPC9zdHlsZT4KCjxzdHlsZT4KICBodG1sLAogIGJvZHkgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKTsKCiAgICAvKiBMZWdhY3kgbWVjaGFuaXNtIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHN1YnBpeGVsIGFudGktYWxpYXNpbmcgb24gbWFjT1MuCiAgICAgKgogICAgICogSW4gdGhlIHBhc3QgWzFdLCBtYWNPUyBzdWJwaXhlbCBBQSBjYXVzZWQgZXhjZXNzaXZlIGJvbGRpbmcgZm9yIGxpZ2h0LW9uLWRhcmsgdGV4dDsgdGhpcyBydWxlCiAgICAgKiBhdm9pZHMgdGhhdCBieSByZXF1ZXN0aW5nIG5vbi1zdWJwaXhlbCBBQSBhbHdheXMsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGljaCBpcwogICAgICogdG8gdXNlIHN1YnBpeGVsIEFBIHdoZW4gYXZhaWxhYmxlLiBUaGUgb3JpZ2luYWwgaXNzdWUgd2FzICJmaXhlZCIgYnkgcmVtb3Zpbmcgc3VicGl4ZWwgQUEgaW4KICAgICAqIG1hY09TIDE0IChNb2phdmUpLCBidXQgZm9yIGxlZ2FjeSByZWFzb25zIHRoZXkgcHJlc2VydmVkIHRoZSBib2xkaW5nIGVmZmVjdCBhcyBhbiBvcHRpb24uCiAgICAgKiBDaHJvbWUgdGhlbiBpbiB0dXJuIHVwZGF0ZWQgaXRzIGZvbnQgcmVuZGVyaW5nIHRvIGFwcGx5IHRoYXQgYm9sZGluZyBlZmZlY3QgWzJdLCB3aGljaCBtZWFucwogICAgICogdGhhdCBldmVuIHRob3VnaCB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGRvY3MgWzNdIHN1Z2dlc3QgdGhhdCBzZXR0aW5nIGBhbnRpYWxpYXNlZGAKICAgICAqIHdvdWxkIGhhdmUgbm8gZWZmZWN0IGZvciByZWNlbnQgdmVyc2lvbnMgb2YgbWFjT1MsIGl0IHN0aWxsIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgYm9sZGluZy4KICAgICAqCiAgICAgKiBbMV06IGh0dHA6Ly93d3cubGlnaHRlcnJhLmNvbS9hcnRpY2xlcy9tYWNvc3h0ZXh0YWFidWcvCiAgICAgKiBbMl06IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg1ODg2MQogICAgICogWzNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udC1zbW9vdGgKICAgICAqCiAgICAgKi8KCiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICB9CiAgbm9zY3JpcHQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBwYWRkaW5nOiAxMHB4OwogIH0KPC9zdHlsZT4KCjwvaGVhZD48Ym9keT48bm9zY3JpcHQ+CiAgICA8aDE+VGVuc29yQm9hcmQgcmVxdWlyZXMgSmF2YVNjcmlwdDwvaDE+CiAgICA8cD5QbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQgYW5kIHJlbG9hZCB0aGlzIHBhZ2UuPC9wPgogIDwvbm9zY3JpcHQ+PHRiLXdlYmFwcD48L3RiLXdlYmFwcD48c2NyaXB0IHNyYz0iaW5kZXguanM/X2ZpbGVfaGFzaD1jOWMyMGFkOSI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4=","headers":[["content-type","text/html; charset=utf-8"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/chart_worker.js?_file_hash=2c1e71c5":{"data":"KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9ZnVuY3Rpb24gZXcobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG53KG4sdCl7cmV0dXJuIG4ueFswXT09PXQueFswXSYmbi54WzFdPT09dC54WzFdJiZuLnlbMF09PT10LnlbMF0mJm4ueVsxXT09PXQueVsxXX12YXIgRGk9e2NvbnZlcnRSZWN0VG9FeHRlbnQ6UV8saXNXZWJHbDJTdXBwb3J0ZWQ6al8saXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dHcsYXJlUG9seWxpbmVzRXF1YWw6ZXcsYXJlRXh0ZW50c0VxdWFsOm53fTt2YXIgZHI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1mcihvbi5MSU5FQVIpLHRoaXMueVNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9RGkuY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTt2YXIgVG47KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KShUbnx8KFRuPXt9KSk7ZnVuY3Rpb24geWEobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpzLG9wYWNpdHk6b309aSxhPW47cmV0dXJuIWEmJiFzP251bGw6KGE9YSE9bnVsbD9hOnQoKSxhPWUoYSksYS5zdHlsZS5kaXNwbGF5PXM/IiI6Im5vbmUiLGEuc3R5bGUuc3Ryb2tlPXIsYS5zdHlsZS5vcGFjaXR5PVN0cmluZyhvIT1udWxsP286MSksYSl9dmFyIE9zPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFtpKjJdfSwke3RbaSoyKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7cy5zdHlsZS5maWxsPSJub25lIjtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3JldHVybiBzLnNldEF0dHJpYnV0ZSgiZCIsbyksdGhpcy5zdmcuYXBwZW5kQ2hpbGQocyksc30scz0+e2lmKCEodCE9bnVsbCYmdC5kYXRhKXx8IURpLmFyZVBvbHlsaW5lc0VxdWFsKGUsdD09bnVsbD92b2lkIDA6dC5kYXRhKSl7bGV0IG89dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtzLnNldEF0dHJpYnV0ZSgiZCIsbyl9cmV0dXJuIHN9LGkpO3JldHVybiByPT09bnVsbD9udWxsOihyLnN0eWxlLnN0cm9rZVdpZHRoPVN0cmluZyhpLndpZHRoKSx7ZG9tOnIsZGF0YTplfSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cixjb2xvcjpzfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55K28vMyxlLngrci8yLGUueStvLzMsZS54LGUueS1vKjIvM10pLGw9eWEodD09bnVsbD92b2lkIDA6dC5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIGw9PT1udWxsP251bGw6KGwuc3R5bGUuZmlsbD1zLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOnN9PWksbz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcocykpLGEpLGkpO3JldHVybiBvPT09bnVsbD9udWxsOntkb206byxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnMsY29sb3I6b309cixhPTIvTWF0aC5zcXJ0KDMpKnMsbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStzLzIsZS54LGUueS1zLzIsaS54LGkueS1zLzIsaS54K2EvMixpLnkrcy8yXSksYz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dS5jbGFzc0xpc3QuYWRkKCJ0cmFwZXpvaWQiKSx1LnN0eWxlLmZpbGw9Im5vbmUiO2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodSksdX0sdT0+e2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdX0scik7cmV0dXJuIGM9PT1udWxsP251bGw6KGMuc3R5bGUuZmlsbD1vLHtkb206YyxkYXRhOmx9KX1kaXNwb3NlKCl7fX07dmFyICRoPSIxMzciO3ZhciBpdz0wLEFtPTEscnc9Mjt2YXIgbDA9MSxzdz0yLEpzPTMsZW89MCxoZT0xLEhyPTIsYzA9MTt2YXIgam49MCxLcz0xLENtPTIsUm09MyxMbT00LG93PTUsSXI9MTAwLGF3PTEwMSxsdz0xMDIsUG09MTAzLERtPTEwNCxjdz0yMDAsdXc9MjAxLGh3PTIwMixmdz0yMDMsdTA9MjA0LGgwPTIwNSxkdz0yMDYscHc9MjA3LG13PTIwOCxndz0yMDkseHc9MjEwLHl3PTAsdnc9MSxfdz0yLHp1PTMsd3c9NCxNdz01LGJ3PTYsU3c9NyxDbD0wLEV3PTEsVHc9Mix0aT0wLEF3PTEsQ3c9MixSdz0zLEx3PTQsUHc9NSxmMD0zMDAsQW89MzAxLENvPTMwMixVdT0zMDMsQnU9MzA0LFJsPTMwNixLaD0zMDcsT3U9MWUzLFZlPTEwMDEsa3U9MTAwMixmZT0xMDAzLEltPTEwMDQ7dmFyIE5tPTEwMDU7dmFyIGJlPTEwMDYsRHc9MTAwNzt2YXIgTGw9MTAwODt2YXIgZWk9MTAwOSxJdz0xMDEwLE53PTEwMTEsbm89MTAxMixGdz0xMDEzLFFhPTEwMTQsVWk9MTAxNSxVcj0xMDE2LHp3PTEwMTcsVXc9MTAxOCxCcj0xMDIwLEJ3PTEwMjEsUmU9MTAyMyxPdz0xMDI0LGt3PTEwMjUsT2k9MTAyNixWcj0xMDI3LEh3PTEwMjgsVnc9MTAyOSxHdz0xMDMwLFd3PTEwMzEscXc9MTAzMyxLYz0zMzc3NixRYz0zMzc3NyxqYz0zMzc3OCx0dT0zMzc3OSxGbT0zNTg0MCx6bT0zNTg0MSxVbT0zNTg0MixCbT0zNTg0MyxYdz0zNjE5NixPbT0zNzQ5MixrbT0zNzQ5NixIbT0zNzgwOCxWbT0zNzgwOSxHbT0zNzgxMCxXbT0zNzgxMSxxbT0zNzgxMixYbT0zNzgxMyxZbT0zNzgxNCxabT0zNzgxNSxKbT0zNzgxNiwkbT0zNzgxNyxLbT0zNzgxOCxRbT0zNzgxOSxqbT0zNzgyMCx0Zz0zNzgyMSxlZz0zNjQ5MixZdz0yMjAwLFp3PTIyMDEsSnc9MjIwMixqYT0yMzAwLHRsPTIzMDEsZXU9MjMwMixOcj0yNDAwLEZyPTI0MDEsZWw9MjQwMixRaD0yNTAwLGQwPTI1MDEsJHc9MDt2YXIgcmk9M2UzLCR0PTMwMDEsS3c9MzIwMCxRdz0zMjAxLHRzPTAsanc9MTt2YXIgbnU9NzY4MDt2YXIgdE09NTE5LGlvPTM1MDQ0LG5sPTM1MDQ4O3ZhciBuZz0iMzAwIGVzIixIdT0xMDM1LEluPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDAmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVycztpW3RdPT09dm9pZCAwJiYoaVt0XT1bXSksaVt0XS5pbmRleE9mKGUpPT09LTEmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gaVt0XSE9PXZvaWQgMCYmaVt0XS5pbmRleE9mKGUpIT09LTF9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHIhPT12b2lkIDApe2xldCBzPXIuaW5kZXhPZihlKTtzIT09LTEmJnIuc3BsaWNlKHMsMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZihpIT09dm9pZCAwKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sdmU9W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKXZlW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIGl1PU1hdGguUEkvMTgwLFZ1PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHRuKCl7bGV0IG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGk9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKHZlW24mMjU1XSt2ZVtuPj44JjI1NV0rdmVbbj4+MTYmMjU1XSt2ZVtuPj4yNCYyNTVdKyItIit2ZVt0JjI1NV0rdmVbdD4+OCYyNTVdKyItIit2ZVt0Pj4xNiYxNXw2NF0rdmVbdD4+MjQmMjU1XSsiLSIrdmVbZSY2M3wxMjhdK3ZlW2U+PjgmMjU1XSsiLSIrdmVbZT4+MTYmMjU1XSt2ZVtlPj4yNCYyNTVdK3ZlW2kmMjU1XSt2ZVtpPj44JjI1NV0rdmVbaT4+MTYmMjU1XSt2ZVtpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEllKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBlTShuLHQpe3JldHVybihuJXQrdCkldH1mdW5jdGlvbiBydShuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gaWcobil7cmV0dXJuKG4mbi0xKT09PTAmJm4hPT0wfWZ1bmN0aW9uIG5NKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgSz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qaStyWzZdLHRoaXMueT1yWzFdKmUrcls0XSppK3JbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PXMqaS1vKnIrdC54LHRoaXMueT1zKnIrbyppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtLLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGRlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixzLG8sYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPXMsdVs1XT1sLHVbNl09aSx1WzddPW8sdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxoPWlbN10sZj1pWzJdLGQ9aVs1XSxnPWlbOF0seD1yWzBdLHY9clszXSxtPXJbNl0scD1yWzFdLGI9cls0XSxfPXJbN10sUz1yWzJdLEw9cls1XSxBPXJbOF07cmV0dXJuIHNbMF09byp4K2EqcCtsKlMsc1szXT1vKnYrYSpiK2wqTCxzWzZdPW8qbSthKl8rbCpBLHNbMV09Yyp4K3UqcCtoKlMsc1s0XT1jKnYrdSpiK2gqTCxzWzddPWMqbSt1Kl8raCpBLHNbMl09Zip4K2QqcCtnKlMsc1s1XT1mKnYrZCpiK2cqTCxzWzhdPWYqbStkKl8rZypBLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIGUqbyp1LWUqYSpjLWkqcyp1K2kqYSpsK3IqcypjLXIqbypsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11Km8tYSpjLGY9YSpsLXUqcyxkPWMqcy1vKmwsZz1lKmgraSpmK3IqZDtpZihnPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCB4PTEvZztyZXR1cm4gdFswXT1oKngsdFsxXT0ocipjLXUqaSkqeCx0WzJdPShhKmktcipvKSp4LHRbM109Zip4LHRbNF09KHUqZS1yKmwpKngsdFs1XT0ocipzLWEqZSkqeCx0WzZdPWQqeCx0WzddPShpKmwtYyplKSp4LHRbOF09KG8qZS1pKnMpKngsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxpLHIscyxvLGEpe2xldCBsPU1hdGguY29zKHMpLGM9TWF0aC5zaW4ocyk7cmV0dXJuIHRoaXMuc2V0KGkqbCxpKmMsLWkqKGwqbytjKmEpK28rdCwtcipjLHIqbCwtciooLWMqbytsKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0qPXQsaVszXSo9dCxpWzZdKj10LGlbMV0qPWUsaVs0XSo9ZSxpWzddKj1lLHRoaXN9cm90YXRlKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCkscj10aGlzLmVsZW1lbnRzLHM9clswXSxvPXJbM10sYT1yWzZdLGw9clsxXSxjPXJbNF0sdT1yWzddO3JldHVybiByWzBdPWUqcytpKmwsclszXT1lKm8raSpjLHJbNl09ZSphK2kqdSxyWzFdPS1pKnMrZSpsLHJbNF09LWkqbytlKmMscls3XT0taSphK2UqdSx0aGlzfXRyYW5zbGF0ZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0rPXQqaVsyXSxpWzNdKz10KmlbNV0saVs2XSs9dCppWzhdLGlbMV0rPWUqaVsyXSxpWzRdKz1lKmlbNV0saVs3XSs9ZSppWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZGUucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBwMChuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJvKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfXZhciBtMD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSwkZT17aDowLHM6MCxsOjB9LHZhPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gc3Uobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKyh0LW4pKjYqZTplPDEvMj90OmU8Mi8zP24rKHQtbikqNiooMi8zLWUpOm59ZnVuY3Rpb24gT3Iobil7cmV0dXJuIG48LjA0MDQ1P24qLjA3NzM5OTM4MDg6TWF0aC5wb3cobiouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIG91KG4pe3JldHVybiBuPC4wMDMxMzA4P24qMTIuOTI6MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGZ0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtyZXR1cm4gZT09PXZvaWQgMCYmaT09PXZvaWQgMD90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsaSl9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOnR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLnNldEhleCh0KTp0eXBlb2YgdD09InN0cmluZyImJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSh0JjI1NSkvMjU1LHRoaXN9c2V0UkdCKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPWksdGhpc31zZXRIU0wodCxlLGkpe2lmKHQ9ZU0odCwxKSxlPUllKGUsMCwxKSxpPUllKGksMCwxKSxlPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1pO2Vsc2V7bGV0IHI9aTw9LjU/aSooMStlKTppK2UtaSplLHM9MippLXI7dGhpcy5yPXN1KHMscix0KzEvMyksdGhpcy5nPXN1KHMscix0KSx0aGlzLmI9c3UocyxyLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKHIpe3IhPT12b2lkIDAmJnBhcnNlRmxvYXQocik8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgaTtpZihpPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgcixzPWlbMV0sbz1pWzJdO3N3aXRjaChzKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihyPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChyWzNdLDEwKSkvMjU1LGUocls0XSksdGhpcztpZihyPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChyWzNdLDEwKSkvMTAwLGUocls0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihyPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXtsZXQgYT1wYXJzZUZsb2F0KHJbMV0pLzM2MCxsPXBhcnNlSW50KHJbMl0sMTApLzEwMCxjPXBhcnNlSW50KHJbM10sMTApLzEwMDtyZXR1cm4gZShyWzRdKSx0aGlzLnNldEhTTChhLGwsYyl9YnJlYWt9fWVsc2UgaWYoaT0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCByPWlbMV0scz1yLmxlbmd0aDtpZihzPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDEpK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihzPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDQpK3IuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgZT1tMFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBlIT09dm9pZCAwP3RoaXMuc2V0SGV4KGUpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1Pcih0LnIpLHRoaXMuZz1Pcih0LmcpLHRoaXMuYj1Pcih0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPW91KHQuciksdGhpcy5nPW91KHQuZyksdGhpcy5iPW91KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IGU9dGhpcy5yLGk9dGhpcy5nLHI9dGhpcy5iLHM9TWF0aC5tYXgoZSxpLHIpLG89TWF0aC5taW4oZSxpLHIpLGEsbCxjPShvK3MpLzI7aWYobz09PXMpYT0wLGw9MDtlbHNle2xldCB1PXMtbztzd2l0Y2gobD1jPD0uNT91LyhzK28pOnUvKDItcy1vKSxzKXtjYXNlIGU6YT0oaS1yKS91KyhpPHI/NjowKTticmVhaztjYXNlIGk6YT0oci1lKS91KzI7YnJlYWs7Y2FzZSByOmE9KGUtaSkvdSs0O2JyZWFrfWEvPTZ9cmV0dXJuIHQuaD1hLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxpKXtyZXR1cm4gdGhpcy5nZXRIU0woJGUpLCRlLmgrPXQsJGUucys9ZSwkZS5sKz1pLHRoaXMuc2V0SFNMKCRlLmgsJGUucywkZS5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxlKXtyZXR1cm4gdGhpcy5yPXQucitlLnIsdGhpcy5nPXQuZytlLmcsdGhpcy5iPXQuYitlLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxlKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqZSx0aGlzLmcrPSh0LmctdGhpcy5nKSplLHRoaXMuYis9KHQuYi10aGlzLmIpKmUsdGhpc31sZXJwQ29sb3JzKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQucisoZS5yLXQucikqaSx0aGlzLmc9dC5nKyhlLmctdC5nKSppLHRoaXMuYj10LmIrKGUuYi10LmIpKmksdGhpc31sZXJwSFNMKHQsZSl7dGhpcy5nZXRIU0woJGUpLHQuZ2V0SFNMKHZhKTtsZXQgaT1ydSgkZS5oLHZhLmgsZSkscj1ydSgkZS5zLHZhLnMsZSkscz1ydSgkZS5sLHZhLmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKGkscixzKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07ZnQuTkFNRVM9bTA7ZnQucHJvdG90eXBlLmlzQ29sb3I9ITA7ZnQucHJvdG90eXBlLnI9MTtmdC5wcm90b3R5cGUuZz0xO2Z0LnByb3RvdHlwZS5iPTE7dmFyIHByLE5uPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PT0idW5kZWZpbmVkIilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ByPT09dm9pZCAwJiYocHI9cm8oImNhbnZhcyIpKSxwci53aWR0aD10LndpZHRoLHByLmhlaWdodD10LmhlaWdodDtsZXQgaT1wci5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9cHJ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1ybygiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCkscz1yLmRhdGE7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXT1PcihzW29dLzI1NSkqMjU1O3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1lbHNlIGlmKHQuZGF0YSl7bGV0IGU9dC5kYXRhLnNsaWNlKDApO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/ZVtpXT1NYXRoLmZsb29yKE9yKGVbaV0vMjU1KSoyNTUpOmVbaV09T3IoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LGlNPTAsYWU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0PWFlLkRFRkFVTFRfSU1BR0UsZT1hZS5ERUZBVUxUX01BUFBJTkcsaT1WZSxyPVZlLHM9YmUsbz1MbCxhPVJlLGw9ZWksYz0xLHU9cmkpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXIsdGhpcy5tYWdGaWx0ZXI9cyx0aGlzLm1pbkZpbHRlcj1vLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PWEsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBLKDAsMCksdGhpcy5yZXBlYXQ9bmV3IEsoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSygwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGRlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIWUmJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgcj10aGlzLmltYWdlO2lmKHIudXVpZD09PXZvaWQgMCYmKHIudXVpZD10bigpKSwhZSYmdC5pbWFnZXNbci51dWlkXT09PXZvaWQgMCl7bGV0IHM7aWYoQXJyYXkuaXNBcnJheShyKSl7cz1bXTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspcltvXS5pc0RhdGFUZXh0dXJlP3MucHVzaChhdShyW29dLmltYWdlKSk6cy5wdXNoKGF1KHJbb10pKX1lbHNlIHM9YXUocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOnN9fWkuaW1hZ2U9ci51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PWYwKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgT3U6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBWZTp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2Uga3U6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBPdTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFZlOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTthZS5ERUZBVUxUX0lNQUdFPXZvaWQgMDthZS5ERUZBVUxUX01BUFBJTkc9ZjA7YWUucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBhdShuKXtyZXR1cm4gdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/Tm4uZ2V0RGF0YVVSTChuKTpuLmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kYXRhKSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4uZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfXZhciBXdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXQudyE9PXZvaWQgMD90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10aGlzLncsbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0qcyx0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIrb1sxM10qcyx0aGlzLno9b1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKnMsdGhpcy53PW9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSpzLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLHMsbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0saD1sWzhdLGY9bFsxXSxkPWxbNV0sZz1sWzldLHg9bFsyXSx2PWxbNl0sbT1sWzEwXTtpZihNYXRoLmFicyh1LWYpPC4wMSYmTWF0aC5hYnMoaC14KTwuMDEmJk1hdGguYWJzKGctdik8LjAxKXtpZihNYXRoLmFicyh1K2YpPC4xJiZNYXRoLmFicyhoK3gpPC4xJiZNYXRoLmFicyhnK3YpPC4xJiZNYXRoLmFicyhjK2QrbS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IGI9KGMrMSkvMixfPShkKzEpLzIsUz0obSsxKS8yLEw9KHUrZikvNCxBPShoK3gpLzQsSD0oZyt2KS80O3JldHVybiBiPl8mJmI+Uz9iPC4wMT8oaT0wLHI9LjcwNzEwNjc4MSxzPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChiKSxyPUwvaSxzPUEvaSk6Xz5TP188LjAxPyhpPS43MDcxMDY3ODEscj0wLHM9LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KF8pLGk9TC9yLHM9SC9yKTpTPC4wMT8oaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSxzPTApOihzPU1hdGguc3FydChTKSxpPUEvcyxyPUgvcyksdGhpcy5zZXQoaSxyLHMsZSksdGhpc31sZXQgcD1NYXRoLnNxcnQoKHYtZykqKHYtZykrKGgteCkqKGgteCkrKGYtdSkqKGYtdSkpO3JldHVybiBNYXRoLmFicyhwKTwuMDAxJiYocD0xKSx0aGlzLng9KHYtZykvcCx0aGlzLnk9KGgteCkvcCx0aGlzLno9KGYtdSkvcCx0aGlzLnc9TWF0aC5hY29zKChjK2QrbS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtXdC5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBOZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFd0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgV3QoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBhZSh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9aS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/aS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PWkuaW50ZXJuYWxGb3JtYXQhPT12b2lkIDA/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9aS5taW5GaWx0ZXIhPT12b2lkIDA/aS5taW5GaWx0ZXI6YmUsdGhpcy5kZXB0aEJ1ZmZlcj1pLmRlcHRoQnVmZmVyIT09dm9pZCAwP2kuZGVwdGhCdWZmZXI6ITAsdGhpcy5zdGVuY2lsQnVmZmVyPWkuc3RlbmNpbEJ1ZmZlciE9PXZvaWQgMD9pLnN0ZW5jaWxCdWZmZXI6ITEsdGhpcy5kZXB0aFRleHR1cmU9aS5kZXB0aFRleHR1cmUhPT12b2lkIDA/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9T2JqZWN0LmFzc2lnbih7fSx0LnRleHR1cmUuaW1hZ2UpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O05lLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwO3ZhciBHdT1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBzPTA7czxpO3MrKyl0aGlzLnRleHR1cmVbc109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxzPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxzO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fTtHdS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgc289Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9aS5pZ25vcmVEZXB0aCE9PXZvaWQgMD9pLmlnbm9yZURlcHRoOiEwLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPWkudXNlUmVuZGVyVG9UZXh0dXJlIT09dm9pZCAwP2kudXNlUmVuZGVyVG9UZXh0dXJlOiExLHRoaXMudXNlUmVuZGVyYnVmZmVyPXRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPT09ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07c28ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgRWU9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixzLG8sYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGg9aVtyKzNdLGY9c1tvKzBdLGQ9c1tvKzFdLGc9c1tvKzJdLHg9c1tvKzNdO2lmKGE9PT0wKXt0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aDtyZXR1cm59aWYoYT09PTEpe3RbZSswXT1mLHRbZSsxXT1kLHRbZSsyXT1nLHRbZSszXT14O3JldHVybn1pZihoIT09eHx8bCE9PWZ8fGMhPT1kfHx1IT09Zyl7bGV0IHY9MS1hLG09bCpmK2MqZCt1KmcraCp4LHA9bT49MD8xOi0xLGI9MS1tKm07aWYoYj5OdW1iZXIuRVBTSUxPTil7bGV0IFM9TWF0aC5zcXJ0KGIpLEw9TWF0aC5hdGFuMihTLG0qcCk7dj1NYXRoLnNpbih2KkwpL1MsYT1NYXRoLnNpbihhKkwpL1N9bGV0IF89YSpwO2lmKGw9bCp2K2YqXyxjPWMqditkKl8sdT11KnYrZypfLGg9aCp2K3gqXyx2PT09MS1hKXtsZXQgUz0xL01hdGguc3FydChsKmwrYypjK3UqdStoKmgpO2wqPVMsYyo9Uyx1Kj1TLGgqPVN9fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixzLG8pe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10saD1zW29dLGY9c1tvKzFdLGQ9c1tvKzJdLGc9c1tvKzNdO3JldHVybiB0W2VdPWEqZyt1KmgrbCpkLWMqZix0W2UrMV09bCpnK3UqZitjKmgtYSpkLHRbZSsyXT1jKmcrdSpkK2EqZi1sKmgsdFtlKzNdPXUqZy1hKmgtbCpmLWMqZCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighKHQmJnQuaXNFdWxlcikpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksaD1hKHMvMiksZj1sKGkvMiksZD1sKHIvMiksZz1sKHMvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4gZSE9PSExJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7bGV0IGk9ZS8yLHI9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnIsdGhpcy5feT10Lnkqcix0aGlzLl96PXQueipyLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlPXQuZWxlbWVudHMsaT1lWzBdLHI9ZVs0XSxzPWVbOF0sbz1lWzFdLGE9ZVs1XSxsPWVbOV0sYz1lWzJdLHU9ZVs2XSxoPWVbMTBdLGY9aSthK2g7aWYoZj4wKXtsZXQgZD0uNS9NYXRoLnNxcnQoZisxKTt0aGlzLl93PS4yNS9kLHRoaXMuX3g9KHUtbCkqZCx0aGlzLl95PShzLWMpKmQsdGhpcy5fej0oby1yKSpkfWVsc2UgaWYoaT5hJiZpPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDEraS1hLWgpO3RoaXMuX3c9KHUtbCkvZCx0aGlzLl94PS4yNSpkLHRoaXMuX3k9KHIrbykvZCx0aGlzLl96PShzK2MpL2R9ZWxzZSBpZihhPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDErYS1pLWgpO3RoaXMuX3c9KHMtYykvZCx0aGlzLl94PShyK28pL2QsdGhpcy5feT0uMjUqZCx0aGlzLl96PShsK3UpL2R9ZWxzZXtsZXQgZD0yKk1hdGguc3FydCgxK2gtaS1hKTt0aGlzLl93PShvLXIpL2QsdGhpcy5feD0ocytjKS9kLHRoaXMuX3k9KGwrdSkvZCx0aGlzLl96PS4yNSpkfXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgaT10LmRvdChlKSsxO3JldHVybiBpPE51bWJlci5FUFNJTE9OPyhpPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9aSk6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1pKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9aSksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhJZSh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtsZXQgaT10aGlzLmFuZ2xlVG8odCk7aWYoaT09PTApcmV0dXJuIHRoaXM7bGV0IHI9TWF0aC5taW4oMSxlL2kpO3JldHVybiB0aGlzLnNsZXJwKHQsciksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiB0PT09MD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7bGV0IGk9dC5feCxyPXQuX3kscz10Ll96LG89dC5fdyxhPWUuX3gsbD1lLl95LGM9ZS5feix1PWUuX3c7cmV0dXJuIHRoaXMuX3g9aSp1K28qYStyKmMtcypsLHRoaXMuX3k9cip1K28qbCtzKmEtaSpjLHRoaXMuX3o9cyp1K28qYytpKmwtciphLHRoaXMuX3c9byp1LWkqYS1yKmwtcypjLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoZT09PTApcmV0dXJuIHRoaXM7aWYoZT09PTEpcmV0dXJuIHRoaXMuY29weSh0KTtsZXQgaT10aGlzLl94LHI9dGhpcy5feSxzPXRoaXMuX3osbz10aGlzLl93LGE9byp0Ll93K2kqdC5feCtyKnQuX3krcyp0Ll96O2lmKGE8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixhPS1hKTp0aGlzLmNvcHkodCksYT49MSlyZXR1cm4gdGhpcy5fdz1vLHRoaXMuX3g9aSx0aGlzLl95PXIsdGhpcy5fej1zLHRoaXM7bGV0IGw9MS1hKmE7aWYobDw9TnVtYmVyLkVQU0lMT04pe2xldCBkPTEtZTtyZXR1cm4gdGhpcy5fdz1kKm8rZSp0aGlzLl93LHRoaXMuX3g9ZCppK2UqdGhpcy5feCx0aGlzLl95PWQqcitlKnRoaXMuX3ksdGhpcy5fej1kKnMrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bGV0IGM9TWF0aC5zcXJ0KGwpLHU9TWF0aC5hdGFuMihjLGEpLGg9TWF0aC5zaW4oKDEtZSkqdSkvYyxmPU1hdGguc2luKGUqdSkvYztyZXR1cm4gdGhpcy5fdz1vKmgrdGhpcy5fdypmLHRoaXMuX3g9aSpoK3RoaXMuX3gqZix0aGlzLl95PXIqaCt0aGlzLl95KmYsdGhpcy5fej1zKmgrdGhpcy5feipmLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtsZXQgdD1NYXRoLnJhbmRvbSgpLGU9TWF0aC5zcXJ0KDEtdCksaT1NYXRoLnNxcnQodCkscj0yKk1hdGguUEkqTWF0aC5yYW5kb20oKSxzPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpO3JldHVybiB0aGlzLnNldChlKk1hdGguY29zKHIpLGkqTWF0aC5zaW4ocyksaSpNYXRoLmNvcyhzKSxlKk1hdGguc2luKHIpKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTtFZS5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO3ZhciBUPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24ocmcuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbM10qaStzWzZdKnIsdGhpcy55PXNbMV0qZStzWzRdKmkrc1s3XSpyLHRoaXMuej1zWzJdKmUrc1s1XSppK3NbOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LHM9dC5lbGVtZW50cyxvPTEvKHNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSk7cmV0dXJuIHRoaXMueD0oc1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0pKm8sdGhpcy55PShzWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSkqbyx0aGlzLno9KHNbMl0qZStzWzZdKmkrc1sxMF0qcitzWzE0XSkqbyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10Lngsbz10LnksYT10LnosbD10LncsYz1sKmUrbypyLWEqaSx1PWwqaSthKmUtcypyLGg9bCpyK3MqaS1vKmUsZj0tcyplLW8qaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrZiotcyt1Ki1hLWgqLW8sdGhpcy55PXUqbCtmKi1vK2gqLXMtYyotYSx0aGlzLno9aCpsK2YqLWErYyotby11Ki1zLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIsdGhpcy55PXNbMV0qZStzWzVdKmkrc1s5XSpyLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1zKmEsdGhpcy55PXMqby1pKmwsdGhpcy56PWkqYS1yKm8sdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKGU9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBsdS5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihsdSl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIobHUuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoZT09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoSWUoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsZSozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiBpIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS1jZih0LDIpKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O1QucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgbHU9bmV3IFQscmc9bmV3IEVlLEdlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMS8wLDEvMCwxLzApLGU9bmV3IFQoLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT1JaS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYoaSE9PXZvaWQgMClpZihlJiZpLmF0dHJpYnV0ZXMhPW51bGwmJmkuYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IHM9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgbz0wLGE9cy5jb3VudDtvPGE7bysrKUlpLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxvKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KElpKX1lbHNlIGkuYm91bmRpbmdCb3g9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGN1LmNvcHkoaS5ib3VuZGluZ0JveCksY3UuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oY3UpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltzXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLElpKSxJaS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoa3MpLF9hLnN1YlZlY3RvcnModGhpcy5tYXgsa3MpLG1yLnN1YlZlY3RvcnModC5hLGtzKSxnci5zdWJWZWN0b3JzKHQuYixrcykseHIuc3ViVmVjdG9ycyh0LmMsa3MpLHFuLnN1YlZlY3RvcnMoZ3IsbXIpLFhuLnN1YlZlY3RvcnMoeHIsZ3IpLE5pLnN1YlZlY3RvcnMobXIseHIpO2xldCBlPVswLC1xbi56LHFuLnksMCwtWG4ueixYbi55LDAsLU5pLnosTmkueSxxbi56LDAsLXFuLngsWG4ueiwwLC1Ybi54LE5pLnosMCwtTmkueCwtcW4ueSxxbi54LDAsLVhuLnksWG4ueCwwLC1OaS55LE5pLngsMF07cmV0dXJuIXV1KGUsbXIsZ3IseHIsX2EpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF1dShlLG1yLGdyLHhyLF9hKSk/ITE6KHdhLmNyb3NzVmVjdG9ycyhxbixYbiksZT1bd2EueCx3YS55LHdhLnpdLHV1KGUsbXIsZ3IseHIsX2EpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBJaS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoSWkpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihBblswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBblsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoQW4pLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0dlLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIEFuPVtuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVF0sSWk9bmV3IFQsY3U9bmV3IEdlLG1yPW5ldyBULGdyPW5ldyBULHhyPW5ldyBULHFuPW5ldyBULFhuPW5ldyBULE5pPW5ldyBULGtzPW5ldyBULF9hPW5ldyBULHdhPW5ldyBULEZpPW5ldyBUO2Z1bmN0aW9uIHV1KG4sdCxlLGkscil7Zm9yKGxldCBzPTAsbz1uLmxlbmd0aC0zO3M8PW87cys9Myl7RmkuZnJvbUFycmF5KG4scyk7bGV0IGE9ci54Kk1hdGguYWJzKEZpLngpK3IueSpNYXRoLmFicyhGaS55KStyLnoqTWF0aC5hYnMoRmkueiksbD10LmRvdChGaSksYz1lLmRvdChGaSksdT1pLmRvdChGaSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIHJNPW5ldyBHZSxzZz1uZXcgVCxNYT1uZXcgVCxodT1uZXcgVCxzaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2xldCBpPXRoaXMuY2VudGVyO2UhPT12b2lkIDA/aS5jb3B5KGUpOnJNLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtzPG87cysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbc10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7aHUuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1odS5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPShpLXRoaXMucmFkaXVzKSouNTt0aGlzLmNlbnRlci5hZGQoaHUubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9NYS5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpNYS5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLmFkZChNYSkpLHRoaXMuZXhwYW5kQnlQb2ludChzZy5jb3B5KHQuY2VudGVyKS5zdWIoTWEpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxDbj1uZXcgVCxmdT1uZXcgVCxiYT1uZXcgVCxZbj1uZXcgVCxkdT1uZXcgVCxTYT1uZXcgVCxwdT1uZXcgVCxvaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsQ24pKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9Q24uc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KENuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksQ24uZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7ZnUuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLGJhLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLFluLmNvcHkodGhpcy5vcmlnaW4pLnN1YihmdSk7bGV0IHM9dC5kaXN0YW5jZVRvKGUpKi41LG89LXRoaXMuZGlyZWN0aW9uLmRvdChiYSksYT1Zbi5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LVluLmRvdChiYSksYz1Zbi5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1vKm8pLGgsZixkLGc7aWYodT4wKWlmKGg9bypsLWEsZj1vKmEtbCxnPXMqdSxoPj0wKWlmKGY+PS1nKWlmKGY8PWcpe2xldCB4PTEvdTtoKj14LGYqPXgsZD1oKihoK28qZisyKmEpK2YqKG8qaCtmKzIqbCkrY31lbHNlIGY9cyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LXMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZz8oaD1NYXRoLm1heCgwLC0oLW8qcythKSksZj1oPjA/LXM6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk6Zjw9Zz8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShvKnMrYSkpLGY9aD4wP3M6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPW8+MD8tczpzLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KGJhKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoZnUpLGR9aW50ZXJzZWN0U3BoZXJlKHQsZSl7Q24uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9Q24uZG90KHRoaXMuZGlyZWN0aW9uKSxyPUNuLmRvdChDbiktaSppLHM9dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5zKXJldHVybiBudWxsO2xldCBvPU1hdGguc3FydChzLXIpLGE9aS1vLGw9aStvO3JldHVybiBhPDAmJmw8MD9udWxsOmE8MD90aGlzLmF0KGwsZSk6dGhpcy5hdChhLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZihlPT09MClyZXR1cm4gdC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPT09MD8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIGk9PT1udWxsP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIGU9PT0wfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLHMsbyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksaD0xL3RoaXMuZGlyZWN0aW9uLnosZj10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1mLngpKmMscj0odC5tYXgueC1mLngpKmMpOihpPSh0Lm1heC54LWYueCkqYyxyPSh0Lm1pbi54LWYueCkqYyksdT49MD8ocz0odC5taW4ueS1mLnkpKnUsbz0odC5tYXgueS1mLnkpKnUpOihzPSh0Lm1heC55LWYueSkqdSxvPSh0Lm1pbi55LWYueSkqdSksaT5vfHxzPnJ8fCgocz5pfHxpIT09aSkmJihpPXMpLChvPHJ8fHIhPT1yKSYmKHI9byksaD49MD8oYT0odC5taW4uei1mLnopKmgsbD0odC5tYXguei1mLnopKmgpOihhPSh0Lm1heC56LWYueikqaCxsPSh0Lm1pbi56LWYueikqaCksaT5sfHxhPnIpfHwoKGE+aXx8aSE9PWkpJiYoaT1hKSwobDxyfHxyIT09cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KHQsQ24pIT09bnVsbH1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLHMpe2R1LnN1YlZlY3RvcnMoZSx0KSxTYS5zdWJWZWN0b3JzKGksdCkscHUuY3Jvc3NWZWN0b3JzKGR1LFNhKTtsZXQgbz10aGlzLmRpcmVjdGlvbi5kb3QocHUpLGE7aWYobz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNlIGlmKG88MClhPS0xLG89LW87ZWxzZSByZXR1cm4gbnVsbDtZbi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFNhLmNyb3NzVmVjdG9ycyhZbixTYSkpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChkdS5jcm9zcyhZbikpO2lmKGM8MHx8bCtjPm8pcmV0dXJuIG51bGw7bGV0IHU9LWEqWW4uZG90KHB1KTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L28scyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LHd0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2KXtsZXQgbT10aGlzLmVsZW1lbnRzO3JldHVybiBtWzBdPXQsbVs0XT1lLG1bOF09aSxtWzEyXT1yLG1bMV09cyxtWzVdPW8sbVs5XT1hLG1bMTNdPWwsbVsyXT1jLG1bNl09dSxtWzEwXT1oLG1bMTRdPWYsbVszXT1kLG1bN109ZyxtWzExXT14LG1bMTVdPXYsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB3dCgpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCkscz0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKnMsZVs1XT1pWzVdKnMsZVs2XT1pWzZdKnMsZVs3XT0wLGVbOF09aVs4XSpvLGVbOV09aVs5XSpvLGVbMTBdPWlbMTBdKm8sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56LG89TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksdT1NYXRoLmNvcyhzKSxoPU1hdGguc2luKHMpO2lmKHQub3JkZXI9PT0iWFlaIil7bGV0IGY9byp1LGQ9bypoLGc9YSp1LHg9YSpoO2VbMF09bCp1LGVbNF09LWwqaCxlWzhdPWMsZVsxXT1kK2cqYyxlWzVdPWYteCpjLGVbOV09LWEqbCxlWzJdPXgtZipjLGVbNl09ZytkKmMsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWFoiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mK3gqYSxlWzRdPWcqYS1kLGVbOF09bypjLGVbMV09bypoLGVbNV09byp1LGVbOV09LWEsZVsyXT1kKmEtZyxlWzZdPXgrZiphLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWlhZIil7bGV0IGY9bCp1LGQ9bCpoLGc9Yyp1LHg9YypoO2VbMF09Zi14KmEsZVs0XT0tbypoLGVbOF09ZytkKmEsZVsxXT1kK2cqYSxlWzVdPW8qdSxlWzldPXgtZiphLGVbMl09LW8qYyxlWzZdPWEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWVgiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT1nKmMtZCxlWzhdPWYqYyt4LGVbMV09bCpoLGVbNV09eCpjK2YsZVs5XT1kKmMtZyxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWVpYIil7bGV0IGY9bypsLGQ9bypjLGc9YSpsLHg9YSpjO2VbMF09bCp1LGVbNF09eC1mKmgsZVs4XT1nKmgrZCxlWzFdPWgsZVs1XT1vKnUsZVs5XT0tYSp1LGVbMl09LWMqdSxlWzZdPWQqaCtnLGVbMTBdPWYteCpofWVsc2UgaWYodC5vcmRlcj09PSJYWlkiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT0taCxlWzhdPWMqdSxlWzFdPWYqaCt4LGVbNV09byp1LGVbOV09ZCpoLWcsZVsyXT1nKmgtZCxlWzZdPWEqdSxlWzEwXT14KmgrZn1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKHNNLHQsb00pfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4ga2Uuc3ViVmVjdG9ycyh0LGUpLGtlLmxlbmd0aFNxKCk9PT0wJiYoa2Uuej0xKSxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSksWm4ubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhpLnopPT09MT9rZS54Kz0xZS00OmtlLnorPTFlLTQsa2Uubm9ybWFsaXplKCksWm4uY3Jvc3NWZWN0b3JzKGksa2UpKSxabi5ub3JtYWxpemUoKSxFYS5jcm9zc1ZlY3RvcnMoa2UsWm4pLHJbMF09Wm4ueCxyWzRdPUVhLngscls4XT1rZS54LHJbMV09Wm4ueSxyWzVdPUVhLnkscls5XT1rZS55LHJbMl09Wm4ueixyWzZdPUVhLnosclsxMF09a2Uueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMscz10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGg9aVs1XSxmPWlbOV0sZD1pWzEzXSxnPWlbMl0seD1pWzZdLHY9aVsxMF0sbT1pWzE0XSxwPWlbM10sYj1pWzddLF89aVsxMV0sUz1pWzE1XSxMPXJbMF0sQT1yWzRdLEg9cls4XSx0dD1yWzEyXSxYPXJbMV0seT1yWzVdLFI9cls5XSxEPXJbMTNdLEY9clsyXSx6PXJbNl0sTj1yWzEwXSxWPXJbMTRdLFE9clszXSxhdD1yWzddLEc9clsxMV0sJD1yWzE1XTtyZXR1cm4gc1swXT1vKkwrYSpYK2wqRitjKlEsc1s0XT1vKkErYSp5K2wqeitjKmF0LHNbOF09bypIK2EqUitsKk4rYypHLHNbMTJdPW8qdHQrYSpEK2wqVitjKiQsc1sxXT11KkwraCpYK2YqRitkKlEsc1s1XT11KkEraCp5K2YqeitkKmF0LHNbOV09dSpIK2gqUitmKk4rZCpHLHNbMTNdPXUqdHQraCpEK2YqVitkKiQsc1syXT1nKkwreCpYK3YqRittKlEsc1s2XT1nKkEreCp5K3YqeittKmF0LHNbMTBdPWcqSCt4KlIrdipOK20qRyxzWzE0XT1nKnR0K3gqRCt2KlYrbSokLHNbM109cCpMK2IqWCtfKkYrUypRLHNbN109cCpBK2IqeStfKnorUyphdCxzWzExXT1wKkgrYipSK18qTitTKkcsc1sxNV09cCp0dCtiKkQrXypWK1MqJCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0scz10WzEyXSxvPXRbMV0sYT10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxkPXRbMTRdLGc9dFszXSx4PXRbN10sdj10WzExXSxtPXRbMTVdO3JldHVybiBnKigrcypsKmgtcipjKmgtcyphKmYraSpjKmYrciphKmQtaSpsKmQpK3gqKCtlKmwqZC1lKmMqZitzKm8qZi1yKm8qZCtyKmMqdS1zKmwqdSkrdiooK2UqYypoLWUqYSpkLXMqbypoK2kqbypkK3MqYSp1LWkqYyp1KSttKigtciphKnUtZSpsKmgrZSphKmYrcipvKmgtaSpvKmYraSpsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMsZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnopOihyWzEyXT10LHJbMTNdPWUsclsxNF09aSksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLHM9dFszXSxvPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLGQ9dFsxMV0sZz10WzEyXSx4PXRbMTNdLHY9dFsxNF0sbT10WzE1XSxwPWgqdipjLXgqZipjK3gqbCpkLWEqdipkLWgqbCptK2EqZiptLGI9ZypmKmMtdSp2KmMtZypsKmQrbyp2KmQrdSpsKm0tbypmKm0sXz11KngqYy1nKmgqYytnKmEqZC1vKngqZC11KmEqbStvKmgqbSxTPWcqaCpsLXUqeCpsLWcqYSpmK28qeCpmK3UqYSp2LW8qaCp2LEw9ZSpwK2kqYityKl8rcypTO2lmKEw9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgQT0xL0w7cmV0dXJuIHRbMF09cCpBLHRbMV09KHgqZipzLWgqdipzLXgqcipkK2kqdipkK2gqciptLWkqZiptKSpBLHRbMl09KGEqdipzLXgqbCpzK3gqcipjLWkqdipjLWEqciptK2kqbCptKSpBLHRbM109KGgqbCpzLWEqZipzLWgqcipjK2kqZipjK2EqcipkLWkqbCpkKSpBLHRbNF09YipBLHRbNV09KHUqdipzLWcqZipzK2cqcipkLWUqdipkLXUqciptK2UqZiptKSpBLHRbNl09KGcqbCpzLW8qdipzLWcqcipjK2UqdipjK28qciptLWUqbCptKSpBLHRbN109KG8qZipzLXUqbCpzK3UqcipjLWUqZipjLW8qcipkK2UqbCpkKSpBLHRbOF09XypBLHRbOV09KGcqaCpzLXUqeCpzLWcqaSpkK2UqeCpkK3UqaSptLWUqaCptKSpBLHRbMTBdPShvKngqcy1nKmEqcytnKmkqYy1lKngqYy1vKmkqbStlKmEqbSkqQSx0WzExXT0odSphKnMtbypoKnMtdSppKmMrZSpoKmMrbyppKmQtZSphKmQpKkEsdFsxMl09UypBLHRbMTNdPSh1Kngqci1nKmgqcitnKmkqZi1lKngqZi11KmkqditlKmgqdikqQSx0WzE0XT0oZyphKnItbyp4KnItZyppKmwrZSp4KmwrbyppKnYtZSphKnYpKkEsdFsxNV09KG8qaCpyLXUqYSpyK3UqaSpsLWUqaCpsLW8qaSpmK2UqYSpmKSpBLHRoaXN9c2NhbGUodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxzPXQuejtyZXR1cm4gZVswXSo9aSxlWzRdKj1yLGVbOF0qPXMsZVsxXSo9aSxlWzVdKj1yLGVbOV0qPXMsZVsyXSo9aSxlWzZdKj1yLGVbMTBdKj1zLGVbM10qPWksZVs3XSo9cixlWzExXSo9cyx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLGk9dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0scj10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoZSxpLHIpKX1tYWtlVHJhbnNsYXRpb24odCxlLGkpe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsaSwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLWksMCwwLGksZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLDAsaSwwLDAsMSwwLDAsLWksMCxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLWksMCwwLGksZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLHM9MS1pLG89dC54LGE9dC55LGw9dC56LGM9cypvLHU9cyphO3JldHVybiB0aGlzLnNldChjKm8raSxjKmEtcipsLGMqbCtyKmEsMCxjKmErcipsLHUqYStpLHUqbC1yKm8sMCxjKmwtciphLHUqbCtyKm8scypsKmwraSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxpLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLGkscixzLG8pe3JldHVybiB0aGlzLnNldCgxLGkscywwLHQsMSxvLDAsZSxyLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz1lLl94LG89ZS5feSxhPWUuX3osbD1lLl93LGM9cytzLHU9bytvLGg9YSthLGY9cypjLGQ9cyp1LGc9cypoLHg9byp1LHY9bypoLG09YSpoLHA9bCpjLGI9bCp1LF89bCpoLFM9aS54LEw9aS55LEE9aS56O3JldHVybiByWzBdPSgxLSh4K20pKSpTLHJbMV09KGQrXykqUyxyWzJdPShnLWIpKlMsclszXT0wLHJbNF09KGQtXykqTCxyWzVdPSgxLShmK20pKSpMLHJbNl09KHYrcCkqTCxyWzddPTAscls4XT0oZytiKSpBLHJbOV09KHYtcCkqQSxyWzEwXT0oMS0oZit4KSkqQSxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz15ci5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLG89eXIuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxhPXlyLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYocz0tcyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0sS2UuY29weSh0aGlzKTtsZXQgYz0xL3MsdT0xL28saD0xL2E7cmV0dXJuIEtlLmVsZW1lbnRzWzBdKj1jLEtlLmVsZW1lbnRzWzFdKj1jLEtlLmVsZW1lbnRzWzJdKj1jLEtlLmVsZW1lbnRzWzRdKj11LEtlLmVsZW1lbnRzWzVdKj11LEtlLmVsZW1lbnRzWzZdKj11LEtlLmVsZW1lbnRzWzhdKj1oLEtlLmVsZW1lbnRzWzldKj1oLEtlLmVsZW1lbnRzWzEwXSo9aCxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChLZSksaS54PXMsaS55PW8saS56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixzLG8pe289PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBhPXRoaXMuZWxlbWVudHMsbD0yKnMvKGUtdCksYz0yKnMvKGktciksdT0oZSt0KS8oZS10KSxoPShpK3IpLyhpLXIpLGY9LShvK3MpLyhvLXMpLGQ9LTIqbypzLyhvLXMpO3JldHVybiBhWzBdPWwsYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1oLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1mLGFbMTRdPWQsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8oby1zKSxoPShlK3QpKmwsZj0oaStyKSpjLGQ9KG8rcykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0taCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1mLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07d3QucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgeXI9bmV3IFQsS2U9bmV3IHd0LHNNPW5ldyBUKDAsMCwwKSxvTT1uZXcgVCgxLDEsMSksWm49bmV3IFQsRWE9bmV3IFQsa2U9bmV3IFQsb2c9bmV3IHd0LGFnPW5ldyBFZSxhaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPWFpLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLHM9clswXSxvPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxmPXJbNl0sZD1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEllKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUllKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxkKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihJZShmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1JZShoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsZCksdGhpcy5fej1NYXRoLmF0YW4yKGwscykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oSWUobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgscykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtSWUobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKC11LGQpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSxpPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gb2cubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgob2csZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBhZy5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhZyx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx0WzNdIT09dm9pZCAwJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBUKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07YWkucHJvdG90eXBlLmlzRXVsZXI9ITA7YWkuRGVmYXVsdE9yZGVyPSJYWVoiO2FpLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIGlsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4odGhpcy5tYXNrJnQubWFzaykhPT0wfWlzRW5hYmxlZCh0KXtyZXR1cm4odGhpcy5tYXNrJigxPDx0fDApKSE9PTB9fSxhTT0wLGxnPW5ldyBULHZyPW5ldyBFZSxSbj1uZXcgd3QsVGE9bmV3IFQsSHM9bmV3IFQsbE09bmV3IFQsY009bmV3IEVlLGNnPW5ldyBUKDEsMCwwKSx1Zz1uZXcgVCgwLDEsMCksaGc9bmV3IFQoMCwwLDEpLHVNPXt0eXBlOiJhZGRlZCJ9LGZnPXt0eXBlOiJyZW1vdmVkIn0sa3Q9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6YU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1rdC5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgVCxlPW5ldyBhaSxpPW5ldyBFZSxyPW5ldyBUKDEsMSwxKTtmdW5jdGlvbiBzKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9ZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfWUuX29uQ2hhbmdlKHMpLGkuX29uQ2hhbmdlKG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IHd0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBkZX19KSx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5tYXRyaXhXb3JsZD1uZXcgd3QsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPWt0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgaWwsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQsZSl7cmV0dXJuIHZyLnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkodnIpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ciksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhjZyx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh1Zyx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhoZyx0KX10cmFuc2xhdGVPbkF4aXModCxlKXtyZXR1cm4gbGcuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChsZy5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhjZyx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1Zyx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhoZyx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9UYS5jb3B5KHQpOlRhLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9Sbi5sb29rQXQoSHMsVGEsdGhpcy51cCk6Um4ubG9va0F0KFRhLEhzLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHImJihSbi5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksdnIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJuKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodnIuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KHQucGFyZW50IT09bnVsbCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudCh1TSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIGUhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoZmcpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChmZyl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdC5wYXJlbnQhPT1udWxsJiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoUm4pLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBvPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG99fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSHMsdCxsTSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyxjTSx0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCBlPXRoaXMucGFyZW50O2UhPT1udWxsJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7bGV0IGk9dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZpIT09bnVsbCYmaS51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksZT09PSEwKXtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKylyW3NdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixpPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxpLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCByPXt9O3IudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHIubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoci5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKHIucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihyLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoci5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBzKGEsbCl7cmV0dXJuIGFbbC51dWlkXT09PXZvaWQgMCYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9yLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihyLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihyLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtyLmdlb21ldHJ5PXModC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBhPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihhIT09dm9pZCAwJiZhLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9YS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107cyh0LnNoYXBlcyxoKX1lbHNlIHModC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKHIuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxyLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYocyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxyLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IGE9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKWEucHVzaChzKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtyLm1hdGVyaWFsPWF9ZWxzZSByLm1hdGVyaWFsPXModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7ci5jaGlsZHJlbj1bXTtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlblthXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe3IuYW5pbWF0aW9ucz1bXTtmb3IobGV0IGE9MDthPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7YSsrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbYV07ci5hbmltYXRpb25zLnB1c2gocyh0LmFuaW1hdGlvbnMsbCkpfX1pZihlKXtsZXQgYT1vKHQuZ2VvbWV0cmllcyksbD1vKHQubWF0ZXJpYWxzKSxjPW8odC50ZXh0dXJlcyksdT1vKHQuaW1hZ2VzKSxoPW8odC5zaGFwZXMpLGY9byh0LnNrZWxldG9ucyksZD1vKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihpLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9ZiksZC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1kKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIG8oYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxlPT09ITApZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCByPXQuY2hpbGRyZW5baV07dGhpcy5hZGQoci5jbG9uZSgpKX1yZXR1cm4gdGhpc319O2t0LkRlZmF1bHRVcD1uZXcgVCgwLDEsMCk7a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7a3QucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIFFlPW5ldyBULExuPW5ldyBULG11PW5ldyBULFBuPW5ldyBULF9yPW5ldyBULHdyPW5ldyBULGRnPW5ldyBULGd1PW5ldyBULHh1PW5ldyBULHl1PW5ldyBULHJlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLFFlLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKFFlKTtsZXQgcz1yLmxlbmd0aFNxKCk7cmV0dXJuIHM+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KHMpKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLHMpe1FlLnN1YlZlY3RvcnMocixlKSxMbi5zdWJWZWN0b3JzKGksZSksbXUuc3ViVmVjdG9ycyh0LGUpO2xldCBvPVFlLmRvdChRZSksYT1RZS5kb3QoTG4pLGw9UWUuZG90KG11KSxjPUxuLmRvdChMbiksdT1Mbi5kb3QobXUpLGg9bypjLWEqYTtpZihoPT09MClyZXR1cm4gcy5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxkPShjKmwtYSp1KSpmLGc9KG8qdS1hKmwpKmY7cmV0dXJuIHMuc2V0KDEtZC1nLGcsZCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsUG4pLFBuLng+PTAmJlBuLnk+PTAmJlBuLngrUG4ueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixzLG8sYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihzLFBuLngpLGwuYWRkU2NhbGVkVmVjdG9yKG8sUG4ueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxQbi56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBRZS5zdWJWZWN0b3JzKGksZSksTG4uc3ViVmVjdG9ycyh0LGUpLFFlLmNyb3NzKExuKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gUWUuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxMbi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLFFlLmNyb3NzKExuKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiByZS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gcmUuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixzKXtyZXR1cm4gcmUuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixzKX1jb250YWluc1BvaW50KHQpe3JldHVybiByZS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIHJlLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBpPXRoaXMuYSxyPXRoaXMuYixzPXRoaXMuYyxvLGE7X3Iuc3ViVmVjdG9ycyhyLGkpLHdyLnN1YlZlY3RvcnMocyxpKSxndS5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9X3IuZG90KGd1KSxjPXdyLmRvdChndSk7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO3h1LnN1YlZlY3RvcnModCxyKTtsZXQgdT1fci5kb3QoeHUpLGg9d3IuZG90KHh1KTtpZih1Pj0wJiZoPD11KXJldHVybiBlLmNvcHkocik7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBvPWwvKGwtdSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKTt5dS5zdWJWZWN0b3JzKHQscyk7bGV0IGQ9X3IuZG90KHl1KSxnPXdyLmRvdCh5dSk7aWYoZz49MCYmZDw9ZylyZXR1cm4gZS5jb3B5KHMpO2xldCB4PWQqYy1sKmc7aWYoeDw9MCYmYz49MCYmZzw9MClyZXR1cm4gYT1jLyhjLWcpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSk7bGV0IHY9dSpnLWQqaDtpZih2PD0wJiZoLXU+PTAmJmQtZz49MClyZXR1cm4gZGcuc3ViVmVjdG9ycyhzLHIpLGE9KGgtdSkvKGgtdSsoZC1nKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihkZyxhKTtsZXQgbT0xLyh2K3grZik7cmV0dXJuIG89eCptLGE9ZiptLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoX3IsbykuYWRkU2NhbGVkVmVjdG9yKHdyLGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LGhNPTAseGU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aE0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPUtzLHRoaXMuc2lkZT1lbyx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9dTAsdGhpcy5ibGVuZERzdD1oMCx0aGlzLmJsZW5kRXF1YXRpb249SXIsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz16dSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPXRNLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW51LHRoaXMuc3RlbmNpbFpGYWlsPW51LHRoaXMuc3RlbmNpbFpQYXNzPW51LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYoaT09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKGU9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9aT09PWMwO2NvbnRpbnVlfWxldCByPXRoaXNbZV07aWYocj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIik7Y29udGludWV9ciYmci5pc0NvbG9yP3Iuc2V0KGkpOnImJnIuaXNWZWN0b3IzJiZpJiZpLmlzVmVjdG9yMz9yLmNvcHkoaSk6dGhpc1tlXT1pfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2UmJih0PXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihpLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHRoaXMucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHRoaXMubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXRoaXMuc2hlZW4pLHRoaXMuc2hlZW5Db2xvciYmdGhpcy5zaGVlbkNvbG9yLmlzQ29sb3ImJihpLnNoZWVuQ29sb3I9dGhpcy5zaGVlbkNvbG9yLmdldEhleCgpKSx0aGlzLnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10aGlzLnNoZWVuUm91Z2huZXNzKSx0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihpLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJnRoaXMuZW1pc3NpdmVJbnRlbnNpdHkhPT0xJiYoaS5lbWlzc2l2ZUludGVuc2l0eT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihpLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXJDb2xvciYmdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3ImJihpLnNwZWN1bGFyQ29sb3I9dGhpcy5zcGVjdWxhckNvbG9yLmdldEhleCgpKSx0aGlzLnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx0aGlzLmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx0aGlzLmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihpLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKGkubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKGkuYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihpLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQsaS5saWdodE1hcEludGVuc2l0eT10aGlzLmxpZ2h0TWFwSW50ZW5zaXR5KSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKGkuYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxpLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKGkuYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsaS5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihpLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLGkubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihpLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxpLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsaS5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoaS5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCYmdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPXRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJDb2xvck1hcCYmdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJDb2xvck1hcD10aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihpLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04odCkudXVpZCx0aGlzLmNvbWJpbmUhPT12b2lkIDAmJihpLmNvbWJpbmU9dGhpcy5jb21iaW5lKSksdGhpcy5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSksdGhpcy5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSksdGhpcy5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10aGlzLnJlZnJhY3Rpb25SYXRpbyksdGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihpLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dGhpcy50cmFuc21pc3Npb24pLHRoaXMudHJhbnNtaXNzaW9uTWFwJiZ0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUmJihpLnRyYW5zbWlzc2lvbk1hcD10aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04odCkudXVpZCksdGhpcy50aGlja25lc3MhPT12b2lkIDAmJihpLnRoaWNrbmVzcz10aGlzLnRoaWNrbmVzcyksdGhpcy50aGlja25lc3NNYXAmJnRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSYmKGkudGhpY2tuZXNzTWFwPXRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0aGlzLmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uQ29sb3I9dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmdldEhleCgpKSx0aGlzLnNpemUhPT12b2lkIDAmJihpLnNpemU9dGhpcy5zaXplKSx0aGlzLnNoYWRvd1NpZGUhPT1udWxsJiYoaS5zaGFkb3dTaWRlPXRoaXMuc2hhZG93U2lkZSksdGhpcy5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksdGhpcy5ibGVuZGluZyE9PUtzJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSx0aGlzLnNpZGUhPT1lbyYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksdGhpcy50cmFuc3BhcmVudD09PSEwJiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiZ0aGlzLnJvdGF0aW9uIT09MCYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksdGhpcy5wb2x5Z29uT2Zmc2V0PT09ITAmJihpLnBvbHlnb25PZmZzZXQ9ITApLHRoaXMucG9seWdvbk9mZnNldEZhY3RvciE9PTAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0aGlzLnBvbHlnb25PZmZzZXRVbml0cyE9PTAmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJnRoaXMubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx0aGlzLmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx0aGlzLmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx0aGlzLnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10aGlzLnNjYWxlKSx0aGlzLmRpdGhlcmluZz09PSEwJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksdGhpcy5hbHBoYVRvQ292ZXJhZ2U9PT0hMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT09PSEwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLHRoaXMud2lyZWZyYW1lPT09ITAmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSx0aGlzLndpcmVmcmFtZUxpbmVjYXAhPT0icm91bmQiJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksdGhpcy53aXJlZnJhbWVMaW5lam9pbiE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLHRoaXMuZmxhdFNoYWRpbmc9PT0hMCYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMudG9uZU1hcHBlZD09PSExJiYoaS50b25lTWFwcGVkPSExKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO2Z1bmN0aW9uIHIocyl7bGV0IG89W107Zm9yKGxldCBhIGluIHMpe2xldCBsPXNbYV07ZGVsZXRlIGwubWV0YWRhdGEsby5wdXNoKGwpfXJldHVybiBvfWlmKGUpe2xldCBzPXIodC50ZXh0dXJlcyksbz1yKHQuaW1hZ2VzKTtzLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1zKSxvLmxlbmd0aD4wJiYoaS5pbWFnZXM9byl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYoZSE9PW51bGwpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW3NdPWVbc10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt4ZS5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIga2k9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2tpLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBKdD1uZXcgVCxBYT1uZXcgSyxRdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPWk9PT0hMCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5pdGVtU2l6ZSxpKj1lLml0ZW1TaXplO2ZvcihsZXQgcj0wLHM9dGhpcy5pdGVtU2l6ZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IGZ0KSxlW2krK109by5yLGVbaSsrXT1vLmcsZVtpKytdPW8uYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IEspLGVbaSsrXT1vLngsZVtpKytdPW8ueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IFQpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgV3QpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56LGVbaSsrXT1vLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUFhLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxBYS5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLEFhLngsQWEueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSnQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPXMsdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1pbyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1F0LnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgcmw9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fTt2YXIgc2w9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fSxXdT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O1d1LnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGVlPWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19O3ZhciBmTT0wLHFlPW5ldyB3dCx2dT1uZXcga3QsTXI9bmV3IFQsSGU9bmV3IEdlLFZzPW5ldyBHZSxnZT1uZXcgVCxIdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpmTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KHAwKHQpP3NsOnJsKSh0LDEpOnRoaXMuaW5kZXg9dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdIT09dm9pZCAwfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO2UhPT12b2lkIDAmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKGkhPT12b2lkIDApe2xldCBzPW5ldyBkZSgpLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KHMpLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHIhPT12b2lkIDAmJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSx0aGlzLmJvdW5kaW5nQm94IT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nU3BoZXJlIT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVZKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHFlLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9bG9va0F0KHQpe3JldHVybiB2dS5sb29rQXQodCksdnUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQodnUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKE1yKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShNci54LE1yLnksTXIueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dFtpXTtlLnB1c2gocy54LHMueSxzLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe3RoaXMuYm91bmRpbmdCb3g9PT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1uZXcgR2UpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyBUKC0xLzAsLTEvMCwtMS8wKSxuZXcgVCgxLzAsMS8wLDEvMCkpO3JldHVybn1pZih0IT09dm9pZCAwKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2xldCBzPWVbaV07SGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShzKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSxnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEhlLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5tYXgpKX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe3RoaXMuYm91bmRpbmdTcGhlcmU9PT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgc2kpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBULDEvMCk7cmV0dXJufWlmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEhlLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2xldCBhPWVbc107VnMuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShhKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKEhlLm1pbixWcy5taW4pLEhlLmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnMoSGUubWF4LFZzLm1heCksSGUuZXhwYW5kQnlQb2ludChnZSkpOihIZS5leHBhbmRCeVBvaW50KFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChWcy5tYXgpKX1IZS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQuY291bnQ7czxvO3MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQscykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKTtpZihlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsdT1hLmNvdW50O2M8dTtjKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihNci5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksZ2UuYWRkKE1yKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZih0PT09bnVsbHx8ZS5wb3NpdGlvbj09PXZvaWQgMHx8ZS5ub3JtYWw9PT12b2lkIDB8fGUudXY9PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO3JldHVybn1sZXQgaT10LmFycmF5LHI9ZS5wb3NpdGlvbi5hcnJheSxzPWUubm9ybWFsLmFycmF5LG89ZS51di5hcnJheSxhPXIubGVuZ3RoLzM7ZS50YW5nZW50PT09dm9pZCAwJiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoNCphKSw0KSk7bGV0IGw9ZS50YW5nZW50LmFycmF5LGM9W10sdT1bXTtmb3IobGV0IFg9MDtYPGE7WCsrKWNbWF09bmV3IFQsdVtYXT1uZXcgVDtsZXQgaD1uZXcgVCxmPW5ldyBULGQ9bmV3IFQsZz1uZXcgSyx4PW5ldyBLLHY9bmV3IEssbT1uZXcgVCxwPW5ldyBUO2Z1bmN0aW9uIGIoWCx5LFIpe2guZnJvbUFycmF5KHIsWCozKSxmLmZyb21BcnJheShyLHkqMyksZC5mcm9tQXJyYXkocixSKjMpLGcuZnJvbUFycmF5KG8sWCoyKSx4LmZyb21BcnJheShvLHkqMiksdi5mcm9tQXJyYXkobyxSKjIpLGYuc3ViKGgpLGQuc3ViKGgpLHguc3ViKGcpLHYuc3ViKGcpO2xldCBEPTEvKHgueCp2Lnktdi54KngueSk7IWlzRmluaXRlKEQpfHwobS5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKHYueSkuYWRkU2NhbGVkVmVjdG9yKGQsLXgueSkubXVsdGlwbHlTY2FsYXIoRCkscC5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKHgueCkuYWRkU2NhbGVkVmVjdG9yKGYsLXYueCkubXVsdGlwbHlTY2FsYXIoRCksY1tYXS5hZGQobSksY1t5XS5hZGQobSksY1tSXS5hZGQobSksdVtYXS5hZGQocCksdVt5XS5hZGQocCksdVtSXS5hZGQocCkpfWxldCBfPXRoaXMuZ3JvdXBzO18ubGVuZ3RoPT09MCYmKF89W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKWIoaVt6KzBdLGlbeisxXSxpW3orMl0pfWxldCBTPW5ldyBULEw9bmV3IFQsQT1uZXcgVCxIPW5ldyBUO2Z1bmN0aW9uIHR0KFgpe0EuZnJvbUFycmF5KHMsWCozKSxILmNvcHkoQSk7bGV0IHk9Y1tYXTtTLmNvcHkoeSksUy5zdWIoQS5tdWx0aXBseVNjYWxhcihBLmRvdCh5KSkpLm5vcm1hbGl6ZSgpLEwuY3Jvc3NWZWN0b3JzKEgseSk7bGV0IEQ9TC5kb3QodVtYXSk8MD8tMToxO2xbWCo0XT1TLngsbFtYKjQrMV09Uy55LGxbWCo0KzJdPVMueixsW1gqNCszXT1EfWZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKXR0KGlbeiswXSksdHQoaVt6KzFdKSx0dChpW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihlIT09dm9pZCAwKXtsZXQgaT10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYoaT09PXZvaWQgMClpPW5ldyBRdChuZXcgRmxvYXQzMkFycmF5KGUuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsaSk7ZWxzZSBmb3IobGV0IGY9MCxkPWkuY291bnQ7ZjxkO2YrKylpLnNldFhZWihmLDAsMCwwKTtsZXQgcj1uZXcgVCxzPW5ldyBULG89bmV3IFQsYT1uZXcgVCxsPW5ldyBULGM9bmV3IFQsdT1uZXcgVCxoPW5ldyBUO2lmKHQpZm9yKGxldCBmPTAsZD10LmNvdW50O2Y8ZDtmKz0zKXtsZXQgZz10LmdldFgoZiswKSx4PXQuZ2V0WChmKzEpLHY9dC5nZXRYKGYrMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZykscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdiksdS5zdWJWZWN0b3JzKG8scyksaC5zdWJWZWN0b3JzKHIscyksdS5jcm9zcyhoKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxnKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx2KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihnLGEueCxhLnksYS56KSxpLnNldFhZWih4LGwueCxsLnksbC56KSxpLnNldFhZWih2LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLGQ9ZS5jb3VudDtmPGQ7Zis9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzApLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisyKSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGkuc2V0WFlaKGYrMCx1LngsdS55LHUueiksaS5zZXRYWVooZisxLHUueCx1LnksdS56KSxpLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59ZT09PXZvaWQgMCYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHQuYXR0cmlidXRlc1tyXT09PXZvaWQgMCljb250aW51ZTtsZXQgbz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLG8ubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylvW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLGdlLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsZ2UueCxnZS55LGdlLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxoPWEubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGQ9MCxnPTA7Zm9yKGxldCB4PTAsdj1sLmxlbmd0aDt4PHY7eCsrKXthLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ZD1sW3hdKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6ZD1sW3hdKnU7Zm9yKGxldCBtPTA7bTx1O20rKylmW2crK109Y1tkKytdfXJldHVybiBuZXcgUXQoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IGU9bmV3IEh0LGk9dGhpcy5pbmRleC5hcnJheSxyPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGEgaW4gcil7bGV0IGw9clthXSxjPXQobCxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBzPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBzKXtsZXQgbD1bXSxjPXNbYV07Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLGQ9dChmLGkpO2wucHVzaChkKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPW8ubGVuZ3RoO2E8bDthKyspe2xldCBjPW9bYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O2UhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl7bGV0IGM9aVtsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCByPXt9LHM9ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9Y1toXTt1LnB1c2goZC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKHJbbF09dSxzPSEwKX1zJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgbz10aGlzLmdyb3VwcztvLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gYSE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IGU9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgaT10LmluZGV4O2khPT1udWxsJiZ0aGlzLnNldEluZGV4KGkuY2xvbmUoZSkpO2xldCByPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gcil7bGV0IHU9cltjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUoZSkpfWxldCBzPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1bXSxoPXNbY107Zm9yKGxldCBmPTAsZD1oLmxlbmd0aDtmPGQ7ZisrKXUucHVzaChoW2ZdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PW8ubGVuZ3RoO2M8dTtjKyspe2xldCBoPW9bY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgYT10LmJvdW5kaW5nQm94O2EhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtIdC5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgcGc9bmV3IHd0LGJyPW5ldyBvaSxfdT1uZXcgc2ksSm49bmV3IFQsJG49bmV3IFQsS249bmV3IFQsd3U9bmV3IFQsTXU9bmV3IFQsYnU9bmV3IFQsQ2E9bmV3IFQsUmE9bmV3IFQsTGE9bmV3IFQsUGE9bmV3IEssRGE9bmV3IEssSWE9bmV3IEssU3U9bmV3IFQsTmE9bmV3IFQsb2U9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0PW5ldyBIdCxlPW5ldyBraSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYociE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXtsZXQgYT1yW3NdLm5hbWV8fFN0cmluZyhzKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPXN9fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0cztlIT09dm9pZCAwJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxzPXRoaXMubWF0cml4V29ybGQ7aWYocj09PXZvaWQgMHx8KGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLF91LmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksX3UuYXBwbHlNYXRyaXg0KHMpLHQucmF5LmludGVyc2VjdHNTcGhlcmUoX3UpPT09ITEpfHwocGcuY29weShzKS5pbnZlcnQoKSxici5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQocGcpLGkuYm91bmRpbmdCb3ghPT1udWxsJiZici5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgbztpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1pLmF0dHJpYnV0ZXMudXYsZj1pLmF0dHJpYnV0ZXMudXYyLGQ9aS5ncm91cHMsZz1pLmRyYXdSYW5nZTtpZihhIT09bnVsbClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPWEuZ2V0WChTKSxIPWEuZ2V0WChTKzEpLHR0PWEuZ2V0WChTKzIpO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4oYS5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9YS5nZXRYKG0pLF89YS5nZXRYKG0rMSksUz1hLmdldFgobSsyKTtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHg9MCx2PWQubGVuZ3RoO3g8djt4Kyspe2xldCBtPWRbeF0scD1yW20ubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heChtLnN0YXJ0LGcuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbihtLnN0YXJ0K20uY291bnQsZy5zdGFydCtnLmNvdW50KSk7Zm9yKGxldCBTPWIsTD1fO1M8TDtTKz0zKXtsZXQgQT1TLEg9UysxLHR0PVMrMjtvPUZhKHRoaXMscCx0LGJyLGwsYyx1LGgsZixBLEgsdHQpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKFMvMyksby5mYWNlLm1hdGVyaWFsSW5kZXg9bS5tYXRlcmlhbEluZGV4LGUucHVzaChvKSl9fWVsc2V7bGV0IHg9TWF0aC5tYXgoMCxnLnN0YXJ0KSx2PU1hdGgubWluKGwuY291bnQsZy5zdGFydCtnLmNvdW50KTtmb3IobGV0IG09eCxwPXY7bTxwO20rPTMpe2xldCBiPW0sXz1tKzEsUz1tKzI7bz1GYSh0aGlzLHIsdCxicixsLGMsdSxoLGYsYixfLFMpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG0vMyksZS5wdXNoKG8pKX19fWVsc2UgaS5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX07b2UucHJvdG90eXBlLmlzTWVzaD0hMDtmdW5jdGlvbiBkTShuLHQsZSxpLHIscyxvLGEpe2xldCBsO2lmKHQuc2lkZT09PWhlP2w9aS5pbnRlcnNlY3RUcmlhbmdsZShvLHMsciwhMCxhKTpsPWkuaW50ZXJzZWN0VHJpYW5nbGUocixzLG8sdC5zaWRlIT09SHIsYSksbD09PW51bGwpcmV0dXJuIG51bGw7TmEuY29weShhKSxOYS5hcHBseU1hdHJpeDQobi5tYXRyaXhXb3JsZCk7bGV0IGM9ZS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTmEpO3JldHVybiBjPGUubmVhcnx8Yz5lLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50Ok5hLmNsb25lKCksb2JqZWN0Om59fWZ1bmN0aW9uIEZhKG4sdCxlLGkscixzLG8sYSxsLGMsdSxoKXtKbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksJG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLEtuLmZyb21CdWZmZXJBdHRyaWJ1dGUocixoKTtsZXQgZj1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihzJiZmKXtDYS5zZXQoMCwwLDApLFJhLnNldCgwLDAsMCksTGEuc2V0KDAsMCwwKTtmb3IobGV0IGc9MCx4PXMubGVuZ3RoO2c8eDtnKyspe2xldCB2PWZbZ10sbT1zW2ddO3YhPT0wJiYod3UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGMpLE11LmZyb21CdWZmZXJBdHRyaWJ1dGUobSx1KSxidS5mcm9tQnVmZmVyQXR0cmlidXRlKG0saCksbz8oQ2EuYWRkU2NhbGVkVmVjdG9yKHd1LHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUsdikpOihDYS5hZGRTY2FsZWRWZWN0b3Iod3Uuc3ViKEpuKSx2KSxSYS5hZGRTY2FsZWRWZWN0b3IoTXUuc3ViKCRuKSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUuc3ViKEtuKSx2KSkpfUpuLmFkZChDYSksJG4uYWRkKFJhKSxLbi5hZGQoTGEpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLEpuKSxuLmJvbmVUcmFuc2Zvcm0odSwkbiksbi5ib25lVHJhbnNmb3JtKGgsS24pKTtsZXQgZD1kTShuLHQsZSxpLEpuLCRuLEtuLFN1KTtpZihkKXthJiYoUGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLERhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxJYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCksZC51dj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpLGwmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxkLnV2Mj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpO2xldCBnPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IFQsbWF0ZXJpYWxJbmRleDowfTtyZS5nZXROb3JtYWwoSm4sJG4sS24sZy5ub3JtYWwpLGQuZmFjZT1nfXJldHVybiBkfXZhciBIaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxzPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpzLGRlcHRoU2VnbWVudHM6b307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iocikscz1NYXRoLmZsb29yKHMpLG89TWF0aC5mbG9vcihvKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAsZD0wO2coInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQsbyxzLDApLGcoInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQsbyxzLDEpLGcoIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIsbywyKSxnKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIsbywzKSxnKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixzLDQpLGcoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIscyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShoLDIpKTtmdW5jdGlvbiBnKHgsdixtLHAsYixfLFMsTCxBLEgsdHQpe2xldCBYPV8vQSx5PVMvSCxSPV8vMixEPVMvMixGPUwvMix6PUErMSxOPUgrMSxWPTAsUT0wLGF0PW5ldyBUO2ZvcihsZXQgRz0wO0c8TjtHKyspe2xldCAkPUcqeS1EO2ZvcihsZXQgbHQ9MDtsdDx6O2x0Kyspe2xldCBkdD1sdCpYLVI7YXRbeF09ZHQqcCxhdFt2XT0kKmIsYXRbbV09RixjLnB1c2goYXQueCxhdC55LGF0LnopLGF0W3hdPTAsYXRbdl09MCxhdFttXT1MPjA/MTotMSx1LnB1c2goYXQueCxhdC55LGF0LnopLGgucHVzaChsdC9BKSxoLnB1c2goMS1HL0gpLFYrPTF9fWZvcihsZXQgRz0wO0c8SDtHKyspZm9yKGxldCAkPTA7JDxBOyQrKyl7bGV0IGx0PWYrJCt6KkcsZHQ9ZiskK3oqKEcrMSkseHQ9ZisoJCsxKSt6KihHKzEpLGs9ZisoJCsxKSt6Kkc7bC5wdXNoKGx0LGR0LGspLGwucHVzaChkdCx4dCxrKSxRKz02fWEuYWRkR3JvdXAoZCxRLHR0KSxkKz1RLGYrPVZ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEhpKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gR3Iobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3RbZV1baV09ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/dFtlXVtpXT1yLnNsaWNlKCk6dFtlXVtpXT1yfX1yZXR1cm4gdH1mdW5jdGlvbiBNZShuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9R3IobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBwTT17Y2xvbmU6R3IsbWVyZ2U6TWV9LG1NPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLGdNPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsRm49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPW1NLHRoaXMuZnJhZ21lbnRTaGFkZXI9Z00sdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9R3IodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgbz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO28mJm8uaXNUZXh0dXJlP2UudW5pZm9ybXNbcl09e3R5cGU6InQiLHZhbHVlOm8udG9KU09OKHQpLnV1aWR9Om8mJm8uaXNDb2xvcj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJjIix2YWx1ZTpvLmdldEhleCgpfTpvJiZvLmlzVmVjdG9yMj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP2UudW5pZm9ybXNbcl09e3R5cGU6InYzIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjQ/ZS51bmlmb3Jtc1tyXT17dHlwZToidjQiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzTWF0cml4Mz9lLnVuaWZvcm1zW3JdPXt0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P2UudW5pZm9ybXNbcl09e3R5cGU6Im00Iix2YWx1ZTpvLnRvQXJyYXkoKX06ZS51bmlmb3Jtc1tyXT17dmFsdWU6b319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tyXT09PSEwJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtGbi5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgb289Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyB3dCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O29vLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgU2U9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1WdSoyKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKGl1Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gVnUqMipNYXRoLmF0YW4oTWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy5hc3BlY3Q9dC9lLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9cyx0aGlzLnZpZXcuaGVpZ2h0PW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxzPS0uNSpyLG89dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1vLmZ1bGxXaWR0aCxjPW8uZnVsbEhlaWdodDtzKz1vLm9mZnNldFgqci9sLGUtPW8ub2Zmc2V0WSppL2Mscio9by53aWR0aC9sLGkqPW8uaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0O2EhPT0wJiYocys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUocyxzK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07U2UucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFNyPTkwLEVyPTEsYW89Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLGkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFNlKFNyLEVyLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgVCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBzPW5ldyBTZShTcixFcix0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3IFQoLTEsMCwwKSksdGhpcy5hZGQocyk7bGV0IG89bmV3IFNlKFNyLEVyLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwwLDEpLG8ubG9va0F0KG5ldyBUKDAsMSwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFNlKFNyLEVyLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgVCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgU2UoU3IsRXIsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBUKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFNlKFNyLEVyLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgVCgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixzLG8sYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sV3I9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxlPWUhPT12b2lkIDA/ZTpBbyxzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O1dyLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBvbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSxlPWV8fHt9LHRoaXMudGV4dHVyZT1uZXcgV3Iodm9pZCAwLGUubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ZS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlciE9PXZvaWQgMD9lLm1pbkZpbHRlcjpiZX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVJlLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LHI9bmV3IEhpKDUsNSw1KSxzPW5ldyBGbih7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6R3IoaS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmkudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmkuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxibGVuZGluZzpqbn0pO3MudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IG89bmV3IG9lKHIscyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1MbCYmKGUubWluRmlsdGVyPWJlKSxuZXcgYW8oMSwxMCx0aGlzKS51cGRhdGUodCxvKSxlLm1pbkZpbHRlcj1hLG8uZ2VvbWV0cnkuZGlzcG9zZSgpLG8ubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IHM9dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IG89MDtvPDY7bysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsbyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQocyl9fTtvbC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIEV1PW5ldyBULHhNPW5ldyBULHlNPW5ldyBkZSxqZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBUKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPUV1LnN1YlZlY3RvcnMoaSxlKS5jcm9zcyh4TS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoRXUpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKHI9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IHM9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gczwwfHxzPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIocykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8eU0uZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEV1KS5hcHBseU1hdHJpeDQodCkscz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KHMpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2plLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBUcj1uZXcgc2ksemE9bmV3IFQscXI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgamUsZT1uZXcgamUsaT1uZXcgamUscj1uZXcgamUscz1uZXcgamUsbz1uZXcgamUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLHMsb119c2V0KHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShzKSxhWzVdLmNvcHkobyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLHM9aVsxXSxvPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGg9aVs3XSxmPWlbOF0sZD1pWzldLGc9aVsxMF0seD1pWzExXSx2PWlbMTJdLG09aVsxM10scD1pWzE0XSxiPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGgtbCx4LWYsYi12KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGgrbCx4K2YsYit2KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStzLGgrYyx4K2QsYittKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1zLGgtYyx4LWQsYi1tKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLGgtdSx4LWcsYi1wKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLGgrdSx4K2csYitwKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gZS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksVHIuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBUci5jZW50ZXIuc2V0KDAsMCwwKSxUci5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsVHIuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShUcil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgcz0wO3M8NjtzKyspaWYoZVtzXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoemEueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHphLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx6YS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoemEpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gZzAoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKHMsbyl7ZShzLG8pLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZlIT09bnVsbCYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24ocyl7ZT1zfSxzZXRDb250ZXh0OmZ1bmN0aW9uKHMpe249c319fWZ1bmN0aW9uIHZNKG4sdCl7bGV0IGU9dC5pc1dlYkdMMixpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxkPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsZCksbi5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZz01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2c9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9nPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmc9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9nPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2c9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9nPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9nPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZz01MTIxKSx7YnVmZmVyOmQsdHlwZTpnLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBzKGMsdSxoKXtsZXQgZj11LmFycmF5LGQ9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoaCxjKSxkLmNvdW50PT09LTE/bi5idWZmZXJTdWJEYXRhKGgsMCxmKTooZT9uLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYsZC5vZmZzZXQsZC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGgsZC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KGQub2Zmc2V0LGQub2Zmc2V0K2QuY291bnQpKSxkLmNvdW50PS0xKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9ZnVuY3Rpb24gYShjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9aS5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1pLmdldChjKTtoPT09dm9pZCAwP2kuc2V0KGMscihjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYocyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6byxyZW1vdmU6YSx1cGRhdGU6bH19dmFyIGxvPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpyfTtsZXQgcz10LzIsbz1lLzIsYT1NYXRoLmZsb29yKGkpLGw9TWF0aC5mbG9vcihyKSxjPWErMSx1PWwrMSxoPXQvYSxmPWUvbCxkPVtdLGc9W10seD1bXSx2PVtdO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBwPW0qZi1vO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBfPWIqaC1zO2cucHVzaChfLC1wLDApLHgucHVzaCgwLDAsMSksdi5wdXNoKGIvYSksdi5wdXNoKDEtbS9sKX19Zm9yKGxldCBtPTA7bTxsO20rKylmb3IobGV0IHA9MDtwPGE7cCsrKXtsZXQgYj1wK2MqbSxfPXArYyoobSsxKSxTPXArMStjKihtKzEpLEw9cCsxK2MqbTtkLnB1c2goYixfLEwpLGQucHVzaChfLFMsTCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShnLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoeCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUodiwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgbG8odC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfTT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZzsKI2VuZGlmYCx3TT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsTU09YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxiTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCXVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0OwojZW5kaWZgLFNNPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsRU09YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxUTT0idmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixBTT1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLENNPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxSTT1gI2lmZGVmIFVTRV9CVU1QTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwOwoJdW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7Cgl2ZWMyIGRIZHh5X2Z3ZCgpIHsKCQl2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7CgkJdmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApOwoJCWZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDsKCQlmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDsKCQlmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDsKCQlyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTsKCX0KCXZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZOID0gc3VyZl9ub3JtOwoJCXZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTsKCQl2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7CgkJZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247CgkJdmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApOwoJfQojZW5kaWZgLExNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsUE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxETT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKI2VuZGlmYCxJTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxOTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsRk09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCXZhcnlpbmcgdmVjMyB2Q29sb3I7CiNlbmRpZmAsek09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxVTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsQk09YCNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMKI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODYKI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NgojZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3CiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNQojZGVmaW5lIEVQU0lMT04gMWUtNgojaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKQpmbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9CmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfQpmbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9CmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfQpmbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfQpoaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkgewoJY29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzOwoJaGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7CglyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTsKfQojaWZkZWYgSElHSF9QUkVDSVNJT04KCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9CiNlbHNlCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7CgkJZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTsKCQlyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7Cgl9CiNlbmRpZgpzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7Cgl2ZWMzIGNvbG9yOwoJdmVjMyBkaXJlY3Rpb247Cglib29sIHZpc2libGU7Cn07CnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7Cgl2ZWMzIGRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGRpcmVjdFNwZWN1bGFyOwoJdmVjMyBpbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGluZGlyZWN0U3BlY3VsYXI7Cn07CnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHsKCXZlYzMgcG9zaXRpb247Cgl2ZWMzIG5vcm1hbDsKCXZlYzMgdmlld0RpcjsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXZlYzMgY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKfTsKdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwp9CnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7Cn0KbWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7CgltYXQzIHRtcDsKCXRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApOwoJdG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7Cgl0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTsKCXJldHVybiB0bXA7Cn0KZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsKCXZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTsKCXJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApOwp9CmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkgewoJcmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wOwp9CnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7CglmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTsKCWZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTsKCXJldHVybiB2ZWMyKCB1LCB2ICk7Cn1gLE9NPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLGtNPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxITT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7CiNlbmRpZmAsVk09YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxXTT1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7CiNlbmRpZmAscU09ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsWE09YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLFlNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZlYzMgY2FtZXJhVG9GcmFnOwoJCWlmICggaXNPcnRob2dyYXBoaWMgKSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZWxzZQoJCXZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0OwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApOwoJI2Vsc2UKCQl2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYICkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKQoJCW91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTsKCSNlbmRpZgojZW5kaWZgLFpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLEpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLCRNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQkKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgojZW5kaWZgLEtNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUU09YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxqTT1gI2lmZGVmIFVTRV9GT0cKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwojZW5kaWZgLHRiPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxlYj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxuYj1gI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7CiNlbmRpZgp2ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7CglmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApOwoJdmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTsKCSNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCQlyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7CgkjZWxzZQoJCXJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7CgkjZW5kaWYKfWAsaWI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxyYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNiPWB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTsKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTsKR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7CmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwpiYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDsKYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwp2TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApOwp2SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7Cgl2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwpmbG9hdCBkb3ROTDsKdmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJdkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwojZW5kaWYKI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJdkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWZgLG9iPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGFiPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLGxiPWBUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7YCxjYj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCx1Yj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGhiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyU2hpbmluZXNzOwoJZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKfTsKdm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9CbGlublBob25nCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZwojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxmYj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsZGI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxwYj1gCkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uOwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCWdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVBvaW50TGlnaHQgcG9pbnRMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKQoJCXBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVNwb3RMaWdodCBzcG90TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdOwoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTICkKCQlzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCURpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKQoJCWRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhICkKCVJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkgewoJCXJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdOwoJCVJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJdmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CgkjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwICkKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCQlpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJfQoJCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmYCxtYj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLGdiPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAseGI9YCNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUICkKCWdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTsKI2VuZGlmYCx5Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCx2Yj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX2I9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7CgkJdklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7CgkjZWxzZQoJCWlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkgewoJCQlnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7CgkJCWdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udzsKCQl9CgkjZW5kaWYKI2VuZGlmYCx3Yj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCxNYj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxiYj1gI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKQoJdmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nOwojZW5kaWZgLFNiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsRWI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxUYj1gI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDsKI2VuZGlmYCxBYj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxDYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUmI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDEgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZWxzZQoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZW5kaWYKCQl9CgkjZWxzZQoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdOwoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLExiPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsUGI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsRGI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsSWI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTmI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLEZiPWAjaWZkZWYgVVNFX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlOwojZW5kaWYKI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJdW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsKI2VuZGlmCiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApCgl2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTsKCQl2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApOwoJCXZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7CgkJdmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTsKCQl2ZWMzIE4gPSBzdXJmX25vcm07CgkJdmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTsKCQl2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApOwoJCXZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7CgkJdmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTsKCQlmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApOwoJCWZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApOwoJCXJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApOwoJfQojZW5kaWZgLHpiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxVYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxCYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CiNlbmRpZmAsT2I9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCxrYj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxIYj1gI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEEKCWdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7CiNlbmRpZmAsVmI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxHYj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFdiPWAjaWZkZWYgRElUSEVSSU5HCgl2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHsKCQlmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7CgkJdmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTsKCQlkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApOwoJCXJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7Cgl9CiNlbmRpZmAscWI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxYYj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxZYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCWZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7CgkJcmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7Cgl9Cgl2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHsKCQlyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7Cgl9CglmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXsKCQlmbG9hdCBvY2NsdXNpb24gPSAxLjA7CgkJdmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTsKCQlmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApOwoJCWlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7CgkJCWZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDsKCQkJZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTsKCQkJZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTsJCQlzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTsJCQlvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTsKCQl9CgkJcmV0dXJuIG9jY2x1c2lvbjsKCX0KCWZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7CgkJZmxvYXQgc2hhZG93ID0gMS4wOwoJCXNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53OwoJCXNoYWRvd0Nvb3JkLnogKz0gc2hhZG93QmlhczsKCQlidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7CgkJYm9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApOwoJCWJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTsKCQlib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApOwoJCWlmICggZnJ1c3R1bVRlc3QgKSB7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDIgPSBkeDAgLyAyLjA7CgkJCWZsb2F0IGR5MiA9IGR5MCAvIDIuMDsKCQkJZmxvYXQgZHgzID0gZHgxIC8gMi4wOwoJCQlmbG9hdCBkeTMgPSBkeTEgLyAyLjA7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApCgkJCSkgKiAoIDEuMCAvIDE3LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeCA9IHRleGVsU2l6ZS54OwoJCQlmbG9hdCBkeSA9IHRleGVsU2l6ZS55OwoJCQl2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7CgkJCXZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTsKCQkJdXYgLT0gZiAqIHRleGVsU2l6ZTsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIGYueSApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbHNlCgkJCXNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZW5kaWYKCQl9CgkJcmV0dXJuIHNoYWRvdzsKCX0KCXZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHsKCQl2ZWMzIGFic1YgPSBhYnMoIHYgKTsKCQlmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTsKCQlhYnNWICo9IHNjYWxlVG9DdWJlOwoJCXYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTsKCQl2ZWMyIHBsYW5hciA9IHYueHk7CgkJZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTsKCQlmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7CgkJaWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkgewoJCQlpZiAoIHYueiA+IDAuMCApCgkJCQlwbGFuYXIueCA9IDQuMCAtIHYueDsKCQl9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApOwoJCQlwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7CgkJfSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTsKCQkJcGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDsKCQkJcGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDsKCQl9CgkJcmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApOwoJfQoJZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7CgkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTsKCQl2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejsKCQlmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApOwkJZHAgKz0gc2hhZG93QmlhczsKCQl2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApOwoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTsKCQkJcmV0dXJuICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsWmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsSmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCwkYj1gZmxvYXQgZ2V0U2hhZG93TWFzaygpIHsKCWZsb2F0IHNoYWRvdyA9IDEuMDsKCSNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNlbmRpZgoJcmV0dXJuIHNoYWRvdzsKfWAsS2I9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLFFiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxqYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCXZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApOwoJc2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7Cglza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTsKCXNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56OwoJc2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7Cgl0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6OwojZW5kaWZgLHQxPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLGUxPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLG4xPWAjaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDsKI2VuZGlmYCxpMT1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxyMT1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHMxPWAjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7CglmbG9hdCB0cmFuc21pc3Npb25GYWN0b3IgPSB0cmFuc21pc3Npb247CglmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7CgkjZW5kaWYKCXZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247Cgl2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7Cgl2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzQgdHJhbnNtaXNzaW9uID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbigKCQluLCB2LCByb3VnaG5lc3NGYWN0b3IsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsCgkJcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsCgkJYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApOwoJdHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7CiNlbmRpZmAsbzE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsYTE9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxsMT1gI2lmZGVmIFVTRV9VVgoJI2lmZGVmIFVWU19WRVJURVhfT05MWQoJCXZlYzIgdlV2OwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJI2VuZGlmCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZmAsYzE9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsdTE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsaDE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJYXR0cmlidXRlIHZlYzIgdXYyOwoJdmFyeWluZyB2ZWMyIHZVdjI7Cgl1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtOwojZW5kaWZgLGYxPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsZDE9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAscDE9YHZhcnlpbmcgdmVjMiB2VXY7CnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKdm9pZCBtYWluKCkgewoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7Cn1gLG0xPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGcxPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx4MT1gI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7Cgl2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCWdsX0ZyYWdDb2xvciA9IGVudkNvbG9yOwoJZ2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHkxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLHYxPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfMT1gI2RlZmluZSBESVNUQU5DRQp2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7Cn1gLHcxPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCxNMT1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLGIxPWB1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCXZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsUzE9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEUxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxUMT1gI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HICkKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQzE9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxSMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTsKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsTDE9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsUDE9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxEMT1gI2RlZmluZSBOT1JNQUwKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWYKfWAsSTE9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLE4xPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEYxPWAjZGVmaW5lIFBIT05HCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gdmVjMyBzcGVjdWxhcjsKdW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsejE9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLFUxPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQjE9YCNkZWZpbmUgVE9PTgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsTzE9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxrMT1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEgxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFYxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEcxPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVzE9YHVuaWZvcm0gZmxvYXQgcm90YXRpb247CnVuaWZvcm0gdmVjMiBjZW50ZXI7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7Cgl2ZWMyIHNjYWxlOwoJc2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7CglzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTsKCSNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejsKCSNlbmRpZgoJdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTsKCXZlYzIgcm90YXRlZFBvc2l0aW9uOwoJcm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJbXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHExPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsUHQ9e2FscGhhbWFwX2ZyYWdtZW50Ol9NLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6d00sYWxwaGF0ZXN0X2ZyYWdtZW50Ok1NLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OmJNLGFvbWFwX2ZyYWdtZW50OlNNLGFvbWFwX3BhcnNfZnJhZ21lbnQ6RU0sYmVnaW5fdmVydGV4OlRNLGJlZ2lubm9ybWFsX3ZlcnRleDpBTSxic2RmczpDTSxidW1wbWFwX3BhcnNfZnJhZ21lbnQ6Uk0sY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkxNLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OlBNLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpETSxjbGlwcGluZ19wbGFuZXNfdmVydGV4OklNLGNvbG9yX2ZyYWdtZW50Ok5NLGNvbG9yX3BhcnNfZnJhZ21lbnQ6Rk0sY29sb3JfcGFyc192ZXJ0ZXg6ek0sY29sb3JfdmVydGV4OlVNLGNvbW1vbjpCTSxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T00sZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6a00sZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkhNLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6Vk0sZW1pc3NpdmVtYXBfZnJhZ21lbnQ6R00sZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpXTSxlbmNvZGluZ3NfZnJhZ21lbnQ6cU0sZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6WE0sZW52bWFwX2ZyYWdtZW50OllNLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpaTSxlbnZtYXBfcGFyc19mcmFnbWVudDpKTSxlbnZtYXBfcGFyc192ZXJ0ZXg6JE0sZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6YWIsZW52bWFwX3ZlcnRleDpLTSxmb2dfdmVydGV4OlFNLGZvZ19wYXJzX3ZlcnRleDpqTSxmb2dfZnJhZ21lbnQ6dGIsZm9nX3BhcnNfZnJhZ21lbnQ6ZWIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpuYixsaWdodG1hcF9mcmFnbWVudDppYixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OnJiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzYixsaWdodHNfcGFyc19iZWdpbjpvYixsaWdodHNfdG9vbl9mcmFnbWVudDpsYixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmNiLGxpZ2h0c19waG9uZ19mcmFnbWVudDp1YixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpoYixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZmIsbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6ZGIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOnBiLGxpZ2h0c19mcmFnbWVudF9tYXBzOm1iLGxpZ2h0c19mcmFnbWVudF9lbmQ6Z2IsbG9nZGVwdGhidWZfZnJhZ21lbnQ6eGIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp5Yixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDp2Yixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X2IsbWFwX2ZyYWdtZW50OndiLG1hcF9wYXJzX2ZyYWdtZW50Ok1iLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDpiYixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpTYixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6RWIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6VGIsbW9ycGhub3JtYWxfdmVydGV4OkFiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OkNiLG1vcnBodGFyZ2V0X3ZlcnRleDpSYixub3JtYWxfZnJhZ21lbnRfYmVnaW46TGIsbm9ybWFsX2ZyYWdtZW50X21hcHM6UGIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6RGIsbm9ybWFsX3BhcnNfdmVydGV4OkliLG5vcm1hbF92ZXJ0ZXg6TmIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6RmIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjp6YixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6VWIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6QmIsb3V0cHV0X2ZyYWdtZW50Ok9iLHBhY2tpbmc6a2IscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpIYixwcm9qZWN0X3ZlcnRleDpWYixkaXRoZXJpbmdfZnJhZ21lbnQ6R2IsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6V2Iscm91Z2huZXNzbWFwX2ZyYWdtZW50OnFiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OlhiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OlliLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpaYixzaGFkb3dtYXBfdmVydGV4OkpiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDokYixza2luYmFzZV92ZXJ0ZXg6S2Isc2tpbm5pbmdfcGFyc192ZXJ0ZXg6UWIsc2tpbm5pbmdfdmVydGV4OmpiLHNraW5ub3JtYWxfdmVydGV4OnQxLHNwZWN1bGFybWFwX2ZyYWdtZW50OmUxLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6bjEsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6aTEsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDpyMSx0cmFuc21pc3Npb25fZnJhZ21lbnQ6czEsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bzEsdXZfcGFyc19mcmFnbWVudDphMSx1dl9wYXJzX3ZlcnRleDpsMSx1dl92ZXJ0ZXg6YzEsdXYyX3BhcnNfZnJhZ21lbnQ6dTEsdXYyX3BhcnNfdmVydGV4OmgxLHV2Ml92ZXJ0ZXg6ZjEsd29ybGRwb3NfdmVydGV4OmQxLGJhY2tncm91bmRfdmVydDpwMSxiYWNrZ3JvdW5kX2ZyYWc6bTEsY3ViZV92ZXJ0OmcxLGN1YmVfZnJhZzp4MSxkZXB0aF92ZXJ0OnkxLGRlcHRoX2ZyYWc6djEsZGlzdGFuY2VSR0JBX3ZlcnQ6XzEsZGlzdGFuY2VSR0JBX2ZyYWc6dzEsZXF1aXJlY3RfdmVydDpNMSxlcXVpcmVjdF9mcmFnOmIxLGxpbmVkYXNoZWRfdmVydDpTMSxsaW5lZGFzaGVkX2ZyYWc6RTEsbWVzaGJhc2ljX3ZlcnQ6VDEsbWVzaGJhc2ljX2ZyYWc6QTEsbWVzaGxhbWJlcnRfdmVydDpDMSxtZXNobGFtYmVydF9mcmFnOlIxLG1lc2htYXRjYXBfdmVydDpMMSxtZXNobWF0Y2FwX2ZyYWc6UDEsbWVzaG5vcm1hbF92ZXJ0OkQxLG1lc2hub3JtYWxfZnJhZzpJMSxtZXNocGhvbmdfdmVydDpOMSxtZXNocGhvbmdfZnJhZzpGMSxtZXNocGh5c2ljYWxfdmVydDp6MSxtZXNocGh5c2ljYWxfZnJhZzpVMSxtZXNodG9vbl92ZXJ0OkIxLG1lc2h0b29uX2ZyYWc6TzEscG9pbnRzX3ZlcnQ6azEscG9pbnRzX2ZyYWc6SDEsc2hhZG93X3ZlcnQ6VjEsc2hhZG93X2ZyYWc6RzEsc3ByaXRlX3ZlcnQ6VzEsc3ByaXRlX2ZyYWc6cTF9LG90PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBLKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX19fSxmbj17YmFzaWM6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmZvZ10pLHZlcnRleFNoYWRlcjpQdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IGZ0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3Qucm91Z2huZXNzbWFwLG90Lm1ldGFsbmVzc21hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmdyYWRpZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOk1lKFtvdC5wb2ludHMsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlB0LmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpQdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOk1lKFtvdC5zcHJpdGUsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOk1lKFtvdC5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpQdC5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgVH0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6TWUoW290LmxpZ2h0cyxvdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5zaGFkb3dfZnJhZ319O2ZuLnBoeXNpY2FsPXt1bmlmb3JtczpNZShbZm4uc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyBLfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBmdCgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gWDEobix0LGUsaSxyLHMpe2xldCBvPW5ldyBmdCgwKSxhPXI9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIGQoeCx2KXtsZXQgbT0hMSxwPXYuaXNTY2VuZT09PSEwP3YuYmFja2dyb3VuZDpudWxsO3AmJnAuaXNUZXh0dXJlJiYocD10LmdldChwKSk7bGV0IGI9bi54cixfPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7XyYmXy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJihwPW51bGwpLHA9PT1udWxsP2cobyxhKTpwJiZwLmlzQ29sb3ImJihnKHAsMSksbT0hMCksKG4uYXV0b0NsZWFyfHxtKSYmbi5jbGVhcihuLmF1dG9DbGVhckNvbG9yLG4uYXV0b0NsZWFyRGVwdGgsbi5hdXRvQ2xlYXJTdGVuY2lsKSxwJiYocC5pc0N1YmVUZXh0dXJlfHxwLm1hcHBpbmc9PT1SbCk/KGM9PT12b2lkIDAmJihjPW5ldyBvZShuZXcgSGkoMSwxLDEpLG5ldyBGbih7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oUyxMLEEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKEEubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1wLGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1wLmlzQ3ViZVRleHR1cmUmJnAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6cCYmcC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgb2UobmV3IGxvKDIsMiksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOkdyKGZuLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpmbi5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpmbi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6ZW8sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1wLHAubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZwLnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShwLm1hdHJpeCksKHUhPT1wfHxoIT09cC52ZXJzaW9ufHxmIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9cCxoPXAudmVyc2lvbixmPW4udG9uZU1hcHBpbmcpLHgudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGcoeCx2KXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoeC5yLHguZyx4LmIsdixzKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBvfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHgsdj0xKXtvLnNldCh4KSxhPXYsZyhvLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oeCl7YT14LGcobyxhKX0scmVuZGVyOmR9fWZ1bmN0aW9uIFkxKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxzPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxvPWkuaXNXZWJHTDJ8fHMhPT1udWxsLGE9e30sbD14KG51bGwpLGM9bDtmdW5jdGlvbiB1KEQsRix6LE4sVil7bGV0IFE9ITE7aWYobyl7bGV0IGF0PWcoTix6LEYpO2MhPT1hdCYmKGM9YXQsZihjLm9iamVjdCkpLFE9dihOLFYpLFEmJm0oTixWKX1lbHNle2xldCBhdD1GLndpcmVmcmFtZT09PSEwOyhjLmdlb21ldHJ5IT09Ti5pZHx8Yy5wcm9ncmFtIT09ei5pZHx8Yy53aXJlZnJhbWUhPT1hdCkmJihjLmdlb21ldHJ5PU4uaWQsYy5wcm9ncmFtPXouaWQsYy53aXJlZnJhbWU9YXQsUT0hMCl9RC5pc0luc3RhbmNlZE1lc2g9PT0hMCYmKFE9ITApLFYhPT1udWxsJiZlLnVwZGF0ZShWLDM0OTYzKSxRJiYoQShELEYseixOKSxWIT09bnVsbCYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KFYpLmJ1ZmZlcikpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6cy5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfWZ1bmN0aW9uIGYoRCl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkoRCk6cy5iaW5kVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KEQpOnMuZGVsZXRlVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZyhELEYseil7bGV0IE49ei53aXJlZnJhbWU9PT0hMCxWPWFbRC5pZF07Vj09PXZvaWQgMCYmKFY9e30sYVtELmlkXT1WKTtsZXQgUT1WW0YuaWRdO1E9PT12b2lkIDAmJihRPXt9LFZbRi5pZF09USk7bGV0IGF0PVFbTl07cmV0dXJuIGF0PT09dm9pZCAwJiYoYXQ9eChoKCkpLFFbTl09YXQpLGF0fWZ1bmN0aW9uIHgoRCl7bGV0IEY9W10sej1bXSxOPVtdO2ZvcihsZXQgVj0wO1Y8cjtWKyspRltWXT0wLHpbVl09MCxOW1ZdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkYsZW5hYmxlZEF0dHJpYnV0ZXM6eixhdHRyaWJ1dGVEaXZpc29yczpOLG9iamVjdDpELGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gdihELEYpe2xldCB6PWMuYXR0cmlidXRlcyxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD16W1FdLEc9TltRXTtpZihhdD09PXZvaWQgMHx8YXQuYXR0cmlidXRlIT09R3x8YXQuZGF0YSE9PUcuZGF0YSlyZXR1cm4hMDtWKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PVZ8fGMuaW5kZXghPT1GfWZ1bmN0aW9uIG0oRCxGKXtsZXQgej17fSxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD1OW1FdLEc9e307Ry5hdHRyaWJ1dGU9YXQsYXQuZGF0YSYmKEcuZGF0YT1hdC5kYXRhKSx6W1FdPUcsVisrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1WLGMuaW5kZXg9Rn1mdW5jdGlvbiBwKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKylEW0ZdPTB9ZnVuY3Rpb24gYihEKXtfKEQsMCl9ZnVuY3Rpb24gXyhELEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxOPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVj1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbRF09MSxOW0RdPT09MCYmKG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoRCksTltEXT0xKSxWW0RdIT09RiYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKEQsRiksVltEXT1GKX1mdW5jdGlvbiBTKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxOPUYubGVuZ3RoO3o8Tjt6KyspRlt6XSE9PURbel0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIEwoRCxGLHosTixWLFEpe2kuaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihELEYseixWLFEpOm4udmVydGV4QXR0cmliUG9pbnRlcihELEYseixOLFYsUSl9ZnVuY3Rpb24gQShELEYseixOKXtpZihpLmlzV2ViR0wyPT09ITEmJihELmlzSW5zdGFuY2VkTWVzaHx8Ti5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3AoKTtsZXQgVj1OLmF0dHJpYnV0ZXMsUT16LmdldEF0dHJpYnV0ZXMoKSxhdD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBHIGluIFEpe2xldCAkPVFbR107aWYoJC5sb2NhdGlvbj49MCl7bGV0IGx0PVZbR107aWYobHQ9PT12b2lkIDAmJihHPT09Imluc3RhbmNlTWF0cml4IiYmRC5pbnN0YW5jZU1hdHJpeCYmKGx0PUQuaW5zdGFuY2VNYXRyaXgpLEc9PT0iaW5zdGFuY2VDb2xvciImJkQuaW5zdGFuY2VDb2xvciYmKGx0PUQuaW5zdGFuY2VDb2xvcikpLGx0IT09dm9pZCAwKXtsZXQgZHQ9bHQubm9ybWFsaXplZCx4dD1sdC5pdGVtU2l6ZSxrPWUuZ2V0KGx0KTtpZihrPT09dm9pZCAwKWNvbnRpbnVlO2xldCBGdD1rLmJ1ZmZlcixtdD1rLnR5cGUsU3Q9ay5ieXRlc1BlckVsZW1lbnQ7aWYobHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IEI9bHQuZGF0YSxzdD1CLnN0cmlkZSxudD1sdC5vZmZzZXQ7aWYoQiYmQi5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IEM9MDtDPCQubG9jYXRpb25TaXplO0MrKylfKCQubG9jYXRpb24rQyxCLm1lc2hQZXJBdHRyaWJ1dGUpO0QuaXNJbnN0YW5jZWRNZXNoIT09ITAmJk4uX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihOLl9tYXhJbnN0YW5jZUNvdW50PUIubWVzaFBlckF0dHJpYnV0ZSpCLmNvdW50KX1lbHNlIGZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKWIoJC5sb2NhdGlvbitDKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKUwoJC5sb2NhdGlvbitDLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHN0KlN0LChudCt4dC8kLmxvY2F0aW9uU2l6ZSpDKSpTdCl9ZWxzZXtpZihsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBCPTA7QjwkLmxvY2F0aW9uU2l6ZTtCKyspXygkLmxvY2F0aW9uK0IsbHQubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9bHQubWVzaFBlckF0dHJpYnV0ZSpsdC5jb3VudCl9ZWxzZSBmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKyliKCQubG9jYXRpb24rQik7bi5iaW5kQnVmZmVyKDM0OTYyLEZ0KTtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylMKCQubG9jYXRpb24rQix4dC8kLmxvY2F0aW9uU2l6ZSxtdCxkdCx4dCpTdCx4dC8kLmxvY2F0aW9uU2l6ZSpCKlN0KX19ZWxzZSBpZihhdCE9PXZvaWQgMCl7bGV0IGR0PWF0W0ddO2lmKGR0IT09dm9pZCAwKXN3aXRjaChkdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDM6bi52ZXJ0ZXhBdHRyaWIzZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7Y2FzZSA0Om4udmVydGV4QXR0cmliNGZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoJC5sb2NhdGlvbixkdCl9fX19UygpfWZ1bmN0aW9uIEgoKXt5KCk7Zm9yKGxldCBEIGluIGEpe2xldCBGPWFbRF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRF19fWZ1bmN0aW9uIHR0KEQpe2lmKGFbRC5pZF09PT12b2lkIDApcmV0dXJuO2xldCBGPWFbRC5pZF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRC5pZF19ZnVuY3Rpb24gWChEKXtmb3IobGV0IEYgaW4gYSl7bGV0IHo9YVtGXTtpZih6W0QuaWRdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBOPXpbRC5pZF07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIHpbRC5pZF19fWZ1bmN0aW9uIHkoKXtSKCksYyE9PWwmJihjPWwsZihjLm9iamVjdCkpfWZ1bmN0aW9uIFIoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOnUscmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTpSLGRpc3Bvc2U6SCxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTp0dCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOlgsaW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpTfX1mdW5jdGlvbiBaMShuLHQsZSxpKXtsZXQgcj1pLmlzV2ViR0wyLHM7ZnVuY3Rpb24gbyhjKXtzPWN9ZnVuY3Rpb24gYShjLHUpe24uZHJhd0FycmF5cyhzLGMsdSksZS51cGRhdGUodSxzLDEpfWZ1bmN0aW9uIGwoYyx1LGgpe2lmKGg9PT0wKXJldHVybjtsZXQgZixkO2lmKHIpZj1uLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYoZj10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsZj09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1mW2RdKHMsYyx1LGgpLGUudXBkYXRlKHUscyxoKX10aGlzLnNldE1vZGU9byx0aGlzLnJlbmRlcj1hLHRoaXMucmVuZGVySW5zdGFuY2VzPWx9ZnVuY3Rpb24gSjEobix0LGUpe2xldCBpO2Z1bmN0aW9uIHIoKXtpZihpIT09dm9pZCAwKXJldHVybiBpO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgQT10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihBLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9ZnVuY3Rpb24gcyhBKXtpZihBPT09ImhpZ2hwIil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtBPSJtZWRpdW1wIn1yZXR1cm4gQT09PSJtZWRpdW1wIiYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgbz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT1lLnByZWNpc2lvbiE9PXZvaWQgMD9lLnByZWNpc2lvbjoiaGlnaHAiLGw9cyhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9b3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1uLmdldFBhcmFtZXRlcigzNDkzMCksZj1uLmdldFBhcmFtZXRlcigzNTY2MCksZD1uLmdldFBhcmFtZXRlcigzMzc5KSxnPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSx4PW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSx2PW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtPW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSxwPW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxfPW98fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLFM9YiYmXyxMPW8/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOm8sZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OnIsZ2V0TWF4UHJlY2lzaW9uOnMscHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpkLG1heEN1YmVtYXBTaXplOmcsbWF4QXR0cmlidXRlczp4LG1heFZlcnRleFVuaWZvcm1zOnYsbWF4VmFyeWluZ3M6bSxtYXhGcmFnbWVudFVuaWZvcm1zOnAsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6XyxmbG9hdFZlcnRleFRleHR1cmVzOlMsbWF4U2FtcGxlczpMfX1mdW5jdGlvbiAkMShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxzPSExLG89bmV3IGplLGE9bmV3IGRlLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWgubGVuZ3RoIT09MHx8Znx8aSE9PTB8fHI7cmV0dXJuIHI9ZixlPXUoaCxkLDApLGk9aC5sZW5ndGgsZ30sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtzPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe3M9ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixkKXtsZXQgZz1oLmNsaXBwaW5nUGxhbmVzLHg9aC5jbGlwSW50ZXJzZWN0aW9uLHY9aC5jbGlwU2hhZG93cyxtPW4uZ2V0KGgpO2lmKCFyfHxnPT09bnVsbHx8Zy5sZW5ndGg9PT0wfHxzJiYhdilzP3UobnVsbCk6YygpO2Vsc2V7bGV0IHA9cz8wOmksYj1wKjQsXz1tLmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1fLF89dShnLGYsYixkKTtmb3IobGV0IFM9MDtTIT09YjsrK1MpX1tTXT1lW1NdO20uY2xpcHBpbmdTdGF0ZT1fLHRoaXMubnVtSW50ZXJzZWN0aW9uPXg/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9cH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLGQsZyl7bGV0IHg9aCE9PW51bGw/aC5sZW5ndGg6MCx2PW51bGw7aWYoeCE9PTApe2lmKHY9bC52YWx1ZSxnIT09ITB8fHY9PT1udWxsKXtsZXQgbT1kK3gqNCxwPWYubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHApLCh2PT09bnVsbHx8di5sZW5ndGg8bSkmJih2PW5ldyBGbG9hdDMyQXJyYXkobSkpO2ZvcihsZXQgYj0wLF89ZDtiIT09eDsrK2IsXys9NClvLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHAsYSksby5ub3JtYWwudG9BcnJheSh2LF8pLHZbXyszXT1vLmNvbnN0YW50fWwudmFsdWU9dixsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz14LHQubnVtSW50ZXJzZWN0aW9uPTAsdn19ZnVuY3Rpb24gSzEobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShvLGEpe3JldHVybiBhPT09VXU/by5tYXBwaW5nPUFvOmE9PT1CdSYmKG8ubWFwcGluZz1Dbyksb31mdW5jdGlvbiBpKG8pe2lmKG8mJm8uaXNUZXh0dXJlJiZvLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExKXtsZXQgYT1vLm1hcHBpbmc7aWYoYT09PVV1fHxhPT09QnUpaWYodC5oYXMobykpe2xldCBsPXQuZ2V0KG8pLnRleHR1cmU7cmV0dXJuIGUobCxvLm1hcHBpbmcpfWVsc2V7bGV0IGw9by5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgb2wobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixvKSx0LnNldChvLGMpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUsby5tYXBwaW5nKX1lbHNlIHJldHVybiBudWxsfX1yZXR1cm4gb31mdW5jdGlvbiByKG8pe2xldCBhPW8udGFyZ2V0O2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscik7bGV0IGw9dC5nZXQoYSk7bCE9PXZvaWQgMCYmKHQuZGVsZXRlKGEpLGwuZGlzcG9zZSgpKX1mdW5jdGlvbiBzKCl7dD1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpzfX12YXIgVmk9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxzPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1zLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIscz1pLXQsbz1pK3QsYT1yK2UsbD1yLWU7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtzKz1jKnRoaXMudmlldy5vZmZzZXRYLG89cytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocyxvLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsdGhpcy52aWV3IT09bnVsbCYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07VmkucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBYcj1jbGFzcyBleHRlbmRzIEZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07WHIucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIGtyPTQsbmk9OCxobj1NYXRoLnBvdygyLG5pKSx4MD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0seTA9bmkta3IrMSt4MC5sZW5ndGgsQXI9MjAsVHU9bmV3IFZpLHtfbG9kUGxhbmVzOkdzLF9zaXplTG9kczptZyxfc2lnbWFzOlVhfT1RMSgpLGdnPW5ldyBmdCxBdT1udWxsLHppPSgxK01hdGguc3FydCg1KSkvMixDcj0xL3ppLHhnPVtuZXcgVCgxLDEsMSksbmV3IFQoLTEsMSwxKSxuZXcgVCgxLDEsLTEpLG5ldyBUKC0xLDEsLTEpLG5ldyBUKDAsemksQ3IpLG5ldyBUKDAsemksLUNyKSxuZXcgVChDciwwLHppKSxuZXcgVCgtQ3IsMCx6aSksbmV3IFQoemksQ3IsMCksbmV3IFQoLXppLENyLDApXSxhbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWoxKEFyKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IHM9dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIscyksZT4wJiZ0aGlzLl9ibHVyKHMsMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0ocyksdGhpcy5fY2xlYW51cChzKSxzfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1fZygpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe3RoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8R3MubGVuZ3RoO3QrKylHc1t0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KEF1KSx0LnNjaXNzb3JUZXN0PSExLEJhKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe0F1PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOmJlLG1pbkZpbHRlcjpiZSxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVcixmb3JtYXQ6UmUsZW5jb2Rpbmc6cmksZGVwdGhCdWZmZXI6ITF9LGk9eWcoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWcoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgb2UoR3NbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFR1KX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgU2UoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsaD11LmF1dG9DbGVhcixmPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKGdnKSx1LnRvbmVNYXBwaW5nPXRpLHUuYXV0b0NsZWFyPSExO2xldCBkPW5ldyBraSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpoZSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGc9bmV3IG9lKG5ldyBIaSxkKSx4PSExLHY9dC5iYWNrZ3JvdW5kO3Y/di5pc0NvbG9yJiYoZC5jb2xvci5jb3B5KHYpLHQuYmFja2dyb3VuZD1udWxsLHg9ITApOihkLmNvbG9yLmNvcHkoZ2cpLHg9ITApO2ZvcihsZXQgbT0wO208NjttKyspe2xldCBwPW0lMztwPT09MD8oYS51cC5zZXQoMCxsW21dLDApLGEubG9va0F0KGNbbV0sMCwwKSk6cD09PTE/KGEudXAuc2V0KDAsMCxsW21dKSxhLmxvb2tBdCgwLGNbbV0sMCkpOihhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoMCwwLGNbbV0pKSxCYShyLHAqaG4sbT4yP2huOjAsaG4saG4pLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLHgmJnUucmVuZGVyKGcsYSksdS5yZW5kZXIodCxhKX1nLmdlb21ldHJ5LmRpc3Bvc2UoKSxnLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9dn1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1Bb3x8dC5tYXBwaW5nPT09Q287cj8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEpOnRoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCkpO2xldCBzPXI/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixvPW5ldyBvZShHc1swXSxzKSxhPXMudW5pZm9ybXM7YS5lbnZNYXAudmFsdWU9dCxyfHxhLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLEJhKGUsMCwwLDMqaG4sMipobiksaS5zZXRSZW5kZXJUYXJnZXQoZSksaS5yZW5kZXIobyxUdSl9X2FwcGx5UE1SRU0odCl7bGV0IGU9dGhpcy5fcmVuZGVyZXIsaT1lLmF1dG9DbGVhcjtlLmF1dG9DbGVhcj0hMTtmb3IobGV0IHI9MTtyPHkwO3IrKyl7bGV0IHM9TWF0aC5zcXJ0KFVhW3JdKlVhW3JdLVVhW3ItMV0qVWFbci0xXSksbz14Z1soci0xKSV4Zy5sZW5ndGhdO3RoaXMuX2JsdXIodCxyLTEscixzLG8pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixzKXtsZXQgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxpLHIsImxhdGl0dWRpbmFsIixzKSx0aGlzLl9oYWxmQmx1cihvLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIscyl9X2hhbGZCbHVyKHQsZSxpLHIscyxvLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO28hPT0ibGF0aXR1ZGluYWwiJiZvIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IG9lKEdzW3JdLGMpLGY9Yy51bmlmb3JtcyxkPW1nW2ldLTEsZz1pc0Zpbml0ZShzKT9NYXRoLlBJLygyKmQpOjIqTWF0aC5QSS8oMipBci0xKSx4PXMvZyx2PWlzRmluaXRlKHMpPzErTWF0aC5mbG9vcih1KngpOkFyO3Y+QXImJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3N9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7dn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAke0FyfWApO2xldCBtPVtdLHA9MDtmb3IobGV0IEw9MDtMPEFyOysrTCl7bGV0IEE9TC94LEg9TWF0aC5leHAoLUEqQS8yKTttLnB1c2goSCksTD09PTA/cCs9SDpMPHYmJihwKz0yKkgpfWZvcihsZXQgTD0wO0w8bS5sZW5ndGg7TCsrKW1bTF09bVtMXS9wO2YuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxmLnNhbXBsZXMudmFsdWU9dixmLndlaWdodHMudmFsdWU9bSxmLmxhdGl0dWRpbmFsLnZhbHVlPW89PT0ibGF0aXR1ZGluYWwiLGEmJihmLnBvbGVBeGlzLnZhbHVlPWEpLGYuZFRoZXRhLnZhbHVlPWcsZi5taXBJbnQudmFsdWU9bmktaTtsZXQgYj1tZ1tyXSxfPTMqTWF0aC5tYXgoMCxobi0yKmIpLFM9KHI9PT0wPzA6MipobikrMipiKihyPm5pLWtyP3Itbmkra3I6MCk7QmEoZSxfLFMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQoZSksbC5yZW5kZXIoaCxUdSl9fTtmdW5jdGlvbiBRMSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPW5pO2ZvcihsZXQgcj0wO3I8eTA7cisrKXtsZXQgcz1NYXRoLnBvdygyLGkpO3QucHVzaChzKTtsZXQgbz0xL3M7cj5uaS1rcj9vPXgwW3Itbmkra3ItMV06cj09PTAmJihvPTApLGUucHVzaChvKTtsZXQgYT0xLyhzLTEpLGw9LWEvMixjPTErYS8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LGQ9MyxnPTIseD0xLHY9bmV3IEZsb2F0MzJBcnJheShkKmYqaCksbT1uZXcgRmxvYXQzMkFycmF5KGcqZipoKSxwPW5ldyBGbG9hdDMyQXJyYXkoeCpmKmgpO2ZvcihsZXQgXz0wO188aDtfKyspe2xldCBTPV8lMyoyLzMtMSxMPV8+Mj8wOi0xLEE9W1MsTCwwLFMrMi8zLEwsMCxTKzIvMyxMKzEsMCxTLEwsMCxTKzIvMyxMKzEsMCxTLEwrMSwwXTt2LnNldChBLGQqZipfKSxtLnNldCh1LGcqZipfKTtsZXQgSD1bXyxfLF8sXyxfLF9dO3Auc2V0KEgseCpmKl8pfWxldCBiPW5ldyBIdDtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBRdCh2LGQpKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBRdChtLGcpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUXQocCx4KSksbi5wdXNoKGIpLGk+a3ImJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24geWcobil7bGV0IHQ9bmV3IE5lKDMqaG4sMypobixuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9UmwsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEJhKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBqMShuKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KG4pLGU9bmV3IFQoMCwxLDApO3JldHVybiBuZXcgWHIoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bn0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gdmcoKXtsZXQgbj1uZXcgSygxLDEpO3JldHVybiBuZXcgWHIoe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBfZygpe3JldHVybiBuZXcgWHIoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwOwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDsKCgkJCXZvaWQgbWFpbigpIHsKCgkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTsKCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gamgoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gdFMobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIGkoYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1VdXx8bD09PUJ1LHU9bD09PUFvfHxsPT09Q287aWYoY3x8dSlpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmYS5uZWVkc1BNUkVNVXBkYXRlPT09ITApe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChhKTtyZXR1cm4gZT09PW51bGwmJihlPW5ldyBhbChuKSksaD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGgpOmUuZnJvbUN1YmVtYXAoYSxoKSx0LnNldChhLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgaD1hLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJnIoaCkpe2U9PT1udWxsJiYoZT1uZXcgYWwobikpO2xldCBmPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEsZiksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBhfWZ1bmN0aW9uIHIoYSl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylhW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIHMoYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwLGUhPT1udWxsJiYoZS5kaXNwb3NlKCksZT1udWxsKX1yZXR1cm57Z2V0OmksZGlzcG9zZTpvfX1mdW5jdGlvbiBlUyhuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHRbaV0hPT12b2lkIDApcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSkhPT1udWxsfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gcj09PW51bGwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIG5TKG4sdCxlLGkpe2xldCByPXt9LHM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbyhoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBnIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZ10pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZGVsZXRlIHJbZi5pZF07bGV0IGQ9cy5nZXQoZik7ZCYmKHQucmVtb3ZlKGQpLHMuZGVsZXRlKGYpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYShoLGYpe3JldHVybiByW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHJbZi5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBmKXQudXBkYXRlKGZbZ10sMzQ5NjIpO2xldCBkPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBkKXtsZXQgeD1kW2ddO2ZvcihsZXQgdj0wLG09eC5sZW5ndGg7djxtO3YrKyl0LnVwZGF0ZSh4W3ZdLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxkPWguaW5kZXgsZz1oLmF0dHJpYnV0ZXMucG9zaXRpb24seD0wO2lmKGQhPT1udWxsKXtsZXQgcD1kLmFycmF5O3g9ZC52ZXJzaW9uO2ZvcihsZXQgYj0wLF89cC5sZW5ndGg7YjxfO2IrPTMpe2xldCBTPXBbYiswXSxMPXBbYisxXSxBPXBbYisyXTtmLnB1c2goUyxMLEwsQSxBLFMpfX1lbHNle2xldCBwPWcuYXJyYXk7eD1nLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aC8zLTE7YjxfO2IrPTMpe2xldCBTPWIrMCxMPWIrMSxBPWIrMjtmLnB1c2goUyxMLEwsQSxBLFMpfX1sZXQgdj1uZXcocDAoZik/c2w6cmwpKGYsMSk7di52ZXJzaW9uPXg7bGV0IG09cy5nZXQoaCk7bSYmdC5yZW1vdmUobSkscy5zZXQoaCx2KX1mdW5jdGlvbiB1KGgpe2xldCBmPXMuZ2V0KGgpO2lmKGYpe2xldCBkPWguaW5kZXg7ZCE9PW51bGwmJmYudmVyc2lvbjxkLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBzLmdldChoKX1yZXR1cm57Z2V0OmEsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIGlTKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGYpe3M9Zn1sZXQgYSxsO2Z1bmN0aW9uIGMoZil7YT1mLnR5cGUsbD1mLmJ5dGVzUGVyRWxlbWVudH1mdW5jdGlvbiB1KGYsZCl7bi5kcmF3RWxlbWVudHMocyxkLGEsZipsKSxlLnVwZGF0ZShkLHMsMSl9ZnVuY3Rpb24gaChmLGQsZyl7aWYoZz09PTApcmV0dXJuO2xldCB4LHY7aWYocil4PW4sdj0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHg9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSx2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIseD09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59eFt2XShzLGQsYSxmKmwsZyksZS51cGRhdGUoZCxzLGcpfXRoaXMuc2V0TW9kZT1vLHRoaXMuc2V0SW5kZXg9Yyx0aGlzLnJlbmRlcj11LHRoaXMucmVuZGVySW5zdGFuY2VzPWh9ZnVuY3Rpb24gclMobil7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gaShzLG8sYSl7c3dpdGNoKGUuY2FsbHMrKyxvKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKHMvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKHMvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKHMtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqczticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqczticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixvKTticmVha319ZnVuY3Rpb24gcigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6cix1cGRhdGU6aX19dmFyIGNvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2NvLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBzUyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gb1Mobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gd2cobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gYVMobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxzPW5ldyBXZWFrTWFwLG89bmV3IFQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgZD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBnPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCx4PXMuZ2V0KHUpO2lmKHg9PT12b2lkIDB8fHguY291bnQhPT1nKXtsZXQgUj1mdW5jdGlvbigpe1guZGlzcG9zZSgpLHMuZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9O3ghPT12b2lkIDAmJngudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHA9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sXz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LEw9cD09PSEwPzI6MSxBPVMqTCxIPTE7QT50Lm1heFRleHR1cmVTaXplJiYoSD1NYXRoLmNlaWwoQS90Lm1heFRleHR1cmVTaXplKSxBPXQubWF4VGV4dHVyZVNpemUpO2xldCB0dD1uZXcgRmxvYXQzMkFycmF5KEEqSCo0KmcpLFg9bmV3IGNvKHR0LEEsSCxnKTtYLmZvcm1hdD1SZSxYLnR5cGU9VWksWC5uZWVkc1VwZGF0ZT0hMDtsZXQgeT1MKjQ7Zm9yKGxldCBEPTA7RDxnO0QrKyl7bGV0IEY9YltEXSx6PV9bRF0sTj1BKkgqNCpEO2ZvcihsZXQgVj0wO1Y8Ri5jb3VudDtWKyspe28uZnJvbUJ1ZmZlckF0dHJpYnV0ZShGLFYpLEYubm9ybWFsaXplZD09PSEwJiZ3ZyhvLEYpO2xldCBRPVYqeTt0dFtOK1ErMF09by54LHR0W04rUSsxXT1vLnksdHRbTitRKzJdPW8ueix0dFtOK1ErM109MCxwPT09ITAmJihvLmZyb21CdWZmZXJBdHRyaWJ1dGUoeixWKSx6Lm5vcm1hbGl6ZWQ9PT0hMCYmd2cobyx6KSx0dFtOK1ErNF09by54LHR0W04rUSs1XT1vLnksdHRbTitRKzZdPW8ueix0dFtOK1ErN109MCl9fXg9e2NvdW50OmcsdGV4dHVyZTpYLHNpemU6bmV3IEsoQSxIKX0scy5zZXQodSx4KSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFIpfWxldCB2PTA7Zm9yKGxldCBwPTA7cDxkLmxlbmd0aDtwKyspdis9ZFtwXTtsZXQgbT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS12O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLG0pLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGQpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIix4LnRleHR1cmUsZSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIix4LnNpemUpfWVsc2V7bGV0IGc9ZD09PXZvaWQgMD8wOmQubGVuZ3RoLHg9aVt1LmlkXTtpZih4PT09dm9pZCAwfHx4Lmxlbmd0aCE9PWcpe3g9W107Zm9yKGxldCBfPTA7XzxnO18rKyl4W19dPVtfLDBdO2lbdS5pZF09eH1mb3IobGV0IF89MDtfPGc7XysrKXtsZXQgUz14W19dO1NbMF09XyxTWzFdPWRbX119eC5zb3J0KG9TKTtmb3IobGV0IF89MDtfPDg7XysrKV88ZyYmeFtfXVsxXT8oYVtfXVswXT14W19dWzBdLGFbX11bMV09eFtfXVsxXSk6KGFbX11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtfXVsxXT0wKTthLnNvcnQoc1MpO2xldCB2PXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHA9MDtmb3IobGV0IF89MDtfPDg7XysrKXtsZXQgUz1hW19dLEw9U1swXSxBPVNbMV07TCE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZBPyh2JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pIT09dltMXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfLHZbTF0pLG0mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykhPT1tW0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18sbVtMXSkscltfXT1BLHArPUEpOih2JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyksbSYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pLHJbX109MCl9bGV0IGI9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtcDtmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixiKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19cmV0dXJue3VwZGF0ZTpsfX1mdW5jdGlvbiBsUyhuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIHIuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLHIuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gbygpe3I9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpzLGRpc3Bvc2U6b319dmFyIGxsPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2xsLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIHYwPW5ldyBhZSxfMD1uZXcgY28sdzA9bmV3IGxsLE0wPW5ldyBXcixNZz1bXSxiZz1bXSxTZz1uZXcgRmxvYXQzMkFycmF5KDE2KSxFZz1uZXcgRmxvYXQzMkFycmF5KDkpLFRnPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gZXMobix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxzPU1nW3JdO2lmKHM9PT12b2lkIDAmJihzPW5ldyBGbG9hdDMyQXJyYXkociksTWdbcl09cyksdCE9PTApe2kudG9BcnJheShzLDApO2ZvcihsZXQgbz0xLGE9MDtvIT09dDsrK28pYSs9ZSxuW29dLnRvQXJyYXkocyxhKX1yZXR1cm4gc31mdW5jdGlvbiBMZShuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFRlKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBQbChuLHQpe2xldCBlPWJnW3RdO2U9PT12b2lkIDAmJihlPW5ldyBJbnQzMkFycmF5KHQpLGJnW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIGNTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHVTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gaFMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZlMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLFRlKGUsdCl9fWZ1bmN0aW9uIGRTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47VGcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsVGcpLFRlKGUsaSl9fWZ1bmN0aW9uIHBTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47RWcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRWcpLFRlKGUsaSl9fWZ1bmN0aW9uIG1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47U2cuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsU2cpLFRlKGUsaSl9fWZ1bmN0aW9uIGdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHhTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB5UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gdlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIF9TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB3UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIE1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gYlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBTUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHYwLHIpfWZ1bmN0aW9uIEVTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx3MCxyKX1mdW5jdGlvbiBUUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8TTAscil9ZnVuY3Rpb24gQVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8XzAscil9ZnVuY3Rpb24gQ1Mobil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gY1M7Y2FzZSAzNTY2NDpyZXR1cm4gdVM7Y2FzZSAzNTY2NTpyZXR1cm4gaFM7Y2FzZSAzNTY2NjpyZXR1cm4gZlM7Y2FzZSAzNTY3NDpyZXR1cm4gZFM7Y2FzZSAzNTY3NTpyZXR1cm4gcFM7Y2FzZSAzNTY3NjpyZXR1cm4gbVM7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGdTO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geFM7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB5UztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHZTO2Nhc2UgNTEyNTpyZXR1cm4gX1M7Y2FzZSAzNjI5NDpyZXR1cm4gd1M7Y2FzZSAzNjI5NTpyZXR1cm4gTVM7Y2FzZSAzNjI5NjpyZXR1cm4gYlM7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBTUztjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gRVM7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gVFM7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gQVN9fWZ1bmN0aW9uIFJTKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBMUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gUFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIERTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBJUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gTlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIEZTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gelMobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVTKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCUyhuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT1Mobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGtTKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSFMobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWUyhuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdTKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gV1Mobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNhZmVTZXRUZXh0dXJlMkQodFtzXXx8djAscltzXSl9ZnVuY3Rpb24gcVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUzRCh0W3NdfHx3MCxyW3NdKX1mdW5jdGlvbiBYUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbc118fE0wLHJbc10pfWZ1bmN0aW9uIFlTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zZXRUZXh0dXJlMkRBcnJheSh0W3NdfHxfMCxyW3NdKX1mdW5jdGlvbiBaUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBSUztjYXNlIDM1NjY0OnJldHVybiBMUztjYXNlIDM1NjY1OnJldHVybiBQUztjYXNlIDM1NjY2OnJldHVybiBEUztjYXNlIDM1Njc0OnJldHVybiBJUztjYXNlIDM1Njc1OnJldHVybiBOUztjYXNlIDM1Njc2OnJldHVybiBGUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gelM7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBVUztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEJTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT1M7Y2FzZSA1MTI1OnJldHVybiBrUztjYXNlIDM2Mjk0OnJldHVybiBIUztjYXNlIDM2Mjk1OnJldHVybiBWUztjYXNlIDM2Mjk2OnJldHVybiBHUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFdTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBxUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBZU319ZnVuY3Rpb24gSlMobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9Q1ModC50eXBlKX1mdW5jdGlvbiBiMChuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVpTKHQudHlwZSl9YjAucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLFRlKHQsbil9O2Z1bmN0aW9uIFMwKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1TMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKXtsZXQgbz1pW3JdO28uc2V0VmFsdWUobix0W28uaWRdLGUpfX07dmFyIEN1PS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBBZyhuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiAkUyhuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKEN1Lmxhc3RJbmRleD0wOzspe2xldCBzPUN1LmV4ZWMoaSksbz1DdS5sYXN0SW5kZXgsYT1zWzFdLGw9c1syXT09PSJdIixjPXNbM107aWYobCYmKGE9YXwwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZvKzI9PT1yKXtBZyhlLGM9PT12b2lkIDA/bmV3IEpTKGEsbix0KTpuZXcgYjAoYSxuLHQpKTticmVha31lbHNle2xldCBoPWUubWFwW2FdO2g9PT12b2lkIDAmJihoPW5ldyBTMChhKSxBZyhlLGgpKSxlPWh9fX1mdW5jdGlvbiBpaShuLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCBlPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcj1uLmdldEFjdGl2ZVVuaWZvcm0odCxpKSxzPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKTskUyhyLHMsdGhpcyl9fWlpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTtyIT09dm9pZCAwJiZyLnNldFZhbHVlKG4sZSxpKX07aWkucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO2khPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUobixlLGkpfTtpaS51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPXRbcl0sYT1lW28uaWRdO2EubmVlZHNVcGRhdGUhPT0hMSYmby5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fTtpaS5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9bltpXTtzLmlkIGluIHQmJmUucHVzaChzKX1yZXR1cm4gZX07ZnVuY3Rpb24gQ2cobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfXZhciBLUz0wO2Z1bmN0aW9uIFFTKG4pe2xldCB0PW4uc3BsaXQoYApgKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGpTKG4pe3N3aXRjaChuKXtjYXNlIHJpOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAkdDpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBSZyhuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiZyPT09IiI/IiI6ZS50b1VwcGVyQ2FzZSgpK2AKCmArcitgCgpgK1FTKG4uZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiB0RShuLHQpe2xldCBlPWpTKHQpO3JldHVybiJ2ZWM0ICIrbisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiBlRShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIEF3OmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBDdzplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBSdzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgTHc6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBQdzplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIG5FKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fG4uc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoJHMpLmpvaW4oYApgKX1mdW5jdGlvbiBpRShuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTtpIT09ITEmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiByRShuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBzPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksbz1zLm5hbWUsYT0xO3MudHlwZT09PTM1Njc0JiYoYT0yKSxzLnR5cGU9PT0zNTY3NSYmKGE9Mykscy50eXBlPT09MzU2NzYmJihhPTQpLGVbb109e3R5cGU6cy50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxvKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9ZnVuY3Rpb24gJHMobil7cmV0dXJuIG4hPT0iIn1mdW5jdGlvbiBMZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBQZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIHNFPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gcXUobil7cmV0dXJuIG4ucmVwbGFjZShzRSxvRSl9ZnVuY3Rpb24gb0Uobix0KXtsZXQgZT1QdFt0XTtpZihlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gcXUoZSl9dmFyIGFFPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csbEU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBEZyhuKXtyZXR1cm4gbi5yZXBsYWNlKGxFLEUwKS5yZXBsYWNlKGFFLGNFKX1mdW5jdGlvbiBjRShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksRTAobix0LGUsaSl9ZnVuY3Rpb24gRTAobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBzPXBhcnNlSW50KHQpO3M8cGFyc2VJbnQoZSk7cysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK3MrIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLHMpO3JldHVybiByfWZ1bmN0aW9uIElnKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtuLnByZWNpc2lvbisiIGludDsiO3JldHVybiBuLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6bi5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gdUUobil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gbi5zaGFkb3dNYXBUeXBlPT09bDA/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT1zdz90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09SnMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGhFKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIEFvOmNhc2UgQ286dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBSbDpjYXNlIEtoOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGZFKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIENvOmNhc2UgS2g6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZEUobil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIENsOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBFdzp0PSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIFR3OnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHBFKG4sdCxlLGkpe2xldCByPW4uZ2V0Q29udGV4dCgpLHM9ZS5kZWZpbmVzLG89ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9dUUoZSksYz1oRShlKSx1PWZFKGUpLGg9ZEUoZSksZj1lLmlzV2ViR0wyPyIiOm5FKGUpLGQ9aUUocyksZz1yLmNyZWF0ZVByb2dyYW0oKSx4LHYsbT1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rYApgOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oeD1bZF0uZmlsdGVyKCRzKS5qb2luKGAKYCkseC5sZW5ndGg+MCYmKHgrPWAKYCksdj1bZixkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2Lmxlbmd0aD4wJiYodis9YApgKSk6KHg9W0lnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiZlLmZsYXRTaGFkaW5nPT09ITE/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIglhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCIJYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiCWF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiCWF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiCWF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiCSNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiCSNlbHNlIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiCSNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCIJYXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIglhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2PVtmLElnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PXRpPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PXRpP1B0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PXRpP2VFKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixQdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx0RSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLGAKYF0uZmlsdGVyKCRzKS5qb2luKGAKYCkpLG89cXUobyksbz1MZyhvLGUpLG89UGcobyxlKSxhPXF1KGEpLGE9TGcoYSxlKSxhPVBnKGEsZSksbz1EZyhvKSxhPURnKGEpLGUuaXNXZWJHTDImJmUuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYobT1gI3ZlcnNpb24gMzAwIGVzCmAseD1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK3gsdj1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PW5nPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09bmc/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArdik7bGV0IHA9bSt4K28sYj1tK3YrYSxfPUNnKHIsMzU2MzMscCksUz1DZyhyLDM1NjMyLGIpO2lmKHIuYXR0YWNoU2hhZGVyKGcsXyksci5hdHRhY2hTaGFkZXIoZyxTKSxlLmluZGV4MEF0dHJpYnV0ZU5hbWUhPT12b2lkIDA/ci5iaW5kQXR0cmliTG9jYXRpb24oZywwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ZS5tb3JwaFRhcmdldHM9PT0hMCYmci5iaW5kQXR0cmliTG9jYXRpb24oZywwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZyksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IEg9ci5nZXRQcm9ncmFtSW5mb0xvZyhnKS50cmltKCksdHQ9ci5nZXRTaGFkZXJJbmZvTG9nKF8pLnRyaW0oKSxYPXIuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCkseT0hMCxSPSEwO2lmKHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE0KT09PSExKXt5PSExO2xldCBEPVJnKHIsXywidmVydGV4IiksRj1SZyhyLFMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK0grYApgK0QrYApgK0YpfWVsc2UgSCE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsSCk6KHR0PT09IiJ8fFg9PT0iIikmJihSPSExKTtSJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6eSxwcm9ncmFtTG9nOkgsdmVydGV4U2hhZGVyOntsb2c6dHQscHJlZml4Onh9LGZyYWdtZW50U2hhZGVyOntsb2c6WCxwcmVmaXg6dn19KX1yLmRlbGV0ZVNoYWRlcihfKSxyLmRlbGV0ZVNoYWRlcihTKTtsZXQgTDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIEw9PT12b2lkIDAmJihMPW5ldyBpaShyLGcpKSxMfTtsZXQgQTtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEE9PT12b2lkIDAmJihBPXJFKHIsZykpLEF9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZyksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUtTKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWcsdGhpcy52ZXJ0ZXhTaGFkZXI9Xyx0aGlzLmZyYWdtZW50U2hhZGVyPVMsdGhpc312YXIgbUU9MCxYdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hhZGVyQ2FjaGU9bmV3IE1hcCx0aGlzLm1hdGVyaWFsQ2FjaGU9bmV3IE1hcH11cGRhdGUodCl7bGV0IGU9dC52ZXJ0ZXhTaGFkZXIsaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoZSkscz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxvPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuIG8uaGFzKHIpPT09ITEmJihvLmFkZChyKSxyLnVzZWRUaW1lcysrKSxvLmhhcyhzKT09PSExJiYoby5hZGQocykscy51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLGkudXNlZFRpbWVzPT09MCYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiBlLmhhcyh0KT09PSExJiZlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpfV9nZXRTaGFkZXJTdGFnZSh0KXtsZXQgZT10aGlzLnNoYWRlckNhY2hlO2lmKGUuaGFzKHQpPT09ITEpe2xldCBpPW5ldyBZdTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LFl1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1tRSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBnRShuLHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgaWwsbD1uZXcgWHUsYz1bXSx1PXIuaXNXZWJHTDIsaD1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1yLmZsb2F0VmVydGV4VGV4dHVyZXMsZD1yLm1heFZlcnRleFVuaWZvcm1zLGc9ci52ZXJ0ZXhUZXh0dXJlcyx4PXIucHJlY2lzaW9uLHY9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiBtKHkpe2xldCBEPXkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigoZC0yMCkvNCksTj1NYXRoLm1pbih6LEQubGVuZ3RoKTtyZXR1cm4gTjxELmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitELmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK04rIi4iKSwwKTpOfX1mdW5jdGlvbiBwKHksUixELEYseil7bGV0IE49Ri5mb2csVj15LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFE9KHkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh5LmVudk1hcHx8ViksYXQ9dlt5LnR5cGVdLEc9ei5pc1NraW5uZWRNZXNoP20oeik6MDt5LnByZWNpc2lvbiE9PW51bGwmJih4PXIuZ2V0TWF4UHJlY2lzaW9uKHkucHJlY2lzaW9uKSx4IT09eS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6Iix5LnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHgsImluc3RlYWQuIikpO2xldCAkLGx0LGR0LHh0O2lmKGF0KXtsZXQgQj1mblthdF07JD1CLnZlcnRleFNoYWRlcixsdD1CLmZyYWdtZW50U2hhZGVyfWVsc2UgJD15LnZlcnRleFNoYWRlcixsdD15LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHkpLGR0PWwuZ2V0VmVydGV4U2hhZGVySUQoeSkseHQ9bC5nZXRGcmFnbWVudFNoYWRlcklEKHkpO2xldCBrPW4uZ2V0UmVuZGVyVGFyZ2V0KCksRnQ9eS5hbHBoYVRlc3Q+MCxtdD15LmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmF0LHNoYWRlck5hbWU6eS50eXBlLHZlcnRleFNoYWRlcjokLGZyYWdtZW50U2hhZGVyOmx0LGRlZmluZXM6eS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmR0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6eHQsaXNSYXdTaGFkZXJNYXRlcmlhbDp5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjp5Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjp4LGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmcsb3V0cHV0RW5jb2Rpbmc6az09PW51bGw/bi5vdXRwdXRFbmNvZGluZzprLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9rLnRleHR1cmUuZW5jb2Rpbmc6cmksbWFwOiEheS5tYXAsbWF0Y2FwOiEheS5tYXRjYXAsZW52TWFwOiEhUSxlbnZNYXBNb2RlOlEmJlEubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFRJiYoUS5tYXBwaW5nPT09Umx8fFEubWFwcGluZz09PUtoKSxsaWdodE1hcDohIXkubGlnaHRNYXAsYW9NYXA6ISF5LmFvTWFwLGVtaXNzaXZlTWFwOiEheS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEheS5idW1wTWFwLG5vcm1hbE1hcDohIXkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PWp3LHRhbmdlbnRTcGFjZU5vcm1hbE1hcDp5Lm5vcm1hbE1hcFR5cGU9PT10cyxkZWNvZGVWaWRlb1RleHR1cmU6ISF5Lm1hcCYmeS5tYXAuaXNWaWRlb1RleHR1cmU9PT0hMCYmeS5tYXAuZW5jb2Rpbmc9PT0kdCxjbGVhcmNvYXQ6bXQsY2xlYXJjb2F0TWFwOm10JiYhIXkuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDptdCYmISF5LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6bXQmJiEheS5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEheS5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEheS5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEheS5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF5LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEheS5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEheS5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEheS5hbHBoYU1hcCxhbHBoYVRlc3Q6RnQsYWxwaGFXcml0ZTp5LmFscGhhV3JpdGV8fHkudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISF5LmdyYWRpZW50TWFwLHNoZWVuOnkuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEheS5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEheS5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246eS50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISF5LnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISF5LnRoaWNrbmVzc01hcCxjb21iaW5lOnkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIXkubm9ybWFsTWFwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsdmVydGV4Q29sb3JzOnkudmVydGV4Q29sb3JzLHZlcnRleEFscGhhczp5LnZlcnRleENvbG9ycz09PSEwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiZ6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHZlcnRleFV2czohIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE1hcHx8ISF5LmNsZWFyY29hdFJvdWdobmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8ISF5LmRpc3BsYWNlbWVudE1hcHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCx1dnNWZXJ0ZXhPbmx5OiEoISF5Lm1hcHx8ISF5LmJ1bXBNYXB8fCEheS5ub3JtYWxNYXB8fCEheS5zcGVjdWxhck1hcHx8ISF5LmFscGhhTWFwfHwhIXkuZW1pc3NpdmVNYXB8fCEheS5yb3VnaG5lc3NNYXB8fCEheS5tZXRhbG5lc3NNYXB8fCEheS5jbGVhcmNvYXROb3JtYWxNYXB8fHkudHJhbnNtaXNzaW9uPjB8fCEheS50cmFuc21pc3Npb25NYXB8fCEheS50aGlja25lc3NNYXB8fCEheS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISF5LnNwZWN1bGFyQ29sb3JNYXB8fHkuc2hlZW4+MHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCkmJiEheS5kaXNwbGFjZW1lbnRNYXAsZm9nOiEhTix1c2VGb2c6eS5mb2csZm9nRXhwMjpOJiZOLmlzRm9nRXhwMixmbGF0U2hhZGluZzohIXkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOnkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aCxza2lubmluZzp6LmlzU2tpbm5lZE1lc2g9PT0hMCYmRz4wLG1heEJvbmVzOkcsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpSLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpSLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOlIuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6Ui5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpSLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpSLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpSLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOlIuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6by5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpvLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6eS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZELmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6bi5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzp5LnRvbmVNYXBwZWQ/bi50b25lTWFwcGluZzp0aSxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp5LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDp5LnNpZGU9PT1IcixmbGlwU2lkZWQ6eS5zaWRlPT09aGUsZGVwdGhQYWNraW5nOnkuZGVwdGhQYWNraW5nIT09dm9pZCAwP3kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6eS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTp5LmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKHkpe2xldCBSPVtdO2lmKHkuc2hhZGVySUQ/Ui5wdXNoKHkuc2hhZGVySUQpOihSLnB1c2goeS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksUi5wdXNoKHkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IEQgaW4geS5kZWZpbmVzKVIucHVzaChEKSxSLnB1c2goeS5kZWZpbmVzW0RdKTtyZXR1cm4geS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihfKFIseSksUyhSLHkpLFIucHVzaChuLm91dHB1dEVuY29kaW5nKSksUi5wdXNoKHkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxSLmpvaW4oKX1mdW5jdGlvbiBfKHksUil7eS5wdXNoKFIucHJlY2lzaW9uKSx5LnB1c2goUi5vdXRwdXRFbmNvZGluZykseS5wdXNoKFIuZW52TWFwTW9kZSkseS5wdXNoKFIuY29tYmluZSkseS5wdXNoKFIudmVydGV4VXZzKSx5LnB1c2goUi5mb2dFeHAyKSx5LnB1c2goUi5zaXplQXR0ZW51YXRpb24pLHkucHVzaChSLm1heEJvbmVzKSx5LnB1c2goUi5tb3JwaFRhcmdldHNDb3VudCkseS5wdXNoKFIubnVtRGlyTGlnaHRzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0cykseS5wdXNoKFIubnVtU3BvdExpZ2h0cykseS5wdXNoKFIubnVtSGVtaUxpZ2h0cykseS5wdXNoKFIubnVtUmVjdEFyZWFMaWdodHMpLHkucHVzaChSLm51bURpckxpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtUG9pbnRMaWdodFNoYWRvd3MpLHkucHVzaChSLm51bVNwb3RMaWdodFNoYWRvd3MpLHkucHVzaChSLnNoYWRvd01hcFR5cGUpLHkucHVzaChSLnRvbmVNYXBwaW5nKSx5LnB1c2goUi5udW1DbGlwcGluZ1BsYW5lcykseS5wdXNoKFIubnVtQ2xpcEludGVyc2VjdGlvbikseS5wdXNoKFIuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gUyh5LFIpe2EuZGlzYWJsZUFsbCgpLFIuaXNXZWJHTDImJmEuZW5hYmxlKDApLFIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksUi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxSLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksUi5tYXAmJmEuZW5hYmxlKDQpLFIubWF0Y2FwJiZhLmVuYWJsZSg1KSxSLmVudk1hcCYmYS5lbmFibGUoNiksUi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLFIubGlnaHRNYXAmJmEuZW5hYmxlKDgpLFIuYW9NYXAmJmEuZW5hYmxlKDkpLFIuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxSLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxSLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLFIub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxSLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLFIuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksUi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxSLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLFIuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksUi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxSLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksUi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxSLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLFIuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxSLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksUi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxSLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLFIudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksUi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxSLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksUi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksUi5mb2cmJmEuZW5hYmxlKDMxKSx5LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxSLnVzZUZvZyYmYS5lbmFibGUoMCksUi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksUi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxSLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxSLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLFIubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxSLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksUi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLFIuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksUi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksUi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLFIuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksUi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxSLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLFIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxSLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxSLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLFIudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksUi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxSLnNoZWVuJiZhLmVuYWJsZSgxOSksUi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksUi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMikseS5wdXNoKGEubWFzayl9ZnVuY3Rpb24gTCh5KXtsZXQgUj12W3kudHlwZV0sRDtpZihSKXtsZXQgRj1mbltSXTtEPXBNLmNsb25lKEYudW5pZm9ybXMpfWVsc2UgRD15LnVuaWZvcm1zO3JldHVybiBEfWZ1bmN0aW9uIEEoeSxSKXtsZXQgRDtmb3IobGV0IEY9MCx6PWMubGVuZ3RoO0Y8ejtGKyspe2xldCBOPWNbRl07aWYoTi5jYWNoZUtleT09PVIpe0Q9TiwrK0QudXNlZFRpbWVzO2JyZWFrfX1yZXR1cm4gRD09PXZvaWQgMCYmKEQ9bmV3IHBFKG4sUix5LHMpLGMucHVzaChEKSksRH1mdW5jdGlvbiBIKHkpe2lmKC0teS51c2VkVGltZXM9PT0wKXtsZXQgUj1jLmluZGV4T2YoeSk7Y1tSXT1jW2MubGVuZ3RoLTFdLGMucG9wKCkseS5kZXN0cm95KCl9fWZ1bmN0aW9uIHR0KHkpe2wucmVtb3ZlKHkpfWZ1bmN0aW9uIFgoKXtsLmRpc3Bvc2UoKX1yZXR1cm57Z2V0UGFyYW1ldGVyczpwLGdldFByb2dyYW1DYWNoZUtleTpiLGdldFVuaWZvcm1zOkwsYWNxdWlyZVByb2dyYW06QSxyZWxlYXNlUHJvZ3JhbTpILHJlbGVhc2VTaGFkZXJDYWNoZTp0dCxwcm9ncmFtczpjLGRpc3Bvc2U6WH19ZnVuY3Rpb24geEUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KHMpe2xldCBvPW4uZ2V0KHMpO3JldHVybiBvPT09dm9pZCAwJiYobz17fSxuLnNldChzLG8pKSxvfWZ1bmN0aW9uIGUocyl7bi5kZWxldGUocyl9ZnVuY3Rpb24gaShzLG8sYSl7bi5nZXQocylbb109YX1mdW5jdGlvbiByKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQscmVtb3ZlOmUsdXBkYXRlOmksZGlzcG9zZTpyfX1mdW5jdGlvbiB5RShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBOZyhuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIEZnKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoLGYsZCxnLHgsdil7bGV0IG09blt0XTtyZXR1cm4gbT09PXZvaWQgMD8obT17aWQ6aC5pZCxvYmplY3Q6aCxnZW9tZXRyeTpmLG1hdGVyaWFsOmQsZ3JvdXBPcmRlcjpnLHJlbmRlck9yZGVyOmgucmVuZGVyT3JkZXIsejp4LGdyb3VwOnZ9LG5bdF09bSk6KG0uaWQ9aC5pZCxtLm9iamVjdD1oLG0uZ2VvbWV0cnk9ZixtLm1hdGVyaWFsPWQsbS5ncm91cE9yZGVyPWcsbS5yZW5kZXJPcmRlcj1oLnJlbmRlck9yZGVyLG0uej14LG0uZ3JvdXA9diksdCsrLG19ZnVuY3Rpb24gYShoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnB1c2gobSk6ZC50cmFuc3BhcmVudD09PSEwP3IucHVzaChtKTplLnB1c2gobSl9ZnVuY3Rpb24gbChoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQobSk6ZC50cmFuc3BhcmVudD09PSEwP3IudW5zaGlmdChtKTplLnVuc2hpZnQobSl9ZnVuY3Rpb24gYyhoLGYpe2UubGVuZ3RoPjEmJmUuc29ydChofHx5RSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fE5nKSxyLmxlbmd0aD4xJiZyLnNvcnQoZnx8TmcpfWZ1bmN0aW9uIHUoKXtmb3IobGV0IGg9dCxmPW4ubGVuZ3RoO2g8ZjtoKyspe2xldCBkPW5baF07aWYoZC5pZD09PW51bGwpYnJlYWs7ZC5pZD1udWxsLGQub2JqZWN0PW51bGwsZC5nZW9tZXRyeT1udWxsLGQubWF0ZXJpYWw9bnVsbCxkLmdyb3VwPW51bGx9fXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6cyxwdXNoOmEsdW5zaGlmdDpsLGZpbmlzaDp1LHNvcnQ6Y319ZnVuY3Rpb24gdkUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KGkscil7bGV0IHM7cmV0dXJuIG4uaGFzKGkpPT09ITE/KHM9bmV3IEZnLG4uc2V0KGksW3NdKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhzPW5ldyBGZyxuLmdldChpKS5wdXNoKHMpKTpzPW4uZ2V0KGkpW3JdLHN9ZnVuY3Rpb24gZSgpe249bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LGRpc3Bvc2U6ZX19ZnVuY3Rpb24gX0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsZGlyZWN0aW9uOm5ldyBULGNvbG9yOm5ldyBmdCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxza3lDb2xvcjpuZXcgZnQsZ3JvdW5kQ29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBmdCxwb3NpdGlvbjpuZXcgVCxoYWxmV2lkdGg6bmV3IFQsaGFsZkhlaWdodDpuZXcgVH07YnJlYWt9cmV0dXJuIG5bdC5pZF09ZSxlfX19ZnVuY3Rpb24gd0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBLLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgTUU9MDtmdW5jdGlvbiBiRShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gU0Uobix0KXtsZXQgZT1uZXcgX0UsaT13RSgpLHI9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylyLnByb2JlLnB1c2gobmV3IFQpO2xldCBzPW5ldyBULG89bmV3IHd0LGE9bmV3IHd0O2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLGQ9MCxnPTA7Zm9yKGxldCB0dD0wO3R0PDk7dHQrKylyLnByb2JlW3R0XS5zZXQoMCwwLDApO2xldCB4PTAsdj0wLG09MCxwPTAsYj0wLF89MCxTPTAsTD0wO3Uuc29ydChiRSk7bGV0IEE9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IHR0PTAsWD11Lmxlbmd0aDt0dDxYO3R0Kyspe2xldCB5PXVbdHRdLFI9eS5jb2xvcixEPXkuaW50ZW5zaXR5LEY9eS5kaXN0YW5jZSx6PXkuc2hhZG93JiZ5LnNoYWRvdy5tYXA/eS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZih5LmlzQW1iaWVudExpZ2h0KWYrPVIucipEKkEsZCs9Ui5nKkQqQSxnKz1SLmIqRCpBO2Vsc2UgaWYoeS5pc0xpZ2h0UHJvYmUpZm9yKGxldCBOPTA7Tjw5O04rKylyLnByb2JlW05dLmFkZFNjYWxlZFZlY3Rvcih5LnNoLmNvZWZmaWNpZW50c1tOXSxEKTtlbHNlIGlmKHkuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuZGlyZWN0aW9uYWxTaGFkb3dbeF09USxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW3hdPXosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeFt4XT15LnNoYWRvdy5tYXRyaXgsXysrfXIuZGlyZWN0aW9uYWxbeF09Tix4Kyt9ZWxzZSBpZih5LmlzU3BvdExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbih5Lm1hdHJpeFdvcmxkKSxOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmRpc3RhbmNlPUYsTi5jb25lQ29zPU1hdGguY29zKHkuYW5nbGUpLE4ucGVudW1icmFDb3M9TWF0aC5jb3MoeS5hbmdsZSooMS15LnBlbnVtYnJhKSksTi5kZWNheT15LmRlY2F5LHkuY2FzdFNoYWRvdyl7bGV0IFY9eS5zaGFkb3csUT1pLmdldCh5KTtRLnNoYWRvd0JpYXM9Vi5iaWFzLFEuc2hhZG93Tm9ybWFsQmlhcz1WLm5vcm1hbEJpYXMsUS5zaGFkb3dSYWRpdXM9Vi5yYWRpdXMsUS5zaGFkb3dNYXBTaXplPVYubWFwU2l6ZSxyLnNwb3RTaGFkb3dbbV09USxyLnNwb3RTaGFkb3dNYXBbbV09eixyLnNwb3RTaGFkb3dNYXRyaXhbbV09eS5zaGFkb3cubWF0cml4LEwrK31yLnNwb3RbbV09TixtKyt9ZWxzZSBpZih5LmlzUmVjdEFyZWFMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5jb2xvci5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLE4uaGFsZldpZHRoLnNldCh5LndpZHRoKi41LDAsMCksTi5oYWxmSGVpZ2h0LnNldCgwLHkuaGVpZ2h0Ki41LDApLHIucmVjdEFyZWFbcF09TixwKyt9ZWxzZSBpZih5LmlzUG9pbnRMaWdodCl7bGV0IE49ZS5nZXQoeSk7aWYoTi5jb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkuaW50ZW5zaXR5KkEpLE4uZGlzdGFuY2U9eS5kaXN0YW5jZSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLFEuc2hhZG93Q2FtZXJhTmVhcj1WLmNhbWVyYS5uZWFyLFEuc2hhZG93Q2FtZXJhRmFyPVYuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3ZdPVEsci5wb2ludFNoYWRvd01hcFt2XT16LHIucG9pbnRTaGFkb3dNYXRyaXhbdl09eS5zaGFkb3cubWF0cml4LFMrK31yLnBvaW50W3ZdPU4sdisrfWVsc2UgaWYoeS5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5za3lDb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksTi5ncm91bmRDb2xvci5jb3B5KHkuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksci5oZW1pW2JdPU4sYisrfX1wPjAmJih0LmlzV2ViR0wyfHxuLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0ZMT0FUXzIpOm4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITA/KHIucmVjdEFyZWFMVEMxPW90LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1mLHIuYW1iaWVudFsxXT1kLHIuYW1iaWVudFsyXT1nO2xldCBIPXIuaGFzaDsoSC5kaXJlY3Rpb25hbExlbmd0aCE9PXh8fEgucG9pbnRMZW5ndGghPT12fHxILnNwb3RMZW5ndGghPT1tfHxILnJlY3RBcmVhTGVuZ3RoIT09cHx8SC5oZW1pTGVuZ3RoIT09Ynx8SC5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1ffHxILm51bVBvaW50U2hhZG93cyE9PVN8fEgubnVtU3BvdFNoYWRvd3MhPT1MKSYmKHIuZGlyZWN0aW9uYWwubGVuZ3RoPXgsci5zcG90Lmxlbmd0aD1tLHIucmVjdEFyZWEubGVuZ3RoPXAsci5wb2ludC5sZW5ndGg9dixyLmhlbWkubGVuZ3RoPWIsci5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9XyxyLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1fLHIucG9pbnRTaGFkb3cubGVuZ3RoPVMsci5wb2ludFNoYWRvd01hcC5sZW5ndGg9UyxyLnNwb3RTaGFkb3cubGVuZ3RoPUwsci5zcG90U2hhZG93TWFwLmxlbmd0aD1MLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPV8sci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9UyxyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPUwsSC5kaXJlY3Rpb25hbExlbmd0aD14LEgucG9pbnRMZW5ndGg9dixILnNwb3RMZW5ndGg9bSxILnJlY3RBcmVhTGVuZ3RoPXAsSC5oZW1pTGVuZ3RoPWIsSC5udW1EaXJlY3Rpb25hbFNoYWRvd3M9XyxILm51bVBvaW50U2hhZG93cz1TLEgubnVtU3BvdFNoYWRvd3M9TCxyLnZlcnNpb249TUUrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAsZD0wLGc9MCx4PTAsdj0wLG09aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBwPTAsYj11Lmxlbmd0aDtwPGI7cCsrKXtsZXQgXz11W3BdO2lmKF8uaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgUz1yLmRpcmVjdGlvbmFsW2ZdO1MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxzLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLnRhcmdldC5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24uc3ViKHMpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxmKyt9ZWxzZSBpZihfLmlzU3BvdExpZ2h0KXtsZXQgUz1yLnNwb3RbZ107Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksUy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGcrK31lbHNlIGlmKF8uaXNSZWN0QXJlYUxpZ2h0KXtsZXQgUz1yLnJlY3RBcmVhW3hdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGEuaWRlbnRpdHkoKSxvLmNvcHkoXy5tYXRyaXhXb3JsZCksby5wcmVtdWx0aXBseShtKSxhLmV4dHJhY3RSb3RhdGlvbihvKSxTLmhhbGZXaWR0aC5zZXQoXy53aWR0aCouNSwwLDApLFMuaGFsZkhlaWdodC5zZXQoMCxfLmhlaWdodCouNSwwKSxTLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksUy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSx4Kyt9ZWxzZSBpZihfLmlzUG9pbnRMaWdodCl7bGV0IFM9ci5wb2ludFtkXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxkKyt9ZWxzZSBpZihfLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgUz1yLmhlbWlbdl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxTLmRpcmVjdGlvbi5ub3JtYWxpemUoKSx2Kyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTpyfX1mdW5jdGlvbiB6ZyhuLHQpe2xldCBlPW5ldyBTRShuLHQpLGk9W10scj1bXTtmdW5jdGlvbiBzKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfWZ1bmN0aW9uIG8oaCl7aS5wdXNoKGgpfWZ1bmN0aW9uIGEoaCl7ci5wdXNoKGgpfWZ1bmN0aW9uIGwoaCl7ZS5zZXR1cChpLGgpfWZ1bmN0aW9uIGMoaCl7ZS5zZXR1cFZpZXcoaSxoKX1yZXR1cm57aW5pdDpzLHN0YXRlOntsaWdodHNBcnJheTppLHNoYWRvd3NBcnJheTpyLGxpZ2h0czplfSxzZXR1cExpZ2h0czpsLHNldHVwTGlnaHRzVmlldzpjLHB1c2hMaWdodDpvLHB1c2hTaGFkb3c6YX19ZnVuY3Rpb24gRUUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKHMsbz0wKXtsZXQgYTtyZXR1cm4gZS5oYXMocyk9PT0hMT8oYT1uZXcgemcobix0KSxlLnNldChzLFthXSkpOm8+PWUuZ2V0KHMpLmxlbmd0aD8oYT1uZXcgemcobix0KSxlLmdldChzKS5wdXNoKGEpKTphPWUuZ2V0KHMpW29dLGF9ZnVuY3Rpb24gcigpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDppLGRpc3Bvc2U6cn19dmFyIGNsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz1Ldyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtjbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgdWw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IFQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTt1bC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgVEU9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxBRT1gdW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7CnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKI2luY2x1ZGUgPHBhY2tpbmc+CnZvaWQgbWFpbigpIHsKCWNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTsKCWZsb2F0IG1lYW4gPSAwLjA7CglmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7CglmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7CglmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDsKCWZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkgewoJCWZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTsKCQkjaWZkZWYgSE9SSVpPTlRBTF9QQVNTCgkJCXZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkaXN0cmlidXRpb24ueDsKCQkJc3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54OwoJCSNlbHNlCgkJCWZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkZXB0aDsKCQkJc3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7CgkJI2VuZGlmCgl9CgltZWFuID0gbWVhbiAvIHNhbXBsZXM7CglzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzOwoJZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7CglnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApOwp9YDtmdW5jdGlvbiBUMChuLHQsZSl7bGV0IGk9bmV3IHFyLHI9bmV3IEsscz1uZXcgSyxvPW5ldyBXdCxhPW5ldyBjbCh7ZGVwdGhQYWNraW5nOlF3fSksbD1uZXcgdWwsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsaD17MDpoZSwxOmVvLDI6SHJ9LGY9bmV3IEZuKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBLfSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6VEUsZnJhZ21lbnRTaGFkZXI6QUV9KSxkPWYuY2xvbmUoKTtkLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGc9bmV3IEh0O2cuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgeD1uZXcgb2UoZyxmKSx2PXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1sMCx0aGlzLnJlbmRlcj1mdW5jdGlvbihfLFMsTCl7aWYodi5lbmFibGVkPT09ITF8fHYuYXV0b1VwZGF0ZT09PSExJiZ2Lm5lZWRzVXBkYXRlPT09ITF8fF8ubGVuZ3RoPT09MClyZXR1cm47bGV0IEE9bi5nZXRSZW5kZXJUYXJnZXQoKSxIPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx0dD1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksWD1uLnN0YXRlO1guc2V0QmxlbmRpbmcoam4pLFguYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxYLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksWC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCB5PTAsUj1fLmxlbmd0aDt5PFI7eSsrKXtsZXQgRD1fW3ldLEY9RC5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLEQsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtyLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoeikscy5jb3B5KEYubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKHMueD1NYXRoLmZsb29yKHUvei54KSxyLng9cy54KnoueCxGLm1hcFNpemUueD1zLngpLHIueT51JiYocy55PU1hdGguZmxvb3IodS96LnkpLHIueT1zLnkqei55LEYubWFwU2l6ZS55PXMueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1Kcyl7bGV0IFY9e21pbkZpbHRlcjpiZSxtYWdGaWx0ZXI6YmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IE5lKHIueCxyLnksViksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFY9e21pbkZpbHRlcjpmZSxtYWdGaWx0ZXI6ZmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bi5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLG4uY2xlYXIoKTtsZXQgTj1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFY9MDtWPE47VisrKXtsZXQgUT1GLmdldFZpZXdwb3J0KFYpO28uc2V0KHMueCpRLngscy55KlEueSxzLngqUS56LHMueSpRLncpLFgudmlld3BvcnQobyksRi51cGRhdGVNYXRyaWNlcyhELFYpLGk9Ri5nZXRGcnVzdHVtKCksYihTLEwsRi5jYW1lcmEsRCx0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09SnMmJm0oRixMKSxGLm5lZWRzVXBkYXRlPSExfXYubmVlZHNVcGRhdGU9ITEsbi5zZXRSZW5kZXJUYXJnZXQoQSxILHR0KX07ZnVuY3Rpb24gbShfLFMpe2xldCBMPXQudXBkYXRlKHgpO2YuZGVmaW5lcy5WU01fU0FNUExFUyE9PV8uYmx1clNhbXBsZXMmJihmLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxkLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxmLm5lZWRzVXBkYXRlPSEwLGQubmVlZHNVcGRhdGU9ITApLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXAudGV4dHVyZSxmLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Xy5tYXBTaXplLGYudW5pZm9ybXMucmFkaXVzLnZhbHVlPV8ucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KF8ubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGYseCxudWxsKSxkLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPV8ubWFwUGFzcy50ZXh0dXJlLGQudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChTLG51bGwsTCxkLHgsbnVsbCl9ZnVuY3Rpb24gcChfLFMsTCxBLEgsdHQsWCl7bGV0IHk9bnVsbCxSPUEuaXNQb2ludExpZ2h0PT09ITA/Xy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOl8uY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihSIT09dm9pZCAwP3k9Ujp5PUEuaXNQb2ludExpZ2h0PT09ITA/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJkwuY2xpcFNoYWRvd3M9PT0hMCYmTC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxMLmRpc3BsYWNlbWVudE1hcCYmTC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fEwuYWxwaGFNYXAmJkwuYWxwaGFUZXN0PjApe2xldCBEPXkudXVpZCxGPUwudXVpZCx6PWNbRF07ej09PXZvaWQgMCYmKHo9e30sY1tEXT16KTtsZXQgTj16W0ZdO049PT12b2lkIDAmJihOPXkuY2xvbmUoKSx6W0ZdPU4pLHk9Tn1yZXR1cm4geS52aXNpYmxlPUwudmlzaWJsZSx5LndpcmVmcmFtZT1MLndpcmVmcmFtZSxYPT09SnM/eS5zaWRlPUwuc2hhZG93U2lkZSE9PW51bGw/TC5zaGFkb3dTaWRlOkwuc2lkZTp5LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6aFtMLnNpZGVdLHkuYWxwaGFNYXA9TC5hbHBoYU1hcCx5LmFscGhhVGVzdD1MLmFscGhhVGVzdCx5LmNsaXBTaGFkb3dzPUwuY2xpcFNoYWRvd3MseS5jbGlwcGluZ1BsYW5lcz1MLmNsaXBwaW5nUGxhbmVzLHkuY2xpcEludGVyc2VjdGlvbj1MLmNsaXBJbnRlcnNlY3Rpb24seS5kaXNwbGFjZW1lbnRNYXA9TC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZT1MLmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcz1MLmRpc3BsYWNlbWVudEJpYXMseS53aXJlZnJhbWVMaW5ld2lkdGg9TC53aXJlZnJhbWVMaW5ld2lkdGgseS5saW5ld2lkdGg9TC5saW5ld2lkdGgsQS5pc1BvaW50TGlnaHQ9PT0hMCYmeS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJih5LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSx5Lm5lYXJEaXN0YW5jZT1ILHkuZmFyRGlzdGFuY2U9dHQpLHl9ZnVuY3Rpb24gYihfLFMsTCxBLEgpe2lmKF8udmlzaWJsZT09PSExKXJldHVybjtpZihfLmxheWVycy50ZXN0KFMubGF5ZXJzKSYmKF8uaXNNZXNofHxfLmlzTGluZXx8Xy5pc1BvaW50cykmJihfLmNhc3RTaGFkb3d8fF8ucmVjZWl2ZVNoYWRvdyYmSD09PUpzKSYmKCFfLmZydXN0dW1DdWxsZWR8fGkuaW50ZXJzZWN0c09iamVjdChfKSkpe18ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTC5tYXRyaXhXb3JsZEludmVyc2UsXy5tYXRyaXhXb3JsZCk7bGV0IHk9dC51cGRhdGUoXyksUj1fLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoUikpe2xldCBEPXkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49RFtGXSxWPVJbTi5tYXRlcmlhbEluZGV4XTtpZihWJiZWLnZpc2libGUpe2xldCBRPXAoXyx5LFYsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksUSxfLE4pfX19ZWxzZSBpZihSLnZpc2libGUpe2xldCBEPXAoXyx5LFIsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksRCxfLG51bGwpfX1sZXQgWD1fLmNoaWxkcmVuO2ZvcihsZXQgeT0wLFI9WC5sZW5ndGg7eTxSO3krKyliKFhbeV0sUyxMLEEsSCl9fWZ1bmN0aW9uIENFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIoKXtsZXQgUD0hMSxwdD1uZXcgV3QsaHQ9bnVsbCxFdD1uZXcgV3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oWSl7aHQhPT1ZJiYhUCYmKG4uY29sb3JNYXNrKFksWSxZLFkpLGh0PVkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZLE10LER0LGp0LHplKXt6ZT09PSEwJiYoWSo9anQsTXQqPWp0LER0Kj1qdCkscHQuc2V0KFksTXQsRHQsanQpLEV0LmVxdWFscyhwdCk9PT0hMSYmKG4uY2xlYXJDb2xvcihZLE10LER0LGp0KSxFdC5jb3B5KHB0KSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxodD1udWxsLEV0LnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBzKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oWSl7WT9rKDI5MjkpOkZ0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFkpe3B0IT09WSYmIVAmJihuLmRlcHRoTWFzayhZKSxwdD1ZKX0sc2V0RnVuYzpmdW5jdGlvbihZKXtpZihodCE9PVkpe2lmKFkpc3dpdGNoKFkpe2Nhc2UgeXc6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIHZ3Om4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBfdzpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgenU6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHd3Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBNdzpuLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgYnc6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIFN3Om4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtodD1ZfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFkpe1A9WX0sc2V0Q2xlYXI6ZnVuY3Rpb24oWSl7RXQhPT1ZJiYobi5jbGVhckRlcHRoKFkpLEV0PVkpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGx9fX1mdW5jdGlvbiBvKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24obmUpe1B8fChuZT9rKDI5NjApOkZ0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihuZSl7cHQhPT1uZSYmIVAmJihuLnN0ZW5jaWxNYXNrKG5lKSxwdD1uZSl9LHNldEZ1bmM6ZnVuY3Rpb24obmUsZW4seW4peyhodCE9PW5lfHxFdCE9PWVufHxZIT09eW4pJiYobi5zdGVuY2lsRnVuYyhuZSxlbix5biksaHQ9bmUsRXQ9ZW4sWT15bil9LHNldE9wOmZ1bmN0aW9uKG5lLGVuLHluKXsoTXQhPT1uZXx8RHQhPT1lbnx8anQhPT15bikmJihuLnN0ZW5jaWxPcChuZSxlbix5biksTXQ9bmUsRHQ9ZW4sanQ9eW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24obmUpe1A9bmV9LHNldENsZWFyOmZ1bmN0aW9uKG5lKXt6ZSE9PW5lJiYobi5jbGVhclN0ZW5jaWwobmUpLHplPW5lKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLHB0PW51bGwsaHQ9bnVsbCxFdD1udWxsLFk9bnVsbCxNdD1udWxsLER0PW51bGwsanQ9bnVsbCx6ZT1udWxsfX19bGV0IGE9bmV3IHIsbD1uZXcgcyxjPW5ldyBvLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsRD1uLmdldFBhcmFtZXRlcigzNTY2MSksRj0hMSx6PTAsTj1uLmdldFBhcmFtZXRlcig3OTM4KTtOLmluZGV4T2YoIldlYkdMIikhPT0tMT8oej1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0xKTpOLmluZGV4T2YoIk9wZW5HTCBFUyIpIT09LTEmJih6PXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0yKTtsZXQgVj1udWxsLFE9e30sYXQ9bi5nZXRQYXJhbWV0ZXIoMzA4OCksRz1uLmdldFBhcmFtZXRlcigyOTc4KSwkPW5ldyBXdCgpLmZyb21BcnJheShhdCksbHQ9bmV3IFd0KCkuZnJvbUFycmF5KEcpO2Z1bmN0aW9uIGR0KFAscHQsaHQpe2xldCBFdD1uZXcgVWludDhBcnJheSg0KSxZPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoUCxZKSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MCw5NzI4KTtmb3IobGV0IE10PTA7TXQ8aHQ7TXQrKyluLnRleEltYWdlMkQocHQrTXQsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxFdCk7cmV0dXJuIFl9bGV0IHh0PXt9O3h0WzM1NTNdPWR0KDM1NTMsMzU1MywxKSx4dFszNDA2N109ZHQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksaygyOTI5KSxsLnNldEZ1bmMoenUpLEooITEpLGl0KEFtKSxrKDI4ODQpLEMoam4pO2Z1bmN0aW9uIGsoUCl7dVtQXSE9PSEwJiYobi5lbmFibGUoUCksdVtQXT0hMCl9ZnVuY3Rpb24gRnQoUCl7dVtQXSE9PSExJiYobi5kaXNhYmxlKFApLHVbUF09ITEpfWZ1bmN0aW9uIG10KFAscHQpe3JldHVybiBoW1BdIT09cHQ/KG4uYmluZEZyYW1lYnVmZmVyKFAscHQpLGhbUF09cHQsaSYmKFA9PT0zNjAwOSYmKGhbMzYxNjBdPXB0KSxQPT09MzYxNjAmJihoWzM2MDA5XT1wdCkpLCEwKTohMX1mdW5jdGlvbiBTdChQLHB0KXtsZXQgaHQ9ZCxFdD0hMTtpZihQKWlmKGh0PWYuZ2V0KHB0KSxodD09PXZvaWQgMCYmKGh0PVtdLGYuc2V0KHB0LGh0KSksUC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgWT1QLnRleHR1cmU7aWYoaHQubGVuZ3RoIT09WS5sZW5ndGh8fGh0WzBdIT09MzYwNjQpe2ZvcihsZXQgTXQ9MCxEdD1ZLmxlbmd0aDtNdDxEdDtNdCsrKWh0W010XT0zNjA2NCtNdDtodC5sZW5ndGg9WS5sZW5ndGgsRXQ9ITB9fWVsc2UgaHRbMF0hPT0zNjA2NCYmKGh0WzBdPTM2MDY0LEV0PSEwKTtlbHNlIGh0WzBdIT09MTAyOSYmKGh0WzBdPTEwMjksRXQ9ITApO0V0JiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGh0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChodCkpfWZ1bmN0aW9uIEIoUCl7cmV0dXJuIGchPT1QPyhuLnVzZVByb2dyYW0oUCksZz1QLCEwKTohMX1sZXQgc3Q9e1tJcl06MzI3NzQsW2F3XTozMjc3OCxbbHddOjMyNzc5fTtpZihpKXN0W1BtXT0zMjc3NSxzdFtEbV09MzI3NzY7ZWxzZXtsZXQgUD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO1AhPT1udWxsJiYoc3RbUG1dPVAuTUlOX0VYVCxzdFtEbV09UC5NQVhfRVhUKX1sZXQgbnQ9e1tjd106MCxbdXddOjEsW2h3XTo3NjgsW3UwXTo3NzAsW3h3XTo3NzYsW213XTo3NzQsW2R3XTo3NzIsW2Z3XTo3NjksW2gwXTo3NzEsW2d3XTo3NzUsW3B3XTo3NzN9O2Z1bmN0aW9uIEMoUCxwdCxodCxFdCxZLE10LER0LGp0KXtpZihQPT09am4pe3g9PT0hMCYmKEZ0KDMwNDIpLHg9ITEpO3JldHVybn1pZih4PT09ITEmJihrKDMwNDIpLHg9ITApLFAhPT1vdyl7aWYoUCE9PXZ8fGp0IT09QSl7aWYoKG0hPT1Jcnx8XyE9PUlyKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksbT1JcixfPUlyKSxqdClzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIENtOm4uYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsUCk7YnJlYWt9ZWxzZSBzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgUm06bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgTG06bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31wPW51bGwsYj1udWxsLFM9bnVsbCxMPW51bGwsdj1QLEE9anR9cmV0dXJufVk9WXx8cHQsTXQ9TXR8fGh0LER0PUR0fHxFdCwocHQhPT1tfHxZIT09XykmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShzdFtwdF0sc3RbWV0pLG09cHQsXz1ZKSwoaHQhPT1wfHxFdCE9PWJ8fE10IT09U3x8RHQhPT1MKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUobnRbaHRdLG50W0V0XSxudFtNdF0sbnRbRHRdKSxwPWh0LGI9RXQsUz1NdCxMPUR0KSx2PVAsQT1udWxsfWZ1bmN0aW9uIGooUCxwdCl7UC5zaWRlPT09SHI/RnQoMjg4NCk6aygyODg0KTtsZXQgaHQ9UC5zaWRlPT09aGU7cHQmJihodD0haHQpLEooaHQpLFAuYmxlbmRpbmc9PT1LcyYmUC50cmFuc3BhcmVudD09PSExP0Moam4pOkMoUC5ibGVuZGluZyxQLmJsZW5kRXF1YXRpb24sUC5ibGVuZFNyYyxQLmJsZW5kRHN0LFAuYmxlbmRFcXVhdGlvbkFscGhhLFAuYmxlbmRTcmNBbHBoYSxQLmJsZW5kRHN0QWxwaGEsUC5wcmVtdWx0aXBsaWVkQWxwaGEpLGwuc2V0RnVuYyhQLmRlcHRoRnVuYyksbC5zZXRUZXN0KFAuZGVwdGhUZXN0KSxsLnNldE1hc2soUC5kZXB0aFdyaXRlKSxhLnNldE1hc2soUC5jb2xvcldyaXRlKTtsZXQgRXQ9UC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KEV0KSxFdCYmKGMuc2V0TWFzayhQLnN0ZW5jaWxXcml0ZU1hc2spLGMuc2V0RnVuYyhQLnN0ZW5jaWxGdW5jLFAuc3RlbmNpbFJlZixQLnN0ZW5jaWxGdW5jTWFzayksYy5zZXRPcChQLnN0ZW5jaWxGYWlsLFAuc3RlbmNpbFpGYWlsLFAuc3RlbmNpbFpQYXNzKSksdnQoUC5wb2x5Z29uT2Zmc2V0LFAucG9seWdvbk9mZnNldEZhY3RvcixQLnBvbHlnb25PZmZzZXRVbml0cyksUC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9rKDMyOTI2KTpGdCgzMjkyNil9ZnVuY3Rpb24gSihQKXtIIT09UCYmKFA/bi5mcm9udEZhY2UoMjMwNCk6bi5mcm9udEZhY2UoMjMwNSksSD1QKX1mdW5jdGlvbiBpdChQKXtQIT09aXc/KGsoMjg4NCksUCE9PXR0JiYoUD09PUFtP24uY3VsbEZhY2UoMTAyOSk6UD09PXJ3P24uY3VsbEZhY2UoMTAyOCk6bi5jdWxsRmFjZSgxMDMyKSkpOkZ0KDI4ODQpLHR0PVB9ZnVuY3Rpb24gZXQoUCl7UCE9PVgmJihGJiZuLmxpbmVXaWR0aChQKSxYPVApfWZ1bmN0aW9uIHZ0KFAscHQsaHQpe1A/KGsoMzI4MjMpLCh5IT09cHR8fFIhPT1odCkmJihuLnBvbHlnb25PZmZzZXQocHQsaHQpLHk9cHQsUj1odCkpOkZ0KDMyODIzKX1mdW5jdGlvbiBidChQKXtQP2soMzA4OSk6RnQoMzA4OSl9ZnVuY3Rpb24gSXQoUCl7UD09PXZvaWQgMCYmKFA9MzM5ODQrRC0xKSxWIT09UCYmKG4uYWN0aXZlVGV4dHVyZShQKSxWPVApfWZ1bmN0aW9uIFp0KFAscHQpe1Y9PT1udWxsJiZJdCgpO2xldCBodD1RW1ZdO2h0PT09dm9pZCAwJiYoaHQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxRW1ZdPWh0KSwoaHQudHlwZSE9PVB8fGh0LnRleHR1cmUhPT1wdCkmJihuLmJpbmRUZXh0dXJlKFAscHR8fHh0W1BdKSxodC50eXBlPVAsaHQudGV4dHVyZT1wdCl9ZnVuY3Rpb24gcXQoKXtsZXQgUD1RW1ZdO1AhPT12b2lkIDAmJlAudHlwZSE9PXZvaWQgMCYmKG4uYmluZFRleHR1cmUoUC50eXBlLG51bGwpLFAudHlwZT12b2lkIDAsUC50ZXh0dXJlPXZvaWQgMCl9ZnVuY3Rpb24gRSgpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHcoKXt0cnl7bi50ZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHEoKXt0cnl7bi50ZXhTdWJJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHJ0KCl7dHJ5e24uY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gZ3QoKXt0cnl7bi50ZXhTdG9yYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gVygpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBfdCgpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24geXQoKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHV0KFApeyQuZXF1YWxzKFApPT09ITEmJihuLnNjaXNzb3IoUC54LFAueSxQLnosUC53KSwkLmNvcHkoUCkpfWZ1bmN0aW9uIGN0KFApe2x0LmVxdWFscyhQKT09PSExJiYobi52aWV3cG9ydChQLngsUC55LFAueixQLncpLGx0LmNvcHkoUCkpfWZ1bmN0aW9uIEF0KCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksaT09PSEwJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LFY9bnVsbCxRPXt9LGg9e30sZj1uZXcgV2Vha01hcCxkPVtdLGc9bnVsbCx4PSExLHY9bnVsbCxtPW51bGwscD1udWxsLGI9bnVsbCxfPW51bGwsUz1udWxsLEw9bnVsbCxBPSExLEg9bnVsbCx0dD1udWxsLFg9bnVsbCx5PW51bGwsUj1udWxsLCQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmssZGlzYWJsZTpGdCxiaW5kRnJhbWVidWZmZXI6bXQsZHJhd0J1ZmZlcnM6U3QsdXNlUHJvZ3JhbTpCLHNldEJsZW5kaW5nOkMsc2V0TWF0ZXJpYWw6aixzZXRGbGlwU2lkZWQ6SixzZXRDdWxsRmFjZTppdCxzZXRMaW5lV2lkdGg6ZXQsc2V0UG9seWdvbk9mZnNldDp2dCxzZXRTY2lzc29yVGVzdDpidCxhY3RpdmVUZXh0dXJlOkl0LGJpbmRUZXh0dXJlOlp0LHVuYmluZFRleHR1cmU6cXQsY29tcHJlc3NlZFRleEltYWdlMkQ6RSx0ZXhJbWFnZTJEOl90LHRleEltYWdlM0Q6eXQsdGV4U3RvcmFnZTJEOmd0LHRleFN0b3JhZ2UzRDpXLHRleFN1YkltYWdlMkQ6dyx0ZXhTdWJJbWFnZTNEOnEsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6cnQsc2Npc3Nvcjp1dCx2aWV3cG9ydDpjdCxyZXNldDpBdH19ZnVuY3Rpb24gUkUobix0LGUsaSxyLHMsbyl7bGV0IGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXIubWF4U2FtcGxlcyxkPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGc9bmV3IFdlYWtNYXAseCx2PSExO3RyeXt2PXR5cGVvZiBPZmZzY3JlZW5DYW52YXMhPSJ1bmRlZmluZWQiJiZuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSE9PW51bGx9Y2F0Y2goRSl7fWZ1bmN0aW9uIG0oRSx3KXtyZXR1cm4gdj9uZXcgT2Zmc2NyZWVuQ2FudmFzKEUsdyk6cm8oImNhbnZhcyIpfWZ1bmN0aW9uIHAoRSx3LHEscnQpe2xldCBndD0xO2lmKChFLndpZHRoPnJ0fHxFLmhlaWdodD5ydCkmJihndD1ydC9NYXRoLm1heChFLndpZHRoLEUuaGVpZ2h0KSksZ3Q8MXx8dz09PSEwKWlmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJkUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgVz13P25NOk1hdGguZmxvb3IsX3Q9VyhndCpFLndpZHRoKSx5dD1XKGd0KkUuaGVpZ2h0KTt4PT09dm9pZCAwJiYoeD1tKF90LHl0KSk7bGV0IHV0PXE/bShfdCx5dCk6eDtyZXR1cm4gdXQud2lkdGg9X3QsdXQuaGVpZ2h0PXl0LHV0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwLF90LHl0KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpIHRvICgiK190KyJ4Iit5dCsiKS4iKSx1dH1lbHNlIHJldHVybiJkYXRhImluIEUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIitFLndpZHRoKyJ4IitFLmhlaWdodCsiKS4iKSxFO3JldHVybiBFfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGlnKEUud2lkdGgpJiZpZyhFLmhlaWdodCl9ZnVuY3Rpb24gXyhFKXtyZXR1cm4gYT8hMTpFLndyYXBTIT09VmV8fEUud3JhcFQhPT1WZXx8RS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZX1mdW5jdGlvbiBTKEUsdyl7cmV0dXJuIEUuZ2VuZXJhdGVNaXBtYXBzJiZ3JiZFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIEwoRSl7bi5nZW5lcmF0ZU1pcG1hcChFKX1mdW5jdGlvbiBBKEUsdyxxLHJ0LGd0PSExKXtpZihhPT09ITEpcmV0dXJuIHc7aWYoRSE9PW51bGwpe2lmKG5bRV0hPT12b2lkIDApcmV0dXJuIG5bRV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK0UrIiciKX1sZXQgVz13O3JldHVybiB3PT09NjQwMyYmKHE9PT01MTI2JiYoVz0zMzMyNikscT09PTUxMzEmJihXPTMzMzI1KSxxPT09NTEyMSYmKFc9MzMzMjEpKSx3PT09MzMzMTkmJihxPT09NTEyNiYmKFc9MzMzMjgpLHE9PT01MTMxJiYoVz0zMzMyNykscT09PTUxMjEmJihXPTMzMzIzKSksdz09PTY0MDgmJihxPT09NTEyNiYmKFc9MzQ4MzYpLHE9PT01MTMxJiYoVz0zNDg0MikscT09PTUxMjEmJihXPXJ0PT09JHQmJmd0PT09ITE/MzU5MDc6MzI4NTYpLHE9PT0zMjgxOSYmKFc9MzI4NTQpLHE9PT0zMjgyMCYmKFc9MzI4NTUpKSwoVz09PTMzMzI1fHxXPT09MzMzMjZ8fFc9PT0zMzMyN3x8Vz09PTMzMzI4fHxXPT09MzQ4NDJ8fFc9PT0zNDgzNikmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksV31mdW5jdGlvbiBIKEUsdyxxKXtyZXR1cm4gUyhFLHEpPT09ITB8fEUuaXNGcmFtZWJ1ZmZlclRleHR1cmUmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmU/TWF0aC5sb2cyKE1hdGgubWF4KHcud2lkdGgsdy5oZWlnaHQpKSsxOkUubWlwbWFwcyE9PXZvaWQgMCYmRS5taXBtYXBzLmxlbmd0aD4wP0UubWlwbWFwcy5sZW5ndGg6RS5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KEUuaW1hZ2UpP3cubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiB0dChFKXtyZXR1cm4gRT09PWZlfHxFPT09SW18fEU9PT1ObT85NzI4Ojk3Mjl9ZnVuY3Rpb24gWChFKXtsZXQgdz1FLnRhcmdldDt3LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLFIodyksdy5pc1ZpZGVvVGV4dHVyZSYmZy5kZWxldGUodyksby5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB5KEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRCh3KX1mdW5jdGlvbiBSKEUpe2xldCB3PWkuZ2V0KEUpO3cuX193ZWJnbEluaXQhPT12b2lkIDAmJihuLmRlbGV0ZVRleHR1cmUody5fX3dlYmdsVGV4dHVyZSksaS5yZW1vdmUoRSkpfWZ1bmN0aW9uIEQoRSl7bGV0IHc9RS50ZXh0dXJlLHE9aS5nZXQoRSkscnQ9aS5nZXQodyk7aWYoISFFKXtpZihydC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZShydC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksRS5kZXB0aFRleHR1cmUmJkUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZ3Q9MDtndDw2O2d0Kyspbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcltndF0pLHEuX193ZWJnbERlcHRoYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aGJ1ZmZlcltndF0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcikscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyKSxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcikscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGd0PTAsVz13Lmxlbmd0aDtndDxXO2d0Kyspe2xldCBfdD1pLmdldCh3W2d0XSk7X3QuX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUoX3QuX193ZWJnbFRleHR1cmUpLG8ubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKHdbZ3RdKX1pLnJlbW92ZSh3KSxpLnJlbW92ZShFKX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIE4oKXtsZXQgRT1GO3JldHVybiBFPj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitFKyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSxFfWZ1bmN0aW9uIFYoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLmlzVmlkZW9UZXh0dXJlJiZldChFKSxFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2xldCBydD1FLmltYWdlO2lmKHJ0PT09dm9pZCAwKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZSBpZihydC5jb21wbGV0ZT09PSExKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpO2Vsc2V7ayhxLEUsdyk7cmV0dXJufX1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTUzLHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFEoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2socSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTg2NixxLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBhdChFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDMyODc5LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIEcoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe0Z0KHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzQwNjcscS5fX3dlYmdsVGV4dHVyZSl9bGV0ICQ9e1tPdV06MTA0OTcsW1ZlXTozMzA3MSxba3VdOjMzNjQ4fSxsdD17W2ZlXTo5NzI4LFtJbV06OTk4NCxbTm1dOjk5ODYsW2JlXTo5NzI5LFtEd106OTk4NSxbTGxdOjk5ODd9O2Z1bmN0aW9uIGR0KEUsdyxxKXtpZihxPyhuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwkW3cud3JhcFNdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywkW3cud3JhcFRdKSwoRT09PTMyODc5fHxFPT09MzU4NjYpJiZuLnRleFBhcmFtZXRlcmkoRSwzMjg4MiwkW3cud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCxsdFt3Lm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLGx0W3cubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDMsMzMwNzEpLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLDMzMDcxKSwody53cmFwUyE9PVZlfHx3LndyYXBUIT09VmUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDAsdHQody5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MSx0dCh3Lm1pbkZpbHRlcikpLHcubWluRmlsdGVyIT09ZmUmJncubWluRmlsdGVyIT09YmUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSx0LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik9PT0hMCl7bGV0IHJ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZih3LnR5cGU9PT1VaSYmdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITF8fGE9PT0hMSYmdy50eXBlPT09VXImJnQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITEpcmV0dXJuOyh3LmFuaXNvdHJvcHk+MXx8aS5nZXQodykuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoRSxydC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbih3LmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5PXcuYW5pc290cm9weSl9fWZ1bmN0aW9uIHh0KEUsdyl7RS5fX3dlYmdsSW5pdD09PXZvaWQgMCYmKEUuX193ZWJnbEluaXQ9ITAsdy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixYKSxFLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLG8ubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGsoRSx3LHEpe2xldCBydD0zNTUzO3cuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihydD0zNTg2Niksdy5pc0RhdGFUZXh0dXJlM0QmJihydD0zMjg3OSkseHQoRSx3KSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrcSksZS5iaW5kVGV4dHVyZShydCxFLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLHcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsdy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsdy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGd0PV8odykmJmIody5pbWFnZSk9PT0hMSxXPXAody5pbWFnZSxndCwhMSx1KTtXPXZ0KHcsVyk7bGV0IF90PWIoVyl8fGEseXQ9cy5jb252ZXJ0KHcuZm9ybWF0LHcuZW5jb2RpbmcpLHV0PXMuY29udmVydCh3LnR5cGUpLGN0PUEody5pbnRlcm5hbEZvcm1hdCx5dCx1dCx3LmVuY29kaW5nLHcuaXNWaWRlb1RleHR1cmUpO2R0KHJ0LHcsX3QpO2xldCBBdCxQPXcubWlwbWFwcyxwdD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAsaHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsRXQ9SCh3LFcsX3QpO2lmKHcuaXNEZXB0aFRleHR1cmUpY3Q9NjQwMixhP3cudHlwZT09PVVpP2N0PTM2MDEyOncudHlwZT09PVFhP2N0PTMzMTkwOncudHlwZT09PUJyP2N0PTM1MDU2OmN0PTMzMTg5OncudHlwZT09PVVpJiZjb25zb2xlLmVycm9yKCJXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4iKSx3LmZvcm1hdD09PU9pJiZjdD09PTY0MDImJncudHlwZSE9PW5vJiZ3LnR5cGUhPT1RYSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLHcudHlwZT1ubyx1dD1zLmNvbnZlcnQody50eXBlKSksdy5mb3JtYXQ9PT1WciYmY3Q9PT02NDAyJiYoY3Q9MzQwNDEsdy50eXBlIT09QnImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPUJyLHV0PXMuY29udmVydCh3LnR5cGUpKSkscHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxjdCxXLndpZHRoLFcuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxudWxsKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZSlpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSk7dy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBwdD8oaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVy53aWR0aCxXLmhlaWdodCx5dCx1dCxXLmRhdGEpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxXLmRhdGEpO2Vsc2UgaWYody5pc0NvbXByZXNzZWRUZXh0dXJlKXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSx3LmZvcm1hdCE9PVJlP3l0IT09bnVsbD9wdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LEF0LmRhdGEpOmUuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLEF0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEF0LndpZHRoLEF0LmhlaWdodCx5dCx1dCxBdC5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLHl0LHV0LEF0LmRhdGEpfWVsc2UgaWYody5pc0RhdGFUZXh0dXJlMkRBcnJheSlwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDM1ODY2LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUzRClwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDMyODc5LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzMjg3OSwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRnJhbWVidWZmZXJUZXh0dXJlKXB0JiZodD9lLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYoUC5sZW5ndGg+MCYmX3Qpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLHl0LHV0LEF0KTplLnRleEltYWdlMkQoMzU1MyxZLGN0LHl0LHV0LEF0KTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCx5dCx1dCxXKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCx5dCx1dCxXKTtTKHcsX3QpJiZMKHJ0KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBGdChFLHcscSl7aWYody5pbWFnZS5sZW5ndGghPT02KXJldHVybjt4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKDM0MDY3LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgcnQ9dyYmKHcuaXNDb21wcmVzc2VkVGV4dHVyZXx8dy5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxndD13LmltYWdlWzBdJiZ3LmltYWdlWzBdLmlzRGF0YVRleHR1cmUsVz1bXTtmb3IobGV0IFk9MDtZPDY7WSsrKSFydCYmIWd0P1dbWV09cCh3LmltYWdlW1ldLCExLCEwLGMpOldbWV09Z3Q/dy5pbWFnZVtZXS5pbWFnZTp3LmltYWdlW1ldLFdbWV09dnQodyxXW1ldKTtsZXQgX3Q9V1swXSx5dD1iKF90KXx8YSx1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9YSYmdy5pc1ZpZGVvVGV4dHVyZSE9PSEwLHB0PUUuX192ZXJzaW9uPT09dm9pZCAwLGh0PUgodyxfdCx5dCk7ZHQoMzQwNjcsdyx5dCk7bGV0IEV0O2lmKHJ0KXtQJiZwdCYmZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsX3Qud2lkdGgsX3QuaGVpZ2h0KTtmb3IobGV0IFk9MDtZPDY7WSsrKXtFdD1XW1ldLm1pcG1hcHM7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQgRHQ9RXRbTXRdO3cuZm9ybWF0IT09UmU/dXQhPT1udWxsP1A/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsRHQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStZLE10LEF0LER0LndpZHRoLER0LmhlaWdodCwwLER0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCkiKTpQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsY3QsRHQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsdXQsY3QsRHQuZGF0YSl9fX1lbHNle0V0PXcubWlwbWFwcyxQJiZwdCYmKEV0Lmxlbmd0aD4wJiZodCsrLGUudGV4U3RvcmFnZTJEKDM0MDY3LGh0LEF0LFdbMF0ud2lkdGgsV1swXS5oZWlnaHQpKTtmb3IobGV0IFk9MDtZPDY7WSsrKWlmKGd0KXtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLDAsMCwwLFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsdXQsY3QsV1tZXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsMCx1dCxjdCxXW1ldLmRhdGEpO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IGp0PUV0W010XS5pbWFnZVtZXS5pbWFnZTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLGp0LndpZHRoLGp0LmhlaWdodCx1dCxjdCxqdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LGp0LndpZHRoLGp0LmhlaWdodCwwLHV0LGN0LGp0LmRhdGEpfX1lbHNle1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsdXQsY3QsV1tZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksMCxBdCx1dCxjdCxXW1ldKTtmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSxNdCsxLDAsMCx1dCxjdCxEdC5pbWFnZVtZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQrMSxBdCx1dCxjdCxEdC5pbWFnZVtZXSl9fX1TKHcseXQpJiZMKDM0MDY3KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBtdChFLHcscSxydCxndCl7bGV0IFc9cy5jb252ZXJ0KHEuZm9ybWF0LHEuZW5jb2RpbmcpLF90PXMuY29udmVydChxLnR5cGUpLHl0PUEocS5pbnRlcm5hbEZvcm1hdCxXLF90LHEuZW5jb2RpbmcpO2kuZ2V0KHcpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGd0PT09MzI4Nzl8fGd0PT09MzU4NjY/ZS50ZXhJbWFnZTNEKGd0LDAseXQsdy53aWR0aCx3LmhlaWdodCx3LmRlcHRoLDAsVyxfdCxudWxsKTplLnRleEltYWdlMkQoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LDAsVyxfdCxudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHJ0LGd0LGkuZ2V0KHEpLl9fd2ViZ2xUZXh0dXJlLDAsaXQodykpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gU3QoRSx3LHEpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxFKSx3LmRlcHRoQnVmZmVyJiYhdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9MzMxODk7aWYocXx8dy51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBndD13LmRlcHRoVGV4dHVyZTtndCYmZ3QuaXNEZXB0aFRleHR1cmUmJihndC50eXBlPT09VWk/cnQ9MzYwMTI6Z3QudHlwZT09PVFhJiYocnQ9MzMxOTApKTtsZXQgVz1pdCh3KTt3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxXLHJ0LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscnQsdy53aWR0aCx3LmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxFKX1lbHNlIGlmKHcuZGVwdGhCdWZmZXImJncuc3RlbmNpbEJ1ZmZlcil7bGV0IHJ0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSx3LndpZHRoLHcuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLEUpfWVsc2V7bGV0IHJ0PXcuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3cudGV4dHVyZVswXTp3LnRleHR1cmUsZ3Q9cy5jb252ZXJ0KHJ0LmZvcm1hdCxydC5lbmNvZGluZyksVz1zLmNvbnZlcnQocnQudHlwZSksX3Q9QShydC5pbnRlcm5hbEZvcm1hdCxndCxXLHJ0LmVuY29kaW5nKSx5dD1pdCh3KTtxJiZ3LnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTp3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsX3Qsdy53aWR0aCx3LmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIEIoRSx3KXtpZih3JiZ3LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXRocm93IG5ldyBFcnJvcigiRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEUpLCEody5kZXB0aFRleHR1cmUmJncuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KHcuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8dy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT13LndpZHRofHx3LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT13LmhlaWdodCkmJih3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD13LndpZHRoLHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD13LmhlaWdodCx3LmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVih3LmRlcHRoVGV4dHVyZSwwKTtsZXQgcnQ9aS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGd0PWl0KHcpO2lmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PU9pKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxydCwwKTtlbHNlIGlmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PVZyKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxydCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gc3QoRSl7bGV0IHc9aS5nZXQoRSkscT1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYoRS5kZXB0aFRleHR1cmUmJiF3Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKHEpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO0Iody5fX3dlYmdsRnJhbWVidWZmZXIsRSl9ZWxzZSBpZihxKXt3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IHJ0PTA7cnQ8NjtydCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHcuX193ZWJnbEZyYW1lYnVmZmVyW3J0XSksdy5fX3dlYmdsRGVwdGhidWZmZXJbcnRdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXJbcnRdLEUsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXIpLHcuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXIsRSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gbnQoRSx3LHEpe2xldCBydD1pLmdldChFKTt3IT09dm9pZCAwJiZtdChydC5fX3dlYmdsRnJhbWVidWZmZXIsRSxFLnRleHR1cmUsMzYwNjQsMzU1MykscSE9PXZvaWQgMCYmc3QoRSl9ZnVuY3Rpb24gQyhFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHkpLEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyE9PSEwJiYocnQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihydC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSkscnQuX192ZXJzaW9uPXcudmVyc2lvbixvLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgZ3Q9RS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFc9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITAsX3Q9dy5pc0RhdGFUZXh0dXJlM0R8fHcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseXQ9YihFKXx8YTtpZihndCl7cS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCB1dD0wO3V0PDY7dXQrKylxLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYocS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFcpaWYoci5kcmF3QnVmZmVycyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPWkuZ2V0KHV0W2N0XSk7UC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKFAuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihFLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCkscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCB1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9aXQoRSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsUCxBdCxFLndpZHRoLEUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLEUuZGVwdGhCdWZmZXImJihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFN0KHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLEUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGd0KXtlLmJpbmRUZXh0dXJlKDM0MDY3LHJ0Ll9fd2ViZ2xUZXh0dXJlKSxkdCgzNDA2Nyx3LHl0KTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKW10KHEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XSxFLHcsMzYwNjQsMzQwNjkrdXQpO1Modyx5dCkmJkwoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPXV0W2N0XSxwdD1pLmdldChQKTtlLmJpbmRUZXh0dXJlKDM1NTMscHQuX193ZWJnbFRleHR1cmUpLGR0KDM1NTMsUCx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSxQLDM2MDY0K2N0LDM1NTMpLFMoUCx5dCkmJkwoMzU1Myl9ZS51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgdXQ9MzU1MztfdCYmKGE/dXQ9dy5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLGUuYmluZFRleHR1cmUodXQscnQuX193ZWJnbFRleHR1cmUpLGR0KHV0LHcseXQpLG10KHEuX193ZWJnbEZyYW1lYnVmZmVyLEUsdywzNjA2NCx1dCksUyh3LHl0KSYmTCh1dCksZS51bmJpbmRUZXh0dXJlKCl9RS5kZXB0aEJ1ZmZlciYmc3QoRSl9ZnVuY3Rpb24gaihFKXtsZXQgdz1iKEUpfHxhLHE9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/RS50ZXh0dXJlOltFLnRleHR1cmVdO2ZvcihsZXQgcnQ9MCxndD1xLmxlbmd0aDtydDxndDtydCsrKXtsZXQgVz1xW3J0XTtpZihTKFcsdykpe2xldCBfdD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PzM0MDY3OjM1NTMseXQ9aS5nZXQoVykuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShfdCx5dCksTChfdCksZS51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBKKEUpe2lmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe2xldCB3PUUud2lkdGgscT1FLmhlaWdodCxydD0xNjM4NCxndD1bMzYwNjRdLFc9RS5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O0UuZGVwdGhCdWZmZXImJmd0LnB1c2goVyksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weXx8KEUuZGVwdGhCdWZmZXImJihydHw9MjU2KSxFLnN0ZW5jaWxCdWZmZXImJihydHw9MTAyNCkpO2xldCBfdD1pLmdldChFKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtXXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1ddKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHcscSwwLDAsdyxxLHJ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGd0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gaXQoRSl7cmV0dXJuIGEmJihFLnVzZVJlbmRlcmJ1ZmZlcnx8RS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsRS5zYW1wbGVzKTowfWZ1bmN0aW9uIGV0KEUpe2xldCB3PW8ucmVuZGVyLmZyYW1lO2cuZ2V0KEUpIT09dyYmKGcuc2V0KEUsdyksRS51cGRhdGUoKSl9ZnVuY3Rpb24gdnQoRSx3KXtsZXQgcT1FLmVuY29kaW5nLHJ0PUUuZm9ybWF0LGd0PUUudHlwZTtyZXR1cm4gRS5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fEUuaXNWaWRlb1RleHR1cmU9PT0hMHx8RS5mb3JtYXQ9PT1IdXx8cSE9PXJpJiYocT09PSR0P2E9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiZydD09PVJlPyhFLmZvcm1hdD1IdSxFLm1pbkZpbHRlcj1iZSxFLmdlbmVyYXRlTWlwbWFwcz0hMSk6dz1Obi5zUkdCVG9MaW5lYXIodyk6KHJ0IT09UmV8fGd0IT09ZWkpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixxKSksd31sZXQgYnQ9ITEsSXQ9ITE7ZnVuY3Rpb24gWnQoRSx3KXtFJiZFLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihidD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYnQ9ITApLEU9RS50ZXh0dXJlKSxWKEUsdyl9ZnVuY3Rpb24gcXQoRSx3KXtFJiZFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoSXQ9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxJdD0hMCksRT1FLnRleHR1cmUpLEcoRSx3KX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9Tix0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vix0aGlzLnNldFRleHR1cmUyREFycmF5PVEsdGhpcy5zZXRUZXh0dXJlM0Q9YXQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1HLHRoaXMucmViaW5kVGV4dHVyZXM9bnQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1DLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWosdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1KLHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1zdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPW10LHRoaXMuc2FmZVNldFRleHR1cmUyRD1adCx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1xdH1mdW5jdGlvbiBMRShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtmdW5jdGlvbiByKHMsbz1udWxsKXtsZXQgYTtpZihzPT09ZWkpcmV0dXJuIDUxMjE7aWYocz09PXp3KXJldHVybiAzMjgxOTtpZihzPT09VXcpcmV0dXJuIDMyODIwO2lmKHM9PT1JdylyZXR1cm4gNTEyMDtpZihzPT09TncpcmV0dXJuIDUxMjI7aWYocz09PW5vKXJldHVybiA1MTIzO2lmKHM9PT1GdylyZXR1cm4gNTEyNDtpZihzPT09UWEpcmV0dXJuIDUxMjU7aWYocz09PVVpKXJldHVybiA1MTI2O2lmKHM9PT1VcilyZXR1cm4gaT81MTMxOihhPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksYSE9PW51bGw/YS5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihzPT09QncpcmV0dXJuIDY0MDY7aWYocz09PVJlKXJldHVybiA2NDA4O2lmKHM9PT1PdylyZXR1cm4gNjQwOTtpZihzPT09a3cpcmV0dXJuIDY0MTA7aWYocz09PU9pKXJldHVybiA2NDAyO2lmKHM9PT1WcilyZXR1cm4gMzQwNDE7aWYocz09PUh3KXJldHVybiA2NDAzO2lmKHM9PT1IdSlyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxhIT09bnVsbD9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYocz09PVZ3KXJldHVybiAzNjI0NDtpZihzPT09R3cpcmV0dXJuIDMzMzE5O2lmKHM9PT1XdylyZXR1cm4gMzMzMjA7aWYocz09PXF3KXJldHVybiAzNjI0OTtpZihzPT09S2N8fHM9PT1RY3x8cz09PWpjfHxzPT09dHUpaWYobz09PSR0KWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxhIT09bnVsbCl7aWYocz09PUtjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7ZWxzZSBpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihzPT09UWMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYocz09PWpjKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKHM9PT10dSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1GbXx8cz09PXptfHxzPT09VW18fHM9PT1CbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxhIT09bnVsbCl7aWYocz09PUZtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PXptKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYocz09PVVtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKHM9PT1CbSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1YdylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxhIT09bnVsbD9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihzPT09T218fHM9PT1rbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksYSE9PW51bGwpe2lmKHM9PT1PbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYocz09PWttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09SG18fHM9PT1WbXx8cz09PUdtfHxzPT09V218fHM9PT1xbXx8cz09PVhtfHxzPT09WW18fHM9PT1abXx8cz09PUptfHxzPT09JG18fHM9PT1LbXx8cz09PVFtfHxzPT09am18fHM9PT10ZylpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLGEhPT1udWxsKXtpZihzPT09SG0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYocz09PVZtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKHM9PT1HbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtpZihzPT09V20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYocz09PXFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKHM9PT1YbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtpZihzPT09WW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYocz09PVptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKHM9PT1KbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO2lmKHM9PT0kbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKHM9PT1LbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKHM9PT1RbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7aWYocz09PWptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihzPT09dGcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PWVnKWlmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxhIT09bnVsbCl7aWYocz09PWVnKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09QnIpcmV0dXJuIGk/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxhIT09bnVsbD9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0OnJ9fXZhciBobD1jbGFzcyBleHRlbmRzIFNle2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtobC5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgQmk9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtCaS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgUEU9e3R5cGU6Im1vdmUifSxRcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgQmksdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBCaSx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgVCksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IEJpLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwscz1udWxsLG89bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJmUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihhIT09bnVsbCYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksciE9PW51bGwmJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KFBFKSkpLGMmJnQuaGFuZCl7bz0hMDtmb3IobGV0IHggb2YgdC5oYW5kLnZhbHVlcygpKXtsZXQgdj1lLmdldEpvaW50UG9zZSh4LGkpO2lmKGMuam9pbnRzW3guam9pbnROYW1lXT09PXZvaWQgMCl7bGV0IHA9bmV3IEJpO3AubWF0cml4QXV0b1VwZGF0ZT0hMSxwLnZpc2libGU9ITEsYy5qb2ludHNbeC5qb2ludE5hbWVdPXAsYy5hZGQocCl9bGV0IG09Yy5qb2ludHNbeC5qb2ludE5hbWVdO3YhPT1udWxsJiYobS5tYXRyaXguZnJvbUFycmF5KHYudHJhbnNmb3JtLm1hdHJpeCksbS5tYXRyaXguZGVjb21wb3NlKG0ucG9zaXRpb24sbS5yb3RhdGlvbixtLnNjYWxlKSxtLmpvaW50UmFkaXVzPXYucmFkaXVzKSxtLnZpc2libGU9diE9PW51bGx9bGV0IHU9Yy5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXSxoPWMuam9pbnRzWyJ0aHVtYi10aXAiXSxmPXUucG9zaXRpb24uZGlzdGFuY2VUbyhoLnBvc2l0aW9uKSxkPS4wMixnPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPmQrZz8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJmY8PWQtZyYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbCE9PW51bGwmJnQuZ3JpcFNwYWNlJiYocz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSkscyE9PW51bGwmJihsLm1hdHJpeC5mcm9tQXJyYXkocy50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLHMubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KHMubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLHMuYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHMuYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gYSE9PW51bGwmJihhLnZpc2libGU9ciE9PW51bGwpLGwhPT1udWxsJiYobC52aXNpYmxlPXMhPT1udWxsKSxjIT09bnVsbCYmKGMudmlzaWJsZT1vIT09bnVsbCksdGhpc319LHVvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSl7aWYodT11IT09dm9pZCAwP3U6T2ksdSE9PU9pJiZ1IT09VnIpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO2k9PT12b2lkIDAmJnU9PT1PaSYmKGk9bm8pLGk9PT12b2lkIDAmJnU9PT1WciYmKGk9QnIpLHN1cGVyKG51bGwscixzLG8sYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj1hIT09dm9pZCAwP2E6ZmUsdGhpcy5taW5GaWx0ZXI9bCE9PXZvaWQgMD9sOmZlLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTt1by5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIFp1PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLHM9MSxvPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLGQ9ITEsZz1udWxsLHg9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLHY9bnVsbCxtPW51bGwscD1bXSxiPW5ldyBNYXAsXz1uZXcgU2U7Xy5sYXllcnMuZW5hYmxlKDEpLF8udmlld3BvcnQ9bmV3IFd0O2xldCBTPW5ldyBTZTtTLmxheWVycy5lbmFibGUoMiksUy52aWV3cG9ydD1uZXcgV3Q7bGV0IEw9W18sU10sQT1uZXcgaGw7QS5sYXllcnMuZW5hYmxlKDEpLEEubGF5ZXJzLmVuYWJsZSgyKTtsZXQgSD1udWxsLHR0PW51bGw7dGhpcy5jYW1lcmFBdXRvVXBkYXRlPSEwLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldEhhbmRTcGFjZSgpfTtmdW5jdGlvbiBYKEcpe2xldCAkPWIuZ2V0KEcuaW5wdXRTb3VyY2UpOyQmJiQuZGlzcGF0Y2hFdmVudCh7dHlwZTpHLnR5cGUsZGF0YTpHLmlucHV0U291cmNlfSl9ZnVuY3Rpb24geSgpe2IuZm9yRWFjaChmdW5jdGlvbihHLCQpe0cuZGlzY29ubmVjdCgkKX0pLGIuY2xlYXIoKSxIPW51bGwsdHQ9bnVsbCx0LnNldFJlbmRlclRhcmdldCh2KSxmPW51bGwsaD1udWxsLHU9bnVsbCxyPW51bGwsbT1udWxsLGF0LnN0b3AoKSxpLmlzUHJlc2VudGluZz0hMSxpLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKEcpe3M9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbihHKXthPUcsaS5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oRyl7cmV0dXJuIGhmKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihyPUcsciE9PW51bGwpe2lmKHY9dC5nZXRSZW5kZXJUYXJnZXQoKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJlbmQiLHkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixSKSx4LnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgZS5tYWtlWFJDb21wYXRpYmxlKCkpLHIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgJD17YW50aWFsaWFzOnIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP3guYW50aWFsaWFzOiEwLGFscGhhOnguYWxwaGEsZGVwdGg6eC5kZXB0aCxzdGVuY2lsOnguc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOnN9O2Y9bmV3IFhSV2ViR0xMYXllcihyLGUsJCksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOmZ9KSxtPW5ldyBOZShmLmZyYW1lYnVmZmVyV2lkdGgsZi5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pfWVsc2V7ZD14LmFudGlhbGlhcztsZXQgJD1udWxsLGx0PW51bGwsZHQ9bnVsbDt4LmRlcHRoJiYoZHQ9eC5zdGVuY2lsPzM1MDU2OjMzMTkwLCQ9eC5zdGVuY2lsP1ZyOk9pLGx0PXguc3RlbmNpbD9Ccjpubyk7bGV0IHh0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09JHQ/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6ZHQsc2NhbGVGYWN0b3I6c307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKHh0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSksZD9tPW5ldyBzbyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpSZSx0eXBlOmVpLGRlcHRoVGV4dHVyZTpuZXcgdW8oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCQpLHN0ZW5jaWxCdWZmZXI6eC5zdGVuY2lsLGlnbm9yZURlcHRoOmguaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm09bmV3IE5lKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9bS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLG89eWllbGQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksYXQuc2V0Q29udGV4dChyKSxhdC5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBSKEcpe2xldCAkPXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgbHQ9MDtsdDxwLmxlbmd0aDtsdCsrKWIuc2V0KCRbbHRdLHBbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Ry5yZW1vdmVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5yZW1vdmVkW2x0XSx4dD1iLmdldChkdCk7eHQmJih4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6ZHR9KSxiLmRlbGV0ZShkdCkpfWZvcihsZXQgbHQ9MDtsdDxHLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5hZGRlZFtsdF0seHQ9Yi5nZXQoZHQpO3h0JiZ4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6ZHR9KX19bGV0IEQ9bmV3IFQsRj1uZXcgVDtmdW5jdGlvbiB6KEcsJCxsdCl7RC5zZXRGcm9tTWF0cml4UG9zaXRpb24oJC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24obHQubWF0cml4V29ybGQpO2xldCBkdD1ELmRpc3RhbmNlVG8oRikseHQ9JC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLGs9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxGdD14dFsxNF0vKHh0WzEwXS0xKSxtdD14dFsxNF0vKHh0WzEwXSsxKSxTdD0oeHRbOV0rMSkveHRbNV0sQj0oeHRbOV0tMSkveHRbNV0sc3Q9KHh0WzhdLTEpL3h0WzBdLG50PShrWzhdKzEpL2tbMF0sQz1GdCpzdCxqPUZ0Km50LEo9ZHQvKC1zdCtudCksaXQ9Siotc3Q7JC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy50cmFuc2xhdGVYKGl0KSxHLnRyYW5zbGF0ZVooSiksRy5tYXRyaXhXb3JsZC5jb21wb3NlKEcucG9zaXRpb24sRy5xdWF0ZXJuaW9uLEcuc2NhbGUpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGV0PUZ0K0osdnQ9bXQrSixidD1DLWl0LEl0PWorKGR0LWl0KSxadD1TdCptdC92dCpldCxxdD1CKm10L3Z0KmV0O0cucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoYnQsSXQsWnQscXQsZXQsdnQpfWZ1bmN0aW9uIE4oRywkKXskPT09bnVsbD9HLm1hdHJpeFdvcmxkLmNvcHkoRy5tYXRyaXgpOkcubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcygkLm1hdHJpeFdvcmxkLEcubWF0cml4KSxHLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KEcubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKEcpe2lmKHI9PT1udWxsKXJldHVybjtBLm5lYXI9Uy5uZWFyPV8ubmVhcj1HLm5lYXIsQS5mYXI9Uy5mYXI9Xy5mYXI9Ry5mYXIsKEghPT1BLm5lYXJ8fHR0IT09QS5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOkEubmVhcixkZXB0aEZhcjpBLmZhcn0pLEg9QS5uZWFyLHR0PUEuZmFyKTtsZXQgJD1HLnBhcmVudCxsdD1BLmNhbWVyYXM7TihBLCQpO2ZvcihsZXQgeHQ9MDt4dDxsdC5sZW5ndGg7eHQrKylOKGx0W3h0XSwkKTtBLm1hdHJpeFdvcmxkLmRlY29tcG9zZShBLnBvc2l0aW9uLEEucXVhdGVybmlvbixBLnNjYWxlKSxHLnBvc2l0aW9uLmNvcHkoQS5wb3NpdGlvbiksRy5xdWF0ZXJuaW9uLmNvcHkoQS5xdWF0ZXJuaW9uKSxHLnNjYWxlLmNvcHkoQS5zY2FsZSksRy5tYXRyaXguY29weShBLm1hdHJpeCksRy5tYXRyaXhXb3JsZC5jb3B5KEEubWF0cml4V29ybGQpO2xldCBkdD1HLmNoaWxkcmVuO2ZvcihsZXQgeHQ9MCxrPWR0Lmxlbmd0aDt4dDxrO3h0KyspZHRbeHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtsdC5sZW5ndGg9PT0yP3ooQSxfLFMpOkEucHJvamVjdGlvbk1hdHJpeC5jb3B5KF8ucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKEcpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1HKSxmIT09bnVsbCYmZi5maXhlZEZvdmVhdGlvbiE9PXZvaWQgMCYmKGYuZml4ZWRGb3ZlYXRpb249Ryl9O2xldCBWPW51bGw7ZnVuY3Rpb24gUShHLCQpe2lmKGM9JC5nZXRWaWV3ZXJQb3NlKG8pLGc9JCxjIT09bnVsbCl7bGV0IGR0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKG0sZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQobSkpO2xldCB4dD0hMTtkdC5sZW5ndGghPT1BLmNhbWVyYXMubGVuZ3RoJiYoQS5jYW1lcmFzLmxlbmd0aD0wLHh0PSEwKTtmb3IobGV0IGs9MDtrPGR0Lmxlbmd0aDtrKyspe2xldCBGdD1kdFtrXSxtdD1udWxsO2lmKGYhPT1udWxsKW10PWYuZ2V0Vmlld3BvcnQoRnQpO2Vsc2V7bGV0IEI9dS5nZXRWaWV3U3ViSW1hZ2UoaCxGdCk7bXQ9Qi52aWV3cG9ydCxrPT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMobSxCLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpCLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KG0pKX1sZXQgU3Q9TFtrXTtTdC5tYXRyaXguZnJvbUFycmF5KEZ0LnRyYW5zZm9ybS5tYXRyaXgpLFN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEZ0LnByb2plY3Rpb25NYXRyaXgpLFN0LnZpZXdwb3J0LnNldChtdC54LG10LnksbXQud2lkdGgsbXQuaGVpZ2h0KSxrPT09MCYmQS5tYXRyaXguY29weShTdC5tYXRyaXgpLHh0PT09ITAmJkEuY2FtZXJhcy5wdXNoKFN0KX19bGV0IGx0PXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgZHQ9MDtkdDxwLmxlbmd0aDtkdCsrKXtsZXQgeHQ9cFtkdF0saz1sdFtkdF07eHQudXBkYXRlKGssJCxvKX1WJiZWKEcsJCksZz1udWxsfWxldCBhdD1uZXcgZzA7YXQuc2V0QW5pbWF0aW9uTG9vcChRKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oRyl7Vj1HfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gREUobil7ZnVuY3Rpb24gdChtLHApe20uZm9nQ29sb3IudmFsdWUuY29weShwLmNvbG9yKSxwLmlzRm9nPyhtLmZvZ05lYXIudmFsdWU9cC5uZWFyLG0uZm9nRmFyLnZhbHVlPXAuZmFyKTpwLmlzRm9nRXhwMiYmKG0uZm9nRGVuc2l0eS52YWx1ZT1wLmRlbnNpdHkpfWZ1bmN0aW9uIGUobSxwLGIsXyxTKXtwLmlzTWVzaEJhc2ljTWF0ZXJpYWw/aShtLHApOnAuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhpKG0scCksbChtLHApKTpwLmlzTWVzaFRvb25NYXRlcmlhbD8oaShtLHApLHUobSxwKSk6cC5pc01lc2hQaG9uZ01hdGVyaWFsPyhpKG0scCksYyhtLHApKTpwLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkobSxwKSxwLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZihtLHAsUyk6aChtLHApKTpwLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKG0scCksZChtLHApKTpwLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGkobSxwKSxnKG0scCkpOnAuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oaShtLHApLHgobSxwKSk6cC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaShtLHApLHYobSxwKSk6cC5pc0xpbmVCYXNpY01hdGVyaWFsPyhyKG0scCkscC5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcyhtLHApKTpwLmlzUG9pbnRzTWF0ZXJpYWw/byhtLHAsYixfKTpwLmlzU3ByaXRlTWF0ZXJpYWw/YShtLHApOnAuaXNTaGFkb3dNYXRlcmlhbD8obS5jb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHkpOnAuaXNTaGFkZXJNYXRlcmlhbCYmKHAudW5pZm9ybXNOZWVkVXBkYXRlPSExKX1mdW5jdGlvbiBpKG0scCl7bS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxwLmNvbG9yJiZtLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxwLmVtaXNzaXZlJiZtLmVtaXNzaXZlLnZhbHVlLmNvcHkocC5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIocC5lbWlzc2l2ZUludGVuc2l0eSkscC5tYXAmJihtLm1hcC52YWx1ZT1wLm1hcCkscC5hbHBoYU1hcCYmKG0uYWxwaGFNYXAudmFsdWU9cC5hbHBoYU1hcCkscC5zcGVjdWxhck1hcCYmKG0uc3BlY3VsYXJNYXAudmFsdWU9cC5zcGVjdWxhck1hcCkscC5hbHBoYVRlc3Q+MCYmKG0uYWxwaGFUZXN0LnZhbHVlPXAuYWxwaGFUZXN0KTtsZXQgYj1uLmdldChwKS5lbnZNYXA7YiYmKG0uZW52TWFwLnZhbHVlPWIsbS5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmYi5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLG0ucmVmbGVjdGl2aXR5LnZhbHVlPXAucmVmbGVjdGl2aXR5LG0uaW9yLnZhbHVlPXAuaW9yLG0ucmVmcmFjdGlvblJhdGlvLnZhbHVlPXAucmVmcmFjdGlvblJhdGlvKSxwLmxpZ2h0TWFwJiYobS5saWdodE1hcC52YWx1ZT1wLmxpZ2h0TWFwLG0ubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9cC5saWdodE1hcEludGVuc2l0eSkscC5hb01hcCYmKG0uYW9NYXAudmFsdWU9cC5hb01hcCxtLmFvTWFwSW50ZW5zaXR5LnZhbHVlPXAuYW9NYXBJbnRlbnNpdHkpO2xldCBfO3AubWFwP189cC5tYXA6cC5zcGVjdWxhck1hcD9fPXAuc3BlY3VsYXJNYXA6cC5kaXNwbGFjZW1lbnRNYXA/Xz1wLmRpc3BsYWNlbWVudE1hcDpwLm5vcm1hbE1hcD9fPXAubm9ybWFsTWFwOnAuYnVtcE1hcD9fPXAuYnVtcE1hcDpwLnJvdWdobmVzc01hcD9fPXAucm91Z2huZXNzTWFwOnAubWV0YWxuZXNzTWFwP189cC5tZXRhbG5lc3NNYXA6cC5hbHBoYU1hcD9fPXAuYWxwaGFNYXA6cC5lbWlzc2l2ZU1hcD9fPXAuZW1pc3NpdmVNYXA6cC5jbGVhcmNvYXRNYXA/Xz1wLmNsZWFyY29hdE1hcDpwLmNsZWFyY29hdE5vcm1hbE1hcD9fPXAuY2xlYXJjb2F0Tm9ybWFsTWFwOnAuY2xlYXJjb2F0Um91Z2huZXNzTWFwP189cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA6cC5zcGVjdWxhckludGVuc2l0eU1hcD9fPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXA6cC5zcGVjdWxhckNvbG9yTWFwP189cC5zcGVjdWxhckNvbG9yTWFwOnAudHJhbnNtaXNzaW9uTWFwP189cC50cmFuc21pc3Npb25NYXA6cC50aGlja25lc3NNYXA/Xz1wLnRoaWNrbmVzc01hcDpwLnNoZWVuQ29sb3JNYXA/Xz1wLnNoZWVuQ29sb3JNYXA6cC5zaGVlblJvdWdobmVzc01hcCYmKF89cC5zaGVlblJvdWdobmVzc01hcCksXyE9PXZvaWQgMCYmKF8uaXNXZWJHTFJlbmRlclRhcmdldCYmKF89Xy50ZXh0dXJlKSxfLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmXy51cGRhdGVNYXRyaXgoKSxtLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoXy5tYXRyaXgpKTtsZXQgUztwLmFvTWFwP1M9cC5hb01hcDpwLmxpZ2h0TWFwJiYoUz1wLmxpZ2h0TWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoUy5tYXRyaXgpKX1mdW5jdGlvbiByKG0scCl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eX1mdW5jdGlvbiBzKG0scCl7bS5kYXNoU2l6ZS52YWx1ZT1wLmRhc2hTaXplLG0udG90YWxTaXplLnZhbHVlPXAuZGFzaFNpemUrcC5nYXBTaXplLG0uc2NhbGUudmFsdWU9cC5zY2FsZX1mdW5jdGlvbiBvKG0scCxiLF8pe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5zaXplLnZhbHVlPXAuc2l6ZSpiLG0uc2NhbGUudmFsdWU9XyouNSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBTO3AubWFwP1M9cC5tYXA6cC5hbHBoYU1hcCYmKFM9cC5hbHBoYU1hcCksUyE9PXZvaWQgMCYmKFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIGEobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LG0ucm90YXRpb24udmFsdWU9cC5yb3RhdGlvbixwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiO3AubWFwP2I9cC5tYXA6cC5hbHBoYU1hcCYmKGI9cC5hbHBoYU1hcCksYiE9PXZvaWQgMCYmKGIubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZiLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShiLm1hdHJpeCkpfWZ1bmN0aW9uIGwobSxwKXtwLmVtaXNzaXZlTWFwJiYobS5lbWlzc2l2ZU1hcC52YWx1ZT1wLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBjKG0scCl7bS5zcGVjdWxhci52YWx1ZS5jb3B5KHAuc3BlY3VsYXIpLG0uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHAuc2hpbmluZXNzLDFlLTQpLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gdShtLHApe3AuZ3JhZGllbnRNYXAmJihtLmdyYWRpZW50TWFwLnZhbHVlPXAuZ3JhZGllbnRNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gaChtLHApe20ucm91Z2huZXNzLnZhbHVlPXAucm91Z2huZXNzLG0ubWV0YWxuZXNzLnZhbHVlPXAubWV0YWxuZXNzLHAucm91Z2huZXNzTWFwJiYobS5yb3VnaG5lc3NNYXAudmFsdWU9cC5yb3VnaG5lc3NNYXApLHAubWV0YWxuZXNzTWFwJiYobS5tZXRhbG5lc3NNYXAudmFsdWU9cC5tZXRhbG5lc3NNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyksbi5nZXQocCkuZW52TWFwJiYobS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9cC5lbnZNYXBJbnRlbnNpdHkpfWZ1bmN0aW9uIGYobSxwLGIpe2gobSxwKSxtLmlvci52YWx1ZT1wLmlvcixwLnNoZWVuPjAmJihtLnNoZWVuQ29sb3IudmFsdWUuY29weShwLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHAuc2hlZW4pLG0uc2hlZW5Sb3VnaG5lc3MudmFsdWU9cC5zaGVlblJvdWdobmVzcyxwLnNoZWVuQ29sb3JNYXAmJihtLnNoZWVuQ29sb3JNYXAudmFsdWU9cC5zaGVlbkNvbG9yTWFwKSxwLnNoZWVuUm91Z2huZXNzTWFwJiYobS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1wLnNoZWVuUm91Z2huZXNzTWFwKSkscC5jbGVhcmNvYXQ+MCYmKG0uY2xlYXJjb2F0LnZhbHVlPXAuY2xlYXJjb2F0LG0uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXAuY2xlYXJjb2F0Um91Z2huZXNzLHAuY2xlYXJjb2F0TWFwJiYobS5jbGVhcmNvYXRNYXAudmFsdWU9cC5jbGVhcmNvYXRNYXApLHAuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYobS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHAuY2xlYXJjb2F0Tm9ybWFsTWFwJiYobS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLG0uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXAuY2xlYXJjb2F0Tm9ybWFsTWFwLHAuc2lkZT09PWhlJiZtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkscC50cmFuc21pc3Npb24+MCYmKG0udHJhbnNtaXNzaW9uLnZhbHVlPXAudHJhbnNtaXNzaW9uLG0udHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1iLnRleHR1cmUsbS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoYi53aWR0aCxiLmhlaWdodCkscC50cmFuc21pc3Npb25NYXAmJihtLnRyYW5zbWlzc2lvbk1hcC52YWx1ZT1wLnRyYW5zbWlzc2lvbk1hcCksbS50aGlja25lc3MudmFsdWU9cC50aGlja25lc3MscC50aGlja25lc3NNYXAmJihtLnRoaWNrbmVzc01hcC52YWx1ZT1wLnRoaWNrbmVzc01hcCksbS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXAuYXR0ZW51YXRpb25EaXN0YW5jZSxtLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weShwLmF0dGVudWF0aW9uQ29sb3IpKSxtLnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHksbS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkocC5zcGVjdWxhckNvbG9yKSxwLnNwZWN1bGFySW50ZW5zaXR5TWFwJiYobS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT1wLnNwZWN1bGFySW50ZW5zaXR5TWFwKSxwLnNwZWN1bGFyQ29sb3JNYXAmJihtLnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9cC5zcGVjdWxhckNvbG9yTWFwKX1mdW5jdGlvbiBkKG0scCl7cC5tYXRjYXAmJihtLm1hdGNhcC52YWx1ZT1wLm1hdGNhcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24geChtLHApe3AuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpLG0ucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShwLnJlZmVyZW5jZVBvc2l0aW9uKSxtLm5lYXJEaXN0YW5jZS52YWx1ZT1wLm5lYXJEaXN0YW5jZSxtLmZhckRpc3RhbmNlLnZhbHVlPXAuZmFyRGlzdGFuY2V9ZnVuY3Rpb24gdihtLHApe3AuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3Jtczp0LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmV9fWZ1bmN0aW9uIElFKCl7bGV0IG49cm8oImNhbnZhcyIpO3JldHVybiBuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixufWZ1bmN0aW9uIFZ0KG49e30pe2xldCB0PW4uY2FudmFzIT09dm9pZCAwP24uY2FudmFzOklFKCksZT1uLmNvbnRleHQhPT12b2lkIDA/bi5jb250ZXh0Om51bGwsaT1uLmFscGhhIT09dm9pZCAwP24uYWxwaGE6ITEscj1uLmRlcHRoIT09dm9pZCAwP24uZGVwdGg6ITAscz1uLnN0ZW5jaWwhPT12b2lkIDA/bi5zdGVuY2lsOiEwLG89bi5hbnRpYWxpYXMhPT12b2lkIDA/bi5hbnRpYWxpYXM6ITEsYT1uLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9uLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPW4ucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP24ucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9bi5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP24uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLGQ9W10sZz1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPXJpLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz10aSx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgeD10aGlzLHY9ITEsbT0wLHA9MCxiPW51bGwsXz0tMSxTPW51bGwsTD1uZXcgV3QsQT1uZXcgV3QsSD1udWxsLHR0PXQud2lkdGgsWD10LmhlaWdodCx5PTEsUj1udWxsLEQ9bnVsbCxGPW5ldyBXdCgwLDAsdHQsWCksej1uZXcgV3QoMCwwLHR0LFgpLE49ITEsVj1uZXcgcXIsUT0hMSxhdD0hMSxHPW51bGwsJD1uZXcgd3QsbHQ9bmV3IFQsZHQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiB4dCgpe3JldHVybiBiPT09bnVsbD95OjF9bGV0IGs9ZTtmdW5jdGlvbiBGdChNLEkpe2ZvcihsZXQgTz0wO088TS5sZW5ndGg7TysrKXtsZXQgVT1NW09dLFo9dC5nZXRDb250ZXh0KFUsSSk7aWYoWiE9PW51bGwpcmV0dXJuIFp9cmV0dXJuIG51bGx9dHJ5e2xldCBNPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6cyxhbnRpYWxpYXM6byxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7JGh9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixBdCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsUCwhMSksaz09PW51bGwpe2xldCBJPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZih4LmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmSS5zaGlmdCgpLGs9RnQoSSxNKSxrPT09bnVsbCl0aHJvdyBGdChJKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfWsuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYoay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKE0pe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrTS5tZXNzYWdlKSxNfWxldCBtdCxTdCxCLHN0LG50LEMsaixKLGl0LGV0LHZ0LGJ0LEl0LFp0LHF0LEUsdyxxLHJ0LGd0LFcsX3QseXQ7ZnVuY3Rpb24gdXQoKXttdD1uZXcgZVMoayksU3Q9bmV3IEoxKGssbXQsbiksbXQuaW5pdChTdCksX3Q9bmV3IExFKGssbXQsU3QpLEI9bmV3IENFKGssbXQsU3QpLHN0PW5ldyByUyhrKSxudD1uZXcgeEUsQz1uZXcgUkUoayxtdCxCLG50LFN0LF90LHN0KSxqPW5ldyBLMSh4KSxKPW5ldyB0Uyh4KSxpdD1uZXcgdk0oayxTdCkseXQ9bmV3IFkxKGssbXQsaXQsU3QpLGV0PW5ldyBuUyhrLGl0LHN0LHl0KSx2dD1uZXcgbFMoayxldCxpdCxzdCkscnQ9bmV3IGFTKGssU3QsQyksRT1uZXcgJDEobnQpLGJ0PW5ldyBnRSh4LGosSixtdCxTdCx5dCxFKSxJdD1uZXcgREUobnQpLFp0PW5ldyB2RSxxdD1uZXcgRUUobXQsU3QpLHE9bmV3IFgxKHgsaixCLHZ0LGksYSksdz1uZXcgVDAoeCx2dCxTdCksZ3Q9bmV3IFoxKGssbXQsc3QsU3QpLFc9bmV3IGlTKGssbXQsc3QsU3QpLHN0LnByb2dyYW1zPWJ0LnByb2dyYW1zLHguY2FwYWJpbGl0aWVzPVN0LHguZXh0ZW5zaW9ucz1tdCx4LnByb3BlcnRpZXM9bnQseC5yZW5kZXJMaXN0cz1adCx4LnNoYWRvd01hcD13LHguc3RhdGU9Qix4LmluZm89c3R9dXQoKTtsZXQgY3Q9bmV3IFp1KHgsayk7dGhpcy54cj1jdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgTT1tdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO00mJk0ucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihNKXtNIT09dm9pZCAwJiYoeT1NLHRoaXMuc2V0U2l6ZSh0dCxYLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihNKXtyZXR1cm4gTS5zZXQodHQsWCl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihNLEksTyl7aWYoY3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn10dD1NLFg9SSx0LndpZHRoPU1hdGguZmxvb3IoTSp5KSx0LmhlaWdodD1NYXRoLmZsb29yKEkqeSksTyE9PSExJiYodC5zdHlsZS53aWR0aD1NKyJweCIsdC5zdHlsZS5oZWlnaHQ9SSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCp5LFgqeSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihNLEksTyl7dHQ9TSxYPUkseT1PLHQud2lkdGg9TWF0aC5mbG9vcihNKk8pLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSpPKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihNKXtyZXR1cm4gTS5jb3B5KEwpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoRil9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSxJLE8sVSl7TS5pc1ZlY3RvcjQ/Ri5zZXQoTS54LE0ueSxNLnosTS53KTpGLnNldChNLEksTyxVKSxCLnZpZXdwb3J0KEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoeil9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND96LnNldChNLngsTS55LE0ueixNLncpOnouc2V0KE0sSSxPLFUpLEIuc2Npc3NvcihBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTn0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihNKXtCLnNldFNjaXNzb3JUZXN0KE49TSl9LHRoaXMuc2V0T3BhcXVlU29ydD1mdW5jdGlvbihNKXtSPU19LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKE0pe0Q9TX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkocS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtxLnNldENsZWFyQ29sb3IuYXBwbHkocSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gcS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3Euc2V0Q2xlYXJBbHBoYS5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oTSxJLE8pe2xldCBVPTA7KE09PT12b2lkIDB8fE0pJiYoVXw9MTYzODQpLChJPT09dm9pZCAwfHxJKSYmKFV8PTI1NiksKE89PT12b2lkIDB8fE8pJiYoVXw9MTAyNCksay5jbGVhcihVKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxadC5kaXNwb3NlKCkscXQuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxqLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSx2dC5kaXNwb3NlKCkseXQuZGlzcG9zZSgpLGJ0LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0IixEdCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIsanQpLEcmJihHLmRpc3Bvc2UoKSxHPW51bGwpLHplLnN0b3AoKX07ZnVuY3Rpb24gQXQoTSl7TS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksdj0hMH1mdW5jdGlvbiBQKCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksdj0hMTtsZXQgTT1zdC5hdXRvUmVzZXQsST13LmVuYWJsZWQsTz13LmF1dG9VcGRhdGUsVT13Lm5lZWRzVXBkYXRlLFo9dy50eXBlO3V0KCksc3QuYXV0b1Jlc2V0PU0sdy5lbmFibGVkPUksdy5hdXRvVXBkYXRlPU8sdy5uZWVkc1VwZGF0ZT1VLHcudHlwZT1afWZ1bmN0aW9uIHB0KE0pe2xldCBJPU0udGFyZ2V0O0kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLGh0KEkpfWZ1bmN0aW9uIGh0KE0pe0V0KE0pLG50LnJlbW92ZShNKX1mdW5jdGlvbiBFdChNKXtsZXQgST1udC5nZXQoTSkucHJvZ3JhbXM7SSE9PXZvaWQgMCYmKEkuZm9yRWFjaChmdW5jdGlvbihPKXtidC5yZWxlYXNlUHJvZ3JhbShPKX0pLE0uaXNTaGFkZXJNYXRlcmlhbCYmYnQucmVsZWFzZVNoYWRlckNhY2hlKE0pKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihNLEksTyxVLFosVHQpe0k9PT1udWxsJiYoST1kdCk7bGV0IEN0PVouaXNNZXNoJiZaLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxMdD1CMChNLEksTyxVLFopO0Iuc2V0TWF0ZXJpYWwoVSxDdCk7bGV0IFJ0PU8uaW5kZXgsR3Q9Ty5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKFJ0PT09bnVsbCl7aWYoR3Q9PT12b2lkIDB8fEd0LmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihSdC5jb3VudD09PTApcmV0dXJuO2xldCB6dD0xO1Uud2lyZWZyYW1lPT09ITAmJihSdD1ldC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoTyksenQ9MikseXQuc2V0dXAoWixVLEx0LE8sUnQpO2xldCBVdCxpZT1ndDtSdCE9PW51bGwmJihVdD1pdC5nZXQoUnQpLGllPVcsaWUuc2V0SW5kZXgoVXQpKTtsZXQgZmk9UnQhPT1udWxsP1J0LmNvdW50Okd0LmNvdW50LFppPU8uZHJhd1JhbmdlLnN0YXJ0Knp0LE90PU8uZHJhd1JhbmdlLmNvdW50Knp0LG5uPVR0IT09bnVsbD9UdC5zdGFydCp6dDowLGxlPVR0IT09bnVsbD9UdC5jb3VudCp6dDoxLzAscm49TWF0aC5tYXgoWmksbm4pLElvPU1hdGgubWluKGZpLFppK090LG5uK2xlKS0xLHNuPU1hdGgubWF4KDAsSW8tcm4rMSk7aWYoc24hPT0wKXtpZihaLmlzTWVzaClVLndpcmVmcmFtZT09PSEwPyhCLnNldExpbmVXaWR0aChVLndpcmVmcmFtZUxpbmV3aWR0aCp4dCgpKSxpZS5zZXRNb2RlKDEpKTppZS5zZXRNb2RlKDQpO2Vsc2UgaWYoWi5pc0xpbmUpe2xldCB2bj1VLmxpbmV3aWR0aDt2bj09PXZvaWQgMCYmKHZuPTEpLEIuc2V0TGluZVdpZHRoKHZuKnh0KCkpLFouaXNMaW5lU2VnbWVudHM/aWUuc2V0TW9kZSgxKTpaLmlzTGluZUxvb3A/aWUuc2V0TW9kZSgyKTppZS5zZXRNb2RlKDMpfWVsc2UgWi5pc1BvaW50cz9pZS5zZXRNb2RlKDApOlouaXNTcHJpdGUmJmllLnNldE1vZGUoNCk7aWYoWi5pc0luc3RhbmNlZE1lc2gpaWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLFouY291bnQpO2Vsc2UgaWYoTy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgdm49TWF0aC5taW4oTy5pbnN0YW5jZUNvdW50LE8uX21heEluc3RhbmNlQ291bnQpO2llLnJlbmRlckluc3RhbmNlcyhybixzbix2bil9ZWxzZSBpZS5yZW5kZXIocm4sc24pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKE0sSSl7Zj1xdC5nZXQoTSksZi5pbml0KCksZy5wdXNoKGYpLE0udHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKE8pe08uaXNMaWdodCYmTy5sYXllcnMudGVzdChJLmxheWVycykmJihmLnB1c2hMaWdodChPKSxPLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhPKSl9KSxmLnNldHVwTGlnaHRzKHgucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLE0udHJhdmVyc2UoZnVuY3Rpb24oTyl7bGV0IFU9Ty5tYXRlcmlhbDtpZihVKWlmKEFycmF5LmlzQXJyYXkoVSkpZm9yKGxldCBaPTA7WjxVLmxlbmd0aDtaKyspe2xldCBUdD1VW1pdO09sKFR0LE0sTyl9ZWxzZSBPbChVLE0sTyl9KSxnLnBvcCgpLGY9bnVsbH07bGV0IFk9bnVsbDtmdW5jdGlvbiBNdChNKXtZJiZZKE0pfWZ1bmN0aW9uIER0KCl7emUuc3RvcCgpfWZ1bmN0aW9uIGp0KCl7emUuc3RhcnQoKX1sZXQgemU9bmV3IGcwO3plLnNldEFuaW1hdGlvbkxvb3AoTXQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ6ZS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKE0pe1k9TSxjdC5zZXRBbmltYXRpb25Mb29wKE0pLE09PT1udWxsP3plLnN0b3AoKTp6ZS5zdGFydCgpfSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oTSxJKXtpZihJIT09dm9pZCAwJiZJLmlzQ2FtZXJhIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4iKTtyZXR1cm59aWYodj09PSEwKXJldHVybjtNLmF1dG9VcGRhdGU9PT0hMCYmTS51cGRhdGVNYXRyaXhXb3JsZCgpLEkucGFyZW50PT09bnVsbCYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLGN0LmVuYWJsZWQ9PT0hMCYmY3QuaXNQcmVzZW50aW5nPT09ITAmJihjdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJmN0LnVwZGF0ZUNhbWVyYShJKSxJPWN0LmdldENhbWVyYSgpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkJlZm9yZVJlbmRlcih4LE0sSSxiKSxmPXF0LmdldChNLGcubGVuZ3RoKSxmLmluaXQoKSxnLnB1c2goZiksJC5tdWx0aXBseU1hdHJpY2VzKEkucHJvamVjdGlvbk1hdHJpeCxJLm1hdHJpeFdvcmxkSW52ZXJzZSksVi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgkKSxhdD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLFE9RS5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsYXQsSSksaD1adC5nZXQoTSxkLmxlbmd0aCksaC5pbml0KCksZC5wdXNoKGgpLG5lKE0sSSwwLHguc29ydE9iamVjdHMpLGguZmluaXNoKCkseC5zb3J0T2JqZWN0cz09PSEwJiZoLnNvcnQoUixEKSxRPT09ITAmJkUuYmVnaW5TaGFkb3dzKCk7bGV0IE89Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYody5yZW5kZXIoTyxNLEkpLFE9PT0hMCYmRS5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxxLnJlbmRlcihoLE0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksSS5pc0FycmF5Q2FtZXJhKXtsZXQgVT1JLmNhbWVyYXM7Zm9yKGxldCBaPTAsVHQ9VS5sZW5ndGg7WjxUdDtaKyspe2xldCBDdD1VW1pdO2VuKGgsTSxDdCxDdC52aWV3cG9ydCl9fWVsc2UgZW4oaCxNLEkpO2IhPT1udWxsJiYoQy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxDLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksTS5pc1NjZW5lPT09ITAmJk0ub25BZnRlclJlbmRlcih4LE0sSSksQi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEIuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxCLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksQi5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5dC5yZXNldERlZmF1bHRTdGF0ZSgpLF89LTEsUz1udWxsLGcucG9wKCksZy5sZW5ndGg+MD9mPWdbZy5sZW5ndGgtMV06Zj1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9oPWRbZC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBuZShNLEksTyxVKXtpZihNLnZpc2libGU9PT0hMSlyZXR1cm47aWYoTS5sYXllcnMudGVzdChJLmxheWVycykpe2lmKE0uaXNHcm91cClPPU0ucmVuZGVyT3JkZXI7ZWxzZSBpZihNLmlzTE9EKU0uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZShJKTtlbHNlIGlmKE0uaXNMaWdodClmLnB1c2hMaWdodChNKSxNLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhNKTtlbHNlIGlmKE0uaXNTcHJpdGUpe2lmKCFNLmZydXN0dW1DdWxsZWR8fFYuaW50ZXJzZWN0c1Nwcml0ZShNKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7THQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1lbHNlIGlmKChNLmlzTWVzaHx8TS5pc0xpbmV8fE0uaXNQb2ludHMpJiYoTS5pc1NraW5uZWRNZXNoJiZNLnNrZWxldG9uLmZyYW1lIT09c3QucmVuZGVyLmZyYW1lJiYoTS5za2VsZXRvbi51cGRhdGUoKSxNLnNrZWxldG9uLmZyYW1lPXN0LnJlbmRlci5mcmFtZSksIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzT2JqZWN0KE0pKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMdCkpe2xldCBSdD1DdC5ncm91cHM7Zm9yKGxldCBHdD0wLHp0PVJ0Lmxlbmd0aDtHdDx6dDtHdCsrKXtsZXQgVXQ9UnRbR3RdLGllPUx0W1V0Lm1hdGVyaWFsSW5kZXhdO2llJiZpZS52aXNpYmxlJiZoLnB1c2goTSxDdCxpZSxPLGx0LnosVXQpfX1lbHNlIEx0LnZpc2libGUmJmgucHVzaChNLEN0LEx0LE8sbHQueixudWxsKX19bGV0IFR0PU0uY2hpbGRyZW47Zm9yKGxldCBDdD0wLEx0PVR0Lmxlbmd0aDtDdDxMdDtDdCsrKW5lKFR0W0N0XSxJLE8sVSl9ZnVuY3Rpb24gZW4oTSxJLE8sVSl7bGV0IFo9TS5vcGFxdWUsVHQ9TS50cmFuc21pc3NpdmUsQ3Q9TS50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhPKSxUdC5sZW5ndGg+MCYmeW4oWixJLE8pLFUmJkIudmlld3BvcnQoTC5jb3B5KFUpKSxaLmxlbmd0aD4wJiZEbyhaLEksTyksVHQubGVuZ3RoPjAmJkRvKFR0LEksTyksQ3QubGVuZ3RoPjAmJkRvKEN0LEksTyl9ZnVuY3Rpb24geW4oTSxJLE8pe2lmKEc9PT1udWxsKXtsZXQgQ3Q9bz09PSEwJiZTdC5pc1dlYkdMMj09PSEwP3NvOk5lO0c9bmV3IEN0KDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6X3QuY29udmVydChVcikhPT1udWxsP1VyOmVpLG1pbkZpbHRlcjpMbCxtYWdGaWx0ZXI6ZmUsd3JhcFM6VmUsd3JhcFQ6VmUsdXNlUmVuZGVyVG9UZXh0dXJlOm10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgVT14LmdldFJlbmRlclRhcmdldCgpO3guc2V0UmVuZGVyVGFyZ2V0KEcpLHguY2xlYXIoKTtsZXQgWj14LnRvbmVNYXBwaW5nO3gudG9uZU1hcHBpbmc9dGksRG8oTSxJLE8pLHgudG9uZU1hcHBpbmc9WixDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEcpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEcpLHguc2V0UmVuZGVyVGFyZ2V0KFUpfWZ1bmN0aW9uIERvKE0sSSxPKXtsZXQgVT1JLmlzU2NlbmU9PT0hMD9JLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IFo9MCxUdD1NLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PU1bWl0sTHQ9Q3Qub2JqZWN0LFJ0PUN0Lmdlb21ldHJ5LEd0PVU9PT1udWxsP0N0Lm1hdGVyaWFsOlUsenQ9Q3QuZ3JvdXA7THQubGF5ZXJzLnRlc3QoTy5sYXllcnMpJiZVMChMdCxJLE8sUnQsR3QsenQpfX1mdW5jdGlvbiBVMChNLEksTyxVLFosVHQpe00ub25CZWZvcmVSZW5kZXIoeCxJLE8sVSxaLFR0KSxNLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKE8ubWF0cml4V29ybGRJbnZlcnNlLE0ubWF0cml4V29ybGQpLE0ubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChNLm1vZGVsVmlld01hdHJpeCksWi5vbkJlZm9yZVJlbmRlcih4LEksTyxVLE0sVHQpLFoudHJhbnNwYXJlbnQ9PT0hMCYmWi5zaWRlPT09SHI/KFouc2lkZT1oZSxaLm5lZWRzVXBkYXRlPSEwLHgucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksWi5zaWRlPWVvLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9SHIpOngucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksTS5vbkFmdGVyUmVuZGVyKHgsSSxPLFUsWixUdCl9ZnVuY3Rpb24gT2woTSxJLE8pe0kuaXNTY2VuZSE9PSEwJiYoST1kdCk7bGV0IFU9bnQuZ2V0KE0pLFo9Zi5zdGF0ZS5saWdodHMsVHQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXksQ3Q9Wi5zdGF0ZS52ZXJzaW9uLEx0PWJ0LmdldFBhcmFtZXRlcnMoTSxaLnN0YXRlLFR0LEksTyksUnQ9YnQuZ2V0UHJvZ3JhbUNhY2hlS2V5KEx0KSxHdD1VLnByb2dyYW1zO1UuZW52aXJvbm1lbnQ9TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0kuZW52aXJvbm1lbnQ6bnVsbCxVLmZvZz1JLmZvZyxVLmVudk1hcD0oTS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0o6aikuZ2V0KE0uZW52TWFwfHxVLmVudmlyb25tZW50KSxHdD09PXZvaWQgMCYmKE0uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLEd0PW5ldyBNYXAsVS5wcm9ncmFtcz1HdCk7bGV0IHp0PUd0LmdldChSdCk7aWYoenQhPT12b2lkIDApe2lmKFUuY3VycmVudFByb2dyYW09PT16dCYmVS5saWdodHNTdGF0ZVZlcnNpb249PT1DdClyZXR1cm4gb2YoTSxMdCksenR9ZWxzZSBMdC51bmlmb3Jtcz1idC5nZXRVbmlmb3JtcyhNKSxNLm9uQnVpbGQoTyxMdCx4KSxNLm9uQmVmb3JlQ29tcGlsZShMdCx4KSx6dD1idC5hY3F1aXJlUHJvZ3JhbShMdCxSdCksR3Quc2V0KFJ0LHp0KSxVLnVuaWZvcm1zPUx0LnVuaWZvcm1zO2xldCBVdD1VLnVuaWZvcm1zOyghTS5pc1NoYWRlck1hdGVyaWFsJiYhTS5pc1Jhd1NoYWRlck1hdGVyaWFsfHxNLmNsaXBwaW5nPT09ITApJiYoVXQuY2xpcHBpbmdQbGFuZXM9RS51bmlmb3JtKSxvZihNLEx0KSxVLm5lZWRzTGlnaHRzPWswKE0pLFUubGlnaHRzU3RhdGVWZXJzaW9uPUN0LFUubmVlZHNMaWdodHMmJihVdC5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1aLnN0YXRlLmFtYmllbnQsVXQubGlnaHRQcm9iZS52YWx1ZT1aLnN0YXRlLnByb2JlLFV0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWwsVXQuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxVdC5zcG90TGlnaHRzLnZhbHVlPVouc3RhdGUuc3BvdCxVdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvdyxVdC5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1aLnN0YXRlLnJlY3RBcmVhLFV0Lmx0Y18xLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMxLFV0Lmx0Y18yLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMyLFV0LnBvaW50TGlnaHRzLnZhbHVlPVouc3RhdGUucG9pbnQsVXQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvdyxVdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPVouc3RhdGUuaGVtaSxVdC5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLFV0LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsVXQuc3BvdFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXAsVXQuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsVXQucG9pbnRTaGFkb3dNYXAudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvd01hcCxVdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgaWU9enQuZ2V0VW5pZm9ybXMoKSxmaT1paS5zZXFXaXRoVmFsdWUoaWUuc2VxLFV0KTtyZXR1cm4gVS5jdXJyZW50UHJvZ3JhbT16dCxVLnVuaWZvcm1zTGlzdD1maSx6dH1mdW5jdGlvbiBvZihNLEkpe2xldCBPPW50LmdldChNKTtPLm91dHB1dEVuY29kaW5nPUkub3V0cHV0RW5jb2RpbmcsTy5pbnN0YW5jaW5nPUkuaW5zdGFuY2luZyxPLnNraW5uaW5nPUkuc2tpbm5pbmcsTy5tb3JwaFRhcmdldHM9SS5tb3JwaFRhcmdldHMsTy5tb3JwaE5vcm1hbHM9SS5tb3JwaE5vcm1hbHMsTy5tb3JwaFRhcmdldHNDb3VudD1JLm1vcnBoVGFyZ2V0c0NvdW50LE8ubnVtQ2xpcHBpbmdQbGFuZXM9SS5udW1DbGlwcGluZ1BsYW5lcyxPLm51bUludGVyc2VjdGlvbj1JLm51bUNsaXBJbnRlcnNlY3Rpb24sTy52ZXJ0ZXhBbHBoYXM9SS52ZXJ0ZXhBbHBoYXMsTy52ZXJ0ZXhUYW5nZW50cz1JLnZlcnRleFRhbmdlbnRzLE8udG9uZU1hcHBpbmc9SS50b25lTWFwcGluZ31mdW5jdGlvbiBCMChNLEksTyxVLFope0kuaXNTY2VuZSE9PSEwJiYoST1kdCksQy5yZXNldFRleHR1cmVVbml0cygpO2xldCBUdD1JLmZvZyxDdD1VLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLEx0PWI9PT1udWxsP3gub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOnJpLFJ0PShVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoVS5lbnZNYXB8fEN0KSxHdD1VLnZlcnRleENvbG9ycz09PSEwJiYhIU8uYXR0cmlidXRlcy5jb2xvciYmTy5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx6dD0hIVUubm9ybWFsTWFwJiYhIU8uYXR0cmlidXRlcy50YW5nZW50LFV0PSEhTy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24saWU9ISFPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsZmk9Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsWmk9VS50b25lTWFwcGVkP3gudG9uZU1hcHBpbmc6dGksT3Q9bnQuZ2V0KFUpLG5uPWYuc3RhdGUubGlnaHRzO2lmKFE9PT0hMCYmKGF0PT09ITB8fE0hPT1TKSl7bGV0IFplPU09PT1TJiZVLmlkPT09XztFLnNldFN0YXRlKFUsTSxaZSl9bGV0IGxlPSExO1UudmVyc2lvbj09PU90Ll9fdmVyc2lvbj8oT3QubmVlZHNMaWdodHMmJk90LmxpZ2h0c1N0YXRlVmVyc2lvbiE9PW5uLnN0YXRlLnZlcnNpb258fE90Lm91dHB1dEVuY29kaW5nIT09THR8fFouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITF8fCFaLmlzSW5zdGFuY2VkTWVzaCYmT3QuaW5zdGFuY2luZz09PSEwfHxaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITF8fCFaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITB8fE90LmVudk1hcCE9PVJ0fHxVLmZvZyYmT3QuZm9nIT09VHR8fE90Lm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYoT3QubnVtQ2xpcHBpbmdQbGFuZXMhPT1FLm51bVBsYW5lc3x8T3QubnVtSW50ZXJzZWN0aW9uIT09RS5udW1JbnRlcnNlY3Rpb24pfHxPdC52ZXJ0ZXhBbHBoYXMhPT1HdHx8T3QudmVydGV4VGFuZ2VudHMhPT16dHx8T3QubW9ycGhUYXJnZXRzIT09VXR8fE90Lm1vcnBoTm9ybWFscyE9PWllfHxPdC50b25lTWFwcGluZyE9PVppfHxTdC5pc1dlYkdMMj09PSEwJiZPdC5tb3JwaFRhcmdldHNDb3VudCE9PWZpKSYmKGxlPSEwKToobGU9ITAsT3QuX192ZXJzaW9uPVUudmVyc2lvbik7bGV0IHJuPU90LmN1cnJlbnRQcm9ncmFtO2xlPT09ITAmJihybj1PbChVLEksWikpO2xldCBJbz0hMSxzbj0hMSx2bj0hMSxfZT1ybi5nZXRVbmlmb3JtcygpLG5zPU90LnVuaWZvcm1zO2lmKEIudXNlUHJvZ3JhbShybi5wcm9ncmFtKSYmKElvPSEwLHNuPSEwLHZuPSEwKSxVLmlkIT09XyYmKF89VS5pZCxzbj0hMCksSW98fFMhPT1NKXtpZihfZS5zZXRWYWx1ZShrLCJwcm9qZWN0aW9uTWF0cml4IixNLnByb2plY3Rpb25NYXRyaXgpLFN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJl9lLnNldFZhbHVlKGssImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKE0uZmFyKzEpL01hdGguTE4yKSksUyE9PU0mJihTPU0sc249ITAsdm49ITApLFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc01lc2hQaG9uZ01hdGVyaWFsfHxVLmlzTWVzaFRvb25NYXRlcmlhbHx8VS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxVLmVudk1hcCl7bGV0IFplPV9lLm1hcC5jYW1lcmFQb3NpdGlvbjtaZSE9PXZvaWQgMCYmWmUuc2V0VmFsdWUoayxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkpfShVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbCkmJl9lLnNldFZhbHVlKGssImlzT3J0aG9ncmFwaGljIixNLmlzT3J0aG9ncmFwaGljQ2FtZXJhPT09ITApLChVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc1NoYWRvd01hdGVyaWFsfHxaLmlzU2tpbm5lZE1lc2gpJiZfZS5zZXRWYWx1ZShrLCJ2aWV3TWF0cml4IixNLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoWi5pc1NraW5uZWRNZXNoKXtfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXgiKSxfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IFplPVouc2tlbGV0b247WmUmJihTdC5mbG9hdFZlcnRleFRleHR1cmVzPyhaZS5ib25lVGV4dHVyZT09PW51bGwmJlplLmNvbXB1dGVCb25lVGV4dHVyZSgpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlIixaZS5ib25lVGV4dHVyZSxDKSxfZS5zZXRWYWx1ZShrLCJib25lVGV4dHVyZVNpemUiLFplLmJvbmVUZXh0dXJlU2l6ZSkpOl9lLnNldE9wdGlvbmFsKGssWmUsImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hIU8mJihPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8Ty5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwKSYmcnQudXBkYXRlKFosTyxVLHJuKSwoc258fE90LnJlY2VpdmVTaGFkb3chPT1aLnJlY2VpdmVTaGFkb3cpJiYoT3QucmVjZWl2ZVNoYWRvdz1aLnJlY2VpdmVTaGFkb3csX2Uuc2V0VmFsdWUoaywicmVjZWl2ZVNoYWRvdyIsWi5yZWNlaXZlU2hhZG93KSksc24mJihfZS5zZXRWYWx1ZShrLCJ0b25lTWFwcGluZ0V4cG9zdXJlIix4LnRvbmVNYXBwaW5nRXhwb3N1cmUpLE90Lm5lZWRzTGlnaHRzJiZPMChucyx2biksVHQmJlUuZm9nJiZJdC5yZWZyZXNoRm9nVW5pZm9ybXMobnMsVHQpLEl0LnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKG5zLFUseSxYLEcpLGlpLnVwbG9hZChrLE90LnVuaWZvcm1zTGlzdCxucyxDKSksVS5pc1NoYWRlck1hdGVyaWFsJiZVLnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpLFUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxVLmlzU3ByaXRlTWF0ZXJpYWwmJl9lLnNldFZhbHVlKGssImNlbnRlciIsWi5jZW50ZXIpLF9lLnNldFZhbHVlKGssIm1vZGVsVmlld01hdHJpeCIsWi5tb2RlbFZpZXdNYXRyaXgpLF9lLnNldFZhbHVlKGssIm5vcm1hbE1hdHJpeCIsWi5ub3JtYWxNYXRyaXgpLF9lLnNldFZhbHVlKGssIm1vZGVsTWF0cml4IixaLm1hdHJpeFdvcmxkKSxybn1mdW5jdGlvbiBPMChNLEkpe00uYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9SSxNLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9SSxNLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1JfWZ1bmN0aW9uIGswKE0pe3JldHVybiBNLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8TS5pc01lc2hUb29uTWF0ZXJpYWx8fE0uaXNNZXNoUGhvbmdNYXRlcmlhbHx8TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxNLmlzU2hhZG93TWF0ZXJpYWx8fE0uaXNTaGFkZXJNYXRlcmlhbCYmTS5saWdodHM9PT0hMH10aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG19LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihNLEksTyl7bnQuZ2V0KE0udGV4dHVyZSkuX193ZWJnbFRleHR1cmU9SSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPU87bGV0IFU9bnQuZ2V0KE0pO1UuX19oYXNFeHRlcm5hbFRleHR1cmVzPSEwLFUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPU89PT12b2lkIDAsVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxNLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksTS51c2VSZW5kZXJUb1RleHR1cmU9ITEsTS51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihNLEkpe2xldCBPPW50LmdldChNKTtPLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1JLE8uX191c2VEZWZhdWx0RnJhbWVidWZmZXI9ST09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oTSxJPTAsTz0wKXtiPU0sbT1JLHA9TztsZXQgVT0hMDtpZihNKXtsZXQgUnQ9bnQuZ2V0KE0pO1J0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyIT09dm9pZCAwPyhCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxVPSExKTpSdC5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/Qy5zZXR1cFJlbmRlclRhcmdldChNKTpSdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJkMucmViaW5kVGV4dHVyZXMoTSxudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgWj1udWxsLFR0PSExLEN0PSExO2lmKE0pe2xldCBSdD1NLnRleHR1cmU7KFJ0LmlzRGF0YVRleHR1cmUzRHx8UnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoQ3Q9ITApO2xldCBHdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO00uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KFo9R3RbSV0sVHQ9ITApOk0udXNlUmVuZGVyYnVmZmVyP1o9bnQuZ2V0KE0pLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpaPUd0LEwuY29weShNLnZpZXdwb3J0KSxBLmNvcHkoTS5zY2lzc29yKSxIPU0uc2Npc3NvclRlc3R9ZWxzZSBMLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxIPU47aWYoQi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWikmJlN0LmRyYXdCdWZmZXJzJiZVJiZCLmRyYXdCdWZmZXJzKE0sWiksQi52aWV3cG9ydChMKSxCLnNjaXNzb3IoQSksQi5zZXRTY2lzc29yVGVzdChIKSxUdCl7bGV0IFJ0PW50LmdldChNLnRleHR1cmUpO2suZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrSSxSdC5fX3dlYmdsVGV4dHVyZSxPKX1lbHNlIGlmKEN0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSksR3Q9SXx8MDtrLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LFJ0Ll9fd2ViZ2xUZXh0dXJlLE98fDAsR3QpfV89LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihNLEksTyxVLFosVHQsQ3Qpe2lmKCEoTSYmTS5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgTHQ9bnQuZ2V0KE0pLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihNLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZDdCE9PXZvaWQgMCYmKEx0PUx0W0N0XSksTHQpe0IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEx0KTt0cnl7bGV0IFJ0PU0udGV4dHVyZSxHdD1SdC5mb3JtYXQsenQ9UnQudHlwZTtpZihHdCE9PVJlJiZfdC5jb252ZXJ0KEd0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBVdD16dD09PVVyJiYobXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8U3QuaXNXZWJHTDImJm10LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZih6dCE9PWVpJiZfdC5jb252ZXJ0KHp0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM4KSYmISh6dD09PVVpJiYoU3QuaXNXZWJHTDJ8fG10LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8bXQuaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSkpJiYhVXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTtyZXR1cm59ay5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP0k+PTAmJkk8PU0ud2lkdGgtVSYmTz49MCYmTzw9TS5oZWlnaHQtWiYmay5yZWFkUGl4ZWxzKEksTyxVLFosX3QuY29udmVydChHdCksX3QuY29udmVydCh6dCksVHQpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBSdD1iIT09bnVsbD9udC5nZXQoYikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPPTApe2lmKEkuaXNGcmFtZWJ1ZmZlclRleHR1cmUhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtyZXR1cm59bGV0IFU9TWF0aC5wb3coMiwtTyksWj1NYXRoLmZsb29yKEkuaW1hZ2Uud2lkdGgqVSksVHQ9TWF0aC5mbG9vcihJLmltYWdlLmhlaWdodCpVKTtDLnNldFRleHR1cmUyRChJLDApLGsuY29weVRleFN1YkltYWdlMkQoMzU1MyxPLDAsMCxNLngsTS55LFosVHQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPLFU9MCl7bGV0IFo9SS5pbWFnZS53aWR0aCxUdD1JLmltYWdlLmhlaWdodCxDdD1fdC5jb252ZXJ0KE8uZm9ybWF0KSxMdD1fdC5jb252ZXJ0KE8udHlwZSk7Qy5zZXRUZXh0dXJlMkQoTywwKSxrLnBpeGVsU3RvcmVpKDM3NDQwLE8uZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsTy5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsTy51bnBhY2tBbGlnbm1lbnQpLEkuaXNEYXRhVGV4dHVyZT9rLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksWixUdCxDdCxMdCxJLmltYWdlLmRhdGEpOkkuaXNDb21wcmVzc2VkVGV4dHVyZT9rLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsVSxNLngsTS55LEkubWlwbWFwc1swXS53aWR0aCxJLm1pcG1hcHNbMF0uaGVpZ2h0LEN0LEkubWlwbWFwc1swXS5kYXRhKTprLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksQ3QsTHQsSS5pbWFnZSksVT09PTAmJk8uZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKDM1NTMpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oTSxJLE8sVSxaPTApe2lmKHguaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBUdD1NLm1heC54LU0ubWluLngrMSxDdD1NLm1heC55LU0ubWluLnkrMSxMdD1NLm1heC56LU0ubWluLnorMSxSdD1fdC5jb252ZXJ0KFUuZm9ybWF0KSxHdD1fdC5jb252ZXJ0KFUudHlwZSksenQ7aWYoVS5pc0RhdGFUZXh0dXJlM0QpQy5zZXRUZXh0dXJlM0QoVSwwKSx6dD0zMjg3OTtlbHNlIGlmKFUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpQy5zZXRUZXh0dXJlMkRBcnJheShVLDApLHp0PTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1rLnBpeGVsU3RvcmVpKDM3NDQwLFUuZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsVS5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsVS51bnBhY2tBbGlnbm1lbnQpO2xldCBVdD1rLmdldFBhcmFtZXRlcigzMzE0KSxpZT1rLmdldFBhcmFtZXRlcigzMjg3OCksZmk9ay5nZXRQYXJhbWV0ZXIoMzMxNiksWmk9ay5nZXRQYXJhbWV0ZXIoMzMxNSksT3Q9ay5nZXRQYXJhbWV0ZXIoMzI4NzcpLG5uPU8uaXNDb21wcmVzc2VkVGV4dHVyZT9PLm1pcG1hcHNbMF06Ty5pbWFnZTtrLnBpeGVsU3RvcmVpKDMzMTQsbm4ud2lkdGgpLGsucGl4ZWxTdG9yZWkoMzI4Nzgsbm4uaGVpZ2h0KSxrLnBpeGVsU3RvcmVpKDMzMTYsTS5taW4ueCksay5waXhlbFN0b3JlaSgzMzE1LE0ubWluLnkpLGsucGl4ZWxTdG9yZWkoMzI4NzcsTS5taW4ueiksTy5pc0RhdGFUZXh0dXJlfHxPLmlzRGF0YVRleHR1cmUzRD9rLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubi5kYXRhKTpPLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksay5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LG5uLmRhdGEpKTprLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubiksay5waXhlbFN0b3JlaSgzMzE0LFV0KSxrLnBpeGVsU3RvcmVpKDMyODc4LGllKSxrLnBpeGVsU3RvcmVpKDMzMTYsZmkpLGsucGl4ZWxTdG9yZWkoMzMxNSxaaSksay5waXhlbFN0b3JlaSgzMjg3NyxPdCksWj09PTAmJlUuZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKHp0KSxCLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihNKXtDLnNldFRleHR1cmUyRChNLDApLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXttPTAscD0wLGI9bnVsbCxCLnJlc2V0KCkseXQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfVZ0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIEp1PWNsYXNzIGV4dGVuZHMgVnR7fTtKdS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgaG89Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGhvKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtoby5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBmbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGZ0KHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IGZvKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtmby5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIFlyPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07WXIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIEdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9dG4oKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLHM9dGhpcy5zdHJpZGU7cjxzO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07R2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIHNlPW5ldyBULFdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9cj09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLHMpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1zLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJuIG5ldyBRdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IFdpKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6ZSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07V2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07ZmwucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIFJyLFdzPW5ldyBULExyPW5ldyBULFByPW5ldyBULERyPW5ldyBLLHFzPW5ldyBLLEEwPW5ldyB3dCxPYT1uZXcgVCxYcz1uZXcgVCxrYT1uZXcgVCxVZz1uZXcgSyxSdT1uZXcgSyxCZz1uZXcgSywkdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLFJyPT09dm9pZCAwKXtScj1uZXcgSHQ7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgR2koZSw1KTtSci5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxSci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgV2koaSwzLDAsITEpKSxSci5zZXRBdHRyaWJ1dGUoInV2IixuZXcgV2koaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVJyLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBmbCx0aGlzLmNlbnRlcj1uZXcgSyguNSwuNSl9cmF5Y2FzdCh0LGUpe3QuY2FtZXJhPT09bnVsbCYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLExyLnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxBMC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxQci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkxyLm11bHRpcGx5U2NhbGFyKC1Qci56KTtsZXQgaT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLHIscztpIT09MCYmKHM9TWF0aC5jb3MoaSkscj1NYXRoLnNpbihpKSk7bGV0IG89dGhpcy5jZW50ZXI7SGEoT2Euc2V0KC0uNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKFhzLnNldCguNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKGthLnNldCguNSwuNSwwKSxQcixvLExyLHIscyksVWcuc2V0KDAsMCksUnUuc2V0KDEsMCksQmcuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoT2EsWHMsa2EsITEsV3MpO2lmKGE9PT1udWxsJiYoSGEoWHMuc2V0KC0uNSwuNSwwKSxQcixvLExyLHIscyksUnUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxrYSxYcywhMSxXcyksYT09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhXcyk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpXcy5jbG9uZSgpLHV2OnJlLmdldFVWKFdzLE9hLFhzLGthLFVnLFJ1LEJnLG5ldyBLKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQuY2VudGVyIT09dm9pZCAwJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319OyR1LnByb3RvdHlwZS5pc1Nwcml0ZT0hMDtmdW5jdGlvbiBIYShuLHQsZSxpLHIscyl7RHIuc3ViVmVjdG9ycyhuLGUpLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksciE9PXZvaWQgMD8ocXMueD1zKkRyLngtcipEci55LHFzLnk9cipEci54K3MqRHIueSk6cXMuY29weShEciksbi5jb3B5KHQpLG4ueCs9cXMueCxuLnkrPXFzLnksbi5hcHBseU1hdHJpeDQoQTApfXZhciBPZz1uZXcgVCxrZz1uZXcgV3QsSGc9bmV3IFd0LE5FPW5ldyBULFZnPW5ldyB3dCxkbD1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyB3dCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyB3dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LGU9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IFd0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBpPTAscj1lLmNvdW50O2k8cjtpKyspe3QueD1lLmdldFgoaSksdC55PWUuZ2V0WShpKSx0Lno9ZS5nZXRaKGkpLHQudz1lLmdldFcoaSk7bGV0IHM9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO3MhPT0xLzA/dC5tdWx0aXBseVNjYWxhcihzKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcoaSx0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtsZXQgaT10aGlzLnNrZWxldG9uLHI9dGhpcy5nZW9tZXRyeTtrZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSGcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxPZy5jb3B5KGUpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IHM9MDtzPDQ7cysrKXtsZXQgbz1IZy5nZXRDb21wb25lbnQocyk7aWYobyE9PTApe2xldCBhPWtnLmdldENvbXBvbmVudChzKTtWZy5tdWx0aXBseU1hdHJpY2VzKGkuYm9uZXNbYV0ubWF0cml4V29ybGQsaS5ib25lSW52ZXJzZXNbYV0pLGUuYWRkU2NhbGVkVmVjdG9yKE5FLmNvcHkoT2cpLmFwcGx5TWF0cml4NChWZyksbyl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2RsLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBLdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07S3UucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgUXU9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLHMsbyxhLGwsYz1mZSx1PWZlLGgsZil7c3VwZXIobnVsbCxvLGEsbCxjLHUscixzLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtRdS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgcG89Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpe3R5cGVvZiBpPT0ibnVtYmVyIiYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cG8ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBHZz1uZXcgd3QsV2c9bmV3IHd0LFZhPVtdLFlzPW5ldyBvZSxqdT1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHBvKG5ldyBGbG9hdDMyQXJyYXkoaSoxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYoWXMuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxZcy5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLFlzLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgcz0wO3M8cjtzKyspe3RoaXMuZ2V0TWF0cml4QXQocyxHZyksV2cubXVsdGlwbHlNYXRyaWNlcyhpLEdnKSxZcy5tYXRyaXhXb3JsZD1XZyxZcy5yYXljYXN0KHQsVmEpO2ZvcihsZXQgbz0wLGE9VmEubGVuZ3RoO288YTtvKyspe2xldCBsPVZhW29dO2wuaW5zdGFuY2VJZD1zLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVZhLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcG8obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2p1LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIHpuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O3puLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBxZz1uZXcgVCxYZz1uZXcgVCxZZz1uZXcgd3QsTHU9bmV3IG9pLEdhPW5ldyBzaSxtbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHpuKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxzPWUuY291bnQ7cjxzO3IrKylxZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxYZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWcuZGlzdGFuY2VUbyhYZyk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGVlKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsbz1pLmRyYXdSYW5nZTtpZihpLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHYS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLEdhLmFwcGx5TWF0cml4NChyKSxHYS5yYWRpdXMrPXMsdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHYSk9PT0hMSlyZXR1cm47WWcuY29weShyKS5pbnZlcnQoKSxMdS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWWcpO2xldCBhPXMvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQsZj1uZXcgVCxkPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGc9aS5pbmRleCx2PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihnIT09bnVsbCl7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKGcuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7bGV0IFM9Zy5nZXRYKGIpLEw9Zy5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsUyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsTCksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBIPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0g8dC5uZWFyfHxIPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkgscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCBtPU1hdGgubWF4KDAsby5zdGFydCkscD1NYXRoLm1pbih2LmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBiPW0sXz1wLTE7YjxfO2IrPWQpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIrMSksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBMPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0w8dC5uZWFyfHxMPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkwscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07bW8ucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgWmc9bmV3IFQsSmc9bmV3IFQsZ289Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLHM9ZS5jb3VudDtyPHM7cis9MilaZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksSmcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT1yPT09MD8wOmlbci0xXSxpW3IrMV09aVtyXStaZy5kaXN0YW5jZVRvKEpnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtnby5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITA7dmFyIHRoPWNsYXNzIGV4dGVuZHMgbW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX07dGgucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIHBsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O3BsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciAkZz1uZXcgd3QsZWg9bmV3IG9pLFdhPW5ldyBzaSxxYT1uZXcgVCxuaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHBsKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2EuYXBwbHlNYXRyaXg0KHIpLFdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKFdhKT09PSExKXJldHVybjskZy5jb3B5KHIpLmludmVydCgpLGVoLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCgkZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPWkuaW5kZXgsaD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihjLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspe2xldCB2PWMuZ2V0WChnKTtxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsdiksS2cocWEsdixsLHIsdCxlLHRoaXMpfX1lbHNle2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihoLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspcWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLGcpLEtnKHFhLGcsbCxyLHQsZSx0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtuaC5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gS2cobix0LGUsaSxyLHMsbyl7bGV0IGE9ZWguZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgVDtlaC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO3MucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpvfSl9fXZhciBpaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjKXtzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9byE9PXZvaWQgMD9vOmJlLHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpiZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtpaC5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHJoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5mb3JtYXQ9aSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07cmgucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07c2gucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIG9oPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07b2gucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgWnI9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgcz1bXSxvPVtdLGE9W10sbD1bXSxjPW5ldyBULHU9bmV3IEs7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PWU7aCsrLGYrPTMpe2xldCBkPWkraC9lKnI7Yy54PXQqTWF0aC5jb3MoZCksYy55PXQqTWF0aC5zaW4oZCksby5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0ob1tmXS90KzEpLzIsdS55PShvW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1lO2grKylzLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWnIodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fTt2YXIgU2s9bmV3IFQsRWs9bmV3IFQsVGs9bmV3IFQsQWs9bmV3IHJlO3ZhciBGZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgZT1bXSxpLHI9dGhpcy5nZXRQb2ludCgwKSxzPTA7ZS5wdXNoKDApO2ZvcihsZXQgbz0xO288PXQ7bysrKWk9dGhpcy5nZXRQb2ludChvL3QpLHMrPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gocykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgaT10aGlzLmdldExlbmd0aHMoKSxyPTAscz1pLmxlbmd0aCxvO2U/bz1lOm89dCppW3MtMV07bGV0IGE9MCxsPXMtMSxjO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLW8sYzwwKWE9cisxO2Vsc2UgaWYoYz4wKWw9ci0xO2Vsc2V7bD1yO2JyZWFrfWlmKHI9bCxpW3JdPT09bylyZXR1cm4gci8ocy0xKTtsZXQgdT1pW3JdLGY9aVtyKzFdLXUsZD0oby11KS9mO3JldHVybihyK2QpLyhzLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQscz10KzFlLTQ7cjwwJiYocj0wKSxzPjEmJihzPTEpO2xldCBvPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KHMpLGw9ZXx8KG8uaXNWZWN0b3IyP25ldyBLOm5ldyBUKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihvKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgVCxyPVtdLHM9W10sbz1bXSxhPW5ldyBULGw9bmV3IHd0O2ZvcihsZXQgZD0wO2Q8PXQ7ZCsrKXtsZXQgZz1kL3Q7cltkXT10aGlzLmdldFRhbmdlbnRBdChnLG5ldyBUKX1zWzBdPW5ldyBULG9bMF09bmV3IFQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSx1PU1hdGguYWJzKHJbMF0ueCksaD1NYXRoLmFicyhyWzBdLnkpLGY9TWF0aC5hYnMoclswXS56KTt1PD1jJiYoYz11LGkuc2V0KDEsMCwwKSksaDw9YyYmKGM9aCxpLnNldCgwLDEsMCkpLGY8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxzWzBdKTtmb3IobGV0IGQ9MTtkPD10O2QrKyl7aWYoc1tkXT1zW2QtMV0uY2xvbmUoKSxvW2RdPW9bZC0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZC0xXSxyW2RdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBnPU1hdGguYWNvcyhJZShyW2QtMV0uZG90KHJbZF0pLC0xLDEpKTtzW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxnKSl9b1tkXS5jcm9zc1ZlY3RvcnMocltkXSxzW2RdKX1pZihlPT09ITApe2xldCBkPU1hdGguYWNvcyhJZShzWzBdLmRvdChzW3RdKSwtMSwxKSk7ZC89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhzWzBdLHNbdF0pKT4wJiYoZD0tZCk7Zm9yKGxldCBnPTE7Zzw9dDtnKyspc1tnXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbZ10sZCpnKSksb1tnXS5jcm9zc1ZlY3RvcnMocltnXSxzW2ddKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOnMsYmlub3JtYWxzOm99fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSxKcj1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxzPTAsbz1NYXRoLlBJKjIsYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1zLHRoaXMuYUVuZEFuZ2xlPW8sdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyBLLHI9TWF0aC5QSSoyLHM9dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxvPU1hdGguYWJzKHMpPE51bWJlci5FUFNJTE9OO2Zvcig7czwwOylzKz1yO2Zvcig7cz5yOylzLT1yO3M8TnVtYmVyLkVQU0lMT04mJihvP3M9MDpzPXIpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhbyYmKHM9PT1yP3M9LXI6cz1zLXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpzLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxkPWMtdGhpcy5hWTtsPWYqdS1kKmgrdGhpcy5hWCxjPWYqaCtkKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtKci5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIG1sPWNsYXNzIGV4dGVuZHMgSnJ7Y29uc3RydWN0b3IodCxlLGkscixzLG8pe3N1cGVyKHQsZSxpLGkscixzLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifX07bWwucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gdGYoKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIocyxvLGEsbCl7bj1zLHQ9YSxlPS0zKnMrMypvLTIqYS1sLGk9MipzLTIqbythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyl7cihvLGEsYyooYS1zKSxjKihsLW8pKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyx1LGgpe2xldCBmPShvLXMpL2MtKGEtcykvKGMrdSkrKGEtbykvdSxkPShhLW8pL3UtKGwtbykvKHUraCkrKGwtYSkvaDtmKj11LGQqPXUscihvLGEsZixkKX0sY2FsYzpmdW5jdGlvbihzKXtsZXQgbz1zKnMsYT1vKnM7cmV0dXJuIG4rdCpzK2UqbytpKmF9fX12YXIgWGE9bmV3IFQsUHU9bmV3IHRmLER1PW5ldyB0ZixJdT1uZXcgdGYsZ2w9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdLGU9ITEsaT0iY2VudHJpcGV0YWwiLHI9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9aSx0aGlzLnRlbnNpb249cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnBvaW50cyxzPXIubGVuZ3RoLG89KHMtKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKG8pLGw9by1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL3MpKzEpKnM6bD09PTAmJmE9PT1zLTEmJihhPXMtMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklc106KFhhLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1YYSk7bGV0IGg9clthJXNdLGY9clsoYSsxKSVzXTtpZih0aGlzLmNsb3NlZHx8YSsyPHM/dT1yWyhhKzIpJXNdOihYYS5zdWJWZWN0b3JzKHJbcy0xXSxyW3MtMl0pLmFkZChyW3MtMV0pLHU9WGEpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBkPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxnPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCksZCkseD1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLGQpLHY9TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxkKTt4PDFlLTQmJih4PTEpLGc8MWUtNCYmKGc9eCksdjwxZS00JiYodj14KSxQdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGgueCxmLngsdS54LGcseCx2KSxEdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGcseCx2KSxJdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGcseCx2KX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoUHUuaW5pdENhdG11bGxSb20oYy54LGgueCxmLngsdS54LHRoaXMudGVuc2lvbiksRHUuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbiksSXUuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChQdS5jYWxjKGwpLER1LmNhbGMobCksSXUuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBUKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07Z2wucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBRZyhuLHQsZSxpLHIpe2xldCBzPShpLXQpKi41LG89KHItZSkqLjUsYT1uKm4sbD1uKmE7cmV0dXJuKDIqZS0yKmkrcytvKSpsKygtMyplKzMqaS0yKnMtbykqYStzKm4rZX1mdW5jdGlvbiBGRShuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9ZnVuY3Rpb24gekUobix0KXtyZXR1cm4gMiooMS1uKSpuKnR9ZnVuY3Rpb24gVUUobix0KXtyZXR1cm4gbipuKnR9ZnVuY3Rpb24ganMobix0LGUsaSl7cmV0dXJuIEZFKG4sdCkrekUobixlKStVRShuLGkpfWZ1bmN0aW9uIEJFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIE9FKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9ZnVuY3Rpb24ga0Uobix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH1mdW5jdGlvbiBIRShuLHQpe3JldHVybiBuKm4qbip0fWZ1bmN0aW9uIHRvKG4sdCxlLGkscil7cmV0dXJuIEJFKG4sdCkrT0UobixlKStrRShuLGkpK0hFKG4scil9dmFyIHhvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEsscj1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O3hvLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHhsPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQscj1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQodG8odCxyLngscy54LG8ueCxhLngpLHRvKHQsci55LHMueSxvLnksYS55KSx0byh0LHIueixzLnosby56LGEueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eGwucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyICRyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWdldFRhbmdlbnQodCxlKXtsZXQgaT1lfHxuZXcgSztyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319OyRyLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYWg9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHlvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5by5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeWw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSxqcyh0LHIueixzLnosby56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5bC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIHZvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9KHIubGVuZ3RoLTEpKnQsbz1NYXRoLmZsb29yKHMpLGE9cy1vLGw9cltvPT09MD9vOm8tMV0sYz1yW29dLHU9cltvPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpvKzFdLGg9cltvPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpvKzJdO3JldHVybiBpLnNldChRZyhhLGwueCxjLngsdS54LGgueCksUWcoYSxsLnksYy55LHUueSxoLnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChuZXcgSygpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTt2by5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgQzA9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bWwsQ2F0bXVsbFJvbUN1cnZlMzpnbCxDdWJpY0JlemllckN1cnZlOnhvLEN1YmljQmV6aWVyQ3VydmUzOnhsLEVsbGlwc2VDdXJ2ZTpKcixMaW5lQ3VydmU6JHIsTGluZUN1cnZlMzphaCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp5byxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6eWwsU3BsaW5lQ3VydmU6dm99KSxsaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3ICRyKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxzPTA7Zm9yKDtzPHIubGVuZ3RoOyl7aWYocltzXT49aSl7bGV0IG89cltzXS1pLGE9dGhpcy5jdXJ2ZXNbc10sbD1hLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLW8vbDtyZXR1cm4gYS5nZXRQb2ludEF0KGMsZSl9cysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgZT1bXSxpO2ZvcihsZXQgcj0wLHM9dGhpcy5jdXJ2ZXM7cjxzLmxlbmd0aDtyKyspe2xldCBvPXNbcl0sYT1vJiZvLmlzRWxsaXBzZUN1cnZlP3QqMjpvJiYoby5pc0xpbmVDdXJ2ZXx8by5pc0xpbmVDdXJ2ZTMpPzE6byYmby5pc1NwbGluZUN1cnZlP3Qqby5wb2ludHMubGVuZ3RoOnQsbD1vLmdldFBvaW50cyhhKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmN1cnZlc1tlXTt0LmN1cnZlcy5wdXNoKHIudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2gobmV3IEMwW3IudHlwZV0oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxfbz1jbGFzcyBleHRlbmRzIGxoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgSyx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3ICRyKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBzPW5ldyB5byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgeG8odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpLG5ldyBLKGksciksbmV3IEsocyxvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHMsbyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgdm8oZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrYSxlK2wsaSxyLHMsbyksdGhpc31hYnNhcmModCxlLGkscixzLG8pe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLHMsbyksdGhpc31lbGxpcHNlKHQsZSxpLHIscyxvLGEsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2MsZSt1LGkscixzLG8sYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz1uZXcgSnIodCxlLGkscixzLG8sYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LFVuPWNsYXNzIGV4dGVuZHMgX297Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPXRuKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5ob2xlc1tlXTt0LmhvbGVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2gobmV3IF9vKCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sVkU9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKG4sdCxlPTIpe2xldCBpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgscz1SMChuLDAscixlLCEwKSxvPVtdO2lmKCFzfHxzLm5leHQ9PT1zLnByZXYpcmV0dXJuIG87bGV0IGEsbCxjLHUsaCxmLGQ7aWYoaSYmKHM9WUUobix0LHMsZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9dT1uWzFdO2ZvcihsZXQgZz1lO2c8cjtnKz1lKWg9bltnXSxmPW5bZysxXSxoPGEmJihhPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO2Q9TWF0aC5tYXgoYy1hLHUtbCksZD1kIT09MD8xL2Q6MH1yZXR1cm4gd28ocyxvLGUsYSxsLGQpLG99fTtmdW5jdGlvbiBSMChuLHQsZSxpLHIpe2xldCBzLG87aWYocj09PXJUKG4sdCxlLGkpPjApZm9yKHM9dDtzPGU7cys9aSlvPWpnKHMsbltzXSxuW3MrMV0sbyk7ZWxzZSBmb3Iocz1lLWk7cz49dDtzLT1pKW89amcocyxuW3NdLG5bcysxXSxvKTtyZXR1cm4gbyYmRGwobyxvLm5leHQpJiYoYm8obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gbGkobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgZT1uLGk7ZG8gaWYoaT0hMSwhZS5zdGVpbmVyJiYoRGwoZSxlLm5leHQpfHx0ZShlLnByZXYsZSxlLm5leHQpPT09MCkpe2lmKGJvKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfWVsc2UgZT1lLm5leHQ7d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIHdvKG4sdCxlLGkscixzLG8pe2lmKCFuKXJldHVybjshbyYmcyYmUUUobixpLHIscyk7bGV0IGE9bixsLGM7Zm9yKDtuLnByZXYhPT1uLm5leHQ7KXtpZihsPW4ucHJldixjPW4ubmV4dCxzP1dFKG4saSxyLHMpOkdFKG4pKXt0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxibyhuKSxuPWMubmV4dCxhPWMubmV4dDtjb250aW51ZX1pZihuPWMsbj09PWEpe28/bz09PTE/KG49cUUobGkobiksdCxlKSx3byhuLHQsZSxpLHIscywyKSk6bz09PTImJlhFKG4sdCxlLGkscixzKTp3byhsaShuKSx0LGUsaSxyLHMsMSk7YnJlYWt9fX1mdW5jdGlvbiBHRShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKHRlKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZih6cih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmdGUoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBXRShuLHQsZSxpKXtsZXQgcj1uLnByZXYscz1uLG89bi5uZXh0O2lmKHRlKHIscyxvKT49MClyZXR1cm4hMTtsZXQgYT1yLng8cy54P3IueDxvLng/ci54Om8ueDpzLng8by54P3MueDpvLngsbD1yLnk8cy55P3IueTxvLnk/ci55Om8ueTpzLnk8by55P3MueTpvLnksYz1yLng+cy54P3IueD5vLng/ci54Om8ueDpzLng+by54P3MueDpvLngsdT1yLnk+cy55P3IueT5vLnk/ci55Om8ueTpzLnk+by55P3MueTpvLnksaD1jaChhLGwsdCxlLGkpLGY9Y2goYyx1LHQsZSxpKSxkPW4ucHJldlosZz1uLm5leHRaO2Zvcig7ZCYmZC56Pj1oJiZnJiZnLno8PWY7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MHx8KGQ9ZC5wcmV2WixnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MCkpcmV0dXJuITE7Zz1nLm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PW4ucHJldiYmZCE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZC54LGQueSkmJnRlKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7ZyYmZy56PD1mOyl7aWYoZyE9PW4ucHJldiYmZyE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZy54LGcueSkmJnRlKGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHFFKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixzPWkubmV4dC5uZXh0OyFEbChyLHMpJiZMMChyLGksaS5uZXh0LHMpJiZNbyhyLHMpJiZNbyhzLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChzLmkvZSksYm8oaSksYm8oaS5uZXh0KSxpPW49cyksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiBsaShpKX1mdW5jdGlvbiBYRShuLHQsZSxpLHIscyl7bGV0IG89bjtkb3tsZXQgYT1vLm5leHQubmV4dDtmb3IoO2EhPT1vLnByZXY7KXtpZihvLmkhPT1hLmkmJmVUKG8sYSkpe2xldCBsPVAwKG8sYSk7bz1saShvLG8ubmV4dCksbD1saShsLGwubmV4dCksd28obyx0LGUsaSxyLHMpLHdvKGwsdCxlLGkscixzKTtyZXR1cm59YT1hLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PW4pfWZ1bmN0aW9uIFlFKG4sdCxlLGkpe2xldCByPVtdLHMsbyxhLGwsYztmb3Iocz0wLG89dC5sZW5ndGg7czxvO3MrKylhPXRbc10qaSxsPXM8by0xP3RbcysxXSppOm4ubGVuZ3RoLGM9UjAobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHRUKGMpKTtmb3Ioci5zb3J0KFpFKSxzPTA7czxyLmxlbmd0aDtzKyspSkUocltzXSxlKSxlPWxpKGUsZS5uZXh0KTtyZXR1cm4gZX1mdW5jdGlvbiBaRShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIEpFKG4sdCl7aWYodD0kRShuLHQpLHQpe2xldCBlPVAwKHQsbik7bGkodCx0Lm5leHQpLGxpKGUsZS5uZXh0KX19ZnVuY3Rpb24gJEUobix0KXtsZXQgZT10LGk9bi54LHI9bi55LHM9LTEvMCxvO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgZj1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihmPD1pJiZmPnMpe2lmKHM9ZixmPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1vPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1zKXJldHVybiBvO2xldCBhPW8sbD1vLngsYz1vLnksdT0xLzAsaDtlPW87ZG8gaT49ZS54JiZlLng+PWwmJmkhPT1lLngmJnpyKHI8Yz9pOnMscixsLGMscjxjP3M6aSxyLGUueCxlLnkpJiYoaD1NYXRoLmFicyhyLWUueSkvKGktZS54KSxNbyhlLG4pJiYoaDx1fHxoPT09dSYmKGUueD5vLnh8fGUueD09PW8ueCYmS0UobyxlKSkpJiYobz1lLHU9aCkpLGU9ZS5uZXh0O3doaWxlKGUhPT1hKTtyZXR1cm4gb31mdW5jdGlvbiBLRShuLHQpe3JldHVybiB0ZShuLnByZXYsbix0LnByZXYpPDAmJnRlKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBRRShuLHQsZSxpKXtsZXQgcj1uO2RvIHIuej09PW51bGwmJihyLno9Y2goci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0O3doaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGpFKHIpfWZ1bmN0aW9uIGpFKG4pe2xldCB0LGUsaSxyLHMsbyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLHM9bnVsbCxvPTA7ZTspe2ZvcihvKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WiwhIWkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspYSE9PTAmJihsPT09MHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSkscz9zLm5leHRaPXI6bj1yLHIucHJldlo9cyxzPXI7ZT1pfXMubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSk7cmV0dXJuIG59ZnVuY3Rpb24gY2gobix0LGUsaSxyKXtyZXR1cm4gbj0zMjc2Nyoobi1lKSpyLHQ9MzI3NjcqKHQtaSkqcixuPShufG48PDgpJjE2NzExOTM1LG49KG58bjw8NCkmMjUyNjQ1MTM1LG49KG58bjw8MikmODU4OTkzNDU5LG49KG58bjw8MSkmMTQzMTY1NTc2NSx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxufHQ8PDF9ZnVuY3Rpb24gdFQobil7bGV0IHQ9bixlPW47ZG8odC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHQ7d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIHpyKG4sdCxlLGkscixzLG8sYSl7cmV0dXJuKHItbykqKHQtYSktKG4tbykqKHMtYSk+PTAmJihuLW8pKihpLWEpLShlLW8pKih0LWEpPj0wJiYoZS1vKSoocy1hKS0oci1vKSooaS1hKT49MH1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFuVChuLHQpJiYoTW8obix0KSYmTW8odCxuKSYmaVQobix0KSYmKHRlKG4ucHJldixuLHQucHJldil8fHRlKG4sdC5wcmV2LHQpKXx8RGwobix0KSYmdGUobi5wcmV2LG4sbi5uZXh0KT4wJiZ0ZSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHRlKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRGwobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gTDAobix0LGUsaSl7bGV0IHI9WmEodGUobix0LGUpKSxzPVphKHRlKG4sdCxpKSksbz1aYSh0ZShlLGksbikpLGE9WmEodGUoZSxpLHQpKTtyZXR1cm4hIShyIT09cyYmbyE9PWF8fHI9PT0wJiZZYShuLGUsdCl8fHM9PT0wJiZZYShuLGksdCl8fG89PT0wJiZZYShlLG4saSl8fGE9PT0wJiZZYShlLHQsaSkpfWZ1bmN0aW9uIFlhKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gblQobix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJkwwKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfWZ1bmN0aW9uIE1vKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLG4ubmV4dCk8MD90ZShuLHQsbi5uZXh0KT49MCYmdGUobixuLnByZXYsdCk+PTA6dGUobix0LG4ucHJldik8MHx8dGUobixuLm5leHQsdCk8MH1mdW5jdGlvbiBpVChuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLHM9KG4ueSt0LnkpLzI7ZG8gZS55PnMhPWUubmV4dC55PnMmJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihzLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHQ7d2hpbGUoZSE9PW4pO3JldHVybiBpfWZ1bmN0aW9uIFAwKG4sdCl7bGV0IGU9bmV3IHVoKG4uaSxuLngsbi55KSxpPW5ldyB1aCh0LmksdC54LHQueSkscj1uLm5leHQscz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLHMubmV4dD1pLGkucHJldj1zLGl9ZnVuY3Rpb24gamcobix0LGUsaSl7bGV0IHI9bmV3IHVoKG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gYm8obil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiB1aChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gclQobix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IHM9dCxvPWUtaTtzPGU7cys9aSlyKz0obltvXS1uW3NdKSoobltzKzFdK25bbysxXSksbz1zO3JldHVybiByfXZhciBkbj1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxzPTA7czxlO3I9cysrKWkrPXRbcl0ueCp0W3NdLnktdFtzXS54KnRbcl0ueTtyZXR1cm4gaSouNX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIGRuLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10scz1bXTt0MCh0KSxlMChpLHQpO2xldCBvPXQubGVuZ3RoO2UuZm9yRWFjaCh0MCk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKG8pLG8rPWVbbF0ubGVuZ3RoLGUwKGksZVtsXSk7bGV0IGE9VkUudHJpYW5ndWxhdGUoaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpcy5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gc319O2Z1bmN0aW9uIHQwKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBlMChuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBjaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9bmV3IFVuKFtuZXcgSyguNSwuNSksbmV3IEsoLS41LC41KSxuZXcgSygtLjUsLS41KSxuZXcgSyguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10scz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV07byhjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShzLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXSxjPWUuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9lLmN1cnZlU2VnbWVudHM6MTIsdT1lLnN0ZXBzIT09dm9pZCAwP2Uuc3RlcHM6MSxoPWUuZGVwdGghPT12b2lkIDA/ZS5kZXB0aDoxLGY9ZS5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ZS5iZXZlbEVuYWJsZWQ6ITAsZD1lLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP2UuYmV2ZWxUaGlja25lc3M6LjIsZz1lLmJldmVsU2l6ZSE9PXZvaWQgMD9lLmJldmVsU2l6ZTpkLS4xLHg9ZS5iZXZlbE9mZnNldCE9PXZvaWQgMD9lLmJldmVsT2Zmc2V0OjAsdj1lLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ZS5iZXZlbFNlZ21lbnRzOjMsbT1lLmV4dHJ1ZGVQYXRoLHA9ZS5VVkdlbmVyYXRvciE9PXZvaWQgMD9lLlVWR2VuZXJhdG9yOnNUO2UuYW1vdW50IT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGg9ZS5hbW91bnQpO2xldCBiLF89ITEsUyxMLEEsSDttJiYoYj1tLmdldFNwYWNlZFBvaW50cyh1KSxfPSEwLGY9ITEsUz1tLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQpLGZ8fCh2PTAsZD0wLGc9MCx4PTApO2xldCB0dD1hLmV4dHJhY3RQb2ludHMoYyksWD10dC5zaGFwZSx5PXR0LmhvbGVzO2lmKCFkbi5pc0Nsb2NrV2lzZShYKSl7WD1YLnJldmVyc2UoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107ZG4uaXNDbG9ja1dpc2UoSikmJih5W0NdPUoucmV2ZXJzZSgpKX19bGV0IEQ9ZG4udHJpYW5ndWxhdGVTaGFwZShYLHkpLEY9WDtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107WD1YLmNvbmNhdChKKX1mdW5jdGlvbiB6KEMsaixKKXtyZXR1cm4ganx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxqLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoSikuYWRkKEMpfWxldCBOPVgubGVuZ3RoLFY9RC5sZW5ndGg7ZnVuY3Rpb24gUShDLGosSil7bGV0IGl0LGV0LHZ0LGJ0PUMueC1qLngsSXQ9Qy55LWoueSxadD1KLngtQy54LHF0PUoueS1DLnksRT1idCpidCtJdCpJdCx3PWJ0KnF0LUl0Klp0O2lmKE1hdGguYWJzKHcpPk51bWJlci5FUFNJTE9OKXtsZXQgcT1NYXRoLnNxcnQoRSkscnQ9TWF0aC5zcXJ0KFp0Klp0K3F0KnF0KSxndD1qLngtSXQvcSxXPWoueStidC9xLF90PUoueC1xdC9ydCx5dD1KLnkrWnQvcnQsdXQ9KChfdC1ndCkqcXQtKHl0LVcpKlp0KS8oYnQqcXQtSXQqWnQpO2l0PWd0K2J0KnV0LUMueCxldD1XK0l0KnV0LUMueTtsZXQgY3Q9aXQqaXQrZXQqZXQ7aWYoY3Q8PTIpcmV0dXJuIG5ldyBLKGl0LGV0KTt2dD1NYXRoLnNxcnQoY3QvMil9ZWxzZXtsZXQgcT0hMTtidD5OdW1iZXIuRVBTSUxPTj9adD5OdW1iZXIuRVBTSUxPTiYmKHE9ITApOmJ0PC1OdW1iZXIuRVBTSUxPTj9adDwtTnVtYmVyLkVQU0lMT04mJihxPSEwKTpNYXRoLnNpZ24oSXQpPT09TWF0aC5zaWduKHF0KSYmKHE9ITApLHE/KGl0PS1JdCxldD1idCx2dD1NYXRoLnNxcnQoRSkpOihpdD1idCxldD1JdCx2dD1NYXRoLnNxcnQoRS8yKSl9cmV0dXJuIG5ldyBLKGl0L3Z0LGV0L3Z0KX1sZXQgYXQ9W107Zm9yKGxldCBDPTAsaj1GLmxlbmd0aCxKPWotMSxpdD1DKzE7QzxqO0MrKyxKKyssaXQrKylKPT09aiYmKEo9MCksaXQ9PT1qJiYoaXQ9MCksYXRbQ109UShGW0NdLEZbSl0sRltpdF0pO2xldCBHPVtdLCQsbHQ9YXQuY29uY2F0KCk7Zm9yKGxldCBDPTAsaj15Lmxlbmd0aDtDPGo7QysrKXtsZXQgSj15W0NdOyQ9W107Zm9yKGxldCBpdD0wLGV0PUoubGVuZ3RoLHZ0PWV0LTEsYnQ9aXQrMTtpdDxldDtpdCsrLHZ0KyssYnQrKyl2dD09PWV0JiYodnQ9MCksYnQ9PT1ldCYmKGJ0PTApLCRbaXRdPVEoSltpdF0sSlt2dF0sSltidF0pO0cucHVzaCgkKSxsdD1sdC5jb25jYXQoJCl9Zm9yKGxldCBDPTA7Qzx2O0MrKyl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksLUopfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7bXQocXQueCxxdC55LC1KKX19fWxldCBkdD1nK3g7Zm9yKGxldCBDPTA7QzxOO0MrKyl7bGV0IGo9Zj96KFhbQ10sbHRbQ10sZHQpOlhbQ107Xz8oQS5jb3B5KFMubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai54KSxMLmNvcHkoUy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGoueSksSC5jb3B5KGJbMF0pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChqLngsai55LDApfWZvcihsZXQgQz0xO0M8PXU7QysrKWZvcihsZXQgaj0wO2o8TjtqKyspe2xldCBKPWY/eihYW2pdLGx0W2pdLGR0KTpYW2pdO18/KEEuY29weShTLm5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueCksTC5jb3B5KFMuYmlub3JtYWxzW0NdKS5tdWx0aXBseVNjYWxhcihKLnkpLEguY29weShiW0NdKS5hZGQoQSkuYWRkKEwpLG10KEgueCxILnksSC56KSk6bXQoSi54LEoueSxoL3UqQyl9Zm9yKGxldCBDPXYtMTtDPj0wO0MtLSl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksaCtKKX1mb3IobGV0IGV0PTAsdnQ9eS5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXlbZXRdOyQ9R1tldF07Zm9yKGxldCBJdD0wLFp0PWJ0Lmxlbmd0aDtJdDxadDtJdCsrKXtsZXQgcXQ9eihidFtJdF0sJFtJdF0saXQpO18/bXQocXQueCxxdC55K2JbdS0xXS55LGJbdS0xXS54K0opOm10KHF0LngscXQueSxoK0opfX19eHQoKSxrKCk7ZnVuY3Rpb24geHQoKXtsZXQgQz1yLmxlbmd0aC8zO2lmKGYpe2xldCBqPTAsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzJdK0osZXRbMV0rSixldFswXStKKX1qPXUrdioyLEo9TipqO2ZvcihsZXQgaXQ9MDtpdDxWO2l0Kyspe2xldCBldD1EW2l0XTtTdChldFswXStKLGV0WzFdK0osZXRbMl0rSil9fWVsc2V7Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzJdLEpbMV0sSlswXSl9Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzBdK04qdSxKWzFdK04qdSxKWzJdK04qdSl9fWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMCl9ZnVuY3Rpb24gaygpe2xldCBDPXIubGVuZ3RoLzMsaj0wO0Z0KEYsaiksais9Ri5sZW5ndGg7Zm9yKGxldCBKPTAsaXQ9eS5sZW5ndGg7SjxpdDtKKyspe2xldCBldD15W0pdO0Z0KGV0LGopLGorPWV0Lmxlbmd0aH1pLmFkZEdyb3VwKEMsci5sZW5ndGgvMy1DLDEpfWZ1bmN0aW9uIEZ0KEMsail7bGV0IEo9Qy5sZW5ndGg7Zm9yKDstLUo+PTA7KXtsZXQgaXQ9SixldD1KLTE7ZXQ8MCYmKGV0PUMubGVuZ3RoLTEpO2ZvcihsZXQgdnQ9MCxidD11K3YqMjt2dDxidDt2dCsrKXtsZXQgSXQ9Tip2dCxadD1OKih2dCsxKSxxdD1qK2l0K0l0LEU9aitldCtJdCx3PWorZXQrWnQscT1qK2l0K1p0O0IocXQsRSx3LHEpfX19ZnVuY3Rpb24gbXQoQyxqLEope2wucHVzaChDKSxsLnB1c2goaiksbC5wdXNoKEopfWZ1bmN0aW9uIFN0KEMsaixKKXtzdChDKSxzdChqKSxzdChKKTtsZXQgaXQ9ci5sZW5ndGgvMyxldD1wLmdlbmVyYXRlVG9wVVYoaSxyLGl0LTMsaXQtMixpdC0xKTtudChldFswXSksbnQoZXRbMV0pLG50KGV0WzJdKX1mdW5jdGlvbiBCKEMsaixKLGl0KXtzdChDKSxzdChqKSxzdChpdCksc3Qoaiksc3QoSiksc3QoaXQpO2xldCBldD1yLmxlbmd0aC8zLHZ0PXAuZ2VuZXJhdGVTaWRlV2FsbFVWKGkscixldC02LGV0LTMsZXQtMixldC0xKTtudCh2dFswXSksbnQodnRbMV0pLG50KHZ0WzNdKSxudCh2dFsxXSksbnQodnRbMl0pLG50KHZ0WzNdKX1mdW5jdGlvbiBzdChDKXtyLnB1c2gobFtDKjMrMF0pLHIucHVzaChsW0MqMysxXSksci5wdXNoKGxbQyozKzJdKX1mdW5jdGlvbiBudChDKXtzLnB1c2goQy54KSxzLnB1c2goQy55KX19fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxpPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO3JldHVybiBvVChlLGksdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBzPTAsbz10LnNoYXBlcy5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVt0LnNoYXBlc1tzXV07aS5wdXNoKGEpfWxldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gciE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKSxuZXcgY2koaSx0Lm9wdGlvbnMpfX0sc1Q9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10W2UqM10sbz10W2UqMysxXSxhPXRbaSozXSxsPXRbaSozKzFdLGM9dFtyKjNdLHU9dFtyKjMrMV07cmV0dXJuW25ldyBLKHMsbyksbmV3IEsoYSxsKSxuZXcgSyhjLHUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixzKXtsZXQgbz10W2UqM10sYT10W2UqMysxXSxsPXRbZSozKzJdLGM9dFtpKjNdLHU9dFtpKjMrMV0saD10W2kqMysyXSxmPXRbciozXSxkPXRbciozKzFdLGc9dFtyKjMrMl0seD10W3MqM10sdj10W3MqMysxXSxtPXRbcyozKzJdO3JldHVybiBNYXRoLmFicyhhLXUpPE1hdGguYWJzKG8tYyk/W25ldyBLKG8sMS1sKSxuZXcgSyhjLDEtaCksbmV3IEsoZiwxLWcpLG5ldyBLKHgsMS1tKV06W25ldyBLKGEsMS1sKSxuZXcgSyh1LDEtaCksbmV3IEsoZCwxLWcpLG5ldyBLKHYsMS1tKV19fTtmdW5jdGlvbiBvVChuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe2xldCBzPW5baV07ZS5zaGFwZXMucHVzaChzLnV1aWQpfWVsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0LmV4dHJ1ZGVQYXRoIT09dm9pZCAwJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9dmFyIHFpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKDAsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10scz1bXSxvPVtdLGE9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAoYSxsLHUpLGErPWwsbD0wO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKG8sMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9ci5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhlKSxkPWYuc2hhcGUsZz1mLmhvbGVzO2RuLmlzQ2xvY2tXaXNlKGQpPT09ITEmJihkPWQucmV2ZXJzZSgpKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZG4uaXNDbG9ja1dpc2UocCk9PT0hMCYmKGdbdl09cC5yZXZlcnNlKCkpfWxldCB4PWRuLnRyaWFuZ3VsYXRlU2hhcGUoZCxnKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZD1kLmNvbmNhdChwKX1mb3IobGV0IHY9MCxtPWQubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWRbdl07ci5wdXNoKHAueCxwLnksMCkscy5wdXNoKDAsMCwxKSxvLnB1c2gocC54LHAueSl9Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXtsZXQgcD14W3ZdLGI9cFswXStoLF89cFsxXStoLFM9cFsyXStoO2kucHVzaChiLF8sUyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYVQoZSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxzPXQuc2hhcGVzLmxlbmd0aDtyPHM7cisrKXtsZXQgbz1lW3Quc2hhcGVzW3JdXTtpLnB1c2gobyl9cmV0dXJuIG5ldyBxaShpLHQuY3VydmVTZWdtZW50cyl9fTtmdW5jdGlvbiBhVChuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj1uW2VdO3Quc2hhcGVzLnB1c2goci51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH12YXIgaGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O2hoLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciB2bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBmdCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMucm91Z2huZXNzTWFwPW51bGwsdGhpcy5tZXRhbG5lc3NNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmVudk1hcEludGVuc2l0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3ZsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPSEwO3ZhciBmaD1jbGFzcyBleHRlbmRzIHZse2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWUoMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaW9yPSgxKy40KmUpLygxLS40KmUpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgZnQoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IGZ0KDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O2ZoLnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBkaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGZ0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtkaC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgcGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BoLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7dmFyIG1oPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O21oLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgZ2g9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtnaC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4aD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3hoLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgeWg9Y2xhc3MgZXh0ZW5kcyB6bntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt5aC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIEt0PXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gS3QuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCxlIT09dm9pZCAwP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOnR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UPT0ibnVtYmVyIj9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHIscyl7cmV0dXJuIG5bcl0tbltzXX1sZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQodCksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBzPTAsbz0wO28hPT1pOysrcyl7bGV0IGE9ZVtzXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW28rK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLHM9blswXTtmb3IoO3MhPT12b2lkIDAmJnNbaV09PT12b2lkIDA7KXM9bltyKytdO2lmKHM9PT12b2lkIDApcmV0dXJuO2xldCBvPXNbaV07aWYobyE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KG8pKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoLmFwcGx5KGUsbykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgaWYoby50b0FycmF5IT09dm9pZCAwKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksby50b0FycmF5KGUsZS5sZW5ndGgpKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKTtlbHNlIGRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoKG8pKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBzPW4uY2xvbmUoKTtzLm5hbWU9dDtsZXQgbz1bXTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPXMudHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxoPVtdLGY9W107Zm9yKGxldCBkPTA7ZDxjLnRpbWVzLmxlbmd0aDsrK2Qpe2xldCBnPWMudGltZXNbZF0qcjtpZighKGc8ZXx8Zz49aSkpe2gucHVzaChjLnRpbWVzW2RdKTtmb3IobGV0IHg9MDt4PHU7Kyt4KWYucHVzaChjLnZhbHVlc1tkKnUreF0pfX1oLmxlbmd0aCE9PTAmJihjLnRpbWVzPUt0LmNvbnZlcnRBcnJheShoLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUt0LmNvbnZlcnRBcnJheShmLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxvLnB1c2goYykpfXMudHJhY2tzPW87bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbClhPnMudHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1zLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKXMudHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBzLnJlc2V0RHVyYXRpb24oKSxzfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLHM9dC9pO2ZvcihsZXQgbz0wO288cjsrK28pe2xldCBhPWUudHJhY2tzW29dLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKGw9PT0iYm9vbCJ8fGw9PT0ic3RyaW5nIiljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT1hLm5hbWUmJm0uVmFsdWVUeXBlTmFtZT09PWx9KTtpZihjPT09dm9pZCAwKWNvbnRpbnVlO2xldCB1PTAsaD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWgvMyk7bGV0IGY9MCxkPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGY9ZC8zKTtsZXQgZz1hLnRpbWVzLmxlbmd0aC0xLHg7aWYoczw9YS50aW1lc1swXSl7bGV0IG09dSxwPWgtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNlIGlmKHM+PWEudGltZXNbZ10pe2xldCBtPWcqaCt1LHA9bStoLXU7eD1LdC5hcnJheVNsaWNlKGEudmFsdWVzLG0scCl9ZWxzZXtsZXQgbT1hLmNyZWF0ZUludGVycG9sYW50KCkscD11LGI9aC11O20uZXZhbHVhdGUocykseD1LdC5hcnJheVNsaWNlKG0ucmVzdWx0QnVmZmVyLHAsYil9bD09PSJxdWF0ZXJuaW9uIiYmbmV3IEVlKCkuZnJvbUFycmF5KHgpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoeCk7bGV0IHY9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBtPTA7bTx2OysrbSl7bGV0IHA9bSpkK2Y7aWYobD09PSJxdWF0ZXJuaW9uIilFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyxwLHgsMCxjLnZhbHVlcyxwKTtlbHNle2xldCBiPWQtZioyO2ZvcihsZXQgXz0wO188YjsrK18pYy52YWx1ZXNbcCtfXS09eFtfXX19fXJldHVybiBuLmJsZW5kTW9kZT1kMCxufX0scG49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXIhPT12b2lkIDA/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxzPWVbaS0xXTt0OntlOntsZXQgbztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZihyPT09dm9pZCAwKXtpZih0PHMpYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LHMpfWlmKGk9PT1hKWJyZWFrO2lmKHM9cixyPWVbKytpXSx0PHIpYnJlYWsgZX1vPWUubGVuZ3RoO2JyZWFrIG59aWYoISh0Pj1zKSl7bGV0IGE9ZVsxXTt0PGEmJihpPTIscz1hKTtmb3IobGV0IGw9aS0yOzspe2lmKHM9PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKGk9PT1sKWJyZWFrO2lmKHI9cyxzPWVbLS1pLTFdLHQ+PXMpYnJlYWsgZX1vPWksaT0wO2JyZWFrIG59YnJlYWsgdH1mb3IoO2k8bzspe2xldCBhPWkrbz4+PjE7dDxlW2FdP289YTppPWErMX1pZihyPWVbaV0scz1lW2ktMV0scz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYocj09PXZvaWQgMClyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSxzLHQpfXRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5pbnRlcnZhbENoYW5nZWRfKGkscyxyKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaSxzLHQscil9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCBlPXRoaXMucmVzdWx0QnVmZmVyLGk9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPXQqcjtmb3IobGV0IG89MDtvIT09cjsrK28pZVtvXT1pW3Mrb107cmV0dXJuIGV9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtwbi5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPXBuLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3BuLnByb3RvdHlwZS5hZnRlckVuZF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHZoPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGksciksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0Ok5yLGVuZGluZ0VuZDpOcn19aW50ZXJ2YWxDaGFuZ2VkXyh0LGUsaSl7bGV0IHI9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMscz10LTIsbz10KzEsYT1yW3NdLGw9cltvXTtpZihhPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIEZyOnM9dCxhPTIqZS1pO2JyZWFrO2Nhc2UgZWw6cz1yLmxlbmd0aC0yLGE9ZStyW3NdLXJbcysxXTticmVhaztkZWZhdWx0OnM9dCxhPWl9aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgRnI6bz10LGw9MippLWU7YnJlYWs7Y2FzZSBlbDpvPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0Om89dC0xLGw9ZX1sZXQgYz0oaS1lKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1zKnUsdGhpcy5fb2Zmc2V0TmV4dD1vKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixkPXRoaXMuX3dlaWdodE5leHQsZz0oaS1lKS8oci1lKSx4PWcqZyx2PXgqZyxtPS1mKnYrMipmKngtZipnLHA9KDErZikqdisoLTEuNS0yKmYpKngrKC0uNStmKSpnKzEsYj0oLTEtZCkqdisoMS41K2QpKngrLjUqZyxfPWQqdi1kKng7Zm9yKGxldCBTPTA7UyE9PWE7KytTKXNbU109bSpvW3UrU10rcCpvW2MrU10rYipvW2wrU10rXypvW2grU107cmV0dXJuIHN9fSxfbD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09YTsrK2Ypc1tmXT1vW2MrZl0qaCtvW2wrZl0qdTtyZXR1cm4gc319LF9oPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LFhlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9S3QuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9S3QuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBlPXQuY29uc3RydWN0b3IsaTtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpLdC5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOkt0LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBfaCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgX2wodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHZoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIGphOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIHRsOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBldTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKGU9PT12b2lkIDApe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGkpO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixpKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gamE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gdGw7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZXV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKj10fXJldHVybiB0aGlzfXRyaW0odCxlKXtsZXQgaT10aGlzLnRpbWVzLHI9aS5sZW5ndGgscz0wLG89ci0xO2Zvcig7cyE9PXImJmlbc108dDspKytzO2Zvcig7byE9PS0xJiZpW29dPmU7KS0tbztpZigrK28scyE9PTB8fG8hPT1yKXtzPj1vJiYobz1NYXRoLm1heChvLDEpLHM9by0xKTtsZXQgYT10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9S3QuYXJyYXlTbGljZShpLHMsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxzKmEsbyphKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLGU9dGhpcy5nZXRWYWx1ZVNpemUoKTtlLU1hdGguZmxvb3IoZSkhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLHM9aS5sZW5ndGg7cz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBhPTA7YSE9PXM7YSsrKXtsZXQgbD1pW2FdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobyE9PW51bGwmJm8+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxvKSx0PSExO2JyZWFrfW89bH1pZihyIT09dm9pZCAwJiZLdC5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PUt0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj10aGlzLmdldEludGVycG9sYXRpb24oKT09PWV1LHM9dC5sZW5ndGgtMSxvPTE7Zm9yKGxldCBhPTE7YTxzOysrYSl7bGV0IGw9ITEsYz10W2FdLHU9dFthKzFdO2lmKGMhPT11JiYoYSE9PTF8fGMhPT10WzBdKSlpZihyKWw9ITA7ZWxzZXtsZXQgaD1hKmksZj1oLWksZD1oK2k7Zm9yKGxldCBnPTA7ZyE9PWk7KytnKXtsZXQgeD1lW2grZ107aWYoeCE9PWVbZitnXXx8eCE9PWVbZCtnXSl7bD0hMDticmVha319fWlmKGwpe2lmKGEhPT1vKXt0W29dPXRbYV07bGV0IGg9YSppLGY9byppO2ZvcihsZXQgZD0wO2QhPT1pOysrZCllW2YrZF09ZVtoK2RdfSsrb319aWYocz4wKXt0W29dPXRbc107Zm9yKGxldCBhPXMqaSxsPW8qaSxjPTA7YyE9PWk7KytjKWVbbCtjXT1lW2ErY107KytvfXJldHVybiBvIT09dC5sZW5ndGg/KHRoaXMudGltZXM9S3QuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZShlLDAsbyppKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxpPXRoaXMuY29uc3RydWN0b3Iscj1uZXcgaSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtYZS5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj10bDt2YXIgdWk9Y2xhc3MgZXh0ZW5kcyBYZXt9O3VpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjt1aS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3VpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgd2w9Y2xhc3MgZXh0ZW5kcyBYZXt9O3dsLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIEtyPWNsYXNzIGV4dGVuZHMgWGV7fTtLci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgd2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9KGktZSkvKHItZSksYz10KmE7Zm9yKGxldCB1PWMrYTtjIT09dTtjKz00KUVlLnNsZXJwRmxhdChzLDAsbyxjLWEsbyxjLGwpO3JldHVybiBzfX0sWGk9Y2xhc3MgZXh0ZW5kcyBYZXtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyB3aCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WGkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO1hpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBoaT1jbGFzcyBleHRlbmRzIFhle307aGkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7aGkucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtoaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249amE7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIFFyPWNsYXNzIGV4dGVuZHMgWGV7fTtRci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgTWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj1RaCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9aSx0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9cix0aGlzLnV1aWQ9dG4oKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgZT1bXSxpPXQudHJhY2tzLHI9MS8odC5mcHN8fDEpO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChjVChpW29dKS5zY2FsZShyKSk7bGV0IHM9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIHMudXVpZD10LnV1aWQsc31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgcz0wLG89aS5sZW5ndGg7cyE9PW87KytzKWUucHVzaChYZS50b0pTT04oaVtzXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgcz1lLmxlbmd0aCxvPVtdO2ZvcihsZXQgYT0wO2E8czthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK3MtMSklcyxhLChhKzEpJXMpLGMucHVzaCgwLDEsMCk7bGV0IHU9S3QuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUt0LnNvcnRlZEFycmF5KGwsMSx1KSxjPUt0LnNvcnRlZEFycmF5KGMsMSx1KSwhciYmbFswXT09PTAmJihsLnB1c2gocyksYy5wdXNoKGNbMF0pKSxvLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLG8pfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxzPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChzKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9cltoXTtmfHwocltoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBvPVtdO2ZvcihsZXQgYSBpbiByKW8ucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gb31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGgsZixkLGcseCl7aWYoZC5sZW5ndGghPT0wKXtsZXQgdj1bXSxtPVtdO0t0LmZsYXR0ZW5KU09OKGQsdixtLGcpLHYubGVuZ3RoIT09MCYmeC5wdXNoKG5ldyBoKGYsdixtKSl9fSxyPVtdLHM9dC5uYW1lfHwiZGVmYXVsdCIsbz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBkPXt9LGc7Zm9yKGc9MDtnPGYubGVuZ3RoO2crKylpZihmW2ddLm1vcnBoVGFyZ2V0cylmb3IobGV0IHg9MDt4PGZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDt4KyspZFtmW2ddLm1vcnBoVGFyZ2V0c1t4XV09LTE7Zm9yKGxldCB4IGluIGQpe2xldCB2PVtdLG09W107Zm9yKGxldCBwPTA7cCE9PWZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3Ape2xldCBiPWZbZ107di5wdXNoKGIudGltZSksbS5wdXNoKGIubW9ycGhUYXJnZXQ9PT14PzE6MCl9ci5wdXNoKG5ldyBLcigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIreCsiXSIsdixtKSl9bD1kLmxlbmd0aCoob3x8MSl9ZWxzZXtsZXQgZD0iLmJvbmVzWyIrZVtoXS5uYW1lKyJdIjtpKFFyLGQrIi5wb3NpdGlvbiIsZiwicG9zIixyKSxpKFhpLGQrIi5xdWF0ZXJuaW9uIixmLCJyb3QiLHIpLGkoUXIsZCsiLnNjYWxlIixmLCJzY2wiLHIpfX1yZXR1cm4gci5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMocyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLGU9MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLHMudGltZXNbcy50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGxUKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEtyO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gUXI7Y2FzZSJjb2xvciI6cmV0dXJuIHdsO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFhpO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdWk7Y2FzZSJzdHJpbmciOnJldHVybiBoaX10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfWZ1bmN0aW9uIGNUKG4pe2lmKG4udHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9bFQobi50eXBlKTtpZihuLnRpbWVzPT09dm9pZCAwKXtsZXQgZT1bXSxpPVtdO0t0LmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciBqcj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxNaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9dGhpcyxzPSExLG89MCxhPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXthKysscz09PSExJiZyLm9uU3RhcnQhPT12b2lkIDAmJnIub25TdGFydCh1LG8sYSkscz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe28rKyxyLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJnIub25Qcm9ncmVzcyh1LG8sYSksbz09PWEmJihzPSExLHIub25Mb2FkIT09dm9pZCAwJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7ci5vbkVycm9yIT09dm9pZCAwJiZyLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgZD1jW2hdLGc9Y1toKzFdO2lmKGQuZ2xvYmFsJiYoZC5sYXN0SW5kZXg9MCksZC50ZXN0KHUpKXJldHVybiBnfXJldHVybiBudWxsfX19LHVUPW5ldyBNaCxtbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dCE9PXZvaWQgMD90OnVULHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIscyl7aS5sb2FkKHQscixlLHMpfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LERuPXt9LGJoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz1qci5nZXQodCk7aWYocyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShzKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCkscztpZihEblt0XSE9PXZvaWQgMCl7RG5bdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO3JldHVybn1Eblt0XT1bXSxEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IG89bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gobykudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1Eblt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mP3BhcnNlSW50KGYpOjAsZz1kIT09MCx4PTAsdj1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KG0pe3AoKTtmdW5jdGlvbiBwKCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpffSk9PntpZihiKW0uY2xvc2UoKTtlbHNle3grPV8uYnl0ZUxlbmd0aDtsZXQgUz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmcsbG9hZGVkOngsdG90YWw6ZH0pO2ZvcihsZXQgTD0wLEE9dS5sZW5ndGg7TDxBO0wrKyl7bGV0IEg9dVtMXTtILm9uUHJvZ3Jlc3MmJkgub25Qcm9ncmVzcyhTKX1tLmVucXVldWUoXykscCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKHYpfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxhKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihhPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKGEpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLGQ9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihnPT5kLmRlY29kZShnKSl9fX0pLnRoZW4oYz0+e2pyLmFkZCh0LGMpO2xldCB1PURuW3RdO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkxvYWQmJmQub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1Eblt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgRG5bdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgZD11W2hdO2Qub25FcnJvciYmZC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319O3ZhciBibD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9cm8oImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksanIuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxyJiZyKGgpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHMubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sU2g9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBXcixvPW5ldyBibCh0aGlzLm1hbmFnZXIpO28uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe28ubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe3MuaW1hZ2VzW2NdPXUsYSsrLGE9PT02JiYocy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHMpKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIHN9fTt2YXIgRWg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBhZSxvPW5ldyBibCh0aGlzLm1hbmFnZXIpO3JldHVybiBvLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLG8uc2V0UGF0aCh0aGlzLnBhdGgpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3MuaW1hZ2U9YSxzLm5lZWRzVXBkYXRlPSEwLGUhPT12b2lkIDAmJmUocyl9LGksciksc319LFllPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O1llLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBUaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGkpLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IGZ0KGUpfWNvcHkodCl7cmV0dXJuIFllLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O1RoLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbjA9bmV3IHd0LGkwPW5ldyBULHIwPW5ldyBULFNvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBLKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHd0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHFyLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSygxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O2kwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxlLnBvc2l0aW9uLmNvcHkoaTApLHIwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQocjApLGUudXBkYXRlTWF0cml4V29ybGQoKSxuMC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuMCksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIHRoaXMuYmlhcyE9PTAmJih0LmJpYXM9dGhpcy5iaWFzKSx0aGlzLm5vcm1hbEJpYXMhPT0wJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksdGhpcy5yYWRpdXMhPT0xJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCh0aGlzLm1hcFNpemUueCE9PTUxMnx8dGhpcy5tYXBTaXplLnkhPT01MTIpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFNsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT1WdSoyKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LHM9dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxzIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPXMsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtTbC5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITA7dmFyIEFoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPU1hdGguUEkvMyxzPTAsbz0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLmRpc3RhbmNlPWksdGhpcy5hbmdsZT1yLHRoaXMucGVudW1icmE9cyx0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IFNsfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10L01hdGguUEl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmFuZ2xlPXQuYW5nbGUsdGhpcy5wZW51bWJyYT10LnBlbnVtYnJhLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0FoLnByb3RvdHlwZS5pc1Nwb3RMaWdodD0hMDt2YXIgczA9bmV3IHd0LFpzPW5ldyBULE51PW5ldyBULEVsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEsoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgV3QoMiwxLDEsMSksbmV3IFd0KDAsMSwxLDEpLG5ldyBXdCgzLDEsMSwxKSxuZXcgV3QoMSwxLDEsMSksbmV3IFd0KDMsMCwxLDEpLG5ldyBXdCgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyBUKDEsMCwwKSxuZXcgVCgtMSwwLDApLG5ldyBUKDAsMCwxKSxuZXcgVCgwLDAsLTEpLG5ldyBUKDAsMSwwKSxuZXcgVCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LHM9dC5kaXN0YW5jZXx8aS5mYXI7cyE9PWkuZmFyJiYoaS5mYXI9cyxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksWnMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShacyksTnUuY29weShpLnBvc2l0aW9uKSxOdS5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChOdSksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1acy54LC1acy55LC1acy56KSxzMC5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzMCl9fTtFbC5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBDaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRWx9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtDaC5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBUbD1jbGFzcyBleHRlbmRzIFNve2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFZpKC01LDUsNSwtNSwuNSw1MDApKX19O1RsLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIFJoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGt0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcga3QsdGhpcy5zaGFkb3c9bmV3IFRsfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O1JoLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIExoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0xoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgUGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fTtQaC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBBbD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgVCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwuNDg4NjAzKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bM10sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDEuMDkyNTQ4KihpKnIpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDEuMDkyNTQ4KihyKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzZdLC4zMTUzOTIqKDMqcypzLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDEuMDkyNTQ4KihpKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC41NDYyNzQqKGkqaS1yKnIpKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkob1swXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksZS5hZGRTY2FsZWRWZWN0b3Iob1sxXSwyKi41MTE2NjQqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwyKi41MTE2NjQqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwyKi41MTE2NjQqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1s0XSwyKi40MjkwNDMqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDIqLjQyOTA0MypyKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpzKnMtLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwyKi40MjkwNDMqaSpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC40MjkwNDMqKGkqaS1yKnIpKSxlfWFkZCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmFkZCh0LmNvZWZmaWNpZW50c1tlXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmxlcnAodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW2VdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tlXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlK3IqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlK3IqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypzLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipzLGVbNl09LjMxNTM5MiooMypzKnMtMSksZVs3XT0xLjA5MjU0OCppKnMsZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0FsLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIEVvPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodD1uZXcgQWwsZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O0VvLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIERoPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoKGkpe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBlPT09LTE/Ii4vIjp0LnN1YnN0cigwLGUrMSl9c3RhdGljIHJlc29sdmVVUkwodCxlKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fSxJaD1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtJaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9e307YS5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKHMub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtqci5hZGQodCxsKSxlJiZlKGwpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkscy5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05oLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKYSxoVD17Z2V0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBKYT09PXZvaWQgMCYmKEphPW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksSmF9LHNldENvbnRleHQ6ZnVuY3Rpb24obil7SmE9bn19LEZoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgcz10aGlzLG89bmV3IGJoKHRoaXMubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3RyeXtsZXQgbD1hLnNsaWNlKDApO2hULmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fSx6aD1jbGFzcyBleHRlbmRzIEVve2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHZvaWQgMCxpKTtsZXQgcj1uZXcgZnQoKS5zZXQodCkscz1uZXcgZnQoKS5zZXQoZSksbz1uZXcgVChyLnIsci5nLHIuYiksYT1uZXcgVChzLnIscy5nLHMuYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkobykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkobykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX07emgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIFVoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT1uZXcgZnQoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtVaC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCBlPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gZS5idWZmZXI9dGhpcy5idWZmZXIsZS5sb29wPXRoaXMubG9vcCxlLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxlLmxvb3BFbmQ9dGhpcy5sb29wRW5kLGUub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxlLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1lLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX07dmFyIE9oPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1lLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdCs9ZVtpXTtyZXR1cm4gdC9lLmxlbmd0aH19LGtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pO2xldCByLHMsbztzd2l0Y2goZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLHM9dGhpcy5fc2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoaSo1KTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxzPXRoaXMuX2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo1KX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1zLHRoaXMuX3NldElkZW50aXR5PW8sdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUscz10KnIrcixvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihvPT09MCl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbcythXT1pW2FdO289ZX1lbHNle28rPWU7bGV0IGE9ZS9vO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHMsMCxhLHIpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1vfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Uscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsbz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHM8MSl7bGV0IGw9ZSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixsLDEtcyxlKX1vPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcsZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgcz1pLG89cjtzIT09bzsrK3MpZVtzXT1lW3IrcyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixzKXtpZihyPj0uNSlmb3IobGV0IG89MDtvIT09czsrK28pdFtlK29dPXRbaStvXX1fc2xlcnAodCxlLGkscil7RWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7bGV0IG89dGhpcy5fd29ya0luZGV4KnM7RWUubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxvLHQsZSx0LGkpLEVlLnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxyKX1fbGVycCh0LGUsaSxyLHMpe2xldCBvPTEtcjtmb3IobGV0IGE9MDthIT09czsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qbyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLHMpe2ZvcihsZXQgbz0wO28hPT1zOysrbyl7bGV0IGE9ZStvO3RbYV09dFthXSt0W2krb10qcn19fSxlZj0iXFxbXFxdXFwuOlxcLyIsZlQ9bmV3IFJlZ0V4cCgiWyIrZWYrIl0iLCJnIiksbmY9IlteIitlZisiXSIsZFQ9IlteIitlZi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIscFQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixuZiksbVQ9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsZFQpLGdUPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSx4VD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHlUPW5ldyBSZWdFeHAoIl4iK3BUK21UK2dUK3hUKyIkIiksdlQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sSGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj10aGlzLl9iaW5kaW5nc1tpXTtyIT09dm9pZCAwJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxOdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpLHRoaXMubm9kZT1OdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10LHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIHQmJnQuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgTnQuQ29tcG9zaXRlKHQsZSxpKTpuZXcgTnQodCxlLGkpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKGZULCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IGU9eVQuZXhlYyh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgaT17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LHI9aS5ub2RlTmFtZSYmaS5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHIhPT12b2lkIDAmJnIhPT0tMSl7bGV0IHM9aS5ub2RlTmFtZS5zdWJzdHJpbmcocisxKTt2VC5pbmRleE9mKHMpIT09LTEmJihpLm5vZGVOYW1lPWkubm9kZU5hbWUuc3Vic3RyaW5nKDAsciksaS5vYmplY3ROYW1lPXMpfWlmKGkucHJvcGVydHlOYW1lPT09bnVsbHx8aS5wcm9wZXJ0eU5hbWUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIGl9c3RhdGljIGZpbmROb2RlKHQsZSl7aWYoIWV8fGU9PT0iInx8ZT09PSIuInx8ZT09PS0xfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2xldCBpPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZihpIT09dm9pZCAwKXJldHVybiBpfWlmKHQuY2hpbGRyZW4pe2xldCBpPWZ1bmN0aW9uKHMpe2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtsZXQgYT1zW29dO2lmKGEubmFtZT09PWV8fGEudXVpZD09PWUpcmV0dXJuIGE7bGV0IGw9aShhLmNoaWxkcmVuKTtpZihsKXJldHVybiBsfXJldHVybiBudWxsfSxyPWkodC5jaGlsZHJlbik7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QodCxlKXt0W2VdPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpdFtlKytdPWlbcl19X2dldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RbZV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheSh0LGUpfV9zZXRWYWx1ZV9kaXJlY3QodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUodCxlKX1fc2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGk9ZS5vYmplY3ROYW1lLHI9ZS5wcm9wZXJ0eU5hbWUscz1lLnByb3BlcnR5SW5kZXg7aWYodHx8KHQ9TnQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtyZXR1cm59aWYoaSl7bGV0IGM9ZS5vYmplY3RJbmRleDtzd2l0Y2goaSl7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO3JldHVybn1pZighdC5tYXRlcmlhbC5tYXRlcmlhbHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtyZXR1cm59dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtyZXR1cm59dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0ubmFtZT09PWMpe2M9dTticmVha31icmVhaztkZWZhdWx0OmlmKHRbaV09PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtyZXR1cm59dD10W2ldfWlmKGMhPT12b2lkIDApe2lmKHRbY109PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7cmV0dXJufXQ9dFtjXX19bGV0IG89dFtyXTtpZihvPT09dm9pZCAwKXtsZXQgYz1lLm5vZGVOYW1lO2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrYysiLiIrcisiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIix0KTtyZXR1cm59bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx0Lm5lZWRzVXBkYXRlIT09dm9pZCAwP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnQubWF0cml4V29ybGROZWVkc1VwZGF0ZSE9PXZvaWQgMCYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBsPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHMhPT12b2lkIDApe2lmKHI9PT0ibW9ycGhUYXJnZXRJbmZsdWVuY2VzIil7aWYoIXQuZ2VvbWV0cnkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7cmV0dXJufWlmKHQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTtyZXR1cm59dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10hPT12b2lkIDAmJihzPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1lbHNle2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtyZXR1cm59fWw9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8sdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSBvLmZyb21BcnJheSE9PXZvaWQgMCYmby50b0FycmF5IT09dm9pZCAwPyhsPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOkFycmF5LmlzQXJyYXkobyk/KGw9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6dGhpcy5wcm9wZXJ0eU5hbWU9cjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtsXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbbF1bYV19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19O050LkNvbXBvc2l0ZT1IaDtOdC5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307TnQucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07TnQucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W050LnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtOdC5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIFZoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPXRuKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgaT0wLHI9YXJndW1lbnRzLmxlbmd0aDtpIT09cjsrK2kpdFthcmd1bWVudHNbaV0udXVpZF09aTt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX2JpbmRpbmdzLG89cy5sZW5ndGgsYSxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLGQ9Zi51dWlkLGc9ZVtkXTtpZihnPT09dm9pZCAwKXtnPWwrKyxlW2RdPWcsdC5wdXNoKGYpO2ZvcihsZXQgeD0wLHY9bzt4IT09djsrK3gpc1t4XS5wdXNoKG5ldyBOdChmLGlbeF0sclt4XSkpfWVsc2UgaWYoZzxjKXthPXRbZ107bGV0IHg9LS1jLHY9dFt4XTtlW3YudXVpZF09Zyx0W2ddPXYsZVtkXT14LHRbeF09Zjtmb3IobGV0IG09MCxwPW87bSE9PXA7KyttKXtsZXQgYj1zW21dLF89Ylt4XSxTPWJbZ107YltnXT1fLFM9PT12b2lkIDAmJihTPW5ldyBOdChmLGlbbV0sclttXSkpLGJbeF09U319ZWxzZSB0W2ddIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgbz0wLGE9YXJndW1lbnRzLmxlbmd0aDtvIT09YTsrK28pe2xldCBsPWFyZ3VtZW50c1tvXSxjPWwudXVpZCx1PWVbY107aWYodSE9PXZvaWQgMCYmdT49cyl7bGV0IGg9cysrLGY9dFtoXTtlW2YudXVpZF09dSx0W3VdPWYsZVtjXT1oLHRbaF09bDtmb3IobGV0IGQ9MCxnPXI7ZCE9PWc7KytkKXtsZXQgeD1pW2RdLHY9eFtoXSxtPXhbdV07eFt1XT12LHhbaF09bX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfLG89dC5sZW5ndGg7Zm9yKGxldCBhPTAsbD1hcmd1bWVudHMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9YXJndW1lbnRzW2FdLHU9Yy51dWlkLGg9ZVt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSBlW3VdLGg8cyl7bGV0IGY9LS1zLGQ9dFtmXSxnPS0tbyx4PXRbZ107ZVtkLnV1aWRdPWgsdFtoXT1kLGVbeC51dWlkXT1mLHRbZl09eCx0LnBvcCgpO2ZvcihsZXQgdj0wLG09cjt2IT09bTsrK3Ype2xldCBwPWlbdl0sYj1wW2ZdLF89cFtnXTtwW2hdPWIscFtmXT1fLHAucG9wKCl9fWVsc2V7bGV0IGY9LS1vLGQ9dFtmXTtmPjAmJihlW2QudXVpZF09aCksdFtoXT1kLHQucG9wKCk7Zm9yKGxldCBnPTAseD1yO2chPT14OysrZyl7bGV0IHY9aVtnXTt2W2hdPXZbZl0sdi5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9c3Vic2NyaWJlXyh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxyPWlbdF0scz10aGlzLl9iaW5kaW5ncztpZihyIT09dm9pZCAwKXJldHVybiBzW3JdO2xldCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtyPXMubGVuZ3RoLGlbdF09cixvLnB1c2godCksYS5wdXNoKGUpLHMucHVzaChoKTtmb3IobGV0IGY9dSxkPWwubGVuZ3RoO2YhPT1kOysrZil7bGV0IGc9bFtmXTtoW2ZdPW5ldyBOdChnLHQsZSl9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPWVbdF07aWYoaSE9PXZvaWQgMCl7bGV0IHI9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgtMSxsPW9bYV0sYz10W2FdO2VbY109aSxvW2ldPWwsby5wb3AoKSxzW2ldPXNbYV0scy5wb3AoKSxyW2ldPXJbYV0sci5wb3AoKX19fTtWaC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgR2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBzPWUudHJhY2tzLG89cy5sZW5ndGgsYT1uZXcgQXJyYXkobyksbD17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfTtmb3IobGV0IGM9MDtjIT09bzsrK2Mpe2xldCB1PXNbY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkobyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVp3LHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiZ0aGlzLnRpbWVTY2FsZSE9PTAmJnRoaXMuX3N0YXJ0VGltZT09PW51bGwmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixzPXQuX2NsaXAuZHVyYXRpb24sbz1zL3IsYT1yL3M7dC53YXJwKDEsbyxlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixzPXIudGltZSxvPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7YT09PW51bGwmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPXMsbFsxXT1zK2ksY1swXT10L28sY1sxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXt0aGlzLl91cGRhdGVXZWlnaHQodCk7cmV0dXJufWxldCBzPXRoaXMuX3N0YXJ0VGltZTtpZihzIT09bnVsbCl7bGV0IGw9KHQtcykqaTtpZihsPDB8fGk9PT0wKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7c3dpdGNoKHRoaXMuYmxlbmRNb2RlKXtjYXNlIGQwOmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSBRaDpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKGkhPT1udWxsKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLHI9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aSE9PW51bGwmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksZT09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxzPXRoaXMuX2xvb3BDb3VudCxvPWk9PT1KdztpZih0PT09MClyZXR1cm4gcz09PS0xP3I6byYmKHMmMSk9PT0xP2UtcjpyO2lmKGk9PT1Zdyl7cz09PS0xJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKHI+PWUpcj1lO2Vsc2UgaWYocjwwKXI9MDtlbHNle3RoaXMudGltZT1yO2JyZWFrIHR9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKHM9PT0tMSYmKHQ+PTA/KHM9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLHRoaXMucmVwZXRpdGlvbnM9PT0wLG8pKTp0aGlzLl9zZXRFbmRpbmdzKHRoaXMucmVwZXRpdGlvbnM9PT0wLCEwLG8pKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEscys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1zO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKGw9PT0xKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLG8pfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxvKTt0aGlzLl9sb29wQ291bnQ9cyx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKG8mJihzJjEpPT09MSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9RnIsci5lbmRpbmdFbmQ9RnIpOih0P3IuZW5kaW5nU3RhcnQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P0ZyOk5yOnIuZW5kaW5nU3RhcnQ9ZWwsZT9yLmVuZGluZ0VuZD10aGlzLnplcm9TbG9wZUF0RW5kP0ZyOk5yOnIuZW5kaW5nRW5kPWVsKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bz09PW51bGwmJihvPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtsZXQgYT1vLnBhcmFtZXRlclBvc2l0aW9ucyxsPW8uc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPXMsbFswXT1lLGFbMV09cyt0LGxbMV09aSx0aGlzfX0sV2g9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxzPXIubGVuZ3RoLG89dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dT09PXZvaWQgMCYmKHU9e30sY1tsXT11KTtmb3IobGV0IGg9MDtoIT09czsrK2gpe2xldCBmPXJbaF0sZD1mLm5hbWUsZz11W2RdO2lmKGchPT12b2lkIDApKytnLnJlZmVyZW5jZUNvdW50LG9baF09ZztlbHNle2lmKGc9b1toXSxnIT09dm9pZCAwKXtnLl9jYWNoZUluZGV4PT09bnVsbCYmKCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpKTtjb250aW51ZX1sZXQgeD1lJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW2hdLmJpbmRpbmcucGFyc2VkUGF0aDtnPW5ldyBraChOdC5jcmVhdGUoaSxkLHgpLGYuVmFsdWVUeXBlTmFtZSxmLmdldFZhbHVlU2l6ZSgpKSwrK2cucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGcsbCxkKSxvW2hdPWd9YVtoXS5yZXN1bHRCdWZmZXI9Zy5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKHQuX2NhY2hlSW5kZXg9PT1udWxsKXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQscyYmcy5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldO3MudXNlQ291bnQrKz09PTAmJih0aGlzLl9sZW5kQmluZGluZyhzKSxzLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy51c2VDb3VudD09PTAmJihzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKHMpKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gZSE9PW51bGwmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXNbZV07aWYobz09PXZvaWQgMClvPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLHNbZV09bztlbHNle2xldCBhPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLG8uYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBzPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3NdLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLHU9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PXUsbFt1XT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2xldCBoPWEuYWN0aW9uQnlSb290LGY9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZDtkZWxldGUgaFtmXSxsLmxlbmd0aD09PTAmJmRlbGV0ZSBvW3NdLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9ZVtpXTstLXMucmVmZXJlbmNlQ291bnQ9PT0wJiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz10aGlzLl9iaW5kaW5ncyxvPXJbZV07bz09PXZvaWQgMCYmKG89e30scltlXT1vKSxvW2ldPXQsdC5fY2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxzPWkucGF0aCxvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPW9bcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbc10sT2JqZWN0LmtleXMoYSkubGVuZ3RoPT09MCYmZGVsZXRlIG9bcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiBpPT09dm9pZCAwJiYoaT1uZXcgX2wobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LHMuX19jYWNoZUluZGV4PWksZVtpXT1zfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qscz1yLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShyLHQpOnQsYT1vIT09bnVsbD9vLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKGk9PT12b2lkIDAmJihvIT09bnVsbD9pPW8uYmxlbmRNb2RlOmk9UWgpLGwhPT12b2lkIDApe2xldCBoPWwuYWN0aW9uQnlSb290W3NdO2lmKGghPT12b2lkIDAmJmguYmxlbmRNb2RlPT09aSlyZXR1cm4gaDtjPWwua25vd25BY3Rpb25zWzBdLG89PT1udWxsJiYobz1jLl9jbGlwKX1pZihvPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdT1uZXcgR2godGhpcyxvLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LGEscyksdX1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQscz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShpLHQpOnQsbz1zP3MudXVpZDp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvXTtyZXR1cm4gYSE9PXZvaWQgMCYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMsZT10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IGk9ZS0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQscz1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQscyxvKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShvKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1yW2ldO2lmKHMhPT12b2lkIDApe2xldCBvPXMua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1vW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsZVt1XT1oLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IG8gaW4gaSl7bGV0IGE9aVtvXS5hY3Rpb25CeVJvb3QsbD1hW2VdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1yW2VdO2lmKHMhPT12b2lkIDApZm9yKGxldCBvIGluIHMpe2xldCBhPXNbb107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtpIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX07V2gucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIFRvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBUbyh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LHFoPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fTtxaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgWGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixzKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9aSx0aGlzLmVsZW1lbnRTaXplPXIsdGhpcy5jb3VudD1zLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1hoLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvMD1uZXcgSyxZaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLKDEvMCwxLzApLGU9bmV3IEsoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW8wLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gbzAuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1lpLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIGEwPW5ldyBULCRhPW5ldyBULFloPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5zdGFydCx0aGlzLmVuZCkubXVsdGlwbHlTY2FsYXIoLjUpfWRlbHRhKHQpe3JldHVybiB0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHRoaXMuZGVsdGEoZSkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpfWNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKXthMC5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksJGEuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgaT0kYS5kb3QoJGEpLHM9JGEuZG90KGEwKS9pO3JldHVybiBlJiYocz1JZShzLDAsMSkpLHN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUsaSl7bGV0IHI9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSk7cmV0dXJuIHRoaXMuZGVsdGEoaSkubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTt2YXIgUW49bmV3IFQsS2E9bmV3IHd0LEZ1PW5ldyB3dCxaaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQpe2xldCBlPUQwKHQpLGk9bmV3IEh0LHI9W10scz1bXSxvPW5ldyBmdCgwLDAsMSksYT1uZXcgZnQoMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCkscy5wdXNoKG8ucixvLmcsby5iKSxzLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShzLDMpKTtsZXQgbD1uZXcgem4oe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIoaSxsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1lLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCBlPXRoaXMuYm9uZXMsaT10aGlzLmdlb21ldHJ5LHI9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7RnUuY29weSh0aGlzLnJvb3QubWF0cml4V29ybGQpLmludmVydCgpO2ZvcihsZXQgcz0wLG89MDtzPGUubGVuZ3RoO3MrKyl7bGV0IGE9ZVtzXTthLnBhcmVudCYmYS5wYXJlbnQuaXNCb25lJiYoS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLm1hdHJpeFdvcmxkKSxRbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oS2EpLHIuc2V0WFlaKG8sUW4ueCxRbi55LFFuLnopLEthLm11bHRpcGx5TWF0cmljZXMoRnUsYS5wYXJlbnQubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobysxLFFuLngsUW4ueSxRbi56KSxvKz0yKX1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIEQwKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsRDAobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBKaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBmdChpKSxyPW5ldyBmdChyKTtsZXQgcz1lLzIsbz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLGQ9MCxnPS1hO2Y8PWU7ZisrLGcrPW8pe2wucHVzaCgtYSwwLGcsYSwwLGcpLGwucHVzaChnLDAsLWEsZywwLGEpO2xldCB4PWY9PT1zP2k6cjt4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zfWxldCB1PW5ldyBIdDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShjLDMpKTtsZXQgaD1uZXcgem4oe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX07dmFyIF9UPW5ldyBGbG9hdDMyQXJyYXkoMSksQ2s9bmV3IEludDMyQXJyYXkoX1QuYnVmZmVyKTtGZS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59O19vLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX07SmgucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07WmgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfTttbi5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLERoLmV4dHJhY3RVcmxCYXNlKG4pfTttbi5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX07WWkucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O1lpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07WWkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O1lpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07R2UucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O0dlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O0dlLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtHZS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9O3NpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtxci5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX07WWgucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKG4pfTtkZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2RlLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9O3d0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfTt3dC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTt3dC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IFQoKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O3d0LnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfTt3dC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTt3dC5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixzKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixzKX07d3QucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07amUucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX07RWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX07RWUucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtyZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07cmUucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX07cmUucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9O3JlLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfTtyZS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX07cmUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxyZS5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX07cmUubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIikscmUuZ2V0Tm9ybWFsKG4sdCxlLGkpfTtVbi5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX07VW4ucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGNpKHRoaXMsbil9O1VuLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IHFpKHRoaXMsbil9O0sucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9O0sucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfTtLLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX07VC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX07VC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfTtULnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07VC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07VC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O1QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtXdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07V3QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtrdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfTtrdC5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfTtrdC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O2t0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7b2UucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2UucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLCR3fSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7ZGwucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtTZS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWWUucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUXQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09bmx9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShubCl9fX0pO1F0LnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307UXQucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUXQucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07SHQucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX07SHQucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBRdChhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOm49PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpfTtIdC5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe2UhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfTtIdC5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtIdC5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtIdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9O0h0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7R2kucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShuPT09ITA/bmw6aW8pLHRoaXN9O0dpLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07Y2kucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtjaS5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1lyLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VG8ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBmdH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PWMwfX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz1ufX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZuLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9bn19fSk7VnQucHJvdG90eXBlLmNsZWFyVGFyZ2V0PWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldChuKSx0aGlzLmNsZWFyKHQsZSxpKX07VnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcChuKX07VnQucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIiksdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX07VnQucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9O1Z0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn07VnQucHJvdG90eXBlLnJlc2V0R0xTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuIiksdGhpcy5zdGF0ZS5yZXNldCgpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc307VnQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfTtWdC5wcm90b3R5cGUuZW5hYmxlU2Npc3NvclRlc3Q9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZW5hYmxlU2Npc3NvclRlc3QoKSBpcyBub3cgLnNldFNjaXNzb3JUZXN0KCkuIiksdGhpcy5zZXRTY2lzc29yVGVzdChuKX07VnQucHJvdG90eXBlLmluaXRNYXRlcmlhbD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUudXBkYXRlU2hhZG93TWFwPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZUN1YmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuZ2V0QWN0aXZlTWlwTWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9bn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9bn19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPW49PT0hMD8kdDpyaX19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sZ2FtbWFGYWN0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpLDJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQwLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOZS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSk7QmgucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IEZoKCkubG9hZChuLGZ1bmN0aW9uKGkpe3Quc2V0QnVmZmVyKGkpfSksdGhpc307T2gucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTthby5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfTthby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX07Tm4uY3Jvc3NPcmlnaW49dm9pZCAwO05uLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEVoO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IHM9ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihzLm1hcHBpbmc9dCksc307Tm4ubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgU2g7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTt0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246JGh9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSRoKTtmdW5jdGlvbiByZihuLHQsZSl7aWYoZT09PTEpcmV0dXJuIG5ldyBmdCh0KTtsZXQgaT1waSh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBmdChzYyhpLG4pKDEtZSkpfXZhciBnbjsoZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBOMChuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09ZSozKSYmKGk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZSozKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgcz0wO3M8ZTtzKyspcltzKjNdPXRbcyoyXSxyW3MqMysxXT10W3MqMisxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsZSozKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEYwKG4sdCxlKXtsZXQgaT1NYXRoLm1heCh0Lmxlbmd0aC8yLTEsMCkscj1pKjIqMyxzPXIqMyxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIW98fG8uY291bnQhPT1yKSYmKG89bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkocyksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixvKSk7bGV0IGE9by5hcnJheTtmb3IobGV0IGw9MDtsPGk7bCsrKXtsZXRbYyx1LGgsZl09W3RbMipsXSx0WzIqbCsxXSx0WzIqbCsyXSx0WzIqbCszXV0sZD1uZXcgSyhjLHUpLGc9bmV3IEsoaCxmKSx4PW5ldyBLKGgtYyxmLXUpLHY9bmV3IEsoLXgueSx4LngpLnNldExlbmd0aChlLzIpLG09ZC5jbG9uZSgpLmFkZCh2KSxwPWQuY2xvbmUoKS5zdWIodiksYj1nLmNsb25lKCkuYWRkKHYpLF89Zy5jbG9uZSgpLnN1Yih2KSxTPVttLngsbS55LDAscC54LHAueSwwLGIueCxiLnksMCxiLngsYi55LDAscC54LHAueSwwLF8ueCxfLnksMF07YS5zZXQoUyxsKlMubGVuZ3RoKX1vLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAscyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBJbChuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOnMsb3BhY2l0eTpvfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1yZihuLHMsbyE9bnVsbD9vOjEpLGM9ZSh0Lmdlb21ldHJ5KTtyZXR1cm4gdC5nZW9tZXRyeSE9PWMmJih0Lmdlb21ldHJ5PWMpLGEuY29sb3IuZXF1YWxzKGwpfHwoYS5jb2xvci5zZXQobCksYS5uZWVkc1VwZGF0ZT0hMCksITB9dmFyIHdUPXtjcmVhdGVTY2VuZTooKT0+bmV3IFlyfSxSbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT13VC5jcmVhdGVTY2VuZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSIjZmZmIixEaS5pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksciYmdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixyKSx0aGlzLnJlbmRlcmVyPW5ldyBWdCh7Y2FudmFzOnQsYW50aWFsaWFzOiEwLGFscGhhOiEwfSksdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKGkpfW9uUmVzaXplKHQpe3RoaXMucmVuZGVyZXIuc2V0U2l6ZSh0LndpZHRoLHQuaGVpZ2h0KX1kZXN0cm95T2JqZWN0KHQpe2xldCBlPXQub2JqM2Q7aWYodGhpcy5zY2VuZS5yZW1vdmUoZSksZSBpbnN0YW5jZW9mIG9lKXtlLmdlb21ldHJ5LmRpc3Bvc2UoKTtsZXQgaT1BcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpP2UubWF0ZXJpYWw6W2UubWF0ZXJpYWxdO2ZvcihsZXQgciBvZiBpKXIuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXt2YXIgdTtpZighdCYmIWkudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTpyLHdpZHRoOnN9PWk7aWYoIXQpe2xldCBoPXJmKHRoaXMuYmFja2dyb3VuZENvbG9yLGkuY29sb3IsKHU9aS5vcGFjaXR5KSE9bnVsbD91OjEpLGY9bmV3IEh0LGQ9bmV3IHpuKHtjb2xvcjpofSksZz1uZXcgb2UoZixkKTtyZXR1cm4gZC52aXNpYmxlPXIsRjAoZixlLHMpLHRoaXMuc2NlbmUuYWRkKGcpLHt0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmcsd2lkdGg6c319bGV0e2RhdGE6byxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsaD0+KChzIT09bHx8IW98fCFEaS5hcmVQb2x5bGluZXNFcXVhbChvLGUpKSYmRjAoaCxlLHMpLGgpLGkpP3t0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmEsd2lkdGg6c306dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTppLGNvbG9yOnIsb3BhY2l0eTpzfT1lLG89cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IscixzIT1udWxsP3M6MSksYT1uZXcga2koe2NvbG9yOm8sdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBvZSh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWkscz1yKk1hdGguc3FydCgzKS8yLG89bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktcy8zLGUueCtyLzIsZS55LXMvMyxlLngsZS55K3MqMi8zXSk7aWYoIXQpe2xldCBsPW5ldyBIdDtOMChsLG8pO2xldCBjPXRoaXMuY3JlYXRlTWVzaChsLGkpO3JldHVybiBjPT09bnVsbD9udWxsOih0aGlzLnNjZW5lLmFkZChjKSx7dHlwZTpnbi5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6Y30pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLGw9PihOMChsLG8pLGwpLGkpP3t0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWkscz1uZXcgWnIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gocyxpKTtyZXR1cm4gYT09PW51bGw/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+cyxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnN9PXIsbz0yL01hdGguc3FydCgzKSpzLGE9bmV3IFVuKFtuZXcgSyhlLngtby8yLGUueS1zLzIpLG5ldyBLKGUueCxlLnkrcy8yKSxuZXcgSyhpLngsaS55K3MvMiksbmV3IEsoaS54K28vMixpLnktcy8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBxaShhKTtpZighdCl7bGV0IHU9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIHU9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKHUpLHt0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnV9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTpnbi5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fTt2YXIgTmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlbmRlckNhY2hlPXQsdGhpcy5yZW5kZXJlcj1lfXNldExpbmUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJpYW5nbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldENpcmNsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyYXBlem9pZCh0LGUsaSxyKXtsZXQgcz10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpLHIpO3MmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxzKX19O3ZhciBzZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7bGV0IGU9dGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk7cmV0dXJuIGUhPW51bGw/ZTpudWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LEZsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgc2YsdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IE5sKHRoaXMucmVuZGVyQ2FjaGUsdGhpcy5yZW5kZXJlcil9c2V0TGF5b3V0UmVjdCh0KXsodGhpcy5sYXlvdXQueCE9PXQueHx8dGhpcy5sYXlvdXQud2lkdGghPT10LndpZHRofHx0aGlzLmxheW91dC55IT09dC55fHx0aGlzLmxheW91dC5oZWlnaHQhPT10LmhlaWdodCkmJih0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSwhIXRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheShpLnBvaW50cy5sZW5ndGgqMil9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W3Msb109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMl09cyx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVtyKjIrMV09b319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19O3ZhciBMbzsoZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifSkoTG98fChMbz17fSkpO3ZhciB6bD1jbGFzcyBleHRlbmRzIEZse3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6TG8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkxvLk5BTixwb2x5bGluZTplLm1hcCgocixzKT0+aXNOYU4ocik/cyUyPT09MD9pLng6aS55OnIpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtsZXQgZT1bXSxpPTAscj0hMSxzPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksbz17eDpzWzBdLHk6c1sxXX0sYT1udWxsO2ZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCs9Mil7bGV0IGM9dFtsXSx1PXRbbCsxXSxoPWlzTmFOKGMpfHxpc05hTih1KTtoIT09ciYmaSE9PWwmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLGwpLGE9PT1udWxsP3t4OmMseTp1fTphKSksaT1sKSxofHwoYT17eDpjLHk6dX0pLHI9aH1yZXR1cm4gaSE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksdC5sZW5ndGgpLGEhPW51bGw/YTpvKSksZX1yZWRyYXcoKXt2YXIgdCxlLGk7Zm9yKGxldCByIG9mIHRoaXMuc2VyaWVzKXtsZXQgbz10aGlzLmdldE1ldGFkYXRhTWFwKClbci5pZF07aWYoIW8pY29udGludWU7aWYoci5wb2x5bGluZS5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke3IucG9seWxpbmUubGVuZ3RofWApO2xldCBhPXRoaXMucGFydGl0aW9uUG9seWxpbmUoci5wb2x5bGluZSk7Zm9yKGxldFtsLHt0eXBlOmMscG9seWxpbmU6dX1db2YgYS5lbnRyaWVzKCkpaWYoYz09PUxvLk5VTUJFUil1Lmxlbmd0aD09PTI/dGhpcy5wYWludEJydXNoLnNldENpcmNsZShKU09OLnN0cmluZ2lmeShbImNpcmNsZSIsci5pZCxsXSkse3g6dVswXSx5OnVbMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KHQ9by5vcGFjaXR5KSE9bnVsbD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHIuaWQsbF0pLHUse2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooZT1vLm9wYWNpdHkpIT1udWxsP2U6MSx3aWR0aDoyfSk7ZWxzZSBpZighby5hdXgpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsci5pZCx1W2hdLHVbaCsxXV0pLHt4OnVbaF0seTp1W2grMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KGk9by5vcGFjaXR5KSE9bnVsbD9pOjEsc2l6ZToxMn0pfX19O3ZhciBVbD1jbGFzcyBleHRlbmRzIGRye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgVmkoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19O3ZhciBNVD17cmVxdWVzdEFuaW1hdGlvbkZyYW1lOm49PnNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxCbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFRuLlNWRzp7dGhpcy5jb29yZGluYXRvcj1uZXcgZHIsdGhpcy5yZW5kZXJlcj1uZXcgT3ModC5jb250YWluZXIpO2JyZWFrfWNhc2UgVG4uV0VCR0w6e2xldCBlPW5ldyBVbDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgUm8odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgemwoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoZnIodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KE5vKHt4OjAseTowfSx0KSksdGhpcy5yZW5kZXJlci5vblJlc2l6ZShObyh7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh1ZihObyh7fSx0KSx7eDowLHk6MH0pKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldE1ldGFkYXRhKHQpe2xldCBlPSExO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtpLHJdKT0+e2xldCBzPXRoaXMubWV0YWRhdGFNYXBbaV07KCFzfHxyLmNvbG9yIT09cy5jb2xvcnx8ci52aXNpYmxlIT09cy52aXNpYmxlfHxyLm9wYWNpdHkhPT1zLm9wYWNpdHkpJiYoZT0hMCksdGhpcy5tZXRhZGF0YU1hcFtpXT1yfSksZSYmdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRWaWV3Qm94KHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0Vmlld0JveFJlY3Qoe3g6dC54WzBdLHdpZHRoOnQueFsxXS10LnhbMF0seTp0LnlbMF0saGVpZ2h0OnQueVsxXS10LnlbMF19KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldERhdGEodCl7dGhpcy5zZXJpZXNMaW5lVmlldy5zZXREYXRhKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0KSx0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNjaGVkdWxlUmVwYWludCgpe3RoaXMuc2hvdWxkUmVwYWludHx8KHRoaXMuc2hvdWxkUmVwYWludD0hMCxNVC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnJlcGFpbnQoKSx0aGlzLnNob3VsZFJlcGFpbnQ9ITF9KSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX07ZnVuY3Rpb24gejAobil7bGV0e2ZsYXR0ZW5lZFNlcmllczp0LGlkc0FuZExlbmd0aHM6ZX09bixpPW5ldyBGbG9hdDY0QXJyYXkodCkscj1bXTtpZihpLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoImBmbGF0dGVuZWRTZXJpZXNgIG11c3QgaGF2ZSBldmVuIG51bWJlciBvZiBlbGVtZW50cyIpO2xldCBzPTA7Zm9yKGxldHtpZDpvLGxlbmd0aDphfW9mIGUpe2xldCBsPVtdO2ZvcihsZXQgYz0wO2M8YTtjKyspbC5wdXNoKHt4OmlbcysrXSx5OmlbcysrXX0pO3IucHVzaCh7aWQ6byxwb2ludHM6bH0pfXJldHVybiByfXZhciB4bjsoZnVuY3Rpb24obil7bltuLlNFUklFU19EQVRBX1VQREFURUQ9MF09IlNFUklFU19EQVRBX1VQREFURUQiLG5bbi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRD0xXT0iU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQiLG5bbi5TQ0FMRV9VUERBVEVEPTJdPSJTQ0FMRV9VUERBVEVEIixuW24uVklFV19CT1hfVVBEQVRFRD0zXT0iVklFV19CT1hfVVBEQVRFRCIsbltuLklOSVQ9NF09IklOSVQiLG5bbi5ET01fUkVTSVpFRD01XT0iRE9NX1JFU0laRUQiLG5bbi5EQVJLX01PREVfVVBEQVRFRD02XT0iREFSS19NT0RFX1VQREFURUQiLG5bbi5ESVNQT1NFRD03XT0iRElTUE9TRUQifSkoeG58fCh4bj17fSkpO3ZhciBQbzsoZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KShQb3x8KFBvPXt9KSk7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57YlQobi5wb3J0c1swXSxuLmRhdGEpfSk7ZnVuY3Rpb24gYlQobix0KXtsZXR7Y2FudmFzOmUsZGV2aWNlUGl4ZWxSYXRpbzppLGRpbTpyLHJlbmRlcmVyVHlwZTpzLHVzZURhcmtNb2RlOm99PXQsYT17b25EcmF3RW5kOigpPT57bi5wb3N0TWVzc2FnZSh7dHlwZTpQby5PTl9SRURSQVdfRU5EfSl9LG9uQ29udGV4dExvc3Q6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX0NPTlRFWFRfTE9TVH0pfX0sbDtzd2l0Y2gocyl7Y2FzZSBUbi5XRUJHTDpsPXt0eXBlOlRuLldFQkdMLGRvbURpbWVuc2lvbjpyLGNhbGxiYWNrczphLGNvbnRhaW5lcjplLGRldmljZVBpeGVsUmF0aW86aSx1c2VEYXJrTW9kZTpvfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGNhbm5vdCBoYXZlIE9mZnNjcmVlbiBjaGFydCBmb3IgcmVuZGVyZXIgdHlwZTogJHtzfWApfWxldCBjPW5ldyBCbChsKTtuLm9ubWVzc2FnZT1mdW5jdGlvbih1KXtsZXQgaD11LmRhdGE7c3dpdGNoKGgudHlwZSl7Y2FzZSB4bi5TRVJJRVNfREFUQV9VUERBVEVEOntsZXQgZj16MChoLmNvbXBhY3REYXRhU2VyaWVzKTtjLnNldERhdGEoZik7YnJlYWt9Y2FzZSB4bi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRDp7Yy5zZXRNZXRhZGF0YShoLm1ldGFkYXRhKTticmVha31jYXNlIHhuLlZJRVdfQk9YX1VQREFURUQ6e2Muc2V0Vmlld0JveChoLmV4dGVudCk7YnJlYWt9Y2FzZSB4bi5ET01fUkVTSVpFRDp7Yy5yZXNpemUoaC5kaW0pO2JyZWFrfWNhc2UgeG4uREFSS19NT0RFX1VQREFURUQ6e2Muc2V0VXNlRGFya01vZGUoaC51c2VEYXJrTW9kZSk7YnJlYWt9Y2FzZSB4bi5TQ0FMRV9VUERBVEVEOntzd2l0Y2goaC5heGlzKXtjYXNlIngiOmMuc2V0WFNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7Y2FzZSJ5IjpjLnNldFlTY2FsZVR5cGUoaC5zY2FsZVR5cGUpO2JyZWFrO2RlZmF1bHQ6bGV0IGY9aC5heGlzO3Rocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIGF4aXM6ICR7Zn1gKX1icmVha31jYXNlIHhuLkRJU1BPU0VEOntjLmRpc3Bvc2UoKTticmVha319fX19KSgpOwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYXJ0X3dvcmtlci5qcy5tYXAK","headers":[["content-type","text/javascript; charset=utf-8"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/data/environment":{"data":"eyJ2ZXJzaW9uIjogIjIuMTMuMCIsICJkYXRhX2xvY2F0aW9uIjogImxvZ3MiLCAid2luZG93X3RpdGxlIjogIiIsICJleHBlcmltZW50X25hbWUiOiAiIiwgImV4cGVyaW1lbnRfZGVzY3JpcHRpb24iOiAiIiwgImNyZWF0aW9uX3RpbWUiOiAwLjAsICJkZWJ1ZyI6IHsiZGF0YV9wcm92aWRlciI6ICJHcnBjRGF0YVByb3ZpZGVyKGFkZHI9J2xvY2FsaG9zdDozNjQ5OScpIiwgImZsYWdzIjogeyJsb2dkaXIiOiAibG9ncyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IG51bGwsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImRldGVjdF9maWxlX3JlcGxhY2VtZW50IjogbnVsbCwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/data/plugins_listing":{"data":"eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkaXN0cmlidXRpb25zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIn19LCAiaGlzdG9ncmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhpc3RvZ3JhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQifX0sICJ0ZXh0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAidGV4dCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtdGV4dC1kYXNoYm9hcmQifX0sICJwcl9jdXJ2ZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQUiBDdXJ2ZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByLWN1cnZlLWRhc2hib2FyZCJ9fSwgInByb2ZpbGVfcmVkaXJlY3QiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQcm9maWxlIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgImhwYXJhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJocGFyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ocGFyYW1zLWRhc2hib2FyZCJ9fSwgIm1lc2giOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJtZXNoIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJtZXNoLWRhc2hib2FyZCJ9fSwgIndpdF9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIldoYXQtSWYgVG9vbCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtd2l0LXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgInByb2plY3RvciI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAicHJvamVjdG9yIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIklGUkFNRSIsICJtb2R1bGVfcGF0aCI6ICIvZGF0YS9wbHVnaW4vcHJvamVjdG9yL2luZGV4LmpzIn19fQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/data/runs":{"data":"WyJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMDg1MjBfQlMxMjgiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfOTE3NjBfQlMxMjgiLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiIsICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMzA4Mzc2X0JTNjQiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCIsICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMTUxNjI0X0JTNjQiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNzkxNDNfQlM2NCIsICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxNDU2MDlfQlMxMDAiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIiwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTQ3NDczX0JTMzIiXQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22%7D":{"data":"ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000%7D":{"data":"ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags":{"data":"eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFsiQWdncmVnYXRvci90ZXN0L2FjY3VyYWN5IiwgIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAiQ29sbF8xL3Rlc3QvYWNjdXJhY3kiLCAiQ29sbF8xL3RyYWluL2xvc3MiLCAiQ29sbF8yL3Rlc3QvYWNjdXJhY3kiLCAiQ29sbF8yL3RyYWluL2xvc3MiXSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzc5MTQzX0JTNjQiOiBbIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMi90cmFpbi9sb3NzIl0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMDg1MjBfQlMxMjgiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTMwODM3Nl9CUzY0IjogWyJPcmlnaW5hbC90ZXN0L2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2xvc3MiXSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzQxNTMzX0JTMzIiOiBbIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMi90cmFpbi9sb3NzIl0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF81ODMwNl9CUzY0IjogWyJBZ2dyZWdhdG9yL3Rlc3QvYWNjdXJhY3kiLCAiQWdncmVnYXRvci90cmFpbi9hdmdfbG9zcyIsICJDb2xsXzEvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzEvdHJhaW4vbG9zcyIsICJDb2xsXzIvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzIvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTQ1NjA5X0JTMTAwIjogWyJPcmlnaW5hbC90ZXN0L2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2xvc3MiXSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIjogWyJBZ2dyZWdhdG9yL3Rlc3QvYWNjdXJhY3kiLCAiQWdncmVnYXRvci90cmFpbi9hdmdfbG9zcyIsICJDb2xsXzEvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzEvdHJhaW4vbG9zcyIsICJDb2xsXzIvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzIvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTQ3NDczX0JTMzIiOiBbIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMi90cmFpbi9sb3NzIl0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMTUxNjI0X0JTNjQiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdfSwgInRhZ0Rlc2NyaXB0aW9ucyI6IHt9fSwgImhpc3RvZ3JhbXMiOiB7InJ1blRhZ0luZm8iOiB7fSwgInRhZ0Rlc2NyaXB0aW9ucyI6IHt9fSwgImltYWdlcyI6IHsidGFnRGVzY3JpcHRpb25zIjoge30sICJ0YWdSdW5TYW1wbGVkSW5mbyI6IHt9fX0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Aggregator/test/accuracy%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJydW5Ub1NlcmllcyI6IHsicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfOTE3NjBfQlMxMjgiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzAuNDk5MTgzMiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMS44MzM0MjM2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMzLjI5MjgyOCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNC45MzUxODE0LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM2LjM0MTA3NTcsICJzdGVwIjogNCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzcuNTY0MjI0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM4Ljg0OTMyMzcsICJzdGVwIjogNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDAuMjQ4NTA4MiwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0MS43MTEzMDQsICJzdGVwIjogOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDMuMjg3NTc5NSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NC45OTQ5ODUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQ3LjM3MTg1NzYsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODUwLjMyMTE3LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1My4zNDc5OTQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU1LjUwOTU0NTgsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU3LjcyNDE2NzYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYwLjAxMTUxNTEsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYyLjMzMDgzNzUsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY1LjMxNTI2MSwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjkuMDgwNjYxNSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NzIuNDM5MDYyLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3NS4xNDkwMDExLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3OC4wMTExMTY1LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4MC44MjA2MTQ4LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4NS4xNDA1NDUxLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4OS41NTQ4MDIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkyLjYyODUxNDUsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODk1Ljg4MzQzOTgsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODk5LjEwODIxOCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDQuNTI0MjAwNywgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTEuMDcxMzUxLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxNS43NDAzMTksICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE5LjQwNjgyODksICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI0LjkxMzQzOSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjkuNjE3NjgwMywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzMuNTU3Mzg3OCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzcuNTM0NjA2MiwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NDMuODM2NzYxLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0OC41Nzc5MjE2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1Mi44MDk2NjQ3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1OC4yMDM5ODk1LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2NS4wODY1MTAyLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3MS43MTQyNDgyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3OC4wMjUxODE1LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4My42OTY4ODQ0LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4OC40OTkzMzI3LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk5NC43NjIxMDE3LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAwMS4xNTE1NDIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDA2LjMyMzM4MTQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDEzLjA5ODE4MjQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE5LjQxMzI0MiwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMjQuNzQwMjM5MSwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzIuNDU4NDYwNiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzguNTM4MDUyMywgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNDQuMjY2NzA5OCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTIuODU5OTgxMywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTguNjcxMzU4MywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjYuMDMzMjg4MiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNzMuMjU5MTM5MywgInN0ZXAiOiA1OCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNzkuMzcwNzcyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4OC4yOTkxODYsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDk0LjY2OTY2NjUsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTAzLjMyNTk0NDQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTEwLjIzNDM5MzQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTE3LjczNjIxNywgInN0ZXAiOiA2NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMjYuMDY4OTgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTMzLjA0NzE2ODMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQyLjU3MjU4NTgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ5LjQ2NTU2MTQsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTYwLjYyMTIzMzUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTY5Ljg3NzExMzYsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc5Ljc0OTcxOTQsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTg3Ljk1NDY1MjgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk3Ljc5ODIwNDQsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjA2LjMwMTMyNTMsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjE2LjI4NDI3OTgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjI1LjA2ODgyMzgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjM0LjUxMTA1NjQsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjQ0LjEyNTYwOTQsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjUzLjIyNDE5NzksICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjYzLjcwMDU1MzcsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjcyLjIyMDc2NzMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjgzLjQ0NDg0MjgsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjkxLjY4MzQ1OSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDIuOTA4NzI2MiwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMTIuMDA2OTY0LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMyNS4zNDYxMjE4LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzNy41OTkxOTA3LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0Ni45OTU5MTksICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzU4Ljc3ODAwOTcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzcxLjE4NjMxNjMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzgwLjY4MDgwMzgsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzkzLjA0OTA3MTgsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDA1LjQwODkxMjQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDIwLjE5NTI5NywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzIuMTIwMDgyNCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NDUuMTA2NzU0MywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NTYuOTY3MzY1LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2OC40NjI3NDk1LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ4MS45ODYwMzI3LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzc5MTQzX0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDQzODUuNTExNTcyMSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ni4zNDU3NzM1LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg3LjI3NDgwOTgsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODguMjc0MzM0NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS4zOTY3NTQ1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MzkxLjI2NzcyNDgsICJzdGVwIjogNSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTMuMjc0NDg1OCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5NS4zNDE1ODI1LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk3LjM4ODA5NDIsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTguOTAzMDU2NCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwMC41MjE2MzM2LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwMi4zMTg5ODA1LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNC4xNDE5NTkyLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNi4wNDcwNjcyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwOC41ODM0MzMyLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxMS45NTA1MzEyLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxNS4yMjY0MTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE3LjQ3MjM2MzIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE5Ljg4NDY4MTUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIyLjM0MDgzMDgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI0Ljg2Nzg2NDYsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI4Ljg1MDc0MTEsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDMyLjkyODI2NzIsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM1Ljc3MDEwMDYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM4LjkyODU3OCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDMuNjc1OTgxMywgInN0ZXAiOiAyNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDkuMzU2MTEzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1NC4wMTQyNzYsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU3LjUzNjY1NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NjEuMDAyNzc5MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NjUuMDU4ODE3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3MC41NjY3NTEyLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3NC40MTE4OTkzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3OC4xNzE1NDM2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ4Mi40MTczMzU3LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ4OC4zOTE3NDQxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5Mi40MTc4MzcxLCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5Ni40NzE2NDQyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwMS44NTQ1MDQ2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwOS42OTk0ODMyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxNS40NzMxMzYsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMzg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE5LjgzOTA1NywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4zODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjYuNjUzNzU0NywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzEuNzI3MDc0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUzNi40ODcyMTQ4LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU0My4yNjk4NzQsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ5LjE3MTcwMywgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NTQuMTY0NjA5MiwgInN0ZXAiOiA0NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjEuNDM1NDAzMywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjcuMjQ1OTg4NCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NzIuNDg4MjAwMiwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODAuMzI3MjM4LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU4NS45NzE3NDI5LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5MS43MjY5NTQ1LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYwMC4wMjcxNjE4LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYwNS43NjMyOTUsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjEzLjA2NDg1NjUsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjIwLjI0NDI2MDUsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI2LjIwMTgyNDIsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjM1LjEwMDc3NzQsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQxLjQ4Mjg2NzIsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQ5LjczNTM4MDIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjU2LjkwNjg1NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjQuMDQyNzIyMiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzIuNjI5NjQxLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY3OS4yNjE4OSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODkuMDQ3MTk1NywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC41fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTkuMTU5MTcyMywgInN0ZXAiOiA2NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MDguMzIzNjYxNiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MTUuMjkxNzAwMSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MjUuMTc3ODcyNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MzIuNDg3Mjk0NCwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDIuNjQ5ODgzNSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDkuOTg4NzM0LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc2MC4yOTk0ODA0LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc2Ny45ODExOTg1LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc3OC43Mjc2MTE1LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc4Ni4zNDg4MjI2LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc5Ni45ODA5NzYzLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgwNS4yNjc5MjA3LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgxNS45MDQ2NjU3LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyNS4zMDM5ODM3LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzNS40NDc5OTc4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg0Ni4wNDg5ODUyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg1OC45Nzc5NjA2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg3MC42Mjc4NDQsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODgxLjg3MjAwNjIsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODkxLjY4Njk5NTcsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTAzLjM1ODIzMDgsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTEyLjc0MDg0NzMsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTI0LjI3OTEwOSwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MzUuNzA4MzY3OCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NDkuMTI1NDIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTYwLjcxOTUzMDMsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTczLjAyNjI1NTQsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTgyLjkwOTg4MjUsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTk1LjgwNjcxNTMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDA5LjI2MDA1NywgInN0ZXAiOiA5NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUwMTkuNTE4MDU1LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAzMi4wODA5NTQsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTk4NC44MjE0MTIsICJzdGVwIjogMCwgInZhbHVlIjogMC4xNjY2NjY2NzE2MzM3MjA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODUuOTg5NTEyNCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni45NDA4MjMsICJzdGVwIjogMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODcuOTUwNzk5LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg5LjA5MjEwMzcsICJzdGVwIjogNCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTAuMzA0MDY4NiwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5MS42MDE0NiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Mi45OTkzNzA4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk0LjQ3OTM3MTUsICJzdGVwIjogOCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTYuMjkwNzgyNSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5OC44NjY1NTcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAxLjU1OTM1NTcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA0LjA2MzQ5OTcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA2LjAyMjEyMTQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA4LjA2MTY5NDQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEwLjE3MjQ4NiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTIuNDE2OTIyMywgInN0ZXAiOiAxNiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTUuNTM2MDksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDE5LjI5NDE1ODIsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIyLjU0MDQ1NSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjUuMTM0MzQ1LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyNy44NDM2NDE4LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMC42NDE0MjE2LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzNC45NTkwMTYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQwLjEwMjYzNTEsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ1LjAwNzQxNjUsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ4LjYxNzE3MDYsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDUxLjg5MzY1NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNTUuNTA4Mjc0MywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjAuODQ1NzI0NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjQuOTk0OTYwMywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjguNjU1NTcwNSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzIuMzAyNTQ3MiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzguMTYxMjc5NCwgInN0ZXAiOiAzMywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODIuNTM0NzQxLCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4Ni41MDAyNDM3LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5MC45OTA4MDc4LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Ny40MzQyNzIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAxLjY4OTgwMjIsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTA1Ljk5ODU3NCwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTIuMzk2OTk2NSwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTcuOTk4MzAxLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyMi42MDU0MDM3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyOC4zOTY3Mjc2LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNC45OTAwMzEsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTM5LjgzNzk0ODMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTQ1LjgyNDgyMDgsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTUyLjY0MTQ1NSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNTcuOTI3MzMyNCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNjQuNTEyMTIxNywgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzMuODIyNTIyOSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzkuNzU3OTExMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODcuOTcyNjgwMywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTMuNjAyMzcxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5OS44Mzc1NTMzLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIwNy45OTA3NDcyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIxMy45MDQ5OTE0LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyMS45NTMzMDE3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyOC42MTg5MTc3LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzNS4wNzEwODQzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0My41OTczODk1LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI1MC4wMTU3MTgyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI1OS4yMjEzNDE4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI2NS44MTMyMjk4LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI3NC4yNDcxMDEsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjgxLjk0MjQ4ODQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjg5Ljg2ODUzMywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyOTguNzQzODg4OSwgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMDYuMTEwODE3LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMxNS42ODg1MzE5LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMi44OTQ4NTA3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMzMy4xMDAxNzI4LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0MC42OTk1NjU0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1MS4wNjIxNjU1LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1OC44MTc4NTg1LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM2OS4zMDk5NjkyLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM3Ny4zMDQwODM4LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM4OC40MDUyMzUzLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQwMC45OTUxMDM2LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQwOS41Njg1NTIzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQyMS4xNTA2Nzk2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQzMy4wMzQ5MDQ1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ0My43OTMyMzksICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDUzLjg3Nzk1NjksICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDYzLjU0NjEzMzMsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDc1LjEwNjA3MywgInN0ZXAiOiA4NSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0ODMuOTExMjYyNSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0OTUuNDE1MzA0MiwgInN0ZXAiOiA4NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MDQuNjM4NDcyOCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC41fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MTUuNzkyNzU1LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUyNy4yNjY0NTIzLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUzNi43OTgzMzcyLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU0OC43NjgyNzUzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU1OS4yNDU4MDEyLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU3MC40MjUxNDU0LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU4Mi43ODEyMjY0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU5Mi43Mjg0MTQ4LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYwNC44Mjg0NjM2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYxNy43NzYxMDg1LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYyNy43MTI0NTk4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzU4MzA2X0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzcuMDIzNDI3LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc4LjAzMDM0ODgsICJzdGVwIjogMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzkuMDA4Njg5MiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4MC4xMDI1MjIxLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgxLjI2MTI5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjQ4ODkzMjgsICJzdGVwIjogNSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODMuODM5OTg1MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4Ni4wODc4MzQsICJzdGVwIjogNywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODguNTkzMTc0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkxLjAxNjE5MiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Mi45OTE1NTEyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5NC44NTc0MDY2LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ni43OTQxNTI1LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OC44MTk1ODgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDAwLjk5Nzg4MDIsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDAzLjk5MTc1OTUsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDA3LjUzMzM4MTcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDEwLjcwNDQxOTksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDEzLjI0Mjg2MDMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE1LjgxNjkwNDgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE4LjQzNjQ0MDUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDIyLjEyMzY5OTcsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDI2LjM5ODk1MDMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDI5LjY1MTI4NDUsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDMyLjYzOTU2MTcsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM1LjY0MTkxODcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM5LjQyMTUxODMsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ0LjQzNjM3MTYsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ4LjA1MDc4OTgsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUxLjQzODcyNDMsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDU1LjAzODIwOSwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjAuNTI1MjEwMSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjUuMTk2NzEzNCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjguOTU4NDc2NSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzIuNzc0NTMwNCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzguODQxNTkzNSwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODMuNTgzODkwNCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODcuNjkxMjczLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5Mi41NDQwMzMzLCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5OC45NjI2NTcsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTA1LjcyODEyNzcsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTEyLjI3MTQzOTYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTE4LjIzNzYyNjgsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTIyLjg2MTgyODgsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI4LjI1NzUzMTYsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM1LjA3NjU4MjIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQwLjA0MDcwMTYsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQ1LjYwNDU3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1Mi45ODgyNjY3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1OC4xMjAzNjA2LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE2NC41Nzk5MTksICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTcxLjYwNzkyMTQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTc3LjEyMzQyNSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODUuMTEyMDI5NiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxOTQuMjE3NzQxNSwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMDAuMjE2MDYsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjA4Ljk0NzcxNjIsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjE0LjkxNjQzODMsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjIyLjU2MDcyNjYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI5Ljg2MTE2ODQsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjM2LjA1Njk0OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNDUuMzY2MDI1MiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTEuNzkyMDY3LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI2MC43MDQ4OTYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjY3LjY5NjM3MDgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjc1LjkyNDMxOTUsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjgzLjg3NzA3NzgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjkxLjc3ODY0NjcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzAwLjU2NDkxNTIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzA3Ljg2NTg3NSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTcuNDEwNjE4MywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMjQuNjgzMDYzNSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzUuMDI4ODQzMiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDIuNjE2ODYwNiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTIuODMzMDI3OCwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjAuNzIzNDQ1NCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzAuOTE0NTEzNiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzkuNDIyNDI4NCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzODkuNjQ2NjIxMiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzOTguNjc5MDc5NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MDguNDE4NTM5OCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MTguNTk1MDE5NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MjcuODY2MTMxOCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MzkuNDI5NTQ5LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ1MC40NTkwMTk3LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2NC40Nzc5OTIzLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ3My41OTI3NTEsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDg0LjkzODU4OCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTMuOTM2Nzc1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUwNS4yODQ5MDc4LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUxNi4yOTA4NTY0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUyNi4xMjc3MDYzLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUzOC4yNTkyNDk3LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU0OC4xMTYxMjQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTU5LjcwMTU0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NzIuMDIwOTU5OSwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1ODEuNTQ5OTM3NSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1OTQuMDAyNjYzMSwgInN0ZXAiOiA5NywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MDYuMTg1MjIzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzYxNi4zMDg2ODAzLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE4MzgyMV9CUzEwMCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny40ODM3ODQ3LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjQwMjkxNjIsICJzdGVwIjogMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODkuMzk0MzU2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkwLjUwMTgwNjUsICJzdGVwIjogMywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTEuNjczNjE3MSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Mi45OTAxMzAyLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk0Ljk0OTE5ODUsICJzdGVwIjogNiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTcuMjk2NCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5OS42Mzc1MzA4LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAyLjEwMDI1NTMsICJzdGVwIjogOSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDMuODU5NDIyNCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDUuNjcxMTcxMiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDguMjgxMzkzLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMC4zMTU5NzY0LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMi43MTA2NTc4LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxNi4xNzEwODI1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxOS41Nzc0Mjg4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyMi4wMDQyNjYzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNC40OTQxNjM1LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNy4wNzQwMzE0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyOS43MDM1NTI1LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzMy44OTQwMzIyLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzOC44OTU3MTE0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0My44MTQzNDczLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0Ny41NDAwNDgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDUwLjYwMzM0MDEsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDU1LjQ4NzQ4OSwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjAuMDU1MDEzLCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2My40NjQzMzQyLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Ni45NDU0MjAzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3MS4zNjI0OTE2LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3Ny4wOTIyNTEzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4MC45MjgzOTQsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDg0LjczOTUzMjcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDg5Ljg2MjcwODYsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk2LjEyOTM2NjksICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTAwLjMwNjA5MywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDQuNjQzMDA0LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxMS4xODU3Nzg0LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxNi41MTQzNDA0LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyMS4wOTA4MDksICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTI3LjAzNjYyMiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzMuMzAyNzkwNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzguMjM3NDUxMywgInN0ZXAiOiA0MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NDUuNTkwNDQ0MywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTQuMzgxMjY0NCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTkuNTQwMzI5NSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjQuNzQ3MjcyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3Mi45NjIyMzg4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3OC40MTc1OTkyLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU4NC44MDU4MzcyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5Mi42MTkyNjMsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTk4LjIyMzE1NDgsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjA1Ljk2NzA3MzQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjEyLjY4ODY5NTcsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjE4LjYwMzEyMywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MjcuODQ3Njk0NiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MzQuMDA2ODExLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0Mi4zODQ0ODYyLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0OS40NTUzMDAzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY1Ni40NTUxOTczLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY2NS4yMDc2MDk3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3MS45NzUzMTEzLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4MS43ODQ1NjM4LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5Mi4yODc4NjUyLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwMS42OTQ3NTI3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwOC43Mzk4NTIsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzE4LjY2ODA1NjUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzI1Ljc4ODc5NDUsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzM2LjExNDE0OTgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQzLjMyMzcwNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NTMuODYxMjI4NywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NjEuNzE1NDIxNywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NzIuNTczNjUxMywgInN0ZXAiOiA3MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3ODAuMzgxMTg0MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3OTEuMzQ1NDM5NCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3OTkuNjU0MTMxMiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTAuNDEwNTUwOCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTkuNTM2MzMyLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgyOS43MjAwMjY3LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgzOS42MDI3NTkxLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg0OS40NDU0OTMyLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg2MS4yNTY4ODksICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODcwLjA2OTk2OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODIuMjMzODgwOCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4OTcuMDA5MzA4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkwNi4wMDQ3ODg0LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkxNy45OTQxMjgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTI3LjgwODcxNDIsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTQyLjY0NjgwODQsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTU0Ljk5ODMxNiwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NjQuMTgwNjM3LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk3Ni4zNTkxNDQ3LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk4Ny43NTA4OTMsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTk4LjE1OTM4MzMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDEwLjY2ODYyMzcsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDIxLjQ3NDcwMTYsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDMyLjk4ODcyMTgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDQ2LjA4NzUzODUsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDU3LjcwMDU4MDgsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTQ3NDczX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjMuOTEzODU2NywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyNS4xNzQwMDA3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI2LjYxNTEyOCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyOC4yMTY4NzYzLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMwLjMzMjczMDMsICJzdGVwIjogNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzIuNzQ4NTksICJzdGVwIjogNSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzUuMDg1ODE0NSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNy4yMTIzMzQ5LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM5LjM3NzE0MTUsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDAuOTg1MTYzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQyLjY3OTkxODUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ0LjUwMjA0MSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDYuMzg3OTA1MSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDguMzg0NjI4OCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NTEuMjIxODI3MywgInN0ZXAiOiAxNCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NTQuNTgyMjQ4NCwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NTcuNjQzMjgyNCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjAuMDQ2NDkxNiwgInN0ZXAiOiAxNywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjIuNDYxNjUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY1LjA0MzE2NjQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY4LjE5MjA5NDgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDcyLjQ5NjAyMjcsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc2LjEwOTQ2MywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzkuMjI0MjYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDgyLjI5NDQ4MDgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDg1Ljg1MDQzNTUsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDkxLjEzOTQxMTIsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDk1LjI1MjM4ODcsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDk4LjgwMzAwMzgsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAyLjI5NjcwMDIsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTA4LjU2OTgyNjYsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEyLjgwNTYwMTQsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE2LjY1OTg2NjgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTIxLjEzNzkxMTYsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTI3Ljg5MzgwMjQsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTMyLjIxMDk0NDQsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM2LjQyMDk1MTEsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQyLjA0ODc5NDUsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ3LjUwODYyMjYsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTUxLjc1NDk1MiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NTYuNDkwNDMyNSwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjQuNTc0OTkyLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3MS41MTA3MiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NzYuMjQzODE4NSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODIuOTk0NTAwOSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODguODM1MzI3LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5My44MjI2MzAyLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwMC44MzE2NzcsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjA2Ljk1NzM1MTQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjEyLjA5Nzc5NzQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIwLjA0MDI0MjIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjI1LjcxMTg5NDgsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjMxLjU3MzcwMiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NDAuMjMzNjg5NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NDYuMTU0MDg2OCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NTQuMjQ0NzIyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2MS4zNDM2MjY1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2Ny44MzQxMzMxLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3OC44NzA5NTcxLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY4NS44NDI0MzYzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY5NS4yNTI0MDg3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwMS41NzY1NCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDkuOTE5MDAzNSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MTcuMjk4MTAzNiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MjQuNjIyMjkxOCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MzMuNDMxMzU5NSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NDAuMTcwNjMyNCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NTAuMTA4NDQ4MywgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NTcuMTY4ODc5MywgInN0ZXAiOiA2OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NjcuMTQzMTY5OSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzQuMzc2NTQyNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3ODQuOTY0NzQ4OSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3OTIuMTkwNTYxOCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDIuNTIwNjg5NywgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDkuOTkzMzUyNywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjAuNTI4MjA4NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjguMzk5MDMyLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgzOS4wMDQ4ODksICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODQ2Ljg3MDE4NCwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTcuNTgyNDkyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg2Ni4wMTE2NTMyLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg3Ni43MTg3MjQ1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg4Ni4xNDI0NTY4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg5Ni4wNjQ1NzAyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkwOS44NDQwMTQsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE5LjI5NjM0ODMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTMxLjc1Mjk0ODUsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTQyLjU2NzA5NzQsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTU0LjI2MTg4MDYsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTY1LjE5Nzc0MzQsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTc1LjA4MzUyMDQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTg3LjA0NTM4MDgsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTk2LjU0MTczMDYsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDA4LjQ3MTk2NDYsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDIwLjI0NTQzNTUsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDMwLjAzOTM2MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNDIuNTIzOTgwOSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNTQuMDYwMDg2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA2NC44MTY0NDAzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA3Ny4zODQ3NzU2LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9XX19XQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Aggregator/train/avg_loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7InB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzkxNzYwX0JTMTI4IjogW3sid2FsbFRpbWUiOiAxNjk1MjAwODMwLjQ5OTA5OTcsICJzdGVwIjogMCwgInZhbHVlIjogMS4wOTU1NDExMTk1NzU1MDA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzEuODMzMzE1OCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjA4NDgyNTk5MjU4NDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMy4yOTI3MjEsICJzdGVwIjogMiwgInZhbHVlIjogMC42NDAwNjYwMjc2NDEyOTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzQuOTM1MDYzOCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQ4NzMyNTAxMjY4Mzg2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNi4zNDA5ODU4LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDM5NjE5MzkyMTU2NjAwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNy41NjQxNDg0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDA1MTMwNTY1MTY2NDczNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM4Ljg0OTI0NDgsICJzdGVwIjogNiwgInZhbHVlIjogMC40MTY0MDQxODc2NzkyOTA3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQwLjI0ODQzMywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQxNTY0MzUxMzIwMjY2NzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDEuNzExMjI1NSwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjM2MjIyNjE1ODM4MDUwODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0My4yODc0ODksICJzdGVwIjogOSwgInZhbHVlIjogMC4zODU0OTcyMTI0MDk5NzMxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQ0Ljk5NDg1MSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC4zNDE2Nzg2Nzg5ODk0MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDcuMzcxNzYyMywgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zMjc1MjcxOTUyMTUyMjUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTAuMzIxMDQxNiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40MzIzMDU5OTE2NDk2Mjc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTMuMzQ3ODY5LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMxODI1OTcxNjAzMzkzNTU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTUuNTA5NDY3LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM1NTMzNTQ0NDIxMTk1OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTcuNzI0MDU4OSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zMDU5OTk0NTc4MzYxNTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjAuMDExNDMzOCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zOTgzODIyNzYyOTY2MTU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjIuMzMwNzU3OSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC40MDY2NzE4ODE2NzU3MjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjUuMzE1MTczMSwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC4yOTk2NjEwNDAzMDYwOTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjkuMDgwNTQ2OSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4zMDg5NTAxMjYxNzExMTIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcyLjQzODk4NSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4zNTkwNjcyNjEyMTkwMjQ2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc1LjE0ODkwNDgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMzQ5MTM3OTAyMjU5ODI2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3OC4wMTEwMTA0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI3ODA0ODAwODY4MDM0MzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODAuODIwNTE2LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjM1NTYyNTc0ODYzNDMzODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4NS4xNDA0MzY0LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjMwMzM1ODYxNDQ0NDczMjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODkuNTU0NzIwNCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yNzIxMTIzMDk5MzI3MDg3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkyLjYyODQyODUsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMjQ3NDk5NjE0OTUzOTk0NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5NS44ODMzNDk3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjQ0NTgyMTEwNjQzMzg2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5OS4xMDgxNDI0LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjMwNzc3NjAwNDA3NjAwNDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDQuNTI0MTAyLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjQ1MTUxOTI4MDY3MjA3MzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTEuMDcxMjUwNCwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zNzY3MzMxMjQyNTYxMzQwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE1Ljc0MDIzNSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zODg3NDc4MTEzMTc0NDM4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE5LjQwNjc0NjksICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuMjg4MDIxNTM0NjgxMzIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI0LjkxMzMzNTgsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMjc3MDgxMTYxNzM3NDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjkuNjE3NjA2LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjIyODUzODUxMzE4MzU5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzMuNTU3MzEyLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjIwMTIxNDM0MzMwOTQwMjQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzcuNTM0NTI3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjI0ODI4OTA3ODQ3NDA0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0My44MzY2NTYzLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjUwMTEzNDM5NTU5OTM2NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0OC41Nzc4NDE4LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI1NTIyNzE3ODMzNTE4OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1Mi44MDk1ODQsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMjI5OTYzODA5MjUxNzg1Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1OC4yMDM4Njc0LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI4MjIzNDYzODkyOTM2NzA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjUuMDg2NDE4MiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4yNDQ2ODA0NjQyNjc3MzA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NzEuNzE0MTczNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMTYyMzY3MTA1NDg0MDA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTc4LjAyNTA0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjI2MjI4ODE1MzE3MTUzOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4My42OTY3OTk1LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjI4Mjc2MjQwODI1NjUzMDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5ODguNDk5MjM1NCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yNTQzOTY2NzcwMTcyMTE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTQuNzYxOTg0NiwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4zMTU2ODUyMTI2MTIxNTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDEuMTUxNDQ3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjI2MTg0NTA1MjI0MjI3OTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDYuMzIzMTg4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjIxOTUxMDAwMzkyNDM2OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAxMy4wOTgwNzczLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjIzMzk1OTAxOTE4NDExMjU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMTkuNDEzMTQzNCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yOTgyMzI0NjU5ODI0MzcxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDI0Ljc0MDE2MDUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjM5OTcxNjIyODI0NjY4ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAzMi40NTgzNzE2LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjIzMDQ4ODEzNjQxMDcxMzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAzOC41Mzc5NjIyLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI0Mjc3MjY2ODYwMDA4MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA0NC4yNjY2MTA0LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjIyMjM4ODA3MzgwMTk5NDMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTIuODU5ODgwNywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4zMTYwNjUxNjI0MjAyNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTguNjcxMjc4NSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4zNDM5MjkyMzExNjY4Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjYuMDMzMTg1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjIzODEyNjI2MzAyMjQyMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3My4yNTkwNjU2LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI1MjU5MTYwOTk1NDgzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDc5LjM3MDY5MTUsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMzgyNDg5MjA0NDA2NzM4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDg4LjI5OTA5NjgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNDk3NTY2Nzg5Mzg4NjU2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDk0LjY2OTU3NDMsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjAyMTY4OTU2Mzk4OTYzOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEwMy4zMjU4NDc2LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjIyMTU0MDU3MDI1OTA5NDI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMTAuMjM0Mjk5NywgInN0ZXAiOiA2MywgInZhbHVlIjogMC4zMzMyNjgxMzU3ODYwNTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMTcuNzM2MTI2LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjIyMjcyMzA1MTkwNTYzMjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMjYuMDY4ODY0NiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC40NjU2Mzk0NzIwMDc3NTE0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTMzLjA0NzA2NDMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMTkyMDU3MjIyMTI3OTE0NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE0Mi41NzI0OTgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTc1ODM3NDU3MTgwMDIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ5LjQ2NTQ2OTEsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNjcwNjAxMzY3OTUwNDM5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTYwLjYyMTEzMTcsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMjQ3OTM0MzI2NTI5NTAyODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE2OS44NzY5OTksICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMzE0MDkwODQ3OTY5MDU1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc5Ljc0OTYyMjYsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTgxNTQzNzY3NDUyMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE4Ny45NTQ1MjMzLCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjI3NDE2MjYyMDMwNjAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk3Ljc5ODEyMjIsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTY2NjUzMjAwOTg0MDAxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIwNi4zMDEyMzcsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMTk1NDUzNDM1MTgyNTcxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjE2LjI4NDIwMjYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzI5OTkyODkwMzU3OTcxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjI1LjA2ODczMywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMDE2MDk4NDk5Mjk4MDk1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjM0LjUxMDk1MjIsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMzI1MTU1Nzk0NjIwNTEzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjQ0LjEyNTQ4LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjIwNjE1MDc4NTA4ODUzOTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNTMuMjI0MTAzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjM2ODY4ODg4MTM5NzI0NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI2My43MDA0MzU2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjIwMzM3NjUxNjY5OTc5MDk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNzIuMjIwNjM0MiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMzYxMjc3OTM3ODg5MDk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODMuNDQ0NzI1OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4xODg2MTE1NjcwMjA0MTYyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjkxLjY4MzM3MywgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yNDAxMzkxNTY1Nzk5NzEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDIuOTA4NjI4NSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4yNjk0MjgzNDI1ODA3OTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMTIuMDA2ODQ4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjE5MDc3MzY1MTAwMzgzNzU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMjUuMzQ2MDM5MywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yMTczMDE1NDc1MjczMTMyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzM3LjU5OTA5MzcsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNDcyMTgxNjQ4MDE1OTc1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0Ni45OTU4NDE1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjIyNzI3MDU0MzU3NTI4Njg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNTguNzc3OTAyMSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC42MjIxNTEzNzQ4MTY4OTQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNzEuMTg2MjI2NCwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC43NDkwOTM0NzI5NTc2MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzODAuNjgwNzE2LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjI1NTIyMTM2Njg4MjMyNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM5My4wNDg5NjY0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjUzOTE0MDcwMTI5Mzk0NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQwNS40MDg4MTY2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjIwNzU0NjE0NDcyMzg5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQyMC4xOTUxODk3LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjM0MjMyMDM1Mjc5MjczOTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzIuMTE5OTg3MiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4zODQ1MjA3NjkxMTkyNjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NDUuMTA2Njc1OSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4xNzEwODQ5NTUzMzQ2NjM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NTYuOTY3MjY0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjY3NDEzNDI1NDQ1NTU2NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2OC40NjI2NTM0LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjIyNDY0MjkzMjQxNTAwODU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0ODEuOTg1OTA4MywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC41MjY2NjIxMTEyODIzNDg2fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF83OTE0M19CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjA0Mzg1LjUxMTQ3NjgsICJzdGVwIjogMCwgInZhbHVlIjogMC44MDQ2MjQwODA2NTc5NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ni4zNDU2ODcyLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTU4OTc0ODYyMDk4NjkzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg3LjI3NDczLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNTQ2NjI1MDE4MTE5ODEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODguMjc0MjU2MiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjU5NzUwNTc0ODI3MTk0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS4zOTY2NjIyLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDY1Mzk0OTE0MTUwMjM4MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MS4yNjc2MzAzLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDI3MjQyMDcwNDM2NDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5My4yNzQzODUsICJzdGVwIjogNiwgInZhbHVlIjogMC40OTU3Mjk0NzYyMTM0NTUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTUuMzQxNDY2NywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjMzNTA2ODI4NTQ2NTI0MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Ny4zODc5OTYsICJzdGVwIjogOCwgInZhbHVlIjogMC4yODU3MjA5NzQyMDY5MjQ0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk4LjkwMjk3NCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQwNTgxNzc3NjkxODQxMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDAuNTIxNTU1NywgInN0ZXAiOiAxMCwgInZhbHVlIjogMC41MDM2MjU5ODg5NjAyNjYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDIuMzE4ODg4MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zOTM4NDA4NzkyMDE4ODkwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA0LjE0MTg2NTcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjcxNDEwNTg0NDQ5NzY4MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNi4wNDY5NzY4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjUwMDYwMDY5NTYxMDA0NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwOC41ODMzNDA0LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM5MTEzMjkyMDk4MDQ1MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxMS45NTA0MzMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzY4Njg5MTc5NDIwNDcxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE1LjIyNjMxODQsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNDA3MDQ4MTY1Nzk4MTg3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxNy40NzIyNzU3LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjI5ODE0MTE4MTQ2ODk2MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxOS44ODQ2MDMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNDEwNTc0Mjg3MTc2MTMyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIyLjM0MDc1NjQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNTg3MTYxMTgzMzU3MjM4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI0Ljg2Nzc4NDUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjgzNTYzNDM1MDc3NjY3MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQyOC44NTA2Mjg2LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI2NTU5OTQ1OTQwOTcxMzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzIuOTI4MTkyOSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNDE3NjYyOTc4MTcyMzAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzUuNzcwMDEyMSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMTY5NTMxODIyMjA0NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQzOC45Mjg0OTQ3LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjM2NjI1NTQ2MjE2OTY0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0My42NzU4NzcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMzAwMjI3OTQwMDgyNTUwMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0OS4zNTU5OTk3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIyMjMyOTQzNzczMjY5NjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTQuMDE0MTk1NCwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4yODgxNzMyNTgzMDQ1OTU5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU3LjUzNjU3NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4zNjYyOTU2NjU1MDI1NDgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NjEuMDAyNjk5NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zMTc0ODA3NDI5MzEzNjU5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY1LjA1ODcyOTQsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDQzNTEwMzUzNTY1MjE2MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3MC41NjY2MzY2LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjE2NDcwMDgyMTA0MjA2MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NzQuNDExNzk2OCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zNTI5Njg3MjI1ODE4NjM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NzguMTcxNDMzLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMxODQ3MzM2ODg4MzEzMjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0ODIuNDE3MjQ0MiwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMjg2NTQ3NjYwODI3NjM2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg4LjM5MTYzODgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMzY0MjE4Mjk0NjIwNTEzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDkyLjQxNzc1NzcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzY0MDg5NzI3NDAxNzMzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk2LjQ3MTU2NiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC40NDUwNjcyNTY2ODkwNzE2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTAxLjg1NDQxNDcsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMzA5NTQ0MzI0ODc0ODc3OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwOS42OTkzNTU0LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI1MDQ3NDg3MDIwNDkyNTU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MTUuNDczMDYxMywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4yMDk0MjI2Nzc3NTUzNTU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE5LjgzODk3OCwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4xMDkzMDA5NTYxMzAwMjc3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTI2LjY1MzU5NSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMTgwMTYyNjY4MjI4MTQ5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTMxLjcyNjk4OSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xOTUxNjU5MDIzNzYxNzQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTM2LjQ4NzEzNTIsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTkwOTA5MzcwNzc5OTkxMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU0My4yNjk3Njc4LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjE2MTk3NDk5NjMyODM1Mzg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NDkuMTcxNjIyLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjM1ODkwMDkwNDY1NTQ1NjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NTQuMTY0NTMxMiwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4yOTc3MTUyNzY0Nzk3MjEwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTYxLjQzNTI5OSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMjMxNjk2NTQ2MDc3NzI4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTY3LjI0NTg5NzgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzY3OTQ3NjA4MjMyNDk4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU3Mi40ODgxMjA4LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjI3Njc3ODM0MDMzOTY2MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODAuMzI3MTMyMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC40OTc4Nzc4NjYwMjk3Mzk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODUuOTcxNjYxMywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4zMTI3MDU5MzQwNDc2OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5MS43MjY4MzY3LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjE5ODQ4NTI0MDM0MDIzMjg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDAuMDI3MDgzMiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC4zMDc5NzQzMzg1MzE0OTQxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjA1Ljc2MzIxNDMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMjE1NDA2NzE1ODY5OTAzNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYxMy4wNjQ3NDg4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjE1MzczMjAxNjY4MjYyNDgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MjAuMjQ0MTgxLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjE5Mzk0NTMxODQ2MDQ2NDQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MjYuMjAxNzQ0NiwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4zMzE5NTcxMDE4MjE4OTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MzUuMTAwNjk1OCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xOTg4NjI3OTEwNjE0MDEzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQxLjQ4Mjc4NDcsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMjIxNzc3NjE3OTMxMzY1OTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY0OS43MzUyNzg0LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjEzMDAzMjM2MDU1Mzc0MTQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTYuOTA2NzcxLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjE2NjQxMzI0NzU4NTI5NjYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjQuMDQyNjM0NywgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yMDUyNzU0MzEyNzUzNjc3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjcyLjYyOTU1ODMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMzQ0NzEzODM2OTA4MzQwNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY3OS4yNjE4MDY1LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjE3OTY2MzI0MDkwOTU3NjQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODkuMDQ3MTE3NSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yOTA2OTUyNTAwMzQzMzIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTkuMTU5MDcxLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjE4MTkwODMyNDM2MDg0NzQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MDguMzIzNTY4NiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNjE5MTE0MjIwMTQyMzY0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzE1LjI5MTYyMDMsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTM0NzE3NTI0MDUxNjY2MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcyNS4xNzc3OTQsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMjIzMDU3NDc4NjY2MzA1NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDczMi40ODcxOTY3LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjE1MTg4Mjg4Njg4NjU5NjY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDIuNjQ5Nzg4NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4zNDE4MzY1NDE4OTEwOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc0OS45ODg2NDg3LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjMzMzg3OTgyODQ1MzA2Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NjAuMjk5Mzk1NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4yMzkwOTE1NDUzNDMzOTkwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzY3Ljk4MTEwNDksICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzQ3MDkyNjU4MjgxMzI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzc4LjcyNzUyNDgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMjkxODg5MTkwNjczODI4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzg2LjM0ODczNjUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMTc4OTIzMTg5NjQwMDQ1MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc5Ni45ODA4NjU1LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjE5NDMwMDc1NTg1ODQyMTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDUuMjY3ODI4NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xOTQzOTc4MzY5MjM1OTkyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODE1LjkwNDU4MDYsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMjE3MTA1OTU0ODg1NDgyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODI1LjMwMzg3NTQsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTUwMTQ4NjU5OTQ0NTM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODM1LjQ0Nzg5MzYsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMzI4MzE5OTY2NzkzMDYwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODQ2LjA0ODg0NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4xNjA0Mjg1OTg1MjMxMzk5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODU4Ljk3Nzg1MjgsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjM3MjExOTEyODcwNDA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODcwLjYyNzc1ODMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMTY2MTQ1NDI5MDE1MTU5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODgxLjg3MTg4MDgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjE3NDIxMDI1MDM3NzY1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODkxLjY4Njg5NjYsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjUwOTY2Nzg3MzM4MjU2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkwMy4zNTgxMzc0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjE5NTMxMzM5NDA2OTY3MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTIuNzQwNzU0NiwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xMzMyMzU5MDE1OTQxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkyNC4yNzkwMTc0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjMwNDE1NjUxMjAyMjAxODQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MzUuNzA4MjYwOCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yNzU2MTIzODQwODA4ODY4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTQ5LjEyNTMyNDUsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMTAxOTUyNTA4MDkxOTI2NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk2MC43MTk0NDQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMTcwNjAyMTI3OTA5NjYwMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk3My4wMjYxNTkzLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjE3Njg5ODA5MjAzMTQ3ODg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5ODIuOTA5Nzg3NCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4wODQ1OTE1OTczMTg2NDkyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTk1LjgwNjYyMzcsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMjM3NTgyNTk0MTU2MjY1MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAwOS4yNTk4ODQ2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjI4MDgzNzg5MzQ4NjAyMjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUwMTkuNTE3OTQ5LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjQ4NDEyODkyMjIyNDA0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAzMi4wODA4Mzg3LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjE5MDczOTY5MTI1NzQ3Njh9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzQxNTMzX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODQuODIxMzAwNywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjYyMjc5ODc0MDg2Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4NS45ODk0MzE2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTg0MzQ0NTY1ODY4Mzc3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg2Ljk0MDc0MzQsICJzdGVwIjogMiwgInZhbHVlIjogMC40NjY2NTE5NDYzMDYyMjg2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg3Ljk1MDcyMywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjMyMDYzMjc4NTU1ODcwMDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODkuMDkyMDIxMiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQzOTIxNjM0NTU0ODYyOTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTAuMzAzOTgxLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjE5MDMxNjY3NzA5MzUwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkxLjYwMTM3OTksICJzdGVwIjogNiwgInZhbHVlIjogMC43MTI0MzkwNjAyMTExODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTIuOTk5MjcxNCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQ4NTQ5OTA4Mzk5NTgxOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NC40NzkyOTQsICJzdGVwIjogOCwgInZhbHVlIjogMC4zNDE4ODUzNTgwOTUxNjkwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk2LjI5MDY4OCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjI0NDY5MzEwMDQ1MjQyMzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5OC44NjY0NDgyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjg2NDI5NTU0MjI0MDE0Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwMS41NTkyNTU0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI1MjU2MzIwODM0MTU5ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNC4wNjM0MTkzLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjMwMTkyMjIwMjExMDI5MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNi4wMjIwMzYzLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjUxMDY3Mzg4MDU3NzA4NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwOC4wNjE2MTcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTAzODkyMDA0NDg5ODk4N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEwLjE3MjQwNTUsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDE4MDMzMTUyODE4Njc5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEyLjQxNjg0MTUsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDUuODU5MTA5NDAxNzAyODgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTUuNTM1OTkyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjQxNTg2MTg3NDgxODgwMTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAxOS4yOTQwNTMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjE2NjAyMDYzMTc5MDE2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIyLjU0MDM3NDUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMTQ4NDc0MTg2NjU4ODU5MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyNS4xMzQyNjcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODUyMjUyOTYwMjA1MDc4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI3Ljg0MzU1NzYsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNTU3MjY2MTE2MTQyMjczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzAuNjQxMzQ1NSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNjQ4NDI0NDQ2NTgyNzk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzQuOTU0OTg3OCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zNTE4MzM1ODE5MjQ0Mzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDAuMTAyMzU3MSwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43OTkwMDI5NDU0MjMxMjYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDUuMDA3MzExLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjIwMzQ0MTE0MzAzNTg4ODY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDguNjE3MDkzOCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC42NjIyNjE0MjY0NDg4MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1MS44OTM1NzQyLCAic3RlcCI6IDI3LCAidmFsdWUiOiAyLjY4ODIzMDAzNzY4OTIwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU1LjUwODE4OCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC40NjU0MDA2MzYxOTYxMzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjAuODQ1NjA4MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4xNDc5OTM1NDk3MDQ1NTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjQuOTk0ODY0LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjI5MTQ4MzEwNDIyODk3MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2OC42NTU0ODc1LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjQ0MDMxOTA2MTI3OTI5Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA3Mi4zMDI0NTczLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjI3OTI4NDI2ODYxNzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzguMTYxMTc1MywgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yMDMwODYzNDYzODc4NjMxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDgyLjUzNDY2MTUsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuMzcwNjA0OTMyMzA4MTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODYuNTAwMTY0MywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNzYzNTA4NTU4MjczMzE1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDkwLjk5MDcxNTcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzY2NTY0MTg0NDI3MjYxMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Ny40MzQxODE1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjQwNTQxODY5NDAxOTMxNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwMS42ODk3MjAyLCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI5OTY5Mjc0OTk3NzExMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwNS45OTg0OTQ5LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjM2OTY2MzgwNDc2OTUxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTEyLjM5Njg4MDQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDEuMDMxMTQ5MDI5NzMxNzUwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTE3Ljk5ODIyMTksICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjMzODgyNTQ2NDI0ODY1NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyMi42MDUzMjI4LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjE4ODkzNjc0MDE1OTk4ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyOC4zOTY2MzQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNDMyODM1MTMxODgzNjIxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTM0Ljk4OTk1MTEsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNTI1ODk4NzU0NTk2NzEwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTM5LjgzNzg0OTYsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDIuOTYwNzY2MzE1NDYwMjA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNDUuODI0NzEzLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjMxNTk5Mjg5MTc4ODQ4MjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNTIuNjQxMzcxNSwgInN0ZXAiOiA0NywgInZhbHVlIjogMS44NDQ3MzcxNzIxMjY3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU3LjkyNzI0NjYsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMzY2OTQzODk1ODE2ODAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNjQuNTEyMDMxNiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4zMzcxMjIwNTI5MDc5NDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzMuODIyNDExMywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yNTAyNjM0NTI1Mjk5MDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzkuNzU3ODMzMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4yNzM4NTAyMzIzNjI3NDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODcuOTcyNTc2MSwgInN0ZXAiOiA1MiwgInZhbHVlIjogOC45Njg4MTg2NjQ1NTA3ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5My42MDIyODg1LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjE3MzU2OTM1MTQzNDcwNzY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTkuODM3NDU5NiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC42OTYyMzY3Mjk2MjE4ODcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMDcuOTkwNjcxNCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC41MzQ2MzMxMDAwMzI4MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTMuOTA0ODgyNywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC40Nzk1MDg5MDY2MDI4NTk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMjEuOTUzMjA2OCwgInN0ZXAiOiA1NywgInZhbHVlIjogMC41NjE1ODk3MTc4NjQ5OTAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMjguNjE4ODM1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAyLjQ2MzAwMTI1MTIyMDcwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjM1LjA3MDk5LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjE2MjU4ODMyODEyMzA5MjY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNDMuNTk3MzExMywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC41NzgyOTkxNjQ3NzIwMzM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTAuMDE1NTI4NywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC42NDI2MDE0MzA0MTYxMDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTkuMjIxMjM4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAxLjE1NDY1MjM1NzEwMTQ0MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI2NS44MTMsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDIuMDcxNzQ2ODI2MTcxODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNzQuMjQ2OTgxOSwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4wODg3MjEyNzUzMjk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjgxLjk0MjQwOSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4yMTMxMDQyNDgwNDY4NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI4OS44Njg0Mzc1LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjEwOTk3MjAyMjQ3MzgxMjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI5OC43NDM4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg3MjU2MzgzODk1ODc0MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMwNi4xMTA3MjQ3LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjE2NDQ2MjkwOTEwMjQzOTg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMTUuNjg4NDUyLCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjQwODAyNTA4NTkyNjA1NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMi44OTQ3NjUsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMjg0MTkwNTA1NzQzMDI2NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMzMy4xMDAwNzcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMjQ1NDY0MDU2NzMwMjcwMzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0MC42OTk0Njg2LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjQ4MDI4NDI0MzgyMjA5Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1MS4wNjIwODkyLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjE3ODk4NjUxOTU3NTExOTAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNTguODE3NzcyMiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xNTI2NzEzMzcxMjc2ODU1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzY5LjMwOTg2NTcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzQ1MDAxMjIwNzAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNzcuMzAzOTYyNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4zMTAwMDg4ODM0NzYyNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzODguNDA1MTUxNiwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4xMTA5NzIxODg0MTMxNDMxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDAwLjk5NDk4NjgsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjgyMDkzMzQ2MTE4OTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDkuNTY4NDUxNCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yNzA4Mzc5NjI2Mjc0MTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MjEuMTUwNTc4LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjE5ODIxMTA4ODc3NjU4ODQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MzMuMDM0Nzk1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjIyMDcxOTQ0MTc3MTUwNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NDMuNzkzMTM2LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjE2MzIzOTc3NzA4ODE2NTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NTMuODc3ODI5NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMy4xMjgzMjk3NTM4NzU3MzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NjMuNTQ2MDUxLCAic3RlcCI6IDg0LCAidmFsdWUiOiAyLjY0NzMzMDc2MDk1NTgxMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ3NS4xMDU5ODE2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjIxOTU3MDE4OTcxNDQzMTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0ODMuOTExMTY2NCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC42MDYwNzAxNjA4NjU3ODM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0OTUuNDE1MjEyOSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4zOTAwOTU1MzE5NDA0NjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MDQuNjM3ODQxNSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMS4xMjQ1NjA1OTQ1NTg3MTU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MTUuNzkyNjQ5LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjIyOTI5NjkwNzc4MjU1NDYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MjcuMjY2MzM3OSwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4zNTAyNzUwMDk4NzA1MjkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzYuNzk4MjU5NywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yMDI4NDgzNTk5NDI0MzYyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTQ4Ljc2ODEzMTcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDEuMTA4NjY2NDE5OTgyOTEwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTU5LjI0NTcxOCwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xMjMxODE0MDI2ODMyNTgwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTcwLjQyNTA0MzMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuNDkzNTEyODY4ODgxMjI1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTgyLjc4MTE0NTgsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTg4NjU2NzkyMDQ0NjM5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTkyLjcyNzczOCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4yODkxNjgzMjgwNDY3OTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MDQuODI4Mzc3MiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4wOTgwMzM3MTEzMTQyMDEzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjE3Ljc3NjAyNiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yNTc4MjM0OTcwNTY5NjEwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjI3LjcxMjM2OSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4zMDU3NTQzNjM1MzY4MzQ3fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF81ODMwNl9CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjAyMzM1MTIsICJzdGVwIjogMCwgInZhbHVlIjogMC42NzYwMTI2MzUyMzEwMTgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzguMDMwMjY4NCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjcwMTUzMjAwNjI2MzczMjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OS4wMDg1OTksICJzdGVwIjogMiwgInZhbHVlIjogMC41MTYwNDk4MDIzMDMzMTQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODAuMTAyNDQ1OCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjMxMDAyMTYzODg3MDIzOTI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODEuMjYxMjE1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuODA0NDUzNzkwMTg3ODM1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjQ4ODg0NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM0OTU1ODI5MzgxOTQyNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4My44Mzk4NzgsICJzdGVwIjogNiwgInZhbHVlIjogMC4zMjk5MzY0NDQ3NTkzNjg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODYuMDg3NzM4NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjM2NTEwMzM2Mzk5MDc4Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4OC41OTMwNzQsICJzdGVwIjogOCwgInZhbHVlIjogMS40MDQ0NzQ3MzUyNjAwMDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTEuMDE2MDg5NCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQzNDM5NTU1MTY4MTUxODU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTIuOTkxNDU0NiwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC4yOTU2Mjc1MDQ1ODcxNzM0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk0Ljg1NzMyNDQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMjkzMDc4NjMxMTYyNjQzNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ni43OTQwNzcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzM1MzY5OTE0NzcwMTI2MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OC44MTk1MDI4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMzNzk4NjkxNjMwMzYzNDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDAuOTk3Nzk3NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43OTY3MzMzMTk3NTkzNjg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDMuOTkxNjY4MiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC40MzIxOTQyOTI1NDUzMTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDcuNTMxOTE0LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjUxNjQ5MDU3ODY1MTQyODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAxMC43MDQzNDEyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2MDIxMDYwOTQzNjAzNTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAxMy4yNDI3Nzc4LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjMzMTI2MzkyOTYwNTQ4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE1LjgxNjgyMzIsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzQ2MTcwODQyNjQ3NTUyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE4LjQzNjM2NTEsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjMwMzUxNjAzMDMxMTU4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDIyLjEyMzYxMSwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4xODMxNTk1ODk3Njc0NTYwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDI2LjM5ODgyMSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42MTAxNDU3NDc2NjE1OTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjkuNjUxMjA4OSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC41MTI1NDg0NDY2NTUyNzM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzIuNjM5NDgwNCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43MjU5NjM4MzA5NDc4NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzNS42NDE4Mzc0LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjU3NTg2Mjg4NDUyMTQ4NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzOS40MjE0MjksICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMzM0ODYwODYxMzAxNDIyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ0LjQzNjI1OSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4yMTMzNjA5MDU2NDcyNzc4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ4LjA1MDY4MjMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzE3MDM4MjczODExMzQwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUxLjQzODYyODQsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTcwMTg0NzkxMDg4MTA0MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1NS4wMzgxMzUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMzk2MTkxNTk2OTg0ODYzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDYwLjUyNTExMTIsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMzUzODk4Mjg2ODE5NDU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjUuMTk2NjMyNCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4yNDUwMTMyNjY4MDE4MzQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjguOTU4Mzk2NywgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zNzcwNTA0ODkxODcyNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzIuNzc0NDUxNSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC40MDkwMDc2MDg4OTA1MzM0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDc4Ljg0MTQ4MjIsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNDg1ODQ0MTA1NDgyMTAxNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4My41ODM4MTUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzI4NzE2ODc0MTIyNjE5NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4Ny42OTExOTM2LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMwMTQyMzQzMDQ0MjgxMDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwOTIuNTQzOTI0MywgInN0ZXAiOiAzOCwgInZhbHVlIjogMC41MDkzODY2NTg2Njg1MTgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwOTguOTYyNTc3NiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC40MjMwNDQ0NDMxMzA0OTMxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTA1LjcyODAxNjQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMjc4NjA4NDExNTUwNTIxODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExMi4yNzEzMzQsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNjA2MjkyMDY4OTU4MjgyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTE4LjIzNzU0NTcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNTMxODMzNTg5MDc2OTk1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTIyLjg2MTc0NzMsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDEuMTI5OTExNjYxMTQ4MDcxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI4LjI1NzQ0MDMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMjcwMzg4NDU0MTk4ODM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM1LjA3NjUwMjMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMzEyMjkzNDQwMTAzNTMwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQwLjA0MDYyNDYsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjY2NDUyMDQ0MjQ4NTgwOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0NS42MDQ0NTg4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjQ5MDIzMTYzMzE4NjM0MDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNTIuOTg4MTg5MiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMzY5NjI3OTUyNTc1NjgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTU4LjEyMDI3NTMsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzQwMDY5MTc0NzY2NTQwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTY0LjU3OTgzMTYsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNDEyMjA2ODI4NTk0MjA3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE3MS42MDc4MzYyLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjQxNzc5MjMyMDI1MTQ2NDg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzcuMTIzMzUwOSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC40NTExODc5MDg2NDk0NDQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODUuMTExOTIwNCwgInN0ZXAiOiA1MywgInZhbHVlIjogMS45MjM0NzE0NTA4MDU2NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5NC4yMTc2NjE5LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4NzIzODg2MDEzMDMxMDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwMC4yMTU5NzEyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjMwMDQ5NjAxMTk3MjQyNzM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMDguOTQ3NjM2NCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yMjExMDE2MTE4NTI2NDU4N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjE0LjkxNjM1NywgInN0ZXAiOiA1NywgInZhbHVlIjogMC4yMjgwMTk4MDM3NjI0MzU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMjIuNTYwNjIwMywgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4yNTgwMzg4MTg4MzYyMTIxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI5Ljg2MTA5MDQsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMjY2OTE2MDY2NDA4MTU3MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIzNi4wNTY4NDAyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjE4MDE3NjU4NTkxMjcwNDQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNDUuMzY1OTQyMiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC40NjMwOTM1Nzg4MTU0NjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTEuNzkxOTgzOCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4zMTIxNDc0Mzg1MjYxNTM1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjYwLjcwNDU1NjcsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMzczNDU3MDQ0MzYzMDIxODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI2Ny42OTYyODk1LCAic3RlcCI6IDY0LCAidmFsdWUiOiAxLjY1NDg4NjYwMzM1NTQwNzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI3NS45MjQyMTY3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjY1MjUyMjU2MzkzNDMyNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI4My44NzY5OTYzLCAic3RlcCI6IDY2LCAidmFsdWUiOiAxLjU1MzI4MDExNTEyNzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI5MS43Nzg1NDUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTg3ODYxNzc2MzUxOTI4N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzAwLjU2NDgzNTMsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNTQwMTk5MTAwOTcxMjIxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzA3Ljg2NTc3NTgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDEuNDIyMzk2NDIxNDMyNDk1MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzE3LjQxMDUzMDMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNTY4MDY0ODA4ODQ1NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyNC42NzY3MDksICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTk5MTM5ODAzNjQ3OTk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzUuMDI4NzU1LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjQ5NjcxOTEyMTkzMjk4MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM0Mi42MTY3NjUsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjg0MzUzMjI2NDIzMjYzNTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM1Mi44MzI5Mzk5LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjY1MzI5NDIwNTY2NTU4ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM2MC43MjMzNTcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNDI5OTMwNjg2OTUwNjgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzcwLjkxNDQxNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNzY2NzczMzEzMjgzOTIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzc5LjQyMjM0OSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4yMjk1OTY3MDQyNDQ2MTM2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzg5LjY0NjUxMywgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4wOTg0MzM0MjAwNjIwNjUxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzk4LjY3ODk4NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yMjkzNDk4MjE4MDU5NTM5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDA4LjQxODQ2MSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4wODQ1MTQzNDIyNDg0Mzk3OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDE4LjU5NDg4MTUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNzcwODEyODA5NDY3MzE1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDI3Ljg2NjA1NjcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNzUxNDA5ODg4MjY3NTE3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDM5LjQyOTQzNDUsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMzExMTU2NDgxNTA0NDQwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDUwLjQ1ODkxNTIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDEuMjM5Mzk4ODM3MDg5NTM4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDY0LjQ3Nzg5NjIsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNjA4MzcxNzM0NjE5MTQwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDczLjU5MjY0OCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC43OTE5MzY2MzU5NzEwNjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0ODQuOTM4NTA0NSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC45NTczNDA0Nzg4OTcwOTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTMuOTM2NjgyLCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjM2OTMzOTA0ODg2MjQ1NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUwNS4yODQ4MTksICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMDM0OTAzOTAyNTYwNDcyNDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUxNi4yOTA1Nzg0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjQzNjkyOTM0NTEzMDkyMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUyNi4xMjc2MTcxLCAic3RlcCI6IDkxLCAidmFsdWUiOiAxLjE2NTA4MDMwODkxNDE4NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUzOC4yNTkxNjkzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjA5MjM0NDU0NDgyNzkzODA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDguMTE2MDMyOCwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xOTMwMzM3ODQ2Mjc5MTQ0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTU5LjcwMTQ1NTgsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMjk5NTY3OTY3NjUzMjc0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU3Mi4wMjA3NTUzLCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjc3MDMwMTEwMzU5MTkxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTgxLjU0OTg0NCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMy4xMzY2ODI1MTAzNzU5NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1OTQuMDAyNTc3OCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yMDQyMTY1MTAwNTc0NDkzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNjA2LjE4NTE0MTgsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDQuODU4MzE1OTQ0NjcxNjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MTYuMzA4NTk1NywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC41NzY5NjAxNDY0MjcxNTQ1fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xODM4MjFfQlMxMDAiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDUzODcuNDgzNjkxNSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjg0MTY3MTk0MzY2NDU1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4OC40MDI4Mjg3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzYxMjQyNjI4MDk3NTM0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg5LjM5NDI3MTEsICJzdGVwIjogMiwgInZhbHVlIjogMC43MjU0NzEwMTk3NDQ4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MC41MDE3MTQ1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjMxNjcwOTUxODQzMjYxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkxLjY3MzUyODcsICJzdGVwIjogNCwgInZhbHVlIjogMC42Mjc0MjE2NzcxMTI1NzkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTIuOTkwMDU2NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjU5NDg3NzYwMDY2OTg2MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5NC45NDkxMDA1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNTE3MDgyNjkxMTkyNjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTcuMjk2MjkxOCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjUyMTM0NDU0MjUwMzM1Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5OS42Mzc0Mjg1LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNTE0MTA5MDE1NDY0NzgyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAyLjEwMDE3MDYsICJzdGVwIjogOSwgInZhbHVlIjogMC40MzcwMjMxMzMwMzk0NzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDMuODU5MzQxOSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40OTE4NDY4NTk0NTUxMDg2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA1LjY3MTA4OCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40NTAyMzYxNzE0ODM5OTM1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA4LjI4MTMwODcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNDQ1Nzk0ODIwNzg1NTIyNDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMC4zMTU4Njk4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0ODA3MzgwNDM3ODUwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMi43MTA1NjQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMzgwNjQwODA0NzY3NjA4NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxNi4xNzA5NDgsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzgwNzE0ODkzMzQxMDY0NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxOS41NzczMjE4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQyNzEwNzI3NDUzMjMxODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyMi4wMDQxODY0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjM3Nzc1NzM3MDQ3MTk1NDM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjQuNDk0MDgzLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjM5ODY1NDEwMzI3OTExMzc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjcuMDczOTUxNSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4zNjU5NDIxODAxNTY3MDc3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI5LjcwMzQ2NiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4zNDUxNTE2MDMyMjE4OTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MzMuODkzODkzNywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4zNjE4ODMyODI2NjE0Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzOC44OTU2MSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zMzg5NTYzODU4NTA5MDYzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQzLjgxNDI0NCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zNDkyMTAzMjE5MDMyMjg3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ3LjUzOTk1NTYsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNDE2Mzg4MzMyODQzNzgwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDUwLjYwMzI1MiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4zNzU0MjUzOTgzNDk3NjE5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDU1LjQ4NzM4NCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zNDQ2NTAzNTc5NjE2NTQ2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDYwLjA1NDkzNTUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuMzE3Njg3ODk4ODc0MjgyODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2My40NjQyNTI3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjM3NDcyMjI0MjM1NTM0Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Ni45NDUzNDA5LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjMxNTA1NjMyNDAwNTEyNjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzEuMzYyNDAzMiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMjc4MzIzNzA5OTY0NzUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzcuMDkyMTY3NiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zMTM4ODg1NDk4MDQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODAuOTI4MzEyOCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zMjIzMjQyNDYxNjgxMzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODQuNzM5NDQ2OSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zMDc0NTIxNDIyMzg2MTY5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDg5Ljg2MjYxMSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMDg1NzA2MjMzOTc4MjcxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk2LjEyOTI2NTUsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMjg4NjU2MDg1NzI5NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDAuMzA2MDA5LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjI2MjA2MTYyNTcxOTA3MDQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDQuNjQyOTA5NSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC4yODc0NjIwNTU2ODMxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxMS4xODU2NjY2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI5MjIwOTg2MzY2MjcxOTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxNi41MTQyNjE3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI4NTA2MzY1NDE4NDM0MTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MjEuMDkwNzI5LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI3MTMxOTAwMTkxMzA3MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyNy4wMzY1MjEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjY5NjcxNDQwMTI0NTExN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTMzLjMwMjcxNDMsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMjY5MDU5NTk4NDQ1ODkyMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUzOC4yMzczNzIsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMjY2NjM2MjIyNjAwOTM2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTQ1LjU5MDM0MDQsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMjM5MzAyNzI0NTk5ODM4MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1NC4zODExNDgzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjI1NzAxMjc1NDY3ODcyNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1OS41NDAyMTg2LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjI1NDQyODM4NjY4ODIzMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU2NC43NDcxNzYyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjIzOTYwMjUzNTk2MzA1ODQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NzIuOTYyMTQ4NywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yNDEyNjU4MDM1NzU1MTU3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTc4LjQxNzUxNCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4yNTM1MjYyNzAzODk1NTY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODQuODA1NzI2OCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yMzA4MjgzMTUwMTk2MDc1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTkyLjYxOTE4MTQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjY2NzM2NTY3MDIwNDE2MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5OC4yMjMwNzU5LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjM0MzI1NTgxNzg5MDE2NzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDUuOTY2OTU2MSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNjA0Nzk4OTcyNjA2NjU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MTIuNjg4NjExLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjIzODc2NDMxNTg0MzU4MjE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MTguNjAzMDMyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjI1NDM4ODUxMTE4MDg3Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyNy44NDc2MTI2LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjIwODkyNjcwNzUwNjE3OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzNC4wMDY3Mjg0LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjIxNzc5NTA1OTA4NDg5MjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NDIuMzg0MzY3NywgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4yMjQzMjU0NzgwNzY5MzQ4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjQ5LjQ1NTIxNzEsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMjI0ODQ4OTExMTY2MTkxMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjU2LjQ1NTA5NjIsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMTk4Nzk0Mzk0NzMxNTIxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjY1LjIwNzUxOTMsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjE5NDU5MjA1ODY1ODU5OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3MS45NzUyMjk3LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjE5MzEwNzQ4NTc3MTE3OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4MS43ODQ0NTc3LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjE3NTI3MzI2OTQxNDkwMTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2OTIuMjg3NzcwMywgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4xODg1OTc5MzI0NTc5MjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MDEuNjk0NjY4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjIyMjc5OTk1Njc5ODU1MzQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MDguNzM5NzYwNiwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yMTU1MjY1NTEwMDgyMjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MTguNjY3OTczMywgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yNTUwMTY4NjMzNDYwOTk4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzI1Ljc4ODcwOSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yMTA2NzczMjU3MjU1NTU0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzM2LjExNDA3MTQsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTk2MDM5ODU1NDgwMTk0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQzLjMyMzYyNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4yMzQwNTQyNjc0MDY0NjM2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzUzLjg2MTE0MDMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTkyMjk5ODcyNjM2Nzk1MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc2MS43MTUzMjMyLCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjIwMTgwNTQ3MjM3Mzk2MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3Mi41NzM1NjI2LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjIwMzA3MTU2NDQzNTk1ODg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3ODAuMzgxMDc4NywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xNjk5NjgzMzY4MjA2MDI0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzkxLjM0NTM1MTcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTg0OTY5MDIyODcwMDYzNzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc5OS42NTQwMTU4LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjIwNjY5MTkyMDc1NzI5Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgxMC40MTA0NTc2LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjE4NTY3NzQwOTE3MjA1ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgxOS41MzYyNDQsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjA5MzkyODAwOTI3MTYyMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgyOS43MTk5MiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xODA0MjcyNTMyNDYzMDczN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODM5LjYwMjY1NjQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTc0NTQ2MDYyOTQ2MzE5NTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg0OS40NDUzOTU3LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjE1ODI4MDgxOTY1NDQ2NDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NjEuMjU2Nzc2MywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4xNzI2NTgyMDUwMzIzNDg2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODcwLjA2OTg3NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4xNTg2MjIzODQwNzEzNTAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODIuMjMzNzg0NCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4xMzk3NDc0NzA2MTcyOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4OTcuMDA5MjA0NiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4xNjA3MTg1NzUxMTk5NzIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTA2LjAwNDcwOSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4xNzU3MDA4NDMzMzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkxNy45OTQwMzgzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE2MTk2NjU5MjA3MzQ0MDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MjcuODA4NjIzNiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4xNzA0NDE0MDM5ODUwMjM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NDIuNjQ2NzI2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjEzNDE1MzEyNzY3MDI4ODA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NTQuOTk4MjI0NywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4xNDQzMzUzNDQ0MzM3ODQ0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTY0LjE4MDUzODcsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMTQ5Njc0OTUyMDMwMTgxODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk3Ni4zNTkwMzcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMTQyNjM4ODMyMzMwNzAzNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk4Ny43NTA3Njc3LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjE0NTk4NTY2MjkzNzE2NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk5OC4xNTkzMDcsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMTMyODI5NzEwODQxMTc4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDEwLjY2ODU0MzMsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTYzMDU0ODUzNjc3NzQ5NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAyMS40NzQ1OTQ0LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjEyNDYwNDk2Mjc2NjE3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAzMi45ODg2MjEyLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjE1NzQ4Nzg2OTI2MjY5NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjA0Ni4wODc0Mzc2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjE2MTczOTYxNzU4NjEzNTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNTcuNzAwNDYyOCwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xNTM1MjQwMTEzNzM1MTk5fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xNDc0NzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwNjQyMy45MTM3Nzk1LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNzQwNzUwNDkxNjE5MTEwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI1LjE3Mzg5NTEsICJzdGVwIjogMSwgInZhbHVlIjogMC40NDI0OTQ2MzA4MTM1OTg2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI2LjYxNTAyMDgsICJzdGVwIjogMiwgInZhbHVlIjogMC41Mjc3NjYxNjgxMTc1MjMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjguMjE2Nzc3MywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQwMDgxMjAyOTgzODU2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMwLjMzMjYxNjMsICJzdGVwIjogNCwgInZhbHVlIjogMC4zOTI0MzQ5NTQ2NDMyNDk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzIuNzQ4NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQwMjU0NzE4MDY1MjYxODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNS4wODU0OTQsICJzdGVwIjogNiwgInZhbHVlIjogMC4zNDkyMjI3MTk2NjkzNDIwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM3LjIxMjIxNzYsICJzdGVwIjogNywgInZhbHVlIjogMC4zMzA2NDU5NDg2NDg0NTI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM5LjM3NzA2NDcsICJzdGVwIjogOCwgInZhbHVlIjogMC4zNzk3NzQ0NTEyNTU3OTgzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQwLjk4NTA4MTQsICJzdGVwIjogOSwgInZhbHVlIjogMC4zNTA5NTQzODM2MTE2NzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDIuNjc5ODM0MSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC4zNjI5MTA2ODc5MjM0MzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDQuNTAxOTQ4NiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4yOTQ1MjU5ODA5NDk0MDE4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ2LjM4NzgyNiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yNTY2MDU5ODI3ODA0NTY1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ4LjM4NDUzOTYsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTA2OTI2Mjk4MTQxNDc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUxLjIyMTQyMjcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMzY0Nzc0NDk1MzYzMjM1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU0LjU4MjE0MzMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzczODQzNjY5ODkxMzU3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU3LjY0MzIwMDQsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNDEyOTY3MzgzODYxNTQxNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2MC4wNDYzOTAzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjI2MjI4OTc5MjI5OTI3MDYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjIuNDYxNTcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzUzNzMyODI0MzI1NTYxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY1LjA0MzA4NDksICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMjY5NDI3ODY1NzQzNjM3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY4LjE5MTg3MTIsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjU0Nzk4NjUwNzQxNTc3MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ3Mi40OTU4OTc1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI2MzA4OTQxODQxMTI1NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ3Ni4xMDkzNzMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuMjU2MTM4MzI0NzM3NTQ4ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ3OS4yMjQxNzc4LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjMwMDk4MTcwMDQyMDM3OTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODIuMjk0Mzk3NiwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4yNTE5MDQzOTgyMDI4OTYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODUuODUwMzIyMiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yODY3MTY0MDE1NzY5OTU4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDkxLjEzOTI5MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zMzQxOTA5NjQ2OTg3OTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTUuMjUyMjk2MiwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zNDI1ODI2MTMyMjk3NTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTguODAyOTA1OCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yNzM0MTA0OTkwOTU5MTY3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAyLjI5NjU5NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yMjM2Mzk1MTgwMjI1MzcyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTA4LjU2OTcyMDMsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDIxMjIyNTY3NTU4Mjg4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEyLjgwNTUwMzgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTk5NzExMDg0MzY1ODQ0NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUxNi42NTk3ODM2LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjQ1NDUwNTA1NjE0MjgwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTIxLjEzNzgwNTIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMzkzNjA0NjM2MTkyMzIxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTI3Ljg5MzY5OCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMDEwNTA4NDE4MDgzMTkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzIuMjEwODQ0NSwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNTA3MjgxMzAzNDA1NzYxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM2LjQyMDg1ODEsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMjE3OTM5MDc4ODA3ODMwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQyLjA0ODY4ODIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMTcyNDMxNTg4MTcyOTEyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ3LjUwODU0MjMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMzI2OTkyNjYwNzYwODc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTUxLjc1NDg1NjMsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMzE4NjE0NTcyMjg2NjA1ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1Ni40OTAzMzg4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI5MTk0NjgyODM2NTMyNTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU2NC41NzQ4NjIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjAwMjUxMzcwNjY4NDExMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3MS41MTA2NDIzLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjIxNTAyNzcxOTczNjA5OTI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NzYuMjQzNzM1NiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xNDY1ODM0MDgxMTcyOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODIuOTk0NCwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4zMTkyNTI5MzgwMzIxNTAyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTg4LjgzNTI0MDgsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMTkzNDIxNTQyNjQ0NTAwNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5My44MjI1NDksICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjI4MDczMjI0NDI1MzE1ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwMC44MzE1Njg1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjM5NTI2MjE1MTk1NjU1ODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwNi45NTcyNzQ0LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjM1NDM1NTc4MjI3MDQzMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxMi4wOTc3MTQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTg3MjkxNDczMTUwMjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIwLjA0MDExMDMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMjE0NjI2OTk3NzA5Mjc0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjI1LjcxMTgxNTYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjg4NTY3NjAyNjM0NDI5OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzMS41NzM2MDM0LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc0OTQzMDgzNTI0NzAzOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0MC4yMzM2MDIsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjYyNjM1MDIyNDAxODA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjQ2LjE1NDAxMDUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMzkwNzUwMDUwNTQ0NzM4Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1NC4yNDQ2MDI3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjE2MjA5NTA5OTY4NzU3NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2MS4zNDM1NDM1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjE5MjM1MTY5ODg3NTQyNzI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NjcuODM0MDQsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjAzMjE1NTA5NjUzMDkxNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3OC44NzA4NDAzLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjIzNzY1MjQyMDk5NzYxOTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODUuODQyMzU3MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNTk2MDQ1MTk2MDU2MzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2OTUuMjUyMzI0OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC40MDExMDUxNjU0ODE1Njc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDEuNTc2NDYyNSwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC41OTQ0MDY0MjU5NTI5MTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDkuOTE4ODc0NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4xMzU2MTcyODU5NjY4NzMxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzE3LjI5ODAyNDQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMTA3MjAyMjYxNjg2MzI1MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcyNC42MjIyMDgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjAyOTY2MDM0NDEyMzg0MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjczMy40MzEyODMyLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjI4OTE0ODc3NzcyMzMxMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc0MC4xNzA1MjMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNDAyMzg5NjQ1NTc2NDc3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc1MC4xMDgzNjE3LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjE1MDE2MTgwMjc2ODcwNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NTcuMTY4Nzk4MiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4xOTk2ODQ1OTAxMDEyNDIwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzY3LjE0MzA5NDMsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTIyMTYzNzg3NDg0MTY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzQuMzc2NDYxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjI0ODc3Mjk0ODk4MDMzMTQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3ODQuOTY0NjY3OCwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xMjY3MzIzNzkxOTgwNzQzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzkyLjE5MDQ1NTQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMTA0ODQ1NDA0NjI0OTM4OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgwMi41MjA2MDEsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTkyOTMzOTQ2ODQ3OTE1NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgwOS45OTMyNzMzLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjE3NzIyODQ1MDc3NTE0NjQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjAuNTI4MTE3MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4xMTE3NDg5NTYxNDM4NTYwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODI4LjM5ODkzMDUsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMTI3MDE4MjU3OTc1NTc4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODM5LjAwNDgwMTMsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMzE5Mzk4OTY5NDExODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg0Ni44NzAwODcsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMzEzNTU0NDA2MTY2MDc2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg1Ny41ODIzOTYzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjE3MzM2ODg1NjMxMDg0NDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjYuMDA3MzgwNywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNjkwMzI0ODQyOTI5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg3Ni43MTg2MzE1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjMzNjk4MzcxMDUyNzQyMDA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4ODYuMTQyMzUwNCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4yODQ0NDkwMTEwODc0MTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4OTYuMDY0NDkwOCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yMDc1Nzg0NjUzNDI1MjE2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTA5Ljg0MzkwMDIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjkxMDY4ODUxOTQ3Nzg0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE5LjI5NjI2OCwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4yNjIzNTY0MzAyOTIxMjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MzEuNzUyODQ0NiwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yMjg0MTQzODY1MTA4NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk0Mi41NjcwMDM3LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE1MDYzNDg0MDEzMDgwNTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5NTQuMjYxODA0OCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNjQ4MDE4MDAyNTEwMDcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5NjUuMTk3NjQyMywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xMzY2NTM1MTI3MTYyOTMzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTc1LjA4MzQyMjQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTkxNDA4MzM2MTYyNTY3MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk4Ny4wNDUyOTcsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNDE3MDA3OTUyOTI4NTQzMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTk2LjU0MTYyOTYsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMjMxNjE4ODgxMjI1NTg1OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAwOC40NzE4MzYzLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjI1OTgxMzU3NjkzNjcyMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAyMC4yNDUzMjQxLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjIxOTk0MjU2OTczMjY2NjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMzAuMDM5MjgsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTcwNzUwMzk0NDYzNTM5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0Mi41MjM4ODUsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMDgzMDUyNjY0OTk1MTkzNDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA1NC4wNTk5NzM1LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjIwNTIwMDUzODAzOTIwNzQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNjQuODE2MzU2NywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yMzczMDI2OTA3NDQ0MDAwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDc3LjM4NDY1MDUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMDUxMDI2ODk1NjQyMjgwNTh9XX19XQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_1/test/accuracy%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgyOS43MDcwOCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMC45NTgwMjY0LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMyLjM1MTgyMjksICJzdGVwIjogMiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzMuOTEyNjc5NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNS41ODQ1MTgsICJzdGVwIjogNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzYuNzcwNzU3NywgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzOC4wMjQ3NDYyLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM5LjM2MTE5NjMsICJzdGVwIjogNywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDAuODAyNjg4NiwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Mi4yOTY3MDYyLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQzLjkzMTkwOCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDUuNjczOTgyNCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDguNTMzODc0LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1MS41MDIzMDM4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1NC4yNTU0Mzg4LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1Ni4zMjcwOTksICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU4LjY1NzA4MjMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYwLjg5NDE3NTMsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYzLjI2Mjc1NjYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY2Ljg0MTQxOTIsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcwLjYzNDczLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3My41MDAwNjY4LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3Ni4yNTczMDEsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc5LjEzMjUzODgsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODgyLjM2NTY5OTgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODg2Ljk4NDM4ODYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkwLjc3NTg4MDMsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkzLjkxNzk0LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5Ny4xNzQzMzU3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkwMS4yNzQ0NDM2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkwNy40Mjg0NzYzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxMy4yNzQ4OTMzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxNy4yMTI4ODgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTIxLjQ5NTU0MDYsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI3LjIwODE0MywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzEuMTgyMDEyMywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzUuMTY5NDA3OCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NDAuMTQzMjU4OCwgInN0ZXAiOiAzNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NDYuMDgyOTQ2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1MC4yODg2MDEyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1NC41Mzg5MTA5LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2MS4wMDgwMzYxLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2Ny45ODg1NTMsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTczLjcyODg1NjYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTgwLjkyNzYyOTUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTg1LjY1OTQzNiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTAuNDY4MTk5NSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTcuOTAyMzI4NywgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDMuMjI2MTg4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAwOC40NTI2NDk0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAxNi4zMTMwNDksICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDIxLjU2NTg2MDUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDI3LjM5NTYwMDYsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDM1LjI2NTMzODQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQwLjg0MTY2NTMsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQ4LjA0MDMwNzMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDU1LjIzMzQ1NywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjEuMDg1MjgwNywgInN0ZXAiOiA1NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjkuNzEwNDM2LCAic3RlcCI6IDU4LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3NS43Nzg1NzE2LCAic3RlcCI6IDU5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4My4zMjg5MTY4LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5MC44ODQ5MTk0LCAic3RlcCI6IDYxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5Ny41MTUyMDQyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEwNi40NzQyNzM3LCAic3RlcCI6IDYzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTExMi44ODU2ODc0LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyMS45Nzk3NDgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTI4LjgzMzE1NTksICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTM3LjU0OTYyMzMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ1LjQwNzUyMzYsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTUzLjcwODQ1NjgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTY1LjIzNjI3ODgsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc0LjU3NjgwMiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExODIuODA3NDc2LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE5Mi44MDY5NTk2LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIwMC45NzU4MTg2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIxMS40NjYzNzQ0LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIxOS40NjEyNjM0LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIyOS43ODcwNzYsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjM3Ljc4MDU4NiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNDguNTA4OTYzMywgInN0ZXAiOiA3OSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNTYuNTc5MzcxLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI2Ny40MTEwNjYzLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI3Ni4xOTMxOTY1LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI4Ni44MDEyODcyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI5Ni42MDAzNjE2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMwNi40ODE2NTA2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMxNy41NjcyMzE0LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzMC41MzgxMTY3LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0MS4yMTQ3NjY3LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM1My4yMzMwOTU2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM2Mi42NDQzMDYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzc1LjEyMDAxOTIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzg2LjQ0NzA4OSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzOTcuMTQyODA5MiwgInN0ZXAiOiA5MywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MTAuOTYyMjk3NCwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MjYuMTM5ODgxNCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzcuNDM0OTQ0NiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NDkuMjc5MTA3LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2Mi4zNDg0MjMsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDc0LjU0MzUxMDcsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNzkxNDNfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDM4NC45ODA4MDQyLCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg1Ljc4NzM2ODgsICJzdGVwIjogMSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODYuNjQ5ODg4MywgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ny42MTY3ODg2LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg4LjY1NzI1MjMsICJzdGVwIjogNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTAuMDg4MjgzNSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MS45ODgzMDc1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk0LjA0NjgyNTIsICJzdGVwIjogNywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTYuMTkzMzY3NywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Ny45NDI5MTY2LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk5LjQ5Nzg2MSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDEuMTc5ODM4MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDMuMDE0NzAzNSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDQuODcwNjg4NCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDYuNzkwNDA0LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwOS44NjkwOTY1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxMy4yNTI5NzI4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxNi4wODAwMjQyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxOC40MjMzNTcyLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQyMC44MzkxMzU0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQyMy4zMjIwMzMsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI2LjM0NzUxNjgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDMwLjQ5ODI5NCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzQuMDQxNDk5OSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzcuMTExMTAwNCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDAuODI2NDk2LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0NS45MTMwMDQ5LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1MS4zNzUxNTk3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1NS4zNzU4NDMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU4LjkxMTU5MjIsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDYyLjQxMjY4MzIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY3LjMzMjkxNjcsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDcyLjIwNDU1MzgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc1LjkxMjM2NDUsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc5LjczMzE2ODYsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg0Ljg5NjgxNCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0OTAuMDYxNTk0LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5NC4wNTEzMjI1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5OC4xMTg0LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwNS4xNzc1MTU3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxMi41MDQ0NzQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE3LjIzOTIwNSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjIuNDk1NjQ2NywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjguOTU5MTcyMiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzMuNjY1ODU2NiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzguNzI0ODUsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ2LjAzNjgyMzUsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTUxLjE3MzYyMzMsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTU2LjY0NjExMTUsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTY0LjIwNDEwMTgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTY5LjM5Njk5MjQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTc1LjQzMjI2MiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODIuNzgxMDc3OSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODguMjM3NTg0OCwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1OTUuNTE1Njg4NCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDIuMzg4MDE1NSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDguMTM3Mzk2MywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MTYuNzI3OTExLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYyMi42Nzg1MTgsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI5LjkwNzUwMzYsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjM3LjYyODkwMDgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQ0LjAyNTc5MDUsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjUzLjE2NjI2NiwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTkuNTI0NzY4OCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjguMjQwNTk5NCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzUuMzU0ODMzNCwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODMuNTgyNDgzMywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTMuNDM2NjA5LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcwMy42MjE3NDA4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxMS4xOTYyNjQ1LCAic3RlcCI6IDY5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxOS43Njc2ODczLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcyOC4wODk0MzUsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzM2Ljg5NDQ2NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDUuNjU1Nzc0OCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NTQuMzMyNjI4MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NjMuNDkwNDIwNiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NzIuNjgyODY5NywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3ODEuODMyMTM4OCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3OTEuMjYxNzI5NSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDAuMzQ1Nzc3LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgxMC41MjI1NzU2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgxOS40NTAxLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzMC40NDY4MzUzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzOC45Mjg1NDYyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg1MS43MzM3NjIzLCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg2NS4wMDc5OTgyLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg3NC4zMzY2MjM3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg4Ni4zOTQwMTEsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODk2LjA3OTI4NDcsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTA3LjA3NzcxOSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTguNjMwMzQ2LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkyOC4xMTUzMTUsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTQxLjYyODQzODIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTU1LjI5MzMyNDIsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTY0LjcwMzE0MDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTc2Ljk3Nzk3MjcsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTg5LjMxMTY2MTcsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDAwLjI1NTA3NjQsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDEzLjUxNjc4ODcsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDI2LjEyOTYwNTMsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTk4My45NjU5MDMsICJzdGVwIjogMCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODUuMjk5NDk4NiwgInN0ZXAiOiAxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni4zMTQ3MTksICJzdGVwIjogMiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODcuMjk2OTA4MSwgInN0ZXAiOiAzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4OC4zNTgzMzM2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg5LjUzMzExNjgsICJzdGVwIjogNSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTAuNzYzMDczNCwgInN0ZXAiOiA2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Mi4xMjE2NzQsICJzdGVwIjogNywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTMuNTU5MzA5MiwgInN0ZXAiOiA4LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NS4wNjkwMjE3LCAic3RlcCI6IDksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk3LjMxMzYwOTEsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk5LjkzMjExMzQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAyLjY1NjM1ODIsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA0LjgyOTE5MzgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA2LjgyNTQwNzUsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA4Ljg2OTgxOSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTEuMDUxNTkyNiwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTMuMzQ2MDI2LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAxNy4wMTAyMzMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIwLjc4NzE4MjMsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIzLjU0MTMzMzQsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI2LjE3OTgwMjQsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI4LjkyODkxNCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzIuMDE0MDkwNSwgInN0ZXAiOiAyMywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzcuMDA2NywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDIuMTA3NTA0OCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDYuNjY1NzY4NiwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDkuOTE2NDY3NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNTMuMjM3NzEyLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1Ny42NzA3OTkzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Mi43NDQ1MDk3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Ni40ODA4OTMxLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA3MC4xMjY1MTU5LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA3NC43MDAxODg5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4MC4yODQzMjc1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4NC4xNDIwMzMzLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4OC4xNTU3MjEyLCAic3RlcCI6IDM2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5My42ODI2MjIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDk5LjE1OTE3ODUsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAzLjQ1MzQ0ODUsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTA4LjAzMjc2NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTUuMjU0ODA5NiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTkuODQ3NjE5LCAic3RlcCI6IDQyLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyNC41Mjk2OTg2LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzMS41NTEyODgxLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNi45NjQ3OTQ2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0MS45MDAyMzM1LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0OS4wNDM2NzEsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMTExMTExMTExOTM4OTUzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU0LjcyNzYwMjcsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMTExMTExMTExOTM4OTUzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTYwLjA3NTg3MjcsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTY4LjY0MzQ1OSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzYuNTU5NjI3OCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODMuMDA2MjkzLCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5MC4yNzc3OTEzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5NS45Mjk4MzIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjAzLjcwMzk3NjksICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjEwLjM4Mjg5NDMsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjE2LjQwMTEyNzYsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjI1LjA5OTExMSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMzEuMTE1ODg4NCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMzkuMDkwNzQxMiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNDYuMTY3Mjg5MywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTMuMzY5NTkyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI2MS45ODIyNzIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjY4LjUxODAwOTcsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjc4LjAwODc1NDUsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjg0Ljc5MTcwMjMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjk0LjQ2NzAyOSwgInN0ZXAiOiA2NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMDEuNjUyNjczNSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMTAuNzY3ODU2MSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMTguNjQ4NjkxNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMjcuNzMwMDkxMywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMzYuMjIzMTM4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0NS41NjU1NjI1LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1NC4yODc1NzksICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzYzLjg0OTk3OTYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzcyLjU1MzIxOTgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzgyLjQ1NjQ3NDgsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzkzLjU3ODI4MzgsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDA0LjgxNTc1NDIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDEzLjMzODY5ODEsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDI3LjE5NjA3OTMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDM4LjU2NzkyOTUsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDQ3LjI2NDYwNywgInN0ZXAiOiA4MywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NTguNTQzMjAxLCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ2Ny4wODE0MzczLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ3OC43OTk0NTI4LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ4OC44Mjk1MDYyLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ5OS4wMjA0MDEyLCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUxMC40NDE3OTc3LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUxOS40OTM0Njg4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUzMS40MTg3ODU2LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU0MS45MDk5NTQsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTUyLjYxMTE1MzQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTY0LjcwNTk3MjQsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTc0LjkwMzg5NzUsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTg2LjczNDU3MzgsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTk5LjE1MDA2MzgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjA4LjkyMTg3NzYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjIxLjg0MzM5OTUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjk3Ni40MDQ2OTI2LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjQyNzk4OTUsICJzdGVwIjogMSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzguMzYwNDI3NCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OS40MDM0NjU1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgwLjUxMTI2NCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4MS42OTk2MTM4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjk2OTg1MjIsICJzdGVwIjogNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODQuNjYyMTE3NywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4Ny4wNjI2MDg3LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTg5LjU0OTk0LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkxLjk2NjYzNDgsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkzLjY5MzY4LCAic3RlcCI6IDExLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5NS42MTA4NzMsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk3LjU2MDI0ODQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk5LjY1MDA1OTcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDAxLjg4NTY3OTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDA1LjQyODE0ODcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDA4Ljk5NTM1OTIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDExLjcxMjczNzMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE0LjI3NTYwNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTYuODY2NTI3OCwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTkuNjYzMDE1NiwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjMuODQ2NDQ3NywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjcuOTIxNDk1NCwgInN0ZXAiOiAyMywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzAuODE5MjkzLCAic3RlcCI6IDI0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMy44MzY4MDczLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzNi44NjgzNjE3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0MS40ODI0Njg4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0Ni4wNDUxMzkzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0OS40MTIzODE2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1Mi44NjI3NTIyLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1Ny4xOTk1OTc4LCAic3RlcCI6IDMxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2Mi43OTQxMzcyLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2Ni43MTY1MDcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDcwLjQ5MDA5NDIsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDc1LjIzODEzOTYsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDgxLjE0NzE5NzUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg1LjIzMDQ1MDIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg5LjQyMDE3OTEsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDk1LjMyNDMzMywgInN0ZXAiOiAzOSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxMDEuNjg0MDUxOCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxMDguMTI2OTQ3LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExNS4xNTAzNTQxLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyMC4xMzAzNjEzLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyNC43NDU5NjgzLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzMS4zMzY5ODg0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzNy4xMjMxOTIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQyLjA2MjY2MTYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQ4Ljg4NzY4NCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNTUuMDgzNzAwNCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNjAuMjkxMDU3MywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNjguMDMxMzQwOCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzMuODUwMjA0MiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzkuNTIzNzEyMiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODkuMzIzODY1MiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxOTYuNzI3MDg3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwNC4wMDEyMDY5LCAic3RlcCI6IDU2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIxMS4zNzk4MzgyLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIxNy4zOTE0NDA0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIyNi4yNTE2MDEyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIzMi4zODM1MTgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQwLjI0MjE3NDEsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQ3Ljk0NDY5NTcsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjU0Ljc3NzI0NjIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjYzLjc5MDY3ODUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjcwLjQ0MzMzNiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNzkuODg2NTYzOCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyODYuNzEzODMxNywgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyOTYuMjQzMDkwOSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMDMuNTE0Mzk1LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMxMi40OTUyOTc0LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyMC40MDA4MjUsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzI5LjQ5ODU4MzgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzM4LjExMDMyOSwgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDcuNTQ4NTQwNiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTYuMDA0NTk2NSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjUuNzYyNzExNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzQuMTE4OTM4NCwgInN0ZXAiOiA3NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzODQuNTg3MzUyLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM5Mi45ODg0NjIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDAzLjYzMDE0OTQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDExLjgzMTA1NTIsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDIyLjkwOTMyMiwgInN0ZXAiOiA4MiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MzEuMzIwODAxNywgInN0ZXAiOiA4MywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NDUuMjAzNjIzOCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NTYuMzQ2NjkxLCAic3RlcCI6IDg1LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2OC4zNzIwMTEsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDc4LjI4MTAxMjgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDg4LjQ5OTAzMDQsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDk5LjcyODM0OTcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTA4Ljk0NjQwOSwgInN0ZXAiOiA5MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MjAuODY2OTQ4MSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MzAuNzg5NDAzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU0Mi4xODExNzIxLCAic3RlcCI6IDkzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU1NC4wOTA1NDUyLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU2My42MjgxMjc4LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU3NS45NDg0ODI4LCAic3RlcCI6IDk2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU4Ny43OTk1ODM3LCAic3RlcCI6IDk3LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU5OC4wMjUxNzQ2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzYxMC41OTIxNjQsICJzdGVwIjogOTksICJ2YWx1ZSI6IDEuMH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1Mzg2LjgxMzA1NTMsICJzdGVwIjogMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODcuNzgzOTA4LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjczOTU3ODcsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODkuNzc3NzMzMywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MC45MTcxNDg2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkyLjEyNjMyMDgsICJzdGVwIjogNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTMuNjA1ODA5MiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5NS44NTMxNDE4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk4LjIwNTc5NzcsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDAuNTU3NTExMywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwMi43NTMyMjUzLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNC41MzYyODY0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNi4zODA5NDYsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA5LjA1MTc3NDUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDExLjEzNjY2MzIsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE0LjA2NTc0MzIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE3LjQ5OTI5MSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjAuNTY2MDg0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyMi45NjQ1OTEsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI1LjUwMDU5NzcsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI4LjEzODYwNjMsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDMxLjMwMDc2OTYsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDM1Ljc1MTg5MjMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQxLjEyNTg5NDUsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ1LjcyNDE5NTIsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ4Ljc1MDk4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1Mi40MTAzMzIsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDU3LjU3Mjk2OSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjEuMzkwMDQsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDY0Ljg0OTI2MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjguMzgwMDk4NiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzMuNzE1MTYxMywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzguNjA3MTU3NywgInN0ZXAiOiAzMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODIuNDMyMTMzMiwgInN0ZXAiOiAzMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODYuMzI3OTQ1NSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0OTIuNjQ1NzcxNywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0OTcuNzg0NDI3NCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDIuMDE2NTMxNSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDcuMDgzMzQ2NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MTMuODE4MjcsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTE4LjM2MzQ0ODksICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTIyLjk4NTMwOSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MjkuOTczMDU1LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUzNS4zOTc0MTk3LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU0MC40MzUzMjc1LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU0OS42MDk0MTkzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1Ni41MjI1OTEsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTYxLjYzODA3OSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjguMTk0NTgwNiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NzUuMTQwNzk1MiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODAuNzk3NDU3NywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODguNjgyNTc4OCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1OTQuOTAwNDA3NiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDAuNTg0NDg3NywgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDkuMjk3MzUzMywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MTUuMDkzNzM2LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyMi42MTc3MjM3LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzMC4zODAyODA1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzNi42MjA0NzIsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjQ1LjcyNDc3MDgsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjUyLjExMTczMTgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjYwLjY3NjI4MTcsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjY4LjA4Mjc5NDIsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Njc2LjIyMzczLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4NS43MDQwMDA1LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5Ni44MDExNDc3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwNC41ODI4NjMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzEzLjM5NjA2MzYsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzIxLjU2MTMyOTgsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzMwLjAwMzg2ODYsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzM5LjA3NjU2MTUsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQ3LjQ5NTQ2OTgsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzU3LjE3MjY4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc2Ni4zMzU4ODM0LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3NS43NjM0MDQ2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc4NS40Njg1OTMsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzk0LjYzMDIyMTEsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODA1LjE2NDI5NTIsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODEzLjgwNDcxMSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MjQuODYwMjc1MywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MzMuMDI3MTA1MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NDQuNDQwMzA4NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NTMuMTc4NzUwOCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NjQuOTMwNjU5OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NzUuNzc1NjI4MywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODguMjk5NDI2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkwMC44MTU3ODkyLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkxMS4wOTI1NjY1LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkyMS42NzE1MTUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTM0LjcyOTY4OSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NDYuNDU0ODYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTU4Ljc3OTEwNzYsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTcwLjE4ODU3NTcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTgwLjIyOTc0ODIsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTkyLjYxODY2MSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMDMuMzU3MzQ5MiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMTQuNjMxODk0OCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMjYuODQ4NzI1MywgInN0ZXAiOiA5NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMzguMzU5MDM1NSwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNTAuMjI1NjcyMiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xNDc0NzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwNjQyMy4yODE5NzU1LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI0LjMyNzQxODYsICJzdGVwIjogMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjUuNjg4Nzk2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI3LjE3ODc4NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyOC44NDgxMzE0LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMxLjI0NTE3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMzLjYyMTAwMTUsICJzdGVwIjogNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzUuODgwNDAzLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM4LjA2NjkxMDUsICJzdGVwIjogOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzkuOTYxNzI5MywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0MS42MTMzMzA4LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0My4zNTI0NjcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ1LjIxMzAwNzcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ3LjE0NzUyMzIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ5LjIzMjU2OTUsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUyLjU2NDU1MTYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU1LjkxODA5MjcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU4LjU2NzEzMzcsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYwLjk3MzIzMzUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYzLjQzNzUwNTUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY2LjExNzQwMTEsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY5Ljg5MjExNDIsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc0LjMwMjM4OSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzcuMjY5NTgxOCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODAuNDYyNTIzMiwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODMuNDk4MjY0NiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODcuOTgyMzQ5NiwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTMuMDIwNzA5LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5Ni42NjM3NzksICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAwLjE4ODAxNDUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTA0Ljc3MTkxMDIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEwLjYxNzI4OTUsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE0LjM3MTc4MDQsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE4LjI5MzAwMDIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTIzLjgwMDg1NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MjkuNjAzNzc5LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUzMy45NTEwMzUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM4LjE1ODY4ODgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ0LjY3MzE1NTMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ5LjIxMTg4NTUsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTUzLjUyNzM4OTMsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTU5LjQ2MDEwNiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjcuNzg3NzI3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3My40MTIxNjYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTc4LjU3MDc4MTUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTg1LjkyNjM3MjMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTkwLjg4MjI1OTQsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTk2LjIwMTkxMDMsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjAzLjY3MzQwNDUsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjA5LjA2MTI3MTIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjE0Ljk5NTI0MzgsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIyLjUxNDMwNSwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MjguMDAzMTUzLCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzNS42ODAyOTcxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0Mi42NDM5MTA2LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0OC42NzkzODIzLCAic3RlcCI6IDU1LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1Ny43MTUxMDkzLCAic3RlcCI6IDU2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2My45MDkxMzE1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3Mi4xNjIyMTYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjgyLjIxNDQ4NCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODkuNTQ1NDc3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY5Ny44NDEyNDIzLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwNC4xNjg1ODg0LCAic3RlcCI6IDYyLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcxMy40NDY2MDgzLCAic3RlcCI6IDYzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcxOS45NzIyMTEsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzI5LjA0MTUwNjgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzM2LjE4NTMyMTgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzQ0LjgxNjMyMzgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzUzLjAyMzU2MjIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzYxLjQwMzIyNDUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzcwLjA4MDA0NDMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzc4LjMyOTI2MTgsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzg3Ljk1NzAxMywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3OTYuMDEyNDk0NiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDUuNTgyMjU0NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MTQuMDE1NjM5NSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjMuNjg4Njc5MiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzIuNzk5ODg0MywgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NDIuMjI5ODY3NSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTEuODU2Mjg1MywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjAuOTgxMDU4MSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NzEuNDA5NDc2OCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4ODAuMTAzNTc5OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4OTEuMTU1NjM2OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MDAuNzUyMDcxMSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MTQuMjUyMTgxLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkyMy4yMDUzMzc1LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkzNy4zMjAyOTU2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk0OC40MDkxMzYsICJzdGVwIjogODgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTU3Ljk1MTQyNDgsICJzdGVwIjogODksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTY5Ljc1Nzg3MTIsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTc5LjYxOTUyNywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5OTAuNzg1OTk3OSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMDIuNzU4NzQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDEyLjM2OTgzOTcsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDI0LjQ3MzY3NzksICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDM1LjYwNzI4LCAic3RlcCI6IDk2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0Ni40NjE2MTQxLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA1OS4wNTcxNzA5LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA3MC4xMTA4MywgInN0ZXAiOiA5OSwgInZhbHVlIjogMS4wfV19fV0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_1/train/loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMS90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgyOS41OTEwMzE4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDEuMTQwMjYzOTE1MDYxOTUwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMwLjgxODQyMTgsICJzdGVwIjogMSwgInZhbHVlIjogMC42NjU3MDkwNzgzMTE5MjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzIuMjAwMzc2MywgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU4MDc4MDUwNjEzNDAzMzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMy43MDk1ODMzLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTE5NDc0MzI3NTY0MjM5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM1LjM4NDAzMjUsICJzdGVwIjogNCwgInZhbHVlIjogMC40MDg4Nzc5MDkxODM1MDIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzYuNjQwNzcyNiwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQwMjgwMjk0NDE4MzM0OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNy44OTQ5NjQ3LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDE1ODAxMTA3ODgzNDUzMzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzOS4yMDIxMzcyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNDI2Nzc0MTQ0MTcyNjY4NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0MC42MTkxOTIxLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMzExMTM0NTQ2OTk1MTYyOTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Mi4xMTk3MzUsICJzdGVwIjogOSwgInZhbHVlIjogMC4zOTE4Njc2Mzc2MzQyNzczNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQzLjczNTQzNDgsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMjkyNzAwNDk5Mjk2MTg4MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NS40NjU3MDU2LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI2NTc4MDQ3ODcxNTg5NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0OC4xNjY0Mjc5LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM5NjEyNDk4ODc5NDMyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1MS4xMTkyMjA3LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjI4NDc3MjE4NzQ3MTM4OTc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTQuMDA1MzQ0NiwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zMjU2MTk3ODY5Nzc3Njc5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU2LjA2MTM1NjMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjc3MDcwMDc1MjczNTEzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU4LjM3Njk4OCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zODQyODE2MDU0ODIxMDE0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYwLjYyNjA1MDcsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzk5NjM0NzE4ODk0OTU4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYyLjk2MzI3NjYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMjY3MDkzMjExNDEyNDI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY2LjM0NDYzMzYsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMjUxNjk4MzE1MTQzNTg1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcwLjE1NzkxMzcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjY1MTk5ODk5NjczNDYxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODczLjE1ODE2MzMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMjI4NTM5MDQ5NjI1Mzk2NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3NS44OTE4OTEyLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI1MjQ2NjgyNzYzMDk5Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3OC43Njk5MDIyLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjMxMDk0NTEyMzQzNDA2Njh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4MS43NTQ3ODk2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjI2Mjg1NjAzNjQyNDYzNjg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODYuMzk5ODcyOCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yMTI4MDcwNTkyODgwMjQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTAuMzc4OTAxLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIxNzI1NDY2ODQ3NDE5NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5My41MTQ2ODIzLCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjMyNzgyMjU5NTgzNDczMjA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTYuNzU3ODE4NywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4xOTMzMjA5MTUxMDI5NTg2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTAwLjU3MzY2NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC40MzAyNDM0MDI3MTk0OTc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDYuNDgyODc1NiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMzU3OTkwMzg0MTAxODY3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTEyLjU1MzUzMiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zMzU3MTA1MjU1MTI2OTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTYuNzQyMzIyLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjE5MjY1NTA3MTYxNjE3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkyMC43MjAyNjkyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjIxNTkxOTcxODE0NjMyNDE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjYuNDY2NzY3NSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4xNjQzMTc0MjkwNjU3MDQzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTMwLjY0MjQzNjMsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMTQxNzUxNDk3OTgzOTMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM0LjY1NDUxNywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xNDg2Mzc2NjcyOTgzMTY5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM5LjI3ODIzMTQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNDUwODQ0NDM2ODgzOTI2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQ1LjUyNzY0MzQsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMTY5MTQ5OTc5OTQ4OTk3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQ5LjczMDI4NTIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTY2MzI5ODYwNjg3MjU1ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1My45OTI1NDI1LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjE4MDgxMjk1NDkwMjY0ODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjAuMTE4NTE5NSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4xOTU5OTYyMDk5NzkwNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjcuMDc3NTEzMiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4xNDE0NzAzODc1NzgwMTA1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTcyLjk4OTEwMjYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMTk3NTIxMzI4OTI2MDg2NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3OS45ODYxMzIxLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjEzMzMyNzYwMzM0MDE0ODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5ODUuMDQwNDQ3LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjIwMjU1ODIxOTQzMjgzMDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4OS44MzY4Mzk3LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjE3MTM2OTE1MDI4MDk1MjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTYuODgxMzc4NCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4xNzQ5NjA0NDkzMzc5NTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDIuNTYyNTU1OCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4xNDQyNjY0MjY1NjMyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDA3Ljc1OTMwOSwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4xNDU5NTg0NjgzMTc5ODU1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE1LjI2NjE3LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjE1OTcyMDUyNTE0NTUzMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAyMC44NjUzODU1LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE3ODQwNzQ2MDQ1MTEyNjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAyNi4yNTM3ODE2LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjE0NjAyMTk2MjE2NTgzMjUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzQuNTI3NTU1NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4xNzI0MTMzMDQ0NDgxMjc3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQwLjA4MjQxMjcsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMTgwMzc0OTc5OTcyODM5MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA0Ni43ODc2MjY3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjIzNzE1NTQyMjU2ODMyMTIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTQuNDYxMzA1OSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yNDc3MzkxNjYwMjEzNDcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDYwLjMwNDE5MDIsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMTcyMjQxNDQ5MzU2MDc5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDY4LjU1NTU1ODIsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTQ4NzU1NDYwOTc3NTU0MzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3NC45NDY2OTQ0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI1MDU4MTU2MjUxOTA3MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4MS45NzYxMDA3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjQzMzU0MTA1OTQ5NDAxODU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwOTAuMDM0NjYzNCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4xNjI3NTA3MDYwNzY2MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5Ni41NTQ2MzY1LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjExMzg1OTg0NzE4Nzk5NTkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDUuNjE2NDI4OSwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yMzgxNjcyMTE0MTMzODM0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTExLjk5Njg4MzIsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTI3MDE0MzA5MTY3ODYxOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyMC42MTQzMjgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMTY5NTg0MTU1MDgyNzAyNjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyNy45Mzc3NDUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMTUxNzY1NjU5NDUxNDg0Njh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEzNi4xNTU3MzYsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTEzNzQzNTIxMjczMTM2MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE0NC40Njc4Nzc0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjI3NjM3MDAxODcyMDYyNjgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExNTIuMjA5NzE5LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjIwNzA1ODg3Njc1Mjg1MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE2My43NTkzODUzLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjEzNzMzMzI3Mzg4NzYzNDI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExNzMuMDU2NDE0NCwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xNDcyNzc1MzQwMDgwMjYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTgxLjgyNjkwNDgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMTI1NjgyODYwNjEyODY5MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE5MS4yODAyNzYsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTE4NzM5MDYxMDU3NTY3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk5Ljk0MTc2NzIsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMDkwMjEzOTA5NzQ1MjE2Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIwOS44MDE5MTMzLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjE2Mjg1OTkxNjY4NzAxMTcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMTguNDI2NTQxLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjEzNjk4MTUwMjE3NTMzMTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMjguNDA3MzY0LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjE2MjgyMjQ3MDA2ODkzMTU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMzYuNzAwODI3MSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4xNjM2NTE5MjgzMDU2MjU5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjQ3LjQyNTQ0NDgsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMjcxODg0OTc3ODE3NTM1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjU1LjQ4Mjc4OSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNTgyMjUyMzgzMjMyMTE2N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjY2LjI5NzgwMDUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTI1MjQ3MTUwNjU5NTYxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI3NC41MjYwOTU5LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjExODkyNzA2OTAwODM1MDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODUuNjkxNjIwMywgInN0ZXAiOiA4MywgInZhbHVlIjogMC4xMTM5MTY5OTMxNDExNzQzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjk0Ljc1NDY0MTgsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMTE5MTc4MTUzNTc0NDY2N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzA1LjMzNjAyMTcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMTAxNDUzNjk5MTcxNTQzMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMxNS43MzQ4NjE2LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjE4Nzg1NTYwMTMxMDcyOTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMjguNTk3NzU1LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE3Njc3MDA3NjE1NTY2MjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNDAuMDM3NzQ4MywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yMjgxOTMwMjk3NjEzMTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNTEuMjYyODk5NCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4zMjUxODgzMzg3NTY1NjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNjEuMzkxMTAzMywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC40NzY3NzMyOTE4MjYyNDgxN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzczLjgzMTY5MzQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMTUxNjAwNjczNzk0NzQ2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzg0LjM2Mzk2MjIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNDY2MTIxNTI0NTcyMzcyNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM5NS43OTQ3NDM1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjEzNjIwMzAwNTkwOTkxOTc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MDguNzE1NDIxLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjIzNjk5OTI1ODM5OTAwOTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQyNC42OTQ5OTczLCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE4NzczMzkzMzMyOTU4MjIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzUuMTY2ODcxOCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4xNTMwNDk5NDU4MzEyOTg4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDQ3Ljg2NTcyNjcsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMjI3MDE3NjU1OTY4NjY2MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2MC45MTE3NDUzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjE2NjA3Mjk0OTc2NzExMjczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NzIuMjQ4MzYyMywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xNTI1NDI4NDQ0MTQ3MTF9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzc5MTQzX0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDQzODQuOTIyNzUxMiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjc5Njc5MDU5OTgyMjk5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg1LjcwNTQ1NTUsICJzdGVwIjogMSwgInZhbHVlIjogMC41ODkzNzU2MTUxMTk5MzQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODYuNTYyNTAyNCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjQ4NDExNzY4Njc0ODUwNDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODcuNTE5MzAyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuODI3NjA1NjY0NzMwMDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODguNTQzMzM4MywgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjU5Mzg1MDk3MDI2ODI0OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS44Njk2ODc4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDY5MTc2ODg4NDY1ODgxMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MS43NjI1OTAyLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNTgxMTkzOTgzNTU0ODQwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MzkzLjgxNjY5MSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQwOTM3MjMyOTcxMTkxNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTUuOTQzNTQzLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMjkxNTg0OTM4NzY0NTcyMTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Ny43NzI4NTQzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDYxNjIwMDYyNTg5NjQ1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk5LjMwODAyNDIsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjM1MDY4NDE2NTk1NDU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDAuOTc5MTg0OSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40MzkzMDY2NzYzODc3ODY4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAyLjc5NDUxNzMsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjUzNTg0NDQ0NTIyODU3Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNC42MzczNjIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTUzNzcwNDgyNTQwMTMwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA2LjU1ODc3NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zNjM1NzAwNjQzMDYyNTkxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA5LjQ2OTg5NjYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzQyNDYzNjQyMzU4Nzc5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDEyLjgzOTA2MywgInN0ZXAiOiAxNiwgInZhbHVlIjogMC41MDkwODA5NDY0NDU0NjUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTUuODE1OTEsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzQ4NjMwODE1NzQ0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE4LjEyMTg0MjQsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTAxNzE2NDk0NTYwMjQxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIwLjU0MTc2NDMsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODEwNDc4ODY2MTAwMzExM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIyLjk5NjQ1MSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4zMDU2Mzg4NDk3MzUyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI1LjgyMDg1NTYsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMjk2OTg4Mzk3ODM2Njg1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI5Ljk3NTg5MywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zODgyMzEzMzcwNzA0NjUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzMuNjkwNjg1MywgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zODk4Nzc1ODc1NTY4Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQzNi43MjQ2NjY2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU0NDg4NzAwNjI4MjgwNjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0MC4yMDgzMzkyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjM1MDY5MDQyNDQ0MjI5MTI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDUuMDc3NzUxLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIwMTc1MTg3Mjg5NzE0ODEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTAuNzMyNjM2NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zODE5NDkwOTY5MTgxMDYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTQuOTQ1NzYwNywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC41NDIyMzEyNjE3MzAxOTQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTguNDY5NjE0NSwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yMzY0OTU4OTcxNzM4ODE1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDYxLjk0NjAwMjIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDU2NDgwNzQxNTAwODU0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY2LjU5NzYxNDUsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTk1NjE1ODg3NjQxOTA2NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3MS43MTM2OTAzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjUyMjAwNDU0NDczNDk1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3NS40MzcyMjQsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMjMxMjU2NjE5MDk1ODAyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc5LjI0NTIzNDMsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuMzYyODU3NjM5Nzg5NTgxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg0LjA4ODg3NDMsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNDcwOTUxNTg2OTYxNzQ2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg5LjU0NjMxMTQsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzQ1OTQzODY4MTYwMjQ3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDkzLjUxNDQzNTgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNjIzNzMxMzE1MTM1OTU1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk3LjU4NzMwNjUsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNDE4ODUwMjEzMjg5MjYwODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwNC4wODY5NjU4LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI3ODM5NjA0MDIwMTE4NzEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MTEuNjE1ODc0LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI0NTg1NTc3ODQ1NTczNDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MTYuNjY1OTgsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMTE2MjY1NzczNzczMTkzMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUyMS41MjQ3NzEyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI2NzE1MTQ3NDk1MjY5Nzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjguMzQzNjk0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjIyOTAwMDQ0OTE4MDYwMzAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzMuMDQ4MTE2LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjI2ODQyMzU4NzA4MzgxNjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzcuNzkwNDU4NywgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMjkyMzc5NTg3ODg4NzE3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ1LjMxNzI5NzUsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNTMxMjU5NjU1OTUyNDUzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTUwLjUzNzQyNjIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNDUyOTUzOTM0NjY5NDk0NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1NS41NjY0MjUzLCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjI2NzI5ODkzNjg0Mzg3MjA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjMuNTE4MjY4MywgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4zMTIzNDk1NTc4NzY1ODY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjguNjkyODIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMzg1MTkzNzM1MzYxMDk5MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU3NC4yOTc3MDMzLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjg0ODI2Nzg1MzI2MDA0MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU4Mi4wNDA0MzksICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMjg0NjcwNDEyNTQwNDM1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTg3LjQ5NDY1MDgsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjY5NDk3NjYyNzgyNjY5MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5NC4zMTExNDUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNDk5NTMxNjg2MzA1OTk5NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYwMS41NzI0MjgyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjIyNTgyNzYwNDUzMjI0MTgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDcuMzYxMDU0NCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yMjI3NDEzODAzMzM5MDA0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjE1LjU1NzYyLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjE5OTg3ODcyMjQyOTI3NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYyMS44ODM2MTg2LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjM3NzkwODczNjQ2NzM2MTQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MjguNTkwMDcxLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI0ODU2MTc2OTcyMzg5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYzNi44MDE1MjYsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMTk0MzM2NDE0MzM3MTU4Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQzLjIxNjgxMDcsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMTMxMDYzMzQyMDk0NDIxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjUyLjMxNTkzOTQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMTE1NjQxMzQwNjEzMzY1MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY1OC42NjE5ODczLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjMzMDI5MDUyNjE1MTY1NzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY2Ni44OTk3NTQsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNTIxODM4ODQzODIyNDc5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Njc0LjQ5NjQ5MjksICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjY1NDEwODQwNTExMzIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODEuOTg3NTMwNywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC40NjU3NDA4ODkzMTA4MzY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTEuOTU1MjA2NiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yODk2NTA5NDY4NTU1NDUwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzAyLjE3OTQ2NjcsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuMjM5MjY0MTQ1NDkzNTA3Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxMC4yNTkzMTU3LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjI0MDIyNTg4MTMzODExOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxOC4yODA3OTM3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjMxMjI0NTI3OTU1MDU1MjM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MjcuMTM5NDUwNiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yNTU3NjczNzUyMzA3ODkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MzUuMzQyMzY4NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4zOTc3NzI1NTA1ODI4ODU3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzQ0LjY2MTM4NzcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMzQzNTU1Nzc4MjY0OTk5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzUyLjY5Mzc5MjMsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMzc0NjgzODU2OTY0MTExMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc2Mi4zOTU5MDk4LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjQ5MDA5ODA4ODk3OTcyMTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NzEuMDE4MjE5MiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4zNTIxMTA0MTU2OTcwOTc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3ODAuODEyMzAxOSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4xMTUzMDAxOTM0Mjg5OTMyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzg5LjYwNzU5NSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yOTgzNTQ2NTU1MDQyMjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3OTkuMjI4OTkzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjIyOTc0NjM0MTcwNTMyMjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDguODM2NTEyMywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4yOTg4OTUwNjEwMTYwODI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODE4LjMzMDE3NTIsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMjE3NDc1NzI3MjAwNTA4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyOC44ODM4MjA1LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjIyMTYyODUzMTgxMzYyMTUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MzcuNzkxMDgzLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjI3Njk2OTk2OTI3MjYxMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg0OS42NjY1NzI2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjEwOTk1MTE5MDY1MDQ2MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg2Mi45ODEyMjI2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjI5MzMzMzM1MTYxMjA5MTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4NzMuMTAxOTY3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjIzNTYzMDU1Njk0MTAzMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg4NS4xODY3NjYxLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE0OTM0OTI0MjQ0ODgwNjc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4OTQuMDg3NDMxMiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4xNDM1MDU0OTg3NjY4OTkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MDUuODI5ODg0LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjE3ODU2OTI4NzA2MTY5MTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTYuNzI1Nzg2LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjQ4Mjk5OTM4NDQwMzIyODc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MjYuOTA4MTM4LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjM4MjA4NjgxMzQ0OTg1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkzOS41NDIxMTA0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjEyNDg1NDc4ODE4NDE2NTk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NTMuMzUyODAxOCwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xNDYzNjcxNjI0NjYwNDkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NjMuNDA4Nzg3MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xNjAxMDg4NzkyMDg1NjQ3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTc1LjcwMDk4MTEsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTQwODMzMTM5NDE5NTU1NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk4Ny4xNjU0ODk3LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjMxMTQyNjY2OTM1OTIwNzE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5OTguNjI1MDEzNiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC40MDQxNDMzMzM0MzUwNTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUwMTIuMTM0NTAzOCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC43MDQzNTI4NTU2ODIzNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAyNC4wMjMxNjc4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjIzMzM4Mzk1MzU3MTMxOTU4fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF80MTUzM19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjAxOTgzLjg2OTI2NzcsICJzdGVwIjogMCwgInZhbHVlIjogMC42MTk4MjY2MTQ4NTY3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg1LjE2NjczMzUsICJzdGVwIjogMSwgInZhbHVlIjogMC40Nzk4MjIzMzc2Mjc0MTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODYuMjMxMzc0MywgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjYwOTQzMTU2NDgwNzg5MTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ny4xOTgwODAzLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDQ3MjUyNzIwNTk0NDA2MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4OC4yMjkyMjkyLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTUyNjkzNjA1NDIyOTczNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg5LjQwNDMwNywgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjU3MzIwMzc0MjUwNDExOTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5MC42Mjk4MzYzLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDEuMTYzNjg5MjU1NzE0NDE2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkxLjk3NDQyNTYsICJzdGVwIjogNywgInZhbHVlIjogMC4zMjEyMDMwNTI5OTc1ODkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTMuMzkwMzk1NiwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQ2MjgwNzU5NTcyOTgyNzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NC44Nzc2NjUsICJzdGVwIjogOSwgInZhbHVlIjogMC4zMjE5OTI0MjcxMTA2NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Ni45OTM4NzY1LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjU2MDIwODY3ODI0NTU0NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5OS42MjEzOTQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMjI4NDQ4MDkyOTM3NDY5NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwMi4zMjQxNTMsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNDMxMjUxMzc2ODY3Mjk0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA0LjU4ODYzNTcsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNDI1NjY2MzAyNDQyNTUwNjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNi41OTE1ODczLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjgzMzI5NTY0MzMyOTYyMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwOC42MjE1OTg1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjM0OTkwOTg0MjAxNDMxMjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTAuNzgwNTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDExLjY2ODkxMjg4NzU3MzI0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEzLjA0NTQ3MjYsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDU3MDI2MzAyODE0NDgzNjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAxNi41MjcwMiwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC44NTY1MDc1Mzk3NDkxNDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjAuMzIwNjI2MywgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4xNjA4MjE4Njk5NjkzNjc5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIzLjIyNjQ1NzQsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjUxNTI2MTc2OTI5NDczOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI1Ljg0NDU4MTgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMzg4NjI1MDU1NTUxNTI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyOC41ODcyOTIsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuMTY2NzU3MTUxNDg0NDg5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMS40MTQ5NjQ3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjM4MjU4MDkzNTk1NTA0NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzNi4zMDU2ODIsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMjIwMjA3MDgwMjQ1MDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDEuNDc3NTY1OCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yMDMwNjYyMTQ5MTkwOTAyN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ2LjI3MTY3MjcsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDEuMjk2MTQ2ODY5NjU5NDIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ5LjUwNTMzMDMsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNDMxNTU4NjY4NjEzNDMzODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1Mi44MTg4MDIsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNTI3NjM2OTQ1MjQ3NjUwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU2Ljk3MDM4NjUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTYwOTg5MzczOTIyMzQ4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Mi4zMDAyLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjIwMDM3NDUxMzg2NDUxNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Ni4wMjUxNTc3LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjY1NDg4NTIzMjQ0ODU3Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2OS42NDQwMzg0LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjE5NzY1NjE1NDYzMjU2ODM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzMuOTM3NzI0NiwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yODQ4NTY3NjY0NjIzMjYwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDc5Ljc2MDg3LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjY0MDc2NjI2MzAwODExNzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4My42MjM5ODA1LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjI2MTQ3MzE3ODg2MzUyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4Ny42MjE0NTI2LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjU5MTM5Nzk0MTExMjUxODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Mi43ODcyODYsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMzIzNjQ2ODczMjM1NzAyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDk4LjYxODc1MTMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMjY2MjcwOTY1MzM3NzUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAyLjg4NTM2MDUsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTg2MjU0Mzk3MDM0NjQ1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwNy4yMzM3Mzk5LCAic3RlcCI6IDQwLCAidmFsdWUiOiAxLjg3MjgwOTc2NzcyMzA4MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExNC4zMzY1OTAzLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjMzNTg3Nzk1NDk1OTg2OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExOS4yNDg0NTIsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMzQwNTc4MzE3NjQyMjExOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTIzLjkwOTEzOTQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMzM0NTQ1MTM1NDk4MDQ2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTMwLjUzNjQ5MjMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTk4OTE1MDc5MjM2MDMwNTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNi4zNDIwMTg2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiA1LjcwODI5NzI1MjY1NTAyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTQxLjI1MzE5LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjU2MDQ4NTU0MTgyMDUyNjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0OC4wMjg1ODg1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAzLjU2MDAzMzA4Mjk2MjAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU0LjAzNjQwMzcsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMjEwMjQ4MDM4MTcyNzIxODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE1OS4zOTkxMDIyLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjUyMzQ2NjU4NzA2NjY1MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE2Ny4zMTQ2NTgyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjQzNzM5NTYzMjI2Njk5ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE3NS44NDY2NTY4LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjIxNTg3MDkwMTk0MjI1MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE4MS44MjIyMzIsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDEuMDk2Mzc1MTA3NzY1MTk3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTg5LjUzODgxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI3MjMxMDU1NDk4MTIzMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5NS4xODYzMzUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMzM0OTUxMDQzMTI4OTY3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjAyLjUxMTEyMjcsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMjQ5NzU5ODgyNjg4NTIyMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIwOS42MTQ4MDk1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjM2NDg5MzU1NTY0MTE3NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIxNS41MzQ0MDYyLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjk1NTUxMzUzNjkzMDA4NDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyNC4zMDQ4MjM0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI3NDE3Njc0NjYwNjgyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzMC4zMDk4MjAyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI3ODg2MzAxMjc5MDY3OTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMzcuODIzOTcxNSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC40MTQ1NzM5Mzc2NTQ0OTUyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjQ1LjMyODU5MjgsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDEuMDcwNjc1NDkyMjg2NjgyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjUxLjk2OTc4MTQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDEuNDM4MTYxNjExNTU3MDA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjYxLjEzMDIwMDQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDEuMjQzMTY4MTE1NjE1ODQ0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjY3LjYzOTMwNjgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTQzODI2NzUyOTAxMDc3Mjd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI3Ny4wOTM3NzYyLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjE2Mjg5OTgzNjg5Nzg1MDA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyODMuODc3NzM1OSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yMTExNjg4NTU0Mjg2OTU2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjkzLjAzNjI4NDIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODk1NzYwMTE4OTYxMzM0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzAwLjcwNjE0MzQsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuMjE3MzY4MTU1NzE3ODQ5NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMwOS4zMTE4MjEyLCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjc2OTM0MDgxMzE1OTk0MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMxNy42ODE1MzE0LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjM0NzQ3MDYxMTMzMzg0NzA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMjYuMTU1Nzg0NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yMjgxMzg3MTUwMjg3NjI4Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzM1LjIwNzMzMjQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMzEzMDQ4NzIwMzU5ODAyMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0My45NTk2MTAyLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjM0NDU1MDM3MTE3MDA0Mzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNTMuMjA4Mjg0NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xODU0MDQxNjY1NzkyNDY1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzYyLjI4MzgwOSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4zMDUzOTE0NjA2NTcxMTk3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzcxLjUwMjgwMzYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMzEyODQ1ODI2MTQ4OTg2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzgwLjc0MzA4ODUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMDk4Njc5NTg3MjQ0OTg3NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM5MS45MTk1MDMyLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjI5NzQ5NzEyMzQ3OTg0MzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDMuNjkzNzA5NCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xNjUwNjM3Mzg4MjI5Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQxMS44MzMzNzUyLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjMzOTAwODAzMzI3NTYwNDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MjQuODgzNjEwNywgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMTk0NjUzNzQ5NDY1OTQyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDM2Ljc3NDE0ODcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMjQ1ODM3ODA3NjU1MzM0NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ0Ni4xNDIzMTMsICJzdGVwIjogODMsICJ2YWx1ZSI6IDUuNTA1MDkxNjY3MTc1MjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NTcuMzkyOTM5NiwgInN0ZXAiOiA4NCwgInZhbHVlIjogNS4xNjkxMjA3ODg1NzQyMTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ2NS45MTU0MzI1LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjIxMDg3NjU4NDA1MzAzOTU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NzcuNjA4NzkwOSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yODc4NzA5NDM1NDYyOTUxN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDg2LjkyMzU4MDIsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMzA4NDY0Mzc4MTE4NTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0OTcuODM0NjM4NCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMS4zOTc3OTg3NzY2MjY1ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUwOC41NzMzNzE2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjM1MTI0NTEwNTI2NjU3MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MTguMjc3NjkzMywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4yMDk0NDY5NTE3NDY5NDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzAuMjE4Njg3NSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4zMjk2MjMwMTM3MzQ4MTc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzkuOTI2NDYyNCwgInN0ZXAiOiA5MiwgInZhbHVlIjogMS4yMDk0MjA2ODA5OTk3NTU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1NTEuMzM3MDU0NSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4yMDk4MDM5Njg2Njc5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU2My4yNzY0OTI0LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjM2NTMxODQ0NzM1MTQ1NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU3My4xNDI3MTYsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMjIwMDA5MzcxNjM4Mjk4MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU4NS40Mzc1NDg5LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjIwMzczNjM3OTc0MjYyMjM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1OTcuMTI2NjA4NCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4xODY0NTkyMjgzOTY0MTU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MDcuNTc2MzY0NSwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC40OTAwMDcxMzIyOTE3OTM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MjAuNTEzNzMyLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjI3OTk1MTQ4MzAxMTI0NTd9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzU4MzA2X0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzYuMzQxMTUwNSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjU3MDU3NjAxMjEzNDU1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjM1MDQ1NjUsICJzdGVwIjogMSwgInZhbHVlIjogMC41NDI1OTYzNDAxNzk0NDM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzguMjY4NTc2MSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjM1MDk1MDIxMTI4NjU0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OS4yOTU5MzY4LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuMzAwNzIyNDUwMDE3OTI5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgwLjM5NDgwODMsICJzdGVwIjogNCwgInZhbHVlIjogMS4xNzE3ODI3MzIwMDk4ODc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODEuNTY5NzAyOSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM0NTE2NDUzNzQyOTgwOTU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODIuODI2ODYyOCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjI4NTU2MTYyMTE4OTExNzQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODQuNDA3NjkyNCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQ3MjEwMzU2NTkzMTMyMDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4Ni43NzQxMjYsICJzdGVwIjogOCwgInZhbHVlIjogMS4zNDk4MTQ2NTMzOTY2MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODkuMjczMDczNywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQ0MjY1NTU2MzM1NDQ5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5MS42ODk0MDA0LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjI1NTk4NDA2NzkxNjg3MDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5My40ODE4ODc2LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI4MzA3OTgzMjc5MjI4MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5NS4zOTA5NTk1LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjI4MTU2NTEyOTc1NjkyNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ny4zMTg3OTE0LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMwODg4MzM2ODk2ODk2MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OS4zNzEzNjM5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjYwMTE4NDY2NjE1Njc2ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwMS42MjE3MTk2LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjM3NjY1MTA0ODY2MDI3ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwNC45ODMyODA0LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjc3OTMxNzk3NTA0NDI1MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwOC41MzU3NTk0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjMzNzQwMjQwMzM1NDY0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAxMS4zOTM4NDU4LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjA3MzI2MTE5MzkzMTEwMjc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTMuOTMzNzg3NiwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC40Njc5NDY2Nzg0MDAwMzk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTYuNTUyMDgxMywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4xOTUxNzcwMDM3NDEyNjQzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE5LjMzNjI2MywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4xODIxNDM4NTIxMTQ2Nzc0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDIzLjMyMDMzLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjMzODQxMTY1OTAwMjMwNDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAyNy41NjY3MzY3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjQ2NjQ1MjAwMjUyNTMyOTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMC40NDcyOTY5LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU0NjMwMTMwNTI5NDAzNjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMy40NTcyODM1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjQyNzE0NDA1MDU5ODE0NDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzYuNDg4ODk2NCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zNzEwNjYzMzE4NjM0MDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDAuODA0NjI3NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4xMjY2MjU2NDIxODA0NDI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDUuNjE4MzEwNSwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4zODEzOTEyODY4NDk5NzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDguOTcyMTM3MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yMTIxMTkwNTc3NzQ1NDM3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUyLjQyMjM3NjQsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMzgwNTkxNTQxNTI4NzAxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDU2LjQ1NTM2MDQsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMDg3Mzg2MTIzODM2MDQwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDYyLjA1NDc1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjIyOTI5OTU3NTA5MDQwODMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjYuMjM1NjYxNSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yMzkzODE0OTIxMzc5MDg5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDY5Ljk4NDI1NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC40NDI4MTg1ODIwNTc5NTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzQuMzc1MDcxNSwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC41ODQ4MDczMzYzMzA0MTM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODAuNTMyOTE0OSwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4zNTM3Mzk4ODc0NzU5Njc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODQuNjk4NzA3MywgInN0ZXAiOiAzNywgInZhbHVlIjogMC4yNDU3MTY3ODA0MjQxMTgwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg4Ljg1NDYwMiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4xNjgwMDA1Nzg4ODAzMTAwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDk0LjQzNzEyODgsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTA1NzEyMTYwNDY4MTAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTAwLjczODAwNywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4yNDk0OTEzNDg4NjI2NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEwNy40NzMwOTA2LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjMxODUwMzc2NzI1MTk2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExNC4yMzQyMjEyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjQxMjAyOTYyMzk4NTI5MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExOS41MTk1NjE1LCAic3RlcCI6IDQzLCAidmFsdWUiOiAxLjcwNDcxMTY3NTY0MzkyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI0LjEyMjUyNjIsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMjAzMjEwMTg5OTM4NTQ1MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzMC4zNTQwMDYsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNDMzMDgxODY1MzEwNjY4OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzNi40MzA2NDcsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjQxMjQ3ODYyNTc3NDM4MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0MS40MTIzODU3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjA3Nzc2NzAyMTk1NDA1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0Ny44NTA2NjY4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjExODc0MjEyMzI0NjE5MjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNTQuNDA2OTIxLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjMxMDU4ODU2ODQ0OTAyMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1OS41ODMzNTg1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA4MzM1NjU4MTYyODMyMjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE2Ni45MDAyMTQ0LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE4MDAxNjM2ODYyNzU0ODIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzMuMTAyNTk2MywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC40MjM5NTk3OTE2NjAzMDg4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTc4LjY1MjI5ODUsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuNDI3MjY0NDgxNzgyOTEzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTg3Ljk4NTc2MjgsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNDM3OTE1OTgwODE1ODg3NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5NS43ODI2MjM1LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjQ5NjcyMzQxMzQ2NzQwNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwMi43MDk4NTcyLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjEyNDQzMjgxNzEwMTQ3ODU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMTAuNTg3Njc1MywgInN0ZXAiOiA1NywgInZhbHVlIjogMC4yMTUwNjg1NDg5MTc3NzAzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjE2LjU2MjQwNTYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTY5NjA4OTgwNDE3MjUxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI1LjE2NjM4NTIsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMjM5OTc3OTcwNzE5MzM3NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIzMS41NjkwMTM2LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjEzNTg4MDA1MzA0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMzguODg0OTU1MiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4zMTQxODIzMTEyOTY0NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI0Ny4xMTY1NzY3LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjI1NTQ2MzI3MjMzMzE0NTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTMuNjEwOTk2MiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC40MzM3OTI5Nzg1MjUxNjE3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjYyLjg5NTQ1NjgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMzg2MjUyODUwMjk0MTEzMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI2OS41NTc4MzU2LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjIzMzI3NzAyMjgzODU5MjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNzguNzg2NDg3MywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xNjE2MjQ1OTU1MjI4ODA1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjg1Ljc5MDAwMDIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTkxMDcyNzMyMjEwMTU5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjk0LjgyNzczNDUsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuODE2OTg5NDIxODQ0NDgyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzAyLjUzODQ4NiwgInN0ZXAiOiA2OSwgInZhbHVlIjogMi42NDM1NzE4NTM2Mzc2OTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTEuMDQ2MTczMywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC45MjkxODAwMjYwNTQzODIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTkuNDM1ODgyNiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xNDUzMTc4NjczOTgyNjIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzI3Ljk1NzI1NzMsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuNjE4NTIxMjEzNTMxNDk0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzM3LjExNTY5MDcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjAyMTk2MjU1MzI2MjcxMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM0Ni4wMDY1NzA4LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3NjYyOTM4ODMzMjM2Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM1NC45NzIxNDgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMDUwMzIwMzAxMjA0OTE5ODE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjQuMTI0MTUwOCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNjQzMzg5MDE2Mzg5ODQ2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzczLjA2MDY1MTMsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjM4MDUxNjIzMTA2MDAyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzgyLjk2MTYxMTMsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMTM4Nzg1MTk4MzMwODc5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzkxLjg3NTk4OTcsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMjM1MzQyNTc3MDk5ODAwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDAyLjEyMjAyOTUsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMDUzODI0NDM1OTE5NTIzMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQxMC42OTA5NjQ1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAxLjM1MjI3ODExMzM2NTE3MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQyMS43ODc4MzcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMTA3NDYxMzg1NDI4OTA1NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQzMC4xNTQ3NjQ3LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjUwMjU4MzgwMTc0NjM2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ0My40ODE1NzMzLCAic3RlcCI6IDg0LCAidmFsdWUiOiAxLjAwMjgwODQ1MTY1MjUyNjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ1NC40MTQ0NDMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMzE1Nzc5ODM0OTg1NzMzMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2Ny4xODA1NjQyLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjQxOTY1OTUyNTE1NjAyMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ3Ni4zODQ0MjY2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAxLjU3Mzg1Njk0OTgwNjIxMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ4Ny4zMTcwOTgsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuMzc1NjQwMDY0NDc3OTIwNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ5Ny44NDAwOTg0LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjA1NzI5MjU2OTQyODY4MjMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MDcuNzQ2NDc0MywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC41NDAyMjc3NzA4MDUzNTg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MTkuNjI5NjM5MSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC42MTc0NzQwMTk1Mjc0MzUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MjguNzM1NzMyOCwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4wOTQyNzA0OTc1NjA1MDExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDAuOTI3NzkyNSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4yMTYzMzYxNjA4OTgyMDg2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTUyLjIxNDEzNjEsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMjM1ODE0MDA1MTM2NDg5ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU2Mi4zMzQwNzY2LCAic3RlcCI6IDk1LCAidmFsdWUiOiAxLjA3MjE0MTA1MTI5MjQxOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU3NC42NjM5NzI2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjI0MTM2NzM2OTg5MDIxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTg1Ljc4NTU0NiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yMzYyNTgwNTk3NDAwNjY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTk2LjcxNzc4MzUsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDMuNzQ5OTMwMTQzMzU2MzIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNjA5LjI4Njg1MiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMS4wNjE3MjM3MDkxMDY0NDUzfV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xODM4MjFfQlMxMDAiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDUzODYuNzQ2OTkxMiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjc3ODE4Nzc1MTc3MDAxOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny42OTIwNzg2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODMwNDE3NzUyMjY1OTMwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjY0MzQ2NCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjc1MjIyNjI5MzA4NzAwNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4OS42Njc5MTY1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjMwNTk5ODU2Mzc2NjQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTAuNzg2NDg0NSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjcwNzk0ODMyNzA2NDUxNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MS45OTIwOTU1LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjM3NTg5MTU2NjI3NjU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTMuMzY3NDYwNSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQ5NzQyODM1NzYwMTE2NTc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTUuNTg2NTA0NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjUzNTA2NTM1MjkxNjcxNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Ny45MzI5ODI3LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNDk2NDgzOTIyMDA0Njk5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAwLjI3MjcxNzcsICJzdGVwIjogOSwgInZhbHVlIjogMC40ODE4NzIwNTE5NTQyNjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDIuNTUyNzYyMywgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40MzAzNTg5NzYxMjU3MTcxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA0LjMzMzA1ODgsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNDkxOTE2Mzg4MjczMjM5MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNi4xNTA2ODIsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNDkzNzE0NDUxNzg5ODU1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwOC43OTg3NzgzLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0NjY5NzUwMzMyODMyMzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MTAuODc1MjUxOCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zNzI0MzU0NTA1NTM4OTQwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDEzLjYyODYyNTksICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzg5MjU3MTMzMDA3MDQ5NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxNy4wNjAzNTkyLCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQzMTc5OTE0MzU1Mjc4MDE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjAuMjkwODg2NCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zOTMxMDM0MjA3MzQ0MDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjIuNjYwODEyNCwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC40MDU3MDg5MDkwMzQ3Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNS4xNzI0ODQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNDE3NTA0NTc4ODI4ODExNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNy43OTkxOTgyLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjM1MTczNjQyNjM1MzQ1NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzMC43Mjk5NTQ1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjM3OTAyNDk1MjY1MDA3MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzNS4xNDI0MzkxLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjM5MTM2NzE2NzIzNDQyMDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0MC40NzY0NzcsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuMzc5ODMyODkzNjEwMDAwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ1LjEyNTM0LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjQyNTc2OTgwNTkwODIwMzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0OC4zNjAwMTI4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjQxNTE3MTI2NTYwMjExMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1MS43NTY4NjA3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjM2NjY5MjkwMDY1NzY1Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1Ni44ODQ0MDQ3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjMzOTk3MTg3MDE4Mzk0NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2MC45MzczNTI0LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjQzMDIyMDUxNDUzNTkwMzkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjQuNDAxNTU2NywgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zNTY0ODA4MDcwNjU5NjM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDY3Ljg5MjYyODcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMzQwOTYxNjA1MzEwNDQwMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3Mi45NzI2NTIsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMzU0NzMxMjYxNzMwMTk0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDc4LjEwMDkyOSwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zNDc0NzQ5MDI4NjgyNzA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODEuOTQ2Mjk1NywgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zNTAzNzU5ODAxMzg3Nzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODUuODIxMzU5OSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMjIxNzA3NjQyMDc4Mzk5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDkxLjc5NDg4MTgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMzI4ODQ2MTU2NTk3MTM3NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ5Ny4yNTg0MzM4LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjI5MTcwMDAzNTMzMzYzMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUwMS40Njk0MTMzLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjI3NDE5NTIyNDA0NjcwNzE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDYuMTMxMDgwNiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yOTgyMjIxNTQzNzg4OTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxMy4wNzQ4MzMyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjMyMDI0MjAxNzUwNzU1MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxNy43Njc0NzY2LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjMxMDc4OTQ5NTcwNjU1ODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyMi4zNjQ2Njk4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjMxMjM2MDEzNzcwMTAzNDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MjkuMDM0MTQzNCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yODQ4NDA0MzQ3ODk2NTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzQuNjE4NzQyMiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4zMTM3MzI5MjIwNzcxNzg5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTM5LjU2OTQ1OCwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yNjY5MzkxNjMyMDgwMDc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NDguNDc2OTIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMjc0NDM3ODE0OTUwOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTUuODQ2ODY5MiwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4yNjY0NzUxNDEwNDg0MzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjAuOTQ3NjQyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjI1MDIwNTU3NjQxOTgzMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU2Ny4wNDc4NjI4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjI3NDg5MjY4Nzc5NzU0NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3NC40NDc1Mzg5LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjI3OTY3NTk5MDM0MzA5Mzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODAuMDgzNTQ4MywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yNzA4NTQwNTU4ODE1MDAyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTg3LjQ0OTYzMjQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjgzNjcyMDY0NTQyNzcwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTk0LjE3NDM5MTcsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMzk0OTM2NDcyMTc3NTA1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTk5Ljc3NjkxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI4Mjc1MTU5MDAxMzUwNDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDguNTE2NjMyLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjI3NjE1MDcwMzQzMDE3NTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxNC4zMDM4ODk1LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjI3MzczOTYzNTk0NDM2NjQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MjEuMzEzMTI1NiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yNDA0NjczMjQ4NTI5NDM0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjI5LjU1ODQ0NzgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjY0MTQ1OTEwNzM5ODk4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjM1LjczNDgwMDgsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMjk0MTg4NjQ4NDYyMjk1NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0NC45MDUyMDMzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI3NTQ2NzkzMjIyNDI3Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY1MS4yNTcyODI3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjIxMTQ4MDMzNDQwMTEzMDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NTkuMzM0MjMyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjI0OTE0ODI5NDMyOTY0MzI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NjcuMjE3MTU0NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4yNDA4MDcwNzEzMjgxNjMxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Njc0LjcxNjY0MywgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yMDU0ODY0MzE3MTc4NzI2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Njg0LjE5ODMxNzgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjE0MjgwMDUzOTczMTk3OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5NS4zMjMzMjA5LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjI2NTk5Mjk2OTI3NDUyMDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwMy42MTg0NTE0LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjI0NTI0MTQ2MzE4NDM1Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcxMS44ODgzMTk1LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjMwODUzMjY1NTIzOTEwNTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcyMC42MjE2NTkzLCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjI1NzM1MTY2NjY4ODkxOTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MjguNDE5OTAwNywgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yMTMyNjM2MzA4NjcwMDQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MzguMTEwODQxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjI0NjAyNDgzMjEyOTQ3ODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NDUuODE1ODA5MiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yMjY3NDI2MjUyMzY1MTEyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzU2LjEzOTMwMywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4yMTI2NTgyNDEzOTExODE5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzY0LjU4NTUwMjksICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjQ2MzE3NjU0ODQ4MDk4NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3NC43MjE1NjMzLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjE5MDE0NTA2MDQyMDAzNjMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3ODMuNzE3ODkxNywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4yMjMxMzIyNTI2OTMxNzYyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzkzLjU2MTAyODIsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMjUzODUwMzcwNjQ1NTIzMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgwMy4zODA3NTkyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjI0MTA4NzgzOTAwNzM3NzYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTIuNjU0NDEwMSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yMzcwNDIwOTkyMzc0NDIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODIzLjE3MzI3NTcsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMjEzMzc0NDIxMDAwNDgwNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgzMS45NTQ0MTQ4LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjIxODA2NzU3MTUyMDgwNTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NDMuMjczNzg5NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMDkxMDA1ODkxNTYxNTA4Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODUxLjgxMTYyMDcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMTk2ODU2ODQxNDQ0OTY5MTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg2My43Mzk5MDkyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjE4ODU1NzUwNTYwNzYwNDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NzMuODI0NTQ0MiwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4xNzk1Njg1ODg3MzM2NzMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODYuMzM1OTA0NiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4yMDU0NDgyNjk4NDQwNTUxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODk5LjY0NTgyMjUsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjI0MjM2MjM1MDIyNTQ0ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkwOS4wNjgyMDQ5LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE3MTEzOTUzODI4ODExNjQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MjAuNDYyODY4NywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yMjU4NTA2NTY2Mjg2MDg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MzIuMTAzNjU2OCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xNzAwNTI5OTAzMTczNDQ2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTQ1LjIwMzcyMTUsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTkzNjU5NDg0Mzg2NDQ0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTU3LjU0NjczMzYsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMTk0MjgxODMxMzgzNzA1MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk2OC4yMDQ0MSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4xNDkyMDI0MzYyMDg3MjQ5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTc4Ljk1Mjk0OTgsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMjAyNjQ1MzMxNjIxMTcwMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk5MS4yMDAyMDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMTU5Mzk1MTczMTkyMDI0MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAwMS4yMDMzMjksICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTk1Njg5OTQ2NDEzMDQwMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAxMy4zNTc3NDMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTY0OTE3MTQxMTk5MTExOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAyNS41MTM3NDg2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjE3ODY2NjY4MTA1MTI1NDI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMzYuMTIwNjQ0OCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4xNzY2NzI4NjA5ODAwMzM4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDQ4Ljg2OTQ5MDEsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMTc4MDAxNTY3NzIxMzY2ODh9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE0NzQ3M19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjA2NDIzLjIyMDEzOTcsICJzdGVwIjogMCwgInZhbHVlIjogMC42NDg3NDExMjYwNjA0ODU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjQuMjA2MDM1OSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjUxNTgwMjE0NTAwNDI3MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyNS41NDAxODYyLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNDc1MjU5NTEyNjYyODg3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI3LjAxNDUwNiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjM5NDY4NTkyNDA1MzE5MjE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjguNjQzMzI2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDg0MzI0MTI3NDM1Njg0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMwLjk2MTY5MDIsICJzdGVwIjogNSwgInZhbHVlIjogMC40MzI1NjUwNjMyMzgxNDM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzMuMzYwNDgwOCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjM5NTA2Njc2NzkzMDk4NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNS42NDYwNjY3LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMjQzOTc3MjMzNzY3NTA5NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNy44MDgyMTQ0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMzQzNDk0OTUxNzI1MDA2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM5Ljc4OTA4OSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQzNTYwOTEzMjA1MTQ2Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0MS40MTMwMzI4LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjQyMjAyMDg1MjU2NTc2NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0My4xNDUyMjg5LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjQxODQzMDk1NDIxNzkxMDc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDQuOTk4MTQ2LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjIxMjk4NTI5MjA3NzA2NDUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDYuOTEyMjYzNCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC40Mjk5ODk1NDY1MzczOTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDguOTE5Njk2OCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC40ODQ5MDI4Mjg5MzE4MDg0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUyLjEzNzI0MDIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDUyMDYwNDMxMjQxOTg5MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ1NS41MDMzODU4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjYzNTEyNzkwMjAzMDk0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ1OC4yNzQ4NzksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzMyNjgyMjUxOTMwMjM2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYwLjY3MjgxNzUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzU3NTk4ODQxMTkwMzM4MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2My4xMjYxMTQ4LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjM0Mjk2NjA3OTcxMTkxNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjUuNzc2NzA5NiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4yMzQ1MDYwNDA4MTE1Mzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjkuMzMzMDYyNCwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yODg2ODAwNzY1OTkxMjExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzMuNzAyODQzNCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNTc1MTAwMzAyNjk2MjI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzYuOTA2NDAxLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjQxNTA3MTEyOTc5ODg4OTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODAuMDgxMjQ4OCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zOTc5NTk2MTk3NjA1MTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODMuMTEwMjY2LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjI0NDI4ODcxMjczOTk0NDQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODcuMjk5NjY5MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zMzE1NzEwNDI1Mzc2ODkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTIuNTE0MjI1NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zMjIyNzQwNTkwNTcyMzU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTYuMjM0OTg0NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yOTEyNDE1ODYyMDgzNDM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTkuNzI5NDI5LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjI1NjU0NzIxMjYwMDcwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAzLjk2ODc3NzQsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNjg3ODg1NDAzNjMzMTE3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEwLjEyMzI5OTgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMzAzNTc3MDM1NjY1NTEyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEzLjg2NzI0OTcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjcyNjM5MDEyMzM2NzMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MTcuNzc1NzU2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjQ2NDY5MjI5NDU5NzYyNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MjIuOTU0ODU4LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjMwNjYzMDEwNDc4MDE5NzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MjkuMDEzNjc4NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yODcxMDAyODUyOTE2NzE3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTMzLjQxNTAyLCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjE5MTIwOTM0NjA1NTk4NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUzNy41NTg5Mzk1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjIxOTQ3ODM5ODU2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NDMuNzk1OTY2NCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zMzMyMTkyODk3Nzk2NjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NDguNjY4OTcwOCwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4zMzE2NDIyMTA0ODM1NTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1Mi45NjQ1NDI2LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjQwOTcwNjgwMTE3NjA3MTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NTguNDMyNDIyOSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4zMDA5MTU0Nzk2NjAwMzQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjYuODE3NTA2MywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMTM2MDkxNDQwOTE2MDYxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTcyLjc5NjY2OCwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4yMDI1MjA5NjY1Mjk4NDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NzcuNTQ4NjQ0MywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC40MjQyNjAxMzk0NjUzMzIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTg1LjE4MjY4NiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4xNDUxNjY4NTkwMzA3MjM1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTkwLjIwNzk2MzcsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjgzODk5MDk4NjM0NzE5ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5NS4yMDg0OTIzLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjQ1NzA5OTMxODUwNDMzMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwMi45NzAzODcyLCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjUwNjY3MDgzMjYzMzk3MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwOC4zNTMxMzEzLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjIzMzk3Nzc2NDg0NDg5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxMy44NTY0MDUsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMjk4OTE3NTYxNzY5NDg1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIxLjc5NjM2NzQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjQwODE4MDUzNDgzOTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MjcuMjY1MTY4NywgInN0ZXAiOiA1MiwgInZhbHVlIjogMS4zNTkxNDY5NTI2MjkwODk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MzQuMzM5ODI1OSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNDc2NzYyMzg0MTc2MjU0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjQxLjg1MTAyNDksICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjM4ODYzMzc4NzYzMTk4ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0Ny44MDQ5NjgsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMTgzMDA2NzQ4NTU3MDkwNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1Ni44NTgyOSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yODg0NDc5MTY1MDc3MjA5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjYzLjA4MDAxMjgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMzA3MTMyNzgwNTUxOTEwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjcwLjY4MTc0MDUsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMjQzMDI5OTA3MzQ1NzcxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjgxLjQwMzA2MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNzAzNTAwNTk4NjY5MDUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODguMTk5NzMwNiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC41NDM4OTMzOTY4NTQ0MDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2OTYuOTgyMjUxLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjU2NDU0MTE2MTA2MDMzMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwMy4zMjkwMTcyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjEzODkwMTkwNDIyNTM0OTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MTIuNTY1NDEzNSwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4xMTYxODE3MTYzMjI4OTg4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzE5LjA3MTgxNjQsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjY2MDYzNjMwNTgwOTAyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzI3LjYzMDY3MywgInN0ZXAiOiA2NSwgInZhbHVlIjogMC40NTEzMDg4NzYyNzYwMTYyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzM1LjMwODIwMzIsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNTM0NDEyNTAzMjQyNDkyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzQzLjM3OTc0ODMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMjE0MzY5MzQxNzMxMDcxNDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc1Mi4wNjIxMDUsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuMzYxNjg0MjkyNTU0ODU1MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc1OS44MjIyODY4LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjEwMzE2OTc0NjY5Njk0OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzY5LjEzMDc0NjgsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMzE4NDE5OTkyOTIzNzM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzc2LjczMDIyMzcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTIwOTMzNDI4NDA2NzE1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzg2Ljk4ODMzNTgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMTQ0NTU4MjIxMTAxNzYwODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc5NC4zNTg3MDkzLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjE2MTk2OTA4MDU2NzM1OTkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDQuNTk4Mjg4MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4yMzQ4NDA5NDQ0MDkzNzA0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODEyLjMxOTU3NTgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTE0NjM1MjUxNDYyNDU5NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgyMi42NDIwNzk2LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjE4MTAyNzcyNTMzODkzNTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzEuMTA3MjIyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjU5NzQwMDc4NDQ5MjQ5Mjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg0MS4xODY1ODM4LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjQyNDg1NzU4NjYyMjIzODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTAuMTY0OTU1LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjE0NTc3Mjk5MzU2NDYwNTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg1OS45MDIxNDM3LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjE1OTY4NDk3MDk3NDkyMjE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjkuNjk2NDg5NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMjY0NzM2ODkwNzkyODQ2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODc4Ljk5ODU2NjIsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMzQwODAyMDQzNjc2Mzc2MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg4OS43MDA3ODgsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMTgzNTg3ODY0MDQxMzI4NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg5OC44NDIwNDMsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjI4ODM4ODc1ODg5Nzc4MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkxMy4xMTU1ODksICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjk4OTQ1MTg4NTIyMzM4ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkyMS43MDIyMTgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjc0NDE5NTE2MzI0OTk2OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkzNS42MzgxMDgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMTkyNjk4NjU3NTEyNjY0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTQ2LjUyMjU2NjYsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuMjgxNTYwMDMzNTU5Nzk5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTU2LjczNjA3MjUsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMjAxODIyOTIxNjMzNzIwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTY4LjUyMTIxMTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTg1NTI1MTQ5MTA2OTc5Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk3Ny41OTM2NDM0LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjU2MTk5Mzg5Njk2MTIxMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk4OS41NTExOTA5LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjM1MDQ5MzMxMTg4MjAxOTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMDAuODI2MDQ2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjQwMDcxNDQ1NzAzNTA2NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAxMS4xMjUwMTc0LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjM0NDM5NDE0NzM5NjA4NzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMjMuMjAzMDU2MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4xNDMzNzc5NzQ2Mjk0MDIxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDMzLjU0NDI1ODgsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTEyNTg5NTk3NzAyMDI2Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0NS4xNTQ5NzU0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjIyODEwNjU4ODEyNTIyODg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNTcuNzMxNDYwOCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4zNTkyMTU5NzQ4MDc3MzkyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDY3Ljg5ODYxNDIsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMDYwOTgzMDA5NjM2NDAyMTN9XX19XQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_2/test/accuracy%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgzMC4wNDgxOTMsICJzdGVwIjogMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzEuMzY2NTc3NCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMi44MjI2MTc4LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM0LjQzNzc3MDYsICJzdGVwIjogMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzUuOTc4OTc4OSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNy4xODgzMjg3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM4LjQ1MzIyMTgsICJzdGVwIjogNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzkuODM1NTQ3NCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0MS4zMDUzMjQ4LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQyLjgzOTIwOCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NC41MjkxMDAyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Ni42ODAwNTc1LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0OS42NDc2NTAyLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1Mi42MTcwMzY4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1NS4wMDUwMzk3LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1Ny4xMzYxMjAzLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1OS40ODgyMjE2LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg2MS43ODI0OTM0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg2NC40ODc5MDksICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY4LjI1MDA2MTUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcxLjg0NzUwMzcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc0LjUyOTAxOTgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc3LjM3NDQ2NTIsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODgwLjE5OTcxMSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODQuMTg3MzIxNCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODguNzU0Njc3NSwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTEuOTYwNzg3MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTUuMTY2OTg2NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTguNDIyODQxOCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDMuNDE4NjA5MSwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTAuMDAzNTksICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE0Ljk5MDQzNzcsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE4LjY0MTcwMTcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTIzLjc5OTczNTUsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI4Ljg0MjcxNzIsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTMyLjcyMzIyNjgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM2LjcwMTEyMTgsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQyLjY0MTA1NDksICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQ3LjczOTUwMDgsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTUxLjk3MzI0MDksICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTU2LjgxOTI1NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjMuNzU3MjAxMiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NzAuNzUyNjgyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3Ni42ODcyODYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTgyLjc3MjM0NTUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTg3LjU3NDgxNzIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTkzLjMyMzE2MTYsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDAwLjE3MDA3NDIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDA1LjM3NTA5MTgsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDExLjYyMTg1OTMsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE4LjQxNTAwNDMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDIzLjcxMzQxMjUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDMwLjkxNTE5NzgsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDM3LjQ3NzQzNDYsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQzLjEwNjYxMjIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDUxLjY2NzQxNzMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDU3LjU1ODA5MDQsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDY0LjM1Mzg0NTQsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDcyLjExOTE2MjMsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDc4LjI0MTUxMjMsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDg3LjA5ODY3MDUsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDkzLjQ4ODQwNCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDEuNjA0ODY2MywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDkuMDMwMzIxMSwgInN0ZXAiOiA2MywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMTUuOTEyOTQxLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyNC44NTMxMzEsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTMxLjYyNDYzMTQsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQxLjE2MzU5NDUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ4LjIxMDI0NzMsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTU4LjU0MjAyODQsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTY4LjEwNzU2NzMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc4LjM2NTE3NSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExODUuODM4MDU5MiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExOTYuNDA3NTU2OCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMDQuMTI0NjMzNiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMTQuODczNDE0NSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMjIuOTY2MTU4NCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMzMuMDczNDc3NywgInN0ZXAiOiA3NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNDEuOTY2MDkzMywgInN0ZXAiOiA3OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNTEuNzY4NjMyMiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNjEuNTA2NDE1NCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNzAuNzY2NTIzMSwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODEuNTk2MTk4OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyOTAuMTc3NDExLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMwMS40MDQ5NjY0LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMwOS45OTQ4MDY4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMyMi44ODMwNTU3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzNi4wMjU4ODQ5LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0NS4wMTYxODUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzU3LjEwNjk1MzQsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzY4LjY0NDA4NTYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzc4Ljk5MjE4NywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzOTEuMzIxNjcxNywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MDIuNTY4MDczLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQxNy40MDQ5NDI4LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQzMC4zNTkxMTksICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDQzLjQwMzU4MywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NTQuMTE5MzA3MywgInN0ZXAiOiA5NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NjYuNjgyMDIwNywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0ODAuMTA0NTkxNiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF83OTE0M19CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjA0Mzg1LjE4MjQ4MDYsICJzdGVwIjogMCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODYuMDE0NTY3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg2LjkyNDc1MTgsICJzdGVwIjogMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODcuOTI5NjQ0MywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS4wMDE4MDkxLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MzkwLjcyMzEzOSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Mi42OTY0MTM4LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk0Ljc3MjE5NDksICJzdGVwIjogNywgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTYuOTcyMzYyMywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5OC40NzcyNDI1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAwLjA4MjQ2ODcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAxLjg1MzM0NTYsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAzLjY3NzQ5NTUsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA1LjU1NjQ0NTQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA3Ljg0OTk0NjcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDExLjEzOTcxNzYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE0LjQ2OTIxMTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE2LjkxMzIzMjgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE5LjMyNDAzMTgsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIxLjc1ODg5NywgInN0ZXAiOiAxOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjQuMjc5NDk3MSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjcuOTU2MjYxOSwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzIuMDg3OTc5NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzUuMTI1MTk2LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQzOC4yNjI1ODU0LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0Mi42Mzg1ODI1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0OC4yMzMxOTI3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1My4yNTcyNDAzLCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1Ni44MDgxMjA3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2MC4yNjU2Mjc2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2My45NDYxNjU2LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjExMTExMTExMTkzODk1MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2OS40Njk3MTY1LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3My42MzMwMjEsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc3LjM4OTcxNDcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDgxLjI3NzMxNDcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg3LjIxOTk4MzgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDkxLjYwMTI4NzYsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk1LjY1MDY0OSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MDAuNTIwMjA1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwOC4yODY5MDY3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxNC42MTMzMjYzLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxOC45NjM3Mzk0LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUyNS4zMjc3MDU5LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUzMC43OTE1NTksICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTM1LjU0OTQyNSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NDEuODczNDkxNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NDguMTk1OTc2LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1My4xOTI1MzI1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1OS45NjEyODQ0LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU2Ni4yNzMxMjYsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTcxLjQ2NjI1OTUsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTc4Ljc5MzY1MjMsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTg0LjkzNjk3LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5MC40NjMzNDM5LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5OC45NDQyODIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjA0LjY3NTczMzYsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjExLjM4OTAwNjYsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjE5LjEzMjQ1MTgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI1LjA3ODgwOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MzMuNzE2Mzc0MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NDAuMzA4MDE3MywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NDcuOTgyODYzNywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTUuNzE4NzIzNSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjIuMTY5MDc3NCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzEuNDEzMTExMiwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzguMDM3NzU4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY4Ny43ODEzNTUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Njk3LjQ1ODU0NDUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzA3LjA4MTU0NTQsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzE0LjAxMzY4NTUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzIzLjgzNDMxODYsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzMxLjE3MTYxMTMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzQxLjMwMjYxNTYsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzQ4LjYzMzY5NjMsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzU4LjkyNTY4NzMsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzY2LjU5MTIzMjgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzc3LjMxNDI5MjIsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzg0LjkzNzA3NCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3OTUuNTkzNTM1NCwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDMuNjEwODg5NywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MTQuNDM2NzY0LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyMy4wNTI3ODc4LCAic3RlcCI6IDgxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzMy45MzgwNzA1LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg0My43NTc5MDEsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODU3LjAzNjAxMjIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODY5LjAzNjU0ODksICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODc5LjQwOTM1NCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4OTAuMDk1NTAxNCwgInN0ZXAiOiA4NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MDEuNzI5NzUxOCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTAuODkyODIxLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkyMi42NTU3NTYyLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkzMy4zMTgzOTg1LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk0Ni44MTg3ODY0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk1OS4xMDcyMTg1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk3MC41NDgxOTEzLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk4MS4xMTc3OTUyLCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk5NC4wNjUwNzY2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAwNi41NDM5MTYsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDE3LjY1ODAyMTcsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDMwLjMzMDg2OTIsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTk4NC4yODcyNTQ4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg1LjY1NTcxMSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni41OTUxMjExLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg3LjYwODk1NiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4OC43MjU3MjYsICJzdGVwIjogNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODkuOTM0Mjg3NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5MS4yMTQzMDU5LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkyLjYwMjIxNDYsICJzdGVwIjogNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTQuMDY1MTM3MSwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NS42NzE3NzI3LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk4LjI1NjM5MzIsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAwLjg4OTAyNjksICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAzLjU5MDg3OSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMDUuNTMxODAwMywgInN0ZXAiOiAxMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMDcuNTg2MTgyNCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMDkuNjUzNDg4MiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTEuODg2MDExOCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTQuNzU5NTk5NywgInN0ZXAiOiAxNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTguNTA2MzQzMSwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjEuOTQzOTcwNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjQuNTMyNDU4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyNy4yMjM2NDkzLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMC4wMTEzMzE2LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMy45MDgyMTg5LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzOS4wOTUxNzQzLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA0NC4wMDg5MjE2LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA0Ny45MjIzODE0LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1MS4xOTYyNTIsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU0LjUwMzk2OTIsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU5Ljc2MjIzOTUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDY0LjI0NjA0MjcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDY3Ljg5MTM4OTEsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDcxLjUzNzkwMjgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDc3LjAyMzIxMDMsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDgxLjc1NjI4OSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODUuNjg1OTg0LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4OS43NzQ4ODU3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Ni4yMDM4MjYyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwMC44NDAzMzc4LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwNS4xNDM0MDE2LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExMS4wNzgwOTg4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExNy4wOTUxOTg2LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyMS42OTczMjA1LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyNi45ODE5NTk4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNC4wNTAyMTc0LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzOC44ODg3MzQ2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0NC4zNzQ0MzMsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTUxLjY3NzI3MTYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU2LjkyMzEwNTUsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTYzLjAwNTYwNiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzIuMjYxNzAzNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzguNzMxNzI4OCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODYuNDU2ODQ4OSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTIuNTU1MzkzNywgInN0ZXAiOiA1MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTguMjA1ODkwNywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMDYuODkyMDA1MiwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTIuNzc4NDkxLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyMC4yODM0MzAzLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyNy40OTY5NTU0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzMy41NTQ4MTgyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0Mi40NDE3NTMxLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0OC44MzE3NzYsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjU3LjQ1NTk3MDgsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjY0LjYwNDUyNDYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjcyLjM3OTIxODMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjgwLjcxMTU2NSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyODcuOTU5MTU0MSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyOTcuNDkxNjI1LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMwNC41MDc4NjU0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMxNC40Mjc1OTI1LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMS41NzMxOTMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzMxLjc1ODIyOSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMzkuMzUzMzI4NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNDkuNzA5MDI5NCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNTcuMzkwOTEsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzY3Ljg5OTAyNCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNzUuNjc2MDM5NSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzODYuMzg3NzAyMiwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzOTguODI5MDk0NiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDguMTA3NTM0MiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MTguNzQ1MjA3OCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MzEuMDE2MDI5LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ0Mi4yODc5OTgsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDUxLjU0MDg4NjksICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDYyLjAxMzk2MTgsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDcyLjcwODIwMjYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDgyLjM1Njk4NDYsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDkzLjg1MTk2NDcsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTAyLjU3NDg0NjMsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTE0LjE4Mjk1NzIsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTI0Ljg0OTY2MTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTM1LjE1MTI0MzIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTQ3LjEyNjkwOTUsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTU2LjY4ODQ3NywgInN0ZXAiOiA5MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1NjguNzc1MzkwOSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1ODAuOTUzMjUzNywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1OTAuNjIwNTQ0LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYwMy4xMjcwMDY1LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYxNS4yODE2NzYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjI1Ljg4NzIxNzUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjk3Ni42MTEzNTcyLCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjY5MDcxOSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OC42NjcyNjg1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc5Ljc0ODM1OTcsICJzdGVwIjogMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODAuODk2MjA3LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjExMjIwODgsICJzdGVwIjogNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODMuNDI5NzUyOCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4NS40OTI2MzQsICJzdGVwIjogNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODcuOTcyNDMwNywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5MC40MDU4Njk1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkyLjU0NzI3MDMsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk0LjM2NjAzNCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTYuMjk3MTMxNSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTguMjgwMDkwOCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDAuNDU1MTU1NCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDMuMTk1NDA1MiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDYuNzUzNDkzNSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTAuMTQwNzgyNCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTIuNjQ2OTA1MiwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTUuMjQwNjY4MywgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTcuODQ1OTE1MywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjEuMjQ1NDE5MywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjUuNDY0OTM5NCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjkuMDA4NzE5NywgInN0ZXAiOiAyMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzEuOTc3MjE1OCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzQuOTg2NjM1NywgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzguNDMzNjY5MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDMuNDI1OTU4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0Ny4zNDA5NTI2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1MC43MTAxMTk1LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1NC4yOTI0OTg4LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1OS40MzA2MDIzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2NC40NDI5MDksICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDY4LjE3OTY1MjUsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDcxLjk2NzE3MywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzcuNjYyNzcxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4Mi43NDAwNzYzLCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4Ni44NTIwMzg2LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5MS4yNDcwMzA1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5Ny45MTc4MTYyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEwNC40MDMwMDY4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExMC45MjkyMzQzLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExNy4zMTY4NjYyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyMS45NjQyNTUsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI2Ljg4Nzk4NzQsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM0LjEyNDkyMzIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM5LjA3MjE0MDUsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQ0LjEzOTE3NzMsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTUxLjgxNDgzODQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTU3LjEwOTU3MjYsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTYzLjAzOTAzODIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTcwLjU4ODUyOCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzYuMDUxNDMwNywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODMuMjI0NDI0MSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxOTIuODUxNDM5LCAic3RlcCI6IDU0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5OS4wODk4NjQ1LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwNy42NDE5NzEsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjEzLjc5NzMyODUsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjIwLjgyODg2NTUsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI4LjcxMzU2MTUsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjM0Ljg5MDM5NTksICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQ0LjE4MDIyMDYsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjUwLjU2Nzc1MSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTguOTM2NDUwMiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNjYuNDc4ODg4LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI3NC4wMTgzMjg3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI4Mi42NDY3MjgzLCAic3RlcCI6IDY2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI4OS44NzUyMjAzLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI5OS4yODQ5Mjg2LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMwNi4zMTk4OTk2LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMxNi4xMTQ0MzQyLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyMy4zNTQ1NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzMuNjMyNTI2NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDEuMTYxNjM2OCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTEuNDc3NTAwMiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTkuMTEyODAyNSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjkuNTI0ODAxLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM3Ny4zMzYwNTg2LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM4OC4yMzA1NzUzLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM5Ni41MzMyMDIyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQwNi45Mzk1MTIsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDE2LjMzMjc2OSwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MjYuNDA4MDYyLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQzNi42OTIxNjg3LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ0OC45MzE0NSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NjIuMTA5MjIwNSwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NzIuMDA3NTkzNiwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0ODMuNDY1MjY4OSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTIuMDM4NTAwNSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MDMuNzA3NTAyNCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MTMuODA2NTQ1NywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MjQuNTU4ODY1MywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MzYuNjUzOTAxMywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDUuOTI5NzQzNSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NTcuODc3MDQwOSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NjkuNjAwNzE4NywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NzkuODU2NDE2MiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1OTIuMjgwOTE3NiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MDMuNTk3ODAxLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzYxNC42MDI3NTQ4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE4MzgyMV9CUzEwMCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny4wMjg1Mzc4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjA0ODE3NjUsICJzdGVwIjogMSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODkuMDI4OTc0LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkwLjExODE3NzcsICJzdGVwIjogMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTEuMjg5MjYxMywgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Mi41NjM1NzE1LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk0LjM0NDMwMDcsICJzdGVwIjogNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTYuNjgyNDUyMiwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5OS4wMjE1ODgzLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAxLjUxNTM2MDYsICJzdGVwIjogOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDMuMzgxNDg2LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNS4xODE3NDEyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNy40NTUwMTYxLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwOS43ODMwODIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDExLjk1MDk4OTIsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE1LjM3MzQ3MzYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE4Ljc3NjA2OTYsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDIxLjQzMDg4OTgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDIzLjg5NzkwODQsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI2LjQ2NTI4OCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjkuMTEyODM5MiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MzIuOTczODI1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzNy43ODM0MTU4LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0Mi44NTU3NTI3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0Ni44NzU0NDIzLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0OS45Mzk4MTIyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1NC40Mzc1NzYzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1OS4zNDAyNTg2LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Mi43MjQyNTAzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Ni4xOTAwNTQ3LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3MC4yMzQ0ODI1LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3NS45ODc3MDI0LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4MC4xMTk1NjY0LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4My45MjY1MjQyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4OC41NzkyODU5LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ5NS4yMDU0MjQsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk5LjQ1MjE4MywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDMuNzM2NTg5MiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDkuODYwNDczMiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MTUuNTk5NTE4LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyMC4xODEzMzc4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyNS42NjkyNzEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTMyLjM3MjM2NSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzcuMjg5ODM0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU0My43NTI4ODg3LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1Mi44NTc2MjY0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1OC41NDc1NywgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjMuNzA3NjAzNywgInN0ZXAiOiA0NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NzEuNTExNjA3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3Ny4zMzA3ODE3LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU4My4xOTIyODM5LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5MS41NTE3MTkyLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5Ny4xNDY4MTY3LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYwNC4zMjI3OTUyLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxMS42MDQwNjk3LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxNy40NjM2NzU3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyNi41OTY0Njc1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzMi44Mjc2MjI3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0MC42MTgzODA4LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0OC4yODAyNDI0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY1NC42MTA3MDkyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY2My45NDQxNjA3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3MC43NTY3NzM1LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4MC40OTgwNzQzLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5MC4xNDcxMTgzLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwMC4zNTk3MjQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzA3LjQ4MjAwOTYsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzE3LjM3ODEzODMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzI0LjQ3MTY4MiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MzQuNzIxMTQ2LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc0MS45NzQ4MTQ3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc1Mi4yOTAzNDY0LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc2MC4zMjMxODc0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3MS4xNjM1ODQsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzc4Ljk0MTg5OTgsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzg5Ljg4ODY4NzYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzk3LjkwMDQ3NzYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODA5LjAwNTY5OTYsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODE3LjI5MTI2NTcsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODI4LjE5Nzc0NiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MzcuMjc0OTk5NCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NDcuOTAwOTc5OCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NTkuMDYzNTM1NywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NjguNDgyMTA2MiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODAuNDY2NDcwNywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4OTQuNjM1OTMyNywgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MDQuNDQzOTEsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTE2LjM4NTg2ODgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTI1LjMyNDczODUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTQwLjk3MTIxODYsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTUyLjcyNDcxNzYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTYyLjU0NDcwMzIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTc0LjY4NzQ0NywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5ODUuMjY3ODM3NSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5OTYuNDY2ODI0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMDguODY5NzY4LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAxOC45MDI4NDk0LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAzMS4yMTA5NzA0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjA0NC4zMTU0MTIzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjA1NC44NDA5NDU1LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE0NzQ3M19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjA2NDIzLjQ5NTE0NDgsICJzdGVwIjogMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjQuNzIzMjg0NSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyNi4xNTE0NjU3LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI3LjcxNzA5OTQsICJzdGVwIjogMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjkuNjE0MDE0LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMyLjA3Mjk5MTgsICJzdGVwIjogNSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzQuMzk0MDg0NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNi42Mjc3MDE4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM4Ljg1Njg2NTIsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDAuNTQ1NjA5MiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0Mi4yMDQyNTEzLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0NC4wMTE5NSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDUuODkxMjA1MywgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDcuODc1NzgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUwLjQ2NDQ1NTQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUzLjgwNTExMzMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU3LjA5MDM4MTYsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU5LjQ0OTI5NDYsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYxLjg3MDMxMTMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY0LjQyMzMzNSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjcuMjg3Nzk1MywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzEuNTkxNDc4OCwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzUuNDY3ODg4NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzguNTU2NjM1MSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODEuNjIyMTU1LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ4NC44MjYyOTI1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5MC4wODA1NTM1LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5NC40NjQwMjQsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDk4LjA2NzU3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUwMS40OTg1MTM3LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUwNy4zNjM5NzEyLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUxMi4wMzQ0ODksICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE1Ljg2ODg0NDcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE5LjgzOTExNjYsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTI2LjY3Mjk3MywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzEuMzMxNTEwMywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzUuNTg0MjcxNCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NDAuNzc0NjQ5LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU0Ni42Nzk3MzI4LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1MC45MDIxMDIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTU1LjM3MDg4OTIsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTYyLjg1MTM5MzIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTcwLjU4OTE4MjEsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTc1LjMwNjY4NDcsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTgxLjYxNjEyMSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODcuODg2NDIyOSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1OTIuODQzNTM2OSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1OTkuMzk4MjMzNCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MDUuODAyNDc1MiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MTEuMTAyNzc2LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxOC41NDk3MzY1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYyNC42ODE2NDAxLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzMC4yNzQwMzE0LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzOS4xNzQ3MzUzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0NS4wMTE3NTc5LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1Mi41NDg1MTcyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2MC4xNzk1MDY1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2Ni40MTk5OTU1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3Ny4xNDQ1NTc3LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY4NC42OTMzMDM4LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY5My41NDkyMjIyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwMC40MTMzMTcyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwOC4wODExMjIyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcxNi4wNzU3MDI0LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcyMi43MTgzNTc4LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjczMi4xODEzMDYsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzM4LjkyNDIwNjUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzQ4Ljc4ODMzMTMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzU1Ljg5NDk5OCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NjUuODUxODU4NCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzMuMDMzNDU2OCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3ODMuMTM1NTIzNiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3OTAuODY4MjEyMiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDAuODEwODAxNywgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDguNjMzMTU2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgxOC45MzU2MjMsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODI3LjAxOTgzOSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzcuNTU4MjU4OCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NDUuNDQ3ODU0LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg1Ni4xNjEyMTIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODY0LjIzMzEwMzMsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODc1LjIzNTkyMzUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODgzLjg5NDQ1MDIsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODk0LjU1MDgzNzgsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTA3LjU2OTExODUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE3Ljc1NjkwNiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MjguOTQ4ODg2LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk0MC44ODI4MzY2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk1Mi41NTAyMjY0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk2Mi43ODk2OTM0LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk3My40NzY1Mjk4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk4NS40MzY2Njg5LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk5NC41NTQxNjA0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAwNi44MTgwODExLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAxNy43ODc0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMjguMzY4MDY2NSwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNDAuODUzMTA0NCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNTEuMzgxMjQsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDYzLjA5OTU5NDYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDc1LjY5NTczOTcsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dfX1d","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_2/train/loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMi90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgyOS45MzY0MjY2LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDEuMDUwODE4MzI0MDg5MDUwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMxLjIzODEwNDYsICJzdGVwIjogMSwgInZhbHVlIjogMC42NjY0NjA1NzM2NzMyNDgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzIuNjY0Mjk0NSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjY5OTM1MTU0OTE0ODU1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNC4yNzcyMDA1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDU1MTc1NzI3NjA1ODE5N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM1Ljg2Nzc0NzgsICJzdGVwIjogNCwgInZhbHVlIjogMC40NzAzNjA4NzUxMjk2OTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzcuMDYxNjY4NCwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQwNzQ1ODIxNTk1MTkxOTU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzguMzE1NTA2NSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQxNzAwNzI2NzQ3NTEyODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzOS42NzA4ODgsICJzdGVwIjogNywgInZhbHVlIjogMC40MDQ1MTI5MTIwMzQ5ODg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDEuMTM4NjUwNCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQxMzMxNzc2OTc2NTg1Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Mi42NjM3ODkzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzc5MTI2Nzg3MTg1NjY4OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NC4zMzY5NzU4LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjM5MDY1Njg1ODY4MjYzMjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDYuMzI2NDQwOCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zODkyNzM5MTE3MTQ1NTM4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQ5LjI5NzA0NiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40Njg0ODY5NjQ3MDI2MDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTIuMjM3NjAyMiwgInN0ZXAiOiAxMywgInZhbHVlIjogMC4zNTE3NDcyNzQzOTg4MDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTQuNzU2OTA0MSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zODUwNTExMDE0NDYxNTE3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU2Ljg2NTAyMTcsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzM0OTI4ODcwMjAxMTEwODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1OS4yMDUwNDgzLCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQxMjQ4Mjk0NzExMTEyOTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjEuNDc5OTQxMSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC40MTM3MDkwNDQ0NTY0ODE5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY0LjAwMDY3NDcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzMyMjI4ODY5MTk5NzUyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY3Ljc5NTc0ODIsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzY2MjAxOTA3Mzk2MzE2NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3MS41MTUxMDA3LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjQ1MjkzNDU5Mjk2MjI2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc0LjE5MzUwNSwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC40Njk3MzY3ODQ2OTY1Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3Ni45ODE2Njk3LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjMwMzYyOTE4OTcyOTY5MDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NzkuODM4MTg3MiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC40MDAzMDYzNDQwMzIyODc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODMuNTczMjQ2NSwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zNDM4NjExOTI0NjQ4Mjg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODguMTU5NDY4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjMzMTQxNzU5MDM3OTcxNDk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTEuNTc0MTM0MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4yNzc3NDQ1NjE0MzM3OTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTQuNzY1NzIwNiwgInN0ZXAiOiAyNywgInZhbHVlIjogMC41NjM4MTk2NDY4MzUzMjcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTguMDEwNDc2NCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC40MjIyMzExMDc5NTAyMTA1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTAyLjcxOTgwOCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC40NzI3OTUxNTg2MjQ2NDkwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTA5LjIwNTIzNzIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDE3NjY3MjM5OTA0NDAzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE0LjUxNzczMzgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNDQxNzg1MDY3MzE5ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxOC4xNjMzMDE1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjM4MzM4ODAxMjY0NzYyODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkyMy4wMTY0MTY1LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMzODI0MjYyMDIyOTcyMTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjguMzYwODgyOCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yOTI3NTk1OTczMDE0ODMxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTMyLjIwOTY0NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNjA2NzcxODg2MzQ4NzI0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM2LjE5MjI3NzcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzQ3OTQwNTA0NTUwOTMzODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0MS44Mjk2NzIzLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjU1MTQyNDM4NDExNzEyNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0Ny4xOTU0ODQyLCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjM0MTMwNDM2MTgyMDIyMDk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NTEuNDI1NDI4NiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yOTM1OTc3NTc4MTYzMTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NTUuODk5MjAxLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjM4MzY1NjMyMjk1NjA4NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2Mi43ODA2NzI4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjI5MzM2NDcwMzY1NTI0Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2OS44MzI5ODU5LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI5MTAwMzA0ODQxOTk1MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3NS43MjA4NTY3LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjMyNzA1NDk0NzYxNDY2OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4Mi4xNzE2ODgsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNDMyMTk3MjEzMTcyOTEyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTg2Ljk0Njg5NiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4zMDYyMzUxMzQ2MDE1OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk5Mi4yNzA4OTgzLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjQ2MDAwMTI4OTg0NDUxMjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTkuNTA2MzYwNSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4zNDg3Mjk2NDAyNDU0Mzc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDQuNjU2NTQzNywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yOTQ3NTM1ODEyODU0NzY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMTAuNTI2OTE4NiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4zMjE5NTk1ODQ5NTE0MDA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE3LjcxMzY1MiwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC40MzY3NDQ0MjE3MjA1MDQ3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDIzLjAwMjE4NDYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMzAxNTM1Nzg1MTk4MjExNjd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAyOS43NjU1NzQ1LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjMxNDk1NDMxMDY1NTU5Mzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzYuNzQyNDYxNywgInN0ZXAiOiA1MywgInZhbHVlIjogMC4zMTMxMzIwNDc2NTMxOTgyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQyLjM1MzEyODQsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjY0NDAxMTY3NjMxMTQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDUwLjQ4NTUyNDQsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMzk0OTc0OTE3MTczMzg1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDU2Ljc3NDEzMTUsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNDQwMTE5Mjk2MzEyMzMyMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA2My4wODQyNDE0LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjMwNDAxMTA3NjY4ODc2NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3MS4zMTg4NzMyLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjM1NjQyNzc1ODkzMjExMzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNzcuNDIzMjU3LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjUxNDM5Njg0NjI5NDQwMzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4NS44NTEzMDI0LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjU2MTU5MjUxOTI4MzI5NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5Mi42MjQ3ODksICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjQxNTg3MjA2NzIxMzA1ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEwMC4yODE3OTE0LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjMyOTIyMTMwODIzMTM1Mzc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDguMTk0Njc5MywgInN0ZXAiOiA2MywgInZhbHVlIjogMC40MjgzNjkwNDUyNTc1NjgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTE0LjY0MjQ0MDgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMzE4NDMxNzk0NjQzNDAyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTIzLjk3NDgzNywgInN0ZXAiOiA2NSwgInZhbHVlIjogMC43NjE2OTQ3ODg5MzI4MDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMzAuNjkzNzI3NSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yMzIzNDg3Njk5MDMxODI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQwLjI3NzY0MiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yMzc5MzE0MDA1Mzc0OTA4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ3LjI3NTU2OTIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDEuMDY0ODMyNjg3Mzc3OTI5N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTU2LjY5NTY0NzcsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMjg4ODA5Nzc2MzA2MTUyMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE2Ny4xNzAwNjQ3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjQ5MDg0ODM5MjI0ODE1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE3Ny4yMTg5NTg5LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjIxNTgwOTk4NTk5NTI5MjY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExODQuODQ2NjA1MywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC40MjI2NDIzNzk5OTkxNjA3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk1LjM4NTIwNCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4yMTQ1NjczNDgzNjEwMTUzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjAzLjA2NTM4NDQsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMzAwNjkyOTQ1NzE4NzY1MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIxMy44MDg4NzUsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNDk3MTI1ODY0MDI4OTMwNjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIyMS41MzAyMjQ2LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjI2NjIzODIxMjU4NTQ0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIzMS45MDg1NTYyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjQ4NzQ4OTEwNDI3MDkzNTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNDAuMjA3NDMyMywgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yNDg2NDk2NDE4NzE0NTIzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjUwLjY4OTIyNTcsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNDY1NDkyNzU1MTc0NjM2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI1OS43NzMyMTcsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMjQ4NTI3Nzk1MDc2MzcwMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI2OS42NDk0ODMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMzQ3MDA4NDM2OTE4MjU4Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI3OS44ODQ1NzU4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjI1ODI5NjA3MjQ4MzA2Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODkuMDY0NTEzNCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4zNjYzNjEzMjAwMTg3NjgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDAuMDc0MTE3NCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC40MTk2Nzg1MDkyMzUzODIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDguODA2OTA4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjI4MDA5MzYxMDI4NjcxMjY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMjAuODE0NzczLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjI0Njc0NzQ3ODg0MjczNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzNC4yNDc5MzUzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjc2NzU5MzIwNDk3NTEyODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0My43NzI1NDI1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjIyNjM0ODA3MjI5MDQyMDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNTUuODUzNzUxLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjkxOTExNDM1MTI3MjU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzY2LjQ2OTE2NDQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDEuMDIxNDEzNjgzODkxMjk2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzc3LjcyMTU4MzEsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMzU4ODQyMDc0ODcxMDYzMjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM5MC4wNDA5NDA4LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjYxMjE1OTkwNzgxNzg0MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQwMC4yODk5MTQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMjc4ODg5Mjk4NDM5MDI1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDE1LjIxMDE5LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjQ0NzY0MTQzMjI4NTMwODg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MjguOTY2MjYwMiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC41ODEzMDc1OTAwMDc3ODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ0MS44NTE5MSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4xODkxMTk5NjQ4MzgwMjc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDUyLjAzOTIzNzcsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDEuMTIxMjUwODY3ODQzNjI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NjUuMzA1MTQ4NiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yODMyMTI5Mjk5NjQwNjU1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDc4LjY4ODU1NDgsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuOTAwNzgxMzMzNDQ2NTAyN31dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNzkxNDNfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDM4NS4xMjA2ODksICJzdGVwIjogMCwgInZhbHVlIjogMC44MTI0NTc1NjE0OTI5MTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODUuOTQxODYzOCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjUyODU3NDA0OTQ3MjgwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ni44MzkwNzUzLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjA5MTMyMjg5ODg2NDc0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg3LjgyODQ0OTcsICJzdGVwIjogMywgInZhbHVlIjogMC4zNjc0MDU4MzE4MTM4MTIyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg4Ljg5MjA4NCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjMzNjkzODgyODIyOTkwNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MC41MjgwMDQyLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuMzg1MzA3MjUyNDA3MDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTIuNDU4NjAzNiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQxMDI2NDk2ODg3MjA3MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5NC41NDM5MjI0LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMjYwNzY0MjcxMDIwODg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk2LjcyODE3MDIsICJzdGVwIjogOCwgInZhbHVlIjogMC4yNzk4NTcwMDk2NDkyNzY3M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk4LjMwNzIwNjIsICJzdGVwIjogOSwgInZhbHVlIjogMC4zNTAwMTU0OTEyNDcxNzcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTkuOTAyMjUyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjM3MjE4MzU2MTMyNTA3MzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDEuNjQ3NjUxNywgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zNDgzNzUwODIwMTU5OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDMuNDcwODQzNiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yODkyMzY3NTQxNzkwMDA4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA1LjMzMjg4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0NzQzMDkzODQ4MjI4NDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDcuNDczMTg2NywgInN0ZXAiOiAxNCwgInZhbHVlIjogMC40MTg2OTU3Nzc2NTQ2NDc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTAuNzEyNjA1NSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zOTQ5MTQ2ODY2Nzk4NDAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTQuMDYzMjkwNCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMDUwMTU0MTQ5NTMyMzE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTYuNjQ2MDI0MiwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4yNDc2NTE1NDcxOTM1MjcyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE5LjAyMzM0ODYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzE5NDMyMDc5NzkyMDIyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIxLjQ2MDQ0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjM2Mzg0MzU2MDIxODgxMTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjMuOTU1NzUxNCwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4yNjE0ODc5OTA2MTc3NTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjcuNDI3MDk4MywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yMzQyMTA1MzU4ODM5MDM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzEuNTQ2MzYxNCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4yOTUzMDEyODgzNjYzMTc3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM0Ljc3MTU5NiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yNDQwMjg3NzY4ODQwNzg5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM3Ljg4NzU5NjYsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMTg3NjIzOTQ3ODU4ODEwNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0Mi4wMzY3MjUzLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjI0OTc2NTQyNTkyMDQ4NjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDcuNDE5OTc4LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjI0MjkwNzAwMjU2ODI0NDkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTIuNjQzNDU1NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4xOTQzOTc0MDQ3ODk5MjQ2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU2LjIzMjU0NTEsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuMTkwMzYwMDg0MTc2MDYzNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1OS44MTE5OTM2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjM5ODQ2NTU3Mzc4NzY4OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2My4zMDQwNzEsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDMwNTM5OTk1NDMxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY4Ljc0NzAyNDMsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTMzNzg1NzU0NDQyMjE0OTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3My4xNjI3NDAyLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjE4MzkzMjkwMDQyODc3MTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NzYuODk1ODA5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjQwNTY5MDEzMzU3MTYyNDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0ODAuNzE5NjYwNSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yOTQ0NTE4NjI1NzM2MjM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg2LjQ0ODE1ODUsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMjU3NDg0OTcyNDc2OTU5MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5MS4wODkzMTcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzgyMjM1NjE2NDQ1NTQxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk1LjEyNjkxMDIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMjY2NDAzMTk4MjQyMTg3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk5LjU5OTM2OCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yMDAyMzg0MDY2NTgxNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MDcuMjI0Mjg3MywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yMjI1NTM3MDAyMDg2NjM5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE0LjAzMjgyNCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4xNzI5ODk1NjIxNTM4MTYyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE4LjM5NDMsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMTAyMzM2MTMxMDM2MjgxNTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUyNC40MDg1MDk3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjE2ODg4MTA3MzU5NDA5MzMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzAuMTc4MzcyMSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xNjEzMzEzNDA2NzA1ODU2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTM0LjkzOTI0MDUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTEzMzk1MTU0NDc2MTY1Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU0MC44NjEzNzQxLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjA5NDcxMjAzMzg2NzgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ3LjU0OTkyNjMsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMTg2NTQyMTM4NDU3Mjk4Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1Mi41MjY5Nzg1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjE0MjQ3NjYzMzE5MTEwODd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1OC44Nzc4MzQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMTc5MDQwMzg3MjcyODM0Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU2NS41ODYxMjQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNDIzNTQ1NjU4NTg4NDA5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTcwLjc4MTk0ODMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMTY4MzYyOTMwNDE3MDYwODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU3Ny43MDI1OTkzLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE0NzQ4Nzg3ODc5OTQzODQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODQuMjIyNTMwOCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4zNDA3NDE0ODUzNTcyODQ1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTg5LjcyMDgzNzQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMTI3NDcyODE3ODk3Nzk2NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5Ny44MTQ0NDI0LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjExNjQxNjk5ODIwNzU2OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDMuOTEzNDA0NSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yMDQ5ODU4MjcyMDc1NjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MTAuMTUyNTA5NSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4wODQ3MjI2NDU1ODA3Njg1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjE4LjM0MDA3MiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC4xODgwMTE4OTk1OTA0OTIyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI0LjI3Mzc4MTMsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMjg2MDA1NDM3Mzc0MTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MzIuNDU3MzI2NCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNDkxNjM3OTc0OTc3NDkzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjM5LjQ3MTA0OTMsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMjQ5MjE4ODA2NjI0NDEyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY0Ni41Nzc4MTk4LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjEyOTAwMTM5MzkxNDIyMjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTQuODgwMTA4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjIxNzE4NTE1NDU1NzIyODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY2MS4yNjczMjQyLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjA4MDI2MDM0Mzg0OTY1ODk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzAuNTExODM5MiwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4xNjc1ODg4MTUwOTMwNDA0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Njc3LjEzNDM1MzYsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMDkzOTE1NjI2NDA2NjY5NjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY4Ni40MDA5MTgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMTE1NjQ5NjE4MjA4NDA4MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY5Ni4zMDIzNjgyLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjA3NDE2NTY5NDQxNTU2OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcwNi4xNDMzMTA1LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjI4NDU1ODY4MzYzMzgwNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxMy4wODczNjEsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMDI5MjA5MTUzNzI2Njk2OTY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MjIuNjg2ODcyNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4xMzM4Njk2OTI2ODMyMTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MzAuMjA1NjkzNSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4wNDc5OTgzODM2NDEyNDI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzM5Ljk2MDMyMiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4yODU5MDA1MzMxOTkzMTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDcuNjY1Mjg3LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjMyNDIwMzg3ODY0MTEyODU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NTcuNTEzMDM1NSwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xMDM0OTkyMTg4MjE1MjU1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzY1LjU4MjIxLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjIwNDA4NzIyNzU4MjkzMTUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NzYuMDE0MzcwMiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMzE2Njc5NTA3NDkzOTcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzgzLjg5MjAwMDcsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjQyNTQ2MTcwOTQ5OTM1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzk0LjUyMzIxLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjA5MDI0Njg0ODc2MjAzNTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDIuNTQyMDM1MywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xNTkwNDkzMzIxNDE4NzYyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODEzLjMyNDAwMiwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xMzUzMTY4NjM2NTYwNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyMS42MjYxNTg1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjA4MjgyMTU3Nzc4NzM5OTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MzIuNzc0NTI2MSwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC40MzUwMTE0MTY2NzM2NjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4NDEuOTI4Nzc2NSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4wNDM4ODcyMjc3NzM2NjYzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODU1LjUyMDMyMDQsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMzY0NDcyNjI3NjM5NzcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODY3LjgyMDQ4NzcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMDM4OTU3NTE3NTk0MDk5MDQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4NzcuMjMxMTc3NiwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4xOTkyMTE1MDgwMzU2NTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4ODguODYxMzA0NSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4zNTI1ODQzMDI0MjUzODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4OTkuODg3NTA5NiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNDcxMjEyODkzNzI0NDQxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTA5LjY3NjczLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjA4NzkwMjUxNjEyNjYzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MjEuNDIyNjg5LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjEyNTMxMzY1NDU0MTk2OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkzMS4yOTQ1NTE2LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjE2OTEzNzk1NDcxMTkxNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NDUuNTU1NTUyMiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4wNzkwNTAyMjA1NDkxMDY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NTcuODUzMjU1MywgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xOTQ4MzcwOTMzNTMyNzE0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTY4LjUxNzUyMDIsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMTkzNjg3MzA0ODU0MzkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NzkuNzA2MDU3MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4wMjgzNTAwNTE0OTI0NTI2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTkyLjY3MjgyOTQsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTYzNzM4NTA0MDUyMTYyMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAwNC4zMTc5ODIsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMTU3NTMyNDgzMzM5MzA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDE2LjI1NDgwOTQsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMjYzOTA0OTg4NzY1NzE2NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAyOS4wMzE1NjAyLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjE0ODA5NTQyODk0MzYzNDAzfV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF80MTUzM19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjAxOTg0LjE5MjQwMDIsICJzdGVwIjogMCwgInZhbHVlIjogMC42MjU3NzA4NjY4NzA4ODAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODUuNTc3MTA5NiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY4ODg2Njc5NDEwOTM0NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni41MTA5MTg2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuMzIzODcyMzI3ODA0NTY1NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ny41MDc5OTczLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuMTk0MDEyODY1NDI0MTU2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg4LjYwODM4ODIsICJzdGVwIjogNCwgInZhbHVlIjogMC4zMjU3MzkwODU2NzQyODU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODkuODAxMDc4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjY0ODU5NTMzMzA5OTM2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkxLjA3MDE2MjgsICJzdGVwIjogNiwgInZhbHVlIjogMC4yNjExODg4MzQ5MDU2MjQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTIuNDUyMDE3NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjY0OTc5NTExNDk5NDA0OTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5My44OTYwODc2LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMjIwOTYzMTIwNDYwNTEwMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NS40NjM2MDksICJzdGVwIjogOSwgInZhbHVlIjogMC4xNjczOTM3NTg4OTMwMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Ny45NDgxMDEsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDEuMTY4MzgyNDA2MjM0NzQxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAwLjU4OTE4OCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4yNzY2NzgzMjM3NDU3Mjc1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAzLjM2MDg5NjgsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMTcyNTkzMDQyMjU0NDQ3OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNS4zMDMxNzEyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjU5NTY4MTQ4ODUxMzk0NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNy4zMzM0NTUsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMTc0NDg4MzUwNzQ5MDE1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA5LjQwMTQ3OTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDg2MTU2NDYzNjIzMDQ2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDExLjYxNDI0NTIsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMDQ5MzA1Nzg1NDQ3MzU5MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTQuMzA1NjAxOCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zNzQ2OTc0NDY4MjMxMjAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTguMDY0MDMxLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjM3NjY5NjUyNzAwNDI0MTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjEuNjM0NTkwMSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4xMzYxMjY0ODg0NDcxODkzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI0LjIxNzc5NzUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDEuNDUyOTc5ODAzMDg1MzI3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI2Ljg4NTU2NTUsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNzI1OTA3MTQ2OTMwNjk0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI5LjY0MzU0NSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC41NjI5Mjc3MjI5MzA5MDgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzMuMzE4MTA0LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjMyMTA4NjI1NzY5NjE1MTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzguMzQ0NzksICJzdGVwIjogMjQsICJ2YWx1ZSI6IDEuMzc3Nzk4Nzk1NzAwMDczMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQzLjM5MzIxNTIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjAzODE2MDU2MjUxNTI1ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA0Ny41MDc0NDk5LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjAyODM3NTk4ODgyNjE1NTY2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDUwLjc1OTgyMDIsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDQuOTQ0OTAxNDY2MzY5NjI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNTQuMDkwOTA2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjQwMzE2NDMyNzE0NDYyMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1OS4wODI2NzQsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTM0OTk3NzI1NDg2NzU1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2My44MDM1MzQzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjM4MjU5MTY2NDc5MTEwNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Ny40NTI5OTM2LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjIyNTc1MjkwNTAxMTE3NzA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzEuMDYzNzMzNiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zNjA5MTIzODI2MDI2OTE2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDc2LjI4NjMxNDIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMTIxMzE1OTMzNzYzOTgwODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4MS4yNzY5NjI4LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjEwMDQ0MzU3OTI1NjUzNDU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODUuMTY0Mzk0NCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yOTEyMjg1MDI5ODg4MTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODkuMjI0NDczNywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xNDE3MzA0Mjc3NDIwMDQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwOTUuMzY3NDAxMSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC40ODcxOTA0ODUwMDA2MTAzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAwLjI4ODkzOCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zMzMxMTQ1MzQ2MTY0NzAzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTA0LjU5NzAwMTgsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNTUzMDczMjI3NDA1NTQ4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTEwLjE0MTExMDQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMTg5NDg4MzgxMTQ3Mzg0NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExNi41MDQ0NzU4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjEzMTg4NzEzNzg4OTg2MjA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMjEuMDk2ODYwNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4wMzcyOTUxNjY0MDMwNTUxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTI1Ljk4NTgyNTMsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNTMxMTI1MTI4MjY5MTk1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTMzLjQzODk0NywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC44NTI4ODIzODUyNTM5MDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMzguMjcxMTE0OCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMTMyMzU0MDgwNjc3MDMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTQzLjI4NzI0ODgsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMDcxNTAwMjQ5MjA3MDE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTUxLjAwMDI2MzIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMTI5NDQxMTcxODg0NTM2NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE1Ni4yNjE4NzE4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjUyMzYzOTczODU1OTcyMjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE2MS44Njg5OTE0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjE1MDc3NzUzMzY1MDM5ODI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzEuMTYxODE5NywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4wNjMxMzEyODAyNDMzOTY3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTc4LjAxMzAyNDgsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMzMxODI5NTQ3ODgyMDgwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTg1LjMzOTI2MywgInN0ZXAiOiA1MiwgInZhbHVlIjogMTYuODQxMjYyODE3MzgyODEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTEuODAzNzIyLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjA3NDgyODE1NTMzODc2NDE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTcuNDM0MDc4MiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMS4wNTc1MjI0MTYxMTQ4MDcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMDYuMTA1NTAyMSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC44MTk1MDYzNDcxNzk0MTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTEuOTk0NTY5OCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC41OTQxMjQyNTc1NjQ1NDQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTkuMDI1MjgzOCwgInN0ZXAiOiA1NywgInZhbHVlIjogMC4xNjc2NjU4ODM4OTg3MzUwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjI2LjczMDAzOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogNC42NTE4MjU5MDQ4NDYxOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzMi43NjA5MDM4LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjA0NjMxMzY1MDkwNjA4NTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNDEuNjE5MzkxLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc0MjAyNDQyMTY5MTg5NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0Ny45OTc2OTUyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjIxNDUyNzM5ODM0Nzg1NDYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTYuMTI3NDA4NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44NzExNDI5ODM0MzY1ODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNjMuNzI5MjE5NywgInN0ZXAiOiA2MywgInZhbHVlIjogMi45MDAzMjU1MzY3Mjc5MDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNzAuOTA4OTUxNSwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4wMzM2MTU3OTc3NTgxMDI0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjc5LjgxODg3MzQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjYzMzA4Njc0MDk3MDYxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI4Ni43MDc2NjAyLCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjAwODc3NTE4Mjk5OTY3MDUwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjk2LjU2OTkyMDgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODQ5MzY3NDk5MzUxNTAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzAzLjU1NjMzMSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4xMTE1NTc2NTUwMzY0NDk0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzEzLjQ4NzM1NTIsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMDQ2NzA5Mzg4NDk0NDkxNTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMC42MDI2Nzc2LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIyMDkxMDQxNTA1MzM2NzYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMzAuNzUyOTcxMiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yNjI3ODkzOTg0MzE3Nzc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzM4LjM3OTA1NiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC42NDc1MTk3NjcyODQzOTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNDguNjc4NDQzMiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4wMTM0MjI2NjA1Mjk2MTM0OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1Ni4zNzEwODc4LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjExOTkzODUwNzY3NjEyNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNjYuODU0ODcxMywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4zODQ2MTA5NTA5NDY4MDc4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzc0LjY1NTk4NDYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMzA3MTcxOTcwNjA1ODUwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzg1LjMzNzg5NTksICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMTIzMjY0Nzg5NTgxMjk4ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM5Ny4wNzUzMTcxLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjI2NjY4OTU2ODc1ODAxMDg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDcuMDI2NTczNCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4zNzY2MTIxNTY2Mjk1NjI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MTcuMDI0Nzc0MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4wNTc0MTQxNDQyNzc1NzI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDI5LjkxNjg5MSwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMjE5NzM1MDg1OTY0MjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NDEuMTAyNTU0LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjA4MDY0MTc2MTQyMjE1NzI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NDkuNzAwMDQ1NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43NTE1Njc2MDIxNTc1OTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NjAuODYwNTIwNiwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4xMjU1NDA1MDk4MTk5ODQ0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDcwLjg5OTA3NzcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjI4MjYzODEwMjc2OTg1MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ4MS4xNTg1OTkxLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjkyNDI2OTM3ODE4NTI3MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ5Mi41MDA4MDA2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjQ3MTcyNjY4NTc2MjQwNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUwMS40MDQ0ODQ3LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg1MTMyMjM1Mjg4NjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUxMi45ODU3NDE2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjEwNzM0ODcxNzc0OTExODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUyMi45NTA0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjQ5MTEwMzA4Mjg5NTI3ODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzMuOTA1MjM4OSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4wNzYwNzM3MDYxNTAwNTQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTQ1Ljc4NjMwMDcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDEuMDA3OTEyMDM5NzU2Nzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1NTUuMTQ1OTYyMiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4wMzY1NTg4MzI5NzMyNDE4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU2Ny40ODY2Nzk2LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjYyMTcwNzMyMDIxMzMxNzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU3OS4wMTQxNjY0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE1NzMwNDIxMjQ1MDk4MTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1ODkuMzQyOTgwNiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4zNzQ2MDAyNjE0NDk4MTM4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjAxLjg0MzEzNTgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMDA5NjA4MTk3OTU3Mjc3Mjk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MTMuMjEwNjgwMiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4wMjU2Mzk4NzExMzUzNTQwNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYyNC41MTUyNDEsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMzMxNTU3MjE0MjYwMTAxM31dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjk3Ni41NDg0MjI4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNzgxNDQ5MjU4MzI3NDg0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjYwMTkxNywgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjg2MDQ2NzYxMjc0MzM3Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OC41NzM4NTM1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjgxMTQ5MzYzNTE3NzYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc5LjY0MDEzMDMsICJzdGVwIjogMywgInZhbHVlIjogMC4zMTkzMjA4Mjc3MjI1NDk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgwLjc3MjIxNzgsICJzdGVwIjogNCwgInZhbHVlIjogMC40MzcxMjQ4NzgxNjgxMDYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODEuOTgwOTIzLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuMzUzOTUyMDgwMDExMzY3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgzLjI3MTkxMTYsICJzdGVwIjogNiwgInZhbHVlIjogMC4zNzQzMTEyNjgzMjk2MjAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTg1LjIyNzkzOTEsICJzdGVwIjogNywgInZhbHVlIjogMC4yNTgxMDMxMzIyNDc5MjQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODcuNjgwMzAyNCwgInN0ZXAiOiA4LCAidmFsdWUiOiAxLjQ1OTEzNDgxNzEyMzQxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkwLjEyNDc4LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDI2MTM1NTY5ODEwODY3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkyLjM2MDgzMDMsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMzM1MjcwOTQxMjU3NDc2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk0LjE0MjI3OTEsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMzAzMDc3NDI5NTMzMDA0NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ni4wNzIzNDM2LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM4OTE3NDY5OTc4MzMyNTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OC4wMzQ1NDQ1LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjM2NzA5MDQ2MzYzODMwNTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDAuMTkyNTc3MSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC45OTIyODE5NzMzNjE5Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwMi43NTI4MDA1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjQ4NzczNzU2NjIzMjY4MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwNi4zMzg2MDc4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjI1MzY2MzE1MjQ1NjI4MzU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDkuODQyODM1NCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC45ODMwMTg4NzUxMjIwNzAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTIuMzQwNTksICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTg5MjY2NjU3ODI5Mjg0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE0LjkyMDY5NjcsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMjI0Mzk1MDA2ODk1MDY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE3LjUzMzIxMywgInN0ZXAiOiAyMCwgInZhbHVlIjogMS4wNjU1MjYyNDcwMjQ1MzYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjAuNzExODU0LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjE4NDE3NTMyNzQyMDIzNDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjQuOTE4NjkzLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjg4MTg3OTgwNjUxODU1NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAyOC42NTc2MTMzLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjU1ODY0NDk1MDM4OTg2MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMS41OTExOTIsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuOTA1NjI2Mjk2OTk3MDcwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM0LjYxMzE0MjcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNzI0NTgxNjU4ODQwMTc5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM3Ljc5Njk0MzcsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMjk4NjU1MzkwNzM5NDQwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQyLjc5Njk2ODUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuMzAwMDk2MTg0MDE1Mjc0MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0Ni45MTgwNDQzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAxLjA1MjY4NTI2MDc3MjcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUwLjI5MDY0NjgsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTI4MjUwNTI0NDAxNjY0NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1My44MzA3NzE0LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjQxMTc5MTYyMjYzODcwMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1OC42OTM2MDE4LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjYyMDQxMDQ0MjM1MjI5NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2My45NjAwODEsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuMjYwNzI2OTU4NTEzMjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDY3LjY4ODE2MjMsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNTE0NzE5NDg2MjM2NTcyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDcxLjQ5NjgyOSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zNzUxOTY2MzU3MjMxMTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA3Ni44ODY0NjkxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjM4Njg4MDg3NDYzMzc4OTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODIuMjE1MjA5NywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4zMDM2OTM4MzA5NjY5NDk0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg2LjMxODE3NzUsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMzU3MTMwMTEwMjYzODI0NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5MC41MjM2MDk5LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjg1MDc3MjY3ODg1MjA4MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5Ny4wNTQxODQ3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjc0MDM3NjcxMDg5MTcyMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEwMy41MzQ5OTEsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMzA3NzI1NDg5MTM5NTU2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTA5Ljk3NTA5MjYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODk0MDgwNDAwNDY2OTE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxMTYuNzMwNzA2LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY1MTYzNzU1NDE2ODcwMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyMS4zNTE3MjA4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjU1NTExMTc2NTg2MTUxMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyNi4wMTAxMzMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMzM3NTY2NzAzNTU3OTY4MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzMy4zMTEyMDYsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMTkxNTA1MDI5Nzk3NTU0MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzOC40MzcwMTU1LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjI5MTY1NjIyNTkxOTcyMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0My4zODMyNDg4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjkwMjY5NjI1MTg2OTIwMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1MC45NjczNDQ1LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjM1NTE4MzQ1MjM2Nzc4MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1Ni40NTA2OTIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzY5NTQ5ODEwODg2MzgzMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE2MS44OTM5ODQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzQxMDU3MDk3OTExODM0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTY5Ljg3NjUyNTYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNjU1NTY4MjQyMDczMDU5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTc1LjMxNzgwNjIsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNDc4NDE1OTk1ODM2MjU3OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE4MS45OTA5ODQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDMuNDE5Njc4NDQ5NjMwNzM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTkxLjcwMDM5MywgInN0ZXAiOiA1NCwgInZhbHVlIjogMS4zMzY1NjE2Nzk4NDAwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5OC4zMjU1NDQ2LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjEwNDI2ODYzMjgyOTE4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwNi40Mjk1NjM4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjMxNzc3MDQyMTUwNDk3NDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMTMuMDA4MTU3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjI0MDk3MTA1ODYwNzEwMTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMTkuNTM0Mjg5NCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4zNDY0Njg2Mjc0NTI4NTAzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI3LjkwNTkwNSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4yOTM4NTQxNzY5OTgxMzg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMzQuMDY2MTUxMSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yMjQ0NzMxMTg3ODIwNDM0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQyLjk2NDEyMzcsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjEyMDA0ODE2NTMyMTM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNDkuNjc1Nzc5MywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4zNjg4MzE2MDQ3MTkxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI1Ny41OTc4MDQzLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjMxMzEyMTExMDIwMDg4MTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNjUuNTgwOTgxNywgInN0ZXAiOiA2NCwgInZhbHVlIjogMi45MjM1MjAzMjY2MTQzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjcyLjU1MTAxNDcsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDEuMDcxNzY4MDQ1NDI1NDE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyODEuNzMzMzI3NCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMi45NDQ5MzU1NjAyMjY0NDA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyODguNzgwNzk3NywgInN0ZXAiOiA2NywgInZhbHVlIjogMC45ODQ2NTA4NTAyOTYwMjA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyOTguMzQ3MzYzMiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNjM0MDg3ODAwOTc5NjE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMDUuMzc0NTQ3NSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yMDEyMjEwNjM3MzMxMDA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTUuMTUzODU4LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIwNjk0OTYyMTQzODk4MDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyMi4zNTU0NTU2LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjI1Mjk2MTc1NDc5ODg4OTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzIuNDQ4ODkyLCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjM3NDkxNzAwMDUzMjE1MDI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDAuMTU3NjAyMywgInN0ZXAiOiA3MywgInZhbHVlIjogMC4zNjY1MTAyMTI0MjE0MTcyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzUwLjQ3MDQwNywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC41Mjk5NTkwMjI5OTg4MDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTguMDY5Njc0NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44MDk1NDEwNDY2MTk0MTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjguNDk0NTkyLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjE4OTAxNTc2MTAxNzc5OTM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzYuMjkwMjEyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjIyMTE0MTc4NTM4MzIyNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM4Ny4xOTA1ODI4LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjA1ODA4MTYzODA2Nzk2MDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzOTUuMTg5NzM0NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yMjMzNTcwODE0MTMyNjkwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDA1Ljg1OTEzMTYsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTE1MjA0MjUyMzAyNjQ2NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQxNC41MDQyNywgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4xODkzNDc1NTAyNzI5NDE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MjUuMzM1MDA4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAxLjM5NTM1ODQ0MzI2MDE5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQzNC45OTEwMTExLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjExOTcyOTE0NjM2MTM1MTAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NDcuNzk3MjAyLCAic3RlcCI6IDg0LCAidmFsdWUiOiAxLjQ3NTk4OTIyMjUyNjU1MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2MC4yMTY0MzQ1LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjkwMDk2MzY2NDA1NDg3MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ3MC44NTQ2OTE1LCAic3RlcCI6IDg2LCAidmFsdWUiOiAxLjE2NDIxMzc3NjU4ODQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0ODEuOTc4MjcwNSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4zNDA4MjM5NzgxODU2NTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTAuODg0NjkwNSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4zNjMwMzgwMzMyNDY5OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUwMi40ODQxMzgzLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjAxMjUxNTIzMjg5ODI5NDkyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTExLjgzMDE2MTMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMzMzNjMwODg5NjU0MTU5NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUyMy4zNTI3NTEzLCAic3RlcCI6IDkxLCAidmFsdWUiOiAxLjcxMjY4NjY1NzkwNTU3ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUzNC44MjMxNTk1LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjA5MDQxODU5MjA5NTM3NTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDQuNjc5NzkwMywgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xNjk3MzE0MDgzNTc2MjAyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTU2LjYxNzcwMDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMzYzMzIxOTMwMTcwMDU5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTY3LjY0MDg2NzUsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNDY4NDYxMDk2Mjg2NzczN30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTc4LjU3NjAzNzQsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDYuMDMxOTk3NjgwNjY0MDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTkwLjk5MDczMiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4xNzIxNzQ5NjAzNzQ4MzIxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNjAxLjQ2MDg1NzksICJzdGVwIjogOTgsICJ2YWx1ZSI6IDUuOTY2NzAxNTA3NTY4MzU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MTMuMjc3MTk3OCwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4wOTIxOTY1ODM3NDc4NjM3N31dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1Mzg2Ljk1ODkxOCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjkwNTE1NjE5NTE2MzcyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny45NjI2MjA1LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjkyMDY3NTYzNTMzNzgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODguOTM1NDA1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjk4NzE1Njg2Nzk4MDk1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkwLjAwOTczMywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjYzMjc0MjEwNjkxNDUyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MS4xNTk2NjQ2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTQ2ODk1MDI3MTYwNjQ0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkyLjQyNzYwMjMsICJzdGVwIjogNSwgInZhbHVlIjogMC41NTIxNjU5ODUxMDc0MjE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTQuMTA5MzYyNCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjUzNjczNzAyNDc4NDA4ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Ni40MTYzOTA3LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNTA3NjIzNjcyNDg1MzUxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk4Ljc1NTY4MjIsICJzdGVwIjogOCwgInZhbHVlIjogMC41MzE3MzQwNDkzMjAyMjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwMS4xNzI5NDI0LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzkyMTc0MjE0MTI0Njc5NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwMy4xODQ5MjI3LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjU1MzMzNDc3MjU4NjgyMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNC45NTg2NDgyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjQwODU1NTk1NDY5NDc0Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNy4yMjE4MzI4LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM5Nzg3NTE1OTk3ODg2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwOS41NDUxNjgyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0OTQ1MDEwNTQyODY5NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMS42NjYyNzI0LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM4ODg0NjE4ODc4MzY0NTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MTQuOTM3NjcsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzcyMTcyNjgzNDc3NDAxNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxOC4zNTM5MTU3LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQyMjQxNTQzNTMxNDE3ODQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjEuMTQyNjg0NSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zNjI0MTEzNTAwMTE4MjU1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDIzLjU4MzY2MTYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzkxNTk5MjY3NzIxMTc2MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNi4xNTAxMDcsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzE0Mzc5NzgxNDg0NjAzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI4Ljc4MjY4NjcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMzM4NTY2NzgwMDkwMzMyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzMi40MzE1NzA1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjM0NDc0MTU4Mjg3MDQ4MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzNy4xMzM1NTExLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI4NjU0NTYwNDQ2NzM5MTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NDIuMjg1OTQ3OCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMTg1ODc3MjAzOTQxMzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NDYuNTAzNTcxNywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC40MDcwMDY4ODk1ODE2ODAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NDkuNTM4ODQ2NSwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4zMzU2Nzk1MzEwOTc0MTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NTMuNzU1NzE3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjMyMjYwNzgxNTI2NTY1NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1OC44NzQwNDI1LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjI5NTQwMzkyNzU2NDYyMDk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjIuMjk3NDQ4NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4zMTkyMjM5OTk5NzcxMTE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjUuNzQ1MzUwNCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yNzM2MzE4MTExNDE5Njc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjkuNDg2NzIzNywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMTQ3MDMxMzY2ODI1MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzUuMjE4OTM2NywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4yNzMwNDU4MDgwNzY4NTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzkuNjI0MjE0MiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4yOTcxNzM1ODk0NjgwMDIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODMuNDI0ODI2OSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yNjQ1MjgzMzQxNDA3Nzc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODcuNzAzNjgxMiwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yOTQ5NzA1MTIzOTAxMzY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0OTQuMzU1MjU2NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNDg0NjYwMTQ4NjIwNjA1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk4Ljg4NzYwNjQsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMjMyNDIzMjAxMjAzMzQ2MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUwMy4xNjA3Mjk0LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMwMDcyODg4NzMxOTU2NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUwOC45NzE2MDE1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI4NjE5NzYwMjc0ODg3MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MTUuMDEyOTQyNiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yNDk4ODUzMDU3NjIyOTA5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTE5LjU2OTA4MjcsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMjMxODQ4NTA4MTE5NTgzMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyNC42NjI2NzY4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjIyNjk4Mjc0MjU0Nzk4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUzMS43NTU0MTQ3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI1MzI3ODc5MTkwNDQ0OTQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzYuNjUwNTM4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjIxOTUzOTUwODIyMzUzMzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NDIuNTg4ODc0OCwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yMTE2NjYyODU5OTE2Njg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTEuNzcyODY0OCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMzk1ODc2OTQ0MDY1MDk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTcuODY2NzY1MywgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4yNDIzODE2MTc0MjY4NzIyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTYzLjAxMzA2MDgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMjI4OTk5NDgwNjA1MTI1NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3MC40Mjg5NzA4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjIwNzYzODkzNDI1NDY0NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3Ni41OTcwNTgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMjI3Mzc2NTUwNDM2MDE5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTgyLjI0OTEwNjIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMTkwODAyNTg5MDU4ODc2MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5MC44MjA2NjA2LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjI0OTgwMTA1NDU5NjkwMDk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1OTYuMzk0MjUyNSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4yOTE1NzUxNjM2MDI4Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYwMy4wNzY5NTUsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjM4MjA4MjA0NTA3ODI3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxMC44NDg2NTksICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjAxMzc3OTEzMzU1ODI3MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxNi42NDg5NTU2LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjIzNTAzNzQxNjIxOTcxMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyNS4zMzg1MDcyLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjE3NzM4NjA3NTI1ODI1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjMyLjAxMTE2OTIsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMTcxNDQ0MjA3NDI5ODg1ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzOS4yODc3MDY0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjE1NDQ2MjMwNzY5MTU3NDF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0Ny40MTc4NDk1LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjE3NDIyOTg5MDEwODEwODUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NTMuNzg3NDM1OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4xODYxMDg0NDAxNjA3NTEzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjYzLjA3MDYwNiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4xODk3NzAxMDI1MDA5MTU1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjY5Ljg2NTc5ODIsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMTQ1NDA3ODg1MzEzMDM0MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3OS4xNDI4NjEsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMTQ1MDYwMTA3MTExOTMwODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4OC42NzIzMzkyLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjE2MjkxNTgxMDk0MjY0OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2OTkuNDEzMTYyMiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4xNzk2MDY5NDQzMjI1ODYwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzA2LjUyNzc0NywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xODU4MTE2MjM5MzA5MzExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MTYuMjYxNjUzMiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yMDE1MDEwNTY1NTE5MzMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MjMuNTAyNjYyNCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4xNjQwMDI5ODQ3NjIxOTE3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzMzLjIxMTY1MTgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTc4ODE2MDgwMDkzMzgzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQxLjAwMDUyOCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4yMjIwODM2ODc3ODIyODc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NTAuNzAzMTQ0LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjE1Nzg1NzEwNTEzNTkxNzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NTkuMjczOTE5MywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4xOTA5NTI2ODg0NTU1ODE2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzY5LjcwODY5NTcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTU5ODI1NDg4OTI0OTgwMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3Ny44OTUzNSwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xNDk3OTE2MTMyMjExNjg1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzg4LjgwNjg2MzUsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTQ2ODA1NzkzMDQ2OTUxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzk2LjgxMjYwNzMsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMTU5NTMzNDcwODY5MDY0MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgwNy45Mjk2OTAxLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjEzMDI2Njk5NDIzNzg5OTc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTYuMDgzMTMzMiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4xODE3NDM1MDI2MTY4ODIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODI3LjA2NDQ5NzUsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMTQ3NDgwMDg1NDkyMTM0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODM1LjQ5NzU3OTMsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTMxMDI0NTM5NDcwNjcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODQ2LjcyNjQyMjUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTA3NDYxMDU3NjAzMzU5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg1Ny4xOTE4NzMzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjE0ODQ1OTU1MzcxODU2Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg2Ny4zMDUyODgsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMTI4Njg3MjYyNTM1MDk1MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg3OS4yODgzMDUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMDk5OTI2MzQ1MDUwMzM0OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg5Mi43MTcyOTQ1LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjExNTk4ODg4MDM5NTg4OTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MDMuMjU1MzU5NCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4xMjcxNjU0NTE2NDU4NTExNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTE0Ljk5OTQ2ODYsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMTUyNzkzNjYwNzU5OTI1ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkyNC4xMTcwNDI4LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjExNTAzMjE1MTM0MTQzODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkzOC45OTc4NjgsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMDk4MjUzMjcyNDczODEyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTUwLjc3NTgzNTMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMDk1MDExMTk3MDMwNTQ0Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk2MS4yODgzMTM0LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjEwNTA2ODA4MDEyNzIzOTIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NzMuNDY1MTQxLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjEzNjA3NTIxMzU1MTUyMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk4My4xNzMyOTg0LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjA4OTMyNTk4NjgwMjU3Nzk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5OTUuMTY2ODExNywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xMDYyNjQyNDg0OTAzMzM1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDA3LjQzODMyODcsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTMwNDE5NzYwOTQyNDU5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDE3LjIzNDUxODMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMDg0MjkyNzg0MzMzMjI5MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAyOS44NDUyMjQ5LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjEzNjMwOTA1NzQ3NDEzNjM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNDIuNjgwNjE2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjE0NjgwNjM3NDE5MjIzNzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNTIuOTYzODM3MSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xMjkwNDY0NTUwMjU2NzI5fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xNDc0NzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwNjQyMy40MzQ3NjEsICJzdGVwIjogMCwgInZhbHVlIjogMC44MzI3NTk4NTcxNzc3MzQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjQuNjAyOTIyLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuMzY5MTg3MTQ2NDI1MjQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI2LjAxNDc2ODgsICJzdGVwIjogMiwgInZhbHVlIjogMC41ODAyNzI3OTM3Njk4MzY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjcuNTUxNjExMiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQwNjkzODEwNTgyMTYwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyOS4zMzEwMTgsICJzdGVwIjogNCwgInZhbHVlIjogMC4zMDA1NDU3ODE4NTA4MTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzEuNzk3ODQwNCwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM3MjUyOTI2ODI2NDc3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNC4xMjMyODcsICJzdGVwIjogNiwgInZhbHVlIjogMC4zMDMzNzg3MDEyMTAwMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNi4zOTAyNTU1LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNDE3MzE0Njc4NDMwNTU3MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzOC42MDY2MDEsICJzdGVwIjogOCwgInZhbHVlIjogMC40MTYwNTM5NTA3ODY1OTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDAuMzUwNzg3NiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjI2NjI5OTYzNTE3MTg5MDI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDIuMDA1MjkyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjMwMzgwMDU1MzA4MzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0My44MDM0NzksICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMTcwNjIwOTkyNzc5NzMxNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0NS42NzY5MTgsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzAwMjI2NjU4NTgyNjg3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ3LjYyNzE3NzIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTgzODYzMDE5OTQzMjM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUwLjA2MjM5NTMsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMjQ0NjQ2MTQ2ODkzNTAxMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ1My40MTM0NTYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjk1NjI2ODc4NzM4NDAzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU2Ljc3NjYzNywgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4xOTA4MDY4NjU2OTIxMzg2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU5LjE2MjQyNDYsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMTkxODk3MzQ3NTY5NDY1NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2MS41ODYzNTA0LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjM0OTg2NjgzNzI2MzEwNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2NC4wOTk4NTEsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMTk1ODg5NjM2ODc0MTk4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY2Ljc5NTE0MzgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjc1MDkxMjYwNjcxNjE1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDcxLjA0MDMzNCwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yMzc0OTg3OTAwMjU3MTEwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc1LjExMTc3NSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4xNTQ3NjY2MDQzMDQzMTM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc4LjA0NzcyMDQsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuMTg2ODkyMzAwODQ0MTkyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDgxLjIzODA5MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4xMDU4NDkxODQwOTU4NTk1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDg0LjMyOTQzMiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4zMjkxNDQxMjAyMTYzNjk2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDg5LjM5NTYyLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjMzNjgxMDkxNjY2MjIxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5My45ODAyNzA0LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjM2Mjg5MTE2NzQwMjI2NzQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTcuNjU1NjQ3OCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yNTU1Nzk0MTE5ODM0OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAxLjA0OTQxNzcsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTkwNzMxODIzNDQ0MzY2NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUwNi40MDE3MjcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMTU0NTU5NzYxMjg1NzgxODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUxMS41NzYzODAzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjA5NTg0NTExODE2NTAxNjE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MTUuMzQ5MDY3LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjIzNjM3MTA4NTA0NzcyMTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MTkuMzIwMzU5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMyMjUxNjk3Nzc4NzAxNzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUyNS44MDE4NTI1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjI5NTQ3MTYwODYzODc2MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUzMC43NjkzMjg2LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjIxNDM1NTk5MDI5MDY0MTc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzUuMDUxODkwMSwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4yNDQ2Njg3OTY2NTg1MTU5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM5LjkzMjM5MzgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMTI1Mzg0Nzc3Nzg0MzQ3NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU0Ni4xNDE4MjcsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMzIwNzY2MDMxNzQyMDk1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1MC4zNTQ5Njc2LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjMwNTU4NjkzNDA4OTY2MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NTQuNzcyNjg3LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjE3NDE4Njg3MDQ1NTc0MTg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjEuNzA2OTI5NywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4wOTk1ODcyNjE2NzY3ODgzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTY5LjY4NjYyMDcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMjE2NDQ2MjgwNDc5NDMxMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3NC42ODExOTA3LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjA5MDY0NTg1NzE1NTMyMzAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODAuNjE3MDgxOSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yMTQyNDU3NTE1MDAxMjk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODcuMjY1OTg4LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjI0MTY3NjI0MTE1OTQzOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5Mi4yMDA5OTgzLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjE3MjI0NzM1MDIxNTkxMTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1OTguMzY1MjQyNSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4zMzM0MjQ5ODU0MDg3ODI5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjA1LjA5OTUxNSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMDIwNDA3NDY4MDgwNTIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjEwLjQzODMwNTQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTQwNjA1MTk2MzU2NzczMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxNy40MTUwNzEyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjEzMDMzNjQ0ODU1MDIyNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYyMy45NjAxOTE1LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjMzNjMxNzE1MTc4NDg5Njg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MjkuNTAwOTEyNywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4xMzk3MTQ2NzMxNjE1MDY2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjM4LjE2MDcwNiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNzc1OTM3OTE0ODQ4MzI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjQ0LjIzMTgxLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjU0MjYzNjc1MjEyODYwMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1MS4yNjU4MDYyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjE0MTE4MzQ1MDgxODA2MTgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NTkuMzQ1MjIzMiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4wOTYyNTU0ODEyNDMxMzM1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjY1LjU5NTIxNzUsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMDk5Mjk4MjUzNjU1NDMzNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3NS42MDUzMjYyLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjIzMjI3NDkzNDY0OTQ2NzQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODMuODkzMzcxOCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNDg4NTg5NjQ0NDMyMDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2OTIuMjI0NjYzNywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yNTgzMTY5MzQxMDg3MzQxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2Njk5LjU1NDExNywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC42MjQyNzE2OTA4NDU0ODk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDYuNjc0MzI4MywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4xMzIzMzI2ODI2MDk1NTgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MTUuMjE1OTg0OCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4wOTgyMjI3OTk1OTkxNzA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzIxLjcxNjc5MzUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTM5ODY4NDUzMTQ1MDI3MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjczMS4yNzgwODc5LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjEyNjk4ODY5NDA3MTc2OTcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MzguMDI5MTg4OSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yNzAzNjY4MTc3MTI3ODM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NDcuNzAyODE3NCwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4wODU5NTQyNzEyNTY5MjM2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzU0Ljk1NTQ2NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4wMzc2ODQ4OTUwOTgyMDkzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzY0LjQxMjM5OSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4xNDExNTc4MjA4MjA4MDg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzIuMDQ1MzkxNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4xNzkxMjU5MDUwMzY5MjYyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzgxLjU3MzMxNTksICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTMyNTMxMzI5OTg5NDMzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzg5LjkwNjE2NTYsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMDY1MTMyNTg4MTQ4MTE3MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc5OS4zMDY5Njc3LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjIyMzg5ODc5ODIyNzMxMDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDcuNjI4NDM5NywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xMTk2MTU5NjQ1OTE1MDMxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODE3LjM1MTg5NzcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTA4ODYyNjYwODI1MjUyNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgyNS43OTA4NTg1LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjA3MzAwODc5MDYxMjIyMDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzYuMDg2MTc0NywgInN0ZXAiOiA3NywgInZhbHVlIjogMC4wNDEzOTcxNTgwNTY0OTc1NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg0NC40MTEzNTI0LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjIwMjI1MTIyNTcwOTkxNTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTUuMDg1ODYyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjIwMDk2NDcxOTA1NzA4MzEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjMuMTY3MDg3NiwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNzgzNzk5ODI3MDk4ODQ2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODc0LjExMzg5MjgsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNDQ3NDkzNzMxOTc1NTU1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODgyLjM0MzcwMzMsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMjI4MDk1OTYzNTk3Mjk3Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg5My40Mzg4NTA2LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjIzMTU2OTA2NjY0MzcxNDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkwNS40MzYxMDcsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMzUzMjk4ODQyOTA2OTUxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE2LjYwMTg4NDYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjI1NzY3NjU3MTYwNzU4OTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkyNi44NTgwMDksICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMTgyNDA5MjU2Njk2NzAxMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkzOS42OTExMzMzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjEwODU3MTAzMDE5OTUyNzc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5NTEuMzY2MjIxNywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNDgwNDM1NjY5NDIyMTQ5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTYwLjgzMzAxMSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4wNzE0ODQxMTEyNDk0NDY4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTcyLjIyOTg4MzcsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTk3MjkxNTA4MzE2OTkzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTgzLjU0OTE1NjQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMjcyMDIyMDA4ODk1ODc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5OTMuMzI5MDY4MiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4xMTI3NDQ0NTgwMTk3MzM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDA1LjU2NzQ5MDgsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMTE4OTEyNzE5MTkwMTIwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDE1Ljc3MjkwNDksICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMDk1NDkwOTk5NTE5ODI0OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAyNy4wODY2MDc3LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE5ODEyMjgxNDI5NzY3NjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAzOS40OTMzMDUyLCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjA1MzUxNTcyODU2MzA3MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0OS4xNjMxMDc2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjE4MjI5NDQ4Nzk1MzE4NjA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNjEuNzY0NzI0MywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4xMTUzODkzOTE3Nzk4OTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNzQuMjUzMDg2NiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4wNDEwNzA3Nzc5MjI4Njg3M31dfX1d","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/test/accuracy%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAicnVuVG9TZXJpZXMiOiB7InB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTIwODUyMF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4wNjMzNjcxLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjEyNjk2NDYsICJzdGVwIjogMiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMTg5NDA3NiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4yNTE2Njk0LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjMxNzI1LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjM3OTIwOSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny40NDEzMDg1LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjUwNDcxOTMsICJzdGVwIjogOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNTcwMTE4MiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny42MzE3MTgsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3Ljc1MTIzNzksICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjkyNzE3NDYsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjEzNDYxNzYsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjI5MjAzNCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNDQ0ODg1MywgInN0ZXAiOiAxNSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNjM1MTI4NSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguODExNDc3MiwgInN0ZXAiOiAxNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguOTQ2MTUxLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4wOTg5NjA2LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4yNDIwOTgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjM5NjQ5MTMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjUzMTQ3OSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuNjg1NzA1NywgInN0ZXAiOiAyMywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuODIzMzQ2NCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuOTY1MTUxMywgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMTc1MzMxNCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMjc0MTgxNCwgInN0ZXAiOiAyNywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMzE0NDQwMywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMzYwNDkwOCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNDAwNzYzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC40MzczODkxLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC40NzM3OTY2LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41MTQ1MDU2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41NTA4OTU1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41ODczODY2LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42MjY3NjIsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjY2OTI4NDgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjcwNTk0NTUsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjc0MjQ2MTQsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjc3OTM1NDMsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjgxNTg1MDMsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjg1NDgwMTcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjg5MDk3MywgInN0ZXAiOiA0MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuOTI4MTg3MSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuOTY4NTIwMiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDA2MTk5LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wNTE4NTIyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wOTQ4OTg3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4xMzE5NDQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjE2ODU4NSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjA2NzE0NiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjQ0Mzg1NSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjg3MjExLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4zMzAzNDYzLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4zNjk5MDMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQxMDUxNzcsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQ0NjM5MTgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQ4MTg4MDcsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjUxODQwMiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTU2NTU2NSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTk4MTQ3NCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNjMzODUsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjY3MDk3NzYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjcwNjYwMzUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc0MTgxOTksICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc4MTA5NDMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjgxNzA1NDcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjg1Mjg2NTIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjg5NjcwOCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuOTMyNjUxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS45NzAyMTgyLCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wMTAwMDY0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wNDgzMDQzLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wOTM5ODQ0LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4xMzE0MzMyLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4xNjk2NzMyLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yMDgzNDcsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjI1MDU3NDYsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjI4Njk0NzMsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjMyNjc3MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMzY1Njg1NywgInN0ZXAiOiA4MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDAzODc2OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDQxNjc4NSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDgzMDgxLCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41MjgxMzg2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41NjU3NDQsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjYwMjc1OCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNjQwMTU0MSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNjc3MjQ5NCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNzE3NDMxMywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNzU0OTU4OSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNzkxNzA4LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi44Mjc3MTI1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi44NjQ3MDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjkwNzQ3MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTQ3ODY0OCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTg1ODMzLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4My4wMjI3MjksICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjA1OTcyNjUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjEwNjE5NDMsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTEzMDgzNzZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjg1OC44ODU2ODUyLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU4Ljk1NTQ4MzQsICJzdGVwIjogMiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMDMxODkyOCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4xMjE4MzE3LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjE5ODU2NTUsICJzdGVwIjogNSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMjcwNDM0NCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4zNDE2ODg2LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQxMjA3OTMsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNDgyMzEyNCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS41NTI4NTY3LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS42Mjc2NjcyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43MDM4MDE0LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43ODY2NDczLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS44NTc3NjE5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS45Mjk2ODQsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjAwMjQ5NjcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMzg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjA3MzY4LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4xNDUzMzA0LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yMTc3OTYzLCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yOTExMjk4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4zNjcwMDQyLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC40Mzc0Nzk1LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC41MDUzMzc3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC41NzU1OTA2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC42NDk3MzY0LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43MTkxMTk1LCAic3RlcCI6IDI2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43ODcyMjc5LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC44NjU0MjQ2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC45Mzg3MTEsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjAwNjI0MjgsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjA3OTM3MiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuMTUwMjc1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4yMjgxNTAxLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zMDM1NDA3LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zNzU4OTI2LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS40NDcxMTczLCAic3RlcCI6IDM2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS41MjA5NTQ4LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS41OTY1NDQ1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS42NzI5MzI0LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS43NDg1NDkyLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS44MjkxODU1LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS45MTA2MjMsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjk4OTQ2OTUsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjA3NTcwMTIsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjE2MTc5OTcsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjI1NjA4MTMsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjM0MDc3ODYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjQyNTUxMTgsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjUxMTY3MDQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjU5NTIyOTQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjY3NjA4NjIsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjc1OTY0NjQsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjg0MjU1NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuOTI1NzcxMiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDEwNjE1NiwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDk4NDI5LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4xNzk5NTc0LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4yNjQwOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMzQ0MjA1NiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNDI3MjUyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My41MTM2NjA3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My41OTkwODk2LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My42ODI4OTcsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjc2NzUzNjksICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjg0NjM5MjIsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjkyOTQzMzMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjAxMjEwNTcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjA5MDUyMzcsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjE2Nzk3ODgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjI1NDQyNTMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjMzMjA5MDYsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjQxMDY3NzQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjQ5MDkwNDgsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjU3MjIzOTYsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjY0ODc2NDgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjcyNTkxMjYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjgwMzIwNTUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0Ljg3OTMzNzgsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0Ljk1ODQzODIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjAzOTI5MjgsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjExOTQxOTMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjIwMjA3MywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMjgxMjExOSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMzYwMzgzMywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNDQ2NzE1NiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNTI2NTIyNCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNjEzMjUzNCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNjkzMjU4NSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNzcxNjY2NSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuODQ4MjQzLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS45MjU2MDMyLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4wMTg5NTc5LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4xMDc1OTcsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjE5MTAzNzcsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjI1NzY5MDIsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjMxMDEyNSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMzU5MDA2NCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDA4OTQ1MywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDY1NzM0NSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNTEzMjUxOCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuMDcxODE3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjIxMDM3ODYsICJzdGVwIjogMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuMzUwNTgxNiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC40OTQyNjI1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjYzMTE2NzQsICJzdGVwIjogNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNzU5NjM4OCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC45MDA4MDMzLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjA0NzAxOSwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS4xODM4NDk4LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjMxNTQ4NTIsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjQ1NjExMTcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjU4NzU5NzYsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjcyNjgzMjIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjg1NzIwODMsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjk5MTIxNzksICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjExODMwMTIsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjI3NDczMTksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjQwMzA4NzYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjUzMzY4NSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTIuNjYwMDAxLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi43OTUxNzEzLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi45MzA3Mzk0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4wNjEyNzc5LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4xNjExOTgxLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4yNTI2MjU1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4zMzg2NzAzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My40MjExNjk1LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My41MDMxNDkzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My41ODg2MzY2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My42NzI1OTkzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My43NTg2MzYyLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My44NDQ0ODM2LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My45Mjg3NjM5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4wMTA4MTIsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk0LjA5NDEwOTgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk0LjE3MTkwNCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMjY5MDI1NiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMzUyMzk1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC40MzU1MjQ1LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC41MTY4NTk1LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC42MDg4ODEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk0LjY4ODE3OSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNzY4MTM5NiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuODU1MTAyMywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuOTM4MTU0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4wMjMzOTM5LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4xMDc5NjYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjE4OTQ2NiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMjc1NzAxOCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMzY5ODkwNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNDQ4NDA2NywgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNTI4ODE0OCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNjIxNDU4OCwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzAxMjg0NCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzgwMTY5NywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuODYyNzg3LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS45NDQ5OTcsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjAyMzUyNDUsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjEwOTY5MSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTkxMjY1OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMjcyMTkzNCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMzY5MTcxNCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNDUxNDY1LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni41MzE5NDI2LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni42MTc2Mzg4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni43MDI4Njc3LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni43ODE5NDM4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni44NjYwMDc4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni45NDU1OTk4LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny4wMzY3MDg2LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny4xMjI3NTMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjIwMzI0MzcsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjI4NjAyNjcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjM3ODU5NjgsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjQ2MjI3MzYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjU0MTIxNzgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjYyOTU2MDUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjcwNzAyOSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNzg1MTMzMSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuODY3Njk2MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuOTU2ODk2OCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMDM1ODM0OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMTIyMzc5OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMjAzNTc5NCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMjg1ODczNCwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMzc3NDY2NywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNDU1NTQyOCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNTQ0OTM5OCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNjI4MzYyNCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNzA3MTE3OCwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNzg3MjczMiwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguODczODg0NywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguOTU0ODAxNiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMDM0OTY0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMTI0NTQ4NywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjA5MjkyMiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjg3MzgwNSwgInN0ZXAiOiA5NywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMzc3Mjg2MiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNDU3Njg3NiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNTQ0MDc5OCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH1dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTQ1NjA5X0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjU3NzAzNjQsICJzdGVwIjogMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjE1NDQzNSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi42NTYyNDU3LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjY5Mzc2MzcsICJzdGVwIjogNCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNzMwOTY2NiwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi43Njc1NTM2LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjgwOTQ0MjgsICJzdGVwIjogNywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuODQ2MzU4MywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44ODM4MzQ2LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjkyODAwNzYsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjk3NzA1MjcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjAyODI5NjUsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjA4MTEwNjIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjEyNDQ4NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMTYzNDczLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yMDExNTY2LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yNDgwNjU1LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yODc4OTIzLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zMjkxMjA0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zNzc0NDA3LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40MTYzNzU2LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40NTY3NjMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjQ5NDE5NSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNTMyNjQ1NywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNTcwOTA2MiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjA5MDg4NywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjQ3MzA4OCwgInN0ZXAiOiAyNywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjg3NjE5MiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNzI0NzY4OSwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNzcyODMxMiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODExMTg3NSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODQ4MTcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjg4NDI3MjgsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjkyNzgxOSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuOTY5OTQxNiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDA3MzIyOCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDUyNjM5MiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDk0ODU0LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4xMzU2NzMsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjE4MDA3NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjE3NDgwMiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjU2MDU3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4yOTI0MjA2LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zMjkwNTM5LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zNjQ1MDI0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40MDMzNjk3LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40NDc1MjA3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40ODQ3MjY3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41MjEyMjIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjU2MzUxOTcsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjYwMjA1NzUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY0Mzc5NTcsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY4MTg1MTYsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjcyMTgwMywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNzU4MzcxNCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNzk3MDk4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC44MzM4MjU2LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC44NzU4OTA1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45MTI0OTc1LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45NDkyOTU1LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45ODQ0MzAzLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wMjQyNTgsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjA2NjI4NTYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjEwOTUyNCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMTQ2NDU5NiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMTg5NzM3NiwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMjI5MTUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjI2NTgxNCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzAxNDkxNSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzQyMDAyNCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzgyMzIzNSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDIwNDYyOCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDU5Njk1LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS40OTY0NDY0LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS41MzQxMTY1LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS41ODc4ODcsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjYyNTY3NjQsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjY2MzgxOTYsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjcwMTE1OCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzM4MzIxLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS43NzU1OTk3LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44MTQ2ODQ5LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44NTU0MzU4LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44OTA5NDA0LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45MzA3MzgyLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45Nzg1NDgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjAxNTE1MDMsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjA1NDk4MiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMTAwNzU4LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4xMzgzNjksICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjE3NDk3OCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjEwNTc5NiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjUwMTg4NiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjkwMzU2MiwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzI3OTY4LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4zNjUxODI2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40MDI0OTAxLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40NDIwNzUzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40ODIyODI0LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni41MzE1OTIsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNTAwNTc3MiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni41Nzc3Mjc2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjY1NDkxMiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni43Mzc2NjQ1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjgxNjEyMDksICJzdGVwIjogNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuODk3NjQ1NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni45Nzk4NTgyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjA2NDQzODYsICJzdGVwIjogOCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMTUwOTA1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjIzOTQ1NzQsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjMyMjE0ODgsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjQwMDc0MiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNDgzNzc4NywgInN0ZXAiOiAxMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNTY5NjY4NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNjYyMzMwMiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNzkxMjE0LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny45MTI0MzAzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4wNDAyMTcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjE0NjIwNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguMjIyOTkzOSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguMjk5MDk1NiwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguMzc0MDU0NCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNDQ5MTkxMywgInN0ZXAiOiAyMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNTMyODY4NCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNjEyODQxNCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNjkwNjMxMiwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNzcxNTU3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC44NDQ1OTM1LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45MjAwNzgzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45OTY3NjM3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4wNzY3MzI0LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4xNTI2MDkzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4yMzgzNzgzLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4zMjMxNTYsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjQwMjIxMzgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjQ4MDg2NzYsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjU2ODYwMDIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjY0Nzc5NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNzI3Mzk4MiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuODEwODU0NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuOTIxMjgsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjAzNzU5OTgsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjE1NDA3NTQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjI2NjA0MDYsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjM3MjU1OTUsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjQ5Mjk4NzIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjYyNDg5NjgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjc0MjA5MywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuODYwMDQ0NywgInN0ZXAiOiA0OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuOTY5NjAwNCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMDc4MTA3NiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMTkxMTQxNiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMzA0NzgwNSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNDIxNzk2MywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNTMwMDU4OSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNjQwMDYyOCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNzUwMzI1MiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuODY3NTc5LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS45Nzc3MjUsICJzdGVwIjogNTksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjA4ODI0MTMsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjE5OTg0MTMsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjMwNzMwNywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNDIyNjIzNCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNTI4NDg4NiwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNjMyMDU5LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi43NDM2NDQ1LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi44NDUyNDA4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi45Njg1NTg4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4wNzUyMzQ0LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4xOTEyNjI1LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4zMDYyMzMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjQyNzEyNTIsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjU0Nzg2ODUsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjY3MTcyOCwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNzk2NTQ3MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuOTMwODg1LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC4wNTMyODU4LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC4xODcxNTksICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjMwNzM1NywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuNDM1NDY5LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC41NTM0NTQ2LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC42Nzc0MzgzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC44MDAwNjk4LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC45MjQyMzA2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4wNDg4MjM2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4xNzQwOTI4LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4zMDE2Njk0LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS40MjI4ODg1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS41NDYxOTAzLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS42NzMzMjk4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS43OTkwNTI3LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS45MjU0MDIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjA0NDAzNzYsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjE2NzAwMzYsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjI5MDE3NzYsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjQxNTc2ODYsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjUzNzMzMywgInN0ZXAiOiA5NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNjYwOTQxNiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNzgyNjg2NywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuOTExMjkxLCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfV0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMTUxNjI0X0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuMzUzODkyNiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40MDI1NzUsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNDUwOTAyNywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40OTY0NDQ1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU0MjQ0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU5MjE1MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My42MzkxODg4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjY5MTE1NCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My43Mzg2NTQsICJzdGVwIjogOSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNzk0OTEzMywgInN0ZXAiOiAxMCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODQxMTI4MywgInN0ZXAiOiAxMSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODg1NDUxMywgInN0ZXAiOiAxMiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuOTI5NTA5MiwgInN0ZXAiOiAxMywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuOTczMzAyMSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMDE5Njk4MSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMDY4MzU4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xMTM1OTgzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xNTk5NTY1LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4yMTAxODY3LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4yNTcxNTA0LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zMDE5NTE0LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zNDU2MDQ0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zOTE1OTYzLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC40MzY0MjgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjQ5MjE4NDYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjUzNjk5MjgsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjU4NDQ0MDUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjYzMTE0OTMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjY3NTQ4ODUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjcyMjE3MTUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljc3NjM5NzUsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjgyMzA1NzcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljg2ODMzNTcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjkxMzc0MzcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljk2MDI1OTQsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjAwNDAxMzUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjA1MjA3MDQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjEwMjE4MjEsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE0NzYzMTIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE5ODk0MzEsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI0ODE3MzIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI5MzY4LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4zMzgzNzgyLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4zODY3MzMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQzNDM0ODMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQ4Njc0MSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNTM2Mzc1MywgInN0ZXAiOiA0NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNTgxNzcyNiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjI2NiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjgyNDU3NCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzM0MzU4NSwgInN0ZXAiOiA1MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzg5NDE5NCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuODQ0MTAwMiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuODk2OTUyMiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuOTQ3ODEzMywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDAxODM5NiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDUyMzYyNCwgInN0ZXAiOiA1NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTE0NzA2OCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTY0MTkyMiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMjEyOTY0MywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMjg2Nzk3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4zNjkzODUsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjQ0MTMzNDIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjUxNDAyOTMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjU4MjY5MTQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjY1MDY5MSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNzE2MTU5NiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNzgzMDE4NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuODY0NjU3OSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuOTMxMzA5MiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDAzNDI2MywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yNzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDcwNDI1NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMTM4ODI1NCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4zODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMjA0ODA2MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMjgxMzE5OSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMzQ4NjkzMSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDE3ODQ2NywgInN0ZXAiOiA3NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDg1Njc0MSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNTU0NDEyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny42MjQ2NDM2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny42OTM4NzQsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljc2MjUzNSwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuODM1NDA0OSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuOTE3MDEzNCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuOTgyOTIsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjA2MjQ1MDQsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjEyOTM5MTQsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjE5NDYzODMsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjI2MTE4MzcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjMzMDA1NywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMzk4MTE3LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC40NjQ3MzQ2LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC41MzgxNTQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjYwOTg0MTgsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjY3NzQ0NywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNzQ2NTg0NywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODEyOTQyNywgInN0ZXAiOiA5NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODg1NDQ1OCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguOTYyOTg0NiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTkuMDI5MSwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dfX1d","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/train/accuracy%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3RyYWluL2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMDg1MjBfQlMxMjgiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMDYzMzI3OCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY3NjQ3MDU3NzcxNjgyNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4xMjY5MDIsICJzdGVwIjogMiwgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMTg5MzcsICJzdGVwIjogMywgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMjUxNjMwOCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY3NjQ3MDU3NzcxNjgyNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4zMTcxOTQ3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjc2NDcwNTc3NzE2ODI3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjM3OTE3MDQsICJzdGVwIjogNiwgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNDQxMjY0NCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjY3NjQ3MDU3NzcxNjgyNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny41MDQ2ODA0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjg4MjM1MjgyODk3OTQ5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjU3MDA3NjcsICJzdGVwIjogOSwgInZhbHVlIjogMC43NDcwNTg4MDg4MDM1NTgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNjMxNjgzOCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNzUxMTkzOCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43NTI5NDExOTExOTY0NDE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuOTI3MTM3NCwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC43NDExNzY0ODYwMTUzMTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguMTM0NTcsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzQ3MDU4ODA4ODAzNTU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjI5MTk0NTcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNzQxMTc2NDg2MDE1MzE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjQ0NDg0NzgsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjYzNTA1NCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OC44MTE0MzkzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OC45NDYxMTAyLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4wOTg5MDE1LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjgyOTQxMTc0NTA3MTQxMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4yNDE4NDUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjM5NjQ1NDMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuNTMxNDQ4OCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS42ODUwMzYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjgyMzMwNjMsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5Ljk2NTA5MjcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuODE3NjQ3MDM5ODkwMjg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjE3NTEyODIsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjI3NDE0NzUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzQxMTc2NDg2MDE1MzE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjMxNDQxMDcsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzQ3MDU4ODA4ODAzNTU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjM2MDQ1ODEsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzU4ODIzNTEzOTg0NjgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjQwMDcyNywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC43NjQ3MDU4OTYzNzc1NjM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNDM3MzUyNywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC43NzA1ODgyMTkxNjU4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC40NzM3NjEzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjc4MjM1MjkyNDM0NjkyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41MTQ0NzQyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41NTA4NTkyLCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjc4MjM1MjkyNDM0NjkyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41ODczNTEzLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjc5NDExNzYyOTUyODA0NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42MjY3MjcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjY2OTI0NzQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjcwNTksICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzQyNDIzNSwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MTE3NjQ3MTcxMDIwNTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzc5MzE4MywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC44MTU4MTM4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC44NTQ3NjY4LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjg5MDkzNjQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjkyODE1MDQsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODUyOTQxMTU1NDMzNjU0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjk2ODQ4NywgInN0ZXAiOiA0NSwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDA2MTYzNCwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDUxODEzOCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDk0ODYzMiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMTMxODk4LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4xNjg1NDgzLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4yMDY2ODIsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjI0NDM0OTUsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjI4NzE3NTQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjMzMDMwOTQsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjM2OTg2NzMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQxMDQ4MiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNDQ2MzU1MywgInN0ZXAiOiA1NywgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNDgxODQ2NiwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTE4MzY5MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTU2NTI0MywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS41OTgxMTEyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3NjQ3MDYwMTU1ODY4NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS42MzM4MTMxLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS42NzA5MzcsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNjgyMzUyOTYwMTA5NzEwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjcwNjU2ODUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNzQxNzg2LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS43ODEwNjU1LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS44MTcwMTk1LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS44NTI4MjkyLCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS44OTY2NzM0LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS45MzI2MTUzLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS45NzAxODIsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODU4ODIzNTM3ODI2NTM4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjAwOTk3NjQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjA0ODI2NzYsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjA5Mzk0NywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTMxMzk4MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTY5NjMzNiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMjA4MzAyNSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMjUwNTM5LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc2NDcwNTg5NjM3NzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yODY5MDMxLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4zMjY3Mzc0LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4zNjU2NTEsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODU4ODIzNTM3ODI2NTM4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQwMzgyOTYsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQ0MTY0LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjcyOTQxMTc4MDgzNDE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQ4MzA0MywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC43ODIzNTI5MjQzNDY5MjM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNTI4MTAxMiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41NjU3MDc3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi42MDI3MjM0LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi42NDAxMTg4LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg0NzA1ODgzMjY0NTQxNjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi42NzcyMTU2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi43MTczOTY1LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi43NTQ5MTQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjc5MTY3MiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuODI3Njc3MiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuODY0NjY1NywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTA3NDM3OCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTQ3ODI5LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi45ODU3OTYyLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4My4wMjI2OTQsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODA1ODgyMzM0NzA5MTY3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjA1OTY5MjYsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjEwNjE1ODMsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM31dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTMwODM3Nl9CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjAyODU4Ljg4NTY1MDksICJzdGVwIjogMSwgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTguOTU1NDQ5NiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4wMzE4NTksICJzdGVwIjogMywgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMTIxNzk2NCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4xOTg1MzE0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjI3MDQwMDUsICJzdGVwIjogNiwgInZhbHVlIjogMC42ODgyMzUyODI4OTc5NDkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMzQxNjU1NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjczNTI5NDEwMzYyMjQzNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS40MTIwNDI0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNzU4ODIzNTEzOTg0NjgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQ4MjI3ODgsICJzdGVwIjogOSwgInZhbHVlIjogMC43NDExNzY0ODYwMTUzMTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNTUyODIzOCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC43Mjk0MTE3ODA4MzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS42Mjc2MzE0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjc2NDcwNTg5NjM3NzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43MDM3NjgzLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc1ODgyMzUxMzk4NDY4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43ODY2MTMsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuODU3NzI5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS45Mjk2NDg0LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjY4ODIzNTI4Mjg5Nzk0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4wMDI0NjI2LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjM5NDExNzY1MzM2OTkwMzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuMDczNjQ0OSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuMTQ1Mjk2MywgInN0ZXAiOiAxOCwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yMTc3NjA2LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yOTEwOTY3LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjM2Njk2OTMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjQzNzQ0NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuNTA1MzA1MywgInN0ZXAiOiAyMywgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuNTc1NTU2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC42NDk3MDc4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43MTkwODM4LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43ODcxOTI4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC44NjUzODY3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC45Mzg2NzU5LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4wMDYyMDk0LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjA3OTMzODgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjE1MDI0LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4yMjgxMTcyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zMDM1MDY2LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zNzU4NTk3LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS40NDcwODM3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjUyMDkwNjQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjU5NjQ4NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuNjcyODk4OCwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuNzQ4NDkzMiwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuODI5MTQ2OSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuOTEwNTgyNSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuOTg5NDMwNCwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44MTE3NjQ3MTcxMDIwNTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuMDc1NjU1LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4xNjE3NjIyLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4yNTYwMzg0LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4zNDA3MjU3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi40MjU0NzIsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjUxMTYzMDUsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjU5NTE5MSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43MDU4ODIzNzA0NzE5NTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuNjc2MDQ2LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi43NTk2MTQ1LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi44NDI1MTY0LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjc1ODgyMzUxMzk4NDY4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi45MjU3MjM4LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4wMTA1NzcsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDk4MzkwNiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4xNzk5MDIzLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjgwMDAwMDAxMTkyMDkyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjI2NDA1MSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44MDU4ODIzMzQ3MDkxNjc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMzQ0MTY3NSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNDI3MjIxNSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNTEzNjE5NCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNTk5MDQ4NiwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNjgyODU5LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My43Njc0OTg3LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My44NDYzNTU0LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjU1Mjk0MTIwMzExNzM3MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My45MjkzOTA0LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjcyMzUyOTM5ODQ0MTMxNDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wMTIwNjQyLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjc2NDcwNTg5NjM3NzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wOTA0ODcsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjE2NzkxNzcsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjI1NDM4NzksICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjMzMjA0ODcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNzI5NDExNzgwODM0MTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNDEwNjM4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC40OTA4NzQsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjU3MjIwNCwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNjQ4NzI3MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNzI1ODc0NywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuODAzMTY5LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC44NzkzMDA0LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC45NTg0MDU1LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS4wMzkyNTksICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNzk0MTE3NjI5NTI4MDQ1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjExOTM4MDcsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjIwMjAzMTksICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjI4MTE3MywgInN0ZXAiOiA4MywgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMzYwMzQ3LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS40NDY2NzcyLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS41MjY0NzgzLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS42MTMyMTQzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjY5MzIyMzUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1Ljc3MTYyODYsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1Ljg0ODIwNjMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjkyNTU2NTIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjAxODg5NiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMTA3NTU3MywgInN0ZXAiOiA5MywgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMTkxMDAxLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4yNTc2NTU5LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4zMTAwOSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMzU4OTc4NywgInN0ZXAiOiA5NywgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDA4ODk3OSwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDY1Njk4NSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNTEzMjExMywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N31dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuMDcxNzc3OCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY0NzA1ODg0NDU2NjM0NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC4yMTAzNDE3LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjUyOTQxMTY3MzU0NTgzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjM1MDUzNDcsICJzdGVwIjogMywgInZhbHVlIjogMC42NTI5NDExNjczNTQ1ODM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNDk0MjIxNCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY4ODIzNTI4Mjg5Nzk0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC42MzExMjcsICJzdGVwIjogNSwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNzU5NTk4NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC45MDA3NTYsICJzdGVwIjogNywgInZhbHVlIjogMC44MTc2NDcwMzk4OTAyODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuMDQ2OTA5MywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS4xODM4MDY3LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjk0MTE3NjY1MjkwODMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjMxNTQ0NDcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjQ1NjA2NSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuNTg3NTU1NiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuNzI2NzkxLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjc1Mjk0MTE5MTE5NjQ0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS44NTcxNjUzLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS45OTExNzk3LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi4xMTgyNTg1LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi4yNzQ2ODgyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi40MDMwNDM3LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjc4MjM1MjkyNDM0NjkyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi41MzM2NDQ0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjc3NjQ3MDYwMTU1ODY4NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi42NTk5NTcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjc5NTEyODMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjkzMDY5ODQsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjA2MTIzOSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMTYxMTYyMSwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMjUyNTc1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjcwNTg4MjM3MDQ3MTk1NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4zMzg2MzAyLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjcyOTQxMTc4MDgzNDE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjQyMTEzNTcsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzI5NDExNzgwODM0MTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNTAzMTE0MiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC43NTI5NDExOTExOTY0NDE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNTg4NjAwNiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNjcyNTY0MywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNzU4NTk3LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My44NDQ0NDgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjkyODcyNjcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODQxMTc2NDUwMjUyNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMDEwNzc3NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMDk0MDcyNiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44MjM1Mjk0MjIyODMxNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMTcxODY4NiwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMjY4OTk0MywgInN0ZXAiOiAzNywgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMzUyMzU4NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNDM1NDg3NSwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MjM1Mjk0MjIyODMxNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNTE2ODIzMywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNjA4ODQ1MiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNjg4MTQ2OCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNzY4MTA3MiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuODU1MDY5OSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuOTM4MTIyNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMDIzMzU4OCwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMTA3OTE0NCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMTg5NDI5NSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMjc1NjYyMiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMzY5ODUzNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNDQ4MzcwMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNTI4Nzc3NCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNjIxNDI0MiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzAxMjQ3MiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzgwMTM0NCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuODYyNzUyMiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuOTQ0OTYyNywgInN0ZXAiOiA1NywgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMDIzNDkxOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTA5NjU0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni4xOTEyMzM5LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjI3MjE1OCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMzY5MTM1NCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNDUxNDE3NywgInN0ZXAiOiA2MywgInZhbHVlIjogMC40NzY0NzA1ODk2Mzc3NTYzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjUzMTg5OSwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNjE3NTk2LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjc3MDU4ODIxOTE2NTgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjcwMjgzMzQsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2Ljc4MTg5NCwgInN0ZXAiOiA2NywgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuODY1OTcyMywgInN0ZXAiOiA2OCwgInZhbHVlIjogMC44Mjk0MTE3NDUwNzE0MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuOTQ1NTY1MiwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMDM2NjcyNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMTIyNzE5NSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMjAzMjA2NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMjg1OTk3MiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMzc4NTYxLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny40NjIyMzYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjU0MTE4MjMsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjYyOTUyMiwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNzA2OTk1LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny43ODUwOTgsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3Ljg2NzY2MjQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3Ljk1Njg2MDMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjAzNTc5NzgsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjEyMjM0OTMsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMjAzNTM4LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjI4NTgzNjcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMzc3NDM2OSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNDU1NTA4NywgInN0ZXAiOiA4NywgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNTQ0ODk0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC42MjgzMzAyLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC43MDcwNzk2LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4Ljc4NzIzNjUsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4Ljg3Mzg0NzcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4Ljk1NDc2MjcsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjAzNDkxOCwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMTI0NTEsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjIwOTI1NjQsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjI4NzM0NTIsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjM3NzI1MjYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNDE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjQ1NzY1MTQsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNTQ0MDQ2MiwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX1dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTQ1NjA5X0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjU3NzAwMTMsICJzdGVwIjogMSwgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjE1NDA5LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjY1NjIxMzMsICJzdGVwIjogMywgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjkzNzI5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjczMDkxNDQsICJzdGVwIjogNSwgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNzY3NTE4MywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44MDk0MDg3LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjg0NjMyNCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44ODM3OTcsICJzdGVwIjogOSwgInZhbHVlIjogMC42OTQxMTc2NjUyOTA4MzI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuOTI3OTcwNiwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC43NDExNzY0ODYwMTUzMTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuOTc3MDEzLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4wMjgyNDc2LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4wODEwNjksICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjEyNDQ1MiwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43MTc2NDcwNzU2NTMwNzYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMTYzNDM2LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yMDExMTg1LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yNDgwMjM1LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yODc4NTU0LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zMjkwODEzLCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zNzc0MDU0LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40MTYzMzg0LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40NTY3MzM1LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjg0NzA1ODgzMjY0NTQxNjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40OTQxNTc2LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My41MzI2MDk1LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjc5NDExNzYyOTUyODA0NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My41NzA4Njg3LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjgwMDAwMDAxMTkyMDkyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjYwOTA1NDYsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjY0NzI3MzUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjY4NzU4MTgsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjcyNDczNCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43NzA1ODgyMTkxNjU4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My43NzI3OTUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNzcwNTg4MjE5MTY1ODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODExMTUxMywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODQ4MTM3MSwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODg0MjM3LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My45Mjc3ODcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjk2OTg4NywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDA3Mjg5NCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDUyNjA5NCwgInN0ZXAiOiAzNywgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDk0ODIxNSwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC45NDcwNTg3OTY4ODI2Mjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMTM1NjIyMywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMTgwMDMwOCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC45MjM1MjkzODY1MjAzODU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjE3NDQ3MywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjU2MDIzNCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjkyMzg2NSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMzI5MDE5LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zNjQ0NjgzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40MDMzMzQ0LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40NDc0Nzg4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40ODQ2OTE2LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41MjExODY0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41NjM0ODMyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC42MDIwMTkzLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC42NDM3NTgzLCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjk1ODgyMzUwMjA2Mzc1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC42ODE4MTYzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43MjE3Njk2LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43NTgzMzYsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0Ljc5NzA2MDUsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuODQxMTc2NDUwMjUyNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuODMzNzkxNSwgInN0ZXAiOiA1NywgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuODc1ODU1NCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC45MjM1MjkzODY1MjAzODU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTEyNDYyNSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTQ5MjYwMiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTg0Mzk2NywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wMjQyMjYyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wNjYyNDg0LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xMDk0OTA5LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xNDY0MjM4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xODk2OTk2LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjkzNTI5NDA5MTcwMTUwNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4yMjkxMDc0LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4yNjU3NzgsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjMwMTQ1NjUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjM0MTk3NCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC45ODIzNTI5MTI0MjU5OTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzgyMjg5NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC45NjQ3MDU4ODQ0NTY2MzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDIwNDI2MSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC45ODIzNTI5MTI0MjU5OTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDU5NjY2NywgInN0ZXAiOiA3MywgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDk2NDExNiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNTM0MDgzOCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNTg3ODUyMiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNjI1NjQsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuOTc2NDcwNTg5NjM3NzU2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjY2Mzc4NiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC45ODgyMzUyOTQ4MTg4NzgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzAxMTI0NCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC45ODIzNTI5MTI0MjU5OTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzM4Mjg0LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjk2NDcwNTg4NDQ1NjYzNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS43NzU1NjYzLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44MTQ2NDQzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44NTU0MDE1LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44OTA4OTU4LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45MzA3MDQ0LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45Nzg1MTQsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjAxNTExNTMsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjA1NDkyMSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMTAwNzI1NCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC45NzA1ODgyMDcyNDQ4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4xMzgzMzQzLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjk3MDU4ODIwNzI0NDg3M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjE3NDk0MjUsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuOTY0NzA1ODg0NDU2NjM0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjIxMDUzODQsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjI1MDE1MiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjkwMzIwOSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzI3OTIxMiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzY1MTQ4MywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NjQ3MDU4ODQ0NTY2MzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuNDAyNDU0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40NDIwMzc4LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40ODIyNDc0LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjUzMTU1NTcsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjk2NDcwNTg4NDQ1NjYzNDV9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNTAwNTM1MiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NDcwNTg3MjUzNTcwNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni41Nzc2ODgyLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY0NzA1ODcyNTM1NzA1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjY1NDg3OTMsICJzdGVwIjogMywgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNzM3NjI1NiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjc1Mjk0MTE5MTE5NjQ0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni44MTYwODU2LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNzk0MTE3NjI5NTI4MDQ1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2Ljg5NzYxNTcsICJzdGVwIjogNiwgInZhbHVlIjogMC44MTc2NDcwMzk4OTAyODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuOTc5ODI0MywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny4wNjQ0MDMzLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjE1MDg2OTgsICJzdGVwIjogOSwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMjM5NDIzNSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMzIyMTEzLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny40MDA3MDQ5LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjQ4Mzc0NSwgInN0ZXAiOiAxMywgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNTY5NjMyLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjg0NzA1ODgzMjY0NTQxNjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny42NjIyOTEzLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny43OTExNzQsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjkxMjM5LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4wNDAxNzQ1LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4xNDYxNjk3LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4yMjI5NjM4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4yOTkwNjIzLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4zNzQwMjMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNTcwNTg4MjMxMDg2NzMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNDQ5MTU1LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC41MzI4MzcsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNTM1Mjk0MTE1NTQzMzY1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjYxMjgxNSwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC42OTA1OTczLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC43NzE1MjI4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC44NDQ1NTU2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45MjAwMjc3LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45OTY3MTU1LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4wNzY2OTY2LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4xNTI1NzU1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4yMzgzNDA2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4zMjMxMTk0LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjc1Mjk0MTE5MTE5NjQ0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS40MDIxNzYxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS40ODA4MzMsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjU2ODU2NTgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNjQ3NzYzNSwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zNzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNzI3MzYxNywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC40NDcwNTg4MjY2ODQ5NTE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuODEwODE4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjkyMTI0NDEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODQxMTc2NDUwMjUyNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMDM3NTY1NywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMTU0MDQxMywgInN0ZXAiOiA0MywgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMjY2MDA3MiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMzcyNTE1NCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNDkyOTQ4OCwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC43MDU4ODIzNzA0NzE5NTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNjI0ODU4OSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNzQyMDU5LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC44NjAwMDU2LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC45Njk1NTQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjA3ODA3MzcsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjE5MTEwMDQsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjMwNDc0NzMsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjQyMTc2MTMsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjUzMDAyNTIsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODgyMzUyOTQ4MTg4NzgxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjY0MDAyNSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNzUwMjkwMiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuODY3NTMzMiwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuOTc3Njk0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4wODgyMDQ5LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4xOTk4MDg2LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjYyOTQxMTc1Njk5MjM0MDF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4zMDcyNzA4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi40MjI1ODcyLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi41Mjg0NTU3LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi42MzIwMTgzLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjc0MzUzODYsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjg0NTIwODIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjk2ODUyNjgsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjA3NTIwMDYsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjE5MTIzMDgsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjMwNjE5NzIsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjQyNzA4NTYsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNTQ3ODI4NywgInN0ZXAiOiA3MywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNjcxNjg4NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43NTI5NDExOTExOTY0NDE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNzk2NDk2OSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuOTMwODQwNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuMDUzMjQ1NSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuMTg3MTE5MiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuMzA3MzIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjQzNTQyODQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjU1MzQxNiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC45MjM1MjkzODY1MjAzODU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuNjc3NDAwNCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4zNDExNzY0ODAwNTQ4NTUzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjgwMDAyOSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4zNDExNzY0ODAwNTQ4NTUzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjkyNDE5MTcsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjA0ODc4NTcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuODA1ODgyMzM0NzA5MTY3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjE3NDA1LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgyOTQxMTc0NTA3MTQxMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4zMDE2MjksICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjQyMjg0OTcsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjU0NjEzOTcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjY3MzI5MTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1Ljc5ODk5ODQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNzcwNTg4MjE5MTY1ODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTUuOTI1MzcwMiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMDQzOTgzNywgInN0ZXAiOiA5MywgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMTY2OTU1NSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMjkwMTM0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni40MTU3MjksICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODgyMzUyOTQ4MTg4NzgxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjUzNzI5NSwgInN0ZXAiOiA5NywgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni42NjA4OTIyLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni43ODI2NTEsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjkxMTIzNjgsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTExNTE2MjRfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDI5My4zNTM4NjMsICJzdGVwIjogMSwgInZhbHVlIjogMC44Mjk0MTE3NDUwNzE0MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNDAyNTM2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNzIzNTI5Mzk4NDQxMzE0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjQ1MDg2ODgsICJzdGVwIjogMywgInZhbHVlIjogMC43NzA1ODgyMTkxNjU4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40OTY0MDgyLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNzk0MTE3NjI5NTI4MDQ1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU0MjQwNTgsICJzdGVwIjogNSwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My41OTIxMTQ3LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNjM5MTM4NywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My42OTExMTQ0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuODE3NjQ3MDM5ODkwMjg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjczODYxNzcsICJzdGVwIjogOSwgInZhbHVlIjogMC43ODgyMzUzMDY3Mzk4MDcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNzk0ODg0MiwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC44MTc2NDcwMzk4OTAyODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODQxMDk2MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODg1NDE2NSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC44Mjk0MTE3NDUwNzE0MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuOTI5NDczLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My45NzMyNzAyLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjY0MTE3NjQ2MjE3MzQ2MTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4wMTk2NjQzLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4wNjgzMjYyLCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xMTM1NjI2LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xNTk5MTEsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjIxMDE1MjksICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjI1NzExNjMsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjMwMTkwNzMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjM0NTU3MiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMzkxNTYzMiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNDM2Mzk2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC40OTIxNDgyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC41MzY5NjM3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC41ODQ0MDk3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC42MzExMTQyLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjc3MDU4ODIxOTE2NTgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjY3NTQ1LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC43MjIxMzY3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC43NzYzNjYsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjgyMzAxODYsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljg2ODMwMTQsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjkxMzcwODcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljk2MDIyODIsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjAwMzk3OTQsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjA1MjAyODIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjEwMjE0NzMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMTQ3NTk4LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4xOTg4OTcsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI0ODEzODQsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI5MzY1MDYsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjMzODM0MzQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjM4NjY5NiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNDM0MzEzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS40ODY3MDgsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODUyOTQxMTU1NDMzNjU0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjUzNjMzOCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNTgxNzM3NSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjI2NTY1NSwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjgyNDIxNywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzM0MzE2MywgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzg5Mzc1MywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuODQ0MDM1NiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45Mjk0MTE3Njg5MTMyNjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS44OTY5MDIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1Ljk0Nzc3MjMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDAxODAwOCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDUyMzIyNiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC45NTg4MjM1MDIwNjM3NTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTE0NjY3NCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC45NTI5NDExNzkyNzU1MTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTY0MDQxLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4yMTI5MTEsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjI4Njc1ODIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjM2OTMxNTQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjQ0MTI5OTQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjUxMzk5MzMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuOTUyOTQxMTc5Mjc1NTEyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjU4MjY1NSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC45NzA1ODgyMDcyNDQ4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni42NTA2NTcsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjcxNjEyNTIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2Ljc4Mjk4NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuODY0NjIzOCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43MjM1MjkzOTg0NDEzMTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuOTMxMjc1NiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC43MTc2NDcwNzU2NTMwNzYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDAzMzg4NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC40OTQxMTc2NDc0MDk0MzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDcwMzg4MywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC42OTk5OTk5ODgwNzkwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny4xMzg3OTI4LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjY1ODgyMzU0OTc0NzQ2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjIwNDc3MzcsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNzM1Mjk0MTAzNjIyNDM2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjI4MTI4NiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMzQ4NjU3NCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDE3ODAwNywgInN0ZXAiOiA3NywgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDg1NjQxNSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNTU0Mzc4NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNjI0NjA0NSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNjkzODM0LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjk1ODgyMzUwMjA2Mzc1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny43NjI1MDEsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuODE3NjQ3MDM5ODkwMjg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjgzNTM3MjIsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjkxNjk3NjIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNzA1ODgyMzcwNDcxOTU0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljk4Mjg4NjMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNzY0NzA1ODk2Mzc3NTYzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjA2MjQxOCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMTI5MzM4LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjE5NDYwNDQsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjI2MTE0ODUsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuOTUyOTQxMTc5Mjc1NTEyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjMzMDAxMzMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMzk4MDgyLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC40NjQ3MDA3LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjk1Mjk0MTE3OTI3NTUxMjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC41MzgxMTUsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjYwOTgwNSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC45NTI5NDExNzkyNzU1MTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNjc3NDEzMiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC45NTI5NDExNzkyNzU1MTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNzQ2NTQ5OCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODEyODkyNCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODg1NDEzNiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguOTYyOTQ4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OS4wMjkwNjY2LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfV19fV0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/train/loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3RyYWluL2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7InB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTIwODUyMF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4wNjMyMTA3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuOTg1Nzk0NDI1MDEwNjgxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjEyNjgxMDYsICJzdGVwIjogMiwgInZhbHVlIjogMC41MDUzNTAwNTMzMTAzOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMTg5MjgxLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDMzNTQ5NTUzMTU1ODk5MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4yNTE1MzIzLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMzk4NTI1NjU1MjY5NjIyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjMxNzExMDgsICJzdGVwIjogNSwgInZhbHVlIjogMC4zODA1NDUzNzc3MzEzMjMyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjM3OTA4MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjM3OTAwMTczNjY0MDkzMDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny40NDExNjY2LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzU4NTk3NzU1NDMyMTI4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjUwNDU4NzIsICJzdGVwIjogOCwgInZhbHVlIjogMC4zNDg3NzY4NDcxMjQwOTk3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjU2OTk4LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzI5NTA5NjE1ODk4MTMyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjYzMTU5NDcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMzYwNjczMjQ4NzY3ODUyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3Ljc1MTA3NzQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNDA1Mzk5ODU4OTUxNTY4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjkyNzAyOTEsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzQ0NjI1MzgzNjE1NDkzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjEzNDQzNDUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMzM3ODI0NDA0MjM5NjU0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OC4yOTAwMTQ1LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjMzMTU1NjQwOTU5NzM5Njg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNDQ0NzQ5NiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zMjg3MjI3NzQ5ODI0NTI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNjM0NTMwNSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zNDI0ODA4OTc5MDM0NDI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguODExMzI0NCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zMjkyMDgwMTYzOTU1Njg4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4Ljk0NjAwNTMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzI3OTc1MjEzNTI3Njc5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4wOTg3OTA0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjMwODgzNDI1NDc0MTY2ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4yMzY1OTUyLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjMxNTcxMzIyNjc5NTE5NjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuMzk2MzU4NywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yOTY4OTM2NTYyNTM4MTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuNTMxMzczMywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNjkxMDU0Mjg0NTcyNjAxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjY3MzcwNCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yOTAxMjgwNTIyMzQ2NDk2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjgyMzIxMTQsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMjk4NjgyMDA0MjEzMzMzMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS45NjAzNDYyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjU0MTg3Nzc0NjU4MjAzMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC4xNjU2MjksICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMzI5Mjc0NDE1OTY5ODQ4NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC4yNzQwNjc5LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjMzMzA2OTU2MjkxMTk4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC4zMTQzNDIzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjM2MTc0NjI1MTU4MzA5OTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMzYwMzg2OCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zNTYyOTYwOTIyNzE4MDQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNDAwNjYwMywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMzE5NzY1OTI1NDA3NDA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjQzNzI4NiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zNjI1NjY4Mjg3Mjc3MjIxN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjQ3MzY5NywgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zMzg3MjM4OTc5MzM5NTk5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjUxNDQwOCwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zMjM5Mjc2NzA3MTcyMzk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNTUwNzkzNCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMjgxMTk2OTUxODY2MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41ODcyODY1LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjMzNTQxNjQ2NTk5NzY5NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42MjY2NTg3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjMyOTAxMzk0MzY3MjE4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42NjkxNzQyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMzMzkzMTUwNTY4MDA4NDIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzA1ODM2NSwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zMjIzMDUxNDI4Nzk0ODYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzQyMzU3NywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4zNDIzMzAwNjgzNDk4MzgyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjc3OTI1MzIsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMzE1MjAwMDMwODAzNjgwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjgxNTc0OTYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMzEzNDE0NjAzNDcxNzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuODU0NzAzLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjMwODYwNDg2NjI2NjI1MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC44OTA4NjA4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjMyMDc0MzU5MDU5MzMzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjkyODA4NjMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMzA3NjUzODc0MTU4ODU5MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC45Njg0MTc2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjMzMzM1NDcxMTUzMjU5Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wMDYwOTczLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjI5NzA1NzE1MTc5NDQzMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wNTE3MzUsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMzEwOTQ2NDY0NTM4NTc0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjA5NDc5MjgsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMzIzMjczODY3MzY4Njk4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjEzMTgyODUsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzE2NTAwNTQ0NTQ4MDM0Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4xNjg0NzkyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjMwNjMyNjAwMTg4MjU1MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4yMDY2MTYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMzA3MDgxMzQxNzQzNDY5MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4yNDQyODM0LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjMwNDkzMzE5MDM0NTc2NDE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjg3MDk1NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yOTExMTM4ODMyNTY5MTIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjMzMDIzOTUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjkxMTMxMTM4ODAxNTc0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjM2OTc5OTQsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMjk2ODMxMjUwMTkwNzM0ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS40MTA0MTUyLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjI4MDQ0NzU0MjY2NzM4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS40NDYyOTE3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjI5MDUwNTQ5ODY0NzY4OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS40ODE3ODU1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI5MTkxNjkzNjYzNTk3MTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTE4MzA2MywgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4zMTM1NjQzMDA1MzcxMDk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTU2NDU4LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjI5MTMwOTU2NTMwNTcwOTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTk4MDQyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjI4MjQzNzU5Mjc0NDgyNzI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNjMzNzQ2MSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4yODU1NDQwMzc4MTg5MDg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNjcwODU5NiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yOTc3OTEyNDI1OTk0ODczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNzA2NDk2NywgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4yODIxNTk1OTY2ODE1OTQ4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc0MTcyNDUsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjkzOTU3NjIwODU5MTQ2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc4MDk4MTgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMjg4MjQ2MDA1NzczNTQ0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjgxNjk2LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjI4MjYwODg5NjQ5MzkxMTc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuODUyNzY0OCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNzkyODU0MzA5MDgyMDMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuODk2NjExNywgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yOTc5MTc5OTE4NzY2MDIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuOTMyNTUsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMjgxMTY4ODc4MDc4NDYwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjk3MDExOTcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMjgyOTI0NzExNzA0MjU0MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wMDk4OTQ0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjI3NTIwNzQzMDEyNDI4Mjg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMDQ4MTk5MiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4yNjczMTMxMjI3NDkzMjg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMDkzODY1MiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4yODA2MDk5MDU3MTk3NTcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTMxMzI2LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjI4MjY0OTMzODI0NTM5MTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTY5NTU5LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjI4NzUwNjM0MTkzNDIwNDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yMDgyMjA3LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjI4MDAyMDMyNjM3NTk2MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yNTA0NzA2LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjI4Njk2Nzc1NDM2NDAxMzY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMjg2ODM3OCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yNzQ2NzIyMTAyMTY1MjIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMzI2NjcwNCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4yNzIzNDQ3NjgwNDczMzI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjM2NTU4NDYsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMjY4Nzk0ODM0NjEzODAwMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi40MDM3NTk3LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjI4NDg5NTI0MTI2MDUyODU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDQxNTcsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMjc5NjczOTkzNTg3NDkzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQ4Mjk3OTUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjc0NjQ0MjU1NjM4MTIyNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41MjgwMjYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjgxNTkxOTgxNjQ5Mzk4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjU2NTY0MTksICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjgzMTc5NjEwOTY3NjM2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjYwMjY0NzUsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjczNTI1OTIzNDkwNTI0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjY0MDA1MzUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuMjYzODU2ODg3ODE3MzgyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjY3NzE1MDcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMjYwODcwNjA1NzA3MTY4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjcxNzMzMTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMjcyNTI2MDU1NTc0NDE3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjc1NDg0NzMsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMjYwNDEwOTM0Njg2NjYwNzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi43OTE2MDgzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjI3MjU5ODc3MzI0MTA0MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi44Mjc2MDk1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjI2MjIxMDAxMTQ4MjIzODc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuODY0NTk5NywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4yNzU0Mjc0MzA4NjgxNDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTA3MzcwNiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4yNjA0Njc3Njc3MTU0NTQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTQ3NzYwMywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4yNjI5NDc5NDY3ODY4ODA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTg1NzI4NywgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yNTg5MjMzODE1NjcwMDEzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjAyMjYyODgsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMjY3MjgxNDEzMDc4MzA4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjA1OTYyNzMsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMjYwOTEzMzQyMjM3NDcyNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4My4xMDYwOTE1LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC4yNTc2ODA3NDM5MzI3MjR9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTEzMDgzNzZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjg1OC44ODU1NDQ1LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuOTQ4ODcxMDc2MTA3MDI1MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU4Ljk1NTM2MzUsICJzdGVwIjogMiwgInZhbHVlIjogMC40OTUzMTE2MTc4NTEyNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMDMxNzY5OCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQwMjU0NzI5OTg2MTkwNzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMTIxNzA3MiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQzNDk1Njc4OTAxNjcyMzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMTk4NDI0OCwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM1MTU3MzMxODI0MzAyNjczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMjcwMzAyLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuMzQ3NzY5Nzk2ODQ4Mjk3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjM0MTU2ODUsICJzdGVwIjogNywgInZhbHVlIjogMC4zMTAzNjc5NzE2NTg3MDY2N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQxMTkyMjcsICJzdGVwIjogOCwgInZhbHVlIjogMC4yODg1MTg4NDYwMzUwMDM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQ4MjE5NTYsICJzdGVwIjogOSwgInZhbHVlIjogMC4zMTQ1MTk4MjI1OTc1MDM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjU1Mjc0LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjI3MTMyMjk2NTYyMTk0ODI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNjI3NTQ0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjIzNjk4NDY4NTA2MzM2MjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNzAzNjgwOCwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yNzI5NzYzOTg0NjgwMTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNzg2NTI0LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMyMTgyMjU1Mzg3MzA2MjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuODU3NjQ2LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjI3NjM1NjA0MTQzMTQyN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjkyOTU1OTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjczNDEzMTUxNTAyNjA5MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4wMDIzNzM3LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjI0NjExNTUzNTQ5NzY2NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4wNzM1NDE5LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjMyMzYyOTkxNTcxNDI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4xNDUyMDUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzA1NjY3NDMwMTYyNDI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjIxNzY2MjgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzcxOTQ2NDI0MjQ1ODM0MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yOTEwMDY2LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjI4NjQwNjcyNTY0NTA2NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4zNjY4NzQyLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI4NjU3NDc4MDk0MTAwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC40MzczNjM0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI1NzI5NTkzNjM0NjA1NDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC41MDUyNDEsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuMjg0ODQxNDE4MjY2Mjk2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjU3NTQ3MiwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4yMTM1MDY3NDMzMTE4ODIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjY0OTYyMjIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjE1MzY0NjIwMDg5NTMwOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43MTg5NzUzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIyMzM5MDU3OTIyMzYzMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43ODcxMDk2LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjIxMjY0Nzg5OTk4NTMxMzQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuODY1Mjk1NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yMzk5NDI5NTI5OTA1MzE5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjkzODU5MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4xOTYxMzY1MTkzMTI4NTg1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjAwNjEzMDcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMjIzMzQ2MjQ4MjY5MDgxMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4wNzkyNTEsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTc1NDU1NzE5MjMyNTU5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjE1MDE0NzQsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuMjIyNTkwNjg0ODkwNzQ3MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4yMjgwMjQyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjIyODY4MDU4MDg1NDQxNTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zMDM0MTMyLCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjI1MjY2Njc0MTYwOTU3MzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuMzc1NzcxOCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNjA0NjIzMTM4OTA0NTcxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjQ0Njk5MjksICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMjEwODE4MjkwNzEwNDQ5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS41MjA4MTgyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMyODk1MzY4MzM3NjMxMjI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuNTk2Mzc2NCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yNDc3NjI3MjQ3NTcxOTQ1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjY3MjgwODIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMjQwNDc5NzUyNDIxMzc5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjc0ODM4OSwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4yMTY5MzA1ODMxMTkzOTI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuODI5MDUyNywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4yMTQ2NjQ1Nzg0Mzc4MDUxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjkxMDQ3OCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4xOTQ2NTI1NTczNzMwNDY4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjk4OTMyNjIsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMjA0NzM3MTU2NjI5NTYyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4wNzU1MTkzLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjIzODU2OTA4MDgyOTYyMDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuMTYxNjYzNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4xOTI5NzM2NTg0NDI0OTcyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjI1NTkwNDIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMTk4NzY3ODExMDU5OTUxNzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4zNDA2MTU1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjE3OTU1MTk3MzkzODk0MTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuNDI1MzYwNCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMTg5NjQxODkyOTEwMDAzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjUxMTUzMTgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTgzMzM2OTQzMzg3OTg1MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi41OTUwOTA5LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjE3ODEyNjYwMzM2NDk0NDQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuNjc1OTE4NiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4xOTMyMzUyMzM0MjYwOTQwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjc1OTUyODQsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMTU5MDQyNDc3NjA3NzI3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi44NDI0MjAzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI5Njk5MTg1NDkwNjA4MjE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuOTI1NjE4NiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC40MDY2MDA4OTI1NDM3OTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDEwNDgwOSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yNDI4MTk2MjIxNTkwMDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDk4MjkzOCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yNTE5NTU0MTk3Nzg4MjM4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjE3OTgwODEsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjg0NTcyMTg0MDg1ODQ1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4yNjM5NDg0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI4OTY2NTEzMjc2MTAwMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4zNDQwNjgzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjIyODE0MTk2MzQ4MTkwMzA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNDI3MTM2MiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yMTg1NTYzMjk2MDc5NjM1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjUxMzUxNTIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjMwNzUyNDk3OTExNDUzMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My41OTg5NSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4yNDQxOTUyNTI2NTY5MzY2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjY4Mjc3MjIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMjE4MjY3MTEyOTcwMzUyMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My43Njc0MDc0LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjI0MjY4NTY0NTgxODcxMDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuODQ2MjY4NCwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4yMDY1ODk4NjI3MDQyNzcwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjkyOTMwMDUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMjI2NTE1ODQ0NDY0MzAyMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wMTE5NzQ4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjIwNzQyOTk0NTQ2ODkwMjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wOTAzOTg4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjE4MzQxMjUyMjA3NzU2MDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuMTY3ODAzLCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjE5NjM5MjI5Nzc0NDc1MDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuMjU0Mjk3MywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4xOTY2NDIzNTQxMzA3NDQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjMzMTk1MywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xNTkzMDkyODI4OTg5MDI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNDEwNTUwNiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4yMjQxNDgwNzk3NTI5MjIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjQ5MDc5ODIsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjEwODgzMDUxMTU2OTk3Njh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC41NzIxMjM4LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjE1NzQzMTU4NzU3Njg2NjE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNjQ4NjM5NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4xNTEzNDY1MTk1ODk0MjQxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjcyNTc5MzYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMTYyNDM5MTA3ODk0ODk3NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC44MDMwOTEsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMTkxNjA2MDAwMDY1ODAzNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC44NzkyMjEsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjAwMzkwNzI2MzI3ODk2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC45NTgzMjgsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMTUxMjU2MjAzNjUxNDI4MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS4wMzkxNzYsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTg2NTE3NjcwNzUwNjE3OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS4xMTkyOTYzLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjIzNzg3MTg4NTI5OTY4MjYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMjAxOTIyNywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4xODE3NzQ5NDQwNjcwMDEzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjI4MTA3NjQsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMTgyNjM2MDUyMzcwMDcxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjM2MDI3MjYsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMTkxNTIzOTU0MjcyMjcwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjQ0NjU3NjYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMTk3MDI4NTMyNjI0MjQ0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjUyNjM5MDMsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMTc1NzUzMzU1MDI2MjQ1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS42MTMxMjksICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMTY0MTAwNDgzMDU5ODgzMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS42OTMxMzg0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjE0OTI4NDgwOTgyNzgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNzcxNTMyMywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xNjQyNDE3NjA5NjkxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS44NDgxMjM4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjE1OTcxNDAyODIzOTI1MDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuOTI1NDY5NCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4xNjQ0NTk3NTAwNTYyNjY3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjAxODc5OSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4xNTU0MTg4NTc5MzIwOTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjEwNzQ2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjE0NDkzODAyMTg5ODI2OTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMTkwODgyLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjE1MjY2Mjc4Mzg2MTE2MDI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMjU3NTc5LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE2NTI4Mjk5NDUwODc0MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4zMTAwMTIzLCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjE1MTkzNzA5NzMxMTAxOTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4zNTg4ODc3LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjEzMTQ4NjgxODE5NDM4OTM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDA4ODMzNywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4xMzg0MjIyMzU4NDY1MTk0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjQ2NTYzMjIsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMTE4MTE5MDE2Mjg5NzExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNTEzMTQ2NiwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMjA1NzY5ODgxNjA2MTAyfV0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMzQ1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTg5MC4wNzE2NzQ2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODUwMDkxMzM4MTU3NjUzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjIxMDIyNzcsICJzdGVwIjogMiwgInZhbHVlIjogMC40ODQwNjM5ODI5NjM1NjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC4zNTA0MTEyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDA1NjgxNzg4OTIxMzU2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjQ5NDExMzIsICJzdGVwIjogNCwgInZhbHVlIjogMC4zNTgwNTQ2Mzc5MDg5MzU1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjYzMTAyMSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM4NjUzNzY0MTI4Njg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNzU5NDgxMiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjM2ODc1NTYzODU5OTM5NTc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuOTAwNjMzLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzU1NzEzNjA1ODgwNzM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjA0Njc5NTgsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMjc2OTMwMTUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjE4MzY5MzYsICJzdGVwIjogOSwgInZhbHVlIjogMC4zNjI1MzYyMjE3NDI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjMxNTMzNTUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMzIzMDE4MjIzMDQ3MjU2NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS40NTU5MzI5LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjMxMzk4MjM2NzUxNTU2Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuNTg3NDQsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzcyNzU3Mjg1ODMzMzU4NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS43MjY2Njk1LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjM1NzMxMDA4NjQ4ODcyMzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuODU3MDM2OCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zNTkxNzg1NDMwOTA4MjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuOTkxMDcxMiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC40MzM3ODAxNjM1MjY1MzUwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjExODEyOTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMzYyNjQ2OTM3MzcwMzAwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjI3NDU3NTcsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDE0NjMyOTE2NDUwNTAwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjQwMjkxMTcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzgzMjcwMDg0ODU3OTQwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjUzMzUzNDgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNDA5ODYzMjMzNTY2Mjg0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjY1OTgyNTgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMzgwOTQ0MTYyNjA3MTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTIuNzk1MDE1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjMzOTc3NjMzNzE0Njc1OTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTIuOTMwNTc2NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNDY4OTc5NTk3MDkxNjc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMDYxMDk5NSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMjQ0MzEwNjE3NDQ2ODk5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjE2MTA3MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zMjkyNjY1MTgzNTQ0MTU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMjUyNDQ5LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjI4MzkyMDE2ODg3NjY0Nzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMzM4NTM0OCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4yNzgzOTE1NDAwNTA1MDY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNDIxMDU3NSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zMjkwMzY1MzM4MzI1NTAwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjUwMzAxOTMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuMjg0NTA0ODYwNjM5NTcyMTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My41ODg1MDkzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjMzNTA4NDIyOTcwNzcxNzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My42NzI0NzI3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjMwODQ4NTE4MDEzOTU0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My43NTg1MDEzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjMyMzQzMDI5OTc1ODkxMTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuODQ0MzYzMiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zMTA1MjU0NzY5MzI1MjU2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjkyODY0LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjI4NTE2OTA5NDgwMDk0OTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4wMTA2OTU1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjI3MzQ3MzY4MDAxOTM3ODY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMDkzOTkwMywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNDMzMzA0Nzg2NjgyMTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMTcxNzg0MiwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4yNTU4MzkwNzk2MTg0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4yNjg4NjkyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjI1MzczMzU0NTU0MTc2MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4zNTIyNzQ3LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjMwMDEwMTMzOTgxNzA0NzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC40MzUzOTU1LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI4NTk3MDA2MjAxNzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC41MTY3MzYzLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjM4MjgxNTM2MTAyMjk0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC42MDg3NDQ5LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjM2MDg0MzE4MTYxMDEwNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC42ODgwNjY1LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI5ODkxODQ4NTY0MTQ3OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC43NjgwMDczLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjMwNTI2MTA0NTY5NDM1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC44NTQ5Nzc0LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjI5MTQ1MjQ5NzI0Mzg4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC45MzgwNDQzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjI4MjExMDU0MjA1ODk0NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4wMjMyNzIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjg5MjgwMzg0Nzc4OTc2NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4xMDc4MjQ4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjI5MTg3MDI2NjE5OTExMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMTg5MzQ5NCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMjMzMzIwOTIxNjU5NDY5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjI3NTU1LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjIyNjM0Njc3NTg4OTM5NjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMzY5NzcyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjI4NzAzMjY2MzgyMjE3NDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS40NDgyODQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjgxMzc3NDA0OTI4MjA3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjUyODY4NywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4yNDg1OTA3NjczODM1NzU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjYyMTMzNSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNTQwOTI1MTQ1MTQ5MjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzAxMTYyLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjI5ODMxNzkwOTI0MDcyMjY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzgwMDU5NiwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yMzE3NDgxMTg5OTY2MjAxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1Ljg2MjY3MzgsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuMjM0MjY0NDc4MDg3NDI1MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS45NDQ4NTcsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjIzMjAxNTQzMDkyNzI3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni4wMjM0MTE1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI0MDQwNDAzOTYyMTM1MzE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTA5NTcwNywgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4yNTIwMDk4Mzg4MTk1MDM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTkxMTU0NywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yMDMyMTc1ODA5MTQ0OTczOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjI3MjA3MzUsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjM0MTg3Mjc1MTcxMjc5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjM2OTA1MzYsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMjk4NzYyMDUzMjUxMjY2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjQ1MTMzMTQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMjQ1NzQ5NTc3ODc5OTA1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjUzMTgxODksICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjY1NzU3NTMwOTI3NjU4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjYxNzUwMjcsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjU0MDIxNDM1OTc2MDI4NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni43MDI3NTQzLCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjI1MzA5OTg1ODc2MDgzMzc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNzgxODE0MywgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yODkyNTExMTg4OTgzOTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuODY1ODY3NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNzk0MTQwNTc3MzE2Mjg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuOTQ1NDg2OCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yNjQ2NDUyNDg2NTE1MDQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMDM2NTg2NSwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4yODI5MzUxNzIzMTk0MTIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjEyMjYzODIsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMjY1MzM3ODU0NjIzNzk0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny4yMDMxMjQ1LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjI0NzUwNTg4ODM0Mjg1NzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMjg1OTAyNywgInN0ZXAiOiA3MywgInZhbHVlIjogMC4yNTg4NDE0ODQ3ODUwNzk5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjM3ODQ2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjIzNTk1NzEwMDk4NzQzNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny40NjIxNTAzLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjI3NDg5MzI1NDA0MTY3MTc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNTQxMDk1NywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMTc2MjA1NjY0ODczMTIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjYyOTQ0NTYsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjkxNjU4NjM5OTA3ODM2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjcwNjkwMSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yNTQ3ODgwNzA5MTcxMjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNzg1MDEyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjI1MzUwODc0NjYyMzk5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny44Njc1ODAyLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjIyNDMzMzUwOTgwMjgxODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny45NTY3NzQyLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjIzODg0NTQzNzc2NTEyMTQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMDM1NzEzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjI0NDk3Nzg3NjU0Mzk5ODcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMTIyMjY2OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yMDA2MzQwNjIyOTAxOTE2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjIwMzQ0ODUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjE1ODI3NjU4NzcyNDY4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC4yODU3NDc4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjE4MDYwNjc4MjQzNjM3MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMzc3MzYxMywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yMDk4MzM3NzA5OTAzNzE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNDU1NDI4LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjI4OTE3NzI5ODU0NTgzNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC41NDQ4MDk4LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjI0ODcxMDQ1MzUxMDI4NDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNjI4MjQ1NiwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xOTYxMjAwMjM3Mjc0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC43MDY5ODk4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjIxNTkwOTkyODA4MzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC43ODcxNTU5LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjIwNjY4OTMyNzk1NTI0NTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguODczNzYyLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjE4MTI1NDEzMzU4MjExNTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguOTU0NjcwMiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4yMTEyNDkxMTMwODI4ODU3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjAzNDgzNSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xODg0MjQzMTkwMjg4NTQzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjEyNDQzMSwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4yMDY1MjE0MDY3Njk3NTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjA5MTc2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjE3NTIwODQ3OTE2NjAzMDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjg3MjYyNCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yNDg5ODcwMDQxNjA4ODEwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjM3NzE4MzQsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMjI5NjYzMzU3MTM4NjMzNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OS40NTc1NTEyLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjI3MjMzNTMyMDcxMTEzNTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNTQzOTU3NSwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMjIzOTIwOTg2MDU2MzI3ODJ9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTE0NTYwOV9CUzEwMCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi41NzY5MDU3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzY1MjkxMDk0Nzc5OTY4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjYxNTM0MDcsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjE3Mzk2NDczODg0NTgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjU2MTQ0LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTMyMDU5OTY3NTE3ODUyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjY5MzY2MjYsICJzdGVwIjogNCwgInZhbHVlIjogMC40OTU3NzM0MzQ2Mzg5NzcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjczMDg0NTcsICJzdGVwIjogNSwgInZhbHVlIjogMC40ODQ2ODc0MTc3NDU1OTAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNzY3NDU1MywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQwODM1MTgwODc4NjM5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44MDkzNDEyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzkyMTcwNjA4MDQzNjcwNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44NDYyNTgsICJzdGVwIjogOCwgInZhbHVlIjogMC4zODM2MDAzMjQzOTIzMTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuODgzNzIyMywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjMwOTcwNDc1MDc3NjI5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi45Mjc4ODIyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjM1MTU5MTczNjA3ODI2MjMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuOTc2OTUxNCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4yOTg0MjY3MTc1MTk3NjAxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjAyODE1MzQsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjkzNjY4MjQwMzA4NzYxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjA4MDk2OCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC4yMzIyNjY2MTk4MDE1MjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMTI0Mzc0OSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4yMjM5MTUzMjM2MTUwNzQxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjE2MzM2MjcsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjA3NjI3NDMwNTU4MjA0NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yMDEwNDksICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMjIwNDI5Nzc4MDk5MDYwMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yNDc5NTgyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjE5NDQ1NzkwMzUwNDM3MTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMjg3Nzc1MywgInN0ZXAiOiAxOCwgInZhbHVlIjogMC4xNTcxOTI5OTAxODM4MzAyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjMyODk3NSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4xNTk4OTg3MjgxMzIyNDc5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjM3NzMzNTgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjAwMjkxNTI5Mjk3ODI4Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40MTYyNjc2LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjE5ODgyNTgzNjE4MTY0MDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNDU2NjU5OCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4yNTUxNDg0NDA1OTk0NDE1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjQ5NDA4MiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yMzAzNjA3MDE2ODAxODM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNTMyNTM1MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4yNDgyNzI5NzAzMTg3OTQyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjU3MDc5ODYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjIwMzI4ODM3NjMzMTMyOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My42MDg5ODA0LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIzNjE5MTc5NDI3NjIzNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My42NDcyMTA4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjIxNjA1ODc3NTc4MjU4NTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjg3NTA0NSwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yMTM2MzM1OTY4OTcxMjUyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjcyNDY2ODUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTk0MzI4NTMxNjIyODg2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My43NzI3MjI1LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjE4NTc5MTMyODU0OTM4NTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODExMDgzOCwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4yMTEyNzQzMTA5NDY0NjQ1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjg0ODA3OCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4yMTAwOTI3OTc4NzU0MDQzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjg4NDE3MzIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMTY0NzYxNTg3OTc3NDA5MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My45Mjc3MTg2LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjEzMzU4Njg1Mzc0MjU5OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My45Njk4MTA3LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjE2MjU1ODk3MjgzNTU0MDc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDA3MjI1OCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xMzQzMDI2MTYxMTkzODQ3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjA1MjUzMzEsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMTIwNTY0MDA2MjY4OTc4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4wOTQ3NTE2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjE1Mzc1MTY0MTUxMTkxNzExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMTM1NTU3MiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4xMzkwMDUwMjAyNjA4MTA4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjE3OTk2NDMsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMTMwMTEwNTkxNjUwMDA5MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4yMTczODIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMTE2ODU3MTE4OTA0NTkwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjI1NTk1OTcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMTM3NDI3Mjg1MzEzNjA2MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4yOTIzMiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4wOTM0NzA5NDU5NTQzMjI4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjMyODk2MTEsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTAzOTMyODA1MzU5MzYzNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zNjQ0MDY2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjExNjY3NDc2NTk0NDQ4MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40MDMyNjc2LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjA5MTM2MTI2OTM1NDgyMDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNDQ3NDA1MywgInN0ZXAiOiA0NywgInZhbHVlIjogMC4wOTgxMzc0NDU3NDc4NTIzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjQ4NDYyOTksICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMDkyOTExMDg2OTc2NTI4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41MjExMjMyLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjEwNjI0NzE1Njg1ODQ0NDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNTYzNDA1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA3ODEzNTA2NTczNDM4NjQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNjAxOTUyOCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4wNzAxOTIyNjk5ODA5MDc0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY0MzY4NywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4xMTMwMTQxOTEzODkwODM4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY4MTc0ODIsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMDc2NDkwNDI0NTczNDIxNDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43MjE3MDMsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMTE4NDgzMzM0Nzc5NzM5Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43NTgyNzEyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjE2Nzg0MDE2Nzg4MDA1ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43OTcwMDE4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjA5NzkwNTcxNzc5MDEyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC44MzM3MjI2LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjExODI1ODI1MjczOTkwNjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuODc1NzksICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTc0NTExNjg1OTY3NDQ1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45MTIzOTc5LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjA4NTkxMTU2NDUyODk0MjExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTQ5MTk3OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4xMjM5NDk1NDI2NDE2Mzk3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0Ljk4NDMzNDIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMDkyNzE3NTgwNDk3MjY0ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wMjQxNjc1LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjA4OTQ5MzgwMzY3OTk0MzA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMDY2MTY5LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjA5NzA4NzgxNTQwMzkzODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xMDk0MTcsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTExMzEzOTA5MjkyMjIxMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xNDYzNTEzLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjA3MjYwODg5NTU5OTg0MjA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMTg5NjI2MiwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xMDE3ODA1Nzg0OTQwNzE5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjIyOTAzNTYsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTE1Nzk4NjQ0NzIxNTA4MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4yNjU3MDg0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjEwNDA1MDgwMDIwNDI3NzA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzAxMzkyNiwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4wODAxNjMwMzkyNjcwNjMxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjM0MTg5NzIsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMDgwOTMwMDY5MDg4OTM1ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4zODIyMjc3LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjA4Nzg2NjEyMDA0MDQxNjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDIwMzU2NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4wOTgzNjQ4NzQ3MjA1NzM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjQ1OTU4MTYsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMDkxMzg3NzYzNjE5NDIyOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS40OTYzNDg2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjA4NTk1ODAyNjM0OTU0NDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNTM0MDE1NCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4wOTgyMTM4NDQwMDEyOTMxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjU4Nzc4MjksICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMDgyMjYyMjAzMDk3MzQzNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS42MjU1NzEzLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjA3NzM3MTI2MjAxMzkxMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS42NjM3MTQ2LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjA1OTM3NDcxOTg1ODE2OTU1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjcwMTA1NjUsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMDY0NTM1MTg1Njk0Njk0NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS43MzgyMTM1LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjA1NTM3NDE5MzkzNjU4NjM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzc1NDk3NCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4wNDEyNTIwNDY4MjM1MDE1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjgxNDU3NSwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4wNTU5MzU0OTQ2MDE3MjY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1Ljg1NTMzNzQsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMDQ4MzkxNzE0NjkyMTE1Nzg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuODkwODMzOSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4wNDg2MTYyMzQyMTMxMTM3ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45MzA2NDUsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMDU0NjEzNzc2NTA0OTkzNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45Nzg0NDg2LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjA3ODM0Njg0ODQ4Nzg1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjAxNTA0OSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4wODE4Njc5MDM0NzA5OTMwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjA1NDg1MywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4wNTYzMzQ5MTI3NzY5NDcwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjEwMDY2MDMsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMDU4ODQ5MzIzNTQwOTI1OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4xMzgyNjUxLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjAzNDEzOTkwNTEyNDkwMjcyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjE3NDg1NzQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMDQ1OTM3NzY5MTE0OTcxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4yMTA0NDU0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjA4ODg5NzMwMjc0Njc3Mjc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjUwMDcyNSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4wODEzODQzNjgyNDA4MzMyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjI5MDI1MDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMDU4NjE0NzY0MzYyNTczNjI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzI3ODU0NCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4wNzExMjY4NDEwMDg2NjMxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjM2NTA3MzcsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTIwNDEzMTI0NTYxMzA5ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40MDIzODUsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMTM3NzgzODg1MDAyMTM2MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40NDE5Mjk2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjA4NTUwNjc0NDY4Mjc4ODg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuNDgyMTc4NCwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xMTE2NzIzNDkyNzQxNTg0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjUzMTQ4NzUsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjA2ODQzODkzMjI5OTYxMzk1fV0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGU3OTM5OV9CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjUwMDQ0MzUsICJzdGVwIjogMSwgInZhbHVlIjogMC43ODg4NzM5NzA1MDg1NzU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNTc3NiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjUwNTIzNzIyMTcxNzgzNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni42NTQ4MDI4LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDY0MzEyNDkzODAxMTE2OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni43Mzc1MzI2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDAyMjQ1NTUxMzQ3NzMyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni44MTU5ODU0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDAyOTUxNzQ3MTc5MDMxMzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni44OTc1MjU1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuMzQ5MzE2ODY1MjA1NzY0Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni45Nzk3NDgyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzM5Mzg0MDQ5MTc3MTY5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjA2NDMyMjUsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMzE3NzY5NzY1ODUzODgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMTUwNzc2LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzYxOTUxOTE3NDA5ODk2ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny4yMzkzMzgyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjMzMTg5MDg4MTA2MTU1Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMzIyMDI3MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zOTY0MzI1NDg3NjEzNjc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNDAwNjI0LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM3ODAzMjI2NzA5MzY1ODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNDgzNjY2NCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC4zNTY2MzMyMTYxNDI2NTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNTY5NTM5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM0NTg1ODcyMjkyNTE4NjE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNjYyMTgxNiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zMzYyMjc1OTU4MDYxMjE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNzkxMDY2MiwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMTM2MTc5MTQ5MTUwODQ4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjkxMjI4MzIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzI4OTk3MTY0OTY0Njc1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjA0MDAyOCwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC4zMTA2MDI5MzMxNjg0MTEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjE0NjA4ODQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzE4NzA4ODk2NjM2OTYyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjIyMjg2MzcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMzA5ODMxMDgyODIwODkyMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4yOTg5ODQ1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI4OTg3NTExOTkyNDU0NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4zNzM5MTUyLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjMzNjI5MjQ0NTY1OTYzNzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNDQ5MDc3MSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMDM5OTcyNDg0MTExNzg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNTMyNzU3MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zMTEzMTMwMzMxMDM5NDI4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjYxMjczMzYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjgxMjQxODM0MTYzNjY1Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC42OTA1MSwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4yOTAwMTA4Mzk3MDA2OTg4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4Ljc3MTQ0NDYsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuMjg1MjQ5NzEwMDgzMDA3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4Ljg0NDQ3NywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yODg2ODIxMzI5NTkzNjU4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjkxOTkwNywgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yNTUyOTg1ODQ2OTk2MzA3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4Ljk5NjYzNDUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMjk0Mzc2ODIwMzI1ODUxNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4wNzY2MTMyLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjI2ODI4NDA4MjQxMjcxOTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4xNTI0OTM3LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjI2MTYxOTE4MDQ0MDkwMjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4yMzgyNTI0LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjI0MjM3MzQ1MTU5MDUzODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuMzIzMDMwMiwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yNDAxNDA5MTQ5MTY5OTIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNDAyMDk1NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yMjY5MzkxNTY2NTE0OTY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNDgwNzUyNywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xOTgwOTY4ODYyNzcxOTg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNTY4NDc0LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjIzMjAyOTYwMTkzMTU3MTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNjQ3Njc2NywgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yMDk1ODU4MzA1NjkyNjcyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjcyNzI3MSwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yNTI3NzU4Nzc3MTQxNTcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuODEwNzM2NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4zNTM4NTczMzg0Mjg0OTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuOTIxMTYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjc5NzQ5OTI5OTA0OTM3NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC4wMzc0NjEzLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI5MzE0MzMwMjIwMjIyNDczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMTUzOTQyLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjI5NDM5MzY4ODQ0MDMyMjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC4yNjU4OTY2LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjIzNDM4NTQ2MDYxNTE1ODA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMzcyNDIwNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMzA1NjE1MjQ2Mjk1OTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNDkyODQyMiwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4yMTY4MTk5NDE5OTc1MjgwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjYyNDc1MTgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMjIxMjM1MDk2NDU0NjIwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC43NDE5NTksICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMTk1OTcwNTUwMTc5NDgxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjg1OTg3NDIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTc4Mzg1OTQzMTc0MzYyMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC45Njk0Mzc0LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjE5MDU2MDE5MTg2OTczNTcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMDc3OTc3MiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4yMzAxMjAzMTYxNDc4MDQyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjE5MDk4MDcsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMTg5ODgzNDEwOTMwNjMzNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS4zMDQ2NTIsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjEzNDUwODc4ODU4NTY2Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS40MjE2NTk1LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjIwMTI1NzgwOTk5NjYwNDkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNTI5OTA5OCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yMTA1MDA2NTc1NTg0NDExNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjYzOTkxNTcsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuMzA5NTQ5NDgwNjc2NjUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNzUwMTY3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjMxNjMzODAwMjY4MTczMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS44Njc0Mzg4LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI3MzMzMDE1MjAzNDc1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS45Nzc2MDUzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI3MTY1ODk4NjgwNjg2OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4wODgxMDI4LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjIzMTExODYzNDM0MzE0NzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuMTk5NzE3MywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4yMzU2NTM3ODc4NTEzMzM2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjMwNzE2NTEsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMjUyOTUxMzgzNTkwNjk4MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi40MjI0ODI1LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjE3ODg4ODYwNDA0NDkxNDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNTI4MzY2LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjIzMTc2Nzg3NzkzNjM2MzIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNjMxOTA3MiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4xODA3NTA5OTU4NzQ0MDQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNzQyNzU3OCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xNzcwNzgxNTc2NjMzNDUzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjg0NTEzMDcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMjAwMTQ5OTA4NjYxODQyMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi45Njg0NDI0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjE3MTU2MDUyNTg5NDE2NTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuMDc1MTA4OCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yNTExMjkxNTAzOTA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4xOTExNDYxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIxNzQzNzIzNzUwMTE0NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4zMDYxMDI1LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjIxNDkxNzEwODQxNjU1NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My40MjY5NzQ4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjE5NTQ2MDExMDkwMjc4NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNTQ3NzMwMiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4xNzUyMDU5MzEwNjc0NjY3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjY3MTU4MzQsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMjIwNDM3ODY5NDI5NTg4MzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My43OTYzOTEyLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjE4ODM2MjgwNzAzNTQ0NjE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuOTMwNzI1OCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNTc1NDk5OTIyMDM3MTI0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjA1MzEzNDcsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjA4ODQ3NTA3ODM0NDM0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjE4NzAwNjUsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjUyMTI4ODY5Mjk1MTIwMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC4zMDcyMTY2LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjI4MjI5NDgwOTgxODI2Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC40MzUzMjM3LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjI2MjM1MTEyNTQ3ODc0NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC41NTMyOTgyLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjI3NzE0ODM2NTk3NDQyNjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuNjc3MjkxMiwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4yNTEyODg2ODIyMjIzNjYzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0Ljc5OTkxMDMsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMzI5NTc2MTY0NDg0MDI0MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC45MjQwNzI1LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjM3MjgwMjg4MzM4NjYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTUuMDQ4Njc2MywgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4zMTQyMTkwMjc3NTc2NDQ2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjE3MzkwNjgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjg0NzE0NzU4Mzk2MTQ4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjMwMTUxMzIsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjc0ODExMjY3ODUyNzgzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjQyMjczOCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNTM4NTE1OTI1NDA3NDA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjU0NjAxNywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4yNjc3NzQ0MzI4OTc1Njc3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjY3MzE2OCwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4yOTkxMTA1MDIwMDQ2MjM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTUuNzk4NzA2OCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yNDg1Mjc4MjQ4Nzg2OTI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjkyNTI5NTgsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMjg2NjgzNzk3ODM2MzAzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjA0Mzg2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjIyODI5MjkyNzE0NTk1Nzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMTY2ODMwNSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4yNDY0OTE3MTUzMTIwMDQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMjkwMDE0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjI0MjU3NTk0MzQ3MDAwMTIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNDE1NDc4NywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4yMDk2MzAyNTA5MzA3ODYxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjUzNzE4NzgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMjE4NTc0MzE1MzA5NTI0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni42NjA3OTEyLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjIwMTI4Mzk3NjQzNTY2MTMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNzgyNTQ4MiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4yMDM2NDI5NzkyNjQyNTkzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjkxMTA3MiwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMTczMjU5MTA5MjU4NjUxNzN9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTExNTE2MjRfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDI5My4zNTM3NzgsICJzdGVwIjogMSwgInZhbHVlIjogMC42OTY5OTIzOTczMDgzNDk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNDAyNDM4OSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjUxMTYyMDg3OTE3MzI3ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40NTA3OTAyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDU2MjI4NDA1MjM3MTk3OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjQ5NjMzMDMsICJzdGVwIjogNCwgInZhbHVlIjogMC40MTQyMDIxODM0ODUwMzExM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU0MjMzMjIsICJzdGVwIjogNSwgInZhbHVlIjogMC4zODc3MDkyMzAxODQ1NTUwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU5MjAyODEsICJzdGVwIjogNiwgInZhbHVlIjogMC4zNTgzOTkxNTI3NTU3MzczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNjM5MDYxMiwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjMzNDcwMDk3MTg0MTgxMjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNjkxMDMzOCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjMwODcwNTkyNTk0MTQ2NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My43Mzg1MjUyLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMjg2OTU5NTg4NTI3Njc5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My43OTQ4MDg5LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjI3NjgzMzM4NTIyOTExMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My44NDEwMzQ0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI2MTkzODMwMzcwOTAzMDE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODg1MzQ0NywgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yNDgwODI5MDYwMDc3NjY3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjkyOTQwNTUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMjU2NjExNDA2ODAzMTMxMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjk3MzIwODQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMjM3NDIzMDc3MjI1Njg1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4wMTk2LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjIxMzUyMTY1OTM3NDIzNzA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMDY4MjYxOSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4yNDIxOTMzMjYzNTQwMjY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMTEzNDk2MywgInN0ZXAiOiAxNywgInZhbHVlIjogMC4yMjk4MjUxNTM5NDY4NzY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjE1OTg0NTYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMjE2ODc2OTgzNjQyNTc4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4yMTAwOTA0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjIyODAxNjg2ODIzMzY4MDczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMjU3MDQ4NiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4yMzA5MTY4ODc1MjE3NDM3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjMwMTg0MjUsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMjI2MTYxMDE4MDEzOTU0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zNDU1MDMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuMjE3NjQ2MzQ1NDk2MTc3Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zOTE0OCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yNTcyMzY4OTc5NDU0MDQwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjQzNjMxOTQsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMTc2NzU2NTc1NzAzNjIwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjQ5MjA4MDIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMTg1OTYzMDk0MjM0NDY2NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC41MzY4ODA1LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjE4MjI0OTg0NDA3NDI0OTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNTg0MzM3NSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4xNzk1OTIwMjgyNjAyMzEwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjYzMTA0MzQsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuMTk2NDU0Nzc4MzEzNjM2Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC42NzUzODMzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjE5MTAzMzk0NDQ4NzU3MTcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNzIyMDc2MiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4yMDE2NTUwODk4NTUxOTQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNzc2MzAzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjE2NTM0OTQ2ODU4ODgyOTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuODIyOTU4NywgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4xNzk4NzgzODM4NzQ4OTMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuODY4MjM5MiwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4xODk4MDk2Nzk5ODUwNDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuOTEzNjQ1NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4xNjg2NzcxMjE0MDA4MzMxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljk2MDE2NywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4xODUwNDkxNzYyMTYxMjU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMDAzOTA3NCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xNjUzNDcxNTg5MDg4NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4wNTE5Mjg1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjE2NTcwNjY3OTIyNDk2Nzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMTAyMDgzNywgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yMTI3MzA4Njk2NTA4NDA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE0NzUyMzksICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTgzMjk2MzIyODIyNTcwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE5ODgxMjUsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMjE2NzczMzE2MjY0MTUyNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4yNDgwNzAyLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjIyMzM3NzE5Nzk4MDg4MDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMjkzNTgzNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMzkzNjE5MTIwMTIxMDAyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjMzODI3OCwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xODkxMzYwODc4OTQ0Mzk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMzg2NjI5NiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yMzA1NTQxNjM0NTU5NjMxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQzNDI0OSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMDI1MzIxNDI0MDA3NDE1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQ4NjYzNjQsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjM1MzU1MDA0NjY4MjM1Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS41MzYyNjgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMTgyNTIxOTgzOTgxMTMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjU4MTY2ODEsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMjI1NTU4MzcwMzUxNzkxMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS42MjY0OTA0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjE1NzAxOTcwNDU4MDMwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjY4MjMzNDIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMTczNDQyMjI5NjI4NTYyOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS43MzQyMzA1LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE1NjQwMTA5Nzc3NDUwNTYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzg5Mjc3OCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4xMjk0NTM0NTA0NDEzNjA0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1Ljg0Mzk2MTcsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMTE3ODk0ODQzMjIwNzEwNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS44OTY4Mjc1LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjE0MTE5NDczMDk5NzA4NTU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuOTQ3Njk4NCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4xMjAxMDUyMDY5NjY0MDAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjAwMTcyMjYsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuMTUzNjQ2MTQxMjkwNjY0Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4wNTIyNDE4LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjE5Nzc1ODA0ODc3MjgxMTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4xMTQ1ODYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTM5NzU1NTc2ODQ4OTgzNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4xNjM5NywgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xMzA3MDY3MTI2MDM1NjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjIxMjgzNzUsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMTI3ODE5ODIxMjM4NTE3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4yODY2NTE0LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjEyOTIzNTIzNzgzNjgzNzc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMzY5MTk4OCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4xMTI1NDMwMDE3NzA5NzMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNDQxMjE2MiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4wODcxOTMzMTc3MTEzNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNTEzODk5OCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4wODU2NDczMDczMzYzMzA0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjU4MjU2MiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4xMDkwNDYwNzE3Njc4MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni42NTA1ODAyLCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjA4MzM2MDcwMTc5OTM5Mjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni43MTYwNTIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMDg4OTIzOTk4MTc3MDUxNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni43ODI4ODgyLCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjExODc2ODQ5MDg1MDkyNTQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuODY0NTI2NywgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4xNjgwMTYyMjUwOTk1NjM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuOTMxMTkzLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjEzMjQ3MTQ1NzEyMzc1NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny4wMDMyNTI1LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjE3MTk3MTUyOTcyMjIxMzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDcwMjk3NywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4xMzM1MjEwNjUxMTU5Mjg2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjEzODcwOTMsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTU3NzA1MDIzODg0NzczMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny4yMDQ2OTYyLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjEzNzM2ODc2ODQ1MzU5ODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMjgxMjA1NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4xMzU1NDY1MzUyNTM1MjQ3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjM0ODU3OSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNDMyOTE2MjI0MDAyODM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDE3MjIxNSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4xMjIwNDM2NzY2NzQzNjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny40ODU1NjcsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMTI0MTQ3MzkyODA5MzkxMDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny41NTQzMDYzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjE0MDY0NTg5MTQyNzk5Mzc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNjI0NTA2NSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNDQ3MTc3ODI3MzU4MjQ1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjY5MzcyMzIsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTE2NDM1OTMwMTMyODY1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljc2MjQyMTEsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMjk1Mzc2MDAyNzg4NTQzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjgzNTI4OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yMTE0MTUyOTA4MzI1MTk1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjkxNjg3ODcsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjIwMTI0NzY2MjMwNTgzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljk4MjgwNSwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4zMDU2MTIyOTU4NjYwMTI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMDYyMzQ1NywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yNjU3NTcxNzMyOTk3ODk0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjEyOTIyNDUsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjE0NTEzNDk1NTY0NDYwNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC4xOTQ1MDAyLCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjI0NjY5OTM0ODA5MjA3OTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMjYxMDY0MywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4yMTMzNTc3NjE1MDIyNjU5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjMyOTkyMDMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMjE5MTg2NzIzMjMyMjY5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjM5Nzk4MywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4xODM4NjQ5NjYwMzQ4ODkyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjQ2NDYxOTIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMTQ3OTYzMTk2MDM5MTk5ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC41MzgwMTgyLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjEyNTk5NDI3OTk4MDY1OTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNjA5NzE3MSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xMTk3MTkxMjUzMzA0NDgxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjY3NzMzMzgsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTYzMTM4MDE3MDU4MzcyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4Ljc0NjQ1NzMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTQ1Njk0MDQ3MjEyNjAwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjgxMjgxNiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4xNDM3OTI0OTUxMzE0OTI2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4Ljg4NTMzMzMsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMTE0MTMwMTM5MzUwODkxMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC45NjI4NjEzLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjE3MzA4OTQyOTczNjEzNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OS4wMjg5ODQ4LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC4xMjAwNzE5MTAzMjE3MTI1fV19fV0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2":{"data":"d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2":{"data":"d09GMgABAAAAACoMAA4AAAAAUsQAACm2AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu5A1nULg14AATYCJAOHNgQgBYJ+ByAbIkSzoqzwsjiKkj2aj6JicZf9lwnmGDrzUL5ooaWgICnvqxcvLU1UUm052dq0PPEbkDL7t7A4c3dKponrEu8IjX2Sy0PoX9DLJNk9AHsAO6uC0MkqVZH48wM/t95fEVEDtBGpESMixmDAqNgYMLpGpmSIhFWEFSiIoIiFRIli3p2nHuksZyTDeXbXshPuAKlMlW53Zbg7HZue7/8N06wSlnxFE+rSAhYVkmR44D5FCo4yXQlcOX/hZsHaQuZYMcQ8fkufGldr+uACwqKNzkSGPbR7G1BVUZ3KOl0lGRYOQuDT2zTbfVpvBF5fojuuchvk6YE73cxV6dJS//W/1qu/X2vQGiTZDshHKx3JCpgmIwjIGl8FXKUCLIGkY12AuaMOqUzRXNWnLQmqS1HWqdIFnu/vG79/2raDcUAPMPAMtn38TkB/ouZjIAEmGGgThZmsWZkYwdIwtsYh6+N7ZqYra0NPaN1poDFKzhjB6Ep9/G4ZTnWidqQaNBB6+Y1RoPACsDkUTvsZQJjzgUiWDJEtGyJXLgQLC6JIEUSJMohOPVAu+QiBQAHTADNAgAKRDAGmosIAZt317VxBcvfkGAZI7h0THA6SB/jHRYIkDOBDaNj+e8ZEAjtwbBhGLXC2MFFLe6nWKwp1sS6WQ4VY39XdhkP/X4wChWLH4FC8KPFQDqMIiLjGjWJFabOIvvgn/jQ7N9ClKlWDRqlUq8XUxVp68cWGQ7/D+N36//YNN54bY0H9DUgUJtSPLQYOF25C9jvokMOOOE6FOg0EmrQR6dJnwJA1G3YcOXNB4obCkxdvvmrUqtfgksuuuOqa68ZNmDTlhpvue+ChRx6bteiVJa8t+2DFqjXrdnyE0M5bMIiE6TpAn6hZohBCyQ4q+IddgvVd259GlFOFNmHm+YZlbrMiWMMWJJCru+Uaj9zimRu8ySnLbXUJGnkTtMtp5Aqu4hquY1x71htzeI55LOCF9rJti3iFJbzGB6xgFWtY1zbasoktbGs7bfiYRnjlVP+hPoJCwSt7WIClnW8Rc4Vu7tDP12bBMR5M8483PCX8SrDD5C1uOcErZ0QkQ1pGyk5TrDylKDth8BBmTIBbLvMnBPCBG9uCt+WBq3CUc5cOYxpP8BQzexSGw49L58kUZJkbrABr2IJMeXnZ7NTgV8uoR4P2sg2LeIUlvK6OqM1GXCxzhxXBGrYgowwvsYhXWMLrdWPYEEahxosAu8OGlMtrXNyHhK8kWMUa1veMxZ95BFGHRjTRCLGDHexgBzsEexZimY2sYA1bh5RM5GSge4rzwqVs5y8Zi3iFJbzWPsS0glWsYV0g5P5oijmKkp9O3nw7kCfXGOc3/jcHxSZ3fc4WRHYgzYszl8Xt4s0nAnMbv+OWL1BmKuw9jcgRaflYdnZg5ZSinHQinwkpJtdyISq/Exs8UN0JBvTnxrwgTdysfiY754dWTK8Zted21jPU8/6ErTbDLJtDyepp3/I79jzdpwqjW9NkvFDxcrFn8ct7uyI/Nw20ef7NquSYG/mY2X3qX1lrwCxM5fcKo/9ELfnuZQg72j1T/muh/JezBlNxFtf0x58eYNG3oste6z3I1ae4pvIFyU8FzkQfejHes5fRm2qnDgIE807LfcaTOpsEUuLOw/wOZH8rylWi04VRGvkSdfjzXLcqGTZ0Ft8w4B8+d+iZ6+vzC6o0sWYSH/HEcH5jFetUsY0j935Npssg79F/4F6kHQmLa1Ms9Va9TLCHGVYlSVrgX3FCh77jG/+4Jd/AaEir86/WBqxJDUpC15D5baQ+bKJ1eAepuz3VUvN2vN56JxY2PSZ7AvMVJjZbZ/Wx571F+emsX0bLt4pUr261+xXWRibmZHFmW+n8uPjvZqdsHgYZaJrhAxFfgsQCHC4IflcVRfA32n6HYSjRwEGbwf3enCUJ1lCaXS7DmStZbirwzBVR+dinOD+oRqNDmr4ru+S145atI/8AunlBIbSLGGJIJak5i3JACQcVcEjEYbGU5XRcLiqKUhehoTBteejIiagkXcXpyU9fbgbyMRfHQjaWR5G4utgTpnSBQYJorrJxU4inHKgK8paDj7yKT2w/DkNMHU5SPxJDTCOU0qSUSznisnEoE/8JmHQT1n2PIabN4DRLObdnXsB5mYtY9Bq75SrGB+vQ4jU5EEAghAngKCphl/AJZwLlKIuirBh1UQiiaB15BevihAMRhOCDC/6lVKU1hC2fEJFAgwk0MkS4y81DLM9ndsFgDx65EKVUlLIqoko1UQkRQBgBhEPYRZxEAe6EEg8UHHAltutriGyg55hs2Ia9sP/pma3UcvNIgV4p7wPbWtuZ49ms4+I6jtZ3MR7rbeZo5+bGbm7taB/butgGVl5gXjGwzjQ6od7j9jgoKgIO/FOeB1A6gBbqD5oWvarVQfERMeBEXNJTXfov3YSsODZL10PI5bawcHipoWJqco0AdmG0Fahzlbqh2bDXCVXlnj+0tNzjd9JFoCEQNgJSIKK4OEEIjqMBwZ4QEBpHObSmwc1GiBZw3z09nPr16TVg0ElDThk+b/Qg+WyPShErzpjTzjjrnPNQEMJkgNr64xos6Fd0dVDm386rLwuJ+xGaHfI4sBiwjhfOBls4WgIeLDgTDv4A7DVuCsBDrgW0NfsYPDw0GIp54gptJc57XPaBKXbA6vAwxIFpZegI/5mdcMcTaz75i6gWUtyJxViaCOMl8bJ4BfwBPBFvhj8Cf9eCM/39C7yAR2e1EZPuemrdZ1JcdhbCi+OlD61TG8kfuUI0b+DMKZD/KL48Ms+I/9/7//zvc+8ypk6ZOG5Aj0fefn1zjikFLImVsdORlv+39+LZLrn3l/f7z5Fr2hNPzZiVJ98zc56bt+AFloK/wve6UJENm7Zs21HsI25A+fEeyGIo1rRLVExwDJpyHe7F9bgLuyt34z7cgwdxMB7C43hAeQLH40m8iAeVl3A/XsYbeApv4i2cgLfxPl7AB/gQJ+EjfI5XlS9wCr7Ej3hb+Qmn4mf8gU/wJ/7Cafgb/+MrZcAZSkrfq2UFjzO9ZWtpG4+z1HjC4xw13vE4V433PM7zTmY+8CwAzgeTOQ48F4ALwWQeaT6PS9TJgh6Xq5NFPa7wTtaQ1vS4Up2s63G1OjnC4xp1cpfHteqCM9mu+6jLZofKv/gMfuhW3pPiAU17HJjlQVDfAHEIQIeI+YlHYKEhpagtUCaan7BRoLDQThEoqCOLAJWzHoFQz5cnRaEgTFRYKkwRY+WMAUjjWkaXIJEwAoNOLUHcfDGMY644+bMo8P1hJLwSUN+asKZZ45uRjo1YMxyWKxyRtHwY9rOgmds0CKCF/jl3i3nj6npwDKJXOkiXSZbceUDhogx++TB31vdN6ZQnaxvAQgPbYXpfy/I6Gby5BrrAfAo57tf9GfB1tVXWWnuVU4GpY37ByDQpciH9rs9Fkp9P443DfcLcV8x96yyufmrJu5efcMIUsxvuc0q7GNZjpZHyRPs5yF+Nft3+yuA/6LcH2dFJjHAgZXAZJRIrN6goNldD9qlBbULVGSsaoh5oEK2LNnEsNozxNUMUkOcgY6GEwOWgXGdoIAytWzkWqXKsImVogtwlQ6QN8eIy43KaUgRlyCHLph1r2AI9X9Vp3ZzH4o1zI21kn+12int3NZc1cRD+pVws+BcrisPZ0GTWgzeWRs/8GTt0dqHtPLTxTW/D3C0Nb4WbLdHYNhtN3WpYVp50ki+pRNOGEQ3TGe1XMQgbZqEtbIgFv2GLob7lvxkOXHOrQVt7Ed5GWJeVDTwqrq9hZ66xSVL3jemdwJRJq1wbKtXMS5RsB3cd4wyxAPKkX7WsRqr4UBTVodqIhaMvIjaz6kPjla6hfx8DZaTPbfjoYxyuhqsJPQaOci4eSa7i9dxYeCq5d1aMAgpd2LR+JNLCmbR5fPmVlgbeuLah8bWrk7zjSbyg6uCwN0H2uIb1gvYbHvHHMPI78fT26Z1plmlY57237cR6slAinFkaTXsr8XAewr3w+momYZWzR5msF3pxUIdK5nei6fZM+2y4iu7NclQfbX/3oD9FtSFZjeVptS5YHdzJpO576objZkvUXNJktpdTQegVeg9Gzh5ZHQS/LZxulgBukUUnpQKlD+SqF0CN6zCTvb0ge2b2lOwzluW4B5tBiBIDlsULM1QhKCo1EytKj8N4somh9ur6hh11ciy3r59QPI4gw49GNFn7I8lyUorpYmXFzjZFpH0JWquDrEFBcpBGa8utTlysjL+82uit732iQ1pvhaCa2QM5MSLq0N1X7EzVecMmY510zPNyN+SKrEi8nktuL5OjLasS13VMy/usRnKieE17mxmz4I7q9uTejhz0H6VBrCCLktoO4Do0xSxgGguASIz1eDdRMHGDBqJH4xrWmfZU8FnFQKiplhMeNcfLAY7wkEeRkvNbHPtl1GhoqSMIr8zRc08vrfOrukNlnsFPH3XFAWJRHPJeKKpxULH9tiq5HwhfRkoogqAEVPNr/U1Gk4S0wo9pUSYUzhMD/Z2cKSKASmK6Q7XiprYN2yaK7MTN1lDiefZgXJDF/FFdp5SsqD0xumuYK3gTM/jD5bS40vIY0TEdlLp2etK4TCObfadRkLW26S3ICt+EabwQUb0NORjj9tOjnxs9HEXZAQfv8IxenpliLP26MSoQ+VEge76lti+2vQJFXjSImMBJx3JeyRNABXcr0jrwoOmkSCj8ow+n2qIquDBOM1bkfmRHQZxO66uEndYiMWz7Wg36SDwGTvrpVJ8M7WmLNRxIrMPxKynGGUzRXKIms/m16TyC3OwSC+PaSZzFqBVyXQfkAhKw2ODi0Q8bbOFZraQiMZYMOa193XxYXDO9SYRoLxcBkkPjzs36WsU8toTC1kPSKODcxrQN0RLjyLRGYOq4RmBPnDyqCNoi6dBIdQVIUEBK9wQVShR91SyrUlkWFbtzj5w13eK2As0rWE45U5zMAT982YojPiwMPrBKstKUGlMj0jMV1NsIworbxO3YX6FkvXjDXT7YnZ3giY5LPcMPCo4JoQPHhjEHWyI9+H5kBI7Jr2I9+t5IFpk+4lFZEfygX9jxrUCfWGTElirbElcxYKGs4GLzWiohxwyNi6K+CBbpYRU7/8WdHX+A4hbFFXkIf6XuFwodK7Yp3qX/QYZY7RAXjpn9tdnMGVqD4r83BTShxhFk7Dv29m2sUZsWbUA4pKLGbZGPPGjI6EQSrONDR103OGFBrMZiGP51aOrYVpprLdmIMnevqUA2g4lab3f2wt2O2dnVeztEQE1HIkZidCiJdDJyMNBV7+HYdDObwZ7Io2AGeZJ3vZI0s6ySFSg6wXlk+wuh4bCgL9DfL3KcmAxvo1uxtLlzSB2goNAWmSKvqtfOGRGdWHg5LkLOzkKGmFn7ZBPmULKaYlwt8nV4/YmGVWnhwAKUXjXS6hV2Zg4G3yG1GZvVT1HEQKvDK9Aw2sW1jP4ifj2x2E0Xs0YplhtsVEaRClGNl8uQ0ajYNQNZTdgRXNBE6H5tp+sv+fGrxNvsO8tz2cRj/q1d2Wwww4mV7VyCv4jm9lg6286I6NMyFpQcNGkvq4V2YYfaLZ7JhmUUSmamR0s+GYRiflL54FlmOlIgQaViIWKS5x0zaZlBvRgnzfLxqi/GMpaVV4zXW5ZliWVFPcc4jOTBaAJPjASuIvbLZ1nM4fZNaLjU2PHUB7gvgIBQ2o7YEXhLu61A6t80krAiF4C/rBsYkkz3cjJLN5ImOOVew3WXBhKDoQQaQKkbtzRiE4uO+8PY360dkcjskaGdYYSpzm3aQL6oE0RWUkwm4xF5qQuD65N63/eKXzz4u6tQLNff6J3+Pzu8epPi2nvxmg/2jtrxzyjFPQ2OngprCtnURD3WVrXyKG7A35twsKlr/wOzogN5v/vQdGLK8sTFvtKHU4iq1MYIm1X7BZJuSBdjr0b+u8bfnfoTinmaT5k/1TdA1T/TxdPvpXOrEzPMoCxgcGHhjMB8x8sx8bvfbsonBSSQXDyoLnbuXru+J1xpdK1Cr5PPnl0WvNt+55HIux+P5ROZGXRKMBWw3xpZw31lFcM9ZVYFw91l5SM9pRNYPTMrprG1gY2esTVRy9TKWC73eMFoT2n5SFeFFWuop6JyuLdoAq1laa+ZUmCnZ2rFNLUyRL6V2irFxZTagkVBMHOoPszIzbqRdHJ+7kL306mqkdG8KKf/FImxpT+kc0Zf/m9lQ+6gzbxAL29iwqg6srYOFNtQ90gGIhRv6x5tp9arZBlkbU00sHEEAUKEdM3Fg3OQ6ria3PrRoFhfq7kqvPumstzxzts1UVqNBXpbGqk16Ffgp72c3fnVsFhXq7GM3n0dJU842nW3Krre5kz8TMhrRi2BCOmGDoV4TjNNiHpLKFA5hXjBkDLD0cY8r3hWoi0cjgYep2FpjUKNdCy9QAguM+odFI1MkpGkd9/gLkRGvIeO/9Q31SG9zJxKtrCkks3NvFytLL1c4X7agjzr2AKYxngq/2u4t/tLB7WPW/V/3aVf2qh9eInzAT20EL8WVF/AGb9T4XTvXuQkyMt7UujbngtyYL12Z/67H43aaunvH+kVwGRFKuRnvFpPq3n/z8JtRtTbglobagyI11CaImkRXpQwfyopytNaPibl3FJw/jp26UZQcn+AUsrRpNGkG5Kbm4vCq9flXVJCPUPjGJ6Ln0+Abte+3s1eXXldMvf5/V8n9h1QLzVB4aHsIemDyp6ponaIZtzTbWSjLOHN65SGvPf0nCl0qiy7JyOIEkArzU5LzmWGfr8MWoSJXembqN3bYqOx8afH3/K9KU9ZfZdZviZpyBX28Qzd4c4SbL6wiLYaolRFd4V6x1THJ8ZWgZkIryKBV1XR7M7cFgaM847Rad1UFZpa6pnkG2zv7nC8n0pOPRumSlUJ66Zf+bn0fO6fRX51c9+IaG9qBNPPOzzaz4ceIfOK7BHi4uwRSHH3oPVQaKASY8GMbJhaZ39fkbb7Nq+08m1FKg8MhzNo7bY8FrD3ecTfOW4RZFmdWBPV6eMe1ZaUyGgECk3nnjhhJmJHDywORgFbGTsZrRXgGsPsgahmdMQ2vQyRYuA5Xmrae65DN0h7sMWG4ok4KiDjXxZm5zYfXSXb1vt4OdnZWnH660mrmXq6lXu6uXO4Wv4GQYSLOOffo9JNtzRrObPAks7q9u9C9wV6cuBuUVxFkPGWmjGHgyZJj5o6jx3mpxITCFPHbg6HcW7w+evm6JLO7zOW3X/i7rQKjT127kIblxyX0Ifzhbs/f/Xmz1YYZsdy5poW2qm6k6WdDr9gHI7NuAm62Uq8gUcN5VfHRBVExgzlZRkX8JAD2LE/HAIPboVHdPnvj5LKGkyd5Vr4iXAkFyH0hCCPe9MowWdvltGnA2Pc0mbBsWqVf0ubB8SNkqw9ZmsMBU9e+F+dR+yrEmcpK6O4vnYeeR+5U/6yqaQwgyOP81M9Oal8atDgoenDPt3jw+PAEXf9UdXY5VXkuf2biyunwWA50YjVs/cUsGPTX7u8jC5nkIxISmbyua+FSS+jE/6Sk99B+rnr0j1NOsizwMVqA+GBK2jFH5Lb+4TSCmOTTrSvwrL36vDmwKCl5S+B1/rgogJKTGsme7aSg7WDEkztY6D0fHgEn0tS5t7Glq0jWwvK4R7B/m7B8RFgbdnc3/H4HtTmnot5E41hyZseDobhz+l7g0xV8L1jYkF4MTN8cbmFY+UyI+K1+tPieXoyw+XjoeCCB6V9uePj7A9uX83k5FFwWb640GAqOXrxvNRwswnMWC00WUiOMHoyPYz547Da/bGxoXsLli3fdn9vaujcgWUYBoR16412zz+J+Utl8/t+oHFfuBPTosLC03MjESFwuXHxUa5SnOfe9fEBwj9WOlyTLcKfRFo/YjIosdXZuqw7OUSiC68JHs3+JTo1Jjg0Lj55D7ScM8iJnlpBnio/8z8k5F36J7S55SuT9ThXKSg9MiYymWpnWe5bfPiv3eaHk9dl5r8MCKVUPi87tocPT3QDu57r49eVrl/62gX22LGJT0dE0H+rCrX9QGmqojAn+Tea4z40hwn3WDrInR/TkasbswdHpIfbjPuoMGFMmffZdM+Vtzt5lNuVkw/D+QcOnb3C/92jf+bMa2+x3y7sPZO9hgcczMUrV1jJfOjgV+WvnklrmPj8Zo88dgzD8+Sr2SlQyJ8oB5x6+dsxYNsbA+hjBw/gjh0CeKPtovVtRYBof2lM1/C9tSPzs7LQKujAcoX8MwSKrg8+ChF0YVmzKCxuoP3pxdJTfy5+hnwDWzsPkrWLub68T2z7M8+8e1v3LjyHE4cdBATvGYVrt19hvOSpA01bczBdFsK8Vrg7FsbijsEADuQPBsZ133mnwI7H9ITWhxarM4c0oktKjxYJG4PKnFOgO2LFBxHxFx4FpW1wHcAI/cdxeOPhtzVkgg8hBYa5BIdU98r2B1eB8b7fy0dvt4XEH1IAHGB5YsJZJyfWlPA/GmmdwSxN5hCBmT8DfkK7RxS/Snenw1px7Zs/YkjCaR5aaSaj3zuprM3I63UIZ26SGz2WN7xaDPENDIPxkM65TuqFp/eu6bkJod5qa3SfcF+YWwgBs33/7hy/fyYgmSsYJ1qeNbMZ0Zr43kfHJnM0PKkpNjMlmhjI7L75WeV/PHtNfF9onnbAXZ2A7LCEQRCvuRVTNOKHaTwvP+ztSPHO1PZH5AEH8tChQFRQEzN2I9nauJOMTSikagoJJIWJ8Wev3zlra8q/qn0wtyRR9GFnvdtX+ufp0FCbb2+zIGlZCpt5sW4MJNhBhwLgQAHEVojsSTGlt2bse6J7no0NPZo+q3CGaunqlaOaCmvyp32sSR6pmsG/5YkgVktkT4utvHmq/z5y76r8Oaqji3eKXugveSIYH+hM/bVR1PRKmItvFbH+V0RpTvQoCs/WFNvFoMV3nG6I7w2nx/aA6azQf8tKUz1B0X/kAbvIzUELSx+89/ogBo9toHeHFKqFXtWgFz4B4wN/lw/eGQnJE2T+Aeyiwu9AZtfU6lH8v82MzsB8TdoEITgvKKITlL4e7T/WoxZ5S54owJblVtuk0gKXjhDC9GLFsp1+Vu5OTk3/mGqWN3B0Ils7GqureBIXjlhLrpCe1P6+cL9w1i9xIEAQbUdz9iC5GoB0nRnn5bnL0nrPjFUsXrlKeKpg1Szb5to44UcEPfv6yIW7yORt+auDTTWawX8UiPyA9rv3Qll0jiism1EG46misjExATPil0cDhu8td1KsdPT26Axw/jhvQlAXMDqoOUmaIGnJL7SagCagGu92aEppLCf5PXtraCT4aszFSZUmTxE7p68FVzYENnPG/m/f3QocAuvQ0CDG3Wdnnoyg78xdPvvhrJpWh62UfTGSMrt8xvOM14c5zGa9OnjxjAJufBTkbzcQ0NtzyxfcL7ivz6A3GrS1Os6onl2GiwvoOyNPzsy8ZPP2DQA7ksSVy+s1NhnavW0WRMtAh3nkyrn39Q6Zul1Npro2NDsYzNhDCX1WFzq/39SLXOpFZpFsxNnb3n78SOXkbJP01r3NKzLP5JZFF2fkr8m9u/e+S/rSa6SLHyEHhjiHBNdCu/xASCWoG2KLU/WtyvYU96iWAp2Y5q6dJtzygx+bT+b23k3Kkd08nE3c/P3Ylwk7YMof3pbx4GFrelZuaQWrMLD59iNGR0X1XqGssilm6kZTXEWNqVBTT297MOXfXFyKCtoxqQnhD8bjoiKVzP0SEsPvXY+NYoLg5w0UAtPequsY318cxcfiR/CiSqJqI2qxaqPfTO7rQiaPFEbqHuYHBqyn3l/opLCCr4wK3vmCyD5/iAePTJ9MZqyNoXGWMyPoUoRnHf1cJ7Ug5PKQ+Mynn3zv78u7p9DDIxPtzawjraP9b0R4N87E2BwONHexST342sRZ2dvA0yH+IIgRyAR7K30DW+swW5s0O5sZdU0nK6KugzVB4/TfCmA+69o40ml0be5c9Mj4XFv3qZ66Fj8vFwo1iAXM1PhgFtXDwymgN6+vTlrgZHc7f3eznGuTHH+fkeBgg5wzf/+DKx42d7Js7lzxePDouqfV7Ykpq7tXPcBrsinMzjktISeFFtmfNByinhlnbKWmcoonbCSrsKC5Il/PX8LJN/sQad9AId0WyLqqFNATSLiHSR0yBfILgat35n+Yh/9bLno6N7hINAwXZjCZ+tMqkT0403r+5qkOO2MT+9b8QhsfQw0LCyIVyoDQy3am/wywrYzFdHZGRrR1rLW1RDC6W/jYCWYWBA0zW7qlbZiVJRwhjVjtWTF+Mxz3HN1/C97G+G37wbkmRrEsMFVIYq6+asPHp+NOthbUdmQlWljGhrvVxPiCgHC0SyJFsUj1yIjM45CBlNyqkwnhiSzVukMVtAsZteVDeTHTCqYqGnpmitRkoIJgH+gKE7ZB8hYxKsMpIbBOK+yXPJEHa0qhFIZYKl2SB+wiFLM7rbH/nn/O8WftCGDHoOSSuRe5nEou9na1sPJ0AwpusE6yOvJCZh+uj+l8xETWBiNbDnxNj/ZdO9QWnyQEbEH+HeM3NCem+qzar95obbt+s3sEE0CNcHLwDAc/J39qhKMDlRECJ3Ly9bvbarQtpa2VWpvsPT0QJ3lkYm9+9vn2g2vtjY1+VOkD/ghFUdUVn4y4SsjmsRvvsyOp7h/7Z8eNN+DHzg5fEd0e8dAS0wGjODVtt9Bg/3FNFc0xdDirCuE4AUguzal19uSYu1ZeK9+7dSNMJ/W5pxdGi52tU6/mL5+5TSJm6Z5SYY5/s9ILbwT9ty4J07A/7OK6ubJ3Q9cOLINk8BjXWifsRmY+Yj0Q/voJ80VOHrBj+K/n3sZnx9/KSIxCYEDefunnx+WJtTtDDPqw/X49B3f7+vza06u3Fpxb5RIJK/7qyY4kK0NlMzdn47rEer+Ic44WFBezdswc2L8T/llcbWj2yD79yvPTna0/h77AgI6dE9nexcdCAy9Yh7n29FlsRHrUXWRuD7fR2sIZW5wcb58j56Zkd81Ka95QgzmnGqsUcL3HByJJ+tpOJqpqPZ6MGG5GhrSPWzAQRCT+YKHA5lSewMf6msrVjKx3hevfOacLw21VGuKY48n20Q1+sZY1Bzzffjx+Ovckwy56aNHUpSY6pjabmVgeEJp8rg3M1HQxa5huOTNPkpUl1cXc1MPFxtadtHVq0OOrEuwqbV7eGTJ7t9biXxGlLV8nCcuazpBn01V4nZxD9mgh/aP02J7xhph9zn/t5SFafAeYfiHM/oHM3wrA1qGguPTtuvN2Pxse199jHiF4ghDG+tPUL0+Uh3gjSOgTSh4Rqm7kRA3oD9fzC9eNpfYJxX3t9DLcNmR1W/vJ+IRy70TxUOq7L8EpwljfVXA50Jn833px03pJbX79PDL/HdlpK+dj5qSFkvPxzkoOV6x0XholbpbUFtXOCh9B49mamV0MenTHmROx3XRadDdxrMfeP5qPHiXpT/UHrbgN7rUTlScql/kPCg0AW/wxt+wEb2pOHIWcGevrnx4f46LUFtSmpDwSMAKawd+icxt9D3SEai1JKSLK/RxROc2+sg6JOq8kFPHKILCmUOBALkCV9K/W+4TNAbfi3rkiC1UxuNbsGTgD91Vks/bpqJrzu9ALlIDH8NSs3E7OR7W9WPgO+Hkv/rXiqeQaVNXCk/EA8Q16CazfYbnpYYysVCToaGhOGp2WlxoO9lyfyq+I5Qv16SvAf7Z5F756nf+pAk4y/ld5ObWWMY6Y6uqaZpqrrOJeqnQem5ok26/BxsG0wcYh/l96ojhajqziF285LylJvH2jY5ojGCq4+u74wvkE8elRQx7+WHpfMEk8vOsvHc5v8OCs0vO55yEFCkQF0DDHkzlsbvVbp42mwosfvCtydf3BXIOLHGC/KzQwI0Hc6lk33AzyayooxOkp8Cz+nWHOML714Fmlx2QeFk/msJVKmZYGzgfYZv6gtpXuNKGpo6+mrr0XqR5u7h6squ4eOvGQvZ4eiGbddtU0UgtGFQH/czz+71GoOaWf0v643ZOLFbQ7HTndNfcc3NIIDT+7nIRZW+Z5RbkpqYONJdln85CgabR5cFi0+il9tSP3QbF7/0B1FpnXw8woPCGvPDnuVEvhiaEuVK3+069bG82XHVUOpMYdM9ZXDYTTnTadL2wjB/oyod0wJlIrSzeL0ZVUVdmXxMjOITJ1mGGtiZxt8ZevOtNDnQ+VqhwvFQy3didb27uTYUnZRN0ptSQnN+l0X25lTx806r5YerEp0E33liEYkVoMsfbxNCWiuVY4dOScu3gu8ef6WkyzX1VVnbm8tWj21b827xXAoiD4lz9i7Pyt6nDQYjeJA37Ral/z+2QzEgCOrwXrb0HKMxeDvr9vUI3stCJywO4bN4ga0VrhO7BrfX8fo9rG96L565FJbRBtB7ClAVBGNYMFdGyA3WMjyFI5EBJi1Iqvhj1Zg/iC46vlHVeL0BKCbBBiF/IOQrbRY1ttECCa0Y9GZVA5qQwp6XBKGXaNTAkcCHQtaj/PArPCh2g6gfHlVmC567tXujMaK9K9qNYqim+pkw9qyeVW/pUPLzAzPzoIjC8lgeXyxtG1y8cCzZIVGI8YWJ4a4+jpaKmFKG9Y6rHJMoq6PKuoyw8VdXlOUZfXLJ3wrX9tCKUjCCzXP47uhqVPkksscwZ/DlDMm7VMeISS5dNJlWvkePomQAWebJZvA0vZGNbSyD4SEEptFVmItWQJ66Ova5VI2xPXng2PYC1uWWopVIYg9J2IS1iurSxSLHKzQpKd6kjYSEXC1iqSaw/Lw1duUDxkuzqPkvWOPvouljdBFpe94/SldWOqtTZ8YPcFIf8fW1L7P+Do/F5uNSqdoQY5O7809tJrR21BllZP12bBoB/UT3IF/fE+xgeMpsFe1RiuracaiQjXPktPJbOJVyxOgVXdi+URwMn5vceXwwjRHJN9jGWUxZl+CSEaz/5h5vw0YOHc7Nep+3CmkeKYRmmM8JclsvyKzljBBvoOY81EUVc4vzwV3AbV9qvfkgPa1mOdJJPn7xVQHmapzhPXtuYocCeGE7ePeeyHpi84VueWO095rAlFfQdOiGu9pyiOYEhDgfYjzNYAhwM0YP9Yc6jmwWRQrT+aAytaA9kRYLN9LgdAub3vYYE4m7zZisvRXP3SfhsNtOmxf5jEroHpCEAtg39O2HTw4SAIDT1scgjDmwI7BwFioZlex7GL+PR+Z5eYAgCPfYFlAXh9XN74T+X/51MWTBELwQEFUMD4gIEbYMozKs9AWAXEbF/fb6kgbWUYVollpEUVo3aLajeg9g2+3YhlsWUYT/wPZdah2kGq+dAp3yhWSZFBkhG/82ss92X0wwJG0AINQdCH71PtFibSQ4JOE6TZahU2BUn1l2Pjw2x7ALYuJafrcevqcloW8YDz1Fg+vb9KkNW1JIe6cCKRvWMU72POihWHt6arb0bbZt6+xryXzMR1XWyjv6DYRYi2L1DtJevQkVT9QKyBp2ZSqtWQ6KXRbJi1bFFNiUnLYdJIrOINmVbFvKUICzkRIZydZyEq5GSMPopqqWiNxcRHym+Nbe4rQzvO4aTXbFzA09+TboJEGgbQ84FtoodK4GD45VHoKuhhIqs1CWxTAnsx52aDMzCQ1dmAWq/xGVlwq2WK6l+wbzQZbs2GgoEqJaPZ8YhftPSXXCX6BbePSuo226ApjX0C4peCOiCh/gVyHxc8EuM6SuRTfzEf50M1I8Y9l3d7I79zQ8Foiklr4toqGbY8Jq1YdKhijSf4jbWQ6k+pcVJifSm+80LjSEpEeSuszCOW/5lUQ8xqzqrqMIl3Cvq2/MjACDqnWkU2fiG0Bh4tRk17Q7itkxlHJFPiP1oogCVUQIA5LKAOS800frEEAeawsNSLpqmGqSaT3Tl3tFR0SbXFdGUYimhesYS9Odo0rKnCmMZMHNUT1UxxE1HSTx4mh2oOeLC82drUrJ3CmDZF2GuFATQ0BPhBBVEOsBCA6UBArQgHAaYQAg1pHAB2AsddEdx8dkVhR98VTVTMoTG7Yh1QyHE+ZeSh8nJ1i6koTMli0IQKEwdPjQpVp+FZiiLwMwTv2VqkQMrc+AZGs4uHiHXiwWI1HiPBxoMo3+JRAhhxMFmZIShrxveFm088Fg0isn0oL1CnRTeYkVp+7mO07cw4TETHnZxYTZk/Jn+BwhKuzE6MUMdtNk2gYJFB3pNYx9mxZsqcAxJzx1ptUvlZcFlJF2QG","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2":{"data":"d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2":{"data":"d09GMgABAAAAADBAAA4AAAAAWSgAAC/nAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCvtU5E8Lg14AATYCJAOHNgQgBYMKByAbzkqzoqzvGjeKSs5nUZTtzWj2XyXwZOjNKyMiImBY6zWKNWA4InKyCXHjC4uVkc/4jsPk6tWO0dBIYh7RfvvZ2xfNC6JEQBvBRsACoSVa6XxUtYSUCCLyUMJGxQYVRREVMb/RPwqiaO3/++ju6jlvgdCDQkS1EtguC4OoERR+EIr4ZoID9KtY027T2QGFC8Sv3Wdr/ZL9V7XGmSLf7eVq1V0NM8fgyzEnvgOVQLoTJHeOBOnpy033erpXvoAXNLb//7rMVtfPikfHmhw/mzsrxFN0S6eXEzdVikojDfjPtwysJR4vzhKPJzAOEfRLwFWQSiyarXJStOlSlGlLxmrvXfu0V2RVV2FkMjP5L5lJPmT3mHIAoFJEoSpsHaOtc/Xd3n97Iqt3cLdZiriXiEgIUqQLI3uXfvxtVWfBTplCeE5blssTmOjrTLc6eFqS0E7GBITAcXnvmyMwrLEPos8VEi8eki4dkikTkiMHki8fUqgY0uYowhmfIAgBgAWACwFAkHgIAMMW+5COOsbUFmSvjI8IBtlrI3yCQPYmj6hQkEUCAN9CU914dUQo0IBckjoaBEapySreYP2mPI4vu7Ctb1pjaFwYc+NO0+4EQcNznUNId7Wu3T171HjWc3pRSfcur/xpY6KxduwohWEOw3scHykWzHNjqODCuJM1d17PSlpRcJT6uiWhYGIRWGOd9TbYaLMtttthJ3UatOy21z77GTNhyoIVazbsHebIiQs3larUqHXGqDHjJpx1znkXXHTJZdfdcNMtt93zxLynFry05JXX3njro08Qjcwh0SJuN769JN0jCRFE0RbcSOLTqq2JPbW1P2kQp59nDPOB0QRjHIQN7GZtnzcc8hvHvOMyBRbng+pIqkODMRp7YxjHBM7inHE/zzzALB7iEeaMx/ngCebxFAtYwiu8xhu8Nd7lN+/xGz4YH/POpwp0rc/FO9tym3IYR3qOINPILK28sjsf7c2Ce06QKhgUnwpMW3RYaEiZYx8Rp1wTsnampKyXHjM5KZGfNiRs4nTw2OclDwKAGFj4IDkbT/wahVo+0yTcwV1MY+bU4ii4mKE+iXyGeccIMMZB2Nl9RXGKV+KqItSg1nicd55gHk+xcGomw3xkBGMchB2K8RhPMI+nWFg0ZkLMYds44aGwKcUS8Aqv8QZvT03GTRY+qlGHBosLNWjiDu5iGjOJTKYUWQCWs7ZJmkMp44Rp6UW8Al7jDd5KVJ0QW5XLDudLpuX5xOy8oZOfPIotI5jkM6f8BknPcxyMvMQmjpO7mgmT+mD7zDmcHK0SQzIgKbeZn6NWObkoPxfU5z6kKoMQE2zEtEQC5C9XHJAnLWTzHb+8lFfKCzyNyx9cj9eZ9QW/5X1Fg/eD1l9g+WcM4tR38iWpaXdZDeQ9+jhY7u1f/e3J/QoZt+VFE8ou12lY/hTr88U/UW8AiHfCtzb8ZT/LTf8lCqG8S/mGH8nuWpe/N0PX1F2k2IzqNnG9f7O7kd9kMe/zenXcZZ1jyQsufj5LmYub+jjtOZ2PacXDz9W8zFdsALD8Hi+qpbhVT4Tl5rxKJY3elpMpzZnfwhHcFGXy3Y2fIpa1Zat0uMBH4oUfveKDd+j5/YQNll/vVb7lyg/oskXm5F5K8WVf6p32MV740dM/Cc59Dh/cm8JythXCbrzlmPwiBmcnet7w/x/lX9a48Gb1A8jzjh8QPFVibqx9WubB9/9rvuVwfdmqbvnK4FouF+bljr48mMKUDcuLbrR8ymyeozMcbTn7skwOe2uvc73ivkvygS7xe3kV0fWy/JI/ryvB8rxQZtmeJH7LLA+IMyHchQn8RWNrbECyyQ50GvaVifoMyTAGyzMNXMGKLQX2rMwxcBVnrlYrCFynUp31Guas5owFm730lt0xZhQnhJ22JSmSIjnIWcSEtSxjHfOsZ2QDk6kxw2Zm2sKStjOyg8VpMJsmM2ixrN0sbQ9z7WWWfSxGnykMmMowJrGvbDSQ4tZIbMCYLVPZs4Aj0zkznwvTuTJHgaQe8Twp1ZByRz1PSh1YTgPLOROIjDqHcH7VeC64jOy625A7ZjDcmwJZ7ptD8ThQwhMLaF6OTrLkLaxeFp14xPPE8cCS+FJcQ0khj6BCTFBjKduZsJMJu2IcxbIxiE4SJCAxYhLX1ipuDDlIEqlEmEgeZgdGDjGLQ4ysmAkN0ST73OERiogJxaMj5SpIakg8EiceiXviTkNKgiiSUI8IohMT1G4LkG6ELRz/zgdkl3Z2KV+Rl1kbM4ZjvFlQD79AXxFMjrS2jTnHWOuU7DnZwpRP0bHnMyzMcs6yPihNRFQ3JSFnHWMQT0256hZhCKz9vzuTwaabAvw8QJ1oz9hGt0SHRIBll6EAGCEvAQQ51/AKgtCyyCg4tnEWpsEEAzSpnSTRkh0Hyqc204Zg1u5Qno6ypXZpuR2bQPYVSBaUBQIUgQF+D18wmiAWNA8D6DQwcKj36u3B0K1Lpx69julzXH87OkN2b5+QIFKUQScNOWWYCAERtwIALmErQwbkZ+Z2gHZJw/B3fPvbEQqlaWAdv65dYHiqhSEgoLw5Bf4HvquGDorQiwCAdMAcpHjTCwMv5fcVSlvCAOg6pGYKQIMiEmkAbClax9+z51111xtfLKOtzaZf7U/6013FFWUVFRSVFdcqainqKUYpHlfmLy8jgqJs2/nEF1wz7a2vUK2PFyhKK8p3qLnolt/zimQuYeQiWP5zxfcj7xit/0/9J3pYikQJYkXx5GDj8x/PSiAwi43ADrh2MSSfXh+a7oypk+uRz5DpjrumzbgnS7b7Hpj10CNzcuSeaNc7T7533vvNBx8V+IQFANDhvcN1QC57BYYiUkBSWzGCNhyHl9qP0xjAeQhxAVcwql5FOq65dznuNHAGM3iIKTzCHDLwGAu4g2d4jiy8wGvcV98gB2/dLxL3K5CLb/gdL/EH/kQe/sJ/eKf+jwJ1Wfmko318UKihM5QzfVCkEx/7oEQnfvJBqU784oMyTXELZUsflGuK24rtX1CJHbEzarA7dkc99sbeaMD+OACNOApHoRl34S60VL4EHxzRlTc/B7RCCLTGLB/1Mj43oF+08HEO9cl+Pxr+DRC3IYssieX8I2QYSicSiBjub1G0sFGJs1RQiS5FIGaI7RD3wggdtDVEjBhLR0pBboIDoEgknIZ24jAchLlpKE9WI/ySrE5yqEP61Qg0XYwA+K6b4x6/4bGw7FpLNLCoWacXj+Uo65icZAV0wv9g/qK1a+/ptkSmJNeyt+OS7MU0bbTOwCiw8Y2byrEZLdngAgM2rdTGwnAa9TUwuyUWY/jdeplHwDeS81iWTnKeWpDE+IA+GTXGCfMfp85F+3h4tyC8nxpXiVHcFWfJoZleGFEVR4wwOeM21siDx7x5HZD9mFKJjCClRCYmX4vD0mRHXKyAYHLt1Ve3XuZm2LoYCpQycIS99jSgB4zkuEKABrMJamFAsTDxzmnH3jMjZRkKT8ct2WyZtFhLw2B2jhH6qMxLE0Shy9693ptc+baB+dtpZ28Td6DiR7SogHG6iKkmLajt86QvKdDfbx3KePzrFl9mYtUH7HnRQc2KgQAj395kZRv/qJmmItcKPFdtY430ZuR1S3PWbJIlGeahAM2IGuyjfqOlQHkDQd5aqa2qtTGzCL7/0r6w9VmvQHBoDMob25vKDGmsideq9jVWNTWfdwlkkI9jZ5mr7M1oJq/9Q0ZLotJbxWRVqBxWvOQCUU8gCi2u/sWgyIJJIXo/ikpUNF5lTbJrdhc0Zqae+b8IgV2iDkJ2b57j9mZhYt5CM4Ve5CQBKXKntBe9DxSq4ROdKGZ7DhifAw4atwrXNtYGgdGv6n+l8JD75Fz2QRYfpVMsJGXuDLc1copPUsKVco8jSOhGDPCa9o19fr0+5XRidXHtYUyFNmeH/nbgWzi+1DC2Wf0aKwtupdXh2purKltu5mbaUzb/wJ/tDB595xokRQOCU3CuMIAylGZk4xAMhEMurw5vRFwEUuNbh7Kmgpb+0jWIzGWuGpeb4V2Xl0Slm+w9+kophiUqSycVTekL8FDapWZiu+3CqGDZaJifDgrPD/Jc2gpRwTkYliIsXKqSpLgZIANcJfPFnCqemYKR5Nropqo2iKKtMR0G2a2nS3otCUc7Ye4HqhlqNMjGyTfU1tL2OIQJjd5l6/OKtIVqGESF2cCCZKzmJfXJ0UPb4NznlNf6p5X4Kwi6b1xRSi0TSITurGUv+QS2Id4qiXsBvGRhlNP29E9jhcTOKcUnUdP5yyXGM4dhcgKqk1jt+5IQoiFxJ21hsK4ngQQpL4XAquMzSZ5RQEYhxkNwFGSLoR9LFzt24HnWKqqkmxfSXPeuYaCWuoYXrmEXNfkb4VzMd9kSyegY/Uihij2+t3qZ0xBv7JqjfATQFGECXGBQLygbZvhYYIdciw8KdG9ZtLBt2Gnf9Ud3eocCjINhtkoV3fyuppgiJEhqDAyLQrPApveRJYlBAxAtHlAYQOFw++P+Wy9zl9m6fyWJtfqe5htfpCxBgp3MXZZKH5ufcAVHD0PxQkjFvbWx3QXf6L2FWmKJvezyDaUqh/4ApynK93jIOLcpPMPUATwrD4YiJkaI5ue1axchmXYwmhRdo6TUTPrtaa/Jn8LDT/rb6SzT0DeTYZYDM60Lz+/OMP2eIB45yl1y/H6KMLy8XzkE26URQVzDc9PUq+MKThyG/lGIB7AindfQNzV/4XmlG+ISlQHIYzkKPID0f3lEWfPJTF3ZR7Q7U30gSD5QK+3xqwe1DXDb4Nz+TPGEDBLoQv2XA0f7CNCqZgBTzz2IhX2lI0gIPMOg6BiTYS/lIN3uQxuTOXScyqzkCKPaqmt011kgAXbUXNbyKQpSbYqy/HiDWqZtoFDstBLjBFKe2M/x9v4BNIKJQIRiiScyrtS0AlYyH12t+H9ALQ9rSrBPH0SNXBA+HznUhPV3KV7a3TFqO5KtH2m1rV0L+TvJt7E+kW0safRPVW2h1u0Yqt5Le+qhe7ZL1/Ey03V5/3DKDNY+8alw512dUVkNwrgHDUfnZDlkqI7nAvmaLru7exdcPci9+XdMed+7OABjliVpnDTmuajF3mvjjT2jhh9OlbmzWuSK52v1L53tYrrBP6ggNY3VoUZQH8RAr50dOCPZM/6CUZDQdgOViGVTTRuQUvRd7v0yDiXRov/+1svcnG+uO/yYogFJ/lf9JccQEY+gjKmKqs265pK+gZlZgoAQ/KakHBRH85rafiMsTReioDLOYxU1Okbjo0dJkznpFSKsDiCykB3vnQzIR506ydi7WUyiLoNhA9LHwha/ypgIpg1q5i5FAPGaUrdIGr2LJt+rMY4MDg7XPK036QppIcJKd7/UUz5N8dqlr7R3sSdoUJqG6Mi3sldQg4M5KbJwnMM8bWk+NevdUVsPF/dBBpDM12Kqrl/o3dneDK2Kpx7puNMTD6e2mae+0xjmJBB128pEfVuLA99epZSbFyQZi4PRpPbJxbhDcxoQMYl2oVszH+K9PCv05ofs/WJOa6KOCor3mGY5mzB3XH4JW7gYevTs0eee3JjeyR6+lbIo5On0op/uZc3miPJRg7JP/m1H3Af9eysofbtGodLPWpTkrVIXXW7JHZAqtjczHn5wAXHA18CGh1i7wm1acMlFoCMdC3Amoaaiqiird/MnF+Z7SyeQfLKVGamYsDxzD0wtT4qD9xspJa4vDKswRFaUXBJ1wl2Lh+ZgaK87jQQEnM+9CYO3g8D87seYFrJ6FO758bvaZN45wOs4ARlYReOQn1M8GqtOQJxHX21B2xkihgcxv4KkC58uBNfqsi/eUgk9KU5lwi67BG9y6nXdt/fSnqvfEGRtM2Z1NOXtFYGRLwRt8G133ySQByexjzOQqbwM/ZgvzNilNoxc8pALhi0NRxlVEufkJOw5Td9mxtU2j7ngXpCuDrV2CgGL33Npn8uellCLX7DycKn+7+r6sqr6N1J5yw8M/SlVwK89Ul535J9aqaiYpCueSSrm5BXftL8EKrYr/53m8Tds46XQ7QJS/3U32VMZx77M6Hj4cFBy7ZOKdQuV8mVfOedPUSt8m7yIMFSRwQyl2Tkn8oKLY7TrKZ6sY69mJgRK58qVL3RIdb9njIoYGVGN0SgFHcsCxdmrcbikh5pGNuVkD/cm4ThU3kdNdmOVjhw/kEKy1HP9pou8vRmWNDPKQR2fA0gP+fgwLJ+QE3HxMWoy+QCraHggFceiil5qGlmXVXCyf28KyeKAuw7SR54+DEuaOcWkSo4B8voJZcH66Wm4S9zf0wAMUjmjd8rDD240NcykhjGPPprqwDnoxDFqCq3vZkmFx59JjjmSDW2y/9f3Nf28YRTWnzuNJ9DrFz2m2UR1JKe7fyiRn8EJSi6m4qdUGw3vgTrfQAuGv5uVjZ6NMA6kfAoO+qeZPquALBPFN0MivOOIuWxiU9SLuHgK+uduoJa34yZhV+TgFepq5Ma0B2Uj5R+nh2Bjo5lchD2K0FJ9jR6Qjt8YVRMKzRoII3t8mnBn2oE0nhd30C2VCNvmVKN/SC2I36LlWMFPPZShtCAV7gEbO9gFCgP5FjdHVnt71LVxzwjQlP1MIkvkimRqTornrFqCHwrzsjXz0DED/yGPf93wE8+92rAt6ag6RbUDHglO49P/Uj8hY5rhqu+b1dlbn5JG8cjvlN8IE5qh8m87jJibmTbZ7Dg4QPrvPKWQdHxO6e1GJXYkGJFo5yhZ5ON3Vy+C8wjb+1ZGrsIJuUuKMHJEokia7uHe08MrYYUIC3xwBj7Ryi8cAlZ2wZ2XoVnEMH5wj9PNPX/zvpPz/YnzIIu3xULWcAErhhUpzApE4agljxc5BNxT3BcTaARPP2UP03wLexN3ea7zOE6NFJuU/jKFx/DCc+rgMJCFsXnhOBX31jPTGDHpWWm4AGBn+ftJ2ZrLWlYjWlZZ4jHb8NurW+5fG0y/eR2ePD1z76HsMS1hcYh2KhpGF1m8u/znUmLTuB/NzpNHeimx8Zl+KBUPnBWrZ+fED0RjIxS2OQl2i4bEmlZdw3JfzN7n5opwBOpIMJ1jZgieiitcJ7fhu685F6j+ikN6UTX5Wpql7qg3UtWBcgBZWm+t97DQgTjS8bPcBrrDhmp3ezDs3Lc1et/VrTul/5SqnYADWXtpwXkD0RouOx2HqYGcCyveXccTeH6RM8BIqh/L0jTbadJBdWGfIS+dw/345mNepiUzLLYmHCeiE63sFGZkXGEoSsYnGiirlBje/vnuWIjqK1iRDL/AbHcUjBrKYHtEmrFZp6kVikDtySbzzHRWae6XJxmZuB9f+UG9RQTKtehEZyVsIauKNa55iPnvZv90xN2hO12oRoQlbgjs9sKJpIEpdk0wL/nETnegpO74V3HscYJM+c6ZhFW3YN8qtY1yrSre+zfKHVGBLfdK7AhF0T8JMmUaKGnVFGjXsSLcTgS5WRokhYrFM13soh2xD8oI4x4+BfyjP68Oom585ib7KFc01h3v53FYsuaP/Zymb9M3OGrjLxZ7weSr+GEUfJhlmttXQkQioYjZSG+tNZ8fTEcFRJZPlipdR46U405UkEV2DDblVADvTWEP8RTH//fzNVOSOhwi97ysDXpwr5VsVIH963Mg01WvfQ/NtVyStfcfvEZcJCS7K3RuLWa4PR0+uZd0LIoIJDlX/WRk/bXbvYB0QUrpI2jMJJlfTby+NXqwk08eHN0v8zyuC3aLzQ4eg+cL19hDvOmfAR5r3E/TQjmTK94sXetxZK6HvNPlnER2dEhmNFZp4EDqQDonnBUQHJRMWgFgzJvesKhHfUnOIa6nCD+Ty7AVw4wbq2YYmkAh3cJfgLI0ztr6UgpNkP5VXv2PRA35EPl0yVwRriVdbdx+vOXDEA9DcFKoIXmRbqSytzphO6rms7yjz8CDtVSV18qnGWmchhMDlRj2Em3eDnhKrimzxCLkms9a3veG3RGZlsKMCUEJfkEN2n2zAsPBC0a+kqFDqISYTY3/TKulxBhVi9ZxG08QN/DXd9x7Y4z80soUPE75V24dl19IHLzS9rAc3SMlBu82MJJrBEiYiGq9tto19p4IDr+a9zkLpHGq9zhovBb2BOMnVf624OdtfB7PPGdeHmfECkuEKAH3tvHTYGX7g3M2S5VWIXHy9eT3o4XyNqtngN/UItfkqJjtWVC2GxT72b5hsv2PxhbntT/GeINeQRlXr80h0n1TqVlAwohiViBLL/AsZZGXYpWQZSscB0tBAXErNfpPcgM5TserbUWkXVPkFH6AfynQfmL/bboZEt4uJzq4S7Xkyeq5SpyN79XmqPHeEtrky7ULZXiC9Kfs+uWWDA6anpodvBhew+KPz9wrvOn1X37sa9aF+sv13DyxhOy6VHwYQGPQdG66IOy/78ZiJnlwNyPid3IjOVnbuVlaaHck/jYuIu6mh4sflrChWzNt9w74J1Gu1c6Wt7maOGLvtRw/D+I05W+pDf+Lp8BxU0sfU3Pe7CJ4BV9e868w8gbvVuxY9GVNwXsBlF2p46ZyktKLs7AygPpMrMSRcePj++pWZfG/0uPKR7965xKZxB1h0BQ5eQLo2YUV6SgPnc5khwuqbphW7TBZKZMuvuwSSod+9ygm8uBlRPQ1Sso40NJb6pTweDqYz/KvcCT449vRZlfkmvXBmjzIyHys9FKX9QqXEPcSvJ5xixmZT0YZkfPcuvyBQlxLnh6UPcLIfAp7YfXPEw82kwe7+NGDV+DsBXxCt09u+48j1B1A79w3JaW7cHFV52Af9ZUq9toQuYK0oo+6ZvA0bOjI7Nn0Tv2J9YP7SF2k/u7AG+OpafCc/fz4xfr7jc7i424bxG1ybsH7JmW5JrJs/R7vuJ9yzU9kamB957tRrn3emFStUGB4JgyYvwaPCkZUO4Dxe1qY4NCZMKnaca593gQoTo4yn59sfZjU/rAF/q5JkK1JAOXhJyW31twGUbD8+qr8LlyChgapWfQ+6QuvJ4BpR3d3DXNFzqjEVcxMBDTX9IqblsGoB49PctoPSZFMJWe59wvtUYP9LtO1z/KgTxTE9KQdPOwN+62lBZ3F9OupCcRl7FqyOrmbOwKi4L3ppaO4EfcvkC6JBfXbEOV+DYG4B0f1Wz7cffQoDsAt2VZf4W26O2qMknI9BhyfrO7rLgFEDhrLO/STXafDbyz99TavEPfim/O9PYACwjPccREx9kjy4gY3rEuJis4FawXB0WL63cwkYhi7p/rtEHG7oJMfmVo4jqvxyZeUcxtFEkRJULMfaqLEH7X7sbuyGQcS7Tm23+G74DpeUuItmnBbm+iLORlEFz47SxshtCnaDOvLvIqs25n4CM6t9Duk6/EwFAluC4mu5i2NbNgvlhzWBbEM3b5u6ZIuXqpMu5eTv1s72m7Glaj5C7lGRbHdxQJfSJe8YGzvAxsFqcES0q2keGIcu+Wviuti6q2SvyPx501yCJry0rT3DfUoa8VpeKhWvlDglpk5iL2JKl+rSzhWdkRAlPg3BeA2HNVu+3V3ZRO5Ak/8wb0HUoKR4oYzuBZV3OKfiZ4UxVyzNOYWVhKdOPYkzYsk4o6ACJaGmZNaw2sLZm5s4fS54FHk0gwy3lqsB+OCuqNHspCODk+s0mgmXaae9XNcQY5T/G3mlhpnfPHiOLR/L07ZH1nHlyED14QKU90+fL1lF3wVloa5XSACab3dknG5pRewLypxkLWqPXkHt+H6GcFgzNXh6CkbR35uC+GJWlMkfRPujMReY4U6x3qgHuzVTKuUEjEntUDae7dMXvmRUVyHy2+qX9JOJAw6BV7767LMc9HFUud/OdUS/Obq/z8VF+McdKnU4Q9WFae7lvm54rlhKEWXHh1X6E04ELWufuc5UVQnc2ZcfKE3LiQuL0qOwP5t0oKj+dSbGYnEOPZKcKeLuPpPOkAQl106Bs1d4CQi2VSENvjjJhxe50jZU9qMc4iJOVhdZTGC3VIUQ7rdD9+wB05P7MO1SLRIOU9O1OcX3Drrc8eQZEOUhbb6oTocXe0i0CmoxnnE+CPYhKttaQNeTTQbZMc32wDIJkfUNGIlc5hYzRHmq46rf7KinqWU/D7ShTrQrTFcfQqQZYDPIeSCdDd/pBuxXFI3OkqPbm6sJ4eTvWOrr5mHEX3o+SRuGAanyBAfT1RqDytntVXJV6RLJsNaN0hQzMyVAtg12jzdIBTUwMwIaT4vXXJelQy3A1MyLuMGXDXLPxM5Joo6e3ADyfCglS5xkRzQTssUV+5v+z7o/lfaa+95ZXGtArae1hDsawOJSq1xhQdalVS8TdprWyXVVquftGqtNF5bAV9OrMl/dnIlVebKUOWWyoVzKsvhKrRzpQUbptav/pxNmSG0Dbli1a/scJLtZlftRObwqrPwvsZdtuaAdNkmG+5OuTp5qUJYCG7eUfmZ3yd3x9KYm1tBFSubo6/8TWFJy9rVWzbqvv4mhtIXxWsnXXxN6cUqWgrfkYECtyV7BwyxK7hvzlVA5N9zBhu5CosKdy85h+mxKjRNFX4hA+J0leamsMYdpZ/5x2TvWhmJ5VRQOWWP6Ss/yd3Z5hHgB2b3Gez2S3OFKJlIEI4aHjiQS6h0RTUSYm2XpotwDBHkfNhad8/+g/4hPB8Y6utkVImfk/1lsbnZDferih1bnL4O79LdUVOErHsfiGdPTxxZofpOpPYhZkXZOLuIGarCiJsZzYoR37Qo2vQiY2XFjepjgcJMd1xLvrLMXqITxZFNcDpE7r6g7pDvDUK+6YN84wEUtl7+qeztVtmmJoV/pW9K/DpP7sbnp6mDY0AJ8Ij3xiG4vkMsbeXf6rJNsE87dCz7LL6Kc5ObcoNLW7JX2NLt+dWHFf2iopqKUsIrh+JFeBzlxQzUhpYfr1hpzzzMK7WU8YyNqC5J2foyghNufLclIQhH4YfJZQtiCewIo9vNcUE4Gj9KLp0H5UzZpuonL+7+KZGkJX90t0Si1i6dsxo6OyUSd8gf3SmRRHpzdwpobFqH1Mj2vcLInBrJ/DUCut9O887dc/P1ZfWw+1feXEBz+NtrxtVhINvuS07XOwTWqHKnkydNj2kaGCp+2GLNtwjBB/bpGV/PAFYnNSj7eIxawuYidAe/eMW8MkxNzqxOxDloJIrjz7B0C+bYGCiwIj9Q6rd3qUnUsL1M9kgjS23p/u0SFQwjV2HMBmB3OrCn1LNffNHbuondvPh1TGzzWKjefHrWduya0a4qXIaPPGJ30T0EE3eeNKFi3NBOriwBsq2ehwNyRSll8v+z+RRTcwddopeifO6ejMQdTDmLxrDps5EkwVmJW8voAmkCmz4XxTqukbi65OVy4yI+ieQuFzuKX5a8seRx6No4MEawFPdag+hz2NjJLiIgNgG7kyJGE7tDIXujFMXclgiz3/K2kcEIPpGSgRJwVhU9caejJitZL/6go65cicshwm9/jIkL7DoZO6JGjZRvXQfRMx0tfADJnqtwlJiSvPna0/H6eTwEFrswl0xVZkba/K3oZGIMG8+3E/AvsbPSHt2IzJUzf3fPTiRNhO6wKqDZWAEUkKrSKOEbdN0sVU1VaO4shr3CZm6BrYBiaEfR2ayniyvTSsAQeevlt2jvPUwUgYa+ZLFkSTFwJk/j0NZWX+SOUqqQNxa2NPogD5RRluRrucdoq7qtxSG3XeY71O1tYcOSvYdUjbt281Ht5hjpmmjtpg6q+A8VqVoVaGswEER6bvC0YRoL9b/qgIXJQj0wovqrUlEsKkgm+VATapK+Xy5LBIkoXzPQQc57fCynt4XJOzcxvFvikpOJ4miSOyWmVid6I04jhQ6nZaEYVJUYXLtNR11L23G/N8uniGQPIPc7vN265gjIvNLyFdJtNtBHyokRsnsT7ZTSCHNSq50fEZrfhnItTA7PDnP1n4C4I/XrPeLF/4IpdnHl4y9RZeIgdmUQjs7CHm3et/+2wf/oorYWdBukyeNswqc/vJrAQZ1kMW+mgR9zVjULPjQ0+NnO75LK8QqTgNWzV4pw6ySrjmLA7ZyeqsbFuPUaq5qiz+2+d83kNN3NMMIUmRPCcI4fzZLqYxxsiKyQMJLtBYY9zGDrVn8vd8eYCFYEy8Ml0hl5oKwwnssp4Hf9uDGIj+Oz1zmdnJFzA5E+jrbSVb/2b+5f/NavyhmbmZ6CoDBwUHOXJ7m/018z2C5b27Lv4T7Zml0G/H5zpbhhtxlYZ5VgTrJIDSebxZl5Z8RakL//ASkWCRZgJt6JoywSG2on3gYcI70G9y0qMcTJM4vuKcRtnBafcbTm7vKWSHo8u8dufHFfi45Q7cj/KEjBepNXkalfI0lE+keg8kPp/LZyQ2zGMFPZHmOsGY7Pkf5ds44tUQEKosFtqz/BXfjwkjPOSC+a/BRYLgnqGiNis4P+E65KAIUX67gp7Ni04mgM90XMV4d42dG3RwPiUAvuP8mqpLm2/WAezNkZVF6pGaZC73g7dhyfROFGWnUBJmHIp8CTYeevHlhRvSfG1WSXu7ajhms83epgkCX2J3JrxMvAEMTj0BnnbbY9pwW4HPUcpxfRj/x36vEiMO2YfnZxDtgPlQZy7Ib4YjX/nBhFwajdXsm0reciTkH9ycZPufm86HM03VJWYFqSHzigpt3Gajvy8mP3DVbroxYjHY2Nn25AXGcY05Fm7GC/+9TOEKK3aUczwy3Hg2Hh4wSarwWDa7dGsByluproL7LSiXH8nM+fYpfmf1/IzcT1ODQUiwLqPldqBd1J9rE7uV2/aX5Xde50umbwm6ldyb2kUnz5Br+HU5A6JiRSSKInCudB++XhG4qnr0upbwXo2J888HzRsnflv91wC9a9svRFjht9qjKh9E5IOuWKJNWO39hC+ZJbjA4jZ+Wrb6GiW9GJlFvyTitXUXZuO1FFz9zmeGM0+FsTnubb8wljBb1rpyTTC4mpeYUxlivsvyQt6Cyk30hLJEaxd6I7XSSxq3U4QD0jbxg34+NLxARrdC/JplzY6IeOYGGtA2VPSRMpj5h4Aksjja0VgZ8ibJrj6UEtftLszhNvUdu4kXfY+DsyRvf4mj/ff6LLNXk54CkDkD5I5LPY4mVBXLcB9OG74n01FboZxYyeUVwD616Zx6GzkRs9Tz6dI5LQiWTjeW4uP344yY0eFJXmRvSRS0P3pOhqX9OJQIloIkzF9djcD3IWGi+2/VOsauUq0qbtTUYhWJcUFVHiTeSSLs3LjEmQ7EsjOoJxIenCG8lhfaVab+JovXrNf3Awyp1l7usI6npfORUorOdEdx3BlWAHAndnHHJMS3awjoi0Q4fTEh1sI8I9bPe6qqiZG1i57NLZqGZhBFqvF5ih8dkua+6IFrbYEgrB8RRmSFKhM5J7EaCNWu1XhoGspMDLWFgomy2VPcwTrloAzgNJL+PoCql8yYwhftyqF0CS9TSJKJUq4AWIOG7K84BV/Uwia2RrVhwblm5c+9WnxpfOqZephGhnfYHWf8kuUWH2Vv7Bh2XIDmEhjta+AXbAkDuZkfwiQ+CYVQc8L9ED8UkMawezwFLo8Y+ytb9pYdvLFRE0Y4oBMzY7O5xwJRKVSK3h8jFoEX/aufLXKZBIPC6d1y+R1LmXpSX7FjlUrlDqCFjliVrRveuqFxMkkqKk8qJhr2ehimyNCjgxtvd1SZd0AttLdiTWK8J1ABmgLGV9KZXmsG2h6BVWWmLZP5IueegS00DmpY6A5i+fNIndXrGhHFdexOLvqCrRz60Vp8h0PRrtRMHo9AY3gdjrOdEvscPDjZPsvn/+CLIyEZOo/Qs5RAVwXfhxmWxvmcE3U8PIEOWt0ZVSa4jYFoqWkNIiy35OuuRRvcENmZVCaMpYZe1OJpUXxbv4mBUjndpWu3G9U1SImC83KIsTKH1q9kIvskNhEufWtd8ittO7/KB7biGll2zXRZmS5zXeILCZ79Ljs8fCVjLTcdopZh0rnt9//HTeZ1XK8Gc2dhq/99ip7VtwoieRRchfFgxRcIo3kUmWn+KLYOlGtpyQsdFfMt1vRU/D+g0cxBKe++fouffTmsouoJ8dXXJfKtNS69g/B0LSsnAEObG/IQNFobJUkmcl0LxDkY6dFVXXSVt/UPc9rLq8kpXB/I+we2Fl5oMCoyvIQeT4Ey3/4PI+RqGhxE3apwdXy53RHsutFANNtxR7e2f/3cbQOjg52D9ZMSSZ7ggRJpSwXKMgLRxN+LenJhHcZKI0huRBSW80clTH/jiwPSkWRaK8mMtntXXU1ffZ7vey2nwBtdNWyze23aJutNvVMUptm9keuLjfdL9jUHwxOYycMNCdjlJQ1iCjdJtE6MzAix+3sFIebHA51GaJ95yQvGmTuZ/qXlsnis6FWgfB4Y76cdma8dCU/x8fubn+x6H/iVV8xub3PwHW4v8DgIqvdERahyHE9aXgbljnxv/837uxaQVWxk0bwaybmhuAdbqY9zrMvrnx0FD19gvgTvPGbsHYquV3Dkp2KzJ6hwxYXI+O3shA609g+pV2T60Pge812lty5TowKpsm4KoNoV9V22lUpZR13dpxIw8e+wCRjF6RvRHdqFN71WNqn3pc7aeBkSjAA4TjNWCEXgto6pk5uv0wl/jr5LKGkNZNA9v2ulHaUpoOrTPi26X84W7ozrvaAXVD+kUyl7iWF9gQqZr18tkcLdZckpS8wJxxt41IO2n7CL1W0DRgju7ippImG5QUKbc9eYHN1tXs0Mu7qZM5un02l/iZF9jU3L0sOkv6I/TMAxRFN5+7UJTcOOeV3Ulyel1VJ98o9RXTNdSY9rnGnemCakwmmcZpp1XzAhVQYS+955Zf9Oi9Quo2bgo5kL5ZpfVoGTe4NhvSddXGtSEH8vxriN/B5XmBKl0HMd1WHehQpoN7MTkCqnVdOKRALl7gJRCOxWZLIga8dgf0/wcy7dr/AVDJ93a0DNK4toCKy4CD2lEyThFTN+yHyCgg7zf7DSfcj5aZPzbP6u6FVT2UNUzafLhrRmrr2LcIVJfkkFgANPO9bNzn1Rv7mzmorOf1nxIrR11Lv3zUDsJNWN4L+vw8o72mjbVbmtKL+oc5rreX9t/mGJm+sosRIzkBSI+u1IGnk/L8V1dKjct/9OmpELV2oP6a1+0GpNdXByiRDsaA2A5B6HgnnfhjLV6v9WnZDcj3rpTE5u1kUzWQuaqEsgzXlkNxpT7R8p8eQN4Xo27Pu3F3AejFjOZ5SvNDj9/ntdqSnRmsHRhvypp+fhsvFiD16zEvgtxR1QD6ZC7DT3yhPlX67rxqZR/StvMDHsO7WrkA/PMDX+NUDoUFrNYp0rmmPz6GEHSHAQEg9th87stPo0vF9vydJrMOAAAm/8RTAwCYbda/+1vjv1m66bpIBDoCzQwB6k1rLAD61rP2f/DdAL0pnOnTqOGtAf3j9pAS64FuzzZVM6zLl8kcNV4LtJq3Y/2kkH42pcNTUIUxbWUp7WpkuoSdY29KucIf+AtS2AEyIhCGZujMqqp9oNIG0jj+zYVpfdOkaY1hnSsC9KZsTtRzu6eUqKlkd0WSsKVSG/Gzwv5mSShrjHrrlF3aMh2sjTbdxdaXtGuFNUOrOq2rPj2Tz6/+dnT56HK9zYM6padO5EOXyfLQdH7aNQnDiMUoSHoPM126tpePlSXLoAIdrLX0+4SocvGksrSyfbS5vYr4+IviS8LyiEJZc3dlLP3yyaOKZNyPWVkMUOuVdMuK07gldD6XNpYyOUbS6cSn9mCN9pkSWlI08VswoH3OtzJiXUX5MSvwawXd9iZ/1K0sDCNPllU8R4bLY4BD2UtfVvMYdf7oX72rzdb0l5z7S6E93mwJ83rMSuxcne33TPWXno1yF0Y/sTlqdBGD4UWgZYzk/upgskrV+ulOsVppVDeFpZagajhXHL0S0qzMvGi/qK3C2K4kGY6TTaq3N4RPWZjKuhcZ9a3WQKuV36pT16eM9Luq+0iqerfWuZtmd+XWXRGjPF/6S17ly6ri9ZW9wxUhajm2FveXea8JUlZo+Uf5qpGEAjaDCXWUwQv5KEc7UmK9FrYt2Xfux7NSSmdby7FVlEJIQsRSbaMMn59tJ8cyqci2kG2fJLJ1TELUOm2ijBUn2zaWXwIE4LMykuyRs20F4AACsT0KBIDGF4aKDgCuYD4RYXEFoQaeiMmK6ZB0ItlaZYJSU0c2lcPWNF1CYeJFCODHXxRF22yxdTEUGRJa4GA+pzYWyoua0CkQXG0tkJGZ5yNy9SLE+Im9qbEm5AlECWM8vYdgAbxq7RW9tJd6kQIgQ8eA2ojtdtk9VPtdriNVhxKjhNGyeaFYodbIC+Ph+VCjEyP42dzNR+jAIrIQppSoS585myhVN07cAoPln9d7C+TtAgAAAA==","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/icon_bundle.svg":{"data":"PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hhbmdlX2hpc3RvcnlfMjRweCI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fbGVmdF8yNHB4Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX3JpZ2h0XzI0cHgiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjbGVhcl8yNHB4Ij48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImNsb3NlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNvbnRlbnRfY29weV8yNHB4Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRhcmtfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsM2MtNC45NywwLTksNC4wMy05LDlzNC4wMyw5LDksOXM5LTQuMDMsOS05YzAtMC40Ni0wLjA0LTAuOTItMC4xLTEuMzZjLTAuOTgsMS4zNy0yLjU4LDIuMjYtNC40LDIuMjYgYy0yLjk4LDAtNS40LTIuNDItNS40LTUuNGMwLTEuODEsMC44OS0zLjQyLDIuMjYtNC40QzEyLjkyLDMuMDQsMTIuNDYsMywxMiwzTDEyLDN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZG9uZV8yNHB4Ij48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRyYWdfaW5kaWNhdG9yXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMSAxOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTIgMiAuOSAyIDJ6bS0yLThjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wLTZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDRjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImVkaXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXJyb3JfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX2xlc3NfMjRweCI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9tb3JlXzI0cHgiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZpbHRlcl9hbHRfMjRweCI+PGc+PHBhdGggZD0iTTAsMGgyNCBNMjQsMjRIMCIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik00LjI1LDUuNjFDNi4yNyw4LjIsMTAsMTMsMTAsMTN2NmMwLDAuNTUsMC40NSwxLDEsMWgyYzAuNTUsMCwxLTAuNDUsMS0xdi02YzAsMCwzLjcyLTQuOCw1Ljc0LTcuMzkgQzIwLjI1LDQuOTUsMTkuNzgsNCwxOC45NSw0SDUuMDRDNC4yMSw0LDMuNzQsNC45NSw0LjI1LDUuNjF6Ii8+PHBhdGggZD0iTTAsMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImZsYWdfMjRweCI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl9leGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImdldF9hcHBfMjRweCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJncm91cF93b3JrXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImhlbHBfb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJpbWFnZV9zZWFyY2hfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAxM3Y3SDRWNmg1LjAyYy4wNS0uNzEuMjItMS4zOC40OC0ySDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTVsLTItMnptLTEuNSA1aC0xMWwyLjc1LTMuNTMgMS45NiAyLjM2IDIuNzUtMy41NHptMi44LTkuMTFjLjQ0LS43LjctMS41MS43LTIuMzlDMjAgNC4wMSAxNy45OSAyIDE1LjUgMlMxMSA0LjAxIDExIDYuNXMyLjAxIDQuNSA0LjQ5IDQuNWMuODggMCAxLjctLjI2IDIuMzktLjdMMjEgMTMuNDIgMjIuNDIgMTIgMTkuMyA4Ljg5ek0xNS41IDlDMTQuMTIgOSAxMyA3Ljg4IDEzIDYuNVMxNC4xMiA0IDE1LjUgNCAxOCA1LjEyIDE4IDYuNSAxNi44OCA5IDE1LjUgOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJpbmZvX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNiw5VjRsMSwwYzAuNTUsMCwxLTAuNDUsMS0xdjBjMC0wLjU1LTAuNDUtMS0xLTFIN0M2LjQ1LDIsNiwyLjQ1LDYsM3YwIGMwLDAuNTUsMC40NSwxLDEsMWwxLDB2NWMwLDEuNjYtMS4zNCwzLTMsM2gwdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJoMEMxNy4zNCwxMiwxNiwxMC42NiwxNiw5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwX291dGxpbmVfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNCw0djVjMCwxLjEyLDAuMzcsMi4xNiwxLDNIOWMwLjY1LTAuODYsMS0xLjksMS0zVjRIMTQgTTE3LDJIN0M2LjQ1LDIsNiwyLjQ1LDYsM2MwLDAuNTUsMC40NSwxLDEsMWMwLDAsMCwwLDAsMGwxLDB2NSBjMCwxLjY2LTEuMzQsMy0zLDN2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmMwLDAsMCwwLDAsMGMtMS42NiwwLTMtMS4zNC0zLTNWNGwxLDBjMCwwLDAsMCwwLDBjMC41NSwwLDEtMC40NSwxLTEgQzE4LDIuNDUsMTcuNTUsMiwxNywyTDE3LDJ6Ii8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaWdodF9tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiw3Yy0yLjc2LDAtNSwyLjI0LTUsNXMyLjI0LDUsNSw1czUtMi4yNCw1LTVTMTQuNzYsNywxMiw3TDEyLDd6IE0yLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwIGMtMC41NSwwLTEsMC40NS0xLDFTMS40NSwxMywyLDEzeiBNMjAsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDBjLTAuNTUsMC0xLDAuNDUtMSwxUzE5LjQ1LDEzLDIwLDEzeiBNMTEsMnYyIGMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xVjJjMC0wLjU1LTAuNDUtMS0xLTFTMTEsMS40NSwxMSwyeiBNMTEsMjB2MmMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xdi0yYzAtMC41NS0wLjQ1LTEtMS0xIEMxMS40NSwxOSwxMSwxOS40NSwxMSwyMHogTTUuOTksNC41OGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxbDEuMDYsMS4wNiBjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBzMC4zOS0xLjAzLDAtMS40MUw1Ljk5LDQuNTh6IE0xOC4zNiwxNi45NWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxIGwxLjA2LDEuMDZjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFMMTguMzYsMTYuOTV6IE0xOS40Miw1Ljk5YzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxIGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEwxOS40Miw1Ljk5eiBNNy4wNSwxOC4zNiBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMNy4wNSwxOC4zNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGluZV93ZWlnaHRfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0IiB4PSIwIi8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik0zLDE3aDE4di0ySDNWMTd6IE0zLDIwaDE4di0xSDNWMjB6IE0zLDEzaDE4di0zSDNWMTN6IE0zLDR2NGgxOFY0SDN6Ii8+PC9nPjwvZz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibW9yZV92ZXJ0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibm90aWZpY2F0aW9uc19ub25lXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgMjJjMS4xIDAgMi0uOSAyLTJoLTRjMCAxLjEuOSAyIDIgMnptNi02di01YzAtMy4wNy0xLjYzLTUuNjQtNC41LTYuMzJWNGMwLS44My0uNjctMS41LTEuNS0xLjVzLTEuNS42Ny0xLjUgMS41di42OEM3LjY0IDUuMzYgNiA3LjkyIDYgMTF2NWwtMiAydjFoMTZ2LTFsLTItMnptLTIgMUg4di02YzAtMi40OCAxLjUxLTQuNSA0LTQuNXM0IDIuMDIgNCA0LjV2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJwYWxldHRlXzI0cHgiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icmVmcmVzaF8yNHB4Ij48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNldHRpbmdzXzI0cHgiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX2JhY2t1cF9yZXN0b3JlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX292ZXJzY2FuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InZpc2liaWxpdHlfb2ZmXzI0cHgiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJ3YXJuaW5nXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPjwvZGVmcz48L3N2Zz4K","headers":[["content-type","image/svg+xml; charset=utf-8"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/index.js?_file_hash=c9c20ad9":{"data":"dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIG12ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHksZ3ZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLF92ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHl2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2dmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMseHZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxidmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpYnZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pmd2ZShlLHl2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIHZ2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPV92ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP212ZSh4dmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBPZHQ9SCgobF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxDSSxoRyxNZHQsRWR0LFRkdCxUeCxDZHQsQWR0LFBkdCxJZHQsTGR0LGtkdCxSZHQsTmR0LERkdCxBSTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGdsb2JhbD09Im9iamVjdCI/Z2xvYmFsOnR5cGVvZiBzZWxmPT0ib2JqZWN0Ij9zZWxmOnR5cGVvZiB0aGlzPT0ib2JqZWN0Ij90aGlzOnt9O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKCJ0c2xpYiIsWyJleHBvcnRzIl0sZnVuY3Rpb24obil7ZShyKHQscihuKSkpfSk6dHlwZW9mIFBJPT0ib2JqZWN0IiYmdHlwZW9mIFBJLmV4cG9ydHM9PSJvYmplY3QiP2Uocih0LHIoUEkuZXhwb3J0cykpKTplKHIodCkpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbiE9PXQmJih0eXBlb2YgT2JqZWN0LmNyZWF0ZT09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk6bi5fX2VzTW9kdWxlPSEwKSxmdW5jdGlvbihvLGEpe3JldHVybiBuW29dPWk/aShvLGEpOmF9fX0pKGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihuLGkpe24uX19wcm90b19fPWl9fHxmdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYobltvXT1pW29dKX07bWR0PWZ1bmN0aW9uKG4saSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiImJmkhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7dChuLGkpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPW59bi5wcm90b3R5cGU9aT09PW51bGw/T2JqZWN0LmNyZWF0ZShpKTooby5wcm90b3R5cGU9aS5wcm90b3R5cGUsbmV3IG8pfSxnZHQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obil7Zm9yKHZhciBpLG89MSxhPWFyZ3VtZW50cy5sZW5ndGg7bzxhO28rKyl7aT1hcmd1bWVudHNbb107Zm9yKHZhciBzIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJihuW3NdPWlbc10pfXJldHVybiBufSxfZHQ9ZnVuY3Rpb24obixpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKSYmaS5pbmRleE9mKGEpPDAmJihvW2FdPW5bYV0pO2lmKG4hPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgcz0wLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtzPGEubGVuZ3RoO3MrKylpLmluZGV4T2YoYVtzXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG4sYVtzXSkmJihvW2Fbc11dPW5bYVtzXV0pO3JldHVybiBvfSx5ZHQ9ZnVuY3Rpb24obixpLG8sYSl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aCxsPXM8Mz9pOmE9PT1udWxsP2E9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOmEsYztpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKWw9UmVmbGVjdC5kZWNvcmF0ZShuLGksbyxhKTtlbHNlIGZvcih2YXIgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKShjPW5bdV0pJiYobD0oczwzP2MobCk6cz4zP2MoaSxvLGwpOmMoaSxvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLG8sbCksbH0sdmR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aShvLGEsbil9fSx4ZHQ9ZnVuY3Rpb24obixpKXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG4saSl9LGJkdD1mdW5jdGlvbihuLGksbyxhKXtmdW5jdGlvbiBzKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX1yZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUocCl7dHJ5e2YoYS5uZXh0KHApKX1jYXRjaChkKXtjKGQpfX1mdW5jdGlvbiBoKHApe3RyeXtmKGEudGhyb3cocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGYocCl7cC5kb25lP2wocC52YWx1ZSk6cyhwLnZhbHVlKS50aGVuKHUsaCl9ZigoYT1hLmFwcGx5KG4saXx8W10pKS5uZXh0KCkpfSl9LHdkdD1mdW5jdGlvbihuLGkpe3ZhciBvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihsWzBdJjEpdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119LGEscyxsLGM7cmV0dXJuIGM9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBoKFtmLHBdKX19ZnVuY3Rpb24gaChmKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAsZlswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9ZlswXSYyP3MucmV0dXJuOmZbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxmWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihmPVtmWzBdJjIsbC52YWx1ZV0pLGZbMF0pe2Nhc2UgMDpjYXNlIDE6bD1mO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpmWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1mWzFdLGY9WzBdO2NvbnRpbnVlO2Nhc2UgNzpmPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGw9by50cnlzLCEobD1sLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKGZbMF09PT02fHxmWzBdPT09Mikpe289MDtjb250aW51ZX1pZihmWzBdPT09MyYmKCFsfHxmWzFdPmxbMF0mJmZbMV08bFszXSkpe28ubGFiZWw9ZlsxXTticmVha31pZihmWzBdPT09NiYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1mO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2goZik7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfWY9aS5jYWxsKG4sbyl9Y2F0Y2gocCl7Zj1bNixwXSxzPTB9ZmluYWxseXthPWw9MH1pZihmWzBdJjUpdGhyb3cgZlsxXTtyZXR1cm57dmFsdWU6ZlswXT9mWzFdOnZvaWQgMCxkb25lOiEwfX19LFNkdD1mdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBuKW8hPT0iZGVmYXVsdCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmQUkoaSxuLG8pfSxBST1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pO3ZhciBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTsoIXN8fCgiZ2V0ImluIHM/IWkuX19lc01vZHVsZTpzLndyaXRhYmxlfHxzLmNvbmZpZ3VyYWJsZSkpJiYocz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaVtvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixhLHMpfTpmdW5jdGlvbihuLGksbyxhKXthPT09dm9pZCAwJiYoYT1vKSxuW2FdPWlbb119LENJPWZ1bmN0aW9uKG4pe3ZhciBpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixvPWkmJm5baV0sYT0wO2lmKG8pcmV0dXJuIG8uY2FsbChuKTtpZihuJiZ0eXBlb2Ygbi5sZW5ndGg9PSJudW1iZXIiKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmE+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2ErK10sZG9uZTohbn19fTt0aHJvdyBuZXcgVHlwZUVycm9yKGk/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSxoRz1mdW5jdGlvbihuLGkpe3ZhciBvPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gbjt2YXIgYT1vLmNhbGwobikscyxsPVtdLGM7dHJ5e2Zvcig7KGk9PT12b2lkIDB8fGktLSA+MCkmJiEocz1hLm5leHQoKSkuZG9uZTspbC5wdXNoKHMudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sTWR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW49bi5jb25jYXQoaEcoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG59LEVkdD1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKyluKz1hcmd1bWVudHNbaV0ubGVuZ3RoO2Zvcih2YXIgYT1BcnJheShuKSxzPTAsaT0wO2k8bztpKyspZm9yKHZhciBsPWFyZ3VtZW50c1tpXSxjPTAsdT1sLmxlbmd0aDtjPHU7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFRkdD1mdW5jdGlvbihuLGksbyl7aWYob3x8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBhPTAscz1pLmxlbmd0aCxsO2E8czthKyspKGx8fCEoYSBpbiBpKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpLDAsYSkpLGxbYV09aVthXSk7cmV0dXJuIG4uY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpKX0sVHg9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBUeD8odGhpcy52PW4sdGhpcyk6bmV3IFR4KG4pfSxDZHQ9ZnVuY3Rpb24obixpLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYT1vLmFwcGx5KG4saXx8W10pLHMsbD1bXTtyZXR1cm4gcz17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxzO2Z1bmN0aW9uIGMoZyl7YVtnXSYmKHNbZ109ZnVuY3Rpb24oXyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHkseCl7bC5wdXNoKFtnLF8seSx4XSk+MXx8dShnLF8pfSl9KX1mdW5jdGlvbiB1KGcsXyl7dHJ5e2goYVtnXShfKSl9Y2F0Y2goeSl7ZChsWzBdWzNdLHkpfX1mdW5jdGlvbiBoKGcpe2cudmFsdWUgaW5zdGFuY2VvZiBUeD9Qcm9taXNlLnJlc29sdmUoZy52YWx1ZS52KS50aGVuKGYscCk6ZChsWzBdWzJdLGcpfWZ1bmN0aW9uIGYoZyl7dSgibmV4dCIsZyl9ZnVuY3Rpb24gcChnKXt1KCJ0aHJvdyIsZyl9ZnVuY3Rpb24gZChnLF8pe2coXyksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxBZHQ9ZnVuY3Rpb24obil7dmFyIGksbztyZXR1cm4gaT17fSxhKCJuZXh0IiksYSgidGhyb3ciLGZ1bmN0aW9uKHMpe3Rocm93IHN9KSxhKCJyZXR1cm4iKSxpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKHMsbCl7aVtzXT1uW3NdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6VHgobltzXShjKSksZG9uZTpzPT09InJldHVybiJ9Omw/bChjKTpjfTpsfX0sUGR0PWZ1bmN0aW9uKG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxvO3JldHVybiBpP2kuY2FsbChuKToobj10eXBlb2YgQ0k9PSJmdW5jdGlvbiI/Q0kobik6bltTeW1ib2wuaXRlcmF0b3JdKCksbz17fSxhKCJuZXh0IiksYSgidGhyb3ciKSxhKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBhKGwpe29bbF09bltsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsaCl7Yz1uW2xdKGMpLHModSxoLGMuZG9uZSxjLnZhbHVlKX0pfX1mdW5jdGlvbiBzKGwsYyx1LGgpe1Byb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKGYpe2woe3ZhbHVlOmYsZG9uZTp1fSl9LGMpfX0sSWR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwicmF3Iix7dmFsdWU6aX0pOm4ucmF3PWksbn07dmFyIHI9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppfSl9OmZ1bmN0aW9uKG4saSl7bi5kZWZhdWx0PWl9O0xkdD1mdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIGk9e307aWYobiE9bnVsbClmb3IodmFyIG8gaW4gbilvIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmQUkoaSxuLG8pO3JldHVybiByKGksbiksaX0sa2R0PWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX0sUmR0PWZ1bmN0aW9uKG4saSxvLGEpe2lmKG89PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhYTohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIG89PT0ibSI/YTpvPT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6aS5nZXQobil9LE5kdD1mdW5jdGlvbihuLGksbyxhLHMpe2lmKGE9PT0ibSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7aWYoYT09PSJhIiYmIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyIik7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiI/biE9PWl8fCFzOiFpLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBhPT09ImEiP3MuY2FsbChuLG8pOnM/cy52YWx1ZT1vOmkuc2V0KG4sbyksb30sRGR0PWZ1bmN0aW9uKG4saSl7aWYoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IiYmdHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/aT09PW46bi5oYXMoaSl9LGUoIl9fZXh0ZW5kcyIsbWR0KSxlKCJfX2Fzc2lnbiIsZ2R0KSxlKCJfX3Jlc3QiLF9kdCksZSgiX19kZWNvcmF0ZSIseWR0KSxlKCJfX3BhcmFtIix2ZHQpLGUoIl9fbWV0YWRhdGEiLHhkdCksZSgiX19hd2FpdGVyIixiZHQpLGUoIl9fZ2VuZXJhdG9yIix3ZHQpLGUoIl9fZXhwb3J0U3RhciIsU2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixNZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixFZHQpLGUoIl9fc3ByZWFkQXJyYXkiLFRkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLENkdCksZSgiX19hc3luY0RlbGVnYXRvciIsQWR0KSxlKCJfX2FzeW5jVmFsdWVzIixQZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixJZHQpLGUoIl9faW1wb3J0U3RhciIsTGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLGtkdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsUmR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixOZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRGR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxqbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxYbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixmcGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixwcGU9IlxcdTIwMDAtXFx1MjA2ZiIsZHBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2ZwZStwcGUrZHBlLGVxPSJbJ1x1MjAxOV0iLG1wZT0iWyIrWG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVmwrIl0iLGpodD0iXFxkKyIsZ3BlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrWG4rV2h0K2podCtZaStobStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLF9wZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iK1huKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix5cGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1fcGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsdnBlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIix4cGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsYnBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K3ZwZSx3cGU9Iig/OiIrW2dwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsU3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLG1wZV0uam9pbigifCIpKyIpIixNcGU9UmVnRXhwKGVxLCJnIiksRXBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK1NwZStuZnQsImciKSxUcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIseXBlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LGJwZSx4cGUsamh0LHdwZV0uam9pbigifCIpLCJnIiksQ3BlPVJlZ0V4cCgiWyIrWmh0K1huK1ZsK0dodCsiXSIpLEFwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxQcGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxJcGU9LTEsa249e307a25bVHRdPWtuW2JlXT1rbltudF09a25bQ3RdPWtuW1d0XT1rbltmZV09a25bYXRdPWtuW3NlXT1rbltRdF09ITAsa25bYnRdPWtuW010XT1rblskdF09a25bS3RdPWtuW2hlXT1rbltfdF09a25bWF09a25bZXRdPWtuW3FdPWtuW3B0XT1rblt3dF09a25bZWVdPWtuW0xlXT1rblthcl09a25bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgTHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sa3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxScGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LE5wZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxEcGU9cGFyc2VGbG9hdCxPcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCx6cGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fHpwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gRnBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBCcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gSHBlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBWcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFVwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBxcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/ZWRlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIEdwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gV3BlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBZcGUodXQsQXQpe3JldHVybiAkbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gJG4oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24ganBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgWHBlPWZxKExwZSksJHBlPWZxKGtwZSk7ZnVuY3Rpb24gS3BlKHV0KXtyZXR1cm4iXFwiK05wZVt1dF19ZnVuY3Rpb24gWnBlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBDcGUudGVzdCh1dCl9ZnVuY3Rpb24gSnBlKHV0KXtyZXR1cm4gQXBlLnRlc3QodXQpfWZ1bmN0aW9uIFFwZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIHRkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gZWRlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiByZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP2lkZSh1dCk6VnBlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9vZGUodXQpOlVwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIG5kZT1mcShScGUpO2Z1bmN0aW9uIGlkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gb2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiBhZGUodXQpe3JldHVybiB1dC5tYXRjaChUcGUpfHxbXX12YXIgc2RlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLFBwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxsZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUsY2RlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PWNkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSx1ZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PW14LnRvU3RyaW5nLGhkZT1ZNi5jYWxsKHZuKSxmZGU9Zm8uXyxwZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSxkZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsbWRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LGdkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxfZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUseWRlPUc2LmpvaW4sdmRlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLHhkZT1nZS5ub3csYmRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sd2RlPUc2LnJldmVyc2UsdnE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHhxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00sX3g9e30sU2RlPWFfKHZxKSxNZGU9YV8oVE0pLEVkZT1hXyh4cSksVGRlPWFfKGd4KSxDZGU9YV8oQ00pLHJJPWdtP2dtLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgobkkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBBZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFBkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBJZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVVtZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBMZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIGtkZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiBSZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIE5kZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gRGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPUxkZSxlXy5wcm90b3R5cGUuZGVsZXRlPWtkZSxlXy5wcm90b3R5cGUuZ2V0PVJkZSxlXy5wcm90b3R5cGUuaGFzPU5kZSxlXy5wcm90b3R5cGUuc2V0PURkZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBPZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHpkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBCZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gSGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPU9kZSxpcC5wcm90b3R5cGUuZGVsZXRlPXpkZSxpcC5wcm90b3R5cGUuZ2V0PUZkZSxpcC5wcm90b3R5cGUuaGFzPUJkZSxpcC5wcm90b3R5cGUuc2V0PUhkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBWZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gVWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gcWRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBHZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uIFdkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPVZkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVVkZSxvcC5wcm90b3R5cGUuZ2V0PXFkZSxvcC5wcm90b3R5cGUuaGFzPUdkZSxvcC5wcm90b3R5cGUuc2V0PVdkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIFlkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIGpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1ZZGUscl8ucHJvdG90eXBlLmhhcz1qZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBYZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiAkZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gS2RlKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBaZGUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIEpkZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1YZGUsZXUucHJvdG90eXBlLmRlbGV0ZT0kZGUsZXUucHJvdG90eXBlLmdldD1LZGUsZXUucHJvdG90eXBlLmhhcz1aZGUsZXUucHJvdG90eXBlLnNldD1KZGU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsbGRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gUWRlKG0sdil7cmV0dXJuIF9JKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIHRtZShtKXtyZXR1cm4gX0kocHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIGVtZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gcm1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1HbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/Um1lKG0scm1lKEosbSkpOmttZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPVdtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIG5tZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj0kbih2LFdzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBpbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gb21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1qbWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9WbWUobSk6dGdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiBhbWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIHNtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGxtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PSRuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBjbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJkxhKG0pPT1idH1mdW5jdGlvbiB1bWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gaG1lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpmbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBmbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6Qm1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxIbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBwbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8JG1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP3BkZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIGdtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFrbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiB2ZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIF9tZShtKXtpZighZWkobSkpcmV0dXJuIFFtZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXltZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24geW1lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PSRuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PSRuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gV3BlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gTG1lKFksSixUKX0pfWZ1bmN0aW9uIHZtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiB4bWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP0dwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9JG4obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBibWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiB3bWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gU21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIF9JKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19OmdzLE1tZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIEVtZShtKXtyZXR1cm4gX0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBUbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LGdzLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuICRuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOnptZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIENtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9ZGRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBBbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBQbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gSW1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIExtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBrbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiBSbWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9GcGU6ZW1lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gTm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoTXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gRG1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1qcGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgYmk9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPWVnZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gY21lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9JG4odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBPbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSxibWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIHptZT1neCYmMS9xNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP3RkZSh2KTpZcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJkptZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPU5tZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPURtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1PbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gRm1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gQm1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEhtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBYbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPVpwZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFZtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1MYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgU2RlOnJldHVybiBoZTtjYXNlIE1kZTpyZXR1cm4gcTtjYXNlIEVkZTpyZXR1cm4ga3Q7Y2FzZSBUZGU6cmV0dXJuIExlO2Nhc2UgQ2RlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gVW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gcW1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gR21lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoSzYobSkpOnt9fWZ1bmN0aW9uIFdtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4gQW1lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBQbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gSW1lKG0pfX1mdW5jdGlvbiBZbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIGptZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiAkbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciBLbWU9VzY/dXA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIFptZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiBKbWUobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBRbWUobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIHRnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIGVnZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPWdkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoTW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sWW1lKE4scmdlKHFtZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj14ZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9Wm1lKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIHJnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gbmdlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBpZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIG9nZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciBhZ2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLHNnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksbGdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIGNnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiB1Z2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gaGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gcGdlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxvbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIGRnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiBtZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiBnZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBfZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24geWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciB2Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JG4obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLHhnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPSRuKG0sT3EpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxiZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD0kbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gd2dlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6eWRlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gU2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P3JkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gTWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBFZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBUZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gQ2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIEFnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLCRuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFBnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206d2RlLmNhbGwobSl9ZnVuY3Rpb24gSWdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIExnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIGtnZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiBSZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gTmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gRGdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIE9nZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiB6Z2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBGZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gQmdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gSGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFZnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBxZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgR2dlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEseGksITApKX0pLFdnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4geGkodikmJih2PWUpLHltKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxZZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIGpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gWGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gJGdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiAkbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6JG4oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyIEtnZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksWmdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShmbShtLHhpKSl9KSxKZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShmbShtLHhpKSxrZSh2LDIpKX0pLFFnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEoZm0obSx4aSksZSx2KX0pLHQwZT1ucihacSk7ZnVuY3Rpb24gZTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gcjBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gaTBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBvMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gYTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBzMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gbDBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gYzBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gdTBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBoMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBmMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIHAwZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiBkMGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDppbWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIG0wZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBnMGU9dXB0KExwdCksXzBlPXVwdChrcHQpO2Z1bmN0aW9uIHkwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIHYwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIHgwZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/QnBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBiMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiB3MGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciBTMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxNMGU9dUkoZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/JG46VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gRTBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgVDBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBDMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBBMGUobSx2LFQpe3ZhciBOPSRlKG0pP0hwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFAwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBJMGUobSl7dmFyIHY9JGUobSk/TGZ0OndtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBMMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/UWRlOlNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIGswZShtKXt2YXIgdj0kZShtKT90bWU6RW1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIFIwZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBNSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBOMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOlRtZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEQwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST1tZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIE8wZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChKcSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LGZwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQsZnA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiAkcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgejBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxGMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIEIwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxvcCksVH1iSS5DYWNoZT1vcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gSDBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVjBlPUNtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pPyRuKHZbMF0sV3Moa2UoKSkpOiRuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoUXEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxVMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gcTBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBHMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gVzBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBZMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIGowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBYMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uICQwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiBLMGUobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIFowZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIEowZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBRMGUobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgdF9lPWRJKEVxKSxlX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxyX2U9YWZ0P1dzKGFmdCk6dW1lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJmRzKG0pfWZ1bmN0aW9uIG5fZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZMYShtKT09S3R9dmFyIGJtPV9kZXx8dUcsaV9lPXNmdD9XcyhzZnQpOmhtZTtmdW5jdGlvbiBvX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIGFfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBsX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBjX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6cG1lO2Z1bmN0aW9uIHVfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBoX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZl9lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIHBfZShtKXtpZihLbWUobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24gZF9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiBtX2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PWhkZX12YXIgZUc9Y2Z0P1dzKGNmdCk6ZG1lO2Z1bmN0aW9uIGdfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOm1tZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6Z21lO2Z1bmN0aW9uIF9fZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gdl9lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PUl0fXZhciB4X2U9ZEkoUHEpLGJfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBNSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIFFwZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxqbi50ZXN0KG0pP09wZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiB3X2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciBTX2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLEVJPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLE1fZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxFX2U9bHAod3EpO2Z1bmN0aW9uIFRfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIENfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxBX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBQX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gSV9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIExfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBrX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIFJfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIE5fZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIERfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBPX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxtcyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gel9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsYW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LHNtZSl9dmFyIEZfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKGdzKSksQl9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxIX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpfbWUobSl9ZnVuY3Rpb24gVl9lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBVX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBxX2U9dngoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLEdfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCxGbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gV19lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIFlfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OnZtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD0kbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIGpfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gWF9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiAkX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gS19lKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPXVwKFkpP3l4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIFpfZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIFFfZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gdHllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sbXMobSkpfWZ1bmN0aW9uIGV5ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLGxtZShtLHYsVCl9ZnVuY3Rpb24gbnllKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rRHBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGl5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLFhwZSkucmVwbGFjZShFcGUsIiIpfWZ1bmN0aW9uIG95ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiBheWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sJHBlKTptfWZ1bmN0aW9uIHN5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGx5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxjeWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksdXllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBoeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBmeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIHB5ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24gZHllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLGJkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiBteWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24gZ3llKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgX3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHl5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgdnllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24geHllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBieWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK0lwZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCxLcGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gd3llKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBNeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBFeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gVHllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gQ3llKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIEF5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxuZGUpOm19dmFyIFB5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP0pwZShtKT9hZGUobSk6cXBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksSXllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gTHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj8kbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24ga3llKG0pe3JldHVybiBubWUoWWwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIFJ5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIE55ZT1ocHQoKSxEeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24genllKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciBGeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxCeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEh5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89ZmRlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFZ5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgVXllPUJxKCRuKSxxeWU9QnEoZmZ0KSxHeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOnhtZShtKX1mdW5jdGlvbiBXeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIFl5ZT1wcHQoKSxqeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gWHllKCl7cmV0dXJue319ZnVuY3Rpb24gJHllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gS3llKCl7cmV0dXJuITB9ZnVuY3Rpb24gWnllKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gSnllKG0pe3JldHVybiAkZShtKT8kbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gUXllKG0pe3ZhciB2PSsrdWRlO3JldHVybiBvbihtKSt2fXZhciB0dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxldmU9SHEoImNlaWwiKSxydmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxudmU9SHEoImZsb29yIik7ZnVuY3Rpb24gaXZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGdzLEVxKTplfWZ1bmN0aW9uIG92ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gYXZlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gc3ZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGx2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxncyxQcSk6ZX1mdW5jdGlvbiBjdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciB1dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxodmU9SHEoInJvdW5kIiksZnZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gcHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGdzKTowfWZ1bmN0aW9uIGR2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9TzBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1TX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPU1fZSxHLmF0PUVfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1JeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1YMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1uZ2UsRy5jb21wYWN0PWlnZSxHLmNvbmNhdD1vZ2UsRy5jb25kPUx5ZSxHLmNvbmZvcm1zPWt5ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1wMGUsRy5jcmVhdGU9VF9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1DX2UsRy5kZWZhdWx0c0RlZXA9QV9lLEcuZGVmZXI9ejBlLEcuZGVsYXk9RjBlLEcuZGlmZmVyZW5jZT1hZ2UsRy5kaWZmZXJlbmNlQnk9c2dlLEcuZGlmZmVyZW5jZVdpdGg9bGdlLEcuZHJvcD1jZ2UsRy5kcm9wUmlnaHQ9dWdlLEcuZHJvcFJpZ2h0V2hpbGU9aGdlLEcuZHJvcFdoaWxlPWZnZSxHLmZpbGw9cGdlLEcuZmlsdGVyPW0wZSxHLmZsYXRNYXA9eTBlLEcuZmxhdE1hcERlZXA9djBlLEcuZmxhdE1hcERlcHRoPXgwZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9ZGdlLEcuZmxhdHRlbkRlcHRoPW1nZSxHLmZsaXA9QjBlLEcuZmxvdz1OeWUsRy5mbG93UmlnaHQ9RHllLEcuZnJvbVBhaXJzPWdnZSxHLmZ1bmN0aW9ucz1EX2UsRy5mdW5jdGlvbnNJbj1PX2UsRy5ncm91cEJ5PWIwZSxHLmluaXRpYWw9eWdlLEcuaW50ZXJzZWN0aW9uPXZnZSxHLmludGVyc2VjdGlvbkJ5PXhnZSxHLmludGVyc2VjdGlvbldpdGg9YmdlLEcuaW52ZXJ0PUZfZSxHLmludmVydEJ5PUJfZSxHLmludm9rZU1hcD1TMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PU0wZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9dkksRy5tYXBLZXlzPVZfZSxHLm1hcFZhbHVlcz1VX2UsRy5tYXRjaGVzPU95ZSxHLm1hdGNoZXNQcm9wZXJ0eT16eWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9cV9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1GeWUsRy5tZXRob2RPZj1CeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1WeWUsRy5vbWl0PUdfZSxHLm9taXRCeT1XX2UsRy5vbmNlPUgwZSxHLm9yZGVyQnk9RTBlLEcub3Zlcj1VeWUsRy5vdmVyQXJncz1WMGUsRy5vdmVyRXZlcnk9cXllLEcub3ZlclNvbWU9R3llLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249VDBlLEcucGljaz1ZX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj1XeWUsRy5wdWxsPUVnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PVRnZSxHLnB1bGxBbGxXaXRoPUNnZSxHLnB1bGxBdD1BZ2UsRy5yYW5nZT1ZeWUsRy5yYW5nZVJpZ2h0PWp5ZSxHLnJlYXJnPVUwZSxHLnJlamVjdD1QMGUsRy5yZW1vdmU9UGdlLEcucmVzdD1xMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1MMGUsRy5zZXQ9WF9lLEcuc2V0V2l0aD0kX2UsRy5zaHVmZmxlPWswZSxHLnNsaWNlPUlnZSxHLnNvcnRCeT1EMGUsRy5zb3J0ZWRVbmlxPXpnZSxHLnNvcnRlZFVuaXFCeT1GZ2UsRy5zcGxpdD15eWUsRy5zcHJlYWQ9RzBlLEcudGFpbD1CZ2UsRy50YWtlPUhnZSxHLnRha2VSaWdodD1WZ2UsRy50YWtlUmlnaHRXaGlsZT1VZ2UsRy50YWtlV2hpbGU9cWdlLEcudGFwPWkwZSxHLnRocm90dGxlPVcwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1KeWUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT1LX2UsRy51bmFyeT1ZMGUsRy51bmlvbj1HZ2UsRy51bmlvbkJ5PVdnZSxHLnVuaW9uV2l0aD1ZZ2UsRy51bmlxPWpnZSxHLnVuaXFCeT1YZ2UsRy51bmlxV2l0aD0kZ2UsRy51bnNldD1aX2UsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9Sl9lLEcudXBkYXRlV2l0aD1RX2UsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj10eWUsRy53aXRob3V0PUtnZSxHLndvcmRzPXNkdCxHLndyYXA9ajBlLEcueG9yPVpnZSxHLnhvckJ5PUpnZSxHLnhvcldpdGg9UWdlLEcuemlwPXQwZSxHLnppcE9iamVjdD1lMGUsRy56aXBPYmplY3REZWVwPXIwZSxHLnppcFdpdGg9bjBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD10dmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1peWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9ZXZlLEcuY2xhbXA9ZXllLEcuY2xvbmU9JDBlLEcuY2xvbmVEZWVwPVowZSxHLmNsb25lRGVlcFdpdGg9SjBlLEcuY2xvbmVXaXRoPUswZSxHLmNvbmZvcm1zVG89UTBlLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz1SeWUsRy5kaXZpZGU9cnZlLEcuZW5kc1dpdGg9b3llLEcuZXE9cnUsRy5lc2NhcGU9YXllLEcuZXNjYXBlUmVnRXhwPXN5ZSxHLmV2ZXJ5PWQwZSxHLmZpbmQ9ZzBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9UF9lLEcuZmluZExhc3Q9XzBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1JX2UsRy5mbG9vcj1udmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1MX2UsRy5mb3JJblJpZ2h0PWtfZSxHLmZvck93bj1SX2UsRy5mb3JPd25SaWdodD1OX2UsRy5nZXQ9ckcsRy5ndD10X2UsRy5ndGU9ZV9lLEcuaGFzPXpfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPXcwZSxHLmluZGV4T2Y9X2dlLEcuaW5SYW5nZT1yeWUsRy5pbnZva2U9SF9lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1yX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPW5fZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPWlfZSxHLmlzRWxlbWVudD1vX2UsRy5pc0VtcHR5PWFfZSxHLmlzRXF1YWw9c19lLEcuaXNFcXVhbFdpdGg9bF9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPWNfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPXVfZSxHLmlzTWF0Y2hXaXRoPWhfZSxHLmlzTmFOPWZfZSxHLmlzTmF0aXZlPXBfZSxHLmlzTmlsPW1fZSxHLmlzTnVsbD1kX2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9Z19lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPV9fZSxHLmlzV2Vha01hcD15X2UsRy5pc1dlYWtTZXQ9dl9lLEcuam9pbj13Z2UsRy5rZWJhYkNhc2U9bHllLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPVNnZSxHLmxvd2VyQ2FzZT1jeWUsRy5sb3dlckZpcnN0PXV5ZSxHLmx0PXhfZSxHLmx0ZT1iX2UsRy5tYXg9aXZlLEcubWF4Qnk9b3ZlLEcubWVhbj1hdmUsRy5tZWFuQnk9c3ZlLEcubWluPWx2ZSxHLm1pbkJ5PWN2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9WHllLEcuc3R1YlN0cmluZz0keWUsRy5zdHViVHJ1ZT1LeWUsRy5tdWx0aXBseT11dmUsRy5udGg9TWdlLEcubm9Db25mbGljdD1IeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPWh5ZSxHLnBhZEVuZD1meWUsRy5wYWRTdGFydD1weWUsRy5wYXJzZUludD1keWUsRy5yYW5kb209bnllLEcucmVkdWNlPUMwZSxHLnJlZHVjZVJpZ2h0PUEwZSxHLnJlcGVhdD1teWUsRy5yZXBsYWNlPWd5ZSxHLnJlc3VsdD1qX2UsRy5yb3VuZD1odmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9STBlLEcuc2l6ZT1SMGUsRy5zbmFrZUNhc2U9X3llLEcuc29tZT1OMGUsRy5zb3J0ZWRJbmRleD1MZ2UsRy5zb3J0ZWRJbmRleEJ5PWtnZSxHLnNvcnRlZEluZGV4T2Y9UmdlLEcuc29ydGVkTGFzdEluZGV4PU5nZSxHLnNvcnRlZExhc3RJbmRleEJ5PURnZSxHLnNvcnRlZExhc3RJbmRleE9mPU9nZSxHLnN0YXJ0Q2FzZT12eWUsRy5zdGFydHNXaXRoPXh5ZSxHLnN1YnRyYWN0PWZ2ZSxHLnN1bT1wdmUsRy5zdW1CeT1kdmUsRy50ZW1wbGF0ZT1ieWUsRy50aW1lcz1aeWUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9d3llLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPXdfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1TeWUsRy50cmltPU15ZSxHLnRyaW1FbmQ9RXllLEcudHJpbVN0YXJ0PVR5ZSxHLnRydW5jYXRlPUN5ZSxHLnVuZXNjYXBlPUF5ZSxHLnVuaXF1ZUlkPVF5ZSxHLnVwcGVyQ2FzZT1QeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPUFkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1QZGUsZ3IucHJvdG90eXBlLnZhbHVlPUlkZSxHLnByb3RvdHlwZS5hdD1vMGUsRy5wcm90b3R5cGUuY2hhaW49YTBlLEcucHJvdG90eXBlLmNvbW1pdD1zMGUsRy5wcm90b3R5cGUubmV4dD1sMGUsRy5wcm90b3R5cGUucGxhbnQ9dTBlLEcucHJvdG90eXBlLnJldmVyc2U9aDBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWYwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPWMwZSksR30sbW09c2RlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sYXEuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gcF90KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGYyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHAyZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGZfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09aDJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgaDJlLHZzLGRfdD1NKCgpPT57aDJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1wX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWYyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXAyZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Zl90KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Zl90KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9cF90fSk7dmFyIGttPU0oKCk9PntkX3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBTdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIE12dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgRXZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsVHZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSpBdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKkF2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoQ3Z0KmUpKS8yfXZhciBDdnQsQXZ0LFB2dD1NKCgpPT57Q3Z0PU1hdGguUEksQXZ0PUN2dC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgSXZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgTHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTxhU2U/REwqKGUtPW9TZSkqZStzU2U6ZTxjU2U/REwqKGUtPWxTZSkqZSt1U2U6REwqKGUtPWhTZSkqZStmU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBrWSxvU2UsYVNlLHNTZSxsU2UsY1NlLHVTZSxoU2UsZlNlLERMLGt2dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LG9TZT02LzExLGFTZT04LzExLHNTZT0zLzQsbFNlPTkvMTEsY1NlPTEwLzExLHVTZT0xNS8xNixoU2U9MjEvMjIsZlNlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsUnZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLE52dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIER2dD17fTtLcyhEdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIElfPU0oKCk9PntTdnQoKTtNdnQoKTtFdnQoKTtUdnQoKTtQdnQoKTtJdnQoKTtMdnQoKTtrdnQoKTtSdnQoKTtOdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uICR2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLGpMPU0oKCk9PntlbD0iJCI7WUwucHJvdG90eXBlPSR2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9JHZ0fSk7ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxJU2UsTFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxLdnQsWnZ0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCxLdnQsWnZ0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIElTZSgpe3JldHVybnt9fWZ1bmN0aW9uIExTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIEt2dCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIFp2dChlLHQscil7ZS5zZXQodCxyKX12YXIgUXZ0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gdDF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sZTF0LHIxdD1NKCgpPT57akwoKTtrXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPXQxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTtlMXQ9dDF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBuMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGkxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIG8xdD1NKCgpPT57fSk7ZnVuY3Rpb24gYTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57UXZ0KCk7cjF0KCk7akwoKTtuMXQoKTtvMXQoKTtzMXQoKX0pO2Z1bmN0aW9uIG0xdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEhTZShlLHQpe3ZhciByPW0xdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIGQxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gVlNlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFVTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6VlNlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/SFNlKF8sZik6bTF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLHAxdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09cDF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1VTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBwMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e3AxdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBSXyxDYixnMXQsXzF0LHkxdCx2MXQseDF0LGIxdCx3MXQ9TSgoKT0+e3RrKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSxnMXQ9Ul8ucGFyc2VSb3dzLF8xdD1SXy5mb3JtYXQseTF0PVJfLmZvcm1hdEJvZHksdjF0PVJfLmZvcm1hdFJvd3MseDF0PVJfLmZvcm1hdFJvdyxiMXQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsUzF0LE0xdCxFMXQsVDF0LEMxdCxBMXQsUDF0PU0oKCk9Pnt0aygpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2UsUzF0PU5fLnBhcnNlUm93cyxNMXQ9Tl8uZm9ybWF0LEUxdD1OXy5mb3JtYXRCb2R5LFQxdD1OXy5mb3JtYXRSb3dzLEMxdD1OXy5mb3JtYXRSb3csQTF0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKXFTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBxU2UsSTF0PU0oKCk9PntxU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7dzF0KCk7UDF0KCk7STF0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT5kNWUsX19hc3luY0RlbGVnYXRvcjooKT0+TTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PlM1ZSxfX2FzeW5jVmFsdWVzOigpPT5FNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT52NWUsX19kZWNvcmF0ZTooKT0+ZzVlLF9fZXhwb3J0U3RhcjooKT0+YjVlLF9fZXh0ZW5kczooKT0+cDVlLF9fZ2VuZXJhdG9yOigpPT54NWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PlQ1ZSxfX21ldGFkYXRhOigpPT55NWUsX19wYXJhbTooKT0+XzVlLF9fcmVhZDooKT0+UTN0LF9fcmVzdDooKT0+bTVlLF9fc3ByZWFkOigpPT53NWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gcDVlKGUsdCl7ZjVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gbTVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIGc1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIF81ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB5NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gdjVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIHg1ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBiNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gUTN0KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIHc1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KFEzdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gUzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBNNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gRTVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIFQ1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGY1ZSxkNWUsZGU9TSgoKT0+e2Y1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07ZDVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgdE10LGVNdD1NKCgpPT57dE10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1DNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBDNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57cHkoKX0pO3ZhciByTXQseCQsbk10LHNSLGIkPU0oKCk9PntweSgpO3YkKCk7ck10PWFSKF9jKSx4JD1yTXQucmlnaHQsbk10PXJNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gaU10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9NdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciBhTXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBzTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGxNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgY010LHVNdCxoTXQsQyQ9TSgoKT0+e2NNdD1BcnJheS5wcm90b3R5cGUsdU10PWNNdC5zbGljZSxoTXQ9Y010Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBwTXQoZSl7cmV0dXJuIGV9dmFyIGRNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiBnTXQoKXt2YXIgZT1wTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUodU10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIF9NdD1NKCgpPT57QyQoKTtiJCgpO2ZNdCgpO1QkKCk7ZE10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB5TXQoZSx0LHIpe3JldHVybiBlPWhNdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgdk10PU0oKCk9PntDJCgpO3B5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24geE10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgYk10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gd010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBTTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1NdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBFTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBUTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIENNdD1NKCgpPT57cHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBBTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIElNdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgTE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBrTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgUk10PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gTk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIERNdD1NKCgpPT57fSk7ZnVuY3Rpb24gT010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciB6TXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxBNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gQTVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBGTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgQk10PU0oKCk9PntPJCgpfSk7dmFyIEhNdD1NKCgpPT57YiQoKTtweSgpO3YkKCk7YU10KCk7bE10KCk7RSQoKTtUJCgpO19NdCgpO3ZNdCgpO2JNdCgpO04kKCk7U010KCk7RU10KCk7Q010KCk7UE10KCk7RCQoKTtTJCgpO0xNdCgpO2RSKCk7QSQoKTtSTXQoKTtETXQoKTt6TXQoKTtSJCgpO08kKCk7TSQoKTtCTXQoKX0pO3ZhciBfUixWTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFVNdChlKXtyZXR1cm4gZX12YXIgcU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBQNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBrNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gUjVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UDVlOkk1ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6VU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP2s1ZTpMNWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLEdNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsR010KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKFI1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gV010KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBZTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIGpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gWE10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsR010LCRNdD1NKCgpPT57Vk10KCk7cU10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxHTXQ9MWUtNn0pO3ZhciBLTXQ9TSgoKT0+eyRNdCgpfSk7ZnVuY3Rpb24gSk10KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEQ1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIE81ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFpNdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTjVlLFc1LFFNdD1NKCgpPT57TjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1KTXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUQ1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPU81ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Wk10KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Wk10KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9Sk10fSk7dmFyIEYkPU0oKCk9PntRTXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gejVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBGNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/RjVlOno1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBCNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/QjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiB0RXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgZUV0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBINWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9INWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIG5FdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBvRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gYUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIHNFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGxFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVjVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gVTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9Y0V0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9Y0V0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gdUV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9VNWU6VjVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9c0V0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGNFdCxoRXQ9TSgoKT0+e3d1KCk7VyQoKTtsRXQoKTtjRXQ9IiQifSk7ZnVuY3Rpb24gZkV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgcEV0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiBkRXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIG1FdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBfRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB2RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhFdChlKXtlfHwoZT1xNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIHE1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgYkV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gd0V0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBFRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIENFdD1NKCgpPT57fSk7ZnVuY3Rpb24gQUV0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUEV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJRXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFc1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFk1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBYNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uICQ1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBORXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VzVlOkc1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsPyQ1ZTpYNWU6ci5sb2NhbD9qNWU6WTVlKShyLHQpKX12YXIgREV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gSzVlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBPRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0s1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9KNWU6WjVlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBRNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHRUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gZVRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHpFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1E1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9lVGU6dFRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEhFdChlKX1mdW5jdGlvbiBIRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUJFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFZFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFVFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHJUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtWRXQodGhpcyxlKX19ZnVuY3Rpb24gblRlKGUpe3JldHVybiBmdW5jdGlvbigpe1VFdCh0aGlzLGUpfX1mdW5jdGlvbiBpVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VkV0OlVFdCkodGhpcyxlKX19ZnVuY3Rpb24gcUV0KGUsdCl7dmFyIHI9QkV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2lUZTp0P3JUZTpuVGUpKHIsdCkpfXZhciBHRXQ9TSgoKT0+e0hFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBvVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gV0V0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP29UZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/c1RlOmFUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBZRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiB1VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBqRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/bFRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj91VGU6Y1RlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBYRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGhUZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiAkRXQoKXtyZXR1cm4gdGhpcy5lYWNoKGhUZSl9dmFyIEtFdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlRlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gWkV0KCl7cmV0dXJuIHRoaXMuZWFjaChmVGUpfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFFFdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciB0NXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBwVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBlNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9wVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIHI1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24gZFRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbjV0KCl7cmV0dXJuIHRoaXMuZWFjaChkVGUpfXZhciBpNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gZ1RlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBvNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/Z1RlOm1UZSl9dmFyIGE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gczV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgbDV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfVGUoZSx0LHIpe3JldHVybiBlPWg1dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBoNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24geVRlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiB2VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24geFRlKGUsdCxyKXt2YXIgbj11NXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9fVGU6aDV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGY1dChlLHQscil7dmFyIG49eVRlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD94VGU6dlRlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciB1NXQsd3IsYzV0LEFSPU0oKCk9Pnt1NXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoYzV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIGM1dHx8KHU1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBwNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGJUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwNXQodGhpcyxlLHQpfX1mdW5jdGlvbiB3VGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcDV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGQ1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3dUZTpiVGUpKGUsdCkpfXZhciBtNXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBnNXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxVcCx3dT1NKCgpPT57ZUV0KCk7bkV0KCk7b0V0KCk7aEV0KCk7VyQoKTtwRXQoKTttRXQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTtqJCgpO0ZFdCgpO0dFdCgpO1lFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO0FSKCk7bTV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT1nNXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6dEV0LHNlbGVjdEFsbDpyRXQsZmlsdGVyOmlFdCxkYXRhOnVFdCxlbnRlcjphRXQsZXhpdDpmRXQsam9pbjpkRXQsbWVyZ2U6Z0V0LG9yZGVyOnlFdCxzb3J0OnhFdCxjYWxsOndFdCxub2RlczpNRXQsbm9kZTpURXQsc2l6ZTpBRXQsZW1wdHk6SUV0LGVhY2g6a0V0LGF0dHI6TkV0LHN0eWxlOk9FdCxwcm9wZXJ0eTp6RXQsY2xhc3NlZDpxRXQsdGV4dDpXRXQsaHRtbDpqRXQscmFpc2U6JEV0LGxvd2VyOlpFdCxhcHBlbmQ6UUV0LGluc2VydDplNXQscmVtb3ZlOm41dCxjbG9uZTpvNXQsZGF0dW06czV0LG9uOmY1dCxkaXNwYXRjaDpkNXR9O1VwPWc1dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBfNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgdjV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24geDV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIGI1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9eTV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLHg1dChlLHQpfXZhciB3NXQ9TSgoKT0+e3Y1dCgpO2I1dCgpfSk7dmFyIEVzPU0oKCk9PntxJCgpO3c1dCgpO1NSKCk7XzV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBTNXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgTTV0PU0oKCk9PntFcygpO1M1dCgpfSk7dmFyIEU1dD1NKCgpPT57TTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIFQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gQTV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSVRlKCl7cmV0dXJuIE41dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBQNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1TVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9JNXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU1UZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9RVRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1UVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9Q1RlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUFUZS5leGVjKGUpKT9SNXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1QVGUuZXhlYyhlKSk/UjV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6QzV0Lmhhc093blByb3BlcnR5KGUpP0k1dChDNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEk1dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIExUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0xUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBMNXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gazV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFI1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIE41dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gRDV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ONXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LFpoLFNUZSxNVGUsRVRlLFRUZSxDVGUsQVRlLFBUZSxDNXQsTzV0PU0oKCk9PntUNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsU1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLE1UZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksRVRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxUVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxDVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCxLNV0rIlxcKSQiKSxBVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LFpoLFpoXSsiXFwpJCIpLFBUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LFpoLFpoLEs1XSsiXFwpJCIpLEM1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpBNXQsZm9ybWF0SGV4OkE1dCxmb3JtYXRIc2w6SVRlLGZvcm1hdFJnYjpQNXQsdG9TdHJpbmc6UDV0fSk7TFIoc2wsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Okw1dCxmb3JtYXRIZXg6TDV0LGZvcm1hdFJnYjprNXQsdG9TdHJpbmc6azV0fSkpO0xSKEtoLEQ1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e081dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiB6NXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBGNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBCNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBrVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBSVGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBINXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9SVGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2tUZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFY1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFU1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxOVGUsRFRlLG9LPU0oKCk9PntOUigpO25LKCk7QjV0KCk7VjV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1INXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7TlRlPVU1dCh6NXQpLERUZT1VNXQoRjV0KX0pO2Z1bmN0aW9uIHE1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciBXNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFk1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIGo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIFg1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyICQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiBLNXQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBaNXQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBPVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHpUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT96VGUobFswXS54KTpPVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTp0VDp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/WDV0Okc1dCh0KT9xNXQ6QXJyYXkuaXNBcnJheSh0KT9ZNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP0s1dDpVYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtqNXQoKTskNXQoKTtRNSgpO1o1dCgpO2xLKCk7aUsoKTtXNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKko1dCxza2V3WDpNYXRoLmF0YW4obCkqSjV0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSjV0LHpSLFE1dD1NKCgpPT57SjV0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gZVR0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0VHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9dFR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHJUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLHRUdCxGUixuVHQ9TSgoKT0+e1E1dCgpfSk7ZnVuY3Rpb24gaVR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxvVHQ9TSgoKT0+e1E1KCk7blR0KCk7aEs9aVR0KGVUdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1pVHQoclR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO29UdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KGxUdChGVGUpLHl5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBGVGUoKXt5eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gY1R0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiBhVHQoKXt5eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e2NUdCgpfWZpbmFsbHl7aDI9MCxIVGUoKSx5eT0wfX1mdW5jdGlvbiBCVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5zVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBIVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dChhVHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChCVGUsc1R0KSksaDI9MSxsVHQoYVR0KSl9fXZhciBoMixpVCxuVCxzVHQsQlIsb1QsSFIseXksVlIsYVQsbFR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxzVHQ9MWUzLEhSPTAseXk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGxUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIHVUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTt1VHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47cVRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpWVGUsdHdlZW46VVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmZUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmZUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcVRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1oVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1oVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFZUZSxVVGUsZlR0LGdLLFdSLEdSLGhUdCxZUixsVCxUcz1NKCgpPT57RiQoKTttSygpO1ZUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxVVGU9W10sZlR0PTAsZ0s9MSxXUj0yLEdSPTMsaFR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHBUdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciBkVHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBHVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBXVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIG1UdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP0dUZTpXVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gWVRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBqVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBYVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gJFRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBLVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBaVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGdUdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP1pUZTpLVGUpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9qVGU6WVRlKShyKTooci5sb2NhbD8kVGU6WFRlKShyLG4sdCkpfXZhciBfVHQ9TSgoKT0+e3JUKCk7RXMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiBKVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIFFUZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIHRDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJlFUZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gZUNlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSlRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/dENlOmVDZSkobix0KSl9dmFyIHZUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIHJDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBuQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24geFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ckNlOm5DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIGJUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGlDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBvQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gd1R0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/aUNlOm9DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFNUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChhQ2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgRVR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gVFR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBDVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIEFUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBQVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBzQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBsQ2UoZSx0LHIpe3ZhciBuLGksbz1zQ2UodCk/Y1Q6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gSVR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2gobENlKHIsZSx0KSl9dmFyIExUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGNDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24ga1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGNDZSh0aGlzLl9pZCkpfXZhciBSVHQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5UdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBEVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gT1R0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciB6VHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gRlR0KCl7cmV0dXJuIG5ldyB1Q2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciB1Q2UsQlR0PU0oKCk9PntFcygpO3VDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBoQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSFR0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGZDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHBDZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBkQ2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9SFR0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gVlR0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxoQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsSFR0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxwQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZENlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxmQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBVVHQ9TSgoKT0+e3JUKCk7RXMoKTtUcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIG1DZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gZ0NlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZtQ2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gcVR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLGdDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIEdUdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24geUNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/eUNlKGQyKHRoaXMsInRleHQiLGUpKTpfQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIFlUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIHZDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24geENlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJnZDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIGpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQseENlKGUpKX12YXIgWFR0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgS1R0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBaVHQoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgSlR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK2JDZX12YXIgYkNlLG0yLEdwPU0oKCk9PntFcygpO19UdCgpO3ZUdCgpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1VUdCgpO0dUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO3VUKCk7SlR0KCk7YkNlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpOVHQsc2VsZWN0QWxsOk9UdCxmaWx0ZXI6VFR0LG1lcmdlOkFUdCxzZWxlY3Rpb246RlR0LHRyYW5zaXRpb246JFR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpJVHQsYXR0cjpnVHQsYXR0clR3ZWVuOnlUdCxzdHlsZTpWVHQsc3R5bGVUd2VlbjpxVHQsdGV4dDpXVHQsdGV4dFR3ZWVuOmpUdCxyZW1vdmU6a1R0LHR3ZWVuOm1UdCxkZWxheTp4VHQsZHVyYXRpb246d1R0LGVhc2U6TVR0LGVuZDpaVHR9fSk7ZnVuY3Rpb24gd0NlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBRVHQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fHdDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4Syx0Q3Q9TSgoKT0+e0dwKCk7VHMoKTtJXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBlQ3Q9TSgoKT0+e0VzKCk7ZFR0KCk7dEN0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1wVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249UVR0fSk7dmFyIHJDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIG5DdD1NKCgpPT57ZUN0KCk7R3AoKTtyQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBpQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG9DdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciBhQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBzQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBUQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIENDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gaEN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZkN0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBwQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIGRDdCgpe3JldHVybiBUSyhTQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUNDZSxyPVRDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgb0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2xDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpNQ2VbcF0sXz1lPT09JFI/bnVsbDpFQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgbEN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIGNDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPWNDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiB1Q3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD11Q3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGxDdCxTSyxnMixfMiwkUixLUixTQ2UsV3AsY0N0LHVDdCxNQ2UsRUNlLG1DdD1NKCgpPT57RiQoKTtFNXQoKTtyVCgpO0VzKCk7bkN0KCk7aUN0KCk7YUN0KCk7c0N0KCk7bEN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LFNDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sY0N0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSx1Q3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LE1DZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxFQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgZ0N0PU0oKCk9PnttQ3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9QUNlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gQUNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3Z5KCl9KTt2YXIgX0N0LFBDZSxJQ2UsUEs9TSgoKT0+e3Z5KCk7QUsoKTtfQ3Q9Q0sobGcpLFBDZT1fQ3QucmlnaHQsSUNlPV9DdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgeUN0PU0oKCk9PntJSygpfSk7dmFyIHZDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciB4Q3Qsa0NlLFJDZSxOSz1NKCgpPT57eEN0PUFycmF5LnByb3RvdHlwZSxrQ2U9eEN0LnNsaWNlLFJDZT14Q3QubWFwfSk7dmFyIGJDdD1NKCgpPT57fSk7dmFyIHdDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgZGxuLG1sbixnbG4sT0s9TSgoKT0+e2Rsbj1NYXRoLnNxcnQoNTApLG1sbj1NYXRoLnNxcnQoMTApLGdsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBTQ3Q9TSgoKT0+e05LKCk7UEsoKTtiQ3QoKTtSSygpO3dDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIEVDdD1NKCgpPT57TksoKTt2eSgpO3kyKCk7SlIoKX0pO3ZhciBUQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgQ0N0PU0oKCk9Pnt9KTt2YXIgQUN0PU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57dnkoKTt5MigpO0pSKCl9KTt2YXIgSUN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBMQ3Q9TSgoKT0+e30pO3ZhciBrQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIgUkN0PU0oKCk9Pnt9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgREN0PU0oKCk9PntCSygpfSk7dmFyIE9DdD1NKCgpPT57UEsoKTt2eSgpO0FLKCk7eUN0KCk7dkN0KCk7a0soKTtSSygpO1NDdCgpO0VDdCgpO1RDdCgpO3pLKCk7Q0N0KCk7QUN0KCk7UEN0KCk7SUN0KCk7RksoKTtJSygpO0xDdCgpO0pSKCk7REsoKTtrQ3QoKTtSQ3QoKTtOQ3QoKTtPSygpO0JLKCk7TEsoKTtEQ3QoKX0pO3ZhciBISyxWSyx6Q3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLHpDdD1NYXRoLlBJLGRUPXpDdC8yLFVLPXpDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gVkNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRkN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVZDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgQkN0PU0oKCk9PntPQ3QoKTtHSygpfSk7dmFyIEhDdCxWQ3Q9TSgoKT0+e0hDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFVDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBxQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyx4eSxVQ2UsWEssR0N0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0sseHk9MWUtNixVQ2U9WUsteHk7aksucHJvdG90eXBlPXFDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPlVDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1xQ3R9KTt2YXIgV0N0PU0oKCk9PntHQ3QoKX0pO2Z1bmN0aW9uIHFDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gR0NlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBXQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIFlDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBZQ3QoKXt2YXIgZT1xQ2UsdD1HQ2Uscj1XQ2Usbj1ZQ2UsaT1qQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUhDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIGpDdD1NKCgpPT57VkN0KCk7VUN0KCk7R0soKTtXQ3QoKX0pO3ZhciBYQ3Q9TSgoKT0+e0JDdCgpO2pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gJEN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksZU49TSgoKT0+e2xsPSIkIjt0Ti5wcm90b3R5cGU9JEN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT0kQ3R9KTtmdW5jdGlvbiBKQ3QoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLFhDZSwkQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEtDdCxaQ3QpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLEtDdCxaQ3QpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gWENlKCl7cmV0dXJue319ZnVuY3Rpb24gJENlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gS0N0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gWkN0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBRQ3Q9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiB0QXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSxlQXQsckF0PU0oKCk9PntlTigpO3d5PWJ5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9dEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O2VBdD10QXR9KTtmdW5jdGlvbiBuQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBpQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9BdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGFBdD1NKCgpPT57fSk7ZnVuY3Rpb24gc0F0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO3ZhciBjQXQ9TSgoKT0+e1FDdCgpO3JBdCgpO2VOKCk7aUF0KCk7YUF0KCk7bEF0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9S0NlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PVpDZS5leGVjKGUpKT9oQXQocGFyc2VJbnQodFsxXSwxNikpOih0PUpDZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9UUNlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD10QWUuZXhlYyhlKSk/ZkF0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWVBZS5leGVjKGUpKT9mQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ckFlLmV4ZWMoZSkpP3BBdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW5BZS5leGVjKGUpKT9wQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTp1QXQuaGFzT3duUHJvcGVydHkoZSk/aEF0KHVBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gaEF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGZBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gcEF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gaUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/aUFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixtVCxRaCxLQ2UsWkNlLEpDZSxRQ2UsdEFlLGVBZSxyQWUsbkFlLHVBdCxpTj1NKCgpPT57bk4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsS0NlPS9eIyhbMC05YS1mXXszfSkkLyxaQ2U9L14jKFswLTlhLWZdezZ9KSQvLEpDZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksUUNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSx0QWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxlQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxtVF0rIlxcKSQiKSxyQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULFFoLFFoXSsiXFwpJCIpLG5BZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULFFoLFFoLG1UXSsiXFwpJCIpLHVBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLEtLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsWkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkvZEF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS9tQXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL2dBdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPm9BZT9NYXRoLnBvdyhlLDEvMyk6ZS95QXQrX0F0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOnlBdCooZS1fQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gYUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9hQWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLGRBdCxtQXQsZ0F0LF9BdCxiMix5QXQsb0FlLHZBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgsZEF0PS45NTA0NyxtQXQ9MSxnQXQ9MS4wODg4MyxfQXQ9NC8yOSxiMj02LzI5LHlBdD0zKmIyKmIyLG9BZT1iMipiMipiMjtZcChqcCxsTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9bUF0KnRaKGUpLHQ9ZEF0KnRaKHQpLHI9Z0F0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxpWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIHNBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPSh3QXQqbit4QXQqdC1iQXQqcikvKHdBdCt4QXQtYkF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3NBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgU0F0LG9aLGFaLGNOLF9ULHhBdCxiQXQsd0F0LE1BdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7U0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCx4QXQ9X1QqY04sYkF0PV9UKm9aLHdBdD1vWiphWi1jTipTQXQ7WXAoTXksdU4sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKFNBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBFQXQ9TSgoKT0+e2lOKCk7dkF0KCk7TUF0KCl9KTtmdW5jdGlvbiBDQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGNBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHVBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFRBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bEFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbEFlLEFBdCxQQXQ9TSgoKT0+e2xBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9Q0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1jQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT11QWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPVRBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPVRBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O0FBdD1DQXR9KTt2YXIgSUF0PU0oKCk9PntQQXQoKX0pO2Z1bmN0aW9uIGtBdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBmQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBwQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBMQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPWhBZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIGhBZSxzWixSQXQ9TSgoKT0+e2hBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9a0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1mQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1wQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUxBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUxBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPWtBdH0pO3ZhciBOQXQ9TSgoKT0+e1JBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiBkQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG1BZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD9tQWU6ZEFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIGdBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD9nQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIERBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBPQXQ9TSgoKT0+e2VmKCk7ZlooKX0pO2Z1bmN0aW9uIF9BZSgpe3JldHVybltdfWZ1bmN0aW9uIHpBdChlKXtyZXR1cm4gZT09bnVsbD9fQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgRkF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgSEF0PU0oKCk9PntlZigpO0ZBdCgpfSk7ZnVuY3Rpb24gVkF0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBVQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VkF0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBHQXQ9TSgoKT0+e2VmKCk7VUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uIFdBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtlZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBZQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBqQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHZBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVhBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVhBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uICRBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/dkFlOnlBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVlBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBYQXQsS0F0PU0oKCk9PntlZigpO2RaKCk7akF0KCk7WEF0PSIkIn0pO2Z1bmN0aW9uIFpBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIEpBdD1NKCgpPT57cFooKTtlZigpfSk7ZnVuY3Rpb24gUUF0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciB0NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGU0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgcjR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gbjR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgaTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBvNHQoZSl7ZXx8KGU9eEFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4QWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIGE0dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIHM0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgdTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBmNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA0dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIGQ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gbTR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gYkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB3QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBTQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gRUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBUQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gdjR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3dBZTpiQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9UQWU6RUFlOnIubG9jYWw/TUFlOlNBZSkocix0KSl9dmFyIHg0dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIENBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBBQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBQQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gYjR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9DQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UEFlOkFBZSkoZSx0LHI9PW51bGw/IiI6cikpOklBZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgdzR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gTEFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBrQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIFJBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBTNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIE00dD1NKCgpPT57fSk7ZnVuY3Rpb24gRTR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBUNHQoZSl9ZnVuY3Rpb24gVDR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1FNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBDNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBBNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBOQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7QzR0KHRoaXMsZSl9fWZ1bmN0aW9uIERBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBNHQodGhpcyxlKX19ZnVuY3Rpb24gT0FlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0M0dDpBNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFA0dChlLHQpe3ZhciByPUU0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PQWU6dD9OQWU6REFlKShyLHQpKX12YXIgSTR0PU0oKCk9PntUNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gekFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBCQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEw0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD96QWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0JBZTpGQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgazR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBWQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gUjR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0hBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VUFlOlZBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRDR0KCl7cmV0dXJuIHRoaXMuZWFjaChxQWUpfXZhciBPNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIHo0dCgpe3JldHVybiB0aGlzLmVhY2goR0FlKX12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgSDR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gV0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVjR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/V0FlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBVNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIFlBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHE0dCgpe3JldHVybiB0aGlzLmVhY2goWUFlKX12YXIgRzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIFhBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVzR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP1hBZTpqQWUpfXZhciBZNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIFg0dD1NKCgpPT57fSk7ZnVuY3Rpb24gJEFlKGUsdCxyKXtyZXR1cm4gZT1aNHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gWjR0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIEtBZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gWkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEpBZShlLHQscil7dmFyIG49SzR0Lmhhc093blByb3BlcnR5KGUudHlwZSk/JEFlOlo0dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBKNHQoZSx0LHIpe3ZhciBuPUtBZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/SkFlOlpBZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgSzR0LHNuLCQ0dCx4Tj1NKCgpPT57SzR0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKCQ0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiAkNHR8fChLNHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gUTR0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBRQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUTR0KHRoaXMsZSx0KX19ZnVuY3Rpb24gdDRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFE0dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiB0UHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj90NGU6UUFlKShlLHQpKX12YXIgZVB0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gZTRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1osZWY9TSgoKT0+e09BdCgpO0hBdCgpO0dBdCgpO0tBdCgpO2RaKCk7SkF0KCk7dDR0KCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7STR0KCk7azR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7eE4oKTtlUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPWU0ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpEQXQsc2VsZWN0QWxsOkJBdCxmaWx0ZXI6cUF0LGRhdGE6JEF0LGVudGVyOldBdCxleGl0OlpBdCxqb2luOlFBdCxtZXJnZTplNHQsb3JkZXI6bjR0LHNvcnQ6bzR0LGNhbGw6czR0LG5vZGVzOmM0dCxub2RlOmg0dCxzaXplOnA0dCxlbXB0eTptNHQsZWFjaDpfNHQsYXR0cjp2NHQsc3R5bGU6YjR0LHByb3BlcnR5OlM0dCxjbGFzc2VkOlA0dCx0ZXh0Okw0dCxodG1sOlI0dCxyYWlzZTpENHQsbG93ZXI6ejR0LGFwcGVuZDpCNHQsaW5zZXJ0OlY0dCxyZW1vdmU6cTR0LGNsb25lOlc0dCxkYXR1bTpqNHQsb246SjR0LGRpc3BhdGNoOnRQdH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgclB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgblB0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBpUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57blB0KCk7clB0KCk7aVB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciBhUHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gcjRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBuNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGk0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBvNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gc1B0KCl7dmFyIGU9cjRlLHQ9bjRlLHI9aTRlLG49bzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGxQdD1NKCgpPT57TkF0KCk7U04oKTtTWigpO3daKCk7b1B0KCk7YVB0KCl9KTt2YXIgY1B0PU0oKCk9PntsUHQoKTtTWigpfSk7ZnVuY3Rpb24gaFB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gYTRlKGUsdCl7dmFyIHI9aFB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gczRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P2E0ZShkLHUpOmhQdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSx1UHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PXVQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1zNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciB1UHQsTVosRVosYlQsVFosQ049TSgoKT0+e3VQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixmUHQscFB0LGRQdCxtUHQsZ1B0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZlB0PUFOLnBhcnNlLHBQdD1BTi5wYXJzZVJvd3MsZFB0PUFOLmZvcm1hdCxtUHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixfUHQseVB0LHZQdCx4UHQsYlB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksX1B0PVBOLnBhcnNlLHlQdD1QTi5wYXJzZVJvd3MsdlB0PVBOLmZvcm1hdCx4UHQ9UE4uZm9ybWF0Um93c30pO3ZhciB3UHQ9TSgoKT0+e0NOKCk7Z1B0KCk7YlB0KCl9KTtmdW5jdGlvbiBTUHQoZSl7cmV0dXJuK2V9dmFyIE1QdD1NKCgpPT57fSk7ZnVuY3Rpb24gRVB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gVFB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBDUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUFB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgSVB0PU0oKCk9Pnt9KTt2YXIgUFosTFB0LGtQdCxJWixSUHQ9TSgoKT0+e1BaPTMsTFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLGtQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gT1B0KGUpe3JldHVybiAxLU1hdGguY29zKGUqRFB0KX1mdW5jdGlvbiB6UHQoZSl7cmV0dXJuIE1hdGguc2luKGUqRFB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhOUHQqZSkpLzJ9dmFyIE5QdCxEUHQsRlB0PU0oKCk9PntOUHQ9TWF0aC5QSSxEUHQ9TlB0LzJ9KTtmdW5jdGlvbiBCUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFZQdD1NKCgpPT57fSk7ZnVuY3Rpb24gVVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gcVB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBHUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFdQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxjNGU/SU4qKGUtPWw0ZSkqZSt1NGU6ZTxmNGU/SU4qKGUtPWg0ZSkqZStwNGU6SU4qKGUtPWQ0ZSkqZSttNGV9ZnVuY3Rpb24gWVB0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosbDRlLGM0ZSx1NGUsaDRlLGY0ZSxwNGUsZDRlLG00ZSxJTixqUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxsNGU9Ni8xMSxjNGU9OC8xMSx1NGU9My80LGg0ZT05LzExLGY0ZT0xMC8xMSxwNGU9MTUvMTYsZDRlPTIxLzIyLG00ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLFhQdCwkUHQsT1osS1B0PU0oKCk9PntEWj0xLjcwMTU4LFhQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSwkUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixaUHQsQlosSlB0LFFQdD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsWlB0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEpQdD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIHQ2dD1NKCgpPT57TVB0KCk7Q1B0KCk7SVB0KCk7UlB0KCk7RlB0KCk7VlB0KCk7R1B0KCk7alB0KCk7S1B0KCk7UVB0KCl9KTtmdW5jdGlvbiBlNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgcjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6bihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gbjZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gaTZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gaTZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIG82dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilpNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBsNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGM2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB1NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGg2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIHA2dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIGQ2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIG02dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBnNnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBfNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHk2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciB2NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHg2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIGI2dD1NKCgpPT57fSk7ZnVuY3Rpb24gdzZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIE02dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRTZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gVDZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEM2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEk2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEw2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP1Q2dDp0LHI9PW51bGw/UDZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gazZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsUjZ0PU0oKCk9PnthNnQoKTtsNnQoKTt1NnQoKTtmNnQoKTtkNnQoKTtfNnQoKTt2NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtBNnQoKTtMNnQoKTtHYT1DeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1rNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1rNnQobikpO3JldHVybiBlfTtHYS5hZGQ9bjZ0O0dhLmFkZEFsbD1vNnQ7R2EuY292ZXI9czZ0O0dhLmRhdGE9YzZ0O0dhLmV4dGVudD1oNnQ7R2EuZmluZD1wNnQ7R2EucmVtb3ZlPW02dDtHYS5yZW1vdmVBbGw9ZzZ0O0dhLnJvb3Q9eTZ0O0dhLnNpemU9eDZ0O0dhLnZpc2l0PXc2dDtHYS52aXNpdEFmdGVyPU02dDtHYS54PUM2dDtHYS55PUk2dH0pO3ZhciBWWj1NKCgpPT57UjZ0KCl9KTtmdW5jdGlvbiBnNGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIF80ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gTjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9em4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQsZzRlLF80ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6em4oK2wpLHMoKSxvKTplfSxvfXZhciBENnQ9TSgoKT0+e1R5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gTzZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsTk49TSgoKT0+e2NsPSIkIjtSTi5wcm90b3R5cGU9TzZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1PNnR9KTt2YXIgejZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24geTRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksRjZ0PU0oKCk9PntOTigpO0F5PXBnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9eTRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIEI2dD1NKCgpPT57fSk7dmFyIEg2dD1NKCgpPT57fSk7dmFyIFY2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9Pnt6NnQoKTtGNnQoKTtOTigpO0I2dCgpO0g2dCgpO1Y2dCgpfSk7ZnVuY3Rpb24gdjRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFU2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBxNnQoZSl7dmFyIHQ9djRlLHI9dSxuLGk9em4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVU2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVU2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLGQoKSxoKTppfSxofXZhciBHNnQ9TSgoKT0+e1R5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gWTZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGI0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHc0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFc2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09eDRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgeDRlLHFaLGo2dD1NKCgpPT57eDRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1ZNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWI0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXc0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09VzZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09VzZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9WTZ0fSk7dmFyIFg2dD1NKCgpPT57ajZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBQeXx8KFo2dChTNGUpLFB5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBTNGUoKXtQeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gSjZ0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiAkNnQoKXtQeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e0o2dCgpfWZpbmFsbHl7RTI9MCxFNGUoKSxQeT0wfX1mdW5jdGlvbiBNNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD5LNnQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBFNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dCgkNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChNNGUsSzZ0KSksRTI9MSxaNnQoJDZ0KSl9fXZhciBFMixTVCx3VCxLNnQsek4sTVQsRk4sUHksQk4sRVQsWjZ0LFE2dD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsSzZ0PTFlMyxGTj0wLFB5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxaNnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIHRJdD1NKCgpPT57UTZ0KCl9KTtmdW5jdGlvbiBlSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBySXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBuSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1UNGUqTWF0aC5zcXJ0KGQpLHg9ZCpDNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIFQ0ZSxDNGUsalo9TSgoKT0+e1g2dCgpO1VaKCk7dEl0KCk7VDRlPTEwLEM0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBpSXQoKXt2YXIgZSx0LHIsbj16bigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsZUl0LHJJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOnpuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgb0l0PU0oKCk9PntUeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gYUl0KGUsdCxyKXt2YXIgbixpPXpuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6em4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnpuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBzSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBsSXQoZSl7dmFyIHQ9em4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT16bihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6em4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOmV9LG99dmFyIGNJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIHVJdChlKXt2YXIgdD16biguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnpuKCtzKSxhKCksbyk6ZX0sb312YXIgaEl0PU0oKCk9PntUeSgpfSk7dmFyIGZJdD1NKCgpPT57cjZ0KCk7RDZ0KCk7RzZ0KCk7b0l0KCk7c0l0KCk7alooKTtjSXQoKTtoSXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gcEl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciBkSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1JdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIGdJdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0l0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgeUl0PU0oKCk9Pnt9KTtmdW5jdGlvbiB2SXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHhJdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57eUl0KCk7JFooKTt4SXQoKTtVTj17IiI6X0l0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6dkl0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1BNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBBNGUsUVo9TSgoKT0+e1paKCk7QTRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBiSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP3BJdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP21JdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP3dJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPXdJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgd0l0LGVKPU0oKCk9PntUVCgpO2RJdCgpO2dJdCgpO1FaKCk7WlooKTskWigpO2JJdCgpO3dJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixTSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBNSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIEVJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIFRJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgQ0l0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24gQUl0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIFBJdD1NKCgpPT57VFQoKX0pO3ZhciBJSXQ9TSgoKT0+e1NJdCgpO2VKKCk7UVooKTtFSXQoKTtDSXQoKTtQSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBMSXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sa3k9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtMSXQoWU4sZSx0aGlzLnQpLExJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBabihlKXtyZXR1cm4gZT4xP0ZuOmU8LTE/LUZuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixGbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixSeSwkTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEZuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLFJ5PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmUkl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJlJJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gTkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYma0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/a0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBrSXQsUkl0LG1nPU0oKCk9PntrSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LFJJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtOSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylOSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFA0ZSgpe0V1LnBvaW50PUw0ZX1mdW5jdGlvbiBJNGUoKXt6SXQoREl0LE9JdCl9ZnVuY3Rpb24gTDRlKGUsdCl7RXUucG9pbnQ9ekl0LERJdD1lLE9JdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIHpJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gRkl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLERJdCxPSXQsc0osbEosY0osRXUsdUo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7QVQ9Q3MoKSxKTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1QNGUsRXUubGluZUVuZD1JNGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxabihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7Z2cucHVzaChacD1bZGk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBHSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKGRpLGUpPnVsKGRpLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChkaSxlKT51bChkaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChkaSxFaSkmJihkaT1lKX1lbHNlIGdnLnB1c2goWnA9W2RpPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIEJJdCgpe0twLnBvaW50PUdJdH1mdW5jdGlvbiBISXQoKXtacFswXT1kaSxacFsxXT1FaSxLcC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uIFdJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFVJdD1lLHFJdD10O0V1LnBvaW50KGUsdCksR0l0KGUsdCl9ZnVuY3Rpb24gazRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gUjRlKCl7V0l0KFVJdCxxSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLFpwWzBdPWRpLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIE40ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gVkl0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBZSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChONGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxWSXQobixpWzBdKXx8Vkl0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxkaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksaGxdLFtFaSx4Y11dfXZhciBkaSxobCxFaSx4YyxPeSxVSXQscUl0LFAyLExULGdnLFpwLEtwLGpJdD1NKCgpPT57a3koKTt1SigpO0EyKCk7bHIoKTttZygpO0xUPUNzKCksS3A9e3BvaW50OmhKLGxpbmVTdGFydDpCSXQsbGluZUVuZDpISXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9V0l0LEtwLmxpbmVTdGFydD1rNGUsS3AubGluZUVuZD1SNGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1oSixLcC5saW5lU3RhcnQ9Qkl0LEtwLmxpbmVFbmQ9SEl0LEFUPDA/KGRpPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoaGw9LTkwKSxacFswXT1kaSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIFhJdCgpe1R1LnBvaW50PUQ0ZX1mdW5jdGlvbiBENGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9TzRlLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBPNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO3REKz1hLGlEKz1hKihXYSsoV2E9bikpLG9EKz1hKihZYSsoWWE9aSkpLGFEKz1hKihqYSsoamE9bykpLFJUKFdhLFlhLGphKX1mdW5jdGlvbiAkSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiB6NGUoKXtUdS5wb2ludD1CNGV9ZnVuY3Rpb24gRjRlKCl7Skl0KEtJdCxaSXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIEI0ZShlLHQpe0tJdD1lLFpJdD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PUpJdDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksUlQoV2EsWWEsamEpfWZ1bmN0aW9uIEpJdChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PVpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooV2ErKFdhPW4pKSxvRCs9dSooWWErKFlhPWkpKSxhRCs9dSooamErKGphPW8pKSxSVChXYSxZYSxqYSl9ZnVuY3Rpb24gUUl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixabihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLEtJdCxaSXQsV2EsWWEsamEsVHUsdDl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpYSXQsbGluZUVuZDokSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PXo0ZSxUdS5saW5lRW5kPUY0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1YSXQsVHUubGluZUVuZD0kSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZTl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qobjl0KGUpLGk5dCh0LHIpKTpuOXQoZSk6dHx8cj9pOXQodCxyKTpfSn1mdW5jdGlvbiByOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIG45dChlKXt2YXIgdD1yOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PXI5dCgtZSksdH1mdW5jdGlvbiBpOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxabihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxabihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPW85dChhLGkpLG89bzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gbzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIGE5dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtlOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLHM5dChvKSxzOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIHM5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqWm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntreSgpO0EyKCk7bHIoKTtTSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1INGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBINGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBUSj1NKCgpPT57RnkoKX0pO3ZhciBsOXQsVjRlLFU0ZSxDSj1NKCgpPT57RnkoKTtUSigpO2w5dD1FSihfZyksVjRlPWw5dC5yaWdodCxVNGU9bDl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBjOXQ9TSgoKT0+e0FKKCl9KTt2YXIgdTl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIGg5dCxHNGUsVzRlLGtKPU0oKCk9PntoOXQ9QXJyYXkucHJvdG90eXBlLEc0ZT1oOXQuc2xpY2UsVzRlPWg5dC5tYXB9KTt2YXIgZjl0PU0oKCk9Pnt9KTt2YXIgcDl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBTMG4sTTBuLEUwbixOSj1NKCgpPT57UzBuPU1hdGguc3FydCg1MCksTTBuPU1hdGguc3FydCgxMCksRTBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIGQ5dD1NKCgpPT57a0ooKTtDSigpO2Y5dCgpO0xKKCk7cDl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgZzl0PU0oKCk9PntrSigpO0Z5KCk7TDIoKTtkRCgpfSk7dmFyIF85dD1NKCgpPT57SUooKX0pO3ZhciB5OXQ9TSgoKT0+e30pO3ZhciB2OXQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntGeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIGI5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgdzl0PU0oKCk9Pnt9KTt2YXIgUzl0PU0oKCk9PntGeSgpfSk7dmFyIE05dD1NKCgpPT57fSk7dmFyIEU5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIFQ5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtGeSgpO1RKKCk7Yzl0KCk7dTl0KCk7SUooKTtMSigpO2Q5dCgpO2c5dCgpO185dCgpO0RKKCk7eTl0KCk7djl0KCk7eDl0KCk7Yjl0KCk7T0ooKTtBSigpO3c5dCgpO2REKCk7UkooKTtTOXQoKTtNOXQoKTtFOXQoKTtOSigpO3pKKCk7UEooKTtUOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsdFBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoUTRlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBRNGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gdFBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUZuLWNlOkZuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Gbi1jZTpGbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIGVQZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9GbjotRm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9clBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gclBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBuUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqRm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sZVBlLG5QZSxbLXJyLC1Gbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gQzl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIEE5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0M5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7QTl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBQOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgSTl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gaVBlKCl7azIucG9pbnQ9YVBlLGsyLmxpbmVFbmQ9b1BlfWZ1bmN0aW9uIG9QZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gYVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1zUGV9ZnVuY3Rpb24gc1BlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1ZKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6aVBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGxQZSl9dmFyIEdKLGxQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxsUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJms5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2s5dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gUjl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIE45dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEQ5dChlLHQpe3JldHVybiEhZkQoZS5tYXAoY1BlKSxPOXQodCkpfWZ1bmN0aW9uIGNQZShlKXtyZXR1cm4gZT1lLm1hcChPOXQpLGUucG9wKCksZX1mdW5jdGlvbiBPOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuKGUmJkw5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0w5dFtlLnR5cGVdOndEKShlLHQpfXZhciBMOXQsazl0LEY5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7TDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sazl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUjl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE45dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE45dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEQ5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEQ5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gQjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gSDl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPUI5dChvLGksOTApLHA9SDl0KHQsZSxfKSxkPUI5dChzLGEsOTApLGc9SDl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBWOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBVOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIHE5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKlpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBHOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVQZSgpe3lnLnBvaW50PWhQZX1mdW5jdGlvbiBoUGUoZSx0KXt5Zy5wb2ludD1qOXQsVzl0PVhKPWUsWTl0PSRKPXR9ZnVuY3Rpb24gajl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGZQZSgpe2o5dChXOXQsWTl0KX12YXIgWUosakosVzl0LFk5dCxYSiwkSix5ZyxLSixYOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO1lKPUNzKCksako9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PXVQZSx5Zy5saW5lRW5kPWZQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXlnfSk7ZnVuY3Rpb24gZFBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxwUGUsTjIsWko9TSgoKT0+e1hwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxwUGU9e3BvaW50OmRQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1wUGV9KTtmdW5jdGlvbiBIeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gJDl0KCl7Q3UucG9pbnQ9bVBlfWZ1bmN0aW9uIG1QZShlLHQpe0N1LnBvaW50PWdQZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIGdQZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7Q0QrPWkqKG9mK2UpLzIsQUQrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiBLOXQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBfUGUoKXtDdS5wb2ludD12UGV9ZnVuY3Rpb24geVBlKCl7UTl0KFo5dCxKOXQpfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PVE5dCxIeShaOXQ9b2Y9ZSxKOXQ9YWY9dCl9ZnVuY3Rpb24gUTl0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtDRCs9aSoob2YrZSkvMixBRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCx0USs9aSoob2YrZSksZVErPWkqKGFmK3QpLFVUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsWjl0LEo5dCxvZixhZixDdSxyUSx0THQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDokOXQsbGluZUVuZDpLOXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PV9QZSxDdS5saW5lRW5kPXlQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD0kOXQsQ3UubGluZUVuZD1LOXR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIGVMdD1NKCgpPT57bHIoKTtYcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIHhQZShlLHQpe0lELnBvaW50PWlMdCxyTHQ9cVQ9ZSxuTHQ9R1Q9dH1mdW5jdGlvbiBpTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLHJMdCxuTHQscVQsR1QsSUQsb1Esb0x0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtpUT1DcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD14UGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmaUx0KHJMdCxuTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBhTHQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIHNMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOmFMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPWFMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gbEx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBjTHQ9TSgoKT0+e01EKCk7bWcoKTtYOXQoKTtaSigpO3RMdCgpO2VMdCgpO29MdCgpO3NMdCgpfSk7ZnVuY3Rpb24gdUx0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57bWcoKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9TUGUoZSx0KTp3UGUoZSl9ZnVuY3Rpb24gd1BlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIFNQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPVpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPGJQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxoTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLGhMdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBoTHQsYlBlLGZMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7aEx0PTE2LGJQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBFUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1NUGUoRVBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIE1QZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Zkx0KCk7TVBlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gcEx0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsWm4oaSp0KV19LHJ9dmFyIGRMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gcEx0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksWm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTtkTHQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gVFBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBtTHQoKXt2YXIgZSx0LHI9REQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1UUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgZ0x0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxabihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBfTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQseUx0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqWm4oZS8yKX0pfSk7ZnVuY3Rpb24gdkx0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCx4THQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoRm4rdCkvMikpXX1mdW5jdGlvbiBiTHQoKXtyZXR1cm4gaFEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Gbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChGbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUZuK2NlJiYocz0tRm4rY2UpOnM+Rm4tY2UmJihzPUZuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoJE4oaS9jLDEvbikpLUZuXX0sb31mdW5jdGlvbiB3THQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIFNMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIE1MdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIEVMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgVEx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gQ0x0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBBTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFBMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBJTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBMTHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBrTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gUkx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgTkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoWm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIERMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgT0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW1J5KEMyKChGbit0KS8yKSksLWVdfWZ1bmN0aW9uIHpMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIEZMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Gbl19fSk7dmFyIEJMdD1NKCgpPT57dUooKTtqSXQoKTt0OXQoKTt2SigpO0JKKCk7SEooKTtJOXQoKTtCVCgpO0Y5dCgpO1dKKCk7VTl0KCk7Rzl0KCk7cUooKTtjTHQoKTt1USgpO2dMdCgpO3lMdCgpO3hMdCgpO1NMdCgpO05EKCk7VEx0KCk7cFEoKTtBTHQoKTtJTHQoKTtBdSgpO0JEKCk7a0x0KCk7Tkx0KCk7T0x0KCk7Rkx0KCk7RFQoKTttZygpO1dUKCl9KTtmdW5jdGlvbiBDUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gQVBlKGUpe3JldHVybiBlLnJlZHVjZShQUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUFBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIElQZShlKXtyZXR1cm4gMStlLnJlZHVjZShMUGUsMCl9ZnVuY3Rpb24gTFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBrUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIFJQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gSEx0KCl7dmFyIGU9Q1BlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1BUGUocCksZi55PUlQZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1rUGUobyksYz1SUGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFZMdD1NKCgpPT57fSk7ZnVuY3Rpb24gTlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFVMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihOUGUpfXZhciBxTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgV0x0PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgakx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyICRMdD1NKCgpPT57fSk7ZnVuY3Rpb24gS0x0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIFpMdD1NKCgpPT57fSk7ZnVuY3Rpb24gSkx0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe2Zvcih2YXIgdD10aGlzLHI9RFBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRFBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgZWt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBya3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBva3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGFrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgc2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsa3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIGNrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD16UGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBPUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShGUGUpfWZ1bmN0aW9uIHpQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBGUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntxTHQoKTtXTHQoKTtqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTt4Zy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpVTHQsZWFjaDpHTHQsZWFjaEFmdGVyOlhMdCxlYWNoQmVmb3JlOllMdCxzdW06S0x0LHNvcnQ6Skx0LHBhdGg6dGt0LGFuY2VzdG9yczpya3QsZGVzY2VuZGFudHM6aWt0LGxlYXZlczpha3QsbGlua3M6bGt0LGNvcHk6T1BlfX0pO2Z1bmN0aW9uIGhrdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgdWt0LGZrdD1NKCgpPT57dWt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9aGt0KHVrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJnBrdChvLGkpPysrdDoobz1IUGUobj1CUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBCUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKGRrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gcGt0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighcGt0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSFBlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBWUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gZGt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gVlBlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIGRrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Zmt0KCl9KTtmdW5jdGlvbiBta3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24gZ2t0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIF9rdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7bWt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtta3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoZ2t0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoZ2t0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPV9rdCh0KTsobj1uLm5leHQpIT09cjspKGE9X2t0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB5a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gdmt0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBVUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB3a3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoeGt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoYmt0KDEpKTpvLmVhY2hCZWZvcmUoeGt0KFVQZSkpLmVhY2hBZnRlcihiUSh0ZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGJrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12a3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIHhrdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBia3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIFNrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gTWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIEVrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gR1BlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIFdQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBBa3QoKXt2YXIgZT1HUGUsdD1XUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9VGt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0NrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtUa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Da3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1xUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBUa3QscVBlLENrdCxQa3Q9TSgoKT0+e1pEKCk7akQoKTtUa3Q9IiQiLHFQZT17ZGVwdGg6LTF9LENrdD17fX0pO2Z1bmN0aW9uIFlQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24galBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIFhQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiAkUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiBLUGUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gSWt0KCl7dmFyIGU9WVBlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9S1BlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe1hQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoalBlKCRQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBMa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIGtrdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciBSa3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBOa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgRGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciB6a3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBGa3QsQmt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtGa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgSGt0PU0oKCk9PntWTHQoKTtqRCgpO1NrdCgpO3ZRKCk7X1EoKTtFa3QoKTtQa3QoKTtMa3QoKTtSa3QoKTtEa3QoKTtVMigpOyRUKCk7emt0KCk7ZU8oKTtCa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFVrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGk2ZSgpe3JldHVybiBYa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gcWt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9WlBlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/R2t0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1KUGUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PVFQZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9dDZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWU2ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1yNmUuZXhlYyhlKSk/amt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9bjZlLmV4ZWMoZSkpP2prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOlZrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ha3QoVmt0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBHa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFdrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBZa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gamt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gWGt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/WGt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMixLVCx1ZixaUGUsSlBlLFFQZSx0NmUsZTZlLHI2ZSxuNmUsVmt0LGlPPU0oKCk9PntyTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixaUGU9L14jKFswLTlhLWZdezMsOH0pJC8sSlBlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxRUGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLHQ2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLGU2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLEtUXSsiXFwpJCIpLHI2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsdWYsdWZdKyJcXCkkIiksbjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsdWYsdWYsS1RdKyJcXCkkIiksVmt0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlVrdCxmb3JtYXRIZXg6VWt0LGZvcm1hdEhzbDppNmUsZm9ybWF0UmdiOnFrdCx0b1N0cmluZzpxa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6V2t0LGZvcm1hdEhleDpXa3QsZm9ybWF0UmdiOllrdCx0b1N0cmluZzpZa3R9KSk7ZWQoY2YsSlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIHQ4dChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gZTh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvS2t0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pLyRrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL1prdCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3Q4dChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5vNmU/TWF0aC5wb3coZSwxLzMpOmUvUWt0K0prdH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpRa3QqKGUtSmt0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGE2ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9dDh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/YTZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGU4dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLCRrdCxLa3QsWmt0LEprdCxXMixRa3QsbzZlLHI4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsJGt0PS45NjQyMixLa3Q9MSxaa3Q9LjgyNTIxLEprdD00LzI5LFcyPTYvMjksUWt0PTMqVzIqVzIsbzZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD0ka3QqTFEodCksZT1La3QqTFEoZSkscj1aa3QqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxRVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGU4dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBzNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obzh0Km4rbjh0KnQtaTh0KnIpLyhvOHQrbjh0LWk4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9zNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGE4dCxOUSxEUSxsTyx0QyxuOHQsaTh0LG84dCxzOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO2E4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsbjh0PXRDKmxPLGk4dD10QypOUSxvOHQ9TlEqRFEtbE8qYTh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKihhOHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e2lPKCk7cjh0KCk7czh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGw4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGw2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBjOHQoZSl7cmV0dXJuKGU9K2UpPT0xP0puOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9sNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIEpuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gdTh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLGg4dCxmOHQsQlE9TSgoKT0+e2p5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1jOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7aDh0PXU4dChjTyksZjh0PXU4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gYzZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiB1NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/dTZlKGxbMF0ueCk6YzZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIEVnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POkFzKShlLHQpfXZhciBwTz1NKCgpPT57ankoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gcDh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciBkOHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKm04dCxza2V3WDpNYXRoLmF0YW4obCkqbTh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgbTh0LF9PLGc4dD1NKCgpPT57bTh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24geTh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxfOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Xzh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHY4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLF84dCx5Tyx4OHQ9TSgoKT0+e2c4dCgpfSk7ZnVuY3Rpb24gYjh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciB3OHQsUzh0LE04dD1NKCgpPT57ckMoKTt4OHQoKTt3OHQ9Yjh0KHk4dCwicHgsICIsInB4KSIsImRlZykiKSxTOHQ9Yjh0KHY4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gVDh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGY2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBwNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEM4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8aDZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0U4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktRTh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9VDh0KF8pLEM9aS8oWFEqcCkqKFMqcDZlKGlDKmIrXyktZjZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL1Q4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsRTh0LGg2ZSxBOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixFOHQ9NCxoNmU9MWUtMTJ9KTtmdW5jdGlvbiBQOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Kbih0LnMsci5zKSxvPUpuKHQubCxyLmwpLGE9Sm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIEk4dCxMOHQsazh0PU0oKCk9PntqeSgpO0syKCk7STh0PVA4dCgkMiksTDh0PVA4dChKbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPUpuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPUpuKGUuYSx0LmEpLGk9Sm4oZS5iLHQuYiksbz1KbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciBSOHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIE44dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPUpuKHQuYyxyLmMpLG89Sm4odC5sLHIubCksYT1Kbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgRDh0LE84dCx6OHQ9TSgoKT0+e2p5KCk7SzIoKTtEOHQ9Tjh0KCQyKSxPOHQ9Tjh0KEpuKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPUpuKGkucyxvLnMpLGw9Sm4oaS5sLG8ubCksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEI4dCxIOHQsVjh0PU0oKCk9PntqeSgpO0syKCk7Qjh0PUY4dCgkMiksSDh0PUY4dChKbil9KTtmdW5jdGlvbiBVOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgcTh0PU0oKCk9Pnt9KTt2YXIgRzh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO2Q4dCgpO1dRKCk7TTh0KCk7QTh0KCk7QlEoKTtrOHQoKTtSOHQoKTt6OHQoKTtWOHQoKTtxOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gVzh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsWHksZDZlLFk4dCxqOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSxYeT0xZS02LGQ2ZT1aUS1YeTtKUS5wcm90b3R5cGU9Vzh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+ZDZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O1k4dD1XOHR9KTt2YXIgWDh0PU0oKCk9PntqOHQoKX0pO2Z1bmN0aW9uICQ4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIEs4dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjh0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgSjh0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROHQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciB0UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBlUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmUTh0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIHJSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KG02ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89ZVJ0KG4pLGE9ZVJ0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBuUnQ9TSgoKT0+e3RSdCgpfSk7ZnVuY3Rpb24gaVJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgb1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIHNSdD1NKCgpPT57fSk7dmFyIGxSdD1NKCgpPT57Szh0KCk7Sjh0KCk7blJ0KCk7b1J0KCk7c1J0KCl9KTtmdW5jdGlvbiBjUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiB1UnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiB1UnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gaFJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcil1UnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFJ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBkUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1SdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBnUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgeVJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIHZSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHhSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIGJSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB3UnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBTUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1SdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBFUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIENSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQVJ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFBSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIElSdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgTFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24ga1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIFJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIE5SdD1NKCgpPT57fSk7ZnVuY3Rpb24gRFJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIHpSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP2tSdDp0LHI9PW51bGw/RFJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gRlJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgWGEsQlJ0PU0oKCk9PntmUnQoKTtkUnQoKTtnUnQoKTt5UnQoKTt4UnQoKTtTUnQoKTtFUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtOUnQoKTt6UnQoKTtYYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1GUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1GUnQobikpO3JldHVybiBlfTtYYS5hZGQ9Y1J0O1hhLmFkZEFsbD1oUnQ7WGEuY292ZXI9cFJ0O1hhLmRhdGE9bVJ0O1hhLmV4dGVudD1fUnQ7WGEuZmluZD12UnQ7WGEucmVtb3ZlPWJSdDtYYS5yZW1vdmVBbGw9d1J0O1hhLnJvb3Q9TVJ0O1hhLnNpemU9VFJ0O1hhLnZpc2l0PUFSdDtYYS52aXNpdEFmdGVyPUlSdDtYYS54PVJSdDtYYS55PU9SdH0pO3ZhciBIUnQ9TSgoKT0+e0JSdCgpfSk7dmFyIFZSdCxVUnQ9TSgoKT0+e1ZSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBxUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtfNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gXzZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09eTZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8ZzZlKX19ZnVuY3Rpb24geTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/cVJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIGc2ZSxHUnQ9TSgoKT0+e1VSdCgpO2c2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVZSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLHFSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgV1J0PU0oKCk9PntHUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyICR5PU0oKCk9Pnt9KTt2YXIgWVJ0LGpSdD1NKCgpPT57JHkoKTtZUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgWFJ0LCRSdD1NKCgpPT57JHkoKTtydHQoKTtYUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57JHkoKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgS1J0LFpSdD1NKCgpPT57JHkoKTtudHQoKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBKUnQsUVJ0PU0oKCk9PnskeSgpO0pSdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50PU0oKCk9PntqUnQoKTtydHQoKTskUnQoKTtaUnQoKTtudHQoKTtRUnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj12cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZ4NmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9djZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIHY2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24geDZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO2ttKCl9KTtmdW5jdGlvbiBUZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBlTnQsck50PU0oKCk9PntvQygpO2VOdD1UZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgbk50LGlOdD1NKCgpPT57b0MoKTtuTnQ9VGcoImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIG9OdCxhTnQ9TSgoKT0+e29DKCk7b050PVRnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBzTnQsbE50PU0oKCk9PntvQygpO3NOdD1UZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKGI2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gYjZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e3FFKCk7aXR0KCk7Y050PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIGhOdCxmTnQ9TSgoKT0+e3FFKCk7aXR0KCk7aE50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgcE50PU0oKCk9PntFTygpO3JOdCgpO2lOdCgpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpfSk7ZnVuY3Rpb24gcGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEt5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT13NmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiB3NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHBmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e0t5KCl9KTt2YXIgZE50LG1OdCxTNmUsZGYsYXR0PU0oKCk9PntLeSgpO290dCgpO2ROdD1hQyhwZiksbU50PWROdC5yaWdodCxTNmU9ZE50LmxlZnQsZGY9bU50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIGdOdD1NKCgpPT57c3R0KCl9KTt2YXIgX050PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHlOdCxFNmUsVDZlLGh0dD1NKCgpPT57eU50PUFycmF5LnByb3RvdHlwZSxFNmU9eU50LnNsaWNlLFQ2ZT15TnQubWFwfSk7dmFyIHZOdD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIFp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBiTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO3ZOdCgpO3V0dCgpO3hOdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIHdOdD1NKCgpPT57aHR0KCk7S3koKTt0dygpO0FPKCl9KTt2YXIgU050PU0oKCk9PntjdHQoKX0pO3ZhciBNTnQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e3R3KCl9KTt2YXIgVE50PU0oKCk9PntLeSgpO3R3KCk7QU8oKX0pO3ZhciBDTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e0t5KCl9KTt2YXIgSU50PU0oKCk9Pnt9KTt2YXIgTE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBrTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIG1mPU0oKCk9PnthdHQoKTtLeSgpO290dCgpO2dOdCgpO19OdCgpO2N0dCgpO3V0dCgpO2JOdCgpO3dOdCgpO1NOdCgpO190dCgpO01OdCgpO0VOdCgpO1ROdCgpO0NOdCgpO3l0dCgpO3N0dCgpO0FOdCgpO0FPKCk7ZnR0KCk7UE50KCk7SU50KCk7TE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7a050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiBSTnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBmbCxKeSxJTz1NKCgpPT57Zmw9IiQiO1BPLnByb3RvdHlwZT1STnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2ZsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tmbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1mbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1mbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09ZmwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O0p5PVJOdH0pO3ZhciBOTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBrNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBReSxETnQ9TSgoKT0+e0lPKCk7UXk9SnkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1rNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6UXkuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1tmbCtlXT1lLHRoaXN9LHJlbW92ZTpReS5yZW1vdmUsY2xlYXI6UXkuY2xlYXIsdmFsdWVzOlF5LmtleXMsc2l6ZTpReS5zaXplLGVtcHR5OlF5LmVtcHR5LGVhY2g6UXkuZWFjaH19KTt2YXIgT050PU0oKCk9Pnt9KTt2YXIgek50PU0oKCk9Pnt9KTt2YXIgRk50PU0oKCk9Pnt9KTt2YXIgQk50PU0oKCk9PntOTnQoKTtETnQoKTtJTygpO09OdCgpO3pOdCgpO0ZOdCgpfSk7dmFyIEhOdCxydyxwbCxDZz1NKCgpPT57SE50PUFycmF5LnByb3RvdHlwZSxydz1ITnQubWFwLHBsPUhOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PUp5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpwbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1KeSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57Qk50KCk7Q2coKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gVk50KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZOdCh0KCkpfSxlfWZ1bmN0aW9uIFVOdCgpe3JldHVybiBWTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBxTnQ9TSgoKT0+e21mKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZXYoKXt9ZnVuY3Rpb24gV050KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSDZlKCl7cmV0dXJuIFpOdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBZTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBQZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1SNmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9qTnQodCk6cj09PTM/bmV3IGhhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU42ZS5leGVjKGUpKT9uZXcgaGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9RDZlLmV4ZWMoZSkpP25ldyBoYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1PNmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9ejZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUY2ZS5leGVjKGUpKT9LTnQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1CNmUuZXhlYyhlKSk/S050KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6R050Lmhhc093blByb3BlcnR5KGUpP2pOdChHTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBoYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGpOdChlKXtyZXR1cm4gbmV3IGhhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGhhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGV2fHwoZT1QZyhlKSksZT8oZT1lLnJnYigpLG5ldyBoYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgaGF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgaGEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGhhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gJE50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBLTnQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBnZihlLHQscixuKX1mdW5jdGlvbiBaTnQoZSl7aWYoZSBpbnN0YW5jZW9mIGdmKXJldHVybiBuZXcgZ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZXZ8fChlPVBnKGUpKSwhZSlyZXR1cm4gbmV3IGdmO2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBnZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIEpOdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Wk50KGUpOm5ldyBnZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgQWcsdHYsb3csaEMsX2YsUjZlLE42ZSxENmUsTzZlLHo2ZSxGNmUsQjZlLEdOdCxFdHQ9TSgoKT0+e2J0dCgpO0FnPS43LHR2PTEvQWcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLF9mPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixSNmU9L14jKFswLTlhLWZdezMsOH0pJC8sTjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxENmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW19mLF9mLF9mXSsiXFwpJCIpLE82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLHo2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW19mLF9mLF9mLGhDXSsiXFwpJCIpLEY2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMsX2YsX2ZdKyJcXCkkIiksQjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMsX2YsX2YsaENdKyJcXCkkIiksR050PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KGV2LFBnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OldOdCxmb3JtYXRIZXg6V050LGZvcm1hdEhzbDpINmUsZm9ybWF0UmdiOllOdCx0b1N0cmluZzpZTnR9KTtpdyhoYSxhdyx1Qyhldix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90djpNYXRoLnBvdyh0dixlKSxuZXcgaGEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/QWc6TWF0aC5wb3coQWcsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6WE50LGZvcm1hdEhleDpYTnQsZm9ybWF0UmdiOiROdCx0b1N0cmluZzokTnR9KSk7aXcoZ2YsSk50LHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGhhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBRTnQsdER0LGVEdD1NKCgpPT57UU50PU1hdGguUEkvMTgwLHREdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFY2ZShlKXtpZihlIGluc3RhbmNlb2YgcnYpcmV0dXJuIG5ldyBydihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBoYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oaUR0Km4rckR0KnQtbkR0KnIpLyhpRHQrckR0LW5EdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKnREdC0xMjA6TmFOO3JldHVybiBuZXcgcnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gJGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1Y2ZShlKTpuZXcgcnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHJ2KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgb0R0LFR0dCxDdHQsTk8sZkMsckR0LG5EdCxpRHQsYUR0PU0oKCk9PntidHQoKTtFdHQoKTtlRHQoKTtvRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsckR0PWZDKk5PLG5EdD1mQypUdHQsaUR0PVR0dCpDdHQtTk8qb0R0O2l3KHJ2LCRhLHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUU50LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBoYSgyNTUqKHQrcioob0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO2FEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gc0R0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgY0R0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1RHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBVNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBoRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGZEdChlKXtyZXR1cm4oZT0rZSk9PTE/bmQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1U2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gbmQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIHBEdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsbDVuLGM1bixkRHQ9TSgoKT0+e3N3KCk7UHR0KCk7Y0R0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9ZkR0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9bmQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2w1bj1wRHQoc0R0KSxjNW49cER0KGxEdCl9KTtmdW5jdGlvbiBtRHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gZ0R0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgX0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1udihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciB2RHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiB4RHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBiRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gd0R0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bnYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgU0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gcTZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBHNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6eWYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/RzZlKGxbMF0ueCk6cTZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LEVEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIG52KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3lmOnI9PT0ic3RyaW5nIj8obj1QZyh0KSk/KHQ9bixrdHQpOk1EdDp0IGluc3RhbmNlb2YgUGc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP3hEdDpnRHQodCk/bUR0OkFycmF5LmlzQXJyYXkodCk/eUR0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT93RHQ6eWYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO2REdCgpO3ZEdCgpO2JEdCgpO09PKCk7U0R0KCk7RUR0KCk7SXR0KCk7X0R0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIFREdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ0R0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9JGEoaSkpLmgsKG89JGEobykpLmgpLHM9bmQoaS5zLG8ucyksbD1uZChpLmwsby5sKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgVzZlLGN3LEFEdD1NKCgpPT57c3coKTtMdHQoKTtXNmU9Q0R0KGhEdCksY3c9Q0R0KG5kKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO1REdCgpO0FEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gWTZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIGo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBYNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gJDZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPWRmKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIElnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIGlkKGUsdCl7dmFyIHI9UER0LG49UER0LGk9bnYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/JDZlOlg2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/WTZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP2o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1wbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49cGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBQRHQsZEM9TSgoKT0+e21mKCk7dXcoKTtDZygpO3pPKCk7T3R0KCk7UER0PVswLDFdfSk7ZnVuY3Rpb24gSUR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBpdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUpe3JldHVybiBlPWl2KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIExEdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIga0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSRHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBORHQ9TSgoKT0+e30pO2Z1bmN0aW9uIExnKGUpe2lmKCEodD1LNmUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciBLNmUsenR0PU0oKCk9PntLNmU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7TGcucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEREdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikraXYoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBGRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LEJEdD1NKCgpPT57bUMoKTtCdHQoKTtGRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpJRHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOnpEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBIRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6TER0KFZEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OlJEdChWRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9RER0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/VUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1MZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1VRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFZEdCxVRHQsR0R0PU0oKCk9PntnQygpO2tEdCgpO05EdCgpO3p0dCgpO09EdCgpO0JEdCgpO0J0dCgpO0hEdCgpO1ZEdD1BcnJheS5wcm90b3R5cGUubWFwLFVEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89cUR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLFdEdD1NKCgpPT57R0R0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwtdmYoTWF0aC5hYnMoZSkpKX12YXIgWUR0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHZmKHQpLzMpKSkqMy12ZihNYXRoLmFicyhlKSkpfXZhciBqRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx2Zih0KS12ZihlKSkrMX12YXIgWER0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57V0R0KCk7enR0KCk7WUR0KCk7akR0KCk7WER0KCl9KTtmdW5jdGlvbiAkRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89WnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1MZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciBLRHQ9TSgoKT0+e21mKCk7anR0KCl9KTtmdW5jdGlvbiBvZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gJER0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1pZChwQyx5Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhlLFVPKCkpfSxvZChlKX12YXIgcHc9TSgoKT0+e21mKCk7dXcoKTtkQygpO0tEdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sb2QodCl9dmFyIFpEdD1NKCgpPT57Q2coKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaNmUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBKNmUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIFE2ZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gSkR0KGUpe3JldHVybiBlPT09MTA/UTZlOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIFFEdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gdE90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9aWQoWjZlLEo2ZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49UUR0KDEwKSxpPUpEdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPVFEdChyKSxpPUpEdChyKSx0KClbMF08MCYmKG49dE90KG4pLGk9dE90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxXTygpLmJhc2UocikpfSxlfXZhciBlT3Q9TSgoKT0+e21mKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PWlkKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHQsX0MoKS5leHBvbmVudChlKSl9LG9kKHQpfWZ1bmN0aW9uIHJPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgbk90PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbZGYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KHBmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGlPdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW2RmKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9cGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LG9kKG8pfXZhciBvT3Q9TSgoKT0+e21mKCk7Q2coKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFtkZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgYU90PU0oKCk9PnttZigpO0NnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LEthPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LHNPdCxsT3Q9TSgoKT0+e0thKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxzT3Q9JE8ucmFuZ2V9KTt2YXIgb3Ysd2MsZ3csS08sWk8seGY9TSgoKT0+e292PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgY090LF93LHVPdCxoT3Q9TSgoKT0+e0thKCk7eGYoKTtjT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqb3YpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL292fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1jT3QsdU90PWNPdC5yYW5nZX0pO3ZhciBmT3QsWnR0LHRJZSxwT3Q9TSgoKT0+e0thKCk7eGYoKTtmT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Zk90LHRJZT1mT3QucmFuZ2V9KTt2YXIgZE90LEp0dCxlSWUsbU90PU0oKCk9PntLYSgpO3hmKCk7ZE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqb3YtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD1kT3QsZUllPWRPdC5yYW5nZX0pO3ZhciBnT3QseXcsckllLF9PdD1NKCgpPT57S2EoKTt4ZigpO2dPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9Z090LHJJZT1nT3QucmFuZ2V9KTtmdW5jdGlvbiBhdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgc3YsdncseU90LHZPdCxrZyx4T3QsYk90LHdPdCxuSWUsaUllLG9JZSxhSWUsc0llLGxJZSxTT3Q9TSgoKT0+e0thKCk7eGYoKTtzdj1hdigwKSx2dz1hdigxKSx5T3Q9YXYoMiksdk90PWF2KDMpLGtnPWF2KDQpLHhPdD1hdig1KSxiT3Q9YXYoNiksd090PXN2LnJhbmdlLG5JZT12dy5yYW5nZSxpSWU9eU90LnJhbmdlLG9JZT12T3QucmFuZ2UsYUllPWtnLnJhbmdlLHNJZT14T3QucmFuZ2UsbEllPWJPdC5yYW5nZX0pO3ZhciBNT3QsUXR0LGNJZSxFT3Q9TSgoKT0+e0thKCk7TU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1NT3QsY0llPU1PdC5yYW5nZX0pO3ZhciB0ZXQsYWQsdUllLFRPdD1NKCgpPT57S2EoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTthZD10ZXQsdUllPXRldC5yYW5nZX0pO3ZhciBDT3QsZWV0LGhJZSxBT3Q9TSgoKT0+e0thKCk7eGYoKTtDT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9Q090LGhJZT1DT3QucmFuZ2V9KTt2YXIgUE90LHJldCxmSWUsSU90PU0oKCk9PntLYSgpO3hmKCk7UE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVBPdCxmSWU9UE90LnJhbmdlfSk7dmFyIExPdCx4dyxwSWUsa090PU0oKCk9PntLYSgpO3hmKCk7TE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PUxPdCxwSWU9TE90LnJhbmdlfSk7ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgY3YsYncsUk90LE5PdCxSZyxET3QsT090LHpPdCxkSWUsbUllLGdJZSxfSWUseUllLHZJZSxGT3Q9TSgoKT0+e0thKCk7eGYoKTtjdj1sdigwKSxidz1sdigxKSxST3Q9bHYoMiksTk90PWx2KDMpLFJnPWx2KDQpLERPdD1sdig1KSxPT3Q9bHYoNiksek90PWN2LnJhbmdlLGRJZT1idy5yYW5nZSxtSWU9Uk90LnJhbmdlLGdJZT1OT3QucmFuZ2UsX0llPVJnLnJhbmdlLHlJZT1ET3QucmFuZ2UsdkllPU9PdC5yYW5nZX0pO3ZhciBCT3QsbmV0LHhJZSxIT3Q9TSgoKT0+e0thKCk7Qk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1CT3QseEllPUJPdC5yYW5nZX0pO3ZhciBpZXQsc2QsYkllLFZPdD1NKCgpPT57S2EoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtzZD1pZXQsYkllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57bE90KCk7aE90KCk7cE90KCk7bU90KCk7X090KCk7U090KCk7RU90KCk7VE90KCk7QU90KCk7SU90KCk7a090KCk7Rk90KCk7SE90KCk7Vk90KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmpPdCxlOmpPdCxmOkdJZSxnOnQ5ZSxHOnI5ZSxIOlZJZSxJOlVJZSxqOnFJZSxMOkpPdCxtOldJZSxNOllJZSxwOnN0LHE6U3QsUTpLT3QsczpaT3QsUzpqSWUsdTpYSWUsVTokSWUsVjpLSWUsdzpaSWUsVzpKSWUseDpudWxsLFg6bnVsbCx5OlFJZSxZOmU5ZSxaOm45ZSwiJSI6JE90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOlhPdCxlOlhPdCxmOnM5ZSxnOl85ZSxHOnY5ZSxIOmk5ZSxJOm85ZSxqOmE5ZSxMOnQ3dCxtOmw5ZSxNOmM5ZSxwOl90LHE6Y3QsUTpLT3QsczpaT3QsUzp1OWUsdTpoOWUsVTpmOWUsVjpwOWUsdzpkOWUsVzptOWUseDpudWxsLFg6bnVsbCx5Omc5ZSxZOnk5ZSxaOng5ZSwiJSI6JE90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6V090LGU6V090LGY6ekllLGc6R090LEc6cU90LEg6WU90LEk6WU90LGo6UkllLEw6T0llLG06a0llLE06TkllLHA6RCxxOkxJZSxROkJJZSxzOkhJZSxTOkRJZSx1OlRJZSxVOkNJZSxWOkFJZSx3OkVJZSxXOlBJZSx4OnosWDpVLHk6R090LFk6cU90LFo6SUllLCIlIjpGSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1VT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gVU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gTUllKGUpe3JldHVybiBlLnJlcGxhY2UoU0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKE1JZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEVJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElJZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBESWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGSWUoZSx0LHIpe3ZhciBuPXdJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEJJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFZJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBVSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHFJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KGFkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSk90KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBHSWUoZSx0KXtyZXR1cm4gSk90KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gV0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gakllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWEllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiAkSWUoZSx0KXtyZXR1cm4gR3Ioc3YuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFPdChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9rZyhlKTprZy5jZWlsKGUpfWZ1bmN0aW9uIEtJZShlLHQpe3JldHVybiBlPVFPdChlKSxHcihrZy5jb3VudChhZChlKSxlKSsoYWQoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFpJZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBKSWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFJZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdDllKGUsdCl7cmV0dXJuIGU9UU90KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBlOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHI5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/a2coZSk6a2cuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gbjllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBYT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBpOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBhOWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChzZChlKSxlKSx0LDMpfWZ1bmN0aW9uIHQ3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gczllKGUsdCl7cmV0dXJuIHQ3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGw5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGM5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHU5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGg5ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZjllKGUsdCl7cmV0dXJuIEdyKGN2LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBlN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/UmcoZSk6UmcuY2VpbChlKX1mdW5jdGlvbiBwOWUoZSx0KXtyZXR1cm4gZT1lN3QoZSksR3IoUmcuY291bnQoc2QoZSksZSkrKHNkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBkOWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gbTllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBnOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIF85ZShlLHQpe3JldHVybiBlPWU3dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24geTllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB2OWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1JnKGUpOlJnLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHg5ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gJE90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEtPdChlKXtyZXR1cm4rZX1mdW5jdGlvbiBaT3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgVU90LFRvLHdJZSxTSWUscjd0PU0oKCk9PntKTygpO1VPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sd0llPS9eJS8sU0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxuN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGk3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sbjd0LHQ3LGk3dCxvN3Q9TSgoKT0+e3I3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57bzd0KCl9KTtmdW5jdGlvbiB3OWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIFM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9aWQocEMseWYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxiOWVdLFt0LDEsYTd0XSxbdCwzLDMqYTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1aeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KFp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxTOWUpKTpoKCkubWFwKHc5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gczd0KCl7cmV0dXJuIGU3KGFkLFF0dCxzdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLGI5ZSxhN3QsaGV0LGZldD1NKCgpPT57bWYoKTt1dygpO0pPKCk7dWV0KCk7Q2coKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxiOWU9TUMqNyxhN3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGw3dCgpe3JldHVybiBlNyhzZCxuZXQsY3YseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBjN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBkbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciB1N3QsaDd0PU0oKCk9PntTdygpO3U3dD1kbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZjd0LHA3dD1NKCgpPT57U3coKTtmN3Q9ZGwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIGQ3dCxtN3Q9TSgoKT0+e1N3KCk7ZDd0PWRsKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciBnN3QsXzd0PU0oKCk9PntTdygpO2c3dD1kbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgeTd0LHY3dD1NKCgpPT57c3coKTt1dygpO3k3dD1jdygkYSgzMDAsLjUsMCksJGEoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiB3N3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIHg3dCxiN3QscjcsUzd0PU0oKCk9PntzdygpO3V3KCk7eDd0PWN3KCRhKC0xMDAsLjc1LC4zNSksJGEoODAsMS41LC44KSksYjd0PWN3KCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxyNz0kYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIE03dCxFN3QsVDd0LEM3dCxBN3Q9TSgoKT0+e1N3KCk7TTd0PW43KGRsKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksRTd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksVDd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksQzd0PW43KGRsKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxvZChpKX12YXIgUDd0PU0oKCk9PntwdygpfSk7dmFyIEk3dD1NKCgpPT57cU50KCk7WkR0KCk7cHcoKTtlT3QoKTt4dHQoKTtuT3QoKTtpT3QoKTtvT3QoKTthT3QoKTtmZXQoKTtjN3QoKTtoN3QoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtTN3QoKTtBN3QoKTtQN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gTTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBFOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/RTllOk05ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBUOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/VDllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBMN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgQm4obix0aGlzLl9wYXJlbnRzKX12YXIgazd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBDOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9DOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBCbihuLGkpfXZhciBON3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgTzd0LFR3LEQ3dCx1NyxkZXQ9TSgoKT0+e083dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoRDd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixPN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEQ3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PU83dH0pO2Z1bmN0aW9uIHo3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJuKG4sdGhpcy5fcGFyZW50cyl9dmFyIEY3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEI3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEg3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFY3dD1NKCgpPT57fSk7ZnVuY3Rpb24gQTllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUDllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9VTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9VTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gcTd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9QOWU6QTllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SDd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBCbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFU3dCxHN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vjd0KCk7VTd0PSIkIn0pO2Z1bmN0aW9uIFc3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIFk3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIGo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgQm4oYSx0aGlzLl9wYXJlbnRzKX12YXIgWDd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gJDd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBLN3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFo3dChlKXtlfHwoZT1JOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgQm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIEk5ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciByenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG56dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGl6dD1NKCgpPT57fSk7ZnVuY3Rpb24gb3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgYXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGs5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFI5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBEOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIE85ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBoenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/azllOkw5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP085ZTpEOWU6ci5sb2NhbD9OOWU6UjllKShyLHQpKX12YXIgZnp0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gejllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEY5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEI5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBwenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3o5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9COWU6RjllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBIOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gVTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIGR6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0g5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9VOWU6VjllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgbXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBnenQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBfenQoZSl9ZnVuY3Rpb24gX3p0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1nenQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB5enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gdnp0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHE5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt5enQodGhpcyxlKX19ZnVuY3Rpb24gRzllKGUpe3JldHVybiBmdW5jdGlvbigpe3Z6dCh0aGlzLGUpfX1mdW5jdGlvbiBXOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/eXp0OnZ6dCkodGhpcyxlKX19ZnVuY3Rpb24geHp0KGUsdCl7dmFyIHI9Z3p0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9XOWU6dD9xOWU6RzllKShyLHQpKX12YXIgYnp0PU0oKCk9PntfenQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gWTllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBqOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBYOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHd6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9ZOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1g5ZTpqOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgU3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkOWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBLOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWjllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsPyQ5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WjllOks5ZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVHp0KCl7cmV0dXJuIHRoaXMuZWFjaChKOWUpfXZhciBDenQ9TSgoKT0+e30pO2Z1bmN0aW9uIFE5ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEF6dCgpe3JldHVybiB0aGlzLmVhY2goUTllKX12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgTHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gdExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24ga3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKSxuPXQ9PW51bGw/dExlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBSenQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIGVMZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIE56dCgpe3JldHVybiB0aGlzLmVhY2goZUxlKX12YXIgRHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gbkxlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIE96dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9uTGU6ckxlKX12YXIgenp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBCenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlMZShlLHQscil7cmV0dXJuIGU9VXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFV6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBvTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIGFMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBzTGUoZSx0LHIpe3ZhciBuPVZ6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2lMZTpVenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gcXp0KGUsdCxyKXt2YXIgbj1vTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P3NMZTphTGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR3p0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBWenQsUHUsSHp0LHA3PU0oKCk9PntWenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoSHp0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEh6dHx8KFZ6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBXenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGxMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXenQodGhpcyxlLHQpfX1mdW5jdGlvbiBjTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV3p0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIFl6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2NMZTpsTGUpKGUsdCkpfXZhciBqenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBCbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBYenQoKXtyZXR1cm4gbmV3IEJuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQywkenQsU2M9TSgoKT0+e2s3dCgpO043dCgpO0Y3dCgpO0c3dCgpO2dldCgpO1k3dCgpO1g3dCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO3lldCgpO216dCgpO2J6dCgpO1N6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO3A3KCk7anp0KCk7QUM9W251bGxdO0JuLnByb3RvdHlwZT1YenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCbixzZWxlY3Q6TDd0LHNlbGVjdEFsbDpSN3QsZmlsdGVyOno3dCxkYXRhOnE3dCxlbnRlcjpCN3QsZXhpdDpXN3QsbWVyZ2U6ajd0LG9yZGVyOiQ3dCxzb3J0Olo3dCxjYWxsOlE3dCxub2RlczplenQsbm9kZTpuenQsc2l6ZTpvenQsZW1wdHk6c3p0LGVhY2g6Y3p0LGF0dHI6aHp0LHN0eWxlOnB6dCxwcm9wZXJ0eTpkenQsY2xhc3NlZDp4enQsdGV4dDp3enQsaHRtbDpNenQscmFpc2U6VHp0LGxvd2VyOkF6dCxhcHBlbmQ6SXp0LGluc2VydDprenQscmVtb3ZlOk56dCxjbG9uZTpPenQsZGF0dW06Rnp0LG9uOnF6dCxkaXNwYXRjaDpZenR9OyR6dD1YenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBCbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gS3p0KGUpe3JldHVybiBkNyhOZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBaenQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrdUxlKS50b1N0cmluZygzNil9dmFyIHVMZSxKenQ9TSgoKT0+e3VMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIERnKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBRenQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRGcoZSx0KX12YXIgdEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBlRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgQm4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQm4oW2U9PW51bGw/W106ZV0sQUMpfXZhciByRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBuRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRGcoZSxvKTtyZXR1cm4gbnVsbH12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EZyhlLHRbcl0pO3JldHVybiBpfXZhciBhRnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBzRnQ9TSgoKT0+e1p6dCgpO1RDKCk7Snp0KCk7ZGV0KCk7dEZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7ckZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2lGdCgpO2FGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGxGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LHV2LGhMZSxJdSxjRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCx1dj0xZS02LGhMZT1NZXQtdXY7RWV0LnByb3RvdHlwZT1sRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPnV2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+dXYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnV2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnV2fHxNYXRoLmFicyh0aGlzLl95MS1jKT51dikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+aExlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPnV2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1sRnR9KTt2YXIgUHc9TSgoKT0+e2NGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBPZz1NKCgpPT57fSk7ZnVuY3Rpb24gaEZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLHpnLHVGdCxfNyxMdSxodixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsemc9TWF0aC5jb3MsdUZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGh2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGZMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBwTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZExlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gbUxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIGdMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBfTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9odihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpodih1RnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGZGdCgpe3ZhciBlPWZMZSx0PXBMZSxyPUdlKDApLG49bnVsbCxpPWRMZSxvPW1MZSxhPWdMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKnpnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqemcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aHYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKnpnKHkpLFc9ZipMdSh5KSxaPWgqemcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9Zip6Zyh4KSxzdD1mKkx1KHgpLFN0PWgqemcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9fTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KGhGdCgobHQqX3QrS3QqY3QpLyhodihsdCpsdCtLdCpLdCkqaHYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9aHYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW3pnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgcEZ0PU0oKCk9PntQdygpO09nKCk7SXcoKX0pO2Z1bmN0aW9uIGRGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIG5ldyBkRnQoZSl9dmFyIExDPU0oKCk9PntkRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1GZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO09nKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUZnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO09nKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiBtRnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGdGdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0Z0KGUpe3JldHVybiBlfXZhciB5RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZGdCgpe3ZhciBlPV9GdCx0PW1GdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIHhGdD1NKCgpPT57T2coKTtnRnQoKTt5RnQoKTtJdygpfSk7ZnVuY3Rpb24gYkZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IGJGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoRmcpO2JGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciB3RnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gZnYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiB2TGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD15TGUscj12TGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHhMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIGJMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHdMZShlLHQscixuLGkpe3ZhciBvPWZ2KHQsciksYT1mdih0LHI9KHIraSkvMikscz1mdihuLHIpLGw9ZnYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gU0Z0KCl7cmV0dXJuIERldCh4TGUpfWZ1bmN0aW9uIE1GdCgpe3JldHVybiBEZXQoYkxlKX1mdW5jdGlvbiBFRnQoKXt2YXIgZT1EZXQod0xlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBURnQ9TSgoKT0+e1B3KCk7TmV0KCk7T2coKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBDRnQsU0xlLE03LEZldD1NKCgpPT57Q0Z0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksU0xlPUNGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvU0xlKSxuPXIqQ0Z0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgTUxlLEFGdCxFTGUsVExlLEU3LEJldD1NKCgpPT57SXcoKTtNTGU9Ljg5MDgxMzA5MTUyOTI4NTIsQUZ0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxFTGU9TWF0aC5zaW4oTWMvMTApKkFGdCxUTGU9LU1hdGguY29zKE1jLzEwKSpBRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpNTGUpLG49RUxlKnIsaT1UTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsQ0xlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksQ0xlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gSUZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBQRnQsTEZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO09nKCk7UEZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24ga0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIFJGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gTkZ0KGUpe3JldHVybiBuZXcgUkZ0KGUpfXZhciBERnQ9TSgoKT0+e05DKCk7T0MoKTtSRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIE9GdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gekZ0KGUpe3JldHVybiBuZXcgT0Z0KGUpfXZhciBGRnQ9TSgoKT0+e09DKCk7T0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gQkZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgSEZ0LFZGdD1NKCgpPT57T0MoKTtCRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgQkZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgVUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtVRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIHFGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtxRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIEdGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gV0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFlGdCxrNz1NKCgpPT57SXcoKTt6QygpO1dGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07WUZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgV0Z0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBqRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgWEZ0LCRGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO2pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gS0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFpGdCxKRnQ9TSgoKT0+e1lldCgpO2s3KCk7S0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IEtGdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gUUZ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB0QnQoZSl7cmV0dXJuIG5ldyBRRnQoZSl9dmFyIGVCdD1NKCgpPT57TkMoKTtRRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIHJCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gbkJ0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKHJCdChvKStyQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBpQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIG9CdChlKXt0aGlzLl9jb250ZXh0PW5ldyBhQnQoZSl9ZnVuY3Rpb24gYUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBzQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBsQnQoZSl7cmV0dXJuIG5ldyBvQnQoZSl9dmFyIGNCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGlCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsaUJ0KHRoaXMscj1uQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9bkJ0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KG9CdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07YUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gaEJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB1QnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBoQnQoZSl9dmFyIHBCdD1NKCgpPT57aEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPXVCdChlKSxpPXVCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24gZEJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gbUJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBfQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIEFMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHlCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1BTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIHZCdD1NKCgpPT57TmV0KCk7T2coKTtGdygpO0J3KCl9KTtmdW5jdGlvbiB4QnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIGJCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIHdCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBTQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1CdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBFQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBUQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBDQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24gQUJ0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFBCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIElCdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgTEJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBrQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgUkJ0PU0oKCk9PntCdygpfSk7dmFyIE5CdD1NKCgpPT57cEZ0KCk7QWV0KCk7eDcoKTt4RnQoKTt3RnQoKTtMZXQoKTtSZXQoKTtURnQoKTtMRnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtERnQoKTtGRnQoKTtPQygpO1ZGdCgpO1dldCgpO1lldCgpO3pDKCk7JEZ0KCk7SkZ0KCk7azcoKTtlQnQoKTtMQygpO2NCdCgpO3BCdCgpO19CdCgpO3ZCdCgpO2JCdCgpO1NCdCgpO0Z3KCk7RUJ0KCk7Q0J0KCk7TzcoKTtQQnQoKTtMQnQoKTtCdygpO1JCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQsZmE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxEQnQ9TSgoKT0+e2ZhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLFBzLGJmLEY3LEI3LHdmPU0oKCk9PntCQz0xZTMsUHM9NmU0LGJmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIE9CdCxRZXQsdHJ0LHpCdD1NKCgpPT57ZmEoKTt3ZigpO09CdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9T0J0LHRydD1PQnQucmFuZ2V9KTt2YXIgRkJ0LEJCdCxIQnQsVkJ0PU0oKCk9PntmYSgpO3dmKCk7RkJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvUHMpKlBzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLEJCdD1GQnQsSEJ0PUZCdC5yYW5nZX0pO3ZhciBVQnQscUJ0LEdCdCxXQnQ9TSgoKT0+e2ZhKCk7d2YoKTtVQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKlBzJWJmO3Q8MCYmKHQrPWJmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvYmYpKmJmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e2ZhKCk7d2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUHMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO2Z1bmN0aW9uIHB2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsS0J0LFpCdCxKQnQsUUJ0LHRIdCxlSHQsckh0PU0oKCk9PntmYSgpO3dmKCk7SDc9cHYoMCksZXJ0PXB2KDEpLHJydD1wdigyKSxucnQ9cHYoMyksaXJ0PXB2KDQpLG9ydD1wdig1KSxhcnQ9cHYoNiksc3J0PUg3LnJhbmdlLEtCdD1lcnQucmFuZ2UsWkJ0PXJydC5yYW5nZSxKQnQ9bnJ0LnJhbmdlLFFCdD1pcnQucmFuZ2UsdEh0PW9ydC5yYW5nZSxlSHQ9YXJ0LnJhbmdlfSk7dmFyIG5IdCxpSHQsb0h0LGFIdD1NKCgpPT57ZmEoKTtuSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksaUh0PW5IdCxvSHQ9bkh0LnJhbmdlfSk7dmFyIGxydCxzSHQsbEh0LGNIdD1NKCgpPT57ZmEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtzSHQ9bHJ0LGxIdD1scnQucmFuZ2V9KTt2YXIgdUh0LGhIdCxmSHQscEh0PU0oKCk9PntmYSgpO3dmKCk7dUh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KlBzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Qc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksaEh0PXVIdCxmSHQ9dUh0LnJhbmdlfSk7dmFyIGRIdCxtSHQsZ0h0LF9IdD1NKCgpPT57ZmEoKTt3ZigpO2RIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLG1IdD1kSHQsZ0h0PWRIdC5yYW5nZX0pO3ZhciB5SHQsdkh0LHhIdCxiSHQ9TSgoKT0+e2ZhKCk7d2YoKTt5SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksdkh0PXlIdCx4SHQ9eUh0LnJhbmdlfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LHdIdCxTSHQsTUh0LEVIdCxUSHQsQ0h0LEFIdD1NKCgpPT57ZmEoKTt3ZigpO1Y3PWR2KDApLGNydD1kdigxKSx1cnQ9ZHYoMiksaHJ0PWR2KDMpLGZydD1kdig0KSxwcnQ9ZHYoNSksZHJ0PWR2KDYpLG1ydD1WNy5yYW5nZSx3SHQ9Y3J0LnJhbmdlLFNIdD11cnQucmFuZ2UsTUh0PWhydC5yYW5nZSxFSHQ9ZnJ0LnJhbmdlLFRIdD1wcnQucmFuZ2UsQ0h0PWRydC5yYW5nZX0pO3ZhciBQSHQsSUh0LExIdCxrSHQ9TSgoKT0+e2ZhKCk7UEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLElIdD1QSHQsTEh0PVBIdC5yYW5nZX0pO3ZhciBncnQsUkh0LE5IdCxESHQ9TSgoKT0+e2ZhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07Ukh0PWdydCxOSHQ9Z3J0LnJhbmdlfSk7dmFyIE9IdD1NKCgpPT57ZmEoKTtEQnQoKTt6QnQoKTtWQnQoKTtXQnQoKTskQnQoKTtySHQoKTthSHQoKTtjSHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtBSHQoKTtrSHQoKTtESHQoKX0pO2Z1bmN0aW9uIHBhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHBhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsbXY9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgekh0LFc3LFBMZSxGSHQ9TSgoKT0+e212KCk7SEMoKTt6SHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PXpIdCxQTGU9ekh0LnJhbmdlfSk7ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LEJIdCxISHQsVncsVkh0LFVIdCxxSHQsSUxlLExMZSxrTGUsUkxlLE5MZSxETGUsR0h0PU0oKCk9PnttdigpO0hDKCk7VkM9Z3YoMCksSHc9Z3YoMSksQkh0PWd2KDIpLEhIdD1ndigzKSxWdz1ndig0KSxWSHQ9Z3YoNSksVUh0PWd2KDYpLHFIdD1WQy5yYW5nZSxJTGU9SHcucmFuZ2UsTExlPUJIdC5yYW5nZSxrTGU9SEh0LnJhbmdlLFJMZT1Wdy5yYW5nZSxOTGU9Vkh0LnJhbmdlLERMZT1VSHQucmFuZ2V9KTt2YXIgdnJ0LF92LE9MZSxXSHQ9TSgoKT0+e212KCk7dnJ0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpwYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07X3Y9dnJ0LE9MZT12cnQucmFuZ2V9KTt2YXIgWUh0LFk3LHpMZSxqSHQ9TSgoKT0+e212KCk7SEMoKTtZSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9WUh0LHpMZT1ZSHQucmFuZ2V9KTtmdW5jdGlvbiB5dihlKXtyZXR1cm4gcGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxYSHQsJEh0LHF3LEtIdCxaSHQsSkh0LEZMZSxCTGUsSExlLFZMZSxVTGUscUxlLFFIdD1NKCgpPT57bXYoKTtIQygpO1VDPXl2KDApLFV3PXl2KDEpLFhIdD15digyKSwkSHQ9eXYoMykscXc9eXYoNCksS0h0PXl2KDUpLFpIdD15dig2KSxKSHQ9VUMucmFuZ2UsRkxlPVV3LnJhbmdlLEJMZT1YSHQucmFuZ2UsSExlPSRIdC5yYW5nZSxWTGU9cXcucmFuZ2UsVUxlPUtIdC5yYW5nZSxxTGU9Wkh0LnJhbmdlfSk7dmFyIHhydCx2dixHTGUsdFZ0PU0oKCk9PnttdigpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3Z2PXhydCxHTGU9eHJ0LnJhbmdlfSk7dmFyIGVWdD1NKCgpPT57Rkh0KCk7R0h0KCk7V0h0KCk7akh0KCk7UUh0KCk7dFZ0KCl9KTtmdW5jdGlvbiBXTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOm9WdCxlOm9WdCxmOm1rZSxIOmZrZSxJOnBrZSxqOmRrZSxMOnVWdCxtOmdrZSxNOl9rZSxwOnN0LFE6bFZ0LHM6Y1Z0LFM6eWtlLHU6dmtlLFU6eGtlLFY6YmtlLHc6d2tlLFc6U2tlLHg6bnVsbCxYOm51bGwseTpNa2UsWTpFa2UsWjpUa2UsIiUiOnNWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDphVnQsZTphVnQsZjpJa2UsSDpDa2UsSTpBa2UsajpQa2UsTDpoVnQsbTpMa2UsTTpra2UscDpLdCxROmxWdCxzOmNWdCxTOlJrZSx1Ok5rZSxVOkRrZSxWOk9rZSx3OnprZSxXOkZrZSx4Om51bGwsWDpudWxsLHk6QmtlLFk6SGtlLFo6VmtlLCIlIjpzVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpuVnQsZTpuVnQsZjpsa2UsSDppVnQsSTppVnQsajppa2UsTDpza2UsbTpua2UsTTpva2UscDpELFE6dWtlLHM6aGtlLFM6YWtlLHU6S0xlLFU6WkxlLFY6SkxlLHc6JExlLFc6UUxlLHg6eixYOlUseTpla2UsWTp0a2UsWjpya2UsIiUiOmNrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PXJWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiByVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsV0xlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBYTGUoZSl7cmV0dXJuIGUucmVwbGFjZShqTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoWExlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gJExlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSkxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBva2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2tlKGUsdCxyKXt2YXIgbj1ZTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiB1a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZmtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIHBrZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gZGtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoX3YoZSksZSksdCwzKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIG1rZShlLHQpe3JldHVybiB1VnQoZSx0KSsiMDAwIn1mdW5jdGlvbiBna2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBfa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB5a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB2a2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIHhrZShlLHQpe3JldHVybiBnbihWQy5jb3VudChfdihlKSxlKSx0LDIpfWZ1bmN0aW9uIGJrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudChfdihlKSxlKSsoX3YoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHdrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBTa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoX3YoZSksZSksdCwyKX1mdW5jdGlvbiBNa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gVGtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiBhVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gQWtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBQa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh2dihlKSxlKSx0LDMpfWZ1bmN0aW9uIGhWdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gSWtlKGUsdCl7cmV0dXJuIGhWdChlLHQpKyIwMDAifWZ1bmN0aW9uIExrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGtrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIFJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIE5rZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gRGtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHZ2KGUpLGUpLHQsMil9ZnVuY3Rpb24gT2tlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHZ2KGUpLGUpKyh2dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gemtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIEZrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh2dihlKSxlKSx0LDIpfWZ1bmN0aW9uIEJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBWa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHNWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBsVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gY1Z0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIHJWdCxWbyxZTGUsakxlLGJydD1NKCgpPT57ZVZ0KCk7clZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxZTGU9L14lLyxqTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFVrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQscWtlLGZWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO3FrZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Va2U6akMoTXJ0KSxmVnQ9cWtlfSk7ZnVuY3Rpb24gR2tlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFdrZSxwVnQsZFZ0PU0oKCk9PntFcnQoKTskNygpO1drZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP0drZTpYQyhNcnQpLHBWdD1Xa2V9KTt2YXIgbVZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO2RWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4geHZ8fCh5VnQoWWtlKSx4dj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gWWtlKCl7eHY9MH1mdW5jdGlvbiBidigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9eHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIGdWdCgpe3h2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLFhrZSgpLHh2PTB9fWZ1bmN0aW9uIGprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0Pl9WdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIFhrZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS14djt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoZ1Z0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoamtlLF9WdCkpLFd3PTEseVZ0KGdWdCkpfX12YXIgV3csS0MsJEMsX1Z0LEs3LFpDLFo3LHh2LEo3LEpDLHlWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsX1Z0PTFlMyxaNz0wLHh2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx5VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07YnYucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJ2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gdlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgeFZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gYlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnYsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciB3VnQ9TSgoKT0+e1E3KCl9KTt2YXIgU1Z0PU0oKCk9PntRNygpO3hWdCgpO3dWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBsZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiAka2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIEtrZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1sZChlKTtyZXR1cm4odC5sb2NhbD9La2U6JGtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gWmtlKCl7fWZ1bmN0aW9uIHd2KGUpe3JldHVybiBlPT1udWxsP1prZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gTVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13dihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIEVWdD1NKCgpPT57U2YoKTtueigpfSk7ZnVuY3Rpb24gSmtlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/SmtlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gVFZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgQ1Z0PU0oKCk9PntTZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUFZ0PU0oKCk9PntTZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7U2YoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gTFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIga1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRa2UoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB0OGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1SVnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1SVnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBOVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3Q4ZTpRa2Usbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1MVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgUlZ0LERWdD1NKCgpPT57U2YoKTtEcnQoKTtrVnQoKTtSVnQ9IiQifSk7ZnVuY3Rpb24gT1Z0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgelZ0PU0oKCk9PntOcnQoKTtTZigpfSk7ZnVuY3Rpb24gRlZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBCVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEhWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntTZigpfSk7ZnVuY3Rpb24gVVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgcVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHVnQoZSl7ZXx8KGU9ZThlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBlOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFdWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIFlWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgJFZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLVnQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBaVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpWdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIFFWdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gcjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBuOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBpOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gYThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBzOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gaVV0KGUsdCl7dmFyIHI9bGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP244ZTpyOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9zOGU6YThlOnIubG9jYWw/bzhlOmk4ZSkocix0KSl9dmFyIG9VdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gYzhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gdThlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIGFVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/bDhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3U4ZTpjOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpCZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gaDhlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBmOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHA4ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBzVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9oOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/cDhlOmY4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGxVdD1NKCgpPT57fSk7ZnVuY3Rpb24gY1V0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgdVV0KGUpfWZ1bmN0aW9uIHVVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9Y1V0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaFV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGZVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBkOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aFV0KHRoaXMsZSl9fWZ1bmN0aW9uIG04ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtmVXQodGhpcyxlKX19ZnVuY3Rpb24gZzhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP2hVdDpmVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIHBVdChlLHQpe3ZhciByPWNVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZzhlOnQ/ZDhlOm04ZSkocix0KSl9dmFyIGRVdD1NKCgpPT57dVV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIF84ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24geThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gdjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBtVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/XzhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj92OGU6eThlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIGdVdD1NKCgpPT57fSk7ZnVuY3Rpb24geDhlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gYjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIHc4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIF9VdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD94OGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3c4ZTpiOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHlVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIHZVdCgpe3JldHVybiB0aGlzLmVhY2goUzhlKX12YXIgeFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBNOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBiVXQoKXtyZXR1cm4gdGhpcy5lYWNoKE04ZSl9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gU1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE1VdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBFOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBFVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9FOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp3dih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIFRVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIFQ4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIENVdCgpe3JldHVybiB0aGlzLmVhY2goVDhlKX12YXIgQVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEE4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUFV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0E4ZTpDOGUpfXZhciBJVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIExVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIGtVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUDhlKGUsdCxyKXtyZXR1cm4gZT1EVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gRFV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIEk4ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gTDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGs4ZShlLHQscil7dmFyIG49TlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UDhlOkRVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBPVXQoZSx0LHIpe3ZhciBuPUk4ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/azhlOkw4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgTlV0LEJydCxSVXQselV0PU0oKCk9PntOVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFJVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBSVXR8fChOVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gRlV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBSOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRlV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gTjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBCVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9OOGU6UjhlKShlLHQpKX12YXIgSFV0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFZVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxEOGUpfXZhciBEOGUsY2QsU2Y9TSgoKT0+e0VWdCgpO0NWdCgpO1BWdCgpO0RWdCgpO0RydCgpO3pWdCgpO0JWdCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3pydCgpO2xVdCgpO2RVdCgpO2dVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO3pVdCgpO0hVdCgpO0Q4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVZVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpNVnQsc2VsZWN0QWxsOlRWdCxmaWx0ZXI6QVZ0LGRhdGE6TlZ0LGVudGVyOklWdCxleGl0Ok9WdCxqb2luOkZWdCxtZXJnZTpIVnQsb3JkZXI6VVZ0LHNvcnQ6R1Z0LGNhbGw6WVZ0LG5vZGVzOlhWdCxub2RlOktWdCxzaXplOkpWdCxlbXB0eTp0VXQsZWFjaDpyVXQsYXR0cjppVXQsc3R5bGU6YVV0LHByb3BlcnR5OnNVdCxjbGFzc2VkOnBVdCx0ZXh0Om1VdCxodG1sOl9VdCxyYWlzZTp2VXQsbG93ZXI6YlV0LGFwcGVuZDpTVXQsaW5zZXJ0OkVVdCxyZW1vdmU6Q1V0LGNsb25lOlBVdCxkYXR1bTpMVXQsb246T1V0LGRpc3BhdGNoOkJVdH07Y2Q9VlV0fSk7dmFyIE1mPU0oKCk9PntScnQoKTtleigpO1NmKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIHFVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBGOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBVVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPU84ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIE84ZSxIcnQsR1V0PU0oKCk9PntPOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPXFVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49ejhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9RjhlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1VVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1VVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9cVV0fSk7dmFyIFdVdD1NKCgpPT57R1V0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBTdnx8KFhVdChCOGUpLFN2PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBCOGUoKXtTdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gJFV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PVN2LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBZVXQoKXtTdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5eyRVdCgpfWZpbmFsbHl7anc9MCxWOGUoKSxTdj0wfX1mdW5jdGlvbiBIOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5qVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBWOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtU3Y7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KFlVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEg4ZSxqVXQpKSxqdz0xLFhVdChZVXQpKX19dmFyIGp3LG5BLHJBLGpVdCxzeixpQSxseixTdixjeixvQSxYVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxqVXQ9MWUzLGx6PTAsU3Y9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFhVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgS1V0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO0tVdCgpfSk7ZnVuY3Rpb24gSGcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtHOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlU4ZSx0d2VlbjpxOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6SlV0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+SlV0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBHOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1aVXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1aVXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBVOGUscThlLEpVdCxmeixsQSxHcnQsWlV0LHB6LHNBLEFjPU0oKCk9PntXVXQoKTtxcnQoKTtVOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLHE4ZT1bXSxKVXQ9MCxmej0xLGxBPTIsR3J0PTMsWlV0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gUVV0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIHRxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBlcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIG5xdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEo4ZSgpe3JldHVybiBjcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gaXF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9VzhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/b3F0KHQpOnI9PT0zP25ldyBtbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1ZOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0sdFsyXSx0WzNdLDEpOih0PWo4ZS5leGVjKGUpKT9uZXcgbWwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9WDhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PSQ4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1LOGUuZXhlYyhlKSk/bHF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9WjhlLmV4ZWMoZSkpP2xxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOnJxdC5oYXNPd25Qcm9wZXJ0eShlKT9vcXQocnF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgbWwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBvcXQoZSl7cmV0dXJuIG5ldyBtbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBtbChlLHQscixuKX1mdW5jdGlvbiBROGUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VmcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgbWwoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IG1sfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ROGUoZSk6bmV3IG1sKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBtbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gYXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIHNxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gbHF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgRWYoZSx0LHIsbil9ZnVuY3Rpb24gY3F0KGUpe2lmKGUgaW5zdGFuY2VvZiBFZilyZXR1cm4gbmV3IEVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1WZyhlKSksIWUpcmV0dXJuIG5ldyBFZjtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgRWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiB1cXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2NxdChlKTpuZXcgRWYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEVmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLFRmLFc4ZSxZOGUsajhlLFg4ZSwkOGUsSzhlLFo4ZSxycXQsaHF0PU0oKCk9PntlcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixUZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsVzhlPS9eIyhbMC05YS1mXXszLDh9KSQvLFk4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksajhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tUZixUZixUZl0rIlxcKSQiKSxYOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSwkOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUZixUZixUZixoQV0rIlxcKSQiKSxLOGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLFRmLFRmXSsiXFwpJCIpLFo4ZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLFRmLFRmLGhBXSsiXFwpJCIpLHJxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxWZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpucXQsZm9ybWF0SGV4Om5xdCxmb3JtYXRIc2w6SjhlLGZvcm1hdFJnYjppcXQsdG9TdHJpbmc6aXF0fSk7bXoobWwsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBtbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDphcXQsZm9ybWF0SGV4OmFxdCxmb3JtYXRSZ2I6c3F0LHRvU3RyaW5nOnNxdH0pKTtteihFZix1cXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IG1sKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e2hxdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZnF0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgZHF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG1xdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gZVJlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gZ3F0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/ZVJlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dFJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIF9xdD1NKCgpPT57bXF0KCl9KTtmdW5jdGlvbiB5cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosclJlLG5SZSx2cXQ9TSgoKT0+eyRydCgpO1pydCgpO2RxdCgpO19xdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z3F0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO3JSZT15cXQoZnF0KSxuUmU9eXF0KHBxdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGlSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gb1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP29SZShsWzBdLngpOmlSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCx4cXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqYnF0LHNrZXdYOk1hdGguYXRhbihsKSpicXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBicXQsYnosd3F0PU0oKCk9PnticXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBNcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxTcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9U3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIEVxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsU3F0LHd6LFRxdD1NKCgpPT57d3F0KCl9KTtmdW5jdGlvbiBDcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsQXF0PU0oKCk9Pnt4eigpO1RxdCgpO2ludD1DcXQoTXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1DcXQoRXF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7eHF0KCk7QXF0KCk7dnF0KCl9KTtmdW5jdGlvbiBhUmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBzUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFBxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2FSZTpzUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVmc/dno6KHI9VmcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gbFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBjUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiB1UmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZlJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBwUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gSXF0KGUsdCl7dmFyIHI9bGQoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP3BSZTpmUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9jUmU6bFJlKShyKTooci5sb2NhbD9oUmU6dVJlKShyLG4sdCsiIikpfXZhciBMcXQ9TSgoKT0+e1N6KCk7TWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24gZFJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gbVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBrcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWxkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/ZFJlOm1SZSkobix0KSl9dmFyIFJxdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIGdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBfUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/Z1JlOl9SZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIERxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHlSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB2UmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gT3F0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eVJlOnZSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIHpxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh4UmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgQnF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gSHF0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBWcXQ9TSgoKT0+e01mKCk7dWQoKX0pO2Z1bmN0aW9uIFVxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBxcXQ9TSgoKT0+e3VkKCl9KTtmdW5jdGlvbiBiUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiB3UmUoZSx0LHIpe3ZhciBuLGksbz1iUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gR3F0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2god1JlKHIsZSx0KSl9dmFyIFdxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIFNSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gWXF0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLFNSZSh0aGlzLl9pZCkpfXZhciBqcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXd2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsSGcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciAkcXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gS3F0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZIZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBacXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gSnF0KCl7cmV0dXJuIG5ldyBNUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBNUmUsUXF0PU0oKCk9PntNZigpO01SZT1jZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBFUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gVFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIENSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gQVJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gdEd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsRVJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLFRSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/QVJlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkNSZShlLG4sdCsiIikscil9dmFyIGVHdD1NKCgpPT57U3ooKTtNZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBQUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIHJHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBuR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIElSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBpR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xSZShadyh0aGlzLCJ0ZXh0IixlKSk6SVJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBvR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiBhR3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7SGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgc0d0PU0oKCk9Pnt1ZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIGNkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisra1JlfXZhciBrUmUsSncsdWQ9TSgoKT0+e01mKCk7THF0KCk7UnF0KCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7ZEEoKTtrUmU9MDtKdz1jZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OlhxdCxzZWxlY3RBbGw6S3F0LGZpbHRlcjpIcXQsbWVyZ2U6VXF0LHNlbGVjdGlvbjpKcXQsdHJhbnNpdGlvbjphR3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOkdxdCxhdHRyOklxdCxhdHRyVHdlZW46a3F0LHN0eWxlOnRHdCxzdHlsZVR3ZWVuOnJHdCx0ZXh0OmlHdCxyZW1vdmU6WXF0LHR3ZWVuOlBxdCxkZWxheTpOcXQsZHVyYXRpb246T3F0LGVhc2U6RnF0fX0pO2Z1bmN0aW9uIFJSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBsR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkhnKGwsZSx0LGMsYSxyfHxSUmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LGNHdD1NKCgpPT57dWQoKTtBYygpO0lfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgdUd0PU0oKCk9PntNZigpO3RxdCgpO2NHdCgpO2NkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9UVV0O2NkLnByb3RvdHlwZS50cmFuc2l0aW9uPWxHdH0pO2Z1bmN0aW9uIGhHdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxOUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIE5SZSxmR3Q9TSgoKT0+e3VkKCk7QWMoKTtOUmU9W251bGxdfSk7dmFyIHBHdD1NKCgpPT57dUd0KCk7dWQoKTtmR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGRHdD1NKCgpPT57fSk7ZnVuY3Rpb24gbUd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGdHdChlKXtyZXR1cm4gZVsxXX12YXIgX0d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24geUd0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT15R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz15R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxaYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBEUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIE9SZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiB2R3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFPUmUobz1Bb1tpXSxlLHQscixuKXx8IURSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIHhHdChlKXtyZXR1cm4gWmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIHpSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gRlJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBiR3QoKXtmb3IodmFyIGU9MCx0PVphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9WmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT16UmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gd0d0KGUsdCxyLG4pe3ZhciBpPVphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1GUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9WmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1aYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gQlJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE12KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1NR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1TR3QucG9wKCl8fG5ldyBCUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBFdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksU0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIFNHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtTR3Q9W119KTtmdW5jdGlvbiBIUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRUd0KGUpe3ZhciB0PVRHdC5wb3AoKXx8bmV3IEhSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7RXYoZSksVHYucmVtb3ZlKGUpLFRHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIENHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksRXYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksRXYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE12KGwpLE12KGMpfWZ1bmN0aW9uIEFHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPVR2Ll87czspaWYobz1QR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtVlJlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9eEd0KGUpO3ZhciBsPUVHdChlKTtpZihUdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtFdihuKSxpPUVHdChuLnNpdGUpLFR2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksTXYobiksTXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufUV2KG4pLEV2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxNdihuKSxNdihpKX19ZnVuY3Rpb24gUEd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gVlJlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFBHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIFRHdCxJR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO1RHdD1bXX0pO2Z1bmN0aW9uIFVSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24gcVJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KHFSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLFphPW5ldyBBcnJheShlLmxlbmd0aCksVHY9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihBR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylDR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoYkd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dkd0KGEscyxsLGMpLHdHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9WmEsVHY9blM9QW89WmE9bnVsbH12YXIgV3IsTUd0LFR2LFphLG5TLEFvLHJTPU0oKCk9PntJR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixNR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZVUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBMR3QoKXt2YXIgZT1tR3QsdD1nR3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIGtHdD1NKCgpPT57ZEd0KCk7X0d0KCk7clMoKX0pO3ZhciBSR3Q9TSgoKT0+e2tHdCgpfSk7ZnVuY3Rpb24gREd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIFdSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFlSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIE5HdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09R1JlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgR1JlLHZBLE9HdD1NKCgpPT57R1JlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1ER3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPVdSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVlSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Tkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Tkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9REd0fSk7dmFyIG1udD1NKCgpPT57T0d0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGhkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIGpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gWFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWhkKGUpO3JldHVybih0LmxvY2FsP1hSZTpqUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiAkUmUoKXt9ZnVuY3Rpb24gQ3YoZSl7cmV0dXJuIGU9PW51bGw/JFJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiB6R3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUN2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgRkd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiBLUmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD9LUmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBCR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBIR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBVR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBHR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBXR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFpSZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIEpSZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVlHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVlHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIGpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/SlJlOlpSZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUdHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBZR3QsWEd0PU0oKCk9PntPdSgpO3dudCgpO1dHdCgpO1lHdD0iJCJ9KTtmdW5jdGlvbiAkR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciBLR3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBaR3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIEpHdD1NKCgpPT57fSk7ZnVuY3Rpb24gUUd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBlV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciByV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG5XdChlKXtlfHwoZT1RUmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFFSZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgaVd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gb1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBsV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIHVXdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHJOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBpTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIG9OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBfV3QoZSx0KXt2YXIgcj1oZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/ZU5lOnROZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP29OZTppTmU6ci5sb2NhbD9uTmU6ck5lKShyLHQpKX12YXIgeVd0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBzTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBsTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gdld0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9hTmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/bE5lOnNOZSkoZSx0LHI9PW51bGw/IiI6cikpOlVnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBjTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHVOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gaE5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHhXdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP2NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9oTmU6dU5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgYld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3V3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBTV3QoZSl9ZnVuY3Rpb24gU1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz13V3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBNV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gRVd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtNV3QodGhpcyxlKX19ZnVuY3Rpb24gcE5lKGUpe3JldHVybiBmdW5jdGlvbigpe0VXdCh0aGlzLGUpfX1mdW5jdGlvbiBkTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TVd0OkVXdCkodGhpcyxlKX19ZnVuY3Rpb24gVFd0KGUsdCl7dmFyIHI9d1d0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9kTmU6dD9mTmU6cE5lKShyLHQpKX12YXIgQ1d0PU0oKCk9PntTV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gbU5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBnTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBfTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEFXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9tTmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP19OZTpnTmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB2TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24geE5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gSVd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3lOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/eE5lOnZOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24ga1d0KCl7cmV0dXJuIHRoaXMuZWFjaChiTmUpfXZhciBSV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdOZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE5XdCgpe3JldHVybiB0aGlzLmVhY2god05lKX12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgeld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIFNOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEZXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP1NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkN2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgQld0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gTU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSFd0KCl7cmV0dXJuIHRoaXMuZWFjaChNTmUpfXZhciBWV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEVOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVE5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBVV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/VE5lOkVOZSl9dmFyIHFXdD1NKCgpPT57fSk7ZnVuY3Rpb24gR1d0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgV1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDTmUoZSx0LHIpe3JldHVybiBlPVhXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBYV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24gQU5lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBQTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSU5lKGUsdCxyKXt2YXIgbj1qV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9DTmU6WFd0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uICRXdChlLHQscil7dmFyIG49QU5lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9JTmU6UE5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgald0LFlyLFlXdCx6ej1NKCgpPT57ald0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFlXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBZV3R8fChqV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gS1d0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBMTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS1d0KHRoaXMsZSx0KX19ZnVuY3Rpb24ga05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtXdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBaV3QoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9rTmU6TE5lKShlLHQpKX12YXIgSld0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFFXdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQsZmQsT3U9TSgoKT0+e0ZHdCgpO0hHdCgpO1VHdCgpO1hHdCgpO3dudCgpO0tHdCgpO0pHdCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO01udCgpO2JXdCgpO0NXdCgpO1BXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO3p6KCk7Sld0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9UVd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OnpHdCxzZWxlY3RBbGw6Qkd0LGZpbHRlcjpWR3QsZGF0YTpqR3QsZW50ZXI6cUd0LGV4aXQ6JEd0LGpvaW46Wkd0LG1lcmdlOlFHdCxvcmRlcjplV3Qsc29ydDpuV3QsY2FsbDpvV3Qsbm9kZXM6c1d0LG5vZGU6Y1d0LHNpemU6aFd0LGVtcHR5OnBXdCxlYWNoOm1XdCxhdHRyOl9XdCxzdHlsZTp2V3QscHJvcGVydHk6eFd0LGNsYXNzZWQ6VFd0LHRleHQ6QVd0LGh0bWw6SVd0LHJhaXNlOmtXdCxsb3dlcjpOV3QsYXBwZW5kOk9XdCxpbnNlcnQ6Rld0LHJlbW92ZTpIV3QsY2xvbmU6VVd0LGRhdHVtOkdXdCxvbjokV3QsZGlzcGF0Y2g6Wld0fTtmZD1RV3R9KTtmdW5jdGlvbiBwZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIHRZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgZVl0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIHJZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgSXM9TSgoKT0+e3hudCgpO2VZdCgpO2t6KCk7dFl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO3JZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIG5ZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGlZdD1NKCgpPT57SXMoKTtuWXQoKX0pO3ZhciBvWXQ9TSgoKT0+e2lZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgYVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBsWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBITmUoKXtyZXR1cm4gZFl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGNZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVJOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P3VZdCh0KTpyPT09Mz9uZXcgZ2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Tk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdLHRbMl0sdFszXSwxKToodD1ETmUuZXhlYyhlKSk/bmV3IGdsKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PU9OZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD16TmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9Rk5lLmV4ZWMoZSkpP3BZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PUJOZS5leGVjKGUpKT9wWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpzWXQuaGFzT3duUHJvcGVydHkoZSk/dVl0KHNZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IGdsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdVl0KGUpe3JldHVybiBuZXcgZ2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgZ2woZSx0LHIsbil9ZnVuY3Rpb24gVk5lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPXFnKGUpKSxlPyhlPWUucmdiKCksbmV3IGdsKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBnbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Vk5lKGUpOm5ldyBnbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGhZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBmWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHBZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IENmKGUsdCxyLG4pfWZ1bmN0aW9uIGRZdChlKXtpZihlIGluc3RhbmNlb2YgQ2YpcmV0dXJuIG5ldyBDZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9cWcoZSkpLCFlKXJldHVybiBuZXcgQ2Y7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IENmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gbVl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kWXQoZSk6bmV3IENmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBDZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxBZixSTmUsTk5lLEROZSxPTmUsek5lLEZOZSxCTmUsc1l0LGdZdD1NKCgpPT57YVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQWY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFJOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxOTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEROZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbQWYsQWYsQWZdKyJcXCkkIiksT05lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksek5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQWYsQWYsQWYsTUFdKyJcXCkkIiksRk5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxBZixBZl0rIlxcKSQiKSxCTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxBZixBZixNQV0rIlxcKSQiKSxzWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEscWcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6bFl0LGZvcm1hdEhleDpsWXQsZm9ybWF0SHNsOkhOZSxmb3JtYXRSZ2I6Y1l0LHRvU3RyaW5nOmNZdH0pO1V6KGdsLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6aFl0LGZvcm1hdEhleDpoWXQsZm9ybWF0UmdiOmZZdCx0b1N0cmluZzpmWXR9KSk7VXooQ2YsbVl0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBnbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9PntnWXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIF9ZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24geVl0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIHZZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB4WXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHFOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIGJZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3FOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1VOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciB3WXQ9TSgoKT0+e3hZdCgpfSk7ZnVuY3Rpb24gU1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LEdOZSxXTmUsTVl0PU0oKCk9PntEbnQoKTt6bnQoKTt2WXQoKTt3WXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPWJZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtHTmU9U1l0KF9ZdCksV05lPVNZdCh5WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9qTmUobFswXS54KTpZTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsRVl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKlRZdCxza2V3WDpNYXRoLmF0YW4obCkqVFl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgVFl0LFh6LENZdD1NKCgpPT57VFl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUFl0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQVl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPUFZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBJWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LEFZdCwkeixMWXQ9TSgoKT0+e0NZdCgpfSk7ZnVuY3Rpb24ga1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LFJZdD1NKCgpPT57anooKTtMWXQoKTtHbnQ9a1l0KFBZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9a1l0KElZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gRFl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uICROZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBLTmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8WE5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK05ZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLU5ZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1EWXQoXyksQz1pLyhZbnQqcCkqKFMqS05lKENBKmIrXyktJE5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0RZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LE5ZdCxYTmUsT1l0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLE5ZdD00LFhOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtFWXQoKTtSWXQoKTtPWXQoKTtNWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIEF2fHwoQll0KFpOZSksQXY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIFpOZSgpe0F2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBIWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9QXYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIHpZdCgpe0F2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7SFl0KCl9ZmluYWxseXtzUz0wLFFOZSgpLEF2PTB9fWZ1bmN0aW9uIEpOZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PkZZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIFFOZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Bdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoell0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwoSk5lLEZZdCkpLHNTPTEsQll0KHpZdCkpfX12YXIgc1MsSUEsUEEsRll0LEt6LExBLFp6LEF2LEp6LGtBLEJZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLEZZdD0xZTMsWno9MCxBdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQll0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBWWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7Vll0KCl9KTtmdW5jdGlvbiBHZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO3JEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246dERlLHR3ZWVuOmVEZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpxWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5xWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBKYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIHJEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1VWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1VWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIHREZSxlRGUscVl0LFpudCxyRixlRixVWXQsbkYsTkEsTHM9TSgoKT0+e21udCgpO0tudCgpO3REZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxlRGU9W10scVl0PTAsWm50PTEsckY9MixlRj0zLFVZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIFB2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gR1l0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQdih0aGlzLGUpfSl9dmFyIFdZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBuRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUphKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBpRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUphKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFlZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP25EZTppRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgcWc/WXo6KHI9cWcodCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gb0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBhRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBzRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gbERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBjRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiB1RGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGpZdChlLHQpe3ZhciByPWhkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD91RGU6Y0RlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/YURlOm9EZSkocik6KHIubG9jYWw/bERlOnNEZSkocixuLHQpKX12YXIgWFl0PU0oKCk9PntBQSgpO0lzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIGhEZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gcERlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZkRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBkRGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZoRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uICRZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aGQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9wRGU6ZERlKShuLHQpKX12YXIgS1l0PU0oKCk9PntJcygpfSk7ZnVuY3Rpb24gbURlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBaWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9tRGU6Z0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgSll0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gX0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHlEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBRWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9fRGU6eURlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgdGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHZEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciByanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBuanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGlqdD1NKCgpPT57SXMoKTtkZCgpfSk7ZnVuY3Rpb24gb2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBkYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGFqdD1NKCgpPT57ZGQoKX0pO2Z1bmN0aW9uIHhEZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIGJEZShlLHQscil7dmFyIG4saSxvPXhEZSh0KT9EQTpKYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBzanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChiRGUocixlLHQpKX12YXIgbGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gd0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBjanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsd0RlKHRoaXMuX2lkKSl9dmFyIHVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gaGp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Q3YoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgZGEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGZqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBwanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgZGEobyxhLHQscil9dmFyIGRqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBtanQoKXtyZXR1cm4gbmV3IFNEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIFNEZSxnanQ9TSgoKT0+e0lzKCk7U0RlPWZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIE1EZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1VZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksVWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBfanQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gRURlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gVERlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIENEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUphKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1fanQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB5anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxNRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsX2p0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxURGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goQ0RlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxFRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciB2anQ9TSgoKT0+e0FBKCk7SXMoKTtMcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBBRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFBEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYmQURlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIHhqdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBianQ9TSgoKT0+e30pO2Z1bmN0aW9uIElEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB3anQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xEZShjUyh0aGlzLCJ0ZXh0IixlKSk6SURlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBTanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBrRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIFJEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZrRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBNanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LFJEZShlKSl9dmFyIEVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gVGp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO0dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIENqdD1NKCgpPT57ZGQoKTtMcygpfSk7ZnVuY3Rpb24gQWp0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPUphKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFBqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIGZkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrTkRlfXZhciBORGUsdVMsZGQ9TSgoKT0+e0lzKCk7WFl0KCk7S1l0KCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7dmp0KCk7Ymp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7T0EoKTtQanQoKTtORGU9MDt1Uz1mZC5wcm90b3R5cGU7ZGEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRhLHNlbGVjdDpoanQsc2VsZWN0QWxsOnBqdCxmaWx0ZXI6bmp0LG1lcmdlOm9qdCxzZWxlY3Rpb246bWp0LHRyYW5zaXRpb246VGp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpzanQsYXR0cjpqWXQsYXR0clR3ZWVuOiRZdCxzdHlsZTp5anQsc3R5bGVUd2Vlbjp4anQsdGV4dDp3anQsdGV4dFR3ZWVuOk1qdCxyZW1vdmU6Y2p0LHR3ZWVuOllZdCxkZWxheTpaWXQsZHVyYXRpb246UVl0LGVhc2U6ZWp0LGVuZDpBanR9fSk7ZnVuY3Rpb24gRERlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIElqdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBkYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmR2cobCxlLHQsYyxhLHJ8fEREZShsLHQpKTtyZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsTGp0PU0oKCk9PntkZCgpO0xzKCk7SV8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBranQ9TSgoKT0+e0lzKCk7V1l0KCk7TGp0KCk7ZmQucHJvdG90eXBlLmludGVycnVwdD1HWXQ7ZmQucHJvdG90eXBlLnRyYW5zaXRpb249SWp0fSk7dmFyIFJqdD1NKCgpPT57ZGQoKTtMcygpfSk7dmFyIE5qdD1NKCgpPT57a2p0KCk7ZGQoKTtSanQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgT2p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntQZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBQZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFBmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IFBmKDEsMCwwKTthRi5wcm90b3R5cGU9UGYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHpqdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIE9EZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gekRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIEZqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gRkRlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gQkRlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEhEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gQmp0KCl7dmFyIGU9T0RlLHQ9ekRlLHI9SERlLG49RkRlLGk9QkRlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsRmp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsRmp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBQZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IFBmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgUGYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxQdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1wZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLFB2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/cGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOnBkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PXBkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksUHYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEhqdD1NKCgpPT57bW50KCk7b1l0KCk7QUEoKTtJcygpO05qdCgpO0RqdCgpO09qdCgpO25pdCgpO3pqdCgpfSk7dmFyIFZqdD1NKCgpPT57SGp0KCk7bml0KCl9KTt2YXIgTXI9e307S3MoTXIse2FjdGl2ZTooKT0+aEd0LGFyYzooKT0+ZkZ0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PmpNdCxheGlzTGVmdDooKT0+WE10LGF4aXNSaWdodDooKT0+WU10LGF4aXNUb3A6KCk9PldNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9Pm5NdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT5kQ3QsYnJ1c2hTZWxlY3Rpb246KCk9PmhDdCxicnVzaFg6KCk9PmZDdCxicnVzaFk6KCk9PnBDdCxjaG9yZDooKT0+RkN0LGNsaWVudFBvaW50OigpPT5EZyxjbHVzdGVyOigpPT5ITHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+S3p0LGNyZWF0b3I6KCk9Pk5nLGNyb3NzOigpPT5vTXQsY3N2OigpPT5jTnQsY3N2Rm9ybWF0OigpPT5kUHQsY3N2Rm9ybWF0Um93czooKT0+bVB0LGNzdlBhcnNlOigpPT5mUHQsY3N2UGFyc2VSb3dzOigpPT5wUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5rRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+TkZ0LGN1cnZlQmFzaXNPcGVuOigpPT56RnQsY3VydmVCdW5kbGU6KCk9PkhGdCxjdXJ2ZUNhcmRpbmFsOigpPT5VRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+cUZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5HRnQsY3VydmVDYXRtdWxsUm9tOigpPT5ZRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+WkZ0LGN1cnZlTGluZWFyOigpPT5GZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+dEJ0LGN1cnZlTW9ub3RvbmVYOigpPT5zQnQsY3VydmVNb25vdG9uZVk6KCk9PmxCdCxjdXJ2ZU5hdHVyYWw6KCk9PmZCdCxjdXJ2ZVN0ZXA6KCk9PmRCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+Z0J0LGN1cnZlU3RlcEJlZm9yZTooKT0+bUJ0LGN1c3RvbUV2ZW50OigpPT5HenQsZGVzY2VuZGluZzooKT0+c010LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PkFBdCxkcmFnOigpPT5zUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PlhQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+JFB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+V1B0LGVhc2VCb3VuY2VJbk91dDooKT0+WVB0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+VVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+cVB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PkFQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5QUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PlpQdCxlYXNlRWxhc3RpY0luT3V0OigpPT5KUHQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+QlB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+SFB0LGVhc2VMaW5lYXI6KCk9PlNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+TFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5rUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PkVQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+VFB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+T1B0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+elB0LGVudHJpZXM6KCk9PnNBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+ZTZ0LGZvcmNlQ29sbGlkZTooKT0+TjZ0LGZvcmNlTGluazooKT0+cTZ0LGZvcmNlTWFueUJvZHk6KCk9PmlJdCxmb3JjZVJhZGlhbDooKT0+YUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+bkl0LGZvcmNlWDooKT0+bEl0LGZvcmNlWTooKT0+dUl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+THksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9Pm1MdCxnZW9BcmVhOigpPT5GSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5fTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+dkx0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PllJdCxnZW9DZW50cm9pZDooKT0+UUl0LGdlb0NpcmNsZTooKT0+YTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlA5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT5RcCxnZW9Db25pY0NvbmZvcm1hbDooKT0+d0x0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+VXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PkVMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+ejl0LGdlb0Rpc3RhbmNlOigpPT5CeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk1MdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pkd5LGdlb0dub21vbmljOigpPT5DTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9PlY5dCxnZW9JZGVudGl0eTooKT0+UEx0LGdlb0ludGVycG9sYXRlOigpPT5xOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+Ykx0LGdlb01lcmNhdG9yUmF3OigpPT5xeSxnZW9OYXR1cmFsRWFydGgxOigpPT5MTHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT5STHQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5sTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5ETHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PnVMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PnpMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PmdNdCxoc2w6KCk9PlpLLGh0bWw6KCk9PmVOdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5iN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PkI4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnk3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkg4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5EOHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5POHQsaW50ZXJwb2xhdGVIc2w6KCk9Pkk4dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9Pkw4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PlQ3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+RTd0LGludGVycG9sYXRlTnVtYmVyOigpPT5BcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9PkM3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9Pnc3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+aDh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9PmY4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5wOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT53OHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PlM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9Pk03dCxpbnRlcnBvbGF0ZVdhcm06KCk9Png3dCxpbnRlcnBvbGF0ZVpvb206KCk9PkM4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5iVnQsaXNvRm9ybWF0OigpPT5mVnQsaXNvUGFyc2U6KCk9PnBWdCxqc29uOigpPT5uTnQsa2V5czooKT0+bkF0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5TRnQsbGlua1JhZGlhbDooKT0+RUZ0LGxpbmtWZXJ0aWNhbDooKT0+TUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9PmJ5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+d010LG1lYW46KCk9Pk1NdCxtZWRpYW46KCk9PlRNdCxtZXJnZTooKT0+QU10LG1pbjooKT0+bVIsbW91c2U6KCk9PlF6dCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PkpDdCxub3c6KCk9Pll3LHBhY2s6KCk9PndrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT55a3QscGFpcnM6KCk9PmlNdCxwYXJ0aXRpb246KCk9Pk1rdCxwYXRoOigpPT5ZOHQscGVybXV0ZTooKT0+SU10LHBpZTooKT0+dkZ0LHBvaW50UmFkaWFsOigpPT5mdixwb2x5Z29uQXJlYTooKT0+JDh0LHBvbHlnb25DZW50cm9pZDooKT0+Wjh0LHBvbHlnb25Db250YWluczooKT0+aVJ0LHBvbHlnb25IdWxsOigpPT5yUnQscG9seWdvbkxlbmd0aDooKT0+YVJ0LHByZWNpc2lvbkZpeGVkOigpPT5NSXQscHJlY2lzaW9uUHJlZml4OigpPT5USXQscHJlY2lzaW9uUm91bmQ6KCk9PkFJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9PmR5LHF1YW50aXplOigpPT5VOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PktSdCxyYW5kb21FeHBvbmVudGlhbDooKT0+SlJ0LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5YUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5ZUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5ZQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+VU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+ck90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9PnM3dCxzY2FsZVV0YzooKT0+bDd0LHNjYW46KCk9PmtNdCxzY2hlbWVDYXRlZ29yeTEwOigpPT51N3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+Zzd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5mN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9PmQ3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+ZUZ0LHNlbGVjdGlvbjooKT0+JHp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5lQXQsc2h1ZmZsZTooKT0+Tk10LHN0YWNrOigpPT55QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PndCdCxzdGFja09mZnNldEV4cGFuZDooKT0+eEJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5NQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PlRCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+QUJ0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PklCdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9PmtCdCxzdHJhdGlmeTooKT0+QWt0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5PTXQsc3ltYm9sOigpPT5JRnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5QRnQsdGV4dDooKT0+b050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PnlNdCx0aHJlc2hvbGRTY290dDooKT0+eE10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+bU10LHRpbWVEYXk6KCk9PmpCdCx0aW1lRGF5czooKT0+WEJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT50SHQsdGltZUhvdXI6KCk9PnFCdCx0aW1lSG91cnM6KCk9PkdCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5CQnQsdGltZU1pbnV0ZXM6KCk9PkhCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PktCdCx0aW1lTW9udGg6KCk9PmlIdCx0aW1lTW9udGhzOigpPT5vSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+ZUh0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+UUJ0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5aQnQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5KQnQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5zSHQsdGltZVllYXJzOigpPT5sSHQsdGltZW91dDooKT0+dlZ0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5uRnQsdG91Y2hlczooKT0+b0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+SWt0LHRyZWVtYXA6KCk9PmtrdCx0cmVlbWFwQmluYXJ5OigpPT5Oa3QsdHJlZW1hcERpY2U6KCk9PmxmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Ga3QsdHJlZW1hcFNsaWNlOigpPT53Zyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Pa3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9PmhOdCx0c3ZGb3JtYXQ6KCk9PnZQdCx0c3ZGb3JtYXRSb3dzOigpPT54UHQsdHN2UGFyc2U6KCk9Pl9QdCx0c3ZQYXJzZVJvd3M6KCk9PnlQdCx1dGNEYXk6KCk9PnZIdCx1dGNEYXlzOigpPT54SHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5USHQsdXRjSG91cjooKT0+bUh0LHV0Y0hvdXJzOigpPT5nSHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9PmhIdCx1dGNNaW51dGVzOigpPT5mSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+d0h0LHV0Y01vbnRoOigpPT5JSHQsdXRjTW9udGhzOigpPT5MSHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5DSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5FSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5TSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+TUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+Ukh0LHV0Y1llYXJzOigpPT5OSHQsdmFsdWVzOigpPT5vQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PnRNdCx2b3Jvbm9pOigpPT5MR3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PnNOdCx6aXA6KCk9PkZNdCx6b29tOigpPT5CanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57ZU10KCk7SE10KCk7S010KCk7Z0N0KCk7WEN0KCk7Y0F0KCk7RUF0KCk7SUF0KCk7Y1B0KCk7d1B0KCk7dDZ0KCk7Zkl0KCk7SUl0KCk7Qkx0KCk7SGt0KCk7Rzh0KCk7WDh0KCk7bFJ0KCk7SFJ0KCk7V1J0KCk7dE50KCk7cE50KCk7STd0KCk7c0Z0KCk7TkJ0KCk7T0h0KCk7bVZ0KCk7U1Z0KCk7cEd0KCk7Ukd0KCk7Vmp0KCl9KTt2YXIgV2p0PUgoR2p0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVanQ9KEVyKCksVXQoTXIpKSxXZz1VanQscWp0PVVqdDtmdW5jdGlvbiBWRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBVRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBxRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1ZEZTpVRGUpKHRoaXMsZSl9ZnVuY3Rpb24gR0RlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiBXRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIFlEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9HRGU6V0RlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBqRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gWERlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uICREZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/akRlOlhEZSkodGhpcyxlKX1mdW5jdGlvbiBLRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIFpEZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIEpEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/S0RlOlpEZSkodGhpcyxlKX1mdW5jdGlvbiBRRGUoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVdnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gdE9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBlT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/UURlOnRPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1xRGU7V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9WURlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz0kRGU7cWp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPUpEZTtxanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPWVPZX0pO3ZhciBZZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWWp0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gck9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLFlqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gWWp0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9ck9lfSk7dmFyIElmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIG5PZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09bk9lfSk7dmFyIFhqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShJXygpLFV0KER2dCkpLGlPZT1ZZygpLG9PZT1JZigpLGpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPW9PZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgYU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWlPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPWpqdFt0XTtyZXR1cm4gcj09bnVsbD9qanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz1hT2V9KTt2YXIgJGp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzT2U9WWcoKSxsT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1zT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWxPZX0pO3ZhciBMZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtqdD0oZGUoKSxVdChwZSkpO0tqdC5fX2V4cG9ydFN0YXIoWGp0KCksY0YpO0tqdC5fX2V4cG9ydFN0YXIoJGp0KCksY0YpfSk7dmFyIFpqdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgY09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1jT2V9KTt2YXIgSmp0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1T2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz11T2V9KTt2YXIgUWp0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPWhPZX0pO3ZhciB0WHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWZPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihaanQoKSk7aEYoSmp0KCkpO2hGKFFqdCgpKTtoRih0WHQoKSl9KTt2YXIgclh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlWHQ9cFMoKSxwT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPWVYdC5NZXRob2RzLmRlZmF1bHRzKHt9LHBPZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9ZVh0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkT2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RPZShyWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIG1PZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PW1PZX0pO3ZhciBvWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnT2U9RkEoKSxuWHQ9Zml0KCksamc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBuWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoblh0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtqZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1qZzt2YXIgaVh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9amcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9amcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoamcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1qZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qZ09lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPWpnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9amcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7aVh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1pWHR9KTt2YXIgYVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfT2U9RkEoKSx5T2U9IiM0NDQiLHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXlPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpfT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD12T2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQob1h0KCkpO2RpdChhWHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc1h0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtzWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1zWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIHhPZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksYk9lPWZ1bmN0aW9uKGUpe3hPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPWJPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgd09lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU09lPV9pdCgpLE1PZT1mdW5jdGlvbihlKXt3T2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KFNPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9TU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBFT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUT2U9cFMoKSxDT2U9eWl0KCksQU9lPWZ1bmN0aW9uKGUpe0VPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBUT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShDT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIGxYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9X0YoKSxrT2U9dml0KCksUk9lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IElPZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9TE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShrT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj1ST2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShsWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksTk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Tk9lfSk7dmFyIHVYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBET2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPT2U9d2l0KCksY1h0PWZ1bmN0aW9uKGUpe0RPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShPT2UuV3JhcHBlcik7Y1h0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPWNYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2hYdCh1WHQoKSk7aFh0KHdpdCgpKX0pO3ZhciBmWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSx6T2U9eGl0KCksRk9lPVNpdCgpLEJPZT1GQSgpLEhPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgek9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IEZPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBCT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9SE9lfSk7dmFyIF9sPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZlh0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBwWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWT2U9KEVyKCksVXQoTXIpKSxVT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIHFPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9cU9lO2Z1bmN0aW9uIEdPZShlKXt2YXIgdD1WT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9R09lO2Z1bmN0aW9uIFdPZShlKXtyZXR1cm4gVU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj1XT2U7ZnVuY3Rpb24gWU9lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PVlPZX0pO3ZhciBnWHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtWHQ9KEVyKCksVXQoTXIpKSxqT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gWE9lKGUsdCl7dmFyIHI9ZFh0KGUpKy4wNSxuPWRYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PVhPZTtmdW5jdGlvbiAkT2UoZSx0KXt2YXIgcj1tWHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9JE9lO2Z1bmN0aW9uIEtPZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PUtPZTtmdW5jdGlvbiBkWHQoZSl7dmFyIHQ9bVh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOmpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxtYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBaT2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPVpPZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9eVh0O2Z1bmN0aW9uIEpPZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4geVh0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9Sk9lO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBRT2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9UU9lO2Z1bmN0aW9uIHQ3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGtmKHIsIndpZHRoIikra2YociwicGFkZGluZy1sZWZ0Iikra2YociwicGFkZGluZy1yaWdodCIpK2tmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikra2YociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPXQ3ZTtmdW5jdGlvbiBlN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJoZWlnaHQiKStrZihyLCJwYWRkaW5nLXRvcCIpK2tmKHIsInBhZGRpbmctYm90dG9tIikra2YociwiYm9yZGVyLXRvcC13aWR0aCIpK2tmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PWU3ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLHZYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIscjdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK3ZYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxuN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxpN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86Iit2WHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gbzdlKGUpe3ZhciB0PXI3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1vN2U7ZnVuY3Rpb24gYTdlKGUpe3ZhciB0PW43ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9YTdlO2Z1bmN0aW9uIHM3ZShlKXt2YXIgdD1pN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1zN2U7ZnVuY3Rpb24gbDdlKGUsdCl7cmV0dXJuIShtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LmxlZnQpfHxtYS5jZWlsKGUubGVmdCk+PW1hLmZsb29yKHQucmlnaHQpfHxtYS5mbG9vcihlLmJvdHRvbSk8PW1hLmNlaWwodC50b3ApfHxtYS5jZWlsKGUudG9wKT49bWEuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9bDdlO2Z1bmN0aW9uIGM3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PWM3ZTtmdW5jdGlvbiB1N2UoZSx0KXtyZXR1cm4gbWEuZmxvb3IodC5sZWZ0KTw9bWEuY2VpbChlLmxlZnQpJiZtYS5mbG9vcih0LnRvcCk8PW1hLmNlaWwoZS50b3ApJiZtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LnJpZ2h0KSYmbWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPXU3ZTtmdW5jdGlvbiBoN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPV9YdChlKSxvPV9YdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9aDdlO2Z1bmN0aW9uIF9YdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBrZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZjdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mN2U7ZnVuY3Rpb24gcDdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIGc3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPXA3ZTt2YXIgZDdlPS9ebWF0cml4XCgoW14pXSspXCkkLyxtN2U9L1ssIF0rLztmdW5jdGlvbiBnN2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKGQ3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KG03ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSx4WHQ9Q2l0KCksbWQ9d2luZG93Lk1hdGgsXzdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24geTdlKGUsdCxyKXtyZXR1cm4gbWQubWluKHQscik8PWUmJmU8PW1kLm1heCh0LHIpfXNvLmluUmFuZ2U9eTdlO2Z1bmN0aW9uIHY3ZShlLHQscil7cmV0dXJuIG1kLm1pbihtZC5tYXgodCxlKSxyKX1zby5jbGFtcD12N2U7ZnVuY3Rpb24geDdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9eDdlO2Z1bmN0aW9uIGI3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPWI3ZTtmdW5jdGlvbiB3N2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPXc3ZTtmdW5jdGlvbiBTN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49bWQubWF4KG1kLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPU03ZTtmdW5jdGlvbiBFN2UoZSx0KXtyZXR1cm4gbWQucG93KHQueS1lLnksMikrbWQucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUvMzYwKm1kLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1UN2U7ZnVuY3Rpb24gQzdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49QzdlO2Z1bmN0aW9uIEE3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1BN2U7ZnVuY3Rpb24gUDdlKGUpe2Zvcih2YXIgdD14WHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1fN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz14WHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1iWHQocix3WHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVA3ZTtmdW5jdGlvbiBiWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1iWHQ7ZnVuY3Rpb24gSTdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9STdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gd1h0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD13WHQ7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUw3ZX0pO3ZhciBTWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9azdlO3ZhciBSN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj1SN2V9KTt2YXIgSWl0PUgoZ2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTjdlPVNYdCgpLEQ3ZT01LE83ZT1uZXcgTjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsUmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKFJmPWdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZ2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLFJmLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/UmYuUEFTUzpSZi5GQUlMOnM+bz9SZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLFJmLlBBU1MpfX1nZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1nZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIHo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1EN2UpLHI9PT12b2lkIDAmJihyPU83ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsUWEuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSxRYS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1SZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PVJmLlBBU1N8fHM9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO2dkLlJUcmVlPXo3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9UWEudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz1RYS51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKFFhLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7Z2QuUlRyZWVOb2RlPVRGO3ZhciBRYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtnZC5SVHJlZUJvdW5kcz1RYX0pO3ZhciBUWHQ9SChfZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNWHQ9KEVyKCksVXQoTXIpKSxGN2U9T2UoKSxYZz1GZSgpLEI3ZT1JZigpO19kLklTdGFja2luZ09yZGVyPUI3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgRVh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEg3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1NWHQubWFwKCksbz1NWHQubWFwKCksYT1uZXcgWGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyBYZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz1fZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX1fZC5zdGFjaz1IN2U7ZnVuY3Rpb24gVjdlKGUpe3ZhciB0PW5ldyBYZy5NYXAscj1uZXcgWGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPVhnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD1YZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX1fZC5zdGFja2VkRXh0ZW50cz1WN2U7ZnVuY3Rpb24gVTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KF9kLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9WGcuTWF0aC5tYXgobiwwKSxvPVhnLk1hdGgubWluKG4sMCk7cmV0dXJuW0VYdC5taW4obywwKSxFWHQubWF4KDAsaSldfV9kLnN0YWNrZWRFeHRlbnQ9VTdlO19kLm5vcm1hbGl6ZUtleT1GN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcTdlPSRBKCk7ZnVuY3Rpb24gQ1h0KGUpeyFxN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49Q1h0O2Z1bmN0aW9uIEFYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9QVh0O2Z1bmN0aW9uIEc3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1BWHQobyxlKX19Z1MuZGVib3VuY2U9RzdlO2Z1bmN0aW9uIFc3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLENYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9VzdlfSk7dmFyIFBYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9WTdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9ajdlfSk7dmFyIElYdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWDdlPShkZSgpLFV0KHBlKSksJDdlPVJpdCgpLEs3ZT1mdW5jdGlvbihlKXtYN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oJDdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PUs3ZX0pO3ZhciBMWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRnPUlpdCgpLFo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgJGcuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPSRnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7JGcuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1aN2V9KTt2YXIga1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKN2U9QWl0KCksUTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihKN2UuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9UTdlfSk7dmFyIFJYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiB0emUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPXR6ZX0pO3ZhciBPWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxOWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIGV6ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbTlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IERYdCh0KSx0W05YdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPWV6ZTt2YXIgRFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPURYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPShkZSgpLFV0KHBlKSkscnplPXBYdCgpO3FvLkFycmF5PXJ6ZTt2YXIgbnplPWdYdCgpO3FvLkNvbG9yPW56ZTt2YXIgaXplPUNpdCgpO3FvLkRPTT1pemU7dmFyIG96ZT1BaXQoKTtxby5NYXRoPW96ZTt2YXIgYXplPUlpdCgpO3FvLlJUcmVlPWF6ZTt2YXIgc3plPVRYdCgpO3FvLlN0YWNraW5nPXN6ZTt2YXIgbHplPUFGKCk7cW8uV2luZG93PWx6ZTtLZy5fX2V4cG9ydFN0YXIoUFh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihJWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKFlnKCkscW8pO0tnLl9fZXhwb3J0U3RhcihMWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKGtYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7S2cuX19leHBvcnRTdGFyKE9YdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6WHQ9RmUoKSxCaXQ9SUYoKSxjemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9Y3plO3ZhciB1emU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt6WHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9dXplO3ZhciBoemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9elh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9aHplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxmemU9SWYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9ZnplLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gcHplKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9cHplO2Z1bmN0aW9uIGR6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxCWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPWR6ZTtmdW5jdGlvbiBGWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSksQlh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9Rlh0O2Z1bmN0aW9uIG16ZShlKXtGWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9bXplO2Z1bmN0aW9uIEJYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIGd6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPWd6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEhYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxfemU9T2UoKSxWWHQ9WWcoKSxVWHQ9SWYoKTtRQS5YQWxpZ25tZW50PVVYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVVYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgeXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9Vlh0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8X3plLmlzRWxlbWVudCh0KT9yPUhYdC5zZWxlY3QodCk6cj1WWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXl6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksdnplPSExO2Z1bmN0aW9uIHh6ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT14emU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gYnplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1iemU7ZnVuY3Rpb24gd3plKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PXd6ZTtmdW5jdGlvbiBTemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1TemU7ZnVuY3Rpb24gTXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PU16ZTtmdW5jdGlvbiBFemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1FemU7ZnVuY3Rpb24gVHplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9VHplO2Z1bmN0aW9uIEN6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD12emUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1DemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEF6ZT0oZGUoKSxVdChwZSkpLHlkPShFcigpLFV0KE1yKSksR2l0PV9sKCksUHplPWtjKCkscVh0PUJ1KCkseFM9RmUoKSxJemU9SWYoKTtERi5BeGlzT3JpZW50YXRpb249SXplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBMemU9ZnVuY3Rpb24oZSl7QXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihxWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1xWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnlkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSkseWQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHlkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx5ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz15ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnlkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUHplLkNvbXBvbmVudCk7REYuQXhpcz1MemV9KTt2YXIgV1h0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBremU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj1fbCgpLFJ6ZT1rYygpLEdYdD1GZSgpLFlpdD10NCgpLE56ZT1mdW5jdGlvbihlKXtremUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUnplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpHWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/R1h0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1OemV9KTt2YXIgWVh0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD1fbCgpLE96ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSx6emU9ZnVuY3Rpb24oZSl7RHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihPemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9enplfSk7dmFyIGpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZ6ZT1GZSgpO2Z1bmN0aW9uIEJ6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9RnplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9QnplO2Z1bmN0aW9uIEh6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9SHplfSk7dmFyIGU0PUgoSXY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEl2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9SXYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFZ6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1YWHQoZSx0LG4saSksJFh0KGUsdCxyLG8sYSl9SXYuY29uc3RyYWluZWRab29tPVZ6ZTtmdW5jdGlvbiBYWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Jdi5jb25zdHJhaW5ab29tRXh0ZW50cz1YWHQ7ZnVuY3Rpb24gJFh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz1LWHQoZSksYT1xemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Jdi5jb25zdHJhaW5ab29tVmFsdWVzPSRYdDtmdW5jdGlvbiBVemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz1LWHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUl2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249VXplO2Z1bmN0aW9uIEtYdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBxemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIEx2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBaWHQ9RmUoKSxHemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgWlh0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBaWHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9R3plfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgV3plPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxZemU9ZTQoKSxKWHQ9RmUoKSxqemU9THYoKSxRaXQ9WzAsMV0sWHplPWZ1bmN0aW9uKGUpe1d6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiBKWHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBKWHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KFl6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oanplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9WHplfSk7dmFyIFFYdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksTmY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLEt6ZT1MdigpLFp6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxKemU9ZnVuY3Rpb24oZSl7JHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgWnplO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9TmYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1OZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0oS3plLlNjYWxlKTtyb3QuQ29sb3I9SnplfSk7dmFyIGUkdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSx0JHQ9RmUoKSx0RmU9THYoKSxlRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFt0JHQuTWF0aC5taW4ociwwKSx0JHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0odEZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9ZUZlfSk7dmFyIHZkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByRmU9KGRlKCksVXQocGUpKSxuRmU9KEVyKCksVXQoTXIpKSxpRmU9ZTQoKSxFUz1GZSgpLG9GZT1MdigpLGFGZT1mdW5jdGlvbihlKXtyRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49bkZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChpRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KG9GZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPWFGZX0pO3ZhciByJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHNGZT0oZGUoKSxVdChwZSkpLGxGZT0oRXIoKSxVdChNcikpLGNGZT12ZCgpLHVGZT1mdW5jdGlvbihlKXtzRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1sRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0oY0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPXVGZX0pO3ZhciBuJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT12ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWZGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPWRGZX0pO3ZhciBpJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9a3MoKSxnRmU9dmQoKSxfRmU9ZnVuY3Rpb24oZSl7bUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oZ0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9X0ZlfSk7dmFyIG8kdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeUZlPShkZSgpLFV0KHBlKSksZ2E9KEVyKCksVXQoTXIpKSxrdj1IRigpLHZGZT12ZCgpLHhGZT1mdW5jdGlvbihlKXt5RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1nYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1nYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP2dhLnV0Y1NlY29uZDpnYS50aW1lU2Vjb25kO2Nhc2Uga3YuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9nYS51dGNNaW51dGU6Z2EudGltZU1pbnV0ZTtjYXNlIGt2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP2dhLnV0Y0hvdXI6Z2EudGltZUhvdXI7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP2dhLnV0Y0RheTpnYS50aW1lRGF5O2Nhc2Uga3YuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/Z2EudXRjV2VlazpnYS50aW1lV2VlaztjYXNlIGt2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9nYS51dGNNb250aDpnYS50aW1lTW9udGg7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9nYS51dGNZZWFyOmdhLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fSh2RmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPXhGZX0pO3ZhciBrcz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJ2PShkZSgpLFV0KHBlKSksYkZlPWpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPWJGZTtSdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihRWHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGUkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIociR0KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGkkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIobyR0KCksSHUpO3ZhciB3RmU9ZW90KCksU0ZlPXZkKCk7ZnVuY3Rpb24gTUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2Ygd0ZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1NRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLGEkdD1fbCgpLHMkdD1CdSgpLFRGZT1rcygpLG40PUZlKCksdW90PUlmKCksdHM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgQ0ZlPWZ1bmN0aW9uKGUpe0VGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihzJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9VEZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgYSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBhJHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHRzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKHRzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPSh4ZD17fSx4ZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLHhkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEseGRbU2UuVGltZUludGVydmFsLmhvdXJdPTIseGRbU2UuVGltZUludGVydmFsLmRheV09Myx4ZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCx4ZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUseGRbU2UuVGltZUludGVydmFsLnllYXJdPTYseGQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBzJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KHRzLkF4aXMpO1NlLlRpbWU9Q0ZlO3ZhciB4ZH0pO3ZhciBsJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKFdYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKFlYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBRmU9RmUoKSxQRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcgQUZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UEZlfSk7dmFyIGMkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSUZlPShkZSgpLFV0KHBlKSksTEZlPW80KCksa0ZlPWZ1bmN0aW9uKGUpe0lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShMRmUuRGlzcGF0Y2hlcik7cG90LktleT1rRmV9KTt2YXIgaCR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSRmU9KGRlKCksVXQocGUpKSx1JHQ9RmUoKSxORmU9bzQoKSxERmU9ZnVuY3Rpb24oZSl7UkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9dSR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHUkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KE5GZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9REZlfSk7dmFyIHAkdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT0ZlPShkZSgpLFV0KHBlKSksZiR0PUZlKCksekZlPW80KCksRkZlPWZ1bmN0aW9uKGUpe09GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1mJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZiR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KHpGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9RkZlfSk7dmFyIE52PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihjJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihoJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCl9KTt2YXIgRHY9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249QkZlfSk7dmFyIGckdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZCR0PU52KCksbSR0PUZlKCksVkZlPUR2KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyBtJHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgbSR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1kJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9ZCR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oVkZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9VUZlfSk7dmFyIHkkdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcUZlPShkZSgpLFV0KHBlKSksXyR0PU52KCksczQ9RmUoKSxHRmU9RHYoKSxXRmU9ZnVuY3Rpb24oZSl7cUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9XyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9XyR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KEdGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9V0ZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWUZlPShkZSgpLFV0KHBlKSksdiR0PU52KCkseG90PUZlKCksakZlPUR2KCksWEZlPWZ1bmN0aW9uKGUpe1lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9diR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPXYkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oakZlLkludGVyYWN0aW9uKTtib3QuS2V5PVhGZX0pO3ZhciBTJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRGZT0oZGUoKSxVdChwZSkpLEtGZT0oRXIoKSxVdChNcikpLHgkdD1OdigpLGIkdD1rcygpLHlsPUZlKCksWkZlPWw0KCksSkZlPUR2KCksdyR0PWU0KCksUUZlPWZ1bmN0aW9uKGUpeyRGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB5bC5TZXQsaS5feVNjYWxlcz1uZXcgeWwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgWkZlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz1LRmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgeWwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj14JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eCR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHckdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gdyR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgYiR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIGIkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgeWwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmeWwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KEpGZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209UUZlfSk7dmFyIEUkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdEJlPShkZSgpLFV0KHBlKSksTSR0PU52KCksTW90PUZlKCksZUJlPUR2KCksckJlPWZ1bmN0aW9uKGUpe3RCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9TSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oZUJlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1yQmV9KTt2YXIgbDQ9SChaZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3RhcihnJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKHkkdCgpLFpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksWmcpO2M0Ll9fZXhwb3J0U3RhcihTJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKEUkdCgpLFpnKTt2YXIgbkJlPWU0KCk7Wmcuem9vbU91dD1uQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLG9CZT1rYygpLGVzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKGVzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciBhQmU9ZnVuY3Rpb24oZSl7aUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWVzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KG9CZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPWFCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0JlPShkZSgpLFV0KHBlKSksbEJlPWw0KCksQ290PUZlKCksY0JlPVlnKCksVUY9UG90KCksdUJlPVRvdCgpLGhCZT1mdW5jdGlvbihlKXtzQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbEJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1jQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0odUJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPWhCZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZCZT0oZGUoKSxVdChwZSkpLHBCZT1GZSgpLGRCZT1rYygpLE92OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKE92fHwoT3Y9e30pKTt2YXIgbUJlPWZ1bmN0aW9uKGUpe2ZCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPU92LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PU92LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09T3YuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT1Pdi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFwQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT1Pdi5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oZEJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPW1CZX0pO3ZhciBUJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1Mb3QoKSx5QmU9bDQoKSxrb3Q9RmUoKSx2QmU9ZnVuY3Rpb24oZSl7Z0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB5QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oX0JlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj12QmV9KTt2YXIgQyR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4QmU9KGRlKCksVXQocGUpKSxiQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciB3QmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KGJCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9d0JlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTQmU9KGRlKCksVXQocGUpKSxNQmU9WWcoKSxFQmU9a2MoKSxUQmU9ZnVuY3Rpb24oZSl7U0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9TUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oRUJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1UQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBJHQ9RmUoKSxBQmU9V0YoKSxQQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDpBJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OkEkdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KEFCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1QQmV9KTt2YXIgUCR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJQmU9KGRlKCksVXQocGUpKSxZRj1fbCgpLExCZT0kQSgpLGtCZT1CdSgpLFJCZT1GZSgpLE5CZT1rYygpLERCZT1mdW5jdGlvbihlKXtJQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9a0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj1SQmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksTEJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oTkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPURCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj1fbCgpLE9CZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShPQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIHpCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD16QmU7dmFyIEZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPUZCZX0pO3ZhciBYRj1IKGJkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJzPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gQkJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fWJkLmNpcmNsZT1CQmU7ZnVuY3Rpb24gSEJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19YmQuc3F1YXJlPUhCZTtmdW5jdGlvbiBWQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX1iZC5jcm9zcz1WQmU7ZnVuY3Rpb24gVUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX1iZC5kaWFtb25kPVVCZTtmdW5jdGlvbiBxQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fWJkLnRyaWFuZ2xlPXFCZTt2YXIgR0JlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uIFdCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTdGFyKS5zaXplKEdCZSpNYXRoLnBvdyhlLzIsMikpfX1iZC5zdGFyPVdCZTt2YXIgWUJlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIGpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xXeWUpLnNpemUoWUJlKk1hdGgucG93KGUvMi40LDIpKX19YmQud3llPWpCZX0pO3ZhciBJJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFhCZT0oZGUoKSxVdChwZSkpLHp2PShFcigpLFV0KE1yKSksJEY9X2woKSwkQmU9JEEoKSxLQmU9QnUoKSxaQmU9WEYoKSxKZz1GZSgpLEpCZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSmcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksUUJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihKZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSx0SGU9ZnVuY3Rpb24oZSl7WEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUtCZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gWkJlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsJEJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgUUJlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoSmcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1KZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1KZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89enYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PXp2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHp2LnNlbGVjdChnKSksYj1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOkpnLkRPTS5lbGVtZW50QkJveCh6di5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOnp2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PXp2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPXp2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0oSkJlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD10SGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZUhlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKGVIZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgayR0PUgoKFlxbixMJHQpPT57InVzZSBzdHJpY3QiO0wkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgRCR0PUgoKGpxbixOJHQpPT57InVzZSBzdHJpY3QiO3ZhciBySGU9ayR0KCk7ZnVuY3Rpb24gUiR0KGUpe3JldHVybiBySGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9TiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKFIkdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUsUiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkhlPUZlKCksTyR0PTAsaUhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBuSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9aUhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLG9IZT1EJHQoKSxhSGU9WW90KCksc0hlPUx2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIHNIZS5TY2FsZT96JHQoZSk6ZSBpbnN0YW5jZW9mIGFIZS5EYXRhc2V0P0YkdChlKTpvSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9CJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24geiR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT16JHQ7ZnVuY3Rpb24gRiR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9RiR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgViR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gQiR0KGUpe3JldHVybiBuZXcgSCR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PUIkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgVSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBIJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9SCR0O3ZhciBWJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVYkdDt2YXIgVSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9VSR0fSk7dmFyIHEkdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbEhlPSRvdCgpO2Z1bmN0aW9uIGNIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWxIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9Y0hlfSk7dmFyIFkkdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHVIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksRyR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uIFckdChlKXt2YXIgdD11SGUubWVtb2l6ZShlLEckdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IEckdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9VyR0O2Z1bmN0aW9uIGhIZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPVckdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9aEhlfSk7dmFyIGokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPUNTKCk7ZnVuY3Rpb24gcEhlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9ZkhlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPXBIZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIocSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO3ZhciBkSGU9JG90KCk7QVMuc2lnbj1kSGUuc2lnbn0pO3ZhciBGdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFgkdD0oRXIoKSxVdChNcikpLG1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9bUhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBnSGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiAkJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPWdIZTtmdW5jdGlvbiAkJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz0kJHQ7ZnVuY3Rpb24gX0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24geUhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiBLJHQoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9SyR0O2Z1bmN0aW9uIFokdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PVokdDtmdW5jdGlvbiB2SGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT12SGU7ZnVuY3Rpb24geEhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9eEhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD1LJHQodCk7dmFyIHI9WCR0LmNvbG9yKHQuc3Ryb2tlKSxuPVokdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9X0hlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1YJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXlIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9YkhlfSk7dmFyIERmPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB3SGU9KEVyKCksVXQoTXIpKSxKJHQ9RmUoKSxTSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD13SGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtKJHQuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyBKJHQuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPVNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFEkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLE1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IFEkdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IFEkdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9TUhlfSk7dmFyIHJzPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRUhlPShkZSgpLFV0KHBlKSksd2Q9KEVyKCksVXQoTXIpKSxkND1MZigpLFNkPUZlKCksdEt0PUdvdCgpLG9hdD1DUygpLFRIZT1rYygpLENIZT1GdigpLEFIZT1VdSgpLFBIZT1EZigpLElIZT1ZZygpLExIZT1JZigpLGtIZT1pYXQoKTtRRi5SZW5kZXJlcj1MSGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIFJIZT1mdW5jdGlvbihlKXtFSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgU2QuTWFwLHIuX2F0dHJCaW5kaW5ncz13ZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9d2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IodEt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcih0S3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1TZC5XaW5kb3cuZGVib3VuY2Uoa0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9SUhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IEFIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUEhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IENIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIFNkLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gZUt0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBlS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9d2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoU2QuTWF0aC5pc05hTihnLngpfHxTZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNkLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1TZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIHdkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSx3ZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IFNkLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246d2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShUSGUuQ29tcG9uZW50KTtRRi5QbG90PVJIZTtmdW5jdGlvbiBlS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIHJLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkhlPShkZSgpLFV0KHBlKSksREhlPXJzKCksT0hlPUZlKCksekhlPXpvdCgpLEZIZT1mdW5jdGlvbihlKXtOSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1PSGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIERIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oekhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPUZIZX0pO3ZhciBuS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxISGU9V0YoKSxWSGU9ZnVuY3Rpb24oZSl7QkhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oSEhlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVZIZX0pO3ZhciBpS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFVIZT0oZGUoKSxVdChwZSkpLHFIZT1Wb3QoKSxHSGU9MixXSGU9ZnVuY3Rpb24oZSl7VUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPUdIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KHFIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD1XSGV9KTt2YXIgb0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZSGU9KGRlKCksVXQocGUpKSxqSGU9cUYoKSxYSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShqSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1YSGV9KTt2YXIgYUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkSGU9KGRlKCksVXQocGUpKSxLSGU9cUYoKSxaSGU9ZnVuY3Rpb24oZSl7JEhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KEtIZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPVpIZX0pO3ZhciBQb3Q9SChfYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOcz0oZGUoKSxVdChwZSkpO05zLl9fZXhwb3J0U3RhcihxRigpLF9hKTtOcy5fX2V4cG9ydFN0YXIoVCR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihDJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKHpvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTG90KCksX2EpO05zLl9fZXhwb3J0U3RhcihQJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKFZvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoSSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihyS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFRvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIobkt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihpS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKG9LdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoYUt0KCksX2EpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSkhlPShkZSgpLFV0KHBlKSksUUhlPURmKCksdFZlPWZ1bmN0aW9uKGUpe0pIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShRSGUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPXRWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGVWZT0oZGUoKSxVdChwZSkpLHJWZT1EZigpLG5WZT1mdW5jdGlvbihlKXtlVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KHJWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPW5WZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpVmU9KGRlKCksVXQocGUpKSx0Qj1GdigpLG9WZT1EZigpLGFWZT1mdW5jdGlvbihlKXtpVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0ob1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj1hVmU7dmFyIHNWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sbFZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIGNWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxzVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxsVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9Y1ZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdVZlPShkZSgpLFV0KHBlKSksc0t0PUZ2KCksaFZlPURmKCksZlZlPWZ1bmN0aW9uKGUpe3VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oaFZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1mVmU7dmFyIHBWZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBkVmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1zS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixwVmUsclswXSwwKTtzS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWRWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGxLdD0oZGUoKSxVdChwZSkpLGlCPUZ2KCksbVZlPURmKCksZ1ZlPWZ1bmN0aW9uKGUpe2xLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KG1WZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixfVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB5VmU9ZnVuY3Rpb24oZSl7bEt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj15VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2VmU9KGRlKCksVXQocGUpKSx4VmU9RGYoKSxiVmU9ZnVuY3Rpb24oZSl7dlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oeFZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9YlZlfSk7dmFyIGNLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd1ZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj13VmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1ZlPShkZSgpLFV0KHBlKSksbTQ9RnYoKSxNVmU9Y0t0KCksRVZlPURmKCksVFZlPWZ1bmN0aW9uKGUpe1NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KEVWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1UVmU7dmFyIENWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBBVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IE1WZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLENWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFQVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPUlWZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1BVmU7ZnVuY3Rpb24gUFZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBJVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgQnY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPZj0oZGUoKSxVdChwZSkpO09mLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGRhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihGdigpLERjKTtPZi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7T2YuX19leHBvcnRTdGFyKG5CKCksRGMpO09mLl9fZXhwb3J0U3RhcihvQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO09mLl9fZXhwb3J0U3RhcihEZigpLERjKTtPZi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIEh2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMVmU9KGRlKCksVXQocGUpKSx1S3Q9a3MoKSx4YXQ9RmUoKSxrVmU9aWF0KCksZzQ9cnMoKSxSVmU9ZnVuY3Rpb24oZSl7TFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IGtWZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiB1S3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgdUt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9UlZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE5WZT0oZGUoKSxVdChwZSkpLHlhPShFcigpLFV0KE1yKSksRFZlPUxmKCksT1ZlPUJ2KCkselZlPVV1KCksaEt0PW5CKCksRlZlPWtzKCksc0I9dmQoKSxRZz1GZSgpLEJWZT1JZigpLHdhdD1JUygpLHZsPXJzKCksSFZlPUh2KCksZkt0PXtsaW5lYXI6eWEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnlhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6eWEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6eWEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp5YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp5YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp5YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp5YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp5YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp5YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp5YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp5YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnlhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9QlZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBWVmU9ZnVuY3Rpb24oZSl7TlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBEVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHZsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBGVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IHpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaEt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgT1ZlLkNhbnZhc0RyYXdlcihpLGhLdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB5YS5leHRlbnQoeWEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIVFnLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiBRZy5NYXRoLmlzVmFsaWROdW1iZXIoYykmJlFnLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHlhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1mS3Rbcl07cmV0dXJuIG49PW51bGw/Zkt0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyBRZy5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gUWcuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZRZy5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgUWcuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgUWcuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oSFZlLlhZUGxvdCk7bEIuTGluZT1WVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLHFWZT1rcygpLF80PUZlKCksTWF0PUJ2KCkscEt0PW1hdCgpLEdWZT1VdSgpLGRLdD1uQigpLHVCPUlTKCksV1ZlPVNhdCgpLERzPXJzKCksWVZlPWZ1bmN0aW9uKGUpe1VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IHFWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSxkS3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPURzLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IEdWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgcEt0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLHBLdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fShXVmUuTGluZSk7RWF0LkFyZWE9WVZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgalZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PV9sKCksWFZlPUxmKCksJFZlPUJ1KCksS1ZlPUJ2KCksWlZlPVV1KCksSlZlPW9CKCksUVZlPUNTKCksUGF0PWtzKCksbUt0PXZkKCkseGw9RmUoKSxMYXQ9SWYoKSxnS3Q9SVMoKSxoQj1ycygpLHRVZT1IdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7alZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPSRWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9UVZlLm1lbW9pemUoZVVlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBYVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgeGwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgSlZlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgS1ZlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107eGwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2YgbUt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmeGwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIG1LdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPXhsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PHhsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoZ0t0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihnS3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IHhsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPXhsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj94bC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KHRVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gZVVlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldCh4bC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249eGwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgeUt0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByVWU9KGRlKCksVXQocGUpKSxuVWU9a3MoKSxpVWU9RmUoKSxfS3Q9eTQoKSxvVWU9cnMoKSxhVWU9ZnVuY3Rpb24oZSl7clVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBpVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBuVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49b1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihfS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oX0t0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj1hVWV9KTt2YXIgdkt0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD1fbCgpLGxVZT1MZigpLGNVZT1CdSgpLHVVZT1rcygpLFZ2PUZlKCksaFVlPWZhdCgpLGZVZT1kYXQoKSxwVWU9VXUoKSxkVWU9QUYoKSxNZD1ycygpLG1VZT1mdW5jdGlvbihlKXtzVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1jVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgdVVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBWdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFZ2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZlVlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHBVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaFVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gZFVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFZ2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPU1kLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGxVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVnYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Wdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxWdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KE1kLlBsb3QpO05hdC5QaWU9bVVlfSk7dmFyIHhLdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ1VlPShkZSgpLFV0KHBlKSksX1VlPShFcigpLFV0KE1yKSksRGF0PV9sKCkseVVlPUxmKCksdlVlPUJ2KCkseFVlPVV1KCksYlVlPW9CKCksZkI9a3MoKSxPYz1GZSgpLHBCPXJzKCksd1VlPUh2KCksU1VlPWZ1bmN0aW9uKGUpe2dVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHlVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgeFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IHZVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9X1VlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0od1VlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1TVWV9KTt2YXIgd0t0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNVWU9KGRlKCksVXQocGUpKSx6YXQ9X2woKSxFVWU9QnUoKSxUVWU9WEYoKSxDVWU9VXUoKSxiS3Q9dmF0KCksQVVlPUxmKCksUFVlPUJ2KCksSVVlPWtzKCksRmF0PUZlKCksQmF0PUlTKCksYmw9cnMoKSxMVWU9SHYoKSxrVWU9ZnVuY3Rpb24oZSl7TVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9RVVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcgQVVlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24oYmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBJVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9VFVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBDVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUFVlLkNhbnZhc0RyYXdlcihpLGJLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiBibC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oTFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9a1VlfSk7dmFyIFNLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUlVlPShkZSgpLFV0KHBlKSksTlVlPUxmKCksRFVlPVV1KCksT1VlPV9hdCgpLHpVZT1rcygpLEZVZT1BRigpLExTPXJzKCksQlVlPUh2KCksSFVlPWZ1bmN0aW9uKGUpe1JVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IHpVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgRFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gRlVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBOVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KEJVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUhVZX0pO3ZhciBUS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFZVZT0oZGUoKSxVdChwZSkpLE1LdD0oRXIoKSxVdChNcikpLFVVZT1MZigpLEVLdD1DUygpLHQwPUZlKCkscVVlPVRhdCgpLEdVZT1ycygpLFdVZT1mdW5jdGlvbihlKXtWVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9RUt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PUVLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiB0MC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8odDAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBVVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJnQwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1NS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPUdVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldCh0MC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KHFVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9V1VlfSk7dmFyIEFLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWVVlPShkZSgpLFV0KHBlKSkscWF0PV9sKCksalVlPUJ1KCksQ0t0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxYVWU9cnMoKSwkVWU9ZnVuY3Rpb24oZSl7WVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9alVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9Q0t0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUNLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1YVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj0kVWV9KTt2YXIgUEt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLVWU9KGRlKCksVXQocGUpKSxaVWU9RmUoKSxKVWU9eTQoKSxRVWU9cnMoKSx0cWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJlpVZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89UVVlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0oSlVlLkJhcik7WWF0LldhdGVyZmFsbD10cWV9KTt2YXIgSVM9SChPcz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSxPcyk7emMuX19leHBvcnRTdGFyKHk0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHlLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksT3MpO3pjLl9fZXhwb3J0U3Rhcih2S3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHhLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIod0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKFRLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoQUt0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihQS3QoKSxPcyl9KTt2YXIgSUt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgd2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpO1dqdCgpO3ZhciBlcWU9TGYoKTtsbi5BbmltYXRvcnM9ZXFlO3ZhciBycWU9bCR0KCk7bG4uQXhlcz1ycWU7dmFyIG5xZT1Qb3QoKTtsbi5Db21wb25lbnRzPW5xZTt2YXIgaXFlPSRBKCk7bG4uQ29uZmlncz1pcWU7dmFyIG9xZT1CdSgpO2xuLkZvcm1hdHRlcnM9b3FlO3ZhciBhcWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPWFxZTt2YXIgc3FlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPXNxZTt2YXIgbHFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWxxZTt2YXIgY3FlPU52KCk7bG4uRGlzcGF0Y2hlcnM9Y3FlO3ZhciB1cWU9QnYoKTtsbi5EcmF3ZXJzPXVxZTt2YXIgaHFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPWhxZTt2YXIgZnFlPUlTKCk7bG4uUGxvdHM9ZnFlO3ZhciBwcWU9a3MoKTtsbi5TY2FsZXM9cHFlO3ZhciBkcWU9RmUoKTtsbi5VdGlscz1kcWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciBtcWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9bXFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIGdxZT1JS3QoKTtsbi52ZXJzaW9uPWdxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKER2KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKEh2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihycygpLGxuKTtGYy5fX2V4cG9ydFN0YXIodmQoKSxsbik7RmMuX19leHBvcnRTdGFyKEx2KCksbG4pfSk7dmFyICRLdD1IKChKam4sWEt0KT0+e2Z1bmN0aW9uIERxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9WEt0LmV4cG9ydHM9RHFlfSk7dmFyIFl2PUgoKFFqbixLS3QpPT57ZnVuY3Rpb24gT3FlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9S0t0LmV4cG9ydHM9T3FlfSk7dmFyIE00PUgoKHRYbixaS3QpPT57dmFyIHpxZT1ZdigpO2Z1bmN0aW9uIEZxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKHpxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfVpLdC5leHBvcnRzPUZxZX0pO3ZhciBRS3Q9SCgoZVhuLEpLdCk9Pnt2YXIgQnFlPU00KCksSHFlPUFycmF5LnByb3RvdHlwZSxWcWU9SHFlLnNwbGljZTtmdW5jdGlvbiBVcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPUJxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6VnFlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfUpLdC5leHBvcnRzPVVxZX0pO3ZhciBlWnQ9SCgoclhuLHRadCk9Pnt2YXIgcXFlPU00KCk7ZnVuY3Rpb24gR3FlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1xcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfXRadC5leHBvcnRzPUdxZX0pO3ZhciBuWnQ9SCgoblhuLHJadCk9Pnt2YXIgV3FlPU00KCk7ZnVuY3Rpb24gWXFlKGUpe3JldHVybiBXcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1yWnQuZXhwb3J0cz1ZcWV9KTt2YXIgb1p0PUgoKGlYbixpWnQpPT57dmFyIGpxZT1NNCgpO2Z1bmN0aW9uIFhxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1qcWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31pWnQuZXhwb3J0cz1YcWV9KTt2YXIgRTQ9SCgob1huLGFadCk9Pnt2YXIgJHFlPSRLdCgpLEtxZT1RS3QoKSxacWU9ZVp0KCksSnFlPW5adCgpLFFxZT1vWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9JHFlO3pTLnByb3RvdHlwZS5kZWxldGU9S3FlO3pTLnByb3RvdHlwZS5nZXQ9WnFlO3pTLnByb3RvdHlwZS5oYXM9SnFlO3pTLnByb3RvdHlwZS5zZXQ9UXFlO2FadC5leHBvcnRzPXpTfSk7dmFyIGxadD1IKChhWG4sc1p0KT0+e3ZhciB0R2U9RTQoKTtmdW5jdGlvbiBlR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyB0R2UsdGhpcy5zaXplPTB9c1p0LmV4cG9ydHM9ZUdlfSk7dmFyIHVadD1IKChzWG4sY1p0KT0+e2Z1bmN0aW9uIHJHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1jWnQuZXhwb3J0cz1yR2V9KTt2YXIgZlp0PUgoKGxYbixoWnQpPT57ZnVuY3Rpb24gbkdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1oWnQuZXhwb3J0cz1uR2V9KTt2YXIgZFp0PUgoKGNYbixwWnQpPT57ZnVuY3Rpb24gaUdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1wWnQuZXhwb3J0cz1pR2V9KTt2YXIgY3N0PUgoKHVYbixtWnQpPT57dmFyIG9HZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7bVp0LmV4cG9ydHM9b0dlfSk7dmFyIEhjPUgoKGhYbixnWnQpPT57dmFyIGFHZT1jc3QoKSxzR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixsR2U9YUdlfHxzR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Z1p0LmV4cG9ydHM9bEdlfSk7dmFyIGp2PUgoKGZYbixfWnQpPT57dmFyIGNHZT1IYygpLHVHZT1jR2UuU3ltYm9sO19adC5leHBvcnRzPXVHZX0pO3ZhciBiWnQ9SCgocFhuLHhadCk9Pnt2YXIgeVp0PWp2KCksdlp0PU9iamVjdC5wcm90b3R5cGUsaEdlPXZadC5oYXNPd25Qcm9wZXJ0eSxmR2U9dlp0LnRvU3RyaW5nLFQ0PXladD95WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHBHZShlKXt2YXIgdD1oR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWZHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX14WnQuZXhwb3J0cz1wR2V9KTt2YXIgU1p0PUgoKGRYbix3WnQpPT57dmFyIGRHZT1PYmplY3QucHJvdG90eXBlLG1HZT1kR2UudG9TdHJpbmc7ZnVuY3Rpb24gZ0dlKGUpe3JldHVybiBtR2UuY2FsbChlKX13WnQuZXhwb3J0cz1nR2V9KTt2YXIgczA9SCgobVhuLFRadCk9Pnt2YXIgTVp0PWp2KCksX0dlPWJadCgpLHlHZT1TWnQoKSx2R2U9IltvYmplY3QgTnVsbF0iLHhHZT0iW29iamVjdCBVbmRlZmluZWRdIixFWnQ9TVp0P01adC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gYkdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/eEdlOnZHZTpFWnQmJkVadCBpbiBPYmplY3QoZSk/X0dlKGUpOnlHZShlKX1UWnQuZXhwb3J0cz1iR2V9KTt2YXIgTWw9SCgoZ1huLENadCk9PntmdW5jdGlvbiB3R2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9Q1p0LmV4cG9ydHM9d0dlfSk7dmFyIEZTPUgoKF9YbixBWnQpPT57dmFyIFNHZT1zMCgpLE1HZT1NbCgpLEVHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsVEdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsQ0dlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsQUdlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUEdlKGUpe2lmKCFNR2UoZSkpcmV0dXJuITE7dmFyIHQ9U0dlKGUpO3JldHVybiB0PT1UR2V8fHQ9PUNHZXx8dD09RUdlfHx0PT1BR2V9QVp0LmV4cG9ydHM9UEdlfSk7dmFyIEladD1IKCh5WG4sUFp0KT0+e3ZhciBJR2U9SGMoKSxMR2U9SUdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtQWnQuZXhwb3J0cz1MR2V9KTt2YXIgUlp0PUgoKHZYbixrWnQpPT57dmFyIHVzdD1JWnQoKSxMWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIGtHZShlKXtyZXR1cm4hIUxadCYmTFp0IGluIGV9a1p0LmV4cG9ydHM9a0dlfSk7dmFyIGhzdD1IKCh4WG4sTlp0KT0+e3ZhciBSR2U9RnVuY3Rpb24ucHJvdG90eXBlLE5HZT1SR2UudG9TdHJpbmc7ZnVuY3Rpb24gREdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gTkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifU5adC5leHBvcnRzPURHZX0pO3ZhciBPWnQ9SCgoYlhuLERadCk9Pnt2YXIgT0dlPUZTKCksekdlPVJadCgpLEZHZT1NbCgpLEJHZT1oc3QoKSxIR2U9L1tcXF4kLiorPygpW1xde318XS9nLFZHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxVR2U9RnVuY3Rpb24ucHJvdG90eXBlLHFHZT1PYmplY3QucHJvdG90eXBlLEdHZT1VR2UudG9TdHJpbmcsV0dlPXFHZS5oYXNPd25Qcm9wZXJ0eSxZR2U9UmVnRXhwKCJeIitHR2UuY2FsbChXR2UpLnJlcGxhY2UoSEdlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIGpHZShlKXtpZighRkdlKGUpfHx6R2UoZSkpcmV0dXJuITE7dmFyIHQ9T0dlKGUpP1lHZTpWR2U7cmV0dXJuIHQudGVzdChCR2UoZSkpfURadC5leHBvcnRzPWpHZX0pO3ZhciBGWnQ9SCgod1huLHpadCk9PntmdW5jdGlvbiBYR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX16WnQuZXhwb3J0cz1YR2V9KTt2YXIgbDA9SCgoU1huLEJadCk9Pnt2YXIgJEdlPU9adCgpLEtHZT1GWnQoKTtmdW5jdGlvbiBaR2UoZSx0KXt2YXIgcj1LR2UoZSx0KTtyZXR1cm4gJEdlKHIpP3I6dm9pZCAwfUJadC5leHBvcnRzPVpHZX0pO3ZhciB6Qj1IKChNWG4sSFp0KT0+e3ZhciBKR2U9bDAoKSxRR2U9SGMoKSx0V2U9SkdlKFFHZSwiTWFwIik7SFp0LmV4cG9ydHM9dFdlfSk7dmFyIEM0PUgoKEVYbixWWnQpPT57dmFyIGVXZT1sMCgpLHJXZT1lV2UoT2JqZWN0LCJjcmVhdGUiKTtWWnQuZXhwb3J0cz1yV2V9KTt2YXIgR1p0PUgoKFRYbixxWnQpPT57dmFyIFVadD1DNCgpO2Z1bmN0aW9uIG5XZSgpe3RoaXMuX19kYXRhX189VVp0P1VadChudWxsKTp7fSx0aGlzLnNpemU9MH1xWnQuZXhwb3J0cz1uV2V9KTt2YXIgWVp0PUgoKENYbixXWnQpPT57ZnVuY3Rpb24gaVdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fVdadC5leHBvcnRzPWlXZX0pO3ZhciBYWnQ9SCgoQVhuLGpadCk9Pnt2YXIgb1dlPUM0KCksYVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixzV2U9T2JqZWN0LnByb3RvdHlwZSxsV2U9c1dlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGNXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKG9XZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PWFXZT92b2lkIDA6cn1yZXR1cm4gbFdlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1qWnQuZXhwb3J0cz1jV2V9KTt2YXIgS1p0PUgoKFBYbiwkWnQpPT57dmFyIHVXZT1DNCgpLGhXZT1PYmplY3QucHJvdG90eXBlLGZXZT1oV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcFdlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHVXZT90W2VdIT09dm9pZCAwOmZXZS5jYWxsKHQsZSl9JFp0LmV4cG9ydHM9cFdlfSk7dmFyIEpadD1IKChJWG4sWlp0KT0+e3ZhciBkV2U9QzQoKSxtV2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIGdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09ZFdlJiZ0PT09dm9pZCAwP21XZTp0LHRoaXN9Wlp0LmV4cG9ydHM9Z1dlfSk7dmFyIHRKdD1IKChMWG4sUVp0KT0+e3ZhciBfV2U9R1p0KCkseVdlPVladCgpLHZXZT1YWnQoKSx4V2U9S1p0KCksYldlPUpadCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1fV2U7QlMucHJvdG90eXBlLmRlbGV0ZT15V2U7QlMucHJvdG90eXBlLmdldD12V2U7QlMucHJvdG90eXBlLmhhcz14V2U7QlMucHJvdG90eXBlLnNldD1iV2U7UVp0LmV4cG9ydHM9QlN9KTt2YXIgbkp0PUgoKGtYbixySnQpPT57dmFyIGVKdD10SnQoKSx3V2U9RTQoKSxTV2U9ekIoKTtmdW5jdGlvbiBNV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlSnQsbWFwOm5ldyhTV2V8fHdXZSksc3RyaW5nOm5ldyBlSnR9fXJKdC5leHBvcnRzPU1XZX0pO3ZhciBvSnQ9SCgoUlhuLGlKdCk9PntmdW5jdGlvbiBFV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9aUp0LmV4cG9ydHM9RVdlfSk7dmFyIEE0PUgoKE5YbixhSnQpPT57dmFyIFRXZT1vSnQoKTtmdW5jdGlvbiBDV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBUV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH1hSnQuZXhwb3J0cz1DV2V9KTt2YXIgbEp0PUgoKERYbixzSnQpPT57dmFyIEFXZT1BNCgpO2Z1bmN0aW9uIFBXZShlKXt2YXIgdD1BV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1zSnQuZXhwb3J0cz1QV2V9KTt2YXIgdUp0PUgoKE9YbixjSnQpPT57dmFyIElXZT1BNCgpO2Z1bmN0aW9uIExXZShlKXtyZXR1cm4gSVdlKHRoaXMsZSkuZ2V0KGUpfWNKdC5leHBvcnRzPUxXZX0pO3ZhciBmSnQ9SCgoelhuLGhKdCk9Pnt2YXIga1dlPUE0KCk7ZnVuY3Rpb24gUldlKGUpe3JldHVybiBrV2UodGhpcyxlKS5oYXMoZSl9aEp0LmV4cG9ydHM9UldlfSk7dmFyIGRKdD1IKChGWG4scEp0KT0+e3ZhciBOV2U9QTQoKTtmdW5jdGlvbiBEV2UoZSx0KXt2YXIgcj1OV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31wSnQuZXhwb3J0cz1EV2V9KTt2YXIgRkI9SCgoQlhuLG1KdCk9Pnt2YXIgT1dlPW5KdCgpLHpXZT1sSnQoKSxGV2U9dUp0KCksQldlPWZKdCgpLEhXZT1kSnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9T1dlO0hTLnByb3RvdHlwZS5kZWxldGU9eldlO0hTLnByb3RvdHlwZS5nZXQ9RldlO0hTLnByb3RvdHlwZS5oYXM9QldlO0hTLnByb3RvdHlwZS5zZXQ9SFdlO21KdC5leHBvcnRzPUhTfSk7dmFyIF9KdD1IKChIWG4sZ0p0KT0+e3ZhciBWV2U9RTQoKSxVV2U9ekIoKSxxV2U9RkIoKSxHV2U9MjAwO2Z1bmN0aW9uIFdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFZXZSl7dmFyIG49ci5fX2RhdGFfXztpZighVVdlfHxuLmxlbmd0aDxHV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IHFXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9Z0p0LmV4cG9ydHM9V1dlfSk7dmFyIFA0PUgoKFZYbix5SnQpPT57dmFyIFlXZT1FNCgpLGpXZT1sWnQoKSxYV2U9dVp0KCksJFdlPWZadCgpLEtXZT1kWnQoKSxaV2U9X0p0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgWVdlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPWpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPVhXZTtWUy5wcm90b3R5cGUuZ2V0PSRXZTtWUy5wcm90b3R5cGUuaGFzPUtXZTtWUy5wcm90b3R5cGUuc2V0PVpXZTt5SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChVWG4sdkp0KT0+e2Z1bmN0aW9uIEpXZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfXZKdC5leHBvcnRzPUpXZX0pO3ZhciBmc3Q9SCgocVhuLHhKdCk9Pnt2YXIgUVdlPWwwKCksdFllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPVFXZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTt4SnQuZXhwb3J0cz10WWV9KTt2YXIgSTQ9SCgoR1huLHdKdCk9Pnt2YXIgYkp0PWZzdCgpO2Z1bmN0aW9uIGVZZShlLHQscil7dD09Il9fcHJvdG9fXyImJmJKdD9iSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfXdKdC5leHBvcnRzPWVZZX0pO3ZhciBMND1IKChXWG4sU0p0KT0+e3ZhciByWWU9STQoKSxuWWU9WXYoKSxpWWU9T2JqZWN0LnByb3RvdHlwZSxvWWU9aVllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFZZShlLHQscil7dmFyIG49ZVt0XTsoIShvWWUuY2FsbChlLHQpJiZuWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJnJZZShlLHQscil9U0p0LmV4cG9ydHM9YVllfSk7dmFyIFVTPUgoKFlYbixNSnQpPT57dmFyIHNZZT1MNCgpLGxZZT1JNCgpO2Z1bmN0aW9uIGNZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/bFllKHIscyxsKTpzWWUocixzLGwpfXJldHVybiByfU1KdC5leHBvcnRzPWNZZX0pO3ZhciBUSnQ9SCgoalhuLEVKdCk9PntmdW5jdGlvbiB1WWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufUVKdC5leHBvcnRzPXVZZX0pO3ZhciBZdT1IKChYWG4sQ0p0KT0+e2Z1bmN0aW9uIGhZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUNKdC5leHBvcnRzPWhZZX0pO3ZhciBQSnQ9SCgoJFhuLEFKdCk9Pnt2YXIgZlllPXMwKCkscFllPVl1KCksZFllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gcFllKGUpJiZmWWUoZSk9PWRZZX1BSnQuZXhwb3J0cz1tWWV9KTt2YXIgcVM9SCgoS1huLGtKdCk9Pnt2YXIgSUp0PVBKdCgpLGdZZT1ZdSgpLExKdD1PYmplY3QucHJvdG90eXBlLF9ZZT1MSnQuaGFzT3duUHJvcGVydHkseVllPUxKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSx2WWU9SUp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/SUp0OmZ1bmN0aW9uKGUpe3JldHVybiBnWWUoZSkmJl9ZZS5jYWxsKGUsImNhbGxlZSIpJiYheVllLmNhbGwoZSwiY2FsbGVlIil9O2tKdC5leHBvcnRzPXZZZX0pO3ZhciBUaT1IKChaWG4sUkp0KT0+e3ZhciB4WWU9QXJyYXkuaXNBcnJheTtSSnQuZXhwb3J0cz14WWV9KTt2YXIgREp0PUgoKEpYbixOSnQpPT57ZnVuY3Rpb24gYlllKCl7cmV0dXJuITF9Tkp0LmV4cG9ydHM9YlllfSk7dmFyIFh2PUgoKGs0LEdTKT0+e3ZhciB3WWU9SGMoKSxTWWU9REp0KCksRkp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LE9KdD1GSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLE1ZZT1PSnQmJk9KdC5leHBvcnRzPT09Rkp0LHpKdD1NWWU/d1llLkJ1ZmZlcjp2b2lkIDAsRVllPXpKdD96SnQuaXNCdWZmZXI6dm9pZCAwLFRZZT1FWWV8fFNZZTtHUy5leHBvcnRzPVRZZX0pO3ZhciBSND1IKChRWG4sQkp0KT0+e3ZhciBDWWU9OTAwNzE5OTI1NDc0MDk5MSxBWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFBZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/Q1llOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZBWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fUJKdC5leHBvcnRzPVBZZX0pO3ZhciBIQj1IKCh0JG4sSEp0KT0+e3ZhciBJWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1JWWV9SEp0LmV4cG9ydHM9TFllfSk7dmFyIFVKdD1IKChlJG4sVkp0KT0+e3ZhciBrWWU9czAoKSxSWWU9SEIoKSxOWWU9WXUoKSxEWWU9IltvYmplY3QgQXJndW1lbnRzXSIsT1llPSJbb2JqZWN0IEFycmF5XSIselllPSJbb2JqZWN0IEJvb2xlYW5dIixGWWU9IltvYmplY3QgRGF0ZV0iLEJZZT0iW29iamVjdCBFcnJvcl0iLEhZZT0iW29iamVjdCBGdW5jdGlvbl0iLFZZZT0iW29iamVjdCBNYXBdIixVWWU9IltvYmplY3QgTnVtYmVyXSIscVllPSJbb2JqZWN0IE9iamVjdF0iLEdZZT0iW29iamVjdCBSZWdFeHBdIixXWWU9IltvYmplY3QgU2V0XSIsWVllPSJbb2JqZWN0IFN0cmluZ10iLGpZZT0iW29iamVjdCBXZWFrTWFwXSIsWFllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJFllPSJbb2JqZWN0IERhdGFWaWV3XSIsS1llPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpZZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKWWU9IltvYmplY3QgSW50OEFycmF5XSIsUVllPSJbb2JqZWN0IEludDE2QXJyYXldIix0amU9IltvYmplY3QgSW50MzJBcnJheV0iLGVqZT0iW29iamVjdCBVaW50OEFycmF5XSIscmplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsbmplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaWplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVm49e307Vm5bS1llXT1WbltaWWVdPVZuW0pZZV09Vm5bUVllXT1Wblt0amVdPVZuW2VqZV09Vm5bcmplXT1WbltuamVdPVZuW2lqZV09ITA7Vm5bRFllXT1WbltPWWVdPVZuW1hZZV09Vm5belllXT1WblskWWVdPVZuW0ZZZV09Vm5bQlllXT1WbltIWWVdPVZuW1ZZZV09Vm5bVVllXT1WbltxWWVdPVZuW0dZZV09Vm5bV1llXT1WbltZWWVdPVZuW2pZZV09ITE7ZnVuY3Rpb24gb2plKGUpe3JldHVybiBOWWUoZSkmJlJZZShlLmxlbmd0aCkmJiEhVm5ba1llKGUpXX1WSnQuZXhwb3J0cz1vamV9KTt2YXIgTjQ9SCgociRuLHFKdCk9PntmdW5jdGlvbiBhamUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1xSnQuZXhwb3J0cz1hamV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIHNqZT1jc3QoKSxHSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9R0p0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxsamU9TzQmJk80LmV4cG9ydHM9PT1HSnQscHN0PWxqZSYmc2plLnByb2Nlc3MsY2plPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPWNqZX0pO3ZhciBZUz1IKChuJG4sakp0KT0+e3ZhciB1amU9VUp0KCksaGplPU40KCksV0p0PVZCKCksWUp0PVdKdCYmV0p0LmlzVHlwZWRBcnJheSxmamU9WUp0P2hqZShZSnQpOnVqZTtqSnQuZXhwb3J0cz1mamV9KTt2YXIgZHN0PUgoKGkkbixYSnQpPT57dmFyIHBqZT1USnQoKSxkamU9cVMoKSxtamU9VGkoKSxnamU9WHYoKSxfamU9UjQoKSx5amU9WVMoKSx2amU9T2JqZWN0LnByb3RvdHlwZSx4amU9dmplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGJqZShlLHQpe3ZhciByPW1qZShlKSxuPSFyJiZkamUoZSksaT0hciYmIW4mJmdqZShlKSxvPSFyJiYhbiYmIWkmJnlqZShlKSxhPXJ8fG58fGl8fG8scz1hP3BqZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fHhqZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxfamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9WEp0LmV4cG9ydHM9YmplfSk7dmFyIHo0PUgoKG8kbiwkSnQpPT57dmFyIHdqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIFNqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHx3amU7cmV0dXJuIGU9PT1yfSRKdC5leHBvcnRzPVNqZX0pO3ZhciBtc3Q9SCgoYSRuLEtKdCk9PntmdW5jdGlvbiBNamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fUtKdC5leHBvcnRzPU1qZX0pO3ZhciBKSnQ9SCgocyRuLFpKdCk9Pnt2YXIgRWplPW1zdCgpLFRqZT1FamUoT2JqZWN0LmtleXMsT2JqZWN0KTtaSnQuZXhwb3J0cz1UamV9KTt2YXIgVUI9SCgobCRuLFFKdCk9Pnt2YXIgQ2plPXo0KCksQWplPUpKdCgpLFBqZT1PYmplY3QucHJvdG90eXBlLElqZT1QamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTGplKGUpe2lmKCFDamUoZSkpcmV0dXJuIEFqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKUlqZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1RSnQuZXhwb3J0cz1MamV9KTt2YXIgQmY9SCgoYyRuLHRRdCk9Pnt2YXIga2plPUZTKCksUmplPUhCKCk7ZnVuY3Rpb24gTmplKGUpe3JldHVybiBlIT1udWxsJiZSamUoZS5sZW5ndGgpJiYha2plKGUpfXRRdC5leHBvcnRzPU5qZX0pO3ZhciBBZD1IKCh1JG4sZVF0KT0+e3ZhciBEamU9ZHN0KCksT2plPVVCKCksemplPUJmKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiB6amUoZSk/RGplKGUpOk9qZShlKX1lUXQuZXhwb3J0cz1GamV9KTt2YXIgblF0PUgoKGgkbixyUXQpPT57dmFyIEJqZT1VUygpLEhqZT1BZCgpO2Z1bmN0aW9uIFZqZShlLHQpe3JldHVybiBlJiZCamUodCxIamUodCksZSl9clF0LmV4cG9ydHM9VmplfSk7dmFyIG9RdD1IKChmJG4saVF0KT0+e2Z1bmN0aW9uIFVqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWlRdC5leHBvcnRzPVVqZX0pO3ZhciBzUXQ9SCgocCRuLGFRdCk9Pnt2YXIgcWplPU1sKCksR2plPXo0KCksV2plPW9RdCgpLFlqZT1PYmplY3QucHJvdG90eXBlLGpqZT1ZamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWGplKGUpe2lmKCFxamUoZSkpcmV0dXJuIFdqZShlKTt2YXIgdD1HamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IWpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9YVF0LmV4cG9ydHM9WGplfSk7dmFyIGMwPUgoKGQkbixsUXQpPT57dmFyICRqZT1kc3QoKSxLamU9c1F0KCksWmplPUJmKCk7ZnVuY3Rpb24gSmplKGUpe3JldHVybiBaamUoZSk/JGplKGUsITApOktqZShlKX1sUXQuZXhwb3J0cz1KamV9KTt2YXIgdVF0PUgoKG0kbixjUXQpPT57dmFyIFFqZT1VUygpLHRYZT1jMCgpO2Z1bmN0aW9uIGVYZShlLHQpe3JldHVybiBlJiZRamUodCx0WGUodCksZSl9Y1F0LmV4cG9ydHM9ZVhlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgclhlPUhjKCksZFF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LGhRdD1kUXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLG5YZT1oUXQmJmhRdC5leHBvcnRzPT09ZFF0LGZRdD1uWGU/clhlLkJ1ZmZlcjp2b2lkIDAscFF0PWZRdD9mUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGlYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPXBRdD9wUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9aVhlfSk7dmFyIF9zdD1IKChnJG4sbVF0KT0+e2Z1bmN0aW9uIG9YZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fW1RdC5leHBvcnRzPW9YZX0pO3ZhciB5c3Q9SCgoXyRuLGdRdCk9PntmdW5jdGlvbiBhWGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfWdRdC5leHBvcnRzPWFYZX0pO3ZhciB2c3Q9SCgoeSRuLF9RdCk9PntmdW5jdGlvbiBzWGUoKXtyZXR1cm5bXX1fUXQuZXhwb3J0cz1zWGV9KTt2YXIgcUI9SCgodiRuLHZRdCk9Pnt2YXIgbFhlPXlzdCgpLGNYZT12c3QoKSx1WGU9T2JqZWN0LnByb3RvdHlwZSxoWGU9dVhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHlRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZYZT15UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGxYZSh5UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIGhYZS5jYWxsKGUsdCl9KSl9OmNYZTt2UXQuZXhwb3J0cz1mWGV9KTt2YXIgYlF0PUgoKHgkbix4UXQpPT57dmFyIHBYZT1VUygpLGRYZT1xQigpO2Z1bmN0aW9uIG1YZShlLHQpe3JldHVybiBwWGUoZSxkWGUoZSksdCl9eFF0LmV4cG9ydHM9bVhlfSk7dmFyIEdCPUgoKGIkbix3UXQpPT57ZnVuY3Rpb24gZ1hlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9d1F0LmV4cG9ydHM9Z1hlfSk7dmFyIEI0PUgoKHckbixTUXQpPT57dmFyIF9YZT1tc3QoKSx5WGU9X1hlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO1NRdC5leHBvcnRzPXlYZX0pO3ZhciB4c3Q9SCgoUyRuLE1RdCk9Pnt2YXIgdlhlPUdCKCkseFhlPUI0KCksYlhlPXFCKCksd1hlPXZzdCgpLFNYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLE1YZT1TWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KXZYZSh0LGJYZShlKSksZT14WGUoZSk7cmV0dXJuIHR9OndYZTtNUXQuZXhwb3J0cz1NWGV9KTt2YXIgVFF0PUgoKE0kbixFUXQpPT57dmFyIEVYZT1VUygpLFRYZT14c3QoKTtmdW5jdGlvbiBDWGUoZSx0KXtyZXR1cm4gRVhlKGUsVFhlKGUpLHQpfUVRdC5leHBvcnRzPUNYZX0pO3ZhciBic3Q9SCgoRSRuLENRdCk9Pnt2YXIgQVhlPUdCKCksUFhlPVRpKCk7ZnVuY3Rpb24gSVhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBQWGUoZSk/bjpBWGUobixyKGUpKX1DUXQuZXhwb3J0cz1JWGV9KTt2YXIgd3N0PUgoKFQkbixBUXQpPT57dmFyIExYZT1ic3QoKSxrWGU9cUIoKSxSWGU9QWQoKTtmdW5jdGlvbiBOWGUoZSl7cmV0dXJuIExYZShlLFJYZSxrWGUpfUFRdC5leHBvcnRzPU5YZX0pO3ZhciBJUXQ9SCgoQyRuLFBRdCk9Pnt2YXIgRFhlPWJzdCgpLE9YZT14c3QoKSx6WGU9YzAoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfVBRdC5leHBvcnRzPUZYZX0pO3ZhciBrUXQ9SCgoQSRuLExRdCk9Pnt2YXIgQlhlPWwwKCksSFhlPUhjKCksVlhlPUJYZShIWGUsIkRhdGFWaWV3Iik7TFF0LmV4cG9ydHM9VlhlfSk7dmFyIE5RdD1IKChQJG4sUlF0KT0+e3ZhciBVWGU9bDAoKSxxWGU9SGMoKSxHWGU9VVhlKHFYZSwiUHJvbWlzZSIpO1JRdC5leHBvcnRzPUdYZX0pO3ZhciBTc3Q9SCgoSSRuLERRdCk9Pnt2YXIgV1hlPWwwKCksWVhlPUhjKCksalhlPVdYZShZWGUsIlNldCIpO0RRdC5leHBvcnRzPWpYZX0pO3ZhciB6UXQ9SCgoTCRuLE9RdCk9Pnt2YXIgWFhlPWwwKCksJFhlPUhjKCksS1hlPVhYZSgkWGUsIldlYWtNYXAiKTtPUXQuZXhwb3J0cz1LWGV9KTt2YXIgS3Y9SCgoayRuLEdRdCk9Pnt2YXIgTXN0PWtRdCgpLEVzdD16QigpLFRzdD1OUXQoKSxDc3Q9U3N0KCksQXN0PXpRdCgpLHFRdD1zMCgpLFhTPWhzdCgpLEZRdD0iW29iamVjdCBNYXBdIixaWGU9IltvYmplY3QgT2JqZWN0XSIsQlF0PSJbb2JqZWN0IFByb21pc2VdIixIUXQ9IltvYmplY3QgU2V0XSIsVlF0PSJbb2JqZWN0IFdlYWtNYXBdIixVUXQ9IltvYmplY3QgRGF0YVZpZXddIixKWGU9WFMoTXN0KSxRWGU9WFMoRXN0KSx0JGU9WFMoVHN0KSxlJGU9WFMoQ3N0KSxyJGU9WFMoQXN0KSwkdj1xUXQ7KE1zdCYmJHYobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9VVF0fHxFc3QmJiR2KG5ldyBFc3QpIT1GUXR8fFRzdCYmJHYoVHN0LnJlc29sdmUoKSkhPUJRdHx8Q3N0JiYkdihuZXcgQ3N0KSE9SFF0fHxBc3QmJiR2KG5ldyBBc3QpIT1WUXQpJiYoJHY9ZnVuY3Rpb24oZSl7dmFyIHQ9cVF0KGUpLHI9dD09WlhlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEpYZTpyZXR1cm4gVVF0O2Nhc2UgUVhlOnJldHVybiBGUXQ7Y2FzZSB0JGU6cmV0dXJuIEJRdDtjYXNlIGUkZTpyZXR1cm4gSFF0O2Nhc2UgciRlOnJldHVybiBWUXR9cmV0dXJuIHR9KTtHUXQuZXhwb3J0cz0kdn0pO3ZhciBZUXQ9SCgoUiRuLFdRdCk9Pnt2YXIgbiRlPU9iamVjdC5wcm90b3R5cGUsaSRlPW4kZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZpJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn1XUXQuZXhwb3J0cz1vJGV9KTt2YXIgUHN0PUgoKE4kbixqUXQpPT57dmFyIGEkZT1IYygpLHMkZT1hJGUuVWludDhBcnJheTtqUXQuZXhwb3J0cz1zJGV9KTt2YXIgV0I9SCgoRCRuLCRRdCk9Pnt2YXIgWFF0PVBzdCgpO2Z1bmN0aW9uIGwkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWFF0KHQpLnNldChuZXcgWFF0KGUpKSx0fSRRdC5leHBvcnRzPWwkZX0pO3ZhciBaUXQ9SCgoTyRuLEtRdCk9Pnt2YXIgYyRlPVdCKCk7ZnVuY3Rpb24gdSRlKGUsdCl7dmFyIHI9dD9jJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfUtRdC5leHBvcnRzPXUkZX0pO3ZhciBRUXQ9SCgoeiRuLEpRdCk9Pnt2YXIgaCRlPS9cdyokLztmdW5jdGlvbiBmJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsaCRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fUpRdC5leHBvcnRzPWYkZX0pO3ZhciBpdGU9SCgoRiRuLG50ZSk9Pnt2YXIgdHRlPWp2KCksZXRlPXR0ZT90dGUucHJvdG90eXBlOnZvaWQgMCxydGU9ZXRlP2V0ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBwJGUoZSl7cmV0dXJuIHJ0ZT9PYmplY3QocnRlLmNhbGwoZSkpOnt9fW50ZS5leHBvcnRzPXAkZX0pO3ZhciBJc3Q9SCgoQiRuLG90ZSk9Pnt2YXIgZCRlPVdCKCk7ZnVuY3Rpb24gbSRlKGUsdCl7dmFyIHI9dD9kJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9b3RlLmV4cG9ydHM9bSRlfSk7dmFyIHN0ZT1IKChIJG4sYXRlKT0+e3ZhciBnJGU9V0IoKSxfJGU9WlF0KCkseSRlPVFRdCgpLHYkZT1pdGUoKSx4JGU9SXN0KCksYiRlPSJbb2JqZWN0IEJvb2xlYW5dIix3JGU9IltvYmplY3QgRGF0ZV0iLFMkZT0iW29iamVjdCBNYXBdIixNJGU9IltvYmplY3QgTnVtYmVyXSIsRSRlPSJbb2JqZWN0IFJlZ0V4cF0iLFQkZT0iW29iamVjdCBTZXRdIixDJGU9IltvYmplY3QgU3RyaW5nXSIsQSRlPSJbb2JqZWN0IFN5bWJvbF0iLFAkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEkkZT0iW29iamVjdCBEYXRhVmlld10iLEwkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixrJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsUiRlPSJbb2JqZWN0IEludDhBcnJheV0iLE4kZT0iW29iamVjdCBJbnQxNkFycmF5XSIsRCRlPSJbb2JqZWN0IEludDMyQXJyYXldIixPJGU9IltvYmplY3QgVWludDhBcnJheV0iLHokZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLEYkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLEIkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEgkZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBQJGU6cmV0dXJuIGckZShlKTtjYXNlIGIkZTpjYXNlIHckZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgSSRlOnJldHVybiBfJGUoZSxyKTtjYXNlIEwkZTpjYXNlIGskZTpjYXNlIFIkZTpjYXNlIE4kZTpjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpyZXR1cm4geCRlKGUscik7Y2FzZSBTJGU6cmV0dXJuIG5ldyBuO2Nhc2UgTSRlOmNhc2UgQyRlOnJldHVybiBuZXcgbihlKTtjYXNlIEUkZTpyZXR1cm4geSRlKGUpO2Nhc2UgVCRlOnJldHVybiBuZXcgbjtjYXNlIEEkZTpyZXR1cm4gdiRlKGUpfX1hdGUuZXhwb3J0cz1IJGV9KTt2YXIgTHN0PUgoKFYkbixjdGUpPT57dmFyIFYkZT1NbCgpLGx0ZT1PYmplY3QuY3JlYXRlLFUkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFWJGUodCkpcmV0dXJue307aWYobHRlKXJldHVybiBsdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO2N0ZS5leHBvcnRzPVUkZX0pO3ZhciBrc3Q9SCgoVSRuLHV0ZSk9Pnt2YXIgcSRlPUxzdCgpLEckZT1CNCgpLFckZT16NCgpO2Z1bmN0aW9uIFkkZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFXJGUoZSk/cSRlKEckZShlKSk6e319dXRlLmV4cG9ydHM9WSRlfSk7dmFyIGZ0ZT1IKChxJG4saHRlKT0+e3ZhciBqJGU9S3YoKSxYJGU9WXUoKSwkJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gSyRlKGUpe3JldHVybiBYJGUoZSkmJmokZShlKT09JCRlfWh0ZS5leHBvcnRzPUskZX0pO3ZhciBndGU9SCgoRyRuLG10ZSk9Pnt2YXIgWiRlPWZ0ZSgpLEokZT1ONCgpLHB0ZT1WQigpLGR0ZT1wdGUmJnB0ZS5pc01hcCxRJGU9ZHRlP0okZShkdGUpOlokZTttdGUuZXhwb3J0cz1RJGV9KTt2YXIgeXRlPUgoKFckbixfdGUpPT57dmFyIHRLZT1LdigpLGVLZT1ZdSgpLHJLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBuS2UoZSl7cmV0dXJuIGVLZShlKSYmdEtlKGUpPT1yS2V9X3RlLmV4cG9ydHM9bktlfSk7dmFyIHd0ZT1IKChZJG4sYnRlKT0+e3ZhciBpS2U9eXRlKCksb0tlPU40KCksdnRlPVZCKCkseHRlPXZ0ZSYmdnRlLmlzU2V0LGFLZT14dGU/b0tlKHh0ZSk6aUtlO2J0ZS5leHBvcnRzPWFLZX0pO3ZhciBSc3Q9SCgoaiRuLFR0ZSk9Pnt2YXIgc0tlPVA0KCksbEtlPUJCKCksY0tlPUw0KCksdUtlPW5RdCgpLGhLZT11UXQoKSxmS2U9Z3N0KCkscEtlPV9zdCgpLGRLZT1iUXQoKSxtS2U9VFF0KCksZ0tlPXdzdCgpLF9LZT1JUXQoKSx5S2U9S3YoKSx2S2U9WVF0KCkseEtlPXN0ZSgpLGJLZT1rc3QoKSx3S2U9VGkoKSxTS2U9WHYoKSxNS2U9Z3RlKCksRUtlPU1sKCksVEtlPXd0ZSgpLENLZT1BZCgpLEFLZT1jMCgpLFBLZT0xLElLZT0yLExLZT00LFN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixrS2U9IltvYmplY3QgQXJyYXldIixSS2U9IltvYmplY3QgQm9vbGVhbl0iLE5LZT0iW29iamVjdCBEYXRlXSIsREtlPSJbb2JqZWN0IEVycm9yXSIsTXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsT0tlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsektlPSJbb2JqZWN0IE1hcF0iLEZLZT0iW29iamVjdCBOdW1iZXJdIixFdGU9IltvYmplY3QgT2JqZWN0XSIsQktlPSJbb2JqZWN0IFJlZ0V4cF0iLEhLZT0iW29iamVjdCBTZXRdIixWS2U9IltvYmplY3QgU3RyaW5nXSIsVUtlPSJbb2JqZWN0IFN5bWJvbF0iLHFLZT0iW29iamVjdCBXZWFrTWFwXSIsR0tlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsV0tlPSJbb2JqZWN0IERhdGFWaWV3XSIsWUtlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixYS2U9IltvYmplY3QgSW50OEFycmF5XSIsJEtlPSJbb2JqZWN0IEludDE2QXJyYXldIixLS2U9IltvYmplY3QgSW50MzJBcnJheV0iLFpLZT0iW29iamVjdCBVaW50OEFycmF5XSIsSktlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsUUtlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdFplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bU3RlXT1DbltrS2VdPUNuW0dLZV09Q25bV0tlXT1DbltSS2VdPUNuW05LZV09Q25bWUtlXT1DbltqS2VdPUNuW1hLZV09Q25bJEtlXT1DbltLS2VdPUNuW3pLZV09Q25bRktlXT1DbltFdGVdPUNuW0JLZV09Q25bSEtlXT1DbltWS2VdPUNuW1VLZV09Q25bWktlXT1DbltKS2VdPUNuW1FLZV09Q25bdFplXT0hMDtDbltES2VdPUNuW010ZV09Q25bcUtlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlBLZSxsPXQmSUtlLGM9dCZMS2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIUVLZShlKSlyZXR1cm4gZTt2YXIgdT13S2UoZSk7aWYodSl7aWYoYT12S2UoZSksIXMpcmV0dXJuIHBLZShlLGEpfWVsc2V7dmFyIGg9eUtlKGUpLGY9aD09TXRlfHxoPT1PS2U7aWYoU0tlKGUpKXJldHVybiBmS2UoZSxzKTtpZihoPT1FdGV8fGg9PVN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpiS2UoZSksIXMpcmV0dXJuIGw/bUtlKGUsaEtlKGEsZSkpOmRLZShlLHVLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9eEtlKGUsaCxzKX19b3x8KG89bmV3IHNLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLFRLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOk1LZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP19LZTpnS2U6bD9BS2U6Q0tlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gbEtlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSksY0tlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1UdGUuZXhwb3J0cz1ZQn0pO3ZhciBBdGU9SCgoWCRuLEN0ZSk9Pnt2YXIgZVplPVJzdCgpLHJaZT00O2Z1bmN0aW9uIG5aZShlKXtyZXR1cm4gZVplKGUsclplKX1DdGUuZXhwb3J0cz1uWmV9KTt2YXIgakI9SCgoJCRuLFB0ZSk9PntmdW5jdGlvbiBpWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVB0ZS5leHBvcnRzPWlaZX0pO3ZhciBMdGU9SCgoSyRuLEl0ZSk9PntmdW5jdGlvbiBvWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1JdGUuZXhwb3J0cz1vWmV9KTt2YXIgWEI9SCgoWiRuLGt0ZSk9Pnt2YXIgYVplPUx0ZSgpLHNaZT1hWmUoKTtrdGUuZXhwb3J0cz1zWmV9KTt2YXIgJEI9SCgoSiRuLFJ0ZSk9Pnt2YXIgbFplPVhCKCksY1plPUFkKCk7ZnVuY3Rpb24gdVplKGUsdCl7cmV0dXJuIGUmJmxaZShlLHQsY1plKX1SdGUuZXhwb3J0cz11WmV9KTt2YXIgRHRlPUgoKFEkbixOdGUpPT57dmFyIGhaZT1CZigpO2Z1bmN0aW9uIGZaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIWhaZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fU50ZS5leHBvcnRzPWZaZX0pO3ZhciBIND1IKCh0S24sT3RlKT0+e3ZhciBwWmU9JEIoKSxkWmU9RHRlKCksbVplPWRaZShwWmUpO090ZS5leHBvcnRzPW1aZX0pO3ZhciB1MD1IKChlS24senRlKT0+e2Z1bmN0aW9uIGdaZShlKXtyZXR1cm4gZX16dGUuZXhwb3J0cz1nWmV9KTt2YXIgTnN0PUgoKHJLbixGdGUpPT57dmFyIF9aZT11MCgpO2Z1bmN0aW9uIHlaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpfWmV9RnRlLmV4cG9ydHM9eVplfSk7dmFyIERzdD1IKChuS24sQnRlKT0+e3ZhciB2WmU9QkIoKSx4WmU9SDQoKSxiWmU9TnN0KCksd1plPVRpKCk7ZnVuY3Rpb24gU1plKGUsdCl7dmFyIHI9d1plKGUpP3ZaZTp4WmU7cmV0dXJuIHIoZSxiWmUodCkpfUJ0ZS5leHBvcnRzPVNaZX0pO3ZhciBPc3Q9SCgoaUtuLEh0ZSk9PntIdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBVdGU9SCgob0tuLFZ0ZSk9Pnt2YXIgTVplPUg0KCk7ZnVuY3Rpb24gRVplKGUsdCl7dmFyIHI9W107cmV0dXJuIE1aZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1WdGUuZXhwb3J0cz1FWmV9KTt2YXIgR3RlPUgoKGFLbixxdGUpPT57dmFyIFRaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gQ1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLFRaZSksdGhpc31xdGUuZXhwb3J0cz1DWmV9KTt2YXIgWXRlPUgoKHNLbixXdGUpPT57ZnVuY3Rpb24gQVplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1XdGUuZXhwb3J0cz1BWmV9KTt2YXIgenN0PUgoKGxLbixqdGUpPT57dmFyIFBaZT1GQigpLElaZT1HdGUoKSxMWmU9WXRlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFBaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1JWmU7S0IucHJvdG90eXBlLmhhcz1MWmU7anRlLmV4cG9ydHM9S0J9KTt2YXIgJHRlPUgoKGNLbixYdGUpPT57ZnVuY3Rpb24ga1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1YdGUuZXhwb3J0cz1rWmV9KTt2YXIgRnN0PUgoKHVLbixLdGUpPT57ZnVuY3Rpb24gUlplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfUt0ZS5leHBvcnRzPVJaZX0pO3ZhciBCc3Q9SCgoaEtuLFp0ZSk9Pnt2YXIgTlplPXpzdCgpLERaZT0kdGUoKSxPWmU9RnN0KCkselplPTEsRlplPTI7ZnVuY3Rpb24gQlplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnpaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZGWmU/bmV3IE5aZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIURaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIU9aZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfVp0ZS5leHBvcnRzPUJaZX0pO3ZhciBRdGU9SCgoZktuLEp0ZSk9PntmdW5jdGlvbiBIWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfUp0ZS5leHBvcnRzPUhaZX0pO3ZhciBaQj1IKChwS24sdGVlKT0+e2Z1bmN0aW9uIFZaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9dGVlLmV4cG9ydHM9VlplfSk7dmFyIG9lZT1IKChkS24saWVlKT0+e3ZhciBlZWU9anYoKSxyZWU9UHN0KCksVVplPVl2KCkscVplPUJzdCgpLEdaZT1RdGUoKSxXWmU9WkIoKSxZWmU9MSxqWmU9MixYWmU9IltvYmplY3QgQm9vbGVhbl0iLCRaZT0iW29iamVjdCBEYXRlXSIsS1plPSJbb2JqZWN0IEVycm9yXSIsWlplPSJbb2JqZWN0IE1hcF0iLEpaZT0iW29iamVjdCBOdW1iZXJdIixRWmU9IltvYmplY3QgUmVnRXhwXSIsdEplPSJbb2JqZWN0IFNldF0iLGVKZT0iW29iamVjdCBTdHJpbmddIixySmU9IltvYmplY3QgU3ltYm9sXSIsbkplPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsaUplPSJbb2JqZWN0IERhdGFWaWV3XSIsbmVlPWVlZT9lZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9bmVlP25lZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBvSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgaUplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBuSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IHJlZShlKSxuZXcgcmVlKHQpKSk7Y2FzZSBYWmU6Y2FzZSAkWmU6Y2FzZSBKWmU6cmV0dXJuIFVaZSgrZSwrdCk7Y2FzZSBLWmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIFFaZTpjYXNlIGVKZTpyZXR1cm4gZT09dCsiIjtjYXNlIFpaZTp2YXIgcz1HWmU7Y2FzZSB0SmU6dmFyIGw9biZZWmU7aWYoc3x8KHM9V1plKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1qWmUsYS5zZXQoZSx0KTt2YXIgdT1xWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgckplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWllZS5leHBvcnRzPW9KZX0pO3ZhciBsZWU9SCgobUtuLHNlZSk9Pnt2YXIgYWVlPXdzdCgpLGFKZT0xLHNKZT1PYmplY3QucHJvdG90eXBlLGxKZT1zSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gY0plKGUsdCxyLG4saSxvKXt2YXIgYT1yJmFKZSxzPWFlZShlKSxsPXMubGVuZ3RoLGM9YWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmxKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9c2VlLmV4cG9ydHM9Y0plfSk7dmFyIGdlZT1IKChnS24sbWVlKT0+e3ZhciBWc3Q9UDQoKSx1SmU9QnN0KCksaEplPW9lZSgpLGZKZT1sZWUoKSxjZWU9S3YoKSx1ZWU9VGkoKSxoZWU9WHYoKSxwSmU9WVMoKSxkSmU9MSxmZWU9IltvYmplY3QgQXJndW1lbnRzXSIscGVlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsbUplPU9iamVjdC5wcm90b3R5cGUsZGVlPW1KZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBnSmUoZSx0LHIsbixpLG8pe3ZhciBhPXVlZShlKSxzPXVlZSh0KSxsPWE/cGVlOmNlZShlKSxjPXM/cGVlOmNlZSh0KTtsPWw9PWZlZT9KQjpsLGM9Yz09ZmVlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmaGVlKGUpKXtpZighaGVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8cEplKGUpP3VKZShlLHQscixuLGksbyk6aEplKGUsdCxsLHIsbixpLG8pO2lmKCEociZkSmUpKXt2YXIgcD11JiZkZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmZGVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZkplKGUsdCxyLG4saSxvKSk6ITF9bWVlLmV4cG9ydHM9Z0plfSk7dmFyIFVzdD1IKChfS24sdmVlKT0+e3ZhciBfSmU9Z2VlKCksX2VlPVl1KCk7ZnVuY3Rpb24geWVlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFfZWUoZSkmJiFfZWUodCk/ZSE9PWUmJnQhPT10Ol9KZShlLHQscixuLHllZSxpKX12ZWUuZXhwb3J0cz15ZWV9KTt2YXIgYmVlPUgoKHlLbix4ZWUpPT57dmFyIHlKZT1QNCgpLHZKZT1Vc3QoKSx4SmU9MSxiSmU9MjtmdW5jdGlvbiB3SmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB5SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/dkplKHUsYyx4SmV8YkplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfXhlZS5leHBvcnRzPXdKZX0pO3ZhciBxc3Q9SCgodktuLHdlZSk9Pnt2YXIgU0plPU1sKCk7ZnVuY3Rpb24gTUplKGUpe3JldHVybiBlPT09ZSYmIVNKZShlKX13ZWUuZXhwb3J0cz1NSmV9KTt2YXIgTWVlPUgoKHhLbixTZWUpPT57dmFyIEVKZT1xc3QoKSxUSmU9QWQoKTtmdW5jdGlvbiBDSmUoZSl7Zm9yKHZhciB0PVRKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxFSmUoaSldfXJldHVybiB0fVNlZS5leHBvcnRzPUNKZX0pO3ZhciBHc3Q9SCgoYktuLEVlZSk9PntmdW5jdGlvbiBBSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fUVlZS5leHBvcnRzPUFKZX0pO3ZhciBDZWU9SCgod0tuLFRlZSk9Pnt2YXIgUEplPWJlZSgpLElKZT1NZWUoKSxMSmU9R3N0KCk7ZnVuY3Rpb24ga0plKGUpe3ZhciB0PUlKZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/TEplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxQSmUocixlLHQpfX1UZWUuZXhwb3J0cz1rSmV9KTt2YXIgWnY9SCgoU0tuLEFlZSk9Pnt2YXIgUkplPXMwKCksTkplPVl1KCksREplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIE9KZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxOSmUoZSkmJlJKZShlKT09REplfUFlZS5leHBvcnRzPU9KZX0pO3ZhciBRQj1IKChNS24sUGVlKT0+e3ZhciB6SmU9VGkoKSxGSmU9WnYoKSxCSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sSEplPS9eXHcqJC87ZnVuY3Rpb24gVkplKGUsdCl7aWYoekplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8RkplKGUpPyEwOkhKZS50ZXN0KGUpfHwhQkplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVBlZS5leHBvcnRzPVZKZX0pO3ZhciBrZWU9SCgoRUtuLExlZSk9Pnt2YXIgSWVlPUZCKCksVUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihVSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fEllZSkscn1Xc3QuQ2FjaGU9SWVlO0xlZS5leHBvcnRzPVdzdH0pO3ZhciBOZWU9SCgoVEtuLFJlZSk9Pnt2YXIgcUplPWtlZSgpLEdKZT01MDA7ZnVuY3Rpb24gV0plKGUpe3ZhciB0PXFKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1HSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoQ0tuLERlZSk9Pnt2YXIgWUplPU5lZSgpLGpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxYSmU9L1xcKFxcKT8vZywkSmU9WUplKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoakplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShYSmUsIiQxIik6bnx8cil9KSx0fSk7RGVlLmV4cG9ydHM9JEplfSk7dmFyIFY0PUgoKEFLbix6ZWUpPT57ZnVuY3Rpb24gS0plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9emVlLmV4cG9ydHM9S0plfSk7dmFyIHFlZT1IKChQS24sVWVlKT0+e3ZhciBGZWU9anYoKSxaSmU9VjQoKSxKSmU9VGkoKSxRSmU9WnYoKSx0UWU9MS8wLEJlZT1GZWU/RmVlLnByb3RvdHlwZTp2b2lkIDAsSGVlPUJlZT9CZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFZlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoSkplKGUpKXJldHVybiBaSmUoZSxWZWUpKyIiO2lmKFFKZShlKSlyZXR1cm4gSGVlP0hlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tdFFlPyItMCI6dH1VZWUuZXhwb3J0cz1WZWV9KTt2YXIgWXN0PUgoKElLbixHZWUpPT57dmFyIGVRZT1xZWUoKTtmdW5jdGlvbiByUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6ZVFlKGUpfUdlZS5leHBvcnRzPXJRZX0pO3ZhciBVND1IKChMS24sV2VlKT0+e3ZhciBuUWU9VGkoKSxpUWU9UUIoKSxvUWU9T2VlKCksYVFlPVlzdCgpO2Z1bmN0aW9uIHNRZShlLHQpe3JldHVybiBuUWUoZSk/ZTppUWUoZSx0KT9bZV06b1FlKGFRZShlKSl9V2VlLmV4cG9ydHM9c1FlfSk7dmFyICRTPUgoKGtLbixZZWUpPT57dmFyIGxRZT1adigpLGNRZT0xLzA7ZnVuY3Rpb24gdVFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8bFFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tY1FlPyItMCI6dH1ZZWUuZXhwb3J0cz11UWV9KTt2YXIgcTQ9SCgoUktuLGplZSk9Pnt2YXIgaFFlPVU0KCksZlFlPSRTKCk7ZnVuY3Rpb24gcFFlKGUsdCl7dD1oUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2ZRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1qZWUuZXhwb3J0cz1wUWV9KTt2YXIgJGVlPUgoKE5LbixYZWUpPT57dmFyIGRRZT1xNCgpO2Z1bmN0aW9uIG1RZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6ZFFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufVhlZS5leHBvcnRzPW1RZX0pO3ZhciBaZWU9SCgoREtuLEtlZSk9PntmdW5jdGlvbiBnUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9S2VlLmV4cG9ydHM9Z1FlfSk7dmFyIGpzdD1IKChPS24sSmVlKT0+e3ZhciBfUWU9VTQoKSx5UWU9cVMoKSx2UWU9VGkoKSx4UWU9UjQoKSxiUWU9SEIoKSx3UWU9JFMoKTtmdW5jdGlvbiBTUWUoZSx0LHIpe3Q9X1FlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPXdRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJmJRZShpKSYmeFFlKGEsaSkmJih2UWUoZSl8fHlRZShlKSkpfUplZS5leHBvcnRzPVNRZX0pO3ZhciBYc3Q9SCgoektuLFFlZSk9Pnt2YXIgTVFlPVplZSgpLEVRZT1qc3QoKTtmdW5jdGlvbiBUUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmRVFlKGUsdCxNUWUpfVFlZS5leHBvcnRzPVRRZX0pO3ZhciBlcmU9SCgoRktuLHRyZSk9Pnt2YXIgQ1FlPVVzdCgpLEFRZT0kZWUoKSxQUWU9WHN0KCksSVFlPVFCKCksTFFlPXFzdCgpLGtRZT1Hc3QoKSxSUWU9JFMoKSxOUWU9MSxEUWU9MjtmdW5jdGlvbiBPUWUoZSx0KXtyZXR1cm4gSVFlKGUpJiZMUWUodCk/a1FlKFJRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1BUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UFFlKHIsZSk6Q1FlKHQsbixOUWV8RFFlKX19dHJlLmV4cG9ydHM9T1FlfSk7dmFyICRzdD1IKChCS24scnJlKT0+e2Z1bmN0aW9uIHpRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fXJyZS5leHBvcnRzPXpRZX0pO3ZhciBpcmU9SCgoSEtuLG5yZSk9Pnt2YXIgRlFlPXE0KCk7ZnVuY3Rpb24gQlFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRlFlKHQsZSl9fW5yZS5leHBvcnRzPUJRZX0pO3ZhciBhcmU9SCgoVktuLG9yZSk9Pnt2YXIgSFFlPSRzdCgpLFZRZT1pcmUoKSxVUWU9UUIoKSxxUWU9JFMoKTtmdW5jdGlvbiBHUWUoZSl7cmV0dXJuIFVRZShlKT9IUWUocVFlKGUpKTpWUWUoZSl9b3JlLmV4cG9ydHM9R1FlfSk7dmFyIEhmPUgoKFVLbixzcmUpPT57dmFyIFdRZT1DZWUoKSxZUWU9ZXJlKCksalFlPXUwKCksWFFlPVRpKCksJFFlPWFyZSgpO2Z1bmN0aW9uIEtRZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP2pRZTp0eXBlb2YgZT09Im9iamVjdCI/WFFlKGUpP1lRZShlWzBdLGVbMV0pOldRZShlKTokUWUoZSl9c3JlLmV4cG9ydHM9S1FlfSk7dmFyIEtzdD1IKChxS24sbHJlKT0+e3ZhciBaUWU9eXN0KCksSlFlPVV0ZSgpLFFRZT1IZigpLHR0cj1UaSgpO2Z1bmN0aW9uIGV0cihlLHQpe3ZhciByPXR0cihlKT9aUWU6SlFlO3JldHVybiByKGUsUVFlKHQsMykpfWxyZS5leHBvcnRzPWV0cn0pO3ZhciB1cmU9SCgoR0tuLGNyZSk9Pnt2YXIgcnRyPU9iamVjdC5wcm90b3R5cGUsbnRyPXJ0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBpdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmbnRyLmNhbGwoZSx0KX1jcmUuZXhwb3J0cz1pdHJ9KTt2YXIgWnN0PUgoKFdLbixocmUpPT57dmFyIG90cj11cmUoKSxhdHI9anN0KCk7ZnVuY3Rpb24gc3RyKGUsdCl7cmV0dXJuIGUhPW51bGwmJmF0cihlLHQsb3RyKX1ocmUuZXhwb3J0cz1zdHJ9KTt2YXIgcHJlPUgoKFlLbixmcmUpPT57dmFyIGx0cj1VQigpLGN0cj1LdigpLHV0cj1xUygpLGh0cj1UaSgpLGZ0cj1CZigpLHB0cj1YdigpLGR0cj16NCgpLG10cj1ZUygpLGd0cj0iW29iamVjdCBNYXBdIixfdHI9IltvYmplY3QgU2V0XSIseXRyPU9iamVjdC5wcm90b3R5cGUsdnRyPXl0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4dHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihmdHIoZSkmJihodHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxwdHIoZSl8fG10cihlKXx8dXRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9Y3RyKGUpO2lmKHQ9PWd0cnx8dD09X3RyKXJldHVybiFlLnNpemU7aWYoZHRyKGUpKXJldHVybiFsdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKHZ0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9ZnJlLmV4cG9ydHM9eHRyfSk7dmFyIEpzdD1IKChqS24sZHJlKT0+e2Z1bmN0aW9uIGJ0cihlKXtyZXR1cm4gZT09PXZvaWQgMH1kcmUuZXhwb3J0cz1idHJ9KTt2YXIgUXN0PUgoKFhLbixtcmUpPT57dmFyIHd0cj1INCgpLFN0cj1CZigpO2Z1bmN0aW9uIE10cihlLHQpe3ZhciByPS0xLG49U3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gd3RyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59bXJlLmV4cG9ydHM9TXRyfSk7dmFyIHRsdD1IKCgkS24sZ3JlKT0+e3ZhciBFdHI9VjQoKSxUdHI9SGYoKSxDdHI9UXN0KCksQXRyPVRpKCk7ZnVuY3Rpb24gUHRyKGUsdCl7dmFyIHI9QXRyKGUpP0V0cjpDdHI7cmV0dXJuIHIoZSxUdHIodCwzKSl9Z3JlLmV4cG9ydHM9UHRyfSk7dmFyIHlyZT1IKChLS24sX3JlKT0+e2Z1bmN0aW9uIEl0cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfV9yZS5leHBvcnRzPUl0cn0pO3ZhciB4cmU9SCgoWktuLHZyZSk9PntmdW5jdGlvbiBMdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9dnJlLmV4cG9ydHM9THRyfSk7dmFyIGVsdD1IKChKS24sYnJlKT0+e3ZhciBrdHI9eXJlKCksUnRyPUg0KCksTnRyPUhmKCksRHRyPXhyZSgpLE90cj1UaSgpO2Z1bmN0aW9uIHp0cihlLHQscil7dmFyIG49T3RyKGUpP2t0cjpEdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxOdHIodCw0KSxyLGksUnRyKX1icmUuZXhwb3J0cz16dHJ9KTt2YXIgU3JlPUgoKFFLbix3cmUpPT57dmFyIEZ0cj1zMCgpLEJ0cj1UaSgpLEh0cj1ZdSgpLFZ0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBVdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IUJ0cihlKSYmSHRyKGUpJiZGdHIoZSk9PVZ0cn13cmUuZXhwb3J0cz1VdHJ9KTt2YXIgRXJlPUgoKHRabixNcmUpPT57dmFyIHF0cj0kc3QoKSxHdHI9cXRyKCJsZW5ndGgiKTtNcmUuZXhwb3J0cz1HdHJ9KTt2YXIgQ3JlPUgoKGVabixUcmUpPT57dmFyIFd0cj0iXFx1ZDgwMC1cXHVkZmZmIixZdHI9IlxcdTAzMDAtXFx1MDM2ZiIsanRyPSJcXHVmZTIwLVxcdWZlMmYiLFh0cj0iXFx1MjBkMC1cXHUyMGZmIiwkdHI9WXRyK2p0citYdHIsS3RyPSJcXHVmZTBlXFx1ZmUwZiIsWnRyPSJcXHUyMDBkIixKdHI9UmVnRXhwKCJbIitadHIrV3RyKyR0citLdHIrIl0iKTtmdW5jdGlvbiBRdHIoZSl7cmV0dXJuIEp0ci50ZXN0KGUpfVRyZS5leHBvcnRzPVF0cn0pO3ZhciBPcmU9SCgoclpuLERyZSk9Pnt2YXIgUHJlPSJcXHVkODAwLVxcdWRmZmYiLHRlcj0iXFx1MDMwMC1cXHUwMzZmIixlZXI9IlxcdWZlMjAtXFx1ZmUyZiIscmVyPSJcXHUyMGQwLVxcdTIwZmYiLG5lcj10ZXIrZWVyK3JlcixpZXI9IlxcdWZlMGVcXHVmZTBmIixvZXI9IlsiK1ByZSsiXSIscmx0PSJbIituZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixhZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLElyZT0iW14iK1ByZSsiXSIsTHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixrcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLHNlcj0iXFx1MjAwZCIsUnJlPWFlcisiPyIsTnJlPSJbIitpZXIrIl0/IixsZXI9Iig/OiIrc2VyKyIoPzoiK1tJcmUsTHJlLGtyZV0uam9pbigifCIpKyIpIitOcmUrUnJlKyIpKiIsY2VyPU5yZStScmUrbGVyLHVlcj0iKD86IitbSXJlK3JsdCsiPyIscmx0LExyZSxrcmUsb2VyXS5qb2luKCJ8IikrIikiLEFyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK3VlcitjZXIsImciKTtmdW5jdGlvbiBoZXIoZSl7Zm9yKHZhciB0PUFyZS5sYXN0SW5kZXg9MDtBcmUudGVzdChlKTspKyt0O3JldHVybiB0fURyZS5leHBvcnRzPWhlcn0pO3ZhciBGcmU9SCgoblpuLHpyZSk9Pnt2YXIgZmVyPUVyZSgpLHBlcj1DcmUoKSxkZXI9T3JlKCk7ZnVuY3Rpb24gbWVyKGUpe3JldHVybiBwZXIoZSk/ZGVyKGUpOmZlcihlKX16cmUuZXhwb3J0cz1tZXJ9KTt2YXIgSHJlPUgoKGlabixCcmUpPT57dmFyIGdlcj1VQigpLF9lcj1LdigpLHllcj1CZigpLHZlcj1TcmUoKSx4ZXI9RnJlKCksYmVyPSJbb2JqZWN0IE1hcF0iLHdlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBTZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih5ZXIoZSkpcmV0dXJuIHZlcihlKT94ZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9X2VyKGUpO3JldHVybiB0PT1iZXJ8fHQ9PXdlcj9lLnNpemU6Z2VyKGUpLmxlbmd0aH1CcmUuZXhwb3J0cz1TZXJ9KTt2YXIgVXJlPUgoKG9abixWcmUpPT57dmFyIE1lcj1CQigpLEVlcj1Mc3QoKSxUZXI9JEIoKSxDZXI9SGYoKSxBZXI9QjQoKSxQZXI9VGkoKSxJZXI9WHYoKSxMZXI9RlMoKSxrZXI9TWwoKSxSZXI9WVMoKTtmdW5jdGlvbiBOZXIoZSx0LHIpe3ZhciBuPVBlcihlKSxpPW58fEllcihlKXx8UmVyKGUpO2lmKHQ9Q2VyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTprZXIoZSk/cj1MZXIobyk/RWVyKEFlcihlKSk6e306cj17fX1yZXR1cm4oaT9NZXI6VGVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9VnJlLmV4cG9ydHM9TmVyfSk7dmFyIFlyZT1IKChhWm4sV3JlKT0+e3ZhciBxcmU9anYoKSxEZXI9cVMoKSxPZXI9VGkoKSxHcmU9cXJlP3FyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIHplcihlKXtyZXR1cm4gT2VyKGUpfHxEZXIoZSl8fCEhKEdyZSYmZSYmZVtHcmVdKX1XcmUuZXhwb3J0cz16ZXJ9KTt2YXIgdEg9SCgoc1puLFhyZSk9Pnt2YXIgRmVyPUdCKCksQmVyPVlyZSgpO2Z1bmN0aW9uIGpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPUJlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP2pyZShzLHQtMSxyLG4saSk6RmVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfVhyZS5leHBvcnRzPWpyZX0pO3ZhciBLcmU9SCgobFpuLCRyZSk9PntmdW5jdGlvbiBIZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX0kcmUuZXhwb3J0cz1IZXJ9KTt2YXIgaWx0PUgoKGNabixKcmUpPT57dmFyIFZlcj1LcmUoKSxacmU9TWF0aC5tYXg7ZnVuY3Rpb24gVWVyKGUsdCxyKXtyZXR1cm4gdD1acmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1acmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxWZXIoZSx0aGlzLHMpfX1KcmUuZXhwb3J0cz1VZXJ9KTt2YXIgZW5lPUgoKHVabix0bmUpPT57dmFyIHFlcj1qQigpLFFyZT1mc3QoKSxHZXI9dTAoKSxXZXI9UXJlP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIFFyZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnFlcih0KSx3cml0YWJsZTohMH0pfTpHZXI7dG5lLmV4cG9ydHM9V2VyfSk7dmFyIG5uZT1IKChoWm4scm5lKT0+e3ZhciBZZXI9ODAwLGplcj0xNixYZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gJGVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPVhlcigpLGk9amVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49WWVyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXJuZS5leHBvcnRzPSRlcn0pO3ZhciBvbHQ9SCgoZlpuLGluZSk9Pnt2YXIgS2VyPWVuZSgpLFplcj1ubmUoKSxKZXI9WmVyKEtlcik7aW5lLmV4cG9ydHM9SmVyfSk7dmFyIEc0PUgoKHBabixvbmUpPT57dmFyIFFlcj11MCgpLHRycj1pbHQoKSxlcnI9b2x0KCk7ZnVuY3Rpb24gcnJyKGUsdCl7cmV0dXJuIGVycih0cnIoZSx0LFFlciksZSsiIil9b25lLmV4cG9ydHM9cnJyfSk7dmFyIGFsdD1IKChkWm4sYW5lKT0+e2Z1bmN0aW9uIG5ycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX1hbmUuZXhwb3J0cz1ucnJ9KTt2YXIgbG5lPUgoKG1abixzbmUpPT57ZnVuY3Rpb24gaXJyKGUpe3JldHVybiBlIT09ZX1zbmUuZXhwb3J0cz1pcnJ9KTt2YXIgdW5lPUgoKGdabixjbmUpPT57ZnVuY3Rpb24gb3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfWNuZS5leHBvcnRzPW9ycn0pO3ZhciBmbmU9SCgoX1puLGhuZSk9Pnt2YXIgYXJyPWFsdCgpLHNycj1sbmUoKSxscnI9dW5lKCk7ZnVuY3Rpb24gY3JyKGUsdCxyKXtyZXR1cm4gdD09PXQ/bHJyKGUsdCxyKTphcnIoZSxzcnIscil9aG5lLmV4cG9ydHM9Y3JyfSk7dmFyIGRuZT1IKCh5Wm4scG5lKT0+e3ZhciB1cnI9Zm5lKCk7ZnVuY3Rpb24gaHJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmdXJyKGUsdCwwKT4tMX1wbmUuZXhwb3J0cz1ocnJ9KTt2YXIgZ25lPUgoKHZabixtbmUpPT57ZnVuY3Rpb24gZnJyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX1tbmUuZXhwb3J0cz1mcnJ9KTt2YXIgeW5lPUgoKHhabixfbmUpPT57ZnVuY3Rpb24gcHJyKCl7fV9uZS5leHBvcnRzPXBycn0pO3ZhciB4bmU9SCgoYlpuLHZuZSk9Pnt2YXIgc2x0PVNzdCgpLGRycj15bmUoKSxtcnI9WkIoKSxncnI9MS8wLF9ycj1zbHQmJjEvbXJyKG5ldyBzbHQoWywtMF0pKVsxXT09Z3JyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTpkcnI7dm5lLmV4cG9ydHM9X3JyfSk7dmFyIHduZT1IKCh3Wm4sYm5lKT0+e3ZhciB5cnI9enN0KCksdnJyPWRuZSgpLHhycj1nbmUoKSxicnI9RnN0KCksd3JyPXhuZSgpLFNycj1aQigpLE1ycj0yMDA7ZnVuY3Rpb24gRXJyKGUsdCxyKXt2YXIgbj0tMSxpPXZycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9eHJyO2Vsc2UgaWYobz49TXJyKXt2YXIgYz10P251bGw6d3JyKGUpO2lmKGMpcmV0dXJuIFNycihjKTthPSExLGk9YnJyLGw9bmV3IHlycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9Ym5lLmV4cG9ydHM9RXJyfSk7dmFyIGxsdD1IKChTWm4sU25lKT0+e3ZhciBUcnI9QmYoKSxDcnI9WXUoKTtmdW5jdGlvbiBBcnIoZSl7cmV0dXJuIENycihlKSYmVHJyKGUpfVNuZS5leHBvcnRzPUFycn0pO3ZhciBFbmU9SCgoTVpuLE1uZSk9Pnt2YXIgUHJyPXRIKCksSXJyPUc0KCksTHJyPXduZSgpLGtycj1sbHQoKSxScnI9SXJyKGZ1bmN0aW9uKGUpe3JldHVybiBMcnIoUHJyKGUsMSxrcnIsITApKX0pO01uZS5leHBvcnRzPVJycn0pO3ZhciBDbmU9SCgoRVpuLFRuZSk9Pnt2YXIgTnJyPVY0KCk7ZnVuY3Rpb24gRHJyKGUsdCl7cmV0dXJuIE5ycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9VG5lLmV4cG9ydHM9RHJyfSk7dmFyIGNsdD1IKChUWm4sQW5lKT0+e3ZhciBPcnI9Q25lKCksenJyPUFkKCk7ZnVuY3Rpb24gRnJyKGUpe3JldHVybiBlPT1udWxsP1tdOk9ycihlLHpycihlKSl9QW5lLmV4cG9ydHM9RnJyfSk7dmFyIEVsPUgoKENabixQbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOkF0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5OnByZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOkFkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkhyZSgpLHRyYW5zZm9ybTpVcmUoKSx1bmlvbjpFbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtQbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChQWm4sUm5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9RWwoKTtSbmUuZXhwb3J0cz1jcjt2YXIgQnJyPSJcMCIsSnY9IlwwIixJbmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0p2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SnYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSnZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1KdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09SnYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPUp2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PUp2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUhycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLExuZSh0aGlzLl9wcmVkc1t0XSxlKSxMbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sa25lKHRoaXMuX3ByZWRzW3RdLGUpLGtuZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBMbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24ga25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrSW5lK28rSW5lKyhqZS5pc1VuZGVmaW5lZChuKT9CcnI6bil9ZnVuY3Rpb24gSHJyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIERuZT1IKChJWm4sTm5lKT0+e05uZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgem5lPUgoKExabixPbmUpPT57T25lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpEbmUoKX19KTt2YXIgQm5lPUgoKGtabixGbmUpPT57dmFyIFZmPUVsKCksVnJyPXJIKCk7Rm5lLmV4cG9ydHM9e3dyaXRlOlVycixyZWFkOldycn07ZnVuY3Rpb24gVXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOnFycihlKSxlZGdlczpHcnIoZSl9O3JldHVybiBWZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1WZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIHFycihlKXtyZXR1cm4gVmYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBWZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVmYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gR3JyKGUpe3JldHVybiBWZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFZmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxWZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uIFdycihlKXt2YXIgdD1uZXcgVnJyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFZmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVmYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgVm5lPUgoKFJabixIbmUpPT57dmFyIG5IPUVsKCk7SG5lLmV4cG9ydHM9WXJyO2Z1bmN0aW9uIFlycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChOWm4scW5lKT0+e3ZhciBVbmU9RWwoKTtxbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFVuZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFVbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoRFpuLEduZSk9Pnt2YXIganJyPUVsKCksWHJyPWhsdCgpO0duZS5leHBvcnRzPUtycjt2YXIgJHJyPWpyci5jb25zdGFudCgxKTtmdW5jdGlvbiBLcnIoZSx0LHIsbil7cmV0dXJuIFpycihlLFN0cmluZyh0KSxyfHwkcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBacnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgWHJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgWW5lPUgoKE9abixXbmUpPT57dmFyIEpycj1mbHQoKSxRcnI9RWwoKTtXbmUuZXhwb3J0cz10bnI7ZnVuY3Rpb24gdG5yKGUsdCxyKXtyZXR1cm4gUXJyLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPUpycihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoelpuLFhuZSk9Pnt2YXIgam5lPUVsKCk7WG5lLmV4cG9ydHM9ZW5yO2Z1bmN0aW9uIGVucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7am5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtqbmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciBLbmU9SCgoRlpuLCRuZSk9Pnt2YXIgcm5yPUVsKCksbm5yPXBsdCgpOyRuZS5leHBvcnRzPWlucjtmdW5jdGlvbiBpbnIoZSl7cmV0dXJuIHJuci5maWx0ZXIobm5yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIEpuZT1IKChCWm4sWm5lKT0+e3ZhciBvbnI9RWwoKTtabmUuZXhwb3J0cz1zbnI7dmFyIGFucj1vbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gc25yKGUsdCxyKXtyZXR1cm4gbG5yKGUsdHx8YW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gbG5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKChIWm4sdGllKT0+e3ZhciBZND1FbCgpO3RpZS5leHBvcnRzPVFuZTtRbmUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gUW5lKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgbmllPUgoKFZabixyaWUpPT57dmFyIGVpZT1kbHQoKTtyaWUuZXhwb3J0cz1jbnI7ZnVuY3Rpb24gY25yKGUpe3RyeXtlaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIGVpZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoVVpuLG9pZSk9Pnt2YXIgb0g9RWwoKTtvaWUuZXhwb3J0cz11bnI7ZnVuY3Rpb24gdW5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtpaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBpaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2lpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBzaWU9SCgocVpuLGFpZSk9Pnt2YXIgaG5yPW1sdCgpO2FpZS5leHBvcnRzPWZucjtmdW5jdGlvbiBmbnIoZSx0KXtyZXR1cm4gaG5yKGUsdCwicG9zdCIpfX0pO3ZhciBjaWU9SCgoR1puLGxpZSk9Pnt2YXIgcG5yPW1sdCgpO2xpZS5leHBvcnRzPWRucjtmdW5jdGlvbiBkbnIoZSx0KXtyZXR1cm4gcG5yKGUsdCwicHJlIil9fSk7dmFyIGZpZT1IKChXWm4saGllKT0+e3ZhciB1aWU9RWwoKSxtbnI9ckgoKSxnbnI9aGx0KCk7aGllLmV4cG9ydHM9X25yO2Z1bmN0aW9uIF9ucihlLHQpe3ZhciByPW5ldyBtbnIsbj17fSxpPW5ldyBnbnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7dWllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSx1aWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIGRpZT1IKChZWm4scGllKT0+e3BpZS5leHBvcnRzPXtjb21wb25lbnRzOlZuZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOlluZSgpLGZpbmRDeWNsZXM6S25lKCksZmxveWRXYXJzaGFsbDpKbmUoKSxpc0FjeWNsaWM6bmllKCkscG9zdG9yZGVyOnNpZSgpLHByZW9yZGVyOmNpZSgpLHByaW06ZmllKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIF9pZT1IKChqWm4sZ2llKT0+e3ZhciBtaWU9em5lKCk7Z2llLmV4cG9ydHM9e0dyYXBoOm1pZS5HcmFwaCxqc29uOkJuZSgpLGFsZzpkaWUoKSx2ZXJzaW9uOm1pZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChYWm4seWllKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPV9pZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7eWllLmV4cG9ydHM9YUh9KTt2YXIgeGllPUgoKEtabix2aWUpPT57dmFyIHlucj1Sc3QoKSx2bnI9MSx4bnI9NDtmdW5jdGlvbiBibnIoZSl7cmV0dXJuIHlucihlLHZucnx4bnIpfXZpZS5leHBvcnRzPWJucn0pO3ZhciBqND1IKChaWm4sYmllKT0+e3ZhciB3bnI9WXYoKSxTbnI9QmYoKSxNbnI9UjQoKSxFbnI9TWwoKTtmdW5jdGlvbiBUbnIoZSx0LHIpe2lmKCFFbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP1NucihyKSYmTW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP3ducihyW3RdLGUpOiExfWJpZS5leHBvcnRzPVRucn0pO3ZhciBNaWU9SCgoSlpuLFNpZSk9Pnt2YXIgQ25yPUc0KCksQW5yPVl2KCksUG5yPWo0KCksSW5yPWMwKCksd2llPU9iamVjdC5wcm90b3R5cGUsTG5yPXdpZS5oYXNPd25Qcm9wZXJ0eSxrbnI9Q25yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUG5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9SW5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxBbnIodSx3aWVbY10pJiYhTG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7U2llLmV4cG9ydHM9a25yfSk7dmFyIFRpZT1IKChRWm4sRWllKT0+e3ZhciBSbnI9SGYoKSxObnI9QmYoKSxEbnI9QWQoKTtmdW5jdGlvbiBPbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIU5ucih0KSl7dmFyIG89Um5yKHIsMyk7dD1EbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19RWllLmV4cG9ydHM9T25yfSk7dmFyIEFpZT1IKCh0Sm4sQ2llKT0+e3ZhciB6bnI9L1xzLztmdW5jdGlvbiBGbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmem5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9Q2llLmV4cG9ydHM9Rm5yfSk7dmFyIElpZT1IKChlSm4sUGllKT0+e3ZhciBCbnI9QWllKCksSG5yPS9eXHMrLztmdW5jdGlvbiBWbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxCbnIoZSkrMSkucmVwbGFjZShIbnIsIiIpfVBpZS5leHBvcnRzPVZucn0pO3ZhciBOaWU9SCgockpuLFJpZSk9Pnt2YXIgVW5yPUlpZSgpLExpZT1NbCgpLHFucj1adigpLGtpZT0wLzAsR25yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLFducj0vXjBiWzAxXSskL2ksWW5yPS9eMG9bMC03XSskL2ksam5yPXBhcnNlSW50O2Z1bmN0aW9uIFhucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYocW5yKGUpKXJldHVybiBraWU7aWYoTGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1MaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVVucihlKTt2YXIgcj1XbnIudGVzdChlKTtyZXR1cm4gcnx8WW5yLnRlc3QoZSk/am5yKGUuc2xpY2UoMikscj8yOjgpOkduci50ZXN0KGUpP2tpZTorZX1SaWUuZXhwb3J0cz1YbnJ9KTt2YXIgZ2x0PUgoKG5KbixPaWUpPT57dmFyICRucj1OaWUoKSxEaWU9MS8wLEtucj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gWm5yKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT0kbnIoZSksZT09PURpZXx8ZT09PS1EaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0Kktucn1yZXR1cm4gZT09PWU/ZTowfU9pZS5leHBvcnRzPVpucn0pO3ZhciBGaWU9SCgoaUpuLHppZSk9Pnt2YXIgSm5yPWdsdCgpO2Z1bmN0aW9uIFFucihlKXt2YXIgdD1KbnIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH16aWUuZXhwb3J0cz1RbnJ9KTt2YXIgSGllPUgoKG9KbixCaWUpPT57dmFyIHRpcj1hbHQoKSxlaXI9SGYoKSxyaXI9RmllKCksbmlyPU1hdGgubWF4O2Z1bmN0aW9uIGlpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDpyaXIocik7cmV0dXJuIGk8MCYmKGk9bmlyKG4raSwwKSksdGlyKGUsZWlyKHQsMyksaSl9QmllLmV4cG9ydHM9aWlyfSk7dmFyIFVpZT1IKChhSm4sVmllKT0+e3ZhciBvaXI9VGllKCksYWlyPUhpZSgpLHNpcj1vaXIoYWlyKTtWaWUuZXhwb3J0cz1zaXJ9KTt2YXIgX2x0PUgoKHNKbixxaWUpPT57dmFyIGxpcj10SCgpO2Z1bmN0aW9uIGNpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/bGlyKGUsMSk6W119cWllLmV4cG9ydHM9Y2lyfSk7dmFyIFdpZT1IKChsSm4sR2llKT0+e3ZhciB1aXI9WEIoKSxoaXI9TnN0KCksZmlyPWMwKCk7ZnVuY3Rpb24gcGlyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTp1aXIoZSxoaXIodCksZmlyKX1HaWUuZXhwb3J0cz1waXJ9KTt2YXIgamllPUgoKGNKbixZaWUpPT57ZnVuY3Rpb24gZGlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfVlpZS5leHBvcnRzPWRpcn0pO3ZhciAkaWU9SCgodUpuLFhpZSk9Pnt2YXIgbWlyPUk0KCksZ2lyPSRCKCksX2lyPUhmKCk7ZnVuY3Rpb24geWlyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9X2lyKHQsMyksZ2lyKGUsZnVuY3Rpb24obixpLG8pe21pcihyLGksdChuLGksbykpfSkscn1YaWUuZXhwb3J0cz15aXJ9KTt2YXIgc0g9SCgoaEpuLEtpZSk9Pnt2YXIgdmlyPVp2KCk7ZnVuY3Rpb24geGlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhdmlyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9S2llLmV4cG9ydHM9eGlyfSk7dmFyIEppZT1IKChmSm4sWmllKT0+e2Z1bmN0aW9uIGJpcihlLHQpe3JldHVybiBlPnR9WmllLmV4cG9ydHM9YmlyfSk7dmFyIHRvZT1IKChwSm4sUWllKT0+e3ZhciB3aXI9c0goKSxTaXI9SmllKCksTWlyPXUwKCk7ZnVuY3Rpb24gRWlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD93aXIoZSxNaXIsU2lyKTp2b2lkIDB9UWllLmV4cG9ydHM9RWlyfSk7dmFyIHlsdD1IKChkSm4sZW9lKT0+e3ZhciBUaXI9STQoKSxDaXI9WXYoKTtmdW5jdGlvbiBBaXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhQ2lyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJlRpcihlLHQscil9ZW9lLmV4cG9ydHM9QWlyfSk7dmFyIGlvZT1IKChtSm4sbm9lKT0+e3ZhciBQaXI9czAoKSxJaXI9QjQoKSxMaXI9WXUoKSxraXI9IltvYmplY3QgT2JqZWN0XSIsUmlyPUZ1bmN0aW9uLnByb3RvdHlwZSxOaXI9T2JqZWN0LnByb3RvdHlwZSxyb2U9UmlyLnRvU3RyaW5nLERpcj1OaXIuaGFzT3duUHJvcGVydHksT2lyPXJvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gemlyKGUpe2lmKCFMaXIoZSl8fFBpcihlKSE9a2lyKXJldHVybiExO3ZhciB0PUlpcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1EaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJnJvZS5jYWxsKHIpPT1PaXJ9bm9lLmV4cG9ydHM9emlyfSk7dmFyIHZsdD1IKChnSm4sb29lKT0+e2Z1bmN0aW9uIEZpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19b29lLmV4cG9ydHM9RmlyfSk7dmFyIHNvZT1IKChfSm4sYW9lKT0+e3ZhciBCaXI9VVMoKSxIaXI9YzAoKTtmdW5jdGlvbiBWaXIoZSl7cmV0dXJuIEJpcihlLEhpcihlKSl9YW9lLmV4cG9ydHM9VmlyfSk7dmFyIHBvZT1IKCh5Sm4sZm9lKT0+e3ZhciBsb2U9eWx0KCksVWlyPWdzdCgpLHFpcj1Jc3QoKSxHaXI9X3N0KCksV2lyPWtzdCgpLGNvZT1xUygpLHVvZT1UaSgpLFlpcj1sbHQoKSxqaXI9WHYoKSxYaXI9RlMoKSwkaXI9TWwoKSxLaXI9aW9lKCksWmlyPVlTKCksaG9lPXZsdCgpLEppcj1zb2UoKTtmdW5jdGlvbiBRaXIoZSx0LHIsbixpLG8sYSl7dmFyIHM9aG9lKGUsciksbD1ob2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2xvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj11b2UobCkscD0hZiYmamlyKGwpLGQ9IWYmJiFwJiZaaXIobCk7dT1sLGZ8fHB8fGQ/dW9lKHMpP3U9czpZaXIocyk/dT1HaXIocyk6cD8oaD0hMSx1PVVpcihsLCEwKSk6ZD8oaD0hMSx1PXFpcihsLCEwKSk6dT1bXTpLaXIobCl8fGNvZShsKT8odT1zLGNvZShzKT91PUppcihzKTooISRpcihzKXx8WGlyKHMpKSYmKHU9V2lyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGxvZShlLHIsdSl9Zm9lLmV4cG9ydHM9UWlyfSk7dmFyIGdvZT1IKCh2Sm4sbW9lKT0+e3ZhciB0b3I9UDQoKSxlb3I9eWx0KCkscm9yPVhCKCksbm9yPXBvZSgpLGlvcj1NbCgpLG9vcj1jMCgpLGFvcj12bHQoKTtmdW5jdGlvbiBkb2UoZSx0LHIsbixpKXtlIT09dCYmcm9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgdG9yKSxpb3Iobykpbm9yKGUsdCxhLHIsZG9lLG4saSk7ZWxzZXt2YXIgcz1uP24oYW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksZW9yKGUsYSxzKX19LG9vcil9bW9lLmV4cG9ydHM9ZG9lfSk7dmFyIHlvZT1IKCh4Sm4sX29lKT0+e3ZhciBzb3I9RzQoKSxsb3I9ajQoKTtmdW5jdGlvbiBjb3IoZSl7cmV0dXJuIHNvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZsb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfV9vZS5leHBvcnRzPWNvcn0pO3ZhciB4b2U9SCgoYkpuLHZvZSk9Pnt2YXIgdW9yPWdvZSgpLGhvcj15b2UoKSxwb3I9aG9yKGZ1bmN0aW9uKGUsdCxyKXt1b3IoZSx0LHIpfSk7dm9lLmV4cG9ydHM9cG9yfSk7dmFyIHhsdD1IKCh3Sm4sYm9lKT0+e2Z1bmN0aW9uIGRvcihlLHQpe3JldHVybiBlPHR9Ym9lLmV4cG9ydHM9ZG9yfSk7dmFyIFNvZT1IKChTSm4sd29lKT0+e3ZhciBtb3I9c0goKSxnb3I9eGx0KCksX29yPXUwKCk7ZnVuY3Rpb24geW9yKGUpe3JldHVybiBlJiZlLmxlbmd0aD9tb3IoZSxfb3IsZ29yKTp2b2lkIDB9d29lLmV4cG9ydHM9eW9yfSk7dmFyIEVvZT1IKChNSm4sTW9lKT0+e3ZhciB2b3I9c0goKSx4b3I9SGYoKSxib3I9eGx0KCk7ZnVuY3Rpb24gd29yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3ZvcihlLHhvcih0LDIpLGJvcik6dm9pZCAwfU1vZS5leHBvcnRzPXdvcn0pO3ZhciBDb2U9SCgoRUpuLFRvZSk9Pnt2YXIgU29yPUhjKCksTW9yPWZ1bmN0aW9uKCl7cmV0dXJuIFNvci5EYXRlLm5vdygpfTtUb2UuZXhwb3J0cz1Nb3J9KTt2YXIgSW9lPUgoKFRKbixQb2UpPT57dmFyIEVvcj1MNCgpLFRvcj1VNCgpLENvcj1SNCgpLEFvZT1NbCgpLEFvcj0kUygpO2Z1bmN0aW9uIFBvcihlLHQscixuKXtpZighQW9lKGUpKXJldHVybiBlO3Q9VG9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9QW9yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPUFvZSh1KT91OkNvcih0W2krMV0pP1tdOnt9KX1Fb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Qb2UuZXhwb3J0cz1Qb3J9KTt2YXIga29lPUgoKENKbixMb2UpPT57dmFyIElvcj1xNCgpLExvcj1Jb2UoKSxrb3I9VTQoKTtmdW5jdGlvbiBSb3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9SW9yKGUsYSk7cihzLGEpJiZMb3Iobyxrb3IoYSxlKSxzKX1yZXR1cm4gb31Mb2UuZXhwb3J0cz1Sb3J9KTt2YXIgTm9lPUgoKEFKbixSb2UpPT57dmFyIE5vcj1rb2UoKSxEb3I9WHN0KCk7ZnVuY3Rpb24gT29yKGUsdCl7cmV0dXJuIE5vcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gRG9yKGUsbil9KX1Sb2UuZXhwb3J0cz1Pb3J9KTt2YXIgT29lPUgoKFBKbixEb2UpPT57dmFyIHpvcj1fbHQoKSxGb3I9aWx0KCksQm9yPW9sdCgpO2Z1bmN0aW9uIEhvcihlKXtyZXR1cm4gQm9yKEZvcihlLHZvaWQgMCx6b3IpLGUrIiIpfURvZS5leHBvcnRzPUhvcn0pO3ZhciBGb2U9SCgoSUpuLHpvZSk9Pnt2YXIgVm9yPU5vZSgpLFVvcj1Pb2UoKSxxb3I9VW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306Vm9yKGUsdCl9KTt6b2UuZXhwb3J0cz1xb3J9KTt2YXIgSG9lPUgoKExKbixCb2UpPT57dmFyIEdvcj1NYXRoLmNlaWwsV29yPU1hdGgubWF4O2Z1bmN0aW9uIFlvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz1Xb3IoR29yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfUJvZS5leHBvcnRzPVlvcn0pO3ZhciBVb2U9SCgoa0puLFZvZSk9Pnt2YXIgam9yPUhvZSgpLFhvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiAkb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZYb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxqb3IodCxyLG4sZSl9fVZvZS5leHBvcnRzPSRvcn0pO3ZhciBHb2U9SCgoUkpuLHFvZSk9Pnt2YXIgS29yPVVvZSgpLFpvcj1Lb3IoKTtxb2UuZXhwb3J0cz1ab3J9KTt2YXIgWW9lPUgoKE5KbixXb2UpPT57ZnVuY3Rpb24gSm9yKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX1Xb2UuZXhwb3J0cz1Kb3J9KTt2YXIgJG9lPUgoKERKbixYb2UpPT57dmFyIGpvZT1adigpO2Z1bmN0aW9uIFFvcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPWpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9am9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Yb2UuZXhwb3J0cz1Rb3J9KTt2YXIgWm9lPUgoKE9KbixLb2UpPT57dmFyIHRhcj0kb2UoKTtmdW5jdGlvbiBlYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPXRhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fUtvZS5leHBvcnRzPWVhcn0pO3ZhciBRb2U9SCgoekpuLEpvZSk9Pnt2YXIgd2x0PVY0KCkscmFyPXE0KCksbmFyPUhmKCksaWFyPVFzdCgpLG9hcj1Zb2UoKSxhYXI9TjQoKSxzYXI9Wm9lKCksbGFyPXUwKCksY2FyPVRpKCk7ZnVuY3Rpb24gdWFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBjYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIHJhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bbGFyXTt2YXIgbj0tMTt0PXdsdCh0LGFhcihuYXIpKTt2YXIgaT1pYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gb2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gc2FyKG8sYSxyKX0pfUpvZS5leHBvcnRzPXVhcn0pO3ZhciByYWU9SCgoRkpuLGVhZSk9Pnt2YXIgaGFyPXRIKCksZmFyPVFvZSgpLHBhcj1HNCgpLHRhZT1qNCgpLGRhcj1wYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJnRhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJnRhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZmFyKGUsaGFyKHQsMSksW10pfSk7ZWFlLmV4cG9ydHM9ZGFyfSk7dmFyIGlhZT1IKChCSm4sbmFlKT0+e3ZhciBtYXI9WXN0KCksZ2FyPTA7ZnVuY3Rpb24gX2FyKGUpe3ZhciB0PSsrZ2FyO3JldHVybiBtYXIoZSkrdH1uYWUuZXhwb3J0cz1fYXJ9KTt2YXIgYWFlPUgoKEhKbixvYWUpPT57ZnVuY3Rpb24geWFyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChWSm4sc2FlKT0+e3ZhciB4YXI9TDQoKSxiYXI9YWFlKCk7ZnVuY3Rpb24gd2FyKGUsdCl7cmV0dXJuIGJhcihlfHxbXSx0fHxbXSx4YXIpfXNhZS5leHBvcnRzPXdhcn0pO3ZhciBVbj1IKChVSm4sY2FlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6eGllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpNaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOlVpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjpXaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpqaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOiRpZSgpLG1heDp0b2UoKSxtZXJnZTp4b2UoKSxtaW46U29lKCksbWluQnk6RW9lKCksbm93OkNvZSgpLHBpY2s6Rm9lKCkscmFuZ2U6R29lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTpyYWUoKSx1bmlxdWVJZDppYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmxhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7Y2FlLmV4cG9ydHM9bEh9KTt2YXIgZmFlPUgoKEdKbixoYWUpPT57aGFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiB1YWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmdWFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixTYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIHVhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIFNhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgZGFlPUgoKFdKbixwYWUpPT57dmFyIFBkPVVuKCksTWFyPVVjKCkuR3JhcGgsRWFyPWZhZSgpO3BhZS5leHBvcnRzPUNhcjt2YXIgVGFyPVBkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIENhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UGFyKGUsdHx8VGFyKSxuPUFhcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBQZC5mbGF0dGVuKFBkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIEFhcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBQZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksUGQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUGFyKGUsdCl7dmFyIHI9bmV3IE1hcixuPTAsaT0wO1BkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksUGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89UGQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRWFyfSksYT1uKzE7cmV0dXJuIFBkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciBnYWU9SCgoWUpuLG1hZSk9PnsidXNlIHN0cmljdCI7dmFyIFF2PVVuKCksSWFyPWRhZSgpO21hZS5leHBvcnRzPXtydW46TGFyLHVuZG86UmFyfTtmdW5jdGlvbiBMYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP0lhcihlLHIoZSkpOmthcihlKTtRdi5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksUXYudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24ga2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe1F2LmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLFF2LmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXtRdi5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIFF2LmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gUmFyKGUpe1F2LmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBucz1IKChqSm4seGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9VW4oKSxfYWU9VWMoKS5HcmFwaDt4YWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOnlhZSxzaW1wbGlmeTpOYXIsYXNOb25Db21wb3VuZEdyYXBoOkRhcixzdWNjZXNzb3JXZWlnaHRzOk9hcixwcmVkZWNlc3NvcldlaWdodHM6emFyLGludGVyc2VjdFJlY3Q6RmFyLGJ1aWxkTGF5ZXJNYXRyaXg6QmFyLG5vcm1hbGl6ZVJhbmtzOkhhcixyZW1vdmVFbXB0eVJhbmtzOlZhcixhZGRCb3JkZXJOb2RlOlVhcixtYXhSYW5rOnZhZSxwYXJ0aXRpb246cWFyLHRpbWU6R2FyLG5vdGltZTpXYXJ9O2Z1bmN0aW9uIHlhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIE5hcihlKXt2YXIgdD1uZXcgX2FlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gRGFyKGUpe3ZhciB0PW5ldyBfYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiB6YXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gRmFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIEJhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UodmFlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBVYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx5YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIHZhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIHFhcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBHYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gV2FyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgU2FlPUgoKFhKbix3YWUpPT57InVzZSBzdHJpY3QiO3ZhciBiYWU9VW4oKSxZYXI9bnMoKTt3YWUuZXhwb3J0cz17cnVuOmphcix1bmRvOiRhcn07ZnVuY3Rpb24gamFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxiYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7WGFyKGUsdCl9KX1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9WWFyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uICRhcihlKXtiYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKCRKbixNYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1VbigpO01hZS5leHBvcnRzPXtsb25nZXN0UGF0aDpLYXIsc2xhY2s6WmFyfTtmdW5jdGlvbiBLYXIoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBaYXIoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChLSm4sRWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9VW4oKSxKYXI9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO0VhZS5leHBvcnRzPVFhcjtmdW5jdGlvbiBRYXIoZSl7dmFyIHQ9bmV3IEphcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO3Rzcih0LGUpPG47KWk9ZXNyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLHJzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gdHNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gZXNyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gcnNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciBSYWU9SCgoWkpuLGthZSk9PnsidXNlIHN0cmljdCI7dmFyIElkPVVuKCksbnNyPUVsdCgpLGlzcj1YNCgpLnNsYWNrLG9zcj1YNCgpLmxvbmdlc3RQYXRoLGFzcj1VYygpLmFsZy5wcmVvcmRlcixzc3I9VWMoKS5hbGcucG9zdG9yZGVyLGxzcj1ucygpLnNpbXBsaWZ5O2thZS5leHBvcnRzPXQxO3QxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O3QxLmluaXRDdXRWYWx1ZXM9VGx0O3QxLmNhbGNDdXRWYWx1ZT1DYWU7dDEubGVhdmVFZGdlPVBhZTt0MS5lbnRlckVkZ2U9SWFlO3QxLmV4Y2hhbmdlRWRnZXM9TGFlO2Z1bmN0aW9uIHQxKGUpe2U9bHNyKGUpLG9zcihlKTt2YXIgdD1uc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UGFlKHQpOyluPUlhZSh0LGUsciksTGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPXNzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksSWQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe2NzcihlLHQsbil9KX1mdW5jdGlvbiBjc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUNhZShlLHQscil9ZnVuY3Rpb24gQ2FlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LElkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixoc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLEFhZShlLHt9LDEsdCl9ZnVuY3Rpb24gQWFlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxJZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0lkLmhhcyh0LHMpfHwocj1BYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUGFlKGUpe3JldHVybiBJZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBJYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9SWQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PVRhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09VGFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gSWQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gaXNyKHQsdSl9KX1mdW5jdGlvbiBMYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksdXNyKGUsdCl9ZnVuY3Rpb24gdXNyKGUsdCl7dmFyIHI9SWQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPWFzcihlLHIpO249bi5zbGljZSgxKSxJZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIGhzcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIFRhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciB6YWU9SCgoSkpuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIGZzcj1YNCgpLERhZT1mc3IubG9uZ2VzdFBhdGgscHNyPUVsdCgpLGRzcj1SYWUoKTtPYWUuZXhwb3J0cz1tc3I7ZnVuY3Rpb24gbXNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6TmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6X3NyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpnc3IoZSk7YnJlYWs7ZGVmYXVsdDpOYWUoZSl9fXZhciBnc3I9RGFlO2Z1bmN0aW9uIF9zcihlKXtEYWUoZSkscHNyKGUpfWZ1bmN0aW9uIE5hZShlKXtkc3IoZSl9fSk7dmFyIEJhZT1IKChRSm4sRmFlKT0+e3ZhciBBbHQ9VW4oKTtGYWUuZXhwb3J0cz15c3I7ZnVuY3Rpb24geXNyKGUpe3ZhciB0PXhzcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPXZzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiB2c3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24geHNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFVhZT1IKCh0UW4sVmFlKT0+e3ZhciBMZD1VbigpLFBsdD1ucygpO1ZhZS5leHBvcnRzPXtydW46YnNyLGNsZWFudXA6TXNyfTtmdW5jdGlvbiBic3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPXdzcihlKSxuPUxkLm1heChMZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89U3NyKGUpKzE7TGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7SGFlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gSGFlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLExkLmZvckVhY2gocyxmdW5jdGlvbihoKXtIYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiB3c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJkxkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4gTGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBTc3IoZSl7cmV0dXJuIExkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBNc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyIFdhZT1IKChlUW4sR2FlKT0+e3ZhciBJbHQ9VW4oKSxFc3I9bnMoKTtHYWUuZXhwb3J0cz1Uc3I7ZnVuY3Rpb24gVHNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pcWFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxxYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIHFhZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Fc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciAkYWU9SCgoclFuLFhhZSk9PnsidXNlIHN0cmljdCI7dmFyIFVmPVVuKCk7WGFlLmV4cG9ydHM9e2FkanVzdDpDc3IsdW5kbzpBc3J9O2Z1bmN0aW9uIENzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZqYWUoZSl9ZnVuY3Rpb24gQXNyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlBzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKElzcihlKSxqYWUoZSkpfWZ1bmN0aW9uIGphZShlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtZYWUoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe1lhZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gWWFlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFBzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLExsdCksVWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIElzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLGtsdCksVWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBaYWU9SCgoblFuLEthZSk9PnsidXNlIHN0cmljdCI7dmFyIGtkPVVuKCk7S2FlLmV4cG9ydHM9THNyO2Z1bmN0aW9uIExzcihlKXt2YXIgdD17fSxyPWtkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1rZC5tYXgoa2QubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9a2QubWFwKGtkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIWtkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxrZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9a2Quc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIGtkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBRYWU9SCgoaVFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIGgwPVVuKCk7SmFlLmV4cG9ydHM9a3NyO2Z1bmN0aW9uIGtzcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz1Sc3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnNyKGUsdCxyKXtmb3IodmFyIG49aDAuemlwT2JqZWN0KHIsaDAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWgwLmZsYXR0ZW4oaDAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGgwLnNvcnRCeShoMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9aDAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBoMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIHJzZT1IKChvUW4sZXNlKT0+e3ZhciB0c2U9VW4oKTtlc2UuZXhwb3J0cz1Oc3I7ZnVuY3Rpb24gTnNyKGUsdCl7cmV0dXJuIHRzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPXRzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGlzZT1IKChhUW4sbnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVGw9VW4oKTtuc2UuZXhwb3J0cz1Ec3I7ZnVuY3Rpb24gRHNyKGUsdCl7dmFyIHI9e307VGwuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O1RsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLFRsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshVGwuaXNVbmRlZmluZWQobykmJiFUbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49VGwuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gT3NyKG4pfWZ1bmN0aW9uIE9zcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KFRsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fFRsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmenNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxUbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLFRsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIFRsLm1hcChUbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gVGwucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIHpzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBzc2U9SCgoc1FuLGFzZSk9Pnt2YXIgJDQ9VW4oKSxGc3I9bnMoKTthc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9RnNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoSHNyKCEhdCkpLGw9b3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPW9zZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gb3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBIc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgdXNlPUgoKGxRbixjc2UpPT57dmFyIGYwPVVuKCksVnNyPXJzZSgpLFVzcj1pc2UoKSxxc3I9c3NlKCk7Y3NlLmV4cG9ydHM9bHNlO2Z1bmN0aW9uIGxzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPWYwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9VnNyKGUsaSk7ZjAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWxzZShlLGQudixyLG4pO2xbZC52XT1nLGYwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJldzcihkLGcpfX0pO3ZhciB1PVVzcihjLHIpO0dzcih1LGwpO3ZhciBoPXFzcih1LG4pO2lmKGEmJihoLnZzPWYwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7ZjAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIEdzcihlLHQpe2YwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPWYwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gV3NyKGUsdCl7ZjAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBmc2U9SCgoY1FuLGhzZSk9Pnt2YXIgSzQ9VW4oKSxZc3I9VWMoKS5HcmFwaDtoc2UuZXhwb3J0cz1qc3I7ZnVuY3Rpb24ganNyKGUsdCxyKXt2YXIgbj1Yc3IoZSksaT1uZXcgWXNyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIFhzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIGRzZT1IKCh1UW4scHNlKT0+e3ZhciAkc3I9VW4oKTtwc2UuZXhwb3J0cz1Lc3I7ZnVuY3Rpb24gS3NyKGUsdCxyKXt2YXIgbj17fSxpOyRzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIHZzZT1IKChoUW4seXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcDA9VW4oKSxac3I9WmFlKCksSnNyPVFhZSgpLFFzcj11c2UoKSx0bHI9ZnNlKCksZWxyPWRzZSgpLHJscj1VYygpLkdyYXBoLG1zZT1ucygpO3lzZS5leHBvcnRzPW5scjtmdW5jdGlvbiBubHIoZSl7dmFyIHQ9bXNlLm1heFJhbmsoZSkscj1nc2UoZSxwMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPWdzZShlLHAwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1ac3IoZSk7X3NlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2lscihzJTI/cjpuLHMlND49MiksaT1tc2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1Kc3IoZSxpKTtjPG8mJihsPTAsYT1wMC5jbG9uZURlZXAoaSksbz1jKX1fc2UoZSxhKX1mdW5jdGlvbiBnc2UoZSx0LHIpe3JldHVybiBwMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gdGxyKGUsbixyKX0pfWZ1bmN0aW9uIGlscihlLHQpe3ZhciByPW5ldyBybHI7cDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89UXNyKG4saSxyLHQpO3AwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksZWxyKG4scixvLnZzKX0pfWZ1bmN0aW9uIF9zZShlLHQpe3AwLmZvckVhY2godCxmdW5jdGlvbihyKXtwMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFBzZT1IKChmUW4sQXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9VW4oKSxvbHI9VWMoKS5HcmFwaCxhbHI9bnMoKTtBc2UuZXhwb3J0cz17cG9zaXRpb25YOmNscixmaW5kVHlwZTFDb25mbGljdHM6eHNlLGZpbmRUeXBlMkNvbmZsaWN0czpic2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OndzZSx2ZXJ0aWNhbEFsaWdubWVudDpTc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246TXNlLGFsaWduQ29vcmRpbmF0ZXM6VHNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OkVzZSxiYWxhbmNlOkNzZX07ZnVuY3Rpb24geHNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1zbHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gYnNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gc2xyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiB3c2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBTc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIXdzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIE1zZShlLHQscixuLGkpe3ZhciBvPXt9LGE9bGxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGxscihlLHQscixuKXt2YXIgaT1uZXcgb2xyLG89ZS5ncmFwaCgpLGE9dWxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBFc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPWhscihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBUc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBDc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gY2xyKGUpe3ZhciB0PWFsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoeHNlKGUsdCksYnNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPVNzZShlLGkscixsKSx1PU1zZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPUVzZShlLG4pO3JldHVybiBUc2UobixvKSxDc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIHVscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBobHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBrc2U9SCgocFFuLExzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PVVuKCksSXNlPW5zKCksZmxyPVBzZSgpLnBvc2l0aW9uWDtMc2UuZXhwb3J0cz1wbHI7ZnVuY3Rpb24gcGxyKGUpe2U9SXNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSxkbHIoZSksWjQuZm9yRWFjaChmbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24gZGxyKGUpe3ZhciB0PUlzZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIEZzZT1IKChkUW4senNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9VW4oKSxSc2U9Z2FlKCksTnNlPVNhZSgpLG1scj16YWUoKSxnbHI9bnMoKS5ub3JtYWxpemVSYW5rcyxfbHI9QmFlKCkseWxyPW5zKCkucmVtb3ZlRW1wdHlSYW5rcyxEc2U9VWFlKCksdmxyPVdhZSgpLE9zZT0kYWUoKSx4bHI9dnNlKCksYmxyPWtzZSgpLGQwPW5zKCksd2xyPVVjKCkuR3JhcGg7enNlLmV4cG9ydHM9U2xyO2Z1bmN0aW9uIFNscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/ZDAudGltZTpkMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gTmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7TWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7RWxyKGUsbil9KX0pfWZ1bmN0aW9uIE1scihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0RscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7UnNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0RzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXttbHIoZDAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe09scihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3lscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtEc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtnbHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXt6bHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtGbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtOc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe19scihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXt2bHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7eGxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtXbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtZbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7cWxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe05zZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1ZscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtCbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7SGxyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7VWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXtSc2UudW5kbyhlKX0pfWZ1bmN0aW9uIEVscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgVGxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxDbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sQWxyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUGxyPVsid2lkdGgiLCJoZWlnaHQiXSxJbHI9e3dpZHRoOjAsaGVpZ2h0OjB9LExscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxrbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxSbHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIE5scihlKXt2YXIgdD1uZXcgd2xyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxDbHIsTmx0KHIsVGxyKSxpci5waWNrKHIsQWxyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFBsciksSWxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxrbHIsTmx0KGksTGxyKSxpci5waWNrKGksUmxyKSkpfSksdH1mdW5jdGlvbiBEbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIE9scihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTtkMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gemxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIEZscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIEJscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBIbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KGQwLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChkMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gVmxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gcWxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uIFdscihlKXt2YXIgdD1kMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe2QwLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEhzZT1IKChtUW4sQnNlKT0+e3ZhciBwSD1VbigpLGpscj1ucygpLFhscj1VYygpLkdyYXBoO0JzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOiRscn07ZnVuY3Rpb24gJGxyKGUpe3ZhciB0PWpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IFhscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgVXNlPUgoKGdRbixWc2UpPT57VnNlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoX1FuLHFzZSk9Pntxc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6RnNlKCksZGVidWc6SHNlKCksdXRpbDp7dGltZTpucygpLnRpbWUsbm90aW1lOm5zKCkubm90aW1lfSx2ZXJzaW9uOlVzZSgpfX0pO3ZhciB6ZHQ9RWUoT2R0KCksMSkse19fZXh0ZW5kczpjX3IsX19hc3NpZ246dV9yLF9fcmVzdDpoX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06Zl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6cF9yLF9fZ2VuZXJhdG9yOmRfcixfX2V4cG9ydFN0YXI6bV9yLF9fY3JlYXRlQmluZGluZzpnX3IsX192YWx1ZXM6X19yLF9fcmVhZDp5X3IsX19zcHJlYWQ6dl9yLF9fc3ByZWFkQXJyYXlzOnhfcixfX3NwcmVhZEFycmF5OmJfcixfX2F3YWl0OndfcixfX2FzeW5jR2VuZXJhdG9yOlNfcixfX2FzeW5jRGVsZWdhdG9yOk1fcixfX2FzeW5jVmFsdWVzOkVfcixfX21ha2VUZW1wbGF0ZU9iamVjdDpUX3IsX19pbXBvcnRTdGFyOkNfcixfX2ltcG9ydERlZmF1bHQ6QV9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6UF9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6SV9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpMX3J9PXpkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gRmR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e0ZkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7RmR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBSX3I9QmR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLE5fcj1CZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gQmR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIHd2ZT0vKHVybFwoKShbXildKikoXCkpL2csU3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxacztmdW5jdGlvbiBsXyhlLHQpe2lmKGUmJlN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIFpzfHwoWnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksWnMuYmFzZT1acy5jcmVhdGVFbGVtZW50KCJiYXNlIiksWnMuaGVhZC5hcHBlbmRDaGlsZChacy5iYXNlKSxacy5hbmNob3I9WnMuY3JlYXRlRWxlbWVudCgiYSIpLFpzLmJvZHkuYXBwZW5kQ2hpbGQoWnMuYW5jaG9yKSksWnMuYmFzZS5ocmVmPXQsWnMuYW5jaG9yLmhyZWY9ZSxacy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2Uod3ZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitsXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIGNfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsSF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksVl9yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxIZHQ9Y18mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxWZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFVkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBxZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgcHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBHZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyIFdkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgWWR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBNdmU9MDtmdW5jdGlvbiBqZHQoKXt9amR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO2pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgUm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1NdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSxLZHQ9e307ZnVuY3Rpb24gWGR0KGUsdCl7ZEdbZV09S2R0W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiAkZHQoZSl7cmV0dXJuIGRHW2VdfHxLZHRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBFdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj0kZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9bF8odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiYkZHQodCkhPT12b2lkIDApdGhyb3cgWGR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsWGR0KHQsdGhpcyksRXZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBUdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsQ3ZlPSJpbmNsdWRlIixaZHQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIEpkdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBBdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlB2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShDdmUpO2EmJnIucHVzaCguLi5BdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBRZHQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoVHZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShaZHQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1KZHQobyk7cy5zZXRBdHRyaWJ1dGUoWmR0LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPUpkdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIHRtdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1JdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSXZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPWt2ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9THZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIEx2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIGt2ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIGRwKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIGVtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9ZW10KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1lbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSxSdmU9Ly1bYS16XS9nLE52ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIHdtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoUnZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShOdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBEdmU9MCxybXQ9MCxMeD1bXSxPdmU9MCx2Rz0hMSxubXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcih6dmUpLm9ic2VydmUobm10LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24genZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxybXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsbm10LnRleHRDb250ZW50PU92ZSsrKSxMeC5wdXNoKGUpLER2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1ybXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgRnZlPWxpLEZJPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLEZ2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBpbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaW10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gQnZlKGUsdCl7aWYoIWltdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Um4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHdtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtCdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEh2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxvbXQ9ITEsYW10PSExO2Z1bmN0aW9uIFZ2ZSgpe2lmKCFvbXQpe29tdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLGFtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gYW10fWZ1bmN0aW9uIFV2ZShlKXtWdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24gcXZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkh2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBzbXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJnNtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIEd2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiBXdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gWXZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBqdmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGxtdD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksVXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1xdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPXNtdChzLGgpO0d2ZSh0aGlzLHMuJCxmLGgpLFl2ZSh0aGlzLGYsaCxpKSxXdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9anZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0sZ210PSJfX2NvbXB1dGVJbmZvIixYdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiAkdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBjbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIEt2ZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmJHZlKGUsbyxzLGMscixuLGkpfHxpJiZadmUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIFp2ZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIF9tdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBfbXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiBKdmUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxfbXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIFF2ZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1kcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gdDFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gZTFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZihXZHQpe2pNKys7bGV0IG89bjFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpdW10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspeW10KGUsIiIsdCxyLHMpJiZ1bXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIHIxZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSx1bXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0scjFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIG4xZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309aTFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGkxZShlKXtsZXQgdD1lW2dtdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24geW10KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIG8xZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPWRwKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9ZHAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLHUxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9YyxhMWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gYTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPXhtdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOnMxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBzMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1kcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmbDFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGwxZShlLHQscixuLGkpe2lmKGk9YzFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBjMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIHUxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gaDFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2YxZShhLGMpLHAxZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGYxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIHAxZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7UXZlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gaG10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgZDFlPVtdLHZtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIixtMWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIsZzFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixfMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHkxZT0iKD86IitnMWUrInwiK18xZSsiKSIsZm10PSIoPzooIit2bXQrInwiK20xZSsifCIreTFlKyIpXFxzKikiLHYxZT0iKD86IitmbXQrIig/OixcXHMqIitmbXQrIikqKSIseDFlPSIoPzpcXChcXHMqKD86Iit2MWUrIj8pXFwpXFxzKikiLGIxZT0iKCIrdm10KyJcXHMqIit4MWUrIj8pIix3MWU9IihcXFtcXFt8e3spXFxzKiIsUzFlPSIoPzpdXXx9fSkiLE0xZT0iKD86KCEpXFxzKik/IixFMWU9dzFlK00xZStiMWUrUzFlLHBtdD1uZXcgUmVnRXhwKEUxZSwiZyIpO2Z1bmN0aW9uIGRtdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOmQxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBUMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIFQxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49eG10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiB4bXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gbW10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIGJtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe2JtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEMxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciB1Xz1SbihlPT57bGV0IHQ9bG10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gbzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7ZTFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmS3ZlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO2JtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0MxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpjbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOmNtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO2htdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46SnZlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjp0MWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9aG10KHRoaXMscyx6ci5DT01QVVRFLHltdCxpLGEpO3hHKHRoaXMsZ210KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PW1tdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj9tbXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLGgxZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PWRtdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7WHZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9ZG10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9d20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1wbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1wbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIEExZT0wO2Z1bmN0aW9uIHdtdCgpe0ExZSsrfXZhciBQMWU9W107ZnVuY3Rpb24gVkkoZSl7UDFlLnB1c2goZSl9ZnVuY3Rpb24gSTFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgU210PVJuKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9STFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt3bXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgTW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsU209Um4oZT0+e2xldCB0PVNtdCh1XyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1RZHQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksWWR0JiZVSSYmSGR0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fHFkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIE1tdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6cHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1WZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2xfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksR2R0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9bF8odGhpcy5pbXBvcnRQYXRoKSksbF8oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEwxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gazFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEwxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrazFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9U20oSFRNTEVsZW1lbnQpO3ZhciBmeT1FZShPZSgpLDEpO3ZhciBoXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBFbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1oX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIE1tO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoTW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhFbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpFbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPVIxZShlKSxUbXQoTjFlKGUpLGUpfWZ1bmN0aW9uIFIxZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLmNvbW1lbnRzLCIiKS5yZXBsYWNlKGdwLnBvcnQsIiIpfWZ1bmN0aW9uIE4xZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1DbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09QW10JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIFRtdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUQxZShyKSxyPXIucmVwbGFjZShncC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVjFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEgxZSk9PT0wP2UudHlwZT1tcC5NRURJQV9SVUxFOm8ubWF0Y2goZ3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9bXAuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoZ3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUG10KT09PTA/ZS50eXBlPW1wLk1JWElOX1JVTEU6ZS50eXBlPW1wLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylUbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBEMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhTzFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6ejFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitDbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1BbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gTzFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihQbXQpPT09MH1mdW5jdGlvbiB6MWUoZSl7cmV0dXJuIGU9RjFlKGUpLEIxZShlKX1mdW5jdGlvbiBGMWUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKGdwLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gQjFlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AubWl4aW5BcHBseSwiIikucmVwbGFjZShncC52YXJBcHBseSwiIil9dmFyIG1wPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LENtdD0ieyIsQW10PSJ9IixncD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUG10PSItLSIsSDFlPSJAbWVkaWEiLFYxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIEltdD0vQG1lZGlhXHMoLiopLzt2YXIgTG10PW5ldyBTZXQsVTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24ga210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIUxtdC5oYXModCkpe0xtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gUm10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShVMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PW1wLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goSW10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09bXAuU1RZTEVfUlVMRT90KGUpOnImJm89PT1tcC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1tcC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gcTFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPXExZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIG52cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gTm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gRG10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO1JtdChpKT9oX3x8KGttdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIE9tdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBHMWUoZSl7aWYoTW0hPT12b2lkIDApcmV0dXJuIE1tO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoT210KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9VzFlKGUpO3IhPT0iIiYmWTFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gRzFlKGUpIT09IiJ9ZnVuY3Rpb24gVzFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PU9tdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBZMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gem10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIGoxZT0vO1xzKi9tLFgxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxGbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIHptdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9RG10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShqMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShGbXQsIiIpKSxhLnB1c2goIikiKSxGbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPVgxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBCbXQ9RG87dmFyICQxZT17fSxRTT0kMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLEsxZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBIbXQoZSl7bGV0IHQ9UU1bZV07dCYmWjFlKHQpfWZ1bmN0aW9uIFoxZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gVm10KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBVbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsSzFlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLHFtdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cW10P3FtdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIEdtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbR210XXx8KHRbR210XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgQm10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1IbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1ObXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtWbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFVtdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSxXbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixZbXQ9MjUsam10PTUsUTFlPTIsdHhlPTI1MDAsSm10PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sZXhlPVswLDEsNCwyXSxyeGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiBKbXQuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIFFtdChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmVWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgdGd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLG54ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxpeGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBveGUoZSl7cmV0dXJuIG54ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIGF4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIFhtdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYob3hlKG5baV0pKXtsZXQgbz1heGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09aWEubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uICRtdChlKXtsZXQgdD10Z3Q/WyJjbGljayJdOkptdDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sWG10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLFhtdCwhMCl9ZnVuY3Rpb24gc3hlKGUpe2lmKCFmRylyZXR1cm47aWEubW91c2UubW91c2VJZ25vcmVKb2J8fCRtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXskbXQoKSxpYS5tb3VzZS50YXJnZXQ9bnVsbCxpYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtpYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0saWEubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2UoaWEubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIodHhlKSx0KX1mdW5jdGlvbiBwXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFyeGUmJihyPWV4ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBseGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PV9wKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBpYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBjeGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZWd0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsc3hlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30sZl89W107ZnVuY3Rpb24gdXhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIF9wKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gcmd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKGlhLnRvdWNoLmlkPWEuaWRlbnRpZmllciksaWEudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmaHhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPGZfLmxlbmd0aDthKyspcz1mX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gaHhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilpYS50b3VjaC54PXQuY2xpZW50WCxpYS50b3VjaC55PXQuY2xpZW50WSxpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihpYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPWN4ZShlKSxpPSExLG89TWF0aC5hYnMoaWEudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMoaWEudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIEVtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGZ4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIG5ndChlLHQscil7cmV0dXJuIGlFW3RdPyhweGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBmeGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sISh0Z3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZkXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIHB4ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtmXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24gZHhlKGUpe2ZvcihsZXQgdD0wLHI7dDxmXy5sZW5ndGg7dCsrKXtyPWZfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGRfKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9ZHhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighcF8oZSkpcmV0dXJuO2xldCB0PV9wKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe3BfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe3BfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07ZWd0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLF9wKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPlExZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7S210KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSkscF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O2VndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTtLbXQodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gS210KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49am10fHxpPj1qbXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdXhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtwXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtwXyhlKSYmWm10KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe1ptdCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBabXQoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz1fcChyfHx0KTshb3x8aXhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PVltdCYmaTw9WW10fHxseGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBpZ3Q9X3A7dmFyIHloPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7RW0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bmd0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIG14ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyxneGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxfeGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHl4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLHZ4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sYWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gc2d0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gbGd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gY2d0KCl7c2d0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWxndChvRVtlXSl9ZnVuY3Rpb24geHhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZjZ3QoKX12YXIgdWd0PVJuKGU9PnthZ3R8fGFFfHwoc2d0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2d0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCFhZ3QmJnZ4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UobXhlLGd4ZSksbz1vLnJlcGxhY2UoX3hlLHl4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKHh4ZSgpLG9FLnB1c2godGhpcyksbGd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxoZ3Q9W10sZmd0PVtdO2Z1bmN0aW9uIHBndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLGJ4ZShoZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3eGUoZmd0KX0pfSl9ZnVuY3Rpb24gYnhlKGUpe2Zvcig7ZS5sZW5ndGg7KWRndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIHd4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspZGd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24gZGd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIG1ndChlLHQscil7aTl8fHBndCgpLGhndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIFRtKGUsdCxyKXtpOXx8cGd0KCksZmd0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24gZ2d0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/Z2d0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGdndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBfZ3Q9MCx5Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gU3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIE14ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChfZ3QpOihpLnB1c2goeWd0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gRXhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9VHhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1DeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1NeGUoU3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBfZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHlndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBUeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gQ3hlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBFeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB2aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PVdtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsQXhlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEF4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgdmgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFB4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gdmd0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIEl4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSx2Z3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBQeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLHZndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxJeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00seGd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBiZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gd2d0KGUsdD0hMSl7aWYoIUtHfHwheGd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPXhndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIWJndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFiZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LGcxcj1SbihlPT57bGV0IHQ9U20oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixMeGU9d2luZG93LlNoYWR5Q1NTLEd0PVJuKGU9PntsZXQgdD15aChTbShlKSkscj1VST90OnVndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYocHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7ZF8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gd2d0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBMeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQ209RWUoT2UoKSwxKTtmdW5jdGlvbiB4aChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYobV8oZVtyXSkmJm1fKHRbbl0pKXtsZXQgaT1yLG89bjtyPVNndChlLHIrMSksbj1TZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIFNndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighbV8oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihtXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhbV8oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gbV8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fG1fKGUpfXZhciBreGU9W107ZnVuY3Rpb24gUnhlKGUpe3JldHVybiBDbS5rZXlzKGUpLnNvcnQoeGgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBDbS51bmlvbi5hcHBseShudWxsLENtLnZhbHVlcyhlKSkuc29ydCh4aCl9ZnVuY3Rpb24gTnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxDbS51bmlxKHIpLnNvcnQoeGgpfXZhciBFZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsVGd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O0tzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pk94ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+Q2d0LHNldEZlYXR1cmVGbGFnczooKT0+RHhlfSk7dmFyIHM5LGw5O0NndCgpO2Z1bmN0aW9uIENndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBEeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gT3hlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LEFtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoQW18fChBbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PUFtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49RnhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz16eGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKEVndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24genhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIEZ4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1BbS5QT1NULHQuYm9keT1CeGUoZSksdCk6KHQubWV0aG9kVHlwZT1BbS5HRVQsdCl9ZnVuY3Rpb24gQnhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBBZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsSHhlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksVnhlPVBndCgpO2Z1bmN0aW9uIFBndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChUZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixJZ3Qoe1tBZ3RdOkh4ZS5nZXRBbGwoQWd0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gVnhlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gSWd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKE5hfHwoTmE9e30pKTtmdW5jdGlvbiBVeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOk5hLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBxeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOk5hLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBHeGUoZSx0PSIiKXtsZXQgcj1bVXhlKGUsdCldLG49cXhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPUd4ZShuLHIpLG89V3hlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uIFd4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj14aChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjp4aChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoWXhlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O0tzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PkpzfSk7dmFyIGp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxOZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LFh4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LE5ndCk7ZnVuY3Rpb24gJHhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBEZ3QoZSx0KXtyZXR1cm4gRmd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIEt4ZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspT2d0KGUsdFtuXSxyLFh4ZSl9ZnVuY3Rpb24gT2d0KGUsdCxyLG4peyR4ZSh0LGUsbik7Zm9yKGxldCBpIGluIGp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIHpndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/emd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24ga2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIFJndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gRmd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylrZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBrZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCkscHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249emd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZLeGUocyxuLGkpLE9ndChzLGUsaSxOZ3QpfTtyZXR1cm4gcHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dChSZ3QpOlJndDtyZXR1cm4gcj1GZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Um4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgSGd0PXVfKG5XKSxaeGU9R3goSGd0KTtmdW5jdGlvbiBKeGUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBReGU9dV8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgYmg9Y2xhc3MgZXh0ZW5kcyBReGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07YmgucHJvdG90eXBlLl9fZGF0YUhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7YmgucHJvdG90eXBlLl9tZXRob2RIb3N0O2JoLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjtiaC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIHRiZT1HeChiaCk7ZnVuY3Rpb24gQmd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBlYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/dGJlOmJoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGliZShpLGUsdCxyKSxpfWZ1bmN0aW9uIHJiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP1p4ZTpIZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46bmJlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJnNiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKUp4ZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gbmJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gaWJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpvYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46YWJlKCl9KX1mdW5jdGlvbiBvYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gYWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFCZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOmJoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89ZWJlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPUJndChlKTtyYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gc2JlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFZndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgVWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYocHAmJiFjXyl7aWYoIVVndCl7VWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGxiZT15aChmOSh1XyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGxiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIGNiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBjYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9ZHAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxxZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHFndC5pcyxxZ3QpO3ZhciB1YmU9Um4oZT0+e2xldCB0PVNtKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgaGJlPXViZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBoYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIEdndD0iaW5jbHVkZSIsZmJlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGZiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShHZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoR2d0KSx0LnRleHRDb250ZW50PXRtdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyIFdndDtXZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgWWd0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiBXZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBEYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LEpzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufWNffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W0pzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe0RhLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgamd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7amd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoamd0LmNvbnRlbnQpO3ZhciBYZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7WGd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWGd0LmNvbnRlbnQpO3ZhciAkZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTskZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCRndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHBiZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBwYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOkRhLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciBkYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZGJlLmNvbnRlbnQpO3ZhciBtYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1iZS5jb250ZW50KTt2YXIgS2d0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSxnYmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sWmd0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sX2JlPS9bYS16MC05Kl0vLHliZT0vVVwrLyx2YmU9L15hcnJvdy8seGJlPS9ec3BhY2UoYmFyKT8vLGJiZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIEpndChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHx4YmUudGVzdChuKT9yPSJzcGFjZSI6YmJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fF9iZS50ZXN0KG4pKSYmKHI9bik6dmJlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gd2JlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiBLZ3Q/dD1LZ3RbZV06eWJlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBTYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9Z2JlW2VdKSx0fWZ1bmN0aW9uIE1iZShlLHQpe3JldHVybiBlLmtleT9KZ3QoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9KZ3QoZS5kZXRhaWwua2V5LHQpOndiZShlLmtleUlkZW50aWZpZXIpfHxTYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gUWd0KGUsdCl7dmFyIHI9TWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gRWJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gWmd0Pyh0W1pndFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiB0MHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBFYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10MHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKFFndChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXt0MHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYoUWd0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgZTB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksVGJlPWUwdCYmZTB0WzFdPj04LHIwdD0zLG4wdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1ZndCxKcyx2OSxZZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UscjB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChyMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IVRiZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKGRwKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciB3aD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbd20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W0pzLHdoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgaTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7aTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaTB0LmNvbnRlbnQpO3ZhciBvMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO28wdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8wdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxTaD1bT28sWXhdO3ZhciBNaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIGEwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9YTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWguZGlzdGFuY2UoZSx0LDAsMCksbj1NaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPU1oLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBnXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9Z18uTUFYX1JBRElVUz0zMDA7Z18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1NaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01oLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxnXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9nXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLGdfLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IGEwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9TWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPU1oLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PU1oLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBnXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxzMHQ9W1NoLERpLHN1LHVXXTt2YXIgbDB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7bDB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6bDB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbczB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBjMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7YzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYzB0LmNvbnRlbnQpO3ZhciB1MHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDt1MHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh1MHQuY29udGVudCk7dmFyIEVoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLFRoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LGgwdD1bRWgsVGgsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W1NoLERpLHN1LHBFXTt2YXIgQ2JlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LGgwdCxDYmVdO3ZhciBmMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtmMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpmMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBwMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtwMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgZDB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIEFiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1bZDB0LEFiZV07dmFyIHc5LFBiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LG0wdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVBiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LGcwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxFbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sXzB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0seTB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiB2MHQoZSl7Q2guaW5kZXhPZihlKT49MHx8KENoLmxlbmd0aD09PTAmJkxiZSgpLENoLnB1c2goZSksX1c9Q2hbQ2gubGVuZ3RoLTFdLGIwdD1bXSx3MHQ9W10pfWZ1bmN0aW9uIHgwdChlKXt2YXIgdD1DaC5pbmRleE9mKGUpO3QhPT0tMSYmKENoLnNwbGljZSh0LDEpLF9XPUNoW0NoLmxlbmd0aC0xXSxiMHQ9W10sdzB0PVtdLENoLmxlbmd0aD09PTAmJmtiZSgpKX12YXIgQ2g9W10sYjB0PW51bGwsdzB0PW51bGw7ZnVuY3Rpb24gSWJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmUmJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBMYmUoKXtNOT1NOXx8SWJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIGtiZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gUmJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJnkwdCE9PXQmJih5MHQ9dCxnVz1OYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPU9iZShlKTtyZXR1cm4hRGJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBOYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIERiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gT2JlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgUG09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpfMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIGcwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxGYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyh4MHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSx2MHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sY18pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSx6YmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LEZiZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj16YmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVttMHQsSnMsUG1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxTMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltTMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltUaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgTTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7TTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gd20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgQmJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLEJiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpQbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHlwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEhiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtIYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBWYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbU2gsRGksRWgsVGhdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxWYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7aWd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxFMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6RTB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PUUwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbVGgsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFViZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W1NoLERpLFViZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTp3aC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LFQwdD1bd2gsU1ddO3ZhciBfXz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx3aC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7X18uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLF9fLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZighX18uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3doLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07X18uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W1QwdCxPbyxfX107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBDMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7QzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQzB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIEEwdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtBMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpBMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX13aC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUDB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1AwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlAwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLEVoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZkXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgSTB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtJMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpJMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEwwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0wwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkwwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBxYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChxYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksU2gsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W0pzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxfXy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBEYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgazB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7azB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6azB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXtkXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtLcyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5HYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgUjB0PSExO2Z1bmN0aW9uIEdiZShlKXtSMHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiBSMHR9dmFyIE4wdD0iIjtmdW5jdGlvbiBJVyhlKXtOMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBOMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBEMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gTzB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIHowdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBCMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6V2JlLHNldDpZYmUsZ2V0SW5pdGlhbGl6ZXI6eV8sZ2V0T2JzZXJ2ZXI6dl8sZGlzcG9zZUJpbmRpbmc6amJlfT12RShlPT5lLGU9PmUpLHtnZXQ6WGJlLHNldDokYmUsZ2V0SW5pdGlhbGl6ZXI6dnAsZ2V0T2JzZXJ2ZXI6eHAsZGlzcG9zZUJpbmRpbmc6S2JlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOlpiZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OkpiZSxzZXQ6UWJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOnQyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpejB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBlMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLE8wdCh0KX1mdW5jdGlvbiBGMHQoZSx0KXtsZXQgcj1lW0IwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj15XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24gX3MoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfV9zKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX1fcyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEgwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIscjJlPTEyLEFoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIEFoPT1udWxsJiYoQWg9TlcoSDB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoQWg9PW51bGx8fCFpc0Zpbml0ZShBaCl8fEFoPD0wKSYmKEFoPXIyZSkpLEFofWZ1bmN0aW9uIG4yZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PUFoJiYoQWg9ZSxEVyhIMHQsQWgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09TmEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVjB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LGJwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFWMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgVTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgYnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57VTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LHdwPW5ldyBVOTt2YXIgVnI9e307S3MoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT56dnQsYXJjOigpPT5EU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5vYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+aF90LGF4aXNUb3A6KCk9PnVfdCxiaXNlY3Q6KCk9PnlzLGJpc2VjdExlZnQ6KCk9PlcwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkwxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+cXZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5rMXQsY2hvcmQ6KCk9Pld2dCxjbGllbnRQb2ludDooKT0+RG0sY2x1c3RlcjooKT0+VmJ0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZjF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9Pm55dCxjcmVhdG9yOigpPT5SbSxjcm9zczooKT0+cTksY3N2OigpPT5OMXQsY3N2Rm9ybWF0OigpPT5fMXQsY3N2Rm9ybWF0Qm9keTooKT0+eTF0LGNzdkZvcm1hdFJvdzooKT0+eDF0LGNzdkZvcm1hdFJvd3M6KCk9PnYxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+YjF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PmcxdCxjdWJlaGVsaXg6KCk9PmxhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PiRTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+WlN0LGN1cnZlQnVuZGxlOigpPT5RU3QsY3VydmVDYXJkaW5hbDooKT0+dDN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9PmUzdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+cjN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+aTN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmwzdCxjdXJ2ZUxpbmVhcjooKT0+WWgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PnUzdCxjdXJ2ZU1vbm90b25lWDooKT0+ZzN0LGN1cnZlTW9ub3RvbmVZOigpPT5fM3QsY3VydmVOYXR1cmFsOigpPT54M3QsY3VydmVTdGVwOigpPT5iM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PlMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PnczdCxjdXN0b21FdmVudDooKT0+TXAsZGVzY2VuZGluZzooKT0+ajB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnZzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT56bSxkcmFnRW5hYmxlOigpPT5GbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+V20sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5QXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+UF8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+eHMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT54cyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+YTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PmFhLGZvcmNlQ2VudGVyOigpPT5WMXQsZm9yY2VDb2xsaWRlOigpPT5heHQsZm9yY2VMaW5rOigpPT5seHQsZm9yY2VNYW55Qm9keTooKT0+Znh0LGZvcmNlUmFkaWFsOigpPT5weHQsZm9yY2VTaW11bGF0aW9uOigpPT5oeHQsZm9yY2VYOigpPT5keHQsZm9yY2VZOigpPT5teHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5McCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+Q2J0LGdlb0FyZWE6KCk9Pkl4dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PkFidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5QYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+Rnh0LGdlb0NlbnRyb2lkOigpPT5HeHQsZ2VvQ2lyY2xlOigpPT4keHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+Snh0LGdlb0NsaXBSZWN0YW5nbGU6KCk9PkRwLGdlb0NvbmljQ29uZm9ybWFsOigpPT5MYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5XXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+UmJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5vYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9Pk5idCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PmtidCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PmpfLGdlb0dub21vbmljOigpPT5EYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmxidCxnZW9JZGVudGl0eTooKT0+T2J0LGdlb0ludGVycG9sYXRlOigpPT5jYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+SWJ0LGdlb01lcmNhdG9yUmF3OigpPT5ZXyxnZW9OYXR1cmFsRWFydGgxOigpPT56YnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5GYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT53YnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5CYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PlNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkhidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PnZ5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5KMHQsaHNsOigpPT5WbSxodG1sOigpPT5CMXQsaW1hZ2U6KCk9Pk8xdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+THl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PmdTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PiR3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmlTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9Pm9TdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PndTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PkVTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+WHl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+U1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+RV8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5reXQsaW50ZXJwb2xhdGVHbkJ1OigpPT5hU3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9Pl9TdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT55U3QsaW50ZXJwb2xhdGVIY2w6KCk9Pld5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pll5dCxpbnRlcnBvbGF0ZUhzbDooKT0+VXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+cXl0LGludGVycG9sYXRlSHVlOigpPT5SeXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5MU3QsaW50ZXJwb2xhdGVMYWI6KCk9Pk1fLGludGVycG9sYXRlTWFnbWE6KCk9PklTdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+c1N0LGludGVycG9sYXRlT3JhbmdlczooKT0+YlN0LGludGVycG9sYXRlUFJHbjooKT0+S3d0LGludGVycG9sYXRlUGlZRzooKT0+Wnd0LGludGVycG9sYXRlUGxhc21hOigpPT5rU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5jU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9Pkp3dCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PnVTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PnZTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlRTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9PlF3dCxpbnRlcnBvbGF0ZVJkR3k6KCk9PnRTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9PmhTdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+ZVN0LGludGVycG9sYXRlUmRZbEduOigpPT5yU3QsaW50ZXJwb2xhdGVSZWRzOigpPT54U3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnFtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pkl5dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkNTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5uU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+QVN0LGludGVycG9sYXRlVmlyaWRpczooKT0+UFN0LGludGVycG9sYXRlV2FybTooKT0+TVN0LGludGVycG9sYXRlWWxHbjooKT0+cFN0LGludGVycG9sYXRlWWxHbkJ1OigpPT5mU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PmRTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+bVN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+UXl0LGlzb0Zvcm1hdDooKT0+Tnd0LGlzb1BhcnNlOigpPT5Ed3QsanNvbjooKT0+ejF0LGtleXM6KCk9PiRMLGxhYjooKT0+d18sbGNoOigpPT5ieXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PlZTdCxsaW5rUmFkaWFsOigpPT5xU3QsbGlua1ZlcnRpY2FsOigpPT5VU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5lX3QsbWVkaWFuOigpPT5yX3QsbWVyZ2U6KCk9PkltLG1pbjooKT0+TG0sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+UGgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+SnZ0LG5vdzooKT0+QXAscGFjazooKT0+dTJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PmEydCxwYWlyczooKT0+WTB0LHBhcnRpdGlvbjooKT0+aDJ0LHBhdGg6KCk9PmJzLHBlcm11dGU6KCk9Pm5fdCxwaWU6KCk9PkJTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5seSxwb2x5Z29uQXJlYTooKT0+eDJ0LHBvbHlnb25DZW50cm9pZDooKT0+YjJ0LHBvbHlnb25Db250YWluczooKT0+RTJ0LHBvbHlnb25IdWxsOigpPT5NMnQscG9seWdvbkxlbmd0aDooKT0+VDJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+emgscXVhbnRpbGU6KCk9PnNhLHF1YW50aXplOigpPT4keXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlAydCxyYW5kb21FeHBvbmVudGlhbDooKT0+STJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5BMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5DMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5YdnQsc2NhbGVCYW5kOigpPT5RbSxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PkJ3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9Pk9uLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PnRnLHNjYWxlUG93OigpPT5LXyxzY2FsZVF1YW50aWxlOigpPT5lZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+Rnd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5VMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT56d3Qsc2NhbjooKT0+aV90LHNjaGVtZUFjY2VudDooKT0+SHd0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+Vnd0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+VXd0LHNjaGVtZVBhc3RlbDE6KCk9PnF3dCxzY2hlbWVQYXN0ZWwyOigpPT5Hd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+V3d0LHNjaGVtZVNldDI6KCk9Pll3dCxzY2hlbWVTZXQzOigpPT5qd3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+WHd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5FcCxzZWxlY3Rpb246KCk9PkloLHNlbGVjdG9yOigpPT5ObSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5lMXQsc2h1ZmZsZTooKT0+b190LHN0YWNrOigpPT5NM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlQzdCxzdGFja09mZnNldEV4cGFuZDooKT0+RTN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5DM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PkEzdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlAzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5JM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5MM3Qsc3RyYXRpZnk6KCk9PmQydCxzdHlsZTooKT0+U3Asc3VtOigpPT5hX3Qsc3ZnOigpPT5IMXQsc3ltYm9sOigpPT5qU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5ZU3QsdGV4dDooKT0+RF8sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+UTB0LHRocmVzaG9sZFNjb3R0OigpPT50X3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+eF8sdGlja1N0ZXA6KCk9PnRsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT50eSx0aW1lRGF5czooKT0+JDJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+dHd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PmoydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Wl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PlcydCx0aW1lTW9uZGF5OigpPT5yeSx0aW1lTW9uZGF5czooKT0+SzJ0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+bnd0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5ld3QsdGltZVNlY29uZDooKT0+UV8sdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9PnJnLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PnpwLHRpbWVUaHVyc2RheXM6KCk9PlEydCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5aMnQsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PkoydCx0aW1lV2VlazooKT0+cmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+R2gsdGltZVllYXJzOigpPT5pd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PkFfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5UcCx0b3VjaGVzOigpPT5peXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT5tMnQsdHJlZW1hcDooKT0+ZzJ0LHRyZWVtYXBCaW5hcnk6KCk9Pl8ydCx0cmVlbWFwRGljZTooKT0+VWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PnYydCx0cmVlbWFwU2xpY2U6KCk9PkptLHRyZWVtYXBTbGljZURpY2U6KCk9PnkydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+RDF0LHRzdkZvcm1hdDooKT0+TTF0LHRzdkZvcm1hdEJvZHk6KCk9PkUxdCx0c3ZGb3JtYXRSb3c6KCk9PkMxdCx0c3ZGb3JtYXRSb3dzOigpPT5UMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PkExdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5TMXQsdXRjRGF5OigpPT5ueSx1dGNEYXlzOigpPT51d3QsdXRjRm9ybWF0OigpPT5heSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9Pm13dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+bHd0LHV0Y01pbGxpc2Vjb25kOigpPT5aXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+YXd0LHV0Y01vbmRheTooKT0+b3ksdXRjTW9uZGF5czooKT0+aHd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnl3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+Z3d0LHV0Y1NlY29uZDooKT0+UV8sdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5uZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+RnAsdXRjVGh1cnNkYXlzOigpPT5kd3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9PmZ3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9PnB3dCx1dGNXZWVrOigpPT5uZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+V2gsdXRjWWVhcnM6KCk9PnZ3dCx2YWx1ZXM6KCk9PmkxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+cTB0LHZvcm9ub2k6KCk9PlkzdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+RjF0LHppcDooKT0+c190LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+WGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgcTB0PSI1LjcuMCI7ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9aTJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gaTJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvYShlKHQpLHIpfX12YXIgRzB0PW9iKG9hKSxXVz1HMHQucmlnaHQsVzB0PUcwdC5sZWZ0LHlzPVdXO2Z1bmN0aW9uIFkwdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBqMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT1RcyhlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9UXModChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBhYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBYMHQ9QXJyYXkucHJvdG90eXBlLCQwdD1YMHQuc2xpY2UsSzB0PVgwdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFowdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPXhfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiB4XyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gdGwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBKMHQoKXt2YXIgZT1aMHQsdD1hYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPXRsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3lzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRSgkMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBzYShlLHQscil7aWYocj09bnVsbCYmKHI9UXMpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBRMHQoZSx0LHIpe3JldHVybiBlPUswdC5jYWxsKGUsUXMpLnNvcnQob2EpLE1hdGguY2VpbCgoci10KS8oMiooc2EoZSwuNzUpLXNhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiB0X3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIGVfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1RcyhlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPVFzKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIHJfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT1RcyhlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9UXModChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBzYShvLnNvcnQob2EpLC41KX1mdW5jdGlvbiBJbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIExtKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG5fdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBpX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9b2EpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBvX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiBhX3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1MbShlLG8yZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBvMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIHNfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gbF90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LGNfdD0xZS02O2Z1bmN0aW9uIGEyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIHMyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGwyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIGMyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiB1MmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz9hMmU6czJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpsX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/YzJlOmwyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIsY190KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixjX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIodTJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiB1X3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIGhfdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1rbSgpO2ttKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBQaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiBkMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG0yZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBSbShlKXt2YXIgdD1QaChlKTtyZXR1cm4odC5sb2NhbD9tMmU6ZDJlKSh0KX1mdW5jdGlvbiBnMmUoKXt9ZnVuY3Rpb24gTm0oZSl7cmV0dXJuIGU9PW51bGw/ZzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gbV90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IE5uKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gXzJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/XzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24gZ190KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgTm4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBfX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBObihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHlfdCgpe3JldHVybiBuZXcgTm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gdl90KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgeF90PSIkIjtmdW5jdGlvbiB5MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB2MmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD14X3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD14X3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBiX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3YyZTp5MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT12X3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IE5uKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiB3X3QoKXtyZXR1cm4gbmV3IE5uKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFNfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBNX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IE5uKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gRV90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBUX3QoZSl7ZXx8KGU9eDJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IE5uKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4MmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gQ190KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIEFfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFBfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSV90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBMX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24ga190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBiMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIHcyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE0yZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBFMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBSX3QoZSx0KXt2YXIgcj1QaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/dzJlOmIyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1QyZTpFMmU6ci5sb2NhbD9NMmU6UzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEEyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFAyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBOX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0MyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9QMmU6QTJlKShlLHQscj09bnVsbD8iIjpyKSk6U3AodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBJMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEwyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gazJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIERfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0kyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9rMmU6TDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBPX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IHpfdChlKX1mdW5jdGlvbiB6X3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPU9fdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfXpfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gRl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gQl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gUjJlKGUpe3JldHVybiBmdW5jdGlvbigpe0ZfdCh0aGlzLGUpfX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Ql90KHRoaXMsZSl9fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9GX3Q6Ql90KSh0aGlzLGUpfX1mdW5jdGlvbiBIX3QoZSx0KXt2YXIgcj1PX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/RDJlOnQ/UjJlOk4yZSkocix0KSl9ZnVuY3Rpb24gTzJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB6MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFZfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9PMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0YyZTp6MmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBCMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBIMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVjJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gVV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0IyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VjJlOkgyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBVMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcV90KCl7cmV0dXJuIHRoaXMuZWFjaChVMmUpfWZ1bmN0aW9uIHEyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEdfdCgpe3JldHVybiB0aGlzLmVhY2gocTJlKX1mdW5jdGlvbiBXX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSbShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBHMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBZX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpLG49dD09bnVsbD9HMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpObSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gVzJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChXMmUpfWZ1bmN0aW9uIFkyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gajJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBYX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/ajJlOlkyZSl9ZnVuY3Rpb24gJF90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgWl90PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtfdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLX3R8fChaX3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBLX3Q7ZnVuY3Rpb24gWDJlKGUsdCxyKXtyZXR1cm4gZT1KX3QoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gSl90KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uICQyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gSzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFoyZShlLHQscil7dmFyIG49Wl90Lmhhc093blByb3BlcnR5KGUudHlwZSk/WDJlOkpfdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBRX3QoZSx0LHIpe3ZhciBuPSQyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/WjJlOksyZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBNcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiB0eXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEoyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0eXQodGhpcyxlLHQpfX1mdW5jdGlvbiBRMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdHl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGV5dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1EyZTpKMmUpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gTm4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gcnl0KCl7cmV0dXJuIG5ldyBObihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Obi5wcm90b3R5cGU9cnl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tm4sc2VsZWN0Om1fdCxzZWxlY3RBbGw6Z190LGZpbHRlcjpfX3QsZGF0YTpiX3QsZW50ZXI6eV90LGV4aXQ6d190LGpvaW46U190LG1lcmdlOk1fdCxvcmRlcjpFX3Qsc29ydDpUX3QsY2FsbDpDX3Qsbm9kZXM6QV90LG5vZGU6UF90LHNpemU6SV90LGVtcHR5OkxfdCxlYWNoOmtfdCxhdHRyOlJfdCxzdHlsZTpOX3QscHJvcGVydHk6RF90LGNsYXNzZWQ6SF90LHRleHQ6Vl90LGh0bWw6VV90LHJhaXNlOnFfdCxsb3dlcjpHX3QsYXBwZW5kOldfdCxpbnNlcnQ6WV90LHJlbW92ZTpqX3QsY2xvbmU6WF90LGRhdHVtOiRfdCxvbjpRX3QsZGlzcGF0Y2g6ZXl0fTt2YXIgSWg9cnl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IE5uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTm4oW1tlXV0sRUUpfWZ1bmN0aW9uIG55dChlKXtyZXR1cm4gSHQoUm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgdHdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKyt0d2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIERtKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRG0oZSx0KX1mdW5jdGlvbiBFcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBObihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBObihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gVHAoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRG0oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBpeXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT20oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHptKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixPbSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixPbSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLE9tLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBld2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiByd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIG53ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBpd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1ld2UsdD1yd2Uscj1ud2Usbj1pd2UsaT17fSxvPXZzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLHptKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoT20oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRm0ocXQudmlldyxjKSxPbSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLFRwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihPbSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFNcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfU1wKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBDcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUmgoKXt9dmFyIEhtPS43LGJfPTEvSG0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGtoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixvd2U9L14jKFswLTlhLWZdezMsOH0pJC8sYXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxzd2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2toLGtoLGtoXSsiXFwpJCIpLGx3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLGN3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2toLGtoLGtoLEFFXSsiXFwpJCIpLHV3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsa2gsa2hdKyJcXCkkIiksaHdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsa2gsa2gsQUVdKyJcXCkkIiksb3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NwKFJoLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmF5dCxmb3JtYXRIZXg6YXl0LGZvcm1hdEhzbDpmd2UsZm9ybWF0UmdiOnN5dCx0b1N0cmluZzpzeXR9KTtmdW5jdGlvbiBheXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBmd2UoKXtyZXR1cm4gZnl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHN5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PW93ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2x5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9YXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1zd2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWx3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1jd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9dXdlLmV4ZWMoZSkpP2h5dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PWh3ZS5leGVjKGUpKT9oeXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpveXQuaGFzT3duUHJvcGVydHkoZSk/bHl0KG95dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbHl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcChLaSxjdSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Y3l0LGZvcm1hdEhleDpjeXQsZm9ybWF0UmdiOnV5dCx0b1N0cmluZzp1eXR9KSk7ZnVuY3Rpb24gY3l0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIHV5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBoeXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBMaChlLHQscixuKX1mdW5jdGlvbiBmeXQoZSl7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBuZXcgTGgoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgUmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IExoO2lmKGUgaW5zdGFuY2VvZiBMaClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMaChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFZtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9meXQoZSk6bmV3IExoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBMaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoTGgsVm0sQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgscHl0PS45NjQyMixkeXQ9MSxteXQ9LjgyNTIxLGd5dD00LzI5LG1iPTYvMjksX3l0PTMqbWIqbWIscHdlPW1iKm1iKm1iO2Z1bmN0aW9uIHl5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBOaClyZXR1cm4gd3l0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvZHl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL3B5dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL215dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdnl0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gd18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3l5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcCh1dSx3XyxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9cHl0KnJZKHQpLGU9ZHl0KnJZKGUpLHI9bXl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+cHdlP01hdGgucG93KGUsMS8zKTplL195dCtneXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6X3l0KihlLWd5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB4eXQoZSl7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBuZXcgTmgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXl5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IE5oKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgTmgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gYnl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT94eXQoZSk6bmV3IE5oKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/eHl0KGUpOm5ldyBOaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gTmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHd5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9Q3AoTmgsZ2IsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB3eXQodGhpcykucmdiKCl9fSkpO3ZhciBUeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LFN5dD1JRSpzTCxNeXQ9SUUqb1ksRXl0PW9ZKmFZLXNMKlR5dDtmdW5jdGlvbiBkd2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNfKXJldHVybiBuZXcgU18oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oRXl0Km4rU3l0KnQtTXl0KnIpLyhFeXQrU3l0LU15dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IFNfKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGxhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kd2UoZSk6bmV3IFNfKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBTXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoU18sbGEsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKFR5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gQ3l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gbXdlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gVW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIEF5dChlKXtyZXR1cm4oZT0rZSk9PTE/S246ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P213ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gS24oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgcW09ZnVuY3Rpb24gZSh0KXt2YXIgcj1BeXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUHl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVB5dChsTCksSXl0PVB5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIEx5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24gZ3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBfd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/X3dlKGxbMF0ueCk6Z3dlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixxbSk6dmI6dCBpbnN0YW5jZW9mIHJjP3FtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIGt5dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiBSeXQoZSx0KXt2YXIgcj1VbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgTnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKk55dCxza2V3WDpNYXRoLmF0YW4obCkqTnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksRHl0LGdMO2Z1bmN0aW9uIE95dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRHl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUR5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiB6eXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIEZ5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9Rnl0KE95dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1GeXQoenl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixCeXQ9NCx5d2U9MWUtMTI7ZnVuY3Rpb24gSHl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIHZ3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB4d2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx5d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrQnl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1CeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1IeXQoXyksQz1pLyhwWSpwKSooUyp4d2Uoa0UqYitfKS12d2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvSHl0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFZ5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVZtKHQpKS5oLChyPVZtKHIpKS5oKSxpPUtuKHQucyxyLnMpLG89S24odC5sLHIubCksYT1Lbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgVXl0PVZ5dChVbSkscXl0PVZ5dChLbik7ZnVuY3Rpb24gTV8oZSx0KXt2YXIgcj1LbigoZT13XyhlKSkubCwodD13Xyh0KSkubCksbj1LbihlLmEsdC5hKSxpPUtuKGUuYix0LmIpLG89S24oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBHeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1Lbih0LmMsci5jKSxvPUtuKHQubCxyLmwpLGE9S24odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIFd5dD1HeXQoVW0pLFl5dD1HeXQoS24pO2Z1bmN0aW9uIGp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWxhKGkpKS5oLChvPWxhKG8pKS5oKSxzPUtuKGkucyxvLnMpLGw9S24oaS5sLG8ubCksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIFh5dD1qeXQoVW0pLEVfPWp5dChLbik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gJHl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9a20oKTt2YXIgeGI9MCxORT0wLFJFPTAsWnl0PTFlMyx4TCxERSxiTD0wLFRfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxKeXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gQXAoKXtyZXR1cm4gVF98fChKeXQoYndlKSxUXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gYndlKCl7VF89MH1mdW5jdGlvbiBDXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9Q18ucHJvdG90eXBlPUFfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q18scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP0FwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIEFfKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe0FwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1UXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gS3l0KCl7VF89KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxTd2UoKSxUXz0wfX1mdW5jdGlvbiB3d2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5aeXQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBTd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLVRfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dChLeXQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbCh3d2UsWnl0KSkseGI9MSxKeXQoS3l0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBReXQoZSx0LHIpe3ZhciBuPW5ldyBDXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP0FwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIE13ZT12cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxFd2U9W10sZXZ0PTAsTUw9MSxFTD0yLFNMPTMsdHZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIEdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47VHdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpNd2UsdHdlZW46RXdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmV2dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPmV2dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gVHdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPUFfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT10dnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT10dnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIHJ2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEN3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIEF3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2EodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gbnZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/Q3dlOkF3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPU9hKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9xbToocj1yYyh0KSk/KHQ9cixxbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBJd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBMd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24ga3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBSd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBOd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGl2dChlLHQpe3ZhciByPVBoKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP053ZTpSd2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Jd2U6UHdlKShyKTooci5sb2NhbD9rd2U6THdlKShyLG4sdCkpfWZ1bmN0aW9uIER3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gT3dlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gendlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmT3dlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBGd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZEd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIG92dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49UGgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD96d2U6RndlKShuLHQpKX1mdW5jdGlvbiBCd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIGF2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP0J3ZTpId2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFZ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gc3Z0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/VndlOlV3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gcXdlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBsdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHF3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIGN2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiB1dnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBHd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBXd2UoZSx0LHIpe3ZhciBuLGksbz1Hd2UodCk/QkU6T2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gaHZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goV3dlKHIsZSx0KSl9ZnVuY3Rpb24gWXdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBmdnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsWXdlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gcHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Tm0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24gZHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBqd2U9SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIG12dCgpe3JldHVybiBuZXcgandlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBYd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89U3AodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gZ3Z0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uICR3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIEt3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVNwKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxTcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBad2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1PYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9Z3Z0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gX3Z0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxYd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsZ3Z0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxLd2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goWndlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSwkd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIEp3ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gUXdlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZKd2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24geXZ0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLFF3ZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gdFNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gZVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHZ2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZVNlKGJiKHRoaXMsInRleHQiLGUpKTp0U2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gclNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBuU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmclNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24geHZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxuU2UoZSkpfWZ1bmN0aW9uIGJ2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtHbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIHd2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBpU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIEloKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisraVNlfXZhciB3Yj1JaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0OnB2dCxzZWxlY3RBbGw6ZHZ0LGZpbHRlcjpjdnQsbWVyZ2U6dXZ0LHNlbGVjdGlvbjptdnQsdHJhbnNpdGlvbjpidnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOmh2dCxhdHRyOml2dCxhdHRyVHdlZW46b3Z0LHN0eWxlOl92dCxzdHlsZVR3ZWVuOnl2dCx0ZXh0OnZ2dCx0ZXh0VHdlZW46eHZ0LHJlbW92ZTpmdnQsdHdlZW46bnZ0LGRlbGF5OmF2dCxkdXJhdGlvbjpzdnQsZWFzZTpsdnQsZW5kOnd2dH07SV8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfTtmdW5jdGlvbiBwU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1BcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIE92dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9QXAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZHbShsLGUsdCxjLGEscnx8cFNlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9SWgucHJvdG90eXBlLmludGVycnVwdD1ydnQ7SWgucHJvdG90eXBlLnRyYW5zaXRpb249T3Z0O3ZhciBkU2U9W251bGxdO2Z1bmN0aW9uIHp2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSxkU2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEZ2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBCdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEh2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltIdnQoZVswXSksSHZ0KGVbMV0pXX1mdW5jdGlvbiBtU2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBUcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LGdTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFBwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxWdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFV2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sX1NlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHlTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiB2U2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiB4U2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIHdTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gcXZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoZ1NlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD14U2Uscj12U2Usbj1iU2UsaT0hMCxvPXZzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gUHBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtNcChuZXcgRnZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9CdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6X1NlW3ldLFM9ZT09PUhMP251bGw6eVNlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP21TZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixQcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksem0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIEJ2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gVnZ0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9VnZ0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFV2dCYmZHQuYXR0cigiY3Vyc29yIixQcFt5PVV2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBGbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSx3U2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLFBwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLEd2dD1NYXRoLlBJLFZFPUd2dC8yLEtZPUd2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIFNTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uIFd2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1TU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIFl2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksTF89MWUtNixNU2U9UVktTF87ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqdnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1qdnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+TF8paWYoIShNYXRoLmFicyh1KnMtbCpjKT5MXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5MXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5MX3x8TWF0aC5hYnModGhpcy5feTEtYyk+TF8pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5NU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+TF8mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJzPWp2dDtmdW5jdGlvbiBFU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gQ1NlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBBU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gWHZ0KCl7dmFyIGU9RVNlLHQ9VFNlLHI9Q1NlLG49QVNlLGk9UFNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1ZdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPWJzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIGtTZT1BcnJheS5wcm90b3R5cGUsS0w9a1NlLnNsaWNlO2Z1bmN0aW9uIGwxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gYzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gT2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHUxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9UlNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gUlNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoTlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gTlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gRFNlKGUsdCxyKSYmT1NlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBEU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gT1NlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBoMXQoKXt9dmFyIElwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGwxdCk7ZWxzZXt2YXIgaD1hYShjKSxmPWhbMF0scD1oWzFdO3U9dGwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSksYzF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKHUxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LElwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LElwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoSXBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxJcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsSXBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsSXBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LElwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT9PaChLTC5jYWxsKGMpKTpPaChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6aDF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiB6U2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gRlNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEJTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGYxdCgpe3ZhciBlPXpTZSx0PUZTZSxyPUJTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT1PaCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz10bCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP09oKEtMLmNhbGwoeSkpOk9oKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofWttKCk7cUUoKTtJXygpO2Z1bmN0aW9uIEdTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEwxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oR1NlKX1mdW5jdGlvbiBXU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gazF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihXU2UpfXFFKCk7ZnVuY3Rpb24gWVNlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gRF8oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKFlTZSl9ZnVuY3Rpb24gUjF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksRF8odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1XbShlKTtyZXR1cm4gRF8odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgTjF0PVIxdChDYiksRDF0PVIxdChBYik7ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBqU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gejF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihqU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgRjF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxCMXQ9YWooInRleHQvaHRtbCIpLEgxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFYxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIERuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFUxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIHExdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIHExdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBHMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpcTF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIFcxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBZMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBqMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gWDF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiAkMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gSzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBaMXQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiBKMXQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIFExdChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIHR4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gcnh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBueHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gaXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiB6aChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/ZXh0OnQscj09bnVsbD9ueHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBveHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciB6YT16aC5wcm90b3R5cGU9c2oucHJvdG90eXBlO3phLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1veHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1veHQobikpO3JldHVybiBlfTt6YS5hZGQ9VTF0O3phLmFkZEFsbD1HMXQ7emEuY292ZXI9VzF0O3phLmRhdGE9WTF0O3phLmV4dGVudD1qMXQ7emEuZmluZD1YMXQ7emEucmVtb3ZlPSQxdDt6YS5yZW1vdmVBbGw9SzF0O3phLnJvb3Q9WjF0O3phLnNpemU9SjF0O3phLnZpc2l0PVExdDt6YS52aXNpdEFmdGVyPXR4dDt6YS54PXJ4dDt6YS55PWl4dDtmdW5jdGlvbiBYU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uICRTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gYXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PXpoKHQsWFNlLCRTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6RG4oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gS1NlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIHN4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBseHQoZSl7dmFyIHQ9S1NlLHI9dSxuLGk9RG4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPXN4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PXN4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLGQoKSxoKTppfSxofWttKCk7VGIoKTtmdW5jdGlvbiBjeHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiB1eHQoZSl7cmV0dXJuIGUueX12YXIgWlNlPTEwLEpTZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gaHh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPUFfKHUpLGM9dnMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PVpTZSpNYXRoLnNxcnQoZCkseD1kKkpTZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBmeHQoKXt2YXIgZSx0LHIsbj1EbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPXpoKGUsY3h0LHV4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkRuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBweHQoZSx0LHIpe3ZhciBuLGk9RG4oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpEbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6RG4oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24gZHh0KGUpe3ZhciB0PURuKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6RG4oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIG14dChlKXt2YXIgdD1EbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPURuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpEbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiBneHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE9fKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEZoKGUpe3JldHVybiBlPU9fKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIF94dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB5eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBRU2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTHAoZSl7aWYoISh0PVFTZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9THAucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiB2eHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIHh4dChlLHQpe3ZhciByPU9fKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK09fKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpneHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczp4eHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgYnh0PUFycmF5LnByb3RvdHlwZS5tYXAsd3h0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOl94dChieHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnl4dChieHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPXZ4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP3d4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1McChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz13eHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaCh0KS8zKSkpKjMtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEZoKHQpLUZoKGUpKSsxfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7U3h0KHNrLGUsdGhpcy50KSxTeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIFN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LHpfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEZfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLGNhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZFeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmRXh0W2UudHlwZV0oZSx0KX12YXIgTXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxFeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7VHh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspVHh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gVHh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmTXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/TXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1TcygpLHBrPVNzKCksQ3h0LEF4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9dDNlLHB1LmxpbmVFbmQ9ZTNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIHQzZSgpe3B1LnBvaW50PXIzZX1mdW5jdGlvbiBlM2UoKXtQeHQoQ3h0LEF4dCl9ZnVuY3Rpb24gcjNlKGUsdCl7cHUucG9pbnQ9UHh0LEN4dD1lLEF4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFB4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gSXh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gQl8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIEhfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksTXMsdWksbmwsVl8sTnh0LER4dCxMYixLRT1TcygpLFltLE5wLFJwPXtwb2ludDpfaixsaW5lU3RhcnQ6THh0LGxpbmVFbmQ6a3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JwLnBvaW50PXp4dCxScC5saW5lU3RhcnQ9bjNlLFJwLmxpbmVFbmQ9aTNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksUnAucG9pbnQ9X2osUnAubGluZVN0YXJ0PUx4dCxScC5saW5lRW5kPWt4dCxqRTwwPyhyaT0tKHVpPTE4MCksTXM9LShubD05MCkpOktFPmxlP25sPTkwOktFPC1sZSYmKE1zPS05MCksTnBbMF09cmksTnBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxNcz0tKG5sPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7WW0ucHVzaChOcD1bcmk9ZSx1aT1lXSksdDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KX1mdW5jdGlvbiBPeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPWtwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1rcChpLG4pO0hfKG8pLG89Ql8obyk7dmFyIGE9ZS1WXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypWXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPm5sJiYobmw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlZfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPE1zJiYoTXM9YykpOih0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpKSksdT9lPFZfP3JsKHJpLGUpPnJsKHJpLHVpKSYmKHVpPWUpOnJsKGUsdWkpPnJsKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5WXz9ybChyaSxlKT5ybChyaSx1aSkmJih1aT1lKTpybChlLHVpKT5ybChyaSx1aSkmJihyaT1lKX1lbHNlIFltLnB1c2goTnA9W3JpPWUsdWk9ZV0pO3Q8TXMmJihNcz10KSx0Pm5sJiYobmw9dCksTGI9cixWXz1lfWZ1bmN0aW9uIEx4dCgpe1JwLnBvaW50PU94dH1mdW5jdGlvbiBreHQoKXtOcFswXT1yaSxOcFsxXT11aSxScC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIHp4dChlLHQpe2lmKExiKXt2YXIgcj1lLVZfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIE54dD1lLER4dD10O3B1LnBvaW50KGUsdCksT3h0KGUsdCl9ZnVuY3Rpb24gbjNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gaTNlKCl7enh0KE54dCxEeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLE5wWzBdPXJpLE5wWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gcmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIG8zZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gUnh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBGeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYobmw9dWk9LShyaT1Ncz0xLzApLFltPVtdLHZvKGUsUnApLHI9WW0ubGVuZ3RoKXtmb3IoWW0uc29ydChvM2UpLHQ9MSxuPVltWzBdLG89W25dO3Q8cjsrK3QpaT1ZbVt0XSxSeHQobixpWzBdKXx8Unh0KG4saVsxXSk/KHJsKG5bMF0saVsxXSk+cmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSkscmwoaVswXSxuWzFdKT5ybChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXJsKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gWW09TnA9bnVsbCxyaT09PTEvMHx8TXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksTXNdLFt1aSxubF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixWeHQsVXh0LEZhLEJhLEhhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OkJ4dCxsaW5lRW5kOkh4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9bDNlLGR1LmxpbmVFbmQ9YzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PUJ4dCxkdS5saW5lRW5kPUh4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBCeHQoKXtkdS5wb2ludD1hM2V9ZnVuY3Rpb24gYTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLGR1LnBvaW50PXMzZSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gczNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9QmEqby1IYSppKSphKyhhPUhhKm4tRmEqbykqYSsoYT1GYSppLUJhKm4pKmEpLEZhKm4rQmEqaStIYSpvKTttays9YSx2ays9YSooRmErKEZhPW4pKSx4ays9YSooQmErKEJhPWkpKSxiays9YSooSGErKEhhPW8pKSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gSHh0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gbDNlKCl7ZHUucG9pbnQ9dTNlfWZ1bmN0aW9uIGMzZSgpe3F4dChWeHQsVXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiB1M2UoZSx0KXtWeHQ9ZSxVeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1xeHQ7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLEpFKEZhLEJhLEhhKX1mdW5jdGlvbiBxeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1CYSpvLUhhKmkscz1IYSpuLUZhKm8sbD1GYSppLUJhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEZhKyhGYT1uKSkseGsrPXUqKEJhKyhCYT1pKSksYmsrPXUqKEhhKyhIYT1vKSksSkUoRmEsQmEsSGEpfWZ1bmN0aW9uIEd4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPHpfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPHpfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKFl4dChlKSxqeHQodCxyKSk6WXh0KGUpOnR8fHI/anh0KHQscik6d2p9ZnVuY3Rpb24gV3h0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBZeHQoZSl7dmFyIHQ9V3h0KGUpO3JldHVybiB0LmludmVydD1XeHQoLWUpLHR9ZnVuY3Rpb24ganh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1YeHQoYSxpKSxvPVh4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9Ql8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIFh4dChlLHQpe3Q9b2ModCksdFswXS09ZSxIXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiAkeHQoKXt2YXIgZT1VXyhbMCwwXSksdD1VXyg5MCkscj1VXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6VV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksS3h0KG8pLEt4dChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gS3h0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9U3MoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06Y2EoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPWtwKG9jKGYpLG9jKHgpKTtIXyhMKTt2YXIgUj1rcChvLEwpO0hfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9SW0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxmM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihoM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIGgzZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBmM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxwM2UsbTNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gcDNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj1kM2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiBkM2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIG0zZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPWtwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9a3AoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1CXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixCXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBaeHQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBEcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9SW0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07Wnh0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiBKeHQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9RHAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9U3MoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDpnM2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24gZzNlKCl7UmIucG9pbnQ9eTNlLFJiLmxpbmVFbmQ9XzNlfWZ1bmN0aW9uIF8zZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24geTNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD12M2V9ZnVuY3Rpb24gdjNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLHgzZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayh4M2UpfXZhciBReHQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSx0YnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBlYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoZWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYocmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYobmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmdGJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/dGJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBlYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gcmJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTx6XyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gbmJ0KGUsdCl7cmV0dXJuISFUayhlLm1hcChiM2UpLGlidCh0KSl9ZnVuY3Rpb24gYjNlKGUpe3JldHVybiBlPWUubWFwKGlidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGlidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4oZSYmUXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UXh0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gYWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gc2J0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPWFidChvLGksOTApLHA9c2J0KHQsZSxfKSxkPWFidChzLGEsOTApLGc9c2J0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBsYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIGNidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIGptKGUpe3JldHVybiBlfXZhciBQaj1TcygpLElqPVNzKCksdWJ0LGhidCxMaixraixYbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PXczZSxYbS5saW5lRW5kPU0zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1htLmxpbmVTdGFydD1YbS5saW5lRW5kPVhtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIHczZSgpe1htLnBvaW50PVMzZX1mdW5jdGlvbiBTM2UoZSx0KXtYbS5wb2ludD1mYnQsdWJ0PUxqPWUsaGJ0PWtqPXR9ZnVuY3Rpb24gZmJ0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIE0zZSgpe2ZidCh1YnQsaGJ0KX12YXIgUmo9WG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsRTNlPXtwb2ludDpUM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gVDNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1FM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLG1idCxnYnQsQmgsSGgsbXU9e3BvaW50OnFfLGxpbmVTdGFydDpwYnQsbGluZUVuZDpkYnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVAzZSxtdS5saW5lRW5kPUkzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PXFfLG11LmxpbmVTdGFydD1wYnQsbXUubGluZUVuZD1kYnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gcV8oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIHBidCgpe211LnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXttdS5wb2ludD1BM2UscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBBM2UoZSx0KXt2YXIgcj1lLUJoLG49dC1IaCxpPXhyKHIqcituKm4pO3prKz1pKihCaCtlKS8yLEZrKz1pKihIaCt0KS8yLHpiKz1pLHFfKEJoPWUsSGg9dCl9ZnVuY3Rpb24gZGJ0KCl7bXUucG9pbnQ9cV99ZnVuY3Rpb24gUDNlKCl7bXUucG9pbnQ9TDNlfWZ1bmN0aW9uIEkzZSgpe19idChtYnQsZ2J0KX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1fYnQscV8obWJ0PUJoPWUsZ2J0PUhoPXQpfWZ1bmN0aW9uIF9idChlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7emsrPWkqKEJoK2UpLzIsRmsrPWkqKEhoK3QpLzIsemIrPWksaT1IaCplLUJoKnQsT2orPWkqKEJoK2UpLHpqKz1pKihIaCt0KSxvNSs9aSozLHFfKEJoPWUsSGg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPVNzKCksQmoseWJ0LHZidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9azNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJnhidCh5YnQsdmJ0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIGszZShlLHQpe0hrLnBvaW50PXhidCx5YnQ9YTU9ZSx2YnQ9czU9dH1mdW5jdGlvbiB4YnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpiYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1iYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBiYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gd2J0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLGptKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIFNidChlKXtyZXR1cm57c3RyZWFtOiRtKGUpfX1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIEdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBHXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBNYnQ9MTYsUjNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0QzZShlLHQpOk4zZShlKX1mdW5jdGlvbiBOM2UoZSl7cmV0dXJuICRtKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gRDNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8UjNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLE1idCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsTWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIE8zZT0kbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIHozZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIEYzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIEVidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9am0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPU8zZSh6M2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLGptKTpEcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBHXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1FYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP0VidDpGM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIFRidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gVGJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSpjYShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSpjYShzKSpjYShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFdfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFdfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gQjNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBDYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9V18oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1XXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1CM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBHXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFZoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIEFidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBQYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gWV8oZSx0KXtyZXR1cm5bZSxGXyhJYigobW4rdCkvMikpXX1ZXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIElidCgpe3JldHVybiBZaihZXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1ZXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpGXyhyL1p0KHQpKS9GXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIFlfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9Y2EobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSpjYShhKSpjYShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gTGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIGpfKGUsdCl7cmV0dXJuW2UsdF19al8uaW52ZXJ0PWpfO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShqXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSpjYShhKSpjYShsKSksW2MvbixpLWNhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiBSYnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsSDNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288SDNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8el8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBOYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVZoKGljKTtmdW5jdGlvbiBEYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gT2J0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPSRtKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1qbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsam0pOkRwKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBHXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIHpidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1WaCh3bik7ZnVuY3Rpb24gRmJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVZoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gQmJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0ZfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEhidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVjNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFUzZShlKXtyZXR1cm4gZS5yZWR1Y2UocTNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIHEzZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBHM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoVzNlLDApfWZ1bmN0aW9uIFczZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gWTNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBqM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFZidCgpe3ZhciBlPVYzZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9VTNlKHApLGYueT1HM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9WTNlKG8pLGM9ajNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIFgzZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBVYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoWDNlKX1mdW5jdGlvbiBxYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFlidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIGpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIFhidChlKXtmb3IodmFyIHQ9dGhpcyxyPSQzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uICQzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gJGJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIEtidCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBaYnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gSmJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IEttKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9WjNlKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgS20oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gSzNlKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUoSjNlKX1mdW5jdGlvbiBaM2UoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gSjNlKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIEttKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfUttLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkttLGNvdW50OlVidCxlYWNoOnFidCxlYWNoQWZ0ZXI6V2J0LGVhY2hCZWZvcmU6R2J0LHN1bTpZYnQsc29ydDpqYnQscGF0aDpYYnQsYW5jZXN0b3JzOiRidCxkZXNjZW5kYW50czpLYnQsbGVhdmVzOlpidCxsaW5rczpKYnQsY29weTpLM2V9O3ZhciBRYnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHQydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPXQydChRYnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZlMnQobyxpKT8rK3Q6KG89dE1lKG49UTNlKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gUTNlKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihyMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIGUydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIWUydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHRNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZU1lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIHIydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIGVNZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiByMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBuMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBpMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBvMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO24ydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7bjJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGkydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGkydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1vMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPW8ydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gYTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIHMydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiBPcCgpe3JldHVybiAwfWZ1bmN0aW9uIFptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiByTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB1MnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1PcDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUobDJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUoYzJ0KDEpKTpvLmVhY2hCZWZvcmUobDJ0KHJNZSkpLmVhY2hBZnRlcihKaihPcCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGMydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOlptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGwydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBjMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIFVoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gaDJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmVWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGYydD0iJCIsbk1lPXtkZXB0aDotMX0scDJ0PXt9O2Z1bmN0aW9uIGlNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBvTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24gZDJ0KCl7dmFyIGU9aU1lLHQ9b01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBLbShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWYydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9wMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZjJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09cDJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9bk1lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiBhTWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIHNNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBsTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gY01lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS20ucHJvdG90eXBlKTtmdW5jdGlvbiB1TWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9YU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dU1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2xNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoc01lKGNNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEptKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/VWgobCxyLG4saSxnP24rPWQqXy9nOm8pOkptKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiBnMnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz1PcCxhPU9wLHM9T3AsbD1PcCxjPU9wO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Wm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6Y30sdX1mdW5jdGlvbiBfMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB5MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP0ptOlVoKShlLHQscixuLGkpfXZhciB2MnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP1VoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpKbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24geDJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBiMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIHcydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gaE1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIFMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZ3MnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gTTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQoaE1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1TMnQobiksYT1TMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gRTJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBUMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgQzJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBBMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFAydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBJMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgTDJ0PUFycmF5LnByb3RvdHlwZSxYXz1MMnQubWFwLGxjPUwydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gUW0oKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFtKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBrMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gazJ0KHQoKSl9LGV9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gazJ0KFFtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIFIydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIE4ydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTpSMnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBEMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBmTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gcE1lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9eXMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gJF8oKXt2YXIgZT1OMnQsdD1OMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9wTWU6Zk1lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9RDJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0QydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiAkXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9dGwoZSx0LHIpLG87c3dpdGNoKG49THAobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD14XyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPXhfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD14XyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiBPbigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsT24oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxpbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD9YXy5jYWxsKGUsbTUpOlswLDFdLGlsKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gTzJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiB6MnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIGRNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIG1NZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIGdNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gX01lKGUpe3JldHVybiBlPT09MTA/Z01lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gRjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoTzJ0LHoydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9eU1lKG4pLG89X01lKG4pLHIoKVswXTwwPyhpPUYydChpKSxvPUYydChvKSxlKGRNZSxtTWUpKTplKE8ydCx6MnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNSgkXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIEIydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBIMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUoQjJ0KHQpLEgydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShCMnQodD0rbiksSDJ0KHQpKTp0fSxpbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiB2TWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24geE1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2Uodk1lLHhNZSk6ZShWMnQociksVjJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0saWwodCl9ZnVuY3Rpb24gS18oKXt2YXIgZT12NSgkXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsS18oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gVTJ0KCl7cmV0dXJuIEtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gZWcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09c2EoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt5cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQob2EpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbeXMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkoaWwoYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbeXMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIFpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBKXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBxMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqSl8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0pffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRXz1xMnQsc1g9cTJ0LnJhbmdlO3ZhciBHMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1HMnQsVzJ0PUcydC5yYW5nZTt2YXIgWTJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqSl8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PVkydCxqMnQ9WTJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHR5PVgydCwkMnQ9WDJ0LnJhbmdlO2Z1bmN0aW9uIGV5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciByZz1leSgwKSxyeT1leSgxKSxsWD1leSgyKSxjWD1leSgzKSx6cD1leSg0KSx1WD1leSg1KSxoWD1leSg2KSxmWD1yZy5yYW5nZSxLMnQ9cnkucmFuZ2UsWjJ0PWxYLnJhbmdlLEoydD1jWC5yYW5nZSxRMnQ9enAucmFuZ2UsdHd0PXVYLnJhbmdlLGV3dD1oWC5yYW5nZTt2YXIgcnd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PXJ3dCxud3Q9cnd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIEdoPXBYLGl3dD1wWC5yYW5nZTt2YXIgb3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9b3d0LGF3dD1vd3QucmFuZ2U7dmFyIHN3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PXN3dCxsd3Q9c3d0LnJhbmdlO3ZhciBjd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksbnk9Y3d0LHV3dD1jd3QucmFuZ2U7ZnVuY3Rpb24gaXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgbmc9aXkoMCksb3k9aXkoMSksZFg9aXkoMiksbVg9aXkoMyksRnA9aXkoNCksZ1g9aXkoNSksX1g9aXkoNikseVg9bmcucmFuZ2UsaHd0PW95LnJhbmdlLGZ3dD1kWC5yYW5nZSxwd3Q9bVgucmFuZ2UsZHd0PUZwLnJhbmdlLG13dD1nWC5yYW5nZSxnd3Q9X1gucmFuZ2U7dmFyIF93dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1fd3QseXd0PV93dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBXaD12WCx2d3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpFd3QsZTpFd3QsZjpxTWUsZzpRTWUsRzplRWUsSDpITWUsSTpWTWUsajpVTWUsTDpJd3QsbTpHTWUsTTpXTWUscDpzdCxxOlN0LFE6QXd0LHM6UHd0LFM6WU1lLHU6ak1lLFU6WE1lLFY6JE1lLHc6S01lLFc6Wk1lLHg6bnVsbCxYOm51bGwseTpKTWUsWTp0RWUsWjpyRWUsIiUiOkN3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpUd3QsZTpUd3QsZjphRWUsZzpnRWUsRzp5RWUsSDpuRWUsSTppRWUsajpvRWUsTDprd3QsbTpzRWUsTTpsRWUscDpfdCxxOmN0LFE6QXd0LHM6UHd0LFM6Y0VlLHU6dUVlLFU6aEVlLFY6ZkVlLHc6cEVlLFc6ZEVlLHg6bnVsbCxYOm51bGwseTptRWUsWTpfRWUsWjp2RWUsIiUiOkN3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOlN3dCxlOlN3dCxmOk9NZSxnOnd3dCxHOmJ3dCxIOk13dCxJOk13dCxqOmtNZSxMOkRNZSxtOkxNZSxNOlJNZSxwOkQscTpJTWUsUTpGTWUsczpCTWUsUzpOTWUsdTpFTWUsVTpUTWUsVjpDTWUsdzpNTWUsVzpBTWUseDp6LFg6VSx5Ond3dCxZOmJ3dCxaOlBNZSwiJSI6ek1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9eHd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/b3kuY2VpbChodCk6b3koaHQpLGh0PW55Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9yeS5jZWlsKGh0KTpyeShodCksaHQ9dHkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIHh3dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciB4d3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLGJNZT0vXiUvLHdNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gU01lKGUpe3JldHVybiBlLnJlcGxhY2Uod01lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKFNNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIE1NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYnd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHd3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFBNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6TWUoZSx0LHIpe3ZhciBuPWJNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEZNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEhNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBWTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFVNZShlLHQpe3JldHVybiBCcigxK3R5LmNvdW50KEdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSXd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBxTWUoZSx0KXtyZXR1cm4gSXd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gR01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gV01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWU1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gak1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBYTWUoZSx0KXtyZXR1cm4gQnIocmcuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEx3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD96cChlKTp6cC5jZWlsKGUpfWZ1bmN0aW9uICRNZShlLHQpe3JldHVybiBlPUx3dChlKSxCcih6cC5jb3VudChHaChlKSxlKSsoR2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIEtNZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBaTWUoZSx0KXtyZXR1cm4gQnIocnkuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEpNZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gUU1lKGUsdCl7cmV0dXJuIGU9THd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB0RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGVFZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/enAoZSk6enAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gckVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBUd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBuRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gaUVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBvRWUoZSx0KXtyZXR1cm4gQnIoMStueS5jb3VudChXaChlKSxlKSx0LDMpfWZ1bmN0aW9uIGt3dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gYUVlKGUsdCl7cmV0dXJuIGt3dChlLHQpKyIwMDAifWZ1bmN0aW9uIHNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGxFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHVFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gaEVlKGUsdCl7cmV0dXJuIEJyKG5nLmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBSd3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/RnAoZSk6RnAuY2VpbChlKX1mdW5jdGlvbiBmRWUoZSx0KXtyZXR1cm4gZT1Sd3QoZSksQnIoRnAuY291bnQoV2goZSksZSkrKFdoKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBwRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZEVlKGUsdCl7cmV0dXJuIEJyKG95LmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBtRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGdFZShlLHQpe3JldHVybiBlPVJ3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gX0VlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB5RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0ZwKGUpOkZwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHZFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gQ3d0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEF3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBQd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsYXksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLGF5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24geEVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIGJFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz94RWU6YXkoU1gpLE53dD1iRWU7ZnVuY3Rpb24gd0VlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFNFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP3dFZTpFNShTWCksRHd0PVNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LE1FZT1QNSo3LE93dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gRUVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBURWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsTUVlXSxbdCwxLE93dF0sW3QsMywzKk93dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj10bChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heCh0bChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChYXy5jYWxsKGssVEVlKSk6aCgpLm1hcChFRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KEdoLHY4LHJnLHR5LHk4LF84LFFfLFpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiB6d3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoV2gsdzgsbmcsbnksYjgseDgsUV8sWl8sYXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1pbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEZ3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgoeXMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQob2EpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1pbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEJ3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEh3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFZ3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFV3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIHF3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIEd3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyIFd3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIFl3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIGp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIFh3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLCR3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksS3d0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxad3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLEp3dD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksUXd0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSx0U3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLGVTdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksclN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxuU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGlTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksb1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSxhU3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLHNTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksbFN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxjU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLHVTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksaFN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxmU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLHBTdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSksZFN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSxtU3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLGdTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksX1N0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx5U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLHZTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSkseFN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxiU3Q9SWUoZSQpO2Z1bmN0aW9uIHdTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgU1N0PUVfKGxhKDMwMCwuNSwwKSxsYSgtMjQwLC41LDEpKTt2YXIgTVN0PUVfKGxhKC0xMDAsLjc1LC4zNSksbGEoODAsMS41LC44KSksRVN0PUVfKGxhKDI2MCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxrOD1sYSgpO2Z1bmN0aW9uIFRTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxDRWU9TWF0aC5QSS8zLEFFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBDU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStDRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUrQUVlKSkqdCxSOCsiIn1mdW5jdGlvbiBBU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUFN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksSVN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksTFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksa1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLGlnPU1hdGguY29zLFJTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixzeT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gTlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFBFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTEVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24ga0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBORWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvc3kocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqc3koUlN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBEU3QoKXt2YXIgZT1QRWUsdD1JRWUscj1xZSgwKSxuPW51bGwsaT1MRWUsbz1rRWUsYT1SRWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1icygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKmlnKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqaWcoZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6c3koaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKmlnKHkpLFc9ZipfdSh5KSxaPWgqaWcoUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZippZyh4KSxzdD1mKl91KHgpLFN0PWgqaWcoYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9TkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KE5TdCgobHQqX3QrS3QqY3QpLyhzeShsdCpsdCtLdCpLdCkqc3koX3QqX3QrY3QqY3QpKSkvMiksZXQ9c3koTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW2lnKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBPU3QoZSl7dGhpcy5fY29udGV4dD1lfU9TdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBZaChlKXtyZXR1cm4gbmV3IE9TdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9WWgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPWJzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1ZaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PWJzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gelN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIEZTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1GU3QsdD16U3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihZaCk7ZnVuY3Rpb24gSFN0KGUpe3RoaXMuX2N1cnZlPWV9SFN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEhTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBseShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIERFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1ERWUscj1PRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1icygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHpFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIEJFZShlLHQscixuLGkpe3ZhciBvPWx5KHQsciksYT1seSh0LHI9KHIraSkvMikscz1seShuLHIpLGw9bHkobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gVlN0KCl7cmV0dXJuIGEkKHpFZSl9ZnVuY3Rpb24gVVN0KCl7cmV0dXJuIGEkKEZFZSl9ZnVuY3Rpb24gcVN0KCl7dmFyIGU9YSQoQkVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBHU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxIRWU9R1N0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9IRWUpLG49cipHU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgVkVlPS44OTA4MTMwOTE1MjkyODUyLFdTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksVUVlPU1hdGguc2luKGhjLzEwKSpXU3QscUVlPS1NYXRoLmNvcyhoYy8xMCkqV1N0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqVkVlKSxuPVVFZSpyLGk9cUVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxHRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L0dFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIFlTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIGpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9YnMoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gWFN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1YU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiAkU3QoZSl7cmV0dXJuIG5ldyBYU3QoZSl9ZnVuY3Rpb24gS1N0KGUpe3RoaXMuX2NvbnRleHQ9ZX1LU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gWlN0KGUpe3JldHVybiBuZXcgS1N0KGUpfWZ1bmN0aW9uIEpTdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9SlN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgUVN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyBKU3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgdDN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgZTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIHIzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIG4zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW4zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGkzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IG4zdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIG8zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW8zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciBhM3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBvM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBzM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1zM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlKXt0aGlzLl9jb250ZXh0PWV9YzN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gdTN0KGUpe3JldHVybiBuZXcgYzN0KGUpfWZ1bmN0aW9uIGgzdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZjN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGgzdChvKStoM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBwM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAscDN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLHAzdCh0aGlzLHI9ZjN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZjN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24gZDN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IG0zdChlKX0oZDN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiBtM3QoZSl7dGhpcy5fY29udGV4dD1lfW0zdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiBnM3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBfM3QoZSl7cmV0dXJuIG5ldyBkM3QoZSl9ZnVuY3Rpb24gdjN0KGUpe3RoaXMuX2NvbnRleHQ9ZX12M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49eTN0KGUpLGk9eTN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB5M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyB2M3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiB3M3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIFMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiBXRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBNM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49V0VlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIEUzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBUM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEMzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIEEzdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoWUVlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBZRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUDN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gSTN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEwzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBrM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9TjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289TjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBOM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFZhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFZhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIGpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gWEVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEQzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIVhFZShvPXdvW2ldLGUsdCxyLG4pfHwhakVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gTzN0KGUpe3JldHVybiBWYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gJEVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIEtFZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gejN0KCl7Zm9yKHZhciBlPTAsdD1WYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVZhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09JEVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIEYzdChlLHQscixuKXt2YXIgaT1WYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1WYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9S0VlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1WYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBWYVtvXSl9dmFyIEIzdD1bXSxRODtmdW5jdGlvbiBaRWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gY3koZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUgzdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PUIzdC5wb3AoKXx8bmV3IFpFZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIHV5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxCM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgVTN0PVtdO2Z1bmN0aW9uIEpFZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBWM3QoZSl7dmFyIHQ9VTN0LnBvcCgpfHxuZXcgSkVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe3V5KGUpLGh5LnJlbW92ZShlKSxVM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBxM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSx1eShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLHV5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxjeShsKSxjeShjKX1mdW5jdGlvbiBHM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1oeS5fO3M7KWlmKG89VzN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LVFFZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfU8zdChlKTt2YXIgbD1WM3QoZSk7aWYoaHkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7dXkobiksaT1WM3Qobi5zaXRlKSxoeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLGN5KG4pLGN5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn11eShuKSx1eShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksY3kobiksY3koaSl9fWZ1bmN0aW9uIFczdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIFFFZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiBXM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEgzdD0xZS0xMixoeSxWYSxuMix3bztmdW5jdGlvbiB0NWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIGU1ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChlNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxWYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGh5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKEczdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKXEzdChvLmFyYyk7ZWxzZSBicmVhaztpZih6M3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtEM3QoYSxzLGwsYyksRjN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1WYSxoeT1uMj13bz1WYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZ0NWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gWTN0KCl7dmFyIGU9azN0LHQ9UjN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1rbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIGpoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1qaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBqaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IGpoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFhoPW5ldyBqaCgxLDAsMCk7aTIucHJvdG90eXBlPWpoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIFhoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBuNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIGozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8WGh9ZnVuY3Rpb24gaTVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gbzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGE1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1yNWUsdD1uNWUscj1hNWUsbj1pNWUsaT1vNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXZzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixqM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLGozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKFhoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IGpoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgamgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IGpoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtNcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7em0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxGbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9VHAodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPVRwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBYM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e1gzdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBzNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPXM1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uICQzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49JDN0KHdwLCgpPT53cC5nZXRSdW5zKCkpLHVRcj0kM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgb2c9RWUoT2UoKSwxKTtfcyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBvbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PW9nLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9b2cuZmlsdGVyKG9nLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPW9nLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07b2wudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG9sLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sb2wucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG9sLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb2wucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTtvbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sb2wpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD15XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj13cC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIix3cC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3dwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO19zKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiBLM3QoZSl7bGV0IHQ9YzVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBjNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIEszdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyICRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihmeS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49ZnkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWZ5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBmeS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTskaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJGgucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLCRoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLCRoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLCRoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpOyRoPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sJGgpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke3U1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiB1NWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIEozdD1FZShPZSgpLDEpO3ZhciBIcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9SjN0LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O0hwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtIcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLEhwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHtoNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBoNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgV0t0PUVlKE9lKCksMSksVVduPUVlKHdsKCksMSk7dmFyIExLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9TEt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgX3FlPUVlKE9lKCksMSksV289RWUod2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLEVkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKEVkfHwoRWQ9e30pKTt2YXIgZTA9NCx5cWU9NCxtQj0zLGdCPTIwLF9CPTQsa0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt5cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiB2cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgcjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiB4cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6cjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIEVkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgRWQuV0FMTF9USU1FOnJldHVybiB2cWUoKTtjYXNlIEVkLlJFTEFUSVZFOnJldHVybiB4cWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIHpzPUVlKE9lKCksMSksTW49RWUod2woKSwxKTt2YXIgdmE9RWUod2woKSwxKTtmdW5jdGlvbiBicWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgd3FlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gU3FlKGUpe2xldCB0PWJxZShlKSxyPXdxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXZhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHZhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHZhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9U3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnZhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LFV2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW1V2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBVdih0KSxyW1V2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LHF2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3ZhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgdmEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPVV2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9cXYuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgUkt0PUVlKE9lKCksMSk7dmFyIEd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKEd2fHwoR3Y9e30pKTt2YXIgTXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249R3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Hdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09R3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07Ukt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLE1xZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKHdsKCksMSk7dmFyIE9LdD0xZTQsekt0PS4wMDEsRkt0PXhuKCIuMn5lIiksRXFlPXhuKCIuNH5yIiksTkt0PXhuKCIsfiIpO2Z1bmN0aW9uIERLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOkVxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkRLdCxmb3JtYXRTaG9ydDpES3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOk5LdChlKX0sZm9ybWF0TG9uZzpOS3R9LCRHbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBLR249eG4oIjAuM35zIiksWkduPXhuKCIsLjN+ZiIpO3ZhciBUcWU9MWUzLENxZT02MCpUcWUsQXFlPTYwKkNxZSxQcWU9MjQqQXFlLEpHbj0zNjUqUHFlLFFHbj14bigiLjR+Iik7dmFyIElxZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQsQkt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBJcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgVGQ7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoVGR8fChUZD17fSkpO2Z1bmN0aW9uIEhLdChlKXtzd2l0Y2goZSl7Y2FzZSBUZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBUZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgTHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT1PbigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqTHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIE9uKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9Qkt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBIS3QoVGQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9c2EobywuMDUpLHM9c2EobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9YWEobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZSh3bCgpLDEpO3ZhciBWS3Q9RWUod2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFZLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1zYShhLC4wNSksbD1zYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIENkPUVlKHdsKCksMSk7dmFyIG4wPUVlKHdsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBuMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPXhzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmbjAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP24wLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciB4YTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoeGF8fCh4YT17fSkpO3ZhciB6Zj1jbGFzcyBleHRlbmRzIENkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT14YS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBDZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT56Zi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IXpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1DZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT14YS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZSh4YS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09eGEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09eGEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSB4YS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIHhhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHhhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEZmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEZmfHwoRmY9e30pKTt2YXIgVUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IHpmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09RmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoa0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4genMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9cjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1yMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9enMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UoZTApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9enMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD16cy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PXpzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89enMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9enMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1GZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09RmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9VUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9VS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoTXgoS2woe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIEdLdD1FZShPZSgpLDEpLG5zdD1FZSh3bCgpLDEpO19zKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgaTA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShpMHx8KGkwPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1pMC5ESVZ8fHI9PWkwLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaTAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PWkwLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PWkwLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPWkwLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTtfcyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIga3FlPVd1KGUwKSxxS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6a3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIHFLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+cUt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIocjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1GZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249R3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtHS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSxScWU9MCxOcWU9V0t0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShScWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksSG49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9GZi5MT0c6RmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLE5xZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtIbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEhuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSG4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEhuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSG4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sSG4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7SG49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sSG4pO19zKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgV3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIocjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIgUkI9e307S3MoUkIse0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pmt4ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+UGd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5JZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+TnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT5SeGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT53cH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgV3Yoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgT0I9e307S3MoT0Ise0RJU0FNQklHVUFUT1I6KCk9PkIwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PktiZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+WmJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT50MmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PmpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PlhiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+SmJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT5XYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+RDB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+ZTJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+JGJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5RYmUsc2V0U3RyaW5nOigpPT5ZYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIFlLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLGpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxzc3QpLGxzdCk7dmFyIFFzZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLEtscj0uMyxabHI9WzEsNWU2XSxHc2U9S18oKS5leHBvbmVudChLbHIpLmRvbWFpbihabHIpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgWXNlPTIwO2Z1bmN0aW9uIEpscihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtKbHIoZSk/KGpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihZS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIGpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZTEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxZc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LFlzZSl9KX1mdW5jdGlvbiBYc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uICRzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBRbHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9UWxyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gV3NlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiBLc2UoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKFdzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2IjtXc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIix0bGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBlbGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIHRjcj0iX291dHB1dF9zaGFwZXMiLGVjcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPW9jcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1yY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9bmNyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBybGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gcmNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT10Y3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemUpKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1lY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgaWNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBvY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2goaWNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBubGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGlsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9WnNlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1ac2UodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGUxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmUxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9YWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IFFzZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gWnNlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBhY3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBKc2UoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gb2xlKGUsdCl7bGV0IHI9SnNlKGUpLG49SnNlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiBhbGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBzbGUoZSx0KXtsZXQgcj1sY3IoZSksbj1jY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIHNjcihlKXtsZXQgdD1yMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1yMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGxjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1zY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBjY3IoZSx0KXtyZXR1cm4gcjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fHVjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gcjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gdWNyKGUsdCl7aWYoIW9sZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFoY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGhjcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBsbGUobyx0LHIsbiksbGxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9c2xlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gbGxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGUxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLHBjcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmUxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmaGxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZTEoIkFkZGluZyBlZGdlcyIsNDAsKCk9PntkY3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBjbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gdWxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gcGNyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiBkY3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBobGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmaGxlKGgsdCxyLG4saSxvKX0pO2xldCBzPW1jcihhKSxjPShvP19jcjpnY3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiBtY3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24gZ2NyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBfY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0seWNyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPU9uKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9T24oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP0dzZTpPbigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe2RsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7ZmxlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtwbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmRWNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh5Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBmbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gcGxlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiB2Y3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzpkbGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIGRsZShlLHQpe2UuY29yZUdyYXBoJiZ2Y3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwocGxlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZmxlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIG1sZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHhjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gYmNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmbWxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIHdjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJm1sZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIFNjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gTWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIEVjcihlLHQpe3hjcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZiY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZ3Y3IoZSksdCYmU2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJk1jcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIGdsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciB4bGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6T24oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkNjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/QWNyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZQY3IoZSl9ZnVuY3Rpb24gVGNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8VGNyKHIpLEljcihyKX0pfWZ1bmN0aW9uIGJsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt4bGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZMY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09dmxlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT12bGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBBY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LGJsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUGNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsYmxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBJY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9Pl9sZSh1KSksWmUuZWFjaChyLHU9Pl9sZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9T24oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPU9uKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIF9sZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24geWxlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIExjcihlKXtsZXQgdD15bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj15bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gdmxlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXZlLGtjcj0zMjAsUmNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gU2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIE1sZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLWtjcixmPXUudG9wK3UuaGVpZ2h0LVJjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBFbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIFRsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIENsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24gQWxlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIHdsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIE5jcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBEY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1OY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9d2xlKGQubWluLGspLEI9d2xlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFBsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtEY3IodGhpcyxzLG8sbisrKX0pfXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKHFufHwocW49e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBPY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1PY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIEZjcj0iXHhENyIsSWxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxCY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrZWxlK2Uud31mdW5jdGlvbiBSbGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7VmNyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1VjcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oRmNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIExsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBrbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke0lsZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtJbGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5CY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBIY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1rbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9a2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBWY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gSGNyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBVY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO3psZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTt6bGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9SGxlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJkdjcihjLG8sciksT2xlKGMsbyxyKSxxY3IoYSxvLHIpO2xldCB1PVljcihhLG8scik7T2xlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLFhjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHFjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIEdjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLEFsZShuLHQpfWZ1bmN0aW9uIE9sZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixGbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBGbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiBXY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gYWxlKFdjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gWWNyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9amNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gQmxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIEJsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PUtzZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gamNyKGUpe3JldHVybiAkbHR8fCgkbHQ9T24oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtQbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBIbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFZsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gWGNyKGUsdCl7bGV0IHI9UGwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtDbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksRGxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxEbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Yc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIHFuLk5PTkU6Y2FzZSBxbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PXFuLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIHFuLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgcW4uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgcW4uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBVbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPXFsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9R2xlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD1LY3IodCxzKTtaY3IoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBxbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQocWxlKG8sdCkpfSkscn1mdW5jdGlvbiBHbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPUdsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmJGNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiAkY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIEtjcihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIFpjcihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiB6bGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyh0dXIoYSxvKSxRY3IoYSxvKSk6V2xlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitKY3Ioby5hbm5vdGF0aW9uVHlwZSkrIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtydXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZldXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIEpjcihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIFFjcihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9SGxlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiBXbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gV2xlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBCbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBldXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sRmxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIHJ1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLFJsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gRWxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgbnVyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8bnVyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBZbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7TWxlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksTEgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtNSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtlY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxUbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209ZVIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksbVAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsU2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O1BsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTttUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO21QLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1VsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9WWxlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKHJsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxjbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOmljdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjppY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPW5QKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7YkgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9ZlB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PSRzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj1nbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgb2N0PXt9O0tzKG9jdCx7R3JhcGhJY29uVHlwZTooKT0+bjF9KTt2YXIgbjE7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobjF8fChuMT17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbjEuU0VSSUVTOnJldHVybiBWbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBuMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXFuLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/a0goaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P3RjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PW9jdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmTEgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZrSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksdWxlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gZ0godCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLGlQKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksb1ApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09dGxlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpZbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6amx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixRbHQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIseUgodCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PUlIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gSmx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBvdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1vdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PXFuLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1xbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PXFuLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIGpsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgZ1A9RWUoT2UoKSwxKTt2YXIgWGxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7WGxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBsY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLHNjdD1be3JlZ2V4OmxjdH1dLCRsZT1bXSxhdXI9bmV3IFNldChbcW4uQ09NUFVURV9USU1FLHFuLk1FTU9SWV0pLFBuPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXFuLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1xbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1nUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPWdQLnNvbWUoc2N0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1nUC5zb21lKCRsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PnNjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9emx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGxjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gJGxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiBhdXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5zY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj16bHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChsY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PXFuLk1FTU9SWT8oaT1OZChpLGlQKSxvPU5kKG8saVApKTpyPT09cW4uQ09NUFVURV9USU1FJiYoaT1OZChpLG9QKSxvPU5kKG8sb1ApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9cW4uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtQbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIHN1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIEtsZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBabGUoZSx0KXtyZXR1cm4ganNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6S2xlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2Z1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIEpsZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgS2xlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pmh1cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gbHVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBjdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LHV1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gaHVyKGUpe3JldHVybiBRbGUoZSxjdXIpfWZ1bmN0aW9uIGZ1cihlKXtyZXR1cm4gUWxlKGUsdXVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gUWxlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1zdXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gbHVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBlY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIEpsZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gaWxlKGMsbmxlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7amxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7WmxlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBlY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIHJjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhyY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKHJjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIGR1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiBtdXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIG5jZShlKXtsZXQgdD1lLm1hcChkdXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczptdXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW5jZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgcGNlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciBjcz17fTtLcyhjcyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT54MCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PkV1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5GZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PnNjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+YWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9PmhjZSxpc051bGxPclVuZGVmaW5lZDooKT0+d3VyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+bGNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+aWNlLG51bU1ldHJpY3M6KCk9Pm9jZSxudW1WaXNpYmxlQ29sdW1uczooKT0+eXVyLG51bVZpc2libGVIUGFyYW1zOigpPT5jY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PnVjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmZjZSxwcmV0dHlQcmludDooKT0+YjAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+dnVyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pnh1cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5NdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+U3VyLHJvdGF0ZVN0cjooKT0+YnVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+X3VyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBGZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gaWNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIG9jZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGljZShlKStvY2UoZSl9ZnVuY3Rpb24gYWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBzY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gbGNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiB4MChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9zY2UoZSx0LHIpOmxjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBhYSh0LG49PngwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIF91cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEZkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gdWNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB5dXIoZSl7cmV0dXJuIGNjZShlKSt1Y2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBhYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gdnVyKGUsdCl7cmV0dXJuIGIwKGFjZShlLHQpKX1mdW5jdGlvbiB4dXIoZSx0KXtyZXR1cm4gYjAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/aGNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09PXZvaWQgMD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBmY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gYnVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIHd1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBTdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBNdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBmY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBFdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIFFuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpBcnJheSgpLG1ldHJpY0NvbHVtbnM6QXJyYXkoKX0sY29sdW1uc1Zpc2liaWxpdHk6QXJyYXkoKSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpBcnJheSgpLG1ldHJpY0luZm9zOkFycmF5KCl9fSx0aGlzLnNlc3Npb25Hcm91cHM9W10sdGhpcy5kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcz0hMSx0aGlzLmRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zPSExLHRoaXMuX3N0YXR1c2VzPVt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX0ZBSUxVUkUiLGRpc3BsYXlOYW1lOiJGYWlsdXJlIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19SVU5OSU5HIixkaXNwbGF5TmFtZToiUnVubmluZyIsYWxsb3dlZDohMH1dLHRoaXMuX2dldEV4cGVyaW1lbnRSZXNvbHZlZD1uZXcgUHJvbWlzZSh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9wYWdlU2l6ZUlucHV0PXt2YWx1ZToiMTAwIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlTnVtYmVySW5wdXQ9e3ZhbHVlOiIxIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlQ291bnRTdHI9Ij8iLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdSx0aGlzLl9wcmV0dHlQcmludD1iMH1yZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfV9jc3ZVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwiY3N2Iil9X2pzb25VcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwianNvbiIpfV9sYXRleFVybCh0LHIpe3JldHVybiB0aGlzLl9kb3dubG9hZERhdGFVcmwodCxyLCJsYXRleCIpfV9kb3dubG9hZERhdGFVcmwodCxyLG4pe2xldCBpPXIuY29sdW1uc1Zpc2liaWxpdHk7cmV0dXJuIHRoaXMuYmFja2VuZC5nZXREb3dubG9hZFVybChuLHQsaSl9X2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzKCl7bGV0IHQ9Y3M7aWYodC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHx0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpKXJldHVybjtsZXQgcj17ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX07dGhpcy5iYWNrZW5kLmdldEV4cGVyaW1lbnQocikudGhlbihuPT57cGNlLmlzRXF1YWwobix0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsbiksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KS5maW5hbGx5KCgpPT57dGhpcy5fY29tcHV0ZURhdGFGb3VuZCgpfSl9X2NvbXB1dGVEYXRhRm91bmQoKXtsZXQgdD1Cb29sZWFuKHRoaXMuX2V4cGVyaW1lbnQmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MubGVuZ3RoPjAmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MubGVuZ3RoPjApO3RoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdCksdGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zIiwhdCl9X2NvbXB1dGVIUGFyYW1zKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixkaXNwbGF5ZWQ6aTw1LGZpbHRlcjp7fX07by5pbmZvLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpPyhvLmZpbHRlci5kb21haW5EaXNjcmV0ZT1bXSxvLmluZm8uZG9tYWluRGlzY3JldGUuZm9yRWFjaChhPT57by5maWx0ZXIuZG9tYWluRGlzY3JldGUucHVzaCh7dmFsdWU6YSxjaGVja2VkOiEwfSl9KSk6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0JPT0wiP28uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XTpvLmluZm8udHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCI/by5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX1NUUklORyI/by5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsby5pbmZvLnR5cGUpLHQucHVzaChvKX0pLHRoaXMuc2V0KCJfaHBhcmFtcyIsdCl9X2NvbXB1dGVNZXRyaWNzKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6aTw1fTt0LnB1c2gobyl9KSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOltdLG1ldHJpY0NvbHVtbnM6W119OntocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcCh0PT4oe21ldHJpY0luZm86dC5pbmZvfSkpfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKT0+e3RoaXMuY29uZmlndXJhdGlvbj17c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9fSl9X2NvbXB1dGVDb2x1bW5zVmlzaWJpbGl0eSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz9bXTp0aGlzLl9ocGFyYW1zLm1hcCh0PT50LmRpc3BsYXllZCkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKHQ9PnQuZGlzcGxheWVkKSl9X2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl7aWYoIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzKXJldHVybntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX07bGV0IHQ9dGhpcy5faHBhcmFtcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pLHI9dGhpcy5fbWV0cmljcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pO3JldHVybntocGFyYW1JbmZvczp0LG1ldHJpY0luZm9zOnJ9fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX1fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCl7aWYoISghdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOnQsY2FuY2VsbGVkOnJ9KT0+e2lmKCFyKXtpZih0LnRvdGFsU2l6ZT49MCl7bGV0IG49K3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWU7dGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvbikpKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix0LnRvdGFsU2l6ZSl9ZWxzZSB0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsIj8iKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIiwiVW5rbm93biIpO3BjdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpfX0pKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYodCE9PW51bGwpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtsZXQgdD10aGlzLHI9ITA7ZnVuY3Rpb24gbihoKXtyZXR1cm4gaC5taW4udmFsdWUhPT0iInx8aC5tYXgudmFsdWUhPT0iIn1mdW5jdGlvbiBpKGgpe2xldCBmPXQuZ2V0KGgrIi5taW4udmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD1mPT09IiI/Ii1JbmZpbml0eSI6K2YsZD1pc05hTihwKTt0LnNldChoKyIubWluLmludmFsaWQiLGQpLHI9ciYmIWQ7bGV0IGc9dC5nZXQoaCsiLm1heC52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGchPT12b2lkIDApO2xldCBfPWc9PT0iIj8iSW5maW5pdHkiOitnLHk9aXNOYU4oXyk7cmV0dXJuIHQuc2V0KGgrIi5tYXguaW52YWxpZCIseSkscj1yJiYheSxkfHx5P251bGw6e21pblZhbHVlOnAsbWF4VmFsdWU6X319ZnVuY3Rpb24gbyhoKXtsZXQgZj10LmdldChoKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD0rZixkPU51bWJlci5pc0ludGVnZXIocCkmJnA+MDtyZXR1cm4gdC5zZXQoaCsiLmludmFsaWQiLCFkKSxyPXImJmQsZD9wOm51bGx9bGV0IGE9dGhpcy5fc3RhdHVzZXMuZmlsdGVyKGg9PmguYWxsb3dlZCkubWFwKGg9PmgudmFsdWUpLHM9W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e2hwYXJhbTpoLmluZm8ubmFtZX07aC5maWx0ZXIuZG9tYWluRGlzY3JldGU/aC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZXZlcnkoZz0+Zy5jaGVja2VkKXx8KHAuZmlsdGVyRGlzY3JldGU9W10saC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaChnPT57Zy5jaGVja2VkJiZwLmZpbHRlckRpc2NyZXRlLnB1c2goZy52YWx1ZSl9KSk6aC5maWx0ZXIuaW50ZXJ2YWw/bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9ocGFyYW1zLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKTpoLmZpbHRlci5yZWdleHAmJihwLmZpbHRlclJlZ2V4cD1oLmZpbHRlci5yZWdleHApLHMucHVzaChwKX0pLHRoaXMuX21ldHJpY3MuZm9yRWFjaCgoaCxmKT0+e2xldCBwPXttZXRyaWM6aC5pbmZvLm5hbWV9O24oaC5maWx0ZXIuaW50ZXJ2YWwpJiYocC5maWx0ZXJJbnRlcnZhbD1pKCJfbWV0cmljcy4iK2YrIi5maWx0ZXIuaW50ZXJ2YWwiKSkscy5wdXNoKHApfSksdGhpcy5fc29ydEJ5SW5kZXghPT12b2lkIDAmJnRoaXMuX3NvcnREaXJlY3Rpb24hPT12b2lkIDApe2lmKCEodGhpcy5fc29ydEJ5SW5kZXggaW4gcykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIk5vIGNvbHVtbiBpbiBjb2xQYXJhbXMgd2l0aCBpbmRleCBzb3J0QnlJbmRleDogJXMiLHRoaXMuX3NvcnRCeUluZGV4KSxudWxsO3NbdGhpcy5fc29ydEJ5SW5kZXhdLm9yZGVyPXRoaXMuX3NvcnREaXJlY3Rpb249PT0wPyJPUkRFUl9BU0MiOiJPUkRFUl9ERVNDIn1sZXQgbD1vKCJfcGFnZU51bWJlcklucHV0Iil8fDAsYz1vKCJfcGFnZVNpemVJbnB1dCIpfHwwO2lmKCFyKXJldHVybiBudWxsO2xldCB1PWMqKGwtMSk7cmV0dXJue2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsYWxsb3dlZFN0YXR1c2VzOmEsY29sUGFyYW1zOnMsc3RhcnRJbmRleDp1LHNsaWNlU2l6ZTpjfX1fbWV0cmljU29ydEJ5SW5kZXgodCl7cmV0dXJuIHQrdGhpcy5faHBhcmFtcy5sZW5ndGh9fTtRbi50ZW1wbGF0ZT1RYAogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gaHlwZXJwYXJhbWV0ZXJzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5IeXBlcnBhcmFtZXRlcnM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19ocGFyYW1zfX0iIGFzPSJocGFyYW0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHBhcmFtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgY2hlY2tlZD0ie3tocGFyYW0uZGlzcGxheWVkfX0iCiAgICAgICAgICAgICAgY2xhc3M9ImhwYXJhbS1jaGVja2JveCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPCEtLSBQcmVjaXNlbHkgb25lIG9mIHRoZSB0ZW1wbGF0ZXMgYmVsb3cgd2lsbCBiZSBzdGFtcGVkLi0tPgogICAgICAgICAgICA8IS0tIDEuIEEgbGlzdCBvZiBjaGVja2JveGVzIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e2l0ZW0uY2hlY2tlZH19IgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzY3JldGUtdmFsdWUtY2hlY2tib3giCiAgICAgICAgICAgICAgICAgIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBbW19wcmV0dHlQcmludChpdGVtLnZhbHVlKV1dCiAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMi4gQSBudW1lcmljIGludGVydmFsIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAzLiBBIHJlZ2V4cCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIucmVnZXhwXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9IlJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgIDwhLS0gVE9ETyhlcmV6KTogTWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgICAgICAgICAgIG1ldHJpY3M6CiAgICAgICAgICAgICAgICAgIDEuIEFkZCBhbiAnaXNvbGF0b3InIHJhZGlvLWJ1dHRvbiB0byBzZWxlY3QganVzdCBvbmUKICAgICAgICAgICAgICAgICAgbWV0cmljIGFuZAogICAgICAgICAgICAgICAgICBoaWRlIGFsbCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAyLiBBZGQgYSAndG9nZ2xlLWFsbCcgYnV0dG9uIHRoYXQgd2lsbCBoaWRlL3VuaGlkZQogICAgICAgICAgICAgICAgICAgIGFsbCB0aGUKICAgICAgICAgICAgICAgICAgbWV0cmljcy4KICAgICAgICAgICAgICAgICAgVXNlIHNpbWlsYXIgbG9naWMvYXBwZWFyYW5jZSB0byB0aGUgcnVuLXNlbGVjdG9yIG9mCiAgICAgICAgICAgICAgICAgIHNjYWxhcnMuLS0+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7bWV0cmljLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzdGF0dXMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7c3RhdHVzLmFsbG93ZWR9fSIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNvcnRpbmc8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IlNvcnQgYnkiCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IgogICAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21ldHJpY3NdXSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IkRpcmVjdGlvbiIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gcGFnaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgTnVtYmVyIG9mIG1hdGNoaW5nIHNlc3Npb24gZ3JvdXBzOiBbW190b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0cl1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJQYWdlICMiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlTnVtYmVySW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZU51bWJlcklucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9Ik1heCAjIG9mIHNlc3Npb24gZ3JvdXBzIHBlciBwYWdlOiIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VTaXplSW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZVNpemVJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGRvd25sb2FkIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlc3Npb25Hcm91cHNSZXF1ZXN0XV0iPgogICAgICAgICAgRG93bmxvYWQgZGF0YSBhcwogICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImNzdkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuY3N2IgogICAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9Impzb25MaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmpzb24iCiAgICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJsYXRleExpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUudGV4IgogICAgICAgICAgICAgIGhyZWY9IltbX2xhdGV4VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+TGFUZVg8L2EKICAgICAgICAgICAgPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFuLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc3RhdHVzZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUW4ucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9wYWdlU2l6ZUlucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFuLnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUW4ucHJvdG90eXBlLCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCk7RShbQnQoImJhY2tlbmQiLCJleHBlcmltZW50TmFtZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpO0UoW0J0KCJfaHBhcmFtcy4qIiwiX21ldHJpY3MuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCk7UW49RShbeXQoInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxRbik7dmFyIFVjdD1FZShPZSgpLDEpO3ZhciBtY3Q9dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5jdXN0b21FbGVtZW50cyE9bnVsbCYmd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2shPT12b2lkIDA7dmFyIGkxPShlLHQscj1udWxsKT0+e2Zvcig7dCE9PXI7KXtsZXQgbj10Lm5leHRTaWJsaW5nO2UucmVtb3ZlQ2hpbGQodCksdD1ufX07dmFyIFljPWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsZ2N0PWA8IS0tJHtZY30tLT5gLGRjZT1uZXcgUmVnRXhwKGAke1ljfXwke2djdH1gKSxkMz0iJGxpdCQiLG8xPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJ0cz1bXSx0aGlzLmVsZW1lbnQ9cjtsZXQgbj1bXSxpPVtdLG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLmNvbnRlbnQsMTMzLG51bGwsITEpLGE9MCxzPS0xLGw9MCx7c3RyaW5nczpjLHZhbHVlczp7bGVuZ3RoOnV9fT10O2Zvcig7bDx1Oyl7bGV0IGg9by5uZXh0Tm9kZSgpO2lmKGg9PT1udWxsKXtvLmN1cnJlbnROb2RlPWkucG9wKCk7Y29udGludWV9aWYocysrLGgubm9kZVR5cGU9PT0xKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7bGV0IGY9aC5hdHRyaWJ1dGVzLHtsZW5ndGg6cH09ZixkPTA7Zm9yKGxldCBnPTA7ZzxwO2crKyltY2UoZltnXS5uYW1lLGQzKSYmZCsrO2Zvcig7ZC0tID4wOyl7bGV0IGc9Y1tsXSxfPUhILmV4ZWMoZylbMl0seT1fLnRvTG93ZXJDYXNlKCkrZDMseD1oLmdldEF0dHJpYnV0ZSh5KTtoLnJlbW92ZUF0dHJpYnV0ZSh5KTtsZXQgYj14LnNwbGl0KGRjZSk7dGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJhdHRyaWJ1dGUiLGluZGV4OnMsbmFtZTpfLHN0cmluZ3M6Yn0pLGwrPWIubGVuZ3RoLTF9fWgudGFnTmFtZT09PSJURU1QTEFURSImJihpLnB1c2goaCksby5jdXJyZW50Tm9kZT1oLmNvbnRlbnQpfWVsc2UgaWYoaC5ub2RlVHlwZT09PTMpe2xldCBmPWguZGF0YTtpZihmLmluZGV4T2YoWWMpPj0wKXtsZXQgcD1oLnBhcmVudE5vZGUsZD1mLnNwbGl0KGRjZSksZz1kLmxlbmd0aC0xO2ZvcihsZXQgXz0wO188ZztfKyspe2xldCB5LHg9ZFtfXTtpZih4PT09IiIpeT1ZZigpO2Vsc2V7bGV0IGI9SEguZXhlYyh4KTtiIT09bnVsbCYmbWNlKGJbMl0sZDMpJiYoeD14LnNsaWNlKDAsYi5pbmRleCkrYlsxXStiWzJdLnNsaWNlKDAsLWQzLmxlbmd0aCkrYlszXSkseT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KX1wLmluc2VydEJlZm9yZSh5LGgpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KytzfSl9ZFtnXT09PSIiPyhwLmluc2VydEJlZm9yZShZZigpLGgpLG4ucHVzaChoKSk6aC5kYXRhPWRbZ10sbCs9Z319ZWxzZSBpZihoLm5vZGVUeXBlPT09OClpZihoLmRhdGE9PT1ZYyl7bGV0IGY9aC5wYXJlbnROb2RlOyhoLnByZXZpb3VzU2libGluZz09PW51bGx8fHM9PT1hKSYmKHMrKyxmLmluc2VydEJlZm9yZShZZigpLGgpKSxhPXMsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDpzfSksaC5uZXh0U2libGluZz09PW51bGw/aC5kYXRhPSIiOihuLnB1c2goaCkscy0tKSxsKyt9ZWxzZXtsZXQgZj0tMTtmb3IoOyhmPWguZGF0YS5pbmRleE9mKFljLGYrMSkpIT09LTE7KXRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6LTF9KSxsKyt9fWZvcihsZXQgaCBvZiBuKWgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKX19LG1jZT0oZSx0KT0+e2xldCByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiByPj0wJiZlLnNsaWNlKHIpPT09dH0sdlA9ZT0+ZS5pbmRleCE9PS0xLFlmPSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxISD0vKFsgXHgwOVx4MGFceDBjXHgwZF0pKFteXDAtXHgxRlx4N0YtXHg5RiAiJz49L10rKShbIFx4MDlceDBhXHgwY1x4MGRdKj1bIFx4MDlceDBhXHgwY1x4MGRdKig/OlteIFx4MDlceDBhXHgwY1x4MGQiJ2A8Pj1dKnwiW14iXSp8J1teJ10qKSkkLzt2YXIgX2N0PTEzMztmdW5jdGlvbiB5Y3QoZSx0KXtsZXR7ZWxlbWVudDp7Y29udGVudDpyfSxwYXJ0czpufT1lLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLF9jdCxudWxsLCExKSxvPXhQKG4pLGE9bltvXSxzPS0xLGw9MCxjPVtdLHU9bnVsbDtmb3IoO2kubmV4dE5vZGUoKTspe3MrKztsZXQgaD1pLmN1cnJlbnROb2RlO2ZvcihoLnByZXZpb3VzU2libGluZz09PXUmJih1PW51bGwpLHQuaGFzKGgpJiYoYy5wdXNoKGgpLHU9PT1udWxsJiYodT1oKSksdSE9PW51bGwmJmwrKzthIT09dm9pZCAwJiZhLmluZGV4PT09czspYS5pbmRleD11IT09bnVsbD8tMTphLmluZGV4LWwsbz14UChuLG8pLGE9bltvXX1jLmZvckVhY2goaD0+aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpKX12YXIgVHVyPWU9PntsZXQgdD1lLm5vZGVUeXBlPT09MTE/MDoxLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLF9jdCxudWxsLCExKTtmb3IoO3IubmV4dE5vZGUoKTspdCsrO3JldHVybiB0fSx4UD0oZSx0PS0xKT0+e2ZvcihsZXQgcj10KzE7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYodlAobikpcmV0dXJuIHJ9cmV0dXJuLTF9O2Z1bmN0aW9uIGdjZShlLHQscj1udWxsKXtsZXR7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT1lO2lmKHI9PW51bGwpe24uYXBwZW5kQ2hpbGQodCk7cmV0dXJufWxldCBvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobixfY3QsbnVsbCwhMSksYT14UChpKSxzPTAsbD0tMTtmb3IoO28ubmV4dE5vZGUoKTspZm9yKGwrKyxvLmN1cnJlbnROb2RlPT09ciYmKHM9VHVyKHQpLHIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxyKSk7YSE9PS0xJiZpW2FdLmluZGV4PT09bDspe2lmKHM+MCl7Zm9yKDthIT09LTE7KWlbYV0uaW5kZXgrPXMsYT14UChpLGEpO3JldHVybn1hPXhQKGksYSl9fXZhciBDdXI9bmV3IFdlYWtNYXA7dmFyIGExPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iJiZDdXIuaGFzKGUpO3ZhciBMbD17fSxWSD17fTt2YXIgdzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX19wYXJ0cz1bXSx0aGlzLnRlbXBsYXRlPXQsdGhpcy5wcm9jZXNzb3I9cix0aGlzLm9wdGlvbnM9bn11cGRhdGUodCl7bGV0IHI9MDtmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uc2V0VmFsdWUodFtyXSkscisrO2ZvcihsZXQgbiBvZiB0aGlzLl9fcGFydHMpbiE9PXZvaWQgMCYmbi5jb21taXQoKX1fY2xvbmUoKXtsZXQgdD1tY3Q/dGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQuY2xvbmVOb2RlKCEwKTpkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LCEwKSxyPVtdLG49dGhpcy50ZW1wbGF0ZS5wYXJ0cyxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSksbz0wLGE9MCxzLGw9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspe2lmKHM9bltvXSwhdlAocykpe3RoaXMuX19wYXJ0cy5wdXNoKHZvaWQgMCksbysrO2NvbnRpbnVlfWZvcig7YTxzLmluZGV4OylhKyssbC5ub2RlTmFtZT09PSJURU1QTEFURSImJihyLnB1c2gobCksaS5jdXJyZW50Tm9kZT1sLmNvbnRlbnQpLChsPWkubmV4dE5vZGUoKSk9PT1udWxsJiYoaS5jdXJyZW50Tm9kZT1yLnBvcCgpLGw9aS5uZXh0Tm9kZSgpKTtpZihzLnR5cGU9PT0ibm9kZSIpe2xldCBjPXRoaXMucHJvY2Vzc29yLmhhbmRsZVRleHRFeHByZXNzaW9uKHRoaXMub3B0aW9ucyk7Yy5pbnNlcnRBZnRlck5vZGUobC5wcmV2aW91c1NpYmxpbmcpLHRoaXMuX19wYXJ0cy5wdXNoKGMpfWVsc2UgdGhpcy5fX3BhcnRzLnB1c2goLi4udGhpcy5wcm9jZXNzb3IuaGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnMobCxzLm5hbWUscy5zdHJpbmdzLHRoaXMub3B0aW9ucykpO28rK31yZXR1cm4gbWN0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fTt2YXIgX2NlPXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDplPT5lfSksUHVyPWAgJHtZY30gYCxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1yLHRoaXMudHlwZT1uLHRoaXMucHJvY2Vzc29yPWl9Z2V0SFRNTCgpe2xldCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMSxyPSIiLG49ITE7Zm9yKGxldCBpPTA7aTx0O2krKyl7bGV0IG89dGhpcy5zdHJpbmdzW2ldLGE9by5sYXN0SW5kZXhPZigiPCEtLSIpO249KGE+LTF8fG4pJiZvLmluZGV4T2YoIi0tPiIsYSsxKT09PS0xO2xldCBzPUhILmV4ZWMobyk7cz09PW51bGw/cis9bysobj9QdXI6Z2N0KTpyKz1vLnN1YnN0cigwLHMuaW5kZXgpK3NbMV0rc1syXStkMytzWzNdK1ljfXJldHVybiByKz10aGlzLnN0cmluZ3NbdF0scn1nZXRUZW1wbGF0ZUVsZW1lbnQoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLHI9dGhpcy5nZXRIVE1MKCk7cmV0dXJuIF9jZSE9PXZvaWQgMCYmKHI9X2NlLmNyZWF0ZUhUTUwocikpLHQuaW5uZXJIVE1MPXIsdH19O3ZhciBHSD1lPT5lPT09bnVsbHx8ISh0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSxVSD1lPT5BcnJheS5pc0FycmF5KGUpfHwhIShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLG0zPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmRpcnR5PSEwLHRoaXMuZWxlbWVudD10LHRoaXMubmFtZT1yLHRoaXMuc3RyaW5ncz1uLHRoaXMucGFydHM9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aC0xO2krKyl0aGlzLnBhcnRzW2ldPXRoaXMuX2NyZWF0ZVBhcnQoKX1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgYlAodGhpcyl9X2dldFZhbHVlKCl7bGV0IHQ9dGhpcy5zdHJpbmdzLHI9dC5sZW5ndGgtMSxuPXRoaXMucGFydHM7aWYocj09PTEmJnRbMF09PT0iIiYmdFsxXT09PSIiKXtsZXQgbz1uWzBdLnZhbHVlO2lmKHR5cGVvZiBvPT0ic3ltYm9sIilyZXR1cm4gU3RyaW5nKG8pO2lmKHR5cGVvZiBvPT0ic3RyaW5nInx8IVVIKG8pKXJldHVybiBvfWxldCBpPSIiO2ZvcihsZXQgbz0wO288cjtvKyspe2krPXRbb107bGV0IGE9bltvXTtpZihhIT09dm9pZCAwKXtsZXQgcz1hLnZhbHVlO2lmKEdIKHMpfHwhVUgocykpaSs9dHlwZW9mIHM9PSJzdHJpbmciP3M6U3RyaW5nKHMpO2Vsc2UgZm9yKGxldCBsIG9mIHMpaSs9dHlwZW9mIGw9PSJzdHJpbmciP2w6U3RyaW5nKGwpfX1yZXR1cm4gaSs9dFtyXSxpfWNvbW1pdCgpe3RoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHRoaXMuX2dldFZhbHVlKCkpKX19LGJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuY29tbWl0dGVyPXR9c2V0VmFsdWUodCl7dCE9PUxsJiYoIUdIKHQpfHx0IT09dGhpcy52YWx1ZSkmJih0aGlzLnZhbHVlPXQsYTEodCl8fCh0aGlzLmNvbW1pdHRlci5kaXJ0eT0hMCkpfWNvbW1pdCgpe2Zvcig7YTEodGhpcy52YWx1ZSk7KXtsZXQgdD10aGlzLnZhbHVlO3RoaXMudmFsdWU9TGwsdCh0aGlzKX10aGlzLnZhbHVlIT09TGwmJnRoaXMuY29tbWl0dGVyLmNvbW1pdCgpfX0sQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsdGhpcy5vcHRpb25zPXR9YXBwZW5kSW50byh0KXt0aGlzLnN0YXJ0Tm9kZT10LmFwcGVuZENoaWxkKFlmKCkpLHRoaXMuZW5kTm9kZT10LmFwcGVuZENoaWxkKFlmKCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdC5fX2luc2VydCh0aGlzLmVuZE5vZGU9WWYoKSl9aW5zZXJ0QWZ0ZXJQYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGU9PT1udWxsKXJldHVybjtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IHI9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLHIodGhpcyl9bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0IT09TGwmJihHSCh0KT90IT09dGhpcy52YWx1ZSYmdGhpcy5fX2NvbW1pdFRleHQodCk6dCBpbnN0YW5jZW9mIFMwP3RoaXMuX19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KTp0IGluc3RhbmNlb2YgTm9kZT90aGlzLl9fY29tbWl0Tm9kZSh0KTpVSCh0KT90aGlzLl9fY29tbWl0SXRlcmFibGUodCk6dD09PVZIPyh0aGlzLnZhbHVlPVZILHRoaXMuY2xlYXIoKSk6dGhpcy5fX2NvbW1pdFRleHQodCkpfV9faW5zZXJ0KHQpe3RoaXMuZW5kTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMuZW5kTm9kZSl9X19jb21taXROb2RlKHQpe3RoaXMudmFsdWUhPT10JiYodGhpcy5jbGVhcigpLHRoaXMuX19pbnNlcnQodCksdGhpcy52YWx1ZT10KX1fX2NvbW1pdFRleHQodCl7bGV0IHI9dGhpcy5zdGFydE5vZGUubmV4dFNpYmxpbmc7dD10PT1udWxsPyIiOnQ7bGV0IG49dHlwZW9mIHQ9PSJzdHJpbmciP3Q6U3RyaW5nKHQpO3I9PT10aGlzLmVuZE5vZGUucHJldmlvdXNTaWJsaW5nJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGE9bjp0aGlzLl9fY29tbWl0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksdGhpcy52YWx1ZT10fV9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCl7bGV0IHI9dGhpcy5vcHRpb25zLnRlbXBsYXRlRmFjdG9yeSh0KTtpZih0aGlzLnZhbHVlIGluc3RhbmNlb2YgdzAmJnRoaXMudmFsdWUudGVtcGxhdGU9PT1yKXRoaXMudmFsdWUudXBkYXRlKHQudmFsdWVzKTtlbHNle2xldCBuPW5ldyB3MChyLHQucHJvY2Vzc29yLHRoaXMub3B0aW9ucyksaT1uLl9jbG9uZSgpO24udXBkYXRlKHQudmFsdWVzKSx0aGlzLl9fY29tbWl0Tm9kZShpKSx0aGlzLnZhbHVlPW59fV9fY29tbWl0SXRlcmFibGUodCl7QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKXx8KHRoaXMudmFsdWU9W10sdGhpcy5jbGVhcigpKTtsZXQgcj10aGlzLnZhbHVlLG49MCxpO2ZvcihsZXQgbyBvZiB0KWk9cltuXSxpPT09dm9pZCAwJiYoaT1uZXcgQmQodGhpcy5vcHRpb25zKSxyLnB1c2goaSksbj09PTA/aS5hcHBlbmRJbnRvUGFydCh0aGlzKTppLmluc2VydEFmdGVyUGFydChyW24tMV0pKSxpLnNldFZhbHVlKG8pLGkuY29tbWl0KCksbisrO248ci5sZW5ndGgmJihyLmxlbmd0aD1uLHRoaXMuY2xlYXIoaSYmaS5lbmROb2RlKSl9Y2xlYXIodD10aGlzLnN0YXJ0Tm9kZSl7aTEodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fSx3UD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsbi5sZW5ndGghPT0yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIil0aHJvdyBuZXcgRXJyb3IoIkJvb2xlYW4gYXR0cmlidXRlcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIGV4cHJlc3Npb24iKTt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bn1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9ISF0aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMudmFsdWUhPT10JiYodD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwiIik6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpLHRoaXMudmFsdWU9dCksdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH19LFNQPWNsYXNzIGV4dGVuZHMgbTN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscixuKSx0aGlzLnNpbmdsZT1uLmxlbmd0aD09PTImJm5bMF09PT0iIiYmblsxXT09PSIifV9jcmVhdGVQYXJ0KCl7cmV0dXJuIG5ldyBxSCh0aGlzKX1fZ2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zaW5nbGU/dGhpcy5wYXJ0c1swXS52YWx1ZTpzdXBlci5fZ2V0VmFsdWUoKX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT10aGlzLl9nZXRWYWx1ZSgpKX19LHFIPWNsYXNzIGV4dGVuZHMgYlB7fSx5Y2U9ITE7KCgpPT57dHJ5e2xldCBlPXtnZXQgY2FwdHVyZSgpe3JldHVybiB5Y2U9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKX1jYXRjaChlKXt9fSkoKTt2YXIgTVA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMuZWxlbWVudD10LHRoaXMuZXZlbnROYW1lPXIsdGhpcy5ldmVudENvbnRleHQ9bix0aGlzLl9fYm91bmRIYW5kbGVFdmVudD1pPT50aGlzLmhhbmRsZUV2ZW50KGkpfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IG89dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLG8odGhpcyl9aWYodGhpcy5fX3BlbmRpbmdWYWx1ZT09PUxsKXJldHVybjtsZXQgdD10aGlzLl9fcGVuZGluZ1ZhbHVlLHI9dGhpcy52YWx1ZSxuPXQ9PW51bGx8fHIhPW51bGwmJih0LmNhcHR1cmUhPT1yLmNhcHR1cmV8fHQub25jZSE9PXIub25jZXx8dC5wYXNzaXZlIT09ci5wYXNzaXZlKSxpPXQhPW51bGwmJihyPT1udWxsfHxuKTtuJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucyksaSYmKHRoaXMuX19vcHRpb25zPUl1cih0KSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucykpLHRoaXMudmFsdWU9dCx0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsfWhhbmRsZUV2ZW50KHQpe3R5cGVvZiB0aGlzLnZhbHVlPT0iZnVuY3Rpb24iP3RoaXMudmFsdWUuY2FsbCh0aGlzLmV2ZW50Q29udGV4dHx8dGhpcy5lbGVtZW50LHQpOnRoaXMudmFsdWUuaGFuZGxlRXZlbnQodCl9fSxJdXI9ZT0+ZSYmKHljZT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmUsb25jZTplLm9uY2V9OmUuY2FwdHVyZSk7ZnVuY3Rpb24gdmN0KGUpe2xldCB0PXMxLmdldChlLnR5cGUpO3Q9PT12b2lkIDAmJih0PXtzdHJpbmdzQXJyYXk6bmV3IFdlYWtNYXAsa2V5U3RyaW5nOm5ldyBNYXB9LHMxLnNldChlLnR5cGUsdCkpO2xldCByPXQuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49ZS5zdHJpbmdzLmpvaW4oWWMpO3JldHVybiByPXQua2V5U3RyaW5nLmdldChuKSxyPT09dm9pZCAwJiYocj1uZXcgbzEoZSxlLmdldFRlbXBsYXRlRWxlbWVudCgpKSx0LmtleVN0cmluZy5zZXQobixyKSksdC5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfXZhciBzMT1uZXcgTWFwO3ZhciBNMD1uZXcgV2Vha01hcCx4Y3Q9KGUsdCxyKT0+e2xldCBuPU0wLmdldCh0KTtuPT09dm9pZCAwJiYoaTEodCx0LmZpcnN0Q2hpbGQpLE0wLnNldCh0LG49bmV3IEJkKE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTp2Y3R9LHIpKSksbi5hcHBlbmRJbnRvKHQpKSxuLnNldFZhbHVlKGUpLG4uY29tbWl0KCl9O3ZhciBXSD1jbGFzc3toYW5kbGVBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LHIsbixpKXtsZXQgbz1yWzBdO3JldHVybiBvPT09Ii4iP25ldyBTUCh0LHIuc2xpY2UoMSksbikucGFydHM6bz09PSJAIj9bbmV3IE1QKHQsci5zbGljZSgxKSxpLmV2ZW50Q29udGV4dCldOm89PT0iPyI/W25ldyB3UCh0LHIuc2xpY2UoMSksbildOm5ldyBtMyh0LHIsbikucGFydHN9aGFuZGxlVGV4dEV4cHJlc3Npb24odCl7cmV0dXJuIG5ldyBCZCh0KX19LHZjZT1uZXcgV0g7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cubGl0SHRtbFZlcnNpb25zfHwod2luZG93LmxpdEh0bWxWZXJzaW9ucz1bXSkpLnB1c2goIjEuNC4xIik7dmFyIGJjZT0oZSx0KT0+YCR7ZX0tLSR7dH1gLFlIPSEwO3R5cGVvZiB3aW5kb3cuU2hhZHlDU1M9PSJ1bmRlZmluZWQiP1lIPSExOnR5cGVvZiB3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tPT0idW5kZWZpbmVkIiYmKGNvbnNvbGUud2FybigiSW5jb21wYXRpYmxlIFNoYWR5Q1NTIHZlcnNpb24gZGV0ZWN0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gYXQgbGVhc3QgQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzQDIuMC4yIGFuZCBAd2ViY29tcG9uZW50cy9zaGFkeWNzc0AxLjMuMS4iKSxZSD0hMSk7dmFyIFJ1cj1lPT50PT57bGV0IHI9YmNlKHQudHlwZSxlKSxuPXMxLmdldChyKTtuPT09dm9pZCAwJiYobj17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzMS5zZXQocixuKSk7bGV0IGk9bi5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgbz10LnN0cmluZ3Muam9pbihZYyk7aWYoaT1uLmtleVN0cmluZy5nZXQobyksaT09PXZvaWQgMCl7bGV0IGE9dC5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtZSCYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbShhLGUpLGk9bmV3IG8xKHQsYSksbi5rZXlTdHJpbmcuc2V0KG8saSl9cmV0dXJuIG4uc3RyaW5nc0FycmF5LnNldCh0LnN0cmluZ3MsaSksaX0sTnVyPVsiaHRtbCIsInN2ZyJdLER1cj1lPT57TnVyLmZvckVhY2godD0+e2xldCByPXMxLmdldChiY2UodCxlKSk7ciE9PXZvaWQgMCYmci5rZXlTdHJpbmcuZm9yRWFjaChuPT57bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6aX19PW4sbz1uZXcgU2V0O0FycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKS5mb3JFYWNoKGE9PntvLmFkZChhKX0pLHljdChuLG8pfSl9KX0sd2NlPW5ldyBTZXQsT3VyPShlLHQscik9Pnt3Y2UuYWRkKGUpO2xldCBuPXI/ci5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1pO2lmKG89PT0wKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7cmV0dXJufWxldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCBjPTA7YzxvO2MrKyl7bGV0IHU9aVtjXTt1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSksYS50ZXh0Q29udGVudCs9dS50ZXh0Q29udGVudH1EdXIoZSk7bGV0IHM9bi5jb250ZW50O3I/Z2NlKHIsYSxzLmZpcnN0Q2hpbGQpOnMuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKSx3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7bGV0IGw9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJmwhPT1udWxsKXQuaW5zZXJ0QmVmb3JlKGwuY2xvbmVOb2RlKCEwKSx0LmZpcnN0Q2hpbGQpO2Vsc2UgaWYocil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2xldCBjPW5ldyBTZXQ7Yy5hZGQoYSkseWN0KHIsYyl9fSxTY2U9KGUsdCxyKT0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCJ8fCFyLnNjb3BlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgc2NvcGVOYW1lYCBvcHRpb24gaXMgcmVxdWlyZWQuIik7bGV0IG49ci5zY29wZU5hbWUsaT1NMC5oYXModCksbz1ZSCYmdC5ub2RlVHlwZT09PTExJiYhIXQuaG9zdCxhPW8mJiF3Y2UuaGFzKG4pLHM9YT9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk6dDtpZih4Y3QoZSxzLE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTpSdXIobil9LHIpKSxhKXtsZXQgbD1NMC5nZXQocyk7TTAuZGVsZXRlKHMpO2xldCBjPWwudmFsdWUgaW5zdGFuY2VvZiB3MD9sLnZhbHVlLnRlbXBsYXRlOnZvaWQgMDtPdXIobixzLGMpLGkxKHQsdC5maXJzdENoaWxkKSx0LmFwcGVuZENoaWxkKHMpLE0wLnNldCh0LGwpfSFpJiZvJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHQuaG9zdCl9O3ZhciBNY2U7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KGUsdCk9PmU7dmFyIFRjdD17dG9BdHRyaWJ1dGUoZSx0KXtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnJldHVybiBlPyIiOm51bGw7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZSE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIGU9PT1udWxsP251bGw6TnVtYmVyKGUpO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIEpTT04ucGFyc2UoZSl9cmV0dXJuIGV9fSxFY2U9KGUsdCk9PnQhPT1lJiYodD09PXR8fGU9PT1lKSxiY3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6VGN0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpFY2V9LHdjdD0xLFNjdD0xPDwyLE1jdD0xPDwzLEVjdD0xPDw0LENjdD0iZmluYWxpemVkIixnMz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PntsZXQgaT10aGlzLl9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobixyKTtpIT09dm9pZCAwJiYodGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5zZXQoaSxuKSx0LnB1c2goaSkpfSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9jbGFzc1Byb3BlcnRpZXM7dCE9PXZvaWQgMCYmdC5mb3JFYWNoKChyLG4pPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KG4scikpfX1zdGF0aWMgY3JlYXRlUHJvcGVydHkodCxyPWJjdCl7aWYodGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldCh0LHIpLHIubm9BY2Nlc3Nvcnx8dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2xldCBuPXR5cGVvZiB0PT0ic3ltYm9sIj9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtpIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQscixuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbcl19LHNldChpKXtsZXQgbz10aGlzW3RdO3RoaXNbcl09aSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LG8sbil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMmJnRoaXMuX2NsYXNzUHJvcGVydGllcy5nZXQodCl8fGJjdH1zdGF0aWMgZmluYWxpemUoKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYodC5oYXNPd25Qcm9wZXJ0eShDY3QpfHx0LmZpbmFsaXplKCksdGhpc1tDY3RdPSEwLHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXA9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLHRoaXMpKSl7bGV0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocik6W11dO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxyKXtsZXQgbj1yLmF0dHJpYnV0ZTtyZXR1cm4gbj09PSExP3ZvaWQgMDp0eXBlb2Ygbj09InN0cmluZyI/bjp0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1zdGF0aWMgX3ZhbHVlSGFzQ2hhbmdlZCh0LHIsbj1FY2Upe3JldHVybiBuKHQscil9c3RhdGljIF9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZSh0LHIpe2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyfHxUY3Qsbz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmkuZnJvbUF0dHJpYnV0ZTtyZXR1cm4gbz9vKHQsbik6dH1zdGF0aWMgX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZSh0LHIpe2lmKHIucmVmbGVjdD09PXZvaWQgMClyZXR1cm47bGV0IG49ci50eXBlLGk9ci5jb252ZXJ0ZXI7cmV0dXJuKGkmJmkudG9BdHRyaWJ1dGV8fFRjdC50b0F0dHJpYnV0ZSkodCxuKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKHQ9PnRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dCksdGhpcy5fY2hhbmdlZFByb3BlcnRpZXM9bmV3IE1hcCx0aGlzLl9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwoKX1fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuY29uc3RydWN0b3IuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG49dGhpc1tyXTtkZWxldGUgdGhpc1tyXSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXN8fCh0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9bmV3IE1hcCksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzLnNldChyLG4pfX0pfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT50aGlzW3JdPXQpLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz12b2lkIDB9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLmVuYWJsZVVwZGF0aW5nKCl9ZW5hYmxlVXBkYXRpbmcoKXt0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyIT09dm9pZCAwJiYodGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcigpLHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dm9pZCAwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3IhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbil9X3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxyLG49YmN0KXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLG89aS5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQsbik7aWYobyE9PXZvaWQgMCl7bGV0IGE9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHIsbik7aWYoYT09PXZvaWQgMClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0LGE9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyk6dGhpcy5zZXRBdHRyaWJ1dGUobyxhKSx0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZSZ+TWN0fX1fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LHIpe2lmKHRoaXMuX3VwZGF0ZVN0YXRlJk1jdClyZXR1cm47bGV0IG49dGhpcy5jb25zdHJ1Y3RvcixpPW4uX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuZ2V0KHQpO2lmKGkhPT12b2lkIDApe2xldCBvPW4uZ2V0UHJvcGVydHlPcHRpb25zKGkpO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKHIsbyksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19cmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKXtsZXQgaT0hMDtpZih0IT09dm9pZCAwKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yO249bnx8by5nZXRQcm9wZXJ0eU9wdGlvbnModCksby5fdmFsdWVIYXNDaGFuZ2VkKHRoaXNbdF0scixuLmhhc0NoYW5nZWQpPyh0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5oYXModCl8fHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzLnNldCh0LHIpLG4ucmVmbGVjdD09PSEwJiYhKHRoaXMuX3VwZGF0ZVN0YXRlJkVjdCkmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz09PXZvaWQgMCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxyKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfV9lbnF1ZXVlVXBkYXRlKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxTY3Q7dHJ5e3lpZWxkIHRoaXMuX3VwZGF0ZVByb21pc2V9Y2F0Y2gocil7fWxldCB0PXRoaXMucGVyZm9ybVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiYoeWllbGQgdCksIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZX0pfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN0YXRlJlNjdH1nZXQgaGFzVXBkYXRlZCgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZ3Y3R9cGVyZm9ybVVwZGF0ZSgpe2lmKCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGUpcmV0dXJuO3RoaXMuX2luc3RhbmNlUHJvcGVydGllcyYmdGhpcy5fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKTtsZXQgdD0hMSxyPXRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/dGhpcy51cGRhdGUocik6dGhpcy5fbWFya1VwZGF0ZWQoKX1jYXRjaChuKXt0aHJvdyB0PSExLHRoaXMuX21hcmtVcGRhdGVkKCksbn10JiYodGhpcy5fdXBkYXRlU3RhdGUmd2N0fHwodGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8d2N0LHRoaXMuZmlyc3RVcGRhdGVkKHIpKSx0aGlzLnVwZGF0ZWQocikpfV9tYXJrVXBkYXRlZCgpe3RoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmflNjdH1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fZ2V0VXBkYXRlQ29tcGxldGUoKX1fZ2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2V9c2hvdWxkVXBkYXRlKHQpe3JldHVybiEwfXVwZGF0ZSh0KXt0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyE9PXZvaWQgMCYmdGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuc2l6ZT4wJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocixuKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShuLHRoaXNbbl0scikpLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPXZvaWQgMCksdGhpcy5fbWFya1VwZGF0ZWQoKX11cGRhdGVkKHQpe31maXJzdFVwZGF0ZWQodCl7fX07TWNlPUNjdDtnM1tNY2VdPSEwO3ZhciBUY2U9RWxlbWVudC5wcm90b3R5cGUsYmlpPVRjZS5tc01hdGNoZXNTZWxlY3Rvcnx8VGNlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2YXIgakg9d2luZG93LlNoYWRvd1Jvb3QmJih3aW5kb3cuU2hhZHlDU1M9PT12b2lkIDB8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsQWN0PVN5bWJvbCgpLGwxPWNsYXNze2NvbnN0cnVjdG9yKHQscil7aWYociE9PUFjdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdGhpcy5fc3R5bGVTaGVldD09PXZvaWQgMCYmKGpIPyh0aGlzLl9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHRoaXMuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSk6dGhpcy5fc3R5bGVTaGVldD1udWxsKSx0aGlzLl9zdHlsZVNoZWV0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19LFBjdD1lPT5uZXcgbDEoU3RyaW5nKGUpLEFjdCksenVyPWU9PntpZihlIGluc3RhbmNlb2YgbDEpcmV0dXJuIGUuY3NzVGV4dDtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogJHtlfS4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApfSxDaT0oZSwuLi50KT0+e2xldCByPXQucmVkdWNlKChuLGksbyk9Pm4renVyKGkpK2VbbysxXSxlWzBdKTtyZXR1cm4gbmV3IGwxKHIsQWN0KX07KHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTt2YXIgQ2NlPXt9LEVQPWNsYXNzIGV4dGVuZHMgZzN7c3RhdGljIGdldFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlc31zdGF0aWMgX2dldFVuaXF1ZVN0eWxlcygpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3N0eWxlcyIsdGhpcykpKXJldHVybjtsZXQgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2xldCByPShvLGEpPT5vLnJlZHVjZVJpZ2h0KChzLGwpPT5BcnJheS5pc0FycmF5KGwpP3IobCxzKToocy5hZGQobCkscyksYSksbj1yKHQsbmV3IFNldCksaT1bXTtuLmZvckVhY2gobz0+aS51bnNoaWZ0KG8pKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz10PT09dm9pZCAwP1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcChyPT57aWYociBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFqSCl7bGV0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5jc3NSdWxlcykucmVkdWNlKChpLG8pPT5pK28uY3NzVGV4dCwiIik7cmV0dXJuIFBjdChuKX1yZXR1cm4gcn0pfWluaXRpYWxpemUoKXtzdXBlci5pbml0aWFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0VW5pcXVlU3R5bGVzKCksdGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHdpbmRvdy5TaGFkb3dSb290JiZ0aGlzLnJlbmRlclJvb3QgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5hZG9wdFN0eWxlcygpfWNyZWF0ZVJlbmRlclJvb3QoKXtyZXR1cm4gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyl9YWRvcHRTdHlsZXMoKXtsZXQgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7dC5sZW5ndGghPT0wJiYod2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiYhd2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdz93aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKHI9PnIuY3NzVGV4dCksdGhpcy5sb2NhbE5hbWUpOmpIP3RoaXMucmVuZGVyUm9vdC5hZG9wdGVkU3R5bGVTaGVldHM9dC5tYXAocj0+ciBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/cjpyLnN0eWxlU2hlZXQpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzVXBkYXRlZCYmd2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpfXVwZGF0ZSh0KXtsZXQgcj10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxyIT09Q2NlJiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihyLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9bi5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChpKX0pKX1yZW5kZXIoKXtyZXR1cm4gQ2NlfX07RVAuZmluYWxpemVkPSEwO0VQLnJlbmRlcj1TY2U7RVAuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTt2YXIgQWNlPTAsSWN0PXt9LGpjPShlLHQscik9PntsZXQgbj1yJiZyLm1vZHVsZUlkfHxgY3VzdG9tLXN0eWxlLW1vZHVsZS0ke0FjZSsrfWA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dD9bdF06W10pLHQuZm9yRWFjaChhPT57aWYoIShhIGluc3RhbmNlb2YgbDEpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIUljdFthXSl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpO3MuaW5uZXJIVE1MPWAKICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8c3R5bGU+JHthLnRvU3RyaW5nKCl9PC9zdHlsZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICBgO2xldCBsPWBjdXN0b20tc3R5bGUtbW9kdWxlLSR7QWNlKyt9YDtzLnJlZ2lzdGVyKGwpLEljdFthXT1sfX0pO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZihlKXtsZXQgYT1jdXN0b21FbGVtZW50cy5nZXQoZSk7YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9fZmluYWxpemVkIikmJmNvbnNvbGUud2FybihgVGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gZm9yICIke2V9IgogICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC4KICAgICAgTWFrZSBzdXJlIHRvIGFkZCBjb21wb25lbnQgc3BlY2lmaWMgc3R5bGUgbW9kdWxlcyBiZWZvcmUKICAgICAgaW1wb3J0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGN1c3RvbSBlbGVtZW50LmApLGkuc2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiLGUpfWxldCBvPXImJnIuaW5jbHVkZXx8W107aS5pbm5lckhUTUw9YAogICAgPHRlbXBsYXRlPgogICAgICAke28ubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke2F9Pjwvc3R5bGU+YCl9CiAgICAgICR7dC5tYXAoYT0+YDxzdHlsZSBpbmNsdWRlPSR7SWN0W2FdfT48L3N0eWxlPmApfQogICAgPC90ZW1wbGF0ZT4KICBgLGkucmVnaXN0ZXIobil9O3ZhciBMY3Q9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixMY3QpO3ZhciBGdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjZmZmOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMyk7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zNyk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC40NCk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41KTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjU3KTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjY0KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNzcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuODQpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogI2ZmZjsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXNoYWRlLTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby1zaGFkZS0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby1zaGFkZS04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXNoYWRlKTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgMTAwJSwgNjElKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCA5MiUsIDUzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDgwJSwgNDIlKTsgLyogaHNsKDE0NCw4MiUsMzclKTsgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuNTUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC4xMik7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCAxMDAlLCAzMiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29udHJhc3QtY29sb3I6ICNmZmY7CiAgfQpgLFBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1BjZS5pbm5lckhUTUw9YDxzdHlsZT4ke0Z1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFBjZS5jb250ZW50KTt2YXIgQnVyPUNpYAogIFt0aGVtZX49J2RhcmsnXSB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6IGhzbCgyMTQsIDM1JSwgMjElKTsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDIxNCwgNjUlLCA4NSUsIDAuMDYpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgyMTQsIDY0JSwgODIlLCAwLjIzKTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDIxNCwgNjklLCA4NCUsIDAuMzIpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgyMTQsIDc4JSwgODglLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMjE0LCA4MiUsIDkwJSwgMC42KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgyMTQsIDkxJSwgOTQlLCAwLjgpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMjE0LCA5NiUsIDk2JSwgMC45KTsKICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDAlLCAwJSwgMC4wNyk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA0JSwgMiUsIDAuMTUpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDEyJSwgNiUsIDAuMzIpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgMTYlLCA4JSwgMC40MSk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDI0JSwgMTIlLCAwLjYpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgMjglLCAxMyUsIDAuNyk7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDMzJSwgMTMlLCAwLjkpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzMyUsIDEzJSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tdGludC0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tdGludC0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tdGludC00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tdGludC01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tdGludC03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tdGludC04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tdGludCk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgODYlLCA1NSUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA4NiUsIDU1JSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiBoc2woMjE0LCAxMDAlLCA3MCUpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgNjUlLCA0MiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC41KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCA4NSUsIDQ3JSk7CiAgfQoKICBodG1sIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgY29sb3I6IHZhcigtLWx1bW8taGVhZGVyLXRleHQtY29sb3IpOwogIH0KCiAgYSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgfQoKICBjb2RlLAogIHByZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICB9CmA7amMoIiIsQnVyLHttb2R1bGVJZDoibHVtby1jb2xvciJ9KTt2YXIgSHVyPUNpYAogIDpob3N0IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcikgIWltcG9ydGFudDsKICB9CmA7amMoIiIsSHVyLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTt2YXIgSWNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7SWNlLmlubmVySFRNTD1gCiAgPHN0eWxlPgogICAgQGZvbnQtZmFjZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnbHVtby1pY29ucyc7CiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoJ3dvZmYnKTsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgfQoKICAgIGh0bWwgewogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tY2VudGVyOiAiXFxlYTAxIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiOwogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tcmlnaHQ6ICJcXGVhMDMiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtZG93bjogIlxcZWEwNCI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXJpZ2h0OiAiXFxlYTA2IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXVwOiAiXFxlYTA3IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctbGVmdDogIlxcZWEwOSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1yaWdodDogIlxcZWEwYSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7CiAgICAgIC0tbHVtby1pY29ucy1iYXItY2hhcnQ6ICJcXGVhMGMiOwogICAgICAtLWx1bW8taWNvbnMtYmVsbDogIlxcZWEwZCI7CiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGVja21hcms6ICJcXGVhMGYiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1kb3duOiAiXFxlYTEwIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXJpZ2h0OiAiXFxlYTEyIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tdXA6ICJcXGVhMTMiOwogICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiOwogICAgICAtLWx1bW8taWNvbnMtY29nOiAiXFxlYTE1IjsKICAgICAgLS1sdW1vLWljb25zLWNyb3NzOiAiXFxlYTE2IjsKICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjsKICAgICAgLS1sdW1vLWljb25zLWRyb3Bkb3duOiAiXFxlYTE4IjsKICAgICAgLS1sdW1vLWljb25zLWVkaXQ6ICJcXGVhMTkiOwogICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiOwogICAgICAtLWx1bW8taWNvbnMtZXllOiAiXFxlYTFiIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZS1kaXNhYmxlZDogIlxcZWExYyI7CiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjsKICAgICAgLS1sdW1vLWljb25zLW1pbnVzOiAiXFxlYTFlIjsKICAgICAgLS1sdW1vLWljb25zLW9yZGVyZWQtbGlzdDogIlxcZWExZiI7CiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7CiAgICAgIC0tbHVtby1pY29ucy1waG90bzogIlxcZWEyMSI7CiAgICAgIC0tbHVtby1pY29ucy1wbGF5OiAiXFxlYTIyIjsKICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiOwogICAgICAtLWx1bW8taWNvbnMtcmVkbzogIlxcZWEyNCI7CiAgICAgIC0tbHVtby1pY29ucy1yZWxvYWQ6ICJcXGVhMjUiOwogICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjsKICAgICAgLS1sdW1vLWljb25zLXVuZG86ICJcXGVhMjciOwogICAgICAtLWx1bW8taWNvbnMtdW5vcmRlcmVkLWxpc3Q6ICJcXGVhMjgiOwogICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjsKICAgICAgLS1sdW1vLWljb25zLXVzZXI6ICJcXGVhMmEiOwogICAgfQogIDwvc3R5bGU+CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChJY2UuY29udGVudCk7dmFyIFZ1cj1DaWAKICA6aG9zdCB7CiAgICAtLWx1bW8tc2l6ZS14czogMS42MjVyZW07CiAgICAtLWx1bW8tc2l6ZS1zOiAxLjg3NXJlbTsKICAgIC0tbHVtby1zaXplLW06IDIuMjVyZW07CiAgICAtLWx1bW8tc2l6ZS1sOiAyLjc1cmVtOwogICAgLS1sdW1vLXNpemUteGw6IDMuNXJlbTsKCiAgICAvKiBJY29ucyAqLwogICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07CiAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pOwogIH0KYCxMY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtMY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtWdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChMY2UuY29udGVudCk7dmFyIFV1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsa2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7a2NlLmlubmVySFRNTD1gPHN0eWxlPiR7VXVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoa2NlLmNvbnRlbnQpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtczogMC4yNWVtOyAvKiBDaGVja2JveCwgYmFkZ2UsIGRhdGUtcGlja2VyIHllYXIgaW5kaWNhdG9yLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLW06IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cywgMC4yNWVtKTsgLyogQnV0dG9uLCB0ZXh0IGZpZWxkLCBtZW51IG92ZXJsYXksIGV0YyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtbDogMC41ZW07IC8qIERpYWxvZywgbm90aWZpY2F0aW9uLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzOiAwLjI1ZW07IC8qIERlcHJlY2F0ZWQgKi8KCiAgICAvKiBTaGFkb3cgKi8KICAgIC0tbHVtby1ib3gtc2hhZG93LXhzOiAwIDFweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXM6IDAgMnB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDNweCAxMnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1tOiAwIDJweCA2cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCA4cHggMjRweCAtNHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbDogMCAzcHggMThweCAtMnB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDEycHggNDhweCAtNnB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3cteGw6IDAgNHB4IDI0cHggLTNweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxOHB4IDY0cHggLThweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKCiAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi8KICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0OwogIH0KYCxSY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtSY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtxdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChSY2UuY29udGVudCk7dmFyIEd1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi8KICAgIC0tbHVtby1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7CgogICAgLyogRm9udCBzaXplcyAqLwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IDAuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhzOiAwLjgxMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXM6IDAuODc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTsKCiAgICAvKiBMaW5lIGhlaWdodHMgKi8KICAgIC0tbHVtby1saW5lLWhlaWdodC14czogMS4yNTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1zOiAxLjM3NTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1tOiAxLjYyNTsKICB9CmAsTmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7TmNlLmlubmVySFRNTD1gPHN0eWxlPiR7R3VyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTmNlLmNvbnRlbnQpO3ZhciBXdXI9Q2lgCiAgaHRtbCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqLwogIDpob3N0IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgc21hbGwsCiAgW3RoZW1lfj0nZm9udC1zaXplLXMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgfQoKICBbdGhlbWV+PSdmb250LXNpemUteHMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgfQoKICBoMSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgaDIgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoMyB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDQgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1sKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDUgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTsKICB9CgogIGg2IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KCiAgcCwKICBibG9ja3F1b3RlIHsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQoKICBhOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgaHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgaGVpZ2h0OiAxcHg7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiB2YXIoLS1sdW1vLXNwYWNlLXMpIGNhbGModmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pIC8gMik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CgogIGIsCiAgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogIGJsb2NrcXVvdGVbZGlyPSdydGwnXSB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KYDtqYygiIixXdXIse21vZHVsZUlkOiJsdW1vLXR5cG9ncmFwaHkifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO3ZhciBEY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0aGVtZTp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSkscj09PSJ0aGVtZSImJnRoaXMuX3NldFRoZW1lKGkpfX07dmFyIFhIPWU9PmNsYXNzIGV4dGVuZHMgRGNlKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0IHI9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5fdGVtcGxhdGU7biYmQXJyYXkuZnJvbShuLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbaW5jbHVkZV0iKSkuZm9yRWFjaChpPT57dGhpcy5faW5jbHVkZVN0eWxlKGkuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIikscil9KSx0aGlzLl9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil9c3RhdGljIF9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil7bGV0IGk9b3UucHJvdG90eXBlLm1vZHVsZXMsbz0hMSxhPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhpKS5zb3J0KChzLGwpPT57bGV0IGM9cy5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLHU9bC5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLGg9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLGY9aC5maWx0ZXIoZD0+cy5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjAscD1oLmZpbHRlcihkPT5sLmluZGV4T2YoZCk9PT0wKS5sZW5ndGg+MDtyZXR1cm4gYyE9PXU/Yz8tMToxOmYhPT1wP2Y/LTE6MTowfSkuZm9yRWFjaChzPT57aWYocyE9PWEpe2xldCBsPWlbc10uZ2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiKTtsJiZsLnNwbGl0KCIgIikuZm9yRWFjaChjPT57bmV3IFJlZ0V4cCgiXiIrYy5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobz0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocyxyKSl9KX19KSwhbyYmaVthXSYmdGhpcy5faW5jbHVkZVN0eWxlKGEscil9c3RhdGljIF9pbmNsdWRlU3R5bGUocixuKXtpZihuJiYhbi5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2luY2x1ZGU9IiR7cn0iXWApKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJpbmNsdWRlIixyKSxuLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSl9fX07dmFyIGtjdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntrY3Q9ITB9LHtjYXB0dXJlOiEwfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntrY3Q9ITF9LHtjYXB0dXJlOiEwfSk7dmFyIFl1cj1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fX19LE9jZT1lPT5jbGFzcyBleHRlbmRzIFl1cihlKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57ci5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyhyLnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOnIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCkhPT0tMSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX3NldEZvY3VzZWQoITApfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3NldEZvY3VzZWQoITEpKSxzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscj0+eyFyLmRlZmF1bHRQcmV2ZW50ZWQmJnIua2V5Q29kZT09PTkmJnIuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKT0+dGhpcy5faXNTaGlmdFRhYmJpbmc9ITEsMCkpfSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzQXR0cmlidXRlKCJmb2N1c2VkIikmJnRoaXMuX3NldEZvY3VzZWQoITEpfV9zZXRGb2N1c2VkKHIpe3I/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzZWQiLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXNlZCIpLHImJmtjdD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1cy1yaW5nIil9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB3aW5kb3cuY29uc29sZS53YXJuKGBQbGVhc2UgaW1wbGVtZW50IHRoZSAnZm9jdXNFbGVtZW50JyBwcm9wZXJ0eSBpbiA8JHt0aGlzLmxvY2FsTmFtZX0+YCksdGhpc31fZm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuX2lzU2hpZnRUYWJiaW5nfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Zm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1ibHVyKCl7IXRoaXMuZm9jdXNFbGVtZW50fHwodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHIpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXIscj8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih0eXBlb2YgdGhpcy5fcHJldmlvdXNUYWJJbmRleCE9InVuZGVmaW5lZCImJih0aGlzLnRhYmluZGV4PXRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIikpfV90YWJpbmRleENoYW5nZWQocil7ciE9PXZvaWQgMCYmKHRoaXMuZm9jdXNFbGVtZW50LnRhYkluZGV4PXIpLHRoaXMuZGlzYWJsZWQmJnRoaXMudGFiaW5kZXgmJih0aGlzLnRhYmluZGV4IT09LTEmJih0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMudGFiaW5kZXgpLHRoaXMudGFiaW5kZXg9cj12b2lkIDApfWNsaWNrKCl7dGhpcy5kaXNhYmxlZHx8c3VwZXIuY2xpY2soKX19O3ZhciBqdXI9L1wvXCpcKlxzK3ZhYWRpbi1kZXYtbW9kZTpzdGFydChbXHNcU10qKXZhYWRpbi1kZXYtbW9kZTplbmRccytcKlwqXC8vaSwkSD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIFh1cigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4hMH1yZXR1cm4gemNlKGUpfWZ1bmN0aW9uICR1cigpe3RyeXtyZXR1cm4gS3VyKCk/ITA6WnVyKCk/JEg/IUp1cigpOiFYdXIoKTohMX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gS3VyKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9ZnVuY3Rpb24gWnVyKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9ZnVuY3Rpb24gSnVyKCl7cmV0dXJuISEoJEgmJk9iamVjdC5rZXlzKCRIKS5tYXAodD0+JEhbdF0pLmZpbHRlcih0PT50LnByb2R1Y3Rpb25Nb2RlKS5sZW5ndGg+MCl9ZnVuY3Rpb24gemNlKGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCByPWp1ci5leGVjKGUudG9TdHJpbmcoKSk7aWYocil0cnl7ZT1uZXcgRnVuY3Rpb24oclsxXSl9Y2F0Y2gobil7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLG4pfXJldHVybiBlKHQpfXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307dmFyIFJjdD1mdW5jdGlvbihlLHQpe2lmKHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlKXJldHVybiB6Y2UoZSx0KX07d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9PT12b2lkIDAmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT0kdXIoKSk7ZnVuY3Rpb24gUXVyKCl7fXZhciBGY2U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmN0PT0iZnVuY3Rpb24iKXJldHVybiBSY3QoUXVyKX07dmFyIF8zPWNsYXNze3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC50ZXh0Q29udGVudD0iQUJDRCIsdC5kaXI9InJ0bCIsdC5zdHlsZS5mb250U2l6ZT0iMTRweCIsdC5zdHlsZS53aWR0aD0iNHB4Iix0LnN0eWxlLmhlaWdodD0iMXB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Ii0xMDAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtsZXQgcj0icmV2ZXJzZSI7cmV0dXJuIHQuc2Nyb2xsTGVmdD4wP3I9ImRlZmF1bHQiOih0LnNjcm9sbExlZnQ9Mix0LnNjcm9sbExlZnQ8MiYmKHI9Im5lZ2F0aXZlIikpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkscn1zdGF0aWMgZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4pe2xldHtzY3JvbGxMZWZ0Oml9PW47aWYociE9PSJydGwifHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LHIsbixpKXtpZihyIT09InJ0bCJ8fCF0KXtuLnNjcm9sbExlZnQ9aTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pO2JyZWFrfX19O3ZhciBFMD1bXSx0aHI9ZnVuY3Rpb24oKXtsZXQgZT1EY3QoKTtFMC5mb3JFYWNoKHQ9PntOY3QodCxlKX0pfSxLSCxlaHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhyKTtlaHIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTt2YXIgTmN0PWZ1bmN0aW9uKGUsdCxyPWUuZ2V0QXR0cmlidXRlKCJkaXIiKSl7dD9lLnNldEF0dHJpYnV0ZSgiZGlyIix0KTpyIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9LERjdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKX0sWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksS0h8fChLSD1fMy5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksTmN0KHRoaXMsRGN0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSl7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKSxyIT09ImRpciIpcmV0dXJuO2xldCBvPURjdCgpLGE9aT09PW8mJkUwLmluZGV4T2YodGhpcyk9PT0tMSxzPSFpJiZuJiZFMC5pbmRleE9mKHRoaXMpPT09LTE7YXx8cz8odGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLG8saSkpOmkhPT1vJiZuPT09byYmdGhpcy5fX3N1YnNjcmliZSghMSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX19zdWJzY3JpYmUoITEpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpe2k9PT0iZGlyIiYmbj09PSIiJiYhci5oYXNBdHRyaWJ1dGUoImRpciIpfHxzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKXtyPT09ImRpciImJiFuP3RoaXMuZGlyPSIiOnN1cGVyLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKX1fX3N1YnNjcmliZShyPSEwKXtyP0UwLmluZGV4T2YodGhpcyk9PT0tMSYmRTAucHVzaCh0aGlzKTpFMC5pbmRleE9mKHRoaXMpPi0xJiZFMC5zcGxpY2UoRTAuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIpe3JldHVybiBfMy5nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChLSCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHIpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQocixuKXtyZXR1cm4gXzMuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyLG4pfX07d2luZG93LlZhYWRpbj13aW5kb3cuVmFhZGlufHx7fTt3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXtGY2UoKX07dmFyIE9jdCxCY2U9bmV3IFNldCxKSD1lPT5jbGFzcyBleHRlbmRzIFpIKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0e2lzOnJ9PXRoaXM7ciYmIUJjZS5oYXMocikmJih3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnMucHVzaCh0aGlzKSxCY2UuYWRkKHIpLHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2smJihPY3Q9c3IuZGVib3VuY2UoT2N0LGt4LCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSksSmwoT2N0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxkb2N1bWVudC5kb2N0eXBlPT09bnVsbCYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19O3ZhciBRSD1jbGFzcyBleHRlbmRzIEpIKE9jZShYSCh5aChtdCkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBRYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGxhYmVsPgogICAgICAgIDxzcGFuIHBhcnQ9ImNoZWNrYm94Ij4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIKICAgICAgICAgICAgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iCiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9Int7aW5kZXRlcm1pbmF0ZTo6Y2hhbmdlfX0iCiAgICAgICAgICAgIHJvbGU9InByZXNlbnRhdGlvbiIKICAgICAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgICAgLz4KICAgICAgICA8L3NwYW4+CgogICAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvbGFiZWw+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWNoZWNrYm94In1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbmRldGVybWluYXRlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIn0sX25hdGl2ZUNoZWNrYm94Ont0eXBlOk9iamVjdH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm5hbWV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtsZXQgdD10aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpO3QmJih0aGlzLm5hbWU9dCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0ibGFiZWwiXScpLnF1ZXJ5U2VsZWN0b3IoInNsb3QiKS5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZS5iaW5kKHRoaXMpKSx0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpfV91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpe2xldCB0PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKSxyPXQuZmlyc3RFbGVtZW50Q2hpbGQuYXNzaWduZWROb2RlcygpO3RoaXMuX2lzQXNzaWduZWROb2Rlc0VtcHR5KHIpP3Quc2V0QXR0cmlidXRlKCJlbXB0eSIsIiIpOnQucmVtb3ZlQXR0cmlidXRlKCJlbXB0eSIpfV9pc0Fzc2lnbmVkTm9kZXNFbXB0eSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09MSYmdFswXS5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnRbMF0udGV4dENvbnRlbnQudHJpbSgpPT09IiJ9X2NoZWNrZWRDaGFuZ2VkKHQpe3RoaXMuaW5kZXRlcm1pbmF0ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIixCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmNoZWNrZWQpfV9hZGRBY3RpdmVMaXN0ZW5lcnMoKXt0aGlzLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsImRvd24iLHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJ1cCIsKCk9PnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhY3RpdmUiKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKSl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpfV9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KXtyZXR1cm4hKHRoaXMuZGlzYWJsZWR8fHQudGFyZ2V0LmxvY2FsTmFtZT09PSJhIil9X2hhbmRsZUNsaWNrKHQpe3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYodGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmluZGV0ZXJtaW5hdGU9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSk6dC5jb21wb3NlZFBhdGgoKVswXSE9PXRoaXMuX25hdGl2ZUNoZWNrYm94JiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSkpfV90b2dnbGVDaGVja2VkKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7Y29tcG9zZWQ6ITEsYnViYmxlczohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShRSC5pcyxRSCk7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKCiAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdCk7CiAgICB9CgogICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLWJvcmRlciddKSkgewogICAgICBib3JkZXI6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ2VsbCBzdHlsZXMgKi8KCiAgICBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1tKTsKICAgIH0KCiAgICAvKiBBcHBseSByb3cgYm9yZGVycyBieSBkZWZhdWx0IGFuZCBpbnRyb2R1Y2UgdGhlICJuby1yb3ctYm9yZGVycyIgdmFyaWFudCAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogSGlkZSBmaXJzdCBib2R5IHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLW0pIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICAvKiBGb2N1cy1yaW5nICovCgogICAgW3BhcnR+PSdjZWxsJ106Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIDpob3N0KFtuYXZpZ2F0aW5nXSkgW3BhcnR+PSdjZWxsJ106Zm9jdXM6OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICA6aG9zdChbZHJhZ292ZXJdKTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIHsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ10gewogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgKyAycHgpOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSBbZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMnB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiAxMDAlOwogICAgICBib3R0b206IGF1dG87CiAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IGF1dG87CiAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSk6OmFmdGVyLAogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdkZXRhaWxzLWNlbGwnXTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdW2RyYWdvdmVyPSdvbi10b3AnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIHsKICAgICAgLyogQWRkIGJvdHRvbS1zcGFjZSB0byB0aGUgcm93IHNvIHRoZSBkcmFnIG51bWJlciBkb2Vzbid0IGdldCBjbGlwcGVkLiBOZWVkZWQgZm9yIElFL0VkZ2UgKi8KICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OiAwLjk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICBbaW9zXSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgICNzY3JvbGxlcjpub3QoW2lvc10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XTpub3QoW2RyYWdzdGFydD0nJ10pOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteCk7CiAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgei1pbmRleDogMTAwOwogICAgICBjb250ZW50OiBhdHRyKGRyYWdzdGFydCk7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbG9yKTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhzKTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsOwogICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgbWluLXdpZHRoOiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAqIDAuNyk7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAvKiBIZWFkZXJzIGFuZCBmb290ZXJzICovCgogICAgW3BhcnR+PSdoZWFkZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgIH0KCiAgICAvKiBIZWFkZXIgYm9yZGVycyAqLwoKICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSd0b3AnXSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZvb3RlciBib3JkZXJzICovCgogICAgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdib3R0b20nXSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVvcmRlcmluZyAqLwoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2FsbG93ZWQnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nZHJhZ2dpbmcnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYm94LXNoYWRvdzogdmFyKC0tbHVtby1ib3gtc2hhZG93LXMpOwogICAgICAvKiBUT0RPIFVzZSB0aGUgc2FtZSBzdHlsZXMgYXMgZm9yIHRoZSBjZWxsIGVsZW1lbnQgKHJlb3JkZXItZ2hvc3QgY29waWVzIHN0eWxlcyBmcm9tIHRoZSBjZWxsIGVsZW1lbnQpICovCiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIENvbHVtbiByZXNpemluZyAqLwoKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10gewogICAgICB3aWR0aDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSdjZWxsJ106aG92ZXIgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSwKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ106YWN0aXZlIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICB9CgogICAgLyogQ29sdW1uIGJvcmRlcnMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdsZWZ0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBSb3cgc3RyaXBlcyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2JvZHktY2VsbCddLAogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIH0KCiAgICAvKiBTZWxlY3RlZCByb3cgKi8KCiAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSB7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2JvZHktY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvciksIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICB9CgogICAgLyogQ292ZXIgdGhlIGJvcmRlciBvZiBhbiB1bnNlbGVjdGVkIHJvdyAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgMCAwIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb21wYWN0ICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1zKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLXMpOwogICAgfQoKICAgIC8qIFdyYXAgY2VsbCBjb250ZW50cyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3dyYXAtY2VsbC1jb250ZW50J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVtvdmVyZmxvd349J3JpZ2h0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWdyaWQifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zZWxlY3QtYWxsLWNoZWNrYm94LWx1bW8ifSk7dmFyIEhjZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHJocj1IY2UmJkhjZVsxXT49OCxWY2U9MyxVY2U9aDkoe2JlaGF2aW9yczpbSnMsdjldLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3ZpZXdwb3J0SGVpZ2h0K3RoaXMuX3Njcm9sbE9mZnNldH0sZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPWV9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KGUpe2U9ZSV0aGlzLl9waHlzaWNhbENvdW50LGU8MCYmKGU9dGhpcy5fcGh5c2ljYWxDb3VudCtlKSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2xldCB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl0sdD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gbn0pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7bGV0IGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl19KSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludChlWyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKGUuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtsZXQgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDtsZXQgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7bGV0e3BoeXNpY2FsVG9wOm4saW5kZXhlczppfT10aGlzLl9nZXRSZXVzYWJsZXMocik7cj8odGhpcy5fcGh5c2ljYWxUb3A9bix0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2kubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWkubGVuZ3RoKSx0aGlzLl91cGRhdGUoaSxyP251bGw6aSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGxpKX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oZSl7bGV0IHQscixuLGk9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fc2Nyb2xsVG9wLGY9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj1oLWMpOih0PXRoaXMuX3BoeXNpY2FsRW5kLHI9dS1mKTtuPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0scj1yLW4sIShpLmxlbmd0aD49bHx8cjw9byk7KWlmKGUpe2lmKHMraS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50fHxjK24+PWgtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO2kucHVzaCh0KSxjPWMrbix0PSh0KzEpJWx9ZWxzZXtpZihhLWkubGVuZ3RoPD0wfHxjK3RoaXMuX3BoeXNpY2FsU2l6ZS1uPD1mKWJyZWFrO2kucHVzaCh0KSxjPWMtbix0PXQ9PT0wP2wtMTp0LTF9cmV0dXJue2luZGV4ZXM6aSxwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oZSx0KXtpZighKGUmJmUubGVuZ3RoPT09MHx8dGhpcy5fcGh5c2ljYWxDb3VudD09PTApKXtpZih0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXtsZXQgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3JdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe2xldCByPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxWY2UsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudCxuPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSk7aWYoIShyPDApKXtpZihyPjApe2xldCBpPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChyKSk7Zm9yKGxldCBvPTA7bzxyO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K3IsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLWkpL3Isbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHxuPT09MHx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSksa3gpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsaSkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuaXNBdHRhY2hlZHx8IXRoaXMuX2lzVmlzaWJsZSkpaWYodGhpcy5fcGh5c2ljYWxDb3VudCE9PTApe2xldHtwaHlzaWNhbFRvcDplLGluZGV4ZXM6dH09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3VwZGF0ZSh0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChWY2UpKX0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXtsZXQgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9pc1Zpc2libGUpcmV0dXJuO2NpKCk7bGV0IHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgZT10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCl7dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTtsZXQgdD10aGlzLl9zY3JvbGxUb3A7IXJociYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsKGV8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTF8fChjaSgpLHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSlyZXR1cm47ZT10aGlzLl9jbGFtcChlLDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHxlPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PWUtMSksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7bGV0IHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtmb3IoO3I8ZSYmbjw9aTspbj1uK3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sTmkpfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LF9jbGFtcDpmdW5jdGlvbihlLHQscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgodCxlKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihlLHQscil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2VdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbZV0scix0LmJpbmQodGhpcykpLEpsKHRoaXMuX2RlYm91bmNlcnNbZV0pfX0pO3ZhciB0Vj1jbGFzcyBleHRlbmRzIFVjZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKTtsZXQgcj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKG49Pm4uaW5kZXg9PT10KVswXTtpZihyKXtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtNYXRoLmFicyhuKT4xJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9bix0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfXRoaXMuX3Njcm9sbGluZ1RvSW5kZXg9ITF9X2VmZmVjdGl2ZVNpemVDaGFuZ2VkKHQpe2xldCByLG49MDt0aGlzLl9pdGVyYXRlSXRlbXMoKGksbyk9PntpZihvPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07cj1hLmluZGV4LG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9fSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsMWU1KX0pLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLHRoaXMuX3Njcm9sbFRvcD09PTAmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fc2Nyb2xsVG9JbmRleChNYXRoLm1pbih0LTEscikpKSx0aGlzLl9pdGVyYXRlSXRlbXMoaT0+e2xldCBvPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07aWYoby5pbmRleD09PXImJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxvLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2xldCBhPUFycmF5LmZyb20odGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSk7by5jaGlsZHJlblthXS5mb2N1cygpfX0pKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3VwZGF0ZSgpKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fcG9zaXRpb25JdGVtcygpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IHQ7aXNOYU4odGhpcy5fcGh5c2ljYWxUb3ApJiYodD0hMCx0aGlzLl9waHlzaWNhbFRvcD0wKTtsZXQgcj10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMobj0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbbl0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cn1weClgLHIrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSx0JiZ0aGlzLl9zY3JvbGxUb0luZGV4KDApfV9pbmNyZWFzZVBvb2xJZk5lZWRlZCh0KXt0PT09MCYmdGhpcy5fc2Nyb2xsaW5nVG9JbmRleHx8IXRoaXMuX2NhblBvcHVsYXRlKCl8fCF0aGlzLl9lZmZlY3RpdmVTaXplfHwodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkP3RoaXMuX29wdFBoeXNpY2FsU2l6ZSE9PTEvMCYmKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLE5pLCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpO2xldCByPXRoaXMuX29wdFBoeXNpY2FsU2l6ZS10aGlzLl9waHlzaWNhbFNpemUsbj1NYXRoLmNlaWwoci90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrbj50aGlzLl9lZmZlY3RpdmVTaXplJiYobj1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmbj4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQobiksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpOih0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQ9ITAsc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKDI1KSkpfV9fcmVvcmRlckNoaWxkTm9kZXMoKXtsZXQgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTshIXQucmVkdWNlKChuLGksbyxhKT0+e2lmKG89PT0wfHxhW28tMV0uaW5kZXg9PT1pLmluZGV4LTEpcmV0dXJuIG59LCEwKXx8dC5zb3J0KChuLGkpPT5uLmluZGV4LWkuaW5kZXgpLmZvckVhY2gobj0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKG4pKX1fY3JlYXRlUG9vbCh0KXtsZXQgcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKG89PnIuYXBwZW5kQ2hpbGQobykpLHRoaXMuX2dldFJvd1RhcmdldCgpLmFwcGVuZENoaWxkKHIpO2xldCBpPXRoaXMucXVlcnlTZWxlY3RvcigiW3Nsb3RdIik7aWYoaSl7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsbyl9cmV0dXJuIFRtKHRoaXMsKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpLG59X2Fzc2lnbk1vZGVscyh0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKHIsbik9PntsZXQgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3JdO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIixuPj10aGlzLl9lZmZlY3RpdmVTaXplLGkpLHRoaXMuX3VwZGF0ZVNjcm9sbGVySXRlbShpLG4rKHRoaXMuX3ZpZHhPZmZzZXR8fDApKX0sdCl9X3Njcm9sbEhhbmRsZXIoKXtsZXQgdD10aGlzLiQudGFibGUuc2Nyb2xsVG9wLXRoaXMuX3Njcm9sbFBvc2l0aW9uO3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9zY3JvbGxIYW5kbGVyKTtsZXQgcj10aGlzLl92aWR4T2Zmc2V0O3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1yJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXt0aGlzLl9ub1NjYWxlPSExO3JldHVybn1sZXQgcj10aGlzLiQudGFibGUuc2Nyb2xsVG9wLyh0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLG49cip0aGlzLl9lZmZlY3RpdmVTaXplO3RoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChuLXIqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2xldCByPXRoaXMuX3ZpZHhPZmZzZXR8fDAsbj0xZTMsaT0xMDA7dGhpcy5fc2Nyb2xsVG9wPT09MD8odGhpcy5fdmlkeE9mZnNldD0wLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KDApKTp0aGlzLmZpcnN0VmlzaWJsZUluZGV4PG4mJnRoaXMuX3ZpZHhPZmZzZXQ+MCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsaSksciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoci10aGlzLl92aWR4T2Zmc2V0KSksdGhpcy5fbm9TY2FsZT0hMCk7bGV0IG89dGhpcy5fZWZmZWN0aXZlU2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3AmJnRoaXMuX21heFNjcm9sbFRvcD4wPyh0aGlzLl92aWR4T2Zmc2V0PW8sciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtbiYmdGhpcy5fdmlkeE9mZnNldDxvJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oby10aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtcikpLHRoaXMuX25vU2NhbGU9ITApfX1fYWNjZXNzSXJvbkxpc3RBUEkodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3NBc3luY0VuYWJsZWQ9ITE7bGV0IHI9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsTmksKCk9PnRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSEwKSxyfV9kZWJvdW5jZVJlbmRlcih0LHIpe3N1cGVyLl9kZWJvdW5jZVJlbmRlcigoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkscil9X3dhcm5Qcml2YXRlQVBJQWNjZXNzKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkJiZjb25zb2xlLndhcm4oYEFjY2Vzc2luZyBwcml2YXRlIEFQSSAoJHt0fSkhYCl9X3JlbmRlcigpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZW5kZXIpfV9pdGVtc0NoYW5nZWQoKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuZmlyc3RWaXNpYmxlSW5kZXgpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCl9X3Njcm9sbFRvSW5kZXgodCl7dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksY2koKX19O3ZhciBxY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfYTExeVVwZGF0ZUdyaWRTaXplKHNpemUsIF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfV9hMTF5R2V0SGVhZGVyUm93Q291bnQocil7cmV0dXJuIHIuZmlsdGVyKG49Pm4uc29tZShpPT5pLl9oZWFkZXJUZW1wbGF0ZXx8aS5oZWFkZXJSZW5kZXJlcnx8aS5wYXRofHxpLmhlYWRlcikpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXIpKS5sZW5ndGh9X2ExMXlVcGRhdGVHcmlkU2l6ZShyLG4pe2lmKHI9PT12b2lkIDB8fG49PT12b2lkIDApcmV0dXJuO2xldCBpPW5bbi5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIscit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQobikrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KG4pKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixpJiZpLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLG4rMSkpfV9hMTF5VXBkYXRlRm9vdGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmZvb3Rlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrbisxKSl9X2ExMXlVcGRhdGVSb3dSb3dpbmRleChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuK3RoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSsxKX1fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpLEFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT5pLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsQm9vbGVhbihuKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsbisxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e3R5cGVvZiBuPT0iYm9vbGVhbiI/aS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG4pOmkuaGFzQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikmJmkucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KX1fYTExeVNldFJvd0RldGFpbHNDZWxsKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpIT09biYmaS5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLG4uaWQpfSl9X2ExMXlVcGRhdGVDZWxsQ29sc3BhbihyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLWNvbHNwYW4iLE51bWJlcihuKSl9X2ExMXlVcGRhdGVTb3J0ZXJzKCl7QXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoInZhYWRpbi1ncmlkLXNvcnRlciIpKS5mb3JFYWNoKHI9PntsZXQgbj1yLnBhcmVudE5vZGU7Zm9yKDtuJiZuLmxvY2FsTmFtZSE9PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiOyluPW4ucGFyZW50Tm9kZTtuJiZuLmFzc2lnbmVkU2xvdCYmbi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtc29ydCIse2FzYzoiYXNjZW5kaW5nIixkZXNjOiJkZXNjZW5kaW5nIn1bU3RyaW5nKHIuZGlyZWN0aW9uKV18fCJub25lIil9KX19O3ZhciBHY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjZWxsLWFjdGl2YXRlIix0aGlzLl9hY3RpdmF0ZUl0ZW0uYmluZCh0aGlzKSl9X2FjdGl2YXRlSXRlbShyKXtsZXQgbj1yLmRldGFpbC5tb2RlbCxpPW4/bi5pdGVtOm51bGw7aSYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxpKT9udWxsOmkpfV9vbkNsaWNrKHIpe2lmKHIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW5bbi5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIWl8fGkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2xldCBvPWkuX2NvbnRlbnQsYT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDshby5jb250YWlucyhhKSYmIXRoaXMuX2lzRm9jdXNhYmxlKHIudGFyZ2V0KSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKGkucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZShyKXtyZXR1cm4gbmhyKHIpfX0sbmhyPWU9PntpZighZS5wYXJlbnROb2RlKXJldHVybiExO2xldCByPUFycmF5LmZyb20oZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpKS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoInBhcnQiKSE9PSJjZWxsIGJvZHktY2VsbCIpLmluZGV4T2YoZSkhPT0tMTtyZXR1cm4hZS5kaXNhYmxlZCYmcn07dmFyIFdjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHIsbixpKXtpZighIWkpe2lmKCFBcnJheS5pc0FycmF5KHIpKXtyPT1udWxsJiYodGhpcy5zaXplPTApLHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApO3JldHVybn10aGlzLnNpemU9ci5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIocixuKXtsZXQgaT0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsaSkmJihpPXRoaXMuX2ZpbHRlcihpKSksdGhpcy5zaXplPWkubGVuZ3RoLHIuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsaSkmJihpPWkuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2xldCBvPXIucGFnZSpyLnBhZ2VTaXplLGE9bytyLnBhZ2VTaXplLHM9aS5zbGljZShvLGEpO24ocyxpLmxlbmd0aCl9X2NoZWNrUGF0aHMocixuLGkpe2lmKCFpLmxlbmd0aClyZXR1cm4hMTtsZXQgbz0hMDtmb3IobGV0IGEgaW4gcil7bGV0IHM9clthXS5wYXRoO2lmKCFzfHxzLmluZGV4T2YoIi4iKT09PS0xKWNvbnRpbnVlO2xldCBsPXMucmVwbGFjZSgvXC5bXi5dKiQvLCIiKTtEYS5nZXQobCxpWzBdKT09PXZvaWQgMCYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtzfSIgdXNlZCBmb3IgJHtufSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke259IGlzIGRpc2FibGVkLmApLG89ITEpfXJldHVybiBvfV9tdWx0aVNvcnQocixuKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoaT0+aS5kaXJlY3Rpb249PT0iYXNjIj90aGlzLl9jb21wYXJlKERhLmdldChpLnBhdGgsciksRGEuZ2V0KGkucGF0aCxuKSk6aS5kaXJlY3Rpb249PT0iZGVzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLG4pLERhLmdldChpLnBhdGgscikpOjApLnJlZHVjZSgoaSxvKT0+aXx8bywwKX1fbm9ybWFsaXplRW1wdHlWYWx1ZShyKXtyZXR1cm5bdm9pZCAwLG51bGxdLmluZGV4T2Yocik+PTA/IiI6aXNOYU4ocik/ci50b1N0cmluZygpOnJ9X2NvbXBhcmUocixuKXtyZXR1cm4gcj10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKHIpLG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShuKSxyPG4/LTE6cj5uPzE6MH1fZmlsdGVyKHIpe3JldHVybiByLmZpbHRlcihuPT50aGlzLl9maWx0ZXJzLmZpbHRlcihpPT57bGV0IG89dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShEYS5nZXQoaS5wYXRoLG4pKSxhPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoaS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBvLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPT09LTF9KS5sZW5ndGg9PT0wKX19O3ZhciBZY2U9ZT0+Y2xhc3MgZXh0ZW5kcyB5aChlKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7bGV0IHI9dGhpcy4kLnNjcm9sbGVyO0VtKHIsInRyYWNrIix0aGlzLl9vbkhlYWRlclRyYWNrLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixuPT5yLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PSJyZXNpemUtaGFuZGxlIiYmbi5wcmV2ZW50RGVmYXVsdCgpKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSl9X29uSGVhZGVyVHJhY2socil7bGV0IG49ci50YXJnZXQ7aWYobi5nZXRBdHRyaWJ1dGUoInBhcnQiKT09PSJyZXNpemUtaGFuZGxlIil7bGV0IG89bi5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO28ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbC5fb3JkZXItYy5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCk7bGV0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKSxzPWEuZmlsdGVyKGw9PmwuX2NvbHVtbj09PW8pWzBdO2lmKHMub2Zmc2V0V2lkdGgpe2xldCBsPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLGM9MTArcGFyc2VJbnQobC5wYWRkaW5nTGVmdCkrcGFyc2VJbnQobC5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGwuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChsLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGwubWFyZ2luTGVmdCkrcGFyc2VJbnQobC5tYXJnaW5SaWdodCksdT1zLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXIuZGV0YWlsLng6ci5kZXRhaWwueC1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KGMsdSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX2NvbHVtbi5fb3JkZXItYy5fY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxjLHUpe2M8dS5pbmRleE9mKHMpJiYobC5fY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLl9jb2x1bW4uZmxleEdyb3c9MCl9KSxyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpvfX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19O3ZhciBqY2U9Y2xhc3MgWGNle2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPXIsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIodD0+dGhpcy5pdGVtQ2FjaGVzW3RdLmlzTG9hZGluZygpKVswXSl9Z2V0SXRlbUZvckluZGV4KHQpe2xldHtjYWNoZTpyLHNjYWxlZEluZGV4Om59PXRoaXMuZ2V0Q2FjaGVBbmRJbmRleCh0KTtyZXR1cm4gci5pdGVtc1tuXX11cGRhdGVTaXplKCl7dGhpcy5lZmZlY3RpdmVTaXplPSF0aGlzLnBhcmVudEl0ZW18fHRoaXMuZ3JpZC5faXNFeHBhbmRlZCh0aGlzLnBhcmVudEl0ZW0pP3RoaXMuc2l6ZStPYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpLnJlZHVjZSgodCxyKT0+e2xldCBuPXRoaXMuaXRlbUNhY2hlc1tyXTtyZXR1cm4gbi51cGRhdGVTaXplKCksdCtuLmVmZmVjdGl2ZVNpemV9LDApOjB9ZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh0KXtpZighdGhpcy5pdGVtQ2FjaGVzW3RdKXtsZXQgcj1uZXcgWGNlKHRoaXMuZ3JpZCx0aGlzLHRoaXMuaXRlbXNbdF0pO3RoaXMuaXRlbUNhY2hlc1t0XT1yLHRoaXMuZ3JpZC5fbG9hZFBhZ2UoMCxyKX19Z2V0Q2FjaGVBbmRJbmRleCh0KXtsZXQgcj10LG49T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89TnVtYmVyKG5baV0pLGE9dGhpcy5pdGVtQ2FjaGVzW29dO2lmKHI8PW8pcmV0dXJue2NhY2hlOnRoaXMsc2NhbGVkSW5kZXg6cn07aWYocjw9bythLmVmZmVjdGl2ZVNpemUpcmV0dXJuIGEuZ2V0Q2FjaGVBbmRJbmRleChyLW8tMSk7ci09YS5lZmZlY3RpdmVTaXplfXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9fX0sJGNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sbG9hZGluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpjZSh0aGlzKX19LGl0ZW1JZFBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGV4cGFuZGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NpemVDaGFuZ2VkKHNpemUpIiwiX2l0ZW1JZFBhdGhDaGFuZ2VkKGl0ZW1JZFBhdGgpIiwiX2V4cGFuZGVkSXRlbXNDaGFuZ2VkKGV4cGFuZGVkSXRlbXMuKikiXX1fc2l6ZUNoYW5nZWQocil7bGV0IG49ci10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPW4sdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9bix0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0ocixuKXtpZihyPj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtuLmluZGV4PXI7bGV0e2NhY2hlOmksc2NhbGVkSW5kZXg6b309dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxhPWkuaXRlbXNbb107YT8odGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMSxuKSx0aGlzLl91cGRhdGVJdGVtKG4sYSksdGhpcy5faXNFeHBhbmRlZChhKSYmaS5lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KG8pKToodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMCxuKSx0aGlzLl9sb2FkUGFnZSh0aGlzLl9nZXRQYWdlRm9ySW5kZXgobyksaSkpfV9leHBhbmRlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7ci5pdGVtIT09dm9pZCAwJiYobj90aGlzLmV4cGFuZEl0ZW0oci5pdGVtKTp0aGlzLmNvbGxhcHNlSXRlbShyLml0ZW0pKX1nZXRJdGVtSWQocil7cmV0dXJuIHRoaXMuaXRlbUlkUGF0aD90aGlzLmdldCh0aGlzLml0ZW1JZFBhdGgscik6cn1faXNFeHBhbmRlZChyKXtyZXR1cm4gdGhpcy5fX2V4cGFuZGVkS2V5cy5oYXModGhpcy5nZXRJdGVtSWQocikpfV9leHBhbmRlZEl0ZW1zQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCl9X19jYWNoZUV4cGFuZGVkS2V5cygpe3RoaXMuZXhwYW5kZWRJdGVtcyYmKHRoaXMuX19leHBhbmRlZEtleXM9bmV3IFNldCx0aGlzLmV4cGFuZGVkSXRlbXMuZm9yRWFjaChyPT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQocikpfSkpfWV4cGFuZEl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKXx8KHRoaXMuZXhwYW5kZWRJdGVtcz1bLi4udGhpcy5leHBhbmRlZEl0ZW1zLHJdKX1jb2xsYXBzZUl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKSYmKHRoaXMuZXhwYW5kZWRJdGVtcz10aGlzLmV4cGFuZGVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZ2V0SW5kZXhMZXZlbChyKXtsZXR7Y2FjaGU6bn09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxpPTA7Zm9yKDtuLnBhcmVudENhY2hlOyluPW4ucGFyZW50Q2FjaGUsaSsrO3JldHVybiBpfV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZShyLG4pe2lmKCFuLnBlbmRpbmdSZXF1ZXN0c1tyXSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLG4ucGVuZGluZ1JlcXVlc3RzW3JdPSEwO2xldCBpPXtwYWdlOnIscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKSxwYXJlbnRJdGVtOm4ucGFyZW50SXRlbX07dGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5kYXRhUHJvdmlkZXIoaSwobyxhKT0+e2EhPT12b2lkIDA/bi5zaXplPWE6aS5wYXJlbnRJdGVtJiYobi5zaXplPW8ubGVuZ3RoKTtsZXQgcz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikubWFwKGw9PmwuX2l0ZW0pO28uZm9yRWFjaCgobCxjKT0+e2xldCB1PXIqdGhpcy5wYWdlU2l6ZStjO24uaXRlbXNbdV09bCx0aGlzLl9pc0V4cGFuZGVkKGwpJiZzLmluZGV4T2YobCk+LTEmJm4uZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh1KX0pLHRoaXMuX2hhc0RhdGE9ITAsZGVsZXRlIG4ucGVuZGluZ1JlcXVlc3RzW3JdLHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEsbW8uYWZ0ZXIoMCksKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+IWwuaGlkZGVuKS5mb3JFYWNoKGw9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgobC5pbmRleCkmJnRoaXMuX2dldEl0ZW0obC5pbmRleCxsKX0pLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSksdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YS5mbHVzaCgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCl9KX19X2dldFBhZ2VGb3JJbmRleChyKXtyZXR1cm4gTWF0aC5mbG9vcihyL3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgamNlKHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PntBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2gobj0+e24uX2luc3RhbmNlJiZuLl9pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KCJpdGVtIix7fSwhMSl9KX0pLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLCghdGhpcy5fZWZmZWN0aXZlU2l6ZXx8IXRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZCkmJnRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQocixuKXtuIT09dm9pZCAwJiZyIT09biYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3RoaXMuc2l6ZT09PXZvaWQgMCYmdGhpcy5fZWZmZWN0aXZlU2l6ZT09PTAmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYFx1MjAxOXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmdGhpcy5jbGVhckNhY2hlKCksciYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsbW8uYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbChyLG4pe3JldHVybiB0aGlzLmdldEl0ZW1JZChyKT09PXRoaXMuZ2V0SXRlbUlkKG4pfV9nZXRJdGVtSW5kZXhJbkFycmF5KHIsbil7bGV0IGk9LTE7cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e3RoaXMuX2l0ZW1zRXF1YWwobyxyKSYmKGk9YSl9KSxpfXNjcm9sbFRvSW5kZXgocil7c3VwZXIuc2Nyb2xsVG9JbmRleChyKSwhaXNOYU4ocikmJih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8IXRoaXMuY2xpZW50SGVpZ2h0KSYmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleD1yKX1fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCl7aWYodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4JiZ0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtsZXQgcj10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgocil9fX07dmFyIEtjZT1lPT5jbGFzcyBleHRlbmRzIGV7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHMocil7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIilyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHIpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2RlcyhyKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3VwcyhyKXtyZXR1cm4gci5tYXAobj0+bi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj90aGlzLl9nZXRDaGlsZENvbHVtbnMobik6W25dKS5yZWR1Y2UoKG4saSk9Pm4uY29uY2F0KGkpLFtdKX1fZ2V0Q29sdW1uVHJlZSgpe2xldCByPXZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLG49W107Zm9yKGxldCBpPXI7bi5wdXNoKGkpLCEhdGhpcy5faGFzQ29sdW1uR3JvdXBzKGkpOylpPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoaSk7cmV0dXJuIG59X3VwZGF0ZUNvbHVtblRyZWUoKXtsZXQgcj10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMocix0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9cil9X2FkZE5vZGVPYnNlcnZlcigpe3RoaXMuX29ic2VydmVyPW5ldyB2aCh0aGlzLHI9PntsZXQgbj1yLmFkZGVkTm9kZXMuZmlsdGVyKG89Pm8ubG9jYWxOYW1lPT09InRlbXBsYXRlIiYmby5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpWzBdO24mJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PW4mJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9bik7bGV0IGk9bz0+by5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihpKHIuYWRkZWROb2Rlcyl8fGkoci5yZW1vdmVkTm9kZXMpKXtsZXQgbz1yLnJlbW92ZWROb2Rlcy5mbGF0TWFwKHM9PnMuX2FsbENlbGxzKSxhPXM9Pm8uZmlsdGVyKGw9PmwuX2NvbnRlbnQuY29udGFpbnMocykpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihhKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIoYSkpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSl9X2FycmF5RXF1YWxzKHIsbil7aWYoIXJ8fCFufHxyLmxlbmd0aCE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKWlmKHJbaV1pbnN0YW5jZW9mIEFycmF5JiZuW2ldaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKHJbaV0sbltpXSkpcmV0dXJuITF9ZWxzZSBpZihyW2ldIT1uW2ldKXJldHVybiExO3JldHVybiEwfV9jaGVja0ltcG9ydHMoKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLWZpbHRlci1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC10cmVlLXRvZ2dsZSIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0LWNvbHVtbiIsInZhYWRpbi1ncmlkLXNvcnRlciJdLmZvckVhY2gocj0+e2xldCBuPXRoaXMucXVlcnlTZWxlY3RvcihyKTtuJiYhKG4gaW5zdGFuY2VvZiBtdCkmJmNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3J9PiBlbGVtZW50LmApfSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2gocj0+dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpe0FycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgobixpKT0+bi5fY29sdW1uLl9vcmRlci1pLl9jb2x1bW4uX29yZGVyKS5mb3JFYWNoKChuLGksbyk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsaT09PTAsbiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsaT09PW8ubGVuZ3RoLTEsbil9KX1faXNDb2x1bW5FbGVtZW50KHIpe3JldHVybiByLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHIubG9jYWxOYW1lKX19O3ZhciBaY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldEV2ZW50Q29udGV4dChyKXtsZXQgbj17fSxpPXIuY29tcG9zZWRQYXRoKCksbz1pW2kuaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO3JldHVybiBvJiYobi5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoYT0+by5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKGEpPi0xKVswXSxvLl9jb2x1bW4mJihuLmNvbHVtbj1vLl9jb2x1bW4pLChuLnNlY3Rpb249PT0iYm9keSJ8fG4uc2VjdGlvbj09PSJkZXRhaWxzIikmJk9iamVjdC5hc3NpZ24obix0aGlzLl9fZ2V0Um93TW9kZWwoby5wYXJlbnRFbGVtZW50KSkpLG59fTt2YXIgSmNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZChyKXtyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIoci50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHIpe3RoaXMuX2ZpbHRlcnMuaW5kZXhPZihyKT09PS0xJiZ0aGlzLl9maWx0ZXJzLnB1c2gocil9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLHZhbHVlOnIudmFsdWV9KSl9fTt2YXIgVDA9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLXRlbXBsYXRpemVyIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sX2dyaWQ6T2JqZWN0fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5zdGFuY2VQcm9wcz17ZGV0YWlsc09wZW5lZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwLGV4cGFuZGVkOiEwLGxldmVsOiEwfX1jcmVhdGVJbnN0YW5jZSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7bGV0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KT09PS0xJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMubm90aWZ5UGF0aCgiX3RlbXBsYXRlSW5zdGFuY2VzLioiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzKSkpfXJlbW92ZUluc3RhbmNlKHQpe2xldCByPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk7dGhpcy5zcGxpY2UoIl90ZW1wbGF0ZUluc3RhbmNlcyIsciwxKX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXt0aGlzLl9UZW1wbGF0ZUNsYXNzfHwodGhpcy5fVGVtcGxhdGVDbGFzcz10Yyh0aGlzLnRlbXBsYXRlLHRoaXMse2luc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxwYXJlbnRNb2RlbDohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24odCxyKXt0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCh0LHIpLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzJiZ0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQscixuKXtpZihyPT09ImluZGV4Inx8cj09PSJpdGVtIilyZXR1cm47bGV0IGk9YF9fJHtyfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2xldCBvPUFycmF5LmZyb20odGhpcy5fZ3JpZC4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChsLl9pdGVtLHQuaXRlbSkpWzBdO28mJkFycmF5LmZyb20oby5jaGlsZHJlbikuZm9yRWFjaChsPT57bC5faW5zdGFuY2UmJihsLl9pbnN0YW5jZVtpXT1uLGwuX2luc3RhbmNlLm5vdGlmeVBhdGgocixuKSl9KTtsZXQgYT0iaXRlbS4iO2lmKEFycmF5LmlzQXJyYXkodGhpcy5fZ3JpZC5pdGVtcykmJnIuaW5kZXhPZihhKT09PTApe2xldCBsPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLGM9ci5zbGljZShhLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2x9LiR7Y31gLG4pfWxldCBzPWBfJHtyfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW3NdJiZ0aGlzLl9ncmlkW3NdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LHIpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09cix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX1fdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKHQpe2xldCByLG47aWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcyIpcj0wLG49dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2UgaWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIilyPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goaT0+e2ZvcihsZXQgbz1yO288cituO28rKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tvXS5zZXQoaSx0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ldKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKFQwLmlzLFQwKTt2YXIgUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHIsbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZihyfHxuKXtpZihyJiYhci50ZW1wbGF0aXplcil7bGV0IGk9bmV3IFQwO2kuX2dyaWQ9dGhpcyxpLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChpPT57aS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpfHwodGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQoaSwhMSkpLGRlbGV0ZSBpLnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIikuX2luc3RhbmNlfSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChyKXtyLnBhdGg9PT0iZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCJ8fCFyLnZhbHVlfHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChuPT57dGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwobixuLl9pdGVtKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZChuLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkZXRhaWxzLW9wZW5lZCIsdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4uX2l0ZW0pLG4pfSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHIpe3Iuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAscil9X3RvZ2dsZURldGFpbHNDZWxsKHIsbil7bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyk7aWYoIWkpcmV0dXJuO2xldCBvPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQobiksYT0hIWkuaGlkZGVuIT09bzsoIWkuX2luc3RhbmNlJiYhaS5fcmVuZGVyZXJ8fGkuaGlkZGVuIT09bykmJihpLmhpZGRlbj1vLG8/ci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKToodGhpcy5yb3dEZXRhaWxzUmVuZGVyZXI/KGkuX3JlbmRlcmVyPXRoaXMucm93RGV0YWlsc1JlbmRlcmVyLGkuX3JlbmRlcmVyLmNhbGwodGhpcyxpLl9jb250ZW50LHRoaXMse2luZGV4OnIuaW5kZXgsaXRlbTpufSkpOnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSYmIWkuX2luc3RhbmNlJiYoaS5faW5zdGFuY2U9dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksaS5fY29udGVudC5pbm5lckhUTUw9IiIsaS5fY29udGVudC5hcHBlbmRDaGlsZChpLl9pbnN0YW5jZS5yb290KSx0aGlzLl91cGRhdGVJdGVtKHIsbikpLGNpKCksci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke2kub2Zmc2V0SGVpZ2h0fXB4YCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpLGEmJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2gocj0+e3IucGFyZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke3Iub2Zmc2V0SGVpZ2h0fXB4YCl9KX1faXNEZXRhaWxzT3BlbmVkKHIpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zKSE9PS0xfW9wZW5JdGVtRGV0YWlscyhyKXt0aGlzLl9pc0RldGFpbHNPcGVuZWQocil8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMscl0pfWNsb3NlSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLm9wZW5JdGVtRGV0YWlscyhyLml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyhyLml0ZW0pfX07dmFyIHpjdD17U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfSx0dWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHIpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9cn1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKS5mb250U2l6ZTtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxuP3dpbmRvdy5wYXJzZUludChuKTp2b2lkIDB9X3Njcm9sbFZpZXdwb3J0SGVpZ2h0VXBkYXRlZChyKXt0aGlzLl9zY3JvbGxQYWdlSGVpZ2h0PXItdGhpcy4kLmhlYWRlci5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQtdGhpcy5fc2Nyb2xsTGluZUhlaWdodH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLm91dGVyc2Nyb2xsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy4kLnRhYmxlLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57bGV0IG49ci5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuJC5pdGVtcyk7dGhpcy5fcm93V2l0aEZvY3VzZWRFbGVtZW50PXIuY29tcG9zZWRQYXRoKClbbi0xXX0pLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PnRoaXMuX19tb3VzZURvd249ITApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5fX21vdXNlRG93bj0hMSx0aGlzLl9fcGVuZGluZ1Jlb3JkZXImJih0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITEsc2V0VGltZW91dCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSx6Y3QuU0NST0xMSU5HKSl9KX1zY3JvbGxUb0luZGV4KHIpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHIpKX1fb25XaGVlbChyKXtpZihyLmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci50YXJnZXQsci5kZWx0YVgsci5kZWx0YVkpKXJldHVybjtsZXQgbj10aGlzLiQudGFibGUsaT1yLmRlbHRhWTtpZihyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/aSo9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDpyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihpKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXt0aGlzLl9kZWx0YVlBY2MrPWksci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsTmksKCk9PnRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITEpO2xldCBvPU1hdGguYWJzKHIuZGVsdGFYKStNYXRoLmFicyhpKTt0aGlzLl9jYW5TY3JvbGwobixyLmRlbHRhWCxpKT8oci5wcmV2ZW50RGVmYXVsdCgpLG4uc2Nyb2xsVG9wKz1pLG4uc2Nyb2xsTGVmdCs9ci5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsbW8uYWZ0ZXIoemN0LklHTk9SRV9XSEVFTCksKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmbzw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/ci5wcmV2ZW50RGVmYXVsdCgpOm8+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpLHRoaXMuX3ByZXZpb3VzTW9tZW50dW09b31faGFzU2Nyb2xsZWRBbmNlc3RvcihyLG4saSl7aWYoci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IilyZXR1cm4hMTtpZih0aGlzLl9jYW5TY3JvbGwocixuLGkpJiZbImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUocikub3ZlcmZsb3cpIT09LTEpcmV0dXJuITA7aWYociE9PXRoaXMmJnIucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihyLnBhcmVudEVsZW1lbnQsbixpKX1fY2FuU2Nyb2xsKHIsbixpKXtyZXR1cm4gaT4wJiZyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLm9mZnNldEhlaWdodHx8aTwwJiZyLnNjcm9sbFRvcD4wfHxuPjAmJnIuc2Nyb2xsTGVmdDxyLnNjcm9sbFdpZHRoLXIub2Zmc2V0V2lkdGh8fG48MCYmci5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSksdGhpcy5fZGVib3VuY2VTY3JvbGxpbmc9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VTY3JvbGxpbmcsbW8uYWZ0ZXIoemN0LlNDUk9MTElORyksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxpbmdGcmFtZSksZGVsZXRlIHRoaXMuX3Njcm9sbGluZ0ZyYW1lLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuX3Jlb3JkZXJSb3dzKCl9KX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHI9IiIsbj10aGlzLiQudGFibGU7bi5zY3JvbGxUb3A8bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQmJihyKz0iIGJvdHRvbSIpLG4uc2Nyb2xsVG9wPjAmJihyKz0iIHRvcCIpLG4uc2Nyb2xsTGVmdDxuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgmJihyKz0iIHJpZ2h0Iiksbi5zY3JvbGxMZWZ0PjAmJihyKz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csTmksKCk9PntsZXQgaT1yLnRyaW0oKTtpLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWk/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixpKTppLmxlbmd0aD09MCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bil7dGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwO3JldHVybn1sZXQgcj10aGlzLiQuaXRlbXMsbj1yLnF1ZXJ5U2VsZWN0b3JBbGwoInRyIik7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxvPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShuKS5maWx0ZXIobD0+IWwuaGlkZGVuKVswXTtpZighbylyZXR1cm47bGV0IGE9by5pbmRleC1pLHM9QXJyYXkuZnJvbShuKS5pbmRleE9mKG8pLWE7aWYocz4wKWZvcihsZXQgbD0wO2w8cztsKyspci5hcHBlbmRDaGlsZChuW2xdKTtlbHNlIGlmKHM8MClmb3IobGV0IGw9bi5sZW5ndGgrcztsPG4ubGVuZ3RoO2wrKylyLmluc2VydEJlZm9yZShuW2xdLG5bMF0pO2lmKHRoaXMuX3NhZmFyaSl7bGV0e3RyYW5zZm9ybTpsfT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPWwpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLGxpLCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaChmdW5jdGlvbihyKXtyLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47bGV0IHI9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTtyLnNvcnQoKGksbyk9PmkuX29yZGVyLW8uX29yZGVyKTtsZXQgbj1yLnJlZHVjZSgoaSxvLGEpPT4oby5fbGFzdEZyb3plbj0hMSxvLmZyb3plbiYmIW8uaGlkZGVuP2E6aSksdm9pZCAwKTtuIT09dm9pZCAwJiYocltuXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2xldCByPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsTGVmdCksbj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbFRvcCksaT0wLG89MCxhPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwoaT1yLG89bixhPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8pLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8rYSksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7bGV0IHM9dGhpcy5fX2lzUlRMP3RoaXMuX19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0aGlzLiQudGFibGUpK3RoaXMuX19zY3JvbGxlck1ldHJpY3MuY2xpZW50V2lkdGgtdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5zY3JvbGxXaWR0aDp0aGlzLl9zY3JvbGxMZWZ0LGw9dGhpcy5fZ2V0VHJhbnNsYXRlKHMsMCk7Zm9yKGxldCBjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1sfX1fZ2V0VHJhbnNsYXRlKHIsbil7cmV0dXJuYHRyYW5zbGF0ZSgke3J9cHgsICR7bn1weClgfX07dmFyIGV1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkSXRlbXMuKikiXX1faXNTZWxlY3RlZChyKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHIsdGhpcy5zZWxlY3RlZEl0ZW1zKT4tMX1zZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocil8fCh0aGlzLnNlbGVjdGVkSXRlbXM9Wy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxyXSl9ZGVzZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocikmJih0aGlzLnNlbGVjdGVkSXRlbXM9dGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X3RvZ2dsZUl0ZW0ocil7dGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk9PT0tMT90aGlzLnNlbGVjdEl0ZW0ocik6dGhpcy5kZXNlbGVjdEl0ZW0ocil9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHIpe3RoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJihyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcyJ8fHIucGF0aD09PSJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiKSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3VwZGF0ZUl0ZW0obixuLl9pdGVtKX0pfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLnNlbGVjdEl0ZW0oci5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbShyLml0ZW0pfX07dmFyIHJ1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQocil7bGV0IG49ci50YXJnZXQ7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fdXBkYXRlU29ydGVyKG4pLHRoaXMuX19hcHBseVNvcnRlcnMoKX1fX3JlbW92ZVNvcnRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9zb3J0ZXJzPXRoaXMuX3NvcnRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgocixuKT0+ci5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9uOm51bGwsdGhpcyl9X191cGRhdGVTb3J0ZXIocil7aWYoISghci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMuaW5kZXhPZihyKT09PS0xKSl7aWYoci5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxyKSxyLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHIpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCk7ZWxzZSBpZihyLmRpcmVjdGlvbil7bGV0IG49dGhpcy5fc29ydGVycy5maWx0ZXIoaT0+aSE9cik7dGhpcy5fc29ydGVycz1bcl0sbi5mb3JFYWNoKGk9PntpLl9vcmRlcj1udWxsLGkuZGlyZWN0aW9uPW51bGx9KX19fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLGRpcmVjdGlvbjpyLmRpcmVjdGlvbn0pKX1fcmVtb3ZlQXJyYXlJdGVtKHIsbil7bGV0IGk9ci5pbmRleE9mKG4pO2k+LTEmJnIuc3BsaWNlKGksMSl9fTt2YXIgbnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKS5mb3JFYWNoKHI9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocix0aGlzLl9fZ2V0Um93TW9kZWwocikpKX1fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyhyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2gobz0+aS5jbGFzc0xpc3QucmVtb3ZlKG8pKSx0aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3Ipe2xldCBvPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcihpLl9jb2x1bW4sbik7aS5fX2dlbmVyYXRlZENsYXNzZXM9byYmby5zcGxpdCgiICIpLmZpbHRlcihhPT5hLmxlbmd0aD4wKSxpLl9fZ2VuZXJhdGVkQ2xhc3NlcyYmaS5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpfX0pfX07dmFyIFRQPXtCRVRXRUVOOiJiZXR3ZWVuIixPTl9UT1A6Im9uLXRvcCIsT05fVE9QX09SX0JFVFdFRU46Im9uLXRvcC1vci1iZXR3ZWVuIixPTl9HUklEOiJvbi1ncmlkIn0sQzA9e09OX1RPUDoib24tdG9wIixBQk9WRToiYWJvdmUiLEJFTE9XOiJiZWxvdyIsRU1QVFk6ImVtcHR5In0saXVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLHI9Pnt0aGlzLmRyb3BNb2RlJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpfSl9X29uRHJhZ1N0YXJ0KHIpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IG49ci50YXJnZXQ7aWYobi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiYmKG49bi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2xldCBzPW4uc3R5bGUudHJhbnNmb3JtO24uc3R5bGUudG9wPS90cmFuc2xhdGVZXCgoLiopXCkvLmV4ZWMocylbMV0sbi5zdHlsZS50cmFuc2Zvcm09Im5vbmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e24uc3R5bGUudG9wPSIiLG4uc3R5bGUudHJhbnNmb3JtPXN9KX1sZXQgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz9yLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uobik6ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sci5jbGllbnRYLWkubGVmdCxyLmNsaWVudFktaS50b3ApO2xldCBvPVtuXTt0aGlzLl9pc1NlbGVjdGVkKG4uX2l0ZW0pJiYobz10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKHM9PnRoaXMuX2lzU2VsZWN0ZWQocy5faXRlbSkpLmZpbHRlcihzPT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHMpKSkpLHIuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLHRoaXMuX19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKG8pKSxuLnNldEF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IixvLmxlbmd0aD4xP28ubGVuZ3RoOiIiKSx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tX2dyaWQtZHJhZy1zdGFydC14IjpgJHtyLmNsaWVudFgtaS5sZWZ0KzIwfXB4YCwiLS1fZ3JpZC1kcmFnLXN0YXJ0LXkiOmAke3IuY2xpZW50WS1pLnRvcCsxMH1weGB9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6IiIsIi0tX2dyaWQtZHJhZy1zdGFydC15IjoiIn0pfSk7bGV0IGE9bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdzdGFydCIse2RldGFpbDp7ZHJhZ2dlZEl0ZW1zOm8ubWFwKHM9PnMuX2l0ZW0pLHNldERyYWdEYXRhOihzLGwpPT5yLmRhdGFUcmFuc2Zlci5zZXREYXRhKHMsbCksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6cz0+bi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIscyl9fSk7YS5vcmlnaW5hbEV2ZW50PXIsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfX1fb25EcmFnRW5kKHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksci5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJhZ2VuZCIpO24ub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChuKX1fb25EcmFnTGVhdmUocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX1fb25EcmFnT3ZlcihyKXtpZih0aGlzLmRyb3BNb2RlKXtpZih0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwLHRoaXMuX2RyYWdPdmVySXRlbT12b2lkIDAsdGhpcy5fX2RuZEF1dG9TY3JvbGwoci5jbGllbnRZKSl7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7cmV0dXJufWxldCBuPXIuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkubG9jYWxOYW1lPT09InRyIilbMF07aWYoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9HUklEKXRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5FTVBUWTtlbHNlIGlmKCFufHxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpe2lmKG4pcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fVE9QX09SX0JFVFdFRU4pbj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PiFpLmhpZGRlbikucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XO2Vsc2UgcmV0dXJufWVsc2V7bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLl9kcm9wTG9jYXRpb249QzAuT05fVE9QLHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOKXtsZXQgbz1yLmNsaWVudFktaS50b3A8aS5ib3R0b20tci5jbGllbnRZO3RoaXMuX2Ryb3BMb2NhdGlvbj1vP0MwLkFCT1ZFOkMwLkJFTE9XfWVsc2UgdGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOJiYoci5jbGllbnRZLWkudG9wPGkuaGVpZ2h0LzM/dGhpcy5fZHJvcExvY2F0aW9uPUMwLkFCT1ZFOnIuY2xpZW50WS1pLnRvcD5pLmhlaWdodC8zKjImJih0aGlzLl9kcm9wTG9jYXRpb249QzAuQkVMT1cpKX1pZihuJiZuLmhhc0F0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIpKXt0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwO3JldHVybn1yLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1DMC5FTVBUWT90aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdvdmVyIiwhMCx0aGlzKTpuPyh0aGlzLl9kcmFnT3Zlckl0ZW09bi5faXRlbSxuLmdldEF0dHJpYnV0ZSgiZHJhZ292ZXIiKSE9PXRoaXMuX2Ryb3BMb2NhdGlvbiYmbi5zZXRBdHRyaWJ1dGUoImRyYWdvdmVyIix0aGlzLl9kcm9wTG9jYXRpb24pKTp0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX19X19kbmRBdXRvU2Nyb2xsKHIpe2lmKHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nKXJldHVybiEwO2xldCBuPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLGk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Asbz1uLXIrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQsYT1yLWkrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscz0wO2lmKGE+MD9zPWEqMjpvPjAmJihzPS1vKjIpLHMpe2xldCBsPXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9cyxsIT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKT0+dGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITEsMjApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwhMH19X19nZXRWaWV3cG9ydFJvd3MoKXtsZXQgcj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxuPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PntsZXQgbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmJvdHRvbT5yJiZvLnRvcDxufSl9X2NsZWFyRHJhZ1N0eWxlcygpe3RoaXMucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnIucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKX1fb25Ecm9wKHIpe2lmKHRoaXMuZHJvcE1vZGUpe3Iuc3RvcFByb3BhZ2F0aW9uKCksci5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPXIuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHIuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAobz0+KHt0eXBlOm8sZGF0YTpyLmRhdGFUcmFuc2Zlci5nZXREYXRhKG8pfSkpO3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBpPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcm9wIix7YnViYmxlczpyLmJ1YmJsZXMsY2FuY2VsYWJsZTpyLmNhbmNlbGFibGUsZGV0YWlsOntkcm9wVGFyZ2V0SXRlbTp0aGlzLl9kcmFnT3Zlckl0ZW0sZHJvcExvY2F0aW9uOnRoaXMuX2Ryb3BMb2NhdGlvbixkcmFnRGF0YTpufX0pO2kub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChpKX19X19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKHIpe3JldHVybiByLm1hcChuPT5BcnJheS5mcm9tKG4uY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4mJmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik9PT0tMSkuc29ydCgoaSxvKT0+aS5fY29sdW1uLl9vcmRlcj5vLl9jb2x1bW4uX29yZGVyPzE6LTEpLm1hcChpPT5pLl9jb250ZW50LnRleHRDb250ZW50LnRyaW0oKSkuZmlsdGVyKGk9PmkpLmpvaW4oIgkiKSkuam9pbihgCmApfV9kcmFnRHJvcEFjY2Vzc0NoYW5nZWQoKXt0aGlzLmZpbHRlckRyYWdBbmREcm9wKCl9ZmlsdGVyRHJhZ0FuZERyb3AoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT57dGhpcy5fZmlsdGVyRHJhZ0FuZERyb3Aocix0aGlzLl9fZ2V0Um93TW9kZWwocikpfSl9X2ZpbHRlckRyYWdBbmREcm9wKHIsbil7bGV0IGk9IXRoaXMucm93c0RyYWdnYWJsZXx8dGhpcy5kcmFnRmlsdGVyJiYhdGhpcy5kcmFnRmlsdGVyKG4pLG89IXRoaXMuZHJvcE1vZGV8fHRoaXMuZHJvcEZpbHRlciYmIXRoaXMuZHJvcEZpbHRlcihuKTtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLm1hcChzPT5zLl9jb250ZW50KS5mb3JFYWNoKHM9PntpP3MucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTpzLnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWctZGlzYWJsZWQiLGksciksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcm9wLWRpc2FibGVkIixvLHIpfX07dmFyIG91ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19oZWFkZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9pdGVtc0ZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2Zvb3RlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX25hdmlnYXRpbmdJc0hpZGRlbjpCb29sZWFuLF9mb2N1c2VkSXRlbUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfZm9jdXNlZENvbHVtbk9yZGVyOk51bWJlcixpbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxvYnNlcnZlcjoiX2ludGVyYWN0aW5nQ2hhbmdlZCJ9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksISh0aGlzLl9pb3N8fHRoaXMuX2FuZHJvaWQpJiYodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5faXNNb3VzZWRvd249ITB9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpfV9mb2N1c2FibGVDaGFuZ2VkKHIsbil7biYmbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxyJiZ0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHIpfV9pbnRlcmFjdGluZ0NoYW5nZWQoKXt0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2hlYWRlckZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9pdGVtc0ZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9mb290ZXJGb2N1c2FibGUpfV9vbktleURvd24ocil7bGV0IG49ci5rZXksaTtzd2l0Y2gobil7Y2FzZSJBcnJvd1VwIjpjYXNlIkFycm93RG93biI6Y2FzZSJBcnJvd0xlZnQiOmNhc2UiQXJyb3dSaWdodCI6Y2FzZSJQYWdlVXAiOmNhc2UiUGFnZURvd24iOmNhc2UiSG9tZSI6Y2FzZSJFbmQiOmk9Ik5hdmlnYXRpb24iO2JyZWFrO2Nhc2UiRW50ZXIiOmNhc2UiRXNjYXBlIjpjYXNlIkYyIjppPSJJbnRlcmFjdGlvbiI7YnJlYWs7Y2FzZSJUYWIiOmk9IlRhYiI7YnJlYWs7Y2FzZSIgIjppPSJTcGFjZSI7YnJlYWt9dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksdGhpcy5pbnRlcmFjdGluZyYmaSE9PSJJbnRlcmFjdGlvbiImJihpPXZvaWQgMCksaSYmdGhpc1tgX29uJHtpfUtleURvd25gXShyLG4pfV9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocil7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT5pLmluZGV4PT09cilbMF18fHRoaXMuX3Njcm9sbFRvSW5kZXgocil9X29uTmF2aWdhdGlvbktleURvd24ocixuKXt0aGlzLl9zY3JvbGxIYW5kbGVyKCksci5wcmV2ZW50RGVmYXVsdCgpO2Z1bmN0aW9uIGkoQil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoQi5wYXJlbnROb2RlLmNoaWxkcmVuLEIpfWxldCBvPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMSxhPTAscz0wO3N3aXRjaChuKXtjYXNlIkFycm93UmlnaHQiOmE9dGhpcy5fX2lzUlRMPy0xOjE7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmE9dGhpcy5fX2lzUlRMPzE6LTE7YnJlYWs7Y2FzZSJIb21lIjphPS0xLzAsci5jdHJsS2V5JiYocz0tMS8wKTticmVhaztjYXNlIkVuZCI6YT0xLzAsci5jdHJsS2V5JiYocz0xLzApO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpzPTE7YnJlYWs7Y2FzZSJBcnJvd1VwIjpzPS0xO2JyZWFrO2Nhc2UiUGFnZURvd24iOnM9bzticmVhaztjYXNlIlBhZ2VVcCI6cz0tbzticmVha31sZXQgbD1yLmNvbXBvc2VkUGF0aCgpWzBdLGM9aShsKSx1PXRoaXMuX2VsZW1lbnRNYXRjaGVzKGwsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxoPWwucGFyZW50Tm9kZSxmPWgucGFyZW50Tm9kZSxwPShmPT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6Zi5jaGlsZHJlbi5sZW5ndGgpLTEsZD1mPT09dGhpcy4kLml0ZW1zP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXghPT12b2lkIDA/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpoLmluZGV4OmkoaCksZz1NYXRoLm1heCgwLE1hdGgubWluKGQrcyxwKSksXz0hMTtpZihmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1oLl9pdGVtLEk9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGcpO3U/Xz1zPT09MDpfPXM9PT0xJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoQil8fHM9PT0tMSYmZyE9PWQmJnRoaXMuX2lzRGV0YWlsc09wZW5lZChJKSxfIT09dSYmKHM9PT0xJiZffHxzPT09LTEmJiFfKSYmKGc9ZCl9aWYoZiE9PXRoaXMuJC5pdGVtcyl7aWYoZz5kKWZvcig7ZzxwJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZysrO2Vsc2UgaWYoZzxkKWZvcig7Zz4wJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZy0tfXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj09PXZvaWQgMCYmKHU/dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPTA6dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXRoaXMuX2dldENvbHVtbnMoZixkKS5maWx0ZXIoQj0+IUIuaGlkZGVuKVtjXS5fb3JkZXIpO2xldCB5PXRoaXMuX2dldENvbHVtbnMoZixnKS5maWx0ZXIoQj0+IUIuaGlkZGVuKSx4PXkubWFwKEI9PkIuX29yZGVyKS5zb3J0KChCLEkpPT5CLUkpLGI9eC5sZW5ndGgtMSxTPXguaW5kZXhPZih4LnNsaWNlKDApLnNvcnQoKEIsSSk9Pk1hdGguYWJzKEItdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyKS1NYXRoLmFicyhJLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcikpWzBdKSxDPXM9PT0wJiZ1P1M6TWF0aC5tYXgoMCxNYXRoLm1pbihTK2EsYikpO0MhPT1TJiYodGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCksZj09PXRoaXMuJC5pdGVtcyYmdGhpcy5fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KGcpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IGs9eS5yZWR1Y2UoKEIsSSxMKT0+KEJbSS5fb3JkZXJdPUwsQikse30pW3hbQ11dLE89Zj09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKGYuY2hpbGRyZW4pLmZpbHRlcihCPT5CLmluZGV4PT09ZylbMF06Zi5jaGlsZHJlbltnXTtpZighTylyZXR1cm47bGV0IEQ9Xz9BcnJheS5mcm9tKE8uY2hpbGRyZW4pLmZpbHRlcihCPT50aGlzLl9lbGVtZW50TWF0Y2hlcyhCLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpWzBdOk8uY2hpbGRyZW5ba107aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKEQpLGY9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PWcpLGY9PT10aGlzLiQuaXRlbXMpe2xldCBCPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxMPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO0IuYm90dG9tPkk/KHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPUIuYm90dG9tLUksdGhpcy5fc2Nyb2xsSGFuZGxlcigpKTpCLnRvcDxMJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcC09TC1CLnRvcCx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfUQuZm9jdXMoKX1fb25JbnRlcmFjdGlvbktleURvd24ocixuKXtsZXQgaT1yLmNvbXBvc2VkUGF0aCgpWzBdLG89aS5sb2NhbE5hbWU9PT0iaW5wdXQiJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KGkudHlwZSksYTtzd2l0Y2gobil7Y2FzZSJFbnRlciI6YT10aGlzLmludGVyYWN0aW5nPyFvOiEwO2JyZWFrO2Nhc2UiRXNjYXBlIjphPSExO2JyZWFrO2Nhc2UiRjIiOmE9IXRoaXMuaW50ZXJhY3Rpbmc7YnJlYWt9bGV0e2NlbGw6c309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7aWYodGhpcy5pbnRlcmFjdGluZyE9PWEmJnMhPT1udWxsKWlmKGEpe2xldCBsPXMuX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8cy5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtsJiYoci5wcmV2ZW50RGVmYXVsdCgpLGwuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCxzLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITEpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQocixuKXtsZXQgaT1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF0sbz1pLmluZGV4T2Yocik7Zm9yKG8rPW47bz49MCYmbzw9aS5sZW5ndGgtMSYmKCFpW29dfHxpW29dLnBhcmVudE5vZGUuaGlkZGVuKTspbys9bjtyZXR1cm4gaVtvXX1fb25UYWJLZXlEb3duKHIpe2xldCBuPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoci5jb21wb3NlZFBhdGgoKVswXSxyLnNoaWZ0S2V5Py0xOjEpO2lmKG49PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBpPW4sbz10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxvLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7bGV0IGE9QXJyYXkuZnJvbShvLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxzPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+bC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpWzBdO3MmJihpPXMuY2hpbGRyZW5bYV0pfXIucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X29uU3BhY2VLZXlEb3duKHIpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdOyghbi5fY29udGVudHx8IW4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAocil7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdChyLmtleSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO2lmKG4uX2NvbnRlbnQmJm4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCBpPXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7bi5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsaSx0aGlzKX19X29uRm9jdXNJbihyKXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO249PT10aGlzLiQudGFibGV8fG49PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KG4sbj09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uRm9jdXNPdXQocil7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyhyKX1fb25DZWxsRm9jdXNJbihyKXtsZXR7c2VjdGlvbjpuLGNlbGw6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksbiYmaSYmKHRoaXMuX2FjdGl2ZVJvd0dyb3VwPW4sdGhpcy4kLmhlYWRlcj09PW4/dGhpcy5faGVhZGVyRm9jdXNhYmxlPWk6dGhpcy4kLml0ZW1zPT09bj90aGlzLl9pdGVtc0ZvY3VzYWJsZT1pOnRoaXMuJC5mb290ZXI9PT1uJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWkpLGkuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSksaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1cyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpLHRoaXMuX2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil9X29uQ2VsbEZvY3VzT3V0KHIpe3IuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpPT09MyYmci5jb21wb3NlZFBhdGgoKVswXS5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c291dCIse2J1YmJsZXM6ITF9KSl9X2RldGVjdEludGVyYWN0aW5nKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCkuc29tZShpPT5pLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhuKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleChyKXtsZXR7c2VjdGlvbjpuLHJvdzppfT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbihyKTtuPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1pLmluZGV4KX1fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKXtpZighcilyZXR1cm47bGV0IG49dGhpcy5fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQociksaT10aGlzLmludGVyYWN0aW5nJiZuPT09dGhpcy5fYWN0aXZlUm93R3JvdXA7ci50YWJJbmRleD1pPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHIsbil7ci5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLG49PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnMocixuKXtsZXQgaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiByPT09dGhpcy4kLmhlYWRlcj9pPW46cj09PXRoaXMuJC5mb290ZXImJihpPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtbiksdGhpcy5fY29sdW1uVHJlZVtpXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbilbMF0pLHRoaXMuJC5pdGVtcy5maXJzdEVsZW1lbnRDaGlsZCl7bGV0IHI9dGhpcy5faXRlcmF0ZUl0ZW1zKChuLGkpPT57aWYodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg9PT1pKXJldHVybiB0aGlzLiQuaXRlbXMuY2hpbGRyZW5bbl19KTtyJiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5maWx0ZXIobj0+IW4uaGlkZGVuKVswXSl9dGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKX1fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHIpe2lmKHIuaGFzQXR0cmlidXRlKCJmcm96ZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXMociwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKXJldHVybjtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5wYXJlbnROb2RlLG89QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpLGE9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5sZWZ0LGw9YS5yaWdodDtmb3IobGV0IGM9by0xO2M+PTA7Yy0tKXtsZXQgdT1pLmNoaWxkcmVuW2NdO2lmKCEodS5oYXNBdHRyaWJ1dGUoImhpZGRlbiIpfHx0aGlzLl9lbGVtZW50TWF0Y2hlcyh1LCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpJiZ1Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIikpe3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDticmVha319Zm9yKGxldCBjPW8rMTtjPGkuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtsPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319bi5sZWZ0PHMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLmxlZnQtcykpLG4ucmlnaHQ+bCYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKG4ucmlnaHQtbCkpfV9lbGVtZW50TWF0Y2hlcyhyLG4pe3JldHVybiByLm1hdGNoZXM/ci5tYXRjaGVzKG4pOkFycmF5LmZyb20oci5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwobikpLmluZGV4T2YocikhPT0tMX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocil7bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW4uaW5kZXhPZih0aGlzLiQudGFibGUpLG89aT49MT9uW2ktMV06bnVsbCxhPWk+PTI/bltpLTJdOm51bGwscz1pPj0zP25baS0zXTpudWxsO3JldHVybntzZWN0aW9uOm8scm93OmEsY2VsbDpzfX1fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQocil7cmV0dXJuIHI9PT10aGlzLl9oZWFkZXJGb2N1c2FibGU/dGhpcy4kLmhlYWRlcjpyPT09dGhpcy5faXRlbXNGb2N1c2FibGU/dGhpcy4kLml0ZW1zOnI9PT10aGlzLl9mb290ZXJGb2N1c2FibGU/dGhpcy4kLmZvb3RlcjpudWxsfX07ZnVuY3Rpb24gYXVlKGUsdCxyKXtsZXQgbj0xO2UuZm9yRWFjaChpPT57biUxMD09PTAmJm4rKyxpLl9vcmRlcj1yK24qdCxuKyt9KX12YXIgc3VlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLEVtKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUocil7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmci5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQocil7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9vblRyYWNrU3RhcnQoe2RldGFpbDp7eDpyLnRvdWNoZXNbMF0uY2xpZW50WCx5OnIudG91Y2hlc1swXS5jbGllbnRZfX0pfSwxMDApfV9vblRvdWNoTW92ZShyKXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZyLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudChyKXtpZihyLmRldGFpbC5zdGF0ZT09PSJzdGFydCIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQuaGVhZGVyKS0yXTtpZighaXx8IWkuX2NvbnRlbnR8fGkuX2NvbnRlbnQuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLiQuc2Nyb2xsZXIuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSlyZXR1cm47dGhpcy5fdG91Y2hEZXZpY2V8fHRoaXMuX29uVHJhY2tTdGFydChyKX1lbHNlIHIuZGV0YWlsLnN0YXRlPT09InRyYWNrIj90aGlzLl9vblRyYWNrKHIpOnIuZGV0YWlsLnN0YXRlPT09ImVuZCImJnRoaXMuX29uVHJhY2tFbmQocil9X29uVHJhY2tTdGFydChyKXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgmJnIuY29tcG9zZWRQYXRoKCk7aWYobiYmbi5maWx0ZXIobz0+by5oYXNBdHRyaWJ1dGUmJm8uaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSlbMF0pcmV0dXJuO2xldCBpPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIik9PT0tMSkpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49aS5fY29sdW1uO3RoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudD09PTE7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KGkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2socil7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2xldCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighbilyZXR1cm47bGV0IGk9dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKG4sdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oaSxyLmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oci5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT9yLmRldGFpbC55LTUwOnIuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1yLmRldGFpbC54fV9vblRyYWNrRW5kKCl7IXRoaXMuX2RyYWdnZWRDb2x1bW58fCh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKHI9PiFyLmhpZGRlbikuc29ydCgocixuKT0+ci5fb3JkZXItbi5fb3JkZXIpfV9jZWxsRnJvbVBvaW50KHIsbil7cj1yfHwwLG49bnx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7bGV0IGk9dGhpcy5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQocixuKTtpZih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExLHRoaXMuJC5zY3JvbGxlciksaSYmaS5fY29sdW1uKXJldHVybiBpfV91cGRhdGVHaG9zdFBvc2l0aW9uKHIsbil7bGV0IGk9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci1pLndpZHRoLzIsYT1uLWkuaGVpZ2h0LzIscz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGw9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1zLShpLmxlZnQtbyksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9bC0oaS50b3AtYSksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X3VwZGF0ZUdob3N0KHIpe2xldCBuPXRoaXMuX3Jlb3JkZXJHaG9zdDtuLnRleHRDb250ZW50PXIuX2NvbnRlbnQuaW5uZXJUZXh0O2xldCBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpO3JldHVyblsiYm94U2l6aW5nIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsImFsaWduSXRlbXMiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZmxleC1kaXJlY3Rpb24iLCJvdmVyZmxvdyJdLmZvckVhY2gobz0+bi5zdHlsZVtvXT1pW29dKSxufV91cGRhdGVPcmRlcnMocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHwoclswXS5mb3JFYWNoKGk9PmkuX29yZGVyPTApLGF1ZShyWzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHIsbil7QXJyYXkuZnJvbShyLnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcihpPT4vY29sdW1uLy50ZXN0KGkubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChpLHIpKS5mb3JFYWNoKGk9PmkuX3Jlb3JkZXJTdGF0dXM9bil9X2F1dG9TY3JvbGxlcigpe2lmKHRoaXMuX2xhc3REcmFnQ2xpZW50WCl7bGV0IHI9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3I+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9ci8xMDpuPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09bi8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZChyLG4pe2lmKHImJm4pe2xldCBpPXIhPT1uLG89ci5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50LGE9ci5mcm96ZW49PT1uLmZyb3plbjtyZXR1cm4gaSYmbyYmYX19X2lzU3dhcHBhYmxlQnlQb3NpdGlvbihyLG4pe2xldCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcihzPT5yLmNvbnRhaW5zKHMuX2NvbHVtbikpWzBdLG89dGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJ0cjpub3QoW2hpZGRlbl0pIFtyZW9yZGVyLXN0YXR1cz1kcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEubGVmdD5vLmxlZnQ/bj5hLnJpZ2h0LW8ud2lkdGg6bjxhLmxlZnQrby53aWR0aH1fc3dhcENvbHVtbk9yZGVycyhyLG4pe2xldCBpPXIuX29yZGVyO3IuX29yZGVyPW4uX29yZGVyLG4uX29yZGVyPWksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpfV9nZXRUYXJnZXRDb2x1bW4ocixuKXtpZihyJiZuKXtsZXQgaT1yLl9jb2x1bW47Zm9yKDtpLnBhcmVudEVsZW1lbnQhPT1uLnBhcmVudEVsZW1lbnQmJmkhPT10aGlzOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaS5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50P2k6ci5fY29sdW1ufX19O3ZhciBpaHI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuO2xldCByPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gciYmci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiYmci5yZXNpemFibGV8fCExfX0sX2hlYWRlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2Zvb3RlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sZnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGRlbjp7dHlwZTpCb29sZWFufSxoZWFkZXI6e3R5cGU6U3RyaW5nfSx0ZXh0QWxpZ246e3R5cGU6U3RyaW5nfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXI6TnVtYmVyLF9yZW9yZGVyU3RhdHVzOkJvb2xlYW4sX2VtcHR5Q2VsbHM6QXJyYXksX2hlYWRlckNlbGw6T2JqZWN0LF9mb290ZXJDZWxsOk9iamVjdCxfZ3JpZDpPYmplY3QsaGVhZGVyUmVuZGVyZXI6RnVuY3Rpb24sZm9vdGVyUmVuZGVyZXI6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfd2lkdGhDaGFuZ2VkKHdpZHRoLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mcm96ZW5DaGFuZ2VkKGZyb3plbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93LCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9wYXRoT3JIZWFkZXJDaGFuZ2VkKHBhdGgsIGhlYWRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKiwgcmVuZGVyZXIsIGhlYWRlclJlbmRlcmVyLCBfYm9keVRlbXBsYXRlLCBfaGVhZGVyVGVtcGxhdGUpIiwiX3RleHRBbGlnbkNoYW5nZWQodGV4dEFsaWduLCBfY2VsbHMuKiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsKSIsIl9vcmRlckNoYW5nZWQoX29yZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiLCJfc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihfYm9keVRlbXBsYXRlLCByZW5kZXJlciwgX2NlbGxzLCBfY2VsbHMuKikiLCJfc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKF9oZWFkZXJUZW1wbGF0ZSwgaGVhZGVyUmVuZGVyZXIsIF9oZWFkZXJDZWxsKSIsIl9zZXRGb290ZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2Zvb3RlclRlbXBsYXRlLCBmb290ZXJSZW5kZXJlciwgX2Zvb3RlckNlbGwpIiwiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlLCBfaGVhZGVyQ2VsbCkiLCJfcmVvcmRlclN0YXR1c0NoYW5nZWQoX3Jlb3JkZXJTdGF0dXMsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2hpZGRlbkNoYW5nZWQoaGlkZGVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9ib2R5VGVtcGxhdGUmJih0aGlzLl9ib2R5VGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5faGVhZGVyVGVtcGxhdGUmJih0aGlzLl9oZWFkZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9mb290ZXJUZW1wbGF0ZSYmKHRoaXMuX2Zvb3RlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLl9ib2R5VGVtcGxhdGV8fHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuY2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKHI9PntyLl9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQoci5fY29udGVudCl9KX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlJiZyLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoci5fY29udGVudCl9KX0pLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCByPXRoaXM7Zm9yKDtyJiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdChyLmxvY2FsTmFtZSk7KXI9ci5hc3NpZ25lZFNsb3Q/ci5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTpyLnBhcmVudE5vZGU7cmV0dXJuIHJ8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIocj0+cil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHZoKHRoaXMsKCk9Pnt0aGlzLl9oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLl9mb290ZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKSx0aGlzLl9ib2R5VGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpfSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHIsbil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMuX2dyaWQsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkuX2luc3RhbmNlUHJvcHM9bnx8aS5faW5zdGFuY2VQcm9wcyxpLnRlbXBsYXRlPXIsci50ZW1wbGF0aXplcj1pfXJldHVybiByfV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHIsbixpKXtsZXQgbz1bbi5fY29udGVudCx0aGlzXTtpJiZpLml0ZW0mJm8ucHVzaChpKSxyLmFwcGx5KHRoaXMsbyl9X19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpe2lmKCF0aGlzLmhpZGRlbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSIpO2kuZm9yRWFjaChvPT57bGV0IGE9dGhpcy5fZ3JpZC5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCk7aWYobilvLl9yZW5kZXJlcj1uLChhLml0ZW18fG49PT10aGlzLmhlYWRlclJlbmRlcmVyfHxuPT09dGhpcy5mb290ZXJSZW5kZXJlcikmJnRoaXMuX19ydW5SZW5kZXJlcihuLG8sYSk7ZWxzZSBpZihvLl90ZW1wbGF0ZSE9PXIpe28uX3RlbXBsYXRlPXIsby5fY29udGVudC5pbm5lckhUTUw9IiIsci50ZW1wbGF0aXplci5fZ3JpZD1yLnRlbXBsYXRpemVyLl9ncmlkfHx0aGlzLl9ncmlkO2xldCBzPXIudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtvLl9jb250ZW50LmFwcGVuZENoaWxkKHMucm9vdCksby5faW5zdGFuY2U9cyxhLml0ZW0mJm8uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoYSl9fSl9fV9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpfV9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpeyhyfHxuKSYmaSYmdGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKX1fc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJih0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixbaV0pLHRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCkpfV9zZWxlY3RGaXJzdFRlbXBsYXRlKHI9ITEsbj0hMSl7cmV0dXJuIHZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJoZWFkZXIiKT09PXImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb290ZXIiKT09PW4pWzBdfV9maW5kVGVtcGxhdGUocixuKXtsZXQgaT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKHIsbik7cmV0dXJuIGkmJnRoaXMuZGF0YUhvc3QmJihpLl9yb290RGF0YUhvc3Q9dGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0KSxpfV9mbGV4R3Jvd0NoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmbGV4R3JvdyIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5mbGV4R3Jvdz1yKX1fb3JkZXJDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5vcmRlcj1yKX1fd2lkdGhDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUud2lkdGg9ciksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93JiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3coKX1fZnJvemVuQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZyb3plbiIsciksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIscixuKSksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkJiZ0aGlzLl9ncmlkLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX1fbGFzdEZyb3plbkNoYW5nZWQocil7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtZnJvemVuIixyLG4pKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49cil9X3BhdGhPckhlYWRlckNoYW5nZWQocixuLGksbyxhLHMsbCxjLHUpe2xldCBoPW4hPT12b2lkIDA7aWYoIWwmJiF1JiZoJiZpJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCxuKSxyJiZhLnZhbHVlKXtpZighcyYmIWMpe2xldCBmPShwLGQse2l0ZW06Z30pPT50aGlzLl9fc2V0VGV4dENvbnRlbnQocCx0aGlzLmdldChyLGcpKTt0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCxmLGEudmFsdWUpfSFsJiYhdSYmIWgmJmkmJm4hPT1udWxsJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCx0aGlzLl9nZW5lcmF0ZUhlYWRlcihyKSl9aSYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkoaS5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHIsbil7ci50ZXh0Q29udGVudCE9PW4mJihyLnRleHRDb250ZW50PW4pfV9nZW5lcmF0ZUhlYWRlcihyKXtyZXR1cm4gci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sbj0+bi50b1VwcGVyQ2FzZSgpKX1fdG9nZ2xlQXR0cmlidXRlKHIsbixpKXtpLmhhc0F0dHJpYnV0ZShyKT09PSFuJiYobj9pLnNldEF0dHJpYnV0ZShyLCIiKTppLnJlbW92ZUF0dHJpYnV0ZShyKSl9X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIixyKSl9X3Jlc2l6YWJsZUNoYW5nZWQocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHxuJiZbbl0uY29uY2F0KHRoaXMuX2VtcHR5Q2VsbHMpLmZvckVhY2goaT0+e2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3RvcignW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0nKTtpZihvJiZpLnJlbW92ZUNoaWxkKG8pLHIpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGkuYXBwZW5kQ2hpbGQoYSl9fX0pfV90ZXh0QWxpZ25DaGFuZ2VkKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuO2lmKFsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHIpPT09LTEpe2NvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO3JldHVybn1sZXQgbjtnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2dyaWQpLmRpcmVjdGlvbj09PSJsdHIiP3I9PT0ic3RhcnQiP249ImxlZnQiOnI9PT0iZW5kIiYmKG49InJpZ2h0Iik6cj09PSJzdGFydCI/bj0icmlnaHQiOnI9PT0iZW5kIiYmKG49ImxlZnQiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKGk9PntpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1yLGdldENvbXB1dGVkU3R5bGUoaS5fY29udGVudCkudGV4dEFsaWduIT09ciYmKGkuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPW4pfSl9X2hpZGRlbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJoaWRkZW4iLHIpLCEhciE9ISF0aGlzLl9wcmV2aW91c0hpZGRlbiYmdGhpcy5fZ3JpZCYmKHI9PT0hMCYmdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bi5fY29udGVudC5wYXJlbnROb2RlJiZuLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobi5fY29udGVudCl9KSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPXNyLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsTmksKCk9Pnt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlKHRoaXMuX2dyaWQuX2NvbHVtblRyZWUpfSksdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbiYmdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX2dyaWQubm90aWZ5UmVzaXplJiZ0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uJiZ0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpKSx0aGlzLl9wcmV2aW91c0hpZGRlbj1yfX0sZVY9Y2xhc3MgZXh0ZW5kcyBpaHIoWkgobXQpKXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3dpZHRoOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwcHgifSxmbGV4R3Jvdzp7dHlwZTpOdW1iZXIsdmFsdWU6MX0scmVuZGVyZXI6RnVuY3Rpb24scGF0aDp7dHlwZTpTdHJpbmd9LGF1dG9XaWR0aDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm9keVRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2NlbGxzOkFycmF5fX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTt2YXIgb2hyPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KSgpLHJWPWNsYXNzIGV4dGVuZHMgSkgoWEgoJGNlKFdjZShLY2UoR2NlKHR1ZShldWUocnVlKFFjZShvdWUocWNlKEpjZShzdWUoWWNlKFpjZShpdWUobnVlKHRWKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8bmF2aWdhdG9yLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOm9ocn0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbiksdD09PSJkaXIiJiYodGhpcy5fX2lzUlRMPW49PT0icnRsIix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHQ9PnQuY2xpZW50SGVpZ2h0KS5sZW5ndGh9X19pdGVtc1JlY2VpdmVkKCl7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQmJiF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCkmJih0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpfV9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KXt0LmZvckVhY2gocj0+e3Iud2lkdGg9ImF1dG8iLHIuX29yaWdGbGV4R3Jvdz1yLmZsZXhHcm93LHIuZmxleEdyb3c9MH0pLHQuZm9yRWFjaChyPT57ci5fY3VycmVudFdpZHRoPTAsci5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bGV0IGk9bi5vZmZzZXRXaWR0aCsxO3IuX2N1cnJlbnRXaWR0aD1NYXRoLm1heChyLl9jdXJyZW50V2lkdGgsaSl9KX0pLHQuZm9yRWFjaChyPT57ci53aWR0aD1gJHtyLl9jdXJyZW50V2lkdGh9cHhgLHIuZmxleEdyb3c9ci5fb3JpZ0ZsZXhHcm93LHIuX2N1cnJlbnRXaWR0aD12b2lkIDAsci5fb3JpZ0ZsZXhHcm93PXZvaWQgMH0pfXJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl7aWYoISF0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7bGV0IHQ9dGhpcy5fZ2V0Q29sdW1ucygpLmZpbHRlcihyPT4hci5oaWRkZW4mJnIuYXV0b1dpZHRoKTt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KX19X2NyZWF0ZVNjcm9sbGVyUm93cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO2kuc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl91cGRhdGVSb3coaSx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLCJib2R5IiwhMSwhMCksci5wdXNoKGkpfXJldHVybiB0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLmZvckVhY2gobj0+bi5pc0Nvbm5lY3RlZCYmbi5ub3RpZnlQYXRoJiZuLm5vdGlmeVBhdGgoIl9jZWxscy4qIixuLl9jZWxscykpLG1ndCh0aGlzLCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pLHJ9X2dldFJvd1RhcmdldCgpe3JldHVybiB0aGlzLiQuaXRlbXN9X2NyZWF0ZUNlbGwodCl7bGV0IHI9dGhpcy5fY29udGVudEluZGV4PXRoaXMuX2NvbnRlbnRJbmRleCsxfHwwLG49InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iK3IsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsbik7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtvLmlkPW4ucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksby5zZXRBdHRyaWJ1dGUoInJvbGUiLHQ9PT0idGQiPyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIm5hbWUiLG4pLG8uYXBwZW5kQ2hpbGQoYSksby5fY29udGVudD1pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2xldCBzPSgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCEwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKX0pfSksb31fdXBkYXRlUm93KHQscixuLGksbyl7bj1ufHwiYm9keSI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChzPT5zLl92YWNhbnQ9ITApLHQuaW5uZXJIVE1MPSIiLHQuaWQhPT0ic2l6ZXIiJiYodC5oaWRkZW49ITApLHIuZmlsdGVyKHM9PiFzLmhpZGRlbikuZm9yRWFjaCgocyxsLGMpPT57bGV0IHU7aWYobj09PSJib2R5Iil7aWYocy5fY2VsbHM9cy5fY2VsbHN8fFtdLHU9cy5fY2VsbHMuZmlsdGVyKGg9PmguX3ZhY2FudClbMF0sdXx8KHU9dGhpcy5fY3JlYXRlQ2VsbCgidGQiKSxzLl9jZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgYm9keS1jZWxsIiksdC5hcHBlbmRDaGlsZCh1KSxsPT09Yy5sZW5ndGgtMSYmKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpKXt0aGlzLl9kZXRhaWxzQ2VsbHM9dGhpcy5fZGV0YWlsc0NlbGxzfHxbXTtsZXQgaD10aGlzLl9kZXRhaWxzQ2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7dGhpcy5fZGV0YWlsc0NlbGxzLmluZGV4T2YoaCk9PT0tMSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goaCksaC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKGguX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGgpLHQuYXBwZW5kQ2hpbGQoaCksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsaCksaC5fdmFjYW50PSExfXMubm90aWZ5UGF0aCYmIW8mJnMubm90aWZ5UGF0aCgiX2NlbGxzLioiLHMuX2NlbGxzKX1lbHNle2xldCBoPW49PT0iaGVhZGVyIj8idGgiOiJ0ZCI7aXx8cy5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj8odT1zW2BfJHtufUNlbGxgXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHNbYF8ke259Q2VsbGBdPXUpOihzLl9lbXB0eUNlbGxzPXMuX2VtcHR5Q2VsbHN8fFtdLHU9cy5fZW1wdHlDZWxscy5maWx0ZXIoZj0+Zi5fdmFjYW50KVswXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHMuX2VtcHR5Q2VsbHMuaW5kZXhPZih1KT09PS0xJiZzLl9lbXB0eUNlbGxzLnB1c2godSkpLHUuc2V0QXR0cmlidXRlKCJwYXJ0IixgY2VsbCAke259LWNlbGxgKSx0aGlzLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KX11Ll9jb250ZW50LnBhcmVudEVsZW1lbnR8fGEuYXBwZW5kQ2hpbGQodS5fY29udGVudCksdS5fdmFjYW50PSExLHUuX2NvbHVtbj1zfSksdGhpcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl9X191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KHQpe2lmKCF0KXJldHVybjtsZXQgcj1BcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZpbHRlcihuPT57bGV0IGk9bi5fY29sdW1uO2lmKGkuX2VtcHR5Q2VsbHMmJmkuX2VtcHR5Q2VsbHMuaW5kZXhPZihuKT4tMSlyZXR1cm4hMTtpZih0LnBhcmVudEVsZW1lbnQ9PT10aGlzLiQuaGVhZGVyKXtpZihpLmhlYWRlclJlbmRlcmVyfHxpLl9oZWFkZXJUZW1wbGF0ZSlyZXR1cm4hMDtpZihpLmhlYWRlcj09PW51bGwpcmV0dXJuITE7aWYoaS5wYXRofHxpLmhlYWRlciE9PXZvaWQgMClyZXR1cm4hMH1lbHNlIGlmKGkuZm9vdGVyUmVuZGVyZXJ8fGkuX2Zvb3RlclRlbXBsYXRlKXJldHVybiEwfSk7dC5oaWRkZW4hPT0hci5sZW5ndGgmJih0LmhpZGRlbj0hci5sZW5ndGgsdGhpcy5ub3RpZnlSZXNpemUoKSl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LHIpe3RoaXMuX3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsciksdGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QiLHI9PT0wLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgib2RkIixyJTIsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1Jvd2luZGV4KHQsciksdGhpcy5fZ2V0SXRlbShyLHQpKX1fY29sdW1uVHJlZUNoYW5nZWQodCl7dGhpcy5fcmVuZGVyQ29sdW1uVHJlZSh0KSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9X3JlbmRlckNvbHVtblRyZWUodCl7Zm9yKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtyLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZChyKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO24uc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93Iiksbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuZm9vdGVyLmFwcGVuZENoaWxkKG4pfWZvcig7dGhpcy4kLmhlYWRlci5jaGlsZHJlbi5sZW5ndGg+dC5sZW5ndGg7KXRoaXMuJC5oZWFkZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCksdGhpcy4kLmZvb3Rlci5yZW1vdmVDaGlsZCh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkKTtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMS1uXSwiZm9vdGVyIixuPT09MCkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKX1fdXBkYXRlSXRlbSh0LHIpe3QuX2l0ZW09cjtsZXQgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChyKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsciksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpZihpLl9yZW5kZXJlcil7bGV0IG89aS5fY29sdW1ufHx0aGlzO2kuX3JlbmRlcmVyLmNhbGwobyxpLl9jb250ZW50LG8sbil9ZWxzZSBpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCxpLl9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCxpLl9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCxpLl9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCxpLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pLHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cyxtby5hZnRlcigxKSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXt0LmFuaW1hdGlvbk5hbWUuaW5kZXhPZigidmFhZGluLWdyaWQtYXBwZWFyIik9PT0wJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCksdGhpcy4kLnRhYmxlLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9KSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LHIsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hciYmKHI/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISEodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCh0PT57dC5mb3JFYWNoKHI9PnIuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKX0pLHRoaXMuX3VwZGF0ZSgpKX1ub3RpZnlSZXNpemUoKXtzdXBlci5ub3RpZnlSZXNpemUoKX1faGVpZ2h0QnlSb3dzQ2hhbmdlZCh0LHIpeyh0fHxyKSYmdGhpcy5ub3RpZnlSZXNpemUoKX1fX2ZvcmNlUmVmbG93KCl7dGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3c9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3csTmksKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJWLmlzLHJWKTtmdW5jdGlvbiBsdWUoZSx0KXtyZXR1cm4gRGd0KGUsdCl9dmFyIGMxPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQscixuKXtyZXR1cm4gcj9NaShuKHQscikse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQscixuKXtyZXR1cm4gcj9uKHQscik6IiJ9X2Nzdk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uanNvbmA6IiJ9fTtjMS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGMxLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjMS5wcm90b3R5cGUsInVybEZuIix2b2lkIDApO2MxPUUoW3l0KCJ0Zi1kb3dubG9hZGVyIildLGMxKTt2YXIgYWhyPTY0LGdsaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEduPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2lmKG49PW51bGwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIscik7cmV0dXJufWxldCBpPW4ubWFwKGE9Pih7d2FsbF90aW1lOm5ldyBEYXRlKGFbMF0qMWUzKSxzdGVwOmFbMV0sc2NhbGFyOmFbMl19KSksbz10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHIpO3Quc2V0U2VyaWVzTWV0YWRhdGEobyxyKSx0LnNldFNlcmllc0RhdGEobyxpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjpyfSk9Pl9lKCkucGx1Z2luUm91dGVGb3JTcmMoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOnJ9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxyKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOnJ9KSx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LHIsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQscixuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPU1pKG8se3RhZzphLnRhZyxydW46YS5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHMpLnRoZW4obD0+dm9pZCByKHtpdGVtOmEsZGF0YTpsfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LHIsbik9Pnt2YXIgYztsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxhPW5ldyBNYXA7Zm9yKGxldHt0YWc6dSxydW46aH1vZiB0KXtsZXQgZj1hLmdldCh1KTtmPT1udWxsJiZhLnNldCh1LGY9W10pLGYucHVzaChoKX1sZXQgcz0oYz10aGlzLmJhdGNoU2l6ZSkhPW51bGw/YzphaHIsbD1bXTtmb3IobGV0W3UsaF1vZiBhKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7Zis9cylsLnB1c2goe3RhZzp1LHJ1bnM6aC5zbGljZShmLGYrcyl9KTtQcm9taXNlLmFsbChsLm1hcCgoe3RhZzp1LHJ1bnM6aH0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyx7dGFnOnUscnVuczpofSkudGhlbihmPT57Zm9yKGxldCBwIG9mIGgpe2xldCBkPXt0YWc6dSxydW46cH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYscCk/cih7aXRlbTpkLGRhdGE6ZltwXX0pOnIoe2l0ZW06ZCxkYXRhOm51bGx9KX19KSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9aXN0LnNsaWNlKCkscj10LmZpbmRJbmRleChuPT5uLnRpdGxlPT0iTmFtZSIpO3JldHVybiB0LnNwbGljZShyLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT57bGV0IGk9bi5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oaSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe3ZhciBuO2xldCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLmV4cG9ydEFzU3ZnU3RyaW5nKCkscj0obj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDpuLnF1ZXJ5U2VsZWN0b3IoIiNzdmdMaW5rIik7ci5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKHI9PnIucnVuKX1fZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OnI9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3IubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUhPT1udWxsP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2xldFsscl09SlNPTi5wYXJzZSh0KTtyZXR1cm4gZm4ocil9fX19O0duLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19nZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUpXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC1uYW1lPSJbW19nZXREYXRhTG9hZE5hbWVdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIgogICAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249ImF1dG8iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBpY29uPSJmaWxlLWRvd25sb2FkIgogICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPgogICAgICAgICAgICAgIDxhIGlkPSJzdmdMaW5rIiBkb3dubG9hZD0iW1t0YWddXS5zdmciPgogICAgICAgICAgICAgICAgRG93bmxvYWQgQ3VycmVudCBDaGFydCBhcyBTVkcKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLW1lbnUtYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8dGYtZG93bmxvYWRlcgogICAgICAgICAgICBydW5zPSJbW19ydW5zRnJvbURhdGEoZGF0YVRvTG9hZCldXSIKICAgICAgICAgICAgdGFnPSJbW3RhZ11dIgogICAgICAgICAgICB1cmwtZm49IltbX2Rvd25sb2FkVXJsRm5dXSIKICAgICAgICAgID48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sR24ucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEduLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sR24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHbi5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEduLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEduLnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfbG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwicmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR24ucHJvdG90eXBlLCJfbG9nU2NhbGVBY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEduLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0duPUUoW3l0KCJ0Zi1zY2FsYXItY2FyZCIpXSxHbik7dmFyIFZzPWNsYXNzIGV4dGVuZHMgbHVlKFtjV10sbXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fbm9NdWx0aUV4cGVyaW1lbnRzPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntQcm9taXNlLmFsbCh0Lm1hcChpPT57bGV0IG89e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6aS5ydW4sbWV0cmljTmFtZTppLnRhZ307cmV0dXJuIHRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMobykudGhlbihhPT52b2lkIHIoe2l0ZW06aSxkYXRhOmF9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57bGV0IHI9SlNPTi5wYXJzZSh0KVsxXSxuPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChyKSxpPWlSO3JldHVybiBpWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVpLmxlbmd0aF19fX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5yZWRyYXcuYmluZCh0aGlzKSl9cmVkcmF3KCl7dmFyIHQ7KHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2gocj0+e3IucmVkcmF3KCl9KX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3ZhciB0OyF0aGlzLnNlc3Npb25Hcm91cHx8T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD09MD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKHIsbik9PltyLm5hbWUsbl0pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD1kY3QodGhpcy5zZXNzaW9uR3JvdXAubmFtZSkpLCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntsZXQgbj1yLGk9bi5nZXQoInRhZyIpO24uc2V0KCJ0YWciLCIiKSxuLnNldCgidGFnIixpKX0pfV9oYXZlTWV0cmljcygpe3JldHVybiB0aGlzLnZpc2libGVTY2hlbWEmJkFycmF5LmlzQXJyYXkodGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zKSYmdGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wfV9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX1fY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyh0LHIpe3JldHVybiB0PT09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHxyPT09bnVsbD9bXTp0LnNlc3Npb25zLmZpbHRlcihuPT5mMyhuLm1ldHJpY1ZhbHVlcyxyLm5hbWUpIT09dm9pZCAwKS5tYXAobj0+KHt0YWc6ci5uYW1lLHJ1bjpuLm5hbWV9KSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6UXUodCksZGVzY3JpcHRpb246dC5kZXNjcmlwdGlvbnx8IiJ9fX07VnMudGVtcGxhdGU9UWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVnMucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2luZGV4T2ZTZXNzaW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVnMucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3VwLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cENoYW5nZWQiLG51bGwpO1ZzPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIpXSxWcyk7dmFyIEhkPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faHBhcmFtTmFtZT1GZCx0aGlzLl9tZXRyaWNOYW1lPVF1fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2xldCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksY2koKTtsZXQgcj1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKG49PntyLnNldChuLm5hbWUsbil9KSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcChuPT5yLmdldChuLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxyKXtyZXR1cm4gdD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQuaHBhcmFtcyxyKT8iIjpiMCh0LmhwYXJhbXNbcl0pfV9zZXNzaW9uR3JvdXBNZXRyaWModCxyKXtpZih0PT1udWxsfHxPYmplY3Qua2V5cyh0KS5sZW5ndGg9PTApcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1yLmdyb3VwJiZpLm5hbWUudGFnPT1yLnRhZylyZXR1cm4gYjAoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07SGQudGVtcGxhdGU9UWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSGQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIZC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIZC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIZC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhkLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtIZD1FKFt5dCgidGYtaHBhcmFtcy10YWJsZS12aWV3IildLEhkKTt2YXIgQ1A9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LHIpe3JldHVybiB0IT1udWxsJiZyIT09dm9pZCAwJiZyIT09bnVsbH1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gdD09bnVsbD9bXTpbdF19fTtDUC50ZW1wbGF0ZT1RYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0NQPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLENQKTt2YXIgQVA9RWUoT2UoKSwxKTtmdW5jdGlvbiBjdWUoZSx0LHIsbil7aWYodC5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtsZXQgaT1yWzBdLG89clsxXTtpZihpPD10WzBdfHxpPj10W3QubGVuZ3RoLTFdKXJldHVybiBudWxsO2xldCBhPUFQLnNvcnRlZEluZGV4KHQsaSk7Y29uc29sZS5hc3NlcnQoYT4wKSxjb25zb2xlLmFzc2VydChhPHQubGVuZ3RoKTtsZXQgcz1hLTE7ZnVuY3Rpb24gbChoLGYscCxkKXtsZXQgZz1oLXAsXz1mLWQseT1pLXAseD1vLWQsYj0oZyp5K18qeCkvKGcqZytfKl8pO2lmKGI8PTApcmV0dXJuIHAzKHkseCk7aWYoYj49MSl7bGV0IFM9aC1pLEM9Zi1vO3JldHVybiBwMyhTLEMpfXJldHVybiBwMyh5LWIqZyx4LWIqXyl9bGV0IGM9bnVsbCx1PW51bGw7cmV0dXJuIGUuZm9yRWFjaChoPT57bGV0IGY9bChoLmNvbnRyb2xQb2ludHNbc11bMF0saC5jb250cm9sUG9pbnRzW3NdWzFdLGguY29udHJvbFBvaW50c1thXVswXSxoLmNvbnRyb2xQb2ludHNbYV1bMV0pO2Y+bnx8KGM9PT1udWxsfHxmPGMpJiYoYz1mLHU9aCl9KSx1fWZ1bmN0aW9uIHV1ZShlLHQscil7cmV0dXJuIGUuZG9tYWluKCkuZmlsdGVyKG49PntsZXQgaT1lKG4pO3JldHVybiB0PD1pJiZpPD1yfSl9ZnVuY3Rpb24gaHVlKGUsdCxyKXtsZXQgbj1lLnJhbmdlKCksaT1uLmZpbHRlcihvPT50PD1vJiZvPD1yKS5tYXAobz0+e2xldCBhPWUuaW52ZXJ0RXh0ZW50KG8pO3JldHVybiBvPT09bltuLmxlbmd0aC0xXT9bYVswXSxhWzFdKzFdOmF9KTtyZXR1cm4gaS5sZW5ndGg9PTA/WzAsMF06YWEoSW0oaSkpfWZ1bmN0aW9uIGZ1ZShlLHQscil7cmV0dXJuW2UuaW52ZXJ0KHQpLGUuaW52ZXJ0KHIpXS5zb3J0KChuLGkpPT5uLWkpfWZ1bmN0aW9uIEZjdChlLHQscil7ZnVuY3Rpb24gbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5bMSwyXTtsZXRbaSxvXT1hYShlKTtyZXR1cm4gaSE9PW8/W2ksb106aT4wP1tpKi41LGkqMS41XTppPDA/W2kqMS41LGkqLjVdOlstMSwxXX1pZihyPT09IkxJTkVBUiIpcmV0dXJuIE9uKCkuZG9tYWluKG4oKSkucmFuZ2UoW3QsMF0pO2lmKHI9PT0iTE9HIil7bGV0IGk9bigpO3JldHVybiBpWzBdPD0wJiZpWzFdPj0wP0ZjdChlLHQsIkxJTkVBUiIpOmNjKCkuZG9tYWluKGkpLnJhbmdlKFt0LDBdKX1lbHNlIGlmKHI9PT0iUVVBTlRJTEUiKXtsZXQgbz1JcigyMCkubWFwKGE9PnQtYSp0LzE5KTtyZXR1cm4gZS5sZW5ndGg9PT0wJiYoZT1bMV0pLGVnKCkuZG9tYWluKEFQLnVuaXEoZSkpLnJhbmdlKG8pfWVsc2V7aWYocj09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKEFQLnVuaXEoZS5zb3J0KCkpKS5yYW5nZShbdCwwXSkucGFkZGluZyguMSk7dGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBzY2FsZTogIityKX19dmFyIHUxOyhmdW5jdGlvbihlKXtlLkxJTkVBUj0iTElORUFSIixlLkxPRz0iTE9HIixlLlFVQU5USUxFPSJRVUFOVElMRSIsZS5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkodTF8fCh1MT17fSkpO3ZhciBQUD1jbGFzc3tpc1Bhc3NpbmcodCl7cmV0dXJuITB9fSxuVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPXIsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2xldCByPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQscixuKXtyZXR1cm4gbj90PD1yOnQ8cn19LEhjdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb21haW5TZXQ9dH1pc1Bhc3NpbmcodCl7cmV0dXJuIHRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgocj0+cj09PXQpIT09LTF9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bix0aGlzLl9jb2xJbmRleD1pLHRoaXMuX2lzRGlzcGxheWVkPSExLHRoaXMuX3lTY2FsZT1udWxsLHRoaXMuX3NjYWxlVHlwZT1udWxsLHRoaXMuc2V0QnJ1c2hTZWxlY3Rpb24obnVsbCl9Y29sSW5kZXgoKXtyZXR1cm4gdGhpcy5fY29sSW5kZXh9eVNjYWxlKCl7cmV0dXJuIHRoaXMuX3lTY2FsZX1zY2FsZVR5cGUoKXtyZXR1cm4gdGhpcy5fc2NhbGVUeXBlfWJydXNoU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2JydXNoU2VsZWN0aW9ufWlzRGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcGxheWVkfXNldEJydXNoU2VsZWN0aW9uKHQpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXQsdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZSh0LHIpe3RoaXMuX3NjYWxlVHlwZT1yLHRoaXMuX3lTY2FsZT1GY3QodC5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKSx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTSh0KXtsZXQgcj1sYih0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09dTEuUVVBTlRJTEUmJihyPXIudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KHhuKCItLjZnIikpKTtsZXQgbj1IdCh0KTtuLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLG4uYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwocikuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoYT0+Y2N0KHRoaXMuX3NjaGVtYSxhKSksbi5jYWxsKHBiKCkub24oInN0YXJ0IiwoKT0+e3Quc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHF0LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTtsZXQgaT1xTCgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCk9PnshQmN0KHF0KXx8KHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKSl9KS5vbigiYnJ1c2giLCgpPT57IUJjdChxdCl8fHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKX0pLm9uKCJlbmQiLCgpPT57IUJjdChxdCl8fCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbiksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSksbz1IdCh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO28uY2FsbChpKSxpLm1vdmUobyx0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQscixuKXtpZih0PT09bnVsbClyZXR1cm4gbmV3IFBQO2lmKHI9PT1udWxsKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgUFA7c3dpdGNoKHIpe2Nhc2UgdTEuTElORUFSOmNhc2UgdTEuTE9HOntsZXRbaSxvXT1mdWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCExKX1jYXNlIHUxLlFVQU5USUxFOntsZXRbaSxvXT1odWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCEwKX1jYXNlIHUxLk5PTl9OVU1FUklDOnJldHVybiBuZXcgSGN0KHV1ZShuLHRbMF0sdFsxXSkpfXJldHVybiBjb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsciksbmV3IFBQfX0saVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPXRnKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQscil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7bGV0IG49bmV3IFNldDt0LmNvbHVtbnMuZm9yRWFjaChvPT57bGV0IGE9by5hYnNvbHV0ZUluZGV4LHM9dGhpcy5fYXhlc1thXTtzLnNldERpc3BsYXllZCghMCk7bGV0IGw9ci5tYXAoYz0+eDAodGhpcy5fc2NoZW1hLGMsYSkpO3Muc2V0RG9tYWluQW5kU2NhbGUobCxvLnNjYWxlKSxuLmFkZChhKX0pLHRoaXMuX2F4ZXMuZm9yRWFjaChvPT57bi5oYXMoby5jb2xJbmRleCgpKXx8by5zZXREaXNwbGF5ZWQoITEpfSksdGhpcy5fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMobiksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmRhdGEoQXJyYXkuZnJvbShuKSxvPT5vKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2xldCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKG89PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShvKSkuZWFjaChmdW5jdGlvbihvKXtpLl9heGVzW29dLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeShyPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpLHRoaXMuX2F4ZXNbcl0pKX1nZXRBeGlzRm9yQ29sSW5kZXgodCl7cmV0dXJuIHRoaXMuX2F4ZXNbdF19ZHJhZ1N0YXJ0KHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2F4ZXNbdF0uaXNEaXNwbGF5ZWQoKSksdGhpcy5fZHJhZ2dlZEF4aXM9dGhpcy5fYXhlc1t0XSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfWRyYWcodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXQ7bGV0IHI9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCk7ci5zb3J0KChuLGkpPT50aGlzLmdldEF4aXNQb3NpdGlvbihuKS10aGlzLmdldEF4aXNQb3NpdGlvbihpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGx9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGwmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcihpPT50LmhhcyhpKSksbj1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnIsLi4uQXJyYXkuZnJvbSh0KV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4obil9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KXt0LmF0dHIoInRyYW5zZm9ybSIscj0+eVAodGhpcy5nZXRBeGlzUG9zaXRpb24ocikpKX1fY3JlYXRlQXhlcyh0KXtyZXR1cm4gSXIodWN0KHRoaXMuX3NjaGVtYSkpLm1hcChyPT5uZXcgVmN0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LHIpKX19O2Z1bmN0aW9uIEJjdChlKXtyZXR1cm4gZS5zb3VyY2VFdmVudCE9PW51bGx9dmFyIGpmOyhmdW5jdGlvbihlKXtlW2UuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsZVtlLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoamZ8fChqZj17fSkpO3ZhciB0aD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0PT09dm9pZCAwJiYodD1FcChudWxsKSksY29uc29sZS5hc3NlcnQodC5zaXplKCk8PTEpLHRoaXMuX3Nlc3Npb25Hcm91cFNlbD10fXNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpPT09MT90aGlzLl9zZXNzaW9uR3JvdXBTZWwuZGF0dW0oKTpudWxsfWlzTnVsbCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCgpPT09bnVsbH1zZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsfWVxdWFsc1RvKHQpe3ZhciByLG47cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTp0LmlzTnVsbCgpPyExOigocj10LnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6ci5uYW1lKT09KChuPXRoaXMuc2Vzc2lvbkdyb3VwKCkpPT1udWxsP3ZvaWQgMDpuLm5hbWUpfX0sb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlc0NvbGxlY3Rpb249bix0aGlzLl9zZXNzaW9uR3JvdXBzPVtdLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmJhY2tncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5mb3JlZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiZm9yZWdyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB0aCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fZDNsaW5lPXZ1KCkuY3VydmUoWWgpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gdD09bnVsbD9uZXcgdGg6bmV3IHRoKHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKHI9PnIubmFtZT09PXQubmFtZSkpfWhpZGVCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKX1zaG93QmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IixudWxsKX1wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlfXNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlfXJlY29tcHV0ZUNvbnRyb2xQb2ludHModCxyPTApeyh0PT09amYuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyKS5hdHRyKCJkIixpPT50aGlzLl9wYXRoREF0dHJpYnV0ZShpKSksdD09PWpmLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IGk9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goZnVuY3Rpb24obyl7aS5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsbyl9KX0pfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIix0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KChyLG4pPT5uLmJydXNoRmlsdGVyKCkuaXNQYXNzaW5nKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKX1zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcih0LHIsbil7bGV0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxyLG4saSl7bGV0IG89dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLGE9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGEpLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCksdGhpcy5zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcihyLG4saSl9dXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITEpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITApfWNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCl7dGhpcy51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAobmV3IHRoKX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKXtsZXQgbj10aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygobyxhKT0+byksaT1jdWUodGhpcy5fdmlzaWJsZUZnUGF0aHNTZWwubm9kZXMoKSxuLFt0LHJdLDEwMCk7cmV0dXJuIGk9PT1udWxsP25ldyB0aDpuZXcgdGgoSHQoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuKCk9PiJyZWQiO2xldCBpPU9uKCkuZG9tYWluKGhjdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW3Isbl0pLmludGVycG9sYXRlKE1fKTtyZXR1cm4gbz0+aSh4MCh0aGlzLl9zY2hlbWEsbyx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuIHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMscj0+ci5uYW1lKSx0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UodCl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0LHIpe3QuY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhyKX1fY29tcHV0ZUNvbnRyb2xQb2ludHModCl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChyLG4pPT5bcixuLnlTY2FsZSgpKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSl9X3BhdGhEQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLl9kM2xpbmUodGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHModCkpfV91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpe3RoaXMuX3Zpc2libGVGZ1BhdGhzU2VsPXRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19O3ZhciBhVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuc3ZnPUh0KHQpO2xldCBuPXt0b3A6MzAscmlnaHQ6MTAsYm90dG9tOjEwLGxlZnQ6MTB9LGk9MTAwLG89MjAwLGE9cippK24ubGVmdCtuLnJpZ2h0LHM9bytuLnRvcCtuLmJvdHRvbTt0aGlzLnN2Zy5hdHRyKCJ2aWV3Qm94IixgMCAwICR7YX0gJHtzfWApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGErInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLHMrInB4IiksdGhpcy53aWR0aD1hLW4ubGVmdC1uLnJpZ2h0LHRoaXMuaGVpZ2h0PXMtbi50b3Atbi5ib3R0b20sdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseVAobi5sZWZ0LG4udG9wKSl9fSxzVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGlWKHQscix0aGlzKSx0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IG9WKHQscix0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57bGV0W28sYV09em8odGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKG8sYSl9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydCh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKHIpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQscil7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyB0aCk6dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodCxyKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKHQscik7bGV0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhyLHQuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwP3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fTt2YXIgZWg9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5yZWRyYXdDb3VudD0wfV9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3ZhciBuO2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuO2xldHtjb25maWd1cmF0aW9uOnR9PShuPXRoaXMuX3ByZXZPcHRpb25zKSE9bnVsbD9uOnt9LHtjb25maWd1cmF0aW9uOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9PT12b2lkIDB8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LnNjaGVtYSxyLnNjaGVtYSl8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LmNvbHVtbnNWaXNpYmlsaXR5LHIuY29sdW1uc1Zpc2liaWxpdHkpKXtIdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgaT1uZXcgYVYodGhpcy4kLnN2ZyxyLmNvbHVtbnNWaXNpYmlsaXR5LmZpbHRlcihCb29sZWFuKS5sZW5ndGgpO3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uZXcgc1YoaSxyLnNjaGVtYSxvPT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pLG89PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7bGV0IHQ9Y3M7aWYodGhpcy5zZXNzaW9uR3JvdXBzPT09dm9pZCAwKXt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO3JldHVybn1sZXQgcj10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5zY2hlbWE7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXRoaXMuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKHIpOysraSl7aWYoIXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldKWNvbnRpbnVlO2xldCBvPXQuY29sdW1uVmFsdWVCeUluZGV4KHIsbixpKTtpZihvPT09dm9pZCAwfHxvPT09Ik5hTiIpcmV0dXJuITF9cmV0dXJuITB9KX19O2VoLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxlaC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZWgucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCk7RShbQnQoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZWgucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO2VoPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLGVoKTt2YXIgQTA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEscj10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLG49KGEscyk9Pih7bmFtZTpGZChhKSxpbmRleDpzLGFic29sdXRlSW5kZXg6ekgocix0LHMpLHNjYWxlOnRoaXMuX2lzTnVtZXJpY0NvbHVtbihzKT8iTElORUFSIjoiTk9OX05VTUVSSUMifSksaT0oYSxzKT0+e2xldCBsPXMrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6UXUoYSksaW5kZXg6bCxhYnNvbHV0ZUluZGV4OnpIKHIsdCxsKX19LG89e2NvbHVtbnM6dC5ocGFyYW1JbmZvcy5tYXAobikuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKGkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbyksY2koKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXt0aGlzLm9wdGlvbnMhPT1udWxsJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHQ9PntsZXQgcj0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDshdGhpcy5fYWxsb3dMb2dTY2FsZSh0KSYmdC5zY2FsZT09PSJMT0ciJiZ0aGlzLnNldChyKyIuc2NhbGUiLCJMSU5FQVIiKX0pfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7bGV0W3Isbl09X1AodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiByPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW3RdLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQifV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtsZXQgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgocj0+ci50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0Iik7aWYodCE9PS0xKXJldHVybiB0fX07QTAudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQTAucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBMC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtCdCgiY29uZmlndXJhdGlvbi4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxBMC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCk7QTA9RShbeXQoInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLEEwKTt2YXIgaDE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07aDEudGVtcGxhdGU9UWAKICAgIDwhLS0gQ29udHJvbHMgYmVoYXZpb3Igb2YgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdAogICAgICAgICBvdXRwdXRzIHNldCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4KICAgICAgLS0+CiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBUaGUgc2NhbGUgYW5kIGNvbG9yIGNvbnRyb2xzLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdCAtLT4KICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QKICAgICAgICBpZD0icGxvdCIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iCiAgICAgICAgY2xvc2VzdC1zZXNzaW9uLWdyb3VwPSJ7e19jbG9zZXN0R3JvdXB9fSIKICAgICAgICBvcHRpb25zPSJbW19vcHRpb25zXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIGlkPSJ2YWx1ZXMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGgxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxoMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7aDE9RShbeXQoInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0saDEpO3ZhciB5Mz1FZShPZSgpLDEpO3ZhciAkbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9SHQodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPWZjdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57bGV0IHQ9Y3Mscj0xMjAwLG49LjQqcixpPTE1MCxvPS43NSppO3RoaXMud2lkdGg9TWF0aC5tYXgoaSp0Lm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksciksdGhpcy5oZWlnaHQ9TWF0aC5tYXgobyp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksbiksdGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KSx0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksdGhpcy5fZHJhdygpfSwxMDApfV9kcmF3KCl7bGV0IHQ9Y3Mscj10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fHRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGg9PTB8fCF0aGlzLnZpc2libGVTY2hlbWF8fHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg9PTApcmV0dXJuO2xldCBuPUlyKHQubnVtVmlzaWJsZUNvbHVtbnMoci52aXNpYmxlU2NoZW1hKSksaT1Jcih0Lm51bVZpc2libGVNZXRyaWNzKHIudmlzaWJsZVNjaGVtYSkpLG89ODAsYT01MCxzPTUsbD1RbSgpLmRvbWFpbihuKS5yYW5nZShbbytzLHRoaXMud2lkdGgtMS1zXSkucGFkZGluZ0lubmVyKC4xKSxjPVFtKCkuZG9tYWluKGkpLnJhbmdlKFt0aGlzLmhlaWdodC0xLXMtYSxzXSkucGFkZGluZ0lubmVyKC4xKSx1PWwuYmFuZHdpZHRoKCksaD1jLmJhbmR3aWR0aCgpLGY9bi5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCxbMCx1LTFdKSkscD1pLm1hcChjdD0+ci5fY2VsbFNjYWxlKGN0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKSxbaC0xLDBdKSksZD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKGwoY3QpLDApKTtmdW5jdGlvbiBnKGN0KXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIF8oY3Qpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2N0fWQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixnKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0LWEvMiksZC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLF8pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHIuaGVpZ2h0LWEvMikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsYS8yKSxkLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrZyhjdCkrIikiKS5lYWNoKGZ1bmN0aW9uKGN0KXtIdCh0aGlzKS5jYWxsKFMsWjkoZltjdF0pLnRpY2tTaXplKHIuaGVpZ2h0LWEpLHUsNDAsci5vcHRpb25zLmNvbHVtbnNbY3RdLnNjYWxlKX0pLGQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIitfKGN0KSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsdS8yKS5hdHRyKCJ5IixyLmhlaWdodC0xLWEvNCkudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKS5hcHBlbmQoInRpdGxlIikudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKTtsZXQgeT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKHIud2lkdGgtMSxjKGN0KSkpO2Z1bmN0aW9uIHgoY3Qpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrY3R9ZnVuY3Rpb24gYihjdCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrY3R9eS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oci53aWR0aC1vLzItMSkpLmF0dHIoInkiLC1zKS5hdHRyKCJ3aWR0aCIsci53aWR0aC1vLzIpLmF0dHIoImhlaWdodCIsaCsyKnMpLHkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixiKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixvLzIpLmF0dHIoImhlaWdodCIsaCkseS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK3goY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLGxiKHBbY3RdKS50aWNrU2l6ZShyLndpZHRoLW8pLGgsMjAsci5vcHRpb25zLmNvbHVtbnNbY3QrdC5udW1WaXNpYmxlSFBhcmFtcyhyLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSx5LmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrYihjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oci53aWR0aC1vLzQtMSkpLmF0dHIoInkiLGgvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKHIud2lkdGgtby80LTEpLGgvMikpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSk7ZnVuY3Rpb24gUyhjdCxYLGV0LGR0LHEpe2xldCBwdD1NYXRoLmZsb29yKGV0L2R0KSxodD1YLnNjYWxlKCk7aWYocT09PSJRVUFOVElMRSIpe2xldCB3dD1odC5xdWFudGlsZXMoKSxrdD1NYXRoLmNlaWwod3QubGVuZ3RoL3B0KTt3dD1JcigwLHd0Lmxlbmd0aCxrdCkubWFwKGllPT53dFtpZV0pLFgudGlja1ZhbHVlcyh3dCkudGlja0Zvcm1hdCh4bigiLS4yZyIpKX0ocT09PSJMSU5FQVIifHxxPT09IkxPRyIpJiZYLnRpY2tzKHB0KSxjdC5jYWxsKFgpLGN0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLGN0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1sZXQgQz10aGlzLl9zdmcuc2VsZWN0QWxsKCIuY2VsbCIpLmRhdGEocTkobixpKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjZWxsIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoW2N0LFhdKT0+dC50cmFuc2xhdGVTdHIobChjdCksYyhYKSkpLFA9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC1zKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLGgrMipzKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksaz1udWxsO3Iub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXghPT12b2lkIDAmJihrPU9uKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShNXykpO2xldCBPPXIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg9PT12b2lkIDA/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmN0fSk9PmsodGhpcy5fY29sVmFsdWUoY3Qsci5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpO2Z1bmN0aW9uIEQoY3QsWCl7cmV0dXJuIGZbWF0oci5fY29sVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEIoY3QsWCl7cmV0dXJuIHBbWF0oci5fbWV0cmljVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEkoY3QsWCl7bGV0IGV0PWN0LnNlbGVjdEFsbCgiLmRhdGEtbWFya2VyIikuZGF0YSgoW3B0LGh0XSk9PnIuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIod3Q9PnIuX2NvbFZhbHVlKHd0LHB0KSE9PXZvaWQgMCYmci5fbWV0cmljVmFsdWUod3QsaHQpIT09dm9pZCAwKS5tYXAod3Q9Pih7Y29sOnB0LG1ldHJpYzpodCxzZXNzaW9uR3JvdXA6d3QseDpEKHd0LHB0KSx5OkIod3QsaHQpLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImRhdGEtbWFya2VyIiwhMCkuYXR0cigiY3giLCh7eDpwdH0pPT5wdCkuYXR0cigiY3kiLCh7eTpwdH0pPT5wdCkuYXR0cigiciIsMikuYXR0cigiZmlsbCIsWCksZHQ9bmV3IE1hcDtyLnNlc3Npb25Hcm91cHMuZm9yRWFjaChwdD0+e2R0LnNldChwdCxbXSl9KSxldC5lYWNoKGZ1bmN0aW9uKHB0KXt2YXIgaHQ7KGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApKT09bnVsbHx8aHQucHVzaCh0aGlzKX0pLGV0LmVhY2gocHQ9PntsZXQgaHQ9ZHQuZ2V0KHB0LnNlc3Npb25Hcm91cCk7cHQuc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGh0KX0pO2xldCBxPW4ubWFwKHB0PT5pLm1hcChodD0+ZXQuZmlsdGVyKHd0PT53dC5jb2w9PXB0JiZ3dC5tZXRyaWM9PWh0KSkpO3JldHVybltldCxxLGR0XX1sZXRbTCxSLEZdPUkoQy5hcHBlbmQoImciKSxPKTtmdW5jdGlvbiB6KGN0LFgpe2xldCBldD1bXTtyZXR1cm4gUltjdF1bWF0uZWFjaChmdW5jdGlvbigpe2V0LnB1c2godGhpcyl9KSx6aCgpLngoZHQ9Pkh0KGR0KS5kYXR1bSgpLngpLnkoZHQ9Pkh0KGR0KS5kYXR1bSgpLnkpLmFkZEFsbChldCl9bGV0IFU9bi5tYXAoY3Q9PmkubWFwKFg9PnooY3QsWCkpKSxXPW51bGw7YnQoKSYmKFc9Qy5maWx0ZXIoY3Q9PnkzLmlzRXF1YWwoY3Qsci5fYnJ1c2hlZENlbGxJbmRleCkpLGNvbnNvbGUuYXNzZXJ0KFcuc2l6ZSgpPT0xLFcpKTtsZXQgWj1uZXcgU2V0KEwubm9kZXMoKSk7cnQoKTtmdW5jdGlvbiBydCgpe2xldCBjdD1uZXcgU2V0KEwubm9kZXMoKSk7TXQoKXx8KGN0PW90KHIuX2JydXNoZWRDZWxsSW5kZXgsci5fYnJ1c2hTZWxlY3Rpb24pKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KGN0LFg9PiFaLmhhcyhYKSkpKS5hdHRyKCJmaWxsIixPKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KFosWD0+IWN0LmhhcyhYKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLFo9Y3R9ZnVuY3Rpb24gb3QoY3QsWCl7Y29uc29sZS5hc3NlcnQoY3QhPT1udWxsKSxjb25zb2xlLmFzc2VydChYIT09bnVsbCk7bGV0W2V0LGR0XT1jdCxxPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChVW2V0XVtkdF0sWFswXVswXSxYWzBdWzFdLFhbMV1bMF0sWFsxXVsxXSxwdD0+e0h0KHB0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCh3dD0+e3EuYWRkKHd0KX0pfSkscX1sZXQgc3Q9R0woKS5leHRlbnQoW1stcysxLC1zKzFdLFt1LTErcy0xLGgtMStzLTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe2J0KCkmJlcubm9kZSgpIT10aGlzJiZzdC5tb3ZlKFcsbnVsbCksU3QodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7U3QodGhpcyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1N0KHRoaXMpfSk7ZnVuY3Rpb24gU3QoY3Qpe2xldCBYPVVMKGN0KTshYnQoKSYmWD09PW51bGx8fGJ0KCkmJmN0PT09Vy5ub2RlKCkmJnkzLmlzRXF1YWwoWCxyLl9icnVzaFNlbGVjdGlvbil8fChyLl9icnVzaFNlbGVjdGlvbj1YLFghPT1udWxsPyhXPUh0KGN0KSxyLl9icnVzaGVkQ2VsbEluZGV4PVcuZGF0dW0oKSk6KFc9bnVsbCxyLl9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHJ0KCkpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHIuX2JydXNoZWRDZWxsSW5kZXghPT1udWxsJiZyLl9icnVzaFNlbGVjdGlvbiE9PW51bGx9ZnVuY3Rpb24gTXQoKXtyZXR1cm4hYnQoKXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMF09PT1yLl9icnVzaFNlbGVjdGlvblsxXVswXXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMV09PT1yLl9icnVzaFNlbGVjdGlvblsxXVsxXX1DLmNhbGwoc3QpLGJ0KCkmJnN0Lm1vdmUoVyxyLl9icnVzaFNlbGVjdGlvbik7bGV0IGx0PW51bGwsS3Q9bnVsbDt0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwIT09bnVsbCYmKEt0PUVwKEYuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSksQy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IGN0PWx0PT09S3Q/bnVsbDpsdDtpZihjdD09PUt0KXJldHVybjtLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITEpLEt0PWN0LEt0IT09bnVsbCYmS3QuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCk7bGV0IFg9S3Q9PT1udWxsP251bGw6S3QuZGF0dW0oKS5zZXNzaW9uR3JvdXA7ci5zZWxlY3RlZFNlc3Npb25Hcm91cD1YfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbY3QsWF0pe2xldFtldCxkdF09em8odGhpcykscT1fdChjdCxYLGV0LGR0LDIwKTtsdCE9PXEmJihsdCE9PW51bGwmJmx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksbHQ9cSxsdCE9PW51bGw/KGx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMCksci5jbG9zZXN0U2Vzc2lvbkdyb3VwPWx0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwKTpyLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oW2N0LFhdKXtsdCE9PW51bGwmJihsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PW51bGwsci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSk7ZnVuY3Rpb24gX3QoY3QsWCxldCxkdCxxKXtsZXQgcHQ9MS8wLGh0PW51bGw7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhVW2N0XVtYXSxldCxkdCxxLCh3dCxrdCk9PntpZihaLmhhcyh3dCkmJmt0PHB0KXtsZXQgaWU9SHQod3QpLmRhdHVtKCk7cHQ9a3QsaHQ9aWUuc2Vzc2lvbkdyb3VwfX0pLGh0PT09bnVsbD9udWxsOkVwKEYuZ2V0KGh0KSl9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LHIpe2xldCBuPXRoaXMuX2NvbEV4dGVudCh0KSxpPU9uKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxJTkVBUiIpcmV0dXJuIGk7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTE9HIilyZXR1cm4gblswXTw9MCYmblsxXT49MD9pOmNjKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IlFVQU5USUxFIil7bGV0IG89KHJbMV0tclswXSkvMTksYT1JcigyMCkubWFwKHM9PnJbMF0rbypzKTtyZXR1cm4gZWcoKS5kb21haW4oeTMudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKHM9PnRoaXMuX2NvbFZhbHVlKHMsdCkpKSkucmFuZ2UoYSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChvPT50aGlzLl9jb2xWYWx1ZShvLHQpKS5zb3J0KCkpKS5yYW5nZShyKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc319X2NvbFZhbHVlKHQscil7cmV0dXJuIEJIKHRoaXMudmlzaWJsZVNjaGVtYSx0LHIpfV9tZXRyaWNWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fY29sRXh0ZW50KHQpe3JldHVybiBfUCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQpfX07JG8udGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkby5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSwkby5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfc3ZnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sJG8ucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hlZENlbGxJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInZpc2libGVTY2hlbWEuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpO0UoW0J0KCJvcHRpb25zLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCk7JG89RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLCRvKTt2YXIgZjE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07ZjEudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZjEucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGYxLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtmMT1FKFt5dCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciKV0sZjEpO3ZhciBYZj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zZWxlY3RlZFRhYj0wLHRoaXMuX3RhYmxlVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlRhYmxlIil9LHRoaXMuX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlBhcmFsbGVsIENvb3JkcyIpfSx0aGlzLl9zY2F0dGVyUGxvdE1hdHJpeFRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJTY2F0dGVyIFBsb3QgTWF0cml4Iil9LHRoaXMubG9nQWN0aW9uPSh0LHIpPT57KHdpbmRvdy5nYXx8ZnVuY3Rpb24oKXt9KSgic2VuZCIse2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJIUGFyYW1zIixldmVudEFjdGlvbjp0LGV2ZW50TGFiZWw6cn0pfSx0aGlzLmxvZ0FjdGlvbigiUGx1Z2luIExvYWQiKX19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIG9uLWNsaWNrPSJfdGFibGVUYWJDbGlja2VkIiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfcGFyYWxsZWxDb29yZHNUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyIKICAgICAgICAgID4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWGYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFhmLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWGYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFhmLnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApO1hmPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxYZik7dmFyIHJoPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07cmgudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dD4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgPHRmLWhwYXJhbXMtcXVlcnktcGFuZQogICAgICAgICAgaWQ9InF1ZXJ5LXBhbmUiCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IgogICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtbm9uLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1xdWVyeS1wYW5lPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhwYXJhbXMgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhwYXJhbXMgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgRXZlbnQgZmlsZXMgYXJlIHN0aWxsIGJlaW5nIGxvYWRlZCAodHJ5IHJlbG9hZGluZyB0aGlzIHBhZ2UpLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZQogICAgICAgICAgICBpZD0ic2Vzc2lvbnMtcGFuZSIKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIKICAgICAgICAgICAgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIGhwYXJhbXMtc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsdTMpXSxyaC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scmgucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scmgucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7cmg9RShbeXQoInRmLWhwYXJhbXMtbWFpbiIpXSxyaCk7dmFyIGxocj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgidGVuc29yYm9hcmRDb2xhYiIpPT09InRydWUiLGxWPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9iYWNrZW5kPW5ldyB1MyhuZXcgQWUsbGhyKX1yZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX07bFYudGVtcGxhdGU9UWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsVi5wcm90b3R5cGUsIl9iYWNrZW5kIix2b2lkIDApO2xWPUUoW3l0KCJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIpXSxsVik7dmFyIHAxPUVlKE9lKCksMSk7dmFyIF9uPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdHVhbFNpemU9ITEsdGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudD0uNSx0aGlzLmNvbnRyYXN0UGVyY2VudGFnZT0wLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9pbWFnZUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5fc3RlcHM9W10sdGhpcy5faXNJbWFnZUxvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1nZXQgX2hhc0F0TGVhc3RPbmVTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfWdldCBfaGFzTXVsdGlwbGVTdGVwcygpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiB0Lmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy5vZlNhbXBsZXM7cmV0dXJuIHQ+MX1fZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxyPV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiLHQpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsdC53YWxsX3RpbWUpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiLHIpO3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUodC53YWxsX3RpbWUqMWUzKSxzdGVwOnQuc3RlcCx1cmw6bn19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAscj10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2xldCBpPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKSxpLm9ubG9hZD1pLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUobz0+e2lmKG8uY2FuY2VsbGVkKXJldHVybjtsZXQgYT10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKTthJiYoYS50ZXh0Q29udGVudD0iIix6dChhKS5hcHBlbmRDaGlsZChpKSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkuYmluZCh0aGlzKSxpLnN0eWxlLmZpbHRlcj1gY29udHJhc3QoJHtufSUpIGAsaS5zdHlsZS5maWx0ZXIrPWBicmlnaHRuZXNzKCR7cn0pYCx0aGlzLnNldCgiX2lzSW1hZ2VMb2FkaW5nIiwhMCksaS5zcmM9dC51cmx9X2hhbmRsZVRhcCh0KXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9X3RvTG9jYWxlU3RyaW5nKHQpe3JldHVybiB0LnRvTG9jYWxlU3RyaW5nKCl9fTtfbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJvZlNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxfbi5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxfbi5wcm90b3R5cGUsImNvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLF9uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfaW1hZ2VDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxfbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJfaXNJbWFnZUxvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJzYW1wbGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKTtFKFtSdCgib2ZTYW1wbGVzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU2FtcGxlcyIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAiLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsImNvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJfdXBkYXRlSW1hZ2VVcmwiLG51bGwpO19uPUUoW3l0KCJ0Zi1pbWFnZS1sb2FkZXIiKV0sX24pO3ZhciBJbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWV9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihwMS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cDEubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSW1hZ2VzKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3ZhciB0PXRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50O3JldHVybiB0PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U7cmV0dXJuIHQ9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtsZXQgbz1wMS5tYXBWYWx1ZXModCxjPT5PYmplY3Qua2V5cyhjKSksYT1RbChvLHIsbik7ZnVuY3Rpb24gcyhjKXtsZXQgdT10W2MucnVuXVtjLnRhZ10uc2FtcGxlcztyZXR1cm4gcDEucmFuZ2UodSkubWFwKGg9Pk9iamVjdC5hc3NpZ24oe30sYyx7c2FtcGxlOmgsb2ZTYW1wbGVzOnV9KSl9cmV0dXJuIGEubWFwKGM9Pk9iamVjdC5hc3NpZ24oe30sYyx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGMuaXRlbXMubWFwKHMpKX0pKX1fdGFnTWV0YWRhdGEodCxyLG4pe3JldHVybiB0W3JdW25dfX07SW8udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9hY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2JyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9icmlnaHRuZXNzQWRqdXN0bWVudCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKTtFKFtSdCgiX2NvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLElvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0lvPUUoW3l0KCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sSW8pO3ZhciBzeD1FZShPZSgpLDEpO3ZhciBkMTsoZnVuY3Rpb24oZSl7ZVtlLkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKGQxfHwoZDE9e30pKTt2YXIgY1Y7KGZ1bmN0aW9uKGUpe2VbZS5WRVJURVg9MV09IlZFUlRFWCIsZVtlLkZBQ0U9Ml09IkZBQ0UiLGVbZS5DT0xPUj0zXT0iQ09MT1IifSkoY1Z8fChjVj17fSkpO3ZhciBxY3Q7KGZ1bmN0aW9uKGUpe2UuVkVSVEVYPSJmbG9hdDMyIixlLkZBQ0U9ImludDMyIixlLkNPTE9SPSJ1aW50OCJ9KShxY3R8fChxY3Q9e30pKTt2YXIgSVA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LHIsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQscixuKX1fZmV0Y2hEYXRhQnlTdGVwKHQscixuLGksbyxhKXtsZXQgcz1fZSgpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcobyl9KSksbD1mdW5jdGlvbih1KXtsZXQgZj1bXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoLzM7cCsrKXtsZXQgZD1bXTtmb3IobGV0IGc9MDtnPDM7ZysrKWQucHVzaCh1W3AqMytnXSk7Zi5wdXNoKGQpfXJldHVybiBmfSxjPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh1PT57aWYodS5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO2xldCBoPXUudmFsdWU7c3dpdGNoKG4pe2Nhc2UiVkVSVEVYIjphLnZlcnRpY2VzPWwobmV3IEZsb2F0MzJBcnJheShoKSk7YnJlYWs7Y2FzZSJGQUNFIjphLmZhY2VzPWwobmV3IEludDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiQ09MT1IiOmEuY29sb3JzPWwobmV3IFVpbnQ4QXJyYXkoaCkpO2JyZWFrfXJldHVybiBhfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKHMse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpxY3Rbbl19fSkudGhlbih1PT51LmFycmF5QnVmZmVyKCkpLnRoZW4oYyl9ZmV0Y2hEYXRhKHQscixuLGkpe2xldCBvPVtdLGE9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoY1YpLmZvckVhY2gocz0+e2xldCBsPTE8PGNWW3NdO3QuY29tcG9uZW50cyZsJiZvLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKHIsbixzLGksdC5zdGVwLGEpKX0pLFByb21pc2UuYWxsKG8pfV9mZXRjaE1ldGFkYXRhKHQscixuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IGk9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LHNhbXBsZTpufSkpLG89dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PmEuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pOmEudmFsdWUpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKGE9PmEuanNvbigpKS50aGVuKG8pLnRoZW4odGhpcy5fcHJvY2Vzc01ldGFkYXRhLmJpbmQodGhpcykpfV9wcm9jZXNzTWV0YWRhdGEodCl7aWYoIXQpcmV0dXJuO2xldCByPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV07ci5oYXMoby5zdGVwKXx8ci5zZXQoby5zdGVwLFtdKSxyLmdldChvLnN0ZXApLnB1c2gobyl9bGV0IG49W107cmV0dXJuIHIuZm9yRWFjaChpPT57bGV0IG89dGhpcy5fY3JlYXRlU3RlcERhdHVtKGlbMF0pO24ucHVzaChvKX0pLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fTt2YXIgd009e307S3Mod00se0FDRVNGaWxtaWNUb25lTWFwcGluZzooKT0+Y2ZlLEFkZEVxdWF0aW9uOigpPT5NMSxBZGRPcGVyYXRpb246KCk9Pm9mZSxBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTooKT0+a2h0LEFkZGl0aXZlQmxlbmRpbmc6KCk9Pk11dCxBbHBoYUZvcm1hdDooKT0+Z2ZlLEFsd2F5c0RlcHRoOigpPT5KaGUsQWx3YXlzU3RlbmNpbEZ1bmM6KCk9PmtmZSxBbWJpZW50TGlnaHQ6KCk9Pkw2LEFtYmllbnRMaWdodFByb2JlOigpPT56VSxBbmltYXRpb25DbGlwOigpPT5RMSxBbmltYXRpb25Mb2FkZXI6KCk9Pm9odCxBbmltYXRpb25NaXhlcjooKT0+VlUsQW5pbWF0aW9uT2JqZWN0R3JvdXA6KCk9PkhVLEFuaW1hdGlvblV0aWxzOigpPT5ZbixBcmNDdXJ2ZTooKT0+bDYsQXJyYXlDYW1lcmE6KCk9Pm42LEFycm93SGVscGVyOigpPT5NaHQsQXVkaW86KCk9PkQ2LEF1ZGlvQW5hbHlzZXI6KCk9PkZVLEF1ZGlvQ29udGV4dDooKT0+emh0LEF1ZGlvTGlzdGVuZXI6KCk9PmNodCxBdWRpb0xvYWRlcjooKT0+RFUsQXhlc0hlbHBlcjooKT0+dk0sQXhpc0hlbHBlcjooKT0+VzByLEJhY2tTaWRlOigpPT5JaSxCYXNpY0RlcHRoUGFja2luZzooKT0+UGZlLEJhc2ljU2hhZG93TWFwOigpPT51aHIsQmluYXJ5VGV4dHVyZUxvYWRlcjooKT0+SzByLEJvbmU6KCk9PnNNLEJvb2xlYW5LZXlmcmFtZVRyYWNrOigpPT5hbSxCb3VuZGluZ0JveEhlbHBlcjooKT0+WTByLEJveDI6KCk9PiQwLEJveDM6KCk9PnRhLEJveDNIZWxwZXI6KCk9PndodCxCb3hCdWZmZXJHZW9tZXRyeTooKT0+UWYsQm94R2VvbWV0cnk6KCk9PlFmLEJveEhlbHBlcjooKT0+eU0sQnVmZmVyQXR0cmlidXRlOigpPT5KZSxCdWZmZXJHZW9tZXRyeTooKT0+UGUsQnVmZmVyR2VvbWV0cnlMb2FkZXI6KCk9PlJVLEJ5dGVUeXBlOigpPT5oZmUsQ2FjaGU6KCk9PnR4LENhbWVyYTooKT0+UjEsQ2FtZXJhSGVscGVyOigpPT5iaHQsQ2FudmFzUmVuZGVyZXI6KCk9PkowcixDYW52YXNUZXh0dXJlOigpPT54VSxDYXRtdWxsUm9tQ3VydmUzOigpPT5jNixDaW5lb25Ub25lTWFwcGluZzooKT0+bGZlLENpcmNsZUJ1ZmZlckdlb21ldHJ5OigpPT5GMSxDaXJjbGVHZW9tZXRyeTooKT0+RjEsQ2xhbXBUb0VkZ2VXcmFwcGluZzooKT0+Sm8sQ2xvY2s6KCk9Pm1NLENvbG9yOigpPT5uZSxDb2xvcktleWZyYW1lVHJhY2s6KCk9Pk02LENvbXByZXNzZWRUZXh0dXJlOigpPT5hNixDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjooKT0+YWh0LENvbmVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ29uZUdlb21ldHJ5OigpPT5CMSxDdWJlQ2FtZXJhOigpPT5KMyxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6KCk9Pm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzooKT0+aXgsQ3ViZVRleHR1cmU6KCk9PkgwLEN1YmVUZXh0dXJlTG9hZGVyOigpPT5UVSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzooKT0+eE0sQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pno2LEN1YmljQmV6aWVyQ3VydmU6KCk9PmNNLEN1YmljQmV6aWVyQ3VydmUzOigpPT51NixDdWJpY0ludGVycG9sYW50OigpPT5TVSxDdWxsRmFjZUJhY2s6KCk9PlN1dCxDdWxsRmFjZUZyb250OigpPT56aGUsQ3VsbEZhY2VGcm9udEJhY2s6KCk9PmNocixDdWxsRmFjZU5vbmU6KCk9Pk9oZSxDdXJ2ZTooKT0+ZnMsQ3VydmVQYXRoOigpPT53VSxDdXN0b21CbGVuZGluZzooKT0+QmhlLEN1c3RvbVRvbmVNYXBwaW5nOigpPT51ZmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kcmljYWw6KCk9Pm1odCxEYXRhVGV4dHVyZTooKT0+SmQsRGF0YVRleHR1cmUyREFycmF5OigpPT50TSxEYXRhVGV4dHVyZTNEOigpPT5yNixEYXRhVGV4dHVyZUxvYWRlcjooKT0+Q1UsRGF0YVV0aWxzOigpPT5UaHQsRGVjcmVtZW50U3RlbmNpbE9wOigpPT5iaHIsRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDooKT0+U2hyLERlZmF1bHRMb2FkaW5nTWFuYWdlcjooKT0+dHBlLERlcHRoRm9ybWF0OigpPT56MCxEZXB0aFN0ZW5jaWxGb3JtYXQ6KCk9PmsxLERlcHRoVGV4dHVyZTooKT0+bk0sRGlyZWN0aW9uYWxMaWdodDooKT0+STYsRGlyZWN0aW9uYWxMaWdodEhlbHBlcjooKT0+eGh0LERpc2NyZXRlSW50ZXJwb2xhbnQ6KCk9Pk1VLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5IMSxEb2RlY2FoZWRyb25HZW9tZXRyeTooKT0+SDEsRG91YmxlU2lkZTooKT0+TDEsRHN0QWxwaGFGYWN0b3I6KCk9PlloZSxEc3RDb2xvckZhY3RvcjooKT0+WGhlLER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6KCk9PkQwcixEeW5hbWljQ29weVVzYWdlOigpPT56aHIsRHluYW1pY0RyYXdVc2FnZTooKT0+WTMsRHluYW1pY1JlYWRVc2FnZTooKT0+TmhyLEVkZ2VzR2VvbWV0cnk6KCk9PnM2LEVkZ2VzSGVscGVyOigpPT5qMHIsRWxsaXBzZUN1cnZlOigpPT5WMSxFcXVhbERlcHRoOigpPT50ZmUsRXF1YWxTdGVuY2lsRnVuYzooKT0+Q2hyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOigpPT5ZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzooKT0+alAsRXVsZXI6KCk9PnRtLEV2ZW50RGlzcGF0Y2hlcjooKT0+VXMsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OigpPT5oaCxFeHRydWRlR2VvbWV0cnk6KCk9PmhoLEZhY2VDb2xvcnM6KCk9Pk0wcixGaWxlTG9hZGVyOigpPT5KYyxGbGF0U2hhZGluZzooKT0+QWh0LEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0MzJBdHRyaWJ1dGU6KCk9PnEwcixGbG9hdDMyQnVmZmVyQXR0cmlidXRlOigpPT54ZSxGbG9hdDY0QXR0cmlidXRlOigpPT5HMHIsRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTooKT0+bVUsRmxvYXRUeXBlOigpPT5qZCxGb2c6KCk9PnoxLEZvZ0V4cDI6KCk9Pk8xLEZvbnQ6KCk9Pm9fcixGb250TG9hZGVyOigpPT5pX3IsRnJhbWVidWZmZXJUZXh0dXJlOigpPT52VSxGcm9udFNpZGU6KCk9PkkxLEZydXN0dW06KCk9Pk4xLEdMQnVmZmVyQXR0cmlidXRlOigpPT5xVSxHTFNMMTooKT0+QmhyLEdMU0wzOigpPT5LdXQsR3JlYXRlckRlcHRoOigpPT5yZmUsR3JlYXRlckVxdWFsRGVwdGg6KCk9PmVmZSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzooKT0+TGhyLEdyZWF0ZXJTdGVuY2lsRnVuYzooKT0+UGhyLEdyaWRIZWxwZXI6KCk9PllVLEdyb3VwOigpPT5YZCxIYWxmRmxvYXRUeXBlOigpPT5DMSxIZW1pc3BoZXJlTGlnaHQ6KCk9PlQ2LEhlbWlzcGhlcmVMaWdodEhlbHBlcjooKT0+eWh0LEhlbWlzcGhlcmVMaWdodFByb2JlOigpPT5PVSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5HMSxJY29zYWhlZHJvbkdlb21ldHJ5OigpPT5HMSxJbWFnZUJpdG1hcExvYWRlcjooKT0+TlUsSW1hZ2VMb2FkZXI6KCk9PmV4LEltYWdlVXRpbHM6KCk9PktmLEltbWVkaWF0ZVJlbmRlck9iamVjdDooKT0+YV9yLEluY3JlbWVudFN0ZW5jaWxPcDooKT0+eGhyLEluY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PndocixJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnJtLEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OigpPT5ONixJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+VVUsSW5zdGFuY2VkTWVzaDooKT0+aTYsSW50MTZBdHRyaWJ1dGU6KCk9PkIwcixJbnQxNkJ1ZmZlckF0dHJpYnV0ZTooKT0+ZlUsSW50MzJBdHRyaWJ1dGU6KCk9PlYwcixJbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+cFUsSW50OEF0dHJpYnV0ZTooKT0+TzByLEludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLEludFR5cGU6KCk9PnBmZSxJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+ZW0sSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnRwLEludGVycG9sYW50OigpPT5maCxJbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5LUCxJbnRlcnBvbGF0ZUxpbmVhcjooKT0+WlAsSW50ZXJwb2xhdGVTbW9vdGg6KCk9PnJVLEludmVydFN0ZW5jaWxPcDooKT0+TWhyLEpTT05Mb2FkZXI6KCk9PlEwcixLZWVwU3RlbmNpbE9wOigpPT5uVSxLZXlmcmFtZVRyYWNrOigpPT5EbCxMT0Q6KCk9Pl9VLExhdGhlQnVmZmVyR2VvbWV0cnk6KCk9PlcxLExhdGhlR2VvbWV0cnk6KCk9PlcxLExheWVyczooKT0+WDMsTGVuc0ZsYXJlOigpPT5lX3IsTGVzc0RlcHRoOigpPT5RaGUsTGVzc0VxdWFsRGVwdGg6KCk9PmlVLExlc3NFcXVhbFN0ZW5jaWxGdW5jOigpPT5BaHIsTGVzc1N0ZW5jaWxGdW5jOigpPT5UaHIsTGlnaHQ6KCk9Pk9sLExpZ2h0UHJvYmU6KCk9PnJ4LExpbmU6KCk9PmNoLExpbmUzOigpPT5HVSxMaW5lQmFzaWNNYXRlcmlhbDooKT0+R2ksTGluZUN1cnZlOigpPT5VMSxMaW5lQ3VydmUzOigpPT5iVSxMaW5lRGFzaGVkTWF0ZXJpYWw6KCk9Pnc2LExpbmVMb29wOigpPT5vNixMaW5lUGllY2VzOigpPT53MHIsTGluZVNlZ21lbnRzOigpPT5BYSxMaW5lU3RyaXA6KCk9PmIwcixMaW5lYXJFbmNvZGluZzooKT0+UWQsTGluZWFyRmlsdGVyOigpPT5paSxMaW5lYXJJbnRlcnBvbGFudDooKT0+UzYsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOigpPT5taHIsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZGhyLExpbmVhck1pcG1hcExpbmVhckZpbHRlcjooKT0+b3gsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+TGh0LExpbmVhclRvbmVNYXBwaW5nOigpPT5hZmUsTG9hZGVyOigpPT5lYSxMb2FkZXJVdGlsczooKT0+ZE0sTG9hZGluZ01hbmFnZXI6KCk9PkU2LExvb3BPbmNlOigpPT5FZmUsTG9vcFBpbmdQb25nOigpPT5DZmUsTG9vcFJlcGVhdDooKT0+VGZlLEx1bWluYW5jZUFscGhhRm9ybWF0OigpPT55ZmUsTHVtaW5hbmNlRm9ybWF0OigpPT5fZmUsTU9VU0U6KCk9PkswLE1hdGVyaWFsOigpPT5xaSxNYXRlcmlhbExvYWRlcjooKT0+a1UsTWF0aDooKT0+UWhyLE1hdGhVdGlsczooKT0+UWhyLE1hdHJpeDM6KCk9PmtpLE1hdHJpeDQ6KCk9Pk1lLE1heEVxdWF0aW9uOigpPT5BdXQsTWVzaDooKT0+dGksTWVzaEJhc2ljTWF0ZXJpYWw6KCk9PnNoLE1lc2hEZXB0aE1hdGVyaWFsOigpPT5lTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDooKT0+ck0sTWVzaEZhY2VNYXRlcmlhbDooKT0+VDByLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6KCk9Png2LE1lc2hNYXRjYXBNYXRlcmlhbDooKT0+YjYsTWVzaE5vcm1hbE1hdGVyaWFsOigpPT52NixNZXNoUGhvbmdNYXRlcmlhbDooKT0+XzYsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6KCk9Pmc2LE1lc2hTdGFuZGFyZE1hdGVyaWFsOigpPT5wTSxNZXNoVG9vbk1hdGVyaWFsOigpPT55NixNaW5FcXVhdGlvbjooKT0+Q3V0LE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6KCk9PiRQLE1peE9wZXJhdGlvbjooKT0+aWZlLE11bHRpTWF0ZXJpYWw6KCk9PkMwcixNdWx0aXBseUJsZW5kaW5nOigpPT5UdXQsTXVsdGlwbHlPcGVyYXRpb246KCk9Pk82LE5lYXJlc3RGaWx0ZXI6KCk9PkxpLE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6KCk9PnBocixOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZmhyLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmFVLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOigpPT5vVSxOZXZlckRlcHRoOigpPT5aaGUsTmV2ZXJTdGVuY2lsRnVuYzooKT0+RWhyLE5vQmxlbmRpbmc6KCk9PiRkLE5vQ29sb3JzOigpPT5TMHIsTm9Ub25lTWFwcGluZzooKT0+S2QsTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOigpPT4kVSxOb3JtYWxCbGVuZGluZzooKT0+VjMsTm90RXF1YWxEZXB0aDooKT0+bmZlLE5vdEVxdWFsU3RlbmNpbEZ1bmM6KCk9PklocixOdW1iZXJLZXlmcmFtZVRyYWNrOigpPT5aMSxPYmplY3QzRDooKT0+b3IsT2JqZWN0TG9hZGVyOigpPT5zaHQsT2JqZWN0U3BhY2VOb3JtYWxNYXA6KCk9PkxmZSxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PlcwLE9jdGFoZWRyb25HZW9tZXRyeTooKT0+VzAsT25lRmFjdG9yOigpPT5xaGUsT25lTWludXNEc3RBbHBoYUZhY3RvcjooKT0+amhlLE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6KCk9PiRoZSxPbmVNaW51c1NyY0FscGhhRmFjdG9yOigpPT5JaHQsT25lTWludXNTcmNDb2xvckZhY3RvcjooKT0+V2hlLE9ydGhvZ3JhcGhpY0NhbWVyYTooKT0+RDEsUENGU2hhZG93TWFwOigpPT5DaHQsUENGU29mdFNoYWRvd01hcDooKT0+RmhlLFBNUkVNR2VuZXJhdG9yOigpPT5lNixQYXJhbWV0cmljR2VvbWV0cnk6KCk9PnJfcixQYXJ0aWNsZTooKT0+UDByLFBhcnRpY2xlQmFzaWNNYXRlcmlhbDooKT0+azByLFBhcnRpY2xlU3lzdGVtOigpPT5JMHIsUGFydGljbGVTeXN0ZW1NYXRlcmlhbDooKT0+UjByLFBhdGg6KCk9PnExLFBlcnNwZWN0aXZlQ2FtZXJhOigpPT5VaSxQbGFuZTooKT0+JGMsUGxhbmVCdWZmZXJHZW9tZXRyeTooKT0+VjAsUGxhbmVHZW9tZXRyeTooKT0+VjAsUGxhbmVIZWxwZXI6KCk9PlNodCxQb2ludENsb3VkOigpPT5BMHIsUG9pbnRDbG91ZE1hdGVyaWFsOigpPT5MMHIsUG9pbnRMaWdodDooKT0+UDYsUG9pbnRMaWdodEhlbHBlcjooKT0+X2h0LFBvaW50czooKT0+aW0sUG9pbnRzTWF0ZXJpYWw6KCk9Pm5tLFBvbGFyR3JpZEhlbHBlcjooKT0+dmh0LFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+dWgsUG9seWhlZHJvbkdlb21ldHJ5OigpPT51aCxQb3NpdGlvbmFsQXVkaW86KCk9PnVodCxQcm9wZXJ0eUJpbmRpbmc6KCk9PkNyLFByb3BlcnR5TWl4ZXI6KCk9PkJVLFF1YWRyYXRpY0JlemllckN1cnZlOigpPT51TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6KCk9PmhNLFF1YXRlcm5pb246KCk9PnlpLFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOigpPT5YMCxRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ6KCk9PkVVLFJFVklTSU9OOigpPT5qVSxSR0JBRGVwdGhQYWNraW5nOigpPT5JZmUsUkdCQUZvcm1hdDooKT0+UW8sUkdCQUludGVnZXJGb3JtYXQ6KCk9PlNmZSxSR0JBX0FTVENfMTB4MTBfRm9ybWF0OigpPT5ZdXQsUkdCQV9BU1RDXzEweDVfRm9ybWF0OigpPT5xdXQsUkdCQV9BU1RDXzEweDZfRm9ybWF0OigpPT5HdXQsUkdCQV9BU1RDXzEweDhfRm9ybWF0OigpPT5XdXQsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfNHg0X0Zvcm1hdDooKT0+RHV0LFJHQkFfQVNUQ181eDRfRm9ybWF0OigpPT5PdXQsUkdCQV9BU1RDXzV4NV9Gb3JtYXQ6KCk9Pnp1dCxSR0JBX0FTVENfNng1X0Zvcm1hdDooKT0+RnV0LFJHQkFfQVNUQ182eDZfRm9ybWF0OigpPT5CdXQsUkdCQV9BU1RDXzh4NV9Gb3JtYXQ6KCk9Pkh1dCxSR0JBX0FTVENfOHg2X0Zvcm1hdDooKT0+VnV0LFJHQkFfQVNUQ184eDhfRm9ybWF0OigpPT5VdXQsUkdCQV9CUFRDX0Zvcm1hdDooKT0+JHV0LFJHQkFfRVRDMl9FQUNfRm9ybWF0OigpPT5OdXQsUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5rdXQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCQV9TM1RDX0RYVDFfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUM19Gb3JtYXQ6KCk9PnRVLFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDooKT0+ZVUsUkdCX0VUQzFfRm9ybWF0OigpPT5NZmUsUkdCX0VUQzJfRm9ybWF0OigpPT5SdXQsUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+UHV0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OigpPT5KVixSR0Zvcm1hdDooKT0+YmZlLFJHSW50ZWdlckZvcm1hdDooKT0+d2ZlLFJhd1NoYWRlck1hdGVyaWFsOigpPT5VMCxSYXk6KCk9PkpmLFJheWNhc3RlcjooKT0+cGh0LFJlY3RBcmVhTGlnaHQ6KCk9Pms2LFJlZEZvcm1hdDooKT0+dmZlLFJlZEludGVnZXJGb3JtYXQ6KCk9PnhmZSxSZWluaGFyZFRvbmVNYXBwaW5nOigpPT5zZmUsUmVwZWF0V3JhcHBpbmc6KCk9PlhQLFJlcGxhY2VTdGVuY2lsT3A6KCk9PnZocixSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjooKT0+VmhlLFJpbmdCdWZmZXJHZW9tZXRyeTooKT0+WTEsUmluZ0dlb21ldHJ5OigpPT5ZMSxTY2VuZTooKT0+cTAsU2NlbmVVdGlsczooKT0+dF9yLFNoYWRlckNodW5rOigpPT5ocixTaGFkZXJMaWI6KCk9PmFoLFNoYWRlck1hdGVyaWFsOigpPT5saCxTaGFkb3dNYXRlcmlhbDooKT0+bTYsU2hhcGU6KCk9PktjLFNoYXBlQnVmZmVyR2VvbWV0cnk6KCk9PlkwLFNoYXBlR2VvbWV0cnk6KCk9PlkwLFNoYXBlUGF0aDooKT0+RWh0LFNoYXBlVXRpbHM6KCk9PlpjLFNob3J0VHlwZTooKT0+ZmZlLFNrZWxldG9uOigpPT5sTSxTa2VsZXRvbkhlbHBlcjooKT0+V1UsU2tpbm5lZE1lc2g6KCk9PmFNLFNtb290aFNoYWRpbmc6KCk9PmhocixTcGhlcmU6KCk9PlpmLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTcGhlcmVHZW9tZXRyeTooKT0+ajAsU3BoZXJpY2FsOigpPT5fTSxTcGhlcmljYWxIYXJtb25pY3MzOigpPT5SNixTcGxpbmVDdXJ2ZTooKT0+Zk0sU3BvdExpZ2h0OigpPT5BNixTcG90TGlnaHRIZWxwZXI6KCk9PmdodCxTcHJpdGU6KCk9Pm9NLFNwcml0ZU1hdGVyaWFsOigpPT5pTSxTcmNBbHBoYUZhY3RvcjooKT0+UGh0LFNyY0FscGhhU2F0dXJhdGVGYWN0b3I6KCk9PktoZSxTcmNDb2xvckZhY3RvcjooKT0+R2hlLFN0YXRpY0NvcHlVc2FnZTooKT0+T2hyLFN0YXRpY0RyYXdVc2FnZTooKT0+VzMsU3RhdGljUmVhZFVzYWdlOigpPT5SaHIsU3RlcmVvQ2FtZXJhOigpPT5saHQsU3RyZWFtQ29weVVzYWdlOigpPT5GaHIsU3RyZWFtRHJhd1VzYWdlOigpPT5raHIsU3RyZWFtUmVhZFVzYWdlOigpPT5EaHIsU3RyaW5nS2V5ZnJhbWVUcmFjazooKT0+c20sU3VidHJhY3RFcXVhdGlvbjooKT0+SGhlLFN1YnRyYWN0aXZlQmxlbmRpbmc6KCk9PkV1dCxUT1VDSDooKT0+WjAsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOigpPT5heCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5qMSxUZXRyYWhlZHJvbkdlb21ldHJ5OigpPT5qMSxUZXh0R2VvbWV0cnk6KCk9Pm5fcixUZXh0dXJlOigpPT52aSxUZXh0dXJlTG9hZGVyOigpPT5BVSxUb3J1c0J1ZmZlckdlb21ldHJ5OigpPT5YMSxUb3J1c0dlb21ldHJ5OigpPT5YMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90R2VvbWV0cnk6KCk9PiQxLFRyaWFuZ2xlOigpPT5vaSxUcmlhbmdsZUZhbkRyYXdNb2RlOigpPT5faHIsVHJpYW5nbGVTdHJpcERyYXdNb2RlOigpPT5naHIsVHJpYW5nbGVzRHJhd01vZGU6KCk9PkFmZSxUdWJlQnVmZmVyR2VvbWV0cnk6KCk9PksxLFR1YmVHZW9tZXRyeTooKT0+SzEsVVZNYXBwaW5nOigpPT5YVSxVaW50MTZBdHRyaWJ1dGU6KCk9PkgwcixVaW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PiQzLFVpbnQzMkF0dHJpYnV0ZTooKT0+VTByLFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+SzMsVWludDhBdHRyaWJ1dGU6KCk9PnowcixVaW50OEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVWludDhDbGFtcGVkQXR0cmlidXRlOigpPT5GMHIsVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOigpPT5oVSxVbmlmb3JtOigpPT5nTSxVbmlmb3Jtc0xpYjooKT0+cmUsVW5pZm9ybXNVdGlsczooKT0+emZlLFVuc2lnbmVkQnl0ZVR5cGU6KCk9PlpkLFVuc2lnbmVkSW50MjQ4VHlwZTooKT0+QTEsVW5zaWduZWRJbnRUeXBlOigpPT5WUCxVbnNpZ25lZFNob3J0NDQ0NFR5cGU6KCk9PmRmZSxVbnNpZ25lZFNob3J0NTU1MVR5cGU6KCk9Pm1mZSxVbnNpZ25lZFNob3J0VHlwZTooKT0+RzMsVlNNU2hhZG93TWFwOigpPT5GMyxWZWN0b3IyOigpPT5MdCxWZWN0b3IzOigpPT5qLFZlY3RvcjQ6KCk9PmVuLFZlY3RvcktleWZyYW1lVHJhY2s6KCk9PkoxLFZlcnRleDooKT0+TjByLFZlcnRleENvbG9yczooKT0+RTByLFZpZGVvVGV4dHVyZTooKT0+eVUsV2ViR0wxUmVuZGVyZXI6KCk9PmdVLFdlYkdMQ3ViZVJlbmRlclRhcmdldDooKT0+UTMsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6KCk9PmxVLFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6KCk9PmozLFdlYkdMUmVuZGVyVGFyZ2V0OigpPT51cyxXZWJHTFJlbmRlclRhcmdldEN1YmU6KCk9PlowcixXZWJHTFJlbmRlcmVyOigpPT5ybixXZWJHTFV0aWxzOigpPT4kZmUsV2lyZWZyYW1lR2VvbWV0cnk6KCk9PmQ2LFdpcmVmcmFtZUhlbHBlcjooKT0+WDByLFdyYXBBcm91bmRFbmRpbmc6KCk9PkpQLFhIUkxvYWRlcjooKT0+JDByLFplcm9DdXJ2YXR1cmVFbmRpbmc6KCk9PkUxLFplcm9GYWN0b3I6KCk9PlVoZSxaZXJvU2xvcGVFbmRpbmc6KCk9PlQxLFplcm9TdGVuY2lsT3A6KCk9PnlocixfU1JHQkFGb3JtYXQ6KCk9PnNVLHNSR0JFbmNvZGluZzooKT0+V259KTt2YXIgalU9IjEzNyIsSzA9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LFowPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sT2hlPTAsU3V0PTEsemhlPTIsY2hyPTMsdWhyPTAsQ2h0PTEsRmhlPTIsRjM9MyxJMT0wLElpPTEsTDE9MixBaHQ9MSxoaHI9MiwkZD0wLFYzPTEsTXV0PTIsRXV0PTMsVHV0PTQsQmhlPTUsTTE9MTAwLEhoZT0xMDEsVmhlPTEwMixDdXQ9MTAzLEF1dD0xMDQsVWhlPTIwMCxxaGU9MjAxLEdoZT0yMDIsV2hlPTIwMyxQaHQ9MjA0LElodD0yMDUsWWhlPTIwNixqaGU9MjA3LFhoZT0yMDgsJGhlPTIwOSxLaGU9MjEwLFpoZT0wLEpoZT0xLFFoZT0yLGlVPTMsdGZlPTQsZWZlPTUscmZlPTYsbmZlPTcsTzY9MCxpZmU9MSxvZmU9MixLZD0wLGFmZT0xLHNmZT0yLGxmZT0zLGNmZT00LHVmZT01LFhVPTMwMCxueD0zMDEsaXg9MzAyLFlQPTMwMyxqUD0zMDQseE09MzA2LHo2PTMwNyxYUD0xZTMsSm89MTAwMSwkUD0xMDAyLExpPTEwMDMsb1U9MTAwNCxmaHI9MTAwNCxhVT0xMDA1LHBocj0xMDA1LGlpPTEwMDYsTGh0PTEwMDcsZGhyPTEwMDcsb3g9MTAwOCxtaHI9MTAwOCxaZD0xMDA5LGhmZT0xMDEwLGZmZT0xMDExLEczPTEwMTIscGZlPTEwMTMsVlA9MTAxNCxqZD0xMDE1LEMxPTEwMTYsZGZlPTEwMTcsbWZlPTEwMTgsQTE9MTAyMCxnZmU9MTAyMSxRbz0xMDIzLF9mZT0xMDI0LHlmZT0xMDI1LHowPTEwMjYsazE9MTAyNyx2ZmU9MTAyOCx4ZmU9MTAyOSxiZmU9MTAzMCx3ZmU9MTAzMSxTZmU9MTAzMyxKVj0zMzc3NixRVj0zMzc3Nyx0VT0zMzc3OCxlVT0zMzc3OSxQdXQ9MzU4NDAsSXV0PTM1ODQxLEx1dD0zNTg0MixrdXQ9MzU4NDMsTWZlPTM2MTk2LFJ1dD0zNzQ5MixOdXQ9Mzc0OTYsRHV0PTM3ODA4LE91dD0zNzgwOSx6dXQ9Mzc4MTAsRnV0PTM3ODExLEJ1dD0zNzgxMixIdXQ9Mzc4MTMsVnV0PTM3ODE0LFV1dD0zNzgxNSxxdXQ9Mzc4MTYsR3V0PTM3ODE3LFd1dD0zNzgxOCxZdXQ9Mzc4MTksanV0PTM3ODIwLFh1dD0zNzgyMSwkdXQ9MzY0OTIsRWZlPTIyMDAsVGZlPTIyMDEsQ2ZlPTIyMDIsS1A9MjMwMCxaUD0yMzAxLHJVPTIzMDIsRTE9MjQwMCxUMT0yNDAxLEpQPTI0MDIsJFU9MjUwMCxraHQ9MjUwMSxBZmU9MCxnaHI9MSxfaHI9MixRZD0zZTMsV249MzAwMSxQZmU9MzIwMCxJZmU9MzIwMSxheD0wLExmZT0xLHlocj0wLG5VPTc2ODAsdmhyPTc2ODEseGhyPTc2ODIsYmhyPTc2ODMsd2hyPTM0MDU1LFNocj0zNDA1NixNaHI9NTM4NixFaHI9NTEyLFRocj01MTMsQ2hyPTUxNCxBaHI9NTE1LFBocj01MTYsSWhyPTUxNyxMaHI9NTE4LGtmZT01MTksVzM9MzUwNDQsWTM9MzUwNDgsa2hyPTM1MDQwLFJocj0zNTA0NSxOaHI9MzUwNDksRGhyPTM1MDQxLE9ocj0zNTA0Nix6aHI9MzUwNTAsRmhyPTM1MDQyLEJocj0iMTAwIixLdXQ9IjMwMCBlcyIsc1U9MTAzNSxVcz1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQscil7dGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7blt0XT09PXZvaWQgMCYmKG5bdF09W10pLG5bdF0uaW5kZXhPZihyKT09PS0xJiZuW3RdLnB1c2gocil9aGFzRXZlbnRMaXN0ZW5lcih0LHIpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm4hMTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIG5bdF0hPT12b2lkIDAmJm5bdF0uaW5kZXhPZihyKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0XTtpZihpIT09dm9pZCAwKXtsZXQgbz1pLmluZGV4T2Yocik7byE9PS0xJiZpLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IG49dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYobiE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztsZXQgaT1uLnNsaWNlKDApO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LEtvPVtdO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylLb1tlXT0oZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpO3ZhciB1Vj0xMjM0NTY3LFAxPU1hdGguUEkvMTgwLFFQPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIE5sKCl7bGV0IGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxyPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKEtvW2UmMjU1XStLb1tlPj44JjI1NV0rS29bZT4+MTYmMjU1XStLb1tlPj4yNCYyNTVdKyItIitLb1t0JjI1NV0rS29bdD4+OCYyNTVdKyItIitLb1t0Pj4xNiYxNXw2NF0rS29bdD4+MjQmMjU1XSsiLSIrS29bciY2M3wxMjhdK0tvW3I+PjgmMjU1XSsiLSIrS29bcj4+MTYmMjU1XStLb1tyPj4yNCYyNTVdK0tvW24mMjU1XStLb1tuPj44JjI1NV0rS29bbj4+MTYmMjU1XStLb1tuPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFpvKGUsdCxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX1mdW5jdGlvbiBSaHQoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gSGhyKGUsdCxyLG4saSl7cmV0dXJuIG4rKGUtdCkqKGktbikvKHItdCl9ZnVuY3Rpb24gVmhyKGUsdCxyKXtyZXR1cm4gZSE9PXQ/KHItZSkvKHQtZSk6MH1mdW5jdGlvbiBVUChlLHQscil7cmV0dXJuKDEtcikqZStyKnR9ZnVuY3Rpb24gVWhyKGUsdCxyLG4pe3JldHVybiBVUChlLHQsMS1NYXRoLmV4cCgtcipuKSl9ZnVuY3Rpb24gcWhyKGUsdD0xKXtyZXR1cm4gdC1NYXRoLmFicyhSaHQoZSx0KjIpLXQpfWZ1bmN0aW9uIEdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKigzLTIqZSkpfWZ1bmN0aW9uIFdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKmUqKGUqKGUqNi0xNSkrMTApKX1mdW5jdGlvbiBZaHIoZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9ZnVuY3Rpb24gamhyKGUsdCl7cmV0dXJuIGUrTWF0aC5yYW5kb20oKSoodC1lKX1mdW5jdGlvbiBYaHIoZSl7cmV0dXJuIGUqKC41LU1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uICRocihlKXtyZXR1cm4gZSE9PXZvaWQgMCYmKHVWPWUlMjE0NzQ4MzY0NyksdVY9dVYqMTY4MDclMjE0NzQ4MzY0NywodVYtMSkvMjE0NzQ4MzY0Nn1mdW5jdGlvbiBLaHIoZSl7cmV0dXJuIGUqUDF9ZnVuY3Rpb24gWmhyKGUpe3JldHVybiBlKlFQfWZ1bmN0aW9uIFp1dChlKXtyZXR1cm4oZSZlLTEpPT09MCYmZSE9PTB9ZnVuY3Rpb24gUmZlKGUpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIE5mZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSl9ZnVuY3Rpb24gSmhyKGUsdCxyLG4saSl7bGV0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8oci8yKSxsPWEoci8yKSxjPW8oKHQrbikvMiksdT1hKCh0K24pLzIpLGg9bygodC1uKS8yKSxmPWEoKHQtbikvMikscD1vKChuLXQpLzIpLGQ9YSgobi10KS8yKTtzd2l0Y2goaSl7Y2FzZSJYWVgiOmUuc2V0KHMqdSxsKmgsbCpmLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOmUuc2V0KGwqZixzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOmUuc2V0KGwqaCxsKmYscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOmUuc2V0KHMqdSxsKmQsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOmUuc2V0KGwqcCxzKnUsbCpkLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOmUuc2V0KGwqZCxsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2kpfX12YXIgUWhyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFRzJSQUQ6UDEsUkFEMkRFRzpRUCxnZW5lcmF0ZVVVSUQ6TmwsY2xhbXA6Wm8sZXVjbGlkZWFuTW9kdWxvOlJodCxtYXBMaW5lYXI6SGhyLGludmVyc2VMZXJwOlZocixsZXJwOlVQLGRhbXA6VWhyLHBpbmdwb25nOnFocixzbW9vdGhzdGVwOkdocixzbW9vdGhlcnN0ZXA6V2hyLHJhbmRJbnQ6WWhyLHJhbmRGbG9hdDpqaHIscmFuZEZsb2F0U3ByZWFkOlhocixzZWVkZWRSYW5kb206JGhyLGRlZ1RvUmFkOktocixyYWRUb0RlZzpaaHIsaXNQb3dlck9mVHdvOlp1dCxjZWlsUG93ZXJPZlR3bzpSZmUsZmxvb3JQb3dlck9mVHdvOk5mZSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOkpocn0pLEx0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTApe3RoaXMueD10LHRoaXMueT1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKnIraVszXSpuK2lbNl0sdGhpcy55PWlbMV0qcitpWzRdKm4raVs3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiByKnIrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXN9cm90YXRlQXJvdW5kKHQscil7bGV0IG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9bypuLWEqaSt0LngsdGhpcy55PW8qaSthKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0x0LnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGtpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPWksdVsyXT1zLHVbM109cix1WzRdPW8sdVs1XT1sLHVbNl09bix1WzddPWEsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxyLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0scls0XSxyWzhdLHJbMV0scls1XSxyWzldLHJbMl0scls2XSxyWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxyKXtsZXQgbj10LmVsZW1lbnRzLGk9ci5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1uWzBdLHM9blszXSxsPW5bNl0sYz1uWzFdLHU9bls0XSxoPW5bN10sZj1uWzJdLHA9bls1XSxkPW5bOF0sZz1pWzBdLF89aVszXSx5PWlbNl0seD1pWzFdLGI9aVs0XSxTPWlbN10sQz1pWzJdLFA9aVs1XSxrPWlbOF07cmV0dXJuIG9bMF09YSpnK3MqeCtsKkMsb1szXT1hKl8rcypiK2wqUCxvWzZdPWEqeStzKlMrbCprLG9bMV09YypnK3UqeCtoKkMsb1s0XT1jKl8rdSpiK2gqUCxvWzddPWMqeSt1KlMraCprLG9bMl09ZipnK3AqeCtkKkMsb1s1XT1mKl8rcCpiK2QqUCxvWzhdPWYqeStwKlMrZCprLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzNdKj10LHJbNl0qPXQsclsxXSo9dCxyWzRdKj10LHJbN10qPXQsclsyXSo9dCxyWzVdKj10LHJbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIHIqYSp1LXIqcypjLW4qbyp1K24qcypsK2kqbypjLWkqYSpsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11KmEtcypjLGY9cypsLXUqbyxwPWMqby1hKmwsZD1yKmgrbipmK2kqcDtpZihkPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCBnPTEvZDtyZXR1cm4gdFswXT1oKmcsdFsxXT0oaSpjLXUqbikqZyx0WzJdPShzKm4taSphKSpnLHRbM109ZipnLHRbNF09KHUqci1pKmwpKmcsdFs1XT0oaSpvLXMqcikqZyx0WzZdPXAqZyx0WzddPShuKmwtYypyKSpnLHRbOF09KGEqci1uKm8pKmcsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxyPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9clsxXSxyWzFdPXJbM10sclszXT10LHQ9clsyXSxyWzJdPXJbNl0scls2XT10LHQ9cls1XSxyWzVdPXJbN10scls3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPXJbMF0sdFsxXT1yWzNdLHRbMl09cls2XSx0WzNdPXJbMV0sdFs0XT1yWzRdLHRbNV09cls3XSx0WzZdPXJbMl0sdFs3XT1yWzVdLHRbOF09cls4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQscixuLGksbyxhLHMpe2xldCBsPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7cmV0dXJuIHRoaXMuc2V0KG4qbCxuKmMsLW4qKGwqYStjKnMpK2ErdCwtaSpjLGkqbCwtaSooLWMqYStsKnMpK3MrciwwLDAsMSksdGhpc31zY2FsZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPXIsbls0XSo9cixuWzddKj1yLHRoaXN9cm90YXRlKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbM10scz1pWzZdLGw9aVsxXSxjPWlbNF0sdT1pWzddO3JldHVybiBpWzBdPXIqbytuKmwsaVszXT1yKmErbipjLGlbNl09cipzK24qdSxpWzFdPS1uKm8rcipsLGlbNF09LW4qYStyKmMsaVs3XT0tbipzK3IqdSx0aGlzfXRyYW5zbGF0ZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPXIqblsyXSxuWzRdKz1yKm5bNV0sbls3XSs9cipuWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspaWYocltpXSE9PW5baV0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQscj0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07a2kucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBEZmUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpaWYoZVt0XT42NTUzNSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgdGZyPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheX07ZnVuY3Rpb24gQjMoZSx0KXtyZXR1cm4gbmV3IHRmcltlXSh0KX1mdW5jdGlvbiB0NihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixlKX12YXIgT2ZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LG5oPXtoOjAsczowLGw6MH0saFY9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBHY3QoZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKyh0LWUpKjYqcjpyPDEvMj90OnI8Mi8zP2UrKHQtZSkqNiooMi8zLXIpOmV9ZnVuY3Rpb24gVTMoZSl7cmV0dXJuIGU8LjA0MDQ1P2UqLjA3NzM5OTM4MDg6TWF0aC5wb3coZSouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIFdjdChlKXtyZXR1cm4gZTwuMDAzMTMwOD9lKjEyLjkyOjEuMDU1Kk1hdGgucG93KGUsLjQxNjY2KS0uMDU1fXZhciBuZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7cmV0dXJuIHI9PT12b2lkIDAmJm49PT12b2lkIDA/dGhpcy5zZXQodCk6dGhpcy5zZXRSR0IodCxyLG4pfXNldCh0KXtyZXR1cm4gdCYmdC5pc0NvbG9yP3RoaXMuY29weSh0KTp0eXBlb2YgdD09Im51bWJlciI/dGhpcy5zZXRIZXgodCk6dHlwZW9mIHQ9PSJzdHJpbmciJiZ0aGlzLnNldFN0eWxlKHQpLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9dCx0aGlzLmI9dCx0aGlzfXNldEhleCh0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLHRoaXMucj0odD4+MTYmMjU1KS8yNTUsdGhpcy5nPSh0Pj44JjI1NSkvMjU1LHRoaXMuYj0odCYyNTUpLzI1NSx0aGlzfXNldFJHQih0LHIsbil7cmV0dXJuIHRoaXMucj10LHRoaXMuZz1yLHRoaXMuYj1uLHRoaXN9c2V0SFNMKHQscixuKXtpZih0PVJodCh0LDEpLHI9Wm8ociwwLDEpLG49Wm8obiwwLDEpLHI9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtsZXQgaT1uPD0uNT9uKigxK3IpOm4rci1uKnIsbz0yKm4taTt0aGlzLnI9R2N0KG8saSx0KzEvMyksdGhpcy5nPUdjdChvLGksdCksdGhpcy5iPUdjdChvLGksdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIHIoaSl7aSE9PXZvaWQgMCYmcGFyc2VGbG9hdChpKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCBpLG89blsxXSxhPW5bMl07c3dpdGNoKG8pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKGk9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChpWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbM10sMTApKS8yNTUscihpWzRdKSx0aGlzO2lmKGk9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChpWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbM10sMTApKS8xMDAscihpWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKGk9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBzPXBhcnNlRmxvYXQoaVsxXSkvMzYwLGw9cGFyc2VJbnQoaVsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoaVszXSwxMCkvMTAwO3JldHVybiByKGlbNF0pLHRoaXMuc2V0SFNMKHMsbCxjKX1icmVha319ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IGk9blsxXSxvPWkubGVuZ3RoO2lmKG89PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMSkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKG89PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoNCkraS5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCByPU9mZVt0LnRvTG93ZXJDYXNlKCldO3JldHVybiByIT09dm9pZCAwP3RoaXMuc2V0SGV4KHIpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1VMyh0LnIpLHRoaXMuZz1VMyh0LmcpLHRoaXMuYj1VMyh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVdjdCh0LnIpLHRoaXMuZz1XY3QodC5nKSx0aGlzLmI9V2N0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IHI9dGhpcy5yLG49dGhpcy5nLGk9dGhpcy5iLG89TWF0aC5tYXgocixuLGkpLGE9TWF0aC5taW4ocixuLGkpLHMsbCxjPShhK28pLzI7aWYoYT09PW8pcz0wLGw9MDtlbHNle2xldCB1PW8tYTtzd2l0Y2gobD1jPD0uNT91LyhvK2EpOnUvKDItby1hKSxvKXtjYXNlIHI6cz0obi1pKS91KyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS1yKS91KzI7YnJlYWs7Y2FzZSBpOnM9KHItbikvdSs0O2JyZWFrfXMvPTZ9cmV0dXJuIHQuaD1zLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQscixuKXtyZXR1cm4gdGhpcy5nZXRIU0wobmgpLG5oLmgrPXQsbmgucys9cixuaC5sKz1uLHRoaXMuc2V0SFNMKG5oLmgsbmgucyxuaC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxyKXtyZXR1cm4gdGhpcy5yPXQucityLnIsdGhpcy5nPXQuZytyLmcsdGhpcy5iPXQuYityLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxyKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqcix0aGlzLmcrPSh0LmctdGhpcy5nKSpyLHRoaXMuYis9KHQuYi10aGlzLmIpKnIsdGhpc31sZXJwQ29sb3JzKHQscixuKXtyZXR1cm4gdGhpcy5yPXQucisoci5yLXQucikqbix0aGlzLmc9dC5nKyhyLmctdC5nKSpuLHRoaXMuYj10LmIrKHIuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQscil7dGhpcy5nZXRIU0wobmgpLHQuZ2V0SFNMKGhWKTtsZXQgbj1VUChuaC5oLGhWLmgsciksaT1VUChuaC5zLGhWLnMsciksbz1VUChuaC5sLGhWLmwscik7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxvKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLnI9dFtyXSx0aGlzLmc9dFtyKzFdLHRoaXMuYj10W3IrMl0sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLnIsdFtyKzFdPXRoaXMuZyx0W3IrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpe3JldHVybiB0aGlzLnI9dC5nZXRYKHIpLHRoaXMuZz10LmdldFkociksdGhpcy5iPXQuZ2V0WihyKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07bmUuTkFNRVM9T2ZlO25lLnByb3RvdHlwZS5pc0NvbG9yPSEwO25lLnByb3RvdHlwZS5yPTE7bmUucHJvdG90eXBlLmc9MTtuZS5wcm90b3R5cGUuYj0xO3ZhciB2MyxLZj1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD09InVuZGVmaW5lZCIpcmV0dXJuIHQuc3JjO2xldCByO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClyPXQ7ZWxzZXt2Mz09PXZvaWQgMCYmKHYzPXQ2KCJjYW52YXMiKSksdjMud2lkdGg9dC53aWR0aCx2My5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49djMuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxyPXYzfXJldHVybiByLndpZHRoPjIwNDh8fHIuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTpyLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHI9dDYoImNhbnZhcyIpO3Iud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodDtsZXQgbj1yLmdldENvbnRleHQoIjJkIik7bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IGk9bi5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89aS5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09VTMob1thXS8yNTUpKjI1NTtyZXR1cm4gbi5wdXRJbWFnZURhdGEoaSwwLDApLHJ9ZWxzZSBpZih0LmRhdGEpe2xldCByPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3Jbbl09TWF0aC5mbG9vcihVMyhyW25dLzI1NSkqMjU1KTpyW25dPVUzKHJbbl0pO3JldHVybntkYXRhOnIsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxlZnI9MCx2aT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQ9dmkuREVGQVVMVF9JTUFHRSxyPXZpLkRFRkFVTFRfTUFQUElORyxuPUpvLGk9Sm8sbz1paSxhPW94LHM9UW8sbD1aZCxjPTEsdT1RZCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTplZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1yLHRoaXMud3JhcFM9bix0aGlzLndyYXBUPWksdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBMdCgwLDApLHRoaXMucmVwZWF0PW5ldyBMdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBMdCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGtpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIXImJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgaT10aGlzLmltYWdlO2lmKGkudXVpZD09PXZvaWQgMCYmKGkudXVpZD1ObCgpKSwhciYmdC5pbWFnZXNbaS51dWlkXT09PXZvaWQgMCl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1bXTtmb3IobGV0IGE9MCxzPWkubGVuZ3RoO2E8czthKyspaVthXS5pc0RhdGFUZXh0dXJlP28ucHVzaChZY3QoaVthXS5pbWFnZSkpOm8ucHVzaChZY3QoaVthXSkpfWVsc2Ugbz1ZY3QoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOm99fW4uaW1hZ2U9aS51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHJ8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PVhVKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgWFA6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBKbzp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBYUDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEpvOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAkUDpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt2aS5ERUZBVUxUX0lNQUdFPXZvaWQgMDt2aS5ERUZBVUxUX01BUFBJTkc9WFU7dmkucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBZY3QoZSl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwP0tmLmdldERhdGFVUkwoZSk6ZS5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuZGF0YSksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsdHlwZTplLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX12YXIgZW49Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7Y2FzZSAzOnRoaXMudz1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz10LnchPT12b2lkIDA/dC53OjEsdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpcy56PXQueityLnosdGhpcy53PXQudytyLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXMueis9dC56KnIsdGhpcy53Kz10Lncqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzLno9dC56LXIueix0aGlzLnc9dC53LXIudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qcithWzRdKm4rYVs4XSppK2FbMTJdKm8sdGhpcy55PWFbMV0qcithWzVdKm4rYVs5XSppK2FbMTNdKm8sdGhpcy56PWFbMl0qcithWzZdKm4rYVsxMF0qaSthWzE0XSpvLHRoaXMudz1hWzNdKnIrYVs3XSpuK2FbMTFdKmkrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCByPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiByPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9yLHRoaXMueT10Lnkvcix0aGlzLno9dC56L3IpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCByLG4saSxvLGw9dC5lbGVtZW50cyxjPWxbMF0sdT1sWzRdLGg9bFs4XSxmPWxbMV0scD1sWzVdLGQ9bFs5XSxnPWxbMl0sXz1sWzZdLHk9bFsxMF07aWYoTWF0aC5hYnModS1mKTwuMDEmJk1hdGguYWJzKGgtZyk8LjAxJiZNYXRoLmFicyhkLV8pPC4wMSl7aWYoTWF0aC5hYnModStmKTwuMSYmTWF0aC5hYnMoaCtnKTwuMSYmTWF0aC5hYnMoZCtfKTwuMSYmTWF0aC5hYnMoYytwK3ktMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7cj1NYXRoLlBJO2xldCBiPShjKzEpLzIsUz0ocCsxKS8yLEM9KHkrMSkvMixQPSh1K2YpLzQsaz0oaCtnKS80LE89KGQrXykvNDtyZXR1cm4gYj5TJiZiPkM/YjwuMDE/KG49MCxpPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQoYiksaT1QL24sbz1rL24pOlM+Qz9TPC4wMT8obj0uNzA3MTA2NzgxLGk9MCxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChTKSxuPVAvaSxvPU8vaSk6QzwuMDE/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoQyksbj1rL28saT1PL28pLHRoaXMuc2V0KG4saSxvLHIpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChfLWQpKihfLWQpKyhoLWcpKihoLWcpKyhmLXUpKihmLXUpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShfLWQpL3gsdGhpcy55PShoLWcpL3gsdGhpcy56PShmLXUpL3gsdGhpcy53PU1hdGguYWNvcygoYytwK3ktMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihyLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXMudys9KHQudy10aGlzLncpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzLno9dC56KyhyLnotdC56KSpuLHRoaXMudz10LncrKHIudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXMuej10W3IrMl0sdGhpcy53PXRbciszXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdFtyKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzLnc9dC5nZXRXKHIpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07ZW4ucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBlbigwLDAsdCxyKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGVuKDAsMCx0LHIpLHRoaXMudGV4dHVyZT1uZXcgdmkodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwP24uZ2VuZXJhdGVNaXBtYXBzOiExLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD1uLmludGVybmFsRm9ybWF0IT09dm9pZCAwP24uaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPW4ubWluRmlsdGVyIT09dm9pZCAwP24ubWluRmlsdGVyOmlpLHRoaXMuZGVwdGhCdWZmZXI9bi5kZXB0aEJ1ZmZlciE9PXZvaWQgMD9uLmRlcHRoQnVmZmVyOiEwLHRoaXMuc3RlbmNpbEJ1ZmZlcj1uLnN0ZW5jaWxCdWZmZXIhPT12b2lkIDA/bi5zdGVuY2lsQnVmZmVyOiExLHRoaXMuZGVwdGhUZXh0dXJlPW4uZGVwdGhUZXh0dXJlIT09dm9pZCAwP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQscixuPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bikmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt1cy5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMDt2YXIgbFU9Y2xhc3MgZXh0ZW5kcyB1c3tjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIodCxyKTtsZXQgaT10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288bjtvKyspdGhpcy50ZXh0dXJlW29dPWkuY2xvbmUoKX1zZXRTaXplKHQscixuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PXJ8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW47Zm9yKGxldCBpPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO2k8bztpKyspdGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCByPTAsbj10LnRleHR1cmUubGVuZ3RoO3I8bjtyKyspdGhpcy50ZXh0dXJlW3JdPXQudGV4dHVyZVtyXS5jbG9uZSgpO3JldHVybiB0aGlzfX07bFUucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIGozPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKHQscixuKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PW4uaWdub3JlRGVwdGghPT12b2lkIDA/bi5pZ25vcmVEZXB0aDohMCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT1uLnVzZVJlbmRlclRvVGV4dHVyZSE9PXZvaWQgMD9uLnVzZVJlbmRlclRvVGV4dHVyZTohMSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10aGlzLnVzZVJlbmRlclRvVGV4dHVyZT09PSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O2ozLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIHlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pfXN0YXRpYyBzbGVycCh0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksbi5zbGVycFF1YXRlcm5pb25zKHQscixpKX1zdGF0aWMgc2xlcnBGbGF0KHQscixuLGksbyxhLHMpe2xldCBsPW5baSswXSxjPW5baSsxXSx1PW5baSsyXSxoPW5baSszXSxmPW9bYSswXSxwPW9bYSsxXSxkPW9bYSsyXSxnPW9bYSszXTtpZihzPT09MCl7dFtyKzBdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWg7cmV0dXJufWlmKHM9PT0xKXt0W3IrMF09Zix0W3IrMV09cCx0W3IrMl09ZCx0W3IrM109ZztyZXR1cm59aWYoaCE9PWd8fGwhPT1mfHxjIT09cHx8dSE9PWQpe2xldCBfPTEtcyx5PWwqZitjKnArdSpkK2gqZyx4PXk+PTA/MTotMSxiPTEteSp5O2lmKGI+TnVtYmVyLkVQU0lMT04pe2xldCBDPU1hdGguc3FydChiKSxQPU1hdGguYXRhbjIoQyx5KngpO189TWF0aC5zaW4oXypQKS9DLHM9TWF0aC5zaW4ocypQKS9DfWxldCBTPXMqeDtpZihsPWwqXytmKlMsYz1jKl8rcCpTLHU9dSpfK2QqUyxoPWgqXytnKlMsXz09PTEtcyl7bGV0IEM9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUraCpoKTtsKj1DLGMqPUMsdSo9QyxoKj1DfX10W3JdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWh9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscixuLGksbyxhKXtsZXQgcz1uW2ldLGw9bltpKzFdLGM9bltpKzJdLHU9bltpKzNdLGg9b1thXSxmPW9bYSsxXSxwPW9bYSsyXSxkPW9bYSszXTtyZXR1cm4gdFtyXT1zKmQrdSpoK2wqcC1jKmYsdFtyKzFdPWwqZCt1KmYrYypoLXMqcCx0W3IrMl09YypkK3UqcCtzKmYtbCpoLHRbciszXT11KmQtcypoLWwqZi1jKnAsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQscixuLGkpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1yLHRoaXMuX3o9bix0aGlzLl93PWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQscil7aWYoISh0JiZ0LmlzRXVsZXIpKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IG49dC5feCxpPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhuLzIpLHU9cyhpLzIpLGg9cyhvLzIpLGY9bChuLzIpLHA9bChpLzIpLGQ9bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIllYWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIlpYWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlpZWCI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIllaWCI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlhaWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuIHIhPT0hMSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LHIpe2xldCBuPXIvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcj10LmVsZW1lbnRzLG49clswXSxpPXJbNF0sbz1yWzhdLGE9clsxXSxzPXJbNV0sbD1yWzldLGM9clsyXSx1PXJbNl0saD1yWzEwXSxmPW4rcytoO2lmKGY+MCl7bGV0IHA9LjUvTWF0aC5zcXJ0KGYrMSk7dGhpcy5fdz0uMjUvcCx0aGlzLl94PSh1LWwpKnAsdGhpcy5feT0oby1jKSpwLHRoaXMuX3o9KGEtaSkqcH1lbHNlIGlmKG4+cyYmbj5oKXtsZXQgcD0yKk1hdGguc3FydCgxK24tcy1oKTt0aGlzLl93PSh1LWwpL3AsdGhpcy5feD0uMjUqcCx0aGlzLl95PShpK2EpL3AsdGhpcy5fej0obytjKS9wfWVsc2UgaWYocz5oKXtsZXQgcD0yKk1hdGguc3FydCgxK3Mtbi1oKTt0aGlzLl93PShvLWMpL3AsdGhpcy5feD0oaSthKS9wLHRoaXMuX3k9LjI1KnAsdGhpcy5fej0obCt1KS9wfWVsc2V7bGV0IHA9MipNYXRoLnNxcnQoMStoLW4tcyk7dGhpcy5fdz0oYS1pKS9wLHRoaXMuX3g9KG8rYykvcCx0aGlzLl95PShsK3UpL3AsdGhpcy5fej0uMjUqcH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQscil7bGV0IG49dC5kb3QocikrMTtyZXR1cm4gbjxOdW1iZXIuRVBTSUxPTj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSpyLnotdC56KnIueSx0aGlzLl95PXQueipyLngtdC54KnIueix0aGlzLl96PXQueCpyLnktdC55KnIueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoWm8odGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQscil7bGV0IG49dGhpcy5hbmdsZVRvKHQpO2lmKG49PT0wKXJldHVybiB0aGlzO2xldCBpPU1hdGgubWluKDEsci9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpe2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX3cscz1yLl94LGw9ci5feSxjPXIuX3osdT1yLl93O3JldHVybiB0aGlzLl94PW4qdSthKnMraSpjLW8qbCx0aGlzLl95PWkqdSthKmwrbypzLW4qYyx0aGlzLl96PW8qdSthKmMrbipsLWkqcyx0aGlzLl93PWEqdS1uKnMtaSpsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LHIpe2lmKHI9PT0wKXJldHVybiB0aGlzO2lmKHI9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IG49dGhpcy5feCxpPXRoaXMuX3ksbz10aGlzLl96LGE9dGhpcy5fdyxzPWEqdC5fdytuKnQuX3graSp0Ll95K28qdC5fejtpZihzPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscz0tcyk6dGhpcy5jb3B5KHQpLHM+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1pLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtcypzO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgcD0xLXI7cmV0dXJuIHRoaXMuX3c9cCphK3IqdGhpcy5fdyx0aGlzLl94PXAqbityKnRoaXMuX3gsdGhpcy5feT1wKmkrcip0aGlzLl95LHRoaXMuX3o9cCpvK3IqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxzKSxoPU1hdGguc2luKCgxLXIpKnUpL2MsZj1NYXRoLnNpbihyKnUpL2M7cmV0dXJuIHRoaXMuX3c9YSpoK3RoaXMuX3cqZix0aGlzLl94PW4qaCt0aGlzLl94KmYsdGhpcy5feT1pKmgrdGhpcy5feSpmLHRoaXMuX3o9bypoK3RoaXMuX3oqZix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQscixuKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKHIsbil9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxyPU1hdGguc3FydCgxLXQpLG49TWF0aC5zcXJ0KHQpLGk9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQocipNYXRoLmNvcyhpKSxuKk1hdGguc2luKG8pLG4qTWF0aC5jb3MobykscipNYXRoLnNpbihpKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLl94PXRbcl0sdGhpcy5feT10W3IrMV0sdGhpcy5fej10W3IrMl0sdGhpcy5fdz10W3IrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5feCx0W3IrMV09dGhpcy5feSx0W3IrMl09dGhpcy5feix0W3IrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5feD10LmdldFgociksdGhpcy5feT10LmdldFkociksdGhpcy5fej10LmdldFoociksdGhpcy5fdz10LmdldFcociksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eWkucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgaj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW59c2V0KHQscixuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxyKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54KnIueCx0aGlzLnk9dC55KnIueSx0aGlzLno9dC56KnIueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQscil7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tQXhpc0FuZ2xlKHQscikpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bM10qbitvWzZdKmksdGhpcy55PW9bMV0qcitvWzRdKm4rb1s3XSppLHRoaXMuej1vWzJdKnIrb1s1XSpuK29bOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cyxhPTEvKG9bM10qcitvWzddKm4rb1sxMV0qaStvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSpyK29bNF0qbitvWzhdKmkrb1sxMl0pKmEsdGhpcy55PShvWzFdKnIrb1s1XSpuK29bOV0qaStvWzEzXSkqYSx0aGlzLno9KG9bMl0qcitvWzZdKm4rb1sxMF0qaStvWzE0XSkqYSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LngsYT10Lnkscz10LnosbD10LncsYz1sKnIrYSppLXMqbix1PWwqbitzKnItbyppLGg9bCppK28qbi1hKnIsZj0tbypyLWEqbi1zKmk7cmV0dXJuIHRoaXMueD1jKmwrZiotbyt1Ki1zLWgqLWEsdGhpcy55PXUqbCtmKi1hK2gqLW8tYyotcyx0aGlzLno9aCpsK2YqLXMrYyotYS11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bNF0qbitvWzhdKmksdGhpcy55PW9bMV0qcitvWzVdKm4rb1s5XSppLHRoaXMuej1vWzJdKnIrb1s2XSpuK29bMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKHIueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzfWNyb3NzKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LHIpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXIueCxzPXIueSxsPXIuejtyZXR1cm4gdGhpcy54PWkqbC1vKnMsdGhpcy55PW8qYS1uKmwsdGhpcy56PW4qcy1pKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IHI9dC5sZW5ndGhTcSgpO2lmKHI9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IG49dC5kb3QodGhpcykvcjtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqY3QuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoamN0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihqY3QuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgcj1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYocj09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgbj10aGlzLmRvdCh0KS9yO3JldHVybiBNYXRoLmFjb3MoWm8obiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gcipyK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxyLG4pe2xldCBpPU1hdGguc2luKHIpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhyKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4ociksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MociksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMTJdLHRoaXMueT1yWzEzXSx0aGlzLno9clsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9cix0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxyKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxyKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsciozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdFtyKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLHI9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsbj1NYXRoLnNxcnQoMS1USSh0LDIpKTtyZXR1cm4gdGhpcy54PW4qTWF0aC5jb3MociksdGhpcy55PW4qTWF0aC5zaW4ociksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O2oucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgamN0PW5ldyBqLGR1ZT1uZXcgeWksdGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaigxLzAsMS8wLDEvMCkscj1uZXcgaigtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCByPTAsbj10Lmxlbmd0aDtyPG47cisrKXRoaXMuZXhwYW5kQnlQb2ludCh0W3JdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LHIpe2xldCBuPW0xLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCxyPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQscil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQscj0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IG49dC5nZW9tZXRyeTtpZihuIT09dm9pZCAwKWlmKHImJm4uYXR0cmlidXRlcyE9bnVsbCYmbi5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspbTEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQobTEpfWVsc2Ugbi5ib3VuZGluZ0JveD09PW51bGwmJm4uY29tcHV0ZUJvdW5kaW5nQm94KCksWGN0LmNvcHkobi5ib3VuZGluZ0JveCksWGN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKFhjdCk7bGV0IGk9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChpW29dLHIpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsbTEpLG0xLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByLG47cmV0dXJuIHQubm9ybWFsLng+MD8ocj10Lm5vcm1hbC54KnRoaXMubWluLngsbj10Lm5vcm1hbC54KnRoaXMubWF4LngpOihyPXQubm9ybWFsLngqdGhpcy5tYXgueCxuPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhyKz10Lm5vcm1hbC55KnRoaXMubWluLnksbis9dC5ub3JtYWwueSp0aGlzLm1heC55KToocis9dC5ub3JtYWwueSp0aGlzLm1heC55LG4rPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhyKz10Lm5vcm1hbC56KnRoaXMubWluLnosbis9dC5ub3JtYWwueip0aGlzLm1heC56KToocis9dC5ub3JtYWwueip0aGlzLm1heC56LG4rPXQubm9ybWFsLnoqdGhpcy5taW4ueikscjw9LXQuY29uc3RhbnQmJm4+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihMUCksZlYuc3ViVmVjdG9ycyh0aGlzLm1heCxMUCkseDMuc3ViVmVjdG9ycyh0LmEsTFApLGIzLnN1YlZlY3RvcnModC5iLExQKSx3My5zdWJWZWN0b3JzKHQuYyxMUCksUDAuc3ViVmVjdG9ycyhiMyx4MyksSTAuc3ViVmVjdG9ycyh3MyxiMyksZzEuc3ViVmVjdG9ycyh4Myx3Myk7bGV0IHI9WzAsLVAwLnosUDAueSwwLC1JMC56LEkwLnksMCwtZzEueixnMS55LFAwLnosMCwtUDAueCxJMC56LDAsLUkwLngsZzEueiwwLC1nMS54LC1QMC55LFAwLngsMCwtSTAueSxJMC54LDAsLWcxLnksZzEueCwwXTtyZXR1cm4hJGN0KHIseDMsYjMsdzMsZlYpfHwocj1bMSwwLDAsMCwxLDAsMCwwLDFdLCEkY3Qocix4MyxiMyx3MyxmVikpPyExOihwVi5jcm9zc1ZlY3RvcnMoUDAsSTApLHI9W3BWLngscFYueSxwVi56XSwkY3Qocix4MyxiMyx3MyxmVikpfWNsYW1wUG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG0xLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShtMSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KFZkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhWZCksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dGEucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgVmQ9W25ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqXSxtMT1uZXcgaixYY3Q9bmV3IHRhLHgzPW5ldyBqLGIzPW5ldyBqLHczPW5ldyBqLFAwPW5ldyBqLEkwPW5ldyBqLGcxPW5ldyBqLExQPW5ldyBqLGZWPW5ldyBqLHBWPW5ldyBqLF8xPW5ldyBqO2Z1bmN0aW9uICRjdChlLHQscixuLGkpe2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGgtMztvPD1hO28rPTMpe18xLmZyb21BcnJheShlLG8pO2xldCBzPWkueCpNYXRoLmFicyhfMS54KStpLnkqTWF0aC5hYnMoXzEueSkraS56Kk1hdGguYWJzKF8xLnopLGw9dC5kb3QoXzEpLGM9ci5kb3QoXzEpLHU9bi5kb3QoXzEpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5zKXJldHVybiExfXJldHVybiEwfXZhciByZnI9bmV3IHRhLG11ZT1uZXcgaixkVj1uZXcgaixLY3Q9bmV3IGosWmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9cix0aGlzfXNldEZyb21Qb2ludHModCxyKXtsZXQgbj10aGlzLmNlbnRlcjtyIT09dm9pZCAwP24uY29weShyKTpyZnIuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgcj10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1yKnJ9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LHIpe2xldCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiByLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKHIuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxyLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxyfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtLY3Quc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgcj1LY3QubGVuZ3RoU3EoKTtpZihyPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgbj1NYXRoLnNxcnQociksaT0obi10aGlzLnJhZGl1cykqLjU7dGhpcy5jZW50ZXIuYWRkKEtjdC5tdWx0aXBseVNjYWxhcihpL24pKSx0aGlzLnJhZGl1cys9aX1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP2RWLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOmRWLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQobXVlLmNvcHkodC5jZW50ZXIpLmFkZChkVikpLHRoaXMuZXhwYW5kQnlQb2ludChtdWUuY29weSh0LmNlbnRlcikuc3ViKGRWKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sVWQ9bmV3IGosWmN0PW5ldyBqLG1WPW5ldyBqLEwwPW5ldyBqLEpjdD1uZXcgaixnVj1uZXcgaixRY3Q9bmV3IGosSmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LFVkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7ci5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBuPXIuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP3IuY29weSh0aGlzLm9yaWdpbik6ci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCByPVVkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gcjwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihVZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5vcmlnaW4pLFVkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQscixuLGkpe1pjdC5jb3B5KHQpLmFkZChyKS5tdWx0aXBseVNjYWxhciguNSksbVYuY29weShyKS5zdWIodCkubm9ybWFsaXplKCksTDAuY29weSh0aGlzLm9yaWdpbikuc3ViKFpjdCk7bGV0IG89dC5kaXN0YW5jZVRvKHIpKi41LGE9LXRoaXMuZGlyZWN0aW9uLmRvdChtVikscz1MMC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LUwwLmRvdChtViksYz1MMC5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1hKmEpLGgsZixwLGQ7aWYodT4wKWlmKGg9YSpsLXMsZj1hKnMtbCxkPW8qdSxoPj0wKWlmKGY+PS1kKWlmKGY8PWQpe2xldCBnPTEvdTtoKj1nLGYqPWcscD1oKihoK2EqZisyKnMpK2YqKGEqaCtmKzIqbCkrY31lbHNlIGY9byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZD8oaD1NYXRoLm1heCgwLC0oLWEqbytzKSksZj1oPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk6Zjw9ZD8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShhKm8rcykpLGY9aD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPWE+MD8tbzpvLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO3JldHVybiBuJiZuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksaSYmaS5jb3B5KG1WKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoWmN0KSxwfWludGVyc2VjdFNwaGVyZSh0LHIpe1VkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBuPVVkLmRvdCh0aGlzLmRpcmVjdGlvbiksaT1VZC5kb3QoVWQpLW4qbixvPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1pKSxzPW4tYSxsPW4rYTtyZXR1cm4gczwwJiZsPDA/bnVsbDpzPDA/dGhpcy5hdChsLHIpOnRoaXMuYXQocyxyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCByPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYocj09PTApcmV0dXJuIHQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT09PTA/MDpudWxsO2xldCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9yO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LHIpe2xldCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBuPT09bnVsbD9udWxsOnRoaXMuYXQobixyKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IHI9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiByPT09MHx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpyPDB9aW50ZXJzZWN0Qm94KHQscil7bGV0IG4saSxvLGEscyxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGg9MS90aGlzLmRpcmVjdGlvbi56LGY9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KG49KHQubWluLngtZi54KSpjLGk9KHQubWF4LngtZi54KSpjKToobj0odC5tYXgueC1mLngpKmMsaT0odC5taW4ueC1mLngpKmMpLHU+PTA/KG89KHQubWluLnktZi55KSp1LGE9KHQubWF4LnktZi55KSp1KToobz0odC5tYXgueS1mLnkpKnUsYT0odC5taW4ueS1mLnkpKnUpLG4+YXx8bz5pfHwoKG8+bnx8biE9PW4pJiYobj1vKSwoYTxpfHxpIT09aSkmJihpPWEpLGg+PTA/KHM9KHQubWluLnotZi56KSpoLGw9KHQubWF4LnotZi56KSpoKToocz0odC5tYXguei1mLnopKmgsbD0odC5taW4uei1mLnopKmgpLG4+bHx8cz5pKXx8KChzPm58fG4hPT1uKSYmKG49cyksKGw8aXx8aSE9PWkpJiYoaT1sKSxpPDApP251bGw6dGhpcy5hdChuPj0wP246aSxyKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0aGlzLmludGVyc2VjdEJveCh0LFVkKSE9PW51bGx9aW50ZXJzZWN0VHJpYW5nbGUodCxyLG4saSxvKXtKY3Quc3ViVmVjdG9ycyhyLHQpLGdWLnN1YlZlY3RvcnMobix0KSxRY3QuY3Jvc3NWZWN0b3JzKEpjdCxnVik7bGV0IGE9dGhpcy5kaXJlY3Rpb24uZG90KFFjdCkscztpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7cz0xfWVsc2UgaWYoYTwwKXM9LTEsYT0tYTtlbHNlIHJldHVybiBudWxsO0wwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoZ1YuY3Jvc3NWZWN0b3JzKEwwLGdWKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KEpjdC5jcm9zcyhMMCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IHU9LXMqTDAuZG90KFFjdCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9hLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxNZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09cix5WzhdPW4seVsxMl09aSx5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPXUseVsxMF09aCx5WzE0XT1mLHlbM109cCx5WzddPWQseVsxMV09Zyx5WzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgTWUoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0scls5XT1uWzldLHJbMTBdPW5bMTBdLHJbMTFdPW5bMTFdLHJbMTJdPW5bMTJdLHJbMTNdPW5bMTNdLHJbMTRdPW5bMTRdLHJbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiByWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0sclszXSxyWzZdLDAsclsxXSxyWzRdLHJbN10sMCxyWzJdLHJbNV0scls4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxyLG4pe3JldHVybiB0aGlzLnNldCh0Lngsci54LG4ueCwwLHQueSxyLnksbi55LDAsdC56LHIueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gclswXT1uWzBdKmksclsxXT1uWzFdKmksclsyXT1uWzJdKmksclszXT0wLHJbNF09bls0XSpvLHJbNV09bls1XSpvLHJbNl09bls2XSpvLHJbN109MCxyWzhdPW5bOF0qYSxyWzldPW5bOV0qYSxyWzEwXT1uWzEwXSphLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQueixhPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGkpLHU9TWF0aC5jb3MobyksaD1NYXRoLnNpbihvKTtpZih0Lm9yZGVyPT09IlhZWiIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPS1sKmgscls4XT1jLHJbMV09cCtkKmMscls1XT1mLWcqYyxyWzldPS1zKmwsclsyXT1nLWYqYyxyWzZdPWQrcCpjLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWVhaIil7bGV0IGY9bCp1LHA9bCpoLGQ9Yyp1LGc9YypoO3JbMF09ZitnKnMscls0XT1kKnMtcCxyWzhdPWEqYyxyWzFdPWEqaCxyWzVdPWEqdSxyWzldPS1zLHJbMl09cCpzLWQscls2XT1nK2YqcyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYtZypzLHJbNF09LWEqaCxyWzhdPWQrcCpzLHJbMV09cCtkKnMscls1XT1hKnUscls5XT1nLWYqcyxyWzJdPS1hKmMscls2XT1zLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWllYIil7bGV0IGY9YSp1LHA9YSpoLGQ9cyp1LGc9cypoO3JbMF09bCp1LHJbNF09ZCpjLXAscls4XT1mKmMrZyxyWzFdPWwqaCxyWzVdPWcqYytmLHJbOV09cCpjLWQsclsyXT0tYyxyWzZdPXMqbCxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllaWCIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPWctZipoLHJbOF09ZCpoK3AsclsxXT1oLHJbNV09YSp1LHJbOV09LXMqdSxyWzJdPS1jKnUscls2XT1wKmgrZCxyWzEwXT1mLWcqaH1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7bGV0IGY9YSpsLHA9YSpjLGQ9cypsLGc9cypjO3JbMF09bCp1LHJbNF09LWgscls4XT1jKnUsclsxXT1mKmgrZyxyWzVdPWEqdSxyWzldPXAqaC1kLHJbMl09ZCpoLXAscls2XT1zKnUsclsxMF09ZypoK2Z9cmV0dXJuIHJbM109MCxyWzddPTAsclsxMV09MCxyWzEyXT0wLHJbMTNdPTAsclsxNF09MCxyWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShuZnIsdCxpZnIpfWxvb2tBdCh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4ga2wuc3ViVmVjdG9ycyh0LHIpLGtsLmxlbmd0aFNxKCk9PT0wJiYoa2wuej0xKSxrbC5ub3JtYWxpemUoKSxrMC5jcm9zc1ZlY3RvcnMobixrbCksazAubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhuLnopPT09MT9rbC54Kz0xZS00OmtsLnorPTFlLTQsa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpKSxrMC5ub3JtYWxpemUoKSxfVi5jcm9zc1ZlY3RvcnMoa2wsazApLGlbMF09azAueCxpWzRdPV9WLngsaVs4XT1rbC54LGlbMV09azAueSxpWzVdPV9WLnksaVs5XT1rbC55LGlbMl09azAueixpWzZdPV9WLnosaVsxMF09a2wueix0aGlzfW11bHRpcGx5KHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQscikpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bNF0sbD1uWzhdLGM9blsxMl0sdT1uWzFdLGg9bls1XSxmPW5bOV0scD1uWzEzXSxkPW5bMl0sZz1uWzZdLF89blsxMF0seT1uWzE0XSx4PW5bM10sYj1uWzddLFM9blsxMV0sQz1uWzE1XSxQPWlbMF0saz1pWzRdLE89aVs4XSxEPWlbMTJdLEI9aVsxXSxJPWlbNV0sTD1pWzldLFI9aVsxM10sRj1pWzJdLHo9aVs2XSxVPWlbMTBdLFc9aVsxNF0sWj1pWzNdLHJ0PWlbN10sb3Q9aVsxMV0sc3Q9aVsxNV07cmV0dXJuIG9bMF09YSpQK3MqQitsKkYrYypaLG9bNF09YSprK3MqSStsKnorYypydCxvWzhdPWEqTytzKkwrbCpVK2Mqb3Qsb1sxMl09YSpEK3MqUitsKlcrYypzdCxvWzFdPXUqUCtoKkIrZipGK3AqWixvWzVdPXUqaytoKkkrZip6K3AqcnQsb1s5XT11Kk8raCpMK2YqVStwKm90LG9bMTNdPXUqRCtoKlIrZipXK3Aqc3Qsb1syXT1kKlArZypCK18qRit5Klosb1s2XT1kKmsrZypJK18qeit5KnJ0LG9bMTBdPWQqTytnKkwrXypVK3kqb3Qsb1sxNF09ZCpEK2cqUitfKlcreSpzdCxvWzNdPXgqUCtiKkIrUypGK0MqWixvWzddPXgqaytiKkkrUyp6K0MqcnQsb1sxMV09eCpPK2IqTCtTKlUrQypvdCxvWzE1XT14KkQrYipSK1MqVytDKnN0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzRdKj10LHJbOF0qPXQsclsxMl0qPXQsclsxXSo9dCxyWzVdKj10LHJbOV0qPXQsclsxM10qPXQsclsyXSo9dCxyWzZdKj10LHJbMTBdKj10LHJbMTRdKj10LHJbM10qPXQscls3XSo9dCxyWzExXSo9dCxyWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0sbj10WzRdLGk9dFs4XSxvPXRbMTJdLGE9dFsxXSxzPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLHA9dFsxNF0sZD10WzNdLGc9dFs3XSxfPXRbMTFdLHk9dFsxNV07cmV0dXJuIGQqKCtvKmwqaC1pKmMqaC1vKnMqZituKmMqZitpKnMqcC1uKmwqcCkrZyooK3IqbCpwLXIqYypmK28qYSpmLWkqYSpwK2kqYyp1LW8qbCp1KStfKigrcipjKmgtcipzKnAtbyphKmgrbiphKnArbypzKnUtbipjKnUpK3kqKC1pKnMqdS1yKmwqaCtyKnMqZitpKmEqaC1uKmEqZituKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyO3JldHVybiByPXRbMV0sdFsxXT10WzRdLHRbNF09cixyPXRbMl0sdFsyXT10WzhdLHRbOF09cixyPXRbNl0sdFs2XT10WzldLHRbOV09cixyPXRbM10sdFszXT10WzEyXSx0WzEyXT1yLHI9dFs3XSx0WzddPXRbMTNdLHRbMTNdPXIscj10WzExXSx0WzExXT10WzE0XSx0WzE0XT1yLHRoaXN9c2V0UG9zaXRpb24odCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109cixpWzE0XT1uKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0scD10WzExXSxkPXRbMTJdLGc9dFsxM10sXz10WzE0XSx5PXRbMTVdLHg9aCpfKmMtZypmKmMrZypsKnAtcypfKnAtaCpsKnkrcypmKnksYj1kKmYqYy11Kl8qYy1kKmwqcCthKl8qcCt1KmwqeS1hKmYqeSxTPXUqZypjLWQqaCpjK2QqcypwLWEqZypwLXUqcyp5K2EqaCp5LEM9ZCpoKmwtdSpnKmwtZCpzKmYrYSpnKmYrdSpzKl8tYSpoKl8sUD1yKngrbipiK2kqUytvKkM7aWYoUD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBrPTEvUDtyZXR1cm4gdFswXT14KmssdFsxXT0oZypmKm8taCpfKm8tZyppKnArbipfKnAraCppKnktbipmKnkpKmssdFsyXT0ocypfKm8tZypsKm8rZyppKmMtbipfKmMtcyppKnkrbipsKnkpKmssdFszXT0oaCpsKm8tcypmKm8taCppKmMrbipmKmMrcyppKnAtbipsKnApKmssdFs0XT1iKmssdFs1XT0odSpfKm8tZCpmKm8rZCppKnAtcipfKnAtdSppKnkrcipmKnkpKmssdFs2XT0oZCpsKm8tYSpfKm8tZCppKmMrcipfKmMrYSppKnktcipsKnkpKmssdFs3XT0oYSpmKm8tdSpsKm8rdSppKmMtcipmKmMtYSppKnArcipsKnApKmssdFs4XT1TKmssdFs5XT0oZCpoKm8tdSpnKm8tZCpuKnArcipnKnArdSpuKnktcipoKnkpKmssdFsxMF09KGEqZypvLWQqcypvK2QqbipjLXIqZypjLWEqbip5K3Iqcyp5KSprLHRbMTFdPSh1KnMqby1hKmgqby11Km4qYytyKmgqYythKm4qcC1yKnMqcCkqayx0WzEyXT1DKmssdFsxM109KHUqZyppLWQqaCppK2QqbipmLXIqZypmLXUqbipfK3IqaCpfKSprLHRbMTRdPShkKnMqaS1hKmcqaS1kKm4qbCtyKmcqbCthKm4qXy1yKnMqXykqayx0WzE1XT0oYSpoKmktdSpzKmkrdSpuKmwtcipoKmwtYSpuKmYrcipzKmYpKmssdGhpc31zY2FsZSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LG89dC56O3JldHVybiByWzBdKj1uLHJbNF0qPWkscls4XSo9byxyWzFdKj1uLHJbNV0qPWkscls5XSo9byxyWzJdKj1uLHJbNl0qPWksclsxMF0qPW8sclszXSo9bixyWzddKj1pLHJbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sbj10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxpPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChyLG4saSkpfW1ha2VUcmFuc2xhdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsciwwLDAsMSxuLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsciwtbiwwLDAsbixyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsMCxuLDAsMCwxLDAsMCwtbiwwLHIsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQociwtbiwwLDAsbixyLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz0xLW4sYT10Lngscz10LnksbD10LnosYz1vKmEsdT1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStuLGMqcy1pKmwsYypsK2kqcywwLGMqcytpKmwsdSpzK24sdSpsLWkqYSwwLGMqbC1pKnMsdSpsK2kqYSxvKmwqbCtuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxyLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsciwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsbixvLDAsdCwxLGEsMCxyLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPXIuX3gsYT1yLl95LHM9ci5feixsPXIuX3csYz1vK28sdT1hK2EsaD1zK3MsZj1vKmMscD1vKnUsZD1vKmgsZz1hKnUsXz1hKmgseT1zKmgseD1sKmMsYj1sKnUsUz1sKmgsQz1uLngsUD1uLnksaz1uLno7cmV0dXJuIGlbMF09KDEtKGcreSkpKkMsaVsxXT0ocCtTKSpDLGlbMl09KGQtYikqQyxpWzNdPTAsaVs0XT0ocC1TKSpQLGlbNV09KDEtKGYreSkpKlAsaVs2XT0oXyt4KSpQLGlbN109MCxpWzhdPShkK2IpKmssaVs5XT0oXy14KSprLGlbMTBdPSgxLShmK2cpKSprLGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPVMzLnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCksYT1TMy5zZXQoaVs0XSxpWzVdLGlbNl0pLmxlbmd0aCgpLHM9UzMuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSxpaC5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvYSxoPTEvcztyZXR1cm4gaWguZWxlbWVudHNbMF0qPWMsaWguZWxlbWVudHNbMV0qPWMsaWguZWxlbWVudHNbMl0qPWMsaWguZWxlbWVudHNbNF0qPXUsaWguZWxlbWVudHNbNV0qPXUsaWguZWxlbWVudHNbNl0qPXUsaWguZWxlbWVudHNbOF0qPWgsaWguZWxlbWVudHNbOV0qPWgsaWguZWxlbWVudHNbMTBdKj1oLHIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGloKSxuLng9byxuLnk9YSxuLno9cyx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LHIsbixpLG8sYSl7YT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTIqby8oci10KSxjPTIqby8obi1pKSx1PShyK3QpLyhyLXQpLGg9KG4raSkvKG4taSksZj0tKGErbykvKGEtbykscD0tMiphKm8vKGEtbyk7cmV0dXJuIHNbMF09bCxzWzRdPTAsc1s4XT11LHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPWgsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPWYsc1sxNF09cCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oci10KSxjPTEvKG4taSksdT0xLyhhLW8pLGg9KHIrdCkqbCxmPShuK2kpKmMscD0oYStvKSp1O3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS1oLHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LWYsc1syXT0wLHNbNl09MCxzWzEwXT0tMip1LHNbMTRdPS1wLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8MTY7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rcl07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtyXT1uWzBdLHRbcisxXT1uWzFdLHRbcisyXT1uWzJdLHRbciszXT1uWzNdLHRbcis0XT1uWzRdLHRbcis1XT1uWzVdLHRbcis2XT1uWzZdLHRbcis3XT1uWzddLHRbcis4XT1uWzhdLHRbcis5XT1uWzldLHRbcisxMF09blsxMF0sdFtyKzExXT1uWzExXSx0W3IrMTJdPW5bMTJdLHRbcisxM109blsxM10sdFtyKzE0XT1uWzE0XSx0W3IrMTVdPW5bMTVdLHR9fTtNZS5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBTMz1uZXcgaixpaD1uZXcgTWUsbmZyPW5ldyBqKDAsMCwwKSxpZnI9bmV3IGooMSwxLDEpLGswPW5ldyBqLF9WPW5ldyBqLGtsPW5ldyBqLGd1ZT1uZXcgTWUsX3VlPW5ldyB5aSx0bT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPXRtLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQscj10aGlzLl9vcmRlcixuPSEwKXtsZXQgaT10LmVsZW1lbnRzLG89aVswXSxhPWlbNF0scz1pWzhdLGw9aVsxXSxjPWlbNV0sdT1pWzldLGg9aVsyXSxmPWlbNl0scD1pWzEwXTtzd2l0Y2gocil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFpvKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUscCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVpvKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihabyhmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1abyhoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWm8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMscCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWm8oYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIityKX1yZXR1cm4gdGhpcy5fb3JkZXI9cixuPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQscixuKXtyZXR1cm4gZ3VlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGd1ZSxyLG4pfXNldEZyb21WZWN0b3IzKHQscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LHIpfXJlb3JkZXIodCl7cmV0dXJuIF91ZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihfdWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdFszXSE9PXZvaWQgMCYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RtLnByb3RvdHlwZS5pc0V1bGVyPSEwO3RtLkRlZmF1bHRPcmRlcj0iWFlaIjt0bS5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBYMz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuKHRoaXMubWFzayZ0Lm1hc2spIT09MH1pc0VuYWJsZWQodCl7cmV0dXJuKHRoaXMubWFzayYoMTw8dHwwKSkhPT0wfX0sb2ZyPTAseXVlPW5ldyBqLE0zPW5ldyB5aSxxZD1uZXcgTWUseVY9bmV3IGosa1A9bmV3IGosYWZyPW5ldyBqLHNmcj1uZXcgeWksdnVlPW5ldyBqKDEsMCwwKSx4dWU9bmV3IGooMCwxLDApLGJ1ZT1uZXcgaigwLDAsMSksbGZyPXt0eXBlOiJhZGRlZCJ9LHd1ZT17dHlwZToicmVtb3ZlZCJ9LG9yPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm9mcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPW9yLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBqLHI9bmV3IHRtLG49bmV3IHlpLGk9bmV3IGooMSwxLDEpO2Z1bmN0aW9uIG8oKXtuLnNldEZyb21FdWxlcihyLCExKX1mdW5jdGlvbiBhKCl7ci5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9ci5fb25DaGFuZ2Uobyksbi5fb25DaGFuZ2UoYSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTWV9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGtpfX0pLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLm1hdHJpeFdvcmxkPW5ldyBNZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxyKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LHIpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShNMyksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LHIpe3JldHVybiBNMy5zZXRGcm9tQXhpc0FuZ2xlKHQsciksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHZ1ZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh4dWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYnVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LHIpe3JldHVybiB5dWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCh5dWUubXVsdGlwbHlTY2FsYXIocikpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXModnVlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHh1ZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhidWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHFkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LHIsbil7dC5pc1ZlY3RvcjM/eVYuY29weSh0KTp5Vi5zZXQodCxyLG4pO2xldCBpPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGtQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/cWQubG9va0F0KGtQLHlWLHRoaXMudXApOnFkLmxvb2tBdCh5VixrUCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHFkKSxpJiYocWQuZXh0cmFjdFJvdGF0aW9uKGkubWF0cml4V29ybGQpLE0zLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCByPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0aGlzLmFkZChhcmd1bWVudHNbcl0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnBhcmVudCE9PW51bGwmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQobGZyKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbbl0pO3JldHVybiB0aGlzfWxldCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpLHQuZGlzcGF0Y2hFdmVudCh3dWUpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IHI9dGhpcy5jaGlsZHJlblt0XTtyLnBhcmVudD1udWxsLHIuZGlzcGF0Y2hFdmVudCh3dWUpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpLHQucGFyZW50IT09bnVsbCYmKHQucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KHFkKSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQscil7aWYodGhpc1t0XT09PXIpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtsZXQgYT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxyKTtpZihhIT09dm9pZCAwKXJldHVybiBhfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHQsYWZyKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHNmcix0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCByPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KHJbOF0scls5XSxyWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCByPXRoaXMucGFyZW50O3IhPT1udWxsJiYodChyKSxyLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7bGV0IG49dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZuIT09bnVsbCYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkscj09PSEwKXtsZXQgaT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixuPXt9O3ImJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCBpPXt9O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoaS5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKGkucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBvKHMsbCl7cmV0dXJuIHNbbC51dWlkXT09PXZvaWQgMCYmKHNbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9pLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihpLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihpLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtpLmdlb21ldHJ5PW8odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBzPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihzIT09dm9pZCAwJiZzLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9cy5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107byh0LnNoYXBlcyxoKX1lbHNlIG8odC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IHM9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKXMucHVzaChvKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtpLm1hdGVyaWFsPXN9ZWxzZSBpLm1hdGVyaWFsPW8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7aS5jaGlsZHJlbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylpLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltzXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe2kuYW5pbWF0aW9ucz1bXTtmb3IobGV0IHM9MDtzPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7cysrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbc107aS5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsbCkpfX1pZihyKXtsZXQgcz1hKHQuZ2VvbWV0cmllcyksbD1hKHQubWF0ZXJpYWxzKSxjPWEodC50ZXh0dXJlcyksdT1hKHQuaW1hZ2VzKSxoPWEodC5zaGFwZXMpLGY9YSh0LnNrZWxldG9ucykscD1hKHQuYW5pbWF0aW9ucyk7cy5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1zKSxsLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKG4udGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKG4uaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihuLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9ZikscC5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1wKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIGEocyl7bGV0IGw9W107Zm9yKGxldCBjIGluIHMpe2xldCB1PXNbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LHI9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxyPT09ITApZm9yKGxldCBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe2xldCBpPXQuY2hpbGRyZW5bbl07dGhpcy5hZGQoaS5jbG9uZSgpKX1yZXR1cm4gdGhpc319O29yLkRlZmF1bHRVcD1uZXcgaigwLDEsMCk7b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7b3IucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIG9oPW5ldyBqLEdkPW5ldyBqLHR1dD1uZXcgaixXZD1uZXcgaixFMz1uZXcgaixUMz1uZXcgaixTdWU9bmV3IGosZXV0PW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosb2k9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3RoaXMuYT10LHRoaXMuYj1yLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxyLG4saSl7aS5zdWJWZWN0b3JzKG4sciksb2guc3ViVmVjdG9ycyh0LHIpLGkuY3Jvc3Mob2gpO2xldCBvPWkubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP2kubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOmkuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQscixuLGksbyl7b2guc3ViVmVjdG9ycyhpLHIpLEdkLnN1YlZlY3RvcnMobixyKSx0dXQuc3ViVmVjdG9ycyh0LHIpO2xldCBhPW9oLmRvdChvaCkscz1vaC5kb3QoR2QpLGw9b2guZG90KHR1dCksYz1HZC5kb3QoR2QpLHU9R2QuZG90KHR1dCksaD1hKmMtcypzO2lmKGg9PT0wKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLHA9KGMqbC1zKnUpKmYsZD0oYSp1LXMqbCkqZjtyZXR1cm4gby5zZXQoMS1wLWQsZCxwKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LHIsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksV2QueD49MCYmV2QueT49MCYmV2QueCtXZC55PD0xfXN0YXRpYyBnZXRVVih0LHIsbixpLG8sYSxzLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LHIsbixpLFdkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sV2QueCksbC5hZGRTY2FsZWRWZWN0b3IoYSxXZC55KSxsLmFkZFNjYWxlZFZlY3RvcihzLFdkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxyLG4saSl7cmV0dXJuIG9oLnN1YlZlY3RvcnMobixyKSxHZC5zdWJWZWN0b3JzKHQsciksb2guY3Jvc3MoR2QpLmRvdChpKTwwfXNldCh0LHIsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KHIpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbcl0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbaV0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBvaC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLEdkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksb2guY3Jvc3MoR2QpLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIG9pLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LHIpe3JldHVybiBvaS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyKX1nZXRVVih0LHIsbixpLG8pe3JldHVybiBvaS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLHIsbixpLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIG9pLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gb2kuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7bGV0IG49dGhpcy5hLGk9dGhpcy5iLG89dGhpcy5jLGEscztFMy5zdWJWZWN0b3JzKGksbiksVDMuc3ViVmVjdG9ycyhvLG4pLGV1dC5zdWJWZWN0b3JzKHQsbik7bGV0IGw9RTMuZG90KGV1dCksYz1UMy5kb3QoZXV0KTtpZihsPD0wJiZjPD0wKXJldHVybiByLmNvcHkobik7cnV0LnN1YlZlY3RvcnModCxpKTtsZXQgdT1FMy5kb3QocnV0KSxoPVQzLmRvdChydXQpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIHIuY29weShpKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIGE9bC8obC11KSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpO251dC5zdWJWZWN0b3JzKHQsbyk7bGV0IHA9RTMuZG90KG51dCksZD1UMy5kb3QobnV0KTtpZihkPj0wJiZwPD1kKXJldHVybiByLmNvcHkobyk7bGV0IGc9cCpjLWwqZDtpZihnPD0wJiZjPj0wJiZkPD0wKXJldHVybiBzPWMvKGMtZCksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihUMyxzKTtsZXQgXz11KmQtcCpoO2lmKF88PTAmJmgtdT49MCYmcC1kPj0wKXJldHVybiBTdWUuc3ViVmVjdG9ycyhvLGkpLHM9KGgtdSkvKGgtdSsocC1kKSksci5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihTdWUscyk7bGV0IHk9MS8oXytnK2YpO3JldHVybiBhPWcqeSxzPWYqeSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpLmFkZFNjYWxlZFZlY3RvcihUMyxzKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxjZnI9MCxxaT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpjZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPVYzLHRoaXMuc2lkZT1JMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9UGh0LHRoaXMuYmxlbmREc3Q9SWh0LHRoaXMuYmxlbmRFcXVhdGlvbj1NMSx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPWlVLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9a2ZlLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW5VLHRoaXMuc3RlbmNpbFpGYWlsPW5VLHRoaXMuc3RlbmNpbFpQYXNzPW5VLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCByIGluIHQpe2xldCBuPXRbcl07aWYobj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrcisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKHI9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PUFodDtjb250aW51ZX1sZXQgaT10aGlzW3JdO2lmKGk9PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrcisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpO2NvbnRpbnVlfWkmJmkuaXNDb2xvcj9pLnNldChuKTppJiZpLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/aS5jb3B5KG4pOnRoaXNbcl09bn19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtyJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07bi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx0aGlzLnJvdWdobmVzcyE9PXZvaWQgMCYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx0aGlzLm1ldGFsbmVzcyE9PXZvaWQgMCYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuIT09dm9pZCAwJiYobi5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYobi5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdGhpcy5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKG4uc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiZ0aGlzLmVtaXNzaXZlSW50ZW5zaXR5IT09MSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYobi5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYobi5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdGhpcy5zaGluaW5lc3MhPT12b2lkIDAmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdGhpcy5jbGVhcmNvYXQhPT12b2lkIDAmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MhPT12b2lkIDAmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdGhpcy5jb21iaW5lIT09dm9pZCAwJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHRoaXMuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHRoaXMucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHRoaXMucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudGhpY2tuZXNzIT09dm9pZCAwJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdGhpcy5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdGhpcy5zaXplIT09dm9pZCAwJiYobi5zaXplPXRoaXMuc2l6ZSksdGhpcy5zaGFkb3dTaWRlIT09bnVsbCYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHRoaXMuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1WMyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09STEmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLHRoaXMudHJhbnNwYXJlbnQ9PT0hMCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmdGhpcy5yb3RhdGlvbiE9PTAmJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLHRoaXMucG9seWdvbk9mZnNldD09PSEwJiYobi5wb2x5Z29uT2Zmc2V0PSEwKSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IhPT0wJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMhPT0wJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiZ0aGlzLmxpbmV3aWR0aCE9PTEmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdGhpcy5kYXNoU2l6ZSE9PXZvaWQgMCYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdGhpcy5nYXBTaXplIT09dm9pZCAwJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdGhpcy5zY2FsZSE9PXZvaWQgMCYmKG4uc2NhbGU9dGhpcy5zY2FsZSksdGhpcy5kaXRoZXJpbmc9PT0hMCYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLHRoaXMuYWxwaGFUb0NvdmVyYWdlPT09ITAmJihuLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9PT0hMCYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSx0aGlzLndpcmVmcmFtZT09PSEwJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksdGhpcy53aXJlZnJhbWVMaW5lY2FwIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLHRoaXMud2lyZWZyYW1lTGluZWpvaW4hPT0icm91bmQiJiYobi53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSx0aGlzLmZsYXRTaGFkaW5nPT09ITAmJihuLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLHRoaXMudmlzaWJsZT09PSExJiYobi52aXNpYmxlPSExKSx0aGlzLnRvbmVNYXBwZWQ9PT0hMSYmKG4udG9uZU1hcHBlZD0hMSksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtmdW5jdGlvbiBpKG8pe2xldCBhPVtdO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1vW3NdO2RlbGV0ZSBsLm1ldGFkYXRhLGEucHVzaChsKX1yZXR1cm4gYX1pZihyKXtsZXQgbz1pKHQudGV4dHVyZXMpLGE9aSh0LmltYWdlcyk7by5sZW5ndGg+MCYmKG4udGV4dHVyZXM9byksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpfXJldHVybiBufWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCByPXQuY2xpcHBpbmdQbGFuZXMsbj1udWxsO2lmKHIhPT1udWxsKXtsZXQgaT1yLmxlbmd0aDtuPW5ldyBBcnJheShpKTtmb3IobGV0IG89MDtvIT09aTsrK28pbltvXT1yW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07cWkucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtzaC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgSW49bmV3IGosdlY9bmV3IEx0LEplPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLm5vcm1hbGl6ZWQ9bj09PSEwLHRoaXMudXNhZ2U9VzMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLml0ZW1TaXplLG4qPXIuaXRlbVNpemU7Zm9yKGxldCBpPTAsbz10aGlzLml0ZW1TaXplO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgbmUpLHJbbisrXT1hLnIscltuKytdPWEuZyxyW24rK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgTHQpLHJbbisrXT1hLngscltuKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGopLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgZW4pLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56LHJbbisrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKXZWLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxyKSx2Vi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShyLHZWLngsdlYueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksSW4uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKHIsSW4ueCxJbi55LEluLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi54PXRoaXMuZ2V0WChyKSxJbi55PXRoaXMuZ2V0WShyKSxJbi56PXRoaXMuZ2V0WihyKSxJbi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspSW4ueD10aGlzLmdldFgociksSW4ueT10aGlzLmdldFkociksSW4uej10aGlzLmdldFoociksSW4uYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUluLng9dGhpcy5nZXRYKHIpLEluLnk9dGhpcy5nZXRZKHIpLEluLno9dGhpcy5nZXRaKHIpLEluLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihyLEluLngsSW4ueSxJbi56KTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxyKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPXIsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPXIsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPXIsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPXIsdGhpc31zZXRYWSh0LHIsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQscixuLGksbyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1XMyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O0plLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgY1U9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDhBcnJheSh0KSxyLG4pfX0sdVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQ4QXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyLG4pfX0sZlU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDE2QXJyYXkodCkscixuKX19LCQzPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX0scFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCkscixuKX19LEszPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLHIsbil9fTtkVS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciB4ZT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLHIsbil9fSxtVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQ2NEFycmF5KHQpLHIsbil9fSx1ZnI9MCxYYz1uZXcgTWUsaXV0PW5ldyBvcixDMz1uZXcgaixSbD1uZXcgdGEsUlA9bmV3IHRhLExvPW5ldyBqLFBlPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnVmcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KERmZSh0KT9LMzokMykodCwxKTp0aGlzLmluZGV4PXQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPXIsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XSE9PXZvaWQgMH1hZGRHcm91cCh0LHIsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OnIsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxyKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PXJ9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtyIT09dm9pZCAwJiYoci5hcHBseU1hdHJpeDQodCksci5uZWVkc1VwZGF0ZT0hMCk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZihuIT09dm9pZCAwKXtsZXQgbz1uZXcga2koKS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChvKSxuLm5lZWRzVXBkYXRlPSEwfWxldCBpPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBpIT09dm9pZCAwJiYoaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksaS5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWSh0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVaKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXRyYW5zbGF0ZSh0LHIsbil7cmV0dXJuIFhjLm1ha2VUcmFuc2xhdGlvbih0LHIsbiksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9c2NhbGUodCxyLG4pe3JldHVybiBYYy5tYWtlU2NhbGUodCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gaXV0Lmxvb2tBdCh0KSxpdXQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaXV0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihDMykubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoQzMueCxDMy55LEMzLnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPXRbbl07ci5wdXNoKG8ueCxvLnksby56fHwwKX1yZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXt0aGlzLmJvdW5kaW5nQm94PT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHRhKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgaigtMS8wLC0xLzAsLTEvMCksbmV3IGooMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO1JsLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixSbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxSbC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWF4KSl9fWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXt0aGlzLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IFpmKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaiwxLzApO3JldHVybn1pZih0KXtsZXQgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dO1JQLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyhSbC5taW4sUlAubWluKSxSbC5leHBhbmRCeVBvaW50KExvKSxMby5hZGRWZWN0b3JzKFJsLm1heCxSUC5tYXgpLFJsLmV4cGFuZEJ5UG9pbnQoTG8pKTooUmwuZXhwYW5kQnlQb2ludChSUC5taW4pLFJsLmV4cGFuZEJ5UG9pbnQoUlAubWF4KSl9UmwuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSk7aWYocilmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9cy5jb3VudDtjPHU7YysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoQzMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLExvLmFkZChDMykpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KGkpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmF0dHJpYnV0ZXM7aWYodD09PW51bGx8fHIucG9zaXRpb249PT12b2lkIDB8fHIubm9ybWFsPT09dm9pZCAwfHxyLnV2PT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtyZXR1cm59bGV0IG49dC5hcnJheSxpPXIucG9zaXRpb24uYXJyYXksbz1yLm5vcm1hbC5hcnJheSxhPXIudXYuYXJyYXkscz1pLmxlbmd0aC8zO3IudGFuZ2VudD09PXZvaWQgMCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KDQqcyksNCkpO2xldCBsPXIudGFuZ2VudC5hcnJheSxjPVtdLHU9W107Zm9yKGxldCBCPTA7QjxzO0IrKyljW0JdPW5ldyBqLHVbQl09bmV3IGo7bGV0IGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IGoseD1uZXcgajtmdW5jdGlvbiBiKEIsSSxMKXtoLmZyb21BcnJheShpLEIqMyksZi5mcm9tQXJyYXkoaSxJKjMpLHAuZnJvbUFycmF5KGksTCozKSxkLmZyb21BcnJheShhLEIqMiksZy5mcm9tQXJyYXkoYSxJKjIpLF8uZnJvbUFycmF5KGEsTCoyKSxmLnN1YihoKSxwLnN1YihoKSxnLnN1YihkKSxfLnN1YihkKTtsZXQgUj0xLyhnLngqXy55LV8ueCpnLnkpOyFpc0Zpbml0ZShSKXx8KHkuY29weShmKS5tdWx0aXBseVNjYWxhcihfLnkpLmFkZFNjYWxlZFZlY3RvcihwLC1nLnkpLm11bHRpcGx5U2NhbGFyKFIpLHguY29weShwKS5tdWx0aXBseVNjYWxhcihnLngpLmFkZFNjYWxlZFZlY3RvcihmLC1fLngpLm11bHRpcGx5U2NhbGFyKFIpLGNbQl0uYWRkKHkpLGNbSV0uYWRkKHkpLGNbTF0uYWRkKHkpLHVbQl0uYWRkKHgpLHVbSV0uYWRkKHgpLHVbTF0uYWRkKHgpKX1sZXQgUz10aGlzLmdyb3VwcztTLmxlbmd0aD09PTAmJihTPVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MyliKG5beiswXSxuW3orMV0sblt6KzJdKX1sZXQgQz1uZXcgaixQPW5ldyBqLGs9bmV3IGosTz1uZXcgajtmdW5jdGlvbiBEKEIpe2suZnJvbUFycmF5KG8sQiozKSxPLmNvcHkoayk7bGV0IEk9Y1tCXTtDLmNvcHkoSSksQy5zdWIoay5tdWx0aXBseVNjYWxhcihrLmRvdChJKSkpLm5vcm1hbGl6ZSgpLFAuY3Jvc3NWZWN0b3JzKE8sSSk7bGV0IFI9UC5kb3QodVtCXSk8MD8tMToxO2xbQio0XT1DLngsbFtCKjQrMV09Qy55LGxbQio0KzJdPUMueixsW0IqNCszXT1SfWZvcihsZXQgQj0wLEk9Uy5sZW5ndGg7QjxJOysrQil7bGV0IEw9U1tCXSxSPUwuc3RhcnQsRj1MLmNvdW50O2ZvcihsZXQgej1SLFU9UitGO3o8VTt6Kz0zKUQoblt6KzBdKSxEKG5beisxXSksRChuW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihyIT09dm9pZCAwKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYobj09PXZvaWQgMCluPW5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHIuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IGY9MCxwPW4uY291bnQ7ZjxwO2YrKyluLnNldFhZWihmLDAsMCwwKTtsZXQgaT1uZXcgaixvPW5ldyBqLGE9bmV3IGoscz1uZXcgaixsPW5ldyBqLGM9bmV3IGosdT1uZXcgaixoPW5ldyBqO2lmKHQpZm9yKGxldCBmPTAscD10LmNvdW50O2Y8cDtmKz0zKXtsZXQgZD10LmdldFgoZiswKSxnPXQuZ2V0WChmKzEpLF89dC5nZXRYKGYrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZCksby5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZyksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsXyksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUobixfKSxzLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxuLnNldFhZWihkLHMueCxzLnkscy56KSxuLnNldFhZWihnLGwueCxsLnksbC56KSxuLnNldFhZWihfLGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLHA9ci5jb3VudDtmPHA7Zis9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZisyKSx1LnN1YlZlY3RvcnMoYSxvKSxoLnN1YlZlY3RvcnMoaSxvKSx1LmNyb3NzKGgpLG4uc2V0WFlaKGYrMCx1LngsdS55LHUueiksbi5zZXRYWVooZisxLHUueCx1LnksdS56KSxuLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQscil7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59cj09PXZvaWQgMCYmKHI9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBpIGluIG4pe2lmKHQuYXR0cmlidXRlc1tpXT09PXZvaWQgMCljb250aW51ZTtsZXQgYT1uW2ldLmFycmF5LHM9dC5hdHRyaWJ1dGVzW2ldLGw9cy5hcnJheSxjPXMuaXRlbVNpemUqcix1PU1hdGgubWluKGwubGVuZ3RoLGEubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylhW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCByPTAsbj10LmNvdW50O3I8bjtyKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLExvLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKHIsTG8ueCxMby55LExvLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQocyxsKXtsZXQgYz1zLmFycmF5LHU9cy5pdGVtU2l6ZSxoPXMubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLHA9MCxkPTA7Zm9yKGxldCBnPTAsXz1sLmxlbmd0aDtnPF87ZysrKXtzLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/cD1sW2ddKnMuZGF0YS5zdHJpZGUrcy5vZmZzZXQ6cD1sW2ddKnU7Zm9yKGxldCB5PTA7eTx1O3krKylmW2QrK109Y1twKytdfXJldHVybiBuZXcgSmUoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IHI9bmV3IFBlLG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXSxjPXQobCxuKTtyLnNldEF0dHJpYnV0ZShzLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1bXSxjPW9bc107Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLHA9dChmLG4pO2wucHVzaChwKX1yLm1vcnBoQXR0cmlidXRlc1tzXT1sfXIubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ci5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gcn10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgcj10aGlzLmluZGV4O3IhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOnIuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLmFycmF5KX0pO2xldCBuPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gbil7bGV0IGM9bltsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCBpPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IHA9Y1toXTt1LnB1c2gocC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKGlbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gcyE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IHI9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgbj10LmluZGV4O24hPT1udWxsJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUocikpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gaSl7bGV0IHU9aVtjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUocikpfWxldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgdT1bXSxoPW9bY107Zm9yKGxldCBmPTAscD1oLmxlbmd0aDtmPHA7ZisrKXUucHVzaChoW2ZdLmNsb25lKHIpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PWEubGVuZ3RoO2M8dTtjKyspe2xldCBoPWFbY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O3MhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtQZS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTXVlPW5ldyBNZSxBMz1uZXcgSmYsb3V0PW5ldyBaZixSMD1uZXcgaixOMD1uZXcgaixEMD1uZXcgaixhdXQ9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaix4Vj1uZXcgaixiVj1uZXcgaix3Vj1uZXcgaixTVj1uZXcgTHQsTVY9bmV3IEx0LEVWPW5ldyBMdCxjdXQ9bmV3IGosVFY9bmV3IGosdGk9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBzaCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYoaT09PXZvaWQgMHx8KG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLG91dC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLG91dC5hcHBseU1hdHJpeDQobyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShvdXQpPT09ITEpfHwoTXVlLmNvcHkobykuaW52ZXJ0KCksQTMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE11ZSksbi5ib3VuZGluZ0JveCE9PW51bGwmJkEzLmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBhO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHM9bi5pbmRleCxsPW4uYXR0cmlidXRlcy5wb3NpdGlvbixjPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPW4uYXR0cmlidXRlcy51dixmPW4uYXR0cmlidXRlcy51djIscD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKHMhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKHMuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9cy5nZXRYKEMpLE89cy5nZXRYKEMrMSksRD1zLmdldFgoQysyKTthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4ocy5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9cy5nZXRYKHkpLFM9cy5nZXRYKHkrMSksQz1zLmdldFgoeSsyKTthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGc9MCxfPXAubGVuZ3RoO2c8XztnKyspe2xldCB5PXBbZ10seD1pW3kubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heCh5LnN0YXJ0LGQuc3RhcnQpLFM9TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbih5LnN0YXJ0K3kuY291bnQsZC5zdGFydCtkLmNvdW50KSk7Zm9yKGxldCBDPWIsUD1TO0M8UDtDKz0zKXtsZXQgaz1DLE89QysxLEQ9QysyO2E9Q1YodGhpcyx4LHQsQTMsbCxjLHUsaCxmLGssTyxEKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihDLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxyLnB1c2goYSkpfX1lbHNle2xldCBnPU1hdGgubWF4KDAsZC5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7Zm9yKGxldCB5PWcseD1fO3k8eDt5Kz0zKXtsZXQgYj15LFM9eSsxLEM9eSsyO2E9Q1YodGhpcyxpLHQsQTMsbCxjLHUsaCxmLGIsUyxDKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLHIucHVzaChhKSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O3RpLnByb3RvdHlwZS5pc01lc2g9ITA7ZnVuY3Rpb24gaGZyKGUsdCxyLG4saSxvLGEscyl7bGV0IGw7aWYodC5zaWRlPT09SWk/bD1uLmludGVyc2VjdFRyaWFuZ2xlKGEsbyxpLCEwLHMpOmw9bi5pbnRlcnNlY3RUcmlhbmdsZShpLG8sYSx0LnNpZGUhPT1MMSxzKSxsPT09bnVsbClyZXR1cm4gbnVsbDtUVi5jb3B5KHMpLFRWLmFwcGx5TWF0cml4NChlLm1hdHJpeFdvcmxkKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhUVik7cmV0dXJuIGM8ci5uZWFyfHxjPnIuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6VFYuY2xvbmUoKSxvYmplY3Q6ZX19ZnVuY3Rpb24gQ1YoZSx0LHIsbixpLG8sYSxzLGwsYyx1LGgpe1IwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxjKSxOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksdSksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGgpO2xldCBmPWUubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKG8mJmYpe3hWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKSx3Vi5zZXQoMCwwLDApO2ZvcihsZXQgZD0wLGc9by5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXSx5PW9bZF07XyE9PTAmJihhdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLHN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksbHV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxoKSxhPyh4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihzdXQsXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dCxfKSk6KHhWLmFkZFNjYWxlZFZlY3RvcihhdXQuc3ViKFIwKSxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihOMCksXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoRDApLF8pKSl9UjAuYWRkKHhWKSxOMC5hZGQoYlYpLEQwLmFkZCh3Vil9ZS5pc1NraW5uZWRNZXNoJiYoZS5ib25lVHJhbnNmb3JtKGMsUjApLGUuYm9uZVRyYW5zZm9ybSh1LE4wKSxlLmJvbmVUcmFuc2Zvcm0oaCxEMCkpO2xldCBwPWhmcihlLHQscixuLFIwLE4wLEQwLGN1dCk7aWYocCl7cyYmKFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksRVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGgpLHAudXY9b2kuZ2V0VVYoY3V0LFIwLE4wLEQwLFNWLE1WLEVWLG5ldyBMdCkpLGwmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1vaS5nZXRVVihjdXQsUjAsTjAsRDAsU1YsTVYsRVYsbmV3IEx0KSk7bGV0IGQ9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgaixtYXRlcmlhbEluZGV4OjB9O29pLmdldE5vcm1hbChSMCxOMCxEMCxkLm5vcm1hbCkscC5mYWNlPWR9cmV0dXJuIHB9dmFyIFFmPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO2k9TWF0aC5mbG9vcihpKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxwPTA7ZCgieiIsInkiLCJ4IiwtMSwtMSxuLHIsdCxhLG8sMCksZCgieiIsInkiLCJ4IiwxLC0xLG4sciwtdCxhLG8sMSksZCgieCIsInoiLCJ5IiwxLDEsdCxuLHIsaSxhLDIpLGQoIngiLCJ6IiwieSIsMSwtMSx0LG4sLXIsaSxhLDMpLGQoIngiLCJ5IiwieiIsMSwtMSx0LHIsbixpLG8sNCksZCgieCIsInkiLCJ6IiwtMSwtMSx0LHIsLW4saSxvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGgsMikpO2Z1bmN0aW9uIGQoZyxfLHkseCxiLFMsQyxQLGssTyxEKXtsZXQgQj1TL2ssST1DL08sTD1TLzIsUj1DLzIsRj1QLzIsej1rKzEsVT1PKzEsVz0wLFo9MCxydD1uZXcgajtmb3IobGV0IG90PTA7b3Q8VTtvdCsrKXtsZXQgc3Q9b3QqSS1SO2ZvcihsZXQgU3Q9MDtTdDx6O1N0Kyspe2xldCBidD1TdCpCLUw7cnRbZ109YnQqeCxydFtfXT1zdCpiLHJ0W3ldPUYsYy5wdXNoKHJ0LngscnQueSxydC56KSxydFtnXT0wLHJ0W19dPTAscnRbeV09UD4wPzE6LTEsdS5wdXNoKHJ0LngscnQueSxydC56KSxoLnB1c2goU3QvayksaC5wdXNoKDEtb3QvTyksVys9MX19Zm9yKGxldCBvdD0wO290PE87b3QrKylmb3IobGV0IHN0PTA7c3Q8aztzdCsrKXtsZXQgU3Q9ZitzdCt6Km90LGJ0PWYrc3Qreioob3QrMSksTXQ9Zisoc3QrMSkreioob3QrMSksbHQ9Zisoc3QrMSkreipvdDtsLnB1c2goU3QsYnQsbHQpLGwucHVzaChidCxNdCxsdCksWis9Nn1zLmFkZEdyb3VwKHAsWixEKSxwKz1aLGYrPVd9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFFmKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gWjMoZSl7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe3Rbcl09e307Zm9yKGxldCBuIGluIGVbcl0pe2xldCBpPWVbcl1bbl07aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP3Rbcl1bbl09aS5jbG9uZSgpOkFycmF5LmlzQXJyYXkoaSk/dFtyXVtuXT1pLnNsaWNlKCk6dFtyXVtuXT1pfX1yZXR1cm4gdH1mdW5jdGlvbiBUYShlKXtsZXQgdD17fTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49WjMoZVtyXSk7Zm9yKGxldCBpIGluIG4pdFtpXT1uW2ldfXJldHVybiB0fXZhciB6ZmU9e2Nsb25lOlozLG1lcmdlOlRhfSxmZnI9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAscGZyPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsbGg9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPWZmcix0aGlzLmZyYWdtZW50U2hhZGVyPXBmcix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1aMyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7ci5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLHIudW5pZm9ybXM9e307Zm9yKGxldCBpIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbaV0udmFsdWU7YSYmYS5pc1RleHR1cmU/ci51bmlmb3Jtc1tpXT17dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3IudW5pZm9ybXNbaV09e3R5cGU6ImMiLHZhbHVlOmEuZ2V0SGV4KCl9OmEmJmEuaXNWZWN0b3IyP3IudW5pZm9ybXNbaV09e3R5cGU6InYyIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjM/ci51bmlmb3Jtc1tpXT17dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2NCIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXgzP3IudW5pZm9ybXNbaV09e3R5cGU6Im0zIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc01hdHJpeDQ/ci51bmlmb3Jtc1tpXT17dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTpyLnVuaWZvcm1zW2ldPXt2YWx1ZTphfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoci5kZWZpbmVzPXRoaXMuZGVmaW5lcyksci52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsci5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBuPXt9O2ZvcihsZXQgaSBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW2ldPT09ITAmJihuW2ldPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmV4dGVuc2lvbnM9bikscn19O2xoLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBSMT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgTWUsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgTWV9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtcls4XSwtcls5XSwtclsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxyKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07UjEucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBVaT1jbGFzcyBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKHQ9NTAscj0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9cix0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgcj0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVFQKjIqTWF0aC5hdGFuKHIpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oUDEqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBRUCoyKk1hdGguYXRhbihNYXRoLnRhbihQMSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLmFzcGVjdD10L3IsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PXIsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIscj10Kk1hdGgudGFuKFAxKi41KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKnIsaT10aGlzLmFzcGVjdCpuLG89LS41KmksYT10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPWEuZnVsbFdpZHRoLGM9YS5mdWxsSGVpZ2h0O28rPWEub2Zmc2V0WCppL2wsci09YS5vZmZzZXRZKm4vYyxpKj1hLndpZHRoL2wsbio9YS5oZWlnaHQvY31sZXQgcz10aGlzLmZpbG1PZmZzZXQ7cyE9PTAmJihvKz10KnMvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8raSxyLHItbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5mb3Y9dGhpcy5mb3Ysci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHIub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsci5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksci5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLHIub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LHJ9fTtVaS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgUDM9OTAsSTM9MSxKMz1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9bjtsZXQgaT1uZXcgVWkoUDMsSTMsdCxyKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBqKDEsMCwwKSksdGhpcy5hZGQoaSk7bGV0IG89bmV3IFVpKFAzLEkzLHQscik7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaigtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgVWkoUDMsSTMsdCxyKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsMSksYS5sb29rQXQobmV3IGooMCwxLDApKSx0aGlzLmFkZChhKTtsZXQgcz1uZXcgVWkoUDMsSTMsdCxyKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBqKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBVaShQMyxJMyx0LHIpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGooMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgVWkoUDMsSTMsdCxyKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBqKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LHIpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtpLG8sYSxzLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPW4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChuLDApLHQucmVuZGVyKHIsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwxKSx0LnJlbmRlcihyLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMiksdC5yZW5kZXIocixhKSx0LnNldFJlbmRlclRhcmdldChuLDMpLHQucmVuZGVyKHIscyksdC5zZXRSZW5kZXJUYXJnZXQobiw0KSx0LnJlbmRlcihyLGwpLG4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChuLDUpLHQucmVuZGVyKHIsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsbi50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxIMD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLHI9ciE9PXZvaWQgMD9yOm54LHN1cGVyKHQscixuLGksbyxhLHMsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07SDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIFEzPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe051bWJlci5pc0ludGVnZXIocikmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLHI9biksc3VwZXIodCx0LHIpLHI9cnx8e30sdGhpcy50ZXh0dXJlPW5ldyBIMCh2b2lkIDAsci5tYXBwaW5nLHIud3JhcFMsci53cmFwVCxyLm1hZ0ZpbHRlcixyLm1pbkZpbHRlcixyLmZvcm1hdCxyLnR5cGUsci5hbmlzb3Ryb3B5LHIuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9yLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyIT09dm9pZCAwP3IubWluRmlsdGVyOmlpfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQscil7dGhpcy50ZXh0dXJlLnR5cGU9ci50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UW8sdGhpcy50ZXh0dXJlLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ci5tYWdGaWx0ZXI7bGV0IG49e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0saT1uZXcgUWYoNSw1LDUpLG89bmV3IGxoKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpaMyhuLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6bi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6bi5mcmFnbWVudFNoYWRlcixzaWRlOklpLGJsZW5kaW5nOiRkfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9cjtsZXQgYT1uZXcgdGkoaSxvKSxzPXIubWluRmlsdGVyO3JldHVybiByLm1pbkZpbHRlcj09PW94JiYoci5taW5GaWx0ZXI9aWkpLG5ldyBKMygxLDEwLHRoaXMpLnVwZGF0ZSh0LGEpLHIubWluRmlsdGVyPXMsYS5nZW9tZXRyeS5kaXNwb3NlKCksYS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LHIsbixpKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgYT0wO2E8NjthKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxhKSx0LmNsZWFyKHIsbixpKTt0LnNldFJlbmRlclRhcmdldChvKX19O1EzLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgdXV0PW5ldyBqLGRmcj1uZXcgaixtZnI9bmV3IGtpLCRjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMSwwLDApLHI9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0Q29tcG9uZW50cyh0LHIsbixpKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQscixuKSx0aGlzLmNvbnN0YW50PWksdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LXIuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LHIsbil7bGV0IGk9dXV0LnN1YlZlY3RvcnMobixyKS5jcm9zcyhkZnIuc3ViVmVjdG9ycyh0LHIpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxyKXtsZXQgbj10LmRlbHRhKHV1dCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoaT09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9yLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9pO3JldHVybiBvPDB8fG8+MT9udWxsOnIuY29weShuKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IHI9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIHI8MCYmbj4wfHxuPDAmJnI+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxyKXtsZXQgbj1yfHxtZnIuZ2V0Tm9ybWFsTWF0cml4KHQpLGk9dGhpcy5jb3BsYW5hclBvaW50KHV1dCkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1pLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTskYy5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgTDM9bmV3IFpmLEFWPW5ldyBqLE4xPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRjLHI9bmV3ICRjLG49bmV3ICRjLGk9bmV3ICRjLG89bmV3ICRjLGE9bmV3ICRjKXt0aGlzLnBsYW5lcz1bdCxyLG4saSxvLGFdfXNldCh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkociksc1syXS5jb3B5KG4pLHNbM10uY29weShpKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXJbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxvPW5bMV0sYT1uWzJdLHM9blszXSxsPW5bNF0sYz1uWzVdLHU9bls2XSxoPW5bN10sZj1uWzhdLHA9bls5XSxkPW5bMTBdLGc9blsxMV0sXz1uWzEyXSx5PW5bMTNdLHg9blsxNF0sYj1uWzE1XTtyZXR1cm4gclswXS5zZXRDb21wb25lbnRzKHMtaSxoLWwsZy1mLGItXykubm9ybWFsaXplKCksclsxXS5zZXRDb21wb25lbnRzKHMraSxoK2wsZytmLGIrXykubm9ybWFsaXplKCksclsyXS5zZXRDb21wb25lbnRzKHMrbyxoK2MsZytwLGIreSkubm9ybWFsaXplKCksclszXS5zZXRDb21wb25lbnRzKHMtbyxoLWMsZy1wLGIteSkubm9ybWFsaXplKCkscls0XS5zZXRDb21wb25lbnRzKHMtYSxoLXUsZy1kLGIteCkubm9ybWFsaXplKCkscls1XS5zZXRDb21wb25lbnRzKHMrYSxoK3UsZytkLGIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCByPXQuZ2VvbWV0cnk7cmV0dXJuIHIuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEwzLmNvcHkoci5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShMMyl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gTDMuY2VudGVyLnNldCgwLDAsMCksTDMucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEwzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKHJbb10uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtsZXQgaT1yW25dO2lmKEFWLng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxBVi55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksQVYuej1pLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LGkuZGlzdGFuY2VUb1BvaW50KEFWKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihyW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2Z1bmN0aW9uIEZmZSgpe2xldCBlPW51bGwsdD0hMSxyPW51bGwsbj1udWxsO2Z1bmN0aW9uIGkobyxhKXtyKG8sYSksbj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJnIhPT1udWxsJiYobj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe2UuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihvKXtyPW99LHNldENvbnRleHQ6ZnVuY3Rpb24obyl7ZT1vfX19ZnVuY3Rpb24gZ2ZyKGUsdCl7bGV0IHI9dC5pc1dlYkdMMixuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxwPWUuY3JlYXRlQnVmZmVyKCk7ZS5iaW5kQnVmZmVyKHUscCksZS5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZD01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Q9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/cj9kPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmQ9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9kPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Q9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9kPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9kPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZD01MTIxKSx7YnVmZmVyOnAsdHlwZTpkLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBvKGMsdSxoKXtsZXQgZj11LmFycmF5LHA9dS51cGRhdGVSYW5nZTtlLmJpbmRCdWZmZXIoaCxjKSxwLmNvdW50PT09LTE/ZS5idWZmZXJTdWJEYXRhKGgsMCxmKToocj9lLmJ1ZmZlclN1YkRhdGEoaCxwLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYscC5vZmZzZXQscC5jb3VudCk6ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KHAub2Zmc2V0LHAub2Zmc2V0K3AuY291bnQpKSxwLmNvdW50PS0xKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksbi5nZXQoYyl9ZnVuY3Rpb24gcyhjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9bi5nZXQoYyk7dSYmKGUuZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxuLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9bi5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmbi5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1uLmdldChjKTtoPT09dm9pZCAwP24uc2V0KGMsaShjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYobyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6YSxyZW1vdmU6cyx1cGRhdGU6bH19dmFyIFYwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtsZXQgbz10LzIsYT1yLzIscz1NYXRoLmZsb29yKG4pLGw9TWF0aC5mbG9vcihpKSxjPXMrMSx1PWwrMSxoPXQvcyxmPXIvbCxwPVtdLGQ9W10sZz1bXSxfPVtdO2ZvcihsZXQgeT0wO3k8dTt5Kyspe2xldCB4PXkqZi1hO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBTPWIqaC1vO2QucHVzaChTLC14LDApLGcucHVzaCgwLDAsMSksXy5wdXNoKGIvcyksXy5wdXNoKDEteS9sKX19Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PHM7eCsrKXtsZXQgYj14K2MqeSxTPXgrYyooeSsxKSxDPXgrMStjKih5KzEpLFA9eCsxK2MqeTtwLnB1c2goYixTLFApLHAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjAodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfZnI9YCNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7CiNlbmRpZmAseWZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx2ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCx4ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCgl1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsKI2VuZGlmYCxiZnI9YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCx3ZnI9YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxTZnI9InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsTWZyPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsRWZyPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxUZnI9YCNpZmRlZiBVU0VfQlVNUE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDsKCXVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlOwoJdmVjMiBkSGR4eV9md2QoKSB7CgkJdmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApOwoJCXZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTsKCQlmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7CgkJZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7CgkJZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7CgkJcmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7Cgl9Cgl2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2TiA9IHN1cmZfbm9ybTsKCQl2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7CgkJdmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApOwoJCWZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uOwoJCXZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApOwoJCXJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTsKCX0KI2VuZGlmYCxDZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxBZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxQZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247CiNlbmRpZmAsSWZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLExmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsa2ZyPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZhcnlpbmcgdmVjNCB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLFJmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLE5mcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsRGZyPWAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2CiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjYKI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwNwojZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzUKI2RlZmluZSBFUFNJTE9OIDFlLTYKI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApICkKZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfQpmbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH0KZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfQpmbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH0KZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH0KaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHsKCWNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MzsKCWhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApOwoJcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7Cn0KI2lmZGVmIEhJR0hfUFJFQ0lTSU9OCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfQojZWxzZQoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgewoJCWZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7CgkJcmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50OwoJfQojZW5kaWYKc3RydWN0IEluY2lkZW50TGlnaHQgewoJdmVjMyBjb2xvcjsKCXZlYzMgZGlyZWN0aW9uOwoJYm9vbCB2aXNpYmxlOwp9OwpzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQgewoJdmVjMyBkaXJlY3REaWZmdXNlOwoJdmVjMyBkaXJlY3RTcGVjdWxhcjsKCXZlYzMgaW5kaXJlY3REaWZmdXNlOwoJdmVjMyBpbmRpcmVjdFNwZWN1bGFyOwp9OwpzdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7Cgl2ZWMzIHBvc2l0aW9uOwoJdmVjMyBub3JtYWw7Cgl2ZWMzIHZpZXdEaXI7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCn07CnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTsKfQp2ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApOwp9Cm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkgewoJbWF0MyB0bXA7Cgl0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTsKCXRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApOwoJdG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7CglyZXR1cm4gdG1wOwp9CmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7Cgl2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7CglyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTsKfQpib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHsKCXJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDsKfQp2ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkgewoJZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7CglmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7CglyZXR1cm4gdmVjMiggdSwgdiApOwp9YCxPZnI9YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsemZyPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxGZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzOwojZW5kaWZgLEJmcj1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsSGZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxWZnI9YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwOwojZW5kaWZgLFVmcj0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixxZnI9YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLEdmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2ZWMzIGNhbWVyYVRvRnJhZzsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApOwoJCX0KCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApOwoJCSNlbHNlCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2Vsc2UKCQl2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkUKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTsKCSNlbHNlCgkJdmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApOwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREICkKCQlvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7CgkjZW5kaWYKI2VuZGlmYCxXZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsWWZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLGpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKI2VuZGlmYCxYZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCwkZnI9YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxLZnI9YCNpZmRlZiBVU0VfRk9HCgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKI2VuZGlmYCxaZnI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLEpmcj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxRZnI9YCNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwOwojZW5kaWYKdmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkgewoJZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTsKCXZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7CgkjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgkJcmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApOwoJI2Vsc2UKCQlyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApOwoJI2VuZGlmCn1gLHRwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLGVwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHJwcj1gdmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7Ckdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7Ckdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5OwpiYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7CmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKdkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKdkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApOwoJdkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKZmxvYXQgZG90Tkw7CnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwp2SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwp2SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fRElSX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCXZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmYCxucHI9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsaXByPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLG9wcj1gVG9vbk1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO2AsYXByPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLHNwcj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGxwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhclNoaW5pbmVzczsKCWZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7Cn07CnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfQmxpbm5QaG9uZwojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcKI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApCSgwKWAsY3ByPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCx1cHI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxocHI9YApHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCglnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwojaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglQb2ludExpZ2h0IHBvaW50TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdOwoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTICkKCQlwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglTcG90TGlnaHQgc3BvdExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApCgkJc3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTICkKCQlkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApCglSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHsKCQlyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTsKCQlSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCXZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCWlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApCgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQkJaXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCgl2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7CiNlbmRpZmAsZnByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAscHByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAsZHByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCglnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7CiNlbmRpZmAsbXByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLGdwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX3ByPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53OwoJCXZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApOwoJI2Vsc2UKCQlpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHsKCQkJZ2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wOwoJCQlnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7CgkJfQoJI2VuZGlmCiNlbmRpZmAseXByPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLHZwcj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCx4cHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5OwojZW5kaWYKI2lmZGVmIFVTRV9NQVAKCWRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZzsKI2VuZGlmYCxicHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx3cHI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxTcHI9YCNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7CiNlbmRpZmAsTXByPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLEVwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsVHByPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJZm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkgewoJCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2Vsc2UKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2VuZGlmCgkJfQoJI2Vsc2UKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxDcHI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxBcHI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsUHByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZhcnlpbmcgdmVjMyB2VGFuZ2VudDsKCQl2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLElwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxMcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLGtwcj1gI2lmZGVmIFVTRV9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTsKI2VuZGlmCiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CiNlbmRpZgojaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKQoJdmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7CgkJdmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTsKCQl2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApOwoJCXZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7CgkJdmVjMyBOID0gc3VyZl9ub3JtOwoJCXZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7CgkJdmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTsKCQl2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54OwoJCXZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7CgkJZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTsKCQlmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTsKCX0KI2VuZGlmYCxScHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLE5wcj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxEcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlOwojZW5kaWZgLE9wcj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLHpwcj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxGcHI9YCNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBCglnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hOwojZW5kaWZgLEJwcj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLEhwcj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFZwcj1gI2lmZGVmIERJVEhFUklORwoJdmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7CgkJZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApOwoJCXZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7CgkJZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTsKCQlyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCOwoJfQojZW5kaWZgLFVwcj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLHFwcj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxHcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCglmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkgewoJCXJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApOwoJfQoJdmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7CgkJcmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApOwoJfQoJZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7CgkJZmxvYXQgb2NjbHVzaW9uID0gMS4wOwoJCXZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7CgkJZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTsKCQlpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkgewoJCQlmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7CgkJCWZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7CgkJCWZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7CQkJc29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7CQkJb2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7CgkJfQoJCXJldHVybiBvY2NsdXNpb247Cgl9CglmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkgewoJCWZsb2F0IHNoYWRvdyA9IDEuMDsKCQlzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudzsKCQlzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7CgkJYnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApOwoJCWJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTsKCQlidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7CgkJYm9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTsKCQlpZiAoIGZydXN0dW1UZXN0ICkgewoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgyID0gZHgwIC8gMi4wOwoJCQlmbG9hdCBkeTIgPSBkeTAgLyAyLjA7CgkJCWZsb2F0IGR4MyA9IGR4MSAvIDIuMDsKCQkJZmxvYXQgZHkzID0gZHkxIC8gMi4wOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKQoJCQkpICogKCAxLjAgLyAxNy4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHggPSB0ZXhlbFNpemUueDsKCQkJZmxvYXQgZHkgPSB0ZXhlbFNpemUueTsKCQkJdmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5OwoJCQl2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7CgkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBmLnkgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQlzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZWxzZQoJCQlzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2VuZGlmCgkJfQoJCXJldHVybiBzaGFkb3c7Cgl9Cgl2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7CgkJdmVjMyBhYnNWID0gYWJzKCB2ICk7CgkJZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7CgkJYWJzViAqPSBzY2FsZVRvQ3ViZTsKCQl2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7CgkJdmVjMiBwbGFuYXIgPSB2Lnh5OwoJCWZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7CgkJZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsOwoJCWlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHsKCQkJaWYgKCB2LnogPiAwLjAgKQoJCQkJcGxhbmFyLnggPSA0LjAgLSB2Lng7CgkJfSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTsKCQkJcGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YOwoJCX0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7CgkJCXBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7CgkJCXBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7CgkJfQoJCXJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTsKCX0KCWZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkgewoJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7CgkJdmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7CgkJZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTsJCWRwICs9IHNoYWRvd0JpYXM7CgkJdmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQl2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7CgkJCXJldHVybiAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLFdwcj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxZcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCxqcHI9YGZsb2F0IGdldFNoYWRvd01hc2soKSB7CglmbG9hdCBzaGFkb3cgPSAxLjA7CgkjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjZW5kaWYKCXJldHVybiBzaGFkb3c7Cn1gLFhwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsJHByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxLcHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7Cgl2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTsKCXNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54OwoJc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7Cglza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejsKCXNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53OwoJdHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejsKI2VuZGlmYCxacHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsSnByPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLFFwcj1gI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7CiNlbmRpZmAsdGRyPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLGVkcj1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHJkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCWZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wOwoJZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uOwoJZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzOwoJI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVAKCQl0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQCgkJdGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nOwoJI2VuZGlmCgl2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uOwoJdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApOwoJdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oCgkJbiwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLAoJCXBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLAoJCWF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTsKCXRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKCXRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApOwojZW5kaWZgLG5kcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxpZHI9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxvZHI9YCNpZmRlZiBVU0VfVVYKCSNpZmRlZiBVVlNfVkVSVEVYX09OTFkKCQl2ZWMyIHZVdjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMyIHZVdjsKCSNlbmRpZgoJdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwojZW5kaWZgLGFkcj1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCxzZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsbGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCWF0dHJpYnV0ZSB2ZWMyIHV2MjsKCXZhcnlpbmcgdmVjMiB2VXYyOwoJdW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTsKI2VuZGlmYCxjZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCx1ZHI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAsaGRyPWB2YXJ5aW5nIHZlYzIgdlV2Owp1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CnZvaWQgbWFpbigpIHsKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApOwp9YCxmZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAscGRyPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCxkZHI9YCNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJdmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CglnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjsKCWdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxtZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsZ2RyPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfZHI9YCNkZWZpbmUgRElTVEFOQ0UKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6Owp9YCx5ZHI9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLHZkcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLHhkcj1gdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7Cgl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CglnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGJkcj1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsd2RyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxTZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE1kcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxFZHI9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxUZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250OwoJI2VuZGlmCgkjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250OwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpOwoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLENkcj1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxBZHI9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxQZHI9YCNkZWZpbmUgTk9STUFMCiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLElkcj1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsTGRyPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLGtkcj1gI2RlZmluZSBQSE9ORwp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIHZlYzMgc3BlY3VsYXI7CnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLFJkcj1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsTmRyPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsRGRyPWAjZGVmaW5lIFRPT04KdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE9kcj1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLHpkcj1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEZkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxCZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsSGRyPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVmRyPWB1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOwp1bmlmb3JtIHZlYzIgY2VudGVyOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCXZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJdmVjMiBzY2FsZTsKCXNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApOwoJc2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7CgkjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7CgkjZW5kaWYKCXZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7Cgl2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsKCXJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCXJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCW12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOwoJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxVZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxocj17YWxwaGFtYXBfZnJhZ21lbnQ6X2ZyLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6eWZyLGFscGhhdGVzdF9mcmFnbWVudDp2ZnIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6eGZyLGFvbWFwX2ZyYWdtZW50OmJmcixhb21hcF9wYXJzX2ZyYWdtZW50OndmcixiZWdpbl92ZXJ0ZXg6U2ZyLGJlZ2lubm9ybWFsX3ZlcnRleDpNZnIsYnNkZnM6RWZyLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpUZnIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkNmcixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDpBZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OlBmcixjbGlwcGluZ19wbGFuZXNfdmVydGV4Oklmcixjb2xvcl9mcmFnbWVudDpMZnIsY29sb3JfcGFyc19mcmFnbWVudDprZnIsY29sb3JfcGFyc192ZXJ0ZXg6UmZyLGNvbG9yX3ZlcnRleDpOZnIsY29tbW9uOkRmcixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T2ZyLGRlZmF1bHRub3JtYWxfdmVydGV4OnpmcixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6RmZyLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6QmZyLGVtaXNzaXZlbWFwX2ZyYWdtZW50OkhmcixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OlZmcixlbmNvZGluZ3NfZnJhZ21lbnQ6VWZyLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OnFmcixlbnZtYXBfZnJhZ21lbnQ6R2ZyLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpXZnIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6WWZyLGVudm1hcF9wYXJzX3ZlcnRleDpqZnIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6aXByLGVudm1hcF92ZXJ0ZXg6WGZyLGZvZ192ZXJ0ZXg6JGZyLGZvZ19wYXJzX3ZlcnRleDpLZnIsZm9nX2ZyYWdtZW50Olpmcixmb2dfcGFyc19mcmFnbWVudDpKZnIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpRZnIsbGlnaHRtYXBfZnJhZ21lbnQ6dHByLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6ZXByLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpycHIsbGlnaHRzX3BhcnNfYmVnaW46bnByLGxpZ2h0c190b29uX2ZyYWdtZW50Om9wcixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmFwcixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6c3ByLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OmxwcixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6Y3ByLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OnVwcixsaWdodHNfZnJhZ21lbnRfYmVnaW46aHByLGxpZ2h0c19mcmFnbWVudF9tYXBzOmZwcixsaWdodHNfZnJhZ21lbnRfZW5kOnBwcixsb2dkZXB0aGJ1Zl9mcmFnbWVudDpkcHIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDptcHIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6Z3ByLGxvZ2RlcHRoYnVmX3ZlcnRleDpfcHIsbWFwX2ZyYWdtZW50OnlwcixtYXBfcGFyc19mcmFnbWVudDp2cHIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OnhwcixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpicHIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OndwcixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpTcHIsbW9ycGhub3JtYWxfdmVydGV4Ok1wcixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDpFcHIsbW9ycGh0YXJnZXRfdmVydGV4OlRwcixub3JtYWxfZnJhZ21lbnRfYmVnaW46Q3ByLG5vcm1hbF9mcmFnbWVudF9tYXBzOkFwcixub3JtYWxfcGFyc19mcmFnbWVudDpQcHIsbm9ybWFsX3BhcnNfdmVydGV4Oklwcixub3JtYWxfdmVydGV4Okxwcixub3JtYWxtYXBfcGFyc19mcmFnbWVudDprcHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjpScHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOk5wcixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpEcHIsb3V0cHV0X2ZyYWdtZW50Ok9wcixwYWNraW5nOnpwcixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OkZwcixwcm9qZWN0X3ZlcnRleDpCcHIsZGl0aGVyaW5nX2ZyYWdtZW50OkhwcixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpWcHIscm91Z2huZXNzbWFwX2ZyYWdtZW50OlVwcixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDpxcHIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6R3ByLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpXcHIsc2hhZG93bWFwX3ZlcnRleDpZcHIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50Ompwcixza2luYmFzZV92ZXJ0ZXg6WHByLHNraW5uaW5nX3BhcnNfdmVydGV4OiRwcixza2lubmluZ192ZXJ0ZXg6S3ByLHNraW5ub3JtYWxfdmVydGV4OlpwcixzcGVjdWxhcm1hcF9mcmFnbWVudDpKcHIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDpRcHIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6dGRyLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6ZWRyLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpyZHIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bmRyLHV2X3BhcnNfZnJhZ21lbnQ6aWRyLHV2X3BhcnNfdmVydGV4Om9kcix1dl92ZXJ0ZXg6YWRyLHV2Ml9wYXJzX2ZyYWdtZW50OnNkcix1djJfcGFyc192ZXJ0ZXg6bGRyLHV2Ml92ZXJ0ZXg6Y2RyLHdvcmxkcG9zX3ZlcnRleDp1ZHIsYmFja2dyb3VuZF92ZXJ0OmhkcixiYWNrZ3JvdW5kX2ZyYWc6ZmRyLGN1YmVfdmVydDpwZHIsY3ViZV9mcmFnOmRkcixkZXB0aF92ZXJ0Om1kcixkZXB0aF9mcmFnOmdkcixkaXN0YW5jZVJHQkFfdmVydDpfZHIsZGlzdGFuY2VSR0JBX2ZyYWc6eWRyLGVxdWlyZWN0X3ZlcnQ6dmRyLGVxdWlyZWN0X2ZyYWc6eGRyLGxpbmVkYXNoZWRfdmVydDpiZHIsbGluZWRhc2hlZF9mcmFnOndkcixtZXNoYmFzaWNfdmVydDpTZHIsbWVzaGJhc2ljX2ZyYWc6TWRyLG1lc2hsYW1iZXJ0X3ZlcnQ6RWRyLG1lc2hsYW1iZXJ0X2ZyYWc6VGRyLG1lc2htYXRjYXBfdmVydDpDZHIsbWVzaG1hdGNhcF9mcmFnOkFkcixtZXNobm9ybWFsX3ZlcnQ6UGRyLG1lc2hub3JtYWxfZnJhZzpJZHIsbWVzaHBob25nX3ZlcnQ6TGRyLG1lc2hwaG9uZ19mcmFnOmtkcixtZXNocGh5c2ljYWxfdmVydDpSZHIsbWVzaHBoeXNpY2FsX2ZyYWc6TmRyLG1lc2h0b29uX3ZlcnQ6RGRyLG1lc2h0b29uX2ZyYWc6T2RyLHBvaW50c192ZXJ0Onpkcixwb2ludHNfZnJhZzpGZHIsc2hhZG93X3ZlcnQ6QmRyLHNoYWRvd19mcmFnOkhkcixzcHJpdGVfdmVydDpWZHIsc3ByaXRlX2ZyYWc6VWRyfSxyZT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHV2MlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LGlvcjp7dmFsdWU6MS41fSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEx0KC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX19fSxhaD17YmFzaWM6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5zcGVjdWxhcm1hcCxyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IG5lKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUucm91Z2huZXNzbWFwLHJlLm1ldGFsbmVzc21hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmdyYWRpZW50bWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOlRhKFtyZS5wb2ludHMscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOmhyLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpoci5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlRhKFtyZS5zcHJpdGUscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmhyLmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOlRhKFtyZS5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgan0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VGEoW3JlLmxpZ2h0cyxyZS5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zaGFkb3dfZnJhZ319O2FoLnBoeXNpY2FsPXt1bmlmb3JtczpUYShbYWguc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBMdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgTHR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IG5lKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBxZHIoZSx0LHIsbixpLG8pe2xldCBhPW5ldyBuZSgwKSxzPWk9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIHAoZyxfKXtsZXQgeT0hMSx4PV8uaXNTY2VuZT09PSEwP18uYmFja2dyb3VuZDpudWxsO3gmJnguaXNUZXh0dXJlJiYoeD10LmdldCh4KSk7bGV0IGI9ZS54cixTPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7UyYmUy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJih4PW51bGwpLHg9PT1udWxsP2QoYSxzKTp4JiZ4LmlzQ29sb3ImJihkKHgsMSkseT0hMCksKGUuYXV0b0NsZWFyfHx5KSYmZS5jbGVhcihlLmF1dG9DbGVhckNvbG9yLGUuYXV0b0NsZWFyRGVwdGgsZS5hdXRvQ2xlYXJTdGVuY2lsKSx4JiYoeC5pc0N1YmVUZXh0dXJlfHx4Lm1hcHBpbmc9PT14TSk/KGM9PT12b2lkIDAmJihjPW5ldyB0aShuZXcgUWYoMSwxLDEpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6WjMoYWguY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmFoLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFoLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oQyxQLGspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG4udXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJnguaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXh8fGghPT14LnZlcnNpb258fGYhPT1lLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT14LGg9eC52ZXJzaW9uLGY9ZS50b25lTWFwcGluZyksZy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgdGkobmV3IFYwKDIsMiksbmV3IGxoKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6STEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG4udXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LHgubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGQoZyxfKXtyLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoZy5yLGcuZyxnLmIsXyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGcsXz0xKXthLnNldChnKSxzPV8sZChhLHMpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oZyl7cz1nLGQoYSxzKX0scmVuZGVyOnB9fWZ1bmN0aW9uIEdkcihlLHQscixuKXtsZXQgaT1lLmdldFBhcmFtZXRlcigzNDkyMSksbz1uLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksYT1uLmlzV2ViR0wyfHxvIT09bnVsbCxzPXt9LGw9ZyhudWxsKSxjPWw7ZnVuY3Rpb24gdShSLEYseixVLFcpe2xldCBaPSExO2lmKGEpe2xldCBydD1kKFUseixGKTtjIT09cnQmJihjPXJ0LGYoYy5vYmplY3QpKSxaPV8oVSxXKSxaJiZ5KFUsVyl9ZWxzZXtsZXQgcnQ9Ri53aXJlZnJhbWU9PT0hMDsoYy5nZW9tZXRyeSE9PVUuaWR8fGMucHJvZ3JhbSE9PXouaWR8fGMud2lyZWZyYW1lIT09cnQpJiYoYy5nZW9tZXRyeT1VLmlkLGMucHJvZ3JhbT16LmlkLGMud2lyZWZyYW1lPXJ0LFo9ITApfVIuaXNJbnN0YW5jZWRNZXNoPT09ITAmJihaPSEwKSxXIT09bnVsbCYmci51cGRhdGUoVywzNDk2MyksWiYmKGsoUixGLHosVSksVyE9PW51bGwmJmUuYmluZEJ1ZmZlcigzNDk2MyxyLmdldChXKS5idWZmZXIpKX1mdW5jdGlvbiBoKCl7cmV0dXJuIG4uaXNXZWJHTDI/ZS5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX1mdW5jdGlvbiBmKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuYmluZFZlcnRleEFycmF5KFIpOm8uYmluZFZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIHAoUil7cmV0dXJuIG4uaXNXZWJHTDI/ZS5kZWxldGVWZXJ0ZXhBcnJheShSKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIGQoUixGLHope2xldCBVPXoud2lyZWZyYW1lPT09ITAsVz1zW1IuaWRdO1c9PT12b2lkIDAmJihXPXt9LHNbUi5pZF09Vyk7bGV0IFo9V1tGLmlkXTtaPT09dm9pZCAwJiYoWj17fSxXW0YuaWRdPVopO2xldCBydD1aW1VdO3JldHVybiBydD09PXZvaWQgMCYmKHJ0PWcoaCgpKSxaW1VdPXJ0KSxydH1mdW5jdGlvbiBnKFIpe2xldCBGPVtdLHo9W10sVT1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUZbV109MCx6W1ddPTAsVVtXXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpGLGVuYWJsZWRBdHRyaWJ1dGVzOnosYXR0cmlidXRlRGl2aXNvcnM6VSxvYmplY3Q6UixhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIF8oUixGKXtsZXQgej1jLmF0dHJpYnV0ZXMsVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9eltaXSxvdD1VW1pdO2lmKHJ0PT09dm9pZCAwfHxydC5hdHRyaWJ1dGUhPT1vdHx8cnQuZGF0YSE9PW90LmRhdGEpcmV0dXJuITA7VysrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1XfHxjLmluZGV4IT09Rn1mdW5jdGlvbiB5KFIsRil7bGV0IHo9e30sVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9VVtaXSxvdD17fTtvdC5hdHRyaWJ1dGU9cnQscnQuZGF0YSYmKG90LmRhdGE9cnQuZGF0YSkseltaXT1vdCxXKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVcsYy5pbmRleD1GfWZ1bmN0aW9uIHgoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKVJbRl09MH1mdW5jdGlvbiBiKFIpe1MoUiwwKX1mdW5jdGlvbiBTKFIsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLFU9Yy5lbmFibGVkQXR0cmlidXRlcyxXPWMuYXR0cmlidXRlRGl2aXNvcnM7eltSXT0xLFVbUl09PT0wJiYoZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShSKSxVW1JdPTEpLFdbUl0hPT1GJiYoKG4uaXNXZWJHTDI/ZTp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtuLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oUixGKSxXW1JdPUYpfWZ1bmN0aW9uIEMoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLFU9Ri5sZW5ndGg7ejxVO3orKylGW3pdIT09Ult6XSYmKGUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gUChSLEYseixVLFcsWil7bi5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9lLnZlcnRleEF0dHJpYklQb2ludGVyKFIsRix6LFcsWik6ZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFIsRix6LFUsVyxaKX1mdW5jdGlvbiBrKFIsRix6LFUpe2lmKG4uaXNXZWJHTDI9PT0hMSYmKFIuaXNJbnN0YW5jZWRNZXNofHxVLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47eCgpO2xldCBXPVUuYXR0cmlidXRlcyxaPXouZ2V0QXR0cmlidXRlcygpLHJ0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IG90IGluIFope2xldCBzdD1aW290XTtpZihzdC5sb2NhdGlvbj49MCl7bGV0IFN0PVdbb3RdO2lmKFN0PT09dm9pZCAwJiYob3Q9PT0iaW5zdGFuY2VNYXRyaXgiJiZSLmluc3RhbmNlTWF0cml4JiYoU3Q9Ui5pbnN0YW5jZU1hdHJpeCksb3Q9PT0iaW5zdGFuY2VDb2xvciImJlIuaW5zdGFuY2VDb2xvciYmKFN0PVIuaW5zdGFuY2VDb2xvcikpLFN0IT09dm9pZCAwKXtsZXQgYnQ9U3Qubm9ybWFsaXplZCxNdD1TdC5pdGVtU2l6ZSxsdD1yLmdldChTdCk7aWYobHQ9PT12b2lkIDApY29udGludWU7bGV0IEt0PWx0LmJ1ZmZlcixfdD1sdC50eXBlLGN0PWx0LmJ5dGVzUGVyRWxlbWVudDtpZihTdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgWD1TdC5kYXRhLGV0PVguc3RyaWRlLGR0PVN0Lm9mZnNldDtpZihYJiZYLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylTKHN0LmxvY2F0aW9uK3EsWC5tZXNoUGVyQXR0cmlidXRlKTtSLmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZVLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoVS5fbWF4SW5zdGFuY2VDb3VudD1YLm1lc2hQZXJBdHRyaWJ1dGUqWC5jb3VudCl9ZWxzZSBmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspYihzdC5sb2NhdGlvbitxKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylQKHN0LmxvY2F0aW9uK3EsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LGV0KmN0LChkdCtNdC9zdC5sb2NhdGlvblNpemUqcSkqY3QpfWVsc2V7aWYoU3QuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylTKHN0LmxvY2F0aW9uK1gsU3QubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9U3QubWVzaFBlckF0dHJpYnV0ZSpTdC5jb3VudCl9ZWxzZSBmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspYihzdC5sb2NhdGlvbitYKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylQKHN0LmxvY2F0aW9uK1gsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LE10KmN0LE10L3N0LmxvY2F0aW9uU2l6ZSpYKmN0KX19ZWxzZSBpZihydCE9PXZvaWQgMCl7bGV0IGJ0PXJ0W290XTtpZihidCE9PXZvaWQgMClzd2l0Y2goYnQubGVuZ3RoKXtjYXNlIDI6ZS52ZXJ0ZXhBdHRyaWIyZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgMzplLnZlcnRleEF0dHJpYjNmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7Y2FzZSA0OmUudmVydGV4QXR0cmliNGZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztkZWZhdWx0OmUudmVydGV4QXR0cmliMWZ2KHN0LmxvY2F0aW9uLGJ0KX19fX1DKCl9ZnVuY3Rpb24gTygpe0koKTtmb3IobGV0IFIgaW4gcyl7bGV0IEY9c1tSXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSXX19ZnVuY3Rpb24gRChSKXtpZihzW1IuaWRdPT09dm9pZCAwKXJldHVybjtsZXQgRj1zW1IuaWRdO2ZvcihsZXQgeiBpbiBGKXtsZXQgVT1GW3pdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSBGW3pdfWRlbGV0ZSBzW1IuaWRdfWZ1bmN0aW9uIEIoUil7Zm9yKGxldCBGIGluIHMpe2xldCB6PXNbRl07aWYoeltSLmlkXT09PXZvaWQgMCljb250aW51ZTtsZXQgVT16W1IuaWRdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSB6W1IuaWRdfX1mdW5jdGlvbiBJKCl7TCgpLGMhPT1sJiYoYz1sLGYoYy5vYmplY3QpKX1mdW5jdGlvbiBMKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDp1LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6TCxkaXNwb3NlOk8scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6RCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOkIsaW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpDfX1mdW5jdGlvbiBXZHIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoYyl7bz1jfWZ1bmN0aW9uIHMoYyx1KXtlLmRyYXdBcnJheXMobyxjLHUpLHIudXBkYXRlKHUsbywxKX1mdW5jdGlvbiBsKGMsdSxoKXtpZihoPT09MClyZXR1cm47bGV0IGYscDtpZihpKWY9ZSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGY9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLGY9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59ZltwXShvLGMsdSxoKSxyLnVwZGF0ZSh1LG8saCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5yZW5kZXI9cyx0aGlzLnJlbmRlckluc3RhbmNlcz1sfWZ1bmN0aW9uIFlkcihlLHQscil7bGV0IG47ZnVuY3Rpb24gaSgpe2lmKG4hPT12b2lkIDApcmV0dXJuIG47aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBrPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtuPWUuZ2V0UGFyYW1ldGVyKGsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG49MDtyZXR1cm4gbn1mdW5jdGlvbiBvKGspe2lmKGs9PT0iaGlnaHAiKXtpZihlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO2s9Im1lZGl1bXAifXJldHVybiBrPT09Im1lZGl1bXAiJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxzPXIucHJlY2lzaW9uIT09dm9pZCAwP3IucHJlY2lzaW9uOiJoaWdocCIsbD1vKHMpO2whPT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIscywibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikscz1sKTtsZXQgYz1hfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPWUuZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPWUuZ2V0UGFyYW1ldGVyKDM1NjYwKSxwPWUuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9ZS5nZXRQYXJhbWV0ZXIoMzQwNzYpLGc9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLF89ZS5nZXRQYXJhbWV0ZXIoMzYzNDcpLHk9ZS5nZXRQYXJhbWV0ZXIoMzYzNDgpLHg9ZS5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLFM9YXx8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksQz1iJiZTLFA9YT9lLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6aSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246cyxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOnAsbWF4Q3ViZW1hcFNpemU6ZCxtYXhBdHRyaWJ1dGVzOmcsbWF4VmVydGV4VW5pZm9ybXM6XyxtYXhWYXJ5aW5nczp5LG1heEZyYWdtZW50VW5pZm9ybXM6eCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpTLGZsb2F0VmVydGV4VGV4dHVyZXM6QyxtYXhTYW1wbGVzOlB9fWZ1bmN0aW9uIGpkcihlKXtsZXQgdD10aGlzLHI9bnVsbCxuPTAsaT0hMSxvPSExLGE9bmV3ICRjLHM9bmV3IGtpLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLHApe2xldCBkPWgubGVuZ3RoIT09MHx8Znx8biE9PTB8fGk7cmV0dXJuIGk9ZixyPXUoaCxwLDApLG49aC5sZW5ndGgsZH0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmNsaXBwaW5nUGxhbmVzLGc9aC5jbGlwSW50ZXJzZWN0aW9uLF89aC5jbGlwU2hhZG93cyx5PWUuZ2V0KGgpO2lmKCFpfHxkPT09bnVsbHx8ZC5sZW5ndGg9PT0wfHxvJiYhXylvP3UobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOm4sYj14KjQsUz15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1TLFM9dShkLGYsYixwKTtmb3IobGV0IEM9MDtDIT09YjsrK0MpU1tDXT1yW0NdO3kuY2xpcHBpbmdTdGF0ZT1TLHRoaXMubnVtSW50ZXJzZWN0aW9uPWc/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ciYmKGwudmFsdWU9cixsLm5lZWRzVXBkYXRlPW4+MCksdC5udW1QbGFuZXM9bix0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLHAsZCl7bGV0IGc9aCE9PW51bGw/aC5sZW5ndGg6MCxfPW51bGw7aWYoZyE9PTApe2lmKF89bC52YWx1ZSxkIT09ITB8fF89PT1udWxsKXtsZXQgeT1wK2cqNCx4PWYubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHgpLChfPT09bnVsbHx8Xy5sZW5ndGg8eSkmJihfPW5ldyBGbG9hdDMyQXJyYXkoeSkpO2ZvcihsZXQgYj0wLFM9cDtiIT09ZzsrK2IsUys9NClhLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHgscyksYS5ub3JtYWwudG9BcnJheShfLFMpLF9bUyszXT1hLmNvbnN0YW50fWwudmFsdWU9XyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1nLHQubnVtSW50ZXJzZWN0aW9uPTAsX319ZnVuY3Rpb24gWGRyKGUpe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm4gcz09PVlQP2EubWFwcGluZz1ueDpzPT09alAmJihhLm1hcHBpbmc9aXgpLGF9ZnVuY3Rpb24gbihhKXtpZihhJiZhLmlzVGV4dHVyZSYmYS5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMSl7bGV0IHM9YS5tYXBwaW5nO2lmKHM9PT1ZUHx8cz09PWpQKWlmKHQuaGFzKGEpKXtsZXQgbD10LmdldChhKS50ZXh0dXJlO3JldHVybiByKGwsYS5tYXBwaW5nKX1lbHNle2xldCBsPWEuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFEzKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKGUsYSksdC5zZXQoYSxjKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLHIoYy50ZXh0dXJlLGEubWFwcGluZyl9ZWxzZSByZXR1cm4gbnVsbH19cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtsZXQgcz1hLnRhcmdldDtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2xldCBsPXQuZ2V0KHMpO2whPT12b2lkIDAmJih0LmRlbGV0ZShzKSxsLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXB9cmV0dXJue2dldDpuLGRpc3Bvc2U6b319dmFyIEQxPWNsYXNzIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IodD0tMSxyPTEsbj0xLGk9LTEsbz0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1yLHRoaXMudG9wPW4sdGhpcy5ib3R0b209aSx0aGlzLm5lYXI9byx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxyLG4saSxvLGEpe3RoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLHI9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLGk9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89bi10LGE9bit0LHM9aStyLGw9aS1yO2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLHU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxhPW8rYyp0aGlzLnZpZXcud2lkdGgscy09dSp0aGlzLnZpZXcub2Zmc2V0WSxsPXMtdSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8sYSxzLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC56b29tPXRoaXMuem9vbSxyLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxyLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LHIub2JqZWN0LnRvcD10aGlzLnRvcCxyLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSkscn19O0QxLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgVTA9Y2xhc3MgZXh0ZW5kcyBsaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O1UwLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBxMz00LEYwPTgsJGY9TWF0aC5wb3coMixGMCksQmZlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxIZmU9RjAtcTMrMStCZmUubGVuZ3RoLGszPTIwLGh1dD1uZXcgRDEse19sb2RQbGFuZXM6TlAsX3NpemVMb2RzOkV1ZSxfc2lnbWFzOlBWfT0kZHIoKSxUdWU9bmV3IG5lLGZ1dD1udWxsLFMxPSgxK01hdGguc3FydCg1KSkvMixSMz0xL1MxLEN1ZT1bbmV3IGooMSwxLDEpLG5ldyBqKC0xLDEsMSksbmV3IGooMSwxLC0xKSxuZXcgaigtMSwxLC0xKSxuZXcgaigwLFMxLFIzKSxuZXcgaigwLFMxLC1SMyksbmV3IGooUjMsMCxTMSksbmV3IGooLVIzLDAsUzEpLG5ldyBqKFMxLFIzLDApLG5ldyBqKC1TMSxSMywwKV0sZTY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD1LZHIoazMpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LHI9MCxuPS4xLGk9MTAwKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxuLGksbykscj4wJiZ0aGlzLl9ibHVyKG8sMCwwLHIpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxyPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LHIpfWZyb21DdWJlbWFwKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1JdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXt0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxOUC5sZW5ndGg7dCsrKU5QW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZnV0KSx0LnNjaXNzb3JUZXN0PSExLElWKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LHIpe2Z1dD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbj1yfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LG4pLHRoaXMuX2FwcGx5UE1SRU0obiksdGhpcy5fY2xlYW51cChuKSxufV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IHI9e21hZ0ZpbHRlcjppaSxtaW5GaWx0ZXI6aWksZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6QzEsZm9ybWF0OlFvLGVuY29kaW5nOlFkLGRlcHRoQnVmZmVyOiExfSxuPUF1ZShyKTtyZXR1cm4gbi5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1BdWUocikpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgcj1uZXcgdGkoTlBbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShyLGh1dCl9X3NjZW5lVG9DdWJlVVYodCxyLG4saSl7bGV0IHM9bmV3IFVpKDkwLDEscixuKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGg9dS5hdXRvQ2xlYXIsZj11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihUdWUpLHUudG9uZU1hcHBpbmc9S2QsdS5hdXRvQ2xlYXI9ITE7bGV0IHA9bmV3IHNoKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOklpLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZD1uZXcgdGkobmV3IFFmLHApLGc9ITEsXz10LmJhY2tncm91bmQ7Xz9fLmlzQ29sb3ImJihwLmNvbG9yLmNvcHkoXyksdC5iYWNrZ3JvdW5kPW51bGwsZz0hMCk6KHAuY29sb3IuY29weShUdWUpLGc9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzt4PT09MD8ocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KGNbeV0sMCwwKSk6eD09PTE/KHMudXAuc2V0KDAsMCxsW3ldKSxzLmxvb2tBdCgwLGNbeV0sMCkpOihzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoMCwwLGNbeV0pKSxJVihpLHgqJGYseT4yPyRmOjAsJGYsJGYpLHUuc2V0UmVuZGVyVGFyZ2V0KGkpLGcmJnUucmVuZGVyKGQscyksdS5yZW5kZXIodCxzKX1kLmdlb21ldHJ5LmRpc3Bvc2UoKSxkLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9X31fdGV4dHVyZVRvQ3ViZVVWKHQscil7bGV0IG49dGhpcy5fcmVuZGVyZXIsaT10Lm1hcHBpbmc9PT1ueHx8dC5tYXBwaW5nPT09aXg7aT8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPUl1ZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9dC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxKTp0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSk7bGV0IG89aT90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLGE9bmV3IHRpKE5QWzBdLG8pLHM9by51bmlmb3JtcztzLmVudk1hcC52YWx1ZT10LGl8fHMudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSVYociwwLDAsMyokZiwyKiRmKSxuLnNldFJlbmRlclRhcmdldChyKSxuLnJlbmRlcihhLGh1dCl9X2FwcGx5UE1SRU0odCl7bGV0IHI9dGhpcy5fcmVuZGVyZXIsbj1yLmF1dG9DbGVhcjtyLmF1dG9DbGVhcj0hMTtmb3IobGV0IGk9MTtpPEhmZTtpKyspe2xldCBvPU1hdGguc3FydChQVltpXSpQVltpXS1QVltpLTFdKlBWW2ktMV0pLGE9Q3VlWyhpLTEpJUN1ZS5sZW5ndGhdO3RoaXMuX2JsdXIodCxpLTEsaSxvLGEpfXIuYXV0b0NsZWFyPW59X2JsdXIodCxyLG4saSxvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEscixuLGksImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsbixuLGksImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQscixuLGksbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO2EhPT0ibGF0aXR1ZGluYWwiJiZhIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IHRpKE5QW2ldLGMpLGY9Yy51bmlmb3JtcyxwPUV1ZVtuXS0xLGQ9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvKDIqazMtMSksZz1vL2QsXz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IodSpnKTprMztfPmszJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke199IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtrM31gKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCBQPTA7UDxrMzsrK1Ape2xldCBrPVAvZyxPPU1hdGguZXhwKC1rKmsvMik7eS5wdXNoKE8pLFA9PT0wP3grPU86UDxfJiYoeCs9MipPKX1mb3IobGV0IFA9MDtQPHkubGVuZ3RoO1ArKyl5W1BdPXlbUF0veDtmLmVudk1hcC52YWx1ZT10LnRleHR1cmUsZi5zYW1wbGVzLnZhbHVlPV8sZi53ZWlnaHRzLnZhbHVlPXksZi5sYXRpdHVkaW5hbC52YWx1ZT1hPT09ImxhdGl0dWRpbmFsIixzJiYoZi5wb2xlQXhpcy52YWx1ZT1zKSxmLmRUaGV0YS52YWx1ZT1kLGYubWlwSW50LnZhbHVlPUYwLW47bGV0IGI9RXVlW2ldLFM9MypNYXRoLm1heCgwLCRmLTIqYiksQz0oaT09PTA/MDoyKiRmKSsyKmIqKGk+RjAtcTM/aS1GMCtxMzowKTtJVihyLFMsQywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChyKSxsLnJlbmRlcihoLGh1dCl9fTtmdW5jdGlvbiAkZHIoKXtsZXQgZT1bXSx0PVtdLHI9W10sbj1GMDtmb3IobGV0IGk9MDtpPEhmZTtpKyspe2xldCBvPU1hdGgucG93KDIsbik7dC5wdXNoKG8pO2xldCBhPTEvbztpPkYwLXEzP2E9QmZlW2ktRjArcTMtMV06aT09PTAmJihhPTApLHIucHVzaChhKTtsZXQgcz0xLyhvLTEpLGw9LXMvMixjPTErcy8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LHA9MyxkPTIsZz0xLF89bmV3IEZsb2F0MzJBcnJheShwKmYqaCkseT1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSx4PW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpO2ZvcihsZXQgUz0wO1M8aDtTKyspe2xldCBDPVMlMyoyLzMtMSxQPVM+Mj8wOi0xLGs9W0MsUCwwLEMrMi8zLFAsMCxDKzIvMyxQKzEsMCxDLFAsMCxDKzIvMyxQKzEsMCxDLFArMSwwXTtfLnNldChrLHAqZipTKSx5LnNldCh1LGQqZipTKTtsZXQgTz1bUyxTLFMsUyxTLFNdO3guc2V0KE8sZypmKlMpfWxldCBiPW5ldyBQZTtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShfLHApKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKZSh5LGQpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgSmUoeCxnKSksZS5wdXNoKGIpLG4+cTMmJm4tLX1yZXR1cm57X2xvZFBsYW5lczplLF9zaXplTG9kczp0LF9zaWdtYXM6cn19ZnVuY3Rpb24gQXVlKGUpe2xldCB0PW5ldyB1cygzKiRmLDMqJGYsZSk7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPXhNLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBJVihlLHQscixuLGkpe2Uudmlld3BvcnQuc2V0KHQscixuLGkpLGUuc2Npc3Nvci5zZXQodCxyLG4saSl9ZnVuY3Rpb24gS2RyKGUpe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoZSkscj1uZXcgaigwLDEsMCk7cmV0dXJuIG5ldyBVMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOmV9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpyfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBQdWUoKXtsZXQgZT1uZXcgTHQoMSwxKTtyZXR1cm4gbmV3IFUwKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIEl1ZSgpe3JldHVybiBuZXcgVTAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6Tmh0KCksZnJhZ21lbnRTaGFkZXI6YAoKCQkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCgkJCXZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uOwoKCQkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE5odCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiBaZHIoZSl7bGV0IHQ9bmV3IFdlYWtNYXAscj1udWxsO2Z1bmN0aW9uIG4ocyl7aWYocyYmcy5pc1RleHR1cmUpe2xldCBsPXMubWFwcGluZyxjPWw9PT1ZUHx8bD09PWpQLHU9bD09PW54fHxsPT09aXg7aWYoY3x8dSlpZihzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmcy5uZWVkc1BNUkVNVXBkYXRlPT09ITApe3MubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChzKTtyZXR1cm4gcj09PW51bGwmJihyPW5ldyBlNihlKSksaD1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzLGgpOnIuZnJvbUN1YmVtYXAocyxoKSx0LnNldChzLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgaD1zLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJmkoaCkpe3I9PT1udWxsJiYocj1uZXcgZTYoZSkpO2xldCBmPWM/ci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMpOnIuZnJvbUN1YmVtYXAocyk7cmV0dXJuIHQuc2V0KHMsZikscy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBzfWZ1bmN0aW9uIGkocyl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylzW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIG8ocyl7bGV0IGw9cy50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIGEoKXt0PW5ldyBXZWFrTWFwLHIhPT1udWxsJiYoci5kaXNwb3NlKCkscj1udWxsKX1yZXR1cm57Z2V0Om4sZGlzcG9zZTphfX1mdW5jdGlvbiBKZHIoZSl7bGV0IHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dIT09dm9pZCAwKXJldHVybiB0W25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPWUuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiB0W25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pIT09bnVsbH0saW5pdDpmdW5jdGlvbihuKXtuLmlzV2ViR0wyP3IoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToocigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHIoIk9FU190ZXh0dXJlX2Zsb2F0IikscigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikscigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikscigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLHIoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikscigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxyKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxyKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKG4pe2xldCBpPXIobik7cmV0dXJuIGk9PT1udWxsJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrbisiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGl9fX1mdW5jdGlvbiBRZHIoZSx0LHIsbil7bGV0IGk9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGQgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tkXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgaVtmLmlkXTtsZXQgcD1vLmdldChmKTtwJiYodC5yZW1vdmUocCksby5kZWxldGUoZikpLG4ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LHIubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGlbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksaVtmLmlkXT0hMCxyLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIGYpdC51cGRhdGUoZltkXSwzNDk2Mik7bGV0IHA9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIHApe2xldCBnPXBbZF07Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXQudXBkYXRlKGdbX10sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLHA9aC5pbmRleCxkPWguYXR0cmlidXRlcy5wb3NpdGlvbixnPTA7aWYocCE9PW51bGwpe2xldCB4PXAuYXJyYXk7Zz1wLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aDtiPFM7Yis9Myl7bGV0IEM9eFtiKzBdLFA9eFtiKzFdLGs9eFtiKzJdO2YucHVzaChDLFAsUCxrLGssQyl9fWVsc2V7bGV0IHg9ZC5hcnJheTtnPWQudmVyc2lvbjtmb3IobGV0IGI9MCxTPXgubGVuZ3RoLzMtMTtiPFM7Yis9Myl7bGV0IEM9YiswLFA9YisxLGs9YisyO2YucHVzaChDLFAsUCxrLGssQyl9fWxldCBfPW5ldyhEZmUoZik/SzM6JDMpKGYsMSk7Xy52ZXJzaW9uPWc7bGV0IHk9by5nZXQoaCk7eSYmdC5yZW1vdmUoeSksby5zZXQoaCxfKX1mdW5jdGlvbiB1KGgpe2xldCBmPW8uZ2V0KGgpO2lmKGYpe2xldCBwPWguaW5kZXg7cCE9PW51bGwmJmYudmVyc2lvbjxwLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBvLmdldChoKX1yZXR1cm57Z2V0OnMsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIHRtcihlLHQscixuKXtsZXQgaT1uLmlzV2ViR0wyLG87ZnVuY3Rpb24gYShmKXtvPWZ9bGV0IHMsbDtmdW5jdGlvbiBjKGYpe3M9Zi50eXBlLGw9Zi5ieXRlc1BlckVsZW1lbnR9ZnVuY3Rpb24gdShmLHApe2UuZHJhd0VsZW1lbnRzKG8scCxzLGYqbCksci51cGRhdGUocCxvLDEpfWZ1bmN0aW9uIGgoZixwLGQpe2lmKGQ9PT0wKXJldHVybjtsZXQgZyxfO2lmKGkpZz1lLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihnPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksXz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLGc9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWdbX10obyxwLHMsZipsLGQpLHIudXBkYXRlKHAsbyxkKX10aGlzLnNldE1vZGU9YSx0aGlzLnNldEluZGV4PWMsdGhpcy5yZW5kZXI9dSx0aGlzLnJlbmRlckluc3RhbmNlcz1ofWZ1bmN0aW9uIGVtcihlKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBuKG8sYSxzKXtzd2l0Y2goci5jYWxscysrLGEpe2Nhc2UgNDpyLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ci5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ci5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ci5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDpyLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpO2JyZWFrfX1mdW5jdGlvbiBpKCl7ci5mcmFtZSsrLHIuY2FsbHM9MCxyLnRyaWFuZ2xlcz0wLHIucG9pbnRzPTAsci5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6cixwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDppLHVwZGF0ZTpufX12YXIgdE09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07dE0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHJtcihlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gbm1yKGUsdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKGVbMV0pfWZ1bmN0aW9uIEx1ZShlLHQpe2xldCByPTEsbj10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7biBpbnN0YW5jZW9mIEludDhBcnJheT9yPTEyNzpuIGluc3RhbmNlb2YgSW50MTZBcnJheT9yPTMyNzY3Om4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P3I9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixuKSxlLmRpdmlkZVNjYWxhcihyKX1mdW5jdGlvbiBpbXIoZSx0LHIpe2xldCBuPXt9LGk9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLGE9bmV3IGoscz1bXTtmb3IobGV0IGM9MDtjPDg7YysrKXNbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgcD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBkPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxnPW8uZ2V0KHUpO2lmKGc9PT12b2lkIDB8fGcuY291bnQhPT1kKXtsZXQgTD1mdW5jdGlvbigpe0IuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9O2chPT12b2lkIDAmJmcudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sUz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLEM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LFA9eD09PSEwPzI6MSxrPUMqUCxPPTE7az50Lm1heFRleHR1cmVTaXplJiYoTz1NYXRoLmNlaWwoay90Lm1heFRleHR1cmVTaXplKSxrPXQubWF4VGV4dHVyZVNpemUpO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkoaypPKjQqZCksQj1uZXcgdE0oRCxrLE8sZCk7Qi5mb3JtYXQ9UW8sQi50eXBlPWpkLEIubmVlZHNVcGRhdGU9ITA7bGV0IEk9UCo0O2ZvcihsZXQgUj0wO1I8ZDtSKyspe2xldCBGPWJbUl0sej1TW1JdLFU9aypPKjQqUjtmb3IobGV0IFc9MDtXPEYuY291bnQ7VysrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoRixXKSxGLm5vcm1hbGl6ZWQ9PT0hMCYmTHVlKGEsRik7bGV0IFo9VypJO0RbVStaKzBdPWEueCxEW1UrWisxXT1hLnksRFtVK1orMl09YS56LERbVStaKzNdPTAseD09PSEwJiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKHosVyksei5ub3JtYWxpemVkPT09ITAmJkx1ZShhLHopLERbVStaKzRdPWEueCxEW1UrWis1XT1hLnksRFtVK1orNl09YS56LERbVStaKzddPTApfX1nPXtjb3VudDpkLHRleHR1cmU6QixzaXplOm5ldyBMdChrLE8pfSxvLnNldCh1LGcpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9bGV0IF89MDtmb3IobGV0IHg9MDt4PHAubGVuZ3RoO3grKylfKz1wW3hdO2xldCB5PXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLV87Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGcudGV4dHVyZSxyKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZSwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGcuc2l6ZSl9ZWxzZXtsZXQgZD1wPT09dm9pZCAwPzA6cC5sZW5ndGgsZz1uW3UuaWRdO2lmKGc9PT12b2lkIDB8fGcubGVuZ3RoIT09ZCl7Zz1bXTtmb3IobGV0IFM9MDtTPGQ7UysrKWdbU109W1MsMF07blt1LmlkXT1nfWZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWdbU107Q1swXT1TLENbMV09cFtTXX1nLnNvcnQobm1yKTtmb3IobGV0IFM9MDtTPDg7UysrKVM8ZCYmZ1tTXVsxXT8oc1tTXVswXT1nW1NdWzBdLHNbU11bMV09Z1tTXVsxXSk6KHNbU11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsc1tTXVsxXT0wKTtzLnNvcnQocm1yKTtsZXQgXz11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBTPTA7Uzw4O1MrKyl7bGV0IEM9c1tTXSxQPUNbMF0saz1DWzFdO1AhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmaz8oXyYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSE9PV9bUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyxfW1BdKSx5JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpIT09eVtQXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTLHlbUF0pLGlbU109ayx4Kz1rKTooXyYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MpLHkmJnUuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSxpW1NdPTApfWxldCBiPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsYiksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaSl9fXJldHVybnt1cGRhdGU6bH19ZnVuY3Rpb24gb21yKGUsdCxyLG4pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG8obCl7bGV0IGM9bi5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gaS5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksaS5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBhKCl7aT1uZXcgV2Vha01hcH1mdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOm8sZGlzcG9zZTphfX12YXIgcjY9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07cjYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgVmZlPW5ldyB2aSxVZmU9bmV3IHRNLHFmZT1uZXcgcjYsR2ZlPW5ldyBIMCxrdWU9W10sUnVlPVtdLE51ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxEdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxPdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBiTShlLHQscil7bGV0IG49ZVswXTtpZihuPD0wfHxuPjApcmV0dXJuIGU7bGV0IGk9dCpyLG89a3VlW2ldO2lmKG89PT12b2lkIDAmJihvPW5ldyBGbG9hdDMyQXJyYXkoaSksa3VlW2ldPW8pLHQhPT0wKXtuLnRvQXJyYXkobywwKTtmb3IobGV0IGE9MSxzPTA7YSE9PXQ7KythKXMrPXIsZVthXS50b0FycmF5KG8scyl9cmV0dXJuIG99ZnVuY3Rpb24gaHMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDYShlLHQpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl19ZnVuY3Rpb24gS1UoZSx0KXtsZXQgcj1SdWVbdF07cj09PXZvaWQgMCYmKHI9bmV3IEludDMyQXJyYXkodCksUnVlW3RdPXIpO2ZvcihsZXQgbj0wO24hPT10OysrbilyW25dPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiByfWZ1bmN0aW9uIGFtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBzbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueSkmJihlLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksclswXT10LngsclsxXT10LnkpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBsbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueXx8clsyXSE9PXQueikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoclswXSE9PXQucnx8clsxXSE9PXQuZ3x8clsyXSE9PXQuYikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLHJbMF09dC5yLHJbMV09dC5nLHJbMl09dC5iKTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTNmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gY21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10Lnp8fHJbM10hPT10LncpJiYoZS51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksclswXT10LngsclsxXT10LnksclsyXT10LnosclszXT10LncpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiB1bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtPdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsT3VlKSxDYShyLG4pfX1mdW5jdGlvbiBobXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtEdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRHVlKSxDYShyLG4pfX1mdW5jdGlvbiBmbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtOdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsTnVlKSxDYShyLG4pfX1mdW5jdGlvbiBwbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gZG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBtbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIGdtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTRpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gX21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiB5bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB2bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB4bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBibXIoZSx0LHIpe2xldCBuPXRoaXMuY2FjaGUsaT1yLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09aSYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxuWzBdPWkpLHIuc2FmZVNldFRleHR1cmUyRCh0fHxWZmUsaSl9ZnVuY3Rpb24gd21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUzRCh0fHxxZmUsaSl9ZnVuY3Rpb24gU21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxHZmUsaSl9ZnVuY3Rpb24gTW1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUyREFycmF5KHR8fFVmZSxpKX1mdW5jdGlvbiBFbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gYW1yO2Nhc2UgMzU2NjQ6cmV0dXJuIHNtcjtjYXNlIDM1NjY1OnJldHVybiBsbXI7Y2FzZSAzNTY2NjpyZXR1cm4gY21yO2Nhc2UgMzU2NzQ6cmV0dXJuIHVtcjtjYXNlIDM1Njc1OnJldHVybiBobXI7Y2FzZSAzNTY3NjpyZXR1cm4gZm1yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBwbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBkbXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBtbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBnbXI7Y2FzZSA1MTI1OnJldHVybiBfbXI7Y2FzZSAzNjI5NDpyZXR1cm4geW1yO2Nhc2UgMzYyOTU6cmV0dXJuIHZtcjtjYXNlIDM2Mjk2OnJldHVybiB4bXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBibXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIHdtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBTbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gTW1yfX1mdW5jdGlvbiBUbXIoZSx0KXtlLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIENtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDIpO2UudW5pZm9ybTJmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gQW1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMyk7ZS51bmlmb3JtM2Z2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBQbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm00ZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIEltcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDQpO2UudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gTG1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsOSk7ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBrbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwxNik7ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBSbXIoZSx0KXtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIE5tcihlLHQpe2UudW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gRG1yKGUsdCl7ZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBPbXIoZSx0KXtlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHptcihlLHQpe2UudW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEZtcihlLHQpe2UudW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJtcihlLHQpe2UudW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEhtcihlLHQpe2UudW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFZtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmUyRCh0W29dfHxWZmUsaVtvXSl9ZnVuY3Rpb24gVW1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlM0QodFtvXXx8cWZlLGlbb10pfWZ1bmN0aW9uIHFtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fEdmZSxpW29dKX1mdW5jdGlvbiBHbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNldFRleHR1cmUyREFycmF5KHRbb118fFVmZSxpW29dKX1mdW5jdGlvbiBXbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gVG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIENtcjtjYXNlIDM1NjY1OnJldHVybiBBbXI7Y2FzZSAzNTY2NjpyZXR1cm4gUG1yO2Nhc2UgMzU2NzQ6cmV0dXJuIEltcjtjYXNlIDM1Njc1OnJldHVybiBMbXI7Y2FzZSAzNTY3NjpyZXR1cm4ga21yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBSbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBObXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBEbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPbXI7Y2FzZSA1MTI1OnJldHVybiB6bXI7Y2FzZSAzNjI5NDpyZXR1cm4gRm1yO2Nhc2UgMzYyOTU6cmV0dXJuIEJtcjtjYXNlIDM2Mjk2OnJldHVybiBIbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBWbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIFVtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBxbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gR21yfX1mdW5jdGlvbiBZbXIoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmFkZHI9cix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9RW1yKHQudHlwZSl9ZnVuY3Rpb24gV2ZlKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9V21yKHQudHlwZSl9V2ZlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLmNhY2hlO2UgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09ZS5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgpKSxDYSh0LGUpfTtmdW5jdGlvbiBZZmUoZSl7dGhpcy5pZD1lLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fVlmZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuc2VxO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT1uW2ldO2Euc2V0VmFsdWUoZSx0W2EuaWRdLHIpfX07dmFyIHB1dD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24genVlKGUsdCl7ZS5zZXEucHVzaCh0KSxlLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGptcihlLHQscil7bGV0IG49ZS5uYW1lLGk9bi5sZW5ndGg7Zm9yKHB1dC5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wdXQuZXhlYyhuKSxhPXB1dC5sYXN0SW5kZXgscz1vWzFdLGw9b1syXT09PSJdIixjPW9bM107aWYobCYmKHM9c3wwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZhKzI9PT1pKXt6dWUocixjPT09dm9pZCAwP25ldyBZbXIocyxlLHQpOm5ldyBXZmUocyxlLHQpKTticmVha31lbHNle2xldCBoPXIubWFwW3NdO2g9PT12b2lkIDAmJihoPW5ldyBZZmUocyksenVlKHIsaCkpLHI9aH19fWZ1bmN0aW9uIEIwKGUsdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IHI9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgbj0wO248cjsrK24pe2xldCBpPWUuZ2V0QWN0aXZlVW5pZm9ybSh0LG4pLG89ZS5nZXRVbmlmb3JtTG9jYXRpb24odCxpLm5hbWUpO2ptcihpLG8sdGhpcyl9fUIwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlLHQscixuKXtsZXQgaT10aGlzLm1hcFt0XTtpIT09dm9pZCAwJiZpLnNldFZhbHVlKGUscixuKX07QjAucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10W3JdO24hPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSxyLG4pfTtCMC51cGxvYWQ9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpIT09bzsrK2kpe2xldCBhPXRbaV0scz1yW2EuaWRdO3MubmVlZHNVcGRhdGUhPT0hMSYmYS5zZXRWYWx1ZShlLHMudmFsdWUsbil9fTtCMC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbil7bGV0IG89ZVtuXTtvLmlkIGluIHQmJnIucHVzaChvKX1yZXR1cm4gcn07ZnVuY3Rpb24gRnVlKGUsdCxyKXtsZXQgbj1lLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gZS5zaGFkZXJTb3VyY2UobixyKSxlLmNvbXBpbGVTaGFkZXIobiksbn12YXIgWG1yPTA7ZnVuY3Rpb24gJG1yKGUpe2xldCB0PWUuc3BsaXQoYApgKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXIrMSsiOiAiK3Rbcl07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIEttcihlKXtzd2l0Y2goZSl7Y2FzZSBRZDpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgV246cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsZSksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gQnVlKGUsdCxyKXtsZXQgbj1lLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxpPWUuZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIG4mJmk9PT0iIj8iIjpyLnRvVXBwZXJDYXNlKCkrYAoKYCtpK2AKCmArJG1yKGUuZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiBabXIoZSx0KXtsZXQgcj1LbXIodCk7cmV0dXJuInZlYzQgIitlKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrclswXStyWzFdKyI7IH0ifWZ1bmN0aW9uIEptcihlLHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIGFmZTpyPSJMaW5lYXIiO2JyZWFrO2Nhc2Ugc2ZlOnI9IlJlaW5oYXJkIjticmVhaztjYXNlIGxmZTpyPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgY2ZlOnI9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgdWZlOnI9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxyPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrZSsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIityKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gUW1yKGUpe3JldHVybltlLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8ZS5jbGVhcmNvYXROb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmd8fGUuc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGUuZXh0ZW5zaW9uRnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixlLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwfHxlLnRyYW5zbWlzc2lvbikmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoSFApLmpvaW4oYApgKX1mdW5jdGlvbiB0Z3IoZSl7bGV0IHQ9W107Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07biE9PSExJiZ0LnB1c2goIiNkZWZpbmUgIityKyIgIituKX1yZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gZWdyKGUsdCl7bGV0IHI9e30sbj1lLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG89ZS5nZXRBY3RpdmVBdHRyaWIodCxpKSxhPW8ubmFtZSxzPTE7by50eXBlPT09MzU2NzQmJihzPTIpLG8udHlwZT09PTM1Njc1JiYocz0zKSxvLnR5cGU9PT0zNTY3NiYmKHM9NCksclthXT17dHlwZTpvLnR5cGUsbG9jYXRpb246ZS5nZXRBdHRyaWJMb2NhdGlvbih0LGEpLGxvY2F0aW9uU2l6ZTpzfX1yZXR1cm4gcn1mdW5jdGlvbiBIUChlKXtyZXR1cm4gZSE9PSIifWZ1bmN0aW9uIEh1ZShlLHQpe3JldHVybiBlLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBWdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciByZ3I9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBKdXQoZSl7cmV0dXJuIGUucmVwbGFjZShyZ3IsbmdyKX1mdW5jdGlvbiBuZ3IoZSx0KXtsZXQgcj1oclt0XTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gSnV0KHIpfXZhciBpZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxvZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBVdWUoZSl7cmV0dXJuIGUucmVwbGFjZShvZ3IsamZlKS5yZXBsYWNlKGlncixhZ3IpfWZ1bmN0aW9uIGFncihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksamZlKGUsdCxyLG4pfWZ1bmN0aW9uIGpmZShlLHQscixuKXtsZXQgaT0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChyKTtvKyspaSs9bi5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIGl9ZnVuY3Rpb24gcXVlKGUpe2xldCB0PSJwcmVjaXNpb24gIitlLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtlLnByZWNpc2lvbisiIGludDsiO3JldHVybiBlLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDplLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gc2dyKGUpe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIGUuc2hhZG93TWFwVHlwZT09PUNodD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOmUuc2hhZG93TWFwVHlwZT09PUZoZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6ZS5zaGFkb3dNYXBUeXBlPT09RjMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGxncihlKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuZW52TWFwTW9kZSl7Y2FzZSBueDpjYXNlIGl4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgeE06Y2FzZSB6Njp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBjZ3IoZSl7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSB6Njp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiB1Z3IoZSl7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihlLmVudk1hcClzd2l0Y2goZS5jb21iaW5lKXtjYXNlIE82OnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBpZmU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBvZmU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gaGdyKGUsdCxyLG4pe2xldCBpPWUuZ2V0Q29udGV4dCgpLG89ci5kZWZpbmVzLGE9ci52ZXJ0ZXhTaGFkZXIscz1yLmZyYWdtZW50U2hhZGVyLGw9c2dyKHIpLGM9bGdyKHIpLHU9Y2dyKHIpLGg9dWdyKHIpLGY9ci5pc1dlYkdMMj8iIjpRbXIocikscD10Z3IobyksZD1pLmNyZWF0ZVByb2dyYW0oKSxnLF8seT1yLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK3IuZ2xzbFZlcnNpb24rYApgOiIiO3IuaXNSYXdTaGFkZXJNYXRlcmlhbD8oZz1bcF0uZmlsdGVyKEhQKS5qb2luKGAKYCksZy5sZW5ndGg+MCYmKGcrPWAKYCksXz1bZixwXS5maWx0ZXIoSFApLmpvaW4oYApgKSxfLmxlbmd0aD4wJiYoXys9YApgKSk6KGc9W3F1ZShyKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3Iuc2hhZGVyTmFtZSxwLHIuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLHIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK3IubWF4Qm9uZXMsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsci5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHIuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixyLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHIubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHIuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixyLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsci5kaXNwbGFjZW1lbnRNYXAmJnIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHIudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixyLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixyLm1vcnBoTm9ybWFscyYmci5mbGF0U2hhZGluZz09PSExPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHIubW9ycGhUYXJnZXRzJiZyLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIityLm1vcnBoVGFyZ2V0c0NvdW50OiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCIJYXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiCWF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIglhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIglhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIglhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIgkjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIgkjZWxzZSIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIgkjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCIJYXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLGAKYF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXz1bZixxdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLnVzZUZvZyYmci5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsci51c2VGb2cmJnIuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsci5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsci5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixyLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsci5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixyLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixyLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixyLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsci5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsci5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9yc3x8ci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixyLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLHIudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsci51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsci5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmci5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoci5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxyLmVudk1hcCkmJnIucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixyLnRvbmVNYXBwaW5nIT09S2Q/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixyLnRvbmVNYXBwaW5nIT09S2Q/aHIudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixyLnRvbmVNYXBwaW5nIT09S2Q/Sm1yKCJ0b25lTWFwcGluZyIsci50b25lTWFwcGluZyk6IiIsci5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixyLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixoci5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxabXIoImxpbmVhclRvT3V0cHV0VGV4ZWwiLHIub3V0cHV0RW5jb2RpbmcpLHIuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIityLmRlcHRoUGFja2luZzoiIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApKSxhPUp1dChhKSxhPUh1ZShhLHIpLGE9VnVlKGEscikscz1KdXQocykscz1IdWUocyxyKSxzPVZ1ZShzLHIpLGE9VXVlKGEpLHM9VXVlKHMpLHIuaXNXZWJHTDImJnIuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYoeT1gI3ZlcnNpb24gMzAwIGVzCmAsZz1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK2csXz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCtfKTtsZXQgeD15K2crYSxiPXkrXytzLFM9RnVlKGksMzU2MzMseCksQz1GdWUoaSwzNTYzMixiKTtpZihpLmF0dGFjaFNoYWRlcihkLFMpLGkuYXR0YWNoU2hhZGVyKGQsQyksci5pbmRleDBBdHRyaWJ1dGVOYW1lIT09dm9pZCAwP2kuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCxyLmluZGV4MEF0dHJpYnV0ZU5hbWUpOnIubW9ycGhUYXJnZXRzPT09ITAmJmkuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCwicG9zaXRpb24iKSxpLmxpbmtQcm9ncmFtKGQpLGUuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2xldCBPPWkuZ2V0UHJvZ3JhbUluZm9Mb2coZCkudHJpbSgpLEQ9aS5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSxCPWkuZ2V0U2hhZGVySW5mb0xvZyhDKS50cmltKCksST0hMCxMPSEwO2lmKGkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE0KT09PSExKXtJPSExO2xldCBSPUJ1ZShpLFMsInZlcnRleCIpLEY9QnVlKGksQywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK2kuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIraS5nZXRQcm9ncmFtUGFyYW1ldGVyKGQsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArTytgCmArUitgCmArRil9ZWxzZSBPIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixPKTooRD09PSIifHxCPT09IiIpJiYoTD0hMSk7TCYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOkkscHJvZ3JhbUxvZzpPLHZlcnRleFNoYWRlcjp7bG9nOkQscHJlZml4Omd9LGZyYWdtZW50U2hhZGVyOntsb2c6QixwcmVmaXg6X319KX1pLmRlbGV0ZVNoYWRlcihTKSxpLmRlbGV0ZVNoYWRlcihDKTtsZXQgUDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPW5ldyBCMChpLGQpKSxQfTtsZXQgaztyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGs9PT12b2lkIDAmJihrPWVncihpLGQpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksaS5kZWxldGVQcm9ncmFtKGQpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1yLnNoYWRlck5hbWUsdGhpcy5pZD1YbXIrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09ZCx0aGlzLnZlcnRleFNoYWRlcj1TLHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfXZhciBmZ3I9MCxRdXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCByPXQudmVydGV4U2hhZGVyLG49dC5mcmFnbWVudFNoYWRlcixpPXRoaXMuX2dldFNoYWRlclN0YWdlKHIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UobiksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiBhLmhhcyhpKT09PSExJiYoYS5hZGQoaSksaS51c2VkVGltZXMrKyksYS5oYXMobyk9PT0hMSYmKGEuYWRkKG8pLG8udXNlZFRpbWVzKyspLHRoaXN9cmVtb3ZlKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZS5nZXQodCk7Zm9yKGxldCBuIG9mIHIpbi51c2VkVGltZXMtLSxuLnVzZWRUaW1lcz09PTAmJnRoaXMuc2hhZGVyQ2FjaGUuZGVsZXRlKG4pO3JldHVybiB0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKHQpLHRoaXN9Z2V0VmVydGV4U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQudmVydGV4U2hhZGVyKS5pZH1nZXRGcmFnbWVudFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LmZyYWdtZW50U2hhZGVyKS5pZH1kaXNwb3NlKCl7dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpLHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpfV9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZTtyZXR1cm4gci5oYXModCk9PT0hMSYmci5zZXQodCxuZXcgU2V0KSxyLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IHI9dGhpcy5zaGFkZXJDYWNoZTtpZihyLmhhcyh0KT09PSExKXtsZXQgbj1uZXcgdGh0O3Iuc2V0KHQsbil9cmV0dXJuIHIuZ2V0KHQpfX0sdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1mZ3IrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZnVuY3Rpb24gcGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPW5ldyBYMyxsPW5ldyBRdXQsYz1bXSx1PWkuaXNXZWJHTDIsaD1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLGQ9aS52ZXJ0ZXhUZXh0dXJlcyxnPWkucHJlY2lzaW9uLF89e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiB5KEkpe2xldCBSPUkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigocC0yMCkvNCksVT1NYXRoLm1pbih6LFIubGVuZ3RoKTtyZXR1cm4gVTxSLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitSLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1UrIi4iKSwwKTpVfX1mdW5jdGlvbiB4KEksTCxSLEYseil7bGV0IFU9Ri5mb2csVz1JLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFo9KEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9yOnQpLmdldChJLmVudk1hcHx8VykscnQ9X1tJLnR5cGVdLG90PXouaXNTa2lubmVkTWVzaD95KHopOjA7SS5wcmVjaXNpb24hPT1udWxsJiYoZz1pLmdldE1heFByZWNpc2lvbihJLnByZWNpc2lvbiksZyE9PUkucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsSS5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixnLCJpbnN0ZWFkLiIpKTtsZXQgc3QsU3QsYnQsTXQ7aWYocnQpe2xldCBYPWFoW3J0XTtzdD1YLnZlcnRleFNoYWRlcixTdD1YLmZyYWdtZW50U2hhZGVyfWVsc2Ugc3Q9SS52ZXJ0ZXhTaGFkZXIsU3Q9SS5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShJKSxidD1sLmdldFZlcnRleFNoYWRlcklEKEkpLE10PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChJKTtsZXQgbHQ9ZS5nZXRSZW5kZXJUYXJnZXQoKSxLdD1JLmFscGhhVGVzdD4wLF90PUkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6cnQsc2hhZGVyTmFtZTpJLnR5cGUsdmVydGV4U2hhZGVyOnN0LGZyYWdtZW50U2hhZGVyOlN0LGRlZmluZXM6SS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmJ0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6TXQsaXNSYXdTaGFkZXJNYXRlcmlhbDpJLmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjpJLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpnLGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bHQ9PT1udWxsP2Uub3V0cHV0RW5jb2Rpbmc6bHQuaXNYUlJlbmRlclRhcmdldD09PSEwP2x0LnRleHR1cmUuZW5jb2Rpbmc6UWQsbWFwOiEhSS5tYXAsbWF0Y2FwOiEhSS5tYXRjYXAsZW52TWFwOiEhWixlbnZNYXBNb2RlOlomJloubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFaJiYoWi5tYXBwaW5nPT09eE18fFoubWFwcGluZz09PXo2KSxsaWdodE1hcDohIUkubGlnaHRNYXAsYW9NYXA6ISFJLmFvTWFwLGVtaXNzaXZlTWFwOiEhSS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhSS5idW1wTWFwLG5vcm1hbE1hcDohIUkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PUxmZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09YXgsZGVjb2RlVmlkZW9UZXh0dXJlOiEhSS5tYXAmJkkubWFwLmlzVmlkZW9UZXh0dXJlPT09ITAmJkkubWFwLmVuY29kaW5nPT09V24sY2xlYXJjb2F0Ol90LGNsZWFyY29hdE1hcDpfdCYmISFJLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6X3QmJiEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOl90JiYhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUkuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUkuYWxwaGFNYXAsYWxwaGFUZXN0Okt0LGFscGhhV3JpdGU6SS5hbHBoYVdyaXRlfHxJLnRyYW5zcGFyZW50LGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxzaGVlbjpJLnNoZWVuPjAsc2hlZW5Db2xvck1hcDohIUkuc2hlZW5Db2xvck1hcCxzaGVlblJvdWdobmVzc01hcDohIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdHJhbnNtaXNzaW9uOkkudHJhbnNtaXNzaW9uPjAsdHJhbnNtaXNzaW9uTWFwOiEhSS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhSS50aGlja25lc3NNYXAsY29tYmluZTpJLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFJLm5vcm1hbE1hcCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6SS52ZXJ0ZXhDb2xvcnM9PT0hMCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx2ZXJ0ZXhVdnM6ISFJLm1hcHx8ISFJLmJ1bXBNYXB8fCEhSS5ub3JtYWxNYXB8fCEhSS5zcGVjdWxhck1hcHx8ISFJLmFscGhhTWFwfHwhIUkuZW1pc3NpdmVNYXB8fCEhSS5yb3VnaG5lc3NNYXB8fCEhSS5tZXRhbG5lc3NNYXB8fCEhSS5jbGVhcmNvYXRNYXB8fCEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fCEhSS5jbGVhcmNvYXROb3JtYWxNYXB8fCEhSS5kaXNwbGFjZW1lbnRNYXB8fCEhSS50cmFuc21pc3Npb25NYXB8fCEhSS50aGlja25lc3NNYXB8fCEhSS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISFJLnNwZWN1bGFyQ29sb3JNYXB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdXZzVmVydGV4T25seTohKCEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxJLnRyYW5zbWlzc2lvbj4wfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuPjB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXApJiYhIUkuZGlzcGxhY2VtZW50TWFwLGZvZzohIVUsdXNlRm9nOkkuZm9nLGZvZ0V4cDI6VSYmVS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsc2tpbm5pbmc6ei5pc1NraW5uZWRNZXNoPT09ITAmJm90PjAsbWF4Qm9uZXM6b3QsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpMLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpMLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOkwuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6TC5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpMLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpMLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpMLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOkwuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDplLnNoYWRvd01hcC5lbmFibGVkJiZSLmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6ZS5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzpJLnRvbmVNYXBwZWQ/ZS50b25lTWFwcGluZzpLZCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czplLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpJLnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDpJLnNpZGU9PT1MMSxmbGlwU2lkZWQ6SS5zaWRlPT09SWksZGVwdGhQYWNraW5nOkkuZGVwdGhQYWNraW5nIT09dm9pZCAwP0kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6SS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpJLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKEkpe2xldCBMPVtdO2lmKEkuc2hhZGVySUQ/TC5wdXNoKEkuc2hhZGVySUQpOihMLnB1c2goSS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksTC5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLEkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IFIgaW4gSS5kZWZpbmVzKUwucHVzaChSKSxMLnB1c2goSS5kZWZpbmVzW1JdKTtyZXR1cm4gSS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihTKEwsSSksQyhMLEkpLEwucHVzaChlLm91dHB1dEVuY29kaW5nKSksTC5wdXNoKEkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxMLmpvaW4oKX1mdW5jdGlvbiBTKEksTCl7SS5wdXNoKEwucHJlY2lzaW9uKSxJLnB1c2goTC5vdXRwdXRFbmNvZGluZyksSS5wdXNoKEwuZW52TWFwTW9kZSksSS5wdXNoKEwuY29tYmluZSksSS5wdXNoKEwudmVydGV4VXZzKSxJLnB1c2goTC5mb2dFeHAyKSxJLnB1c2goTC5zaXplQXR0ZW51YXRpb24pLEkucHVzaChMLm1heEJvbmVzKSxJLnB1c2goTC5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKEwubnVtRGlyTGlnaHRzKSxJLnB1c2goTC5udW1Qb2ludExpZ2h0cyksSS5wdXNoKEwubnVtU3BvdExpZ2h0cyksSS5wdXNoKEwubnVtSGVtaUxpZ2h0cyksSS5wdXNoKEwubnVtUmVjdEFyZWFMaWdodHMpLEkucHVzaChMLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVNwb3RMaWdodFNoYWRvd3MpLEkucHVzaChMLnNoYWRvd01hcFR5cGUpLEkucHVzaChMLnRvbmVNYXBwaW5nKSxJLnB1c2goTC5udW1DbGlwcGluZ1BsYW5lcyksSS5wdXNoKEwubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKEwuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gQyhJLEwpe3MuZGlzYWJsZUFsbCgpLEwuaXNXZWJHTDImJnMuZW5hYmxlKDApLEwuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSksTC5pbnN0YW5jaW5nJiZzLmVuYWJsZSgyKSxMLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMyksTC5tYXAmJnMuZW5hYmxlKDQpLEwubWF0Y2FwJiZzLmVuYWJsZSg1KSxMLmVudk1hcCYmcy5lbmFibGUoNiksTC5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLEwubGlnaHRNYXAmJnMuZW5hYmxlKDgpLEwuYW9NYXAmJnMuZW5hYmxlKDkpLEwuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxMLmJ1bXBNYXAmJnMuZW5hYmxlKDExKSxMLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLEwub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxMLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmcy5lbmFibGUoMTQpLEwuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSksTC5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxMLmNsZWFyY29hdFJvdWdobmVzc01hcCYmcy5lbmFibGUoMTcpLEwuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCksTC5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxMLnNwZWN1bGFyTWFwJiZzLmVuYWJsZSgyMCksTC5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLEwuZ3JhZGllbnRNYXAmJnMuZW5hYmxlKDIzKSxMLmFscGhhTWFwJiZzLmVuYWJsZSgyNCksTC5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxMLnZlcnRleENvbG9ycyYmcy5lbmFibGUoMjYpLEwudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNyksTC52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxMLnZlcnRleFRhbmdlbnRzJiZzLmVuYWJsZSgyOSksTC51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCksTC5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxMLnVzZUZvZyYmcy5lbmFibGUoMCksTC5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSksTC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxMLnNraW5uaW5nJiZzLmVuYWJsZSgzKSxMLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLEwubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxMLm1vcnBoTm9ybWFscyYmcy5lbmFibGUoNiksTC5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLEwuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCksTC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmcy5lbmFibGUoOSksTC5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLEwuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSksTC5kZXB0aFBhY2tpbmcmJnMuZW5hYmxlKDEyKSxMLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLEwuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxMLnNwZWN1bGFyQ29sb3JNYXAmJnMuZW5hYmxlKDE1KSxMLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLEwudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNyksTC50aGlja25lc3NNYXAmJnMuZW5hYmxlKDE4KSxMLnNoZWVuJiZzLmVuYWJsZSgxOSksTC5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCksTC5zaGVlblJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLEwuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksSS5wdXNoKHMubWFzayl9ZnVuY3Rpb24gUChJKXtsZXQgTD1fW0kudHlwZV0sUjtpZihMKXtsZXQgRj1haFtMXTtSPXpmZS5jbG9uZShGLnVuaWZvcm1zKX1lbHNlIFI9SS51bmlmb3JtcztyZXR1cm4gUn1mdW5jdGlvbiBrKEksTCl7bGV0IFI7Zm9yKGxldCBGPTAsej1jLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1jW0ZdO2lmKFUuY2FjaGVLZXk9PT1MKXtSPVUsKytSLnVzZWRUaW1lczticmVha319cmV0dXJuIFI9PT12b2lkIDAmJihSPW5ldyBoZ3IoZSxMLEksbyksYy5wdXNoKFIpKSxSfWZ1bmN0aW9uIE8oSSl7aWYoLS1JLnVzZWRUaW1lcz09PTApe2xldCBMPWMuaW5kZXhPZihJKTtjW0xdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxJLmRlc3Ryb3koKX19ZnVuY3Rpb24gRChJKXtsLnJlbW92ZShJKX1mdW5jdGlvbiBCKCl7bC5kaXNwb3NlKCl9cmV0dXJue2dldFBhcmFtZXRlcnM6eCxnZXRQcm9ncmFtQ2FjaGVLZXk6YixnZXRVbmlmb3JtczpQLGFjcXVpcmVQcm9ncmFtOmsscmVsZWFzZVByb2dyYW06TyxyZWxlYXNlU2hhZGVyQ2FjaGU6RCxwcm9ncmFtczpjLGRpc3Bvc2U6Qn19ZnVuY3Rpb24gZGdyKCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdChvKXtsZXQgYT1lLmdldChvKTtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30sZS5zZXQobyxhKSksYX1mdW5jdGlvbiByKG8pe2UuZGVsZXRlKG8pfWZ1bmN0aW9uIG4obyxhLHMpe2UuZ2V0KG8pW2FdPXN9ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LHJlbW92ZTpyLHVwZGF0ZTpuLGRpc3Bvc2U6aX19ZnVuY3Rpb24gbWdyKGUsdCl7cmV0dXJuIGUuZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9lLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOmUucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP2UucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjplLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9lLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6ZS56IT09dC56P2Uuei10Lno6ZS5pZC10LmlkfWZ1bmN0aW9uIEd1ZShlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS56IT09dC56P3Quei1lLno6ZS5pZC10LmlkfWZ1bmN0aW9uIFd1ZSgpe2xldCBlPVtdLHQ9MCxyPVtdLG49W10saT1bXTtmdW5jdGlvbiBvKCl7dD0wLHIubGVuZ3RoPTAsbi5sZW5ndGg9MCxpLmxlbmd0aD0wfWZ1bmN0aW9uIGEoaCxmLHAsZCxnLF8pe2xldCB5PWVbdF07cmV0dXJuIHk9PT12b2lkIDA/KHk9e2lkOmguaWQsb2JqZWN0OmgsZ2VvbWV0cnk6ZixtYXRlcmlhbDpwLGdyb3VwT3JkZXI6ZCxyZW5kZXJPcmRlcjpoLnJlbmRlck9yZGVyLHo6Zyxncm91cDpffSxlW3RdPXkpOih5LmlkPWguaWQseS5vYmplY3Q9aCx5Lmdlb21ldHJ5PWYseS5tYXRlcmlhbD1wLHkuZ3JvdXBPcmRlcj1kLHkucmVuZGVyT3JkZXI9aC5yZW5kZXJPcmRlcix5Lno9Zyx5Lmdyb3VwPV8pLHQrKyx5fWZ1bmN0aW9uIHMoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi5wdXNoKHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnB1c2goeSk6ci5wdXNoKHkpfWZ1bmN0aW9uIGwoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi51bnNoaWZ0KHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnVuc2hpZnQoeSk6ci51bnNoaWZ0KHkpfWZ1bmN0aW9uIGMoaCxmKXtyLmxlbmd0aD4xJiZyLnNvcnQoaHx8bWdyKSxuLmxlbmd0aD4xJiZuLnNvcnQoZnx8R3VlKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8R3VlKX1mdW5jdGlvbiB1KCl7Zm9yKGxldCBoPXQsZj1lLmxlbmd0aDtoPGY7aCsrKXtsZXQgcD1lW2hdO2lmKHAuaWQ9PT1udWxsKWJyZWFrO3AuaWQ9bnVsbCxwLm9iamVjdD1udWxsLHAuZ2VvbWV0cnk9bnVsbCxwLm1hdGVyaWFsPW51bGwscC5ncm91cD1udWxsfX1yZXR1cm57b3BhcXVlOnIsdHJhbnNtaXNzaXZlOm4sdHJhbnNwYXJlbnQ6aSxpbml0Om8scHVzaDpzLHVuc2hpZnQ6bCxmaW5pc2g6dSxzb3J0OmN9fWZ1bmN0aW9uIGdncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobixpKXtsZXQgbztyZXR1cm4gZS5oYXMobik9PT0hMT8obz1uZXcgV3VlLGUuc2V0KG4sW29dKSk6aT49ZS5nZXQobikubGVuZ3RoPyhvPW5ldyBXdWUsZS5nZXQobikucHVzaChvKSk6bz1lLmdldChuKVtpXSxvfWZ1bmN0aW9uIHIoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxkaXNwb3NlOnJ9fWZ1bmN0aW9uIF9ncigpe2xldCBlPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoZVt0LmlkXSE9PXZvaWQgMClyZXR1cm4gZVt0LmlkXTtsZXQgcjtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixjb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixjb2xvcjpuZXcgbmUsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj17ZGlyZWN0aW9uOm5ldyBqLHNreUNvbG9yOm5ldyBuZSxncm91bmRDb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6cj17Y29sb3I6bmV3IG5lLHBvc2l0aW9uOm5ldyBqLGhhbGZXaWR0aDpuZXcgaixoYWxmSGVpZ2h0Om5ldyBqfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX1mdW5jdGlvbiB5Z3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0fTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX12YXIgdmdyPTA7ZnVuY3Rpb24geGdyKGUsdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShlLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBiZ3IoZSx0KXtsZXQgcj1uZXcgX2dyLG49eWdyKCksaT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKWkucHJvYmUucHVzaChuZXcgaik7bGV0IG89bmV3IGosYT1uZXcgTWUscz1uZXcgTWU7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAscD0wLGQ9MDtmb3IobGV0IEQ9MDtEPDk7RCsrKWkucHJvYmVbRF0uc2V0KDAsMCwwKTtsZXQgZz0wLF89MCx5PTAseD0wLGI9MCxTPTAsQz0wLFA9MDt1LnNvcnQoeGdyKTtsZXQgaz1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgRD0wLEI9dS5sZW5ndGg7RDxCO0QrKyl7bGV0IEk9dVtEXSxMPUkuY29sb3IsUj1JLmludGVuc2l0eSxGPUkuZGlzdGFuY2Usej1JLnNoYWRvdyYmSS5zaGFkb3cubWFwP0kuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoSS5pc0FtYmllbnRMaWdodClmKz1MLnIqUiprLHArPUwuZypSKmssZCs9TC5iKlIqaztlbHNlIGlmKEkuaXNMaWdodFByb2JlKWZvcihsZXQgVT0wO1U8OTtVKyspaS5wcm9iZVtVXS5hZGRTY2FsZWRWZWN0b3IoSS5zaC5jb2VmZmljaWVudHNbVV0sUik7ZWxzZSBpZihJLmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KmspLEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxpLmRpcmVjdGlvbmFsU2hhZG93W2ddPVosaS5kaXJlY3Rpb25hbFNoYWRvd01hcFtnXT16LGkuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZ109SS5zaGFkb3cubWF0cml4LFMrK31pLmRpcmVjdGlvbmFsW2ddPVUsZysrfWVsc2UgaWYoSS5pc1Nwb3RMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksVS5jb2xvci5jb3B5KEwpLm11bHRpcGx5U2NhbGFyKFIqayksVS5kaXN0YW5jZT1GLFUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxVLnBlbnVtYnJhQ29zPU1hdGguY29zKEkuYW5nbGUqKDEtSS5wZW51bWJyYSkpLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5zcG90U2hhZG93W3ldPVosaS5zcG90U2hhZG93TWFwW3ldPXosaS5zcG90U2hhZG93TWF0cml4W3ldPUkuc2hhZG93Lm1hdHJpeCxQKyt9aS5zcG90W3ldPVUseSsrfWVsc2UgaWYoSS5pc1JlY3RBcmVhTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1UuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKSxVLmhhbGZXaWR0aC5zZXQoSS53aWR0aCouNSwwLDApLFUuaGFsZkhlaWdodC5zZXQoMCxJLmhlaWdodCouNSwwKSxpLnJlY3RBcmVhW3hdPVUseCsrfWVsc2UgaWYoSS5pc1BvaW50TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxVLmRpc3RhbmNlPUkuZGlzdGFuY2UsVS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxaLnNoYWRvd0NhbWVyYU5lYXI9Vy5jYW1lcmEubmVhcixaLnNoYWRvd0NhbWVyYUZhcj1XLmNhbWVyYS5mYXIsaS5wb2ludFNoYWRvd1tfXT1aLGkucG9pbnRTaGFkb3dNYXBbX109eixpLnBvaW50U2hhZG93TWF0cml4W19dPUkuc2hhZG93Lm1hdHJpeCxDKyt9aS5wb2ludFtfXT1VLF8rK31lbHNlIGlmKEkuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1Uuc2t5Q29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLGkuaGVtaVtiXT1VLGIrK319eD4wJiYodC5pc1dlYkdMMnx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITA/KGkucmVjdEFyZWFMVEMxPXJlLkxUQ19GTE9BVF8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19GTE9BVF8yKTplLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfSEFMRl8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxpLmFtYmllbnRbMF09ZixpLmFtYmllbnRbMV09cCxpLmFtYmllbnRbMl09ZDtsZXQgTz1pLmhhc2g7KE8uZGlyZWN0aW9uYWxMZW5ndGghPT1nfHxPLnBvaW50TGVuZ3RoIT09X3x8Ty5zcG90TGVuZ3RoIT09eXx8Ty5yZWN0QXJlYUxlbmd0aCE9PXh8fE8uaGVtaUxlbmd0aCE9PWJ8fE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09U3x8Ty5udW1Qb2ludFNoYWRvd3MhPT1DfHxPLm51bVNwb3RTaGFkb3dzIT09UCkmJihpLmRpcmVjdGlvbmFsLmxlbmd0aD1nLGkuc3BvdC5sZW5ndGg9eSxpLnJlY3RBcmVhLmxlbmd0aD14LGkucG9pbnQubGVuZ3RoPV8saS5oZW1pLmxlbmd0aD1iLGkuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPVMsaS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9UyxpLnBvaW50U2hhZG93Lmxlbmd0aD1DLGkucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUMsaS5zcG90U2hhZG93Lmxlbmd0aD1QLGkuc3BvdFNoYWRvd01hcC5sZW5ndGg9UCxpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1TLGkucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUMsaS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1QLE8uZGlyZWN0aW9uYWxMZW5ndGg9ZyxPLnBvaW50TGVuZ3RoPV8sTy5zcG90TGVuZ3RoPXksTy5yZWN0QXJlYUxlbmd0aD14LE8uaGVtaUxlbmd0aD1iLE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPVMsTy5udW1Qb2ludFNoYWRvd3M9QyxPLm51bVNwb3RTaGFkb3dzPVAsaS52ZXJzaW9uPXZncisrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxwPTAsZD0wLGc9MCxfPTAseT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxiPXUubGVuZ3RoO3g8Yjt4Kyspe2xldCBTPXVbeF07aWYoUy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBDPWkuZGlyZWN0aW9uYWxbZl07Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGYrK31lbHNlIGlmKFMuaXNTcG90TGlnaHQpe2xldCBDPWkuc3BvdFtkXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy50YXJnZXQubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnN1YihvKSxDLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksZCsrfWVsc2UgaWYoUy5pc1JlY3RBcmVhTGlnaHQpe2xldCBDPWkucmVjdEFyZWFbZ107Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSkscy5pZGVudGl0eSgpLGEuY29weShTLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHkpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEMuaGFsZldpZHRoLnNldChTLndpZHRoKi41LDAsMCksQy5oYWxmSGVpZ2h0LnNldCgwLFMuaGVpZ2h0Ki41LDApLEMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxDLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLGcrK31lbHNlIGlmKFMuaXNQb2ludExpZ2h0KXtsZXQgQz1pLnBvaW50W3BdO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHArK31lbHNlIGlmKFMuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBDPWkuaGVtaVtfXTtDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLEMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLF8rK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOml9fWZ1bmN0aW9uIFl1ZShlLHQpe2xldCByPW5ldyBiZ3IoZSx0KSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe24ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgpe24ucHVzaChoKX1mdW5jdGlvbiBzKGgpe2kucHVzaChoKX1mdW5jdGlvbiBsKGgpe3Iuc2V0dXAobixoKX1mdW5jdGlvbiBjKGgpe3Iuc2V0dXBWaWV3KG4saCl9cmV0dXJue2luaXQ6byxzdGF0ZTp7bGlnaHRzQXJyYXk6bixzaGFkb3dzQXJyYXk6aSxsaWdodHM6cn0sc2V0dXBMaWdodHM6bCxzZXR1cExpZ2h0c1ZpZXc6YyxwdXNoTGlnaHQ6YSxwdXNoU2hhZG93OnN9fWZ1bmN0aW9uIHdncihlLHQpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4obyxhPTApe2xldCBzO3JldHVybiByLmhhcyhvKT09PSExPyhzPW5ldyBZdWUoZSx0KSxyLnNldChvLFtzXSkpOmE+PXIuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgWXVlKGUsdCksci5nZXQobykucHVzaChzKSk6cz1yLmdldChvKVthXSxzfWZ1bmN0aW9uIGkoKXtyPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOml9fXZhciBlTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9UGZlLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2VNLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciByTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgaix0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3JNLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTZ3I9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxNZ3I9YHVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzOwp1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CiNpbmNsdWRlIDxwYWNraW5nPgp2b2lkIG1haW4oKSB7Cgljb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7CglmbG9hdCBtZWFuID0gMC4wOwoJZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wOwoJZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApOwoJZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7Cglmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHsKCQlmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7CgkJI2lmZGVmIEhPUklaT05UQUxfUEFTUwoJCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGlzdHJpYnV0aW9uLng7CgkJCXNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDsKCQkjZWxzZQoJCQlmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGVwdGg7CgkJCXNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoOwoJCSNlbmRpZgoJfQoJbWVhbiA9IG1lYW4gLyBzYW1wbGVzOwoJc3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlczsKCWZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApOwoJZ2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTsKfWA7ZnVuY3Rpb24gWGZlKGUsdCxyKXtsZXQgbj1uZXcgTjEsaT1uZXcgTHQsbz1uZXcgTHQsYT1uZXcgZW4scz1uZXcgZU0oe2RlcHRoUGFja2luZzpJZmV9KSxsPW5ldyByTSxjPXt9LHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXswOklpLDE6STEsMjpMMX0sZj1uZXcgbGgoe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEx0fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6U2dyLGZyYWdtZW50U2hhZGVyOk1ncn0pLHA9Zi5jbG9uZSgpO3AuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZD1uZXcgUGU7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCBnPW5ldyB0aShkLGYpLF89dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPUNodCx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEMsUCl7aWYoXy5lbmFibGVkPT09ITF8fF8uYXV0b1VwZGF0ZT09PSExJiZfLm5lZWRzVXBkYXRlPT09ITF8fFMubGVuZ3RoPT09MClyZXR1cm47bGV0IGs9ZS5nZXRSZW5kZXJUYXJnZXQoKSxPPWUuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxEPWUuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxCPWUuc3RhdGU7Qi5zZXRCbGVuZGluZygkZCksQi5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLEIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxCLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEk9MCxMPVMubGVuZ3RoO0k8TDtJKyspe2xldCBSPVNbSV0sRj1SLnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsUiwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO2kuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoaS5tdWx0aXBseSh6KSxvLmNvcHkoRi5tYXBTaXplKSwoaS54PnV8fGkueT51KSYmKGkueD51JiYoby54PU1hdGguZmxvb3IodS96LngpLGkueD1vLngqei54LEYubWFwU2l6ZS54PW8ueCksaS55PnUmJihvLnk9TWF0aC5mbG9vcih1L3oueSksaS55PW8ueSp6LnksRi5tYXBTaXplLnk9by55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUYzKXtsZXQgVz17bWluRmlsdGVyOmlpLG1hZ0ZpbHRlcjppaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgdXMoaS54LGkueSxXKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVz17bWluRmlsdGVyOkxpLG1hZ0ZpbHRlcjpMaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1lLnNldFJlbmRlclRhcmdldChGLm1hcCksZS5jbGVhcigpO2xldCBVPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVz0wO1c8VTtXKyspe2xldCBaPUYuZ2V0Vmlld3BvcnQoVyk7YS5zZXQoby54KloueCxvLnkqWi55LG8ueCpaLnosby55KloudyksQi52aWV3cG9ydChhKSxGLnVwZGF0ZU1hdHJpY2VzKFIsVyksbj1GLmdldEZydXN0dW0oKSxiKEMsUCxGLmNhbWVyYSxSLHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyYmeShGLFApLEYubmVlZHNVcGRhdGU9ITF9Xy5uZWVkc1VwZGF0ZT0hMSxlLnNldFJlbmRlclRhcmdldChrLE8sRCl9O2Z1bmN0aW9uIHkoUyxDKXtsZXQgUD10LnVwZGF0ZShnKTtmLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1TLmJsdXJTYW1wbGVzJiYoZi5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMscC5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMsZi5uZWVkc1VwZGF0ZT0hMCxwLm5lZWRzVXBkYXRlPSEwKSxmLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVMubWFwLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcFBhc3MpLGUuY2xlYXIoKSxlLnJlbmRlckJ1ZmZlckRpcmVjdChDLG51bGwsUCxmLGcsbnVsbCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcFBhc3MudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Uy5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVMucmFkaXVzLGUuc2V0UmVuZGVyVGFyZ2V0KFMubWFwKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAscCxnLG51bGwpfWZ1bmN0aW9uIHgoUyxDLFAsayxPLEQsQil7bGV0IEk9bnVsbCxMPWsuaXNQb2ludExpZ2h0PT09ITA/Uy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOlMuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihMIT09dm9pZCAwP0k9TDpJPWsuaXNQb2ludExpZ2h0PT09ITA/bDpzLGUubG9jYWxDbGlwcGluZ0VuYWJsZWQmJlAuY2xpcFNoYWRvd3M9PT0hMCYmUC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxQLmRpc3BsYWNlbWVudE1hcCYmUC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fFAuYWxwaGFNYXAmJlAuYWxwaGFUZXN0PjApe2xldCBSPUkudXVpZCxGPVAudXVpZCx6PWNbUl07ej09PXZvaWQgMCYmKHo9e30sY1tSXT16KTtsZXQgVT16W0ZdO1U9PT12b2lkIDAmJihVPUkuY2xvbmUoKSx6W0ZdPVUpLEk9VX1yZXR1cm4gSS52aXNpYmxlPVAudmlzaWJsZSxJLndpcmVmcmFtZT1QLndpcmVmcmFtZSxCPT09RjM/SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOlAuc2lkZTpJLnNpZGU9UC5zaGFkb3dTaWRlIT09bnVsbD9QLnNoYWRvd1NpZGU6aFtQLnNpZGVdLEkuYWxwaGFNYXA9UC5hbHBoYU1hcCxJLmFscGhhVGVzdD1QLmFscGhhVGVzdCxJLmNsaXBTaGFkb3dzPVAuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz1QLmNsaXBwaW5nUGxhbmVzLEkuY2xpcEludGVyc2VjdGlvbj1QLmNsaXBJbnRlcnNlY3Rpb24sSS5kaXNwbGFjZW1lbnRNYXA9UC5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT1QLmRpc3BsYWNlbWVudFNjYWxlLEkuZGlzcGxhY2VtZW50Qmlhcz1QLmRpc3BsYWNlbWVudEJpYXMsSS53aXJlZnJhbWVMaW5ld2lkdGg9UC53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9UC5saW5ld2lkdGgsay5pc1BvaW50TGlnaHQ9PT0hMCYmSS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJihJLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihrLm1hdHJpeFdvcmxkKSxJLm5lYXJEaXN0YW5jZT1PLEkuZmFyRGlzdGFuY2U9RCksSX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7aWYoUy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoQy5sYXllcnMpJiYoUy5pc01lc2h8fFMuaXNMaW5lfHxTLmlzUG9pbnRzKSYmKFMuY2FzdFNoYWRvd3x8Uy5yZWNlaXZlU2hhZG93JiZPPT09RjMpJiYoIVMuZnJ1c3R1bUN1bGxlZHx8bi5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7Uy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhQLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKTtsZXQgST10LnVwZGF0ZShTKSxMPVMubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMKSl7bGV0IFI9SS5ncm91cHM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1SW0ZdLFc9TFtVLm1hdGVyaWFsSW5kZXhdO2lmKFcmJlcudmlzaWJsZSl7bGV0IFo9eChTLEksVyxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxaLFMsVSl9fX1lbHNlIGlmKEwudmlzaWJsZSl7bGV0IFI9eChTLEksTCxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxSLFMsbnVsbCl9fWxldCBCPVMuY2hpbGRyZW47Zm9yKGxldCBJPTAsTD1CLmxlbmd0aDtJPEw7SSsrKWIoQltJXSxDLFAsayxPKX19ZnVuY3Rpb24gRWdyKGUsdCxyKXtsZXQgbj1yLmlzV2ViR0wyO2Z1bmN0aW9uIGkoKXtsZXQgYXQ9ITEsc2U9bmV3IGVuLFF0PW51bGwsQ2U9bmV3IGVuKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFB0KXtRdCE9PVB0JiYhYXQmJihlLmNvbG9yTWFzayhQdCxQdCxQdCxQdCksUXQ9UHQpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCxOdCx6ZSx5bixXaSl7V2k9PT0hMCYmKFB0Kj15bixOdCo9eW4semUqPXluKSxzZS5zZXQoUHQsTnQsemUseW4pLENlLmVxdWFscyhzZSk9PT0hMSYmKGUuY2xlYXJDb2xvcihQdCxOdCx6ZSx5biksQ2UuY29weShzZSkpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLFF0PW51bGwsQ2Uuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIG8oKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oUHQpe1B0P2x0KDI5MjkpOkt0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFB0KXtzZSE9PVB0JiYhYXQmJihlLmRlcHRoTWFzayhQdCksc2U9UHQpfSxzZXRGdW5jOmZ1bmN0aW9uKFB0KXtpZihRdCE9PVB0KXtpZihQdClzd2l0Y2goUHQpe2Nhc2UgWmhlOmUuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSBKaGU6ZS5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIFFoZTplLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgaVU6ZS5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHRmZTplLmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIG5mZTplLmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6ZS5kZXB0aEZ1bmMoNTE1KX1lbHNlIGUuZGVwdGhGdW5jKDUxNSk7UXQ9UHR9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCl7Q2UhPT1QdCYmKGUuY2xlYXJEZXB0aChQdCksQ2U9UHQpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsfX19ZnVuY3Rpb24gYSgpe2xldCBhdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oQXIpe2F0fHwoQXI/bHQoMjk2MCk6S3QoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKEFyKXtzZSE9PUFyJiYhYXQmJihlLnN0ZW5jaWxNYXNrKEFyKSxzZT1Bcil9LHNldEZ1bmM6ZnVuY3Rpb24oQXIsUGEsaG8peyhRdCE9PUFyfHxDZSE9PVBhfHxQdCE9PWhvKSYmKGUuc3RlbmNpbEZ1bmMoQXIsUGEsaG8pLFF0PUFyLENlPVBhLFB0PWhvKX0sc2V0T3A6ZnVuY3Rpb24oQXIsUGEsaG8peyhOdCE9PUFyfHx6ZSE9PVBhfHx5biE9PWhvKSYmKGUuc3RlbmNpbE9wKEFyLFBhLGhvKSxOdD1Bcix6ZT1QYSx5bj1obyl9LHNldExvY2tlZDpmdW5jdGlvbihBcil7YXQ9QXJ9LHNldENsZWFyOmZ1bmN0aW9uKEFyKXtXaSE9PUFyJiYoZS5jbGVhclN0ZW5jaWwoQXIpLFdpPUFyKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGx9fX1sZXQgcz1uZXcgaSxsPW5ldyBvLGM9bmV3IGEsdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLFI9ZS5nZXRQYXJhbWV0ZXIoMzU2NjEpLEY9ITEsej0wLFU9ZS5nZXRQYXJhbWV0ZXIoNzkzOCk7VS5pbmRleE9mKCJXZWJHTCIpIT09LTE/KHo9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49MSk6VS5pbmRleE9mKCJPcGVuR0wgRVMiKSE9PS0xJiYoej1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49Mik7bGV0IFc9bnVsbCxaPXt9LHJ0PWUuZ2V0UGFyYW1ldGVyKDMwODgpLG90PWUuZ2V0UGFyYW1ldGVyKDI5NzgpLHN0PW5ldyBlbigpLmZyb21BcnJheShydCksU3Q9bmV3IGVuKCkuZnJvbUFycmF5KG90KTtmdW5jdGlvbiBidChhdCxzZSxRdCl7bGV0IENlPW5ldyBVaW50OEFycmF5KDQpLFB0PWUuY3JlYXRlVGV4dHVyZSgpO2UuYmluZFRleHR1cmUoYXQsUHQpLGUudGV4UGFyYW1ldGVyaShhdCwxMDI0MSw5NzI4KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDAsOTcyOCk7Zm9yKGxldCBOdD0wO050PFF0O050KyspZS50ZXhJbWFnZTJEKHNlK050LDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsQ2UpO3JldHVybiBQdH1sZXQgTXQ9e307TXRbMzU1M109YnQoMzU1MywzNTUzLDEpLE10WzM0MDY3XT1idCgzNDA2NywzNDA2OSw2KSxzLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxsdCgyOTI5KSxsLnNldEZ1bmMoaVUpLGh0KCExKSx3dChTdXQpLGx0KDI4ODQpLHEoJGQpO2Z1bmN0aW9uIGx0KGF0KXt1W2F0XSE9PSEwJiYoZS5lbmFibGUoYXQpLHVbYXRdPSEwKX1mdW5jdGlvbiBLdChhdCl7dVthdF0hPT0hMSYmKGUuZGlzYWJsZShhdCksdVthdF09ITEpfWZ1bmN0aW9uIF90KGF0LHNlKXtyZXR1cm4gaFthdF0hPT1zZT8oZS5iaW5kRnJhbWVidWZmZXIoYXQsc2UpLGhbYXRdPXNlLG4mJihhdD09PTM2MDA5JiYoaFszNjE2MF09c2UpLGF0PT09MzYxNjAmJihoWzM2MDA5XT1zZSkpLCEwKTohMX1mdW5jdGlvbiBjdChhdCxzZSl7bGV0IFF0PXAsQ2U9ITE7aWYoYXQpaWYoUXQ9Zi5nZXQoc2UpLFF0PT09dm9pZCAwJiYoUXQ9W10sZi5zZXQoc2UsUXQpKSxhdC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgUHQ9YXQudGV4dHVyZTtpZihRdC5sZW5ndGghPT1QdC5sZW5ndGh8fFF0WzBdIT09MzYwNjQpe2ZvcihsZXQgTnQ9MCx6ZT1QdC5sZW5ndGg7TnQ8emU7TnQrKylRdFtOdF09MzYwNjQrTnQ7UXQubGVuZ3RoPVB0Lmxlbmd0aCxDZT0hMH19ZWxzZSBRdFswXSE9PTM2MDY0JiYoUXRbMF09MzYwNjQsQ2U9ITApO2Vsc2UgUXRbMF0hPT0xMDI5JiYoUXRbMF09MTAyOSxDZT0hMCk7Q2UmJihyLmlzV2ViR0wyP2UuZHJhd0J1ZmZlcnMoUXQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKFF0KSl9ZnVuY3Rpb24gWChhdCl7cmV0dXJuIGQhPT1hdD8oZS51c2VQcm9ncmFtKGF0KSxkPWF0LCEwKTohMX1sZXQgZXQ9e1tNMV06MzI3NzQsW0hoZV06MzI3NzgsW1ZoZV06MzI3Nzl9O2lmKG4pZXRbQ3V0XT0zMjc3NSxldFtBdXRdPTMyNzc2O2Vsc2V7bGV0IGF0PXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7YXQhPT1udWxsJiYoZXRbQ3V0XT1hdC5NSU5fRVhULGV0W0F1dF09YXQuTUFYX0VYVCl9bGV0IGR0PXtbVWhlXTowLFtxaGVdOjEsW0doZV06NzY4LFtQaHRdOjc3MCxbS2hlXTo3NzYsW1hoZV06Nzc0LFtZaGVdOjc3MixbV2hlXTo3NjksW0lodF06NzcxLFskaGVdOjc3NSxbamhlXTo3NzN9O2Z1bmN0aW9uIHEoYXQsc2UsUXQsQ2UsUHQsTnQsemUseW4pe2lmKGF0PT09JGQpe2c9PT0hMCYmKEt0KDMwNDIpLGc9ITEpO3JldHVybn1pZihnPT09ITEmJihsdCgzMDQyKSxnPSEwKSxhdCE9PUJoZSl7aWYoYXQhPT1ffHx5biE9PWspe2lmKCh5IT09TTF8fFMhPT1NMSkmJihlLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9TTEsUz1NMSkseW4pc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgTXV0OmUuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhdCk7YnJlYWt9ZWxzZSBzd2l0Y2goYXQpe2Nhc2UgVjM6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfXg9bnVsbCxiPW51bGwsQz1udWxsLFA9bnVsbCxfPWF0LGs9eW59cmV0dXJufVB0PVB0fHxzZSxOdD1OdHx8UXQsemU9emV8fENlLChzZSE9PXl8fFB0IT09UykmJihlLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShldFtzZV0sZXRbUHRdKSx5PXNlLFM9UHQpLChRdCE9PXh8fENlIT09Ynx8TnQhPT1DfHx6ZSE9PVApJiYoZS5ibGVuZEZ1bmNTZXBhcmF0ZShkdFtRdF0sZHRbQ2VdLGR0W050XSxkdFt6ZV0pLHg9UXQsYj1DZSxDPU50LFA9emUpLF89YXQsaz1udWxsfWZ1bmN0aW9uIHB0KGF0LHNlKXthdC5zaWRlPT09TDE/S3QoMjg4NCk6bHQoMjg4NCk7bGV0IFF0PWF0LnNpZGU9PT1JaTtzZSYmKFF0PSFRdCksaHQoUXQpLGF0LmJsZW5kaW5nPT09VjMmJmF0LnRyYW5zcGFyZW50PT09ITE/cSgkZCk6cShhdC5ibGVuZGluZyxhdC5ibGVuZEVxdWF0aW9uLGF0LmJsZW5kU3JjLGF0LmJsZW5kRHN0LGF0LmJsZW5kRXF1YXRpb25BbHBoYSxhdC5ibGVuZFNyY0FscGhhLGF0LmJsZW5kRHN0QWxwaGEsYXQucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoYXQuZGVwdGhGdW5jKSxsLnNldFRlc3QoYXQuZGVwdGhUZXN0KSxsLnNldE1hc2soYXQuZGVwdGhXcml0ZSkscy5zZXRNYXNrKGF0LmNvbG9yV3JpdGUpO2xldCBDZT1hdC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KENlKSxDZSYmKGMuc2V0TWFzayhhdC5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoYXQuc3RlbmNpbEZ1bmMsYXQuc3RlbmNpbFJlZixhdC5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoYXQuc3RlbmNpbEZhaWwsYXQuc3RlbmNpbFpGYWlsLGF0LnN0ZW5jaWxaUGFzcykpLGllKGF0LnBvbHlnb25PZmZzZXQsYXQucG9seWdvbk9mZnNldEZhY3RvcixhdC5wb2x5Z29uT2Zmc2V0VW5pdHMpLGF0LmFscGhhVG9Db3ZlcmFnZT09PSEwP2x0KDMyOTI2KTpLdCgzMjkyNil9ZnVuY3Rpb24gaHQoYXQpe08hPT1hdCYmKGF0P2UuZnJvbnRGYWNlKDIzMDQpOmUuZnJvbnRGYWNlKDIzMDUpLE89YXQpfWZ1bmN0aW9uIHd0KGF0KXthdCE9PU9oZT8obHQoMjg4NCksYXQhPT1EJiYoYXQ9PT1TdXQ/ZS5jdWxsRmFjZSgxMDI5KTphdD09PXpoZT9lLmN1bGxGYWNlKDEwMjgpOmUuY3VsbEZhY2UoMTAzMikpKTpLdCgyODg0KSxEPWF0fWZ1bmN0aW9uIGt0KGF0KXthdCE9PUImJihGJiZlLmxpbmVXaWR0aChhdCksQj1hdCl9ZnVuY3Rpb24gaWUoYXQsc2UsUXQpe2F0PyhsdCgzMjgyMyksKEkhPT1zZXx8TCE9PVF0KSYmKGUucG9seWdvbk9mZnNldChzZSxRdCksST1zZSxMPVF0KSk6S3QoMzI4MjMpfWZ1bmN0aW9uIGVlKGF0KXthdD9sdCgzMDg5KTpLdCgzMDg5KX1mdW5jdGlvbiBMZShhdCl7YXQ9PT12b2lkIDAmJihhdD0zMzk4NCtSLTEpLFchPT1hdCYmKGUuYWN0aXZlVGV4dHVyZShhdCksVz1hdCl9ZnVuY3Rpb24gYXIoYXQsc2Upe1c9PT1udWxsJiZMZSgpO2xldCBRdD1aW1ddO1F0PT09dm9pZCAwJiYoUXQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxaW1ddPVF0KSwoUXQudHlwZSE9PWF0fHxRdC50ZXh0dXJlIT09c2UpJiYoZS5iaW5kVGV4dHVyZShhdCxzZXx8TXRbYXRdKSxRdC50eXBlPWF0LFF0LnRleHR1cmU9c2UpfWZ1bmN0aW9uIGZyKCl7bGV0IGF0PVpbV107YXQhPT12b2lkIDAmJmF0LnR5cGUhPT12b2lkIDAmJihlLmJpbmRUZXh0dXJlKGF0LnR5cGUsbnVsbCksYXQudHlwZT12b2lkIDAsYXQudGV4dHVyZT12b2lkIDApfWZ1bmN0aW9uIHR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkKCl7dHJ5e2UudGV4U3ViSW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEl0KCl7dHJ5e2UudGV4U3ViSW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uICR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBoZSgpe3RyeXtlLnRleFN0b3JhZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIFR0KCl7dHJ5e2UudGV4U3RvcmFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gYmUoKXt0cnl7ZS50ZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gbnQoKXt0cnl7ZS50ZXhJbWFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gQ3QoYXQpe3N0LmVxdWFscyhhdCk9PT0hMSYmKGUuc2Npc3NvcihhdC54LGF0LnksYXQueixhdC53KSxzdC5jb3B5KGF0KSl9ZnVuY3Rpb24gV3QoYXQpe1N0LmVxdWFscyhhdCk9PT0hMSYmKGUudmlld3BvcnQoYXQueCxhdC55LGF0LnosYXQudyksU3QuY29weShhdCkpfWZ1bmN0aW9uIGZlKCl7ZS5kaXNhYmxlKDMwNDIpLGUuZGlzYWJsZSgyODg0KSxlLmRpc2FibGUoMjkyOSksZS5kaXNhYmxlKDMyODIzKSxlLmRpc2FibGUoMzA4OSksZS5kaXNhYmxlKDI5NjApLGUuZGlzYWJsZSgzMjkyNiksZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSxlLmJsZW5kRnVuYygxLDApLGUuYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksZS5jb2xvck1hc2soITAsITAsITAsITApLGUuY2xlYXJDb2xvcigwLDAsMCwwKSxlLmRlcHRoTWFzayghMCksZS5kZXB0aEZ1bmMoNTEzKSxlLmNsZWFyRGVwdGgoMSksZS5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLGUuc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxlLmNsZWFyU3RlbmNpbCgwKSxlLmN1bGxGYWNlKDEwMjkpLGUuZnJvbnRGYWNlKDIzMDUpLGUucG9seWdvbk9mZnNldCgwLDApLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbj09PSEwJiYoZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLGUudXNlUHJvZ3JhbShudWxsKSxlLmxpbmVXaWR0aCgxKSxlLnNjaXNzb3IoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS52aWV3cG9ydCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSx1PXt9LFc9bnVsbCxaPXt9LGg9e30sZj1uZXcgV2Vha01hcCxwPVtdLGQ9bnVsbCxnPSExLF89bnVsbCx5PW51bGwseD1udWxsLGI9bnVsbCxTPW51bGwsQz1udWxsLFA9bnVsbCxrPSExLE89bnVsbCxEPW51bGwsQj1udWxsLEk9bnVsbCxMPW51bGwsc3Quc2V0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLFN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmx0LGRpc2FibGU6S3QsYmluZEZyYW1lYnVmZmVyOl90LGRyYXdCdWZmZXJzOmN0LHVzZVByb2dyYW06WCxzZXRCbGVuZGluZzpxLHNldE1hdGVyaWFsOnB0LHNldEZsaXBTaWRlZDpodCxzZXRDdWxsRmFjZTp3dCxzZXRMaW5lV2lkdGg6a3Qsc2V0UG9seWdvbk9mZnNldDppZSxzZXRTY2lzc29yVGVzdDplZSxhY3RpdmVUZXh0dXJlOkxlLGJpbmRUZXh0dXJlOmFyLHVuYmluZFRleHR1cmU6ZnIsY29tcHJlc3NlZFRleEltYWdlMkQ6dHQsdGV4SW1hZ2UyRDpiZSx0ZXhJbWFnZTNEOm50LHRleFN0b3JhZ2UyRDpoZSx0ZXhTdG9yYWdlM0Q6VHQsdGV4U3ViSW1hZ2UyRDokLHRleFN1YkltYWdlM0Q6SXQsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6JHQsc2Npc3NvcjpDdCx2aWV3cG9ydDpXdCxyZXNldDpmZX19ZnVuY3Rpb24gVGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSx1PWkubWF4VGV4dHVyZVNpemUsaD1pLm1heFNhbXBsZXMscD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxkPW5ldyBXZWFrTWFwLGcsXz0hMTt0cnl7Xz10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIT0idW5kZWZpbmVkIiYmbmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikhPT1udWxsfWNhdGNoKHR0KXt9ZnVuY3Rpb24geSh0dCwkKXtyZXR1cm4gXz9uZXcgT2Zmc2NyZWVuQ2FudmFzKHR0LCQpOnQ2KCJjYW52YXMiKX1mdW5jdGlvbiB4KHR0LCQsSXQsJHQpe2xldCBoZT0xO2lmKCh0dC53aWR0aD4kdHx8dHQuaGVpZ2h0PiR0KSYmKGhlPSR0L01hdGgubWF4KHR0LndpZHRoLHR0LmhlaWdodCkpLGhlPDF8fCQ9PT0hMClpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IFR0PSQ/TmZlOk1hdGguZmxvb3IsYmU9VHQoaGUqdHQud2lkdGgpLG50PVR0KGhlKnR0LmhlaWdodCk7Zz09PXZvaWQgMCYmKGc9eShiZSxudCkpO2xldCBDdD1JdD95KGJlLG50KTpnO3JldHVybiBDdC53aWR0aD1iZSxDdC5oZWlnaHQ9bnQsQ3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodHQsMCwwLGJlLG50KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3R0LndpZHRoKyJ4Iit0dC5oZWlnaHQrIikgdG8gKCIrYmUrIngiK250KyIpLiIpLEN0fWVsc2UgcmV0dXJuImRhdGEiaW4gdHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpLiIpLHR0O3JldHVybiB0dH1mdW5jdGlvbiBiKHR0KXtyZXR1cm4gWnV0KHR0LndpZHRoKSYmWnV0KHR0LmhlaWdodCl9ZnVuY3Rpb24gUyh0dCl7cmV0dXJuIHM/ITE6dHQud3JhcFMhPT1Kb3x8dHQud3JhcFQhPT1Kb3x8dHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIEModHQsJCl7cmV0dXJuIHR0LmdlbmVyYXRlTWlwbWFwcyYmJCYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIFAodHQpe2UuZ2VuZXJhdGVNaXBtYXAodHQpfWZ1bmN0aW9uIGsodHQsJCxJdCwkdCxoZT0hMSl7aWYocz09PSExKXJldHVybiAkO2lmKHR0IT09bnVsbCl7aWYoZVt0dF0hPT12b2lkIDApcmV0dXJuIGVbdHRdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIit0dCsiJyIpfWxldCBUdD0kO3JldHVybiAkPT09NjQwMyYmKEl0PT09NTEyNiYmKFR0PTMzMzI2KSxJdD09PTUxMzEmJihUdD0zMzMyNSksSXQ9PT01MTIxJiYoVHQ9MzMzMjEpKSwkPT09MzMzMTkmJihJdD09PTUxMjYmJihUdD0zMzMyOCksSXQ9PT01MTMxJiYoVHQ9MzMzMjcpLEl0PT09NTEyMSYmKFR0PTMzMzIzKSksJD09PTY0MDgmJihJdD09PTUxMjYmJihUdD0zNDgzNiksSXQ9PT01MTMxJiYoVHQ9MzQ4NDIpLEl0PT09NTEyMSYmKFR0PSR0PT09V24mJmhlPT09ITE/MzU5MDc6MzI4NTYpLEl0PT09MzI4MTkmJihUdD0zMjg1NCksSXQ9PT0zMjgyMCYmKFR0PTMyODU1KSksKFR0PT09MzMzMjV8fFR0PT09MzMzMjZ8fFR0PT09MzMzMjd8fFR0PT09MzMzMjh8fFR0PT09MzQ4NDJ8fFR0PT09MzQ4MzYpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLFR0fWZ1bmN0aW9uIE8odHQsJCxJdCl7cmV0dXJuIEModHQsSXQpPT09ITB8fHR0LmlzRnJhbWVidWZmZXJUZXh0dXJlJiZ0dC5taW5GaWx0ZXIhPT1MaSYmdHQubWluRmlsdGVyIT09aWk/TWF0aC5sb2cyKE1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpKSsxOnR0Lm1pcG1hcHMhPT12b2lkIDAmJnR0Lm1pcG1hcHMubGVuZ3RoPjA/dHQubWlwbWFwcy5sZW5ndGg6dHQuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheSh0dC5pbWFnZSk/JC5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIEQodHQpe3JldHVybiB0dD09PUxpfHx0dD09PW9VfHx0dD09PWFVPzk3Mjg6OTcyOX1mdW5jdGlvbiBCKHR0KXtsZXQgJD10dC50YXJnZXQ7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSxMKCQpLCQuaXNWaWRlb1RleHR1cmUmJmQuZGVsZXRlKCQpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gSSh0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksUigkKX1mdW5jdGlvbiBMKHR0KXtsZXQgJD1uLmdldCh0dCk7JC5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkLl9fd2ViZ2xUZXh0dXJlKSxuLnJlbW92ZSh0dCkpfWZ1bmN0aW9uIFIodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO2lmKCEhdHQpe2lmKCR0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYoZS5kZWxldGVUZXh0dXJlKCR0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSx0dC5kZXB0aFRleHR1cmUmJnR0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBoZT0wO2hlPDY7aGUrKyllLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcltoZV0pLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyW2hlXSk7ZWxzZSBlLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksSXQuX193ZWJnbERlcHRoYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhidWZmZXIpLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYodHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGhlPTAsVHQ9JC5sZW5ndGg7aGU8VHQ7aGUrKyl7bGV0IGJlPW4uZ2V0KCRbaGVdKTtiZS5fX3dlYmdsVGV4dHVyZSYmKGUuZGVsZXRlVGV4dHVyZShiZS5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksbi5yZW1vdmUoJFtoZV0pfW4ucmVtb3ZlKCQpLG4ucmVtb3ZlKHR0KX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIFUoKXtsZXQgdHQ9RjtyZXR1cm4gdHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3R0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSx0dH1mdW5jdGlvbiBXKHR0LCQpe2xldCBJdD1uLmdldCh0dCk7aWYodHQuaXNWaWRlb1RleHR1cmUmJmt0KHR0KSx0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2xldCAkdD10dC5pbWFnZTtpZigkdD09PXZvaWQgMCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoJHQuY29tcGxldGU9PT0hMSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle2x0KEl0LHR0LCQpO3JldHVybn19ci5hY3RpdmVUZXh0dXJlKDMzOTg0KyQpLHIuYmluZFRleHR1cmUoMzU1MyxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gWih0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1ODY2LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBydCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDMyODc5LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBvdCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7S3QoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM0MDY3LEl0Ll9fd2ViZ2xUZXh0dXJlKX1sZXQgc3Q9e1tYUF06MTA0OTcsW0pvXTozMzA3MSxbJFBdOjMzNjQ4fSxTdD17W0xpXTo5NzI4LFtvVV06OTk4NCxbYVVdOjk5ODYsW2lpXTo5NzI5LFtMaHRdOjk5ODUsW294XTo5OTg3fTtmdW5jdGlvbiBidCh0dCwkLEl0KXtpZihJdD8oZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQyLHN0WyQud3JhcFNdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDMsc3RbJC53cmFwVF0pLCh0dD09PTMyODc5fHx0dD09PTM1ODY2KSYmZS50ZXhQYXJhbWV0ZXJpKHR0LDMyODgyLHN0WyQud3JhcFJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsU3RbJC5tYWdGaWx0ZXJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDEsU3RbJC5taW5GaWx0ZXJdKSk6KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MiwzMzA3MSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLDMzMDcxKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MiwzMzA3MSksKCQud3JhcFMhPT1Kb3x8JC53cmFwVCE9PUpvKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MCxEKCQubWFnRmlsdGVyKSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLEQoJC5taW5GaWx0ZXIpKSwkLm1pbkZpbHRlciE9PUxpJiYkLm1pbkZpbHRlciE9PWlpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksdC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCAkdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoJC50eXBlPT09amQmJnQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSExfHxzPT09ITEmJiQudHlwZT09PUMxJiZ0LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSExKXJldHVybjsoJC5hbmlzb3Ryb3B5PjF8fG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYoZS50ZXhQYXJhbWV0ZXJmKHR0LCR0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKCQuYW5pc290cm9weSxpLmdldE1heEFuaXNvdHJvcHkoKSkpLG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHk9JC5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTXQodHQsJCl7dHQuX193ZWJnbEluaXQ9PT12b2lkIDAmJih0dC5fX3dlYmdsSW5pdD0hMCwkLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEIpLHR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGx0KHR0LCQsSXQpe2xldCAkdD0zNTUzOyQuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJigkdD0zNTg2NiksJC5pc0RhdGFUZXh0dXJlM0QmJigkdD0zMjg3OSksTXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKCR0LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGhlPVMoJCkmJmIoJC5pbWFnZSk9PT0hMSxUdD14KCQuaW1hZ2UsaGUsITEsdSk7VHQ9aWUoJCxUdCk7bGV0IGJlPWIoVHQpfHxzLG50PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxDdD1vLmNvbnZlcnQoJC50eXBlKSxXdD1rKCQuaW50ZXJuYWxGb3JtYXQsbnQsQ3QsJC5lbmNvZGluZywkLmlzVmlkZW9UZXh0dXJlKTtidCgkdCwkLGJlKTtsZXQgZmUsYXQ9JC5taXBtYXBzLHNlPXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxRdD10dC5fX3ZlcnNpb249PT12b2lkIDAsQ2U9TygkLFR0LGJlKTtpZigkLmlzRGVwdGhUZXh0dXJlKVd0PTY0MDIscz8kLnR5cGU9PT1qZD9XdD0zNjAxMjokLnR5cGU9PT1WUD9XdD0zMzE5MDokLnR5cGU9PT1BMT9XdD0zNTA1NjpXdD0zMzE4OTokLnR5cGU9PT1qZCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksJC5mb3JtYXQ9PT16MCYmV3Q9PT02NDAyJiYkLnR5cGUhPT1HMyYmJC50eXBlIT09VlAmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9RzMsQ3Q9by5jb252ZXJ0KCQudHlwZSkpLCQuZm9ybWF0PT09azEmJld0PT09NjQwMiYmKFd0PTM0MDQxLCQudHlwZSE9PUExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLCQudHlwZT1BMSxDdD1vLmNvbnZlcnQoJC50eXBlKSkpLHNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLDEsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LG51bGwpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlKWlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzQ29tcHJlc3NlZFRleHR1cmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sJC5mb3JtYXQhPT1Rbz9udCE9PW51bGw/c2U/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsZmUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLGZlLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnNlP3IudGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSl9ZWxzZSBpZigkLmlzRGF0YVRleHR1cmUyREFycmF5KXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzU4NjYsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzNTg2NiwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlM0Qpc2U/KFF0JiZyLnRleFN0b3JhZ2UzRCgzMjg3OSxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgpLHIudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCxudCxDdCxUdC5kYXRhKSk6ci50ZXhJbWFnZTNEKDMyODc5LDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzRnJhbWVidWZmZXJUZXh0dXJlKXNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsbnQsQ3QsZmUpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LG50LEN0LGZlKTskLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHNlPyhRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpLHIudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLG50LEN0LFR0KSk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxudCxDdCxUdCk7QygkLGJlKSYmUCgkdCksdHQuX192ZXJzaW9uPSQudmVyc2lvbiwkLm9uVXBkYXRlJiYkLm9uVXBkYXRlKCQpfWZ1bmN0aW9uIEt0KHR0LCQsSXQpe2lmKCQuaW1hZ2UubGVuZ3RoIT09NilyZXR1cm47TXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKDM0MDY3LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0ICR0PSQmJigkLmlzQ29tcHJlc3NlZFRleHR1cmV8fCQuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksaGU9JC5pbWFnZVswXSYmJC5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLFR0PVtdO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspISR0JiYhaGU/VHRbUHRdPXgoJC5pbWFnZVtQdF0sITEsITAsYyk6VHRbUHRdPWhlPyQuaW1hZ2VbUHRdLmltYWdlOiQuaW1hZ2VbUHRdLFR0W1B0XT1pZSgkLFR0W1B0XSk7bGV0IGJlPVR0WzBdLG50PWIoYmUpfHxzLEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9cyYmJC5pc1ZpZGVvVGV4dHVyZSE9PSEwLHNlPXR0Ll9fdmVyc2lvbj09PXZvaWQgMCxRdD1PKCQsYmUsbnQpO2J0KDM0MDY3LCQsbnQpO2xldCBDZTtpZigkdCl7YXQmJnNlJiZyLnRleFN0b3JhZ2UyRCgzNDA2NyxRdCxmZSxiZS53aWR0aCxiZS5oZWlnaHQpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0Kyspe0NlPVR0W1B0XS5taXBtYXBzO2ZvcihsZXQgTnQ9MDtOdDxDZS5sZW5ndGg7TnQrKyl7bGV0IHplPUNlW050XTskLmZvcm1hdCE9PVFvP0N0IT09bnVsbD9hdD9yLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsemUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCx6ZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsV3QsemUuZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50LGZlLHplLndpZHRoLHplLmhlaWdodCwwLEN0LFd0LHplLmRhdGEpfX19ZWxzZXtDZT0kLm1pcG1hcHMsYXQmJnNlJiYoQ2UubGVuZ3RoPjAmJlF0Kyssci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsVHRbMF0ud2lkdGgsVHRbMF0uaGVpZ2h0KSk7Zm9yKGxldCBQdD0wO1B0PDY7UHQrKylpZihoZSl7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLFR0W1B0XS53aWR0aCxUdFtQdF0uaGVpZ2h0LEN0LFd0LFR0W1B0XS5kYXRhKTpyLnRleEltYWdlMkQoMzQwNjkrUHQsMCxmZSxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCwwLEN0LFd0LFR0W1B0XS5kYXRhKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB5bj1DZVtOdF0uaW1hZ2VbUHRdLmltYWdlO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCx5bi53aWR0aCx5bi5oZWlnaHQsQ3QsV3QseW4uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUseW4ud2lkdGgseW4uaGVpZ2h0LDAsQ3QsV3QseW4uZGF0YSl9fWVsc2V7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLEN0LFd0LFR0W1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsQ3QsV3QsVHRbUHRdKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50KzEsMCwwLEN0LFd0LHplLmltYWdlW1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUsQ3QsV3QsemUuaW1hZ2VbUHRdKX19fUMoJCxudCkmJlAoMzQwNjcpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBfdCh0dCwkLEl0LCR0LGhlKXtsZXQgVHQ9by5jb252ZXJ0KEl0LmZvcm1hdCxJdC5lbmNvZGluZyksYmU9by5jb252ZXJ0KEl0LnR5cGUpLG50PWsoSXQuaW50ZXJuYWxGb3JtYXQsVHQsYmUsSXQuZW5jb2RpbmcpO24uZ2V0KCQpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGhlPT09MzI4Nzl8fGhlPT09MzU4NjY/ci50ZXhJbWFnZTNEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwkLmRlcHRoLDAsVHQsYmUsbnVsbCk6ci50ZXhJbWFnZTJEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwwLFR0LGJlLG51bGwpKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwLHd0KCQpKTplLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBjdCh0dCwkLEl0KXtpZihlLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsdHQpLCQuZGVwdGhCdWZmZXImJiEkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD0zMzE4OTtpZihJdHx8JC51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBoZT0kLmRlcHRoVGV4dHVyZTtoZSYmaGUuaXNEZXB0aFRleHR1cmUmJihoZS50eXBlPT09amQ/JHQ9MzYwMTI6aGUudHlwZT09PVZQJiYoJHQ9MzMxOTApKTtsZXQgVHQ9d3QoJCk7JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCl9ZWxzZSBlLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsJHQsJC53aWR0aCwkLmhlaWdodCk7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSx0dCl9ZWxzZSBpZigkLmRlcHRoQnVmZmVyJiYkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLCQud2lkdGgsJC5oZWlnaHQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsdHQpfWVsc2V7bGV0ICR0PSQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwPyQudGV4dHVyZVswXTokLnRleHR1cmUsaGU9by5jb252ZXJ0KCR0LmZvcm1hdCwkdC5lbmNvZGluZyksVHQ9by5jb252ZXJ0KCR0LnR5cGUpLGJlPWsoJHQuaW50ZXJuYWxGb3JtYXQsaGUsVHQsJHQuZW5jb2RpbmcpLG50PXd0KCQpO0l0JiYkLnVzZVJlbmRlcmJ1ZmZlcj9lLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTokLnVzZVJlbmRlclRvVGV4dHVyZT9wLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTplLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYmUsJC53aWR0aCwkLmhlaWdodCl9ZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFgodHQsJCl7aWYoJCYmJC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksISgkLmRlcHRoVGV4dHVyZSYmJC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghbi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHwkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PSQud2lkdGh8fCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PSQuaGVpZ2h0KSYmKCQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPSQud2lkdGgsJC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PSQuaGVpZ2h0LCQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxXKCQuZGVwdGhUZXh0dXJlLDApO2xldCAkdD1uLmdldCgkLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsaGU9d3QoJCk7aWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09ejApJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLCR0LDApO2Vsc2UgaWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09azEpJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLCR0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBldCh0dCl7bGV0ICQ9bi5nZXQodHQpLEl0PXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYodHQuZGVwdGhUZXh0dXJlJiYhJC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihJdCl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7WCgkLl9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCl9ZWxzZSBpZihJdCl7JC5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCAkdD0wOyR0PDY7JHQrKylyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlclskdF0pLCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XT1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XSx0dCwhMSl9ZWxzZSByLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlciksJC5fX3dlYmdsRGVwdGhidWZmZXI9ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlcix0dCwhMSk7ci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gZHQodHQsJCxJdCl7bGV0ICR0PW4uZ2V0KHR0KTskIT09dm9pZCAwJiZfdCgkdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsdHQudGV4dHVyZSwzNjA2NCwzNTUzKSxJdCE9PXZvaWQgMCYmZXQodHQpfWZ1bmN0aW9uIHEodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO3R0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMhPT0hMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoJHQuX193ZWJnbFRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCkpLCR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IGhlPXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVHQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwLGJlPSQuaXNEYXRhVGV4dHVyZTNEfHwkLmlzRGF0YVRleHR1cmUyREFycmF5LG50PWIodHQpfHxzO2lmKGhlKXtJdC5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdPWUuY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksVHQpaWYoaS5kcmF3QnVmZmVycyl7bGV0IEN0PXR0LnRleHR1cmU7Zm9yKGxldCBXdD0wLGZlPUN0Lmxlbmd0aDtXdDxmZTtXdCsrKXtsZXQgYXQ9bi5nZXQoQ3RbV3RdKTthdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKGF0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe0l0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9d3QodHQpO2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGF0LGZlLHR0LndpZHRoLHR0LmhlaWdodCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHR0LmRlcHRoQnVmZmVyJiYoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLHR0LCEwKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihoZSl7ci5iaW5kVGV4dHVyZSgzNDA2NywkdC5fX3dlYmdsVGV4dHVyZSksYnQoMzQwNjcsJCxudCk7Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylfdChJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdLHR0LCQsMzYwNjQsMzQwNjkrQ3QpO0MoJCxudCkmJlAoMzQwNjcpLHIudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVHQpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PUN0W1d0XSxzZT1uLmdldChhdCk7ci5iaW5kVGV4dHVyZSgzNTUzLHNlLl9fd2ViZ2xUZXh0dXJlKSxidCgzNTUzLGF0LG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsYXQsMzYwNjQrV3QsMzU1MyksQyhhdCxudCkmJlAoMzU1Myl9ci51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgQ3Q9MzU1MztiZSYmKHM/Q3Q9JC5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLHIuYmluZFRleHR1cmUoQ3QsJHQuX193ZWJnbFRleHR1cmUpLGJ0KEN0LCQsbnQpLF90KEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCwkLDM2MDY0LEN0KSxDKCQsbnQpJiZQKEN0KSxyLnVuYmluZFRleHR1cmUoKX10dC5kZXB0aEJ1ZmZlciYmZXQodHQpfWZ1bmN0aW9uIHB0KHR0KXtsZXQgJD1iKHR0KXx8cyxJdD10dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dHQudGV4dHVyZTpbdHQudGV4dHVyZV07Zm9yKGxldCAkdD0wLGhlPUl0Lmxlbmd0aDskdDxoZTskdCsrKXtsZXQgVHQ9SXRbJHRdO2lmKEMoVHQsJCkpe2xldCBiZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG50PW4uZ2V0KFR0KS5fX3dlYmdsVGV4dHVyZTtyLmJpbmRUZXh0dXJlKGJlLG50KSxQKGJlKSxyLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIGh0KHR0KXtpZih0dC51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0ICQ9dHQud2lkdGgsSXQ9dHQuaGVpZ2h0LCR0PTE2Mzg0LGhlPVszNjA2NF0sVHQ9dHQuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5Njt0dC5kZXB0aEJ1ZmZlciYmaGUucHVzaChUdCksdHQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fCh0dC5kZXB0aEJ1ZmZlciYmKCR0fD0yNTYpLHR0LnN0ZW5jaWxCdWZmZXImJigkdHw9MTAyNCkpO2xldCBiZT1uLmdldCh0dCk7ci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsRnJhbWVidWZmZXIpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYoZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1R0XSksZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1R0XSkpLGUuYmxpdEZyYW1lYnVmZmVyKDAsMCwkLEl0LDAsMCwkLEl0LCR0LDk3MjgpLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGhlKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gd3QodHQpe3JldHVybiBzJiYodHQudXNlUmVuZGVyYnVmZmVyfHx0dC51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsdHQuc2FtcGxlcyk6MH1mdW5jdGlvbiBrdCh0dCl7bGV0ICQ9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodHQpIT09JCYmKGQuc2V0KHR0LCQpLHR0LnVwZGF0ZSgpKX1mdW5jdGlvbiBpZSh0dCwkKXtsZXQgSXQ9dHQuZW5jb2RpbmcsJHQ9dHQuZm9ybWF0LGhlPXR0LnR5cGU7cmV0dXJuIHR0LmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8dHQuaXNWaWRlb1RleHR1cmU9PT0hMHx8dHQuZm9ybWF0PT09c1V8fEl0IT09UWQmJihJdD09PVduP3M9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiYkdD09PVFvPyh0dC5mb3JtYXQ9c1UsdHQubWluRmlsdGVyPWlpLHR0LmdlbmVyYXRlTWlwbWFwcz0hMSk6JD1LZi5zUkdCVG9MaW5lYXIoJCk6KCR0IT09UW98fGhlIT09WmQpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixJdCkpLCR9bGV0IGVlPSExLExlPSExO2Z1bmN0aW9uIGFyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoZWU9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGVlPSEwKSx0dD10dC50ZXh0dXJlKSxXKHR0LCQpfWZ1bmN0aW9uIGZyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKExlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTGU9ITApLHR0PXR0LnRleHR1cmUpLG90KHR0LCQpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1VLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1XLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9Wix0aGlzLnNldFRleHR1cmUzRD1ydCx0aGlzLnNldFRleHR1cmVDdWJlPW90LHRoaXMucmViaW5kVGV4dHVyZXM9ZHQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1xLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPXB0LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9aHQsdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWV0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9X3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWFyLHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZyfWZ1bmN0aW9uICRmZShlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKG8sYT1udWxsKXtsZXQgcztpZihvPT09WmQpcmV0dXJuIDUxMjE7aWYobz09PWRmZSlyZXR1cm4gMzI4MTk7aWYobz09PW1mZSlyZXR1cm4gMzI4MjA7aWYobz09PWhmZSlyZXR1cm4gNTEyMDtpZihvPT09ZmZlKXJldHVybiA1MTIyO2lmKG89PT1HMylyZXR1cm4gNTEyMztpZihvPT09cGZlKXJldHVybiA1MTI0O2lmKG89PT1WUClyZXR1cm4gNTEyNTtpZihvPT09amQpcmV0dXJuIDUxMjY7aWYobz09PUMxKXJldHVybiBuPzUxMzE6KHM9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxzIT09bnVsbD9zLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKG89PT1nZmUpcmV0dXJuIDY0MDY7aWYobz09PVFvKXJldHVybiA2NDA4O2lmKG89PT1fZmUpcmV0dXJuIDY0MDk7aWYobz09PXlmZSlyZXR1cm4gNjQxMDtpZihvPT09ejApcmV0dXJuIDY0MDI7aWYobz09PWsxKXJldHVybiAzNDA0MTtpZihvPT09dmZlKXJldHVybiA2NDAzO2lmKG89PT1zVSlyZXR1cm4gcz10LmdldCgiRVhUX3NSR0IiKSxzIT09bnVsbD9zLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYobz09PXhmZSlyZXR1cm4gMzYyNDQ7aWYobz09PWJmZSlyZXR1cm4gMzMzMTk7aWYobz09PXdmZSlyZXR1cm4gMzMzMjA7aWYobz09PVNmZSlyZXR1cm4gMzYyNDk7aWYobz09PUpWfHxvPT09UVZ8fG89PT10VXx8bz09PWVVKWlmKGE9PT1XbilpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1lVSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2Vsc2UgaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxzIT09bnVsbCl7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UHV0fHxvPT09SXV0fHxvPT09THV0fHxvPT09a3V0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLHMhPT1udWxsKXtpZihvPT09UHV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PWt1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKG89PT1NZmUpcmV0dXJuIHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIikscyE9PW51bGw/cy5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYobz09PVJ1dHx8bz09PU51dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIikscyE9PW51bGwpe2lmKG89PT1SdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfRVRDMjpzLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKG89PT1OdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKG89PT1EdXR8fG89PT1PdXR8fG89PT16dXR8fG89PT1GdXR8fG89PT1CdXR8fG89PT1IdXR8fG89PT1WdXR8fG89PT1VdXR8fG89PT1xdXR8fG89PT1HdXR8fG89PT1XdXR8fG89PT1ZdXR8fG89PT1qdXR8fG89PT1YdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxzIT09bnVsbCl7aWYobz09PUR1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihvPT09T3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT16dXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PUZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihvPT09QnV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1IdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihvPT09VXV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1xdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1qdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKG89PT1YdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PSR1dClpZihzPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIikscyE9PW51bGwpe2lmKG89PT0kdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKG89PT1BMSlyZXR1cm4gbj8zNDA0Mjoocz10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHMhPT1udWxsP3MuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6aX19dmFyIG42PWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O242LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBYZD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O1hkLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBDZ3I9e3R5cGU6Im1vdmUifSxxUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgWGQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBYZCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IFhkLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBqKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxyLG4pe2xldCBpPW51bGwsbz1udWxsLGE9bnVsbCxzPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJnIuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihzIT09bnVsbCYmKGk9ci5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksaSE9PW51bGwmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KHMuaGFzTGluZWFyVmVsb2NpdHk9ITAscy5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTpzLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxzLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6cy5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KENncikpKSxjJiZ0LmhhbmQpe2E9ITA7Zm9yKGxldCBnIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IF89ci5nZXRKb2ludFBvc2UoZyxuKTtpZihjLmpvaW50c1tnLmpvaW50TmFtZV09PT12b2lkIDApe2xldCB4PW5ldyBYZDt4Lm1hdHJpeEF1dG9VcGRhdGU9ITEseC52aXNpYmxlPSExLGMuam9pbnRzW2cuam9pbnROYW1lXT14LGMuYWRkKHgpfWxldCB5PWMuam9pbnRzW2cuam9pbnROYW1lXTtfIT09bnVsbCYmKHkubWF0cml4LmZyb21BcnJheShfLnRyYW5zZm9ybS5tYXRyaXgpLHkubWF0cml4LmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucm90YXRpb24seS5zY2FsZSkseS5qb2ludFJhZGl1cz1fLnJhZGl1cykseS52aXNpYmxlPV8hPT1udWxsfWxldCB1PWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0saD1jLmpvaW50c1sidGh1bWItdGlwIl0sZj11LnBvc2l0aW9uLmRpc3RhbmNlVG8oaC5wb3NpdGlvbikscD0uMDIsZD0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmZj5wK2Q/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPD1wLWQmJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIGwhPT1udWxsJiZ0LmdyaXBTcGFjZSYmKG89ci5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG8hPT1udWxsJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIHMhPT1udWxsJiYocy52aXNpYmxlPWkhPT1udWxsKSxsIT09bnVsbCYmKGwudmlzaWJsZT1vIT09bnVsbCksYyE9PW51bGwmJihjLnZpc2libGU9YSE9PW51bGwpLHRoaXN9fSxuTT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe2lmKHU9dSE9PXZvaWQgMD91OnowLHUhPT16MCYmdSE9PWsxKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTtuPT09dm9pZCAwJiZ1PT09ejAmJihuPUczKSxuPT09dm9pZCAwJiZ1PT09azEmJihuPUExKSxzdXBlcihudWxsLGksbyxhLHMsbCx1LG4sYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cn0sdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOkxpLHRoaXMubWluRmlsdGVyPWwhPT12b2lkIDA/bDpMaSx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bk0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBlaHQ9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCk7bGV0IG49dGhpcyxpPW51bGwsbz0xLGE9bnVsbCxzPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwscD0hMSxkPW51bGwsZz1yLmdldENvbnRleHRBdHRyaWJ1dGVzKCksXz1udWxsLHk9bnVsbCx4PVtdLGI9bmV3IE1hcCxTPW5ldyBVaTtTLmxheWVycy5lbmFibGUoMSksUy52aWV3cG9ydD1uZXcgZW47bGV0IEM9bmV3IFVpO0MubGF5ZXJzLmVuYWJsZSgyKSxDLnZpZXdwb3J0PW5ldyBlbjtsZXQgUD1bUyxDXSxrPW5ldyBuNjtrLmxheWVycy5lbmFibGUoMSksay5sYXllcnMuZW5hYmxlKDIpO2xldCBPPW51bGwsRD1udWxsO3RoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRIYW5kU3BhY2UoKX07ZnVuY3Rpb24gQihvdCl7bGV0IHN0PWIuZ2V0KG90LmlucHV0U291cmNlKTtzdCYmc3QuZGlzcGF0Y2hFdmVudCh7dHlwZTpvdC50eXBlLGRhdGE6b3QuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBJKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKG90LHN0KXtvdC5kaXNjb25uZWN0KHN0KX0pLGIuY2xlYXIoKSxPPW51bGwsRD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KF8pLGY9bnVsbCxoPW51bGwsdT1udWxsLGk9bnVsbCx5PW51bGwscnQuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24ob3Qpe289b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24ob3Qpe3M9b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24ob3Qpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoaT1vdCxpIT09bnVsbCl7aWYoXz10LmdldFJlbmRlclRhcmdldCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLEwpLGcueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCByLm1ha2VYUkNvbXBhdGlibGUoKSksaS5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCBzdD17YW50aWFsaWFzOmkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP2cuYW50aWFsaWFzOiEwLGFscGhhOmcuYWxwaGEsZGVwdGg6Zy5kZXB0aCxzdGVuY2lsOmcuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99O2Y9bmV3IFhSV2ViR0xMYXllcihpLHIsc3QpLGkudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpmfSkseT1uZXcgdXMoZi5mcmFtZWJ1ZmZlcldpZHRoLGYuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1lbHNle3A9Zy5hbnRpYWxpYXM7bGV0IHN0PW51bGwsU3Q9bnVsbCxidD1udWxsO2cuZGVwdGgmJihidD1nLnN0ZW5jaWw/MzUwNTY6MzMxOTAsc3Q9Zy5zdGVuY2lsP2sxOnowLFN0PWcuc3RlbmNpbD9BMTpHMyk7bGV0IE10PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09V24/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6YnQsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcoaSxyKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKE10KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSkscD95PW5ldyBqMyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTp5PW5ldyB1cyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX15LmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksYT15aWVsZCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShzKSxydC5zZXRDb250ZXh0KGkpLHJ0LnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIEwob3Qpe2xldCBzdD1pLmlucHV0U291cmNlcztmb3IobGV0IFN0PTA7U3Q8eC5sZW5ndGg7U3QrKyliLnNldChzdFtTdF0seFtTdF0pO2ZvcihsZXQgU3Q9MDtTdDxvdC5yZW1vdmVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QucmVtb3ZlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiYoTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOmJ0fSksYi5kZWxldGUoYnQpKX1mb3IobGV0IFN0PTA7U3Q8b3QuYWRkZWQubGVuZ3RoO1N0Kyspe2xldCBidD1vdC5hZGRlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiZNdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6YnR9KX19bGV0IFI9bmV3IGosRj1uZXcgajtmdW5jdGlvbiB6KG90LHN0LFN0KXtSLnNldEZyb21NYXRyaXhQb3NpdGlvbihzdC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24oU3QubWF0cml4V29ybGQpO2xldCBidD1SLmRpc3RhbmNlVG8oRiksTXQ9c3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxsdD1TdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEt0PU10WzE0XS8oTXRbMTBdLTEpLF90PU10WzE0XS8oTXRbMTBdKzEpLGN0PShNdFs5XSsxKS9NdFs1XSxYPShNdFs5XS0xKS9NdFs1XSxldD0oTXRbOF0tMSkvTXRbMF0sZHQ9KGx0WzhdKzEpL2x0WzBdLHE9S3QqZXQscHQ9S3QqZHQsaHQ9YnQvKC1ldCtkdCksd3Q9aHQqLWV0O3N0Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC50cmFuc2xhdGVYKHd0KSxvdC50cmFuc2xhdGVaKGh0KSxvdC5tYXRyaXhXb3JsZC5jb21wb3NlKG90LnBvc2l0aW9uLG90LnF1YXRlcm5pb24sb3Quc2NhbGUpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQga3Q9S3QraHQsaWU9X3QraHQsZWU9cS13dCxMZT1wdCsoYnQtd3QpLGFyPWN0Kl90L2llKmt0LGZyPVgqX3QvaWUqa3Q7b3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZWUsTGUsYXIsZnIsa3QsaWUpfWZ1bmN0aW9uIFUob3Qsc3Qpe3N0PT09bnVsbD9vdC5tYXRyaXhXb3JsZC5jb3B5KG90Lm1hdHJpeCk6b3QubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhzdC5tYXRyaXhXb3JsZCxvdC5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihvdCl7aWYoaT09PW51bGwpcmV0dXJuO2submVhcj1DLm5lYXI9Uy5uZWFyPW90Lm5lYXIsay5mYXI9Qy5mYXI9Uy5mYXI9b3QuZmFyLChPIT09ay5uZWFyfHxEIT09ay5mYXIpJiYoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOmsubmVhcixkZXB0aEZhcjprLmZhcn0pLE89ay5uZWFyLEQ9ay5mYXIpO2xldCBzdD1vdC5wYXJlbnQsU3Q9ay5jYW1lcmFzO1UoayxzdCk7Zm9yKGxldCBNdD0wO010PFN0Lmxlbmd0aDtNdCsrKVUoU3RbTXRdLHN0KTtrLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrLnBvc2l0aW9uLGsucXVhdGVybmlvbixrLnNjYWxlKSxvdC5wb3NpdGlvbi5jb3B5KGsucG9zaXRpb24pLG90LnF1YXRlcm5pb24uY29weShrLnF1YXRlcm5pb24pLG90LnNjYWxlLmNvcHkoay5zY2FsZSksb3QubWF0cml4LmNvcHkoay5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkLmNvcHkoay5tYXRyaXhXb3JsZCk7bGV0IGJ0PW90LmNoaWxkcmVuO2ZvcihsZXQgTXQ9MCxsdD1idC5sZW5ndGg7TXQ8bHQ7TXQrKylidFtNdF0udXBkYXRlTWF0cml4V29ybGQoITApO1N0Lmxlbmd0aD09PTI/eihrLFMsQyk6ay5wcm9qZWN0aW9uTWF0cml4LmNvcHkoUy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24ob3Qpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1vdCksZiE9PW51bGwmJmYuZml4ZWRGb3ZlYXRpb24hPT12b2lkIDAmJihmLmZpeGVkRm92ZWF0aW9uPW90KX07bGV0IFc9bnVsbDtmdW5jdGlvbiBaKG90LHN0KXtpZihjPXN0LmdldFZpZXdlclBvc2UoYSksZD1zdCxjIT09bnVsbCl7bGV0IGJ0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHksZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoeSkpO2xldCBNdD0hMTtidC5sZW5ndGghPT1rLmNhbWVyYXMubGVuZ3RoJiYoay5jYW1lcmFzLmxlbmd0aD0wLE10PSEwKTtmb3IobGV0IGx0PTA7bHQ8YnQubGVuZ3RoO2x0Kyspe2xldCBLdD1idFtsdF0sX3Q9bnVsbDtpZihmIT09bnVsbClfdD1mLmdldFZpZXdwb3J0KEt0KTtlbHNle2xldCBYPXUuZ2V0Vmlld1N1YkltYWdlKGgsS3QpO190PVgudmlld3BvcnQsbHQ9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyh5LFguY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlguZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBjdD1QW2x0XTtjdC5tYXRyaXguZnJvbUFycmF5KEt0LnRyYW5zZm9ybS5tYXRyaXgpLGN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEt0LnByb2plY3Rpb25NYXRyaXgpLGN0LnZpZXdwb3J0LnNldChfdC54LF90LnksX3Qud2lkdGgsX3QuaGVpZ2h0KSxsdD09PTAmJmsubWF0cml4LmNvcHkoY3QubWF0cml4KSxNdD09PSEwJiZrLmNhbWVyYXMucHVzaChjdCl9fWxldCBTdD1pLmlucHV0U291cmNlcztmb3IobGV0IGJ0PTA7YnQ8eC5sZW5ndGg7YnQrKyl7bGV0IE10PXhbYnRdLGx0PVN0W2J0XTtNdC51cGRhdGUobHQsc3QsYSl9VyYmVyhvdCxzdCksZD1udWxsfWxldCBydD1uZXcgRmZlO3J0LnNldEFuaW1hdGlvbkxvb3AoWiksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKG90KXtXPW90fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gQWdyKGUpe2Z1bmN0aW9uIHQoeSx4KXt5LmZvZ0NvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseC5pc0ZvZz8oeS5mb2dOZWFyLnZhbHVlPXgubmVhcix5LmZvZ0Zhci52YWx1ZT14LmZhcik6eC5pc0ZvZ0V4cDImJih5LmZvZ0RlbnNpdHkudmFsdWU9eC5kZW5zaXR5KX1mdW5jdGlvbiByKHkseCxiLFMsQyl7eC5pc01lc2hCYXNpY01hdGVyaWFsP24oeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8obih5LHgpLGwoeSx4KSk6eC5pc01lc2hUb29uTWF0ZXJpYWw/KG4oeSx4KSx1KHkseCkpOnguaXNNZXNoUGhvbmdNYXRlcmlhbD8obih5LHgpLGMoeSx4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhuKHkseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2YoeSx4LEMpOmgoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8obih5LHgpLHAoeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhuKHkseCksZCh5LHgpKTp4LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KG4oeSx4KSxnKHkseCkpOnguaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KG4oeSx4KSxfKHkseCkpOnguaXNMaW5lQmFzaWNNYXRlcmlhbD8oaSh5LHgpLHguaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJm8oeSx4KSk6eC5pc1BvaW50c01hdGVyaWFsP2EoeSx4LGIsUyk6eC5pc1Nwcml0ZU1hdGVyaWFsP3MoeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9ZnVuY3Rpb24gbih5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI9ZS5nZXQoeCkuZW52TWFwO2ImJih5LmVudk1hcC52YWx1ZT1iLHkuZmxpcEVudk1hcC52YWx1ZT1iLmlzQ3ViZVRleHR1cmUmJmIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSx5LnJlZmxlY3Rpdml0eS52YWx1ZT14LnJlZmxlY3Rpdml0eSx5Lmlvci52YWx1ZT14Lmlvcix5LnJlZnJhY3Rpb25SYXRpby52YWx1ZT14LnJlZnJhY3Rpb25SYXRpbykseC5saWdodE1hcCYmKHkubGlnaHRNYXAudmFsdWU9eC5saWdodE1hcCx5LmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPXgubGlnaHRNYXBJbnRlbnNpdHkpLHguYW9NYXAmJih5LmFvTWFwLnZhbHVlPXguYW9NYXAseS5hb01hcEludGVuc2l0eS52YWx1ZT14LmFvTWFwSW50ZW5zaXR5KTtsZXQgUzt4Lm1hcD9TPXgubWFwOnguc3BlY3VsYXJNYXA/Uz14LnNwZWN1bGFyTWFwOnguZGlzcGxhY2VtZW50TWFwP1M9eC5kaXNwbGFjZW1lbnRNYXA6eC5ub3JtYWxNYXA/Uz14Lm5vcm1hbE1hcDp4LmJ1bXBNYXA/Uz14LmJ1bXBNYXA6eC5yb3VnaG5lc3NNYXA/Uz14LnJvdWdobmVzc01hcDp4Lm1ldGFsbmVzc01hcD9TPXgubWV0YWxuZXNzTWFwOnguYWxwaGFNYXA/Uz14LmFscGhhTWFwOnguZW1pc3NpdmVNYXA/Uz14LmVtaXNzaXZlTWFwOnguY2xlYXJjb2F0TWFwP1M9eC5jbGVhcmNvYXRNYXA6eC5jbGVhcmNvYXROb3JtYWxNYXA/Uz14LmNsZWFyY29hdE5vcm1hbE1hcDp4LmNsZWFyY29hdFJvdWdobmVzc01hcD9TPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwOnguc3BlY3VsYXJJbnRlbnNpdHlNYXA/Uz14LnNwZWN1bGFySW50ZW5zaXR5TWFwOnguc3BlY3VsYXJDb2xvck1hcD9TPXguc3BlY3VsYXJDb2xvck1hcDp4LnRyYW5zbWlzc2lvbk1hcD9TPXgudHJhbnNtaXNzaW9uTWFwOngudGhpY2tuZXNzTWFwP1M9eC50aGlja25lc3NNYXA6eC5zaGVlbkNvbG9yTWFwP1M9eC5zaGVlbkNvbG9yTWFwOnguc2hlZW5Sb3VnaG5lc3NNYXAmJihTPXguc2hlZW5Sb3VnaG5lc3NNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSk7bGV0IEM7eC5hb01hcD9DPXguYW9NYXA6eC5saWdodE1hcCYmKEM9eC5saWdodE1hcCksQyE9PXZvaWQgMCYmKEMuaXNXZWJHTFJlbmRlclRhcmdldCYmKEM9Qy50ZXh0dXJlKSxDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gaSh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9ZnVuY3Rpb24gbyh5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9ZnVuY3Rpb24gYSh5LHgsYixTKXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqYix5LnNjYWxlLnZhbHVlPVMqLjUseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgQzt4Lm1hcD9DPXgubWFwOnguYWxwaGFNYXAmJihDPXguYWxwaGFNYXApLEMhPT12b2lkIDAmJihDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQy5tYXRyaXgpKX1mdW5jdGlvbiBzKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgYjt4Lm1hcD9iPXgubWFwOnguYWxwaGFNYXAmJihiPXguYWxwaGFNYXApLGIhPT12b2lkIDAmJihiLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmYi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpKX1mdW5jdGlvbiBsKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9ZnVuY3Rpb24gYyh5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIHUoeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGgoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLGUuZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1mdW5jdGlvbiBmKHkseCxiKXtoKHkseCkseS5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYoeS5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx5LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYoeS5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHkuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih5LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx5LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHkuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx5LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT1JaSYmeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih5LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix5LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Yi50ZXh0dXJlLHkudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KGIud2lkdGgsYi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYoeS50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHkudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYoeS50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHkuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2UseS5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSkseS5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHkuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYoeS5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9ZnVuY3Rpb24gcCh5LHgpe3gubWF0Y2FwJiYoeS5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHkuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAseS5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09SWkmJih5LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHkubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHkubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT1JaSYmeS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gZCh5LHgpe3guZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfWZ1bmN0aW9uIF8oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6dCxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpyfX1mdW5jdGlvbiBQZ3IoKXtsZXQgZT10NigiY2FudmFzIik7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV9ZnVuY3Rpb24gcm4oZT17fSl7bGV0IHQ9ZS5jYW52YXMhPT12b2lkIDA/ZS5jYW52YXM6UGdyKCkscj1lLmNvbnRleHQhPT12b2lkIDA/ZS5jb250ZXh0Om51bGwsbj1lLmFscGhhIT09dm9pZCAwP2UuYWxwaGE6ITEsaT1lLmRlcHRoIT09dm9pZCAwP2UuZGVwdGg6ITAsbz1lLnN0ZW5jaWwhPT12b2lkIDA/ZS5zdGVuY2lsOiEwLGE9ZS5hbnRpYWxpYXMhPT12b2lkIDA/ZS5hbnRpYWxpYXM6ITEscz1lLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9lLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP2UucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9ZS5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/ZS5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP2UuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLHA9W10sZD1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPVFkLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1LZCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgZz10aGlzLF89ITEseT0wLHg9MCxiPW51bGwsUz0tMSxDPW51bGwsUD1uZXcgZW4saz1uZXcgZW4sTz1udWxsLEQ9dC53aWR0aCxCPXQuaGVpZ2h0LEk9MSxMPW51bGwsUj1udWxsLEY9bmV3IGVuKDAsMCxELEIpLHo9bmV3IGVuKDAsMCxELEIpLFU9ITEsVz1uZXcgTjEsWj0hMSxydD0hMSxvdD1udWxsLHN0PW5ldyBNZSxTdD1uZXcgaixidD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIGI9PT1udWxsP0k6MX1sZXQgbHQ9cjtmdW5jdGlvbiBLdChLLGd0KXtmb3IobGV0IEV0PTA7RXQ8Sy5sZW5ndGg7RXQrKyl7bGV0IHh0PUtbRXRdLEZ0PXQuZ2V0Q29udGV4dCh4dCxndCk7aWYoRnQhPT1udWxsKXJldHVybiBGdH1yZXR1cm4gbnVsbH10cnl7bGV0IEs9e2FscGhhOiEwLGRlcHRoOmksc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtqVX1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixhdCwhMSksbHQ9PT1udWxsKXtsZXQgZ3Q9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKGcuaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZndC5zaGlmdCgpLGx0PUt0KGd0LEspLGx0PT09bnVsbCl0aHJvdyBLdChndCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX1sdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihsdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEspe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrSy5tZXNzYWdlKSxLfWxldCBfdCxjdCxYLGV0LGR0LHEscHQsaHQsd3Qsa3QsaWUsZWUsTGUsYXIsZnIsdHQsJCxJdCwkdCxoZSxUdCxiZSxudDtmdW5jdGlvbiBDdCgpe190PW5ldyBKZHIobHQpLGN0PW5ldyBZZHIobHQsX3QsZSksX3QuaW5pdChjdCksYmU9bmV3ICRmZShsdCxfdCxjdCksWD1uZXcgRWdyKGx0LF90LGN0KSxldD1uZXcgZW1yKGx0KSxkdD1uZXcgZGdyLHE9bmV3IFRncihsdCxfdCxYLGR0LGN0LGJlLGV0KSxwdD1uZXcgWGRyKGcpLGh0PW5ldyBaZHIoZyksd3Q9bmV3IGdmcihsdCxjdCksbnQ9bmV3IEdkcihsdCxfdCx3dCxjdCksa3Q9bmV3IFFkcihsdCx3dCxldCxudCksaWU9bmV3IG9tcihsdCxrdCx3dCxldCksJHQ9bmV3IGltcihsdCxjdCxxKSx0dD1uZXcgamRyKGR0KSxlZT1uZXcgcGdyKGcscHQsaHQsX3QsY3QsbnQsdHQpLExlPW5ldyBBZ3IoZHQpLGFyPW5ldyBnZ3IsZnI9bmV3IHdncihfdCxjdCksSXQ9bmV3IHFkcihnLHB0LFgsaWUsbixzKSwkPW5ldyBYZmUoZyxpZSxjdCksaGU9bmV3IFdkcihsdCxfdCxldCxjdCksVHQ9bmV3IHRtcihsdCxfdCxldCxjdCksZXQucHJvZ3JhbXM9ZWUucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9Y3QsZy5leHRlbnNpb25zPV90LGcucHJvcGVydGllcz1kdCxnLnJlbmRlckxpc3RzPWFyLGcuc2hhZG93TWFwPSQsZy5zdGF0ZT1YLGcuaW5mbz1ldH1DdCgpO2xldCBXdD1uZXcgZWh0KGcsbHQpO3RoaXMueHI9V3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBLPV90LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7SyYmSy5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihLKXtLIT09dm9pZCAwJiYoST1LLHRoaXMuc2V0U2l6ZShELEIsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEspe3JldHVybiBLLnNldChELEIpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oSyxndCxFdCl7aWYoV3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn1EPUssQj1ndCx0LndpZHRoPU1hdGguZmxvb3IoSypJKSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkkpLEV0IT09ITEmJih0LnN0eWxlLndpZHRoPUsrInB4Iix0LnN0eWxlLmhlaWdodD1ndCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCpJLEIqSSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLLGd0LEV0KXtEPUssQj1ndCxJPUV0LHQud2lkdGg9TWF0aC5mbG9vcihLKkV0KSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkV0KSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShQKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEYpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P0Yuc2V0KEsueCxLLnksSy56LEsudyk6Ri5zZXQoSyxndCxFdCx4dCksWC52aWV3cG9ydChQLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KHopfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSyxndCxFdCx4dCl7Sy5pc1ZlY3RvcjQ/ei5zZXQoSy54LEsueSxLLnosSy53KTp6LnNldChLLGd0LEV0LHh0KSxYLnNjaXNzb3Ioay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFV9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSyl7WC5zZXRTY2lzc29yVGVzdChVPUspfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oSyl7TD1LfSx0aGlzLnNldFRyYW5zcGFyZW50U29ydD1mdW5jdGlvbihLKXtSPUt9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEl0LmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0l0LnNldENsZWFyQ29sb3IuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SXQuc2V0Q2xlYXJBbHBoYS5hcHBseShJdCxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEssZ3QsRXQpe2xldCB4dD0wOyhLPT09dm9pZCAwfHxLKSYmKHh0fD0xNjM4NCksKGd0PT09dm9pZCAwfHxndCkmJih4dHw9MjU2KSwoRXQ9PT12b2lkIDB8fEV0KSYmKHh0fD0xMDI0KSxsdC5jbGVhcih4dCl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGFyLmRpc3Bvc2UoKSxmci5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHB0LmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksaWUuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxlZS5kaXNwb3NlKCksV3QuZGlzcG9zZSgpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSxvdCYmKG90LmRpc3Bvc2UoKSxvdD1udWxsKSxXaS5zdG9wKCl9O2Z1bmN0aW9uIGZlKEspe0sucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gYXQoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2xldCBLPWV0LmF1dG9SZXNldCxndD0kLmVuYWJsZWQsRXQ9JC5hdXRvVXBkYXRlLHh0PSQubmVlZHNVcGRhdGUsRnQ9JC50eXBlO0N0KCksZXQuYXV0b1Jlc2V0PUssJC5lbmFibGVkPWd0LCQuYXV0b1VwZGF0ZT1FdCwkLm5lZWRzVXBkYXRlPXh0LCQudHlwZT1GdH1mdW5jdGlvbiBzZShLKXtsZXQgZ3Q9Sy50YXJnZXQ7Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFF0KGd0KX1mdW5jdGlvbiBRdChLKXtDZShLKSxkdC5yZW1vdmUoSyl9ZnVuY3Rpb24gQ2UoSyl7bGV0IGd0PWR0LmdldChLKS5wcm9ncmFtcztndCE9PXZvaWQgMCYmKGd0LmZvckVhY2goZnVuY3Rpb24oRXQpe2VlLnJlbGVhc2VQcm9ncmFtKEV0KX0pLEsuaXNTaGFkZXJNYXRlcmlhbCYmZWUucmVsZWFzZVNoYWRlckNhY2hlKEspKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0LFZlKXtndD09PW51bGwmJihndD1idCk7bGV0IFVlPUZ0LmlzTWVzaCYmRnQubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHRyPWNuKEssZ3QsRXQseHQsRnQpO1guc2V0TWF0ZXJpYWwoeHQsVWUpO2xldCBLZT1FdC5pbmRleCxYcj1FdC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKEtlPT09bnVsbCl7aWYoWHI9PT12b2lkIDB8fFhyLmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihLZS5jb3VudD09PTApcmV0dXJuO2xldCBfcj0xO3h0LndpcmVmcmFtZT09PSEwJiYoS2U9a3QuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKEV0KSxfcj0yKSxudC5zZXR1cChGdCx4dCx0cixFdCxLZSk7bGV0IFByLGpuPWhlO0tlIT09bnVsbCYmKFByPXd0LmdldChLZSksam49VHQsam4uc2V0SW5kZXgoUHIpKTtsZXQgbnA9S2UhPT1udWxsP0tlLmNvdW50OlhyLmNvdW50LHVtPUV0LmRyYXdSYW5nZS5zdGFydCpfcixtcj1FdC5kcmF3UmFuZ2UuY291bnQqX3IsRmw9VmUhPT1udWxsP1ZlLnN0YXJ0Kl9yOjAsWG49VmUhPT1udWxsP1ZlLmNvdW50Kl9yOjEvMCxCbD1NYXRoLm1heCh1bSxGbCksdXg9TWF0aC5taW4obnAsdW0rbXIsRmwrWG4pLTEsSGw9TWF0aC5tYXgoMCx1eC1CbCsxKTtpZihIbCE9PTApe2lmKEZ0LmlzTWVzaCl4dC53aXJlZnJhbWU9PT0hMD8oWC5zZXRMaW5lV2lkdGgoeHQud2lyZWZyYW1lTGluZXdpZHRoKk10KCkpLGpuLnNldE1vZGUoMSkpOmpuLnNldE1vZGUoNCk7ZWxzZSBpZihGdC5pc0xpbmUpe2xldCBWbD14dC5saW5ld2lkdGg7Vmw9PT12b2lkIDAmJihWbD0xKSxYLnNldExpbmVXaWR0aChWbCpNdCgpKSxGdC5pc0xpbmVTZWdtZW50cz9qbi5zZXRNb2RlKDEpOkZ0LmlzTGluZUxvb3A/am4uc2V0TW9kZSgyKTpqbi5zZXRNb2RlKDMpfWVsc2UgRnQuaXNQb2ludHM/am4uc2V0TW9kZSgwKTpGdC5pc1Nwcml0ZSYmam4uc2V0TW9kZSg0KTtpZihGdC5pc0luc3RhbmNlZE1lc2gpam4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLEZ0LmNvdW50KTtlbHNlIGlmKEV0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCBWbD1NYXRoLm1pbihFdC5pbnN0YW5jZUNvdW50LEV0Ll9tYXhJbnN0YW5jZUNvdW50KTtqbi5yZW5kZXJJbnN0YW5jZXMoQmwsSGwsVmwpfWVsc2Ugam4ucmVuZGVyKEJsLEhsKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihLLGd0KXtmPWZyLmdldChLKSxmLmluaXQoKSxkLnB1c2goZiksSy50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oRXQpe0V0LmlzTGlnaHQmJkV0LmxheWVycy50ZXN0KGd0LmxheWVycykmJihmLnB1c2hMaWdodChFdCksRXQuY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KEV0KSl9KSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEsudHJhdmVyc2UoZnVuY3Rpb24oRXQpe2xldCB4dD1FdC5tYXRlcmlhbDtpZih4dClpZihBcnJheS5pc0FycmF5KHh0KSlmb3IobGV0IEZ0PTA7RnQ8eHQubGVuZ3RoO0Z0Kyspe2xldCBWZT14dFtGdF07Y20oVmUsSyxFdCl9ZWxzZSBjbSh4dCxLLEV0KX0pLGQucG9wKCksZj1udWxsfTtsZXQgUHQ9bnVsbDtmdW5jdGlvbiBOdChLKXtQdCYmUHQoSyl9ZnVuY3Rpb24gemUoKXtXaS5zdG9wKCl9ZnVuY3Rpb24geW4oKXtXaS5zdGFydCgpfWxldCBXaT1uZXcgRmZlO1dpLnNldEFuaW1hdGlvbkxvb3AoTnQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZXaS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKEspe1B0PUssV3Quc2V0QW5pbWF0aW9uTG9vcChLKSxLPT09bnVsbD9XaS5zdG9wKCk6V2kuc3RhcnQoKX0sV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0Iix6ZSksV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIseW4pLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEssZ3Qpe2lmKGd0IT09dm9pZCAwJiZndC5pc0NhbWVyYSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7cmV0dXJufWlmKF89PT0hMClyZXR1cm47Sy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlTWF0cml4V29ybGQoKSxndC5wYXJlbnQ9PT1udWxsJiZndC51cGRhdGVNYXRyaXhXb3JsZCgpLFd0LmVuYWJsZWQ9PT0hMCYmV3QuaXNQcmVzZW50aW5nPT09ITAmJihXdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJld0LnVwZGF0ZUNhbWVyYShndCksZ3Q9V3QuZ2V0Q2FtZXJhKCkpLEsuaXNTY2VuZT09PSEwJiZLLm9uQmVmb3JlUmVuZGVyKGcsSyxndCxiKSxmPWZyLmdldChLLGQubGVuZ3RoKSxmLmluaXQoKSxkLnB1c2goZiksc3QubXVsdGlwbHlNYXRyaWNlcyhndC5wcm9qZWN0aW9uTWF0cml4LGd0Lm1hdHJpeFdvcmxkSW52ZXJzZSksVy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzdCkscnQ9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCxaPXR0LmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxydCxndCksaD1hci5nZXQoSyxwLmxlbmd0aCksaC5pbml0KCkscC5wdXNoKGgpLEFyKEssZ3QsMCxnLnNvcnRPYmplY3RzKSxoLmZpbmlzaCgpLGcuc29ydE9iamVjdHM9PT0hMCYmaC5zb3J0KEwsUiksWj09PSEwJiZ0dC5iZWdpblNoYWRvd3MoKTtsZXQgRXQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYoJC5yZW5kZXIoRXQsSyxndCksWj09PSEwJiZ0dC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxJdC5yZW5kZXIoaCxLKSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLGd0LmlzQXJyYXlDYW1lcmEpe2xldCB4dD1ndC5jYW1lcmFzO2ZvcihsZXQgRnQ9MCxWZT14dC5sZW5ndGg7RnQ8VmU7RnQrKyl7bGV0IFVlPXh0W0Z0XTtQYShoLEssVWUsVWUudmlld3BvcnQpfX1lbHNlIFBhKGgsSyxndCk7YiE9PW51bGwmJihxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkFmdGVyUmVuZGVyKGcsSyxndCksWC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFguYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxYLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksWC5zZXRQb2x5Z29uT2Zmc2V0KCExKSxudC5yZXNldERlZmF1bHRTdGF0ZSgpLFM9LTEsQz1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9mPWRbZC5sZW5ndGgtMV06Zj1udWxsLHAucG9wKCkscC5sZW5ndGg+MD9oPXBbcC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBBcihLLGd0LEV0LHh0KXtpZihLLnZpc2libGU9PT0hMSlyZXR1cm47aWYoSy5sYXllcnMudGVzdChndC5sYXllcnMpKXtpZihLLmlzR3JvdXApRXQ9Sy5yZW5kZXJPcmRlcjtlbHNlIGlmKEsuaXNMT0QpSy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlKGd0KTtlbHNlIGlmKEsuaXNMaWdodClmLnB1c2hMaWdodChLKSxLLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhLKTtlbHNlIGlmKEsuaXNTcHJpdGUpe2lmKCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c1Nwcml0ZShLKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDt0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1lbHNlIGlmKChLLmlzTWVzaHx8Sy5pc0xpbmV8fEsuaXNQb2ludHMpJiYoSy5pc1NraW5uZWRNZXNoJiZLLnNrZWxldG9uLmZyYW1lIT09ZXQucmVuZGVyLmZyYW1lJiYoSy5za2VsZXRvbi51cGRhdGUoKSxLLnNrZWxldG9uLmZyYW1lPWV0LnJlbmRlci5mcmFtZSksIUsuZnJ1c3R1bUN1bGxlZHx8Vy5pbnRlcnNlY3RzT2JqZWN0KEspKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHRyKSl7bGV0IEtlPVVlLmdyb3Vwcztmb3IobGV0IFhyPTAsX3I9S2UubGVuZ3RoO1hyPF9yO1hyKyspe2xldCBQcj1LZVtYcl0sam49dHJbUHIubWF0ZXJpYWxJbmRleF07am4mJmpuLnZpc2libGUmJmgucHVzaChLLFVlLGpuLEV0LFN0LnosUHIpfX1lbHNlIHRyLnZpc2libGUmJmgucHVzaChLLFVlLHRyLEV0LFN0LnosbnVsbCl9fWxldCBWZT1LLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCx0cj1WZS5sZW5ndGg7VWU8dHI7VWUrKylBcihWZVtVZV0sZ3QsRXQseHQpfWZ1bmN0aW9uIFBhKEssZ3QsRXQseHQpe2xldCBGdD1LLm9wYXF1ZSxWZT1LLnRyYW5zbWlzc2l2ZSxVZT1LLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KEV0KSxWZS5sZW5ndGg+MCYmaG8oRnQsZ3QsRXQpLHh0JiZYLnZpZXdwb3J0KFAuY29weSh4dCkpLEZ0Lmxlbmd0aD4wJiZJYShGdCxndCxFdCksVmUubGVuZ3RoPjAmJklhKFZlLGd0LEV0KSxVZS5sZW5ndGg+MCYmSWEoVWUsZ3QsRXQpfWZ1bmN0aW9uIGhvKEssZ3QsRXQpe2lmKG90PT09bnVsbCl7bGV0IFVlPWE9PT0hMCYmY3QuaXNXZWJHTDI9PT0hMD9qMzp1cztvdD1uZXcgVWUoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpiZS5jb252ZXJ0KEMxKSE9PW51bGw/QzE6WmQsbWluRmlsdGVyOm94LG1hZ0ZpbHRlcjpMaSx3cmFwUzpKbyx3cmFwVDpKbyx1c2VSZW5kZXJUb1RleHR1cmU6X3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCB4dD1nLmdldFJlbmRlclRhcmdldCgpO2cuc2V0UmVuZGVyVGFyZ2V0KG90KSxnLmNsZWFyKCk7bGV0IEZ0PWcudG9uZU1hcHBpbmc7Zy50b25lTWFwcGluZz1LZCxJYShLLGd0LEV0KSxnLnRvbmVNYXBwaW5nPUZ0LHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQob3QpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKG90KSxnLnNldFJlbmRlclRhcmdldCh4dCl9ZnVuY3Rpb24gSWEoSyxndCxFdCl7bGV0IHh0PWd0LmlzU2NlbmU9PT0hMD9ndC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBGdD0wLFZlPUsubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT1LW0Z0XSx0cj1VZS5vYmplY3QsS2U9VWUuZ2VvbWV0cnksWHI9eHQ9PT1udWxsP1VlLm1hdGVyaWFsOnh0LF9yPVVlLmdyb3VwO3RyLmxheWVycy50ZXN0KEV0LmxheWVycykmJmx4KHRyLGd0LEV0LEtlLFhyLF9yKX19ZnVuY3Rpb24gbHgoSyxndCxFdCx4dCxGdCxWZSl7Sy5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKSxLLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKEV0Lm1hdHJpeFdvcmxkSW52ZXJzZSxLLm1hdHJpeFdvcmxkKSxLLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoSy5tb2RlbFZpZXdNYXRyaXgpLEZ0Lm9uQmVmb3JlUmVuZGVyKGcsZ3QsRXQseHQsSyxWZSksRnQudHJhbnNwYXJlbnQ9PT0hMCYmRnQuc2lkZT09PUwxPyhGdC5zaWRlPUlpLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9STEsRnQubmVlZHNVcGRhdGU9ITAsZy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksRnQuc2lkZT1MMSk6Zy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksSy5vbkFmdGVyUmVuZGVyKGcsZ3QsRXQseHQsRnQsVmUpfWZ1bmN0aW9uIGNtKEssZ3QsRXQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KTtsZXQgeHQ9ZHQuZ2V0KEspLEZ0PWYuc3RhdGUubGlnaHRzLFZlPWYuc3RhdGUuc2hhZG93c0FycmF5LFVlPUZ0LnN0YXRlLnZlcnNpb24sdHI9ZWUuZ2V0UGFyYW1ldGVycyhLLEZ0LnN0YXRlLFZlLGd0LEV0KSxLZT1lZS5nZXRQcm9ncmFtQ2FjaGVLZXkodHIpLFhyPXh0LnByb2dyYW1zO3h0LmVudmlyb25tZW50PUsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHh0LmZvZz1ndC5mb2cseHQuZW52TWFwPShLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldChLLmVudk1hcHx8eHQuZW52aXJvbm1lbnQpLFhyPT09dm9pZCAwJiYoSy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzZSksWHI9bmV3IE1hcCx4dC5wcm9ncmFtcz1Ycik7bGV0IF9yPVhyLmdldChLZSk7aWYoX3IhPT12b2lkIDApe2lmKHh0LmN1cnJlbnRQcm9ncmFtPT09X3ImJnh0LmxpZ2h0c1N0YXRlVmVyc2lvbj09PVVlKXJldHVybiBKMChLLHRyKSxfcn1lbHNlIHRyLnVuaWZvcm1zPWVlLmdldFVuaWZvcm1zKEspLEsub25CdWlsZChFdCx0cixnKSxLLm9uQmVmb3JlQ29tcGlsZSh0cixnKSxfcj1lZS5hY3F1aXJlUHJvZ3JhbSh0cixLZSksWHIuc2V0KEtlLF9yKSx4dC51bmlmb3Jtcz10ci51bmlmb3JtcztsZXQgUHI9eHQudW5pZm9ybXM7KCFLLmlzU2hhZGVyTWF0ZXJpYWwmJiFLLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fEsuY2xpcHBpbmc9PT0hMCkmJihQci5jbGlwcGluZ1BsYW5lcz10dC51bmlmb3JtKSxKMChLLHRyKSx4dC5uZWVkc0xpZ2h0cz1ycChLKSx4dC5saWdodHNTdGF0ZVZlcnNpb249VWUseHQubmVlZHNMaWdodHMmJihQci5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1GdC5zdGF0ZS5hbWJpZW50LFByLmxpZ2h0UHJvYmUudmFsdWU9RnQuc3RhdGUucHJvYmUsUHIuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWwsUHIuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csUHIuc3BvdExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5zcG90LFByLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvdyxQci5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYSxQci5sdGNfMS52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYUxUQzEsUHIubHRjXzIudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMyLFByLnBvaW50TGlnaHRzLnZhbHVlPUZ0LnN0YXRlLnBvaW50LFByLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93LFByLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9RnQuc3RhdGUuaGVtaSxQci5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxQci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxQci5zcG90U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3dNYXAsUHIuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWF0cml4LFByLnBvaW50U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWFwLFByLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgam49X3IuZ2V0VW5pZm9ybXMoKSxucD1CMC5zZXFXaXRoVmFsdWUoam4uc2VxLFByKTtyZXR1cm4geHQuY3VycmVudFByb2dyYW09X3IseHQudW5pZm9ybXNMaXN0PW5wLF9yfWZ1bmN0aW9uIEowKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQub3V0cHV0RW5jb2Rpbmc9Z3Qub3V0cHV0RW5jb2RpbmcsRXQuaW5zdGFuY2luZz1ndC5pbnN0YW5jaW5nLEV0LnNraW5uaW5nPWd0LnNraW5uaW5nLEV0Lm1vcnBoVGFyZ2V0cz1ndC5tb3JwaFRhcmdldHMsRXQubW9ycGhOb3JtYWxzPWd0Lm1vcnBoTm9ybWFscyxFdC5tb3JwaFRhcmdldHNDb3VudD1ndC5tb3JwaFRhcmdldHNDb3VudCxFdC5udW1DbGlwcGluZ1BsYW5lcz1ndC5udW1DbGlwcGluZ1BsYW5lcyxFdC5udW1JbnRlcnNlY3Rpb249Z3QubnVtQ2xpcEludGVyc2VjdGlvbixFdC52ZXJ0ZXhBbHBoYXM9Z3QudmVydGV4QWxwaGFzLEV0LnZlcnRleFRhbmdlbnRzPWd0LnZlcnRleFRhbmdlbnRzLEV0LnRvbmVNYXBwaW5nPWd0LnRvbmVNYXBwaW5nfWZ1bmN0aW9uIGNuKEssZ3QsRXQseHQsRnQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFZlPWd0LmZvZyxVZT14dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2d0LmVudmlyb25tZW50Om51bGwsdHI9Yj09PW51bGw/Zy5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6UWQsS2U9KHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldCh4dC5lbnZNYXB8fFVlKSxYcj14dC52ZXJ0ZXhDb2xvcnM9PT0hMCYmISFFdC5hdHRyaWJ1dGVzLmNvbG9yJiZFdC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCxfcj0hIXh0Lm5vcm1hbE1hcCYmISFFdC5hdHRyaWJ1dGVzLnRhbmdlbnQsUHI9ISFFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sam49ISFFdC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG5wPUV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsdW09eHQudG9uZU1hcHBlZD9nLnRvbmVNYXBwaW5nOktkLG1yPWR0LmdldCh4dCksRmw9Zi5zdGF0ZS5saWdodHM7aWYoWj09PSEwJiYocnQ9PT0hMHx8SyE9PUMpKXtsZXQgcXM9Sz09PUMmJnh0LmlkPT09Uzt0dC5zZXRTdGF0ZSh4dCxLLHFzKX1sZXQgWG49ITE7eHQudmVyc2lvbj09PW1yLl9fdmVyc2lvbj8obXIubmVlZHNMaWdodHMmJm1yLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PUZsLnN0YXRlLnZlcnNpb258fG1yLm91dHB1dEVuY29kaW5nIT09dHJ8fEZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSExfHwhRnQuaXNJbnN0YW5jZWRNZXNoJiZtci5pbnN0YW5jaW5nPT09ITB8fEZ0LmlzU2tpbm5lZE1lc2gmJm1yLnNraW5uaW5nPT09ITF8fCFGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSEwfHxtci5lbnZNYXAhPT1LZXx8eHQuZm9nJiZtci5mb2chPT1WZXx8bXIubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihtci5udW1DbGlwcGluZ1BsYW5lcyE9PXR0Lm51bVBsYW5lc3x8bXIubnVtSW50ZXJzZWN0aW9uIT09dHQubnVtSW50ZXJzZWN0aW9uKXx8bXIudmVydGV4QWxwaGFzIT09WHJ8fG1yLnZlcnRleFRhbmdlbnRzIT09X3J8fG1yLm1vcnBoVGFyZ2V0cyE9PVByfHxtci5tb3JwaE5vcm1hbHMhPT1qbnx8bXIudG9uZU1hcHBpbmchPT11bXx8Y3QuaXNXZWJHTDI9PT0hMCYmbXIubW9ycGhUYXJnZXRzQ291bnQhPT1ucCkmJihYbj0hMCk6KFhuPSEwLG1yLl9fdmVyc2lvbj14dC52ZXJzaW9uKTtsZXQgQmw9bXIuY3VycmVudFByb2dyYW07WG49PT0hMCYmKEJsPWNtKHh0LGd0LEZ0KSk7bGV0IHV4PSExLEhsPSExLFZsPSExLFlpPUJsLmdldFVuaWZvcm1zKCksaG09bXIudW5pZm9ybXM7aWYoWC51c2VQcm9ncmFtKEJsLnByb2dyYW0pJiYodXg9ITAsSGw9ITAsVmw9ITApLHh0LmlkIT09UyYmKFM9eHQuaWQsSGw9ITApLHV4fHxDIT09Syl7aWYoWWkuc2V0VmFsdWUobHQsInByb2plY3Rpb25NYXRyaXgiLEsucHJvamVjdGlvbk1hdHJpeCksY3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmWWkuc2V0VmFsdWUobHQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEsuZmFyKzEpL01hdGguTE4yKSksQyE9PUsmJihDPUssSGw9ITAsVmw9ITApLHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuZW52TWFwKXtsZXQgcXM9WWkubWFwLmNhbWVyYVBvc2l0aW9uO3FzIT09dm9pZCAwJiZxcy5zZXRWYWx1ZShsdCxTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkpfSh4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8eHQuaXNNZXNoQmFzaWNNYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuaXNTaGFkZXJNYXRlcmlhbCkmJllpLnNldFZhbHVlKGx0LCJpc09ydGhvZ3JhcGhpYyIsSy5pc09ydGhvZ3JhcGhpY0NhbWVyYT09PSEwKSwoeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzU2hhZG93TWF0ZXJpYWx8fEZ0LmlzU2tpbm5lZE1lc2gpJiZZaS5zZXRWYWx1ZShsdCwidmlld01hdHJpeCIsSy5tYXRyaXhXb3JsZEludmVyc2UpfWlmKEZ0LmlzU2tpbm5lZE1lc2gpe1lpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4IiksWWkuc2V0T3B0aW9uYWwobHQsRnQsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHFzPUZ0LnNrZWxldG9uO3FzJiYoY3QuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8ocXMuYm9uZVRleHR1cmU9PT1udWxsJiZxcy5jb21wdXRlQm9uZVRleHR1cmUoKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmUiLHFzLmJvbmVUZXh0dXJlLHEpLFlpLnNldFZhbHVlKGx0LCJib25lVGV4dHVyZVNpemUiLHFzLmJvbmVUZXh0dXJlU2l6ZSkpOllpLnNldE9wdGlvbmFsKGx0LHFzLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFFdCYmKEV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8RXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCkmJiR0LnVwZGF0ZShGdCxFdCx4dCxCbCksKEhsfHxtci5yZWNlaXZlU2hhZG93IT09RnQucmVjZWl2ZVNoYWRvdykmJihtci5yZWNlaXZlU2hhZG93PUZ0LnJlY2VpdmVTaGFkb3csWWkuc2V0VmFsdWUobHQsInJlY2VpdmVTaGFkb3ciLEZ0LnJlY2VpdmVTaGFkb3cpKSxIbCYmKFlpLnNldFZhbHVlKGx0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLG1yLm5lZWRzTGlnaHRzJiZjeChobSxWbCksVmUmJnh0LmZvZyYmTGUucmVmcmVzaEZvZ1VuaWZvcm1zKGhtLFZlKSxMZS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhobSx4dCxJLEIsb3QpLEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkpLHh0LmlzU2hhZGVyTWF0ZXJpYWwmJnh0LnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoQjAudXBsb2FkKGx0LG1yLnVuaWZvcm1zTGlzdCxobSxxKSx4dC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLHh0LmlzU3ByaXRlTWF0ZXJpYWwmJllpLnNldFZhbHVlKGx0LCJjZW50ZXIiLEZ0LmNlbnRlciksWWkuc2V0VmFsdWUobHQsIm1vZGVsVmlld01hdHJpeCIsRnQubW9kZWxWaWV3TWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibm9ybWFsTWF0cml4IixGdC5ub3JtYWxNYXRyaXgpLFlpLnNldFZhbHVlKGx0LCJtb2RlbE1hdHJpeCIsRnQubWF0cml4V29ybGQpLEJsfWZ1bmN0aW9uIGN4KEssZ3Qpe0suYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9Z3QsSy5saWdodFByb2JlLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9Z3QsSy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndH1mdW5jdGlvbiBycChLKXtyZXR1cm4gSy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEsuaXNNZXNoVG9vbk1hdGVyaWFsfHxLLmlzTWVzaFBob25nTWF0ZXJpYWx8fEsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Sy5pc1NoYWRvd01hdGVyaWFsfHxLLmlzU2hhZGVyTWF0ZXJpYWwmJksubGlnaHRzPT09ITB9dGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXM9ZnVuY3Rpb24oSyxndCxFdCl7ZHQuZ2V0KEsudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9Z3QsZHQuZ2V0KEsuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1FdDtsZXQgeHQ9ZHQuZ2V0KEspO3h0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcz0hMCx4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJih4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPUV0PT09dm9pZCAwLHh0Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEsudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxLLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxLLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQuX193ZWJnbEZyYW1lYnVmZmVyPWd0LEV0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPWd0PT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihLLGd0PTAsRXQ9MCl7Yj1LLHk9Z3QseD1FdDtsZXQgeHQ9ITA7aWYoSyl7bGV0IEtlPWR0LmdldChLKTtLZS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciE9PXZvaWQgMD8oWC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCkseHQ9ITEpOktlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9xLnNldHVwUmVuZGVyVGFyZ2V0KEspOktlLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmcS5yZWJpbmRUZXh0dXJlcyhLLGR0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBGdD1udWxsLFZlPSExLFVlPSExO2lmKEspe2xldCBLZT1LLnRleHR1cmU7KEtlLmlzRGF0YVRleHR1cmUzRHx8S2UuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoVWU9ITApO2xldCBYcj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO0suaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KEZ0PVhyW2d0XSxWZT0hMCk6Sy51c2VSZW5kZXJidWZmZXI/RnQ9ZHQuZ2V0KEspLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpGdD1YcixQLmNvcHkoSy52aWV3cG9ydCksay5jb3B5KEsuc2Npc3NvciksTz1LLnNjaXNzb3JUZXN0fWVsc2UgUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksTz1VO2lmKFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLEZ0KSYmY3QuZHJhd0J1ZmZlcnMmJnh0JiZYLmRyYXdCdWZmZXJzKEssRnQpLFgudmlld3BvcnQoUCksWC5zY2lzc29yKGspLFguc2V0U2Npc3NvclRlc3QoTyksVmUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKTtsdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStndCxLZS5fX3dlYmdsVGV4dHVyZSxFdCl9ZWxzZSBpZihVZSl7bGV0IEtlPWR0LmdldChLLnRleHR1cmUpLFhyPWd0fHwwO2x0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LEtlLl9fd2ViZ2xUZXh0dXJlLEV0fHwwLFhyKX1TPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSxVZSl7aWYoIShLJiZLLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCB0cj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEsuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJlVlIT09dm9pZCAwJiYodHI9dHJbVWVdKSx0cil7WC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHIpO3RyeXtsZXQgS2U9Sy50ZXh0dXJlLFhyPUtlLmZvcm1hdCxfcj1LZS50eXBlO2lmKFhyIT09UW8mJmJlLmNvbnZlcnQoWHIpIT09bHQuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBQcj1fcj09PUMxJiYoX3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Y3QuaXNXZWJHTDImJl90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZihfciE9PVpkJiZiZS5jb252ZXJ0KF9yKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOCkmJiEoX3I9PT1qZCYmKGN0LmlzV2ViR0wyfHxfdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fF90LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpKSYmIVByKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7cmV0dXJufWx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/Z3Q+PTAmJmd0PD1LLndpZHRoLXh0JiZFdD49MCYmRXQ8PUsuaGVpZ2h0LUZ0JiZsdC5yZWFkUGl4ZWxzKGd0LEV0LHh0LEZ0LGJlLmNvbnZlcnQoWHIpLGJlLmNvbnZlcnQoX3IpLFZlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgS2U9YiE9PW51bGw/ZHQuZ2V0KGIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLEtlKX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0PTApe2lmKGd0LmlzRnJhbWVidWZmZXJUZXh0dXJlIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7cmV0dXJufWxldCB4dD1NYXRoLnBvdygyLC1FdCksRnQ9TWF0aC5mbG9vcihndC5pbWFnZS53aWR0aCp4dCksVmU9TWF0aC5mbG9vcihndC5pbWFnZS5oZWlnaHQqeHQpO3Euc2V0VGV4dHVyZTJEKGd0LDApLGx0LmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsRXQsMCwwLEsueCxLLnksRnQsVmUpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEssZ3QsRXQseHQ9MCl7bGV0IEZ0PWd0LmltYWdlLndpZHRoLFZlPWd0LmltYWdlLmhlaWdodCxVZT1iZS5jb252ZXJ0KEV0LmZvcm1hdCksdHI9YmUuY29udmVydChFdC50eXBlKTtxLnNldFRleHR1cmUyRChFdCwwKSxsdC5waXhlbFN0b3JlaSgzNzQ0MCxFdC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEsRXQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyxFdC51bnBhY2tBbGlnbm1lbnQpLGd0LmlzRGF0YVRleHR1cmU/bHQudGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksRnQsVmUsVWUsdHIsZ3QuaW1hZ2UuZGF0YSk6Z3QuaXNDb21wcmVzc2VkVGV4dHVyZT9sdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksZ3QubWlwbWFwc1swXS53aWR0aCxndC5taXBtYXBzWzBdLmhlaWdodCxVZSxndC5taXBtYXBzWzBdLmRhdGEpOmx0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LFVlLHRyLGd0LmltYWdlKSx4dD09PTAmJkV0LmdlbmVyYXRlTWlwbWFwcyYmbHQuZ2VuZXJhdGVNaXBtYXAoMzU1MyksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0PTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBWZT1LLm1heC54LUsubWluLngrMSxVZT1LLm1heC55LUsubWluLnkrMSx0cj1LLm1heC56LUsubWluLnorMSxLZT1iZS5jb252ZXJ0KHh0LmZvcm1hdCksWHI9YmUuY29udmVydCh4dC50eXBlKSxfcjtpZih4dC5pc0RhdGFUZXh0dXJlM0QpcS5zZXRUZXh0dXJlM0QoeHQsMCksX3I9MzI4Nzk7ZWxzZSBpZih4dC5pc0RhdGFUZXh0dXJlMkRBcnJheSlxLnNldFRleHR1cmUyREFycmF5KHh0LDApLF9yPTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1sdC5waXhlbFN0b3JlaSgzNzQ0MCx4dC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEseHQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyx4dC51bnBhY2tBbGlnbm1lbnQpO2xldCBQcj1sdC5nZXRQYXJhbWV0ZXIoMzMxNCksam49bHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxucD1sdC5nZXRQYXJhbWV0ZXIoMzMxNiksdW09bHQuZ2V0UGFyYW1ldGVyKDMzMTUpLG1yPWx0LmdldFBhcmFtZXRlcigzMjg3NyksRmw9RXQuaXNDb21wcmVzc2VkVGV4dHVyZT9FdC5taXBtYXBzWzBdOkV0LmltYWdlO2x0LnBpeGVsU3RvcmVpKDMzMTQsRmwud2lkdGgpLGx0LnBpeGVsU3RvcmVpKDMyODc4LEZsLmhlaWdodCksbHQucGl4ZWxTdG9yZWkoMzMxNixLLm1pbi54KSxsdC5waXhlbFN0b3JlaSgzMzE1LEsubWluLnkpLGx0LnBpeGVsU3RvcmVpKDMyODc3LEsubWluLnopLEV0LmlzRGF0YVRleHR1cmV8fEV0LmlzRGF0YVRleHR1cmUzRD9sdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsLmRhdGEpOkV0LmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksbHQuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsRmwuZGF0YSkpOmx0LnRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsWHIsRmwpLGx0LnBpeGVsU3RvcmVpKDMzMTQsUHIpLGx0LnBpeGVsU3RvcmVpKDMyODc4LGpuKSxsdC5waXhlbFN0b3JlaSgzMzE2LG5wKSxsdC5waXhlbFN0b3JlaSgzMzE1LHVtKSxsdC5waXhlbFN0b3JlaSgzMjg3NyxtciksRnQ9PT0wJiZ4dC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKF9yKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihLKXtxLnNldFRleHR1cmUyRChLLDApLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLGI9bnVsbCxYLnJlc2V0KCksbnQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXJuLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIGdVPWNsYXNzIGV4dGVuZHMgcm57fTtnVS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgTzE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5kZW5zaXR5PXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IE8xKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtPMS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB6MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMubmVhcj1yLHRoaXMuZmFyPW59Y2xvbmUoKXtyZXR1cm4gbmV3IHoxKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt6MS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoci5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxyfX07cTAucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIGVtPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9TmwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxyLG4pe3QqPXRoaXMuc3RyaWRlLG4qPXIuc3RyaWRlO2ZvcihsZXQgaT0wLG89dGhpcy5zdHJpZGU7aTxvO2krKyl0aGlzLmFycmF5W3QraV09ci5hcnJheVtuK2ldO3JldHVybiB0aGlzfXNldCh0LHI9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsciksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IHI9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHIsdGhpcy5zdHJpZGUpO3JldHVybiBuLnNldFVzYWdlKHRoaXMudXNhZ2UpLG59b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07ZW0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIEFpPW5ldyBqLHRwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGk9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5kYXRhLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixBaS54LEFpLnksQWkueik7cmV0dXJuIHRoaXN9c2V0WCh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1yLHRoaXN9c2V0WSh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPXIsdGhpc31zZXRaKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09cix0aGlzfXNldFcodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1yLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxyLG4pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPXIsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJuIG5ldyBKZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihyKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IHRwKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6cixub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07dHAucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGlNPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aU0ucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIE4zLERQPW5ldyBqLEQzPW5ldyBqLE8zPW5ldyBqLHozPW5ldyBMdCxPUD1uZXcgTHQsS2ZlPW5ldyBNZSxMVj1uZXcgaix6UD1uZXcgaixrVj1uZXcgaixqdWU9bmV3IEx0LGR1dD1uZXcgTHQsWHVlPW5ldyBMdCxvTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLE4zPT09dm9pZCAwKXtOMz1uZXcgUGU7bGV0IHI9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksbj1uZXcgZW0ociw1KTtOMy5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxOMy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgdHAobiwzLDAsITEpKSxOMy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgdHAobiwyLDMsITEpKX10aGlzLmdlb21ldHJ5PU4zLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBpTSx0aGlzLmNlbnRlcj1uZXcgTHQoLjUsLjUpfXJheWNhc3QodCxyKXt0LmNhbWVyYT09PW51bGwmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxEMy5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksS2ZlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE8zLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmRDMubXVsdGlwbHlTY2FsYXIoLU8zLnopO2xldCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb24saSxvO24hPT0wJiYobz1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtsZXQgYT10aGlzLmNlbnRlcjtSVihMVi5zZXQoLS41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoelAuc2V0KC41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoa1Yuc2V0KC41LC41LDApLE8zLGEsRDMsaSxvKSxqdWUuc2V0KDAsMCksZHV0LnNldCgxLDApLFh1ZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVix6UCxrViwhMSxEUCk7aWYocz09PW51bGwmJihSVih6UC5zZXQoLS41LC41LDApLE8zLGEsRDMsaSxvKSxkdXQuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVixrVix6UCwhMSxEUCkscz09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhEUCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpEUC5jbG9uZSgpLHV2Om9pLmdldFVWKERQLExWLHpQLGtWLGp1ZSxkdXQsWHVlLG5ldyBMdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0LmNlbnRlciE9PXZvaWQgMCYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fTtvTS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7ZnVuY3Rpb24gUlYoZSx0LHIsbixpLG8pe3ozLnN1YlZlY3RvcnMoZSxyKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG4pLGkhPT12b2lkIDA/KE9QLng9byp6My54LWkqejMueSxPUC55PWkqejMueCtvKnozLnkpOk9QLmNvcHkoejMpLGUuY29weSh0KSxlLngrPU9QLngsZS55Kz1PUC55LGUuYXBwbHlNYXRyaXg0KEtmZSl9dmFyIE5WPW5ldyBqLCR1ZT1uZXcgaixfVT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtsZXQgcj10LmxldmVscztmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspe2xldCBvPXJbbl07dGhpcy5hZGRMZXZlbChvLm9iamVjdC5jbG9uZSgpLG8uZGlzdGFuY2UpfXJldHVybiB0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXN9YWRkTGV2ZWwodCxyPTApe3I9TWF0aC5hYnMocik7bGV0IG49dGhpcy5sZXZlbHMsaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEocjxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOnIsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfWdldEN1cnJlbnRMZXZlbCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9Z2V0T2JqZWN0Rm9yRGlzdGFuY2UodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ci5sZW5ndGg7bjxpJiYhKHQ8cltuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gcltuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQscil7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe05WLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOVik7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShpKS5yYXljYXN0KHQscil9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLmxldmVscztpZihyLmxlbmd0aD4xKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksJHVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgbj1OVi5kaXN0YW5jZVRvKCR1ZSkvdC56b29tO3JbMF0ub2JqZWN0LnZpc2libGU9ITA7bGV0IGksbztmb3IoaT0xLG89ci5sZW5ndGg7aTxvJiZuPj1yW2ldLmRpc3RhbmNlO2krKylyW2ktMV0ub2JqZWN0LnZpc2libGU9ITEscltpXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPWktMTtpPG87aSsrKXJbaV0ub2JqZWN0LnZpc2libGU9ITF9fXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7dGhpcy5hdXRvVXBkYXRlPT09ITEmJihyLm9iamVjdC5hdXRvVXBkYXRlPSExKSxyLm9iamVjdC5sZXZlbHM9W107bGV0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXtsZXQgYT1uW2ldO3Iub2JqZWN0LmxldmVscy5wdXNoKHtvYmplY3Q6YS5vYmplY3QudXVpZCxkaXN0YW5jZTphLmRpc3RhbmNlfSl9cmV0dXJuIHJ9fSxLdWU9bmV3IGosWnVlPW5ldyBlbixKdWU9bmV3IGVuLElncj1uZXcgaixRdWU9bmV3IE1lLGFNPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IE1lLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxyKXt0aGlzLnNrZWxldG9uPXQscj09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxyPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KHIpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShyKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgZW4scj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7dC54PXIuZ2V0WChuKSx0Lnk9ci5nZXRZKG4pLHQuej1yLmdldFoobiksdC53PXIuZ2V0VyhuKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLHIuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LHIpe2xldCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O1p1ZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSnVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksS3VlLmNvcHkocikuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksci5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBhPUp1ZS5nZXRDb21wb25lbnQobyk7aWYoYSE9PTApe2xldCBzPVp1ZS5nZXRDb21wb25lbnQobyk7UXVlLm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tzXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tzXSksci5hZGRTY2FsZWRWZWN0b3IoSWdyLmNvcHkoS3VlKS5hcHBseU1hdHJpeDQoUXVlKSxhKX19cmV0dXJuIHIuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07YU0ucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIHNNPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtzTS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBKZD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEsbj0xLGksbyxhLHMsbCxjPUxpLHU9TGksaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bn0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O0pkLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciB0aGU9bmV3IE1lLExncj1uZXcgTWUsbE09Y2xhc3N7Y29uc3RydWN0b3IodD1bXSxyPVtdKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9cix0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9aW5pdCgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjE2KSxyLmxlbmd0aD09PTApdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCBuPTAsaT10aGlzLmJvbmVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKX19Y2FsY3VsYXRlSW52ZXJzZXMoKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPW5ldyBNZTt0aGlzLmJvbmVzW3RdJiZuLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChuKX19cG9zZSgpe2ZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiZuLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiYobi5wYXJlbnQmJm4ucGFyZW50LmlzQm9uZT8obi5tYXRyaXguY29weShuLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbi5tYXRyaXgubXVsdGlwbHkobi5tYXRyaXhXb3JsZCkpOm4ubWF0cml4LmNvcHkobi5tYXRyaXhXb3JsZCksbi5tYXRyaXguZGVjb21wb3NlKG4ucG9zaXRpb24sbi5xdWF0ZXJuaW9uLG4uc2NhbGUpKX19dXBkYXRlKCl7bGV0IHQ9dGhpcy5ib25lcyxyPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXT90W29dLm1hdHJpeFdvcmxkOkxncjt0aGUubXVsdGlwbHlNYXRyaWNlcyhzLHJbb10pLHRoZS50b0FycmF5KG4sbyoxNil9aSE9PW51bGwmJihpLm5lZWRzVXBkYXRlPSEwKX1jbG9uZSgpe3JldHVybiBuZXcgbE0odGhpcy5ib25lcyx0aGlzLmJvbmVJbnZlcnNlcyl9Y29tcHV0ZUJvbmVUZXh0dXJlKCl7bGV0IHQ9TWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoKjQpO3Q9UmZlKHQpLHQ9TWF0aC5tYXgodCw0KTtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KHQqdCo0KTtyLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7bGV0IG49bmV3IEpkKHIsdCx0LFFvLGpkKTtyZXR1cm4gbi5uZWVkc1VwZGF0ZT0hMCx0aGlzLmJvbmVNYXRyaWNlcz1yLHRoaXMuYm9uZVRleHR1cmU9bix0aGlzLmJvbmVUZXh0dXJlU2l6ZT10LHRoaXN9Z2V0Qm9uZUJ5TmFtZSh0KXtmb3IobGV0IHI9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMuYm9uZXNbcl07aWYoaS5uYW1lPT09dClyZXR1cm4gaX19ZGlzcG9zZSgpe3RoaXMuYm9uZVRleHR1cmUhPT1udWxsJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LHIpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtsZXQgbz10LmJvbmVzW25dLGE9cltvXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxhPW5ldyBzTSksdGhpcy5ib25lcy5wdXNoKGEpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7bGV0IHI9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7bGV0IGE9cltpXTt0LmJvbmVzLnB1c2goYS51dWlkKTtsZXQgcz1uW2ldO3QuYm9uZUludmVyc2VzLnB1c2gocy50b0FycmF5KCkpfXJldHVybiB0fX0scm09Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbixpPTEpe3R5cGVvZiBuPT0ibnVtYmVyIiYmKGk9bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LHIsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cm0ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBlaGU9bmV3IE1lLHJoZT1uZXcgTWUsRFY9W10sRlA9bmV3IHRpLGk2PWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsciksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcm0obmV3IEZsb2F0MzJBcnJheShuKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxyKXtyLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLm1hdHJpeFdvcmxkLGk9dGhpcy5jb3VudDtpZihGUC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LEZQLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsRlAubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBvPTA7bzxpO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLGVoZSkscmhlLm11bHRpcGx5TWF0cmljZXMobixlaGUpLEZQLm1hdHJpeFdvcmxkPXJoZSxGUC5yYXljYXN0KHQsRFYpO2ZvcihsZXQgYT0wLHM9RFYubGVuZ3RoO2E8czthKyspe2xldCBsPURWW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsci5wdXNoKGwpfURWLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQscil7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcm0obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxyLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxyKXtyLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2k2LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIEdpPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O0dpLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBuaGU9bmV3IGosaWhlPW5ldyBqLG9oZT1uZXcgTWUsbXV0PW5ldyBKZixPVj1uZXcgWmYsY2g9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBHaSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCBpPTEsbz1yLmNvdW50O2k8bztpKyspbmhlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpLTEpLGloZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSksbltpXT1uW2ktMV0sbltpXSs9bmhlLmRpc3RhbmNlVG8oaWhlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgeGUobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLE9WLmNvcHkobi5ib3VuZGluZ1NwaGVyZSksT1YuYXBwbHlNYXRyaXg0KGkpLE9WLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKE9WKT09PSExKXJldHVybjtvaGUuY29weShpKS5pbnZlcnQoKSxtdXQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KG9oZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcyxjPW5ldyBqLHU9bmV3IGosaD1uZXcgaixmPW5ldyBqLHA9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZD1uLmluZGV4LF89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGQhPT1udWxsKXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oZC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtsZXQgQz1kLmdldFgoYiksUD1kLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxDKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxQKSxtdXQuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBPPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO088dC5uZWFyfHxPPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOk8scG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCB5PU1hdGgubWF4KDAsYS5zdGFydCkseD1NYXRoLm1pbihfLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBiPXksUz14LTE7YjxTO2IrPXApe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIrMSksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgUD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtQPHQubmVhcnx8UD50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpQLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19fWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2NoLnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIGFoZT1uZXcgaixzaGU9bmV3IGosQWE9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgaT0wLG89ci5jb3VudDtpPG87aSs9MilhaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLHNoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSsxKSxuW2ldPWk9PT0wPzA6bltpLTFdLG5baSsxXT1uW2ldK2FoZS5kaXN0YW5jZVRvKHNoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07QWEucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19O282LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBubT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtubS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgbGhlPW5ldyBNZSxyaHQ9bmV3IEpmLHpWPW5ldyBaZixGVj1uZXcgaixpbT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IFBlLHI9bmV3IG5tKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHpWLmNvcHkobi5ib3VuZGluZ1NwaGVyZSkselYuYXBwbHlNYXRyaXg0KGkpLHpWLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKHpWKT09PSExKXJldHVybjtsaGUuY29weShpKS5pbnZlcnQoKSxyaHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGxoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPW4uaW5kZXgsaD1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsYS5zdGFydCkscD1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBkPWYsZz1wO2Q8ZztkKyspe2xldCBfPWMuZ2V0WChkKTtGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsXyksY2hlKEZWLF8sbCxpLHQscix0aGlzKX19ZWxzZXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oaC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKUZWLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCxkKSxjaGUoRlYsZCxsLGksdCxyLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2ltLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBjaGUoZSx0LHIsbixpLG8sYSl7bGV0IHM9cmh0LmRpc3RhbmNlU3FUb1BvaW50KGUpO2lmKHM8cil7bGV0IGw9bmV3IGo7cmh0LmNsb3Nlc3RQb2ludFRvUG9pbnQoZSxsKSxsLmFwcGx5TWF0cml4NChuKTtsZXQgYz1pLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPGkubmVhcnx8Yz5pLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19dmFyIHlVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj1hIT09dm9pZCAwP2E6aWksdGhpcy5tYWdGaWx0ZXI9byE9PXZvaWQgMD9vOmlpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O3lVLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgdlU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzLmZvcm1hdD1uLHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt2VS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIGE2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoLGYpe3N1cGVyKG51bGwsYSxzLGwsYyx1LGksbyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTthNi5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgeFU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyl7c3VwZXIodCxyLG4saSxvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt4VS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBGMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTgsbj0wLGk9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6cix0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6aX0scj1NYXRoLm1heCgzLHIpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IGosdT1uZXcgTHQ7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PXI7aCsrLGYrPTMpe2xldCBwPW4raC9yKmk7Yy54PXQqTWF0aC5jb3MocCksYy55PXQqTWF0aC5zaW4ocCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLHUueD0oYVtmXS90KzEpLzIsdS55PShhW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1yO2grKylvLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRjEodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxvbT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9OCxvPTEsYT0hMSxzPTAsbD1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTpyLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6byxvcGVuRW5kZWQ6YSx0aGV0YVN0YXJ0OnMsdGhldGFMZW5ndGg6bH07bGV0IGM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pO2xldCB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9MCxnPVtdLF89bi8yLHk9MDt4KCksYT09PSExJiYodD4wJiZiKCEwKSxyPjAmJmIoITEpKSx0aGlzLnNldEluZGV4KHUpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiB4KCl7bGV0IFM9bmV3IGosQz1uZXcgaixQPTAsaz0oci10KS9uO2ZvcihsZXQgTz0wO088PW87TysrKXtsZXQgRD1bXSxCPU8vbyxJPUIqKHItdCkrdDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IFI9TC9pLEY9UipsK3Msej1NYXRoLnNpbihGKSxVPU1hdGguY29zKEYpO0MueD1JKnosQy55PS1CKm4rXyxDLno9SSpVLGgucHVzaChDLngsQy55LEMueiksUy5zZXQoeixrLFUpLm5vcm1hbGl6ZSgpLGYucHVzaChTLngsUy55LFMueikscC5wdXNoKFIsMS1CKSxELnB1c2goZCsrKX1nLnB1c2goRCl9Zm9yKGxldCBPPTA7TzxpO08rKylmb3IobGV0IEQ9MDtEPG87RCsrKXtsZXQgQj1nW0RdW09dLEk9Z1tEKzFdW09dLEw9Z1tEKzFdW08rMV0sUj1nW0RdW08rMV07dS5wdXNoKEIsSSxSKSx1LnB1c2goSSxMLFIpLFArPTZ9Yy5hZGRHcm91cCh5LFAsMCkseSs9UH1mdW5jdGlvbiBiKFMpe2xldCBDPWQsUD1uZXcgTHQsaz1uZXcgaixPPTAsRD1TPT09ITA/dDpyLEI9Uz09PSEwPzE6LTE7Zm9yKGxldCBMPTE7TDw9aTtMKyspaC5wdXNoKDAsXypCLDApLGYucHVzaCgwLEIsMCkscC5wdXNoKC41LC41KSxkKys7bGV0IEk9ZDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IEY9TC9pKmwrcyx6PU1hdGguY29zKEYpLFU9TWF0aC5zaW4oRik7ay54PUQqVSxrLnk9XypCLGsuej1EKnosaC5wdXNoKGsueCxrLnksay56KSxmLnB1c2goMCxCLDApLFAueD16Ki41Ky41LFAueT1VKi41KkIrLjUscC5wdXNoKFAueCxQLnkpLGQrK31mb3IobGV0IEw9MDtMPGk7TCsrKXtsZXQgUj1DK0wsRj1JK0w7Uz09PSEwP3UucHVzaChGLEYrMSxSKTp1LnB1c2goRisxLEYsUiksTys9M31jLmFkZEdyb3VwKHksTyxTPT09ITA/MToyKSx5Kz1PfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvbSh0LnJhZGl1c1RvcCx0LnJhZGl1c0JvdHRvbSx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sQjE9Y2xhc3MgZXh0ZW5kcyBvbXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49OCxpPTEsbz0hMSxhPTAscz1NYXRoLlBJKjIpe3N1cGVyKDAsdCxyLG4saSxvLGEscyksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OnIscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBCMSh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sdWg9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PVtdLHI9W10sbj0xLGk9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczp0LGluZGljZXM6cixyYWRpdXM6bixkZXRhaWw6aX07bGV0IG89W10sYT1bXTtzKGkpLGMobiksdSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLnNsaWNlKCksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpLGk9PT0wP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtmdW5jdGlvbiBzKHgpe2xldCBiPW5ldyBqLFM9bmV3IGosQz1uZXcgajtmb3IobGV0IFA9MDtQPHIubGVuZ3RoO1ArPTMpcChyW1ArMF0sYikscChyW1ArMV0sUykscChyW1ArMl0sQyksbChiLFMsQyx4KX1mdW5jdGlvbiBsKHgsYixTLEMpe2xldCBQPUMrMSxrPVtdO2ZvcihsZXQgTz0wO088PVA7TysrKXtrW09dPVtdO2xldCBEPXguY2xvbmUoKS5sZXJwKFMsTy9QKSxCPWIuY2xvbmUoKS5sZXJwKFMsTy9QKSxJPVAtTztmb3IobGV0IEw9MDtMPD1JO0wrKylMPT09MCYmTz09PVA/a1tPXVtMXT1EOmtbT11bTF09RC5jbG9uZSgpLmxlcnAoQixML0kpfWZvcihsZXQgTz0wO088UDtPKyspZm9yKGxldCBEPTA7RDwyKihQLU8pLTE7RCsrKXtsZXQgQj1NYXRoLmZsb29yKEQvMik7RCUyPT09MD8oZihrW09dW0IrMV0pLGYoa1tPKzFdW0JdKSxmKGtbT11bQl0pKTooZihrW09dW0IrMV0pLGYoa1tPKzFdW0IrMV0pLGYoa1tPKzFdW0JdKSl9fWZ1bmN0aW9uIGMoeCl7bGV0IGI9bmV3IGo7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz0zKWIueD1vW1MrMF0sYi55PW9bUysxXSxiLno9b1tTKzJdLGIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoeCksb1tTKzBdPWIueCxvW1MrMV09Yi55LG9bUysyXT1iLnp9ZnVuY3Rpb24gdSgpe2xldCB4PW5ldyBqO2ZvcihsZXQgYj0wO2I8by5sZW5ndGg7Yis9Myl7eC54PW9bYiswXSx4Lnk9b1tiKzFdLHguej1vW2IrMl07bGV0IFM9Xyh4KS8yL01hdGguUEkrLjUsQz15KHgpL01hdGguUEkrLjU7YS5wdXNoKFMsMS1DKX1kKCksaCgpfWZ1bmN0aW9uIGgoKXtmb3IobGV0IHg9MDt4PGEubGVuZ3RoO3grPTYpe2xldCBiPWFbeCswXSxTPWFbeCsyXSxDPWFbeCs0XSxQPU1hdGgubWF4KGIsUyxDKSxrPU1hdGgubWluKGIsUyxDKTtQPi45JiZrPC4xJiYoYjwuMiYmKGFbeCswXSs9MSksUzwuMiYmKGFbeCsyXSs9MSksQzwuMiYmKGFbeCs0XSs9MSkpfX1mdW5jdGlvbiBmKHgpe28ucHVzaCh4LngseC55LHgueil9ZnVuY3Rpb24gcCh4LGIpe2xldCBTPXgqMztiLng9dFtTKzBdLGIueT10W1MrMV0sYi56PXRbUysyXX1mdW5jdGlvbiBkKCl7bGV0IHg9bmV3IGosYj1uZXcgaixTPW5ldyBqLEM9bmV3IGosUD1uZXcgTHQsaz1uZXcgTHQsTz1uZXcgTHQ7Zm9yKGxldCBEPTAsQj0wO0Q8by5sZW5ndGg7RCs9OSxCKz02KXt4LnNldChvW0QrMF0sb1tEKzFdLG9bRCsyXSksYi5zZXQob1tEKzNdLG9bRCs0XSxvW0QrNV0pLFMuc2V0KG9bRCs2XSxvW0QrN10sb1tEKzhdKSxQLnNldChhW0IrMF0sYVtCKzFdKSxrLnNldChhW0IrMl0sYVtCKzNdKSxPLnNldChhW0IrNF0sYVtCKzVdKSxDLmNvcHkoeCkuYWRkKGIpLmFkZChTKS5kaXZpZGVTY2FsYXIoMyk7bGV0IEk9XyhDKTtnKFAsQiswLHgsSSksZyhrLEIrMixiLEkpLGcoTyxCKzQsUyxJKX19ZnVuY3Rpb24gZyh4LGIsUyxDKXtDPDAmJngueD09PTEmJihhW2JdPXgueC0xKSxTLng9PT0wJiZTLno9PT0wJiYoYVtiXT1DLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gXyh4KXtyZXR1cm4gTWF0aC5hdGFuMih4LnosLXgueCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gTWF0aC5hdGFuMigteC55LE1hdGguc3FydCh4LngqeC54K3gueip4LnopKX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgdWgodC52ZXJ0aWNlcyx0LmluZGljZXMsdC5yYWRpdXMsdC5kZXRhaWxzKX19LEgxPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uLG89Wy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxhPVszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XTtzdXBlcihvLGEsdCxyKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBIMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxCVj1uZXcgaixIVj1uZXcgaixndXQ9bmV3IGosVlY9bmV3IG9pLHM2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsLHI9MSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dCx0aHJlc2hvbGRBbmdsZTpyfSx0IT09bnVsbCl7bGV0IGk9TWF0aC5wb3coMTAsNCksbz1NYXRoLmNvcyhQMSpyKSxhPXQuZ2V0SW5kZXgoKSxzPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGw9YT9hLmNvdW50OnMuY291bnQsYz1bMCwwLDBdLHU9WyJhIiwiYiIsImMiXSxoPW5ldyBBcnJheSgzKSxmPXt9LHA9W107Zm9yKGxldCBkPTA7ZDxsO2QrPTMpe2E/KGNbMF09YS5nZXRYKGQpLGNbMV09YS5nZXRYKGQrMSksY1syXT1hLmdldFgoZCsyKSk6KGNbMF09ZCxjWzFdPWQrMSxjWzJdPWQrMik7bGV0e2E6ZyxiOl8sYzp5fT1WVjtpZihnLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzBdKSxfLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzFdKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzJdKSxWVi5nZXROb3JtYWwoZ3V0KSxoWzBdPWAke01hdGgucm91bmQoZy54KmkpfSwke01hdGgucm91bmQoZy55KmkpfSwke01hdGgucm91bmQoZy56KmkpfWAsaFsxXT1gJHtNYXRoLnJvdW5kKF8ueCppKX0sJHtNYXRoLnJvdW5kKF8ueSppKX0sJHtNYXRoLnJvdW5kKF8ueippKX1gLGhbMl09YCR7TWF0aC5yb3VuZCh5LngqaSl9LCR7TWF0aC5yb3VuZCh5LnkqaSl9LCR7TWF0aC5yb3VuZCh5LnoqaSl9YCwhKGhbMF09PT1oWzFdfHxoWzFdPT09aFsyXXx8aFsyXT09PWhbMF0pKWZvcihsZXQgeD0wO3g8Mzt4Kyspe2xldCBiPSh4KzEpJTMsUz1oW3hdLEM9aFtiXSxQPVZWW3VbeF1dLGs9VlZbdVtiXV0sTz1gJHtTfV8ke0N9YCxEPWAke0N9XyR7U31gO0QgaW4gZiYmZltEXT8oZ3V0LmRvdChmW0RdLm5vcm1hbCk8PW8mJihwLnB1c2goUC54LFAueSxQLnopLHAucHVzaChrLngsay55LGsueikpLGZbRF09bnVsbCk6TyBpbiBmfHwoZltPXT17aW5kZXgwOmNbeF0saW5kZXgxOmNbYl0sbm9ybWFsOmd1dC5jbG9uZSgpfSl9fWZvcihsZXQgZCBpbiBmKWlmKGZbZF0pe2xldHtpbmRleDA6ZyxpbmRleDE6X309ZltkXTtCVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZyksSFYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLF8pLHAucHVzaChCVi54LEJWLnksQlYueikscC5wdXNoKEhWLngsSFYueSxIVi56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShwLDMpKX19fSxmcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLHIpfWdldFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiByfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIHJ9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgcj1bXSxuLGk9dGhpcy5nZXRQb2ludCgwKSxvPTA7ci5wdXNoKDApO2ZvcihsZXQgYT0xO2E8PXQ7YSsrKW49dGhpcy5nZXRQb2ludChhL3QpLG8rPW4uZGlzdGFuY2VUbyhpKSxyLnB1c2gobyksaT1uO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1yLHJ9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxyKXtsZXQgbj10aGlzLmdldExlbmd0aHMoKSxpPTAsbz1uLmxlbmd0aCxhO3I/YT1yOmE9dCpuW28tMV07bGV0IHM9MCxsPW8tMSxjO2Zvcig7czw9bDspaWYoaT1NYXRoLmZsb29yKHMrKGwtcykvMiksYz1uW2ldLWEsYzwwKXM9aSsxO2Vsc2UgaWYoYz4wKWw9aS0xO2Vsc2V7bD1pO2JyZWFrfWlmKGk9bCxuW2ldPT09YSlyZXR1cm4gaS8oby0xKTtsZXQgdT1uW2ldLGY9bltpKzFdLXUscD0oYS11KS9mO3JldHVybihpK3ApLyhvLTEpfWdldFRhbmdlbnQodCxyKXtsZXQgaT10LTFlLTQsbz10KzFlLTQ7aTwwJiYoaT0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQoaSkscz10aGlzLmdldFBvaW50KG8pLGw9cnx8KGEuaXNWZWN0b3IyP25ldyBMdDpuZXcgaik7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxyKXtsZXQgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixyKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQscil7bGV0IG49bmV3IGosaT1bXSxvPVtdLGE9W10scz1uZXcgaixsPW5ldyBNZTtmb3IobGV0IHA9MDtwPD10O3ArKyl7bGV0IGQ9cC90O2lbcF09dGhpcy5nZXRUYW5nZW50QXQoZCxuZXcgail9b1swXT1uZXcgaixhWzBdPW5ldyBqO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhpWzBdLngpLGg9TWF0aC5hYnMoaVswXS55KSxmPU1hdGguYWJzKGlbMF0ueik7dTw9YyYmKGM9dSxuLnNldCgxLDAsMCkpLGg8PWMmJihjPWgsbi5zZXQoMCwxLDApKSxmPD1jJiZuLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoaVswXSxuKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sb1swXSk7Zm9yKGxldCBwPTE7cDw9dDtwKyspe2lmKG9bcF09b1twLTFdLmNsb25lKCksYVtwXT1hW3AtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhpW3AtMV0saVtwXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgZD1NYXRoLmFjb3MoWm8oaVtwLTFdLmRvdChpW3BdKSwtMSwxKSk7b1twXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsZCkpfWFbcF0uY3Jvc3NWZWN0b3JzKGlbcF0sb1twXSl9aWYocj09PSEwKXtsZXQgcD1NYXRoLmFjb3MoWm8ob1swXS5kb3Qob1t0XSksLTEsMSkpO3AvPXQsaVswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKHA9LXApO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKW9bZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhpW2RdLHAqZCkpLGFbZF0uY3Jvc3NWZWN0b3JzKGlbZF0sb1tkXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0sVjE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MSxpPTEsbz0wLGE9TWF0aC5QSSoyLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1yLHRoaXMueFJhZGl1cz1uLHRoaXMueVJhZGl1cz1pLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQsaT1NYXRoLlBJKjIsbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPWk7Zm9yKDtvPmk7KW8tPWk7bzxOdW1iZXIuRVBTSUxPTiYmKGE/bz0wOm89aSksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFhJiYobz09PWk/bz0taTpvPW8taSk7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLHA9Yy10aGlzLmFZO2w9Zip1LXAqaCt0aGlzLmFYLGM9ZipoK3AqdSt0aGlzLmFZfXJldHVybiBuLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O1YxLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbDY9Y2xhc3MgZXh0ZW5kcyBWMXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSl7c3VwZXIodCxyLG4sbixpLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtsNi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiBEaHQoKXtsZXQgZT0wLHQ9MCxyPTAsbj0wO2Z1bmN0aW9uIGkobyxhLHMsbCl7ZT1vLHQ9cyxyPS0zKm8rMyphLTIqcy1sLG49MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7aShhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyx1LGgpe2xldCBmPShhLW8pL2MtKHMtbykvKGMrdSkrKHMtYSkvdSxwPShzLWEpL3UtKGwtYSkvKHUraCkrKGwtcykvaDtmKj11LHAqPXUsaShhLHMsZixwKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm8scz1hKm87cmV0dXJuIGUrdCpvK3IqYStuKnN9fX12YXIgVVY9bmV3IGosX3V0PW5ldyBEaHQseXV0PW5ldyBEaHQsdnV0PW5ldyBEaHQsYzY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdLHI9ITEsbj0iY2VudHJpcGV0YWwiLGk9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPXIsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnBvaW50cyxvPWkubGVuZ3RoLGE9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQscz1NYXRoLmZsb29yKGEpLGw9YS1zO3RoaXMuY2xvc2VkP3MrPXM+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKHMpL28pKzEpKm86bD09PTAmJnM9PT1vLTEmJihzPW8tMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fHM+MD9jPWlbKHMtMSklb106KFVWLnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYz1VVik7bGV0IGg9aVtzJW9dLGY9aVsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/dT1pWyhzKzIpJW9dOihVVi5zdWJWZWN0b3JzKGlbby0xXSxpW28tMl0pLmFkZChpW28tMV0pLHU9VVYpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBwPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxkPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCkscCksZz1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLHApLF89TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxwKTtnPDFlLTQmJihnPTEpLGQ8MWUtNCYmKGQ9ZyksXzwxZS00JiYoXz1nKSxfdXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCxkLGcsXykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGQsZyxfKX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoX3V0LmluaXRDYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCx0aGlzLnRlbnNpb24pLHl1dC5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBuLnNldChfdXQuY2FsYyhsKSx5dXQuY2FsYyhsKSx2dXQuY2FsYyhsKSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCByPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5wb2ludHNbcl07dC5wb2ludHMucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBqKCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07YzYucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiB1aGUoZSx0LHIsbixpKXtsZXQgbz0obi10KSouNSxhPShpLXIpKi41LHM9ZSplLGw9ZSpzO3JldHVybigyKnItMipuK28rYSkqbCsoLTMqciszKm4tMipvLWEpKnMrbyplK3J9ZnVuY3Rpb24ga2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqdH1mdW5jdGlvbiBSZ3IoZSx0KXtyZXR1cm4gMiooMS1lKSplKnR9ZnVuY3Rpb24gTmdyKGUsdCl7cmV0dXJuIGUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4pe3JldHVybiBrZ3IoZSx0KStSZ3IoZSxyKStOZ3IoZSxuKX1mdW5jdGlvbiBEZ3IoZSx0KXtsZXQgcj0xLWU7cmV0dXJuIHIqcipyKnR9ZnVuY3Rpb24gT2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiAzKnIqciplKnR9ZnVuY3Rpb24gemdyKGUsdCl7cmV0dXJuIDMqKDEtZSkqZSplKnR9ZnVuY3Rpb24gRmdyKGUsdCl7cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gV1AoZSx0LHIsbixpKXtyZXR1cm4gRGdyKGUsdCkrT2dyKGUscikremdyKGUsbikrRmdyKGUsaSl9dmFyIGNNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQsaT1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIG4uc2V0KFdQKHQsaS54LG8ueCxhLngscy54KSxXUCh0LGkueSxvLnksYS55LHMueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07Y00ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgdTY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGosbj1uZXcgaixpPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1uLHRoaXMudjM9aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpLFdQKHQsaS56LG8ueixhLnoscy56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt1Ni5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgVTE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCxyPW5ldyBMdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yO3JldHVybiB0PT09MT9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LHIpe3JldHVybiB0aGlzLmdldFBvaW50KHQscil9Z2V0VGFuZ2VudCh0LHIpe2xldCBuPXJ8fG5ldyBMdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1UxLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1yfWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHVNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW59Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07dU0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIGhNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSksR1AodCxpLnosby56LGEueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07aE0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBmTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz0oaS5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1pW2E9PT0wP2E6YS0xXSxjPWlbYV0sdT1pW2E+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOmErMV0saD1pW2E+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOmErMl07cmV0dXJuIG4uc2V0KHVoZShzLGwueCxjLngsdS54LGgueCksdWhlKHMsbC55LGMueSx1LnksaC55KSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2gobmV3IEx0KCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpc319O2ZNLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBPaHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bDYsQ2F0bXVsbFJvbUN1cnZlMzpjNixDdWJpY0JlemllckN1cnZlOmNNLEN1YmljQmV6aWVyQ3VydmUzOnU2LEVsbGlwc2VDdXJ2ZTpWMSxMaW5lQ3VydmU6VTEsTGluZUN1cnZlMzpiVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp1TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6aE0sU3BsaW5lQ3VydmU6Zk19KSx3VT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCkscj10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMocil8fHRoaXMuY3VydmVzLnB1c2gobmV3IFUxKHIsdCkpfWdldFBvaW50KHQscil7bGV0IG49dCp0aGlzLmdldExlbmd0aCgpLGk9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPGkubGVuZ3RoOyl7aWYoaVtvXT49bil7bGV0IGE9aVtvXS1uLHM9dGhpcy5jdXJ2ZXNbb10sbD1zLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLWEvbDtyZXR1cm4gcy5nZXRQb2ludEF0KGMscil9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLHI9MDtmb3IobGV0IG49MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtuPGk7bisrKXIrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChyKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIucHVzaChyWzBdKSxyfWdldFBvaW50cyh0PTEyKXtsZXQgcj1bXSxuO2ZvcihsZXQgaT0wLG89dGhpcy5jdXJ2ZXM7aTxvLmxlbmd0aDtpKyspe2xldCBhPW9baV0scz1hJiZhLmlzRWxsaXBzZUN1cnZlP3QqMjphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQsbD1hLmdldFBvaW50cyhzKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtuJiZuLmVxdWFscyh1KXx8KHIucHVzaCh1KSxuPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIubGVuZ3RoPjEmJiFyW3IubGVuZ3RoLTFdLmVxdWFscyhyWzBdKSYmci5wdXNoKHJbMF0pLHJ9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmN1cnZlc1tyXTt0LmN1cnZlcy5wdXNoKGkudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2gobmV3IE9odFtpLnR5cGVdKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0scTE9Y2xhc3MgZXh0ZW5kcyB3VXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEx0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgcj0xLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmxpbmVUbyh0W3JdLngsdFtyXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31saW5lVG8odCxyKXtsZXQgbj1uZXcgVTEodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe2xldCBvPW5ldyB1TSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe2xldCBzPW5ldyBjTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpLG5ldyBMdChvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IHI9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxuPW5ldyBmTShyKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCtzLHIrbCxuLGksbyxhKSx0aGlzfWFic2FyYyh0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LHIsbixuLGksbyxhKSx0aGlzfWVsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxyK3UsbixpLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LHIsbixpLG8sYSxzLGwpe2xldCBjPW5ldyBWMSh0LHIsbixpLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sS2M9Y2xhc3MgZXh0ZW5kcyBxMXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7bjxpO24rKylyW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiByfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmhvbGVzW3JdO3QuaG9sZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCByPTAsbj10LmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmhvbGVzW3JdO3RoaXMuaG9sZXMucHVzaChuZXcgcTEoKS5mcm9tSlNPTihpKSl9cmV0dXJuIHRoaXN9fSxCZ3I9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGUsdCxyPTIpe2xldCBuPXQmJnQubGVuZ3RoLGk9bj90WzBdKnI6ZS5sZW5ndGgsbz1aZmUoZSwwLGksciwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2xldCBzLGwsYyx1LGgsZixwO2lmKG4mJihvPUdncihlLHQsbyxyKSksZS5sZW5ndGg+ODAqcil7cz1jPWVbMF0sbD11PWVbMV07Zm9yKGxldCBkPXI7ZDxpO2QrPXIpaD1lW2RdLGY9ZVtkKzFdLGg8cyYmKHM9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7cD1NYXRoLm1heChjLXMsdS1sKSxwPXAhPT0wPzEvcDowfXJldHVybiBoNihvLGEscixzLGwscCksYX19O2Z1bmN0aW9uIFpmZShlLHQscixuLGkpe2xldCBvLGE7aWYoaT09PWUwcihlLHQscixuKT4wKWZvcihvPXQ7bzxyO28rPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtlbHNlIGZvcihvPXItbjtvPj10O28tPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtyZXR1cm4gYSYmWlUoYSxhLm5leHQpJiYocDYoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gRzAoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgcj1lLG47ZG8gaWYobj0hMSwhci5zdGVpbmVyJiYoWlUocixyLm5leHQpfHxhaShyLnByZXYscixyLm5leHQpPT09MCkpe2lmKHA2KHIpLHI9dD1yLnByZXYscj09PXIubmV4dClicmVhaztuPSEwfWVsc2Ugcj1yLm5leHQ7d2hpbGUobnx8ciE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGg2KGUsdCxyLG4saSxvLGEpe2lmKCFlKXJldHVybjshYSYmbyYmJGdyKGUsbixpLG8pO2xldCBzPWUsbCxjO2Zvcig7ZS5wcmV2IT09ZS5uZXh0Oyl7aWYobD1lLnByZXYsYz1lLm5leHQsbz9WZ3IoZSxuLGksbyk6SGdyKGUpKXt0LnB1c2gobC5pL3IpLHQucHVzaChlLmkvciksdC5wdXNoKGMuaS9yKSxwNihlKSxlPWMubmV4dCxzPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PXMpe2E/YT09PTE/KGU9VWdyKEcwKGUpLHQsciksaDYoZSx0LHIsbixpLG8sMikpOmE9PT0yJiZxZ3IoZSx0LHIsbixpLG8pOmg2KEcwKGUpLHQscixuLGksbywxKTticmVha319fWZ1bmN0aW9uIEhncihlKXtsZXQgdD1lLnByZXYscj1lLG49ZS5uZXh0O2lmKGFpKHQscixuKT49MClyZXR1cm4hMTtsZXQgaT1lLm5leHQubmV4dDtmb3IoO2khPT1lLnByZXY7KXtpZihIMyh0LngsdC55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmYWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBWZ3IoZSx0LHIsbil7bGV0IGk9ZS5wcmV2LG89ZSxhPWUubmV4dDtpZihhaShpLG8sYSk+PTApcmV0dXJuITE7bGV0IHM9aS54PG8ueD9pLng8YS54P2kueDphLng6by54PGEueD9vLng6YS54LGw9aS55PG8ueT9pLnk8YS55P2kueTphLnk6by55PGEueT9vLnk6YS55LGM9aS54Pm8ueD9pLng+YS54P2kueDphLng6by54PmEueD9vLng6YS54LHU9aS55Pm8ueT9pLnk+YS55P2kueTphLnk6by55PmEueT9vLnk6YS55LGg9bmh0KHMsbCx0LHIsbiksZj1uaHQoYyx1LHQscixuKSxwPWUucHJldlosZD1lLm5leHRaO2Zvcig7cCYmcC56Pj1oJiZkJiZkLno8PWY7KXtpZihwIT09ZS5wcmV2JiZwIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxwLngscC55KSYmYWkocC5wcmV2LHAscC5uZXh0KT49MHx8KHA9cC5wcmV2WixkIT09ZS5wcmV2JiZkIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxkLngsZC55KSYmYWkoZC5wcmV2LGQsZC5uZXh0KT49MCkpcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1mOyl7aWYoZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIFVncihlLHQscil7bGV0IG49ZTtkb3tsZXQgaT1uLnByZXYsbz1uLm5leHQubmV4dDshWlUoaSxvKSYmSmZlKGksbixuLm5leHQsbykmJmY2KGksbykmJmY2KG8saSkmJih0LnB1c2goaS5pL3IpLHQucHVzaChuLmkvciksdC5wdXNoKG8uaS9yKSxwNihuKSxwNihuLm5leHQpLG49ZT1vKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIEcwKG4pfWZ1bmN0aW9uIHFncihlLHQscixuLGksbyl7bGV0IGE9ZTtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJkpncihhLHMpKXtsZXQgbD1RZmUoYSxzKTthPUcwKGEsYS5uZXh0KSxsPUcwKGwsbC5uZXh0KSxoNihhLHQscixuLGksbyksaDYobCx0LHIsbixpLG8pO3JldHVybn1zPXMubmV4dH1hPWEubmV4dH13aGlsZShhIT09ZSl9ZnVuY3Rpb24gR2dyKGUsdCxyLG4pe2xldCBpPVtdLG8sYSxzLGwsYztmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qbixsPW88YS0xP3RbbysxXSpuOmUubGVuZ3RoLGM9WmZlKGUscyxsLG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGkucHVzaChaZ3IoYykpO2ZvcihpLnNvcnQoV2dyKSxvPTA7bzxpLmxlbmd0aDtvKyspWWdyKGlbb10scikscj1HMChyLHIubmV4dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gV2dyKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24gWWdyKGUsdCl7aWYodD1qZ3IoZSx0KSx0KXtsZXQgcj1RZmUodCxlKTtHMCh0LHQubmV4dCksRzAocixyLm5leHQpfX1mdW5jdGlvbiBqZ3IoZSx0KXtsZXQgcj10LG49ZS54LGk9ZS55LG89LTEvMCxhO2Rve2lmKGk8PXIueSYmaT49ci5uZXh0LnkmJnIubmV4dC55IT09ci55KXtsZXQgZj1yLngrKGktci55KSooci5uZXh0Lngtci54KS8oci5uZXh0Lnktci55KTtpZihmPD1uJiZmPm8pe2lmKG89ZixmPT09bil7aWYoaT09PXIueSlyZXR1cm4gcjtpZihpPT09ci5uZXh0LnkpcmV0dXJuIHIubmV4dH1hPXIueDxyLm5leHQueD9yOnIubmV4dH19cj1yLm5leHR9d2hpbGUociE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKG49PT1vKXJldHVybiBhO2xldCBzPWEsbD1hLngsYz1hLnksdT0xLzAsaDtyPWE7ZG8gbj49ci54JiZyLng+PWwmJm4hPT1yLngmJkgzKGk8Yz9uOm8saSxsLGMsaTxjP286bixpLHIueCxyLnkpJiYoaD1NYXRoLmFicyhpLXIueSkvKG4tci54KSxmNihyLGUpJiYoaDx1fHxoPT09dSYmKHIueD5hLnh8fHIueD09PWEueCYmWGdyKGEscikpKSYmKGE9cix1PWgpKSxyPXIubmV4dDt3aGlsZShyIT09cyk7cmV0dXJuIGF9ZnVuY3Rpb24gWGdyKGUsdCl7cmV0dXJuIGFpKGUucHJldixlLHQucHJldik8MCYmYWkodC5uZXh0LGUsZS5uZXh0KTwwfWZ1bmN0aW9uICRncihlLHQscixuKXtsZXQgaT1lO2RvIGkuej09PW51bGwmJihpLno9bmh0KGkueCxpLnksdCxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dDt3aGlsZShpIT09ZSk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxLZ3IoaSl9ZnVuY3Rpb24gS2dyKGUpe2xldCB0LHIsbixpLG8sYSxzLGwsYz0xO2Rve2ZvcihyPWUsZT1udWxsLG89bnVsbCxhPTA7cjspe2ZvcihhKyssbj1yLHM9MCx0PTA7dDxjJiYocysrLG49bi5uZXh0WiwhIW4pO3QrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspcyE9PTAmJihsPT09MHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksbz9vLm5leHRaPWk6ZT1pLGkucHJldlo9byxvPWk7cj1ufW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmh0KGUsdCxyLG4saSl7cmV0dXJuIGU9MzI3NjcqKGUtcikqaSx0PTMyNzY3Kih0LW4pKmksZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIFpncihlKXtsZXQgdD1lLHI9ZTtkbyh0Lng8ci54fHx0Lng9PT1yLngmJnQueTxyLnkpJiYocj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSDMoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4oaS1hKSoodC1zKS0oZS1hKSooby1zKT49MCYmKGUtYSkqKG4tcyktKHItYSkqKHQtcyk+PTAmJihyLWEpKihvLXMpLShpLWEpKihuLXMpPj0wfWZ1bmN0aW9uIEpncihlLHQpe3JldHVybiBlLm5leHQuaSE9PXQuaSYmZS5wcmV2LmkhPT10LmkmJiFRZ3IoZSx0KSYmKGY2KGUsdCkmJmY2KHQsZSkmJnQwcihlLHQpJiYoYWkoZS5wcmV2LGUsdC5wcmV2KXx8YWkoZSx0LnByZXYsdCkpfHxaVShlLHQpJiZhaShlLnByZXYsZSxlLm5leHQpPjAmJmFpKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gYWkoZSx0LHIpe3JldHVybih0LnktZS55KSooci54LXQueCktKHQueC1lLngpKihyLnktdC55KX1mdW5jdGlvbiBaVShlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBKZmUoZSx0LHIsbil7bGV0IGk9R1YoYWkoZSx0LHIpKSxvPUdWKGFpKGUsdCxuKSksYT1HVihhaShyLG4sZSkpLHM9R1YoYWkocixuLHQpKTtyZXR1cm4hIShpIT09byYmYSE9PXN8fGk9PT0wJiZxVihlLHIsdCl8fG89PT0wJiZxVihlLG4sdCl8fGE9PT0wJiZxVihyLGUsbil8fHM9PT0wJiZxVihyLHQsbikpfWZ1bmN0aW9uIHFWKGUsdCxyKXtyZXR1cm4gdC54PD1NYXRoLm1heChlLngsci54KSYmdC54Pj1NYXRoLm1pbihlLngsci54KSYmdC55PD1NYXRoLm1heChlLnksci55KSYmdC55Pj1NYXRoLm1pbihlLnksci55KX1mdW5jdGlvbiBHVihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9ZnVuY3Rpb24gUWdyKGUsdCl7bGV0IHI9ZTtkb3tpZihyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZKZmUocixyLm5leHQsZSx0KSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gZjYoZSx0KXtyZXR1cm4gYWkoZS5wcmV2LGUsZS5uZXh0KTwwP2FpKGUsdCxlLm5leHQpPj0wJiZhaShlLGUucHJldix0KT49MDphaShlLHQsZS5wcmV2KTwwfHxhaShlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIHQwcihlLHQpe2xldCByPWUsbj0hMSxpPShlLngrdC54KS8yLG89KGUueSt0LnkpLzI7ZG8gci55Pm8hPXIubmV4dC55Pm8mJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihvLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHQ7d2hpbGUociE9PWUpO3JldHVybiBufWZ1bmN0aW9uIFFmZShlLHQpe2xldCByPW5ldyBpaHQoZS5pLGUueCxlLnkpLG49bmV3IGlodCh0LmksdC54LHQueSksaT1lLm5leHQsbz10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLG59ZnVuY3Rpb24gaGhlKGUsdCxyLG4pe2xldCBpPW5ldyBpaHQoZSx0LHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBwNihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uIGlodChlLHQscil7dGhpcy5pPWUsdGhpcy54PXQsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gZTByKGUsdCxyLG4pe2xldCBpPTA7Zm9yKGxldCBvPXQsYT1yLW47bzxyO28rPW4paSs9KGVbYV0tZVtvXSkqKGVbbysxXStlW2ErMV0pLGE9bztyZXR1cm4gaX12YXIgWmM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IHI9dC5sZW5ndGgsbj0wO2ZvcihsZXQgaT1yLTEsbz0wO288cjtpPW8rKyluKz10W2ldLngqdFtvXS55LXRbb10ueCp0W2ldLnk7cmV0dXJuIG4qLjV9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBaYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxyKXtsZXQgbj1bXSxpPVtdLG89W107ZmhlKHQpLHBoZShuLHQpO2xldCBhPXQubGVuZ3RoO3IuZm9yRWFjaChmaGUpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKWkucHVzaChhKSxhKz1yW2xdLmxlbmd0aCxwaGUobixyW2xdKTtsZXQgcz1CZ3IudHJpYW5ndWxhdGUobixpKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIGZoZShlKXtsZXQgdD1lLmxlbmd0aDt0PjImJmVbdC0xXS5lcXVhbHMoZVswXSkmJmUucG9wKCl9ZnVuY3Rpb24gcGhlKGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wdXNoKHRbcl0ueCksZS5wdXNoKHRbcl0ueSl9dmFyIGhoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCguNSwuNSksbmV3IEx0KC0uNSwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOnJ9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgbj10aGlzLGk9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc107YShjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gYShzKXtsZXQgbD1bXSxjPXIuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9yLmN1cnZlU2VnbWVudHM6MTIsdT1yLnN0ZXBzIT09dm9pZCAwP3Iuc3RlcHM6MSxoPXIuZGVwdGghPT12b2lkIDA/ci5kZXB0aDoxLGY9ci5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ci5iZXZlbEVuYWJsZWQ6ITAscD1yLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP3IuYmV2ZWxUaGlja25lc3M6LjIsZD1yLmJldmVsU2l6ZSE9PXZvaWQgMD9yLmJldmVsU2l6ZTpwLS4xLGc9ci5iZXZlbE9mZnNldCE9PXZvaWQgMD9yLmJldmVsT2Zmc2V0OjAsXz1yLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ci5iZXZlbFNlZ21lbnRzOjMseT1yLmV4dHJ1ZGVQYXRoLHg9ci5VVkdlbmVyYXRvciE9PXZvaWQgMD9yLlVWR2VuZXJhdG9yOnIwcjtyLmFtb3VudCE9PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxoPXIuYW1vdW50KTtsZXQgYixTPSExLEMsUCxrLE87eSYmKGI9eS5nZXRTcGFjZWRQb2ludHModSksUz0hMCxmPSExLEM9eS5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFA9bmV3IGosaz1uZXcgaixPPW5ldyBqKSxmfHwoXz0wLHA9MCxkPTAsZz0wKTtsZXQgRD1zLmV4dHJhY3RQb2ludHMoYyksQj1ELnNoYXBlLEk9RC5ob2xlcztpZighWmMuaXNDbG9ja1dpc2UoQikpe0I9Qi5yZXZlcnNlKCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO1pjLmlzQ2xvY2tXaXNlKGh0KSYmKElbcV09aHQucmV2ZXJzZSgpKX19bGV0IFI9WmMudHJpYW5ndWxhdGVTaGFwZShCLEkpLEY9Qjtmb3IobGV0IHE9MCxwdD1JLmxlbmd0aDtxPHB0O3ErKyl7bGV0IGh0PUlbcV07Qj1CLmNvbmNhdChodCl9ZnVuY3Rpb24geihxLHB0LGh0KXtyZXR1cm4gcHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IikscHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihodCkuYWRkKHEpfWxldCBVPUIubGVuZ3RoLFc9Ui5sZW5ndGg7ZnVuY3Rpb24gWihxLHB0LGh0KXtsZXQgd3Qsa3QsaWUsZWU9cS54LXB0LngsTGU9cS55LXB0LnksYXI9aHQueC1xLngsZnI9aHQueS1xLnksdHQ9ZWUqZWUrTGUqTGUsJD1lZSpmci1MZSphcjtpZihNYXRoLmFicygkKT5OdW1iZXIuRVBTSUxPTil7bGV0IEl0PU1hdGguc3FydCh0dCksJHQ9TWF0aC5zcXJ0KGFyKmFyK2ZyKmZyKSxoZT1wdC54LUxlL0l0LFR0PXB0LnkrZWUvSXQsYmU9aHQueC1mci8kdCxudD1odC55K2FyLyR0LEN0PSgoYmUtaGUpKmZyLShudC1UdCkqYXIpLyhlZSpmci1MZSphcik7d3Q9aGUrZWUqQ3QtcS54LGt0PVR0K0xlKkN0LXEueTtsZXQgV3Q9d3Qqd3Qra3Qqa3Q7aWYoV3Q8PTIpcmV0dXJuIG5ldyBMdCh3dCxrdCk7aWU9TWF0aC5zcXJ0KFd0LzIpfWVsc2V7bGV0IEl0PSExO2VlPk51bWJlci5FUFNJTE9OP2FyPk51bWJlci5FUFNJTE9OJiYoSXQ9ITApOmVlPC1OdW1iZXIuRVBTSUxPTj9hcjwtTnVtYmVyLkVQU0lMT04mJihJdD0hMCk6TWF0aC5zaWduKExlKT09PU1hdGguc2lnbihmcikmJihJdD0hMCksSXQ/KHd0PS1MZSxrdD1lZSxpZT1NYXRoLnNxcnQodHQpKTood3Q9ZWUsa3Q9TGUsaWU9TWF0aC5zcXJ0KHR0LzIpKX1yZXR1cm4gbmV3IEx0KHd0L2llLGt0L2llKX1sZXQgcnQ9W107Zm9yKGxldCBxPTAscHQ9Ri5sZW5ndGgsaHQ9cHQtMSx3dD1xKzE7cTxwdDtxKyssaHQrKyx3dCsrKWh0PT09cHQmJihodD0wKSx3dD09PXB0JiYod3Q9MCkscnRbcV09WihGW3FdLEZbaHRdLEZbd3RdKTtsZXQgb3Q9W10sc3QsU3Q9cnQuY29uY2F0KCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO3N0PVtdO2ZvcihsZXQgd3Q9MCxrdD1odC5sZW5ndGgsaWU9a3QtMSxlZT13dCsxO3d0PGt0O3d0KyssaWUrKyxlZSsrKWllPT09a3QmJihpZT0wKSxlZT09PWt0JiYoZWU9MCksc3Rbd3RdPVooaHRbd3RdLGh0W2llXSxodFtlZV0pO290LnB1c2goc3QpLFN0PVN0LmNvbmNhdChzdCl9Zm9yKGxldCBxPTA7cTxfO3ErKyl7bGV0IHB0PXEvXyxodD1wKk1hdGguY29zKHB0Kk1hdGguUEkvMiksd3Q9ZCpNYXRoLnNpbihwdCpNYXRoLlBJLzIpK2c7Zm9yKGxldCBrdD0wLGllPUYubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT16KEZba3RdLHJ0W2t0XSx3dCk7X3QoZWUueCxlZS55LC1odCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtfdChmci54LGZyLnksLWh0KX19fWxldCBidD1kK2c7Zm9yKGxldCBxPTA7cTxVO3ErKyl7bGV0IHB0PWY/eihCW3FdLFN0W3FdLGJ0KTpCW3FdO1M/KGsuY29weShDLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LngpLFAuY29weShDLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIocHQueSksTy5jb3B5KGJbMF0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChwdC54LHB0LnksMCl9Zm9yKGxldCBxPTE7cTw9dTtxKyspZm9yKGxldCBwdD0wO3B0PFU7cHQrKyl7bGV0IGh0PWY/eihCW3B0XSxTdFtwdF0sYnQpOkJbcHRdO1M/KGsuY29weShDLm5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LngpLFAuY29weShDLmJpbm9ybWFsc1txXSkubXVsdGlwbHlTY2FsYXIoaHQueSksTy5jb3B5KGJbcV0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChodC54LGh0LnksaC91KnEpfWZvcihsZXQgcT1fLTE7cT49MDtxLS0pe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSxoK2h0KX1mb3IobGV0IGt0PTAsaWU9SS5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPUlba3RdO3N0PW90W2t0XTtmb3IobGV0IExlPTAsYXI9ZWUubGVuZ3RoO0xlPGFyO0xlKyspe2xldCBmcj16KGVlW0xlXSxzdFtMZV0sd3QpO1M/X3QoZnIueCxmci55K2JbdS0xXS55LGJbdS0xXS54K2h0KTpfdChmci54LGZyLnksaCtodCl9fX1NdCgpLGx0KCk7ZnVuY3Rpb24gTXQoKXtsZXQgcT1pLmxlbmd0aC8zO2lmKGYpe2xldCBwdD0wLGh0PVUqcHQ7Zm9yKGxldCB3dD0wO3d0PFc7d3QrKyl7bGV0IGt0PVJbd3RdO2N0KGt0WzJdK2h0LGt0WzFdK2h0LGt0WzBdK2h0KX1wdD11K18qMixodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFswXStodCxrdFsxXStodCxrdFsyXStodCl9fWVsc2V7Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzJdLGh0WzFdLGh0WzBdKX1mb3IobGV0IHB0PTA7cHQ8VztwdCsrKXtsZXQgaHQ9UltwdF07Y3QoaHRbMF0rVSp1LGh0WzFdK1UqdSxodFsyXStVKnUpfX1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDApfWZ1bmN0aW9uIGx0KCl7bGV0IHE9aS5sZW5ndGgvMyxwdD0wO0t0KEYscHQpLHB0Kz1GLmxlbmd0aDtmb3IobGV0IGh0PTAsd3Q9SS5sZW5ndGg7aHQ8d3Q7aHQrKyl7bGV0IGt0PUlbaHRdO0t0KGt0LHB0KSxwdCs9a3QubGVuZ3RofW4uYWRkR3JvdXAocSxpLmxlbmd0aC8zLXEsMSl9ZnVuY3Rpb24gS3QocSxwdCl7bGV0IGh0PXEubGVuZ3RoO2Zvcig7LS1odD49MDspe2xldCB3dD1odCxrdD1odC0xO2t0PDAmJihrdD1xLmxlbmd0aC0xKTtmb3IobGV0IGllPTAsZWU9dStfKjI7aWU8ZWU7aWUrKyl7bGV0IExlPVUqaWUsYXI9VSooaWUrMSksZnI9cHQrd3QrTGUsdHQ9cHQra3QrTGUsJD1wdCtrdCthcixJdD1wdCt3dCthcjtYKGZyLHR0LCQsSXQpfX19ZnVuY3Rpb24gX3QocSxwdCxodCl7bC5wdXNoKHEpLGwucHVzaChwdCksbC5wdXNoKGh0KX1mdW5jdGlvbiBjdChxLHB0LGh0KXtldChxKSxldChwdCksZXQoaHQpO2xldCB3dD1pLmxlbmd0aC8zLGt0PXguZ2VuZXJhdGVUb3BVVihuLGksd3QtMyx3dC0yLHd0LTEpO2R0KGt0WzBdKSxkdChrdFsxXSksZHQoa3RbMl0pfWZ1bmN0aW9uIFgocSxwdCxodCx3dCl7ZXQocSksZXQocHQpLGV0KHd0KSxldChwdCksZXQoaHQpLGV0KHd0KTtsZXQga3Q9aS5sZW5ndGgvMyxpZT14LmdlbmVyYXRlU2lkZVdhbGxVVihuLGksa3QtNixrdC0zLGt0LTIsa3QtMSk7ZHQoaWVbMF0pLGR0KGllWzFdKSxkdChpZVszXSksZHQoaWVbMV0pLGR0KGllWzJdKSxkdChpZVszXSl9ZnVuY3Rpb24gZXQocSl7aS5wdXNoKGxbcSozKzBdKSxpLnB1c2gobFtxKjMrMV0pLGkucHVzaChsW3EqMysyXSl9ZnVuY3Rpb24gZHQocSl7by5wdXNoKHEueCksby5wdXNoKHEueSl9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXMsbj10aGlzLnBhcmFtZXRlcnMub3B0aW9ucztyZXR1cm4gbjByKHIsbix0KX1zdGF0aWMgZnJvbUpTT04odCxyKXtsZXQgbj1bXTtmb3IobGV0IG89MCxhPXQuc2hhcGVzLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW3Quc2hhcGVzW29dXTtuLnB1c2gocyl9bGV0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiBpIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKSxuZXcgaGgobix0Lm9wdGlvbnMpfX0scjByPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKGUsdCxyLG4saSl7bGV0IG89dFtyKjNdLGE9dFtyKjMrMV0scz10W24qM10sbD10W24qMysxXSxjPXRbaSozXSx1PXRbaSozKzFdO3JldHVybltuZXcgTHQobyxhKSxuZXcgTHQocyxsKSxuZXcgTHQoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihlLHQscixuLGksbyl7bGV0IGE9dFtyKjNdLHM9dFtyKjMrMV0sbD10W3IqMysyXSxjPXRbbiozXSx1PXRbbiozKzFdLGg9dFtuKjMrMl0sZj10W2kqM10scD10W2kqMysxXSxkPXRbaSozKzJdLGc9dFtvKjNdLF89dFtvKjMrMV0seT10W28qMysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTxNYXRoLmFicyhhLWMpP1tuZXcgTHQoYSwxLWwpLG5ldyBMdChjLDEtaCksbmV3IEx0KGYsMS1kKSxuZXcgTHQoZywxLXkpXTpbbmV3IEx0KHMsMS1sKSxuZXcgTHQodSwxLWgpLG5ldyBMdChwLDEtZCksbmV3IEx0KF8sMS15KV19fTtmdW5jdGlvbiBuMHIoZSx0LHIpe2lmKHIuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1lW25dO3Iuc2hhcGVzLnB1c2goby51dWlkKX1lbHNlIHIuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdC5leHRydWRlUGF0aCE9PXZvaWQgMCYmKHIub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxyfXZhciBHMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPVstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sbz1bMCwxMSw1LDAsNSwxLDAsMSw3LDAsNywxMCwwLDEwLDExLDEsNSw5LDUsMTEsNCwxMSwxMCwyLDEwLDcsNiw3LDEsOCwzLDksNCwzLDQsMiwzLDIsNiwzLDYsOCwzLDgsOSw0LDksNSwyLDQsMTEsNiwyLDEwLDgsNiw3LDksOCwxXTtzdXBlcihpLG8sdCxyKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEcxKHQucmFkaXVzLHQuZGV0YWlsKX19LFcxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bbmV3IEx0KDAsLjUpLG5ldyBMdCguNSwwKSxuZXcgTHQoMCwtLjUpXSxyPTEyLG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6cixwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxyPU1hdGguZmxvb3IociksaT1abyhpLDAsTWF0aC5QSSoyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPVtdLHU9MS9yLGg9bmV3IGosZj1uZXcgTHQscD1uZXcgaixkPW5ldyBqLGc9bmV3IGosXz0wLHk9MDtmb3IobGV0IHg9MDt4PD10Lmxlbmd0aC0xO3grKylzd2l0Y2goeCl7Y2FzZSAwOl89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZy5jb3B5KHApLHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KTticmVhaztjYXNlIHQubGVuZ3RoLTE6bC5wdXNoKGcueCxnLnksZy56KTticmVhaztkZWZhdWx0Ol89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZC5jb3B5KHApLHAueCs9Zy54LHAueSs9Zy55LHAueis9Zy56LHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KSxnLmNvcHkoZCl9Zm9yKGxldCB4PTA7eDw9cjt4Kyspe2xldCBiPW4reCp1KmksUz1NYXRoLnNpbihiKSxDPU1hdGguY29zKGIpO2ZvcihsZXQgUD0wO1A8PXQubGVuZ3RoLTE7UCsrKXtoLng9dFtQXS54KlMsaC55PXRbUF0ueSxoLno9dFtQXS54KkMsYS5wdXNoKGgueCxoLnksaC56KSxmLng9eC9yLGYueT1QLyh0Lmxlbmd0aC0xKSxzLnB1c2goZi54LGYueSk7bGV0IGs9bFszKlArMF0qUyxPPWxbMypQKzFdLEQ9bFszKlArMF0qQztjLnB1c2goayxPLEQpfX1mb3IobGV0IHg9MDt4PHI7eCsrKWZvcihsZXQgYj0wO2I8dC5sZW5ndGgtMTtiKyspe2xldCBTPWIreCp0Lmxlbmd0aCxDPVMsUD1TK3QubGVuZ3RoLGs9Uyt0Lmxlbmd0aCsxLE89UysxO28ucHVzaChDLFAsTyksby5wdXNoKGssTyxQKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHMsMikpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShjLDMpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX0sVzA9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLGk9WzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVzAodC5yYWRpdXMsdC5kZXRhaWwpfX0sWTE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PS41LHI9MSxuPTgsaT0xLG89MCxhPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOnIsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LG49TWF0aC5tYXgoMyxuKSxpPU1hdGgubWF4KDEsaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD10LGY9KHItdCkvaSxwPW5ldyBqLGQ9bmV3IEx0O2ZvcihsZXQgZz0wO2c8PWk7ZysrKXtmb3IobGV0IF89MDtfPD1uO18rKyl7bGV0IHk9bytfL24qYTtwLng9aCpNYXRoLmNvcyh5KSxwLnk9aCpNYXRoLnNpbih5KSxsLnB1c2gocC54LHAueSxwLnopLGMucHVzaCgwLDAsMSksZC54PShwLngvcisxKS8yLGQueT0ocC55L3IrMSkvMix1LnB1c2goZC54LGQueSl9aCs9Zn1mb3IobGV0IGc9MDtnPGk7ZysrKXtsZXQgXz1nKihuKzEpO2ZvcihsZXQgeT0wO3k8bjt5Kyspe2xldCB4PXkrXyxiPXgsUz14K24rMSxDPXgrbisyLFA9eCsxO3MucHVzaChiLFMsUCkscy5wdXNoKFMsQyxQKX19dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCgwLC41KSxuZXcgTHQoLS41LC0uNSksbmV3IEx0KC41LC0uNSldKSxyPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOnJ9O2xldCBuPVtdLGk9W10sbz1bXSxhPVtdLHM9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAocyxsLHUpLHMrPWwsbD0wO3RoaXMuc2V0SW5kZXgobiksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9aS5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhyKSxwPWYuc2hhcGUsZD1mLmhvbGVzO1pjLmlzQ2xvY2tXaXNlKHApPT09ITEmJihwPXAucmV2ZXJzZSgpKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107WmMuaXNDbG9ja1dpc2UoeCk9PT0hMCYmKGRbX109eC5yZXZlcnNlKCkpfWxldCBnPVpjLnRyaWFuZ3VsYXRlU2hhcGUocCxkKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107cD1wLmNvbmNhdCh4KX1mb3IobGV0IF89MCx5PXAubGVuZ3RoO188eTtfKyspe2xldCB4PXBbX107aS5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxhLnB1c2goeC54LHgueSl9Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1nW19dLGI9eFswXStoLFM9eFsxXStoLEM9eFsyXStoO24ucHVzaChiLFMsQyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLHI9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gaTByKHIsdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBpPTAsbz10LnNoYXBlcy5sZW5ndGg7aTxvO2krKyl7bGV0IGE9clt0LnNoYXBlc1tpXV07bi5wdXNoKGEpfXJldHVybiBuZXcgWTAobix0LmN1cnZlU2VnbWVudHMpfX07ZnVuY3Rpb24gaTByKGUsdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2xldCBpPWVbcl07dC5zaGFwZXMucHVzaChpLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChlLnV1aWQpO3JldHVybiB0fXZhciBqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTMyLG49MTYsaT0wLG89TWF0aC5QSSoyLGE9MCxzPU1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6bixwaGlTdGFydDppLHBoaUxlbmd0aDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfSxyPU1hdGgubWF4KDMsTWF0aC5mbG9vcihyKSksbj1NYXRoLm1heCgyLE1hdGguZmxvb3IobikpO2xldCBsPU1hdGgubWluKGErcyxNYXRoLlBJKSxjPTAsdT1bXSxoPW5ldyBqLGY9bmV3IGoscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PD1uO3krKyl7bGV0IHg9W10sYj15L24sUz0wO3k9PTAmJmE9PTA/Uz0uNS9yOnk9PW4mJmw9PU1hdGguUEkmJihTPS0uNS9yKTtmb3IobGV0IEM9MDtDPD1yO0MrKyl7bGV0IFA9Qy9yO2gueD0tdCpNYXRoLmNvcyhpK1AqbykqTWF0aC5zaW4oYStiKnMpLGgueT10Kk1hdGguY29zKGErYipzKSxoLno9dCpNYXRoLnNpbihpK1AqbykqTWF0aC5zaW4oYStiKnMpLGQucHVzaChoLngsaC55LGgueiksZi5jb3B5KGgpLm5vcm1hbGl6ZSgpLGcucHVzaChmLngsZi55LGYueiksXy5wdXNoKFArUywxLWIpLHgucHVzaChjKyspfXUucHVzaCh4KX1mb3IobGV0IHk9MDt5PG47eSsrKWZvcihsZXQgeD0wO3g8cjt4Kyspe2xldCBiPXVbeV1beCsxXSxTPXVbeV1beF0sQz11W3krMV1beF0sUD11W3krMV1beCsxXTsoeSE9PTB8fGE+MCkmJnAucHVzaChiLFMsUCksKHkhPT1uLTF8fGw8TWF0aC5QSSkmJnAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajAodC5yYWRpdXMsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5waGlTdGFydCx0LnBoaUxlbmd0aCx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPVsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0saT1bMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdO3N1cGVyKG4saSx0LHIpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajEodC5yYWRpdXMsdC5kZXRhaWwpfX0sWDE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0uNCxuPTgsaT02LG89TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIscmFkaWFsU2VnbWVudHM6bix0dWJ1bGFyU2VnbWVudHM6aSxhcmM6b30sbj1NYXRoLmZsb29yKG4pLGk9TWF0aC5mbG9vcihpKTtsZXQgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBqLGg9bmV3IGosZj1uZXcgajtmb3IobGV0IHA9MDtwPD1uO3ArKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7bGV0IGc9ZC9pKm8sXz1wL24qTWF0aC5QSSoyO2gueD0odCtyKk1hdGguY29zKF8pKSpNYXRoLmNvcyhnKSxoLnk9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5zaW4oZyksaC56PXIqTWF0aC5zaW4oXykscy5wdXNoKGgueCxoLnksaC56KSx1Lng9dCpNYXRoLmNvcyhnKSx1Lnk9dCpNYXRoLnNpbihnKSxmLnN1YlZlY3RvcnMoaCx1KS5ub3JtYWxpemUoKSxsLnB1c2goZi54LGYueSxmLnopLGMucHVzaChkL2kpLGMucHVzaChwL24pfWZvcihsZXQgcD0xO3A8PW47cCsrKWZvcihsZXQgZD0xO2Q8PWk7ZCsrKXtsZXQgZz0oaSsxKSpwK2QtMSxfPShpKzEpKihwLTEpK2QtMSx5PShpKzEpKihwLTEpK2QseD0oaSsxKSpwK2Q7YS5wdXNoKGcsXyx4KSxhLnB1c2goXyx5LHgpfXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQudHViZSx0LnJhZGlhbFNlZ21lbnRzLHQudHVidWxhclNlZ21lbnRzLHQuYXJjKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj02NCxpPTgsbz0yLGE9Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6cix0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6byxxOmF9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD1uZXcgaixmPW5ldyBqLHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89bmV3IGoseT1uZXcgajtmb3IobGV0IGI9MDtiPD1uOysrYil7bGV0IFM9Yi9uKm8qTWF0aC5QSSoyO3goUyxvLGEsdCxwKSx4KFMrLjAxLG8sYSx0LGQpLF8uc3ViVmVjdG9ycyhkLHApLHkuYWRkVmVjdG9ycyhkLHApLGcuY3Jvc3NWZWN0b3JzKF8seSkseS5jcm9zc1ZlY3RvcnMoZyxfKSxnLm5vcm1hbGl6ZSgpLHkubm9ybWFsaXplKCk7Zm9yKGxldCBDPTA7Qzw9aTsrK0Mpe2xldCBQPUMvaSpNYXRoLlBJKjIsaz0tcipNYXRoLmNvcyhQKSxPPXIqTWF0aC5zaW4oUCk7aC54PXAueCsoayp5LngrTypnLngpLGgueT1wLnkrKGsqeS55K08qZy55KSxoLno9cC56KyhrKnkueitPKmcueiksbC5wdXNoKGgueCxoLnksaC56KSxmLnN1YlZlY3RvcnMoaCxwKS5ub3JtYWxpemUoKSxjLnB1c2goZi54LGYueSxmLnopLHUucHVzaChiL24pLHUucHVzaChDL2kpfX1mb3IobGV0IGI9MTtiPD1uO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztzLnB1c2goQyxQLE8pLHMucHVzaChQLGssTyl9dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSk7ZnVuY3Rpb24geChiLFMsQyxQLGspe2xldCBPPU1hdGguY29zKGIpLEQ9TWF0aC5zaW4oYiksQj1DL1MqYixJPU1hdGguY29zKEIpO2sueD1QKigyK0kpKi41Kk8say55PVAqKDIrSSkqRCouNSxrLno9UCpNYXRoLnNpbihCKSouNX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgJDEodC5yYWRpdXMsdC50dWJlLHQudHVidWxhclNlZ21lbnRzLHQucmFkaWFsU2VnbWVudHMsdC5wLHQucSl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IGhNKG5ldyBqKC0xLC0xLDApLG5ldyBqKC0xLDEsMCksbmV3IGooMSwxLDApKSxyPTY0LG49MSxpPTgsbz0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOnIscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6b307bGV0IGE9dC5jb21wdXRlRnJlbmV0RnJhbWVzKHIsbyk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzLHRoaXMubm9ybWFscz1hLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9YS5iaW5vcm1hbHM7bGV0IHM9bmV3IGosbD1uZXcgaixjPW5ldyBMdCx1PW5ldyBqLGg9W10sZj1bXSxwPVtdLGQ9W107ZygpLHRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHAsMikpO2Z1bmN0aW9uIGcoKXtmb3IobGV0IGI9MDtiPHI7YisrKV8oYik7XyhvPT09ITE/cjowKSx4KCkseSgpfWZ1bmN0aW9uIF8oYil7dT10LmdldFBvaW50QXQoYi9yLHUpO2xldCBTPWEubm9ybWFsc1tiXSxDPWEuYmlub3JtYWxzW2JdO2ZvcihsZXQgUD0wO1A8PWk7UCsrKXtsZXQgaz1QL2kqTWF0aC5QSSoyLE89TWF0aC5zaW4oayksRD0tTWF0aC5jb3Moayk7bC54PUQqUy54K08qQy54LGwueT1EKlMueStPKkMueSxsLno9RCpTLnorTypDLnosbC5ub3JtYWxpemUoKSxmLnB1c2gobC54LGwueSxsLnopLHMueD11LngrbipsLngscy55PXUueStuKmwueSxzLno9dS56K24qbC56LGgucHVzaChzLngscy55LHMueil9fWZ1bmN0aW9uIHkoKXtmb3IobGV0IGI9MTtiPD1yO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztkLnB1c2goQyxQLE8pLGQucHVzaChQLGssTyl9fWZ1bmN0aW9uIHgoKXtmb3IobGV0IGI9MDtiPD1yO2IrKylmb3IobGV0IFM9MDtTPD1pO1MrKyljLng9Yi9yLGMueT1TL2kscC5wdXNoKGMueCxjLnkpfX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSzEobmV3IE9odFt0LnBhdGgudHlwZV0oKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX0sZDY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW51bGwpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtnZW9tZXRyeTp0fSx0IT09bnVsbCl7bGV0IHI9W10sbj1uZXcgU2V0LGk9bmV3IGosbz1uZXcgajtpZih0LmluZGV4IT09bnVsbCl7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9dC5pbmRleCxsPXQuZ3JvdXBzO2wubGVuZ3RoPT09MCYmKGw9W3tzdGFydDowLGNvdW50OnMuY291bnQsbWF0ZXJpYWxJbmRleDowfV0pO2ZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1OysrYyl7bGV0IGg9bFtjXSxmPWguc3RhcnQscD1oLmNvdW50O2ZvcihsZXQgZD1mLGc9ZitwO2Q8ZztkKz0zKWZvcihsZXQgXz0wO188MztfKyspe2xldCB5PXMuZ2V0WChkK18pLHg9cy5nZXRYKGQrKF8rMSklMyk7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEseSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEseCksZGhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19fWVsc2V7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGw9YS5jb3VudC8zO3M8bDtzKyspZm9yKGxldCBjPTA7YzwzO2MrKyl7bGV0IHU9MypzK2MsaD0zKnMrKGMrMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSxkaGUoaSxvLG4pPT09ITAmJihyLnB1c2goaS54LGkueSxpLnopLHIucHVzaChvLngsby55LG8ueikpfX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKX19fTtmdW5jdGlvbiBkaGUoZSx0LHIpe2xldCBuPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWAsaT1gJHt0Lnh9LCR7dC55fSwke3Quen0tJHtlLnh9LCR7ZS55fSwke2Uuen1gO3JldHVybiByLmhhcyhuKT09PSEwfHxyLmhhcyhpKT09PSEwPyExOihyLmFkZChuLGkpLCEwKX12YXIgbWhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJveEdlb21ldHJ5OlFmLEJveEJ1ZmZlckdlb21ldHJ5OlFmLENpcmNsZUdlb21ldHJ5OkYxLENpcmNsZUJ1ZmZlckdlb21ldHJ5OkYxLENvbmVHZW9tZXRyeTpCMSxDb25lQnVmZmVyR2VvbWV0cnk6QjEsQ3lsaW5kZXJHZW9tZXRyeTpvbSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om9tLERvZGVjYWhlZHJvbkdlb21ldHJ5OkgxLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkgxLEVkZ2VzR2VvbWV0cnk6czYsRXh0cnVkZUdlb21ldHJ5OmhoLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpoaCxJY29zYWhlZHJvbkdlb21ldHJ5OkcxLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6RzEsTGF0aGVHZW9tZXRyeTpXMSxMYXRoZUJ1ZmZlckdlb21ldHJ5OlcxLE9jdGFoZWRyb25HZW9tZXRyeTpXMCxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VzAsUGxhbmVHZW9tZXRyeTpWMCxQbGFuZUJ1ZmZlckdlb21ldHJ5OlYwLFBvbHloZWRyb25HZW9tZXRyeTp1aCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6dWgsUmluZ0dlb21ldHJ5OlkxLFJpbmdCdWZmZXJHZW9tZXRyeTpZMSxTaGFwZUdlb21ldHJ5OlkwLFNoYXBlQnVmZmVyR2VvbWV0cnk6WTAsU3BoZXJlR2VvbWV0cnk6ajAsU3BoZXJlQnVmZmVyR2VvbWV0cnk6ajAsVGV0cmFoZWRyb25HZW9tZXRyeTpqMSxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmoxLFRvcnVzR2VvbWV0cnk6WDEsVG9ydXNCdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0tub3RHZW9tZXRyeTokMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTokMSxUdWJlR2VvbWV0cnk6SzEsVHViZUJ1ZmZlckdlb21ldHJ5OksxLFdpcmVmcmFtZUdlb21ldHJ5OmQ2fSksbTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O202LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBwTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtwTS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDt2YXIgZzY9Y2xhc3MgZXh0ZW5kcyBwTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBabygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5pb3I9KDErLjQqcikvKDEtLjQqcil9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBuZSgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBuZSgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgbmUoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtfNi5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt5Ni5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO3ZhciB2Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07djYucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPU82LHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3g2LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2I2LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgdzY9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt3Ni5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIG8wcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxTaGFkb3dNYXRlcmlhbDptNixTcHJpdGVNYXRlcmlhbDppTSxSYXdTaGFkZXJNYXRlcmlhbDpVMCxTaGFkZXJNYXRlcmlhbDpsaCxQb2ludHNNYXRlcmlhbDpubSxNZXNoUGh5c2ljYWxNYXRlcmlhbDpnNixNZXNoU3RhbmRhcmRNYXRlcmlhbDpwTSxNZXNoUGhvbmdNYXRlcmlhbDpfNixNZXNoVG9vbk1hdGVyaWFsOnk2LE1lc2hOb3JtYWxNYXRlcmlhbDp2NixNZXNoTGFtYmVydE1hdGVyaWFsOng2LE1lc2hEZXB0aE1hdGVyaWFsOmVNLE1lc2hEaXN0YW5jZU1hdGVyaWFsOnJNLE1lc2hCYXNpY01hdGVyaWFsOnNoLE1lc2hNYXRjYXBNYXRlcmlhbDpiNixMaW5lRGFzaGVkTWF0ZXJpYWw6dzYsTGluZUJhc2ljTWF0ZXJpYWw6R2ksTWF0ZXJpYWw6cWl9KSxZbj17YXJyYXlTbGljZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIFluLmlzVHlwZWRBcnJheShlKT9uZXcgZS5jb25zdHJ1Y3RvcihlLnN1YmFycmF5KHQsciE9PXZvaWQgMD9yOmUubGVuZ3RoKSk6ZS5zbGljZSh0LHIpfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiFlfHwhciYmZS5jb25zdHJ1Y3Rvcj09PXQ/ZTp0eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD09Im51bWJlciI/bmV3IHQoZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLG8pe3JldHVybiBlW2ldLWVbb119bGV0IHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7Zm9yKGxldCBpPTA7aSE9PXI7KytpKW5baV09aTtyZXR1cm4gbi5zb3J0KHQpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPW5ldyBlLmNvbnN0cnVjdG9yKG4pO2ZvcihsZXQgbz0wLGE9MDthIT09bjsrK28pe2xldCBzPXJbb10qdDtmb3IobGV0IGw9MDtsIT09dDsrK2wpaVthKytdPWVbcytsXX1yZXR1cm4gaX0sZmxhdHRlbkpTT046ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9MSxvPWVbMF07Zm9yKDtvIT09dm9pZCAwJiZvW25dPT09dm9pZCAwOylvPWVbaSsrXTtpZihvPT09dm9pZCAwKXJldHVybjtsZXQgYT1vW25dO2lmKGEhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShhKSlkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaC5hcHBseShyLGEpKSxvPWVbaSsrXTt3aGlsZShvIT09dm9pZCAwKTtlbHNlIGlmKGEudG9BcnJheSE9PXZvaWQgMClkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLGEudG9BcnJheShyLHIubGVuZ3RoKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaChhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCl9LHN1YmNsaXA6ZnVuY3Rpb24oZSx0LHIsbixpPTMwKXtsZXQgbz1lLmNsb25lKCk7by5uYW1lPXQ7bGV0IGE9W107Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXtsZXQgYz1vLnRyYWNrc1tsXSx1PWMuZ2V0VmFsdWVTaXplKCksaD1bXSxmPVtdO2ZvcihsZXQgcD0wO3A8Yy50aW1lcy5sZW5ndGg7KytwKXtsZXQgZD1jLnRpbWVzW3BdKmk7aWYoIShkPHJ8fGQ+PW4pKXtoLnB1c2goYy50aW1lc1twXSk7Zm9yKGxldCBnPTA7Zzx1OysrZylmLnB1c2goYy52YWx1ZXNbcCp1K2ddKX19aC5sZW5ndGghPT0wJiYoYy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkoaCxjLnRpbWVzLmNvbnN0cnVjdG9yKSxjLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkoZixjLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGMpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpcz5vLnRyYWNrc1tsXS50aW1lc1swXSYmKHM9by50cmFja3NbbF0udGltZXNbMF0pO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClvLnRyYWNrc1tsXS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbihlLHQ9MCxyPWUsbj0zMCl7bjw9MCYmKG49MzApO2xldCBpPXIudHJhY2tzLmxlbmd0aCxvPXQvbjtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgcz1yLnRyYWNrc1thXSxsPXMuVmFsdWVUeXBlTmFtZTtpZihsPT09ImJvb2wifHxsPT09InN0cmluZyIpY29udGludWU7bGV0IGM9ZS50cmFja3MuZmluZChmdW5jdGlvbih5KXtyZXR1cm4geS5uYW1lPT09cy5uYW1lJiZ5LlZhbHVlVHlwZU5hbWU9PT1sfSk7aWYoYz09PXZvaWQgMCljb250aW51ZTtsZXQgdT0wLGg9cy5nZXRWYWx1ZVNpemUoKTtzLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYodT1oLzMpO2xldCBmPTAscD1jLmdldFZhbHVlU2l6ZSgpO2MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihmPXAvMyk7bGV0IGQ9cy50aW1lcy5sZW5ndGgtMSxnO2lmKG88PXMudGltZXNbMF0pe2xldCB5PXUseD1oLXU7Zz1Zbi5hcnJheVNsaWNlKHMudmFsdWVzLHkseCl9ZWxzZSBpZihvPj1zLnRpbWVzW2RdKXtsZXQgeT1kKmgrdSx4PXkraC11O2c9WW4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9dSxiPWgtdTt5LmV2YWx1YXRlKG8pLGc9WW4uYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LGIpfWw9PT0icXVhdGVybmlvbiImJm5ldyB5aSgpLmZyb21BcnJheShnKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KGcpO2xldCBfPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8XzsrK3kpe2xldCB4PXkqcCtmO2lmKGw9PT0icXVhdGVybmlvbiIpeWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxnLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgYj1wLWYqMjtmb3IobGV0IFM9MDtTPGI7KytTKWMudmFsdWVzW3grU10tPWdbU119fX1yZXR1cm4gZS5ibGVuZE1vZGU9a2h0LGV9fSxmaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9aSE9PXZvaWQgMD9pOm5ldyByLmNvbnN0cnVjdG9yKG4pLHRoaXMuc2FtcGxlVmFsdWVzPXIsdGhpcy52YWx1ZVNpemU9bix0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG49dGhpcy5fY2FjaGVkSW5kZXgsaT1yW25dLG89cltuLTFdO3Q6e2U6e2xldCBhO3I6e246aWYoISh0PGkpKXtmb3IobGV0IHM9bisyOzspe2lmKGk9PT12b2lkIDApe2lmKHQ8bylicmVhayBuO3JldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLHQsbyl9aWYobj09PXMpYnJlYWs7aWYobz1pLGk9clsrK25dLHQ8aSlicmVhayBlfWE9ci5sZW5ndGg7YnJlYWsgcn1pZighKHQ+PW8pKXtsZXQgcz1yWzFdO3Q8cyYmKG49MixvPXMpO2ZvcihsZXQgbD1uLTI7Oyl7aWYobz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PWwpYnJlYWs7aWYoaT1vLG89clstLW4tMV0sdD49bylicmVhayBlfWE9bixuPTA7YnJlYWsgcn1icmVhayB0fWZvcig7bjxhOyl7bGV0IHM9bithPj4+MTt0PHJbc10/YT1zOm49cysxfWlmKGk9cltuXSxvPXJbbi0xXSxvPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihpPT09dm9pZCAwKXJldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmludGVydmFsQ2hhbmdlZF8obixvLGkpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhuLG8sdCxpKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLG89dCppO2ZvcihsZXQgYT0wO2EhPT1pOysrYSlyW2FdPW5bbythXTtyZXR1cm4gcn1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O2ZoLnByb3RvdHlwZS5iZWZvcmVTdGFydF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87ZmgucHJvdG90eXBlLmFmdGVyRW5kXz1maC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgU1U9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfX1pbnRlcnZhbENoYW5nZWRfKHQscixuKXtsZXQgaT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPWlbb10sbD1pW2FdO2lmKHM9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVDE6bz10LHM9MipyLW47YnJlYWs7Y2FzZSBKUDpvPWkubGVuZ3RoLTIscz1yK2lbb10taVtvKzFdO2JyZWFrO2RlZmF1bHQ6bz10LHM9bn1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBUMTphPXQsbD0yKm4tcjticmVhaztjYXNlIEpQOmE9MSxsPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEsbD1yfWxldCBjPShuLXIpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhyLXMpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1uKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PWEqdX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9dCpzLGM9bC1zLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LHA9dGhpcy5fd2VpZ2h0TmV4dCxkPShuLXIpLyhpLXIpLGc9ZCpkLF89ZypkLHk9LWYqXysyKmYqZy1mKmQseD0oMStmKSpfKygtMS41LTIqZikqZysoLS41K2YpKmQrMSxiPSgtMS1wKSpfKygxLjUrcCkqZysuNSpkLFM9cCpfLXAqZztmb3IobGV0IEM9MDtDIT09czsrK0Mpb1tDXT15KmFbdStDXSt4KmFbYytDXStiKmFbbCtDXStTKmFbaCtDXTtyZXR1cm4gb319LFM2PWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PShuLXIpLyhpLXIpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1zOysrZilvW2ZdPWFbYytmXSpoK2FbbCtmXSp1O3JldHVybiBvfX0sTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRGw9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYocj09PXZvaWQgMHx8ci5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkocix0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkobix0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKGl8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IHI9dC5jb25zdHJ1Y3RvcixuO2lmKHIudG9KU09OIT09dGhpcy50b0pTT04pbj1yLnRvSlNPTih0KTtlbHNle249e25hbWU6dC5uYW1lLHRpbWVzOlluLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6WW4uY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IGk9dC5nZXRJbnRlcnBvbGF0aW9uKCk7aSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249aSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE1VKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBTNih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgU1UodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgS1A6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgWlA6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIHJVOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYocj09PXZvaWQgMCl7bGV0IG49InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLG4pLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9cix0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBLUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBaUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiByVX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgcj10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXJbbl0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LHIpe2xldCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aCxvPTAsYT1pLTE7Zm9yKDtvIT09aSYmbltvXTx0OykrK287Zm9yKDthIT09LTEmJm5bYV0+cjspLS1hO2lmKCsrYSxvIT09MHx8YSE9PWkpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKG4sbyxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAscj10aGlzLmdldFZhbHVlU2l6ZSgpO3ItTWF0aC5mbG9vcihyKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgbj10aGlzLnRpbWVzLGk9dGhpcy52YWx1ZXMsbz1uLmxlbmd0aDtvPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IGE9bnVsbDtmb3IobGV0IHM9MDtzIT09bztzKyspe2xldCBsPW5bc107aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsbCksdD0hMTticmVha31pZihhIT09bnVsbCYmYT5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMscyxsLGEpLHQ9ITE7YnJlYWt9YT1sfWlmKGkhPT12b2lkIDAmJlluLmlzVHlwZWRBcnJheShpKSlmb3IobGV0IHM9MCxsPWkubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9aVtzXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9WW4uYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxyPVluLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLG49dGhpcy5nZXRWYWx1ZVNpemUoKSxpPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09clUsbz10Lmxlbmd0aC0xLGE9MTtmb3IobGV0IHM9MTtzPG87KytzKXtsZXQgbD0hMSxjPXRbc10sdT10W3MrMV07aWYoYyE9PXUmJihzIT09MXx8YyE9PXRbMF0pKWlmKGkpbD0hMDtlbHNle2xldCBoPXMqbixmPWgtbixwPWgrbjtmb3IobGV0IGQ9MDtkIT09bjsrK2Qpe2xldCBnPXJbaCtkXTtpZihnIT09cltmK2RdfHxnIT09cltwK2RdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgaD1zKm4sZj1hKm47Zm9yKGxldCBwPTA7cCE9PW47KytwKXJbZitwXT1yW2grcF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9bypuLGw9YSpuLGM9MDtjIT09bjsrK2MpcltsK2NdPXJbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHIsMCxhKm4pKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPXIpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Zbi5hcnJheVNsaWNlKHRoaXMudGltZXMsMCkscj1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLG49dGhpcy5jb25zdHJ1Y3RvcixpPW5ldyBuKHRoaXMubmFtZSx0LHIpO3JldHVybiBpLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsaX19O0RsLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQO3ZhciBhbT1jbGFzcyBleHRlbmRzIERse307YW0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO2FtLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7YW0ucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBNNj1jbGFzcyBleHRlbmRzIERse307TTYucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgWjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O1oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBFVT1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0obi1yKS8oaS1yKSxjPXQqcztmb3IobGV0IHU9YytzO2MhPT11O2MrPTQpeWkuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxYMD1jbGFzcyBleHRlbmRzIERse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEVVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1gwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYMC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249WlA7WDAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNtPWNsYXNzIGV4dGVuZHMgRGx7fTtzbS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgSjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O0oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBRMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9LTEsbixpPSRVKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249cix0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ObCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCByPVtdLG49dC50cmFja3MsaT0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthIT09czsrK2Epci5wdXNoKHMwcihuW2FdKS5zY2FsZShpKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24scix0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCByPVtdLG49dC50cmFja3MsaT17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6cix1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9bi5sZW5ndGg7byE9PWE7KytvKXIucHVzaChEbC50b0pTT04obltvXSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LHIsbixpKXtsZXQgbz1yLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9WW4uZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPVluLnNvcnRlZEFycmF5KGwsMSx1KSxjPVluLnNvcnRlZEFycmF5KGMsMSx1KSwhaSYmbFswXT09PTAmJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IFoxKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrcltzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQscil7bGV0IG49dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IGk9dDtuPWkuZ2VvbWV0cnkmJmkuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8aS5hbmltYXRpb25zfWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV0ubmFtZT09PXIpcmV0dXJuIG5baV07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQscixuKXtsZXQgaT17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKyl7bGV0IGM9dFtzXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9aVtoXTtmfHwoaVtoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBhPVtdO2ZvcihsZXQgcyBpbiBpKWEucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHMsaVtzXSxyLG4pKTtyZXR1cm4gYX1zdGF0aWMgcGFyc2VBbmltYXRpb24odCxyKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBuPWZ1bmN0aW9uKGgsZixwLGQsZyl7aWYocC5sZW5ndGghPT0wKXtsZXQgXz1bXSx5PVtdO1luLmZsYXR0ZW5KU09OKHAsXyx5LGQpLF8ubGVuZ3RoIT09MCYmZy5wdXNoKG5ldyBoKGYsXyx5KSl9fSxpPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIsYT10LmZwc3x8MzAscz10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBwPXt9LGQ7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylpZihmW2RdLm1vcnBoVGFyZ2V0cylmb3IobGV0IGc9MDtnPGZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDtnKyspcFtmW2RdLm1vcnBoVGFyZ2V0c1tnXV09LTE7Zm9yKGxldCBnIGluIHApe2xldCBfPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PWZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBiPWZbZF07Xy5wdXNoKGIudGltZSkseS5wdXNoKGIubW9ycGhUYXJnZXQ9PT1nPzE6MCl9aS5wdXNoKG5ldyBaMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrZysiXSIsXyx5KSl9bD1wLmxlbmd0aCooYXx8MSl9ZWxzZXtsZXQgcD0iLmJvbmVzWyIrcltoXS5uYW1lKyJdIjtuKEoxLHArIi5wb3NpdGlvbiIsZiwicG9zIixpKSxuKFgwLHArIi5xdWF0ZXJuaW9uIixmLCJyb3QiLGkpLG4oSjEscCsiLnNjYWxlIixmLCJzY2wiLGkpfX1yZXR1cm4gaS5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMobyxsLGkscyl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO24hPT1pOysrbil7bGV0IG89dGhpcy50cmFja3Nbbl07cj1NYXRoLm1heChyLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPXIsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0PXQmJnRoaXMudHJhY2tzW3JdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0LnB1c2godGhpcy50cmFja3Nbcl0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGEwcihlKXtzd2l0Y2goZS50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBaMTtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIEoxO2Nhc2UiY29sb3IiOnJldHVybiBNNjtjYXNlInF1YXRlcm5pb24iOnJldHVybiBYMDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGFtO2Nhc2Uic3RyaW5nIjpyZXR1cm4gc219dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitlKX1mdW5jdGlvbiBzMHIoZSl7aWYoZS50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1hMHIoZS50eXBlKTtpZihlLnRpbWVzPT09dm9pZCAwKXtsZXQgcj1bXSxuPVtdO1luLmZsYXR0ZW5KU09OKGUua2V5cyxyLG4sInZhbHVlIiksZS50aW1lcz1yLGUudmFsdWVzPW59cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShlKTpuZXcgdChlLm5hbWUsZS50aW1lcyxlLnZhbHVlcyxlLmludGVycG9sYXRpb24pfXZhciB0eD17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbZV09dCl9LGdldDpmdW5jdGlvbihlKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tlXX0scmVtb3ZlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmZpbGVzW2VdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxFNj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9dGhpcyxvPSExLGE9MCxzPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9cix0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXtzKyssbz09PSExJiZpLm9uU3RhcnQhPT12b2lkIDAmJmkub25TdGFydCh1LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe2ErKyxpLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJmkub25Qcm9ncmVzcyh1LGEscyksYT09PXMmJihvPSExLGkub25Mb2FkIT09dm9pZCAwJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7aS5vbkVycm9yIT09dm9pZCAwJiZpLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgcD1jW2hdLGQ9Y1toKzFdO2lmKHAuZ2xvYmFsJiYocC5sYXN0SW5kZXg9MCkscC50ZXN0KHUpKXJldHVybiBkfXJldHVybiBudWxsfX19LHRwZT1uZXcgRTYsZWE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXQhPT12b2lkIDA/dDp0cGUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQscil7bGV0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLmxvYWQodCxpLHIsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sWWQ9e30sSmM9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXR4LmdldCh0KTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntyJiZyKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKFlkW3RdIT09dm9pZCAwKXtZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7cmV0dXJufVlkW3RdPVtdLFlkW3RdLnB1c2goe29uTG9hZDpyLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtsZXQgYT1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxzPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChhKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PVlkW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxwPWY/cGFyc2VJbnQoZik6MCxkPXAhPT0wLGc9MCxfPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoeSl7eCgpO2Z1bmN0aW9uIHgoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOlN9KT0+e2lmKGIpeS5jbG9zZSgpO2Vsc2V7Zys9Uy5ieXRlTGVuZ3RoO2xldCBDPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6ZCxsb2FkZWQ6Zyx0b3RhbDpwfSk7Zm9yKGxldCBQPTAsaz11Lmxlbmd0aDtQPGs7UCsrKXtsZXQgTz11W1BdO08ub25Qcm9ncmVzcyYmTy5vblByb2dyZXNzKEMpfXkuZW5xdWV1ZShTKSx4KCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2UoXyl9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHM9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocyksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAscD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGQ9PnAuZGVjb2RlKGQpKX19fSkudGhlbihjPT57dHguYWRkKHQsYyk7bGV0IHU9WWRbdF07ZGVsZXRlIFlkW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9dVtoXTtwLm9uTG9hZCYmcC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVlkW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkVycm9yJiZwLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sb2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1RMS5wYXJzZSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSxhaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1bXSxzPW5ldyBhNixsPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2wuc2V0UGF0aCh0aGlzLnBhdGgpLGwuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGwuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGwuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKTtsZXQgYz0wO2Z1bmN0aW9uIHUoaCl7bC5sb2FkKHRbaF0sZnVuY3Rpb24oZil7bGV0IHA9by5wYXJzZShmLCEwKTthW2hdPXt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxmb3JtYXQ6cC5mb3JtYXQsbWlwbWFwczpwLm1pcG1hcHN9LGMrPTEsYz09PTYmJihwLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmltYWdlPWEscy5mb3JtYXQ9cC5mb3JtYXQscy5uZWVkc1VwZGF0ZT0hMCxyJiZyKHMpKX0sbixpKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgaD0wLGY9dC5sZW5ndGg7aDxmOysraCl1KGgpO2Vsc2UgbC5sb2FkKHQsZnVuY3Rpb24oaCl7bGV0IGY9by5wYXJzZShoLCEwKTtpZihmLmlzQ3ViZW1hcCl7bGV0IHA9Zi5taXBtYXBzLmxlbmd0aC9mLm1pcG1hcENvdW50O2ZvcihsZXQgZD0wO2Q8cDtkKyspe2FbZF09e21pcG1hcHM6W119O2ZvcihsZXQgZz0wO2c8Zi5taXBtYXBDb3VudDtnKyspYVtkXS5taXBtYXBzLnB1c2goZi5taXBtYXBzW2QqZi5taXBtYXBDb3VudCtnXSksYVtkXS5mb3JtYXQ9Zi5mb3JtYXQsYVtkXS53aWR0aD1mLndpZHRoLGFbZF0uaGVpZ2h0PWYuaGVpZ2h0fXMuaW1hZ2U9YX1lbHNlIHMuaW1hZ2Uud2lkdGg9Zi53aWR0aCxzLmltYWdlLmhlaWdodD1mLmhlaWdodCxzLm1pcG1hcHM9Zi5taXBtYXBzO2YubWlwbWFwQ291bnQ9PT0xJiYocy5taW5GaWx0ZXI9aWkpLHMuZm9ybWF0PWYuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKX0sbixpKTtyZXR1cm4gc319LGV4PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXRoaXMsYT10eC5nZXQodCk7aWYoYSE9PXZvaWQgMClyZXR1cm4gby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ciYmcihhKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksYTtsZXQgcz10NigiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSx0eC5hZGQodCx0aGlzKSxyJiZyKHRoaXMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLGkmJmkoaCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKHMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzLnNyYz10LHN9fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IEgwLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7YS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxhLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgcz0wO2Z1bmN0aW9uIGwoYyl7YS5sb2FkKHRbY10sZnVuY3Rpb24odSl7by5pbWFnZXNbY109dSxzKysscz09PTYmJihvLm5lZWRzVXBkYXRlPSEwLHImJnIobykpfSx2b2lkIDAsaSl9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gb319LENVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpkLHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1vLnBhcnNlKGwpOyFjfHwoYy5pbWFnZSE9PXZvaWQgMD9hLmltYWdlPWMuaW1hZ2U6Yy5kYXRhIT09dm9pZCAwJiYoYS5pbWFnZS53aWR0aD1jLndpZHRoLGEuaW1hZ2UuaGVpZ2h0PWMuaGVpZ2h0LGEuaW1hZ2UuZGF0YT1jLmRhdGEpLGEud3JhcFM9Yy53cmFwUyE9PXZvaWQgMD9jLndyYXBTOkpvLGEud3JhcFQ9Yy53cmFwVCE9PXZvaWQgMD9jLndyYXBUOkpvLGEubWFnRmlsdGVyPWMubWFnRmlsdGVyIT09dm9pZCAwP2MubWFnRmlsdGVyOmlpLGEubWluRmlsdGVyPWMubWluRmlsdGVyIT09dm9pZCAwP2MubWluRmlsdGVyOmlpLGEuYW5pc290cm9weT1jLmFuaXNvdHJvcHkhPT12b2lkIDA/Yy5hbmlzb3Ryb3B5OjEsYy5lbmNvZGluZyE9PXZvaWQgMCYmKGEuZW5jb2Rpbmc9Yy5lbmNvZGluZyksYy5mbGlwWSE9PXZvaWQgMCYmKGEuZmxpcFk9Yy5mbGlwWSksYy5mb3JtYXQhPT12b2lkIDAmJihhLmZvcm1hdD1jLmZvcm1hdCksYy50eXBlIT09dm9pZCAwJiYoYS50eXBlPWMudHlwZSksYy5taXBtYXBzIT09dm9pZCAwJiYoYS5taXBtYXBzPWMubWlwbWFwcyxhLm1pbkZpbHRlcj1veCksYy5taXBtYXBDb3VudD09PTEmJihhLm1pbkZpbHRlcj1paSksYy5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDAmJihhLmdlbmVyYXRlTWlwbWFwcz1jLmdlbmVyYXRlTWlwbWFwcyksYS5uZWVkc1VwZGF0ZT0hMCxyJiZyKGEsYykpfSxuLGkpLGF9fSxBVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IHZpLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCksYS5sb2FkKHQsZnVuY3Rpb24ocyl7by5pbWFnZT1zLG8ubmVlZHNVcGRhdGU9ITAsciE9PXZvaWQgMCYmcihvKX0sbixpKSxvfX0sT2w9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLmludGVuc2l0eT1yfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLHIub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoci5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKHIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihyLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoci5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKHIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoci5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxyfX07T2wucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFQ2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsbiksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgbmUocil9Y29weSh0KXtyZXR1cm4gT2wucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VDYucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBnaGU9bmV3IE1lLF9oZT1uZXcgaix5aGU9bmV3IGosQzY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEx0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IE4xLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgTHQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgZW4oMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IHI9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtfaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLHIucG9zaXRpb24uY29weShfaGUpLHloZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLHIubG9va0F0KHloZSksci51cGRhdGVNYXRyaXhXb3JsZCgpLGdoZS5tdWx0aXBseU1hdHJpY2VzKHIucHJvamVjdGlvbk1hdHJpeCxyLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChnaGUpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoci5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KHIubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXt9O3JldHVybiB0aGlzLmJpYXMhPT0wJiYodC5iaWFzPXRoaXMuYmlhcyksdGhpcy5ub3JtYWxCaWFzIT09MCYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLHRoaXMucmFkaXVzIT09MSYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSwodGhpcy5tYXBTaXplLnghPT01MTJ8fHRoaXMubWFwU2l6ZS55IT09NTEyKSYmKHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fSxQVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49UVAqMip0LmFuZ2xlKnRoaXMuZm9jdXMsaT10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodCxvPXQuZGlzdGFuY2V8fHIuZmFyOyhuIT09ci5mb3Z8fGkhPT1yLmFzcGVjdHx8byE9PXIuZmFyKSYmKHIuZm92PW4sci5hc3BlY3Q9aSxyLmZhcj1vLHIudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX07UFUucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwO3ZhciBBNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT1NYXRoLlBJLzMsbz0wLGE9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5kaXN0YW5jZT1uLHRoaXMuYW5nbGU9aSx0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1hLHRoaXMuc2hhZG93PW5ldyBQVX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtBNi5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIHZoZT1uZXcgTWUsQlA9bmV3IGoseHV0PW5ldyBqLElVPWNsYXNzIGV4dGVuZHMgQzZ7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWkoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDIsMSwxLDEpLG5ldyBlbigwLDEsMSwxKSxuZXcgZW4oMywxLDEsMSksbmV3IGVuKDEsMSwxLDEpLG5ldyBlbigzLDAsMSwxKSxuZXcgZW4oMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgaigxLDAsMCksbmV3IGooLTEsMCwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKSxuZXcgaigwLDEsMCksbmV3IGooMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMCwxKSxuZXcgaigwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LHI9MCl7bGV0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fG4uZmFyO28hPT1uLmZhciYmKG4uZmFyPW8sbi51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLEJQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoQlApLHh1dC5jb3B5KG4ucG9zaXRpb24pLHh1dC5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbcl0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW3JdKSxuLmxvb2tBdCh4dXQpLG4udXBkYXRlTWF0cml4V29ybGQoKSxpLm1ha2VUcmFuc2xhdGlvbigtQlAueCwtQlAueSwtQlAueiksdmhlLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHZoZSl9fTtJVS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT0xKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1uLHRoaXMuZGVjYXk9aSx0aGlzLnNoYWRvdz1uZXcgSVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IEQxKC01LDUsNSwtNSwuNSw1MDApKX19O0xVLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIEk2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5zaGFkb3c9bmV3IExVfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0k2LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0w2LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgazY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0xMCxpPTEwKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsci5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LHJ9fTtrNi5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBSNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgail9c2V0KHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspdGhpcy5jb2VmZmljaWVudHNbcl0uY29weSh0W3JdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIHIuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxyLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxyLmFkZFNjYWxlZFZlY3RvcihhWzRdLDEuMDkyNTQ4KihuKmkpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDEuMDkyNTQ4KihpKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzddLDEuMDkyNTQ4KihuKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxyfWdldElycmFkaWFuY2VBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwyKi41MTE2NjQqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwyKi41MTE2NjQqbyksci5hZGRTY2FsZWRWZWN0b3IoYVszXSwyKi41MTE2NjQqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwyKi40MjkwNDMqbippKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDIqLjQyOTA0MyppKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwyKi40MjkwNDMqbipvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC40MjkwNDMqKG4qbi1pKmkpKSxyfWFkZCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmFkZCh0LmNvZWZmaWNpZW50c1tyXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tuXSxyKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmxlcnAodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW3JdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tyXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxyK2kqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLnRvQXJyYXkodCxyK2kqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10Lno7clswXT0uMjgyMDk1LHJbMV09LjQ4ODYwMyppLHJbMl09LjQ4ODYwMypvLHJbM109LjQ4ODYwMypuLHJbNF09MS4wOTI1NDgqbippLHJbNV09MS4wOTI1NDgqaSpvLHJbNl09LjMxNTM5MiooMypvKm8tMSkscls3XT0xLjA5MjU0OCpuKm8scls4XT0uNTQ2Mjc0KihuKm4taSppKX19O1I2LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIHJ4PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodD1uZXcgUjYscj0xKXtzdXBlcih2b2lkIDAsciksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCkscn19O3J4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9dGhpcy50ZXh0dXJlcztmdW5jdGlvbiBuKG8pe3JldHVybiByW29dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsbykscltvXX1sZXQgaT1uZXcgbzByW3QudHlwZV07aWYodC51dWlkIT09dm9pZCAwJiYoaS51dWlkPXQudXVpZCksdC5uYW1lIT09dm9pZCAwJiYoaS5uYW1lPXQubmFtZSksdC5jb2xvciE9PXZvaWQgMCYmaS5jb2xvciE9PXZvaWQgMCYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdC5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdC5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdC5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dC5zaGVlbiksdC5zaGVlbkNvbG9yIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yPW5ldyBuZSgpLnNldEhleCh0LnNoZWVuQ29sb3IpKSx0LnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzKSx0LmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlLnNldEhleCh0LmVtaXNzaXZlKSx0LnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyLnNldEhleCh0LnNwZWN1bGFyKSx0LnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYoaS5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5KSx0LnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvciE9PXZvaWQgMCYmaS5zcGVjdWxhckNvbG9yLnNldEhleCh0LnNwZWN1bGFyQ29sb3IpLHQuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHQuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHQuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHQudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHQudGhpY2tuZXNzIT09dm9pZCAwJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHQuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHQuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiZpLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KHQuYXR0ZW51YXRpb25Db2xvciksdC5mb2chPT12b2lkIDAmJihpLmZvZz10LmZvZyksdC5mbGF0U2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdC5ibGVuZGluZyE9PXZvaWQgMCYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdC5jb21iaW5lIT09dm9pZCAwJiYoaS5jb21iaW5lPXQuY29tYmluZSksdC5zaWRlIT09dm9pZCAwJiYoaS5zaWRlPXQuc2lkZSksdC5zaGFkb3dTaWRlIT09dm9pZCAwJiYoaS5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSksdC5vcGFjaXR5IT09dm9pZCAwJiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdC50cmFuc3BhcmVudCE9PXZvaWQgMCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdC5hbHBoYVRlc3QhPT12b2lkIDAmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdC5kZXB0aFRlc3QhPT12b2lkIDAmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdC5kZXB0aFdyaXRlIT09dm9pZCAwJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdC5jb2xvcldyaXRlIT09dm9pZCAwJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdC5hbHBoYVdyaXRlIT09dm9pZCAwJiYoaS5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSksdC5zdGVuY2lsV3JpdGUhPT12b2lkIDAmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdC5zdGVuY2lsV3JpdGVNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdC5zdGVuY2lsRnVuYyE9PXZvaWQgMCYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdC5zdGVuY2lsUmVmIT09dm9pZCAwJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdC5zdGVuY2lsRnVuY01hc2shPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdC5zdGVuY2lsRmFpbCE9PXZvaWQgMCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdC5zdGVuY2lsWkZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdC5zdGVuY2lsWlBhc3MhPT12b2lkIDAmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdC53aXJlZnJhbWUhPT12b2lkIDAmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdC53aXJlZnJhbWVMaW5ld2lkdGghPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdC53aXJlZnJhbWVMaW5lY2FwIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdC53aXJlZnJhbWVMaW5lam9pbiE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdC5yb3RhdGlvbiE9PXZvaWQgMCYmKGkucm90YXRpb249dC5yb3RhdGlvbiksdC5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHQuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHQuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHQuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXQuc2NhbGUpLHQucG9seWdvbk9mZnNldCE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHQucG9seWdvbk9mZnNldEZhY3RvciE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHQucG9seWdvbk9mZnNldFVuaXRzIT09dm9pZCAwJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHQuZGl0aGVyaW5nIT09dm9pZCAwJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHQuYWxwaGFUb0NvdmVyYWdlIT09dm9pZCAwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UpLHQucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEpLHQudmlzaWJsZSE9PXZvaWQgMCYmKGkudmlzaWJsZT10LnZpc2libGUpLHQudG9uZU1hcHBlZCE9PXZvaWQgMCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHQudXNlckRhdGEhPT12b2lkIDAmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHQudmVydGV4Q29sb3JzIT09dm9pZCAwJiYodHlwZW9mIHQudmVydGV4Q29sb3JzPT0ibnVtYmVyIj9pLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycz4wOmkudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzKSx0LnVuaWZvcm1zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LnVuaWZvcm1zKXtsZXQgYT10LnVuaWZvcm1zW29dO3N3aXRjaChpLnVuaWZvcm1zW29dPXt9LGEudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW29dLnZhbHVlPW4oYS52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBuZSgpLnNldEhleChhLnZhbHVlKTticmVhaztjYXNlInYyIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBMdCgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBqKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UidjQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGVuKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGtpKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IE1lKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2RlZmF1bHQ6aS51bmlmb3Jtc1tvXS52YWx1ZT1hLnZhbHVlfX1pZih0LmRlZmluZXMhPT12b2lkIDAmJihpLmRlZmluZXM9dC5kZWZpbmVzKSx0LnZlcnRleFNoYWRlciE9PXZvaWQgMCYmKGkudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyKSx0LmZyYWdtZW50U2hhZGVyIT09dm9pZCAwJiYoaS5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyKSx0LmV4dGVuc2lvbnMhPT12b2lkIDApZm9yKGxldCBvIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbb109dC5leHRlbnNpb25zW29dO2lmKHQuc2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5zaGFkaW5nPT09MSksdC5zaXplIT09dm9pZCAwJiYoaS5zaXplPXQuc2l6ZSksdC5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdC5tYXAhPT12b2lkIDAmJihpLm1hcD1uKHQubWFwKSksdC5tYXRjYXAhPT12b2lkIDAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdC5hbHBoYU1hcCE9PXZvaWQgMCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdC5idW1wTWFwIT09dm9pZCAwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdC5idW1wU2NhbGUhPT12b2lkIDAmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdC5ub3JtYWxNYXAhPT12b2lkIDAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdC5ub3JtYWxNYXBUeXBlIT09dm9pZCAwJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdC5ub3JtYWxTY2FsZSE9PXZvaWQgMCl7bGV0IG89dC5ub3JtYWxTY2FsZTtBcnJheS5pc0FycmF5KG8pPT09ITEmJihvPVtvLG9dKSxpLm5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheShvKX1yZXR1cm4gdC5kaXNwbGFjZW1lbnRNYXAhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudE1hcD1uKHQuZGlzcGxhY2VtZW50TWFwKSksdC5kaXNwbGFjZW1lbnRTY2FsZSE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSksdC5kaXNwbGFjZW1lbnRCaWFzIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50QmlhcyksdC5yb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLnJvdWdobmVzc01hcD1uKHQucm91Z2huZXNzTWFwKSksdC5tZXRhbG5lc3NNYXAhPT12b2lkIDAmJihpLm1ldGFsbmVzc01hcD1uKHQubWV0YWxuZXNzTWFwKSksdC5lbWlzc2l2ZU1hcCE9PXZvaWQgMCYmKGkuZW1pc3NpdmVNYXA9bih0LmVtaXNzaXZlTWFwKSksdC5lbWlzc2l2ZUludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSksdC5zcGVjdWxhck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJNYXA9bih0LnNwZWN1bGFyTWFwKSksdC5zcGVjdWxhckludGVuc2l0eU1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bih0LnNwZWN1bGFySW50ZW5zaXR5TWFwKSksdC5zcGVjdWxhckNvbG9yTWFwIT09dm9pZCAwJiYoaS5zcGVjdWxhckNvbG9yTWFwPW4odC5zcGVjdWxhckNvbG9yTWFwKSksdC5lbnZNYXAhPT12b2lkIDAmJihpLmVudk1hcD1uKHQuZW52TWFwKSksdC5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSksdC5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSksdC5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyksdC5saWdodE1hcCE9PXZvaWQgMCYmKGkubGlnaHRNYXA9bih0LmxpZ2h0TWFwKSksdC5saWdodE1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSksdC5hb01hcCE9PXZvaWQgMCYmKGkuYW9NYXA9bih0LmFvTWFwKSksdC5hb01hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSksdC5ncmFkaWVudE1hcCE9PXZvaWQgMCYmKGkuZ3JhZGllbnRNYXA9bih0LmdyYWRpZW50TWFwKSksdC5jbGVhcmNvYXRNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE1hcD1uKHQuY2xlYXJjb2F0TWFwKSksdC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD1uKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSksdC5jbGVhcmNvYXROb3JtYWxNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbE1hcD1uKHQuY2xlYXJjb2F0Tm9ybWFsTWFwKSksdC5jbGVhcmNvYXROb3JtYWxTY2FsZSE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx0LnRyYW5zbWlzc2lvbk1hcCE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSx0LnRoaWNrbmVzc01hcCE9PXZvaWQgMCYmKGkudGhpY2tuZXNzTWFwPW4odC50aGlja25lc3NNYXApKSx0LnNoZWVuQ29sb3JNYXAhPT12b2lkIDAmJihpLnNoZWVuQ29sb3JNYXA9bih0LnNoZWVuQ29sb3JNYXApKSx0LnNoZWVuUm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzc01hcD1uKHQuc2hlZW5Sb3VnaG5lc3NNYXApKSxpfXNldFRleHR1cmVzKHQpe3JldHVybiB0aGlzLnRleHR1cmVzPXQsdGhpc319LGRNPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocikpfWNhdGNoKG4pe3JldHVybiByfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IHI9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiByPT09LTE/Ii4vIjp0LnN1YnN0cigwLHIrMSl9c3RhdGljIHJlc29sdmVVUkwodCxyKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KHIpJiYvXlwvLy50ZXN0KHQpJiYocj1yLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OnIrdCl9fSxONj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtONi5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgUlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9e30sbj17fTtmdW5jdGlvbiBpKHAsZCl7aWYocltkXSE9PXZvaWQgMClyZXR1cm4gcltkXTtsZXQgXz1wLmludGVybGVhdmVkQnVmZmVyc1tkXSx5PW8ocCxfLmJ1ZmZlcikseD1CMyhfLnR5cGUseSksYj1uZXcgZW0oeCxfLnN0cmlkZSk7cmV0dXJuIGIudXVpZD1fLnV1aWQscltkXT1iLGJ9ZnVuY3Rpb24gbyhwLGQpe2lmKG5bZF0hPT12b2lkIDApcmV0dXJuIG5bZF07bGV0IF89cC5hcnJheUJ1ZmZlcnNbZF0seT1uZXcgVWludDMyQXJyYXkoXykuYnVmZmVyO3JldHVybiBuW2RdPXkseX1sZXQgYT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IE42Om5ldyBQZSxzPXQuZGF0YS5pbmRleDtpZihzIT09dm9pZCAwKXtsZXQgcD1CMyhzLnR5cGUscy5hcnJheSk7YS5zZXRJbmRleChuZXcgSmUocCwxKSl9bGV0IGw9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGxldCBwIGluIGwpe2xldCBkPWxbcF0sZztpZihkLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBfPWkodC5kYXRhLGQuZGF0YSk7Zz1uZXcgdHAoXyxkLml0ZW1TaXplLGQub2Zmc2V0LGQubm9ybWFsaXplZCl9ZWxzZXtsZXQgXz1CMyhkLnR5cGUsZC5hcnJheSkseT1kLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3JtOkplO2c9bmV3IHkoXyxkLml0ZW1TaXplLGQubm9ybWFsaXplZCl9ZC5uYW1lIT09dm9pZCAwJiYoZy5uYW1lPWQubmFtZSksZC51c2FnZSE9PXZvaWQgMCYmZy5zZXRVc2FnZShkLnVzYWdlKSxkLnVwZGF0ZVJhbmdlIT09dm9pZCAwJiYoZy51cGRhdGVSYW5nZS5vZmZzZXQ9ZC51cGRhdGVSYW5nZS5vZmZzZXQsZy51cGRhdGVSYW5nZS5jb3VudD1kLnVwZGF0ZVJhbmdlLmNvdW50KSxhLnNldEF0dHJpYnV0ZShwLGcpfWxldCBjPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoYylmb3IobGV0IHAgaW4gYyl7bGV0IGQ9Y1twXSxnPVtdO2ZvcihsZXQgXz0wLHk9ZC5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9ZFtfXSxiO2lmKHguaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFM9aSh0LmRhdGEseC5kYXRhKTtiPW5ldyB0cChTLHguaXRlbVNpemUseC5vZmZzZXQseC5ub3JtYWxpemVkKX1lbHNle2xldCBTPUIzKHgudHlwZSx4LmFycmF5KTtiPW5ldyBKZShTLHguaXRlbVNpemUseC5ub3JtYWxpemVkKX14Lm5hbWUhPT12b2lkIDAmJihiLm5hbWU9eC5uYW1lKSxnLnB1c2goYil9YS5tb3JwaEF0dHJpYnV0ZXNbcF09Z310LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUmJihhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSEwKTtsZXQgaD10LmRhdGEuZ3JvdXBzfHx0LmRhdGEuZHJhd2NhbGxzfHx0LmRhdGEub2Zmc2V0cztpZihoIT09dm9pZCAwKWZvcihsZXQgcD0wLGQ9aC5sZW5ndGg7cCE9PWQ7KytwKXtsZXQgZz1oW3BdO2EuYWRkR3JvdXAoZy5zdGFydCxnLmNvdW50LGcubWF0ZXJpYWxJbmRleCl9bGV0IGY9dC5kYXRhLmJvdW5kaW5nU3BoZXJlO2lmKGYhPT12b2lkIDApe2xldCBwPW5ldyBqO2YuY2VudGVyIT09dm9pZCAwJiZwLmZyb21BcnJheShmLmNlbnRlciksYS5ib3VuZGluZ1NwaGVyZT1uZXcgWmYocCxmLnJhZGl1cyl9cmV0dXJuIHQubmFtZSYmKGEubmFtZT10Lm5hbWUpLHQudXNlckRhdGEmJihhLnVzZXJEYXRhPXQudXNlckRhdGEpLGF9fSxzaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGE7bGV0IHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cy5zZXRQYXRoKHRoaXMucGF0aCkscy5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcikscy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLHMubG9hZCh0LGZ1bmN0aW9uKGwpe2xldCBjPW51bGw7dHJ5e2M9SlNPTi5wYXJzZShsKX1jYXRjaChoKXtpIT09dm9pZCAwJiZpKGgpLGNvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIit0KyIuIixoLm1lc3NhZ2UpO3JldHVybn1sZXQgdT1jLm1ldGFkYXRhO2lmKHU9PT12b2lkIDB8fHUudHlwZT09PXZvaWQgMHx8dS50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KTtyZXR1cm59by5wYXJzZShjLHIpfSxuLGkpfWxvYWRBc3luYyh0LHIpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IG49dGhpcyxpPXRoaXMucGF0aD09PSIiP2RNLmV4dHJhY3RVcmxCYXNlKHQpOnRoaXMucGF0aDt0aGlzLnJlc291cmNlUGF0aD10aGlzLnJlc291cmNlUGF0aHx8aTtsZXQgbz1uZXcgSmModGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7bGV0IGE9eWllbGQgby5sb2FkQXN5bmModCxyKSxzPUpTT04ucGFyc2UoYSksbD1zLm1ldGFkYXRhO2lmKGw9PT12b2lkIDB8fGwudHlwZT09PXZvaWQgMHx8bC50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXRocm93IG5ldyBFcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJuIHlpZWxkIG4ucGFyc2VBc3luYyhzKX0pfXBhcnNlKHQscil7bGV0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLG89dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLGE9dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcyxmdW5jdGlvbigpe3IhPT12b2lkIDAmJnIoYyl9KSxzPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLGEpLGw9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxzKSxjPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsbyxsLHMsbiksdT10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGMpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhjLHUpLHIhPT12b2lkIDApe2xldCBoPSExO2ZvcihsZXQgZiBpbiBhKWlmKGFbZl1pbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpe2g9ITA7YnJlYWt9aD09PSExJiZyKGMpfXJldHVybiBjfXBhcnNlQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLnBhcnNlQW5pbWF0aW9ucyh0LmFuaW1hdGlvbnMpLG49dGhpcy5wYXJzZVNoYXBlcyh0LnNoYXBlcyksaT10aGlzLnBhcnNlR2VvbWV0cmllcyh0Lmdlb21ldHJpZXMsbiksbz15aWVsZCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmModC5pbWFnZXMpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxpLHMsYSxyKSxjPXRoaXMucGFyc2VTa2VsZXRvbnModC5za2VsZXRvbnMsbCk7cmV0dXJuIHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLGx9KX1wYXJzZVNoYXBlcyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7bGV0IG89bmV3IEtjKCkuZnJvbUpTT04odFtuXSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VTa2VsZXRvbnModCxyKXtsZXQgbj17fSxpPXt9O2lmKHIudHJhdmVyc2UoZnVuY3Rpb24obyl7by5pc0JvbmUmJihpW28udXVpZF09byl9KSx0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9bmV3IGxNKCkuZnJvbUpTT04odFtvXSxpKTtuW3MudXVpZF09c31yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxyKXtsZXQgbj17fTtpZih0IT09dm9pZCAwKXtsZXQgaT1uZXcgUlU7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgcyxsPXRbb107c3dpdGNoKGwudHlwZSl7Y2FzZSJCdWZmZXJHZW9tZXRyeSI6Y2FzZSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI6cz1pLnBhcnNlKGwpO2JyZWFrO2Nhc2UiR2VvbWV0cnkiOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7ZGVmYXVsdDpsLnR5cGUgaW4gbWhlP3M9bWhlW2wudHlwZV0uZnJvbUpTT04obCxyKTpjb25zb2xlLndhcm4oYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJHtsLnR5cGV9ImApfXMudXVpZD1sLnV1aWQsbC5uYW1lIT09dm9pZCAwJiYocy5uYW1lPWwubmFtZSkscy5pc0J1ZmZlckdlb21ldHJ5PT09ITAmJmwudXNlckRhdGEhPT12b2lkIDAmJihzLnVzZXJEYXRhPWwudXNlckRhdGEpLG5bbC51dWlkXT1zfX1yZXR1cm4gbn1wYXJzZU1hdGVyaWFscyh0LHIpe2xldCBuPXt9LGk9e307aWYodCE9PXZvaWQgMCl7bGV0IG89bmV3IGtVO28uc2V0VGV4dHVyZXMocik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdO2lmKGwudHlwZT09PSJNdWx0aU1hdGVyaWFsIil7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxsLm1hdGVyaWFscy5sZW5ndGg7dSsrKXtsZXQgaD1sLm1hdGVyaWFsc1t1XTtuW2gudXVpZF09PT12b2lkIDAmJihuW2gudXVpZF09by5wYXJzZShoKSksYy5wdXNoKG5baC51dWlkXSl9aVtsLnV1aWRdPWN9ZWxzZSBuW2wudXVpZF09PT12b2lkIDAmJihuW2wudXVpZF09by5wYXJzZShsKSksaVtsLnV1aWRdPW5bbC51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2xldCByPXt9O2lmKHQhPT12b2lkIDApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0sbz1RMS5wYXJzZShpKTtyW28udXVpZF09b31yZXR1cm4gcn1wYXJzZUltYWdlcyh0LHIpe2xldCBuPXRoaXMsaT17fSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4ubWFuYWdlci5pdGVtU3RhcnQobCksby5sb2FkKGwsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZChsKX0sdm9pZCAwLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FcnJvcihsKSxuLm1hbmFnZXIuaXRlbUVuZChsKX0pfWZ1bmN0aW9uIHMobCl7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtsZXQgYz1sLHU9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoYyk/YzpuLnJlc291cmNlUGF0aCtjO3JldHVybiBhKHUpfWVsc2UgcmV0dXJuIGwuZGF0YT97ZGF0YTpCMyhsLnR5cGUsbC5kYXRhKSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH06bnVsbH1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtsZXQgbD1uZXcgRTYocik7bz1uZXcgZXgobCksby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGM9MCx1PXQubGVuZ3RoO2M8dTtjKyspe2xldCBoPXRbY10sZj1oLnVybDtpZihBcnJheS5pc0FycmF5KGYpKXtpW2gudXVpZF09W107Zm9yKGxldCBwPTAsZD1mLmxlbmd0aDtwPGQ7cCsrKXtsZXQgZz1mW3BdLF89cyhnKTtfIT09bnVsbCYmKF8gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbaC51dWlkXS5wdXNoKF8pOmlbaC51dWlkXS5wdXNoKG5ldyBKZChfLmRhdGEsXy53aWR0aCxfLmhlaWdodCkpKX19ZWxzZXtsZXQgcD1zKGgudXJsKTtwIT09bnVsbCYmKGlbaC51dWlkXT1wKX19fXJldHVybiBpfXBhcnNlSW1hZ2VzQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLG49e30saTtmdW5jdGlvbiBvKGEpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtsZXQgcz1hLGw9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3Qocyk/czpyLnJlc291cmNlUGF0aCtzO3JldHVybiB5aWVsZCBpLmxvYWRBc3luYyhsKX1lbHNlIHJldHVybiBhLmRhdGE/e2RhdGE6QjMoYS50eXBlLGEuZGF0YSksd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9Om51bGx9KX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtpPW5ldyBleCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdLGM9bC51cmw7aWYoQXJyYXkuaXNBcnJheShjKSl7bltsLnV1aWRdPVtdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXlpZWxkIG8oZik7cCE9PW51bGwmJihwIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9uW2wudXVpZF0ucHVzaChwKTpuW2wudXVpZF0ucHVzaChuZXcgSmQocC5kYXRhLHAud2lkdGgscC5oZWlnaHQpKSl9fWVsc2V7bGV0IHU9eWllbGQgbyhsLnVybCk7dSE9PW51bGwmJihuW2wudXVpZF09dSl9fX1yZXR1cm4gbn0pfXBhcnNlVGV4dHVyZXModCxyKXtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuIHR5cGVvZiBvPT0ibnVtYmVyIj9vOihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uIixvKSxhW29dKX1sZXQgaT17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXTtzLmltYWdlPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxzLnV1aWQpLHJbcy5pbWFnZV09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHMuaW1hZ2UpO2xldCBsLGM9cltzLmltYWdlXTtBcnJheS5pc0FycmF5KGMpPyhsPW5ldyBIMChjKSxjLmxlbmd0aD09PTYmJihsLm5lZWRzVXBkYXRlPSEwKSk6KGMmJmMuZGF0YT9sPW5ldyBKZChjLmRhdGEsYy53aWR0aCxjLmhlaWdodCk6bD1uZXcgdmkoYyksYyYmKGwubmVlZHNVcGRhdGU9ITApKSxsLnV1aWQ9cy51dWlkLHMubmFtZSE9PXZvaWQgMCYmKGwubmFtZT1zLm5hbWUpLHMubWFwcGluZyE9PXZvaWQgMCYmKGwubWFwcGluZz1uKHMubWFwcGluZyxsMHIpKSxzLm9mZnNldCE9PXZvaWQgMCYmbC5vZmZzZXQuZnJvbUFycmF5KHMub2Zmc2V0KSxzLnJlcGVhdCE9PXZvaWQgMCYmbC5yZXBlYXQuZnJvbUFycmF5KHMucmVwZWF0KSxzLmNlbnRlciE9PXZvaWQgMCYmbC5jZW50ZXIuZnJvbUFycmF5KHMuY2VudGVyKSxzLnJvdGF0aW9uIT09dm9pZCAwJiYobC5yb3RhdGlvbj1zLnJvdGF0aW9uKSxzLndyYXAhPT12b2lkIDAmJihsLndyYXBTPW4ocy53cmFwWzBdLHhoZSksbC53cmFwVD1uKHMud3JhcFsxXSx4aGUpKSxzLmZvcm1hdCE9PXZvaWQgMCYmKGwuZm9ybWF0PXMuZm9ybWF0KSxzLnR5cGUhPT12b2lkIDAmJihsLnR5cGU9cy50eXBlKSxzLmVuY29kaW5nIT09dm9pZCAwJiYobC5lbmNvZGluZz1zLmVuY29kaW5nKSxzLm1pbkZpbHRlciE9PXZvaWQgMCYmKGwubWluRmlsdGVyPW4ocy5taW5GaWx0ZXIsYmhlKSkscy5tYWdGaWx0ZXIhPT12b2lkIDAmJihsLm1hZ0ZpbHRlcj1uKHMubWFnRmlsdGVyLGJoZSkpLHMuYW5pc290cm9weSE9PXZvaWQgMCYmKGwuYW5pc290cm9weT1zLmFuaXNvdHJvcHkpLHMuZmxpcFkhPT12b2lkIDAmJihsLmZsaXBZPXMuZmxpcFkpLHMucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmKGwucHJlbXVsdGlwbHlBbHBoYT1zLnByZW11bHRpcGx5QWxwaGEpLHMudW5wYWNrQWxpZ25tZW50IT09dm9pZCAwJiYobC51bnBhY2tBbGlnbm1lbnQ9cy51bnBhY2tBbGlnbm1lbnQpLHMudXNlckRhdGEhPT12b2lkIDAmJihsLnVzZXJEYXRhPXMudXNlckRhdGEpLGlbcy51dWlkXT1sfXJldHVybiBpfXBhcnNlT2JqZWN0KHQscixuLGksbyl7bGV0IGE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gcltmXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsZikscltmXX1mdW5jdGlvbiBsKGYpe2lmKGYhPT12b2lkIDApe2lmKEFycmF5LmlzQXJyYXkoZikpe2xldCBwPVtdO2ZvcihsZXQgZD0wLGc9Zi5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXTtuW19dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixfKSxwLnB1c2gobltfXSl9cmV0dXJuIHB9cmV0dXJuIG5bZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLGYpLG5bZl19fWZ1bmN0aW9uIGMoZil7cmV0dXJuIGlbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsZiksaVtmXX1sZXQgdSxoO3N3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOmE9bmV3IHEwLHQuYmFja2dyb3VuZCE9PXZvaWQgMCYmKE51bWJlci5pc0ludGVnZXIodC5iYWNrZ3JvdW5kKT9hLmJhY2tncm91bmQ9bmV3IG5lKHQuYmFja2dyb3VuZCk6YS5iYWNrZ3JvdW5kPWModC5iYWNrZ3JvdW5kKSksdC5lbnZpcm9ubWVudCE9PXZvaWQgMCYmKGEuZW52aXJvbm1lbnQ9Yyh0LmVudmlyb25tZW50KSksdC5mb2chPT12b2lkIDAmJih0LmZvZy50eXBlPT09IkZvZyI/YS5mb2c9bmV3IHoxKHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKTp0LmZvZy50eXBlPT09IkZvZ0V4cDIiJiYoYS5mb2c9bmV3IE8xKHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6YT1uZXcgVWkodC5mb3YsdC5hc3BlY3QsdC5uZWFyLHQuZmFyKSx0LmZvY3VzIT09dm9pZCAwJiYoYS5mb2N1cz10LmZvY3VzKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LmZpbG1HYXVnZSE9PXZvaWQgMCYmKGEuZmlsbUdhdWdlPXQuZmlsbUdhdWdlKSx0LmZpbG1PZmZzZXQhPT12b2lkIDAmJihhLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0KSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIk9ydGhvZ3JhcGhpY0NhbWVyYSI6YT1uZXcgRDEodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6YT1uZXcgTDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjphPW5ldyBJNih0LmNvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIlBvaW50TGlnaHQiOmE9bmV3IFA2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmE9bmV3IGs2KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmE9bmV3IEE2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmFuZ2xlLHQucGVudW1icmEsdC5kZWNheSk7YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmE9bmV3IFQ2KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjphPW5ldyByeCgpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgYU0odSxoKSx0LmJpbmRNb2RlIT09dm9pZCAwJiYoYS5iaW5kTW9kZT10LmJpbmRNb2RlKSx0LmJpbmRNYXRyaXghPT12b2lkIDAmJmEuYmluZE1hdHJpeC5mcm9tQXJyYXkodC5iaW5kTWF0cml4KSx0LnNrZWxldG9uIT09dm9pZCAwJiYoYS5za2VsZXRvbj10LnNrZWxldG9uKTticmVhaztjYXNlIk1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgdGkodSxoKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCk7bGV0IGY9dC5jb3VudCxwPXQuaW5zdGFuY2VNYXRyaXgsZD10Lmluc3RhbmNlQ29sb3I7YT1uZXcgaTYodSxoLGYpLGEuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkocC5hcnJheSksMTYpLGQhPT12b2lkIDAmJihhLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkoZC5hcnJheSksZC5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjphPW5ldyBfVTticmVhaztjYXNlIkxpbmUiOmE9bmV3IGNoKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lTG9vcCI6YT1uZXcgbzYocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6YT1uZXcgQWEocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlBvaW50Q2xvdWQiOmNhc2UiUG9pbnRzIjphPW5ldyBpbShzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiU3ByaXRlIjphPW5ldyBvTShsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjphPW5ldyBYZDticmVhaztjYXNlIkJvbmUiOmE9bmV3IHNNO2JyZWFrO2RlZmF1bHQ6YT1uZXcgb3J9aWYoYS51dWlkPXQudXVpZCx0Lm5hbWUhPT12b2lkIDAmJihhLm5hbWU9dC5uYW1lKSx0Lm1hdHJpeCE9PXZvaWQgMD8oYS5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx0Lm1hdHJpeEF1dG9VcGRhdGUhPT12b2lkIDAmJihhLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxhLm1hdHJpeEF1dG9VcGRhdGUmJmEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKSk6KHQucG9zaXRpb24hPT12b2lkIDAmJmEucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHQucm90YXRpb24hPT12b2lkIDAmJmEucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHQucXVhdGVybmlvbiE9PXZvaWQgMCYmYS5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHQuc2NhbGUhPT12b2lkIDAmJmEuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx0LmNhc3RTaGFkb3chPT12b2lkIDAmJihhLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx0LnJlY2VpdmVTaGFkb3chPT12b2lkIDAmJihhLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHQuc2hhZG93LmJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHQuc2hhZG93Lm5vcm1hbEJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHQuc2hhZG93LnJhZGl1cyE9PXZvaWQgMCYmKGEuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHQuc2hhZG93Lm1hcFNpemUhPT12b2lkIDAmJmEuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHQuc2hhZG93LmNhbWVyYSE9PXZvaWQgMCYmKGEuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx0LnZpc2libGUhPT12b2lkIDAmJihhLnZpc2libGU9dC52aXNpYmxlKSx0LmZydXN0dW1DdWxsZWQhPT12b2lkIDAmJihhLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx0LnJlbmRlck9yZGVyIT09dm9pZCAwJiYoYS5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LmxheWVycyE9PXZvaWQgMCYmKGEubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHQuY2hpbGRyZW4hPT12b2lkIDApe2xldCBmPXQuY2hpbGRyZW47Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspYS5hZGQodGhpcy5wYXJzZU9iamVjdChmW3BdLHIsbixpLG8pKX1pZih0LmFuaW1hdGlvbnMhPT12b2lkIDApe2xldCBmPXQuYW5pbWF0aW9ucztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXTthLmFuaW1hdGlvbnMucHVzaChvW2RdKX19aWYodC50eXBlPT09IkxPRCIpe3QuYXV0b1VwZGF0ZSE9PXZvaWQgMCYmKGEuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2xldCBmPXQubGV2ZWxzO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgZD1mW3BdLGc9YS5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixkLm9iamVjdCk7ZyE9PXZvaWQgMCYmYS5hZGRMZXZlbChnLGQuZGlzdGFuY2UpfX1yZXR1cm4gYX1iaW5kU2tlbGV0b25zKHQscil7T2JqZWN0LmtleXMocikubGVuZ3RoIT09MCYmdC50cmF2ZXJzZShmdW5jdGlvbihuKXtpZihuLmlzU2tpbm5lZE1lc2g9PT0hMCYmbi5za2VsZXRvbiE9PXZvaWQgMCl7bGV0IGk9cltuLnNrZWxldG9uXTtpPT09dm9pZCAwP2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6IixuLnNrZWxldG9uKTpuLmJpbmQoaSxuLmJpbmRNYXRyaXgpfX0pfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxsMHI9e1VWTWFwcGluZzpYVSxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6bngsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOml4LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOllQLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOmpQLEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOno2fSx4aGU9e1JlcGVhdFdyYXBwaW5nOlhQLENsYW1wVG9FZGdlV3JhcHBpbmc6Sm8sTWlycm9yZWRSZXBlYXRXcmFwcGluZzokUH0sYmhlPXtOZWFyZXN0RmlsdGVyOkxpLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOm9VLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6YVUsTGluZWFyRmlsdGVyOmlpLExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6TGh0LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpveH0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9e307cy5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIscy5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LHMpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt0eC5hZGQodCxsKSxyJiZyKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7aSYmaShsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05VLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBXVix6aHQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1Y9PT12b2lkIDAmJihXVj1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLFdWfSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe1dWPWV9fSxEVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7bGV0IGw9cy5zbGljZSgwKTt6aHQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe3IodSl9KX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX19LE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodm9pZCAwLG4pO2xldCBpPW5ldyBuZSgpLnNldCh0KSxvPW5ldyBuZSgpLnNldChyKSxhPW5ldyBqKGkucixpLmcsaS5iKSxzPW5ldyBqKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fTtPVS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgelU9Y2xhc3MgZXh0ZW5kcyByeHtjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIodm9pZCAwLHIpO2xldCBuPW5ldyBuZSgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQobi5yLG4uZyxuLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O3pVLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB3aGU9bmV3IE1lLFNoZT1uZXcgTWUseTE9bmV3IE1lLGxodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBVaSx0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKSx0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNhbWVyYVI9bmV3IFVpLHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLl9jYWNoZTtpZihyLmZvY3VzIT09dC5mb2N1c3x8ci5mb3YhPT10LmZvdnx8ci5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ci5uZWFyIT09dC5uZWFyfHxyLmZhciE9PXQuZmFyfHxyLnpvb20hPT10Lnpvb218fHIuZXllU2VwIT09dGhpcy5leWVTZXApe3IuZm9jdXM9dC5mb2N1cyxyLmZvdj10LmZvdixyLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxyLm5lYXI9dC5uZWFyLHIuZmFyPXQuZmFyLHIuem9vbT10Lnpvb20sci5leWVTZXA9dGhpcy5leWVTZXAseTEuY29weSh0LnByb2plY3Rpb25NYXRyaXgpO2xldCBpPXIuZXllU2VwLzIsbz1pKnIubmVhci9yLmZvY3VzLGE9ci5uZWFyKk1hdGgudGFuKFAxKnIuZm92Ki41KS9yLnpvb20scyxsO1NoZS5lbGVtZW50c1sxMl09LWksd2hlLmVsZW1lbnRzWzEyXT1pLHM9LWEqci5hc3BlY3QrbyxsPWEqci5hc3BlY3Qrbyx5MS5lbGVtZW50c1swXT0yKnIubmVhci8obC1zKSx5MS5lbGVtZW50c1s4XT0obCtzKS8obC1zKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KHkxKSxzPS1hKnIuYXNwZWN0LW8sbD1hKnIuYXNwZWN0LW8seTEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseTEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weSh5MSl9dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoU2hlKSx0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseSh3aGUpfX0sbU09Y2xhc3N7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1NaGUoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7bGV0IHI9TWhlKCk7dD0oci10aGlzLm9sZFRpbWUpLzFlMyx0aGlzLm9sZFRpbWU9cix0aGlzLmVsYXBzZWRUaW1lKz10fXJldHVybiB0fX07ZnVuY3Rpb24gTWhlKCl7cmV0dXJuKHR5cGVvZiBwZXJmb3JtYW5jZT09InVuZGVmaW5lZCI/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCl9dmFyIHYxPW5ldyBqLEVoZT1uZXcgeWksYzByPW5ldyBqLHgxPW5ldyBqLGNodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiLHRoaXMuY29udGV4dD16aHQuZ2V0Q29udGV4dCgpLHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCx0aGlzLnRpbWVEZWx0YT0wLHRoaXMuX2Nsb2NrPW5ldyBtTX1nZXRJbnB1dCgpe3JldHVybiB0aGlzLmdhaW59cmVtb3ZlRmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbCYmKHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj1udWxsKSx0aGlzfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlcn1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbD8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj10LHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpc31nZXRNYXN0ZXJWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0TWFzdGVyVm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpO2xldCByPXRoaXMuY29udGV4dC5saXN0ZW5lcixuPXRoaXMudXA7aWYodGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh2MSxFaGUsYzByKSx4MS5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oRWhlKSxyLnBvc2l0aW9uWCl7bGV0IGk9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHYxLngsaSksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodjEueSxpKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2MS56LGkpLHIuZm9yd2FyZFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueCxpKSxyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS56LGkpLHIudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueCxpKSxyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksaSksci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi56LGkpfWVsc2Ugci5zZXRQb3NpdGlvbih2MS54LHYxLnksdjEueiksci5zZXRPcmllbnRhdGlvbih4MS54LHgxLnkseDEueixuLngsbi55LG4ueil9fSxENj1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IHI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiByLmJ1ZmZlcj10aGlzLmJ1ZmZlcixyLmxvb3A9dGhpcy5sb29wLHIubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LHIubG9vcEVuZD10aGlzLmxvb3BFbmQsci5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLHIuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPXIsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fSxiMT1uZXcgaixUaGU9bmV3IHlpLHUwcj1uZXcgaix3MT1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBENntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LHIsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9cix0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSEwJiZ0aGlzLmlzUGxheWluZz09PSExKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiMSxUaGUsdTByKSx3MS5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihUaGUpO2xldCByPXRoaXMucGFubmVyO2lmKHIucG9zaXRpb25YKXtsZXQgbj10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueCxuKSxyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LG4pLHIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLnosbiksci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueCxuKSxyLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS55LG4pLHIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLnosbil9ZWxzZSByLnNldFBvc2l0aW9uKGIxLngsYjEueSxiMS56KSxyLnNldE9yaWVudGF0aW9uKHcxLngsdzEueSx3MS56KX19LEZVPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1yLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLHI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspdCs9cltuXTtyZXR1cm4gdC9yLmxlbmd0aH19LEJVPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uO2xldCBpLG8sYTtzd2l0Y2gocil7Y2FzZSJxdWF0ZXJuaW9uIjppPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjppPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkobio1KTticmVhaztkZWZhdWx0Omk9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio1KX10aGlzLl9taXhCdWZmZXJSZWdpb249aSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LHIpe2xldCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUsbz10KmkraSxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihhPT09MCl7Zm9yKGxldCBzPTA7cyE9PWk7KytzKW5bbytzXT1uW3NdO2E9cn1lbHNle2ErPXI7bGV0IHM9ci9hO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLG8sMCxzLGkpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUocixpLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgcj10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCpyK3Isbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxzPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSl7bGV0IGw9cip0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxsLDEtbyxyKX1hPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4saSx0aGlzLl9hZGRJbmRleCpyLDEscik7Zm9yKGxldCBsPXIsYz1yK3I7bCE9PWM7KytsKWlmKG5bbF0hPT1uW2wrcl0pe3Muc2V0VmFsdWUobixpKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcscj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShyLGkpO2ZvcihsZXQgbz1uLGE9aTtvIT09YTsrK28pcltvXT1yW2krbyVuXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxyO24rKyl0aGlzLmJ1ZmZlcltuXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLHI9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbcituXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxyLG4saSxvKXtpZihpPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtyK2FdPXRbbithXX1fc2xlcnAodCxyLG4saSl7eWkuc2xlcnBGbGF0KHQscix0LHIsdCxuLGkpfV9zbGVycEFkZGl0aXZlKHQscixuLGksbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87eWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQscix0LG4pLHlpLnNsZXJwRmxhdCh0LHIsdCxyLHQsYSxpKX1fbGVycCh0LHIsbixpLG8pe2xldCBhPTEtaTtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPXIrczt0W2xdPXRbbF0qYSt0W24rc10qaX19X2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9cithO3Rbc109dFtzXSt0W24rYV0qaX19fSxGaHQ9IlxcW1xcXVxcLjpcXC8iLGgwcj1uZXcgUmVnRXhwKCJbIitGaHQrIl0iLCJnIiksQmh0PSJbXiIrRmh0KyJdIixmMHI9IlteIitGaHQucmVwbGFjZSgiXFwuIiwiIikrIl0iLHAwcj0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZDByPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLGYwciksbTByPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZzByPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLF8wcj1uZXcgUmVnRXhwKCJeIitwMHIrZDByK20wcitnMHIrIiQiKSx5MHI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0saGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1ufHxDci5wYXJzZVRyYWNrTmFtZShyKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhyLGkpfWdldFZhbHVlKHQscil7dGhpcy5iaW5kKCk7bGV0IG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dGhpcy5fYmluZGluZ3Nbbl07aSE9PXZvaWQgMCYmaS5nZXRWYWx1ZSh0LHIpfXNldFZhbHVlKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO3IhPT1uOysrcil0W3JdLnVuYmluZCgpfX0sQ3I9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMucGF0aD1yLHRoaXMucGFyc2VkUGF0aD1ufHxDci5wYXJzZVRyYWNrTmFtZShyKSx0aGlzLm5vZGU9Q3IuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxyLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IENyLkNvbXBvc2l0ZSh0LHIsbik6bmV3IENyKHQscixuKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShoMHIsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgcj1fMHIuZXhlYyh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgbj17bm9kZU5hbWU6clsyXSxvYmplY3ROYW1lOnJbM10sb2JqZWN0SW5kZXg6cls0XSxwcm9wZXJ0eU5hbWU6cls1XSxwcm9wZXJ0eUluZGV4OnJbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKGkhPT12b2lkIDAmJmkhPT0tMSl7bGV0IG89bi5ub2RlTmFtZS5zdWJzdHJpbmcoaSsxKTt5MHIuaW5kZXhPZihvKSE9PS0xJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLGkpLG4ub2JqZWN0TmFtZT1vKX1pZihuLnByb3BlcnR5TmFtZT09PW51bGx8fG4ucHJvcGVydHlOYW1lLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufXN0YXRpYyBmaW5kTm9kZSh0LHIpe2lmKCFyfHxyPT09IiJ8fHI9PT0iLiJ8fHI9PT0tMXx8cj09PXQubmFtZXx8cj09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtsZXQgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUocik7aWYobiE9PXZvaWQgMClyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtsZXQgbj1mdW5jdGlvbihvKXtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKyl7bGV0IHM9b1thXTtpZihzLm5hbWU9PT1yfHxzLnV1aWQ9PT1yKXJldHVybiBzO2xldCBsPW4ocy5jaGlsZHJlbik7aWYobClyZXR1cm4gbH1yZXR1cm4gbnVsbH0saT1uKHQuY2hpbGRyZW4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQscil7dFtyXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXRbcisrXT1uW2ldfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0W3JdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxyKX1fc2V0VmFsdWVfZGlyZWN0KHQscil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbcl19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKW5baV09dFtyKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbcl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsciksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQscil9X3NldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMubm9kZSxyPXRoaXMucGFyc2VkUGF0aCxuPXIub2JqZWN0TmFtZSxpPXIucHJvcGVydHlOYW1lLG89ci5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PUNyLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsci5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7cmV0dXJufWlmKG4pe2xldCBjPXIub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtyZXR1cm59aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufXQ9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7cmV0dXJufXQ9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKylpZih0W3VdLm5hbWU9PT1jKXtjPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih0W25dPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufXQ9dFtuXX1pZihjIT09dm9pZCAwKXtpZih0W2NdPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3JldHVybn10PXRbY119fWxldCBhPXRbaV07aWYoYT09PXZvaWQgMCl7bGV0IGM9ci5ub2RlTmFtZTtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2MrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7cmV0dXJufWxldCBzPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdC5uZWVkc1VwZGF0ZSE9PXZvaWQgMD9zPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUhPT12b2lkIDAmJihzPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgbD10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZihvIT09dm9pZCAwKXtpZihpPT09Im1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpe2lmKCF0Lmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZih0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W29dIT09dm9pZCAwJiYobz10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSl9ZWxzZXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7cmV0dXJufX1sPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1vfWVsc2UgYS5mcm9tQXJyYXkhPT12b2lkIDAmJmEudG9BcnJheSE9PXZvaWQgMD8obD10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhsPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbbF0sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2xdW3NdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fTtDci5Db21wb3NpdGU9aGh0O0NyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtDci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtDci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxDci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO0NyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgSFU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO24hPT1pOysrbil0W2FyZ3VtZW50c1tuXS51dWlkXT1uO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgcj10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiByLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtci5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gci5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aCxzLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0scD1mLnV1aWQsZD1yW3BdO2lmKGQ9PT12b2lkIDApe2Q9bCsrLHJbcF09ZCx0LnB1c2goZik7Zm9yKGxldCBnPTAsXz1hO2chPT1fOysrZylvW2ddLnB1c2gobmV3IENyKGYsbltnXSxpW2ddKSl9ZWxzZSBpZihkPGMpe3M9dFtkXTtsZXQgZz0tLWMsXz10W2ddO3JbXy51dWlkXT1kLHRbZF09XyxyW3BdPWcsdFtnXT1mO2ZvcihsZXQgeT0wLHg9YTt5IT09eDsrK3kpe2xldCBiPW9beV0sUz1iW2ddLEM9YltkXTtiW2RdPVMsQz09PXZvaWQgMCYmKEM9bmV3IENyKGYsblt5XSxpW3ldKSksYltnXT1DfX1lbHNlIHRbZF0hPT1zJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7bGV0IGw9YXJndW1lbnRzW2FdLGM9bC51dWlkLHU9cltjXTtpZih1IT09dm9pZCAwJiZ1Pj1vKXtsZXQgaD1vKyssZj10W2hdO3JbZi51dWlkXT11LHRbdV09ZixyW2NdPWgsdFtoXT1sO2ZvcihsZXQgcD0wLGQ9aTtwIT09ZDsrK3Ape2xldCBnPW5bcF0sXz1nW2hdLHk9Z1t1XTtnW3VdPV8sZ1toXT15fX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c18sYT10Lmxlbmd0aDtmb3IobGV0IHM9MCxsPWFyZ3VtZW50cy5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hcmd1bWVudHNbc10sdT1jLnV1aWQsaD1yW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIHJbdV0saDxvKXtsZXQgZj0tLW8scD10W2ZdLGQ9LS1hLGc9dFtkXTtyW3AudXVpZF09aCx0W2hdPXAscltnLnV1aWRdPWYsdFtmXT1nLHQucG9wKCk7Zm9yKGxldCBfPTAseT1pO18hPT15OysrXyl7bGV0IHg9bltfXSxiPXhbZl0sUz14W2RdO3hbaF09Yix4W2ZdPVMseC5wb3AoKX19ZWxzZXtsZXQgZj0tLWEscD10W2ZdO2Y+MCYmKHJbcC51dWlkXT1oKSx0W2hdPXAsdC5wb3AoKTtmb3IobGV0IGQ9MCxnPWk7ZCE9PWc7KytkKXtsZXQgXz1uW2RdO19baF09X1tmXSxfLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b31zdWJzY3JpYmVfKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9blt0XSxvPXRoaXMuX2JpbmRpbmdzO2lmKGkhPT12b2lkIDApcmV0dXJuIG9baV07bGV0IGE9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO2k9by5sZW5ndGgsblt0XT1pLGEucHVzaCh0KSxzLnB1c2gociksby5wdXNoKGgpO2ZvcihsZXQgZj11LHA9bC5sZW5ndGg7ZiE9PXA7KytmKXtsZXQgZD1sW2ZdO2hbZl09bmV3IENyKGQsdCxyKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IHI9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49clt0XTtpZihuIT09dm9pZCAwKXtsZXQgaT10aGlzLl9wYXRocyxvPXRoaXMuX3BhcnNlZFBhdGhzLGE9dGhpcy5fYmluZGluZ3Mscz1hLmxlbmd0aC0xLGw9YVtzXSxjPXRbc107cltjXT1uLGFbbl09bCxhLnBvcCgpLG9bbl09b1tzXSxvLnBvcCgpLGlbbl09aVtzXSxpLnBvcCgpfX19O0hVLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBmaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49bnVsbCxpPXIuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9cix0aGlzLl9sb2NhbFJvb3Q9bix0aGlzLmJsZW5kTW9kZT1pO2xldCBvPXIudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVRmZSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmdGhpcy50aW1lU2NhbGUhPT0wJiZ0aGlzLl9zdGFydFRpbWU9PT1udWxsJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LHIpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPXIsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LHIsbil7aWYodC5mYWRlT3V0KHIpLHRoaXMuZmFkZUluKHIpLG4pe2xldCBpPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9by9pLHM9aS9vO3Qud2FycCgxLGEsciksdGhpcy53YXJwKHMsMSxyKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LHIsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLHIsbil9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3M9PT1udWxsJiYocz1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytuLGNbMF09dC9hLGNbMV09ci9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxyLG4saSl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO3JldHVybn1sZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobyE9PW51bGwpe2xldCBsPSh0LW8pKm47aWYobDwwfHxuPT09MClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwscj1uKmx9cio9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBhPXRoaXMuX3VwZGF0ZVRpbWUocikscz10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYocz4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBraHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTticmVhaztjYXNlICRVOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGUoaSxzKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IHI9MDtpZih0aGlzLmVuYWJsZWQpe3I9dGhpcy53ZWlnaHQ7bGV0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobiE9PW51bGwpe2xldCBpPW4uZXZhbHVhdGUodClbMF07cio9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksaT09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1yLHJ9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgcj0wO2lmKCF0aGlzLnBhdXNlZCl7cj10aGlzLnRpbWVTY2FsZTtsZXQgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtuIT09bnVsbCYmKHIqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxyPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1yKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1yLHJ9X3VwZGF0ZVRpbWUodCl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcCxpPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9bj09PUNmZTtpZih0PT09MClyZXR1cm4gbz09PS0xP2k6YSYmKG8mMSk9PT0xP3ItaTppO2lmKG49PT1FZmUpe289PT0tMSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihpPj1yKWk9cjtlbHNlIGlmKGk8MClpPTA7ZWxzZXt0aGlzLnRpbWU9aTticmVhayB0fXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZihvPT09LTEmJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCx0aGlzLnJlcGV0aXRpb25zPT09MCxhKSk6dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zPT09MCwhMCxhKSksaT49cnx8aTwwKXtsZXQgcz1NYXRoLmZsb29yKGkvcik7aS09cipzLG8rPU1hdGguYWJzKHMpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGk9dD4wP3I6MCx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZihsPT09MSl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOnN9KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihhJiYobyYxKT09PTEpcmV0dXJuIHItaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LHIsbil7bGV0IGk9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhpLmVuZGluZ1N0YXJ0PVQxLGkuZW5kaW5nRW5kPVQxKToodD9pLmVuZGluZ1N0YXJ0PXRoaXMuemVyb1Nsb3BlQXRTdGFydD9UMTpFMTppLmVuZGluZ1N0YXJ0PUpQLHI/aS5lbmRpbmdFbmQ9dGhpcy56ZXJvU2xvcGVBdEVuZD9UMTpFMTppLmVuZGluZ0VuZD1KUCl9X3NjaGVkdWxlRmFkaW5nKHQscixuKXtsZXQgaT10aGlzLl9taXhlcixvPWkudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O2E9PT1udWxsJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09cixzWzFdPW8rdCxsWzFdPW4sdGhpc319LFZVPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQscil7bGV0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Msbz1pLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscz10Ll9pbnRlcnBvbGFudHMsbD1uLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1jW2xdO3U9PT12b2lkIDAmJih1PXt9LGNbbF09dSk7Zm9yKGxldCBoPTA7aCE9PW87KytoKXtsZXQgZj1pW2hdLHA9Zi5uYW1lLGQ9dVtwXTtpZihkIT09dm9pZCAwKSsrZC5yZWZlcmVuY2VDb3VudCxhW2hdPWQ7ZWxzZXtpZihkPWFbaF0sZCE9PXZvaWQgMCl7ZC5fY2FjaGVJbmRleD09PW51bGwmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQsbCxwKSk7Y29udGludWV9bGV0IGc9ciYmci5fcHJvcGVydHlCaW5kaW5nc1toXS5iaW5kaW5nLnBhcnNlZFBhdGg7ZD1uZXcgQlUoQ3IuY3JlYXRlKG4scCxnKSxmLlZhbHVlVHlwZU5hbWUsZi5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCksYVtoXT1kfXNbaF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZih0Ll9jYWNoZUluZGV4PT09bnVsbCl7bGV0IG49KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxpPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbaV07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LGksbil9bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTtvLnVzZUNvdW50Kys9PT0wJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTstLW8udXNlQ291bnQ9PT0wJiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCByPXQuX2NhY2hlSW5kZXg7cmV0dXJuIHIhPT1udWxsJiZyPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsbil7bGV0IGk9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3JdO2lmKGE9PT12b2lkIDApYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW3JdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49cltyLmxlbmd0aC0xXSxpPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1pLHJbaV09bixyLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtsZXQgaD1zLmFjdGlvbkJ5Um9vdCxmPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQ7ZGVsZXRlIGhbZl0sbC5sZW5ndGg9PT0wJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnJlZmVyZW5jZUNvdW50PT09MCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2FkZEluYWN0aXZlQmluZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3MsYT1pW3JdO2E9PT12b2lkIDAmJihhPXt9LGlbcl09YSksYVtuXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQsbz1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1hW2ldLGw9cltyLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLHJbY109bCxyLnBvcCgpLGRlbGV0ZSBzW29dLE9iamVjdC5rZXlzKHMpLmxlbmd0aD09PTAmJmRlbGV0ZSBhW2ldfV9sZW5kQmluZGluZyh0KXtsZXQgcj10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMscj10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLG49dFtyXTtyZXR1cm4gbj09PXZvaWQgMCYmKG49bmV3IFM2KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PXIsdFtyXT1uKSxufV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgcj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89cltpXTt0Ll9fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9fY2FjaGVJbmRleD1uLHJbbl09b31jbGlwQWN0aW9uKHQscixuKXtsZXQgaT1yfHx0aGlzLl9yb290LG89aS51dWlkLGE9dHlwZW9mIHQ9PSJzdHJpbmciP1ExLmZpbmRCeU5hbWUoaSx0KTp0LHM9YSE9PW51bGw/YS51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW3NdLGM9bnVsbDtpZihuPT09dm9pZCAwJiYoYSE9PW51bGw/bj1hLmJsZW5kTW9kZTpuPSRVKSxsIT09dm9pZCAwKXtsZXQgaD1sLmFjdGlvbkJ5Um9vdFtvXTtpZihoIT09dm9pZCAwJiZoLmJsZW5kTW9kZT09PW4pcmV0dXJuIGg7Yz1sLmtub3duQWN0aW9uc1swXSxhPT09bnVsbCYmKGE9Yy5fY2xpcCl9aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGZodCh0aGlzLGEscixuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUscyxvKSx1fWV4aXN0aW5nQWN0aW9uKHQscil7bGV0IG49cnx8dGhpcy5fcm9vdCxpPW4udXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9RMS5maW5kQnlOYW1lKG4sdCk6dCxhPW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO3JldHVybiBzIT09dm9pZCAwJiZzLmFjdGlvbkJ5Um9vdFtpXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxyPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgbj1yLTE7bj49MDstLW4pdFtuXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCxvPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09bjsrK2MpcltjXS5fdXBkYXRlKGksdCxvLGEpO2xldCBzPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylzW2NdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9hY3Rpb25zLmxlbmd0aDtyKyspdGhpcy5fYWN0aW9uc1tyXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPWlbbl07aWYobyE9PXZvaWQgMCl7bGV0IGE9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWFbc107dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9cltyLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxyW3VdPWgsci5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSBpW25dfX11bmNhY2hlUm9vdCh0KXtsZXQgcj10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgYSBpbiBuKXtsZXQgcz1uW2FdLmFjdGlvbkJ5Um9vdCxsPXNbcl07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPWlbcl07aWYobyE9PXZvaWQgMClmb3IobGV0IGEgaW4gbyl7bGV0IHM9b1thXTtzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHMpfX11bmNhY2hlQWN0aW9uKHQscil7bGV0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LHIpO24hPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fTtWVS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZ009Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGdNKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0sVVU9Y2xhc3MgZXh0ZW5kcyBlbXtjb25zdHJ1Y3Rvcih0LHIsbj0xKXtzdXBlcih0LHIpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCByPXN1cGVyLmNsb25lKHQpO3JldHVybiByLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLHIubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUscn19O1VVLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBxVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPXIsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9aSx0aGlzLmNvdW50PW8sdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LHIpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPXIsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07cVUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIHBodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgSmYodCxyKSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFgzLHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fX1zZXQodCxyKXt0aGlzLnJheS5zZXQodCxyKX1zZXRGcm9tQ2FtZXJhKHQscil7ciYmci5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KHIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPXIpOnImJnIuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoci5uZWFyK3IuZmFyKS8oci5uZWFyLXIuZmFyKSkudW5wcm9qZWN0KHIpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oci5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9cik6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIityLnR5cGUpfWludGVyc2VjdE9iamVjdCh0LHI9ITAsbj1bXSl7cmV0dXJuIGRodCh0LHRoaXMsbixyKSxuLnNvcnQoQ2hlKSxufWludGVyc2VjdE9iamVjdHModCxyPSEwLG49W10pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKylkaHQodFtpXSx0aGlzLG4scik7cmV0dXJuIG4uc29ydChDaGUpLG59fTtmdW5jdGlvbiBDaGUoZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfWZ1bmN0aW9uIGRodChlLHQscixuKXtpZihlLmxheWVycy50ZXN0KHQubGF5ZXJzKSYmZS5yYXljYXN0KHQsciksbj09PSEwKXtsZXQgaT1lLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylkaHQoaVtvXSx0LHIsITApfX12YXIgX009Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPXIsdGhpcy50aGV0YT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMucGhpPXQucGhpLHRoaXMudGhldGE9dC50aGV0YSx0aGlzfW1ha2VTYWZlKCl7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KDFlLTYsTWF0aC5taW4oTWF0aC5QSS0xZS02LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtyKnIrbipuKSx0aGlzLnJhZGl1cz09PTA/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFpvKHIvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LG1odD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTEscj0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPXIsdGhpcy55PW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxyLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PXIsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxBaGU9bmV3IEx0LCQwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEx0KDEvMCwxLzApLHI9bmV3IEx0KC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1BaGUuY29weShyKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBBaGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19OyQwLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIFBoZT1uZXcgaixZVj1uZXcgaixHVT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfXNldCh0LHIpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodCksdGhpcy5lbmQuY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0LnN0YXJ0KSx0aGlzLmVuZC5jb3B5KHQuZW5kKSx0aGlzfWdldENlbnRlcih0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX1kZWx0YSh0KXtyZXR1cm4gdC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfWRpc3RhbmNlU3EoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCl9ZGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX1hdCh0LHIpe3JldHVybiB0aGlzLmRlbHRhKHIpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscil7UGhlLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxZVi5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBuPVlWLmRvdChZViksbz1ZVi5kb3QoUGhlKS9uO3JldHVybiByJiYobz1abyhvLDAsMSkpLG99Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIsbil7bGV0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscik7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxJaGU9bmV3IGosZ2h0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1yO2xldCBuPW5ldyBQZSxpPVswLDAsMCwwLDAsMSwwLDAsMCwxLDAsMSwwLDAsMCwtMSwwLDEsMCwwLDAsMCwxLDEsMCwwLDAsMCwtMSwxXTtmb3IobGV0IGE9MCxzPTEsbD0zMjthPGw7YSsrLHMrKyl7bGV0IGM9YS9sKk1hdGguUEkqMix1PXMvbCpNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKGMpLE1hdGguc2luKGMpLDEsTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMuY29uZT1uZXcgQWEobixvKSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IHQ9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFlMyxyPXQqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChyLHIsdCksSWhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksdGhpcy5jb25lLmxvb2tBdChJaGUpLHRoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19LE8wPW5ldyBqLGpWPW5ldyBNZSxidXQ9bmV3IE1lLFdVPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9ZXBlKHQpLG49bmV3IFBlLGk9W10sbz1bXSxhPW5ldyBuZSgwLDAsMSkscz1uZXcgbmUoMCwxLDApO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgdT1yW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksby5wdXNoKGEucixhLmcsYS5iKSxvLnB1c2gocy5yLHMuZyxzLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShvLDMpKTtsZXQgbD1uZXcgR2koe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIobixsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1yLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7YnV0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxhPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107cy5wYXJlbnQmJnMucGFyZW50LmlzQm9uZSYmKGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSxPMC54LE8wLnksTzAueiksalYubXVsdGlwbHlNYXRyaWNlcyhidXQscy5wYXJlbnQubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSsxLE8wLngsTzAueSxPMC56KSxhKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIGVwZShlKXtsZXQgdD1bXTtlJiZlLmlzQm9uZSYmdC5wdXNoKGUpO2ZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaC5hcHBseSh0LGVwZShlLmNoaWxkcmVuW3JdKSk7cmV0dXJuIHR9dmFyIF9odD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1uZXcgajAociw0LDIpLG89bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihpLG8pLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5jb2xvciE9PXZvaWQgMD90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSx2MHI9bmV3IGosTGhlPW5ldyBuZSxraGU9bmV3IG5lLHlodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2xldCBpPW5ldyBXMChyKTtpLnJvdGF0ZVkoTWF0aC5QSSouNSksdGhpcy5tYXRlcmlhbD1uZXcgc2goe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHRoaXMuY29sb3I9PT12b2lkIDAmJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksYT1uZXcgRmxvYXQzMkFycmF5KG8uY291bnQqMyk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoYSwzKSksdGhpcy5hZGQobmV3IHRpKGksdGhpcy5tYXRlcmlhbCkpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodGhpcy5jb2xvciE9PXZvaWQgMCl0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2xldCByPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0xoZS5jb3B5KHRoaXMubGlnaHQuY29sb3IpLGtoZS5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgbj0wLGk9ci5jb3VudDtuPGk7bisrKXtsZXQgbz1uPGkvMj9MaGU6a2hlO3Iuc2V0WFlaKG4sby5yLG8uZyxvLmIpfXIubmVlZHNVcGRhdGU9ITB9dC5sb29rQXQodjByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSl9fSxZVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBuZShuKSxpPW5ldyBuZShpKTtsZXQgbz1yLzIsYT10L3Iscz10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLHA9MCxkPS1zO2Y8PXI7ZisrLGQrPWEpe2wucHVzaCgtcywwLGQscywwLGQpLGwucHVzaChkLDAsLXMsZCwwLHMpO2xldCBnPWY9PT1vP246aTtnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zfWxldCB1PW5ldyBQZTt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShjLDMpKTtsZXQgaD1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX0sdmh0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xMCxyPTE2LG49OCxpPTY0LG89NDQ3MzkyNCxhPTg5NDc4NDgpe289bmV3IG5lKG8pLGE9bmV3IG5lKGEpO2xldCBzPVtdLGw9W107Zm9yKGxldCBoPTA7aDw9cjtoKyspe2xldCBmPWgvciooTWF0aC5QSSoyKSxwPU1hdGguc2luKGYpKnQsZD1NYXRoLmNvcyhmKSp0O3MucHVzaCgwLDAsMCkscy5wdXNoKHAsMCxkKTtsZXQgZz1oJjE/bzphO2wucHVzaChnLnIsZy5nLGcuYiksbC5wdXNoKGcucixnLmcsZy5iKX1mb3IobGV0IGg9MDtoPD1uO2grKyl7bGV0IGY9aCYxP286YSxwPXQtdC9uKmg7Zm9yKGxldCBkPTA7ZDxpO2QrKyl7bGV0IGc9ZC9pKihNYXRoLlBJKjIpLF89TWF0aC5zaW4oZykqcCx5PU1hdGguY29zKGcpKnA7cy5wdXNoKF8sMCx5KSxsLnB1c2goZi5yLGYuZyxmLmIpLGc9KGQrMSkvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwLHMucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKX19bGV0IGM9bmV3IFBlO2Muc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKGwsMykpO2xldCB1PW5ldyBHaSh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihjLHUpLHRoaXMudHlwZT0iUG9sYXJHcmlkSGVscGVyIn19LFJoZT1uZXcgaixYVj1uZXcgaixOaGU9bmV3IGoseGh0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4scj09PXZvaWQgMCYmKHI9MSk7bGV0IGk9bmV3IFBlO2kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFstcixyLDAscixyLDAsciwtciwwLC1yLC1yLDAsLXIsciwwXSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFBlLGkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7UmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSxYVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLE5oZS5zdWJWZWN0b3JzKFhWLFJoZSksdGhpcy5saWdodFBsYW5lLmxvb2tBdChYViksdGhpcy5jb2xvciE9PXZvaWQgMD8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQoWFYpLHRoaXMudGFyZ2V0TGluZS5zY2FsZS56PU5oZS5sZW5ndGgoKX19LCRWPW5ldyBqLF9pPW5ldyBSMSxiaHQ9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1uZXcgUGUsbj1uZXcgR2koe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxvPVtdLGE9e30scz1uZXcgbmUoMTY3NTUyMDApLGw9bmV3IG5lKDE2NzExNjgwKSxjPW5ldyBuZSg0Mzc3NSksdT1uZXcgbmUoMTY3NzcyMTUpLGg9bmV3IG5lKDMzNTU0NDMpO2YoIm4xIiwibjIiLHMpLGYoIm4yIiwibjQiLHMpLGYoIm40IiwibjMiLHMpLGYoIm4zIiwibjEiLHMpLGYoImYxIiwiZjIiLHMpLGYoImYyIiwiZjQiLHMpLGYoImY0IiwiZjMiLHMpLGYoImYzIiwiZjEiLHMpLGYoIm4xIiwiZjEiLHMpLGYoIm4yIiwiZjIiLHMpLGYoIm4zIiwiZjMiLHMpLGYoIm40IiwiZjQiLHMpLGYoInAiLCJuMSIsbCksZigicCIsIm4yIixsKSxmKCJwIiwibjMiLGwpLGYoInAiLCJuNCIsbCksZigidTEiLCJ1MiIsYyksZigidTIiLCJ1MyIsYyksZigidTMiLCJ1MSIsYyksZigiYyIsInQiLHUpLGYoInAiLCJjIixoKSxmKCJjbjEiLCJjbjIiLGgpLGYoImNuMyIsImNuNCIsaCksZigiY2YxIiwiY2YyIixoKSxmKCJjZjMiLCJjZjQiLGgpO2Z1bmN0aW9uIGYoZCxnLF8pe3AoZCxfKSxwKGcsXyl9ZnVuY3Rpb24gcChkLGcpe2kucHVzaCgwLDAsMCksby5wdXNoKGcucixnLmcsZy5iKSxhW2RdPT09dm9pZCAwJiYoYVtkXT1bXSksYVtkXS5wdXNoKGkubGVuZ3RoLzMtMSl9ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksci5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSksc3VwZXIocixuKSx0aGlzLnR5cGU9IkNhbWVyYUhlbHBlciIsdGhpcy5jYW1lcmE9dCx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5wb2ludE1hcD1hLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeSxyPXRoaXMucG9pbnRNYXAsbj0xLGk9MTtfaS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSxQaSgiYyIscix0LF9pLDAsMCwtMSksUGkoInQiLHIsdCxfaSwwLDAsMSksUGkoIm4xIixyLHQsX2ksLW4sLWksLTEpLFBpKCJuMiIscix0LF9pLG4sLWksLTEpLFBpKCJuMyIscix0LF9pLC1uLGksLTEpLFBpKCJuNCIscix0LF9pLG4saSwtMSksUGkoImYxIixyLHQsX2ksLW4sLWksMSksUGkoImYyIixyLHQsX2ksbiwtaSwxKSxQaSgiZjMiLHIsdCxfaSwtbixpLDEpLFBpKCJmNCIscix0LF9pLG4saSwxKSxQaSgidTEiLHIsdCxfaSxuKi43LGkqMS4xLC0xKSxQaSgidTIiLHIsdCxfaSwtbiouNyxpKjEuMSwtMSksUGkoInUzIixyLHQsX2ksMCxpKjIsLTEpLFBpKCJjZjEiLHIsdCxfaSwtbiwwLDEpLFBpKCJjZjIiLHIsdCxfaSxuLDAsMSksUGkoImNmMyIscix0LF9pLDAsLWksMSksUGkoImNmNCIscix0LF9pLDAsaSwxKSxQaSgiY24xIixyLHQsX2ksLW4sMCwtMSksUGkoImNuMiIscix0LF9pLG4sMCwtMSksUGkoImNuMyIscix0LF9pLDAsLWksLTEpLFBpKCJjbjQiLHIsdCxfaSwwLGksLTEpLHQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19O2Z1bmN0aW9uIFBpKGUsdCxyLG4saSxvLGEpeyRWLnNldChpLG8sYSkudW5wcm9qZWN0KG4pO2xldCBzPXRbZV07aWYocyE9PXZvaWQgMCl7bGV0IGw9ci5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKWwuc2V0WFlaKHNbY10sJFYueCwkVi55LCRWLnopfX12YXIgS1Y9bmV3IHRhLHlNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgRmxvYXQzMkFycmF5KDgqMyksbz1uZXcgUGU7by5zZXRJbmRleChuZXcgSmUobiwxKSksby5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoaSwzKSksc3VwZXIobyxuZXcgR2koe2NvbG9yOnIsdG9uZU1hcHBlZDohMX0pKSx0aGlzLm9iamVjdD10LHRoaXMudHlwZT0iQm94SGVscGVyIix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX11cGRhdGUodCl7aWYodCE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKSx0aGlzLm9iamVjdCE9PXZvaWQgMCYmS1Yuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksS1YuaXNFbXB0eSgpKXJldHVybjtsZXQgcj1LVi5taW4sbj1LVi5tYXgsaT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sbz1pLmFycmF5O29bMF09bi54LG9bMV09bi55LG9bMl09bi56LG9bM109ci54LG9bNF09bi55LG9bNV09bi56LG9bNl09ci54LG9bN109ci55LG9bOF09bi56LG9bOV09bi54LG9bMTBdPXIueSxvWzExXT1uLnosb1sxMl09bi54LG9bMTNdPW4ueSxvWzE0XT1yLnosb1sxNV09ci54LG9bMTZdPW4ueSxvWzE3XT1yLnosb1sxOF09ci54LG9bMTldPXIueSxvWzIwXT1yLnosb1syMV09bi54LG9bMjJdPXIueSxvWzIzXT1yLnosaS5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMub2JqZWN0PXQsdGhpcy51cGRhdGUoKSx0aGlzfWNvcHkodCl7cmV0dXJuIEFhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX0sd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IHI9dGhpcy5ib3g7ci5pc0VtcHR5KCl8fChyLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxyLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCkpfX0sU2h0PWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyPTEsbj0xNjc3Njk2MCl7bGV0IGk9bixvPVsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSxhPW5ldyBQZTthLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSxhLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHN1cGVyKGEsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQbGFuZUhlbHBlciIsdGhpcy5wbGFuZT10LHRoaXMuc2l6ZT1yO2xldCBzPVsxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwtMSwxLDEsLTEsMV0sbD1uZXcgUGU7bC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksbC5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzLmFkZChuZXcgdGkobCxuZXcgc2goe2NvbG9yOmksb3BhY2l0eTouMix0cmFuc3BhcmVudDohMCxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITF9KSkpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPS10aGlzLnBsYW5lLmNvbnN0YW50O01hdGguYWJzKHIpPDFlLTgmJihyPTFlLTgpLHRoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsciksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPXI8MD9JaTpJMSx0aGlzLmxvb2tBdCh0aGlzLnBsYW5lLm5vcm1hbCksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fSxEaGU9bmV3IGosWlYsd3V0LE1odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IGooMCwwLDEpLHI9bmV3IGooMCwwLDApLG49MSxpPTE2Nzc2OTYwLG89biouMixhPW8qLjIpe3N1cGVyKCksdGhpcy50eXBlPSJBcnJvd0hlbHBlciIsWlY9PT12b2lkIDAmJihaVj1uZXcgUGUsWlYuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDEsMF0sMykpLHd1dD1uZXcgb20oMCwuNSwxLDUsMSksd3V0LnRyYW5zbGF0ZSgwLC0uNSwwKSksdGhpcy5wb3NpdGlvbi5jb3B5KHIpLHRoaXMubGluZT1uZXcgY2goWlYsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5saW5lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5saW5lKSx0aGlzLmNvbmU9bmV3IHRpKHd1dCxuZXcgc2goe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4sbyxhKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle0RoZS5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7bGV0IHI9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoRGhlLHIpfX1zZXRMZW5ndGgodCxyPXQqLjIsbj1yKi4yKXt0aGlzLmxpbmUuc2NhbGUuc2V0KDEsTWF0aC5tYXgoMWUtNCx0LXIpLDEpLHRoaXMubGluZS51cGRhdGVNYXRyaXgoKSx0aGlzLmNvbmUuc2NhbGUuc2V0KG4scixuKSx0aGlzLmNvbmUucG9zaXRpb24ueT10LHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKX1zZXRDb2xvcih0KXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpLHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0LCExKSx0aGlzLmxpbmUuY29weSh0LmxpbmUpLHRoaXMuY29uZS5jb3B5KHQuY29uZSksdGhpc319LHZNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xKXtsZXQgcj1bMCwwLDAsdCwwLDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwwLHRdLG49WzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSxpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShuLDMpKTtsZXQgbz1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LHIsbil7bGV0IGk9bmV3IG5lLG89dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkobywwKSxpLnRvQXJyYXkobywzKSxpLnNldChyKSxpLnRvQXJyYXkobyw2KSxpLnRvQXJyYXkobyw5KSxpLnNldChuKSxpLnRvQXJyYXkobywxMiksaS50b0FycmF5KG8sMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19LEVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBuZSx0aGlzLnN1YlBhdGhzPVtdLHRoaXMuY3VycmVudFBhdGg9bnVsbH1tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aD1uZXcgcTEsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsciksdGhpc31saW5lVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxyKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxyLG4saSxvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9dG9TaGFwZXModCxyKXtmdW5jdGlvbiBuKHgpe2xldCBiPVtdO2ZvcihsZXQgUz0wLEM9eC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9eFtTXSxrPW5ldyBLYztrLmN1cnZlcz1QLmN1cnZlcyxiLnB1c2goayl9cmV0dXJuIGJ9ZnVuY3Rpb24gaSh4LGIpe2xldCBTPWIubGVuZ3RoLEM9ITE7Zm9yKGxldCBQPVMtMSxrPTA7azxTO1A9aysrKXtsZXQgTz1iW1BdLEQ9YltrXSxCPUQueC1PLngsST1ELnktTy55O2lmKE1hdGguYWJzKEkpPk51bWJlci5FUFNJTE9OKXtpZihJPDAmJihPPWJba10sQj0tQixEPWJbUF0sST0tSSkseC55PE8ueXx8eC55PkQueSljb250aW51ZTtpZih4Lnk9PT1PLnkpe2lmKHgueD09PU8ueClyZXR1cm4hMH1lbHNle2xldCBMPUkqKHgueC1PLngpLUIqKHgueS1PLnkpO2lmKEw9PT0wKXJldHVybiEwO2lmKEw8MCljb250aW51ZTtDPSFDfX1lbHNle2lmKHgueSE9PU8ueSljb250aW51ZTtpZihELng8PXgueCYmeC54PD1PLnh8fE8ueDw9eC54JiZ4Lng8PUQueClyZXR1cm4hMH19cmV0dXJuIEN9bGV0IG89WmMuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtpZihyPT09ITApcmV0dXJuIG4oYSk7bGV0IHMsbCxjLHU9W107aWYoYS5sZW5ndGg9PT0xKXJldHVybiBsPWFbMF0sYz1uZXcgS2MsYy5jdXJ2ZXM9bC5jdXJ2ZXMsdS5wdXNoKGMpLHU7bGV0IGg9IW8oYVswXS5nZXRQb2ludHMoKSk7aD10PyFoOmg7bGV0IGY9W10scD1bXSxkPVtdLGc9MCxfO3BbZ109dm9pZCAwLGRbZ109W107Zm9yKGxldCB4PTAsYj1hLmxlbmd0aDt4PGI7eCsrKWw9YVt4XSxfPWwuZ2V0UG9pbnRzKCkscz1vKF8pLHM9dD8hczpzLHM/KCFoJiZwW2ddJiZnKysscFtnXT17czpuZXcgS2MscDpffSxwW2ddLnMuY3VydmVzPWwuY3VydmVzLGgmJmcrKyxkW2ddPVtdKTpkW2ddLnB1c2goe2g6bCxwOl9bMF19KTtpZighcFswXSlyZXR1cm4gbihhKTtpZihwLmxlbmd0aD4xKXtsZXQgeD0hMSxiPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKylmW1NdPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9ZFtTXTtmb3IobGV0IGs9MDtrPFAubGVuZ3RoO2srKyl7bGV0IE89UFtrXSxEPSEwO2ZvcihsZXQgQj0wO0I8cC5sZW5ndGg7QisrKWkoTy5wLHBbQl0ucCkmJihTIT09QiYmYi5wdXNoKHtmcm9tczpTLHRvczpCLGhvbGU6a30pLEQ/KEQ9ITEsZltCXS5wdXNoKE8pKTp4PSEwKTtEJiZmW1NdLnB1c2goTyl9fWIubGVuZ3RoPjAmJih4fHwoZD1mKSl9bGV0IHk7Zm9yKGxldCB4PTAsYj1wLmxlbmd0aDt4PGI7eCsrKXtjPXBbeF0ucyx1LnB1c2goYykseT1kW3hdO2ZvcihsZXQgUz0wLEM9eS5sZW5ndGg7UzxDO1MrKyljLmhvbGVzLnB1c2goeVtTXS5oKX1yZXR1cm4gdX19LHJwZT1uZXcgRmxvYXQzMkFycmF5KDEpLHgwcj1uZXcgSW50MzJBcnJheShycGUuYnVmZmVyKSxUaHQ9Y2xhc3N7c3RhdGljIHRvSGFsZkZsb2F0KHQpe3Q+NjU1MDQmJihjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LiIpLHQ9NjU1MDQpLHJwZVswXT10O2xldCByPXgwclswXSxuPXI+PjE2JjMyNzY4LGk9cj4+MTImMjA0NyxvPXI+PjIzJjI1NTtyZXR1cm4gbzwxMDM/bjpvPjE0Mj8obnw9MzE3NDQsbnw9KG89PTI1NT8wOjEpJiZyJjgzODg2MDcsbik6bzwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1vKSsoaT4+MTEzLW8mMSksbik6KG58PW8tMTEyPDwxMHxpPj4xLG4rPWkmMSxuKX19LGIwcj0wLHcwcj0xLFMwcj0wLE0wcj0xLEUwcj0yO2Z1bmN0aW9uIFQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGV9ZnVuY3Rpb24gQzByKGU9W10pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksZS5pc011bHRpTWF0ZXJpYWw9ITAsZS5tYXRlcmlhbHM9ZSxlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xpY2UoKX0sZX1mdW5jdGlvbiBBMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIFAwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKSxuZXcgb00oZSl9ZnVuY3Rpb24gSTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIiksbmV3IGltKGUsdCl9ZnVuY3Rpb24gTDByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBrMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIFIwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIE4wcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IGooZSx0LHIpfWZ1bmN0aW9uIEQwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IEplKGUsdCkuc2V0VXNhZ2UoWTMpfWZ1bmN0aW9uIE8wcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgY1UoZSx0KX1mdW5jdGlvbiB6MHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBGMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OENsYW1wZWRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBoVShlLHQpfWZ1bmN0aW9uIEIwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIEgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3ICQzKGUsdCl9ZnVuY3Rpb24gVjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHBVKGUsdCl9ZnVuY3Rpb24gVTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgSzMoZSx0KX1mdW5jdGlvbiBxMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHhlKGUsdCl9ZnVuY3Rpb24gRzByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBtVShlLHQpfWZzLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZnMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldFBvaW50PXQsZX07cTEucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKGUpfTtmdW5jdGlvbiBXMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIiksbmV3IHZNKGUpfWZ1bmN0aW9uIFkwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IHlNKGUsdCl9ZnVuY3Rpb24gajByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRWRnZXNIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkVkZ2VzR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHM2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfVlVLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O1dVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07ZnVuY3Rpb24gWDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBBYShuZXcgZDYoZS5nZW9tZXRyeSksbmV3IEdpKHtjb2xvcjp0IT09dm9pZCAwP3Q6MTY3NzcyMTV9KSl9ZWEucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxkTS5leHRyYWN0VXJsQmFzZShlKX07ZWEuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uICQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLiIpLG5ldyBKYyhlKX1mdW5jdGlvbiBLMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpLG5ldyBDVShlKX0kMC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07JDAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTskMC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07JDAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKGUpfTt0YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07dGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTt0YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O3RhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07WmYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O04xLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KGUpfTtHVS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O2tpLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O2tpLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtraS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07TWUucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24oZSl9O01lLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O01lLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgaigpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07TWUucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oZSl9O01lLnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksZS50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O01lLnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUoZSx0LG4scixpLG8pfTtNZS5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KGUpLmludmVydCgpfTskYy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKGUpfTt5aS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLGUuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTt5aS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUoZSl9O0pmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O29pLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtvaS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChlLHQpfTtvaS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChlKX07b2kucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwoZSl9O29pLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKGUpfTtvaS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLG9pLmdldEJhcnljb29yZChlLHQscixuLGkpfTtvaS5ub3JtYWw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxvaS5nZXROb3JtYWwoZSx0LHIsbil9O0tjLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKGUpfTtLYy5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaGgodGhpcyxlKX07S2MucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgWTAodGhpcyxlKX07THQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQscil9O0x0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07THQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpfTtqLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKGUpfTtqLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl9O2oucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtqLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtqLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07ai5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2VuLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtlbi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O29yLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUoZSl9O29yLnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtvci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsZSl9O29yLnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3IucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPWV9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTt0aS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksQWZlfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7YU0ucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtVaS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihlLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2wucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9ZX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1lfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1lfX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9ZX19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWV9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9ZX19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWV9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPWV9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9ZX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9ZX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmUucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09WTN9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShZMyl9fX0pO0plLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKGU9PT0hMD9ZMzpXMyksdGhpc307SmUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSmUucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07UGUucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChlKX07UGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShlLG5ldyBKZShhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOmU9PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTtQZS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24oZSx0LHIpe3IhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChlLHQpfTtQZS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtQZS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtQZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUoZSl9O1BlLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7ZW0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O2VtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07aGgucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2hoLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3EwLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Z00ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWkucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBuZX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9ZT09PUFodH19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9ZX19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsaC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWV9fX0pO3JuLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihlLHQscixuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQoZSksdGhpcy5jbGVhcih0LHIsbil9O3JuLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3AoZSl9O3JuLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9O3JuLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfTtybi5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259O3JuLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX07cm4ucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QoZSl9O3JuLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocm4ucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPWV9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPWV9fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz1lPT09ITA/V246UWR9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYZmUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO2Z1bmN0aW9uIFowcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLiIpLG5ldyBRMyhlLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPWV9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9ZX19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZX19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZX19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PWV9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PWV9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PWV9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PWV9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1lfX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lfX19KTtENi5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRFUoKS5sb2FkKGUsZnVuY3Rpb24obil7dC5zZXRCdWZmZXIobil9KSx0aGlzfTtGVS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O0ozLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKGUsdCl9O0ozLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKGUsdCxyLG4pfTtLZi5jcm9zc09yaWdpbj12b2lkIDA7S2YubG9hZFRleHR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgQVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCBpPW5ldyBUVTtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPWkubG9hZChlLHIsdm9pZCAwLG4pO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07S2YubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O2Z1bmN0aW9uIEowcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX1mdW5jdGlvbiBRMHIoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuIil9dmFyIHRfcj17Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGF0dGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9fTtmdW5jdGlvbiBlX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfWZ1bmN0aW9uIHJfcigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcyIpLG5ldyBQZX1mdW5jdGlvbiBuX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gaV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyIpfWZ1bmN0aW9uIG9fcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBhX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4iKX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246alV9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPWpVKTt2YXIgbnBlPXt0eXBlOiJjaGFuZ2UifSxIaHQ9e3R5cGU6InN0YXJ0In0saXBlPXt0eXBlOiJlbmQifSxKVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSxyPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLHI9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9cix0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgaix0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6IkFycm93TGVmdCIsVVA6IkFycm93VXAiLFJJR0hUOiJBcnJvd1JpZ2h0IixCT1RUT006IkFycm93RG93biJ9LHRoaXMubW91c2VCdXR0b25zPXtMRUZUOkswLlJPVEFURSxNSURETEU6SzAuRE9MTFksUklHSFQ6SzAuUEFOfSx0aGlzLnRvdWNoZXM9e09ORTpaMC5ST1RBVEUsVFdPOlowLkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnRoZXRhfSx0aGlzLmdldERpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0LnBvc2l0aW9uLmRpc3RhbmNlVG8odGhpcy50YXJnZXQpfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKG50KXtudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmciksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KG5wZSksbi51cGRhdGUoKSxvPWkuTk9ORX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGosQ3Q9bmV3IHlpKCkuc2V0RnJvbVVuaXRWZWN0b3JzKHQudXAsbmV3IGooMCwxLDApKSxXdD1DdC5jbG9uZSgpLmludmVydCgpLGZlPW5ldyBqLGF0PW5ldyB5aSxzZT0yKk1hdGguUEk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IENlPW4ub2JqZWN0LnBvc2l0aW9uO250LmNvcHkoQ2UpLnN1YihuLnRhcmdldCksbnQuYXBwbHlRdWF0ZXJuaW9uKEN0KSxzLnNldEZyb21WZWN0b3IzKG50KSxuLmF1dG9Sb3RhdGUmJm89PT1pLk5PTkUmJkQoaygpKSxuLmVuYWJsZURhbXBpbmc/KHMudGhldGErPWwudGhldGEqbi5kYW1waW5nRmFjdG9yLHMucGhpKz1sLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihzLnRoZXRhKz1sLnRoZXRhLHMucGhpKz1sLnBoaSk7bGV0IFB0PW4ubWluQXppbXV0aEFuZ2xlLE50PW4ubWF4QXppbXV0aEFuZ2xlO3JldHVybiBpc0Zpbml0ZShQdCkmJmlzRmluaXRlKE50KSYmKFB0PC1NYXRoLlBJP1B0Kz1zZTpQdD5NYXRoLlBJJiYoUHQtPXNlKSxOdDwtTWF0aC5QST9OdCs9c2U6TnQ+TWF0aC5QSSYmKE50LT1zZSksUHQ8PU50P3MudGhldGE9TWF0aC5tYXgoUHQsTWF0aC5taW4oTnQscy50aGV0YSkpOnMudGhldGE9cy50aGV0YT4oUHQrTnQpLzI/TWF0aC5tYXgoUHQscy50aGV0YSk6TWF0aC5taW4oTnQscy50aGV0YSkpLHMucGhpPU1hdGgubWF4KG4ubWluUG9sYXJBbmdsZSxNYXRoLm1pbihuLm1heFBvbGFyQW5nbGUscy5waGkpKSxzLm1ha2VTYWZlKCkscy5yYWRpdXMqPWMscy5yYWRpdXM9TWF0aC5tYXgobi5taW5EaXN0YW5jZSxNYXRoLm1pbihuLm1heERpc3RhbmNlLHMucmFkaXVzKSksbi5lbmFibGVEYW1waW5nPT09ITA/bi50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHUsbi5kYW1waW5nRmFjdG9yKTpuLnRhcmdldC5hZGQodSksbnQuc2V0RnJvbVNwaGVyaWNhbChzKSxudC5hcHBseVF1YXRlcm5pb24oV3QpLENlLmNvcHkobi50YXJnZXQpLmFkZChudCksbi5vYmplY3QubG9va0F0KG4udGFyZ2V0KSxuLmVuYWJsZURhbXBpbmc9PT0hMD8obC50aGV0YSo9MS1uLmRhbXBpbmdGYWN0b3IsbC5waGkqPTEtbi5kYW1waW5nRmFjdG9yLHUubXVsdGlwbHlTY2FsYXIoMS1uLmRhbXBpbmdGYWN0b3IpKToobC5zZXQoMCwwLDApLHUuc2V0KDAsMCwwKSksYz0xLGh8fGZlLmRpc3RhbmNlVG9TcXVhcmVkKG4ub2JqZWN0LnBvc2l0aW9uKT5hfHw4KigxLWF0LmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+YT8obi5kaXNwYXRjaEV2ZW50KG5wZSksZmUuY29weShuLm9iamVjdC5wb3NpdGlvbiksYXQuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSxoPSExLCEwKTohMX19KCksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCksbi5fZG9tRWxlbWVudEtleUV2ZW50cyE9PW51bGwmJm4uX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpfTtsZXQgbj10aGlzLGk9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sbz1pLk5PTkUsYT0xZS02LHM9bmV3IF9NLGw9bmV3IF9NLGM9MSx1PW5ldyBqLGg9ITEsZj1uZXcgTHQscD1uZXcgTHQsZD1uZXcgTHQsZz1uZXcgTHQsXz1uZXcgTHQseT1uZXcgTHQseD1uZXcgTHQsYj1uZXcgTHQsUz1uZXcgTHQsQz1bXSxQPXt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKm4uYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIE8oKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBEKG50KXtsLnRoZXRhLT1udH1mdW5jdGlvbiBCKG50KXtsLnBoaS09bnR9bGV0IEk9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50Lm11bHRpcGx5U2NhbGFyKC1XdCksdS5hZGQobnQpfX0oKSxMPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bi5zY3JlZW5TcGFjZVBhbm5pbmc9PT0hMD9udC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDEpOihudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCxudCkpLG50Lm11bHRpcGx5U2NhbGFyKFd0KSx1LmFkZChudCl9fSgpLFI9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtsZXQgYXQ9bi5kb21FbGVtZW50O2lmKG4ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe2xldCBzZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KHNlKS5zdWIobi50YXJnZXQpO2xldCBRdD1udC5sZW5ndGgoKTtRdCo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEkoMipXdCpRdC9hdC5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxMKDIqZmUqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oSShXdCoobi5vYmplY3QucmlnaHQtbi5vYmplY3QubGVmdCkvbi5vYmplY3Quem9vbS9hdC5jbGllbnRXaWR0aCxuLm9iamVjdC5tYXRyaXgpLEwoZmUqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSxuLmVuYWJsZVBhbj0hMSl9fSgpO2Z1bmN0aW9uIEYobnQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/Yy89bnQ6bi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KG4ub2JqZWN0Lnpvb209TWF0aC5tYXgobi5taW5ab29tLE1hdGgubWluKG4ubWF4Wm9vbSxuLm9iamVjdC56b29tKm50KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLGg9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiB6KG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MqPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbS9udCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gVShudCl7Zi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBXKG50KXt4LnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIFoobnQpe2cuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gcnQobnQpe3Auc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksZC5zdWJWZWN0b3JzKHAsZikubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7bGV0IEN0PW4uZG9tRWxlbWVudDtEKDIqTWF0aC5QSSpkLngvQ3QuY2xpZW50SGVpZ2h0KSxCKDIqTWF0aC5QSSpkLnkvQ3QuY2xpZW50SGVpZ2h0KSxmLmNvcHkocCksbi51cGRhdGUoKX1mdW5jdGlvbiBvdChudCl7Yi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSxTLnN1YlZlY3RvcnMoYix4KSxTLnk+MD9GKE8oKSk6Uy55PDAmJnooTygpKSx4LmNvcHkoYiksbi51cGRhdGUoKX1mdW5jdGlvbiBzdChudCl7Xy5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSx5LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIFN0KG50KXtudC5kZWx0YVk8MD96KE8oKSk6bnQuZGVsdGFZPjAmJkYoTygpKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIGJ0KG50KXtsZXQgQ3Q9ITE7c3dpdGNoKG50LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOlIoMCxuLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5CT1RUT006UigwLC1uLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5MRUZUOlIobi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpSKC1uLmtleVBhblNwZWVkLDApLEN0PSEwO2JyZWFrfUN0JiYobnQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX1mdW5jdGlvbiBNdCgpe2lmKEMubGVuZ3RoPT09MSlmLnNldChDWzBdLnBhZ2VYLENbMF0ucGFnZVkpO2Vsc2V7bGV0IG50PS41KihDWzBdLnBhZ2VYK0NbMV0ucGFnZVgpLEN0PS41KihDWzBdLnBhZ2VZK0NbMV0ucGFnZVkpO2Yuc2V0KG50LEN0KX19ZnVuY3Rpb24gbHQoKXtpZihDLmxlbmd0aD09PTEpZy5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtnLnNldChudCxDdCl9fWZ1bmN0aW9uIEt0KCl7bGV0IG50PUNbMF0ucGFnZVgtQ1sxXS5wYWdlWCxDdD1DWzBdLnBhZ2VZLUNbMV0ucGFnZVksV3Q9TWF0aC5zcXJ0KG50Km50K0N0KkN0KTt4LnNldCgwLFd0KX1mdW5jdGlvbiBfdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVBhbiYmbHQoKX1mdW5jdGlvbiBjdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVJvdGF0ZSYmTXQoKX1mdW5jdGlvbiBYKG50KXtpZihDLmxlbmd0aD09MSlwLnNldChudC5wYWdlWCxudC5wYWdlWSk7ZWxzZXtsZXQgV3Q9YmUobnQpLGZlPS41KihudC5wYWdlWCtXdC54KSxhdD0uNSoobnQucGFnZVkrV3QueSk7cC5zZXQoZmUsYXQpfWQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApfWZ1bmN0aW9uIGV0KG50KXtpZihDLmxlbmd0aD09PTEpXy5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IEN0PWJlKG50KSxXdD0uNSoobnQucGFnZVgrQ3QueCksZmU9LjUqKG50LnBhZ2VZK0N0LnkpO18uc2V0KFd0LGZlKX15LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKX1mdW5jdGlvbiBkdChudCl7bGV0IEN0PWJlKG50KSxXdD1udC5wYWdlWC1DdC54LGZlPW50LnBhZ2VZLUN0LnksYXQ9TWF0aC5zcXJ0KFd0Kld0K2ZlKmZlKTtiLnNldCgwLGF0KSxTLnNldCgwLE1hdGgucG93KGIueS94Lnksbi56b29tU3BlZWQpKSxGKFMueSkseC5jb3B5KGIpfWZ1bmN0aW9uIHEobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUGFuJiZldChudCl9ZnVuY3Rpb24gcHQobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUm90YXRlJiZYKG50KX1mdW5jdGlvbiBodChudCl7bi5lbmFibGVkIT09ITEmJihDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUobnQucG9pbnRlcklkKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCkpLCR0KG50KSxudC5wb2ludGVyVHlwZT09PSJ0b3VjaCI/dHQobnQpOmVlKG50KSl9ZnVuY3Rpb24gd3QobnQpe24uZW5hYmxlZCE9PSExJiYobnQucG9pbnRlclR5cGU9PT0idG91Y2giPyQobnQpOkxlKG50KSl9ZnVuY3Rpb24ga3QobnQpe2hlKG50KSxDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSxuLmRpc3BhdGNoRXZlbnQoaXBlKSxvPWkuTk9ORX1mdW5jdGlvbiBpZShudCl7aGUobnQpfWZ1bmN0aW9uIGVlKG50KXtsZXQgQ3Q7c3dpdGNoKG50LmJ1dHRvbil7Y2FzZSAwOkN0PW4ubW91c2VCdXR0b25zLkxFRlQ7YnJlYWs7Y2FzZSAxOkN0PW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6Q3Q9bi5tb3VzZUJ1dHRvbnMuUklHSFQ7YnJlYWs7ZGVmYXVsdDpDdD0tMX1zd2l0Y2goQ3Qpe2Nhc2UgSzAuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO1cobnQpLG89aS5ET0xMWTticmVhaztjYXNlIEswLlJPVEFURTppZihudC5jdHJsS2V5fHxudC5tZXRhS2V5fHxudC5zaGlmdEtleSl7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1lbHNle2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9YnJlYWs7Y2FzZSBLMC5QQU46aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9ZWxzZXtpZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtaKG50KSxvPWkuUEFOfWJyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9byE9PWkuTk9ORSYmbi5kaXNwYXRjaEV2ZW50KEhodCl9ZnVuY3Rpb24gTGUobnQpe2lmKG4uZW5hYmxlZCE9PSExKXN3aXRjaChvKXtjYXNlIGkuUk9UQVRFOmlmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO3J0KG50KTticmVhaztjYXNlIGkuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO290KG50KTticmVhaztjYXNlIGkuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3N0KG50KTticmVha319ZnVuY3Rpb24gYXIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVpvb209PT0hMXx8byE9PWkuTk9ORXx8KG50LnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaEV2ZW50KEhodCksU3QobnQpLG4uZGlzcGF0Y2hFdmVudChpcGUpKX1mdW5jdGlvbiBmcihudCl7bi5lbmFibGVkPT09ITF8fG4uZW5hYmxlUGFuPT09ITF8fGJ0KG50KX1mdW5jdGlvbiB0dChudCl7c3dpdGNoKFR0KG50KSxDLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChuLnRvdWNoZXMuT05FKXtjYXNlIFowLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtNdCgpLG89aS5UT1VDSF9ST1RBVEU7YnJlYWs7Y2FzZSBaMC5QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47bHQoKSxvPWkuVE9VQ0hfUEFOO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChuLnRvdWNoZXMuVFdPKXtjYXNlIFowLkRPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47X3QoKSxvPWkuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgWjAuRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtjdCgpLG89aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uICQobnQpe3N3aXRjaChUdChudCksbyl7Y2FzZSBpLlRPVUNIX1JPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtYKG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47ZXQobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47cShudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtwdChudCksbi51cGRhdGUoKTticmVhaztkZWZhdWx0Om89aS5OT05FfX1mdW5jdGlvbiBJdChudCl7bi5lbmFibGVkIT09ITEmJm50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gJHQobnQpe0MucHVzaChudCl9ZnVuY3Rpb24gaGUobnQpe2RlbGV0ZSBQW250LnBvaW50ZXJJZF07Zm9yKGxldCBDdD0wO0N0PEMubGVuZ3RoO0N0KyspaWYoQ1tDdF0ucG9pbnRlcklkPT1udC5wb2ludGVySWQpe0Muc3BsaWNlKEN0LDEpO3JldHVybn19ZnVuY3Rpb24gVHQobnQpe2xldCBDdD1QW250LnBvaW50ZXJJZF07Q3Q9PT12b2lkIDAmJihDdD1uZXcgTHQsUFtudC5wb2ludGVySWRdPUN0KSxDdC5zZXQobnQucGFnZVgsbnQucGFnZVkpfWZ1bmN0aW9uIGJlKG50KXtsZXQgQ3Q9bnQucG9pbnRlcklkPT09Q1swXS5wb2ludGVySWQ/Q1sxXTpDWzBdO3JldHVybiBQW0N0LnBvaW50ZXJJZF19bi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyLHtwYXNzaXZlOiExfSksdGhpcy51cGRhdGUoKX19O3ZhciBGNj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgbU0sdGhpcy5fY2FudmFzU2l6ZT1udWxsLHRoaXMuX2xheWVyc0NvbmZpZz1udWxsLHRoaXMuX3J1bkNvbG9yPXR9X2lzT2JqZWN0KHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ib2JqZWN0IiYmdCE9bnVsbCYmIUFycmF5LmlzQXJyYXkodCl9X2FwcGx5RGVmYXVsdHModCxyKXtsZXQgbj17fSxpPVt0LHJdO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2ZvcihsZXQgcyBpbiBhKXtsZXQgbD1zIGluIG47dGhpcy5faXNPYmplY3QoYVtzXSk/bltzXT10aGlzLl9hcHBseURlZmF1bHRzKG5bc118fHt9LGFbc10pOmx8fChuW3NdPWFbc10pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYoISghdGhpcy5fbGF5ZXJzQ29uZmlnfHwhdGhpcy5fc2NlbmV8fCF0aGlzLl9sYXN0TWVzaCkpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyB5TSh0aGlzLl9sYXN0TWVzaCxuZXcgbmUoInJnYigwLCAwLCAyNTUpIikpO3RoaXMuX3NjZW5lLmFkZCh0KX1pZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0F4ZXMpe3ZhciByPW5ldyB2TSg1KTt0aGlzLl9zY2VuZS5hZGQocil9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxyKXt2YXIgYSxzLGwsYztpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IHEwO3ZhciBuPW5ldyB3TVt0LmNhbWVyYS5jbHNdKHQuY2FtZXJhLmZvdiwoKGE9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmEud2lkdGgpLygocz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6cy5oZWlnaHQpLHQuY2FtZXJhLm5lYXIsdC5jYW1lcmEuZmFyKTt0aGlzLl9jYW1lcmE9bix0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj12b2lkIDAsdC5jYW1lcmEucG9zaXRpb24mJih0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5wb3NpdGlvbikpLHRoaXMuaW5pdENhbWVyYUxvb2tBdD12b2lkIDAsdC5jYW1lcmEubG9va0F0JiYodGhpcy5pbml0Q2FtZXJhTG9va0F0PW5ldyBqKCkuZnJvbUFycmF5KHQuY2FtZXJhLmxvb2tBdCkpO3ZhciBpPW5ldyBKVShuLHIpO2xldCBvPWk7by5sb29rU3BlZWQ9LjQsby5tb3ZlbWVudFNwZWVkPTIwLG8ubm9GbHk9ITAsby5sb29rVmVydGljYWw9ITAsby5jb25zdHJhaW5WZXJ0aWNhbD0hMCxvLnZlcnRpY2FsTWluPTEsby52ZXJ0aWNhbE1heD0yLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IHJuKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChsPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpsLndpZHRoLChjPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpjLmhlaWdodCksdGhpcy5fcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigxNjc3NzIxNSwxKX1fY2xlYXJTY2VuZSgpe3ZhciB0O2lmKHRoaXMuX3NjZW5lKWZvcig7dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoPjA7KXRoaXMuX3NjZW5lLnJlbW92ZSgodD10aGlzLl9zY2VuZSk9PW51bGw/dm9pZCAwOnQuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3ZhciB0LHIsbjtyZXR1cm57ZmFyOih0PXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnQuZmFyLHBvc2l0aW9uOihyPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnIucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsP3ZvaWQgMDpuLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dmFyIHIsbixpLG87dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhJiYodGhpcy5fY2FtZXJhLmFzcGVjdD0oKHI9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnIud2lkdGgpLygobj10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bi5oZWlnaHQpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX3JlbmRlcmVyLnNldFNpemUoKGk9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmkud2lkdGgsKG89dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm8uaGVpZ2h0KTtsZXQgdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKGEpLHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSx0aGlzLl9jYW1lcmEpfS5iaW5kKHRoaXMpO3QoKX11cGRhdGVTY2VuZSh0LHIpe2xldCBuPXt9OyJjb25maWciaW4gdCYmdC5jb25maWcmJihuPUpTT04ucGFyc2UodC5jb25maWcpKSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImJlZm9yZVVwZGF0ZVNjZW5lIn0pO2xldCBpPXtjYW1lcmE6e2NsczoiUGVyc3BlY3RpdmVDYW1lcmEiLGZvdjo3NSxuZWFyOi4xLGZhcjoxZTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX07bj10aGlzLl9hcHBseURlZmF1bHRzKG4saSksdGhpcy5fY3JlYXRlV29ybGQobixyKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe3ZhciBuLGk7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjsobj10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fG4ucmVzZXQoKTtsZXQgcjshdCYmdGhpcy5fbGFzdE1lc2gmJihyPXRoaXMuX2xhc3RNZXNoKSxyJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChyKSx0aGlzLl9sYXN0TWVzaD1yKSwoaT10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fGkudXBkYXRlKCl9X2NyZWF0ZUdlb21ldHJ5KHQscil7bGV0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixyKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4scil9X2NyZWF0ZVBvaW50Q2xvdWQodCxyKXt2YXIgaDtsZXQgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnMsbz17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9vLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpvLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2xldCBhPXRoaXMuX2FwcGx5RGVmYXVsdHMocixvKSxzPW5ldyBQZSxsPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKHMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGwsMykpLGkmJmkubGVuZ3RoPT1uLmxlbmd0aCl7bGV0IGY9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXT1mW3BdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShmLDMpKX12YXIgYz1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLHU9bmV3IGltKHMsYyk7KGg9dGhpcy5fc2NlbmUpPT1udWxsfHxoLmFkZCh1KSx0aGlzLl9sYXN0TWVzaD11fXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5mYXI9cix0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdGhpcy5fY2FtZXJhQ29udHJvbHMmJih0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7dmFyIHAsZCxnO2xldCBuPW5ldyB0YSxpPW5ldyBqLG89bmV3IGo7bi5zZXRGcm9tT2JqZWN0KHQpLG4uZ2V0Q2VudGVyKGkpLG4uZ2V0U2l6ZShvKTtsZXQgYT1NYXRoLm1heChvLngsby55LG8ueikscz0oKHA9dGhpcy5fY2FtZXJhKT09bnVsbD92b2lkIDA6cC5mb3YpKihNYXRoLlBJLzE4MCksbD1NYXRoLmFicyhhLygyKk1hdGgudGFuKHMvMikpKSoxLjI1LGM9bi5taW4ueix1PWM8MD8tYytsOmwtYyxoPShkPXRoaXMuaW5pdENhbWVyYVBvc2l0aW9uKSE9bnVsbD9kOm5ldyBqKGkueCxpLnksbCksZj0oZz10aGlzLmluaXRDYW1lcmFMb29rQXQpIT1udWxsP2c6aTt0aGlzLnNldENhbWVyYVZpZXdwb2ludChoLHUqMyxmKX1fY3JlYXRlTWVzaCh0LHIpe3ZhciBmO2xldCBuPXQudmVydGljZXMsaT10LmZhY2VzLG89dC5jb2xvcnMsYT10aGlzLl9hcHBseURlZmF1bHRzKHIse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSkscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKTtsZXQgYz1uZXcgVWludDE2QXJyYXkoaS5mbGF0KCkpO2lmKG8mJm8ubGVuZ3RoKXtsZXQgcD1vLmZsYXQoKTtmb3IobGV0IGQ9MDtkPHAubGVuZ3RoO2QrKylwW2RdPXBbZF0vMjU1O3Muc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkocCksMykpLGEubWF0ZXJpYWw9YS5tYXRlcmlhbHx8e30sYS5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITB9cy5jZW50ZXIoKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHMuc2V0SW5kZXgobmV3IEplKGMsMSkpLHMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgdT1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLGg9bmV3IHRpKHMsdSk7aC5jYXN0U2hhZG93PSEwLGgucmVjZWl2ZVNoYWRvdz0hMCwoZj10aGlzLl9zY2VuZSk9PW51bGx8fGYuYWRkKGgpLHRoaXMuX2xhc3RNZXNoPWh9X2NyZWF0ZUxpZ2h0cyh0LHIpe2ZvcihsZXQgbj0wO248ci5saWdodHMubGVuZ3RoO24rKyl7bGV0IGk9ci5saWdodHNbbl0sbz1uZXcgd01baS5jbHNdKGkuY29sb3IsaS5pbnRlbnNpdHkpO2kucG9zaXRpb24mJm8ucG9zaXRpb24uc2V0KGkucG9zaXRpb25bMF0saS5wb3NpdGlvblsxXSxpLnBvc2l0aW9uWzJdKSx0LmFkZChvKX19fTt2YXIgTG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuYWN0aXZlPSExLHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITEsdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMSx0aGlzLl9pc01lc2hMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IElQKHRoaXMucmVxdWVzdE1hbmFnZXIpO2xldCB0PW5ldyBGNih0aGlzLl9ydW5Db2xvcik7dC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVVcGRhdGVTY2VuZSIsdGhpcy5fdXBkYXRlQ2FudmFzU2l6ZS5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX21lc2hWaWV3ZXI9dH1yZWxvYWQoKXshdGhpcy5hY3RpdmV8fCF0aGlzLl9kYXRhUHJvdmlkZXJ8fCh0aGlzLl9pc01lc2hMb2FkaW5nPSEwLHRoaXMuX2RhdGFQcm92aWRlci5yZWxvYWQodGhpcy5ydW4sdGhpcy50YWcsdGhpcy5zYW1wbGUpLnRoZW4odD0+eyF0fHwodGhpcy5fc3RlcHM9dCx0aGlzLl9zdGVwSW5kZXg9dC5sZW5ndGgtMSl9KS5jYXRjaCh0PT57aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHQ9dHx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHQpfSkpfV91cGRhdGVTY2VuZSgpe3ZhciByO2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwOyF0fHwhdC5tZXNofHwodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KChyPXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHIuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfV9kZWJvdW5jZWRGZXRjaE1lc2goKXt0aGlzLmRlYm91bmNlKCJmZXRjaE1lc2giLCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpLDEwMCl9X21heWJlRmV0Y2hNZXNoKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtpZighKCF0fHx0Lm1lc2h8fHQubWVzaEZldGNoaW5nKSl7dC5tZXNoRmV0Y2hpbmc9ITAsdGhpcy5faXNNZXNoTG9hZGluZz0hMDt0cnl7bGV0IHI9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9clswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2gocil7aWYoIXJ8fCFyLmNvZGV8fHIuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHI9cnx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHIpfWZpbmFsbHl7dGhpcy5faXNNZXNoTG9hZGluZz0hMSx0Lm1lc2hGZXRjaGluZz0hMX19fSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UoKXtpZighdGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpcmV0dXJuO2xldCB0PW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIse2RldGFpbDp0aGlzLl9tZXNoVmlld2VyLmdldENhbWVyYVBvc2l0aW9uKCl9KTt0aGlzLmRpc3BhdGNoRXZlbnQodCl9c2V0Q2FtZXJhVmlld3BvaW50KHQscixuKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludCh0LHIsbil9X3VwZGF0ZUNhbnZhc1NpemUoKXtsZXQgdD10aGlzLm9mZnNldFdpZHRoLHI9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQsaT17d2lkdGg6dCxoZWlnaHQ6ci1ufTt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoaSl9cmVkcmF3KCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfV9oYXNBdExlYXN0T25lU3RlcCh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjB9X2hhc011bHRpcGxlU3RlcHModCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWaWV3O3RoaXMuX21lc2hWaWV3ZXImJnQ9PSJhbGwiJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfXRvTG9jYWxlU3RyaW5nXyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07TG4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwic2VsZWN0ZWRWaWV3Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxMbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEY2KV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixJUCldLExuLnByb3RvdHlwZSwiX2RhdGFQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMbi5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxMbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTG4ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExuLnByb3RvdHlwZSwiX2lzTWVzaExvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExuLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiwiYWN0aXZlIiwiX2RhdGFQcm92aWRlciIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcC4qIiwiX21lc2hWaWV3ZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVNjZW5lIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsIl9kZWJvdW5jZWRGZXRjaE1lc2giLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTG4ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW0J0KCJzZWxlY3RlZFZpZXciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVZpZXciLG51bGwpO0xuPUUoW3l0KCJ0Zi1tZXNoLWxvYWRlciIpXSxMbik7dmFyIHBoPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9Ii4qIix0aGlzLl9zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7dmFyIHQ7cmV0dXJuIEFycmF5LmZyb20oKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQodCl7dGhpcy5fc2VsZWN0ZWRWaWV3PT0ic2hhcmUiJiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2gocj0+e3QudGFyZ2V0IT1yJiZyLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfV9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2godD0+e3QucmVkcmF3KCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoc3guaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXN4Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuX2RhdGFOb3RGb3VuZD1pLmxlbmd0aD09PTAsdGhpcy5fcnVuVG9UYWdJbmZvPXJ9KX1fcmVsb2FkTWVzaGVzKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXN4Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBzeC5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSxvZlNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfX07cGgudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scGgucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHBoLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtwaD1FKFt5dCgibWVzaC1kYXNoYm9hcmQiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaCk7dmFyIFFVPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pbnN0YWxsQ29tbWFuZD0icGlwIGluc3RhbGwgLVUgdGVuc29yYm9hcmQtcGx1Z2luLXByb2ZpbGUifV9jb3B5SW5zdGFsbENvbW1hbmQoKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCB0PSgpPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKGkpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pLHI9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dHJ5e3lpZWxkIHQoKSxyLmlubmVyVGV4dD0iQ29waWVkLiJ9Y2F0Y2gobil7ci5pbm5lclRleHQ9IkZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZC4ifX0pfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7bGV0IHQ9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dC5pbm5lclRleHQ9IiJ9fTtRVS50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVUucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCk7UVU9RShbeXQoInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLFFVKTt2YXIgbG09RWUoT2UoKSwxKTt2YXIgemw9RWUoT2UoKSwxKSx0cT1FZSh3bCgpLDEpO3ZhciBubj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6Zm59LHRoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2xldCB0PW5ldyB0cS5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHRxLkF4ZXMuTnVtZXJpYyh0LCJib3R0b20iKSxhY2Nlc3NvcjpyPT5yLnJlY2FsbH19LHRoaXMuX3lWYWx1ZUFjY2Vzc29yPXQ9PnQucHJlY2lzaW9uLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgicHJfY3VydmVzIiwiL3ByX2N1cnZlcyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy50YWcsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9zbW9vdGhpbmdFbmFibGVkPSExfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsbikpfX1fY29tcHV0ZVJ1bkNvbG9yKHQpe3JldHVybiBmbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYXR0YWNoZWQ9ITAsdGhpcy5yZWxvYWQoKX1fZ2V0Q2hhcnREYXRhTG9hZGVyKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIil9cmVsb2FkKCl7aWYoISF0aGlzLl9hdHRhY2hlZCl7aWYodGhpcy5ydW5zLmxlbmd0aD09PTApe3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KTtyZXR1cm59dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVsb2FkKCl9fV9zZXRDaGFydERhdGEoKXt2YXIgdD10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSxyPXRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksbj10aGlzLl9zZXRPZlJlbGV2YW50UnVuczt6bC5mb3JPd24odCwoaSxvKT0+e2xldCBhPXJbb107aWYoIShhJiZ0W29dLnN0ZXA9PT1hLnN0ZXApKXtpZighbltvXSl7dGhpcy5fY2xlYXJTZXJpZXNEYXRhKG8pO3JldHVybn10aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKG8saSl9fSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxyKXtsZXQgbj16bC5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoYSxzKT0+KGFbc109cltzXS5zbGljZSgpLnJldmVyc2UoKSxhKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV09emwubWFwVmFsdWVzKG4scz0+c1thXSk7bGV0IG89dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7by5zZXRTZXJpZXNEYXRhKHQsaSksby5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtsZXQgcj10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTtyLnNldFNlcmllc0RhdGEodCxbXSksci5jb21taXRDaGFuZ2VzKCl9X3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUscj10aGlzLnJ1blRvU3RlcENhcDtsZXQgbj17fTt6bC5mb3JPd24odCwoaSxvKT0+eyFpfHwhaS5sZW5ndGh8fChuW29dPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHJbb10saSkpfSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsbil9X25vdGlmeURhdGFDaGFuZ2UoKXt2YXIgdD10aGlzLl9ydW5Ub0RhdGFPdmVyVGltZTt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodCl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQscil7bGV0IG49TWF0aC5taW4oemwuc29ydGVkSW5kZXgoci5tYXAoaT0+aS5zdGVwKSx0KSxyLmxlbmd0aC0xKTtyZXR1cm4gcltuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiB6bC5maWx0ZXIodCxuPT5yW25dKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe3ZhciB0PXRoaXMuX3J1bnNXaXRoU3RlcEF2YWlsYWJsZTtsZXQgcj17fTtyZXR1cm4gemwuZm9yRWFjaCh0LG49PntyW25dPSEwfSkscn1fY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bmV3IERhdGUobi53YWxsX3RpbWUqMWUzKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07bm4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW194Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbX3lWYWx1ZUFjY2Vzc29yXV0iCiAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbX2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgZGVmYXVsdC15LXJhbmdlPSJbW19kZWZhdWx0WVJhbmdlXV0iCiAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICBkYXRhLXNlcmllcz0iW1tydW5zXV0iCiAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgID48L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CgogICAgPGRpdiBpZD0iYnV0dG9ucy1yb3ciPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic3RlcC1sZWdlbmQiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFN0ZXBBdmFpbGFibGVdXSIgYXM9InJ1biI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1ib3giCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiBbW19jb21wdXRlUnVuQ29sb3IocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4KICAgICAgICAgID48YnIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3YWxsLXRpbWUtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIChbW19jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dKQogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgI3N0ZXAtbGVnZW5kIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBtYXJnaW46IDVweCAwIDVweCAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jb2xvci1ib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CiAgICAgIC5zdGVwLWxhYmVsLXRleHQgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC53YWxsLXRpbWUtbGFiZWwtdGV4dCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbm4ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLG5uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sbm4ucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFGaWVsZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxubi5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQnQoInJ1bnMiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX3J1blRvUHJDdXJ2ZUVudHJ5IiwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLCJfc2V0T2ZSZWxldmFudFJ1bnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCk7RShbQnQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsInJ1blRvU3RlcENhcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sbm4ucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpO0UoW1J0KCJydW5zIiwiX3J1blRvUHJDdXJ2ZUVudHJ5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxubi5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpO0UoW1J0KCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpO25uPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1jYXJkIildLG5uKTt2YXIgU009RWUoT2UoKSwxKTt2YXIgZXA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVuVG9TdGVwSW5kZXg9e319X2NvbXB1dGVDb2xvckZvclJ1bih0KXtyZXR1cm4gZm4odCl9X2NvbXB1dGVUaW1lVGV4dEZvclJ1bih0LHIsbixpKXtsZXQgbz1yW25dO2lmKCFTTS5pc051bWJlcihvKSlyZXR1cm4iIjtsZXQgYT10W25dO2lmKCFhKXJldHVybiIiO2xldCBzPWFbb11baV07aWYoaT09PSJzdGVwIilyZXR1cm5gc3RlcCAke3N9YDtpZihpPT09InJlbGF0aXZlIilyZXR1cm4gczwxP2AkeyhzKjFlMykudG9GaXhlZCgyKX0gbXNgOmAke3MudG9GaXhlZCgyKX0gc2A7aWYoaT09PSJ3YWxsX3RpbWUiKXJldHVybiBuZXcgRGF0ZShzKjFlMykudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2xldCByPXQudGFyZ2V0LmRhdGFzZXQucnVuLG49dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsaT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtpc05hTihuKT9kZWxldGUgaVtyXTppW3JdPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLHRoaXMuX3J1blRvU3RlcEluZGV4PWl9X2NvbXB1dGVNYXhTdGVwSW5kZXhGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztsZXQgcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTTS5mb3JPd24odCwobixpKT0+e1NNLmlzTnVtYmVyKHJbaV0pfHwocltpXT1uLmxlbmd0aC0xKX0pLHRoaXMuX3J1blRvU3RlcEluZGV4PXJ9X2dldFN0ZXAodCxyKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbcl06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LHIpe2xldCBuPXt9O3JldHVybiBTTS5mb3JPd24ociwoaSxvKT0+e2xldCBhPXRbb107IWF8fChuW29dPWFbaV0uc3RlcCl9KSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5zLHI9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX19O2VwLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZXAucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGVwLnByb3RvdHlwZSwidGltZURpc3BsYXlUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlcC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpO0UoW1J0KCJydW5zIiwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZXAucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKTtlcD1FKFt5dCgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sZXApO3ZhciBrbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYobG0uaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWxtLm1hcFZhbHVlcyhyLG89PmxtLmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkQ2FyZHMoKXt2YXIgdDtsbS5mb3JFYWNoKCh0PXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWxtLm1hcFZhbHVlcyh0LG89Pk9iamVjdC5rZXlzKG8pKTtyZXR1cm4gaEUoaSxyLG4pfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMscj10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHQuZmlsdGVyKG49PnJbbl0pfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9e307ci5mb3JFYWNoKGE9PntpW2FdPXRbYV1bbl19KTtsZXQgbz1uLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBvUihpLG8pfV9jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2sodCl7cmV0dXJuIHI9Pnt0aGlzLnNldCgiX3RhZ1RvUnVuVG9EYXRhIixNeChLbCh7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTpyfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtsZXQgcj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyh0KSlmb3IobGV0W2Fdb2YgT2JqZWN0LmVudHJpZXMobykpKHJbYV09PW51bGx8fGk8clthXSkmJihyW2FdPWkpO2xldCBuPXt9O2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgYT10W29dW2ldO25baV09YS5tYXAocz0+KHtzdGVwOnMuc3RlcCx3YWxsX3RpbWU6cy53YWxsX3RpbWUscmVsYXRpdmU6cy53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KSl9cmV0dXJuIG59fTtrby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa28ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxrby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa28ucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7RShbUnQoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCk7RShbUnQoIl90YWdUb1J1blRvRGF0YSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpO2tvPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sa28pO3ZhciBCNj1FZShPZSgpLDEpO3ZhciB1bz1jbGFzcyBleHRlbmRzIEd0KG5iKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3ZhciB0PXRoaXMuX3Ntb290aGluZ1dlaWdodDtyZXR1cm4gdD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1OYS5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoQjYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPUI2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENoYXJ0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3VwZGF0ZUNhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGksbz1uLGE9QjYubWFwVmFsdWVzKHQscz0+T2JqZWN0LmtleXMocykpO2k9aEUoYSxyLG8pLGkuZm9yRWFjaChzPT57cy5pdGVtcz1zLml0ZW1zLm1hcChsPT4oe3RhZzpsLnRhZyxzZXJpZXM6bC5ydW5zLm1hcChjPT4oe3J1bjpjLHRhZzpsLnRhZ30pKX0pKX0pLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsaSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQscixuKXtsZXQgaT10Lm5hbWUsbz1uLnRhZyxhPXt9O24uc2VyaWVzLmZvckVhY2goKHtydW46dX0pPT57YVt1XT1yW3VdW29dfSk7bGV0IHM9by5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpLHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmN9PW9SKGEscyk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuUFJFRklYX0dST1VQJiZjLnN0YXJ0c1dpdGgoaSsiLyIpJiYoYz1jLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfX19O3VvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJzaG93LWRvd25sb2FkLWxpbmtzIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSIKICAgICAgICAgICAgICAgID5TaG93IGRhdGEgZG93bmxvYWQgbGlua3M8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJpZ25vcmUteS1vdXRsaWVyIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iCiAgICAgICAgICAgICAgICA+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0iMCIKICAgICAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQKICAgICAgICAgICAgICB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IgogICAgICAgICAgICAgIHN0ZXA9IjAuMDAxIgogICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICBtYXg9IjAuOTk5IgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHNjYWxhciBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgYmF0Y2gtc2l6ZT0iW1tmZWF0dXJlRmxhZ3Muc2NhbGFyc0JhdGNoU2l6ZV1dIgogICAgICAgICAgICAgICAgICBpbi1jb2xhYj0iW1tmZWF0dXJlRmxhZ3MuaW5Db2xhYl1dIgogICAgICAgICAgICAgICAgPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1by5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1by5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx1by5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1by5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtCdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdW8ucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCk7dW89RShbeXQoInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sdW8pO3ZhciBvcGU9RWUoT2UoKSwxKTt2YXIgZGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgYW59Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1fY2hhbmdlUnVuQ29sb3IoKXt2YXIgdD10aGlzLl9ydW5Db2xvcjt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dH0pfWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9X2UoKSxyPU1pKHQucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLG1hcmtkb3duOnRoaXMubWFya2Rvd25FbmFibGVkPyJ0cnVlIjoiZmFsc2UifSksbj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgbz1pLnZhbHVlLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhLndhbGxfdGltZSoxZTMpLHN0ZXA6YS5zdGVwLHRleHQ6YS50ZXh0fSkpO3RoaXMuc2V0KCJfdGV4dHMiLG8uc2xpY2UoKS5yZXZlcnNlKCkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIHhuKCIsIikodCl9fTtkaC50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwKICAgICAgZWxldmF0aW9uPSIxIgogICAgICBpZD0ic3RlcHMtY29udGFpbmVyIgogICAgICBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdGV4dHNdXSI+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InN0ZXAtY29udGFpbmVyIj4KICAgICAgICAgIHN0ZXAgPHNwYW4gY2xhc3M9InN0ZXAtdmFsdWUiPltbX2Zvcm1hdFN0ZXAoaXRlbS5zdGVwKV1dPC9zcGFuPgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InRleHQiPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tpdGVtLnRleHRdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAjc3RlcHMtY29udGFpbmVyIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgLyogY29sb3IgY29tcHV0ZWQgYW5kIHNldCBhcyBpbmxpbmUgc3R5bGUgKi87CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXRiLXRleHQtbG9hZGVyLW91dGxpbmUpOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkaC5wcm90b3R5cGUsIm1hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZGgucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxkaC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sZGgucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkaC5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoIl9ydW5Db2xvciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGgucHJvdG90eXBlLCJfY2hhbmdlUnVuQ29sb3IiLG51bGwpO2RoPUUoW3l0KCJ0Zi10ZXh0LWxvYWRlciIpXSxkaCk7dmFyIFFjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fbWFya2Rvd25FbmFibGVkPXZwKCJfbWFya2Rvd25FbmFibGVkIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlcj14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX21hcmtkb3duRW5hYmxlZE9ic2VydmVyKF9tYXJrZG93bkVuYWJsZWQpIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihvcGUuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnKSlyZXR1cm47bGV0IG49JGkocik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLG4ubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRUZXh0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWcscj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIFFsKHQscixuKX1fbWFya2Rvd25FbmFibGVkT2JzZXJ2ZXIoKXt0aGlzLl9yZWxvYWRUZXh0cygpfX07UWMudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X21hcmtkb3duRW5hYmxlZH19IgogICAgICAgICAgICAgID5FbmFibGUgTWFya2Rvd248L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSB0ZXh0IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi10ZXh0LWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBtYXJrZG93bi1lbmFibGVkPSJbW19tYXJrZG93bkVuYWJsZWRdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfbWFya2Rvd25FbmFibGVkU3RvcmFnZU9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfbWFya2Rvd25FbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRYy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUWMucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUWMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1FjPUUoW3l0KCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxRYyk7dmFyIFZodD1jbGFzcyBleHRlbmRzIEd0KG10KXt9O1ZodC50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgV2hhdC1JZiBUb29sIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgVGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWlyLWNvZGUuZ2l0aHViLmlvL2xpdC8iCiAgICAgICAgICA+TGVhcm5pbmcgSW50ZXJwcmV0YWJpbGl0eSBUb29sIChMSVQpPC9hCiAgICAgICAgPgogICAgICAgIGlzIGFuIGFjdGl2ZWx5IG1haW50YWluZWQgYWx0ZXJuYXRpdmUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvc2V0dXAvIj5oZXJlPC9hPiB0byBpbnN0YWxsIGFuZAogICAgICAgIHVzZSB0aGlzIHRvb2wuCiAgICAgIDwvcD4KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQoKICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIH0KICAgICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQogICAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQogICAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgIDwvZGl2PgogIGA7Vmh0PUUoW3l0KCJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIildLFZodCk7dmFyIGFwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1SQn19O2FwZT1FKFt5dCgidGYtYmFja2VuZCIpXSxhcGUpO3ZhciBzcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPWZufX07c3BlPUUoW3l0KCJ0Zi1jb2xvci1zY2FsZSIpXSxzcGUpO3ZhciBscGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2ZlYXR1cmVfZmxhZ3M9dFd9fTtscGU9RShbeXQoInRmLWZlYXR1cmUtZmxhZ3MiKV0sbHBlKTt2YXIgY3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPWtXfX07Y3BlPUUoW3l0KCJ0Zi1nbG9iYWxzIildLGNwZSk7dmFyIFVodD17fTtLcyhVaHQse1RmRG9tUmVwZWF0OigpPT5PaSxhZGRMaW1pdExpc3RlbmVyOigpPT5VVyxnZXRMaW1pdDooKT0+R1cscmVtb3ZlTGltaXRMaXN0ZW5lcjooKT0+cVcsc2V0TGltaXQ6KCk9Pm4yZX0pO3ZhciB1cGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PVVodH19O3VwZT1FKFt5dCgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sdXBlKTt2YXIgaHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPU9CfX07aHBlPUUoW3l0KCJ0Zi1zdG9yYWdlIildLGhwZSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIFV1ZT1PYmplY3QuY3JlYXRlLE1PPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx6dWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixqdWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsR3VlPU9iamVjdC5nZXRQcm90b3R5cGVPZixXdWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx1OD0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLFNPPShuLHQpPT57Zm9yKHZhciBlIGluIHQpTU8obixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LGQ4PShuLHQsZSk9PihlPW51bGwhPW4/VXVlKEd1ZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIGp1ZSh0KSkhV3VlLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYmTU8obixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9enVlKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTpNTyhlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLFc4PXU4KChkUWUseVMpPT57dmFyIE04LFM4LEU4LFQ4LEQ4LEE4LEk4LFA4LFI4LF9TLFZPLE84LGs4LEY4LG1nLE44LEw4LEI4LFY4LEg4LFU4LHo4LGo4LEc4LHZTOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8scyl7cmV0dXJuIGlbb109cj9yKG8scyk6c319ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgeVMmJiJvYmplY3QiPT10eXBlb2YgeVMuZXhwb3J0cz9lKHQsZSh5Uy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07TTg9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LFM4PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEscz1hcmd1bWVudHMubGVuZ3RoO288cztvKyspZm9yKHZhciBhIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpJiYoaVthXT1yW2FdKTtyZXR1cm4gaX0sRTg9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIHMgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmci5pbmRleE9mKHMpPDAmJihvW3NdPWlbc10pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT0wO2ZvcihzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7YTxzLmxlbmd0aDthKyspci5pbmRleE9mKHNbYV0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLHNbYV0pJiYob1tzW2FdXT1pW3NbYV1dKX1yZXR1cm4gb30sVDg9ZnVuY3Rpb24oaSxyLG8scyl7dmFyIGMsYT1hcmd1bWVudHMubGVuZ3RoLGw9YTwzP3I6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6cztpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxzKTtlbHNlIGZvcih2YXIgdT1pLmxlbmd0aC0xO3U+PTA7dS0tKShjPWlbdV0pJiYobD0oYTwzP2MobCk6YT4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBhPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sRDg9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtyKG8scyxpKX19LEE4PWZ1bmN0aW9uKGkscil7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShpLHIpfSxJOD1mdW5jdGlvbihpLHIsbyxzKXtyZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUoaCl7dHJ5e3Aocy5uZXh0KGgpKX1jYXRjaChmKXtjKGYpfX1mdW5jdGlvbiBkKGgpe3RyeXtwKHMudGhyb3coaCkpfWNhdGNoKGYpe2MoZil9fWZ1bmN0aW9uIHAoaCl7aC5kb25lP2woaC52YWx1ZSk6ZnVuY3Rpb24obCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfShoLnZhbHVlKS50aGVuKHUsZCl9cCgocz1zLmFwcGx5KGkscnx8W10pKS5uZXh0KCkpfSl9LFA4PWZ1bmN0aW9uKGkscil7dmFyIHMsYSxsLGMsbz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZsWzBdKXRocm93IGxbMV07cmV0dXJuIGxbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShwKXtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKHMpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxwWzBdJiYobz0wKSksbzspdHJ5e2lmKHM9MSxhJiYobD0yJnBbMF0/YS5yZXR1cm46cFswXT9hLnRocm93fHwoKGw9YS5yZXR1cm4pJiZsLmNhbGwoYSksMCk6YS5uZXh0KSYmIShsPWwuY2FsbChhLHBbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChhPTAsbCYmKHA9WzImcFswXSxsLnZhbHVlXSkscFswXSl7Y2FzZSAwOmNhc2UgMTpsPXA7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOnBbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxhPXBbMV0scD1bMF07Y29udGludWU7Y2FzZSA3OnA9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShsPShsPW8udHJ5cykubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoNj09PXBbMF18fDI9PT1wWzBdKSl7bz0wO2NvbnRpbnVlfWlmKDM9PT1wWzBdJiYoIWx8fHBbMV0+bFswXSYmcFsxXTxsWzNdKSl7by5sYWJlbD1wWzFdO2JyZWFrfWlmKDY9PT1wWzBdJiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPXA7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChwKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9cD1yLmNhbGwoaSxvKX1jYXRjaChoKXtwPVs2LGhdLGE9MH1maW5hbGx5e3M9bD0wfWlmKDUmcFswXSl0aHJvdyBwWzFdO3JldHVybnt2YWx1ZTpwWzBdP3BbMV06dm9pZCAwLGRvbmU6ITB9fShbcCxoXSl9fX0sUjg9ZnVuY3Rpb24oaSxyKXtmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJnZTKHIsaSxvKX0sdlM9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihpLHIsbyxzKXt2b2lkIDA9PT1zJiYocz1vKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk7KCFhfHwoImdldCJpbiBhPyFyLl9fZXNNb2R1bGU6YS53cml0YWJsZXx8YS5jb25maWd1cmFibGUpKSYmKGE9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJbb119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyxhKX06ZnVuY3Rpb24oaSxyLG8scyl7dm9pZCAwPT09cyYmKHM9byksaVtzXT1yW29dfSxfUz1mdW5jdGlvbihpKXt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbz1yJiZpW3JdLHM9MDtpZihvKXJldHVybiBvLmNhbGwoaSk7aWYoaSYmIm51bWJlciI9PXR5cGVvZiBpLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBpJiZzPj1pLmxlbmd0aCYmKGk9dm9pZCAwKSx7dmFsdWU6aSYmaVtzKytdLGRvbmU6IWl9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihyPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0sVk89ZnVuY3Rpb24oaSxyKXt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZpW1N5bWJvbC5pdGVyYXRvcl07aWYoIW8pcmV0dXJuIGk7dmFyIGEsYyxzPW8uY2FsbChpKSxsPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1yfHxyLS0gPjApJiYhKGE9cy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKX1jYXRjaCh1KXtjPXtlcnJvcjp1fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobz1zLnJldHVybikmJm8uY2FsbChzKX1maW5hbGx5e2lmKGMpdGhyb3cgYy5lcnJvcn19cmV0dXJuIGx9LE84PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWk9aS5jb25jYXQoVk8oYXJndW1lbnRzW3JdKSk7cmV0dXJuIGl9LGs4PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAscj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWkrPWFyZ3VtZW50c1tyXS5sZW5ndGg7dmFyIHM9QXJyYXkoaSksYT0wO2ZvcihyPTA7cjxvO3IrKylmb3IodmFyIGw9YXJndW1lbnRzW3JdLGM9MCx1PWwubGVuZ3RoO2M8dTtjKyssYSsrKXNbYV09bFtjXTtyZXR1cm4gc30sRjg9ZnVuY3Rpb24oaSxyLG8pe2lmKG98fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbCxzPTAsYT1yLmxlbmd0aDtzPGE7cysrKShsfHwhKHMgaW4gcikpJiYobHx8KGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwwLHMpKSxsW3NdPXJbc10pO3JldHVybiBpLmNvbmNhdChsfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSl9LG1nPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbWc/KHRoaXMudj1pLHRoaXMpOm5ldyBtZyhpKX0sTjg9ZnVuY3Rpb24oaSxyLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYSxzPW8uYXBwbHkoaSxyfHxbXSksbD1bXTtyZXR1cm4gYT17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhO2Z1bmN0aW9uIGMobSl7c1ttXSYmKGFbbV09ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8seSl7bC5wdXNoKFttLEMsXyx5XSk+MXx8dShtLEMpfSl9KX1mdW5jdGlvbiB1KG0sQyl7dHJ5eyFmdW5jdGlvbihtKXttLnZhbHVlIGluc3RhbmNlb2YgbWc/UHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLGgpOmYobFswXVsyXSxtKX0oc1ttXShDKSl9Y2F0Y2goXyl7ZihsWzBdWzNdLF8pfX1mdW5jdGlvbiBwKG0pe3UoIm5leHQiLG0pfWZ1bmN0aW9uIGgobSl7dSgidGhyb3ciLG0pfWZ1bmN0aW9uIGYobSxDKXttKEMpLGwuc2hpZnQoKSxsLmxlbmd0aCYmdShsWzBdWzBdLGxbMF1bMV0pfX0sTDg9ZnVuY3Rpb24oaSl7dmFyIHIsbztyZXR1cm4gcj17fSxzKCJuZXh0IikscygidGhyb3ciLGZ1bmN0aW9uKGEpe3Rocm93IGF9KSxzKCJyZXR1cm4iKSxyW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBzKGEsbCl7clthXT1pW2FdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6bWcoaVthXShjKSksZG9uZToicmV0dXJuIj09PWF9Omw/bChjKTpjfTpsfX0sQjg9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPV9TKGkpLG89e30scygibmV4dCIpLHMoInRocm93IikscygicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gcyhsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGQpeyFmdW5jdGlvbihsLGMsdSxkKXtQcm9taXNlLnJlc29sdmUoZCkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6dX0pfSxjKX0odSxkLChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxWOD1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTtIOD1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmdlMocixpLG8pO3JldHVybiBlKHIsaSkscn0sVTg9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSx6OD1mdW5jdGlvbihpLHIsbyxzKXtpZigiYSI9PT1vJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/czoiYSI9PT1vP3MuY2FsbChpKTpzP3MudmFsdWU6ci5nZXQoaSl9LGo4PWZ1bmN0aW9uKGkscixvLHMsYSl7aWYoIm0iPT09cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1zJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09cz9hLmNhbGwoaSxvKTphP2EudmFsdWU9bzpyLnNldChpLG8pLG99LEc4PWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixNOCksbigiX19hc3NpZ24iLFM4KSxuKCJfX3Jlc3QiLEU4KSxuKCJfX2RlY29yYXRlIixUOCksbigiX19wYXJhbSIsRDgpLG4oIl9fbWV0YWRhdGEiLEE4KSxuKCJfX2F3YWl0ZXIiLEk4KSxuKCJfX2dlbmVyYXRvciIsUDgpLG4oIl9fZXhwb3J0U3RhciIsUjgpLG4oIl9fY3JlYXRlQmluZGluZyIsdlMpLG4oIl9fdmFsdWVzIixfUyksbigiX19yZWFkIixWTyksbigiX19zcHJlYWQiLE84KSxuKCJfX3NwcmVhZEFycmF5cyIsazgpLG4oIl9fc3ByZWFkQXJyYXkiLEY4KSxuKCJfX2F3YWl0IixtZyksbigiX19hc3luY0dlbmVyYXRvciIsTjgpLG4oIl9fYXN5bmNEZWxlZ2F0b3IiLEw4KSxuKCJfX2FzeW5jVmFsdWVzIixCOCksbigiX19tYWtlVGVtcGxhdGVPYmplY3QiLFY4KSxuKCJfX2ltcG9ydFN0YXIiLEg4KSxuKCJfX2ltcG9ydERlZmF1bHQiLFU4KSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Iix6OCksbigiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsajgpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRzgpfSl9KSxaWT11OChWMz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbixNcD1WMyYmVjMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24obix0LGUpe2lmKGV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbyxpPTAscj10Lmxlbmd0aDtpPHI7aSsrKShvfHwhKGkgaW4gdCkpJiYob3x8KG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxvW2ldPXRbaV0pO3JldHVybiBuLmNvbmNhdChvfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9O249ZnVuY3Rpb24oKXshZnVuY3Rpb24oVil7dmFyIHRlPVYucGVyZm9ybWFuY2U7ZnVuY3Rpb24gZGUoYnQpe3RlJiZ0ZS5tYXJrJiZ0ZS5tYXJrKGJ0KX1mdW5jdGlvbiBTKGJ0LF9lKXt0ZSYmdGUubWVhc3VyZSYmdGUubWVhc3VyZShidCxfZSl9ZGUoIlpvbmUiKTt2YXIgTD1WLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBxKGJ0KXtyZXR1cm4gTCtidH12YXIgWj0hMD09PVZbcSgiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoVi5ab25lKXtpZihafHwiZnVuY3Rpb24iIT10eXBlb2YgVi5ab25lLl9fc3ltYm9sX18pdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3JldHVybiBWLlpvbmV9dmFyIGNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUpe3RoaXMuX3BhcmVudD1fZSx0aGlzLl9uYW1lPWJlP2JlLm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPWJlJiZiZS5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3ICRlKHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxiZSl9cmV0dXJuIGJ0LmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYoVi5Qcm9taXNlIT09a24uWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIF9lPWJ0LmN1cnJlbnQ7X2UucGFyZW50OylfZT1fZS5wYXJlbnQ7cmV0dXJuIF9lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkci56b25lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKF9lLGJlLERlKXtpZih2b2lkIDA9PT1EZSYmKERlPSExKSxrbi5oYXNPd25Qcm9wZXJ0eShfZSkpe2lmKCFEZSYmWil0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrX2UpfWVsc2UgaWYoIVZbIl9fWm9uZV9kaXNhYmxlXyIrX2VdKXt2YXIgRW49IlpvbmU6IitfZTtkZShFbiksa25bX2VdPWJlKFYsYnQsZ3IpLFMoRW4sRW4pfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihfZSl7dmFyIGJlPXRoaXMuZ2V0Wm9uZVdpdGgoX2UpO2lmKGJlKXJldHVybiBiZS5fcHJvcGVydGllc1tfZV19LGJ0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihfZSl7Zm9yKHZhciBiZT10aGlzO2JlOyl7aWYoYmUuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoX2UpKXJldHVybiBiZTtiZT1iZS5fcGFyZW50fXJldHVybiBudWxsfSxidC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihfZSl7aWYoIV9lKXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsX2UpfSxidC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihfZSxiZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIGZ1bmN0aW9uIGdvdDogIitfZSk7dmFyIERlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxfZSxiZSksRW49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRW4ucnVuR3VhcmRlZChEZSx0aGlzLGFyZ3VtZW50cyxiZSl9fSxidC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsX2UsYmUsRGUsRW4pfWZpbmFsbHl7ZHI9ZHIucGFyZW50fX0sYnQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3ZvaWQgMD09PWJlJiYoYmU9bnVsbCksZHI9e3BhcmVudDpkcix6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxfZSxiZSxEZSxFbil9Y2F0Y2godnIpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHZyKSl0aHJvdyB2cn19ZmluYWxseXtkcj1kci5wYXJlbnR9fSxidC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7aWYoX2Uuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoX2Uuem9uZXx8RHQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKF9lLnN0YXRlIT09Z2l8fF9lLnR5cGUhPT1faSYmX2UudHlwZSE9PU9uKXt2YXIgRW49X2Uuc3RhdGUhPVhuO0VuJiZfZS5fdHJhbnNpdGlvblRvKFhuLFVuKSxfZS5ydW5Db3VudCsrO3ZhciB2cj1xcztxcz1fZSxkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e19lLnR5cGU9PU9uJiZfZS5kYXRhJiYhX2UuZGF0YS5pc1BlcmlvZGljJiYoX2UuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsX2UsYmUsRGUpfWNhdGNoKEhsKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxIbCkpdGhyb3cgSGx9fWZpbmFsbHl7X2Uuc3RhdGUhPT1naSYmX2Uuc3RhdGUhPT1qaSYmKF9lLnR5cGU9PV9pfHxfZS5kYXRhJiZfZS5kYXRhLmlzUGVyaW9kaWM/RW4mJl9lLl90cmFuc2l0aW9uVG8oVW4sWG4pOihfZS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksRW4mJl9lLl90cmFuc2l0aW9uVG8oZ2ksWG4sZ2kpKSksZHI9ZHIucGFyZW50LHFzPXZyfX19LGJ0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oX2Upe2lmKF9lLnpvbmUmJl9lLnpvbmUhPT10aGlzKWZvcih2YXIgYmU9dGhpcztiZTspe2lmKGJlPT09X2Uuem9uZSl0aHJvdyBFcnJvcigiY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gIi5jb25jYXQodGhpcy5uYW1lLCIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIikuY29uY2F0KF9lLnpvbmUubmFtZSkpO2JlPWJlLnBhcmVudH1fZS5fdHJhbnNpdGlvblRvKGVpLGdpKTt2YXIgRGU9W107X2UuX3pvbmVEZWxlZ2F0ZXM9RGUsX2UuX3pvbmU9dGhpczt0cnl7X2U9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLF9lKX1jYXRjaChFbil7dGhyb3cgX2UuX3RyYW5zaXRpb25UbyhqaSxlaSxnaSksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsRW4pLEVufXJldHVybiBfZS5fem9uZURlbGVnYXRlcz09PURlJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoX2UsMSksX2Uuc3RhdGU9PWVpJiZfZS5fdHJhbnNpdGlvblRvKFVuLGVpKSxfZX0sYnQucHJvdG90eXBlLnNjaGVkdWxlTWljcm9UYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKHduLF9lLGJlLERlLEVuLHZvaWQgMCkpfSxidC5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4sdnIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgV2UoT24sX2UsYmUsRGUsRW4sdnIpKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuLHZyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKF9pLF9lLGJlLERlLEVuLHZyKSl9LGJ0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKF9lKXtpZihfZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhfZS56b25lfHxEdCkubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYoX2Uuc3RhdGU9PT1Vbnx8X2Uuc3RhdGU9PT1Ybil7X2UuX3RyYW5zaXRpb25UbyhWdCxVbixYbik7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsX2UpfWNhdGNoKGJlKXt0aHJvdyBfZS5fdHJhbnNpdGlvblRvKGppLFZ0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxiZSksYmV9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksX2UuX3RyYW5zaXRpb25UbyhnaSxWdCksX2UucnVuQ291bnQ9MCxfZX19LGJ0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKF9lLGJlKXt2YXIgRGU9X2UuX3pvbmVEZWxlZ2F0ZXM7LTE9PWJlJiYoX2UuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciBFbj0wO0VuPERlLmxlbmd0aDtFbisrKURlW0VuXS5fdXBkYXRlVGFza0NvdW50KF9lLnR5cGUsYmUpfSxidH0oKTtjZS5fX3N5bWJvbF9fPXE7dmFyIEppLFVlPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0Lmhhc1Rhc2soYmUsRGUpfSxvblNjaGVkdWxlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0LnNjaGVkdWxlVGFzayhiZSxEZSl9LG9uSW52b2tlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSxFbix2cil7cmV0dXJuIGJ0Lmludm9rZVRhc2soYmUsRGUsRW4sdnIpfSxvbkNhbmNlbFRhc2s6ZnVuY3Rpb24oYnQsX2UsYmUsRGUpe3JldHVybiBidC5jYW5jZWxUYXNrKGJlLERlKX19LCRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUpe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9X2UsdGhpcy5fcGFyZW50RGVsZWdhdGU9YmUsdGhpcy5fZm9ya1pTPURlJiYoRGUmJkRlLm9uRm9yaz9EZTpiZS5fZm9ya1pTKSx0aGlzLl9mb3JrRGxndD1EZSYmKERlLm9uRm9yaz9iZTpiZS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1EZSYmKERlLm9uRm9yaz90aGlzLnpvbmU6YmUuX2ZvcmtDdXJyWm9uZSksdGhpcy5faW50ZXJjZXB0WlM9RGUmJihEZS5vbkludGVyY2VwdD9EZTpiZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9RGUmJihEZS5vbkludGVyY2VwdD9iZTpiZS5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9RGUmJihEZS5vbkludGVyY2VwdD90aGlzLnpvbmU6YmUuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZva2VaUz1EZSYmKERlLm9uSW52b2tlP0RlOmJlLl9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1EZSYmKERlLm9uSW52b2tlP2JlOmJlLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1EZSYmKERlLm9uSW52b2tlP3RoaXMuem9uZTpiZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9RGUmJihEZS5vbkhhbmRsZUVycm9yP0RlOmJlLl9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9RGUmJihEZS5vbkhhbmRsZUVycm9yP2JlOmJlLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9RGUmJihEZS5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTpiZS5faGFuZGxlRXJyb3JDdXJyWm9uZSksdGhpcy5fc2NoZWR1bGVUYXNrWlM9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9EZTpiZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9iZTpiZS5fc2NoZWR1bGVUYXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9RGUmJihEZS5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6YmUuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9RGUmJihEZS5vbkludm9rZVRhc2s/RGU6YmUuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFza0RsZ3Q9RGUmJihEZS5vbkludm9rZVRhc2s/YmU6YmUuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9RGUmJihEZS5vbkludm9rZVRhc2s/dGhpcy56b25lOmJlLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1EZSYmKERlLm9uQ2FuY2VsVGFzaz9EZTpiZS5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1EZSYmKERlLm9uQ2FuY2VsVGFzaz9iZTpiZS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1EZSYmKERlLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6YmUuX2NhbmNlbFRhc2tDdXJyWm9uZSksdGhpcy5faGFzVGFza1pTPW51bGwsdGhpcy5faGFzVGFza0RsZ3Q9bnVsbCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPW51bGwsdGhpcy5faGFzVGFza0N1cnJab25lPW51bGw7dmFyIEVuPURlJiZEZS5vbkhhc1Rhc2s7KEVufHxiZSYmYmUuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9RW4/RGU6VWUsdGhpcy5faGFzVGFza0RsZ3Q9YmUsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1fZSxEZS5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPVVlLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9YmUsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxEZS5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9VWUsdGhpcy5faW52b2tlVGFza0RsZ3Q9YmUsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksRGUub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPVVlLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWJlLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gYnQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oX2UsYmUpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsX2UsYmUpOm5ldyBjZShfZSxiZSl9LGJ0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oX2UsYmUsRGUpe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLF9lLGJlLERlKTpiZX0sYnQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihfZSxiZSxEZSxFbix2cil7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsX2UsYmUsRGUsRW4sdnIpOmJlLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKF9lLGJlKXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLF9lLGJlKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihfZSxiZSl7dmFyIERlPWJlO2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmRGUuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwoRGU9dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxfZSxiZSkpfHwoRGU9YmUpO2Vsc2UgaWYoYmUuc2NoZWR1bGVGbiliZS5zY2hlZHVsZUZuKGJlKTtlbHNle2lmKGJlLnR5cGUhPXduKXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7bW4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmludm9rZVRhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsX2UsYmUsRGUsRW4pOmJlLmNhbGxiYWNrLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oX2UsYmUpe3ZhciBEZTtpZih0aGlzLl9jYW5jZWxUYXNrWlMpRGU9dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsX2UsYmUpO2Vsc2V7aWYoIWJlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7RGU9YmUuY2FuY2VsRm4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmhhc1Rhc2s9ZnVuY3Rpb24oX2UsYmUpe3RyeXt0aGlzLl9oYXNUYXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLF9lLGJlKX1jYXRjaChEZSl7dGhpcy5oYW5kbGVFcnJvcihfZSxEZSl9fSxidC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihfZSxiZSl7dmFyIERlPXRoaXMuX3Rhc2tDb3VudHMsRW49RGVbX2VdLHZyPURlW19lXT1FbitiZTtpZih2cjwwKXRocm93IG5ldyBFcnJvcigiTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPUVuJiYwIT12cnx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOkRlLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpEZS5tYWNyb1Rhc2s+MCxldmVudFRhc2s6RGUuZXZlbnRUYXNrPjAsY2hhbmdlOl9lfSl9LGJ0fSgpLFdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUsRW4sdnIsSGwpe2lmKHRoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVsZWQiLHRoaXMudHlwZT1fZSx0aGlzLnNvdXJjZT1iZSx0aGlzLmRhdGE9RW4sdGhpcy5zY2hlZHVsZUZuPXZyLHRoaXMuY2FuY2VsRm49SGwsIURlKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPURlO3ZhciBldD10aGlzO3RoaXMuaW52b2tlPV9lPT09X2kmJkVuJiZFbi51c2VHP2J0Lmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gYnQuaW52b2tlVGFzay5jYWxsKFYsZXQsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gYnQuaW52b2tlVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7X2V8fChfZT10aGlzKSxEcisrO3RyeXtyZXR1cm4gX2UucnVuQ291bnQrKyxfZS56b25lLnJ1blRhc2soX2UsYmUsRGUpfWZpbmFsbHl7MT09RHImJlJuKCksRHItLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidC5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJzdGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxidC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKGdpLGVpKX0sYnQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oX2UsYmUsRGUpe2lmKHRoaXMuX3N0YXRlIT09YmUmJnRoaXMuX3N0YXRlIT09RGUpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdCh0aGlzLnR5cGUsIiAnIikuY29uY2F0KHRoaXMuc291cmNlLCInOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyIpLmNvbmNhdChfZSwiJywgZXhwZWN0aW5nIHN0YXRlICciKS5jb25jYXQoYmUsIiciKS5jb25jYXQoRGU/IiBvciAnIitEZSsiJyI6IiIsIiwgd2FzICciKS5jb25jYXQodGhpcy5fc3RhdGUsIicuIikpO3RoaXMuX3N0YXRlPV9lLF9lPT1naSYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGJ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEmJnR5cGVvZiB0aGlzLmRhdGEuaGFuZGxlSWQ8InUiP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sYnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fSxidH0oKSxydD1xKCJzZXRUaW1lb3V0IiksZHQ9cSgiUHJvbWlzZSIpLFR0PXEoInRoZW4iKSxBdD1bXSxjbj0hMTtmdW5jdGlvbiB4aShidCl7aWYoSml8fFZbZHRdJiYoSmk9VltkdF0ucmVzb2x2ZSgwKSksSmkpe3ZhciBfZT1KaVtUdF07X2V8fChfZT1KaS50aGVuKSxfZS5jYWxsKEppLGJ0KX1lbHNlIFZbcnRdKGJ0LDApfWZ1bmN0aW9uIG1uKGJ0KXswPT09RHImJjA9PT1BdC5sZW5ndGgmJnhpKFJuKSxidCYmQXQucHVzaChidCl9ZnVuY3Rpb24gUm4oKXtpZighY24pe2Zvcihjbj0hMDtBdC5sZW5ndGg7KXt2YXIgYnQ9QXQ7QXQ9W107Zm9yKHZhciBfZT0wO19lPGJ0Lmxlbmd0aDtfZSsrKXt2YXIgYmU9YnRbX2VdO3RyeXtiZS56b25lLnJ1blRhc2soYmUsbnVsbCxudWxsKX1jYXRjaChEZSl7Z3Iub25VbmhhbmRsZWRFcnJvcihEZSl9fX1nci5taWNyb3Rhc2tEcmFpbkRvbmUoKSxjbj0hMX19dmFyIER0PXtuYW1lOiJOTyBaT05FIn0sZ2k9Im5vdFNjaGVkdWxlZCIsZWk9InNjaGVkdWxpbmciLFVuPSJzY2hlZHVsZWQiLFhuPSJydW5uaW5nIixWdD0iY2FuY2VsaW5nIixqaT0idW5rbm93biIsd249Im1pY3JvVGFzayIsT249Im1hY3JvVGFzayIsX2k9ImV2ZW50VGFzayIsa249e30sZ3I9e3N5bWJvbDpxLGN1cnJlbnRab25lRnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LG9uVW5oYW5kbGVkRXJyb3I6X3IsbWljcm90YXNrRHJhaW5Eb25lOl9yLHNjaGVkdWxlTWljcm9UYXNrOm1uLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWNlW3EoImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hPblByb3BlcnRpZXM6X3IscGF0Y2hNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaE1hY3JvVGFzazpmdW5jdGlvbigpe3JldHVybiBfcn0scGF0Y2hFdmVudFByb3RvdHlwZTpmdW5jdGlvbigpe3JldHVybiBfcn0saXNJRU9yRWRnZTpmdW5jdGlvbigpe3JldHVybiExfSxnZXRHbG9iYWxPYmplY3RzOmZ1bmN0aW9uKCl7fSxPYmplY3REZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBfcn0sT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7fSxPYmplY3RDcmVhdGU6ZnVuY3Rpb24oKXt9LEFycmF5U2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hDbGFzczpmdW5jdGlvbigpe3JldHVybiBfcn0sd3JhcFdpdGhDdXJyZW50Wm9uZTpmdW5jdGlvbigpe3JldHVybiBfcn0sZmlsdGVyUHJvcGVydGllczpmdW5jdGlvbigpe3JldHVybltdfSxhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LF9yZWRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaENhbGxiYWNrczpmdW5jdGlvbigpe3JldHVybiBfcn0sbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6eGl9LGRyPXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBjZShudWxsLG51bGwpfSxxcz1udWxsLERyPTA7ZnVuY3Rpb24gX3IoKXt9UygiWm9uZSIsIlpvbmUiKSxWLlpvbmU9Y2V9KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8Z2xvYmFsKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGk9T2JqZWN0LmNyZWF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZSxvPSJhZGRFdmVudExpc3RlbmVyIixzPSJyZW1vdmVFdmVudExpc3RlbmVyIixhPVpvbmUuX19zeW1ib2xfXyhvKSxsPVpvbmUuX19zeW1ib2xfXyhzKSxjPSJ0cnVlIix1PSJmYWxzZSIsZD1ab25lLl9fc3ltYm9sX18oIiIpO2Z1bmN0aW9uIHAoVix0ZSl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKFYsdGUpfWZ1bmN0aW9uIGgoVix0ZSxkZSxTLEwpe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2soVix0ZSxkZSxTLEwpfXZhciBmPVpvbmUuX19zeW1ib2xfXyxtPXR5cGVvZiB3aW5kb3c8InUiLEM9bT93aW5kb3c6dm9pZCAwLF89bSYmQ3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWw7ZnVuY3Rpb24gSShWLHRlKXtmb3IodmFyIGRlPVYubGVuZ3RoLTE7ZGU+PTA7ZGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgVltkZV0mJihWW2RlXT1wKFZbZGVdLHRlKyJfIitkZSkpO3JldHVybiBWfWZ1bmN0aW9uIE8oVil7cmV0dXJuIVZ8fCExIT09Vi53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgVi5nZXQmJnR5cGVvZiBWLnNldD4idSIpfXZhciBlZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsWD0hKCJudyJpbiBfKSYmdHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSx4ZT0hWCYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksZmU9dHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksdmU9e30sVD1mdW5jdGlvbihWKXtpZihWPVZ8fF8uZXZlbnQpe3ZhciB0ZT12ZVtWLnR5cGVdO3RlfHwodGU9dmVbVi50eXBlXT1mKCJPTl9QUk9QRVJUWSIrVi50eXBlKSk7dmFyIEwsZGU9dGhpc3x8Vi50YXJnZXR8fF8sUz1kZVt0ZV07aWYoeGUmJmRlPT09QyYmImVycm9yIj09PVYudHlwZSl7dmFyIHE9VjshMD09PShMPVMmJlMuY2FsbCh0aGlzLHEubWVzc2FnZSxxLmZpbGVuYW1lLHEubGluZW5vLHEuY29sbm8scS5lcnJvcikpJiZWLnByZXZlbnREZWZhdWx0KCl9ZWxzZSBudWxsIT0oTD1TJiZTLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkmJiFMJiZWLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIEx9fTtmdW5jdGlvbiBuZShWLHRlLGRlKXt2YXIgUz1uKFYsdGUpO2lmKCFTJiZkZSYmbihkZSx0ZSkmJihTPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLFMmJlMuY29uZmlndXJhYmxlKXt2YXIgcT1mKCJvbiIrdGUrInBhdGNoZWQiKTtpZighVi5oYXNPd25Qcm9wZXJ0eShxKXx8IVZbcV0pe2RlbGV0ZSBTLndyaXRhYmxlLGRlbGV0ZSBTLnZhbHVlO3ZhciBaPVMuZ2V0LGNlPVMuc2V0LFVlPXRlLnNsaWNlKDIpLCRlPXZlW1VlXTskZXx8KCRlPXZlW1VlXT1mKCJPTl9QUk9QRVJUWSIrVWUpKSxTLnNldD1mdW5jdGlvbihXZSl7dmFyIHJ0PXRoaXM7IXJ0JiZWPT09XyYmKHJ0PV8pLHJ0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WyRlXSYmcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihVZSxUKSxjZSYmY2UuY2FsbChydCxudWxsKSxydFskZV09V2UsImZ1bmN0aW9uIj09dHlwZW9mIFdlJiZydC5hZGRFdmVudExpc3RlbmVyKFVlLFQsITEpKX0sUy5nZXQ9ZnVuY3Rpb24oKXt2YXIgV2U9dGhpcztpZighV2UmJlY9PT1fJiYoV2U9XyksIVdlKXJldHVybiBudWxsO3ZhciBydD1XZVskZV07aWYocnQpcmV0dXJuIHJ0O2lmKFope3ZhciBkdD1aLmNhbGwodGhpcyk7aWYoZHQpcmV0dXJuIFMuc2V0LmNhbGwodGhpcyxkdCksImZ1bmN0aW9uIj09dHlwZW9mIFdlLnJlbW92ZUF0dHJpYnV0ZSYmV2UucmVtb3ZlQXR0cmlidXRlKHRlKSxkdH1yZXR1cm4gbnVsbH0sdChWLHRlLFMpLFZbcV09ITB9fX1mdW5jdGlvbiBsZShWLHRlLGRlKXtpZih0ZSlmb3IodmFyIFM9MDtTPHRlLmxlbmd0aDtTKyspbmUoViwib24iK3RlW1NdLGRlKTtlbHNle3ZhciBMPVtdO2Zvcih2YXIgcSBpbiBWKSJvbiI9PXEuc2xpY2UoMCwyKSYmTC5wdXNoKHEpO2Zvcih2YXIgWj0wO1o8TC5sZW5ndGg7WisrKW5lKFYsTFtaXSxkZSl9fXZhciBoZT1mKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24geWUoVil7dmFyIHRlPV9bVl07aWYodGUpe19bZihWKV09dGUsX1tWXT1mdW5jdGlvbigpe3ZhciBMPUkoYXJndW1lbnRzLFYpO3N3aXRjaChMLmxlbmd0aCl7Y2FzZSAwOnRoaXNbaGVdPW5ldyB0ZTticmVhaztjYXNlIDE6dGhpc1toZV09bmV3IHRlKExbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2hlXT1uZXcgdGUoTFswXSxMWzFdKTticmVhaztjYXNlIDM6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdKTticmVhaztjYXNlIDQ6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdLExbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LG1lKF9bVl0sdGUpO3ZhciBTLGRlPW5ldyB0ZShmdW5jdGlvbigpe30pO2ZvcihTIGluIGRlKSJYTUxIdHRwUmVxdWVzdCI9PT1WJiYicmVzcG9uc2VCbG9iIj09PVN8fGZ1bmN0aW9uKEwpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZVtMXT9fW1ZdLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW2hlXVtMXS5hcHBseSh0aGlzW2hlXSxhcmd1bWVudHMpfTp0KF9bVl0ucHJvdG90eXBlLEwse3NldDpmdW5jdGlvbihxKXsiZnVuY3Rpb24iPT10eXBlb2YgcT8odGhpc1toZV1bTF09cChxLFYrIi4iK0wpLG1lKHRoaXNbaGVdW0xdLHEpKTp0aGlzW2hlXVtMXT1xfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1toZV1bTF19fSl9KFMpO2ZvcihTIGluIHRlKSJwcm90b3R5cGUiIT09UyYmdGUuaGFzT3duUHJvcGVydHkoUykmJihfW1ZdW1NdPXRlW1NdKX19ZnVuY3Rpb24gSihWLHRlLGRlKXtmb3IodmFyIFM9VjtTJiYhUy5oYXNPd25Qcm9wZXJ0eSh0ZSk7KVM9ZShTKTshUyYmVlt0ZV0mJihTPVYpO3ZhciBMPWYodGUpLHE9bnVsbDtpZihTJiYoIShxPVNbTF0pfHwhUy5oYXNPd25Qcm9wZXJ0eShMKSkmJihxPVNbTF09U1t0ZV0sTyhTJiZuKFMsdGUpKSkpe3ZhciBjZT1kZShxLEwsdGUpO1NbdGVdPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKHRoaXMsYXJndW1lbnRzKX0sbWUoU1t0ZV0scSl9cmV0dXJuIHF9ZnVuY3Rpb24gYWUoVix0ZSxkZSl7dmFyIFM9bnVsbDtmdW5jdGlvbiBMKHEpe3ZhciBaPXEuZGF0YTtyZXR1cm4gWi5hcmdzW1ouY2JJZHhdPWZ1bmN0aW9uKCl7cS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxTLmFwcGx5KFoudGFyZ2V0LFouYXJncykscX1TPUooVix0ZSxmdW5jdGlvbihxKXtyZXR1cm4gZnVuY3Rpb24oWixjZSl7dmFyIFVlPWRlKFosY2UpO3JldHVybiBVZS5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIGNlW1VlLmNiSWR4XT9oKFVlLm5hbWUsY2VbVWUuY2JJZHhdLFVlLEwpOnEuYXBwbHkoWixjZSl9fSl9ZnVuY3Rpb24gbWUoVix0ZSl7VltmKCJPcmlnaW5hbERlbGVnYXRlIildPXRlfXZhciBqZT0hMSxNZT0hMTtmdW5jdGlvbiB1dCgpe2lmKGplKXJldHVybiBNZTtqZT0hMDt0cnl7dmFyIFY9Qy5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PVYuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1WLmluZGV4T2YoIlRyaWRlbnQvIil8fC0xIT09Vi5pbmRleE9mKCJFZGdlLyIpKSYmKE1lPSEwKX1jYXRjaHt9cmV0dXJuIE1lfVpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEw9T2JqZWN0LmRlZmluZVByb3BlcnR5LFo9ZGUuc3ltYm9sLGNlPVtdLFVlPSEwPT09VltaKCJESVNBQkxFX1dSQVBQSU5HX1VOQ0FVR0hUX1BST01JU0VfUkVKRUNUSU9OIildLCRlPVooIlByb21pc2UiKSxXZT1aKCJ0aGVuIik7ZGUub25VbmhhbmRsZWRFcnJvcj1mdW5jdGlvbihldCl7aWYoZGUuc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIFJ0PWV0JiZldC5yZWplY3Rpb247UnQ/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5tZXNzYWdlOlJ0LCI7IFpvbmU6IixldC56b25lLm5hbWUsIjsgVGFzazoiLGV0LnRhc2smJmV0LnRhc2suc291cmNlLCI7IFZhbHVlOiIsUnQsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3IoZXQpfX0sZGUubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciBldD1mdW5jdGlvbigpe3ZhciBSdD1jZS5zaGlmdCgpO3RyeXtSdC56b25lLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXt0aHJvdyBSdC50aHJvd09yaWdpbmFsP1J0LnJlamVjdGlvbjpSdH0pfWNhdGNoKHd0KXshZnVuY3Rpb24oZXQpe2RlLm9uVW5oYW5kbGVkRXJyb3IoZXQpO3RyeXt2YXIgUnQ9dGVbZHRdOyJmdW5jdGlvbiI9PXR5cGVvZiBSdCYmUnQuY2FsbCh0aGlzLGV0KX1jYXRjaHt9fSh3dCl9fTtjZS5sZW5ndGg7KWV0KCl9O3ZhciBkdD1aKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEF0KGV0KXtyZXR1cm4gZXQmJmV0LnRoZW59ZnVuY3Rpb24gY24oZXQpe3JldHVybiBldH1mdW5jdGlvbiBKaShldCl7cmV0dXJuIGJlLnJlamVjdChldCl9dmFyIHhpPVooInN0YXRlIiksbW49WigidmFsdWUiKSxSbj1aKCJmaW5hbGx5IiksRHQ9WigicGFyZW50UHJvbWlzZVZhbHVlIiksZ2k9WigicGFyZW50UHJvbWlzZVN0YXRlIiksVW49bnVsbCxWdD0hMTtmdW5jdGlvbiB3bihldCxSdCl7cmV0dXJuIGZ1bmN0aW9uKHd0KXt0cnl7Z3IoZXQsUnQsd3QpfWNhdGNoKEtlKXtncihldCwhMSxLZSl9fX12YXIgT249ZnVuY3Rpb24oKXt2YXIgZXQ9ITE7cmV0dXJuIGZ1bmN0aW9uKHd0KXtyZXR1cm4gZnVuY3Rpb24oKXtldHx8KGV0PSEwLHd0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sa249WigiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIGdyKGV0LFJ0LHd0KXt2YXIgS2U9T24oKTtpZihldD09PXd0KXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiKTtpZihldFt4aV09PT1Vbil7dmFyIFh0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIHd0fHwiZnVuY3Rpb24iPT10eXBlb2Ygd3QpJiYoWHQ9d3QmJnd0LnRoZW4pfWNhdGNoKHNpKXtyZXR1cm4gS2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpLGV0fWlmKFJ0IT09VnQmJnd0IGluc3RhbmNlb2YgYmUmJnd0Lmhhc093blByb3BlcnR5KHhpKSYmd3QuaGFzT3duUHJvcGVydHkobW4pJiZ3dFt4aV0hPT1Vbilxcyh3dCksZ3IoZXQsd3RbeGldLHd0W21uXSk7ZWxzZSBpZihSdCE9PVZ0JiYiZnVuY3Rpb24iPT10eXBlb2YgWHQpdHJ5e1h0LmNhbGwod3QsS2Uod24oZXQsUnQpKSxLZSh3bihldCwhMSkpKX1jYXRjaChzaSl7S2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpfWVsc2V7ZXRbeGldPVJ0O3ZhciBCbj1ldFttbl07aWYoZXRbbW5dPXd0LGV0W1JuXT09PVJuJiYhMD09PVJ0JiYoZXRbeGldPWV0W2dpXSxldFttbl09ZXRbRHRdKSxSdD09PVZ0JiZ3dCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgSW49dGUuY3VycmVudFRhc2smJnRlLmN1cnJlbnRUYXNrLmRhdGEmJnRlLmN1cnJlbnRUYXNrLmRhdGEuX19jcmVhdGlvblRyYWNlX187SW4mJkwod3Qsa24se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOklufSl9Zm9yKHZhciB0aT0wO3RpPEJuLmxlbmd0aDspRHIoZXQsQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10pO2lmKDA9PUJuLmxlbmd0aCYmUnQ9PVZ0KXtldFt4aV09MDt2YXIgbmk9d3Q7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uKGV0KXtyZXR1cm4gZXQmJmV0LnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oZXQuY29uc3RydWN0b3ImJmV0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGV0KTpldD9ldC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldCl9KHd0KSsod3QmJnd0LnN0YWNrPyJcbiIrd3Quc3RhY2s6IiIpKX1jYXRjaChzaSl7bmk9c2l9VWUmJihuaS50aHJvd09yaWdpbmFsPSEwKSxuaS5yZWplY3Rpb249d3QsbmkucHJvbWlzZT1ldCxuaS56b25lPXRlLmN1cnJlbnQsbmkudGFzaz10ZS5jdXJyZW50VGFzayxjZS5wdXNoKG5pKSxkZS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIGV0fXZhciBkcj1aKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIHFzKGV0KXtpZigwPT09ZXRbeGldKXt0cnl7dmFyIFJ0PXRlW2RyXTtSdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJ0JiZSdC5jYWxsKHRoaXMse3JlamVjdGlvbjpldFttbl0scHJvbWlzZTpldH0pfWNhdGNoe31ldFt4aV09VnQ7Zm9yKHZhciB3dD0wO3d0PGNlLmxlbmd0aDt3dCsrKWV0PT09Y2Vbd3RdLnByb21pc2UmJmNlLnNwbGljZSh3dCwxKX19ZnVuY3Rpb24gRHIoZXQsUnQsd3QsS2UsWHQpe3FzKGV0KTt2YXIgQm49ZXRbeGldLEluPUJuPyJmdW5jdGlvbiI9PXR5cGVvZiBLZT9LZTpjbjoiZnVuY3Rpb24iPT10eXBlb2YgWHQ/WHQ6Smk7UnQuc2NoZWR1bGVNaWNyb1Rhc2soIlByb21pc2UudGhlbiIsZnVuY3Rpb24oKXt0cnl7dmFyIHRpPWV0W21uXSxuaT0hIXd0JiZSbj09PXd0W1JuXTtuaSYmKHd0W0R0XT10aSx3dFtnaV09Qm4pO3ZhciBzaT1SdC5ydW4oSW4sdm9pZCAwLG5pJiZJbiE9PUppJiZJbiE9PWNuP1tdOlt0aV0pO2dyKHd0LCEwLHNpKX1jYXRjaChDaSl7Z3Iod3QsITEsQ2kpfX0sd3QpfXZhciBidD1mdW5jdGlvbigpe30sX2U9Vi5BZ2dyZWdhdGVFcnJvcixiZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGV0KFJ0KXt2YXIgd3Q9dGhpcztpZighKHd0IGluc3RhbmNlb2YgZXQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7d3RbeGldPVVuLHd0W21uXT1bXTt0cnl7dmFyIEtlPU9uKCk7UnQmJlJ0KEtlKHduKHd0LCEwKSksS2Uod24od3QsVnQpKSl9Y2F0Y2goWHQpe2dyKHd0LCExLFh0KX19cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LGV0LnJlc29sdmU9ZnVuY3Rpb24oUnQpe3JldHVybiBncihuZXcgdGhpcyhudWxsKSwhMCxSdCl9LGV0LnJlamVjdD1mdW5jdGlvbihSdCl7cmV0dXJuIGdyKG5ldyB0aGlzKG51bGwpLFZ0LFJ0KX0sZXQuYW55PWZ1bmN0aW9uKFJ0KXtpZighUnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBSdFtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB3dD1bXSxLZT0wO3RyeXtmb3IodmFyIFh0PTAsQm49UnQ7WHQ8Qm4ubGVuZ3RoO1h0KyspS2UrKyx3dC5wdXNoKGV0LnJlc29sdmUoQm5bWHRdKSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBfZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUtlKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB0aT0hMSxuaT1bXTtyZXR1cm4gbmV3IGV0KGZ1bmN0aW9uKHNpLENpKXtmb3IodmFyIHlyPTA7eXI8d3QubGVuZ3RoO3lyKyspd3RbeXJdLnRoZW4oZnVuY3Rpb24oUW8pe3RpfHwodGk9ITAsc2koUW8pKX0sZnVuY3Rpb24oUW8pe25pLnB1c2goUW8pLDA9PS0tS2UmJih0aT0hMCxDaShuZXcgX2UobmksIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpKX0pfSl9LGV0LnJhY2U9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZSxYdD1uZXcgdGhpcyhmdW5jdGlvbihDaSx5cil7d3Q9Q2ksS2U9eXJ9KTtmdW5jdGlvbiBCbihDaSl7d3QoQ2kpfWZ1bmN0aW9uIEluKENpKXtLZShDaSl9Zm9yKHZhciB0aT0wLG5pPVJ0O3RpPG5pLmxlbmd0aDt0aSsrKXt2YXIgc2k9bmlbdGldO0F0KHNpKXx8KHNpPXRoaXMucmVzb2x2ZShzaSkpLHNpLnRoZW4oQm4sSW4pfXJldHVybiBYdH0sZXQuYWxsPWZ1bmN0aW9uKFJ0KXtyZXR1cm4gZXQuYWxsV2l0aENhbGxiYWNrKFJ0KX0sZXQuYWxsU2V0dGxlZD1mdW5jdGlvbihSdCl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgZXQ/dGhpczpldCkuYWxsV2l0aENhbGxiYWNrKFJ0LHt0aGVuQ2FsbGJhY2s6ZnVuY3Rpb24oS2Upe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6S2V9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKEtlKXtyZXR1cm57c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOktlfX19KX0sZXQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKFJ0LHd0KXtmb3IodmFyIEtlLFh0LEJuPW5ldyB0aGlzKGZ1bmN0aW9uKHNvLFJvKXtLZT1zbyxYdD1Sb30pLEluPTIsdGk9MCxuaT1bXSxzaT1mdW5jdGlvbihzbyl7QXQoc28pfHwoc289Q2kucmVzb2x2ZShzbykpO3ZhciBSbz10aTt0cnl7c28udGhlbihmdW5jdGlvbihacil7bmlbUm9dPXd0P3d0LnRoZW5DYWxsYmFjayhacik6WnIsMD09LS1JbiYmS2UobmkpfSxmdW5jdGlvbihacil7d3Q/KG5pW1JvXT13dC5lcnJvckNhbGxiYWNrKFpyKSwwPT0tLUluJiZLZShuaSkpOlh0KFpyKX0pfWNhdGNoKFpyKXtYdChacil9SW4rKyx0aSsrfSxDaT10aGlzLHlyPTAsUW89UnQ7eXI8UW8ubGVuZ3RoO3lyKyspc2koUW9beXJdKTtyZXR1cm4gMD09KEluLT0yKSYmS2UobmkpLEJufSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiBldH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxldC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihSdCx3dCl7dmFyIEtlLFh0PW51bGw9PT0oS2U9dGhpcy5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PUtlP3ZvaWQgMDpLZVtTeW1ib2wuc3BlY2llc107KCFYdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFh0KSYmKFh0PXRoaXMuY29uc3RydWN0b3J8fGV0KTt2YXIgQm49bmV3IFh0KGJ0KSxJbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChJbixCbixSdCx3dCk6RHIodGhpcyxJbixCbixSdCx3dCksQm59LGV0LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihSdCl7cmV0dXJuIHRoaXMudGhlbihudWxsLFJ0KX0sZXQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZT1udWxsPT09KHd0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT13dD92b2lkIDA6d3RbU3ltYm9sLnNwZWNpZXNdOyghS2V8fCJmdW5jdGlvbiIhPXR5cGVvZiBLZSkmJihLZT1ldCk7dmFyIFh0PW5ldyBLZShidCk7WHRbUm5dPVJuO3ZhciBCbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChCbixYdCxSdCxSdCk6RHIodGhpcyxCbixYdCxSdCxSdCksWHR9LGV0fSgpO2JlLnJlc29sdmU9YmUucmVzb2x2ZSxiZS5yZWplY3Q9YmUucmVqZWN0LGJlLnJhY2U9YmUucmFjZSxiZS5hbGw9YmUuYWxsO3ZhciBEZT1WWyRlXT1WLlByb21pc2U7Vi5Qcm9taXNlPWJlO3ZhciBFbj1aKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHZyKGV0KXt2YXIgUnQ9ZXQucHJvdG90eXBlLHd0PVMoUnQsInRoZW4iKTtpZighd3R8fCExIT09d3Qud3JpdGFibGUmJnd0LmNvbmZpZ3VyYWJsZSl7dmFyIEtlPVJ0LnRoZW47UnRbV2VdPUtlLGV0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFh0LEJuKXt2YXIgSW49dGhpcztyZXR1cm4gbmV3IGJlKGZ1bmN0aW9uKG5pLHNpKXtLZS5jYWxsKEluLG5pLHNpKX0pLnRoZW4oWHQsQm4pfSxldFtFbl09ITB9fXJldHVybiBkZS5wYXRjaFRoZW49dnIsRGUmJih2cihEZSksSihWLCJmZXRjaCIsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihldCl7cmV0dXJuIGZ1bmN0aW9uKFJ0LHd0KXt2YXIgS2U9ZXQuYXBwbHkoUnQsd3QpO2lmKEtlIGluc3RhbmNlb2YgYmUpcmV0dXJuIEtlO3ZhciBYdD1LZS5jb25zdHJ1Y3RvcjtyZXR1cm4gWHRbRW5dfHx2cihYdCksS2V9fShldCl9KSksUHJvbWlzZVt0ZS5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09Y2UsYmV9KSxab25lLl9fbG9hZF9wYXRjaCgidG9TdHJpbmciLGZ1bmN0aW9uKFYpe3ZhciB0ZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsZGU9ZigiT3JpZ2luYWxEZWxlZ2F0ZSIpLFM9ZigiUHJvbWlzZSIpLEw9ZigiRXJyb3IiKSxxPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMpe3ZhciAkZT10aGlzW2RlXTtpZigkZSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgJGU/dGUuY2FsbCgkZSk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCRlKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIFdlPVZbU107aWYoV2UpcmV0dXJuIHRlLmNhbGwoV2UpfWlmKHRoaXM9PT1FcnJvcil7dmFyIHJ0PVZbTF07aWYocnQpcmV0dXJuIHRlLmNhbGwocnQpfX1yZXR1cm4gdGUuY2FsbCh0aGlzKX07cVtkZV09dGUsRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPXE7dmFyIFo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpaLmNhbGwodGhpcyl9fSk7dmFyIFN0PSExO2lmKHR5cGVvZiB3aW5kb3c8InUiKXRyeXt2YXIgZ3Q9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7U3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGd0LGd0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZ3QsZ3QpfWNhdGNoe1N0PSExfXZhciBvaSxVaSx6aSxRLEYsUmU9e3VzZUc6ITB9LEFuPXt9LEV0PXt9LG9uPW5ldyBSZWdFeHAoIl4iK2QrIihcXHcrKSh0cnVlfGZhbHNlKSQiKSxDZT1mKCJwcm9wYWdhdGlvblN0b3BwZWQiKTtmdW5jdGlvbiB2dChWLHRlKXt2YXIgZGU9KHRlP3RlKFYpOlYpK3UsUz0odGU/dGUoVik6VikrYyxMPWQrZGUscT1kK1M7QW5bVl09e30sQW5bVl1bdV09TCxBbltWXVtjXT1xfWZ1bmN0aW9uIF90KFYsdGUsZGUsUyl7dmFyIEw9UyYmUy5hZGR8fG8scT1TJiZTLnJtfHxzLFo9UyYmUy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsY2U9UyYmUy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsVWU9ZihMKSwkZT0iLiIrTCsiOiIsZHQ9ZnVuY3Rpb24oUm4sRHQsZ2kpe2lmKCFSbi5pc1JlbW92ZWQpe3ZhciBVbixlaT1Sbi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIGVpJiZlaS5oYW5kbGVFdmVudCYmKFJuLmNhbGxiYWNrPWZ1bmN0aW9uKGppKXtyZXR1cm4gZWkuaGFuZGxlRXZlbnQoamkpfSxSbi5vcmlnaW5hbERlbGVnYXRlPWVpKTt0cnl7Um4uaW52b2tlKFJuLER0LFtnaV0pfWNhdGNoKGppKXtVbj1qaX12YXIgWG49Um4ub3B0aW9ucztyZXR1cm4gWG4mJiJvYmplY3QiPT10eXBlb2YgWG4mJlhuLm9uY2UmJkR0W3FdLmNhbGwoRHQsZ2kudHlwZSxSbi5vcmlnaW5hbERlbGVnYXRlP1JuLm9yaWdpbmFsRGVsZWdhdGU6Um4uY2FsbGJhY2ssWG4pLFVufX07ZnVuY3Rpb24gVHQoUm4sRHQsZ2kpe2lmKER0PUR0fHxWLmV2ZW50KXt2YXIgZWk9Um58fER0LnRhcmdldHx8VixVbj1laVtBbltEdC50eXBlXVtnaT9jOnVdXTtpZihVbil7dmFyIFhuPVtdO2lmKDE9PT1Vbi5sZW5ndGgpKFZ0PWR0KFVuWzBdLGVpLER0KSkmJlhuLnB1c2goVnQpO2Vsc2UgZm9yKHZhciBqaT1Vbi5zbGljZSgpLHduPTA7d248amkubGVuZ3RoJiYoIUR0fHwhMCE9PUR0W0NlXSk7d24rKyl7dmFyIFZ0OyhWdD1kdChqaVt3bl0sZWksRHQpKSYmWG4ucHVzaChWdCl9aWYoMT09PVhuLmxlbmd0aCl0aHJvdyBYblswXTt2YXIgT249ZnVuY3Rpb24oX2kpe3ZhciBrbj1YbltfaV07dGUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBrbn0pfTtmb3Iod249MDt3bjxYbi5sZW5ndGg7d24rKylPbih3bil9fX12YXIgQXQ9ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCExKX0sY249ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCEwKX07ZnVuY3Rpb24gSmkoUm4sRHQpe2lmKCFSbilyZXR1cm4hMTt2YXIgZ2k9ITA7RHQmJnZvaWQgMCE9PUR0LnVzZUcmJihnaT1EdC51c2VHKTt2YXIgZWk9RHQmJkR0LnZoLFVuPSEwO0R0JiZ2b2lkIDAhPT1EdC5jaGtEdXAmJihVbj1EdC5jaGtEdXApO3ZhciBYbj0hMTtEdCYmdm9pZCAwIT09RHQucnQmJihYbj1EdC5ydCk7Zm9yKHZhciBWdD1SbjtWdCYmIVZ0Lmhhc093blByb3BlcnR5KEwpOylWdD1lKFZ0KTtpZighVnQmJlJuW0xdJiYoVnQ9Um4pLCFWdHx8VnRbVWVdKXJldHVybiExO3ZhciBkcixqaT1EdCYmRHQuZXZlbnROYW1lVG9TdHJpbmcsd249e30sT249VnRbVWVdPVZ0W0xdLF9pPVZ0W2YocSldPVZ0W3FdLGtuPVZ0W2YoWildPVZ0W1pdLGdyPVZ0W2YoY2UpXT1WdFtjZV07ZnVuY3Rpb24gcXMoS2UsWHQpe3JldHVybiFTdCYmIm9iamVjdCI9PXR5cGVvZiBLZSYmS2U/ISFLZS5jYXB0dXJlOlN0JiZYdD8iYm9vbGVhbiI9PXR5cGVvZiBLZT97Y2FwdHVyZTpLZSxwYXNzaXZlOiEwfTpLZT8ib2JqZWN0Ij09dHlwZW9mIEtlJiYhMSE9PUtlLnBhc3NpdmU/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEtlKSx7cGFzc2l2ZTohMH0pOktlOntwYXNzaXZlOiEwfTpLZX1EdCYmRHQucHJlcGVuZCYmKGRyPVZ0W2YoRHQucHJlcGVuZCldPVZ0W0R0LnByZXBlbmRdKTt2YXIgRGU9Z2k/ZnVuY3Rpb24oS2Upe2lmKCF3bi5pc0V4aXN0aW5nKXJldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsd24uY2FwdHVyZT9jbjpBdCx3bi5vcHRpb25zKX06ZnVuY3Rpb24oS2Upe3JldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbj1naT9mdW5jdGlvbihLZSl7aWYoIUtlLmlzUmVtb3ZlZCl7dmFyIFh0PUFuW0tlLmV2ZW50TmFtZV0sQm49dm9pZCAwO1h0JiYoQm49WHRbS2UuY2FwdHVyZT9jOnVdKTt2YXIgSW49Qm4mJktlLnRhcmdldFtCbl07aWYoSW4pZm9yKHZhciB0aT0wO3RpPEluLmxlbmd0aDt0aSsrKWlmKEluW3RpXT09PUtlKXtJbi5zcGxpY2UodGksMSksS2UuaXNSZW1vdmVkPSEwLDA9PT1Jbi5sZW5ndGgmJihLZS5hbGxSZW1vdmVkPSEwLEtlLnRhcmdldFtCbl09bnVsbCk7YnJlYWt9fWlmKEtlLmFsbFJlbW92ZWQpcmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5jYXB0dXJlP2NuOkF0LEtlLm9wdGlvbnMpfTpmdW5jdGlvbihLZSl7cmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5pbnZva2UsS2Uub3B0aW9ucyl9LEhsPUR0JiZEdC5kaWZmP0R0LmRpZmY6ZnVuY3Rpb24oS2UsWHQpe3ZhciBCbj10eXBlb2YgWHQ7cmV0dXJuImZ1bmN0aW9uIj09PUJuJiZLZS5jYWxsYmFjaz09PVh0fHwib2JqZWN0Ij09PUJuJiZLZS5vcmlnaW5hbERlbGVnYXRlPT09WHR9LGV0PVpvbmVbZigiVU5QQVRDSEVEX0VWRU5UUyIpXSxSdD1WW2YoIlBBU1NJVkVfRVZFTlRTIildLHd0PWZ1bmN0aW9uKEtlLFh0LEJuLEluLHRpLG5pKXtyZXR1cm4gdm9pZCAwPT09dGkmJih0aT0hMSksdm9pZCAwPT09bmkmJihuaT0hMSksZnVuY3Rpb24oKXt2YXIgc2k9dGhpc3x8VixDaT1hcmd1bWVudHNbMF07RHQmJkR0LnRyYW5zZmVyRXZlbnROYW1lJiYoQ2k9RHQudHJhbnNmZXJFdmVudE5hbWUoQ2kpKTt2YXIgeXI9YXJndW1lbnRzWzFdO2lmKCF5cilyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKFgmJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT1DaSlyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBRbz0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeXIpe2lmKCF5ci5oYW5kbGVFdmVudClyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO1FvPSEwfWlmKCFlaXx8ZWkoS2UseXIsc2ksYXJndW1lbnRzKSl7dmFyIHF1PVN0JiYhIVJ0JiYtMSE9PVJ0LmluZGV4T2YoQ2kpLHNvPXFzKGFyZ3VtZW50c1syXSxxdSk7aWYoZXQpZm9yKHZhciBSbz0wO1JvPGV0Lmxlbmd0aDtSbysrKWlmKENpPT09ZXRbUm9dKXJldHVybiBxdT9LZS5jYWxsKHNpLENpLHlyLHNvKTpLZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIFpyPSEhc28mJigiYm9vbGVhbiI9PXR5cGVvZiBzb3x8c28uY2FwdHVyZSksYWc9ISghc298fCJvYmplY3QiIT10eXBlb2Ygc28pJiZzby5vbmNlLEh1ZT1ab25lLmN1cnJlbnQsd089QW5bQ2ldO3dPfHwodnQoQ2ksamkpLHdPPUFuW0NpXSk7dmFyIHM4PXdPW1pyP2M6dV0sbGc9c2lbczhdLGE4PSExO2lmKGxnKXtpZihhOD0hMCxVbilmb3IoUm89MDtSbzxsZy5sZW5ndGg7Um8rKylpZihIbChsZ1tSb10seXIpKXJldHVybn1lbHNlIGxnPXNpW3M4XT1bXTt2YXIgaVMsbDg9c2kuY29uc3RydWN0b3IubmFtZSxjOD1FdFtsOF07YzgmJihpUz1jOFtDaV0pLGlTfHwoaVM9bDgrWHQrKGppP2ppKENpKTpDaSkpLHduLm9wdGlvbnM9c28sYWcmJih3bi5vcHRpb25zLm9uY2U9ITEpLHduLnRhcmdldD1zaSx3bi5jYXB0dXJlPVpyLHduLmV2ZW50TmFtZT1DaSx3bi5pc0V4aXN0aW5nPWE4O3ZhciBWeT1naT9SZTp2b2lkIDA7VnkmJihWeS50YXNrRGF0YT13bik7dmFyIFFkPUh1ZS5zY2hlZHVsZUV2ZW50VGFzayhpUyx5cixWeSxCbixJbik7aWYod24udGFyZ2V0PW51bGwsVnkmJihWeS50YXNrRGF0YT1udWxsKSxhZyYmKHNvLm9uY2U9ITApLCFTdCYmImJvb2xlYW4iPT10eXBlb2YgUWQub3B0aW9uc3x8KFFkLm9wdGlvbnM9c28pLFFkLnRhcmdldD1zaSxRZC5jYXB0dXJlPVpyLFFkLmV2ZW50TmFtZT1DaSxRbyYmKFFkLm9yaWdpbmFsRGVsZWdhdGU9eXIpLG5pP2xnLnVuc2hpZnQoUWQpOmxnLnB1c2goUWQpLHRpKXJldHVybiBzaX19fTtyZXR1cm4gVnRbTF09d3QoT24sJGUsRGUsRW4sWG4pLGRyJiYoVnQucHJlcGVuZExpc3RlbmVyPXd0KGRyLCIucHJlcGVuZExpc3RlbmVyOiIsZnVuY3Rpb24oS2Upe3JldHVybiBkci5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbixYbiwhMCkpLFZ0W3FdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7dmFyIEJuPWFyZ3VtZW50c1syXSxJbj0hIUJuJiYoImJvb2xlYW4iPT10eXBlb2YgQm58fEJuLmNhcHR1cmUpLHRpPWFyZ3VtZW50c1sxXTtpZighdGkpcmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighZWl8fGVpKF9pLHRpLEtlLGFyZ3VtZW50cykpe3ZhciBzaSxuaT1BbltYdF07bmkmJihzaT1uaVtJbj9jOnVdKTt2YXIgQ2k9c2kmJktlW3NpXTtpZihDaSlmb3IodmFyIHlyPTA7eXI8Q2kubGVuZ3RoO3lyKyspe3ZhciBRbz1DaVt5cl07aWYoSGwoUW8sdGkpKXtpZihDaS5zcGxpY2UoeXIsMSksUW8uaXNSZW1vdmVkPSEwLDA9PT1DaS5sZW5ndGgmJihRby5hbGxSZW1vdmVkPSEwLEtlW3NpXT1udWxsLCJzdHJpbmciPT10eXBlb2YgWHQpKXt2YXIgcXU9ZCsiT05fUFJPUEVSVFkiK1h0O0tlW3F1XT1udWxsfXJldHVybiBRby56b25lLmNhbmNlbFRhc2soUW8pLFhuP0tlOnZvaWQgMH19cmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFZ0W1pdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7Zm9yKHZhciBCbj1bXSxJbj1pZShLZSxqaT9qaShYdCk6WHQpLHRpPTA7dGk8SW4ubGVuZ3RoO3RpKyspe3ZhciBuaT1Jblt0aV0sc2k9bmkub3JpZ2luYWxEZWxlZ2F0ZT9uaS5vcmlnaW5hbERlbGVnYXRlOm5pLmNhbGxiYWNrO0JuLnB1c2goc2kpfXJldHVybiBCbn0sVnRbY2VdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO2lmKFh0KXtEdCYmRHQudHJhbnNmZXJFdmVudE5hbWUmJihYdD1EdC50cmFuc2ZlckV2ZW50TmFtZShYdCkpO3ZhciBDaT1BbltYdF07aWYoQ2kpe3ZhciB5cj1DaVt1XSxRbz1DaVtjXSxxdT1LZVt5cl0sc289S2VbUW9dO2lmKHF1KWZvcih2YXIgUm89cXUuc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXRoaXNbcV0uY2FsbCh0aGlzLFh0LChacj1Sb1tJbl0pLm9yaWdpbmFsRGVsZWdhdGU/WnIub3JpZ2luYWxEZWxlZ2F0ZTpaci5jYWxsYmFjayxaci5vcHRpb25zKTtpZihzbylmb3IoUm89c28uc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXt2YXIgWnI7dGhpc1txXS5jYWxsKHRoaXMsWHQsKFpyPVJvW0luXSkub3JpZ2luYWxEZWxlZ2F0ZT9aci5vcmlnaW5hbERlbGVnYXRlOlpyLmNhbGxiYWNrLFpyLm9wdGlvbnMpfX19ZWxzZXt2YXIgQm49T2JqZWN0LmtleXMoS2UpO2ZvcihJbj0wO0luPEJuLmxlbmd0aDtJbisrKXt2YXIgdGk9Qm5bSW5dLG5pPW9uLmV4ZWModGkpLHNpPW5pJiZuaVsxXTtzaSYmInJlbW92ZUxpc3RlbmVyIiE9PXNpJiZ0aGlzW2NlXS5jYWxsKHRoaXMsc2kpfXRoaXNbY2VdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihYbilyZXR1cm4gdGhpc30sbWUoVnRbTF0sT24pLG1lKFZ0W3FdLF9pKSxnciYmbWUoVnRbY2VdLGdyKSxrbiYmbWUoVnRbWl0sa24pLCEwfWZvcih2YXIgeGk9W10sbW49MDttbjxkZS5sZW5ndGg7bW4rKyl4aVttbl09SmkoZGVbbW5dLFMpO3JldHVybiB4aX1mdW5jdGlvbiBpZShWLHRlKXtpZighdGUpe3ZhciBkZT1bXTtmb3IodmFyIFMgaW4gVil7dmFyIEw9b24uZXhlYyhTKSxxPUwmJkxbMV07aWYocSYmKCF0ZXx8cT09PXRlKSl7dmFyIFo9VltTXTtpZihaKWZvcih2YXIgY2U9MDtjZTxaLmxlbmd0aDtjZSsrKWRlLnB1c2goWltjZV0pfX1yZXR1cm4gZGV9dmFyIFVlPUFuW3RlXTtVZXx8KHZ0KHRlKSxVZT1Bblt0ZV0pO3ZhciAkZT1WW1VlW3VdXSxXZT1WW1VlW2NdXTtyZXR1cm4gJGU/V2U/JGUuY29uY2F0KFdlKTokZS5zbGljZSgpOldlP1dlLnNsaWNlKCk6W119ZnVuY3Rpb24gY3QoVix0ZSl7dmFyIGRlPVYuRXZlbnQ7ZGUmJmRlLnByb3RvdHlwZSYmdGUucGF0Y2hNZXRob2QoZGUucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLGZ1bmN0aW9uKFMpe3JldHVybiBmdW5jdGlvbihMLHEpe0xbQ2VdPSEwLFMmJlMuYXBwbHkoTCxxKX19KX1mdW5jdGlvbiBZZShWLHRlLGRlLFMsTCl7dmFyIHE9Wm9uZS5fX3N5bWJvbF9fKFMpO2lmKCF0ZVtxXSl7dmFyIFo9dGVbcV09dGVbU107dGVbU109ZnVuY3Rpb24oY2UsVWUsJGUpe3JldHVybiBVZSYmVWUucHJvdG90eXBlJiZMLmZvckVhY2goZnVuY3Rpb24oV2Upe3ZhciBydD0iIi5jb25jYXQoZGUsIi4iKS5jb25jYXQoUywiOjoiKStXZSxkdD1VZS5wcm90b3R5cGU7dHJ5e2lmKGR0Lmhhc093blByb3BlcnR5KFdlKSl7dmFyIFR0PVYuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGR0LFdlKTtUdCYmVHQudmFsdWU/KFR0LnZhbHVlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShUdC52YWx1ZSxydCksVi5fcmVkZWZpbmVQcm9wZXJ0eShVZS5wcm90b3R5cGUsV2UsVHQpKTpkdFtXZV0mJihkdFtXZV09Vi53cmFwV2l0aEN1cnJlbnRab25lKGR0W1dlXSxydCkpfWVsc2UgZHRbV2VdJiYoZHRbV2VdPVYud3JhcFdpdGhDdXJyZW50Wm9uZShkdFtXZV0scnQpKX1jYXRjaHt9fSksWi5jYWxsKHRlLGNlLFVlLCRlKX0sVi5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQodGVbU10sWil9fWZ1bmN0aW9uIHh0KFYsdGUsZGUpe2lmKCFkZXx8MD09PWRlLmxlbmd0aClyZXR1cm4gdGU7dmFyIFM9ZGUuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLnRhcmdldD09PVZ9KTtpZighU3x8MD09PVMubGVuZ3RoKXJldHVybiB0ZTt2YXIgTD1TWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIHRlLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4tMT09PUwuaW5kZXhPZihxKX0pfWZ1bmN0aW9uIGh0KFYsdGUsZGUsUyl7ViYmbGUoVix4dChWLHRlLGRlKSxTKX1mdW5jdGlvbiBzbihWKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoVikuZmlsdGVyKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUuc3RhcnRzV2l0aCgib24iKSYmdGUubGVuZ3RoPjJ9KS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiB0ZS5zdWJzdHJpbmcoMil9KX1mdW5jdGlvbiBDdChWLHRlLGRlKXt2YXIgUz1kZS5jb25maWd1cmFibGU7cmV0dXJuIGduKFYsdGUsZGU9QmUoVix0ZSxkZSksUyl9ZnVuY3Rpb24gdG4oVix0ZSl7cmV0dXJuIFYmJlZbRl0mJlZbRl1bdGVdfWZ1bmN0aW9uIEJlKFYsdGUsZGUpe3JldHVybiBPYmplY3QuaXNGcm96ZW4oZGUpfHwoZGUuY29uZmlndXJhYmxlPSEwKSxkZS5jb25maWd1cmFibGV8fCghVltGXSYmIU9iamVjdC5pc0Zyb3plbihWKSYmVWkoVixGLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLFZbRl0mJihWW0ZdW3RlXT0hMCkpLGRlfWZ1bmN0aW9uIGduKFYsdGUsZGUsUyl7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChaKXtpZighZGUuY29uZmlndXJhYmxlKXRocm93IFo7dHlwZW9mIFM+InUiP2RlbGV0ZSBkZS5jb25maWd1cmFibGU6ZGUuY29uZmlndXJhYmxlPVM7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChjZSl7dmFyIEw9ITE7aWYoKCJjcmVhdGVkQ2FsbGJhY2siPT09dGV8fCJhdHRhY2hlZENhbGxiYWNrIj09PXRlfHwiZGV0YWNoZWRDYWxsYmFjayI9PT10ZXx8ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayI9PT10ZSkmJihMPSEwKSwhTCl0aHJvdyBjZTt2YXIgcT1udWxsO3RyeXtxPUpTT04uc3RyaW5naWZ5KGRlKX1jYXRjaHtxPWRlLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciLmNvbmNhdCh0ZSwiJyB3aXRoIGRlc2NyaXB0b3IgJyIpLmNvbmNhdChxLCInIG9uIG9iamVjdCAnIikuY29uY2F0KFYsIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiKS5jb25jYXQoY2UpKX19fVpvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1zbihWKTtkZS5wYXRjaE9uUHJvcGVydGllcz1sZSxkZS5wYXRjaE1ldGhvZD1KLGRlLmJpbmRBcmd1bWVudHM9SSxkZS5wYXRjaE1hY3JvVGFzaz1hZTt2YXIgTD10ZS5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIikscT10ZS5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7VltxXSYmKFZbTF09VltxXSksVltMXSYmKHRlW0xdPXRlW3FdPVZbTF0pLGRlLnBhdGNoRXZlbnRQcm90b3R5cGU9Y3QsZGUucGF0Y2hFdmVudFRhcmdldD1fdCxkZS5pc0lFT3JFZGdlPXV0LGRlLk9iamVjdERlZmluZVByb3BlcnR5PXQsZGUuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPW4sZGUuT2JqZWN0Q3JlYXRlPWksZGUuQXJyYXlTbGljZT1yLGRlLnBhdGNoQ2xhc3M9eWUsZGUud3JhcFdpdGhDdXJyZW50Wm9uZT1wLGRlLmZpbHRlclByb3BlcnRpZXM9eHQsZGUuYXR0YWNoT3JpZ2luVG9QYXRjaGVkPW1lLGRlLl9yZWRlZmluZVByb3BlcnR5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkZS5wYXRjaENhbGxiYWNrcz1ZZSxkZS5nZXRHbG9iYWxPYmplY3RzPWZ1bmN0aW9uKCl7cmV0dXJue2dsb2JhbFNvdXJjZXM6RXQsem9uZVN5bWJvbEV2ZW50TmFtZXM6QW4sZXZlbnROYW1lczpTLGlzQnJvd3Nlcjp4ZSxpc01peDpmZSxpc05vZGU6WCxUUlVFX1NUUjpjLEZBTFNFX1NUUjp1LFpPTkVfU1lNQk9MX1BSRUZJWDpkLEFERF9FVkVOVF9MSVNURU5FUl9TVFI6byxSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOnN9fX0pO3ZhciBWLG9zPU1wKE1wKE1wKE1wKE1wKE1wKE1wKE1wKFtdLFsiYWJvcnQiLCJhbmltYXRpb25jYW5jZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9yZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5nZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5kIiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIsImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJlIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwib3JpZW50YXRpb25jaGFuZ2UiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJkb3duIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcmxvY2tjaGFuZ2UiLCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIndlYmtpdHBvaW50ZXJsb2NrZXJjaGFuZ2UiLCJwb2ludGVybG9ja2Vycm9yIiwibW96cG9pbnRlcmxvY2tlcnJvciIsIndlYmtpdHBvaW50ZXJsb2NrZXJyb3IiLCJwb2ludGVybW92ZSIsInBvaW50b3V0IiwicG9pbnRlcm92ZXIiLCJwb2ludGVydXAiLCJwcm9ncmVzcyIsInJhdGVjaGFuZ2UiLCJyZXNldCIsInJlc2l6ZSIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzZWxlY3QiLCJzZWxlY3Rpb25jaGFuZ2UiLCJzZWxlY3RzdGFydCIsInNob3ciLCJzb3J0Iiwic3RhbGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1ldXBkYXRlIiwidm9sdW1lY2hhbmdlIiwidG91Y2hjYW5jZWwiLCJ0b3VjaG1vdmUiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiLCJ0cmFuc2l0aW9uY2FuY2VsIiwidHJhbnNpdGlvbmVuZCIsIndhaXRpbmciLCJ3aGVlbCJdLCEwKSxbIndlYmdsY29udGV4dHJlc3RvcmVkIiwid2ViZ2xjb250ZXh0bG9zdCIsIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiXSwhMCksWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLCEwKSxbInRvZ2dsZSJdLCEwKSxbImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlwdGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnJlZXplIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVlbmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIiwidmlzaWJpbGl0eWNoYW5nZSIsInJlc3VtZSJdLCEwKSxbImFic29sdXRlZGV2aWNlb3JpZW50YXRpb24iLCJhZnRlcmlucHV0IiwiYWZ0ZXJwcmludCIsImFwcGluc3RhbGxlZCIsImJlZm9yZWluc3RhbGxwcm9tcHQiLCJiZWZvcmVwcmludCIsImJlZm9yZXVubG9hZCIsImRldmljZWxpZ2h0IiwiZGV2aWNlbW90aW9uIiwiZGV2aWNlb3JpZW50YXRpb24iLCJkZXZpY2VvcmllbnRhdGlvbmFic29sdXRlIiwiZGV2aWNlcHJveGltaXR5IiwiaGFzaGNoYW5nZSIsImxhbmd1YWdlY2hhbmdlIiwibWVzc2FnZSIsIm1vemJlZm9yZXBhaW50Iiwib2ZmbGluZSIsIm9ubGluZSIsInBhaW50IiwicGFnZXNob3ciLCJwYWdlaGlkZSIsInBvcHN0YXRlIiwicmVqZWN0aW9uaGFuZGxlZCIsInN0b3JhZ2UiLCJ1bmhhbmRsZWRyZWplY3Rpb24iLCJ1bmxvYWQiLCJ1c2VycHJveGltaXR5IiwidnJkaXNwbGF5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLCEwKSxbImJlZm9yZWNvcHkiLCJiZWZvcmVjdXQiLCJiZWZvcmVwYXN0ZSIsImNvcHkiLCJjdXQiLCJwYXN0ZSIsImRyYWdzdGFydCIsImxvYWRlbmQiLCJhbmltYXRpb25zdGFydCIsInNlYXJjaCIsInRyYW5zaXRpb25ydW4iLCJ0cmFuc2l0aW9uc3RhcnQiLCJ3ZWJraXRhbmltYXRpb25lbmQiLCJ3ZWJraXRhbmltYXRpb25pdGVyYXRpb24iLCJ3ZWJraXRhbmltYXRpb25zdGFydCIsIndlYmtpdHRyYW5zaXRpb25lbmQiXSwhMCksWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSwhMCk7KFY9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSlbKCJsZWdhY3lQYXRjaCIsKFYuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iKSsibGVnYWN5UGF0Y2giKV09ZnVuY3Rpb24oKXt2YXIgUz1WLlpvbmU7Uy5fX2xvYWRfcGF0Y2goImRlZmluZVByb3BlcnR5IixmdW5jdGlvbihMLHEsWil7Wi5fcmVkZWZpbmVQcm9wZXJ0eT1DdCxvaT1ab25lLl9fc3ltYm9sX18sVWk9T2JqZWN0W29pKCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksemk9T2JqZWN0W29pKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixRPU9iamVjdC5jcmVhdGUsRj1vaSgidW5jb25maWd1cmFibGVzIiksT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKFYsdGUsZGUpe2lmKHRuKFYsdGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3RlKyInIG9mICIrVik7dmFyIFM9ZGUuY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09dGUmJihkZT1CZShWLHRlLGRlKSksZ24oVix0ZSxkZSxTKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24oVix0ZSl7T2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oWil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFYsWix0ZVtaXSl9KTtmb3IodmFyIGRlPTAsUz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRlKTtkZTxTLmxlbmd0aDtkZSsrKXt2YXIgTD1TW2RlXTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlLEwpPy5lbnVtZXJhYmxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVixMLHRlW0xdKX1yZXR1cm4gVn0sT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihWLHRlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRlJiYhT2JqZWN0LmlzRnJvemVuKHRlKSYmT2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oZGUpe3RlW2RlXT1CZShWLGRlLHRlW2RlXSl9KSxRKFYsdGUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT16aShWLHRlKTtyZXR1cm4gZGUmJnRuKFYsdGUpJiYoZGUuY29uZmlndXJhYmxlPSExKSxkZX19KSxTLl9fbG9hZF9wYXRjaCgicmVnaXN0ZXJFbGVtZW50IixmdW5jdGlvbihMLHEsWil7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYicmVnaXN0ZXJFbGVtZW50ImluIFYuZG9jdW1lbnQmJnRlLnBhdGNoQ2FsbGJhY2tzKHRlLGRvY3VtZW50LCJEb2N1bWVudCIsInJlZ2lzdGVyRWxlbWVudCIsWyJjcmVhdGVkQ2FsbGJhY2siLCJhdHRhY2hlZENhbGxiYWNrIiwiZGV0YWNoZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oTCxaKX0pLFMuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldExlZ2FjeSIsZnVuY3Rpb24oTCxxLFopeyhmdW5jdGlvbihWLHRlKXt2YXIgZGU9dGUuZ2V0R2xvYmFsT2JqZWN0cygpLFM9ZGUuZXZlbnROYW1lcyxMPWRlLmdsb2JhbFNvdXJjZXMscT1kZS56b25lU3ltYm9sRXZlbnROYW1lcyxaPWRlLlRSVUVfU1RSLGNlPWRlLkZBTFNFX1NUUixVZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsV2U9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLHJ0PSJFdmVudFRhcmdldCIsZHQ9W10sVHQ9Vi53dGYsQXQ9IkFuY2hvcixBcmVhLEF1ZGlvLEJSLEJhc2UsQmFzZUZvbnQsQm9keSxCdXR0b24sQ2FudmFzLENvbnRlbnQsRExpc3QsRGlyZWN0b3J5LERpdixFbWJlZCxGaWVsZFNldCxGb250LEZvcm0sRnJhbWUsRnJhbWVTZXQsSFIsSGVhZCxIZWFkaW5nLEh0bWwsSUZyYW1lLEltYWdlLElucHV0LEtleWdlbixMSSxMYWJlbCxMZWdlbmQsTGluayxNYXAsTWFycXVlZSxNZWRpYSxNZW51LE1ldGEsTWV0ZXIsTW9kLE9MaXN0LE9iamVjdCxPcHRHcm91cCxPcHRpb24sT3V0cHV0LFBhcmFncmFwaCxQcmUsUHJvZ3Jlc3MsUXVvdGUsU2NyaXB0LFNlbGVjdCxTb3VyY2UsU3BhbixTdHlsZSxUYWJsZUNhcHRpb24sVGFibGVDZWxsLFRhYmxlQ29sLFRhYmxlLFRhYmxlUm93LFRhYmxlU2VjdGlvbixUZXh0QXJlYSxUaXRsZSxUcmFjayxVTGlzdCxVbmtub3duLFZpZGVvIi5zcGxpdCgiLCIpO1R0P2R0PUF0Lm1hcChmdW5jdGlvbihEcil7cmV0dXJuIkhUTUwiK0RyKyJFbGVtZW50In0pLmNvbmNhdChXZSk6VltydF0/ZHQucHVzaChydCk6ZHQ9V2U7Zm9yKHZhciBjbj1WLl9fWm9uZV9kaXNhYmxlX0lFX2NoZWNrfHwhMSxKaT1WLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEseGk9dGUuaXNJRU9yRWRnZSgpLFJuPSJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iLER0PSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLGdpPXtNU1BvaW50ZXJDYW5jZWw6InBvaW50ZXJjYW5jZWwiLE1TUG9pbnRlckRvd246InBvaW50ZXJkb3duIixNU1BvaW50ZXJFbnRlcjoicG9pbnRlcmVudGVyIixNU1BvaW50ZXJIb3ZlcjoicG9pbnRlcmhvdmVyIixNU1BvaW50ZXJMZWF2ZToicG9pbnRlcmxlYXZlIixNU1BvaW50ZXJNb3ZlOiJwb2ludGVybW92ZSIsTVNQb2ludGVyT3V0OiJwb2ludGVyb3V0IixNU1BvaW50ZXJPdmVyOiJwb2ludGVyb3ZlciIsTVNQb2ludGVyVXA6InBvaW50ZXJ1cCJ9LGVpPTA7ZWk8Uy5sZW5ndGg7ZWkrKyl7dmFyIGppPVVlKygoVW49U1tlaV0pK2NlKSx3bj1VZSsoVW4rWik7cVtVbl09e30scVtVbl1bY2VdPWppLHFbVW5dW1pdPXdufWZvcihlaT0wO2VpPEF0Lmxlbmd0aDtlaSsrKWZvcih2YXIgT249QXRbZWldLF9pPUxbT25dPXt9LGtuPTA7a248Uy5sZW5ndGg7a24rKyl7dmFyIFVuO19pW1VuPVNba25dXT1PbisiLmFkZEV2ZW50TGlzdGVuZXI6IitVbn12YXIgZHI9W107Zm9yKGVpPTA7ZWk8ZHQubGVuZ3RoO2VpKyspe3ZhciBxcz1WW2R0W2VpXV07ZHIucHVzaChxcyYmcXMucHJvdG90eXBlKX10ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsZHIse3ZoOmZ1bmN0aW9uKERyLF9yLGJ0LF9lKXtpZighY24mJnhpKWlmKEppKXRyeXtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9Y2F0Y2h7cmV0dXJuIERyLmFwcGx5KGJ0LF9lKSwhMX1lbHNle3ZhciBiZTtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9ZWxzZSBpZihKaSl0cnl7X3IudG9TdHJpbmcoKX1jYXRjaHtyZXR1cm4gRHIuYXBwbHkoYnQsX2UpLCExfXJldHVybiEwfSx0cmFuc2ZlckV2ZW50TmFtZTpmdW5jdGlvbihEcil7cmV0dXJuIGdpW0RyXXx8RHJ9fSksWm9uZVt0ZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISFWW3J0XX0pKEwsWiksZnVuY3Rpb24oVix0ZSl7dmFyIGRlPVYuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKCghZGUuaXNOb2RlfHxkZS5pc01peCkmJiFmdW5jdGlvbihWLHRlKXt2YXIgZGU9Vi5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYhVi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJnR5cGVvZiBFbGVtZW50PCJ1Iil7dmFyIHE9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihxJiYhcS5jb25maWd1cmFibGUpcmV0dXJuITE7aWYocSl7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBjZT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLm9uY2xpY2s7cmV0dXJuIFYuT2JqZWN0RGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siLHEpLGNlfX12YXIgVWU9dGUuWE1MSHR0cFJlcXVlc3Q7aWYoIVVlKXJldHVybiExO3ZhciAkZT0ib25yZWFkeXN0YXRlY2hhbmdlIixXZT1VZS5wcm90b3R5cGUscnQ9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV2UsJGUpO2lmKHJ0KXJldHVybiBWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxjZT0hIShkdD1uZXcgVWUpLm9ucmVhZHlzdGF0ZWNoYW5nZSxWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHJ0fHx7fSksY2U7dmFyIFR0PVYuc3ltYm9sKCJmYWtlIik7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShXZSwkZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVHRdfSxzZXQ6ZnVuY3Rpb24oeGkpe3RoaXNbVHRdPXhpfX0pO3ZhciBkdCxBdD1mdW5jdGlvbigpe307cmV0dXJuKGR0PW5ldyBVZSkub25yZWFkeXN0YXRlY2hhbmdlPUF0LGNlPWR0W1R0XT09PUF0LGR0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGNlfShWLHRlKSl7dmFyIHE9dHlwZW9mIFdlYlNvY2tldDwidSI7KGZ1bmN0aW9uKFYpe2Zvcih2YXIgdGU9Vi5zeW1ib2woInVuYm91bmQiKSxkZT1mdW5jdGlvbihMKXt2YXIgcT1vc1tMXSxaPSJvbiIrcTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIocSxmdW5jdGlvbihjZSl7dmFyICRlLFdlLFVlPWNlLnRhcmdldDtmb3IoV2U9VWU/VWUuY29uc3RydWN0b3IubmFtZSsiLiIrWjoidW5rbm93bi4iK1o7VWU7KVVlW1pdJiYhVWVbWl1bdGVdJiYoKCRlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShVZVtaXSxXZSkpW3RlXT1VZVtaXSxVZVtaXT0kZSksVWU9VWUucGFyZW50RWxlbWVudH0sITApfSxTPTA7Uzxvcy5sZW5ndGg7UysrKWRlKFMpfSkoViksVi5wYXRjaENsYXNzKCJYTUxIdHRwUmVxdWVzdCIpLHEmJmZ1bmN0aW9uKFYsdGUpe3ZhciBkZT1WLmdldEdsb2JhbE9iamVjdHMoKSxTPWRlLkFERF9FVkVOVF9MSVNURU5FUl9TVFIsTD1kZS5SRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSLHE9dGUuV2ViU29ja2V0O3RlLkV2ZW50VGFyZ2V0fHxWLnBhdGNoRXZlbnRUYXJnZXQodGUsVixbcS5wcm90b3R5cGVdKSx0ZS5XZWJTb2NrZXQ9ZnVuY3Rpb24oVWUsJGUpe3ZhciBydCxkdCxXZT1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IHEoVWUsJGUpOm5ldyBxKFVlKSxUdD1WLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXZSwib25tZXNzYWdlIik7cmV0dXJuIFR0JiYhMT09PVR0LmNvbmZpZ3VyYWJsZT8ocnQ9Vi5PYmplY3RDcmVhdGUoV2UpLGR0PVdlLFtTLEwsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oQXQpe3J0W0F0XT1mdW5jdGlvbigpe3ZhciBjbj1WLkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKEF0PT09U3x8QXQ9PT1MKXt2YXIgSmk9Y24ubGVuZ3RoPjA/Y25bMF06dm9pZCAwO2lmKEppKXt2YXIgeGk9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrSmkpO1dlW3hpXT1ydFt4aV19fXJldHVybiBXZVtBdF0uYXBwbHkoV2UsY24pfX0pKTpydD1XZSxWLnBhdGNoT25Qcm9wZXJ0aWVzKHJ0LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0sZHQpLHJ0fTt2YXIgWj10ZS5XZWJTb2NrZXQ7Zm9yKHZhciBjZSBpbiBxKVpbY2VdPXFbY2VdfShWLHRlKSxab25lW1Yuc3ltYm9sKCJwYXRjaEV2ZW50cyIpXT0hMH19KFosTCl9KX07dmFyIFdzPWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gVmwoVix0ZSxkZSxTKXt2YXIgTD1udWxsLHE9bnVsbDtkZSs9Uzt2YXIgWj17fTtmdW5jdGlvbiBjZSgkZSl7dmFyIFdlPSRlLmRhdGE7cmV0dXJuIFdlLmFyZ3NbMF09ZnVuY3Rpb24oKXtyZXR1cm4gJGUuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sV2UuaGFuZGxlSWQ9TC5hcHBseShWLFdlLmFyZ3MpLCRlfWZ1bmN0aW9uIFVlKCRlKXtyZXR1cm4gcS5jYWxsKFYsJGUuZGF0YS5oYW5kbGVJZCl9TD1KKFYsdGUrPVMsZnVuY3Rpb24oJGUpe3JldHVybiBmdW5jdGlvbihXZSxydCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WzBdKXt2YXIgZHQ9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PVMsZGVsYXk6IlRpbWVvdXQiPT09U3x8IkludGVydmFsIj09PVM/cnRbMV18fDA6dm9pZCAwLGFyZ3M6cnR9LFR0PXJ0WzBdO3J0WzBdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBUdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtkdC5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBkdC5oYW5kbGVJZD9kZWxldGUgWltkdC5oYW5kbGVJZF06ZHQuaGFuZGxlSWQmJihkdC5oYW5kbGVJZFtXc109bnVsbCkpfX07dmFyIEF0PWgodGUscnRbMF0sZHQsY2UsVWUpO2lmKCFBdClyZXR1cm4gQXQ7dmFyIGNuPUF0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjbj9aW2NuXT1BdDpjbiYmKGNuW1dzXT1BdCksY24mJmNuLnJlZiYmY24udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi51bnJlZiYmKEF0LnJlZj1jbi5yZWYuYmluZChjbiksQXQudW5yZWY9Y24udW5yZWYuYmluZChjbikpLCJudW1iZXIiPT10eXBlb2YgY258fGNuP2NuOkF0fXJldHVybiAkZS5hcHBseShWLHJ0KX19KSxxPUooVixkZSxmdW5jdGlvbigkZSl7cmV0dXJuIGZ1bmN0aW9uKFdlLHJ0KXt2YXIgVHQsZHQ9cnRbMF07Im51bWJlciI9PXR5cGVvZiBkdD9UdD1aW2R0XTooVHQ9ZHQmJmR0W1dzXSl8fChUdD1kdCksVHQmJiJzdHJpbmciPT10eXBlb2YgVHQudHlwZT8ibm90U2NoZWR1bGVkIiE9PVR0LnN0YXRlJiYoVHQuY2FuY2VsRm4mJlR0LmRhdGEuaXNQZXJpb2RpY3x8MD09PVR0LnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgZHQ/ZGVsZXRlIFpbZHRdOmR0JiYoZHRbV3NdPW51bGwpLFR0LnpvbmUuY2FuY2VsVGFzayhUdCkpOiRlLmFwcGx5KFYscnQpfX0pfVpvbmUuX19sb2FkX3BhdGNoKCJsZWdhY3kiLGZ1bmN0aW9uKFYpe3ZhciB0ZT1WW1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07dGUmJnRlKCl9KSxab25lLl9fbG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLGZ1bmN0aW9uKFYsdGUsZGUpe2RlLnBhdGNoTWV0aG9kKFYsInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbihTKXtyZXR1cm4gZnVuY3Rpb24oTCxxKXt0ZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIscVswXSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihWKXt2YXIgZGU9ImNsZWFyIjtWbChWLCJzZXQiLGRlLCJUaW1lb3V0IiksVmwoViwic2V0IixkZSwiSW50ZXJ2YWwiKSxWbChWLCJzZXQiLGRlLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKFYpe1ZsKFYsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihWLHRlKXtmb3IodmFyIGRlPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sUz0wO1M8ZGUubGVuZ3RoO1MrKylKKFYsZGVbU10sZnVuY3Rpb24ocSxaLGNlKXtyZXR1cm4gZnVuY3Rpb24oVWUsJGUpe3JldHVybiB0ZS5jdXJyZW50LnJ1bihxLFYsJGUsY2UpfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihWLHRlLGRlKXsoZnVuY3Rpb24oVix0ZSl7dGUucGF0Y2hFdmVudFByb3RvdHlwZShWLHRlKX0pKFYsZGUpLGZ1bmN0aW9uKFYsdGUpe2lmKCFab25lW3RlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSl7Zm9yKHZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCksUz1kZS5ldmVudE5hbWVzLEw9ZGUuem9uZVN5bWJvbEV2ZW50TmFtZXMscT1kZS5UUlVFX1NUUixaPWRlLkZBTFNFX1NUUixjZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsVWU9MDtVZTxTLmxlbmd0aDtVZSsrKXt2YXIgJGU9U1tVZV0sZHQ9Y2UrKCRlK1opLFR0PWNlKygkZStxKTtMWyRlXT17fSxMWyRlXVtaXT1kdCxMWyRlXVtxXT1UdH12YXIgQXQ9Vi5FdmVudFRhcmdldDtBdCYmQXQucHJvdG90eXBlJiZ0ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsW0F0JiZBdC5wcm90b3R5cGVdKX19KFYsZGUpO3ZhciBTPVYuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtTJiZTLnByb3RvdHlwZSYmZGUucGF0Y2hFdmVudFRhcmdldChWLGRlLFtTLnByb3RvdHlwZV0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLGZ1bmN0aW9uKFYsdGUsZGUpe3llKCJNdXRhdGlvbk9ic2VydmVyIikseWUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe2lmKCghWHx8ZmUpJiYhWm9uZVtWLnN5bWJvbCgicGF0Y2hFdmVudHMiKV0pe3ZhciBkZT10ZS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXMsUz1bXTtpZih4ZSl7dmFyIEw9d2luZG93O1M9Uy5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1lbnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTt2YXIgcT1mdW5jdGlvbigpe3RyeXt2YXIgVj1DLm5hdmlnYXRvci51c2VyQWdlbnQ7aWYoLTEhPT1WLmluZGV4T2YoIk1TSUUgIil8fC0xIT09Vi5pbmRleE9mKCJUcmlkZW50LyIpKXJldHVybiEwfWNhdGNoe31yZXR1cm4hMX0oKT9be3RhcmdldDpMLGlnbm9yZVByb3BlcnRpZXM6WyJlcnJvciJdfV06W107aHQoTCxzbihMKSxkZSYmZGUuY29uY2F0KHEpLGUoTCkpfVM9Uy5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKyl7dmFyIGNlPXRlW1NbWl1dO2NlJiZjZS5wcm90b3R5cGUmJmh0KGNlLnByb3RvdHlwZSxzbihjZS5wcm90b3R5cGUpLGRlKX19fShkZSxWKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJjdXN0b21FbGVtZW50cyIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiZWLmN1c3RvbUVsZW1lbnRzJiYiY3VzdG9tRWxlbWVudHMiaW4gViYmdGUucGF0Y2hDYWxsYmFja3ModGUsVi5jdXN0b21FbGVtZW50cywiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLFsiY29ubmVjdGVkQ2FsbGJhY2siLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImFkb3B0ZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oVixkZSl9KSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIixmdW5jdGlvbihWLHRlKXshZnVuY3Rpb24oJGUpe3ZhciBXZT0kZS5YTUxIdHRwUmVxdWVzdDtpZihXZSl7dmFyIHJ0PVdlLnByb3RvdHlwZSxUdD1ydFthXSxBdD1ydFtsXTtpZighVHQpe3ZhciBjbj0kZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2lmKGNuKXt2YXIgSmk9Y24ucHJvdG90eXBlO1R0PUppW2FdLEF0PUppW2xdfX12YXIgeGk9InJlYWR5c3RhdGVjaGFuZ2UiLG1uPSJzY2hlZHVsZWQiLGVpPUoocnQsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtyZXR1cm4gT25bU109MD09X2lbMl0sT25bWl09X2lbMV0sZWkuYXBwbHkoT24sX2kpfX0pLFhuPWYoImZldGNoVGFza0Fib3J0aW5nIiksVnQ9ZigiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLGppPUoocnQsInNlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtpZighMD09PXRlLmN1cnJlbnRbVnRdfHxPbltTXSlyZXR1cm4gamkuYXBwbHkoT24sX2kpO3ZhciBrbj17dGFyZ2V0Ok9uLHVybDpPbltaXSxpc1BlcmlvZGljOiExLGFyZ3M6X2ksYWJvcnRlZDohMX0sZ3I9aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsRHQsa24sUm4sZ2kpO09uJiYhMD09PU9uW2NlXSYmIWtuLmFib3J0ZWQmJmdyLnN0YXRlPT09bW4mJmdyLmludm9rZSgpfX0pLHduPUoocnQsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPbixfaSl7dmFyIGtuPWZ1bmN0aW9uKE9uKXtyZXR1cm4gT25bZGVdfShPbik7aWYoa24mJiJzdHJpbmciPT10eXBlb2Yga24udHlwZSl7aWYobnVsbD09a24uY2FuY2VsRm58fGtuLmRhdGEmJmtuLmRhdGEuYWJvcnRlZClyZXR1cm47a24uem9uZS5jYW5jZWxUYXNrKGtuKX1lbHNlIGlmKCEwPT09dGUuY3VycmVudFtYbl0pcmV0dXJuIHduLmFwcGx5KE9uLF9pKX19KX1mdW5jdGlvbiBSbihPbil7dmFyIF9pPU9uLmRhdGEsa249X2kudGFyZ2V0O2tuW3FdPSExLGtuW2NlXT0hMTt2YXIgZ3I9a25bTF07VHR8fChUdD1rblthXSxBdD1rbltsXSksZ3ImJkF0LmNhbGwoa24seGksZ3IpO3ZhciBkcj1rbltMXT1mdW5jdGlvbigpe2lmKGtuLnJlYWR5U3RhdGU9PT1rbi5ET05FKWlmKCFfaS5hYm9ydGVkJiZrbltxXSYmT24uc3RhdGU9PT1tbil7dmFyIERyPWtuW3RlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtpZigwIT09a24uc3RhdHVzJiZEciYmRHIubGVuZ3RoPjApe3ZhciBfcj1Pbi5pbnZva2U7T24uaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBidD1rblt0ZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0sX2U9MDtfZTxidC5sZW5ndGg7X2UrKylidFtfZV09PT1PbiYmYnQuc3BsaWNlKF9lLDEpOyFfaS5hYm9ydGVkJiZPbi5zdGF0ZT09PW1uJiZfci5jYWxsKE9uKX0sRHIucHVzaChPbil9ZWxzZSBPbi5pbnZva2UoKX1lbHNlIV9pLmFib3J0ZWQmJiExPT09a25bcV0mJihrbltjZV09ITApfTtyZXR1cm4gVHQuY2FsbChrbix4aSxkciksa25bZGVdfHwoa25bZGVdPU9uKSxqaS5hcHBseShrbixfaS5hcmdzKSxrbltxXT0hMCxPbn1mdW5jdGlvbiBEdCgpe31mdW5jdGlvbiBnaShPbil7dmFyIF9pPU9uLmRhdGE7cmV0dXJuIF9pLmFib3J0ZWQ9ITAsd24uYXBwbHkoX2kudGFyZ2V0LF9pLmFyZ3MpfX0oVik7dmFyIGRlPWYoInhoclRhc2siKSxTPWYoInhoclN5bmMiKSxMPWYoInhockxpc3RlbmVyIikscT1mKCJ4aHJTY2hlZHVsZWQiKSxaPWYoInhoclVSTCIpLGNlPWYoInhockVycm9yQmVmb3JlU2NoZWR1bGVkIil9KSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLGZ1bmN0aW9uKFYpe1YubmF2aWdhdG9yJiZWLm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24oVix0ZSl7Zm9yKHZhciBkZT1WLmNvbnN0cnVjdG9yLm5hbWUsUz1mdW5jdGlvbihxKXt2YXIgJGUsV2UsWj10ZVtxXSxjZT1WW1pdO2lmKGNlKXtpZighTyhuKFYsWikpKXJldHVybiJjb250aW51ZSI7VltaXT0oV2U9ZnVuY3Rpb24oKXtyZXR1cm4gJGUuYXBwbHkodGhpcyxJKGFyZ3VtZW50cyxkZSsiLiIrWikpfSxtZShXZSwkZT1jZSksV2UpfX0sTD0wO0w8dGUubGVuZ3RoO0wrKylTKEwpfShWLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihWLHRlKXtmdW5jdGlvbiBkZShTKXtyZXR1cm4gZnVuY3Rpb24oTCl7aWUoVixTKS5mb3JFYWNoKGZ1bmN0aW9uKFope3ZhciBjZT1WLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihjZSl7dmFyIFVlPW5ldyBjZShTLHtwcm9taXNlOkwucHJvbWlzZSxyZWFzb246TC5yZWplY3Rpb259KTtaLmludm9rZShVZSl9fSl9fVYuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYodGVbZigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09ZGUoInVuaGFuZGxlZHJlamVjdGlvbiIpLHRlW2YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPWRlKCJyZWplY3Rpb25oYW5kbGVkIikpfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKG4pOm4oKX0pO2Z1bmN0aW9uIGJuKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIGNnKG4pe2xldCBlPW4oaT0+e0Vycm9yLmNhbGwoaSksaS5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfXZhciByUz1jZyhuPT5mdW5jdGlvbihlKXtuKHRoaXMpLHRoaXMubWVzc2FnZT1lP2Ake2UubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuJHtlLm1hcCgoaSxyKT0+YCR7cisxfSkgJHtpLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1lfSk7ZnVuY3Rpb24gQmgobix0KXtpZihuKXtsZXQgZT1uLmluZGV4T2YodCk7MDw9ZSYmbi5zcGxpY2UoZSwxKX19dmFyIHZuPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5pdGlhbFRlYXJkb3duPXQsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IHQ7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtsZXR7X3BhcmVudGFnZTplfT10aGlzO2lmKGUpaWYodGhpcy5fcGFyZW50YWdlPW51bGwsQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IG8gb2YgZSlvLnJlbW92ZSh0aGlzKTtlbHNlIGUucmVtb3ZlKHRoaXMpO2xldHtpbml0aWFsVGVhcmRvd246aX09dGhpcztpZihibihpKSl0cnl7aSgpfWNhdGNoKG8pe3Q9byBpbnN0YW5jZW9mIHJTP28uZXJyb3JzOltvXX1sZXR7X2ZpbmFsaXplcnM6cn09dGhpcztpZihyKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGxldCBvIG9mIHIpdHJ5e3A4KG8pfWNhdGNoKHMpe3Q9dD8/W10scyBpbnN0YW5jZW9mIHJTP3Q9Wy4uLnQsLi4ucy5lcnJvcnNdOnQucHVzaChzKX19aWYodCl0aHJvdyBuZXcgclModCl9fWFkZCh0KXt2YXIgZTtpZih0JiZ0IT09dGhpcylpZih0aGlzLmNsb3NlZClwOCh0KTtlbHNle2lmKHQgaW5zdGFuY2VvZiB2bil7aWYodC5jbG9zZWR8fHQuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47dC5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oZT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09ZT9lOltdKS5wdXNoKHQpfX1faGFzUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7cmV0dXJuIGU9PT10fHxBcnJheS5pc0FycmF5KGUpJiZlLmluY2x1ZGVzKHQpfV9hZGRQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpczt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShlKT8oZS5wdXNoKHQpLGUpOmU/W2UsdF06dH1fcmVtb3ZlUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7ZT09PXQ/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShlKSYmQmgoZSx0KX1yZW1vdmUodCl7bGV0e19maW5hbGl6ZXJzOmV9PXRoaXM7ZSYmQmgoZSx0KSx0IGluc3RhbmNlb2Ygdm4mJnQuX3JlbW92ZVBhcmVudCh0aGlzKX19O3ZuLkVNUFRZPSgoKT0+e2xldCBuPW5ldyB2bjtyZXR1cm4gbi5jbG9zZWQ9ITAsbn0pKCk7dmFyIEVPPXZuLkVNUFRZO2Z1bmN0aW9uIG9TKG4pe3JldHVybiBuIGluc3RhbmNlb2Ygdm58fG4mJiJjbG9zZWQiaW4gbiYmYm4obi5yZW1vdmUpJiZibihuLmFkZCkmJmJuKG4udW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHA4KG4pe2JuKG4pP24oKTpuLnVuc3Vic2NyaWJlKCl9dmFyIFVsPXtvblVuaGFuZGxlZEVycm9yOm51bGwsb25TdG9wcGVkTm90aWZpY2F0aW9uOm51bGwsUHJvbWlzZTp2b2lkIDAsdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzohMSx1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ITF9LHVnPXtzZXRUaW1lb3V0KG4sdCwuLi5lKXtsZXR7ZGVsZWdhdGU6aX09dWc7cmV0dXJuIGk/LnNldFRpbWVvdXQ/aS5zZXRUaW1lb3V0KG4sdCwuLi5lKTpzZXRUaW1lb3V0KG4sdCwuLi5lKX0sY2xlYXJUaW1lb3V0KG4pe2xldHtkZWxlZ2F0ZTp0fT11ZztyZXR1cm4odD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIHNTKG4pe3VnLnNldFRpbWVvdXQoKCk9PntsZXR7b25VbmhhbmRsZWRFcnJvcjp0fT1VbDtpZighdCl0aHJvdyBuO3Qobil9KX1mdW5jdGlvbiB6bCgpe312YXIgaDg9VE8oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIFRPKG4sdCxlKXtyZXR1cm57a2luZDpuLHZhbHVlOnQsZXJyb3I6ZX19dmFyIFZoPW51bGw7ZnVuY3Rpb24gZGcobil7aWYoVWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7bGV0IHQ9IVZoO2lmKHQmJihWaD17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLG4oKSx0KXtsZXR7ZXJyb3JUaHJvd246ZSxlcnJvcjppfT1WaDtpZihWaD1udWxsLGUpdGhyb3cgaX19ZWxzZSBuKCl9dmFyIEhoPWNsYXNzIGV4dGVuZHMgdm57Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSx0Pyh0aGlzLmRlc3RpbmF0aW9uPXQsb1ModCkmJnQuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPVF1ZX1zdGF0aWMgY3JlYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGpsKHQsZSxpKX1uZXh0KHQpe3RoaXMuaXNTdG9wcGVkP0FPKFRPKCJOIix0LHZvaWQgMCksdGhpcyk6dGhpcy5fbmV4dCh0KX1lcnJvcih0KXt0aGlzLmlzU3RvcHBlZD9BTyhUTygiRSIsdm9pZCAwLHQpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcih0KSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9BTyhoOCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dCh0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9X2Vycm9yKHQpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19LFl1ZT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZDtmdW5jdGlvbiBETyhuLHQpe3JldHVybiBZdWUuY2FsbChuLHQpfXZhciBqbD1jbGFzcyBleHRlbmRzIEhoe2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcjtpZihzdXBlcigpLGJuKHQpfHwhdClyPXtuZXh0OnQ/P3ZvaWQgMCxlcnJvcjplPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfTtlbHNle2xldCBvO3RoaXMmJlVsLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8obz1PYmplY3QuY3JlYXRlKHQpLG8udW5zdWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoKSxyPXtuZXh0OnQubmV4dCYmRE8odC5uZXh0LG8pLGVycm9yOnQuZXJyb3ImJkRPKHQuZXJyb3IsbyksY29tcGxldGU6dC5jb21wbGV0ZSYmRE8odC5jb21wbGV0ZSxvKX0pOnI9dH10aGlzLmRlc3RpbmF0aW9uPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBhcnRpYWxPYnNlcnZlcj10fW5leHQodCl7bGV0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUubmV4dCl0cnl7ZS5uZXh0KHQpfWNhdGNoKGkpe2FTKGkpfX1lcnJvcih0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5lcnJvcil0cnl7ZS5lcnJvcih0KX1jYXRjaChpKXthUyhpKX1lbHNlIGFTKHQpfWNvbXBsZXRlKCl7bGV0e3BhcnRpYWxPYnNlcnZlcjp0fT10aGlzO2lmKHQuY29tcGxldGUpdHJ5e3QuY29tcGxldGUoKX1jYXRjaChlKXthUyhlKX19fShyKX19O2Z1bmN0aW9uIGFTKG4pe1VsLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24obil7VWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmVmgmJihWaC5lcnJvclRocm93bj0hMCxWaC5lcnJvcj1uKX0obik6c1Mobil9ZnVuY3Rpb24gQU8obix0KXtsZXR7b25TdG9wcGVkTm90aWZpY2F0aW9uOmV9PVVsO2UmJnVnLnNldFRpbWVvdXQoKCk9PmUobix0KSl9dmFyIFF1ZT17Y2xvc2VkOiEwLG5leHQ6emwsZXJyb3I6ZnVuY3Rpb24obil7dGhyb3cgbn0sY29tcGxldGU6emx9LHBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBNcyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBSTyhuKXtyZXR1cm4gMD09PW4ubGVuZ3RoP01zOjE9PT1uLmxlbmd0aD9uWzBdOmZ1bmN0aW9uKGUpe3JldHVybiBuLnJlZHVjZSgoaSxyKT0+cihpKSxlKX19dmFyIFF0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZSYmKHRoaXMuX3N1YnNjcmliZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfXN1YnNjcmliZShlLGkscil7bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4gaW5zdGFuY2VvZiBIaHx8ZnVuY3Rpb24obil7cmV0dXJuIG4mJmJuKG4ubmV4dCkmJmJuKG4uZXJyb3IpJiZibihuLmNvbXBsZXRlKX0obikmJm9TKG4pfShlKT9lOm5ldyBqbChlLGkscik7cmV0dXJuIGRnKCgpPT57bGV0e29wZXJhdG9yOnMsc291cmNlOmF9PXRoaXM7by5hZGQocz9zLmNhbGwobyxhKTphP3RoaXMuX3N1YnNjcmliZShvKTp0aGlzLl90cnlTdWJzY3JpYmUobykpfSksb31fdHJ5U3Vic2NyaWJlKGUpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGUpfWNhdGNoKGkpe2UuZXJyb3IoaSl9fWZvckVhY2goZSxpKXtyZXR1cm4gbmV3KGk9XzgoaSkpKChyLG8pPT57bGV0IHM9bmV3IGpsKHtuZXh0OmE9Pnt0cnl7ZShhKX1jYXRjaChsKXtvKGwpLHMudW5zdWJzY3JpYmUoKX19LGVycm9yOm8sY29tcGxldGU6cn0pO3RoaXMuc3Vic2NyaWJlKHMpfSl9X3N1YnNjcmliZShlKXt2YXIgaTtyZXR1cm4gbnVsbD09PShpPXRoaXMuc291cmNlKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdWJzY3JpYmUoZSl9W3BnXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uZSl7cmV0dXJuIFJPKGUpKHRoaXMpfXRvUHJvbWlzZShlKXtyZXR1cm4gbmV3KGU9XzgoZSkpKChpLHIpPT57bGV0IG87dGhpcy5zdWJzY3JpYmUocz0+bz1zLHM9PnIocyksKCk9PmkobykpfSl9fXJldHVybiBuLmNyZWF0ZT10PT5uZXcgbih0KSxufSkoKTtmdW5jdGlvbiBfOChuKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PW4/P1VsLlByb21pc2UpJiZ2b2lkIDAhPT10P3Q6UHJvbWlzZX1mdW5jdGlvbiBPTyhuKXtyZXR1cm4gYm4obj8ubGlmdCl9ZnVuY3Rpb24gcXQobil7cmV0dXJuIHQ9PntpZihPTyh0KSlyZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gbihlLHRoaXMpfWNhdGNoKGkpe3RoaXMuZXJyb3IoaSl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTHQobix0LGUsaSxyKXtyZXR1cm4gbmV3IEh5KG4sdCxlLGkscil9dmFyIGtPLEh5PWNsYXNzIGV4dGVuZHMgSGh7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQpLHRoaXMub25GaW5hbGl6ZT1vLHRoaXMuc2hvdWxkVW5zdWJzY3JpYmU9cyx0aGlzLl9uZXh0PWU/ZnVuY3Rpb24oYSl7dHJ5e2UoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX19OnN1cGVyLl9uZXh0LHRoaXMuX2Vycm9yPXI/ZnVuY3Rpb24oYSl7dHJ5e3IoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9lcnJvcix0aGlzLl9jb21wbGV0ZT1pP2Z1bmN0aW9uKCl7dHJ5e2koKX1jYXRjaChhKXt0LmVycm9yKGEpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2NvbXBsZXRlfXVuc3Vic2NyaWJlKCl7dmFyIHQ7aWYoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmV8fHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSl7bGV0e2Nsb3NlZDplfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJlKCksIWUmJihudWxsPT09KHQ9dGhpcy5vbkZpbmFsaXplKXx8dm9pZCAwPT09dHx8dC5jYWxsKHRoaXMpKX19fSxVeT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnNvdXJjZT10LHRoaXMuc3ViamVjdEZhY3Rvcnk9ZSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsT08odCkmJih0aGlzLmxpZnQ9dC5saWZ0KX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9Z2V0U3ViamVjdCgpe2xldCB0PXRoaXMuX3N1YmplY3Q7cmV0dXJuKCF0fHx0LmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2xldHtfY29ubmVjdGlvbjp0fT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLHQ/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nvbm5lY3Rpb247aWYoIXQpe3Q9dGhpcy5fY29ubmVjdGlvbj1uZXcgdm47bGV0IGU9dGhpcy5nZXRTdWJqZWN0KCk7dC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxlLmNvbXBsZXRlKCl9LGk9Pnt0aGlzLl90ZWFyZG93bigpLGUuZXJyb3IoaSl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLHQuY2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9dm4uRU1QVFkpfXJldHVybiB0fXJlZkNvdW50KCl7cmV0dXJuIHF0KChuLHQpPT57bGV0IGU9bnVsbDtuLl9yZWZDb3VudCsrO2xldCBpPUx0KHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKCk9PntpZighbnx8bi5fcmVmQ291bnQ8PTB8fDA8LS1uLl9yZWZDb3VudClyZXR1cm4gdm9pZChlPW51bGwpO2xldCByPW4uX2Nvbm5lY3Rpb24sbz1lO2U9bnVsbCxyJiYoIW98fHI9PT1vKSYmci51bnN1YnNjcmliZSgpLHQudW5zdWJzY3JpYmUoKX0pO24uc3Vic2NyaWJlKGkpLGkuY2xvc2VkfHwoZT1uLmNvbm5lY3QoKSl9KSh0aGlzKX19LGhnPXtzY2hlZHVsZShuKXtsZXQgdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1jYW5jZWxBbmltYXRpb25GcmFtZSx7ZGVsZWdhdGU6aX09aGc7aSYmKHQ9aS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1pLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtsZXQgcj10KG89PntlPXZvaWQgMCxuKG8pfSk7cmV0dXJuIG5ldyB2bigoKT0+ZT8uKHIpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1oZztyZXR1cm4odD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09aGc7cmV0dXJuKHQ/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4ubil9LGRlbGVnYXRlOnZvaWQgMH0seTg9Y2cobj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9KSxUZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoZSl7bGV0IGk9bmV3IGxTKHRoaXMsdGhpcyk7cmV0dXJuIGkub3BlcmF0b3I9ZSxpfV90aHJvd0lmQ2xvc2VkKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHk4fW5leHQoZSl7ZGcoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmN1cnJlbnRPYnNlcnZlcnN8fCh0aGlzLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVycykpO2ZvcihsZXQgaSBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpaS5uZXh0KGUpfX0pfWVycm9yKGUpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93bkVycm9yPWU7bGV0e29ic2VydmVyczppfT10aGlzO2Zvcig7aS5sZW5ndGg7KWkuc2hpZnQoKS5lcnJvcihlKX19KX1jb21wbGV0ZSgpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7bGV0e29ic2VydmVyczplfT10aGlzO2Zvcig7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jb21wbGV0ZSgpfX0pfXVuc3Vic2NyaWJlKCl7dGhpcy5pc1N0b3BwZWQ9dGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGx9Z2V0IG9ic2VydmVkKCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT10aGlzLm9ic2VydmVycyl8fHZvaWQgMD09PWU/dm9pZCAwOmUubGVuZ3RoKT4wfV90cnlTdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxzdXBlci5fdHJ5U3Vic2NyaWJlKGUpfV9zdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpfV9pbm5lclN1YnNjcmliZShlKXtsZXR7aGFzRXJyb3I6aSxpc1N0b3BwZWQ6cixvYnNlcnZlcnM6b309dGhpcztyZXR1cm4gaXx8cj9FTzoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsby5wdXNoKGUpLG5ldyB2bigoKT0+e3RoaXMuY3VycmVudE9ic2VydmVycz1udWxsLEJoKG8sZSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSl7bGV0e2hhc0Vycm9yOmksdGhyb3duRXJyb3I6cixpc1N0b3BwZWQ6b309dGhpcztpP2UuZXJyb3Iocik6byYmZS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2xldCBlPW5ldyBRdDtyZXR1cm4gZS5zb3VyY2U9dGhpcyxlfX1yZXR1cm4gbi5jcmVhdGU9KHQsZSk9Pm5ldyBsUyh0LGUpLG59KSgpLGxTPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZGVzdGluYXRpb249dCx0aGlzLnNvdXJjZT1lfW5leHQodCl7dmFyIGUsaTtudWxsPT09KGk9bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm5leHQpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1lcnJvcih0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1jb21wbGV0ZSgpe3ZhciB0LGU7bnVsbD09PShlPW51bGw9PT0odD10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbCh0KX1fc3Vic2NyaWJlKHQpe3ZhciBlLGk7cmV0dXJuIG51bGwhPT0oaT1udWxsPT09KGU9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN1YnNjcmliZSh0KSkmJnZvaWQgMCE9PWk/aTpFT319LFZyPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl92YWx1ZT10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZSh0KXtsZXQgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiFlLmNsb3NlZCYmdC5uZXh0KHRoaXMuX3ZhbHVlKSxlfWdldFZhbHVlKCl7bGV0e2hhc0Vycm9yOnQsdGhyb3duRXJyb3I6ZSxfdmFsdWU6aX09dGhpcztpZih0KXRocm93IGU7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxpfW5leHQodCl7c3VwZXIubmV4dCh0aGlzLl92YWx1ZT10KX19LHp5PXtub3c6KCk9Pih6eS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfSxVaD1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9MS8wLGU9MS8wLGk9enkpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT10LHRoaXMuX3dpbmRvd1RpbWU9ZSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1pLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5maW5pdGVUaW1lV2luZG93PWU9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLHQpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxlKX1uZXh0KHQpe2xldHtpc1N0b3BwZWQ6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyLF90aW1lc3RhbXBQcm92aWRlcjpvLF93aW5kb3dUaW1lOnN9PXRoaXM7ZXx8KGkucHVzaCh0KSwhciYmaS5wdXNoKG8ubm93KCkrcykpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KHQpfV9zdWJzY3JpYmUodCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtsZXQgZT10aGlzLl9pbm5lclN1YnNjcmliZSh0KSx7X2luZmluaXRlVGltZVdpbmRvdzppLF9idWZmZXI6cn09dGhpcyxvPXIuc2xpY2UoKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoJiYhdC5jbG9zZWQ7cys9aT8xOjIpdC5uZXh0KG9bc10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHQpLGV9X3RyaW1CdWZmZXIoKXtsZXR7X2J1ZmZlclNpemU6dCxfdGltZXN0YW1wUHJvdmlkZXI6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyfT10aGlzLG89KHI/MToyKSp0O2lmKHQ8MS8wJiZvPGkubGVuZ3RoJiZpLnNwbGljZSgwLGkubGVuZ3RoLW8pLCFyKXtsZXQgcz1lLm5vdygpLGE9MDtmb3IobGV0IGw9MTtsPGkubGVuZ3RoJiZpW2xdPD1zO2wrPTIpYT1sO2EmJmkuc3BsaWNlKDAsYSsxKX19fSxjUz1jbGFzcyBleHRlbmRzIHZue2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKX1zY2hlZHVsZSh0LGU9MCl7cmV0dXJuIHRoaXN9fSxqeT17c2V0SW50ZXJ2YWwobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1qeTtyZXR1cm4gaT8uc2V0SW50ZXJ2YWw/aS5zZXRJbnRlcnZhbChuLHQsLi4uZSk6c2V0SW50ZXJ2YWwobix0LC4uLmUpfSxjbGVhckludGVydmFsKG4pe2xldHtkZWxlZ2F0ZTp0fT1qeTtyZXR1cm4odD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkobil9LGRlbGVnYXRlOnZvaWQgMH0sQmM9Y2xhc3MgZXh0ZW5kcyBjU3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUodCxlPTApe3ZhciBpO2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDtsZXQgcj10aGlzLmlkLG89dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPXImJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQobyxyLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9bnVsbCE9PShpPXRoaXMuaWQpJiZ2b2lkIDAhPT1pP2k6dGhpcy5yZXF1ZXN0QXN5bmNJZChvLHRoaXMuaWQsZSksdGhpc31yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gankuc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksaSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7aWYobnVsbCE9aSYmdGhpcy5kZWxheT09PWkmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO251bGwhPWUmJmp5LmNsZWFySW50ZXJ2YWwoZSl9ZXhlY3V0ZSh0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7bGV0IGk9dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKGkpcmV0dXJuIGk7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4ZWN1dGUodCxlKXtsZXQgcixpPSExO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2gobyl7aT0hMCxyPW98fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKGkpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xvc2VkKXtsZXR7aWQ6dCxzY2hlZHVsZXI6ZX09dGhpcyx7YWN0aW9uczppfT1lO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLEJoKGksdGhpcyksbnVsbCE9dCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChlLHQsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19LEp1ZT0xLEZPPXt9O2Z1bmN0aW9uIGI4KG4pe3JldHVybiBuIGluIEZPJiYoZGVsZXRlIEZPW25dLCEwKX12YXIgeDg9e3NldEltbWVkaWF0ZShuKXtsZXQgdD1KdWUrKztyZXR1cm4gRk9bdF09ITAsa098fChrTz1Qcm9taXNlLnJlc29sdmUoKSksa08udGhlbigoKT0+YjgodCkmJm4oKSksdH0sY2xlYXJJbW1lZGlhdGUobil7Yjgobil9fSx7c2V0SW1tZWRpYXRlOiR1ZSxjbGVhckltbWVkaWF0ZTplZGV9PXg4LEd5PXtzZXRJbW1lZGlhdGUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PUd5O3JldHVybih0Py5zZXRJbW1lZGlhdGV8fCR1ZSkoLi4ubil9LGNsZWFySW1tZWRpYXRlKG4pe2xldHtkZWxlZ2F0ZTp0fT1HeTtyZXR1cm4odD8uY2xlYXJJbW1lZGlhdGV8fGVkZSkobil9LGRlbGVnYXRlOnZvaWQgMH0sS2Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlPUtkLm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yPXQsdGhpcy5ub3c9ZX1zY2hlZHVsZSh0LGU9MCxpKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLHQpLnNjaGVkdWxlKGksZSl9fTtLZC5ub3c9enkubm93O3ZhciBWYz1jbGFzcyBleHRlbmRzIEtke2NvbnN0cnVjdG9yKHQsZT1LZC5ub3cpe3N1cGVyKHQsZSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaCh0KXtsZXQgaSx7YWN0aW9uczplfT10aGlzO2lmKHRoaXMuX2FjdGl2ZSllLnB1c2godCk7ZWxzZXt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoaT10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGkpe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBpfX19fSxmZz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1HeS5zZXRJbW1lZGlhdGUodC5mbHVzaC5iaW5kKHQsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKEd5LmNsZWFySW1tZWRpYXRlKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLFl1PW5ldyBWYyhCYyksQzg9WXUsTk89bmV3IGNsYXNzIGV4dGVuZHMgVmN7fShjbGFzcyBleHRlbmRzIEJje2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gZT4wP3N1cGVyLnNjaGVkdWxlKHQsZSk6KHRoaXMuZGVsYXk9ZSx0aGlzLnN0YXRlPXQsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9ZXhlY3V0ZSh0LGUpe3JldHVybiBlPjB8fHRoaXMuY2xvc2VkP3N1cGVyLmV4ZWN1dGUodCxlKTp0aGlzLl9leGVjdXRlKHQsZSl9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPWkmJmk+MHx8bnVsbD09aSYmdGhpcy5kZWxheT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5mbHVzaCh0aGlzKSwwKX19KSxMTz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1oZy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnQuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKGhnLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLGFvPW5ldyBRdChuPT5uLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIGdTKG4pe3JldHVybiBuJiZibihuLnNjaGVkdWxlKX1mdW5jdGlvbiBCTyhuKXtyZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBIYyhuKXtyZXR1cm4gYm4oQk8obikpP24ucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIFVjKG4pe3JldHVybiBnUyhCTyhuKSk/bi5wb3AoKTp2b2lkIDB9dmFyIHE4PWQ4KFc4KCksMSkse19fZGVjb3JhdGU6WTgsX19hd2FpdGVyOlg4LF9fYXdhaXQ6YlMsX19hc3luY0dlbmVyYXRvcjpROCxfX2FzeW5jVmFsdWVzOks4fT1xOC5kZWZhdWx0LGdnPW49Pm4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiBuO2Z1bmN0aW9uIHhTKG4pe3JldHVybiBibihuPy50aGVuKX1mdW5jdGlvbiBDUyhuKXtyZXR1cm4gYm4obltwZ10pfWZ1bmN0aW9uIHdTKG4pe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmYm4obj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9ZnVuY3Rpb24gTVMobil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7bn0nYH0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX12YXIgU1M9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciI7ZnVuY3Rpb24gRVMobil7cmV0dXJuIGJuKG4/LltTU10pfWZ1bmN0aW9uIFRTKG4pe3JldHVybiBROCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgZT1uLmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2xldHt2YWx1ZTppLGRvbmU6cn09eWllbGQgYlMoZS5yZWFkKCkpO2lmKHIpcmV0dXJuIHlpZWxkIGJTKHZvaWQgMCk7eWllbGQgeWllbGQgYlMoaSl9fWZpbmFsbHl7ZS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIERTKG4pe3JldHVybiBibihuPy5nZXRSZWFkZXIpfWZ1bmN0aW9uIGFpKG4pe2lmKG4gaW5zdGFuY2VvZiBRdClyZXR1cm4gbjtpZihudWxsIT1uKXtpZihDUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bGV0IGU9bltwZ10oKTtpZihibihlLnN1YnNjcmliZSkpcmV0dXJuIGUuc3Vic2NyaWJlKHQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0obik7aWYoZ2cobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUXQodD0+e2ZvcihsZXQgZT0wO2U8bi5sZW5ndGgmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0pO3QuY29tcGxldGUoKX0pfShuKTtpZih4UyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bi50aGVuKGU9Pnt0LmNsb3NlZHx8KHQubmV4dChlKSx0LmNvbXBsZXRlKCkpfSxlPT50LmVycm9yKGUpKS50aGVuKG51bGwsc1MpfSl9KG4pO2lmKHdTKG4pKXJldHVybiBaOChuKTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57Zm9yKGxldCBlIG9mIG4paWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KX0obik7aWYoRFMobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBaOChUUyhuKSl9KG4pfXRocm93IE1TKG4pfWZ1bmN0aW9uIFo4KG4pe3JldHVybiBuZXcgUXQodD0+eyhmdW5jdGlvbihuLHQpe3ZhciBlLGkscixvO3JldHVybiBYOCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dHJ5e2ZvcihlPUs4KG4pOyEoaT15aWVsZCBlLm5leHQoKSkuZG9uZTspaWYodC5uZXh0KGkudmFsdWUpLHQuY2xvc2VkKXJldHVybn1jYXRjaChzKXtyPXtlcnJvcjpzfX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobz1lLnJldHVybikmJih5aWVsZCBvLmNhbGwoZSkpfWZpbmFsbHl7aWYocil0aHJvdyByLmVycm9yfX10LmNvbXBsZXRlKCl9KX0pKG4sdCkuY2F0Y2goZT0+dC5lcnJvcihlKSl9KX1mdW5jdGlvbiBZcyhuLHQsZSxpPTAscj0hMSl7bGV0IG89dC5zY2hlZHVsZShmdW5jdGlvbigpe2UoKSxyP24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxpKSk6dGhpcy51bnN1YnNjcmliZSgpfSxpKTtpZihuLmFkZChvKSwhcilyZXR1cm4gb31mdW5jdGlvbiB6aChuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57ZS5zdWJzY3JpYmUoTHQoaSxyPT5ZcyhpLG4sKCk9PmkubmV4dChyKSx0KSwoKT0+WXMoaSxuLCgpPT5pLmNvbXBsZXRlKCksdCkscj0+WXMoaSxuLCgpPT5pLmVycm9yKHIpLHQpKSl9KX1mdW5jdGlvbiBBUyhuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57aS5hZGQobi5zY2hlZHVsZSgoKT0+ZS5zdWJzY3JpYmUoaSksdCkpfSl9ZnVuY3Rpb24gSVMobix0KXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBRdChlPT57WXMoZSx0LCgpPT57bGV0IGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtZcyhlLHQsKCk9PntpLm5leHQoKS50aGVuKHI9PntyLmRvbmU/ZS5jb21wbGV0ZSgpOmUubmV4dChyLnZhbHVlKX0pfSwwLCEwKX0pfSl9ZnVuY3Rpb24gbG8obix0KXtyZXR1cm4gdD9mdW5jdGlvbihuLHQpe2lmKG51bGwhPW4pe2lmKENTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZihnZyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaT0wO3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7aT09PW4ubGVuZ3RoP2UuY29tcGxldGUoKTooZS5uZXh0KG5baSsrXSksZS5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KX0pfShuLHQpO2lmKHhTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZih3UyhuKSlyZXR1cm4gSVMobix0KTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaTtyZXR1cm4gWXMoZSx0LCgpPT57aT1uW1NTXSgpLFlzKGUsdCwoKT0+e2xldCByLG87dHJ5eyh7dmFsdWU6cixkb25lOm99PWkubmV4dCgpKX1jYXRjaChzKXtyZXR1cm4gdm9pZCBlLmVycm9yKHMpfW8/ZS5jb21wbGV0ZSgpOmUubmV4dChyKX0sMCwhMCl9KSwoKT0+Ym4oaT8ucmV0dXJuKSYmaS5yZXR1cm4oKX0pfShuLHQpO2lmKERTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBJUyhUUyhuKSx0KX0obix0KX10aHJvdyBNUyhuKX0obix0KTphaShuKX1mdW5jdGlvbiBqdCguLi5uKXtyZXR1cm4gbG8obixVYyhuKSl9ZnVuY3Rpb24gR2wobix0KXtsZXQgZT1ibihuKT9uOigpPT5uLGk9cj0+ci5lcnJvcihlKCkpO3JldHVybiBuZXcgUXQodD9yPT50LnNjaGVkdWxlKGksMCxyKTppKX12YXIgdGw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPWksdGhpcy5oYXNWYWx1ZT0iTiI9PT10fW9ic2VydmUodCl7cmV0dXJuIEhPKHRoaXMsdCl9ZG8odCxlLGkpe2xldHtraW5kOnIsdmFsdWU6byxlcnJvcjpzfT10aGlzO3JldHVybiJOIj09PXI/dD8uKG8pOiJFIj09PXI/ZT8uKHMpOmk/LigpfWFjY2VwdCh0LGUsaSl7dmFyIHI7cmV0dXJuIGJuKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5uZXh0KT90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsaSl9dG9PYnNlcnZhYmxlKCl7bGV0e2tpbmQ6dCx2YWx1ZTplLGVycm9yOml9PXRoaXMscj0iTiI9PT10P2p0KGUpOiJFIj09PXQ/R2woKCk9PmkpOiJDIj09PXQ/YW86MDtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICR7dH1gKTtyZXR1cm4gcn1zdGF0aWMgY3JlYXRlTmV4dCh0KXtyZXR1cm4gbmV3IHRsKCJOIix0KX1zdGF0aWMgY3JlYXRlRXJyb3IodCl7cmV0dXJuIG5ldyB0bCgiRSIsdm9pZCAwLHQpfXN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpe3JldHVybiB0bC5jb21wbGV0ZU5vdGlmaWNhdGlvbn19O2Z1bmN0aW9uIEhPKG4sdCl7dmFyIGUsaSxyO2xldHtraW5kOm8sdmFsdWU6cyxlcnJvcjphfT1uO2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyAia2luZCInKTsiTiI9PT1vP251bGw9PT0oZT10Lm5leHQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodCxzKToiRSI9PT1vP251bGw9PT0oaT10LmVycm9yKXx8dm9pZCAwPT09aXx8aS5jYWxsKHQsYSk6bnVsbD09PShyPXQuY29tcGxldGUpfHx2b2lkIDA9PT1yfHxyLmNhbGwodCl9ZnVuY3Rpb24gV3kobil7cmV0dXJuISFuJiYobiBpbnN0YW5jZW9mIFF0fHxibihuLmxpZnQpJiZibihuLnN1YnNjcmliZSkpfXRsLmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyB0bCgiQyIpO3ZhciBfZz1jZyhuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIFBTKG4sdCl7bGV0IGU9Im9iamVjdCI9PXR5cGVvZiB0O3JldHVybiBuZXcgUHJvbWlzZSgoaSxyKT0+e2xldCBvPW5ldyBqbCh7bmV4dDpzPT57aShzKSxvLnVuc3Vic2NyaWJlKCl9LGVycm9yOnIsY29tcGxldGU6KCk9PntlP2kodC5kZWZhdWx0VmFsdWUpOnIobmV3IF9nKX19KTtuLnN1YnNjcmliZShvKX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2kubmV4dChuLmNhbGwodCxvLHIrKykpfSkpfSl9dmFye2lzQXJyYXk6bGRlfT1BcnJheTtmdW5jdGlvbiBaZChuKXtyZXR1cm4gQih0PT5mdW5jdGlvbihuLHQpe3JldHVybiBsZGUodCk/biguLi50KTpuKHQpfShuLHQpKX12YXJ7aXNBcnJheTp1ZGV9PUFycmF5LHtnZXRQcm90b3R5cGVPZjpkZGUscHJvdG90eXBlOnBkZSxrZXlzOmhkZX09T2JqZWN0O2Z1bmN0aW9uIFJTKG4pe2lmKDE9PT1uLmxlbmd0aCl7bGV0IHQ9blswXTtpZih1ZGUodCkpcmV0dXJue2FyZ3M6dCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4mJmRkZShuKT09PXBkZX0odCkpe2xldCBlPWhkZSh0KTtyZXR1cm57YXJnczplLm1hcChpPT50W2ldKSxrZXlzOmV9fX1yZXR1cm57YXJnczpuLGtleXM6bnVsbH19ZnVuY3Rpb24gT1Mobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSxyKT0+KGVbaV09dFtyXSxlKSx7fSl9ZnVuY3Rpb24gcG4oLi4ubil7bGV0IHQ9VWMobiksZT1IYyhuKSx7YXJnczppLGtleXM6cn09UlMobik7aWYoMD09PWkubGVuZ3RoKXJldHVybiBsbyhbXSx0KTtsZXQgbz1uZXcgUXQoVU8oaSx0LHI/cz0+T1MocixzKTpNcykpO3JldHVybiBlP28ucGlwZShaZChlKSk6b31mdW5jdGlvbiBVTyhuLHQsZT1Ncyl7cmV0dXJuIGk9Pntvaih0LCgpPT57bGV0e2xlbmd0aDpyfT1uLG89bmV3IEFycmF5KHIpLHM9cixhPXI7Zm9yKGxldCBsPTA7bDxyO2wrKylvaih0LCgpPT57bGV0IGM9bG8obltsXSx0KSx1PSExO2Muc3Vic2NyaWJlKEx0KGksZD0+e29bbF09ZCx1fHwodT0hMCxhLS0pLGF8fGkubmV4dChlKG8uc2xpY2UoKSkpfSwoKT0+ey0tc3x8aS5jb21wbGV0ZSgpfSkpfSxpKX0saSl9fWZ1bmN0aW9uIG9qKG4sdCxlKXtuP1lzKGUsbix0KTp0KCl9ZnVuY3Rpb24gX24obix0LGU9MS8wKXtyZXR1cm4gYm4odCk/X24oKGkscik9PkIoKG8scyk9PnQoaSxvLHIscykpKGFpKG4oaSxyKSkpLGUpOigibnVtYmVyIj09dHlwZW9mIHQmJihlPXQpLHF0KChpLHIpPT5mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsPVtdLGM9MCx1PTAsZD0hMSxwPSgpPT57ZCYmIWwubGVuZ3RoJiYhYyYmdC5jb21wbGV0ZSgpfSxoPW09PmM8aT9mKG0pOmwucHVzaChtKSxmPW09PntjKys7bGV0IEM9ITE7YWkoZShtLHUrKykpLnN1YnNjcmliZShMdCh0LF89Pnt0Lm5leHQoXyl9LCgpPT57Qz0hMH0sdm9pZCAwLCgpPT57aWYoQyl0cnl7Zm9yKGMtLTtsLmxlbmd0aCYmYzxpOyl7bGV0IF89bC5zaGlmdCgpO2YoXyl9cCgpfWNhdGNoKF8pe3QuZXJyb3IoXyl9fSkpfTtyZXR1cm4gbi5zdWJzY3JpYmUoTHQodCxoLCgpPT57ZD0hMCxwKCl9KSksKCk9Pnt9fShpLHIsbixlKSkpfWZ1bmN0aW9uIGtTKG49MS8wKXtyZXR1cm4gX24oTXMsbil9ZnVuY3Rpb24gSmQoLi4ubil7cmV0dXJuIGtTKDEpKGxvKG4sVWMobikpKX1mdW5jdGlvbiBiYShuKXtyZXR1cm4gbmV3IFF0KHQ9PnthaShuKCkpLnN1YnNjcmliZSh0KX0pfWZ1bmN0aW9uIHhvKC4uLm4pe2xldCB0PUhjKG4pLHthcmdzOmUsa2V5czppfT1SUyhuKSxyPW5ldyBRdChvPT57bGV0e2xlbmd0aDpzfT1lO2lmKCFzKXJldHVybiB2b2lkIG8uY29tcGxldGUoKTtsZXQgYT1uZXcgQXJyYXkocyksbD1zLGM9cztmb3IobGV0IHU9MDt1PHM7dSsrKXtsZXQgZD0hMTthaShlW3VdKS5zdWJzY3JpYmUoTHQobyxwPT57ZHx8KGQ9ITAsYy0tKSxhW3VdPXB9LCgpPT5sLS0sdm9pZCAwLCgpPT57KCFsfHwhZCkmJihjfHxvLm5leHQoaT9PUyhpLGEpOmEpLG8uY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIHQ/ci5waXBlKFpkKHQpKTpyfXZhciBtZGU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sZ2RlPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxfZGU9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIGxpKG4sdCxlLGkpe2lmKGJuKGUpJiYoaT1lLGU9dm9pZCAwKSxpKXJldHVybiBsaShuLHQsZSkucGlwZShaZChpKSk7bGV0W3Isb109ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4uYWRkRXZlbnRMaXN0ZW5lcikmJmJuKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KG4pP2dkZS5tYXAocz0+YT0+bltzXSh0LGEsZSkpOmZ1bmN0aW9uKG4pe3JldHVybiBibihuLmFkZExpc3RlbmVyKSYmYm4obi5yZW1vdmVMaXN0ZW5lcil9KG4pP21kZS5tYXAobGoobix0KSk6ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4ub24pJiZibihuLm9mZil9KG4pP19kZS5tYXAobGoobix0KSk6W107aWYoIXImJmdnKG4pKXJldHVybiBfbihzPT5saShzLHQsZSkpKGFpKG4pKTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgUXQocz0+e2xldCBhPSguLi5sKT0+cy5uZXh0KDE8bC5sZW5ndGg/bDpsWzBdKTtyZXR1cm4gcihhKSwoKT0+byhhKX0pfWZ1bmN0aW9uIGxqKG4sdCl7cmV0dXJuIGU9Pmk9Pm5bZV0odCxpKX1mdW5jdGlvbiB4YShuPTAsdCxlPUM4KXtsZXQgaT0tMTtyZXR1cm4gbnVsbCE9dCYmKGdTKHQpP2U9dDppPXQpLG5ldyBRdChyPT57bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obil9KG4pPytuLWUubm93KCk6bjtvPDAmJihvPTApO2xldCBzPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyLmNsb3NlZHx8KHIubmV4dChzKyspLDA8PWk/dGhpcy5zY2hlZHVsZSh2b2lkIDAsaSk6ci5jb21wbGV0ZSgpKX0sbyl9KX1mdW5jdGlvbiB1biguLi5uKXtsZXQgdD1VYyhuKSxlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBCTyhuKT9uLnBvcCgpOjEvMH0obiksaT1uO3JldHVybiBpLmxlbmd0aD8xPT09aS5sZW5ndGg/YWkoaVswXSk6a1MoZSkobG8oaSx0KSk6YW99dmFye2lzQXJyYXk6eGRlfT1BcnJheTtmdW5jdGlvbiBGUyhuKXtyZXR1cm4gMT09PW4ubGVuZ3RoJiZ4ZGUoblswXSk/blswXTpufWZ1bmN0aW9uIEhlKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9MDtlLnN1YnNjcmliZShMdChpLG89Pm4uY2FsbCh0LG8scisrKSYmaS5uZXh0KG8pKSl9KX1mdW5jdGlvbiB6YyhuLHQ9WXUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgaT0hMSxyPW51bGwsbz1udWxsLHM9ITEsYT0oKT0+e2lmKG8/LnVuc3Vic2NyaWJlKCksbz1udWxsLGkpe2k9ITE7bGV0IGM9cjtyPW51bGwsZS5uZXh0KGMpfXMmJmUuY29tcGxldGUoKX0sbD0oKT0+e289bnVsbCxzJiZlLmNvbXBsZXRlKCl9O3Quc3Vic2NyaWJlKEx0KGUsYz0+e2k9ITAscj1jLG98fGFpKG4oKSkuc3Vic2NyaWJlKG89THQoZSxhLGwpKX0sKCk9PntzPSEwLCghaXx8IW98fG8uY2xvc2VkKSYmZS5jb21wbGV0ZSgpfSkpfSl9KCgpPT54YShuLHQpKX1mdW5jdGlvbiBDbyhuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgbyxpPW51bGwscj0hMTtpPXQuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLHZvaWQgMCxzPT57bz1haShuKHMsQ28obikodCkpKSxpPyhpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKTpyPSEwfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKX0pfWZ1bmN0aW9uIHVqKG4sdCxlLGkscil7cmV0dXJuKG8scyk9PntsZXQgYT1lLGw9dCxjPTA7by5zdWJzY3JpYmUoTHQocyx1PT57bGV0IGQ9YysrO2w9YT9uKGwsdSxkKTooYT0hMCx1KSxpJiZzLm5leHQobCl9LHImJigoKT0+e2EmJnMubmV4dChsKSxzLmNvbXBsZXRlKCl9KSkpfX1mdW5jdGlvbiBHTyguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gdD9mdW5jdGlvbiguLi5uKXtyZXR1cm4gUk8obil9KEdPKC4uLm4pLFpkKHQpKTpxdCgoZSxpKT0+e1VPKFtlLC4uLkZTKG4pXSkoaSl9KX1mdW5jdGlvbiBzciguLi5uKXtyZXR1cm4gR08oLi4ubil9ZnVuY3Rpb24gQXIobix0PVl1KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT0oKT0+e2lmKHIpe3IudW5zdWJzY3JpYmUoKSxyPW51bGw7bGV0IGM9bztvPW51bGwsaS5uZXh0KGMpfX07ZnVuY3Rpb24gbCgpe2xldCBjPXMrbix1PXQubm93KCk7aWYodTxjKXJldHVybiByPXRoaXMuc2NoZWR1bGUodm9pZCAwLGMtdSksdm9pZCBpLmFkZChyKTthKCl9ZS5zdWJzY3JpYmUoTHQoaSxjPT57bz1jLHM9dC5ub3coKSxyfHwocj10LnNjaGVkdWxlKGwsbiksaS5hZGQocikpfSwoKT0+e2EoKSxpLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e289cj1udWxsfSkpfSl9ZnVuY3Rpb24gZGoobil7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT57aXx8ZS5uZXh0KG4pLGUuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIEh0KG4pe3JldHVybiBuPD0wPygpPT5hbzpxdCgodCxlKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUoTHQoZSxyPT57KytpPD1uJiYoZS5uZXh0KHIpLG48PWkmJmUuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBxeSgpe3JldHVybiBxdCgobix0KT0+e24uc3Vic2NyaWJlKEx0KHQsemwpKX0pfWZ1bmN0aW9uIHZnKG4sdCl7cmV0dXJuIHQ/ZT0+SmQodC5waXBlKEh0KDEpLHF5KCkpLGUucGlwZSh2ZyhuKSkpOl9uKChlLGkpPT5uKGUsaSkucGlwZShIdCgxKSxmdW5jdGlvbihuKXtyZXR1cm4gQigoKT0+bil9KGUpKSl9ZnVuY3Rpb24gbmwobix0PVl1KXtsZXQgZT14YShuLHQpO3JldHVybiB2ZygoKT0+ZSl9ZnVuY3Rpb24gZGkobix0PU1zKXtyZXR1cm4gbj1uPz9DZGUscXQoKGUsaSk9PntsZXQgcixvPSEwO2Uuc3Vic2NyaWJlKEx0KGkscz0+e2xldCBhPXQocyk7KG98fCFuKHIsYSkpJiYobz0hMSxyPWEsaS5uZXh0KHMpKX0pKX0pfWZ1bmN0aW9uIENkZShuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBoaihuPXdkZSl7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT5pP2UuY29tcGxldGUoKTplLmVycm9yKG4oKSkpKX0pfWZ1bmN0aW9uIHdkZSgpe3JldHVybiBuZXcgX2d9ZnVuY3Rpb24gTFMobix0KXtyZXR1cm4gdD9lPT5lLnBpcGUoTFMoKGkscik9PmFpKG4oaSxyKSkucGlwZShCKChvLHMpPT50KGksbyxyLHMpKSkpKTpxdCgoZSxpKT0+e2xldCByPTAsbz1udWxsLHM9ITE7ZS5zdWJzY3JpYmUoTHQoaSxhPT57b3x8KG89THQoaSx2b2lkIDAsKCk9PntvPW51bGwscyYmaS5jb21wbGV0ZSgpfSksYWkobihhLHIrKykpLnN1YnNjcmliZShvKSl9LCgpPT57cz0hMCwhbyYmaS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gVlMobix0LGUsaSl7cmV0dXJuIHF0KChyLG8pPT57bGV0IHM7dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KHtkdXJhdGlvbjplLGVsZW1lbnQ6cyxjb25uZWN0b3I6aX09dCk6cz10O2xldCBhPW5ldyBNYXAsbD1mPT57YS5mb3JFYWNoKGYpLGYobyl9LGM9Zj0+bChtPT5tLmVycm9yKGYpKSx1PTAsZD0hMSxwPW5ldyBIeShvLGY9Pnt0cnl7bGV0IG09bihmKSxDPWEuZ2V0KG0pO2lmKCFDKXthLnNldChtLEM9aT9pKCk6bmV3IFRlKTtsZXQgXz1mdW5jdGlvbihmLG0pe2xldCBDPW5ldyBRdChfPT57dSsrO2xldCB5PW0uc3Vic2NyaWJlKF8pO3JldHVybigpPT57eS51bnN1YnNjcmliZSgpLDA9PS0tdSYmZCYmcC51bnN1YnNjcmliZSgpfX0pO3JldHVybiBDLmtleT1mLEN9KG0sQyk7aWYoby5uZXh0KF8pLGUpe2xldCB5PUx0KEMsKCk9PntDLmNvbXBsZXRlKCkseT8udW5zdWJzY3JpYmUoKX0sdm9pZCAwLHZvaWQgMCwoKT0+YS5kZWxldGUobSkpO3AuYWRkKGFpKGUoXykpLnN1YnNjcmliZSh5KSl9fUMubmV4dChzP3MoZik6Zil9Y2F0Y2gobSl7YyhtKX19LCgpPT5sKGY9PmYuY29tcGxldGUoKSksYywoKT0+YS5jbGVhcigpLCgpPT4oZD0hMCwwPT09dSkpO3Iuc3Vic2NyaWJlKHApfSl9ZnVuY3Rpb24geWcoKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKEx0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIFhzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBUZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCx1PSExLGQ9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGg9KCk9PntwKCkscz1sPXZvaWQgMCx1PWQ9ITF9LGY9KCk9PntsZXQgbT1zO2goKSxtPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gcXQoKG0sQyk9PntjKyssIWQmJiF1JiZwKCk7bGV0IF89bD1sPz90KCk7Qy5hZGQoKCk9PntjLS0sMD09PWMmJiFkJiYhdSYmKGE9Wk8oZixyKSl9KSxfLnN1YnNjcmliZShDKSwhcyYmYz4wJiYocz1uZXcgamwoe25leHQ6eT0+Xy5uZXh0KHkpLGVycm9yOnk9PntkPSEwLHAoKSxhPVpPKGgsZSx5KSxfLmVycm9yKHkpfSxjb21wbGV0ZTooKT0+e3U9ITAscCgpLGE9Wk8oaCxpKSxfLmNvbXBsZXRlKCl9fSksYWkobSkuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBaTyhuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBqbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIFFzKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsWHMoe2Nvbm5lY3RvcjooKT0+bmV3IFVoKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIENhKG4pe3JldHVybiBIZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gVm4oLi4ubil7bGV0IHQ9VWMobik7cmV0dXJuIHF0KChlLGkpPT57KHQ/SmQobixlLHQpOkpkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIHZpKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKEx0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCx1PW8rKzthaShuKGwsdSkpLnN1YnNjcmliZShyPUx0KGksZD0+aS5uZXh0KHQ/dChsLGQsdSxjKyspOmQpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIG90KG4pe3JldHVybiBxdCgodCxlKT0+e2FpKG4pLnN1YnNjcmliZShMdChlLCgpPT5lLmNvbXBsZXRlKCksemwpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gWXkobix0PSExKXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBOdChuLHQsZSl7bGV0IGk9Ym4obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/cXQoKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoTHQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOk1zfXZhciBKTz17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYmcobix0PVl1LGU9Sk8pe2xldCBpPXhhKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1KTyl7cmV0dXJuIHF0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLHU9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoaCgpLGMmJmkuY29tcGxldGUoKSl9LGQ9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPWY9Pmw9YWkobihmKSkuc3Vic2NyaWJlKEx0KGksdSxkKSksaD0oKT0+e2lmKHMpe3M9ITE7bGV0IGY9YTthPW51bGwsaS5uZXh0KGYpLCFjJiZwKGYpfX07ZS5zdWJzY3JpYmUoTHQoaSxmPT57cz0hMCxhPWYsKCFsfHxsLmNsb3NlZCkmJihyP2goKTpwKGYpKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBHdCguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWFpKG5bbF0pLnN1YnNjcmliZShMdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KE1zKSkmJihzPW51bGwpKX0semwpKTtlLnN1YnNjcmliZShMdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIGFyKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT1hcilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uICRPKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIGNvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChjbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIGJrKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIE1kZT1hcih7X19mb3J3YXJkX3JlZl9fOmFyfSk7ZnVuY3Rpb24gcmkobil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPXJpLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY28odGhpcygpKX0sbn1mdW5jdGlvbiBxaShuKXtyZXR1cm4gbEcobik/bigpOm59ZnVuY3Rpb24gbEcobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoTWRlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1yaX12YXIgTXQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMobil9JHt0PyI6ICIrdC50cmltKCk6IiJ9YH0odCxlKSksdGhpcy5jb2RlPXR9fTtmdW5jdGlvbiBxbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bjpudWxsPT1uPyIiOlN0cmluZyhuKX1mdW5jdGlvbiBNRihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLm5hbWV8fG4udG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLm5hbWV8fG4udHlwZS50b1N0cmluZygpOnFuKG4pfWZ1bmN0aW9uIFNGKG4sdCl7dGhyb3cgbmV3IE10KC0yMDEsITEpfWZ1bmN0aW9uIGNHKG4sdCxlLGkpe3Rocm93IG5ldyBFcnJvcihgQVNTRVJUSU9OIEVSUk9SOiAke259YCsobnVsbD09aT8iIjpgIFtFeHBlY3RlZD0+ICR7ZX0gJHtpfSAke3R9IDw9QWN0dWFsXWApKX1mdW5jdGlvbiBnZShuKXtyZXR1cm57dG9rZW46bi50b2tlbixwcm92aWRlZEluOm4ucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5Om4uZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIFUobil7cmV0dXJue3Byb3ZpZGVyczpuLnByb3ZpZGVyc3x8W10saW1wb3J0czpuLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBFRihuKXtyZXR1cm4gbWoobix0RSl8fG1qKG4sdUcpfWZ1bmN0aW9uIG1qKG4sdCl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsfWZ1bmN0aW9uIGdqKG4pe3JldHVybiBuJiYobi5oYXNPd25Qcm9wZXJ0eSh4ayl8fG4uaGFzT3duUHJvcGVydHkoSWRlKSk/blt4a106bnVsbH12YXIgQ2ssdEU9YXIoeyJcdTAyNzVwcm92Ijphcn0pLHhrPWFyKHsiXHUwMjc1aW5qIjphcn0pLHVHPWFyKHtuZ0luamVjdGFibGVEZWY6YXJ9KSxJZGU9YXIoe25nSW5qZWN0b3JEZWY6YXJ9KSxpaT0oKCk9PntyZXR1cm4obj1paXx8KGlpPXt9KSlbbi5EZWZhdWx0PTBdPSJEZWZhdWx0IixuW24uSG9zdD0xXT0iSG9zdCIsbltuLlNlbGY9Ml09IlNlbGYiLG5bbi5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLG5bbi5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGlpO3ZhciBufSkoKTtmdW5jdGlvbiBpbChuKXtsZXQgdD1DaztyZXR1cm4gQ2s9bix0fWZ1bmN0aW9uIGRHKG4sdCxlKXtsZXQgaT1FRihuKTtyZXR1cm4gaSYmInJvb3QiPT1pLnByb3ZpZGVkSW4/dm9pZCAwPT09aS52YWx1ZT9pLnZhbHVlPWkuZmFjdG9yeSgpOmkudmFsdWU6ZSZpaS5PcHRpb25hbD9udWxsOnZvaWQgMCE9PXQ/dDp2b2lkIFNGKGNvKG4pKX1mdW5jdGlvbiB0ZihuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX12YXIgS3k9KCgpPT57cmV0dXJuKG49S3l8fChLeT17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixLeTt2YXIgbn0pKCksd2E9KCgpPT57cmV0dXJuKG49d2F8fCh3YT17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIix3YTt2YXIgbn0pKCksV3I9KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLEFnPXt9LFdpPVtdLFRFPWFyKHsiXHUwMjc1Y21wIjphcn0pLFRGPWFyKHsiXHUwMjc1ZGlyIjphcn0pLERGPWFyKHsiXHUwMjc1cGlwZSI6YXJ9KSxwRz1hcih7Ilx1MDI3NW1vZCI6YXJ9KSxRdT1hcih7Ilx1MDI3NWZhYyI6YXJ9KSxaeT1hcih7X19OR19FTEVNRU5UX0lEX186YXJ9KSxSZGU9MDtmdW5jdGlvbiBrKG4pe3JldHVybiB0ZigoKT0+e2xldCBlPSEwPT09bi5zdGFuZGFsb25lLGk9e30scj17dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxkZWNsczpuLmRlY2xzLHZhcnM6bi52YXJzLGZhY3Rvcnk6bnVsbCx0ZW1wbGF0ZTpuLnRlbXBsYXRlfHxudWxsLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6aSxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBc3x8bnVsbCxvblB1c2g6bi5jaGFuZ2VEZXRlY3Rpb249PT1LeS5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsc3RhbmRhbG9uZTplLGRlcGVuZGVuY2llczplJiZuLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bnVsbCxzZWxlY3RvcnM6bi5zZWxlY3RvcnN8fFdpLHZpZXdRdWVyeTpuLnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpuLmZlYXR1cmVzfHxudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8d2EuRW11bGF0ZWQsaWQ6ImMiK1JkZSsrLHN0eWxlczpuLnN0eWxlc3x8V2ksXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz1uLmRlcGVuZGVuY2llcyxzPW4uZmVhdHVyZXM7cmV0dXJuIHIuaW5wdXRzPXZqKG4uaW5wdXRzLGkpLHIub3V0cHV0cz12aihuLm91dHB1dHMpLHMmJnMuZm9yRWFjaChhPT5hKHIpKSxyLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoaEcpLmZpbHRlcihfaik6bnVsbCxyLnBpcGVEZWZzPW8/KCk9PigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6bykubWFwKEt1KS5maWx0ZXIoX2opOm51bGwscn0pfWZ1bmN0aW9uIGJiKG4sdCxlKXtsZXQgaT1uLlx1MDI3NWNtcDtpLmRpcmVjdGl2ZURlZnM9KCk9PigiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCkubWFwKGhHKSxpLnBpcGVEZWZzPSgpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUpLm1hcChLdSl9ZnVuY3Rpb24gaEcobil7cmV0dXJuIG9sKG4pfHxYaChuKX1mdW5jdGlvbiBfaihuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24geihuKXtyZXR1cm4gdGYoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxXaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFdpLGltcG9ydHM6bi5pbXBvcnRzfHxXaSxleHBvcnRzOm4uZXhwb3J0c3x8V2ksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIHZqKG4sdCl7aWYobnVsbD09bilyZXR1cm4gQWc7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX12YXIgT2U9aztmdW5jdGlvbiBCZyhuKXtyZXR1cm57dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsZmFjdG9yeTpudWxsLHB1cmU6ITEhPT1uLnB1cmUsc3RhbmRhbG9uZTohMD09PW4uc3RhbmRhbG9uZSxvbkRlc3Ryb3k6bi50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gb2wobil7cmV0dXJuIG5bVEVdfHxudWxsfWZ1bmN0aW9uIFhoKG4pe3JldHVybiBuW1RGXXx8bnVsbH1mdW5jdGlvbiBLdShuKXtyZXR1cm4gbltERl18fG51bGx9ZnVuY3Rpb24gZkcobil7bGV0IHQ9b2wobil8fFhoKG4pfHxLdShuKTtyZXR1cm4gbnVsbCE9PXQmJnQuc3RhbmRhbG9uZX1mdW5jdGlvbiBJZyhuLHQpe2xldCBlPW5bcEddfHxudWxsO2lmKCFlJiYhMD09PXQpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Y28obil9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gcWgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgblsxXX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmITA9PT1uWzFdfWZ1bmN0aW9uIFBGKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX1mdW5jdGlvbiBSRihuKXtyZXR1cm4gMj09KDImbi5mbGFncyl9ZnVuY3Rpb24gQUUobil7cmV0dXJuIDE9PSgxJm4uZmxhZ3MpfWZ1bmN0aW9uIFFsKG4pe3JldHVybiBudWxsIT09bi50ZW1wbGF0ZX1mdW5jdGlvbiBGZGUobil7cmV0dXJuIDAhPSgyNTYmblsyXSl9ZnVuY3Rpb24gUWgobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShRdSk/bltRdV06bnVsbH1mdW5jdGlvbiB6dCgpe3JldHVybiBfR31mdW5jdGlvbiBfRyhuKXtyZXR1cm4gbi50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKG4uc2V0SW5wdXQ9TGRlKSxOZGV9ZnVuY3Rpb24gTmRlKCl7bGV0IG49eUcodGhpcyksdD1uPy5jdXJyZW50O2lmKHQpe2xldCBlPW4ucHJldmlvdXM7aWYoZT09PUFnKW4ucHJldmlvdXM9dDtlbHNlIGZvcihsZXQgaSBpbiB0KWVbaV09dFtpXTtuLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKHQpfX1mdW5jdGlvbiBMZGUobix0LGUsaSl7bGV0IHI9eUcobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bdkddPXR9KG4se3ByZXZpb3VzOkFnLGN1cnJlbnQ6bnVsbH0pLG89ci5jdXJyZW50fHwoci5jdXJyZW50PXt9KSxzPXIucHJldmlvdXMsYT10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLGw9c1thXTtvW2FdPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPWl9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0obCYmbC5jdXJyZW50VmFsdWUsdCxzPT09QWcpLG5baV09dH16dC5uZ0luaGVyaXQ9ITA7dmFyIHZHPSJfX25nU2ltcGxlQ2hhbmdlc19fIjtmdW5jdGlvbiB5RyhuKXtyZXR1cm4gblt2R118fG51bGx9ZnVuY3Rpb24gTWEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bMF07cmV0dXJuIG59ZnVuY3Rpb24gSUUobix0KXtyZXR1cm4gTWEodFtuXSl9ZnVuY3Rpb24gdWwobix0KXtyZXR1cm4gTWEodFtuLmluZGV4XSl9ZnVuY3Rpb24gQ0cobix0KXtyZXR1cm4gbi5kYXRhW3RdfWZ1bmN0aW9uIEhnKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gb3Aobix0KXtsZXQgZT10W25dO3JldHVybiBxaChlKT9lOmVbMF19ZnVuY3Rpb24gb0Uobil7cmV0dXJuIDY0PT0oNjQmblsyXSl9ZnVuY3Rpb24gZXAobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gd0cobil7blsxOF09MH1mdW5jdGlvbiBPRihuLHQpe25bNV0rPXQ7bGV0IGU9bixpPW5bM107Zm9yKDtudWxsIT09aSYmKDE9PT10JiYxPT09ZVs1XXx8LTE9PT10JiYwPT09ZVs1XSk7KWlbNV0rPXQsZT1pLGk9aVszXX12YXIgWW49e2xGcmFtZTpQRyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIE1HKCl7cmV0dXJuIFluLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBaZSgpe3JldHVybiBZbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRGkoKXtyZXR1cm4gWW4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHJlKG4pe3JldHVybiBZbi5sRnJhbWUuY29udGV4dExWaWV3PW4sbls4XX1mdW5jdGlvbiBvZShuKXtyZXR1cm4gWW4ubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLG59ZnVuY3Rpb24gTW8oKXtsZXQgbj1TRygpO2Zvcig7bnVsbCE9PW4mJjY0PT09bi50eXBlOyluPW4ucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFNHKCl7cmV0dXJuIFluLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gbGIoKXtsZXQgbj1Zbi5sRnJhbWUsdD1uLmN1cnJlbnRUTm9kZTtyZXR1cm4gbi5pc1BhcmVudD90OnQucGFyZW50fWZ1bmN0aW9uIFdjKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuY3VycmVudFROb2RlPW4sZS5pc1BhcmVudD10fWZ1bmN0aW9uIGtGKCl7cmV0dXJuIFluLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBGRigpe1luLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBFcygpe2xldCBuPVluLmxGcmFtZSx0PW4uYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PXQmJih0PW4uYmluZGluZ1Jvb3RJbmRleD1uLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSx0fWZ1bmN0aW9uICR1KCl7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gRUcobil7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXg9bn1mdW5jdGlvbiBVZygpe3JldHVybiBZbi5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gZWQobil7bGV0IHQ9WW4ubEZyYW1lLGU9dC5iaW5kaW5nSW5kZXg7cmV0dXJuIHQuYmluZGluZ0luZGV4PXQuYmluZGluZ0luZGV4K24sZX1mdW5jdGlvbiBURyhuKXtZbi5sRnJhbWUuaW5JMThuPW59ZnVuY3Rpb24gUWRlKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuYmluZGluZ0luZGV4PWUuYmluZGluZ1Jvb3RJbmRleD1uLFNrKHQpfWZ1bmN0aW9uIFNrKG4pe1luLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9bn1mdW5jdGlvbiBORihuKXtsZXQgdD1Zbi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09dD9udWxsOm5bdF19ZnVuY3Rpb24gREcoKXtyZXR1cm4gWW4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIExGKG4pe1luLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIFpkZShuKXtsZXQgdD1uWzFdO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bls2XTpudWxsfWZ1bmN0aW9uIEFHKG4sdCxlKXtpZihlJmlpLlNraXBTZWxmKXtsZXQgcj10LG89bjtmb3IoOyEocj1yLnBhcmVudCxudWxsIT09cnx8ZSZpaS5Ib3N0fHwocj1aZGUobyksbnVsbD09PXJ8fChvPW9bMTVdLDEwJnIudHlwZSkpKTspO2lmKG51bGw9PT1yKXJldHVybiExO3Q9cixuPW99bGV0IGk9WW4ubEZyYW1lPUlHKCk7cmV0dXJuIGkuY3VycmVudFROb2RlPXQsaS5sVmlldz1uLCEwfWZ1bmN0aW9uIEJGKG4pe2xldCB0PUlHKCksZT1uWzFdO1luLmxGcmFtZT10LHQuY3VycmVudFROb2RlPWUuZmlyc3RDaGlsZCx0LmxWaWV3PW4sdC50Vmlldz1lLHQuY29udGV4dExWaWV3PW4sdC5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nU3RhcnRJbmRleCx0LmluSTE4bj0hMX1mdW5jdGlvbiBJRygpe2xldCBuPVluLmxGcmFtZSx0PW51bGw9PT1uP251bGw6bi5jaGlsZDtyZXR1cm4gbnVsbD09PXQ/UEcobik6dH1mdW5jdGlvbiBQRyhuKXtsZXQgdD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50Om4sY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09biYmKG4uY2hpbGQ9dCksdH1mdW5jdGlvbiBSRygpe2xldCBuPVluLmxGcmFtZTtyZXR1cm4gWW4ubEZyYW1lPW4ucGFyZW50LG4uY3VycmVudFROb2RlPW51bGwsbi5sVmlldz1udWxsLG59dmFyIE9HPVJHO2Z1bmN0aW9uIFZGKCl7bGV0IG49UkcoKTtuLmlzUGFyZW50PSEwLG4udFZpZXc9bnVsbCxuLnNlbGVjdGVkSW5kZXg9LTEsbi5jb250ZXh0TFZpZXc9bnVsbCxuLmVsZW1lbnREZXB0aENvdW50PTAsbi5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsbi5jdXJyZW50TmFtZXNwYWNlPW51bGwsbi5iaW5kaW5nUm9vdEluZGV4PS0xLG4uYmluZGluZ0luZGV4PS0xLG4uY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBUcygpe3JldHVybiBZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiB0cChuKXtZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleD1ufWZ1bmN0aW9uIHFyKCl7bGV0IG49WW4ubEZyYW1lO3JldHVybiBDRyhuLnRWaWV3LG4uc2VsZWN0ZWRJbmRleCl9ZnVuY3Rpb24gam4oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ic3ZnIn1mdW5jdGlvbiBTYSgpe1luLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPW51bGx9ZnVuY3Rpb24gUEUobix0KXtmb3IobGV0IGU9dC5kaXJlY3RpdmVTdGFydCxpPXQuZGlyZWN0aXZlRW5kO2U8aTtlKyspe2xldCBvPW4uZGF0YVtlXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnMsbmdBZnRlckNvbnRlbnRDaGVja2VkOmEsbmdBZnRlclZpZXdJbml0OmwsbmdBZnRlclZpZXdDaGVja2VkOmMsbmdPbkRlc3Ryb3k6dX09bztzJiYobi5jb250ZW50SG9va3N8fChuLmNvbnRlbnRIb29rcz1bXSkpLnB1c2goLWUscyksYSYmKChuLmNvbnRlbnRIb29rc3x8KG4uY29udGVudEhvb2tzPVtdKSkucHVzaChlLGEpLChuLmNvbnRlbnRDaGVja0hvb2tzfHwobi5jb250ZW50Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxhKSksbCYmKG4udmlld0hvb2tzfHwobi52aWV3SG9va3M9W10pKS5wdXNoKC1lLGwpLGMmJigobi52aWV3SG9va3N8fChuLnZpZXdIb29rcz1bXSkpLnB1c2goZSxjKSwobi52aWV3Q2hlY2tIb29rc3x8KG4udmlld0NoZWNrSG9va3M9W10pKS5wdXNoKGUsYykpLG51bGwhPXUmJihuLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKSkucHVzaChlLHUpfX1mdW5jdGlvbiBxUyhuLHQsZSl7a0cobix0LDMsZSl9ZnVuY3Rpb24gWVMobix0LGUsaSl7KDMmblsyXSk9PT1lJiZrRyhuLHQsZSxpKX1mdW5jdGlvbiBlayhuLHQpe2xldCBlPW5bMl07KDMmZSk9PT10JiYoZSY9MjA0NyxlKz0xLG5bMl09ZSl9ZnVuY3Rpb24ga0cobix0LGUsaSl7bGV0IG89aT8/LTEscz10Lmxlbmd0aC0xLGE9MDtmb3IobGV0IGw9dm9pZCAwIT09aT82NTUzNSZuWzE4XTowO2w8cztsKyspaWYoIm51bWJlciI9PXR5cGVvZiB0W2wrMV0pe2lmKGE9dFtsXSxudWxsIT1pJiZhPj1pKWJyZWFrfWVsc2UgdFtsXTwwJiYoblsxOF0rPTY1NTM2KSwoYTxvfHwtMT09bykmJihycGUobixlLHQsbCksblsxOF09KDQyOTQ5MDE3NjAmblsxOF0pK2wrMiksbCsrfWZ1bmN0aW9uIHJwZShuLHQsZSxpKXtsZXQgcj1lW2ldPDAsbz1lW2krMV0sYT1uW3I/LWVbaV06ZVtpXV07aWYocil7aWYoblsyXT4+MTE8blsxOF0+PjE2JiYoMyZuWzJdKT09PXQpe25bMl0rPTIwNDg7dHJ5e28uY2FsbChhKX1maW5hbGx5e319fWVsc2UgdHJ5e28uY2FsbChhKX1maW5hbGx5e319dmFyIEtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9ZSx0aGlzLmluamVjdEltcGw9aX19O2Z1bmN0aW9uIHNFKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aDspe2xldCByPWVbaV07aWYoIm51bWJlciI9PXR5cGVvZiByKXtpZigwIT09cilicmVhaztpKys7bGV0IG89ZVtpKytdLHM9ZVtpKytdLGE9ZVtpKytdO24uc2V0QXR0cmlidXRlKHQscyxhLG8pfWVsc2V7bGV0IG89cixzPWVbKytpXTtjcGUobyk/bi5zZXRQcm9wZXJ0eSh0LG8scyk6bi5zZXRBdHRyaWJ1dGUodCxvLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gRkcobil7cmV0dXJuIDM9PT1ufHw0PT09bnx8Nj09PW59ZnVuY3Rpb24gY3BlKG4pe3JldHVybiA2ND09PW4uY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBhRShuLHQpe2lmKG51bGwhPT10JiYwIT09dC5sZW5ndGgpaWYobnVsbD09PW58fDA9PT1uLmxlbmd0aCluPXQuc2xpY2UoKTtlbHNle2xldCBlPS0xO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgcj10W2ldOyJudW1iZXIiPT10eXBlb2Ygcj9lPXI6MD09PWV8fHhqKG4sZSxyLG51bGwsLTE9PT1lfHwyPT09ZT90WysraV06bnVsbCl9fXJldHVybiBufWZ1bmN0aW9uIHhqKG4sdCxlLGkscil7bGV0IG89MCxzPW4ubGVuZ3RoO2lmKC0xPT09dClzPS0xO2Vsc2UgZm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvKytdO2lmKCJudW1iZXIiPT10eXBlb2YgYSl7aWYoYT09PXQpe3M9LTE7YnJlYWt9aWYoYT50KXtzPW8tMTticmVha319fWZvcig7bzxuLmxlbmd0aDspe2xldCBhPW5bb107aWYoIm51bWJlciI9PXR5cGVvZiBhKWJyZWFrO2lmKGE9PT1lKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09ciYmKG5bbysxXT1yKSk7aWYoaT09PW5bbysxXSlyZXR1cm4gdm9pZChuW28rMl09cil9bysrLG51bGwhPT1pJiZvKyssbnVsbCE9PXImJm8rK30tMSE9PXMmJihuLnNwbGljZShzLDAsdCksbz1zKzEpLG4uc3BsaWNlKG8rKywwLGUpLG51bGwhPT1pJiZuLnNwbGljZShvKyssMCxpKSxudWxsIT09ciYmbi5zcGxpY2UobysrLDAscil9ZnVuY3Rpb24gTkcobil7cmV0dXJuLTEhPT1ufWZ1bmN0aW9uIGxFKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIGNFKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVsxNV0sZS0tO3JldHVybiBpfXZhciBFaz0hMDtmdW5jdGlvbiB1RShuKXtsZXQgdD1FaztyZXR1cm4gRWs9bix0fXZhciBwcGU9MCxqYz17fTtmdW5jdGlvbiBjYihuLHQpe2xldCBlPVZHKG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbMV07aS5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9dC5sZW5ndGgsdGsoaS5kYXRhLG4pLHRrKHQsbnVsbCksdGsoaS5ibHVlcHJpbnQsbnVsbCkpO2xldCByPVVGKG4sdCksbz1uLmluamVjdG9ySW5kZXg7aWYoTkcocikpe2xldCBzPWxFKHIpLGE9Y0Uocix0KSxsPWFbMV0uZGF0YTtmb3IobGV0IGM9MDtjPDg7YysrKXRbbytjXT1hW3MrY118bFtzK2NdfXJldHVybiB0W28rOF09cixvfWZ1bmN0aW9uIHRrKG4sdCl7bi5wdXNoKDAsMCwwLDAsMCwwLDAsMCx0KX1mdW5jdGlvbiBWRyhuLHQpe3JldHVybi0xPT09bi5pbmplY3RvckluZGV4fHxuLnBhcmVudCYmbi5wYXJlbnQuaW5qZWN0b3JJbmRleD09PW4uaW5qZWN0b3JJbmRleHx8bnVsbD09PXRbbi5pbmplY3RvckluZGV4KzhdPy0xOm4uaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBVRihuLHQpe2lmKG4ucGFyZW50JiYtMSE9PW4ucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIG4ucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGU9MCxpPW51bGwscj10O2Zvcig7bnVsbCE9PXI7KXtpZihpPUdHKHIpLG51bGw9PT1pKXJldHVybi0xO2lmKGUrKyxyPXJbMTVdLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuLTF9ZnVuY3Rpb24gZEUobix0LGUpeyFmdW5jdGlvbihuLHQsZSl7bGV0IGk7InN0cmluZyI9PXR5cGVvZiBlP2k9ZS5jaGFyQ29kZUF0KDApfHwwOmUuaGFzT3duUHJvcGVydHkoWnkpJiYoaT1lW1p5XSksbnVsbD09aSYmKGk9ZVtaeV09cHBlKyspO2xldCByPTI1NSZpO3QuZGF0YVtuKyhyPj41KV18PTE8PHJ9KG4sdCxlKX1mdW5jdGlvbiBIRyhuLHQsZSl7aWYoZSZpaS5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtTRigpfWZ1bmN0aW9uIFVHKG4sdCxlLGkpe2lmKGUmaWkuT3B0aW9uYWwmJnZvaWQgMD09PWkmJihpPW51bGwpLDA9PShlJihpaS5TZWxmfGlpLkhvc3QpKSl7bGV0IHI9bls5XSxvPWlsKHZvaWQgMCk7dHJ5e3JldHVybiByP3IuZ2V0KHQsaSxlJmlpLk9wdGlvbmFsKTpkRyh0LGksZSZpaS5PcHRpb25hbCl9ZmluYWxseXtpbChvKX19cmV0dXJuIEhHKGksMCxlKX1mdW5jdGlvbiB6RyhuLHQsZSxpPWlpLkRlZmF1bHQscil7aWYobnVsbCE9PW4pe2lmKDEwMjQmdFsyXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzWzJdJiYhKDI1NiZzWzJdKTspe2xldCBhPWpHKG8scyxlLGl8aWkuU2VsZixqYyk7aWYoYSE9PWpjKXJldHVybiBhO2xldCBsPW8ucGFyZW50O2lmKCFsKXtsZXQgYz1zWzIxXTtpZihjKXtsZXQgdT1jLmdldChlLGpjLGkpO2lmKHUhPT1qYylyZXR1cm4gdX1sPUdHKHMpLHM9c1sxNV19bz1sfXJldHVybiByfShuLHQsZSxpLGpjKTtpZihzIT09amMpcmV0dXJuIHN9bGV0IG89akcobix0LGUsaSxqYyk7aWYobyE9PWpjKXJldHVybiBvfXJldHVybiBVRyh0LGUsaSxyKX1mdW5jdGlvbiBqRyhuLHQsZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi5jaGFyQ29kZUF0KDApfHwwO2xldCB0PW4uaGFzT3duUHJvcGVydHkoWnkpP25bWnldOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dD49MD8yNTUmdDpfcGU6dH0oZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKCFBRyh0LG4saSkpcmV0dXJuIGkmaWkuSG9zdD9IRyhyLDAsaSk6VUcodCxlLGkscik7dHJ5e2xldCBzPW8oaSk7aWYobnVsbCE9c3x8aSZpaS5PcHRpb25hbClyZXR1cm4gcztTRigpfWZpbmFsbHl7T0coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pe2xldCBzPW51bGwsYT1WRyhuLHQpLGw9LTEsYz1pJmlpLkhvc3Q/dFsxNl1bNl06bnVsbDtmb3IoKC0xPT09YXx8aSZpaS5Ta2lwU2VsZikmJihsPS0xPT09YT9VRihuLHQpOnRbYSs4XSwtMSE9PWwmJndqKGksITEpPyhzPXRbMV0sYT1sRShsKSx0PWNFKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCB1PXRbMV07aWYoQ2oobyxhLHUuZGF0YSkpe2xldCBkPW1wZShhLHQsZSxzLGksYyk7aWYoZCE9PWpjKXJldHVybiBkfWw9dFthKzhdLC0xIT09bCYmd2ooaSx0WzFdLmRhdGFbYSs4XT09PWMpJiZDaihvLGEsdCk/KHM9dSxhPWxFKGwpLHQ9Y0UobCx0KSk6YT0tMX19cmV0dXJuIHJ9ZnVuY3Rpb24gbXBlKG4sdCxlLGkscixvKXtsZXQgcz10WzFdLGE9cy5kYXRhW24rOF0sdT1YUyhhLHMsZSxudWxsPT1pP1JGKGEpJiZFazppIT1zJiYwIT0oMyZhLnR5cGUpLHImaWkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09dT9DYih0LHMsdSxhKTpqY31mdW5jdGlvbiBYUyhuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCx1PW8+PjIwLHA9cj9hK3U6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBoPWk/YTphK3U7aDxwO2grKyl7bGV0IGY9c1toXTtpZihoPGwmJmU9PT1mfHxoPj1sJiZmLnR5cGU9PT1lKXJldHVybiBofWlmKHIpe2xldCBoPXNbbF07aWYoaCYmUWwoaCkmJmgudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2Iobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEtofShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShNRihvW2VdKSk7bGV0IGE9dUUocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/aWwocy5pbmplY3RJbXBsKTpudWxsO0FHKG4saSxpaS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1fRyh0KTsoZS5wcmVPcmRlckhvb2tzfHwoZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rc3x8KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3N8fChlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rc3x8KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3N8fChlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZpbChsKSx1RShhKSxzLnJlc29sdmluZz0hMSxPRygpfX1yZXR1cm4gcn1mdW5jdGlvbiBDaihuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj41KV0mMTw8bil9ZnVuY3Rpb24gd2oobix0KXtyZXR1cm4hKG4maWkuU2VsZnx8biZpaS5Ib3N0JiZ0KX12YXIgWWg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSxpKXtyZXR1cm4gekcodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCxpLGUpfX07ZnVuY3Rpb24gX3BlKCl7cmV0dXJuIG5ldyBZaChNbygpLFplKCkpfWZ1bmN0aW9uIGhpKG4pe3JldHVybiB0ZigoKT0+e2xldCB0PW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGU9dFtRdV18fFRrKHQpLGk9T2JqZWN0LnByb3RvdHlwZSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtyJiZyIT09aTspe2xldCBvPXJbUXVdfHxUayhyKTtpZihvJiZvIT09ZSlyZXR1cm4gbztyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbz0+bmV3IG99KX1mdW5jdGlvbiBUayhuKXtyZXR1cm4gbEcobik/KCk9PntsZXQgdD1UayhxaShuKSk7cmV0dXJuIHQmJnQoKX06UWgobil9ZnVuY3Rpb24gR0cobil7bGV0IHQ9blsxXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bls2XTpudWxsfWZ1bmN0aW9uIEtvKG4pe3JldHVybiBmdW5jdGlvbihuLHQpe2lmKCJjbGFzcyI9PT10KXJldHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2xldCBlPW4uYXR0cnM7aWYoZSl7bGV0IGk9ZS5sZW5ndGgscj0wO2Zvcig7cjxpOyl7bGV0IG89ZVtyXTtpZihGRyhvKSlicmVhaztpZigwPT09bylyKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKWZvcihyKys7cjxpJiYic3RyaW5nIj09dHlwZW9mIGVbcl07KXIrKztlbHNle2lmKG89PT10KXJldHVybiBlW3IrMV07cis9Mn19fXJldHVybiBudWxsfShNbygpLG4pfXZhciB3Zz0iX19hbm5vdGF0aW9uc19fIixNZz0iX19wYXJhbWV0ZXJzX18iLFNnPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIHdiKG4sdCxlLGkscil7cmV0dXJuIHRmKCgpPT57bGV0IG89ekYodCk7ZnVuY3Rpb24gcyguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgcylyZXR1cm4gby5jYWxsKHRoaXMsLi4uYSksdGhpcztsZXQgbD1uZXcgcyguLi5hKTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHImJnIodSwuLi5hKSwodS5oYXNPd25Qcm9wZXJ0eSh3Zyk/dVt3Z106T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsd2cse3ZhbHVlOltdfSlbd2ddKS5wdXNoKGwpLGkmJmkodSksdX19cmV0dXJuIGUmJihzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSkscy5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixzLmFubm90YXRpb25DbHM9cyxzfSl9ZnVuY3Rpb24gekYobil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2lmKG4pe2xldCBpPW4oLi4uZSk7Zm9yKGxldCByIGluIGkpdGhpc1tyXT1pW3JdfX19ZnVuY3Rpb24gemcobix0LGUpe3JldHVybiB0ZigoKT0+e2xldCBpPXpGKHQpO2Z1bmN0aW9uIHIoLi4ubyl7aWYodGhpcyBpbnN0YW5jZW9mIHIpcmV0dXJuIGkuYXBwbHkodGhpcyxvKSx0aGlzO2xldCBzPW5ldyByKC4uLm8pO3JldHVybiBhLmFubm90YXRpb249cyxhO2Z1bmN0aW9uIGEobCxjLHUpe2xldCBkPWwuaGFzT3duUHJvcGVydHkoTWcpP2xbTWddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE1nLHt2YWx1ZTpbXX0pW01nXTtmb3IoO2QubGVuZ3RoPD11OylkLnB1c2gobnVsbCk7cmV0dXJuKGRbdV09ZFt1XXx8W10pLnB1c2gocyksbH19cmV0dXJuIGUmJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixyLmFubm90YXRpb25DbHM9cixyfSl9ZnVuY3Rpb24gc3Aobix0LGUsaSl7cmV0dXJuIHRmKCgpPT57bGV0IHI9ekYodCk7ZnVuY3Rpb24gbyguLi5zKXtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLHMpLHRoaXM7bGV0IGE9bmV3IG8oLi4ucyk7cmV0dXJuIGZ1bmN0aW9uKGMsdSl7bGV0IGQ9Yy5jb25zdHJ1Y3RvcixwPWQuaGFzT3duUHJvcGVydHkoU2cpP2RbU2ddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFNnLHt2YWx1ZTp7fX0pW1NnXTtwW3VdPXAuaGFzT3duUHJvcGVydHkodSkmJnBbdV18fFtdLHBbdV0udW5zaGlmdChhKSxpJiZpKGMsdSwuLi5zKX19cmV0dXJuIGUmJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixvLmFubm90YXRpb25DbHM9byxvfSl9dmFyIHlwZT16ZygiQXR0cmlidXRlIixuPT4oe2F0dHJpYnV0ZU5hbWU6bixfX05HX0VMRU1FTlRfSURfXzooKT0+S28obil9KSksc2U9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX19OR19FTEVNRU5UX0lEX189ZTp2b2lkIDAhPT1lJiYodGhpcy5cdTAyNzVwcm92PWdlKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fSxSZz0obmV3IHNlKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiksY2xhc3N7fSk7ZnVuY3Rpb24gc2wobil7bGV0IHQ9V3Iubmc7aWYodCYmdC5cdTAyNzVjb21waWxlckZhY2FkZSlyZXR1cm4gdC5cdTAyNzVjb21waWxlckZhY2FkZTt0aHJvdyBuZXcgRXJyb3IoIkpJVCBjb21waWxlciB1bmF2YWlsYWJsZSIpfXNwKCJDb250ZW50Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLFJnKSxzcCgiQ29udGVudENoaWxkIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxSZyksc3AoIlZpZXdDaGlsZHJlbiIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMCwuLi50fSksUmcpLHNwKCJWaWV3Q2hpbGQiLChuLHQpPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsLi4udH0pLFJnKTt2YXIgYnBlPUZ1bmN0aW9uO2Z1bmN0aW9uIFh5KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFh1KG4sdCl7dm9pZCAwPT09dCYmKHQ9bik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07QXJyYXkuaXNBcnJheShpKT8odD09PW4mJih0PW4uc2xpY2UoMCxlKSksWHUoaSx0KSk6dCE9PW4mJnQucHVzaChpKX1yZXR1cm4gdH1mdW5jdGlvbiB1YihuLHQpe24uZm9yRWFjaChlPT5BcnJheS5pc0FycmF5KGUpP3ViKGUsdCk6dChlKSl9ZnVuY3Rpb24gcUcobix0LGUpe3Q+PW4ubGVuZ3RoP24ucHVzaChlKTpuLnNwbGljZSh0LDAsZSl9ZnVuY3Rpb24gcEUobix0KXtyZXR1cm4gdD49bi5sZW5ndGgtMT9uLnBvcCgpOm4uc3BsaWNlKHQsMSlbMF19ZnVuY3Rpb24gSnkobix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBFYShuLHQsZSl7bGV0IGk9TWIobix0KTtyZXR1cm4gaT49MD9uWzF8aV09ZTooaT1+aSxmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmxlbmd0aDtpZihyPT10KW4ucHVzaChlLGkpO2Vsc2UgaWYoMT09PXIpbi5wdXNoKGksblswXSksblswXT1lO2Vsc2V7Zm9yKHItLSxuLnB1c2gobltyLTFdLG5bcl0pO3I+dDspbltyXT1uW3ItMl0sci0tO25bdF09ZSxuW3QrMV09aX19KG4saSx0LGUpKSxpfWZ1bmN0aW9uIG5rKG4sdCl7bGV0IGU9TWIobix0KTtpZihlPj0wKXJldHVybiBuWzF8ZV19ZnVuY3Rpb24gTWIobix0KXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPTAscj1uLmxlbmd0aD4+MTtmb3IoO3IhPT1pOyl7bGV0IG89aSsoci1pPj4xKSxzPW5bbzw8MV07aWYodD09PXMpcmV0dXJuIG88PDE7cz50P3I9bzppPW8rMX1yZXR1cm5+KHI8PDEpfShuLHQpfXZhciBNcGU9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpLiopXCkvLFNwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLEVwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sVHBlPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoXClccyp7W159XSpzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2Z1bmN0aW9uIGlrKG4pe3JldHVybiBuP24ubWFwKHQ9Pm5ldygwLHQudHlwZS5hbm5vdGF0aW9uQ2xzKSguLi50LmFyZ3M/dC5hcmdzOltdKSk6W119ZnVuY3Rpb24gSFMobil7bGV0IHQ9bi5wcm90b3R5cGU/T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKTpudWxsO3JldHVybih0P3QuY29uc3RydWN0b3I6bnVsbCl8fE9iamVjdH12YXIgJHksZGI9e30sQWs9Il9fTkdfRElfRkxBR19fIixoRT0ibmdUZW1wVG9rZW5QYXRoIixQcGU9L1xuL2dtLE1qPSJfX3NvdXJjZSI7ZnVuY3Rpb24geGcobil7bGV0IHQ9JHk7cmV0dXJuICR5PW4sdH1mdW5jdGlvbiBPcGUobix0PWlpLkRlZmF1bHQpe2lmKHZvaWQgMD09PSR5KXRocm93IG5ldyBNdCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PSR5P2RHKG4sdm9pZCAwLHQpOiR5LmdldChuLHQmaWkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gUihuLHQ9aWkuRGVmYXVsdCl7cmV0dXJuKENrfHxPcGUpKHFpKG4pLHQpfWZ1bmN0aW9uIFlHKG4pe3Rocm93IG5ldyBNdCgyMDIsITEpfWZ1bmN0aW9uIFNvKG4sdD1paS5EZWZhdWx0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQmJih0PTB8KHQub3B0aW9uYWwmJjgpfCh0Lmhvc3QmJjEpfCh0LnNlbGYmJjIpfCh0LnNraXBTZWxmJiY0KSksUihuLHQpfWZ1bmN0aW9uIElrKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1xaShuW2VdKTtpZihBcnJheS5pc0FycmF5KGkpKXtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDkwMCwhMSk7bGV0IHIsbz1paS5EZWZhdWx0O2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgYT1pW3NdLGw9a3BlKGEpOyJudW1iZXIiPT10eXBlb2YgbD8tMT09PWw/cj1hLnRva2VuOm98PWw6cj1hfXQucHVzaChSKHIsbykpfWVsc2UgdC5wdXNoKFIoaSkpfXJldHVybiB0fWZ1bmN0aW9uIFNiKG4sdCl7cmV0dXJuIG5bQWtdPXQsbi5wcm90b3R5cGVbQWtdPXQsbn1mdW5jdGlvbiBrcGUobil7cmV0dXJuIG5bQWtdfXZhciBqZz1TYih6ZygiSW5qZWN0IixuPT4oe3Rva2VuOm59KSksLTEpLE9vPVNiKHpnKCJPcHRpb25hbCIpLDgpLGpGPVNiKHpnKCJTZWxmIiksMiksVGE9U2IoemcoIlNraXBTZWxmIiksNCksTHBlPVNiKHpnKCJIb3N0IiksMSksU2o9bnVsbDtmdW5jdGlvbiBHRigpe3JldHVybiBTaj1Tanx8bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8V3IuUmVmbGVjdH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgaTtpPUp5KHR5cGVvZiB0PiJ1Ij9lLmxlbmd0aDp0Lmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT10eXBlb2YgdD4idSI/W106dFtyXSYmdFtyXSE9T2JqZWN0P1t0W3JdXTpbXSxlJiZudWxsIT1lW3JdJiYoaVtyXT1pW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJuIGl9X293blBhcmFtZXRlcnModCxlKXtsZXQgaT10LnRvU3RyaW5nKCk7aWYoTXBlLnRlc3Qobj1pKXx8VHBlLnRlc3Qobil8fFNwZS50ZXN0KG4pJiYhRXBlLnRlc3QobikpcmV0dXJuIG51bGw7dmFyIG47aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztsZXQgcj10LmN0b3JQYXJhbWV0ZXJzO2lmKHImJnIhPT1lLmN0b3JQYXJhbWV0ZXJzKXtsZXQgYT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixsPWEubWFwKHU9PnUmJnUudHlwZSksYz1hLm1hcCh1PT51JiZpayh1LmRlY29yYXRvcnMpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhsLGMpfWxldCBvPXQuaGFzT3duUHJvcGVydHkoTWcpJiZ0W01nXSxzPXRoaXMuX3JlZmxlY3QmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJhbXR5cGVzIix0KTtyZXR1cm4gc3x8bz90aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKHMsbyk6SnkodC5sZW5ndGgpfXBhcmFtZXRlcnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duUGFyYW1ldGVycyh0LGUpO3JldHVybiFpJiZlIT09T2JqZWN0JiYoaT10aGlzLnBhcmFtZXRlcnMoZSkpLGl8fFtdfV9vd25Bbm5vdGF0aW9ucyh0LGUpe2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXtsZXQgaT10LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLmFubm90YXRpb25zJiYoaT1pLmFubm90YXRpb25zKSxpfXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUuZGVjb3JhdG9ycz9payh0LmRlY29yYXRvcnMpOnQuaGFzT3duUHJvcGVydHkod2cpP3Rbd2ddOm51bGx9YW5ub3RhdGlvbnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KGkpfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGk9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkucHJvcE1ldGFkYXRhJiYoaT1pLnByb3BNZXRhZGF0YSksaX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7bGV0IGk9dC5wcm9wRGVjb3JhdG9ycyxyPXt9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntyW29dPWlrKGlbb10pfSkscn1yZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShTZyk/dFtTZ106bnVsbH1wcm9wTWV0YWRhdGEodCl7aWYoIVh5KHQpKXJldHVybnt9O2xldCBlPUhTKHQpLGk9e307aWYoZSE9PU9iamVjdCl7bGV0IG89dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMobykuZm9yRWFjaChzPT57aVtzXT1vW3NdfSl9bGV0IHI9dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2gobz0+e2xldCBzPVtdO2kuaGFzT3duUHJvcGVydHkobykmJnMucHVzaCguLi5pW29dKSxzLnB1c2goLi4ucltvXSksaVtvXT1zfSksaX1vd25Qcm9wTWV0YWRhdGEodCl7cmV0dXJuIFh5KHQpJiZ0aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxIUyh0KSl8fHt9fWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJwZSYmZSBpbiB0LnByb3RvdHlwZX19fWZ1bmN0aW9uIFJFKG4pe3JldHVybiBYRyhHRigpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIFhHKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIE9vfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIFRhfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpGfHwiU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2VsZj0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBMcGV8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpdC5ob3N0PSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpnKXQudG9rZW49aS50b2tlbjtlbHNlIGlmKGkgaW5zdGFuY2VvZiB5cGUpe2lmKHZvaWQgMD09PWkuYXR0cmlidXRlTmFtZSl0aHJvdyBuZXcgTXQoMjA0LCExKTt0LmF0dHJpYnV0ZT1pLmF0dHJpYnV0ZU5hbWV9ZWxzZSB0LnRva2VuPWl9ZWxzZSB0LnRva2VuPXZvaWQgMD09PW58fEFycmF5LmlzQXJyYXkobikmJjA9PT1uLmxlbmd0aD9udWxsOm47cmV0dXJuIHR9KHQpKX12YXIgcGI9bmV3IE1hcCxRRz1uZXcgU2V0O2Z1bmN0aW9uIEtHKG4pe3JldHVybiEhKG4udGVtcGxhdGVVcmwmJiFuLmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHxuLnN0eWxlVXJscyYmbi5zdHlsZVVybHMubGVuZ3RoKX12YXIgUGssVVMselMsRWo9bmV3IE1hcDtmdW5jdGlvbiBaRyhuLHQpeyhmdW5jdGlvbihuLHQsZSl7aWYodCYmdCE9PWUpdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIHJlZ2lzdGVyZWQgZm9yICR7bn0gLSAke2NvKHQpfSB2cyAke2NvKHQubmFtZSl9YCl9KSh0LEVqLmdldCh0KXx8bnVsbCxuKSxFai5zZXQodCxuKX1mdW5jdGlvbiAkRygpe3JldHVybiB2b2lkIDAhPT1Qaz9Qazp0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMH1mdW5jdGlvbiBlNigpe2lmKHZvaWQgMD09PVVTJiYoVVM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXtVUz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBVU31mdW5jdGlvbiBPZyhuKXtyZXR1cm4gZTYoKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBXRigpe2lmKHZvaWQgMD09PXpTJiYoelM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXt6Uz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIHpTfWZ1bmN0aW9uIFRqKG4pe3JldHVybiBXRigpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIERqKG4pe3JldHVybiBXRigpPy5jcmVhdGVTY3JpcHQobil8fG59ZnVuY3Rpb24gQWoobil7cmV0dXJuIFdGKCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn12YXIgWnU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgfX0sUms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJIVE1MIn19LE9rPWNsYXNzIGV4dGVuZHMgWnV7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX0sa2s9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJTY3JpcHQifX0sRms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJVUkwifX0sTms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fTtmdW5jdGlvbiAkcyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFp1P24uY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpufWZ1bmN0aW9uIFpsKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBadSYmbi5nZXRUeXBlTmFtZSgpfHxudWxsfShuKTtpZihudWxsIT1lJiZlIT09dCl7aWYoIlJlc291cmNlVVJMIj09PWUmJiJVUkwiPT09dClyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke3R9LCBnb3QgYSAke2V9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gczYobil7bGV0IHQ9bmV3IEJrKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE9nKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBMayh0KTp0fXZhciBMaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhPZyh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSxCaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksbnVsbD09dGhpcy5pbmVydERvY3VtZW50LmJvZHkpe2xldCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7ZS5hcHBlbmRDaGlsZChpKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtpZigiY29udGVudCJpbiBlKXJldHVybiBlLmlubmVySFRNTD1PZyh0KSxlO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7cmV0dXJuIGkuaW5uZXJIVE1MPU9nKHQpLHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGl9c3RyaXBDdXN0b21Oc0F0dHJzKHQpe2xldCBlPXQuYXR0cmlidXRlcztmb3IobGV0IHI9ZS5sZW5ndGgtMTswPHI7ci0tKXtsZXQgcz1lLml0ZW0ocikubmFtZTsoInhtbG5zOm5zMSI9PT1zfHwwPT09cy5pbmRleE9mKCJuczE6IikpJiZ0LnJlbW92ZUF0dHJpYnV0ZShzKX1sZXQgaT10LmZpcnN0Q2hpbGQ7Zm9yKDtpOylpLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGk9aS5uZXh0U2libGluZ319LEtwZT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZGF0YXxmdHB8dGVsfGZpbGV8c21zKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO2Z1bmN0aW9uIEViKG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goS3BlKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIHRkKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuLnNwbGl0KCIsIikpdFtlXT0hMDtyZXR1cm4gdH1mdW5jdGlvbiBUYiguLi5uKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT0hMCk7cmV0dXJuIHR9dmFyIGpTLGE2PXRkKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksbDY9dGQoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxjNj10ZCgicnAscnQiKSxacGU9VGIoYzYsbDYpLEpwZT1UYihsNix0ZCgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksJHBlPVRiKGM2LHRkKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksVms9VGIoYTYsSnBlLCRwZSxacGUpLHFGPXRkKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxlaGU9dGQoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLHRoZT10ZCgiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSx1Nj1UYihxRixlaGUsdGhlKSxuaGU9dGQoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpLGloZT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2cscmhlPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBJaihuKXtyZXR1cm4gbi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShpaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShyaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gWUYobix0KXtsZXQgZT1udWxsO3RyeXtqUz1qU3x8czYobik7bGV0IGk9dD9TdHJpbmcodCk6IiI7ZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpO2xldCByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89ZS5pbm5lckhUTUwsZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTtsZXQgYT0obmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsaT0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9pPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxpJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgcj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHIpe2U9cjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighVmsuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFuaGUuaGFzT3duUHJvcGVydHkoZSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7bGV0IGk9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pLml0ZW0ocikscz1vLm5hbWUsYT1zLnRvTG93ZXJDYXNlKCk7aWYoIXU2Lmhhc093blByb3BlcnR5KGEpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgbD1vLnZhbHVlO3FGW2FdJiYobD1FYihsKSksdGhpcy5idWYucHVzaCgiICIscywnPSInLElqKGwpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtWay5oYXNPd25Qcm9wZXJ0eShlKSYmIWE2Lmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChJaih0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19KS5zYW5pdGl6ZUNoaWxkcmVuKFVrKGUpfHxlKTtyZXR1cm4gT2coYSl9ZmluYWxseXtpZihlKXtsZXQgaT1VayhlKXx8ZTtmb3IoO2kuZmlyc3RDaGlsZDspaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpfX19ZnVuY3Rpb24gVWsobil7cmV0dXJuImNvbnRlbnQiaW4gbiYmZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PW4ubm9kZU5hbWV9KG4pP24uY29udGVudDpudWxsfXZhciBKcj0oKCk9PntyZXR1cm4obj1Kcnx8KEpyPXt9KSlbbi5OT05FPTBdPSJOT05FIixuW24uSFRNTD0xXT0iSFRNTCIsbltuLlNUWUxFPTJdPSJTVFlMRSIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uVVJMPTRdPSJVUkwiLG5bbi5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsSnI7dmFyIG59KSgpO2Z1bmN0aW9uIFhGKG4pe2xldCB0PURiKCk7cmV0dXJuIHQ/VGoodC5zYW5pdGl6ZShKci5IVE1MLG4pfHwiIik6WmwobiwiSFRNTCIpP1RqKCRzKG4pKTpZRigkRygpLHFuKG4pKX1mdW5jdGlvbiBkbChuKXtsZXQgdD1EYigpO3JldHVybiB0P3Quc2FuaXRpemUoSnIuVVJMLG4pfHwiIjpabChuLCJVUkwiKT8kcyhuKTpFYihxbihuKSl9ZnVuY3Rpb24gZDYobil7bGV0IHQ9RGIoKTtpZih0KXJldHVybiBBaih0LnNhbml0aXplKEpyLlJFU09VUkNFX1VSTCxuKXx8IiIpO2lmKFpsKG4sIlJlc291cmNlVVJMIikpcmV0dXJuIEFqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA0LCExKX1mdW5jdGlvbiBEYigpe2xldCBuPVplKCk7cmV0dXJuIG4mJm5bMTJdfXZhciBPRT1uZXcgc2UoIkVOVklST05NRU5UX0lOSVRJQUxJWkVSIikscDY9bmV3IHNlKCJJTkpFQ1RPUiIsLTEpLGg2PW5ldyBzZSgiSU5KRUNUT1JfREVGX1RZUEVTIiksZkU9Y2xhc3N7Z2V0KHQsZT1kYil7aWYoZT09PWRiKXtsZXQgaT1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtjbyh0KX0hYCk7dGhyb3cgaS5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsaX1yZXR1cm4gZX19O2Z1bmN0aW9uIHBoZSguLi5uKXtyZXR1cm57Ilx1MDI3NXByb3ZpZGVycyI6ZjYoMCxuKX19ZnVuY3Rpb24gZjYobiwuLi50KXtsZXQgcixlPVtdLGk9bmV3IFNldDtyZXR1cm4gdWIodCxvPT57bGV0IHM9bzt6ayhzLGUsW10saSkmJihyfHwocj1bXSksci5wdXNoKHMpKX0pLHZvaWQgMCE9PXImJm02KHIsZSksZX1mdW5jdGlvbiBtNihuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXR7cHJvdmlkZXJzOnJ9PW5bZV07dWIocixvPT57dC5wdXNoKG8pfSl9fWZ1bmN0aW9uIHprKG4sdCxlLGkpe2lmKCEobj1xaShuKSkpcmV0dXJuITE7bGV0IHI9bnVsbCxvPWdqKG4pLHM9IW8mJm9sKG4pO2lmKG98fHMpe2lmKHMmJiFzLnN0YW5kYWxvbmUpcmV0dXJuITE7cj1ufWVsc2V7bGV0IGw9bi5uZ01vZHVsZTtpZihvPWdqKGwpLCFvKXJldHVybiExO3I9bH1sZXQgYT1pLmhhcyhyKTtpZihzKXtpZihhKXJldHVybiExO2lmKGkuYWRkKHIpLHMuZGVwZW5kZW5jaWVzKXtsZXQgbD0iZnVuY3Rpb24iPT10eXBlb2Ygcy5kZXBlbmRlbmNpZXM/cy5kZXBlbmRlbmNpZXMoKTpzLmRlcGVuZGVuY2llcztmb3IobGV0IGMgb2YgbCl6ayhjLHQsZSxpKX19ZWxzZXtpZighbylyZXR1cm4hMTt7aWYobnVsbCE9by5pbXBvcnRzJiYhYSl7bGV0IGM7aS5hZGQocik7dHJ5e3ViKG8uaW1wb3J0cyx1PT57emsodSx0LGUsaSkmJihjfHwoYz1bXSksYy5wdXNoKHUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PWMmJm02KGMsdCl9aWYoIWEpe2xldCBjPVFoKHIpfHwoKCk9Pm5ldyByKTt0LnB1c2goe3Byb3ZpZGU6cix1c2VGYWN0b3J5OmMsZGVwczpXaX0se3Byb3ZpZGU6aDYsdXNlVmFsdWU6cixtdWx0aTohMH0se3Byb3ZpZGU6T0UsdXNlVmFsdWU6KCk9PlIociksbXVsdGk6ITB9KX1sZXQgbD1vLnByb3ZpZGVycztudWxsPT1sfHxhfHx1YihsLHU9Pnt0LnB1c2godSl9KX19cmV0dXJuIHIhPT1uJiZ2b2lkIDAhPT1uLnByb3ZpZGVyc312YXIgaGhlPWFyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTphcn0pO2Z1bmN0aW9uIGc2KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZoaGUgaW4gbn1mdW5jdGlvbiBrZyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgcmssa0U9bmV3IHNlKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksUVM9e30sX2hlPXt9O2Z1bmN0aW9uIFFGKCl7cmV0dXJuIHZvaWQgMD09PXJrJiYocms9bmV3IGZFKSxya312YXIgbnA9Y2xhc3N7fSxtRT1jbGFzcyBleHRlbmRzIG5we2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxHayh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KHA2LEVnKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQobnAsRWcodm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KGtFKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChoNi5tdWx0aSxXaSxpaS5TZWxmKSl9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9eGcodGhpcyksaT1pbCh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7eGcoZSksaWwoaSl9fWdldCh0LGU9ZGIsaT1paS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2xldCByPXhnKHRoaXMpLG89aWwodm9pZCAwKTt0cnl7aWYoIShpJmlpLlNraXBTZWxmKSl7bGV0IGE9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1hKXtsZXQgbD0oImZ1bmN0aW9uIj09dHlwZW9mKG49dCl8fCJvYmplY3QiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIHNlKSYmRUYodCk7YT1sJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKGwpP0VnKGprKHQpLFFTKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQodCxhKX1pZihudWxsIT1hKXJldHVybiB0aGlzLmh5ZHJhdGUodCxhKX1yZXR1cm4oaSZpaS5TZWxmP1FGKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9aSZpaS5PcHRpb25hbCYmZT09PWRiP251bGw6ZSl9Y2F0Y2gocyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PXMubmFtZSl7aWYoKHNbaEVdPXNbaEVdfHxbXSkudW5zaGlmdChjbyh0KSkscil0aHJvdyBzO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW2hFXTt0aHJvdyB0W01qXSYmci51bnNoaWZ0KHRbTWpdKSxuLm1lc3NhZ2U9ZnVuY3Rpb24obix0LGUsaT1udWxsKXtuPW4mJiJcbiI9PT1uLmNoYXJBdCgwKSYmIlx1MDI3NSI9PW4uY2hhckF0KDEpP24uc2xpY2UoMik6bjtsZXQgcj1jbyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAoY28pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpjbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZShQcGUsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksbi5uZ1Rva2VuUGF0aD1yLG5baEVdPW51bGwsbn0ocyx0LCJSM0luamVjdG9yRXJyb3IiLHRoaXMuc291cmNlKX10aHJvdyBzfWZpbmFsbHl7aWwobykseGcocil9dmFyIG59cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7bGV0IHQ9eGcodGhpcyksZT1pbCh2b2lkIDApO3RyeXtsZXQgaT10aGlzLmdldChPRS5tdWx0aSxXaSxpaS5TZWxmKTtmb3IobGV0IHIgb2YgaSlyKCl9ZmluYWxseXt4Zyh0KSxpbChlKX19dG9TdHJpbmcoKXtsZXQgdD1bXSxlPXRoaXMucmVjb3Jkcztmb3IobGV0IGkgb2YgZS5rZXlzKCkpdC5wdXNoKGNvKGkpKTtyZXR1cm5gUjNJbmplY3Rvclske3Quam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IE10KDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKHQpe2xldCBlPWtnKHQ9cWkodCkpP3Q6cWkodCYmdC5wcm92aWRlKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBnNihuKT9FZyh2b2lkIDAsbi51c2VWYWx1ZSk6RWcoXzYobiksUVMpfSh0KTtpZihrZyh0KXx8ITAhPT10Lm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoZSk7ZWxzZXtsZXQgcj10aGlzLnJlY29yZHMuZ2V0KGUpO3J8fChyPUVnKHZvaWQgMCxRUywhMCksci5mYWN0b3J5PSgpPT5JayhyLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGUscikpLGU9dCxyLm11bHRpLnB1c2godCl9dGhpcy5yZWNvcmRzLnNldChlLGkpfWh5ZHJhdGUodCxlKXtyZXR1cm4gZS52YWx1ZT09PVFTJiYoZS52YWx1ZT1faGUsZS52YWx1ZT1lLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBlLnZhbHVlJiZlLnZhbHVlJiZudWxsIT09KG49ZS52YWx1ZSkmJiJvYmplY3QiPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3kmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGUudmFsdWUpLGUudmFsdWU7dmFyIG59aW5qZWN0YWJsZURlZkluU2NvcGUodCl7aWYoIXQucHJvdmlkZWRJbilyZXR1cm4hMTtsZXQgZT1xaSh0LnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iYW55Ij09PWV8fHRoaXMuc2NvcGVzLmhhcyhlKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGUpfX07ZnVuY3Rpb24gamsobil7bGV0IHQ9RUYobiksZT1udWxsIT09dD90LmZhY3Rvcnk6UWgobik7aWYobnVsbCE9PWUpcmV0dXJuIGU7aWYobiBpbnN0YW5jZW9mIHNlKXRocm93IG5ldyBNdCgyMDQsITEpO2lmKG4gaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7aWYodD4wKXRocm93IEp5KHQsIj8iKSxuZXcgTXQoMjA0LCExKTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uJiYoblt0RV18fG5bdUddKTtpZih0KXtsZXQgZT1mdW5jdGlvbihuKXtpZihuLmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIG4ubmFtZTtsZXQgdD0oIiIrbikubWF0Y2goL15mdW5jdGlvblxzKihbXlxzKF0rKS8pO3JldHVybiBudWxsPT09dD8iIjp0WzFdfShuKTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7ZX0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7ZX0iIGNsYXNzLmApLHR9cmV0dXJuIG51bGx9KG4pO3JldHVybiBudWxsIT09ZT8oKT0+ZS5mYWN0b3J5KG4pOigpPT5uZXcgbn0obik7dGhyb3cgbmV3IE10KDIwNCwhMSl9ZnVuY3Rpb24gXzYobix0LGUpe2xldCBpO2lmKGtnKG4pKXtsZXQgcj1xaShuKTtyZXR1cm4gUWgocil8fGprKHIpfWlmKGc2KG4pKWk9KCk9PnFpKG4udXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24obil7cmV0dXJuISghbnx8IW4udXNlRmFjdG9yeSl9KG4pKWk9KCk9Pm4udXNlRmFjdG9yeSguLi5JayhuLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VFeGlzdGluZyl9KG4pKWk9KCk9PlIocWkobi51c2VFeGlzdGluZykpO2Vsc2V7bGV0IHI9cWkobiYmKG4udXNlQ2xhc3N8fG4ucHJvdmlkZSkpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hIW4uZGVwc30obikpcmV0dXJuIFFoKHIpfHxqayhyKTtpPSgpPT5uZXcgciguLi5JayhuLmRlcHMpKX1yZXR1cm4gaX1mdW5jdGlvbiBFZyhuLHQsZT0hMSl7cmV0dXJue2ZhY3Rvcnk6bix2YWx1ZTp0LG11bHRpOmU/W106dm9pZCAwfX1mdW5jdGlvbiB3aGUobil7cmV0dXJuISFuLlx1MDI3NXByb3ZpZGVyc31mdW5jdGlvbiBHayhuLHQpe2ZvcihsZXQgZSBvZiBuKUFycmF5LmlzQXJyYXkoZSk/R2soZSx0KTp3aGUoZSk/R2soZS5cdTAyNzVwcm92aWRlcnMsdCk6dChlKX12YXIgV2s9Y2xhc3N7fSxnRT1jbGFzc3t9LHFrPWNsYXNze3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe3Rocm93IGZ1bmN0aW9uKG4pe2xldCB0PUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtjbyhuKX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIHQubmdDb21wb25lbnQ9bix0fSh0KX19LEVvPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5VTEw9bmV3IHFrLG59KSgpO2Z1bmN0aW9uIEVoZSgpe3JldHVybiBHZyhNbygpLFplKCkpfWZ1bmN0aW9uIEdnKG4sdCl7cmV0dXJuIG5ldyBBZSh1bChuLHQpKX12YXIgQWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9ZX19cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189RWhlLG59KSgpO2Z1bmN0aW9uIFRoZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufW5ldyBzZSgiUmVuZGVyZXIySW50ZXJjZXB0b3IiKTt2YXIgcWM9Y2xhc3N7fSxYYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1aZSgpLGU9b3AoTW8oKS5pbmRleCxuKTtyZXR1cm4ocWgoZSk/ZTpuKVsxMV19KCksbn0pKCksQWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLEtsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LEloZT1uZXcgS2woIjE0LjIuMTEiKSxvaz17fTtmdW5jdGlvbiBzayhuKXtyZXR1cm4gbi5uZ09yaWdpbmFsRXJyb3J9dmFyIFNzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2xldCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIix0KSxlJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsZSl9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPXQmJnNrKHQpO2Zvcig7ZSYmc2soZSk7KWU9c2soZSk7cmV0dXJuIGV8fG51bGx9fSxSaGU9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxPaGU9Lyg8fD4pLyx2Nj1uZXcgTWFwLE5oZT0wLFBqPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBZYyhuLHQpe3FoKHQpPyhuW1BqXT10WzIwXSxmdW5jdGlvbihuKXt2Ni5zZXQoblsyMF0sbil9KHQpKTpuW1BqXT10fWZ1bmN0aW9uIEZFKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gS1Mobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdW5jdGlvbj9uKCk6bn12YXIgWWssYWw9KCgpPT57cmV0dXJuKG49YWx8fChhbD17fSkpW24uSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLG5bbi5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLGFsO3ZhciBufSkoKTtmdW5jdGlvbiBLRihuLHQpe3JldHVybiBZayhuLHQpfWZ1bmN0aW9uIFpGKG4pe2xldCB0PW5bM107cmV0dXJuIEp1KHQpP3RbM106dH1mdW5jdGlvbiBKRihuKXtyZXR1cm4gYjYoblsxM10pfWZ1bmN0aW9uICRGKG4pe3JldHVybiBiNihuWzRdKX1mdW5jdGlvbiBiNihuKXtmb3IoO251bGwhPT1uJiYhSnUobik7KW49bls0XTtyZXR1cm4gbn1mdW5jdGlvbiBUZyhuLHQsZSxpLHIpe2lmKG51bGwhPWkpe2xldCBvLHM9ITE7SnUoaSk/bz1pOnFoKGkpJiYocz0hMCxpPWlbMF0pO2xldCBhPU1hKGkpOzA9PT1uJiZudWxsIT09ZT9udWxsPT1yP0U2KHQsZSxhKTpaaCh0LGUsYSxyfHxudWxsLCEwKToxPT09biYmbnVsbCE9PWU/WmgodCxlLGEscnx8bnVsbCwhMCk6Mj09PW4/UjYodCxhLHMpOjM9PT1uJiZ0LmRlc3Ryb3lOb2RlKGEpLG51bGwhPW8mJmZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89ZVs3XTtvIT09TWEoZSkmJlRnKHQsbixpLG8scik7Zm9yKGxldCBhPTEwO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbD1lW2FdO0FiKGxbMV0sbCxuLHQsaSxvKX19KHQsbixvLGUscil9fWZ1bmN0aW9uIGVOKG4sdCl7cmV0dXJuIG4uY3JlYXRlVGV4dCh0KX1mdW5jdGlvbiB4NihuLHQsZSl7bi5zZXRWYWx1ZSh0LGUpfWZ1bmN0aW9uIEdoZShuLHQpe3JldHVybiBuLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShSaGUsdD0+dC5yZXBsYWNlKE9oZSwiXHUyMDBiJDFcdTIwMGIiKSl9KHQpKX1mdW5jdGlvbiB0TihuLHQsZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudCh0LGUpfWZ1bmN0aW9uIEM2KG4sdCl7bGV0IGU9bls5XSxpPWUuaW5kZXhPZih0KSxyPXRbM107NTEyJnRbMl0mJih0WzJdJj0tNTEzLE9GKHIsLTEpKSxlLnNwbGljZShpLDEpfWZ1bmN0aW9uIFhrKG4sdCl7aWYobi5sZW5ndGg8PTEwKXJldHVybjtsZXQgZT0xMCt0LGk9bltlXTtpZihpKXtsZXQgcj1pWzE3XTtudWxsIT09ciYmciE9PW4mJkM2KHIsaSksdD4wJiYobltlLTFdWzRdPWlbNF0pO2xldCBvPXBFKG4sMTArdCk7IWZ1bmN0aW9uKG4sdCl7QWIobix0LHRbMTFdLDIsbnVsbCxudWxsKSx0WzBdPW51bGwsdFs2XT1udWxsfShpWzFdLGkpO2xldCBzPW9bMTldO251bGwhPT1zJiZzLmRldGFjaFZpZXcob1sxXSksaVszXT1udWxsLGlbNF09bnVsbCxpWzJdJj0tNjV9cmV0dXJuIGl9ZnVuY3Rpb24gdzYobix0KXtpZighKDEyOCZ0WzJdKSl7bGV0IGU9dFsxMV07ZS5kZXN0cm95Tm9kZSYmQWIobix0LGUsMyxudWxsLG51bGwpLGZ1bmN0aW9uKG4pe2xldCB0PW5bMTNdO2lmKCF0KXJldHVybiBhayhuWzFdLG4pO2Zvcig7dDspe2xldCBlPW51bGw7aWYocWgodCkpZT10WzEzXTtlbHNle2xldCBpPXRbMTBdO2kmJihlPWkpfWlmKCFlKXtmb3IoO3QmJiF0WzRdJiZ0IT09bjspcWgodCkmJmFrKHRbMV0sdCksdD10WzNdO251bGw9PT10JiYodD1uKSxxaCh0KSYmYWsodFsxXSx0KSxlPXQmJnRbNF19dD1lfX0odCl9fWZ1bmN0aW9uIGFrKG4sdCl7aWYoISgxMjgmdFsyXSkpe3RbMl0mPS02NSx0WzJdfD0xMjgsZnVuY3Rpb24obix0KXtsZXQgZTtpZihudWxsIT1uJiZudWxsIT0oZT1uLmRlc3Ryb3lIb29rcykpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj10W2VbaV1dO2lmKCEociBpbnN0YW5jZW9mIEtoKSl7bGV0IG89ZVtpKzFdO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKz0yKXtsZXQgYT1yW29bc11dLGw9b1tzKzFdO3RyeXtsLmNhbGwoYSl9ZmluYWxseXt9fWVsc2UgdHJ5e28uY2FsbChyKX1maW5hbGx5e319fX0obix0KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY2xlYW51cCxpPXRbN10scj0tMTtpZihudWxsIT09ZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoLTE7bys9MilpZigic3RyaW5nIj09dHlwZW9mIGVbb10pe2xldCBzPWVbbysxXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBzP3ModCk6TWEodFtzXSksbD1pW3I9ZVtvKzJdXSxjPWVbbyszXTsiYm9vbGVhbiI9PXR5cGVvZiBjP2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihlW29dLGwsYyk6Yz49MD9pW3I9Y10oKTppW3I9LWNdLnVuc3Vic2NyaWJlKCksbys9Mn1lbHNle2xldCBzPWlbcj1lW28rMV1dO2Vbb10uY2FsbChzKX1pZihudWxsIT09aSl7Zm9yKGxldCBvPXIrMTtvPGkubGVuZ3RoO28rKykoMCxpW29dKSgpO3RbN109bnVsbH19KG4sdCksMT09PXRbMV0udHlwZSYmdFsxMV0uZGVzdHJveSgpO2xldCBlPXRbMTddO2lmKG51bGwhPT1lJiZKdSh0WzNdKSl7ZSE9PXRbM10mJkM2KGUsdCk7bGV0IGk9dFsxOV07bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX0hZnVuY3Rpb24obil7djYuZGVsZXRlKG5bMjBdKX0odCl9fWZ1bmN0aW9uIE02KG4sdCxlKXtyZXR1cm4gUzYobix0LnBhcmVudCxlKX1mdW5jdGlvbiBTNihuLHQsZSl7bGV0IGk9dDtmb3IoO251bGwhPT1pJiY0MCZpLnR5cGU7KWk9KHQ9aSkucGFyZW50O2lmKG51bGw9PT1pKXJldHVybiBlWzBdO2lmKDImaS5mbGFncyl7bGV0IHI9bi5kYXRhW2kuZGlyZWN0aXZlU3RhcnRdLmVuY2Fwc3VsYXRpb247aWYocj09PXdhLk5vbmV8fHI9PT13YS5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gdWwoaSxlKX1mdW5jdGlvbiBaaChuLHQsZSxpLHIpe24uaW5zZXJ0QmVmb3JlKHQsZSxpLHIpfWZ1bmN0aW9uIEU2KG4sdCxlKXtuLmFwcGVuZENoaWxkKHQsZSl9ZnVuY3Rpb24gUmoobix0LGUsaSxyKXtudWxsIT09aT9aaChuLHQsZSxpLHIpOkU2KG4sdCxlKX1mdW5jdGlvbiBORShuLHQpe3JldHVybiBuLnBhcmVudE5vZGUodCl9ZnVuY3Rpb24gVDYobix0LGUpe3JldHVybiBBNihuLHQsZSl9ZnVuY3Rpb24gRDYobix0LGUpe3JldHVybiA0MCZuLnR5cGU/dWwobixlKTpudWxsfXZhciBRayxBNj1ENjtmdW5jdGlvbiBJNihuLHQpe0E2PW4sUWs9dH1mdW5jdGlvbiBMRShuLHQsZSxpKXtsZXQgcj1NNihuLGksdCksbz10WzExXSxhPVQ2KGkucGFyZW50fHx0WzZdLGksdCk7aWYobnVsbCE9cilpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKVJqKG8scixlW2xdLGEsITEpO2Vsc2UgUmoobyxyLGUsYSwhMSk7dm9pZCAwIT09UWsmJlFrKG8saSx0LGUscil9ZnVuY3Rpb24gWlMobix0KXtpZihudWxsIT09dCl7bGV0IGU9dC50eXBlO2lmKDMmZSlyZXR1cm4gdWwodCxuKTtpZig0JmUpcmV0dXJuIEtrKC0xLG5bdC5pbmRleF0pO2lmKDgmZSl7bGV0IGk9dC5jaGlsZDtpZihudWxsIT09aSlyZXR1cm4gWlMobixpKTt7bGV0IHI9blt0LmluZGV4XTtyZXR1cm4gSnUocik/S2soLTEscik6TWEocil9fWlmKDMyJmUpcmV0dXJuIEtGKHQsbikoKXx8TWEoblt0LmluZGV4XSk7e2xldCBpPVA2KG4sdCk7cmV0dXJuIG51bGwhPT1pP0FycmF5LmlzQXJyYXkoaSk/aVswXTpaUyhaRihuWzE2XSksaSk6WlMobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBQNihuLHQpe3JldHVybiBudWxsIT09dD9uWzE2XVs2XS5wcm9qZWN0aW9uW3QucHJvamVjdGlvbl06bnVsbH1mdW5jdGlvbiBLayhuLHQpe2xldCBlPTEwK24rMTtpZihlPHQubGVuZ3RoKXtsZXQgaT10W2VdLHI9aVsxXS5maXJzdENoaWxkO2lmKG51bGwhPT1yKXJldHVybiBaUyhpLHIpfXJldHVybiB0WzddfWZ1bmN0aW9uIFI2KG4sdCxlKXtsZXQgaT1ORShuLHQpO2kmJmZ1bmN0aW9uKG4sdCxlLGkpe24ucmVtb3ZlQ2hpbGQodCxlLGkpfShuLGksdCxlKX1mdW5jdGlvbiBuTihuLHQsZSxpLHIsbyxzKXtmb3IoO251bGwhPWU7KXtsZXQgYT1pW2UuaW5kZXhdLGw9ZS50eXBlO2lmKHMmJjA9PT10JiYoYSYmWWMoTWEoYSksaSksZS5mbGFnc3w9NCksNjQhPSg2NCZlLmZsYWdzKSlpZig4Jmwpbk4obix0LGUuY2hpbGQsaSxyLG8sITEpLFRnKHQsbixyLGEsbyk7ZWxzZSBpZigzMiZsKXtsZXQgdSxjPUtGKGUsaSk7Zm9yKDt1PWMoKTspVGcodCxuLHIsdSxvKTtUZyh0LG4scixhLG8pfWVsc2UgMTYmbD9PNihuLHQsaSxlLHIsbyk6VGcodCxuLHIsYSxvKTtlPXM/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0aW9uIEFiKG4sdCxlLGkscixvKXtuTihlLGksbi5maXJzdENoaWxkLHQscixvLCExKX1mdW5jdGlvbiBPNihuLHQsZSxpLHIsbyl7bGV0IHM9ZVsxNl0sbD1zWzZdLnByb2plY3Rpb25baS5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKVRnKHQsbixyLGxbY10sbyk7ZWxzZSBuTihuLHQsbCxzWzNdLHIsbywhMCl9ZnVuY3Rpb24gazYobix0LGUpe24uc2V0QXR0cmlidXRlKHQsInN0eWxlIixlKX1mdW5jdGlvbiBpTihuLHQsZSl7IiI9PT1lP24ucmVtb3ZlQXR0cmlidXRlKHQsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfWZ1bmN0aW9uIEY2KG4sdCxlKXtsZXQgaT1uLmxlbmd0aDtmb3IoOzspe2xldCByPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09cilyZXR1cm4gcjtpZigwPT09cnx8bi5jaGFyQ29kZUF0KHItMSk8PTMyKXtsZXQgbz10Lmxlbmd0aDtpZihyK289PT1pfHxuLmNoYXJDb2RlQXQocitvKTw9MzIpcmV0dXJuIHJ9ZT1yKzF9fXZhciBONj0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIHJmZShuLHQsZSl7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGg7KXtsZXQgcj1uW2krK107aWYoZSYmImNsYXNzIj09PXIpe2lmKHI9bltpXSwtMSE9PUY2KHIudG9Mb3dlckNhc2UoKSx0LDApKXJldHVybiEwfWVsc2UgaWYoMT09PXIpe2Zvcig7aTxuLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihyPW5baSsrXSk7KWlmKHIudG9Mb3dlckNhc2UoKT09PXQpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiExfWZ1bmN0aW9uIEw2KG4pe3JldHVybiA0PT09bi50eXBlJiZuLnZhbHVlIT09TjZ9ZnVuY3Rpb24gb2ZlKG4sdCxlKXtyZXR1cm4gdD09PSg0IT09bi50eXBlfHxlP24udmFsdWU6TjYpfWZ1bmN0aW9uIHNmZShuLHQsZSl7bGV0IGk9NCxyPW4uYXR0cnN8fFtdLG89ZnVuY3Rpb24obil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoRkcoblt0XSkpcmV0dXJuIHQ7cmV0dXJuIG4ubGVuZ3RofShyKSxzPSExO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtsZXQgbD10W2FdO2lmKCJudW1iZXIiIT10eXBlb2YgbCl7aWYoIXMpaWYoNCZpKXtpZihpPTJ8MSZpLCIiIT09bCYmIW9mZShuLGwsZSl8fCIiPT09bCYmMT09PXQubGVuZ3RoKXtpZihXbChpKSlyZXR1cm4hMTtzPSEwfX1lbHNle2xldCBjPTgmaT9sOnRbKythXTtpZig4JmkmJm51bGwhPT1uLmF0dHJzKXtpZighcmZlKG4uYXR0cnMsYyxlKSl7aWYoV2woaSkpcmV0dXJuITE7cz0hMH1jb250aW51ZX1sZXQgZD1hZmUoOCZpPyJjbGFzcyI6bCxyLEw2KG4pLGUpO2lmKC0xPT09ZCl7aWYoV2woaSkpcmV0dXJuITE7cz0hMDtjb250aW51ZX1pZigiIiE9PWMpe2xldCBwO3A9ZD5vPyIiOnJbZCsxXS50b0xvd2VyQ2FzZSgpO2xldCBoPTgmaT9wOm51bGw7aWYoaCYmLTEhPT1GNihoLGMsMCl8fDImaSYmYyE9PXApe2lmKFdsKGkpKXJldHVybiExO3M9ITB9fX19ZWxzZXtpZighcyYmIVdsKGkpJiYhV2wobCkpcmV0dXJuITE7aWYocyYmV2wobCkpY29udGludWU7cz0hMSxpPWx8MSZpfX1yZXR1cm4gV2woaSl8fHN9ZnVuY3Rpb24gV2wobil7cmV0dXJuIDA9PSgxJm4pfWZ1bmN0aW9uIGFmZShuLHQsZSxpKXtpZihudWxsPT09dClyZXR1cm4tMTtsZXQgcj0wO2lmKGl8fCFlKXtsZXQgbz0hMTtmb3IoO3I8dC5sZW5ndGg7KXtsZXQgcz10W3JdO2lmKHM9PT1uKXJldHVybiByO2lmKDM9PT1zfHw2PT09cylvPSEwO2Vsc2V7aWYoMT09PXN8fDI9PT1zKXtsZXQgYT10Wysrcl07Zm9yKDsic3RyaW5nIj09dHlwZW9mIGE7KWE9dFsrK3JdO2NvbnRpbnVlfWlmKDQ9PT1zKWJyZWFrO2lmKDA9PT1zKXtyKz00O2NvbnRpbnVlfX1yKz1vPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YoNCk7aWYoZT4tMSlmb3IoZSsrO2U8bi5sZW5ndGg7KXtsZXQgaT1uW2VdO2lmKCJudW1iZXIiPT10eXBlb2YgaSlyZXR1cm4tMTtpZihpPT09dClyZXR1cm4gZTtlKyt9cmV0dXJuLTF9KHQsbil9ZnVuY3Rpb24gQjYobix0LGU9ITEpe2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHNmZShuLHRbaV0sZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZGZlKG4sdCl7ZTpmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXTtpZihuLmxlbmd0aD09PWkubGVuZ3RoKXtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKylpZihuW3JdIT09aVtyXSljb250aW51ZSBlO3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBPaihuLHQpe3JldHVybiBuPyI6bm90KCIrdC50cmltKCkrIikiOnR9ZnVuY3Rpb24gcGZlKG4pe2xldCB0PW5bMF0sZT0xLGk9MixyPSIiLG89ITE7Zm9yKDtlPG4ubGVuZ3RoOyl7bGV0IHM9bltlXTtpZigic3RyaW5nIj09dHlwZW9mIHMpaWYoMiZpKXtsZXQgYT1uWysrZV07cis9IlsiK3MrKGEubGVuZ3RoPjA/Jz0iJythKyciJzoiIikrIl0ifWVsc2UgOCZpP3IrPSIuIitzOjQmaSYmKHIrPSIgIitzKTtlbHNlIiIhPT1yJiYhV2wocykmJih0Kz1PaihvLHIpLHI9IiIpLGk9cyxvPW98fCFXbChpKTtlKyt9cmV0dXJuIiIhPT1yJiYodCs9T2oobyxyKSksdH12YXIgR249e307ZnVuY3Rpb24geChuKXtWNihEaSgpLFplKCksVHMoKStuLCExKX1mdW5jdGlvbiBWNihuLHQsZSxpKXtpZighaSlpZigzPT0oMyZ0WzJdKSl7bGV0IG89bi5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PW8mJnFTKHQsbyxlKX1lbHNle2xldCBvPW4ucHJlT3JkZXJIb29rcztudWxsIT09byYmWVModCxvLDAsZSl9dHAoZSl9dmFyIGtqPXsiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSI6Z2UsIlx1MDI3NVx1MDI3NWRlZmluZUluamVjdG9yIjpVLCJcdTAyNzVcdTAyNzVpbmplY3QiOlIsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRyxyZXNvbHZlRm9yd2FyZFJlZjpxaX07dmFyIGdmZT1hcih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6YXJ9KTtmdW5jdGlvbiBGaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VDbGFzc31mdW5jdGlvbiBOaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VGYWN0b3J5fXZhciBINj13YigiSW5qZWN0YWJsZSIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7bi5oYXNPd25Qcm9wZXJ0eSh0RSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHRFLHtnZXQ6KCk9PihudWxsPT09ZSYmKGU9c2woKS5jb21waWxlSW5qZWN0YWJsZShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NXByb3YuanNgLGZ1bmN0aW9uKG4sdCl7bGV0IGU9dHx8e3Byb3ZpZGVkSW46bnVsbH0saT17bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjplLnByb3ZpZGVkSW59O3JldHVybihGaihlKXx8TmooZSkpJiZ2b2lkIDAhPT1lLmRlcHMmJihpLmRlcHM9WEcoZS5kZXBzKSksRmooZSk/aS51c2VDbGFzcz1lLnVzZUNsYXNzOmZ1bmN0aW9uKG4pe3JldHVybiBnZmUgaW4gbn0oZSk/aS51c2VWYWx1ZT1lLnVzZVZhbHVlOk5qKGUpP2kudXNlRmFjdG9yeT1lLnVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIHZvaWQgMCE9PW4udXNlRXhpc3Rpbmd9KGUpJiYoaS51c2VFeGlzdGluZz1lLnVzZUV4aXN0aW5nKSxpfShuLHQpKSksZSl9KSxuLmhhc093blByb3BlcnR5KFF1KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj1zbCgpO2k9ci5jb21waWxlRmFjdG9yeShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bix0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0OnIuRmFjdG9yeVRhcmdldC5JbmplY3RhYmxlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMH0pfShuLHQpKTtmdW5jdGlvbiBMaihuLHQ9bnVsbCxlPW51bGwsaSl7bGV0IHI9VTYobix0LGUsaSk7cmV0dXJuIHIucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCkscn1mdW5jdGlvbiBVNihuLHQ9bnVsbCxlPW51bGwsaSxyPW5ldyBTZXQpe2xldCBvPVtlfHxXaSxwaGUobildO3JldHVybiBpPWl8fCgib2JqZWN0Ij09dHlwZW9mIG4/dm9pZCAwOmNvKG4pKSxuZXcgbUUobyx0fHxRRigpLGl8fG51bGwscil9dmFyIHpuPSgoKT0+e2NsYXNzIG57c3RhdGljIGNyZWF0ZShlLGkpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIExqKHtuYW1lOiIifSxpLGUsIiIpO3tsZXQgcj1lLm5hbWU/PyIiO3JldHVybiBMaih7bmFtZTpyfSxlLnBhcmVudCxlLnByb3ZpZGVycyxyKX19fXJldHVybiBuLlRIUk9XX0lGX05PVF9GT1VORD1kYixuLk5VTEw9bmV3IGZFLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PlIocDYpfSksbi5fX05HX0VMRU1FTlRfSURfXz0tMSxufSkoKSxlYj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHRoaXMudG9rZW49dCx0aGlzLmlkPWUsIXQpdGhyb3cgbmV3IE10KDIwOCwhMSk7dGhpcy5kaXNwbGF5TmFtZT1jbyh0aGlzLnRva2VuKX1zdGF0aWMgZ2V0KHQpe3JldHVybiBCai5nZXQocWkodCkpfXN0YXRpYyBnZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIEJqLm51bWJlck9mS2V5c319LEJqPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FsbEtleXM9bmV3IE1hcH1nZXQodCl7aWYodCBpbnN0YW5jZW9mIGViKXJldHVybiB0O2lmKHRoaXMuX2FsbEtleXMuaGFzKHQpKXJldHVybiB0aGlzLl9hbGxLZXlzLmdldCh0KTtsZXQgZT1uZXcgZWIodCxlYi5udW1iZXJPZktleXMpO3JldHVybiB0aGlzLl9hbGxLZXlzLnNldCh0LGUpLGV9Z2V0IG51bWJlck9mS2V5cygpe3JldHVybiB0aGlzLl9hbGxLZXlzLnNpemV9fTtmdW5jdGlvbiB3KG4sdD1paS5EZWZhdWx0KXtsZXQgZT1aZSgpO3JldHVybiBudWxsPT09ZT9SKG4sdCk6ekcoTW8oKSxlLHFpKG4pLHQpfWZ1bmN0aW9uIEpsKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9ZnVuY3Rpb24gR1Mobix0KXtyZXR1cm4gbjw8MTd8dDw8Mn1mdW5jdGlvbiBKaChuKXtyZXR1cm4gbj4+MTcmMzI3Njd9ZnVuY3Rpb24gSmsobil7cmV0dXJuIDJ8bn1mdW5jdGlvbiBGZyhuKXtyZXR1cm4oMTMxMDY4Jm4pPj4yfWZ1bmN0aW9uIGxrKG4sdCl7cmV0dXJuLTEzMTA2OSZufHQ8PDJ9ZnVuY3Rpb24gJGsobil7cmV0dXJuIDF8bn1mdW5jdGlvbiB6NihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj1lW2ldLG89ZVtpKzFdO2lmKC0xIT09byl7bGV0IHM9bi5kYXRhW29dO0xGKHIpLHMuY29udGVudFF1ZXJpZXMoMix0W29dLG8pfX19ZnVuY3Rpb24gQkUobix0LGUsaSxyLG8scyxhLGwsYyx1KXtsZXQgZD10LmJsdWVwcmludC5zbGljZSgpO3JldHVybiBkWzBdPXIsZFsyXT03NnxpLChudWxsIT09dXx8biYmMTAyNCZuWzJdKSYmKGRbMl18PTEwMjQpLHdHKGQpLGRbM109ZFsxNV09bixkWzhdPWUsZFsxMF09c3x8biYmblsxMF0sZFsxMV09YXx8biYmblsxMV0sZFsxMl09bHx8biYmblsxMl18fG51bGwsZFs5XT1jfHxuJiZuWzldfHxudWxsLGRbNl09byxkWzIwXT1OaGUrKyxkWzIxXT11LGRbMTZdPTI9PXQudHlwZT9uWzE2XTpkLGR9ZnVuY3Rpb24gV2cobix0LGUsaSxyKXtsZXQgbz1uLmRhdGFbdF07aWYobnVsbD09PW8pbz1yTihuLHQsZSxpLHIpLFluLmxGcmFtZS5pbkkxOG4mJihvLmZsYWdzfD02NCk7ZWxzZSBpZig2NCZvLnR5cGUpe28udHlwZT1lLG8udmFsdWU9aSxvLmF0dHJzPXI7bGV0IHM9bGIoKTtvLmluamVjdG9ySW5kZXg9bnVsbD09PXM/LTE6cy5pbmplY3RvckluZGV4fXJldHVybiBXYyhvLCEwKSxvfWZ1bmN0aW9uIHJOKG4sdCxlLGkscil7bGV0IG89U0coKSxzPWtGKCksbD1uLmRhdGFbdF09ZnVuY3Rpb24obix0LGUsaSxyLG8pe3JldHVybnt0eXBlOmUsaW5kZXg6aSxpbnNlcnRCZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6dD90LmluamVjdG9ySW5kZXg6LTEsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOnIsYXR0cnM6byxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXdzOm51bGwsbmV4dDpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAscz9vOm8mJm8ucGFyZW50LGUsdCxpLHIpO3JldHVybiBudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPWwpLG51bGwhPT1vJiYocz9udWxsPT1vLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihvLmNoaWxkPWwpOm51bGw9PT1vLm5leHQmJihvLm5leHQ9bCkpLGx9ZnVuY3Rpb24gcWcobix0LGUsaSl7aWYoMD09PWUpcmV0dXJuLTE7bGV0IHI9dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxlO28rKyl0LnB1c2goaSksbi5ibHVlcHJpbnQucHVzaChpKSxuLmRhdGEucHVzaChudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBvTihuLHQsZSl7QkYodCk7dHJ5e2xldCBpPW4udmlld1F1ZXJ5O251bGwhPT1pJiZ0RigxLGksZSk7bGV0IHI9bi50ZW1wbGF0ZTtudWxsIT09ciYmajYobix0LHIsMSxlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmKG4uZmlyc3RDcmVhdGVQYXNzPSExKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLG4uc3RhdGljVmlld1F1ZXJpZXMmJnRGKDIsbi52aWV3UXVlcnksZSk7bGV0IG89bi5jb21wb25lbnRzO251bGwhPT1vJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWpmZShuLHRbZV0pfSh0LG8pfWNhdGNoKGkpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxpfWZpbmFsbHl7dFsyXSY9LTUsVkYoKX19ZnVuY3Rpb24gVkUobix0LGUsaSl7bGV0IHI9dFsyXTtpZigxMjghPSgxMjgmcikpe0JGKHQpO3RyeXt3Ryh0KSxFRyhuLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09ZSYmajYobix0LGUsMixpKTtsZXQgcz0zPT0oMyZyKTtpZihzKXtsZXQgYz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09YyYmcVModCxjLG51bGwpfWVsc2V7bGV0IGM9bi5wcmVPcmRlckhvb2tzO251bGwhPT1jJiZZUyh0LGMsMCxudWxsKSxlayh0LDApfWlmKGZ1bmN0aW9uKG4pe2ZvcihsZXQgdD1KRihuKTtudWxsIT09dDt0PSRGKHQpKXtpZighdFsyXSljb250aW51ZTtsZXQgZT10WzldO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLG89clszXTswPT0oNTEyJnJbMl0pJiZPRihvLDEpLHJbMl18PTUxMn19fSh0KSxmdW5jdGlvbihuKXtmb3IobGV0IHQ9SkYobik7bnVsbCE9PXQ7dD0kRih0KSlmb3IobGV0IGU9MTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV0scj1pWzFdO29FKGkpJiZWRShyLGksci50ZW1wbGF0ZSxpWzhdKX19KHQpLG51bGwhPT1uLmNvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLHMpe2xldCBjPW4uY29udGVudENoZWNrSG9va3M7bnVsbCE9PWMmJnFTKHQsYyl9ZWxzZXtsZXQgYz1uLmNvbnRlbnRIb29rcztudWxsIT09YyYmWVModCxjLDEpLGVrKHQsMSl9IWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PWUpdHJ5e2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldO2lmKHI8MCl0cCh+cik7ZWxzZXtsZXQgbz1yLHM9ZVsrK2ldLGE9ZVsrK2ldO1FkZShzLG8pLGEoMix0W29dKX19fWZpbmFsbHl7dHAoLTEpfX0obix0KTtsZXQgYT1uLmNvbXBvbmVudHM7bnVsbCE9PWEmJmZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspemZlKG4sdFtlXSl9KHQsYSk7bGV0IGw9bi52aWV3UXVlcnk7aWYobnVsbCE9PWwmJnRGKDIsbCxpKSxzKXtsZXQgYz1uLnZpZXdDaGVja0hvb2tzO251bGwhPT1jJiZxUyh0LGMpfWVsc2V7bGV0IGM9bi52aWV3SG9va3M7bnVsbCE9PWMmJllTKHQsYywyKSxlayh0LDIpfSEwPT09bi5maXJzdFVwZGF0ZVBhc3MmJihuLmZpcnN0VXBkYXRlUGFzcz0hMSksdFsyXSY9LTQxLDUxMiZ0WzJdJiYodFsyXSY9LTUxMyxPRih0WzNdLC0xKSl9ZmluYWxseXtWRigpfX19ZnVuY3Rpb24gajYobix0LGUsaSxyKXtsZXQgbz1UcygpLHM9MiZpO3RyeXt0cCgtMSkscyYmdC5sZW5ndGg+MjImJlY2KG4sdCwyMiwhMSksZShpLHIpfWZpbmFsbHl7dHAobyl9fWZ1bmN0aW9uIEc2KG4sdCxlKXtpZihQRih0KSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBvPXQuZGlyZWN0aXZlU3RhcnQ7bzxyO28rKyl7bGV0IHM9bi5kYXRhW29dO3MuY29udGVudFF1ZXJpZXMmJnMuY29udGVudFF1ZXJpZXMoMSxlW29dLG8pfX19ZnVuY3Rpb24gc04obix0LGUpeyFNRygpfHwoZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZS5kaXJlY3RpdmVTdGFydCxvPWUuZGlyZWN0aXZlRW5kO24uZmlyc3RDcmVhdGVQYXNzfHxjYihlLHQpLFljKGksdCk7bGV0IHM9ZS5pbml0aWFsSW5wdXRzO2ZvcihsZXQgYT1yO2E8bzthKyspe2xldCBsPW4uZGF0YVthXSxjPVFsKGwpO2MmJkxmZSh0LGUsbCk7bGV0IHU9Q2IodCxuLGEsZSk7WWModSx0KSxudWxsIT09cyYmQmZlKDAsYS1yLHUsbCwwLHMpLGMmJihvcChlLmluZGV4LHQpWzhdPXUpfX0obix0LGUsdWwoZSx0KSksMTI4PT0oMTI4JmUuZmxhZ3MpJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9ZS5kaXJlY3RpdmVTdGFydCxyPWUuZGlyZWN0aXZlRW5kLG89ZS5pbmRleCxzPVluLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7dHJ5e3RwKG8pO2ZvcihsZXQgYT1pO2E8cjthKyspe2xldCBsPW4uZGF0YVthXSxjPXRbYV07U2soYSksKG51bGwhPT1sLmhvc3RCaW5kaW5nc3x8MCE9PWwuaG9zdFZhcnN8fG51bGwhPT1sLmhvc3RBdHRycykmJks2KGwsYyl9fWZpbmFsbHl7dHAoLTEpLFNrKHMpfX0obix0LGUpKX1mdW5jdGlvbiBhTihuLHQsZT11bCl7bGV0IGk9dC5sb2NhbE5hbWVzO2lmKG51bGwhPT1pKXtsZXQgcj10LmluZGV4KzE7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKz0yKXtsZXQgcz1pW28rMV0sYT0tMT09PXM/ZSh0LG4pOm5bc107bltyKytdPWF9fX1mdW5jdGlvbiBXNihuKXtsZXQgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9bE4oMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzKTp0fWZ1bmN0aW9uIGxOKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCB1PTIyK2ksZD11K3IscD1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKGk8bj9udWxsOkduKTtyZXR1cm4gZX0odSxkKSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjO3JldHVybiBwWzFdPXt0eXBlOm4sYmx1ZXByaW50OnAsdGVtcGxhdGU6ZSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OmEsZGVjbFROb2RlOnQsZGF0YTpwLnNsaWNlKCkuZmlsbChudWxsLHUpLGJpbmRpbmdTdGFydEluZGV4OnUsZXhwYW5kb1N0YXJ0SW5kZXg6ZCxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygcz9zKCk6cyxmaXJzdENoaWxkOm51bGwsc2NoZW1hczpsLGNvbnN0czpoLGluY29tcGxldGVGaXJzdFBhc3M6ITF9fWZ1bmN0aW9uIHE2KG4sdCxlLGkpe2xldCByPWlXKHQpO251bGw9PT1lP3IucHVzaChpKTooci5wdXNoKGUpLG4uZmlyc3RDcmVhdGVQYXNzJiZyVyhuKS5wdXNoKGksci5sZW5ndGgtMSkpfWZ1bmN0aW9uIFZqKG4sdCxlKXtmb3IobGV0IGkgaW4gbilpZihuLmhhc093blByb3BlcnR5KGkpKXtsZXQgcj1uW2ldOyhlPW51bGw9PT1lP3t9OmUpLmhhc093blByb3BlcnR5KGkpP2VbaV0ucHVzaCh0LHIpOmVbaV09W3Qscl19cmV0dXJuIGV9ZnVuY3Rpb24gWTYobix0KXtsZXQgaT10LmRpcmVjdGl2ZUVuZCxyPW4uZGF0YSxvPXQuYXR0cnMscz1bXSxhPW51bGwsbD1udWxsO2ZvcihsZXQgYz10LmRpcmVjdGl2ZVN0YXJ0O2M8aTtjKyspe2xldCB1PXJbY10sZD11LmlucHV0cyxwPW51bGw9PT1vfHxMNih0KT9udWxsOlZmZShkLG8pO3MucHVzaChwKSxhPVZqKGQsYyxhKSxsPVZqKHUub3V0cHV0cyxjLGwpfW51bGwhPT1hJiYoYS5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKHQuZmxhZ3N8PTE2KSxhLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYodC5mbGFnc3w9MzIpKSx0LmluaXRpYWxJbnB1dHM9cyx0LmlucHV0cz1hLHQub3V0cHV0cz1sfWZ1bmN0aW9uIERhKG4sdCxlLGkscixvLHMsYSl7bGV0IHUsbD11bCh0LGUpLGM9dC5pbnB1dHM7IWEmJm51bGwhPWMmJih1PWNbaV0pPyhkTihuLGUsdSxpLHIpLFJGKHQpJiZYNihlLHQuaW5kZXgpKTozJnQudHlwZSYmKGk9ZnVuY3Rpb24obil7cmV0dXJuImNsYXNzIj09PW4/ImNsYXNzTmFtZSI6ImZvciI9PT1uPyJodG1sRm9yIjoiZm9ybWFjdGlvbiI9PT1uPyJmb3JtQWN0aW9uIjoiaW5uZXJIdG1sIj09PW4/ImlubmVySFRNTCI6InJlYWRvbmx5Ij09PW4/InJlYWRPbmx5IjoidGFiaW5kZXgiPT09bj8idGFiSW5kZXgiOm59KGkpLHI9bnVsbCE9cz9zKHIsdC52YWx1ZXx8IiIsaSk6cixvLnNldFByb3BlcnR5KGwsaSxyKSl9ZnVuY3Rpb24gWDYobix0KXtsZXQgZT1vcCh0LG4pOzE2JmVbMl18fChlWzJdfD0zMil9ZnVuY3Rpb24gY04obix0LGUsaSl7bGV0IHI9ITE7aWYoTUcoKSl7bGV0IG89ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGlyZWN0aXZlUmVnaXN0cnkscj1udWxsO2lmKGkpZm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBzPWlbb107QjYoZSxzLnNlbGVjdG9ycywhMSkmJihyfHwocj1bXSksZEUoY2IoZSx0KSxuLHMudHlwZSksUWwocyk/KFo2KG4sZSksci51bnNoaWZ0KHMpKTpyLnB1c2gocykpfXJldHVybiByfShuLHQsZSkscz1udWxsPT09aT9udWxsOnsiIjotMX07aWYobnVsbCE9PW8pe3I9ITAsSjYoZSxuLmRhdGEubGVuZ3RoLG8ubGVuZ3RoKTtmb3IobGV0IHU9MDt1PG8ubGVuZ3RoO3UrKyl7bGV0IGQ9b1t1XTtkLnByb3ZpZGVyc1Jlc29sdmVyJiZkLnByb3ZpZGVyc1Jlc29sdmVyKGQpfWxldCBhPSExLGw9ITEsYz1xZyhuLHQsby5sZW5ndGgsbnVsbCk7Zm9yKGxldCB1PTA7dTxvLmxlbmd0aDt1Kyspe2xldCBkPW9bdV07ZS5tZXJnZWRBdHRycz1hRShlLm1lcmdlZEF0dHJzLGQuaG9zdEF0dHJzKSwkNihuLGUsdCxjLGQpLE5mZShjLGQscyksbnVsbCE9PWQuY29udGVudFF1ZXJpZXMmJihlLmZsYWdzfD04KSwobnVsbCE9PWQuaG9zdEJpbmRpbmdzfHxudWxsIT09ZC5ob3N0QXR0cnN8fDAhPT1kLmhvc3RWYXJzKSYmKGUuZmxhZ3N8PTEyOCk7bGV0IHA9ZC50eXBlLnByb3RvdHlwZTshYSYmKHAubmdPbkNoYW5nZXN8fHAubmdPbkluaXR8fHAubmdEb0NoZWNrKSYmKChuLnByZU9yZGVySG9va3N8fChuLnByZU9yZGVySG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGE9ITApLCFsJiYocC5uZ09uQ2hhbmdlc3x8cC5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJDaGVja0hvb2tzfHwobi5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGw9ITApLGMrK31ZNihuLGUpfXMmJmZ1bmN0aW9uKG4sdCxlKXtpZih0KXtsZXQgaT1uLmxvY2FsTmFtZXM9W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKz0yKXtsZXQgbz1lW3RbcisxXV07aWYobnVsbD09byl0aHJvdyBuZXcgTXQoLTMwMSwhMSk7aS5wdXNoKHRbcl0sbyl9fX0oZSxpLHMpfXJldHVybiBlLm1lcmdlZEF0dHJzPWFFKGUubWVyZ2VkQXR0cnMsZS5hdHRycykscn1mdW5jdGlvbiBRNihuLHQsZSxpLHIsbyl7bGV0IHM9by5ob3N0QmluZGluZ3M7aWYocyl7bGV0IGE9bi5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PWEmJihhPW4uaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtsZXQgbD1+dC5pbmRleDsoZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7Zm9yKDt0PjA7KXtsZXQgZT1uWy0tdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiZlPDApcmV0dXJuIGV9cmV0dXJuIDB9KShhKSE9bCYmYS5wdXNoKGwpLGEucHVzaChpLHIscyl9fWZ1bmN0aW9uIEs2KG4sdCl7bnVsbCE9PW4uaG9zdEJpbmRpbmdzJiZuLmhvc3RCaW5kaW5ncygxLHQpfWZ1bmN0aW9uIFo2KG4sdCl7dC5mbGFnc3w9Miwobi5jb21wb25lbnRzfHwobi5jb21wb25lbnRzPVtdKSkucHVzaCh0LmluZGV4KX1mdW5jdGlvbiBOZmUobix0LGUpe2lmKGUpe2lmKHQuZXhwb3J0QXMpZm9yKGxldCBpPTA7aTx0LmV4cG9ydEFzLmxlbmd0aDtpKyspZVt0LmV4cG9ydEFzW2ldXT1uO1FsKHQpJiYoZVsiIl09bil9fWZ1bmN0aW9uIEo2KG4sdCxlKXtuLmZsYWdzfD0xLG4uZGlyZWN0aXZlU3RhcnQ9dCxuLmRpcmVjdGl2ZUVuZD10K2Usbi5wcm92aWRlckluZGV4ZXM9dH1mdW5jdGlvbiAkNihuLHQsZSxpLHIpe24uZGF0YVtpXT1yO2xldCBvPXIuZmFjdG9yeXx8KHIuZmFjdG9yeT1RaChyLnR5cGUpKSxzPW5ldyBLaChvLFFsKHIpLHcpO24uYmx1ZXByaW50W2ldPXMsZVtpXT1zLFE2KG4sdCwwLGkscWcobixlLHIuaG9zdFZhcnMsR24pLHIpfWZ1bmN0aW9uIExmZShuLHQsZSl7bGV0IGk9dWwodCxuKSxyPVc2KGUpLG89blsxMF0scz1IRShuLEJFKG4scixudWxsLGUub25QdXNoPzMyOjE2LGksdCxvLG8uY3JlYXRlUmVuZGVyZXIoaSxlKSxudWxsLG51bGwsbnVsbCkpO25bdC5pbmRleF09c31mdW5jdGlvbiBRYyhuLHQsZSxpLHIsbyl7bGV0IHM9dWwobix0KTt1Tih0WzExXSxzLG8sbi52YWx1ZSxlLGkscil9ZnVuY3Rpb24gdU4obix0LGUsaSxyLG8scyl7aWYobnVsbD09byluLnJlbW92ZUF0dHJpYnV0ZSh0LHIsZSk7ZWxzZXtsZXQgYT1udWxsPT1zP3FuKG8pOnMobyxpfHwiIixyKTtuLnNldEF0dHJpYnV0ZSh0LHIsYSxlKX19ZnVuY3Rpb24gQmZlKG4sdCxlLGkscixvKXtsZXQgcz1vW3RdO2lmKG51bGwhPT1zKXtsZXQgYT1pLnNldElucHV0O2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7KXtsZXQgYz1zW2wrK10sdT1zW2wrK10sZD1zW2wrK107bnVsbCE9PWE/aS5zZXRJbnB1dChlLGQsYyx1KTplW3VdPWR9fX1mdW5jdGlvbiBWZmUobix0KXtsZXQgZT1udWxsLGk9MDtmb3IoO2k8dC5sZW5ndGg7KXtsZXQgcj10W2ldO2lmKDAhPT1yKWlmKDUhPT1yKXtpZigibnVtYmVyIj09dHlwZW9mIHIpYnJlYWs7bi5oYXNPd25Qcm9wZXJ0eShyKSYmKG51bGw9PT1lJiYoZT1bXSksZS5wdXNoKHIsbltyXSx0W2krMV0pKSxpKz0yfWVsc2UgaSs9MjtlbHNlIGkrPTR9cmV0dXJuIGV9ZnVuY3Rpb24gZVcobix0LGUsaSl7cmV0dXJuIG5ldyBBcnJheShuLCEwLCExLHQsbnVsbCwwLGksZSxudWxsLG51bGwpfWZ1bmN0aW9uIHpmZShuLHQpe2xldCBlPW9wKHQsbik7aWYob0UoZSkpe2xldCBpPWVbMV07NDgmZVsyXT9WRShpLGUsaS50ZW1wbGF0ZSxlWzhdKTplWzVdPjAmJmVGKGUpfX1mdW5jdGlvbiBlRihuKXtmb3IobGV0IGk9SkYobik7bnVsbCE9PWk7aT0kRihpKSlmb3IobGV0IHI9MTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07aWYob0UobykpaWYoNTEyJm9bMl0pe2xldCBzPW9bMV07VkUocyxvLHMudGVtcGxhdGUsb1s4XSl9ZWxzZSBvWzVdPjAmJmVGKG8pfWxldCBlPW5bMV0uY29tcG9uZW50cztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9b3AoZVtpXSxuKTtvRShyKSYmcls1XT4wJiZlRihyKX19ZnVuY3Rpb24gamZlKG4sdCl7bGV0IGU9b3AodCxuKSxpPWVbMV07KGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPXQubGVuZ3RoO2U8bi5ibHVlcHJpbnQubGVuZ3RoO2UrKyl0LnB1c2gobi5ibHVlcHJpbnRbZV0pfSkoaSxlKSxvTihpLGUsZVs4XSl9ZnVuY3Rpb24gSEUobix0KXtyZXR1cm4gblsxM10/blsxNF1bNF09dDpuWzEzXT10LG5bMTRdPXQsdH1mdW5jdGlvbiB0VyhuKXtmb3IoO247KXtuWzJdfD0zMjtsZXQgdD1aRihuKTtpZihGZGUobikmJiF0KXJldHVybiBuO249dH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuVyhuLHQsZSxpPSEwKXtsZXQgcj10WzEwXTtyLmJlZ2luJiZyLmJlZ2luKCk7dHJ5e1ZFKG4sdCxuLnRlbXBsYXRlLGUpfWNhdGNoKHMpe3Rocm93IGkmJnNXKHQscyksc31maW5hbGx5e3IuZW5kJiZyLmVuZCgpfX1mdW5jdGlvbiB0RihuLHQsZSl7TEYoMCksdChuLGUpfWZ1bmN0aW9uIGlXKG4pe3JldHVybiBuWzddfHwobls3XT1bXSl9ZnVuY3Rpb24gclcobil7cmV0dXJuIG4uY2xlYW51cHx8KG4uY2xlYW51cD1bXSl9ZnVuY3Rpb24gb1cobix0LGUpe3JldHVybihudWxsPT09bnx8UWwobikpJiYoZT1mdW5jdGlvbihuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bMV0pcmV0dXJuIG47bj1uWzBdfXJldHVybiBudWxsfShlW3QuaW5kZXhdKSksZVsxMV19ZnVuY3Rpb24gc1cobix0KXtsZXQgZT1uWzldLGk9ZT9lLmdldChTcyxudWxsKTpudWxsO2kmJmkuaGFuZGxlRXJyb3IodCl9ZnVuY3Rpb24gZE4obix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoOyl7bGV0IHM9ZVtvKytdLGE9ZVtvKytdLGw9dFtzXSxjPW4uZGF0YVtzXTtudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwscixpLGEpOmxbYV09cn19ZnVuY3Rpb24gbmQobix0LGUpe2xldCBpPUlFKHQsbik7eDYoblsxMV0saSxlKX1mdW5jdGlvbiBfRShuLHQsZSl7bGV0IGk9ZT9uLnN0eWxlczpudWxsLHI9ZT9uLmNsYXNzZXM6bnVsbCxvPTA7aWYobnVsbCE9PXQpZm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBhPXRbc107Im51bWJlciI9PXR5cGVvZiBhP289YToxPT1vP3I9YmsocixhKToyPT1vJiYoaT1iayhpLGErIjogIit0Wysrc10rIjsiKSl9ZT9uLnN0eWxlcz1pOm4uc3R5bGVzV2l0aG91dEhvc3Q9aSxlP24uY2xhc3Nlcz1yOm4uY2xhc3Nlc1dpdGhvdXRIb3N0PXJ9ZnVuY3Rpb24gSlMobix0LGUsaSxyPSExKXtmb3IoO251bGwhPT1lOyl7bGV0IG89dFtlLmluZGV4XTtpZihudWxsIT09byYmaS5wdXNoKE1hKG8pKSxKdShvKSlmb3IobGV0IGE9MTA7YTxvLmxlbmd0aDthKyspe2xldCBsPW9bYV0sYz1sWzFdLmZpcnN0Q2hpbGQ7bnVsbCE9PWMmJkpTKGxbMV0sbCxjLGkpfWxldCBzPWUudHlwZTtpZig4JnMpSlMobix0LGUuY2hpbGQsaSk7ZWxzZSBpZigzMiZzKXtsZXQgbCxhPUtGKGUsdCk7Zm9yKDtsPWEoKTspaS5wdXNoKGwpfWVsc2UgaWYoMTYmcyl7bGV0IGE9UDYodCxlKTtpZihBcnJheS5pc0FycmF5KGEpKWkucHVzaCguLi5hKTtlbHNle2xldCBsPVpGKHRbMTZdKTtKUyhsWzFdLGwsYSxpLCEwKX19ZT1yP2UucHJvamVjdGlvbk5leHQ6ZS5uZXh0fXJldHVybiBpfXZhciAkaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2xWaWV3PXQsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWUsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IHJvb3ROb2Rlcygpe2xldCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gSlMoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19c2V0IGNvbnRleHQodCl7dGhpcy5fbFZpZXdbOF09dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDEyOD09KDEyOCZ0aGlzLl9sVmlld1syXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtsZXQgdD10aGlzLl9sVmlld1szXTtpZihKdSh0KSl7bGV0IGU9dFs4XSxpPWU/ZS5pbmRleE9mKHRoaXMpOi0xO2k+LTEmJihYayh0LGkpLHBFKGUsaSkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfXc2KHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kodCl7cTYodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsbnVsbCx0KX1tYXJrRm9yQ2hlY2soKXt0Vyh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXd8fHRoaXMuX2xWaWV3KX1kZXRhY2goKXt0aGlzLl9sVmlld1syXSY9LTY1fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbMl18PTY0fWRldGVjdENoYW5nZXMoKXtuVyh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgTXQoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dmFyIHQ7dGhpcy5fYXBwUmVmPW51bGwsQWIodGhpcy5fbFZpZXdbMV0sdD10aGlzLl9sVmlldyx0WzExXSwyLG51bGwsbnVsbCl9YXR0YWNoVG9BcHBSZWYodCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IE10KDkwMiwhMSk7dGhpcy5fYXBwUmVmPXR9fSxuRj1jbGFzcyBleHRlbmRzICRoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7bGV0IHQ9dGhpcy5fdmlldztuVyh0WzFdLHQsdFs4XSwhMSl9Y2hlY2tOb0NoYW5nZXMoKXt9Z2V0IGNvbnRleHQoKXtyZXR1cm4gbnVsbH19LGhiPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPXR9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCl7bGV0IGU9b2wodCk7cmV0dXJuIG5ldyB2RShlLHRoaXMubmdNb2R1bGUpfX07ZnVuY3Rpb24gSGoobil7bGV0IHQ9W107Zm9yKGxldCBlIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShlKSYmdC5wdXNoKHtwcm9wTmFtZTpuW2VdLHRlbXBsYXRlTmFtZTplfSk7cmV0dXJuIHR9dmFyIHZFPWNsYXNzIGV4dGVuZHMgZ0V7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj10LnNlbGVjdG9ycy5tYXAocGZlKS5qb2luKCIsIiksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWdldCBpbnB1dHMoKXtyZXR1cm4gSGoodGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX1nZXQgb3V0cHV0cygpe3JldHVybiBIaih0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jcmVhdGUodCxlLGkscil7bGV0IG89KHI9cnx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIG5wP3I6cj8uaW5qZWN0b3I7byYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKG89dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKG8pfHxvKTtsZXQgcz1vP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaW5qZWN0b3I9dCx0aGlzLnBhcmVudEluamVjdG9yPWV9Z2V0KHQsZSxpKXtsZXQgcj10aGlzLmluamVjdG9yLmdldCh0LG9rLGkpO3JldHVybiByIT09b2t8fGU9PT1vaz9yOnRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KHQsZSxpKX19KHQsbyk6dCxhPXMuZ2V0KHFjLG51bGwpO2lmKG51bGw9PT1hKXRocm93IG5ldyBNdCg0MDcsITEpO2xldCBtLEMsbD1zLmdldChBaGUsbnVsbCksYz1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLHU9dGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdWzBdfHwiZGl2IixkPWk/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuLnNlbGVjdFJvb3RFbGVtZW50KHQsZT09PXdhLlNoYWRvd0RvbSl9KGMsaSx0aGlzLmNvbXBvbmVudERlZi5lbmNhcHN1bGF0aW9uKTp0TihjLHUsZnVuY3Rpb24obil7bGV0IHQ9bi50b0xvd2VyQ2FzZSgpO3JldHVybiJzdmciPT09dD8ic3ZnIjoibWF0aCI9PT10PyJtYXRoIjpudWxsfSh1KSkscD10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/Mjg4OjI3MixoPWxOKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLGY9QkUobnVsbCxoLG51bGwscCxudWxsLG51bGwsYSxjLGwscyxudWxsKTtCRihmKTt0cnl7bGV0IF89ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWVbMV07ZVsyMl09bjtsZXQgbD1XZyhzLDIyLDIsIiNob3N0IixudWxsKSxjPWwubWVyZ2VkQXR0cnM9dC5ob3N0QXR0cnM7bnVsbCE9PWMmJihfRShsLGMsITApLG51bGwhPT1uJiYoc0UocixuLGMpLG51bGwhPT1sLmNsYXNzZXMmJmlOKHIsbixsLmNsYXNzZXMpLG51bGwhPT1sLnN0eWxlcyYmazYocixuLGwuc3R5bGVzKSkpO2xldCB1PWkuY3JlYXRlUmVuZGVyZXIobix0KSxkPUJFKGUsVzYodCksbnVsbCx0Lm9uUHVzaD8zMjoxNixlWzIyXSxsLGksdSxudWxsLG51bGwsbnVsbCk7cmV0dXJuIHMuZmlyc3RDcmVhdGVQYXNzJiYoZEUoY2IobCxlKSxzLHQudHlwZSksWjYocyxsKSxKNihsLGUubGVuZ3RoLDEpKSxIRShlLGQpLGVbMjJdPWR9KGQsdGhpcy5jb21wb25lbnREZWYsZixhLGMpO2lmKGQpaWYoaSlzRShjLGQsWyJuZy12ZXJzaW9uIixJaGUuZnVsbF0pO2Vsc2V7bGV0e2F0dHJzOnksY2xhc3NlczpJfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTI7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IG89bltpXTtpZigic3RyaW5nIj09dHlwZW9mIG8pMj09PXI/IiIhPT1vJiZ0LnB1c2gobyxuWysraV0pOjg9PT1yJiZlLnB1c2gobyk7ZWxzZXtpZighV2wocikpYnJlYWs7cj1vfWkrK31yZXR1cm57YXR0cnM6dCxjbGFzc2VzOmV9fSh0aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF0pO3kmJnNFKGMsZCx5KSxJJiZJLmxlbmd0aD4wJiZpTihjLGQsSS5qb2luKCIgIikpfWlmKEM9Q0coaCwyMiksdm9pZCAwIT09ZSl7bGV0IHk9Qy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgST0wO0k8dGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMubGVuZ3RoO0krKyl7bGV0IEE9ZVtJXTt5LnB1c2gobnVsbCE9QT9BcnJheS5mcm9tKEEpOm51bGwpfX1tPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPWVbMV0sbz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9TW8oKTtuLmZpcnN0Q3JlYXRlUGFzcyYmKGUucHJvdmlkZXJzUmVzb2x2ZXImJmUucHJvdmlkZXJzUmVzb2x2ZXIoZSksJDYobixpLHQscWcobix0LDEsbnVsbCksZSksWTYobixpKSk7bGV0IHI9Q2IodCxuLGkuZGlyZWN0aXZlU3RhcnQsaSk7WWMocix0KTtsZXQgbz11bChpLHQpO3JldHVybiBvJiZZYyhvLHQpLHJ9KHIsZSx0KTtpZihuWzhdPWVbOF09byxudWxsIT09aSlmb3IobGV0IGEgb2YgaSlhKG8sdCk7aWYodC5jb250ZW50UXVlcmllcyl7bGV0IGE9TW8oKTt0LmNvbnRlbnRRdWVyaWVzKDEsbyxhLmRpcmVjdGl2ZVN0YXJ0KX1sZXQgcz1NbygpO3JldHVybiFyLmZpcnN0Q3JlYXRlUGFzc3x8bnVsbD09PXQuaG9zdEJpbmRpbmdzJiZudWxsPT09dC5ob3N0QXR0cnN8fCh0cChzLmluZGV4KSxRNihlWzFdLHMsMCxzLmRpcmVjdGl2ZVN0YXJ0LHMuZGlyZWN0aXZlRW5kLHQpLEs2KHQsbykpLG99KF8sdGhpcy5jb21wb25lbnREZWYsZixbWGZlXSksb04oaCxmLG51bGwpfWZpbmFsbHl7VkYoKX1yZXR1cm4gbmV3IHJGKHRoaXMuY29tcG9uZW50VHlwZSxtLEdnKEMsZiksZixDKX19LHJGPShuZXcgaGIsY2xhc3MgZXh0ZW5kcyBXa3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1pLHRoaXMuX3Jvb3RMVmlldz1yLHRoaXMuX3ROb2RlPW8sdGhpcy5pbnN0YW5jZT1lLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgbkYociksdGhpcy5jb21wb25lbnRUeXBlPXR9c2V0SW5wdXQodCxlKXtsZXQgcixpPXRoaXMuX3ROb2RlLmlucHV0cztpZihudWxsIT09aSYmKHI9aVt0XSkpe2xldCBvPXRoaXMuX3Jvb3RMVmlldztkTihvWzFdLG8scix0LGUpLFg2KG8sdGhpcy5fdE5vZGUuaW5kZXgpfX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IFloKHRoaXMuX3ROb2RlLHRoaXMuX3Jvb3RMVmlldyl9ZGVzdHJveSgpe3RoaXMuaG9zdFZpZXcuZGVzdHJveSgpfW9uRGVzdHJveSh0KXt0aGlzLmhvc3RWaWV3Lm9uRGVzdHJveSh0KX19KTtmdW5jdGlvbiBYZmUoKXtsZXQgbj1NbygpO1BFKFplKClbMV0sbil9ZnVuY3Rpb24gYVcobil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3J9ZnVuY3Rpb24gdHQobil7bGV0IHQ9YVcobi50eXBlKSxlPSEwLGk9W25dO2Zvcig7dDspe2xldCByO2lmKFFsKG4pKXI9dC5cdTAyNzVjbXB8fHQuXHUwMjc1ZGlyO2Vsc2V7aWYodC5cdTAyNzVjbXApdGhyb3cgbmV3IE10KDkwMywhMSk7cj10Llx1MDI3NWRpcn1pZihyKXtpZihlKXtpLnB1c2gocik7bGV0IHM9bjtzLmlucHV0cz1jayhuLmlucHV0cykscy5kZWNsYXJlZElucHV0cz1jayhuLmRlY2xhcmVkSW5wdXRzKSxzLm91dHB1dHM9Y2sobi5vdXRwdXRzKTtsZXQgYT1yLmhvc3RCaW5kaW5nczthJiZKZmUobixhKTtsZXQgbD1yLnZpZXdRdWVyeSxjPXIuY29udGVudFF1ZXJpZXM7aWYobCYmS2ZlKG4sbCksYyYmWmZlKG4sYyksJE8obi5pbnB1dHMsci5pbnB1dHMpLCRPKG4uZGVjbGFyZWRJbnB1dHMsci5kZWNsYXJlZElucHV0cyksJE8obi5vdXRwdXRzLHIub3V0cHV0cyksUWwocikmJnIuZGF0YS5hbmltYXRpb24pe2xldCB1PW4uZGF0YTt1LmFuaW1hdGlvbj0odS5hbmltYXRpb258fFtdKS5jb25jYXQoci5kYXRhLmFuaW1hdGlvbil9fWxldCBvPXIuZmVhdHVyZXM7aWYobylmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGE9b1tzXTthJiZhLm5nSW5oZXJpdCYmYShuKSxhPT09dHQmJihlPSExKX19dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9IWZ1bmN0aW9uKG4pe2xldCB0PTAsZT1udWxsO2ZvcihsZXQgaT1uLmxlbmd0aC0xO2k+PTA7aS0tKXtsZXQgcj1uW2ldO3IuaG9zdFZhcnM9dCs9ci5ob3N0VmFycyxyLmhvc3RBdHRycz1hRShyLmhvc3RBdHRycyxlPWFFKGUsci5ob3N0QXR0cnMpKX19KGkpfWZ1bmN0aW9uIGNrKG4pe3JldHVybiBuPT09QWc/e306bj09PVdpP1tdOm59ZnVuY3Rpb24gS2ZlKG4sdCl7bGV0IGU9bi52aWV3UXVlcnk7bi52aWV3UXVlcnk9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9ZnVuY3Rpb24gWmZlKG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllcztuLmNvbnRlbnRRdWVyaWVzPWU/KGkscixvKT0+e3QoaSxyLG8pLGUoaSxyLG8pfTp0fWZ1bmN0aW9uIEpmZShuLHQpe2xldCBlPW4uaG9zdEJpbmRpbmdzO24uaG9zdEJpbmRpbmdzPWU/KGkscik9Pnt0KGksciksZShpLHIpfTp0fXZhciAkZmU9WyJwcm92aWRlcnNSZXNvbHZlciJdLGVtZT1bInRlbXBsYXRlIiwiZGVjbHMiLCJjb25zdHMiLCJ2YXJzIiwib25QdXNoIiwibmdDb250ZW50U2VsZWN0b3JzIiwic3R5bGVzIiwiZW5jYXBzdWxhdGlvbiIsInNjaGVtYXMiXTt2YXIgV1M9bnVsbDtmdW5jdGlvbiBVRSgpe2lmKCFXUyl7bGV0IG49V3IuU3ltYm9sO2lmKG4mJm4uaXRlcmF0b3IpV1M9bi5pdGVyYXRvcjtlbHNle2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXtsZXQgaT10W2VdOyJlbnRyaWVzIiE9PWkmJiJzaXplIiE9PWkmJk1hcC5wcm90b3R5cGVbaV09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJihXUz1pKX19fXJldHVybiBXU31mdW5jdGlvbiB6RShuKXtyZXR1cm4hIXBOKG4pJiYoQXJyYXkuaXNBcnJheShuKXx8IShuIGluc3RhbmNlb2YgTWFwKSYmVUUoKWluIG4pfWZ1bmN0aW9uIHBOKG4pe3JldHVybiBudWxsIT09biYmKCJmdW5jdGlvbiI9PXR5cGVvZiBufHwib2JqZWN0Ij09dHlwZW9mIG4pfWZ1bmN0aW9uIEtjKG4sdCxlKXtyZXR1cm4gblt0XT1lfWZ1bmN0aW9uIEliKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gc3Mobix0LGUpe3JldHVybiFPYmplY3QuaXMoblt0XSxlKSYmKG5bdF09ZSwhMCl9ZnVuY3Rpb24gZWYobix0LGUsaSl7bGV0IHI9c3Mobix0LGUpO3JldHVybiBzcyhuLHQrMSxpKXx8cn1mdW5jdGlvbiBqRShuLHQsZSxpLHIpe2xldCBvPWVmKG4sdCxlLGkpO3JldHVybiBzcyhuLHQrMixyKXx8b31mdW5jdGlvbiBsbChuLHQsZSxpLHIsbyl7bGV0IHM9ZWYobix0LGUsaSk7cmV0dXJuIGVmKG4sdCsyLHIsbyl8fHN9ZnVuY3Rpb24gemUobix0LGUsaSl7bGV0IHI9WmUoKTtyZXR1cm4gc3MocixVZygpLHQpJiYoRGkoKSxRYyhxcigpLHIsbix0LGUsaSkpLHplfWZ1bmN0aW9uIFlnKG4sdCl7bGV0IGU9ITEsaT0kdSgpO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MillPXNzKG4saSsrLHRbb10pfHxlO2lmKEVHKGkpLCFlKXJldHVybiBHbjtsZXQgcj10WzBdO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MilyKz1xbih0W29dKSt0W28rMV07cmV0dXJuIHJ9ZnVuY3Rpb24gWGcobix0LGUsaSl7cmV0dXJuIHNzKG4sVWcoKSxlKT90K3FuKGUpK2k6R259ZnVuY3Rpb24gUWcobix0LGUsaSxyLG8pe2xldCBhPWVmKG4sJHUoKSxlLHIpO3JldHVybiBlZCgyKSxhP3QrcW4oZSkraStxbihyKStvOkdufWZ1bmN0aW9uIEtnKG4sdCxlLGkscixvLHMsYSl7bGV0IGM9akUobiwkdSgpLGUscixzKTtyZXR1cm4gZWQoMyksYz90K3FuKGUpK2krcW4ocikrbytxbihzKSthOkdufWZ1bmN0aW9uIFpnKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPWxsKG4sJHUoKSxlLHIscyxsKTtyZXR1cm4gZWQoNCksZD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2M6R259ZnVuY3Rpb24gSmcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQpe2xldCBwPSR1KCksaD1sbChuLHAsZSxyLHMsbCk7cmV0dXJuIGg9c3MobixwKzQsdSl8fGgsZWQoNSksaD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZDpHbn1mdW5jdGlvbiAkZyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe2xldCBmPSR1KCksbT1sbChuLGYsZSxyLHMsbCk7cmV0dXJuIG09ZWYobixmKzQsdSxwKXx8bSxlZCg2KSxtP3QrcW4oZSkraStxbihyKStvK3FuKHMpK2ErcW4obCkrYytxbih1KStkK3FuKHApK2g6R259ZnVuY3Rpb24gZTAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9JHUoKSxfPWxsKG4sQyxlLHIscyxsKTtyZXR1cm4gXz1qRShuLEMrNCx1LHAsZil8fF8sZWQoNyksXz90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK206R259ZnVuY3Rpb24gdDAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pe2xldCB5PSR1KCksST1sbChuLHksZSxyLHMsbCk7cmV0dXJuIEk9bGwobix5KzQsdSxwLGYsQyl8fEksZWQoOCksST90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK20rcW4oQykrXzpHbn1mdW5jdGlvbiBFKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9WmUoKSxjPURpKCksdT1uKzIyLGQ9Yy5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQuY29uc3RzLHU9V2codCxuLDQsc3x8bnVsbCxlcChjLGEpKTtjTih0LGUsdSxlcChjLGwpKSxQRSh0LHUpO2xldCBkPXUudFZpZXdzPWxOKDIsdSxpLHIsbyx0LmRpcmVjdGl2ZVJlZ2lzdHJ5LHQucGlwZVJlZ2lzdHJ5LG51bGwsdC5zY2hlbWFzLGMpO3JldHVybiBudWxsIT09dC5xdWVyaWVzJiYodC5xdWVyaWVzLnRlbXBsYXRlKHQsdSksZC5xdWVyaWVzPXQucXVlcmllcy5lbWJlZGRlZFRWaWV3KHUpKSx1fSh1LGMsbCx0LGUsaSxyLG8scyk6Yy5kYXRhW3VdO1djKGQsITEpO2xldCBwPWxbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO0xFKGMsbCxwLGQpLFljKHAsbCksSEUobCxsW3VdPWVXKHAsbCxwLGQpKSxBRShkKSYmc04oYyxsLGQpLG51bGwhPXMmJmFOKGwsZCxhKX1mdW5jdGlvbiBzdChuKXtyZXR1cm4gSGcoWW4ubEZyYW1lLmNvbnRleHRMVmlldywyMituKX1mdW5jdGlvbiBiKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCExKSxifWZ1bmN0aW9uIG9GKG4sdCxlLGkscil7bGV0IHM9cj8iY2xhc3MiOiJzdHlsZSI7ZE4obixlLHQuaW5wdXRzW3NdLHMsaSl9ZnVuY3Rpb24gZyhuLHQsZSxpKXtsZXQgcj1aZSgpLG89RGkoKSxzPTIyK24sYT1yWzExXSxsPXJbc109dE4oYSx0LFluLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlKSxjPW8uZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscixvLHMpe2xldCBhPXQuY29uc3RzLGM9V2codCxuLDIscixlcChhLG8pKTtyZXR1cm4gY04odCxlLGMsZXAoYSxzKSksbnVsbCE9PWMuYXR0cnMmJl9FKGMsYy5hdHRycywhMSksbnVsbCE9PWMubWVyZ2VkQXR0cnMmJl9FKGMsYy5tZXJnZWRBdHRycywhMCksbnVsbCE9PXQucXVlcmllcyYmdC5xdWVyaWVzLmVsZW1lbnRTdGFydCh0LGMpLGN9KHMsbyxyLDAsdCxlLGkpOm8uZGF0YVtzXTtXYyhjLCEwKTtsZXQgdT1jLm1lcmdlZEF0dHJzO251bGwhPT11JiZzRShhLGwsdSk7bGV0IGQ9Yy5jbGFzc2VzO251bGwhPT1kJiZpTihhLGwsZCk7bGV0IHA9Yy5zdHlsZXM7cmV0dXJuIG51bGwhPT1wJiZrNihhLGwscCksNjQhPSg2NCZjLmZsYWdzKSYmTEUobyxyLGwsYyksMD09PVluLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCYmWWMobCxyKSxZbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrKyxBRShjKSYmKHNOKG8scixjKSxHNihvLGMscikpLG51bGwhPT1pJiZhTihyLGMpLGd9ZnVuY3Rpb24gdigpe2xldCBuPU1vKCk7a0YoKT9GRigpOihuPW4ucGFyZW50LFdjKG4sITEpKTtsZXQgdD1uO1luLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tO2xldCBlPURpKCk7cmV0dXJuIGUuZmlyc3RDcmVhdGVQYXNzJiYoUEUoZSxuKSxQRihuKSYmZS5xdWVyaWVzLmVsZW1lbnRFbmQobikpLG51bGwhPXQuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbihuKXtyZXR1cm4gMCE9KDE2Jm4uZmxhZ3MpfSh0KSYmb0YoZSx0LFplKCksdC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPXQuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oMzImbi5mbGFncyl9KHQpJiZvRihlLHQsWmUoKSx0LnN0eWxlc1dpdGhvdXRIb3N0LCExKSx2fWZ1bmN0aW9uIE4obix0LGUsaSl7cmV0dXJuIGcobix0LGUsaSksdigpLE59ZnVuY3Rpb24gS3Qobix0LGUpe2xldCBpPVplKCkscj1EaSgpLG89bisyMixzPXIuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89dC5jb25zdHMscz1lcChvLGkpLGE9V2codCxuLDgsIm5nLWNvbnRhaW5lciIscyk7cmV0dXJuIG51bGwhPT1zJiZfRShhLHMsITApLGNOKHQsZSxhLGVwKG8scikpLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxhKSxhfShvLHIsaSx0LGUpOnIuZGF0YVtvXTtXYyhzLCEwKTtsZXQgYT1pW29dPWlbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiBMRShyLGksYSxzKSxZYyhhLGkpLEFFKHMpJiYoc04ocixpLHMpLEc2KHIscyxpKSksbnVsbCE9ZSYmYU4oaSxzKSxLdH1mdW5jdGlvbiBadCgpe2xldCBuPU1vKCksdD1EaSgpO3JldHVybiBrRigpP0ZGKCk6KG49bi5wYXJlbnQsV2MobiwhMSkpLHQuZmlyc3RDcmVhdGVQYXNzJiYoUEUodCxuKSxQRihuKSYmdC5xdWVyaWVzLmVsZW1lbnRFbmQobikpLFp0fWZ1bmN0aW9uIEFpKG4sdCxlKXtyZXR1cm4gS3Qobix0LGUpLFp0KCksQWl9ZnVuY3Rpb24gSWUoKXtyZXR1cm4gWmUoKX1mdW5jdGlvbiBuMChuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW59ZnVuY3Rpb24gaE4obil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zdWJzY3JpYmV9dmFyIGZOPWhOO2Z1bmN0aW9uIFAobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1NbygpO3JldHVybiBfVyhvLHIsclsxMV0scyxuLHQsMCxpKSxQfWZ1bmN0aW9uIGkwKG4sdCl7bGV0IGU9TW8oKSxpPVplKCkscj1EaSgpO3JldHVybiBfVyhyLGksb1coTkYoci5kYXRhKSxlLGkpLGUsbix0KSxpMH1mdW5jdGlvbiBfVyhuLHQsZSxpLHIsbyxzLGEpe2xldCBsPUFFKGkpLHU9bi5maXJzdENyZWF0ZVBhc3MmJnJXKG4pLHA9aVcodCksaD0hMDtpZigzJmkudHlwZXx8YSl7bGV0IEM9dWwoaSx0KSxfPWE/YShDKTpDLHk9cC5sZW5ndGgsST1hP089PmEoTWEoT1tpLmluZGV4XSkpOmkuaW5kZXgsQT1udWxsO2lmKCFhJiZsJiYoQT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmNsZWFudXA7aWYobnVsbCE9cilmb3IobGV0IG89MDtvPHIubGVuZ3RoLTE7bys9Mil7bGV0IHM9cltvXTtpZihzPT09ZSYmcltvKzFdPT09aSl7bGV0IGE9dFs3XSxsPXJbbysyXTtyZXR1cm4gYS5sZW5ndGg+bD9hW2xdOm51bGx9InN0cmluZyI9PXR5cGVvZiBzJiYobys9Mil9cmV0dXJuIG51bGx9KG4sdCxyLGkuaW5kZXgpKSxudWxsIT09QSkoQS5fX25nTGFzdExpc3RlbmVyRm5fX3x8QSkuX19uZ05leHRMaXN0ZW5lckZuX189byxBLl9fbmdMYXN0TGlzdGVuZXJGbl9fPW8saD0hMTtlbHNle289emooaSx0LDAsbywhMSk7bGV0IE89ZS5saXN0ZW4oXyxyLG8pO3AucHVzaChvLE8pLHUmJnUucHVzaChyLEkseSx5KzEpfX1lbHNlIG89emooaSx0LDAsbywhMSk7bGV0IG0sZj1pLm91dHB1dHM7aWYoaCYmbnVsbCE9PWYmJihtPWZbcl0pKXtsZXQgQz1tLmxlbmd0aDtpZihDKWZvcihsZXQgXz0wO188QztfKz0yKXtsZXQgZWU9dFttW19dXVttW18rMV1dLnN1YnNjcmliZShvKSxYPXAubGVuZ3RoO3AucHVzaChvLGVlKSx1JiZ1LnB1c2gocixpLmluZGV4LFgsLShYKzEpKX19fWZ1bmN0aW9uIFVqKG4sdCxlLGkpe3RyeXtyZXR1cm4hMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIHNXKG4sciksITF9fWZ1bmN0aW9uIHpqKG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3RXKDImbi5mbGFncz9vcChuLmluZGV4LHQpOnQpO2xldCBsPVVqKHQsMCxpLHMpLGM9by5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9VWoodCwwLGMscykmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiByJiYhMT09PWwmJihzLnByZXZlbnREZWZhdWx0KCkscy5yZXR1cm5WYWx1ZT0hMSksbH19ZnVuY3Rpb24gTShuPTEpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4oWW4ubEZyYW1lLmNvbnRleHRMVmlldz1mdW5jdGlvbihuLHQpe2Zvcig7bj4wOyl0PXRbMTVdLG4tLTtyZXR1cm4gdH0obixZbi5sRnJhbWUuY29udGV4dExWaWV3KSlbOF19KG4pfWZ1bmN0aW9uIGxtZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT9CNihuLG8sITApOmRmZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIHdpKG4pe2xldCB0PVplKClbMTZdWzZdO2lmKCF0LnByb2plY3Rpb24pe2xldCBpPXQucHJvamVjdGlvbj1KeShuP24ubGVuZ3RoOjEsbnVsbCkscj1pLnNsaWNlKCksbz10LmNoaWxkO2Zvcig7bnVsbCE9PW87KXtsZXQgcz1uP2xtZShvLG4pOjA7bnVsbCE9PXMmJihyW3NdP3Jbc10ucHJvamVjdGlvbk5leHQ9bzppW3NdPW8scltzXT1vKSxvPW8ubmV4dH19fWZ1bmN0aW9uIE5uKG4sdD0wLGUpe2xldCBpPVplKCkscj1EaSgpLG89V2cociwyMituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PW8ucHJvamVjdGlvbiYmKG8ucHJvamVjdGlvbj10KSxGRigpLDY0IT0oNjQmby5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtPNih0WzExXSwwLHQsZSxNNihuLGUsdCksVDYoZS5wYXJlbnR8fHRbNl0sZSx0KSl9KHIsaSxvKX1mdW5jdGlvbiB4cihuLHQsZSl7cmV0dXJuIFBiKG4sIiIsdCwiIixlKSx4cn1mdW5jdGlvbiBQYihuLHQsZSxpLHIpe2xldCBvPVplKCkscz1YZyhvLHQsZSxpKTtyZXR1cm4gcyE9PUduJiZEYShEaSgpLHFyKCksbyxuLHMsb1sxMV0sciwhMSksUGJ9ZnVuY3Rpb24gR0Uobix0LGUsaSxyLG8scyl7bGV0IGE9WmUoKSxsPVFnKGEsdCxlLGkscixvKTtyZXR1cm4gbCE9PUduJiZEYShEaSgpLHFyKCksYSxuLGwsYVsxMV0scywhMSksR0V9ZnVuY3Rpb24gamoobix0LGUsaSxyKXtsZXQgbz1uW2UrMV0scz1udWxsPT09dCxhPWk/Smgobyk6RmcobyksbD0hMTtmb3IoOzAhPT1hJiYoITE9PT1sfHxzKTspe2xldCB1PW5bYSsxXTtkbWUoblthXSx0KSYmKGw9ITAsblthKzFdPWk/JGsodSk6SmsodSkpLGE9aT9KaCh1KTpGZyh1KX1sJiYobltlKzFdPWk/Smsobyk6JGsobykpfWZ1bmN0aW9uIGRtZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJk1iKG4sdCk+PTB9dmFyIHdvPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBTVyhuKXtyZXR1cm4gbi5zdWJzdHJpbmcod28ua2V5LHdvLmtleUVuZCl9ZnVuY3Rpb24gcG1lKG4pe3JldHVybiBuLnN1YnN0cmluZyh3by52YWx1ZSx3by52YWx1ZUVuZCl9ZnVuY3Rpb24gRVcobix0KXtsZXQgZT13by50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD13by5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk+MzI7KXQrKztyZXR1cm4gdH0obix3by5rZXk9dCxlKSxOZyhuLHQsZSkpfWZ1bmN0aW9uIFRXKG4sdCl7bGV0IGU9d28udGV4dEVuZCxpPXdvLmtleT1OZyhuLHQsZSk7cmV0dXJuIGU9PT1pPy0xOihpPXdvLmtleUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk7Zm9yKDt0PGUmJig0NT09PShpPW4uY2hhckNvZGVBdCh0KSl8fDk1PT09aXx8KC0zMyZpKT49NjUmJigtMzMmaSk8PTkwfHxpPj00OCYmaTw9NTcpOyl0Kys7cmV0dXJuIHR9KG4saSxlKSxpPUdqKG4saSxlKSxpPXdvLnZhbHVlPU5nKG4saSxlKSxpPXdvLnZhbHVlRW5kPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0tMSxyPS0xLG89LTEscz10LGE9cztmb3IoO3M8ZTspe2xldCBsPW4uY2hhckNvZGVBdChzKyspO2lmKDU5PT09bClyZXR1cm4gYTszND09PWx8fDM5PT09bD9hPXM9V2oobixsLHMsZSk6dD09PXMtNCYmODU9PT1vJiY4Mj09PXImJjc2PT09aSYmNDA9PT1sP2E9cz1XaihuLDQxLHMsZSk6bD4zMiYmKGE9cyksbz1yLHI9aSxpPS0zMyZsfXJldHVybiBhfShuLGksZSksR2oobixpLGUpKX1mdW5jdGlvbiBEVyhuKXt3by5rZXk9MCx3by5rZXlFbmQ9MCx3by52YWx1ZT0wLHdvLnZhbHVlRW5kPTAsd28udGV4dEVuZD1uLmxlbmd0aH1mdW5jdGlvbiBOZyhuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBHaihuLHQsZSxpKXtyZXR1cm4odD1OZyhuLHQsZSkpPGUmJnQrKyx0fWZ1bmN0aW9uIFdqKG4sdCxlLGkpe2xldCByPS0xLG89ZTtmb3IoO288aTspe2xldCBzPW4uY2hhckNvZGVBdChvKyspO2lmKHM9PXQmJjkyIT09cilyZXR1cm4gbztyPTkyPT1zJiY5Mj09PXI/MDpzfXRocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBPdChuLHQsZSl7cmV0dXJuICRsKG4sdCxlLCExKSxPdH1mdW5jdGlvbiBhdChuLHQpe3JldHVybiAkbChuLHQsbnVsbCwhMCksYXR9ZnVuY3Rpb24gcGwobil7ZWMoUFcsdm1lLG4sITEpfWZ1bmN0aW9uIHZtZShuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gRFcobiksVFcobixOZyhuLDAsd28udGV4dEVuZCkpfSh0KTtlPj0wO2U9VFcodCxlKSlQVyhuLFNXKHQpLHBtZSh0KSl9ZnVuY3Rpb24gZWEobil7ZWMoRWEsWmMsbiwhMCl9ZnVuY3Rpb24gWmMobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIERXKG4pLEVXKG4sTmcobiwwLHdvLnRleHRFbmQpKX0odCk7ZT49MDtlPUVXKHQsZSkpRWEobixTVyh0KSwhMCl9ZnVuY3Rpb24gJGwobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1lZCgyKTtvLmZpcnN0VXBkYXRlUGFzcyYmSVcobyxuLHMsaSksdCE9PUduJiZzcyhyLHMsdCkmJlJXKG8sby5kYXRhW1RzKCldLHIsclsxMV0sbixyW3MrMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49Y28oJHMobikpKSksbn0odCxlKSxpLHMpfWZ1bmN0aW9uIGVjKG4sdCxlLGkpe2xldCByPURpKCksbz1lZCgyKTtyLmZpcnN0VXBkYXRlUGFzcyYmSVcocixudWxsLG8saSk7bGV0IHM9WmUoKTtpZihlIT09R24mJnNzKHMsbyxlKSl7bGV0IGE9ci5kYXRhW1RzKCldO2lmKE9XKGEsaSkmJiFBVyhyLG8pKXtsZXQgbD1pP2EuY2xhc3Nlc1dpdGhvdXRIb3N0OmEuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PWwmJihlPWJrKGwsZXx8IiIpKSxvRihyLGEscyxlLGkpfWVsc2UhZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtyPT09R24mJihyPVdpKTtsZXQgbD0wLGM9MCx1PTA8ci5sZW5ndGg/clswXTpudWxsLGQ9MDxvLmxlbmd0aD9vWzBdOm51bGw7Zm9yKDtudWxsIT09dXx8bnVsbCE9PWQ7KXtsZXQgbSxwPWw8ci5sZW5ndGg/cltsKzFdOnZvaWQgMCxoPWM8by5sZW5ndGg/b1tjKzFdOnZvaWQgMCxmPW51bGw7dT09PWQ/KGwrPTIsYys9MixwIT09aCYmKGY9ZCxtPWgpKTpudWxsPT09ZHx8bnVsbCE9PXUmJnU8ZD8obCs9MixmPXUpOihjKz0yLGY9ZCxtPWgpLG51bGwhPT1mJiZSVyhuLHQsZSxpLGYsbSxzLGEpLHU9bDxyLmxlbmd0aD9yW2xdOm51bGwsZD1jPG8ubGVuZ3RoP29bY106bnVsbH19KHIsYSxzLHNbMTFdLHNbbysxXSxzW28rMV09ZnVuY3Rpb24obix0LGUpe2lmKG51bGw9PWV8fCIiPT09ZSlyZXR1cm4gV2k7bGV0IGk9W10scj0kcyhlKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKW4oaSxyW29dLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Ygcilmb3IobGV0IG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZuKGksbyxyW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiByJiZ0KGkscik7cmV0dXJuIGl9KG4sdCxlKSxpLG8pfX1mdW5jdGlvbiBBVyhuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIElXKG4sdCxlLGkpe2xldCByPW4uZGF0YTtpZihudWxsPT09cltlKzFdKXtsZXQgbz1yW1RzKCldLHM9QVcobixlKTtPVyhvLGkpJiZudWxsPT09dCYmIXMmJih0PSExKSx0PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPU5GKG4pLG89aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1yKTA9PT0oaT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKSYmKGU9ZmIoZT11ayhudWxsLG4sdCxlLGkpLHQuYXR0cnMsaSksbz1udWxsKTtlbHNle2xldCBzPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT1zfHxuW3NdIT09cilpZihlPXVrKHIsbix0LGUsaSksbnVsbD09PW8pe2xldCBsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3M7aWYoMCE9PUZnKGkpKXJldHVybiBuW0poKGkpXX0obix0LGkpO3ZvaWQgMCE9PWwmJkFycmF5LmlzQXJyYXkobCkmJihsPXVrKG51bGwsbix0LGxbMV0saSksbD1mYihsLHQuYXR0cnMsaSksZnVuY3Rpb24obix0LGUsaSl7bltKaChlP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpXT1pfShuLHQsaSxsKSl9ZWxzZSBvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaSxyPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbz0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7bzxyO28rKylpPWZiKGksbltvXS5ob3N0QXR0cnMsZSk7cmV0dXJuIGZiKGksdC5hdHRycyxlKX0obix0LGkpfXJldHVybiB2b2lkIDAhPT1vJiYoaT90LnJlc2lkdWFsQ2xhc3Nlcz1vOnQucmVzaWR1YWxTdHlsZXM9byksZX0ocixvLHQsaSksZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW8/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxhPUpoKHMpLGw9Rmcocyk7bltpXT1lO2xldCB1LGM9ITE7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IGQ9ZTt1PWRbMV0sKG51bGw9PT11fHxNYihkLHUpPjApJiYoYz0hMCl9ZWxzZSB1PWU7aWYocilpZigwIT09bCl7bGV0IHA9SmgoblthKzFdKTtuW2krMV09R1MocCxhKSwwIT09cCYmKG5bcCsxXT1sayhuW3ArMV0saSkpLG5bYSsxXT1mdW5jdGlvbihuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30oblthKzFdLGkpfWVsc2UgbltpKzFdPUdTKGEsMCksMCE9PWEmJihuW2ErMV09bGsoblthKzFdLGkpKSxhPWk7ZWxzZSBuW2krMV09R1MobCwwKSwwPT09YT9hPWk6bltsKzFdPWxrKG5bbCsxXSxpKSxsPWk7YyYmKG5baSsxXT1KayhuW2krMV0pKSxqaihuLHUsaSwhMCksamoobix1LGksITEpLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89cj9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgdCYmTWIobyx0KT49MCYmKGVbaSsxXT0kayhlW2krMV0pKX0odCx1LG4saSxvKSxzPUdTKGEsbCksbz90LmNsYXNzQmluZGluZ3M9czp0LnN0eWxlQmluZGluZ3M9c30ocixvLHQsZSxzLGkpfX1mdW5jdGlvbiB1ayhuLHQsZSxpLHIpe2xldCBvPW51bGwscz1lLmRpcmVjdGl2ZUVuZCxhPWUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09YT9hPWUuZGlyZWN0aXZlU3RhcnQ6YSsrO2E8cyYmKG89dFthXSxpPWZiKGksby5ob3N0QXR0cnMsciksbyE9PW4pOylhKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1hKSxpfWZ1bmN0aW9uIGZiKG4sdCxlKXtsZXQgaT1lPzE6MixyPS0xO2lmKG51bGwhPT10KWZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyJudW1iZXIiPT10eXBlb2Ygcz9yPXM6cj09PWkmJihBcnJheS5pc0FycmF5KG4pfHwobj12b2lkIDA9PT1uP1tdOlsiIixuXSksRWEobixzLCEhZXx8dFsrK29dKSl9cmV0dXJuIHZvaWQgMD09PW4/bnVsbDpufWZ1bmN0aW9uIFBXKG4sdCxlKXtFYShuLHQsJHMoZSkpfWZ1bmN0aW9uIFJXKG4sdCxlLGkscixvLHMsYSl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2xldCBsPW4uZGF0YSxjPWxbYSsxXSx1PWZ1bmN0aW9uKG4pe3JldHVybiAxPT0oMSZuKX0oYyk/cWoobCx0LGUscixGZyhjKSxzKTp2b2lkIDA7eUUodSl8fCh5RShvKXx8ZnVuY3Rpb24obil7cmV0dXJuIDI9PSgyJm4pfShjKSYmKG89cWoobCxudWxsLGUscixhLHMpKSxmdW5jdGlvbihuLHQsZSxpLHIpe2lmKHQpcj9uLmFkZENsYXNzKGUsaSk6bi5yZW1vdmVDbGFzcyhlLGkpO2Vsc2V7bGV0IG89LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6YWwuRGFzaENhc2U7bnVsbD09cj9uLnJlbW92ZVN0eWxlKGUsaSxvKTooInN0cmluZyI9PXR5cGVvZiByJiZyLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihyPXIuc2xpY2UoMCwtMTApLG98PWFsLkltcG9ydGFudCksbi5zZXRTdHlsZShlLGkscixvKSl9fShpLHMsSUUoVHMoKSxlKSxyLG8pKX1mdW5jdGlvbiBxaihuLHQsZSxpLHIsbyl7bGV0IGEscz1udWxsPT09dDtmb3IoO3I+MDspe2xldCBsPW5bcl0sYz1BcnJheS5pc0FycmF5KGwpLHU9Yz9sWzFdOmwsZD1udWxsPT09dSxwPWVbcisxXTtwPT09R24mJihwPWQ/V2k6dm9pZCAwKTtsZXQgaD1kP25rKHAsaSk6dT09PWk/cDp2b2lkIDA7aWYoYyYmIXlFKGgpJiYoaD1uayhsLGkpKSx5RShoKSYmKGE9aCxzKSlyZXR1cm4gYTtsZXQgZj1uW3IrMV07cj1zP0poKGYpOkZnKGYpfWlmKG51bGwhPT10KXtsZXQgbD1vP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9bCYmKGE9bmsobCxpKSl9cmV0dXJuIGF9ZnVuY3Rpb24geUUobil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gT1cobix0KXtyZXR1cm4gMCE9KG4uZmxhZ3MmKHQ/MTY6MzIpKX1mdW5jdGlvbiBEKG4sdD0iIil7bGV0IGU9WmUoKSxpPURpKCkscj1uKzIyLG89aS5maXJzdENyZWF0ZVBhc3M/V2coaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPWVOKGVbMTFdLHQpO0xFKGksZSxzLG8pLFdjKG8sITEpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBxZSgiIixuLCIiKSx5dH1mdW5jdGlvbiBxZShuLHQsZSl7bGV0IGk9WmUoKSxyPVhnKGksbix0LGUpO3JldHVybiByIT09R24mJm5kKGksVHMoKSxyKSxxZX1mdW5jdGlvbiBhcChuLHQsZSxpLHIpe2xldCBvPVplKCkscz1RZyhvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1HbiYmbmQobyxUcygpLHMpLGFwfWZ1bmN0aW9uIFdFKG4sdCxlLGkscixvLHMpe2xldCBhPVplKCksbD1LZyhhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09R24mJm5kKGEsVHMoKSxsKSxXRX1mdW5jdGlvbiBSYihuLHQsZSl7ZWMoRWEsWmMsWGcoWmUoKSxuLHQsZSksITApfWZ1bmN0aW9uIEFhKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCEwKSxBYX1mdW5jdGlvbiByMChuLHQsZSl7bGV0IGk9WmUoKTtpZihzcyhpLFVnKCksdCkpe2xldCBvPURpKCkscz1xcigpO0RhKG8scyxpLG4sdCxvVyhORihvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIHIwfXZhciBqaD12b2lkIDAsR21lPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0samhdLFtbIkFNIiwiUE0iXSxqaCxqaF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0samgsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGpoLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsamgsInsxfSAnYXQnIHswfSIsamhdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0sZGs9e307ZnVuY3Rpb24gdGEobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1Zaih0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPVlqKGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIEdtZTt0aHJvdyBuZXcgTXQoNzAxLCExKX1mdW5jdGlvbiBZaihuKXtyZXR1cm4gbiBpbiBka3x8KGRrW25dPVdyLm5nJiZXci5uZy5jb21tb24mJldyLm5nLmNvbW1vbi5sb2NhbGVzJiZXci5uZy5jb21tb24ubG9jYWxlc1tuXSksZGtbbl19dmFyIGJyPSgoKT0+e3JldHVybihuPWJyfHwoYnI9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixicjt2YXIgbn0pKCkscW1lPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgYkU9ImVuLVVTIixLVz17bWFya2VyOiJlbGVtZW50In0sWlc9e21hcmtlcjoiSUNVIn0scWw9KCgpPT57cmV0dXJuKG49cWx8fChxbD17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIscWw7dmFyIG59KSgpLEpXPWJFO2Z1bmN0aW9uICRXKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP0Q2KG4sMCxlKTpNYShlW3JdKX1mdW5jdGlvbiBlNyhuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmMD09KDImdC5mbGFncykpZm9yKGxldCBsPTE7bDxvLmxlbmd0aDtsKyspWmgobixzLGVbb1tsXV0sYSwhMSl9fWZ1bmN0aW9uIHQ3KG4sdCl7aWYobi5wdXNoKHQpLG4ubGVuZ3RoPjEpZm9yKGxldCBlPW4ubGVuZ3RoLTI7ZT49MDtlLS0pe2xldCBpPW5bZV07bjcoaSl8fFptZShpLHQpJiZudWxsPT09Sm1lKGkpJiYkbWUoaSx0LmluZGV4KX19ZnVuY3Rpb24gbjcobil7cmV0dXJuISg2NCZuLnR5cGUpfWZ1bmN0aW9uIFptZShuLHQpe3JldHVybiBuNyh0KXx8bi5pbmRleD50LmluZGV4fWZ1bmN0aW9uIEptZShuKXtsZXQgdD1uLmluc2VydEJlZm9yZUluZGV4O3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMF06dH1mdW5jdGlvbiAkbWUobix0KXtsZXQgZT1uLmluc2VydEJlZm9yZUluZGV4O0FycmF5LmlzQXJyYXkoZSk/ZVswXT10OihJNigkVyxlNyksbi5pbnNlcnRCZWZvcmVJbmRleD10KX1mdW5jdGlvbiB0YihuLHQpe2xldCBlPW4uZGF0YVt0XTtyZXR1cm4gbnVsbD09PWV8fCJzdHJpbmciPT10eXBlb2YgZT9udWxsOmUuaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP2U6ZS52YWx1ZX1mdW5jdGlvbiBuZ2Uobix0LGUpe2xldCBpPXJOKG4sZSw2NCxudWxsLG51bGwpO3JldHVybiB0Nyh0LGkpLGl9ZnVuY3Rpb24gcUUobix0KXtsZXQgZT10W24uY3VycmVudENhc2VMVmlld0luZGV4XTtyZXR1cm4gbnVsbD09PWU/ZTplPDA/fmU6ZX1mdW5jdGlvbiBpZ2Uobil7cmV0dXJuIG4+Pj4xN31mdW5jdGlvbiByZ2Uobil7cmV0dXJuKDEzMTA3MCZuKT4+PjF9dmFyIG1iPTAsbmI9MDtmdW5jdGlvbiBpNyhuLHQsZSxpKXtsZXQgcyxyPWVbMTFdLG89bnVsbDtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2xldCBjPXRbKythXTtudWxsPT09ZVtjXSYmKGVbY109ZU4ocixsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmxldCB1LGQsYz1pZ2UobCk7aWYobnVsbD09PW8mJihvPWMscz1ORShyLGkpKSxjPT09bz8odT1pLGQ9cyk6KHU9bnVsbCxkPU1hKGVbY10pKSxudWxsIT09ZCl7bGV0IG09cmdlKGwpO1poKHIsZCxlW21dLHUsITEpO2xldCBfPXRiKG4sbSk7aWYobnVsbCE9PV8mJiJvYmplY3QiPT10eXBlb2YgXyl7bGV0IHk9cUUoXyxlKTtudWxsIT09eSYmaTcobixfLmNyZWF0ZVt5XSxlLGVbXy5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmxldCBoPXRbKythXSxmPXRbKythXTt1TihyLElFKGw+Pj4xLGUpLG51bGwsbnVsbCxoLGYsbnVsbCl9ZWxzZSBzd2l0Y2gobCl7Y2FzZSBaVzpsZXQgYz10WysrYV0sdT10WysrYV07bnVsbD09PWVbdV0mJlljKGVbdV09R2hlKHIsYyksZSk7YnJlYWs7Y2FzZSBLVzpsZXQgZD10WysrYV0scD10WysrYV07bnVsbD09PWVbcF0mJlljKGVbcF09dE4ocixkLG51bGwpLGUpfX19ZnVuY3Rpb24gcjcobix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXSxhPWVbKytvXTtpZihzJnIpe2xldCBsPSIiO2ZvcihsZXQgYz1vKzE7Yzw9bythO2MrKyl7bGV0IHU9ZVtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbCs9dTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdSlpZih1PDApbCs9cW4odFtpLXVdKTtlbHNle2xldCBkPXU+Pj4yO3N3aXRjaCgzJnUpe2Nhc2UgMTpsZXQgcD1lWysrY10saD1lWysrY10sZj1uLmRhdGFbZF07InN0cmluZyI9PXR5cGVvZiBmP3VOKHRbMTFdLHRbZF0sbnVsbCxmLHAsbCxoKTpEYShuLGYsdCxwLGwsdFsxMV0saCwhMSk7YnJlYWs7Y2FzZSAwOmxldCBtPXRbZF07bnVsbCE9PW0mJng2KHRbMTFdLG0sbCk7YnJlYWs7Y2FzZSAyOmNnZShuLHRiKG4sZCksdCxsKTticmVhaztjYXNlIDM6WGoobix0YihuLGQpLGksdCl9fX19ZWxzZXtsZXQgbD1lW28rMV07aWYobD4wJiYzPT0oMyZsKSl7bGV0IHU9dGIobixsPj4+Mik7dFt1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF08MCYmWGoobix1LGksdCl9fW8rPWF9fWZ1bmN0aW9uIFhqKG4sdCxlLGkpe2xldCByPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO2lmKG51bGwhPT1yKXtsZXQgbz1tYjtyPDAmJihyPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPX5yLG89LTEpLHI3KG4saSx0LnVwZGF0ZVtyXSxlLG8pfX1mdW5jdGlvbiBjZ2Uobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1uLmNhc2VzLmluZGV4T2YodCk7aWYoLTE9PT1lKXN3aXRjaChuLnR5cGUpe2Nhc2UgMTp7bGV0IGk9ZnVuY3Rpb24obix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gdGEobilbYnIuUGx1cmFsQ2FzZV19KHQpKHBhcnNlSW50KG4sMTApKSxpPXFtZVtlXTtyZXR1cm4gdm9pZCAwIT09aT9pOiJvdGhlciJ9KHQsSlcpO2U9bi5jYXNlcy5pbmRleE9mKGkpLC0xPT09ZSYmIm90aGVyIiE9PWkmJihlPW4uY2FzZXMuaW5kZXhPZigib3RoZXIiKSk7YnJlYWt9Y2FzZSAwOmU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpfXJldHVybi0xPT09ZT9udWxsOmV9KHQsaSk7aWYocUUodCxlKSE9PXImJihvNyhuLHQsZSksZVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09bnVsbD09PXI/bnVsbDp+cixudWxsIT09cikpe2xldCBzPWVbdC5hbmNob3JJZHhdO3MmJmk3KG4sdC5jcmVhdGVbcl0sZSxzKX19ZnVuY3Rpb24gbzcobix0LGUpe2xldCBpPXFFKHQsZSk7aWYobnVsbCE9PWkpe2xldCByPXQucmVtb3ZlW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHM+MCl7bGV0IGE9SUUocyxlKTtudWxsIT09YSYmUjYoZVsxMV0sYSl9ZWxzZSBvNyhuLHRiKG4sfnMpLGUpfX19ZnVuY3Rpb24gZGdlKCl7bGV0IGUsaSxuPVtdLHQ9LTE7ZnVuY3Rpb24gbyhhLGwpe3Q9MDtsZXQgYz1xRShhLGwpO2k9bnVsbCE9PWM/YS5yZW1vdmVbY106V2l9ZnVuY3Rpb24gcygpe2lmKHQ8aS5sZW5ndGgpe2xldCBhPWlbdCsrXTtyZXR1cm4gYT4wP2VbYV06KG4ucHVzaCh0LGkpLG8oZVsxXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgeEU9L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2kscGdlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSxoZ2U9L1x1ZmZmZChcZCspXHVmZmZkLyxzNz0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sZmdlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxtZ2U9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLGdnZT0vXHVFNTAwL2c7ZnVuY3Rpb24gYTcobix0LGUsaSxyLG8scyl7bGV0IGE9cWcobixpLDEsbnVsbCksbD1hPDxxbC5TSElGVCxjPWxiKCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9cWwuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1xbC5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PVlrJiYoWWs9bigpKX0oZGdlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IHU9ck4obixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO3Q3KGUsdSk7bGV0IGQ9dS5pbmRleDtyZXR1cm4gV2ModSwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KEk2KCRXLGU3KSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmY0coIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLGQpLHV9ZnVuY3Rpb24geWdlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goeEUpLGw9YTcobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZyYihyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gcmIobix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoeEUpLHU9MDtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXTtpZigxJmQpe2xldCBoPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWgpLHV8PWw3KGgpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT11LG5bYV09bi5sZW5ndGgtbCx1fWZ1bmN0aW9uIHhnZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24gbDcobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIFFqKG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD1mZ2UuZXhlYyhuKSk7KXI/dFswXT09PWBcdWZmZmQvKiR7b31cdWZmZmRgJiYoaT10LmluZGV4LHI9ITEpOihlKz1uLnN1YnN0cmluZyhpLHQuaW5kZXgrdFswXS5sZW5ndGgpLG89dFsxXSxyPSEwKTtyZXR1cm4gZSs9bi5zbGljZShpKSxlfWZ1bmN0aW9uIGM3KG4sdCxlLGkscixvKXtsZXQgcz0wLGE9e3R5cGU6ci50eXBlLGN1cnJlbnRDYXNlTFZpZXdJbmRleDpxZyhuLHQsMSxudWxsKSxhbmNob3JJZHg6byxjYXNlczpbXSxjcmVhdGU6W10scmVtb3ZlOltdLHVwZGF0ZTpbXX07KGZ1bmN0aW9uKG4sdCxlKXtuLnB1c2gobDcodC5tYWluQmluZGluZyksMiwtMS10Lm1haW5CaW5kaW5nLGU8PDJ8Mil9KShlLHIsbyksZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGF0YVt0XTtudWxsPT09aT9uLmRhdGFbdF09ZTppLnZhbHVlPWV9KG4sbyxhKTtsZXQgbD1yLnZhbHVlcztmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXSxkPVtdO2ZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXtsZXQgaD11W3BdO2lmKCJzdHJpbmciIT10eXBlb2YgaCl7bGV0IGY9ZC5wdXNoKGgpLTE7dVtwXT1gXHgzYyEtLVx1ZmZmZCR7Zn1cdWZmZmQtLVx4M2VgfX1zPVNnZShuLGEsdCxlLGksci5jYXNlc1tjXSx1LmpvaW4oIiIpLGQpfHN9cyYmZnVuY3Rpb24obix0LGUpe24ucHVzaCh0LDEsZTw8MnwzKX0oZSxzLG8pfWZ1bmN0aW9uIE1nZShuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTAsbz1zRihuPW4ucmVwbGFjZShzNyxmdW5jdGlvbihzLGEsbCl7cmV0dXJuIGk9InNlbGVjdCI9PT1sPzA6MSxyPXBhcnNlSW50KGEuc2xpY2UoMSksMTApLCIifSkpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7KXtsZXQgYT1vW3MrK10udHJpbSgpOzE9PT1pJiYoYT1hLnJlcGxhY2UoL1xzKig/Oj0pPyhcdyspXHMqLywiJDEiKSksYS5sZW5ndGgmJnQucHVzaChhKTtsZXQgbD1zRihvW3MrK10pO3QubGVuZ3RoPmUubGVuZ3RoJiZlLnB1c2gobCl9cmV0dXJue3R5cGU6aSxtYWluQmluZGluZzpyLGNhc2VzOnQsdmFsdWVzOmV9fWZ1bmN0aW9uIHNGKG4pe2lmKCFuKXJldHVybltdO2xldCBvLHQ9MCxlPVtdLGk9W10scj0vW3t9XS9nO2ZvcihyLmxhc3RJbmRleD0wO289ci5leGVjKG4pOyl7bGV0IGE9by5pbmRleDtpZigifSI9PW9bMF0pe2lmKGUucG9wKCksMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7czcudGVzdChsKT9pLnB1c2goTWdlKGwpKTppLnB1c2gobCksdD1hKzF9fWVsc2V7aWYoMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7aS5wdXNoKGwpLHQ9YSsxfWUucHVzaCgieyIpfX1sZXQgcz1uLnN1YnN0cmluZyh0KTtyZXR1cm4gaS5wdXNoKHMpLGl9ZnVuY3Rpb24gU2dlKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz1bXSx1PVtdO3QuY2FzZXMucHVzaChvKSx0LmNyZWF0ZS5wdXNoKGwpLHQucmVtb3ZlLnB1c2goYyksdC51cGRhdGUucHVzaCh1KTtsZXQgcD1zNigkRygpKS5nZXRJbmVydEJvZHlFbGVtZW50KHMpLGg9VWsocCl8fHA7cmV0dXJuIGg/dTcobix0LGUsaSxsLGMsdSxoLHIsYSwwKTowfWZ1bmN0aW9uIHU3KG4sdCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9MCxwPWEuZmlyc3RDaGlsZDtmb3IoO3A7KXtsZXQgaD1xZyhuLGUsMSxudWxsKTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpsZXQgZj1wLG09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoVmsuaGFzT3duUHJvcGVydHkobSkpe3BrKHIsS1csbSxsLGgpLG4uZGF0YVtoXT1tO2xldCBJPWYuYXR0cmlidXRlcztmb3IobGV0IEE9MDtBPEkubGVuZ3RoO0ErKyl7bGV0IE89SS5pdGVtKEEpLGVlPU8ubmFtZS50b0xvd2VyQ2FzZSgpO08udmFsdWUubWF0Y2goeEUpP3U2Lmhhc093blByb3BlcnR5KGVlKSYmcmIocyxPLnZhbHVlLGgsTy5uYW1lLDAscUZbZWVdP0ViOm51bGwpOkFnZShyLGgsTyl9ZD11NyhuLHQsZSxpLHIsbyxzLHAsaCxjLHUrMSl8ZCxLaihvLGgsdSl9YnJlYWs7Y2FzZSBOb2RlLlRFWFRfTk9ERTpsZXQgQz1wLnRleHRDb250ZW50fHwiIixfPUMubWF0Y2goeEUpO3BrKHIsbnVsbCxfPyIiOkMsbCxoKSxLaihvLGgsdSksXyYmKGQ9cmIocyxDLGgsbnVsbCwwLG51bGwpfGQpO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6bGV0IHk9aGdlLmV4ZWMocC50ZXh0Q29udGVudHx8IiIpO2lmKHkpe2xldCBBPWNbcGFyc2VJbnQoeVsxXSwxMCldO3BrKHIsWlcsIiIsbCxoKSxjNyhuLGUsaSxsLEEsaCksRWdlKG8saCx1KX19cD1wLm5leHRTaWJsaW5nfXJldHVybiBkfWZ1bmN0aW9uIEtqKG4sdCxlKXswPT09ZSYmbi5wdXNoKHQpfWZ1bmN0aW9uIEVnZShuLHQsZSl7MD09PWUmJihuLnB1c2gofnQpLG4ucHVzaCh0KSl9ZnVuY3Rpb24gcGsobix0LGUsaSxyKXtudWxsIT09dCYmbi5wdXNoKHQpLG4ucHVzaChlLHIsZnVuY3Rpb24obix0LGUpe3JldHVybiAwfHQ8PDE3fGU8PDF9KDAsaSxyKSl9ZnVuY3Rpb24gQWdlKG4sdCxlKXtuLnB1c2godDw8MXwxLGUubmFtZSxlLnZhbHVlKX12YXIgSWdlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxQZ2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyxSZ2U9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxPZ2U9L3soW0EtWjAtOV9dKyl9L2csa2dlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxGZ2U9L1wvXCovLE5nZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gZDcobix0LGU9LTEpe2xldCBpPURpKCkscj1aZSgpLG89MjIrbixzPWVwKGkuY29uc3RzLHQpLGE9bGIoKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWxiKCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4gUWoobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH1cdWZmZmRgKSsyK3QudG9TdHJpbmcoKS5sZW5ndGgsaT1uLnNlYXJjaChuZXcgUmVnRXhwKGBcdWZmZmRcXC9cXCpcXGQrOiR7dH1cdWZmZmRgKSk7cmV0dXJuIFFqKG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgdT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGdnZSwiICIpfShyKS5zcGxpdChtZ2UpO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXtsZXQgcD11W2RdO2lmKDA9PSgxJmQpKXtsZXQgaD1zRihwKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IG09aFtmXTtpZigwPT0oMSZmKSl7bGV0IEM9bTsiIiE9PUMmJnlnZShuLHMsY1swXSxhLGwsZSxDKX1lbHNle2xldCBDPW07aWYoIm9iamVjdCIhPXR5cGVvZiBDKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO2M3KG4sZSxsLHQsQyxhNyhuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGg9NDc9PT1wLmNoYXJDb2RlQXQoMCksbT0ocC5jaGFyQ29kZUF0KGg/MTowKSwyMitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoaD8yOjEpKSk7aWYoaCljLnNoaWZ0KCksV2MobGIoKSwhMSk7ZWxzZXtsZXQgQz1uZ2UobixjWzBdLG0pO2MudW5zaGlmdChbXSksV2MoQywhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLHU9UzYoaSxhPT09cls2XT9udWxsOmEscik7KGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bMTFdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W28rK10sYT10W29dLGw9KHMmcWwuQ09NTUVOVCk9PT1xbC5DT01NRU5ULGM9KHMmcWwuQVBQRU5EX0VBR0VSTFkpPT09cWwuQVBQRU5EX0VBR0VSTFksdT1zPj4+cWwuU0hJRlQsZD1uW3VdO251bGw9PT1kJiYoZD1uW3VdPWw/ci5jcmVhdGVDb21tZW50KGEpOmVOKHIsYSkpLGMmJm51bGwhPT1lJiZaaChyLGUsZCxpLCExKX19KShyLGwuY3JlYXRlLHUsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxURyghMCl9ZnVuY3Rpb24gcDcoKXtURyghMSl9ZnVuY3Rpb24gWUUobix0LGUpe2Q3KG4sdCxlKSxwNygpfWZ1bmN0aW9uIE9iKG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYobWJ8PTE8PE1hdGgubWluKG5iLDMxKSksbmIrK30oc3MoWmUoKSxVZygpLG4pKSxPYn1mdW5jdGlvbiBYRShuKXshZnVuY3Rpb24obix0LGUpe2lmKG5iPjApe2xldCBpPW4uZGF0YVtlXTtyNyhuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLCR1KCktbmItMSxtYil9bWI9MCxuYj0wfShEaSgpLFplKCksbisyMil9ZnVuY3Rpb24gUUUobix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKElnZS50ZXN0KG4pKXtsZXQgaT17fSxyPVswXTtlPWUucmVwbGFjZShQZ2UsKG8scyxhKT0+e2xldCBsPXN8fGEsYz1pW2xdfHxbXTtpZihjLmxlbmd0aHx8KGwuc3BsaXQoInwiKS5mb3JFYWNoKG09PntsZXQgQz1tLm1hdGNoKE5nZSksXz1DP3BhcnNlSW50KENbMV0sMTApOjAseT1GZ2UudGVzdChtKTtjLnB1c2goW18seSxtXSl9KSxpW2xdPWMpLCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7bH1gKTtsZXQgdT1yW3IubGVuZ3RoLTFdLGQ9MDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rKylpZihjW21dWzBdPT09dSl7ZD1tO2JyZWFrfWxldFtwLGgsZl09Y1tkXTtyZXR1cm4gaD9yLnBvcCgpOnUhPT1wJiZyLnB1c2gocCksYy5zcGxpY2UoZCwxKSxmfSl9cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKGU9ZS5yZXBsYWNlKFJnZSwoaSxyLG8scyxhLGwpPT50Lmhhc093blByb3BlcnR5KG8pP2Ake3J9JHt0W29dfSR7bH1gOmkpLGU9ZS5yZXBsYWNlKE9nZSwoaSxyKT0+dC5oYXNPd25Qcm9wZXJ0eShyKT90W3JdOmkpLGU9ZS5yZXBsYWNlKGtnZSwoaSxyKT0+e2lmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIElDVSAtICR7aX0gd2l0aCBrZXk6ICR7cn1gKTtyZXR1cm4gby5zaGlmdCgpfXJldHVybiBpfSkpLGV9KG4sdCl9ZnVuY3Rpb24gYUYobix0LGUsaSxyKXtpZihuPXFpKG4pLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspYUYobltvXSx0LGUsaSxyKTtlbHNle2xldCBvPURpKCkscz1aZSgpLGE9a2cobik/bjpxaShuLnByb3ZpZGUpLGw9XzYobiksYz1NbygpLHU9MTA0ODU3NSZjLnByb3ZpZGVySW5kZXhlcyxkPWMuZGlyZWN0aXZlU3RhcnQscD1jLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoa2cobil8fCFuLm11bHRpKXtsZXQgaD1uZXcgS2gobCxyLHcpLGY9ZmsoYSx0LHI/dTp1K3AsZCk7LTE9PT1mPyhkRShjYihjLHMpLG8sYSksaGsobyxuLHQubGVuZ3RoKSx0LnB1c2goYSksYy5kaXJlY3RpdmVTdGFydCsrLGMuZGlyZWN0aXZlRW5kKyssciYmKGMucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxlLnB1c2goaCkscy5wdXNoKGgpKTooZVtmXT1oLHNbZl09aCl9ZWxzZXtsZXQgaD1mayhhLHQsdStwLGQpLGY9ZmsoYSx0LHUsdStwKSxtPWg+PTAmJmVbaF0sQz1mPj0wJiZlW2ZdO2lmKHImJiFDfHwhciYmIW0pe2RFKGNiKGMscyksbyxhKTtsZXQgXz1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBLaChuLGUsdyk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsaDcobyxyLGkmJiFlKSxvfShyP1VnZTpIZ2UsZS5sZW5ndGgscixpLGwpOyFyJiZDJiYoZVtmXS5wcm92aWRlckZhY3Rvcnk9XyksaGsobyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChfKSxzLnB1c2goXyl9ZWxzZSBoayhvLG4saD4tMT9oOmYsaDcoZVtyP2Y6aF0sbCwhciYmaSkpOyFyJiZpJiZDJiZlW2ZdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gaGsobix0LGUsaSl7bGV0IHI9a2codCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP3FpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IHU9Yy5pbmRleE9mKGUpOy0xPT09dT9jLnB1c2goZSxbaSxsXSk6Y1t1KzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gaDcobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIGZrKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSGdlKG4sdCxlLGkpe3JldHVybiBsRih0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBVZ2Uobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT1DYihlLGVbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7bz1hLnNsaWNlKDAscyksbEYocixvKTtmb3IobGV0IGw9cztsPGEubGVuZ3RoO2wrKylvLnB1c2goYVtsXSl9ZWxzZSBvPVtdLGxGKHIsbyk7cmV0dXJuIG99ZnVuY3Rpb24gbEYobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gJHQobix0PVtdKXtyZXR1cm4gZT0+e2UucHJvdmlkZXJzUmVzb2x2ZXI9KGkscik9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1EaSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtsZXQgcj1RbChuKTthRihlLGkuZGF0YSxpLmJsdWVwcmludCxyLCEwKSxhRih0LGkuZGF0YSxpLmJsdWVwcmludCxyLCExKX19KGkscj9yKG4pOm4sdCl9fXZhciBpcD1jbGFzc3t9LGNGPWNsYXNze30sdUY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGhiKHRoaXMpO2xldCBpPUlnKHQpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9S1MoaS5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9VTYodCxlLFt7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGNvKHQpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtsZXQgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fSxkRj1jbGFzcyBleHRlbmRzIGNGe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXR9Y3JlYXRlKHQpe3JldHVybiBuZXcgdUYodGhpcy5tb2R1bGVUeXBlLHQpfX0scEY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgaGIodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2xldCByPW5ldyBtRShbLi4udCx7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGV8fFFGKCksaSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9cixyLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kodCl9fSxHZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZSl7aWYoIWUuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGUuaWQpKXtsZXQgaT1mNigwLGUudHlwZSkscj1pLmxlbmd0aD4wP2Z1bmN0aW9uKG4sdCxlPW51bGwpe3JldHVybiBuZXcgcEYobix0LGUpLmluamVjdG9yfShbaV0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHtlLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoZS5pZCxyKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGUuaWQpfW5nT25EZXN0cm95KCl7dHJ5e2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09ZSYmZS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IG4oUihucCkpfSksbn0pKCk7ZnVuY3Rpb24gbHAobix0LGUpe2xldCBpPUVzKCkrbixyPVplKCk7cmV0dXJuIHJbaV09PT1Hbj9LYyhyLGksZT90LmNhbGwoZSk6dCgpKTpJYihyLGkpfWZ1bmN0aW9uIEhuKG4sdCxlLGkpe3JldHVybiBmNyhaZSgpLEVzKCksbix0LGUsaSl9ZnVuY3Rpb24gdG8obix0LGUsaSxyKXtyZXR1cm4gbTcoWmUoKSxFcygpLG4sdCxlLGkscil9ZnVuY3Rpb24ga2Iobix0LGUsaSxyLG8pe3JldHVybiBnNyhaZSgpLEVzKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIG1OKG4sdCxlLGkscixvLHMpe3JldHVybiBfNyhaZSgpLEVzKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gZ04obix0LGUsaSxyLG8scyxhKXtsZXQgbD1FcygpK24sYz1aZSgpLHU9bGwoYyxsLGUsaSxyLG8pO3JldHVybiBzcyhjLGwrNCxzKXx8dT9LYyhjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpJYihjLGwrNSl9ZnVuY3Rpb24gRmIobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09R24/dm9pZCAwOmV9ZnVuY3Rpb24gZjcobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gc3MobixzLHIpP0tjKG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6RmIobixzKzEpfWZ1bmN0aW9uIG03KG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gZWYobixhLHIsbyk/S2MobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6RmIobixhKzIpfWZ1bmN0aW9uIGc3KG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBqRShuLGwscixvLHMpP0tjKG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpGYihuLGwrMyl9ZnVuY3Rpb24gXzcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gbGwobixjLHIsbyxzLGEpP0tjKG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6RmIobixjKzQpfWZ1bmN0aW9uIHY3KG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylzcyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP0tjKG4scyxpLmFwcGx5KG8scikpOkZiKG4scyl9ZnVuY3Rpb24gaihuLHQpe2xldCBpLGU9RGkoKSxyPW4rMjI7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzfHwoZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9UWgoaS50eXBlKSkscz1pbCh3KTt0cnl7bGV0IGE9dUUoITEpLGw9bygpO3JldHVybiB1RShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLFplKCkscixsKSxsfWZpbmFsbHl7aWwocyl9fWZ1bmN0aW9uIFcobix0LGUpe2xldCBpPW4rMjIscj1aZSgpLG89SGcocixpKTtyZXR1cm4gTmIocixpKT9mNyhyLEVzKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIG5mKG4sdCxlLGkpe2xldCByPW4rMjIsbz1aZSgpLHM9SGcobyxyKTtyZXR1cm4gTmIobyxyKT9tNyhvLEVzKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBfTihuLHQsZSxpLHIpe2xldCBvPW4rMjIscz1aZSgpLGE9SGcocyxvKTtyZXR1cm4gTmIocyxvKT9nNyhzLEVzKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gTmIobix0KXtyZXR1cm4gblsxXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gbWsobil7cmV0dXJuIHQ9PntzZXRUaW1lb3V0KG4sdm9pZCAwLHQpfX12YXIgRz1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxpKXtsZXQgcj10LG89ZXx8KCgpPT5udWxsKSxzPWk7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbD10O3I9bC5uZXh0Py5iaW5kKGwpLG89bC5lcnJvcj8uYmluZChsKSxzPWwuY29tcGxldGU/LmJpbmQobCl9dGhpcy5fX2lzQXN5bmMmJihvPW1rKG8pLHImJihyPW1rKHIpKSxzJiYocz1tayhzKSkpO2xldCBhPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpyLGVycm9yOm8sY29tcGxldGU6c30pO3JldHVybiB0IGluc3RhbmNlb2Ygdm4mJnQuYWRkKGEpLGF9fTtmdW5jdGlvbiAkZ2UoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tVRSgpXSgpfXZhciBjbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtsZXQgZT1VRSgpLGk9Y2wucHJvdG90eXBlO2lbZV18fChpW2VdPSRnZSl9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEcpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9WHUodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sT2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189bjBlLG59KSgpLGUwZT1PaSx0MGU9Y2xhc3MgZXh0ZW5kcyBlMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Mscj1CRSh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGksdCwxNixudWxsLGkuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwsZXx8bnVsbCk7clsxN109dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO2xldCBzPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09cyYmKHJbMTldPXMuY3JlYXRlRW1iZWRkZWRWaWV3KGkpKSxvTihpLHIsdCksbmV3ICRoKHIpfX07ZnVuY3Rpb24gbjBlKCl7cmV0dXJuIEtFKE1vKCksWmUoKSl9ZnVuY3Rpb24gS0Uobix0KXtyZXR1cm4gNCZuLnR5cGU/bmV3IHQwZSh0LG4sR2cobix0KSk6bnVsbH12YXIgeWk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189aTBlLG59KSgpO2Z1bmN0aW9uIGkwZSgpe3JldHVybiBiNyhNbygpLFplKCkpfXZhciByMGU9eWkseTc9Y2xhc3MgZXh0ZW5kcyByMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fbENvbnRhaW5lcj10LHRoaXMuX2hvc3RUTm9kZT1lLHRoaXMuX2hvc3RMVmlldz1pfWdldCBlbGVtZW50KCl7cmV0dXJuIEdnKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgWWgodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IHBhcmVudEluamVjdG9yKCl7bGV0IHQ9VUYodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoTkcodCkpe2xldCBlPWNFKHQsdGhpcy5faG9zdExWaWV3KSxpPWxFKHQpO3JldHVybiBuZXcgWWgoZVsxXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBZaChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC0xMH1jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiFYeSh0KTtpZihzKWE9ZTtlbHNle2xldCBkPWV8fHt9O2E9ZC5pbmRleCxpPWQuaW5qZWN0b3Iscj1kLnByb2plY3RhYmxlTm9kZXMsbz1kLmVudmlyb25tZW50SW5qZWN0b3J8fGQubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyB2RShvbCh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChucCxudWxsKTtwJiYobz1wKX1sZXQgdT1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydCh1Lmhvc3RWaWV3LGEpLHV9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pWzFdO2lmKEp1KGlbM10pKXtsZXQgdT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT11KXRoaXMuZGV0YWNoKHUpO2Vsc2V7bGV0IGQ9aVszXSxwPW5ldyB5NyhkLGRbNl0sZFszXSk7cC5kZXRhY2gocC5pbmRleE9mKHQpKX19bGV0IG89dGhpcy5fYWRqdXN0SW5kZXgoZSkscz10aGlzLl9sQ29udGFpbmVyOyFmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xMCtpLG89ZS5sZW5ndGg7aT4wJiYoZVtyLTFdWzRdPXQpLGk8by0xMD8odFs0XT1lW3JdLHFHKGUsMTAraSx0KSk6KGUucHVzaCh0KSx0WzRdPW51bGwpLHRbM109ZTtsZXQgcz10WzE3XTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bls5XTt0WzE2XSE9PXRbM11bM11bMTZdJiYoblsyXT0hMCksbnVsbD09PWU/bls5XT1bdF06ZS5wdXNoKHQpfShzLHQpO2xldCBhPXRbMTldO251bGwhPT1hJiZhLmluc2VydFZpZXcobiksdFsyXXw9NjR9KHIsaSxzLG8pO2xldCBhPUtrKG8scyksbD1pWzExXSxjPU5FKGwsc1s3XSk7cmV0dXJuIG51bGwhPT1jJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7aVswXT1yLGlbNl09dCxBYihuLGksZSwxLHIsbyl9KHIsc1s2XSxsLGksYyxhKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHFHKGdrKHMpLG8sdCksdH1tb3ZlKHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7aSYmKHBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpLHc2KGlbMV0saSkpfWRldGFjaCh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7cmV0dXJuIGkmJm51bGwhPXBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpP25ldyAkaChpKTpudWxsfV9hZGp1c3RJbmRleCh0LGU9MCl7cmV0dXJuIHQ/P3RoaXMubGVuZ3RoK2V9fTtmdW5jdGlvbiBKaihuKXtyZXR1cm4gbls4XX1mdW5jdGlvbiBnayhuKXtyZXR1cm4gbls4XXx8KG5bOF09W10pfWZ1bmN0aW9uIGI3KG4sdCl7bGV0IGUsaT10W24uaW5kZXhdO2lmKEp1KGkpKWU9aTtlbHNle2xldCByO2lmKDgmbi50eXBlKXI9TWEoaSk7ZWxzZXtsZXQgbz10WzExXTtyPW8uY3JlYXRlQ29tbWVudCgiIik7bGV0IHM9dWwobix0KTtaaChvLE5FKG8scykscixmdW5jdGlvbihuLHQpe3JldHVybiBuLm5leHRTaWJsaW5nKHQpfShvLHMpLCExKX10W24uaW5kZXhdPWU9ZVcoaSx0LHIsbiksSEUodCxlKX1yZXR1cm4gbmV3IHk3KGUsbix0KX12YXIgZ2I9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeUxpc3Q9dCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgZ2IodGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19LF9iPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtsZXQgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2xldCBpPW51bGwhPT10LmNvbnRlbnRRdWVyaWVzP3QuY29udGVudFF1ZXJpZXNbMF06ZS5sZW5ndGgscj1bXTtmb3IobGV0IG89MDtvPGk7bysrKXtsZXQgcz1lLmdldEJ5SW5kZXgobyk7ci5wdXNoKHRoaXMucXVlcmllc1tzLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgX2Iocil9cmV0dXJuIG51bGx9aW5zZXJ0Vmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRldGFjaFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KXtmb3IobGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKW51bGwhPT1NNyh0LGUpLm1hdGNoZXMmJnRoaXMucXVlcmllc1tlXS5zZXREaXJ0eSgpfX0sQ0U9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPWl9fSx2Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1lbGVtZW50U3RhcnQodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtsZXQgcj1udWxsIT09ZT9lLmxlbmd0aDowLG89dGhpcy5nZXRCeUluZGV4KGkpLmVtYmVkZGVkVFZpZXcodCxyKTtvJiYoby5pbmRleEluRGVjbGFyYXRpb25WaWV3PWksbnVsbCE9PWU/ZS5wdXNoKG8pOmU9W29dKX1yZXR1cm4gbnVsbCE9PWU/bmV3IHZiKGUpOm51bGx9dGVtcGxhdGUodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fSx5Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEpe3RoaXMubWV0YWRhdGE9dCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1lfWVsZW1lbnRTdGFydCh0LGUpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShlKSYmdGhpcy5tYXRjaFROb2RlKHQsZSl9ZWxlbWVudEVuZCh0KXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PXQuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUodCxlKXt0aGlzLmVsZW1lbnRTdGFydCh0LGUpfWVtYmVkZGVkVFZpZXcodCxlKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLXQuaW5kZXgsZSksbmV3IHliKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUodCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEhPSgxJnRoaXMubWV0YWRhdGEuZmxhZ3MpKXtsZXQgZT10aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleCxpPXQucGFyZW50O2Zvcig7bnVsbCE9PWkmJjgmaS50eXBlJiZpLmluZGV4IT09ZTspaT1pLnBhcmVudDtyZXR1cm4gZT09PShudWxsIT09aT9pLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZSh0LGUpe2xldCBpPXRoaXMubWV0YWRhdGEucHJlZGljYXRlO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGEwZShlLG8pKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LG8sITEsITEpKX1lbHNlIGk9PT1PaT80JmUudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LGksITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGkpe2lmKG51bGwhPT1pKXtsZXQgcj10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PXIpaWYocj09PUFlfHxyPT09eWl8fHI9PT1PaSYmNCZlLnR5cGUpdGhpcy5hZGRNYXRjaChlLmluZGV4LC0yKTtlbHNle2xldCBvPVhTKGUsdCxyLCExLCExKTtudWxsIT09byYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG8pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LGkpfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fTtmdW5jdGlvbiBhMGUobix0KXtsZXQgZT1uLmxvY2FsTmFtZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKWlmKGVbaV09PT10KXJldHVybiBlW2krMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gYzBlKG4sdCxlLGkpe3JldHVybi0xPT09ZT9mdW5jdGlvbihuLHQpe3JldHVybiAxMSZuLnR5cGU/R2cobix0KTo0Jm4udHlwZT9LRShuLHQpOm51bGx9KHQsbik6LTI9PT1lP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZT09PUFlP0dnKHQsbik6ZT09PU9pP0tFKHQsbik6ZT09PXlpP2I3KHQsbik6dm9pZCAwfShuLHQsaSk6Q2IobixuWzFdLGUsdCl9ZnVuY3Rpb24geDcobix0LGUsaSl7bGV0IHI9dFsxOV0ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOmMwZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gZkYobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPXg3KG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sdT10Wy1sXTtmb3IobGV0IGQ9MTA7ZDx1Lmxlbmd0aDtkKyspe2xldCBwPXVbZF07cFsxN109PT1wWzNdJiZmRihwWzFdLHAsYyxpKX1pZihudWxsIT09dVs5XSl7bGV0IGQ9dVs5XTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGg9ZFtwXTtmRihoWzFdLGgsYyxpKX19fX19cmV0dXJuIGl9ZnVuY3Rpb24gTmUobil7bGV0IHQ9WmUoKSxlPURpKCksaT1ERygpO0xGKGkrMSk7bGV0IHI9TTcoZSxpKTtpZihuLmRpcnR5JiZmdW5jdGlvbihuKXtyZXR1cm4gND09KDQmblsyXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/ZkYoZSx0LGksW10pOng3KGUsdCxyLGkpO24ucmVzZXQobyxUaGUpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbHQobix0LGUpe2xldCBpPURpKCk7aS5maXJzdENyZWF0ZVBhc3MmJih3NyhpLG5ldyBDRShuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLEM3KGksWmUoKSx0KX1mdW5jdGlvbiBOaShuLHQsZSxpKXtsZXQgcj1EaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz1NbygpO3c3KHIsbmV3IENFKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9QzcocixaZSgpLGUpfWZ1bmN0aW9uIExlKCl7cmV0dXJuIG49WmUoKSx0PURHKCksblsxOV0ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBDNyhuLHQsZSl7bGV0IGk9bmV3IGNsKDQ9PSg0JmUpKTtxNihuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10WzE5XSYmKHRbMTldPW5ldyBfYiksdFsxOV0ucXVlcmllcy5wdXNoKG5ldyBnYihpKSl9ZnVuY3Rpb24gdzcobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IHZiKSxuLnF1ZXJpZXMudHJhY2sobmV3IHliKHQsZSkpfWZ1bmN0aW9uIE03KG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIGVuKG4sdCl7cmV0dXJuIEtFKG4sdCl9dmFyICRkPXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjp6ZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBsVyhuLHQsZSxpLHIsbyl7bGV0IHM9WmUoKSxhPVhnKHMsdCxlLGkpO3JldHVybiBhIT09R24mJlFjKHFyKCkscyxuLGEscixvKSxsV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gY1cobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9UWcobCx0LGUsaSxyLG8pO3JldHVybiBjIT09R24mJlFjKHFyKCksbCxuLGMscyxhKSxjV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdVcobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9WmUoKSxkPUtnKHUsdCxlLGkscixvLHMsYSk7cmV0dXJuIGQhPT1HbiYmUWMocXIoKSx1LG4sZCxsLGMpLHVXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBkVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9WmUoKSxoPVpnKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBoIT09R24mJlFjKHFyKCkscCxuLGgsdSxkKSxkV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gcFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXtsZXQgZj1aZSgpLG09SmcoZix0LGUsaSxyLG8scyxhLGwsYyx1LGQpO3JldHVybiBtIT09R24mJlFjKHFyKCksZixuLG0scCxoKSxwV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gaFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9WmUoKSxfPSRnKEMsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCk7cmV0dXJuIF8hPT1HbiYmUWMocXIoKSxDLG4sXyxmLG0pLGhXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBmVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyl7bGV0IHk9WmUoKSxJPWUwKHksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0pO3JldHVybiBJIT09R24mJlFjKHFyKCkseSxuLEksQyxfKSxmV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gbVcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSxJKXtsZXQgQT1aZSgpLE89dDAoQSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pO3JldHVybiBPIT09R24mJlFjKHFyKCksQSxuLE8seSxJKSxtV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gZ1cobix0LGUsaSl7bGV0IHI9WmUoKSxvPVlnKHIsdCk7cmV0dXJuIG8hPT1HbiYmUWMocXIoKSxyLG4sbyxlLGkpLGdXfSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjprLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOk9lLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjpnZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjp6LCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpCZywiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0Ijp3LCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpoaSwiXHUwMjc1XHUwMjc1aW5qZWN0IjpSLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOktvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6SmwsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRywiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOmVuLCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOm9lLCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOnp0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjokdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PWFXKG4udHlwZSk7ZT1RbChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiAkZmUpaVtyXT1lW3JdO2lmKFFsKGUpKWZvcihsZXQgciBvZiBlbWUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjp0dCwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOmZ1bmN0aW9uKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KEdnZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9LCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6TSwiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6U2EsIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ibWF0aCJ9LCJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciOmpuLCJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtZbi5iaW5kaW5nc0VuYWJsZWQ9ITB9LCJcdTAyNzVcdTAyNzVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uKCl7WW4uYmluZGluZ3NFbmFibGVkPSExfSwiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0IjpnLCJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIjp2LCJcdTAyNzVcdTAyNzVlbGVtZW50IjpOLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiOkt0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIjpadCwiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lciI6QWksIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiOmxwLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIjpIbiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMiI6dG8sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiOmtiLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240IjptTiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNSI6Z04sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1FcygpK24sdT1aZSgpLGQ9bGwodSxjLGUsaSxyLG8pO3JldHVybiBlZih1LGMrNCxzLGEpfHxkP0tjKHUsYys2LGw/dC5jYWxsKGwsZSxpLHIsbyxzLGEpOnQoZSxpLHIsbyxzLGEpKTpJYih1LGMrNil9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjKXtsZXQgdT1FcygpK24sZD1aZSgpLHA9bGwoZCx1LGUsaSxyLG8pO3JldHVybiBqRShkLHUrNCxzLGEsbCl8fHA/S2MoZCx1KzcsYz90LmNhbGwoYyxlLGkscixvLHMsYSxsKTp0KGUsaSxyLG8scyxhLGwpKTpJYihkLHUrNyl9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPUVzKCkrbixwPVplKCksaD1sbChwLGQsZSxpLHIsbyk7cmV0dXJuIGxsKHAsZCs0LHMsYSxsLGMpfHxoP0tjKHAsZCs4LHU/dC5jYWxsKHUsZSxpLHIsbyxzLGEsbCxjKTp0KGUsaSxyLG8scyxhLGwsYykpOkliKHAsZCs4KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiOmZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiB2NyhaZSgpLEVzKCksbix0LGUsaSl9LCJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyI6SWUsIlx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3IjpyZSwiXHUwMjc1XHUwMjc1bGlzdGVuZXIiOlAsIlx1MDI3NVx1MDI3NXByb2plY3Rpb24iOk5uLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiOnIwLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOmkwLCJcdTAyNzVcdTAyNzVwaXBlQmluZDEiOlcsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMiI6bmYsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMyI6X04sIlx1MDI3NVx1MDI3NXBpcGVCaW5kNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW4rMjIsYT1aZSgpLGw9SGcoYSxzKTtyZXR1cm4gTmIoYSxzKT9fNyhhLEVzKCksdCxsLnRyYW5zZm9ybSxlLGkscixvLGwpOmwudHJhbnNmb3JtKGUsaSxyLG8pfSwiXHUwMjc1XHUwMjc1cGlwZUJpbmRWIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bisyMixyPVplKCksbz1IZyhyLGkpO3JldHVybiBOYihyLGkpP3Y3KHIsRXMoKSx0LG8udHJhbnNmb3JtLGUsbyk6by50cmFuc2Zvcm0uYXBwbHkobyxlKX0sIlx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiOndpLCJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiOkFhLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eSI6YiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSI6eHIsIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIjpQYiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTIiOkdFLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdlcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1LZyhjLHQsZSxpLHIsbyxzLGEpO3JldHVybiB1IT09R24mJkRhKERpKCkscXIoKSxjLG4sdSxjWzExXSxsLCExKSx2V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB5VyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1aZyhkLHQsZSxpLHIsbyxzLGEsbCxjKTtyZXR1cm4gcCE9PUduJiZEYShEaSgpLHFyKCksZCxuLHAsZFsxMV0sdSwhMSkseVd9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gYlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPUpnKGgsdCxlLGkscixvLHMsYSxsLGMsdSxkKTtyZXR1cm4gZiE9PUduJiZEYShEaSgpLHFyKCksaCxuLGYsaFsxMV0scCwhMSksYld9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24geFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz0kZyhtLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpO3JldHVybiBDIT09R24mJkRhKERpKCkscXIoKSxtLG4sQyxtWzExXSxmLCExKSx4V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBDVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT1lMChfLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKTtyZXR1cm4geSE9PUduJiZEYShEaSgpLHFyKCksXyxuLHksX1sxMV0sQywhMSksQ1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gd1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSl7bGV0IEk9WmUoKSxBPXQwKEksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKTtyZXR1cm4gQSE9PUduJiZEYShEaSgpLHFyKCksSSxuLEEsSVsxMV0seSwhMSksd1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24gTVcobix0LGUpe2xldCBpPVplKCkscj1ZZyhpLHQpO3JldHVybiByIT09R24mJkRhKERpKCkscXIoKSxpLG4scixpWzExXSxlLCExKSxNV30sIlx1MDI3NVx1MDI3NXBpcGUiOmosIlx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCI6TmUsIlx1MDI3NVx1MDI3NXZpZXdRdWVyeSI6bHQsIlx1MDI3NVx1MDI3NWxvYWRRdWVyeSI6TGUsIlx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSI6TmksIlx1MDI3NVx1MDI3NXJlZmVyZW5jZSI6c3QsIlx1MDI3NVx1MDI3NWNsYXNzTWFwIjplYSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiOlJiLCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtlYyhFYSxaYyxRZyhaZSgpLG4sdCxlLGksciksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe2VjKEVhLFpjLEtnKFplKCksbix0LGUsaSxyLG8scyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtlYyhFYSxaYyxaZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1KXtlYyhFYSxaYyxKZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe2VjKEVhLFpjLCRnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKXtlYyhFYSxaYyxlMChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtlYyhFYSxaYyx0MChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe2VjKEVhLFpjLFlnKFplKCksbiksITApfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXAiOnBsLCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24obix0LGUpe3BsKFhnKFplKCksbix0LGUpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbihuLHQsZSxpLHIpe3BsKFFnKFplKCksbix0LGUsaSxyKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7cGwoS2coWmUoKSxuLHQsZSxpLHIsbyxzKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe3BsKFpnKFplKCksbix0LGUsaSxyLG8scyxhLGwpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe3BsKEpnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cGwoJGcoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3BsKGUwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe3BsKHQwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViI6ZnVuY3Rpb24obil7cGwoWWcoWmUoKSxuKSl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3AiOk90LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIEhXKG4sdCxlLGkscil7cmV0dXJuICRsKG4sWGcoWmUoKSx0LGUsaSksciwhMSksSFd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIFVXKG4sdCxlLGkscixvLHMpe3JldHVybiAkbChuLFFnKFplKCksdCxlLGkscixvKSxzLCExKSxVV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gelcobix0LGUsaSxyLG8scyxhLGwpe3JldHVybiAkbChuLEtnKFplKCksdCxlLGkscixvLHMsYSksbCwhMSkseld9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGpXKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7cmV0dXJuICRsKG4sWmcoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyksdSwhMSksald9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIEdXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3JldHVybiAkbChuLEpnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkKSxwLCExKSxHV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gV1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3JldHVybiAkbChuLCRnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCksZiwhMSksV1d9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHFXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyl7cmV0dXJuICRsKG4sZTAoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSksQywhMSkscVd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIFlXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfLHkpe3JldHVybiAkbChuLHQwKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKSx5LCExKSxZV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gWFcobix0LGUpe3JldHVybiAkbChuLFlnKFplKCksdCksZSwhMSksWFd9LCJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiOmF0LCJcdTAyNzVcdTAyNzVhZHZhbmNlIjp4LCJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSI6RSwiXHUwMjc1XHUwMjc1dGV4dCI6RCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlIjp5dCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSI6cWUsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiOmFwLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUzIjpXRSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCI6ZnVuY3Rpb24ga1cobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1aZyhjLG4sdCxlLGkscixvLHMsYSxsKTtyZXR1cm4gdSE9PUduJiZuZChjLFRzKCksdSksa1d9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBGVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1KZyhkLG4sdCxlLGkscixvLHMsYSxsLGMsdSk7cmV0dXJuIHAhPT1HbiYmbmQoZCxUcygpLHApLEZXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gTlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPSRnKGgsbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCk7cmV0dXJuIGYhPT1HbiYmbmQoaCxUcygpLGYpLE5XfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyI6ZnVuY3Rpb24gTFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz1lMChtLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKTtyZXR1cm4gQyE9PUduJiZuZChtLFRzKCksQyksTFd9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBCVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT10MChfLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyk7cmV0dXJuIHkhPT1HbiYmbmQoXyxUcygpLHkpLEJXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gVlcobil7bGV0IHQ9WmUoKSxlPVlnKHQsbik7cmV0dXJuIGUhPT1HbiYmbmQodCxUcygpLGUpLFZXfSwiXHUwMjc1XHUwMjc1aTE4biI6WUUsIlx1MDI3NVx1MDI3NWkxOG5BdHRyaWJ1dGVzIjpmdW5jdGlvbihuLHQpe2xldCBlPURpKCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1NbygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKHBnZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTtyYihvLGwscixhLHhnZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rMjIsZXAoZS5jb25zdHMsdCkpfSwiXHUwMjc1XHUwMjc1aTE4bkV4cCI6T2IsIlx1MDI3NVx1MDI3NWkxOG5TdGFydCI6ZDcsIlx1MDI3NVx1MDI3NWkxOG5FbmQiOnA3LCJcdTAyNzVcdTAyNzVpMThuQXBwbHkiOlhFLCJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiOlFFLCJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93IjpmdW5jdGlvbihuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSwiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50IjpGRSwiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuYm9keX0sIlx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIjpiYiwiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSI6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGYoKCk9PntsZXQgZT1JZyhuLCEwKTtlLmRlY2xhcmF0aW9ucz10LmRlY2xhcmF0aW9uc3x8V2ksZS5pbXBvcnRzPXQuaW1wb3J0c3x8V2ksZS5leHBvcnRzPXQuZXhwb3J0c3x8V2l9KX0sIlx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIjpaRywiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIjpYRiwiXHUwMjc1XHUwMjc1c2FuaXRpemVTdHlsZSI6ZnVuY3Rpb24obil7bGV0IHQ9RGIoKTtyZXR1cm4gdD90LnNhbml0aXplKEpyLlNUWUxFLG4pfHwiIjpabChuLCJTdHlsZSIpPyRzKG4pOnFuKG4pfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCI6ZDYsIlx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0IjpmdW5jdGlvbihuKXtsZXQgdD1EYigpO2lmKHQpcmV0dXJuIERqKHQuc2FuaXRpemUoSnIuU0NSSVBULG4pfHwiIik7aWYoWmwobiwiU2NyaXB0IikpcmV0dXJuIERqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA1LCExKX0sIlx1MDI3NVx1MDI3NXNhbml0aXplVXJsIjpkbCwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuInNyYyI9PT10JiYoImVtYmVkIj09PW58fCJmcmFtZSI9PT1ufHwiaWZyYW1lIj09PW58fCJtZWRpYSI9PT1ufHwic2NyaXB0Ij09PW4pfHwiaHJlZiI9PT10JiYoImJhc2UiPT09bnx8ImxpbmsiPT09bik/ZDY6ZGx9KHQsZSkobil9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCI6ZnVuY3Rpb24obil7cmV0dXJuIE9nKG5bMF0pfSwiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsIjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGU2KCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn0oblswXSl9LGZvcndhcmRSZWY6cmkscmVzb2x2ZUZvcndhcmRSZWY6cWl9O2Z1bmN0aW9uIFM3KG4pe3JldHVybiEhSWcobil9dmFyICRTPVtdLF9rPSExO2Z1bmN0aW9uIEU3KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZXZlcnkoRTcpOiEhcWkobil9ZnVuY3Rpb24gYjBlKG4sdCl7bGV0IGU9WHUodC5kZWNsYXJhdGlvbnN8fFdpKSxpPUxnKG4pO2UuZm9yRWFjaChyPT57KHI9cWkocikpLmhhc093blByb3BlcnR5KFRFKT9UNyhvbChyKSxpKTohci5oYXNPd25Qcm9wZXJ0eShURikmJiFyLmhhc093blByb3BlcnR5KERGKSYmKHIubmdTZWxlY3RvclNjb3BlPW4pfSl9ZnVuY3Rpb24gVDcobix0KXtuLmRpcmVjdGl2ZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5kaXJlY3RpdmVzKS5tYXAoZT0+ZS5oYXNPd25Qcm9wZXJ0eShURSk/b2woZSk6WGgoZSkpLmZpbHRlcihlPT4hIWUpLG4ucGlwZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5waXBlcykubWFwKGU9Pkt1KGUpKSxuLnNjaGVtYXM9dC5zY2hlbWFzLG4udFZpZXc9bnVsbH1mdW5jdGlvbiBMZyhuKXtpZihTNyhuKSlyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9SWcobiwhMCk7aWYobnVsbCE9PXQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMpcmV0dXJuIHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM7bGV0IGU9e3NjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fX07cmV0dXJuIEtTKHQuaW1wb3J0cykuZm9yRWFjaChpPT57bGV0IHI9TGcoaSk7ci5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChvKSksci5leHBvcnRlZC5waXBlcy5mb3JFYWNoKG89PmUuY29tcGlsYXRpb24ucGlwZXMuYWRkKG8pKX0pLEtTKHQuZGVjbGFyYXRpb25zKS5mb3JFYWNoKGk9PntLdShpKT9lLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpKTplLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGkpfSksS1ModC5leHBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1pO2lmKFM3KHIpKXtsZXQgbz1MZyhyKTtvLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChzPT57ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChzKSxlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHMpfSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChzKSxlLmV4cG9ydGVkLnBpcGVzLmFkZChzKX0pfWVsc2UgS3Uocik/ZS5leHBvcnRlZC5waXBlcy5hZGQocik6ZS5leHBvcnRlZC5kaXJlY3RpdmVzLmFkZChyKX0pLHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9ZSxlfShuKTtpZihmRyhuKSl7aWYobnVsbCE9PShvbChuKXx8WGgobikpKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0KFtuXSkscGlwZXM6bmV3IFNldH19O2lmKG51bGwhPT1LdShuKSlyZXR1cm57c2NoZW1hczpudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0KFtuXSl9fX10aHJvdyBuZXcgRXJyb3IoYCR7bi5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoXHUwMjc1bW9kIHByb3BlcnR5KWApfWZ1bmN0aW9uICRqKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ01vZHVsZX0obik/bi5uZ01vZHVsZTpufXZhciB2az0wO2Z1bmN0aW9uIEQ3KG4sdCl7bGV0IGU9bnVsbDtJNyhuLHR8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixURix7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCBpPUE3KG4sdHx8e30pO2U9c2woKS5jb21waWxlRGlyZWN0aXZlKCRkLGkuc291cmNlTWFwVXJsLGkubWV0YWRhdGEpfXJldHVybiBlfSxjb25maWd1cmFibGU6ITF9KX1mdW5jdGlvbiBBNyhuLHQpe2xldCBlPW4mJm4ubmFtZSxpPWBuZzovLy8ke2V9L1x1MDI3NWRpci5qc2Ascj1zbCgpLG89UDcobix0KTtyZXR1cm4gby50eXBlU291cmNlU3Bhbj1yLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixlLGkpLG8udXNlc0luaGVyaXRhbmNlJiZSNyhuKSx7bWV0YWRhdGE6byxzb3VyY2VNYXBVcmw6aX19ZnVuY3Rpb24gSTcobix0KXtsZXQgZT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFF1LHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9QTcobix0KSxyPXNsKCk7ZT1yLmNvbXBpbGVGYWN0b3J5KCRkLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTppLm1ldGFkYXRhLm5hbWUsdHlwZTppLm1ldGFkYXRhLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOlJFKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIFMwZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gUDcobix0KXtsZXQgZT1HRigpLGk9ZS5vd25Qcm9wTWV0YWRhdGEobik7cmV0dXJue25hbWU6bi5uYW1lLHR5cGU6bixzZWxlY3Rvcjp2b2lkIDAhPT10LnNlbGVjdG9yP3Quc2VsZWN0b3I6bnVsbCxob3N0OnQuaG9zdHx8QWcscHJvcE1ldGFkYXRhOmksaW5wdXRzOnQuaW5wdXRzfHxXaSxvdXRwdXRzOnQub3V0cHV0c3x8V2kscXVlcmllczplRyhuLGksTzcpLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczplLmhhc0xpZmVjeWNsZUhvb2sobiwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IVMwZShuKSxleHBvcnRBczpEMGUodC5leHBvcnRBcykscHJvdmlkZXJzOnQucHJvdmlkZXJzfHxudWxsLHZpZXdRdWVyaWVzOmVHKG4saSxrNyksaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX1mdW5jdGlvbiBSNyhuKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2UmJmUhPT10OykhWGgoZSkmJiFvbChlKSYmSTBlKGUpJiZENyhlLG51bGwpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfWZ1bmN0aW9uIEUwZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/Tjcobik6cWkobil9ZnVuY3Rpb24gVDBlKG4sdCl7cmV0dXJue3Byb3BlcnR5TmFtZTpuLHByZWRpY2F0ZTpFMGUodC5zZWxlY3RvciksZGVzY2VuZGFudHM6dC5kZXNjZW5kYW50cyxmaXJzdDp0LmZpcnN0LHJlYWQ6dC5yZWFkP3QucmVhZDpudWxsLHN0YXRpYzohIXQuc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEhdC5lbWl0RGlzdGluY3RDaGFuZ2VzT25seX19ZnVuY3Rpb24gZUcobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07by5mb3JFYWNoKHM9PntpZihlKHMpKXtpZighcy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7cn0iIG9mICIke01GKG4pfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKG8uc29tZShGNykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtpLnB1c2goVDBlKHIscykpfX0pfXJldHVybiBpfWZ1bmN0aW9uIEQwZShuKXtyZXR1cm4gdm9pZCAwPT09bj9udWxsOk43KG4pfWZ1bmN0aW9uIE83KG4pe2xldCB0PW4ubmdNZXRhZGF0YU5hbWU7cmV0dXJuIkNvbnRlbnRDaGlsZCI9PT10fHwiQ29udGVudENoaWxkcmVuIj09PXR9ZnVuY3Rpb24gazcobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iVmlld0NoaWxkIj09PXR8fCJWaWV3Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiBGNyhuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBONyhuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSl9dmFyIEEwZT1bIm5nT25DaGFuZ2VzIiwibmdPbkluaXQiLCJuZ09uRGVzdHJveSIsIm5nRG9DaGVjayIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCJdO2Z1bmN0aW9uIEkwZShuKXtsZXQgdD1HRigpO2lmKEEwZS5zb21lKGk9PnQuaGFzTGlmZWN5Y2xlSG9vayhuLGkpKSlyZXR1cm4hMDtsZXQgZT10LnByb3BNZXRhZGF0YShuKTtmb3IobGV0IGkgaW4gZSl7bGV0IHI9ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXSxhPXMubmdNZXRhZGF0YU5hbWU7aWYoRjcocyl8fE83KHMpfHxrNyhzKXx8Ik91dHB1dCI9PT1hfHwiSG9zdEJpbmRpbmciPT09YXx8Ikhvc3RMaXN0ZW5lciI9PT1hKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB0RyhuLHQpe3JldHVybnt0eXBlOm4sbmFtZTpuLm5hbWUscGlwZU5hbWU6dC5uYW1lLHB1cmU6dm9pZCAwPT09dC5wdXJlfHx0LnB1cmUsaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX12YXIgUjBlPXdiKCJEaXJlY3RpdmUiLChuPXt9KT0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5ENyhuLHQpKTtmdW5jdGlvbiB3RSguLi5uKXt9d2IoIkNvbXBvbmVudCIsKG49e30pPT4oe2NoYW5nZURldGVjdGlvbjpLeS5EZWZhdWx0LC4uLm59KSxSMGUsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGw7KGZ1bmN0aW9uKG4sdCl7S0codCkmJihwYi5zZXQobix0KSxRRy5hZGQobikpfSkobix0KSxJNyhuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFRFLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9c2woKTtpZihLRyh0KSl7bGV0IGM9W2BDb21wb25lbnQgJyR7bi5uYW1lfScgaXMgbm90IHJlc29sdmVkOmBdO3Rocm93IHQudGVtcGxhdGVVcmwmJmMucHVzaChgIC0gdGVtcGxhdGVVcmw6ICR7dC50ZW1wbGF0ZVVybH1gKSx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoJiZjLnB1c2goYCAtIHN0eWxlVXJsczogJHtKU09OLnN0cmluZ2lmeSh0LnN0eWxlVXJscyl9YCksYy5wdXNoKCJEaWQgeW91IHJ1biBhbmQgd2FpdCBmb3IgJ3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMoKSc/IiksbmV3IEVycm9yKGMuam9pbigiXG4iKSl9bGV0IHI9bnVsbCxvPXQucHJlc2VydmVXaGl0ZXNwYWNlczt2b2lkIDA9PT1vJiYobz1udWxsIT09ciYmdm9pZCAwIT09ci5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZyLnByZXNlcnZlV2hpdGVzcGFjZXMpO2xldCBzPXQuZW5jYXBzdWxhdGlvbjt2b2lkIDA9PT1zJiYocz1udWxsIT09ciYmdm9pZCAwIT09ci5kZWZhdWx0RW5jYXBzdWxhdGlvbj9yLmRlZmF1bHRFbmNhcHN1bGF0aW9uOndhLkVtdWxhdGVkKTtsZXQgYT10LnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHtuLm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9ey4uLlA3KG4sdCksdHlwZVNvdXJjZVNwYW46aS5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsbi5uYW1lLGEpLHRlbXBsYXRlOnQudGVtcGxhdGV8fCIiLHByZXNlcnZlV2hpdGVzcGFjZXM6byxzdHlsZXM6dC5zdHlsZXN8fFdpLGFuaW1hdGlvbnM6dC5hbmltYXRpb25zLGRlY2xhcmF0aW9uczpbXSxjaGFuZ2VEZXRlY3Rpb246dC5jaGFuZ2VEZXRlY3Rpb24sZW5jYXBzdWxhdGlvbjpzLGludGVycG9sYXRpb246dC5pbnRlcnBvbGF0aW9uLHZpZXdQcm92aWRlcnM6dC52aWV3UHJvdmlkZXJzfHxudWxsLGlzU3RhbmRhbG9uZTohIXQuc3RhbmRhbG9uZX07dmsrKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJlI3KG4pLGU9aS5jb21waWxlQ29tcG9uZW50KCRkLGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz1YdSh0LmltcG9ydHN8fFdpKSx7ZGlyZWN0aXZlRGVmczp1LHBpcGVEZWZzOmR9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bb2wobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IGQ9b2wodSl8fFhoKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGUucHVzaChkKSl9fWVsc2V7bGV0IGM9b2wobCl8fFhoKGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCBkPUt1KHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGkucHVzaChkKSl9fWVsc2V7bGV0IGM9S3UobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9dSxlLnBpcGVEZWZzPWQsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKHFpKX19ZmluYWxseXt2ay0tfWlmKDA9PT12ayYmZnVuY3Rpb24oKXtpZighX2spe19rPSEwO3RyeXtmb3IobGV0IG49JFMubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09JFNbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KEU3KSYmKCRTLnNwbGljZShuLDEpLGIwZSh0LGUpKX19ZmluYWxseXtfaz0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPUxnKG4ubmdTZWxlY3RvclNjb3BlKTtUNyhlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7TUYobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHdiKCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj10RyhuLHQpLG89c2woKTtpPW8uY29tcGlsZUZhY3RvcnkoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLERGLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9dEcobix0KTtlPXNsKCkuY29tcGlsZVBpcGUoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHNwKCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxzcCgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksd2IoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT1YdSh0LmRlY2xhcmF0aW9uc3x8V2kpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixwRyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1zbCgpLmNvbXBpbGVOZ01vZHVsZSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6WHUodC5ib290c3RyYXB8fFdpKS5tYXAocWkpLGRlY2xhcmF0aW9uczppLm1hcChxaSksaW1wb3J0czpYdSh0LmltcG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksZXhwb3J0czpYdSh0LmV4cG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksc2NoZW1hczp0LnNjaGVtYXM/WHUodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1zbCgpO289YS5jb21waWxlRmFjdG9yeSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOlJFKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHhrLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFdpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFdpKS5tYXAocWkpLCh0LmV4cG9ydHN8fFdpKS5tYXAocWkpXX07cz1zbCgpLmNvbXBpbGVJbmplY3RvcigkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZaRyhuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7JFMucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyIHZOPW5ldyBzZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxaRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9d0UsdGhpcy5yZWplY3Q9d0UsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYobjAobykpZS5wdXNoKG8pO2Vsc2UgaWYoZk4obykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2Tiw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscmY9bmV3IHNlKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHt5aygpfSR7eWsoKX0ke3lrKCl9YH19KTtmdW5jdGlvbiB5aygpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciB5Tj1uZXcgc2UoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksaWQ9bmV3IHNlKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxrMGU9bmV3IHNlKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLExpPShuZXcgc2UoIkFwcGxpY2F0aW9uIFBhY2thZ2VzIFJvb3QgVVJMIiksbmV3IHNlKCJBbmltYXRpb25Nb2R1bGVUeXBlIikpLHJkPW5ldyBzZSgiTG9jYWxlSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TbyhyZCxpaS5PcHRpb25hbHxpaS5Ta2lwU2VsZil8fHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxiRX0pLEIwZT0obmV3IHNlKCJEZWZhdWx0Q3VycmVuY3lDb2RlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlVTRCJ9KSxuZXcgc2UoIlRyYW5zbGF0aW9ucyIpLG5ldyBzZSgiVHJhbnNsYXRpb25zRm9ybWF0IiksbmV3IHNlKCJjb21waWxlck9wdGlvbnMiKSxQcm9taXNlLnJlc29sdmUoMCkpO2Z1bmN0aW9uIG1GKG4pe3R5cGVvZiBab25lPiJ1Ij9CMGUudGhlbigoKT0+e24mJm4uYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLG4pfXZhciBwdD1jbGFzc3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246aT0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBHKCExKSx0aGlzLm9uU3RhYmxlPW5ldyBHKCExKSx0aGlzLm9uRXJyb3I9bmV3IEcoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgTXQoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7bGV0IHI9dGhpcztpZihyLl9uZXN0aW5nPTAsci5fb3V0ZXI9ci5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuQXN5bmNTdGFja1RhZ2dpbmdab25lU3BlYyl7bGV0IG89Wm9uZS5Bc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjO3IuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IG8oIkFuZ3VsYXIiKSl9Wm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSx0JiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHIuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haSYmZSxyLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWksci5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsci5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtsZXQgbj1Xci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD1Xci5jYW5jZWxBbmltYXRpb25GcmFtZTtpZih0eXBlb2YgWm9uZTwidSImJm4mJnQpe2xldCBlPW5bWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2UmJihuPWUpO2xldCBpPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2kmJih0PWkpfXJldHVybntuYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bixuYXRpdmVDYW5jZWxBbmltYXRpb25GcmFtZTp0fX0oKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZnVuY3Rpb24obil7bGV0IHQ9KCk9PnshZnVuY3Rpb24obil7bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KG4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPW4ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwoV3IsKCk9PntuLmZha2VUb3BFdmVudFRhc2t8fChuLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e24ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGdGKG4pLG4uaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsYk4obiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxuLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxnRihuKSl9KG4pfTtuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGUsaSxyLG8scyxhKT0+e3RyeXtyZXR1cm4gbkcobiksZS5pbnZva2VUYXNrKHIsbyxzLGEpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1vLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCksaUcobil9fSxvbkludm9rZTooZSxpLHIsbyxzLGEsbCk9Pnt0cnl7cmV0dXJuIG5HKG4pLGUuaW52b2tlKHIsbyxzLGEsbCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZ0KCksaUcobil9fSxvbkhhc1Rhc2s6KGUsaSxyLG8pPT57ZS5oYXNUYXNrKHIsbyksaT09PXImJigibWljcm9UYXNrIj09by5jaGFuZ2U/KG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPW8ubWljcm9UYXNrLGdGKG4pLGJOKG4pKToibWFjcm9UYXNrIj09by5jaGFuZ2UmJihuLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPW8ubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGUsaSxyLG8pPT4oZS5oYW5kbGVFcnJvcihyLG8pLG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ub25FcnJvci5lbWl0KG8pKSwhMSl9KX0ocil9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBNdCg5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYocHQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IE10KDkwOSwhMSl9cnVuKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxpKX1ydW5UYXNrKHQsZSxpLHIpe2xldCBvPXRoaXMuX2lubmVyLHM9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LEgwZSx3RSx3RSk7dHJ5e3JldHVybiBvLnJ1blRhc2socyxlLGkpfWZpbmFsbHl7by5jYW5jZWxUYXNrKHMpfX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19LEgwZT17fTtmdW5jdGlvbiBiTihuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBnRihuKXtuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gbkcobil7bi5fbmVzdGluZysrLG4uaXNTdGFibGUmJihuLmlzU3RhYmxlPSExLG4ub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBpRyhuKXtuLl9uZXN0aW5nLS0sYk4obil9dmFyIENOLHhOPW5ldyBzZSgiIiksTGI9bmV3IHNlKCIiKSxKRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLENOfHwoZnVuY3Rpb24obil7Q049bn0ociksci5hZGRUb1dpbmRvdyhpKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntwdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksbUYoKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSltRigoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSk7ZWxzZXtsZXQgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGk9PiFpLnVwZGF0ZUNifHwhaS51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dChpLnRpbWVvdXRJZCksITEpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChlPT4oe3NvdXJjZTplLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmUuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmUuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhlLGkscil7bGV0IG89LTE7aSYmaT4wJiYobz1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIocz0+cy50aW1lb3V0SWQhPT1vKSxlKHRoaXMuX2RpZFdvcmssdGhpcy5nZXRQZW5kaW5nVGFza3MoKSl9LGkpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmUsdGltZW91dElkOm8sdXBkYXRlQ2I6cn0pfXdoZW5TdGFibGUoZSxpLHIpe2lmKHImJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soZSxpLHIpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihlLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKX1maW5kUHJvdmlkZXJzKGUsaSxyKXtyZXR1cm5bXX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihwdCksUigkRSksUihMYikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLCRFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGUsaSl7dGhpcy5fYXBwbGljYXRpb25zLnNldChlLGkpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGUpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShlKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxpPSEwKXtyZXR1cm4gQ04/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGUsaSk/P251bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKSxvYj1udWxsLEw3PW5ldyBzZSgiQWxsb3dNdWx0aXBsZVRva2VuIiksQjc9bmV3IHNlKCJQbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMiKTtmdW5jdGlvbiB3TihuLHQsZT1bXSl7bGV0IGk9YFBsYXRmb3JtOiAke3R9YCxyPW5ldyBzZShpKTtyZXR1cm4obz1bXSk9PntsZXQgcz1WNygpO2lmKCFzfHxzLmluamVjdG9yLmdldChMNywhMSkpe2xldCBhPVsuLi5lLC4uLm8se3Byb3ZpZGU6cix1c2VWYWx1ZTohMH1dO24/bihhKTpmdW5jdGlvbihuKXtpZihvYiYmIW9iLmdldChMNywhMSkpdGhyb3cgbmV3IE10KDQwMCwhMSk7b2I9bjtsZXQgdD1uLmdldChINyk7KGZ1bmN0aW9uKG4pe2xldCB0PW4uZ2V0KHlOLG51bGwpO3QmJnQuZm9yRWFjaChlPT5lKCkpfSkobil9KGZ1bmN0aW9uKG49W10sdCl7cmV0dXJuIHpuLmNyZWF0ZSh7bmFtZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6a0UsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6QjcsdXNlVmFsdWU6bmV3IFNldChbKCk9Pm9iPW51bGxdKX0sLi4ubl19KX0oYSxpKSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PVY3KCk7aWYoIXQpdGhyb3cgbmV3IE10KDQwMSwhMSk7cmV0dXJuIHR9KCl9fWZ1bmN0aW9uIFY3KCl7cmV0dXJuIG9iPy5nZXQoSDcpPz9udWxsfXZhciBINz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2luamVjdG9yPWUsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZTtyZXR1cm4gZT0ibm9vcCI9PT1uP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEcsdGhpcy5vblN0YWJsZT1uZXcgRyx0aGlzLm9uRXJyb3I9bmV3IEd9cnVuKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0LmFwcGx5KGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHQoKX1ydW5UYXNrKHQsZSxpLHIpe3JldHVybiB0LmFwcGx5KGUsaSl9fTooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBwdCh0KSxlfShpPy5uZ1pvbmUsZnVuY3Rpb24obil7cmV0dXJue2VuYWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lRXZlbnRDb2FsZXNjaW5nKXx8ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lUnVuQ29hbGVzY2luZyl8fCExfX0oaSkpLG89W3twcm92aWRlOnB0LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oKCk9PntsZXQgcz16bi5jcmVhdGUoe3Byb3ZpZGVyczpvLHBhcmVudDp0aGlzLmluamVjdG9yLG5hbWU6ZS5tb2R1bGVUeXBlLm5hbWV9KSxhPWUuY3JlYXRlKHMpLGw9YS5pbmplY3Rvci5nZXQoU3MsbnVsbCk7aWYoIWwpdGhyb3cgbmV3IE10KDQwMiwhMSk7cmV0dXJuIHIucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgYz1yLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OnU9PntsLmhhbmRsZUVycm9yKHUpfX0pO2Eub25EZXN0cm95KCgpPT57ZUUodGhpcy5fbW9kdWxlcyxhKSxjLnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uKG4sdCxlKXt0cnl7bGV0IGk9ZSgpO3JldHVybiBuMChpKT9pLmNhdGNoKHI9Pnt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKHIpKSxyfSk6aX1jYXRjaChpKXt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKGkpKSxpfX0obCxyLCgpPT57bGV0IGM9YS5pbmplY3Rvci5nZXQoWkUpO3JldHVybiBjLnJ1bkluaXRpYWxpemVycygpLGMuZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uKG4peyhmdW5jdGlvbihuLHQpe251bGw9PW4mJmNHKCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIixuLG51bGwsIiE9Iil9KShuKSwic3RyaW5nIj09dHlwZW9mIG4mJihKVz1uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfShhLmluamVjdG9yLmdldChyZCxiRSl8fGJFKSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChhKSxhKSl9KX0pfWJvb3RzdHJhcE1vZHVsZShlLGk9W10pe2xldCByPVU3KHt9LGkpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IGRGKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9KDAsMCxlKS50aGVuKG89PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShvLHIpKX1fbW9kdWxlRG9Cb290c3RyYXAoZSl7bGV0IGk9ZS5pbmplY3Rvci5nZXQoSmMpO2lmKGUuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApZS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKHI9PmkuYm9vdHN0cmFwKHIpKTtlbHNle2lmKCFlLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IE10KDQwMywhMSk7ZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGkpfXRoaXMuX21vZHVsZXMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBNdCg0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goaT0+aSgpKTtsZXQgZT10aGlzLl9pbmplY3Rvci5nZXQoQjcsbnVsbCk7ZSYmKGUuZm9yRWFjaChpPT5pKCkpLGUuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHpuKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIFU3KG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2UoVTcsbik6ey4uLm4sLi4udH19dmFyIEpjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgUXQoYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgUXQoYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57cHQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLG1GKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntwdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9dW4obyxzLnBpcGUoWHMoKSkpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoZSxpKXtsZXQgcyxyPWUgaW5zdGFuY2VvZiBnRTtpZighdGhpcy5faW5qZWN0b3IuZ2V0KFpFKS5kb25lKXRocm93IXImJmZHKGUpLG5ldyBNdCg0MDUsZmFsc2UpO3M9cj9lOnRoaXMuX2luamVjdG9yLmdldChFbykucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHMuY29tcG9uZW50VHlwZSk7bGV0IGE9ZnVuY3Rpb24obil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfShzKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KGlwKSxjPXMuY3JlYXRlKHpuLk5VTEwsW10saXx8cy5zZWxlY3RvcixhKSx1PWMubG9jYXRpb24ubmF0aXZlRWxlbWVudCxkPWMuaW5qZWN0b3IuZ2V0KHhOLG51bGwpO3JldHVybiBkPy5yZWdpc3RlckFwcGxpY2F0aW9uKHUpLGMub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KGMuaG9zdFZpZXcpLGVFKHRoaXMuY29tcG9uZW50cyxjKSxkPy51bnJlZ2lzdGVyQXBwbGljYXRpb24odSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KGMpLGN9dGljaygpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBNdCgxMDEsITEpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IGUgb2YgdGhpcy5fdmlld3MpZS5kZXRlY3RDaGFuZ2VzKCl9Y2F0Y2goZSl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcihlKSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMX19YXR0YWNoVmlldyhlKXtsZXQgaT1lO3RoaXMuX3ZpZXdzLnB1c2goaSksaS5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGUpe2xldCBpPWU7ZUUodGhpcy5fdmlld3MsaSksaS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoZSl7dGhpcy5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGUpLHRoaXMuX2luamVjdG9yLmdldChrMGUsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2gocj0+cihlKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZT0+ZSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGUpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSksKCk9PmVFKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsZSl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgTXQoNDA2LCExKTtsZXQgZT10aGlzLl9pbmplY3RvcjtlLmRlc3Ryb3kmJiFlLmRlc3Ryb3llZCYmZS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKG5wKSxSKFNzKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gZUUobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX12YXIgejc9ITAsajc9ITE7ZnVuY3Rpb24gQmIoKXtyZXR1cm4gajc9ITAsejd9dmFyIG5uPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPWVfZSxufSkoKTtmdW5jdGlvbiBlX2Uobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihSRihuKSYmIWUpe2xldCBpPW9wKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyAkaChpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3ICRoKHRbMTZdLHQpOm51bGx9KE1vKCksWmUoKSwxNj09KDE2Jm4pKX12YXIgTUU9Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHpFKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IHZGKHQpfX0sbl9lPShuLHQpPT50LHZGPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxuX2V9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PG9HKGkscixvKT9lOmksYT1vRyhzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcix1PWwtcjtpZihjIT11KXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgaD1wPG8ubGVuZ3RoP29bcF06b1twXT0wLGY9aCtwO3U8PWYmJmY8YyYmKG9bcF09aCsxKX1vW3MucHJldmlvdXNJbmRleF09dS1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIXpFKHQpKXRocm93IG5ldyBNdCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW1VFKCldKCk7Zm9yKDshKGk9ZS5uZXh0KCkpLmRvbmU7KXQoaS52YWx1ZSl9fSh0LGE9PntzPXRoaXMuX3RyYWNrQnlGbihyLGEpLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQscyk/KGkmJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUsYSxzLHIpKSxPYmplY3QuaXMoZS5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLGEpKTooZT10aGlzLl9taXNtYXRjaChlLGEscyxyKSxpPSEwKSxlPWUuX25leHQscisrfSksdGhpcy5sZW5ndGg9cjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLGkscil7bGV0IG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaSxudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGkscikpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IHlGKGUsaSksbyxyKSx0fV92ZXJpZnlSZWluc2VydGlvbih0LGUsaSxyKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpO3JldHVybiBudWxsIT09bz90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9X3RydW5jYXRlKHQpe2Zvcig7bnVsbCE9PXQ7KXtsZXQgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLGkpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7bGV0IHI9dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fbW92ZUFmdGVyKHQsZSxpKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fYWRkQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsaSksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH1faW5zZXJ0QWZ0ZXIodCxlLGkpe2xldCByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9aSx0fV9yZW1vdmUodCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX1fdW5saW5rKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgZT10Ll9wcmV2LGk9dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPWk6ZS5fbmV4dD1pLG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19LHlGPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fSxTRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2xldCBlPXQudHJhY2tCeUlkLGk9dGhpcy5tYXAuZ2V0KGUpO2l8fChpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX1nZXQodCxlKXtsZXQgaTtmb3IoaT10aGlzLl9oZWFkO251bGwhPT1pO2k9aS5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PWkuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGkudHJhY2tCeUlkLHQpKXJldHVybiBpO3JldHVybiBudWxsfXJlbW92ZSh0KXtsZXQgZT10Ll9wcmV2RHVwLGk9dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1pOmUuX25leHREdXA9aSxudWxsPT09aT90aGlzLl90YWlsPWU6aS5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX0sdGhpcy5tYXAuc2V0KGUsaSkpLGkuYWRkKHQpfWdldCh0LGUpe2xldCByPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2xldCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fTtmdW5jdGlvbiBvRyhuLHQsZSl7bGV0IGk9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1pKXJldHVybiBpO2xldCByPTA7cmV0dXJuIGUmJmk8ZS5sZW5ndGgmJihyPWVbaV0pLGkrdCtyfXZhciBFRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8cE4odCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyB4Rn19LHhGPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fHBOKHQpKSl0aHJvdyBuZXcgTXQoOTAwLCExKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGU9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCwoaSxyKT0+e2lmKGUmJmUua2V5PT09cil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLGkpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7bGV0IG89dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocixpKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsbyl9fSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCBpPWU7bnVsbCE9PWk7aT1pLl9uZXh0UmVtb3ZlZClpPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoaS5rZXkpLGkuX25leHRSZW1vdmVkPWkuX25leHQsaS5wcmV2aW91c1ZhbHVlPWkuY3VycmVudFZhbHVlLGkuY3VycmVudFZhbHVlPW51bGwsaS5fcHJldj1udWxsLGkuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7bGV0IGk9dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9aSx0Ll9wcmV2PWUsaSYmKGkuX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkodCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7bGV0IHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMocixlKTtsZXQgbz1yLl9wcmV2LHM9ci5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9cykscyYmKHMuX3ByZXY9byksci5fbmV4dD1udWxsLHIuX3ByZXY9bnVsbCxyfWxldCBpPW5ldyBDRih0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxpKSxpLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKGkpLGl9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PmUodFtpXSxpKSl9fSxDRj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fTtmdW5jdGlvbiBzRygpe3JldHVybiBuZXcgdGMoW25ldyBNRV0pfXZhciB0Yz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKG51bGwhPWkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxzRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihudWxsIT1pKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6c0d9KSxufSkoKTtmdW5jdGlvbiBhRygpe3JldHVybiBuZXcgVmIoW25ldyBFRV0pfXZhciBWYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKGkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxhRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihpKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6YUd9KSxufSkoKSxpX2U9W25ldyBFRV0scl9lPVtuZXcgTUVdLFc3PShuZXcgdGMocl9lKSxuZXcgVmIoaV9lKSx3TihudWxsLCJjb3JlIixbXSkpLHE3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEpjKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGUxKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn12YXIgZmw9KCgpPT57cmV0dXJuKG49Zmx8fChmbD17fSkpW24uUkFXX1RFWFQ9MF09IlJBV19URVhUIixuW24uRVNDQVBBQkxFX1JBV19URVhUPTFdPSJFU0NBUEFCTEVfUkFXX1RFWFQiLG5bbi5QQVJTQUJMRV9EQVRBPTJdPSJQQVJTQUJMRV9EQVRBIixmbDt2YXIgbn0pKCk7ZnVuY3Rpb24gY2Qobil7aWYoIjoiIT1uWzBdKXJldHVybltudWxsLG5dO2xldCB0PW4uaW5kZXhPZigiOiIsMSk7aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0ICIke259IiBleHBlY3RpbmcgIjpuYW1lc3BhY2U6bmFtZSJgKTtyZXR1cm5bbi5zbGljZSgxLHQpLG4uc2xpY2UodCsxKV19ZnVuY3Rpb24gVU4obil7cmV0dXJuIm5nLWNvbnRhaW5lciI9PT1jZChuKVsxXX1mdW5jdGlvbiB6TihuKXtyZXR1cm4ibmctY29udGVudCI9PT1jZChuKVsxXX1mdW5jdGlvbiBZNyhuKXtyZXR1cm4gbnVsbD09PW4/bnVsbDpjZChuKVswXX1mdW5jdGlvbiBqTihuLHQpe3JldHVybiBuP2A6JHtufToke3R9YDp0fXZhciBYNyx0MSxRbj1jbGFzc3tjb25zdHJ1Y3Rvcih7Y2xvc2VkQnlDaGlsZHJlbjp0LGltcGxpY2l0TmFtZXNwYWNlUHJlZml4OmUsY29udGVudFR5cGU6aT1mbC5QQVJTQUJMRV9EQVRBLGNsb3NlZEJ5UGFyZW50OnI9ITEsaXNWb2lkOm89ITEsaWdub3JlRmlyc3RMZjpzPSExLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTphPSExfT17fSl7dGhpcy5jbG9zZWRCeUNoaWxkcmVuPXt9LHRoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITEsdCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGw9PnRoaXMuY2xvc2VkQnlDaGlsZHJlbltsXT0hMCksdGhpcy5pc1ZvaWQ9byx0aGlzLmNsb3NlZEJ5UGFyZW50PXJ8fG8sdGhpcy5pbXBsaWNpdE5hbWVzcGFjZVByZWZpeD1lfHxudWxsLHRoaXMuY29udGVudFR5cGU9aSx0aGlzLmlnbm9yZUZpcnN0TGY9cyx0aGlzLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZT1hfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4gdGhpcy5pc1ZvaWR8fHQudG9Mb3dlckNhc2UoKWluIHRoaXMuY2xvc2VkQnlDaGlsZHJlbn1nZXRDb250ZW50VHlwZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRoaXMuY29udGVudFR5cGU/KHZvaWQgMD09PXQ/dm9pZCAwOnRoaXMuY29udGVudFR5cGVbdF0pPz90aGlzLmNvbnRlbnRUeXBlLmRlZmF1bHQ6dGhpcy5jb250ZW50VHlwZX19O2Z1bmN0aW9uIGUzKG4pe3JldHVybiB0MXx8KFg3PW5ldyBRbix0MT17YmFzZTpuZXcgUW4oe2lzVm9pZDohMH0pLG1ldGE6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxhcmVhOm5ldyBRbih7aXNWb2lkOiEwfSksZW1iZWQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxsaW5rOm5ldyBRbih7aXNWb2lkOiEwfSksaW1nOm5ldyBRbih7aXNWb2lkOiEwfSksaW5wdXQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxwYXJhbTpuZXcgUW4oe2lzVm9pZDohMH0pLGhyOm5ldyBRbih7aXNWb2lkOiEwfSksYnI6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxzb3VyY2U6bmV3IFFuKHtpc1ZvaWQ6ITB9KSx0cmFjazpuZXcgUW4oe2lzVm9pZDohMH0pLHdicjpuZXcgUW4oe2lzVm9pZDohMH0pLHA6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJsb2NrcXVvdGUiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImhyIiwibWFpbiIsIm5hdiIsIm9sIiwicCIsInByZSIsInNlY3Rpb24iLCJ0YWJsZSIsInVsIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0aGVhZDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il19KSx0Ym9keTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0Zm9vdDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksdHI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsidHIiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRkOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRoOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLGNvbDpuZXcgUW4oe2lzVm9pZDohMH0pLHN2ZzpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmcifSksZm9yZWlnbk9iamVjdDpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmciLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTohMH0pLG1hdGg6bmV3IFFuKHtpbXBsaWNpdE5hbWVzcGFjZVByZWZpeDoibWF0aCJ9KSxsaTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJsaSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksZHQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdfSksZGQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdLGNsb3NlZEJ5UGFyZW50OiEwfSkscmI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsicmIiLCJydCIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxydDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHJ0YzpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxycDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLG9wdGdyb3VwOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbIm9wdGdyb3VwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxvcHRpb246bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsib3B0aW9uIiwib3B0Z3JvdXAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHByZTpuZXcgUW4oe2lnbm9yZUZpcnN0TGY6ITB9KSxsaXN0aW5nOm5ldyBRbih7aWdub3JlRmlyc3RMZjohMH0pLHN0eWxlOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuUkFXX1RFWFR9KSxzY3JpcHQ6bmV3IFFuKHtjb250ZW50VHlwZTpmbC5SQVdfVEVYVH0pLHRpdGxlOm5ldyBRbih7Y29udGVudFR5cGU6e2RlZmF1bHQ6ZmwuRVNDQVBBQkxFX1JBV19URVhULHN2ZzpmbC5QQVJTQUJMRV9EQVRBfX0pLHRleHRhcmVhOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuRVNDQVBBQkxFX1JBV19URVhULGlnbm9yZUZpcnN0TGY6ITB9KX0pLHQxW25dPz90MVtuLnRvTG93ZXJDYXNlKCldPz9YN312YXIgUTc9bmV3IFJlZ0V4cCgiKFxcOm5vdFxcKCl8KChbXFwuXFwjXT8pWy1cXHddKyl8KD86XFxbKFstLlxcdypcXFxcJF0rKSg/Oj0oW1wiJ10/KShbXlxcXVwiJ10qKVxcNSk/XFxdKXwoXFwpKXwoXFxzKixcXHMqKSIsImciKSx1ZD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudD1udWxsLHRoaXMuY2xhc3NOYW1lcz1bXSx0aGlzLmF0dHJzPVtdLHRoaXMubm90U2VsZWN0b3JzPVtdfXN0YXRpYyBwYXJzZSh0KXtsZXQgbyxlPVtdLGk9KGwsYyk9PntjLm5vdFNlbGVjdG9ycy5sZW5ndGg+MCYmIWMuZWxlbWVudCYmMD09Yy5jbGFzc05hbWVzLmxlbmd0aCYmMD09Yy5hdHRycy5sZW5ndGgmJihjLmVsZW1lbnQ9IioiKSxsLnB1c2goYyl9LHI9bmV3IHVkLHM9cixhPSExO2ZvcihRNy5sYXN0SW5kZXg9MDtvPVE3LmV4ZWModCk7KXtpZihvWzFdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTmVzdGluZyA6bm90IGluIGEgc2VsZWN0b3IgaXMgbm90IGFsbG93ZWQiKTthPSEwLHM9bmV3IHVkLHIubm90U2VsZWN0b3JzLnB1c2gocyl9bGV0IGw9b1syXTtpZihsKXtsZXQgdT1vWzNdOyIjIj09PXU/cy5hZGRBdHRyaWJ1dGUoImlkIixsLnNsaWNlKDEpKToiLiI9PT11P3MuYWRkQ2xhc3NOYW1lKGwuc2xpY2UoMSkpOnMuc2V0RWxlbWVudChsKX1sZXQgYz1vWzRdO2lmKGMmJnMuYWRkQXR0cmlidXRlKHMudW5lc2NhcGVBdHRyaWJ1dGUoYyksb1s2XSksb1s3XSYmKGE9ITEscz1yKSxvWzhdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgc2VsZWN0b3JzIGluIDpub3QgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpKGUscikscj1zPW5ldyB1ZH19cmV0dXJuIGkoZSxyKSxlfXVuZXNjYXBlQXR0cmlidXRlKHQpe2xldCBlPSIiLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBvPXQuY2hhckF0KHIpO2lmKCJcXCIhPT1vKXtpZigiJCI9PT1vJiYhaSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIGF0dHJpYnV0ZSBzZWxlY3RvciAiJHt0fSIuIFVuZXNjYXBlZCAiJCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGVzY2FwZSB3aXRoICJcXCQiLmApO2k9ITEsZSs9b31lbHNlIGk9ITB9cmV0dXJuIGV9ZXNjYXBlQXR0cmlidXRlKHQpe3JldHVybiB0LnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC9cJC9nLCJcXCQiKX1pc0VsZW1lbnRTZWxlY3Rvcigpe3JldHVybiB0aGlzLmhhc0VsZW1lbnRTZWxlY3RvcigpJiYwPT10aGlzLmNsYXNzTmFtZXMubGVuZ3RoJiYwPT10aGlzLmF0dHJzLmxlbmd0aCYmMD09PXRoaXMubm90U2VsZWN0b3JzLmxlbmd0aH1oYXNFbGVtZW50U2VsZWN0b3IoKXtyZXR1cm4hIXRoaXMuZWxlbWVudH1zZXRFbGVtZW50KHQ9bnVsbCl7dGhpcy5lbGVtZW50PXR9Z2V0TWF0Y2hpbmdFbGVtZW50VGVtcGxhdGUoKXtsZXQgdD10aGlzLmVsZW1lbnR8fCJkaXYiLGU9dGhpcy5jbGFzc05hbWVzLmxlbmd0aD4wP2AgY2xhc3M9IiR7dGhpcy5jbGFzc05hbWVzLmpvaW4oIiAiKX0iYDoiIixpPSIiO2ZvcihsZXQgcj0wO3I8dGhpcy5hdHRycy5sZW5ndGg7cis9MilpKz1gICR7dGhpcy5hdHRyc1tyXX0keyIiIT09dGhpcy5hdHRyc1tyKzFdP2A9IiR7dGhpcy5hdHRyc1tyKzFdfSJgOiIifWA7cmV0dXJuIGUzKHQpLmlzVm9pZD9gPCR7dH0ke2V9JHtpfS8+YDpgPCR7dH0ke2V9JHtpfT48LyR7dH0+YH1nZXRBdHRycygpe2xldCB0PVtdO3JldHVybiB0aGlzLmNsYXNzTmFtZXMubGVuZ3RoPjAmJnQucHVzaCgiY2xhc3MiLHRoaXMuY2xhc3NOYW1lcy5qb2luKCIgIikpLHQuY29uY2F0KHRoaXMuYXR0cnMpfWFkZEF0dHJpYnV0ZSh0LGU9IiIpe3RoaXMuYXR0cnMucHVzaCh0LGUmJmUudG9Mb3dlckNhc2UoKXx8IiIpfWFkZENsYXNzTmFtZSh0KXt0aGlzLmNsYXNzTmFtZXMucHVzaCh0LnRvTG93ZXJDYXNlKCkpfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5lbGVtZW50fHwiIjtpZih0aGlzLmNsYXNzTmFtZXMmJnRoaXMuY2xhc3NOYW1lcy5mb3JFYWNoKGU9PnQrPWAuJHtlfWApLHRoaXMuYXR0cnMpZm9yKGxldCBlPTA7ZTx0aGlzLmF0dHJzLmxlbmd0aDtlKz0yKXtsZXQgaT10aGlzLmVzY2FwZUF0dHJpYnV0ZSh0aGlzLmF0dHJzW2VdKSxyPXRoaXMuYXR0cnNbZSsxXTt0Kz1gWyR7aX0ke3I/Ij0iK3I6IiJ9XWB9cmV0dXJuIHRoaXMubm90U2VsZWN0b3JzLmZvckVhY2goZT0+dCs9YDpub3QoJHtlfSlgKSx0fX0sb2Q9KCgpPT57cmV0dXJuKG49b2R8fChvZD17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixvZDt2YXIgbn0pKCkscWI9KCgpPT57cmV0dXJuKG49cWJ8fChxYj17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixxYjt2YXIgbn0pKCksWXI9KCgpPT57cmV0dXJuKG49WXJ8fChZcj17fSkpW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJMIixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLFlyO3ZhciBufSkoKTtmdW5jdGlvbiBsX2Uobil7bGV0IHQ9ZnVuY3Rpb24obil7bGV0IHQ9bi5jbGFzc05hbWVzJiZuLmNsYXNzTmFtZXMubGVuZ3RoP1s4LC4uLm4uY2xhc3NOYW1lc106W107cmV0dXJuW24uZWxlbWVudCYmIioiIT09bi5lbGVtZW50P24uZWxlbWVudDoiIiwuLi5uLmF0dHJzLC4uLnRdfShuKSxlPW4ubm90U2VsZWN0b3JzJiZuLm5vdFNlbGVjdG9ycy5sZW5ndGg/bi5ub3RTZWxlY3RvcnMubWFwKGk9PmZ1bmN0aW9uKG4pe2xldCB0PW4uY2xhc3NOYW1lcyYmbi5jbGFzc05hbWVzLmxlbmd0aD9bOCwuLi5uLmNsYXNzTmFtZXNdOltdO3JldHVybiBuLmVsZW1lbnQ/WzUsbi5lbGVtZW50LC4uLm4uYXR0cnMsLi4udF06bi5hdHRycy5sZW5ndGg/WzMsLi4ubi5hdHRycywuLi50XTpuLmNsYXNzTmFtZXMmJm4uY2xhc3NOYW1lcy5sZW5ndGg/WzksLi4ubi5jbGFzc05hbWVzXTpbXX0oaSkpOltdO3JldHVybiB0LmNvbmNhdCguLi5lKX1mdW5jdGlvbiB0MyhuKXtyZXR1cm4gbj91ZC5wYXJzZShuKS5tYXAobF9lKTpbXX12YXIgY19lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBtcShuLHQsZSl7bGV0IGk9bi5pbmRleE9mKHQpO3JldHVybi0xPT1pP2U6W24uc2xpY2UoMCxpKS50cmltKCksbi5zbGljZShpKzEpLnRyaW0oKV19ZnVuY3Rpb24gaDEobil7dGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBFcnJvcjogJHtufWApfWZ1bmN0aW9uIG4zKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uLmNoYXJDb2RlQXQoZSk7aWYoaT49NTUyOTYmJmk8PTU2MzE5JiZuLmxlbmd0aD5lKzEpe2xldCByPW4uY2hhckNvZGVBdChlKzEpO3I+PTU2MzIwJiZyPD01NzM0MyYmKGUrKyxpPShpLTU1Mjk2PDwxMCkrci01NjMyMCs2NTUzNil9aTw9MTI3P3QucHVzaChpKTppPD0yMDQ3P3QucHVzaChpPj42JjMxfDE5Miw2MyZpfDEyOCk6aTw9NjU1MzU/dC5wdXNoKGk+PjEyfDIyNCxpPj42JjYzfDEyOCw2MyZpfDEyOCk6aTw9MjA5NzE1MSYmdC5wdXNoKGk+PjE4Jjd8MjQwLGk+PjEyJjYzfDEyOCxpPj42JjYzfDEyOCw2MyZpfDEyOCl9cmV0dXJuIHR9ZnVuY3Rpb24gZ3Eobil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIlsiK24ubWFwKGdxKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1uKXJldHVybiIiK247aWYobi5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtuLm92ZXJyaWRkZW5OYW1lfWA7aWYobi5uYW1lKXJldHVybmAke24ubmFtZX1gO2lmKCFuLnRvU3RyaW5nKXJldHVybiJvYmplY3QiO2xldCB0PW4udG9TdHJpbmcoKTtpZihudWxsPT10KXJldHVybiIiK3Q7bGV0IGU9dC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09ZT90OnQuc3Vic3RyaW5nKDAsZSl9dmFyIHAwPSgoKT0+dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksbXA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1zdGF0aWMgemVybygpe3JldHVybiBuZXcgbXAoWzBdKX1zdGF0aWMgb25lKCl7cmV0dXJuIG5ldyBtcChbMV0pfWNsb25lKCl7cmV0dXJuIG5ldyBtcCh0aGlzLmRpZ2l0cy5zbGljZSgpKX1hZGQodCl7bGV0IGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLmFkZFRvU2VsZih0KSxlfWFkZFRvU2VsZih0KXtsZXQgZT1NYXRoLm1heCh0aGlzLmRpZ2l0cy5sZW5ndGgsdC5kaWdpdHMubGVuZ3RoKSxpPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89aTtyPHRoaXMuZGlnaXRzLmxlbmd0aCYmKG8rPXRoaXMuZGlnaXRzW3JdKSxyPHQuZGlnaXRzLmxlbmd0aCYmKG8rPXQuZGlnaXRzW3JdKSxvPj0xMD8odGhpcy5kaWdpdHNbcl09by0xMCxpPTEpOih0aGlzLmRpZ2l0c1tyXT1vLGk9MCl9aT4wJiYodGhpcy5kaWdpdHNbZV09MSl9dG9TdHJpbmcoKXtsZXQgdD0iIjtmb3IobGV0IGU9dGhpcy5kaWdpdHMubGVuZ3RoLTE7ZT49MDtlLS0pdCs9dGhpcy5kaWdpdHNbZV07cmV0dXJuIHR9fSxmMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvd2VyT2ZUd29zPVt0XX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnBvd2VyT2ZUd29zWzBdfW11bHRpcGx5QnkodCl7bGV0IGU9bXAuemVybygpO3JldHVybiB0aGlzLm11bHRpcGx5QnlBbmRBZGRUbyh0LGUpLGV9bXVsdGlwbHlCeUFuZEFkZFRvKHQsZSl7Zm9yKGxldCBpPTA7MCE9PXQ7dD4+Pj0xLGkrKylpZigxJnQpe2xldCByPXRoaXMuZ2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byhpKTtlLmFkZFRvU2VsZihyKX19Z2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byh0KXtmb3IobGV0IGU9dGhpcy5wb3dlck9mVHdvcy5sZW5ndGg7ZTw9dDtlKyspe2xldCBpPXRoaXMucG93ZXJPZlR3b3NbZS0xXTt0aGlzLnBvd2VyT2ZUd29zW2VdPWkuYWRkKGkpfXJldHVybiB0aGlzLnBvd2VyT2ZUd29zW3RdfX07ZnVuY3Rpb24gbV9lKG4pe3JldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uMyhuKSxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5sZW5ndGgrMz4+PjIsaT1bXTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09b2Yobiw0KnIsdCk7cmV0dXJuIGl9KHQsbmMuQmlnKSxpPTgqdC5sZW5ndGgscj1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8ODA7aSsrKWUucHVzaCh1bmRlZmluZWQpO3JldHVybiBlfSgpLG89MTczMjU4NDE5MyxzPTQwMjMyMzM0MTcsYT0yNTYyMzgzMTAyLGw9MjcxNzMzODc4LGM9MzI4NTM3NzUyMDtlW2k+PjVdfD0xMjg8PDI0LWklMzIsZVsxNSsoaSs2ND4+OTw8NCldPWk7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kz0xNil7bGV0IGQ9byxwPXMsaD1hLGY9bCxtPWM7Zm9yKGxldCBDPTA7Qzw4MDtDKyspe3JbQ109QzwxNj9lW3UrQ106TU4ocltDLTNdXnJbQy04XV5yW0MtMTRdXnJbQy0xNl0sMSk7bGV0IF89Yl9lKEMscyxhLGwpLHk9X1swXSxJPV9bMV0sQT1bTU4obyw1KSx5LGMsSSxyW0NdXS5yZWR1Y2UoQXMpO2M9bCxsPWEsYT1NTihzLDMwKSxzPW8sbz1BfW89QXMobyxkKSxzPUFzKHMscCksYT1BcyhhLGgpLGw9QXMobCxmKSxjPUFzKGMsbSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1ZTihuLGUpO3QrPShpPj4+NCkudG9TdHJpbmcoMTYpKygxNSZpKS50b1N0cmluZygxNil9cmV0dXJuIHQudG9Mb3dlckNhc2UoKX0oZnVuY3Rpb24obil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT50LmNvbmNhdChmdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPDQ7ZSsrKXQucHVzaChuPj4+OCooMy1lKSYyNTUpO3JldHVybiB0fShlKSksW10pfShbbyxzLGEsbCxjXSkpfShmdW5jdGlvbihuKXtyZXR1cm4gbi5tYXAodD0+dC52aXNpdChfX2UsbnVsbCkpfShuLm5vZGVzKS5qb2luKCIiKStgWyR7bi5tZWFuaW5nfV1gKX1mdW5jdGlvbiBfcShuKXtsZXQgdD1uZXcgcU47cmV0dXJuIFkxKG4ubm9kZXMubWFwKGk9PmkudmlzaXQodCxudWxsKSkuam9pbigiIiksbi5tZWFuaW5nKX12YXIgbTE9Y2xhc3N7dmlzaXRUZXh0KHQsZSl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCxlKXtyZXR1cm5gWyR7dC5jaGlsZHJlbi5tYXAoaT0+aS52aXNpdCh0aGlzKSkuam9pbigiLCAiKX1dYH12aXNpdEljdSh0LGUpe2xldCBpPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9ufSwgJHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQuaXNWb2lkP2A8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ii8+YDpgPHBoIHRhZyBuYW1lPSIke3Quc3RhcnROYW1lfSI+JHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfTwvcGggbmFtZT0iJHt0LmNsb3NlTmFtZX0iPmB9dmlzaXRQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0LnZhbHVlP2A8cGggbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWV9PC9waD5gOmA8cGggbmFtZT0iJHt0Lm5hbWV9Ii8+YH12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuYDxwaCBpY3UgbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWUudmlzaXQodGhpcyl9PC9waD5gfX0sX19lPW5ldyBtMSxxTj1jbGFzcyBleHRlbmRzIG0xe3Zpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH19O2Z1bmN0aW9uIGJfZShuLHQsZSxpKXtyZXR1cm4gbjwyMD9bdCZlfH50JmksMTUxODUwMDI0OV06bjw0MD9bdF5lXmksMTg1OTc3NTM5M106bjw2MD9bdCZlfHQmaXxlJmksMjQwMDk1OTcwOF06W3ReZV5pLDMzOTU0Njk3ODJdfWZ1bmN0aW9uIEo3KG4pe2xldCB0PW4zKG4pLGU9JDcodCwwKSxpPSQ3KHQsMTAyMDcyKTtyZXR1cm4gMD09ZSYmKDA9PWl8fDE9PWkpJiYoZV49MzE5NzkwMDYzLGlePS0xODAxNDEwMjY0KSxbZSxpXX1mdW5jdGlvbiBZMShuLHQ9IiIpe2xldCBlPUo3KG4pO2lmKHQpe2xldCBvPUo3KHQpO2U9ZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLHI9dFswXSxzPXZxKG5bMV0sdFsxXSksYT1zWzBdLGw9c1sxXTtyZXR1cm5bQXMoQXMoZSxyKSxhKSxsXX0oZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLGk9blsxXTtyZXR1cm5bZTw8MXxpPj4+MzEsaTw8MXxlPj4+MzFdfShlKSxvKX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT10OS50b1RoZVBvd2VyT2YoMCkubXVsdGlwbHlCeSh0KTtyZXR1cm4gdDkudG9UaGVQb3dlck9mKDQpLm11bHRpcGx5QnlBbmRBZGRUbyhuLGUpLGUudG9TdHJpbmcoKX0oMjE0NzQ4MzY0NyZlWzBdLGVbMV0pfWZ1bmN0aW9uICQ3KG4sdCl7bGV0IHIsZT0yNjU0NDM1NzY5LGk9MjY1NDQzNTc2OSxvPW4ubGVuZ3RoO2ZvcihyPTA7cisxMjw9bztyKz0xMil7ZT1BcyhlLG9mKG4scixuYy5MaXR0bGUpKSxpPUFzKGksb2YobixyKzQsbmMuTGl0dGxlKSk7bGV0IHM9ZTkoZSxpLHQ9QXModCxvZihuLHIrOCxuYy5MaXR0bGUpKSk7ZT1zWzBdLGk9c1sxXSx0PXNbMl19cmV0dXJuIGU9QXMoZSxvZihuLHIsbmMuTGl0dGxlKSksaT1BcyhpLG9mKG4scis0LG5jLkxpdHRsZSkpLHQ9QXModCxvKSxlOShlLGksdD1Bcyh0LG9mKG4scis4LG5jLkxpdHRsZSk8PDgpKVsyXX1mdW5jdGlvbiBlOShuLHQsZSl7cmV0dXJuIG49a28obix0KSxuPWtvKG4sZSksbl49ZT4+PjEzLHQ9a28odCxlKSx0PWtvKHQsbiksdF49bjw8OCxlPWtvKGUsbiksZT1rbyhlLHQpLGVePXQ+Pj4xMyxuPWtvKG4sdCksbj1rbyhuLGUpLG5ePWU+Pj4xMix0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDE2LGU9a28oZSxuKSxlPWtvKGUsdCksZV49dD4+PjUsbj1rbyhuLHQpLG49a28obixlKSxuXj1lPj4+Myx0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDEwLGU9a28oZSxuKSxlPWtvKGUsdCksW24sdCxlXj10Pj4+MTVdfXZhciBuYz0oKCk9PntyZXR1cm4obj1uY3x8KG5jPXt9KSlbbi5MaXR0bGU9MF09IkxpdHRsZSIsbltuLkJpZz0xXT0iQmlnIixuYzt2YXIgbn0pKCk7ZnVuY3Rpb24gQXMobix0KXtyZXR1cm4gdnEobix0KVsxXX1mdW5jdGlvbiB2cShuLHQpe2xldCBlPSg2NTUzNSZuKSsoNjU1MzUmdCksaT0obj4+PjE2KSsodD4+PjE2KSsoZT4+PjE2KTtyZXR1cm5baT4+PjE2LGk8PDE2fDY1NTM1JmVdfWZ1bmN0aW9uIGtvKG4sdCl7bGV0IGU9KDY1NTM1Jm4pLSg2NTUzNSZ0KTtyZXR1cm4obj4+MTYpLSh0Pj4xNikrKGU+PjE2KTw8MTZ8NjU1MzUmZX1mdW5jdGlvbiBNTihuLHQpe3JldHVybiBuPDx0fG4+Pj4zMi10fWZ1bmN0aW9uIFlOKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoPzA6blt0XX1mdW5jdGlvbiBvZihuLHQsZSl7bGV0IGk9MDtpZihlPT09bmMuQmlnKWZvcihsZXQgcj0wO3I8NDtyKyspaSs9WU4obix0K3IpPDwyNC04KnI7ZWxzZSBmb3IobGV0IHI9MDtyPDQ7cisrKWkrPVlOKG4sdCtyKTw8OCpyO3JldHVybiBpfXZhciB0OT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBmMShtcC5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgZjEoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KSxhMT0oKCk9PntyZXR1cm4obj1hMXx8KGExPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uQ29uc3Q9MV09IkNvbnN0IixhMTt2YXIgbn0pKCksZzE9Y2xhc3N7Y29uc3RydWN0b3IodD1hMS5Ob25lKXt0aGlzLm1vZGlmaWVycz10fWhhc01vZGlmaWVyKHQpe3JldHVybiAwIT0odGhpcy5tb2RpZmllcnMmdCl9fSxvYz0oKCk9PntyZXR1cm4obj1vY3x8KG9jPXt9KSlbbi5EeW5hbWljPTBdPSJEeW5hbWljIixuW24uQm9vbD0xXT0iQm9vbCIsbltuLlN0cmluZz0yXT0iU3RyaW5nIixuW24uSW50PTNdPSJJbnQiLG5bbi5OdW1iZXI9NF09Ik51bWJlciIsbltuLkZ1bmN0aW9uPTVdPSJGdW5jdGlvbiIsbltuLkluZmVycmVkPTZdPSJJbmZlcnJlZCIsbltuLk5vbmU9N109Ik5vbmUiLG9jO3ZhciBufSkoKSxzdT1jbGFzcyBleHRlbmRzIGcxe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZSksdGhpcy5uYW1lPXR9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRCdWlsdGluVHlwZSh0aGlzLGUpfX0sc2M9Y2xhc3MgZXh0ZW5kcyBnMXtjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXtzdXBlcihlKSx0aGlzLnZhbHVlPXQsdGhpcy50eXBlUGFyYW1zPWl9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uVHlwZSh0aGlzLGUpfX0sVjA9bmV3IHN1KG9jLkR5bmFtaWMpLGlhPW5ldyBzdShvYy5JbmZlcnJlZCksRF9lPW5ldyBzdShvYy5Cb29sKSxreD0obmV3IHN1KG9jLkludCksbmV3IHN1KG9jLk51bWJlcikpLHlxPW5ldyBzdShvYy5TdHJpbmcpLGRkPShuZXcgc3Uob2MuRnVuY3Rpb24pLG5ldyBzdShvYy5Ob25lKSkscGY9KCgpPT57cmV0dXJuKG49cGZ8fChwZj17fSkpW24uTWludXM9MF09Ik1pbnVzIixuW24uUGx1cz0xXT0iUGx1cyIscGY7dmFyIG59KSgpLGhuPSgoKT0+e3JldHVybihuPWhufHwoaG49e30pKVtuLkVxdWFscz0wXT0iRXF1YWxzIixuW24uTm90RXF1YWxzPTFdPSJOb3RFcXVhbHMiLG5bbi5JZGVudGljYWw9Ml09IklkZW50aWNhbCIsbltuLk5vdElkZW50aWNhbD0zXT0iTm90SWRlbnRpY2FsIixuW24uTWludXM9NF09Ik1pbnVzIixuW24uUGx1cz01XT0iUGx1cyIsbltuLkRpdmlkZT02XT0iRGl2aWRlIixuW24uTXVsdGlwbHk9N109Ik11bHRpcGx5IixuW24uTW9kdWxvPThdPSJNb2R1bG8iLG5bbi5BbmQ9OV09IkFuZCIsbltuLk9yPTEwXT0iT3IiLG5bbi5CaXR3aXNlQW5kPTExXT0iQml0d2lzZUFuZCIsbltuLkxvd2VyPTEyXT0iTG93ZXIiLG5bbi5Mb3dlckVxdWFscz0xM109Ikxvd2VyRXF1YWxzIixuW24uQmlnZ2VyPTE0XT0iQmlnZ2VyIixuW24uQmlnZ2VyRXF1YWxzPTE1XT0iQmlnZ2VyRXF1YWxzIixuW24uTnVsbGlzaENvYWxlc2NlPTE2XT0iTnVsbGlzaENvYWxlc2NlIixobjt2YXIgbn0pKCk7ZnVuY3Rpb24gYnEobix0LGUpe2xldCBpPW4ubGVuZ3RoO2lmKGkhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGk7cisrKWlmKCFlKG5bcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbGMobix0KXtyZXR1cm4gYnEobix0LChlLGkpPT5lLmlzRXF1aXZhbGVudChpKSl9dmFyIENyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50eXBlPXR8fG51bGwsdGhpcy5zb3VyY2VTcGFuPWV8fG51bGx9cHJvcCh0LGUpe3JldHVybiBuZXcgYjAodGhpcyx0LG51bGwsZSl9a2V5KHQsZSxpKXtyZXR1cm4gbmV3IHN4KHRoaXMsdCxlLGkpfWNhbGxGbih0LGUsaSl7cmV0dXJuIG5ldyB2cCh0aGlzLHQsbnVsbCxlLGkpfWluc3RhbnRpYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGdmKHRoaXMsdCxlLGkpfWNvbmRpdGlvbmFsKHQsZT1udWxsLGkpe3JldHVybiBuZXcgaXgodGhpcyx0LGUsbnVsbCxpKX1lcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLkVxdWFscyx0aGlzLHQsbnVsbCxlKX1ub3RFcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdEVxdWFscyx0aGlzLHQsbnVsbCxlKX1pZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLklkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1ub3RJZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdElkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1taW51cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTWludXMsdGhpcyx0LG51bGwsZSl9cGx1cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uUGx1cyx0aGlzLHQsbnVsbCxlKX1kaXZpZGUodCxlKXtyZXR1cm4gbmV3IGxyKGhuLkRpdmlkZSx0aGlzLHQsbnVsbCxlKX1tdWx0aXBseSh0LGUpe3JldHVybiBuZXcgbHIoaG4uTXVsdGlwbHksdGhpcyx0LG51bGwsZSl9bW9kdWxvKHQsZSl7cmV0dXJuIG5ldyBscihobi5Nb2R1bG8sdGhpcyx0LG51bGwsZSl9YW5kKHQsZSl7cmV0dXJuIG5ldyBscihobi5BbmQsdGhpcyx0LG51bGwsZSl9Yml0d2lzZUFuZCh0LGUsaT0hMCl7cmV0dXJuIG5ldyBscihobi5CaXR3aXNlQW5kLHRoaXMsdCxudWxsLGUsaSl9b3IodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk9yLHRoaXMsdCxudWxsLGUpfWxvd2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5Mb3dlcix0aGlzLHQsbnVsbCxlKX1sb3dlckVxdWFscyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTG93ZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9YmlnZ2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXIsdGhpcyx0LG51bGwsZSl9YmlnZ2VyRXF1YWxzKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9aXNCbGFuayh0KXtyZXR1cm4gdGhpcy5lcXVhbHMoYzEsdCl9bnVsbGlzaENvYWxlc2NlKHQsZSl7cmV0dXJuIG5ldyBscihobi5OdWxsaXNoQ29hbGVzY2UsdGhpcyx0LG51bGwsZSl9dG9TdG10KCl7cmV0dXJuIG5ldyBsdSh0aGlzLG51bGwpfX0sbWY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLm5hbWU9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtZiYmdGhpcy5uYW1lPT09dC5uYW1lfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRWYXJFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgJGIodGhpcy5uYW1lLHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdjA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmV4cHI9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFR5cGVvZkV4cHIodGhpcyxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2MCYmdC5leHByLmlzRXF1aXZhbGVudCh0aGlzLmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4gdGhpcy5leHByLmlzQ29uc3RhbnQoKX19LERuPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5ub2RlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG4mJnRoaXMubm9kZT09PXQubm9kZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcmFwcGVkTm9kZUV4cHIodGhpcyxlKX19LCRiPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaXx8ZS50eXBlLHIpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiAkYiYmdGhpcy5uYW1lPT09dC5uYW1lJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZVZhckV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBhdSh0aGlzLm5hbWUsdGhpcy52YWx1ZSx0LGUsdGhpcy5zb3VyY2VTcGFuKX10b0NvbnN0RGVjbCgpe3JldHVybiB0aGlzLnRvRGVjbFN0bXQoaWEsa2EuRmluYWwpfX0sZXg9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHJ8fGkudHlwZSxvKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5pbmRleD1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBleCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZUtleUV4cHIodGhpcyxlKX19LHR4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihyfHxpLnR5cGUsbyksdGhpcy5yZWNlaXZlcj10LHRoaXMubmFtZT1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0eCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMubmFtZT09PXQubmFtZSYmdGhpcy52YWx1ZS5pc0VxdWl2YWxlbnQodC52YWx1ZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0V3JpdGVQcm9wRXhwcih0aGlzLGUpfX0sdnA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3N1cGVyKGksciksdGhpcy5mbj10LHRoaXMuYXJncz1lLHRoaXMucHVyZT1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHZwJiZ0aGlzLmZuLmlzRXF1aXZhbGVudCh0LmZuKSYmbGModGhpcy5hcmdzLHQuYXJncykmJnRoaXMucHVyZT09PXQucHVyZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodGhpcyxlKX19LG54PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnRhZz10LHRoaXMudGVtcGxhdGU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBueCYmdGhpcy50YWcuaXNFcXVpdmFsZW50KHQudGFnKSYmYnEodGhpcy50ZW1wbGF0ZS5lbGVtZW50cyx0LnRlbXBsYXRlLmVsZW1lbnRzLChlLGkpPT5lLnRleHQ9PT1pLnRleHQpJiZsYyh0aGlzLnRlbXBsYXRlLmV4cHJlc3Npb25zLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0aGlzLGUpfX0sZ2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihpLHIpLHRoaXMuY2xhc3NFeHByPXQsdGhpcy5hcmdzPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZ2YmJnRoaXMuY2xhc3NFeHByLmlzRXF1aXZhbGVudCh0LmNsYXNzRXhwcikmJmxjKHRoaXMuYXJncyx0LmFyZ3MpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdEluc3RhbnRpYXRlRXhwcih0aGlzLGUpfX0sRmE9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLnZhbHVlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRmEmJnRoaXMudmFsdWU9PT10LnZhbHVlfWlzQ29uc3RhbnQoKXtyZXR1cm4hMH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExpdGVyYWxFeHByKHRoaXMsZSl9fSxfMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZWxlbWVudHM9dCx0aGlzLmV4cHJlc3Npb25zPWV9fSx2MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5yYXdUZXh0PWk/P2U/LnRvU3RyaW5nKCk/P1FOKGwxKHQpKX19LGhmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWV9fSxoMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5hc3NvY2lhdGVkTWVzc2FnZT1pfX0sWE49Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHlxLG8pLHRoaXMubWV0YUJsb2NrPXQsdGhpcy5tZXNzYWdlUGFydHM9ZSx0aGlzLnBsYWNlSG9sZGVyTmFtZXM9aSx0aGlzLmV4cHJlc3Npb25zPXJ9aXNFcXVpdmFsZW50KHQpe3JldHVybiExfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExvY2FsaXplZFN0cmluZyh0aGlzLGUpfXNlcmlhbGl6ZUkxOG5IZWFkKCl7bGV0IHQ9dGhpcy5tZXRhQmxvY2suZGVzY3JpcHRpb258fCIiO3JldHVybiB0aGlzLm1ldGFCbG9jay5tZWFuaW5nJiYodD1gJHt0aGlzLm1ldGFCbG9jay5tZWFuaW5nfXwke3R9YCksdGhpcy5tZXRhQmxvY2suY3VzdG9tSWQmJih0PWAke3R9QEAke3RoaXMubWV0YUJsb2NrLmN1c3RvbUlkfWApLHRoaXMubWV0YUJsb2NrLmxlZ2FjeUlkcyYmdGhpcy5tZXRhQmxvY2subGVnYWN5SWRzLmZvckVhY2goZT0+e3Q9YCR7dH1cdTI0MWYke2V9YH0pLGk5KHQsdGhpcy5tZXNzYWdlUGFydHNbMF0udGV4dCx0aGlzLmdldE1lc3NhZ2VQYXJ0U291cmNlU3BhbigwKSl9Z2V0TWVzc2FnZVBhcnRTb3VyY2VTcGFuKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VQYXJ0c1t0XT8uc291cmNlU3Bhbj8/dGhpcy5zb3VyY2VTcGFufWdldFBsYWNlaG9sZGVyU291cmNlU3Bhbih0KXtyZXR1cm4gdGhpcy5wbGFjZUhvbGRlck5hbWVzW3RdPy5zb3VyY2VTcGFuPz90aGlzLmV4cHJlc3Npb25zW3RdPy5zb3VyY2VTcGFuPz90aGlzLnNvdXJjZVNwYW59c2VyaWFsaXplSTE4blRlbXBsYXRlUGFydCh0KXtsZXQgZT10aGlzLnBsYWNlSG9sZGVyTmFtZXNbdC0xXSxpPXRoaXMubWVzc2FnZVBhcnRzW3RdLHI9ZS50ZXh0O3JldHVybiAwPT09ZS5hc3NvY2lhdGVkTWVzc2FnZT8ubGVnYWN5SWRzLmxlbmd0aCYmKHIrPWBAQCR7WTEoZS5hc3NvY2lhdGVkTWVzc2FnZS5tZXNzYWdlU3RyaW5nLGUuYXNzb2NpYXRlZE1lc3NhZ2UubWVhbmluZyl9YCksaTkocixpLnRleHQsdGhpcy5nZXRNZXNzYWdlUGFydFNvdXJjZVNwYW4odCkpfX0sbDE9bj0+bi5yZXBsYWNlKC9cXC9nLCJcXFxcIiksUl9lPW49Pm4ucmVwbGFjZSgvXjovLCJcXDoiKSxPX2U9bj0+bi5yZXBsYWNlKC86L2csIlxcOiIpLFFOPW49Pm4ucmVwbGFjZSgvYC9nLCJcXGAiKS5yZXBsYWNlKC9cJHsvZywiJFxceyIpO2Z1bmN0aW9uIGk5KG4sdCxlKXtyZXR1cm4iIj09PW4/e2Nvb2tlZDp0LHJhdzpRTihSX2UobDEodCkpKSxyYW5nZTplfTp7Y29va2VkOmA6JHtufToke3R9YCxyYXc6UU4oYDoke09fZShsMShuKSl9OiR7bDEodCl9YCkscmFuZ2U6ZX19dmFyIHkwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnR5cGVQYXJhbXM9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5MCYmdGhpcy52YWx1ZS5uYW1lPT09dC52YWx1ZS5uYW1lJiZ0aGlzLnZhbHVlLm1vZHVsZU5hbWU9PT10LnZhbHVlLm1vZHVsZU5hbWUmJnRoaXMudmFsdWUucnVudGltZT09PXQudmFsdWUucnVudGltZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRFeHRlcm5hbEV4cHIodGhpcyxlKX19LGl4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyLG8pe3N1cGVyKHJ8fGUudHlwZSxvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMuZmFsc2VDYXNlPWksdGhpcy50cnVlQ2FzZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZ0aGlzLnRydWVDYXNlLmlzRXF1aXZhbGVudCh0LnRydWVDYXNlKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8bnVsbD09dD9uPT10Om4uaXNFcXVpdmFsZW50KHQpfSh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Q29uZGl0aW9uYWxFeHByKHRoaXMsZSl9fSxyeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoRF9lLGUpLHRoaXMuY29uZGl0aW9uPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgcngmJnRoaXMuY29uZGl0aW9uLmlzRXF1aXZhbGVudCh0LmNvbmRpdGlvbil9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Tm90RXhwcih0aGlzLGUpfX0sUnM9Y2xhc3N7Y29uc3RydWN0b3IodCxlPW51bGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdGhpcy5uYW1lPT09dC5uYW1lfX0sX2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGksciksdGhpcy5wYXJhbXM9dCx0aGlzLnN0YXRlbWVudHM9ZSx0aGlzLm5hbWU9b31pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfZiYmbGModGhpcy5wYXJhbXMsdC5wYXJhbXMpJiZsYyh0aGlzLnN0YXRlbWVudHMsdC5zdGF0ZW1lbnRzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRGdW5jdGlvbkV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBheCh0LHRoaXMucGFyYW1zLHRoaXMuc3RhdGVtZW50cyx0aGlzLnR5cGUsZSx0aGlzLnNvdXJjZVNwYW4pfX0sb3g9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITApe3N1cGVyKGl8fGt4LHIpLHRoaXMub3BlcmF0b3I9dCx0aGlzLmV4cHI9ZSx0aGlzLnBhcmVucz1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG94JiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHRoaXMsZSl9fSxscj1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPSEwKXtzdXBlcihyfHxlLnR5cGUsbyksdGhpcy5vcGVyYXRvcj10LHRoaXMucmhzPWksdGhpcy5wYXJlbnM9cyx0aGlzLmxocz1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGxyJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5saHMuaXNFcXVpdmFsZW50KHQubGhzKSYmdGhpcy5yaHMuaXNFcXVpdmFsZW50KHQucmhzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodGhpcyxlKX19LGIwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5uYW1lPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYjAmJnRoaXMucmVjZWl2ZXIuaXNFcXVpdmFsZW50KHQucmVjZWl2ZXIpJiZ0aGlzLm5hbWU9PT10Lm5hbWV9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0UmVhZFByb3BFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgdHgodGhpcy5yZWNlaXZlcix0aGlzLm5hbWUsdCxudWxsLHRoaXMuc291cmNlU3Bhbil9fSxzeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKGksciksdGhpcy5yZWNlaXZlcj10LHRoaXMuaW5kZXg9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBzeCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRLZXlFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgZXgodGhpcy5yZWNlaXZlcix0aGlzLmluZGV4LHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdmY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVudHJpZXM9dH1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LmlzQ29uc3RhbnQoKSl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgdmYmJmxjKHRoaXMuZW50cmllcyx0LmVudHJpZXMpfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5RXhwcih0aGlzLGUpfX0seTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2V5PXQsdGhpcy52YWx1ZT1lLHRoaXMucXVvdGVkPWl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX19LHgwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbnRyaWVzPXQsdGhpcy52YWx1ZVR5cGU9bnVsbCxlJiYodGhpcy52YWx1ZVR5cGU9ZS52YWx1ZVR5cGUpfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHgwJiZsYyh0aGlzLmVudHJpZXMsdC5lbnRyaWVzKX1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LnZhbHVlLmlzQ29uc3RhbnQoKSl9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwRXhwcih0aGlzLGUpfX0sS049bmV3IEZhKG51bGwsbnVsbCxudWxsKSxjMT1uZXcgRmEobnVsbCxpYSxudWxsKSxrYT0oKCk9PntyZXR1cm4obj1rYXx8KGthPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uRmluYWw9MV09IkZpbmFsIixuW24uUHJpdmF0ZT0yXT0iUHJpdmF0ZSIsbltuLkV4cG9ydGVkPTRdPSJFeHBvcnRlZCIsbltuLlN0YXRpYz04XT0iU3RhdGljIixrYTt2YXIgbn0pKCksWk49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudGV4dD10LHRoaXMubXVsdGlsaW5lPWUsdGhpcy50cmFpbGluZ05ld2xpbmU9aX10b1N0cmluZygpe3JldHVybiB0aGlzLm11bHRpbGluZT9gICR7dGhpcy50ZXh0fSBgOnRoaXMudGV4dH19LGIxPWNsYXNzIGV4dGVuZHMgWk57Y29uc3RydWN0b3IodCl7c3VwZXIoIiIsITAsITApLHRoaXMudGFncz10fXRvU3RyaW5nKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4iIjtpZigxPT09bi5sZW5ndGgmJm5bMF0udGFnTmFtZSYmIW5bMF0udGV4dClyZXR1cm5gKiR7bzkoblswXSl9IGA7bGV0IHQ9IipcbiI7Zm9yKGxldCBlIG9mIG4pdCs9IiAqIix0Kz1vOShlKS5yZXBsYWNlKC9cbi9nLCJcbiAqICIpLHQrPSJcbiI7cmV0dXJuIHQrPSIgIix0fSh0aGlzLnRhZ3MpfX0seWY9Y2xhc3N7Y29uc3RydWN0b3IodD1rYS5Ob25lLGU9bnVsbCxpKXt0aGlzLm1vZGlmaWVycz10LHRoaXMuc291cmNlU3Bhbj1lLHRoaXMubGVhZGluZ0NvbW1lbnRzPWl9aGFzTW9kaWZpZXIodCl7cmV0dXJuIDAhPSh0aGlzLm1vZGlmaWVycyZ0KX1hZGRMZWFkaW5nQ29tbWVudCh0KXt0aGlzLmxlYWRpbmdDb21tZW50cz10aGlzLmxlYWRpbmdDb21tZW50cz8/W10sdGhpcy5sZWFkaW5nQ29tbWVudHMucHVzaCh0KX19LGF1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHIsbyxzKSx0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy50eXBlPWl8fGUmJmUudHlwZXx8bnVsbH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhdSYmdGhpcy5uYW1lPT09dC5uYW1lJiYodGhpcy52YWx1ZT8hIXQudmFsdWUmJnRoaXMudmFsdWUuaXNFcXVpdmFsZW50KHQudmFsdWUpOiF0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0RGVjbGFyZVZhclN0bXQodGhpcyxlKX19LGF4PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSl7c3VwZXIobyxzLGEpLHRoaXMubmFtZT10LHRoaXMucGFyYW1zPWUsdGhpcy5zdGF0ZW1lbnRzPWksdGhpcy50eXBlPXJ8fG51bGx9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXgmJmxjKHRoaXMucGFyYW1zLHQucGFyYW1zKSYmbGModGhpcy5zdGF0ZW1lbnRzLHQuc3RhdGVtZW50cyl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodGhpcyxlKX19LGx1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGthLk5vbmUsZSxpKSx0aGlzLmV4cHI9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBsdSYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfXZpc2l0U3RhdGVtZW50KHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uU3RtdCh0aGlzLGUpfX0sdW89Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGU9bnVsbCxpKXtzdXBlcihrYS5Ob25lLGUsaSksdGhpcy52YWx1ZT10fWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHVvJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0UmV0dXJuU3RtdCh0aGlzLGUpfX0sbHg9Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGUsaT1bXSxyLG8pe3N1cGVyKGthLk5vbmUscixvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMudHJ1ZUNhc2U9ZSx0aGlzLmZhbHNlQ2FzZT1pfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGx4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZsYyh0aGlzLnRydWVDYXNlLHQudHJ1ZUNhc2UpJiZsYyh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdElmU3RtdCh0aGlzLGUpfX07ZnVuY3Rpb24gTWkobix0LGUpe3JldHVybiBuZXcgbWYobix0LGUpfWZ1bmN0aW9uIHhuKG4sdD1udWxsLGUpe3JldHVybiBuZXcgeTAobixudWxsLHQsZSl9ZnVuY3Rpb24gTmEobix0LGUpe3JldHVybiBuZXcgc2Mobix0LGUpfWZ1bmN0aW9uIGkzKG4pe3JldHVybiBuZXcgdjAobil9ZnVuY3Rpb24gY3Iobix0LGUpe3JldHVybiBuZXcgdmYobix0LGUpfWZ1bmN0aW9uIG1sKG4sdD1udWxsKXtyZXR1cm4gbmV3IHgwKG4ubWFwKGU9Pm5ldyB5MShlLmtleSxlLnZhbHVlLGUucXVvdGVkKSksdCxudWxsKX1mdW5jdGlvbiBPcyhuLHQsZSxpLHIpe3JldHVybiBuZXcgX2Yobix0LGUsaSxyKX1mdW5jdGlvbiByMyhuLHQsZSxpLHIpe3JldHVybiBuZXcgbHgobix0LGUsaSxyKX1mdW5jdGlvbiByOShuLHQsZSxpKXtyZXR1cm4gbmV3IG54KG4sdCxlLGkpfWZ1bmN0aW9uIG50KG4sdCxlKXtyZXR1cm4gbmV3IEZhKG4sdCxlKX1mdW5jdGlvbiB4cShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiZudWxsPT09bi52YWx1ZX1mdW5jdGlvbiBvOShuKXtsZXQgdD0iIjtpZihuLnRhZ05hbWUmJih0Kz1gIEAke24udGFnTmFtZX1gKSxuLnRleHQpe2lmKG4udGV4dC5tYXRjaCgvXC9cKnxcKlwvLykpdGhyb3cgbmV3IEVycm9yKCdKU0RvYyB0ZXh0IGNhbm5vdCBjb250YWluICIvKiIgYW5kICIqLyInKTt0Kz0iICIrbi50ZXh0LnJlcGxhY2UoL0AvZywiXFxAIil9cmV0dXJuIHR9dmFyIHM5PU1pKCI8dW5rbm93bj4iKSxDcT17fSxDMD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQudHlwZSksdGhpcy5yZXNvbHZlZD10LHRoaXMub3JpZ2luYWw9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gZT09PUNxP3RoaXMub3JpZ2luYWwudmlzaXRFeHByZXNzaW9uKHQsZSk6dGhpcy5yZXNvbHZlZC52aXNpdEV4cHJlc3Npb24odCxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDMCYmdGhpcy5yZXNvbHZlZC5pc0VxdWl2YWxlbnQodC5yZXNvbHZlZCl9aXNDb25zdGFudCgpe3JldHVybiEwfWZpeHVwKHQpe3RoaXMucmVzb2x2ZWQ9dCx0aGlzLnNoYXJlZD0hMH19LHgxPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITEpe3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkPXQsdGhpcy5zdGF0ZW1lbnRzPVtdLHRoaXMubGl0ZXJhbHM9bmV3IE1hcCx0aGlzLmxpdGVyYWxGYWN0b3JpZXM9bmV3IE1hcCx0aGlzLm5leHROYW1lSW5kZXg9MH1nZXRDb25zdExpdGVyYWwodCxlKXtpZih0IGluc3RhbmNlb2YgRmEmJiFhOSh0KXx8dCBpbnN0YW5jZW9mIEMwKXJldHVybiB0O2xldCBpPXRoaXMua2V5T2YodCkscj10aGlzLmxpdGVyYWxzLmdldChpKSxvPSExO2lmKHJ8fChyPW5ldyBDMCh0KSx0aGlzLmxpdGVyYWxzLnNldChpLHIpLG89ITApLCFvJiYhci5zaGFyZWR8fG8mJmUpe2xldCBhLGwscz10aGlzLmZyZXNoTmFtZSgpO3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkJiZhOSh0KT8oYT1NaShzKS5zZXQobmV3IF9mKFtdLFtuZXcgdW8odCldKSksbD1NaShzKS5jYWxsRm4oW10pKTooYT1NaShzKS5zZXQodCksbD1NaShzKSksdGhpcy5zdGF0ZW1lbnRzLnB1c2goYS50b0RlY2xTdG10KGlhLGthLkZpbmFsKSksci5maXh1cChsKX1yZXR1cm4gcn1nZXRMaXRlcmFsRmFjdG9yeSh0KXtpZih0IGluc3RhbmNlb2YgdmYpe2xldCBlPXQuZW50cmllcy5tYXAocj0+ci5pc0NvbnN0YW50KCk/cjpzOSksaT10aGlzLmtleU9mKGNyKGUpKTtyZXR1cm4gdGhpcy5fZ2V0TGl0ZXJhbEZhY3RvcnkoaSx0LmVudHJpZXMscj0+Y3IocikpfXtsZXQgZT1tbCh0LmVudHJpZXMubWFwKHI9Pih7a2V5OnIua2V5LHZhbHVlOnIudmFsdWUuaXNDb25zdGFudCgpP3IudmFsdWU6czkscXVvdGVkOnIucXVvdGVkfSkpKSxpPXRoaXMua2V5T2YoZSk7cmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KGksdC5lbnRyaWVzLm1hcChyPT5yLnZhbHVlKSxyPT5tbChyLm1hcCgobyxzKT0+KHtrZXk6dC5lbnRyaWVzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmVudHJpZXNbc10ucXVvdGVkfSkpKSl9fV9nZXRMaXRlcmFsRmFjdG9yeSh0LGUsaSl7bGV0IHI9dGhpcy5saXRlcmFsRmFjdG9yaWVzLmdldCh0KSxvPWUuZmlsdGVyKHM9PiFzLmlzQ29uc3RhbnQoKSk7aWYoIXIpe2xldCBzPWUubWFwKCh1LGQpPT51LmlzQ29uc3RhbnQoKT90aGlzLmdldENvbnN0TGl0ZXJhbCh1LCEwKTpNaShgYSR7ZH1gKSksbD1PcyhzLmZpbHRlcihIX2UpLm1hcCh1PT5uZXcgUnModS5uYW1lLFYwKSksW25ldyB1byhpKHMpKV0saWEpLGM9dGhpcy5mcmVzaE5hbWUoKTt0aGlzLnN0YXRlbWVudHMucHVzaChNaShjKS5zZXQobCkudG9EZWNsU3RtdChpYSxrYS5GaW5hbCkpLHI9TWkoYyksdGhpcy5saXRlcmFsRmFjdG9yaWVzLnNldCh0LHIpfXJldHVybntsaXRlcmFsRmFjdG9yeTpyLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOm99fXVuaXF1ZU5hbWUodCl7cmV0dXJuYCR7dH0ke3RoaXMubmV4dE5hbWVJbmRleCsrfWB9ZnJlc2hOYW1lKCl7cmV0dXJuIHRoaXMudW5pcXVlTmFtZSgiX2MiKX1rZXlPZih0KXtyZXR1cm4gdC52aXNpdEV4cHJlc3Npb24obmV3IEpOLENxKX19LEpOPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aXNpdFdyYXBwZWROb2RlRXhwcj1Gbyx0aGlzLnZpc2l0V3JpdGVWYXJFeHByPUZvLHRoaXMudmlzaXRXcml0ZUtleUV4cHI9Rm8sdGhpcy52aXNpdFdyaXRlUHJvcEV4cHI9Rm8sdGhpcy52aXNpdEludm9rZUZ1bmN0aW9uRXhwcj1Gbyx0aGlzLnZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByPUZvLHRoaXMudmlzaXRJbnN0YW50aWF0ZUV4cHI9Rm8sdGhpcy52aXNpdENvbmRpdGlvbmFsRXhwcj1Gbyx0aGlzLnZpc2l0Tm90RXhwcj1Gbyx0aGlzLnZpc2l0QXNzZXJ0Tm90TnVsbEV4cHI9Rm8sdGhpcy52aXNpdENhc3RFeHByPUZvLHRoaXMudmlzaXRGdW5jdGlvbkV4cHI9Rm8sdGhpcy52aXNpdFVuYXJ5T3BlcmF0b3JFeHByPUZvLHRoaXMudmlzaXRCaW5hcnlPcGVyYXRvckV4cHI9Rm8sdGhpcy52aXNpdFJlYWRQcm9wRXhwcj1Gbyx0aGlzLnZpc2l0UmVhZEtleUV4cHI9Rm8sdGhpcy52aXNpdENvbW1hRXhwcj1Gbyx0aGlzLnZpc2l0TG9jYWxpemVkU3RyaW5nPUZvfXZpc2l0TGl0ZXJhbEV4cHIodCl7cmV0dXJuYCR7InN0cmluZyI9PXR5cGVvZiB0LnZhbHVlPyciJyt0LnZhbHVlKyciJzp0LnZhbHVlfWB9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuYFske3QuZW50cmllcy5tYXAoaT0+aS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSkuam9pbigiLCIpfV1gfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm5geyR7dC5lbnRyaWVzLm1hcChvPT5gJHsobz0+e2xldCBzPW8ucXVvdGVkPyciJzoiIjtyZXR1cm5gJHtzfSR7by5rZXl9JHtzfWB9KShvKX06JHtvLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfWApLmpvaW4oIiwiKX1gfXZpc2l0RXh0ZXJuYWxFeHByKHQpe3JldHVybiB0LnZhbHVlLm1vZHVsZU5hbWU/YEVYOiR7dC52YWx1ZS5tb2R1bGVOYW1lfToke3QudmFsdWUubmFtZX1gOmBFWDoke3QudmFsdWUucnVudGltZS5uYW1lfWB9dmlzaXRSZWFkVmFyRXhwcih0KXtyZXR1cm5gVkFSOiR7dC5uYW1lfWB9dmlzaXRUeXBlb2ZFeHByKHQsZSl7cmV0dXJuYFRZUEVPRjoke3QuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX1gfX07ZnVuY3Rpb24gRm8obil7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBWaXNpdG9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2Vzbid0IGhhbmRsZSAke24uY29uc3RydWN0b3IubmFtZX1gKX1mdW5jdGlvbiBIX2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBtZn1mdW5jdGlvbiBhOShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiYic3RyaW5nIj09dHlwZW9mIG4udmFsdWUmJm4udmFsdWUubGVuZ3RoPj01MH12YXIgcGU9IkBhbmd1bGFyL2NvcmUiLEs9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uTkVXX01FVEhPRD0iZmFjdG9yeSIsbi5UUkFOU0ZPUk1fTUVUSE9EPSJ0cmFuc2Zvcm0iLG4uUEFUQ0hfREVQUz0icGF0Y2hlZERlcHMiLG4uY29yZT17bmFtZTpudWxsLG1vZHVsZU5hbWU6cGV9LG4ubmFtZXNwYWNlSFRNTD17bmFtZToiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VNYXRoTUw9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VTVkc9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRTdGFydD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRFbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiLG1vZHVsZU5hbWU6cGV9LG4uYWR2YW5jZT17bmFtZToiXHUwMjc1XHUwMjc1YWR2YW5jZSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0TGlzdGVuZXI9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RMaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc1Byb3A9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyU3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyRW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRDb250YWluZXI9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXA9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlMj17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUzIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlNT17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU2Iixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlOD17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGVWIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcCIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3A9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5uZXh0Q29udGV4dD17bmFtZToiXHUwMjc1XHUwMjc1bmV4dENvbnRleHQiLG1vZHVsZU5hbWU6cGV9LG4ucmVzZXRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNldFZpZXciLG1vZHVsZU5hbWU6cGV9LG4udGVtcGxhdGVDcmVhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRlbXBsYXRlIixtb2R1bGVOYW1lOnBlfSxuLnRleHQ9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHQiLG1vZHVsZU5hbWU6cGV9LG4uZW5hYmxlQmluZGluZ3M9e25hbWU6Ilx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmRpc2FibGVCaW5kaW5ncz17bmFtZToiXHUwMjc1XHUwMjc1ZGlzYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmdldEN1cnJlbnRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5yZXN0b3JlVmlldz17bmFtZToiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMD17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb24xPXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjI9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjIiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMz17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb240PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjU9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjUiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uNj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb243PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjg9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uVj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDE9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMSIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDI9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMiIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDM9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMyIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDQ9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kNCIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZFY9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kViIsbW9kdWxlTmFtZTpwZX0sbi5ob3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NWhvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHkiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5pMThuPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5BdHRyaWJ1dGVzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXR0cmlidXRlcyIsbW9kdWxlTmFtZTpwZX0sbi5pMThuRXhwPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuRXhwIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5TdGFydD17bmFtZToiXHUwMjc1XHUwMjc1aTE4blN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmkxOG5FbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWkxOG5FbmQiLG1vZHVsZU5hbWU6cGV9LG4uaTE4bkFwcGx5PXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXBwbHkiLG1vZHVsZU5hbWU6cGV9LG4uaTE4blBvc3Rwcm9jZXNzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiLG1vZHVsZU5hbWU6cGV9LG4ucGlwZT17bmFtZToiXHUwMjc1XHUwMjc1cGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9qZWN0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uIixtb2R1bGVOYW1lOnBlfSxuLnByb2plY3Rpb25EZWY9e25hbWU6Ilx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiLG1vZHVsZU5hbWU6cGV9LG4ucmVmZXJlbmNlPXtuYW1lOiJcdTAyNzVcdTAyNzVyZWZlcmVuY2UiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0QXR0cmlidXRlPXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiLG1vZHVsZU5hbWU6cGV9LG4uZGlyZWN0aXZlSW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVkaXJlY3RpdmVJbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW52YWxpZEZhY3Rvcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLmludmFsaWRGYWN0b3J5RGVwPXtuYW1lOiJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeURlcCIsbW9kdWxlTmFtZTpwZX0sbi50ZW1wbGF0ZVJlZkV4dHJhY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZm9yd2FyZFJlZj17bmFtZToiZm9yd2FyZFJlZiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlRm9yd2FyZFJlZj17bmFtZToicmVzb2x2ZUZvcndhcmRSZWYiLG1vZHVsZU5hbWU6cGV9LG4uXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RhYmxlRGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdGFibGVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlV2luZG93PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVEb2N1bWVudD17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVCb2R5PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlQm9keSIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVDb21wb25lbnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUNvbXBvbmVudCIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ29tcG9uZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVDb21wb25lbnQiLG1vZHVsZU5hbWU6cGV9LG4uc2V0Q29tcG9uZW50U2NvcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIixtb2R1bGVOYW1lOnBlfSxuLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5PXtuYW1lOiJDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSIsbW9kdWxlTmFtZTpwZX0sbi5WaWV3RW5jYXBzdWxhdGlvbj17bmFtZToiVmlld0VuY2Fwc3VsYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uQ29tcG9uZW50RGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUNvbXBvbmVudERlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1RmFjdG9yeURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlUYXJnZXQ9e25hbWU6Ilx1MDI3NVx1MDI3NUZhY3RvcnlUYXJnZXQiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lRGlyZWN0aXZlPXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZURpcmVjdGl2ZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlRGlyZWN0aXZlIixtb2R1bGVOYW1lOnBlfSxuLkRpcmVjdGl2ZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVEaXJlY3RpdmVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RvckRlZj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWYiLG1vZHVsZU5hbWU6cGV9LG4uSW5qZWN0b3JEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVJbmplY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZUluamVjdG9yPXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVJbmplY3RvciIsbW9kdWxlTmFtZTpwZX0sbi5OZ01vZHVsZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVOZ01vZHVsZURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLk1vZHVsZVdpdGhQcm92aWRlcnM9e25hbWU6Ik1vZHVsZVdpdGhQcm92aWRlcnMiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lTmdNb2R1bGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVOZ01vZHVsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlTmdNb2R1bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2V0TmdNb2R1bGVTY29wZT17bmFtZToiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSIsbW9kdWxlTmFtZTpwZX0sbi5yZWdpc3Rlck5nTW9kdWxlVHlwZT17bmFtZToiXHUwMjc1XHUwMjc1cmVnaXN0ZXJOZ01vZHVsZVR5cGUiLG1vZHVsZU5hbWU6cGV9LG4uUGlwZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVQaXBlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ2xhc3NNZXRhZGF0YT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSIsbW9kdWxlTmFtZTpwZX0sbi5zZXRDbGFzc01ldGFkYXRhPXtuYW1lOiJcdTAyNzVzZXRDbGFzc01ldGFkYXRhIixtb2R1bGVOYW1lOnBlfSxuLnF1ZXJ5UmVmcmVzaD17bmFtZToiXHUwMjc1XHUwMjc1cXVlcnlSZWZyZXNoIixtb2R1bGVOYW1lOnBlfSxuLnZpZXdRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1dmlld1F1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmxvYWRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1bG9hZFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmNvbnRlbnRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1Y29udGVudFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLk5nT25DaGFuZ2VzRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1TmdPbkNoYW5nZXNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkluaGVyaXREZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkNvcHlEZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLlN0YW5kYWxvbmVGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVTdGFuZGFsb25lRmVhdHVyZSIsbW9kdWxlTmFtZTpwZX0sbi5Qcm92aWRlcnNGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLmxpc3RlbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVsaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5nZXRJbmhlcml0ZWRGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplSHRtbD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplU3R5bGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplU3R5bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbi5zYW5pdGl6ZVNjcmlwdD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVTY3JpcHQiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplVXJsIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIixtb2R1bGVOYW1lOnBlfSxuLnRydXN0Q29uc3RhbnRIdG1sPXtuYW1lOiJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCIsbW9kdWxlTmFtZTpwZX0sbi50cnVzdENvbnN0YW50UmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbn0pKCk7ZnVuY3Rpb24gbjEobil7bj1uPDA/MSsoLW48PDEpOm48PDE7bGV0IHQ9IiI7ZG97bGV0IGU9MzEmbjsobj4+PTUpPjAmJihlfD0zMiksdCs9amIoZSl9d2hpbGUobj4wKTtyZXR1cm4gdH1mdW5jdGlvbiBqYihuKXtpZihuPDB8fG4+PTY0KXRocm93IG5ldyBFcnJvcigiQ2FuIG9ubHkgZW5jb2RlIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgNjNdIik7cmV0dXJuIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iW25dfXZhciBXX2U9Lyd8XFx8XG58XHJ8XCQvZyxxX2U9L15bJEEtWl9dWzAtOUEtWl8kXSokL2ksQzE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbmRlbnQ9dCx0aGlzLnBhcnRzTGVuZ3RoPTAsdGhpcy5wYXJ0cz1bXSx0aGlzLnNyY1NwYW5zPVtdfX0sY3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faW5kZW50PXQsdGhpcy5fbGluZXM9W25ldyBDMSh0KV19c3RhdGljIGNyZWF0ZVJvb3QoKXtyZXR1cm4gbmV3IGN4KDApfWdldCBfY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5fbGluZXNbdGhpcy5fbGluZXMubGVuZ3RoLTFdfXByaW50bG4odCxlPSIiKXt0aGlzLnByaW50KHR8fG51bGwsZSwhMCl9bGluZUlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLmxlbmd0aH1saW5lTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudCoiICAiLmxlbmd0aCt0aGlzLl9jdXJyZW50TGluZS5wYXJ0c0xlbmd0aH1wcmludCh0LGUsaT0hMSl7ZS5sZW5ndGg+MCYmKHRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLnB1c2goZSksdGhpcy5fY3VycmVudExpbmUucGFydHNMZW5ndGgrPWUubGVuZ3RoLHRoaXMuX2N1cnJlbnRMaW5lLnNyY1NwYW5zLnB1c2godCYmdC5zb3VyY2VTcGFufHxudWxsKSksaSYmdGhpcy5fbGluZXMucHVzaChuZXcgQzEodGhpcy5faW5kZW50KSl9cmVtb3ZlRW1wdHlMYXN0TGluZSgpe3RoaXMubGluZUlzRW1wdHkoKSYmdGhpcy5fbGluZXMucG9wKCl9aW5jSW5kZW50KCl7dGhpcy5faW5kZW50KyssdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9ZGVjSW5kZW50KCl7dGhpcy5faW5kZW50LS0sdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9dG9Tb3VyY2UoKXtyZXR1cm4gdGhpcy5zb3VyY2VMaW5lcy5tYXAodD0+dC5wYXJ0cy5sZW5ndGg+MD9sOSh0LmluZGVudCkrdC5wYXJ0cy5qb2luKCIiKToiIikuam9pbigiXG4iKX10b1NvdXJjZU1hcEdlbmVyYXRvcih0LGU9MCl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQ9bnVsbCl7dGhpcy5maWxlPXQsdGhpcy5zb3VyY2VzQ29udGVudD1uZXcgTWFwLHRoaXMubGluZXM9W10sdGhpcy5sYXN0Q29sMD0wLHRoaXMuaGFzTWFwcGluZ3M9ITF9YWRkU291cmNlKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5oYXModCl8fHRoaXMuc291cmNlc0NvbnRlbnQuc2V0KHQsZSksdGhpc31hZGRMaW5lKCl7cmV0dXJuIHRoaXMubGluZXMucHVzaChbXSksdGhpcy5sYXN0Q29sMD0wLHRoaXN9YWRkTWFwcGluZyh0LGUsaSxyKXtpZighdGhpcy5jdXJyZW50TGluZSl0aHJvdyBuZXcgRXJyb3IoIkEgbGluZSBtdXN0IGJlIGFkZGVkIGJlZm9yZSBtYXBwaW5ncyBjYW4gYmUgYWRkZWQiKTtpZihudWxsIT1lJiYhdGhpcy5zb3VyY2VzQ29udGVudC5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvdXJjZSBmaWxlICIke2V9ImApO2lmKG51bGw9PXQpdGhyb3cgbmV3IEVycm9yKCJUaGUgY29sdW1uIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBtdXN0IGJlIHByb3ZpZGVkIik7aWYodDx0aGlzLmxhc3RDb2wwKXRocm93IG5ldyBFcnJvcigiTWFwcGluZyBzaG91bGQgYmUgYWRkZWQgaW4gb3V0cHV0IG9yZGVyIik7aWYoZSYmKG51bGw9PWl8fG51bGw9PXIpKXRocm93IG5ldyBFcnJvcigiVGhlIHNvdXJjZSBsb2NhdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gYSBzb3VyY2UgdXJsIGlzIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMuaGFzTWFwcGluZ3M9ITAsdGhpcy5sYXN0Q29sMD10LHRoaXMuY3VycmVudExpbmUucHVzaCh7Y29sMDp0LHNvdXJjZVVybDplLHNvdXJjZUxpbmUwOmksc291cmNlQ29sMDpyfSksdGhpc31nZXQgY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSgtMSlbMF19dG9KU09OKCl7aWYoIXRoaXMuaGFzTWFwcGluZ3MpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IE1hcCxlPVtdLGk9W107QXJyYXkuZnJvbSh0aGlzLnNvdXJjZXNDb250ZW50LmtleXMoKSkuZm9yRWFjaCgoYyx1KT0+e3Quc2V0KGMsdSksZS5wdXNoKGMpLGkucHVzaCh0aGlzLnNvdXJjZXNDb250ZW50LmdldChjKXx8bnVsbCl9KTtsZXQgcj0iIixvPTAscz0wLGE9MCxsPTA7cmV0dXJuIHRoaXMubGluZXMuZm9yRWFjaChjPT57bz0wLHIrPWMubWFwKHU9PntsZXQgZD1uMSh1LmNvbDAtbyk7cmV0dXJuIG89dS5jb2wwLG51bGwhPXUuc291cmNlVXJsJiYoZCs9bjEodC5nZXQodS5zb3VyY2VVcmwpLXMpLHM9dC5nZXQodS5zb3VyY2VVcmwpLGQrPW4xKHUuc291cmNlTGluZTAtYSksYT11LnNvdXJjZUxpbmUwLGQrPW4xKHUuc291cmNlQ29sMC1sKSxsPXUuc291cmNlQ29sMCksZH0pLmpvaW4oIiwiKSxyKz0iOyJ9KSxyPXIuc2xpY2UoMCwtMSkse2ZpbGU6dGhpcy5maWxlfHwiIix2ZXJzaW9uOjMsc291cmNlUm9vdDoiIixzb3VyY2VzOmUsc291cmNlc0NvbnRlbnQ6aSxtYXBwaW5nczpyfX10b0pzQ29tbWVudCgpe3JldHVybiB0aGlzLmhhc01hcHBpbmdzPyIvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCIrZnVuY3Rpb24obil7bGV0IHQ9IiIsZT1uMyhuKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpKytdLG89aTxlLmxlbmd0aD9lW2krK106bnVsbCxzPWk8ZS5sZW5ndGg/ZVtpKytdOm51bGw7dCs9amIocj4+MiksdCs9amIoKDMmcik8PDR8KG51bGw9PT1vPzA6bz4+NCkpLHQrPW51bGw9PT1vPyI9IjpqYigoMTUmbyk8PDJ8KG51bGw9PT1zPzA6cz4+NikpLHQrPW51bGw9PT1vfHxudWxsPT09cz8iPSI6amIoNjMmcyl9cmV0dXJuIHR9KEpTT04uc3RyaW5naWZ5KHRoaXMsbnVsbCwwKSk6IiJ9fSh0KSxyPSExLG89KCk9PntyfHwoaS5hZGRTb3VyY2UodCwiICIpLmFkZE1hcHBpbmcoMCx0LDAsMCkscj0hMCl9O2ZvcihsZXQgcz0wO3M8ZTtzKyspaS5hZGRMaW5lKCksbygpO3JldHVybiB0aGlzLnNvdXJjZUxpbmVzLmZvckVhY2goKHMsYSk9PntpLmFkZExpbmUoKTtsZXQgbD1zLnNyY1NwYW5zLGM9cy5wYXJ0cyx1PXMuaW5kZW50KiIgICIubGVuZ3RoLGQ9MDtmb3IoO2Q8bC5sZW5ndGgmJiFsW2RdOyl1Kz1jW2RdLmxlbmd0aCxkKys7Zm9yKGQ8bC5sZW5ndGgmJjA9PT1hJiYwPT09dT9yPSEwOm8oKTtkPGwubGVuZ3RoOyl7bGV0IHA9bFtkXSxoPXAuc3RhcnQuZmlsZSxmPXAuc3RhcnQubGluZSxtPXAuc3RhcnQuY29sO2ZvcihpLmFkZFNvdXJjZShoLnVybCxoLmNvbnRlbnQpLmFkZE1hcHBpbmcodSxoLnVybCxmLG0pLHUrPWNbZF0ubGVuZ3RoLGQrKztkPGwubGVuZ3RoJiYocD09PWxbZF18fCFsW2RdKTspdSs9Y1tkXS5sZW5ndGgsZCsrfX0pLGl9c3Bhbk9mKHQsZSl7bGV0IGk9dGhpcy5fbGluZXNbdF07aWYoaSl7bGV0IHI9ZS1sOShpLmluZGVudCkubGVuZ3RoO2ZvcihsZXQgbz0wO288aS5wYXJ0cy5sZW5ndGg7bysrKXtsZXQgcz1pLnBhcnRzW29dO2lmKHMubGVuZ3RoPnIpcmV0dXJuIGkuc3JjU3BhbnNbb107ci09cy5sZW5ndGh9fXJldHVybiBudWxsfWdldCBzb3VyY2VMaW5lcygpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGgmJjA9PT10aGlzLl9saW5lc1t0aGlzLl9saW5lcy5sZW5ndGgtMV0ucGFydHMubGVuZ3RoP3RoaXMuX2xpbmVzLnNsaWNlKDAsLTEpOnRoaXMuX2xpbmVzfX0sdEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZXNjYXBlRG9sbGFySW5TdHJpbmdzPXR9cHJpbnRMZWFkaW5nQ29tbWVudHModCxlKXtpZih2b2lkIDAhPT10LmxlYWRpbmdDb21tZW50cylmb3IobGV0IGkgb2YgdC5sZWFkaW5nQ29tbWVudHMpaSBpbnN0YW5jZW9mIGIxP2UucHJpbnQodCxgLyoke2kudG9TdHJpbmcoKX0qL2AsaS50cmFpbGluZ05ld2xpbmUpOmkubXVsdGlsaW5lP2UucHJpbnQodCxgLyogJHtpLnRleHR9ICovYCxpLnRyYWlsaW5nTmV3bGluZSk6aS50ZXh0LnNwbGl0KCJcbiIpLmZvckVhY2gocj0+e2UucHJpbnRsbih0LGAvLyAke3J9YCl9KX12aXNpdEV4cHJlc3Npb25TdG10KHQsZSl7cmV0dXJuIHRoaXMucHJpbnRMZWFkaW5nQ29tbWVudHModCxlKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0UmV0dXJuU3RtdCh0LGUpe3JldHVybiB0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJyZXR1cm4gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50bG4odCwiOyIpLG51bGx9dmlzaXRJZlN0bXQodCxlKXt0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJpZiAoIiksdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIpIHsiKTtsZXQgaT1udWxsIT10LmZhbHNlQ2FzZSYmdC5mYWxzZUNhc2UubGVuZ3RoPjA7cmV0dXJuIHQudHJ1ZUNhc2UubGVuZ3RoPD0xJiYhaT8oZS5wcmludCh0LCIgIiksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLnJlbW92ZUVtcHR5TGFzdExpbmUoKSxlLnByaW50KHQsIiAiKSk6KGUucHJpbnRsbigpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLmRlY0luZGVudCgpLGkmJihlLnByaW50bG4odCwifSBlbHNlIHsiKSxlLmluY0luZGVudCgpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQuZmFsc2VDYXNlLGUpLGUuZGVjSW5kZW50KCkpKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRXcml0ZVZhckV4cHIodCxlKXtsZXQgaT1lLmxpbmVJc0VtcHR5KCk7cmV0dXJuIGl8fGUucHJpbnQodCwiKCIpLGUucHJpbnQodCxgJHt0Lm5hbWV9ID0gYCksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVLZXlFeHByKHQsZSl7bGV0IGk9ZS5saW5lSXNFbXB0eSgpO3JldHVybiBpfHxlLnByaW50KHQsIigiKSx0LnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiWyIpLHQuaW5kZXgudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJdID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVQcm9wRXhwcih0LGUpe2xldCBpPWUubGluZUlzRW1wdHkoKTtyZXR1cm4gaXx8ZS5wcmludCh0LCIoIiksdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsYC4ke3QubmFtZX0gPSBgKSx0LnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGl8fGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodCxlKXtyZXR1cm4gdC5mbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5hcmdzLGUsIiwiKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7dC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJgIit0LnRlbXBsYXRlLmVsZW1lbnRzWzBdLnJhd1RleHQpO2ZvcihsZXQgaT0xO2k8dC50ZW1wbGF0ZS5lbGVtZW50cy5sZW5ndGg7aSsrKWUucHJpbnQodCwiJHsiKSx0LnRlbXBsYXRlLmV4cHJlc3Npb25zW2ktMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnRlbXBsYXRlLmVsZW1lbnRzW2ldLnJhd1RleHR9YCk7cmV0dXJuIGUucHJpbnQodCwiYCIpLG51bGx9dmlzaXRXcmFwcGVkTm9kZUV4cHIodCxlKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IGVtaXR0ZXIgY2Fubm90IHZpc2l0IFdyYXBwZWROb2RlRXhwci4iKX12aXNpdFR5cGVvZkV4cHIodCxlKXtlLnByaW50KHQsInR5cGVvZiAiKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9dmlzaXRSZWFkVmFyRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0SW5zdGFudGlhdGVFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwibmV3ICIpLHQuY2xhc3NFeHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiKCIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmFyZ3MsZSwiLCIpLGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRMaXRlcmFsRXhwcih0LGUpe2xldCBpPXQudmFsdWU7cmV0dXJuIGUucHJpbnQodCwic3RyaW5nIj09dHlwZW9mIGk/Y2YoaSx0aGlzLl9lc2NhcGVEb2xsYXJJblN0cmluZ3MpOmAke2l9YCksbnVsbH12aXNpdExvY2FsaXplZFN0cmluZyh0LGUpe2xldCBpPXQuc2VyaWFsaXplSTE4bkhlYWQoKTtlLnByaW50KHQsIiRsb2NhbGl6ZSBgIitpLnJhdyk7Zm9yKGxldCByPTE7cjx0Lm1lc3NhZ2VQYXJ0cy5sZW5ndGg7cisrKWUucHJpbnQodCwiJHsiKSx0LmV4cHJlc3Npb25zW3ItMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnNlcmlhbGl6ZUkxOG5UZW1wbGF0ZVBhcnQocikucmF3fWApO3JldHVybiBlLnByaW50KHQsImAiKSxudWxsfXZpc2l0Q29uZGl0aW9uYWxFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiKCIpLHQuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiPyAiKSx0LnRydWVDYXNlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiOiAiKSx0LmZhbHNlQ2FzZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0Tm90RXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIiEiKSx0LmNvbmRpdGlvbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxudWxsfXZpc2l0VW5hcnlPcGVyYXRvckV4cHIodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRvcil7Y2FzZSBwZi5QbHVzOmk9IisiO2JyZWFrO2Nhc2UgcGYuTWludXM6aT0iLSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiB0LnBhcmVucyYmZS5wcmludCh0LCIoIiksZS5wcmludCh0LGkpLHQuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSx0LnBhcmVucyYmZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEJpbmFyeU9wZXJhdG9yRXhwcih0LGUpe2xldCBpO3N3aXRjaCh0Lm9wZXJhdG9yKXtjYXNlIGhuLkVxdWFsczppPSI9PSI7YnJlYWs7Y2FzZSBobi5JZGVudGljYWw6aT0iPT09IjticmVhaztjYXNlIGhuLk5vdEVxdWFsczppPSIhPSI7YnJlYWs7Y2FzZSBobi5Ob3RJZGVudGljYWw6aT0iIT09IjticmVhaztjYXNlIGhuLkFuZDppPSImJiI7YnJlYWs7Y2FzZSBobi5CaXR3aXNlQW5kOmk9IiYiO2JyZWFrO2Nhc2UgaG4uT3I6aT0ifHwiO2JyZWFrO2Nhc2UgaG4uUGx1czppPSIrIjticmVhaztjYXNlIGhuLk1pbnVzOmk9Ii0iO2JyZWFrO2Nhc2UgaG4uRGl2aWRlOmk9Ii8iO2JyZWFrO2Nhc2UgaG4uTXVsdGlwbHk6aT0iKiI7YnJlYWs7Y2FzZSBobi5Nb2R1bG86aT0iJSI7YnJlYWs7Y2FzZSBobi5Mb3dlcjppPSI8IjticmVhaztjYXNlIGhuLkxvd2VyRXF1YWxzOmk9Ijw9IjticmVhaztjYXNlIGhuLkJpZ2dlcjppPSI+IjticmVhaztjYXNlIGhuLkJpZ2dlckVxdWFsczppPSI+PSI7YnJlYWs7Y2FzZSBobi5OdWxsaXNoQ29hbGVzY2U6aT0iPz8iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdC5wYXJlbnMmJmUucHJpbnQodCwiKCIpLHQubGhzLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgICR7aX0gYCksdC5yaHMudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksdC5wYXJlbnMmJmUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRSZWFkUHJvcEV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIi4iKSxlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0UmVhZEtleUV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIlsiKSx0LmluZGV4LnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiWyIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmVudHJpZXMsZSwiLCIpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsTWFwRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsInsiKSx0aGlzLnZpc2l0QWxsT2JqZWN0cyhpPT57ZS5wcmludCh0LGAke2NmKGkua2V5LHRoaXMuX2VzY2FwZURvbGxhckluU3RyaW5ncyxpLnF1b3RlZCl9OmApLGkudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9LHQuZW50cmllcyxlLCIsIiksZS5wcmludCh0LCJ9IiksbnVsbH12aXNpdENvbW1hRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5wYXJ0cyxlLCIsIiksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEFsbEV4cHJlc3Npb25zKHQsZSxpKXt0aGlzLnZpc2l0QWxsT2JqZWN0cyhyPT5yLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLHQsZSxpKX12aXNpdEFsbE9iamVjdHModCxlLGkscil7bGV0IG89ITE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspcz4wJiYoaS5saW5lTGVuZ3RoKCk+ODA/KGkucHJpbnQobnVsbCxyLCEwKSxvfHwoaS5pbmNJbmRlbnQoKSxpLmluY0luZGVudCgpLG89ITApKTppLnByaW50KG51bGwsciwhMSkpLHQoZVtzXSk7byYmKGkuZGVjSW5kZW50KCksaS5kZWNJbmRlbnQoKSl9dmlzaXRBbGxTdGF0ZW1lbnRzKHQsZSl7dC5mb3JFYWNoKGk9PmkudmlzaXRTdGF0ZW1lbnQodGhpcyxlKSl9fTtmdW5jdGlvbiBjZihuLHQsZT0hMCl7aWYobnVsbD09bilyZXR1cm4gbnVsbDtsZXQgaT1uLnJlcGxhY2UoV19lLCguLi5vKT0+IiQiPT1vWzBdP3Q/IlxcJCI6IiQiOiJcbiI9PW9bMF0/IlxcbiI6IlxyIj09b1swXT8iXFxyIjpgXFwke29bMF19YCk7cmV0dXJuIGV8fCFxX2UudGVzdChpKT9gJyR7aX0nYDppfWZ1bmN0aW9uIGw5KG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bjtlKyspdCs9IiAgIjtyZXR1cm4gdH1mdW5jdGlvbiBYMShuLHQpe2lmKDA9PT10KXJldHVybiBOYShuKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHQ7aSsrKWUucHVzaChWMCk7cmV0dXJuIE5hKG4sdm9pZCAwLGUpfWZ1bmN0aW9uIE1xKG4pe3JldHVybmBAJHtufWB9ZnVuY3Rpb24gWF9lKG4sdCl7bGV0IGU9Y2YodCwhMSwhMSk7cmV0dXJuIGUhPT10P2Ake259WyR7ZX1dYDpgJHtufS4ke3R9YH1mdW5jdGlvbiBTcShuLHQpe3JldHVybmBhbmltYXRpb25fJHtufV8ke3R9YH1mdW5jdGlvbiBhcyhuKXtsZXQgdD1uZXcgRG4obik7cmV0dXJue3ZhbHVlOnQsdHlwZTp0fX1mdW5jdGlvbiB1ZihuLHQpe2xldCBlPWNyKG4ubWFwKGk9PmkudmFsdWUpKTtyZXR1cm4gdD9PcyhbXSxbbmV3IHVvKGUpXSk6ZX1mdW5jdGlvbiBvMyhuLHQpe3JldHVybntleHByZXNzaW9uOm4sZm9yd2FyZFJlZjp0fX12YXIgZjA9KCgpPT57cmV0dXJuKG49ZjB8fChmMD17fSkpW24uQ2xhc3M9MF09IkNsYXNzIixuW24uRnVuY3Rpb249MV09IkZ1bmN0aW9uIixmMDt2YXIgbn0pKCksaWM9KCgpPT57cmV0dXJuKG49aWN8fChpYz17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5Db21wb25lbnQ9MV09IkNvbXBvbmVudCIsbltuLkluamVjdGFibGU9Ml09IkluamVjdGFibGUiLG5bbi5QaXBlPTNdPSJQaXBlIixuW24uTmdNb2R1bGU9NF09Ik5nTW9kdWxlIixpYzt2YXIgbn0pKCk7ZnVuY3Rpb24gYWYobil7bGV0IHQ9TWkoInQiKSxlPW51bGwsaT11OShuKT90Om5ldyBscihobi5Pcix0LG4uaW50ZXJuYWxUeXBlKSxyPW51bGw7bnVsbCE9PW4uZGVwcz8iaW52YWxpZCIhPT1uLmRlcHMmJihyPW5ldyBnZihpLGM5KG4uZGVwcyxuLnRhcmdldCkpKTooZT1NaShgXHUwMjc1JHtuLm5hbWV9X0Jhc2VGYWN0b3J5YCkscj1lLmNhbGxGbihbaV0pKTtsZXQgbz1bXSxzPW51bGw7ZnVuY3Rpb24gYShjKXtsZXQgdT1NaSgiciIpO28ucHVzaCh1LnNldChLTikudG9EZWNsU3RtdCgpKTtsZXQgZD1udWxsIT09cj91LnNldChyKS50b1N0bXQoKTp4bihLLmludmFsaWRGYWN0b3J5KS5jYWxsRm4oW10pLnRvU3RtdCgpO3JldHVybiBvLnB1c2gocjModCxbZF0sW3Uuc2V0KGMpLnRvU3RtdCgpXSkpLHV9aWYodTkobikpe2xldCBjPWM5KG4uZGVsZWdhdGVEZXBzLG4udGFyZ2V0KTtzPWEobmV3KG4uZGVsZWdhdGVUeXBlPT09ZjAuQ2xhc3M/Z2Y6dnApKG4uZGVsZWdhdGUsYykpfWVsc2Ugcz1mdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5leHByZXNzaW9ufShuKT9hKG4uZXhwcmVzc2lvbik6cjtpZihudWxsPT09cylvLnB1c2goeG4oSy5pbnZhbGlkRmFjdG9yeSkuY2FsbEZuKFtdKS50b1N0bXQoKSk7ZWxzZSBpZihudWxsIT09ZSl7bGV0IGM9eG4oSy5nZXRJbmhlcml0ZWRGYWN0b3J5KS5jYWxsRm4oW24uaW50ZXJuYWxUeXBlXSksdT1uZXcgbHIoaG4uT3IsZSxlLnNldChjKSk7by5wdXNoKG5ldyB1byh1LmNhbGxGbihbaV0pKSl9ZWxzZSBvLnB1c2gobmV3IHVvKHMpKTtsZXQgbD1PcyhbbmV3IFJzKCJ0IixWMCldLG8saWEsdm9pZCAwLGAke24ubmFtZX1fRmFjdG9yeWApO3JldHVybiBudWxsIT09ZSYmKGw9T3MoW10sW25ldyBhdShlLm5hbWUpLG5ldyB1byhsKV0pLmNhbGxGbihbXSx2b2lkIDAsITApKSx7ZXhwcmVzc2lvbjpsLHN0YXRlbWVudHM6W10sdHlwZTokX2Uobil9fWZ1bmN0aW9uICRfZShuKXtsZXQgdD1udWxsIT09bi5kZXBzJiYiaW52YWxpZCIhPT1uLmRlcHM/ZnVuY3Rpb24obil7bGV0IHQ9ITEsZT1uLm1hcChpPT57bGV0IHI9ZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIG51bGwhPT1uLmF0dHJpYnV0ZU5hbWVUeXBlJiZ0LnB1c2goe2tleToiYXR0cmlidXRlIix2YWx1ZTpuLmF0dHJpYnV0ZU5hbWVUeXBlLHF1b3RlZDohMX0pLG4ub3B0aW9uYWwmJnQucHVzaCh7a2V5OiJvcHRpb25hbCIsdmFsdWU6bnQoITApLHF1b3RlZDohMX0pLG4uaG9zdCYmdC5wdXNoKHtrZXk6Imhvc3QiLHZhbHVlOm50KCEwKSxxdW90ZWQ6ITF9KSxuLnNlbGYmJnQucHVzaCh7a2V5OiJzZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksbi5za2lwU2VsZiYmdC5wdXNoKHtrZXk6InNraXBTZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksdC5sZW5ndGg+MD9tbCh0KTpudWxsfShpKTtyZXR1cm4gbnVsbCE9PXI/KHQ9ITAscik6bnQobnVsbCl9KTtyZXR1cm4gdD9OYShjcihlKSk6ZGR9KG4uZGVwcyk6ZGQ7cmV0dXJuIE5hKHhuKEsuRmFjdG9yeURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KSx0XSkpfWZ1bmN0aW9uIGM5KG4sdCl7cmV0dXJuIG4ubWFwKChlLGkpPT5mdW5jdGlvbihuLHQsZSl7aWYobnVsbD09PW4udG9rZW4pcmV0dXJuIHhuKEsuaW52YWxpZEZhY3RvcnlEZXApLmNhbGxGbihbbnQoZSldKTtpZihudWxsPT09bi5hdHRyaWJ1dGVOYW1lVHlwZSl7bGV0IGk9MHwobi5zZWxmPzI6MCl8KG4uc2tpcFNlbGY/NDowKXwobi5ob3N0PzE6MCl8KG4ub3B0aW9uYWw/ODowKXwodD09PWljLlBpcGU/MTY6MCkscj0wIT09aXx8bi5vcHRpb25hbD9udChpKTpudWxsLG89W24udG9rZW5dO3ImJm8ucHVzaChyKTtsZXQgcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBpYy5Db21wb25lbnQ6Y2FzZSBpYy5EaXJlY3RpdmU6Y2FzZSBpYy5QaXBlOnJldHVybiBLLmRpcmVjdGl2ZUluamVjdDtkZWZhdWx0OnJldHVybiBLLmluamVjdH19KHQpO3JldHVybiB4bihzKS5jYWxsRm4obyl9cmV0dXJuIHhuKEsuaW5qZWN0QXR0cmlidXRlKS5jYWxsRm4oW24udG9rZW5dKX0oZSx0LGkpKX1mdW5jdGlvbiB1OShuKXtyZXR1cm4gdm9pZCAwIT09bi5kZWxlZ2F0ZVR5cGV9dmFyIHcwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzKX19LHV4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5pMThuPWl9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRCb3VuZFRleHQodGhpcyl9fSxkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy5pMThuPXN9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRUZXh0QXR0cmlidXRlKHRoaXMpfX0sTTA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuc2VjdXJpdHlDb250ZXh0PWksdGhpcy52YWx1ZT1yLHRoaXMudW5pdD1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMua2V5U3Bhbj1hLHRoaXMudmFsdWVTcGFuPWwsdGhpcy5pMThuPWN9c3RhdGljIGZyb21Cb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LGUpe2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBhdHRyaWJ1dGVzIGJ1dCB3YXMgbm90IGZvciAke3QubmFtZX06ICR7dC5zb3VyY2VTcGFufWApO3JldHVybiBuZXcgTTAodC5uYW1lLHQudHlwZSx0LnNlY3VyaXR5Q29udGV4dCx0LnZhbHVlLHQudW5pdCx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLGUpfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRBdHRyaWJ1dGUodGhpcyl9fSxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlcj1pLHRoaXMudGFyZ2V0PXIsdGhpcy5waGFzZT1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMuaGFuZGxlclNwYW49YSx0aGlzLmtleVNwYW49bH1zdGF0aWMgZnJvbVBhcnNlZEV2ZW50KHQpe2xldCBlPTA9PT10LnR5cGU/dC50YXJnZXRPclBoYXNlOm51bGwsaT0xPT09dC50eXBlP3QudGFyZ2V0T3JQaGFzZTpudWxsO2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBldmVudCBidXQgd2FzIG5vdCBmb3IgJHt0Lm5hbWV9OiAke3Quc291cmNlU3Bhbn1gKTtyZXR1cm4gbmV3IFMwKHQubmFtZSx0LnR5cGUsdC5oYW5kbGVyLGUsaSx0LnNvdXJjZVNwYW4sdC5oYW5kbGVyU3Bhbix0LmtleVNwYW4pfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRFdmVudCh0aGlzKX19LEUwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMubmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy5jaGlsZHJlbj1vLHRoaXMucmVmZXJlbmNlcz1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWMsdGhpcy5pMThuPXV9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRFbGVtZW50KHRoaXMpfX0sWWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMudGFnTmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy50ZW1wbGF0ZUF0dHJzPW8sdGhpcy5jaGlsZHJlbj1zLHRoaXMucmVmZXJlbmNlcz1hLHRoaXMudmFyaWFibGVzPWwsdGhpcy5zb3VyY2VTcGFuPWMsdGhpcy5zdGFydFNvdXJjZVNwYW49dSx0aGlzLmVuZFNvdXJjZVNwYW49ZCx0aGlzLmkxOG49cH12aXNpdCh0KXtyZXR1cm4gdC52aXNpdFRlbXBsYXRlKHRoaXMpfX0sdzE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5rZXlTcGFuPXIsdGhpcy52YWx1ZVNwYW49b312aXNpdCh0KXtyZXR1cm4gdC52aXNpdFZhcmlhYmxlKHRoaXMpfX0sTTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy52YXJzPXQsdGhpcy5wbGFjZWhvbGRlcnM9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmkxOG49cn12aXNpdCh0KXtyZXR1cm4gdC52aXNpdEljdSh0aGlzKX19O2Z1bmN0aW9uIGQ5KG4sdCl7bGV0IGU9W107aWYobi52aXNpdClmb3IobGV0IGkgb2YgdCluLnZpc2l0KGkpfHxpLnZpc2l0KG4pO2Vsc2UgZm9yKGxldCBpIG9mIHQpe2xldCByPWkudmlzaXQobik7ciYmZS5wdXNoKHIpfXJldHVybiBlfXZhciBpdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5ub2Rlcz10LHRoaXMucGxhY2Vob2xkZXJzPWUsdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZT1pLHRoaXMubWVhbmluZz1yLHRoaXMuZGVzY3JpcHRpb249byx0aGlzLmN1c3RvbUlkPXMsdGhpcy5pZD10aGlzLmN1c3RvbUlkLHRoaXMubGVnYWN5SWRzPVtdLHRoaXMubWVzc2FnZVN0cmluZz1mdW5jdGlvbihuKXtsZXQgdD1uZXcgc0w7cmV0dXJuIG4ubWFwKGk9PmkudmlzaXQodCkpLmpvaW4oIiIpfSh0aGlzLm5vZGVzKSx0aGlzLnNvdXJjZXM9dC5sZW5ndGg/W3tmaWxlUGF0aDp0WzBdLnNvdXJjZVNwYW4uc3RhcnQuZmlsZS51cmwsc3RhcnRMaW5lOnRbMF0uc291cmNlU3Bhbi5zdGFydC5saW5lKzEsc3RhcnRDb2w6dFswXS5zb3VyY2VTcGFuLnN0YXJ0LmNvbCsxLGVuZExpbmU6dFt0Lmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZC5saW5lKzEsZW5kQ29sOnRbMF0uc291cmNlU3Bhbi5zdGFydC5jb2wrMX1dOltdfX0sbDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRleHQodGhpcyxlKX19LGJmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGlsZHJlbj10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb250YWluZXIodGhpcyxlKX19LFMxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1lLHRoaXMuY2FzZXM9aSx0aGlzLnNvdXJjZVNwYW49cn12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1KHRoaXMsZSl9fSxFMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52YWx1ZT10LHRoaXMubmFtZT1lLHRoaXMuc291cmNlU3Bhbj1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRQbGFjZWhvbGRlcih0aGlzLGUpfX0sVDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnNvdXJjZVNwYW49aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1UGxhY2Vob2xkZXIodGhpcyxlKX19LHNMPWNsYXNze3Zpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7bGV0IGU9T2JqZWN0LmtleXModC5jYXNlcykubWFwKGk9PmAke2l9IHske3QuY2FzZXNbaV0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb25QbGFjZWhvbGRlcn0sICR7dC50eXBlfSwgJHtlLmpvaW4oIiAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe2xldCBlPXQuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiIpO3JldHVybmB7JCR7dC5zdGFydE5hbWV9fSR7ZX17JCR7dC5jbG9zZU5hbWV9fWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm5geyQke3QubmFtZX19YH12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3JldHVybmB7JCR7dC5uYW1lfX1gfX07bmV3IGNsYXNze3Zpc2l0VGFnKHQpe2xldCBlPXRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyk7aWYoMD09dC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuYDwke3QubmFtZX0ke2V9Lz5gO2xldCBpPXQuY2hpbGRyZW4ubWFwKHI9PnIudmlzaXQodGhpcykpO3JldHVybmA8JHt0Lm5hbWV9JHtlfT4ke2kuam9pbigiIil9PC8ke3QubmFtZX0+YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXREZWNsYXJhdGlvbih0KXtyZXR1cm5gPD94bWwke3RoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyl9ID8+YH1fc2VyaWFsaXplQXR0cmlidXRlcyh0KXtsZXQgZT1PYmplY3Qua2V5cyh0KS5tYXAoaT0+YCR7aX09IiR7dFtpXX0iYCkuam9pbigiICIpO3JldHVybiBlLmxlbmd0aD4wPyIgIitlOiIifXZpc2l0RG9jdHlwZSh0KXtyZXR1cm5gPCFET0NUWVBFICR7dC5yb290VGFnfSBbXG4ke3QuZHRkfVxuXT5gfX07dmFyIGxMPSJpMThuLSI7ZnVuY3Rpb24gcHgobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBpdX1mdW5jdGlvbiBpMShuKXtyZXR1cm4gcHgobikmJjE9PT1uLm5vZGVzLmxlbmd0aCYmbi5ub2Rlc1swXWluc3RhbmNlb2YgUzF9ZnVuY3Rpb24gcHZlKG4pe3JldHVybiEhbi5pMThufWZ1bmN0aW9uIFRxKG4pe3JldHVybiBuLm5vZGVzWzBdfWZ1bmN0aW9uIFExKG4sdD0wKXtyZXR1cm5gXHVmZmZkJHtufSR7dD4wP2A6JHt0fWA6IiJ9XHVmZmZkYH1mdW5jdGlvbiBtdmUobj0wKXtsZXQgdD1uO3JldHVybigpPT50Kyt9ZnVuY3Rpb24gaDkobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+e3RbaV09bnQoZS5sZW5ndGg+MT9gWyR7ZS5qb2luKCJ8Iil9XWA6ZVswXSl9KSx0fWZ1bmN0aW9uIHUxKG4sdCwuLi5lKXtsZXQgaT1uLmdldCh0KXx8W107aS5wdXNoKC4uLmUpLG4uc2V0KHQsaSl9ZnVuY3Rpb24gRHEobix0PTAsZT0wKXtsZXQgaT10LHI9bmV3IE1hcCxvPW4gaW5zdGFuY2VvZiBpdT9uLm5vZGVzLmZpbmQocz0+cyBpbnN0YW5jZW9mIGJmKTpuO3JldHVybiBvJiZvLmNoaWxkcmVuLmZpbHRlcihzPT5zIGluc3RhbmNlb2YgRTEpLmZvckVhY2goKHMsYSk9PntsZXQgbD1RMShpK2EsZSk7dTEocixzLm5hbWUsbCl9KSxyfWZ1bmN0aW9uIHMzKG49e30sdCl7bGV0IGU9e307cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmT2JqZWN0LmtleXMobikuZm9yRWFjaChpPT5lW0Z4KGksdCldPW5baV0pLGV9ZnVuY3Rpb24gRngobix0PSEwKXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teQS1aMC05X10vZywiXyIpfShuKTtpZighdClyZXR1cm4gZTtsZXQgcixpPWUuc3BsaXQoIl8iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsvXlxkKyQvLnRlc3QoaVtpLmxlbmd0aC0xXSkmJihyPWkucG9wKCkpO2xldCBvPWkuc2hpZnQoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBpLmxlbmd0aCYmKG8rPWkubWFwKHM9PnMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKS5qb2luKCIiKSkscj9gJHtvfV8ke3J9YDpvfWZ1bmN0aW9uIGY5KG4pe3JldHVybmBNU0dfJHtufWAudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBndmUobil7cmV0dXJuIG5ldyBhdShuLm5hbWUsdm9pZCAwLGlhLHZvaWQgMCxuLnNvdXJjZVNwYW4pfXZhciBfdmU9L1stLl0vLGFjPSJjdHgiLE54PSJyZiIsQXE9InJlc3RvcmVkQ3R4IixDdmU9bmV3IFNldChbSy5lbGVtZW50LEsuZWxlbWVudFN0YXJ0LEsuZWxlbWVudEVuZCxLLmVsZW1lbnRDb250YWluZXIsSy5lbGVtZW50Q29udGFpbmVyU3RhcnQsSy5lbGVtZW50Q29udGFpbmVyRW5kLEsuaTE4bkV4cCxLLmxpc3RlbmVyLEsuY2xhc3NQcm9wLEsuc3ludGhldGljSG9zdExpc3RlbmVyLEsuaG9zdFByb3BlcnR5LEsuc3ludGhldGljSG9zdFByb3BlcnR5LEsucHJvcGVydHksSy5wcm9wZXJ0eUludGVycG9sYXRlMSxLLnByb3BlcnR5SW50ZXJwb2xhdGUyLEsucHJvcGVydHlJbnRlcnBvbGF0ZTMsSy5wcm9wZXJ0eUludGVycG9sYXRlNCxLLnByb3BlcnR5SW50ZXJwb2xhdGU1LEsucHJvcGVydHlJbnRlcnBvbGF0ZTYsSy5wcm9wZXJ0eUludGVycG9sYXRlNyxLLnByb3BlcnR5SW50ZXJwb2xhdGU4LEsucHJvcGVydHlJbnRlcnBvbGF0ZVYsSy5hdHRyaWJ1dGUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTEsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTIsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTMsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTYsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTcsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTgsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVYsSy5zdHlsZVByb3AsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTEsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTIsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTMsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTQsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTUsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTYsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTcsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTgsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZVYsSy50ZXh0SW50ZXJwb2xhdGUsSy50ZXh0SW50ZXJwb2xhdGUxLEsudGV4dEludGVycG9sYXRlMixLLnRleHRJbnRlcnBvbGF0ZTMsSy50ZXh0SW50ZXJwb2xhdGU0LEsudGV4dEludGVycG9sYXRlNSxLLnRleHRJbnRlcnBvbGF0ZTYsSy50ZXh0SW50ZXJwb2xhdGU3LEsudGV4dEludGVycG9sYXRlOCxLLnRleHRJbnRlcnBvbGF0ZVZdKTtmdW5jdGlvbiB4ZihuLHQsZSl7cmV0dXJuIHhuKHQsbnVsbCxuKS5jYWxsRm4oZSxuKX1mdW5jdGlvbiBJcShuLHQpe2xldCBlPW51bGw7cmV0dXJuKCk9PihlfHwobi5wdXNoKG5ldyBhdSgiX3QiLHZvaWQgMCxWMCkpLGU9TWkodCkpLGUpfWZ1bmN0aW9uIEhiKG4pe3Rocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogVmlzaXRvciAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZG9lc24ndCBoYW5kbGUgJHtuLmNvbnN0cnVjdG9yLm5hbWV9YCl9ZnVuY3Rpb24gcnUobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/Y3Iobi5tYXAocnUpKTpudChuLGlhKX1mdW5jdGlvbiBtOShuLHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5sZW5ndGg+MD9mdW5jdGlvbihuLHQpe3JldHVybiBtbChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5tYXAoZT0+e2xldCByLG8scyxhLGk9bltlXTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT8oW28scl09aSxzPWUsYT1vIT09cik6KHM9cj1lLG89aSxhPSExKSx7a2V5OnMscXVvdGVkOl92ZS50ZXN0KHMpLHZhbHVlOnQmJmE/Y3IoW3J1KG8pLHJ1KHIpXSk6cnUobyl9fSkpfShuLHQpOm51bGx9ZnVuY3Rpb24gU04obil7Zm9yKDt4cShuW24ubGVuZ3RoLTFdKTspbi5wb3AoKTtyZXR1cm4gbn1mdW5jdGlvbiBNdmUobix0KXtpZihBcnJheS5pc0FycmF5KG4ucHJlZGljYXRlKSl7bGV0IGU9W107cmV0dXJuIG4ucHJlZGljYXRlLmZvckVhY2goaT0+e2xldCByPWkuc3BsaXQoIiwiKS5tYXAobz0+bnQoby50cmltKCkpKTtlLnB1c2goLi4ucil9KSx0LmdldENvbnN0TGl0ZXJhbChjcihlKSwhMCl9c3dpdGNoKG4ucHJlZGljYXRlLmZvcndhcmRSZWYpe2Nhc2UgMDpjYXNlIDI6cmV0dXJuIG4ucHJlZGljYXRlLmV4cHJlc3Npb247Y2FzZSAxOnJldHVybiB4bihLLnJlc29sdmVGb3J3YXJkUmVmKS5jYWxsRm4oW24ucHJlZGljYXRlLmV4cHJlc3Npb25dKX19dmFyIHlwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZXM9W119c2V0KHQsZSl7ZSYmdGhpcy52YWx1ZXMucHVzaCh7a2V5OnQsdmFsdWU6ZSxxdW90ZWQ6ITF9KX10b0xpdGVyYWxNYXAoKXtyZXR1cm4gbWwodGhpcy52YWx1ZXMpfX07ZnVuY3Rpb24gQWYobil7bGV0e2V4cHJlc3Npb25zOnQsc3RyaW5nczplfT1uO3JldHVybiAxPT09dC5sZW5ndGgmJjI9PT1lLmxlbmd0aCYmIiI9PT1lWzBdJiYiIj09PWVbMV0/MTp0Lmxlbmd0aCtlLmxlbmd0aH1mdW5jdGlvbiBUMShuKXtsZXQgdD1bXSxlPW51bGwsaT1udWxsLHI9MDtmb3IobGV0IG8gb2Ygbil7bGV0IHM9KCJmdW5jdGlvbiI9PXR5cGVvZiBvLnBhcmFtc09yRm4/by5wYXJhbXNPckZuKCk6by5wYXJhbXNPckZuKT8/W10sYT1BcnJheS5pc0FycmF5KHMpP3M6W3NdO3I8NTAwJiZpPT09by5yZWZlcmVuY2UmJkN2ZS5oYXMoaSk/KGU9ZS5jYWxsRm4oYSxlLnNvdXJjZVNwYW4pLHIrKyk6KG51bGwhPT1lJiZ0LnB1c2goZS50b1N0bXQoKSksZT14ZihvLnNwYW4sby5yZWZlcmVuY2UsYSksaT1vLnJlZmVyZW5jZSxyPTApfXJldHVybiBudWxsIT09ZSYmdC5wdXNoKGUudG9TdG10KCkpLHR9ZnVuY3Rpb24gZzkobix0KXtsZXQgZT1udWxsLGk9e25hbWU6bi5uYW1lLHR5cGU6bi50eXBlLGludGVybmFsVHlwZTpuLmludGVybmFsVHlwZSx0eXBlQXJndW1lbnRDb3VudDpuLnR5cGVBcmd1bWVudENvdW50LGRlcHM6W10sdGFyZ2V0OmljLkluamVjdGFibGV9O2lmKHZvaWQgMCE9PW4udXNlQ2xhc3Mpe2xldCBsLGE9bi51c2VDbGFzcy5leHByZXNzaW9uLmlzRXF1aXZhbGVudChuLmludGVybmFsVHlwZSk7dm9pZCAwIT09bi5kZXBzJiYobD1uLmRlcHMpLGU9dm9pZCAwIT09bD9hZih7Li4uaSxkZWxlZ2F0ZTpuLnVzZUNsYXNzLmV4cHJlc3Npb24sZGVsZWdhdGVEZXBzOmwsZGVsZWdhdGVUeXBlOmYwLkNsYXNzfSk6YT9hZihpKTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLnVzZUNsYXNzLmV4cHJlc3Npb24sdCl9fWVsc2UgZT12b2lkIDAhPT1uLnVzZUZhY3Rvcnk/dm9pZCAwIT09bi5kZXBzP2FmKHsuLi5pLGRlbGVnYXRlOm4udXNlRmFjdG9yeSxkZWxlZ2F0ZURlcHM6bi5kZXBzfHxbXSxkZWxlZ2F0ZVR5cGU6ZjAuRnVuY3Rpb259KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOk9zKFtdLFtuZXcgdW8obi51c2VGYWN0b3J5LmNhbGxGbihbXSkpXSl9OnZvaWQgMCE9PW4udXNlVmFsdWU/YWYoey4uLmksZXhwcmVzc2lvbjpuLnVzZVZhbHVlLmV4cHJlc3Npb259KTp2b2lkIDAhPT1uLnVzZUV4aXN0aW5nP2FmKHsuLi5pLGV4cHJlc3Npb246eG4oSy5pbmplY3QpLmNhbGxGbihbbi51c2VFeGlzdGluZy5leHByZXNzaW9uXSl9KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLmludGVybmFsVHlwZSx0KX07bGV0IHI9bi5pbnRlcm5hbFR5cGUsbz1uZXcgeXA7cmV0dXJuIG8uc2V0KCJ0b2tlbiIsciksby5zZXQoImZhY3RvcnkiLGUuZXhwcmVzc2lvbiksbnVsbCE9PW4ucHJvdmlkZWRJbi5leHByZXNzaW9uLnZhbHVlJiZvLnNldCgicHJvdmlkZWRJbiIsZnVuY3Rpb24oe2V4cHJlc3Npb246bixmb3J3YXJkUmVmOnR9KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gbjtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4bihLLmZvcndhcmRSZWYpLmNhbGxGbihbT3MoW10sW25ldyB1byhuKV0pXSl9KG4pfX0obi5wcm92aWRlZEluKSkse2V4cHJlc3Npb246eG4oSy5cdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlKS5jYWxsRm4oW28udG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksdHlwZTpTdmUobiksc3RhdGVtZW50czplLnN0YXRlbWVudHN9fWZ1bmN0aW9uIFN2ZShuKXtyZXR1cm4gbmV3IHNjKHhuKEsuSW5qZWN0YWJsZURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KV0pKX1mdW5jdGlvbiBfOShuLHQsZSl7cmV0dXJuIG4ubm9kZT09PXQubm9kZT90LnByb3AoIlx1MDI3NWZhYyIpOnY5KGU/eG4oSy5yZXNvbHZlRm9yd2FyZFJlZikuY2FsbEZuKFt0XSk6dCl9ZnVuY3Rpb24gdjkobil7cmV0dXJuIE9zKFtuZXcgUnMoInQiLFYwKV0sW25ldyB1byhuLnByb3AoIlx1MDI3NWZhYyIpLmNhbGxGbihbTWkoInQiKV0pKV0pfXZhciBFdmU9Wy9eXHMqJC8sL1s8Pl0vLC9eW3t9XSQvLC8mKCN8W2Etel0pL2ksL15cL1wvL10sRDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX1zdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiB0PyhmdW5jdGlvbihuLHQpe2lmKG51bGwhPXQmJighQXJyYXkuaXNBcnJheSh0KXx8MiE9dC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgJ2ludGVycG9sYXRpb24nIHRvIGJlIGFuIGFycmF5LCBbc3RhcnQsIGVuZF0uIik7aWYobnVsbCE9dCl7bGV0IGU9dFswXSxpPXRbMV07RXZlLmZvckVhY2gocj0+e2lmKHIudGVzdChlKXx8ci50ZXN0KGkpKXRocm93IG5ldyBFcnJvcihgWycke2V9JywgJyR7aX0nXSBjb250YWlucyB1bnVzYWJsZSBpbnRlcnBvbGF0aW9uIHN5bWJvbC5gKX0pfX0oMCx0KSxuZXcgRDAodFswXSx0WzFdKSk6JGN9fSwkYz1uZXcgRDAoInt7IiwifX0iKSxmcD0xMjMsdHU9MTI1O2Z1bmN0aW9uIGYzKG4pe3JldHVybiBuPj05JiZuPD0zMnx8MTYwPT1ufWZ1bmN0aW9uIHBwKG4pe3JldHVybiA0ODw9biYmbjw9NTd9ZnVuY3Rpb24gbTMobil7cmV0dXJuIG4+PTk3JiZuPD0xMjJ8fG4+PTY1JiZuPD05MH1mdW5jdGlvbiBXcShuKXtyZXR1cm4gMTA9PT1ufHwxMz09PW59ZnVuY3Rpb24geDkobil7cmV0dXJuIDQ4PD1uJiZuPD01NX1mdW5jdGlvbiB1TChuKXtyZXR1cm4gMzk9PT1ufHwzND09PW58fDk2PT09bn12YXIgd2Y9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5maWxlPXQsdGhpcy5vZmZzZXQ9ZSx0aGlzLmxpbmU9aSx0aGlzLmNvbD1yfXRvU3RyaW5nKCl7cmV0dXJuIG51bGwhPXRoaXMub2Zmc2V0P2Ake3RoaXMuZmlsZS51cmx9QCR7dGhpcy5saW5lfToke3RoaXMuY29sfWA6dGhpcy5maWxlLnVybH1tb3ZlQnkodCl7bGV0IGU9dGhpcy5maWxlLmNvbnRlbnQsaT1lLmxlbmd0aCxyPXRoaXMub2Zmc2V0LG89dGhpcy5saW5lLHM9dGhpcy5jb2w7Zm9yKDtyPjAmJnQ8MDspaWYoci0tLHQrKywxMD09ZS5jaGFyQ29kZUF0KHIpKXtvLS07bGV0IGw9ZS5zdWJzdHJpbmcoMCxyLTEpLmxhc3RJbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoMTApKTtzPWw+MD9yLWw6cn1lbHNlIHMtLTtmb3IoO3I8aSYmdD4wOyl7bGV0IGE9ZS5jaGFyQ29kZUF0KHIpO3IrKyx0LS0sMTA9PWE/KG8rKyxzPTApOnMrK31yZXR1cm4gbmV3IHdmKHRoaXMuZmlsZSxyLG8scyl9Z2V0Q29udGV4dCh0LGUpe2xldCBpPXRoaXMuZmlsZS5jb250ZW50LHI9dGhpcy5vZmZzZXQ7aWYobnVsbCE9cil7cj5pLmxlbmd0aC0xJiYocj1pLmxlbmd0aC0xKTtsZXQgbz1yLHM9MCxhPTA7Zm9yKDtzPHQmJnI+MCYmKHItLSxzKyssIlxuIiE9aVtyXXx8KythIT1lKTspO2ZvcihzPTAsYT0wO3M8dCYmbzxpLmxlbmd0aC0xJiYobysrLHMrKywiXG4iIT1pW29dfHwrK2EhPWUpOyk7cmV0dXJue2JlZm9yZTppLnN1YnN0cmluZyhyLHRoaXMub2Zmc2V0KSxhZnRlcjppLnN1YnN0cmluZyh0aGlzLm9mZnNldCxvKzEpfX1yZXR1cm4gbnVsbH19LEkxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb250ZW50PXQsdGhpcy51cmw9ZX19LFRvPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPXQscj1udWxsKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZSx0aGlzLmZ1bGxTdGFydD1pLHRoaXMuZGV0YWlscz1yfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc3RhcnQuZmlsZS5jb250ZW50LnN1YnN0cmluZyh0aGlzLnN0YXJ0Lm9mZnNldCx0aGlzLmVuZC5vZmZzZXQpfX0sbnU9KCgpPT57cmV0dXJuKG49bnV8fChudT17fSkpW24uV0FSTklORz0wXT0iV0FSTklORyIsbltuLkVSUk9SPTFdPSJFUlJPUiIsbnU7dmFyIG59KSgpLE1mPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLnNwYW49dCx0aGlzLm1zZz1lLHRoaXMubGV2ZWw9aX1jb250ZXh0dWFsTWVzc2FnZSgpe2xldCB0PXRoaXMuc3Bhbi5zdGFydC5nZXRDb250ZXh0KDEwMCwzKTtyZXR1cm4gdD9gJHt0aGlzLm1zZ30gKCIke3QuYmVmb3JlfVske251W3RoaXMubGV2ZWxdfSAtPl0ke3QuYWZ0ZXJ9IilgOnRoaXMubXNnfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5zcGFuLmRldGFpbHM/YCwgJHt0aGlzLnNwYW4uZGV0YWlsc31gOiIiO3JldHVybmAke3RoaXMuY29udGV4dHVhbE1lc3NhZ2UoKX06ICR7dGhpcy5zcGFuLnN0YXJ0fSR7dH1gfX0sVXZlPTA7ZnVuY3Rpb24gbTAobil7cmV0dXJuIG4ucmVwbGFjZSgvXFcvZywiXyIpfXZhciByMSxDOT0nKHRoaXMmJnRoaXMuX19tYWtlVGVtcGxhdGVPYmplY3R8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0pJyxkTD1jbGFzcyBleHRlbmRzIHRMe2NvbnN0cnVjdG9yKCl7c3VwZXIoITEpfXZpc2l0V3JhcHBlZE5vZGVFeHByKHQsZSl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW1pdCBhIFdyYXBwZWROb2RlRXhwciBpbiBKYXZhc2NyaXB0LiIpfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gZS5wcmludCh0LGB2YXIgJHt0Lm5hbWV9YCksdC52YWx1ZSYmKGUucHJpbnQodCwiID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7bGV0IGk9dC50ZW1wbGF0ZS5lbGVtZW50cztyZXR1cm4gdC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGAoJHtDOX0oYCksZS5wcmludCh0LGBbJHtpLm1hcChyPT5jZihyLnRleHQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXdUZXh0LCExKSkuam9pbigiLCAiKX1dKWApLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMuZm9yRWFjaChyPT57ZS5wcmludCh0LCIsICIpLHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9KSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0RnVuY3Rpb25FeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCxgZnVuY3Rpb24ke3QubmFtZT8iICIrdC5uYW1lOiIifShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50KHQsIn0iKSxudWxsfXZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpe3JldHVybiBlLnByaW50KHQsYGZ1bmN0aW9uICR7dC5uYW1lfShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRMb2NhbGl6ZWRTdHJpbmcodCxlKXtlLnByaW50KHQsYCRsb2NhbGl6ZSgke0M5fShgKTtsZXQgaT1bdC5zZXJpYWxpemVJMThuSGVhZCgpXTtmb3IobGV0IHI9MTtyPHQubWVzc2FnZVBhcnRzLmxlbmd0aDtyKyspaS5wdXNoKHQuc2VyaWFsaXplSTE4blRlbXBsYXRlUGFydChyKSk7cmV0dXJuIGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5jb29rZWQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXcsITEpKS5qb2luKCIsICIpfV0pYCksdC5leHByZXNzaW9ucy5mb3JFYWNoKHI9PntlLnByaW50KHQsIiwgIiksci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX0pLGUucHJpbnQodCwiKSIpLG51bGx9X3Zpc2l0UGFyYW1zKHQsZSl7dGhpcy52aXNpdEFsbE9iamVjdHMoaT0+ZS5wcmludChudWxsLGkubmFtZSksdCxlLCIsIil9fTtmdW5jdGlvbiB3OSguLi5uKXtpZighcDAudHJ1c3RlZFR5cGVzKXJldHVybiBuZXcgRnVuY3Rpb24oLi4ubik7bGV0IGk9YChmdW5jdGlvbiBhbm9ueW1vdXMoJHtuLnNsaWNlKDAsLTEpLmpvaW4oIiwiKX1cbikgeyAke25bbi5sZW5ndGgtMV19XG59KWAscj1wMC5ldmFsKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PXIxJiYocjE9bnVsbCxwMC50cnVzdGVkVHlwZXMpKXRyeXtyMT1wMC50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1qaXQiLHtjcmVhdGVTY3JpcHQ6bj0+bn0pfWNhdGNoe31yZXR1cm4gcjF9KCk/LmNyZWF0ZVNjcmlwdChuKXx8bn0oaSkpO3JldHVybiB2b2lkIDA9PT1yLmJpbmQ/bmV3IEZ1bmN0aW9uKC4uLm4pOihyLnRvU3RyaW5nPSgpPT5pLHIuYmluZChwMCkpfXZhciBoTD1jbGFzcyBleHRlbmRzIGRMe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5yZWZSZXNvbHZlcj10LHRoaXMuX2V2YWxBcmdOYW1lcz1bXSx0aGlzLl9ldmFsQXJnVmFsdWVzPVtdLHRoaXMuX2V2YWxFeHBvcnRlZFZhcnM9W119Y3JlYXRlUmV0dXJuU3RtdCh0KXtuZXcgdW8obmV3IHgwKHRoaXMuX2V2YWxFeHBvcnRlZFZhcnMubWFwKGk9Pm5ldyB5MShpLE1pKGkpLCExKSkpKS52aXNpdFN0YXRlbWVudCh0aGlzLHQpfWdldEFyZ3MoKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPHRoaXMuX2V2YWxBcmdOYW1lcy5sZW5ndGg7ZSsrKXRbdGhpcy5fZXZhbEFyZ05hbWVzW2VdXT10aGlzLl9ldmFsQXJnVmFsdWVzW2VdO3JldHVybiB0fXZpc2l0RXh0ZXJuYWxFeHByKHQsZSl7cmV0dXJuIHRoaXMuX2VtaXRSZWZlcmVuY2VUb0V4dGVybmFsKHQsdGhpcy5yZWZSZXNvbHZlci5yZXNvbHZlRXh0ZXJuYWxSZWZlcmVuY2UodC52YWx1ZSksZSksbnVsbH12aXNpdFdyYXBwZWROb2RlRXhwcih0LGUpe3JldHVybiB0aGlzLl9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LHQubm9kZSxlKSxudWxsfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZVZhclN0bXQodCxlKX12aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpfV9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LGUsaSl7bGV0IHI9dGhpcy5fZXZhbEFyZ1ZhbHVlcy5pbmRleE9mKGUpO2lmKC0xPT09cil7cj10aGlzLl9ldmFsQXJnVmFsdWVzLmxlbmd0aCx0aGlzLl9ldmFsQXJnVmFsdWVzLnB1c2goZSk7bGV0IG89ZnVuY3Rpb24obil7aWYoIW58fCFuLnJlZmVyZW5jZSlyZXR1cm4gbnVsbDtsZXQgdD1uLnJlZmVyZW5jZTtpZih0Ll9fYW5vbnltb3VzVHlwZSlyZXR1cm4gdC5fX2Fub255bW91c1R5cGU7aWYodC5fX2ZvcndhcmRfcmVmX18pcmV0dXJuIl9fZm9yd2FyZF9yZWZfXyI7bGV0IGU9Z3EodCk7cmV0dXJuIGUuaW5kZXhPZigiKCIpPj0wPyhlPSJhbm9ueW1vdXNfIitVdmUrKyx0Ll9fYW5vbnltb3VzVHlwZT1lKTplPW0wKGUpLGV9KHtyZWZlcmVuY2U6ZX0pfHwidmFsIjt0aGlzLl9ldmFsQXJnTmFtZXMucHVzaChgaml0XyR7b31fJHtyfWApfWkucHJpbnQodCx0aGlzLl9ldmFsQXJnTmFtZXNbcl0pfX07ZnVuY3Rpb24gTTkobil7bGV0IHQ9bmV3IHlwO251bGwhPT1uLnByb3ZpZGVycyYmdC5zZXQoInByb3ZpZGVycyIsbi5wcm92aWRlcnMpLG4uaW1wb3J0cy5sZW5ndGg+MCYmdC5zZXQoImltcG9ydHMiLGNyKG4uaW1wb3J0cykpO2xldCBlPXhuKEsuZGVmaW5lSW5qZWN0b3IpLmNhbGxGbihbdC50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgc2MoeG4oSy5JbmplY3RvckRlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlLnR5cGUpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgZzA9KCgpPT57cmV0dXJuKG49ZzB8fChnMD17fSkpW24uSW5saW5lPTBdPSJJbmxpbmUiLG5bbi5TaWRlRWZmZWN0PTFdPSJTaWRlRWZmZWN0IixuW24uT21pdD0yXT0iT21pdCIsZzA7dmFyIG59KSgpO2Z1bmN0aW9uIFl2ZShuKXtsZXR7YWRqYWNlbnRUeXBlOnQsaW50ZXJuYWxUeXBlOmUsYm9vdHN0cmFwOmksZGVjbGFyYXRpb25zOnIsaW1wb3J0czpvLGV4cG9ydHM6cyxzY2hlbWFzOmEsY29udGFpbnNGb3J3YXJkRGVjbHM6bCxzZWxlY3RvclNjb3BlTW9kZTpjLGlkOnV9PW4sZD1bXSxwPW5ldyB5cDtpZihwLnNldCgidHlwZSIsZSksaS5sZW5ndGg+MCYmcC5zZXQoImJvb3RzdHJhcCIsdWYoaSxsKSksYz09PWcwLklubGluZSlyLmxlbmd0aD4wJiZwLnNldCgiZGVjbGFyYXRpb25zIix1ZihyLGwpKSxvLmxlbmd0aD4wJiZwLnNldCgiaW1wb3J0cyIsdWYobyxsKSkscy5sZW5ndGg+MCYmcC5zZXQoImV4cG9ydHMiLHVmKHMsbCkpO2Vsc2UgaWYoYz09PWcwLlNpZGVFZmZlY3Qpe2xldCBtPWZ1bmN0aW9uKG4pe2xldHthZGphY2VudFR5cGU6dCxkZWNsYXJhdGlvbnM6ZSxpbXBvcnRzOmksZXhwb3J0czpyLGNvbnRhaW5zRm9yd2FyZERlY2xzOm99PW4scz1uZXcgeXA7aWYoZS5sZW5ndGg+MCYmcy5zZXQoImRlY2xhcmF0aW9ucyIsdWYoZSxvKSksaS5sZW5ndGg+MCYmcy5zZXQoImltcG9ydHMiLHVmKGksbykpLHIubGVuZ3RoPjAmJnMuc2V0KCJleHBvcnRzIix1ZihyLG8pKSwwPT09T2JqZWN0LmtleXMocy52YWx1ZXMpLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgeTAoe25hbWU6Im5nSml0TW9kZSIsbW9kdWxlTmFtZTpudWxsfSksaT1uZXcgbHIoaG4uSWRlbnRpY2FsLG5ldyB2MChlKSxudCgidW5kZWZpbmVkIikpLHI9bmV3IGxyKGhuLk9yLGksZSx2b2lkIDAsdm9pZCAwLCEwKTtyZXR1cm4gbmV3IGxyKGhuLkFuZCxyLHQpfSgwLG4pfShuZXcgdnAoeG4oSy5zZXROZ01vZHVsZVNjb3BlKSxbdCxzLnRvTGl0ZXJhbE1hcCgpXSkpLGM9bmV3IF9mKFtdLFtsLnRvU3RtdCgpXSk7cmV0dXJuIG5ldyB2cChjLFtdKS50b1N0bXQoKX0obik7bnVsbCE9PW0mJmQucHVzaChtKX1udWxsIT09YSYmYS5sZW5ndGg+MCYmcC5zZXQoInNjaGVtYXMiLGNyKGEubWFwKG09Pm0udmFsdWUpKSksbnVsbCE9PXUmJihwLnNldCgiaWQiLHUpLGQucHVzaCh4bihLLnJlZ2lzdGVyTmdNb2R1bGVUeXBlKS5jYWxsRm4oW3QsdV0pLnRvU3RtdCgpKSk7bGV0IGg9eG4oSy5kZWZpbmVOZ01vZHVsZSkuY2FsbEZuKFtwLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGY9ZnVuY3Rpb24oe3R5cGU6bixkZWNsYXJhdGlvbnM6dCxleHBvcnRzOmUsaW1wb3J0czppLGluY2x1ZGVJbXBvcnRUeXBlczpyLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6b30pe3JldHVybiBuZXcgc2MoeG4oSy5OZ01vZHVsZURlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlKSxudWxsPT09bz9FTih0KTpadmUobykscj9FTihpKTpkZCxFTihlKV0pKX0obik7cmV0dXJue2V4cHJlc3Npb246aCx0eXBlOmYsc3RhdGVtZW50czpkfX1mdW5jdGlvbiBFTihuKXtsZXQgdD1uLm1hcChlPT5pMyhlLnR5cGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gWnZlKG4pe2xldCB0PW4ubWFwKGU9PmkzKGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gUzkobil7bGV0IHQ9W107dC5wdXNoKHtrZXk6Im5hbWUiLHZhbHVlOm50KG4ucGlwZU5hbWUpLHF1b3RlZDohMX0pLHQucHVzaCh7a2V5OiJ0eXBlIix2YWx1ZTpuLnR5cGUudmFsdWUscXVvdGVkOiExfSksdC5wdXNoKHtrZXk6InB1cmUiLHZhbHVlOm50KG4ucHVyZSkscXVvdGVkOiExfSksbi5pc1N0YW5kYWxvbmUmJnQucHVzaCh7a2V5OiJzdGFuZGFsb25lIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSk7bGV0IGU9eG4oSy5kZWZpbmVQaXBlKS5jYWxsRm4oW21sKHQpXSx2b2lkIDAsITApLGk9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBzYyh4bihLLlBpcGVEZWNsYXJhdGlvbixbWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbmV3IHNjKG5ldyBGYShuLnBpcGVOYW1lKSksbmV3IHNjKG5ldyBGYShuLmlzU3RhbmRhbG9uZSkpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgXzA9KCgpPT57cmV0dXJuKG49XzB8fChfMD17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5QaXBlPTFdPSJQaXBlIixuW24uTmdNb2R1bGU9Ml09Ik5nTW9kdWxlIixfMDt2YXIgbn0pKCksbXg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pbnB1dD1lLHRoaXMuZXJyTG9jYXRpb249aSx0aGlzLmN0eExvY2F0aW9uPXIsdGhpcy5tZXNzYWdlPWBQYXJzZXIgRXJyb3I6ICR7dH0gJHtpfSBbJHtlfV0gaW4gJHtyfWB9fSxTZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1lfXRvQWJzb2x1dGUodCl7cmV0dXJuIG5ldyBPYSh0K3RoaXMuc3RhcnQsdCt0aGlzLmVuZCl9fSxwbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3Bhbj10LHRoaXMuc291cmNlU3Bhbj1lfXRvU3RyaW5nKCl7cmV0dXJuIkFTVCJ9fSxBMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMubmFtZVNwYW49aX19LG5hPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe319LEVmPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0SW1wbGljaXRSZWNlaXZlcih0aGlzLGUpfX0sZ3g9Y2xhc3MgZXh0ZW5kcyBFZnt2aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRUaGlzUmVjZWl2ZXI/Lih0aGlzLGUpfX0sX3g9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0Q2hhaW4odGhpcyxlKX19LHZ4PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMuY29uZGl0aW9uPWksdGhpcy50cnVlRXhwPXIsdGhpcy5mYWxzZUV4cD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdENvbmRpdGlvbmFsKHRoaXMsZSl9fSxvdT1jbGFzcyBleHRlbmRzIEEwe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlLGkpLHRoaXMucmVjZWl2ZXI9cix0aGlzLm5hbWU9b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRQcm9wZXJ0eVJlYWQodGhpcyxlKX19LHl4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpKSx0aGlzLnJlY2VpdmVyPXIsdGhpcy5uYW1lPW8sdGhpcy52YWx1ZT1zfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByb3BlcnR5V3JpdGUodGhpcyxlKX19LGJ4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUsaSksdGhpcy5yZWNlaXZlcj1yLHRoaXMubmFtZT1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFNhZmVQcm9wZXJ0eVJlYWQodGhpcyxlKX19LEkwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRLZXllZFJlYWQodGhpcyxlKX19LFAwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlS2V5ZWRSZWFkKHRoaXMsZSl9fSx4eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cix0aGlzLnZhbHVlPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0S2V5ZWRXcml0ZSh0aGlzLGUpfX0sUjA9Y2xhc3MgZXh0ZW5kcyBBMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLHMpLHRoaXMuZXhwPWksdGhpcy5uYW1lPXIsdGhpcy5hcmdzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0UGlwZSh0aGlzLGUpfX0sSXM9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLnZhbHVlPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0aGlzLGUpfX0sTzA9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5KHRoaXMsZSl9fSxDeD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5rZXlzPWksdGhpcy52YWx1ZXM9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwKHRoaXMsZSl9fSxabz1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5zdHJpbmdzPWksdGhpcy5leHByZXNzaW9ucz1yfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEludGVycG9sYXRpb24odGhpcyxlKX19LGhsPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMub3BlcmF0aW9uPWksdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEJpbmFyeSh0aGlzLGUpfX0sY2M9Y2xhc3MgZXh0ZW5kcyBobHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcih0LGUsbyxzLGEpLHRoaXMub3BlcmF0b3I9aSx0aGlzLmV4cHI9cix0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy5vcGVyYXRpb249bnVsbH1zdGF0aWMgY3JlYXRlTWludXModCxlLGkpe3JldHVybiBuZXcgY2ModCxlLCItIixpLCItIixuZXcgSXModCxlLDApLGkpfXN0YXRpYyBjcmVhdGVQbHVzKHQsZSxpKXtyZXR1cm4gbmV3IGNjKHQsZSwiKyIsaSwiLSIsaSxuZXcgSXModCxlLDApKX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHZvaWQgMCE9PXQudmlzaXRVbmFyeT90LnZpc2l0VW5hcnkodGhpcyxlKTp0LnZpc2l0QmluYXJ5KHRoaXMsZSl9fSx3eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuZXhwcmVzc2lvbj1pfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByZWZpeE5vdCh0aGlzLGUpfX0sTXg9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb249aX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXROb25OdWxsQXNzZXJ0KHRoaXMsZSl9fSxicD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRDYWxsKHRoaXMsZSl9fSxrMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlQ2FsbCh0aGlzLGUpfX0sT2E9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX19LGV1PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihuZXcgU2YoMCxudWxsPT09ZT8wOmUubGVuZ3RoKSxuZXcgT2EocixudWxsPT09ZT9yOnIrZS5sZW5ndGgpKSx0aGlzLmFzdD10LHRoaXMuc291cmNlPWUsdGhpcy5sb2NhdGlvbj1pLHRoaXMuZXJyb3JzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0QVNUV2l0aFNvdXJjZT90LnZpc2l0QVNUV2l0aFNvdXJjZSh0aGlzLGUpOnRoaXMuYXN0LnZpc2l0KHQsZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZX0gaW4gJHt0aGlzLmxvY2F0aW9ufWB9fSxTeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fSxnTD1jbGFzc3t2aXNpdCh0LGUpe3QudmlzaXQodGhpcyxlKX12aXNpdFVuYXJ5KHQsZSl7dGhpcy52aXNpdCh0LmV4cHIsZSl9dmlzaXRCaW5hcnkodCxlKXt0aGlzLnZpc2l0KHQubGVmdCxlKSx0aGlzLnZpc2l0KHQucmlnaHQsZSl9dmlzaXRDaGFpbih0LGUpe3RoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7dGhpcy52aXNpdCh0LmNvbmRpdGlvbixlKSx0aGlzLnZpc2l0KHQudHJ1ZUV4cCxlKSx0aGlzLnZpc2l0KHQuZmFsc2VFeHAsZSl9dmlzaXRQaXBlKHQsZSl7dGhpcy52aXNpdCh0LmV4cCxlKSx0aGlzLnZpc2l0QWxsKHQuYXJncyxlKX12aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXt9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXt9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0S2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSksdGhpcy52aXNpdCh0LnZhbHVlLGUpfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0TGl0ZXJhbE1hcCh0LGUpe3RoaXMudmlzaXRBbGwodC52YWx1ZXMsZSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7fXZpc2l0UHJlZml4Tm90KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXROb25OdWxsQXNzZXJ0KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC52YWx1ZSxlKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRDYWxsKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXRBbGwodC5hcmdzLGUpfXZpc2l0U2FmZUNhbGwodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSksdGhpcy52aXNpdEFsbCh0LmFyZ3MsZSl9dmlzaXRBbGwodCxlKXtmb3IobGV0IGkgb2YgdCl0aGlzLnZpc2l0KGksZSl9fSxfTD1jbGFzc3t2aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdFRoaXNSZWNlaXZlcih0LGUpe3JldHVybiB0fXZpc2l0SW50ZXJwb2xhdGlvbih0LGUpe3JldHVybiBuZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7cmV0dXJuIG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQudmFsdWUpfXZpc2l0UHJvcGVydHlSZWFkKHQsZSl7cmV0dXJuIG5ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sdC5yZWNlaXZlci52aXNpdCh0aGlzKSx0Lm5hbWUpfXZpc2l0UHJvcGVydHlXcml0ZSh0LGUpe3JldHVybiBuZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0U2FmZVByb3BlcnR5UmVhZCh0LGUpe3JldHVybiBuZXcgYngodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgTzAodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpKX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IEN4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5rZXlzLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpKX12aXNpdFVuYXJ5KHQsZSl7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHIudmlzaXQodGhpcykpO2Nhc2UiLSI6cmV0dXJuIGNjLmNyZWF0ZU1pbnVzKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5leHByLnZpc2l0KHRoaXMpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biB1bmFyeSBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9fXZpc2l0QmluYXJ5KHQsZSl7cmV0dXJuIG5ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLHQubGVmdC52aXNpdCh0aGlzKSx0LnJpZ2h0LnZpc2l0KHRoaXMpKX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBuZXcgd3godC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBuZXcgTXgodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Q29uZGl0aW9uYWwodCxlKXtyZXR1cm4gbmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5jb25kaXRpb24udmlzaXQodGhpcyksdC50cnVlRXhwLnZpc2l0KHRoaXMpLHQuZmFsc2VFeHAudmlzaXQodGhpcykpfXZpc2l0UGlwZSh0LGUpe3JldHVybiBuZXcgUjAodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cC52aXNpdCh0aGlzKSx0Lm5hbWUsdGhpcy52aXNpdEFsbCh0LmFyZ3MpLHQubmFtZVNwYW4pfXZpc2l0S2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBJMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfXZpc2l0S2V5ZWRXcml0ZSh0LGUpe3JldHVybiBuZXcgeHgodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHQua2V5LnZpc2l0KHRoaXMpLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0Q2FsbCh0LGUpe3JldHVybiBuZXcgYnAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRTYWZlQ2FsbCh0LGUpe3JldHVybiBuZXcgazAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRBbGwodCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT10W2ldLnZpc2l0KHRoaXMpO3JldHVybiBlfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gbmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBQMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfX0sdkw9Y2xhc3N7dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIHR9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdEludGVycG9sYXRpb24odCxlKXtsZXQgaT10aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpO3JldHVybiBpIT09dC5leHByZXNzaW9ucz9uZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsaSk6dH12aXNpdExpdGVyYWxQcmltaXRpdmUodCxlKXtyZXR1cm4gdH12aXNpdFByb3BlcnR5UmVhZCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyP25ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4saSx0Lm5hbWUpOnR9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKSxyPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC52YWx1ZT9uZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLGksdC5uYW1lLHIpOnR9dmlzaXRTYWZlUHJvcGVydHlSZWFkKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQucmVjZWl2ZXI/bmV3IGJ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixpLHQubmFtZSk6dH12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyk7cmV0dXJuIGkhPT10LmV4cHJlc3Npb25zP25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpOnR9dmlzaXRMaXRlcmFsTWFwKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LnZhbHVlcyk7cmV0dXJuIGkhPT10LnZhbHVlcz9uZXcgQ3godC5zcGFuLHQuc291cmNlU3Bhbix0LmtleXMsaSk6dH12aXNpdFVuYXJ5KHQsZSl7bGV0IGk9dC5leHByLnZpc2l0KHRoaXMpO2lmKGkhPT10LmV4cHIpc3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3BhbixpKTtjYXNlIi0iOnJldHVybiBjYy5jcmVhdGVNaW51cyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHVuYXJ5IG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdH12aXNpdEJpbmFyeSh0LGUpe2xldCBpPXQubGVmdC52aXNpdCh0aGlzKSxyPXQucmlnaHQudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmxlZnR8fHIhPT10LnJpZ2h0P25ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLGkscik6dH12aXNpdFByZWZpeE5vdCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgd3godC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgTXgodC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Q29uZGl0aW9uYWwodCxlKXtsZXQgaT10LmNvbmRpdGlvbi52aXNpdCh0aGlzKSxyPXQudHJ1ZUV4cC52aXNpdCh0aGlzKSxvPXQuZmFsc2VFeHAudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmNvbmRpdGlvbnx8ciE9PXQudHJ1ZUV4cHx8byE9PXQuZmFsc2VFeHA/bmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyLG8pOnR9dmlzaXRQaXBlKHQsZSl7bGV0IGk9dC5leHAudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LmV4cHx8ciE9PXQuYXJncz9uZXcgUjAodC5zcGFuLHQuc291cmNlU3BhbixpLHQubmFtZSxyLHQubmFtZVNwYW4pOnR9dmlzaXRLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IEkwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fXZpc2l0S2V5ZWRXcml0ZSh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10LmtleS52aXNpdCh0aGlzKSxvPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXl8fG8hPT10LnZhbHVlP25ldyB4eCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscixvKTp0fXZpc2l0QWxsKHQpe2xldCBlPVtdLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3Ipe2xldCBvPXRbcl0scz1vLnZpc2l0KHRoaXMpO2Vbcl09cyxpPWl8fHMhPT1vfXJldHVybiBpP2U6dH12aXNpdENoYWluKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbnM/bmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4saSk6dH12aXNpdENhbGwodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MpO3JldHVybiBpIT09dC5yZWNlaXZlcnx8ciE9PXQuYXJncz9uZXcgYnAodC5zcGFuLHQuc291cmNlU3BhbixpLHIsdC5hcmd1bWVudFNwYW4pOnR9dmlzaXRTYWZlQ2FsbCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5hcmdzP25ldyBrMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscix0LmFyZ3VtZW50U3Bhbik6dH12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IFAwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fX0sUWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3RoaXMubmFtZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMudHlwZT1pLHRoaXMuc291cmNlU3Bhbj1yLHRoaXMua2V5U3Bhbj1vLHRoaXMudmFsdWVTcGFuPXMsdGhpcy5pc0xpdGVyYWw9dGhpcy50eXBlPT09Z3AuTElURVJBTF9BVFRSLHRoaXMuaXNBbmltYXRpb249dGhpcy50eXBlPT09Z3AuQU5JTUFUSU9OfX0sZ3A9KCgpPT57cmV0dXJuKG49Z3B8fChncD17fSkpW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkxJVEVSQUxfQVRUUj0xXT0iTElURVJBTF9BVFRSIixuW24uQU5JTUFUSU9OPTJdPSJBTklNQVRJT04iLGdwO3ZhciBufSkoKSxQMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLm5hbWU9dCx0aGlzLnRhcmdldE9yUGhhc2U9ZSx0aGlzLnR5cGU9aSx0aGlzLmhhbmRsZXI9cix0aGlzLnNvdXJjZVNwYW49byx0aGlzLmhhbmRsZXJTcGFuPXMsdGhpcy5rZXlTcGFuPWF9fSx5TD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vfX0sUjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlY3VyaXR5Q29udGV4dD1pLHRoaXMudmFsdWU9cix0aGlzLnVuaXQ9byx0aGlzLnNvdXJjZVNwYW49cyx0aGlzLmtleVNwYW49YSx0aGlzLnZhbHVlU3Bhbj1sfX0sRXg9Y2xhc3N7fTtmdW5jdGlvbiAkdmUobix0LGUsaSxyLG8scyl7bnx8KG49bmV3IE8xKHMpKTtsZXQgYT1mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBDTChuKTtyZXR1cm4gdC52aXNpdChlKX0obix0KX0oe2NyZWF0ZUxpdGVyYWxBcnJheUNvbnZlcnRlcjpkPT5wPT5jcihwKSxjcmVhdGVMaXRlcmFsTWFwQ29udmVydGVyOmQ9PnA9Pm1sKGQubWFwKChmLG0pPT4oe2tleTpmLmtleSx2YWx1ZTpwW21dLHF1b3RlZDpmLnF1b3RlZH0pKSksY3JlYXRlUGlwZUNvbnZlcnRlcjpkPT57dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIFN0YXRlOiBBY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBpcGVzLiBQaXBlOiAke2R9YCl9fSxlKSxsPW5ldyBUeChuLHQsaSwhMSxyLG8pLGM9W107UXEoYS52aXNpdChsLEJpLlN0YXRlbWVudCksYyksZnVuY3Rpb24obix0LGUpe2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pZS51bnNoaWZ0KFhxKHQsaSkpfShsLnRlbXBvcmFyeUNvdW50LGksYyksbC51c2VzSW1wbGljaXRSZWNlaXZlciYmbi5ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCk7bGV0IHU9Yy5sZW5ndGgtMTtpZih1Pj0wKXtsZXQgZD1jW3VdO2QgaW5zdGFuY2VvZiBsdSYmKGNbdV09bmV3IHVvKGQuZXhwcikpfXJldHVybiBjfWZ1bmN0aW9uIHFxKG4sdCxlLGkpe258fChuPW5ldyBPMSk7bGV0IHI9bmV3IFR4KG4sdCxpLCExKSxvPWUudmlzaXQocixCaS5FeHByZXNzaW9uKSxzPVlxKHIsaSk7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RtdHM9dCx0aGlzLmN1cnJWYWxFeHByPWV9fShzLG8pfWZ1bmN0aW9uIFlxKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuLnRlbXBvcmFyeUNvdW50O2krKyllLnB1c2goWHEodCxpKSk7cmV0dXJuIGV9ZnVuY3Rpb24geEwobix0KXtyZXR1cm5gdG1wXyR7bn1fJHt0fWB9ZnVuY3Rpb24gWHEobix0KXtyZXR1cm4gbmV3IGF1KHhMKG4sdCkpfUV4LmV2ZW50PU1pKCIkZXZlbnQiKTt2YXIgQmk9KCgpPT57cmV0dXJuKG49Qml8fChCaT17fSkpW24uU3RhdGVtZW50PTBdPSJTdGF0ZW1lbnQiLG5bbi5FeHByZXNzaW9uPTFdPSJFeHByZXNzaW9uIixCaTt2YXIgbn0pKCk7ZnVuY3Rpb24gRTkobix0KXtpZihuIT09QmkuRXhwcmVzc2lvbil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGV4cHJlc3Npb24sIGJ1dCBzYXcgJHt0fWApfWZ1bmN0aW9uIERzKG4sdCl7cmV0dXJuIG49PT1CaS5TdGF0ZW1lbnQ/dC50b1N0bXQoKTp0fXZhciBDTD1jbGFzcyBleHRlbmRzIF9Me2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29udmVydGVyRmFjdG9yeT10fXZpc2l0UGlwZSh0LGUpe2xldCBpPVt0LmV4cCwuLi50LmFyZ3NdLm1hcChyPT5yLnZpc2l0KHRoaXMsZSkpO3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3BhbixpLHRoaXMuX2NvbnZlcnRlckZhY3RvcnkuY3JlYXRlUGlwZUNvbnZlcnRlcih0Lm5hbWUsaS5sZW5ndGgpKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbnMubWFwKHI9PnIudmlzaXQodGhpcyxlKSk7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLGksdGhpcy5fY29udmVydGVyRmFjdG9yeS5jcmVhdGVMaXRlcmFsQXJyYXlDb252ZXJ0ZXIodC5leHByZXNzaW9ucy5sZW5ndGgpKX12aXNpdExpdGVyYWxNYXAodCxlKXtsZXQgaT10LnZhbHVlcy5tYXAocj0+ci52aXNpdCh0aGlzLGUpKTtyZXR1cm4gbmV3IF9wKHQuc3Bhbix0LnNvdXJjZVNwYW4saSx0aGlzLl9jb252ZXJ0ZXJGYWN0b3J5LmNyZWF0ZUxpdGVyYWxNYXBDb252ZXJ0ZXIodC5rZXlzKSl9fSxUeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5fbG9jYWxSZXNvbHZlcj10LHRoaXMuX2ltcGxpY2l0UmVjZWl2ZXI9ZSx0aGlzLmJpbmRpbmdJZD1pLHRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uPXIsdGhpcy5iYXNlU291cmNlU3Bhbj1vLHRoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzPXMsdGhpcy5fbm9kZU1hcD1uZXcgTWFwLHRoaXMuX3Jlc3VsdE1hcD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRUZW1wb3Jhcnk9MCx0aGlzLnRlbXBvcmFyeUNvdW50PTAsdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMX12aXNpdFVuYXJ5KHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6aT1wZi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1wZi5NaW51czticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiBEcyhlLG5ldyBveChpLHRoaXMuX3Zpc2l0KHQuZXhwcixCaS5FeHByZXNzaW9uKSx2b2lkIDAsdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRCaW5hcnkodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRpb24pe2Nhc2UiKyI6aT1obi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1obi5NaW51czticmVhaztjYXNlIioiOmk9aG4uTXVsdGlwbHk7YnJlYWs7Y2FzZSIvIjppPWhuLkRpdmlkZTticmVhaztjYXNlIiUiOmk9aG4uTW9kdWxvO2JyZWFrO2Nhc2UiJiYiOmk9aG4uQW5kO2JyZWFrO2Nhc2UifHwiOmk9aG4uT3I7YnJlYWs7Y2FzZSI9PSI6aT1obi5FcXVhbHM7YnJlYWs7Y2FzZSIhPSI6aT1obi5Ob3RFcXVhbHM7YnJlYWs7Y2FzZSI9PT0iOmk9aG4uSWRlbnRpY2FsO2JyZWFrO2Nhc2UiIT09IjppPWhuLk5vdElkZW50aWNhbDticmVhaztjYXNlIjwiOmk9aG4uTG93ZXI7YnJlYWs7Y2FzZSI+IjppPWhuLkJpZ2dlcjticmVhaztjYXNlIjw9IjppPWhuLkxvd2VyRXF1YWxzO2JyZWFrO2Nhc2UiPj0iOmk9aG4uQmlnZ2VyRXF1YWxzO2JyZWFrO2Nhc2UiPz8iOnJldHVybiB0aGlzLmNvbnZlcnROdWxsaXNoQ29hbGVzY2UodCxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uICR7dC5vcGVyYXRpb259YCl9cmV0dXJuIERzKGUsbmV3IGxyKGksdGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQucmlnaHQsQmkuRXhwcmVzc2lvbiksdm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZihuIT09QmkuU3RhdGVtZW50KXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQsIGJ1dCBzYXcgJHt0fWApfShlLHQpLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7cmV0dXJuIERzKGUsdGhpcy5fdmlzaXQodC5jb25kaXRpb24sQmkuRXhwcmVzc2lvbikuY29uZGl0aW9uYWwodGhpcy5fdmlzaXQodC50cnVlRXhwLEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQuZmFsc2VFeHAsQmkuRXhwcmVzc2lvbiksdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRQaXBlKHQsZSl7dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIHN0YXRlOiBQaXBlcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucy4gUGlwZTogJHt0Lm5hbWV9YCl9dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIEU5KGUsdCksdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyfXZpc2l0VGhpc1JlY2VpdmVyKHQsZSl7cmV0dXJuIHRoaXMudmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7aWYoIXRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIik7RTkoZSx0KTtsZXQgaT1bXTtmb3IobGV0IG89MDtvPHQuc3RyaW5ncy5sZW5ndGgtMTtvKyspaS5wdXNoKG50KHQuc3RyaW5nc1tvXSkpLGkucHVzaCh0aGlzLl92aXNpdCh0LmV4cHJlc3Npb25zW29dLEJpLkV4cHJlc3Npb24pKTtpLnB1c2gobnQodC5zdHJpbmdzW3Quc3RyaW5ncy5sZW5ndGgtMV0pKTtsZXQgcj10LnN0cmluZ3M7cmV0dXJuIDI9PT1yLmxlbmd0aCYmIiI9PT1yWzBdJiYiIj09PXJbMV0/aT1baVsxXV06dC5leHByZXNzaW9ucy5sZW5ndGg+PTkmJihpPVtjcihpKV0pLG5ldyB3TChpKX12aXNpdEtleWVkUmVhZCh0LGUpe2xldCBpPXRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KTtyZXR1cm4gaT90aGlzLmNvbnZlcnRTYWZlQWNjZXNzKHQsaSxlKTpEcyhlLHRoaXMuX3Zpc2l0KHQucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbikua2V5KHRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pKSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKSxyPXRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pLG89dGhpcy5fdmlzaXQodC52YWx1ZSxCaS5FeHByZXNzaW9uKTtyZXR1cm4gaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJnRoaXMuX2xvY2FsUmVzb2x2ZXIubWF5YmVSZXN0b3JlVmlldygpLERzKGUsaS5rZXkocikuc2V0KG8pKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogbGl0ZXJhbCBhcnJheXMgc2hvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBmdW5jdGlvbnMiKX12aXNpdExpdGVyYWxNYXAodCxlKXt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGxpdGVyYWwgbWFwcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucyIpfXZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0LGUpe3JldHVybiBEcyhlLG50KHQudmFsdWUsbnVsbD09dC52YWx1ZXx8ITA9PT10LnZhbHVlfHwhMD09PXQudmFsdWU/aWE6dm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfV9nZXRMb2NhbCh0LGUpe3JldHVybiB0aGlzLl9sb2NhbFJlc29sdmVyLmdsb2JhbHM/Lmhhcyh0KSYmZSBpbnN0YW5jZW9mIGd4P251bGw6dGhpcy5fbG9jYWxSZXNvbHZlci5nZXRMb2NhbCh0KX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBEcyhlLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyByeChuLHZvaWQgMCl9KHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSkpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBEcyhlLHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7e2xldCByPW51bGwsbz10aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyLHM9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKTtyZXR1cm4gcz09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJihyPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKSxyJiYodGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj1vLHRoaXMuYWRkSW1wbGljaXRSZWNlaXZlckFjY2Vzcyh0Lm5hbWUpKSksbnVsbD09ciYmKHI9cy5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLHIpfX12aXNpdFByb3BlcnR5V3JpdGUodCxlKXtsZXQgaT10aGlzLl92aXNpdCh0LnJlY2VpdmVyLEJpLkV4cHJlc3Npb24pLHI9dGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcixvPW51bGw7aWYoaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXIpe2xldCBzPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKTtpZihzKXtpZighKHMgaW5zdGFuY2VvZiBiMCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXNzaWduIHZhbHVlICIke3QudmFsdWUgaW5zdGFuY2VvZiBvdT90LnZhbHVlLm5hbWU6dm9pZCAwfSIgdG8gdGVtcGxhdGUgdmFyaWFibGUgIiR7dC5uYW1lfSIuIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LmApO289cyx0aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyPXIsdGhpcy5hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQubmFtZSl9fXJldHVybiBudWxsPT09byYmKG89aS5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLG8uc2V0KHRoaXMuX3Zpc2l0KHQudmFsdWUsQmkuRXhwcmVzc2lvbikpKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdEFsbCh0LGUpe3JldHVybiB0Lm1hcChpPT50aGlzLl92aXNpdChpLGUpKX12aXNpdENhbGwodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7bGV0IHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MsQmkuRXhwcmVzc2lvbik7aWYodCBpbnN0YW5jZW9mIF9wKXJldHVybiBEcyhlLHQuY29udmVydGVyKHIpKTtsZXQgbz10LnJlY2VpdmVyO2lmKG8gaW5zdGFuY2VvZiBvdSYmby5yZWNlaXZlciBpbnN0YW5jZW9mIEVmJiYhKG8ucmVjZWl2ZXIgaW5zdGFuY2VvZiBneCkmJiIkYW55Ij09PW8ubmFtZSl7aWYoMSE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYWxsIHRvICRhbnksIGV4cGVjdGVkIDEgYXJndW1lbnQgYnV0IHJlY2VpdmVkICR7ci5sZW5ndGh8fCJub25lIn1gKTtyZXR1cm4gRHMoZSxyWzBdKX1yZXR1cm4gRHMoZSx0aGlzLl92aXNpdChvLEJpLkV4cHJlc3Npb24pLmNhbGxGbihyLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0U2FmZUNhbGwodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX1fdmlzaXQodCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0TWFwLmdldCh0KXx8KHRoaXMuX25vZGVNYXAuZ2V0KHQpfHx0KS52aXNpdCh0aGlzLGUpfWNvbnZlcnRTYWZlQWNjZXNzKHQsZSxpKXtsZXQgbyxyPXRoaXMuX3Zpc2l0KGUucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbik7dGhpcy5uZWVkc1RlbXBvcmFyeUluU2FmZUFjY2VzcyhlLnJlY2VpdmVyKSYmKG89dGhpcy5hbGxvY2F0ZVRlbXBvcmFyeSgpLHI9by5zZXQociksdGhpcy5fcmVzdWx0TWFwLnNldChlLnJlY2VpdmVyLG8pKTtsZXQgcz1yLmlzQmxhbmsoKTt0aGlzLl9ub2RlTWFwLnNldChlLGUgaW5zdGFuY2VvZiBrMD9uZXcgYnAoZS5zcGFuLGUuc291cmNlU3BhbixlLnJlY2VpdmVyLGUuYXJncyxlLmFyZ3VtZW50U3Bhbik6ZSBpbnN0YW5jZW9mIFAwP25ldyBJMChlLnNwYW4sZS5zb3VyY2VTcGFuLGUucmVjZWl2ZXIsZS5rZXkpOm5ldyBvdShlLnNwYW4sZS5zb3VyY2VTcGFuLGUubmFtZVNwYW4sZS5yZWNlaXZlcixlLm5hbWUpKTtsZXQgYT10aGlzLl92aXNpdCh0LEJpLkV4cHJlc3Npb24pO3JldHVybiB0aGlzLl9ub2RlTWFwLmRlbGV0ZShlKSxvJiZ0aGlzLnJlbGVhc2VUZW1wb3JhcnkobyksRHMoaSxzLmNvbmRpdGlvbmFsKEtOLGEpKX1jb252ZXJ0TnVsbGlzaENvYWxlc2NlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHI9dGhpcy5fdmlzaXQodC5yaWdodCxCaS5FeHByZXNzaW9uKSxvPXRoaXMuYWxsb2NhdGVUZW1wb3JhcnkoKTtyZXR1cm4gdGhpcy5yZWxlYXNlVGVtcG9yYXJ5KG8pLERzKGUsby5zZXQoaSkubm90SWRlbnRpY2FsKEtOKS5hbmQoby5ub3RJZGVudGljYWwobnQodm9pZCAwKSkpLmNvbmRpdGlvbmFsKG8scikpfWxlZnRNb3N0U2FmZU5vZGUodCl7bGV0IGU9KGkscik9Pih0aGlzLl9ub2RlTWFwLmdldChyKXx8cikudmlzaXQoaSk7cmV0dXJuIHQudmlzaXQoe3Zpc2l0VW5hcnk6aT0+bnVsbCx2aXNpdEJpbmFyeTppPT5udWxsLHZpc2l0Q2hhaW46aT0+bnVsbCx2aXNpdENvbmRpdGlvbmFsOmk9Pm51bGwsdmlzaXRDYWxsKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil9LHZpc2l0U2FmZUNhbGwoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKXx8aX0sdmlzaXRJbXBsaWNpdFJlY2VpdmVyOmk9Pm51bGwsdmlzaXRUaGlzUmVjZWl2ZXI6aT0+bnVsbCx2aXNpdEludGVycG9sYXRpb246aT0+bnVsbCx2aXNpdEtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfSx2aXNpdEtleWVkV3JpdGU6aT0+bnVsbCx2aXNpdExpdGVyYWxBcnJheTppPT5udWxsLHZpc2l0TGl0ZXJhbE1hcDppPT5udWxsLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTppPT5udWxsLHZpc2l0UGlwZTppPT5udWxsLHZpc2l0UHJlZml4Tm90Omk9Pm51bGwsdmlzaXROb25OdWxsQXNzZXJ0Omk9Pm51bGwsdmlzaXRQcm9wZXJ0eVJlYWQoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKX0sdmlzaXRQcm9wZXJ0eVdyaXRlOmk9Pm51bGwsdmlzaXRTYWZlUHJvcGVydHlSZWFkKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil8fGl9LHZpc2l0U2FmZUtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfHxpfX0pfW5lZWRzVGVtcG9yYXJ5SW5TYWZlQWNjZXNzKHQpe2xldCBlPShyLG8pPT5vJiYodGhpcy5fbm9kZU1hcC5nZXQobyl8fG8pLnZpc2l0KHIpO3JldHVybiB0LnZpc2l0KHt2aXNpdFVuYXJ5KHIpe3JldHVybiBlKHRoaXMsci5leHByKX0sdmlzaXRCaW5hcnkocil7cmV0dXJuIGUodGhpcyxyLmxlZnQpfHxlKHRoaXMsci5yaWdodCl9LHZpc2l0Q2hhaW46cj0+ITEsdmlzaXRDb25kaXRpb25hbChyKXtyZXR1cm4gZSh0aGlzLHIuY29uZGl0aW9uKXx8ZSh0aGlzLHIudHJ1ZUV4cCl8fGUodGhpcyxyLmZhbHNlRXhwKX0sdmlzaXRDYWxsOnI9PiEwLHZpc2l0U2FmZUNhbGw6cj0+ITAsdmlzaXRJbXBsaWNpdFJlY2VpdmVyOnI9PiExLHZpc2l0VGhpc1JlY2VpdmVyOnI9PiExLHZpc2l0SW50ZXJwb2xhdGlvbihyKXtyZXR1cm4oKHIsbyk9Pm8uc29tZShzPT5lKHIscykpKSh0aGlzLHIuZXhwcmVzc2lvbnMpfSx2aXNpdEtleWVkUmVhZDpyPT4hMSx2aXNpdEtleWVkV3JpdGU6cj0+ITEsdmlzaXRMaXRlcmFsQXJyYXk6cj0+ITAsdmlzaXRMaXRlcmFsTWFwOnI9PiEwLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTpyPT4hMSx2aXNpdFBpcGU6cj0+ITAsdmlzaXRQcmVmaXhOb3Qocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdE5vbk51bGxBc3NlcnQocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdFByb3BlcnR5UmVhZDpyPT4hMSx2aXNpdFByb3BlcnR5V3JpdGU6cj0+ITEsdmlzaXRTYWZlUHJvcGVydHlSZWFkOnI9PiExLHZpc2l0U2FmZUtleWVkUmVhZDpyPT4hMX0pfWFsbG9jYXRlVGVtcG9yYXJ5KCl7bGV0IHQ9dGhpcy5fY3VycmVudFRlbXBvcmFyeSsrO3JldHVybiB0aGlzLnRlbXBvcmFyeUNvdW50PU1hdGgubWF4KHRoaXMuX2N1cnJlbnRUZW1wb3JhcnksdGhpcy50ZW1wb3JhcnlDb3VudCksbmV3IG1mKHhMKHRoaXMuYmluZGluZ0lkLHQpKX1yZWxlYXNlVGVtcG9yYXJ5KHQpe2lmKHRoaXMuX2N1cnJlbnRUZW1wb3JhcnktLSx0Lm5hbWUhPXhMKHRoaXMuYmluZGluZ0lkLHRoaXMuX2N1cnJlbnRUZW1wb3JhcnkpKXRocm93IG5ldyBFcnJvcihgVGVtcG9yYXJ5ICR7dC5uYW1lfSByZWxlYXNlZCBvdXQgb2Ygb3JkZXJgKX1jb252ZXJ0U291cmNlU3Bhbih0KXtpZih0aGlzLmJhc2VTb3VyY2VTcGFuKXtsZXQgZT10aGlzLmJhc2VTb3VyY2VTcGFuLnN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KSxpPXRoaXMuYmFzZVNvdXJjZVNwYW4uc3RhcnQubW92ZUJ5KHQuZW5kKSxyPXRoaXMuYmFzZVNvdXJjZVNwYW4uZnVsbFN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KTtyZXR1cm4gbmV3IFRvKGUsaSxyKX1yZXR1cm4gbnVsbH1hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQpe3RoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzJiZ0aGlzLmltcGxpY2l0UmVjZWl2ZXJBY2Nlc3Nlcy5hZGQodCl9fTtmdW5jdGlvbiBRcShuLHQpe0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKGU9PlFxKGUsdCkpOnQucHVzaChuKX1mdW5jdGlvbiBUTigpe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uIil9dmFyIHdMPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCl7c3VwZXIobnVsbCxudWxsKSx0aGlzLmFyZ3M9dCx0aGlzLmlzQ29uc3RhbnQ9VE4sdGhpcy5pc0VxdWl2YWxlbnQ9VE4sdGhpcy52aXNpdEV4cHJlc3Npb249VE59fSxPMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbHM9dH1ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCl7fW1heWJlUmVzdG9yZVZpZXcoKXt9Z2V0TG9jYWwodCl7cmV0dXJuIHQ9PT1FeC5ldmVudC5uYW1lP0V4LmV2ZW50Om51bGx9fSxfcD1jbGFzcyBleHRlbmRzIGJwe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxuZXcgbmEodCxlKSxpLG51bGwpLHRoaXMuY29udmVydGVyPXJ9fSxveWU9L3BvbHlmaWxsLW5leHQtc2VsZWN0b3JbXn1dKmNvbnRlbnQ6W1xzXSo/KFsnIl0pKC4qPylcMVs7XHNdKn0oW157XSo/KXsvZ2ltLHN5ZT0vKHBvbHlmaWxsLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxUOT0vKHBvbHlmaWxsLXVuc2NvcGVkLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxrMT0iLXNoYWRvd2Nzc2hvc3QiLGczPSItc2hhZG93Y3NzY29udGV4dCIsXzM9Iig/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSk/KFteLHtdKikiLGF5ZT1uZXcgUmVnRXhwKGsxK18zLCJnaW0iKSxseWU9bmV3IFJlZ0V4cChnMytfMywiZ2ltIiksY3llPW5ldyBSZWdFeHAoZzMrXzMsImltIiksc2Y9azErIi1uby1jb21iaW5hdG9yIixEOT0vLXNoYWRvd2Nzc2hvc3Qtbm8tY29tYmluYXRvcihbXlxzXSopLyx1eWU9Wy86OnNoYWRvdy9nLC86OmNvbnRlbnQvZywvXC9zaGFkb3ctZGVlcFwvL2csL1wvc2hhZG93XC8vZ10sQTk9Lyg/Oj4+Pil8KD86XC9kZWVwXC8pfCg/Ojo6bmctZGVlcCkvZyxkMD0vLXNoYWRvd2Nzc2hvc3QvZ2ltLHB5ZT0vOmhvc3QvZ2ltLGh5ZT0vOmhvc3QtY29udGV4dC9naW0sZnllPS9cL1wqW1xzXFNdKj9cKlwvL2csZ3llPS9cL1wqXHMqI1xzKnNvdXJjZShNYXBwaW5nKT9VUkw9W1xzXFNdKz9cKlwvL2csRE49IiVCTE9DSyUiLHl5ZT0vKFxzKikoW147XHtcfV0rPykoXHMqKSgoPzp7JUJMT0NLJX0/XHMqOz8pfCg/OlxzKjspKS9nLGJ5ZT0vJVFVT1RFRCUvZyx4eWU9bmV3IE1hcChbWyJ7IiwifSJdXSksQ3llPW5ldyBNYXAoW1snIicsJyInXSxbIiciLCInIl1dKSxEeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc2VsZWN0b3I9dCx0aGlzLmNvbnRlbnQ9ZX19O2Z1bmN0aW9uIEk5KG4sdCl7bGV0IGU9UDkobixDeWUsIiVRVU9URUQlIiksaT1QOShlLmVzY2FwZWRTdHJpbmcseHllLEROKSxyPTAsbz0wO3JldHVybiBpLmVzY2FwZWRTdHJpbmcucmVwbGFjZSh5eWUsKC4uLnMpPT57bGV0IGE9c1syXSxsPSIiLGM9c1s0XSx1PSIiO2MmJmMuc3RhcnRzV2l0aCgieyIrRE4pJiYobD1pLmJsb2Nrc1tyKytdLGM9Yy5zdWJzdHJpbmcoRE4ubGVuZ3RoKzEpLHU9InsiKTtsZXQgZD10KG5ldyBEeChhLGwpKTtyZXR1cm5gJHtzWzFdfSR7ZC5zZWxlY3Rvcn0ke3NbM119JHt1fSR7ZC5jb250ZW50fSR7Y31gfSkucmVwbGFjZShieWUsKCk9PmUuYmxvY2tzW28rK10pfWZ1bmN0aW9uIFA5KG4sdCxlKXtsZXQgbCxjLGk9W10scj1bXSxvPTAscz0wLGE9LTE7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kyspe2xldCBkPW5bdV07IlxcIj09PWQ/dSsrOmQ9PT1jPyhvLS0sMD09PW8mJihyLnB1c2gobi5zdWJzdHJpbmcoYSx1KSksaS5wdXNoKGUpLHM9dSxhPS0xLGw9Yz12b2lkIDApKTpkPT09bD9vKys6MD09PW8mJnQuaGFzKGQpJiYobD1kLGM9dC5nZXQoZCksbz0xLGE9dSsxLGkucHVzaChuLnN1YnN0cmluZyhzLGEpKSl9cmV0dXJuLTEhPT1hPyhyLnB1c2gobi5zdWJzdHJpbmcoYSkpLGkucHVzaChlKSk6aS5wdXNoKG4uc3Vic3RyaW5nKHMpKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmVzY2FwZWRTdHJpbmc9dCx0aGlzLmJsb2Nrcz1lfX0oaS5qb2luKCIiKSxyKX1mdW5jdGlvbiBNeWUobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IobGV0IGk9MTtpPHQ7aSsrKWZvcihsZXQgcj0wO3I8ZTtyKyspbltyK2kqZV09bltyXS5zbGljZSgwKX1mdW5jdGlvbiBSOShuKXtsZXQgdD1uLmNoYXJDb2RlQXQoMCk7aWYodD09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoMzk9PXR8fDM0PT10KSl7bGV0IGk9bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKTstMT09aS5pbmRleE9mKCInIikmJi0xPT1pLmluZGV4T2YoJyInKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gS3Eobil7cmV0dXJuIG4ucmVwbGFjZSgvW2Etel1bQS1aXS9nLHQ9PnQuY2hhckF0KDApKyItIit0LmNoYXJBdCgxKSkudG9Mb3dlckNhc2UoKX12YXIgTjE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZGlyZWN0aXZlRXhwcj10LHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITEsdGhpcy5oYXNCaW5kaW5ncz0hMSx0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSExLHRoaXMuX2NsYXNzTWFwSW5wdXQ9bnVsbCx0aGlzLl9zdHlsZU1hcElucHV0PW51bGwsdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9bnVsbCx0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz1udWxsLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9bnVsbCx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD1udWxsLHRoaXMuX3N0eWxlc0luZGV4PW5ldyBNYXAsdGhpcy5fY2xhc3Nlc0luZGV4PW5ldyBNYXAsdGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzPVtdLHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz1bXX1yZWdpc3RlckJvdW5kSW5wdXQodCl7bGV0IGU9bnVsbCxpPXQubmFtZTtzd2l0Y2godC50eXBlKXtjYXNlIDA6ZT10aGlzLnJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZShpLHQudmFsdWUsdC5zb3VyY2VTcGFuKTticmVhaztjYXNlIDM6ZT10aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChpLCExLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudW5pdCk7YnJlYWs7Y2FzZSAyOmU9dGhpcy5yZWdpc3RlckNsYXNzSW5wdXQoaSwhMSx0LnZhbHVlLHQuc291cmNlU3Bhbil9cmV0dXJuISFlfXJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZSh0LGUsaSl7bGV0IHI9bnVsbCxvPXQuc3Vic3RyaW5nKDAsNikscz0ic3R5bGUiPT09dHx8InN0eWxlLiI9PT1vfHwic3R5bGUhIj09PW87aWYoc3x8IXMmJigiY2xhc3MiPT09dHx8ImNsYXNzLiI9PT1vfHwiY2xhc3MhIj09PW8pKXtsZXQgbD0iLiIhPT10LmNoYXJBdCg1KSxjPXQuc2xpY2UobD81OjYpO3I9cz90aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChjLGwsZSxpKTp0aGlzLnJlZ2lzdGVyQ2xhc3NJbnB1dChjLGwsZSxpKX1yZXR1cm4gcn1yZWdpc3RlclN0eWxlSW5wdXQodCxlLGkscixvKXtpZihGOShpKSlyZXR1cm4gbnVsbDt0LnN0YXJ0c1dpdGgoIi0tIil8fCh0PUtxKHQpKTtsZXR7cHJvcGVydHk6cyxoYXNPdmVycmlkZUZsYWc6YSxzdWZmaXg6bH09azkodCksYz17bmFtZTpzLHN1ZmZpeDpvPSJzdHJpbmciPT10eXBlb2YgbyYmMCE9PW8ubGVuZ3RoP286bCx2YWx1ZTppLHNvdXJjZVNwYW46cixoYXNPdmVycmlkZUZsYWc6YX07cmV0dXJuIGU/dGhpcy5fc3R5bGVNYXBJbnB1dD1jOigodGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9dGhpcy5fc2luZ2xlU3R5bGVJbnB1dHN8fFtdKS5wdXNoKGMpLE85KHRoaXMuX3N0eWxlc0luZGV4LHMpKSx0aGlzLl9sYXN0U3R5bGluZ0lucHV0PWMsdGhpcy5fZmlyc3RTdHlsaW5nSW5wdXQ9dGhpcy5fZmlyc3RTdHlsaW5nSW5wdXR8fGMsdGhpcy5fY2hlY2tGb3JQaXBlcyhpKSx0aGlzLmhhc0JpbmRpbmdzPSEwLGN9cmVnaXN0ZXJDbGFzc0lucHV0KHQsZSxpLHIpe2lmKEY5KGkpKXJldHVybiBudWxsO2xldHtwcm9wZXJ0eTpvLGhhc092ZXJyaWRlRmxhZzpzfT1rOSh0KSxhPXtuYW1lOm8sdmFsdWU6aSxzb3VyY2VTcGFuOnIsaGFzT3ZlcnJpZGVGbGFnOnMsc3VmZml4Om51bGx9O3JldHVybiBlP3RoaXMuX2NsYXNzTWFwSW5wdXQ9YTooKHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzPXRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzfHxbXSkucHVzaChhKSxPOSh0aGlzLl9jbGFzc2VzSW5kZXgsbykpLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9YSx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD10aGlzLl9maXJzdFN0eWxpbmdJbnB1dHx8YSx0aGlzLl9jaGVja0ZvclBpcGVzKGkpLHRoaXMuaGFzQmluZGluZ3M9ITAsYX1fY2hlY2tGb3JQaXBlcyh0KXt0IGluc3RhbmNlb2YgZXUmJnQuYXN0IGluc3RhbmNlb2YgUjAmJih0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSEwKX1yZWdpc3RlclN0eWxlQXR0cih0KXt0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXM9ZnVuY3Rpb24obil7bGV0IHQ9W10sZT0wLGk9MCxyPTAsbz0wLHM9MCxhPW51bGwsbD0hMTtmb3IoO2U8bi5sZW5ndGg7KXN3aXRjaChuLmNoYXJDb2RlQXQoZSsrKSl7Y2FzZSA0MDppKys7YnJlYWs7Y2FzZSA0MTppLS07YnJlYWs7Y2FzZSAzOTpsPWx8fG8+MCwwPT09cj9yPTM5OjM5PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSAzNDpsPWx8fG8+MCwwPT09cj9yPTM0OjM0PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSA1ODohYSYmMD09PWkmJjA9PT1yJiYoYT1LcShuLnN1YnN0cmluZyhzLGUtMSkudHJpbSgpKSxvPWUpO2JyZWFrO2Nhc2UgNTk6aWYoYSYmbz4wJiYwPT09aSYmMD09PXIpe2xldCB1PW4uc3Vic3RyaW5nKG8sZS0xKS50cmltKCk7dC5wdXNoKGEsbD9SOSh1KTp1KSxzPWUsbz0wLGE9bnVsbCxsPSExfX1pZihhJiZvKXtsZXQgYz1uLnNsaWNlKG8pLnRyaW0oKTt0LnB1c2goYSxsP1I5KGMpOmMpfXJldHVybiB0fSh0KSx0aGlzLl9oYXNJbml0aWFsVmFsdWVzPSEwfXJlZ2lzdGVyQ2xhc3NBdHRyKHQpe3RoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz10LnRyaW0oKS5zcGxpdCgvXHMrL2cpLHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITB9cG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKHQpe2lmKHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcy5sZW5ndGgpe3QucHVzaChudCgxKSk7Zm9yKGxldCBlPTA7ZTx0aGlzLl9pbml0aWFsQ2xhc3NWYWx1ZXMubGVuZ3RoO2UrKyl0LnB1c2gobnQodGhpcy5faW5pdGlhbENsYXNzVmFsdWVzW2VdKSl9aWYodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzLmxlbmd0aCl7dC5wdXNoKG50KDIpKTtmb3IobGV0IGU9MDtlPHRoaXMuX2luaXRpYWxTdHlsZVZhbHVlcy5sZW5ndGg7ZSs9Mil0LnB1c2gobnQodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzW2VdKSxudCh0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXNbZSsxXSkpfX1hc3NpZ25Ib3N0QXR0cnModCxlKXt0aGlzLl9kaXJlY3RpdmVFeHByJiYodC5sZW5ndGh8fHRoaXMuX2hhc0luaXRpYWxWYWx1ZXMpJiYodGhpcy5wb3B1bGF0ZUluaXRpYWxTdHlsaW5nQXR0cnModCksZS5zZXQoImhvc3RBdHRycyIsY3IodCkpKX1idWlsZENsYXNzTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX2NsYXNzTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITAsdGhpcy5fY2xhc3NNYXBJbnB1dCk6bnVsbH1idWlsZFN0eWxlTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0eWxlTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITEsdGhpcy5fc3R5bGVNYXBJbnB1dCk6bnVsbH1fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsZSxpKXtsZXQgcyxyPTIsbz1pLnZhbHVlLnZpc2l0KHQpO3JldHVybiBvIGluc3RhbmNlb2YgWm8/KHIrPW8uZXhwcmVzc2lvbnMubGVuZ3RoLHM9ZT9mdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5jbGFzc01hcDtjYXNlIDM6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGVWfX0obyk6ZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsuc3R5bGVNYXA7Y2FzZSAzOnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlVn19KG8pKTpzPWU/Sy5jbGFzc01hcDpLLnN0eWxlTWFwLHtyZWZlcmVuY2U6cyxjYWxsczpbe3N1cHBvcnRzSW50ZXJwb2xhdGlvbjohMCxzb3VyY2VTcGFuOmkuc291cmNlU3BhbixhbGxvY2F0ZUJpbmRpbmdTbG90czpyLHBhcmFtczphPT57bGV0IGw9YShvKTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sOltsXX19XX19X2J1aWxkU2luZ2xlSW5wdXRzKHQsZSxpLHIsbyl7bGV0IHM9W107cmV0dXJuIGUuZm9yRWFjaChhPT57bGV0IGw9c1tzLmxlbmd0aC0xXSxjPWEudmFsdWUudmlzaXQoaSksdT10LGQ9MjtjIGluc3RhbmNlb2YgWm8mJihkKz1jLmV4cHJlc3Npb25zLmxlbmd0aCxyJiYodT1yKGMpKSk7bGV0IHA9e3NvdXJjZVNwYW46YS5zb3VyY2VTcGFuLGFsbG9jYXRlQmluZGluZ1Nsb3RzOmQsc3VwcG9ydHNJbnRlcnBvbGF0aW9uOiEhcixwYXJhbXM6aD0+e2xldCBmPVtdO2YucHVzaChudChhLm5hbWUpKTtsZXQgbT1oKGMpO3JldHVybiBBcnJheS5pc0FycmF5KG0pP2YucHVzaCguLi5tKTpmLnB1c2gobSksIW8mJm51bGwhPT1hLnN1ZmZpeCYmZi5wdXNoKG50KGEuc3VmZml4KSksZn19O2wmJmwucmVmZXJlbmNlPT09dT9sLmNhbGxzLnB1c2gocCk6cy5wdXNoKHtyZWZlcmVuY2U6dSxjYWxsczpbcF19KX0pLHN9X2J1aWxkQ2xhc3NJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuY2xhc3NQcm9wLHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzLHQsbnVsbCwhMCk6W119X2J1aWxkU3R5bGVJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuc3R5bGVQcm9wLHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzLHQsQXllLCExKTpbXX1idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKHQpe2xldCBlPVtdO2lmKHRoaXMuaGFzQmluZGluZ3Mpe2xldCBpPXRoaXMuYnVpbGRTdHlsZU1hcEluc3RydWN0aW9uKHQpO2kmJmUucHVzaChpKTtsZXQgcj10aGlzLmJ1aWxkQ2xhc3NNYXBJbnN0cnVjdGlvbih0KTtyJiZlLnB1c2gociksZS5wdXNoKC4uLnRoaXMuX2J1aWxkU3R5bGVJbnB1dHModCkpLGUucHVzaCguLi50aGlzLl9idWlsZENsYXNzSW5wdXRzKHQpKX1yZXR1cm4gZX19O2Z1bmN0aW9uIE85KG4sdCl7bi5oYXModCl8fG4uc2V0KHQsbi5zaXplKX1mdW5jdGlvbiBrOShuKXtsZXQgdD0hMSxlPW4uaW5kZXhPZigiIWltcG9ydGFudCIpOy0xIT09ZSYmKG49ZT4wP24uc3Vic3RyaW5nKDAsZSk6IiIsdD0hMCk7bGV0IGk9bnVsbCxyPW4sbz1uLmxhc3RJbmRleE9mKCIuIik7cmV0dXJuIG8+MCYmKGk9bi5zbGljZShvKzEpLHI9bi5zdWJzdHJpbmcoMCxvKSkse3Byb3BlcnR5OnIsc3VmZml4OmksaGFzT3ZlcnJpZGVGbGFnOnR9fWZ1bmN0aW9uIEF5ZShuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5zdHlsZVByb3A7Y2FzZSAzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlMTtjYXNlIDU6cmV0dXJuIEsuc3R5bGVQcm9wSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNDtjYXNlIDExOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNztjYXNlIDE3OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlVn19ZnVuY3Rpb24gRjkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBldSYmKG49bi5hc3QpLG4gaW5zdGFuY2VvZiBuYX12YXIgSm49KCgpPT57cmV0dXJuKG49Sm58fChKbj17fSkpW24uQ2hhcmFjdGVyPTBdPSJDaGFyYWN0ZXIiLG5bbi5JZGVudGlmaWVyPTFdPSJJZGVudGlmaWVyIixuW24uUHJpdmF0ZUlkZW50aWZpZXI9Ml09IlByaXZhdGVJZGVudGlmaWVyIixuW24uS2V5d29yZD0zXT0iS2V5d29yZCIsbltuLlN0cmluZz00XT0iU3RyaW5nIixuW24uT3BlcmF0b3I9NV09Ik9wZXJhdG9yIixuW24uTnVtYmVyPTZdPSJOdW1iZXIiLG5bbi5FcnJvcj03XT0iRXJyb3IiLEpuO3ZhciBufSkoKSxQeWU9WyJ2YXIiLCJsZXQiLCJhcyIsIm51bGwiLCJ1bmRlZmluZWQiLCJ0cnVlIiwiZmFsc2UiLCJpZiIsImVsc2UiLCJ0aGlzIl0sTDE9Y2xhc3N7dG9rZW5pemUodCl7bGV0IGU9bmV3IFRMKHQpLGk9W10scj1lLnNjYW5Ub2tlbigpO2Zvcig7bnVsbCE9cjspaS5wdXNoKHIpLHI9ZS5zY2FuVG9rZW4oKTtyZXR1cm4gaX19LHVjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5pbmRleD10LHRoaXMuZW5kPWUsdGhpcy50eXBlPWksdGhpcy5udW1WYWx1ZT1yLHRoaXMuc3RyVmFsdWU9b31pc0NoYXJhY3Rlcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5DaGFyYWN0ZXImJnRoaXMubnVtVmFsdWU9PXR9aXNOdW1iZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5OdW1iZXJ9aXNTdHJpbmcoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5TdHJpbmd9aXNPcGVyYXRvcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5PcGVyYXRvciYmdGhpcy5zdHJWYWx1ZT09dH1pc0lkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5JZGVudGlmaWVyfWlzUHJpdmF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5Qcml2YXRlSWRlbnRpZmllcn1pc0tleXdvcmQoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkfWlzS2V5d29yZExldCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJsZXQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmImFzIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmROdWxsKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmIm51bGwiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFVuZGVmaW5lZCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJ1bmRlZmluZWQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRydWUoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidHJ1ZSI9PXRoaXMuc3RyVmFsdWV9aXNLZXl3b3JkRmFsc2UoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYiZmFsc2UiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRoaXMoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidGhpcyI9PXRoaXMuc3RyVmFsdWV9aXNFcnJvcigpe3JldHVybiB0aGlzLnR5cGU9PUpuLkVycm9yfXRvTnVtYmVyKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uTnVtYmVyP3RoaXMubnVtVmFsdWU6LTF9dG9TdHJpbmcoKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlIEpuLkNoYXJhY3RlcjpjYXNlIEpuLklkZW50aWZpZXI6Y2FzZSBKbi5LZXl3b3JkOmNhc2UgSm4uT3BlcmF0b3I6Y2FzZSBKbi5Qcml2YXRlSWRlbnRpZmllcjpjYXNlIEpuLlN0cmluZzpjYXNlIEpuLkVycm9yOnJldHVybiB0aGlzLnN0clZhbHVlO2Nhc2UgSm4uTnVtYmVyOnJldHVybiB0aGlzLm51bVZhbHVlLnRvU3RyaW5nKCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19fTtmdW5jdGlvbiBOOShuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uQ2hhcmFjdGVyLGUsU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZnVuY3Rpb24gQU4obix0LGUpe3JldHVybiBuZXcgdWMobix0LEpuLk9wZXJhdG9yLDAsZSl9dmFyIElOPW5ldyB1YygtMSwtMSxKbi5DaGFyYWN0ZXIsMCwiIiksVEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbnB1dD10LHRoaXMucGVlaz0wLHRoaXMuaW5kZXg9LTEsdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5hZHZhbmNlKCl9YWR2YW5jZSgpe3RoaXMucGVlaz0rK3RoaXMuaW5kZXg+PXRoaXMubGVuZ3RoPzA6dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpfXNjYW5Ub2tlbigpe2xldCB0PXRoaXMuaW5wdXQsZT10aGlzLmxlbmd0aCxpPXRoaXMucGVlayxyPXRoaXMuaW5kZXg7Zm9yKDtpPD0zMjspe2lmKCsrcj49ZSl7aT0wO2JyZWFrfWk9dC5jaGFyQ29kZUF0KHIpfWlmKHRoaXMucGVlaz1pLHRoaXMuaW5kZXg9cixyPj1lKXJldHVybiBudWxsO2lmKEw5KGkpKXJldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCk7aWYocHAoaSkpcmV0dXJuIHRoaXMuc2Nhbk51bWJlcihyKTtsZXQgbz1yO3N3aXRjaChpKXtjYXNlIDQ2OnJldHVybiB0aGlzLmFkdmFuY2UoKSxwcCh0aGlzLnBlZWspP3RoaXMuc2Nhbk51bWJlcihvKTpOOShvLHRoaXMuaW5kZXgsNDYpO2Nhc2UgNDA6Y2FzZSA0MTpjYXNlIGZwOmNhc2UgdHU6Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDQ6Y2FzZSA1ODpjYXNlIDU5OnJldHVybiB0aGlzLnNjYW5DaGFyYWN0ZXIobyxpKTtjYXNlIDM5OmNhc2UgMzQ6cmV0dXJuIHRoaXMuc2NhblN0cmluZygpO2Nhc2UgMzU6cmV0dXJuIHRoaXMuc2NhblByaXZhdGVJZGVudGlmaWVyKCk7Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDI6Y2FzZSA0NzpjYXNlIDM3OmNhc2UgOTQ6cmV0dXJuIHRoaXMuc2Nhbk9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7Y2FzZSA2MzpyZXR1cm4gdGhpcy5zY2FuUXVlc3Rpb24obyk7Y2FzZSA2MDpjYXNlIDYyOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iik7Y2FzZSAzMzpjYXNlIDYxOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iiw2MSwiPSIpO2Nhc2UgMzg6cmV0dXJuIHRoaXMuc2NhbkNvbXBsZXhPcGVyYXRvcihvLCImIiwzOCwiJiIpO2Nhc2UgMTI0OnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobywifCIsMTI0LCJ8Iik7Y2FzZSAxNjA6Zm9yKDtmMyh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtyZXR1cm4gdGhpcy5zY2FuVG9rZW4oKX1yZXR1cm4gdGhpcy5hZHZhbmNlKCksdGhpcy5lcnJvcihgVW5leHBlY3RlZCBjaGFyYWN0ZXIgWyR7U3RyaW5nLmZyb21DaGFyQ29kZShpKX1dYCwwKX1zY2FuQ2hhcmFjdGVyKHQsZSl7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLE45KHQsdGhpcy5pbmRleCxlKX1zY2FuT3BlcmF0b3IodCxlKXtyZXR1cm4gdGhpcy5hZHZhbmNlKCksQU4odCx0aGlzLmluZGV4LGUpfXNjYW5Db21wbGV4T3BlcmF0b3IodCxlLGkscixvLHMpe3RoaXMuYWR2YW5jZSgpO2xldCBhPWU7cmV0dXJuIHRoaXMucGVlaz09aSYmKHRoaXMuYWR2YW5jZSgpLGErPXIpLG51bGwhPW8mJnRoaXMucGVlaz09byYmKHRoaXMuYWR2YW5jZSgpLGErPXMpLEFOKHQsdGhpcy5pbmRleCxhKX1zY2FuSWRlbnRpZmllcigpe2xldCB0PXRoaXMuaW5kZXg7Zm9yKHRoaXMuYWR2YW5jZSgpO0I5KHRoaXMucGVlayk7KXRoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7cmV0dXJuIFB5ZS5pbmRleE9mKGUpPi0xP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5LZXl3b3JkLDAsZSl9KHQsdGhpcy5pbmRleCxlKTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uSWRlbnRpZmllciwwLGUpfSh0LHRoaXMuaW5kZXgsZSl9c2NhblByaXZhdGVJZGVudGlmaWVyKCl7bGV0IHQ9dGhpcy5pbmRleDtpZih0aGlzLmFkdmFuY2UoKSwhTDkodGhpcy5wZWVrKSlyZXR1cm4gdGhpcy5lcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgWyNdIiwtMSk7Zm9yKDtCOSh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uUHJpdmF0ZUlkZW50aWZpZXIsMCxlKX0odCx0aGlzLmluZGV4LGUpfXNjYW5OdW1iZXIodCl7bGV0IGU9dGhpcy5pbmRleD09PXQsaT0hMTtmb3IodGhpcy5hZHZhbmNlKCk7Oyl7aWYoIXBwKHRoaXMucGVlaykpaWYoOTU9PT10aGlzLnBlZWspe2lmKCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleC0xKSl8fCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSkpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgbnVtZXJpYyBzZXBhcmF0b3IiLDApO2k9ITB9ZWxzZSBpZig0Nj09PXRoaXMucGVlayllPSExO2Vsc2V7aWYoMTAxIT0obj10aGlzLnBlZWspJiY2OSE9bilicmVhaztpZih0aGlzLmFkdmFuY2UoKSxWeWUodGhpcy5wZWVrKSYmdGhpcy5hZHZhbmNlKCksIXBwKHRoaXMucGVlaykpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgZXhwb25lbnQiLC0xKTtlPSExfXRoaXMuYWR2YW5jZSgpfXZhciBuO2xldCByPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7aSYmKHI9ci5yZXBsYWNlKC9fL2csIiIpKTtsZXQgbz1lP2Z1bmN0aW9uKG4pe2xldCB0PXBhcnNlSW50KG4pO2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrbik7cmV0dXJuIHR9KHIpOnBhcnNlRmxvYXQocik7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5OdW1iZXIsZSwiIil9KHQsdGhpcy5pbmRleCxvKX1zY2FuU3RyaW5nKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMucGVlazt0aGlzLmFkdmFuY2UoKTtsZXQgaT0iIixyPXRoaXMuaW5kZXgsbz10aGlzLmlucHV0O2Zvcig7dGhpcy5wZWVrIT1lOylpZig5Mj09dGhpcy5wZWVrKXtsZXQgYTtpZihpKz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpLHRoaXMuYWR2YW5jZSgpLHRoaXMucGVlaz10aGlzLnBlZWssMTE3PT10aGlzLnBlZWspe2xldCBsPW8uc3Vic3RyaW5nKHRoaXMuaW5kZXgrMSx0aGlzLmluZGV4KzUpO2lmKCEvXlswLTlhLWZdKyQvaS50ZXN0KGwpKXJldHVybiB0aGlzLmVycm9yKGBJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIFtcXHUke2x9XWAsMCk7YT1wYXJzZUludChsLDE2KTtmb3IobGV0IGM9MDtjPDU7YysrKXRoaXMuYWR2YW5jZSgpfWVsc2UgYT1IeWUodGhpcy5wZWVrKSx0aGlzLmFkdmFuY2UoKTtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpLHI9dGhpcy5pbmRleH1lbHNle2lmKDA9PXRoaXMucGVlaylyZXR1cm4gdGhpcy5lcnJvcigiVW50ZXJtaW5hdGVkIHF1b3RlIiwwKTt0aGlzLmFkdmFuY2UoKX1sZXQgcz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpO3JldHVybiB0aGlzLmFkdmFuY2UoKSxmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uU3RyaW5nLDAsZSl9KHQsdGhpcy5pbmRleCxpK3MpfXNjYW5RdWVzdGlvbih0KXt0aGlzLmFkdmFuY2UoKTtsZXQgZT0iPyI7cmV0dXJuKDYzPT09dGhpcy5wZWVrfHw0Nj09PXRoaXMucGVlaykmJihlKz00Nj09PXRoaXMucGVlaz8iLiI6Ij8iLHRoaXMuYWR2YW5jZSgpKSxBTih0LHRoaXMuaW5kZXgsZSl9ZXJyb3IodCxlKXtsZXQgaT10aGlzLmluZGV4K2U7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5FcnJvciwwLGUpfShpLHRoaXMuaW5kZXgsYExleGVyIEVycm9yOiAke3R9IGF0IGNvbHVtbiAke2l9IGluIGV4cHJlc3Npb24gWyR7dGhpcy5pbnB1dH1dYCl9fTtmdW5jdGlvbiBMOShuKXtyZXR1cm4gOTc8PW4mJm48PTEyMnx8NjU8PW4mJm48PTkwfHw5NT09bnx8MzY9PW59ZnVuY3Rpb24gQjkobil7cmV0dXJuIG0zKG4pfHxwcChuKXx8OTU9PW58fDM2PT1ufWZ1bmN0aW9uIFZ5ZShuKXtyZXR1cm4gNDU9PW58fDQzPT1ufWZ1bmN0aW9uIEh5ZShuKXtzd2l0Y2gobil7Y2FzZSAxMTA6cmV0dXJuIDEwO2Nhc2UgMTAyOnJldHVybiAxMjtjYXNlIDExNDpyZXR1cm4gMTM7Y2FzZSAxMTY6cmV0dXJuIDk7Y2FzZSAxMTg6cmV0dXJuIDExO2RlZmF1bHQ6cmV0dXJuIG59fXZhciBCMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9sZXhlcj10LHRoaXMuZXJyb3JzPVtdfXBhcnNlQWN0aW9uKHQsZSxpLHIsbz0kYyl7dGhpcy5fY2hlY2tOb0ludGVycG9sYXRpb24odCxpLG8pO2xldCBzPXRoaXMuX3N0cmlwQ29tbWVudHModCksYT10aGlzLl9sZXhlci50b2tlbml6ZShzKSxsPTE7ZSYmKGx8PTIpO2xldCBjPW5ldyBsZih0LGkscixhLGwsdGhpcy5lcnJvcnMsMCkucGFyc2VDaGFpbigpO3JldHVybiBuZXcgZXUoYyx0LGkscix0aGlzLmVycm9ycyl9cGFyc2VCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKTtyZXR1cm4gbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfWNoZWNrU2ltcGxlRXhwcmVzc2lvbih0KXtsZXQgZT1uZXcgSUw7cmV0dXJuIHQudmlzaXQoZSksZS5lcnJvcnN9cGFyc2VTaW1wbGVCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKSxzPXRoaXMuY2hlY2tTaW1wbGVFeHByZXNzaW9uKG8pO3JldHVybiBzLmxlbmd0aD4wJiZ0aGlzLl9yZXBvcnRFcnJvcihgSG9zdCBiaW5kaW5nIGV4cHJlc3Npb24gY2Fubm90IGNvbnRhaW4gJHtzLmpvaW4oIiAiKX1gLHQsZSksbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfV9yZXBvcnRFcnJvcih0LGUsaSxyKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBteCh0LGUsaSxyKSl9X3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKXt0aGlzLl9jaGVja05vSW50ZXJwb2xhdGlvbih0LGUscik7bGV0IG89dGhpcy5fc3RyaXBDb21tZW50cyh0KSxzPXRoaXMuX2xleGVyLnRva2VuaXplKG8pO3JldHVybiBuZXcgbGYodCxlLGkscywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKX1wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz10aGlzLl9sZXhlci50b2tlbml6ZShlKTtyZXR1cm4gbmV3IGxmKGUsaSxvLHMsMCx0aGlzLmVycm9ycywwKS5wYXJzZVRlbXBsYXRlQmluZGluZ3Moe3NvdXJjZTp0LHNwYW46bmV3IE9hKHIscit0Lmxlbmd0aCl9KX1wYXJzZUludGVycG9sYXRpb24odCxlLGkscixvPSRjKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmEsb2Zmc2V0czpsfT10aGlzLnNwbGl0SW50ZXJwb2xhdGlvbih0LGUscixvKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDsrK3Upe2xldCBwPXRoaXMuX3N0cmlwQ29tbWVudHMoYVt1XS50ZXh0KSxoPXRoaXMuX2xleGVyLnRva2VuaXplKHApLGY9bmV3IGxmKHQsZSxpLGgsMCx0aGlzLmVycm9ycyxsW3VdKS5wYXJzZUNoYWluKCk7Yy5wdXNoKGYpfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYXRpb25Bc3Qocy5tYXAodT0+dS50ZXh0KSxjLHQsZSxpKX1wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsZSxpKXtsZXQgcj10aGlzLl9zdHJpcENvbW1lbnRzKHQpLG89dGhpcy5fbGV4ZXIudG9rZW5pemUocikscz1uZXcgbGYodCxlLGksbywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKTtyZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KFsiIiwiIl0sW3NdLHQsZSxpKX1jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KHQsZSxpLHIsbyl7bGV0IHM9bmV3IFNmKDAsaS5sZW5ndGgpLGE9bmV3IFpvKHMscy50b0Fic29sdXRlKG8pLHQsZSk7cmV0dXJuIG5ldyBldShhLGkscixvLHRoaXMuZXJyb3JzKX1zcGxpdEludGVycG9sYXRpb24odCxlLGkscj0kYyl7bGV0IG89W10scz1bXSxhPVtdLGw9aT9mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9MCxpPTAscj0wO2Zvcig7cjxuLmxlbmd0aDspe2xldCBvPW5bcl07aWYoOT09PW8udHlwZSl7bGV0W3MsYV09by5wYXJ0cztlKz1hLmxlbmd0aCxpKz1zLmxlbmd0aH1lbHNle2xldCBzPW8ucGFydHMucmVkdWNlKChhLGwpPT5hK2wubGVuZ3RoLDApO2krPXMsZSs9c310LnNldChpLGUpLHIrK31yZXR1cm4gdH0oaSk6bnVsbCxjPTAsdT0hMSxkPSExLHtzdGFydDpwLGVuZDpofT1yO2Zvcig7Yzx0Lmxlbmd0aDspaWYodSl7bGV0IGY9YyxtPWYrcC5sZW5ndGgsQz10aGlzLl9nZXRJbnRlcnBvbGF0aW9uRW5kSW5kZXgodCxoLG0pO2lmKC0xPT09Qyl7dT0hMSxkPSEwO2JyZWFrfWxldCBfPUMraC5sZW5ndGgseT10LnN1YnN0cmluZyhtLEMpOzA9PT15LnRyaW0oKS5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJCbGFuayBleHByZXNzaW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJwb2xhdGVkIHN0cmluZ3MiLHQsYGF0IGNvbHVtbiAke2N9IGluYCxlKSxzLnB1c2goe3RleHQ6eSxzdGFydDpmLGVuZDpffSk7bGV0IEE9KGw/LmdldChmKT8/ZikrcC5sZW5ndGg7YS5wdXNoKEEpLGM9Xyx1PSExfWVsc2V7bGV0IGY9YztjPXQuaW5kZXhPZihwLGMpLC0xPT09YyYmKGM9dC5sZW5ndGgpO2xldCBtPXQuc3Vic3RyaW5nKGYsYyk7by5wdXNoKHt0ZXh0Om0sc3RhcnQ6ZixlbmQ6Y30pLHU9ITB9aWYoIXUpaWYoZCl7bGV0IGY9b1tvLmxlbmd0aC0xXTtmLnRleHQrPXQuc3Vic3RyaW5nKGMpLGYuZW5kPXQubGVuZ3RofWVsc2Ugby5wdXNoKHt0ZXh0OnQuc3Vic3RyaW5nKGMpLHN0YXJ0OmMsZW5kOnQubGVuZ3RofSk7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zdHJpbmdzPXQsdGhpcy5leHByZXNzaW9ucz1lLHRoaXMub2Zmc2V0cz1pfX0obyxzLGEpfXdyYXBMaXRlcmFsUHJpbWl0aXZlKHQsZSxpKXtsZXQgcj1uZXcgU2YoMCxudWxsPT10PzA6dC5sZW5ndGgpO3JldHVybiBuZXcgZXUobmV3IElzKHIsci50b0Fic29sdXRlKGkpLHQpLHQsZSxpLHRoaXMuZXJyb3JzKX1fc3RyaXBDb21tZW50cyh0KXtsZXQgZT10aGlzLl9jb21tZW50U3RhcnQodCk7cmV0dXJuIG51bGwhPWU/dC5zdWJzdHJpbmcoMCxlKTp0fV9jb21tZW50U3RhcnQodCl7bGV0IGU9bnVsbDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoLTE7aSsrKXtsZXQgcj10LmNoYXJDb2RlQXQoaSksbz10LmNoYXJDb2RlQXQoaSsxKTtpZig0Nz09PXImJjQ3PT1vJiZudWxsPT1lKXJldHVybiBpO2U9PT1yP2U9bnVsbDpudWxsPT1lJiZ1TChyKSYmKGU9cil9cmV0dXJuIG51bGx9X2NoZWNrTm9JbnRlcnBvbGF0aW9uKHQsZSx7c3RhcnQ6aSxlbmQ6cn0pe2xldCBvPS0xLHM9LTE7Zm9yKGxldCBhIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCwwKSlpZigtMT09PW8pdC5zdGFydHNXaXRoKGkpJiYobz1hKTtlbHNlIGlmKHM9dGhpcy5fZ2V0SW50ZXJwb2xhdGlvbkVuZEluZGV4KHQscixhKSxzPi0xKWJyZWFrO28+LTEmJnM+LTEmJnRoaXMuX3JlcG9ydEVycm9yKGBHb3QgaW50ZXJwb2xhdGlvbiAoJHtpfSR7cn0pIHdoZXJlIGV4cHJlc3Npb24gd2FzIGV4cGVjdGVkYCx0LGBhdCBjb2x1bW4gJHtvfSBpbmAsZSl9X2dldEludGVycG9sYXRpb25FbmRJbmRleCh0LGUsaSl7Zm9yKGxldCByIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCxpKSl7aWYodC5zdGFydHNXaXRoKGUscikpcmV0dXJuIHI7aWYodC5zdGFydHNXaXRoKCIvLyIscikpcmV0dXJuIHQuaW5kZXhPZihlLHIpfXJldHVybi0xfSpfZm9yRWFjaFVucXVvdGVkQ2hhcih0LGUpe2xldCBpPW51bGwscj0wO2ZvcihsZXQgbz1lO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyF1TCh0LmNoYXJDb2RlQXQobykpfHxudWxsIT09aSYmaSE9PXN8fHIlMiE9MD9udWxsPT09aSYmKHlpZWxkIG8pOmk9bnVsbD09PWk/czpudWxsLHI9IlxcIj09PXM/cisxOjB9fX0sZGY9KCgpPT57cmV0dXJuKG49ZGZ8fChkZj17fSkpW24uTm9uZT0wXT0iTm9uZSIsbltuLldyaXRhYmxlPTFdPSJXcml0YWJsZSIsZGY7dmFyIG59KSgpLGxmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3RoaXMuaW5wdXQ9dCx0aGlzLmxvY2F0aW9uPWUsdGhpcy5hYnNvbHV0ZU9mZnNldD1pLHRoaXMudG9rZW5zPXIsdGhpcy5wYXJzZUZsYWdzPW8sdGhpcy5lcnJvcnM9cyx0aGlzLm9mZnNldD1hLHRoaXMucnBhcmVuc0V4cGVjdGVkPTAsdGhpcy5yYnJhY2tldHNFeHBlY3RlZD0wLHRoaXMucmJyYWNlc0V4cGVjdGVkPTAsdGhpcy5jb250ZXh0PWRmLk5vbmUsdGhpcy5zb3VyY2VTcGFuQ2FjaGU9bmV3IE1hcCx0aGlzLmluZGV4PTB9cGVlayh0KXtsZXQgZT10aGlzLmluZGV4K3Q7cmV0dXJuIGU8dGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zW2VdOklOfWdldCBuZXh0KCl7cmV0dXJuIHRoaXMucGVlaygwKX1nZXQgYXRFT0YoKXtyZXR1cm4gdGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RofWdldCBpbnB1dEluZGV4KCl7cmV0dXJuIHRoaXMuYXRFT0Y/dGhpcy5jdXJyZW50RW5kSW5kZXg6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50RW5kSW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleD4wP3RoaXMucGVlaygtMSkuZW5kK3RoaXMub2Zmc2V0OjA9PT10aGlzLnRva2Vucy5sZW5ndGg/dGhpcy5pbnB1dC5sZW5ndGgrdGhpcy5vZmZzZXQ6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50QWJzb2x1dGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5hYnNvbHV0ZU9mZnNldCt0aGlzLmlucHV0SW5kZXh9c3Bhbih0LGUpe2xldCBpPXRoaXMuY3VycmVudEVuZEluZGV4O2lmKHZvaWQgMCE9PWUmJmU+dGhpcy5jdXJyZW50RW5kSW5kZXgmJihpPWUpLHQ+aSl7bGV0IHI9aTtpPXQsdD1yfXJldHVybiBuZXcgU2YodCxpKX1zb3VyY2VTcGFuKHQsZSl7bGV0IGk9YCR7dH1AJHt0aGlzLmlucHV0SW5kZXh9OiR7ZX1gO3JldHVybiB0aGlzLnNvdXJjZVNwYW5DYWNoZS5oYXMoaSl8fHRoaXMuc291cmNlU3BhbkNhY2hlLnNldChpLHRoaXMuc3Bhbih0LGUpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCkpLHRoaXMuc291cmNlU3BhbkNhY2hlLmdldChpKX1hZHZhbmNlKCl7dGhpcy5pbmRleCsrfXdpdGhDb250ZXh0KHQsZSl7dGhpcy5jb250ZXh0fD10O2xldCBpPWUoKTtyZXR1cm4gdGhpcy5jb250ZXh0Xj10LGl9Y29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKHQpe3JldHVybiEhdGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpJiYodGhpcy5hZHZhbmNlKCksITApfXBlZWtLZXl3b3JkTGV0KCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRMZXQoKX1wZWVrS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRBcygpfWV4cGVjdENoYXJhY3Rlcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0KXx8dGhpcy5lcnJvcihgTWlzc2luZyBleHBlY3RlZCAke1N0cmluZy5mcm9tQ2hhckNvZGUodCl9YCl9Y29uc3VtZU9wdGlvbmFsT3BlcmF0b3IodCl7cmV0dXJuISF0aGlzLm5leHQuaXNPcGVyYXRvcih0KSYmKHRoaXMuYWR2YW5jZSgpLCEwKX1leHBlY3RPcGVyYXRvcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKHQpfHx0aGlzLmVycm9yKGBNaXNzaW5nIGV4cGVjdGVkIG9wZXJhdG9yICR7dH1gKX1wcmV0dHlQcmludFRva2VuKHQpe3JldHVybiB0PT09SU4/ImVuZCBvZiBpbnB1dCI6YHRva2VuICR7dH1gfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKXtsZXQgdD10aGlzLm5leHQ7cmV0dXJuIHQuaXNJZGVudGlmaWVyKCl8fHQuaXNLZXl3b3JkKCk/KHRoaXMuYWR2YW5jZSgpLHQudG9TdHJpbmcoKSk6KHQuaXNQcml2YXRlSWRlbnRpZmllcigpP3RoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodCwiZXhwZWN0ZWQgaWRlbnRpZmllciBvciBrZXl3b3JkIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIgb3Iga2V5d29yZGApLG51bGwpfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpe2xldCB0PXRoaXMubmV4dDtyZXR1cm4gdC5pc0lkZW50aWZpZXIoKXx8dC5pc0tleXdvcmQoKXx8dC5pc1N0cmluZygpPyh0aGlzLmFkdmFuY2UoKSx0LnRvU3RyaW5nKCkpOih0LmlzUHJpdmF0ZUlkZW50aWZpZXIoKT90aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsImV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQgb3Igc3RyaW5nIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQsIG9yIHN0cmluZ2ApLCIiKX1wYXJzZUNoYWluKCl7bGV0IHQ9W10sZT10aGlzLmlucHV0SW5kZXg7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aDspe2xldCBpPXRoaXMucGFyc2VQaXBlKCk7aWYodC5wdXNoKGkpLHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDU5KSlmb3IoMSZ0aGlzLnBhcnNlRmxhZ3N8fHRoaXMuZXJyb3IoIkJpbmRpbmcgZXhwcmVzc2lvbiBjYW5ub3QgY29udGFpbiBjaGFpbmVkIGV4cHJlc3Npb24iKTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OSk7KTtlbHNlIGlmKHRoaXMuaW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoKXtsZXQgcj10aGlzLmluZGV4O2lmKHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW4gJyR7dGhpcy5uZXh0fSdgKSx0aGlzLmluZGV4PT09cilicmVha319aWYoMD09PXQubGVuZ3RoKXtsZXQgaT10aGlzLm9mZnNldCxyPXRoaXMub2Zmc2V0K3RoaXMuaW5wdXQubGVuZ3RoO3JldHVybiBuZXcgbmEodGhpcy5zcGFuKGksciksdGhpcy5zb3VyY2VTcGFuKGkscikpfXJldHVybiAxPT10Lmxlbmd0aD90WzBdOm5ldyBfeCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQpfXBhcnNlUGlwZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKXsxJnRoaXMucGFyc2VGbGFncyYmdGhpcy5lcnJvcigiQ2Fubm90IGhhdmUgYSBwaXBlIGluIGFuIGFjdGlvbiBleHByZXNzaW9uIik7ZG97bGV0IG8scyxpPXRoaXMuaW5wdXRJbmRleCxyPXRoaXMuZXhwZWN0SWRlbnRpZmllck9yS2V5d29yZCgpO251bGwhPT1yP289dGhpcy5zb3VyY2VTcGFuKGkpOihyPSIiLHM9LTEhPT10aGlzLm5leHQuaW5kZXg/dGhpcy5uZXh0LmluZGV4OnRoaXMuaW5wdXQubGVuZ3RoK3RoaXMub2Zmc2V0LG89bmV3IFNmKHMscykudG9BYnNvbHV0ZSh0aGlzLmFic29sdXRlT2Zmc2V0KSk7bGV0IGE9W107Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7KWEucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtlPW5ldyBSMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQscyksZSxyLGEsbyl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKX1yZXR1cm4gZX1wYXJzZUV4cHJlc3Npb24oKXtyZXR1cm4gdGhpcy5wYXJzZUNvbmRpdGlvbmFsKCl9cGFyc2VDb25kaXRpb25hbCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VMb2dpY2FsT3IoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI/Iikpe2xldCByLGk9dGhpcy5wYXJzZVBpcGUoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpcj10aGlzLnBhcnNlUGlwZSgpO2Vsc2V7bGV0IHM9dGhpcy5pbnB1dC5zdWJzdHJpbmcodCx0aGlzLmlucHV0SW5kZXgpO3RoaXMuZXJyb3IoYENvbmRpdGlvbmFsIGV4cHJlc3Npb24gJHtzfSByZXF1aXJlcyBhbGwgMyBleHByZXNzaW9uc2ApLHI9bmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpfXJldHVybiBuZXcgdngodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlLGkscil9cmV0dXJuIGV9cGFyc2VMb2dpY2FsT3IoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlTG9naWNhbEFuZCgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifHwiKTspe2xldCBpPXRoaXMucGFyc2VMb2dpY2FsQW5kKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwifHwiLGUsaSl9cmV0dXJuIGV9cGFyc2VMb2dpY2FsQW5kKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCImJiIpOyl7bGV0IGk9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwiJiYiLGUsaSl9cmV0dXJuIGV9cGFyc2VOdWxsaXNoQ29hbGVzY2luZygpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFcXVhbGl0eSgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPz8iKTspe2xldCBpPXRoaXMucGFyc2VFcXVhbGl0eSgpO2U9bmV3IGhsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksIj8/IixlLGkpfXJldHVybiBlfXBhcnNlRXF1YWxpdHkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlUmVsYXRpb25hbCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIj09IjpjYXNlIj09PSI6Y2FzZSIhPSI6Y2FzZSIhPT0iOnRoaXMuYWR2YW5jZSgpO2xldCByPXRoaXMucGFyc2VSZWxhdGlvbmFsKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VSZWxhdGlvbmFsKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZUFkZGl0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiPCI6Y2FzZSI+IjpjYXNlIjw9IjpjYXNlIj49Ijp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlQWRkaXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZUFkZGl0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU11bHRpcGxpY2F0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiKyI6Y2FzZSItIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlTXVsdGlwbGljYXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZU11bHRpcGxpY2F0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByZWZpeCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIioiOmNhc2UiJSI6Y2FzZSIvIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlUHJlZml4KCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VQcmVmaXgoKXtpZih0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3Ipe2xldCBpLHQ9dGhpcy5pbnB1dEluZGV4O3N3aXRjaCh0aGlzLm5leHQuc3RyVmFsdWUpe2Nhc2UiKyI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLGNjLmNyZWF0ZVBsdXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKTtjYXNlIi0iOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSxjYy5jcmVhdGVNaW51cyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpO2Nhc2UiISI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLG5ldyB3eCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpfX1yZXR1cm4gdGhpcy5wYXJzZUNhbGxDaGFpbigpfXBhcnNlQ2FsbENoYWluKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByaW1hcnkoKTtmb3IoOzspaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDYpKWU9dGhpcy5wYXJzZUFjY2Vzc01lbWJlcihlLHQsITEpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPy4iKSllPXRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQwKT90aGlzLnBhcnNlQ2FsbChlLHQsITApOnRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKT90aGlzLnBhcnNlS2V5ZWRSZWFkT3JXcml0ZShlLHQsITApOnRoaXMucGFyc2VBY2Nlc3NNZW1iZXIoZSx0LCEwKTtlbHNlIGlmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKSllPXRoaXMucGFyc2VLZXllZFJlYWRPcldyaXRlKGUsdCwhMSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0MCkpZT10aGlzLnBhcnNlQ2FsbChlLHQsITEpO2Vsc2V7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIiEiKSlyZXR1cm4gZTtlPW5ldyBNeCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfX1wYXJzZVByaW1hcnkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDApKXt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBlPXRoaXMucGFyc2VQaXBlKCk7cmV0dXJuIHRoaXMucnBhcmVuc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLGV9aWYodGhpcy5uZXh0LmlzS2V5d29yZE51bGwoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksbnVsbCk7aWYodGhpcy5uZXh0LmlzS2V5d29yZFVuZGVmaW5lZCgpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgSXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSx2b2lkIDApO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUcnVlKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCEwKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkRmFsc2UoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksITEpO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUaGlzKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBneCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSkpe3RoaXMucmJyYWNrZXRzRXhwZWN0ZWQrKztsZXQgZT10aGlzLnBhcnNlRXhwcmVzc2lvbkxpc3QoOTMpO3JldHVybiB0aGlzLnJicmFja2V0c0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoOTMpLG5ldyBPMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc0NoYXJhY3RlcihmcCkpcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsTWFwKCk7aWYodGhpcy5uZXh0LmlzSWRlbnRpZmllcigpKXJldHVybiB0aGlzLnBhcnNlQWNjZXNzTWVtYmVyKG5ldyBFZih0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSx0LCExKTtpZih0aGlzLm5leHQuaXNOdW1iZXIoKSl7bGV0IGU9dGhpcy5uZXh0LnRvTnVtYmVyKCk7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc1N0cmluZygpKXtsZXQgZT10aGlzLm5leHQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksZSl9cmV0dXJuIHRoaXMubmV4dC5pc1ByaXZhdGVJZGVudGlmaWVyKCk/KHRoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodGhpcy5uZXh0LG51bGwpLG5ldyBuYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSk6dGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RoPyh0aGlzLmVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uOiAke3RoaXMuaW5wdXR9YCksbmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpKToodGhpcy5lcnJvcihgVW5leHBlY3RlZCB0b2tlbiAke3RoaXMubmV4dH1gKSxuZXcgbmEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSkpfXBhcnNlRXhwcmVzc2lvbkxpc3QodCl7bGV0IGU9W107ZG97aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpKWJyZWFrO2UucHVzaCh0aGlzLnBhcnNlUGlwZSgpKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3JldHVybiBlfXBhcnNlTGl0ZXJhbE1hcCgpe2xldCB0PVtdLGU9W10saT10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5leHBlY3RDaGFyYWN0ZXIoZnApLCF0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0dSkpe3RoaXMucmJyYWNlc0V4cGVjdGVkKys7ZG97bGV0IHI9dGhpcy5pbnB1dEluZGV4LG89dGhpcy5uZXh0LmlzU3RyaW5nKCkscz10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpO2lmKHQucHVzaCh7a2V5OnMscXVvdGVkOm99KSxvKXRoaXMuZXhwZWN0Q2hhcmFjdGVyKDU4KSxlLnB1c2godGhpcy5wYXJzZVBpcGUoKSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpZS5wdXNoKHRoaXMucGFyc2VQaXBlKCkpO2Vsc2V7bGV0IGE9dGhpcy5zcGFuKHIpLGw9dGhpcy5zb3VyY2VTcGFuKHIpO2UucHVzaChuZXcgb3UoYSxsLGwsbmV3IEVmKGEsbCkscykpfX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3RoaXMucmJyYWNlc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIodHUpfXJldHVybiBuZXcgQ3godGhpcy5zcGFuKGkpLHRoaXMuc291cmNlU3BhbihpKSx0LGUpfXBhcnNlQWNjZXNzTWVtYmVyKHQsZSxpKXtsZXQgYSxyPXRoaXMuaW5wdXRJbmRleCxvPXRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9PntsZXQgbD10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKT8/IiI7cmV0dXJuIDA9PT1sLmxlbmd0aCYmdGhpcy5lcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciBmb3IgcHJvcGVydHkgYWNjZXNzIix0LnNwYW4uZW5kKSxsfSkscz10aGlzLnNvdXJjZVNwYW4ocik7aWYoaSl0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKT8odGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxhPW5ldyBuYSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpKSk6YT1uZXcgYngodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSxzLHQsbyk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKSl7aWYoISgxJnRoaXMucGFyc2VGbGFncykpcmV0dXJuIHRoaXMuZXJyb3IoIkJpbmRpbmdzIGNhbm5vdCBjb250YWluIGFzc2lnbm1lbnRzIiksbmV3IG5hKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkpO2xldCBsPXRoaXMucGFyc2VDb25kaXRpb25hbCgpO2E9bmV3IHl4KHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkscyx0LG8sbCl9ZWxzZSBhPW5ldyBvdSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHMsdCxvKTtyZXR1cm4gYX1wYXJzZUNhbGwodCxlLGkpe2xldCByPXRoaXMuaW5wdXRJbmRleDt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBvPXRoaXMucGFyc2VDYWxsQXJndW1lbnRzKCkscz10aGlzLnNwYW4ocix0aGlzLmlucHV0SW5kZXgpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCk7dGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLHRoaXMucnBhcmVuc0V4cGVjdGVkLS07bGV0IGE9dGhpcy5zcGFuKGUpLGw9dGhpcy5zb3VyY2VTcGFuKGUpO3JldHVybiBpP25ldyBrMChhLGwsdCxvLHMpOm5ldyBicChhLGwsdCxvLHMpfWNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKXtyZXR1cm4gMiZ0aGlzLnBhcnNlRmxhZ3MmJnRoaXMubmV4dC5pc09wZXJhdG9yKCIhIikmJnRoaXMucGVlaygxKS5pc09wZXJhdG9yKCI9Iik/KHRoaXMuYWR2YW5jZSgpLHRoaXMuYWR2YW5jZSgpLCEwKTp0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI9Iil9cGFyc2VDYWxsQXJndW1lbnRzKCl7aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKDQxKSlyZXR1cm5bXTtsZXQgdD1bXTtkb3t0LnB1c2godGhpcy5wYXJzZVBpcGUoKSl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTtyZXR1cm4gdH1leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKXtsZXQgdD0iIixlPSExLGk9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7ZG97dCs9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKSxlPXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIi0iKSxlJiYodCs9Ii0iKX13aGlsZShlKTtyZXR1cm57c291cmNlOnQsc3BhbjpuZXcgT2EoaSxpK3QubGVuZ3RoKX19cGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQpe2xldCBlPVtdO2ZvcihlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KSk7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGg7KXtsZXQgaT10aGlzLnBhcnNlTGV0QmluZGluZygpO2lmKGkpZS5wdXNoKGkpO2Vsc2V7bGV0IHI9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxvPXRoaXMucGFyc2VBc0JpbmRpbmcocik7bz9lLnB1c2gobyk6KHIuc291cmNlPXQuc291cmNlK3Iuc291cmNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Iuc291cmNlLnN1YnN0cmluZygxKSxlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyhyKSkpfXRoaXMuY29uc3VtZVN0YXRlbWVudFRlcm1pbmF0b3IoKX1yZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnRlbXBsYXRlQmluZGluZ3M9dCx0aGlzLndhcm5pbmdzPWUsdGhpcy5lcnJvcnM9aX19KGUsW10sdGhpcy5lcnJvcnMpfXBhcnNlS2V5ZWRSZWFkT3JXcml0ZSh0LGUsaSl7cmV0dXJuIHRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9Pnt0aGlzLnJicmFja2V0c0V4cGVjdGVkKys7bGV0IHI9dGhpcy5wYXJzZVBpcGUoKTtpZihyIGluc3RhbmNlb2YgbmEmJnRoaXMuZXJyb3IoIktleSBhY2Nlc3MgY2Fubm90IGJlIGVtcHR5IiksdGhpcy5yYnJhY2tldHNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDkzKSwhdGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpKXJldHVybiBpP25ldyBQMCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscik6bmV3IEkwKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSksdCxyKTtpZighaSl7bGV0IG89dGhpcy5wYXJzZUNvbmRpdGlvbmFsKCk7cmV0dXJuIG5ldyB4eCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscixvKX1yZXR1cm4gdGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxuZXcgbmEodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSl9KX1wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KXtsZXQgZT1bXTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7bGV0IGk9dGhpcy5nZXREaXJlY3RpdmVCb3VuZFRhcmdldCgpLHI9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQsbz10aGlzLnBhcnNlQXNCaW5kaW5nKHQpO298fCh0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCkscj10aGlzLmN1cnJlbnRBYnNvbHV0ZU9mZnNldCk7bGV0IHM9bmV3IE9hKHQuc3Bhbi5zdGFydCxyKTtyZXR1cm4gZS5wdXNoKG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fShzLHQsaSkpLG8mJmUucHVzaChvKSxlfWdldERpcmVjdGl2ZUJvdW5kVGFyZ2V0KCl7aWYodGhpcy5uZXh0PT09SU58fHRoaXMucGVla0tleXdvcmRBcygpfHx0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5wYXJzZVBpcGUoKSx7c3RhcnQ6ZSxlbmQ6aX09dC5zcGFuLHI9dGhpcy5pbnB1dC5zdWJzdHJpbmcoZSxpKTtyZXR1cm4gbmV3IGV1KHQscix0aGlzLmxvY2F0aW9uLHRoaXMuYWJzb2x1dGVPZmZzZXQrZSx0aGlzLmVycm9ycyl9cGFyc2VBc0JpbmRpbmcodCl7aWYoIXRoaXMucGVla0tleXdvcmRBcygpKXJldHVybiBudWxsO3RoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCk7dGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpO2xldCBpPW5ldyBPYSh0LnNwYW4uc3RhcnQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3goaSxlLHQpfXBhcnNlTGV0QmluZGluZygpe2lmKCF0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7dGhpcy5hZHZhbmNlKCk7bGV0IGU9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxpPW51bGw7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpJiYoaT10aGlzLmV4cGVjdFRlbXBsYXRlQmluZGluZ0tleSgpKSx0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCk7bGV0IHI9bmV3IE9hKHQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3gocixlLGkpfWNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCl7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTkpfHx0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCl9ZXJyb3IodCxlPW51bGwpe3RoaXMuZXJyb3JzLnB1c2gobmV3IG14KHQsdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dChlKSx0aGlzLmxvY2F0aW9uKSksdGhpcy5za2lwKCl9bG9jYXRpb25UZXh0KHQ9bnVsbCl7cmV0dXJuIG51bGw9PXQmJih0PXRoaXMuaW5kZXgpLHQ8dGhpcy50b2tlbnMubGVuZ3RoP2BhdCBjb2x1bW4gJHt0aGlzLnRva2Vuc1t0XS5pbmRleCsxfSBpbmA6ImF0IHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24ifV9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsZSl7bGV0IGk9YFByaXZhdGUgaWRlbnRpZmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIFVuZXhwZWN0ZWQgcHJpdmF0ZSBpZGVudGlmaWVyOiAke3R9YDtudWxsIT09ZSYmKGkrPWAsICR7ZX1gKSx0aGlzLmVycm9yKGkpfXNraXAoKXtsZXQgdD10aGlzLm5leHQ7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aCYmIXQuaXNDaGFyYWN0ZXIoNTkpJiYhdC5pc09wZXJhdG9yKCJ8IikmJih0aGlzLnJwYXJlbnNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoNDEpKSYmKHRoaXMucmJyYWNlc0V4cGVjdGVkPD0wfHwhdC5pc0NoYXJhY3Rlcih0dSkpJiYodGhpcy5yYnJhY2tldHNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoOTMpKSYmISh0aGlzLmNvbnRleHQmZGYuV3JpdGFibGUmJnQuaXNPcGVyYXRvcigiPSIpKTspdGhpcy5uZXh0LmlzRXJyb3IoKSYmdGhpcy5lcnJvcnMucHVzaChuZXcgbXgodGhpcy5uZXh0LnRvU3RyaW5nKCksdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dCgpLHRoaXMubG9jYXRpb24pKSx0aGlzLmFkdmFuY2UoKSx0PXRoaXMubmV4dH19LElMPWNsYXNzIGV4dGVuZHMgZ0x7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZXJyb3JzPVtdfXZpc2l0UGlwZSgpe3RoaXMuZXJyb3JzLnB1c2goInBpcGVzIil9fSxUZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlU3Bhbj10LHRoaXMuaTE4bj1lfX0sRjA9Y2xhc3MgZXh0ZW5kcyBUZntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnRva2Vucz1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRUZXh0KHRoaXMsZSl9fSxOMD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcihyLHMpLHRoaXMuc3dpdGNoVmFsdWU9dCx0aGlzLnR5cGU9ZSx0aGlzLmNhc2VzPWksdGhpcy5zd2l0Y2hWYWx1ZVNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uKHRoaXMsZSl9fSxSTD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3N1cGVyKGksYSksdGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy52YWx1ZVRva2Vucz1zfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRBdHRyaWJ1dGUodGhpcyxlKX19LEF4PWNsYXNzIGV4dGVuZHMgVGZ7Y29uc3RydWN0b3IodCxlLGkscixvLHM9bnVsbCxhKXtzdXBlcihyLGEpLHRoaXMubmFtZT10LHRoaXMuYXR0cnM9ZSx0aGlzLmNoaWxkcmVuPWksdGhpcy5zdGFydFNvdXJjZVNwYW49byx0aGlzLmVuZFNvdXJjZVNwYW49c312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RWxlbWVudCh0aGlzLGUpfX0sVjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdENvbW1lbnQodGhpcyxlKX19O2Z1bmN0aW9uIGN1KG4sdCxlPW51bGwpe2xldCBpPVtdLHI9bi52aXNpdD9vPT5uLnZpc2l0KG8sZSl8fG8udmlzaXQobixlKTpvPT5vLnZpc2l0KG4sZSk7cmV0dXJuIHQuZm9yRWFjaChvPT57bGV0IHM9cihvKTtzJiZpLnB1c2gocyl9KSxpfXZhciBIMT17QUVsaWc6Ilx4YzYiLEFNUDoiJiIsYW1wOiImIixBYWN1dGU6Ilx4YzEiLEFicmV2ZToiXHUwMTAyIixBY2lyYzoiXHhjMiIsQWN5OiJcdTA0MTAiLEFmcjoiXHVkODM1XHVkZDA0IixBZ3JhdmU6Ilx4YzAiLEFscGhhOiJcdTAzOTEiLEFtYWNyOiJcdTAxMDAiLEFuZDoiXHUyYTUzIixBb2dvbjoiXHUwMTA0IixBb3BmOiJcdWQ4MzVcdWRkMzgiLEFwcGx5RnVuY3Rpb246Ilx1MjA2MSIsYWY6Ilx1MjA2MSIsQXJpbmc6Ilx4YzUiLGFuZ3N0OiJceGM1IixBc2NyOiJcdWQ4MzVcdWRjOWMiLEFzc2lnbjoiXHUyMjU0Iixjb2xvbmU6Ilx1MjI1NCIsY29sb25lcToiXHUyMjU0IixBdGlsZGU6Ilx4YzMiLEF1bWw6Ilx4YzQiLEJhY2tzbGFzaDoiXHUyMjE2IixzZXRtaW51czoiXHUyMjE2IixzZXRtbjoiXHUyMjE2IixzbWFsbHNldG1pbnVzOiJcdTIyMTYiLHNzZXRtbjoiXHUyMjE2IixCYXJ2OiJcdTJhZTciLEJhcndlZDoiXHUyMzA2Iixkb3VibGViYXJ3ZWRnZToiXHUyMzA2IixCY3k6Ilx1MDQxMSIsQmVjYXVzZToiXHUyMjM1IixiZWNhdXM6Ilx1MjIzNSIsYmVjYXVzZToiXHUyMjM1IixCZXJub3VsbGlzOiJcdTIxMmMiLEJzY3I6Ilx1MjEyYyIsYmVybm91OiJcdTIxMmMiLEJldGE6Ilx1MDM5MiIsQmZyOiJcdWQ4MzVcdWRkMDUiLEJvcGY6Ilx1ZDgzNVx1ZGQzOSIsQnJldmU6Ilx1MDJkOCIsYnJldmU6Ilx1MDJkOCIsQnVtcGVxOiJcdTIyNGUiLEh1bXBEb3duSHVtcDoiXHUyMjRlIixidW1wOiJcdTIyNGUiLENIY3k6Ilx1MDQyNyIsQ09QWToiXHhhOSIsY29weToiXHhhOSIsQ2FjdXRlOiJcdTAxMDYiLENhcDoiXHUyMmQyIixDYXBpdGFsRGlmZmVyZW50aWFsRDoiXHUyMTQ1IixERDoiXHUyMTQ1IixDYXlsZXlzOiJcdTIxMmQiLENmcjoiXHUyMTJkIixDY2Fyb246Ilx1MDEwYyIsQ2NlZGlsOiJceGM3IixDY2lyYzoiXHUwMTA4IixDY29uaW50OiJcdTIyMzAiLENkb3Q6Ilx1MDEwYSIsQ2VkaWxsYToiXHhiOCIsY2VkaWw6Ilx4YjgiLENlbnRlckRvdDoiXHhiNyIsY2VudGVyZG90OiJceGI3IixtaWRkb3Q6Ilx4YjciLENoaToiXHUwM2E3IixDaXJjbGVEb3Q6Ilx1MjI5OSIsb2RvdDoiXHUyMjk5IixDaXJjbGVNaW51czoiXHUyMjk2IixvbWludXM6Ilx1MjI5NiIsQ2lyY2xlUGx1czoiXHUyMjk1IixvcGx1czoiXHUyMjk1IixDaXJjbGVUaW1lczoiXHUyMjk3IixvdGltZXM6Ilx1MjI5NyIsQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzIiLGN3Y29uaW50OiJcdTIyMzIiLENsb3NlQ3VybHlEb3VibGVRdW90ZToiXHUyMDFkIixyZHF1bzoiXHUyMDFkIixyZHF1b3I6Ilx1MjAxZCIsQ2xvc2VDdXJseVF1b3RlOiJcdTIwMTkiLHJzcXVvOiJcdTIwMTkiLHJzcXVvcjoiXHUyMDE5IixDb2xvbjoiXHUyMjM3IixQcm9wb3J0aW9uOiJcdTIyMzciLENvbG9uZToiXHUyYTc0IixDb25ncnVlbnQ6Ilx1MjI2MSIsZXF1aXY6Ilx1MjI2MSIsQ29uaW50OiJcdTIyMmYiLERvdWJsZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjJmIixDb250b3VySW50ZWdyYWw6Ilx1MjIyZSIsY29uaW50OiJcdTIyMmUiLG9pbnQ6Ilx1MjIyZSIsQ29wZjoiXHUyMTAyIixjb21wbGV4ZXM6Ilx1MjEwMiIsQ29wcm9kdWN0OiJcdTIyMTAiLGNvcHJvZDoiXHUyMjEwIixDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzMiLGF3Y29uaW50OiJcdTIyMzMiLENyb3NzOiJcdTJhMmYiLENzY3I6Ilx1ZDgzNVx1ZGM5ZSIsQ3VwOiJcdTIyZDMiLEN1cENhcDoiXHUyMjRkIixhc3ltcGVxOiJcdTIyNGQiLEREb3RyYWhkOiJcdTI5MTEiLERKY3k6Ilx1MDQwMiIsRFNjeToiXHUwNDA1IixEWmN5OiJcdTA0MGYiLERhZ2dlcjoiXHUyMDIxIixkZGFnZ2VyOiJcdTIwMjEiLERhcnI6Ilx1MjFhMSIsRGFzaHY6Ilx1MmFlNCIsRG91YmxlTGVmdFRlZToiXHUyYWU0IixEY2Fyb246Ilx1MDEwZSIsRGN5OiJcdTA0MTQiLERlbDoiXHUyMjA3IixuYWJsYToiXHUyMjA3IixEZWx0YToiXHUwMzk0IixEZnI6Ilx1ZDgzNVx1ZGQwNyIsRGlhY3JpdGljYWxBY3V0ZToiXHhiNCIsYWN1dGU6Ilx4YjQiLERpYWNyaXRpY2FsRG90OiJcdTAyZDkiLGRvdDoiXHUwMmQ5IixEaWFjcml0aWNhbERvdWJsZUFjdXRlOiJcdTAyZGQiLGRibGFjOiJcdTAyZGQiLERpYWNyaXRpY2FsR3JhdmU6ImAiLGdyYXZlOiJgIixEaWFjcml0aWNhbFRpbGRlOiJcdTAyZGMiLHRpbGRlOiJcdTAyZGMiLERpYW1vbmQ6Ilx1MjJjNCIsZGlhbToiXHUyMmM0IixkaWFtb25kOiJcdTIyYzQiLERpZmZlcmVudGlhbEQ6Ilx1MjE0NiIsZGQ6Ilx1MjE0NiIsRG9wZjoiXHVkODM1XHVkZDNiIixEb3Q6Ilx4YTgiLERvdWJsZURvdDoiXHhhOCIsZGllOiJceGE4Iix1bWw6Ilx4YTgiLERvdERvdDoiXHUyMGRjIixEb3RFcXVhbDoiXHUyMjUwIixkb3RlcToiXHUyMjUwIixlc2RvdDoiXHUyMjUwIixEb3VibGVEb3duQXJyb3c6Ilx1MjFkMyIsRG93bmFycm93OiJcdTIxZDMiLGRBcnI6Ilx1MjFkMyIsRG91YmxlTGVmdEFycm93OiJcdTIxZDAiLExlZnRhcnJvdzoiXHUyMWQwIixsQXJyOiJcdTIxZDAiLERvdWJsZUxlZnRSaWdodEFycm93OiJcdTIxZDQiLExlZnRyaWdodGFycm93OiJcdTIxZDQiLGhBcnI6Ilx1MjFkNCIsaWZmOiJcdTIxZDQiLERvdWJsZUxvbmdMZWZ0QXJyb3c6Ilx1MjdmOCIsTG9uZ2xlZnRhcnJvdzoiXHUyN2Y4Iix4bEFycjoiXHUyN2Y4IixEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmYSIsTG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZmEiLHhoQXJyOiJcdTI3ZmEiLERvdWJsZUxvbmdSaWdodEFycm93OiJcdTI3ZjkiLExvbmdyaWdodGFycm93OiJcdTI3ZjkiLHhyQXJyOiJcdTI3ZjkiLERvdWJsZVJpZ2h0QXJyb3c6Ilx1MjFkMiIsSW1wbGllczoiXHUyMWQyIixSaWdodGFycm93OiJcdTIxZDIiLHJBcnI6Ilx1MjFkMiIsRG91YmxlUmlnaHRUZWU6Ilx1MjJhOCIsdkRhc2g6Ilx1MjJhOCIsRG91YmxlVXBBcnJvdzoiXHUyMWQxIixVcGFycm93OiJcdTIxZDEiLHVBcnI6Ilx1MjFkMSIsRG91YmxlVXBEb3duQXJyb3c6Ilx1MjFkNSIsVXBkb3duYXJyb3c6Ilx1MjFkNSIsdkFycjoiXHUyMWQ1IixEb3VibGVWZXJ0aWNhbEJhcjoiXHUyMjI1IixwYXI6Ilx1MjIyNSIscGFyYWxsZWw6Ilx1MjIyNSIsc2hvcnRwYXJhbGxlbDoiXHUyMjI1IixzcGFyOiJcdTIyMjUiLERvd25BcnJvdzoiXHUyMTkzIixTaG9ydERvd25BcnJvdzoiXHUyMTkzIixkYXJyOiJcdTIxOTMiLGRvd25hcnJvdzoiXHUyMTkzIixEb3duQXJyb3dCYXI6Ilx1MjkxMyIsRG93bkFycm93VXBBcnJvdzoiXHUyMWY1IixkdWFycjoiXHUyMWY1IixEb3duQnJldmU6Ilx1MDMxMSIsRG93bkxlZnRSaWdodFZlY3RvcjoiXHUyOTUwIixEb3duTGVmdFRlZVZlY3RvcjoiXHUyOTVlIixEb3duTGVmdFZlY3RvcjoiXHUyMWJkIixsZWZ0aGFycG9vbmRvd246Ilx1MjFiZCIsbGhhcmQ6Ilx1MjFiZCIsRG93bkxlZnRWZWN0b3JCYXI6Ilx1Mjk1NiIsRG93blJpZ2h0VGVlVmVjdG9yOiJcdTI5NWYiLERvd25SaWdodFZlY3RvcjoiXHUyMWMxIixyaGFyZDoiXHUyMWMxIixyaWdodGhhcnBvb25kb3duOiJcdTIxYzEiLERvd25SaWdodFZlY3RvckJhcjoiXHUyOTU3IixEb3duVGVlOiJcdTIyYTQiLHRvcDoiXHUyMmE0IixEb3duVGVlQXJyb3c6Ilx1MjFhNyIsbWFwc3RvZG93bjoiXHUyMWE3IixEc2NyOiJcdWQ4MzVcdWRjOWYiLERzdHJvazoiXHUwMTEwIixFTkc6Ilx1MDE0YSIsRVRIOiJceGQwIixFYWN1dGU6Ilx4YzkiLEVjYXJvbjoiXHUwMTFhIixFY2lyYzoiXHhjYSIsRWN5OiJcdTA0MmQiLEVkb3Q6Ilx1MDExNiIsRWZyOiJcdWQ4MzVcdWRkMDgiLEVncmF2ZToiXHhjOCIsRWxlbWVudDoiXHUyMjA4IixpbjoiXHUyMjA4Iixpc2luOiJcdTIyMDgiLGlzaW52OiJcdTIyMDgiLEVtYWNyOiJcdTAxMTIiLEVtcHR5U21hbGxTcXVhcmU6Ilx1MjVmYiIsRW1wdHlWZXJ5U21hbGxTcXVhcmU6Ilx1MjVhYiIsRW9nb246Ilx1MDExOCIsRW9wZjoiXHVkODM1XHVkZDNjIixFcHNpbG9uOiJcdTAzOTUiLEVxdWFsOiJcdTJhNzUiLEVxdWFsVGlsZGU6Ilx1MjI0MiIsZXFzaW06Ilx1MjI0MiIsZXNpbToiXHUyMjQyIixFcXVpbGlicml1bToiXHUyMWNjIixyaWdodGxlZnRoYXJwb29uczoiXHUyMWNjIixybGhhcjoiXHUyMWNjIixFc2NyOiJcdTIxMzAiLGV4cGVjdGF0aW9uOiJcdTIxMzAiLEVzaW06Ilx1MmE3MyIsRXRhOiJcdTAzOTciLEV1bWw6Ilx4Y2IiLEV4aXN0czoiXHUyMjAzIixleGlzdDoiXHUyMjAzIixFeHBvbmVudGlhbEU6Ilx1MjE0NyIsZWU6Ilx1MjE0NyIsZXhwb25lbnRpYWxlOiJcdTIxNDciLEZjeToiXHUwNDI0IixGZnI6Ilx1ZDgzNVx1ZGQwOSIsRmlsbGVkU21hbGxTcXVhcmU6Ilx1MjVmYyIsRmlsbGVkVmVyeVNtYWxsU3F1YXJlOiJcdTI1YWEiLGJsYWNrc3F1YXJlOiJcdTI1YWEiLHNxdWFyZjoiXHUyNWFhIixzcXVmOiJcdTI1YWEiLEZvcGY6Ilx1ZDgzNVx1ZGQzZCIsRm9yQWxsOiJcdTIyMDAiLGZvcmFsbDoiXHUyMjAwIixGb3VyaWVydHJmOiJcdTIxMzEiLEZzY3I6Ilx1MjEzMSIsR0pjeToiXHUwNDAzIixHVDoiPiIsZ3Q6Ij4iLEdhbW1hOiJcdTAzOTMiLEdhbW1hZDoiXHUwM2RjIixHYnJldmU6Ilx1MDExZSIsR2NlZGlsOiJcdTAxMjIiLEdjaXJjOiJcdTAxMWMiLEdjeToiXHUwNDEzIixHZG90OiJcdTAxMjAiLEdmcjoiXHVkODM1XHVkZDBhIixHZzoiXHUyMmQ5IixnZ2c6Ilx1MjJkOSIsR29wZjoiXHVkODM1XHVkZDNlIixHcmVhdGVyRXF1YWw6Ilx1MjI2NSIsZ2U6Ilx1MjI2NSIsZ2VxOiJcdTIyNjUiLEdyZWF0ZXJFcXVhbExlc3M6Ilx1MjJkYiIsZ2VsOiJcdTIyZGIiLGd0cmVxbGVzczoiXHUyMmRiIixHcmVhdGVyRnVsbEVxdWFsOiJcdTIyNjciLGdFOiJcdTIyNjciLGdlcXE6Ilx1MjI2NyIsR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMiIsR3JlYXRlckxlc3M6Ilx1MjI3NyIsZ2w6Ilx1MjI3NyIsZ3RybGVzczoiXHUyMjc3IixHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlIixnZXFzbGFudDoiXHUyYTdlIixnZXM6Ilx1MmE3ZSIsR3JlYXRlclRpbGRlOiJcdTIyNzMiLGdzaW06Ilx1MjI3MyIsZ3Ryc2ltOiJcdTIyNzMiLEdzY3I6Ilx1ZDgzNVx1ZGNhMiIsR3Q6Ilx1MjI2YiIsTmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MjI2YiIsZ2c6Ilx1MjI2YiIsSEFSRGN5OiJcdTA0MmEiLEhhY2VrOiJcdTAyYzciLGNhcm9uOiJcdTAyYzciLEhhdDoiXiIsSGNpcmM6Ilx1MDEyNCIsSGZyOiJcdTIxMGMiLFBvaW5jYXJlcGxhbmU6Ilx1MjEwYyIsSGlsYmVydFNwYWNlOiJcdTIxMGIiLEhzY3I6Ilx1MjEwYiIsaGFtaWx0OiJcdTIxMGIiLEhvcGY6Ilx1MjEwZCIscXVhdGVybmlvbnM6Ilx1MjEwZCIsSG9yaXpvbnRhbExpbmU6Ilx1MjUwMCIsYm94aDoiXHUyNTAwIixIc3Ryb2s6Ilx1MDEyNiIsSHVtcEVxdWFsOiJcdTIyNGYiLGJ1bXBlOiJcdTIyNGYiLGJ1bXBlcToiXHUyMjRmIixJRWN5OiJcdTA0MTUiLElKbGlnOiJcdTAxMzIiLElPY3k6Ilx1MDQwMSIsSWFjdXRlOiJceGNkIixJY2lyYzoiXHhjZSIsSWN5OiJcdTA0MTgiLElkb3Q6Ilx1MDEzMCIsSWZyOiJcdTIxMTEiLEltOiJcdTIxMTEiLGltYWdlOiJcdTIxMTEiLGltYWdwYXJ0OiJcdTIxMTEiLElncmF2ZToiXHhjYyIsSW1hY3I6Ilx1MDEyYSIsSW1hZ2luYXJ5SToiXHUyMTQ4IixpaToiXHUyMTQ4IixJbnQ6Ilx1MjIyYyIsSW50ZWdyYWw6Ilx1MjIyYiIsaW50OiJcdTIyMmIiLEludGVyc2VjdGlvbjoiXHUyMmMyIixiaWdjYXA6Ilx1MjJjMiIseGNhcDoiXHUyMmMyIixJbnZpc2libGVDb21tYToiXHUyMDYzIixpYzoiXHUyMDYzIixJbnZpc2libGVUaW1lczoiXHUyMDYyIixpdDoiXHUyMDYyIixJb2dvbjoiXHUwMTJlIixJb3BmOiJcdWQ4MzVcdWRkNDAiLElvdGE6Ilx1MDM5OSIsSXNjcjoiXHUyMTEwIixpbWFnbGluZToiXHUyMTEwIixJdGlsZGU6Ilx1MDEyOCIsSXVrY3k6Ilx1MDQwNiIsSXVtbDoiXHhjZiIsSmNpcmM6Ilx1MDEzNCIsSmN5OiJcdTA0MTkiLEpmcjoiXHVkODM1XHVkZDBkIixKb3BmOiJcdWQ4MzVcdWRkNDEiLEpzY3I6Ilx1ZDgzNVx1ZGNhNSIsSnNlcmN5OiJcdTA0MDgiLEp1a2N5OiJcdTA0MDQiLEtIY3k6Ilx1MDQyNSIsS0pjeToiXHUwNDBjIixLYXBwYToiXHUwMzlhIixLY2VkaWw6Ilx1MDEzNiIsS2N5OiJcdTA0MWEiLEtmcjoiXHVkODM1XHVkZDBlIixLb3BmOiJcdWQ4MzVcdWRkNDIiLEtzY3I6Ilx1ZDgzNVx1ZGNhNiIsTEpjeToiXHUwNDA5IixMVDoiPCIsbHQ6IjwiLExhY3V0ZToiXHUwMTM5IixMYW1iZGE6Ilx1MDM5YiIsTGFuZzoiXHUyN2VhIixMYXBsYWNldHJmOiJcdTIxMTIiLExzY3I6Ilx1MjExMiIsbGFncmFuOiJcdTIxMTIiLExhcnI6Ilx1MjE5ZSIsdHdvaGVhZGxlZnRhcnJvdzoiXHUyMTllIixMY2Fyb246Ilx1MDEzZCIsTGNlZGlsOiJcdTAxM2IiLExjeToiXHUwNDFiIixMZWZ0QW5nbGVCcmFja2V0OiJcdTI3ZTgiLGxhbmc6Ilx1MjdlOCIsbGFuZ2xlOiJcdTI3ZTgiLExlZnRBcnJvdzoiXHUyMTkwIixTaG9ydExlZnRBcnJvdzoiXHUyMTkwIixsYXJyOiJcdTIxOTAiLGxlZnRhcnJvdzoiXHUyMTkwIixzbGFycjoiXHUyMTkwIixMZWZ0QXJyb3dCYXI6Ilx1MjFlNCIsbGFycmI6Ilx1MjFlNCIsTGVmdEFycm93UmlnaHRBcnJvdzoiXHUyMWM2IixsZWZ0cmlnaHRhcnJvd3M6Ilx1MjFjNiIsbHJhcnI6Ilx1MjFjNiIsTGVmdENlaWxpbmc6Ilx1MjMwOCIsbGNlaWw6Ilx1MjMwOCIsTGVmdERvdWJsZUJyYWNrZXQ6Ilx1MjdlNiIsbG9icms6Ilx1MjdlNiIsTGVmdERvd25UZWVWZWN0b3I6Ilx1Mjk2MSIsTGVmdERvd25WZWN0b3I6Ilx1MjFjMyIsZGhhcmw6Ilx1MjFjMyIsZG93bmhhcnBvb25sZWZ0OiJcdTIxYzMiLExlZnREb3duVmVjdG9yQmFyOiJcdTI5NTkiLExlZnRGbG9vcjoiXHUyMzBhIixsZmxvb3I6Ilx1MjMwYSIsTGVmdFJpZ2h0QXJyb3c6Ilx1MjE5NCIsaGFycjoiXHUyMTk0IixsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0IixMZWZ0UmlnaHRWZWN0b3I6Ilx1Mjk0ZSIsTGVmdFRlZToiXHUyMmEzIixkYXNodjoiXHUyMmEzIixMZWZ0VGVlQXJyb3c6Ilx1MjFhNCIsbWFwc3RvbGVmdDoiXHUyMWE0IixMZWZ0VGVlVmVjdG9yOiJcdTI5NWEiLExlZnRUcmlhbmdsZToiXHUyMmIyIix2YXJ0cmlhbmdsZWxlZnQ6Ilx1MjJiMiIsdmx0cmk6Ilx1MjJiMiIsTGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2YiLExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyYjQiLGx0cmllOiJcdTIyYjQiLHRyaWFuZ2xlbGVmdGVxOiJcdTIyYjQiLExlZnRVcERvd25WZWN0b3I6Ilx1Mjk1MSIsTGVmdFVwVGVlVmVjdG9yOiJcdTI5NjAiLExlZnRVcFZlY3RvcjoiXHUyMWJmIix1aGFybDoiXHUyMWJmIix1cGhhcnBvb25sZWZ0OiJcdTIxYmYiLExlZnRVcFZlY3RvckJhcjoiXHUyOTU4IixMZWZ0VmVjdG9yOiJcdTIxYmMiLGxlZnRoYXJwb29udXA6Ilx1MjFiYyIsbGhhcnU6Ilx1MjFiYyIsTGVmdFZlY3RvckJhcjoiXHUyOTUyIixMZXNzRXF1YWxHcmVhdGVyOiJcdTIyZGEiLGxlZzoiXHUyMmRhIixsZXNzZXFndHI6Ilx1MjJkYSIsTGVzc0Z1bGxFcXVhbDoiXHUyMjY2IixsRToiXHUyMjY2IixsZXFxOiJcdTIyNjYiLExlc3NHcmVhdGVyOiJcdTIyNzYiLGxlc3NndHI6Ilx1MjI3NiIsbGc6Ilx1MjI3NiIsTGVzc0xlc3M6Ilx1MmFhMSIsTGVzc1NsYW50RXF1YWw6Ilx1MmE3ZCIsbGVxc2xhbnQ6Ilx1MmE3ZCIsbGVzOiJcdTJhN2QiLExlc3NUaWxkZToiXHUyMjcyIixsZXNzc2ltOiJcdTIyNzIiLGxzaW06Ilx1MjI3MiIsTGZyOiJcdWQ4MzVcdWRkMGYiLExsOiJcdTIyZDgiLExsZWZ0YXJyb3c6Ilx1MjFkYSIsbEFhcnI6Ilx1MjFkYSIsTG1pZG90OiJcdTAxM2YiLExvbmdMZWZ0QXJyb3c6Ilx1MjdmNSIsbG9uZ2xlZnRhcnJvdzoiXHUyN2Y1Iix4bGFycjoiXHUyN2Y1IixMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmNyIsbG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZjciLHhoYXJyOiJcdTI3ZjciLExvbmdSaWdodEFycm93OiJcdTI3ZjYiLGxvbmdyaWdodGFycm93OiJcdTI3ZjYiLHhyYXJyOiJcdTI3ZjYiLExvcGY6Ilx1ZDgzNVx1ZGQ0MyIsTG93ZXJMZWZ0QXJyb3c6Ilx1MjE5OSIsc3dhcnI6Ilx1MjE5OSIsc3dhcnJvdzoiXHUyMTk5IixMb3dlclJpZ2h0QXJyb3c6Ilx1MjE5OCIsc2VhcnI6Ilx1MjE5OCIsc2VhcnJvdzoiXHUyMTk4IixMc2g6Ilx1MjFiMCIsbHNoOiJcdTIxYjAiLExzdHJvazoiXHUwMTQxIixMdDoiXHUyMjZhIixOZXN0ZWRMZXNzTGVzczoiXHUyMjZhIixsbDoiXHUyMjZhIixNYXA6Ilx1MjkwNSIsTWN5OiJcdTA0MWMiLE1lZGl1bVNwYWNlOiJcdTIwNWYiLE1lbGxpbnRyZjoiXHUyMTMzIixNc2NyOiJcdTIxMzMiLHBobW1hdDoiXHUyMTMzIixNZnI6Ilx1ZDgzNVx1ZGQxMCIsTWludXNQbHVzOiJcdTIyMTMiLG1ucGx1czoiXHUyMjEzIixtcDoiXHUyMjEzIixNb3BmOiJcdWQ4MzVcdWRkNDQiLE11OiJcdTAzOWMiLE5KY3k6Ilx1MDQwYSIsTmFjdXRlOiJcdTAxNDMiLE5jYXJvbjoiXHUwMTQ3IixOY2VkaWw6Ilx1MDE0NSIsTmN5OiJcdTA0MWQiLE5lZ2F0aXZlTWVkaXVtU3BhY2U6Ilx1MjAwYiIsTmVnYXRpdmVUaGlja1NwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVGhpblNwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVmVyeVRoaW5TcGFjZToiXHUyMDBiIixaZXJvV2lkdGhTcGFjZToiXHUyMDBiIixOZXdMaW5lOiJcbiIsTmZyOiJcdWQ4MzVcdWRkMTEiLE5vQnJlYWs6Ilx1MjA2MCIsTm9uQnJlYWtpbmdTcGFjZToiXHhhMCIsbmJzcDoiXHhhMCIsTm9wZjoiXHUyMTE1IixuYXR1cmFsczoiXHUyMTE1IixOb3Q6Ilx1MmFlYyIsTm90Q29uZ3J1ZW50OiJcdTIyNjIiLG5lcXVpdjoiXHUyMjYyIixOb3RDdXBDYXA6Ilx1MjI2ZCIsTm90RG91YmxlVmVydGljYWxCYXI6Ilx1MjIyNiIsbnBhcjoiXHUyMjI2IixucGFyYWxsZWw6Ilx1MjIyNiIsbnNob3J0cGFyYWxsZWw6Ilx1MjIyNiIsbnNwYXI6Ilx1MjIyNiIsTm90RWxlbWVudDoiXHUyMjA5Iixub3RpbjoiXHUyMjA5Iixub3RpbnZhOiJcdTIyMDkiLE5vdEVxdWFsOiJcdTIyNjAiLG5lOiJcdTIyNjAiLE5vdEVxdWFsVGlsZGU6Ilx1MjI0Mlx1MDMzOCIsbmVzaW06Ilx1MjI0Mlx1MDMzOCIsTm90RXhpc3RzOiJcdTIyMDQiLG5leGlzdDoiXHUyMjA0IixuZXhpc3RzOiJcdTIyMDQiLE5vdEdyZWF0ZXI6Ilx1MjI2ZiIsbmd0OiJcdTIyNmYiLG5ndHI6Ilx1MjI2ZiIsTm90R3JlYXRlckVxdWFsOiJcdTIyNzEiLG5nZToiXHUyMjcxIixuZ2VxOiJcdTIyNzEiLE5vdEdyZWF0ZXJGdWxsRXF1YWw6Ilx1MjI2N1x1MDMzOCIsbmdFOiJcdTIyNjdcdTAzMzgiLG5nZXFxOiJcdTIyNjdcdTAzMzgiLE5vdEdyZWF0ZXJHcmVhdGVyOiJcdTIyNmJcdTAzMzgiLG5HdHY6Ilx1MjI2Ylx1MDMzOCIsTm90R3JlYXRlckxlc3M6Ilx1MjI3OSIsbnRnbDoiXHUyMjc5IixOb3RHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlXHUwMzM4IixuZ2Vxc2xhbnQ6Ilx1MmE3ZVx1MDMzOCIsbmdlczoiXHUyYTdlXHUwMzM4IixOb3RHcmVhdGVyVGlsZGU6Ilx1MjI3NSIsbmdzaW06Ilx1MjI3NSIsTm90SHVtcERvd25IdW1wOiJcdTIyNGVcdTAzMzgiLG5idW1wOiJcdTIyNGVcdTAzMzgiLE5vdEh1bXBFcXVhbDoiXHUyMjRmXHUwMzM4IixuYnVtcGU6Ilx1MjI0Zlx1MDMzOCIsTm90TGVmdFRyaWFuZ2xlOiJcdTIyZWEiLG5sdHJpOiJcdTIyZWEiLG50cmlhbmdsZWxlZnQ6Ilx1MjJlYSIsTm90TGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2ZcdTAzMzgiLE5vdExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyZWMiLG5sdHJpZToiXHUyMmVjIixudHJpYW5nbGVsZWZ0ZXE6Ilx1MjJlYyIsTm90TGVzczoiXHUyMjZlIixubGVzczoiXHUyMjZlIixubHQ6Ilx1MjI2ZSIsTm90TGVzc0VxdWFsOiJcdTIyNzAiLG5sZToiXHUyMjcwIixubGVxOiJcdTIyNzAiLE5vdExlc3NHcmVhdGVyOiJcdTIyNzgiLG50bGc6Ilx1MjI3OCIsTm90TGVzc0xlc3M6Ilx1MjI2YVx1MDMzOCIsbkx0djoiXHUyMjZhXHUwMzM4IixOb3RMZXNzU2xhbnRFcXVhbDoiXHUyYTdkXHUwMzM4IixubGVxc2xhbnQ6Ilx1MmE3ZFx1MDMzOCIsbmxlczoiXHUyYTdkXHUwMzM4IixOb3RMZXNzVGlsZGU6Ilx1MjI3NCIsbmxzaW06Ilx1MjI3NCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMlx1MDMzOCIsTm90TmVzdGVkTGVzc0xlc3M6Ilx1MmFhMVx1MDMzOCIsTm90UHJlY2VkZXM6Ilx1MjI4MCIsbnByOiJcdTIyODAiLG5wcmVjOiJcdTIyODAiLE5vdFByZWNlZGVzRXF1YWw6Ilx1MmFhZlx1MDMzOCIsbnByZToiXHUyYWFmXHUwMzM4IixucHJlY2VxOiJcdTJhYWZcdTAzMzgiLE5vdFByZWNlZGVzU2xhbnRFcXVhbDoiXHUyMmUwIixucHJjdWU6Ilx1MjJlMCIsTm90UmV2ZXJzZUVsZW1lbnQ6Ilx1MjIwYyIsbm90bmk6Ilx1MjIwYyIsbm90bml2YToiXHUyMjBjIixOb3RSaWdodFRyaWFuZ2xlOiJcdTIyZWIiLG5ydHJpOiJcdTIyZWIiLG50cmlhbmdsZXJpZ2h0OiJcdTIyZWIiLE5vdFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMFx1MDMzOCIsTm90UmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyZWQiLG5ydHJpZToiXHUyMmVkIixudHJpYW5nbGVyaWdodGVxOiJcdTIyZWQiLE5vdFNxdWFyZVN1YnNldDoiXHUyMjhmXHUwMzM4IixOb3RTcXVhcmVTdWJzZXRFcXVhbDoiXHUyMmUyIixuc3FzdWJlOiJcdTIyZTIiLE5vdFNxdWFyZVN1cGVyc2V0OiJcdTIyOTBcdTAzMzgiLE5vdFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjJlMyIsbnNxc3VwZToiXHUyMmUzIixOb3RTdWJzZXQ6Ilx1MjI4Mlx1MjBkMiIsbnN1YnNldDoiXHUyMjgyXHUyMGQyIix2bnN1YjoiXHUyMjgyXHUyMGQyIixOb3RTdWJzZXRFcXVhbDoiXHUyMjg4Iixuc3ViZToiXHUyMjg4Iixuc3Vic2V0ZXE6Ilx1MjI4OCIsTm90U3VjY2VlZHM6Ilx1MjI4MSIsbnNjOiJcdTIyODEiLG5zdWNjOiJcdTIyODEiLE5vdFN1Y2NlZWRzRXF1YWw6Ilx1MmFiMFx1MDMzOCIsbnNjZToiXHUyYWIwXHUwMzM4Iixuc3VjY2VxOiJcdTJhYjBcdTAzMzgiLE5vdFN1Y2NlZWRzU2xhbnRFcXVhbDoiXHUyMmUxIixuc2NjdWU6Ilx1MjJlMSIsTm90U3VjY2VlZHNUaWxkZToiXHUyMjdmXHUwMzM4IixOb3RTdXBlcnNldDoiXHUyMjgzXHUyMGQyIixuc3Vwc2V0OiJcdTIyODNcdTIwZDIiLHZuc3VwOiJcdTIyODNcdTIwZDIiLE5vdFN1cGVyc2V0RXF1YWw6Ilx1MjI4OSIsbnN1cGU6Ilx1MjI4OSIsbnN1cHNldGVxOiJcdTIyODkiLE5vdFRpbGRlOiJcdTIyNDEiLG5zaW06Ilx1MjI0MSIsTm90VGlsZGVFcXVhbDoiXHUyMjQ0Iixuc2ltZToiXHUyMjQ0Iixuc2ltZXE6Ilx1MjI0NCIsTm90VGlsZGVGdWxsRXF1YWw6Ilx1MjI0NyIsbmNvbmc6Ilx1MjI0NyIsTm90VGlsZGVUaWxkZToiXHUyMjQ5IixuYXA6Ilx1MjI0OSIsbmFwcHJveDoiXHUyMjQ5IixOb3RWZXJ0aWNhbEJhcjoiXHUyMjI0IixubWlkOiJcdTIyMjQiLG5zaG9ydG1pZDoiXHUyMjI0Iixuc21pZDoiXHUyMjI0IixOc2NyOiJcdWQ4MzVcdWRjYTkiLE50aWxkZToiXHhkMSIsTnU6Ilx1MDM5ZCIsT0VsaWc6Ilx1MDE1MiIsT2FjdXRlOiJceGQzIixPY2lyYzoiXHhkNCIsT2N5OiJcdTA0MWUiLE9kYmxhYzoiXHUwMTUwIixPZnI6Ilx1ZDgzNVx1ZGQxMiIsT2dyYXZlOiJceGQyIixPbWFjcjoiXHUwMTRjIixPbWVnYToiXHUwM2E5IixvaG06Ilx1MDNhOSIsT21pY3JvbjoiXHUwMzlmIixPb3BmOiJcdWQ4MzVcdWRkNDYiLE9wZW5DdXJseURvdWJsZVF1b3RlOiJcdTIwMWMiLGxkcXVvOiJcdTIwMWMiLE9wZW5DdXJseVF1b3RlOiJcdTIwMTgiLGxzcXVvOiJcdTIwMTgiLE9yOiJcdTJhNTQiLE9zY3I6Ilx1ZDgzNVx1ZGNhYSIsT3NsYXNoOiJceGQ4IixPdGlsZGU6Ilx4ZDUiLE90aW1lczoiXHUyYTM3IixPdW1sOiJceGQ2IixPdmVyQmFyOiJcdTIwM2UiLG9saW5lOiJcdTIwM2UiLE92ZXJCcmFjZToiXHUyM2RlIixPdmVyQnJhY2tldDoiXHUyM2I0Iix0YnJrOiJcdTIzYjQiLE92ZXJQYXJlbnRoZXNpczoiXHUyM2RjIixQYXJ0aWFsRDoiXHUyMjAyIixwYXJ0OiJcdTIyMDIiLFBjeToiXHUwNDFmIixQZnI6Ilx1ZDgzNVx1ZGQxMyIsUGhpOiJcdTAzYTYiLFBpOiJcdTAzYTAiLFBsdXNNaW51czoiXHhiMSIscGx1c21uOiJceGIxIixwbToiXHhiMSIsUG9wZjoiXHUyMTE5IixwcmltZXM6Ilx1MjExOSIsUHI6Ilx1MmFiYiIsUHJlY2VkZXM6Ilx1MjI3YSIscHI6Ilx1MjI3YSIscHJlYzoiXHUyMjdhIixQcmVjZWRlc0VxdWFsOiJcdTJhYWYiLHByZToiXHUyYWFmIixwcmVjZXE6Ilx1MmFhZiIsUHJlY2VkZXNTbGFudEVxdWFsOiJcdTIyN2MiLHByY3VlOiJcdTIyN2MiLHByZWNjdXJseWVxOiJcdTIyN2MiLFByZWNlZGVzVGlsZGU6Ilx1MjI3ZSIscHJlY3NpbToiXHUyMjdlIixwcnNpbToiXHUyMjdlIixQcmltZToiXHUyMDMzIixQcm9kdWN0OiJcdTIyMGYiLHByb2Q6Ilx1MjIwZiIsUHJvcG9ydGlvbmFsOiJcdTIyMWQiLHByb3A6Ilx1MjIxZCIscHJvcHRvOiJcdTIyMWQiLHZhcnByb3B0bzoiXHUyMjFkIix2cHJvcDoiXHUyMjFkIixQc2NyOiJcdWQ4MzVcdWRjYWIiLFBzaToiXHUwM2E4IixRVU9UOiciJyxxdW90OiciJyxRZnI6Ilx1ZDgzNVx1ZGQxNCIsUW9wZjoiXHUyMTFhIixyYXRpb25hbHM6Ilx1MjExYSIsUXNjcjoiXHVkODM1XHVkY2FjIixSQmFycjoiXHUyOTEwIixkcmJrYXJvdzoiXHUyOTEwIixSRUc6Ilx4YWUiLGNpcmNsZWRSOiJceGFlIixyZWc6Ilx4YWUiLFJhY3V0ZToiXHUwMTU0IixSYW5nOiJcdTI3ZWIiLFJhcnI6Ilx1MjFhMCIsdHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFhMCIsUmFycnRsOiJcdTI5MTYiLFJjYXJvbjoiXHUwMTU4IixSY2VkaWw6Ilx1MDE1NiIsUmN5OiJcdTA0MjAiLFJlOiJcdTIxMWMiLFJmcjoiXHUyMTFjIixyZWFsOiJcdTIxMWMiLHJlYWxwYXJ0OiJcdTIxMWMiLFJldmVyc2VFbGVtZW50OiJcdTIyMGIiLFN1Y2hUaGF0OiJcdTIyMGIiLG5pOiJcdTIyMGIiLG5pdjoiXHUyMjBiIixSZXZlcnNlRXF1aWxpYnJpdW06Ilx1MjFjYiIsbGVmdHJpZ2h0aGFycG9vbnM6Ilx1MjFjYiIsbHJoYXI6Ilx1MjFjYiIsUmV2ZXJzZVVwRXF1aWxpYnJpdW06Ilx1Mjk2ZiIsZHVoYXI6Ilx1Mjk2ZiIsUmhvOiJcdTAzYTEiLFJpZ2h0QW5nbGVCcmFja2V0OiJcdTI3ZTkiLHJhbmc6Ilx1MjdlOSIscmFuZ2xlOiJcdTI3ZTkiLFJpZ2h0QXJyb3c6Ilx1MjE5MiIsU2hvcnRSaWdodEFycm93OiJcdTIxOTIiLHJhcnI6Ilx1MjE5MiIscmlnaHRhcnJvdzoiXHUyMTkyIixzcmFycjoiXHUyMTkyIixSaWdodEFycm93QmFyOiJcdTIxZTUiLHJhcnJiOiJcdTIxZTUiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6Ilx1MjFjNCIscmlnaHRsZWZ0YXJyb3dzOiJcdTIxYzQiLHJsYXJyOiJcdTIxYzQiLFJpZ2h0Q2VpbGluZzoiXHUyMzA5IixyY2VpbDoiXHUyMzA5IixSaWdodERvdWJsZUJyYWNrZXQ6Ilx1MjdlNyIscm9icms6Ilx1MjdlNyIsUmlnaHREb3duVGVlVmVjdG9yOiJcdTI5NWQiLFJpZ2h0RG93blZlY3RvcjoiXHUyMWMyIixkaGFycjoiXHUyMWMyIixkb3duaGFycG9vbnJpZ2h0OiJcdTIxYzIiLFJpZ2h0RG93blZlY3RvckJhcjoiXHUyOTU1IixSaWdodEZsb29yOiJcdTIzMGIiLHJmbG9vcjoiXHUyMzBiIixSaWdodFRlZToiXHUyMmEyIix2ZGFzaDoiXHUyMmEyIixSaWdodFRlZUFycm93OiJcdTIxYTYiLG1hcDoiXHUyMWE2IixtYXBzdG86Ilx1MjFhNiIsUmlnaHRUZWVWZWN0b3I6Ilx1Mjk1YiIsUmlnaHRUcmlhbmdsZToiXHUyMmIzIix2YXJ0cmlhbmdsZXJpZ2h0OiJcdTIyYjMiLHZydHJpOiJcdTIyYjMiLFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMCIsUmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyYjUiLHJ0cmllOiJcdTIyYjUiLHRyaWFuZ2xlcmlnaHRlcToiXHUyMmI1IixSaWdodFVwRG93blZlY3RvcjoiXHUyOTRmIixSaWdodFVwVGVlVmVjdG9yOiJcdTI5NWMiLFJpZ2h0VXBWZWN0b3I6Ilx1MjFiZSIsdWhhcnI6Ilx1MjFiZSIsdXBoYXJwb29ucmlnaHQ6Ilx1MjFiZSIsUmlnaHRVcFZlY3RvckJhcjoiXHUyOTU0IixSaWdodFZlY3RvcjoiXHUyMWMwIixyaGFydToiXHUyMWMwIixyaWdodGhhcnBvb251cDoiXHUyMWMwIixSaWdodFZlY3RvckJhcjoiXHUyOTUzIixSb3BmOiJcdTIxMWQiLHJlYWxzOiJcdTIxMWQiLFJvdW5kSW1wbGllczoiXHUyOTcwIixScmlnaHRhcnJvdzoiXHUyMWRiIixyQWFycjoiXHUyMWRiIixSc2NyOiJcdTIxMWIiLHJlYWxpbmU6Ilx1MjExYiIsUnNoOiJcdTIxYjEiLHJzaDoiXHUyMWIxIixSdWxlRGVsYXllZDoiXHUyOWY0IixTSENIY3k6Ilx1MDQyOSIsU0hjeToiXHUwNDI4IixTT0ZUY3k6Ilx1MDQyYyIsU2FjdXRlOiJcdTAxNWEiLFNjOiJcdTJhYmMiLFNjYXJvbjoiXHUwMTYwIixTY2VkaWw6Ilx1MDE1ZSIsU2NpcmM6Ilx1MDE1YyIsU2N5OiJcdTA0MjEiLFNmcjoiXHVkODM1XHVkZDE2IixTaG9ydFVwQXJyb3c6Ilx1MjE5MSIsVXBBcnJvdzoiXHUyMTkxIix1YXJyOiJcdTIxOTEiLHVwYXJyb3c6Ilx1MjE5MSIsU2lnbWE6Ilx1MDNhMyIsU21hbGxDaXJjbGU6Ilx1MjIxOCIsY29tcGZuOiJcdTIyMTgiLFNvcGY6Ilx1ZDgzNVx1ZGQ0YSIsU3FydDoiXHUyMjFhIixyYWRpYzoiXHUyMjFhIixTcXVhcmU6Ilx1MjVhMSIsc3F1OiJcdTI1YTEiLHNxdWFyZToiXHUyNWExIixTcXVhcmVJbnRlcnNlY3Rpb246Ilx1MjI5MyIsc3FjYXA6Ilx1MjI5MyIsU3F1YXJlU3Vic2V0OiJcdTIyOGYiLHNxc3ViOiJcdTIyOGYiLHNxc3Vic2V0OiJcdTIyOGYiLFNxdWFyZVN1YnNldEVxdWFsOiJcdTIyOTEiLHNxc3ViZToiXHUyMjkxIixzcXN1YnNldGVxOiJcdTIyOTEiLFNxdWFyZVN1cGVyc2V0OiJcdTIyOTAiLHNxc3VwOiJcdTIyOTAiLHNxc3Vwc2V0OiJcdTIyOTAiLFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjI5MiIsc3FzdXBlOiJcdTIyOTIiLHNxc3Vwc2V0ZXE6Ilx1MjI5MiIsU3F1YXJlVW5pb246Ilx1MjI5NCIsc3FjdXA6Ilx1MjI5NCIsU3NjcjoiXHVkODM1XHVkY2FlIixTdGFyOiJcdTIyYzYiLHNzdGFyZjoiXHUyMmM2IixTdWI6Ilx1MjJkMCIsU3Vic2V0OiJcdTIyZDAiLFN1YnNldEVxdWFsOiJcdTIyODYiLHN1YmU6Ilx1MjI4NiIsc3Vic2V0ZXE6Ilx1MjI4NiIsU3VjY2VlZHM6Ilx1MjI3YiIsc2M6Ilx1MjI3YiIsc3VjYzoiXHUyMjdiIixTdWNjZWVkc0VxdWFsOiJcdTJhYjAiLHNjZToiXHUyYWIwIixzdWNjZXE6Ilx1MmFiMCIsU3VjY2VlZHNTbGFudEVxdWFsOiJcdTIyN2QiLHNjY3VlOiJcdTIyN2QiLHN1Y2NjdXJseWVxOiJcdTIyN2QiLFN1Y2NlZWRzVGlsZGU6Ilx1MjI3ZiIsc2NzaW06Ilx1MjI3ZiIsc3VjY3NpbToiXHUyMjdmIixTdW06Ilx1MjIxMSIsc3VtOiJcdTIyMTEiLFN1cDoiXHUyMmQxIixTdXBzZXQ6Ilx1MjJkMSIsU3VwZXJzZXQ6Ilx1MjI4MyIsc3VwOiJcdTIyODMiLHN1cHNldDoiXHUyMjgzIixTdXBlcnNldEVxdWFsOiJcdTIyODciLHN1cGU6Ilx1MjI4NyIsc3Vwc2V0ZXE6Ilx1MjI4NyIsVEhPUk46Ilx4ZGUiLFRSQURFOiJcdTIxMjIiLHRyYWRlOiJcdTIxMjIiLFRTSGN5OiJcdTA0MGIiLFRTY3k6Ilx1MDQyNiIsVGFiOiJcdCIsVGF1OiJcdTAzYTQiLFRjYXJvbjoiXHUwMTY0IixUY2VkaWw6Ilx1MDE2MiIsVGN5OiJcdTA0MjIiLFRmcjoiXHVkODM1XHVkZDE3IixUaGVyZWZvcmU6Ilx1MjIzNCIsdGhlcmU0OiJcdTIyMzQiLHRoZXJlZm9yZToiXHUyMjM0IixUaGV0YToiXHUwMzk4IixUaGlja1NwYWNlOiJcdTIwNWZcdTIwMGEiLFRoaW5TcGFjZToiXHUyMDA5Iix0aGluc3A6Ilx1MjAwOSIsVGlsZGU6Ilx1MjIzYyIsc2ltOiJcdTIyM2MiLHRoaWNrc2ltOiJcdTIyM2MiLHRoa3NpbToiXHUyMjNjIixUaWxkZUVxdWFsOiJcdTIyNDMiLHNpbWU6Ilx1MjI0MyIsc2ltZXE6Ilx1MjI0MyIsVGlsZGVGdWxsRXF1YWw6Ilx1MjI0NSIsY29uZzoiXHUyMjQ1IixUaWxkZVRpbGRlOiJcdTIyNDgiLGFwOiJcdTIyNDgiLGFwcHJveDoiXHUyMjQ4Iixhc3ltcDoiXHUyMjQ4Iix0aGlja2FwcHJveDoiXHUyMjQ4Iix0aGthcDoiXHUyMjQ4IixUb3BmOiJcdWQ4MzVcdWRkNGIiLFRyaXBsZURvdDoiXHUyMGRiIix0ZG90OiJcdTIwZGIiLFRzY3I6Ilx1ZDgzNVx1ZGNhZiIsVHN0cm9rOiJcdTAxNjYiLFVhY3V0ZToiXHhkYSIsVWFycjoiXHUyMTlmIixVYXJyb2NpcjoiXHUyOTQ5IixVYnJjeToiXHUwNDBlIixVYnJldmU6Ilx1MDE2YyIsVWNpcmM6Ilx4ZGIiLFVjeToiXHUwNDIzIixVZGJsYWM6Ilx1MDE3MCIsVWZyOiJcdWQ4MzVcdWRkMTgiLFVncmF2ZToiXHhkOSIsVW1hY3I6Ilx1MDE2YSIsVW5kZXJCYXI6Il8iLGxvd2JhcjoiXyIsVW5kZXJCcmFjZToiXHUyM2RmIixVbmRlckJyYWNrZXQ6Ilx1MjNiNSIsYmJyazoiXHUyM2I1IixVbmRlclBhcmVudGhlc2lzOiJcdTIzZGQiLFVuaW9uOiJcdTIyYzMiLGJpZ2N1cDoiXHUyMmMzIix4Y3VwOiJcdTIyYzMiLFVuaW9uUGx1czoiXHUyMjhlIix1cGx1czoiXHUyMjhlIixVb2dvbjoiXHUwMTcyIixVb3BmOiJcdWQ4MzVcdWRkNGMiLFVwQXJyb3dCYXI6Ilx1MjkxMiIsVXBBcnJvd0Rvd25BcnJvdzoiXHUyMWM1Iix1ZGFycjoiXHUyMWM1IixVcERvd25BcnJvdzoiXHUyMTk1Iix1cGRvd25hcnJvdzoiXHUyMTk1Iix2YXJyOiJcdTIxOTUiLFVwRXF1aWxpYnJpdW06Ilx1Mjk2ZSIsdWRoYXI6Ilx1Mjk2ZSIsVXBUZWU6Ilx1MjJhNSIsYm90OiJcdTIyYTUiLGJvdHRvbToiXHUyMmE1IixwZXJwOiJcdTIyYTUiLFVwVGVlQXJyb3c6Ilx1MjFhNSIsbWFwc3RvdXA6Ilx1MjFhNSIsVXBwZXJMZWZ0QXJyb3c6Ilx1MjE5NiIsbndhcnI6Ilx1MjE5NiIsbndhcnJvdzoiXHUyMTk2IixVcHBlclJpZ2h0QXJyb3c6Ilx1MjE5NyIsbmVhcnI6Ilx1MjE5NyIsbmVhcnJvdzoiXHUyMTk3IixVcHNpOiJcdTAzZDIiLHVwc2loOiJcdTAzZDIiLFVwc2lsb246Ilx1MDNhNSIsVXJpbmc6Ilx1MDE2ZSIsVXNjcjoiXHVkODM1XHVkY2IwIixVdGlsZGU6Ilx1MDE2OCIsVXVtbDoiXHhkYyIsVkRhc2g6Ilx1MjJhYiIsVmJhcjoiXHUyYWViIixWY3k6Ilx1MDQxMiIsVmRhc2g6Ilx1MjJhOSIsVmRhc2hsOiJcdTJhZTYiLFZlZToiXHUyMmMxIixiaWd2ZWU6Ilx1MjJjMSIseHZlZToiXHUyMmMxIixWZXJiYXI6Ilx1MjAxNiIsVmVydDoiXHUyMDE2IixWZXJ0aWNhbEJhcjoiXHUyMjIzIixtaWQ6Ilx1MjIyMyIsc2hvcnRtaWQ6Ilx1MjIyMyIsc21pZDoiXHUyMjIzIixWZXJ0aWNhbExpbmU6InwiLHZlcmJhcjoifCIsdmVydDoifCIsVmVydGljYWxTZXBhcmF0b3I6Ilx1Mjc1OCIsVmVydGljYWxUaWxkZToiXHUyMjQwIix3cjoiXHUyMjQwIix3cmVhdGg6Ilx1MjI0MCIsVmVyeVRoaW5TcGFjZToiXHUyMDBhIixoYWlyc3A6Ilx1MjAwYSIsVmZyOiJcdWQ4MzVcdWRkMTkiLFZvcGY6Ilx1ZDgzNVx1ZGQ0ZCIsVnNjcjoiXHVkODM1XHVkY2IxIixWdmRhc2g6Ilx1MjJhYSIsV2NpcmM6Ilx1MDE3NCIsV2VkZ2U6Ilx1MjJjMCIsYmlnd2VkZ2U6Ilx1MjJjMCIseHdlZGdlOiJcdTIyYzAiLFdmcjoiXHVkODM1XHVkZDFhIixXb3BmOiJcdWQ4MzVcdWRkNGUiLFdzY3I6Ilx1ZDgzNVx1ZGNiMiIsWGZyOiJcdWQ4MzVcdWRkMWIiLFhpOiJcdTAzOWUiLFhvcGY6Ilx1ZDgzNVx1ZGQ0ZiIsWHNjcjoiXHVkODM1XHVkY2IzIixZQWN5OiJcdTA0MmYiLFlJY3k6Ilx1MDQwNyIsWVVjeToiXHUwNDJlIixZYWN1dGU6Ilx4ZGQiLFljaXJjOiJcdTAxNzYiLFljeToiXHUwNDJiIixZZnI6Ilx1ZDgzNVx1ZGQxYyIsWW9wZjoiXHVkODM1XHVkZDUwIixZc2NyOiJcdWQ4MzVcdWRjYjQiLFl1bWw6Ilx1MDE3OCIsWkhjeToiXHUwNDE2IixaYWN1dGU6Ilx1MDE3OSIsWmNhcm9uOiJcdTAxN2QiLFpjeToiXHUwNDE3IixaZG90OiJcdTAxN2IiLFpldGE6Ilx1MDM5NiIsWmZyOiJcdTIxMjgiLHplZXRyZjoiXHUyMTI4Iixab3BmOiJcdTIxMjQiLGludGVnZXJzOiJcdTIxMjQiLFpzY3I6Ilx1ZDgzNVx1ZGNiNSIsYWFjdXRlOiJceGUxIixhYnJldmU6Ilx1MDEwMyIsYWM6Ilx1MjIzZSIsbXN0cG9zOiJcdTIyM2UiLGFjRToiXHUyMjNlXHUwMzMzIixhY2Q6Ilx1MjIzZiIsYWNpcmM6Ilx4ZTIiLGFjeToiXHUwNDMwIixhZWxpZzoiXHhlNiIsYWZyOiJcdWQ4MzVcdWRkMWUiLGFncmF2ZToiXHhlMCIsYWxlZnN5bToiXHUyMTM1IixhbGVwaDoiXHUyMTM1IixhbHBoYToiXHUwM2IxIixhbWFjcjoiXHUwMTAxIixhbWFsZzoiXHUyYTNmIixhbmQ6Ilx1MjIyNyIsd2VkZ2U6Ilx1MjIyNyIsYW5kYW5kOiJcdTJhNTUiLGFuZGQ6Ilx1MmE1YyIsYW5kc2xvcGU6Ilx1MmE1OCIsYW5kdjoiXHUyYTVhIixhbmc6Ilx1MjIyMCIsYW5nbGU6Ilx1MjIyMCIsYW5nZToiXHUyOWE0Iixhbmdtc2Q6Ilx1MjIyMSIsbWVhc3VyZWRhbmdsZToiXHUyMjIxIixhbmdtc2RhYToiXHUyOWE4Iixhbmdtc2RhYjoiXHUyOWE5Iixhbmdtc2RhYzoiXHUyOWFhIixhbmdtc2RhZDoiXHUyOWFiIixhbmdtc2RhZToiXHUyOWFjIixhbmdtc2RhZjoiXHUyOWFkIixhbmdtc2RhZzoiXHUyOWFlIixhbmdtc2RhaDoiXHUyOWFmIixhbmdydDoiXHUyMjFmIixhbmdydHZiOiJcdTIyYmUiLGFuZ3J0dmJkOiJcdTI5OWQiLGFuZ3NwaDoiXHUyMjIyIixhbmd6YXJyOiJcdTIzN2MiLGFvZ29uOiJcdTAxMDUiLGFvcGY6Ilx1ZDgzNVx1ZGQ1MiIsYXBFOiJcdTJhNzAiLGFwYWNpcjoiXHUyYTZmIixhcGU6Ilx1MjI0YSIsYXBwcm94ZXE6Ilx1MjI0YSIsYXBpZDoiXHUyMjRiIixhcG9zOiInIixhcmluZzoiXHhlNSIsYXNjcjoiXHVkODM1XHVkY2I2Iixhc3Q6IioiLG1pZGFzdDoiKiIsYXRpbGRlOiJceGUzIixhdW1sOiJceGU0Iixhd2ludDoiXHUyYTExIixiTm90OiJcdTJhZWQiLGJhY2tjb25nOiJcdTIyNGMiLGJjb25nOiJcdTIyNGMiLGJhY2tlcHNpbG9uOiJcdTAzZjYiLGJlcHNpOiJcdTAzZjYiLGJhY2twcmltZToiXHUyMDM1IixicHJpbWU6Ilx1MjAzNSIsYmFja3NpbToiXHUyMjNkIixic2ltOiJcdTIyM2QiLGJhY2tzaW1lcToiXHUyMmNkIixic2ltZToiXHUyMmNkIixiYXJ2ZWU6Ilx1MjJiZCIsYmFyd2VkOiJcdTIzMDUiLGJhcndlZGdlOiJcdTIzMDUiLGJicmt0YnJrOiJcdTIzYjYiLGJjeToiXHUwNDMxIixiZHF1bzoiXHUyMDFlIixsZHF1b3I6Ilx1MjAxZSIsYmVtcHR5djoiXHUyOWIwIixiZXRhOiJcdTAzYjIiLGJldGg6Ilx1MjEzNiIsYmV0d2VlbjoiXHUyMjZjIix0d2l4dDoiXHUyMjZjIixiZnI6Ilx1ZDgzNVx1ZGQxZiIsYmlnY2lyYzoiXHUyNWVmIix4Y2lyYzoiXHUyNWVmIixiaWdvZG90OiJcdTJhMDAiLHhvZG90OiJcdTJhMDAiLGJpZ29wbHVzOiJcdTJhMDEiLHhvcGx1czoiXHUyYTAxIixiaWdvdGltZXM6Ilx1MmEwMiIseG90aW1lOiJcdTJhMDIiLGJpZ3NxY3VwOiJcdTJhMDYiLHhzcWN1cDoiXHUyYTA2IixiaWdzdGFyOiJcdTI2MDUiLHN0YXJmOiJcdTI2MDUiLGJpZ3RyaWFuZ2xlZG93bjoiXHUyNWJkIix4ZHRyaToiXHUyNWJkIixiaWd0cmlhbmdsZXVwOiJcdTI1YjMiLHh1dHJpOiJcdTI1YjMiLGJpZ3VwbHVzOiJcdTJhMDQiLHh1cGx1czoiXHUyYTA0Iixia2Fyb3c6Ilx1MjkwZCIscmJhcnI6Ilx1MjkwZCIsYmxhY2tsb3plbmdlOiJcdTI5ZWIiLGxvemY6Ilx1MjllYiIsYmxhY2t0cmlhbmdsZToiXHUyNWI0Iix1dHJpZjoiXHUyNWI0IixibGFja3RyaWFuZ2xlZG93bjoiXHUyNWJlIixkdHJpZjoiXHUyNWJlIixibGFja3RyaWFuZ2xlbGVmdDoiXHUyNWMyIixsdHJpZjoiXHUyNWMyIixibGFja3RyaWFuZ2xlcmlnaHQ6Ilx1MjViOCIscnRyaWY6Ilx1MjViOCIsYmxhbms6Ilx1MjQyMyIsYmxrMTI6Ilx1MjU5MiIsYmxrMTQ6Ilx1MjU5MSIsYmxrMzQ6Ilx1MjU5MyIsYmxvY2s6Ilx1MjU4OCIsYm5lOiI9XHUyMGU1IixibmVxdWl2OiJcdTIyNjFcdTIwZTUiLGJub3Q6Ilx1MjMxMCIsYm9wZjoiXHVkODM1XHVkZDUzIixib3d0aWU6Ilx1MjJjOCIsYm94REw6Ilx1MjU1NyIsYm94RFI6Ilx1MjU1NCIsYm94RGw6Ilx1MjU1NiIsYm94RHI6Ilx1MjU1MyIsYm94SDoiXHUyNTUwIixib3hIRDoiXHUyNTY2Iixib3hIVToiXHUyNTY5Iixib3hIZDoiXHUyNTY0Iixib3hIdToiXHUyNTY3Iixib3hVTDoiXHUyNTVkIixib3hVUjoiXHUyNTVhIixib3hVbDoiXHUyNTVjIixib3hVcjoiXHUyNTU5Iixib3hWOiJcdTI1NTEiLGJveFZIOiJcdTI1NmMiLGJveFZMOiJcdTI1NjMiLGJveFZSOiJcdTI1NjAiLGJveFZoOiJcdTI1NmIiLGJveFZsOiJcdTI1NjIiLGJveFZyOiJcdTI1NWYiLGJveGJveDoiXHUyOWM5Iixib3hkTDoiXHUyNTU1Iixib3hkUjoiXHUyNTUyIixib3hkbDoiXHUyNTEwIixib3hkcjoiXHUyNTBjIixib3hoRDoiXHUyNTY1Iixib3hoVToiXHUyNTY4Iixib3hoZDoiXHUyNTJjIixib3hodToiXHUyNTM0Iixib3htaW51czoiXHUyMjlmIixtaW51c2I6Ilx1MjI5ZiIsYm94cGx1czoiXHUyMjllIixwbHVzYjoiXHUyMjllIixib3h0aW1lczoiXHUyMmEwIix0aW1lc2I6Ilx1MjJhMCIsYm94dUw6Ilx1MjU1YiIsYm94dVI6Ilx1MjU1OCIsYm94dWw6Ilx1MjUxOCIsYm94dXI6Ilx1MjUxNCIsYm94djoiXHUyNTAyIixib3h2SDoiXHUyNTZhIixib3h2TDoiXHUyNTYxIixib3h2UjoiXHUyNTVlIixib3h2aDoiXHUyNTNjIixib3h2bDoiXHUyNTI0Iixib3h2cjoiXHUyNTFjIixicnZiYXI6Ilx4YTYiLGJzY3I6Ilx1ZDgzNVx1ZGNiNyIsYnNlbWk6Ilx1MjA0ZiIsYnNvbDoiXFwiLGJzb2xiOiJcdTI5YzUiLGJzb2xoc3ViOiJcdTI3YzgiLGJ1bGw6Ilx1MjAyMiIsYnVsbGV0OiJcdTIwMjIiLGJ1bXBFOiJcdTJhYWUiLGNhY3V0ZToiXHUwMTA3IixjYXA6Ilx1MjIyOSIsY2FwYW5kOiJcdTJhNDQiLGNhcGJyY3VwOiJcdTJhNDkiLGNhcGNhcDoiXHUyYTRiIixjYXBjdXA6Ilx1MmE0NyIsY2FwZG90OiJcdTJhNDAiLGNhcHM6Ilx1MjIyOVx1ZmUwMCIsY2FyZXQ6Ilx1MjA0MSIsY2NhcHM6Ilx1MmE0ZCIsY2Nhcm9uOiJcdTAxMGQiLGNjZWRpbDoiXHhlNyIsY2NpcmM6Ilx1MDEwOSIsY2N1cHM6Ilx1MmE0YyIsY2N1cHNzbToiXHUyYTUwIixjZG90OiJcdTAxMGIiLGNlbXB0eXY6Ilx1MjliMiIsY2VudDoiXHhhMiIsY2ZyOiJcdWQ4MzVcdWRkMjAiLGNoY3k6Ilx1MDQ0NyIsY2hlY2s6Ilx1MjcxMyIsY2hlY2ttYXJrOiJcdTI3MTMiLGNoaToiXHUwM2M3IixjaXI6Ilx1MjVjYiIsY2lyRToiXHUyOWMzIixjaXJjOiJcdTAyYzYiLGNpcmNlcToiXHUyMjU3IixjaXJlOiJcdTIyNTciLGNpcmNsZWFycm93bGVmdDoiXHUyMWJhIixvbGFycjoiXHUyMWJhIixjaXJjbGVhcnJvd3JpZ2h0OiJcdTIxYmIiLG9yYXJyOiJcdTIxYmIiLGNpcmNsZWRTOiJcdTI0YzgiLG9TOiJcdTI0YzgiLGNpcmNsZWRhc3Q6Ilx1MjI5YiIsb2FzdDoiXHUyMjliIixjaXJjbGVkY2lyYzoiXHUyMjlhIixvY2lyOiJcdTIyOWEiLGNpcmNsZWRkYXNoOiJcdTIyOWQiLG9kYXNoOiJcdTIyOWQiLGNpcmZuaW50OiJcdTJhMTAiLGNpcm1pZDoiXHUyYWVmIixjaXJzY2lyOiJcdTI5YzIiLGNsdWJzOiJcdTI2NjMiLGNsdWJzdWl0OiJcdTI2NjMiLGNvbG9uOiI6Iixjb21tYToiLCIsY29tbWF0OiJAIixjb21wOiJcdTIyMDEiLGNvbXBsZW1lbnQ6Ilx1MjIwMSIsY29uZ2RvdDoiXHUyYTZkIixjb3BmOiJcdWQ4MzVcdWRkNTQiLGNvcHlzcjoiXHUyMTE3IixjcmFycjoiXHUyMWI1Iixjcm9zczoiXHUyNzE3Iixjc2NyOiJcdWQ4MzVcdWRjYjgiLGNzdWI6Ilx1MmFjZiIsY3N1YmU6Ilx1MmFkMSIsY3N1cDoiXHUyYWQwIixjc3VwZToiXHUyYWQyIixjdGRvdDoiXHUyMmVmIixjdWRhcnJsOiJcdTI5MzgiLGN1ZGFycnI6Ilx1MjkzNSIsY3VlcHI6Ilx1MjJkZSIsY3VybHllcXByZWM6Ilx1MjJkZSIsY3Vlc2M6Ilx1MjJkZiIsY3VybHllcXN1Y2M6Ilx1MjJkZiIsY3VsYXJyOiJcdTIxYjYiLGN1cnZlYXJyb3dsZWZ0OiJcdTIxYjYiLGN1bGFycnA6Ilx1MjkzZCIsY3VwOiJcdTIyMmEiLGN1cGJyY2FwOiJcdTJhNDgiLGN1cGNhcDoiXHUyYTQ2IixjdXBjdXA6Ilx1MmE0YSIsY3VwZG90OiJcdTIyOGQiLGN1cG9yOiJcdTJhNDUiLGN1cHM6Ilx1MjIyYVx1ZmUwMCIsY3VyYXJyOiJcdTIxYjciLGN1cnZlYXJyb3dyaWdodDoiXHUyMWI3IixjdXJhcnJtOiJcdTI5M2MiLGN1cmx5dmVlOiJcdTIyY2UiLGN1dmVlOiJcdTIyY2UiLGN1cmx5d2VkZ2U6Ilx1MjJjZiIsY3V3ZWQ6Ilx1MjJjZiIsY3VycmVuOiJceGE0Iixjd2ludDoiXHUyMjMxIixjeWxjdHk6Ilx1MjMyZCIsZEhhcjoiXHUyOTY1IixkYWdnZXI6Ilx1MjAyMCIsZGFsZXRoOiJcdTIxMzgiLGRhc2g6Ilx1MjAxMCIsaHlwaGVuOiJcdTIwMTAiLGRia2Fyb3c6Ilx1MjkwZiIsckJhcnI6Ilx1MjkwZiIsZGNhcm9uOiJcdTAxMGYiLGRjeToiXHUwNDM0IixkZGFycjoiXHUyMWNhIixkb3duZG93bmFycm93czoiXHUyMWNhIixkZG90c2VxOiJcdTJhNzciLGVERG90OiJcdTJhNzciLGRlZzoiXHhiMCIsZGVsdGE6Ilx1MDNiNCIsZGVtcHR5djoiXHUyOWIxIixkZmlzaHQ6Ilx1Mjk3ZiIsZGZyOiJcdWQ4MzVcdWRkMjEiLGRpYW1vbmRzdWl0OiJcdTI2NjYiLGRpYW1zOiJcdTI2NjYiLGRpZ2FtbWE6Ilx1MDNkZCIsZ2FtbWFkOiJcdTAzZGQiLGRpc2luOiJcdTIyZjIiLGRpdjoiXHhmNyIsZGl2aWRlOiJceGY3IixkaXZpZGVvbnRpbWVzOiJcdTIyYzciLGRpdm9ueDoiXHUyMmM3IixkamN5OiJcdTA0NTIiLGRsY29ybjoiXHUyMzFlIixsbGNvcm5lcjoiXHUyMzFlIixkbGNyb3A6Ilx1MjMwZCIsZG9sbGFyOiIkIixkb3BmOiJcdWQ4MzVcdWRkNTUiLGRvdGVxZG90OiJcdTIyNTEiLGVEb3Q6Ilx1MjI1MSIsZG90bWludXM6Ilx1MjIzOCIsbWludXNkOiJcdTIyMzgiLGRvdHBsdXM6Ilx1MjIxNCIscGx1c2RvOiJcdTIyMTQiLGRvdHNxdWFyZToiXHUyMmExIixzZG90YjoiXHUyMmExIixkcmNvcm46Ilx1MjMxZiIsbHJjb3JuZXI6Ilx1MjMxZiIsZHJjcm9wOiJcdTIzMGMiLGRzY3I6Ilx1ZDgzNVx1ZGNiOSIsZHNjeToiXHUwNDU1Iixkc29sOiJcdTI5ZjYiLGRzdHJvazoiXHUwMTExIixkdGRvdDoiXHUyMmYxIixkdHJpOiJcdTI1YmYiLHRyaWFuZ2xlZG93bjoiXHUyNWJmIixkd2FuZ2xlOiJcdTI5YTYiLGR6Y3k6Ilx1MDQ1ZiIsZHppZ3JhcnI6Ilx1MjdmZiIsZWFjdXRlOiJceGU5IixlYXN0ZXI6Ilx1MmE2ZSIsZWNhcm9uOiJcdTAxMWIiLGVjaXI6Ilx1MjI1NiIsZXFjaXJjOiJcdTIyNTYiLGVjaXJjOiJceGVhIixlY29sb246Ilx1MjI1NSIsZXFjb2xvbjoiXHUyMjU1IixlY3k6Ilx1MDQ0ZCIsZWRvdDoiXHUwMTE3IixlZkRvdDoiXHUyMjUyIixmYWxsaW5nZG90c2VxOiJcdTIyNTIiLGVmcjoiXHVkODM1XHVkZDIyIixlZzoiXHUyYTlhIixlZ3JhdmU6Ilx4ZTgiLGVnczoiXHUyYTk2IixlcXNsYW50Z3RyOiJcdTJhOTYiLGVnc2RvdDoiXHUyYTk4IixlbDoiXHUyYTk5IixlbGludGVyczoiXHUyM2U3IixlbGw6Ilx1MjExMyIsZWxzOiJcdTJhOTUiLGVxc2xhbnRsZXNzOiJcdTJhOTUiLGVsc2RvdDoiXHUyYTk3IixlbWFjcjoiXHUwMTEzIixlbXB0eToiXHUyMjA1IixlbXB0eXNldDoiXHUyMjA1IixlbXB0eXY6Ilx1MjIwNSIsdmFybm90aGluZzoiXHUyMjA1IixlbXNwMTM6Ilx1MjAwNCIsZW1zcDE0OiJcdTIwMDUiLGVtc3A6Ilx1MjAwMyIsZW5nOiJcdTAxNGIiLGVuc3A6Ilx1MjAwMiIsZW9nb246Ilx1MDExOSIsZW9wZjoiXHVkODM1XHVkZDU2IixlcGFyOiJcdTIyZDUiLGVwYXJzbDoiXHUyOWUzIixlcGx1czoiXHUyYTcxIixlcHNpOiJcdTAzYjUiLGVwc2lsb246Ilx1MDNiNSIsZXBzaXY6Ilx1MDNmNSIsc3RyYWlnaHRlcHNpbG9uOiJcdTAzZjUiLHZhcmVwc2lsb246Ilx1MDNmNSIsZXF1YWxzOiI9IixlcXVlc3Q6Ilx1MjI1ZiIscXVlc3RlcToiXHUyMjVmIixlcXVpdkREOiJcdTJhNzgiLGVxdnBhcnNsOiJcdTI5ZTUiLGVyRG90OiJcdTIyNTMiLHJpc2luZ2RvdHNlcToiXHUyMjUzIixlcmFycjoiXHUyOTcxIixlc2NyOiJcdTIxMmYiLGV0YToiXHUwM2I3IixldGg6Ilx4ZjAiLGV1bWw6Ilx4ZWIiLGV1cm86Ilx1MjBhYyIsZXhjbDoiISIsZmN5OiJcdTA0NDQiLGZlbWFsZToiXHUyNjQwIixmZmlsaWc6Ilx1ZmIwMyIsZmZsaWc6Ilx1ZmIwMCIsZmZsbGlnOiJcdWZiMDQiLGZmcjoiXHVkODM1XHVkZDIzIixmaWxpZzoiXHVmYjAxIixmamxpZzoiZmoiLGZsYXQ6Ilx1MjY2ZCIsZmxsaWc6Ilx1ZmIwMiIsZmx0bnM6Ilx1MjViMSIsZm5vZjoiXHUwMTkyIixmb3BmOiJcdWQ4MzVcdWRkNTciLGZvcms6Ilx1MjJkNCIscGl0Y2hmb3JrOiJcdTIyZDQiLGZvcmt2OiJcdTJhZDkiLGZwYXJ0aW50OiJcdTJhMGQiLGZyYWMxMjoiXHhiZCIsaGFsZjoiXHhiZCIsZnJhYzEzOiJcdTIxNTMiLGZyYWMxNDoiXHhiYyIsZnJhYzE1OiJcdTIxNTUiLGZyYWMxNjoiXHUyMTU5IixmcmFjMTg6Ilx1MjE1YiIsZnJhYzIzOiJcdTIxNTQiLGZyYWMyNToiXHUyMTU2IixmcmFjMzQ6Ilx4YmUiLGZyYWMzNToiXHUyMTU3IixmcmFjMzg6Ilx1MjE1YyIsZnJhYzQ1OiJcdTIxNTgiLGZyYWM1NjoiXHUyMTVhIixmcmFjNTg6Ilx1MjE1ZCIsZnJhYzc4OiJcdTIxNWUiLGZyYXNsOiJcdTIwNDQiLGZyb3duOiJcdTIzMjIiLHNmcm93bjoiXHUyMzIyIixmc2NyOiJcdWQ4MzVcdWRjYmIiLGdFbDoiXHUyYThjIixndHJlcXFsZXNzOiJcdTJhOGMiLGdhY3V0ZToiXHUwMWY1IixnYW1tYToiXHUwM2IzIixnYXA6Ilx1MmE4NiIsZ3RyYXBwcm94OiJcdTJhODYiLGdicmV2ZToiXHUwMTFmIixnY2lyYzoiXHUwMTFkIixnY3k6Ilx1MDQzMyIsZ2RvdDoiXHUwMTIxIixnZXNjYzoiXHUyYWE5IixnZXNkb3Q6Ilx1MmE4MCIsZ2VzZG90bzoiXHUyYTgyIixnZXNkb3RvbDoiXHUyYTg0IixnZXNsOiJcdTIyZGJcdWZlMDAiLGdlc2xlczoiXHUyYTk0IixnZnI6Ilx1ZDgzNVx1ZGQyNCIsZ2ltZWw6Ilx1MjEzNyIsZ2pjeToiXHUwNDUzIixnbEU6Ilx1MmE5MiIsZ2xhOiJcdTJhYTUiLGdsajoiXHUyYWE0IixnbkU6Ilx1MjI2OSIsZ25lcXE6Ilx1MjI2OSIsZ25hcDoiXHUyYThhIixnbmFwcHJveDoiXHUyYThhIixnbmU6Ilx1MmE4OCIsZ25lcToiXHUyYTg4IixnbnNpbToiXHUyMmU3Iixnb3BmOiJcdWQ4MzVcdWRkNTgiLGdzY3I6Ilx1MjEwYSIsZ3NpbWU6Ilx1MmE4ZSIsZ3NpbWw6Ilx1MmE5MCIsZ3RjYzoiXHUyYWE3IixndGNpcjoiXHUyYTdhIixndGRvdDoiXHUyMmQ3IixndHJkb3Q6Ilx1MjJkNyIsZ3RsUGFyOiJcdTI5OTUiLGd0cXVlc3Q6Ilx1MmE3YyIsZ3RyYXJyOiJcdTI5NzgiLGd2ZXJ0bmVxcToiXHUyMjY5XHVmZTAwIixndm5FOiJcdTIyNjlcdWZlMDAiLGhhcmRjeToiXHUwNDRhIixoYXJyY2lyOiJcdTI5NDgiLGhhcnJ3OiJcdTIxYWQiLGxlZnRyaWdodHNxdWlnYXJyb3c6Ilx1MjFhZCIsaGJhcjoiXHUyMTBmIixoc2xhc2g6Ilx1MjEwZiIscGxhbmNrOiJcdTIxMGYiLHBsYW5rdjoiXHUyMTBmIixoY2lyYzoiXHUwMTI1IixoZWFydHM6Ilx1MjY2NSIsaGVhcnRzdWl0OiJcdTI2NjUiLGhlbGxpcDoiXHUyMDI2IixtbGRyOiJcdTIwMjYiLGhlcmNvbjoiXHUyMmI5IixoZnI6Ilx1ZDgzNVx1ZGQyNSIsaGtzZWFyb3c6Ilx1MjkyNSIsc2VhcmhrOiJcdTI5MjUiLGhrc3dhcm93OiJcdTI5MjYiLHN3YXJoazoiXHUyOTI2Iixob2FycjoiXHUyMWZmIixob210aHQ6Ilx1MjIzYiIsaG9va2xlZnRhcnJvdzoiXHUyMWE5IixsYXJyaGs6Ilx1MjFhOSIsaG9va3JpZ2h0YXJyb3c6Ilx1MjFhYSIscmFycmhrOiJcdTIxYWEiLGhvcGY6Ilx1ZDgzNVx1ZGQ1OSIsaG9yYmFyOiJcdTIwMTUiLGhzY3I6Ilx1ZDgzNVx1ZGNiZCIsaHN0cm9rOiJcdTAxMjciLGh5YnVsbDoiXHUyMDQzIixpYWN1dGU6Ilx4ZWQiLGljaXJjOiJceGVlIixpY3k6Ilx1MDQzOCIsaWVjeToiXHUwNDM1IixpZXhjbDoiXHhhMSIsaWZyOiJcdWQ4MzVcdWRkMjYiLGlncmF2ZToiXHhlYyIsaWlpaW50OiJcdTJhMGMiLHFpbnQ6Ilx1MmEwYyIsaWlpbnQ6Ilx1MjIyZCIsdGludDoiXHUyMjJkIixpaW5maW46Ilx1MjlkYyIsaWlvdGE6Ilx1MjEyOSIsaWpsaWc6Ilx1MDEzMyIsaW1hY3I6Ilx1MDEyYiIsaW1hdGg6Ilx1MDEzMSIsaW5vZG90OiJcdTAxMzEiLGltb2Y6Ilx1MjJiNyIsaW1wZWQ6Ilx1MDFiNSIsaW5jYXJlOiJcdTIxMDUiLGluZmluOiJcdTIyMWUiLGluZmludGllOiJcdTI5ZGQiLGludGNhbDoiXHUyMmJhIixpbnRlcmNhbDoiXHUyMmJhIixpbnRsYXJoazoiXHUyYTE3IixpbnRwcm9kOiJcdTJhM2MiLGlwcm9kOiJcdTJhM2MiLGlvY3k6Ilx1MDQ1MSIsaW9nb246Ilx1MDEyZiIsaW9wZjoiXHVkODM1XHVkZDVhIixpb3RhOiJcdTAzYjkiLGlxdWVzdDoiXHhiZiIsaXNjcjoiXHVkODM1XHVkY2JlIixpc2luRToiXHUyMmY5Iixpc2luZG90OiJcdTIyZjUiLGlzaW5zOiJcdTIyZjQiLGlzaW5zdjoiXHUyMmYzIixpdGlsZGU6Ilx1MDEyOSIsaXVrY3k6Ilx1MDQ1NiIsaXVtbDoiXHhlZiIsamNpcmM6Ilx1MDEzNSIsamN5OiJcdTA0MzkiLGpmcjoiXHVkODM1XHVkZDI3IixqbWF0aDoiXHUwMjM3Iixqb3BmOiJcdWQ4MzVcdWRkNWIiLGpzY3I6Ilx1ZDgzNVx1ZGNiZiIsanNlcmN5OiJcdTA0NTgiLGp1a2N5OiJcdTA0NTQiLGthcHBhOiJcdTAzYmEiLGthcHBhdjoiXHUwM2YwIix2YXJrYXBwYToiXHUwM2YwIixrY2VkaWw6Ilx1MDEzNyIsa2N5OiJcdTA0M2EiLGtmcjoiXHVkODM1XHVkZDI4IixrZ3JlZW46Ilx1MDEzOCIsa2hjeToiXHUwNDQ1IixramN5OiJcdTA0NWMiLGtvcGY6Ilx1ZDgzNVx1ZGQ1YyIsa3NjcjoiXHVkODM1XHVkY2MwIixsQXRhaWw6Ilx1MjkxYiIsbEJhcnI6Ilx1MjkwZSIsbEVnOiJcdTJhOGIiLGxlc3NlcXFndHI6Ilx1MmE4YiIsbEhhcjoiXHUyOTYyIixsYWN1dGU6Ilx1MDEzYSIsbGFlbXB0eXY6Ilx1MjliNCIsbGFtYmRhOiJcdTAzYmIiLGxhbmdkOiJcdTI5OTEiLGxhcDoiXHUyYTg1IixsZXNzYXBwcm94OiJcdTJhODUiLGxhcXVvOiJceGFiIixsYXJyYmZzOiJcdTI5MWYiLGxhcnJmczoiXHUyOTFkIixsYXJybHA6Ilx1MjFhYiIsbG9vcGFycm93bGVmdDoiXHUyMWFiIixsYXJycGw6Ilx1MjkzOSIsbGFycnNpbToiXHUyOTczIixsYXJydGw6Ilx1MjFhMiIsbGVmdGFycm93dGFpbDoiXHUyMWEyIixsYXQ6Ilx1MmFhYiIsbGF0YWlsOiJcdTI5MTkiLGxhdGU6Ilx1MmFhZCIsbGF0ZXM6Ilx1MmFhZFx1ZmUwMCIsbGJhcnI6Ilx1MjkwYyIsbGJicms6Ilx1Mjc3MiIsbGJyYWNlOiJ7IixsY3ViOiJ7IixsYnJhY2s6IlsiLGxzcWI6IlsiLGxicmtlOiJcdTI5OGIiLGxicmtzbGQ6Ilx1Mjk4ZiIsbGJya3NsdToiXHUyOThkIixsY2Fyb246Ilx1MDEzZSIsbGNlZGlsOiJcdTAxM2MiLGxjeToiXHUwNDNiIixsZGNhOiJcdTI5MzYiLGxkcmRoYXI6Ilx1Mjk2NyIsbGRydXNoYXI6Ilx1Mjk0YiIsbGRzaDoiXHUyMWIyIixsZToiXHUyMjY0IixsZXE6Ilx1MjI2NCIsbGVmdGxlZnRhcnJvd3M6Ilx1MjFjNyIsbGxhcnI6Ilx1MjFjNyIsbGVmdHRocmVldGltZXM6Ilx1MjJjYiIsbHRocmVlOiJcdTIyY2IiLGxlc2NjOiJcdTJhYTgiLGxlc2RvdDoiXHUyYTdmIixsZXNkb3RvOiJcdTJhODEiLGxlc2RvdG9yOiJcdTJhODMiLGxlc2c6Ilx1MjJkYVx1ZmUwMCIsbGVzZ2VzOiJcdTJhOTMiLGxlc3Nkb3Q6Ilx1MjJkNiIsbHRkb3Q6Ilx1MjJkNiIsbGZpc2h0OiJcdTI5N2MiLGxmcjoiXHVkODM1XHVkZDI5IixsZ0U6Ilx1MmE5MSIsbGhhcnVsOiJcdTI5NmEiLGxoYmxrOiJcdTI1ODQiLGxqY3k6Ilx1MDQ1OSIsbGxoYXJkOiJcdTI5NmIiLGxsdHJpOiJcdTI1ZmEiLGxtaWRvdDoiXHUwMTQwIixsbW91c3Q6Ilx1MjNiMCIsbG1vdXN0YWNoZToiXHUyM2IwIixsbkU6Ilx1MjI2OCIsbG5lcXE6Ilx1MjI2OCIsbG5hcDoiXHUyYTg5IixsbmFwcHJveDoiXHUyYTg5IixsbmU6Ilx1MmE4NyIsbG5lcToiXHUyYTg3IixsbnNpbToiXHUyMmU2Iixsb2FuZzoiXHUyN2VjIixsb2FycjoiXHUyMWZkIixsb25nbWFwc3RvOiJcdTI3ZmMiLHhtYXA6Ilx1MjdmYyIsbG9vcGFycm93cmlnaHQ6Ilx1MjFhYyIscmFycmxwOiJcdTIxYWMiLGxvcGFyOiJcdTI5ODUiLGxvcGY6Ilx1ZDgzNVx1ZGQ1ZCIsbG9wbHVzOiJcdTJhMmQiLGxvdGltZXM6Ilx1MmEzNCIsbG93YXN0OiJcdTIyMTciLGxvejoiXHUyNWNhIixsb3plbmdlOiJcdTI1Y2EiLGxwYXI6IigiLGxwYXJsdDoiXHUyOTkzIixscmhhcmQ6Ilx1Mjk2ZCIsbHJtOiJcdTIwMGUiLGxydHJpOiJcdTIyYmYiLGxzYXF1bzoiXHUyMDM5Iixsc2NyOiJcdWQ4MzVcdWRjYzEiLGxzaW1lOiJcdTJhOGQiLGxzaW1nOiJcdTJhOGYiLGxzcXVvcjoiXHUyMDFhIixzYnF1bzoiXHUyMDFhIixsc3Ryb2s6Ilx1MDE0MiIsbHRjYzoiXHUyYWE2IixsdGNpcjoiXHUyYTc5IixsdGltZXM6Ilx1MjJjOSIsbHRsYXJyOiJcdTI5NzYiLGx0cXVlc3Q6Ilx1MmE3YiIsbHRyUGFyOiJcdTI5OTYiLGx0cmk6Ilx1MjVjMyIsdHJpYW5nbGVsZWZ0OiJcdTI1YzMiLGx1cmRzaGFyOiJcdTI5NGEiLGx1cnVoYXI6Ilx1Mjk2NiIsbHZlcnRuZXFxOiJcdTIyNjhcdWZlMDAiLGx2bkU6Ilx1MjI2OFx1ZmUwMCIsbUREb3Q6Ilx1MjIzYSIsbWFjcjoiXHhhZiIsc3RybnM6Ilx4YWYiLG1hbGU6Ilx1MjY0MiIsbWFsdDoiXHUyNzIwIixtYWx0ZXNlOiJcdTI3MjAiLG1hcmtlcjoiXHUyNWFlIixtY29tbWE6Ilx1MmEyOSIsbWN5OiJcdTA0M2MiLG1kYXNoOiJcdTIwMTQiLG1mcjoiXHVkODM1XHVkZDJhIixtaG86Ilx1MjEyNyIsbWljcm86Ilx4YjUiLG1pZGNpcjoiXHUyYWYwIixtaW51czoiXHUyMjEyIixtaW51c2R1OiJcdTJhMmEiLG1sY3A6Ilx1MmFkYiIsbW9kZWxzOiJcdTIyYTciLG1vcGY6Ilx1ZDgzNVx1ZGQ1ZSIsbXNjcjoiXHVkODM1XHVkY2MyIixtdToiXHUwM2JjIixtdWx0aW1hcDoiXHUyMmI4IixtdW1hcDoiXHUyMmI4IixuR2c6Ilx1MjJkOVx1MDMzOCIsbkd0OiJcdTIyNmJcdTIwZDIiLG5MZWZ0YXJyb3c6Ilx1MjFjZCIsbmxBcnI6Ilx1MjFjZCIsbkxlZnRyaWdodGFycm93OiJcdTIxY2UiLG5oQXJyOiJcdTIxY2UiLG5MbDoiXHUyMmQ4XHUwMzM4IixuTHQ6Ilx1MjI2YVx1MjBkMiIsblJpZ2h0YXJyb3c6Ilx1MjFjZiIsbnJBcnI6Ilx1MjFjZiIsblZEYXNoOiJcdTIyYWYiLG5WZGFzaDoiXHUyMmFlIixuYWN1dGU6Ilx1MDE0NCIsbmFuZzoiXHUyMjIwXHUyMGQyIixuYXBFOiJcdTJhNzBcdTAzMzgiLG5hcGlkOiJcdTIyNGJcdTAzMzgiLG5hcG9zOiJcdTAxNDkiLG5hdHVyOiJcdTI2NmUiLG5hdHVyYWw6Ilx1MjY2ZSIsbmNhcDoiXHUyYTQzIixuY2Fyb246Ilx1MDE0OCIsbmNlZGlsOiJcdTAxNDYiLG5jb25nZG90OiJcdTJhNmRcdTAzMzgiLG5jdXA6Ilx1MmE0MiIsbmN5OiJcdTA0M2QiLG5kYXNoOiJcdTIwMTMiLG5lQXJyOiJcdTIxZDciLG5lYXJoazoiXHUyOTI0IixuZWRvdDoiXHUyMjUwXHUwMzM4IixuZXNlYXI6Ilx1MjkyOCIsdG9lYToiXHUyOTI4IixuZnI6Ilx1ZDgzNVx1ZGQyYiIsbmhhcnI6Ilx1MjFhZSIsbmxlZnRyaWdodGFycm93OiJcdTIxYWUiLG5ocGFyOiJcdTJhZjIiLG5pczoiXHUyMmZjIixuaXNkOiJcdTIyZmEiLG5qY3k6Ilx1MDQ1YSIsbmxFOiJcdTIyNjZcdTAzMzgiLG5sZXFxOiJcdTIyNjZcdTAzMzgiLG5sYXJyOiJcdTIxOWEiLG5sZWZ0YXJyb3c6Ilx1MjE5YSIsbmxkcjoiXHUyMDI1Iixub3BmOiJcdWQ4MzVcdWRkNWYiLG5vdDoiXHhhYyIsbm90aW5FOiJcdTIyZjlcdTAzMzgiLG5vdGluZG90OiJcdTIyZjVcdTAzMzgiLG5vdGludmI6Ilx1MjJmNyIsbm90aW52YzoiXHUyMmY2Iixub3RuaXZiOiJcdTIyZmUiLG5vdG5pdmM6Ilx1MjJmZCIsbnBhcnNsOiJcdTJhZmRcdTIwZTUiLG5wYXJ0OiJcdTIyMDJcdTAzMzgiLG5wb2xpbnQ6Ilx1MmExNCIsbnJhcnI6Ilx1MjE5YiIsbnJpZ2h0YXJyb3c6Ilx1MjE5YiIsbnJhcnJjOiJcdTI5MzNcdTAzMzgiLG5yYXJydzoiXHUyMTlkXHUwMzM4Iixuc2NyOiJcdWQ4MzVcdWRjYzMiLG5zdWI6Ilx1MjI4NCIsbnN1YkU6Ilx1MmFjNVx1MDMzOCIsbnN1YnNldGVxcToiXHUyYWM1XHUwMzM4Iixuc3VwOiJcdTIyODUiLG5zdXBFOiJcdTJhYzZcdTAzMzgiLG5zdXBzZXRlcXE6Ilx1MmFjNlx1MDMzOCIsbnRpbGRlOiJceGYxIixudToiXHUwM2JkIixudW06IiMiLG51bWVybzoiXHUyMTE2IixudW1zcDoiXHUyMDA3IixudkRhc2g6Ilx1MjJhZCIsbnZIYXJyOiJcdTI5MDQiLG52YXA6Ilx1MjI0ZFx1MjBkMiIsbnZkYXNoOiJcdTIyYWMiLG52Z2U6Ilx1MjI2NVx1MjBkMiIsbnZndDoiPlx1MjBkMiIsbnZpbmZpbjoiXHUyOWRlIixudmxBcnI6Ilx1MjkwMiIsbnZsZToiXHUyMjY0XHUyMGQyIixudmx0OiI8XHUyMGQyIixudmx0cmllOiJcdTIyYjRcdTIwZDIiLG52ckFycjoiXHUyOTAzIixudnJ0cmllOiJcdTIyYjVcdTIwZDIiLG52c2ltOiJcdTIyM2NcdTIwZDIiLG53QXJyOiJcdTIxZDYiLG53YXJoazoiXHUyOTIzIixud25lYXI6Ilx1MjkyNyIsb2FjdXRlOiJceGYzIixvY2lyYzoiXHhmNCIsb2N5OiJcdTA0M2UiLG9kYmxhYzoiXHUwMTUxIixvZGl2OiJcdTJhMzgiLG9kc29sZDoiXHUyOWJjIixvZWxpZzoiXHUwMTUzIixvZmNpcjoiXHUyOWJmIixvZnI6Ilx1ZDgzNVx1ZGQyYyIsb2dvbjoiXHUwMmRiIixvZ3JhdmU6Ilx4ZjIiLG9ndDoiXHUyOWMxIixvaGJhcjoiXHUyOWI1IixvbGNpcjoiXHUyOWJlIixvbGNyb3NzOiJcdTI5YmIiLG9sdDoiXHUyOWMwIixvbWFjcjoiXHUwMTRkIixvbWVnYToiXHUwM2M5IixvbWljcm9uOiJcdTAzYmYiLG9taWQ6Ilx1MjliNiIsb29wZjoiXHVkODM1XHVkZDYwIixvcGFyOiJcdTI5YjciLG9wZXJwOiJcdTI5YjkiLG9yOiJcdTIyMjgiLHZlZToiXHUyMjI4IixvcmQ6Ilx1MmE1ZCIsb3JkZXI6Ilx1MjEzNCIsb3JkZXJvZjoiXHUyMTM0Iixvc2NyOiJcdTIxMzQiLG9yZGY6Ilx4YWEiLG9yZG06Ilx4YmEiLG9yaWdvZjoiXHUyMmI2Iixvcm9yOiJcdTJhNTYiLG9yc2xvcGU6Ilx1MmE1NyIsb3J2OiJcdTJhNWIiLG9zbGFzaDoiXHhmOCIsb3NvbDoiXHUyMjk4IixvdGlsZGU6Ilx4ZjUiLG90aW1lc2FzOiJcdTJhMzYiLG91bWw6Ilx4ZjYiLG92YmFyOiJcdTIzM2QiLHBhcmE6Ilx4YjYiLHBhcnNpbToiXHUyYWYzIixwYXJzbDoiXHUyYWZkIixwY3k6Ilx1MDQzZiIscGVyY250OiIlIixwZXJpb2Q6Ii4iLHBlcm1pbDoiXHUyMDMwIixwZXJ0ZW5rOiJcdTIwMzEiLHBmcjoiXHVkODM1XHVkZDJkIixwaGk6Ilx1MDNjNiIscGhpdjoiXHUwM2Q1IixzdHJhaWdodHBoaToiXHUwM2Q1Iix2YXJwaGk6Ilx1MDNkNSIscGhvbmU6Ilx1MjYwZSIscGk6Ilx1MDNjMCIscGl2OiJcdTAzZDYiLHZhcnBpOiJcdTAzZDYiLHBsYW5ja2g6Ilx1MjEwZSIscGx1czoiKyIscGx1c2FjaXI6Ilx1MmEyMyIscGx1c2NpcjoiXHUyYTIyIixwbHVzZHU6Ilx1MmEyNSIscGx1c2U6Ilx1MmE3MiIscGx1c3NpbToiXHUyYTI2IixwbHVzdHdvOiJcdTJhMjciLHBvaW50aW50OiJcdTJhMTUiLHBvcGY6Ilx1ZDgzNVx1ZGQ2MSIscG91bmQ6Ilx4YTMiLHByRToiXHUyYWIzIixwcmFwOiJcdTJhYjciLHByZWNhcHByb3g6Ilx1MmFiNyIscHJlY25hcHByb3g6Ilx1MmFiOSIscHJuYXA6Ilx1MmFiOSIscHJlY25lcXE6Ilx1MmFiNSIscHJuRToiXHUyYWI1IixwcmVjbnNpbToiXHUyMmU4Iixwcm5zaW06Ilx1MjJlOCIscHJpbWU6Ilx1MjAzMiIscHJvZmFsYXI6Ilx1MjMyZSIscHJvZmxpbmU6Ilx1MjMxMiIscHJvZnN1cmY6Ilx1MjMxMyIscHJ1cmVsOiJcdTIyYjAiLHBzY3I6Ilx1ZDgzNVx1ZGNjNSIscHNpOiJcdTAzYzgiLHB1bmNzcDoiXHUyMDA4IixxZnI6Ilx1ZDgzNVx1ZGQyZSIscW9wZjoiXHVkODM1XHVkZDYyIixxcHJpbWU6Ilx1MjA1NyIscXNjcjoiXHVkODM1XHVkY2M2IixxdWF0aW50OiJcdTJhMTYiLHF1ZXN0OiI/IixyQXRhaWw6Ilx1MjkxYyIsckhhcjoiXHUyOTY0IixyYWNlOiJcdTIyM2RcdTAzMzEiLHJhY3V0ZToiXHUwMTU1IixyYWVtcHR5djoiXHUyOWIzIixyYW5nZDoiXHUyOTkyIixyYW5nZToiXHUyOWE1IixyYXF1bzoiXHhiYiIscmFycmFwOiJcdTI5NzUiLHJhcnJiZnM6Ilx1MjkyMCIscmFycmM6Ilx1MjkzMyIscmFycmZzOiJcdTI5MWUiLHJhcnJwbDoiXHUyOTQ1IixyYXJyc2ltOiJcdTI5NzQiLHJhcnJ0bDoiXHUyMWEzIixyaWdodGFycm93dGFpbDoiXHUyMWEzIixyYXJydzoiXHUyMTlkIixyaWdodHNxdWlnYXJyb3c6Ilx1MjE5ZCIscmF0YWlsOiJcdTI5MWEiLHJhdGlvOiJcdTIyMzYiLHJiYnJrOiJcdTI3NzMiLHJicmFjZToifSIscmN1YjoifSIscmJyYWNrOiJdIixyc3FiOiJdIixyYnJrZToiXHUyOThjIixyYnJrc2xkOiJcdTI5OGUiLHJicmtzbHU6Ilx1Mjk5MCIscmNhcm9uOiJcdTAxNTkiLHJjZWRpbDoiXHUwMTU3IixyY3k6Ilx1MDQ0MCIscmRjYToiXHUyOTM3IixyZGxkaGFyOiJcdTI5NjkiLHJkc2g6Ilx1MjFiMyIscmVjdDoiXHUyNWFkIixyZmlzaHQ6Ilx1Mjk3ZCIscmZyOiJcdWQ4MzVcdWRkMmYiLHJoYXJ1bDoiXHUyOTZjIixyaG86Ilx1MDNjMSIscmhvdjoiXHUwM2YxIix2YXJyaG86Ilx1MDNmMSIscmlnaHRyaWdodGFycm93czoiXHUyMWM5IixycmFycjoiXHUyMWM5IixyaWdodHRocmVldGltZXM6Ilx1MjJjYyIscnRocmVlOiJcdTIyY2MiLHJpbmc6Ilx1MDJkYSIscmxtOiJcdTIwMGYiLHJtb3VzdDoiXHUyM2IxIixybW91c3RhY2hlOiJcdTIzYjEiLHJubWlkOiJcdTJhZWUiLHJvYW5nOiJcdTI3ZWQiLHJvYXJyOiJcdTIxZmUiLHJvcGFyOiJcdTI5ODYiLHJvcGY6Ilx1ZDgzNVx1ZGQ2MyIscm9wbHVzOiJcdTJhMmUiLHJvdGltZXM6Ilx1MmEzNSIscnBhcjoiKSIscnBhcmd0OiJcdTI5OTQiLHJwcG9saW50OiJcdTJhMTIiLHJzYXF1bzoiXHUyMDNhIixyc2NyOiJcdWQ4MzVcdWRjYzciLHJ0aW1lczoiXHUyMmNhIixydHJpOiJcdTI1YjkiLHRyaWFuZ2xlcmlnaHQ6Ilx1MjViOSIscnRyaWx0cmk6Ilx1MjljZSIscnVsdWhhcjoiXHUyOTY4IixyeDoiXHUyMTFlIixzYWN1dGU6Ilx1MDE1YiIsc2NFOiJcdTJhYjQiLHNjYXA6Ilx1MmFiOCIsc3VjY2FwcHJveDoiXHUyYWI4IixzY2Fyb246Ilx1MDE2MSIsc2NlZGlsOiJcdTAxNWYiLHNjaXJjOiJcdTAxNWQiLHNjbkU6Ilx1MmFiNiIsc3VjY25lcXE6Ilx1MmFiNiIsc2NuYXA6Ilx1MmFiYSIsc3VjY25hcHByb3g6Ilx1MmFiYSIsc2Nuc2ltOiJcdTIyZTkiLHN1Y2Nuc2ltOiJcdTIyZTkiLHNjcG9saW50OiJcdTJhMTMiLHNjeToiXHUwNDQxIixzZG90OiJcdTIyYzUiLHNkb3RlOiJcdTJhNjYiLHNlQXJyOiJcdTIxZDgiLHNlY3Q6Ilx4YTciLHNlbWk6IjsiLHNlc3dhcjoiXHUyOTI5Iix0b3NhOiJcdTI5MjkiLHNleHQ6Ilx1MjczNiIsc2ZyOiJcdWQ4MzVcdWRkMzAiLHNoYXJwOiJcdTI2NmYiLHNoY2hjeToiXHUwNDQ5IixzaGN5OiJcdTA0NDgiLHNoeToiXHhhZCIsc2lnbWE6Ilx1MDNjMyIsc2lnbWFmOiJcdTAzYzIiLHNpZ21hdjoiXHUwM2MyIix2YXJzaWdtYToiXHUwM2MyIixzaW1kb3Q6Ilx1MmE2YSIsc2ltZzoiXHUyYTllIixzaW1nRToiXHUyYWEwIixzaW1sOiJcdTJhOWQiLHNpbWxFOiJcdTJhOWYiLHNpbW5lOiJcdTIyNDYiLHNpbXBsdXM6Ilx1MmEyNCIsc2ltcmFycjoiXHUyOTcyIixzbWFzaHA6Ilx1MmEzMyIsc21lcGFyc2w6Ilx1MjllNCIsc21pbGU6Ilx1MjMyMyIsc3NtaWxlOiJcdTIzMjMiLHNtdDoiXHUyYWFhIixzbXRlOiJcdTJhYWMiLHNtdGVzOiJcdTJhYWNcdWZlMDAiLHNvZnRjeToiXHUwNDRjIixzb2w6Ii8iLHNvbGI6Ilx1MjljNCIsc29sYmFyOiJcdTIzM2YiLHNvcGY6Ilx1ZDgzNVx1ZGQ2NCIsc3BhZGVzOiJcdTI2NjAiLHNwYWRlc3VpdDoiXHUyNjYwIixzcWNhcHM6Ilx1MjI5M1x1ZmUwMCIsc3FjdXBzOiJcdTIyOTRcdWZlMDAiLHNzY3I6Ilx1ZDgzNVx1ZGNjOCIsc3RhcjoiXHUyNjA2IixzdWI6Ilx1MjI4MiIsc3Vic2V0OiJcdTIyODIiLHN1YkU6Ilx1MmFjNSIsc3Vic2V0ZXFxOiJcdTJhYzUiLHN1YmRvdDoiXHUyYWJkIixzdWJlZG90OiJcdTJhYzMiLHN1Ym11bHQ6Ilx1MmFjMSIsc3VibkU6Ilx1MmFjYiIsc3Vic2V0bmVxcToiXHUyYWNiIixzdWJuZToiXHUyMjhhIixzdWJzZXRuZXE6Ilx1MjI4YSIsc3VicGx1czoiXHUyYWJmIixzdWJyYXJyOiJcdTI5NzkiLHN1YnNpbToiXHUyYWM3IixzdWJzdWI6Ilx1MmFkNSIsc3Vic3VwOiJcdTJhZDMiLHN1bmc6Ilx1MjY2YSIsc3VwMToiXHhiOSIsc3VwMjoiXHhiMiIsc3VwMzoiXHhiMyIsc3VwRToiXHUyYWM2IixzdXBzZXRlcXE6Ilx1MmFjNiIsc3VwZG90OiJcdTJhYmUiLHN1cGRzdWI6Ilx1MmFkOCIsc3VwZWRvdDoiXHUyYWM0IixzdXBoc29sOiJcdTI3YzkiLHN1cGhzdWI6Ilx1MmFkNyIsc3VwbGFycjoiXHUyOTdiIixzdXBtdWx0OiJcdTJhYzIiLHN1cG5FOiJcdTJhY2MiLHN1cHNldG5lcXE6Ilx1MmFjYyIsc3VwbmU6Ilx1MjI4YiIsc3Vwc2V0bmVxOiJcdTIyOGIiLHN1cHBsdXM6Ilx1MmFjMCIsc3Vwc2ltOiJcdTJhYzgiLHN1cHN1YjoiXHUyYWQ0IixzdXBzdXA6Ilx1MmFkNiIsc3dBcnI6Ilx1MjFkOSIsc3dud2FyOiJcdTI5MmEiLHN6bGlnOiJceGRmIix0YXJnZXQ6Ilx1MjMxNiIsdGF1OiJcdTAzYzQiLHRjYXJvbjoiXHUwMTY1Iix0Y2VkaWw6Ilx1MDE2MyIsdGN5OiJcdTA0NDIiLHRlbHJlYzoiXHUyMzE1Iix0ZnI6Ilx1ZDgzNVx1ZGQzMSIsdGhldGE6Ilx1MDNiOCIsdGhldGFzeW06Ilx1MDNkMSIsdGhldGF2OiJcdTAzZDEiLHZhcnRoZXRhOiJcdTAzZDEiLHRob3JuOiJceGZlIix0aW1lczoiXHhkNyIsdGltZXNiYXI6Ilx1MmEzMSIsdGltZXNkOiJcdTJhMzAiLHRvcGJvdDoiXHUyMzM2Iix0b3BjaXI6Ilx1MmFmMSIsdG9wZjoiXHVkODM1XHVkZDY1Iix0b3Bmb3JrOiJcdTJhZGEiLHRwcmltZToiXHUyMDM0Iix0cmlhbmdsZToiXHUyNWI1Iix1dHJpOiJcdTI1YjUiLHRyaWFuZ2xlcToiXHUyMjVjIix0cmllOiJcdTIyNWMiLHRyaWRvdDoiXHUyNWVjIix0cmltaW51czoiXHUyYTNhIix0cmlwbHVzOiJcdTJhMzkiLHRyaXNiOiJcdTI5Y2QiLHRyaXRpbWU6Ilx1MmEzYiIsdHJwZXppdW06Ilx1MjNlMiIsdHNjcjoiXHVkODM1XHVkY2M5Iix0c2N5OiJcdTA0NDYiLHRzaGN5OiJcdTA0NWIiLHRzdHJvazoiXHUwMTY3Iix1SGFyOiJcdTI5NjMiLHVhY3V0ZToiXHhmYSIsdWJyY3k6Ilx1MDQ1ZSIsdWJyZXZlOiJcdTAxNmQiLHVjaXJjOiJceGZiIix1Y3k6Ilx1MDQ0MyIsdWRibGFjOiJcdTAxNzEiLHVmaXNodDoiXHUyOTdlIix1ZnI6Ilx1ZDgzNVx1ZGQzMiIsdWdyYXZlOiJceGY5Iix1aGJsazoiXHUyNTgwIix1bGNvcm46Ilx1MjMxYyIsdWxjb3JuZXI6Ilx1MjMxYyIsdWxjcm9wOiJcdTIzMGYiLHVsdHJpOiJcdTI1ZjgiLHVtYWNyOiJcdTAxNmIiLHVvZ29uOiJcdTAxNzMiLHVvcGY6Ilx1ZDgzNVx1ZGQ2NiIsdXBzaToiXHUwM2M1Iix1cHNpbG9uOiJcdTAzYzUiLHVwdXBhcnJvd3M6Ilx1MjFjOCIsdXVhcnI6Ilx1MjFjOCIsdXJjb3JuOiJcdTIzMWQiLHVyY29ybmVyOiJcdTIzMWQiLHVyY3JvcDoiXHUyMzBlIix1cmluZzoiXHUwMTZmIix1cnRyaToiXHUyNWY5Iix1c2NyOiJcdWQ4MzVcdWRjY2EiLHV0ZG90OiJcdTIyZjAiLHV0aWxkZToiXHUwMTY5Iix1dW1sOiJceGZjIix1d2FuZ2xlOiJcdTI5YTciLHZCYXI6Ilx1MmFlOCIsdkJhcnY6Ilx1MmFlOSIsdmFuZ3J0OiJcdTI5OWMiLHZhcnN1YnNldG5lcToiXHUyMjhhXHVmZTAwIix2c3VibmU6Ilx1MjI4YVx1ZmUwMCIsdmFyc3Vic2V0bmVxcToiXHUyYWNiXHVmZTAwIix2c3VibkU6Ilx1MmFjYlx1ZmUwMCIsdmFyc3Vwc2V0bmVxOiJcdTIyOGJcdWZlMDAiLHZzdXBuZToiXHUyMjhiXHVmZTAwIix2YXJzdXBzZXRuZXFxOiJcdTJhY2NcdWZlMDAiLHZzdXBuRToiXHUyYWNjXHVmZTAwIix2Y3k6Ilx1MDQzMiIsdmVlYmFyOiJcdTIyYmIiLHZlZWVxOiJcdTIyNWEiLHZlbGxpcDoiXHUyMmVlIix2ZnI6Ilx1ZDgzNVx1ZGQzMyIsdm9wZjoiXHVkODM1XHVkZDY3Iix2c2NyOiJcdWQ4MzVcdWRjY2IiLHZ6aWd6YWc6Ilx1Mjk5YSIsd2NpcmM6Ilx1MDE3NSIsd2VkYmFyOiJcdTJhNWYiLHdlZGdlcToiXHUyMjU5Iix3ZWllcnA6Ilx1MjExOCIsd3A6Ilx1MjExOCIsd2ZyOiJcdWQ4MzVcdWRkMzQiLHdvcGY6Ilx1ZDgzNVx1ZGQ2OCIsd3NjcjoiXHVkODM1XHVkY2NjIix4ZnI6Ilx1ZDgzNVx1ZGQzNSIseGk6Ilx1MDNiZSIseG5pczoiXHUyMmZiIix4b3BmOiJcdWQ4MzVcdWRkNjkiLHhzY3I6Ilx1ZDgzNVx1ZGNjZCIseWFjdXRlOiJceGZkIix5YWN5OiJcdTA0NGYiLHljaXJjOiJcdTAxNzciLHljeToiXHUwNDRiIix5ZW46Ilx4YTUiLHlmcjoiXHVkODM1XHVkZDM2Iix5aWN5OiJcdTA0NTciLHlvcGY6Ilx1ZDgzNVx1ZGQ2YSIseXNjcjoiXHVkODM1XHVkY2NlIix5dWN5OiJcdTA0NGUiLHl1bWw6Ilx4ZmYiLHphY3V0ZToiXHUwMTdhIix6Y2Fyb246Ilx1MDE3ZSIsemN5OiJcdTA0MzciLHpkb3Q6Ilx1MDE3YyIsemV0YToiXHUwM2I2Iix6ZnI6Ilx1ZDgzNVx1ZGQzNyIsemhjeToiXHUwNDM2Iix6aWdyYXJyOiJcdTIxZGQiLHpvcGY6Ilx1ZDgzNVx1ZGQ2YiIsenNjcjoiXHVkODM1XHVkY2NmIix6d2o6Ilx1MjAwZCIsenduajoiXHUyMDBjIixuZ3NwOiJcdWU1MDAifSxLYj1jbGFzcyBleHRlbmRzIE1me2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihpLHQpLHRoaXMudG9rZW5UeXBlPWV9fSxHeWU9L1xyXG4/L2c7ZnVuY3Rpb24gVWIobil7cmV0dXJuYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICIkezA9PT1uPyJFT0YiOlN0cmluZy5mcm9tQ2hhckNvZGUobil9ImB9ZnVuY3Rpb24gVjkobil7cmV0dXJuYFVua25vd24gZW50aXR5ICIke259IiAtIHVzZSB0aGUgIiYjPGRlY2ltYWw+OyIgb3IgICImI3g8aGV4PjsiIHN5bnRheGB9dmFyIFpiPSgoKT0+e3JldHVybihuPVpifHwoWmI9e30pKS5IRVg9ImhleGFkZWNpbWFsIixuLkRFQz0iZGVjaW1hbCIsWmI7dmFyIG59KSgpLEpiPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3I9dH19O2Z1bmN0aW9uIElhKG4pe3JldHVybiFmMyhuKXx8MD09PW59ZnVuY3Rpb24gSDkobil7cmV0dXJuIGYzKG4pfHw2Mj09PW58fDYwPT09bnx8NDc9PT1ufHwzOT09PW58fDM0PT09bnx8NjE9PT1ufHwwPT09bn1mdW5jdGlvbiBZeWUobil7cmV0dXJuIDU5PT09bnx8MD09PW58fCFmdW5jdGlvbihuKXtyZXR1cm4gbj49OTcmJm48PTEwMnx8bj49NjUmJm48PTcwfHxwcChuKX0obil9ZnVuY3Rpb24gWHllKG4pe3JldHVybiA1OT09PW58fDA9PT1ufHwhbTMobil9ZnVuY3Rpb24gVTkobil7cmV0dXJuIG4+PTk3JiZuPD0xMjI/bi05Nys2NTpufXZhciBEZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHQgaW5zdGFuY2VvZiBEZil7dGhpcy5maWxlPXQuZmlsZSx0aGlzLmlucHV0PXQuaW5wdXQsdGhpcy5lbmQ9dC5lbmQ7bGV0IGk9dC5zdGF0ZTt0aGlzLnN0YXRlPXtwZWVrOmkucGVlayxvZmZzZXQ6aS5vZmZzZXQsbGluZTppLmxpbmUsY29sdW1uOmkuY29sdW1ufX1lbHNle2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvZ3JhbW1pbmcgZXJyb3I6IHRoZSByYW5nZSBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggYSBmaWxlIGFyZ3VtZW50LiIpO3RoaXMuZmlsZT10LHRoaXMuaW5wdXQ9dC5jb250ZW50LHRoaXMuZW5kPWUuZW5kUG9zLHRoaXMuc3RhdGU9e3BlZWs6LTEsb2Zmc2V0OmUuc3RhcnRQb3MsbGluZTplLnN0YXJ0TGluZSxjb2x1bW46ZS5zdGFydENvbH19fWNsb25lKCl7cmV0dXJuIG5ldyBEZih0aGlzKX1wZWVrKCl7cmV0dXJuIHRoaXMuc3RhdGUucGVla31jaGFyc0xlZnQoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGF0ZS5vZmZzZXR9ZGlmZih0KXtyZXR1cm4gdGhpcy5zdGF0ZS5vZmZzZXQtdC5zdGF0ZS5vZmZzZXR9YWR2YW5jZSgpe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuc3RhdGUpfWluaXQoKXt0aGlzLnVwZGF0ZVBlZWsodGhpcy5zdGF0ZSl9Z2V0U3Bhbih0LGUpe2xldCBpPXQ9dHx8dGhpcztpZihlKWZvcig7dGhpcy5kaWZmKHQpPjAmJi0xIT09ZS5pbmRleE9mKHQucGVlaygpKTspaT09PXQmJih0PXQuY2xvbmUoKSksdC5hZHZhbmNlKCk7bGV0IHI9dGhpcy5sb2NhdGlvbkZyb21DdXJzb3IodCksbz10aGlzLmxvY2F0aW9uRnJvbUN1cnNvcih0aGlzKSxzPWkhPT10P3RoaXMubG9jYXRpb25Gcm9tQ3Vyc29yKGkpOnI7cmV0dXJuIG5ldyBUbyhyLG8scyl9Z2V0Q2hhcnModCl7cmV0dXJuIHRoaXMuaW5wdXQuc3Vic3RyaW5nKHQuc3RhdGUub2Zmc2V0LHRoaXMuc3RhdGUub2Zmc2V0KX1jaGFyQXQodCl7cmV0dXJuIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0KX1hZHZhbmNlU3RhdGUodCl7aWYodC5vZmZzZXQ+PXRoaXMuZW5kKXRocm93IHRoaXMuc3RhdGU9dCxuZXcgSXgoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyICJFT0YiJyx0aGlzKTtsZXQgZT10aGlzLmNoYXJBdCh0Lm9mZnNldCk7MTA9PT1lPyh0LmxpbmUrKyx0LmNvbHVtbj0wKTpXcShlKXx8dC5jb2x1bW4rKyx0Lm9mZnNldCsrLHRoaXMudXBkYXRlUGVlayh0KX11cGRhdGVQZWVrKHQpe3QucGVlaz10Lm9mZnNldD49dGhpcy5lbmQ/MDp0aGlzLmNoYXJBdCh0Lm9mZnNldCl9bG9jYXRpb25Gcm9tQ3Vyc29yKHQpe3JldHVybiBuZXcgd2YodC5maWxlLHQuc3RhdGUub2Zmc2V0LHQuc3RhdGUubGluZSx0LnN0YXRlLmNvbHVtbil9fSxMMD1jbGFzcyBleHRlbmRzIERme2NvbnN0cnVjdG9yKHQsZSl7dCBpbnN0YW5jZW9mIEwwPyhzdXBlcih0KSx0aGlzLmludGVybmFsU3RhdGU9ey4uLnQuaW50ZXJuYWxTdGF0ZX0pOihzdXBlcih0LGUpLHRoaXMuaW50ZXJuYWxTdGF0ZT10aGlzLnN0YXRlKX1hZHZhbmNlKCl7dGhpcy5zdGF0ZT10aGlzLmludGVybmFsU3RhdGUsc3VwZXIuYWR2YW5jZSgpLHRoaXMucHJvY2Vzc0VzY2FwZVNlcXVlbmNlKCl9aW5pdCgpe3N1cGVyLmluaXQoKSx0aGlzLnByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpfWNsb25lKCl7cmV0dXJuIG5ldyBMMCh0aGlzKX1nZXRDaGFycyh0KXtsZXQgZT10LmNsb25lKCksaT0iIjtmb3IoO2UuaW50ZXJuYWxTdGF0ZS5vZmZzZXQ8dGhpcy5pbnRlcm5hbFN0YXRlLm9mZnNldDspaSs9U3RyaW5nLmZyb21Db2RlUG9pbnQoZS5wZWVrKCkpLGUuYWR2YW5jZSgpO3JldHVybiBpfXByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpe2xldCB0PSgpPT50aGlzLmludGVybmFsU3RhdGUucGVlaztpZig5Mj09PXQoKSlpZih0aGlzLmludGVybmFsU3RhdGU9ey4uLnRoaXMuc3RhdGV9LHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksMTEwPT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMDtlbHNlIGlmKDExND09PXQoKSl0aGlzLnN0YXRlLnBlZWs9MTM7ZWxzZSBpZigxMTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTExO2Vsc2UgaWYoMTE2PT09dCgpKXRoaXMuc3RhdGUucGVlaz05O2Vsc2UgaWYoOTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTg7ZWxzZSBpZigxMDI9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTEyO2Vsc2UgaWYoMTE3PT09dCgpKWlmKHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdCgpPT09ZnApe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSk7bGV0IGU9dGhpcy5jbG9uZSgpLGk9MDtmb3IoO3QoKSE9PXR1Oyl0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSxpKX1lbHNle2xldCBlPXRoaXMuY2xvbmUoKTt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSw0KX1lbHNlIGlmKDEyMD09PXQoKSl7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKTtsZXQgZT10aGlzLmNsb25lKCk7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSwyKX1lbHNlIGlmKHg5KHQoKSkpe2xldCBlPSIiLGk9MCxyPXRoaXMuY2xvbmUoKTtmb3IoO3g5KHQoKSkmJmk8Mzspcj10aGlzLmNsb25lKCksZSs9U3RyaW5nLmZyb21Db2RlUG9pbnQodCgpKSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9cGFyc2VJbnQoZSw4KSx0aGlzLmludGVybmFsU3RhdGU9ci5pbnRlcm5hbFN0YXRlfWVsc2UgV3EodGhpcy5pbnRlcm5hbFN0YXRlLnBlZWspPyh0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuc3RhdGU9dGhpcy5pbnRlcm5hbFN0YXRlKTp0aGlzLnN0YXRlLnBlZWs9dGhpcy5pbnRlcm5hbFN0YXRlLnBlZWt9ZGVjb2RlSGV4RGlnaXRzKHQsZSl7bGV0IGk9dGhpcy5pbnB1dC5zbGljZSh0LmludGVybmFsU3RhdGUub2Zmc2V0LHQuaW50ZXJuYWxTdGF0ZS5vZmZzZXQrZSkscj1wYXJzZUludChpLDE2KTtpZihpc05hTihyKSl0aHJvdyB0LnN0YXRlPXQuaW50ZXJuYWxTdGF0ZSxuZXcgSXgoIkludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIix0KTtyZXR1cm4gcn19LEl4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5tc2c9dCx0aGlzLmN1cnNvcj1lfX0sUGE9Y2xhc3MgZXh0ZW5kcyBNZntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVsZW1lbnROYW1lPXR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIG5ldyBQYSh0LGUsaSl9fSxVMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdE5vZGVzPXQsdGhpcy5lcnJvcnM9ZX19LEZMPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZ2V0VGFnRGVmaW5pdGlvbj10fXBhcnNlKHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQsZSxpPXt9KXtsZXQgcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX2dldFRhZ0RlZmluaXRpb249ZSx0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2s9W10sdGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMudG9rZW5zPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPVtdLHRoaXMuX3Rva2VuaXplSWN1PWkudG9rZW5pemVFeHBhbnNpb25Gb3Jtc3x8ITEsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1pLmludGVycG9sYXRpb25Db25maWd8fCRjLHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzPWkubGVhZGluZ1RyaXZpYUNoYXJzJiZpLmxlYWRpbmdUcml2aWFDaGFycy5tYXAobz0+by5jb2RlUG9pbnRBdCgwKXx8MCk7bGV0IHI9aS5yYW5nZXx8e2VuZFBvczp0LmNvbnRlbnQubGVuZ3RoLHN0YXJ0UG9zOjAsc3RhcnRMaW5lOjAsc3RhcnRDb2w6MH07dGhpcy5fY3Vyc29yPWkuZXNjYXBlZFN0cmluZz9uZXcgTDAodCxyKTpuZXcgRGYodCxyKSx0aGlzLl9wcmVzZXJ2ZUxpbmVFbmRpbmdzPWkucHJlc2VydmVMaW5lRW5kaW5nc3x8ITEsdGhpcy5fZXNjYXBlZFN0cmluZz1pLmVzY2FwZWRTdHJpbmd8fCExLHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcz1pLmkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVc3x8ITE7dHJ5e3RoaXMuX2N1cnNvci5pbml0KCl9Y2F0Y2gobyl7dGhpcy5oYW5kbGVFcnJvcihvKX19X3Byb2Nlc3NDYXJyaWFnZVJldHVybnModCl7cmV0dXJuIHRoaXMuX3ByZXNlcnZlTGluZUVuZGluZ3M/dDp0LnJlcGxhY2UoR3llLCJcbiIpfXRva2VuaXplKCl7Zm9yKDswIT09dGhpcy5fY3Vyc29yLnBlZWsoKTspe2xldCB0PXRoaXMuX2N1cnNvci5jbG9uZSgpO3RyeXt0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjApP3RoaXMuX2F0dGVtcHRDaGFyQ29kZSgzMyk/dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDkxKT90aGlzLl9jb25zdW1lQ2RhdGEodCk6dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ1KT90aGlzLl9jb25zdW1lQ29tbWVudCh0KTp0aGlzLl9jb25zdW1lRG9jVHlwZSh0KTp0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpP3RoaXMuX2NvbnN1bWVUYWdDbG9zZSh0KTp0aGlzLl9jb25zdW1lVGFnT3Blbih0KTp0aGlzLl90b2tlbml6ZUljdSYmdGhpcy5fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl8fHRoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbig1LDgsKCk9PnRoaXMuX2lzVGV4dEVuZCgpLCgpPT50aGlzLl9pc1RhZ1N0YXJ0KCkpfWNhdGNoKGUpe3RoaXMuaGFuZGxlRXJyb3IoZSl9fXRoaXMuX2JlZ2luVG9rZW4oMjQpLHRoaXMuX2VuZFRva2VuKFtdKX1fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl7aWYodGhpcy5pc0V4cGFuc2lvbkZvcm1TdGFydCgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uRm9ybVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKSE9PXR1JiZ0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKT09PXR1KXtpZih0aGlzLl9pc0luRXhwYW5zaW9uQ2FzZSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZUVuZCgpLCEwO2lmKHRoaXMuX2lzSW5FeHBhbnNpb25Gb3JtKCkpcmV0dXJuIHRoaXMuX2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCksITB9cmV0dXJuITF9X2JlZ2luVG9rZW4odCxlPXRoaXMuX2N1cnNvci5jbG9uZSgpKXt0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1lLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9dH1fZW5kVG9rZW4odCxlKXtpZihudWxsPT09dGhpcy5fY3VycmVudFRva2VuU3RhcnQpdGhyb3cgbmV3IEtiKCJQcm9ncmFtbWluZyBlcnJvciAtIGF0dGVtcHRlZCB0byBlbmQgYSB0b2tlbiB3aGVuIHRoZXJlIHdhcyBubyBzdGFydCB0byB0aGUgdG9rZW4iLHRoaXMuX2N1cnJlbnRUb2tlblR5cGUsdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpO2lmKG51bGw9PT10aGlzLl9jdXJyZW50VG9rZW5UeXBlKXRocm93IG5ldyBLYigiUHJvZ3JhbW1pbmcgZXJyb3IgLSBhdHRlbXB0ZWQgdG8gZW5kIGEgdG9rZW4gd2hpY2ggaGFzIG5vIHRva2VuIHR5cGUiLG51bGwsdGhpcy5fY3Vyc29yLmdldFNwYW4odGhpcy5fY3VycmVudFRva2VuU3RhcnQpKTtsZXQgaT17dHlwZTp0aGlzLl9jdXJyZW50VG9rZW5UeXBlLHBhcnRzOnQsc291cmNlU3BhbjooZT8/dGhpcy5fY3Vyc29yKS5nZXRTcGFuKHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0LHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzKX07cmV0dXJuIHRoaXMudG9rZW5zLnB1c2goaSksdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsaX1fY3JlYXRlRXJyb3IodCxlKXt0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpJiYodCs9JyAoRG8geW91IGhhdmUgYW4gdW5lc2NhcGVkICJ7IiBpbiB5b3VyIHRlbXBsYXRlPyBVc2UgInt7IFwne1wnIH19IikgdG8gZXNjYXBlIGl0LiknKTtsZXQgaT1uZXcgS2IodCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlLGUpO3JldHVybiB0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCxuZXcgSmIoaSl9aGFuZGxlRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIEl4JiYodD10aGlzLl9jcmVhdGVFcnJvcih0Lm1zZyx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0LmN1cnNvcikpKSwhKHQgaW5zdGFuY2VvZiBKYikpdGhyb3cgdDt0aGlzLmVycm9ycy5wdXNoKHQuZXJyb3IpfV9hdHRlbXB0Q2hhckNvZGUodCl7cmV0dXJuIHRoaXMuX2N1cnNvci5wZWVrKCk9PT10JiYodGhpcy5fY3Vyc29yLmFkdmFuY2UoKSwhMCl9X2F0dGVtcHRDaGFyQ29kZUNhc2VJbnNlbnNpdGl2ZSh0KXtyZXR1cm4hIWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFU5KG4pPT09VTkodCl9KHRoaXMuX2N1cnNvci5wZWVrKCksdCkmJih0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLCEwKX1fcmVxdWlyZUNoYXJDb2RlKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKCF0aGlzLl9hdHRlbXB0Q2hhckNvZGUodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0U3RyKHQpe2xldCBlPXQubGVuZ3RoO2lmKHRoaXMuX2N1cnNvci5jaGFyc0xlZnQoKTxlKXJldHVybiExO2xldCBpPXRoaXMuX2N1cnNvci5jbG9uZSgpO2ZvcihsZXQgcj0wO3I8ZTtyKyspaWYoIXRoaXMuX2F0dGVtcHRDaGFyQ29kZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiB0aGlzLl9jdXJzb3I9aSwhMTtyZXR1cm4hMH1fYXR0ZW1wdFN0ckNhc2VJbnNlbnNpdGl2ZSh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZighdGhpcy5fYXR0ZW1wdENoYXJDb2RlQ2FzZUluc2Vuc2l0aXZlKHQuY2hhckNvZGVBdChlKSkpcmV0dXJuITE7cmV0dXJuITB9X3JlcXVpcmVTdHIodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYoIXRoaXMuX2F0dGVtcHRTdHIodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpe2Zvcig7IXQodGhpcy5fY3Vyc29yLnBlZWsoKSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlcXVpcmVDaGFyQ29kZVVudGlsRm4odCxlKXtsZXQgaT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpLHRoaXMuX2N1cnNvci5kaWZmKGkpPGUpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oaSkpfV9hdHRlbXB0VW50aWxDaGFyKHQpe2Zvcig7dGhpcy5fY3Vyc29yLnBlZWsoKSE9PXQ7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlYWRDaGFyKCl7bGV0IHQ9U3RyaW5nLmZyb21Db2RlUG9pbnQodGhpcy5fY3Vyc29yLnBlZWsoKSk7cmV0dXJuIHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdH1fY29uc3VtZUVudGl0eSh0KXt0aGlzLl9iZWdpblRva2VuKDkpO2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDM1KSl7bGV0IGk9dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDEyMCl8fHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg4OCkscj10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKFl5ZSksNTkhPXRoaXMuX2N1cnNvci5wZWVrKCkpdGhyb3cgdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSx0aGlzLl9jcmVhdGVFcnJvcihmdW5jdGlvbihuLHQpe3JldHVybmBVbmFibGUgdG8gcGFyc2UgZW50aXR5ICIke3R9IiAtICR7bn0gY2hhcmFjdGVyIHJlZmVyZW5jZSBlbnRpdGllcyBtdXN0IGVuZCB3aXRoICI7ImB9KGk/WmIuSEVYOlpiLkRFQyx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO2xldCBvPXRoaXMuX2N1cnNvci5nZXRDaGFycyhyKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpO3RyeXtsZXQgcz1wYXJzZUludChvLGk/MTY6MTApO3RoaXMuX2VuZFRva2VuKFtTdHJpbmcuZnJvbUNoYXJDb2RlKHMpLHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKV0pfWNhdGNoe3Rocm93IHRoaXMuX2NyZWF0ZUVycm9yKFY5KHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oKSl9fWVsc2V7bGV0IGk9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihYeWUpLDU5IT10aGlzLl9jdXJzb3IucGVlaygpKXRoaXMuX2JlZ2luVG9rZW4odCxlKSx0aGlzLl9jdXJzb3I9aSx0aGlzLl9lbmRUb2tlbihbIiYiXSk7ZWxzZXtsZXQgcj10aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSk7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTtsZXQgbz1IMVtyXTtpZighbyl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihWOShyKSx0aGlzLl9jdXJzb3IuZ2V0U3BhbihlKSk7dGhpcy5fZW5kVG9rZW4oW28sYCYke3J9O2BdKX19fV9jb25zdW1lUmF3VGV4dCh0LGUpe3RoaXMuX2JlZ2luVG9rZW4odD82OjcpO2xldCBpPVtdO2Zvcig7Oyl7bGV0IHI9dGhpcy5fY3Vyc29yLmNsb25lKCksbz1lKCk7aWYodGhpcy5fY3Vyc29yPXIsbylicmVhazt0JiYzOD09PXRoaXMuX2N1cnNvci5wZWVrKCk/KHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKGkuam9pbigiIikpXSksaS5sZW5ndGg9MCx0aGlzLl9jb25zdW1lRW50aXR5KDYpLHRoaXMuX2JlZ2luVG9rZW4oNikpOmkucHVzaCh0aGlzLl9yZWFkQ2hhcigpKX10aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhpLmpvaW4oIiIpKV0pfV9jb25zdW1lQ29tbWVudCh0KXt0aGlzLl9iZWdpblRva2VuKDEwLHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NSksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2NvbnN1bWVSYXdUZXh0KCExLCgpPT50aGlzLl9hdHRlbXB0U3RyKCItLVx4M2UiKSksdGhpcy5fYmVnaW5Ub2tlbigxMSksdGhpcy5fcmVxdWlyZVN0cigiLS1ceDNlIiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lQ2RhdGEodCl7dGhpcy5fYmVnaW5Ub2tlbigxMix0KSx0aGlzLl9yZXF1aXJlU3RyKCJDREFUQVsiKSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fY29uc3VtZVJhd1RleHQoITEsKCk9PnRoaXMuX2F0dGVtcHRTdHIoIl1dPiIpKSx0aGlzLl9iZWdpblRva2VuKDEzKSx0aGlzLl9yZXF1aXJlU3RyKCJdXT4iKSx0aGlzLl9lbmRUb2tlbihbXSl9X2NvbnN1bWVEb2NUeXBlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTgsdCk7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7dGhpcy5fYXR0ZW1wdFVudGlsQ2hhcig2Mik7bGV0IGk9dGhpcy5fY3Vyc29yLmdldENoYXJzKGUpO3RoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW2ldKX1fY29uc3VtZVByZWZpeEFuZE5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPSIiO2Zvcig7NTghPT10aGlzLl9jdXJzb3IucGVlaygpJiYhKCgobj10aGlzLl9jdXJzb3IucGVlaygpKTw5N3x8MTIyPG4pJiYobjw2NXx8OTA8bikmJihuPDQ4fHxuPjU3KSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCk7dmFyIG47bGV0IGk7cmV0dXJuIDU4PT09dGhpcy5fY3Vyc29yLnBlZWsoKT8oZT10aGlzLl9jdXJzb3IuZ2V0Q2hhcnModCksdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSxpPXRoaXMuX2N1cnNvci5jbG9uZSgpKTppPXQsdGhpcy5fcmVxdWlyZUNoYXJDb2RlVW50aWxGbihIOSwiIj09PWU/MDoxKSxbZSx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSldfV9jb25zdW1lVGFnT3Blbih0KXtsZXQgZSxpLHI7dHJ5e2lmKCFtMyh0aGlzLl9jdXJzb3IucGVlaygpKSl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihVYih0aGlzLl9jdXJzb3IucGVlaygpKSx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0KSk7Zm9yKHI9dGhpcy5fY29uc3VtZVRhZ09wZW5TdGFydCh0KSxpPXIucGFydHNbMF0sZT1yLnBhcnRzWzFdLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpOzQ3IT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmNjIhPT10aGlzLl9jdXJzb3IucGVlaygpJiY2MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJjAhPT10aGlzLl9jdXJzb3IucGVlaygpOyl0aGlzLl9jb25zdW1lQXR0cmlidXRlTmFtZSgpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MSkmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9jb25zdW1lQXR0cmlidXRlVmFsdWUoKSksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSk7dGhpcy5fY29uc3VtZVRhZ09wZW5FbmQoKX1jYXRjaChzKXtpZihzIGluc3RhbmNlb2YgSmIpcmV0dXJuIHZvaWQocj9yLnR5cGU9NDoodGhpcy5fYmVnaW5Ub2tlbig1LHQpLHRoaXMuX2VuZFRva2VuKFsiPCJdKSkpO3Rocm93IHN9bGV0IG89dGhpcy5fZ2V0VGFnRGVmaW5pdGlvbihlKS5nZXRDb250ZW50VHlwZShpKTtvPT09ZmwuUkFXX1RFWFQ/dGhpcy5fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UoaSxlLCExKTpvPT09ZmwuRVNDQVBBQkxFX1JBV19URVhUJiZ0aGlzLl9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZShpLGUsITApfV9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZSh0LGUsaSl7dGhpcy5fY29uc3VtZVJhd1RleHQoaSwoKT0+ISEodGhpcy5fYXR0ZW1wdENoYXJDb2RlKDYwKSYmdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRTdHJDYXNlSW5zZW5zaXRpdmUoZSkpKSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MikpKSx0aGlzLl9iZWdpblRva2VuKDMpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZVVudGlsRm4ocj0+NjI9PT1yLDMpLHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW3QsZV0pfV9jb25zdW1lVGFnT3BlblN0YXJ0KHQpe3RoaXMuX2JlZ2luVG9rZW4oMCx0KTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3JldHVybiB0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUF0dHJpYnV0ZU5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IucGVlaygpO2lmKDM5PT09dHx8MzQ9PT10KXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKFViKHQpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO3RoaXMuX2JlZ2luVG9rZW4oMTQpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVBdHRyaWJ1dGVWYWx1ZSgpe2lmKDM5PT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8MzQ9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgZT10aGlzLl9jdXJzb3IucGVlaygpO3RoaXMuX2NvbnN1bWVRdW90ZShlKTtsZXQgaT0oKT0+dGhpcy5fY3Vyc29yLnBlZWsoKT09PWU7dGhpcy5fY29uc3VtZVdpdGhJbnRlcnBvbGF0aW9uKDE2LDE3LGksaSksdGhpcy5fY29uc3VtZVF1b3RlKGUpfWVsc2V7bGV0IGU9KCk9Pkg5KHRoaXMuX2N1cnNvci5wZWVrKCkpO3RoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbigxNiwxNyxlLGUpfX1fY29uc3VtZVF1b3RlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTUpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSh0KSx0aGlzLl9lbmRUb2tlbihbU3RyaW5nLmZyb21Db2RlUG9pbnQodCldKX1fY29uc3VtZVRhZ09wZW5FbmQoKXtsZXQgdD10aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpPzI6MTt0aGlzLl9iZWdpblRva2VuKHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg2MiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lVGFnQ2xvc2UodCl7dGhpcy5fYmVnaW5Ub2tlbigzLHQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKDYyKSx0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUV4cGFuc2lvbkZvcm1TdGFydCgpe3RoaXMuX2JlZ2luVG9rZW4oMTkpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDE5KSx0aGlzLl9iZWdpblRva2VuKDcpO2xldCB0PXRoaXMuX3JlYWRVbnRpbCg0NCksZT10aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKHQpO2lmKHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcyl0aGlzLl9lbmRUb2tlbihbZV0pO2Vsc2V7bGV0IHI9dGhpcy5fZW5kVG9rZW4oW3RdKTtlIT09dCYmdGhpcy5ub25Ob3JtYWxpemVkSWN1RXhwcmVzc2lvbnMucHVzaChyKX10aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oNyk7bGV0IGk9dGhpcy5fcmVhZFVudGlsKDQ0KTt0aGlzLl9lbmRUb2tlbihbaV0pLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSl9X2NvbnN1bWVFeHBhbnNpb25DYXNlU3RhcnQoKXt0aGlzLl9iZWdpblRva2VuKDIwKTtsZXQgdD10aGlzLl9yZWFkVW50aWwoZnApLnRyaW0oKTt0aGlzLl9lbmRUb2tlbihbdF0pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oMjEpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDIxKX1fY29uc3VtZUV4cGFuc2lvbkNhc2VFbmQoKXt0aGlzLl9iZWdpblRva2VuKDIyKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodHUpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucG9wKCl9X2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCl7dGhpcy5fYmVnaW5Ub2tlbigyMyksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKHR1KSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLnBvcCgpfV9jb25zdW1lV2l0aEludGVycG9sYXRpb24odCxlLGkscil7dGhpcy5fYmVnaW5Ub2tlbih0KTtsZXQgbz1bXTtmb3IoOyFpKCk7KXtsZXQgcz10aGlzLl9jdXJzb3IuY2xvbmUoKTt0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnJiZ0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0scyksby5sZW5ndGg9MCx0aGlzLl9jb25zdW1lSW50ZXJwb2xhdGlvbihlLHMsciksdGhpcy5fYmVnaW5Ub2tlbih0KSk6Mzg9PT10aGlzLl9jdXJzb3IucGVlaygpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0pLG8ubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUVudGl0eSh0KSx0aGlzLl9iZWdpblRva2VuKHQpKTpvLnB1c2godGhpcy5fcmVhZENoYXIoKSl9dGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKG8uam9pbigiIikpXSl9X2NvbnN1bWVJbnRlcnBvbGF0aW9uKHQsZSxpKXtsZXQgcj1bXTt0aGlzLl9iZWdpblRva2VuKHQsZSksci5wdXNoKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpO2xldCBvPXRoaXMuX2N1cnNvci5jbG9uZSgpLHM9bnVsbCxhPSExO2Zvcig7MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJihudWxsPT09aXx8IWkoKSk7KXtsZXQgbD10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9pc1RhZ1N0YXJ0KCkpcmV0dXJuIHRoaXMuX2N1cnNvcj1sLHIucHVzaCh0aGlzLl9nZXRQcm9jZXNzZWRDaGFycyhvLGwpKSx2b2lkIHRoaXMuX2VuZFRva2VuKHIpO2lmKG51bGw9PT1zKXtpZih0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuZW5kKSlyZXR1cm4gci5wdXNoKHRoaXMuX2dldFByb2Nlc3NlZENoYXJzKG8sbCkpLHIucHVzaCh0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLmVuZCksdm9pZCB0aGlzLl9lbmRUb2tlbihyKTt0aGlzLl9hdHRlbXB0U3RyKCIvLyIpJiYoYT0hMCl9bGV0IGM9dGhpcy5fY3Vyc29yLnBlZWsoKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLDkyPT09Yz90aGlzLl9jdXJzb3IuYWR2YW5jZSgpOmM9PT1zP3M9bnVsbDohYSYmbnVsbD09PXMmJnVMKGMpJiYocz1jKX1yLnB1c2godGhpcy5fZ2V0UHJvY2Vzc2VkQ2hhcnMobyx0aGlzLl9jdXJzb3IpKSx0aGlzLl9lbmRUb2tlbihyKX1fZ2V0UHJvY2Vzc2VkQ2hhcnModCxlKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhlLmdldENoYXJzKHQpKX1faXNUZXh0RW5kKCl7cmV0dXJuISEodGhpcy5faXNUYWdTdGFydCgpfHwwPT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8dGhpcy5fdG9rZW5pemVJY3UmJiF0aGlzLl9pbkludGVycG9sYXRpb24mJih0aGlzLmlzRXhwYW5zaW9uRm9ybVN0YXJ0KCl8fHRoaXMuX2N1cnNvci5wZWVrKCk9PT10dSYmdGhpcy5faXNJbkV4cGFuc2lvbkNhc2UoKSkpfV9pc1RhZ1N0YXJ0KCl7aWYoNjA9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKTt0LmFkdmFuY2UoKTtsZXQgZT10LnBlZWsoKTtpZig5Nzw9ZSYmZTw9MTIyfHw2NTw9ZSYmZTw9OTB8fDQ3PT09ZXx8MzM9PT1lKXJldHVybiEwfXJldHVybiExfV9yZWFkVW50aWwodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7cmV0dXJuIHRoaXMuX2F0dGVtcHRVbnRpbENoYXIodCksdGhpcy5fY3Vyc29yLmdldENoYXJzKGUpfV9pc0luRXhwYW5zaW9uQ2FzZSgpe3JldHVybiB0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoPjAmJjIxPT09dGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrW3RoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGgtMV19X2lzSW5FeHBhbnNpb25Gb3JtKCl7cmV0dXJuIHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGg+MCYmMTk9PT10aGlzLl9leHBhbnNpb25DYXNlU3RhY2tbdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLmxlbmd0aC0xXX1pc0V4cGFuc2lvbkZvcm1TdGFydCgpe2lmKHRoaXMuX2N1cnNvci5wZWVrKCkhPT1mcClyZXR1cm4hMTtpZih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPXRoaXMuX2F0dGVtcHRTdHIodGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZy5zdGFydCk7cmV0dXJuIHRoaXMuX2N1cnNvcj10LCFlfXJldHVybiEwfX0obmV3IEkxKG4sdCksZSxpKTtyZXR1cm4gci50b2tlbml6ZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50b2tlbnM9dCx0aGlzLmVycm9ycz1lLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPWl9fShmdW5jdGlvbihuKXtsZXQgZSx0PVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO2UmJjU9PT1lLnR5cGUmJjU9PT1yLnR5cGV8fGUmJjE2PT09ZS50eXBlJiYxNj09PXIudHlwZT8oZS5wYXJ0c1swXSs9ci5wYXJ0c1swXSxlLnNvdXJjZVNwYW4uZW5kPXIuc291cmNlU3Bhbi5lbmQpOihlPXIsdC5wdXNoKGUpKX1yZXR1cm4gdH0oci50b2tlbnMpLHIuZXJyb3JzLHIubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zKX0odCxlLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbixpKSxvPW5ldyBQeChyLnRva2Vucyx0aGlzLmdldFRhZ0RlZmluaXRpb24pO3JldHVybiBvLmJ1aWxkKCksbmV3IFUxKG8ucm9vdE5vZGVzLHIuZXJyb3JzLmNvbmNhdChvLmVycm9ycykpfX0sUHg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRva2Vucz10LHRoaXMuZ2V0VGFnRGVmaW5pdGlvbj1lLHRoaXMuX2luZGV4PS0xLHRoaXMuX2VsZW1lbnRTdGFjaz1bXSx0aGlzLnJvb3ROb2Rlcz1bXSx0aGlzLmVycm9ycz1bXSx0aGlzLl9hZHZhbmNlKCl9YnVpbGQoKXtmb3IoOzI0IT09dGhpcy5fcGVlay50eXBlOykwPT09dGhpcy5fcGVlay50eXBlfHw0PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVTdGFydFRhZyh0aGlzLl9hZHZhbmNlKCkpOjM9PT10aGlzLl9wZWVrLnR5cGU/dGhpcy5fY29uc3VtZUVuZFRhZyh0aGlzLl9hZHZhbmNlKCkpOjEyPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNkYXRhKHRoaXMuX2FkdmFuY2UoKSkpOjEwPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNvbW1lbnQodGhpcy5fYWR2YW5jZSgpKSk6NT09PXRoaXMuX3BlZWsudHlwZXx8Nz09PXRoaXMuX3BlZWsudHlwZXx8Nj09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVUZXh0KHRoaXMuX2FkdmFuY2UoKSkpOjE5PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVFeHBhbnNpb24odGhpcy5fYWR2YW5jZSgpKTp0aGlzLl9hZHZhbmNlKCl9X2FkdmFuY2UoKXtsZXQgdD10aGlzLl9wZWVrO3JldHVybiB0aGlzLl9pbmRleDx0aGlzLnRva2Vucy5sZW5ndGgtMSYmdGhpcy5faW5kZXgrKyx0aGlzLl9wZWVrPXRoaXMudG9rZW5zW3RoaXMuX2luZGV4XSx0fV9hZHZhbmNlSWYodCl7cmV0dXJuIHRoaXMuX3BlZWsudHlwZT09PXQ/dGhpcy5fYWR2YW5jZSgpOm51bGx9X2NvbnN1bWVDZGF0YSh0KXt0aGlzLl9jb25zdW1lVGV4dCh0aGlzLl9hZHZhbmNlKCkpLHRoaXMuX2FkdmFuY2VJZigxMyl9X2NvbnN1bWVDb21tZW50KHQpe2xldCBlPXRoaXMuX2FkdmFuY2VJZig3KTt0aGlzLl9hZHZhbmNlSWYoMTEpO2xldCBpPW51bGwhPWU/ZS5wYXJ0c1swXS50cmltKCk6bnVsbDt0aGlzLl9hZGRUb1BhcmVudChuZXcgVjEoaSx0LnNvdXJjZVNwYW4pKX1fY29uc3VtZUV4cGFuc2lvbih0KXtsZXQgZT10aGlzLl9hZHZhbmNlKCksaT10aGlzLl9hZHZhbmNlKCkscj1bXTtmb3IoOzIwPT09dGhpcy5fcGVlay50eXBlOyl7bGV0IHM9dGhpcy5fcGFyc2VFeHBhbnNpb25DYXNlKCk7aWYoIXMpcmV0dXJuO3IucHVzaChzKX1pZigyMyE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdm9pZCB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHRoaXMuX3BlZWsuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpO2xldCBvPW5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsdGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KTt0aGlzLl9hZGRUb1BhcmVudChuZXcgTjAoZS5wYXJ0c1swXSxpLnBhcnRzWzBdLHIsbyxlLnNvdXJjZVNwYW4pKSx0aGlzLl9hZHZhbmNlKCl9X3BhcnNlRXhwYW5zaW9uQ2FzZSgpe2xldCB0PXRoaXMuX2FkdmFuY2UoKTtpZigyMSE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0aGlzLl9wZWVrLnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ3snLiIpKSxudWxsO2xldCBlPXRoaXMuX2FkdmFuY2UoKSxpPXRoaXMuX2NvbGxlY3RFeHBhbnNpb25FeHBUb2tlbnMoZSk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fYWR2YW5jZSgpO2kucHVzaCh7dHlwZToyNCxwYXJ0czpbXSxzb3VyY2VTcGFuOnIuc291cmNlU3Bhbn0pO2xldCBvPW5ldyBQeChpLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbik7aWYoby5idWlsZCgpLG8uZXJyb3JzLmxlbmd0aD4wKXJldHVybiB0aGlzLmVycm9ycz10aGlzLmVycm9ycy5jb25jYXQoby5lcnJvcnMpLG51bGw7bGV0IHM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGE9bmV3IFRvKGUuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLGUuc291cmNlU3Bhbi5mdWxsU3RhcnQpO3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnZhbHVlPXQsdGhpcy5leHByZXNzaW9uPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy52YWx1ZVNvdXJjZVNwYW49cix0aGlzLmV4cFNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uQ2FzZSh0aGlzLGUpfX0odC5wYXJ0c1swXSxvLnJvb3ROb2RlcyxzLHQuc291cmNlU3BhbixhKX1fY29sbGVjdEV4cGFuc2lvbkV4cFRva2Vucyh0KXtsZXQgZT1bXSxpPVsyMV07Zm9yKDs7KXtpZigoMTk9PT10aGlzLl9wZWVrLnR5cGV8fDIxPT09dGhpcy5fcGVlay50eXBlKSYmaS5wdXNoKHRoaXMuX3BlZWsudHlwZSksMjI9PT10aGlzLl9wZWVrLnR5cGUpe2lmKCF6OShpLDIxKSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0LnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKSxudWxsO2lmKGkucG9wKCksMD09PWkubGVuZ3RoKXJldHVybiBlfWlmKDIzPT09dGhpcy5fcGVlay50eXBlKXtpZighejkoaSwxOSkpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG51bGwsdC5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd9Jy4iKSksbnVsbDtpLnBvcCgpfWlmKDI0PT09dGhpcy5fcGVlay50eXBlKXJldHVybiB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHQuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpLG51bGw7ZS5wdXNoKHRoaXMuX2FkdmFuY2UoKSl9fV9jb25zdW1lVGV4dCh0KXtsZXQgZT1bdF0saT10LnNvdXJjZVNwYW4scj10LnBhcnRzWzBdO2lmKHIubGVuZ3RoPjAmJiJcbiI9PT1yWzBdKXtsZXQgbz10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7bnVsbCE9byYmMD09PW8uY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oby5uYW1lKS5pZ25vcmVGaXJzdExmJiYocj1yLnN1YnN0cmluZygxKSxlWzBdPXt0eXBlOnQudHlwZSxzb3VyY2VTcGFuOnQuc291cmNlU3BhbixwYXJ0czpbcl19KX1mb3IoOzg9PT10aGlzLl9wZWVrLnR5cGV8fDU9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXQ9dGhpcy5fYWR2YW5jZSgpLGUucHVzaCh0KSxyKz04PT09dC50eXBlP3QucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT10LnR5cGU/dC5wYXJ0c1swXTp0LnBhcnRzLmpvaW4oIiIpO3IubGVuZ3RoPjAmJnRoaXMuX2FkZFRvUGFyZW50KG5ldyBGMChyLG5ldyBUbyhpLnN0YXJ0LHQuc291cmNlU3Bhbi5lbmQsaS5mdWxsU3RhcnQsaS5kZXRhaWxzKSxlKSl9X2Nsb3NlVm9pZEVsZW1lbnQoKXtsZXQgdD10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7dCYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKHQubmFtZSkuaXNWb2lkJiZ0aGlzLl9lbGVtZW50U3RhY2sucG9wKCl9X2NvbnN1bWVTdGFydFRhZyh0KXtsZXRbZSxpXT10LnBhcnRzLHI9W107Zm9yKDsxND09PXRoaXMuX3BlZWsudHlwZTspci5wdXNoKHRoaXMuX2NvbnN1bWVBdHRyKHRoaXMuX2FkdmFuY2UoKSkpO2xldCBvPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZShlLGksdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKSxzPSExO2lmKDI9PT10aGlzLl9wZWVrLnR5cGUpe3RoaXMuX2FkdmFuY2UoKSxzPSEwO2xldCBkPXRoaXMuZ2V0VGFnRGVmaW5pdGlvbihvKTtkLmNhblNlbGZDbG9zZXx8bnVsbCE9PVk3KG8pfHxkLmlzVm9pZHx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobyx0LnNvdXJjZVNwYW4sYE9ubHkgdm9pZCBhbmQgZm9yZWlnbiBlbGVtZW50cyBjYW4gYmUgc2VsZiBjbG9zZWQgIiR7dC5wYXJ0c1sxXX0iYCkpfWVsc2UgMT09PXRoaXMuX3BlZWsudHlwZSYmKHRoaXMuX2FkdmFuY2UoKSxzPSExKTtsZXQgYT10aGlzLl9wZWVrLnNvdXJjZVNwYW4uZnVsbFN0YXJ0LGw9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLHU9bmV3IEF4KG8scixbXSxsLGMsdm9pZCAwKTt0aGlzLl9wdXNoRWxlbWVudCh1KSxzP3RoaXMuX3BvcEVsZW1lbnQobyxsKTo0PT09dC50eXBlJiYodGhpcy5fcG9wRWxlbWVudChvLG51bGwpLHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG8sbCxgT3BlbmluZyB0YWcgIiR7b30iIG5vdCB0ZXJtaW5hdGVkLmApKSl9X3B1c2hFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtlJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oZS5uYW1lKS5pc0Nsb3NlZEJ5Q2hpbGQodC5uYW1lKSYmdGhpcy5fZWxlbWVudFN0YWNrLnBvcCgpLHRoaXMuX2FkZFRvUGFyZW50KHQpLHRoaXMuX2VsZW1lbnRTdGFjay5wdXNoKHQpfV9jb25zdW1lRW5kVGFnKHQpe2xldCBlPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZSh0LnBhcnRzWzBdLHQucGFydHNbMV0sdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKTt0aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaXNWb2lkP3RoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKGUsdC5zb3VyY2VTcGFuLGBWb2lkIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGVuZCB0YWdzICIke3QucGFydHNbMV19ImApKTp0aGlzLl9wb3BFbGVtZW50KGUsdC5zb3VyY2VTcGFuKXx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUoZSx0LnNvdXJjZVNwYW4sYFVuZXhwZWN0ZWQgY2xvc2luZyB0YWcgIiR7ZX0iLiBJdCBtYXkgaGFwcGVuIHdoZW4gdGhlIHRhZyBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCBieSBhbm90aGVyIHRhZy4gRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2Nsb3NpbmctZWxlbWVudHMtdGhhdC1oYXZlLWltcGxpZWQtZW5kLXRhZ3NgKSl9X3BvcEVsZW1lbnQodCxlKXtsZXQgaT0hMTtmb3IobGV0IHI9dGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC0xO3I+PTA7ci0tKXtsZXQgbz10aGlzLl9lbGVtZW50U3RhY2tbcl07aWYoby5uYW1lPT09dClyZXR1cm4gby5lbmRTb3VyY2VTcGFuPWUsby5zb3VyY2VTcGFuLmVuZD1udWxsIT09ZT9lLmVuZDpvLnNvdXJjZVNwYW4uZW5kLHRoaXMuX2VsZW1lbnRTdGFjay5zcGxpY2Uocix0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLXIpLCFpO3RoaXMuZ2V0VGFnRGVmaW5pdGlvbihvLm5hbWUpLmNsb3NlZEJ5UGFyZW50fHwoaT0hMCl9cmV0dXJuITF9X2NvbnN1bWVBdHRyKHQpe2xldCBlPWpOKHQucGFydHNbMF0sdC5wYXJ0c1sxXSksaT10LnNvdXJjZVNwYW4uZW5kOzE1PT09dGhpcy5fcGVlay50eXBlJiZ0aGlzLl9hZHZhbmNlKCk7bGV0IHMsYSxyPSIiLG89W107aWYoMTY9PT10aGlzLl9wZWVrLnR5cGUpZm9yKHM9dGhpcy5fcGVlay5zb3VyY2VTcGFuLGE9dGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZDsxNj09PXRoaXMuX3BlZWsudHlwZXx8MTc9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXtsZXQgdT10aGlzLl9hZHZhbmNlKCk7by5wdXNoKHUpLHIrPTE3PT09dS50eXBlP3UucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT11LnR5cGU/dS5wYXJ0c1swXTp1LnBhcnRzLmpvaW4oIiIpLGE9aT11LnNvdXJjZVNwYW4uZW5kfTE1PT09dGhpcy5fcGVlay50eXBlJiYoaT10aGlzLl9hZHZhbmNlKCkuc291cmNlU3Bhbi5lbmQpO2xldCBjPXMmJmEmJm5ldyBUbyhzLnN0YXJ0LGEscy5mdWxsU3RhcnQpO3JldHVybiBuZXcgUkwoZSxyLG5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsaSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSx0LnNvdXJjZVNwYW4sYyxvLmxlbmd0aD4wP286dm9pZCAwLHZvaWQgMCl9X2dldFBhcmVudEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aD4wP3RoaXMuX2VsZW1lbnRTdGFja1t0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLTFdOm51bGx9X2FkZFRvUGFyZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtudWxsIT1lP2UuY2hpbGRyZW4ucHVzaCh0KTp0aGlzLnJvb3ROb2Rlcy5wdXNoKHQpfV9nZXRFbGVtZW50RnVsbE5hbWUodCxlLGkpe2lmKCIiPT09dCYmIiI9PT0odD10aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaW1wbGljaXROYW1lc3BhY2VQcmVmaXh8fCIiKSYmbnVsbCE9aSl7bGV0IHI9Y2QoaS5uYW1lKVsxXTt0aGlzLmdldFRhZ0RlZmluaXRpb24ocikucHJldmVudE5hbWVzcGFjZUluaGVyaXRhbmNlfHwodD1ZNyhpLm5hbWUpKX1yZXR1cm4gak4odCxlKX19O2Z1bmN0aW9uIHo5KG4sdCl7cmV0dXJuIG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV09PT10fWZ1bmN0aW9uIGo5KG4sdCl7cmV0dXJuIHZvaWQgMCE9PUgxW3RdP0gxW3RdfHxuOi9eI3hbYS1mMC05XSskL2kudGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDIpLDE2KSk6L14jXGQrJC8udGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDEpLDEwKSk6bn12YXIgcDEsTkw9Y2xhc3MgZXh0ZW5kcyBGTHtjb25zdHJ1Y3Rvcigpe3N1cGVyKGUzKX1wYXJzZSh0LGUsaSl7cmV0dXJuIHN1cGVyLnBhcnNlKHQsZSxpKX19LEpxPSJuZ1ByZXNlcnZlV2hpdGVzcGFjZXMiLEp5ZT1uZXcgU2V0KFsicHJlIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInNjcmlwdCIsInN0eWxlIl0pLCRxPSIgXGZcblxyXHRcdlx1MTY4MFx1MTgwZVx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmYiLCR5ZT1uZXcgUmVnRXhwKGBbXiR7JHF9XWApLGViZT1uZXcgUmVnRXhwKGBbJHskcX1dezIsfWAsImciKTtmdW5jdGlvbiBlWShuKXtyZXR1cm4gbi5yZXBsYWNlKG5ldyBSZWdFeHAoIlx1ZTUwMCIsImciKSwiICIpfWZ1bmN0aW9uIHRZKG4pe3JldHVybiBlWShuKS5yZXBsYWNlKGViZSwiICIpfWZ1bmN0aW9uIHoxKG4sdD0hMSl7cmV0dXJuIG1sKE9iamVjdC5rZXlzKG4pLm1hcChlPT4oe2tleTplLHF1b3RlZDp0LHZhbHVlOm5bZV19KSkpfWZ1bmN0aW9uIEc5KCl7cmV0dXJuIHAxfHwocDE9e30sbzEoWXIuSFRNTCxbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVySFRNTCIsIip8b3V0ZXJIVE1MIl0pLG8xKFlyLlNUWUxFLFsiKnxzdHlsZSJdKSxvMShZci5VUkwsWyIqfGZvcm1BY3Rpb24iLCJhcmVhfGhyZWYiLCJhcmVhfHBpbmciLCJhdWRpb3xzcmMiLCJhfGhyZWYiLCJhfHBpbmciLCJibG9ja3F1b3RlfGNpdGUiLCJib2R5fGJhY2tncm91bmQiLCJkZWx8Y2l0ZSIsImZvcm18YWN0aW9uIiwiaW1nfHNyYyIsImlucHV0fHNyYyIsImluc3xjaXRlIiwicXxjaXRlIiwic291cmNlfHNyYyIsInRyYWNrfHNyYyIsInZpZGVvfHBvc3RlciIsInZpZGVvfHNyYyJdKSxvMShZci5SRVNPVVJDRV9VUkwsWyJhcHBsZXR8Y29kZSIsImFwcGxldHxjb2RlYmFzZSIsImJhc2V8aHJlZiIsImVtYmVkfHNyYyIsImZyYW1lfHNyYyIsImhlYWR8cHJvZmlsZSIsImh0bWx8bWFuaWZlc3QiLCJpZnJhbWV8c3JjIiwibGlua3xocmVmIiwibWVkaWF8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiLCJzY3JpcHR8c3JjIl0pKSxwMX1mdW5jdGlvbiBvMShuLHQpe2ZvcihsZXQgZSBvZiB0KXAxW2UudG9Mb3dlckNhc2UoKV09bn12YXIgQkw9Y2xhc3N7fSxsYmU9WyJbRWxlbWVudF18dGV4dENvbnRlbnQsJWNsYXNzTGlzdCxjbGFzc05hbWUsaWQsaW5uZXJIVE1MLCpiZWZvcmVjb3B5LCpiZWZvcmVjdXQsKmJlZm9yZXBhc3RlLCpjb3B5LCpjdXQsKnBhc3RlLCpzZWFyY2gsKnNlbGVjdHN0YXJ0LCp3ZWJraXRmdWxsc2NyZWVuY2hhbmdlLCp3ZWJraXRmdWxsc2NyZWVuZXJyb3IsKndoZWVsLG91dGVySFRNTCwjc2Nyb2xsTGVmdCwjc2Nyb2xsVG9wLHNsb3QsKm1lc3NhZ2UsKm1vemZ1bGxzY3JlZW5jaGFuZ2UsKm1vemZ1bGxzY3JlZW5lcnJvciwqbW96cG9pbnRlcmxvY2tjaGFuZ2UsKm1venBvaW50ZXJsb2NrZXJyb3IsKndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IsKndlYmdsY29udGV4dGxvc3QsKndlYmdsY29udGV4dHJlc3RvcmVkIiwiW0hUTUxFbGVtZW50XV5bRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJhYmJyLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiLGJkaSxiZG8sY2l0ZSxjb2RlLGRkLGRmbixkdCxlbSxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGksa2JkLG1haW4sbWFyayxuYXYsbm9zY3JpcHQscmIscnAscnQscnRjLHJ1YnkscyxzYW1wLHNlY3Rpb24sc21hbGwsc3Ryb25nLHN1YixzdXAsdSx2YXIsd2JyXltIVE1MRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJtZWRpYV5bSFRNTEVsZW1lbnRdfCFhdXRvcGxheSwhY29udHJvbHMsJWNvbnRyb2xzTGlzdCwlY3Jvc3NPcmlnaW4sI2N1cnJlbnRUaW1lLCFkZWZhdWx0TXV0ZWQsI2RlZmF1bHRQbGF5YmFja1JhdGUsIWRpc2FibGVSZW1vdGVQbGF5YmFjaywhbG9vcCwhbXV0ZWQsKmVuY3J5cHRlZCwqd2FpdGluZ2ZvcmtleSwjcGxheWJhY2tSYXRlLHByZWxvYWQsc3JjLCVzcmNPYmplY3QsI3ZvbHVtZSIsIjpzdmc6XltIVE1MRWxlbWVudF18KmFib3J0LCphdXhjbGljaywqYmx1ciwqY2FuY2VsLCpjYW5wbGF5LCpjYW5wbGF5dGhyb3VnaCwqY2hhbmdlLCpjbGljaywqY2xvc2UsKmNvbnRleHRtZW51LCpjdWVjaGFuZ2UsKmRibGNsaWNrLCpkcmFnLCpkcmFnZW5kLCpkcmFnZW50ZXIsKmRyYWdsZWF2ZSwqZHJhZ292ZXIsKmRyYWdzdGFydCwqZHJvcCwqZHVyYXRpb25jaGFuZ2UsKmVtcHRpZWQsKmVuZGVkLCplcnJvciwqZm9jdXMsKmdvdHBvaW50ZXJjYXB0dXJlLCppbnB1dCwqaW52YWxpZCwqa2V5ZG93biwqa2V5cHJlc3MsKmtleXVwLCpsb2FkLCpsb2FkZWRkYXRhLCpsb2FkZWRtZXRhZGF0YSwqbG9hZHN0YXJ0LCpsb3N0cG9pbnRlcmNhcHR1cmUsKm1vdXNlZG93biwqbW91c2VlbnRlciwqbW91c2VsZWF2ZSwqbW91c2Vtb3ZlLCptb3VzZW91dCwqbW91c2VvdmVyLCptb3VzZXVwLCptb3VzZXdoZWVsLCpwYXVzZSwqcGxheSwqcGxheWluZywqcG9pbnRlcmNhbmNlbCwqcG9pbnRlcmRvd24sKnBvaW50ZXJlbnRlciwqcG9pbnRlcmxlYXZlLCpwb2ludGVybW92ZSwqcG9pbnRlcm91dCwqcG9pbnRlcm92ZXIsKnBvaW50ZXJ1cCwqcHJvZ3Jlc3MsKnJhdGVjaGFuZ2UsKnJlc2V0LCpyZXNpemUsKnNjcm9sbCwqc2Vla2VkLCpzZWVraW5nLCpzZWxlY3QsKnNob3csKnN0YWxsZWQsKnN1Ym1pdCwqc3VzcGVuZCwqdGltZXVwZGF0ZSwqdG9nZ2xlLCp2b2x1bWVjaGFuZ2UsKndhaXRpbmcsJXN0eWxlLCN0YWJJbmRleCIsIjpzdmc6Z3JhcGhpY3NeOnN2Zzp8IiwiOnN2ZzphbmltYXRpb25eOnN2Zzp8KmJlZ2luLCplbmQsKnJlcGVhdCIsIjpzdmc6Z2VvbWV0cnleOnN2Zzp8IiwiOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uXjpzdmc6fCIsIjpzdmc6Z3JhZGllbnReOnN2Zzp8IiwiOnN2Zzp0ZXh0Q29udGVudF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6dGV4dFBvc2l0aW9uaW5nXjpzdmc6dGV4dENvbnRlbnR8IiwiYV5bSFRNTEVsZW1lbnRdfGNoYXJzZXQsY29vcmRzLGRvd25sb2FkLGhhc2gsaG9zdCxob3N0bmFtZSxocmVmLGhyZWZsYW5nLG5hbWUscGFzc3dvcmQscGF0aG5hbWUscGluZyxwb3J0LHByb3RvY29sLHJlZmVycmVyUG9saWN5LHJlbCxyZXYsc2VhcmNoLHNoYXBlLHRhcmdldCx0ZXh0LHR5cGUsdXNlcm5hbWUiLCJhcmVhXltIVE1MRWxlbWVudF18YWx0LGNvb3Jkcyxkb3dubG9hZCxoYXNoLGhvc3QsaG9zdG5hbWUsaHJlZiwhbm9IcmVmLHBhc3N3b3JkLHBhdGhuYW1lLHBpbmcscG9ydCxwcm90b2NvbCxyZWZlcnJlclBvbGljeSxyZWwsc2VhcmNoLHNoYXBlLHRhcmdldCx1c2VybmFtZSIsImF1ZGlvXm1lZGlhfCIsImJyXltIVE1MRWxlbWVudF18Y2xlYXIiLCJiYXNlXltIVE1MRWxlbWVudF18aHJlZix0YXJnZXQiLCJib2R5XltIVE1MRWxlbWVudF18YUxpbmssYmFja2dyb3VuZCxiZ0NvbG9yLGxpbmssKmJlZm9yZXVubG9hZCwqYmx1ciwqZXJyb3IsKmZvY3VzLCpoYXNoY2hhbmdlLCpsYW5ndWFnZWNoYW5nZSwqbG9hZCwqbWVzc2FnZSwqb2ZmbGluZSwqb25saW5lLCpwYWdlaGlkZSwqcGFnZXNob3csKnBvcHN0YXRlLCpyZWplY3Rpb25oYW5kbGVkLCpyZXNpemUsKnNjcm9sbCwqc3RvcmFnZSwqdW5oYW5kbGVkcmVqZWN0aW9uLCp1bmxvYWQsdGV4dCx2TGluayIsImJ1dHRvbl5bSFRNTEVsZW1lbnRdfCFhdXRvZm9jdXMsIWRpc2FibGVkLGZvcm1BY3Rpb24sZm9ybUVuY3R5cGUsZm9ybU1ldGhvZCwhZm9ybU5vVmFsaWRhdGUsZm9ybVRhcmdldCxuYW1lLHR5cGUsdmFsdWUiLCJjYW52YXNeW0hUTUxFbGVtZW50XXwjaGVpZ2h0LCN3aWR0aCIsImNvbnRlbnReW0hUTUxFbGVtZW50XXxzZWxlY3QiLCJkbF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGF0YWxpc3ReW0hUTUxFbGVtZW50XXwiLCJkZXRhaWxzXltIVE1MRWxlbWVudF18IW9wZW4iLCJkaWFsb2deW0hUTUxFbGVtZW50XXwhb3BlbixyZXR1cm5WYWx1ZSIsImRpcl5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGl2XltIVE1MRWxlbWVudF18YWxpZ24iLCJlbWJlZF5bSFRNTEVsZW1lbnRdfGFsaWduLGhlaWdodCxuYW1lLHNyYyx0eXBlLHdpZHRoIiwiZmllbGRzZXReW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbmFtZSIsImZvbnReW0hUTUxFbGVtZW50XXxjb2xvcixmYWNlLHNpemUiLCJmb3JtXltIVE1MRWxlbWVudF18YWNjZXB0Q2hhcnNldCxhY3Rpb24sYXV0b2NvbXBsZXRlLGVuY29kaW5nLGVuY3R5cGUsbWV0aG9kLG5hbWUsIW5vVmFsaWRhdGUsdGFyZ2V0IiwiZnJhbWVeW0hUTUxFbGVtZW50XXxmcmFtZUJvcmRlcixsb25nRGVzYyxtYXJnaW5IZWlnaHQsbWFyZ2luV2lkdGgsbmFtZSwhbm9SZXNpemUsc2Nyb2xsaW5nLHNyYyIsImZyYW1lc2V0XltIVE1MRWxlbWVudF18Y29scywqYmVmb3JldW5sb2FkLCpibHVyLCplcnJvciwqZm9jdXMsKmhhc2hjaGFuZ2UsKmxhbmd1YWdlY2hhbmdlLCpsb2FkLCptZXNzYWdlLCpvZmZsaW5lLCpvbmxpbmUsKnBhZ2VoaWRlLCpwYWdlc2hvdywqcG9wc3RhdGUsKnJlamVjdGlvbmhhbmRsZWQsKnJlc2l6ZSwqc2Nyb2xsLCpzdG9yYWdlLCp1bmhhbmRsZWRyZWplY3Rpb24sKnVubG9hZCxyb3dzIiwiaHJeW0hUTUxFbGVtZW50XXxhbGlnbixjb2xvciwhbm9TaGFkZSxzaXplLHdpZHRoIiwiaGVhZF5bSFRNTEVsZW1lbnRdfCIsImgxLGgyLGgzLGg0LGg1LGg2XltIVE1MRWxlbWVudF18YWxpZ24iLCJodG1sXltIVE1MRWxlbWVudF18dmVyc2lvbiIsImlmcmFtZV5bSFRNTEVsZW1lbnRdfGFsaWduLCFhbGxvd0Z1bGxzY3JlZW4sZnJhbWVCb3JkZXIsaGVpZ2h0LGxvbmdEZXNjLG1hcmdpbkhlaWdodCxtYXJnaW5XaWR0aCxuYW1lLHJlZmVycmVyUG9saWN5LCVzYW5kYm94LHNjcm9sbGluZyxzcmMsc3JjZG9jLHdpZHRoIiwiaW1nXltIVE1MRWxlbWVudF18YWxpZ24sYWx0LGJvcmRlciwlY3Jvc3NPcmlnaW4sI2hlaWdodCwjaHNwYWNlLCFpc01hcCxsb25nRGVzYyxsb3dzcmMsbmFtZSxyZWZlcnJlclBvbGljeSxzaXplcyxzcmMsc3Jjc2V0LHVzZU1hcCwjdnNwYWNlLCN3aWR0aCIsImlucHV0XltIVE1MRWxlbWVudF18YWNjZXB0LGFsaWduLGFsdCxhdXRvY2FwaXRhbGl6ZSxhdXRvY29tcGxldGUsIWF1dG9mb2N1cywhY2hlY2tlZCwhZGVmYXVsdENoZWNrZWQsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCVmaWxlcyxmb3JtQWN0aW9uLGZvcm1FbmN0eXBlLGZvcm1NZXRob2QsIWZvcm1Ob1ZhbGlkYXRlLGZvcm1UYXJnZXQsI2hlaWdodCwhaW5jcmVtZW50YWwsIWluZGV0ZXJtaW5hdGUsbWF4LCNtYXhMZW5ndGgsbWluLCNtaW5MZW5ndGgsIW11bHRpcGxlLG5hbWUscGF0dGVybixwbGFjZWhvbGRlciwhcmVhZE9ubHksIXJlcXVpcmVkLHNlbGVjdGlvbkRpcmVjdGlvbiwjc2VsZWN0aW9uRW5kLCNzZWxlY3Rpb25TdGFydCwjc2l6ZSxzcmMsc3RlcCx0eXBlLHVzZU1hcCx2YWx1ZSwldmFsdWVBc0RhdGUsI3ZhbHVlQXNOdW1iZXIsI3dpZHRoIiwibGleW0hUTUxFbGVtZW50XXx0eXBlLCN2YWx1ZSIsImxhYmVsXltIVE1MRWxlbWVudF18aHRtbEZvciIsImxlZ2VuZF5bSFRNTEVsZW1lbnRdfGFsaWduIiwibGlua15bSFRNTEVsZW1lbnRdfGFzLGNoYXJzZXQsJWNyb3NzT3JpZ2luLCFkaXNhYmxlZCxocmVmLGhyZWZsYW5nLGludGVncml0eSxtZWRpYSxyZWZlcnJlclBvbGljeSxyZWwsJXJlbExpc3QscmV2LCVzaXplcyx0YXJnZXQsdHlwZSIsIm1hcF5bSFRNTEVsZW1lbnRdfG5hbWUiLCJtYXJxdWVlXltIVE1MRWxlbWVudF18YmVoYXZpb3IsYmdDb2xvcixkaXJlY3Rpb24saGVpZ2h0LCNoc3BhY2UsI2xvb3AsI3Njcm9sbEFtb3VudCwjc2Nyb2xsRGVsYXksIXRydWVTcGVlZCwjdnNwYWNlLHdpZHRoIiwibWVudV5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwibWV0YV5bSFRNTEVsZW1lbnRdfGNvbnRlbnQsaHR0cEVxdWl2LG5hbWUsc2NoZW1lIiwibWV0ZXJeW0hUTUxFbGVtZW50XXwjaGlnaCwjbG93LCNtYXgsI21pbiwjb3B0aW11bSwjdmFsdWUiLCJpbnMsZGVsXltIVE1MRWxlbWVudF18Y2l0ZSxkYXRlVGltZSIsIm9sXltIVE1MRWxlbWVudF18IWNvbXBhY3QsIXJldmVyc2VkLCNzdGFydCx0eXBlIiwib2JqZWN0XltIVE1MRWxlbWVudF18YWxpZ24sYXJjaGl2ZSxib3JkZXIsY29kZSxjb2RlQmFzZSxjb2RlVHlwZSxkYXRhLCFkZWNsYXJlLGhlaWdodCwjaHNwYWNlLG5hbWUsc3RhbmRieSx0eXBlLHVzZU1hcCwjdnNwYWNlLHdpZHRoIiwib3B0Z3JvdXBeW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbGFiZWwiLCJvcHRpb25eW0hUTUxFbGVtZW50XXwhZGVmYXVsdFNlbGVjdGVkLCFkaXNhYmxlZCxsYWJlbCwhc2VsZWN0ZWQsdGV4dCx2YWx1ZSIsIm91dHB1dF5bSFRNTEVsZW1lbnRdfGRlZmF1bHRWYWx1ZSwlaHRtbEZvcixuYW1lLHZhbHVlIiwicF5bSFRNTEVsZW1lbnRdfGFsaWduIiwicGFyYW1eW0hUTUxFbGVtZW50XXxuYW1lLHR5cGUsdmFsdWUsdmFsdWVUeXBlIiwicGljdHVyZV5bSFRNTEVsZW1lbnRdfCIsInByZV5bSFRNTEVsZW1lbnRdfCN3aWR0aCIsInByb2dyZXNzXltIVE1MRWxlbWVudF18I21heCwjdmFsdWUiLCJxLGJsb2NrcXVvdGUsY2l0ZV5bSFRNTEVsZW1lbnRdfCIsInNjcmlwdF5bSFRNTEVsZW1lbnRdfCFhc3luYyxjaGFyc2V0LCVjcm9zc09yaWdpbiwhZGVmZXIsZXZlbnQsaHRtbEZvcixpbnRlZ3JpdHksc3JjLHRleHQsdHlwZSIsInNlbGVjdF5bSFRNTEVsZW1lbnRdfGF1dG9jb21wbGV0ZSwhYXV0b2ZvY3VzLCFkaXNhYmxlZCwjbGVuZ3RoLCFtdWx0aXBsZSxuYW1lLCFyZXF1aXJlZCwjc2VsZWN0ZWRJbmRleCwjc2l6ZSx2YWx1ZSIsInNoYWRvd15bSFRNTEVsZW1lbnRdfCIsInNsb3ReW0hUTUxFbGVtZW50XXxuYW1lIiwic291cmNlXltIVE1MRWxlbWVudF18bWVkaWEsc2l6ZXMsc3JjLHNyY3NldCx0eXBlIiwic3Bhbl5bSFRNTEVsZW1lbnRdfCIsInN0eWxlXltIVE1MRWxlbWVudF18IWRpc2FibGVkLG1lZGlhLHR5cGUiLCJjYXB0aW9uXltIVE1MRWxlbWVudF18YWxpZ24iLCJ0aCx0ZF5bSFRNTEVsZW1lbnRdfGFiYnIsYWxpZ24sYXhpcyxiZ0NvbG9yLGNoLGNoT2ZmLCNjb2xTcGFuLGhlYWRlcnMsaGVpZ2h0LCFub1dyYXAsI3Jvd1NwYW4sc2NvcGUsdkFsaWduLHdpZHRoIiwiY29sLGNvbGdyb3VwXltIVE1MRWxlbWVudF18YWxpZ24sY2gsY2hPZmYsI3NwYW4sdkFsaWduLHdpZHRoIiwidGFibGVeW0hUTUxFbGVtZW50XXxhbGlnbixiZ0NvbG9yLGJvcmRlciwlY2FwdGlvbixjZWxsUGFkZGluZyxjZWxsU3BhY2luZyxmcmFtZSxydWxlcyxzdW1tYXJ5LCV0Rm9vdCwldEhlYWQsd2lkdGgiLCJ0cl5bSFRNTEVsZW1lbnRdfGFsaWduLGJnQ29sb3IsY2gsY2hPZmYsdkFsaWduIiwidGZvb3QsdGhlYWQsdGJvZHleW0hUTUxFbGVtZW50XXxhbGlnbixjaCxjaE9mZix2QWxpZ24iLCJ0ZW1wbGF0ZV5bSFRNTEVsZW1lbnRdfCIsInRleHRhcmVhXltIVE1MRWxlbWVudF18YXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLCFhdXRvZm9jdXMsI2NvbHMsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCNtYXhMZW5ndGgsI21pbkxlbmd0aCxuYW1lLHBsYWNlaG9sZGVyLCFyZWFkT25seSwhcmVxdWlyZWQsI3Jvd3Msc2VsZWN0aW9uRGlyZWN0aW9uLCNzZWxlY3Rpb25FbmQsI3NlbGVjdGlvblN0YXJ0LHZhbHVlLHdyYXAiLCJ0aXRsZV5bSFRNTEVsZW1lbnRdfHRleHQiLCJ0cmFja15bSFRNTEVsZW1lbnRdfCFkZWZhdWx0LGtpbmQsbGFiZWwsc3JjLHNyY2xhbmciLCJ1bF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0LHR5cGUiLCJ1bmtub3duXltIVE1MRWxlbWVudF18IiwidmlkZW9ebWVkaWF8I2hlaWdodCxwb3N0ZXIsI3dpZHRoIiwiOnN2ZzphXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzphbmltYXRlXjpzdmc6YW5pbWF0aW9ufCIsIjpzdmc6YW5pbWF0ZU1vdGlvbl46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOmFuaW1hdGVUcmFuc2Zvcm1eOnN2ZzphbmltYXRpb258IiwiOnN2ZzpjaXJjbGVeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmNsaXBQYXRoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZWZzXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZXNjXjpzdmc6fCIsIjpzdmc6ZGlzY2FyZF46c3ZnOnwiLCI6c3ZnOmVsbGlwc2VeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmZlQmxlbmReOnN2Zzp8IiwiOnN2ZzpmZUNvbG9yTWF0cml4Xjpzdmc6fCIsIjpzdmc6ZmVDb21wb25lbnRUcmFuc2Zlcl46c3ZnOnwiLCI6c3ZnOmZlQ29tcG9zaXRlXjpzdmc6fCIsIjpzdmc6ZmVDb252b2x2ZU1hdHJpeF46c3ZnOnwiLCI6c3ZnOmZlRGlmZnVzZUxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVEaXNwbGFjZW1lbnRNYXBeOnN2Zzp8IiwiOnN2ZzpmZURpc3RhbnRMaWdodF46c3ZnOnwiLCI6c3ZnOmZlRHJvcFNoYWRvd146c3ZnOnwiLCI6c3ZnOmZlRmxvb2ReOnN2Zzp8IiwiOnN2ZzpmZUZ1bmNBXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlRnVuY0JeOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9ufCIsIjpzdmc6ZmVGdW5jR146c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUZ1bmNSXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlR2F1c3NpYW5CbHVyXjpzdmc6fCIsIjpzdmc6ZmVJbWFnZV46c3ZnOnwiLCI6c3ZnOmZlTWVyZ2VeOnN2Zzp8IiwiOnN2ZzpmZU1lcmdlTm9kZV46c3ZnOnwiLCI6c3ZnOmZlTW9ycGhvbG9neV46c3ZnOnwiLCI6c3ZnOmZlT2Zmc2V0Xjpzdmc6fCIsIjpzdmc6ZmVQb2ludExpZ2h0Xjpzdmc6fCIsIjpzdmc6ZmVTcGVjdWxhckxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVTcG90TGlnaHReOnN2Zzp8IiwiOnN2ZzpmZVRpbGVeOnN2Zzp8IiwiOnN2ZzpmZVR1cmJ1bGVuY2VeOnN2Zzp8IiwiOnN2ZzpmaWx0ZXJeOnN2Zzp8IiwiOnN2Zzpmb3JlaWduT2JqZWN0Xjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpnXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzppbWFnZV46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6bGluZV46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6bGluZWFyR3JhZGllbnReOnN2ZzpncmFkaWVudHwiLCI6c3ZnOm1wYXRoXjpzdmc6fCIsIjpzdmc6bWFya2VyXjpzdmc6fCIsIjpzdmc6bWFza146c3ZnOnwiLCI6c3ZnOm1ldGFkYXRhXjpzdmc6fCIsIjpzdmc6cGF0aF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6cGF0dGVybl46c3ZnOnwiLCI6c3ZnOnBvbHlnb25eOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnBvbHlsaW5lXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpyYWRpYWxHcmFkaWVudF46c3ZnOmdyYWRpZW50fCIsIjpzdmc6cmVjdF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6c3ZnXjpzdmc6Z3JhcGhpY3N8I2N1cnJlbnRTY2FsZSwjem9vbUFuZFBhbiIsIjpzdmc6c2NyaXB0Xjpzdmc6fHR5cGUiLCI6c3ZnOnNldF46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOnN0b3BeOnN2Zzp8IiwiOnN2ZzpzdHlsZV46c3ZnOnwhZGlzYWJsZWQsbWVkaWEsdGl0bGUsdHlwZSIsIjpzdmc6c3dpdGNoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpzeW1ib2xeOnN2Zzp8IiwiOnN2Zzp0c3Bhbl46c3ZnOnRleHRQb3NpdGlvbmluZ3wiLCI6c3ZnOnRleHReOnN2Zzp0ZXh0UG9zaXRpb25pbmd8IiwiOnN2Zzp0ZXh0UGF0aF46c3ZnOnRleHRDb250ZW50fCIsIjpzdmc6dGl0bGVeOnN2Zzp8IiwiOnN2Zzp1c2VeOnN2ZzpncmFwaGljc3wiLCI6c3ZnOnZpZXdeOnN2Zzp8I3pvb21BbmRQYW4iLCJkYXRhXltIVE1MRWxlbWVudF18dmFsdWUiLCJrZXlnZW5eW0hUTUxFbGVtZW50XXwhYXV0b2ZvY3VzLGNoYWxsZW5nZSwhZGlzYWJsZWQsZm9ybSxrZXl0eXBlLG5hbWUiLCJtZW51aXRlbV5bSFRNTEVsZW1lbnRdfHR5cGUsbGFiZWwsaWNvbiwhZGlzYWJsZWQsIWNoZWNrZWQscmFkaW9ncm91cCwhZGVmYXVsdCIsInN1bW1hcnleW0hUTUxFbGVtZW50XXwiLCJ0aW1lXltIVE1MRWxlbWVudF18ZGF0ZVRpbWUiLCI6c3ZnOmN1cnNvcl46c3ZnOnwiXSxuWT1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKHtjbGFzczoiY2xhc3NOYW1lIixmb3I6Imh0bWxGb3IiLGZvcm1hY3Rpb246ImZvcm1BY3Rpb24iLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9KSksY2JlPUFycmF5LmZyb20oblkpLnJlZHVjZSgobixbdCxlXSk9PihuLnNldCh0LGUpLG4pLG5ldyBNYXApLGoxPWNsYXNzIGV4dGVuZHMgQkx7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3NjaGVtYT1uZXcgTWFwLHRoaXMuX2V2ZW50U2NoZW1hPW5ldyBNYXAsbGJlLmZvckVhY2godD0+e2xldCBlPW5ldyBNYXAsaT1uZXcgU2V0LFtyLG9dPXQuc3BsaXQoInwiKSxzPW8uc3BsaXQoIiwiKSxbYSxsXT1yLnNwbGl0KCJeIik7YS5zcGxpdCgiLCIpLmZvckVhY2godT0+e3RoaXMuX3NjaGVtYS5zZXQodS50b0xvd2VyQ2FzZSgpLGUpLHRoaXMuX2V2ZW50U2NoZW1hLnNldCh1LnRvTG93ZXJDYXNlKCksaSl9KTtsZXQgYz1sJiZ0aGlzLl9zY2hlbWEuZ2V0KGwudG9Mb3dlckNhc2UoKSk7aWYoYyl7Zm9yKGxldFt1LGRdb2YgYyllLnNldCh1LGQpO2ZvcihsZXQgdSBvZiB0aGlzLl9ldmVudFNjaGVtYS5nZXQobC50b0xvd2VyQ2FzZSgpKSlpLmFkZCh1KX1zLmZvckVhY2godT0+e2lmKHUubGVuZ3RoPjApc3dpdGNoKHVbMF0pe2Nhc2UiKiI6aS5hZGQodS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UiISI6ZS5zZXQodS5zdWJzdHJpbmcoMSksImJvb2xlYW4iKTticmVhaztjYXNlIiMiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJudW1iZXIiKTticmVhaztjYXNlIiUiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJvYmplY3QiKTticmVhaztkZWZhdWx0OmUuc2V0KHUsInN0cmluZyIpfX0pfSl9aGFzUHJvcGVydHkodCxlLGkpe2lmKGkuc29tZShvPT4ibm8tZXJyb3JzLXNjaGVtYSI9PT1vLm5hbWUpKXJldHVybiEwO2lmKHQuaW5kZXhPZigiLSIpPi0xKXtpZihVTih0KXx8ek4odCkpcmV0dXJuITE7aWYoaS5zb21lKG89PiJjdXN0b20tZWxlbWVudHMiPT09by5uYW1lKSlyZXR1cm4hMH1yZXR1cm4odGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIikpLmhhcyhlKX1oYXNFbGVtZW50KHQsZSl7cmV0dXJuISEoZS5zb21lKGk9PiJuby1lcnJvcnMtc2NoZW1hIj09PWkubmFtZSl8fHQuaW5kZXhPZigiLSIpPi0xJiYoVU4odCl8fHpOKHQpfHxlLnNvbWUoaT0+ImN1c3RvbS1lbGVtZW50cyI9PT1pLm5hbWUpKSl8fHRoaXMuX3NjaGVtYS5oYXModC50b0xvd2VyQ2FzZSgpKX1zZWN1cml0eUNvbnRleHQodCxlLGkpe2kmJihlPXRoaXMuZ2V0TWFwcGVkUHJvcE5hbWUoZSkpLHQ9dC50b0xvd2VyQ2FzZSgpLGU9ZS50b0xvd2VyQ2FzZSgpO2xldCByPUc5KClbdCsifCIrZV07cmV0dXJuIHJ8fChyPUc5KClbIip8IitlXSxyfHxZci5OT05FKX1nZXRNYXBwZWRQcm9wTmFtZSh0KXtyZXR1cm4gblkuZ2V0KHQpPz90fWdldERlZmF1bHRDb21wb25lbnRFbGVtZW50TmFtZSgpe3JldHVybiJuZy1jb21wb25lbnQifXZhbGlkYXRlUHJvcGVydHkodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJvbiIpP3tlcnJvcjohMCxtc2c6YEJpbmRpbmcgdG8gZXZlbnQgcHJvcGVydHkgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLlxuSWYgJyR7dH0nIGlzIGEgZGlyZWN0aXZlIGlucHV0LCBtYWtlIHN1cmUgdGhlIGRpcmVjdGl2ZSBpcyBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBtb2R1bGUuYH06e2Vycm9yOiExfX12YWxpZGF0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm9uIik/e2Vycm9yOiEwLG1zZzpgQmluZGluZyB0byBldmVudCBhdHRyaWJ1dGUgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLmB9OntlcnJvcjohMX19YWxsS25vd25FbGVtZW50TmFtZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zY2hlbWEua2V5cygpKX1hbGxLbm93bkF0dHJpYnV0ZXNPZkVsZW1lbnQodCl7bGV0IGU9dGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIik7cmV0dXJuIEFycmF5LmZyb20oZS5rZXlzKCkpLm1hcChpPT5jYmUuZ2V0KGkpPz9pKX1hbGxLbm93bkV2ZW50c09mRWxlbWVudCh0KXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9ldmVudFNjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKT8/W10pfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlUHJvcGVydHkodCl7cmV0dXJuIHQucmVwbGFjZShjX2UsKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlVmFsdWUodCxlLGkpe2xldCByPSIiLG89aS50b1N0cmluZygpLnRyaW0oKSxzPW51bGw7aWYoZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2Uid2lkdGgiOmNhc2UiaGVpZ2h0IjpjYXNlIm1pbldpZHRoIjpjYXNlIm1pbkhlaWdodCI6Y2FzZSJtYXhXaWR0aCI6Y2FzZSJtYXhIZWlnaHQiOmNhc2UibGVmdCI6Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpjYXNlImZvbnRTaXplIjpjYXNlIm91dGxpbmVXaWR0aCI6Y2FzZSJvdXRsaW5lT2Zmc2V0IjpjYXNlInBhZGRpbmdUb3AiOmNhc2UicGFkZGluZ0xlZnQiOmNhc2UicGFkZGluZ0JvdHRvbSI6Y2FzZSJwYWRkaW5nUmlnaHQiOmNhc2UibWFyZ2luVG9wIjpjYXNlIm1hcmdpbkxlZnQiOmNhc2UibWFyZ2luQm90dG9tIjpjYXNlIm1hcmdpblJpZ2h0IjpjYXNlImJvcmRlclJhZGl1cyI6Y2FzZSJib3JkZXJXaWR0aCI6Y2FzZSJib3JkZXJUb3BXaWR0aCI6Y2FzZSJib3JkZXJMZWZ0V2lkdGgiOmNhc2UiYm9yZGVyUmlnaHRXaWR0aCI6Y2FzZSJib3JkZXJCb3R0b21XaWR0aCI6Y2FzZSJ0ZXh0SW5kZW50IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0odCkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlyPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJihzPWBQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAke2V9OiR7aX1gKX1yZXR1cm57ZXJyb3I6cyx2YWx1ZTpvK3J9fX0sVzk9bmV3IFNldChbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVyaHRtbCIsIip8b3V0ZXJodG1sIiwiZW1iZWR8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiXSk7ZnVuY3Rpb24gaVkobix0KXtyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksdD10LnRvTG93ZXJDYXNlKCksVzkuaGFzKG4rInwiK3QpfHxXOS5oYXMoIip8Iit0KX12YXIgUE49ImFuaW1hdGUtIjtmdW5jdGlvbiBSTihuKXtyZXR1cm4iQCI9PW5bMF19ZnVuY3Rpb24gT04obix0LGUsaSl7bGV0IHI9W107cmV0dXJuIHVkLnBhcnNlKHQpLmZvckVhY2gobz0+e2xldCBzPW8uZWxlbWVudD9bby5lbGVtZW50XTpuLmFsbEtub3duRWxlbWVudE5hbWVzKCksYT1uZXcgU2V0KG8ubm90U2VsZWN0b3JzLmZpbHRlcihjPT5jLmlzRWxlbWVudFNlbGVjdG9yKCkpLm1hcChjPT5jLmVsZW1lbnQpKSxsPXMuZmlsdGVyKGM9PiFhLmhhcyhjKSk7ci5wdXNoKC4uLmwubWFwKGM9Pm4uc2VjdXJpdHlDb250ZXh0KGMsZSxpKSkpfSksMD09PXIubGVuZ3RoP1tZci5OT05FXTpBcnJheS5mcm9tKG5ldyBTZXQocikpLnNvcnQoKX1mdW5jdGlvbiBjcChuLHQpe2xldCBlPXQuc3RhcnQtbi5zdGFydC5vZmZzZXQsaT10LmVuZC1uLmVuZC5vZmZzZXQ7cmV0dXJuIG5ldyBUbyhuLnN0YXJ0Lm1vdmVCeShlKSxuLmVuZC5tb3ZlQnkoaSksbi5mdWxsU3RhcnQubW92ZUJ5KGUpLG4uZGV0YWlscyl9dmFyIGdiZT0vXihbXjovPyNdKyk6LztmdW5jdGlvbiByWShuKXtsZXQgdD1udWxsLGU9bnVsbCxpPW51bGwscj0hMSxvPSIiO24uYXR0cnMuZm9yRWFjaChsPT57bGV0IGM9bC5uYW1lLnRvTG93ZXJDYXNlKCk7InNlbGVjdCI9PWM/dD1sLnZhbHVlOiJocmVmIj09Yz9lPWwudmFsdWU6InJlbCI9PWM/aT1sLnZhbHVlOiJuZ05vbkJpbmRhYmxlIj09bC5uYW1lP3I9ITA6Im5nUHJvamVjdEFzIj09bC5uYW1lJiZsLnZhbHVlLmxlbmd0aD4wJiYobz1sLnZhbHVlKX0pLHQ9ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PT1ufHwwPT09bi5sZW5ndGg/IioiOm59KHQpO2xldCBzPW4ubmFtZS50b0xvd2VyQ2FzZSgpLGE9UHMuT1RIRVI7cmV0dXJuIHpOKHMpP2E9UHMuTkdfQ09OVEVOVDoic3R5bGUiPT1zP2E9UHMuU1RZTEU6InNjcmlwdCI9PXM/YT1Qcy5TQ1JJUFQ6ImxpbmsiPT1zJiYic3R5bGVzaGVldCI9PWkmJihhPVBzLlNUWUxFU0hFRVQpLG5ldyBITChhLHQsZSxyLG8pfXZhciBQcz0oKCk9PntyZXR1cm4obj1Qc3x8KFBzPXt9KSlbbi5OR19DT05URU5UPTBdPSJOR19DT05URU5UIixuW24uU1RZTEU9MV09IlNUWUxFIixuW24uU1RZTEVTSEVFVD0yXT0iU1RZTEVTSEVFVCIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uT1RIRVI9NF09Ik9USEVSIixQczt2YXIgbn0pKCksSEw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdEF0dHI9ZSx0aGlzLmhyZWZBdHRyPWksdGhpcy5ub25CaW5kYWJsZT1yLHRoaXMucHJvamVjdEFzPW99fSxUYmU9L14oPzooYmluZC0pfChsZXQtKXwocmVmLXwjKXwob24tKXwoYmluZG9uLSl8KEApKSguKikkLyx1cF9CQU5BTkFfQk9YPXtzdGFydDoiWygiLGVuZDoiKV0ifSx1cF9QUk9QRVJUWT17c3RhcnQ6IlsiLGVuZDoiXSJ9LHVwX0VWRU5UPXtzdGFydDoiKCIsZW5kOiIpIn0sSWJlPW5ldyBjbGFzc3t2aXNpdEVsZW1lbnQodCl7bGV0IGU9clkodCk7aWYoZS50eXBlPT09UHMuU0NSSVBUfHxlLnR5cGU9PT1Qcy5TVFlMRXx8ZS50eXBlPT09UHMuU1RZTEVTSEVFVClyZXR1cm4gbnVsbDtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sbnVsbCk7cmV0dXJuIG5ldyBFMCh0Lm5hbWUsY3UodGhpcyx0LmF0dHJzKSxbXSxbXSxpLFtdLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pfXZpc2l0Q29tbWVudCh0KXtyZXR1cm4gbnVsbH12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIG5ldyB3MCh0LnZhbHVlLHQuc291cmNlU3Bhbil9dmlzaXRFeHBhbnNpb24odCl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb25DYXNlKHQpe3JldHVybiBudWxsfX07ZnVuY3Rpb24gJDkobil7cmV0dXJuL15kYXRhLS9pLnRlc3Qobik/bi5zdWJzdHJpbmcoNSk6bn1mdW5jdGlvbiBrTihuLHQpe3QucHVzaCguLi5uLm1hcChlPT5TMC5mcm9tUGFyc2VkRXZlbnQoZSkpKX12YXIgcmM9KCgpPT57cmV0dXJuKG49cmN8fChyYz17fSkpW24uRUxFTUVOVD0wXT0iRUxFTUVOVCIsbltuLlRFTVBMQVRFPTFdPSJURU1QTEFURSIscmM7dmFyIG59KSgpLFJ4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPTAscj1udWxsLG8scyl7dGhpcy5pbmRleD10LHRoaXMucmVmPWUsdGhpcy5sZXZlbD1pLHRoaXMudGVtcGxhdGVJbmRleD1yLHRoaXMubWV0YT1vLHRoaXMucmVnaXN0cnk9cyx0aGlzLmJpbmRpbmdzPW5ldyBTZXQsdGhpcy5wbGFjZWhvbGRlcnM9bmV3IE1hcCx0aGlzLmlzRW1pdHRlZD0hMSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQ9MCx0aGlzLl9yZWdpc3RyeT1zfHx7Z2V0VW5pcXVlSWQ6bXZlKCksaWN1czpuZXcgTWFwfSx0aGlzLmlkPXRoaXMuX3JlZ2lzdHJ5LmdldFVuaXF1ZUlkKCl9YXBwZW5kVGFnKHQsZSxpLHIpe2UuaXNWb2lkJiZyfHx1MSh0aGlzLnBsYWNlaG9sZGVycyxlLmlzVm9pZHx8IXI/ZS5zdGFydE5hbWU6ZS5jbG9zZU5hbWUse3R5cGU6dCxpbmRleDppLGN0eDp0aGlzLmlkLGlzVm9pZDplLmlzVm9pZCxjbG9zZWQ6cn0pfWdldCBpY3VzKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmljdXN9Z2V0IGlzUm9vdCgpe3JldHVybiAwPT09dGhpcy5sZXZlbH1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiAwPT09dGhpcy5fdW5yZXNvbHZlZEN0eENvdW50fWdldFNlcmlhbGl6ZWRQbGFjZWhvbGRlcnMoKXtsZXQgdD1uZXcgTWFwO3JldHVybiB0aGlzLnBsYWNlaG9sZGVycy5mb3JFYWNoKChlLGkpPT50LnNldChpLGUubWFwKEZiZSkpKSx0fWFwcGVuZEJpbmRpbmcodCl7dGhpcy5iaW5kaW5ncy5hZGQodCl9YXBwZW5kSWN1KHQsZSl7dTEodGhpcy5fcmVnaXN0cnkuaWN1cyx0LGUpfWFwcGVuZEJvdW5kVGV4dCh0KXtEcSh0LHRoaXMuYmluZGluZ3Muc2l6ZSx0aGlzLmlkKS5mb3JFYWNoKChpLHIpPT51MSh0aGlzLnBsYWNlaG9sZGVycyxyLC4uLmkpKX1hcHBlbmRUZW1wbGF0ZSh0LGUpe3RoaXMuYXBwZW5kVGFnKHJjLlRFTVBMQVRFLHQsZSwhMSksdGhpcy5hcHBlbmRUYWcocmMuVEVNUExBVEUsdCxlLCEwKSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQrK31hcHBlbmRFbGVtZW50KHQsZSxpKXt0aGlzLmFwcGVuZFRhZyhyYy5FTEVNRU5ULHQsZSxpKX1hcHBlbmRQcm9qZWN0aW9uKHQsZSl7dGhpcy5hcHBlbmRUYWcocmMuRUxFTUVOVCx0LGUsITEpLHRoaXMuYXBwZW5kVGFnKHJjLkVMRU1FTlQsdCxlLCEwKX1mb3JrQ2hpbGRDb250ZXh0KHQsZSxpKXtyZXR1cm4gbmV3IFJ4KHQsdGhpcy5yZWYsdGhpcy5sZXZlbCsxLGUsaSx0aGlzLl9yZWdpc3RyeSl9cmVjb25jaWxlQ2hpbGRDb250ZXh0KHQpe1sic3RhcnQiLCJjbG9zZSJdLmZvckVhY2goaT0+e2xldCBzPSh0aGlzLnBsYWNlaG9sZGVycy5nZXQodC5tZXRhW2Ake2l9TmFtZWBdKXx8W10pLmZpbmQoZXEodGhpcy5pZCx0LnRlbXBsYXRlSW5kZXgpKTtzJiYocy5jdHg9dC5pZCl9KSx0LnBsYWNlaG9sZGVycy5mb3JFYWNoKChpLHIpPT57bGV0IG89dGhpcy5wbGFjZWhvbGRlcnMuZ2V0KHIpO2lmKCFvKXJldHVybiB2b2lkIHRoaXMucGxhY2Vob2xkZXJzLnNldChyLGkpO2xldCBzPW8uZmluZEluZGV4KGVxKHQuaWQsdC50ZW1wbGF0ZUluZGV4KSk7aWYocz49MCl7bGV0IGE9ci5zdGFydHNXaXRoKCJDTE9TRSIpO3IuZW5kc1dpdGgoIk5HLVRFTVBMQVRFIik/by5zcGxpY2UocysoYT8wOjEpLDAsLi4uaSk6KGlbYT9pLmxlbmd0aC0xOjBdLnRtcGw9b1tzXSxvLnNwbGljZShzLDEsLi4uaSkpfWVsc2Ugby5wdXNoKC4uLmkpO3RoaXMucGxhY2Vob2xkZXJzLnNldChyLG8pfSksdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50LS19fTtmdW5jdGlvbiBGTihuLHQsZSxpKXtyZXR1cm4gUTEoYCR7aT8iLyI6IiJ9JHtufSR7dH1gLGUpfWZ1bmN0aW9uIE5OKG4se2luZGV4OnQsY3R4OmUsaXNWb2lkOml9LHIpe3JldHVybiBpP0ZOKG4sdCxlKStGTihuLHQsZSwhMCk6Rk4obix0LGUscil9ZnVuY3Rpb24gZXEobix0KXtyZXR1cm4gZT0+Im9iamVjdCI9PXR5cGVvZiBlJiZlLnR5cGU9PT1yYy5URU1QTEFURSYmZS5pbmRleD09PXQmJmUuY3R4PT09bn1mdW5jdGlvbiBGYmUobil7bGV0IHQ9KHIsbyk9Pk5OKCIjIixyLG8pLGU9KHIsbyk9Pk5OKCIqIixyLG8pO3N3aXRjaChuLnR5cGUpe2Nhc2UgcmMuRUxFTUVOVDpyZXR1cm4gbi5jbG9zZWQ/dChuLCEwKSsobi50bXBsP2Uobi50bXBsLCEwKToiIik6bi50bXBsP2Uobi50bXBsKSt0KG4pKyhuLmlzVm9pZD9lKG4udG1wbCwhMCk6IiIpOnQobik7Y2FzZSByYy5URU1QTEFURTpyZXR1cm4gZShuLG4uY2xvc2VkKTtkZWZhdWx0OnJldHVybiBufX12YXIgTmJlPW5ldyBjbGFzc3t2aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCl7cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfXZpc2l0SWN1KHQpe2xldCBlPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9uUGxhY2Vob2xkZXJ9LCAke3QudHlwZX0sICR7ZS5qb2luKCIgIil9fWB9dmlzaXRUYWdQbGFjZWhvbGRlcih0KXtyZXR1cm4gdC5pc1ZvaWQ/dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSk6YCR7dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSl9JHt0LmNoaWxkcmVuLm1hcChlPT5lLnZpc2l0KHRoaXMpKS5qb2luKCIiKX0ke3RoaXMuZm9ybWF0UGgodC5jbG9zZU5hbWUpfWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCxlKXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfWZvcm1hdFBoKHQpe3JldHVybmB7JHtGeCh0LCExKX19YH19O2Z1bmN0aW9uIG9ZKG4pe3JldHVybiBuLnZpc2l0KE5iZSl9dmFyIHRxPXtBOiJMSU5LIixCOiJCT0xEX1RFWFQiLEJSOiJMSU5FX0JSRUFLIixFTToiRU1QSEFTSVNFRF9URVhUIixIMToiSEVBRElOR19MRVZFTDEiLEgyOiJIRUFESU5HX0xFVkVMMiIsSDM6IkhFQURJTkdfTEVWRUwzIixINDoiSEVBRElOR19MRVZFTDQiLEg1OiJIRUFESU5HX0xFVkVMNSIsSDY6IkhFQURJTkdfTEVWRUw2IixIUjoiSE9SSVpPTlRBTF9SVUxFIixJOiJJVEFMSUNfVEVYVCIsTEk6IkxJU1RfSVRFTSIsTElOSzoiTUVESUFfTElOSyIsT0w6Ik9SREVSRURfTElTVCIsUDoiUEFSQUdSQVBIIixROiJRVU9UQVRJT04iLFM6IlNUUklLRVRIUk9VR0hfVEVYVCIsU01BTEw6IlNNQUxMX1RFWFQiLFNVQjoiU1VCU1RSSVBUIixTVVA6IlNVUEVSU0NSSVBUIixUQk9EWToiVEFCTEVfQk9EWSIsVEQ6IlRBQkxFX0NFTEwiLFRGT09UOiJUQUJMRV9GT09URVIiLFRIOiJUQUJMRV9IRUFERVJfQ0VMTCIsVEhFQUQ6IlRBQkxFX0hFQURFUiIsVFI6IlRBQkxFX1JPVyIsVFQ6Ik1PTk9TUEFDRURfVEVYVCIsVToiVU5ERVJMSU5FRF9URVhUIixVTDoiVU5PUkRFUkVEX0xJU1QifSxHTD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50cz17fSx0aGlzLl9zaWduYXR1cmVUb05hbWU9e319Z2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodCxlLGkpe2xldCByPXRoaXMuX2hhc2hUYWcodCxlLGkpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdO2xldCBvPXQudG9VcHBlckNhc2UoKSxzPXRxW29dfHxgVEFHXyR7b31gLGE9dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGk/czpgU1RBUlRfJHtzfWApO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09YSxhfWdldENsb3NlVGFnUGxhY2Vob2xkZXJOYW1lKHQpe2xldCBlPXRoaXMuX2hhc2hDbG9zaW5nVGFnKHQpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdO2xldCBpPXQudG9VcHBlckNhc2UoKSxvPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShgQ0xPU0VfJHt0cVtpXXx8YFRBR18ke2l9YH1gKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdPW8sb31nZXRQbGFjZWhvbGRlck5hbWUodCxlKXtsZXQgaT10LnRvVXBwZXJDYXNlKCkscj1gUEg6ICR7aX09JHtlfWA7aWYodGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdKXJldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl07bGV0IG89dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGkpO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09byxvfWdldFVuaXF1ZVBsYWNlaG9sZGVyKHQpe3JldHVybiB0aGlzLl9nZW5lcmF0ZVVuaXF1ZU5hbWUodC50b1VwcGVyQ2FzZSgpKX1faGFzaFRhZyh0LGUsaSl7cmV0dXJuYDwke3R9YCtPYmplY3Qua2V5cyhlKS5zb3J0KCkubWFwKGE9PmAgJHthfT0ke2VbYV19YCkuam9pbigiIikrKGk/Ii8+IjpgPjwvJHt0fT5gKX1faGFzaENsb3NpbmdUYWcodCl7cmV0dXJuIHRoaXMuX2hhc2hUYWcoYC8ke3R9YCx7fSwhMSl9X2dlbmVyYXRlVW5pcXVlTmFtZSh0KXtpZighdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHNbdF09MSx0O2xldCBpPXRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50c1t0XTtyZXR1cm4gdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzW3RdPWkrMSxgJHt0fV8ke2l9YH19LExiZT1uZXcgQjEobmV3IEwxKTtmdW5jdGlvbiBWYmUobix0KXtyZXR1cm4gdH12YXIgamJlPS9cL1wvW1xzXFNdKmkxOG5bXHNcU10qXChbXHNcU10qcGhbXHNcU10qPVtcc1xTXSooInwnKShbXHNcU10qPylcMVtcc1xTXSpcKS9nLHFMPWNsYXNzIGV4dGVuZHMgTWZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX0sV2JlPShuLHQpPT4obiBpbnN0YW5jZW9mIFRmJiYodCBpbnN0YW5jZW9mIFQwJiZuLmkxOG4gaW5zdGFuY2VvZiBpdSYmKHQucHJldmlvdXNNZXNzYWdlPW4uaTE4biksbi5pMThuPXQpLHQpLEcxPWNsYXNze2NvbnN0cnVjdG9yKHQ9JGMsZT0hMSxpPSExKXt0aGlzLmludGVycG9sYXRpb25Db25maWc9dCx0aGlzLmtlZXBJMThuQXR0cnM9ZSx0aGlzLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ9aSx0aGlzLmhhc0kxOG5NZXRhPSExLHRoaXMuX2Vycm9ycz1bXSx0aGlzLl9jcmVhdGVJMThuTWVzc2FnZT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9leHByZXNzaW9uUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lfXRvSTE4bk1lc3NhZ2UodCxlPSIiLGk9IiIscj0iIixvKXtsZXQgcz17aXNJY3U6MT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIE4wLGljdURlcHRoOjAscGxhY2Vob2xkZXJSZWdpc3RyeTpuZXcgR0wscGxhY2Vob2xkZXJUb0NvbnRlbnQ6e30scGxhY2Vob2xkZXJUb01lc3NhZ2U6e30sdmlzaXROb2RlRm46b3x8VmJlfSxhPWN1KHRoaXMsdCxzKTtyZXR1cm4gbmV3IGl1KGEscy5wbGFjZWhvbGRlclRvQ29udGVudCxzLnBsYWNlaG9sZGVyVG9NZXNzYWdlLGUsaSxyKX12aXNpdEVsZW1lbnQodCxlKXtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sZSkscj17fTt0LmF0dHJzLmZvckVhY2goYz0+e3JbYy5uYW1lXT1jLnZhbHVlfSk7bGV0IG89ZTModC5uYW1lKS5pc1ZvaWQscz1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodC5uYW1lLHIsbyk7ZS5wbGFjZWhvbGRlclRvQ29udGVudFtzXT17dGV4dDp0LnN0YXJ0U291cmNlU3Bhbi50b1N0cmluZygpLHNvdXJjZVNwYW46dC5zdGFydFNvdXJjZVNwYW59O2xldCBhPSIiO298fChhPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRDbG9zZVRhZ1BsYWNlaG9sZGVyTmFtZSh0Lm5hbWUpLGUucGxhY2Vob2xkZXJUb0NvbnRlbnRbYV09e3RleHQ6YDwvJHt0Lm5hbWV9PmAsc291cmNlU3Bhbjp0LmVuZFNvdXJjZVNwYW4/P3Quc291cmNlU3Bhbn0pO2xldCBsPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7dGhpcy50YWc9dCx0aGlzLmF0dHJzPWUsdGhpcy5zdGFydE5hbWU9aSx0aGlzLmNsb3NlTmFtZT1yLHRoaXMuY2hpbGRyZW49byx0aGlzLmlzVm9pZD1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWN9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRhZ1BsYWNlaG9sZGVyKHRoaXMsZSl9fSh0Lm5hbWUscixzLGEsaSxvLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsbCl9dmlzaXRBdHRyaWJ1dGUodCxlKXtsZXQgaT12b2lkIDA9PT10LnZhbHVlVG9rZW5zfHwxPT09dC52YWx1ZVRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC52YWx1ZVNwYW58fHQuc291cmNlU3Bhbik6dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC52YWx1ZVRva2Vucyx0LnZhbHVlU3Bhbnx8dC5zb3VyY2VTcGFuLGUsdC5pMThuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGkpfXZpc2l0VGV4dCh0LGUpe2xldCBpPTE9PT10LnRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC5zb3VyY2VTcGFuKTp0aGlzLl92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LnRva2Vucyx0LnNvdXJjZVNwYW4sZSx0LmkxOG4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsaSl9dmlzaXRDb21tZW50KHQsZSl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb24odCxlKXtlLmljdURlcHRoKys7bGV0IGk9e30scj1uZXcgUzEodC5zd2l0Y2hWYWx1ZSx0LnR5cGUsaSx0LnNvdXJjZVNwYW4pO2lmKHQuY2FzZXMuZm9yRWFjaChhPT57aVthLnZhbHVlXT1uZXcgYmYoYS5leHByZXNzaW9uLm1hcChsPT5sLnZpc2l0KHRoaXMsZSkpLGEuZXhwU291cmNlU3Bhbil9KSxlLmljdURlcHRoLS0sZS5pc0ljdXx8ZS5pY3VEZXB0aD4wKXtsZXQgYT1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0VW5pcXVlUGxhY2Vob2xkZXIoYFZBUl8ke3QudHlwZX1gKTtyZXR1cm4gci5leHByZXNzaW9uUGxhY2Vob2xkZXI9YSxlLnBsYWNlaG9sZGVyVG9Db250ZW50W2FdPXt0ZXh0OnQuc3dpdGNoVmFsdWUsc291cmNlU3Bhbjp0LnN3aXRjaFZhbHVlU291cmNlU3Bhbn0sZS52aXNpdE5vZGVGbih0LHIpfWxldCBvPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRQbGFjZWhvbGRlck5hbWUoIklDVSIsdC5zb3VyY2VTcGFuLnRvU3RyaW5nKCkpO2UucGxhY2Vob2xkZXJUb01lc3NhZ2Vbb109dGhpcy50b0kxOG5NZXNzYWdlKFt0XSwiIiwiIiwiIix2b2lkIDApO2xldCBzPW5ldyBUMChyLG8sdC5zb3VyY2VTcGFuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LHMpfXZpc2l0RXhwYW5zaW9uQ2FzZSh0LGUpe3Rocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGUgY29kZSIpfV92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LGUsaSxyKXtsZXQgbz1bXSxzPSExO2ZvcihsZXQgYSBvZiB0KXN3aXRjaChhLnR5cGUpe2Nhc2UgODpjYXNlIDE3OnM9ITA7bGV0IGw9YS5wYXJ0c1sxXSxjPWwuc3BsaXQoamJlKVsyXXx8IklOVEVSUE9MQVRJT04iLHU9aS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFBsYWNlaG9sZGVyTmFtZShjLGwpO2kucGxhY2Vob2xkZXJUb0NvbnRlbnRbdV09e3RleHQ6YS5wYXJ0cy5qb2luKCIiKSxzb3VyY2VTcGFuOmEuc291cmNlU3Bhbn0sby5wdXNoKG5ldyBFMShsLHUsYS5zb3VyY2VTcGFuKSk7YnJlYWs7ZGVmYXVsdDppZihhLnBhcnRzWzBdLmxlbmd0aD4wKXtsZXQgZD1vW28ubGVuZ3RoLTFdO2QgaW5zdGFuY2VvZiBsMD8oZC52YWx1ZSs9YS5wYXJ0c1swXSxkLnNvdXJjZVNwYW49bmV3IFRvKGQuc291cmNlU3Bhbi5zdGFydCxhLnNvdXJjZVNwYW4uZW5kLGQuc291cmNlU3Bhbi5mdWxsU3RhcnQsZC5zb3VyY2VTcGFuLmRldGFpbHMpKTpvLnB1c2gobmV3IGwwKGEucGFydHNbMF0sYS5zb3VyY2VTcGFuKSl9fXJldHVybiBzPyhmdW5jdGlvbihuLHQpe2lmKHQgaW5zdGFuY2VvZiBpdSYmKGZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZXM7aWYoMSE9PXQubGVuZ3RofHwhKHRbMF1pbnN0YW5jZW9mIGJmKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcHJldmlvdXMgaTE4biBtZXNzYWdlIC0gZXhwZWN0ZWQgaXQgdG8gY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIGBDb250YWluZXJgIG5vZGUuIil9KHQpLHQ9dC5ub2Rlc1swXSksdCBpbnN0YW5jZW9mIGJmKXshZnVuY3Rpb24obix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIG51bWJlciBvZiBpMThuIG1lc3NhZ2UgY2hpbGRyZW4gY2hhbmdlZCBiZXR3ZWVuIGZpcnN0IGFuZCBzZWNvbmQgcGFzcy4iKTtpZihuLnNvbWUoKGUsaSk9PnRbaV0uY29uc3RydWN0b3IhPT1lLmNvbnN0cnVjdG9yKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlcyBvZiB0aGUgaTE4biBtZXNzYWdlIGNoaWxkcmVuIGNoYW5nZWQgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIHBhc3MuIil9KHQuY2hpbGRyZW4sbik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5zb3VyY2VTcGFuPXQuY2hpbGRyZW5bZV0uc291cmNlU3Bhbn19KG8sciksbmV3IGJmKG8sZSkpOm9bMF19fShMYmUsbik7cmV0dXJuKGUsaSxyLG8scyk9PnQudG9JMThuTWVzc2FnZShlLGkscixvLHMpfSh0aGlzLmludGVycG9sYXRpb25Db25maWcpfV9nZW5lcmF0ZUkxOG5NZXNzYWdlKHQsZT0iIixpKXtsZXR7bWVhbmluZzpyLGRlc2NyaXB0aW9uOm8sY3VzdG9tSWQ6c309dGhpcy5fcGFyc2VNZXRhZGF0YShlKSxhPXRoaXMuX2NyZWF0ZUkxOG5NZXNzYWdlKHQscixvLHMsaSk7cmV0dXJuIHRoaXMuX3NldE1lc3NhZ2VJZChhLGUpLHRoaXMuX3NldExlZ2FjeUlkcyhhLGUpLGF9dmlzaXRBbGxXaXRoRXJyb3JzKHQpe2xldCBlPXQubWFwKGk9PmkudmlzaXQodGhpcyxudWxsKSk7cmV0dXJuIG5ldyBVMShlLHRoaXMuX2Vycm9ycyl9dmlzaXRFbGVtZW50KHQpe2xldCBlO2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuLmF0dHJzLnNvbWUodD0+ZnVuY3Rpb24obil7cmV0dXJuImkxOG4iPT09bnx8bi5zdGFydHNXaXRoKGxMKX0odC5uYW1lKSl9KHQpKXt0aGlzLmhhc0kxOG5NZXRhPSEwO2xldCBpPVtdLHI9e307Zm9yKGxldCBvIG9mIHQuYXR0cnMpaWYoImkxOG4iPT09by5uYW1lKWU9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZSh0LmNoaWxkcmVuLHQuaTE4bnx8by52YWx1ZSxXYmUpLDA9PT1lLm5vZGVzLmxlbmd0aCYmKGU9dm9pZCAwKSx0LmkxOG49ZTtlbHNlIGlmKG8ubmFtZS5zdGFydHNXaXRoKGxMKSl7bGV0IHM9by5uYW1lLnNsaWNlKGxMLmxlbmd0aCk7aVkodC5uYW1lLHMpP3RoaXMuX3JlcG9ydEVycm9yKG8sYFRyYW5zbGF0aW5nIGF0dHJpYnV0ZSAnJHtzfScgaXMgZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucy5gKTpyW3NdPW8udmFsdWV9ZWxzZSBpLnB1c2gobyk7aWYoT2JqZWN0LmtleXMocikubGVuZ3RoKWZvcihsZXQgbyBvZiBpKXtsZXQgcz1yW28ubmFtZV07dm9pZCAwIT09cyYmby52YWx1ZSYmKG8uaTE4bj10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFtvXSxvLmkxOG58fHMpKX10aGlzLmtlZXBJMThuQXR0cnN8fCh0LmF0dHJzPWkpfXJldHVybiBjdSh0aGlzLHQuY2hpbGRyZW4sZSksdH12aXNpdEV4cGFuc2lvbih0LGUpe2xldCBpLHI9dC5pMThuO2lmKHRoaXMuaGFzSTE4bk1ldGE9ITAsciBpbnN0YW5jZW9mIFQwKXtsZXQgbz1yLm5hbWU7aT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxyKSxUcShpKS5uYW1lPW8sbnVsbCE9PWUmJihlLnBsYWNlaG9sZGVyVG9NZXNzYWdlW29dPWkpfWVsc2UgaT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxlfHxyKTtyZXR1cm4gdC5pMThuPWksdH12aXNpdFRleHQodCl7cmV0dXJuIHR9dmlzaXRBdHRyaWJ1dGUodCl7cmV0dXJuIHR9dmlzaXRDb21tZW50KHQpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gdH1fcGFyc2VNZXRhZGF0YSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24obj0iIil7bGV0IHQsZSxpO2lmKG49bi50cmltKCkpe2xldCBzLHI9bi5pbmRleE9mKCJAQCIpLG89bi5pbmRleE9mKCJ8Iik7W3MsdF09cj4tMT9bbi5zbGljZSgwLHIpLG4uc2xpY2UocisyKV06W24sIiJdLFtlLGldPW8+LTE/W3Muc2xpY2UoMCxvKSxzLnNsaWNlKG8rMSldOlsiIixzXX1yZXR1cm57Y3VzdG9tSWQ6dCxtZWFuaW5nOmUsZGVzY3JpcHRpb246aX19KHQpOnQgaW5zdGFuY2VvZiBpdT90Ont9fV9zZXRNZXNzYWdlSWQodCxlKXt2YXIgbjt0LmlkfHwodC5pZD1lIGluc3RhbmNlb2YgaXUmJmUuaWR8fChuPXQpLmlkfHxfcShuKSl9X3NldExlZ2FjeUlkcyh0LGUpe2lmKHRoaXMuZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdCl0LmxlZ2FjeUlkcz1bbV9lKHQpLF9xKHQpXTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZSl7bGV0IGk9ZSBpbnN0YW5jZW9mIGl1P2U6ZSBpbnN0YW5jZW9mIFQwP2UucHJldmlvdXNNZXNzYWdlOnZvaWQgMDt0LmxlZ2FjeUlkcz1pP2kubGVnYWN5SWRzOltdfX1fcmVwb3J0RXJyb3IodCxlKXt0aGlzLl9lcnJvcnMucHVzaChuZXcgcUwodC5zb3VyY2VTcGFuLGUpKX19O2Z1bmN0aW9uIFpiZShuLHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5ub2Rlcy5tYXAodD0+dC52aXNpdChKYmUsbnVsbCkpLmpvaW4oIiIpfSh0KSxvPVtudChyKV07T2JqZWN0LmtleXMoaSkubGVuZ3RoJiYoby5wdXNoKHoxKHMzKGksITApLCEwKSksby5wdXNoKHoxKHtvcmlnaW5hbF9jb2RlOm1sKE9iamVjdC5rZXlzKGkpLm1hcChsPT4oe2tleTpGeChsKSxxdW90ZWQ6ITAsdmFsdWU6bnQodC5wbGFjZWhvbGRlcnNbbF0/dC5wbGFjZWhvbGRlcnNbbF0uc291cmNlU3Bhbi50b1N0cmluZygpOnQucGxhY2Vob2xkZXJUb01lc3NhZ2VbbF0ubm9kZXMubWFwKGM9PmMuc291cmNlU3Bhbi50b1N0cmluZygpKS5qb2luKCIiKSl9KSkpfSkpKTtsZXQgcz1lLnNldChNaSgiZ29vZy5nZXRNc2ciKS5jYWxsRm4obykpLnRvQ29uc3REZWNsKCk7cmV0dXJuIHMuYWRkTGVhZGluZ0NvbW1lbnQoZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIHQucHVzaChuLmRlc2NyaXB0aW9uP3t0YWdOYW1lOiJkZXNjIix0ZXh0Om4uZGVzY3JpcHRpb259Ont0YWdOYW1lOiJzdXBwcmVzcyIsdGV4dDoie21zZ0Rlc2NyaXB0aW9uc30ifSksbi5tZWFuaW5nJiZ0LnB1c2goe3RhZ05hbWU6Im1lYW5pbmciLHRleHQ6bi5tZWFuaW5nfSksZnVuY3Rpb24obj1bXSl7cmV0dXJuIG5ldyBiMShuKX0odCl9KHQpKSxbcyxuZXcgbHUobi5zZXQoZSkpXX12YXIgSmJlPW5ldyBjbGFzc3tmb3JtYXRQaCh0KXtyZXR1cm5geyQke0Z4KHQpfX1gfXZpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7cmV0dXJuIG9ZKHQpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7cmV0dXJuIHQuaXNWb2lkP3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpOmAke3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpfSR7dC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9JHt0aGlzLmZvcm1hdFBoKHQuY2xvc2VOYW1lKX1gfXZpc2l0UGxhY2Vob2xkZXIodCl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX19O2Z1bmN0aW9uIGV4ZShuLHQsZSl7bGV0e21lc3NhZ2VQYXJ0czppLHBsYWNlSG9sZGVyczpyfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucGxhY2Vob2xkZXJUb01lc3NhZ2U9dCx0aGlzLnBpZWNlcz1lfXZpc2l0VGV4dCh0KXtpZih0aGlzLnBpZWNlc1t0aGlzLnBpZWNlcy5sZW5ndGgtMV1pbnN0YW5jZW9mIGhmKXRoaXMucGllY2VzW3RoaXMucGllY2VzLmxlbmd0aC0xXS50ZXh0Kz10LnZhbHVlO2Vsc2V7bGV0IGU9bmV3IFRvKHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5kZXRhaWxzKTt0aGlzLnBpZWNlcy5wdXNoKG5ldyBoZih0LnZhbHVlLGUpKX19dmlzaXRDb250YWluZXIodCl7dC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpfXZpc2l0SWN1KHQpe3RoaXMucGllY2VzLnB1c2gobmV3IGhmKG9ZKHQpLHQuc291cmNlU3BhbikpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5zdGFydE5hbWUsdC5zdGFydFNvdXJjZVNwYW4/P3Quc291cmNlU3BhbikpLHQuaXNWb2lkfHwodC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpLHRoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQuY2xvc2VOYW1lLHQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSkpfXZpc2l0UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3BhbikpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3Bhbix0aGlzLnBsYWNlaG9sZGVyVG9NZXNzYWdlW3QubmFtZV0pKX1jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQsZSxpKXtyZXR1cm4gbmV3IGgwKEZ4KHQsITEpLGUsaSl9fShuLnBsYWNlaG9sZGVyVG9NZXNzYWdlLHQpO3JldHVybiBuLm5vZGVzLmZvckVhY2goaT0+aS52aXNpdChlKSksZnVuY3Rpb24obil7bGV0IHQ9W10sZT1bXTtuWzBdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bMF0uc291cmNlU3Bhbi5zdGFydCkpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO3IgaW5zdGFuY2VvZiBoZj90LnB1c2gocik6KGUucHVzaChyKSxuW2ktMV1pbnN0YW5jZW9mIGgwJiZ0LnB1c2goTE4obltpLTFdLnNvdXJjZVNwYW4uZW5kKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bbi5sZW5ndGgtMV0uc291cmNlU3Bhbi5lbmQpKSx7bWVzc2FnZVBhcnRzOnQscGxhY2VIb2xkZXJzOmV9fSh0KX0odCksbz1mdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVzWzBdO3JldHVybiBuZXcgVG8odC5zb3VyY2VTcGFuLmZ1bGxTdGFydCxuLm5vZGVzW24ubm9kZXMubGVuZ3RoLTFdLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmRldGFpbHMpfSh0KSxzPXIubWFwKGM9PmVbYy50ZXh0XSksYT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuZXcgWE4obix0LGUsaSxyKX0odCxpLHIscyxvKSxsPW4uc2V0KGEpO3JldHVybltuZXcgbHUobCldfWZ1bmN0aW9uIExOKG4pe3JldHVybiBuZXcgaGYoIiIsbmV3IFRvKG4sbikpfXZhciBzWT1uZXcgU2V0KFsiJGV2ZW50Il0pLEJOPW5ldyBNYXAoW1sid2luZG93IixLLnJlc29sdmVXaW5kb3ddLFsiZG9jdW1lbnQiLEsucmVzb2x2ZURvY3VtZW50XSxbImJvZHkiLEsucmVzb2x2ZUJvZHldXSksc3hlPVsiICIsIlxuIiwiXHIiLCJcdCJdO2Z1bmN0aW9uIHhwKG4sdCl7cmV0dXJuIHIzKE1pKE54KS5iaXR3aXNlQW5kKG50KG4pLG51bGwsITEpLHQpfWZ1bmN0aW9uIGFZKG4sdD1udWxsLGU9bnVsbCl7bGV0e3R5cGU6aSxuYW1lOnIsdGFyZ2V0Om8scGhhc2U6cyxoYW5kbGVyOmF9PW47aWYobyYmIUJOLmhhcyhvKSl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZ2xvYmFsIHRhcmdldCAnJHtvfScgZGVmaW5lZCBmb3IgJyR7cn0nIGV2ZW50LlxuICAgICAgICBTdXBwb3J0ZWQgbGlzdCBvZiBnbG9iYWwgdGFyZ2V0czogJHtBcnJheS5mcm9tKEJOLmtleXMoKSl9LmApO2xldCBsPSIkZXZlbnQiLGM9bmV3IFNldCx1PW51bGw9PT1lfHwwPT09ZS5iaW5kaW5nTGV2ZWw/TWkoYWMpOmUuZ2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKDApLGQ9JHZlKGUsdSxhLCJiIixuLmhhbmRsZXJTcGFuLGMsc1kpLHA9W10saD1lPy52YXJpYWJsZURlY2xhcmF0aW9ucygpLGY9ZT8ucmVzdG9yZVZpZXdTdGF0ZW1lbnQoKTtpZihoJiZwLnB1c2goLi4uaCkscC5wdXNoKC4uLmQpLGYpe3AudW5zaGlmdChmKTtsZXQgQT1wW3AubGVuZ3RoLTFdO0EgaW5zdGFuY2VvZiB1bz9wW3AubGVuZ3RoLTFdPW5ldyB1byh4ZihBLnZhbHVlLnNvdXJjZVNwYW4sSy5yZXNldFZpZXcsW0EudmFsdWVdKSk6cC5wdXNoKG5ldyBsdSh4ZihudWxsLEsucmVzZXRWaWV3LFtdKSkpfWxldCBtPTE9PT1pP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYEAke259LiR7dH1gfShyLHMpOnIsQz10JiZtMCh0KSxfPVtdO2MuaGFzKGwpJiZfLnB1c2gobmV3IFJzKGwsVjApKTtsZXQgeT1PcyhfLHAsaWEsbnVsbCxDKSxJPVtudChtKSx5XTtyZXR1cm4gbyYmSS5wdXNoKG50KCExKSx4bihCTi5nZXQobykpKSxJfXZhciBPeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHIsbyxzLGEsbCxjLHUsZD1mdW5jdGlvbigpe3JldHVybntwcmVwYXJlU3RhdGVtZW50czpbXSxjb25zdEV4cHJlc3Npb25zOltdLGkxOG5WYXJSZWZzQ2FjaGU6bmV3IE1hcH19KCkpe3RoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5sZXZlbD1pLHRoaXMuY29udGV4dE5hbWU9cix0aGlzLmkxOG5Db250ZXh0PW8sdGhpcy50ZW1wbGF0ZUluZGV4PXMsdGhpcy50ZW1wbGF0ZU5hbWU9YSx0aGlzLl9uYW1lc3BhY2U9bCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcz11LHRoaXMuX2NvbnN0YW50cz1kLHRoaXMuX2RhdGFJbmRleD0wLHRoaXMuX2JpbmRpbmdDb250ZXh0PTAsdGhpcy5fcHJlZml4Q29kZT1bXSx0aGlzLl9jcmVhdGlvbkNvZGVGbnM9W10sdGhpcy5fdXBkYXRlQ29kZUZucz1bXSx0aGlzLl9jdXJyZW50SW5kZXg9MCx0aGlzLl90ZW1wVmFyaWFibGVzPVtdLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zPVtdLHRoaXMuaTE4bj1udWxsLHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzPTAsdGhpcy5fYmluZGluZ1Nsb3RzPTAsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cz1bXSx0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9MCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj1udWxsLHRoaXMudmlzaXRSZWZlcmVuY2U9SGIsdGhpcy52aXNpdFZhcmlhYmxlPUhiLHRoaXMudmlzaXRUZXh0QXR0cmlidXRlPUhiLHRoaXMudmlzaXRCb3VuZEF0dHJpYnV0ZT1IYix0aGlzLnZpc2l0Qm91bmRFdmVudD1IYix0aGlzLl9iaW5kaW5nU2NvcGU9ZS5uZXN0ZWRTY29wZShpKSx0aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXg9Yy5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpKyJfIix0aGlzLl92YWx1ZUNvbnZlcnRlcj1uZXcgVzEodCwoKT0+dGhpcy5hbGxvY2F0ZURhdGFTbG90KCkscD0+dGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzKHApLChwLGgsZixtKT0+e3RoaXMuX2JpbmRpbmdTY29wZS5zZXQodGhpcy5sZXZlbCxoLG0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLEsucGlwZSxbbnQoZiksbnQocCldKX0pfWJ1aWxkVGVtcGxhdGVGdW5jdGlvbih0LGUsaT0wLHIpe3RoaXMuX25nQ29udGVudFNlbGVjdG9yc09mZnNldD1pLHRoaXMuX25hbWVzcGFjZSE9PUsubmFtZXNwYWNlSFRNTCYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKG51bGwsdGhpcy5fbmFtZXNwYWNlKSxlLmZvckVhY2goaD0+dGhpcy5yZWdpc3RlckNvbnRleHRWYXJpYWJsZXMoaCkpO2xldCBvPXRoaXMuaTE4bkNvbnRleHR8fHB4KHIpJiYhaTEocikmJiEoMT09PShuPXQpLmxlbmd0aCYmblswXWluc3RhbmNlb2YgRTAmJnRbMF0uaTE4bj09PXIpLHM9Vk4odCk7dmFyIG47aWYobyYmdGhpcy5pMThuU3RhcnQobnVsbCxyLHMpLGQ5KHRoaXMsdCksdGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHMrPXRoaXMuX2JpbmRpbmdTbG90cyx0aGlzLl92YWx1ZUNvbnZlcnRlci51cGRhdGVQaXBlU2xvdE9mZnNldHModGhpcy5fYmluZGluZ1Nsb3RzKSx0aGlzLl9uZXN0ZWRUZW1wbGF0ZUZucy5mb3JFYWNoKGg9PmgoKSksMD09PXRoaXMubGV2ZWwmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoKXtsZXQgaD1bXTtpZih0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD4xfHwiKiIhPT10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzWzBdKXtsZXQgZj10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLm1hcChtPT4iKiIhPT1tP3QzKG0pOm0pO2gucHVzaCh0aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUoZiksITApKX10aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24obnVsbCxLLnByb2plY3Rpb25EZWYsaCwhMCl9byYmdGhpcy5pMThuRW5kKG51bGwscyk7bGV0IGE9VDEodGhpcy5fY3JlYXRpb25Db2RlRm5zKSxsPVQxKHRoaXMuX3VwZGF0ZUNvZGVGbnMpLGM9dGhpcy5fYmluZGluZ1Njb3BlLnZpZXdTbmFwc2hvdFN0YXRlbWVudHMoKSx1PXRoaXMuX2JpbmRpbmdTY29wZS52YXJpYWJsZURlY2xhcmF0aW9ucygpLmNvbmNhdCh0aGlzLl90ZW1wVmFyaWFibGVzKSxkPWEubGVuZ3RoPjA/W3hwKDEsYy5jb25jYXQoYSkpXTpbXSxwPWwubGVuZ3RoPjA/W3hwKDIsdS5jb25jYXQobCkpXTpbXTtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbLi4udGhpcy5fcHJlZml4Q29kZSwuLi5kLC4uLnBdLGlhLG51bGwsdGhpcy50ZW1wbGF0ZU5hbWUpfWdldExvY2FsKHQpe3JldHVybiB0aGlzLl9iaW5kaW5nU2NvcGUuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXt0aGlzLl9iaW5kaW5nU2NvcGUubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLl9iaW5kaW5nU2NvcGUubWF5YmVSZXN0b3JlVmlldygpfWkxOG5UcmFuc2xhdGUodCxlPXt9LGkscil7bGV0IG89aXx8dGhpcy5pMThuR2VuZXJhdGVNYWluQmxvY2tWYXIoKSxhPWZ1bmN0aW9uKG4sdCxlLGk9e30scil7bGV0IG89W2d2ZSh0KSxyMyhpMyhNaShvcSkpLm5vdElkZW50aWNhbChudCgidW5kZWZpbmVkIix5cSkpLmFuZChNaShvcSkpLFpiZSh0LG4sZSxpKSxleGUodCxuLHMzKGksITEpKSldO3JldHVybiByJiZvLnB1c2gobmV3IGx1KHQuc2V0KHIodCkpKSksb30odCxvLHRoaXMuaTE4bkdlbmVyYXRlQ2xvc3VyZVZhcih0LmlkKSxlLHIpO3JldHVybiB0aGlzLl9jb25zdGFudHMucHJlcGFyZVN0YXRlbWVudHMucHVzaCguLi5hKSxvfXJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyh0KXtsZXQgZT10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCksaT10aGlzLmxldmVsLHI9TWkodC5uYW1lK2UpO3RoaXMuX2JpbmRpbmdTY29wZS5zZXQoaSx0Lm5hbWUsciwxLChvLHMpPT57bGV0IGE7cmV0dXJuIG8uYmluZGluZ0xldmVsPT09aT9vLmlzTGlzdGVuZXJTY29wZSgpJiZvLmhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKT8oYT1NaShBcSksby5ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCkpOmE9TWkoYWMpOmE9by5nZXRTaGFyZWRDb250ZXh0TmFtZShpKXx8UUwocyksW3Iuc2V0KGEucHJvcCh0LnZhbHVlfHwiJGltcGxpY2l0IikpLnRvQ29uc3REZWNsKCldfSl9aTE4bkFwcGVuZEJpbmRpbmdzKHQpe3QubGVuZ3RoPjAmJnQuZm9yRWFjaChlPT50aGlzLmkxOG4uYXBwZW5kQmluZGluZyhlKSl9aTE4bkJpbmRQcm9wcyh0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dFtpXTtpZihyIGluc3RhbmNlb2YgdzApZVtpXT1udChyLnZhbHVlKTtlbHNle2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMobyksbyBpbnN0YW5jZW9mIFpvKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmF9PW8se2lkOmwsYmluZGluZ3M6Y309dGhpcy5pMThuLHU9ZnVuY3Rpb24obix0PTAsZT0wKXtpZighbi5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9IiIscj1uLmxlbmd0aC0xO2ZvcihsZXQgbz0wO288cjtvKyspaSs9YCR7bltvXX0ke1ExKHQrbyxlKX1gO3JldHVybiBpKz1uW3JdLGl9KHMsYy5zaXplLGwpO3RoaXMuaTE4bkFwcGVuZEJpbmRpbmdzKGEpLGVbaV09bnQodSl9fX0pLGV9aTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCl7cmV0dXJuIE1pKHRoaXMuY29uc3RhbnRQb29sLnVuaXF1ZU5hbWUoImkxOG5fIikpfWkxOG5HZW5lcmF0ZUNsb3N1cmVWYXIodCl7bGV0IGUsaT10aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXgudG9VcHBlckNhc2UoKTtpZih0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyl7bGV0IHI9ZjkoIkVYVEVSTkFMXyIpLG89dGhpcy5jb25zdGFudFBvb2wudW5pcXVlTmFtZShpKTtlPWAke3J9JHttMCh0KX0kJCR7b31gfWVsc2V7bGV0IHI9ZjkoaSk7ZT10aGlzLmNvbnN0YW50UG9vbC51bmlxdWVOYW1lKHIpfXJldHVybiBNaShlKX1pMThuVXBkYXRlUmVmKHQpe2xldHtpY3VzOmUsbWV0YTppLGlzUm9vdDpyLGlzUmVzb2x2ZWQ6byxpc0VtaXR0ZWQ6c309dDtpZihyJiZvJiYhcyYmIWkxKGkpKXt0LmlzRW1pdHRlZD0hMDtsZXQgZCxhPXQuZ2V0U2VyaWFsaXplZFBsYWNlaG9sZGVycygpLGw9e30sYz1hLnNpemU/aDkoYSk6e307ZS5zaXplJiZlLmZvckVhY2goKHAsaCk9PntpZigxPT09cC5sZW5ndGgpY1toXT1wWzBdO2Vsc2V7bGV0IGY9UTEoYEkxOE5fRVhQXyR7aH1gKTtjW2hdPW50KGYpLGxbaF09Y3IocCl9fSksKEFycmF5LmZyb20oYS52YWx1ZXMoKSkuc29tZShwPT5wLmxlbmd0aD4xKXx8T2JqZWN0LmtleXMobCkubGVuZ3RoKSYmKGQ9cD0+e2xldCBoPVtwXTtyZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiZoLnB1c2goejEobCwhMCkpLHhmKG51bGwsSy5pMThuUG9zdHByb2Nlc3MsaCl9KSx0aGlzLmkxOG5UcmFuc2xhdGUoaSxjLHQucmVmLGQpfX1pMThuU3RhcnQodD1udWxsLGUsaSl7bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCk7dGhpcy5pMThuPXRoaXMuaTE4bkNvbnRleHQ/dGhpcy5pMThuQ29udGV4dC5mb3JrQ2hpbGRDb250ZXh0KHIsdGhpcy50ZW1wbGF0ZUluZGV4LGUpOm5ldyBSeChyLHRoaXMuaTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCksMCx0aGlzLnRlbXBsYXRlSW5kZXgsZSk7bGV0e2lkOm8scmVmOnN9PXRoaXMuaTE4bixhPVtudChyKSx0aGlzLmFkZFRvQ29uc3RzKHMpXTtvPjAmJmEucHVzaChudChvKSksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsaT9LLmkxOG46Sy5pMThuU3RhcnQsYSl9aTE4bkVuZCh0PW51bGwsZSl7aWYoIXRoaXMuaTE4bil0aHJvdyBuZXcgRXJyb3IoImkxOG5FbmQgaXMgZXhlY3V0ZWQgd2l0aCBubyBpMThuIGNvbnRleHQgcHJlc2VudCIpO3RoaXMuaTE4bkNvbnRleHQ/KHRoaXMuaTE4bkNvbnRleHQucmVjb25jaWxlQ2hpbGRDb250ZXh0KHRoaXMuaTE4biksdGhpcy5pMThuVXBkYXRlUmVmKHRoaXMuaTE4bkNvbnRleHQpKTp0aGlzLmkxOG5VcGRhdGVSZWYodGhpcy5pMThuKTtsZXR7aW5kZXg6aSxiaW5kaW5nczpyfT10aGlzLmkxOG47aWYoci5zaXplKXtmb3IobGV0IG8gb2Ygcil0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UodGhpcy5nZXRDb25zdENvdW50KCktMSx0LEsuaTE4bkV4cCwoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKG8pKTt0aGlzLnVwZGF0ZUluc3RydWN0aW9uKHQsSy5pMThuQXBwbHksW250KGkpXSl9ZXx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsSy5pMThuRW5kKSx0aGlzLmkxOG49bnVsbH1pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKHQsZSxpKXtsZXQgcj0hMSxvPVtdO2lmKGUuZm9yRWFjaChzPT57bGV0IGE9cy5pMThuLGw9cy52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhsKSxsIGluc3RhbmNlb2YgWm8pe2xldCB1PWg5KERxKGEpKTtvLnB1c2gobnQocy5uYW1lKSx0aGlzLmkxOG5UcmFuc2xhdGUoYSx1KSksbC5leHByZXNzaW9ucy5mb3JFYWNoKGQ9PntyPSEwLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGksSy5pMThuRXhwLCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcoZCkpfSl9fSksby5sZW5ndGg+MCl7bGV0IHM9bnQodGhpcy5hbGxvY2F0ZURhdGFTbG90KCkpLGE9dGhpcy5hZGRUb0NvbnN0cyhjcihvKSk7dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGksSy5pMThuQXR0cmlidXRlcyxbcyxhXSksciYmdGhpcy51cGRhdGVJbnN0cnVjdGlvbihpLEsuaTE4bkFwcGx5LFtzXSl9fWdldE5hbWVzcGFjZUluc3RydWN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIm1hdGgiOnJldHVybiBLLm5hbWVzcGFjZU1hdGhNTDtjYXNlInN2ZyI6cmV0dXJuIEsubmFtZXNwYWNlU1ZHO2RlZmF1bHQ6cmV0dXJuIEsubmFtZXNwYWNlSFRNTH19YWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24odCxlKXt0aGlzLl9uYW1lc3BhY2U9dCx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZS5zdGFydFNvdXJjZVNwYW4sdCl9aW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkscixvLHMpe3RoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHIuc291cmNlU3Bhbix0LCgpPT5bbnQoaSksLi4udGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhvKSwuLi5zXSl9dmlzaXRDb250ZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9dGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0K3RoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoLHI9W250KGUpXTt0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2godC5zZWxlY3Rvcik7bGV0IG89dC5hdHRyaWJ1dGVzLmZpbHRlcihhPT4ic2VsZWN0IiE9PWEubmFtZS50b0xvd2VyQ2FzZSgpKSxzPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLG8sW10sW10pO3MubGVuZ3RoPjA/ci5wdXNoKG50KGkpLGNyKHMpKTowIT09aSYmci5wdXNoKG50KGkpKSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsucHJvamVjdGlvbixyKSx0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRQcm9qZWN0aW9uKHQuaTE4bixlKX12aXNpdEVsZW1lbnQodCl7bGV0IGU9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksaT1uZXcgTjEobnVsbCkscj0hMSxvPXB4KHQuaTE4bikmJiFpMSh0LmkxOG4pLHM9W10sW2EsbF09Y2QodC5uYW1lKSxjPVVOKHQubmFtZSk7Zm9yKGxldCBmZSBvZiB0LmF0dHJpYnV0ZXMpe2xldHtuYW1lOnZlLHZhbHVlOlR9PWZlOyJuZ05vbkJpbmRhYmxlIj09PXZlP3I9ITA6InN0eWxlIj09PXZlP2kucmVnaXN0ZXJTdHlsZUF0dHIoVCk6ImNsYXNzIj09PXZlP2kucmVnaXN0ZXJDbGFzc0F0dHIoVCk6cy5wdXNoKGZlKX1sZXQgdT1bbnQoZSldO2N8fHUucHVzaChudChsKSk7bGV0IGQ9W10scD1bXTt0LmlucHV0cy5mb3JFYWNoKGZlPT57aS5yZWdpc3RlckJvdW5kSW5wdXQoZmUpfHwoMD09PWZlLnR5cGUmJmZlLmkxOG4/cC5wdXNoKGZlKTpkLnB1c2goZmUpKX0pO2xldCBoPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLHMsZCx0Lm91dHB1dHMsaSxbXSxwKTt1LnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGgpKTtsZXQgZj10aGlzLnByZXBhcmVSZWZzQXJyYXkodC5yZWZlcmVuY2VzKTt1LnB1c2godGhpcy5hZGRUb0NvbnN0cyhmKSk7bGV0IG09dGhpcy5fbmFtZXNwYWNlLEM9dGhpcy5nZXROYW1lc3BhY2VJbnN0cnVjdGlvbihhKTtDIT09bSYmdGhpcy5hZGROYW1lc3BhY2VJbnN0cnVjdGlvbihDLHQpLHRoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZEVsZW1lbnQodC5pMThuLGUpO2xldCBfPSFvJiZ0aGlzLmkxOG4/IVZOKHQuY2hpbGRyZW4pOnQuY2hpbGRyZW4ubGVuZ3RoPjAseT0haS5oYXNCaW5kaW5nc1dpdGhQaXBlcyYmMD09PXQub3V0cHV0cy5sZW5ndGgmJjA9PT1wLmxlbmd0aCYmIV8sST0heSYmVk4odC5jaGlsZHJlbik7aWYoeSl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLGM/Sy5lbGVtZW50Q29udGFpbmVyOksuZWxlbWVudCxTTih1KSk7ZWxzZXtpZih0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sYz9LLmVsZW1lbnRDb250YWluZXJTdGFydDpLLmVsZW1lbnRTdGFydCxTTih1KSksciYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc3RhcnRTb3VyY2VTcGFuLEsuZGlzYWJsZUJpbmRpbmdzKSxwLmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oZSxwLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLHQub3V0cHV0cy5sZW5ndGg+MClmb3IobGV0IGZlIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKHQubmFtZSxmZSxlKSk7byYmdGhpcy5pMThuU3RhcnQodC5zdGFydFNvdXJjZVNwYW4sdC5pMThuLEkpfWxldCBBPWkuYnVpbGRVcGRhdGVMZXZlbEluc3RydWN0aW9ucyh0aGlzLl92YWx1ZUNvbnZlcnRlciksTz1BLmxlbmd0aC0xO2ZvcihsZXQgZmU9MDtmZTw9TztmZSsrKXRoaXMuX2JpbmRpbmdTbG90cys9dGhpcy5wcm9jZXNzU3R5bGluZ1VwZGF0ZUluc3RydWN0aW9uKGUsQVtmZV0pO2xldCBlZT1udCh2b2lkIDApLFg9W10seGU9W107ZC5mb3JFYWNoKGZlPT57bGV0IHZlPWZlLnR5cGU7aWYoND09PXZlKXtsZXQgVD1mZS52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlciksbmU9IShUIGluc3RhbmNlb2YgSXMmJiFULnZhbHVlKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLFgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9Pm5lP3RoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKTplZSxNcShmZS5uYW1lKSl9KX1lbHNle2lmKGZlLmkxOG4pcmV0dXJuO2xldCBUPWZlLnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTtpZih2b2lkIDAhPT1UKXtsZXQgbmU9W10sW2xlLGhlXT1jZChmZS5uYW1lKSxKPWNZKGZlLnNlY3VyaXR5Q29udGV4dCwxPT09dmUpO2lmKEomJm5lLnB1c2goSiksbGUpe2xldCBhZT1udChsZSk7Sj9uZS5wdXNoKGFlKTpuZS5wdXNoKG50KG51bGwpLGFlKX1pZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLDA9PT12ZSlUIGluc3RhbmNlb2YgWm8/dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShUKSxlLGhlLGZlLFQsbmUpOlgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSxoZSxuZSl9KTtlbHNlIGlmKDE9PT12ZSlpZihUIGluc3RhbmNlb2YgWm8mJkFmKFQpPjEpdGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihmdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmF0dHJpYnV0ZUludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuYXR0cmlidXRlSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVZ9fShUKSxlLGhlLGZlLFQsbmUpO2Vsc2V7bGV0IGFlPVQgaW5zdGFuY2VvZiBabz9ULmV4cHJlc3Npb25zWzBdOlQ7eGUucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhhZSksaGUsbmUpfSl9ZWxzZSB0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSxmZS5zb3VyY2VTcGFuLEsuY2xhc3NQcm9wLCgpPT5bbnQoZSksbnQoaGUpLHRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSwuLi5uZV0pfX19KTtmb3IobGV0IGZlIG9mIFgpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLnByb3BlcnR5LGZlLnBhcmFtc09yRm4pO2ZvcihsZXQgZmUgb2YgeGUpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLmF0dHJpYnV0ZSxmZS5wYXJhbXNPckZuKTtpZihkOSh0aGlzLHQuY2hpbGRyZW4pLCFvJiZ0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlLCEwKSwheSl7bGV0IGZlPXQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuO28mJnRoaXMuaTE4bkVuZChmZSxJKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUsSy5lbmFibGVCaW5kaW5ncyksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGZlLGM/Sy5lbGVtZW50Q29udGFpbmVyRW5kOksuZWxlbWVudEVuZCl9fXZpc2l0VGVtcGxhdGUodCl7bGV0IGU9Im5nLXRlbXBsYXRlIixpPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZFRlbXBsYXRlKHQuaTE4bixpKTtsZXQgcj10LnRhZ05hbWU/Y2QodC50YWdOYW1lKVsxXTp0LnRhZ05hbWUsbz1gJHt0aGlzLmNvbnRleHROYW1lfSR7dC50YWdOYW1lPyJfIittMCh0LnRhZ05hbWUpOiIifV8ke2l9YCxzPWAke299X1RlbXBsYXRlYCxhPVtudChpKSxNaShzKSxudChyKV0sbD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKGUsdC5hdHRyaWJ1dGVzLHQuaW5wdXRzLHQub3V0cHV0cyx2b2lkIDAsdC50ZW1wbGF0ZUF0dHJzKTtpZihhLnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGwpKSx0LnJlZmVyZW5jZXMmJnQucmVmZXJlbmNlcy5sZW5ndGgpe2xldCB1PXRoaXMucHJlcGFyZVJlZnNBcnJheSh0LnJlZmVyZW5jZXMpO2EucHVzaCh0aGlzLmFkZFRvQ29uc3RzKHUpKSxhLnB1c2goeG4oSy50ZW1wbGF0ZVJlZkV4dHJhY3RvcikpfWxldCBjPW5ldyBPeCh0aGlzLmNvbnN0YW50UG9vbCx0aGlzLl9iaW5kaW5nU2NvcGUsdGhpcy5sZXZlbCsxLG8sdGhpcy5pMThuLGkscyx0aGlzLl9uYW1lc3BhY2UsdGhpcy5maWxlQmFzZWRJMThuU3VmZml4LHRoaXMuaTE4blVzZUV4dGVybmFsSWRzLHRoaXMuX2NvbnN0YW50cyk7aWYodGhpcy5fbmVzdGVkVGVtcGxhdGVGbnMucHVzaCgoKT0+e2xldCB1PWMuYnVpbGRUZW1wbGF0ZUZ1bmN0aW9uKHQuY2hpbGRyZW4sdC52YXJpYWJsZXMsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgrdGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0LHQuaTE4bik7dGhpcy5jb25zdGFudFBvb2wuc3RhdGVtZW50cy5wdXNoKHUudG9EZWNsU3RtdChzKSksYy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMucHVzaCguLi5jLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzKX0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih0LnNvdXJjZVNwYW4sSy50ZW1wbGF0ZUNyZWF0ZSwoKT0+KGEuc3BsaWNlKDIsMCxudChjLmdldENvbnN0Q291bnQoKSksbnQoYy5nZXRWYXJDb3VudCgpKSksU04oYSkpKSx0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLHQudGVtcGxhdGVBdHRycykscj09PWUpe2xldFt1LGRdPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXTtmb3IobGV0IHIgb2YgbikodChyKT9lOmkpLnB1c2gocik7cmV0dXJuW2UsaV19KHQuaW5wdXRzLHB2ZSk7dS5sZW5ndGg+MCYmdGhpcy5pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKGksdSx0LnN0YXJ0U291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSxkLmxlbmd0aD4wJiZ0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLGQpO2ZvcihsZXQgcCBvZiB0Lm91dHB1dHMpdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHAuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKCJuZ190ZW1wbGF0ZSIscCxpKSl9fXZpc2l0Qm91bmRUZXh0KHQpe2lmKHRoaXMuaTE4bil7bGV0IHI9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7cmV0dXJuIHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMociksdm9pZChyIGluc3RhbmNlb2YgWm8mJih0aGlzLmkxOG4uYXBwZW5kQm91bmRUZXh0KHQuaTE4biksdGhpcy5pMThuQXBwZW5kQmluZGluZ3Moci5leHByZXNzaW9ucykpKX1sZXQgZT10aGlzLmFsbG9jYXRlRGF0YVNsb3QoKTt0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsudGV4dCxbbnQoZSldKTtsZXQgaT10LnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKGkpLGkgaW5zdGFuY2VvZiBabz90aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSx0LnNvdXJjZVNwYW4sZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlO2Nhc2UgMzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsudGV4dEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZVZ9fShpKSwoKT0+dGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhpKSk6aDEoIlRleHQgbm9kZXMgc2hvdWxkIGJlIGludGVycG9sYXRlZCBhbmQgbmV2ZXIgYm91bmQgZGlyZWN0bHkuIil9dmlzaXRUZXh0KHQpe3RoaXMuaTE4bnx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc291cmNlU3BhbixLLnRleHQsW250KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxudCh0LnZhbHVlKV0pfXZpc2l0SWN1KHQpe2xldCBlPSExO3RoaXMuaTE4bnx8KGU9ITAsdGhpcy5pMThuU3RhcnQobnVsbCx0LmkxOG4sITApKTtsZXQgaT10aGlzLmkxOG4scj10aGlzLmkxOG5CaW5kUHJvcHModC52YXJzKSxvPXRoaXMuaTE4bkJpbmRQcm9wcyh0LnBsYWNlaG9sZGVycykscz10LmkxOG4sYT1sPT57bGV0IHU9czMoey4uLnIsLi4ub30sITEpO3JldHVybiB4ZihudWxsLEsuaTE4blBvc3Rwcm9jZXNzLFtsLHoxKHUsITApXSl9O2lmKGkxKGkubWV0YSkpdGhpcy5pMThuVHJhbnNsYXRlKHMse30saS5yZWYsYSk7ZWxzZXtsZXQgbD10aGlzLmkxOG5UcmFuc2xhdGUocyx7fSx2b2lkIDAsYSk7aS5hcHBlbmRJY3UoVHEocykubmFtZSxsKX1yZXR1cm4gZSYmdGhpcy5pMThuRW5kKG51bGwsITApLG51bGx9YWxsb2NhdGVEYXRhU2xvdCgpe3JldHVybiB0aGlzLl9kYXRhSW5kZXgrK31nZXRDb25zdENvdW50KCl7cmV0dXJuIHRoaXMuX2RhdGFJbmRleH1nZXRWYXJDb3VudCgpe3JldHVybiB0aGlzLl9wdXJlRnVuY3Rpb25TbG90c31nZXRDb25zdHMoKXtyZXR1cm4gdGhpcy5fY29uc3RhbnRzfWdldE5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiB0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD90aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUodGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cyksITApOm51bGx9YmluZGluZ0NvbnRleHQoKXtyZXR1cm4iIit0aGlzLl9iaW5kaW5nQ29udGV4dCsrfXRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyh0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKXtpZighKHIgaW5zdGFuY2VvZiBNMCkpY29udGludWU7bGV0IG89ci52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodm9pZCAwIT09bylpZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKG8pLG8gaW5zdGFuY2VvZiBabyl7bGV0IHM9W107dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShvKSx0LHIubmFtZSxyLG8scyl9ZWxzZSBpLnB1c2goe3NwYW46ci5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSxyLm5hbWUpfSl9Zm9yKGxldCByIG9mIGkpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsci5zcGFuLEsucHJvcGVydHksci5wYXJhbXNPckZuKX1pbnN0cnVjdGlvbkZuKHQsZSxpLHIsbz0hMSl7dFtvPyJ1bnNoaWZ0IjoicHVzaCJdKHtzcGFuOmUscmVmZXJlbmNlOmkscGFyYW1zT3JGbjpyfSl9cHJvY2Vzc1N0eWxpbmdVcGRhdGVJbnN0cnVjdGlvbih0LGUpe2xldCBpPTA7aWYoZSlmb3IobGV0IHIgb2YgZS5jYWxscylpKz1yLmFsbG9jYXRlQmluZGluZ1Nsb3RzLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LHIuc291cmNlU3BhbixlLnJlZmVyZW5jZSwoKT0+ci5wYXJhbXMobz0+ci5zdXBwb3J0c0ludGVycG9sYXRpb24mJm8gaW5zdGFuY2VvZiBabz90aGlzLmdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKG8pOnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSkpO3JldHVybiBpfWNyZWF0aW9uSW5zdHJ1Y3Rpb24odCxlLGkscil7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX2NyZWF0aW9uQ29kZUZucyx0LGUsaXx8W10scil9dXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGUsaSxyKXt0aGlzLmFkZEFkdmFuY2VJbnN0cnVjdGlvbklmTmVjZXNzYXJ5KHQsZSksdGhpcy51cGRhdGVJbnN0cnVjdGlvbihlLGkscil9dXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkpe3RoaXMuaW5zdHJ1Y3Rpb25Gbih0aGlzLl91cGRhdGVDb2RlRm5zLHQsZSxpfHxbXSl9YWRkQWR2YW5jZUluc3RydWN0aW9uSWZOZWNlc3NhcnkodCxlKXtpZih0IT09dGhpcy5fY3VycmVudEluZGV4KXtsZXQgaT10LXRoaXMuX2N1cnJlbnRJbmRleDtpZihpPDEpdGhyb3cgbmV3IEVycm9yKCJhZHZhbmNlIGluc3RydWN0aW9uIGNhbiBvbmx5IGdvIGZvcndhcmRzIik7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX3VwZGF0ZUNvZGVGbnMsZSxLLmFkdmFuY2UsW250KGkpXSksdGhpcy5fY3VycmVudEluZGV4PXR9fWFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHModCl7bGV0IGU9dGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHM7cmV0dXJuIHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzKz10LGV9YWxsb2NhdGVCaW5kaW5nU2xvdHModCl7dGhpcy5fYmluZGluZ1Nsb3RzKz10IGluc3RhbmNlb2YgWm8/dC5leHByZXNzaW9ucy5sZW5ndGg6MX1nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpe3JldHVybiB0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj90aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcjp0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj0wPT09dGhpcy5sZXZlbD9NaShhYyk6dGhpcy5fYmluZGluZ1Njb3BlLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKX1jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHQpe2xldCBlPXFxKHRoaXMsdGhpcy5nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpLHQsdGhpcy5iaW5kaW5nQ29udGV4dCgpKSxpPWUuY3VyclZhbEV4cHI7cmV0dXJuIHRoaXMuX3RlbXBWYXJpYWJsZXMucHVzaCguLi5lLnN0bXRzKSxpfWdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKHQpe2xldHthcmdzOmUsc3RtdHM6aX09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bmV3IFR4KG4sdCxpLCEwKSxvPXIudmlzaXRJbnRlcnBvbGF0aW9uKGUsQmkuRXhwcmVzc2lvbik7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLHtzdG10czpZcShyLGkpLGFyZ3M6by5hcmdzfX0odGhpcyx0aGlzLmdldEltcGxpY2l0UmVjZWl2ZXJFeHByKCksdCx0aGlzLmJpbmRpbmdDb250ZXh0KCkpO3JldHVybiB0aGlzLl90ZW1wVmFyaWFibGVzLnB1c2goLi4uaSksZX1nZXRBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LGUsaSxyLG8scz1bXSxhPVtdKXtsZXQgdSxsPW5ldyBTZXQsYz1bXTtmb3IobGV0IHAgb2YgZSlpZigibmdQcm9qZWN0QXMiPT09cC5uYW1lJiYodT1wKSxwLmkxOG4pe2xldCBmLHtpMThuVmFyUmVmc0NhY2hlOmh9PXRoaXMuX2NvbnN0YW50cztoLmhhcyhwLmkxOG4pP2Y9aC5nZXQocC5pMThuKTooZj10aGlzLmkxOG5UcmFuc2xhdGUocC5pMThuKSxoLnNldChwLmkxOG4sZikpLGMucHVzaChudChwLm5hbWUpLGYpfWVsc2UgYy5wdXNoKC4uLmlxKHAubmFtZSksZ3hlKHQscCkpO2Z1bmN0aW9uIGQocCxoKXsic3RyaW5nIj09dHlwZW9mIHA/bC5oYXMocCl8fChjLnB1c2goLi4uaXEocCkpLHZvaWQgMCE9PWgmJmMucHVzaChoKSxsLmFkZChwKSk6Yy5wdXNoKG50KHApKX1pZih1JiZjLnB1c2goLi4uZnVuY3Rpb24obil7bGV0IHQ9dDMobi52YWx1ZSlbMF07cmV0dXJuW250KDUpLHJ1KHQpXX0odSkpLG8mJm8ucG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKGMpLGkubGVuZ3RofHxyLmxlbmd0aCl7bGV0IHA9Yy5sZW5ndGg7Zm9yKGxldCBoPTA7aDxpLmxlbmd0aDtoKyspe2xldCBmPWlbaF07NCE9PWYudHlwZSYmMSE9PWYudHlwZSYmZChmLm5hbWUpfWZvcihsZXQgaD0wO2g8ci5sZW5ndGg7aCsrKXtsZXQgZj1yW2hdOzEhPT1mLnR5cGUmJmQoZi5uYW1lKX1jLmxlbmd0aCE9PXAmJmMuc3BsaWNlKHAsMCxudCgzKSl9cmV0dXJuIHMubGVuZ3RoJiYoYy5wdXNoKG50KDQpKSxzLmZvckVhY2gocD0+ZChwLm5hbWUpKSksYS5sZW5ndGgmJihjLnB1c2gobnQoNikpLGEuZm9yRWFjaChwPT5kKHAubmFtZSkpKSxjfWFkZFRvQ29uc3RzKHQpe2lmKHhxKHQpKXJldHVybiBjMTtsZXQgZT10aGlzLl9jb25zdGFudHMuY29uc3RFeHByZXNzaW9ucztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlzRXF1aXZhbGVudCh0KSlyZXR1cm4gbnQoaSk7cmV0dXJuIG50KGUucHVzaCh0KS0xKX1hZGRBdHRyc1RvQ29uc3RzKHQpe3JldHVybiB0Lmxlbmd0aD4wP3RoaXMuYWRkVG9Db25zdHMoY3IodCkpOmMxfXByZXBhcmVSZWZzQXJyYXkodCl7cmV0dXJuIHQmJjAhPT10Lmxlbmd0aD9ydSh1WSh0Lm1hcChpPT57bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksbz10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCkscz10aGlzLmxldmVsLGE9TWkobyk7cmV0dXJuIHRoaXMuX2JpbmRpbmdTY29wZS5zZXQocyxpLm5hbWUsYSwwLChsLGMpPT57bGV0IHU9Yz4wP1tRTChjKS50b1N0bXQoKV06W10sZD1hLnNldCh4bihLLnJlZmVyZW5jZSkuY2FsbEZuKFtudChyKV0pKTtyZXR1cm4gdS5jb25jYXQoZC50b0NvbnN0RGVjbCgpKX0sITApLFtpLm5hbWUsaS52YWx1ZV19KSkpOmMxfXByZXBhcmVMaXN0ZW5lclBhcmFtZXRlcih0LGUsaSl7cmV0dXJuKCk9PntsZXQgcj1lLm5hbWUsbz0xPT09ZS50eXBlP1NxKHIsZS5waGFzZSk6bTAocikscz1gJHt0aGlzLnRlbXBsYXRlTmFtZX1fJHt0fV8ke299XyR7aX1fbGlzdGVuZXJgLGE9dGhpcy5fYmluZGluZ1Njb3BlLm5lc3RlZFNjb3BlKHRoaXMuX2JpbmRpbmdTY29wZS5iaW5kaW5nTGV2ZWwsc1kpO3JldHVybiBhWShlLHMsYSl9fX0sVzE9Y2xhc3MgZXh0ZW5kcyB2THtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5hbGxvY2F0ZVNsb3Q9ZSx0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHM9aSx0aGlzLmRlZmluZVBpcGU9cix0aGlzLl9waXBlQmluZEV4cHJzPVtdfXZpc2l0UGlwZSh0LGUpe2xldCBpPXRoaXMuYWxsb2NhdGVTbG90KCkscj1gUElQRToke2l9YCxvPXRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cygyK3QuYXJncy5sZW5ndGgpLHM9bmV3IG91KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixuZXcgRWYodC5zcGFuLHQuc291cmNlU3Bhbikscikse2lkZW50aWZpZXI6YSxpc1Zhckxlbmd0aDpsfT1mdW5jdGlvbihuKXtsZXQgdD1seGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucGlwZUJpbmRWLGlzVmFyTGVuZ3RoOiF0fX0odC5hcmdzKTt0aGlzLmRlZmluZVBpcGUodC5uYW1lLHIsaSx4bihhKSk7bGV0IGM9W3QuZXhwLC4uLnQuYXJnc10sdT10aGlzLnZpc2l0QWxsKGw/W25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGMpXTpjKSxkPW5ldyBicCh0LnNwYW4sdC5zb3VyY2VTcGFuLHMsW25ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpLG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLG8pLC4uLnVdLG51bGwpO3JldHVybiB0aGlzLl9waXBlQmluZEV4cHJzLnB1c2goZCksZH11cGRhdGVQaXBlU2xvdE9mZnNldHModCl7dGhpcy5fcGlwZUJpbmRFeHBycy5mb3JFYWNoKGU9PntlLmFyZ3NbMV0udmFsdWUrPXR9KX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpLGk9PntsZXQgcj1jcihpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9dmlzaXRMaXRlcmFsTWFwKHQsZSl7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpLGk9PntsZXQgcj1tbChpLm1hcCgobyxzKT0+KHtrZXk6dC5rZXlzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmtleXNbc10ucXVvdGVkfSkpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9fSxseGU9W0sucGlwZUJpbmQxLEsucGlwZUJpbmQyLEsucGlwZUJpbmQzLEsucGlwZUJpbmQ0XSx1eGU9W0sucHVyZUZ1bmN0aW9uMCxLLnB1cmVGdW5jdGlvbjEsSy5wdXJlRnVuY3Rpb24yLEsucHVyZUZ1bmN0aW9uMyxLLnB1cmVGdW5jdGlvbjQsSy5wdXJlRnVuY3Rpb241LEsucHVyZUZ1bmN0aW9uNixLLnB1cmVGdW5jdGlvbjcsSy5wdXJlRnVuY3Rpb244XTtmdW5jdGlvbiBRTChuKXtyZXR1cm4geG4oSy5uZXh0Q29udGV4dCkuY2FsbEZuKG4+MT9bbnQobildOltdKX1mdW5jdGlvbiBucShuLHQsZSl7bGV0e2xpdGVyYWxGYWN0b3J5OmksbGl0ZXJhbEZhY3RvcnlBcmd1bWVudHM6cn09bi5nZXRMaXRlcmFsRmFjdG9yeSh0KSxvPWUoMStyLmxlbmd0aCkse2lkZW50aWZpZXI6cyxpc1Zhckxlbmd0aDphfT1mdW5jdGlvbihuKXtsZXQgdD11eGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucHVyZUZ1bmN0aW9uVixpc1Zhckxlbmd0aDohdH19KHIpLGw9W250KG8pLGldO3JldHVybiBhP2wucHVzaChjcihyKSk6bC5wdXNoKC4uLnIpLHhuKHMpLmNhbGxGbihsKX1mdW5jdGlvbiBpcShuKXtsZXRbdCxlXT1jZChuKSxpPW50KGUpO3JldHVybiB0P1tudCgwKSxudCh0KSxpXTpbaV19dmFyIG8wPSIkJHNoYXJlZF9jdHgkJCIsQjA9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9bnVsbCxpKXtpZih0aGlzLmJpbmRpbmdMZXZlbD10LHRoaXMucGFyZW50PWUsdGhpcy5nbG9iYWxzPWksdGhpcy5tYXA9bmV3IE1hcCx0aGlzLnJlZmVyZW5jZU5hbWVJbmRleD0wLHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZT1udWxsLHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ9ITEsdm9pZCAwIT09aSlmb3IobGV0IHIgb2YgaSl0aGlzLnNldCgwLHIsTWkocikpfXN0YXRpYyBjcmVhdGVSb290U2NvcGUoKXtyZXR1cm4gbmV3IEIwfWdldCh0KXtsZXQgZT10aGlzO2Zvcig7ZTspe2xldCBpPWUubWFwLmdldCh0KTtpZihudWxsIT1pKXJldHVybiBlIT09dGhpcyYmKGk9e3JldHJpZXZhbExldmVsOmkucmV0cmlldmFsTGV2ZWwsbGhzOmkubGhzLGRlY2xhcmVMb2NhbENhbGxiYWNrOmkuZGVjbGFyZUxvY2FsQ2FsbGJhY2ssZGVjbGFyZTohMSxwcmlvcml0eTppLnByaW9yaXR5fSx0aGlzLm1hcC5zZXQodCxpKSx0aGlzLm1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKGkpLHRoaXMubWF5YmVSZXN0b3JlVmlldygpKSxpLmRlY2xhcmVMb2NhbENhbGxiYWNrJiYhaS5kZWNsYXJlJiYoaS5kZWNsYXJlPSEwKSxpLmxocztlPWUucGFyZW50fXJldHVybiAwPT09dGhpcy5iaW5kaW5nTGV2ZWw/bnVsbDp0aGlzLmdldENvbXBvbmVudFByb3BlcnR5KHQpfXNldCh0LGUsaSxyPTAsbyxzKXtpZih0aGlzLm1hcC5oYXMoZSkpe2lmKHMpcmV0dXJuIHRoaXM7aDEoYFRoZSBuYW1lICR7ZX0gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHNjb3BlIHRvIGJlICR7dGhpcy5tYXAuZ2V0KGUpfWApfXJldHVybiB0aGlzLm1hcC5zZXQoZSx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6aSxkZWNsYXJlOiExLGRlY2xhcmVMb2NhbENhbGxiYWNrOm8scHJpb3JpdHk6cn0pLHRoaXN9Z2V0TG9jYWwodCl7cmV0dXJuIHRoaXMuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXswIT09dGhpcy5iaW5kaW5nTGV2ZWwmJih0aGlzLm1hcC5nZXQobzArMCkuZGVjbGFyZT0hMCl9bmVzdGVkU2NvcGUodCxlKXtsZXQgaT1uZXcgQjAodCx0aGlzLGUpO3JldHVybiB0PjAmJmkuZ2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKDApLGl9Z2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2xldCBlPW8wK3Q7cmV0dXJuIHRoaXMubWFwLmhhcyhlKXx8dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodCksdGhpcy5tYXAuZ2V0KGUpLmxoc31nZXRTaGFyZWRDb250ZXh0TmFtZSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArdCk7cmV0dXJuIGUmJmUuZGVjbGFyZT9lLmxoczpudWxsfW1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2lmKDE9PT10LnByaW9yaXR5JiZ0LnJldHJpZXZhbExldmVsPHRoaXMuYmluZGluZ0xldmVsKXtsZXQgZT10aGlzLm1hcC5nZXQobzArdC5yZXRyaWV2YWxMZXZlbCk7ZT9lLmRlY2xhcmU9ITA6dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodC5yZXRyaWV2YWxMZXZlbCl9fWdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0KXtsZXQgZT1NaShhYyt0aGlzLmZyZXNoUmVmZXJlbmNlTmFtZSgpKTt0aGlzLm1hcC5zZXQobzArdCx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6ZSxkZWNsYXJlTG9jYWxDYWxsYmFjazooaSxyKT0+W2Uuc2V0KFFMKHIpKS50b0NvbnN0RGVjbCgpXSxkZWNsYXJlOiExLHByaW9yaXR5OjJ9KX1nZXRDb21wb25lbnRQcm9wZXJ0eSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArMCk7cmV0dXJuIGUuZGVjbGFyZT0hMCx0aGlzLm1heWJlUmVzdG9yZVZpZXcoKSxlLmxocy5wcm9wKHQpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLmlzTGlzdGVuZXJTY29wZSgpJiYodGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZXx8KHRoaXMucGFyZW50LnJlc3RvcmVWaWV3VmFyaWFibGU9TWkodGhpcy5wYXJlbnQuZnJlc2hSZWZlcmVuY2VOYW1lKCkpKSx0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU9dGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZSl9cmVzdG9yZVZpZXdTdGF0ZW1lbnQoKXtpZih0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGUpe2xldCB0PXhmKG51bGwsSy5yZXN0b3JlVmlldyxbdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlXSk7cmV0dXJuIHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ/TWkoQXEpLnNldCh0KS50b0NvbnN0RGVjbCgpOnQudG9TdG10KCl9cmV0dXJuIG51bGx9dmlld1NuYXBzaG90U3RhdGVtZW50cygpe3JldHVybiB0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU/W3RoaXMucmVzdG9yZVZpZXdWYXJpYWJsZS5zZXQoeGYobnVsbCxLLmdldEN1cnJlbnRWaWV3LFtdKSkudG9Db25zdERlY2woKV06W119aXNMaXN0ZW5lclNjb3BlKCl7cmV0dXJuIHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5iaW5kaW5nTGV2ZWw9PT10aGlzLmJpbmRpbmdMZXZlbH12YXJpYWJsZURlY2xhcmF0aW9ucygpe2xldCB0PTA7cmV0dXJuIEFycmF5LmZyb20odGhpcy5tYXAudmFsdWVzKCkpLmZpbHRlcihlPT5lLmRlY2xhcmUpLnNvcnQoKGUsaSk9PmkucmV0cmlldmFsTGV2ZWwtZS5yZXRyaWV2YWxMZXZlbHx8aS5wcmlvcml0eS1lLnByaW9yaXR5KS5yZWR1Y2UoKGUsaSk9PntsZXQgcj10aGlzLmJpbmRpbmdMZXZlbC1pLnJldHJpZXZhbExldmVsLG89aS5kZWNsYXJlTG9jYWxDYWxsYmFjayh0aGlzLHItdCk7cmV0dXJuIHQ9cixlLmNvbmNhdChvKX0sW10pfWZyZXNoUmVmZXJlbmNlTmFtZSgpe2xldCB0PXRoaXM7Zm9yKDt0LnBhcmVudDspdD10LnBhcmVudDtyZXR1cm4iX3IiK3QucmVmZXJlbmNlTmFtZUluZGV4Kyt9aGFzUmVzdG9yZVZpZXdWYXJpYWJsZSgpe3JldHVybiEhdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlfW5vdGlmeVJlc3RvcmVkVmlld0NvbnRleHRVc2UoKXt0aGlzLnVzZXNSZXN0b3JlZFZpZXdDb250ZXh0PSEwfX07ZnVuY3Rpb24gcnEobil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTtjYXNlIDM6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGVWfX1mdW5jdGlvbiBteGUobix0LGU9e30pe2xldHtpbnRlcnBvbGF0aW9uQ29uZmlnOmkscHJlc2VydmVXaGl0ZXNwYWNlczpyLGVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ6b309ZSxzPXExKGkpLGw9KG5ldyBOTCkucGFyc2Uobix0LHtsZWFkaW5nVHJpdmlhQ2hhcnM6c3hlLC4uLmUsdG9rZW5pemVFeHBhbnNpb25Gb3JtczohMH0pO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmwuZXJyb3JzJiZsLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmwuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9bGV0IGM9bC5yb290Tm9kZXMsdT1uZXcgRzEoaSwhcixvKSxkPXUudmlzaXRBbGxXaXRoRXJyb3JzKGMpO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmQuZXJyb3JzJiZkLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmQuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9Yz1kLnJvb3ROb2RlcyxyfHwoYz1jdShuZXcgY2xhc3N7dmlzaXRFbGVtZW50KHQsZSl7cmV0dXJuIEp5ZS5oYXModC5uYW1lKXx8dC5hdHRycy5zb21lKHQ9PnQubmFtZT09PUpxKT9uZXcgQXgodC5uYW1lLGN1KHRoaXMsdC5hdHRycyksdC5jaGlsZHJlbix0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bik6bmV3IEF4KHQubmFtZSx0LmF0dHJzLGZ1bmN0aW9uKG4sdCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaCgoaSxyKT0+e2xldCBzPWkudmlzaXQobix7cHJldjp0W3ItMV0sbmV4dDp0W3IrMV19KTtzJiZlLnB1c2gocyl9KSxlfSh0aGlzLHQuY2hpbGRyZW4pLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKX12aXNpdEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0Lm5hbWUhPT1KcT90Om51bGx9dmlzaXRUZXh0KHQsZSl7aWYodC52YWx1ZS5tYXRjaCgkeWUpfHxlJiYoZS5wcmV2IGluc3RhbmNlb2YgTjB8fGUubmV4dCBpbnN0YW5jZW9mIE4wKSl7bGV0IG89dC50b2tlbnMubWFwKGE9PjU9PT1hLnR5cGU/ZnVuY3Rpb24oe3R5cGU6bixwYXJ0czp0LHNvdXJjZVNwYW46ZX0pe3JldHVybnt0eXBlOm4scGFydHM6W3RZKHRbMF0pXSxzb3VyY2VTcGFuOmV9fShhKTphKSxzPXRZKHQudmFsdWUpO3JldHVybiBuZXcgRjAocyx0LnNvdXJjZVNwYW4sbyx0LmkxOG4pfXJldHVybiBudWxsfXZpc2l0Q29tbWVudCh0LGUpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uKHQsZSl7cmV0dXJuIHR9dmlzaXRFeHBhbnNpb25DYXNlKHQsZSl7cmV0dXJuIHR9fSxjKSx1Lmhhc0kxOG5NZXRhJiYoYz1jdShuZXcgRzEoaSwhMSksYykpKTtsZXR7bm9kZXM6cCxlcnJvcnM6aCxzdHlsZVVybHM6ZixzdHlsZXM6bSxuZ0NvbnRlbnRTZWxlY3RvcnM6Qyxjb21tZW50Tm9kZXM6X309ZnVuY3Rpb24obix0LGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYmluZGluZ1BhcnNlcj10LHRoaXMub3B0aW9ucz1lLHRoaXMuZXJyb3JzPVtdLHRoaXMuc3R5bGVzPVtdLHRoaXMuc3R5bGVVcmxzPVtdLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPVtdLHRoaXMuY29tbWVudE5vZGVzPVtdLHRoaXMuaW5JMThuQmxvY2s9ITF9dmlzaXRFbGVtZW50KHQpe2xldCBlPXB4KHQuaTE4bik7ZSYmKHRoaXMuaW5JMThuQmxvY2smJnRoaXMucmVwb3J0RXJyb3IoIkNhbm5vdCBtYXJrIGFuIGVsZW1lbnQgYXMgdHJhbnNsYXRhYmxlIGluc2lkZSBvZiBhIHRyYW5zbGF0YWJsZSBzZWN0aW9uLiBQbGVhc2UgcmVtb3ZlIHRoZSBuZXN0ZWQgaTE4biBtYXJrZXIuIix0LnNvdXJjZVNwYW4pLHRoaXMuaW5JMThuQmxvY2s9ITApO2xldCBpPXJZKHQpO2lmKGkudHlwZT09PVBzLlNDUklQVClyZXR1cm4gbnVsbDtpZihpLnR5cGU9PT1Qcy5TVFlMRSl7bGV0IEM9MT09PShuPXQpLmNoaWxkcmVuLmxlbmd0aCYmbi5jaGlsZHJlblswXWluc3RhbmNlb2YgRjA/bi5jaGlsZHJlblswXS52YWx1ZTpudWxsO3JldHVybiBudWxsIT09QyYmdGhpcy5zdHlsZXMucHVzaChDKSxudWxsfWlmKGkudHlwZT09PVBzLlNUWUxFU0hFRVQmJmZ1bmN0aW9uKG4pe2lmKG51bGw9PW58fDA9PT1uLmxlbmd0aHx8Ii8iPT1uWzBdKXJldHVybiExO2xldCB0PW4ubWF0Y2goZ2JlKTtyZXR1cm4gbnVsbD09PXR8fCJwYWNrYWdlIj09dFsxXXx8ImFzc2V0Ij09dFsxXX0oaS5ocmVmQXR0cikpcmV0dXJuIHRoaXMuc3R5bGVVcmxzLnB1c2goaS5ocmVmQXR0ciksbnVsbDt2YXIgbjtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4ibmctdGVtcGxhdGUiPT09Y2QobilbMV19KHQubmFtZSksbz1bXSxzPVtdLGE9W10sbD1bXSxjPVtdLHU9e30sZD1bXSxwPVtdLGg9ITE7Zm9yKGxldCBDIG9mIHQuYXR0cnMpe2xldCBfPSExLHk9JDkoQy5uYW1lKSxJPSExO2lmKEMuaTE4biYmKHVbQy5uYW1lXT1DLmkxOG4pLHkuc3RhcnRzV2l0aCgiKiIpKXtoJiZ0aGlzLnJlcG9ydEVycm9yKCJDYW4ndCBoYXZlIG11bHRpcGxlIHRlbXBsYXRlIGJpbmRpbmdzIG9uIG9uZSBlbGVtZW50LiBVc2Ugb25seSBvbmUgYXR0cmlidXRlIHByZWZpeGVkIHdpdGggKiIsQy5zb3VyY2VTcGFuKSxJPSEwLGg9ITA7bGV0IEE9Qy52YWx1ZSxPPXkuc3Vic3RyaW5nKCIqIi5sZW5ndGgpLGVlPVtdO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUlubGluZVRlbXBsYXRlQmluZGluZyhPLEEsQy5zb3VyY2VTcGFuLEMudmFsdWVTcGFuP0MudmFsdWVTcGFuLnN0YXJ0Lm9mZnNldDpDLnNvdXJjZVNwYW4uc3RhcnQub2Zmc2V0K0MubmFtZS5sZW5ndGgsW10sZCxlZSwhMCkscC5wdXNoKC4uLmVlLm1hcCh4ZT0+bmV3IHcxKHhlLm5hbWUseGUudmFsdWUseGUuc291cmNlU3Bhbix4ZS5rZXlTcGFuLHhlLnZhbHVlU3BhbikpKX1lbHNlIF89dGhpcy5wYXJzZUF0dHJpYnV0ZShyLEMsW10sbyxzLGEsbCk7IV8mJiFJJiZjLnB1c2godGhpcy52aXNpdEF0dHJpYnV0ZShDKSl9bGV0IG0sZj1jdShpLm5vbkJpbmRhYmxlP0liZTp0aGlzLHQuY2hpbGRyZW4pO2lmKGkudHlwZT09PVBzLk5HX0NPTlRFTlQpe3QuY2hpbGRyZW4mJiF0LmNoaWxkcmVuLmV2ZXJ5KHk9PmZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRjAmJjA9PW4udmFsdWUudHJpbSgpLmxlbmd0aH0oeSl8fGZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVjF9KHkpKSYmdGhpcy5yZXBvcnRFcnJvcigiPG5nLWNvbnRlbnQ+IGVsZW1lbnQgY2Fubm90IGhhdmUgY29udGVudC4iLHQuc291cmNlU3Bhbik7bGV0IEM9aS5zZWxlY3RBdHRyLF89dC5hdHRycy5tYXAoeT0+dGhpcy52aXNpdEF0dHJpYnV0ZSh5KSk7bT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5zZWxlY3Rvcj10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMuaTE4bj1yLHRoaXMubmFtZT0ibmctY29udGVudCJ9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRDb250ZW50KHRoaXMpfX0oQyxfLHQuc291cmNlU3Bhbix0LmkxOG4pLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLnB1c2goQyl9ZWxzZSBpZihyKXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IFliKHQubmFtZSxjLEMuYm91bmQscyxbXSxmLGwsYSx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bil9ZWxzZXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IEUwKHQubmFtZSxjLEMuYm91bmQscyxmLGwsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3Bhbix0LmkxOG4pfWlmKGgpe2xldCBDPXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXMoIm5nLXRlbXBsYXRlIixkLHUpLF89W107Qy5saXRlcmFsLmZvckVhY2goTz0+Xy5wdXNoKE8pKSxDLmJvdW5kLmZvckVhY2goTz0+Xy5wdXNoKE8pKTtsZXQgeT1tIGluc3RhbmNlb2YgRTA/e2F0dHJpYnV0ZXM6bS5hdHRyaWJ1dGVzLGlucHV0czptLmlucHV0cyxvdXRwdXRzOm0ub3V0cHV0c306e2F0dHJpYnV0ZXM6W10saW5wdXRzOltdLG91dHB1dHM6W119O209bmV3IFliKG0gaW5zdGFuY2VvZiBZYj9udWxsOm0ubmFtZSx5LmF0dHJpYnV0ZXMseS5pbnB1dHMseS5vdXRwdXRzLF8sW21dLFtdLHAsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3BhbixyJiZlP3ZvaWQgMDp0LmkxOG4pfXJldHVybiBlJiYodGhpcy5pbkkxOG5CbG9jaz0hMSksbX12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIHRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudG9rZW5zLHQuaTE4bil9dmlzaXRFeHBhbnNpb24odCl7aWYoIXQuaTE4bilyZXR1cm4gbnVsbDtpZighcHgodC5pMThuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSAiJHt0LmkxOG4uY29uc3RydWN0b3J9IiBmb3IgImkxOG4iIHByb3BlcnR5IG9mICR7dC5zb3VyY2VTcGFuLnRvU3RyaW5nKCl9LiBFeHBlY3RlZCBhICJNZXNzYWdlImApO2xldCBlPXQuaTE4bixpPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKGUucGxhY2Vob2xkZXJzKS5mb3JFYWNoKG89PntsZXQgcz1lLnBsYWNlaG9sZGVyc1tvXTtpZihvLnN0YXJ0c1dpdGgoIlZBUl8iKSl7bGV0IGE9by50cmltKCksbD10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihzLnRleHQscy5zb3VyY2VTcGFuKTtpW2FdPW5ldyB1eChsLHMuc291cmNlU3Bhbil9ZWxzZSByW29dPXRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHMudGV4dCxzLnNvdXJjZVNwYW4sbnVsbCl9KSxuZXcgTTEoaSxyLHQuc291cmNlU3BhbixlKX12aXNpdEV4cGFuc2lvbkNhc2UodCl7cmV0dXJuIG51bGx9dmlzaXRDb21tZW50KHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY29sbGVjdENvbW1lbnROb2RlcyYmdGhpcy5jb21tZW50Tm9kZXMucHVzaChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCl7dGhyb3cgbmV3IEVycm9yKCJ2aXNpdCgpIG5vdCBpbXBsZW1lbnRlZCBmb3IgQ29tbWVudCIpfX0odC52YWx1ZXx8IiIsdC5zb3VyY2VTcGFuKSksbnVsbH1leHRyYWN0QXR0cmlidXRlcyh0LGUsaSl7bGV0IHI9W10sbz1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgYT1pW3MubmFtZV07aWYocy5pc0xpdGVyYWwpby5wdXNoKG5ldyBkeChzLm5hbWUscy5leHByZXNzaW9uLnNvdXJjZXx8IiIscy5zb3VyY2VTcGFuLHMua2V5U3BhbixzLnZhbHVlU3BhbixhKSk7ZWxzZXtsZXQgbD10aGlzLmJpbmRpbmdQYXJzZXIuY3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxzLCEwLCExKTtyLnB1c2goTTAuZnJvbUJvdW5kRWxlbWVudFByb3BlcnR5KGwsYSkpfX0pLHtib3VuZDpyLGxpdGVyYWw6b319cGFyc2VBdHRyaWJ1dGUodCxlLGkscixvLHMsYSl7bGV0IGw9JDkoZS5uYW1lKSxjPWUudmFsdWUsdT1lLnNvdXJjZVNwYW4sZD1lLnZhbHVlU3Bhbj9lLnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQ6dS5zdGFydC5vZmZzZXQ7ZnVuY3Rpb24gcChfLHksSSl7bGV0IE89Xy5zdGFydC5tb3ZlQnkoeS5sZW5ndGgrKGUubmFtZS5sZW5ndGgtbC5sZW5ndGgpKSxlZT1PLm1vdmVCeShJLmxlbmd0aCk7cmV0dXJuIG5ldyBUbyhPLGVlLE8sSSl9bGV0IGg9bC5tYXRjaChUYmUpO2lmKGgpe2lmKG51bGwhPWhbMV0pe2xldCBfPWhbN10seT1wKHUsaFsxXSxfKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSl9ZWxzZSBpZihoWzJdKWlmKHQpe2xldCBfPWhbN10seT1wKHUsaFsyXSxfKTt0aGlzLnBhcnNlVmFyaWFibGUoXyxjLHUseSxlLnZhbHVlU3BhbixzKX1lbHNlIHRoaXMucmVwb3J0RXJyb3IoJyJsZXQtIiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBuZy10ZW1wbGF0ZSBlbGVtZW50cy4nLHUpO2Vsc2UgaWYoaFszXSl7bGV0IF89aFs3XSx5PXAodSxoWzNdLF8pO3RoaXMucGFyc2VSZWZlcmVuY2UoXyxjLHUseSxlLnZhbHVlU3BhbixhKX1lbHNlIGlmKGhbNF0pe2xldCBfPVtdLHk9aFs3XSxJPXAodSxoWzRdLHkpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUV2ZW50KHksYywhMSx1LGUudmFsdWVTcGFufHx1LGksXyxJKSxrTihfLG8pfWVsc2UgaWYoaFs1XSl7bGV0IF89aFs3XSx5PXAodSxoWzVdLF8pO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KX1lbHNlIGlmKGhbNl0pe2xldCBfPXAodSwiIixsKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VMaXRlcmFsQXR0cihsLGMsdSxkLGUudmFsdWVTcGFuLGkscixfKX1yZXR1cm4hMH1sZXQgZj1udWxsO2lmKGwuc3RhcnRzV2l0aCh1cF9CQU5BTkFfQk9YLnN0YXJ0KT9mPXVwX0JBTkFOQV9CT1g6bC5zdGFydHNXaXRoKHVwX1BST1BFUlRZLnN0YXJ0KT9mPXVwX1BST1BFUlRZOmwuc3RhcnRzV2l0aCh1cF9FVkVOVC5zdGFydCkmJihmPXVwX0VWRU5UKSxudWxsIT09ZiYmbC5lbmRzV2l0aChmLmVuZCkmJmwubGVuZ3RoPmYuc3RhcnQubGVuZ3RoK2YuZW5kLmxlbmd0aCl7bGV0IF89bC5zdWJzdHJpbmcoZi5zdGFydC5sZW5ndGgsbC5sZW5ndGgtZi5lbmQubGVuZ3RoKSx5PXAodSxmLnN0YXJ0LF8pO2lmKGYuc3RhcnQ9PT11cF9CQU5BTkFfQk9YLnN0YXJ0KXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KTtlbHNlIGlmKGYuc3RhcnQ9PT11cF9QUk9QRVJUWS5zdGFydCl0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSk7ZWxzZXtsZXQgST1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChfLGMsITEsdSxlLnZhbHVlU3Bhbnx8dSxpLEkseSksa04oSSxvKX1yZXR1cm4hMH1sZXQgbT1wKHUsIiIsbCk7cmV0dXJuIHRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5SW50ZXJwb2xhdGlvbihsLGMsdSxlLnZhbHVlU3BhbixpLHIsbSxlLnZhbHVlVG9rZW5zPz9udWxsKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89ZVkodCkscz10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uKG8sZSxpKTtyZXR1cm4gcz9uZXcgdXgocyxlLHIpOm5ldyB3MChvLGUpfXBhcnNlVmFyaWFibGUodCxlLGkscixvLHMpe3QuaW5kZXhPZigiLSIpPi0xP3RoaXMucmVwb3J0RXJyb3IoJyItIiBpcyBub3QgYWxsb3dlZCBpbiB2YXJpYWJsZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoJiZ0aGlzLnJlcG9ydEVycm9yKCJWYXJpYWJsZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSkscy5wdXNoKG5ldyB3MSh0LGUsaSxyLG8pKX1wYXJzZVJlZmVyZW5jZSh0LGUsaSxyLG8scyl7dC5pbmRleE9mKCItIik+LTE/dGhpcy5yZXBvcnRFcnJvcignIi0iIGlzIG5vdCBhbGxvd2VkIGluIHJlZmVyZW5jZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoP3RoaXMucmVwb3J0RXJyb3IoIlJlZmVyZW5jZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSk6cy5zb21lKGE9PmEubmFtZT09PXQpJiZ0aGlzLnJlcG9ydEVycm9yKGBSZWZlcmVuY2UgIiMke3R9IiBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlYCxpKSxzLnB1c2gobmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW99dmlzaXQodCl7cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UodGhpcyl9fSh0LGUsaSxyLG8pKX1wYXJzZUFzc2lnbm1lbnRFdmVudCh0LGUsaSxyLG8scyxhKXtsZXQgbD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChgJHt0fUNoYW5nZWAsYCR7ZX0gPSRldmVudGAsITAsaSxyfHxpLG8sbCxhKSxrTihsLHMpfXJlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfX0odCxlKSxzPXtub2RlczpjdShpLG4pLGVycm9yczp0LmVycm9ycy5jb25jYXQoaS5lcnJvcnMpLHN0eWxlVXJsczppLnN0eWxlVXJscyxzdHlsZXM6aS5zdHlsZXMsbmdDb250ZW50U2VsZWN0b3JzOmkubmdDb250ZW50U2VsZWN0b3JzfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYocy5jb21tZW50Tm9kZXM9aS5jb21tZW50Tm9kZXMpLHN9KGMscyx7Y29sbGVjdENvbW1lbnROb2RlczohIWUuY29sbGVjdENvbW1lbnROb2Rlc30pO2gucHVzaCguLi5sLmVycm9ycywuLi5kLmVycm9ycyk7bGV0IHk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmgubGVuZ3RoPjA/aDpudWxsLG5vZGVzOnAsc3R5bGVVcmxzOmYsc3R5bGVzOm0sbmdDb250ZW50U2VsZWN0b3JzOkN9O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJih5LmNvbW1lbnROb2Rlcz1fKSx5fXZhciBsWT1uZXcgajE7ZnVuY3Rpb24gcTEobj0kYyl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9leHByUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lLHRoaXMuX3NjaGVtYVJlZ2lzdHJ5PWksdGhpcy5lcnJvcnM9cn1nZXQgaW50ZXJwb2xhdGlvbkNvbmZpZygpe3JldHVybiB0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnfWNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VQcm9wZXJ0eUJpbmRpbmcocixvLCEwLGUsZS5zdGFydC5vZmZzZXQsdm9pZCAwLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IHByb3BlcnR5IGJpbmRpbmcgIiR7cn0iIG5lZWRzIHRvIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIGJ1dCBnb3QgIiR7b30iICgke3R5cGVvZiBvfSlgLGUpfXJldHVybiBpfWNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VFdmVudChyLG8sITEsZSxlLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IGxpc3RlbmVyICIke3J9IiBuZWVkcyB0byBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBidXQgZ290ICIke299IiAoJHt0eXBlb2Ygb30pYCxlKX1yZXR1cm4gaX1wYXJzZUludGVycG9sYXRpb24odCxlLGkpe2xldCByPWUuc3RhcnQudG9TdHJpbmcoKSxvPWUuZnVsbFN0YXJ0Lm9mZnNldDt0cnl7bGV0IHM9dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb24odCxyLG8saSx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxlKSxzfWNhdGNoKHMpe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtzfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbyl9fXBhcnNlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24odCxlKXtsZXQgaT1lLnN0YXJ0LnRvU3RyaW5nKCkscj1lLnN0YXJ0Lm9mZnNldDt0cnl7bGV0IG89dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsaSxyKTtyZXR1cm4gbyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhvLmVycm9ycyxlKSxvfWNhdGNoKG8pe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtvfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLGkscil9fXBhcnNlSW5saW5lVGVtcGxhdGVCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCl7bGV0IHU9dGhpcy5fcGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLGkuc3RhcnQub2Zmc2V0KyIqIi5sZW5ndGgscik7Zm9yKGxldCBkIG9mIHUpe2xldCBwPWNwKGksZC5zb3VyY2VTcGFuKSxoPWQua2V5LnNvdXJjZSxmPWNwKGksZC5rZXkuc3Bhbik7aWYoZCBpbnN0YW5jZW9mIFN4KXtsZXQgbT1kLnZhbHVlP2QudmFsdWUuc291cmNlOiIkaW1wbGljaXQiLEM9ZC52YWx1ZT9jcChpLGQudmFsdWUuc3Bhbik6dm9pZCAwO2EucHVzaChuZXcgeUwoaCxtLHAsZixDKSl9ZWxzZSBpZihkLnZhbHVlKXtsZXQgbT1sP3A6aSxDPWNwKGksZC52YWx1ZS5hc3Quc291cmNlU3Bhbik7dGhpcy5fcGFyc2VQcm9wZXJ0eUFzdChoLGQudmFsdWUsbSxmLEMsbyxzKX1lbHNlIG8ucHVzaChbaCwiIl0pLHRoaXMucGFyc2VMaXRlcmFsQXR0cihoLG51bGwsZixyLHZvaWQgMCxvLHMsZil9fV9wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz1pLnN0YXJ0LnRvU3RyaW5nKCk7dHJ5e2xldCBhPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxzLHIsbyk7cmV0dXJuIHRoaXMuX3JlcG9ydEV4cHJlc3Npb25QYXJzZXJFcnJvcnMoYS5lcnJvcnMsaSksYS53YXJuaW5ncy5mb3JFYWNoKGw9Pnt0aGlzLl9yZXBvcnRFcnJvcihsLGksbnUuV0FSTklORyl9KSxhLnRlbXBsYXRlQmluZGluZ3N9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke2F9YCxpKSxbXX19cGFyc2VMaXRlcmFsQXR0cih0LGUsaSxyLG8scyxhLGwpe1JOKHQpPyh0PXQuc3Vic3RyaW5nKDEpLHZvaWQgMCE9PWwmJihsPWNwKGwsbmV3IE9hKGwuc3RhcnQub2Zmc2V0KzEsbC5lbmQub2Zmc2V0KSkpLGUmJnRoaXMuX3JlcG9ydEVycm9yKCdBc3NpZ25pbmcgYW5pbWF0aW9uIHRyaWdnZXJzIHZpYSBAcHJvcD0iZXhwIiBhdHRyaWJ1dGVzIHdpdGggYW4gZXhwcmVzc2lvbiBpcyBpbnZhbGlkLiBVc2UgcHJvcGVydHkgYmluZGluZ3MgKGUuZy4gW0Bwcm9wXT0iZXhwIikgb3IgdXNlIGFuIGF0dHJpYnV0ZSB3aXRob3V0IGEgdmFsdWUgKGUuZy4gQHByb3ApIGluc3RlYWQuJyxpLG51LkVSUk9SKSx0aGlzLl9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLGwsbyxzLGEpKTphLnB1c2gobmV3IFFiKHQsdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZShlLCIiLHIpLGdwLkxJVEVSQUxfQVRUUixpLGwsbykpfXBhcnNlUHJvcGVydHlCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCxjKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJQcm9wZXJ0eSBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIscik7bGV0IHU9ITE7dC5zdGFydHNXaXRoKFBOKT8odT0hMCx0PXQuc3Vic3RyaW5nKFBOLmxlbmd0aCksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrUE4ubGVuZ3RoLGMuZW5kLm9mZnNldCkpKSk6Uk4odCkmJih1PSEwLHQ9dC5zdWJzdHJpbmcoMSksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrMSxjLmVuZC5vZmZzZXQpKSkpLHU/dGhpcy5fcGFyc2VBbmltYXRpb24odCxlLHIsbyxjLHMsYSxsKTp0aGlzLl9wYXJzZVByb3BlcnR5QXN0KHQsdGhpcy5fcGFyc2VCaW5kaW5nKGUsaSxzfHxyLG8pLHIsYyxzLGEsbCl9cGFyc2VQcm9wZXJ0eUludGVycG9sYXRpb24odCxlLGkscixvLHMsYSxsKXtsZXQgYz10aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihlLHJ8fGksbCk7cmV0dXJuISFjJiYodGhpcy5fcGFyc2VQcm9wZXJ0eUFzdCh0LGMsaSxhLHIsbyxzKSwhMCl9X3BhcnNlUHJvcGVydHlBc3QodCxlLGkscixvLHMsYSl7cy5wdXNoKFt0LGUuc291cmNlXSksYS5wdXNoKG5ldyBRYih0LGUsZ3AuREVGQVVMVCxpLHIsbykpfV9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLG8scyxhLGwpezA9PT10Lmxlbmd0aCYmdGhpcy5fcmVwb3J0RXJyb3IoIkFuaW1hdGlvbiB0cmlnZ2VyIGlzIG1pc3NpbmciLGkpO2xldCBjPXRoaXMuX3BhcnNlQmluZGluZyhlfHwidW5kZWZpbmVkIiwhMSxzfHxpLHIpO2EucHVzaChbdCxjLnNvdXJjZV0pLGwucHVzaChuZXcgUWIodCxjLGdwLkFOSU1BVElPTixpLG8scykpfV9wYXJzZUJpbmRpbmcodCxlLGkscil7bGV0IG89KGkmJmkuc3RhcnR8fCIodW5rbm93bikiKS50b1N0cmluZygpO3RyeXtsZXQgcz1lP3RoaXMuX2V4cHJQYXJzZXIucGFyc2VTaW1wbGVCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpOnRoaXMuX2V4cHJQYXJzZXIucGFyc2VCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpO3JldHVybiBzJiZ0aGlzLl9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHMuZXJyb3JzLGkpLHN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIsbyxyKX19Y3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxlLGk9ITEscj0hMCl7aWYoZS5pc0FuaW1hdGlvbilyZXR1cm4gbmV3IFIxKGUubmFtZSw0LFlyLk5PTkUsZS5leHByZXNzaW9uLG51bGwsZS5zb3VyY2VTcGFuLGUua2V5U3BhbixlLnZhbHVlU3Bhbik7bGV0IHMsYyxvPW51bGwsYT1udWxsLGw9ZS5uYW1lLnNwbGl0KCIuIik7aWYobC5sZW5ndGg+MSlpZigiYXR0ciI9PWxbMF0pe2E9bC5zbGljZSgxKS5qb2luKCIuIiksaXx8dGhpcy5fdmFsaWRhdGVQcm9wZXJ0eU9yQXR0cmlidXRlTmFtZShhLGUuc291cmNlU3BhbiwhMCksYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LGEsITApO2xldCB1PWEuaW5kZXhPZigiOiIpO2lmKHU+LTEpe2xldCBkPWEuc3Vic3RyaW5nKDAsdSkscD1hLnN1YnN0cmluZyh1KzEpO2E9ak4oZCxwKX1zPTF9ZWxzZSJjbGFzcyI9PWxbMF0/KGE9bFsxXSxzPTIsYz1bWXIuTk9ORV0pOiJzdHlsZSI9PWxbMF0mJihvPWwubGVuZ3RoPjI/bFsyXTpudWxsLGE9bFsxXSxzPTMsYz1bWXIuU1RZTEVdKTtpZihudWxsPT09YSl7bGV0IHU9dGhpcy5fc2NoZW1hUmVnaXN0cnkuZ2V0TWFwcGVkUHJvcE5hbWUoZS5uYW1lKTthPXI/dTplLm5hbWUsYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHUsITEpLHM9MCxpfHx0aGlzLl92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHUsZS5zb3VyY2VTcGFuLCExKX1yZXR1cm4gbmV3IFIxKGEscyxjWzBdLGUuZXhwcmVzc2lvbixvLGUuc291cmNlU3BhbixlLmtleVNwYW4sZS52YWx1ZVNwYW4pfXBhcnNlRXZlbnQodCxlLGkscixvLHMsYSxsKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJFdmVudCBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIsciksUk4odCk/KHQ9dC5zbGljZSgxKSx2b2lkIDAhPT1sJiYobD1jcChsLG5ldyBPYShsLnN0YXJ0Lm9mZnNldCsxLGwuZW5kLm9mZnNldCkpKSx0aGlzLl9wYXJzZUFuaW1hdGlvbkV2ZW50KHQsZSxpLHIsbyxhLGwpKTp0aGlzLl9wYXJzZVJlZ3VsYXJFdmVudCh0LGUsaSxyLG8scyxhLGwpfWNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHModCxlLGkpe2xldCByPXRoaXMuX3NjaGVtYVJlZ2lzdHJ5LmdldE1hcHBlZFByb3BOYW1lKGUpO3JldHVybiBPTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHIsaSl9X3BhcnNlQW5pbWF0aW9uRXZlbnQodCxlLGkscixvLHMsYSl7bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiLiIsdCl9KHQsW3QsIiJdKSxjPWxbMF0sdT1sWzFdLnRvTG93ZXJDYXNlKCksZD10aGlzLl9wYXJzZUFjdGlvbihlLGksbyk7cy5wdXNoKG5ldyBQMShjLHUsMSxkLHIsbyxhKSksMD09PWMubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQW5pbWF0aW9uIGV2ZW50IG5hbWUgaXMgbWlzc2luZyBpbiBiaW5kaW5nIixyKSx1PyJzdGFydCIhPT11JiYiZG9uZSIhPT11JiZ0aGlzLl9yZXBvcnRFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiBvdXRwdXQgcGhhc2UgdmFsdWUgIiR7dX0iIGZvciAiQCR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgKHVzZSBzdGFydCBvciBkb25lKWAscik6dGhpcy5fcmVwb3J0RXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciBvdXRwdXQgZXZlbnQgKEAke2N9KSBpcyBtaXNzaW5nIGl0cyBwaGFzZSB2YWx1ZSBuYW1lIChzdGFydCBvciBkb25lIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkKWAscil9X3BhcnNlUmVndWxhckV2ZW50KHQsZSxpLHIsbyxzLGEsbCl7bGV0W2MsdV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiOiIsdCl9KHQsW251bGwsdF0pLGQ9dGhpcy5fcGFyc2VBY3Rpb24oZSxpLG8pO3MucHVzaChbdCxkLnNvdXJjZV0pLGEucHVzaChuZXcgUDEodSxjLDAsZCxyLG8sbCkpfV9wYXJzZUFjdGlvbih0LGUsaSl7bGV0IHI9KGkmJmkuc3RhcnR8fCIodW5rbm93biIpLnRvU3RyaW5nKCksbz1pJiZpLnN0YXJ0P2kuc3RhcnQub2Zmc2V0OjA7dHJ5e2xldCBzPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VBY3Rpb24odCxlLHIsbyx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxpKSwhc3x8cy5hc3QgaW5zdGFuY2VvZiBuYT8odGhpcy5fcmVwb3J0RXJyb3IoIkVtcHR5IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCIsaSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbykpOnN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIscixvKX19X3JlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfV9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHQsZSl7Zm9yKGxldCBpIG9mIHQpdGhpcy5fcmVwb3J0RXJyb3IoaS5tZXNzYWdlLGUpfV92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHQsZSxpKXtsZXQgcj1pP3RoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlQXR0cmlidXRlKHQpOnRoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlUHJvcGVydHkodCk7ci5lcnJvciYmdGhpcy5fcmVwb3J0RXJyb3Ioci5tc2csZSxudS5FUlJPUil9fShuZXcgQjEobmV3IEwxKSxuLGxZLFtdKX1mdW5jdGlvbiBjWShuLHQpe3N3aXRjaChuKXtjYXNlIFlyLkhUTUw6cmV0dXJuIHhuKEsuc2FuaXRpemVIdG1sKTtjYXNlIFlyLlNDUklQVDpyZXR1cm4geG4oSy5zYW5pdGl6ZVNjcmlwdCk7Y2FzZSBZci5TVFlMRTpyZXR1cm4gdD94bihLLnNhbml0aXplU3R5bGUpOm51bGw7Y2FzZSBZci5VUkw6cmV0dXJuIHhuKEsuc2FuaXRpemVVcmwpO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiB4bihLLnNhbml0aXplUmVzb3VyY2VVcmwpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGd4ZShuLHQpe2xldCBlPXJ1KHQudmFsdWUpO2lmKCFpWShuLHQubmFtZSkpcmV0dXJuIGU7c3dpdGNoKGxZLnNlY3VyaXR5Q29udGV4dChuLHQubmFtZSwhMCkpe2Nhc2UgWXIuSFRNTDpyZXR1cm4gcjkoeG4oSy50cnVzdENvbnN0YW50SHRtbCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiByOSh4bihLLnRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIHZ4ZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHcwfHxuIGluc3RhbmNlb2YgdXh8fG4gaW5zdGFuY2VvZiBNMX1mdW5jdGlvbiBWTihuKXtyZXR1cm4gbi5ldmVyeSh2eGUpfWZ1bmN0aW9uIHMxKG4sdCxlKXtyZXR1cm4oKT0+e2xldCBpPW4oKSxyPUFycmF5LmlzQXJyYXkoaSk/aTpbaV07cmV0dXJuIGUmJnIucHVzaCguLi5lKSx0JiZyLnVuc2hpZnQobnQodCkpLHJ9fXZhciBvcT0ibmdJMThuQ2xvc3VyZU1vZGUiO2Z1bmN0aW9uIHVZKG4pe3JldHVybiBuLnJlZHVjZSgodCxlKT0+e2xldCBpPUFycmF5LmlzQXJyYXkoZSk/dVkoZSk6ZTtyZXR1cm4gdC5jb25jYXQoaSl9LFtdKX12YXIgeHhlPS9hdHRyXC4oW15cXV0rKS87ZnVuY3Rpb24gcFkobix0LGUpe2xldCBpPW5ldyB5cCxyPXQzKG4uc2VsZWN0b3IpO3JldHVybiBpLnNldCgidHlwZSIsbi5pbnRlcm5hbFR5cGUpLHIubGVuZ3RoPjAmJmkuc2V0KCJzZWxlY3RvcnMiLHJ1KHIpKSxuLnF1ZXJpZXMubGVuZ3RoPjAmJmkuc2V0KCJjb250ZW50UXVlcmllcyIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO2ZvcihsZXQgYSBvZiBuKXtpLnB1c2goeG4oSy5jb250ZW50UXVlcnkpLmNhbGxGbihbTWkoImRpckluZGV4IiksLi4uZlkoYSx0KV0pLnRvU3RtdCgpKTtsZXQgbD1vKCksYz14bihLLmxvYWRRdWVyeSkuY2FsbEZuKFtdKSx1PXhuKEsucXVlcnlSZWZyZXNoKS5jYWxsRm4oW2wuc2V0KGMpXSksZD1NaShhYykucHJvcChhLnByb3BlcnR5TmFtZSkuc2V0KGEuZmlyc3Q/bC5wcm9wKCJmaXJzdCIpOmwpO3IucHVzaCh1LmFuZChkKS50b1N0bXQoKSl9bGV0IHM9ZT9gJHtlfV9Db250ZW50UXVlcmllc2A6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpLG5ldyBScygiZGlySW5kZXgiLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnF1ZXJpZXMsdCxuLm5hbWUpKSxuLnZpZXdRdWVyaWVzLmxlbmd0aCYmaS5zZXQoInZpZXdRdWVyeSIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO24uZm9yRWFjaChhPT57bGV0IGw9eG4oSy52aWV3UXVlcnkpLmNhbGxGbihmWShhLHQpKTtpLnB1c2gobC50b1N0bXQoKSk7bGV0IGM9bygpLHU9eG4oSy5sb2FkUXVlcnkpLmNhbGxGbihbXSksZD14bihLLnF1ZXJ5UmVmcmVzaCkuY2FsbEZuKFtjLnNldCh1KV0pLHA9TWkoYWMpLnByb3AoYS5wcm9wZXJ0eU5hbWUpLnNldChhLmZpcnN0P2MucHJvcCgiZmlyc3QiKTpjKTtyLnB1c2goZC5hbmQocCkudG9TdG10KCkpfSk7bGV0IHM9ZT9gJHtlfV9RdWVyeWA6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnZpZXdRdWVyaWVzLHQsbi5uYW1lKSksaS5zZXQoImhvc3RCaW5kaW5ncyIsZnVuY3Rpb24obix0LGUsaSxyLG8scyl7bGV0IGE9TWkoYWMpLGw9bmV3IE4xKGEpLHtzdHlsZUF0dHI6YyxjbGFzc0F0dHI6dX09bi5zcGVjaWFsQXR0cmlidXRlczt2b2lkIDAhPT1jJiZsLnJlZ2lzdGVyU3R5bGVBdHRyKGMpLHZvaWQgMCE9PXUmJmwucmVnaXN0ZXJDbGFzc0F0dHIodSk7bGV0IGQ9W10scD1bXSxoPVtdLGY9dCxtPWUuY3JlYXRlRGlyZWN0aXZlSG9zdEV2ZW50QXN0cyhuLmxpc3RlbmVycyxmKTttJiZtLmxlbmd0aCYmZC5wdXNoKC4uLmZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtsZXQgcz1vLm5hbWUmJm0wKG8ubmFtZSksYT0xPT09by50eXBlP1NxKHMsby50YXJnZXRPclBoYXNlKTpzLGw9dCYmcz9gJHt0fV8ke2F9X0hvc3RCaW5kaW5nSGFuZGxlcmA6bnVsbCxjPWFZKFMwLmZyb21QYXJzZWRFdmVudChvKSxsKTsxPT1vLnR5cGU/aS5wdXNoKGMpOmUucHVzaChjKX1mb3IobGV0IG8gb2YgaSlyLnB1c2goe3JlZmVyZW5jZTpLLnN5bnRoZXRpY0hvc3RMaXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7Zm9yKGxldCBvIG9mIGUpci5wdXNoKHtyZWZlcmVuY2U6Sy5saXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7cmV0dXJuIHJ9KG0sbykpO2xldCBDPWUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsZiksXz1bXSx5PTA7QyYmQy5mb3JFYWNoKGZlPT57bC5yZWdpc3RlcklucHV0QmFzZWRPbk5hbWUoZmUubmFtZSxmZS5leHByZXNzaW9uLGYpP3krPTI6KF8ucHVzaChmZSkseSsrKX0pO2xldCBJLEE9KCk9PihJfHwoST1uZXcgVzEoaSwoKT0+aDEoIlVuZXhwZWN0ZWQgbm9kZSIpLHZlPT57bGV0IFQ9eTtyZXR1cm4geSs9dmUsVH0sKCk9PmgxKCJVbmV4cGVjdGVkIHBpcGUiKSkpLEkpLE89W10sZWU9W10sWD1bXTtmb3IobGV0IGZlIG9mIF8pe2xldCB2ZT1mZS5leHByZXNzaW9uLnZpc2l0KEEoKSksVD1hcShhLHZlKSx7YmluZGluZ05hbWU6bmUsaW5zdHJ1Y3Rpb246bGUsaXNBdHRyaWJ1dGU6aGV9PU54ZShmZSkseWU9ZS5jYWxjUG9zc2libGVTZWN1cml0eUNvbnRleHRzKHIsbmUsaGUpLmZpbHRlcihtZT0+bWUhPT1Zci5OT05FKSxKPW51bGw7eWUubGVuZ3RoJiYoSj0yPT09eWUubGVuZ3RoJiZ5ZS5pbmRleE9mKFlyLlVSTCk+LTEmJnllLmluZGV4T2YoWXIuUkVTT1VSQ0VfVVJMKT4tMT94bihLLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybCk6Y1koeWVbMF0saGUpKTtsZXQgYWU9W250KG5lKSxULmN1cnJWYWxFeHByXTtKJiZhZS5wdXNoKEopLGgucHVzaCguLi5ULnN0bXRzKSxsZT09PUsuaG9zdFByb3BlcnR5P08ucHVzaChhZSk6bGU9PT1LLmF0dHJpYnV0ZT9lZS5wdXNoKGFlKTpsZT09PUsuc3ludGhldGljSG9zdFByb3BlcnR5P1gucHVzaChhZSk6cC5wdXNoKHtyZWZlcmVuY2U6bGUscGFyYW1zT3JGbjphZSxzcGFuOm51bGx9KX1mb3IobGV0IGZlIG9mIE8pcC5wdXNoKHtyZWZlcmVuY2U6Sy5ob3N0UHJvcGVydHkscGFyYW1zT3JGbjpmZSxzcGFuOm51bGx9KTtmb3IobGV0IGZlIG9mIGVlKXAucHVzaCh7cmVmZXJlbmNlOksuYXR0cmlidXRlLHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7Zm9yKGxldCBmZSBvZiBYKXAucHVzaCh7cmVmZXJlbmNlOksuc3ludGhldGljSG9zdFByb3BlcnR5LHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7bGV0IHhlPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSl7bGV0IGk9bltlXTt0LnB1c2gobnQoZSksaSl9cmV0dXJuIHR9KG4uYXR0cmlidXRlcyk7aWYobC5hc3NpZ25Ib3N0QXR0cnMoeGUscyksbC5oYXNCaW5kaW5ncyYmbC5idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKEEoKSkuZm9yRWFjaChmZT0+e2ZvcihsZXQgdmUgb2YgZmUuY2FsbHMpeSs9TWF0aC5tYXgodmUuYWxsb2NhdGVCaW5kaW5nU2xvdHMtMiwwKSxwLnB1c2goe3JlZmVyZW5jZTpmZS5yZWZlcmVuY2UscGFyYW1zT3JGbjpGeGUodmUsYSxhcSksc3BhbjpudWxsfSl9KSx5JiZzLnNldCgiaG9zdFZhcnMiLG50KHkpKSxkLmxlbmd0aD4wfHxwLmxlbmd0aD4wKXtsZXQgZmU9bz9gJHtvfV9Ib3N0QmluZGluZ3NgOm51bGwsdmU9W107cmV0dXJuIGQubGVuZ3RoPjAmJnZlLnB1c2goeHAoMSxUMShkKSkpLHAubGVuZ3RoPjAmJnZlLnB1c2goeHAoMixoLmNvbmNhdChUMShwKSkpKSxPcyhbbmV3IFJzKE54LGt4KSxuZXcgUnMoYWMsbnVsbCldLHZlLGlhLG51bGwsZmUpfXJldHVybiBudWxsfShuLmhvc3Qsbi50eXBlU291cmNlU3BhbixlLHQsbi5zZWxlY3Rvcnx8IiIsbi5uYW1lLGkpKSxpLnNldCgiaW5wdXRzIixtOShuLmlucHV0cywhMCkpLGkuc2V0KCJvdXRwdXRzIixtOShuLm91dHB1dHMpKSxudWxsIT09bi5leHBvcnRBcyYmaS5zZXQoImV4cG9ydEFzIixjcihuLmV4cG9ydEFzLm1hcChvPT5udChvKSkpKSxuLmlzU3RhbmRhbG9uZSYmaS5zZXQoInN0YW5kYWxvbmUiLG50KCEwKSksaX1mdW5jdGlvbiBoWShuLHQpe2xldCBlPVtdLGk9dC5wcm92aWRlcnMscj10LnZpZXdQcm92aWRlcnM7aWYoaXx8cil7bGV0IG89W2l8fG5ldyB2ZihbXSldO3ImJm8ucHVzaChyKSxlLnB1c2goeG4oSy5Qcm92aWRlcnNGZWF0dXJlKS5jYWxsRm4obykpfXQudXNlc0luaGVyaXRhbmNlJiZlLnB1c2goeG4oSy5Jbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUpKSx0LmZ1bGxJbmhlcml0YW5jZSYmZS5wdXNoKHhuKEsuQ29weURlZmluaXRpb25GZWF0dXJlKSksdC5saWZlY3ljbGUudXNlc09uQ2hhbmdlcyYmZS5wdXNoKHhuKEsuTmdPbkNoYW5nZXNGZWF0dXJlKSksdC5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKSYmdC5pc1N0YW5kYWxvbmUmJmUucHVzaCh4bihLLlN0YW5kYWxvbmVGZWF0dXJlKSksZS5sZW5ndGgmJm4uc2V0KCJmZWF0dXJlcyIsY3IoZSkpfWZ1bmN0aW9uIGZZKG4sdCl7bGV0IGU9W012ZShuLHQpLG50KER4ZShuKSldO3JldHVybiBuLnJlYWQmJmUucHVzaChuLnJlYWQpLGV9ZnVuY3Rpb24gRHhlKG4pe3JldHVybihuLmRlc2NlbmRhbnRzPzE6MCl8KG4uc3RhdGljPzI6MCl8KG4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk/NDowKX1mdW5jdGlvbiBQeGUobil7cmV0dXJuIE5hKG50KG4pKX1mdW5jdGlvbiBzcShuKXtyZXR1cm4gTmEobWwoT2JqZWN0LmtleXMobikubWFwKGU9Pih7a2V5OmUsdmFsdWU6bnQoQXJyYXkuaXNBcnJheShuW2VdKT9uW2VdWzBdOm5bZV0pLHF1b3RlZDohMH0pKSkpfWZ1bmN0aW9uIEtMKG4pe3JldHVybiBuLmxlbmd0aD4wP05hKGNyKG4ubWFwKHQ9Pm50KHQpKSkpOmRkfWZ1bmN0aW9uIG1ZKG4pe2xldCB0PW51bGwhPT1uLnNlbGVjdG9yP24uc2VsZWN0b3IucmVwbGFjZSgvXG4vZywiIik6bnVsbDtyZXR1cm5bWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbnVsbCE9PXQ/UHhlKHQpOmRkLG51bGwhPT1uLmV4cG9ydEFzP0tMKG4uZXhwb3J0QXMpOmRkLHNxKG4uaW5wdXRzKSxzcShuLm91dHB1dHMpLEtMKG4ucXVlcmllcy5tYXAoZT0+ZS5wcm9wZXJ0eU5hbWUpKV19ZnVuY3Rpb24gYXEobix0KXtyZXR1cm4gcXEobnVsbCxuLHQsImIiKX1mdW5jdGlvbiBGeGUobix0LGUpe3JldHVybiBuLnBhcmFtcyhpPT5lKHQsaSkuY3VyclZhbEV4cHIpfWZ1bmN0aW9uIE54ZShuKXtsZXQgZSx0PW4ubmFtZSxpPXQubWF0Y2goeHhlKTtyZXR1cm4gaT8odD1pWzFdLGU9Sy5hdHRyaWJ1dGUpOm4uaXNBbmltYXRpb24/KHQ9TXEodCksZT1LLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eSk6ZT1LLmhvc3RQcm9wZXJ0eSx7YmluZGluZ05hbWU6dCxpbnN0cnVjdGlvbjplLGlzQXR0cmlidXRlOiEhaX19dmFyIG4sQnhlPS9eKD86XFsoW15cXV0rKVxdKXwoPzpcKChbXlwpXSspXCkpJC8sWkw9Y2xhc3N7fTtmdW5jdGlvbiBscShuKXtyZXR1cm57Li4ubixwcmVkaWNhdGU6Z1kobi5wcmVkaWNhdGUpLHJlYWQ6bi5yZWFkP25ldyBEbihuLnJlYWQpOm51bGwsc3RhdGljOm4uc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5Om4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHl9fWZ1bmN0aW9uIGNxKG4pe3JldHVybntwcm9wZXJ0eU5hbWU6bi5wcm9wZXJ0eU5hbWUsZmlyc3Q6bi5maXJzdD8/ITEscHJlZGljYXRlOmdZKG4ucHJlZGljYXRlKSxkZXNjZW5kYW50czpuLmRlc2NlbmRhbnRzPz8hMSxyZWFkOm4ucmVhZD9uZXcgRG4obi5yZWFkKTpudWxsLHN0YXRpYzpuLnN0YXRpYz8/ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6bi5lbWl0RGlzdGluY3RDaGFuZ2VzT25seT8/ITB9fWZ1bmN0aW9uIGdZKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP246bzMobmV3IERuKG4pLDEpfWZ1bmN0aW9uIHVxKG4pe2xldCB0PWZxKG4uaW5wdXRzfHxbXSksZT1mcShuLm91dHB1dHN8fFtdKSxpPW4ucHJvcE1ldGFkYXRhLHI9e30sbz17fTtmb3IobGV0IHMgaW4gaSlpLmhhc093blByb3BlcnR5KHMpJiZpW3NdLmZvckVhY2goYT0+e0p4ZShhKT9yW3NdPWEuYmluZGluZ1Byb3BlcnR5TmFtZT9bYS5iaW5kaW5nUHJvcGVydHlOYW1lLHNdOnM6JHhlKGEpJiYob1tzXT1hLmJpbmRpbmdQcm9wZXJ0eU5hbWV8fHMpfSk7cmV0dXJuey4uLm4sdHlwZUFyZ3VtZW50Q291bnQ6MCx0eXBlU291cmNlU3BhbjpuLnR5cGVTb3VyY2VTcGFuLHR5cGU6YXMobi50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksZGVwczpudWxsLGhvc3Q6UXhlKG4ucHJvcE1ldGFkYXRhLG4udHlwZVNvdXJjZVNwYW4sbi5ob3N0KSxpbnB1dHM6ey4uLnQsLi4ucn0sb3V0cHV0czp7Li4uZSwuLi5vfSxxdWVyaWVzOm4ucXVlcmllcy5tYXAobHEpLHByb3ZpZGVyczpudWxsIT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsdmlld1F1ZXJpZXM6bi52aWV3UXVlcmllcy5tYXAobHEpLGZ1bGxJbmhlcml0YW5jZTohMX19ZnVuY3Rpb24gX1kobix0KXtyZXR1cm57bmFtZTpuLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksdHlwZVNvdXJjZVNwYW46dCxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksc2VsZWN0b3I6bi5zZWxlY3Rvcj8/bnVsbCxpbnB1dHM6bi5pbnB1dHM/P3t9LG91dHB1dHM6bi5vdXRwdXRzPz97fSxob3N0Onp4ZShuLmhvc3QpLHF1ZXJpZXM6KG4ucXVlcmllcz8/W10pLm1hcChjcSksdmlld1F1ZXJpZXM6KG4udmlld1F1ZXJpZXM/P1tdKS5tYXAoY3EpLHByb3ZpZGVyczp2b2lkIDAhPT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBcz8/bnVsbCx1c2VzSW5oZXJpdGFuY2U6bi51c2VzSW5oZXJpdGFuY2U/PyExLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczpuLnVzZXNPbkNoYW5nZXM/PyExfSxkZXBzOm51bGwsdHlwZUFyZ3VtZW50Q291bnQ6MCxmdWxsSW5oZXJpdGFuY2U6ITEsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX19ZnVuY3Rpb24genhlKG49e30pe3JldHVybnthdHRyaWJ1dGVzOmp4ZShuLmF0dHJpYnV0ZXM/P3t9KSxsaXN0ZW5lcnM6bi5saXN0ZW5lcnM/P3t9LHByb3BlcnRpZXM6bi5wcm9wZXJ0aWVzPz97fSxzcGVjaWFsQXR0cmlidXRlczp7Y2xhc3NBdHRyOm4uY2xhc3NBdHRyaWJ1dGUsc3R5bGVBdHRyOm4uc3R5bGVBdHRyaWJ1dGV9fX1mdW5jdGlvbiBqeGUobil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXRbZV09bmV3IERuKG5bZV0pO3JldHVybiB0fWZ1bmN0aW9uIFd4ZShuKXtyZXR1cm57Li4ubix0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiBITihuLHQ9bnVsbCl7cmV0dXJue2tpbmQ6XzAuRGlyZWN0aXZlLGlzQ29tcG9uZW50OnR8fCJjb21wb25lbnQiPT09bi5raW5kLHNlbGVjdG9yOm4uc2VsZWN0b3IsdHlwZTpuZXcgRG4obi50eXBlKSxpbnB1dHM6bi5pbnB1dHM/P1tdLG91dHB1dHM6bi5vdXRwdXRzPz9bXSxleHBvcnRBczpuLmV4cG9ydEFzPz9udWxsfX1mdW5jdGlvbiBZeGUobil7cmV0dXJue2tpbmQ6XzAuUGlwZSxuYW1lOm4ubmFtZSx0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiB2WShuLHQsZSxpLHIpe2xldCBvPXI/RDAuZnJvbUFycmF5KHIpOiRjLHM9bXhlKG4sZSx7cHJlc2VydmVXaGl0ZXNwYWNlczppLGludGVycG9sYXRpb25Db25maWc6b30pO2lmKG51bGwhPT1zLmVycm9ycyl7bGV0IGE9cy5lcnJvcnMubWFwKGw9PmwudG9TdHJpbmcoKSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uIG9mIHRlbXBsYXRlIGZvciAke3R9OiAke2F9YCl9cmV0dXJue3RlbXBsYXRlOnMsaW50ZXJwb2xhdGlvbjpvfX1mdW5jdGlvbiBzMChuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG8zKG5ldyBEbihuW3RdKSwwKX1mdW5jdGlvbiBkcShuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG5ldyBEbihuW3RdKX1mdW5jdGlvbiBwcShuKXtyZXR1cm4gbzMoImZ1bmN0aW9uIj09dHlwZW9mIG4/bmV3IERuKG4pOm5ldyBGYShuPz9udWxsKSwwKX1mdW5jdGlvbiB5WShuKXtsZXQgdD1udWxsIT1uLmF0dHJpYnV0ZSxlPW51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pO3JldHVybiBiWSh0P25ldyBEbihuLmF0dHJpYnV0ZSk6ZSx0LG4uaG9zdCxuLm9wdGlvbmFsLG4uc2VsZixuLnNraXBTZWxmKX1mdW5jdGlvbiBocShuKXtsZXQgdD1uLmF0dHJpYnV0ZT8/ITE7cmV0dXJuIGJZKG51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pLHQsbi5ob3N0Pz8hMSxuLm9wdGlvbmFsPz8hMSxuLnNlbGY/PyExLG4uc2tpcFNlbGY/PyExKX1mdW5jdGlvbiBiWShuLHQsZSxpLHIsbyl7cmV0dXJue3Rva2VuOm4sYXR0cmlidXRlTmFtZVR5cGU6dD9udCgidW5rbm93biIpOm51bGwsaG9zdDplLG9wdGlvbmFsOmksc2VsZjpyLHNraXBTZWxmOm99fWZ1bmN0aW9uIFF4ZShuLHQsZSl7bGV0IGk9ZnVuY3Rpb24obil7bGV0IHQ9e30sZT17fSxpPXt9LHI9e307Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcz1uW29dLGE9by5tYXRjaChCeGUpO2lmKG51bGw9PT1hKXN3aXRjaChvKXtjYXNlImNsYXNzIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJDbGFzcyBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5jbGFzc0F0dHI9czticmVhaztjYXNlInN0eWxlIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJTdHlsZSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5zdHlsZUF0dHI9czticmVhaztkZWZhdWx0OnRbb109InN0cmluZyI9PXR5cGVvZiBzP250KHMpOnN9ZWxzZSBpZihudWxsIT1hWzFdKXtpZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7aVthWzFdXT1zfWVsc2UgaWYobnVsbCE9YVsyXSl7aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiRXZlbnQgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO2VbYVsyXV09c319cmV0dXJue2F0dHJpYnV0ZXM6dCxsaXN0ZW5lcnM6ZSxwcm9wZXJ0aWVzOmksc3BlY2lhbEF0dHJpYnV0ZXM6cn19KGV8fHt9KSxyPWZ1bmN0aW9uKG4sdCl7bGV0IGU9cTEoKTtyZXR1cm4gZS5jcmVhdGVEaXJlY3RpdmVIb3N0RXZlbnRBc3RzKG4ubGlzdGVuZXJzLHQpLGUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsdCksZS5lcnJvcnN9KGksdCk7aWYoci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIubWFwKG89Pm8ubXNnKS5qb2luKCJcbiIpKTtmb3IobGV0IG8gaW4gbiluLmhhc093blByb3BlcnR5KG8pJiZuW29dLmZvckVhY2gocz0+e0t4ZShzKT9pLnByb3BlcnRpZXNbcy5ob3N0UHJvcGVydHlOYW1lfHxvXT1YX2UoInRoaXMiLG8pOlp4ZShzKSYmKGkubGlzdGVuZXJzW3MuZXZlbnROYW1lfHxvXT1gJHtvfSgkeyhzLmFyZ3N8fFtdKS5qb2luKCIsIil9KWApfSk7cmV0dXJuIGl9ZnVuY3Rpb24gS3hlKG4pe3JldHVybiJIb3N0QmluZGluZyI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIFp4ZShuKXtyZXR1cm4iSG9zdExpc3RlbmVyIj09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gSnhlKG4pe3JldHVybiJJbnB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uICR4ZShuKXtyZXR1cm4iT3V0cHV0Ij09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gZnEobil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT57bGV0W2kscl09ZS5zcGxpdCgiOiIsMikubWFwKG89Pm8udHJpbSgpKTtyZXR1cm4gdFtpXT1yfHxpLHR9LHt9KX1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mdWxsPXQ7bGV0IGU9dC5zcGxpdCgiLiIpO3RoaXMubWFqb3I9ZVswXSx0aGlzLm1pbm9yPWVbMV0sdGhpcy5wYXRjaD1lLnNsaWNlKDIpLmpvaW4oIi4iKX19KCIxNC4yLjExIiksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbG9zZWRCeVBhcmVudD0hMSx0aGlzLmlzVm9pZD0hMSx0aGlzLmlnbm9yZUZpcnN0TGY9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITAsdGhpcy5wcmV2ZW50TmFtZXNwYWNlSW5oZXJpdGFuY2U9ITF9cmVxdWlyZUV4dHJhUGFyZW50KHQpe3JldHVybiExfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4hMX1nZXRDb250ZW50VHlwZSgpe3JldHVybiBmbC5QQVJTQUJMRV9EQVRBfX0sKChuPXAwKS5uZ3x8KG4ubmc9e30pKS5cdTAyNzVjb21waWxlckZhY2FkZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodD1uZXcgY2xhc3N7ZXZhbHVhdGVTdGF0ZW1lbnRzKHQsZSxpLHIpe2xldCBvPW5ldyBoTChpKSxzPWN4LmNyZWF0ZVJvb3QoKTtyZXR1cm4gZS5sZW5ndGg+MCYmIWVbMF0uaXNFcXVpdmFsZW50KG50KCJ1c2Ugc3RyaWN0IikudG9TdG10KCkpJiYoZT1bbnQoInVzZSBzdHJpY3QiKS50b1N0bXQoKSwuLi5lXSksby52aXNpdEFsbFN0YXRlbWVudHMoZSxzKSxvLmNyZWF0ZVJldHVyblN0bXQocyksdGhpcy5ldmFsdWF0ZUNvZGUodCxzLG8uZ2V0QXJncygpLHIpfWV2YWx1YXRlQ29kZSh0LGUsaSxyKXtsZXQgbz1gInVzZSBzdHJpY3QiOyR7ZS50b1NvdXJjZSgpfVxuLy8jIHNvdXJjZVVSTD0ke3R9YCxzPVtdLGE9W107Zm9yKGxldCBjIGluIGkpYS5wdXNoKGlbY10pLHMucHVzaChjKTtpZihyKXtsZXQgYz13OSguLi5zLmNvbmNhdCgicmV0dXJuIG51bGw7IikpLnRvU3RyaW5nKCksdT1jLnNsaWNlKDAsYy5pbmRleE9mKCJyZXR1cm4gbnVsbDsiKSkuc3BsaXQoIlxuIikubGVuZ3RoLTE7bys9YFxuJHtlLnRvU291cmNlTWFwR2VuZXJhdG9yKHQsdSkudG9Kc0NvbW1lbnQoKX1gfWxldCBsPXc5KC4uLnMuY29uY2F0KG8pKTtyZXR1cm4gdGhpcy5leGVjdXRlRnVuY3Rpb24obCxhKX1leGVjdXRlRnVuY3Rpb24odCxlKXtyZXR1cm4gdCguLi5lKX19KXt0aGlzLmppdEV2YWx1YXRvcj10LHRoaXMuRmFjdG9yeVRhcmdldD1pYyx0aGlzLlJlc291cmNlTG9hZGVyPVpMLHRoaXMuZWxlbWVudFNjaGVtYVJlZ2lzdHJ5PW5ldyBqMX1jb21waWxlUGlwZSh0LGUsaSl7bGV0IG89Uzkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOm51bGwscGlwZU5hbWU6aS5waXBlTmFtZSxwdXJlOmkucHVyZSxpc1N0YW5kYWxvbmU6aS5pc1N0YW5kYWxvbmV9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVQaXBlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPVM5KHtuYW1lOihuPWkpLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksaW50ZXJuYWxUeXBlOm5ldyBEbihuLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAscGlwZU5hbWU6bi5uYW1lLGRlcHM6bnVsbCxwdXJlOm4ucHVyZT8/ITAsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZUluamVjdGFibGUodCxlLGkpe2xldHtleHByZXNzaW9uOnIsc3RhdGVtZW50czpvfT1nOSh7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LHByb3ZpZGVkSW46cHEoaS5wcm92aWRlZEluKSx1c2VDbGFzczpzMChpLCJ1c2VDbGFzcyIpLHVzZUZhY3Rvcnk6ZHEoaSwidXNlRmFjdG9yeSIpLHVzZVZhbHVlOnMwKGksInVzZVZhbHVlIiksdXNlRXhpc3Rpbmc6czAoaSwidXNlRXhpc3RpbmciKSxkZXBzOmkuZGVwcz8ubWFwKHlZKX0sITApO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocix0LGUsbyl9Y29tcGlsZUluamVjdGFibGVEZWNsYXJhdGlvbih0LGUsaSl7bGV0e2V4cHJlc3Npb246cixzdGF0ZW1lbnRzOm99PWc5KHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOnBxKGkucHJvdmlkZWRJbiksdXNlQ2xhc3M6czAoaSwidXNlQ2xhc3MiKSx1c2VGYWN0b3J5OmRxKGksInVzZUZhY3RvcnkiKSx1c2VWYWx1ZTpzMChpLCJ1c2VWYWx1ZSIpLHVzZUV4aXN0aW5nOnMwKGksInVzZUV4aXN0aW5nIiksZGVwczppLmRlcHM/Lm1hcChocSl9LCEwKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLG8pfWNvbXBpbGVJbmplY3Rvcih0LGUsaSl7bGV0IG89TTkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSkscHJvdmlkZXJzOmkucHJvdmlkZXJzJiZpLnByb3ZpZGVycy5sZW5ndGg+MD9uZXcgRG4oaS5wcm92aWRlcnMpOm51bGwsaW1wb3J0czppLmltcG9ydHMubWFwKHM9Pm5ldyBEbihzKSl9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVJbmplY3RvckRlY2xhcmF0aW9uKHQsZSxpKXtsZXQgcj17bmFtZToobj1pKS50eXBlLm5hbWUsdHlwZTphcyhuLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4obi50eXBlKSxwcm92aWRlcnM6dm9pZCAwIT09bi5wcm92aWRlcnMmJm4ucHJvdmlkZXJzLmxlbmd0aD4wP25ldyBEbihuLnByb3ZpZGVycyk6bnVsbCxpbXBvcnRzOnZvaWQgMCE9PW4uaW1wb3J0cz9uLmltcG9ydHMubWFwKHQ9Pm5ldyBEbih0KSk6W119LG89TTkocik7dmFyIG47cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlTmdNb2R1bGUodCxlLGkpe2xldCBvPVl2ZSh7dHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSxhZGphY2VudFR5cGU6bmV3IERuKGkudHlwZSksYm9vdHN0cmFwOmkuYm9vdHN0cmFwLm1hcChhcyksZGVjbGFyYXRpb25zOmkuZGVjbGFyYXRpb25zLm1hcChhcykscHVibGljRGVjbGFyYXRpb25UeXBlczpudWxsLGltcG9ydHM6aS5pbXBvcnRzLm1hcChhcyksaW5jbHVkZUltcG9ydFR5cGVzOiEwLGV4cG9ydHM6aS5leHBvcnRzLm1hcChhcyksc2VsZWN0b3JTY29wZU1vZGU6ZzAuSW5saW5lLGNvbnRhaW5zRm9yd2FyZERlY2xzOiExLHNjaGVtYXM6aS5zY2hlbWFzP2kuc2NoZW1hcy5tYXAoYXMpOm51bGwsaWQ6aS5pZD9uZXcgRG4oaS5pZCk6bnVsbH0pO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZU5nTW9kdWxlRGVjbGFyYXRpb24odCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyB5cDtyZXR1cm4gdC5zZXQoInR5cGUiLG5ldyBEbihuLnR5cGUpKSx2b2lkIDAhPT1uLmJvb3RzdHJhcCYmdC5zZXQoImJvb3RzdHJhcCIsbmV3IERuKG4uYm9vdHN0cmFwKSksdm9pZCAwIT09bi5kZWNsYXJhdGlvbnMmJnQuc2V0KCJkZWNsYXJhdGlvbnMiLG5ldyBEbihuLmRlY2xhcmF0aW9ucykpLHZvaWQgMCE9PW4uaW1wb3J0cyYmdC5zZXQoImltcG9ydHMiLG5ldyBEbihuLmltcG9ydHMpKSx2b2lkIDAhPT1uLmV4cG9ydHMmJnQuc2V0KCJleHBvcnRzIixuZXcgRG4obi5leHBvcnRzKSksdm9pZCAwIT09bi5zY2hlbWFzJiZ0LnNldCgic2NoZW1hcyIsbmV3IERuKG4uc2NoZW1hcykpLHZvaWQgMCE9PW4uaWQmJnQuc2V0KCJpZCIsbmV3IERuKG4uaWQpKSx4bihLLmRlZmluZU5nTW9kdWxlKS5jYWxsRm4oW3QudG9MaXRlcmFsTWFwKCldKX0oaSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLHQsZSxbXSl9Y29tcGlsZURpcmVjdGl2ZSh0LGUsaSl7bGV0IHI9dXEoaSk7cmV0dXJuIHRoaXMuY29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxyKX1jb21waWxlRGlyZWN0aXZlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPV9ZKGksdGhpcy5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkRpcmVjdGl2ZSIsaS50eXBlLm5hbWUsZSkpO3JldHVybiB0aGlzLmNvbXBpbGVEaXJlY3RpdmVGcm9tTWV0YSh0LGUsbyl9Y29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxpKXtsZXQgcj1uZXcgeDEscz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9cFkobix0LGUpO2hZKGksbik7bGV0IHI9eG4oSy5kZWZpbmVEaXJlY3RpdmUpLmNhbGxGbihbaS50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxvPWZ1bmN0aW9uKG4pe2xldCB0PW1ZKG4pO3JldHVybiB0LnB1c2goZGQpLHQucHVzaChOYShudChuLmlzU3RhbmRhbG9uZSkpKSxOYSh4bihLLkRpcmVjdGl2ZURlY2xhcmF0aW9uLHQpKX0obik7cmV0dXJue2V4cHJlc3Npb246cix0eXBlOm8sc3RhdGVtZW50czpbXX19KGkscixxMSgpKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHMuZXhwcmVzc2lvbix0LGUsci5zdGF0ZW1lbnRzKX1jb21waWxlQ29tcG9uZW50KHQsZSxpKXtsZXR7dGVtcGxhdGU6cixpbnRlcnBvbGF0aW9uOm99PXZZKGkudGVtcGxhdGUsaS5uYW1lLGUsaS5wcmVzZXJ2ZVdoaXRlc3BhY2VzLGkuaW50ZXJwb2xhdGlvbikscz17Li4uaSwuLi51cShpKSxzZWxlY3RvcjppLnNlbGVjdG9yfHx0aGlzLmVsZW1lbnRTY2hlbWFSZWdpc3RyeS5nZXREZWZhdWx0Q29tcG9uZW50RWxlbWVudE5hbWUoKSx0ZW1wbGF0ZTpyLGRlY2xhcmF0aW9uczppLmRlY2xhcmF0aW9ucy5tYXAoV3hlKSxkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZTowLHN0eWxlczpbLi4uaS5zdHlsZXMsLi4uci5zdHlsZXNdLGVuY2Fwc3VsYXRpb246aS5lbmNhcHN1bGF0aW9uLGludGVycG9sYXRpb246byxjaGFuZ2VEZXRlY3Rpb246aS5jaGFuZ2VEZXRlY3Rpb24sYW5pbWF0aW9uczpudWxsIT1pLmFuaW1hdGlvbnM/bmV3IERuKGkuYW5pbWF0aW9ucyk6bnVsbCx2aWV3UHJvdmlkZXJzOm51bGwhPWkudmlld1Byb3ZpZGVycz9uZXcgRG4oaS52aWV3UHJvdmlkZXJzKTpudWxsLHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiIiLGkxOG5Vc2VFeHRlcm5hbElkczohMH07cmV0dXJuIHRoaXMuY29tcGlsZUNvbXBvbmVudEZyb21NZXRhKHQsYG5nOi8vLyR7aS5uYW1lfS5qc2Ascyl9Y29tcGlsZUNvbXBvbmVudERlY2xhcmF0aW9uKHQsZSxpKXtsZXQgbz1mdW5jdGlvbihuLHQsZSl7bGV0e3RlbXBsYXRlOmksaW50ZXJwb2xhdGlvbjpyfT12WShuLnRlbXBsYXRlLG4udHlwZS5uYW1lLGUsbi5wcmVzZXJ2ZVdoaXRlc3BhY2VzPz8hMSxuLmludGVycG9sYXRpb24pLG89W107aWYobi5kZXBlbmRlbmNpZXMpZm9yKGxldCBzIG9mIG4uZGVwZW5kZW5jaWVzKXN3aXRjaChzLmtpbmQpe2Nhc2UiZGlyZWN0aXZlIjpjYXNlImNvbXBvbmVudCI6by5wdXNoKEhOKHMpKTticmVhaztjYXNlInBpcGUiOm8ucHVzaChZeGUocykpfWVsc2Uobi5jb21wb25lbnRzfHxuLmRpcmVjdGl2ZXN8fG4ucGlwZXMpJiYobi5jb21wb25lbnRzJiZvLnB1c2goLi4ubi5jb21wb25lbnRzLm1hcChzPT5ITihzLCEwKSkpLG4uZGlyZWN0aXZlcyYmby5wdXNoKC4uLm4uZGlyZWN0aXZlcy5tYXAocz0+SE4ocykpKSxuLnBpcGVzJiZvLnB1c2goLi4uZnVuY3Rpb24obil7cmV0dXJuIG4/T2JqZWN0LmtleXMobikubWFwKHQ9Pih7a2luZDpfMC5QaXBlLG5hbWU6dCx0eXBlOm5ldyBEbihuW3RdKX0pKTpbXX0obi5waXBlcykpKTtyZXR1cm57Li4uX1kobix0KSx0ZW1wbGF0ZTppLHN0eWxlczpuLnN0eWxlcz8/W10sZGVjbGFyYXRpb25zOm8sdmlld1Byb3ZpZGVyczp2b2lkIDAhPT1uLnZpZXdQcm92aWRlcnM/bmV3IERuKG4udmlld1Byb3ZpZGVycyk6bnVsbCxhbmltYXRpb25zOnZvaWQgMCE9PW4uYW5pbWF0aW9ucz9uZXcgRG4obi5hbmltYXRpb25zKTpudWxsLGNoYW5nZURldGVjdGlvbjpuLmNoYW5nZURldGVjdGlvbj8/cWIuRGVmYXVsdCxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbj8/b2QuRW11bGF0ZWQsaW50ZXJwb2xhdGlvbjpyLGRlY2xhcmF0aW9uTGlzdEVtaXRNb2RlOjIscmVsYXRpdmVDb250ZXh0RmlsZVBhdGg6IiIsaTE4blVzZUV4dGVybmFsSWRzOiEwfX0oaSx0aGlzLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiQ29tcG9uZW50IixpLnR5cGUubmFtZSxlKSxlKTtyZXR1cm4gdGhpcy5jb21waWxlQ29tcG9uZW50RnJvbU1ldGEodCxlLG8pfWNvbXBpbGVDb21wb25lbnRGcm9tTWV0YSh0LGUsaSl7bGV0IHI9bmV3IHgxLHM9ZnVuY3Rpb24obix0LGUpe2xldCBpPXBZKG4sdCxlKTtoWShpLG4pO2xldCByPW4uc2VsZWN0b3ImJnVkLnBhcnNlKG4uc2VsZWN0b3IpLG89ciYmclswXTtpZihvKXtsZXQgXz1vLmdldEF0dHJzKCk7Xy5sZW5ndGgmJmkuc2V0KCJhdHRycyIsdC5nZXRDb25zdExpdGVyYWwoY3IoXy5tYXAoeT0+bnQobnVsbCE9eT95OnZvaWQgMCkpKSwhMCkpfWxldCBzPW4ubmFtZSxhPXM/YCR7c31fVGVtcGxhdGVgOm51bGwsbD1uLmNoYW5nZURldGVjdGlvbixjPW4udGVtcGxhdGUsdT1uZXcgT3godCxCMC5jcmVhdGVSb290U2NvcGUoKSwwLHMsbnVsbCxudWxsLGEsSy5uYW1lc3BhY2VIVE1MLG4ucmVsYXRpdmVDb250ZXh0RmlsZVBhdGgsbi5pMThuVXNlRXh0ZXJuYWxJZHMpLGQ9dS5idWlsZFRlbXBsYXRlRnVuY3Rpb24oYy5ub2RlcyxbXSkscD11LmdldE5nQ29udGVudFNlbGVjdG9ycygpO3AmJmkuc2V0KCJuZ0NvbnRlbnRTZWxlY3RvcnMiLHApLGkuc2V0KCJkZWNscyIsbnQodS5nZXRDb25zdENvdW50KCkpKSxpLnNldCgidmFycyIsbnQodS5nZXRWYXJDb3VudCgpKSk7bGV0e2NvbnN0RXhwcmVzc2lvbnM6aCxwcmVwYXJlU3RhdGVtZW50czpmfT11LmdldENvbnN0cygpO2lmKGgubGVuZ3RoPjApe2xldCBfPWNyKGgpO2YubGVuZ3RoPjAmJihfPU9zKFtdLFsuLi5mLG5ldyB1byhfKV0pKSxpLnNldCgiY29uc3RzIixfKX1pZihpLnNldCgidGVtcGxhdGUiLGQpLG4uZGVjbGFyYXRpb25zLmxlbmd0aD4wJiZpLnNldCgiZGVwZW5kZW5jaWVzIixmdW5jdGlvbihuLHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIG47Y2FzZSAxOnJldHVybiBPcyhbXSxbbmV3IHVvKG4pXSk7Y2FzZSAyOmxldCBlPW4ucHJvcCgibWFwIikuY2FsbEZuKFt4bihLLnJlc29sdmVGb3J3YXJkUmVmKV0pO3JldHVybiBPcyhbXSxbbmV3IHVvKGUpXSl9fShjcihuLmRlY2xhcmF0aW9ucy5tYXAoXz0+Xy50eXBlKSksbi5kZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSkpLG51bGw9PT1uLmVuY2Fwc3VsYXRpb24mJihuLmVuY2Fwc3VsYXRpb249b2QuRW11bGF0ZWQpLG4uc3R5bGVzJiZuLnN0eWxlcy5sZW5ndGgpe2xldCB5PShuLmVuY2Fwc3VsYXRpb249PW9kLkVtdWxhdGVkP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmljdFN0eWxpbmc9ITB9c2hpbUNzc1RleHQodCxlLGk9IiIpe2xldCByPXQubWF0Y2goZ3llKXx8W107cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShmeWUsIiIpfSh0KSx0PXRoaXMuX2luc2VydERpcmVjdGl2ZXModCksW3RoaXMuX3Njb3BlQ3NzVGV4dCh0LGUsaSksLi4ucl0uam9pbigiXG4iKX1faW5zZXJ0RGlyZWN0aXZlcyh0KXtyZXR1cm4gdD10aGlzLl9pbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQodCksdGhpcy5faW5zZXJ0UG9seWZpbGxSdWxlc0luQ3NzVGV4dCh0KX1faW5zZXJ0UG9seWZpbGxEaXJlY3RpdmVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uob3llLGZ1bmN0aW9uKC4uLmUpe3JldHVybiBlWzJdKyJ7In0pfV9pbnNlcnRQb2x5ZmlsbFJ1bGVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uoc3llLCguLi5lKT0+e2xldCBpPWVbMF0ucmVwbGFjZShlWzFdLCIiKS5yZXBsYWNlKGVbMl0sIiIpO3JldHVybiBlWzRdK2l9KX1fc2NvcGVDc3NUZXh0KHQsZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpO3JldHVybiB0PXRoaXMuX2luc2VydFBvbHlmaWxsSG9zdEluQ3NzVGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRDb2xvbkhvc3QodCksdD10aGlzLl9jb252ZXJ0Q29sb25Ib3N0Q29udGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRTaGFkb3dET01TZWxlY3RvcnModCksZSYmKHQ9dGhpcy5fc2NvcGVTZWxlY3RvcnModCxlLGkpKSwodD10KyJcbiIrcikudHJpbSgpfV9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpe2xldCBpLGU9IiI7Zm9yKFQ5Lmxhc3RJbmRleD0wO251bGwhPT0oaT1UOS5leGVjKHQpKTspZSs9aVswXS5yZXBsYWNlKGlbMl0sIiIpLnJlcGxhY2UoaVsxXSxpWzRdKSsiXG5cbiI7cmV0dXJuIGV9X2NvbnZlcnRDb2xvbkhvc3QodCl7cmV0dXJuIHQucmVwbGFjZShheWUsKGUsaSxyKT0+e2lmKGkpe2xldCBvPVtdLHM9aS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhIG9mIHMpe2lmKCFhKWJyZWFrO2xldCBsPXNmK2EucmVwbGFjZShrMSwiIikrcjtvLnB1c2gobCl9cmV0dXJuIG8uam9pbigiLCIpfXJldHVybiBzZityfSl9X2NvbnZlcnRDb2xvbkhvc3RDb250ZXh0KHQpe3JldHVybiB0LnJlcGxhY2UobHllLGU9PntsZXQgcixpPVtbXV07Zm9yKDtyPWN5ZS5leGVjKGUpOyl7bGV0IG89KHJbMV0/PyIiKS50cmltKCkuc3BsaXQoIiwiKS5tYXAoYT0+YS50cmltKCkpLmZpbHRlcihhPT4iIiE9PWEpLHM9aS5sZW5ndGg7TXllKGksby5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWZvcihsZXQgbD0wO2w8cztsKyspaVtsK2Eqc10ucHVzaChvW2FdKTtlPXJbMl19cmV0dXJuIGkubWFwKG89PmZ1bmN0aW9uKG4sdCl7bGV0IGU9c2Y7ZDAubGFzdEluZGV4PTA7bGV0IGk9ZDAudGVzdCh0KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuIGUrdDtsZXQgcj1bbi5wb3AoKXx8IiJdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBvPXIubGVuZ3RoLHM9bi5wb3AoKTtmb3IobGV0IGE9MDthPG87YSsrKXtsZXQgbD1yW2FdO3JbMipvK2FdPWwrIiAiK3MscltvK2FdPXMrIiAiK2wsclthXT1zK2x9fXJldHVybiByLm1hcChvPT5pP2Ake299JHt0fWA6YCR7b30ke2V9JHt0fSwgJHtvfSAke2V9JHt0fWApLmpvaW4oIiwiKX0obyxlKSkuam9pbigiLCAiKX0pfV9jb252ZXJ0U2hhZG93RE9NU2VsZWN0b3JzKHQpe3JldHVybiB1eWUucmVkdWNlKChlLGkpPT5lLnJlcGxhY2UoaSwiICIpLHQpfV9zY29wZVNlbGVjdG9ycyh0LGUsaSl7cmV0dXJuIEk5KHQscj0+e2xldCBvPXIuc2VsZWN0b3Iscz1yLmNvbnRlbnQ7cmV0dXJuIkAiIT09ci5zZWxlY3RvclswXT9vPXRoaXMuX3Njb3BlU2VsZWN0b3Ioci5zZWxlY3RvcixlLGksdGhpcy5zdHJpY3RTdHlsaW5nKTpyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBtZWRpYSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBzdXBwb3J0cyIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBkb2N1bWVudCIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBsYXllciIpP3M9dGhpcy5fc2NvcGVTZWxlY3RvcnMoci5jb250ZW50LGUsaSk6KHIuc2VsZWN0b3Iuc3RhcnRzV2l0aCgiQGZvbnQtZmFjZSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBwYWdlIikpJiYocz10aGlzLl9zdHJpcFNjb3BpbmdTZWxlY3RvcnMoci5jb250ZW50KSksbmV3IER4KG8scyl9KX1fc3RyaXBTY29waW5nU2VsZWN0b3JzKHQpe3JldHVybiBJOSh0LGU9PntsZXQgaT1lLnNlbGVjdG9yLnJlcGxhY2UoQTksIiAiKS5yZXBsYWNlKEQ5LCIgIik7cmV0dXJuIG5ldyBEeChpLGUuY29udGVudCl9KX1fc2NvcGVTZWxlY3Rvcih0LGUsaSxyKXtyZXR1cm4gdC5zcGxpdCgiLCIpLm1hcChvPT5vLnRyaW0oKS5zcGxpdChBOSkpLm1hcChvPT57bGV0W3MsLi4uYV09bztyZXR1cm5bKGM9PnRoaXMuX3NlbGVjdG9yTmVlZHNTY29waW5nKGMsZSk/cj90aGlzLl9hcHBseVN0cmljdFNlbGVjdG9yU2NvcGUoYyxlLGkpOnRoaXMuX2FwcGx5U2VsZWN0b3JTY29wZShjLGUsaSk6YykocyksLi4uYV0uam9pbigiICIpfSkuam9pbigiLCAiKX1fc2VsZWN0b3JOZWVkc1Njb3BpbmcodCxlKXtyZXR1cm4hdGhpcy5fbWFrZVNjb3BlTWF0Y2hlcihlKS50ZXN0KHQpfV9tYWtlU2NvcGVNYXRjaGVyKHQpe3JldHVybiB0PXQucmVwbGFjZSgvXFsvZywiXFxbIikucmVwbGFjZSgvXF0vZywiXFxdIiksbmV3IFJlZ0V4cCgiXigiK3QrIikoWz5cXHN+K1suLHs6XVtcXHNcXFNdKik/JCIsIm0iKX1fYXBwbHlTZWxlY3RvclNjb3BlKHQsZSxpKXtyZXR1cm4gdGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKX1fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKXtpZihkMC5sYXN0SW5kZXg9MCxkMC50ZXN0KHQpKXtsZXQgcj10aGlzLnN0cmljdFN0eWxpbmc/YFske2l9XWA6ZTtyZXR1cm4gdC5yZXBsYWNlKEQ5LChvLHMpPT5zLnJlcGxhY2UoLyhbXjpdKikoOiopKC4qKS8sKGEsbCxjLHUpPT5sK3IrYyt1KSkucmVwbGFjZShkMCxyKyIgIil9cmV0dXJuIGUrIiAiK3R9X2FwcGx5U3RyaWN0U2VsZWN0b3JTY29wZSh0LGUsaSl7bGV0IHUsbz0iWyIrKGU9ZS5yZXBsYWNlKC9cW2lzPShbXlxdXSopXF0vZywobSwuLi5DKT0+Q1swXSkpKyJdIixzPW09PntsZXQgQz1tLnRyaW0oKTtpZighQylyZXR1cm4iIjtpZihtLmluZGV4T2Yoc2YpPi0xKUM9dGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKG0sZSxpKTtlbHNle2xldCBfPW0ucmVwbGFjZShkMCwiIik7aWYoXy5sZW5ndGg+MCl7bGV0IHk9Xy5tYXRjaCgvKFteOl0qKSg6KikoLiopLyk7eSYmKEM9eVsxXStvK3lbMl0reVszXSl9fXJldHVybiBDfSxhPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYWNlaG9sZGVycz1bXSx0aGlzLmluZGV4PTAsdD10aGlzLl9lc2NhcGVSZWdleE1hdGNoZXModCwvKFxbW15cXV0qXF0pL2cpLHQ9dGhpcy5fZXNjYXBlUmVnZXhNYXRjaGVzKHQsLyhcXC4pL2cpLHRoaXMuX2NvbnRlbnQ9dC5yZXBsYWNlKC8oOm50aC1bLVx3XSspKFwoW14pXStcKSkvZywoZSxpLHIpPT57bGV0IG89YF9fcGgtJHt0aGlzLmluZGV4fV9fYDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMucHVzaChyKSx0aGlzLmluZGV4KyssaStvfSl9cmVzdG9yZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9fX3BoLShcZCspX18vZywoZSxpKT0+dGhpcy5wbGFjZWhvbGRlcnNbK2ldKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9X2VzY2FwZVJlZ2V4TWF0Y2hlcyh0LGUpe3JldHVybiB0LnJlcGxhY2UoZSwoaSxyKT0+e2xldCBvPWBfX3BoLSR7dGhpcy5pbmRleH1fX2A7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLnB1c2gociksdGhpcy5pbmRleCsrLG99KX19KHQpLGw9IiIsYz0wLGQ9LyggfD58XCt8fig/IT0pKVxzKi9nLGg9ISgodD1hLmNvbnRlbnQoKSkuaW5kZXhPZihzZik+LTEpO2Zvcig7bnVsbCE9PSh1PWQuZXhlYyh0KSk7KXtsZXQgbT11WzFdLEM9dC5zbGljZShjLHUuaW5kZXgpLnRyaW0oKTtoPWh8fEMuaW5kZXhPZihzZik+LTEsbCs9YCR7aD9zKEMpOkN9ICR7bX0gYCxjPWQubGFzdEluZGV4fWxldCBmPXQuc3Vic3RyaW5nKGMpO3JldHVybiBoPWh8fGYuaW5kZXhPZihzZik+LTEsbCs9aD9zKGYpOmYsYS5yZXN0b3JlKGwpfV9pbnNlcnRQb2x5ZmlsbEhvc3RJbkNzc1RleHQodCl7cmV0dXJuIHQucmVwbGFjZShoeWUsZzMpLnJlcGxhY2UocHllLGsxKX19O3JldHVybiBuLm1hcChyPT5pLnNoaW1Dc3NUZXh0KHIsIl9uZ2NvbnRlbnQtJUNPTVAlIiwiX25naG9zdC0lQ09NUCUiKSl9KG4uc3R5bGVzKTpuLnN0eWxlcykucmVkdWNlKChJLEEpPT4oQS50cmltKCkubGVuZ3RoPjAmJkkucHVzaCh0LmdldENvbnN0TGl0ZXJhbChudChBKSkpLEkpLFtdKTt5Lmxlbmd0aD4wJiZpLnNldCgic3R5bGVzIixjcih5KSl9ZWxzZSBuLmVuY2Fwc3VsYXRpb249PT1vZC5FbXVsYXRlZCYmKG4uZW5jYXBzdWxhdGlvbj1vZC5Ob25lKTtuLmVuY2Fwc3VsYXRpb24hPT1vZC5FbXVsYXRlZCYmaS5zZXQoImVuY2Fwc3VsYXRpb24iLG50KG4uZW5jYXBzdWxhdGlvbikpLG51bGwhPT1uLmFuaW1hdGlvbnMmJmkuc2V0KCJkYXRhIixtbChbe2tleToiYW5pbWF0aW9uIix2YWx1ZTpuLmFuaW1hdGlvbnMscXVvdGVkOiExfV0pKSxudWxsIT1sJiZsIT09cWIuRGVmYXVsdCYmaS5zZXQoImNoYW5nZURldGVjdGlvbiIsbnQobCkpO2xldCBtPXhuKEsuZGVmaW5lQ29tcG9uZW50KS5jYWxsRm4oW2kudG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksQz1mdW5jdGlvbihuKXtsZXQgdD1tWShuKTtyZXR1cm4gdC5wdXNoKEtMKG4udGVtcGxhdGUubmdDb250ZW50U2VsZWN0b3JzKSksdC5wdXNoKE5hKG50KG4uaXNTdGFuZGFsb25lKSkpLE5hKHhuKEsuQ29tcG9uZW50RGVjbGFyYXRpb24sdCkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjptLHR5cGU6QyxzdGF0ZW1lbnRzOltdfX0oaSxyLHExKGkuaW50ZXJwb2xhdGlvbikpO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocy5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5KHQsZSxpKXtsZXQgcj1hZih7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LGRlcHM6KG49aS5kZXBzLG51bGw9PW4/bnVsbDpuLm1hcCh5WSkpLHRhcmdldDppLnRhcmdldH0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oci5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5RGVjbGFyYXRpb24odCxlLGkpe2xldCByPWFmKHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOkFycmF5LmlzQXJyYXkoaS5kZXBzKT9pLmRlcHMubWFwKGhxKTppLmRlcHMsdGFyZ2V0OmkudGFyZ2V0fSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y3JlYXRlUGFyc2VTb3VyY2VTcGFuKHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCByPW5ldyBJMSgiIixgaW4gJHtufSAke3R9IGluICR7ZX1gKTtyZXR1cm4gbmV3IFRvKG5ldyB3ZihyLC0xLC0xLC0xKSxuZXcgd2YociwtMSwtMSwtMSkpfSh0LGUsaSl9aml0RXhwcmVzc2lvbih0LGUsaSxyKXtsZXQgbz1bLi4ucixuZXcgYXUoIiRkZWYiLHQsdm9pZCAwLGthLkV4cG9ydGVkKV07cmV0dXJuIHRoaXMuaml0RXZhbHVhdG9yLmV2YWx1YXRlU3RhdGVtZW50cyhpLG8sbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY29udGV4dD10fXJlc29sdmVFeHRlcm5hbFJlZmVyZW5jZSh0KXtpZigiQGFuZ3VsYXIvY29yZSIhPT10Lm1vZHVsZU5hbWUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHRlcm5hbCByZWZlcmVuY2UgdG8gJHt0Lm1vZHVsZU5hbWV9LCBvbmx5IHJlZmVyZW5jZXMgdG8gQGFuZ3VsYXIvY29yZSBhcmUgc3VwcG9ydGVkLmApO2lmKCF0aGlzLmNvbnRleHQuaGFzT3duUHJvcGVydHkodC5uYW1lKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHZhbHVlIHByb3ZpZGVkIGZvciBAYW5ndWxhci9jb3JlIHN5bWJvbCAnJHt0Lm5hbWV9Jy5gKTtyZXR1cm4gdGhpcy5jb250ZXh0W3QubmFtZV19fShlKSwhMCkuJGRlZn19O3ZhciBaMT1mdW5jdGlvbihuLC4uLnQpe2lmKFoxLnRyYW5zbGF0ZSl7bGV0IGk9WjEudHJhbnNsYXRlKG4sdCk7bj1pWzBdLHQ9aVsxXX1sZXQgZT14WShuWzBdLG4ucmF3WzBdKTtmb3IobGV0IGk9MTtpPG4ubGVuZ3RoO2krKyllKz10W2ktMV0reFkobltpXSxuLnJhd1tpXSk7cmV0dXJuIGV9O2Z1bmN0aW9uIHhZKG4sdCl7cmV0dXJuIjoiPT09dC5jaGFyQXQoMCk/bi5zdWJzdHJpbmcoZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MSxpPTE7ZTxuLmxlbmd0aDtlKyssaSsrKWlmKCJcXCI9PT10W2ldKWkrKztlbHNlIGlmKCI6Ij09PW5bZV0pcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnRlcm1pbmF0ZWQgJGxvY2FsaXplIG1ldGFkYXRhIGJsb2NrIGluICIke3R9Ii5gKX0obix0KSsxKTpufSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKS4kbG9jYWxpemU9WjE7dmFyIHczPW51bGw7ZnVuY3Rpb24gZ2woKXtyZXR1cm4gdzN9dmFyIHNUPWNsYXNze30sQnQ9bmV3IHNlKCJEb2N1bWVudFRva2VuIiksUlk9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFIoT1kpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtuZXcgc2UoIkxvY2F0aW9uIEluaXRpYWxpemVkIik7dmFyIE9ZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSWXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX2RvYz1lLHRoaXMuX2luaXQoKX1faW5pdCgpe3RoaXMubG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIGdsKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKGUpe2xldCBpPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGUpfW9uSGFzaENoYW5nZShlKXtsZXQgaT1nbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhvc3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoZSl7dGhpcy5sb2NhdGlvbi5wYXRobmFtZT1lfXB1c2hTdGF0ZShlLGkscil7d1koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZShlLGkscik6dGhpcy5sb2NhdGlvbi5oYXNoPXJ9cmVwbGFjZVN0YXRlKGUsaSxyKXt3WSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGUsaSxyKTp0aGlzLmxvY2F0aW9uLmhhc2g9cn1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2hpc3RvcnkuZ28oZSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgT1koUihCdCkpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtmdW5jdGlvbiB3WSgpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfWZ1bmN0aW9uIGtZKG4sdCl7aWYoMD09bi5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09dC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9MDtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpJiZlKyssdC5zdGFydHNXaXRoKCIvIikmJmUrKywyPT1lP24rdC5zdWJzdHJpbmcoMSk6MT09ZT9uK3Q6bisiLyIrdH1mdW5jdGlvbiBNWShuKXtsZXQgdD1uLm1hdGNoKC8jfFw/fCQvKSxlPXQmJnQuaW5kZXh8fG4ubGVuZ3RoO3JldHVybiBuLnNsaWNlKDAsZS0oIi8iPT09bltlLTFdPzE6MCkpK24uc2xpY2UoZSl9ZnVuY3Rpb24gSWYobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/Ij8iK246bn12YXIgRDM9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFNvKGNDZSl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbENlPW5ldyBzZSgiYXBwQmFzZUhyZWYiKSxjQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEQze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9aT8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/U28oQnQpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBrWSh0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2xldCBpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrSWYodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiByJiZlP2Ake2l9JHtyfWA6aX1wdXNoU3RhdGUoZSxpLHIsbyl7bGV0IHM9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitJZihvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoZSxpLHMpfXJlcGxhY2VTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK0lmKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLGkscyl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSWSksUihsQ2UsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEh4PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fc3ViamVjdD1uZXcgRyx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1lO2xldCBpPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj1NWShTWShpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKHI9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpyLnN0YXRlLHR5cGU6ci50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChlPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGUpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oZSxpPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrSWYoaSkpfW5vcm1hbGl6ZShlKXtyZXR1cm4gbi5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmdC5zdGFydHNXaXRoKG4pP3Quc3Vic3RyaW5nKG4ubGVuZ3RoKTp0fSh0aGlzLl9iYXNlSHJlZixTWShlKSkpfXByZXBhcmVFeHRlcm5hbFVybChlKXtyZXR1cm4gZSYmIi8iIT09ZVswXSYmKGU9Ii8iK2UpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGUpfWdvKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9cmVwbGFjZVN0YXRlKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGUpfW9uVXJsQ2hhbmdlKGUpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChlKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb258fCh0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5zdWJzY3JpYmUoaT0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhpLnVybCxpLnN0YXRlKX0pKSwoKT0+e2xldCBpPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGUpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZT0iIixpKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChyPT5yKGUsaSkpfXN1YnNjcmliZShlLGkscil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6aSxjb21wbGV0ZTpyfSl9fXJldHVybiBuLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPUlmLG4uam9pbldpdGhTbGFzaD1rWSxuLnN0cmlwVHJhaWxpbmdTbGFzaD1NWSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoRDMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEh4KFIoRDMpKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBTWShuKXtyZXR1cm4gbi5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIHJUPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EZWNpbWFsPTBdPSJEZWNpbWFsIixuW24uUGVyY2VudD0xXT0iUGVyY2VudCIsbltuLkN1cnJlbmN5PTJdPSJDdXJyZW5jeSIsbltuLlNjaWVudGlmaWM9M109IlNjaWVudGlmaWMifShyVHx8KHJUPXt9KSksclQpKSgpLEpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5Gb3JtYXQ9MF09IkZvcm1hdCIsbltuLlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUifShKb3x8KEpvPXt9KSksSm8pKSgpLCRpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OYXJyb3c9MF09Ik5hcnJvdyIsbltuLkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsbltuLldpZGU9Ml09IldpZGUiLG5bbi5TaG9ydD0zXT0iU2hvcnQifSgkaXx8KCRpPXt9KSksJGkpKSgpLGtzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5NZWRpdW09MV09Ik1lZGl1bSIsbltuLkxvbmc9Ml09IkxvbmciLG5bbi5GdWxsPTNdPSJGdWxsIn0oa3N8fChrcz17fSkpLGtzKSkoKSxscz0oKCk9PihmdW5jdGlvbihuKXtuW24uRGVjaW1hbD0wXT0iRGVjaW1hbCIsbltuLkdyb3VwPTFdPSJHcm91cCIsbltuLkxpc3Q9Ml09Ikxpc3QiLG5bbi5QZXJjZW50U2lnbj0zXT0iUGVyY2VudFNpZ24iLG5bbi5QbHVzU2lnbj00XT0iUGx1c1NpZ24iLG5bbi5NaW51c1NpZ249NV09Ik1pbnVzU2lnbiIsbltuLkV4cG9uZW50aWFsPTZdPSJFeHBvbmVudGlhbCIsbltuLlN1cGVyc2NyaXB0aW5nRXhwb25lbnQ9N109IlN1cGVyc2NyaXB0aW5nRXhwb25lbnQiLG5bbi5QZXJNaWxsZT04XT0iUGVyTWlsbGUiLG5bbi5JbmZpbml0eT05XT0iSW5maW5pdHkiLG5bbi5OYU49MTBdPSJOYU4iLG5bbi5UaW1lU2VwYXJhdG9yPTExXT0iVGltZVNlcGFyYXRvciIsbltuLkN1cnJlbmN5RGVjaW1hbD0xMl09IkN1cnJlbmN5RGVjaW1hbCIsbltuLkN1cnJlbmN5R3JvdXA9MTNdPSJDdXJyZW5jeUdyb3VwIn0obHN8fChscz17fSkpLGxzKSkoKTtmdW5jdGlvbiBKMShuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlRm9ybWF0XSx0KX1mdW5jdGlvbiAkMShuLHQpe3JldHVybiBfbCh0YShuKVtici5UaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlVGltZUZvcm1hdF0sdCl9ZnVuY3Rpb24gaGQobix0KXtsZXQgZT10YShuKSxpPWVbYnIuTnVtYmVyU3ltYm9sc11bdF07aWYodHlwZW9mIGk+InUiKXtpZih0PT09bHMuQ3VycmVuY3lEZWNpbWFsKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkRlY2ltYWxdO2lmKHQ9PT1scy5DdXJyZW5jeUdyb3VwKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkdyb3VwXX1yZXR1cm4gaX1mdW5jdGlvbiBGWShuKXtpZighbltici5FeHRyYURhdGFdKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBleHRyYSBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJHtuW2JyLkxvY2FsZUlkXX0iLiBVc2UgInJlZ2lzdGVyTG9jYWxlRGF0YSIgdG8gbG9hZCBuZXcgZGF0YS4gU2VlIHRoZSAiSTE4biBndWlkZSIgb24gYW5ndWxhci5pbyB0byBrbm93IG1vcmUuYCl9ZnVuY3Rpb24gX2wobix0KXtmb3IobGV0IGU9dDtlPi0xO2UtLSlpZih0eXBlb2YgbltlXTwidSIpcmV0dXJuIG5bZV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIHYzKG4pe2xldFt0LGVdPW4uc3BsaXQoIjoiKTtyZXR1cm57aG91cnM6K3QsbWludXRlczorZX19dmFyIGJDZT0vXihcZHs0LH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86XC4oXGQrKSk/KT8pPyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvLEJ4PXt9LHhDZT0vKCg/OlteQkVHSExNT1NXWVphYmNkaG1zd3l6J10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGN7MSw2fXxhezEsNX18YnsxLDV9fEJ7MSw1fXxoezEsMn18SHsxLDJ9fG17MSwyfXxzezEsMn18U3sxLDN9fHp7MSw0fXxaezEsNX18T3sxLDR9KSkoW1xzXFNdKikvLHBjPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5TaG9ydEdNVD0xXT0iU2hvcnRHTVQiLG5bbi5Mb25nPTJdPSJMb25nIixuW24uRXh0ZW5kZWQ9M109IkV4dGVuZGVkIn0ocGN8fChwYz17fSkpLHBjKSkoKSxGaT0oKCk9PihmdW5jdGlvbihuKXtuW24uRnVsbFllYXI9MF09IkZ1bGxZZWFyIixuW24uTW9udGg9MV09Ik1vbnRoIixuW24uRGF0ZT0yXT0iRGF0ZSIsbltuLkhvdXJzPTNdPSJIb3VycyIsbltuLk1pbnV0ZXM9NF09Ik1pbnV0ZXMiLG5bbi5TZWNvbmRzPTVdPSJTZWNvbmRzIixuW24uRnJhY3Rpb25hbFNlY29uZHM9Nl09IkZyYWN0aW9uYWxTZWNvbmRzIixuW24uRGF5PTddPSJEYXkifShGaXx8KEZpPXt9KSksRmkpKSgpLGtpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EYXlQZXJpb2RzPTBdPSJEYXlQZXJpb2RzIixuW24uRGF5cz0xXT0iRGF5cyIsbltuLk1vbnRocz0yXT0iTW9udGhzIixuW24uRXJhcz0zXT0iRXJhcyJ9KGtpfHwoa2k9e30pKSxraSkpKCk7ZnVuY3Rpb24gQ0NlKG4sdCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2lmKEVZKG4pKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmIWlzTmFOKG4pKXJldHVybiBuZXcgRGF0ZShuKTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2lmKG49bi50cmltKCksL14oXGR7NH0oLVxkezEsMn0oLVxkezEsMn0pPyk/KSQvLnRlc3Qobikpe2xldFtyLG89MSxzPTFdPW4uc3BsaXQoIi0iKS5tYXAoYT0+K2EpO3JldHVybiBhVChyLG8tMSxzKX1sZXQgaSxlPXBhcnNlRmxvYXQobik7aWYoIWlzTmFOKG4tZSkpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKGk9bi5tYXRjaChiQ2UpKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uZXcgRGF0ZSgwKSxlPTAsaT0wLHI9bls4XT90LnNldFVUQ0Z1bGxZZWFyOnQuc2V0RnVsbFllYXIsbz1uWzhdP3Quc2V0VVRDSG91cnM6dC5zZXRIb3VycztuWzldJiYoZT1OdW1iZXIobls5XStuWzEwXSksaT1OdW1iZXIobls5XStuWzExXSkpLHIuY2FsbCh0LE51bWJlcihuWzFdKSxOdW1iZXIoblsyXSktMSxOdW1iZXIoblszXSkpO2xldCBzPU51bWJlcihuWzRdfHwwKS1lLGE9TnVtYmVyKG5bNV18fDApLWksbD1OdW1iZXIobls2XXx8MCksYz1NYXRoLmZsb29yKDFlMypwYXJzZUZsb2F0KCIwLiIrKG5bN118fDApKSk7cmV0dXJuIG8uY2FsbCh0LHMsYSxsLGMpLHR9KGkpfWxldCB0PW5ldyBEYXRlKG4pO2lmKCFFWSh0KSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb252ZXJ0ICIke259IiBpbnRvIGEgZGF0ZWApO3JldHVybiB0fShuKTt0PXBkKGUsdCl8fHQ7bGV0IGEscz1bXTtmb3IoO3Q7KXtpZihhPXhDZS5leGVjKHQpLCFhKXtzLnB1c2godCk7YnJlYWt9e3M9cy5jb25jYXQoYS5zbGljZSgxKSk7bGV0IHU9cy5wb3AoKTtpZighdSlicmVhazt0PXV9fWxldCBsPXIuZ2V0VGltZXpvbmVPZmZzZXQoKTtpJiYobD1MWShpLGwpLHI9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4obj1uZXcgRGF0ZShuLmdldFRpbWUoKSkpLnNldE1pbnV0ZXMobi5nZXRNaW51dGVzKCkrdCksbn0obiwtMSooTFkodCxyKS1yKSl9KHIsaSkpO2xldCBjPSIiO3JldHVybiBzLmZvckVhY2godT0+e2xldCBkPWZ1bmN0aW9uKG4pe2lmKGIzW25dKXJldHVybiBiM1tuXTtsZXQgdDtzd2l0Y2gobil7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6dD1wcihraS5FcmFzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkdHR0ciOnQ9cHIoa2kuRXJhcywkaS5XaWRlKTticmVhaztjYXNlIkdHR0dHIjp0PXByKGtpLkVyYXMsJGkuTmFycm93KTticmVhaztjYXNlInkiOnQ9aG8oRmkuRnVsbFllYXIsMSwwLCExLCEwKTticmVhaztjYXNlInl5Ijp0PWhvKEZpLkZ1bGxZZWFyLDIsMCwhMCwhMCk7YnJlYWs7Y2FzZSJ5eXkiOnQ9aG8oRmkuRnVsbFllYXIsMywwLCExLCEwKTticmVhaztjYXNlInl5eXkiOnQ9aG8oRmkuRnVsbFllYXIsNCwwLCExLCEwKTticmVhaztjYXNlIlkiOnQ9aVQoMSk7YnJlYWs7Y2FzZSJZWSI6dD1pVCgyLCEwKTticmVhaztjYXNlIllZWSI6dD1pVCgzKTticmVhaztjYXNlIllZWVkiOnQ9aVQoNCk7YnJlYWs7Y2FzZSJNIjpjYXNlIkwiOnQ9aG8oRmkuTW9udGgsMSwxKTticmVhaztjYXNlIk1NIjpjYXNlIkxMIjp0PWhvKEZpLk1vbnRoLDIsMSk7YnJlYWs7Y2FzZSJNTU0iOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIk1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLldpZGUpO2JyZWFrO2Nhc2UiTU1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLk5hcnJvdyk7YnJlYWs7Y2FzZSJMTEwiOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkLEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTCI6dD1wcihraS5Nb250aHMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlIkxMTExMIjp0PXByKGtpLk1vbnRocywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJ3Ijp0PXkzKDEpO2JyZWFrO2Nhc2Uid3ciOnQ9eTMoMik7YnJlYWs7Y2FzZSJXIjp0PXkzKDEsITApO2JyZWFrO2Nhc2UiZCI6dD1obyhGaS5EYXRlLDEpO2JyZWFrO2Nhc2UiZGQiOnQ9aG8oRmkuRGF0ZSwyKTticmVhaztjYXNlImMiOmNhc2UiY2MiOnQ9aG8oRmkuRGF5LDEpO2JyZWFrO2Nhc2UiY2NjIjp0PXByKGtpLkRheXMsJGkuQWJicmV2aWF0ZWQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjIjp0PXByKGtpLkRheXMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2NjIjp0PXByKGtpLkRheXMsJGkuTmFycm93LEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2NjIjp0PXByKGtpLkRheXMsJGkuU2hvcnQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6dD1wcihraS5EYXlzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkVFRUUiOnQ9cHIoa2kuRGF5cywkaS5XaWRlKTticmVhaztjYXNlIkVFRUVFIjp0PXByKGtpLkRheXMsJGkuTmFycm93KTticmVhaztjYXNlIkVFRUVFRSI6dD1wcihraS5EYXlzLCRpLlNob3J0KTticmVhaztjYXNlImEiOmNhc2UiYWEiOmNhc2UiYWFhIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiYWFhYSI6dD1wcihraS5EYXlQZXJpb2RzLCRpLldpZGUpO2JyZWFrO2Nhc2UiYWFhYWEiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3cpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJiYiI6Y2FzZSJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5BYmJyZXZpYXRlZCxKby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5XaWRlLEpvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6dD1wcihraS5EYXlQZXJpb2RzLCRpLkFiYnJldmlhdGVkLEpvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuV2lkZSxKby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQkIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uRm9ybWF0LCEwKTticmVhaztjYXNlImgiOnQ9aG8oRmkuSG91cnMsMSwtMTIpO2JyZWFrO2Nhc2UiaGgiOnQ9aG8oRmkuSG91cnMsMiwtMTIpO2JyZWFrO2Nhc2UiSCI6dD1obyhGaS5Ib3VycywxKTticmVhaztjYXNlIkhIIjp0PWhvKEZpLkhvdXJzLDIpO2JyZWFrO2Nhc2UibSI6dD1obyhGaS5NaW51dGVzLDEpO2JyZWFrO2Nhc2UibW0iOnQ9aG8oRmkuTWludXRlcywyKTticmVhaztjYXNlInMiOnQ9aG8oRmkuU2Vjb25kcywxKTticmVhaztjYXNlInNzIjp0PWhvKEZpLlNlY29uZHMsMik7YnJlYWs7Y2FzZSJTIjp0PWhvKEZpLkZyYWN0aW9uYWxTZWNvbmRzLDEpO2JyZWFrO2Nhc2UiU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMik7YnJlYWs7Y2FzZSJTU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMyk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpjYXNlIlpaWiI6dD1uVChwYy5TaG9ydCk7YnJlYWs7Y2FzZSJaWlpaWiI6dD1uVChwYy5FeHRlbmRlZCk7YnJlYWs7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6Y2FzZSJ6IjpjYXNlInp6IjpjYXNlInp6eiI6dD1uVChwYy5TaG9ydEdNVCk7YnJlYWs7Y2FzZSJPT09PIjpjYXNlIlpaWloiOmNhc2Uienp6eiI6dD1uVChwYy5Mb25nKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBiM1tuXT10LHR9KHUpO2MrPWQ/ZChyLGUsbCk6IicnIj09PXU/IiciOnUucmVwbGFjZSgvKF4nfCckKS9nLCIiKS5yZXBsYWNlKC8nJy9nLCInIil9KSxjfWZ1bmN0aW9uIGFUKG4sdCxlKXtsZXQgaT1uZXcgRGF0ZSgwKTtyZXR1cm4gaS5zZXRGdWxsWWVhcihuLHQsZSksaS5zZXRIb3VycygwLDAsMCksaX1mdW5jdGlvbiBwZChuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiB0YShuKVtici5Mb2NhbGVJZF19KG4pO2lmKEJ4W2VdPUJ4W2VdfHx7fSxCeFtlXVt0XSlyZXR1cm4gQnhbZV1bdF07bGV0IGk9IiI7c3dpdGNoKHQpe2Nhc2Uic2hvcnREYXRlIjppPUoxKG4sa3MuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtRGF0ZSI6aT1KMShuLGtzLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nRGF0ZSI6aT1KMShuLGtzLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbERhdGUiOmk9SjEobixrcy5GdWxsKTticmVhaztjYXNlInNob3J0VGltZSI6aT0kMShuLGtzLlNob3J0KTticmVhaztjYXNlIm1lZGl1bVRpbWUiOmk9JDEobixrcy5NZWRpdW0pO2JyZWFrO2Nhc2UibG9uZ1RpbWUiOmk9JDEobixrcy5Mb25nKTticmVhaztjYXNlImZ1bGxUaW1lIjppPSQxKG4sa3MuRnVsbCk7YnJlYWs7Y2FzZSJzaG9ydCI6bGV0IHI9cGQobiwic2hvcnRUaW1lIiksbz1wZChuLCJzaG9ydERhdGUiKTtpPXRUKGVUKG4sa3MuU2hvcnQpLFtyLG9dKTticmVhaztjYXNlIm1lZGl1bSI6bGV0IHM9cGQobiwibWVkaXVtVGltZSIpLGE9cGQobiwibWVkaXVtRGF0ZSIpO2k9dFQoZVQobixrcy5NZWRpdW0pLFtzLGFdKTticmVhaztjYXNlImxvbmciOmxldCBsPXBkKG4sImxvbmdUaW1lIiksYz1wZChuLCJsb25nRGF0ZSIpO2k9dFQoZVQobixrcy5Mb25nKSxbbCxjXSk7YnJlYWs7Y2FzZSJmdWxsIjpsZXQgdT1wZChuLCJmdWxsVGltZSIpLGQ9cGQobiwiZnVsbERhdGUiKTtpPXRUKGVUKG4sa3MuRnVsbCksW3UsZF0pfXJldHVybiBpJiYoQnhbZV1bdF09aSksaX1mdW5jdGlvbiB0VChuLHQpe3JldHVybiB0JiYobj1uLnJlcGxhY2UoL1x7KFtefV0rKX0vZyxmdW5jdGlvbihlLGkpe3JldHVybiBudWxsIT10JiZpIGluIHQ/dFtpXTplfSkpLG59ZnVuY3Rpb24gZGMobix0LGU9Ii0iLGkscil7bGV0IG89IiI7KG48MHx8ciYmbjw9MCkmJihyP249MS1uOihuPS1uLG89ZSkpO2xldCBzPVN0cmluZyhuKTtmb3IoO3MubGVuZ3RoPHQ7KXM9IjAiK3M7cmV0dXJuIGkmJihzPXMuc2xpY2Uocy5sZW5ndGgtdCkpLG8rc31mdW5jdGlvbiBobyhuLHQsZT0wLGk9ITEscj0hMSl7cmV0dXJuIGZ1bmN0aW9uKG8scyl7bGV0IGE9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSBGaS5GdWxsWWVhcjpyZXR1cm4gdC5nZXRGdWxsWWVhcigpO2Nhc2UgRmkuTW9udGg6cmV0dXJuIHQuZ2V0TW9udGgoKTtjYXNlIEZpLkRhdGU6cmV0dXJuIHQuZ2V0RGF0ZSgpO2Nhc2UgRmkuSG91cnM6cmV0dXJuIHQuZ2V0SG91cnMoKTtjYXNlIEZpLk1pbnV0ZXM6cmV0dXJuIHQuZ2V0TWludXRlcygpO2Nhc2UgRmkuU2Vjb25kczpyZXR1cm4gdC5nZXRTZWNvbmRzKCk7Y2FzZSBGaS5GcmFjdGlvbmFsU2Vjb25kczpyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIEZpLkRheTpyZXR1cm4gdC5nZXREYXkoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBEYXRlVHlwZSB2YWx1ZSAiJHtufSIuYCl9fShuLG8pO2lmKChlPjB8fGE+LWUpJiYoYSs9ZSksbj09PUZpLkhvdXJzKTA9PT1hJiYtMTI9PT1lJiYoYT0xMik7ZWxzZSBpZihuPT09RmkuRnJhY3Rpb25hbFNlY29uZHMpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGRjKG4sMykuc3Vic3RyaW5nKDAsdCl9KGEsdCk7bGV0IGw9aGQocyxscy5NaW51c1NpZ24pO3JldHVybiBkYyhhLHQsbCxpLHIpfX1mdW5jdGlvbiBwcihuLHQsZT1Kby5Gb3JtYXQsaT0hMSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvKXtzd2l0Y2goZSl7Y2FzZSBraS5Nb250aHM6cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10YShuKSxvPV9sKFtpW2JyLk1vbnRoc0Zvcm1hdF0saVtici5Nb250aHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtuLmdldE1vbnRoKCldO2Nhc2Uga2kuRGF5czpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPXRhKG4pLG89X2woW2lbYnIuRGF5c0Zvcm1hdF0saVtici5EYXlzU3RhbmRhbG9uZV1dLHQpO3JldHVybiBfbChvLGUpfSh0LHIsaSlbbi5nZXREYXkoKV07Y2FzZSBraS5EYXlQZXJpb2RzOmxldCBzPW4uZ2V0SG91cnMoKSxhPW4uZ2V0TWludXRlcygpO2lmKG8pe2xldCBjPWZ1bmN0aW9uKG4pe2xldCB0PXRhKG4pO3JldHVybiBGWSh0KSwodFtici5FeHRyYURhdGFdWzJdfHxbXSkubWFwKGk9PiJzdHJpbmciPT10eXBlb2YgaT92MyhpKTpbdjMoaVswXSksdjMoaVsxXSldKX0odCksdT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobik7RlkoaSk7bGV0IG89X2woW2lbYnIuRXh0cmFEYXRhXVswXSxpW2JyLkV4dHJhRGF0YV1bMV1dLHQpfHxbXTtyZXR1cm4gX2wobyxlKXx8W119KHQscixpKSxkPWMuZmluZEluZGV4KHA9PntpZihBcnJheS5pc0FycmF5KHApKXtsZXRbaCxmXT1wLG09cz49aC5ob3VycyYmYT49aC5taW51dGVzLEM9czxmLmhvdXJzfHxzPT09Zi5ob3VycyYmYTxmLm1pbnV0ZXM7aWYoaC5ob3VyczxmLmhvdXJzKXtpZihtJiZDKXJldHVybiEwfWVsc2UgaWYobXx8QylyZXR1cm4hMH1lbHNlIGlmKHAuaG91cnM9PT1zJiZwLm1pbnV0ZXM9PT1hKXJldHVybiEwO3JldHVybiExfSk7aWYoLTEhPT1kKXJldHVybiB1W2RdfXJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobiksbz1fbChbaVtici5EYXlQZXJpb2RzRm9ybWF0XSxpW2JyLkRheVBlcmlvZHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtzPDEyPzA6MV07Y2FzZSBraS5FcmFzOnJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBfbCh0YShuKVtici5FcmFzXSx0KX0odCxpKVtuLmdldEZ1bGxZZWFyKCk8PTA/MDoxXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7ZX1gKX19KHIsbyxuLHQsZSxpKX19ZnVuY3Rpb24gblQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxpKXtsZXQgcj0tMSppLG89aGQoZSxscy5NaW51c1NpZ24pLHM9cj4wP01hdGguZmxvb3Ioci82MCk6TWF0aC5jZWlsKHIvNjApO3N3aXRjaChuKXtjYXNlIHBjLlNob3J0OnJldHVybihyPj0wPyIrIjoiIikrZGMocywyLG8pK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5TaG9ydEdNVDpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK2RjKHMsMSxvKTtjYXNlIHBjLkxvbmc6cmV0dXJuIkdNVCIrKHI+PTA/IisiOiIiKStkYyhzLDIsbykrIjoiK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5FeHRlbmRlZDpyZXR1cm4gMD09PWk/IloiOihyPj0wPyIrIjoiIikrZGMocywyLG8pKyI6IitkYyhNYXRoLmFicyhyJTYwKSwyLG8pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHpvbmUgd2lkdGggIiR7bn0iYCl9fX1mdW5jdGlvbiBOWShuKXtyZXR1cm4gYVQobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSsoNC1uLmdldERheSgpKSl9ZnVuY3Rpb24geTMobix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcjtpZih0KXtsZXQgbz1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLmdldERheSgpLTEscz1lLmdldERhdGUoKTtyPTErTWF0aC5mbG9vcigocytvKS83KX1lbHNle2xldCBvPU5ZKGUpLHM9ZnVuY3Rpb24obil7bGV0IHQ9YVQobiwwLDEpLmdldERheSgpO3JldHVybiBhVChuLDAsMSsodDw9ND80OjExKS10KX0oby5nZXRGdWxsWWVhcigpKSxhPW8uZ2V0VGltZSgpLXMuZ2V0VGltZSgpO3I9MStNYXRoLnJvdW5kKGEvNjA0OGU1KX1yZXR1cm4gZGMocixuLGhkKGksbHMuTWludXNTaWduKSl9fWZ1bmN0aW9uIGlUKG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGRjKE5ZKGUpLmdldEZ1bGxZZWFyKCksbixoZChpLGxzLk1pbnVzU2lnbiksdCl9fXZhciBiMz17fTtmdW5jdGlvbiBMWShuLHQpe249bi5yZXBsYWNlKC86L2csIiIpO2xldCBlPURhdGUucGFyc2UoIkphbiAwMSwgMTk3MCAwMDowMDowMCAiK24pLzZlNDtyZXR1cm4gaXNOYU4oZSk/dDplfWZ1bmN0aW9uIEVZKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4udmFsdWVPZigpKX12YXIgT0NlPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvO2Z1bmN0aW9uIEEzKG4sdCxlKXtsZXQgaT1mdW5jdGlvbihuLHQpe3JldHVybiB0YShuKVtici5OdW1iZXJGb3JtYXRzXVt0XX0odCxyVC5EZWNpbWFsKSxyPWZ1bmN0aW9uKG4sdD0iLSIpe2xldCBlPXttaW5JbnQ6MSxtaW5GcmFjOjAsbWF4RnJhYzowLHBvc1ByZToiIixwb3NTdWY6IiIsbmVnUHJlOiIiLG5lZ1N1ZjoiIixnU2l6ZTowLGxnU2l6ZTowfSxpPW4uc3BsaXQoIjsiKSxyPWlbMF0sbz1pWzFdLHM9LTEhPT1yLmluZGV4T2YoIi4iKT9yLnNwbGl0KCIuIik6W3Iuc3Vic3RyaW5nKDAsci5sYXN0SW5kZXhPZigiMCIpKzEpLHIuc3Vic3RyaW5nKHIubGFzdEluZGV4T2YoIjAiKSsxKV0sYT1zWzBdLGw9c1sxXXx8IiI7ZS5wb3NQcmU9YS5zdWJzdHJpbmcoMCxhLmluZGV4T2YoIiMiKSk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBkPWwuY2hhckF0KHUpOyIwIj09PWQ/ZS5taW5GcmFjPWUubWF4RnJhYz11KzE6IiMiPT09ZD9lLm1heEZyYWM9dSsxOmUucG9zU3VmKz1kfWxldCBjPWEuc3BsaXQoIiwiKTtpZihlLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxlLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxvKXtsZXQgdT1yLmxlbmd0aC1lLnBvc1ByZS5sZW5ndGgtZS5wb3NTdWYubGVuZ3RoLGQ9by5pbmRleE9mKCIjIik7ZS5uZWdQcmU9by5zdWJzdHJpbmcoMCxkKS5yZXBsYWNlKC8nL2csIiIpLGUubmVnU3VmPW8uc2xpY2UoZCt1KS5yZXBsYWNlKC8nL2csIiIpfWVsc2UgZS5uZWdQcmU9dCtlLnBvc1ByZSxlLm5lZ1N1Zj1lLnBvc1N1ZjtyZXR1cm4gZX0oaSxoZCh0LGxzLk1pbnVzU2lnbikpO3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIsbyxzPSExKXtsZXQgYT0iIixsPSExO2lmKGlzRmluaXRlKG4pKXtsZXQgYz1mdW5jdGlvbihuKXtsZXQgaSxyLG8scyxhLHQ9TWF0aC5hYnMobikrIiIsZT0wO2Zvcigocj10LmluZGV4T2YoIi4iKSk+LTEmJih0PXQucmVwbGFjZSgiLiIsIiIpKSwobz10LnNlYXJjaCgvZS9pKSk+MD8ocjwwJiYocj1vKSxyKz0rdC5zbGljZShvKzEpLHQ9dC5zdWJzdHJpbmcoMCxvKSk6cjwwJiYocj10Lmxlbmd0aCksbz0wOyIwIj09PXQuY2hhckF0KG8pO28rKyk7aWYobz09PShhPXQubGVuZ3RoKSlpPVswXSxyPTE7ZWxzZXtmb3IoYS0tOyIwIj09PXQuY2hhckF0KGEpOylhLS07Zm9yKHItPW8saT1bXSxzPTA7bzw9YTtvKysscysrKWlbc109TnVtYmVyKHQuY2hhckF0KG8pKX1yZXR1cm4gcj4yMiYmKGk9aS5zcGxpY2UoMCwyMSksZT1yLTEscj0xKSx7ZGlnaXRzOmksZXhwb25lbnQ6ZSxpbnRlZ2VyTGVuOnJ9fShuKTtzJiYoYz1mdW5jdGlvbihuKXtpZigwPT09bi5kaWdpdHNbMF0pcmV0dXJuIG47bGV0IHQ9bi5kaWdpdHMubGVuZ3RoLW4uaW50ZWdlckxlbjtyZXR1cm4gbi5leHBvbmVudD9uLmV4cG9uZW50Kz0yOigwPT09dD9uLmRpZ2l0cy5wdXNoKDAsMCk6MT09PXQmJm4uZGlnaXRzLnB1c2goMCksbi5pbnRlZ2VyTGVuKz0yKSxufShjKSk7bGV0IHU9dC5taW5JbnQsZD10Lm1pbkZyYWMscD10Lm1heEZyYWM7aWYobyl7bGV0IHk9by5tYXRjaChPQ2UpO2lmKG51bGw9PT15KXRocm93IG5ldyBFcnJvcihgJHtvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7bGV0IEk9eVsxXSxBPXlbM10sTz15WzVdO251bGwhPUkmJih1PUMzKEkpKSxudWxsIT1BJiYoZD1DMyhBKSksbnVsbCE9Tz9wPUMzKE8pOm51bGwhPUEmJmQ+cCYmKHA9ZCl9IWZ1bmN0aW9uKG4sdCxlKXtpZih0PmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGZyYWN0aW9uICgke3R9KSBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAoJHtlfSkuYCk7bGV0IGk9bi5kaWdpdHMscj1pLmxlbmd0aC1uLmludGVnZXJMZW4sbz1NYXRoLm1pbihNYXRoLm1heCh0LHIpLGUpLHM9bytuLmludGVnZXJMZW4sYT1pW3NdO2lmKHM+MCl7aS5zcGxpY2UoTWF0aC5tYXgobi5pbnRlZ2VyTGVuLHMpKTtmb3IobGV0IGQ9cztkPGkubGVuZ3RoO2QrKylpW2RdPTB9ZWxzZXtyPU1hdGgubWF4KDAsciksbi5pbnRlZ2VyTGVuPTEsaS5sZW5ndGg9TWF0aC5tYXgoMSxzPW8rMSksaVswXT0wO2ZvcihsZXQgZD0xO2Q8cztkKyspaVtkXT0wfWlmKGE+PTUpaWYocy0xPDApe2ZvcihsZXQgZD0wO2Q+cztkLS0paS51bnNoaWZ0KDApLG4uaW50ZWdlckxlbisrO2kudW5zaGlmdCgxKSxuLmludGVnZXJMZW4rK31lbHNlIGlbcy0xXSsrO2Zvcig7cjxNYXRoLm1heCgwLG8pO3IrKylpLnB1c2goMCk7bGV0IGw9MCE9PW8sYz10K24uaW50ZWdlckxlbix1PWkucmVkdWNlUmlnaHQoZnVuY3Rpb24oZCxwLGgsZil7cmV0dXJuIGZbaF09KHArPWQpPDEwP3A6cC0xMCxsJiYoMD09PWZbaF0mJmg+PWM/Zi5wb3AoKTpsPSExKSxwPj0xMD8xOjB9LDApO3UmJihpLnVuc2hpZnQodSksbi5pbnRlZ2VyTGVuKyspfShjLGQscCk7bGV0IGg9Yy5kaWdpdHMsZj1jLmludGVnZXJMZW4sbT1jLmV4cG9uZW50LEM9W107Zm9yKGw9aC5ldmVyeSh5PT4heSk7Zjx1O2YrKyloLnVuc2hpZnQoMCk7Zm9yKDtmPDA7ZisrKWgudW5zaGlmdCgwKTtmPjA/Qz1oLnNwbGljZShmLGgubGVuZ3RoKTooQz1oLGg9WzBdKTtsZXQgXz1bXTtmb3IoaC5sZW5ndGg+PXQubGdTaXplJiZfLnVuc2hpZnQoaC5zcGxpY2UoLXQubGdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGg+dC5nU2l6ZTspXy51bnNoaWZ0KGguc3BsaWNlKC10LmdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGgmJl8udW5zaGlmdChoLmpvaW4oIiIpKSxhPV8uam9pbihoZChlLGkpKSxDLmxlbmd0aCYmKGErPWhkKGUscikrQy5qb2luKCIiKSksbSYmKGErPWhkKGUsbHMuRXhwb25lbnRpYWwpKyIrIittKX1lbHNlIGE9aGQoZSxscy5JbmZpbml0eSk7cmV0dXJuIGE9bjwwJiYhbD90Lm5lZ1ByZSthK3QubmVnU3VmOnQucG9zUHJlK2ErdC5wb3NTdWYsYX0obixyLHQsbHMuR3JvdXAsbHMuRGVjaW1hbCxlKX1mdW5jdGlvbiBDMyhuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fWZ1bmN0aW9uIHVUKG4sdCl7dD1lbmNvZGVVUklDb21wb25lbnQodCk7Zm9yKGxldCBlIG9mIG4uc3BsaXQoIjsiKSl7bGV0IGk9ZS5pbmRleE9mKCI9IiksW3Isb109LTE9PWk/W2UsIiJdOltlLnNsaWNlKDAsaSksZS5zbGljZShpKzEpXTtpZihyLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKX1yZXR1cm4gbnVsbH12YXIgUG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9ZSx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9aSx0aGlzLl9uZ0VsPXIsdGhpcy5fcmVuZGVyZXI9byx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5faW5pdGlhbENsYXNzZXM9W10sdGhpcy5fcmF3Q2xhc3M9bnVsbH1zZXQga2xhc3MoZSl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiBlP2Uuc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX1zZXQgbmdDbGFzcyhlKXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgvXHMrLyk6ZSx0aGlzLl9yYXdDbGFzcyYmKHpFKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7bGV0IGU9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXMoZSl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7bGV0IGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fV9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaS5rZXksaS5jdXJyZW50VmFsdWUpKSxlLmZvckVhY2hDaGFuZ2VkSXRlbShpPT50aGlzLl90b2dnbGVDbGFzcyhpLmtleSxpLmN1cnJlbnRWYWx1ZSkpLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PntpLnByZXZpb3VzVmFsdWUmJnRoaXMuX3RvZ2dsZUNsYXNzKGkua2V5LCExKX0pfV9hcHBseUl0ZXJhYmxlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+e2lmKCJzdHJpbmciIT10eXBlb2YgaS5pdGVtKXRocm93IG5ldyBFcnJvcihgTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAke2NvKGkuaXRlbSl9YCk7dGhpcy5fdG9nZ2xlQ2xhc3MoaS5pdGVtLCEwKX0pLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGkuaXRlbSwhMSkpfV9hcHBseUNsYXNzZXMoZSl7ZSYmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQ/ZS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITApKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksISFlW2ldKSkpfV9yZW1vdmVDbGFzc2VzKGUpe2UmJihBcnJheS5pc0FycmF5KGUpfHxlIGluc3RhbmNlb2YgU2V0P2UuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSkpfV90b2dnbGVDbGFzcyhlLGkpeyhlPWUudHJpbSgpKSYmZS5zcGxpdCgvXHMrL2cpLmZvckVhY2gocj0+e2k/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHRjKSx3KFZiKSx3KEFlKSx3KFhjKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHluPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0Zvck9mKGUpe3RoaXMuX25nRm9yT2Y9ZSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShlKXt0aGlzLl90cmFja0J5Rm49ZX1nZXQgbmdGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn1zZXQgbmdGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fdGVtcGxhdGU9ZSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7bGV0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X2FwcGx5Q2hhbmdlcyhlKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbigocixvLHMpPT57aWYobnVsbD09ci5wcmV2aW91c0luZGV4KWkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9aSx0aGlzLmNvdW50PXJ9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX0oci5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1zP3ZvaWQgMDpzKTtlbHNlIGlmKG51bGw9PXMpaS5yZW1vdmUobnVsbD09PW8/dm9pZCAwOm8pO2Vsc2UgaWYobnVsbCE9PW8pe2xldCBhPWkuZ2V0KG8pO2kubW92ZShhLHMpLEFZKGEscil9fSk7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKXtsZXQgYT1pLmdldChyKS5jb250ZXh0O2EuaW5kZXg9cixhLmNvdW50PW8sYS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uocj0+e0FZKGkuZ2V0KHIuY3VycmVudEluZGV4KSxyKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCk7ZnVuY3Rpb24gQVkobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX12YXIgWGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl9jb250ZXh0PW5ldyBTMyx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWl9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtJWSgibmdJZlRoZW4iLGUpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShlKXtJWSgibmdJZkVsc2UiLGUpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1lLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFMzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19O2Z1bmN0aW9uIElZKG4sdCl7aWYodCYmIXQuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtjbyh0KX0nLmApfXZhciBjVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19LGhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChlKXt0aGlzLl9uZ1N3aXRjaD1lLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoZSl7dGhpcy5fZGVmYXVsdFZpZXdzfHwodGhpcy5fZGVmYXVsdFZpZXdzPVtdKSx0aGlzLl9kZWZhdWx0Vmlld3MucHVzaChlKX1fbWF0Y2hDYXNlKGUpe2xldCBpPWU9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxpfV91cGRhdGVEZWZhdWx0Q2FzZXMoZSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzJiZlIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWU7Zm9yKGxldCBpPTA7aTx0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoO2krKyl0aGlzLl9kZWZhdWx0Vmlld3NbaV0uZW5mb3JjZVN0YXRlKGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLElyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMubmdTd2l0Y2g9cixyLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgY1QoZSxpKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhPaSksdyhociw5KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLENwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3IuX2FkZERlZmF1bHQobmV3IGNUKGUsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSx3KE9pKSx3KGhyLDkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx3cD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1pLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGUpe3RoaXMuX25nU3R5bGU9ZSwhdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9zZXRTdHlsZShlLGkpe2xldFtyLG9dPWUuc3BsaXQoIi4iKSxzPS0xPT09ci5pbmRleE9mKCItIik/dm9pZCAwOmFsLkRhc2hDYXNlO251bGwhPWk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsbz9gJHtpfSR7b31gOmkscyk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIscyl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhWYiksdyhYYykpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxObz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoZSl7aWYoZS5uZ1RlbXBsYXRlT3V0bGV0fHxlLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZpLnJlbW92ZShpLmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMubmdUZW1wbGF0ZU91dGxldCl7bGV0e25nVGVtcGxhdGVPdXRsZXQ6cixuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpvLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjpzfT10aGlzO3RoaXMuX3ZpZXdSZWY9aS5jcmVhdGVFbWJlZGRlZFZpZXcocixvLHM/e2luamVjdG9yOnN9OnZvaWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZlLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbenRdfSksbn0pKCk7ZnVuY3Rpb24gZFQobix0KXtyZXR1cm4gbmV3IE10KDIxMDAsITEpfXZhciB6Q2U9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxpPT57dGhyb3cgaX0pfWRpc3Bvc2UodCl7fX0sakNlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppPT57dGhyb3cgaX19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX19LGZ0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1lfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLl9vYmo/ZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZTooZSYmdGhpcy5fc3Vic2NyaWJlKGUpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxpPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLGkpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYobjAoZSkpcmV0dXJuIHpDZTtpZihoTihlKSlyZXR1cm4gakNlO3Rocm93IGRUKCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKXtlPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9aSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uLDE2KSl9LG4uXHUwMjc1cGlwZT1CZyh7bmFtZToiYXN5bmMiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxHQ2U9bmV3IHNlKCJEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSIpLFUwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmxvY2FsZT1lLHRoaXMuZGVmYXVsdFRpbWV6b25lPWl9dHJhbnNmb3JtKGUsaT0ibWVkaXVtRGF0ZSIscixvKXtpZihudWxsPT1lfHwiIj09PWV8fGUhPWUpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBDQ2UoZSxpLG98fHRoaXMubG9jYWxlLHI/P3RoaXMuZGVmYXVsdFRpbWV6b25lPz92b2lkIDApfWNhdGNoKHMpe3Rocm93IGRUKCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHJkLDE2KSx3KEdDZSwyNCkpfSxuLlx1MDI3NXBpcGU9Qmcoe25hbWU6ImRhdGUiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx2bD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xvY2FsZT1lfXRyYW5zZm9ybShlLGkscil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiEobnVsbD09bnx8IiI9PT1ufHxuIT1uKX0oZSkpcmV0dXJuIG51bGw7cj1yfHx0aGlzLl9sb2NhbGU7dHJ5e2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWlzTmFOKE51bWJlcihuKS1wYXJzZUZsb2F0KG4pKSlyZXR1cm4gTnVtYmVyKG4pO2lmKCJudW1iZXIiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoYCR7bn0gaXMgbm90IGEgbnVtYmVyYCk7cmV0dXJuIG59KGUpO3JldHVybiBBMyhvLHIsaSl9Y2F0Y2gobyl7dGhyb3cgZFQoKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQsMTYpKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJudW1iZXIiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxCWT0oKCk9PntjbGFzcyBue3RyYW5zZm9ybShlLGkscil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZighdGhpcy5zdXBwb3J0cyhlKSl0aHJvdyBkVCgpO3JldHVybiBlLnNsaWNlKGkscil9c3VwcG9ydHMoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJzbGljZSIsdHlwZTpuLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLG59KSgpLGtlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxJMz0iYnJvd3NlciI7ZnVuY3Rpb24gcFQobil7cmV0dXJuIG49PT1JM31uZXcgS2woIjE0LjIuMTEiKTt2YXIgUGY9Y2xhc3N7fTtmdW5jdGlvbiBLQ2Uobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiLyIpP24uc2xpY2UoMSk6bn1uZXcgc2UoIlBSRUNPTk5FQ1RfQ0hFQ0tfQkxPQ0tMSVNUIik7dmFyIFpDZT1uPT5uLnNyYyxKQ2U9bmV3IHNlKCJJbWFnZUxvYWRlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PlpDZX0pO2Z1bmN0aW9uIGhUKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGkscj17ZW5zdXJlUHJlY29ubmVjdDohMH0pe3JldHVybiBmdW5jdGlvbihuKXtpZigic3RyaW5nIiE9dHlwZW9mIG58fCIiPT09bi50cmltKCkpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgVVJMKG4pLCEwfWNhdGNoe3JldHVybiExfX0oaSl8fGZ1bmN0aW9uKG4sdCl7dGhyb3cgbmV3IE10KDI5NTksITEpfSgpLGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uZW5kc1dpdGgoIi8iKT9uLnNsaWNlKDAsLTEpOm59KGkpLFt7cHJvdmlkZTpKQ2UsdXNlVmFsdWU6YT0+KGZ1bmN0aW9uKG4pe3JldHVybi9eaHR0cHM/OlwvXC8vLnRlc3Qobil9KGEuc3JjKSYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoMjk1OSwhMSl9KCksbihpLHsuLi5hLHNyYzpLQ2UoYS5zcmMpfSkpfV19fWhUKGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZvcm1hdD1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd2lkdGg9JHt0LndpZHRofWApLGAke259L2Nkbi1jZ2kvaW1hZ2UvJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPSJmX2F1dG8scV9hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd18ke3Qud2lkdGh9YCksYCR7bn0vaW1hZ2UvdXBsb2FkLyR7ZX0vJHt0LnNyY31gfSksaFQoZnVuY3Rpb24obix0KXtsZXQgZT0idHI6cS1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsdy0ke3Qud2lkdGh9YCksYCR7bn0vJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBVUkwoYCR7bn0vJHt0LnNyY31gKTtyZXR1cm4gZS5zZWFyY2hQYXJhbXMuc2V0KCJhdXRvIiwiZm9ybWF0IiksdC53aWR0aCYmZS5zZWFyY2hQYXJhbXMuc2V0KCJ3Iix0LndpZHRoLnRvU3RyaW5nKCkpLGUuaHJlZn0pO3ZhciBmVCxSMz1jbGFzcyBleHRlbmRzIHNUe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX0sR3g9Y2xhc3MgZXh0ZW5kcyBSM3tzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24obil7dzN8fCh3Mz1uKX0obmV3IEd4KX1vbkFuZENhbmNlbCh0LGUsaSl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLGksITEpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSwhMSl9fWRpc3BhdGNoRXZlbnQodCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9cmVtb3ZlKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldCh0LGUpe3JldHVybiJ3aW5kb3ciPT09ZT93aW5kb3c6ImRvY3VtZW50Ij09PWU/dDoiYm9keSI9PT1lP3QuYm9keTpudWxsfWdldEJhc2VIcmVmKHQpe2xldCBlPShVeD1VeHx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpKT9VeC5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1lP251bGw6ZnVuY3Rpb24obil7KGZUPWZUfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLnNldEF0dHJpYnV0ZSgiaHJlZiIsbik7bGV0IHQ9ZlQucGF0aG5hbWU7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCk/dDpgLyR7dH1gfShlKX1yZXNldEJhc2VFbGVtZW50KCl7VXg9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKHQpe3JldHVybiB1VChkb2N1bWVudC5jb29raWUsdCl9fSxVeD1udWxsLFdZPW5ldyBzZSgiVFJBTlNJVElPTl9JRCIpLGN3ZT1be3Byb3ZpZGU6dk4sdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuKCk9PntlLmdldChaRSkuZG9uZVByb21pc2UudGhlbigoKT0+e2xldCBpPWdsKCkscj10LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlW25nLXRyYW5zaXRpb249IiR7bn0iXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKWkucmVtb3ZlKHJbb10pfSl9fSxkZXBzOltXWSxCdCx6bl0sbXVsdGk6ITB9XSx1d2U9KCgpPT57Y2xhc3MgbntidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG1UPW5ldyBzZSgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLGdUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl96b25lPWksdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxlLmZvckVhY2gocj0+ci5tYW5hZ2VyPXRoaXMpLHRoaXMuX3BsdWdpbnM9ZS5zbGljZSgpLnJldmVyc2UoKX1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRFdmVudExpc3RlbmVyKGUsaSxyKX1hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQbHVnaW5Gb3IoZSl7bGV0IGk9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KGUpO2lmKGkpcmV0dXJuIGk7bGV0IHI9dGhpcy5fcGx1Z2lucztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXTtpZihzLnN1cHBvcnRzKGUpKXJldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQoZSxzKSxzfXRocm93IG5ldyBFcnJvcihgTm8gZXZlbnQgbWFuYWdlciBwbHVnaW4gZm91bmQgZm9yIGV2ZW50ICR7ZX1gKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihtVCksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9UPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fWFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLGkpe2xldCByPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7cn0gZm9yIGV2ZW50ICR7ZX1gKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxpKX19LHFZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9zdHlsZXNTZXQ9bmV3IFNldH1hZGRTdHlsZXMoZSl7bGV0IGk9bmV3IFNldDtlLmZvckVhY2gocj0+e3RoaXMuX3N0eWxlc1NldC5oYXMocil8fCh0aGlzLl9zdHlsZXNTZXQuYWRkKHIpLGkuYWRkKHIpKX0pLHRoaXMub25TdHlsZXNBZGRlZChpKX1vblN0eWxlc0FkZGVkKGUpe31nZXRBbGxTdHlsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zdHlsZXNTZXQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx6eD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcVl7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZSx0aGlzLl9ob3N0Tm9kZXM9bmV3IE1hcCx0aGlzLl9ob3N0Tm9kZXMuc2V0KGUuaGVhZCxbXSl9X2FkZFN0eWxlc1RvSG9zdChlLGkscil7ZS5mb3JFYWNoKG89PntsZXQgcz10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtzLnRleHRDb250ZW50PW8sci5wdXNoKGkuYXBwZW5kQ2hpbGQocykpfSl9YWRkSG9zdChlKXtsZXQgaT1bXTt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LGUsaSksdGhpcy5faG9zdE5vZGVzLnNldChlLGkpfXJlbW92ZUhvc3QoZSl7bGV0IGk9dGhpcy5faG9zdE5vZGVzLmdldChlKTtpJiZpLmZvckVhY2goVlkpLHRoaXMuX2hvc3ROb2Rlcy5kZWxldGUoZSl9b25TdHlsZXNBZGRlZChlKXt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaCgoaSxyKT0+e3RoaXMuX2FkZFN0eWxlc1RvSG9zdChlLHIsaSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGU9PmUuZm9yRWFjaChWWSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gVlkobil7Z2woKS5yZW1vdmUobil9dmFyIFAzPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LE4zPS8lQ09NUCUvZztmdW5jdGlvbiB2VChuLHQsZSl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT92VChuLHIsZSk6KHI9ci5yZXBsYWNlKE4zLG4pLGUucHVzaChyKSl9cmV0dXJuIGV9ZnVuY3Rpb24gVVkobil7cmV0dXJuIHQ9PntpZigiX19uZ1Vud3JhcF9fIj09PXQpcmV0dXJuIG47ITE9PT1uKHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITEpfX12YXIgang9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5ldmVudE1hbmFnZXI9ZSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9aSx0aGlzLmFwcElkPXIsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IFd4KGUpfWNyZWF0ZVJlbmRlcmVyKGUsaSl7aWYoIWV8fCFpKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goaS5lbmNhcHN1bGF0aW9uKXtjYXNlIHdhLkVtdWxhdGVkOntsZXQgcj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGkuaWQpO3JldHVybiByfHwocj1uZXcgazModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGksdGhpcy5hcHBJZCksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChpLmlkLHIpKSxyLmFwcGx5VG9Ib3N0KGUpLHJ9Y2FzZSAxOmNhc2Ugd2EuU2hhZG93RG9tOnJldHVybiBuZXcgRjModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUsaSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhpLmlkKSl7bGV0IHI9dlQoaS5pZCxpLnN0eWxlcyxbXSk7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyhyKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGkuaWQsdGhpcy5kZWZhdWx0UmVuZGVyZXIpfXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcn19YmVnaW4oKXt9ZW5kKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGdUKSxSKHp4KSxSKHJmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksV3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRlc3Ryb3lOb2RlPW51bGx9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFAzW2VdfHxlLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1hcHBlbmRDaGlsZCh0LGUpeyhqWSh0KT90LmNvbnRlbnQ6dCkuYXBwZW5kQ2hpbGQoZSl9aW5zZXJ0QmVmb3JlKHQsZSxpKXt0JiYoalkodCk/dC5jb250ZW50OnQpLmluc2VydEJlZm9yZShlLGkpfXJlbW92ZUNoaWxkKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCBpPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0b3IgIiR7dH0iIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzYCk7cmV0dXJuIGV8fChpLnRleHRDb250ZW50PSIiKSxpfXBhcmVudE5vZGUodCl7cmV0dXJuIHQucGFyZW50Tm9kZX1uZXh0U2libGluZyh0KXtyZXR1cm4gdC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUodCxlLGkscil7aWYocil7ZT1yKyI6IitlO2xldCBvPVAzW3JdO28/dC5zZXRBdHRyaWJ1dGVOUyhvLGUsaSk6dC5zZXRBdHRyaWJ1dGUoZSxpKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsaSl9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXtpZihpKXtsZXQgcj1QM1tpXTtyP3QucmVtb3ZlQXR0cmlidXRlTlMocixlKTp0LnJlbW92ZUF0dHJpYnV0ZShgJHtpfToke2V9YCl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX1hZGRDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX1yZW1vdmVDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX1zZXRTdHlsZSh0LGUsaSxyKXtyJihhbC5EYXNoQ2FzZXxhbC5JbXBvcnRhbnQpP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxpLHImYWwuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPWl9cmVtb3ZlU3R5bGUodCxlLGkpe2kmYWwuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifXNldFByb3BlcnR5KHQsZSxpKXt0W2VdPWl9c2V0VmFsdWUodCxlKXt0Lm5vZGVWYWx1ZT1lfWxpc3Rlbih0LGUsaSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLFVZKGkpKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxVWShpKSl9fTtmdW5jdGlvbiBqWShuKXtyZXR1cm4iVEVNUExBVEUiPT09bi50YWdOYW1lJiZ2b2lkIDAhPT1uLmNvbnRlbnR9IkAiLmNoYXJDb2RlQXQoMCk7dmFyIGszPWNsYXNzIGV4dGVuZHMgV3h7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCksdGhpcy5jb21wb25lbnQ9aTtsZXQgbz12VChyKyItIitpLmlkLGkuc3R5bGVzLFtdKTtlLmFkZFN0eWxlcyhvKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uKG4pe3JldHVybiJfbmdjb250ZW50LSVDT01QJSIucmVwbGFjZShOMyxuKX0ocisiLSIraS5pZCksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbihuKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UoTjMsbil9KHIrIi0iK2kuaWQpfWFwcGx5VG9Ib3N0KHQpe3N1cGVyLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtsZXQgaT1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9fSxGMz1jbGFzcyBleHRlbmRzIFd4e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9zdEVsPWksdGhpcy5zaGFkb3dSb290PWkuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IG89dlQoci5pZCxyLnN0eWxlcyxbXSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50ZXh0Q29udGVudD1vW3NdLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChhKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSkpfX0sZ3dlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBfVHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1zdXBwb3J0cyhlKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKGksciwhMSksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR1k9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sX3dlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSx2d2U9e2FsdDpuPT5uLmFsdEtleSxjb250cm9sOm49Pm4uY3RybEtleSxtZXRhOm49Pm4ubWV0YUtleSxzaGlmdDpuPT5uLnNoaWZ0S2V5fSx5d2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIF9Ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiBudWxsIT1uLnBhcnNlRXZlbnROYW1lKGUpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe2xldCBvPW4ucGFyc2VFdmVudE5hbWUoaSkscz1uLmV2ZW50Q2FsbGJhY2soby5mdWxsS2V5LHIsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmdsKCkub25BbmRDYW5jZWwoZSxvLmRvbUV2ZW50TmFtZSxzKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGUpe2xldCBpPWUudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9aS5zaGlmdCgpO2lmKDA9PT1pLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7bGV0IG89bi5fbm9ybWFsaXplS2V5KGkucG9wKCkpLHM9IiIsYT1pLmluZGV4T2YoImNvZGUiKTtpZihhPi0xJiYoaS5zcGxpY2UoYSwxKSxzPSJjb2RlLiIpLEdZLmZvckVhY2goYz0+e2xldCB1PWkuaW5kZXhPZihjKTt1Pi0xJiYoaS5zcGxpY2UodSwxKSxzKz1jKyIuIil9KSxzKz1vLDAhPWkubGVuZ3RofHwwPT09by5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGw9e307cmV0dXJuIGwuZG9tRXZlbnROYW1lPXIsbC5mdWxsS2V5PXMsbH1zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGUsaSl7bGV0IHI9X3dlW2Uua2V5XXx8ZS5rZXksbz0iIjtyZXR1cm4gaS5pbmRleE9mKCJjb2RlLiIpPi0xJiYocj1lLmNvZGUsbz0iY29kZS4iKSwhKG51bGw9PXJ8fCFyKSYmKHI9ci50b0xvd2VyQ2FzZSgpLCIgIj09PXI/cj0ic3BhY2UiOiIuIj09PXImJihyPSJkb3QiKSxHWS5mb3JFYWNoKHM9PntzIT09ciYmKDAsdndlW3NdKShlKSYmKG8rPXMrIi4iKX0pLG8rPXIsbz09PWkpfXN0YXRpYyBldmVudENhbGxiYWNrKGUsaSxyKXtyZXR1cm4gbz0+e24ubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKG8sZSkmJnIucnVuR3VhcmRlZCgoKT0+aShvKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGUpe3JldHVybiJlc2MiPT09ZT8iZXNjYXBlIjplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd3dlPVt7cHJvdmlkZTppZCx1c2VWYWx1ZTpJM30se3Byb3ZpZGU6eU4sdXNlVmFsdWU6ZnVuY3Rpb24oKXtHeC5tYWtlQ3VycmVudCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6QnQsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtQaz1ufShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxCMz13TihXNywiYnJvd3NlciIsd3dlKSxYWT1uZXcgc2UoIiIpLE13ZT1be3Byb3ZpZGU6TGIsdXNlQ2xhc3M6Y2xhc3N7YWRkVG9XaW5kb3codCl7V3IuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PShpLHI9ITApPT57bGV0IG89dC5maW5kVGVzdGFiaWxpdHlJblRyZWUoaSxyKTtpZihudWxsPT1vKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuIik7cmV0dXJuIG99LFdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT50LmdldEFsbFRlc3RhYmlsaXRpZXMoKSxXci5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT50LmdldEFsbFJvb3RFbGVtZW50cygpLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoV3IuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goaT0+e2xldCByPVdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbz1yLmxlbmd0aCxzPSExLGE9ZnVuY3Rpb24obCl7cz1zfHxsLG8tLSwwPT1vJiZpKHMpfTtyLmZvckVhY2goZnVuY3Rpb24obCl7bC53aGVuU3RhYmxlKGEpfSl9KX1maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLGkpe3JldHVybiBudWxsPT1lP251bGw6dC5nZXRUZXN0YWJpbGl0eShlKT8/KGk/Z2woKS5pc1NoYWRvd1Jvb3QoZSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5wYXJlbnRFbGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnhOLHVzZUNsYXNzOkpFLGRlcHM6W3B0LCRFLExiXX0se3Byb3ZpZGU6SkUsdXNlQ2xhc3M6SkUsZGVwczpbcHQsJEUsTGJdfV0sU3dlPVt7cHJvdmlkZTprRSx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOlNzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNzfSxkZXBzOltdfSx7cHJvdmlkZTptVCx1c2VDbGFzczpnd2UsbXVsdGk6ITAsZGVwczpbQnQscHQsaWRdfSx7cHJvdmlkZTptVCx1c2VDbGFzczp5d2UsbXVsdGk6ITAsZGVwczpbQnRdfSx7cHJvdmlkZTpqeCx1c2VDbGFzczpqeCxkZXBzOltnVCx6eCxyZl19LHtwcm92aWRlOnFjLHVzZUV4aXN0aW5nOmp4fSx7cHJvdmlkZTpxWSx1c2VFeGlzdGluZzp6eH0se3Byb3ZpZGU6engsdXNlQ2xhc3M6engsZGVwczpbQnRdfSx7cHJvdmlkZTpnVCx1c2VDbGFzczpnVCxkZXBzOlttVCxwdF19LHtwcm92aWRlOlBmLHVzZUNsYXNzOnV3ZSxkZXBzOltdfSxbXV0seVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6cmYsdXNlVmFsdWU6ZS5hcHBJZH0se3Byb3ZpZGU6V1ksdXNlRXhpc3Rpbmc6cmZ9LGN3ZV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFhZLDEyKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbLi4uU3dlLC4uLk13ZV0saW1wb3J0czpba2UscTddfSksbn0pKCksUmY9KG5ldyBzZSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLG5ldyBzZSgiSGFtbWVyTG9hZGVyIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcoZXx8bik6UihRWSksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSksUVk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJme2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWV9c2FuaXRpemUoZSxpKXtpZihudWxsPT1pKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIEpyLk5PTkU6cmV0dXJuIGk7Y2FzZSBKci5IVE1MOnJldHVybiBabChpLCJIVE1MIik/JHMoaSk6WUYodGhpcy5fZG9jLFN0cmluZyhpKSkudG9TdHJpbmcoKTtjYXNlIEpyLlNUWUxFOnJldHVybiBabChpLCJTdHlsZSIpPyRzKGkpOmk7Y2FzZSBKci5TQ1JJUFQ6aWYoWmwoaSwiU2NyaXB0IikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2UgSnIuVVJMOnJldHVybiBabChpLCJVUkwiKT8kcyhpKTpFYihTdHJpbmcoaSkpO2Nhc2UgSnIuUkVTT1VSQ0VfVVJMOmlmKFpsKGksIlJlc291cmNlVVJMIikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7ZX0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWApfX1ieXBhc3NTZWN1cml0eVRydXN0SHRtbChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBSayhuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IE9rKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0KGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGtrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0VXJsKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEZrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgTmsobil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcgZTpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFFZKG4uZ2V0KEJ0KSl9KFIoem4pKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHF4PShuZXcgS2woIjE0LjIuMTEiKSxkOChaWSgpLDEpLGNsYXNze30pLGJUPWNsYXNze30sdXU9IioiO2Z1bmN0aW9uIEhyKG4sdCl7cmV0dXJue3R5cGU6NyxuYW1lOm4sZGVmaW5pdGlvbnM6dCxvcHRpb25zOnt9fX1mdW5jdGlvbiBWaShuLHQ9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6dCx0aW1pbmdzOm59fWZ1bmN0aW9uIEgzKG4sdD1udWxsKXtyZXR1cm57dHlwZTozLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiB4VChuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gcm4obil7cmV0dXJue3R5cGU6NixzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gRWkobix0LGUpe3JldHVybnt0eXBlOjAsbmFtZTpuLHN0eWxlczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gT2Yobil7cmV0dXJue3R5cGU6NSxzdGVwczpufX1mdW5jdGlvbiBJaShuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGtmKG49bnVsbCl7cmV0dXJue3R5cGU6OSxvcHRpb25zOm59fWZ1bmN0aW9uIEZmKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjExLHNlbGVjdG9yOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiBKWShuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4pfXZhciBTcD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7SlkoKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/dCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LFl4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7bGV0IGU9MCxpPTAscj0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP0pZKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaChzPT57cy5vbkRvbmUoKCk9PnsrK2U9PW8mJnRoaXMuX29uRmluaXNoKCl9KSxzLm9uRGVzdHJveSgoKT0+eysraT09byYmdGhpcy5fb25EZXN0cm95KCl9KSxzLm9uU3RhcnQoKCk9PnsrK3I9PW8mJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgocyxhKT0+TWF0aC5tYXgocyxhLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuaW5pdCgpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe2xldCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goaT0+e2xldCByPWkudG90YWxUaW1lP01hdGgubWluKDEsZS9pLnRvdGFsVGltZSk6MTtpLnNldFBvc2l0aW9uKHIpfSl9Z2V0UG9zaXRpb24oKXtsZXQgdD10aGlzLnBsYXllcnMucmVkdWNlKChlLGkpPT5udWxsPT09ZXx8aS50b3RhbFRpbWU+ZS50b3RhbFRpbWU/aTplLG51bGwpO3JldHVybiBudWxsIT10P3QuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fTtmdW5jdGlvbiAkWShuKXtyZXR1cm4gbmV3IE10KDNlMywhMSl9ZnVuY3Rpb24gYUIoKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpfWZ1bmN0aW9uIEVwKG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgU3A7Y2FzZSAxOnJldHVybiBuWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBZeChuKX19ZnVuY3Rpb24gZlgobix0LGUsaSxyPW5ldyBNYXAsbz1uZXcgTWFwKXtsZXQgcz1bXSxhPVtdLGw9LTEsYz1udWxsO2lmKGkuZm9yRWFjaCh1PT57bGV0IGQ9dS5nZXQoIm9mZnNldCIpLHA9ZD09bCxoPXAmJmN8fG5ldyBNYXA7dS5mb3JFYWNoKChmLG0pPT57bGV0IEM9bSxfPWY7aWYoIm9mZnNldCIhPT1tKXN3aXRjaChDPXQubm9ybWFsaXplUHJvcGVydHlOYW1lKEMscyksXyl7Y2FzZSIhIjpfPXIuZ2V0KG0pO2JyZWFrO2Nhc2UgdXU6Xz1vLmdldChtKTticmVhaztkZWZhdWx0Ol89dC5ub3JtYWxpemVTdHlsZVZhbHVlKG0sQyxfLHMpfWguc2V0KEMsXyl9KSxwfHxhLnB1c2goaCksYz1oLGw9ZH0pLHMubGVuZ3RoKXRocm93IG5ldyBNdCgzNTAyLCExKTtyZXR1cm4gYX1mdW5jdGlvbiBsQihuLHQsZSxpKXtzd2l0Y2godCl7Y2FzZSJzdGFydCI6bi5vblN0YXJ0KCgpPT5pKGUmJlUzKGUsInN0YXJ0IixuKSkpO2JyZWFrO2Nhc2UiZG9uZSI6bi5vbkRvbmUoKCk9PmkoZSYmVTMoZSwiZG9uZSIsbikpKTticmVhaztjYXNlImRlc3Ryb3kiOm4ub25EZXN0cm95KCgpPT5pKGUmJlUzKGUsImRlc3Ryb3kiLG4pKSl9fWZ1bmN0aW9uIFUzKG4sdCxlKXtsZXQgbz1jQihuLmVsZW1lbnQsbi50cmlnZ2VyTmFtZSxuLmZyb21TdGF0ZSxuLnRvU3RhdGUsdHx8bi5waGFzZU5hbWUsZS50b3RhbFRpbWU/P24udG90YWxUaW1lLCEhZS5kaXNhYmxlZCkscz1uLl9kYXRhO3JldHVybiBudWxsIT1zJiYoby5fZGF0YT1zKSxvfWZ1bmN0aW9uIGNCKG4sdCxlLGkscj0iIixvPTAscyl7cmV0dXJue2VsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGZyb21TdGF0ZTplLHRvU3RhdGU6aSxwaGFzZU5hbWU6cix0b3RhbFRpbWU6byxkaXNhYmxlZDohIXN9fWZ1bmN0aW9uIEJhKG4sdCxlKXtsZXQgaT1uLmdldCh0KTtyZXR1cm4gaXx8bi5zZXQodCxpPWUpLGl9ZnVuY3Rpb24gZVgobil7bGV0IHQ9bi5pbmRleE9mKCI6Iik7cmV0dXJuW24uc3Vic3RyaW5nKDEsdCksbi5zbGljZSh0KzEpXX12YXIgWTM9KG4sdCk9PiExLG1YPShuLHQsZSk9PltdLGdYPW51bGw7ZnVuY3Rpb24gdUIobil7bGV0IHQ9bi5wYXJlbnROb2RlfHxuLmhvc3Q7cmV0dXJuIHQ9PT1nWD9udWxsOnR9KGFCKCl8fHR5cGVvZiBFbGVtZW50PCJ1IikmJih0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSI/KGdYPSgoKT0+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSgpLFkzPShuLHQpPT57Zm9yKDt0Oyl7aWYodD09PW4pcmV0dXJuITA7dD11Qih0KX1yZXR1cm4hMX0pOlkzPShuLHQpPT5uLmNvbnRhaW5zKHQpLG1YPShuLHQsZSk9PntpZihlKXJldHVybiBBcnJheS5mcm9tKG4ucXVlcnlTZWxlY3RvckFsbCh0KSk7bGV0IGk9bi5xdWVyeVNlbGVjdG9yKHQpO3JldHVybiBpP1tpXTpbXX0pO3ZhciBOZj1udWxsLHRYPSExO3ZhciBfWD1ZMyx2WD1tWCxkQj0oKCk9PntjbGFzcyBue3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShlKXtyZXR1cm4gZnVuY3Rpb24obil7TmZ8fChOZj0odHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSx0WD0hIU5mLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBOZi5zdHlsZSk7bGV0IHQ9ITA7cmV0dXJuIE5mLnN0eWxlJiYhZnVuY3Rpb24obil7cmV0dXJuImVia2l0Ij09bi5zdWJzdHJpbmcoMSw2KX0obikmJih0PW4gaW4gTmYuc3R5bGUsIXQmJnRYJiYodD0iV2Via2l0IituLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK24uc2xpY2UoMSlpbiBOZi5zdHlsZSkpLHR9KGUpfW1hdGNoZXNFbGVtZW50KGUsaSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGUsaSl7cmV0dXJuIF9YKGUsaSl9Z2V0UGFyZW50RWxlbWVudChlKXtyZXR1cm4gdUIoZSl9cXVlcnkoZSxpLHIpe3JldHVybiB2WChlLGkscil9Y29tcHV0ZVN0eWxlKGUsaSxyKXtyZXR1cm4gcnx8IiJ9YW5pbWF0ZShlLGkscixvLHMsYT1bXSxsKXtyZXR1cm4gbmV3IFNwKHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHRDPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5PT1A9bmV3IGRCLG59KSgpLGJYPSJuZy1lbnRlciIsWDM9Im5nLWxlYXZlIix3VD0ibmctdHJpZ2dlciIsVFQ9Ii5uZy10cmlnZ2VyIixuWD0ibmctYW5pbWF0aW5nIixRMz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gZmQobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO2xldCB0PW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIXR8fHQubGVuZ3RoPDI/MDpLMyhwYXJzZUZsb2F0KHRbMV0pLHRbMl0pfWZ1bmN0aW9uIEszKG4sdCl7cmV0dXJuInMiPT09dD8xZTMqbjpufWZ1bmN0aW9uIERUKG4sdCxlKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9uOmZ1bmN0aW9uKG4sdCxlKXtsZXQgcixvPTAscz0iIjtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBhPW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1hKXJldHVybiB0LnB1c2goJFkoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9SzMocGFyc2VGbG9hdChhWzFdKSxhWzJdKTtsZXQgbD1hWzNdO251bGwhPWwmJihvPUszKHBhcnNlRmxvYXQobCksYVs0XSkpO2xldCBjPWFbNV07YyYmKHM9Yyl9ZWxzZSByPW47aWYoIWUpe2xldCBhPSExLGw9dC5sZW5ndGg7cjwwJiYodC5wdXNoKG5ldyBNdCgzMTAwLCExKSksYT0hMCksbzwwJiYodC5wdXNoKG5ldyBNdCgzMTAxLCExKSksYT0hMCksYSYmdC5zcGxpY2UobCwwLCRZKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5Om8sZWFzaW5nOnN9fShuLHQsZSl9ZnVuY3Rpb24gbkMobix0PXt9KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dFtlXT1uW2VdfSksdH1mdW5jdGlvbiB4WChuKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0LnNldChlLG5bZV0pfSksdH1mdW5jdGlvbiBqMChuLHQ9bmV3IE1hcCxlKXtpZihlKWZvcihsZXRbaSxyXW9mIGUpdC5zZXQoaSxyKTtmb3IobGV0W2kscl1vZiBuKXQuc2V0KGkscik7cmV0dXJuIHR9ZnVuY3Rpb24gaVgobix0LGUpe3JldHVybiBlP3QrIjoiK2UrIjsiOiIifWZ1bmN0aW9uIENYKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5zdHlsZS5sZW5ndGg7ZSsrKXtsZXQgaT1uLnN0eWxlLml0ZW0oZSk7dCs9aVgoMCxpLG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpKSl9Zm9yKGxldCBlIGluIG4uc3R5bGUpbi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShlKSYmIWUuc3RhcnRzV2l0aCgiXyIpJiYodCs9aVgoMCxtTWUoZSksbi5zdHlsZVtlXSkpO24uc2V0QXR0cmlidXRlKCJzdHlsZSIsdCl9ZnVuY3Rpb24gZHUobix0LGUpe24uc3R5bGUmJih0LmZvckVhY2goKGkscik9PntsZXQgbz1wQihyKTtlJiYhZS5oYXMocikmJmUuc2V0KHIsbi5zdHlsZVtvXSksbi5zdHlsZVtvXT1pfSksYUIoKSYmQ1gobikpfWZ1bmN0aW9uIEJmKG4sdCl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoZSxpKT0+e2xldCByPXBCKGkpO24uc3R5bGVbcl09IiJ9KSxhQigpJiZDWChuKSl9ZnVuY3Rpb24gWHgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTp4VChuKTpufXZhciBaMz1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB3WChuKXtsZXQgdD1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBlO2Zvcig7ZT1aMy5leGVjKG4pOyl0LnB1c2goZVsxXSk7WjMubGFzdEluZGV4PTB9cmV0dXJuIHR9ZnVuY3Rpb24gS3gobix0LGUpe2xldCBpPW4udG9TdHJpbmcoKSxyPWkucmVwbGFjZShaMywobyxzKT0+e2xldCBhPXRbc107cmV0dXJuIG51bGw9PWEmJihlLnB1c2gobmV3IE10KDMwMDMsITEpKSxhPSIiKSxhLnRvU3RyaW5nKCl9KTtyZXR1cm4gcj09aT9uOnJ9ZnVuY3Rpb24gQVQobil7bGV0IHQ9W10sZT1uLm5leHQoKTtmb3IoOyFlLmRvbmU7KXQucHVzaChlLnZhbHVlKSxlPW4ubmV4dCgpO3JldHVybiB0fXZhciBmTWU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHBCKG4pe3JldHVybiBuLnJlcGxhY2UoZk1lLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBtTWUobil7cmV0dXJuIG4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIExhKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIDc6cmV0dXJuIG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSAwOnJldHVybiBuLnZpc2l0U3RhdGUodCxlKTtjYXNlIDE6cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKHQsZSk7Y2FzZSAyOnJldHVybiBuLnZpc2l0U2VxdWVuY2UodCxlKTtjYXNlIDM6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgNDpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIDU6cmV0dXJuIG4udmlzaXRLZXlmcmFtZXModCxlKTtjYXNlIDY6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgODpyZXR1cm4gbi52aXNpdFJlZmVyZW5jZSh0LGUpO2Nhc2UgOTpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZCh0LGUpO2Nhc2UgMTA6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSAxMTpyZXR1cm4gbi52aXNpdFF1ZXJ5KHQsZSk7Y2FzZSAxMjpyZXR1cm4gbi52aXNpdFN0YWdnZXIodCxlKTtkZWZhdWx0OnRocm93IG5ldyBNdCgzMDA0LCExKX19ZnVuY3Rpb24gTVgobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbdF19ZnVuY3Rpb24gYk1lKG4sdCl7bGV0IGU9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGk9PmZ1bmN0aW9uKG4sdCxlKXtpZigiOiI9PW5bMF0pe2xldCBsPWZ1bmN0aW9uKG4sdCl7c3dpdGNoKG4pe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKT5wYXJzZUZsb2F0KGUpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGUsaSk9PnBhcnNlRmxvYXQoaSk8cGFyc2VGbG9hdChlKTtkZWZhdWx0OnJldHVybiB0LnB1c2gobmV3IE10KDMwMTYsITEpKSwiKiA9PiAqIn19KG4sZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpcmV0dXJuIHZvaWQgdC5wdXNoKGwpO249bH1sZXQgaT1uLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1pfHxpLmxlbmd0aDw0KXJldHVybiBlLnB1c2gobmV3IE10KDMwMTUsITEpKSx0O2xldCByPWlbMV0sbz1pWzJdLHM9aVszXTt0LnB1c2goclgocixzKSksIjwiPT1vWzBdJiYhKCIqIj09ciYmIioiPT1zKSYmdC5wdXNoKHJYKHMscikpfShpLGUsdCkpOmUucHVzaChuKSxlfXZhciBNVD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksU1Q9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiByWChuLHQpe2xldCBlPU1ULmhhcyhuKXx8U1QuaGFzKG4pLGk9TVQuaGFzKHQpfHxTVC5oYXModCk7cmV0dXJuKHIsbyk9PntsZXQgcz0iKiI9PW58fG49PXIsYT0iKiI9PXR8fHQ9PW87cmV0dXJuIXMmJmUmJiJib29sZWFuIj09dHlwZW9mIHImJihzPXI/TVQuaGFzKG4pOlNULmhhcyhuKSksIWEmJmkmJiJib29sZWFuIj09dHlwZW9mIG8mJihhPW8/TVQuaGFzKHQpOlNULmhhcyh0KSkscyYmYX19dmFyIHdNZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBEWChuLHQsZSxpKXtyZXR1cm4gbmV3IEozKG4pLmJ1aWxkKHQsZSxpKX12YXIgSjM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZHJpdmVyPXR9YnVpbGQodCxlLGkpe2xldCByPW5ldyAkMyhlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShyKSxMYSh0aGlzLFh4KHQpLHIpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0LmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksdC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcih0LGUpe2xldCBpPWUucXVlcnlDb3VudD0wLHI9ZS5kZXBDb3VudD0wLG89W10scz1bXTtyZXR1cm4iQCI9PXQubmFtZS5jaGFyQXQoMCkmJmUuZXJyb3JzLnB1c2gobmV3IE10KDMwMDYsITEpKSx0LmRlZmluaXRpb25zLmZvckVhY2goYT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09YS50eXBlKXtsZXQgbD1hLGM9bC5uYW1lO2MudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2godT0+e2wubmFtZT11LG8ucHVzaCh0aGlzLnZpc2l0U3RhdGUobCxlKSl9KSxsLm5hbWU9Y31lbHNlIGlmKDE9PWEudHlwZSl7bGV0IGw9dGhpcy52aXNpdFRyYW5zaXRpb24oYSxlKTtpKz1sLnF1ZXJ5Q291bnQscis9bC5kZXBDb3VudCxzLnB1c2gobCl9ZWxzZSBlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA3LCExKSl9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOnMscXVlcnlDb3VudDppLGRlcENvdW50OnIsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7bGV0IGk9dGhpcy52aXNpdFN0eWxlKHQuc3R5bGVzLGUpLHI9dC5vcHRpb25zJiZ0Lm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGkuY29udGFpbnNEeW5hbWljU3R5bGVzKXtsZXQgbz1uZXcgU2V0LHM9cnx8e307aS5zdHlsZXMuZm9yRWFjaChhPT57YSBpbnN0YW5jZW9mIE1hcCYmYS5mb3JFYWNoKGw9Pnt3WChsKS5mb3JFYWNoKGM9PntzLmhhc093blByb3BlcnR5KGMpfHxvLmFkZChjKX0pfSl9KSxvLnNpemUmJihBVChvLnZhbHVlcygpKSxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA4LCExKSkpfXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6aSxvcHRpb25zOnI/e3BhcmFtczpyfTpudWxsfX12aXNpdFRyYW5zaXRpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7bGV0IGk9TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSk7cmV0dXJue3R5cGU6MSxtYXRjaGVyczpiTWUodC5leHByLGUuZXJyb3JzKSxhbmltYXRpb246aSxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZSh0LGUpe3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoaT0+TGEodGhpcyxpLGUpKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0R3JvdXAodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lLHI9MCxvPXQuc3RlcHMubWFwKHM9PntlLmN1cnJlbnRUaW1lPWk7bGV0IGE9TGEodGhpcyxzLGUpO3JldHVybiByPU1hdGgubWF4KHIsZS5jdXJyZW50VGltZSksYX0pO3JldHVybiBlLmN1cnJlbnRUaW1lPXIse3R5cGU6MyxzdGVwczpvLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlKHQsZSl7bGV0IGk9ZnVuY3Rpb24obix0KXtpZihuLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gejMoRFQobix0KS5kdXJhdGlvbiwwLCIiKTtsZXQgZT1uO2lmKGUuc3BsaXQoL1xzKy8pLnNvbWUobz0+InsiPT1vLmNoYXJBdCgwKSYmInsiPT1vLmNoYXJBdCgxKSkpe2xldCBvPXozKDAsMCwiIik7cmV0dXJuIG8uZHluYW1pYz0hMCxvLnN0clZhbHVlPWUsb31sZXQgcj1EVChlLHQpO3JldHVybiB6MyhyLmR1cmF0aW9uLHIuZGVsYXksci5lYXNpbmcpfSh0LnRpbWluZ3MsZS5lcnJvcnMpO2UuY3VycmVudEFuaW1hdGVUaW1pbmdzPWk7bGV0IHIsbz10LnN0eWxlcz90LnN0eWxlczpybih7fSk7aWYoNT09by50eXBlKXI9dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpO2Vsc2V7bGV0IHM9dC5zdHlsZXMsYT0hMTtpZighcyl7YT0hMDtsZXQgYz17fTtpLmVhc2luZyYmKGMuZWFzaW5nPWkuZWFzaW5nKSxzPXJuKGMpfWUuY3VycmVudFRpbWUrPWkuZHVyYXRpb24raS5kZWxheTtsZXQgbD10aGlzLnZpc2l0U3R5bGUocyxlKTtsLmlzRW1wdHlTdGVwPWEscj1sfXJldHVybiBlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczppLHN0eWxlOnIsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKHQsZSl7bGV0IGk9dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoaSxlKSxpfV9tYWtlU3R5bGVBc3QodCxlKXtsZXQgaT1bXSxyPUFycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzOlt0LnN0eWxlc107Zm9yKGxldCBhIG9mIHIpInN0cmluZyI9PXR5cGVvZiBhP2E9PT11dT9pLnB1c2goYSk6ZS5lcnJvcnMucHVzaChuZXcgTXQoMzAwMiwhMSkpOmkucHVzaCh4WChhKSk7bGV0IG89ITEscz1udWxsO3JldHVybiBpLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJihhLmhhcygiZWFzaW5nIikmJihzPWEuZ2V0KCJlYXNpbmciKSxhLmRlbGV0ZSgiZWFzaW5nIikpLCFvKSlmb3IobGV0IGwgb2YgYS52YWx1ZXMoKSlpZihsLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7bz0hMDticmVha319KSx7dHlwZTo2LHN0eWxlczppLGVhc2luZzpzLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6byxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtpJiZvPjAmJihvLT1pLmR1cmF0aW9uK2kuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2gocz0+eyJzdHJpbmciIT10eXBlb2YgcyYmcy5mb3JFYWNoKChhLGwpPT57bGV0IGM9ZS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHU9Yy5nZXQobCksZD0hMDt1JiYobyE9ciYmbz49dS5zdGFydFRpbWUmJnI8PXUuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTAsITEpKSxkPSExKSxvPXUuc3RhcnRUaW1lKSxkJiZjLnNldChsLHtzdGFydFRpbWU6byxlbmRUaW1lOnJ9KSxlLm9wdGlvbnMmJmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10LnBhcmFtc3x8e30scj13WChuKTtyLmxlbmd0aCYmci5mb3JFYWNoKG89PntpLmhhc093blByb3BlcnR5KG8pfHxlLnB1c2gobmV3IE10KDMwMDEsITEpKX0pfShhLGUub3B0aW9ucyxlLmVycm9ycyl9KX0pfXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTEsITEpKSxpO2xldCBvPTAscz1bXSxhPSExLGw9ITEsYz0wLHU9dC5zdGVwcy5tYXAoXz0+e2xldCB5PXRoaXMuX21ha2VTdHlsZUFzdChfLGUpLEk9bnVsbCE9eS5vZmZzZXQ/eS5vZmZzZXQ6ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBudWxsO2xldCB0PW51bGw7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2goZT0+e2lmKGUgaW5zdGFuY2VvZiBNYXAmJmUuaGFzKCJvZmZzZXQiKSl7bGV0IGk9ZTt0PXBhcnNlRmxvYXQoaS5nZXQoIm9mZnNldCIpKSxpLmRlbGV0ZSgib2Zmc2V0Iil9fSk7ZWxzZSBpZihuIGluc3RhbmNlb2YgTWFwJiZuLmhhcygib2Zmc2V0Iikpe2xldCBlPW47dD1wYXJzZUZsb2F0KGUuZ2V0KCJvZmZzZXQiKSksZS5kZWxldGUoIm9mZnNldCIpfXJldHVybiB0fSh5LnN0eWxlcyksQT0wO3JldHVybiBudWxsIT1JJiYobysrLEE9eS5vZmZzZXQ9SSksbD1sfHxBPDB8fEE+MSxhPWF8fEE8YyxjPUEscy5wdXNoKEEpLHl9KTtsJiZlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEyLCExKSksYSYmZS5lcnJvcnMucHVzaChuZXcgTXQoMzIwMCwhMSkpO2xldCBkPXQuc3RlcHMubGVuZ3RoLHA9MDtvPjAmJm88ZD9lLmVycm9ycy5wdXNoKG5ldyBNdCgzMjAyLCExKSk6MD09byYmKHA9MS8oZC0xKSk7bGV0IGg9ZC0xLGY9ZS5jdXJyZW50VGltZSxtPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLEM9bS5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKChfLHkpPT57bGV0IEk9cD4wP3k9PWg/MTpwKnk6c1t5XSxBPUkqQztlLmN1cnJlbnRUaW1lPWYrbS5kZWxheStBLG0uZHVyYXRpb249QSx0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KF8sZSksXy5vZmZzZXQ9SSxpLnN0eWxlcy5wdXNoKF8pfSksaX12aXNpdFJlZmVyZW5jZSh0LGUpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOkxhKHRoaXMsWHgodC5hbmltYXRpb24pLGUpLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpMZih0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYodCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLHI9dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O2xldFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PSEhbi5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoZT0+IjpzZWxmIj09ZSk7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSh3TWUsIiIpKSxuPW4ucmVwbGFjZSgvQFwqL2csVFQpLnJlcGxhY2UoL0BcdysvZyxlPT5UVCsiLSIrZS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLFEzKSxbbix0XX0odC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1pLmxlbmd0aD9pKyIgIitvOm8sQmEoZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtsZXQgYT1MYSh0aGlzLFh4KHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWkse3R5cGU6MTEsc2VsZWN0b3I6byxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjphLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEzLCExKSk7bGV0IGk9ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06RFQodC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSksdGltaW5nczppLG9wdGlvbnM6bnVsbH19fSwkMz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5kPW5ldyBTZXR9fTtmdW5jdGlvbiBMZihuKXtyZXR1cm4gbj8obj1uQyhuKSkucGFyYW1zJiYobi5wYXJhbXM9ZnVuY3Rpb24obil7cmV0dXJuIG4/bkMobik6bnVsbH0obi5wYXJhbXMpKTpuPXt9LG59ZnVuY3Rpb24gejMobix0LGUpe3JldHVybntkdXJhdGlvbjpuLGRlbGF5OnQsZWFzaW5nOmV9fWZ1bmN0aW9uIGhCKG4sdCxlLGkscixvLHM9bnVsbCxhPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6bixrZXlmcmFtZXM6dCxwcmVTdHlsZVByb3BzOmUscG9zdFN0eWxlUHJvcHM6aSxkdXJhdGlvbjpyLGRlbGF5Om8sdG90YWxUaW1lOnIrbyxlYXNpbmc6cyxzdWJUaW1lbGluZTphfX12YXIgWng9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQodCl7cmV0dXJuIHRoaXMuX21hcC5nZXQodCl8fFtdfWFwcGVuZCh0LGUpe2xldCBpPXRoaXMuX21hcC5nZXQodCk7aXx8dGhpcy5fbWFwLnNldCh0LGk9W10pLGkucHVzaCguLi5lKX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19LElNZT1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksUk1lPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBBWChuLHQsZSxpLHIsbz1uZXcgTWFwLHM9bmV3IE1hcCxhLGwsYz1bXSl7cmV0dXJuKG5ldyBlQikuYnVpbGRLZXlmcmFtZXMobix0LGUsaSxyLG8scyxhLGwsYyl9dmFyIGVCPWNsYXNze2J1aWxkS2V5ZnJhbWVzKHQsZSxpLHIsbyxzLGEsbCxjLHU9W10pe2M9Y3x8bmV3IFp4O2xldCBkPW5ldyBKeCh0LGUsYyxyLG8sdSxbXSk7ZC5vcHRpb25zPWw7bGV0IHA9bC5kZWxheT9mZChsLmRlbGF5KTowO2QuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAocCksZC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtzXSxudWxsLGQuZXJyb3JzLGwpLExhKHRoaXMsaSxkKTtsZXQgaD1kLnRpbWVsaW5lcy5maWx0ZXIoZj0+Zi5jb250YWluc0FuaW1hdGlvbigpKTtpZihoLmxlbmd0aCYmYS5zaXplKXtsZXQgZjtmb3IobGV0IG09aC5sZW5ndGgtMTttPj0wO20tLSl7bGV0IEM9aFttXTtpZihDLmVsZW1lbnQ9PT1lKXtmPUM7YnJlYWt9fWYmJiFmLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJmYuc2V0U3R5bGVzKFthXSxudWxsLGQuZXJyb3JzLGwpfXJldHVybiBoLmxlbmd0aD9oLm1hcChmPT5mLmJ1aWxkS2V5ZnJhbWVzKCkpOltoQihlLFtdLFtdLFtdLDAscCwiIiwhMSldfXZpc2l0VHJpZ2dlcih0LGUpe312aXNpdFN0YXRlKHQsZSl7fXZpc2l0VHJhbnNpdGlvbih0LGUpe312aXNpdEFuaW1hdGVDaGlsZCh0LGUpe2xldCBpPWUuc3ViSW5zdHJ1Y3Rpb25zLmdldChlLmVsZW1lbnQpO2lmKGkpe2xldCByPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscz10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhpLHIsci5vcHRpb25zKTtvIT1zJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShzKX1lLnByZXZpb3VzTm9kZT10fXZpc2l0QW5pbWF0ZVJlZih0LGUpe2xldCBpPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO2kudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW3Qub3B0aW9ucyx0LmFuaW1hdGlvbi5vcHRpb25zXSxlLGkpLHRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24saSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGUucHJldmlvdXNOb2RlPXR9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKHQsZSxpKXtmb3IobGV0IHIgb2YgdCl7bGV0IG89cj8uZGVsYXk7aWYobyl7bGV0IHM9Im51bWJlciI9PXR5cGVvZiBvP286ZmQoS3gobyxyPy5wYXJhbXM/P3t9LGUuZXJyb3JzKSk7aS5kZWxheU5leHRTdGVwKHMpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKHQsZSxpKXtsZXQgbz1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxzPW51bGwhPWkuZHVyYXRpb24/ZmQoaS5kdXJhdGlvbik6bnVsbCxhPW51bGwhPWkuZGVsYXk/ZmQoaS5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PXMmJnQuZm9yRWFjaChsPT57bGV0IGM9ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUobCxzLGEpO289TWF0aC5tYXgobyxjLmR1cmF0aW9uK2MuZGVsYXkpfSksb312aXNpdFJlZmVyZW5jZSh0LGUpe2UudXBkYXRlT3B0aW9ucyh0Lm9wdGlvbnMsITApLExhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH12aXNpdFNlcXVlbmNlKHQsZSl7bGV0IGk9ZS5zdWJDb250ZXh0Q291bnQscj1lLG89dC5vcHRpb25zO2lmKG8mJihvLnBhcmFtc3x8by5kZWxheSkmJihyPWUuY3JlYXRlU3ViQ29udGV4dChvKSxyLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPW8uZGVsYXkpKXs2PT1yLnByZXZpb3VzTm9kZS50eXBlJiYoci5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksci5wcmV2aW91c05vZGU9UFQpO2xldCBzPWZkKG8uZGVsYXkpO3IuZGVsYXlOZXh0U3RlcChzKX10LnN0ZXBzLmxlbmd0aCYmKHQuc3RlcHMuZm9yRWFjaChzPT5MYSh0aGlzLHMscikpLHIuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHIuc3ViQ29udGV4dENvdW50PmkmJnIudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRHcm91cCh0LGUpe2xldCBpPVtdLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9mZCh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKHM9PntsZXQgYT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtvJiZhLmRlbGF5TmV4dFN0ZXAobyksTGEodGhpcyxzLGEpLHI9TWF0aC5tYXgocixhLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksaS5wdXNoKGEuY3VycmVudFRpbWVsaW5lKX0pLGkuZm9yRWFjaChzPT5lLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFRpbWluZyh0LGUpe2lmKHQuZHluYW1pYyl7bGV0IGk9dC5zdHJWYWx1ZTtyZXR1cm4gRFQoZS5wYXJhbXM/S3goaSxlLnBhcmFtcyxlLmVycm9ycyk6aSxlLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOnQuZHVyYXRpb24sZGVsYXk6dC5kZWxheSxlYXNpbmc6dC5lYXNpbmd9fXZpc2l0QW5pbWF0ZSh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO2kuZGVsYXkmJihlLmluY3JlbWVudFRpbWUoaS5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7bGV0IG89dC5zdHlsZTs1PT1vLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpOihlLmluY3JlbWVudFRpbWUoaS5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKG8sZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZSxyPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFyJiZpLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSYmaS5mb3J3YXJkRnJhbWUoKTtsZXQgbz1yJiZyLmVhc2luZ3x8dC5lYXNpbmc7dC5pc0VtcHR5U3RlcD9pLmFwcGx5RW1wdHlTdGVwKG8pOmkuc2V0U3R5bGVzKHQuc3R5bGVzLG8sZS5lcnJvcnMsZS5vcHRpb25zKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixvPWkuZHVyYXRpb24sYT1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7YS5lYXNpbmc9aS5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChsPT57YS5mb3J3YXJkVGltZSgobC5vZmZzZXR8fDApKm8pLGEuc2V0U3R5bGVzKGwuc3R5bGVzLGwuZWFzaW5nLGUuZXJyb3JzLGUub3B0aW9ucyksYS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocitvKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxyPXQub3B0aW9uc3x8e30sbz1yLmRlbGF5P2ZkKHIuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1pJiZlLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9UFQpO2xldCBzPWksYT1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIXIub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9YS5sZW5ndGg7bGV0IGw9bnVsbDthLmZvckVhY2goKGMsdSk9PntlLmN1cnJlbnRRdWVyeUluZGV4PXU7bGV0IGQ9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxjKTtvJiZkLmRlbGF5TmV4dFN0ZXAobyksYz09PWUuZWxlbWVudCYmKGw9ZC5jdXJyZW50VGltZWxpbmUpLExhKHRoaXMsdC5hbmltYXRpb24sZCksZC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkscz1NYXRoLm1heChzLGQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocyksbCYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTdGFnZ2VyKHQsZSl7bGV0IGk9ZS5wYXJlbnRDb250ZXh0LHI9ZS5jdXJyZW50VGltZWxpbmUsbz10LnRpbWluZ3Mscz1NYXRoLmFicyhvLmR1cmF0aW9uKSxhPXMqKGUuY3VycmVudFF1ZXJ5VG90YWwtMSksbD1zKmUuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKG8uZHVyYXRpb248MD8icmV2ZXJzZSI6by5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6bD1hLWw7YnJlYWs7Y2FzZSJmdWxsIjpsPWkuY3VycmVudFN0YWdnZXJUaW1lfWxldCB1PWUuY3VycmVudFRpbWVsaW5lO2wmJnUuZGVsYXlOZXh0U3RlcChsKTtsZXQgZD11LmN1cnJlbnRUaW1lO0xhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxpLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLWQrKHIuc3RhcnRUaW1lLWkuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fSxQVD17fSxKeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWksdGhpcy5fZW50ZXJDbGFzc05hbWU9cix0aGlzLl9sZWF2ZUNsYXNzTmFtZT1vLHRoaXMuZXJyb3JzPXMsdGhpcy50aW1lbGluZXM9YSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVBULHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1sfHxuZXcgRzAodGhpcy5fZHJpdmVyLGUsMCksYS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyh0LGUpe2lmKCF0KXJldHVybjtsZXQgaT10LHI9dGhpcy5vcHRpb25zO251bGwhPWkuZHVyYXRpb24mJihyLmR1cmF0aW9uPWZkKGkuZHVyYXRpb24pKSxudWxsIT1pLmRlbGF5JiYoci5kZWxheT1mZChpLmRlbGF5KSk7bGV0IG89aS5wYXJhbXM7aWYobyl7bGV0IHM9ci5wYXJhbXM7c3x8KHM9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChhPT57KCFlfHwhcy5oYXNPd25Qcm9wZXJ0eShhKSkmJihzW2FdPUt4KG9bYV0scyx0aGlzLmVycm9ycykpfSl9fV9jb3B5T3B0aW9ucygpe2xldCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7bGV0IGU9dGhpcy5vcHRpb25zLnBhcmFtcztpZihlKXtsZXQgaT10LnBhcmFtcz17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntpW3JdPWVbcl19KX19cmV0dXJuIHR9Y3JlYXRlU3ViQ29udGV4dCh0PW51bGwsZSxpKXtsZXQgcj1lfHx0aGlzLmVsZW1lbnQsbz1uZXcgSngodGhpcy5fZHJpdmVyLHIsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhyLGl8fDApKTtyZXR1cm4gby5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsby5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3Msby5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksby51cGRhdGVPcHRpb25zKHQpLG8uY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxvLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsby5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxvfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9UFQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsZSxpKXtsZXQgcj17ZHVyYXRpb246ZT8/dC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoaT8/MCkrdC5kZWxheSxlYXNpbmc6IiJ9LG89bmV3IHRCKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChvKSxyfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLGkscixvLHMpe2xldCBhPVtdO2lmKHImJmEucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKElNZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKFJNZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBjPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsdCwxIT1pKTswIT09aSYmKGM9aTwwP2Muc2xpY2UoYy5sZW5ndGgraSxjLmxlbmd0aCk6Yy5zbGljZSgwLGkpKSxhLnB1c2goLi4uYyl9cmV0dXJuIW8mJjA9PWEubGVuZ3RoJiZzLnB1c2gobmV3IE10KDMwMTQsITEpKSxhfX0sRzA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9aSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9cix0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7bGV0IGU9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fWZvcmsodCxlKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgRzAodGhpcy5fZHJpdmVyLHQsZXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUodCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KHQse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKHQpe3QmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2ZvcihsZXRbZSxpXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChlLGl8fHV1KSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdXUpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKHQsZSxpLHIpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2xldCBvPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKG4sdCl7bGV0IGksZT1uZXcgTWFwO3JldHVybiBuLmZvckVhY2gocj0+e2lmKCIqIj09PXIpe2k9aXx8dC5rZXlzKCk7Zm9yKGxldCBvIG9mIGkpZS5zZXQobyx1dSl9ZWxzZSBqMChyLGUpfSksZX0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFthLGxdb2Ygcyl7bGV0IGM9S3gobCxvLGkpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGEsYyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoYSl8fHRoaXMuX2JhY2tGaWxsLnNldChhLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChhKT8/dXUpLHRoaXMuX3VwZGF0ZVN0eWxlKGEsYyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGUpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFt0LGVdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldCh0LGUpLHRoaXMuX3VwZGF0ZVN0eWxlKHQsZSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7bGV0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxpKT0+e2xldCByPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoaSk7KCFyfHxlLnRpbWU+ci50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoaSxlLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtsZXQgdD1uZXcgU2V0LGU9bmV3IFNldCxpPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24scj1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWowKGEsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7Yy5mb3JFYWNoKCh1LGQpPT57IiEiPT09dT90LmFkZChkKTp1PT09dXUmJmUuYWRkKGQpfSksaXx8Yy5zZXQoIm9mZnNldCIsbC90aGlzLmR1cmF0aW9uKSxyLnB1c2goYyl9KTtsZXQgbz10LnNpemU/QVQodC52YWx1ZXMoKSk6W10scz1lLnNpemU/QVQoZS52YWx1ZXMoKSk6W107aWYoaSl7bGV0IGE9clswXSxsPW5ldyBNYXAoYSk7YS5zZXQoIm9mZnNldCIsMCksbC5zZXQoIm9mZnNldCIsMSkscj1bYSxsXX1yZXR1cm4gaEIodGhpcy5lbGVtZW50LHIsbyxzLHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX0sdEI9Y2xhc3MgZXh0ZW5kcyBHMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhPSExKXtzdXBlcih0LGUscy5kZWxheSksdGhpcy5rZXlmcmFtZXM9aSx0aGlzLnByZVN0eWxlUHJvcHM9cix0aGlzLnBvc3RTdHlsZVByb3BzPW8sdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9YSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnMuZHVyYXRpb24sZGVsYXk6cy5kZWxheSxlYXNpbmc6cy5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246aSxlYXNpbmc6cn09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtsZXQgbz1bXSxzPWkrZSxhPWUvcyxsPWowKHRbMF0pO2wuc2V0KCJvZmZzZXQiLDApLG8ucHVzaChsKTtsZXQgYz1qMCh0WzBdKTtjLnNldCgib2Zmc2V0IixzWChhKSksby5wdXNoKGMpO2xldCB1PXQubGVuZ3RoLTE7Zm9yKGxldCBkPTE7ZDw9dTtkKyspe2xldCBwPWowKHRbZF0pLGg9cC5nZXQoIm9mZnNldCIpO3Auc2V0KCJvZmZzZXQiLHNYKChlK2gqaSkvcykpLG8ucHVzaChwKX1pPXMsZT0wLHI9IiIsdD1vfXJldHVybiBoQih0aGlzLmVsZW1lbnQsdCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxpLGUsciwhMCl9fTtmdW5jdGlvbiBzWChuLHQ9Myl7bGV0IGU9TWF0aC5wb3coMTAsdC0xKTtyZXR1cm4gTWF0aC5yb3VuZChuKmUpL2V9dmFyIFZmPWNsYXNze30sa01lPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKSxSVD1jbGFzcyBleHRlbmRzIFZme25vcm1hbGl6ZVByb3BlcnR5TmFtZSh0LGUpe3JldHVybiBwQih0KX1ub3JtYWxpemVTdHlsZVZhbHVlKHQsZSxpLHIpe2xldCBvPSIiLHM9aS50b1N0cmluZygpLnRyaW0oKTtpZihrTWUuaGFzKGUpJiYwIT09aSYmIjAiIT09aSlpZigibnVtYmVyIj09dHlwZW9mIGkpbz0icHgiO2Vsc2V7bGV0IGE9aS5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2gobmV3IE10KDMwMDUsITEpKX1yZXR1cm4gcytvfX07ZnVuY3Rpb24gYVgobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cmV0dXJue3R5cGU6MCxlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxpc1JlbW92YWxUcmFuc2l0aW9uOnIsZnJvbVN0YXRlOmUsZnJvbVN0eWxlczpvLHRvU3RhdGU6aSx0b1N0eWxlczpzLHRpbWVsaW5lczphLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6Yyxwb3N0U3R5bGVQcm9wczp1LHRvdGFsVGltZTpkLGVycm9yczpwfX12YXIgajM9e30sT1Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3RyaWdnZXJOYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9zdGF0ZVN0eWxlcz1pfW1hdGNoKHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuLnNvbWUobz0+byh0LGUsaSxyKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxpLHIpfWJ1aWxkU3R5bGVzKHQsZSxpKXtsZXQgcj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09dCYmKHI9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KHQ/LnRvU3RyaW5nKCkpfHxyKSxyP3IuYnVpbGRTdHlsZXMoZSxpKTpuZXcgTWFwfWJ1aWxkKHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVtdLHA9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fGozLGY9dGhpcy5idWlsZFN0eWxlcyhpLGEmJmEucGFyYW1zfHxqMyxkKSxtPWwmJmwucGFyYW1zfHxqMyxDPXRoaXMuYnVpbGRTdHlsZXMocixtLGQpLF89bmV3IFNldCx5PW5ldyBNYXAsST1uZXcgTWFwLEE9InZvaWQiPT09cixPPXtwYXJhbXM6Tk1lKG0scCksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LGVlPXU/W106QVgodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLHMsZixDLE8sYyxkKSxYPTA7aWYoZWUuZm9yRWFjaChmZT0+e1g9TWF0aC5tYXgoZmUuZHVyYXRpb24rZmUuZGVsYXksWCl9KSxkLmxlbmd0aClyZXR1cm4gYVgoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsQSxmLEMsW10sW10seSxJLFgsZCk7ZWUuZm9yRWFjaChmZT0+e2xldCB2ZT1mZS5lbGVtZW50LFQ9QmEoeSx2ZSxuZXcgU2V0KTtmZS5wcmVTdHlsZVByb3BzLmZvckVhY2gobGU9PlQuYWRkKGxlKSk7bGV0IG5lPUJhKEksdmUsbmV3IFNldCk7ZmUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChsZT0+bmUuYWRkKGxlKSksdmUhPT1lJiZfLmFkZCh2ZSl9KTtsZXQgeGU9QVQoXy52YWx1ZXMoKSk7cmV0dXJuIGFYKGUsdGhpcy5fdHJpZ2dlck5hbWUsaSxyLEEsZixDLGVlLHhlLHksSSxYKX19O2Z1bmN0aW9uIE5NZShuLHQpe2xldCBlPW5DKHQpO2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJm51bGwhPW5baV0mJihlW2ldPW5baV0pO3JldHVybiBlfWZ1bmN0aW9uIGxYKG4sdCxlKXtuLmhhcyh0KT9uLmhhcyhlKXx8bi5zZXQoZSxuLmdldCh0KSk6bi5oYXMoZSkmJm4uc2V0KHQsbi5nZXQoZSkpfXZhciBWTWU9bmV3IFp4LGNYPSJuZy1hbmltYXRlLXF1ZXVlZCIsRzM9Im5nLWFuaW1hdGUtZGlzYWJsZWQiLEdNZT1bXSxJWD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sV01lPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSx5bD0iX19uZ19yZW1vdmVkIiwkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtsZXQgaT10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIG4/P251bGx9KGk/dC52YWx1ZTp0KSxpKXtsZXQgbz1uQyh0KTtkZWxldGUgby52YWx1ZSx0aGlzLm9wdGlvbnM9b31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWFic29yYk9wdGlvbnModCl7bGV0IGU9dC5wYXJhbXM7aWYoZSl7bGV0IGk9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntudWxsPT1pW3JdJiYoaVtyXT1lW3JdKX0pfX19LFF4PSJ2b2lkIixXMz1uZXcgJHgoUXgpLGVDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1pLHRoaXMuX3BsYXllcj1uZXcgU3AsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcih0KXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9dCx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgoZSxpKT0+e2UuZm9yRWFjaChyPT5sQih0LGksdm9pZCAwLHIpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5jbGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKHQudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUodCl7dGhpcy50b3RhbFRpbWU9dH1zeW5jUGxheWVyRXZlbnRzKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KCgpPT5lLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksdC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLHQub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQodCxlKXtCYSh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX1vbkRvbmUodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9b25TdGFydCh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfW9uRGVzdHJveSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9fTtmdW5jdGlvbiBFVChuKXtyZXR1cm4gbiYmMT09PW4ubm9kZVR5cGV9ZnVuY3Rpb24gdVgobix0KXtsZXQgZT1uLnN0eWxlLmRpc3BsYXk7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT10Pz8ibm9uZSIsZX1mdW5jdGlvbiBkWChuLHQsZSxpLHIpe2xldCBvPVtdO2UuZm9yRWFjaChsPT5vLnB1c2godVgobCkpKTtsZXQgcz1bXTtpLmZvckVhY2goKGwsYyk9PntsZXQgdT1uZXcgTWFwO2wuZm9yRWFjaChkPT57bGV0IHA9dC5jb21wdXRlU3R5bGUoYyxkLHIpO3Uuc2V0KGQscCksKCFwfHwwPT1wLmxlbmd0aCkmJihjW3lsXT1XTWUscy5wdXNoKGMpKX0pLG4uc2V0KGMsdSl9KTtsZXQgYT0wO3JldHVybiBlLmZvckVhY2gobD0+dVgobCxvW2ErK10pKSxzfWZ1bmN0aW9uIHBYKG4sdCl7bGV0IGU9bmV3IE1hcDtpZihuLmZvckVhY2goYT0+ZS5zZXQoYSxbXSkpLDA9PXQubGVuZ3RoKXJldHVybiBlO2xldCByPW5ldyBTZXQodCksbz1uZXcgTWFwO2Z1bmN0aW9uIHMoYSl7aWYoIWEpcmV0dXJuIDE7bGV0IGw9by5nZXQoYSk7aWYobClyZXR1cm4gbDtsZXQgYz1hLnBhcmVudE5vZGU7cmV0dXJuIGw9ZS5oYXMoYyk/YzpyLmhhcyhjKT8xOnMoYyksby5zZXQoYSxsKSxsfXJldHVybiB0LmZvckVhY2goYT0+e2xldCBsPXMoYSk7MSE9PWwmJmUuZ2V0KGwpLnB1c2goYSl9KSxlfWZ1bmN0aW9uIGJsKG4sdCl7bi5jbGFzc0xpc3Q/LmFkZCh0KX1mdW5jdGlvbiB6MChuLHQpe24uY2xhc3NMaXN0Py5yZW1vdmUodCl9ZnVuY3Rpb24gUU1lKG4sdCxlKXtFcChlKS5vbkRvbmUoKCk9Pm4ucHJvY2Vzc0xlYXZlTm9kZSh0KSl9ZnVuY3Rpb24gUFgobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTtpIGluc3RhbmNlb2YgWXg/UFgoaS5wbGF5ZXJzLHQpOnQucHVzaChpKX19ZnVuY3Rpb24gaFgobix0LGUpe2xldCBpPWUuZ2V0KG4pO2lmKCFpKXJldHVybiExO2xldCByPXQuZ2V0KG4pO3JldHVybiByP2kuZm9yRWFjaChvPT5yLmFkZChvKSk6dC5zZXQobixpKSxlLmRlbGV0ZShuKSwhMH12YXIgVHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fX1fb25SZW1vdmFsQ29tcGxldGUodCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9Z2V0IHF1ZXVlZFBsYXllcnMoKXtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGU9PntlLnBsYXllcnMuZm9yRWFjaChpPT57aS5xdWV1ZWQmJnQucHVzaChpKX0pfSksdH1jcmVhdGVOYW1lc3BhY2UodCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsYmwoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4odCxlLGkscil7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhlKSl0aHJvdyBuZXcgTXQoMzMwMiwhMSk7aWYobnVsbD09aXx8MD09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDMzMDMsITEpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4ic3RhcnQiPT1ufHwiZG9uZSI9PW59KGkpKXRocm93IG5ldyBNdCgzNDAwLCExKTtsZXQgbz1CYSh0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTppLGNhbGxiYWNrOnJ9O28ucHVzaChzKTtsZXQgYT1CYSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQsbmV3IE1hcCk7cmV0dXJuIGEuaGFzKGUpfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksYS5zZXQoZSxXMykpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntsZXQgbD1vLmluZGV4T2Yocyk7bD49MCYmby5zcGxpY2UobCwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoZSl8fGEuZGVsZXRlKGUpfSl9fXJlZ2lzdGVyKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyh0KSYmKHRoaXMuX3RyaWdnZXJzLnNldCh0LGUpLCEwKX1fZ2V0VHJpZ2dlcih0KXtsZXQgZT10aGlzLl90cmlnZ2Vycy5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IE10KDM0MDEsITEpO3JldHVybiBlfXRyaWdnZXIodCxlLGkscj0hMCl7bGV0IG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxzPW5ldyBlQyh0aGlzLmlkLGUsdCksYT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTthfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxhPW5ldyBNYXApKTtsZXQgbD1hLmdldChlKSxjPW5ldyAkeChpLHRoaXMuaWQpO2lmKCEoaSYmaS5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJmwmJmMuYWJzb3JiT3B0aW9ucyhsLm9wdGlvbnMpLGEuc2V0KGUsYyksbHx8KGw9VzMpLGMudmFsdWUhPT1ReCYmbC52YWx1ZT09PWMudmFsdWUpe2lmKCFmdW5jdGlvbihuLHQpe2xldCBlPU9iamVjdC5rZXlzKG4pLGk9T2JqZWN0LmtleXModCk7aWYoZS5sZW5ndGghPWkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbz1lW3JdO2lmKCF0Lmhhc093blByb3BlcnR5KG8pfHxuW29dIT09dFtvXSlyZXR1cm4hMX1yZXR1cm4hMH0obC5wYXJhbXMsYy5wYXJhbXMpKXtsZXQgbT1bXSxDPW8ubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxtKSxfPW8ubWF0Y2hTdHlsZXMoYy52YWx1ZSxjLnBhcmFtcyxtKTttLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IobSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntCZih0LEMpLGR1KHQsXyl9KX1yZXR1cm59bGV0IHA9QmEodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsdCxbXSk7cC5mb3JFYWNoKG09PnttLm5hbWVzcGFjZUlkPT10aGlzLmlkJiZtLnRyaWdnZXJOYW1lPT1lJiZtLnF1ZXVlZCYmbS5kZXN0cm95KCl9KTtsZXQgaD1vLm1hdGNoVHJhbnNpdGlvbihsLnZhbHVlLGMudmFsdWUsdCxjLnBhcmFtcyksZj0hMTtpZighaCl7aWYoIXIpcmV0dXJuO2g9by5mYWxsYmFja1RyYW5zaXRpb24sZj0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246aCxmcm9tU3RhdGU6bCx0b1N0YXRlOmMscGxheWVyOnMsaXNGYWxsYmFja1RyYW5zaXRpb246Zn0pLGZ8fChibCh0LGNYKSxzLm9uU3RhcnQoKCk9Pnt6MCh0LGNYKX0pKSxzLm9uRG9uZSgoKT0+e2xldCBtPXRoaXMucGxheWVycy5pbmRleE9mKHMpO20+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobSwxKTtsZXQgQz10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoQyl7bGV0IF89Qy5pbmRleE9mKHMpO18+PTAmJkMuc3BsaWNlKF8sMSl9fSksdGhpcy5wbGF5ZXJzLnB1c2gocykscC5wdXNoKHMpLHN9ZGVyZWdpc3Rlcih0KXt0aGlzLl90cmlnZ2Vycy5kZWxldGUodCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGU9PmUuZGVsZXRlKHQpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGUsaSk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChpLGUuZmlsdGVyKHI9PnIubmFtZSE9dCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUodCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7bGV0IGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goaT0+aS5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZSh0KSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LFRULCEwKTtpLmZvckVhY2gocj0+e2lmKHJbeWxdKXJldHVybjtsZXQgbz10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHIpO28uc2l6ZT9vLmZvckVhY2gocz0+cy50cmlnZ2VyTGVhdmVBbmltYXRpb24ocixlLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmkuZm9yRWFjaChyPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHIpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSxpLHIpe2xldCBvPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpLHM9bmV3IE1hcDtpZihvKXtsZXQgYT1bXTtpZihvLmZvckVhY2goKGwsYyk9PntpZihzLnNldChjLGwudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhjKSl7bGV0IHU9dGhpcy50cmlnZ2VyKHQsYyxReCxyKTt1JiZhLnB1c2godSl9fSksYS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSxzKSxpJiZFcChhKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKHQpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCl7bGV0IGU9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQodCksaT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihlJiZpKXtsZXQgcj1uZXcgU2V0O2UuZm9yRWFjaChvPT57bGV0IHM9by5uYW1lO2lmKHIuaGFzKHMpKXJldHVybjtyLmFkZChzKTtsZXQgbD10aGlzLl90cmlnZ2Vycy5nZXQocykuZmFsbGJhY2tUcmFuc2l0aW9uLGM9aS5nZXQocyl8fFczLHU9bmV3ICR4KFF4KSxkPW5ldyBlQyh0aGlzLmlkLHMsdCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTpzLHRyYW5zaXRpb246bCxmcm9tU3RhdGU6Yyx0b1N0YXRlOnUscGxheWVyOmQsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSlyZXR1cm47bGV0IHI9ITE7aWYoaS50b3RhbEFuaW1hdGlvbnMpe2xldCBvPWkucGxheWVycy5sZW5ndGg/aS5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpcj0hMDtlbHNle2xldCBzPXQ7Zm9yKDtzPXMucGFyZW50Tm9kZTspaWYoaS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHMpKXtyPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCkscilpLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMSxlKTtlbHNle2xldCBvPXRbeWxdOyghb3x8bz09PUlYKSYmKGkuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZSh0KSksaS5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLGkuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX1pbnNlcnROb2RlKHQsZSl7YmwodCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKHQpe2xldCBlPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGk9PntsZXQgcj1pLnBsYXllcjtpZihyLmRlc3Ryb3llZClyZXR1cm47bGV0IG89aS5lbGVtZW50LHM9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7cyYmcy5mb3JFYWNoKGE9PntpZihhLm5hbWU9PWkudHJpZ2dlck5hbWUpe2xldCBsPWNCKG8saS50cmlnZ2VyTmFtZSxpLmZyb21TdGF0ZS52YWx1ZSxpLnRvU3RhdGUudmFsdWUpO2wuX2RhdGE9dCxsQihpLnBsYXllcixhLnBoYXNlLGwsYS5jYWxsYmFjayl9fSksci5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ci5kZXN0cm95KCl9KTplLnB1c2goaSl9KSx0aGlzLl9xdWV1ZT1bXSxlLnNvcnQoKGkscik9PntsZXQgbz1pLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LHM9ci50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09b3x8MD09cz9vLXM6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoaS5lbGVtZW50LHIuZWxlbWVudCk/MTotMX0pfWRlc3Ryb3kodCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9ZWxlbWVudENvbnRhaW5zRGF0YSh0KXtsZXQgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSxlPSEhdGhpcy5fcXVldWUuZmluZChpPT5pLmVsZW1lbnQ9PT10KXx8ZSxlfX0odCxlLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxlKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChpLGUpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoZSxpKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XT1pfV9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LGUpe2xldCBpPXRoaXMuX25hbWVzcGFjZUxpc3Qscj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGkubGVuZ3RoLTE+PTApe2xldCBzPSExLGE9dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChlKTtmb3IoO2E7KXtsZXQgbD1yLmdldChhKTtpZihsKXtsZXQgYz1pLmluZGV4T2YobCk7aS5zcGxpY2UoYysxLDAsdCkscz0hMDticmVha31hPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSl9c3x8aS51bnNoaWZ0KHQpfWVsc2UgaS5wdXNoKHQpO3JldHVybiByLnNldChlLHQpLHR9cmVnaXN0ZXIodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIGl8fChpPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLGl9cmVnaXN0ZXJUcmlnZ2VyKHQsZSxpKXtsZXQgcj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07ciYmci5yZWdpc3RlcihlLGkpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kodCxlKXtpZighdClyZXR1cm47bGV0IGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKCgpPT57dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoaS5ob3N0RWxlbWVudCksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtsZXQgcj10aGlzLl9uYW1lc3BhY2VMaXN0LmluZGV4T2YoaSk7cj49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UociwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmRlc3Ryb3koZSkpfV9mZXRjaE5hbWVzcGFjZSh0KXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KXtsZXQgZT1uZXcgU2V0LGk9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKGkpZm9yKGxldCByIG9mIGkudmFsdWVzKCkpaWYoci5uYW1lc3BhY2VJZCl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2Uoci5uYW1lc3BhY2VJZCk7byYmZS5hZGQobyl9cmV0dXJuIGV9dHJpZ2dlcih0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYobylyZXR1cm4gby50cmlnZ2VyKGUsaSxyKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKHQsZSxpLHIpe2lmKCFFVChlKSlyZXR1cm47bGV0IG89ZVt5bF07aWYobyYmby5zZXRGb3JSZW1vdmFsKXtvLnNldEZvclJlbW92YWw9ITEsby5zZXRGb3JNb3ZlPSEwO2xldCBzPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO3M+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UocywxKX1pZih0KXtsZXQgcz10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtzJiZzLmluc2VydE5vZGUoZSxpKX1yJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9Y29sbGVjdEVudGVyRWxlbWVudCh0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX1tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLGJsKHQsRzMpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZSh0KSx6MCh0LEczKSl9cmVtb3ZlTm9kZSh0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dD90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTpudWxsO2lmKG8/by5yZW1vdmVOb2RlKGUscik6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0LGUsITEsciksaSl7bGV0IHM9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoZSk7cyYmcy5pZCE9PXQmJnMucmVtb3ZlTm9kZShlLHIpfX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUscil9bWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLGkscixvKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChlKSxlW3lsXT17bmFtZXNwYWNlSWQ6dCxzZXRGb3JSZW1vdmFsOnIsaGFzQW5pbWF0aW9uOmkscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpvfX1saXN0ZW4odCxlLGkscixvKXtyZXR1cm4gRVQoZSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkubGlzdGVuKGUsaSxyLG8pOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbih0LGUsaSxyLG8pe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxpLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLG8pfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCl7bGV0IGU9dGhpcy5kcml2ZXIucXVlcnkodCxUVCwhMCk7ZS5mb3JFYWNoKGk9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGkpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUTMsITApLGUuZm9yRWFjaChpPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoaSkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goaT0+e2kucXVldWVkP2kubWFya2VkRm9yRGVzdHJveT0hMDppLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PmkuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntpZih0aGlzLnBsYXllcnMubGVuZ3RoKXJldHVybiBFcCh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+dCgpKTt0KCl9KX1wcm9jZXNzTGVhdmVOb2RlKHQpe2xldCBlPXRbeWxdO2lmKGUmJmUuc2V0Rm9yUmVtb3ZhbCl7aWYodFt5bF09SVgsZS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUubmFtZXNwYWNlSWQpO2kmJmkuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxlLnNldEZvclJlbW92YWwpfXQuY2xhc3NMaXN0Py5jb250YWlucyhHMykmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChpPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQoaSwhMSl9KX1mbHVzaCh0PS0xKXtsZXQgZT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoaSxyKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxyKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2krKylibCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbaV0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7bGV0IGk9W107dHJ5e2U9dGhpcy5fZmx1c2hBbmltYXRpb25zKGksdCl9ZmluYWxseXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdKCl9fWVsc2UgZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2krKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2ldKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChpPT5pKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2xldCBpPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sZS5sZW5ndGg/RXAoZSkub25Eb25lKCgpPT57aS5mb3JFYWNoKHI9PnIoKSl9KTppLmZvckVhY2gocj0+cigpKX19cmVwb3J0RXJyb3IodCl7dGhyb3cgbmV3IE10KDM0MDIsITEpfV9mbHVzaEFuaW1hdGlvbnModCxlKXtsZXQgaT1uZXcgWngscj1bXSxvPW5ldyBNYXAscz1bXSxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx1PW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goSj0+e3UuYWRkKEopO2xldCBhZT10aGlzLmRyaXZlci5xdWVyeShKLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0IG1lPTA7bWU8YWUubGVuZ3RoO21lKyspdS5hZGQoYWVbbWVdKX0pO2xldCBkPXRoaXMuYm9keU5vZGUscD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksaD1wWChwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksZj1uZXcgTWFwLG09MDtoLmZvckVhY2goKEosYWUpPT57bGV0IG1lPWJYK20rKztmLnNldChhZSxtZSksSi5mb3JFYWNoKGplPT5ibChqZSxtZSkpfSk7bGV0IEM9W10sXz1uZXcgU2V0LHk9bmV3IFNldDtmb3IobGV0IEo9MDtKPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7SisrKXtsZXQgYWU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0pdLG1lPWFlW3lsXTttZSYmbWUuc2V0Rm9yUmVtb3ZhbCYmKEMucHVzaChhZSksXy5hZGQoYWUpLG1lLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShhZSwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGplPT5fLmFkZChqZSkpOnkuYWRkKGFlKSl9bGV0IEk9bmV3IE1hcCxBPXBYKHAsQXJyYXkuZnJvbShfKSk7QS5mb3JFYWNoKChKLGFlKT0+e2xldCBtZT1YMyttKys7SS5zZXQoYWUsbWUpLEouZm9yRWFjaChqZT0+YmwoamUsbWUpKX0pLHQucHVzaCgoKT0+e2guZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9Zi5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEEuZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9SS5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEMuZm9yRWFjaChKPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEopfSl9KTtsZXQgTz1bXSxlZT1bXTtmb3IobGV0IEo9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtKPj0wO0otLSl0aGlzLl9uYW1lc3BhY2VMaXN0W0pdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChtZT0+e2xldCBqZT1tZS5wbGF5ZXIsTWU9bWUuZWxlbWVudDtpZihPLnB1c2goamUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2xldCBFdD1NZVt5bF07aWYoRXQmJkV0LnNldEZvck1vdmUpe2lmKEV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJkV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKG1lLnRyaWdnZXJOYW1lKSl7bGV0IG9uPUV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KG1lLnRyaWdnZXJOYW1lKSxDZT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobWUuZWxlbWVudCk7aWYoQ2UmJkNlLmhhcyhtZS50cmlnZ2VyTmFtZSkpe2xldCB2dD1DZS5nZXQobWUudHJpZ2dlck5hbWUpO3Z0LnZhbHVlPW9uLENlLnNldChtZS50cmlnZ2VyTmFtZSx2dCl9fXJldHVybiB2b2lkIGplLmRlc3Ryb3koKX19bGV0IEZlPSFkfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQsTWUpLHV0PUkuZ2V0KE1lKSxTdD1mLmdldChNZSksZ3Q9dGhpcy5fYnVpbGRJbnN0cnVjdGlvbihtZSxpLFN0LHV0LEZlKTtpZihndC5lcnJvcnMmJmd0LmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgZWUucHVzaChndCk7aWYoRmUpcmV0dXJuIGplLm9uU3RhcnQoKCk9PkJmKE1lLGd0LmZyb21TdHlsZXMpKSxqZS5vbkRlc3Ryb3koKCk9PmR1KE1lLGd0LnRvU3R5bGVzKSksdm9pZCByLnB1c2goamUpO2lmKG1lLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBqZS5vblN0YXJ0KCgpPT5CZihNZSxndC5mcm9tU3R5bGVzKSksamUub25EZXN0cm95KCgpPT5kdShNZSxndC50b1N0eWxlcykpLHZvaWQgci5wdXNoKGplKTtsZXQgUmU9W107Z3QudGltZWxpbmVzLmZvckVhY2goRXQ9PntFdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKEV0LmVsZW1lbnQpfHxSZS5wdXNoKEV0KX0pLGd0LnRpbWVsaW5lcz1SZSxpLmFwcGVuZChNZSxndC50aW1lbGluZXMpLHMucHVzaCh7aW5zdHJ1Y3Rpb246Z3QscGxheWVyOmplLGVsZW1lbnQ6TWV9KSxndC5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChFdD0+QmEoYSxFdCxbXSkucHVzaChqZSkpLGd0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoRXQsb24pPT57aWYoRXQuc2l6ZSl7bGV0IENlPWwuZ2V0KG9uKTtDZXx8bC5zZXQob24sQ2U9bmV3IFNldCksRXQuZm9yRWFjaCgodnQsX3QpPT5DZS5hZGQoX3QpKX19KSxndC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKChFdCxvbik9PntsZXQgQ2U9Yy5nZXQob24pO0NlfHxjLnNldChvbixDZT1uZXcgU2V0KSxFdC5mb3JFYWNoKCh2dCxfdCk9PkNlLmFkZChfdCkpfSl9KTtpZihlZS5sZW5ndGgpe2xldCBKPVtdO2VlLmZvckVhY2goYWU9PntKLnB1c2gobmV3IE10KDM1MDUsITEpKX0pLE8uZm9yRWFjaChhZT0+YWUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKEopfWxldCBYPW5ldyBNYXAseGU9bmV3IE1hcDtzLmZvckVhY2goSj0+e2xldCBhZT1KLmVsZW1lbnQ7aS5oYXMoYWUpJiYoeGUuc2V0KGFlLGFlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChKLnBsYXllci5uYW1lc3BhY2VJZCxKLmluc3RydWN0aW9uLFgpKX0pLHIuZm9yRWFjaChKPT57bGV0IGFlPUouZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYWUsITEsSi5uYW1lc3BhY2VJZCxKLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goamU9PntCYShYLGFlLFtdKS5wdXNoKGplKSxqZS5kZXN0cm95KCl9KX0pO2xldCBmZT1DLmZpbHRlcihKPT5oWChKLGwsYykpLHZlPW5ldyBNYXA7ZFgodmUsdGhpcy5kcml2ZXIseSxjLHV1KS5mb3JFYWNoKEo9PntoWChKLGwsYykmJmZlLnB1c2goSil9KTtsZXQgbmU9bmV3IE1hcDtoLmZvckVhY2goKEosYWUpPT57ZFgobmUsdGhpcy5kcml2ZXIsbmV3IFNldChKKSxsLCIhIil9KSxmZS5mb3JFYWNoKEo9PntsZXQgYWU9dmUuZ2V0KEopLG1lPW5lLmdldChKKTt2ZS5zZXQoSixuZXcgTWFwKFsuLi5BcnJheS5mcm9tKGFlPy5lbnRyaWVzKCk/P1tdKSwuLi5BcnJheS5mcm9tKG1lPy5lbnRyaWVzKCk/P1tdKV0pKX0pO2xldCBsZT1bXSxoZT1bXSx5ZT17fTtzLmZvckVhY2goSj0+e2xldHtlbGVtZW50OmFlLHBsYXllcjptZSxpbnN0cnVjdGlvbjpqZX09SjtpZihpLmhhcyhhZSkpe2lmKHUuaGFzKGFlKSlyZXR1cm4gbWUub25EZXN0cm95KCgpPT5kdShhZSxqZS50b1N0eWxlcykpLG1lLmRpc2FibGVkPSEwLG1lLm92ZXJyaWRlVG90YWxUaW1lKGplLnRvdGFsVGltZSksdm9pZCByLnB1c2gobWUpO2xldCBNZT15ZTtpZih4ZS5zaXplPjEpe2xldCB1dD1hZSxTdD1bXTtmb3IoO3V0PXV0LnBhcmVudE5vZGU7KXtsZXQgZ3Q9eGUuZ2V0KHV0KTtpZihndCl7TWU9Z3Q7YnJlYWt9U3QucHVzaCh1dCl9U3QuZm9yRWFjaChndD0+eGUuc2V0KGd0LE1lKSl9bGV0IEZlPXRoaXMuX2J1aWxkQW5pbWF0aW9uKG1lLm5hbWVzcGFjZUlkLGplLFgsbyxuZSx2ZSk7aWYobWUuc2V0UmVhbFBsYXllcihGZSksTWU9PT15ZSlsZS5wdXNoKG1lKTtlbHNle2xldCB1dD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KE1lKTt1dCYmdXQubGVuZ3RoJiYobWUucGFyZW50UGxheWVyPUVwKHV0KSksci5wdXNoKG1lKX19ZWxzZSBCZihhZSxqZS5mcm9tU3R5bGVzKSxtZS5vbkRlc3Ryb3koKCk9PmR1KGFlLGplLnRvU3R5bGVzKSksaGUucHVzaChtZSksdS5oYXMoYWUpJiZyLnB1c2gobWUpfSksaGUuZm9yRWFjaChKPT57bGV0IGFlPW8uZ2V0KEouZWxlbWVudCk7aWYoYWUmJmFlLmxlbmd0aCl7bGV0IG1lPUVwKGFlKTtKLnNldFJlYWxQbGF5ZXIobWUpfX0pLHIuZm9yRWFjaChKPT57Si5wYXJlbnRQbGF5ZXI/Si5zeW5jUGxheWVyRXZlbnRzKEoucGFyZW50UGxheWVyKTpKLmRlc3Ryb3koKX0pO2ZvcihsZXQgSj0wO0o8Qy5sZW5ndGg7SisrKXtsZXQgYWU9Q1tKXSxtZT1hZVt5bF07aWYoejAoYWUsWDMpLG1lJiZtZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGplPVtdO2lmKGEuc2l6ZSl7bGV0IEZlPWEuZ2V0KGFlKTtGZSYmRmUubGVuZ3RoJiZqZS5wdXNoKC4uLkZlKTtsZXQgdXQ9dGhpcy5kcml2ZXIucXVlcnkoYWUsUTMsITApO2ZvcihsZXQgU3Q9MDtTdDx1dC5sZW5ndGg7U3QrKyl7bGV0IGd0PWEuZ2V0KHV0W1N0XSk7Z3QmJmd0Lmxlbmd0aCYmamUucHVzaCguLi5ndCl9fWxldCBNZT1qZS5maWx0ZXIoRmU9PiFGZS5kZXN0cm95ZWQpO01lLmxlbmd0aD9RTWUodGhpcyxhZSxNZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGFlKX1yZXR1cm4gQy5sZW5ndGg9MCxsZS5mb3JFYWNoKEo9Pnt0aGlzLnBsYXllcnMucHVzaChKKSxKLm9uRG9uZSgoKT0+e0ouZGVzdHJveSgpO2xldCBhZT10aGlzLnBsYXllcnMuaW5kZXhPZihKKTt0aGlzLnBsYXllcnMuc3BsaWNlKGFlLDEpfSksSi5wbGF5KCl9KSxsZX1lbGVtZW50Q29udGFpbnNEYXRhKHQsZSl7bGV0IGk9ITEscj1lW3lsXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYoaT0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8aX1hZnRlckZsdXNoKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfV9nZXRQcmV2aW91c1BsYXllcnModCxlLGkscixvKXtsZXQgcz1bXTtpZihlKXtsZXQgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYocz1hKX1lbHNle2xldCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoYSl7bGV0IGw9IW98fG89PVF4O2EuZm9yRWFjaChjPT57Yy5xdWV1ZWR8fCFsJiZjLnRyaWdnZXJOYW1lIT1yfHxzLnB1c2goYyl9KX19cmV0dXJuKGl8fHIpJiYocz1zLmZpbHRlcihhPT4hKGkmJmkhPWEubmFtZXNwYWNlSWR8fHImJnIhPWEudHJpZ2dlck5hbWUpKSksc31fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLGkpe2xldCBvPWUuZWxlbWVudCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IobGV0IGwgb2YgZS50aW1lbGluZXMpe2xldCBjPWwuZWxlbWVudCx1PWMhPT1vLGQ9QmEoaSxjLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYyx1LHMsYSxlLnRvU3RhdGUpLmZvckVhY2goaD0+e2xldCBmPWguZ2V0UmVhbFBsYXllcigpO2YuYmVmb3JlRGVzdHJveSYmZi5iZWZvcmVEZXN0cm95KCksaC5kZXN0cm95KCksZC5wdXNoKGgpfSl9QmYobyxlLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbih0LGUsaSxyLG8scyl7bGV0IGE9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCxjPVtdLHU9bmV3IFNldCxkPW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAoZj0+e2xldCBtPWYuZWxlbWVudDt1LmFkZChtKTtsZXQgQz1tW3lsXTtpZihDJiZDLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgU3AoZi5kdXJhdGlvbixmLmRlbGF5KTtsZXQgXz1tIT09bCx5PWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBQWChuLHQpLHR9KChpLmdldChtKXx8R01lKS5tYXAoWD0+WC5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoWD0+ISFYLmVsZW1lbnQmJlguZWxlbWVudD09PW0pLEk9by5nZXQobSksQT1zLmdldChtKSxPPWZYKDAsdGhpcy5fbm9ybWFsaXplciwwLGYua2V5ZnJhbWVzLEksQSksZWU9dGhpcy5fYnVpbGRQbGF5ZXIoZixPLHkpO2lmKGYuc3ViVGltZWxpbmUmJnImJmQuYWRkKG0pLF8pe2xldCBYPW5ldyBlQyh0LGEsbSk7WC5zZXRSZWFsUGxheWVyKGVlKSxjLnB1c2goWCl9cmV0dXJuIGVlfSk7Yy5mb3JFYWNoKGY9PntCYSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGYuZWxlbWVudCxbXSkucHVzaChmKSxmLm9uRG9uZSgoKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZ2V0KHQpO2lmKGkpe2lmKGkubGVuZ3RoKXtsZXQgcj1pLmluZGV4T2YoZSk7aS5zcGxpY2UociwxKX0wPT1pLmxlbmd0aCYmbi5kZWxldGUodCl9cmV0dXJuIGl9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsZi5lbGVtZW50LGYpKX0pLHUuZm9yRWFjaChmPT5ibChmLG5YKSk7bGV0IGg9RXAocCk7cmV0dXJuIGgub25EZXN0cm95KCgpPT57dS5mb3JFYWNoKGY9PnowKGYsblgpKSxkdShsLGUudG9TdHlsZXMpfSksZC5mb3JFYWNoKGY9PntCYShyLGYsW10pLnB1c2goaCl9KSxofV9idWlsZFBsYXllcih0LGUsaSl7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsaSk6bmV3IFNwKHQuZHVyYXRpb24sdC5kZWxheSl9fSh0LGUsaSksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3Rlcih0LGUpe2xldCBpPVtdLG89RFgodGhpcy5fZHJpdmVyLGUsaSxbXSk7aWYoaS5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDMsITEpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KHQsbyl9X2J1aWxkUGxheWVyKHQsZSxpKXtsZXQgcj10LmVsZW1lbnQsbz1mWCgwLHRoaXMuX25vcm1hbGl6ZXIsMCx0LmtleWZyYW1lcyxlLGkpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShyLG8sdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLFtdLCEwKX1jcmVhdGUodCxlLGk9e30pe2xldCBzLHI9W10sbz10aGlzLl9hbmltYXRpb25zLmdldCh0KSxhPW5ldyBNYXA7aWYobz8ocz1BWCh0aGlzLl9kcml2ZXIsZSxvLGJYLFgzLG5ldyBNYXAsbmV3IE1hcCxpLFZNZSxyKSxzLmZvckVhY2godT0+e2xldCBkPUJhKGEsdS5lbGVtZW50LG5ldyBNYXApO3UucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChwPT5kLnNldChwLG51bGwpKX0pKTooci5wdXNoKG5ldyBNdCgzMzAwLCExKSkscz1bXSksci5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDQsITEpO2EuZm9yRWFjaCgodSxkKT0+e3UuZm9yRWFjaCgocCxoKT0+e3Uuc2V0KGgsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZShkLGgsdXUpKX0pfSk7bGV0IGM9RXAocy5tYXAodT0+e2xldCBkPWEuZ2V0KHUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKHUsbmV3IE1hcCxkKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KHQsYyksYy5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSh0KSksdGhpcy5wbGF5ZXJzLnB1c2goYyksY31kZXN0cm95KHQpe2xldCBlPXRoaXMuX2dldFBsYXllcih0KTtlLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUodCk7bGV0IGk9dGhpcy5wbGF5ZXJzLmluZGV4T2YoZSk7aT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShpLDEpfV9nZXRQbGF5ZXIodCl7bGV0IGU9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBNdCgzMzAxLCExKTtyZXR1cm4gZX1saXN0ZW4odCxlLGkscil7bGV0IG89Y0IoZSwiIiwiIiwiIik7cmV0dXJuIGxCKHRoaXMuX2dldFBsYXllcih0KSxpLG8sciksKCk9Pnt9fWNvbW1hbmQodCxlLGkscil7aWYoInJlZ2lzdGVyIj09aSlyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKHQsclswXSk7aWYoImNyZWF0ZSI9PWkpcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUodCxlLHJbMF18fHt9KTtsZXQgbz10aGlzLl9nZXRQbGF5ZXIodCk7c3dpdGNoKGkpe2Nhc2UicGxheSI6by5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6by5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOm8ucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOm8ucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpvLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6by5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6by5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KHJbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveSh0KX19fSh0LGUsaSksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShyLG8pfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSxyLG8pe2xldCBzPXQrIi0iK3IsYT10aGlzLl90cmlnZ2VyQ2FjaGVbc107aWYoIWEpe2xldCBsPVtdLHU9RFgodGhpcy5fZHJpdmVyLG8sbCxbXSk7aWYobC5sZW5ndGgpdGhyb3cgbmV3IE10KDM0MDQsITEpO2E9ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGUuc3RhdGVzLmZvckVhY2gocj0+e2xldCBvPXIub3B0aW9ucyYmci5vcHRpb25zLnBhcmFtc3x8e307dGhpcy5zdGF0ZXMuc2V0KHIubmFtZSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWUsdGhpcy5ub3JtYWxpemVyPWl9YnVpbGRTdHlsZXModCxlKXtsZXQgaT1uZXcgTWFwLHI9bkModGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChvPT57bGV0IHM9dFtvXTtudWxsIT09cyYmKHJbb109cyl9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChvPT57InN0cmluZyIhPXR5cGVvZiBvJiZvLmZvckVhY2goKHMsYSk9PntzJiYocz1LeChzLHIsZSkpO2xldCBsPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoYSxlKTtzPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKGEsbCxzLGUpLGkuc2V0KGwscyl9KX0pLGl9fShyLnN0eWxlLG8saSkpfSksbFgodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksbFgodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChyPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IE9UKHQscix0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgT1Qobix7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6WyhzLGEpPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0KX0odCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKHQsZSxpLHIpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZChzPT5zLm1hdGNoKHQsZSxpLHIpKXx8bnVsbH1tYXRjaFN0eWxlcyh0LGUsaSl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKHQsZSxpKX19KG4sdCxlKX0ocix1LHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVtzXT1hfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGUscixhKX1yZWdpc3Rlcih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX1kZXN0cm95KHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9b25JbnNlcnQodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKHQsZSxpLHIpfW9uUmVtb3ZlKHQsZSxpLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUscnx8ITEsaSl9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpfXByb2Nlc3ModCxlLGkscil7aWYoIkAiPT1pLmNoYXJBdCgwKSl7bGV0W28sc109ZVgoaSk7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChvLGUscyxyKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsaSxyKX1saXN0ZW4odCxlLGkscixvKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbcyxhXT1lWChpKTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKHMsZSxhLG8pfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3Rlbih0LGUsaSxyLG8pfWZsdXNoKHQ9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9Z2V0IHBsYXllcnMoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLmNvbmNhdCh0aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fSwkTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3N0YXJ0U3R5bGVzPWksdGhpcy5fZW5kU3R5bGVzPXIsdGhpcy5fc3RhdGU9MDtsZXQgbz1uLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGUpO298fG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQoZSxvPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9b31zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxlcyYmZHUodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzJiYoZHUodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYobi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKEJmKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihCZih0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fXJldHVybiBuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXAsbn0pKCk7ZnVuY3Rpb24gcTMobil7bGV0IHQ9bnVsbDtyZXR1cm4gbi5mb3JFYWNoKChlLGkpPT57KGZ1bmN0aW9uKG4pe3JldHVybiJkaXNwbGF5Ij09PW58fCJwb3NpdGlvbiI9PT1ufSkoaSkmJih0PXR8fG5ldyBNYXAsdC5zZXQoaSxlKSl9KSx0fXZhciBrVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1pLHRoaXMuX3NwZWNpYWxTdHlsZXM9cix0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1pLmR1cmF0aW9uLHRoaXMuX2RlbGF5PWkuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtsZXQgdD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCx0LHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT10Lmxlbmd0aD90W3QubGVuZ3RoLTFdOm5ldyBNYXAsdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKT0+dGhpcy5fb25GaW5pc2goKSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QodCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaChpPT57ZS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhpKSl9KSxlfV90cmlnZ2VyV2ViQW5pbWF0aW9uKHQsZSxpKXtyZXR1cm4gdC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChlKSxpKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24odCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtsZXQgdD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGkscik9Pnsib2Zmc2V0IiE9PXImJnQuc2V0KHIsdGhpcy5fZmluaXNoZWQ/aTpNWCh0aGlzLmVsZW1lbnQscikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LG5TZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcXh7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX25leHRBbmltYXRpb25JZD0wLHRoaXMuX3JlbmRlcmVyPWUuY3JlYXRlUmVuZGVyZXIoaS5ib2R5LHtpZDoiMCIsZW5jYXBzdWxhdGlvbjp3YS5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSl9YnVpbGQoZSl7bGV0IGk9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7bGV0IHI9QXJyYXkuaXNBcnJheShlKT94VChlKTplO3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcixudWxsLGksInJlZ2lzdGVyIixbcl0pLG5ldyBmQihpLHRoaXMuX3JlbmRlcmVyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxYyksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGZCPWNsYXNzIGV4dGVuZHMgYlR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2lkPXQsdGhpcy5fcmVuZGVyZXI9ZX1jcmVhdGUodCxlKXtyZXR1cm4gbmV3IG1CKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfX0sbUI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixpKX1fbGlzdGVuKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsYEBAJHt0aGlzLmlkfToke3R9YCxlKX1fY29tbWFuZCh0LC4uLmUpe3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfW9uRG9uZSh0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfW9uU3RhcnQodCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9b25EZXN0cm95KHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9aW5pdCgpe3RoaXMuX2NvbW1hbmQoImluaXQiKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfXBhdXNlKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX1yZXN0YXJ0KCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfWZpbmlzaCgpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfWRlc3Ryb3koKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9cmVzZXQoKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzWyt0aGlzLmlkXT8uZ2V0UG9zaXRpb24oKT8/MH19O2Z1bmN0aW9uIE9YKG4sdCxlLGkscil7cmV0dXJuIG4uc2V0UHJvcGVydHkodCxgQEAke2V9OiR7aX1gLHIpfXZhciBrWD0iQC5kaXNhYmxlZCIsaVNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1pLHRoaXMuX3pvbmU9cix0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsdGhpcy5wcm9taXNlPVByb21pc2UucmVzb2x2ZSgwKSxpLm9uUmVtb3ZhbENvbXBsZXRlPShvLHMpPT57bGV0IGE9cz8ucGFyZW50Tm9kZShvKTthJiZzLnJlbW92ZUNoaWxkKGEsbyl9fWNyZWF0ZVJlbmRlcmVyKGUsaSl7bGV0IG89dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihlLGkpO2lmKCEoZSYmaSYmaS5kYXRhJiZpLmRhdGEuYW5pbWF0aW9uKSl7bGV0IHU9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobyk7cmV0dXJuIHV8fCh1PW5ldyBMVCgiIixvLHRoaXMuZW5naW5lLCgpPT50aGlzLl9yZW5kZXJlckNhY2hlLmRlbGV0ZShvKSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQobyx1KSksdX1sZXQgcz1pLmlkLGE9aS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsZSk7bGV0IGw9dT0+e0FycmF5LmlzQXJyYXkodSk/dS5mb3JFYWNoKGwpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihzLGEsZSx1Lm5hbWUsdSl9O3JldHVybiBpLmRhdGEuYW5pbWF0aW9uLmZvckVhY2gobCksbmV3IGdCKHRoaXMsYSxvLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soZSxpLHIpe2U+PTAmJmU8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oKCk9PmkocikpOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2gobz0+e2xldFtzLGFdPW87cyhhKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2kscl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocWMpLFIoVHApLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxMVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fb25EZXN0cm95PXIsdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP289PmUuZGVzdHJveU5vZGUobyk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX1hcHBlbmRDaGlsZCh0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9aW5zZXJ0QmVmb3JlKHQsZSxpLHI9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxpKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCxyKX1yZW1vdmVDaGlsZCh0LGUsaSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUsaSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0LGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX1uZXh0U2libGluZyh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX1zZXRBdHRyaWJ1dGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLGkscil9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl9YWRkQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9cmVtb3ZlQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9c2V0U3R5bGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsaSxyKX1yZW1vdmVTdHlsZSh0LGUsaSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsaSl9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIWkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsaSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fSxnQj1jbGFzcyBleHRlbmRzIExUe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5mYWN0b3J5PXQsdGhpcy5uYW1lc3BhY2VJZD1lfXNldFByb3BlcnR5KHQsZSxpKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxpPXZvaWQgMD09PWl8fCEhaSk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zbGljZSgxKSxpKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxpKX1saXN0ZW4odCxlLGkpe2lmKCJAIj09ZS5jaGFyQXQoMCkpe2xldCByPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBufX0odCksbz1lLnNsaWNlKDEpLHM9IiI7cmV0dXJuIkAiIT1vLmNoYXJBdCgwKSYmKFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PW4uaW5kZXhPZigiLiIpO3JldHVybltuLnN1YnN0cmluZygwLHQpLG4uc2xpY2UodCsxKV19KG8pKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxyLG8scyxhPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhhLl9kYXRhfHwtMSxpLGEpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX19LHNTZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVHB7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZS5ib2R5LGkscil9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodEMpLFIoVmYpLFIoSmMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxGWD1be3Byb3ZpZGU6cXgsdXNlQ2xhc3M6blNlfSx7cHJvdmlkZTpWZix1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSVH19LHtwcm92aWRlOlRwLHVzZUNsYXNzOnNTZX0se3Byb3ZpZGU6cWMsdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBpU2Uobix0LGUpfSxkZXBzOltqeCxUcCxwdF19XSxSWD1be3Byb3ZpZGU6dEMsdXNlRmFjdG9yeTooKT0+bmV3IGNsYXNze3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KHQsZSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KHQsZSl7cmV0dXJuIF9YKHQsZSl9Z2V0UGFyZW50RWxlbWVudCh0KXtyZXR1cm4gdUIodCl9cXVlcnkodCxlLGkpe3JldHVybiB2WCh0LGUsaSl9Y29tcHV0ZVN0eWxlKHQsZSxpKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19YW5pbWF0ZSh0LGUsaSxyLG8scz1bXSl7bGV0IGw9e2R1cmF0aW9uOmksZGVsYXk6cixmaWxsOjA9PXI/ImJvdGgiOiJmb3J3YXJkcyJ9O28mJihsLmVhc2luZz1vKTtsZXQgYz1uZXcgTWFwLHU9cy5maWx0ZXIoaD0+aCBpbnN0YW5jZW9mIGtUKTsoZnVuY3Rpb24obix0KXtyZXR1cm4gMD09PW58fDA9PT10fSkoaSxyKSYmdS5mb3JFYWNoKGg9PntoLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChmLG0pPT5jLnNldChtLGYpKX0pO2xldCBkPWZ1bmN0aW9uKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdaW5zdGFuY2VvZiBNYXA/bjpuLm1hcCh0PT54WCh0KSk6W119KGUpLm1hcChoPT5qMChoKSk7ZD1mdW5jdGlvbihuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IGk9dFswXSxyPVtdO2lmKGUuZm9yRWFjaCgobyxzKT0+e2kuaGFzKHMpfHxyLnB1c2gocyksaS5zZXQocyxvKX0pLHIubGVuZ3RoKWZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3IuZm9yRWFjaChhPT5zLnNldChhLE1YKG4sYSkpKX19cmV0dXJuIHR9KHQsZCxjKTtsZXQgcD1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD8oZT1xMyh0WzBdKSx0Lmxlbmd0aD4xJiYoaT1xMyh0W3QubGVuZ3RoLTFdKSkpOnQgaW5zdGFuY2VvZiBNYXAmJihlPXEzKHQpKSxlfHxpP25ldyAkTWUobixlLGkpOm51bGx9KHQsZCk7cmV0dXJuIG5ldyBrVCh0LGQsbCxwKX19fSx7cHJvdmlkZTpMaSx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5GWF0sY1NlPVt7cHJvdmlkZTp0Qyx1c2VDbGFzczpkQn0se3Byb3ZpZGU6TGksdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uRlhdLE5YPSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOmUuZGlzYWJsZUFuaW1hdGlvbnM/Y1NlOlJYfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpSWCxpbXBvcnRzOlt5VF19KSxufSkoKSxiQj17fTtmdW5jdGlvbiB3ZShuLHQpe2lmKGJCW25dPShiQltuXXx8MCkrMSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gX0IobiwoLi4uaSk9Pih7Li4udCguLi5pKSx0eXBlOm59KSk7c3dpdGNoKHQ/dC5fYXM6ImVtcHR5Iil7Y2FzZSJlbXB0eSI6cmV0dXJuIF9CKG4sKCk9Pih7dHlwZTpufSkpO2Nhc2UicHJvcHMiOnJldHVybiBfQihuLGk9Pih7Li4uaSx0eXBlOm59KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY29uZmlnLiIpfX1mdW5jdGlvbiBfQihuLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZSIse3ZhbHVlOm4sd3JpdGFibGU6ITF9KX12YXIgSlg9IkBuZ3J4L3N0b3JlL2luaXQiLHEwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBWcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOkpYfSl9bmV4dChlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih0eXBlb2YgZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGJlIG9iamVjdHMiKTtpZih0eXBlb2YgZS50eXBlPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJBY3Rpb25zIG11c3QgaGF2ZSBhIHR5cGUgcHJvcGVydHkiKTtzdXBlci5uZXh0KGUpfWNvbXBsZXRlKCl7fW5nT25EZXN0cm95KCl7c3VwZXIuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdVNlPVtxMF0sJFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksTFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksTUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksZVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSxCWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLHRRPW5ldyBzZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLHZCPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLFZYPW5ldyBzZSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxIWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIikseUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksVVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxuUT1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIikselg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksaVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksalg9bmV3IHNlKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxXMD1uZXcgc2UoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxHWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxXWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIikscVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGlDPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxTQj1uZXcgc2UoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gSGYobix0PXt9KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dOyJmdW5jdGlvbiI9PXR5cGVvZiBuW3NdJiYoaVtzXT1uW3NdKX1sZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gZnVuY3Rpb24ocyxhKXtzPXZvaWQgMD09PXM/dDpzO2xldCBsPSExLGM9e307Zm9yKGxldCB1PTA7dTxyLmxlbmd0aDt1Kyspe2xldCBkPXJbdV0saD1zW2RdLGY9KDAsaVtkXSkoaCxhKTtjW2RdPWYsbD1sfHxmIT09aH1yZXR1cm4gbD9jOnN9fWZ1bmN0aW9uIFVUKC4uLm4pe3JldHVybiBmdW5jdGlvbih0KXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgocixvKT0+byhyKSxlKHQpKX19ZnVuY3Rpb24gclEobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmKG49VVQuYXBwbHkobnVsbCxbLi4udCxuXSkpLChlLGkpPT57bGV0IHI9bihlKTtyZXR1cm4obyxzKT0+cihvPXZvaWQgMD09PW8/aTpvLHMpfX1uZXcgc2UoIkBuZ3J4L3N0b3JlIFJvb3QgU3RvcmUgUHJvdmlkZXIiKSxuZXcgc2UoIkBuZ3J4L3N0b3JlIEZlYXR1cmUgU3RhdGUgUHJvdmlkZXIiKTt2YXIgckM9Y2xhc3MgZXh0ZW5kcyBRdHt9LEJUPWNsYXNzIGV4dGVuZHMgcTB7fSxWVD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyhyLGkpKSx0aGlzLmRpc3BhdGNoZXI9ZSx0aGlzLmluaXRpYWxTdGF0ZT1pLHRoaXMucmVkdWNlcnM9cix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUoZSl7dGhpcy5hZGRGZWF0dXJlcyhbZV0pfWFkZEZlYXR1cmVzKGUpe2xldCBpPWUucmVkdWNlKChyLHtyZWR1Y2VyczpvLHJlZHVjZXJGYWN0b3J5OnMsbWV0YVJlZHVjZXJzOmEsaW5pdGlhbFN0YXRlOmwsa2V5OmN9KT0+e2xldCB1PSJmdW5jdGlvbiI9PXR5cGVvZiBvP2Z1bmN0aW9uKG4pe2xldCB0PUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjA/VVQoLi4ubik6ZT0+ZTtyZXR1cm4oZSxpKT0+KGU9dChlKSwocixvKT0+ZShyPXZvaWQgMD09PXI/aTpyLG8pKX0oYSkobyxsKTpyUShzLGEpKG8sbCk7cmV0dXJuIHJbY109dSxyfSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhpKX1yZW1vdmVGZWF0dXJlKGUpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW2VdKX1yZW1vdmVGZWF0dXJlcyhlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKGUubWFwKGk9Pmkua2V5KSl9YWRkUmVkdWNlcihlLGkpe3RoaXMuYWRkUmVkdWNlcnMoe1tlXTppfSl9YWRkUmVkdWNlcnMoZSl7dGhpcy5yZWR1Y2Vycz17Li4udGhpcy5yZWR1Y2VycywuLi5lfSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKGUpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW2VdKX1yZW1vdmVSZWR1Y2VycyhlKXtlLmZvckVhY2goaT0+e3RoaXMucmVkdWNlcnM9ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PmUhPT10KS5yZWR1Y2UoKGUsaSk9Pk9iamVjdC5hc3NpZ24oZSx7W2ldOm5baV19KSx7fSl9KHRoaXMucmVkdWNlcnMsaSl9KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKGUpfXVwZGF0ZVJlZHVjZXJzKGUpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczplfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQlQpLFIoTUIpLFIodFEpLFIoZVEpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxnU2U9W1ZULHtwcm92aWRlOnJDLHVzZUV4aXN0aW5nOlZUfSx7cHJvdmlkZTpCVCx1c2VFeGlzdGluZzpxMH1dLG9DPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9TZT1bb0NdLEhUPWNsYXNzIGV4dGVuZHMgUXR7fSxZWD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyk7bGV0IGM9ZS5waXBlKHpoKE5PKSkucGlwZShHdChpKSkucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBxdCh1aihuLHQsYXJndW1lbnRzLmxlbmd0aD49MiwhMCkpfSh2U2Use3N0YXRlOm99KSk7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1jLnN1YnNjcmliZSgoe3N0YXRlOnUsYWN0aW9uOmR9KT0+e3RoaXMubmV4dCh1KSxyLm5leHQoZCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLklOSVQ9Slgsbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHEwKSxSKHJDKSxSKG9DKSxSKE1CKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gdlNlKG49e3N0YXRlOnZvaWQgMH0sW3QsZV0pe2xldHtzdGF0ZTppfT1uO3JldHVybntzdGF0ZTplKGksdCksYWN0aW9uOnR9fXZhciB5U2U9W1lYLHtwcm92aWRlOkhULHVzZUV4aXN0aW5nOllYfV0sUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuYWN0aW9uc09ic2VydmVyPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yLHRoaXMuc291cmNlPWV9c2VsZWN0KGUsLi4uaSl7cmV0dXJuIGZuLmNhbGwobnVsbCxlLC4uLmkpKHRoaXMpfWxpZnQoZSl7bGV0IGk9bmV3IG4odGhpcyx0aGlzLmFjdGlvbnNPYnNlcnZlcix0aGlzLnJlZHVjZXJNYW5hZ2VyKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9ZGlzcGF0Y2goZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1uZXh0KGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLm5leHQoZSl9ZXJyb3IoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIuZXJyb3IoZSl9Y29tcGxldGUoKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5jb21wbGV0ZSgpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLmFkZFJlZHVjZXIoZSxpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlUmVkdWNlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihIVCksUihxMCksUihWVCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGJTZT1bUGVdO2Z1bmN0aW9uIGZuKG4sdCwuLi5lKXtyZXR1cm4gZnVuY3Rpb24ocil7bGV0IG87aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgcz1bdCwuLi5lXS5maWx0ZXIoQm9vbGVhbik7bz1yLnBpcGUoZnVuY3Rpb24oLi4ubil7bGV0IHQ9bi5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LiIpO3JldHVybiBCKGU9PntsZXQgaT1lO2ZvcihsZXQgcj0wO3I8dDtyKyspe2xldCBvPWk/LltuW3JdXTtpZighKHR5cGVvZiBvPCJ1IikpcmV0dXJuO2k9b31yZXR1cm4gaX0pfShuLC4uLnMpKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2Ygbn0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO289ci5waXBlKEIocz0+bihzLHQpKSl9cmV0dXJuIG8ucGlwZShkaSgpKX19dmFyIEVCPSJodHRwczovL25ncnguaW8vZ3VpZGUvc3RvcmUvY29uZmlndXJhdGlvbi9ydW50aW1lLWNoZWNrcyI7ZnVuY3Rpb24gWFgobil7cmV0dXJuIHZvaWQgMD09PW59ZnVuY3Rpb24gUVgobil7cmV0dXJuIG51bGw9PT1ufWZ1bmN0aW9uIG9RKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pfWZ1bmN0aW9uIHNRKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW59ZnVuY3Rpb24geEIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gS1gobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gSVNlKG4sdCxlKXtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZighZShuW2ldLHRbaV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGFRKG4sdD1LWCxlPUtYKXtsZXQgbyxpPW51bGwscj1udWxsO3JldHVybnttZW1vaXplZDpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8ucmVzdWx0O2lmKCFpKXJldHVybiByPW4uYXBwbHkobnVsbCxhcmd1bWVudHMpLGk9YXJndW1lbnRzLHI7aWYoIUlTZShhcmd1bWVudHMsaSx0KSlyZXR1cm4gcjtsZXQgdT1uLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gaT1hcmd1bWVudHMsZShyLHUpP3I6KHI9dSx1KX0scmVzZXQ6ZnVuY3Rpb24oKXtpPW51bGwscj1udWxsfSxzZXRSZXN1bHQ6ZnVuY3Rpb24odSl7bz17cmVzdWx0OnV9fSxjbGVhclJlc3VsdDpmdW5jdGlvbigpe289dm9pZCAwfX19ZnVuY3Rpb24gWSguLi5uKXtyZXR1cm4gZnVuY3Rpb24obix0PXtzdGF0ZUZuOlBTZX0pe3JldHVybiBmdW5jdGlvbiguLi5lKXtsZXQgaT1lO2lmKEFycmF5LmlzQXJyYXkoaVswXSkpe2xldFt1LC4uLmRdPWk7aT1bLi4udSwuLi5kXX1sZXQgcj1pLnNsaWNlKDAsaS5sZW5ndGgtMSksbz1pW2kubGVuZ3RoLTFdLHM9ci5maWx0ZXIodT0+dS5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdS5yZWxlYXNlKSxhPW4oZnVuY3Rpb24oLi4udSl7cmV0dXJuIG8uYXBwbHkobnVsbCx1KX0pLGw9YVEoZnVuY3Rpb24odSxkKXtyZXR1cm4gdC5zdGF0ZUZuLmFwcGx5KG51bGwsW3UscixkLGFdKX0pO3JldHVybiBPYmplY3QuYXNzaWduKGwubWVtb2l6ZWQse3JlbGVhc2U6ZnVuY3Rpb24oKXtsLnJlc2V0KCksYS5yZXNldCgpLHMuZm9yRWFjaCh1PT51LnJlbGVhc2UoKSl9LHByb2plY3RvcjphLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fShhUSkoLi4ubil9ZnVuY3Rpb24gUFNlKG4sdCxlLGkpe2lmKHZvaWQgMD09PWUpe2xldCBvPXQubWFwKHM9PnMobikpO3JldHVybiBpLm1lbW9pemVkLmFwcGx5KG51bGwsbyl9bGV0IHI9dC5tYXAobz0+byhuLGUpKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLFsuLi5yLGVdKX1mdW5jdGlvbiBQcihuKXtyZXR1cm4gWSh0PT57bGV0IGU9dFtuXTtyZXR1cm4gQmIoKSYmIShuIGluIHQpJiZjb25zb2xlLndhcm4oYEBuZ3J4L3N0b3JlOiBUaGUgZmVhdHVyZSBuYW1lICIke259IiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUsIHRoZXJlZm9yZSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IgY2Fubm90IGFjY2VzcyBpdC4gIEJlIHN1cmUgaXQgaXMgaW1wb3J0ZWQgaW4gYSBsb2FkZWQgbW9kdWxlIHVzaW5nIFN0b3JlTW9kdWxlLmZvclJvb3QoJyR7bn0nLCAuLi4pIG9yIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoJyR7bn0nLCAuLi4pLiAgSWYgdGhlIGRlZmF1bHQgc3RhdGUgaXMgaW50ZW5kZWQgdG8gYmUgdW5kZWZpbmVkLCBhcyBpcyB0aGUgY2FzZSB3aXRoIHJvdXRlciBzdGF0ZSwgdGhpcyBkZXZlbG9wbWVudC1vbmx5IHdhcm5pbmcgbWVzc2FnZSBjYW4gYmUgaWdub3JlZC5gKSxlfSx0PT50KX1mdW5jdGlvbiBPU2Uobix0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHNlP24uZ2V0KHQpOnR9ZnVuY3Rpb24ga1NlKG4sdCxlKXtyZXR1cm4gZS5tYXAoKGkscik9PntpZih0W3JdaW5zdGFuY2VvZiBzZSl7bGV0IG89bi5nZXQodFtyXSk7cmV0dXJue2tleTppLmtleSxyZWR1Y2VyRmFjdG9yeTpvLnJlZHVjZXJGYWN0b3J5P28ucmVkdWNlckZhY3Rvcnk6SGYsbWV0YVJlZHVjZXJzOm8ubWV0YVJlZHVjZXJzP28ubWV0YVJlZHVjZXJzOltdLGluaXRpYWxTdGF0ZTpvLmluaXRpYWxTdGF0ZX19cmV0dXJuIGl9KX1mdW5jdGlvbiBGU2Uobix0KXtyZXR1cm4gdC5tYXAoaT0+aSBpbnN0YW5jZW9mIHNlP24uZ2V0KGkpOmkpfWZ1bmN0aW9uIGxRKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24oKTpufWZ1bmN0aW9uIE5TZShuLHQpe3JldHVybiBuLmNvbmNhdCh0KX1mdW5jdGlvbiBMU2Uobil7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcm9vdCBTdG9yZSBoYXMgYmVlbiBwcm92aWRlZCBtb3JlIHRoYW4gb25jZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCBwcm92aWRlIGZlYXR1cmUgc3RhdGVzIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIENCKG4pe09iamVjdC5mcmVlemUobik7bGV0IHQ9eEIobik7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZvckVhY2goZT0+e2lmKCFlLnN0YXJ0c1dpdGgoIlx1MDI3NSIpJiZmdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobix0KX0obixlKSYmKCF0fHwiY2FsbGVyIiE9PWUmJiJjYWxsZWUiIT09ZSYmImFyZ3VtZW50cyIhPT1lKSl7bGV0IGk9bltlXTsoc1EoaSl8fHhCKGkpKSYmIU9iamVjdC5pc0Zyb3plbihpKSYmQ0IoaSl9fSksbn1mdW5jdGlvbiB3QihuLHQ9W10pe3JldHVybihYWChuKXx8UVgobikpJiYwPT09dC5sZW5ndGg/e3BhdGg6WyJyb290Il0sdmFsdWU6bn06T2JqZWN0LmtleXMobikucmVkdWNlKChpLHIpPT57aWYoaSlyZXR1cm4gaTtsZXQgbz1uW3JdO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geEIobikmJm4uaGFzT3duUHJvcGVydHkoIlx1MDI3NWNtcCIpfShvKT9pOiEoWFgobyl8fFFYKG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBufShvKXx8ZnVuY3Rpb24obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBufShvKXx8b1EobykpJiYoZnVuY3Rpb24obil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiBzUShuKSYmIW9RKG4pfShuKSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIHQ9PT1PYmplY3QucHJvdG90eXBlfHxudWxsPT09dH0obyk/d0IobyxbLi4udCxyXSk6e3BhdGg6Wy4uLnQscl0sdmFsdWU6b30pfSwhMSl9ZnVuY3Rpb24gWlgobix0KXtpZighMT09PW4pcmV0dXJuO2xldCBlPW4ucGF0aC5qb2luKCIuIiksaT1uZXcgRXJyb3IoYERldGVjdGVkIHVuc2VyaWFsaXphYmxlICR7dH0gYXQgIiR7ZX0iLiAke0VCfSNzdHJpY3Qke3R9c2VyaWFsaXphYmlsaXR5YCk7dGhyb3cgaS52YWx1ZT1uLnZhbHVlLGkudW5zZXJpYWxpemFibGVQYXRoPWUsaX1mdW5jdGlvbiBVU2Uobil7cmV0dXJuIEJiKCk/e3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExLC4uLm59OntzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbldpdGhpbk5nWm9uZTohMSxzdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzczohMX19ZnVuY3Rpb24gelNlKHtzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6bixzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXt0LmFjdGlvbihpKSYmWlgod0IoaSksImFjdGlvbiIpO2xldCByPW4oZSxpKTtyZXR1cm4gdC5zdGF0ZSgpJiZaWCh3QihyKSwic3RhdGUiKSxyfX0oZSx7YWN0aW9uOmk9Pm4mJiFUQihpKSxzdGF0ZTooKT0+dH0pOmV9ZnVuY3Rpb24galNlKHtzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6bixzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcj10LmFjdGlvbihpKT9DQihpKTppLG89bihlLHIpO3JldHVybiB0LnN0YXRlKCk/Q0Iobyk6b319KGUse2FjdGlvbjppPT5uJiYhVEIoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uIFRCKG4pe3JldHVybiBuLnR5cGUuc3RhcnRzV2l0aCgiQG5ncngiKX1mdW5jdGlvbiBHU2Uoe3N0cmljdEFjdGlvbldpdGhpbk5nWm9uZTpufSl7cmV0dXJuIHQ9Pm4/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtpZih0LmFjdGlvbihpKSYmIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcihgQWN0aW9uICcke2kudHlwZX0nIHJ1bm5pbmcgb3V0c2lkZSBOZ1pvbmUuICR7RUJ9I3N0cmljdGFjdGlvbndpdGhpbm5nem9uZWApO3JldHVybiBuKGUsaSl9fSh0LHthY3Rpb246ZT0+biYmIVRCKGUpfSk6dH1mdW5jdGlvbiBXU2Uobil7cmV0dXJuW3twcm92aWRlOnFYLHVzZVZhbHVlOm59LHtwcm92aWRlOldYLHVzZUZhY3Rvcnk6cVNlLGRlcHM6W3FYXX0se3Byb3ZpZGU6aUMsZGVwczpbV1hdLHVzZUZhY3Rvcnk6VVNlfSx7cHJvdmlkZTpXMCxtdWx0aTohMCxkZXBzOltpQ10sdXNlRmFjdG9yeTpqU2V9LHtwcm92aWRlOlcwLG11bHRpOiEwLGRlcHM6W2lDXSx1c2VGYWN0b3J5OnpTZX0se3Byb3ZpZGU6VzAsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6R1NlfV19ZnVuY3Rpb24gY1EoKXtyZXR1cm5be3Byb3ZpZGU6U0IsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6WVNlfV19ZnVuY3Rpb24gcVNlKG4pe3JldHVybiBufWZ1bmN0aW9uIFlTZShuKXtpZighbi5zdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzcylyZXR1cm47bGV0IHQ9T2JqZWN0LmVudHJpZXMoYkIpLmZpbHRlcigoWyxlXSk9PmU+MSkubWFwKChbZV0pPT5lKTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiB0eXBlcyBhcmUgcmVnaXN0ZXJlZCBtb3JlIHRoYW4gb25jZSwgJHt0Lm1hcChlPT5gIiR7ZX0iYCkuam9pbigiLCAiKX0uICR7RUJ9I3N0cmljdGFjdGlvbnR5cGV1bmlxdWVuZXNzYCl9ZnVuY3Rpb24gWFNlKG4sdCl7cmV0dXJuW3twcm92aWRlOiRYLHVzZUZhY3Rvcnk6TFNlLGRlcHM6W1tQZSxuZXcgT28sbmV3IFRhXV19LHtwcm92aWRlOkxYLHVzZVZhbHVlOnQuaW5pdGlhbFN0YXRlfSx7cHJvdmlkZTpNQix1c2VGYWN0b3J5OmxRLGRlcHM6W0xYXX0se3Byb3ZpZGU6dkIsdXNlVmFsdWU6bn0se3Byb3ZpZGU6SFgsdXNlRXhpc3Rpbmc6biBpbnN0YW5jZW9mIHNlP246dkJ9LHtwcm92aWRlOnRRLGRlcHM6W3puLHZCLFtuZXcgamcoSFgpXV0sdXNlRmFjdG9yeTpPU2V9LHtwcm92aWRlOmpYLHVzZVZhbHVlOnQubWV0YVJlZHVjZXJzP3QubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTpHWCxkZXBzOltXMCxqWF0sdXNlRmFjdG9yeTpOU2V9LHtwcm92aWRlOkJYLHVzZVZhbHVlOnQucmVkdWNlckZhY3Rvcnk/dC5yZWR1Y2VyRmFjdG9yeTpIZn0se3Byb3ZpZGU6ZVEsZGVwczpbQlgsR1hdLHVzZUZhY3Rvcnk6clF9LHVTZSxnU2UsX1NlLHlTZSxiU2UsV1NlKHQucnVudGltZUNoZWNrcyksY1EoKV19ZnVuY3Rpb24gUVNlKG4sdCxlPXt9KXtyZXR1cm5be3Byb3ZpZGU6VVgsbXVsdGk6ITAsdXNlVmFsdWU6biBpbnN0YW5jZW9mIE9iamVjdD97fTplfSx7cHJvdmlkZTpWWCxtdWx0aTohMCx1c2VWYWx1ZTp7a2V5Om4gaW5zdGFuY2VvZiBPYmplY3Q/bi5uYW1lOm4scmVkdWNlckZhY3Rvcnk6ZSBpbnN0YW5jZW9mIHNlfHwhZS5yZWR1Y2VyRmFjdG9yeT9IZjplLnJlZHVjZXJGYWN0b3J5LG1ldGFSZWR1Y2VyczplIGluc3RhbmNlb2Ygc2V8fCFlLm1ldGFSZWR1Y2Vycz9bXTplLm1ldGFSZWR1Y2Vycyxpbml0aWFsU3RhdGU6ZSBpbnN0YW5jZW9mIHNlfHwhZS5pbml0aWFsU3RhdGU/dm9pZCAwOmUuaW5pdGlhbFN0YXRlfX0se3Byb3ZpZGU6blEsZGVwczpbem4sVVgsVlhdLHVzZUZhY3Rvcnk6a1NlfSx7cHJvdmlkZTp5QixtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P24ucmVkdWNlcjp0fSx7cHJvdmlkZTp6WCxtdWx0aTohMCx1c2VFeGlzdGluZzp0IGluc3RhbmNlb2Ygc2U/dDp5Qn0se3Byb3ZpZGU6aVEsbXVsdGk6ITAsZGVwczpbem4seUIsW25ldyBqZyh6WCldXSx1c2VGYWN0b3J5OkZTZX0sY1EoKV19dmFyIHNDPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxMCksUihyQyksUihvQyksUihQZSksUigkWCw4KSxSKFNCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCkselQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuZmVhdHVyZXM9ZSx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1pLHRoaXMucmVkdWNlck1hbmFnZXI9cjtsZXQgYT1lLm1hcCgobCxjKT0+e2xldCBkPWkuc2hpZnQoKVtjXTtyZXR1cm57Li4ubCxyZWR1Y2VyczpkLGluaXRpYWxTdGF0ZTpsUShsLmluaXRpYWxTdGF0ZSl9fSk7ci5hZGRGZWF0dXJlcyhhKX1uZ09uRGVzdHJveSgpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlRmVhdHVyZXModGhpcy5mZWF0dXJlcyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoblEpLFIoaVEpLFIoVlQpLFIoc0MpLFIoU0IsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxScj0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JSb290KGUsaT17fSl7cmV0dXJue25nTW9kdWxlOnNDLHByb3ZpZGVyczpbLi4uWFNlKGUsaSldfX1zdGF0aWMgZm9yRmVhdHVyZShlLGkscj17fSl7cmV0dXJue25nTW9kdWxlOnpULHByb3ZpZGVyczpbLi4uUVNlKGUsaSxyKV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gU2UoLi4ubil7cmV0dXJue3JlZHVjZXI6bi5wb3AoKSx0eXBlczpuLm1hcChpPT5pLnR5cGUpfX1mdW5jdGlvbiB3cihuLC4uLnQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZm9yKGxldCByIG9mIGkudHlwZXMpe2xldCBvPWUuZ2V0KHIpO2Uuc2V0KHIsbz8oYSxsKT0+aS5yZWR1Y2VyKG8oYSxsKSxsKTppLnJlZHVjZXIpfXJldHVybiBmdW5jdGlvbihpPW4scil7bGV0IG89ZS5nZXQoci50eXBlKTtyZXR1cm4gbz9vKGkscik6aX19dmFyIEtTZT17ZGlzcGF0Y2g6ITAsdXNlRWZmZWN0c0Vycm9ySGFuZGxlcjohMH0sR1Q9Il9fQG5ncngvZWZmZWN0c19jcmVhdGVfXyI7ZnVuY3Rpb24gVXIobix0KXtsZXQgZT1uKCksaT17Li4uS1NlLC4uLnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxHVCx7dmFsdWU6aX0pLGV9ZnVuY3Rpb24gWlNlKG4pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5maWx0ZXIoaT0+ISghbltpXXx8IW5baV0uaGFzT3duUHJvcGVydHkoR1QpKSYmbltpXVtHVF0uaGFzT3duUHJvcGVydHkoImRpc3BhdGNoIikpLm1hcChpPT4oe3Byb3BlcnR5TmFtZTppLC4uLm5baV1bR1RdfSkpfWZ1bmN0aW9uIEFCKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9dmFyIHBRPSJfX0BuZ3J4L2VmZmVjdHNfXyI7ZnVuY3Rpb24gSlNlKG4pe3JldHVybiBVVChlRWUsQUIpKG4pfWZ1bmN0aW9uIGVFZShuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4uY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkocFEpfShuKT9uLmNvbnN0cnVjdG9yW3BRXTpbXX1mdW5jdGlvbiBoUShuLHQsZT0xMCl7cmV0dXJuIG4ucGlwZShDbyhpPT4odCYmdC5oYW5kbGVFcnJvcihpKSxlPD0xP246aFEobix0LGUtMSkpKSl9dmFyIGNzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBRdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLGUmJih0aGlzLnNvdXJjZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKG9DKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gVGkoLi4ubil7cmV0dXJuIEhlKHQ9Pm4uc29tZShlPT4ic3RyaW5nIj09dHlwZW9mIGU/ZT09PXQudHlwZTplLnR5cGU9PT10LnR5cGUpKX12YXIgZlE9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgR3VhcmQiKSxqVD1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgVXNlciBQcm92aWRlZCBFZmZlY3RzIiksREI9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgRWZmZWN0cyIpLG1RPW5ldyBzZSgiQG5ncngvZWZmZWN0cyBSb290IEVmZmVjdHMiKSx1UT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIiksZ1E9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEZlYXR1cmUgRWZmZWN0cyIpLHJFZT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+aFF9KSxfUT0iQG5ncngvZWZmZWN0cy9pbml0IjtmdW5jdGlvbiBmRWUobil7cmV0dXJuIElCKG4sIm5ncnhPbkluaXRFZmZlY3RzIil9ZnVuY3Rpb24gSUIobix0KXtyZXR1cm4gbiYmdCBpbiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygblt0XX13ZShfUSk7dmFyIHZRPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5lcnJvckhhbmRsZXI9ZSx0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXI9aX1hZGRFZmZlY3RzKGUpe3RoaXMubmV4dChlKX10b0FjdGlvbnMoKXtyZXR1cm4gdGhpcy5waXBlKFZTKEFCKSxfbihlPT5lLnBpcGUoVlMobUVlKSkpLF9uKGU9PntsZXQgaT1lLnBpcGUoTFMobz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gZT0+e2xldCBpPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BQihuKS5jb25zdHJ1Y3Rvci5uYW1lLHI9ZnVuY3Rpb24obil7cmV0dXJuW0pTZSxaU2VdLnJlZHVjZSgoZSxpKT0+ZS5jb25jYXQoaShuKSksW10pfShuKS5tYXAoKHtwcm9wZXJ0eU5hbWU6byxkaXNwYXRjaDpzLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6YX0pPT57bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIG5bb10/bltvXSgpOm5bb10sYz1hP2UobCx0KTpsO3JldHVybiExPT09cz9jLnBpcGUocXkoKSk6Yy5waXBlKHF0KChuLHQpPT57bi5zdWJzY3JpYmUoTHQodCxlPT57dC5uZXh0KHRsLmNyZWF0ZU5leHQoZSkpfSwoKT0+e3QubmV4dCh0bC5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9LGU9Pnt0Lm5leHQodGwuY3JlYXRlRXJyb3IoZSkpLHQuY29tcGxldGUoKX0pKX0pKS5waXBlKEIoZD0+KHtlZmZlY3Q6bltvXSxub3RpZmljYXRpb246ZCxwcm9wZXJ0eU5hbWU6byxzb3VyY2VOYW1lOmksc291cmNlSW5zdGFuY2U6bn0pKSl9KTtyZXR1cm4gdW4oLi4ucil9KGUsbix0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIElCKG4sIm5ncnhPblJ1bkVmZmVjdHMiKX0oZSk/ZS5uZ3J4T25SdW5FZmZlY3RzKGkpOml9fSh0aGlzLmVycm9ySGFuZGxlcix0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXIpKG8pKSxCKG89PihmdW5jdGlvbihuLHQpe2lmKCJOIj09PW4ubm90aWZpY2F0aW9uLmtpbmQpe2xldCBlPW4ubm90aWZpY2F0aW9uLnZhbHVlOyFmdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmbiYmbi50eXBlJiYic3RyaW5nIj09dHlwZW9mIG4udHlwZX0oZSkmJnQuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFZmZlY3QgJHtmdW5jdGlvbih7cHJvcGVydHlOYW1lOm4sc291cmNlSW5zdGFuY2U6dCxzb3VyY2VOYW1lOmV9KXtsZXQgaT0iZnVuY3Rpb24iPT10eXBlb2YgdFtuXTtyZXR1cm5gIiR7ZX0uJHtTdHJpbmcobil9JHtpPyIoKSI6IiJ9ImB9KG4pfSBkaXNwYXRjaGVkIGFuIGludmFsaWQgYWN0aW9uOiAke2Z1bmN0aW9uKG4pe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9Y2F0Y2h7cmV0dXJuIG59fShlKX1gKSl9fShvLHRoaXMuZXJyb3JIYW5kbGVyKSxvLm5vdGlmaWNhdGlvbikpLEhlKG89PiJOIj09PW8ua2luZCYmbnVsbCE9by52YWx1ZSkscXQoKG4sdCk9PntuLnN1YnNjcmliZShMdCh0LGU9PkhPKGUsdCkpKX0pKTtyZXR1cm4gdW4oaSxlLnBpcGUoSHQoMSksSGUoZkVlKSxCKG89Pm8ubmdyeE9uSW5pdEVmZmVjdHMoKSkpKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihTcyksUihyRWUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBtRWUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBJQihuLCJuZ3J4T25JZGVudGlmeUVmZmVjdHMiKX0obik/bi5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn12YXIgeVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZWZmZWN0U291cmNlcz1lLHRoaXMuc3RvcmU9aSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1nZXQgaXNTdGFydGVkKCl7cmV0dXJuISF0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb259c3RhcnQoKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb258fCh0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249dGhpcy5lZmZlY3RTb3VyY2VzLnRvQWN0aW9ucygpLnN1YnNjcmliZSh0aGlzLnN0b3JlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24mJih0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodlEpLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuc291cmNlcz1lLGkuc3RhcnQoKSxvLmZvckVhY2goYz0+ZS5hZGRFZmZlY3RzKGMpKSxyLmRpc3BhdGNoKHt0eXBlOl9RfSl9YWRkRWZmZWN0cyhlKXt0aGlzLnNvdXJjZXMuYWRkRWZmZWN0cyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2USksUih5USksUihQZSksUihtUSksUihzQyw4KSxSKHpULDgpLFIoZlEsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxfRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXtpLmZvckVhY2gocz0+cy5mb3JFYWNoKGE9PmUuYWRkRWZmZWN0cyhhKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGJRKSxSKGdRKSxSKHNDLDgpLFIoelQsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxMbz0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JGZWF0dXJlKGU9W10pe3JldHVybntuZ01vZHVsZTpfRWUscHJvdmlkZXJzOltlLHtwcm92aWRlOnVRLG11bHRpOiEwLHVzZVZhbHVlOmV9LHtwcm92aWRlOmpULG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTpnUSxtdWx0aTohMCx1c2VGYWN0b3J5OmRRLGRlcHM6W3puLHVRLGpUXX1dfX1zdGF0aWMgZm9yUm9vdChlPVtdKXtyZXR1cm57bmdNb2R1bGU6YlEscHJvdmlkZXJzOltlLHtwcm92aWRlOkRCLHVzZVZhbHVlOltlXX0se3Byb3ZpZGU6ZlEsdXNlRmFjdG9yeTp5RWUsZGVwczpbW3lRLG5ldyBPbyxuZXcgVGFdLFtEQixuZXcgakZdXX0se3Byb3ZpZGU6alQsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOm1RLHVzZUZhY3Rvcnk6ZFEsZGVwczpbem4sREIsalRdfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gZFEobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiB0KWkucHVzaCguLi5yKTtmb3IobGV0IHIgb2YgZSlpLnB1c2goLi4ucik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQubWFwKGU9Pm4uZ2V0KGUpKX0obixpKX1mdW5jdGlvbiB5RWUobix0KXtpZigoMSE9PXQubGVuZ3RofHwwIT09dFswXS5sZW5ndGgpJiZuKXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIGZpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTktOT1dOPTBdPSJVTktOT1dOIixuW24uRVhQRVJJTUVOVFM9MV09IkVYUEVSSU1FTlRTIixuW24uRVhQRVJJTUVOVD0yXT0iRVhQRVJJTUVOVCIsbltuLkNPTVBBUkVfRVhQRVJJTUVOVD0zXT0iQ09NUEFSRV9FWFBFUklNRU5UIixuW24uTk9UX1NFVD00XT0iTk9UX1NFVCJ9KGZpfHwoZmk9e30pKSxmaSkpKCksV1Q9ImRlZmF1bHRFeHBlcmltZW50SWQiLFkwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UUz0wXT0iRVhQRVJJTUVOVFMiLG5bbi5EQVNIQk9BUkQ9MV09IkRBU0hCT0FSRCJ9KFkwfHwoWTA9e30pKSxZMCkpKCk7ZnVuY3Rpb24gbEMobil7cmV0dXJuIG4uc3BsaXQoIiwiKS5tYXAodD0+e2xldCBlPXQuaW5kZXhPZigiOiIpO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBjb2xvbiBkZWxpbWl0aW5nIG5hbWUgYW5kIElEOiAke3R9YCk7bGV0IGk9dC5zbGljZSgwLGUpLHI9dC5zbGljZShlKzEpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgRXhwZWN0IGlkIHRvIGJlIG5vbi1mYWxzeTogJHt0fWApO3JldHVybntuYW1lOmksaWQ6cn19KX1mdW5jdGlvbiB4UShuKXtyZXR1cm4gbi5tYXAoKHthbGlhczp0LGlkOmV9KT0+YCR7dH06JHtlfWApLmpvaW4oIiwiKX1mdW5jdGlvbiBhQyhuLHQpe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlQ6cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJleHBlcmltZW50SWQiKT9bdC5leHBlcmltZW50SWRdOltXVF07Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIGxDKHQuZXhwZXJpbWVudElkcykubWFwKCh7aWQ6aX0pPT5pKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiB1cyhuLHQpe2lmKCFufHwhdClyZXR1cm4gbj09PXQ7aWYobi5yb3V0ZUtpbmQhPT10LnJvdXRlS2luZClyZXR1cm4hMTtsZXQgZT1hQyhuLnJvdXRlS2luZCxuLnBhcmFtcyksaT1hQyh0LnJvdXRlS2luZCx0LnBhcmFtcyk7aWYobnVsbD09PWV8fG51bGw9PT1pKXJldHVybiBlPT09aTtpZihlLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2xldCByPWkuc29ydCgpO3JldHVybiBlLnNvcnQoKS5ldmVyeSgobyxzKT0+cltzXT09PW8pfWZ1bmN0aW9uIFBCKG4pe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlRTOnJldHVybiBZMC5FWFBFUklNRU5UUztjYXNlIGZpLkVYUEVSSU1FTlQ6Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIFkwLkRBU0hCT0FSRDtjYXNlIGZpLlVOS05PV046Y2FzZSBmaS5OT1RfU0VUOnJldHVybiBudWxsfX1mdW5jdGlvbiBxVChuLHQsZSl7bGV0IGk9UEIobik7cmV0dXJuIG51bGwhPT1pJiYhZS5zb21lKHI9PnIuZGVlcExpbmtHcm91cD09PWkmJnIubmFtZXNwYWNlSWQ9PT10KX12YXIgU1FfZ2V0SHJlZj0oKT0+d2luZG93LmxvY2F0aW9uLmhyZWYsVWY9KCgpPT57Y2xhc3MgbntnZXRIcmVmKCl7cmV0dXJuIFNRX2dldEhyZWYoKX1nZXRTZWFyY2goKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGk9W107cmV0dXJuIGUuZm9yRWFjaCgocixvKT0+e2kucHVzaCh7a2V5Om8sdmFsdWU6cn0pfSksaX1nZXRIYXNoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNofWdldFBhdGgoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWdldEhpc3RvcnlTdGF0ZSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZX1yZXBsYWNlU3RhdGVVcmwoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfXB1c2hTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIixlKX1yZXBsYWNlU3RhdGVEYXRhKGUpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLCIiKX1vblBvcFN0YXRlKCl7cmV0dXJuIGxpKHdpbmRvdywicG9wc3RhdGUiKS5waXBlKEIoZT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxzdGF0ZTplLnN0YXRlfSkpKX1nZXRSZXNvbHZlZFBhdGgoZSl7cmV0dXJuIG5ldyBVUkwoZSxTUV9nZXRIcmVmKCkpLnBhdGhuYW1lfWdldEZ1bGxQYXRoKGUsaSxyKXtsZXQgbz10aGlzLmdldFJlc29sdmVkUGF0aChlKSxzPSIiO3JldHVybiBpLmxlbmd0aCYmKHM9Ij8iK2Z1bmN0aW9uKG4pe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldHtrZXk6ZSx2YWx1ZTppfW9mIG4pdC5hcHBlbmQoZSxpKTtyZXR1cm4gdH0oaSkudG9TdHJpbmcoKSksYCR7b30ke3N9JHtyP3RoaXMuZ2V0SGFzaCgpOiIifWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHpmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudChlKX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpe2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighaSlyZXR1cm4iLyI7bGV0e3BhdGhuYW1lOnJ9PW5ldyBVUkwoaS5jb250ZW50LGUuZ2V0SHJlZigpKTtyZXR1cm4gci5yZXBsYWNlKC9cLyokLywiLyIpfWdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSl7cmV0dXJuIHRoaXMuYXBwUm9vdC5zbGljZSgwLC0xKStlfWdldEFwcFJvb3RsZXNzUGF0aG5hbWUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCh0aGlzLmFwcFJvb3QpPyIvIitlLnNsaWNlKHRoaXMuYXBwUm9vdC5sZW5ndGgpOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVWYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltVZl19KSxufSkoKSxRMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6Zl0saW1wb3J0czpbWDBdfSksbn0pKCksa0I9bmV3IHNlKCJbQXBwIFJvdXRpbmddIERpcnR5IFVwZGF0ZXMiKSxZVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHlVcGRhdGVzU2VsZWN0b3JGYWN0b3JpZXM9ZX1nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz8/W119c3RhdGljIHJlZ2lzdGVyRGlydHlVcGRhdGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6a0IsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGtCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksRVE9d2UoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxLMD13ZSgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWFQ9d2UoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZCPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFowPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseGw9d2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLExCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIiksUVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGkuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7aS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChpLmFjdGlvbkNyZWF0b3IudHlwZSxpLmxhbWJkYSl9fWdldE5hdmlnYXRpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOkxCLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihMQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGNDKG4pe3JldHVybiBudWxsIT1uLnJvdXRlS2luZH1mdW5jdGlvbiBIQihuKXtyZXR1cm4gQVEobikubWFwKGU9PntsZXQgaT1lLnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gaT97cGF0aFBhcnQ6ZSxpc1BhcmFtOiEwLHBhcmFtTmFtZTplLnNsaWNlKDEpfTp7cGF0aFBhcnQ6ZSxpc1BhcmFtOml9fSl9dmFyIEowPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPUhCKHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX1zdGF0aWMgZ2V0TWF0Y2hlcih0KXtyZXR1cm4gY0ModCk/bmV3IHVDKHQpOmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLnJlZGlyZWN0aW9uUGF0aH0odCk/bmV3IEJCKHQpOm5ldyBWQih0KX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sdUM9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LEJCPWNsYXNzIGV4dGVuZHMgSjB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1IQih0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0sVkI9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LGRDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPUowLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiB1QyYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKGNDKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oSEIobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPUFRKHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czp1LGlzUmVkaXJlY3Rpb246ZH09bDtpZihkKXtlPXUscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiB1QykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGg9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpEUSh1KSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLHUpfTtyZXR1cm4gcj97Li4uaCxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmgsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6RFEoci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gQVEobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBEUShuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIFVCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxoYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBkQyhbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgZEMoaSksaS5mb3JFYWNoKHI9PntjQyhyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VUIsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksS1Q9ImFwcF9yb3V0aW5nIixwQz1QcihLVCkscmE9WShwQyxuPT5uLmFjdGl2ZVJvdXRlKSxSUT1ZKHBDLG49Pm4ubmV4dFJvdXRlKSxPUT1ZKHBDLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLGtRPVkocEMsbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxGUT1ZKHBDLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cykscHU9WShyYSxuPT5uP24ucm91dGVLaW5kOmZpLk5PVF9TRVQpLGpCPVkocmEsbj0+bj9uLnBhcmFtczp7fSksJG89WShwdSxqQiwobix0KT0+YUMobix0KSksaHU9KFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpLGk9MDtmb3IobGV0e2lkOnIsbmFtZTpvfW9mIGUpaSsrLCF0LmhhcyhyKSYmdC5zZXQocix7YWxpYXNUZXh0Om8sYWxpYXNOdW1iZXI6aX0pO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pKSxHQj13ZSgiW0FwcCBSb3V0aW5nXSBFZmZlY3RzIEluaXQiKSxGcz0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIn0oRnN8fChGcz17fSkpLEZzKSkoKSxOUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5sb2NhdGlvbj1yLHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnk9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZT1hLHRoaXMuYXBwUm9vdFByb3ZpZGVyPWwsdGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShGQiksQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoYy5wYXRobmFtZSk6dGhpcy5sb2NhdGlvbi5nZXRSZXNvbHZlZFBhdGgoYy5wYXRobmFtZSksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMSxyZXBsYWNlU3RhdGU6Yy5yZXBsYWNlU3RhdGU/PyExLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmMucmVzZXROYW1lc3BhY2VkU3RhdGU/RnMuTkVXOkZzLlVOQ0hBTkdFRH19fSkpKSx0aGlzLmJvb3RzdHJhcFJlZHVjZXJzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSxCKCgpPT5YVCh7cm91dGVLaW5kczpuZXcgU2V0KHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJvdXRlS2luZHMoKSl9KSkpKSx0aGlzLm9uSW5pdCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSkucGlwZShubCgwKSxCKCgpPT57bGV0IGM9dGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKT8ubmFtZXNwYWNlSWQsdT12b2lkIDA9PT1jP3tvcHRpb246RnMuTkVXfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjfTtyZXR1cm57cGF0aG5hbWU6dGhpcy5sb2NhdGlvbi5nZXRQYXRoKCksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnV9fX0pKSx0aGlzLm9uUG9wU3RhdGUkPXRoaXMubG9jYXRpb24ub25Qb3BTdGF0ZSgpLnBpcGUoQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUsb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnZvaWQgMD09PWMuc3RhdGU/Lm5hbWVzcGFjZUlkP3tvcHRpb246RnMuVU5DSEFOR0VEfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjLnN0YXRlLm5hbWVzcGFjZUlkfX19KSkpLHRoaXMudXNlckluaXROYXZSb3V0ZSQ9dW4odGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkLHRoaXMub25Jbml0JCx0aGlzLm9uUG9wU3RhdGUkKS5waXBlKEIoYz0+e2lmKCFjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoYFtBcHAgcm91dGluZ10gcGF0aG5hbWUgbXVzdCBzdGFydCB3aXRoICcvJy4gR290OiAke2MucGF0aG5hbWV9YCk7cmV0dXJuey4uLmMscGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZShjLnBhdGhuYW1lKX19KSxCKGM9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncy5tYXRjaChjKSxvcHRpb25zOmMub3B0aW9uc30pKSksdGhpcy5wcm9ncmFtbWF0aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoQihjPT50aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlLmdldE5hdmlnYXRpb24oYykpLEhlKGM9Pm51bGwhPT1jKSxCKGM9PntsZXQgZix1PWMse3JlcGxhY2VTdGF0ZTpkPSExLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnAscm91dGVLaW5kOmh9PXU7cmV0dXJuIGY9dS5yb3V0ZUtpbmQ9PT1maS5DT01QQVJFX0VYUEVSSU1FTlQ/e2V4cGVyaW1lbnRJZHM6eFEodS5yb3V0ZVBhcmFtcy5hbGlhc0FuZEV4cGVyaW1lbnRJZHMpfTp1LnJvdXRlUGFyYW1zLHtyZXBsYWNlU3RhdGU6ZCxyb3V0ZUtpbmQ6aCxyb3V0ZVBhcmFtczpmLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9fSksQigoe3JlcGxhY2VTdGF0ZTpjLHJvdXRlS2luZDp1LHJvdXRlUGFyYW1zOmQscmVzZXROYW1lc3BhY2VkU3RhdGU6cH0pPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3M/dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2hCeVJvdXRlS2luZCh1LGQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOmMsYnJvd3NlckluaXRpYXRlZDohMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpwP0ZzLk5FVzpGcy5VTkNIQU5HRUR9fX0pKSksdGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJD11bih0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQpLnBpcGUoSGUoKHtyb3V0ZU1hdGNoOmN9KT0+Qm9vbGVhbihjKSksQigoe3JvdXRlTWF0Y2g6YyxvcHRpb25zOnV9KT0+KHtyb3V0ZU1hdGNoOmMsb3B0aW9uczp1fSkpKSx0aGlzLm5hdmlnYXRlJD1VcigoKT0+dGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJC5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHJhKSksX24oKFtkLHBdKT0+e2xldCBoPW51bGwhPT1wJiZ1cyhwLGQucm91dGVNYXRjaCksZj10aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpO3JldHVybiBofHwhZi5sZW5ndGg/anQoZCk6eG8odGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKS5tYXAobT0+dGhpcy5zdG9yZS5zZWxlY3QobSkucGlwZShIdCgxKSkpKS5waXBlKEIobT0+dm9pZCAwIT09bVswXS5leHBlcmltZW50SWRzJiZtWzBdLmV4cGVyaW1lbnRJZHMubGVuZ3RoPjApLEhlKG09PntpZihtKXtsZXQgQz13aW5kb3cuY29uZmlybSgiWW91IGhhdmUgdW5zYXZlZCBlZGl0cywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlbT8iKTtyZXR1cm4gQyYmdGhpcy5zdG9yZS5kaXNwYXRjaChFUSgpKSxDfXJldHVybiEwfSksQigoKT0+ZCkpfSksR3QodGhpcy5zdG9yZS5zZWxlY3Qoa1EpKSxOdCgoW3tyb3V0ZU1hdGNoOmQsb3B0aW9uczpwfSxoXSk9PntpZighcC5icm93c2VySW5pdGlhdGVkfHwhZC5kZWVwTGlua1Byb3ZpZGVyfHxwLm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5GUk9NX0hJU1RPUlkmJiFxVChkLnJvdXRlS2luZCxwLm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZCxoKSlyZXR1cm47bGV0IGY9ZC5vcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb24mJmQucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM/ZC5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLG09ZC5kZWVwTGlua1Byb3ZpZGVyLmRlc2VyaWFsaXplUXVlcnlQYXJhbXMoZik7dGhpcy5zdG9yZS5kaXNwYXRjaChLMCh7cm91dGVLaW5kOmQucm91dGVLaW5kLHBhcnRpYWxTdGF0ZTptfSkpfSksTnQoKFt7cm91dGVNYXRjaDpkfV0pPT57ZC5hY3Rpb24mJnRoaXMuc3RvcmUuZGlzcGF0Y2goZC5hY3Rpb24pfSksdmkoKFt7cm91dGVNYXRjaDpkLG9wdGlvbnM6cH1dKT0+bnVsbD09PWQuZGVlcExpbmtQcm92aWRlcj9qdCh7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6W10sb3B0aW9uczpwfSk6ZC5kZWVwTGlua1Byb3ZpZGVyLnNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0aGlzLnN0b3JlKS5waXBlKEIoKGgsZik9Pih7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6aCxvcHRpb25zOjA9PT1mP3A6ey4uLnAsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246RnMuVU5DSEFOR0VEfSxyZXBsYWNlU3RhdGU6ITB9fSkpKSksTnQoKHtyb3V0ZTpkfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFowKHthZnRlcjpkfSkpfSksQXIoMCkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpKSxCKChbZCxwXSk9PntsZXQgaD1udWxsPT09cHx8bnVsbD09PWQucm91dGV8fHVzKHAsZC5yb3V0ZSk7cmV0dXJuey4uLmQscHJlc2VydmVIYXNoOmh9fSksTnQoKHtwcmVzZXJ2ZUhhc2g6ZCxwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmgsb3B0aW9uczpmfSk9PnsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5wYXRobmFtZT09PXQucGF0aG5hbWUmJm4ucXVlcnlQYXJhbXMubGVuZ3RoPT09dC5xdWVyeVBhcmFtcy5sZW5ndGgmJm4ucXVlcnlQYXJhbXMuZXZlcnkoKGUsaSk9PntsZXQgcj10LnF1ZXJ5UGFyYW1zW2ldO3JldHVybiBlLmtleT09PXIua2V5JiZlLnZhbHVlPT09ci52YWx1ZX0pfSkoe3BhdGhuYW1lOnAscXVlcnlQYXJhbXM6aH0se3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodGhpcy5sb2NhdGlvbi5nZXRQYXRoKCkpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCl9KXx8KGYucmVwbGFjZVN0YXRlP3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlVXJsKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aChwLGgsZCkpKTp0aGlzLmxvY2F0aW9uLnB1c2hTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxoLGQpKSkpfSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KE9RKSksQigoW3tyb3V0ZTpkLG9wdGlvbnM6cH0saCxmXSk9PntsZXQgbT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIHQubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PUZzLkZST01fSElTVE9SWT90Lm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZDpudWxsPT1lfHx0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5ORVc/YCR7RGF0ZS5ub3coKS50b1N0cmluZygpfToke2Z1bmN0aW9uKCl7bGV0IG49bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMobik7bGV0IHQ9IiI7Zm9yKGxldCBlIG9mIG4pdCs9KGU+PjQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gdH0oKX1gOmV9KDAscCxmKTtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGVEYXRhKHsuLi50aGlzLmxvY2F0aW9uLmdldEhpc3RvcnlTdGF0ZSgpLG5hbWVzcGFjZUlkOm19KSx4bCh7YmVmb3JlOmgsYWZ0ZXI6ZCxiZWZvcmVOYW1lc3BhY2VJZDpmLGFmdGVyTmFtZXNwYWNlSWQ6bX0pfSkpKSx0aGlzLnJvdXRlQ29uZmlncz1zLmdldFJvdXRlQ29uZmlncygpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIEdCKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoVWYpLFIoWVQpLFIoaGMpLFIoUVQpLFIoemYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNRWU9d3Ioe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6bnVsbCxyZWh5ZHJhdGVkRGVlcExpbmtzOltdLHJlZ2lzdGVyZWRSb3V0ZUtleXM6bmV3IFNldH0sU2UoWjAsKG4se2FmdGVyOnR9KT0+KHsuLi5uLG5leHRSb3V0ZTp0fSkpLFNlKHhsLChuLHthZnRlcjp0LGFmdGVyTmFtZXNwYWNlSWQ6ZX0pPT57bGV0IGk9bi5yZWh5ZHJhdGVkRGVlcExpbmtzO3JldHVybiBxVCh0LnJvdXRlS2luZCxlLGkpJiYoaT1bLi4uaV0saS5wdXNoKHtkZWVwTGlua0dyb3VwOlBCKHQucm91dGVLaW5kKSxuYW1lc3BhY2VJZDplfSkpLHsuLi5uLGFjdGl2ZVJvdXRlOnQsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6ZSxyZWh5ZHJhdGVkRGVlcExpbmtzOml9fSksU2UoWFQsKG4se3JvdXRlS2luZHM6dH0pPT4oey4uLm4scmVnaXN0ZXJlZFJvdXRlS2V5czp0fSkpKTtmdW5jdGlvbiBMUShuLHQpe3JldHVybiBNRWUobix0KX12YXIgJDA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbWVQsUVRdLGltcG9ydHM6W2hjLFJyLmZvckZlYXR1cmUoS1QsTFEpLExvLmZvckZlYXR1cmUoW05RXSksUTAsWDBdfSksbn0pKCksQlE9Il9fdGFiX18iLFZRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRmU3RvcmFnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIiksZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZ2xvYmFscyIpLnRmX2dsb2JhbHMuc2V0VXNlSGFzaCghMCksdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5taWdyYXRlTGVnYWN5VVJMU2NoZW1lKCl9Z2V0U3RyaW5nKGUpe3JldHVybiB0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLmdldFN0cmluZyhlKX1zZXRTdHJpbmcoZSxpLHIpe3RoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2Uuc2V0U3RyaW5nKGUsaSxyKX1nZXRQbHVnaW5JZCgpe3JldHVybiB0aGlzLmdldFN0cmluZyhCUSl9c2V0UGx1Z2luSWQoZSxpKXt0aGlzLnNldFN0cmluZyhCUSxlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxBcD1jbGFzc3t9LFdCPW5ldyBzZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyIpLG5yPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPVtdLGUmJih0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9ZS5tYXAoaT0+aSgpKSl9Z2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM/P1tdfXN0YXRpYyBkZWZpbmVHbG9iYWxTZXR0aW5nKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6V0IsbXVsdGk6ITAsdXNlVmFsdWU6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihXQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLG9hPSgoKT0+KGZ1bmN0aW9uKG4pe24uQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsifShvYXx8KG9hPXt9KSksb2EpKSgpLEhRPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLFVRPSJfdGJfZ2xvYmFsX3NldHRpbmdzIix6UT0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiLFpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHFCPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKVHt1aVRvQmFja2VuZChlKXtsZXQgaT17fTtyZXR1cm4gdm9pZCAwIT09ZS5pZ25vcmVPdXRsaWVycyYmKGkuaWdub3JlT3V0bGllcnM9ZS5pZ25vcmVPdXRsaWVycyksdm9pZCAwIT09ZS5zY2FsYXJTbW9vdGhpbmcmJihpLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksdm9pZCAwIT09ZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyYmKGkuYXV0b1JlbG9hZFBlcmlvZEluTXM9ZS5hdXRvUmVsb2FkUGVyaW9kSW5Ncyksdm9pZCAwIT09ZS5wYWdlU2l6ZSYmKGkucGFnaW5hdGlvblNpemU9ZS5wYWdlU2l6ZSksdm9pZCAwIT09ZS50aGVtZU92ZXJyaWRlJiYoaS50aGVtZT1lLnRoZW1lT3ZlcnJpZGUpLHZvaWQgMCE9PWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLHZvaWQgMCE9PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLHZvaWQgMCE9PWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLHZvaWQgMCE9PWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLHZvaWQgMCE9PWUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLHZvaWQgMCE9PWUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLHZvaWQgMCE9PWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyYmKGkuc2luZ2xlU2VsZWN0aW9uSGVhZGVycz1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzJiYoaS5yYW5nZVNlbGVjdGlvbkhlYWRlcnM9ZS5yYW5nZVNlbGVjdGlvbkhlYWRlcnMpLGl9YmFja2VuZFRvVWkoZSl7bGV0IGk9e307cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLGUuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLGUuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmF1dG9SZWxvYWQmJihpLmF1dG9SZWxvYWQ9ZS5hdXRvUmVsb2FkKSxlLmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLGUuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgZS5wYWdpbmF0aW9uU2l6ZSYmKGkucGFnZVNpemU9ZS5wYWdpbmF0aW9uU2l6ZSksZS5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiBlLnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMob2EpKS5oYXMoZS50aGVtZSkmJihpLnRoZW1lT3ZlcnJpZGU9ZS50aGVtZSksZS5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGUuaGFzT3duUHJvcGVydHkoInNpZGVCYXJXaWR0aEluUGVyY2VudCIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkJiYoaS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCksZS5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc0NhcmRNaW5XaWR0aCIpJiYibnVtYmVyIj09dHlwZW9mIGUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLGUuaGFzT3duUHJvcGVydHkoInN0ZXBTZWxlY3RvckVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5zdGVwU2VsZWN0b3JFbmFibGVkJiYoaS5zdGVwU2VsZWN0b3JFbmFibGVkPWUuc3RlcFNlbGVjdG9yRW5hYmxlZCksZS5oYXNPd25Qcm9wZXJ0eSgicmFuZ2VTZWxlY3Rpb25FbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoImxpbmtlZFRpbWVFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoInNpbmdsZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMmJihpLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnM9ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxlLmhhc093blByb3BlcnR5KCJyYW5nZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnJhbmdlU2VsZWN0aW9uSGVhZGVycyYmKGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksalE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKT90aGlzLmdldFNldHRpbmdzKCkucGlwZShOdChpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFVRLEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKHsuLi5pLC4uLmV9KSkpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShIUSksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHpRKX0pLEIoKCk9Pnt9KSk6YW99ZGVzZXJpYWxpemUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh6USk7cmV0dXJuIGp0KHsuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGU/SlNPTi5zdHJpbmdpZnkoe25vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM6TnVtYmVyKGUpfSk6Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEhRKT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFVRKT8/Int9IikpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoSlQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxHUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpaVCx1c2VDbGFzczpqUX0scUIse3Byb3ZpZGU6SlQsdXNlRXhpc3Rpbmc6cUJ9XX0pLG59KSgpLGZjPXdlKCJbUGVyc2lzdGVudCBTZXR0aW5nc10gR2xvYmFsIFNldHRpbmdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLCRUPSJwZXJzaXN0ZW50X3NldHRpbmdzIixXUT1ZKFByKCRUKSxuPT5uLnNob3VsZFBlcnNpc3RTZXR0aW5ncykscVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuY29uZmlnTW9kdWxlPXIsdGhpcy5kYXRhU291cmNlPW8sdGhpcy5pbml0aWFsaXplQW5kVXBkYXRlU2V0dGluZ3MkPVVyKCgpPT57bGV0IHM9dGhpcy5hY3Rpb25zJC5waXBlKFRpKFowKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChXUSkpLEhlKChbLGFdKT0+YSksX24oKCk9PnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSxOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChmYyh7cGFydGlhbFNldHRpbmdzOmF9KSl9KSxubCgwKSxfbigoKT0+dW4oLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcChsPT50aGlzLnN0b3JlLnNlbGVjdChsKS5waXBlKGRpKChjLHUpPT57bGV0IGQ9T2JqZWN0LnZhbHVlcyhjKSxwPU9iamVjdC52YWx1ZXModSk7cmV0dXJuIGQubGVuZ3RoPT09cC5sZW5ndGgmJmQuZXZlcnkoKGgsZik9Pmg9PT1wW2ZdKX0pLENhKDEpKSkpKSxYcygpKTtyZXR1cm4gcy5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPVtdO3JldHVybiB0LnN1YnNjcmliZShMdChlLHI9PmkucHVzaChyKSwoKT0+e2UubmV4dChpKSxlLmNvbXBsZXRlKCl9KSksbi5zdWJzY3JpYmUoTHQoZSwoKT0+e2xldCByPWk7aT1bXSxlLm5leHQocil9LHpsKSksKCk9PntpPW51bGx9fSl9KHMucGlwZShBcig1MDApKSksX24oYT0+e2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gYW87bGV0IGw9e307Zm9yKGxldCBjIG9mIGEpT2JqZWN0LmFzc2lnbihsLGMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MobCl9KSl9LHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKG5yKSxSKFpUKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSUVlPXdyKHtzaG91bGRQZXJzaXN0U2V0dGluZ3M6ITB9KTtmdW5jdGlvbiBZUShuLHQpe3JldHVybiBJRWUobix0KX12YXIgWUI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbbnJdLGltcG9ydHM6W1JyLmZvckZlYXR1cmUoJFQsWVEpLExvLmZvckZlYXR1cmUoW3FRXSksR1FdfSksbn0pKCksdEQ9Y2xhc3N7fSxuRD1jbGFzc3t9LFZhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57bGV0IGk9ZS5pbmRleE9mKCI6Iik7aWYoaT4wKXtsZXQgcj1lLnNsaWNlKDAsaSksbz1yLnRvTG93ZXJDYXNlKCkscz1lLnNsaWNlKGkrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLG8pLHRoaXMuaGVhZGVycy5oYXMobyk/dGhpcy5oZWFkZXJzLmdldChvKS5wdXNoKHMpOnRoaXMuaGVhZGVycy5zZXQobyxbc10pfX0pfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZT0+e2xldCBpPXRbZV0scj1lLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLGkubGVuZ3RoPjAmJih0aGlzLmhlYWRlcnMuc2V0KHIsaSksdGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGUscikpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZVswXTpudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJhIn0pfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX1kZWxldGUodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9bWF5YmVTZXROb3JtYWxpemVkTmFtZSh0LGUpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyhlKXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdCl9aW5pdCgpe3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKHQ9PnRoaXMuYXBwbHlVcGRhdGUodCkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20odCl7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGU9Pnt0aGlzLmhlYWRlcnMuc2V0KGUsdC5oZWFkZXJzLmdldChlKSksdGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdC5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpKX0pfWNsb25lKHQpe2xldCBlPW5ldyBWYTtyZXR1cm4gZS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5sYXp5SW5pdDp0aGlzLGUubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFt0XSksZX1hcHBseVVwZGF0ZSh0KXtsZXQgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBpPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLDA9PT1pLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTtsZXQgcj0oImEiPT09dC5vcD90aGlzLmhlYWRlcnMuZ2V0KGUpOnZvaWQgMCl8fFtdO3IucHVzaCguLi5pKSx0aGlzLmhlYWRlcnMuc2V0KGUscik7YnJlYWs7Y2FzZSJkIjpsZXQgbz10LnZhbHVlO2lmKG8pe2xldCBzPXRoaXMuaGVhZGVycy5nZXQoZSk7aWYoIXMpcmV0dXJuO3M9cy5maWx0ZXIoYT0+LTE9PT1vLmluZGV4T2YoYSkpLDA9PT1zLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSxzKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1mb3JFYWNoKHQpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGU9PnQodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpLHRoaXMuaGVhZGVycy5nZXQoZSkpKX19LFJFZT0vJShcZFthLWYwLTldKS9naSxPRWU9ezQwOiJAIiwiM0EiOiI6IiwyNDoiJCIsIjJDIjoiLCIsIjNCIjoiOyIsIjNEIjoiPSIsIjNGIjoiPyIsIjJGIjoiLyJ9O2Z1bmN0aW9uIFhRKG4pe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZShSRWUsKHQsZSk9Pk9FZVtlXT8/dCl9ZnVuY3Rpb24gZUQobil7cmV0dXJuYCR7bn1gfXZhciBmdT1jbGFzc3tjb25zdHJ1Y3Rvcih0PXt9KXtpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBjbGFzc3tlbmNvZGVLZXkodCl7cmV0dXJuIFhRKHQpfWVuY29kZVZhbHVlKHQpe3JldHVybiBYUSh0KX1kZWNvZGVLZXkodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1kZWNvZGVWYWx1ZSh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfX0sdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgTWFwO3JldHVybiBuLmxlbmd0aD4wJiZuLnJlcGxhY2UoL15cPy8sIiIpLnNwbGl0KCImIikuZm9yRWFjaChyPT57bGV0IG89ci5pbmRleE9mKCI9IiksW3MsYV09LTE9PW8/W3QuZGVjb2RlS2V5KHIpLCIiXTpbdC5kZWNvZGVLZXkoci5zbGljZSgwLG8pKSx0LmRlY29kZVZhbHVlKHIuc2xpY2UobysxKSldLGw9ZS5nZXQocyl8fFtdO2wucHVzaChhKSxlLnNldChzLGwpfSksZX0odC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKGU9PntsZXQgaT10LmZyb21PYmplY3RbZV0scj1BcnJheS5pc0FycmF5KGkpP2kubWFwKGVEKTpbZUQoaSldO3RoaXMubWFwLnNldChlLHIpfSkpOnRoaXMubWFwPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9Z2V0KHQpe3RoaXMuaW5pdCgpO2xldCBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX1hcHBlbmRBbGwodCl7bGV0IGU9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2gobz0+e2UucHVzaCh7cGFyYW06aSx2YWx1ZTpvLG9wOiJhIn0pfSk6ZS5wdXNoKHtwYXJhbTppLHZhbHVlOnIsb3A6ImEifSl9KSx0aGlzLmNsb25lKGUpfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAodD0+e2xldCBlPXRoaXMuZW5jb2Rlci5lbmNvZGVLZXkodCk7cmV0dXJuIHRoaXMubWFwLmdldCh0KS5tYXAoaT0+ZSsiPSIrdGhpcy5lbmNvZGVyLmVuY29kZVZhbHVlKGkpKS5qb2luKCImIil9KS5maWx0ZXIodD0+IiIhPT10KS5qb2luKCImIil9Y2xvbmUodCl7bGV0IGU9bmV3IGZ1KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBlLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxlLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdCh0KSxlfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2godD0+dGhpcy5tYXAuc2V0KHQsdGhpcy5jbG9uZUZyb20ubWFwLmdldCh0KSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKHQ9Pntzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBlPSgiYSI9PT10Lm9wP3RoaXMubWFwLmdldCh0LnBhcmFtKTp2b2lkIDApfHxbXTtlLnB1c2goZUQodC52YWx1ZSkpLHRoaXMubWFwLnNldCh0LnBhcmFtLGUpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09dC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pO2JyZWFrfXtsZXQgaT10aGlzLm1hcC5nZXQodC5wYXJhbSl8fFtdLHI9aS5pbmRleE9mKGVEKHQudmFsdWUpKTstMSE9PXImJmkuc3BsaWNlKHIsMSksaS5sZW5ndGg+MD90aGlzLm1hcC5zZXQodC5wYXJhbSxpKTp0aGlzLm1hcC5kZWxldGUodC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19O2Z1bmN0aW9uIFFRKG4pe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZuIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gS1Eobil7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmbiBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gWlEobil7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJm4gaW5zdGFuY2VvZiBGb3JtRGF0YX12YXIgamY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7bGV0IG87aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fHI/KHRoaXMuYm9keT12b2lkIDAhPT1pP2k6bnVsbCxvPXIpOm89aSxvJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIW8ucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFvLndpdGhDcmVkZW50aWFscyxvLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPW8ucmVzcG9uc2VUeXBlKSxvLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9by5oZWFkZXJzKSxvLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9by5jb250ZXh0KSxvLnBhcmFtcyYmKHRoaXMucGFyYW1zPW8ucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBWYSksdGhpcy5jb250ZXh0fHwodGhpcy5jb250ZXh0PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWFwLnNldCh0LGUpLHRoaXN9Z2V0KHQpe3JldHVybiB0aGlzLm1hcC5oYXModCl8fHRoaXMubWFwLnNldCh0LHQuZGVmYXVsdFZhbHVlKCkpLHRoaXMubWFwLmdldCh0KX1kZWxldGUodCl7cmV0dXJuIHRoaXMubWFwLmRlbGV0ZSh0KSx0aGlzfWhhcyh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfWtleXMoKXtyZXR1cm4gdGhpcy5tYXAua2V5cygpfX0pLHRoaXMucGFyYW1zKXtsZXQgcz10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT1zLmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9ZTtlbHNle2xldCBhPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PWE/Ij8iOmE8ZS5sZW5ndGgtMT8iJiI6IiIpK3N9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IGZ1LHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlFRKHRoaXMuYm9keSl8fEtRKHRoaXMuYm9keSl8fFpRKHRoaXMuYm9keSl8fGZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmbiBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30odGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIGZ1P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fFpRKHRoaXMuYm9keSk/bnVsbDpLUSh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOlFRKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgZnU/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZSh0PXt9KXtsZXQgZT10Lm1ldGhvZHx8dGhpcy5tZXRob2QsaT10LnVybHx8dGhpcy51cmwscj10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsbz12b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxzPXZvaWQgMCE9PXQud2l0aENyZWRlbnRpYWxzP3Qud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLGE9dm9pZCAwIT09dC5yZXBvcnRQcm9ncmVzcz90LnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3MsbD10LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxjPXQucGFyYW1zfHx0aGlzLnBhcmFtcyx1PXQuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT10LnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKHQuc2V0SGVhZGVycykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0SGVhZGVyc1twXSksbCkpLHQuc2V0UGFyYW1zJiYoYz1PYmplY3Qua2V5cyh0LnNldFBhcmFtcykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0UGFyYW1zW3BdKSxjKSksbmV3IGpmKGUsaSxvLHtwYXJhbXM6YyxoZWFkZXJzOmwsY29udGV4dDp1LHJlcG9ydFByb2dyZXNzOmEscmVzcG9uc2VUeXBlOnIsd2l0aENyZWRlbnRpYWxzOnN9KX19LElwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TZW50PTBdPSJTZW50IixuW24uVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixuW24uUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIixuW24uRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsbltuLlVzZXI9NV09IlVzZXIifShJcHx8KElwPXt9KSksSXApKSgpLGZDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDAsaT0iT0siKXt0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgVmEsdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxpLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0sbUM9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9SXAuUmVzcG9uc2VIZWFkZXJ9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBtQyh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19LGVfPWNsYXNzIGV4dGVuZHMgZkN7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPUlwLlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT10LmJvZHk/dC5ib2R5Om51bGx9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBlXyh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0sbWQ9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifTogJHt0LnN0YXR1c30gJHt0LnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPXQuZXJyb3J8fG51bGx9fTtmdW5jdGlvbiBYQihuLHQpe3JldHVybntib2R5OnQsaGVhZGVyczpuLmhlYWRlcnMsY29udGV4dDpuLmNvbnRleHQsb2JzZXJ2ZTpuLm9ic2VydmUscGFyYW1zOm4ucGFyYW1zLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc319dmFyIEdmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5oYW5kbGVyPWV9cmVxdWVzdChlLGkscj17fSl7bGV0IG87aWYoZSBpbnN0YW5jZW9mIGpmKW89ZTtlbHNle2xldCBsLGM7bD1yLmhlYWRlcnMgaW5zdGFuY2VvZiBWYT9yLmhlYWRlcnM6bmV3IFZhKHIuaGVhZGVycyksci5wYXJhbXMmJihjPXIucGFyYW1zIGluc3RhbmNlb2YgZnU/ci5wYXJhbXM6bmV3IGZ1KHtmcm9tT2JqZWN0OnIucGFyYW1zfSkpLG89bmV3IGpmKGUsaSx2b2lkIDAhPT1yLmJvZHk/ci5ib2R5Om51bGwse2hlYWRlcnM6bCxjb250ZXh0OnIuY29udGV4dCxwYXJhbXM6YyxyZXBvcnRQcm9ncmVzczpyLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpyLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpyLndpdGhDcmVkZW50aWFsc30pfWxldCBzPWp0KG8pLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gYm4odCk/X24obix0LDEpOl9uKG4sMSl9KGw9PnRoaXMuaGFuZGxlci5oYW5kbGUobCkpKTtpZihlIGluc3RhbmNlb2YgamZ8fCJldmVudHMiPT09ci5vYnNlcnZlKXJldHVybiBzO2xldCBhPXMucGlwZShIZShsPT5sIGluc3RhbmNlb2YgZV8pKTtzd2l0Y2goci5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiJzdHJpbmciIT10eXBlb2YgbC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiBsLmJvZHl9KSk7ZGVmYXVsdDpyZXR1cm4gYS5waXBlKEIobD0+bC5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICR7ci5vYnNlcnZlfX1gKX19ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixlLGkpfWdldChlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsZSxpKX1oZWFkKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSEVBRCIsZSxpKX1qc29ucChlLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIixlLHtwYXJhbXM6KG5ldyBmdSkuYXBwZW5kKGksIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJPUFRJT05TIixlLGkpfXBhdGNoKGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsZSxYQihyLGkpKX1wb3N0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixlLFhCKHIsaSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIixlLFhCKHIsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHREKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksckQ9bmV3IHNlKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLE5FZT0oKCk9PntjbGFzcyBue2ludGVyY2VwdChlLGkpe3JldHVybiBpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTEVlPS9eXClcXVx9Jyw/XG4vLEpRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy54aHJGYWN0b3J5PWV9aGFuZGxlKGUpe2lmKCJKU09OUCI9PT1lLm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEh0dHBDbGllbnRKc29ucE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBRdChpPT57bGV0IHI9dGhpcy54aHJGYWN0b3J5LmJ1aWxkKCk7aWYoci5vcGVuKGUubWV0aG9kLGUudXJsV2l0aFBhcmFtcyksZS53aXRoQ3JlZGVudGlhbHMmJihyLndpdGhDcmVkZW50aWFscz0hMCksZS5oZWFkZXJzLmZvckVhY2goKGgsZik9PnIuc2V0UmVxdWVzdEhlYWRlcihoLGYuam9pbigiLCIpKSksZS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWUuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtsZXQgaD1lLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWgmJnIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixoKX1pZihlLnJlc3BvbnNlVHlwZSl7bGV0IGg9ZS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtyLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1oP2g6InRleHQifWxldCBvPWUuc2VyaWFsaXplQm9keSgpLHM9bnVsbCxhPSgpPT57aWYobnVsbCE9PXMpcmV0dXJuIHM7bGV0IGg9ci5zdGF0dXNUZXh0fHwiT0siLGY9bmV3IFZhKHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG09ZnVuY3Rpb24obil7cmV0dXJuInJlc3BvbnNlVVJMImluIG4mJm4ucmVzcG9uc2VVUkw/bi5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdChuLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT9uLmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0ocil8fGUudXJsO3JldHVybiBzPW5ldyBtQyh7aGVhZGVyczpmLHN0YXR1czpyLnN0YXR1cyxzdGF0dXNUZXh0OmgsdXJsOm19KSxzfSxsPSgpPT57bGV0e2hlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOkN9PWEoKSxfPW51bGw7MjA0IT09ZiYmKF89dHlwZW9mIHIucmVzcG9uc2U+InUiP3IucmVzcG9uc2VUZXh0OnIucmVzcG9uc2UpLDA9PT1mJiYoZj1fPzIwMDowKTtsZXQgeT1mPj0yMDAmJmY8MzAwO2lmKCJqc29uIj09PWUucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIF8pe2xldCBJPV87Xz1fLnJlcGxhY2UoTEVlLCIiKTt0cnl7Xz0iIiE9PV8/SlNPTi5wYXJzZShfKTpudWxsfWNhdGNoKEEpe189SSx5JiYoeT0hMSxfPXtlcnJvcjpBLHRleHQ6X30pfX15PyhpLm5leHQobmV3IGVfKHtib2R5Ol8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpLGkuY29tcGxldGUoKSk6aS5lcnJvcihuZXcgbWQoe2Vycm9yOl8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpfSxjPWg9PntsZXR7dXJsOmZ9PWEoKSxtPW5ldyBtZCh7ZXJyb3I6aCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6Znx8dm9pZCAwfSk7aS5lcnJvcihtKX0sdT0hMSxkPWg9Pnt1fHwoaS5uZXh0KGEoKSksdT0hMCk7bGV0IGY9e3R5cGU6SXAuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6aC5sb2FkZWR9O2gubGVuZ3RoQ29tcHV0YWJsZSYmKGYudG90YWw9aC50b3RhbCksInRleHQiPT09ZS5yZXNwb25zZVR5cGUmJiEhci5yZXNwb25zZVRleHQmJihmLnBhcnRpYWxUZXh0PXIucmVzcG9uc2VUZXh0KSxpLm5leHQoZil9LHA9aD0+e2xldCBmPXt0eXBlOklwLlVwbG9hZFByb2dyZXNzLGxvYWRlZDpoLmxvYWRlZH07aC5sZW5ndGhDb21wdXRhYmxlJiYoZi50b3RhbD1oLnRvdGFsKSxpLm5leHQoZil9O3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksci5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnNlbmQobyksaS5uZXh0KHt0eXBlOklwLlNlbnR9KSwoKT0+e3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCksci5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjKSxlLnJlcG9ydFByb2dyZXNzJiYoci5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZCksbnVsbCE9PW8mJnIudXBsb2FkJiZyLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIucmVhZHlTdGF0ZSE9PXIuRE9ORSYmci5hYm9ydCgpfX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJEI9bmV3IHNlKCJYU1JGX0NPT0tJRV9OQU1FIiksZVY9bmV3IHNlKCJYU1JGX0hFQURFUl9OQU1FIiksaUQ9Y2xhc3N7fSxWRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kb2M9ZSx0aGlzLnBsYXRmb3JtPWksdGhpcy5jb29raWVOYW1lPXIsdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gZSE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPXVUKGUsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9ZSksdGhpcy5sYXN0VG9rZW59fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIoaWQpLFIoJEIpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRQj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy50b2tlblNlcnZpY2U9ZSx0aGlzLmhlYWRlck5hbWU9aX1pbnRlcmNlcHQoZSxpKXtsZXQgcj1lLnVybC50b0xvd2VyQ2FzZSgpO2lmKCJHRVQiPT09ZS5tZXRob2R8fCJIRUFEIj09PWUubWV0aG9kfHxyLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8ci5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBpLmhhbmRsZShlKTtsZXQgbz10aGlzLnRva2VuU2VydmljZS5nZXRUb2tlbigpO3JldHVybiBudWxsIT09byYmIWUuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKSYmKGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxvKX0pKSxpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihpRCksUihlVikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhFZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5iYWNrZW5kPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY2hhaW49bnVsbH1oYW5kbGUoZSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2xldCBpPXRoaXMuaW5qZWN0b3IuZ2V0KHJELFtdKTt0aGlzLmNoYWluPWkucmVkdWNlUmlnaHQoKHIsbyk9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubmV4dD10LHRoaXMuaW50ZXJjZXB0b3I9ZX1oYW5kbGUodCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX19KHIsbyksdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIobkQpLFIoem4pKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVRWU9KCgpPT57Y2xhc3MgbntzdGF0aWMgZGlzYWJsZSgpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UUIsdXNlQ2xhc3M6TkVlfV19fXN0YXRpYyB3aXRoT3B0aW9ucyhlPXt9KXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTokQix1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTplVix1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1FCLHtwcm92aWRlOnJELHVzZUV4aXN0aW5nOlFCLG11bHRpOiEwfSx7cHJvdmlkZTppRCx1c2VDbGFzczpWRWV9LHtwcm92aWRlOiRCLHVzZVZhbHVlOiJYU1JGLVRPS0VOIn0se3Byb3ZpZGU6ZVYsdXNlVmFsdWU6IlgtWFNSRi1UT0tFTiJ9XX0pLG59KSgpLCRRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0dmLHtwcm92aWRlOnRELHVzZUNsYXNzOkhFZX0sSlEse3Byb3ZpZGU6bkQsdXNlRXhpc3Rpbmc6SlF9XSxpbXBvcnRzOltVRWUud2l0aE9wdGlvbnMoe2Nvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLGhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiJ9KV19KSxufSkoKSxvRD0iZmVhdHVyZSIsdF89UHIob0QpLFBwPVkodF8sbj0+bi5pc0ZlYXR1cmVGbGFnc0xvYWRlZCksQm89WSh0XyxuPT4oey4uLm4uZGVmYXVsdEZsYWdzLC4uLm4uZmxhZ092ZXJyaWRlc30pKSx0Sz1ZKHRfLG49Pm4uZGVmYXVsdEZsYWdzKSxnQz1ZKHRfLG49Pm4uZmxhZ092ZXJyaWRlc3x8e30pLFdmPVkodF8sbj0+bi5tZXRhZGF0YSksbl89WSh0XyxuPT57bGV0IHQ9e307Zm9yKGxldCBlIGluIG4uZmxhZ092ZXJyaWRlcyl7bGV0IGk9bi5tZXRhZGF0YVtlXTtpJiZpLnF1ZXJ5UGFyYW1PdmVycmlkZSYmaS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbiYmKHRbZV09bi5mbGFnT3ZlcnJpZGVzW2VdKX1yZXR1cm4gdH0pLG5LPVkoQm8sbj0+bi5pc0F1dG9EYXJrTW9kZUFsbG93ZWQpLG11PVkoQm8sbj0+bnVsbCE9PW4uZW5hYmxlRGFya01vZGVPdmVycmlkZT9uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6bi5kZWZhdWx0RW5hYmxlRGFya01vZGUpLHNEPVkoQm8sbj0+bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlKSxpSz1ZKEJvLG49Pm4uZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnMpLHJLPVkoQm8sbj0+bi5pbkNvbGFiKSxhRD1ZKEJvLG49Pm4ubWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQpLG9LPVkoQm8sbj0+bi5lbmFibGVkTGlua2VkVGltZSksc0s9WShCbyxuPT5uLmZvcmNlU3ZnKSxhSz1ZKEJvLG49Pm4uZW5hYmxlZFNjYWxhckRhdGFUYWJsZSksbEs9WShCbyxuPT52b2lkIDAhPT1uLnNob3dGbGFncyksY0s9WShCbyxuPT5uLmFsbG93UmFuZ2VTZWxlY3Rpb24pLHVLPVkoQm8sbj0+bi5lbmFibGVkUHJvc3BlY3RpdmVGb2IpLGxEPVkoQm8sbj0+bi5lbmFibGVTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uKSxkSz1ZKEJvLG49Pm4uZW5hYmxlSHBhcmFtc0luVGltZVNlcmllcyk7ZnVuY3Rpb24gakVlKG4sdCl7aWYoIW4pcmV0dXJuO2xldCBlPW4gaW5zdGFuY2VvZiBGb3JtRGF0YT9mdW5jdGlvbihuKXtsZXQgdD17fTtmb3IobGV0W2UsaV1vZiBuLmVudHJpZXMoKSl0W2VdPWk7cmV0dXJuIHR9KG4pOm47cmV0dXJuIHQ/e1t0XTpKU09OLnN0cmluZ2lmeShlKX06ZX1mdW5jdGlvbiB0VihuKXtsZXQgdD1uLmhlYWRlcnN8fG5ldyBWYTtyZXR1cm4gdD10LmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSx7Li4ubixoZWFkZXJzOnR9fXZhciBndT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFwcFJvb3RQcm92aWRlcj1lLHRoaXMuaHR0cD1pLHRoaXMuc3RvcmU9cn1yZXNvbHZlQXBwUm9vdChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCIvIik/dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKTplfWdldChlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSl9cG9zdChlLGkscj17fSxvKXtyZXR1cm4gcj10VihyKSx0aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShzPT5Cb29sZWFuKHMpKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChySykpLF9uKChbLHNdKT0+e2xldCBhPXRoaXMucmVzb2x2ZUFwcFJvb3QoZSk7cmV0dXJuIHM/dGhpcy5odHRwLmdldChhLHtoZWFkZXJzOnIuaGVhZGVycz8/e30scGFyYW1zOmpFZShpLG8pfSk6dGhpcy5odHRwLnBvc3QoYSxpLHIpfSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5yZXNvbHZlQXBwUm9vdChlKSxpLHRWKHIpKX1kZWxldGUoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLnJlc29sdmVBcHBSb290KGUpLHRWKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih6ZiksUihHZiksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGlfPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2d1XSxpbXBvcnRzOlskUSxRMF19KSxufSkoKSxDbD0oKCk9PihmdW5jdGlvbihuKXtuLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIn0oQ2x8fChDbD17fSkpLENsKSkoKSxwSz1uZXcgc2UoIlRlbnNvckJvYXJkIGJyYW5kIG5hbWUiKSxmbz0oKCk9PihmdW5jdGlvbihuKXtuLlNURVA9InN0ZXAiLG4uV0FMTF9USU1FPSJ3YWxsX3RpbWUiLG4uUkVMQVRJVkU9InJlbGF0aXZlIn0oZm98fChmbz17fSkpLGZvKSkoKSxPcj0oKCk9PihmdW5jdGlvbihuKXtuLk9GRlNFVD0ib2Zmc2V0IixuLk9WRVJMQVk9Im92ZXJsYXkifShPcnx8KE9yPXt9KSksT3IpKSgpO2Z1bmN0aW9uIGhLKG4pe2xldCB0PUNsLlVOS05PV047cmV0dXJuIG4gaW5zdGFuY2VvZiBtZCYmKDQwND09PW4uc3RhdHVzJiYodD1DbC5OT1RfRk9VTkQpLDQwMz09PW4uc3RhdHVzJiYodD1DbC5QRVJNSVNTSU9OX0RFTklFRCkpLEdsKG5ldyBfQyh0KSl9dmFyIF9DPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFpbHVyZUNvZGU9dH19LHVEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5odHRwPWUsdGhpcy50ZkJhY2tlbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9ZmV0Y2hQbHVnaW5zTGlzdGluZyhlKXtsZXQgaT1mdW5jdGlvbihuKXtpZighbi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0IGUgb2Ygbil0LmFwcGVuZCgiZXhwZXJpbWVudGFsUGx1Z2luIixlKTtyZXR1cm4gdH0oZSkscj1pP2BkYXRhL3BsdWdpbnNfbGlzdGluZz8ke2kudG9TdHJpbmcoKX1gOiJkYXRhL3BsdWdpbnNfbGlzdGluZyI7cmV0dXJuIHRoaXMuaHR0cC5nZXQocikucGlwZShDbyhoSykpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4geG8oW3RoaXMuaHR0cC5nZXQoImRhdGEvZW52aXJvbm1lbnQiKSxsbyh0aGlzLnRmQmFja2VuZC5lbnZpcm9ubWVudFN0b3JlLnJlZnJlc2goKSldKS5waXBlKEIoKFtyXSk9PnIpLENvKGhLKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoZ3UpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmSz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt1RF0saW1wb3J0czpbaV9dfSksbn0pKCksRWU9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLG5bbi5MT0FERUQ9MV09IkxPQURFRCIsbltuLkxPQURJTkc9Ml09IkxPQURJTkciLG5bbi5GQUlMRUQ9M109IkZBSUxFRCJ9KEVlfHwoRWU9e30pKSxFZSkpKCksX3U9d2UoIltDb3JlXSBQbHVnaW4gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGREPXdlKCJbQ29yZV0gUGx1Z2luIFVybCBIYXNoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtSz13ZSgiW0NvcmVdIExvYWRlZCIpLHdsPXdlKCJbQ29yZV0gVXNlciBUcmlnZ2VyZWQgUmVsb2FkIiksSGE9d2UoIltDb3JlXSBBdXRvIFJlbG9hZCIpLHBEPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBSZXF1ZXN0ZWQiKSxxZj13ZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZDPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggUmVxdWVzdGVkIiksZkQ9d2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFN1Y2Nlc3NmdWwiKSxtRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggRmFpbGVkIiksZ0Q9d2UoIltDb3JlXSBFbnZpcm9ubWVudCBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ0s9d2UoIltDb3JlXSBSdW4gU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfSz13ZSgiW0NvcmVdIFJ1biBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscl89d2UoIltDb3JlXSBTaWRlIEJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gWWYobix0LGUpe2xldCBpPU9iamVjdC5rZXlzKG4pLHI9ey4uLm4sLi4udCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnt9fTtyZXR1cm57aW5pdGlhbFN0YXRlOnIscmVkdWNlcnM6d3IocixTZSh4bCwoYSx7YmVmb3JlOmwsYWZ0ZXI6YyxiZWZvcmVOYW1lc3BhY2VJZDp1LGFmdGVyTmFtZXNwYWNlSWQ6ZH0pPT57bGV0IHA9YTtyZXR1cm4gdSE9PWQmJihwPWZ1bmN0aW9uKGEsbCxjKXtsZXQgdT17Li4uYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlfTtpZihsKXtsZXQgcD17fTtmb3IobGV0IGggb2YgaSlwW2hdPWFbaF07dT17Li4udSxbbF06cH19bGV0IGQ9e307cmV0dXJuIGEucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZT8uW2NdP2Q9YS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlW2NdOmwmJihkPW4pLHsuLi5hLC4uLmQscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTp1fX0oYSx1LGQpKSxlJiYocD1lKHAsbCxjKSkscH0pKX19ZnVuY3Rpb24gWGYoLi4ubil7cmV0dXJuKHQsZSk9PntsZXQgaT10O2ZvcihsZXQgciBvZiBuKWk9cihpLGUpO3JldHVybiBpfX12YXIgeUM9e2FjdGl2ZVBsdWdpbjpudWxsLHBsdWdpbnM6e30sY29yZURhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsLGZhaWx1cmVDb2RlOm51bGx9LGVudmlyb25tZW50OntkYXRhX2xvY2F0aW9uOiIiLHdpbmRvd190aXRsZToiIn0scG9seW1lclJ1bnNMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBvbHltZXJJbnRlcm9wUnVuczpbXSxwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0LHNpZGVCYXJXaWR0aEluUGVyY2VudDoyMH0sWUVlPXdyKHlDLFNlKF91LGRELChuLHtwbHVnaW46dH0pPT4oey4uLm4sYWN0aXZlUGx1Z2luOnR9KSksU2UocEQsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOkVlLkxPQURJTkd9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHZDLChuLHtmYWlsdXJlQ29kZTp0fSk9Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkZBSUxFRCxmYWlsdXJlQ29kZTp0fX0pKSxTZShxZiwobix7cGx1Z2luczp0fSk9PntsZXQgZT1PYmplY3Qua2V5cyh0KS5maW5kKHM9PnRbc10uZW5hYmxlZCl8fG51bGwsaT1uLmFjdGl2ZVBsdWdpbnx8ZSxyPURhdGUubm93KCksbz1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBvbHltZXJSdW5zTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BREVEJiYobz17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyfSksey4uLm4sYWN0aXZlUGx1Z2luOmksY29yZURhdGFMb2FkU3RhdGU6byxwbHVnaW5zOnQscGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6cixmYWlsdXJlQ29kZTpudWxsfX19KSxTZShoRCxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR30scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR319KSksU2UoZkQsbj0+e2xldCB0PURhdGUubm93KCksZT1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBsdWdpbnNMaXN0TG9hZGVkLnN0YXRlPT09RWUuTE9BREVEJiYoZT17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5Nczp0fSksey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ZSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9fX0pLFNlKG1ELG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoZ0QsKG4se2Vudmlyb25tZW50OnR9KT0+KHsuLi5uLGVudmlyb25tZW50OnR9KSksU2UoX0ssKG4se3J1bnM6dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5zOnR9KSksU2UoZ0ssKG4se25leHRTZWxlY3Rpb246dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldCh0KX0pKSxTZShyXywobix7d2lkdGhJblBlcmNlbnQ6dH0pPT4oey4uLm4sc2lkZUJhcldpZHRoSW5QZXJjZW50Ok1hdGgubWluKE1hdGgubWF4KDAsdCksMTAwKX0pKSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXsuLi5ufSxpPXQuc2lkZUJhcldpZHRoSW5QZXJjZW50O3JldHVybiJudW1iZXIiPT10eXBlb2YgaSYmaT49MCYmaTw9MTAwJiYoZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9aSksZX0pKSx7cmVkdWNlcnM6WEVlfT1ZZih5Qyx7fSk7ZnVuY3Rpb24gdksobix0KXtyZXR1cm4gWGYoWUVlLFhFZSkobix0KX12YXIgUnA9UHIoImNvcmUiKSx5RD1ZKFJwLG49Pm4ucGx1Z2luc0xpc3RMb2FkZWQpLHlLPVkoUnAsbj0+bi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSksYks9WShScCxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLnN0YXRlKSxvXz1ZKFJwLG49Pm4uY29yZURhdGFMb2FkU3RhdGUubGFzdExvYWRlZFRpbWVJbk1zKSxkcz1ZKFJwLG49Pm4uYWN0aXZlUGx1Z2luKSxzXz1ZKFJwLG49Pm4ucGx1Z2lucyksYkQ9WShScCxuPT5uLmVudmlyb25tZW50KSx4RD1ZKFJwLG49Pm4uc2lkZUJhcldpZHRoSW5QZXJjZW50KSx4Sz1uZXcgU2V0KFtmaS5DT01QQVJFX0VYUEVSSU1FTlQsZmkuRVhQRVJJTUVOVCxmaS5OT1RfU0VUXSksQ0s9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLndlYmFwcERhdGFTb3VyY2U9cix0aGlzLnRmQmFja2VuZD17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfSx0aGlzLm9uRGFzaGJvYXJkTG9hZCQ9dW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKG1LLHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKEhhLHdsKSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpKSxIZSgoWyxvXSk9PnhLLmhhcyhvKSksYmcoMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPVVyKCgpPT57bGV0IG89dGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoeUQpLHRoaXMuc3RvcmUuc2VsZWN0KGlLKSksSGUoKFsse3N0YXRlOmF9XSk9PmEhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChwRCgpKSksX24oKFssLGFdKT0+ZnVuY3Rpb24oLi4ubil7bGV0IHQ9SGMobiksZT1GUyhuKTtyZXR1cm4gZS5sZW5ndGg/bmV3IFF0KGk9PntsZXQgcj1lLm1hcCgoKT0+W10pLG89ZS5tYXAoKCk9PiExKTtpLmFkZCgoKT0+e3I9bz1udWxsfSk7Zm9yKGxldCBzPTA7IWkuY2xvc2VkJiZzPGUubGVuZ3RoO3MrKylhaShlW3NdKS5zdWJzY3JpYmUoTHQoaSxhPT57aWYocltzXS5wdXNoKGEpLHIuZXZlcnkobD0+bC5sZW5ndGgpKXtsZXQgbD1yLm1hcChjPT5jLnNoaWZ0KCkpO2kubmV4dCh0P3QoLi4ubCk6bCksci5zb21lKChjLHUpPT4hYy5sZW5ndGgmJm9bdV0pJiZpLmNvbXBsZXRlKCl9fSwoKT0+e29bc109ITAsIXJbc10ubGVuZ3RoJiZpLmNvbXBsZXRlKCl9KSk7cmV0dXJuKCk9PntyPW89bnVsbH19KTphb30odGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoUGx1Z2luc0xpc3RpbmcoYSksdGhpcy5mZXRjaEVudmlyb25tZW50KCkpLnBpcGUoQigoW2xdKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gocWYoe3BsdWdpbnM6bH0pKX0pLENvKGw9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHZDKGwgaW5zdGFuY2VvZiBfQz97ZmFpbHVyZUNvZGU6bC5mYWlsdXJlQ29kZX06e2ZhaWx1cmVDb2RlOkNsLlVOS05PV059KSksYW8pKSkpKTtyZXR1cm4gdW4obyx0aGlzLm9uRGFzaGJvYXJkTG9hZCQucGlwZShCKChbLGFdKT0+YSksdmkoYT0+YSE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9qdChbXSk6dGhpcy5zdG9yZS5zZWxlY3QoaHUpLnBpcGUoZGkoKGwsYyk9PntsZXQgdT1PYmplY3QuZW50cmllcyhsKSxkPW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoYykpO2lmKHUubGVuZ3RoIT09ZC5zaXplKXJldHVybiExO2ZvcihsZXRbcCxoXW9mIHUpaWYoIWQuZ2V0KHApfHxkLmdldChwKS5hbGlhc1RleHQhPT1oLmFsaWFzVGV4dHx8ZC5nZXQocCkuYWxpYXNOdW1iZXIhPT1oLmFsaWFzTnVtYmVyKXJldHVybiExO3JldHVybiEwfSksbmwoMCksYmcoNTAwLHZvaWQgMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pKSksR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuc3RvcmUuc2VsZWN0KHlLKSksSGUoKFssYSxsXSk9PnhLLmhhcyhhKSYmbC5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChoRCgpKX0pLHZpKCgpPT50aGlzLnJlZnJlc2hQb2x5bWVyUnVucygpKSxOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goZkQoKSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2gobUQoKSksYW8pKSkpfSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmRpc3BhdGNoQ2hhbmdlUGx1Z2luJD1VcigoKT0+dW4odGhpcy5vbkRhc2hib2FyZExvYWQkLHRoaXMuYWN0aW9ucyQucGlwZShUaShxZikpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksQigoWyxvXSk9Pm8pLGRpKCksSGUobz0+bnVsbCE9PW8pLEh0KDEpLE50KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKF91KHtwbHVnaW46b30pKX0pKSx7ZGlzcGF0Y2g6ITF9KX1yZWZyZXNoUG9seW1lclJ1bnMoKXtyZXR1cm4gbG8odGhpcy50ZkJhY2tlbmQucmVmLnJ1bnNTdG9yZS5yZWZyZXNoKCkpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoRW52aXJvbm1lbnQoKS5waXBlKE50KGU9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGdEKHtlbnZpcm9ubWVudDplfSkpfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksblY9bmV3IHNlKCJDb3JlIEZlYXR1cmUgQ29uZmlnIik7ZnVuY3Rpb24gd0sobil7cmV0dXJue2luaXRpYWxTdGF0ZTp7Li4ueUMsYWN0aXZlUGx1Z2luOm4uZ2V0UGx1Z2luSWQoKXx8bnVsbH19fWZ1bmN0aW9uIFpFZSgpe3JldHVybiBZKHhELG49Pih7c2lkZUJhcldpZHRoSW5QZXJjZW50Om59KSl9dmFyIE1sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOm5WLGRlcHM6W0FwXSx1c2VGYWN0b3J5OndLfV0saW1wb3J0czpbTG8uZm9yRmVhdHVyZShbQ0tdKSxSci5mb3JGZWF0dXJlKCJjb3JlIix2SyxuViksZkssbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhaRWUpXX0pLG59KSgpLE1LPW5ldyBzZSgiW0FsZXJ0XSBBY3Rpb24tVG8tQWxlcnQgUHJvdmlkZXIiKSx2dT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGxldCBpIG9mIGV8fFtdKWZvcihsZXQgciBvZiBpKXtpZih0aGlzLnByb3ZpZGVycy5oYXMoci5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHtyLmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgYWxlcnRzLiBNdWx0aXBsZSBhbGVydHMgZm9yIHRoZSBzYW1lIGFjdGlvbiBpcyBub3QgYWxsb3dlZC5gKTt0aGlzLnByb3ZpZGVycy5zZXQoci5hY3Rpb25DcmVhdG9yLnR5cGUsci5hbGVydEZyb21BY3Rpb24pfX1nZXRBbGVydEZyb21BY3Rpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlckFsZXJ0QWN0aW9ucyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOk1LLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihNSyw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLENEPXdlKCJbUnVuc10gRmV0Y2ggUnVucyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPcD13ZSgiW1J1bnNdIEZldGNoIFJ1bnMgU3VjY2VlZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYV89d2UoIltSdW5zXSBGZXRjaCBSdW5zIEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHdEPXdlKCJbUnVuc10gUnVuIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTUQ9d2UoIltSdW5zXSBTaW5nbGUgUnVuIFNlbGVjdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU0Q9d2UoIltSdW5zXSBSdW4gUGFnZSBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVEPXdlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFBhZ2luYXRpb24gT3B0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxURD13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBTb3J0IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxiQz13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBSZWdleCBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEREPXdlKCJbUnVuc10gUnVuIENvbG9yIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRD13ZSgiW1J1bnNdIFJ1biBUYWJsZSBTaG93biIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGxfPXdlKCJbUnVuc10gUnVuIEdyb3VwIEJ5IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrcD0oKCk9PihmdW5jdGlvbihuKXtuLlNUQVRVU19VTktOT1dOPSJTVEFUVVNfVU5LTk9XTiIsbi5TVEFUVVNfU1VDQ0VTUz0iU1RBVFVTX1NVQ0NFU1MiLG4uU1RBVFVTX0ZBSUxVUkU9IlNUQVRVU19GQUlMVVJFIixuLlNUQVRVU19SVU5OSU5HPSJTVEFUVVNfUlVOTklORyJ9KGtwfHwoa3A9e30pKSxrcCkpKCksS249KCgpPT4oZnVuY3Rpb24obil7bltuLkRJU0NSRVRFPTBdPSJESVNDUkVURSIsbltuLklOVEVSVkFMPTFdPSJJTlRFUlZBTCJ9KEtufHwoS249e30pKSxLbikpKCksSUQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUWY9e307U08oUWYse2hwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9Pm9WLGhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9PnNWLGhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkOigpPT5hVn0pO3ZhciBvVj13ZSgiW0hwYXJhbXNdIEhwYXJhbXMgRGlzY3JldGUgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1Y9d2UoIltIcGFyYW1zXSBIcGFyYW1zIEludGVydmFsIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFWPXdlKCJbSHBhcmFtc10gSHBhcmFtcyBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBLZihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLm5dLnNvcnQoKSl9ZnVuY3Rpb24geEMobil7bGV0IHQ9bmV3IE1hcCxlPW5ldyBNYXAsaT1uZXcgTWFwO2ZvcihsZXQgciBvZiBuKWZvcihsZXRbbyxzXW9mIHIpaWYocy50eXBlPT09S24uRElTQ1JFVEUpe2xldHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfT1lLmdldChvKXx8e3Bvc3NpYmxlVmFsdWVzOm5ldyBTZXQsdmFsdWVzOm5ldyBTZXR9O2ZvcihsZXQgYyBvZiBzLmZpbHRlclZhbHVlcylsLmFkZChjKTtmb3IobGV0IGMgb2Ygcy5wb3NzaWJsZVZhbHVlcylhLmFkZChjKTtlLnNldChvLHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfSl9ZWxzZXtsZXQgYT1pLmdldChvKTtpLnNldChvLHtmaWx0ZXJMb3dlclZhbHVlOk1hdGgubWluKHMuZmlsdGVyTG93ZXJWYWx1ZSxhPy5maWx0ZXJMb3dlclZhbHVlPz8xLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgocy5maWx0ZXJVcHBlclZhbHVlLGE/LmZpbHRlclVwcGVyVmFsdWU/Py0xLzApLG1pblZhbHVlOk1hdGgubWluKHMubWluVmFsdWUsYT8ubWluVmFsdWU/PzEvMCksbWF4VmFsdWU6TWF0aC5tYXgocy5tYXhWYWx1ZSxhPy5tYXhWYWx1ZT8/LTEvMCl9KX1mb3IobGV0W3Ise3ZhbHVlczpvLHBvc3NpYmxlVmFsdWVzOnN9XW9mIGUpdC5zZXQocix7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5zXSxmaWx0ZXJWYWx1ZXM6Wy4uLm9dfSk7Zm9yKGxldFtyLHttaW5WYWx1ZTpvLG1heFZhbHVlOnMsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6bH1db2YgaSl7aWYodC5oYXMocikpe2xldCBjPXQuZ2V0KHIpO2lmKGMudHlwZT09PUtuLkRJU0NSRVRFJiZjLnBvc3NpYmxlVmFsdWVzLnNvbWUodT0+dSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENhbm5vdCBjb21iaW5lIGhwYXJhbSwgJHtyfSwgYXMgaXQgaXMgb2YgbWl4ZWQgdHlwZXMuYCl9dC5zZXQocix7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOm8sbWF4VmFsdWU6cyxmaWx0ZXJMb3dlclZhbHVlOmEsZmlsdGVyVXBwZXJWYWx1ZTpsfSl9cmV0dXJuIHR9ZnVuY3Rpb24gUEQobil7bGV0IHQ9bmV3IE1hcDtmb3IobGV0IGUgb2Ygbilmb3IobGV0W2kscl1vZiBlKXtsZXQgbz10LmdldChpKTt0LnNldChpLHt0eXBlOktuLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsLi4ubyxtaW5WYWx1ZTpNYXRoLm1pbihyLm1pblZhbHVlLG8/Lm1pblZhbHVlPz8xLzApLG1heFZhbHVlOk1hdGgubWF4KHIubWF4VmFsdWUsbz8ubWF4VmFsdWU/Py0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4oci5maWx0ZXJMb3dlclZhbHVlLG8/LmZpbHRlckxvd2VyVmFsdWU/PzEvMCksZmlsdGVyVXBwZXJWYWx1ZTpNYXRoLm1heChyLmZpbHRlclVwcGVyVmFsdWUsbz8uZmlsdGVyVXBwZXJWYWx1ZT8/LTEvMCl9KX1yZXR1cm4gdH12YXIgaTFlPXdyKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxTZShvViwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309dCxzPUtmKGUpLGE9bi5maWx0ZXJzW3NdPz97aHBhcmFtczpuZXcgTWFwfSxsPWEuaHBhcmFtcy5nZXQoaSk7aWYobCYmbC50eXBlIT09S24uRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArS25bbC50eXBlXSk7bGV0IGM9eEMoZS5maWx0ZXIoaD0+Qm9vbGVhbihuLnNwZWNzW2hdKSkubWFwKGg9Pm4uc3BlY3NbaF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtpZihjLnR5cGUhPT1Lbi5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2xldCB1PW5ldyBTZXQoYy5wb3NzaWJsZVZhbHVlcyksZD1bLi4ucl0uZmlsdGVyKGg9PiF1LmhhcyhoKSk7aWYoZC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBOZXcgZmlsdGVyIGZvciAke2l9IGhhcyBtb3JlIHRoYW4gb25lIHZhbHVlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHNwZWMuIEJhZCB2YWx1ZXM6ICR7ZC5qb2luKCIsICIpfWApO2xldCBwPW5ldyBNYXAoYS5ocGFyYW1zKTtyZXR1cm4gcC5zZXQoaSx7Li4ubCx0eXBlOktuLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6byxwb3NzaWJsZVZhbHVlczpbLi4udV0sZmlsdGVyVmFsdWVzOnJ9KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW3NdOnsuLi5hLGhwYXJhbXM6cH19fX0pLFNlKHNWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxocGFyYW1OYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1LZihlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9bC5ocGFyYW1zLmdldChpKTtpZihjJiZjLnR5cGUhPT1Lbi5JTlRFUlZBTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTmV3IGludGVydmFsIGZpbHRlciBvZiAke2l9IGNvbmZsaWN0cyBleGlzdGluZyBmaWx0ZXIgb2YgYCtLbltjLnR5cGVdKTtsZXQgdT14QyhlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGhwYXJhLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYodS50eXBlIT09S24uSU5URVJWQUwpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgaW50ZXJ2YWwgdHlwZS5gKTtsZXQgZD1uZXcgTWFwKGwuaHBhcmFtcyk7cmV0dXJuIGQuc2V0KGksey4uLmMsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6dS5taW5WYWx1ZSxtYXhWYWx1ZTp1Lm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLGhwYXJhbXM6ZH19fX0pLFNlKGFWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxtZXRyaWNUYWc6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309dCxhPUtmKGUpLGw9bi5maWx0ZXJzW2FdPz97bWV0cmljczpuZXcgTWFwLGhwYXJhbXM6bmV3IE1hcH0sYz1QRChlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIWMpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IG1ldHJpYywgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2xldCB1PWwubWV0cmljcy5nZXQoaSksZD1uZXcgTWFwKGwubWV0cmljcyk7cmV0dXJuIGQuc2V0KGksey4uLnUsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6Yy5taW5WYWx1ZSxtYXhWYWx1ZTpjLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLG1ldHJpY3M6ZH19fX0pLFNlKE9wLChuLHQpPT57aWYoMD09PU9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4uc3BlY3N9LGk9bmV3IE1hcCxyPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0IHM9bmV3IE1hcCxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx7cnVuczp1LG1ldGFkYXRhOmR9PXQubmV3UnVuc0FuZE1ldGFkYXRhW29dO2ZvcihsZXQgcCBvZiB1KXtsZXQgaD1kLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbcC5pZF07aWYoaClmb3IobGV0IGYgb2YgaC5tZXRyaWNzKXtsZXQgbT1pLmdldChmLnRhZyk7aS5zZXQoZi50YWcse21pbjptP01hdGgubWluKG0ubWluLGYudmFsdWUpOmYudmFsdWUsbWF4Om0/TWF0aC5tYXgobS5tYXgsZi52YWx1ZSk6Zi52YWx1ZX0pfX1mb3IobGV0e25hbWU6cCxkb21haW46aH1vZiBkLmhwYXJhbVNwZWNzKWlmKGgudHlwZT09PUtuLkRJU0NSRVRFKXtsZXQgZj1sLmdldChwKXx8bmV3IFNldDtmb3IobGV0IG0gb2YgaC52YWx1ZXMpZi5hZGQobSk7bC5zZXQocCxmKX1lbHNle2xldCBmPWMuZ2V0KHApO2Muc2V0KHAse21pblZhbHVlOmY/TWF0aC5taW4oaC5taW5WYWx1ZSxmLm1pblZhbHVlKTpoLm1pblZhbHVlLG1heFZhbHVlOmY/TWF0aC5tYXgoaC5tYXhWYWx1ZSxmLm1heFZhbHVlKTpoLm1heFZhbHVlfSl9Zm9yKGxldCBwIG9mIGQubWV0cmljU3BlY3Mpci5hZGQocC50YWcpO2ZvcihsZXRbcCxoXW9mIGwpcy5zZXQocCx7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5oXSxmaWx0ZXJWYWx1ZXM6Wy4uLmhdfSk7Zm9yKGxldFtwLHttaW5WYWx1ZTpoLG1heFZhbHVlOmZ9XW9mIGMpcy5zZXQocCx7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOmgsbWF4VmFsdWU6ZixmaWx0ZXJMb3dlclZhbHVlOmgsZmlsdGVyVXBwZXJWYWx1ZTpmfSk7Zm9yKGxldCBwIG9mIHIpe2xldCBoPWkuZ2V0KHApLGY9aD8ubWluPz8wLG09aD8ubWF4Pz8wO2Euc2V0KHAse3R5cGU6S24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpmLG1heFZhbHVlOm0sZmlsdGVyTG93ZXJWYWx1ZTpmLGZpbHRlclVwcGVyVmFsdWU6bX0pfWVbb109e2hwYXJhbTp7Li4uZVtvXT8uaHBhcmFtLHNwZWNzOmQuaHBhcmFtU3BlY3MsZGVmYXVsdEZpbHRlcnM6c30sbWV0cmljOnsuLi5lW29dPy5tZXRyaWMsc3BlY3M6ZC5tZXRyaWNTcGVjcyxkZWZhdWx0RmlsdGVyczphfX19cmV0dXJuey4uLm4sc3BlY3M6ZX19KSk7ZnVuY3Rpb24gVEsobix0KXtyZXR1cm4gaTFlKG4sdCl9dmFyIFJEPSJocGFyYW1zIixESz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShSRCxUSyldfSksbn0pKCksT0Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0RLXX0pLG59KSgpLEFLPSJkYXRhL3BsdWdpbi9ocGFyYW1zIjtmdW5jdGlvbiByMWUobix0KXtyZXR1cm5gJHt0fS8ke259YH1mdW5jdGlvbiBvMWUobil7bGV0IHQ7cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIil9KG4pP3t0eXBlOktuLkRJU0NSRVRFLHZhbHVlczpuLmRvbWFpbkRpc2NyZXRlfTpmdW5jdGlvbihuKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluSW50ZXJ2YWwiKX0obik/ey4uLm4uZG9tYWluSW50ZXJ2YWwsdHlwZTpLbi5JTlRFUlZBTH06e3R5cGU6S24uSU5URVJWQUwsbWluVmFsdWU6LTEvMCxtYXhWYWx1ZToxLzB9LHtkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGRpc3BsYXlOYW1lOm4uZGlzcGxheU5hbWUsbmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsZG9tYWluOnR9fWZ1bmN0aW9uIHMxZShuKXtsZXR7bmFtZTp0LC4uLmV9PW47cmV0dXJuey4uLmUsdGFnOnQudGFnfX12YXIgSUs9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoImRhdGEvcnVucyIpLnBpcGUoQihpPT5pLm1hcChyPT4oe2lkOnIxZShyLGUpLG5hbWU6cixzdGFydFRpbWU6MH0pKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKGUpe3JldHVybiB0aGlzLmh0dHAucG9zdChgL2V4cGVyaW1lbnQvJHtlfS8ke0FLfS9leHBlcmltZW50YCx7ZXhwZXJpbWVudE5hbWU6ZX0se30sInJlcXVlc3QiKS5waXBlKEIocj0+e2xldCBvPVtdO2ZvcihsZXQgYSBvZiByLmhwYXJhbUluZm9zKW8ucHVzaCh7aHBhcmFtOmEubmFtZX0pO2ZvcihsZXQgYSBvZiByLm1ldHJpY0luZm9zKW8ucHVzaCh7bWV0cmljOmEubmFtZX0pO3JldHVybntleHBlcmltZW50SHBhcmFtc0luZm86cixsaXN0U2Vzc2lvblJlcXVlc3RQYXJhbXM6e2V4cGVyaW1lbnROYW1lOmUsYWxsb3dlZFN0YXR1c2VzOltrcC5TVEFUVVNfRkFJTFVSRSxrcC5TVEFUVVNfUlVOTklORyxrcC5TVEFUVVNfU1VDQ0VTUyxrcC5TVEFUVVNfVU5LTk9XTl0sY29sUGFyYW1zOm8sc3RhcnRJbmRleDowLHNsaWNlU2l6ZToxZTZ9fX0pLF9uKCh7ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsbGlzdFNlc3Npb25SZXF1ZXN0UGFyYW1zOm99KT0+dGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHtBS30vc2Vzc2lvbl9ncm91cHNgLG8se30sInJlcXVlc3QiKS5waXBlKEIocz0+KHtleHBlcmltZW50SHBhcmFtc0luZm86cixzZXNzaW9uR3JvdXBzTGlzdDpzfSkpKSksQigoe2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLHNlc3Npb25Hcm91cHNMaXN0Om99KT0+e2xldCBzPXt9O2ZvcihsZXQgYSBvZiBvLnNlc3Npb25Hcm91cHMpe2xldCBsPU9iamVjdC5lbnRyaWVzKGEuaHBhcmFtcykubWFwKGM9PntsZXRbdSxkXT1jO3JldHVybntuYW1lOnUsdmFsdWU6ZH19KTtmb3IobGV0IGMgb2YgYS5zZXNzaW9ucylmb3IobGV0IHUgb2YgYy5tZXRyaWNWYWx1ZXMpe2xldCBwPWAke2V9LyR7dS5uYW1lLmdyb3VwP2Ake2MubmFtZX0vJHt1Lm5hbWUuZ3JvdXB9YDpjLm5hbWV9YCxoPXNbcF18fHttZXRyaWNzOltdLGhwYXJhbXM6bH07aC5tZXRyaWNzLnB1c2goe3RhZzp1Lm5hbWUudGFnLHRyYWluaW5nU3RlcDp1LnRyYWluaW5nU3RlcCx2YWx1ZTp1LnZhbHVlfSksc1twXT1ofX1yZXR1cm57aHBhcmFtU3BlY3M6ci5ocGFyYW1JbmZvcy5tYXAobzFlKSxtZXRyaWNTcGVjczpyLm1ldHJpY0luZm9zLm1hcChzMWUpLHJ1blRvSHBhcmFtc0FuZE1ldHJpY3M6c319KSxDbyhyPT5yIGluc3RhbmNlb2YgbWQmJjQwMD09PXIuc3RhdHVzP2p0KHtocGFyYW1TcGVjczpbXSxtZXRyaWNTcGVjczpbXSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnt9fSk6R2wocikpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFBLPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOklELHVzZUNsYXNzOklLfV19KSxufSkoKSxSSz1ZKFByKCJhbGVydHMiKSxuPT5uLmxhdGVzdEFsZXJ0KSxGRD0iZXhwZXJpbWVudHMiLGMxZT1ZKFByKEZEKSxuPT5uLmRhdGEpLE5EPVkoYzFlLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZDplfT10O3JldHVybiBuLmV4cGVyaW1lbnRNYXBbZV18fG51bGx9KTtmdW5jdGlvbiBMRChuLHQsZSl7cmV0dXJuIG48dD90Om4+ZT9lOm59ZnVuY3Rpb24gY18obix0LGUpe2xldCBpPUxEKG4uc3RhcnQuc3RlcCx0LGUpLHI9bi5lbmQ/TEQobi5lbmQuc3RlcCx0LGUpOm51bGw7cmV0dXJue3N0YXJ0U3RlcDppLGVuZFN0ZXA6cixjbGlwcGVkOmkhPT1uLnN0YXJ0LnN0ZXB8fHIhPT0obi5lbmQ/LnN0ZXA/P251bGwpfX1mdW5jdGlvbiBCRChuLHQpe2xldCBlPXRbbi5pZF07cmV0dXJuIGUmJmUudmlzaWJsZSYmIUJvb2xlYW4oZS5hdXgpfWZ1bmN0aW9uIGxWKG4sdCl7cmV0dXJuIHQ/bjp7c3RhcnQ6bi5zdGFydCxlbmQ6bnVsbH19ZnVuY3Rpb24gY1Yobix0LGUpe3JldHVybiBsVihmdW5jdGlvbihuLHttaW5TdGVwOnQsbWF4U3RlcDplfSl7cmV0dXJue3N0YXJ0OntzdGVwOkxEKG4uc3RhcnQuc3RlcCx0LGUpfSxlbmQ6bi5lbmQ/e3N0ZXA6TEQobi5lbmQuc3RlcCx0LGUpfTpudWxsfX0obix0KSxlKX12YXIgV249KCgpPT4oZnVuY3Rpb24obil7bi5TQ0FMQVJTPSJzY2FsYXJzIixuLkhJU1RPR1JBTVM9Imhpc3RvZ3JhbXMiLG4uSU1BR0VTPSJpbWFnZXMifShXbnx8KFduPXt9KSksV24pKSgpLFlpPSgoKT0+KGZ1bmN0aW9uKG4pe24uU1RFUD0ic3RlcCIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG4uV0FMTF9USU1FPSJ3YWxsdGltZSJ9KFlpfHwoWWk9e30pKSxZaSkpKCksQ0M9InRpbWVzZXJpZXMiO2Z1bmN0aW9uIExLKG4pe3JldHVybiBuPT09V24uU0NBTEFSU3x8bj09PVduLkhJU1RPR1JBTVN8fG49PT1Xbi5JTUFHRVN9dmFyIHAxZT1bV24uSU1BR0VTXTtmdW5jdGlvbiBVYShuKXtyZXR1cm4gcDFlLmluY2x1ZGVzKG4pfXZhciBoMWU9W1duLkhJU1RPR1JBTVMsV24uSU1BR0VTXTtmdW5jdGlvbiB6YShuKXtyZXR1cm4gaDFlLmluY2x1ZGVzKG4pfWZ1bmN0aW9uIHVWKG4pe3JldHVybiB6YShuLnBsdWdpbil9dmFyIHl1PWNsYXNze307ZnVuY3Rpb24gSEQobil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImVycm9yIil9dmFyIGRWPSJkYXRhL3BsdWdpbi90aW1lc2VyaWVzIjtmdW5jdGlvbiBCSyhuKXtsZXQgdD1uLmluZGV4T2YoIi8iKTtyZXR1cm57cnVuOm4uc3Vic3RyaW5nKHQrMSksZXhwZXJpbWVudElkOm4uc3Vic3RyaW5nKDAsdCl9fWZ1bmN0aW9uIEhLKG4sdCl7cmV0dXJuYCR7dH0vJHtufWB9ZnVuY3Rpb24gVksobix0KXtsZXR7cnVuVG9TZXJpZXM6ZSxydW46aSwuLi5yfT1uLG89ey4uLnJ9O3JldHVybiBlJiYoby5ydW5Ub1Nlcmllcz1wVihlLHQpKSxpJiYoby5ydW5JZD1ISyhpLHQpKSxvfWZ1bmN0aW9uIHBWKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbSEsoaSx0KV09bltpXSk7cmV0dXJuIGV9dmFyIFVLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmh0dHA9ZSx0aGlzLnN0b3JlPWl9ZmV0Y2hUYWdNZXRhZGF0YShlKXtsZXQgaT1lLm1hcChvPT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke299LyR7ZFZ9L3RhZ3NgKS5waXBlKEIoYT0+ZnVuY3Rpb24obix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpe2xldCByPWk7aWYoVWEocikpe2xldHt0YWdSdW5TYW1wbGVkSW5mbzpvLC4uLnN9PW5bcl0sYT17fTtmb3IobGV0IGwgaW4gbylvLmhhc093blByb3BlcnR5KGwpJiYoYVtsXT1wVihvW2xdLHQpKTtlW3JdPXsuLi5zLHRhZ1J1blNhbXBsZWRJbmZvOmF9fWVsc2V7bGV0e3J1blRhZ0luZm86bywuLi5zfT1uW3JdO2Vbcl09ey4uLnMscnVuVGFnSW5mbzpwVihvLHQpfX19cmV0dXJuIGV9KGEsbykpKSkscj10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssb10pPT5vKSk7cmV0dXJuIHhvKGkpLnBpcGUoR3QociksQigoW28sc10pPT57bGV0IGE9ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIG9mIE9iamVjdC52YWx1ZXMoV24pKWlmKFVhKGkpKXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319O2xldHt0YWdEZXNjcmlwdGlvbnM6cix0YWdSdW5TYW1wbGVkSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfTtsZXQgcz10W2ldLnRhZ1J1blNhbXBsZWRJbmZvO2ZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvKSl7c1thXT1zW2FdfHx7fTtmb3IobGV0IGwgb2YgT2JqZWN0LmtleXMob1thXSkpc1thXVtsXT1vW2FdW2xdfX1lbHNle3RbaV09dFtpXXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSxydW5UYWdJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIscnVuVGFnSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfSx0W2ldLnJ1blRhZ0luZm89ey4uLnRbaV0ucnVuVGFnSW5mbywuLi5vfX1yZXR1cm4gdH0obyk7cmV0dXJuIHN8fChhW1duLklNQUdFU109e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX0pLGF9KSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe2xldCBpPWUubWFwKHI9PntpZih6YShyLnBsdWdpbikpe2xldHtydW5JZDpsLC4uLmN9PXIse3J1bjp1LGV4cGVyaW1lbnRJZDpkfT1CSyhsKSxwPXsuLi5jLHJ1bjp1fTtyZXR1cm4gdGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChwLGQpLnBpcGUoQigoe3Jlc3BvbnNlOmgsZXhwZXJpbWVudElkOmZ9KT0+VksoaCxmKSkpfWxldHtleHBlcmltZW50SWRzOm8sLi4uc309cjtyZXR1cm4geG8oby5tYXAobD0+dGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChzLGwpKSkucGlwZShCKGw9PntsZXR7cnVuVG9TZXJpZXM6YyxlcnJvcjp1LC4uLmR9PWxbMF0ucmVzcG9uc2UscD1kO2ZvcihsZXR7cmVzcG9uc2U6aCxleHBlcmltZW50SWQ6Zn1vZiBsKXtsZXQgbT1WSyhoLGYpO2lmKHAuZXJyb3IpY29udGludWU7bGV0e3J1blRvU2VyaWVzOkMsZXJyb3I6X309bTtpZihfKXAuZXJyb3I9XyxwLnJ1blRvU2VyaWVzPXZvaWQgMDtlbHNle3AucnVuVG9TZXJpZXM9cC5ydW5Ub1Nlcmllc3x8e307Zm9yKGxldCB5IG9mIE9iamVjdC5rZXlzKEMpKXAucnVuVG9TZXJpZXNbeV09Q1t5XX19cmV0dXJuIHB9KSl9KTtyZXR1cm4geG8oaSl9ZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QoZSxpKXtsZXQgcj1uZXcgRm9ybURhdGE7cmV0dXJuIHIuYXBwZW5kKCJyZXF1ZXN0cyIsSlNPTi5zdHJpbmdpZnkoW2VdKSksdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7aX0vJHtkVn0vdGltZVNlcmllc2AscikucGlwZShCKG89Pih7cmVzcG9uc2U6b1swXSxleHBlcmltZW50SWQ6aX0pKSl9aW1hZ2VVcmwoZSl7cmV0dXJuYCR7ZFZ9L2ltYWdlRGF0YT9pbWFnZUlkPSR7ZX1gfWRvd25sb2FkVXJsKGUsaSxyLG8pe2xldCBsLHtydW46cyxleHBlcmltZW50SWQ6YX09Qksocik7aWYoZSE9PVduLlNDQUxBUlMpdGhyb3cgbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQ6IGRvd25sb2FkVXJsIGZvciAke2V9IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtpZihsPSJzY2FsYXJzL3NjYWxhcnMiLCFhKXRocm93IG5ldyBFcnJvcigiZXhwZXJpbWVudElkIGlzIGVtcHR5OyBpdCBpcyByZXF1aXJlZCB0byBmb3JtIGRvd25sb2FkVXJsLiIpO3JldHVybmAvZXhwZXJpbWVudC8ke2F9L2RhdGEvcGx1Z2luL3NjYWxhcnMvc2NhbGFycz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzppLHJ1bjpzLGZvcm1hdDpvfSl9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF8xZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLFVEPSgoKT0+e2NsYXNzIG57Z2V0UGFyYW1zKCl7cmV0dXJuIF8xZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd0M9InRiX2ZlYXR1cmVfZmxhZ19zdG9yYWdlX2tleSIsaFY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXJ5UGFyYW1zPWV9Z2V0RmVhdHVyZXMoZSxpKXtsZXQgcj1lP3RoaXMuZ2V0UGFydGlhbEZlYXR1cmVzRnJvbU1lZGlhUXVlcnkoKTp7fSxvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoZSxbaSxyXSk9PntsZXQgbz1mdW5jdGlvbihuLHQpe2xldCBlPW4ucXVlcnlQYXJhbU92ZXJyaWRlO2lmKCFlfHwhdC5oYXMoZSkpcmV0dXJuIG51bGw7bGV0IGk9dC5nZXQoZSk7cmV0dXJuIG51bGw9PWk/bnVsbDpuLnBhcnNlVmFsdWUoaSl9KHIsdCk7cmV0dXJuIG51bGwhPT1vJiYoZVtpXT1vKSxlfSx7fSl9KGksdGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSk7cmV0dXJuey4uLnIsLi4uT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpKS5maWx0ZXIoKFthXSk9PmlbYV0pKSwuLi5vfX1wZXJzaXN0RmVhdHVyZUZsYWdzKGUpe2xldCByPXsuLi50aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSwuLi5lfTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0od0MsSlNPTi5zdHJpbmdpZnkocikpfXJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoZSl7bGV0IGk9dGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCk7aWYobnVsbCE9aVtlXSl7aWYoZGVsZXRlIGlbZV0sMD09PU9iamVjdC5rZXlzKGkpLmxlbmd0aClyZXR1cm4gdm9pZCB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0od0MpO3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh3QyxKU09OLnN0cmluZ2lmeShpKSl9fXJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl7d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHdDKX1nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCl7bGV0IGU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHdDKTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksekQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR0s9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaFYsVUQse3Byb3ZpZGU6ekQsdXNlQ2xhc3M6aFZ9XX0pLG59KSgpLE1DPXdlKCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksakQ9d2UoIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFpmPXdlKCJbRkVBVFVSRSBGTEFHXSBTdG9yZSB0aGUgZmVhdHVyZSBmbGFncyBpbiBwZXJzaXN0ZW50IGxvY2FsU3RvcmFnZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZwPXdlKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdV89d2UoIltGRUFUVVJFIEZMQUddIFJlc2V0IGFsbCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIiksV0s9d2UoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLHFLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy50ZkZlYXR1cmVGbGFncz17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWZlYXR1cmUtZmxhZ3MiKS50Zl9mZWF0dXJlX2ZsYWdzfSx0aGlzLmdldEZlYXR1cmVGbGFncyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShXSyksc3IodGhpcy5zdG9yZS5zZWxlY3QobkspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSksQigoWyxvLHNdKT0+e2xldCBhPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhvLHMpO3JldHVybiBNQyh7ZmVhdHVyZXM6YX0pfSkpKSx0aGlzLnVwZGF0ZVBvbHltZXJGZWF0dXJlRmxhZ3MkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoTUMpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KEJvKSx0aGlzLnN0b3JlLnNlbGVjdChuXykpLE50KChbLG8sc10pPT57dGhpcy50ZkZlYXR1cmVGbGFncy5yZWYuc2V0RmVhdHVyZUZsYWdzKG8scyl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5zdG9yZUZlYXR1cmVGbGFnJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKFpmKSxOdCgoe2ZsYWdzOm99KT0+e3RoaXMuZGF0YVNvdXJjZS5wZXJzaXN0RmVhdHVyZUZsYWdzKG8pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShGcCksTnQoKHtmbGFnczpvfSk9PntvLmZvckVhY2gocz0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKHMpfSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEFsbEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKHVfKSxOdCgoKT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpfSkpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIFdLKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoekQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRSz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX1pbnRlcmNlcHQoZSxpKXtyZXR1cm4gdGhpcy5zdG9yZS5waXBlKGZuKG5fKSxmdW5jdGlvbihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGk9PmkucGlwZShuP0hlKChyLG8pPT5uKHIsbyxpKSk6TXMsSHQoMSksZT9kaih0KTpoaigoKT0+bmV3IF9nKSl9KCksdmkocj0+KGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KCJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiLEpTT04uc3RyaW5naWZ5KHIpKX0pLGkuaGFuZGxlKGUpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBlKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gZ2Qobil7cmV0dXJuImZhbHNlIiE9PW59dmFyIGZWPXtzY2FsYXJzQmF0Y2hTaXplOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2NhbGFyc0JhdGNoU2l6ZSIscGFyc2VWYWx1ZTpwYXJzZUludH0sZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnM6e2RlZmF1bHRWYWx1ZTpbXSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImV4cGVyaW1lbnRhbFBsdWdpbiIscGFyc2VWYWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4gbj9uLnNwbGl0KCIsIik6W119fSxlbmFibGVkTGlua2VkVGltZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlTGlua2VkVGltZSIscGFyc2VWYWx1ZTpnZH0sZW5hYmxlZFNjYWxhckRhdGFUYWJsZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlRGF0YVRhYmxlIixwYXJzZVZhbHVlOmdkfSxmb3JjZVN2Zzp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZm9yY2VTVkciLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6e2RlZmF1bHRWYWx1ZTpudWxsLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxkZWZhdWx0RW5hYmxlRGFya01vZGU6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImRhcmtNb2RlIixwYXJzZVZhbHVlOmdkfSxpc0F1dG9EYXJrTW9kZUFsbG93ZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0saW5Db2xhYjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToidGVuc29yYm9hcmRDb2xhYiIscGFyc2VWYWx1ZTpnZH0sbWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0sc2hvd0ZsYWdzOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2hvd0ZsYWdzIixwYXJzZVZhbHVlOm49Pm59LGFsbG93UmFuZ2VTZWxlY3Rpb246e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6ImFsbG93UmFuZ2VTZWxlY3Rpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZWRQcm9zcGVjdGl2ZUZvYjp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlUHJvc3BlY3RpdmVGb2IiLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb246e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXM6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXMiLHBhcnNlVmFsdWU6Z2R9fSxtVj17aXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITEsZGVmYXVsdEZsYWdzOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKHQsW2UsaV0pPT4odFtlXT1pLmRlZmF1bHRWYWx1ZSx0KSx7fSl9KGZWKSxtZXRhZGF0YTpmVixmbGFnT3ZlcnJpZGVzOnt9fSxnVj1uZXcgc2UoIltGZWF0dXJlIEZsYWddIFN0b3JlIENvbmZpZyIpO2Z1bmN0aW9uIFpLKCl7cmV0dXJue2luaXRpYWxTdGF0ZTptVn19dmFyIE0xZT13cihtVixTZShNQywobix7ZmVhdHVyZXM6dH0pPT4oey4uLm4saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITAsZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnR9fSkpLFNlKGpELChuLHtlbmFibGVEYXJrTW9kZTp0fSk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTp0fX0pKSxTZShaZiwobix0KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50LmZsYWdzfX0pKSxTZShGcCwobix0KT0+e2lmKCF0fHwhdC5mbGFnc3x8IXQuZmxhZ3MubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLmZsYWdPdmVycmlkZXN9O3JldHVybiB0LmZsYWdzLmZvckVhY2goaT0+e2RlbGV0ZSBlW2ldfSksey4uLm4sZmxhZ092ZXJyaWRlczplfX0pLFNlKHVfLG49Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnt9fSkpLFNlKGZjLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57aWYoIXQudGhlbWVPdmVycmlkZSlyZXR1cm4gbjtsZXQgZTtzd2l0Y2godC50aGVtZU92ZXJyaWRlKXtjYXNlIG9hLkJST1dTRVJfREVGQVVMVDplPW51bGw7YnJlYWs7Y2FzZSBvYS5EQVJLOmU9ITA7YnJlYWs7Y2FzZSBvYS5MSUdIVDplPSExfXJldHVybnsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOmV9fX0pKTtmdW5jdGlvbiBKSyhuLHQpe3JldHVybiBNMWUobix0KX1mdW5jdGlvbiBTMWUoKXtyZXR1cm4gWShzRCxuPT5udWxsPT09bj97dGhlbWVPdmVycmlkZTpvYS5CUk9XU0VSX0RFRkFVTFR9Ont0aGVtZU92ZXJyaWRlOm4/b2EuREFSSzpvYS5MSUdIVH0pfXZhciBkXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpnVix1c2VGYWN0b3J5OlpLfSx7cHJvdmlkZTpyRCx1c2VDbGFzczpRSyxtdWx0aTohMH1dLGltcG9ydHM6W0dLLFJyLmZvckZlYXR1cmUob0QsSkssZ1YpLExvLmZvckZlYXR1cmUoW3FLXSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhTMWUpXX0pLG59KSgpLEdEPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOnl1LHVzZUNsYXNzOlVLfV0saW1wb3J0czpbZF8saV9dfSksbn0pKCksbW89KCgpPT4oZnVuY3Rpb24obil7bi5ERUZBVUxUPSJkZWZhdWx0IixuLkFMUEhBQkVUSUNBTD0iYWxwaGFiZXRpY2FsIixuLkFTQ0VORElORz0iYXNjZW5kaW5nIixuLkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLG4uTkVBUkVTVD0ibmVhcmVzdCIsbi5ORUFSRVNUX1k9Im5lYXJlc3RfWSJ9KG1vfHwobW89e30pKSxtbykpKCksV0Q9Im1ldHJpY3MiLHNhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uT1ZFUlJJREVfQVNfRU5BQkxFRD0xXT0iT1ZFUlJJREVfQVNfRU5BQkxFRCIsbltuLk9WRVJSSURFX0FTX0RJU0FCTEVEPTJdPSJPVkVSUklERV9BU19ESVNBQkxFRCJ9KHNhfHwoc2E9e30pKSxzYSkpKCkscUQ9e2NhcmRNaW5XaWR0aDpudWxsLHRvb2x0aXBTb3J0Om1vLkFMUEhBQkVUSUNBTCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6WWkuU1RFUCxoaWRlRW1wdHlDYXJkczohMCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOk9yLk9GRlNFVH07ZnVuY3Rpb24gX2Qobix0LGUsaSl7cmV0dXJuIG5bdF0uaGFzT3duUHJvcGVydHkoZSk/VWEodCk/blt0XVtlXS5oYXNPd25Qcm9wZXJ0eShpKT9uW3RdW2VdW2ldOm51bGw6blt0XVtlXTpudWxsfWZ1bmN0aW9uIFlEKG4sdCxlLGkpe2lmKFVhKHQpKXtsZXQgcz17Li4ublt0XX0sYT1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5oYXNPd25Qcm9wZXJ0eSh0KT97Li4ublt0XX06e30sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn0ocyxlLGkpO3JldHVybiBzW2VdPWEsc31sZXQgcj17Li4ublt0XX0sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn1mdW5jdGlvbiBfVihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9ZnVuY3Rpb24gWEQobix0LGUpe2xldCBpPXsuLi5lfTtmb3IobGV0IHIgb2YgdClpW3JdPW47cmV0dXJuIGl9ZnVuY3Rpb24gcF8obix0LGUsaSl7aWYoVWEodCkpe2xldCBvPW5bdF0udGFnUnVuU2FtcGxlZEluZm87cmV0dXJuIG8uaGFzT3duUHJvcGVydHkoZSk/T2JqZWN0LmtleXMob1tlXSkuZmlsdGVyKGE9Pmk8b1tlXVthXS5tYXhTYW1wbGVzUGVyU3RlcCk6W119bGV0IHI9blt0XS50YWdUb1J1bnM7cmV0dXJuIHIuaGFzT3duUHJvcGVydHkoZSk/cltlXTpbXX1mdW5jdGlvbiBBMWUobix0KXtyZXR1cm4gbi5wbHVnaW49PT10LnBsdWdpbiYmbi50YWc9PT10LnRhZyYmbi5zYW1wbGU9PT10LnNhbXBsZSYmKG4ucnVuSWQ9PT10LnJ1bklkfHwhbi5ydW5JZCYmIXQucnVuSWQpfWZ1bmN0aW9uIHZWKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9bmV3IFNldChuKSxjPVtdO2ZvcihsZXQgZCBvZiBuKWZvcihsZXQgcCBvZiB0KWlmKEExZShlW3BdLGQpKXtjLnB1c2gocCksbC5kZWxldGUoZCk7YnJlYWt9aWYoIWMubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkU3RhdGVNYXA6YX07bGV0IHU9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZSxjYXJkU3RhdGVNYXA6YX07Zm9yKGxldCBkIG9mIGMpdT15VihkLHUuY2FyZFRvUGlubmVkQ29weSx1LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSx1LnBpbm5lZENhcmRUb09yaWdpbmFsLHUuY2FyZFN0ZXBJbmRleCx1LmNhcmRNZXRhZGF0YU1hcCxhKTtyZXR1cm57Li4udSx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbLi4ubF19fWZ1bmN0aW9uIHlWKG4sdCxlLGkscixvLHMpe2lmKHQuaGFzKG4pKXJldHVybntjYXJkVG9QaW5uZWRDb3B5OnQsY2FyZFRvUGlubmVkQ29weUNhY2hlOmUscGlubmVkQ2FyZFRvT3JpZ2luYWw6aSxjYXJkU3RlcEluZGV4OnIsY2FyZE1ldGFkYXRhTWFwOm8sY2FyZFN0YXRlTWFwOnN9O2xldCBhPW5ldyBNYXAodCksbD1uZXcgTWFwKGUpLGM9bmV3IE1hcChpKSx1PXsuLi5yfSxkPXsuLi5vfSxwPXsuLi5zfSxoPWZ1bmN0aW9uKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7YmFzZUNhcmRJZDpufSl9KG4pO2Euc2V0KG4saCksbC5zZXQobixoKSxjLnNldChoLG4pLHIuaGFzT3duUHJvcGVydHkobikmJih1W2hdPXJbbl0pO2xldCBmPW9bbl07aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIGRbaF09ZixwW25dJiYocFtoXT1wW25dKSx7Y2FyZFRvUGlubmVkQ29weTphLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpsLHBpbm5lZENhcmRUb09yaWdpbmFsOmMsY2FyZFN0ZXBJbmRleDp1LGNhcmRNZXRhZGF0YU1hcDpkLGNhcmRTdGF0ZU1hcDpwfX1mdW5jdGlvbiBRRChuKXtyZXR1cm4gbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK24udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPDEwfWZ1bmN0aW9uIGJWKG4sdCxlLGkpe2xldCByPXsuLi5ufTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChvPT57aWYoIW8uaW5jbHVkZXMoJyJwbHVnaW4iOiJpbWFnZXMiJykpcmV0dXJuO2xldCBzPXhWKG8sdCxlKSxhPW51bGw7aWYobnVsbD09PWkuZW5kKWE9ZnVuY3Rpb24obix0KXtsZXQgZT10LmluZGV4T2Yobik7aWYoLTEhPT1lKXJldHVybntpbmRleDplLGlzQ2xvc2VzdDohMX07Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dFtpXSxvPXRbaSsxXSxzPS4xKihvLXIpO2lmKG48cilyZXR1cm4gbnVsbDtpZighKG4+bykpe2lmKG4tcjw9cylyZXR1cm57aW5kZXg6aSxpc0Nsb3Nlc3Q6ITB9O2lmKG8tbjw9cylyZXR1cm57aW5kZXg6aSsxLGlzQ2xvc2VzdDohMH19fXJldHVybiBudWxsfShpLnN0YXJ0LnN0ZXAscyk7ZWxzZXtsZXQgYz1zW25bb10uaW5kZXhdLHU9ZnVuY3Rpb24obix0KXtpZighbilyZXR1cm5bXTtpZihudWxsPT09bi5lbmQpcmV0dXJuLTEhPT10LmluZGV4T2Yobi5zdGFydC5zdGVwKT9bbi5zdGFydC5zdGVwXTpbXTtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdClpPj1uLnN0YXJ0LnN0ZXAmJmk8PW4uZW5kLnN0ZXAmJmUucHVzaChpKTtyZXR1cm4gZX0oaSxzKTthPWZ1bmN0aW9uKG4sdCxlKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGk9blswXSxyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU+cj97aW5kZXg6dC5pbmRleE9mKHIpLGlzQ2xvc2VzdDohMX06ZTxpP3tpbmRleDp0LmluZGV4T2YoaSksaXNDbG9zZXN0OiExfTpudWxsfSh1LHMsYyl9bnVsbCE9PWEmJihyW29dPWEpfSkscn1mdW5jdGlvbiB4VihuLHQsZSl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuW107bGV0e3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvLHJ1bklkOnN9PXRbbl07aWYobnVsbD09PXMpcmV0dXJuW107bGV0IGE9X2QoZSxpLHIsbyk7cmV0dXJuIG51bGwhPT1hJiZhLnJ1blRvU2VyaWVzLmhhc093blByb3BlcnR5KHMpP2EucnVuVG9TZXJpZXNbc10ubWFwKGw9Pmwuc3RlcCk6W119ZnVuY3Rpb24gQ1Yobil7bGV0e2RhdGFNaW5NYXg6dCx1c2VyVmlld0JveDplfT1uLGk9ZT8ueDtpZighaSlyZXR1cm4gdDtsZXQgcj1pWzBdPGlbMV0/aVswXTppWzFdLG89cj09PWlbMF0/aVsxXTppWzBdO3JldHVybnttaW5TdGVwOk1hdGguY2VpbChyKSxtYXhTdGVwOk1hdGguZmxvb3Iobyl9fWZ1bmN0aW9uIEtEKG4sdCl7c3dpdGNoKG4pe2Nhc2Ugc2EuT1ZFUlJJREVfQVNfRU5BQkxFRDpyZXR1cm4hMDtjYXNlIHNhLk9WRVJSSURFX0FTX0RJU0FCTEVEOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuIHR9fXZhciBYaT1QcihXRCksU0M9WShYaSxuPT5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlKSxyWj1ZKFhpLG49Pm4udGFnTWV0YWRhdGEpLEYxZT1ZKFhpLG49Pm4uY2FyZExpc3QpLE5wPVkoWGksKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0e3BsdWdpbjplLHRhZzppLHJ1bklkOnIsc2FtcGxlOm99PW4uY2FyZE1ldGFkYXRhTWFwW3RdLHM9X2Qobi50aW1lU2VyaWVzRGF0YSxlLGksbyk7aWYoIXMpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0IGE9cy5ydW5Ub0xvYWRTdGF0ZTtpZihyKXJldHVybiBhLmhhc093blByb3BlcnR5KHIpP2Fbcl06RWUuTk9UX0xPQURFRDtsZXQgbD1wXyhuLnRhZ01ldGFkYXRhLGUsaSxvKTtpZighbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCBhIGNhcmQgd2hvc2UgdGFnIGhhcyBubyBydW5zIik7cmV0dXJuIGwuZXZlcnkoYz0+YVtjXT09PUVlLkxPQURFRCk/RWUuTE9BREVEOmwuc29tZShjPT5hW2NdPT09RWUuTE9BRElORyk/RWUuTE9BRElORzpFZS5OT1RfTE9BREVEfSksTHA9WShYaSwobix0KT0+e2lmKCFuLmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gbnVsbDtsZXR7cGx1Z2luOmUsdGFnOmksc2FtcGxlOnJ9PW4uY2FyZE1ldGFkYXRhTWFwW3RdLG89X2Qobi50aW1lU2VyaWVzRGF0YSxlLGkscik7cmV0dXJuIG8/by5ydW5Ub1NlcmllczpudWxsfSksd1Y9WShYaSxuPT5uLmNhcmRNZXRhZGF0YU1hcCksU2w9WSh3Viwobix0KT0+bi5oYXNPd25Qcm9wZXJ0eSh0KT9uW3RdOm51bGwpLG1jPVkoWGksbj0+bi5jYXJkU3RhdGVNYXApLE4xZT1ZKFhpLG49Pm4udmlzaWJsZUNhcmRNYXApLG9aPVkoTjFlLG49Pm5ldyBTZXQobi52YWx1ZXMoKSkpLFpEPVkoRjFlLHdWLChuLHQpPT5uLmZpbHRlcihlPT50Lmhhc093blByb3BlcnR5KGUpKS5tYXAoZT0+KHtjYXJkSWQ6ZSwuLi50W2VdfSkpKSxNVj1ZKFhpLChuLHQpPT5uLmNhcmRTdGVwSW5kZXguaGFzT3duUHJvcGVydHkodCk/bi5jYXJkU3RlcEluZGV4W3RdOm51bGwpLHNaPVkoWGksKG4sdCk9PnhWKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLGFaPVkoWGksbj0+bi5jYXJkVG9QaW5uZWRDb3B5KSxMMWU9WShYaSxuPT5uLnBpbm5lZENhcmRUb09yaWdpbmFsKSxFQz1ZKGFaLHdWLChuLHQpPT5bLi4ubi52YWx1ZXMoKV0uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLEJwPVkoYVosTDFlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSksbFo9WShYaSxuPT5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzKSxjWj1ZKFhpLG49PlFEKG4pKSxnYz1ZKFhpLG49Pih7Li4ubi5zZXR0aW5ncywuLi5uLnNldHRpbmdPdmVycmlkZXN9KSksdVo9WShYaSxuPT5uLnNldHRpbmdPdmVycmlkZXMpLGhfPVkoZ2Msbj0+bi5jYXJkTWluV2lkdGgpLGZfPVkoZ2Msbj0+bi50b29sdGlwU29ydCksbV89WShnYyxuPT5uLmlnbm9yZU91dGxpZXJzKSxidT1ZKGdjLG49Pm4ueEF4aXNUeXBlKSxKRD1ZKGdjLG49Pm4uaGlzdG9ncmFtTW9kZSksZFo9WShnYyxuPT5uLmhpZGVFbXB0eUNhcmRzKSx2ZD1ZKGdjLG49Pm4uc2NhbGFyU21vb3RoaW5nKSwkRD1ZKGdjLG49Pm4uc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCksZUE9WShnYyxuPT5uLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpLHRBPVkoZ2Msbj0+bi5pbWFnZUNvbnRyYXN0SW5NaWxsaSksbkE9WShnYyxuPT5uLmltYWdlU2hvd0FjdHVhbFNpemUpLF9jPVkoWGksbj0+bi50YWdGaWx0ZXIpLGlBPVkoWGksKG4sdCk9PkJvb2xlYW4obi50YWdHcm91cEV4cGFuZGVkLmdldCh0KSkpLFZwPVkoWGksbj0+bi5saW5rZWRUaW1lRW5hYmxlZCksVEM9WShYaSxuPT5uLnN0ZXBTZWxlY3RvckVuYWJsZWQpLEhwPVkoWGksbj0+bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLFNWPVkoWGksbj0+e2xldHttaW46dCxtYXg6ZX09bi5zdGVwTWluTWF4O3JldHVybnttaW46dD09PTEvMD8wOnQsbWF4OmU9PT0tMS8wPzFlMzplfX0pLGdfPVkoWGksbj0+bi5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxfXz1ZKFhpLG49Pm4ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxFVj1ZKFhpLFNWLChuLHQpPT5uLmxpbmtlZFRpbWVTZWxlY3Rpb24/bi5saW5rZWRUaW1lU2VsZWN0aW9uOntzdGFydDp7c3RlcDp0Lm1pbn0sZW5kOm51bGx9KSxVcD1ZKFhpLEVWLChuLHQpPT5uLmxpbmtlZFRpbWVFbmFibGVkP3Q6bnVsbCkseHU9WShYaSxuPT5uLmZpbHRlcmVkUGx1Z2luVHlwZXMpLHJBPVkoWGksbj0+bi5pc1NldHRpbmdzUGFuZU9wZW4pLG9BPVkoWGksbj0+bi5pc1NsaWRlb3V0TWVudU9wZW4pLHBaPVkoWGksbj0+bi50YWJsZUVkaXRvclNlbGVjdGVkVGFiKSxoWj1ZKEhwLFZwLG1jLChuLHQsZSxpKT0+dD9uOktEKGVbaV0/LnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsbikpLGZaPVkobWMsKG4sdCk9PntpZihuW3RdKXJldHVybiBDVihuW3RdKX0pLG1aPVkobWMsKG4sdCk9Pm5bdF0/LmRhdGFNaW5NYXgpLGdaPVkobWMsVEMsSHAsVnAsVXAsKG4sdCxlLGkscixvKT0+e2xldCBzPW5bb107aWYoIXMpcmV0dXJuO2xldCBhPUNWKHMpO2lmKCFhKXJldHVybjtpZihpJiZyKXJldHVybiBjVihyLGEsZSk7aWYoIUtEKHMuc3RlcFNlbGVjdGlvbk92ZXJyaWRlLHQpKXJldHVybjtsZXQgbD1LRChzLnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsZSk7cmV0dXJuIGNWKHtzdGFydDp7c3RlcDpzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA/P2EubWluU3RlcH0sZW5kOntzdGVwOnMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwPz9hLm1heFN0ZXB9fSxhLGwpfSksdlo9UHIoIm5vdGlmaWNhdGlvbiIpLEN1PShZKHZaLG49Pm4ubm90aWZpY2F0aW9ucyksWSh2WixuPT5uLmxhc3RSZWFkVGltZXN0YW1wSW5Ncz8/LTEpLCgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UX05BTUU9MF09IkVYUEVSSU1FTlRfTkFNRSIsbltuLkhQQVJBTT0xXT0iSFBBUkFNIixuW24uTUVUUklDPTJdPSJNRVRSSUMiLG5bbi5SVU5fTkFNRT0zXT0iUlVOX05BTUUifShDdXx8KEN1PXt9KSksQ3UpKSgpKSxlcj0oKCk9PihmdW5jdGlvbihuKXtuW24uUlVOPTBdPSJSVU4iLG5bbi5FWFBFUklNRU5UPTFdPSJFWFBFUklNRU5UIixuW24uUkVHRVg9Ml09IlJFR0VYIn0oZXJ8fChlcj17fSkpLGVyKSkoKTtmdW5jdGlvbiBBQyhuLHQsZSl7bGV0IGk9e30scj1bXSxvPXttYXRjaGVzOmksbm9uTWF0Y2hlczpyfTtzd2l0Y2gobi5rZXkpe2Nhc2UgZXIuUlVOOmZvcihsZXQgYSBvZiB0KWlbYS5pZF09W2FdO2JyZWFrO2Nhc2UgZXIuRVhQRVJJTUVOVDpmb3IobGV0IGEgb2YgdCl7bGV0IGw9ZVthLmlkXSxjPWlbbF18fFtdO2MucHVzaChhKSxpW2xdPWN9YnJlYWs7Y2FzZSBlci5SRUdFWDppZighbi5yZWdleFN0cmluZylicmVhaztsZXQgczt0cnl7cz1uZXcgUmVnRXhwKG4ucmVnZXhTdHJpbmcpfWNhdGNoe2JyZWFrfWZvcihsZXQgYSBvZiB0KXtsZXQgbD1hLm5hbWUubWF0Y2gocyk7aWYobCl7bGV0IHU9bC5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShsLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIixkPWlbdV18fFtdO2QucHVzaChhKSxpW3VdPWR9ZWxzZSByLnB1c2goYSl9fXJldHVybiBvfWZ1bmN0aW9uIGFBKG4sdCl7cmV0dXJuIG49PT1lci5SRUdFWD97a2V5Om4scmVnZXhTdHJpbmc6dD8/IiJ9OntrZXk6bn19dmFyIHlaPVByKCJydW5zIiksamE9WSh5WixuPT5uLmRhdGEpLGJaPVkoamEsbj0+bi5ydW5JZFRvRXhwSWQpLGxBPVkoamEsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSxjQT1ZKGphLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSx3dT1ZKGphLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSkseFo9WShqYSwobix0KT0+bi5ydW5JZHNbdC5leHBlcmltZW50SWRdPz9bXSksQ1o9WShqYSxuPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKG4ucnVuTWV0YWRhdGEpKSksSUM9WShqYSwobix0KT0+bi5ydW5zTG9hZFN0YXRlW3QuZXhwZXJpbWVudElkXXx8e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOkVlLk5PVF9MT0FERUR9KSxUVj1ZKGphLG49Pm51bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5P2FBKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpLHdaPVkoVFYsamEsKG4sdCk9Pm4/P3QuaW5pdGlhbEdyb3VwQnkpLEpmPVkoamEsbj0+bi5yZWdleEZpbHRlciksRFY9WSh5WixuPT5uLnVpKSxBVj1ZKERWLG49Pm4ucGFnaW5hdGlvbk9wdGlvbiksSVY9WShEVixuPT5uLnNvcnQpLE1aPVkoRFYsbj0+bi5zZWxlY3Rpb25TdGF0ZSksU1o9WShqYSxuPT5uLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KSxFWj1ZKGphLG49Pm4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSx1QT1ZKGphLG49Pm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSxkQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSxwQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGhBPXdlKCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhYT17fTtTTyhhYSx7Z2V0Q29sb3JQYWxldHRlOigpPT5CMWUsZ2V0UGFnZVNpemU6KCk9PiRmLGdldFJlbG9hZEVuYWJsZWQ6KCk9PlJDLGdldFJlbG9hZFBlcmlvZEluTXM6KCk9Pk9DLGdldFNldHRpbmdzTG9hZFN0YXRlOigpPT5QVn0pO3ZhciBmQT0ic2V0dGluZ3MiLEFaPXtzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LFBDPVByKGZBKSxQVj1ZKFBDLG49Pm4uc3RhdGUpLFJDPVkoUEMsbj0+bi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkKSxPQz1ZKFBDLG49Pm4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcyksJGY9WShQQyxuPT5uLnNldHRpbmdzLnBhZ2VTaXplKSxCMWU9WShQQyxuPT5uLnNldHRpbmdzLmNvbG9yUGFsZXR0ZSk7ZnVuY3Rpb24gbUEobix0LGUpe2lmKCF0KXJldHVybiEwO2xldCBpO3RyeXtpPW5ldyBSZWdFeHAodCwiaSIpfWNhdGNoe3JldHVybiExfWxldCByPVtuLnJ1bk5hbWVdO3JldHVybiBlJiZyLnB1c2gobi5leHBlcmltZW50QWxpYXMuYWxpYXNUZXh0LGAke24uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dH0vJHtuLnJ1bk5hbWV9YCksci5zb21lKG89PmkudGVzdChvKSl9dmFyIFYxZT1ZKCRvLE1aLGJaLChuLHQsZSk9PntpZighbilyZXR1cm4gbmV3IE1hcDtsZXQgaT1uZXcgTWFwO2ZvcihsZXRbcixvXW9mIHQuZW50cmllcygpKXtsZXQgcz1lW3JdO3MmJm4uaW5kZXhPZihzKT49MCYmaS5zZXQocixvKX1yZXR1cm4gaX0pLGVtPVkoJG8sVjFlLEpmLG49PntsZXQgdD0kbyhuKT8/W10sZT1odShuKSxpPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBvPXd1KG4se2V4cGVyaW1lbnRJZDpyfSk7Zm9yKGxldCBzIG9mIG8paS5zZXQocy5pZCx7cnVuTmFtZTpzLm5hbWUsZXhwZXJpbWVudEFsaWFzOmVbcl19KX1yZXR1cm4gaX0scHUsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09ZmkuQ09NUEFSRV9FWFBFUklNRU5ULHM9bmV3IE1hcDtmb3IobGV0W2EsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQoYSk7cy5zZXQoYSxtQShjLGUsbykmJmwpfXJldHVybiBzfSksdl89WShhYS5nZXRDb2xvclBhbGV0dGUsRVosU1osbXUsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxzKT0+e2xldCBhPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMocykpYT1lLmdldChzKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTthPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9cltzXT1hfSkscn0pLElaPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoQUQpLF9uKCh7ZXhwZXJpbWVudElkczpvfSk9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YT09PUVlLkZBSUxFRHx8YT09PUVlLk5PVF9MT0FERUQpLnBpcGUoSGUoYT0+ISFhLmxlbmd0aCksX24oYT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8sYSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG9dKT0+ISFvKSxCKChbLG9dKT0+byksX24obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zPT09RWUuRkFJTEVEfHxzPT09RWUuTk9UX0xPQURFRCkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShIYSx3bCksR3QodGhpcy5zdG9yZS5zZWxlY3QoJG8pKSxIZSgoWyxvXSk9PiEhbyksQigoWyxvXSk9Pm8pLF9uKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8scz0+cyE9PUVlLkxPQURJTkcpLnBpcGUoQihzPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6c30pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPVVyKCgpPT51bih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKF9uKCh7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLHMpKSkse2Rpc3BhdGNoOiExfSl9Z2V0UnVuc0xpc3RMb2FkU3RhdGUoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KElDLHtleHBlcmltZW50SWQ6ZX0pLnBpcGUoSHQoMSkpfWdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZShlLGkpe3JldHVybiB4byhlLm1hcChyPT50aGlzLmdldFJ1bnNMaXN0TG9hZFN0YXRlKHIpKSkucGlwZShCKHI9PmUuZmlsdGVyKChvLHMpPT5pKHJbc10uc3RhdGUpKSkpfWZldGNoQWxsUnVuc0xpc3QoZSxpKXtyZXR1cm4ganQoe2V4cGVyaW1lbnRJZHM6ZSxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6aX0pLnBpcGUoTnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENEKHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpfSksX24oKCk9PntsZXQgcj1uZXcgU2V0KGkpO3JldHVybiB4byhlLm1hcChzPT5yLmhhcyhzKT90aGlzLmZldGNoUnVuc0ZvckV4cGVyaW1lbnQocyk6dGhpcy5tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhzKSkpfSksQihyPT57bGV0IG89e30scz1bXTtmb3IobGV0IGEgb2YgcilzLnB1c2goLi4uYS5ydW5zKSxhLmZyb21SZW1vdGUmJihvW2EuZXhwZXJpbWVudElkXT17cnVuczphLnJ1bnMsbWV0YWRhdGE6YS5tZXRhZGF0YX0pO3JldHVybntuZXdSdW5zQW5kTWV0YWRhdGE6byxydW5zRm9yQWxsRXhwZXJpbWVudHM6c319KSxOdCgoe25ld1J1bnNBbmRNZXRhZGF0YTpyLHJ1bnNGb3JBbGxFeHBlcmltZW50czpvfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE9wKHtleHBlcmltZW50SWRzOmUsbmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KSl9KSxDbyhyPT4odGhpcy5zdG9yZS5kaXNwYXRjaChhXyh7ZXhwZXJpbWVudElkczplLHJlcXVlc3RlZEV4cGVyaW1lbnRJZHM6aX0pKSxqdChudWxsKSkpLEIoKCk9Pm51bGwpKX1tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoSUMse2V4cGVyaW1lbnRJZDplfSkucGlwZShIZShpPT5pLnN0YXRlIT09RWUuTE9BRElORyksSHQoMSksX24oaT0+aS5zdGF0ZT09PUVlLkZBSUxFRD9HbChuZXcgRXJyb3IoIlBlbmRpbmcgcmVxdWVzdCBmYWlsZWQiKSk6anQoaSkpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KHd1LHtleHBlcmltZW50SWQ6ZX0pKSxCKChbLGldKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDplLHJ1bnM6aX0pKSl9ZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChlKXtyZXR1cm4geG8oW3RoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hSdW5zKGUpLHRoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hIcGFyYW1zTWV0YWRhdGEoZSldKS5waXBlKEIoKFtpLHJdKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDplLHJ1bnM6aSxtZXRhZGF0YTpyfSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihJRCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEVsPSgoKT0+KGZ1bmN0aW9uKG4pe24uQVNDPSJhc2MiLG4uREVTQz0iZGVzYyIsbi5VTlNFVD0iIn0oRWx8fChFbD17fSkpLEVsKSkoKSx7aW5pdGlhbFN0YXRlOkgxZSxyZWR1Y2VyczpVMWV9PVlmKHtydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTpuZXcgTWFwLGdyb3VwS2V5VG9Db2xvcklkOm5ldyBNYXAsaW5pdGlhbEdyb3VwQnk6e2tleTplci5SVU59LHVzZXJTZXRHcm91cEJ5S2V5Om51bGwsY29sb3JHcm91cFJlZ2V4U3RyaW5nOiIiLHJlZ2V4RmlsdGVyOiIifSx7cnVuSWRzOnt9LHJ1bklkVG9FeHBJZDp7fSxydW5NZXRhZGF0YTp7fSxydW5zTG9hZFN0YXRlOnt9fSwobix0LGUpPT51cyh0LGUpP246ey4uLm4saW5pdGlhbEdyb3VwQnk6e2tleTplLnJvdXRlS2luZD09PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9lci5FWFBFUklNRU5UOmVyLlJVTn19KSx6MWU9d3IoSDFlLFNlKEswLChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVCYmdCE9PWZpLkVYUEVSSU1FTlQpcmV0dXJuIG47bGV0IHI9ZS5ydW5zLmdyb3VwQnksbz1lLnJ1bnMucmVnZXhGaWx0ZXI/PyIiO2lmKCFyJiYhbylyZXR1cm4gbjtsZXR7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOnMsdXNlclNldEdyb3VwQnlLZXk6YX09bjtyZXR1cm4gciYmKHM9ci5rZXk9PT1lci5SRUdFWD9yLnJlZ2V4U3RyaW5nOm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nLGE9ci5rZXk/P251bGwpLHsuLi5uLGNvbG9yR3JvdXBSZWdleFN0cmluZzpzLHJlZ2V4RmlsdGVyOm8sdXNlclNldEdyb3VwQnlLZXk6YX19KSxTZShDRCwobix0KT0+e2xldCBlPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgaSBvZiB0LnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpZVtpXT1lW2ldP3suLi5lW2ldLHN0YXRlOkVlLkxPQURJTkd9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpFZS5MT0FESU5HfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5JZHN9LGk9ey4uLm4ucnVuTWV0YWRhdGF9LHI9ey4uLm4ucnVuSWRUb0V4cElkfSxvPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldHtydW5zOmEsbWV0YWRhdGE6bH09dC5uZXdSdW5zQW5kTWV0YWRhdGFbc107ZVtzXT1hLm1hcCgoe2lkOmN9KT0+Yyksb1tzXT17Li4ub1tzXSxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKSxzdGF0ZTpFZS5MT0FERUR9O2ZvcihsZXQgYyBvZiBhKXtsZXQgdT1sLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbYy5pZF07aVtjLmlkXT17Li4uYyxocGFyYW1zOnU/dS5ocGFyYW1zOm51bGwsbWV0cmljczp1P3UubWV0cmljczpudWxsfSxyW2MuaWRdPXN9fXJldHVybnsuLi5uLHJ1bklkczplLHJ1bklkVG9FeHBJZDpyLHJ1bk1ldGFkYXRhOmkscnVuc0xvYWRTdGF0ZTpvfX0pLFNlKGFfLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6RWUuRkFJTEVEfTp7bGFzdExvYWRlZFRpbWVJbk1zOm51bGwsc3RhdGU6RWUuRkFJTEVEfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4se3J1bnNGb3JBbGxFeHBlcmltZW50czp0fSk9PntsZXQgZT1uZXcgTWFwKG4uZ3JvdXBLZXlUb0NvbG9ySWQpLGk9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscj1uLmluaXRpYWxHcm91cEJ5O251bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5JiYocj1hQShuLnVzZXJTZXRHcm91cEJ5S2V5LG4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSk7bGV0IG89QUMocix0LG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhvLm1hdGNoZXMpLmZvckVhY2goKFtzLGFdKT0+e2xldCBsPWUuZ2V0KHMpPz9lLnNpemU7ZS5zZXQocyxsKTtmb3IobGV0IGMgb2YgYSlpLnNldChjLmlkLGwpfSk7Zm9yKGxldCBzIG9mIG8ubm9uTWF0Y2hlcylpLnNldChzLmlkLC0xKTtyZXR1cm57Li4ubixkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6aSxncm91cEtleVRvQ29sb3JJZDplfX0pLFNlKGxfLChuLHtleHBlcmltZW50SWRzOnQsZ3JvdXBCeTplfSk9PntsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscz1BQyhlLHQuZmxhdE1hcChsPT5uLnJ1bklkc1tsXSkubWFwKGw9Pm4ucnVuTWV0YWRhdGFbbF0pLG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhzLm1hdGNoZXMpLmZvckVhY2goKFtsLGNdKT0+e2xldCB1PWkuZ2V0KGwpPz9pLnNpemU7aS5zZXQobCx1KTtmb3IobGV0IGQgb2YgYylyLnNldChkLmlkLHUpfSk7Zm9yKGxldCBsIG9mIHMubm9uTWF0Y2hlcylyLnNldChsLmlkLC0xKTtsZXQgYT1lLmtleT09PWVyLlJFR0VYP2UucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOmEsdXNlclNldEdyb3VwQnlLZXk6ZS5rZXksZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5OnIsZ3JvdXBLZXlUb0NvbG9ySWQ6aSxydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwfX0pLFNlKERELChuLHtydW5JZDp0LG5ld0NvbG9yOmV9KT0+e2xldCBpPW5ldyBNYXAobi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSk7cmV0dXJuIGkuc2V0KHQsZSksey4uLm4scnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6aX19KSxTZShiQywobix0KT0+KHsuLi5uLHJlZ2V4RmlsdGVyOnQucmVnZXhTdHJpbmd9KSkpLGoxZT1YZih6MWUsVTFlKSxHMWU9e2tleTpudWxsLGRpcmVjdGlvbjpFbC5VTlNFVH0se2luaXRpYWxTdGF0ZTpXMWUscmVkdWNlcnM6cTFlfT1ZZih7cGFnaW5hdGlvbk9wdGlvbjp7cGFnZUluZGV4OjAscGFnZVNpemU6MTB9LHNvcnQ6RzFlLHNlbGVjdGlvblN0YXRlOm5ldyBNYXB9LHt9KSxZMWU9d3IoVzFlLFNlKEVELChuLHtwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfSk9Pih7Li4ubixwYWdpbmF0aW9uT3B0aW9uOntwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfX0pKSxTZShiQywobix0KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246ey4uLm4ucGFnaW5hdGlvbk9wdGlvbixwYWdlSW5kZXg6MH19KSksU2UoVEQsKG4sdCk9Pih7Li4ubixzb3J0OntrZXk6dC5rZXksZGlyZWN0aW9uOnQuZGlyZWN0aW9ufX0pKSxTZShPcCwobix0KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT10LnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IobGV0IHIgb2YgdC5ydW5zRm9yQWxsRXhwZXJpbWVudHMpZS5oYXMoci5pZCl8fGUuc2V0KHIuaWQsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZSh3RCwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKTtyZXR1cm4gZS5zZXQodCwhQm9vbGVhbihlLmdldCh0KSkpLHsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoTUQsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIG4uc2VsZWN0aW9uU3RhdGUua2V5cygpKWUuc2V0KGksdD09PWkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoU0QsKG4se3J1bklkczp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9IXQuZXZlcnkocj0+Qm9vbGVhbihlLmdldChyKSkpO2ZvcihsZXQgciBvZiB0KWUuc2V0KHIsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSksWDFlPVhmKFkxZSxxMWUpO2Z1bmN0aW9uIFBaKG4sdCl7cmV0dXJuIEhmKHtkYXRhOmoxZSx1aTpYMWV9KShuLHQpfWZ1bmN0aW9uIFExZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjphXyxhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgZ0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JyLmZvckZlYXR1cmUoInJ1bnMiLFBaKSxMby5mb3JGZWF0dXJlKFtJWl0pLFBLLHZ1LnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFExZSksT0RdfSksbn0pKCkseWQ9KCgpPT4oZnVuY3Rpb24obil7bi5SVU5TX0NIQU5HRUQ9ImV4cGVyaW1lbnRhbC5SdW5zQ2hhbmdlZCIsbi5HRVRfUlVOUz0iZXhwZXJpbWVudGFsLkdldFJ1bnMiLG4uR0VUX1VSTF9EQVRBPSJleHBlcmltZW50YWwuR2V0VVJMUGx1Z2luRGF0YSIsbi5EQVRBX1JFTE9BREVEPSJleHBlcmltZW50YWwuRGF0YVJlbG9hZGVkIn0oeWR8fCh5ZD17fSkpLHlkKSkoKSxPWj1uZXcgV2Vha01hcCx5Xz1uZXcgU2V0LFJWPW5ldyBNYXAsdkE9bmV3IE1hcDtmdW5jdGlvbiBrWihuLHQpe3JldHVybiBlPT57bGV0IGk9dkEuZ2V0KHQpLHI9T1ouZ2V0KGkpfHxudWxsO3JldHVybiBuKHIsZSl9fXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57aWYoImV4cGVyaW1lbnRhbC5ib290c3RyYXAiIT09bi5kYXRhKXJldHVybjtsZXQgdD1uLnBvcnRzWzBdO2lmKCF0KXJldHVybjtsZXQgZT1uLnNvdXJjZT9uLnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDshZXx8ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3J0PXQsdGhpcy5pZD0wLHRoaXMucmVzcG9uc2VXYWl0cz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGU9PnRoaXMub25NZXNzYWdlKGUpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9YXN5bmMgb25NZXNzYWdlKHQpe2xldCBlPUpTT04ucGFyc2UodC5kYXRhKSxpPWUudHlwZSxyPWUuaWQsbz1lLnBheWxvYWQscz1lLmVycm9yO2lmKGUuaXNSZXBseSl7aWYoIXRoaXMucmVzcG9uc2VXYWl0cy5oYXMocikpcmV0dXJuO2xldHtyZXNvbHZlOmQscmVqZWN0OnB9PXRoaXMucmVzcG9uc2VXYWl0cy5nZXQocik7cmV0dXJuIHRoaXMucmVzcG9uc2VXYWl0cy5kZWxldGUociksdm9pZChzP3AobmV3IEVycm9yKHMpKTpkKG8pKX1sZXQgbD1udWxsLGM9bnVsbDtpZih0aGlzLmxpc3RlbmVycy5oYXMoaSkpe2xldCBkPXRoaXMubGlzdGVuZXJzLmdldChpKTt0cnl7bD1hd2FpdCBkKG8pfWNhdGNoKHApe2M9cH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTppLGlkOnIscGF5bG9hZDpsLGVycm9yOmMsaXNSZXBseTohMH0pfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtsZXQgaT10aGlzLmlkKys7cmV0dXJuIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDppLHBheWxvYWQ6ZSxlcnJvcjpudWxsLGlzUmVwbHk6ITF9KSxuZXcgUHJvbWlzZSgobyxzKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQoaSx7cmVzb2x2ZTpvLHJlamVjdDpzfSl9KX19KG4pO3lfLmFkZChlKSx2QS5zZXQoZSx0KSxuLnN0YXJ0KCk7Zm9yKGxldFtpLHJdb2YgUlYpe2xldCBvPWtaKHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIga1YsYl89KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgeV8pdkEuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoeV8uZGVsZXRlKGkpLHZBLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLnlfXS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7UlYuc2V0KG4sdCk7Zm9yKGxldCBlIG9mIHlfKXtsZXQgaT1rWih0LGUpO2UubGlzdGVuKG4saSl9fShlLGkpfXVubGlzdGVuKGUpeyFmdW5jdGlvbihuKXtSVi5kZWxldGUobik7Zm9yKGxldCB0IG9mIHlfKXQudW5saXN0ZW4obil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx5QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKTt0aGlzLmlwYy5saXN0ZW4oeWQuR0VUX1VSTF9EQVRBLGk9PntpZighaSlyZXR1cm47bGV0IHI9YHAuJHtpLnBsdWdpbk5hbWV9LmAsbz17fSxzPWUudGZfc3RvcmFnZS5nZXRVcmxIYXNoRGljdCgpO2ZvcihsZXQgYSBpbiBzKWEuc3RhcnRzV2l0aChyKSYmKG9bYS5zdWJzdHJpbmcoci5sZW5ndGgpXT1zW2FdKTtyZXR1cm4gb30pLHRoaXMuc3RvcmUuc2VsZWN0KG9fKS5waXBlKEhlKGk9Pm51bGwhPT1pKSxkaSgpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoeWQuREFUQV9SRUxPQURFRCx2b2lkIDApfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKF9uKGk9Pmk/cG4oaS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3Qod3Use2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKEIobz0+by5mbGF0KCkpLGRpKChvLHMpPT5vLmxlbmd0aD09PXMubGVuZ3RoJiZvLmV2ZXJ5KChhLGwpPT5zW2xdLmlkPT09YS5pZCkpLEIobz0+by5tYXAoKHtuYW1lOnN9KT0+cykpKTpqdChbXSkpKTtlLnN1YnNjcmliZShpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHlkLlJVTlNfQ0hBTkdFRCxpKX0pLHRoaXMuaXBjLmxpc3Rlbih5ZC5HRVRfUlVOUywoKT0+ZS5waXBlKEh0KDEpKS50b1Byb21pc2UoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx4QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7aS5pbml0KCksZS5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUoZSxpKXshZnVuY3Rpb24obix0KXtPWi5zZXQobix7cGx1Z2luTmFtZTp0fSl9KGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYkEpLFIoeUEpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltiXyx5QSxiQV0saW1wb3J0czpbJDAsTWwsZ0FdfSksbn0pKCkseF89d2UoIltBbGVydF0gQWxlcnQgUmVwb3J0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuYWxlcnRBY3Rpb25Nb2R1bGU9cix0aGlzLnJlcG9ydFJlZ2lzdGVyZWRBY3Rpb25BbGVydHMkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoTnQobz0+e2xldCBzPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKG8pO3MmJnRoaXMuc3RvcmUuZGlzcGF0Y2goeF8ocykpfSkpLHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHZ1KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksb1RlPXdyKHtsYXRlc3RBbGVydDpudWxsfSxTZSh4Xywobix7bG9jYWxpemVkTWVzc2FnZTp0LGZvbGxvd3VwQWN0aW9uOmV9KT0+e2xldCBpPXtsb2NhbGl6ZWRNZXNzYWdlOnQsY3JlYXRlZDpEYXRlLm5vdygpfTtyZXR1cm4gZSYmKGkuZm9sbG93dXBBY3Rpb249ZSksey4uLm4sbGF0ZXN0QWxlcnQ6aX19KSk7ZnVuY3Rpb24gQloobix0KXtyZXR1cm4gb1RlKG4sdCl9dHJ5e2tWPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7a1Y9ITF9dmFyIENfLEZDLENBLHRtLE9WLHVpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/cFQodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYha1YpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaWQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxWWj1bImNvbG9yIiwiYnV0dG9uIiwiY2hlY2tib3giLCJkYXRlIiwiZGF0ZXRpbWUtbG9jYWwiLCJlbWFpbCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsIm1vbnRoIiwibnVtYmVyIiwicGFzc3dvcmQiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzZWFyY2giLCJzdWJtaXQiLCJ0ZWwiLCJ0ZXh0IiwidGltZSIsInVybCIsIndlZWsiXTtmdW5jdGlvbiBGVigpe2lmKENfKXJldHVybiBDXztpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIENfPW5ldyBTZXQoVlopO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIENfPW5ldyBTZXQoVlouZmlsdGVyKHQ9PihuLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbi50eXBlPT09dCkpKX1mdW5jdGlvbiBOcyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihudWxsPT1GQyYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+RkM9ITB9KSl9ZmluYWxseXtGQz1GQ3x8ITF9cmV0dXJuIEZDfSgpP246ISFuLmNhcHR1cmV9ZnVuY3Rpb24gd0EoKXtpZihudWxsPT10bSl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIHRtPSExO2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpdG09ITA7ZWxzZXtsZXQgbj1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbzt0bT0hIW4mJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChuLnRvU3RyaW5nKCkpfX1yZXR1cm4gdG19ZnVuY3Rpb24gd18oKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIDA7aWYobnVsbD09Q0Epe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9bi5zdHlsZTtuLmRpcj0icnRsIix0LndpZHRoPSIxcHgiLHQub3ZlcmZsb3c9ImF1dG8iLHQudmlzaWJpbGl0eT0iaGlkZGVuIix0LnBvaW50ZXJFdmVudHM9Im5vbmUiLHQucG9zaXRpb249ImFic29sdXRlIjtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPWUuc3R5bGU7aS53aWR0aD0iMnB4IixpLmhlaWdodD0iMXB4IixuLmFwcGVuZENoaWxkKGUpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksQ0E9MCwwPT09bi5zY3JvbGxMZWZ0JiYobi5zY3JvbGxMZWZ0PTEsQ0E9MD09PW4uc2Nyb2xsTGVmdD8xOjIpLG4ucmVtb3ZlKCl9cmV0dXJuIENBfWZ1bmN0aW9uIE1BKG4pe2lmKGZ1bmN0aW9uKCl7aWYobnVsbD09T1Ype2xldCBuPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO09WPSEoIW58fCFuLmNyZWF0ZVNoYWRvd1Jvb3QmJiFuLmF0dGFjaFNoYWRvdyl9cmV0dXJuIE9WfSgpKXtsZXQgdD1uLmdldFJvb3ROb2RlP24uZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hhZG93Um9vdCYmdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTkMoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtsZXQgdD1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZih0PT09bilicmVhaztuPXR9cmV0dXJuIG59ZnVuY3Rpb24gdmMobil7cmV0dXJuIG4uY29tcG9zZWRQYXRoP24uY29tcG9zZWRQYXRoKClbMF06bi50YXJnZXR9ZnVuY3Rpb24gTEMoKXtyZXR1cm4gdHlwZW9mIF9fa2FybWFfXzwidSImJiEhX19rYXJtYV9ffHx0eXBlb2YgamFzbWluZTwidSImJiEhamFzbWluZXx8dHlwZW9mIGplc3Q8InUiJiYhIWplc3R8fHR5cGVvZiBNb2NoYTwidSImJiEhTW9jaGF9ZnVuY3Rpb24gTXIobiwuLi50KXtyZXR1cm4gdC5sZW5ndGg/dC5zb21lKGU9Pm5bZV0pOm4uYWx0S2V5fHxuLnNoaWZ0S2V5fHxuLmN0cmxLZXl8fG4ubWV0YUtleX1mdW5jdGlvbiBXdChuKXtyZXR1cm4gbnVsbCE9biYmImZhbHNlIiE9YCR7bn1gfWZ1bmN0aW9uIFBpKG4sdD0wKXtyZXR1cm4gTlYobik/TnVtYmVyKG4pOnR9ZnVuY3Rpb24gTlYobil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQobikpJiYhaXNOYU4oTnVtYmVyKG4pKX1mdW5jdGlvbiBNXyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBubyhuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBjYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufXZhciBFXyxVWj0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGxUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9Y2EoZSk7cmV0dXJuIG5ldyBRdChyPT57bGV0IHM9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57cy51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgVGUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVaKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksU189KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEcsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5fdW5zdWJzY3JpYmUoKTp0aGlzLl9zdWJzY3JpYmUoKX1nZXQgZGVib3VuY2UoKXtyZXR1cm4gdGhpcy5fZGVib3VuY2V9c2V0IGRlYm91bmNlKGUpe3RoaXMuX2RlYm91bmNlPVBpKGUpLHRoaXMuX3N1YnNjcmliZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKEFyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGxUZSksdyhBZSksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksenA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbVVpdfSksbn0pKCkselo9bmV3IFNldCxjVGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6ZFRlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighelouaGFzKG4pKXRyeXtFX3x8KChFXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRV8pKSxFXy5zaGVldCYmKEVfLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCkselouYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGRUZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBubT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgVGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIGpaKE1fKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89cG4oalooTV8oZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1KZChvLnBpcGUoSHQoMSkpLG8ucGlwZShDYSgxKSxBcigwKSkpLG8ucGlwZShCKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IFF0KHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZShWbihpKSxCKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksb3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjVGUpLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBqWihuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIERBKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIEtaPSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsRUE9ImNkay1kZXNjcmliZWRieS1ob3N0IixIVj0wLElBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrSFYrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPVNvKHJmKSsiLSIrSFYrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPUJWKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyhXWihpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89QlYoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7RUF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoRUEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1daKHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KEJWKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9REEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoS1opKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPURBKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKEVBLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9REEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShFQSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPURBKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSkscz1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhcyYmLTEhPXIuaW5kZXhPZihzKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gQlYobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24gV1oobix0KXtuLmlkfHwobi5pZD1gJHtLWn0tJHt0fS0ke0hWKyt9YCl9dmFyIEFBPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgVGUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgVGUsdGhpcy5jaGFuZ2U9bmV3IFRlLHQgaW5zdGFuY2VvZiBjbCYmdC5jaGFuZ2VzLnN1YnNjcmliZShlPT57aWYodGhpcy5fYWN0aXZlSXRlbSl7bGV0IHI9ZS50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9hY3RpdmVJdGVtKTtyPi0xJiZyIT09dGhpcy5fYWN0aXZlSXRlbUluZGV4JiYodGhpcy5fYWN0aXZlSXRlbUluZGV4PXIpfX0pfXNraXBQcmVkaWNhdGUodCl7cmV0dXJuIHRoaXMuX3NraXBQcmVkaWNhdGVGbj10LHRoaXN9d2l0aFdyYXAodD0hMCl7cmV0dXJuIHRoaXMuX3dyYXA9dCx0aGlzfXdpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKHQ9ITApe3JldHVybiB0aGlzLl92ZXJ0aWNhbD10LHRoaXN9d2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0KXtyZXR1cm4gdGhpcy5faG9yaXpvbnRhbD10LHRoaXN9d2l0aEFsbG93ZWRNb2RpZmllcktleXModCl7cmV0dXJuIHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9dCx0aGlzfXdpdGhUeXBlQWhlYWQodD0yMDApe3JldHVybiB0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249dGhpcy5fbGV0dGVyS2V5U3RyZWFtLnBpcGUoTnQoZT0+dGhpcy5fcHJlc3NlZExldHRlcnMucHVzaChlKSksQXIodCksSGUoKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wKSxCKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgcj0xO3I8aS5sZW5ndGgrMTtyKyspe2xldCBvPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrciklaS5sZW5ndGgscz1pW29dO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4ocykmJjA9PT1zLmdldExhYmVsKCkudG9VcHBlckNhc2UoKS50cmltKCkuaW5kZXhPZihlKSl7dGhpcy5zZXRBY3RpdmVJdGVtKG8pO2JyZWFrfX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXX0pLHRoaXN9d2l0aEhvbWVBbmRFbmQodD0hMCl7cmV0dXJuIHRoaXMuX2hvbWVBbmRFbmQ9dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fYWN0aXZlSXRlbTt0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0odCksdGhpcy5fYWN0aXZlSXRlbSE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX1vbktleWRvd24odCl7bGV0IGU9dC5rZXlDb2RlLHI9WyJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Il0uZXZlcnkobz0+IXRbb118fHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXMuaW5kZXhPZihvKT4tMSk7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4gdm9pZCB0aGlzLnRhYk91dC5uZXh0KCk7Y2FzZSA0MDppZih0aGlzLl92ZXJ0aWNhbCYmcil7dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM4OmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM5OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOnRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNzppZih0aGlzLl9ob3Jpem9udGFsJiZyKXsicnRsIj09PXRoaXMuX2hvcml6b250YWw/dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpOnRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzY6aWYodGhpcy5faG9tZUFuZEVuZCYmcil7dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNTppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldExhc3RJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2RlZmF1bHQ6cmV0dXJuIHZvaWQoKHJ8fE1yKHQsInNoaWZ0S2V5IikpJiYodC5rZXkmJjE9PT10LmtleS5sZW5ndGg/dGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQodC5rZXkudG9Mb2NhbGVVcHBlckNhc2UoKSk6KGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3KSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpKX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0LnByZXZlbnREZWZhdWx0KCl9Z2V0IGFjdGl2ZUl0ZW1JbmRleCgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtSW5kZXh9Z2V0IGFjdGl2ZUl0ZW0oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbX1pc1R5cGluZygpe3JldHVybiB0aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MH1zZXRGaXJzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLDEpfXNldExhc3RJdGVtQWN0aXZlKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfXNldE5leHRJdGVtQWN0aXZlKCl7dGhpcy5fYWN0aXZlSXRlbUluZGV4PDA/dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgxKX1zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MCYmdGhpcy5fd3JhcD90aGlzLnNldExhc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoLTEpfXVwZGF0ZUFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLGk9Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW09ZVtpXT8/bnVsbCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9aX1fc2V0QWN0aXZlSXRlbUJ5RGVsdGEodCl7dGhpcy5fd3JhcD90aGlzLl9zZXRBY3RpdmVJbldyYXBNb2RlKHQpOnRoaXMuX3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl9X3NldEFjdGl2ZUluV3JhcE1vZGUodCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgaT0xO2k8PWUubGVuZ3RoO2krKyl7bGV0IHI9KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0KmkrZS5sZW5ndGgpJWUubGVuZ3RoO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4oZVtyXSkpcmV0dXJuIHZvaWQgdGhpcy5zZXRBY3RpdmVJdGVtKHIpfX1fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZSh0KXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCx0KX1fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodCxlKXtsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoaVt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oaVt0XSk7KWlmKCFpW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fV9nZXRJdGVtc0FycmF5KCl7cmV0dXJuIHRoaXMuX2l0ZW1zIGluc3RhbmNlb2YgY2w/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfX0sRF89Y2xhc3MgZXh0ZW5kcyBBQXtzZXRBY3RpdmVJdGVtKHQpe3RoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLnNldEluYWN0aXZlU3R5bGVzKCksc3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRBY3RpdmVTdHlsZXMoKX19LEFfPWNsYXNzIGV4dGVuZHMgQUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29yaWdpbj0icHJvZ3JhbSJ9c2V0Rm9jdXNPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtzdXBlci5zZXRBY3RpdmVJdGVtKHQpLHRoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLmZvY3VzKHRoaXMuX29yaWdpbil9fSxJXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtPWV9aXNEaXNhYmxlZChlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hIShuLm9mZnNldFdpZHRofHxuLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0Q2xpZW50UmVjdHMmJm4uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShlKSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZShlKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtsZXQgaT1mdW5jdGlvbihuKXt0cnl7cmV0dXJuIG4uZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24obil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGUpKTtpZihpJiYoLTE9PT1xWihpKXx8IXRoaXMuaXNWaXNpYmxlKGkpKSlyZXR1cm4hMTtsZXQgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz1xWihlKTtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09bzohKCJpZnJhbWUiPT09cnx8Im9iamVjdCI9PT1yfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlPSJpbnB1dCI9PT10JiZuLnR5cGU7cmV0dXJuInRleHQiPT09ZXx8InBhc3N3b3JkIj09PWV8fCJzZWxlY3QiPT09dHx8InRleHRhcmVhIj09PXR9KGUpKSYmKCJhdWRpbyI9PT1yPyEhZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09bzoidmlkZW8iPT09cj8tMSE9PW8mJihudWxsIT09b3x8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8ZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmUudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiFmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXR8fCJzZWxlY3QiPT09dHx8ImJ1dHRvbiI9PT10fHwidGV4dGFyZWEiPT09dH0obil8fGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fFpaKG4pKX0oZSkmJiF0aGlzLmlzRGlzYWJsZWQoZSkmJihpPy5pZ25vcmVWaXNpYmlsaXR5fHx0aGlzLmlzVmlzaWJsZShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBaWihuKXtpZighbi5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PW4udGFiSW5kZXgpcmV0dXJuITE7bGV0IHQ9bi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghdHx8aXNOYU4ocGFyc2VJbnQodCwxMCkpKX1mdW5jdGlvbiBxWihuKXtpZighWloobikpcmV0dXJuIG51bGw7bGV0IHQ9cGFyc2VJbnQobi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4odCk/LTE6dH12YXIgQkM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXJ9Y3JlYXRlKGUsaT0hMSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9oYXNBdHRhY2hlZD0hMSx0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5lbmRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5fZW5hYmxlZD0hMCxvfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1kZXN0cm95KCl7bGV0IHQ9dGhpcy5fc3RhcnRBbmNob3IsZT10aGlzLl9lbmRBbmNob3I7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksdC5yZW1vdmUoKSksZSYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpLGUucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5nKSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkodCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmUodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KHQpKSl9KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke3R9XSwgW2Nka0ZvY3VzUmVnaW9uJHt0fV0sIFtjZGstZm9jdXMtJHt0fV1gKTtyZXR1cm4ic3RhcnQiPT10P2UubGVuZ3RoP2VbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKGUpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGUpKXtsZXQgaT10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlKTtyZXR1cm4gaT8uZm9jdXModCksISFpfXJldHVybiBlLmZvY3VzKHQpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtsZXQgZT10LmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsdCksdC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCxlKXt0P2Uuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTplLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKHQpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUodCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKHQpfX0oZSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihJXyksUihwdCksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIFZDKG4pe3JldHVybiAwPT09bi5idXR0b25zfHwwPT09bi5vZmZzZXRYJiYwPT09bi5vZmZzZXRZfWZ1bmN0aW9uIEhDKG4pe2xldCB0PW4udG91Y2hlcyYmbi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzJiZuLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIXR8fC0xIT09dC5pZGVudGlmaWVyfHxudWxsIT10LnJhZGl1c1gmJjEhPT10LnJhZGl1c1h8fG51bGwhPXQucmFkaXVzWSYmMSE9PXQucmFkaXVzWSl9bmV3IHNlKCJGT0NVU19UUkFQX0lORVJUX1NUUkFURUdZIik7dmFyIFJUZT1uZXcgc2UoImNkay1pbnB1dC1tb2RhbGl0eS1kZXRlY3Rvci1vcHRpb25zIiksT1RlPXtpZ25vcmVLZXlzOlsxOCwxNywyMjQsOTEsMTZdfSxUXz1Ocyh7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksa1RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IFZyKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPXM9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKGE9PmE9PT1zLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb25Nb3VzZWRvd249cz0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChWQyhzKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9dmMocykpfSx0aGlzLl9vblRvdWNoc3RhcnQ9cz0+e0hDKHMpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb3B0aW9ucz17Li4uT1RlLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKENhKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShkaSgpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLFRfKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sVF8pLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKX0pfWdldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RhbGl0eS5jb21wbGV0ZSgpLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5ZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQpLFIoUlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxGVGU9bmV3IHNlKCJsaXZlQW5ub3VuY2VyRWxlbWVudCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxMVGU9bmV3IHNlKCJMSVZFX0FOTk9VTkNFUl9ERUZBVUxUX09QVElPTlMiKSxVQz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX25nWm9uZT1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPW8sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9saXZlRWxlbWVudD1lfHx0aGlzLl9jcmVhdGVMaXZlRWxlbWVudCgpfWFubm91bmNlKGUsLi4uaSl7bGV0IG8scyxyPXRoaXMuX2RlZmF1bHRPcHRpb25zO3JldHVybiAxPT09aS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgaVswXT9zPWlbMF06W28sc109aSx0aGlzLmNsZWFyKCksY2xlYXJUaW1lb3V0KHRoaXMuX3ByZXZpb3VzVGltZW91dCksb3x8KG89ciYmci5wb2xpdGVuZXNzP3IucG9saXRlbmVzczoicG9saXRlIiksbnVsbD09cyYmciYmKHM9ci5kdXJhdGlvbiksdGhpcy5fbGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLG8pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2UoYT0+dGhpcy5fY3VycmVudFJlc29sdmU9YSkpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIHMmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLHMpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEZUZSw4KSxSKHB0KSxSKEJ0KSxSKExUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQlRlPW5ldyBzZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksVEE9TnMoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHpyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgVGUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1hPT57Zm9yKGxldCBjPXZjKGEpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PWEudHlwZT90aGlzLl9vbkZvY3VzKGEsYyk6dGhpcy5fb25CbHVyKGEsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1zPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1jYShlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4ganQobnVsbCk7bGV0IG89TUEocil8fHRoaXMuX2dldERvY3VtZW50KCkscz10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYocylyZXR1cm4gaSYmKHMuY2hlY2tDaGlsZHJlbj0hMCkscy5zdWJqZWN0O2xldCBhPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgVGUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1jYShlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89Y2EoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFthLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChhLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPXZjKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsVEEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUob3QodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixUQSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocHQpLFIodWkpLFIoa1RlKSxSKEJ0LDgpLFIoQlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSwkWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgR31nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh6cikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxZWj0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLFhaPSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsVlY9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIscVY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPVNvKG5tKS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShWVixZWixYWiksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQoVlYsWVopOjI9PT1pJiZlLmFkZChWVixYWil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHVpKSxSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUF89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHFWKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3pwXX0pLG59KSgpLFZUZT1uZXcgc2UoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhCdCl9fSksVVRlPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLGlyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRyxlKXtsZXQgcj1lLmRvY3VtZW50RWxlbWVudD9lLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbDt0aGlzLnZhbHVlPWZ1bmN0aW9uKG4pe2xldCB0PW4/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PXQmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP1VUZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT10PyJydGwiOiJsdHIifSgoZS5ib2R5P2UuYm9keS5kaXI6bnVsbCl8fHJ8fCJsdHIiKX19bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFZUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksV3A9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGpUZShuLHQpe2lmKDEmbiYmTigwLCJtYXQtcHNldWRvLWNoZWNrYm94Iiw0KSwyJm4pe2xldCBlPU0oKTtiKCJzdGF0ZSIsZS5zZWxlY3RlZD8iY2hlY2tlZCI6InVuY2hlY2tlZCIpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCl9fWZ1bmN0aW9uIEdUZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNSksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIigiLGUuZ3JvdXAubGFiZWwsIikiKX19dmFyIFdUZT1bIioiXSxpSj0obmV3IEtsKCIxNC4yLjciKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5TVEFOREFSRF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIixuLkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixuLkFDQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMSwxKSIsbi5TSEFSUF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC42LDEpIixufSkoKSkscko9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uQ09NUExFWD0iMzc1bXMiLG4uRU5URVJJTkc9IjIyNW1zIixuLkVYSVRJTkc9IjE5NW1zIixufSkoKSxZVGU9bmV3IHNlKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxkbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9zYW5pdHlDaGVja3M9aSx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsZS5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2NoZWNrSXNFbmFibGVkKGUpe3JldHVybiFMQygpJiYoImJvb2xlYW4iPT10eXBlb2YgdGhpcy5fc2FuaXR5Q2hlY2tzP3RoaXMuX3Nhbml0eUNoZWNrczohIXRoaXMuX3Nhbml0eUNoZWNrc1tlXSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocVYpLFIoWVRlLDgpLFIoQnQpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbV3AsV3BdfSksbn0pKCk7ZnVuY3Rpb24gZ28obil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPVd0KHQpfX19ZnVuY3Rpb24gcHMobix0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fWdldCBjb2xvcigpe3JldHVybiB0aGlzLl9jb2xvcn1zZXQgY29sb3IoZSl7bGV0IGk9ZXx8dGhpcy5kZWZhdWx0Q29sb3I7aSE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtJHt0aGlzLl9jb2xvcn1gKSxpJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LSR7aX1gKSx0aGlzLl9jb2xvcj1pKX19fWZ1bmN0aW9uIExzKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QodCl9fX1mdW5jdGlvbiBxcChuLHQ9MCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLl90YWJJbmRleD10LHRoaXMuZGVmYXVsdFRhYkluZGV4PXR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/LTE6dGhpcy5fdGFiSW5kZXh9c2V0IHRhYkluZGV4KGUpe3RoaXMuX3RhYkluZGV4PW51bGwhPWU/UGkoZSk6dGhpcy5kZWZhdWx0VGFiSW5kZXh9fX1mdW5jdGlvbiBSQShuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuZXJyb3JTdGF0ZT0hMX11cGRhdGVFcnJvclN0YXRlKCl7bGV0IHQ9dGhpcy5lcnJvclN0YXRlLG89KHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXJ8fHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcikuaXNFcnJvclN0YXRlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLmNvbnRyb2w6bnVsbCx0aGlzLl9wYXJlbnRGb3JtR3JvdXB8fHRoaXMuX3BhcmVudEZvcm0pO28hPT10JiYodGhpcy5lcnJvclN0YXRlPW8sdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX19fWZ1bmN0aW9uIE9BKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9W10sdGhpcy5pbml0aWFsaXplZD1uZXcgUXQoZT0+e3RoaXMuX2lzSW5pdGlhbGl6ZWQ/dGhpcy5fbm90aWZ5U3Vic2NyaWJlcihlKTp0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMucHVzaChlKX0pfV9tYXJrSW5pdGlhbGl6ZWQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5mb3JFYWNoKHRoaXMuX25vdGlmeVN1YnNjcmliZXIpLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1udWxsfV9ub3RpZnlTdWJzY3JpYmVyKHQpe3QubmV4dCgpLHQuY29tcGxldGUoKX19fW5ldyBzZSgiTUFUX0RBVEVfTE9DQUxFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhyZCl9fSksbmV3IHNlKCJtYXQtZGF0ZS1mb3JtYXRzIik7dmFyIFJfPSgoKT0+e2NsYXNzIG57aXNFcnJvclN0YXRlKGUsaSl7cmV0dXJuISEoZSYmZS5pbnZhbGlkJiYoZS50b3VjaGVkfHxpJiZpLnN1Ym1pdHRlZCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxlSj17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sWVY9TnMoe3Bhc3NpdmU6ITB9KSx0Sj1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxuSj1bIm1vdXNldXAiLCJtb3VzZWxlYXZlIiwidG91Y2hlbmQiLCJ0b3VjaGNhbmNlbCJdLG9KPW5ldyBzZSgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLGVzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1jYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uZUosLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgcz1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUsciksYT10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLHUuc3R5bGUubGVmdD1hLXMrInB4Iix1LnN0eWxlLnRvcD1sLXMrInB4Iix1LnN0eWxlLmhlaWdodD0yKnMrInB4Iix1LnN0eWxlLndpZHRoPTIqcysicHgiLG51bGwhPWkuY29sb3ImJih1LnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSx1LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHUpO2xldCBkPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHUpLGg9ZC50cmFuc2l0aW9uRHVyYXRpb24sZj0ibm9uZSI9PT1kLnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWh8fCIwcywgMHMiPT09aCxtPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLHUsaSxmKTt1LnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIsbS5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bSk7bGV0IEM9bnVsbDtyZXR1cm4hZiYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IF89KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24obSkseT0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZShtKTt1LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLF8pLHUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseSksQz17b25UcmFuc2l0aW9uRW5kOl8sb25UcmFuc2l0aW9uQ2FuY2VsOnl9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQobSxDKSwoZnx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKG0pLG19ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi5lSiwuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1jYSh0KTshZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdGhpcy5fcmVnaXN0ZXJFdmVudHModEopKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKG5KKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSEwKX1fZmluaXNoUmlwcGxlVHJhbnNpdGlvbih0KXswPT09dC5zdGF0ZT90aGlzLl9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpOjI9PT10LnN0YXRlJiZ0aGlzLl9kZXN0cm95UmlwcGxlKHQpfV9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpe2xldCBlPXQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlLHtwZXJzaXN0ZW50Oml9PXQuY29uZmlnO3Quc3RhdGU9MSwhaSYmKCFlfHwhdGhpcy5faXNQb2ludGVyRG93bikmJnQuZmFkZU91dCgpfV9kZXN0cm95UmlwcGxlKHQpe2xldCBlPXRoaXMuX2FjdGl2ZVJpcHBsZXMuZ2V0KHQpPz9udWxsO3RoaXMuX2FjdGl2ZVJpcHBsZXMuZGVsZXRlKHQpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksdD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHQuc3RhdGU9MyxudWxsIT09ZSYmKHQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixlLm9uVHJhbnNpdGlvbkVuZCksdC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25jYW5jZWwiLGUub25UcmFuc2l0aW9uQ2FuY2VsKSksdC5lbGVtZW50LnJlbW92ZSgpfV9vbk1vdXNlZG93bih0KXtsZXQgZT1WQyh0KSxpPXRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCs4MDA7IXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIWUmJiFpJiYodGhpcy5faXNQb2ludGVyRG93bj0hMCx0aGlzLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpKX1fb25Ub3VjaFN0YXJ0KHQpe2lmKCF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFIQyh0KSl7dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHRoaXMuX2lzUG9pbnRlckRvd249ITA7bGV0IGU9dC5jaGFuZ2VkVG91Y2hlcztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0aGlzLmZhZGVJblJpcHBsZShlW2ldLmNsaWVudFgsZVtpXS5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpfX1fb25Qb2ludGVyVXAoKXshdGhpcy5faXNQb2ludGVyRG93bnx8KHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+eyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYoMT09PXQuc3RhdGV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiYwPT09dC5zdGF0ZSkmJnQuZmFkZU91dCgpfSkpfV9yZWdpc3RlckV2ZW50cyh0KXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0LmZvckVhY2goZT0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLFlWKX0pfSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXt0aGlzLl90cmlnZ2VyRWxlbWVudCYmKHRKLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQmJm5KLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pKX19KHRoaXMsaSxlLHIpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfWZhZGVPdXRBbGwoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsKCl9ZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpfWdldCByaXBwbGVDb25maWcoKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246ey4uLnRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uLC4uLiJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlP3tlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9Ont9LC4uLnRoaXMuYW5pbWF0aW9ufSx0ZXJtaW5hdGVPblBvaW50ZXJVcDp0aGlzLl9nbG9iYWxPcHRpb25zLnRlcm1pbmF0ZU9uUG9pbnRlclVwfX1nZXQgcmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfV9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9bGF1bmNoKGUsaT0wLHIpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoZSxpLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5yfSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCx7Li4udGhpcy5yaXBwbGVDb25maWcsLi4uZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHB0KSx3KHVpKSx3KG9KLDgpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtcmlwcGxlIiwiIl0sWyIiLCJtYXRSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtcmlwcGxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsaS51bmJvdW5kZWQpfSxpbnB1dHM6e2NvbG9yOlsibWF0UmlwcGxlQ29sb3IiLCJjb2xvciJdLHVuYm91bmRlZDpbIm1hdFJpcHBsZVVuYm91bmRlZCIsInVuYm91bmRlZCJdLGNlbnRlcmVkOlsibWF0UmlwcGxlQ2VudGVyZWQiLCJjZW50ZXJlZCJdLHJhZGl1czpbIm1hdFJpcHBsZVJhZGl1cyIsInJhZGl1cyJdLGFuaW1hdGlvbjpbIm1hdFJpcHBsZUFuaW1hdGlvbiIsImFuaW1hdGlvbiJdLGRpc2FibGVkOlsibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHRyaWdnZXI6WyJtYXRSaXBwbGVUcmlnZ2VyIiwidHJpZ2dlciJdfSxleHBvcnRBczpbIm1hdFJpcHBsZSJdfSksbn0pKCkseGM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLFpUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2FuaW1hdGlvbk1vZGU9ZSx0aGlzLnN0YXRlPSJ1bmNoZWNrZWQiLHRoaXMuZGlzYWJsZWQ9ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wc2V1ZG8tY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtcHNldWRvLWNoZWNrYm94Il0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLCJpbmRldGVybWluYXRlIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQiLCJjaGVja2VkIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIixpLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WycubWF0LXBzZXVkby1jaGVja2JveHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JvcmRlcjoycHggc29saWQ7Ym9yZGVyLXJhZGl1czoycHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSxiYWNrZ3JvdW5kLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO2NvbnRlbnQ6IiI7Ym9yZGVyLWJvdHRvbToycHggc29saWQgY3VycmVudENvbG9yO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3gubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjVweDtsZWZ0OjFweDt3aWR0aDoxMHB4O29wYWNpdHk6MTtib3JkZXItcmFkaXVzOjJweH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt0b3A6Mi40cHg7bGVmdDoxcHg7d2lkdGg6OHB4O2hlaWdodDozcHg7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7b3BhY2l0eToxO2JveC1zaXppbmc6Y29udGVudC1ib3h9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSlRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbl19KSxufSkoKSxqQz1uZXcgc2UoIk1BVF9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCIpLEdDPShnbyhjbGFzc3t9KSxuZXcgc2UoIk1hdE9wdGdyb3VwIikpLCRUZT0wLHpDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0hMSl7dGhpcy5zb3VyY2U9dCx0aGlzLmlzVXNlcklucHV0PWV9fSxlRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYXJlbnQ9cix0aGlzLmdyb3VwPW8sdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5pZD0ibWF0LW9wdGlvbi0iKyRUZSsrLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZX1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQubXVsdGlwbGV9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmRpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSl9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4hKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlzYWJsZVJpcHBsZSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9Z2V0IHZpZXdWYWx1ZSgpe3JldHVybih0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnRleHRDb250ZW50fHwiIikudHJpbSgpfXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWRlc2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKSl9Zm9jdXMoZSxpKXtsZXQgcj10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiByLmZvY3VzJiZyLmZvY3VzKGkpfXNldEFjdGl2ZVN0eWxlcygpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2V0SW5hY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldExhYmVsKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfV9oYW5kbGVLZXlkb3duKGUpeygxMz09PWUua2V5Q29kZXx8MzI9PT1lLmtleUNvZGUpJiYhTXIoZSkmJih0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9X3NlbGVjdFZpYUludGVyYWN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkfHwhdGhpcy5tdWx0aXBsZSYmbnVsbH1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHRoaXMuX3NlbGVjdGVkKXtsZXQgZT10aGlzLnZpZXdWYWx1ZTtlIT09dGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmKHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9ZSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KGU9ITEpe3RoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgekModGhpcyxlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCksdWE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGVEZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhqQyw4KSx3KEdDLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1vcHRpb24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pLDImZSYmKEFhKCJpZCIsaS5pZCksemUoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1zZWxlY3RlZCIsaS5fZ2V0QXJpYVNlbGVjdGVkKCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJtYXQtc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtb3B0aW9uLW11bHRpcGxlIixpLm11bHRpcGxlKSgibWF0LWFjdGl2ZSIsaS5hY3RpdmUpKCJtYXQtb3B0aW9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGV4cG9ydEFzOlsibWF0T3B0aW9uIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6V1RlLGRlY2xzOjUsdmFyczo0LGNvbnN0czpbWyJjbGFzcyIsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIiw0LCJuZ0lmIl0sWzEsIm1hdC1vcHRpb24tdGV4dCJdLFsiY2xhc3MiLCJjZGstdmlzdWFsbHktaGlkZGVuIiw0LCJuZ0lmIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtb3B0aW9uLXJpcHBsZSIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIl0sWzEsImNkay12aXN1YWxseS1oaWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxqVGUsMSwyLCJtYXQtcHNldWRvLWNoZWNrYm94IiwwKSxnKDEsInNwYW4iLDEpLE5uKDIpLHYoKSxFKDMsR1RlLDIsMSwic3BhbiIsMiksTig0LCJkaXYiLDMpKSwyJmUmJihiKCJuZ0lmIixpLm11bHRpcGxlKSx4KDMpLGIoIm5nSWYiLGkuZ3JvdXAmJmkuZ3JvdXAuX2luZXJ0KSx4KDEpLGIoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlZHx8aS5kaXNhYmxlUmlwcGxlKSl9LGRlcGVuZGVuY2llczpbZXMsWGUsWlRlXSxzdHlsZXM6WycubWF0LW9wdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtb3B0aW9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0aW9uIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVdey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MzJweH0ubWF0LW9wdGlvbi5tYXQtYWN0aXZlOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17b3BhY2l0eTouNX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMHB4O2hlaWdodDowO2JvcmRlci1ib3R0b206c29saWQgMTBweDtib3JkZXItcmFkaXVzOjEwcHh9W2Rpcj1ydGxdIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6OmFmdGVye3JpZ2h0OmF1dG87bGVmdDoxNnB4fS5tYXQtb3B0aW9uLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1vcHRpb24gLm1hdC1vcHRpb24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gV0Mobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IHM9MDtzPG4rMTtzKyspaVtzXS5ncm91cCYmaVtzXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiBrQShuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBPXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsa2UsZG4sSlRlXX0pLG59KSgpLHNKPVsibWF0LWJ1dHRvbiIsIiJdLGFKPVsiKiJdLGlEZT1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxyRGU9cHMoZ28oTHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksJG49KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJEZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuaXNSb3VuZEJ1dHRvbj10aGlzLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHRoaXMuaXNJY29uQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IobGV0IG8gb2YgaURlKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKG8pJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQobyk7ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLmUpe3JldHVybiBlLnNvbWUoaT0+dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHpyKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoZXMsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yaXBwbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRkE9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGksZSxyKSx0aGlzLl9uZ1pvbmU9byx0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHM9cz0+e3RoaXMuZGlzYWJsZWQmJihzLnByZXZlbnREZWZhdWx0KCkscy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9KTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6ciksdyhBZSksdyhMaSw4KSx3KHB0LDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhIiwibWF0LWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJhIiwibWF0LWZhYiIsIiJdLFsiYSIsIm1hdC1taW5pLWZhYiIsIiJdLFsiYSIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mbGF0LWJ1dHRvbiIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUmk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3hjLGRuLGRuXX0pLG59KSgpLGtfPWNsYXNze30sTkE9Y2xhc3MgZXh0ZW5kcyBrX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIFd5KHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6anQodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319LExBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXModCxlLGkscixvKXt0LmZvckVhY2hPcGVyYXRpb24oKHMsYSxsKT0+e2xldCBjLHU7bnVsbD09cy5wcmV2aW91c0luZGV4PyhjPXRoaXMuX2luc2VydFZpZXcoKCk9PmkocyxhLGwpLGwsZSxyKHMpKSx1PWM/MTowKTpudWxsPT1sPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoYSxlKSx1PTMpOihjPXRoaXMuX21vdmVWaWV3KGEsbCxlLHIocykpLHU9MiksbyYmbyh7Y29udGV4dDpjPy5jb250ZXh0LG9wZXJhdGlvbjp1LHJlY29yZDpzfSl9KX1kZXRhY2goKXtmb3IobGV0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsaSxyKXtsZXQgbz10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsaSk7aWYobylyZXR1cm4gdm9pZChvLmNvbnRleHQuJGltcGxpY2l0PXIpO2xldCBzPXQoKTtyZXR1cm4gaS5jcmVhdGVFbWJlZGRlZFZpZXcocy50ZW1wbGF0ZVJlZixzLmNvbnRleHQscy5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyh0LGUpe2xldCBpPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGksZSl9X21vdmVWaWV3KHQsZSxpLHIpe2xldCBvPWkuZ2V0KHQpO3JldHVybiBpLm1vdmUobyxlKSxvLmNvbnRleHQuJGltcGxpY2l0PXIsb31fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2xldCBpPWUuaW5kZXhPZih0KTstMT09PWk/dC5kZXN0cm95KCk6ZS5yZW1vdmUoaSl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKHQsZSl7bGV0IGk9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBpJiZlLmluc2VydChpLHQpLGl8fG51bGx9fSxGXz1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExLGUsaT0hMCxyKXt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPWksdGhpcy5jb21wYXJlV2l0aD1yLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5jaGFuZ2VkPW5ldyBUZSxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKG89PnRoaXMuX21hcmtTZWxlY3RlZChvKSk6dGhpcy5fbWFya1NlbGVjdGVkKGVbMF0pLHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aD0wKX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD1BcnJheS5mcm9tKHRoaXMuX3NlbGVjdGlvbi52YWx1ZXMoKSkpLHRoaXMuX3NlbGVjdGVkfXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX21hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1zZXRTZWxlY3Rpb24oLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpO2xldCBlPXRoaXMuc2VsZWN0ZWQsaT1uZXcgU2V0KHQpO3QuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpLGUuZmlsdGVyKG89PiFpLmhhcyhvKSkuZm9yRWFjaChvPT50aGlzLl91bm1hcmtTZWxlY3RlZChvKSk7bGV0IHI9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxyfXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIodD0hMCl7dGhpcy5fdW5tYXJrQWxsKCk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0JiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWlzU2VsZWN0ZWQodCl7aWYodGhpcy5jb21wYXJlV2l0aCl7Zm9yKGxldCBlIG9mIHRoaXMuX3NlbGVjdGlvbilpZih0aGlzLmNvbXBhcmVXaXRoKGUsdCkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5oYXModCl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9aGFzVmFsdWUoKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9c29ydCh0KXt0aGlzLl9tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX1pc011bHRpcGxlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMuY2hhbmdlZC5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX1fbWFya1NlbGVjdGVkKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLmlzU2VsZWN0ZWQodCl8fHRoaXMuX3NlbGVjdGlvbi5hZGQodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX3NlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCkmJih0aGlzLl9zZWxlY3Rpb24uZGVsZXRlKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9kZXNlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtBbGwoKXt0aGlzLmlzRW1wdHkoKXx8dGhpcy5fc2VsZWN0aW9uLmZvckVhY2godD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpfV92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCl7fV9oYXNRdWV1ZWRDaGFuZ2VzKCl7cmV0dXJuISghdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgmJiF0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGgpfX0sUVY9bmV3IHNlKCJfVmlld1JlcGVhdGVyIiksb0RlPVsiY29udGVudFdyYXBwZXIiXSxzRGU9WyIqIl0sZEo9bmV3IHNlKCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpO2Z1bmN0aW9uIGFEZShuKXtyZXR1cm4gbi5fc2Nyb2xsU3RyYXRlZ3l9dmFyIHBKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtU2l6ZT0yMCx0aGlzLl9taW5CdWZmZXJQeD0xMDAsdGhpcy5fbWF4QnVmZmVyUHg9MjAwLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgVGUsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShkaSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pfWF0dGFjaCh0KXt0aGlzLl92aWV3cG9ydD10LHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodCxlLGkpe3RoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRhTGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJlZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleCh0LGUpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zY3JvbGxUb09mZnNldCh0KnRoaXMuX2l0ZW1TaXplLGUpfV91cGRhdGVUb3RhbENvbnRlbnRTaXplKCl7IXRoaXMuX3ZpZXdwb3J0fHx0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2xldCB0PXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxlPXtzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZH0saT10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxyPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSxvPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSxzPXRoaXMuX2l0ZW1TaXplPjA/by90aGlzLl9pdGVtU2l6ZTowO2lmKGUuZW5kPnIpe2xldCBsPU1hdGguY2VpbChpL3RoaXMuX2l0ZW1TaXplKSxjPU1hdGgubWF4KDAsTWF0aC5taW4ocyxyLWwpKTtzIT1jJiYocz1jLG89Yyp0aGlzLl9pdGVtU2l6ZSxlLnN0YXJ0PU1hdGguZmxvb3IocykpLGUuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4ocixlLnN0YXJ0K2wpKX1sZXQgYT1vLWUuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYoYTx0aGlzLl9taW5CdWZmZXJQeCYmMCE9ZS5zdGFydCl7bGV0IGw9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1hKS90aGlzLl9pdGVtU2l6ZSk7ZS5zdGFydD1NYXRoLm1heCgwLGUuc3RhcnQtbCksZS5lbmQ9TWF0aC5taW4ocixNYXRoLmNlaWwocysoaSt0aGlzLl9taW5CdWZmZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2xldCBsPWUuZW5kKnRoaXMuX2l0ZW1TaXplLShvK2kpO2lmKGw8dGhpcy5fbWluQnVmZmVyUHgmJmUuZW5kIT1yKXtsZXQgYz1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWwpL3RoaXMuX2l0ZW1TaXplKTtjPjAmJihlLmVuZD1NYXRoLm1pbihyLGUuZW5kK2MpLGUuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHMtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNpemUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoZSksdGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmUuc3RhcnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKHMpKX19KHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5faXRlbVNpemV9c2V0IGl0ZW1TaXplKGUpe3RoaXMuX2l0ZW1TaXplPVBpKGUpfWdldCBtaW5CdWZmZXJQeCgpe3JldHVybiB0aGlzLl9taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoZSl7dGhpcy5fbWluQnVmZmVyUHg9UGkoZSl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21heEJ1ZmZlclB4fXNldCBtYXhCdWZmZXJQeChlKXt0aGlzLl9tYXhCdWZmZXJQeD1QaShlKX1uZ09uQ2hhbmdlcygpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsIml0ZW1TaXplIiwiIl1dLGlucHV0czp7aXRlbVNpemU6Iml0ZW1TaXplIixtaW5CdWZmZXJQeDoibWluQnVmZmVyUHgiLG1heEJ1ZmZlclB4OiJtYXhCdWZmZXJQeCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6ZEosdXNlRmFjdG9yeTphRGUsZGVwczpbcmkoKCk9Pm4pXX1dKSx6dF19KSxufSkoKSxpbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX3Njcm9sbGVkPW5ldyBUZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9cn1yZWdpc3RlcihlKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGUpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGUsZS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoZSkpKX1kZXJlZ2lzdGVyKGUpe2xldCBpPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoZSk7aSYmKGkudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGUpKX1zY3JvbGxlZChlPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBRdChpPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2xldCByPWU+MD90aGlzLl9zY3JvbGxlZC5waXBlKHpjKGUpKS5zdWJzY3JpYmUoaSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGkpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntyLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6anQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGUsaSk9PnRoaXMuZGVyZWdpc3RlcihpKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGUsaSl7bGV0IHI9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoaSkucGlwZShIZShvPT4hb3x8ci5pbmRleE9mKG8pPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgocixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyxlKSYmaS5wdXNoKG8pfSksaX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZSxpKXtsZXQgcj1jYShpKSxvPWUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYocj09bylyZXR1cm4hMH13aGlsZShyPXIucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bGkodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKHVpKSxSKEJ0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxZcD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuZWxlbWVudFJlZj1lLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1pLHRoaXMubmdab25lPXIsdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgUXQocz0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmxpKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShzKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1lLmxlZnQmJihlLmxlZnQ9cj9lLmVuZDplLnN0YXJ0KSxudWxsPT1lLnJpZ2h0JiYoZS5yaWdodD1yP2Uuc3RhcnQ6ZS5lbmQpLG51bGwhPWUuYm90dG9tJiYoZS50b3A9aS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQtZS5ib3R0b20pLHImJjAhPXdfKCk/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUubGVmdCksMj09d18oKT9lLmxlZnQ9ZS5yaWdodDoxPT13XygpJiYoZS5sZWZ0PWUucmlnaHQ/LWUucmlnaHQ6ZS5yaWdodCkpOm51bGwhPWUucmlnaHQmJihlLmxlZnQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGUpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt3QSgpP2kuc2Nyb2xsVG8oZSk6KG51bGwhPWUudG9wJiYoaS5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKGkuc2Nyb2xsTGVmdD1lLmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpPSJsZWZ0IixyPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09ZSlyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWUpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2xldCBzPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPXM/cjppOiJlbmQiPT1lJiYoZT1zP2k6cikscyYmMj09d18oKT9lPT1pP28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnQ6by5zY3JvbGxMZWZ0OnMmJjE9PXdfKCk/ZT09aT9vLnNjcm9sbExlZnQrby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoOi1vLnNjcm9sbExlZnQ6ZT09aT9vLnNjcm9sbExlZnQ6by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksbn0pKCksZGE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IFRlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZSh6YyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGNKPW5ldyBzZSgiVklSVFVBTF9TQ1JPTExBQkxFIiksdURlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZcHtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX1tZWFzdXJlVmlld3BvcnRTaXplKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWU/aS5jbGllbnRXaWR0aDppLmNsaWVudEhlaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHBEZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9MTzpmZyxxQz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxhLHIscyksdGhpcy5lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuc2Nyb2xsYWJsZT1jLHRoaXMuX3BsYXRmb3JtPVNvKHVpKSx0aGlzLl9kZXRhY2hlZFN1YmplY3Q9bmV3IFRlLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyBUZSx0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX2FwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBRdCh1PT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShkPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PnUubmV4dChkKSkpKSksdGhpcy5yZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LHRoaXMuX3RvdGFsQ29udGVudFNpemU9MCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iIix0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9IiIsdGhpcy5fcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH0sdGhpcy5fZGF0YUxlbmd0aD0wLHRoaXMuX3ZpZXdwb3J0U2l6ZT0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W10sdGhpcy5fdmlld3BvcnRDaGFuZ2VzPXZuLkVNUFRZLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1sLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihlKXt0aGlzLl9vcmllbnRhdGlvbiE9PWUmJih0aGlzLl9vcmllbnRhdGlvbj1lLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Z2V0IGFwcGVuZE9ubHkoKXtyZXR1cm4gdGhpcy5fYXBwZW5kT25seX1zZXQgYXBwZW5kT25seShlKXt0aGlzLl9hcHBlbmRPbmx5PVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKFZuKG51bGwpLHpjKDAscERlKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGUpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9ZSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUob3QodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGk9PntsZXQgcj1pLmxlbmd0aDtyIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9cix0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnN0YXJ0PT10LnN0YXJ0JiZuLmVuZD09dC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGUpfHwodGhpcy5hcHBlbmRPbmx5JiYoZT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsZS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWUpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoZSxpPSJ0by1zdGFydCIpe2U9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09aT8wOmU7bGV0IG89Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHM9bz8iWCI6IlkiLGw9YHRyYW5zbGF0ZSR7c30oJHtOdW1iZXIoKG8mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqZSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9ZSwidG8tZW5kIj09PWkmJihsKz1gIHRyYW5zbGF0ZSR7c30oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9bCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1sLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGUsaT0iYXV0byIpe2xldCByPXtiZWhhdmlvcjppfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3Iuc3RhcnQ9ZTpyLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhyKX1zY3JvbGxUb0luZGV4KGUsaT0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpO3JldHVybiBpPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9yPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpOnI9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpLE1hdGgubWF4KDAsaShlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCBpLHI9ImxlZnQiLG89InJpZ2h0IixzPSJydGwiPT10aGlzLmRpcj8udmFsdWU7aT0ic3RhcnQiPT1lP3M/bzpyOiJlbmQiPT1lP3M/cjpvOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7bGV0IGE9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGkpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtpXS1hfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7bGV0IGU9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShlKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShlLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGUpe2UmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goZSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtsZXQgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IobGV0IGkgb2YgZSlpKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHB0KSx3KGRKLDgpLHcoaXIsOCksdyhpbSksdyhkYSksdyhjSiw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQob0RlLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpZcCx1c2VGYWN0b3J5Oih0LGUpPT50fHxlLGRlcHM6W1tuZXcgT28sbmV3IGpnKGNKKV0sbl19XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpzRGUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsiY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDAsMSksTm4oMiksdigpLE4oMywiZGl2IiwyKSksMiZlJiYoeCgzKSxPdCgid2lkdGgiLGkuX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixpLl90b3RhbENvbnRlbnRIZWlnaHQpKX0sc3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpzdHJpY3Q7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdUoobix0LGUpe2lmKCFlLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtsZXQgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PW4/InN0YXJ0Ij09PXQ/ci5sZWZ0OnIucmlnaHQ6InN0YXJ0Ij09PXQ/ci50b3A6ci5ib3R0b219dmFyIGhKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl92aWV3UmVwZWF0ZXI9byx0aGlzLl92aWV3cG9ydD1zLHRoaXMudmlld0NoYW5nZT1uZXcgVGUsdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXM9bmV3IFRlLHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKFZuKG51bGwpLHlnKCksdmkoKFtsLGNdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShsLGMpKSxRcygxKSksdGhpcy5fZGlmZmVyPW51bGwsdGhpcy5fbmVlZHNVcGRhdGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBUZSx0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGw9Pnt0aGlzLl9kYXRhPWwsdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUobD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9bCx0aGlzLnZpZXdDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmYS5ydW4oKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQuYXR0YWNoKHRoaXMpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoZSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWUsZnVuY3Rpb24obil7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbm5lY3QmJiEobiBpbnN0YW5jZW9mIFV5KX0oZSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChlKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBOQShXeShlKT9lOkFycmF5LmZyb20oZXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShlKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1lPyhpLHIpPT5lKGkrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxyKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9ZSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPVBpKGUpfW1lYXN1cmVSYW5nZVNpemUoZSxpKXtpZihlLnN0YXJ0Pj1lLmVuZClyZXR1cm4gMDtsZXQgcyxhLHI9ZS5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LG89ZS5lbmQtZS5zdGFydDtmb3IobGV0IGw9MDtsPG87bCsrKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7cz1hPWMucm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IGw9by0xO2w+LTE7bC0tKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7YT1jLnJvb3ROb2Rlc1tjLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBzJiZhP3VKKGksImVuZCIsYSktdUooaSwic3RhcnQiLHMpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7bGV0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7ZT90aGlzLl9hcHBseUNoYW5nZXMoZSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMudmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpeyF0aGlzLl9yZW5kZXJlZFJhbmdlfHwodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChlLGkpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoZSxpKTppKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGUsaSl7cmV0dXJuIGUmJmUuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxpP2kuY29ubmVjdCh0aGlzKTpqdCgpfV91cGRhdGVDb250ZXh0KCl7bGV0IGU9dGhpcy5fZGF0YS5sZW5ndGgsaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2ktLTspe2xldCByPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGkpO3IuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2ksci5jb250ZXh0LmNvdW50PWUsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhyLmNvbnRleHQpLHIuZGV0ZWN0Q2hhbmdlcygpfX1fYXBwbHlDaGFuZ2VzKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci5hcHBseUNoYW5nZXMoZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLChvLHMsYSk9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3MobyxhKSxvPT5vLml0ZW0pLGUuZm9yRWFjaElkZW50aXR5Q2hhbmdlKG89Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChvLmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9by5pdGVtfSk7bGV0IGk9dGhpcy5fZGF0YS5sZW5ndGgscj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO3ItLTspe2xldCBvPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KHIpO28uY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K3Isby5jb250ZXh0LmNvdW50PWksdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhvLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhlKXtlLmZpcnN0PTA9PT1lLmluZGV4LGUubGFzdD1lLmluZGV4PT09ZS5jb3VudC0xLGUuZXZlbj1lLmluZGV4JTI9PTAsZS5vZGQ9IWUuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyhlLGkpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6ZS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6aX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpLHcoUVYpLHcocUMsNCksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpRVix1c2VDbGFzczpMQX1dKV19KSxufSkoKSxTdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksQ2Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1dwLFN1LFdwLFN1XX0pLG59KSgpLFlDPWNsYXNze2F0dGFjaCh0KXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9ZGV0YWNoKCl7bGV0IHQ9dGhpcy5fYXR0YWNoZWRIb3N0O251bGwhPXQmJih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9c2V0QXR0YWNoZWRIb3N0KHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fX0sQ2M9Y2xhc3MgZXh0ZW5kcyBZQ3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29tcG9uZW50PXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXJ9fSxocz1jbGFzcyBleHRlbmRzIFlDe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy50ZW1wbGF0ZVJlZj10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuY29udGV4dD1pLHRoaXMuaW5qZWN0b3I9cn1nZXQgb3JpZ2luKCl7cmV0dXJuIHRoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZn1hdHRhY2godCxlPXRoaXMuY29udGV4dCl7cmV0dXJuIHRoaXMuY29udGV4dD1lLHN1cGVyLmF0dGFjaCh0KX1kZXRhY2goKXtyZXR1cm4gdGhpcy5jb250ZXh0PXZvaWQgMCxzdXBlci5kZXRhY2goKX19LFpWPWNsYXNzIGV4dGVuZHMgWUN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmVsZW1lbnQ9dCBpbnN0YW5jZW9mIEFlP3QubmF0aXZlRWxlbWVudDp0fX0sWHA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW51bGx9aGFzQXR0YWNoZWQoKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfWF0dGFjaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENjPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgaHM/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dGhpcy5hdHRhY2hEb21Qb3J0YWwmJnQgaW5zdGFuY2VvZiBaVj8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaERvbVBvcnRhbCh0KSk6dm9pZCAwfWRldGFjaCgpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfWRpc3Bvc2UoKXt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuZGV0YWNoKCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCksdGhpcy5faXNEaXNwb3NlZD0hMH1zZXREaXNwb3NlRm4odCl7dGhpcy5fZGlzcG9zZUZuPXR9X2ludm9rZURpc3Bvc2VGbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX19LFhDPWNsYXNzIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcigpLHRoaXMub3V0bGV0RWxlbWVudD10LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX2FwcFJlZj1pLHRoaXMuX2RlZmF1bHRJbmplY3Rvcj1yLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXM9PntsZXQgYT1zLmVsZW1lbnQsbD10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLGEpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1zLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+e2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhLGwpfSl9LHRoaXMuX2RvY3VtZW50PW99YXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpe2xldCByLGk9KHQuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfHx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhyPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoaSx0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5pbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oKCk9PnIuZGVzdHJveSgpKSk6KHI9aS5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yfHx6bi5OVUxMKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhyLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e3RoaXMuX2FwcFJlZi52aWV3Q291bnQ+MCYmdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoci5ob3N0Vmlldyksci5kZXN0cm95KCl9KSksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2dldENvbXBvbmVudFJvb3ROb2RlKHIpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHJ9YXR0YWNoVGVtcGxhdGVQb3J0YWwodCl7bGV0IGU9dC52aWV3Q29udGFpbmVyUmVmLGk9ZS5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQse2luamVjdG9yOnQuaW5qZWN0b3J9KTtyZXR1cm4gaS5yb290Tm9kZXMuZm9yRWFjaChyPT50aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQocikpLGkuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT57bGV0IHI9ZS5pbmRleE9mKGkpOy0xIT09ciYmZS5yZW1vdmUocil9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LGl9ZGlzcG9zZSgpe3N1cGVyLmRpc3Bvc2UoKSx0aGlzLm91dGxldEVsZW1lbnQucmVtb3ZlKCl9X2dldENvbXBvbmVudFJvb3ROb2RlKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX19LGZKPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoc3tjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcoeWkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsIiwiIl1dLGV4cG9ydEFzOlsiY2RrUG9ydGFsIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYcHtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLmF0dGFjaGVkPW5ldyBHLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW89PntsZXQgcz1vLmVsZW1lbnQsYT10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7by5zZXRBdHRhY2hlZEhvc3QodGhpcykscy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHMpLHRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9byxzdXBlci5zZXREaXNwb3NlRm4oKCk9PnthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocyxhKX0pfSx0aGlzLl9kb2N1bWVudD1yfWdldCBwb3J0YWwoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9c2V0IHBvcnRhbChlKXt0aGlzLmhhc0F0dGFjaGVkKCkmJiFlJiYhdGhpcy5faXNJbml0aWFsaXplZHx8KHRoaXMuaGFzQXR0YWNoZWQoKSYmc3VwZXIuZGV0YWNoKCksZSYmc3VwZXIuYXR0YWNoKGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWV8fG51bGwpfWdldCBhdHRhY2hlZFJlZigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXtzdXBlci5kaXNwb3NlKCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT1udWxsIT1lLnZpZXdDb250YWluZXJSZWY/ZS52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsbz0oZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jb21wb25lbnQpLHM9aS5jcmVhdGVDb21wb25lbnQobyxpLmxlbmd0aCxlLmluamVjdG9yfHxpLmluamVjdG9yKTtyZXR1cm4gaSE9PXRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocy5ob3N0Vmlldy5yb290Tm9kZXNbMF0pLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+cy5kZXN0cm95KCkpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cyx0aGlzLmF0dGFjaGVkLmVtaXQocyksc31hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlLnRlbXBsYXRlUmVmLGUuY29udGV4dCx7aW5qZWN0b3I6ZS5pbmplY3Rvcn0pO3JldHVybiBzdXBlci5zZXREaXNwb3NlRm4oKCk9PnRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfV9nZXRSb290Tm9kZSgpe2xldCBlPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiBlLm5vZGVUeXBlPT09ZS5FTEVNRU5UX05PREU/ZTplLnBhcmVudE5vZGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pLHcoeWkpLHcoQnQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLGlucHV0czp7cG9ydGFsOlsiY2RrUG9ydGFsT3V0bGV0IiwicG9ydGFsIl19LG91dHB1dHM6e2F0dGFjaGVkOiJhdHRhY2hlZCJ9LGV4cG9ydEFzOlsiY2RrUG9ydGFsT3V0bGV0Il0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHdjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxtSj13QSgpLFZBPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIGU1KG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gZ0oobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4udG9wPGUudG9wfHxuLmJvdHRvbT5lLmJvdHRvbXx8bi5sZWZ0PGUubGVmdHx8bi5yaWdodD5lLnJpZ2h0KX12YXIgb209Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLmF1dG9DbG9zZSl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtlNShlLFt7d2lkdGg6aSxoZWlnaHQ6cixib3R0b206cixyaWdodDppLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpKX19KSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSxoRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX25nWm9uZT1yLHRoaXMubm9vcD0oKT0+bmV3IFZBLHRoaXMuY2xvc2U9cz0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKX19YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXtpZih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pcmV0dXJuO2xldCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXQuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50aGlzLl9jb25maWcudGhyZXNob2xkP3RoaXMuX2RldGFjaCgpOnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dC5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX1kaXNhYmxlKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfWRldGFjaCgpe3RoaXMuZGlzYWJsZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH19KHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIscyksdGhpcy5ibG9jaz0oKT0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfWF0dGFjaCgpe31lbmFibGUoKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fWRpc2FibGUoKXtpZih0aGlzLl9pc0VuYWJsZWQpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPXQuc3R5bGUscj10aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLG89aS5zY3JvbGxCZWhhdmlvcnx8IiIscz1yLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsaS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LGkudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksbUomJihpLnNjcm9sbEJlaGF2aW9yPXIuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iKSx3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksbUomJihpLnNjcm9sbEJlaGF2aW9yPW8sci5zY3JvbGxCZWhhdmlvcj1zKX19X2NhbkJlRW5hYmxlZCgpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiBlLnNjcm9sbEhlaWdodD5pLmhlaWdodHx8ZS5zY3JvbGxXaWR0aD5pLndpZHRofX0odGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCksdGhpcy5yZXBvc2l0aW9uPXM9Pm5ldyBvbSh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fbmdab25lLHMpLHRoaXMuX2RvY3VtZW50PW99fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaW0pLFIoZGEpLFIocHQpLFIoQnQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxEbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyBWQSx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtsZXQgZT1PYmplY3Qua2V5cyh0KTtmb3IobGV0IGkgb2YgZSl2b2lkIDAhPT10W2ldJiYodGhpc1tpXT10W2ldKX19fSx4Sj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fZG9jdW1lbnQ9ZX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCl9YWRkKGUpe3RoaXMucmVtb3ZlKGUpLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaChlKX1yZW1vdmUoZSl7bGV0IGk9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5pbmRleE9mKGUpO2k+LTEmJnRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc3BsaWNlKGksMSksMD09PXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZ0aGlzLmRldGFjaCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZkRlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB4Sntjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUpLHRoaXMuX25nWm9uZT1pLHRoaXMuX2tleWRvd25MaXN0ZW5lcj1yPT57bGV0IG89dGhpcy5fYXR0YWNoZWRPdmVybGF5cztmb3IobGV0IHM9by5sZW5ndGgtMTtzPi0xO3MtLSlpZihvW3NdLl9rZXlkb3duRXZlbnRzLm9ic2VydmVycy5sZW5ndGg+MCl7bGV0IGE9b1tzXS5fa2V5ZG93bkV2ZW50czt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bigoKT0+YS5uZXh0KHIpKTphLm5leHQocik7YnJlYWt9fX1hZGQoZSl7c3VwZXIuYWRkKGUpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lcikpOnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSEwKX1kZXRhY2goKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxtRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcj1vPT57dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD12YyhvKX0sdGhpcy5fY2xpY2tMaXN0ZW5lcj1vPT57bGV0IHM9dmMobyksYT0iY2xpY2siPT09by50eXBlJiZ0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0P3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ6czt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW51bGw7bGV0IGw9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zbGljZSgpO2ZvcihsZXQgYz1sLmxlbmd0aC0xO2M+LTE7Yy0tKXtsZXQgdT1sW2NdO2lmKHUuX291dHNpZGVQb2ludGVyRXZlbnRzLm9ic2VydmVycy5sZW5ndGg8MXx8IXUuaGFzQXR0YWNoZWQoKSljb250aW51ZTtpZih1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHMpfHx1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGEpKWJyZWFrO2xldCBkPXUuX291dHNpZGVQb2ludGVyRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5kLm5leHQobykpOmQubmV4dChvKX19fWFkZChlKXtpZihzdXBlci5hZGQoZSksIXRoaXMuX2lzQXR0YWNoZWQpe2xldCBpPXRoaXMuX2RvY3VtZW50LmJvZHk7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSkpOnRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKGkpLHRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlPWkuc3R5bGUuY3Vyc29yLGkuc3R5bGUuY3Vyc29yPSJwb2ludGVyIix0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSEwKSx0aGlzLl9pc0F0dGFjaGVkPSEwfX1kZXRhY2goKXtpZih0aGlzLl9pc0F0dGFjaGVkKXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKGUuc3R5bGUuY3Vyc29yPXRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSksdGhpcy5faXNBdHRhY2hlZD0hMX19X2FkZEV2ZW50TGlzdGVuZXJzKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxOXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5fY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCl9Z2V0Q29udGFpbmVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fV9jcmVhdGVDb250YWluZXIoKXtsZXQgZT0iY2RrLW92ZXJsYXktY29udGFpbmVyIjtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fExDKCkpe2xldCByPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2V9W3BsYXRmb3JtPSJzZXJ2ZXIiXSwgLiR7ZX1bcGxhdGZvcm09InRlc3QiXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb10ucmVtb3ZlKCl9bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc0xpc3QuYWRkKGUpLExDKCk/aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxUdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1PSExKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fbG9jYXRpb249bCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXUsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgVGUsdGhpcy5fYXR0YWNobWVudHM9bmV3IFRlLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBUZSx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXI9ZD0+dGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KGQpLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXI9ZD0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcChkLnRhcmdldCl9LHRoaXMuX2tleWRvd25FdmVudHM9bmV3IFRlLHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzPW5ldyBUZSxyLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ci5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ci5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXshdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KTtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSx0aGlzLl9jb25maWcuZGlzcG9zZU9uTmF2aWdhdGlvbiYmKHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz10aGlzLl9sb2NhdGlvbi5zdWJzY3JpYmUoKCk9PnRoaXMuZGlzcG9zZSgpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksImZ1bmN0aW9uIj09dHlwZW9mIGU/Lm9uRGVzdHJveSYmZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5kZXRhY2goKSkpfSksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtsZXQgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH1kaXNwb3NlKCl7bGV0IHQ9dGhpcy5oYXNBdHRhY2hlZCgpO3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9ob3N0Py5yZW1vdmUoKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT10aGlzLl9ob3N0PW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZywuLi50fSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfXNldERpcmVjdGlvbih0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZyxkaXJlY3Rpb246dH0sdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpfWFkZFBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITApfXJlbW92ZVBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITEpfWdldERpcmVjdGlvbigpe2xldCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtsZXQgdD10aGlzLl9wYW5lLnN0eWxlO3Qud2lkdGg9bm8odGhpcy5fY29uZmlnLndpZHRoKSx0LmhlaWdodD1ubyh0aGlzLl9jb25maWcuaGVpZ2h0KSx0Lm1pbldpZHRoPW5vKHRoaXMuX2NvbmZpZy5taW5XaWR0aCksdC5taW5IZWlnaHQ9bm8odGhpcy5fY29uZmlnLm1pbkhlaWdodCksdC5tYXhXaWR0aD1ubyh0aGlzLl9jb25maWcubWF4V2lkdGgpLHQubWF4SGVpZ2h0PW5vKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpfV90b2dnbGVQb2ludGVyRXZlbnRzKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyIiOiJub25lIn1fYXR0YWNoQmFja2Ryb3AoKXtsZXQgdD0iY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyI7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9uIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSwhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9iYWNrZHJvcEVsZW1lbnQmJnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0PXRoaXMuX2JhY2tkcm9wRWxlbWVudDtpZih0KXtpZih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHQpO3QuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcil9KSx0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuX2JhY2tkcm9wVGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCl9LDUwMCkpfX1fdG9nZ2xlQ2xhc3Nlcyh0LGUsaSl7bGV0IHI9TV8oZXx8W10pLmZpbHRlcihvPT4hIW8pO3IubGVuZ3RoJiYoaT90LmNsYXNzTGlzdC5hZGQoLi4ucik6dC5jbGFzc0xpc3QucmVtb3ZlKC4uLnIpKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh1bih0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCk9PnsoIXRoaXMuX3BhbmV8fCF0aGlzLl9ob3N0fHwwPT09dGhpcy5fcGFuZS5jaGlsZHJlbi5sZW5ndGgpJiYodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9ob3N0LnJlbW92ZSgpKSx0LnVuc3Vic2NyaWJlKCkpfSl9KX1fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCl7bGV0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX1fZGlzcG9zZUJhY2tkcm9wKHQpe3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKSx0LnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wRWxlbWVudD09PXQmJih0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCkpLHRoaXMuX2JhY2tkcm9wVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9iYWNrZHJvcFRpbWVvdXQpLHRoaXMuX2JhY2tkcm9wVGltZW91dD12b2lkIDApfX0sX0o9ImNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3giLGdEZT0vKFtBLVphLXolXSspJC87ZnVuY3Rpb24gcm0obix0KXtmb3IobGV0IGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYobltlXT10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiB2SihuKXtpZigibnVtYmVyIiE9dHlwZW9mIG4mJm51bGwhPW4pe2xldFt0LGVdPW4uc3BsaXQoZ0RlKTtyZXR1cm4gZSYmInB4IiE9PWU/bnVsbDpwYXJzZUZsb2F0KHQpfXJldHVybiBufHxudWxsfWZ1bmN0aW9uIHlKKG4pe3JldHVybnt0b3A6TWF0aC5mbG9vcihuLnRvcCkscmlnaHQ6TWF0aC5mbG9vcihuLnJpZ2h0KSxib3R0b206TWF0aC5mbG9vcihuLmJvdHRvbSksbGVmdDpNYXRoLmZsb29yKG4ubGVmdCksd2lkdGg6TWF0aC5mbG9vcihuLndpZHRoKSxoZWlnaHQ6TWF0aC5mbG9vcihuLmhlaWdodCl9fXZhciBiSj0iY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiLF9EZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1vfWdsb2JhbCgpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9jc3NQb3NpdGlvbj0ic3RhdGljIix0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5feFBvc2l0aW9uPSIiLHRoaXMuX3hPZmZzZXQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIiLHRoaXMuX2lzRGlzcG9zZWQ9ITF9YXR0YWNoKHQpe2xldCBlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3dpZHRoJiYhZS53aWR0aCYmdC51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl93aWR0aH0pLHRoaXMuX2hlaWdodCYmIWUuaGVpZ2h0JiZ0LnVwZGF0ZVNpemUoe2hlaWdodDp0aGlzLl9oZWlnaHR9KSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoYkopLHRoaXMuX2lzRGlzcG9zZWQ9ITF9dG9wKHQ9IiIpe3JldHVybiB0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fdG9wT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1zdGFydCIsdGhpc31sZWZ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJsZWZ0Iix0aGlzfWJvdHRvbSh0PSIiKXtyZXR1cm4gdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtZW5kIix0aGlzfXJpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJyaWdodCIsdGhpc31zdGFydCh0PSIiKXtyZXR1cm4gdGhpcy5feE9mZnNldD10LHRoaXMuX3hQb3NpdGlvbj0ic3RhcnQiLHRoaXN9ZW5kKHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJlbmQiLHRoaXN9d2lkdGgodD0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfWhlaWdodCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe2hlaWdodDp0fSk6dGhpcy5faGVpZ2h0PXQsdGhpc31jZW50ZXJIb3Jpem9udGFsbHkodD0iIil7cmV0dXJuIHRoaXMubGVmdCh0KSx0aGlzLl94UG9zaXRpb249ImNlbnRlciIsdGhpc31jZW50ZXJWZXJ0aWNhbGx5KHQ9IiIpe3JldHVybiB0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9YXBwbHkoKXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuc3R5bGUsaT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLHt3aWR0aDpyLGhlaWdodDpvLG1heFdpZHRoOnMsbWF4SGVpZ2h0OmF9PWksbD0hKCIxMDAlIiE9PXImJiIxMDB2dyIhPT1yfHxzJiYiMTAwJSIhPT1zJiYiMTAwdnciIT09cyksYz0hKCIxMDAlIiE9PW8mJiIxMDB2aCIhPT1vfHxhJiYiMTAwJSIhPT1hJiYiMTAwdmgiIT09YSksdT10aGlzLl94UG9zaXRpb24sZD10aGlzLl94T2Zmc2V0LHA9InJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmRpcmVjdGlvbixoPSIiLGY9IiIsbT0iIjtsP209ImZsZXgtc3RhcnQiOiJjZW50ZXIiPT09dT8obT0iY2VudGVyIixwP2Y9ZDpoPWQpOnA/ImxlZnQiPT09dXx8ImVuZCI9PT11PyhtPSJmbGV4LWVuZCIsaD1kKTooInJpZ2h0Ij09PXV8fCJzdGFydCI9PT11KSYmKG09ImZsZXgtc3RhcnQiLGY9ZCk6ImxlZnQiPT09dXx8InN0YXJ0Ij09PXU/KG09ImZsZXgtc3RhcnQiLGg9ZCk6KCJyaWdodCI9PT11fHwiZW5kIj09PXUpJiYobT0iZmxleC1lbmQiLGY9ZCksdC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9bD8iMCI6aCx0Lm1hcmdpblRvcD1jPyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9bD8iMCI6ZixlLmp1c3RpZnlDb250ZW50PW0sZS5hbGlnbkl0ZW1zPWM/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9ZGlzcG9zZSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9vdmVybGF5UmVmKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudCxpPWUuc3R5bGU7ZS5jbGFzc0xpc3QucmVtb3ZlKGJKKSxpLmp1c3RpZnlDb250ZW50PWkuYWxpZ25JdGVtcz10Lm1hcmdpblRvcD10Lm1hcmdpbkJvdHRvbT10Lm1hcmdpbkxlZnQ9dC5tYXJnaW5SaWdodD10LnBvc2l0aW9uPSIiLHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwfX19ZmxleGlibGVDb25uZWN0ZWRUbyhlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW8sdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuX3Njcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IFRlLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChfSiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLmFwcGx5KCl9KX1hcHBseSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2lmKCF0aGlzLl9pc0luaXRpYWxSZW5kZXImJnRoaXMuX3Bvc2l0aW9uTG9ja2VkJiZ0aGlzLl9sYXN0UG9zaXRpb24pcmV0dXJuIHZvaWQgdGhpcy5yZWFwcGx5TGFzdFBvc2l0aW9uKCk7dGhpcy5fY2xlYXJQYW5lbENsYXNzZXMoKSx0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX29yaWdpblJlY3Q9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgcyx0PXRoaXMuX29yaWdpblJlY3QsZT10aGlzLl9vdmVybGF5UmVjdCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2NvbnRhaW5lclJlY3Qsbz1bXTtmb3IobGV0IGEgb2YgdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKXtsZXQgbD10aGlzLl9nZXRPcmlnaW5Qb2ludCh0LHIsYSksYz10aGlzLl9nZXRPdmVybGF5UG9pbnQobCxlLGEpLHU9dGhpcy5fZ2V0T3ZlcmxheUZpdChjLGUsaSxhKTtpZih1LmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYSxsKTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHUsYyxpKT9vLnB1c2goe3Bvc2l0aW9uOmEsb3JpZ2luOmwsb3ZlcmxheVJlY3Q6ZSxib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KGwsYSl9KTooIXN8fHMub3ZlcmxheUZpdC52aXNpYmxlQXJlYTx1LnZpc2libGVBcmVhKSYmKHM9e292ZXJsYXlGaXQ6dSxvdmVybGF5UG9pbnQ6YyxvcmlnaW5Qb2ludDpsLHBvc2l0aW9uOmEsb3ZlcmxheVJlY3Q6ZX0pfWlmKG8ubGVuZ3RoKXtsZXQgYT1udWxsLGw9LTE7Zm9yKGxldCBjIG9mIG8pe2xldCB1PWMuYm91bmRpbmdCb3hSZWN0LndpZHRoKmMuYm91bmRpbmdCb3hSZWN0LmhlaWdodCooYy5wb3NpdGlvbi53ZWlnaHR8fDEpO3U+bCYmKGw9dSxhPWMpfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYS5wb3NpdGlvbixhLm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMucG9zaXRpb24scy5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbihzLnBvc2l0aW9uLHMub3JpZ2luUG9pbnQpfWRldGFjaCgpe3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9ib3VuZGluZ0JveCYmcm0odGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiIixsZWZ0OiIiLHJpZ2h0OiIiLGJvdHRvbToiIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pLHRoaXMuX3BhbmUmJnRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoX0opLHRoaXMuZGV0YWNoKCksdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITApfXJlYXBwbHlMYXN0UG9zaXRpb24oKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtsZXQgdD10aGlzLl9sYXN0UG9zaXRpb247aWYodCl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdGhpcy5fY29udGFpbmVyUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9ZWxzZSB0aGlzLmFwcGx5KCl9d2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlcz10LHRoaXN9d2l0aFBvc2l0aW9ucyh0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9d2l0aFZpZXdwb3J0TWFyZ2luKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9d2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0PSEwKXtyZXR1cm4gdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc313aXRoR3Jvd0FmdGVyT3Blbih0PSEwKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbj10LHRoaXN9d2l0aFB1c2godD0hMCl7cmV0dXJuIHRoaXMuX2NhblB1c2g9dCx0aGlzfXdpdGhMb2NrZWRQb3NpdGlvbih0PSEwKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfXNldE9yaWdpbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQsdGhpc313aXRoRGVmYXVsdE9mZnNldFgodCl7cmV0dXJuIHRoaXMuX29mZnNldFg9dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WSh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9d2l0aFRyYW5zZm9ybU9yaWdpbk9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9X2dldE9yaWdpblBvaW50KHQsZSxpKXtsZXQgcixvO2lmKCJjZW50ZXIiPT1pLm9yaWdpblgpcj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7bGV0IHM9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxhPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7cj0ic3RhcnQiPT1pLm9yaWdpblg/czphfXJldHVybiBlLmxlZnQ8MCYmKHItPWUubGVmdCksbz0iY2VudGVyIj09aS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWkub3JpZ2luWT90LnRvcDp0LmJvdHRvbSxlLnRvcDwwJiYoby09ZS50b3ApLHt4OnIseTpvfX1fZ2V0T3ZlcmxheVBvaW50KHQsZSxpKXtsZXQgcixvO3JldHVybiByPSJjZW50ZXIiPT1pLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PWkub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCxvPSJjZW50ZXIiPT1pLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1pLm92ZXJsYXlZPzA6LWUuaGVpZ2h0LHt4OnQueCtyLHk6dC55K299fV9nZXRPdmVybGF5Rml0KHQsZSxpLHIpe2xldCBvPXlKKGUpLHt4OnMseTphfT10LGw9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxjPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7bCYmKHMrPWwpLGMmJihhKz1jKTtsZXQgcD0wLWEsaD1hK28uaGVpZ2h0LWkuaGVpZ2h0LGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby53aWR0aCwwLXMscytvLndpZHRoLWkud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby5oZWlnaHQscCxoKSxDPWYqbTtyZXR1cm57dmlzaWJsZUFyZWE6Qyxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDpvLndpZHRoKm8uaGVpZ2h0PT09QyxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PW8uaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmY9PW8ud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxpKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2xldCByPWkuYm90dG9tLWUueSxvPWkucmlnaHQtZS54LHM9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5IZWlnaHQpLGE9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aCksYz10LmZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5fHxudWxsIT1hJiZhPD1vO3JldHVybih0LmZpdHNJblZpZXdwb3J0VmVydGljYWxseXx8bnVsbCE9cyYmczw9cikmJmN9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLGkpe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtsZXQgcj15SihlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSx1PTAsZD0wO3JldHVybiB1PXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsZD1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDp1LHk6ZH0se3g6dC54K3UseTp0LnkrZH19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSx1LGQscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBoPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmgscz10LnktaCxvPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHU9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpZD10LngsdT1pLnJpZ2h0LXQueDtlbHNle2xldCBoPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDt1PTIqaCxkPXQueC1oLHU+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihkPXQueC1mLzIpfXJldHVybnt0b3A6cyxsZWZ0OmQsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDp1LGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1ubyhpLmhlaWdodCksci50b3A9bm8oaS50b3ApLHIuYm90dG9tPW5vKGkuYm90dG9tKSxyLndpZHRoPW5vKGkud2lkdGgpLHIubGVmdD1ubyhpLmxlZnQpLHIucmlnaHQ9bm8oaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1ubyhvKSkscyYmKHIubWF4V2lkdGg9bm8ocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSxybSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3JtKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXtybSh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCB1PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsdSkpLHJtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsdSkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PW5vKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPW5vKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSkscm0odGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPW5vKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9bm8oby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOmdKKHQsaSksaXNPcmlnaW5PdXRzaWRlVmlldzplNSh0LGkpLGlzT3ZlcmxheUNsaXBwZWQ6Z0ooZSxpKSxpc092ZXJsYXlPdXRzaWRlVmlldzplNShlLGkpfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKGkscik9PmktTWF0aC5tYXgociwwKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDppLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0OmkubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDppLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206aS50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19X2lzUnRsKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfV9oYXNFeGFjdFBvc2l0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9X2dldE9mZnNldCh0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX1fdmFsaWRhdGVQb3NpdGlvbnMoKXt9X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZNXyh0KS5mb3JFYWNoKGU9PnsiIiE9PWUmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKGUpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKGUpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZChlKSl9KX1fY2xlYXJQYW5lbENsYXNzZXMoKXt0aGlzLl9wYW5lJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5mb3JFYWNoKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2xldCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgQWUpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10LndpZHRofHwwLGk9dC5oZWlnaHR8fDA7cmV0dXJue3RvcDp0LnksYm90dG9tOnQueStpLGxlZnQ6dC54LHJpZ2h0OnQueCtlLGhlaWdodDppLHdpZHRoOmV9fX0oZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGRhKSxSKEJ0KSxSKHVpKSxSKE5fKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksdkRlPTAsUWk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPWUsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9kaXJlY3Rpb25hbGl0eT11LHRoaXMuX2xvY2F0aW9uPWQsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1wLHRoaXMuX2FuaW1hdGlvbnNNb2R1bGVUeXBlPWh9Y3JlYXRlKGUpe2xldCBpPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCkscj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChpKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChyKSxzPW5ldyBEbChlKTtyZXR1cm4gcy5kaXJlY3Rpb249cy5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBUdShvLGkscixzLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlciwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGUpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkuaWQ9ImNkay1vdmVybGF5LSIrdkRlKyssaS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksZS5hcHBlbmRDaGlsZChpKSxpfV9jcmVhdGVIb3N0RWxlbWVudCgpe2xldCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVQb3J0YWxPdXRsZXQoZSl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoSmMpKSxuZXcgWEMoZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihoRGUpLFIoTl8pLFIoRW8pLFIoX0RlKSxSKGZEZSksUih6biksUihwdCksUihCdCksUihpciksUihIeCksUihtRGUpLFIoTGksOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHlEZT1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sQ0o9bmV3IHNlKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iiksc209KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdfSksbn0pKCksUXA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kaXI9cyx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMudmlld3BvcnRNYXJnaW49MCx0aGlzLm9wZW49ITEsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy5iYWNrZHJvcENsaWNrPW5ldyBHLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5hdHRhY2g9bmV3IEcsdGhpcy5kZXRhY2g9bmV3IEcsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgRyx0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2s9bmV3IEcsdGhpcy5fdGVtcGxhdGVQb3J0YWw9bmV3IGhzKGksciksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PW8sdGhpcy5zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKX1nZXQgb2Zmc2V0WCgpe3JldHVybiB0aGlzLl9vZmZzZXRYfXNldCBvZmZzZXRYKGUpe3RoaXMuX29mZnNldFg9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IG9mZnNldFkoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WX1zZXQgb2Zmc2V0WShlKXt0aGlzLl9vZmZzZXRZPWUsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9Z2V0IGxvY2tQb3NpdGlvbigpe3JldHVybiB0aGlzLl9sb2NrUG9zaXRpb259c2V0IGxvY2tQb3NpdGlvbihlKXt0aGlzLl9sb2NrUG9zaXRpb249V3QoZSl9Z2V0IGZsZXhpYmxlRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnN9c2V0IGZsZXhpYmxlRGltZW5zaW9ucyhlKXt0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9V3QoZSl9Z2V0IGdyb3dBZnRlck9wZW4oKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbn1zZXQgZ3Jvd0FmdGVyT3BlbihlKXt0aGlzLl9ncm93QWZ0ZXJPcGVuPVd0KGUpfWdldCBwdXNoKCl7cmV0dXJuIHRoaXMuX3B1c2h9c2V0IHB1c2goZSl7dGhpcy5fcHVzaD1XdChlKX1nZXQgb3ZlcmxheVJlZigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIn1uZ09uRGVzdHJveSgpe3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxtaW5XaWR0aDp0aGlzLm1pbldpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxtaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSxlLm9yaWdpbiYmdGhpcy5vcGVuJiZ0aGlzLl9wb3NpdGlvbi5hcHBseSgpKSxlLm9wZW4mJih0aGlzLm9wZW4/dGhpcy5fYXR0YWNoT3ZlcmxheSgpOnRoaXMuX2RldGFjaE92ZXJsYXkoKSl9X2NyZWF0ZU92ZXJsYXkoKXsoIXRoaXMucG9zaXRpb25zfHwhdGhpcy5wb3NpdGlvbnMubGVuZ3RoKSYmKHRoaXMucG9zaXRpb25zPXlEZSk7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9idWlsZENvbmZpZygpKTt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249ZS5hdHRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249ZS5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5kZXRhY2guZW1pdCgpKSxlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheUtleWRvd24ubmV4dChpKSwyNz09PWkua2V5Q29kZSYmIXRoaXMuZGlzYWJsZUNsb3NlJiYhTXIoaSkmJihpLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGV0YWNoT3ZlcmxheSgpKX0pLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheU91dHNpZGVDbGljay5uZXh0KGkpfSl9X2J1aWxkQ29uZmlnKCl7bGV0IGU9dGhpcy5fcG9zaXRpb249dGhpcy5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCksaT1uZXcgRGwoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTplLHNjcm9sbFN0cmF0ZWd5OnRoaXMuc2Nyb2xsU3RyYXRlZ3ksaGFzQmFja2Ryb3A6dGhpcy5oYXNCYWNrZHJvcH0pO3JldHVybih0aGlzLndpZHRofHwwPT09dGhpcy53aWR0aCkmJihpLndpZHRoPXRoaXMud2lkdGgpLCh0aGlzLmhlaWdodHx8MD09PXRoaXMuaGVpZ2h0KSYmKGkuaGVpZ2h0PXRoaXMuaGVpZ2h0KSwodGhpcy5taW5XaWR0aHx8MD09PXRoaXMubWluV2lkdGgpJiYoaS5taW5XaWR0aD10aGlzLm1pbldpZHRoKSwodGhpcy5taW5IZWlnaHR8fDA9PT10aGlzLm1pbkhlaWdodCkmJihpLm1pbkhlaWdodD10aGlzLm1pbkhlaWdodCksdGhpcy5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPXRoaXMuYmFja2Ryb3BDbGFzcyksdGhpcy5wYW5lbENsYXNzJiYoaS5wYW5lbENsYXNzPXRoaXMucGFuZWxDbGFzcyksaX1fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKXtsZXQgaT10aGlzLnBvc2l0aW9ucy5tYXAocj0+KHtvcmlnaW5YOnIub3JpZ2luWCxvcmlnaW5ZOnIub3JpZ2luWSxvdmVybGF5WDpyLm92ZXJsYXlYLG92ZXJsYXlZOnIub3ZlcmxheVksb2Zmc2V0WDpyLm9mZnNldFh8fHRoaXMub2Zmc2V0WCxvZmZzZXRZOnIub2Zmc2V0WXx8dGhpcy5vZmZzZXRZLHBhbmVsQ2xhc3M6ci5wYW5lbENsYXNzfHx2b2lkIDB9KSk7cmV0dXJuIGUuc2V0T3JpZ2luKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKS53aXRoUG9zaXRpb25zKGkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnModGhpcy5mbGV4aWJsZURpbWVuc2lvbnMpLndpdGhQdXNoKHRoaXMucHVzaCkud2l0aEdyb3dBZnRlck9wZW4odGhpcy5ncm93QWZ0ZXJPcGVuKS53aXRoVmlld3BvcnRNYXJnaW4odGhpcy52aWV3cG9ydE1hcmdpbikud2l0aExvY2tlZFBvc2l0aW9uKHRoaXMubG9ja1Bvc2l0aW9uKS53aXRoVHJhbnNmb3JtT3JpZ2luT24odGhpcy50cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil9X2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKSk7cmV0dXJuIHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koZSksZX1fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luIGluc3RhbmNlb2Ygc20/dGhpcy5vcmlnaW4uZWxlbWVudFJlZjp0aGlzLm9yaWdpbn1fYXR0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5oYXNCYWNrZHJvcD10aGlzLmhhc0JhY2tkcm9wOnRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCl8fHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3RlbXBsYXRlUG9ydGFsKSx0aGlzLmhhc0JhY2tkcm9wP3RoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShlPT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoZSl9KTp0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjAmJih0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj10aGlzLl9wb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZShZeSgoKT0+dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjApKS5zdWJzY3JpYmUoZT0+e3RoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChlKSwwPT09dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSkpfV9kZXRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUWkpLHcoT2kpLHcoeWkpLHcoQ0opLHcoaXIsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIl1dLGlucHV0czp7b3JpZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsIm9yaWdpbiJdLHBvc2l0aW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJwb3NpdGlvbnMiXSxwb3NpdGlvblN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kiLCJwb3NpdGlvblN0cmF0ZWd5Il0sb2Zmc2V0WDpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIiwib2Zmc2V0WCJdLG9mZnNldFk6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsIm9mZnNldFkiXSx3aWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsIndpZHRoIl0saGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodCIsImhlaWdodCJdLG1pbldpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwibWluV2lkdGgiXSxtaW5IZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluSGVpZ2h0IiwibWluSGVpZ2h0Il0sYmFja2Ryb3BDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIiwiYmFja2Ryb3BDbGFzcyJdLHBhbmVsQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsInBhbmVsQ2xhc3MiXSx2aWV3cG9ydE1hcmdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiIsInZpZXdwb3J0TWFyZ2luIl0sc2Nyb2xsU3RyYXRlZ3k6WyJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJzY3JvbGxTdHJhdGVneSJdLG9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsIm9wZW4iXSxkaXNhYmxlQ2xvc2U6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIiwiZGlzYWJsZUNsb3NlIl0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iLCJ0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvciJdLGhhc0JhY2tkcm9wOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiaGFzQmFja2Ryb3AiXSxsb2NrUG9zaXRpb246WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwibG9ja1Bvc2l0aW9uIl0sZmxleGlibGVEaW1lbnNpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImZsZXhpYmxlRGltZW5zaW9ucyJdLGdyb3dBZnRlck9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImdyb3dBZnRlck9wZW4iXSxwdXNoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2giLCJwdXNoIl19LG91dHB1dHM6e2JhY2tkcm9wQ2xpY2s6ImJhY2tkcm9wQ2xpY2siLHBvc2l0aW9uQ2hhbmdlOiJwb3NpdGlvbkNoYW5nZSIsYXR0YWNoOiJhdHRhY2giLGRldGFjaDoiZGV0YWNoIixvdmVybGF5S2V5ZG93bjoib3ZlcmxheUtleWRvd24iLG92ZXJsYXlPdXRzaWRlQ2xpY2s6Im92ZXJsYXlPdXRzaWRlQ2xpY2sifSxleHBvcnRBczpbImNka0Nvbm5lY3RlZE92ZXJsYXkiXSxmZWF0dXJlczpbenRdfSksbn0pKCkseERlPXtwcm92aWRlOkNKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sVm89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUWkseERlXSxpbXBvcnRzOltXcCx3YyxDZCxDZF19KSxufSkoKTtmdW5jdGlvbiBDRGUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIpKDEsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5hY3Rpb24oKSl9KSxEKDIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMikseXQoZS5kYXRhLmFjdGlvbil9fWZ1bmN0aW9uIHdEZShuLHQpe312YXIgSEE9bmV3IHNlKCJNYXRTbmFja0JhckRhdGEiKSxMXz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19LE1EZT1NYXRoLnBvdygyLDMxKS0xLGFtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBUZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgVGUsdGhpcy5fb25BY3Rpb249bmV3IFRlLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0Ll9vbkV4aXQuc3Vic2NyaWJlKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpfWRpc21pc3MoKXt0aGlzLl9hZnRlckRpc21pc3NlZC5jbG9zZWR8fHRoaXMuY29udGFpbmVySW5zdGFuY2UuZXhpdCgpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9ZGlzbWlzc1dpdGhBY3Rpb24oKXt0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fCh0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMCx0aGlzLl9vbkFjdGlvbi5uZXh0KCksdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLmRpc21pc3MoKSksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1jbG9zZVdpdGhBY3Rpb24oKXt0aGlzLmRpc21pc3NXaXRoQWN0aW9uKCl9X2Rpc21pc3NBZnRlcih0KXt0aGlzLl9kdXJhdGlvblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLmRpc21pc3MoKSxNYXRoLm1pbih0LE1EZSkpfV9vcGVuKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfV9maW5pc2hEaXNtaXNzKCl7dGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb25BY3Rpb24uY2xvc2VkfHx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoe2Rpc21pc3NlZEJ5QWN0aW9uOnRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9ufSksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMX1hZnRlckRpc21pc3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZH1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfW9uQWN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQWN0aW9ufX0sU0RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnNuYWNrQmFyUmVmPWUsdGhpcy5kYXRhPWl9YWN0aW9uKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzV2l0aEFjdGlvbigpfWdldCBoYXNBY3Rpb24oKXtyZXR1cm4hIXRoaXMuZGF0YS5hY3Rpb259fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzaW1wbGUtc25hY2stYmFyIl1dLGhvc3RBdHRyczpbMSwibWF0LXNpbXBsZS1zbmFja2JhciJdLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsIm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnQiXSxbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iLDQsIm5nSWYiXSxbMSwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsQ0RlLDMsMSwiZGl2IiwxKSksMiZlJiYoeCgxKSx5dChpLmRhdGEubWVzc2FnZSkseCgxKSxiKCJuZ0lmIixpLmhhc0FjdGlvbikpfSxkZXBlbmRlbmNpZXM6W1hlLCRuXSxzdHlsZXM6WyIubWF0LXNpbXBsZS1zbmFja2JhcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntmbGV4LXNocmluazowO21hcmdpbjotOHB4IC04cHggLThweCA4cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIGJ1dHRvbnttYXgtaGVpZ2h0OjM2cHg7bWluLXdpZHRoOjB9W2Rpcj1ydGxdIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbnttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDo4cHh9Lm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRURlPXtzbmFja0JhclN0YXRlOkhyKCJzdGF0ZSIsW0VpKCJ2b2lkLCBoaWRkZW4iLHJuKHt0cmFuc2Zvcm06InNjYWxlKDAuOCkiLG9wYWNpdHk6MH0pKSxFaSgidmlzaWJsZSIscm4oe3RyYW5zZm9ybToic2NhbGUoMSkiLG9wYWNpdHk6MX0pKSxJaSgiKiA9PiB2aXNpYmxlIixWaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksSWkoIiogPT4gdm9pZCwgKiA9PiBoaWRkZW4iLFZpKCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LFREZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nWm9uZT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1zLHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyBUZSx0aGlzLl9vbkV4aXQ9bmV3IFRlLHRoaXMuX29uRW50ZXI9bmV3IFRlLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLmF0dGFjaERvbVBvcnRhbD1hPT57dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgbD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKGEpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksbH0sdGhpcy5fbGl2ZT0iYXNzZXJ0aXZlIiE9PXMucG9saXRlbmVzc3x8cy5hbm5vdW5jZW1lbnRNZXNzYWdlPyJvZmYiPT09cy5wb2xpdGVuZXNzPyJvZmYiOiJwb2xpdGUiOiJhc3NlcnRpdmUiLHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gmJigicG9saXRlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJzdGF0dXMiKSwiYXNzZXJ0aXZlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJhbGVydCIpKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9b25BbmltYXRpb25FbmQoZSl7bGV0e2Zyb21TdGF0ZTppLHRvU3RhdGU6cn09ZTtpZigoInZvaWQiPT09ciYmInZvaWQiIT09aXx8ImhpZGRlbiI9PT1yKSYmdGhpcy5fY29tcGxldGVFeGl0KCksInZpc2libGUiPT09cil7bGV0IG89dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgpPT57by5uZXh0KCksby5jb21wbGV0ZSgpfSl9fWVudGVyKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZpc2libGUiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpKX1leGl0KCl7cmV0dXJuIHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25TdGF0ZT0iaGlkZGVuIix0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXQtZXhpdCIsIiIpLGNsZWFyVGltZW91dCh0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCl9KSx0aGlzLl9vbkV4aXR9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY29tcGxldGVFeGl0KCl9X2NvbXBsZXRlRXhpdCgpe3RoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9vbkV4aXQubmV4dCgpLHRoaXMuX29uRXhpdC5jb21wbGV0ZSgpfSl9KX1fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuc25hY2tCYXJDb25maWcucGFuZWxDbGFzcztpJiYoQXJyYXkuaXNBcnJheShpKT9pLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKTplLmNsYXNzTGlzdC5hZGQoaSkpfV9hc3NlcnROb3RBdHRhY2hlZCgpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWhpZGRlbl0iKSxpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1saXZlXSIpO2lmKGUmJmkpe2xldCByPW51bGw7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJihyPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGkuYXBwZW5kQ2hpbGQoZSkscj8uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSx0aGlzLl9hbm5vdW5jZURlbGF5KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KHVpKSx3KExfKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxmZWF0dXJlczpbdHRdfSksbn0pKCksRERlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBURGV7X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtzdXBlci5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLWNlbnRlciIpLCJ0b3AiPT09dGhpcy5zbmFja0JhckNvbmZpZy52ZXJ0aWNhbFBvc2l0aW9uJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNuYWNrLWJhci1jb250YWluZXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZpMCgiQHN0YXRlLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQW5pbWF0aW9uRW5kKG8pfSksMiZlJiZyMCgiQHN0YXRlIixpLl9hbmltYXRpb25TdGF0ZSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSx3RGUsMCwwLCJuZy10ZW1wbGF0ZSIsMSksdigpLE4oMiwiZGl2IikpLDImZSYmKHgoMiksemUoImFyaWEtbGl2ZSIsaS5fbGl2ZSkoInJvbGUiLGkuX3JvbGUpKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjoyNHB4O21heC13aWR0aDozM3Z3O21pbi13aWR0aDozNDRweDtwYWRkaW5nOjE0cHggMTZweDttaW4taGVpZ2h0OjQ4cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH0ubWF0LXNuYWNrLWJhci1oYW5kc2V0e3dpZHRoOjEwMCV9Lm1hdC1zbmFjay1iYXItaGFuZHNldCAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7bWFyZ2luOjhweDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W0VEZS5zbmFja0JhclN0YXRlXX19KSxufSkoKSxyNT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVm8sd2Msa2UsUmksZG4sZG5dfSksbn0pKCksd0o9bmV3IHNlKCJtYXQtc25hY2stYmFyLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExffX0pLElEZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fbGl2ZT1pLHRoaXMuX2luamVjdG9yPXIsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPW8sdGhpcy5fcGFyZW50U25hY2tCYXI9cyx0aGlzLl9kZWZhdWx0Q29uZmlnPWEsdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfWdldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtsZXQgZT10aGlzLl9wYXJlbnRTbmFja0JhcjtyZXR1cm4gZT9lLl9vcGVuZWRTbmFja0JhclJlZjp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsfXNldCBfb3BlbmVkU25hY2tCYXJSZWYoZSl7dGhpcy5fcGFyZW50U25hY2tCYXI/dGhpcy5fcGFyZW50U25hY2tCYXIuX29wZW5lZFNuYWNrQmFyUmVmPWU6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1lfW9wZW5Gcm9tQ29tcG9uZW50KGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW5Gcm9tVGVtcGxhdGUoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbihlLGk9IiIscil7bGV0IG89ey4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4ucn07cmV0dXJuIG8uZGF0YT17bWVzc2FnZTplLGFjdGlvbjppfSxvLmFubm91bmNlbWVudE1lc3NhZ2U9PT1lJiYoby5hbm5vdW5jZW1lbnRNZXNzYWdlPXZvaWQgMCksdGhpcy5vcGVuRnJvbUNvbXBvbmVudCh0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50LG8pfWRpc21pc3MoKXt0aGlzLl9vcGVuZWRTbmFja0JhclJlZiYmdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpfW5nT25EZXN0cm95KCl7dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCYmdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCl9X2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKGUsaSl7bGV0IG89em4uY3JlYXRlKHtwYXJlbnQ6aSYmaS52aWV3Q29udGFpbmVyUmVmJiZpLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6TF8sdXNlVmFsdWU6aX1dfSkscz1uZXcgQ2ModGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxpLnZpZXdDb250YWluZXJSZWYsbyksYT1lLmF0dGFjaChzKTtyZXR1cm4gYS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1pLGEuaW5zdGFuY2V9X2F0dGFjaChlLGkpe2xldCByPXsuLi5uZXcgTF8sLi4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5pfSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkocikscz10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLHIpLGE9bmV3IGFtKHMsbyk7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgbD1uZXcgaHMoZSxudWxsLHskaW1wbGljaXQ6ci5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwobCl9ZWxzZXtsZXQgbD10aGlzLl9jcmVhdGVJbmplY3RvcihyLGEpLGM9bmV3IENjKGUsdm9pZCAwLGwpLHU9cy5hdHRhY2hDb21wb25lbnRQb3J0YWwoYyk7YS5pbnN0YW5jZT11Lmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLnBpcGUob3Qoby5kZXRhY2htZW50cygpKSkuc3Vic2NyaWJlKGw9PntvLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MsbC5tYXRjaGVzKX0pLHIuYW5ub3VuY2VtZW50TWVzc2FnZSYmcy5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKHIuYW5ub3VuY2VtZW50TWVzc2FnZSxyLnBvbGl0ZW5lc3MpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKGEsciksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9YSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn1fYW5pbWF0ZVNuYWNrQmFyKGUsaSl7ZS5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT1lJiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksaS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9PntlLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOmUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxpLmR1cmF0aW9uJiZpLmR1cmF0aW9uPjAmJmUuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCk9PmUuX2Rpc21pc3NBZnRlcihpLmR1cmF0aW9uKSl9X2NyZWF0ZU92ZXJsYXkoZSl7bGV0IGk9bmV3IERsO2kuZGlyZWN0aW9uPWUuZGlyZWN0aW9uO2xldCByPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxvPSJydGwiPT09ZS5kaXJlY3Rpb24scz0ibGVmdCI9PT1lLmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFzJiYiY2VudGVyIiE9PWUuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBzP3IubGVmdCgiMCIpOmE/ci5yaWdodCgiMCIpOnIuY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT1lLnZlcnRpY2FsUG9zaXRpb24/ci50b3AoIjAiKTpyLmJvdHRvbSgiMCIpLGkucG9zaXRpb25TdHJhdGVneT1yLHRoaXMuX292ZXJsYXkuY3JlYXRlKGkpfV9jcmVhdGVJbmplY3RvcihlLGkpe3JldHVybiB6bi5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTphbSx1c2VWYWx1ZTppfSx7cHJvdmlkZTpIQSx1c2VWYWx1ZTplLmRhdGF9XX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKFVDKSxSKHpuKSxSKG5tKSxSKG4sMTIpLFIod0opKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNSj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlLGkscixvLHMsYSksdGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudD1TRGUsdGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudD1ERGUsdGhpcy5oYW5kc2V0Q3NzQ2xhc3M9Im1hdC1zbmFjay1iYXItaGFuZHNldCJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoVUMpLFIoem4pLFIobm0pLFIobiwxMiksUih3SikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOnI1fSksbn0pKCksUERlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxFSj0iXFx1MDAwMC1cXHUwMDIwXFx1MDA3Zi1cXHUwMDlmIixPRGU9bmV3IFJlZ0V4cCgiKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06XFwvXFwvfGRhdGE6fHd3d1xcLilbXlxccyIrRUorJyJdezIsfVteXFxzJytFSisiXCInKX1cXF0sOjsuIT9dIiwiZ3UiKTtmdW5jdGlvbiBESihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXt0LmZsYWdzLmluY2x1ZGVzKCJnIil8fCh0PW5ldyBSZWdFeHAodCx0LmZsYWdzKyJnIikpO2xldCBlPVtdLGk9MDtmb3IobGV0IHIgb2Ygbi5tYXRjaEFsbCh0KSl7bGV0IG89ci5pbmRleCxzPXJbMF07bz5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG8pLG1hdGNoZXNSZWdleDohMX0pLGUucHVzaCh7aW5kZXg6byx0ZXh0OnMsbWF0Y2hlc1JlZ2V4OiEwfSksaT1vK3MubGVuZ3RofXJldHVybiBuLmxlbmd0aD5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG4ubGVuZ3RoKSxtYXRjaGVzUmVnZXg6ITF9KSxlfShuLE9EZSkubWFwKCh7bWF0Y2hlc1JlZ2V4OnQsdGV4dDplfSk9Pih7aXNVUkw6dCx0ZXh0OmV9KSl9ZnVuY3Rpb24ga0RlKG4sdCl7aWYoMSZuJiYoS3QoMCksRCgxKSxadCgpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7eCgxKSxxZSgiICIsZS50ZXh0LCIgIil9fWZ1bmN0aW9uIEZEZShuLHQpe2lmKDEmbiYmKGcoMCwiYSIsNyksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4cigiaHJlZiIsZS50ZXh0LGRsKSx4KDEpLHl0KGUudGV4dCl9fWZ1bmN0aW9uIE5EZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxrRGUsMiwxLCJuZy1jb250YWluZXIiLDUpLEUoMixGRGUsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoMyk7eCgxKSxiKCJuZ0lmIiwhZS5pc1VSTCkoIm5nSWZFbHNlIixpKX19ZnVuY3Rpb24gTERlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO3goMSkscWUoIiAiLGUuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19dmFyIEFKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLnVua25vd25EYXRhPWksdGhpcy5zdG9yZT1yLHRoaXMuc3BsaXRCeVVSTD1ESix0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbih0aGlzLnN0b3JlKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGUpfW9uQ2xvc2VCdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpLHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydC1kaXNwbGF5LXNuYWNrYmFyIl1dLGRlY2xzOjYsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gY2xvc2UgdGhlIHNuYWNrYmFyIG1lc3NhZ2XikJ9lYTRkOWZlNjE0MjBhM2ZjZTgxY2Y1NGM0YzYxNWUzYzE5YzY0NmE24pCfMTUzNjA4NzUxOTc0MzcwNzM2MjpEaXNtaXNzYCxbWzEsIm1lc3NhZ2UiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJkaXNtaXNzLWJ1dHRvbiIsMywiY2xpY2siXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsaW5rUGllY2UiLCIiXSxbInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLDMsImhyZWYiXSxbIm1hdC1idXR0b24iLCIiLDEsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSxORGUsNCwyLCJuZy1jb250YWluZXIiLDEpLHYoKSxnKDIsImRpdiIsMiksRSgzLExEZSwyLDEsImJ1dHRvbiIsMyksZyg0LCJidXR0b24iLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VCdXR0b25DbGlja2VkKCl9KSxEKDUsIiBEaXNtaXNzICIpLHYoKSgpKSwyJmUmJih4KDEpLGIoIm5nRm9yT2YiLGkuc3BsaXRCeVVSTChpLmFsZXJ0LmxvY2FsaXplZE1lc3NhZ2UpKSx4KDIpLGIoIm5nSWYiLGkuYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbjo1cHggMDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tbGVmdDphdXRvfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSUo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLnNuYWNrQmFyPWksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuc2VsZWN0KFJLKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoZT0+Qm9vbGVhbihlKSkpLnN1YnNjcmliZShlPT57dGhpcy5zaG93QWxlcnQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvd0FsZXJ0KGUpe3RoaXMuc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoQUose2R1cmF0aW9uOjVlMyxob3Jpem9udGFsUG9zaXRpb246InN0YXJ0Iix2ZXJ0aWNhbFBvc2l0aW9uOiJib3R0b20iLGRhdGE6ZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1KKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnQtc25hY2tiYXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFVBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxSaSxyNV19KSxufSkoKSx6QT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbdnUsVUEsUnIuZm9yRmVhdHVyZSgiYWxlcnRzIixCWiksTG8uZm9yRmVhdHVyZShbTFpdKV19KSxufSkoKTtmdW5jdGlvbiBWRGUobix0KXt9dmFyIGxtPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yb2xlPSJkaWFsb2ciLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuYmFja2Ryb3BDbGFzcz0iIix0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLndpZHRoPSIiLHRoaXMuaGVpZ2h0PSIiLHRoaXMuZGF0YT1udWxsLHRoaXMuYXJpYURlc2NyaWJlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWxsZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5hcmlhTW9kYWw9ITAsdGhpcy5hdXRvRm9jdXM9ImZpcnN0LXRhYmJhYmxlIix0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmNsb3NlT25OYXZpZ2F0aW9uPSEwLHRoaXMuY2xvc2VPbkRlc3Ryb3k9ITB9fSxzNT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWksdGhpcy5fY29uZmlnPW8sdGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXI9cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdmVybGF5UmVmPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9bnVsbCx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXU9Pnt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgZD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKHUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxkfSx0aGlzLl9hcmlhTGFiZWxsZWRCeT10aGlzLl9jb25maWcuYXJpYUxhYmVsbGVkQnl8fG51bGwsdGhpcy5fZG9jdW1lbnQ9cn1fY29udGVudEF0dGFjaGVkKCl7dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCksdGhpcy5fY2FwdHVyZUluaXRpYWxGb2N1cygpfV9jYXB0dXJlSW5pdGlhbEZvY3VzKCl7dGhpcy5fdHJhcEZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXN0b3JlRm9jdXMoKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLGl9X3JlY2FwdHVyZUZvY3VzKCl7dGhpcy5fY29udGFpbnNGb2N1cygpfHx0aGlzLl90cmFwRm9jdXMoKX1fZm9yY2VGb2N1cyhlLGkpe3RoaXMuX2ludGVyYWN0aXZpdHlDaGVja2VyLmlzRm9jdXNhYmxlKGUpfHwoZS50YWJJbmRleD0tMSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgcj0oKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfTtlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixyKX0pKSxlLmZvY3VzKGkpfV9mb2N1c0J5Q3NzU2VsZWN0b3IoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlKTtyJiZ0aGlzLl9mb3JjZUZvY3VzKHIsaSl9X3RyYXBGb2N1cygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtzd2l0Y2godGhpcy5fY29uZmlnLmF1dG9Gb2N1cyl7Y2FzZSExOmNhc2UiZGlhbG9nIjp0aGlzLl9jb250YWluc0ZvY3VzKCl8fGUuZm9jdXMoKTticmVhaztjYXNlITA6Y2FzZSJmaXJzdC10YWJiYWJsZSI6dGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGk9PntpfHx0aGlzLl9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpfSk7YnJlYWs7Y2FzZSJmaXJzdC1oZWFkaW5nIjp0aGlzLl9mb2N1c0J5Q3NzU2VsZWN0b3IoJ2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIFtyb2xlPSJoZWFkaW5nIl0nKTticmVhaztkZWZhdWx0OnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3Rvcih0aGlzLl9jb25maWcuYXV0b0ZvY3VzKX19X3Jlc3RvcmVGb2N1cygpe2xldCBlPXRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMsaT1udWxsO2lmKCJzdHJpbmciPT10eXBlb2YgZT9pPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ImJvb2xlYW4iPT10eXBlb2YgZT9pPWU/dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ6bnVsbDplJiYoaT1lKSx0aGlzLl9jb25maWcucmVzdG9yZUZvY3VzJiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5mb2N1cyl7bGV0IHI9TkMoKSxvPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsoIXJ8fHI9PT10aGlzLl9kb2N1bWVudC5ib2R5fHxyPT09b3x8by5jb250YWlucyhyKSkmJih0aGlzLl9mb2N1c01vbml0b3I/KHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYShpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlKSx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsKTppLmZvY3VzKCkpfXRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9TkMoKTtyZXR1cm4gZT09PWl8fGUuY29udGFpbnMoaSl9X2luaXRpYWxpemVGb2N1c1RyYXAoKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9kb2N1bWVudCYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkPU5DKCkpfV9oYW5kbGVCYWNrZHJvcENsaWNrcygpe3RoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NvbmZpZy5kaXNhYmxlQ2xvc2UmJnRoaXMuX3JlY2FwdHVyZUZvY3VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCQyksdyhCdCw4KSx3KGxtKSx3KElfKSx3KHB0KSx3KFR1KSx3KHpyKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLWRpYWxvZy1jb250YWluZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIi0xIiwxLCJjZGstZGlhbG9nLWNvbnRhaW5lciJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuX2NvbmZpZy5pZHx8bnVsbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpfSxmZWF0dXJlczpbdHRdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkUoMCxWRGUsMCwwLCJuZy10ZW1wbGF0ZSIsMCl9LGRlcGVuZGVuY2llczpbQnNdLHN0eWxlczpbIi5jZGstZGlhbG9nLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDppbmhlcml0O21heC1oZWlnaHQ6aW5oZXJpdH0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMub3ZlcmxheVJlZj10LHRoaXMuY29uZmlnPWUsdGhpcy5jbG9zZWQ9bmV3IFRlLHRoaXMuZGlzYWJsZUNsb3NlPWUuZGlzYWJsZUNsb3NlLHRoaXMuYmFja2Ryb3BDbGljaz10LmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHM9dC5rZXlkb3duRXZlbnRzKCksdGhpcy5vdXRzaWRlUG9pbnRlckV2ZW50cz10Lm91dHNpZGVQb2ludGVyRXZlbnRzKCksdGhpcy5pZD1lLmlkLHRoaXMua2V5ZG93bkV2ZW50cy5zdWJzY3JpYmUoaT0+ezI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46ImtleWJvYXJkIn0pKX0pLHRoaXMuYmFja2Ryb3BDbGljay5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRpc2FibGVDbG9zZXx8dGhpcy5jbG9zZSh2b2lkIDAse2ZvY3VzT3JpZ2luOiJtb3VzZSJ9KX0pfWNsb3NlKHQsZSl7aWYodGhpcy5jb250YWluZXJJbnN0YW5jZSl7bGV0IGk9dGhpcy5jbG9zZWQ7dGhpcy5jb250YWluZXJJbnN0YW5jZS5fY2xvc2VJbnRlcmFjdGlvblR5cGU9ZT8uZm9jdXNPcmlnaW58fCJwcm9ncmFtIix0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpLGkubmV4dCh0KSxpLmNvbXBsZXRlKCksdGhpcy5jb21wb25lbnRJbnN0YW5jZT10aGlzLmNvbnRhaW5lckluc3RhbmNlPW51bGx9fXVwZGF0ZVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXN9dXBkYXRlU2l6ZSh0PSIiLGU9IiIpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXN9YWRkUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3ModCksdGhpc31yZW1vdmVQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcyh0KSx0aGlzfX0sUEo9bmV3IHNlKCJEaWFsb2dTY3JvbGxTdHJhdGVneSIpLEhEZT1uZXcgc2UoIkRpYWxvZ0RhdGEiKSxVRGU9bmV3IHNlKCJEZWZhdWx0RGlhbG9nQ29uZmlnIiksakRlPXtwcm92aWRlOlBKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LEdEZT0wLGE1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1zLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWF9Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfW9wZW4oZSxpKXsoaT17Li4udGhpcy5fZGVmYXVsdE9wdGlvbnN8fG5ldyBsbSwuLi5pfSkuaWQ9aS5pZHx8ImNkay1kaWFsb2ctIitHRGUrKyxpLmlkJiZ0aGlzLmdldERpYWxvZ0J5SWQoaS5pZCk7bGV0IG89dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhpKSxzPXRoaXMuX292ZXJsYXkuY3JlYXRlKG8pLGE9bmV3IFFDKHMsaSksbD10aGlzLl9hdHRhY2hDb250YWluZXIocyxhLGkpO3JldHVybiBhLmNvbnRhaW5lckluc3RhbmNlPWwsdGhpcy5fYXR0YWNoRGlhbG9nQ29udGVudChlLGEsbCxpKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpLHRoaXMub3BlbkRpYWxvZ3MucHVzaChhKSxhLmNsb3NlZC5zdWJzY3JpYmUoKCk9PnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coYSwhMCkpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChhKSxhfWNsb3NlQWxsKCl7bzUodGhpcy5vcGVuRGlhbG9ncyxlPT5lLmNsb3NlKCkpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXtvNSh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PnshMT09PWUuY29uZmlnLmNsb3NlT25EZXN0cm95JiZ0aGlzLl9yZW1vdmVPcGVuRGlhbG9nKGUsITEpfSksbzUodGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCxlPT5lLmNsb3NlKCkpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXX1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtsZXQgaT1uZXcgRGwoe3Bvc2l0aW9uU3RyYXRlZ3k6ZS5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLHNjcm9sbFN0cmF0ZWd5OmUuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCkscGFuZWxDbGFzczplLnBhbmVsQ2xhc3MsaGFzQmFja2Ryb3A6ZS5oYXNCYWNrZHJvcCxkaXJlY3Rpb246ZS5kaXJlY3Rpb24sbWluV2lkdGg6ZS5taW5XaWR0aCxtaW5IZWlnaHQ6ZS5taW5IZWlnaHQsbWF4V2lkdGg6ZS5tYXhXaWR0aCxtYXhIZWlnaHQ6ZS5tYXhIZWlnaHQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGlzcG9zZU9uTmF2aWdhdGlvbjplLmNsb3NlT25OYXZpZ2F0aW9ufSk7cmV0dXJuIGUuYmFja2Ryb3BDbGFzcyYmKGkuYmFja2Ryb3BDbGFzcz1lLmJhY2tkcm9wQ2xhc3MpLGl9X2F0dGFjaENvbnRhaW5lcihlLGkscil7bGV0IGEsbz1yLmluamVjdG9yfHxyLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLHM9W3twcm92aWRlOmxtLHVzZVZhbHVlOnJ9LHtwcm92aWRlOlFDLHVzZVZhbHVlOml9LHtwcm92aWRlOlR1LHVzZVZhbHVlOmV9XTtyLmNvbnRhaW5lcj8iZnVuY3Rpb24iPT10eXBlb2Ygci5jb250YWluZXI/YT1yLmNvbnRhaW5lcjooYT1yLmNvbnRhaW5lci50eXBlLHMucHVzaCguLi5yLmNvbnRhaW5lci5wcm92aWRlcnMocikpKTphPXM1O2xldCBsPW5ldyBDYyhhLHIudmlld0NvbnRhaW5lclJlZix6bi5jcmVhdGUoe3BhcmVudDpvfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6c30pLHIuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtyZXR1cm4gZS5hdHRhY2gobCkuaW5zdGFuY2V9X2F0dGFjaERpYWxvZ0NvbnRlbnQoZSxpLHIsbyl7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgcz10aGlzLl9jcmVhdGVJbmplY3RvcihvLGkscix2b2lkIDApLGE9eyRpbXBsaWNpdDpvLmRhdGEsZGlhbG9nUmVmOml9O28udGVtcGxhdGVDb250ZXh0JiYoYT17Li4uYSwuLi4iZnVuY3Rpb24iPT10eXBlb2Ygby50ZW1wbGF0ZUNvbnRleHQ/by50ZW1wbGF0ZUNvbnRleHQoKTpvLnRlbXBsYXRlQ29udGV4dH0pLHIuYXR0YWNoVGVtcGxhdGVQb3J0YWwobmV3IGhzKGUsbnVsbCxhLHMpKX1lbHNle2xldCBzPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHRoaXMuX2luamVjdG9yKSxhPXIuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG5ldyBDYyhlLG8udmlld0NvbnRhaW5lclJlZixzLG8uY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSk7aS5jb21wb25lbnRJbnN0YW5jZT1hLmluc3RhbmNlfX1fY3JlYXRlSW5qZWN0b3IoZSxpLHIsbyl7bGV0IHM9ZS5pbmplY3Rvcnx8ZS52aWV3Q29udGFpbmVyUmVmPy5pbmplY3RvcixhPVt7cHJvdmlkZTpIRGUsdXNlVmFsdWU6ZS5kYXRhfSx7cHJvdmlkZTpRQyx1c2VWYWx1ZTppfV07cmV0dXJuIGUucHJvdmlkZXJzJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUucHJvdmlkZXJzP2EucHVzaCguLi5lLnByb3ZpZGVycyhpLGUscikpOmEucHVzaCguLi5lLnByb3ZpZGVycykpLGUuZGlyZWN0aW9uJiYoIXN8fCFzLmdldChpcixudWxsLGlpLk9wdGlvbmFsKSkmJmEucHVzaCh7cHJvdmlkZTppcix1c2VWYWx1ZTp7dmFsdWU6ZS5kaXJlY3Rpb24sY2hhbmdlOmp0KCl9fSksem4uY3JlYXRlKHtwYXJlbnQ6c3x8byxwcm92aWRlcnM6YX0pfV9yZW1vdmVPcGVuRGlhbG9nKGUsaSl7bGV0IHI9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKGUpO3I+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShyLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHwodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmZvckVhY2goKG8scyk9PntvP3Muc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsbyk6cy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIil9KSx0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuY2xlYXIoKSxpJiZ0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSkpfV9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCk7aWYoZS5wYXJlbnRFbGVtZW50KXtsZXQgaT1lLnBhcmVudEVsZW1lbnQuY2hpbGRyZW47Zm9yKGxldCByPWkubGVuZ3RoLTE7cj4tMTtyLS0pe2xldCBvPWlbcl07byE9PWUmJiJTQ1JJUFQiIT09by5ub2RlTmFtZSYmIlNUWUxFIiE9PW8ubm9kZU5hbWUmJiFvLmhhc0F0dHJpYnV0ZSgiYXJpYS1saXZlIikmJih0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuc2V0KG8sby5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpLG8uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSl9fX1fZ2V0QWZ0ZXJBbGxDbG9zZWQoKXtsZXQgZT10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIGU/ZS5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKHpuKSxSKFVEZSw4KSxSKG4sMTIpLFIoTl8pLFIoUEopKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBvNShuLHQpe2xldCBlPW4ubGVuZ3RoO2Zvcig7ZS0tOyl0KG5bZV0pfXZhciBSSj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthNSxqRGVdLGltcG9ydHM6W1ZvLHdjLFBfLHdjXX0pLG59KSgpO2Z1bmN0aW9uIFdEZShuLHQpe312YXIgQl89e3BhcmFtczp7ZW50ZXJBbmltYXRpb25EdXJhdGlvbjoiMTUwbXMiLGV4aXRBbmltYXRpb25EdXJhdGlvbjoiNzVtcyJ9fSxxRGU9e2RpYWxvZ0NvbnRhaW5lcjpIcigiZGlhbG9nQ29udGFpbmVyIixbRWkoInZvaWQsIGV4aXQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxFaSgiZW50ZXIiLHJuKHt0cmFuc2Zvcm06Im5vbmUifSkpLElpKCIqID0+IGVudGVyIixIMyhbVmkoInt7ZW50ZXJBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7dHJhbnNmb3JtOiJub25lIixvcGFjaXR5OjF9KSksRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSksQl8pLElpKCIqID0+IHZvaWQsICogPT4gZXhpdCIsSDMoW1ZpKCJ7e2V4aXRBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIscm4oe29wYWNpdHk6MH0pKSxGZigiQCoiLGtmKCkse29wdGlvbmFsOiEwfSldKSxCXyldKX0sVl89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuZGVsYXlGb2N1c1RyYXA9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmVudGVyQW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmVudGVyQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5leGl0QW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmV4aXRBbmltYXRpb25EdXJhdGlvbn19LFlEZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgczV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGkscixvLHMsYSxsLGMpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgR31fY2FwdHVyZUluaXRpYWxGb2N1cygpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcHx8dGhpcy5fdHJhcEZvY3VzKCl9X29wZW5BbmltYXRpb25Eb25lKGUpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcCYmdGhpcy5fdHJhcEZvY3VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuZWQiLHRvdGFsVGltZTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxmZWF0dXJlczpbdHRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxYRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFlEZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIoZSxpLHIsbyxzLGEsbCx1KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1jLHRoaXMuX3N0YXRlPSJlbnRlciJ9X29uQW5pbWF0aW9uRG9uZSh7dG9TdGF0ZTplLHRvdGFsVGltZTppfSl7ImVudGVyIj09PWU/dGhpcy5fb3BlbkFuaW1hdGlvbkRvbmUoaSk6ImV4aXQiPT09ZSYmdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTppfSl9X29uQW5pbWF0aW9uU3RhcnQoe3RvU3RhdGU6ZSx0b3RhbFRpbWU6aX0peyJlbnRlciI9PT1lP3RoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmluZyIsdG90YWxUaW1lOml9KTooImV4aXQiPT09ZXx8InZvaWQiPT09ZSkmJnRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOml9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRBbmltYXRpb25TdGF0ZSgpe3JldHVybnt2YWx1ZTp0aGlzLl9zdGF0ZSxwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246dGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb258fEJfLnBhcmFtcy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uLGV4aXRBbmltYXRpb25EdXJhdGlvbjp0aGlzLl9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufHxCXy5wYXJhbXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyhubiksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmkwKCJAZGlhbG9nQ29udGFpbmVyLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25BbmltYXRpb25TdGFydChvKX0pKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkFuaW1hdGlvbkRvbmUobyl9KSwyJmUmJihBYSgiaWQiLGkuX2NvbmZpZy5pZCksemUoImFyaWEtbW9kYWwiLGkuX2NvbmZpZy5hcmlhTW9kYWwpKCJyb2xlIixpLl9jb25maWcucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpLHIwKCJAZGlhbG9nQ29udGFpbmVyIixpLl9nZXRBbmltYXRpb25TdGF0ZSgpKSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFdEZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9ucy5tYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyLC5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMubWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCwubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbcURlLmRpYWxvZ0NvbnRhaW5lcl19fSksbn0pKCksTWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IFRlLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcgVGUsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoSGUocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxIdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShIZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx1bih0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKEhlKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLE9KKHRoaXMsImtleWRvd24iPT09ci50eXBlPyJrZXlib2FyZCI6Im1vdXNlIikpfSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEhlKGU9PiJjbG9zaW5nIj09PWUuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX3JlZi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSxlLnRvdGFsVGltZSsxMDApfSksdGhpcy5fc3RhdGU9MSx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCl9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWR9YWZ0ZXJDbG9zZWQoKXtyZXR1cm4gdGhpcy5fcmVmLmNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fcmVmLmJhY2tkcm9wQ2xpY2t9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9yZWYua2V5ZG93bkV2ZW50c311cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9yZWYuY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3k7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9yZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fcmVmLnVwZGF0ZVNpemUodCxlKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fcmVmLnJlbW92ZVBhbmVsQ2xhc3ModCksdGhpc31nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1fZmluaXNoRGlhbG9nQ2xvc2UoKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3JlZi5jbG9zZSh0aGlzLl9yZXN1bHQse2ZvY3VzT3JpZ2luOnRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlfSksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsfX07ZnVuY3Rpb24gT0oobix0LGUpe3JldHVybiBuLl9jbG9zZUludGVyYWN0aW9uVHlwZT10LG4uY2xvc2UoZSl9dmFyIEtDPW5ldyBzZSgiTWF0RGlhbG9nRGF0YSIpLFFEZT1uZXcgc2UoIm1hdC1kaWFsb2ctZGVmYXVsdC1vcHRpb25zIiksa0o9bmV3IHNlKCJtYXQtZGlhbG9nLXNjcm9sbC1zdHJhdGVneSIpLFpEZT17cHJvdmlkZTprSixkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fSxKRGU9MCwkRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9wYXJlbnREaWFsb2c9byx0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcj1sLHRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGU9Yyx0aGlzLl9kaWFsb2dEYXRhVG9rZW49dSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2lkUHJlZml4PSJtYXQtZGlhbG9nLSIsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWEsdGhpcy5fZGlhbG9nPWkuZ2V0KGE1KX1nZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH1vcGVuKGUsaSl7bGV0IHI7KGk9ey4uLnRoaXMuX2RlZmF1bHRPcHRpb25zfHxuZXcgVl8sLi4uaX0pLmlkPWkuaWR8fGAke3RoaXMuX2lkUHJlZml4fSR7SkRlKyt9YCxpLnNjcm9sbFN0cmF0ZWd5PWkuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCk7bGV0IG89dGhpcy5fZGlhbG9nLm9wZW4oZSx7Li4uaSxwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksZGlzYWJsZUNsb3NlOiEwLGNsb3NlT25EZXN0cm95OiExLGNvbnRhaW5lcjp7dHlwZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHByb3ZpZGVyczooKT0+W3twcm92aWRlOlZfLHVzZVZhbHVlOml9LHtwcm92aWRlOmxtLHVzZVZhbHVlOml9XX0sdGVtcGxhdGVDb250ZXh0OigpPT4oe2RpYWxvZ1JlZjpyfSkscHJvdmlkZXJzOihzLGEsbCk9PihyPW5ldyB0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3RvcihzLGksbCksci51cGRhdGVQb3NpdGlvbihpPy5wb3NpdGlvbiksW3twcm92aWRlOnRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGUsdXNlVmFsdWU6bH0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nRGF0YVRva2VuLHVzZVZhbHVlOmEuZGF0YX0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IsdXNlVmFsdWU6cn1dKX0pO3JldHVybiByLmNvbXBvbmVudEluc3RhbmNlPW8uY29tcG9uZW50SW5zdGFuY2UsdGhpcy5vcGVuRGlhbG9ncy5wdXNoKHIpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChyKSxyLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpPT57bGV0IHM9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKHIpO3M+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShzLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSl9KSxyfWNsb3NlQWxsKCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMub3BlbkRpYWxvZ3MpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKX1fY2xvc2VEaWFsb2dzKGUpe2xldCBpPWUubGVuZ3RoO2Zvcig7aS0tOyllW2ldLmNsb3NlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE1jPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyAkRGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGksbyxhLGwscyxNZCxYRGUsS0MsYyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoem4pLFIoSHgsOCksUihRRGUsOCksUihrSiksUihuLDEyKSxSKE5fKSxSKExpLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxlQWU9MCxqQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmRpYWxvZ1JlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9kaWFsb2c9cix0aGlzLnR5cGU9ImJ1dHRvbiJ9bmdPbkluaXQoKXt0aGlzLmRpYWxvZ1JlZnx8KHRoaXMuZGlhbG9nUmVmPU5KKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5fbWF0RGlhbG9nQ2xvc2V8fGUuX21hdERpYWxvZ0Nsb3NlUmVzdWx0O2kmJih0aGlzLmRpYWxvZ1Jlc3VsdD1pLmN1cnJlbnRWYWx1ZSl9X29uQnV0dG9uQ2xpY2soZSl7T0oodGhpcy5kaWFsb2dSZWYsMD09PWUuc2NyZWVuWCYmMD09PWUuc2NyZWVuWT8ia2V5Ym9hcmQiOiJtb3VzZSIsdGhpcy5kaWFsb2dSZXN1bHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1kLDgpLHcoQWUpLHcoTWMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1jbG9zZSIsIiJdLFsiIiwibWF0RGlhbG9nQ2xvc2UiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25CdXR0b25DbGljayhvKX0pLDImZSYmemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgidHlwZSIsaS50eXBlKX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sdHlwZToidHlwZSIsZGlhbG9nUmVzdWx0OlsibWF0LWRpYWxvZy1jbG9zZSIsImRpYWxvZ1Jlc3VsdCJdLF9tYXREaWFsb2dDbG9zZTpbIm1hdERpYWxvZ0Nsb3NlIiwiX21hdERpYWxvZ0Nsb3NlIl19LGV4cG9ydEFzOlsibWF0RGlhbG9nQ2xvc2UiXSxmZWF0dXJlczpbenRdfSksbn0pKCksRko9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMuaWQ9Im1hdC1kaWFsb2ctdGl0bGUtIitlQWUrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1OSih0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhNZCw4KSx3KEFlKSx3KE1jKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy10aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZBYSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEdBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctY29udGVudCJdfSksbn0pKCksV0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWxpZ249InN0YXJ0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyIiwiY2VudGVyIj09PWkuYWxpZ24pKCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gTkoobix0KXtsZXQgZT1uLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2UmJiFlLmNsYXNzTGlzdC5jb250YWlucygibWF0LWRpYWxvZy1jb250YWluZXIiKTspZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGU/dC5maW5kKGk9PmkuaWQ9PT1lLmlkKTpudWxsfXZhciBIXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltNYyxaRGVdLGltcG9ydHM6W1JKLFZvLHdjLGRuLGRuXX0pLG59KSgpLHRBZT1bImNvbm5lY3Rpb25Db250YWluZXIiXSxuQWU9WyJpbnB1dENvbnRhaW5lciJdLGlBZT1bImxhYmVsIl07ZnVuY3Rpb24gckFlKG4sdCl7MSZuJiYoS3QoMCksZygxLCJkaXYiLDE0KSxOKDIsImRpdiIsMTUpKDMsImRpdiIsMTYpKDQsImRpdiIsMTcpLHYoKSxnKDUsImRpdiIsMTgpLE4oNiwiZGl2IiwxNSkoNywiZGl2IiwxNikoOCwiZGl2IiwxNyksdigpLFp0KCkpfWZ1bmN0aW9uIG9BZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTkpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLE5uKDEsMSksdigpfTImbiYmYigiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIm91dGxpbmUiIT1NKCkuYXBwZWFyYW5jZSl9ZnVuY3Rpb24gc0FlKG4sdCl7aWYoMSZuJiYoS3QoMCksTm4oMSwyKSxnKDIsInNwYW4iKSxEKDMpLHYoKSxadCgpKSwyJm4pe2xldCBlPU0oMik7eCgzKSx5dChlLl9jb250cm9sLnBsYWNlaG9sZGVyKX19ZnVuY3Rpb24gYUFlKG4sdCl7MSZuJiZObigwLDMsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBsQWUobix0KXsxJm4mJihnKDAsInNwYW4iLDIzKSxEKDEsIiAqIiksdigpKX1mdW5jdGlvbiBjQWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJsYWJlbCIsMjAsMjEpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLEUoMixzQWUsNCwxLCJuZy1jb250YWluZXIiLDEyKSxFKDMsYUFlLDEsMCwibmctY29udGVudCIsMTIpLEUoNCxsQWUsMiwwLCJzcGFuIiwyMiksdigpfWlmKDImbil7bGV0IGU9TSgpO2F0KCJtYXQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWZvcm0tZmllbGQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKSxiKCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwib3V0bGluZSIhPWUuYXBwZWFyYW5jZSkoImlkIixlLl9sYWJlbElkKSgibmdTd2l0Y2giLGUuX2hhc0xhYmVsKCkpLHplKCJmb3IiLGUuX2NvbnRyb2wuaWQpKCJhcmlhLW93bnMiLGUuX2NvbnRyb2wuaWQpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nSWYiLCFlLmhpZGVSZXF1aXJlZE1hcmtlciYmZS5fY29udHJvbC5yZXF1aXJlZCYmIWUuX2NvbnRyb2wuZGlzYWJsZWQpfX1mdW5jdGlvbiB1QWUobix0KXsxJm4mJihnKDAsImRpdiIsMjQpLE5uKDEsNCksdigpKX1mdW5jdGlvbiBkQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLE4oMSwic3BhbiIsMjYpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxhdCgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKX19ZnVuY3Rpb24gcEFlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxObigxLDUpLHYoKSksMiZuJiZiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixNKCkuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX1mdW5jdGlvbiBoQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMzApLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7YigiaWQiLGUuX2hpbnRMYWJlbElkKSx4KDEpLHl0KGUuaGludExhYmVsKX19ZnVuY3Rpb24gZkFlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI3KSxFKDEsaEFlLDIsMiwiZGl2IiwyOCksTm4oMiw2KSxOKDMsImRpdiIsMjkpLE5uKDQsNyksdigpKSwyJm4pe2xldCBlPU0oKTtiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixlLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSkseCgxKSxiKCJuZ0lmIixlLmhpbnRMYWJlbCl9fXZhciBtQWU9WyIqIixbWyIiLCJtYXRQcmVmaXgiLCIiXV0sW1sibWF0LXBsYWNlaG9sZGVyIl1dLFtbIm1hdC1sYWJlbCJdXSxbWyIiLCJtYXRTdWZmaXgiLCIiXV0sW1sibWF0LWVycm9yIl1dLFtbIm1hdC1oaW50IiwzLCJhbGlnbiIsImVuZCJdXSxbWyJtYXQtaGludCIsImFsaWduIiwiZW5kIl1dXSxnQWU9WyIqIiwiW21hdFByZWZpeF0iLCJtYXQtcGxhY2Vob2xkZXIiLCJtYXQtbGFiZWwiLCJbbWF0U3VmZml4XSIsIm1hdC1lcnJvciIsIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKSIsIm1hdC1oaW50W2FsaWduPSdlbmQnXSJdLF9BZT0wLFZKPW5ldyBzZSgiTWF0RXJyb3IiKSxISj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pZD0ibWF0LWVycm9yLSIrX0FlKyssZXx8aS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEtvKCJhcmlhLWxpdmUiKSx3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdXSxob3N0QXR0cnM6WyJhcmlhLWF0b21pYyIsInRydWUiLDEsIm1hdC1lcnJvciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VkosdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSx2QWU9e3RyYW5zaXRpb25NZXNzYWdlczpIcigidHJhbnNpdGlvbk1lc3NhZ2VzIixbRWkoImVudGVyIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwJSkifSkpLElpKCJ2b2lkID0+IGVudGVyIixbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTVweCkifSksVmkoIjMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfSxVXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHlBZT1uZXcgc2UoIk1hdEhpbnQiKSx6Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksbn0pKCksYkFlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcGxhY2Vob2xkZXIiXV19KSxufSkoKSx4QWU9bmV3IHNlKCJNYXRQcmVmaXgiKSxDQWU9bmV3IHNlKCJNYXRTdWZmaXgiKSxMSj0wLE1BZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSwicHJpbWFyeSIpLFNBZT1uZXcgc2UoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHVtPW5ldyBzZSgiTWF0Rm9ybUZpZWxkIiksRHU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE1BZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2RlZmF1bHRzPW8sdGhpcy5fcGxhdGZvcm09cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hMSx0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMSx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGludExhYmVsSWQ9Im1hdC1oaW50LSIrTEorKyx0aGlzLl9sYWJlbElkPSJtYXQtZm9ybS1maWVsZC1sYWJlbC0iK0xKKyssdGhpcy5mbG9hdExhYmVsPXRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9hbmltYXRpb25zRW5hYmxlZD0iTm9vcEFuaW1hdGlvbnMiIT09bCx0aGlzLmFwcGVhcmFuY2U9bz8uYXBwZWFyYW5jZXx8ImxlZ2FjeSIsbyYmKHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1Cb29sZWFuKG8uaGlkZVJlcXVpcmVkTWFya2VyKSxvLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1vLmNvbG9yKSl9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXtsZXQgaT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9ZXx8dGhpcy5fZGVmYXVsdHM/LmFwcGVhcmFuY2V8fCJsZWdhY3kiLCJvdXRsaW5lIj09PXRoaXMuX2FwcGVhcmFuY2UmJmkhPT1lJiYodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITApfWdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKXtyZXR1cm4gdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyfXNldCBoaWRlUmVxdWlyZWRNYXJrZXIoZSl7dGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPVd0KGUpfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9X2NhbkxhYmVsRmxvYXQoKXtyZXR1cm4ibmV2ZXIiIT09dGhpcy5mbG9hdExhYmVsfWdldCBoaW50TGFiZWwoKXtyZXR1cm4gdGhpcy5faGludExhYmVsfXNldCBoaW50TGFiZWwoZSl7dGhpcy5faGludExhYmVsPWUsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4ibGVnYWN5IiE9PXRoaXMuYXBwZWFyYW5jZSYmIm5ldmVyIj09PXRoaXMuX2Zsb2F0TGFiZWw/ImF1dG8iOnRoaXMuX2Zsb2F0TGFiZWx9c2V0IGZsb2F0TGFiZWwoZSl7ZSE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPWV8fHRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IF9jb250cm9sKCl7cmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbHx8dGhpcy5fY29udHJvbE5vblN0YXRpY3x8dGhpcy5fY29udHJvbFN0YXRpY31zZXQgX2NvbnRyb2woZSl7dGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sPWV9Z2V0TGFiZWxJZCgpe3JldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCk/dGhpcy5fbGFiZWxJZDpudWxsfWdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZnx8dGhpcy5fZWxlbWVudFJlZn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpO2xldCBlPXRoaXMuX2NvbnRyb2w7ZS5jb250cm9sVHlwZSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC1mb3JtLWZpZWxkLXR5cGUtJHtlLmNvbnRyb2xUeXBlfWApLGUuc3RhdGVDaGFuZ2VzLnBpcGUoVm4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxlLm5nQ29udHJvbCYmZS5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9KX0pLHVuKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsdGhpcy5fc3VmZml4Q2hpbGRyZW4uY2hhbmdlcykuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSx0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9wcm9jZXNzSGludHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZU91dGxpbmVHYXAoKSl9KTp0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCksdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHkmJnRoaXMudXBkYXRlT3V0bGluZUdhcCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2hvdWxkRm9yd2FyZChlKXtsZXQgaT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGkmJmlbZV19X2hhc1BsYWNlaG9sZGVyKCl7cmV0dXJuISEodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5wbGFjZWhvbGRlcnx8dGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl9X2hhc0xhYmVsKCl7cmV0dXJuISghdGhpcy5fbGFiZWxDaGlsZE5vblN0YXRpYyYmIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWMpfV9zaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQoKSYmKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdHx8dGhpcy5fc2hvdWxkQWx3YXlzRmxvYXQoKSl9X2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9X2hhc0Zsb2F0aW5nTGFiZWwoKXtyZXR1cm4gdGhpcy5faGFzTGFiZWwoKXx8ImxlZ2FjeSI9PT10aGlzLmFwcGVhcmFuY2UmJnRoaXMuX2hhc1BsYWNlaG9sZGVyKCl9X2dldERpc3BsYXllZE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJnRoaXMuX2Vycm9yQ2hpbGRyZW4ubGVuZ3RoPjAmJnRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZT8iZXJyb3IiOiJoaW50In1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJnRoaXMuX2xhYmVsJiYodGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITAsbGkodGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudCwidHJhbnNpdGlvbmVuZCIpLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Nob3dBbHdheXNBbmltYXRlPSExfSkpLHRoaXMuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCl7fV9wcm9jZXNzSGludHMoKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9X3ZhbGlkYXRlSGludHMoKXt9X2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmZsb2F0TGFiZWx8fCJhdXRvIn1fc3luY0Rlc2NyaWJlZEJ5SWRzKCl7aWYodGhpcy5fY29udHJvbCl7bGV0IGU9W107aWYodGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmZS5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgiICIpKSwiaGludCI9PT10aGlzLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKXtsZXQgaT10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+InN0YXJ0Ij09PW8uYWxpZ24pOm51bGwscj10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+ImVuZCI9PT1vLmFsaWduKTpudWxsO2k/ZS5wdXNoKGkuaWQpOnRoaXMuX2hpbnRMYWJlbCYmZS5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxyJiZlLnB1c2goci5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiZlLnB1c2goLi4udGhpcy5fZXJyb3JDaGlsZHJlbi5tYXAoaT0+aS5pZCkpO3RoaXMuX2NvbnRyb2wuc2V0RGVzY3JpYmVkQnlJZHMoZSl9fV92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpe311cGRhdGVPdXRsaW5lR2FwKCl7bGV0IGU9dGhpcy5fbGFiZWw/dGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudDpudWxsLGk9dGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LHI9Ii5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IixvPSIubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiO2lmKCJvdXRsaW5lIiE9PXRoaXMuYXBwZWFyYW5jZXx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIWV8fCFlLmNoaWxkcmVuLmxlbmd0aHx8IWUudGV4dENvbnRlbnQudHJpbSgpKXtsZXQgdT1pLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7cn0sICR7b31gKTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKyl1W2RdLnN0eWxlLndpZHRoPSIwIjtyZXR1cm59aWYoIXRoaXMuX2lzQXR0YWNoZWRUb0RPTSgpKXJldHVybiB2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSEwKTtsZXQgcz0wLGE9MCxsPWkucXVlcnlTZWxlY3RvckFsbChyKSxjPWkucXVlcnlTZWxlY3RvckFsbChvKTtpZih0aGlzLl9sYWJlbCYmdGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpe2xldCB1PWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PXUud2lkdGgmJjA9PT11LmhlaWdodClyZXR1cm4gdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdm9pZCh0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSk7bGV0IGQ9dGhpcy5fZ2V0U3RhcnRFbmQodSkscD1lLmNoaWxkcmVuLGg9dGhpcy5fZ2V0U3RhcnRFbmQocFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksZj0wO2ZvcihsZXQgbT0wO208cC5sZW5ndGg7bSsrKWYrPXBbbV0ub2Zmc2V0V2lkdGg7cz1NYXRoLmFicyhoLWQpLTUsYT1mPjA/Ljc1KmYrMTA6MH1mb3IobGV0IHU9MDt1PGwubGVuZ3RoO3UrKylsW3VdLnN0eWxlLndpZHRoPWAke3N9cHhgO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKWNbdV0uc3R5bGUud2lkdGg9YCR7YX1weGA7dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITF9X2dldFN0YXJ0RW5kKGUpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlP2UucmlnaHQ6ZS5sZWZ0fV9pc0F0dGFjaGVkVG9ET00oKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoZS5nZXRSb290Tm9kZSl7bGV0IGk9ZS5nZXRSb290Tm9kZSgpO3JldHVybiBpJiZpIT09ZX1yZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGlyLDgpLHcoU0FlLDgpLHcodWkpLHcocHQpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1mb3JtLWZpZWxkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLFVfLDUpLE5pKHIsVV8sNyksTmkocix6Xyw1KSxOaShyLHpfLDcpLE5pKHIsYkFlLDUpLE5pKHIsVkosNSksTmkocix5QWUsNSksTmkocix4QWUsNSksTmkocixDQWUsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2NvbnRyb2xOb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2NvbnRyb2xTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX3BsYWNlaG9sZGVyQ2hpbGQ9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKSxOZShvPUxlKCkpJiYoaS5fcHJlZml4Q2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX3N1ZmZpeENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodEFlLDcpLGx0KG5BZSw1KSxsdChpQWUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX2lucHV0Q29udGFpbmVyUmVmPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IiwibGVnYWN5Ij09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSgibWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IixpLl9jYW5MYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLGkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCIsaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciIsaS5faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpKSgibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixpLl9jb250cm9sLmF1dG9maWxsZWQpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsaGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGhpbnRMYWJlbDoiaGludExhYmVsIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOnVtLHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpnQWUsZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4IiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm5nU3dpdGNoIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsIiwiIl0sWyJjbGFzcyIsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIiwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2kobUFlKSxnKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxFKDMsckFlLDksMCwibmctY29udGFpbmVyIiwzKSxFKDQsb0FlLDIsMSwiZGl2Iiw0KSxnKDUsImRpdiIsNSw2KSxObig3KSxnKDgsInNwYW4iLDcpLEUoOSxjQWUsNSwxNiwibGFiZWwiLDgpLHYoKSgpLEUoMTAsdUFlLDIsMCwiZGl2Iiw5KSx2KCksRSgxMSxkQWUsMiw0LCJkaXYiLDEwKSxnKDEyLCJkaXYiLDExKSxFKDEzLHBBZSwyLDEsImRpdiIsMTIpLEUoMTQsZkFlLDUsMiwiZGl2IiwxMyksdigpKCkpLDImZSYmKHgoMyksYigibmdJZiIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdJZiIsaS5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSx4KDUpLGIoIm5nSWYiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSkseCgxKSxiKCJuZ0lmIixpLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLHgoMSksYigibmdJZiIsIm91dGxpbmUiIT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdTd2l0Y2giLGkuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsU19dLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwnLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO3BhZGRpbmc6Ljc1ZW0gLjc1ZW0gMCAuNzVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmUtY29sb3I6R3JheVRleHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6ZGFzaGVkIDNweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjFweDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGw6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye3BhZGRpbmc6MCAxZW19JywnLm1hdC1pbnB1dC1lbGVtZW50e2ZvbnQ6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207dGV4dC1hbGlnbjppbmhlcml0O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY29udGFjdHMtYXV0by1maWxsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2Fwcy1sb2NrLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6bm90KFt0eXBlPXBhc3N3b3JkXSk6Oi13ZWJraXQtY3JlZGVudGlhbHMtYXV0by1maWxsLWJ1dHRvbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV06OmFmdGVye2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jbGVhci1idXR0b257Zm9udC1zaXplOi43NWVtfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6MWVtO3RvcDotMWVtO21hcmdpbi1ib3R0b206LTFlbX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yaWdodDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItdG9wOjVweCBzb2xpZDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotMi41cHg7cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntyaWdodDphdXRvO2xlZnQ6MH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDoxNXB4fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxMHB4KX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcnttYXJnaW4tdG9wOi01cHh9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotMTBweH0nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbnt3aWR0aDoxZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2ZvbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntmb250LXNpemU6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dG9wOjA7aGVpZ2h0OjJweDtvdmVyZmxvdzpoaWRkZW59LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym9yZGVyLXRvcC1jb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcnttYXJnaW46LjI1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmc6MCAuNzVlbSAwIC43NWVtO21hcmdpbi10b3A6LTAuMjVlbTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3VmZml4e3RvcDouMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjI1ZW07bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO21pbi13aWR0aDo1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4O2JvcmRlci1yaWdodC1zdHlsZTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6MCA1cHggNXB4IDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMDtib3JkZXItbGVmdC1zdHlsZTpub25lO2ZsZXgtZ3JvdzoxfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6bm9uZTtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci1yYWRpdXM6LjAwMDAwMXB4O2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6R3JheVRleHR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvcmRlci10b3Atc3R5bGU6ZG90dGVkO2JvcmRlci10b3Atd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDYwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbdkFlLnRyYW5zaXRpb25NZXNzYWdlc119LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZG09KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGRuLHpwLGRuXX0pLG59KSgpLEtKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9yZW5kZXJlcj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLm9uQ2hhbmdlPXI9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShlLGkpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLGkpfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoWGMpLHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHBtPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLSnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxIbz1uZXcgc2UoIk5nVmFsdWVBY2Nlc3NvciIpLEVBZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+VEFlKSxtdWx0aTohMH0sVEFlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFtFQWVdKSx0dF19KSxufSkoKSxEQWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PnRJKSxtdWx0aTohMH0sSUFlPW5ldyBzZSgiQ29tcG9zaXRpb25FdmVudE1vZGUiKSx0ST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS0p7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY29tcG9zaXRpb25Nb2RlPXIsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24oKXtsZXQgbj1nbCgpP2dsKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3Qobi50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfV9oYW5kbGVJbnB1dChlKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShlKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoZSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhYYyksdyhBZSksdyhJQWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9jb21wb3NpdGlvbkVuZChvLnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6WyR0KFtEQWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBLcChuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBaSihuKXtyZXR1cm4gbnVsbCE9biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aH12YXIgVW89bmV3IHNlKCJOZ1ZhbGlkYXRvcnMiKSxacD1uZXcgc2UoIk5nQXN5bmNWYWxpZGF0b3JzIiksUkFlPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sU2M9Y2xhc3N7c3RhdGljIG1pbih0KXtyZXR1cm4gSkoodCl9c3RhdGljIG1heCh0KXtyZXR1cm4gJEoodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBlJCh0KX1zdGF0aWMgcmVxdWlyZWRUcnVlKHQpe3JldHVybiB0JCh0KX1zdGF0aWMgZW1haWwodCl7cmV0dXJuIG4kKHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIGkkKHQpfXN0YXRpYyBtYXhMZW5ndGgodCl7cmV0dXJuIHIkKHQpfXN0YXRpYyBwYXR0ZXJuKHQpe3JldHVybiBvJCh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gZCQodCl9c3RhdGljIGNvbXBvc2VBc3luYyh0KXtyZXR1cm4gcCQodCl9fTtmdW5jdGlvbiBKSihuKXtyZXR1cm4gdD0+e2lmKEtwKHQudmFsdWUpfHxLcChuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gJEoobil7cmV0dXJuIHQ9PntpZihLcCh0LnZhbHVlKXx8S3AobikpcmV0dXJuIG51bGw7bGV0IGU9cGFyc2VGbG9hdCh0LnZhbHVlKTtyZXR1cm4haXNOYU4oZSkmJmU+bj97bWF4OnttYXg6bixhY3R1YWw6dC52YWx1ZX19Om51bGx9fWZ1bmN0aW9uIGUkKG4pe3JldHVybiBLcChuLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gdCQobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBuJChuKXtyZXR1cm4gS3Aobi52YWx1ZSl8fFJBZS50ZXN0KG4udmFsdWUpP251bGw6e2VtYWlsOiEwfX1mdW5jdGlvbiBpJChuKXtyZXR1cm4gdD0+S3AodC52YWx1ZSl8fCFaSih0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHIkKG4pe3JldHVybiB0PT5aSih0LnZhbHVlKSYmdC52YWx1ZS5sZW5ndGg+bj97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gbyQobil7aWYoIW4pcmV0dXJuIFlBO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihLcChpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiBZQShuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzJChuKXtyZXR1cm4gbnVsbCE9bn1mdW5jdGlvbiBhJChuKXtyZXR1cm4gbjAobik/bG8obik6bn1mdW5jdGlvbiBsJChuKXtsZXQgdD17fTtyZXR1cm4gbi5mb3JFYWNoKGU9Pnt0PW51bGwhPWU/ey4uLnQsLi4uZX06dH0pLDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/bnVsbDp0fWZ1bmN0aW9uIGMkKG4sdCl7cmV0dXJuIHQubWFwKGU9PmUobikpfWZ1bmN0aW9uIHUkKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtyZXR1cm4hbi52YWxpZGF0ZX0odCk/dDplPT50LnZhbGlkYXRlKGUpKX1mdW5jdGlvbiBkJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGwkKGMkKGUsdCkpfX1mdW5jdGlvbiBkNShuKXtyZXR1cm4gbnVsbCE9bj9kJCh1JChuKSk6bnVsbH1mdW5jdGlvbiBwJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHhvKGMkKGUsdCkubWFwKGEkKSkucGlwZShCKGwkKSl9fWZ1bmN0aW9uIHA1KG4pe3JldHVybiBudWxsIT1uP3AkKHUkKG4pKTpudWxsfWZ1bmN0aW9uIFVKKG4sdCl7cmV0dXJuIG51bGw9PT1uP1t0XTpBcnJheS5pc0FycmF5KG4pP1suLi5uLHRdOltuLHRdfWZ1bmN0aW9uIGgkKG4pe3JldHVybiBuLl9yYXdWYWxpZGF0b3JzfWZ1bmN0aW9uIGYkKG4pe3JldHVybiBuLl9yYXdBc3luY1ZhbGlkYXRvcnN9ZnVuY3Rpb24gbDUobil7cmV0dXJuIG4/QXJyYXkuaXNBcnJheShuKT9uOltuXTpbXX1mdW5jdGlvbiBYQShuLHQpe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uaW5jbHVkZXModCk6bj09PXR9ZnVuY3Rpb24gekoobix0KXtsZXQgZT1sNSh0KTtyZXR1cm4gbDUobikuZm9yRWFjaChyPT57WEEoZSxyKXx8ZS5wdXNoKHIpfSksZX1mdW5jdGlvbiBqSihuLHQpe3JldHVybiBsNSh0KS5maWx0ZXIoZT0+IVhBKG4sZSkpfXZhciBRQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWQ1KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1wNSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119cmVzZXQodCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9aGFzRXJyb3IodCxlKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKHQsZSl9Z2V0RXJyb3IodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcih0LGUpOm51bGx9fSxmcz1jbGFzcyBleHRlbmRzIFFBe2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19LHBhPWNsYXNzIGV4dGVuZHMgUUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX0sYzU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2Q9dH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlzUGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX0sbSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGM1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHBhLDIpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJuZy11bnRvdWNoZWQiLGkuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixpLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixpLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaS5pc0RpcnR5KSgibmctdmFsaWQiLGkuaXNWYWxpZCkoIm5nLWludmFsaWQiLGkuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaS5pc1BlbmRpbmcpfSxmZWF0dXJlczpbdHRdfSksbn0pKCksSkM9IlZBTElEIixxQT0iSU5WQUxJRCIsal89IlBFTkRJTkciLCRDPSJESVNBQkxFRCI7ZnVuY3Rpb24gXyQobil7cmV0dXJuKG5JKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBHSihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9kNShuKTpufHxudWxsfWZ1bmN0aW9uIHYkKG4sdCl7cmV0dXJuKG5JKHQpP3QuYXN5bmNWYWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIFdKKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP3A1KG4pOm58fG51bGx9ZnVuY3Rpb24gbkkobil7cmV0dXJuIG51bGwhPW4mJiFBcnJheS5pc0FycmF5KG4pJiYib2JqZWN0Ij09dHlwZW9mIG59dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1lLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodGhpcy5fcmF3VmFsaWRhdG9ycyksdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVdKKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IodCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXR9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IodCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj10fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PUpDfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09cUF9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PWpffWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PSRDfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09JEN9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XSih0KX1hZGRWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyh6Sih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoekoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhqSih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoakoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsdCl9aGFzQXN5bmNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyx0KX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKHQ9PnQubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9bWFya0FzRGlydHkodD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9bWFya0FzUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1tYXJrQXNQZW5kaW5nKHQ9e30pe3RoaXMuc3RhdHVzPWpfLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX1kaXNhYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPSRDLHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmRpc2FibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCEwKSl9ZW5hYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPUpDLHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5lbmFibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMSkpfV91cGRhdGVBbmNlc3RvcnModCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHQuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0PXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PUpDfHx0aGlzLnN0YXR1cz09PWpfKSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8kQzpKQ31fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKHQpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPWpfLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtsZXQgZT1hJCh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEcsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBHfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpPyRDOnRoaXMuZXJyb3JzP3FBOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGpfKT9qXzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMocUEpP3FBOkpDfV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7bkkodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH19LFpBPWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKF8kKGUpLHYkKGksZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUsaT17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDppLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbCh0LGUsaT17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH1zZXRWYWx1ZSh0LGU9e30peyhmdW5jdGlvbihuLHQsZSl7bi5fZm9yRWFjaENoaWxkKChpLHIpPT57aWYodm9pZCAwPT09ZVtyXSl0aHJvdyBuZXcgTXQoMTAwMiwiIil9KX0pKHRoaXMsMCx0KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PnsoZnVuY3Rpb24obix0LGUpe2xldCBpPW4uY29udHJvbHM7aWYoISh0P09iamVjdC5rZXlzKGkpOmkpLmxlbmd0aCl0aHJvdyBuZXcgTXQoMWUzLCIiKTtpZighaVtlXSl0aHJvdyBuZXcgTXQoMTAwMSwiIil9KSh0aGlzLCEwLGkpLHRoaXMuY29udHJvbHNbaV0uc2V0VmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10aGlzLmNvbnRyb2xzW2ldO3ImJnIucGF0Y2hWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKHQsZSxpKT0+KHRbaV09ZS5nZXRSYXdWYWx1ZSgpLHQpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLChlLGkpPT4hIWkuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8ZSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV9mb3JFYWNoQ2hpbGQodCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChlPT57bGV0IGk9dGhpcy5jb250cm9sc1tlXTtpJiZ0KGksZSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHModCl7Zm9yKGxldFtlLGldb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhlKSYmdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGUsaSxyKT0+KChpLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoZVtyXT1pLnZhbHVlKSxlKSl9X3JlZHVjZUNoaWxkcmVuKHQsZSl7bGV0IGk9dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChyLG8pPT57aT1lKGkscixvKX0pLGl9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZCh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmNvbnRyb2xzW3RdOm51bGx9fTtmdW5jdGlvbiBpSShuLHQpe3JldHVyblsuLi50LnBhdGgsbl19ZnVuY3Rpb24gdHcobix0KXtoNShuLHQpLHQudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKG4udmFsdWUpLG4uZGlzYWJsZWQmJnQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oITApLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZT0+e24uX3BlbmRpbmdWYWx1ZT1lLG4uX3BlbmRpbmdDaGFuZ2U9ITAsbi5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09bi51cGRhdGVPbiYmeSQobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnkkKG4sdCksInN1Ym1pdCIhPT1uLnVwZGF0ZU9uJiZuLm1hcmtBc1RvdWNoZWQoKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7aWYodC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2xldCBlPWk9Pnt0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShpKX07bi5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKX0pfX0obix0KX1mdW5jdGlvbiBKQShuLHQsZT0hMCl7bGV0IGk9KCk9Pnt9O3QudmFsdWVBY2Nlc3NvciYmKHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGkpLHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChpKSksZUkobix0KSxuJiYodC5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksbi5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9ZnVuY3Rpb24gJEEobix0KXtuLmZvckVhY2goZT0+e2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpfSl9ZnVuY3Rpb24gaDUobix0KXtsZXQgZT1oJChuKTtudWxsIT09dC52YWxpZGF0b3I/bi5zZXRWYWxpZGF0b3JzKFVKKGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9ZiQobik7bnVsbCE9PXQuYXN5bmNWYWxpZGF0b3I/bi5zZXRBc3luY1ZhbGlkYXRvcnMoVUooaSx0LmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4uc2V0QXN5bmNWYWxpZGF0b3JzKFtpXSk7bGV0IHI9KCk9Pm4udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOyRBKHQuX3Jhd1ZhbGlkYXRvcnMsciksJEEodC5fcmF3QXN5bmNWYWxpZGF0b3JzLHIpfWZ1bmN0aW9uIGVJKG4sdCl7bGV0IGU9ITE7aWYobnVsbCE9PW4pe2lmKG51bGwhPT10LnZhbGlkYXRvcil7bGV0IHI9aCQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9ZiQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQuYXN5bmNWYWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0QXN5bmNWYWxpZGF0b3JzKG8pKX19fWxldCBpPSgpPT57fTtyZXR1cm4gJEEodC5fcmF3VmFsaWRhdG9ycyxpKSwkQSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMsaSksZX1mdW5jdGlvbiB5JChuLHQpe24uX3BlbmRpbmdEaXJ0eSYmbi5tYXJrQXNEaXJ0eSgpLG4uc2V0VmFsdWUobi5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSx0LnZpZXdUb01vZGVsVXBkYXRlKG4uX3BlbmRpbmdWYWx1ZSksbi5fcGVuZGluZ0NoYW5nZT0hMX1mdW5jdGlvbiBiJChuLHQpe2g1KG4sdCl9ZnVuY3Rpb24gZjUobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24geCQobix0KXtuLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksdC5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2w7InN1Ym1pdCI9PT1pLnVwZGF0ZU9uJiZpLl9wZW5kaW5nQ2hhbmdlJiYoZS52aWV3VG9Nb2RlbFVwZGF0ZShpLl9wZW5kaW5nVmFsdWUpLGkuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9ZnVuY3Rpb24gbTUobix0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZSxpLHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCksdC5mb3JFYWNoKG89PntvLmNvbnN0cnVjdG9yPT09dEk/ZT1vOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5jb25zdHJ1Y3Rvcik9PT1wbX0obyk/aT1vOnI9b30pLHJ8fGl8fGV8fG51bGx9dmFyIFlBZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+R18pfSxldz1Qcm9taXNlLnJlc29sdmUoKSxHXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBHLHRoaXMuZm9ybT1uZXcgWkEoe30sZDUoZSkscDUoaSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtlLmNvbnRyb2w9aS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLGUuY29udHJvbCksdHcoZS5jb250cm9sLGUpLGUuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChlKX0pfWdldENvbnRyb2woZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX1yZW1vdmVDb250cm9sKGUpe2V3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSksdGhpcy5fZGlyZWN0aXZlcy5kZWxldGUoZSl9KX1hZGRGb3JtR3JvdXAoZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKSxyPW5ldyBaQSh7fSk7YiQocixlKSxpLnJlZ2lzdGVyQ29udHJvbChlLm5hbWUsciksci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChlKXtldy50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpfSl9Z2V0Rm9ybUdyb3VwKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9dXBkYXRlTW9kZWwoZSxpKXtldy50aGVuKCgpPT57dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfSl9c2V0VmFsdWUoZSl7dGhpcy5jb250cm9sLnNldFZhbHVlKGUpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihlKXtyZXR1cm4gZS5wb3AoKSxlLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGUpOnRoaXMuZm9ybX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhVbywxMCksdyhacCwxMCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbWUFlXSksdHRdfSksbn0pKCk7ZnVuY3Rpb24gcUoobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBZSihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYyPT09T2JqZWN0LmtleXMobikubGVuZ3RoJiYidmFsdWUiaW4gbiYmImRpc2FibGVkImluIG59dmFyIG53PWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodD1udWxsLGUsaSl7c3VwZXIoXyQoZSksdiQoaSxlKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVsbCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLG5JKGUpJiYoZS5ub25OdWxsYWJsZXx8ZS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9WUoodCk/dC52YWx1ZTp0KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGk9PmkodGhpcy52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXt0aGlzLnNldFZhbHVlKHQsZSl9cmVzZXQodD10aGlzLmRlZmF1bHRWYWx1ZSxlPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLm1hcmtBc1ByaXN0aW5lKGUpLHRoaXMubWFya0FzVW50b3VjaGVkKGUpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxlKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHModCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9X3VucmVnaXN0ZXJPbkNoYW5nZSh0KXtxSih0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtxSih0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLHQpfV9mb3JFYWNoQ2hpbGQodCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUodCl7WUoodCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQudmFsdWUsdC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dH19LEMkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmc3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBpSShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxRQWU9e3Byb3ZpZGU6ZnMsdXNlRXhpc3Rpbmc6cmkoKCk9PktBZSl9LEtBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcyw1KSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6WyR0KFtRQWVdKSx0dF19KSxufSkoKSxaQWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PkpBZSl9LFhKPVByb21pc2UucmVzb2x2ZSgpLEpBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5jb250cm9sPW5ldyBudyx0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMudXBkYXRlPW5ldyBHLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGUpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUpKXtsZXQgaT1lLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh7bmFtZTppLHBhdGg6dGhpcy5fZ2V0UGF0aChpKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGUmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGUpLGY1KGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShlKXt0aGlzLnZpZXdNb2RlbD1lLHRoaXMudXBkYXRlLmVtaXQoZSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFsb25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXt0dyh0aGlzLmNvbnRyb2wsdGhpcyksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoZSl7WEoudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZlMShpKTtYSi50aGVuKCgpPT57ciYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fZ2V0UGF0aChlKXtyZXR1cm4gdGhpcy5fcGFyZW50P2lJKGUsdGhpcy5fcGFyZW50KTpbZV19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsOSksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhubiw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlsibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOlskdChbWkFlXSksdHQsenRdfSksbn0pKCksJEFlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5nNSksbXVsdGk6ITB9LGc1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntlKCIiPT1pP251bGw6cGFyc2VGbG9hdChpKSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFskQWVdKSx0dF19KSxufSkoKSxlSWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9Pm5JZSksbXVsdGk6ITB9LHckPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx0SWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoZSxpKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbZSxpXSl9cmVtb3ZlKGUpe2ZvcihsZXQgaT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7aT49MDstLWkpaWYodGhpcy5fYWNjZXNzb3JzW2ldWzFdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGksMSl9c2VsZWN0KGUpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGk9Pnt0aGlzLl9pc1NhbWVHcm91cChpLGUpJiZpWzFdIT09ZSYmaVsxXS5maXJlVW5jaGVjayhlLnZhbHVlKX0pfV9pc1NhbWVHcm91cChlLGkpe3JldHVybiEhZVswXS5jb250cm9sJiZlWzBdLl9wYXJlbnQ9PT1pLl9jb250cm9sLl9wYXJlbnQmJmVbMV0ubmFtZT09PWkubmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46dyR9KSxufSkoKSxuSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMub25DaGFuZ2U9KCk9Pnt9fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQocGEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFhjKSx3KEFlKSx3KHRJZSksdyh6bikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbJHQoW2VJZV0pLHR0XX0pLG59KSgpLGlJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ckllKSxtdWx0aTohMH0sckllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW2lJZV0pLHR0XX0pLG59KSgpLF81PW5ldyBzZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxvSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnY1KX0sdjU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBhe2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLnVwZGF0ZT1uZXcgRyx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPW01KDAscil9c2V0IGlzRGlzYWJsZWQoZSl7fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJkpBKGksdGhpcywhMSksdHcodGhpcy5mb3JtLHRoaXMpLHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1mNShlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuZm9ybS5zZXRWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmSkEodGhpcy5mb3JtLHRoaXMsITEpfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1faXNDb250cm9sQ2hhbmdlZChlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoVW8sMTApLHcoWnAsMTApLHcoSG8sMTApLHcoXzUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW29JZV0pLHR0LHp0XX0pLG59KSgpLHNJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+V18pfSxXXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKGVJKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiB0dyhpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtKQShlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2wscj10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSE9PXImJihKQShpfHxudWxsLGUpLChuPT5uIGluc3RhbmNlb2YgbncpKHIpJiYodHcocixlKSxlLmNvbnRyb2w9cikpfSksdGhpcy5mb3JtLl91cGRhdGVUcmVlVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9zZXRVcEZvcm1Db250YWluZXIoZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO2IkKGksZSksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2xlYW5VcEZvcm1Db250YWluZXIoZSl7aWYodGhpcy5mb3JtKXtsZXQgaT10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSYmZnVuY3Rpb24obix0KXtyZXR1cm4gZUkobix0KX0oaSxlKSYmaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX19X3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKXt0aGlzLmZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksdGhpcy5fb2xkRm9ybSYmdGhpcy5fb2xkRm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KX1fdXBkYXRlVmFsaWRhdG9ycygpe2g1KHRoaXMuZm9ybSx0aGlzKSx0aGlzLl9vbGRGb3JtJiZlSSh0aGlzLl9vbGRGb3JtLHRoaXMpfV9jaGVja0Zvcm1QcmVzZW50KCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoInN1Ym1pdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdWJtaXQobyl9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNldCgpfSl9LGlucHV0czp7Zm9ybTpbImZvcm1Hcm91cCIsImZvcm0iXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW3NJZV0pLHR0LHp0XX0pLG59KSgpLGFJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+TSQpfSxNJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe0UkKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsMTMpLHcoVW8sMTApLHcoWnAsMTApKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbJHQoW2FJZV0pLHR0XX0pLG59KSgpLGxJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+UyQpfSxTJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUFycmF5KHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtQXJyYXkodGhpcyl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gaUkobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfV9jaGVja1BhcmVudFR5cGUoKXtFJCh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGZzLDEzKSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6WyR0KFtsSWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBFJChuKXtyZXR1cm4hKG4gaW5zdGFuY2VvZiBNJHx8biBpbnN0YW5jZW9mIFdffHxuIGluc3RhbmNlb2YgUyQpfXZhciBjSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnVJZSl9LHVJZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPXMsdGhpcy5fYWRkZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfXNldCBpc0Rpc2FibGVkKGUpe31uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksZjUoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIGlJKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcywxMyksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhfNSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOlskdChbY0llXSksdHQsenRdfSksbn0pKCksZEllPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5EJCksbXVsdGk6ITB9O2Z1bmN0aW9uIFQkKG4sdCl7cmV0dXJuIG51bGw9PW4/YCR7dH1gOih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0PSJPYmplY3QiKSxgJHtufTogJHt0fWAuc2xpY2UoMCw1MCkpfXZhciBEJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj1UJCh0aGlzLl9nZXRPcHRpb25JZChlKSxlKTt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIscil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGkpLGUodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKTplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6WyR0KFtkSWVdKSx0dF19KSxufSkoKSxBJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsZSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKFQkKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoRCQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpLGhJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+SSQpLG11bHRpOiEwfTtmdW5jdGlvbiBRSihuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgSSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXtsZXQgaTtpZih0aGlzLnZhbHVlPWUsQXJyYXkuaXNBcnJheShlKSl7bGV0IHI9ZS5tYXAobz0+dGhpcy5fZ2V0T3B0aW9uSWQobykpO2k9KG8scyk9PntvLl9zZXRTZWxlY3RlZChyLmluZGV4T2Yocy50b1N0cmluZygpKT4tMSl9fWVsc2UgaT0ocixvKT0+e3IuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goaSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntsZXQgcj1bXSxvPWkuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PW8pe2xldCBzPW87Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKHNbYV0udmFsdWUpO3IucHVzaChjKX19ZWxzZXtsZXQgcz1pLm9wdGlvbnM7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBsPXNbYV07aWYobC5zZWxlY3RlZCl7bGV0IGM9dGhpcy5fZ2V0T3B0aW9uVmFsdWUobC52YWx1ZSk7ci5wdXNoKGMpfX19dGhpcy52YWx1ZT1yLGUocil9fV9yZWdpc3Rlck9wdGlvbihlKXtsZXQgaT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoaSxlKSxpfV9nZXRPcHRpb25JZChlKXtmb3IobGV0IGkgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGkpLl92YWx1ZSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWU6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOlskdChbaEllXSksdHRdfSksbn0pKCksUCQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSl9X3NldEVsZW1lbnRWYWx1ZShlKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixlKX1fc2V0U2VsZWN0ZWQoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoSSQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpO2Z1bmN0aW9uIFIkKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIE8kKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlRmxvYXQobil9dmFyIGhtPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9WUF9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gZSl7bGV0IGk9dGhpcy5ub3JtYWxpemVJbnB1dChlW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKGkpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGkpOllBLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGUpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1lbmFibGVkKGUpe3JldHVybiBudWxsIT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCksbUllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5nSWUpLG11bHRpOiEwfSxnSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4Iix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9Pk8kKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PiRKKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbJHQoW21JZV0pLHR0XX0pLG59KSgpLF9JZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+dkllKSxtdWx0aTohMH0sdkllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5PJChlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5KSihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgibWluIixpLl9lbmFibGVkP2kubWluOm51bGwpfSxpbnB1dHM6e21pbjoibWluIn0sZmVhdHVyZXM6WyR0KFtfSWVdKSx0dF19KSxufSkoKSx5SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9PmskKSxtdWx0aTohMH0sYkllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT55NSksbXVsdGk6ITB9LGskPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PWUxLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PmUkfWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOlskdChbeUllXSksdHRdfSksbn0pKCkseTU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGske2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT50JH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOlskdChbYkllXSksdHRdfSksbn0pKCkseEllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5DSWUpLG11bHRpOiEwfSxDSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0iZW1haWwiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZTEsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+biR9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwiZW1haWwiLCIiLCJuZ01vZGVsIiwiIl1dLGlucHV0czp7ZW1haWw6ImVtYWlsIn0sZmVhdHVyZXM6WyR0KFt4SWVdKSx0dF19KSxufSkoKSx3SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9Pk1JZSksbXVsdGk6ITB9LE1JZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW5sZW5ndGgiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+UiQoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+aSQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoIm1pbmxlbmd0aCIsaS5fZW5hYmxlZD9pLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOlskdChbd0llXSksdHRdfSksbn0pKCksU0llPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5FSWUpLG11bHRpOiEwfSxFSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4bGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PlIkKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PnIkKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbJHQoW1NJZV0pLHR0XX0pLG59KSgpLFRJZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+REllKSxtdWx0aTohMH0sREllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5vJChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicGF0dGVybiIsaS5fZW5hYmxlZD9pLnBhdHRlcm46bnVsbCl9LGlucHV0czp7cGF0dGVybjoicGF0dGVybiJ9LGZlYXR1cmVzOlskdChbVEllXSksdHRdfSksbn0pKCksRiQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3ckXX0pLG59KSgpLHJJPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltGJF19KSxufSkoKSxOJD0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6XzUsdXNlVmFsdWU6ZS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbRiRdfSksbn0pKCksQUllPShuZXcgS2woIjE0LjIuMTEiKSxbInRyaWdnZXIiXSksSUllPVsicGFuZWwiXTtmdW5jdGlvbiBQSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHl0KGUucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBSSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkseXQoZS50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBPSWUobix0KXsxJm4mJk5uKDAsMCxbIipuZ1N3aXRjaENhc2UiLCJ0cnVlIl0pfWZ1bmN0aW9uIGtJZShuLHQpezEmbiYmKGcoMCwic3BhbiIsOSksRSgxLFJJZSwyLDEsInNwYW4iLDEwKSxFKDIsT0llLDEsMCwibmctY29udGVudCIsMTEpLHYoKSksMiZuJiYoYigibmdTd2l0Y2giLCEhTSgpLmN1c3RvbVRyaWdnZXIpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMCkpfWZ1bmN0aW9uIEZJZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTMpKDEsImRpdiIsMTQsMTUpLFAoIkB0cmFuc2Zvcm1QYW5lbC5kb25lIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dChyLnRvU3RhdGUpKX0pKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pLE5uKDMsMSksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQHRyYW5zZm9ybVBhbmVsV3JhcCIsdm9pZCAwKSx4KDEpLFJiKCJtYXQtc2VsZWN0LXBhbmVsICIsZS5fZ2V0UGFuZWxUaGVtZSgpLCIiKSxPdCgidHJhbnNmb3JtLW9yaWdpbiIsZS5fdHJhbnNmb3JtT3JpZ2luKSgiZm9udC1zaXplIixlLl90cmlnZ2VyRm9udFNpemUsInB4IiksYigibmdDbGFzcyIsZS5wYW5lbENsYXNzKSgiQHRyYW5zZm9ybVBhbmVsIixlLm11bHRpcGxlPyJzaG93aW5nLW11bHRpcGxlIjoic2hvd2luZyIpLHplKCJpZCIsZS5pZCsiLXBhbmVsIikoImFyaWEtbXVsdGlzZWxlY3RhYmxlIixlLm11bHRpcGxlKSgiYXJpYS1sYWJlbCIsZS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGUuX2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoKSl9fXZhciBOSWU9W1tbIm1hdC1zZWxlY3QtdHJpZ2dlciJdXSwiKiJdLExJZT1bIm1hdC1zZWxlY3QtdHJpZ2dlciIsIioiXSxMJD17dHJhbnNmb3JtUGFuZWxXcmFwOkhyKCJ0cmFuc2Zvcm1QYW5lbFdyYXAiLFtJaSgiKiA9PiB2b2lkIixGZigiQHRyYW5zZm9ybVBhbmVsIixba2YoKV0se29wdGlvbmFsOiEwfSkpXSksdHJhbnNmb3JtUGFuZWw6SHIoInRyYW5zZm9ybVBhbmVsIixbRWkoInZvaWQiLHJuKHt0cmFuc2Zvcm06InNjYWxlWSgwLjgpIixtaW5XaWR0aDoiMTAwJSIsb3BhY2l0eTowfSkpLEVpKCJzaG93aW5nIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyAzMnB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLEVpKCJzaG93aW5nLW11bHRpcGxlIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyA2NHB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLElpKCJ2b2lkID0+ICoiLFZpKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LEIkPTAsSCQ9bmV3IHNlKCJtYXQtc2VsZWN0LXNjcm9sbC1zdHJhdGVneSIpLFVJZT1uZXcgc2UoIk1BVF9TRUxFQ1RfQ09ORklHIiksekllPXtwcm92aWRlOkgkLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sakllPUxzKHFwKGdvKFJBKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBUZX19KSkpKSxHSWU9bmV3IHNlKCJNYXRTZWxlY3RUcmlnZ2VyIiksV0llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqSWV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtzdXBlcihzLG8sbCxjLGQpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD11LHRoaXMuX2xpdmVBbm5vdW5jZXI9Zix0aGlzLl9kZWZhdWx0T3B0aW9ucz1tLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oQyxfKT0+Qz09PV8sdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrQiQrKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBUZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrQiQrKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IFRlLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9YmEoKCk9PntsZXQgQz10aGlzLm9wdGlvbnM7cmV0dXJuIEM/Qy5jaGFuZ2VzLnBpcGUoVm4oQyksdmkoKCk9PnVuKC4uLkMubWFwKF89Pl8ub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpLHZpKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBHLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKEhlKEM9PkMpLEIoKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoSGUoQz0+IUMpLEIoKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9bT8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9bS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9aCx0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoU2MucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9V3QoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPVd0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1QaShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgRl8odGhpcy5tdWx0aXBsZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5waXBlKGRpKCksb3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+dGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nKHRoaXMucGFuZWxPcGVuKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faW5pdEtleU1hbmFnZXIoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShlPT57ZS5hZGRlZC5mb3JFYWNoKGk9Pmkuc2VsZWN0KCkpLGUucmVtb3ZlZC5mb3JFYWNoKGk9PmkuZGVzZWxlY3QoKSl9KSx0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKFZuKG51bGwpLG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9yZXNldE9wdGlvbnMoKSx0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9KX1uZ0RvQ2hlY2soKXtsZXQgZT10aGlzLl9nZXRUcmlnZ2VyQXJpYUxhYmVsbGVkYnkoKSxpPXRoaXMubmdDb250cm9sO2lmKGUhPT10aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9ZSxlP3Iuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpOnIucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiKX1pJiYodGhpcy5fcHJldmlvdXNDb250cm9sIT09aS5jb250cm9sJiYodm9pZCAwIT09dGhpcy5fcHJldmlvdXNDb250cm9sJiZudWxsIT09aS5kaXNhYmxlZCYmaS5kaXNhYmxlZCE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLmRpc2FibGVkPWkuZGlzYWJsZWQpLHRoaXMuX3ByZXZpb3VzQ29udHJvbD1pLmNvbnRyb2wpLHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpKX1uZ09uQ2hhbmdlcyhlKXsoZS5kaXNhYmxlZHx8ZS51c2VyQXJpYURlc2NyaWJlZEJ5KSYmdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLGUudHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWkscz10aGlzLl9rZXlNYW5hZ2VyO2lmKCFzLmlzVHlwaW5nKCkmJm8mJiFNcihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IGE9dGhpcy5zZWxlY3RlZDtzLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJmEhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIscz1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKHN8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHxNcihlKSlpZighcyYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGE9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KGE/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgYT1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PWEmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goaT0+aS5zZXRJbmFjdGl2ZVN0eWxlcygpKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMubXVsdGlwbGUmJmUpQXJyYXkuaXNBcnJheShlKSxlLmZvckVhY2goaT0+dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShpKSksdGhpcy5fc29ydFZhbHVlcygpO2Vsc2V7bGV0IGk9dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKTtpP3RoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShpKTp0aGlzLnBhbmVsT3Blbnx8dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKC0xKX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKXtsZXQgaT10aGlzLm9wdGlvbnMuZmluZChyPT57aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG51bGwhPXIudmFsdWUmJnRoaXMuX2NvbXBhcmVXaXRoKHIudmFsdWUsZSl9Y2F0Y2h7cmV0dXJuITF9fSk7cmV0dXJuIGkmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSxpfV9hc3NpZ25WYWx1ZShlKXtyZXR1cm4hIShlIT09dGhpcy5fdmFsdWV8fHRoaXMuX211bHRpcGxlJiZBcnJheS5pc0FycmF5KGUpKSYmKHRoaXMub3B0aW9ucyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKSx0aGlzLl92YWx1ZT1lLCEwKX1faW5pdEtleU1hbmFnZXIoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBEXyh0aGlzLm9wdGlvbnMpLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLndpdGhIb21lQW5kRW5kKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPXVuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKG90KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLHVuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShvdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9X29uU2VsZWN0KGUsaSl7bGV0IHI9dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKTtudWxsIT1lLnZhbHVlfHx0aGlzLl9tdWx0aXBsZT8ociE9PWUuc2VsZWN0ZWQmJihlLnNlbGVjdGVkP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKSksaSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpLHRoaXMubXVsdGlwbGUmJih0aGlzLl9zb3J0VmFsdWVzKCksaSYmdGhpcy5mb2N1cygpKSk6KGUuZGVzZWxlY3QoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLG51bGwhPXRoaXMudmFsdWUmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoZS52YWx1ZSkpLHIhPT10aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zb3J0VmFsdWVzKCl7aWYodGhpcy5tdWx0aXBsZSl7bGV0IGU9dGhpcy5vcHRpb25zLnRvQXJyYXkoKTt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zb3J0KChpLHIpPT50aGlzLnNvcnRDb21wYXJhdG9yP3RoaXMuc29ydENvbXBhcmF0b3IoaSxyLGUpOmUuaW5kZXhPZihpKS1lLmluZGV4T2YocikpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX19X3Byb3BhZ2F0ZUNoYW5nZXMoZSl7bGV0IGk9bnVsbDtpPXRoaXMubXVsdGlwbGU/dGhpcy5zZWxlY3RlZC5tYXAocj0+ci52YWx1ZSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOmUsdGhpcy5fdmFsdWU9aSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaSksdGhpcy5fb25DaGFuZ2UoaSksdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLl9nZXRDaGFuZ2VFdmVudChpKSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKXt0aGlzLl9rZXlNYW5hZ2VyJiYodGhpcy5lbXB0eT90aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSkpfV9jYW5PcGVuKCl7cmV0dXJuIXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMuZGlzYWJsZWQmJnRoaXMub3B0aW9ucz8ubGVuZ3RoPjB9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCk7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnk/KGU/ZSsiICI6IiIpK3RoaXMuYXJpYUxhYmVsbGVkYnk6ZX1fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKXtyZXR1cm4gdGhpcy5wYW5lbE9wZW4mJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbT90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaWQ6bnVsbH1fZ2V0VHJpZ2dlckFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCksaT0oZT9lKyIgIjoiIikrdGhpcy5fdmFsdWVJZDtyZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRieSYmKGkrPSIgIit0aGlzLmFyaWFMYWJlbGxlZGJ5KSxpfV9wYW5lbERvbmVBbmltYXRpbmcoZSl7dGhpcy5vcGVuZWRDaGFuZ2UuZW1pdChlKX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzKCksdGhpcy5vcGVuKCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fcGFuZWxPcGVufHwhdGhpcy5lbXB0eXx8dGhpcy5fZm9jdXNlZCYmISF0aGlzLl9wbGFjZWhvbGRlcn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhkYSksdyhubiksdyhwdCksdyhSXyksdyhBZSksdyhpciw4KSx3KEdfLDgpLHcoV18sOCksdyh1bSw4KSx3KHBhLDEwKSxLbygidGFiaW5kZXgiKSx3KEgkKSx3KFVDKSx3KFVJZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQUllLDUpLGx0KElJZSw1KSxsdChRcCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50cmlnZ2VyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9vdmVybGF5RGlyPXIuZmlyc3QpfX0saW5wdXRzOnt1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxwYW5lbENsYXNzOiJwYW5lbENsYXNzIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw6InR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLHNvcnRDb21wYXJhdG9yOiJzb3J0Q29tcGFyYXRvciIsaWQ6ImlkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLEpwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX3RyaWdnZXJGb250U2l6ZT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0idG9wIix0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25zPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9XX1fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChlLGkscil7bGV0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qZS1pK28vMikscil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZShvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJih0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1vcGVuKCl7c3VwZXIuX2Nhbk9wZW4oKSYmKHN1cGVyLm9wZW4oKSx0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl90cmlnZ2VyRm9udFNpemU9cGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCkuZm9udFNpemV8fCIwIiksdGhpcy5fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQmJih0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSl9X3Njcm9sbE9wdGlvbkludG9WaWV3KGUpe2xldCBpPVdDKGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxyPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPTA9PT1lJiYxPT09aT8wOmtBKChlK2kpKnIscix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLDI1Nil9X3Bvc2l0aW9uaW5nU2V0dGxlZCgpe3RoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCksdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10aGlzLl9zY3JvbGxUb3B9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLnBhbmVsT3Blbj90aGlzLl9zY3JvbGxUb3A9MDoodGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPTAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHN1cGVyLl9wYW5lbERvbmVBbmltYXRpbmcoZSl9X2dldENoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsZSl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7bGV0IHMsZT10aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5faXNSdGwoKSxvPXRoaXMubXVsdGlwbGU/NTY6MzI7aWYodGhpcy5tdWx0aXBsZSlzPTQwO2Vsc2UgaWYodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKXM9MTY7ZWxzZXtsZXQgYz10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXXx8dGhpcy5vcHRpb25zLmZpcnN0O3M9YyYmYy5ncm91cD8zMjoxNn1yfHwocyo9LTEpO2xldCBhPTAtKGUubGVmdCtzLShyP286MCkpLGw9ZS5yaWdodCtzLWkud2lkdGgrKHI/MDpvKTthPjA/cys9YSs4Omw+MCYmKHMtPWwrOCksdGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQocyksdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGUsaSxyKXtsZXQgbCxvPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxzPShvLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMixhPU1hdGguZmxvb3IoMjU2L28pO3JldHVybiB0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmc/MDoobD0wPT09dGhpcy5fc2Nyb2xsVG9wP2Uqbzp0aGlzLl9zY3JvbGxUb3A9PT1yPyhlLSh0aGlzLl9nZXRJdGVtQ291bnQoKS1hKSkqbysoby0odGhpcy5fZ2V0SXRlbUNvdW50KCkqby0yNTYpJW8pOmktby8yLE1hdGgucm91bmQoLTEqbC1zKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KGUpe2xldCBpPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxyPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbz10aGlzLl90cmlnZ2VyUmVjdC50b3AtOCxzPXIuaGVpZ2h0LXRoaXMuX3RyaWdnZXJSZWN0LmJvdHRvbS04LGE9TWF0aC5hYnModGhpcy5fb2Zmc2V0WSksYz1NYXRoLm1pbih0aGlzLl9nZXRJdGVtQ291bnQoKSppLDI1NiktYS10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQ7Yz5zP3RoaXMuX2FkanVzdFBhbmVsVXAoYyxzKTphPm8/dGhpcy5fYWRqdXN0UGFuZWxEb3duKGEsbyxlKTp0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpfV9hZGp1c3RQYW5lbFVwKGUsaSl7bGV0IHI9TWF0aC5yb3VuZChlLWkpO3RoaXMuX3Njcm9sbFRvcC09cix0aGlzLl9vZmZzZXRZLT1yLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKGUsaSxyKXtsZXQgbz1NYXRoLnJvdW5kKGUtaSk7aWYodGhpcy5fc2Nyb2xsVG9wKz1vLHRoaXMuX29mZnNldFkrPW8sdGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKSx0aGlzLl9zY3JvbGxUb3A+PXIpcmV0dXJuIHRoaXMuX3Njcm9sbFRvcD1yLHRoaXMuX29mZnNldFk9MCx2b2lkKHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIHRvcCAwcHgiKX1fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCl7bGV0IGEsZT10aGlzLl9nZXRJdGVtSGVpZ2h0KCksaT10aGlzLl9nZXRJdGVtQ291bnQoKSxyPU1hdGgubWluKGkqZSwyNTYpLHM9aSplLXI7YT10aGlzLmVtcHR5PzA6TWF0aC5tYXgodGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSwwKSxhKz1XQyhhLHRoaXMub3B0aW9ucyx0aGlzLm9wdGlvbkdyb3Vwcyk7bGV0IGw9ci8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGEsbCxzKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGEsbCxzKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChzKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2xldCBlPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxpPShlLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMjtyZXR1cm5gNTAlICR7TWF0aC5hYnModGhpcy5fb2Zmc2V0WSktaStlLzJ9cHggMHB4YH1fZ2V0SXRlbUhlaWdodCgpe3JldHVybiAzKnRoaXMuX3RyaWdnZXJGb250U2l6ZX1fZ2V0SXRlbUNvdW50KCl7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGgrdGhpcy5vcHRpb25Hcm91cHMubGVuZ3RofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixHSWUsNSksTmkocix1YSw1KSxOaShyLEdDLDUpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksTmUobz1MZSgpKSYmKGkub3B0aW9ucz1vKSxOZShvPUxlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwibWF0LXNlbGVjdCJdLGhvc3RWYXJzOjE5LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJsdXIoKX0pLDImZSYmKHplKCJpZCIsaS5pZCkoInRhYmluZGV4IixpLnRhYkluZGV4KSgiYXJpYS1jb250cm9scyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5wYW5lbE9wZW4pKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQudG9TdHJpbmcoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLl9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpKSxhdCgibWF0LXNlbGVjdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LXNlbGVjdC1yZXF1aXJlZCIsaS5yZXF1aXJlZCkoIm1hdC1zZWxlY3QtZW1wdHkiLGkuZW1wdHkpKCJtYXQtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VV8sdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOkxJZSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih3aShOSWUpLGcoMCwiZGl2IiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksZygzLCJkaXYiLDIpLEUoNCxQSWUsMiwxLCJzcGFuIiwzKSxFKDUsa0llLDMsMiwic3BhbiIsNCksdigpLGcoNiwiZGl2Iiw1KSxOKDcsImRpdiIsNiksdigpKCksRSg4LEZJZSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksUCgiYmFja2Ryb3BDbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkoImF0dGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25BdHRhY2hlZCgpfSkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkpLDImZSl7bGV0IHI9c3QoMSk7emUoImFyaWEtb3ducyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSx4KDMpLGIoIm5nU3dpdGNoIixpLmVtcHR5KSx6ZSgiaWQiLGkuX3ZhbHVlSWQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwhMCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCExKSx4KDMpLGIoImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIixpLl9vdmVybGF5UGFuZWxDbGFzcykoImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsaS5fc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixyKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkucGFuZWxPcGVuKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS5fcG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIixudWxsPT1pLl90cmlnZ2VyUmVjdD9udWxsOmkuX3RyaWdnZXJSZWN0LndpZHRoKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLGkuX29mZnNldFkpfX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxRcCxzbV0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtc2VsZWN0LXZhbHVle3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo1cHggc29saWQ7bWFyZ2luOjAgNHB4fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmlzaWJpbGl0eTpoaWRkZW59J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbTCQudHJhbnNmb3JtUGFuZWxXcmFwLEwkLnRyYW5zZm9ybVBhbmVsXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJbD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6SWVdLGltcG9ydHM6W2tlLFZvLE9fLGRuLFN1LGRtLE9fLGRuXX0pLG59KSgpO2Z1bmN0aW9uIHFJZShuLHQpezEmbiYmKEt0KDApLGcoMSwiZGl2IiwxKSxEKDIsIiBUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBEZWZhdWx0IC0gKEVuYWJsZWQvRGlzYWJsZWQpIGFuZCAoRW5hYmxlZC9EaXNhYmxlZCkgIiksdigpLGcoMywiZGl2IiwxKSxEKDQsIiBPbmx5IGZsYWdzIHdpdGggbm9uIGRlZmF1bHQgdmFsdWVzIGFyZSBzZW50IHRvIHRoZSBiYWNrZW5kLiAiKSx2KCksWnQoKSl9ZnVuY3Rpb24gWUllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJkaXYiLDEpLEQoMiksdigpLFp0KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoJyBGZWF0dXJlIEZsYWdzIGFyZSBmaWx0ZXJlZCB0byBvbmx5IHNob3cgZmVhdHVyZXMgY29udGFpbmluZyAiJyxlLnNob3dGbGFnc0ZpbHRlciwnIiAnKX19ZnVuY3Rpb24gWEllKG4sdCl7MSZuJiYoZygwLCJzdXAiLDExKSxEKDEsIjEiKSx2KCkpfWZ1bmN0aW9uIFFJZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24gS0llKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNlbGVjdCIsMTIpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLmZsYWdDaGFuZ2VkLmVtaXQoe2ZsYWc6by5mbGFnLHN0YXR1czpyLnZhbHVlfSkpfSksZygxLCJtYXQtb3B0aW9uIiwxMyksRCgyKSx2KCksZygzLCJtYXQtb3B0aW9uIiwxNCksRCg0LCJFbmFibGVkIiksdigpLGcoNSwibWF0LW9wdGlvbiIsMTUpLEQoNiwiRGlzYWJsZWQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7YigidmFsdWUiLGUuc3RhdHVzKSx4KDIpLHFlKCIgRGVmYXVsdCAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUuZGVmYXVsdFZhbHVlKSwiICIpfX1mdW5jdGlvbiBaSWUobix0KXtpZigxJm4mJihnKDAsInRkIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLHFlKCJVbnN1cHBvcnRlZCBCeSBVSSAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUudmFsdWUpLCIiKX19ZnVuY3Rpb24gSkllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIpKDIsInRkIikoMywiZGl2IiksRCg0KSxFKDUsWEllLDIsMCwic3VwIiw3KSx2KCkoKSxFKDYsUUllLDEsMCwibmctY29udGFpbmVyIiw4KSxFKDcsS0llLDcsMiwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksRSg5LFpJZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSx2KCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXN0KDgpLHI9c3QoMTApLG89TSgpO3goNCkscWUoIiAiLGUuZmxhZywiICIpLHgoMSksYigibmdJZiIsZS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikseCgxKSxiKCJuZ0lmIixvLmlzRWRpdGFibGUoZSkpKCJuZ0lmVGhlbiIsaSkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gJEllKG4sdCl7MSZuJiYoZygwLCJkaXYiLDExKSxEKDEsIiAxLiBTZW50IHRvIHNlcnZlciB3aGVuIG92ZXJyaWRkZW4gIiksdigpKX12YXIgbEksVSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXI9ITEsdGhpcy5mbGFnQ2hhbmdlZD1uZXcgRyx0aGlzLmFsbEZsYWdzUmVzZXQ9bmV3IEd9c2VyaWFsaXplRmxhZ1ZhbHVlKGUpe3JldHVybiEwPT09ZT8iRW5hYmxlZCI6ITE9PT1lPyJEaXNhYmxlZCI6bnVsbD09ZT8ibnVsbCI6QXJyYXkuaXNBcnJheShlKT9KU09OLnN0cmluZ2lmeShlKTplLnRvU3RyaW5nKCl9aXNFZGl0YWJsZShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmRlZmF1bHRWYWx1ZX1mb3JtYXRGbGFnVmFsdWUoZSl7bGV0IGk9dGhpcy5zZXJpYWxpemVGbGFnVmFsdWUoZSk7cmV0dXJuIDA9PT1pLmxlbmd0aD8iIjpgLSAke2l9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntmZWF0dXJlRmxhZ1N0YXR1c2VzOiJmZWF0dXJlRmxhZ1N0YXR1c2VzIixoYXNGbGFnc1NlbnRUb1NlcnZlcjoiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLHNob3dGbGFnc0ZpbHRlcjoic2hvd0ZsYWdzRmlsdGVyIn0sb3V0cHV0czp7ZmxhZ0NoYW5nZWQ6ImZsYWdDaGFuZ2VkIixhbGxGbGFnc1Jlc2V0OiJhbGxGbGFnc1Jlc2V0In0sZGVjbHM6MTIsdmFyczo0LGNvbnN0czpbWzEsInNjcm9sbGluZy1wYWdlIl0sWzEsIm1lc3NhZ2UiXSxbMSwid2FybmluZyJdLFs0LCJuZ0lmIl0sWzEsImZlYXR1cmUtZmxhZy10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl0sWyJjbGFzcyIsIm5vdGUtMSIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdLFsic2VsZWN0QmxvY2siLCIiXSxbInVuc3VwcG9ydGVkQmxvY2siLCIiXSxbMSwibm90ZS0xIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWyJ2YWx1ZSIsImRlZmF1bHQiXSxbInZhbHVlIiwiZW5hYmxlZCJdLFsidmFsdWUiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgyIiwyKSxEKDMsIldBUk5JTkc6IEVYUEVSSU1FTlRBTCBGRUFUVVJFUyBBSEVBRCEiKSx2KCksRCg0LCIgQnkgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIHlvdSBjb3VsZCBwdXQgdGhlIGFwcGxpY2F0aW9uIGluIGFuIHVudXNhYmxlIHN0YXRlIG9yIGV4cG9zZSB5b3Vyc2VsZiB0byB1bnRlc3RlZCBmZWF0dXJlcyBvciBwb3RlbnRpYWwgYnVncy4gIiksdigpLEUoNSxxSWUsNSwwLCJuZy1jb250YWluZXIiLDMpLEUoNixZSWUsMywxLCJuZy1jb250YWluZXIiLDMpLGcoNywidGFibGUiLDQpLEUoOCxKSWUsMTEsNSwibmctY29udGFpbmVyIiw1KSx2KCksZyg5LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmFsbEZsYWdzUmVzZXQuZW1pdCgpfSksRCgxMCwiUmVzZXQgQWxsIiksdigpLEUoMTEsJEllLDIsMCwiZGl2Iiw3KSx2KCkpLDImZSYmKHgoNSksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikseCgxKSxiKCJuZ0lmIixpLnNob3dGbGFnc0ZpbHRlcikseCgyKSxiKCJuZ0Zvck9mIixpLmZlYXR1cmVGbGFnU3RhdHVzZXMpLHgoMyksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikpfSxkZXBlbmRlbmNpZXM6W3luLFhlLCRuLEpwLHVhXSxzdHlsZXM6WyIubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxNnB4fS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjQ0MzM2fS5ub3RlLTFbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZjk4MDB9LnNjcm9sbGluZy1wYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0Ojkwdmh9LmZlYXR1cmUtZmxhZy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0iXX0pLG59KSgpLHokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0ZsYWdzRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChnQykucGlwZShCKGk9Pmkuc2hvd0ZsYWdzPy50b0xvd2VyQ2FzZSgpKSksdGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlciQ9dGhpcy5zdG9yZS5zZWxlY3QoV2YpLnBpcGUoQihpPT5PYmplY3QudmFsdWVzKGkpLnNvbWUocj0+ci5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikpKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ0MpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QodEspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSx0aGlzLnNob3dGbGFnc0ZpbHRlciQpLEIoKFtpLHIsbyxzXSk9Pk9iamVjdC5lbnRyaWVzKHIpLmZpbHRlcigoW2FdKT0+IXN8fGEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzKSkubWFwKChbYSxsXSk9PntsZXQgYz1mdW5jdGlvbihuLHQpe3JldHVybiB2b2lkIDA9PT10W25dPyJkZWZhdWx0Ijp0W25dPyJlbmFibGVkIjoiZGlzYWJsZWQifShhLGkpO3JldHVybntmbGFnOmEsZGVmYXVsdFZhbHVlOmwsc3RhdHVzOmMsc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW46b1thXS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbn19KSkpfW9uRmxhZ0NoYW5nZWQoe2ZsYWc6ZSxzdGF0dXM6aX0pe3N3aXRjaChpKXtjYXNlImRlZmF1bHQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goRnAoe2ZsYWdzOltlXX0pKTticmVhaztjYXNlImVuYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITB9fSkpO2JyZWFrO2Nhc2UiZGlzYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITF9fSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGbGFnIGNoYW5nZWQgdG8gaW52YWxpZCBzdGF0dXMiKX19b25BbGxGbGFnc1Jlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1XygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1kaWFsb2ciXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZmVhdHVyZUZsYWdTdGF0dXNlcyIsImhhc0ZsYWdzU2VudFRvU2VydmVyIiwic2hvd0ZsYWdzRmlsdGVyIiwiZmxhZ0NoYW5nZWQiLCJhbGxGbGFnc1Jlc2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJmZWF0dXJlLWZsYWctZGlhbG9nLWNvbXBvbmVudCIsMCksUCgiZmxhZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmxhZ0NoYW5nZWQobyl9KSgiYWxsRmxhZ3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFsbEZsYWdzUmVzZXQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJmZWF0dXJlRmxhZ1N0YXR1c2VzIixXKDEsMyxpLmZlYXR1cmVGbGFncyQpKSgiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLFcoMiw1LGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIkKSkoInNob3dGbGFnc0ZpbHRlciIsVygzLDcsaS5zaG93RmxhZ3NGaWx0ZXIkKSl9LGRlcGVuZGVuY2llczpbVSQsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kaWFsb2c9aSx0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZT16JCx0aGlzLnNob3dGZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KGxLKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfW5nT25Jbml0KCl7dGhpcy5zaG93RmVhdHVyZUZsYWdzJC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57aWYoZSlyZXR1cm4gdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2c9dGhpcy5kaWFsb2cub3Blbih0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZSksdm9pZCB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZy5hZnRlckNsb3NlZCgpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChGcCh7ZmxhZ3M6WyJzaG93RmxhZ3MiXX0pKSxzZXRUaW1lb3V0KCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwxKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLW1vZGFsLXRyaWdnZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJQZT1bInJvdXRlQ29udGFpbmVyIl0sRyQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lfW5nT25DaGFuZ2VzKGUpe2xldCBpPWUuYWN0aXZlTmdDb21wb25lbnQ7aWYoaSYmKHRoaXMucm91dGVDb250YWluZXIuY2xlYXIoKSxpLmN1cnJlbnRWYWx1ZSkpe2xldCByPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGkuY3VycmVudFZhbHVlKTt0aGlzLnJvdXRlQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChyKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJQZSw3LHlpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnJvdXRlQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVOZ0NvbXBvbmVudDoiYWN0aXZlTmdDb21wb25lbnQifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3V0ZUNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmQWkoMCxudWxsLDApfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMucmVnaXN0cnk9aSx0aGlzLmFjdGl2ZU5nQ29tcG9uZW50JD1wbihbdGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KFJRKV0pLnBpcGUoQigoW3Isb10pPT5yJiYobnVsbD09PW98fHVzKHIsbykpP3RoaXMucmVnaXN0cnkuZ2V0TmdDb21wb25lbnRCeVJvdXRlS2luZChyLnJvdXRlS2luZCk6bnVsbCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KGhjKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVOZ0NvbXBvbmVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicm91dGVyLW91dGxldC1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZiKCJhY3RpdmVOZ0NvbXBvbmVudCIsVygxLDEsaS5hY3RpdmVOZ0NvbXBvbmVudCQpKX0sZGVwZW5kZW5jaWVzOltHJCxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLnNlbGVjdChtdSkuc3Vic2NyaWJlKGk9Pntkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsaSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhcmstbW9kZS1zdXBwb3J0ZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWV89KCgpPT4oZnVuY3Rpb24obil7bltuLkFDVElWRV9QTFVHSU49MF09IkFDVElWRV9QTFVHSU4ifShZX3x8KFlfPXt9KSksWV8pKSgpLFkkPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kZWVwTGlua2VyPWUsdGhpcy5vblZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGUsdGhpcy5vbkhhc2hDaGFuZ2U9bGkod2luZG93LCJwb3BzdGF0ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpfW5nT25Jbml0KCl7dGhpcy5vbkhhc2hDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5kZWVwTGlua2VyLmdldFBsdWdpbklkKCk7ZSE9PXRoaXMuYWN0aXZlUGx1Z2luSWQmJnRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtwcm9wOllfLkFDVElWRV9QTFVHSU4sdmFsdWU6ZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUuYWN0aXZlUGx1Z2luSWQpe2xldCBpPWUuYWN0aXZlUGx1Z2luSWQ7dGhpcy5kZWVwTGlua2VyLnNldFBsdWdpbklkKG51bGw9PT1pLmN1cnJlbnRWYWx1ZT8iIjppLmN1cnJlbnRWYWx1ZSx7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2F0aW9uUmVwbGFjZTpudWxsPT09aS5wcmV2aW91c1ZhbHVlfHxpLmZpcnN0Q2hhbmdlfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFwKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCJ9LG91dHB1dHM6e29uVmFsdWVDaGFuZ2U6Im9uVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbenRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKX1vblZhbHVlQ2hhbmdlZChlKXtlLnByb3A9PT1ZXy5BQ1RJVkVfUExVR0lOJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKGREKHtwbHVnaW46ZS52YWx1ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5JZCIsIm9uVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhhc2gtc3RvcmFnZS1jb21wb25lbnQiLDApLFAoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5JZCIsVygxLDEsaS5hY3RpdmVQbHVnaW5JZCQpKX0sZGVwZW5kZW5jaWVzOltZJCxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1UGU9WyIqIl07ZnVuY3Rpb24gcncobil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09bEkmJihsST1udWxsLHR5cGVvZiB3aW5kb3c8InUiKSl7bGV0IG49d2luZG93O3ZvaWQgMCE9PW4udHJ1c3RlZFR5cGVzJiYobEk9bi50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2NvbXBvbmVudHMiLHtjcmVhdGVIVE1MOnQ9PnR9KSl9cmV0dXJuIGxJfSgpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIFEkKG4pe3JldHVybiBFcnJvcihgVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICIke259ImApfWZ1bmN0aW9uIEskKG4pe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHtufSIuYCl9ZnVuY3Rpb24gWiQobil7cmV0dXJuIEVycm9yKGBUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgIiR7bn0iLmApfXZhciBTZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy51cmw9dCx0aGlzLnN2Z1RleHQ9ZSx0aGlzLm9wdGlvbnM9aX19LFhfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5faHR0cENsaWVudD1lLHRoaXMuX3Nhbml0aXplcj1pLHRoaXMuX2Vycm9ySGFuZGxlcj1vLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1bIm1hdGVyaWFsLWljb25zIiwibWF0LWxpZ2F0dXJlLWZvbnQiXSx0aGlzLl9kb2N1bWVudD1yfWFkZFN2Z0ljb24oZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIixlLGkscil9YWRkU3ZnSWNvbkxpdGVyYWwoZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25Jbk5hbWVzcGFjZShlLGkscixvKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IFNkKHIsbnVsbCxvKSl9YWRkU3ZnSWNvblJlc29sdmVyKGUpe3JldHVybiB0aGlzLl9yZXNvbHZlcnMucHVzaChlKSx0aGlzfWFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIsbyl7bGV0IHM9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKEpyLkhUTUwscik7aWYoIXMpdGhyb3cgWiQocik7bGV0IGE9cncocyk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBTZCgiIixhLG8pKX1hZGRTdmdJY29uU2V0KGUsaSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldExpdGVyYWwoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKGUsaSxyKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyhlLG5ldyBTZChpLG51bGwscikpfWFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIpe2xldCBvPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5IVE1MLGkpO2lmKCFvKXRocm93IFokKGkpO2xldCBzPXJ3KG8pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IFNkKCIiLHMscikpfXJlZ2lzdGVyRm9udENsYXNzQWxpYXMoZSxpPWUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KGUsaSksdGhpc31jbGFzc05hbWVGb3JGb250QWxpYXMoZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQoZSl8fGV9c2V0RGVmYXVsdEZvbnRTZXRDbGFzcyguLi5lKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1lLHRoaXN9Z2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfWdldFN2Z0ljb25Gcm9tVXJsKGUpe2xldCBpPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsZSk7aWYoIWkpdGhyb3cgSyQoZSk7bGV0IHI9dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5nZXQoaSk7cmV0dXJuIHI/anQoY0kocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgU2QoZSxudWxsKSkucGlwZShOdChvPT50aGlzLl9jYWNoZWRJY29uc0J5VXJsLnNldChpLG8pKSxCKG89PmNJKG8pKSl9Z2V0TmFtZWRTdmdJY29uKGUsaT0iIil7bGV0IHI9SiQoaSxlKSxvPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChyKTtpZihvKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2lmKG89dGhpcy5fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoaSxlKSxvKXJldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQocixvKSx0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2xldCBzPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChpKTtyZXR1cm4gcz90aGlzLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxzKTpHbChRJChyKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fc3ZnSWNvbkNvbmZpZ3MuY2xlYXIoKSx0aGlzLl9pY29uU2V0Q29uZmlncy5jbGVhcigpLHRoaXMuX2NhY2hlZEljb25zQnlVcmwuY2xlYXIoKX1fZ2V0U3ZnRnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P2p0KGNJKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpLnBpcGUoQihpPT5jSShpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO3JldHVybiByP2p0KHIpOnhvKGkuZmlsdGVyKHM9PiFzLnN2Z1RleHQpLm1hcChzPT50aGlzLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcocykucGlwZShDbyhhPT57bGV0IGM9YExvYWRpbmcgaWNvbiBzZXQgVVJMOiAke3RoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwscy51cmwpfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWA7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYykpLGp0KG51bGwpfSkpKSkucGlwZShCKCgpPT57bGV0IHM9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtpZighcyl0aHJvdyBRJChlKTtyZXR1cm4gc30pKX1fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKXtmb3IobGV0IHI9aS5sZW5ndGgtMTtyPj0wO3ItLSl7bGV0IG89aVtyXTtpZihvLnN2Z1RleHQmJm8uc3ZnVGV4dC50b1N0cmluZygpLmluZGV4T2YoZSk+LTEpe2xldCBzPXRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKG8pLGE9dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KHMsZSxvLm9wdGlvbnMpO2lmKGEpcmV0dXJuIGF9fXJldHVybiBudWxsfV9sb2FkU3ZnSWNvbkZyb21Db25maWcoZSl7cmV0dXJuIHRoaXMuX2ZldGNoSWNvbihlKS5waXBlKE50KGk9PmUuc3ZnVGV4dD1pKSxCKCgpPT50aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKSkpfV9sb2FkU3ZnSWNvblNldEZyb21Db25maWcoZSl7cmV0dXJuIGUuc3ZnVGV4dD9qdChudWxsKTp0aGlzLl9mZXRjaEljb24oZSkucGlwZShOdChpPT5lLnN2Z1RleHQ9aSkpfV9leHRyYWN0U3ZnSWNvbkZyb21TZXQoZSxpLHIpe2xldCBvPWUucXVlcnlTZWxlY3RvcihgW2lkPSIke2l9Il1gKTtpZighbylyZXR1cm4gbnVsbDtsZXQgcz1vLmNsb25lTm9kZSghMCk7aWYocy5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMocyxyKTtpZigic3ltYm9sIj09PXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocykscik7bGV0IGE9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcocncoIjxzdmc+PC9zdmc+IikpO3JldHVybiBhLmFwcGVuZENoaWxkKHMpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoYSxyKX1fc3ZnRWxlbWVudEZyb21TdHJpbmcoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7aS5pbm5lckhUTUw9ZTtsZXQgcj1pLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFyKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIHJ9X3RvU3ZnRWxlbWVudChlKXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhydygiPHN2Zz48L3N2Zz4iKSkscj1lLmF0dHJpYnV0ZXM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldHtuYW1lOnMsdmFsdWU6YX09cltvXTsiaWQiIT09cyYmaS5zZXRBdHRyaWJ1dGUocyxhKX1mb3IobGV0IG89MDtvPGUuY2hpbGROb2Rlcy5sZW5ndGg7bysrKWUuY2hpbGROb2Rlc1tvXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmaS5hcHBlbmRDaGlsZChlLmNoaWxkTm9kZXNbb10uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGl9X3NldFN2Z0F0dHJpYnV0ZXMoZSxpKXtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLGUuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGkmJmkudmlld0JveCYmZS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGkudmlld0JveCksZX1fZmV0Y2hJY29uKGUpe2xldHt1cmw6aSxvcHRpb25zOnJ9PWUsbz1yPy53aXRoQ3JlZGVudGlhbHM/PyExO2lmKCF0aGlzLl9odHRwQ2xpZW50KXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBIdHRwQ2xpZW50IHByb3ZpZGVyIGZvciB1c2Ugd2l0aCBBbmd1bGFyIE1hdGVyaWFsIGljb25zLiBQbGVhc2UgaW5jbHVkZSB0aGUgSHR0cENsaWVudE1vZHVsZSBmcm9tIEBhbmd1bGFyL2NvbW1vbi9odHRwIGluIHlvdXIgYXBwIGltcG9ydHMuIik7aWYobnVsbD09aSl0aHJvdyBFcnJvcihgQ2Fubm90IGZldGNoIGljb24gZnJvbSBVUkwgIiR7aX0iLmApO2xldCBzPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsaSk7aWYoIXMpdGhyb3cgSyQoaSk7bGV0IGE9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KHMpO2lmKGEpcmV0dXJuIGE7bGV0IGw9dGhpcy5faHR0cENsaWVudC5nZXQocyx7cmVzcG9uc2VUeXBlOiJ0ZXh0Iix3aXRoQ3JlZGVudGlhbHM6b30pLnBpcGUoQihjPT5ydyhjKSksZnVuY3Rpb24obil7cmV0dXJuIHF0KCh0LGUpPT57dHJ5e3Quc3Vic2NyaWJlKGUpfWZpbmFsbHl7ZS5hZGQobil9fSl9KCgpPT50aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUocykpLFhzKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQocyxsKSxsfV9hZGRTdmdJY29uQ29uZmlnKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KEokKGUsaSksciksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyhlLGkpe2xldCByPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gcj9yLnB1c2goaSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KGUsW2ldKSx0aGlzfV9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKXtpZighZS5zdmdFbGVtZW50KXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhlLnN2Z1RleHQpO3RoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSxlLm9wdGlvbnMpLGUuc3ZnRWxlbWVudD1pfXJldHVybiBlLnN2Z0VsZW1lbnR9X2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGUsaSl7Zm9yKGxldCByPTA7cjx0aGlzLl9yZXNvbHZlcnMubGVuZ3RoO3IrKyl7bGV0IG89dGhpcy5fcmVzb2x2ZXJzW3JdKGksZSk7aWYobylyZXR1cm4gZlBlKG8pP25ldyBTZChvLnVybCxudWxsLG8ub3B0aW9ucyk6bmV3IFNkKG8sbnVsbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEdmLDgpLFIoUmYpLFIoQnQsOCksUihTcykpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGNJKG4pe3JldHVybiBuLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gSiQobix0KXtyZXR1cm4gbisiOiIrdH1mdW5jdGlvbiBmUGUobil7cmV0dXJuISghbi51cmx8fCFuLm9wdGlvbnMpfW5ldyBPbyxuZXcgVGEsbmV3IE9vLG5ldyBPbzt2YXIgbVBlPXBzKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSxnUGU9bmV3IHNlKCJNQVRfSUNPTl9ERUZBVUxUX09QVElPTlMiKSxfUGU9bmV3IHNlKCJtYXQtaWNvbi1sb2NhdGlvbiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtsZXQgbj1TbyhCdCksdD1uP24ubG9jYXRpb246bnVsbDtyZXR1cm57Z2V0UGF0aG5hbWU6KCk9PnQ/dC5wYXRobmFtZSt0LnNlYXJjaDoiIn19fSksJCQ9WyJjbGlwLXBhdGgiLCJjb2xvci1wcm9maWxlIiwic3JjIiwiY3Vyc29yIiwiZmlsbCIsImZpbHRlciIsIm1hcmtlciIsIm1hcmtlci1zdGFydCIsIm1hcmtlci1taWQiLCJtYXJrZXItZW5kIiwibWFzayIsInN0cm9rZSJdLHlQZT0kJC5tYXAobj0+YFske259XWApLmpvaW4oIiwgIiksYlBlPS9edXJsXChbJyJdPyMoLio/KVsnIl0/XCkkLyxabj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbVBle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXZuLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9V3QoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfV9zcGxpdEljb25OYW1lKGUpe2lmKCFlKXJldHVyblsiIiwiIl07bGV0IGk9ZS5zcGxpdCgiOiIpO3N3aXRjaChpLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixpWzBdXTtjYXNlIDI6cmV0dXJuIGk7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke2V9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpZihlJiZlLnNpemUpe2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7aSE9PXRoaXMuX3ByZXZpb3VzUGF0aCYmKHRoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKX1fdXNpbmdGb250SWNvbigpe3JldHVybiF0aGlzLnN2Z0ljb259X3NldFN2Z0VsZW1lbnQoZSl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTt0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9X2NsZWFyU3ZnRWxlbWVudCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUuY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCk7aS0tOyl7bGV0IHI9ZS5jaGlsZE5vZGVzW2ldOygxIT09ci5ub2RlVHlwZXx8InN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZyLnJlbW92ZSgpfX1fdXBkYXRlRm9udEljb25DbGFzc2VzKCl7aWYoIXRoaXMuX3VzaW5nRm9udEljb24oKSlyZXR1cm47bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9KHRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCkuc3BsaXQoLyArLyk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKSkuZmlsdGVyKHI9PnIubGVuZ3RoPjApO3RoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QucmVtb3ZlKHIpKSxpLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1pLHRoaXMuZm9udEljb24hPT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJiFpLmluY2x1ZGVzKCJtYXQtbGlnYXR1cmUtZm9udCIpJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZlLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZlLmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfV9jbGVhbnVwRm9udFZhbHVlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdCgiICIpWzBdOmV9X3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGUpe2xldCBpPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpJiZpLmZvckVhY2goKHIsbyk9PntyLmZvckVhY2gocz0+e28uc2V0QXR0cmlidXRlKHMubmFtZSxgdXJsKCcke2V9IyR7cy52YWx1ZX0nKWApfSl9KX1fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yQWxsKHlQZSkscj10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzfHxuZXcgTWFwO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKSQkLmZvckVhY2gocz0+e2xldCBhPWlbb10sbD1hLmdldEF0dHJpYnV0ZShzKSxjPWw/bC5tYXRjaChiUGUpOm51bGw7aWYoYyl7bGV0IHU9ci5nZXQoYSk7dXx8KHU9W10sci5zZXQoYSx1KSksdS5wdXNoKHtuYW1lOnMsdmFsdWU6Y1sxXX0pfX0pfV91cGRhdGVTdmdJY29uKGUpe2lmKHRoaXMuX3N2Z05hbWVzcGFjZT1udWxsLHRoaXMuX3N2Z05hbWU9bnVsbCx0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksZSl7bGV0W2kscl09dGhpcy5fc3BsaXRJY29uTmFtZShlKTtpJiYodGhpcy5fc3ZnTmFtZXNwYWNlPWkpLHImJih0aGlzLl9zdmdOYW1lPXIpLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9dGhpcy5faWNvblJlZ2lzdHJ5LmdldE5hbWVkU3ZnSWNvbihyLGkpLnBpcGUoSHQoMSkpLnN1YnNjcmliZShvPT50aGlzLl9zZXRTdmdFbGVtZW50KG8pLG89Pnt0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFcnJvciByZXRyaWV2aW5nIGljb24gJHtpfToke3J9ISAke28ubWVzc2FnZX1gKSl9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWF8pLEtvKCJhcmlhLWhpZGRlbiIpLHcoX1BlKSx3KFNzKSx3KGdQZSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWljb24iXV0saG9zdEF0dHJzOlsicm9sZSIsImltZyIsMSwibWF0LWljb24iLCJub3RyYW5zbGF0ZSJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoemUoImRhdGEtbWF0LWljb24tdHlwZSIsaS5fdXNpbmdGb250SWNvbigpPyJmb250Ijoic3ZnIikoImRhdGEtbWF0LWljb24tbmFtZSIsaS5fc3ZnTmFtZXx8aS5mb250SWNvbikoImRhdGEtbWF0LWljb24tbmFtZXNwYWNlIixpLl9zdmdOYW1lc3BhY2V8fGkuZm9udFNldCkoImZvbnRJY29uIixpLl91c2luZ0ZvbnRJY29uKCk/aS5mb250SWNvbjpudWxsKSxhdCgibWF0LWljb24taW5saW5lIixpLmlubGluZSkoIm1hdC1pY29uLW5vLWNvbG9yIiwicHJpbWFyeSIhPT1pLmNvbG9yJiYiYWNjZW50IiE9PWkuY29sb3ImJiJ3YXJuIiE9PWkuY29sb3IpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGlubGluZToiaW5saW5lIixzdmdJY29uOiJzdmdJY29uIixmb250U2V0OiJmb250U2V0Iixmb250SWNvbjoiZm9udEljb24ifSxleHBvcnRBczpbIm1hdEljb24iXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczp1UGUsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLE5uKDApKX0sc3R5bGVzOlsiLm1hdC1pY29uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O292ZXJmbG93OmhpZGRlbn0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH0ubWF0LWljb24ubWF0LWxpZ2F0dXJlLWZvbnRbZm9udEljb25dOjpiZWZvcmV7Y29udGVudDphdHRyKGZvbnRJY29uKX1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLCAxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLHhQZT1bIioiLFtbIm1hdC10b29sYmFyLXJvdyJdXV0sQ1BlPVsiKiIsIm1hdC10b29sYmFyLXJvdyJdLHdQZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksTVBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhci1yb3ciXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhci1yb3ciXSxleHBvcnRBczpbIm1hdFRvb2xiYXJSb3ciXX0pLG59KSgpLGVlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd1Ble2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh1aSksdyhCdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsTVBlLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX3Rvb2xiYXJSb3dzPW8pfX0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsaS5fdG9vbGJhclJvd3MubGVuZ3RoPjApKCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IiwwPT09aS5fdG9vbGJhclJvd3MubGVuZ3RoKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpDUGUsZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSh4UGUpLE5uKDApLE5uKDEsMSkpfSxzdHlsZXM6WyIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbGJhcntvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHRlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZG4sZG5dfSksbn0pKCk7ZnVuY3Rpb24geDUobil7cmV0dXJuIG4uc3RhdGUhPT1FZS5OT1RfTE9BREVEJiZuLnN0YXRlIT09RWUuTE9BRElOR312YXIgRVBlPXdyKEFaLFNlKGRBLG49Png1KG4pP3suLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZEVuYWJsZWQ6IW4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZH19Om4pLFNlKHBBLChuLHtwZXJpb2RJbk1zOnR9KT0+e2lmKCF4NShuKSlyZXR1cm4gbjtsZXQgZT10Pj0zZTQ/dDpuLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXM7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkUGVyaW9kSW5NczplfX19KSxTZShoQSwobix7c2l6ZTp0fSk9PntpZigheDUobikpcmV0dXJuIG47bGV0IGU9dD4wP3Q6bi5zZXR0aW5ncy5wYWdlU2l6ZTtyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxwYWdlU2l6ZTplfX19KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUodC5wYWdlU2l6ZSkmJnQucGFnZVNpemU+MCYmKGUucGFnZVNpemU9TnVtYmVyKHQucGFnZVNpemUpKSwiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLnJlbG9hZEVuYWJsZWQ9dC5hdXRvUmVsb2FkKSxOdW1iZXIuaXNGaW5pdGUodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykmJnQuYXV0b1JlbG9hZFBlcmlvZEluTXM+M2U0JiYoZS5yZWxvYWRQZXJpb2RJbk1zPU51bWJlcih0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSksey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MsLi4uZX19fSkpO2Z1bmN0aW9uIG5lZShuLHQpe3JldHVybiBFUGUobix0KX12YXIgVFBlPVsiaW5wdXQiXSxEUGU9WyJsYWJlbCJdLEFQZT1mdW5jdGlvbihuKXtyZXR1cm57ZW50ZXJEdXJhdGlvbjpufX0sSVBlPVsiKiJdLFBQZT1uZXcgc2UoIm1hdC1jaGVja2JveC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn19fSk7dmFyIFJQZT0wLGllZT17Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifSxPUGU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PkVkKSxtdWx0aTohMH0sa1BlPXFwKHBzKExzKGdvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSxGUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vcHRpb25zPWwsdGhpcy5hcmlhTGFiZWw9IiIsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMubGFiZWxQb3NpdGlvbj0iYWZ0ZXIiLHRoaXMubmFtZT1udWxsLHRoaXMuY2hhbmdlPW5ldyBHLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZT1uZXcgRyx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fGllZSx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXRoaXMuX29wdGlvbnMuY29sb3J8fGllZS5jb2xvcix0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQ9YCR7ZX0keysrUlBlfWB9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3luY0luZGV0ZXJtaW5hdGUodGhpcy5faW5kZXRlcm1pbmF0ZSl9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT1XdChlKTtpIT10aGlzLmNoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgaW5kZXRlcm1pbmF0ZSgpe3JldHVybiB0aGlzLl9pbmRldGVybWluYXRlfXNldCBpbmRldGVybWluYXRlKGUpe2xldCBpPWUhPXRoaXMuX2luZGV0ZXJtaW5hdGU7dGhpcy5faW5kZXRlcm1pbmF0ZT1XdChlKSxpJiYodGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5faW5kZXRlcm1pbmF0ZT8zOnRoaXMuY2hlY2tlZD8xOjIpLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpKSx0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfXdyaXRlVmFsdWUoZSl7dGhpcy5jaGVja2VkPSEhZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZX1fZ2V0QXJpYUNoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2VkPyJ0cnVlIjp0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjoiZmFsc2UifV90cmFuc2l0aW9uQ2hlY2tTdGF0ZShlKXtsZXQgaT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxyPXRoaXMuX2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKTtpZihpIT09ZSYmciYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyYmci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oaSxlKSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT1lLHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe3IuY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2xldCBvPXRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57ci5jbGFzc0xpc3QucmVtb3ZlKG8pfSwxZTMpfSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0aGlzLmNoZWNrZWQpKSx0aGlzLl9pbnB1dEVsZW1lbnQmJih0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCl9dG9nZ2xlKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpfV9oYW5kbGVJbnB1dENsaWNrKCl7bGV0IGU9dGhpcy5fb3B0aW9ucz8uY2xpY2tBY3Rpb247dGhpcy5kaXNhYmxlZHx8Im5vb3AiPT09ZT8hdGhpcy5kaXNhYmxlZCYmIm5vb3AiPT09ZSYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dGhpcy5pbmRldGVybWluYXRlKToodGhpcy5pbmRldGVybWluYXRlJiYiY2hlY2siIT09ZSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSl9KSx0aGlzLl9jaGVja2VkPSF0aGlzLl9jaGVja2VkLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9X29uSW50ZXJhY3Rpb25FdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpfV9vbkJsdXIoKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihlLGkpe2lmKCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlKXJldHVybiIiO3N3aXRjaChlKXtjYXNlIDA6aWYoMT09PWkpcmV0dXJuIHRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9DaGVja2VkO2lmKDM9PWkpcmV0dXJuIHRoaXMuX2NoZWNrZWQ/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5jaGVja2VkVG9JbmRldGVybWluYXRlOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9JbmRldGVybWluYXRlO2JyZWFrO2Nhc2UgMjpyZXR1cm4gMT09PWk/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAxOnJldHVybiAyPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb1VuY2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAzOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5pbmRldGVybWluYXRlVG9VbmNoZWNrZWR9cmV0dXJuIiJ9X3N5bmNJbmRldGVybWluYXRlKGUpe2xldCBpPXRoaXMuX2lucHV0RWxlbWVudDtpJiYoaS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFRQZSw1KSxsdChEUGUsNSksbHQoZXMsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lucHV0RWxlbWVudD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fbGFiZWxFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0saWQ6ImlkIixyZXF1aXJlZDoicmVxdWlyZWQiLGxhYmVsUG9zaXRpb246ImxhYmVsUG9zaXRpb24iLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpbmRldGVybWluYXRlOiJpbmRldGVybWluYXRlIn0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGluZGV0ZXJtaW5hdGVDaGFuZ2U6ImluZGV0ZXJtaW5hdGVDaGFuZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksRWQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcigibWF0LWNoZWNrYm94LSIsZSxpLG8scyxhLGwpLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX2FuaW1hdGlvbkNsYXNzZXM9e3VuY2hlY2tlZFRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQiLHVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUiLGNoZWNrZWRUb1VuY2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQiLGNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6Im1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIixpbmRldGVybWluYXRlVG9VbmNoZWNrZWQ6Im1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIn19X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkuY2hlY2tlZD1lLGl9X2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57ZXx8dGhpcy5fb25CbHVyKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX1fb25JbnB1dENsaWNrKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksc3VwZXIuX2hhbmRsZUlucHV0Q2xpY2soKX1mb2N1cyhlLGkpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxlLGkpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHpyKSx3KHB0KSxLbygidGFiaW5kZXgiKSx3KExpLDgpLHcoUFBlLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hlY2tib3giXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihBYSgiaWQiLGkuaWQpLHplKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLGF0KCJtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgibWF0LWNoZWNrYm94LWNoZWNrZWQiLGkuY2hlY2tlZCkoIm1hdC1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0Q2hlY2tib3giXSxmZWF0dXJlczpbJHQoW09QZV0pLHR0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6SVBlLGRlY2xzOjE3LHZhcnM6MjEsY29uc3RzOltbMSwibWF0LWNoZWNrYm94LWxheW91dCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtYXQtY2hlY2tib3gtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWNoZWNrYm94LXJpcHBsZSIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlQW5pbWF0aW9uIl0sWzEsIm1hdC1yaXBwbGUtZWxlbWVudCIsIm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtY2hlY2tib3gtZnJhbWUiXSxbMSwibWF0LWNoZWNrYm94LWJhY2tncm91bmQiXSxbInZlcnNpb24iLCIxLjEiLCJmb2N1c2FibGUiLCJmYWxzZSIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwic3Ryb2tlIiwid2hpdGUiLCJkIiwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuMyIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIl0sWzEsIm1hdC1jaGVja2JveC1taXhlZG1hcmsiXSxbMSwibWF0LWNoZWNrYm94LWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiY2hlY2tib3hMYWJlbCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJsYWJlbCIsMCwxKSgyLCJzcGFuIiwyKSgzLCJpbnB1dCIsMyw0KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbklucHV0Q2xpY2sobyl9KSx2KCksZyg1LCJzcGFuIiw1KSxOKDYsInNwYW4iLDYpLHYoKSxOKDcsInNwYW4iLDcpLGcoOCwic3BhbiIsOCksam4oKSxnKDksInN2ZyIsOSksTigxMCwicGF0aCIsMTApLHYoKSxTYSgpLE4oMTEsInNwYW4iLDExKSx2KCkoKSxnKDEyLCJzcGFuIiwxMiwxMyksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTGFiZWxUZXh0Q2hhbmdlKCl9KSxnKDE0LCJzcGFuIiwxNCksRCgxNSwiXHhhMCIpLHYoKSxObigxNiksdigpKCkpLDImZSl7bGV0IHI9c3QoMSksbz1zdCgxMyk7emUoImZvciIsaS5pbnB1dElkKSx4KDIpLGF0KCJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luIiwhby50ZXh0Q29udGVudHx8IW8udGV4dENvbnRlbnQudHJpbSgpKSx4KDEpLGIoImlkIixpLmlucHV0SWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCkoImNoZWNrZWQiLGkuY2hlY2tlZCkoImRpc2FibGVkIixpLmRpc2FibGVkKSgidGFiSW5kZXgiLGkudGFiSW5kZXgpLHplKCJ2YWx1ZSIsaS52YWx1ZSkoIm5hbWUiLGkubmFtZSkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1jaGVja2VkIixpLl9nZXRBcmlhQ2hlY2tlZCgpKSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpLHgoMiksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQ2VudGVyZWQiLCEwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixIbigxOSxBUGUsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGU/MDoxNTApKX19LGRlcGVuZGVuY2llczpbZXMsU19dLHN0eWxlczpbJ0BrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZHswJSw1MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtY2hlY2tlZC1jaGVja21hcmstcGF0aHswJSw1MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7MCUsNjguMiV7dHJhbnNmb3JtOnNjYWxlWCgwKX02OC4yJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLCAxKX0xMDAle3RyYW5zZm9ybTpzY2FsZVgoMSl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtdW5jaGVja2VkLWNoZWNrbWFyay1wYXRoe2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtzdHJva2UtZGFzaG9mZnNldDowfXRve3N0cm9rZS1kYXNob2Zmc2V0Oi0yMi45MTAyNTl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya3swJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX0zMi44JSwxMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApfX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1mcmFtZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTZ9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94LWxheW91dHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87dXNlci1zZWxlY3Q6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDowO21hcmdpbjphdXRvO21hcmdpbi1yaWdodDo4cHg7b3JkZXI6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1jaGVja2JveC1mcmFtZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWZyYW1le3RyYW5zaXRpb246bm9uZX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLG9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpOy13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6bm9uZX0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06bm9uZX0ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTowfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCV9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTk7c3Ryb2tlLWRhc2hhcnJheToyMi45MTAyNTk7c3Ryb2tlLXdpZHRoOjIuMTMzMzMzMzMzM3B4fS5jZGstaGlnaC1jb250cmFzdC1ibGFjay1vbi13aGl0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7d2lkdGg6Y2FsYygxMDAlIC0gNnB4KTtoZWlnaHQ6MnB4O29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApIHJvdGF0ZSgwZGVnKTtib3JkZXItcmFkaXVzOjJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O21hcmdpbi10b3A6MnB4fS5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye29yZGVyOjE7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4cHh9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MX0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3t0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKDBkZWcpfS5tYXQtY2hlY2tib3gtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfS5tYXQtY2hlY2tib3gtaW5wdXQ6Zm9jdXN+Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE5QZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+TFBlKSxtdWx0aTohMH0sTFBlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5NXt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOlskdChbTlBlXSksdHRdfSksbn0pKCkscmVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSwkcD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsZG4senAscmVlLGRuLHJlZV19KSxufSkoKSxzZWU9TnMoe3Bhc3NpdmU6ITB9KSxhZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbmdab25lPWksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHM9bmV3IE1hcH1tb25pdG9yKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGFvO2xldCBpPWNhKGUpLHI9dGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZ2V0KGkpO2lmKHIpcmV0dXJuIHIuc3ViamVjdDtsZXQgbz1uZXcgVGUscz0iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIsYT1sPT57ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IiE9PWwuYW5pbWF0aW9uTmFtZXx8aS5jbGFzc0xpc3QuY29udGFpbnMocyk/ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1sLmFuaW1hdGlvbk5hbWUmJmkuY2xhc3NMaXN0LmNvbnRhaW5zKHMpJiYoaS5jbGFzc0xpc3QucmVtb3ZlKHMpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pm8ubmV4dCh7dGFyZ2V0OmwudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMX0pKSk6KGkuY2xhc3NMaXN0LmFkZChzKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITB9KSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aS5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpfX0pLG99c3RvcE1vbml0b3JpbmcoZSl7bGV0IGk9Y2EoZSkscj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoaSk7ciYmKHIudW5saXN0ZW4oKSxyLnN1YmplY3QuY29tcGxldGUoKSxpLmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmRlbGV0ZShpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLnN0b3BNb25pdG9yaW5nKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHc1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxWUGU9bmV3IHNlKCJNQVRfSU5QVVRfVkFMVUVfQUNDRVNTT1IiKSxIUGU9WyJidXR0b24iLCJjaGVja2JveCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInN1Ym1pdCJdLFVQZT0wLHpQZT1SQShjbGFzc3tjb25zdHJ1Y3RvcihuLHQsZSxpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9bix0aGlzLl9wYXJlbnRGb3JtPXQsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWUsdGhpcy5uZ0NvbnRyb2w9aSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGV9fSksUV89KCgpPT57Y2xhc3MgbiBleHRlbmRzIHpQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXtzdXBlcihhLG8scyxyKSx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9hdXRvZmlsbE1vbml0b3I9Yyx0aGlzLl9mb3JtRmllbGQ9ZCx0aGlzLl91aWQ9Im1hdC1pbnB1dC0iK1VQZSsrLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGUsdGhpcy5jb250cm9sVHlwZT0ibWF0LWlucHV0Iix0aGlzLmF1dG9maWxsZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdHlwZT0idGV4dCIsdGhpcy5fcmVhZG9ubHk9ITEsdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXM9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiXS5maWx0ZXIoZj0+RlYoKS5oYXMoZikpLHRoaXMuX2lPU0tleXVwTGlzdGVuZXI9Zj0+e2xldCBtPWYudGFyZ2V0OyFtLnZhbHVlJiYwPT09bS5zZWxlY3Rpb25TdGFydCYmMD09PW0uc2VsZWN0aW9uRW5kJiYobS5zZXRTZWxlY3Rpb25SYW5nZSgxLDEpLG0uc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKSl9O2xldCBwPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxoPXAubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3I9bHx8cCx0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXRoaXMudmFsdWUsdGhpcy5pZD10aGlzLmlkLGkuSU9TJiZ1LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57ZS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX0pLHRoaXMuX2lzU2VydmVyPSF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsdGhpcy5faXNOYXRpdmVTZWxlY3Q9InNlbGVjdCI9PT1oLHRoaXMuX2lzVGV4dGFyZWE9InRleHRhcmVhIj09PWgsdGhpcy5faXNJbkZvcm1GaWVsZD0hIWQsdGhpcy5faXNOYXRpdmVTZWxlY3QmJih0aGlzLmNvbnRyb2xUeXBlPXAubXVsdGlwbGU/Im1hdC1uYXRpdmUtc2VsZWN0LW11bHRpcGxlIjoibWF0LW5hdGl2ZS1zZWxlY3QiKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFNjLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPVd0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJkZWKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5fZGlydHlDaGVja05hdGl2ZVZhbHVlKCksdGhpcy5fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9mb2N1c0NoYW5nZWQoZSl7ZSE9PXRoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uSW5wdXQoKXt9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2Zvcm1GaWVsZCxpPWUmJiJsZWdhY3kiPT09ZS5hcHBlYXJhbmNlJiYhZS5faGFzTGFiZWw/LigpP251bGw6dGhpcy5wbGFjZWhvbGRlcjtpZihpIT09dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcil7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXI9aSxpP3Iuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsaSk6ci5yZW1vdmVBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIil9fV9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7dGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZSE9PWUmJih0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fdmFsaWRhdGVUeXBlKCl7SFBlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHVpKSx3KHBhLDEwKSx3KEdfLDgpLHcoV18sOCksdyhSXyksdyhWUGUsMTApLHcoYWVlKSx3KHB0KSx3KHVtLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJtYXRJbnB1dCIsIiJdLFsidGV4dGFyZWEiLCJtYXRJbnB1dCIsIiJdLFsic2VsZWN0IiwibWF0TmF0aXZlQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5wdXQtZWxlbWVudCIsIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2wiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9mb2N1c0NoYW5nZWQoITApfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMSl9KSgiaW5wdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uSW5wdXQoKX0pLDImZSYmKEFhKCJkaXNhYmxlZCIsaS5kaXNhYmxlZCkoInJlcXVpcmVkIixpLnJlcXVpcmVkKSx6ZSgiaWQiLGkuaWQpKCJkYXRhLXBsYWNlaG9sZGVyIixpLnBsYWNlaG9sZGVyKSgibmFtZSIsaS5uYW1lfHxudWxsKSgicmVhZG9ubHkiLGkucmVhZG9ubHkmJiFpLl9pc05hdGl2ZVNlbGVjdHx8bnVsbCkoImFyaWEtaW52YWxpZCIsaS5lbXB0eSYmaS5yZXF1aXJlZD9udWxsOmkuZXJyb3JTdGF0ZSkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQpLGF0KCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1uYXRpdmUtc2VsZWN0LWlubGluZSIsaS5faXNJbmxpbmVTZWxlY3QoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsaWQ6ImlkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLG5hbWU6Im5hbWUiLHJlcXVpcmVkOiJyZXF1aXJlZCIsdHlwZToidHlwZSIsZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSx2YWx1ZToidmFsdWUiLHJlYWRvbmx5OiJyZWFkb25seSJ9LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlVfLHVzZUV4aXN0aW5nOm59XSksdHQsenRdfSksbn0pKCksQXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUl9dLGltcG9ydHM6W3c1LGRtLGRuLHc1LGRtXX0pLG59KSgpO2Z1bmN0aW9uIGpQZShuLHQpe2lmKDEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIiBSZWxvYWQgcGVyaW9kIGhhcyB0byBiZSBtaW5pbXVtIG9mICIsZS5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLCIgc2Vjb25kcy4gIil9fWZ1bmN0aW9uIEdQZShuLHQpezEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxLCIgUGFnZSBzaXplIGhhcyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXIuICIpLHYoKSl9dmFyIGxlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5yZWxvYWRUb2dnbGVkPW5ldyBHLHRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ9bmV3IEcsdGhpcy5wYWdlU2l6ZUNoYW5nZWQ9bmV3IEcsdGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TPTMwLHRoaXMucmVsb2FkUGVyaW9kQ29udHJvbD1uZXcgbncodGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLFtTYy5yZXF1aXJlZCxTYy5taW4odGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TKV0pLHRoaXMucGFnaW5hdGlvbkNvbnRyb2w9bmV3IG53KDEsW1NjLnJlcXVpcmVkLFNjLm1pbigxKSxuPT57bGV0IHQ9TnVtYmVyKG4udmFsdWUpO3JldHVybiBNYXRoLnJvdW5kKHQpPT09bi52YWx1ZT9udWxsOntpbnRlZ2VyOnt2YWx1ZTpuLnZhbHVlfX19XSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCYmdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZC5lbWl0KDFlMyp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWUpfSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsaWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUucmVsb2FkUGVyaW9kSW5Ncyl7bGV0IGk9ZS5yZWxvYWRQZXJpb2RJbk1zO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuc2V0VmFsdWUoaS5jdXJyZW50VmFsdWUvMWUzKX1pZihlLnJlbG9hZEVuYWJsZWQmJihlLnJlbG9hZEVuYWJsZWQuY3VycmVudFZhbHVlP3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5lbmFibGUoKTp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZGlzYWJsZSgpKSxlLnBhZ2VTaXplKXtsZXQgaT1lLnBhZ2VTaXplO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnBhZ2luYXRpb25Db250cm9sLnNldFZhbHVlKGkuY3VycmVudFZhbHVlKX19b25SZWxvYWRUb2dnbGUoKXt0aGlzLnJlbG9hZFRvZ2dsZWQuZW1pdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7cmVsb2FkRW5hYmxlZDoicmVsb2FkRW5hYmxlZCIscmVsb2FkUGVyaW9kSW5NczoicmVsb2FkUGVyaW9kSW5NcyIscGFnZVNpemU6InBhZ2VTaXplIn0sb3V0cHV0czp7cmVsb2FkVG9nZ2xlZDoicmVsb2FkVG9nZ2xlZCIscmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6InJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixwYWdlU2l6ZUNoYW5nZWQ6InBhZ2VTaXplQ2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTQsdmFyczo1LGNvbnN0czpbWzEsInJlbG9hZC10b2dnbGUiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJSZWxvYWQgUGVyaW9kIChzZWNvbmRzKSIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJQYWdpbmF0aW9uIExpbWl0IiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJoMyIpLEQoMSwiU2V0dGluZ3MiKSx2KCksZygyLCJkaXYiKSgzLCJkaXYiLDApKDQsIm1hdC1jaGVja2JveCIsMSksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlKCl9KSxEKDUsIlJlbG9hZCBkYXRhIiksdigpKCksZyg2LCJkaXYiKSg3LCJtYXQtZm9ybS1maWVsZCIpLE4oOCwiaW5wdXQiLDIpLHYoKSxFKDksalBlLDIsMSwibWF0LWVycm9yIiwzKSx2KCkoKSxnKDEwLCJkaXYiKSgxMSwibWF0LWZvcm0tZmllbGQiKSxOKDEyLCJpbnB1dCIsNCksdigpLEUoMTMsR1BlLDIsMCwibWF0LWVycm9yIiwzKSx2KCkpLDImZSYmKHgoNCksYigiY2hlY2tlZCIsaS5yZWxvYWRFbmFibGVkKSx4KDQpLGIoImZvcm1Db250cm9sIixpLnJlbG9hZFBlcmlvZENvbnRyb2wpLHgoMSksYigibmdJZiIsaS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJtaW4iKXx8aS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJyZXF1aXJlZCIpKSx4KDMpLGIoImZvcm1Db250cm9sIixpLnBhZ2luYXRpb25Db250cm9sKSx4KDEpLGIoIm5nSWYiLGkucGFnaW5hdGlvbkNvbnRyb2wuaW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W1hlLHRJLGc1LG0kLHY1LEVkLEhKLER1LFFfXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5oM1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDIwcHg7XG59XG5cbi5yZWxvYWQtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59Il19KSxufSkoKSxjZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChSQyksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChPQyksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoJGYpfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZEEoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHBBKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChoQSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLFAoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWxvYWRFbmFibGVkIixXKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFcoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFcoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbbGVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx1ZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lfWlzQnV0dG9uRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1FZS5MT0FESU5HfW9wZW5EaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKGNlZSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLE4oMSwibWF0LWljb24iLDEpLHYoKSksMiZlJiZiKCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6WyRuLFpuXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxkZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUFYpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmYigic2V0dGluZ3NMb2FkU3RhdGUiLFcoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbdWVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRUGU9WyJtYXQtbWVudS1pdGVtIiwiIl07ZnVuY3Rpb24gS1BlKG4sdCl7MSZuJiYoam4oKSxnKDAsInN2ZyIsMiksTigxLCJwb2x5Z29uIiwzKSx2KCkpfXZhciBoZWU9WyIqIl07ZnVuY3Rpb24gWlBlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwwKSxQKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmNsb3NlZC5lbWl0KCJjbGljayIpKX0pKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25TdGFydChyKSl9KSgiQHRyYW5zZm9ybU1lbnUuZG9uZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25Eb25lKHIpKX0pLGcoMSwiZGl2IiwxKSxObigyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJpZCIsZS5wYW5lbElkKSgibmdDbGFzcyIsZS5fY2xhc3NMaXN0KSgiQHRyYW5zZm9ybU1lbnUiLGUuX3BhbmVsQW5pbWF0aW9uU3RhdGUpLHplKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsZS5hcmlhTGFiZWxsZWRieXx8bnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLGUuYXJpYURlc2NyaWJlZGJ5fHxudWxsKX19dmFyIHBJPXt0cmFuc2Zvcm1NZW51OkhyKCJ0cmFuc2Zvcm1NZW51IixbRWkoInZvaWQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjgpIn0pKSxJaSgidm9pZCA9PiBlbnRlciIsVmkoIjEyMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToic2NhbGUoMSkifSkpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSksZmFkZUluSXRlbXM6SHIoImZhZGVJbkl0ZW1zIixbRWkoInNob3dpbmciLHJuKHtvcGFjaXR5OjF9KSksSWkoInZvaWQgPT4gKiIsW3JuKHtvcGFjaXR5OjB9KSxWaSgiNDAwbXMgMTAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LEpQZT1uZXcgc2UoIk1hdE1lbnVDb250ZW50IiksUzU9bmV3IHNlKCJNQVRfTUVOVV9QQU5FTCIpLCRQZT1McyhnbyhjbGFzc3t9KSksRWM9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fZm9jdXNNb25pdG9yPXIsdGhpcy5fcGFyZW50TWVudT1vLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5yb2xlPSJtZW51aXRlbSIsdGhpcy5faG92ZXJlZD1uZXcgVGUsdGhpcy5fZm9jdXNlZD1uZXcgVGUsdGhpcy5faGlnaGxpZ2h0ZWQ9ITEsdGhpcy5fdHJpZ2dlcnNTdWJtZW51PSExLG8/LmFkZEl0ZW0/Lih0aGlzKX1mb2N1cyhlLGkpe3RoaXMuX2ZvY3VzTW9uaXRvciYmZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSksdGhpcy5fZm9jdXNlZC5uZXh0KHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9wYXJlbnRNZW51JiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0mJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSh0aGlzKSx0aGlzLl9ob3ZlcmVkLmNvbXBsZXRlKCksdGhpcy5fZm9jdXNlZC5jb21wbGV0ZSgpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9X2NoZWNrRGlzYWJsZWQoZSl7dGhpcy5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX1faGFuZGxlTW91c2VFbnRlcigpe3RoaXMuX2hvdmVyZWQubmV4dCh0aGlzKX1nZXRMYWJlbCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUoITApLGk9ZS5xdWVyeVNlbGVjdG9yQWxsKCJtYXQtaWNvbiwgLm1hdGVyaWFsLWljb25zIik7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXS5yZW1vdmUoKTtyZXR1cm4gZS50ZXh0Q29udGVudD8udHJpbSgpfHwiIn1fc2V0SGlnaGxpZ2h0ZWQoZSl7dGhpcy5faGlnaGxpZ2h0ZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X2hhc0ZvY3VzKCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCdCksdyh6ciksdyhTNSw4KSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtaXRlbSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY2hlY2tEaXNhYmxlZChvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVNb3VzZUVudGVyKCl9KSwyJmUmJih6ZSgicm9sZSIsaS5yb2xlKSgidGFiaW5kZXgiLGkuX2dldFRhYkluZGV4KCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIm1hdC1tZW51LWl0ZW0iLCEwKSgibWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCIsaS5faGlnaGxpZ2h0ZWQpKCJtYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlciIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixyb2xlOiJyb2xlIn0sZXhwb3J0QXM6WyJtYXRNZW51SXRlbSJdLGZlYXR1cmVzOlt0dF0sYXR0cnM6UVBlLG5nQ29udGVudFNlbGVjdG9yczpoZWUsZGVjbHM6Myx2YXJzOjMsY29uc3RzOltbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1lbnUtcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbImNsYXNzIiwibWF0LW1lbnUtc3VibWVudS1pY29uIiwidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDQsIm5nSWYiXSxbInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtbWVudS1zdWJtZW51LWljb24iXSxbInBvaW50cyIsIjAsMCA1LDUgMCwxMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksTm4oMCksTigxLCJkaXYiLDApLEUoMixLUGUsMiwwLCJzdmciLDEpKSwyJmUmJih4KDEpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSx4KDEpLGIoIm5nSWYiLGkuX3RyaWdnZXJzU3VibWVudSkpfSxkZXBlbmRlbmNpZXM6W1hlLGVzXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmZWU9bmV3IHNlKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSksdFJlPTAsb3c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1vLHRoaXMuX3hQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy54UG9zaXRpb24sdGhpcy5feVBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnlQb3NpdGlvbix0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXM9bmV3IGNsLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5fYW5pbWF0aW9uRG9uZT1uZXcgVGUsdGhpcy5vdmVybGF5UGFuZWxDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5iYWNrZHJvcENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zLmJhY2tkcm9wQ2xhc3MsdGhpcy5fb3ZlcmxhcFRyaWdnZXI9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxhcFRyaWdnZXIsdGhpcy5faGFzQmFja2Ryb3A9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGFzQmFja2Ryb3AsdGhpcy5jbG9zZWQ9bmV3IEcsdGhpcy5jbG9zZT10aGlzLmNsb3NlZCx0aGlzLnBhbmVsSWQ9Im1hdC1tZW51LXBhbmVsLSIrdFJlKyt9Z2V0IHhQb3NpdGlvbigpe3JldHVybiB0aGlzLl94UG9zaXRpb259c2V0IHhQb3NpdGlvbihlKXt0aGlzLl94UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCB5UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feVBvc2l0aW9ufXNldCB5UG9zaXRpb24oZSl7dGhpcy5feVBvc2l0aW9uPWUsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgb3ZlcmxhcFRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fb3ZlcmxhcFRyaWdnZXJ9c2V0IG92ZXJsYXBUcmlnZ2VyKGUpe3RoaXMuX292ZXJsYXBUcmlnZ2VyPVd0KGUpfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9c2V0IHBhbmVsQ2xhc3MoZSl7bGV0IGk9dGhpcy5fcHJldmlvdXNQYW5lbENsYXNzO2kmJmkubGVuZ3RoJiZpLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSExfSksdGhpcy5fcHJldmlvdXNQYW5lbENsYXNzPWUsZSYmZS5sZW5ndGgmJihlLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSEwfSksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIil9Z2V0IGNsYXNzTGlzdCgpe3JldHVybiB0aGlzLnBhbmVsQ2xhc3N9c2V0IGNsYXNzTGlzdChlKXt0aGlzLnBhbmVsQ2xhc3M9ZX1uZ09uSW5pdCgpe3RoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKSx0aGlzLl9rZXlNYW5hZ2VyPW5ldyBBXyh0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLndpdGhXcmFwKCkud2l0aFR5cGVBaGVhZCgpLndpdGhIb21lQW5kRW5kKCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uPXRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZSgoKT0+dGhpcy5jbG9zZWQuZW1pdCgidGFiIikpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSx2aShlPT51biguLi5lLm1hcChpPT5pLl9mb2N1c2VkKSkpKS5zdWJzY3JpYmUoZT0+dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuX2tleU1hbmFnZXI7aWYoImVudGVyIj09PXRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUmJmkuYWN0aXZlSXRlbT8uX2hhc0ZvY3VzKCkpe2xldCByPWUudG9BcnJheSgpLG89TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0xLGkuYWN0aXZlSXRlbUluZGV4fHwwKSk7cltvXSYmIXJbb10uZGlzYWJsZWQ/aS5zZXRBY3RpdmVJdGVtKG8pOmkuc2V0TmV4dEl0ZW1BY3RpdmUoKX19KX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5kZXN0cm95KCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKX1faG92ZXJlZCgpe3JldHVybiB0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksdmkoaT0+dW4oLi4uaS5tYXAocj0+ci5faG92ZXJlZCkpKSl9YWRkSXRlbShlKXt9cmVtb3ZlSXRlbShlKXt9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9dGhpcy5fa2V5TWFuYWdlcjtzd2l0Y2goaSl7Y2FzZSAyNzpNcihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIikpO2JyZWFrO2Nhc2UgMzc6dGhpcy5wYXJlbnRNZW51JiYibHRyIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7Y2FzZSAzOTp0aGlzLnBhcmVudE1lbnUmJiJydGwiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztkZWZhdWx0OnJldHVybigzOD09PWl8fDQwPT09aSkmJnIuc2V0Rm9jdXNPcmlnaW4oImtleWJvYXJkIiksdm9pZCByLm9uS2V5ZG93bihlKX1lLnN0b3BQcm9wYWdhdGlvbigpfWZvY3VzRmlyc3RJdGVtKGU9InByb2dyYW0iKXt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKCgpPT57bGV0IGk9bnVsbDtpZih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubGVuZ3RoJiYoaT10aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZmlyc3QuX2dldEhvc3RFbGVtZW50KCkuY2xvc2VzdCgnW3JvbGU9Im1lbnUiXScpKSwhaXx8IWkuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpe2xldCByPXRoaXMuX2tleU1hbmFnZXI7ci5zZXRGb2N1c09yaWdpbihlKS5zZXRGaXJzdEl0ZW1BY3RpdmUoKSwhci5hY3RpdmVJdGVtJiZpJiZpLmZvY3VzKCl9fSl9cmVzZXRBY3RpdmVJdGVtKCl7dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKX1zZXRFbGV2YXRpb24oZSl7bGV0IGk9TWF0aC5taW4odGhpcy5fYmFzZUVsZXZhdGlvbitlLDI0KSxyPWAke3RoaXMuX2VsZXZhdGlvblByZWZpeH0ke2l9YCxvPU9iamVjdC5rZXlzKHRoaXMuX2NsYXNzTGlzdCkuZmluZChzPT5zLnN0YXJ0c1dpdGgodGhpcy5fZWxldmF0aW9uUHJlZml4KSk7KCFvfHxvPT09dGhpcy5fcHJldmlvdXNFbGV2YXRpb24pJiYodGhpcy5fcHJldmlvdXNFbGV2YXRpb24mJih0aGlzLl9jbGFzc0xpc3RbdGhpcy5fcHJldmlvdXNFbGV2YXRpb25dPSExKSx0aGlzLl9jbGFzc0xpc3Rbcl09ITAsdGhpcy5fcHJldmlvdXNFbGV2YXRpb249cil9c2V0UG9zaXRpb25DbGFzc2VzKGU9dGhpcy54UG9zaXRpb24saT10aGlzLnlQb3NpdGlvbil7bGV0IHI9dGhpcy5fY2xhc3NMaXN0O3JbIm1hdC1tZW51LWJlZm9yZSJdPSJiZWZvcmUiPT09ZSxyWyJtYXQtbWVudS1hZnRlciJdPSJhZnRlciI9PT1lLHJbIm1hdC1tZW51LWFib3ZlIl09ImFib3ZlIj09PWksclsibWF0LW1lbnUtYmVsb3ciXT0iYmVsb3ciPT09aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X3N0YXJ0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0iZW50ZXIifV9yZXNldEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQifV9vbkFuaW1hdGlvbkRvbmUoZSl7dGhpcy5fYW5pbWF0aW9uRG9uZS5uZXh0KGUpLHRoaXMuX2lzQW5pbWF0aW5nPSExfV9vbkFuaW1hdGlvblN0YXJ0KGUpe3RoaXMuX2lzQW5pbWF0aW5nPSEwLCJlbnRlciI9PT1lLnRvU3RhdGUmJjA9PT10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCYmKGUuZWxlbWVudC5zY3JvbGxUb3A9MCl9X3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCl7dGhpcy5fYWxsSXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2FsbEl0ZW1zKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMucmVzZXQoZS5maWx0ZXIoaT0+aS5fcGFyZW50TWVudT09PXRoaXMpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubm90aWZ5T25DaGFuZ2VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhmZWUpLHcobm4pKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixKUGUsNSksTmkocixFYyw1KSxOaShyLEVjLDQpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmxhenlDb250ZW50PW8uZmlyc3QpLE5lKG89TGUoKSkmJihpLl9hbGxJdGVtcz1vKSxOZShvPUxlKCkpJiYoaS5pdGVtcz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50ZW1wbGF0ZVJlZj1yLmZpcnN0KX19LGlucHV0czp7YmFja2Ryb3BDbGFzczoiYmFja2Ryb3BDbGFzcyIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0seFBvc2l0aW9uOiJ4UG9zaXRpb24iLHlQb3NpdGlvbjoieVBvc2l0aW9uIixvdmVybGFwVHJpZ2dlcjoib3ZlcmxhcFRyaWdnZXIiLGhhc0JhY2tkcm9wOiJoYXNCYWNrZHJvcCIscGFuZWxDbGFzczpbImNsYXNzIiwicGFuZWxDbGFzcyJdLGNsYXNzTGlzdDoiY2xhc3NMaXN0In0sb3V0cHV0czp7Y2xvc2VkOiJjbG9zZWQiLGNsb3NlOiJjbG9zZSJ9fSksbn0pKCksSXU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIG93e2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuX2VsZXZhdGlvblByZWZpeD0ibWF0LWVsZXZhdGlvbi16Iix0aGlzLl9iYXNlRWxldmF0aW9uPTR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcocHQpLHcoZmVlKSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsbnVsbCl9LGV4cG9ydEFzOlsibWF0TWVudSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6UzUsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOmhlZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sidGFiaW5kZXgiLCItMSIsInJvbGUiLCJtZW51IiwxLCJtYXQtbWVudS1wYW5lbCIsMywiaWQiLCJuZ0NsYXNzIiwia2V5ZG93biIsImNsaWNrIl0sWzEsIm1hdC1tZW51LWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxaUGUsMyw2LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsnbWF0LW1lbnV7ZGlzcGxheTpub25lfS5tYXQtbWVudS1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDhweCk7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowO21pbi1oZWlnaHQ6NjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1tZW51LWNvbnRlbnQ6bm90KDplbXB0eSl7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1lbnUtaXRlbXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW17bWFyZ2luLXRvcDoxcHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0ubWF0LW1lbnUtc3VibWVudS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDo1cHg7aGVpZ2h0OjEwcHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtbWVudS1zdWJtZW51LWljb257cmlnaHQ6YXV0bztsZWZ0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgc2NhbGVYKC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fWJ1dHRvbi5tYXQtbWVudS1pdGVte3dpZHRoOjEwMCV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3BJLnRyYW5zZm9ybU1lbnUscEkuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG1lZT1uZXcgc2UoIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpLGlSZT17cHJvdmlkZTptZWUsZGVwczpbUWldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxwZWU9TnMoe3Bhc3NpdmU6ITB9KSxyUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2VsZW1lbnQ9aSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPXIsdGhpcy5fbWVudUl0ZW1JbnN0YW5jZT1hLHRoaXMuX2Rpcj1sLHRoaXMuX2ZvY3VzTW9uaXRvcj1jLHRoaXMuX25nWm9uZT11LHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9tZW51T3Blbj0hMSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5faGFuZGxlVG91Y2hTdGFydD1kPT57SEMoZCl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgRyx0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgRyx0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1zIGluc3RhbmNlb2Ygb3c/czp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQscGVlKSxhJiYoYS5fdHJpZ2dlcnNTdWJtZW51PXRoaXMudHJpZ2dlcnNTdWJtZW51KCkpfWdldCBfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yKCl7cmV0dXJuIHRoaXMubWVudX1zZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcihlKXt0aGlzLm1lbnU9ZX1nZXQgbWVudSgpe3JldHVybiB0aGlzLl9tZW51fXNldCBtZW51KGUpe2UhPT10aGlzLl9tZW51JiYodGhpcy5fbWVudT1lLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGUmJih0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249ZS5jbG9zZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2Rlc3Ryb3lNZW51KGkpLCgiY2xpY2siPT09aXx8InRhYiI9PT1pKSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkLmVtaXQoaSl9KSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxwZWUpLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faG92ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgbWVudU9wZW4oKXtyZXR1cm4gdGhpcy5fbWVudU9wZW59Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifXRyaWdnZXJzU3VibWVudSgpe3JldHVybiEoIXRoaXMuX21lbnVJdGVtSW5zdGFuY2V8fCF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2Ygb3cmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUob3QoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2Ygb3c/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoSGUocj0+InZvaWQiPT09ci50b1N0YXRlKSxIdCgxKSxvdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXt0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKX1fY3JlYXRlT3ZlcmxheShlKXtpZighdGhpcy5fb3ZlcmxheVJlZil7bGV0IGk9dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhlKTt0aGlzLl9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkucG9zaXRpb25TdHJhdGVneSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZShpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKX1yZXR1cm4gdGhpcy5fb3ZlcmxheVJlZn1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnQpLndpdGhMb2NrZWRQb3NpdGlvbigpLndpdGhHcm93QWZ0ZXJPcGVuKCkud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCIubWF0LW1lbnUtcGFuZWwsIC5tYXQtbWRjLW1lbnUtcGFuZWwiKSxiYWNrZHJvcENsYXNzOmUuYmFja2Ryb3BDbGFzc3x8ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIixwYW5lbENsYXNzOmUub3ZlcmxheVBhbmVsQ2xhc3Msc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxkaXJlY3Rpb246dGhpcy5fZGlyfSl9X3N1YnNjcmliZVRvUG9zaXRpb25zKGUsaSl7ZS5zZXRQb3NpdGlvbkNsYXNzZXMmJmkucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZShyPT57bGV0IG89InN0YXJ0Ij09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVg/ImFmdGVyIjoiYmVmb3JlIixzPSJ0b3AiPT09ci5jb25uZWN0aW9uUGFpci5vdmVybGF5WT8iYmVsb3ciOiJhYm92ZSI7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scykpOmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scyl9KX1fc2V0UG9zaXRpb24oZSxpKXtsZXRbcixvXT0iYmVmb3JlIj09PWUueFBvc2l0aW9uP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl0sW3MsYV09ImFib3ZlIj09PWUueVBvc2l0aW9uP1siYm90dG9tIiwidG9wIl06WyJ0b3AiLCJib3R0b20iXSxbbCxjXT1bcyxhXSxbdSxkXT1bcixvXSxwPTA7aWYodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSl7aWYoZD1yPSJiZWZvcmUiPT09ZS54UG9zaXRpb24/InN0YXJ0IjoiZW5kIixvPXU9ImVuZCI9PT1yPyJzdGFydCI6ImVuZCIsdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51KXtpZihudWxsPT10aGlzLl9wYXJlbnRJbm5lclBhZGRpbmcpe2xldCBoPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5pdGVtcy5maXJzdDt0aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc9aD9oLl9nZXRIb3N0RWxlbWVudCgpLm9mZnNldFRvcDowfXA9ImJvdHRvbSI9PT1zP3RoaXMuX3BhcmVudElubmVyUGFkZGluZzotdGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nfX1lbHNlIGUub3ZlcmxhcFRyaWdnZXJ8fChsPSJ0b3AiPT09cz8iYm90dG9tIjoidG9wIixjPSJ0b3AiPT09YT8iYm90dG9tIjoidG9wIik7aS53aXRoUG9zaXRpb25zKFt7b3JpZ2luWDpyLG9yaWdpblk6bCxvdmVybGF5WDp1LG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpvLG9yaWdpblk6bCxvdmVybGF5WDpkLG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpyLG9yaWdpblk6YyxvdmVybGF5WDp1LG92ZXJsYXlZOmEsb2Zmc2V0WTotcH0se29yaWdpblg6byxvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6LXB9XSl9X21lbnVDbG9zaW5nQWN0aW9ucygpe2xldCBlPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLGk9dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpO3JldHVybiB1bihlLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkOmp0KCksdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51P3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoSGUocz0+cyE9PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UpLEhlKCgpPT50aGlzLl9tZW51T3BlbikpOmp0KCksaSl9X2hhbmRsZU1vdXNlZG93bihlKXtWQyhlKXx8KHRoaXMuX29wZW5lZEJ5PTA9PT1lLmJ1dHRvbj8ibW91c2UiOnZvaWQgMCx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZlLnByZXZlbnREZWZhdWx0KCkpfV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZTsoMTM9PT1pfHwzMj09PWkpJiYodGhpcy5fb3BlbmVkQnk9ImtleWJvYXJkIiksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmKDM5PT09aSYmImx0ciI9PT10aGlzLmRpcnx8Mzc9PT1pJiYicnRsIj09PXRoaXMuZGlyKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIsdGhpcy5vcGVuTWVudSgpKX1faGFuZGxlQ2xpY2soZSl7dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKT8oZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9wZW5NZW51KCkpOnRoaXMudG9nZ2xlTWVudSgpfV9oYW5kbGVIb3ZlcigpeyF0aGlzLnRyaWdnZXJzU3VibWVudSgpfHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51fHwodGhpcy5faG92ZXJTdWJzY3JpcHRpb249dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShIZShlPT5lPT09dGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmIWUuZGlzYWJsZWQpLG5sKDAsZmcpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vcGVuZWRCeT0ibW91c2UiLHRoaXMubWVudSBpbnN0YW5jZW9mIG93JiZ0aGlzLm1lbnUuX2lzQW5pbWF0aW5nP3RoaXMubWVudS5fYW5pbWF0aW9uRG9uZS5waXBlKEh0KDEpLG5sKDAsZmcpLG90KHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLm9wZW5NZW51KCkpOnRoaXMub3Blbk1lbnUoKX0pKX1fZ2V0UG9ydGFsKGUpe3JldHVybighdGhpcy5fcG9ydGFsfHx0aGlzLl9wb3J0YWwudGVtcGxhdGVSZWYhPT1lLnRlbXBsYXRlUmVmKSYmKHRoaXMuX3BvcnRhbD1uZXcgaHMoZS50ZW1wbGF0ZVJlZix0aGlzLl92aWV3Q29udGFpbmVyUmVmKSksdGhpcy5fcG9ydGFsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KHlpKSx3KG1lZSksdyhTNSw4KSx3KEVjLDEwKSx3KGlyLDgpLHcoenIpLHcocHQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJnplKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVufHxudWxsKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpLFB1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyByUmV7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCIiXSxbIiIsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1lbnUtdHJpZ2dlciJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZWg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaVJlXSxpbXBvcnRzOltrZSxkbix4YyxWbyxTdSxkbl19KSxufSkoKTtmdW5jdGlvbiBvUmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDgpfWZ1bmN0aW9uIHNSZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gYVJlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwxMCl9dmFyIGhhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5ERUZBVUxUPTBdPSJERUZBVUxUIixuW24uREFSS19NT0RFX09OPTFdPSJEQVJLX01PREVfT04iLG5bbi5EQVJLX01PREVfT0ZGPTJdPSJEQVJLX01PREVfT0ZGIn0oaGF8fChoYT17fSkpLGhhKSkoKSxnZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGFya01vZGVPdmVycmlkZT1oYSx0aGlzLm9uT3ZlcnJpZGVDaGFuZ2VkPW5ldyBHfWdldEJ1dHRvblRpdGxlKCl7bGV0IGU7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBoYS5ERUZBVUxUOmU9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046ZT0iRGFyayBtb2RlIjticmVhaztjYXNlIGhhLkRBUktfTU9ERV9PRkY6ZT0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7ZX1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiXV0saW5wdXRzOntkYXJrTW9kZU92ZXJyaWRlOiJkYXJrTW9kZU92ZXJyaWRlIn0sb3V0cHV0czp7b25PdmVycmlkZUNoYW5nZWQ6Im9uT3ZlcnJpZGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIiwiTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJuZ1N3aXRjaCIsInRpdGxlIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIlNldCB0aGUgdGhlbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgbW9kZSBpbiB0aGUgYnJvd3Nlci4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBsaWdodCBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBkYXJrIFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLEUoMSxvUmUsMSwwLCJtYXQtaWNvbiIsMSksRSgyLHNSZSwxLDAsIm1hdC1pY29uIiwyKSxFKDMsYVJlLDEsMCwibWF0LWljb24iLDMpLHYoKSxnKDQsIm1hdC1tZW51IixudWxsLDQpKDYsImJ1dHRvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCl9KSxnKDcsImxhYmVsIiksRCg4LCJCcm93c2VyIGRlZmF1bHQiKSx2KCkoKSxnKDksImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRil9KSxnKDEwLCJsYWJlbCIpLEQoMTEsIkxpZ2h0IiksdigpKCksZygxMiwiYnV0dG9uIiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pfSksZygxMywibGFiZWwiKSxEKDE0LCJEYXJrIiksdigpKCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDUpKSgibmdTd2l0Y2giLGkuZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixpLmdldEJ1dHRvblRpdGxlKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkZXBlbmRlbmNpZXM6WyRuLFpuLEl1LEVjLFB1LGhyLElyXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxfZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXJrTW9kZU92ZXJyaWRlJD10aGlzLnN0b3JlLnNlbGVjdChzRCkucGlwZShCKGk9Pm51bGw9PT1pP2hhLkRFRkFVTFQ6aT9oYS5EQVJLX01PREVfT046aGEuREFSS19NT0RFX09GRikpfWNoYW5nZURhcmtNb2RlKGUpe2xldCBpPW51bGw7c3dpdGNoKGUpe2Nhc2UgaGEuREVGQVVMVDppPW51bGw7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT0ZGOmk9ITE7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046aT0hMH10aGlzLnN0b3JlLmRpc3BhdGNoKGpEKHtlbmFibGVEYXJrTW9kZTppfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImRhcmtNb2RlT3ZlcnJpZGUiLCJvbk92ZXJyaWRlQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlLWNvbXBvbmVudCIsMCksUCgib25PdmVycmlkZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmNoYW5nZURhcmtNb2RlKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJkYXJrTW9kZU92ZXJyaWRlIixXKDEsMSxpLmRhcmtNb2RlT3ZlcnJpZGUkKSl9LGRlcGVuZGVuY2llczpbZ2VlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiB1UmUobix0KXsxJm4mJk5uKDApfXZhciB4ZWU9WyIqIl07ZnVuY3Rpb24gZFJlKG4sdCl7fXZhciBwUmU9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxoUmU9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19LGZSZT1bInRhYkxpc3RDb250YWluZXIiXSxtUmU9WyJ0YWJMaXN0Il0sZ1JlPVsidGFiTGlzdElubmVyIl0sX1JlPVsibmV4dFBhZ2luYXRvciJdLHZSZT1bInByZXZpb3VzUGFnaW5hdG9yIl0seVJlPVsidGFiQm9keVdyYXBwZXIiXSxiUmU9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiB4UmUobix0KXt9ZnVuY3Rpb24gQ1JlKG4sdCl7MSZuJiZFKDAseFJlLDAsMCwibmctdGVtcGxhdGUiLDEwKSwyJm4mJmIoImNka1BvcnRhbE91dGxldCIsTSgpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiB3UmUobix0KXsxJm4mJkQoMCksMiZuJiZ5dChNKCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gTVJlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgcj1yZShlKSxvPXIuJGltcGxpY2l0LHM9ci5pbmRleCxhPU0oKSxsPXN0KDEpO3JldHVybiBvZShhLl9oYW5kbGVDbGljayhvLGwscykpfSkoImNka0ZvY3VzQ2hhbmdlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgpLl90YWJGb2N1c0NoYW5nZWQocixzKSl9KSxnKDEsImRpdiIsNyksRSgyLENSZSwxLDEsIm5nLXRlbXBsYXRlIiw4KSxFKDMsd1JlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1zdCg0KSxvPU0oKTthdCgibWF0LXRhYi1sYWJlbC1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixvLl9nZXRUYWJMYWJlbElkKGkpKSgibmdDbGFzcyIsZS5sYWJlbENsYXNzKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsZS5kaXNhYmxlZHx8by5kaXNhYmxlUmlwcGxlKSx6ZSgidGFiSW5kZXgiLG8uX2dldFRhYkluZGV4KGUsaSkpKCJhcmlhLXBvc2luc2V0IixpKzEpKCJhcmlhLXNldHNpemUiLG8uX3RhYnMubGVuZ3RoKSgiYXJpYS1jb250cm9scyIsby5fZ2V0VGFiQ29udGVudElkKGkpKSgiYXJpYS1zZWxlY3RlZCIsby5zZWxlY3RlZEluZGV4PT09aSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IiwhZS5hcmlhTGFiZWwmJmUuYXJpYUxhYmVsbGVkYnk/ZS5hcmlhTGFiZWxsZWRieTpudWxsKSx4KDIpLGIoIm5nSWYiLGUudGVtcGxhdGVMYWJlbCkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gU1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXRhYi1ib2R5IiwxMSksUCgiX29uQ2VudGVyZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fcmVtb3ZlVGFiQm9keVdyYXBwZXJIZWlnaHQoKSl9KSgiX29uQ2VudGVyaW5nIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKCk7YXQoIm1hdC10YWItYm9keS1hY3RpdmUiLHIuc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixyLl9nZXRUYWJDb250ZW50SWQoaSkpKCJuZ0NsYXNzIixlLmJvZHlDbGFzcykoImNvbnRlbnQiLGUuY29udGVudCkoInBvc2l0aW9uIixlLnBvc2l0aW9uKSgib3JpZ2luIixlLm9yaWdpbikoImFuaW1hdGlvbkR1cmF0aW9uIixyLmFuaW1hdGlvbkR1cmF0aW9uKSgicHJlc2VydmVDb250ZW50IixyLnByZXNlcnZlQ29udGVudCksemUoInRhYmluZGV4IixudWxsIT1yLmNvbnRlbnRUYWJJbmRleCYmci5zZWxlY3RlZEluZGV4PT09aT9yLmNvbnRlbnRUYWJJbmRleDpudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixyLl9nZXRUYWJMYWJlbElkKGkpKX19dmFyIEVSZT1uZXcgc2UoIk1hdElua0JhclBvc2l0aW9uZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHQ9Pih7bGVmdDp0Pyh0Lm9mZnNldExlZnR8fDApKyJweCI6IjAiLHdpZHRoOnQ/KHQub2Zmc2V0V2lkdGh8fDApKyJweCI6IjAifSl9fSksdmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2lua0JhclBvc2l0aW9uZXI9cix0aGlzLl9hbmltYXRpb25Nb2RlPW99YWxpZ25Ub0VsZW1lbnQoZSl7dGhpcy5zaG93KCksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT10aGlzLl9pbmtCYXJQb3NpdGlvbmVyKGUpLHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubGVmdD1pLmxlZnQsci5zdHlsZS53aWR0aD1pLndpZHRofSl9KX1zaG93KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifWhpZGUoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhFUmUpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaW5rLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbmstYmFyIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpfX0pLG59KSgpLERSZT1uZXcgc2UoIk1hdFRhYkNvbnRlbnQiKSxDZWU9bmV3IHNlKCJNYXRUYWJMYWJlbCIpLHdlZT1uZXcgc2UoIk1BVF9UQUIiKSxNZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGZKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX2Nsb3Nlc3RUYWI9cn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPaSksdyh5aSksdyh3ZWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLWxhYmVsIiwiIl0sWyIiLCJtYXRUYWJMYWJlbCIsIiJdXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOkNlZSx1c2VFeGlzdGluZzpufV0pLHR0XX0pLG59KSgpLEFSZT1nbyhjbGFzc3t9KSxTZWU9bmV3IHNlKCJNQVRfVEFCX0dST1VQIiksYXc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEFSZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX2Nsb3Nlc3RUYWJHcm91cD1pLHRoaXMudGV4dExhYmVsPSIiLHRoaXMuX2NvbnRlbnRQb3J0YWw9bnVsbCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFRlLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLm9yaWdpbj1udWxsLHRoaXMuaXNBY3RpdmU9ITF9Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbChlKXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fY29udGVudFBvcnRhbH1uZ09uQ2hhbmdlcyhlKXsoZS5oYXNPd25Qcm9wZXJ0eSgidGV4dExhYmVsIil8fGUuaGFzT3duUHJvcGVydHkoImRpc2FibGVkIikpJiZ0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9bmdPbkluaXQoKXt0aGlzLl9jb250ZW50UG9ydGFsPW5ldyBocyh0aGlzLl9leHBsaWNpdENvbnRlbnR8fHRoaXMuX2ltcGxpY2l0Q29udGVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKX1fc2V0VGVtcGxhdGVMYWJlbElucHV0KGUpe2UmJmUuX2Nsb3Nlc3RUYWI9PT10aGlzJiYodGhpcy5fdGVtcGxhdGVMYWJlbD1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhTZWUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKE5pKHIsQ2VlLDUpLE5pKHIsRFJlLDcsT2kpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLnRlbXBsYXRlTGFiZWw9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2V4cGxpY2l0Q29udGVudD1vLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW1wbGljaXRDb250ZW50PXIuZmlyc3QpfX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLHRleHRMYWJlbDpbImxhYmVsIiwidGV4dExhYmVsIl0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxsYWJlbENsYXNzOiJsYWJlbENsYXNzIixib2R5Q2xhc3M6ImJvZHlDbGFzcyJ9LGV4cG9ydEFzOlsibWF0VGFiIl0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTp3ZWUsdXNlRXhpc3Rpbmc6bn1dKSx0dCx6dF0sbmdDb250ZW50U2VsZWN0b3JzOnhlZSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLHVSZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxJUmU9e3RyYW5zbGF0ZVRhYjpIcigidHJhbnNsYXRlVGFiIixbRWkoImNlbnRlciwgdm9pZCwgbGVmdC1vcmlnaW4tY2VudGVyLCByaWdodC1vcmlnaW4tY2VudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSxFaSgibGVmdCIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxFaSgicmlnaHQiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxJaSgiKiA9PiBsZWZ0LCAqID0+IHJpZ2h0LCBsZWZ0ID0+IGNlbnRlciwgcmlnaHQgPT4gY2VudGVyIixWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpKSxJaSgidm9pZCA9PiBsZWZ0LW9yaWdpbi1jZW50ZXIiLFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSksSWkoInZvaWQgPT4gcmlnaHQtb3JpZ2luLWNlbnRlciIsW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksVmkoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9LFBSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQnN7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLG8pLHRoaXMuX2hvc3Q9cix0aGlzLl9jZW50ZXJpbmdTdWI9dm4uRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj12bi5FTVBUWX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5fY2VudGVyaW5nU3ViPXRoaXMuX2hvc3QuX2JlZm9yZUNlbnRlcmluZy5waXBlKFZuKHRoaXMuX2hvc3QuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5faG9zdC5fcG9zaXRpb24pKSkuc3Vic2NyaWJlKGU9PntlJiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pLHRoaXMuX2xlYXZpbmdTdWI9dGhpcy5faG9zdC5fYWZ0ZXJMZWF2aW5nQ2VudGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hvc3QucHJlc2VydmVDb250ZW50fHx0aGlzLmRldGFjaCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2NlbnRlcmluZ1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX2xlYXZpbmdTdWIudW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhFbyksdyh5aSksdyhyaSgoKT0+RWVlKSksdyhCdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJCb2R5SG9zdCIsIiJdXSxmZWF0dXJlczpbdHRdfSksbn0pKCksUlJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaXI9aSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGU9bmV3IFRlLHRoaXMuX29uQ2VudGVyaW5nPW5ldyBHLHRoaXMuX2JlZm9yZUNlbnRlcmluZz1uZXcgRyx0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXI9bmV3IEcsdGhpcy5fb25DZW50ZXJlZD1uZXcgRyghMCksdGhpcy5hbmltYXRpb25EdXJhdGlvbj0iNTAwbXMiLHRoaXMucHJlc2VydmVDb250ZW50PSExLGkmJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249aS5jaGFuZ2Uuc3Vic2NyaWJlKG89Pnt0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShvKSxyLm1hcmtGb3JDaGVjaygpfSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoZGkoKG8scyk9Pm8uZnJvbVN0YXRlPT09cy5mcm9tU3RhdGUmJm8udG9TdGF0ZT09PXMudG9TdGF0ZSkpLnN1YnNjcmliZShvPT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pfXNldCBwb3NpdGlvbihlKXt0aGlzLl9wb3NpdGlvbkluZGV4PWUsdGhpcy5fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoKX1uZ09uSW5pdCgpeyJjZW50ZXIiPT10aGlzLl9wb3NpdGlvbiYmbnVsbCE9dGhpcy5vcmlnaW4mJih0aGlzLl9wb3NpdGlvbj10aGlzLl9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKHRoaXMub3JpZ2luKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZS5jb21wbGV0ZSgpfV9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoZSl7bGV0IGk9dGhpcy5faXNDZW50ZXJQb3NpdGlvbihlLnRvU3RhdGUpO3RoaXMuX2JlZm9yZUNlbnRlcmluZy5lbWl0KGkpLGkmJnRoaXMuX29uQ2VudGVyaW5nLmVtaXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCl9X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV9pc0NlbnRlclBvc2l0aW9uKGUpe3JldHVybiJjZW50ZXIiPT1lfHwibGVmdC1vcmlnaW4tY2VudGVyIj09ZXx8InJpZ2h0LW9yaWdpbi1jZW50ZXIiPT1lfV9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShlPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpKXt0aGlzLl9wb3NpdGlvbj10aGlzLl9wb3NpdGlvbkluZGV4PDA/Imx0ciI9PWU/ImxlZnQiOiJyaWdodCI6dGhpcy5fcG9zaXRpb25JbmRleD4wPyJsdHIiPT1lPyJyaWdodCI6ImxlZnQiOiJjZW50ZXIifV9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKGUpe2xldCBpPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpO3JldHVybiJsdHIiPT1pJiZlPD0wfHwicnRsIj09aSYmZT4wPyJsZWZ0LW9yaWdpbi1jZW50ZXIiOiJyaWdodC1vcmlnaW4tY2VudGVyIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpciw4KSx3KG5uKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntfY29udGVudDpbImNvbnRlbnQiLCJfY29udGVudCJdLG9yaWdpbjoib3JpZ2luIixhbmltYXRpb25EdXJhdGlvbjoiYW5pbWF0aW9uRHVyYXRpb24iLHByZXNlcnZlQ29udGVudDoicHJlc2VydmVDb250ZW50Iixwb3NpdGlvbjoicG9zaXRpb24ifSxvdXRwdXRzOntfb25DZW50ZXJpbmc6Il9vbkNlbnRlcmluZyIsX2JlZm9yZUNlbnRlcmluZzoiX2JlZm9yZUNlbnRlcmluZyIsX2FmdGVyTGVhdmluZ0NlbnRlcjoiX2FmdGVyTGVhdmluZ0NlbnRlciIsX29uQ2VudGVyZWQ6Il9vbkNlbnRlcmVkIn19KSxufSkoKSxFZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJSZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KGlyLDgpLHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWJvZHkiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxIb3N0PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWJvZHkiXSxmZWF0dXJlczpbdHRdLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWyJjZGtTY3JvbGxhYmxlIiwiIiwxLCJtYXQtdGFiLWJvZHktY29udGVudCJdLFsiY29udGVudCIsIiJdLFsibWF0VGFiQm9keUhvc3QiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJAdHJhbnNsYXRlVGFiLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25UcmFuc2xhdGVUYWJTdGFydGVkKG8pfSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQobyl9KSxFKDIsZFJlLDAsMCwibmctdGVtcGxhdGUiLDIpLHYoKSksMiZlJiZiKCJAdHJhbnNsYXRlVGFiIix0bygzLGhSZSxpLl9wb3NpdGlvbixIbigxLHBSZSxpLmFuaW1hdGlvbkR1cmF0aW9uKSkpfSxkZXBlbmRlbmNpZXM6W1BSZV0sc3R5bGVzOlsnLm1hdC10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn0ubWF0LXRhYi1ib2R5LWNvbnRlbnRbc3R5bGUqPSJ2aXNpYmlsaXR5OiBoaWRkZW4iXXtkaXNwbGF5Om5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbSVJlLnRyYW5zbGF0ZVRhYl19fSksbn0pKCksVGVlPW5ldyBzZSgiTUFUX1RBQlNfQ09ORklHIiksT1JlPWdvKGNsYXNze30pLERlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT1Jle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPWV9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih6ZSgiYXJpYS1kaXNhYmxlZCIsISFpLmRpc2FibGVkKSxhdCgibWF0LXRhYi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx5ZWU9TnMoe3Bhc3NpdmU6ITB9KSxOUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl92aWV3cG9ydFJ1bGVyPXIsdGhpcy5fZGlyPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hbmltYXRpb25Nb2RlPWwsdGhpcy5fc2Nyb2xsRGlzdGFuY2U9MCx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITEsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPSEwLHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITAsdGhpcy5fc3RvcFNjcm9sbGluZz1uZXcgVGUsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD0wLHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4PW5ldyBHLHRoaXMuaW5kZXhGb2N1c2VkPW5ldyBHLHMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsaShlLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbGVhdmUiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N0b3BJbnRlcnZhbCgpfSl9KX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBzZWxlY3RlZEluZGV4KCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXh9c2V0IHNlbGVjdGVkSW5kZXgoZSl7ZT1QaShlKSx0aGlzLl9zZWxlY3RlZEluZGV4IT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITAsdGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSl9bmdBZnRlclZpZXdJbml0KCl7bGkodGhpcy5fcHJldmlvdXNQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiKX0pLGxpKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7bGV0IGU9dGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6anQoImx0ciIpLGk9dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTUwKSxyPSgpPT57dGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl9O3RoaXMuX2tleU1hbmFnZXI9bmV3IEFfKHRoaXMuX2l0ZW1zKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKS53aXRoSG9tZUFuZEVuZCgpLndpdGhXcmFwKCksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUociksdW4oZSxpLHRoaXMuX2l0ZW1zLmNoYW5nZXMsdGhpcy5faXRlbXNSZXNpemVkKCkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKSxyKCl9KX0pLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShvPT57dGhpcy5pbmRleEZvY3VzZWQuZW1pdChvKSx0aGlzLl9zZXRUYWJGb2N1cyhvKX0pfV9pdGVtc1Jlc2l6ZWQoKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/YW86dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2l0ZW1zKSx2aShlPT5uZXcgUXQoaT0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHI9bmV3IFJlc2l6ZU9ic2VydmVyKG89PmkubmV4dChvKSk7cmV0dXJuIGUuZm9yRWFjaChvPT5yLm9ic2VydmUoby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKSwoKT0+e3IuZGlzY29ubmVjdCgpfX0pKSksQ2EoMSksSGUoZT0+ZS5zb21lKGk9PmkuY29udGVudFJlY3Qud2lkdGg+MCYmaS5jb250ZW50UmVjdC5oZWlnaHQ+MCkpKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl90YWJMYWJlbENvdW50IT10aGlzLl9pdGVtcy5sZW5ndGgmJih0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl90YWJMYWJlbENvdW50PXRoaXMuX2l0ZW1zLmxlbmd0aCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQmJih0aGlzLl9zY3JvbGxUb0xhYmVsKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkJiYodGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nLmNvbXBsZXRlKCl9X2hhbmRsZUtleWRvd24oZSl7aWYoIU1yKGUpKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAzMjp0aGlzLmZvY3VzSW5kZXghPT10aGlzLnNlbGVjdGVkSW5kZXgmJih0aGlzLnNlbGVjdEZvY3VzZWRJbmRleC5lbWl0KHRoaXMuZm9jdXNJbmRleCksdGhpcy5faXRlbVNlbGVjdGVkKGUpKTticmVhaztkZWZhdWx0OnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfX1fb25Db250ZW50Q2hhbmdlcygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtlIT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PWV8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleChlKXshdGhpcy5faXNWYWxpZEluZGV4KGUpfHx0aGlzLmZvY3VzSW5kZXg9PT1lfHwhdGhpcy5fa2V5TWFuYWdlcnx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpfV9pc1ZhbGlkSW5kZXgoZSl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybiEwO2xldCBpPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXTpudWxsO3JldHVybiEhaSYmIWkuZGlzYWJsZWR9X3NldFRhYkZvY3VzKGUpe2lmKHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX3Njcm9sbFRvTGFiZWwoZSksdGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aCl7dGhpcy5faXRlbXMudG9BcnJheSgpW2VdLmZvY3VzKCk7bGV0IGk9dGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O2kuc2Nyb2xsTGVmdD0ibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/MDppLnNjcm9sbFdpZHRoLWkub2Zmc2V0V2lkdGh9fV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgZT10aGlzLnNjcm9sbERpc3RhbmNlLGk9Imx0ciI9PT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8tZTplO3RoaXMuX3RhYkxpc3QubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGkpfXB4KWAsKHRoaXMuX3BsYXRmb3JtLlRSSURFTlR8fHRoaXMuX3BsYXRmb3JtLkVER0UpJiYodGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ9MCl9Z2V0IHNjcm9sbERpc3RhbmNlKCl7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlfXNldCBzY3JvbGxEaXN0YW5jZShlKXt0aGlzLl9zY3JvbGxUbyhlKX1fc2Nyb2xsSGVhZGVyKGUpe3JldHVybiB0aGlzLl9zY3JvbGxUbyh0aGlzLl9zY3JvbGxEaXN0YW5jZSsoImJlZm9yZSI9PWU/LTE6MSkqdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLzMpfV9oYW5kbGVQYWdpbmF0b3JDbGljayhlKXt0aGlzLl9zdG9wSW50ZXJ2YWwoKSx0aGlzLl9zY3JvbGxIZWFkZXIoZSl9X3Njcm9sbFRvTGFiZWwoZSl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm47bGV0IGk9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW2VdOm51bGw7aWYoIWkpcmV0dXJuO2xldCBhLGwscj10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgse29mZnNldExlZnQ6byxvZmZzZXRXaWR0aDpzfT1pLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/KGE9byxsPWErcyk6KGw9dGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgtbyxhPWwtcyk7bGV0IGM9dGhpcy5zY3JvbGxEaXN0YW5jZSx1PXRoaXMuc2Nyb2xsRGlzdGFuY2UrcjthPGM/dGhpcy5zY3JvbGxEaXN0YW5jZS09Yy1hKzYwOmw+dSYmKHRoaXMuc2Nyb2xsRGlzdGFuY2UrPWwtdSs2MCl9X2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITE7ZWxzZXtsZXQgZT10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7ZXx8KHRoaXMuc2Nyb2xsRGlzdGFuY2U9MCksZSE9PXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ZX19X2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKXt0aGlzLmRpc2FibGVQYWdpbmF0aW9uP3RoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPSEwOih0aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPTA9PXRoaXMuc2Nyb2xsRGlzdGFuY2UsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuc2Nyb2xsRGlzdGFuY2U9PXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aC10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9X2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpe2xldCBlPXRoaXMuX2l0ZW1zJiZ0aGlzLl9pdGVtcy5sZW5ndGg/dGhpcy5faXRlbXMudG9BcnJheSgpW3RoaXMuc2VsZWN0ZWRJbmRleF06bnVsbCxpPWU/ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtpP3RoaXMuX2lua0Jhci5hbGlnblRvRWxlbWVudChpKTp0aGlzLl9pbmtCYXIuaGlkZSgpfV9zdG9wSW50ZXJ2YWwoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nLm5leHQoKX1faGFuZGxlUGFnaW5hdG9yUHJlc3MoZSxpKXtpJiZudWxsIT1pLmJ1dHRvbiYmMCE9PWkuYnV0dG9ufHwodGhpcy5fc3RvcEludGVydmFsKCkseGEoNjUwLDEwMCkucGlwZShvdCh1bih0aGlzLl9zdG9wU2Nyb2xsaW5nLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoKCk9PntsZXR7bWF4U2Nyb2xsRGlzdGFuY2U6cixkaXN0YW5jZTpvfT10aGlzLl9zY3JvbGxIZWFkZXIoZSk7KDA9PT1vfHxvPj1yKSYmdGhpcy5fc3RvcEludGVydmFsKCl9KSl9X3Njcm9sbFRvKGUpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJue21heFNjcm9sbERpc3RhbmNlOjAsZGlzdGFuY2U6MH07bGV0IGk9dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U9TWF0aC5tYXgoMCxNYXRoLm1pbihpLGUpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITAsdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHttYXhTY3JvbGxEaXN0YW5jZTppLGRpc3RhbmNlOnRoaXMuX3Njcm9sbERpc3RhbmNlfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhkYSksdyhpciw4KSx3KHB0KSx3KHVpKSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiJ9fSksbn0pKCksTFJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOUmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoZSxpLHIsbyxzLGEsbCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKGUpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QoZSl9X2l0ZW1TZWxlY3RlZChlKXtlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcobm4pLHcoZGEpLHcoaXIsOCksdyhwdCksdyh1aSksdyhMaSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTFJle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGRhKSx3KGlyLDgpLHcocHQpLHcodWkpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItaGVhZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsRGVlLDQpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2l0ZW1zPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodmVlLDcpLGx0KGZSZSw3KSxsdChtUmUsNyksbHQoZ1JlLDcpLGx0KF9SZSw1KSxsdCh2UmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lua0Jhcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdENvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdElubmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9uZXh0UGFnaW5hdG9yPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9wcmV2aW91c1BhZ2luYXRvcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1oZWFkZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsaS5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PWkuX2dldExheW91dERpcmVjdGlvbigpKX0saW5wdXRzOntzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4In0sb3V0cHV0czp7c2VsZWN0Rm9jdXNlZEluZGV4OiJzZWxlY3RGb2N1c2VkSW5kZXgiLGluZGV4Rm9jdXNlZDoiaW5kZXhGb2N1c2VkIn0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6eGVlLGRlY2xzOjE0LHZhcnM6MTAsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1sYWJlbHMiXSxbInRhYkxpc3RJbm5lciIsIiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koKSxnKDAsImJ1dHRvbiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLG8pfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLE4oMiwiZGl2IiwyKSx2KCksZygzLCJkaXYiLDMsNCksUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSxnKDUsImRpdiIsNSw2KSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Db250ZW50Q2hhbmdlcygpfSksZyg3LCJkaXYiLDcsOCksTm4oOSksdigpLE4oMTAsIm1hdC1pbmstYmFyIiksdigpKCksZygxMSwiYnV0dG9uIiw5LDEwKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYWZ0ZXIiLG8pfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYWZ0ZXIiKX0pKCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc3RvcEludGVydmFsKCl9KSxOKDEzLCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmUpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bnVsbCkseCg1KSxhdCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSx4KDYpLGF0KCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXIpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG51bGwpKX0sZGVwZW5kZW5jaWVzOltlcyxTXyx2ZWVdLHN0eWxlczpbIi5tYXQtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTt0b3VjaC1hY3Rpb246bm9uZTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctbGVmdDo0cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2hlaWdodDoycHg7dHJhbnNpdGlvbjo1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1sYWJlbHN7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC10YWItbGlzdC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1sYWJlbCAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWx7b3BhY2l0eToxfS5tYXQtdGFiLWxhYmVsOjpiZWZvcmV7bWFyZ2luOjVweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjcycHh9fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFZSZT0wLEhSZT1wcyhMcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksInByaW1hcnkiKSxVUmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhSZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl90YWJzPW5ldyBjbCx0aGlzLl9pbmRleFRvU2VsZWN0PTAsdGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1udWxsLHRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0PTAsdGhpcy5fdGFic1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9keW5hbWljSGVpZ2h0PSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9bnVsbCx0aGlzLmhlYWRlclBvc2l0aW9uPSJhYm92ZSIsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fcHJlc2VydmVDb250ZW50PSExLHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZT1uZXcgRyx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBHLHRoaXMuYW5pbWF0aW9uRG9uZT1uZXcgRyx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLl9ncm91cElkPVZSZSsrLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249ciYmci5hbmltYXRpb25EdXJhdGlvbj9yLmFuaW1hdGlvbkR1cmF0aW9uOiI1MDBtcyIsdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hKCFyfHxudWxsPT1yLmRpc2FibGVQYWdpbmF0aW9uKSYmci5kaXNhYmxlUGFnaW5hdGlvbix0aGlzLmR5bmFtaWNIZWlnaHQ9ISghcnx8bnVsbD09ci5keW5hbWljSGVpZ2h0KSYmci5keW5hbWljSGVpZ2h0LHRoaXMuY29udGVudFRhYkluZGV4PXI/LmNvbnRlbnRUYWJJbmRleD8/bnVsbCx0aGlzLnByZXNlcnZlQ29udGVudD0hIXI/LnByZXNlcnZlQ29udGVudH1nZXQgZHluYW1pY0hlaWdodCgpe3JldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0fXNldCBkeW5hbWljSGVpZ2h0KGUpe3RoaXMuX2R5bmFtaWNIZWlnaHQ9V3QoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXt0aGlzLl9pbmRleFRvU2VsZWN0PVBpKGUsbnVsbCl9Z2V0IGFuaW1hdGlvbkR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9ufXNldCBhbmltYXRpb25EdXJhdGlvbihlKXt0aGlzLl9hbmltYXRpb25EdXJhdGlvbj0vXlxkKyQvLnRlc3QoZSsiIik/ZSsibXMiOmV9Z2V0IGNvbnRlbnRUYWJJbmRleCgpe3JldHVybiB0aGlzLl9jb250ZW50VGFiSW5kZXh9c2V0IGNvbnRlbnRUYWJJbmRleChlKXt0aGlzLl9jb250ZW50VGFiSW5kZXg9UGkoZSxudWxsKX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBwcmVzZXJ2ZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcHJlc2VydmVDb250ZW50fXNldCBwcmVzZXJ2ZUNvbnRlbnQoZSl7dGhpcy5fcHJlc2VydmVDb250ZW50PVd0KGUpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2kuY2xhc3NMaXN0LnJlbW92ZShgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmNsYXNzTGlzdC5hZGQoYG1hdC1iYWNrZ3JvdW5kLSR7ZX1gKSx0aGlzLl9iYWNrZ3JvdW5kQ29sb3I9ZX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtsZXQgZT10aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX2NsYW1wVGFiSW5kZXgodGhpcy5faW5kZXhUb1NlbGVjdCk7aWYodGhpcy5fc2VsZWN0ZWRJbmRleCE9ZSl7bGV0IGk9bnVsbD09dGhpcy5fc2VsZWN0ZWRJbmRleDtpZighaSl7dGhpcy5zZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKTtsZXQgcj10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubWluSGVpZ2h0PXIuY2xpZW50SGVpZ2h0KyJweCJ9UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX3RhYnMuZm9yRWFjaCgocixvKT0+ci5pc0FjdGl2ZT1vPT09ZSksaXx8KHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KGUpLHRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSIiKX0pfXRoaXMuX3RhYnMuZm9yRWFjaCgoaSxyKT0+e2kucG9zaXRpb249ci1lLG51bGwhPXRoaXMuX3NlbGVjdGVkSW5kZXgmJjA9PWkucG9zaXRpb24mJiFpLm9yaWdpbiYmKGkub3JpZ2luPWUtdGhpcy5fc2VsZWN0ZWRJbmRleCl9KSx0aGlzLl9zZWxlY3RlZEluZGV4IT09ZSYmKHRoaXMuX3NlbGVjdGVkSW5kZXg9ZSx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpLHRoaXMuX3N1YnNjcmliZVRvVGFiTGFiZWxzKCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbj10aGlzLl90YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZihlPT09dGhpcy5fc2VsZWN0ZWRJbmRleCl7bGV0IHIsaT10aGlzLl90YWJzLnRvQXJyYXkoKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpZihpW29dLmlzQWN0aXZlKXt0aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX3NlbGVjdGVkSW5kZXg9byx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwscj1pW29dO2JyZWFrfSFyJiZpW2VdJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aVtlXS5pc0FjdGl2ZT0hMCx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpfSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCl7dGhpcy5fYWxsVGFicy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fYWxsVGFicykpLnN1YnNjcmliZShlPT57dGhpcy5fdGFicy5yZXNldChlLmZpbHRlcihpPT5pLl9jbG9zZXN0VGFiR3JvdXA9PT10aGlzfHwhaS5fY2xvc2VzdFRhYkdyb3VwKSksdGhpcy5fdGFicy5ub3RpZnlPbkNoYW5nZXMoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdGFicy5kZXN0cm95KCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cmVhbGlnbklua0Jhcigpe3RoaXMuX3RhYkhlYWRlciYmdGhpcy5fdGFiSGVhZGVyLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIudXBkYXRlUGFnaW5hdGlvbigpfWZvY3VzVGFiKGUpe2xldCBpPXRoaXMuX3RhYkhlYWRlcjtpJiYoaS5mb2N1c0luZGV4PWUpfV9mb2N1c0NoYW5nZWQoZSl7dGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1lLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLmluZGV4PWUsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihpLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVtlXSksaX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj11biguLi50aGlzLl90YWJzLm1hcChlPT5lLl9zdGF0ZUNoYW5nZXMpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fY2xhbXBUYWJJbmRleChlKXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heChlfHwwLDApKX1fZ2V0VGFiTGFiZWxJZChlKXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9nZXRUYWJDb250ZW50SWQoZSl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChlKXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtsZXQgaT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2kuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihpLnN0eWxlLmhlaWdodD1lKyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2xldCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9ZS5jbGllbnRIZWlnaHQsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKX1faGFuZGxlQ2xpY2soZSxpLHIpe2UuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVkSW5kZXg9aS5mb2N1c0luZGV4PXIpfV9nZXRUYWJJbmRleChlLGkpe3JldHVybiBlLmRpc2FibGVkP251bGw6aT09PSh0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4Pz90aGlzLnNlbGVjdGVkSW5kZXgpPzA6LTF9X3RhYkZvY3VzQ2hhbmdlZChlLGkpe2UmJiJtb3VzZSIhPT1lJiYidG91Y2giIT09ZSYmKHRoaXMuX3RhYkhlYWRlci5mb2N1c0luZGV4PWkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2R5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLHNlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgiLGhlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixjb250ZW50VGFiSW5kZXg6ImNvbnRlbnRUYWJJbmRleCIsZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIixwcmVzZXJ2ZUNvbnRlbnQ6InByZXNlcnZlQ29udGVudCIsYmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IifSxvdXRwdXRzOntzZWxlY3RlZEluZGV4Q2hhbmdlOiJzZWxlY3RlZEluZGV4Q2hhbmdlIixmb2N1c0NoYW5nZToiZm9jdXNDaGFuZ2UiLGFuaW1hdGlvbkRvbmU6ImFuaW1hdGlvbkRvbmUiLHNlbGVjdGVkVGFiQ2hhbmdlOiJzZWxlY3RlZFRhYkNoYW5nZSJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSxoST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVVJle2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsYXcsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYWxsVGFicz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHlSZSw1KSxsdChiUmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3RhYkJvZHlXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJIZWFkZXI9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItZ3JvdXAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLGkuZHluYW1pY0hlaWdodCkoIm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIiwiYmVsb3ciPT09aS5oZWFkZXJQb3NpdGlvbil9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6U2VlLHVzZUV4aXN0aW5nOm59XSksdHRdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWF0LXRhYi1sYWJlbC1hY3RpdmUiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtYXQtdGFiLWJvZHktd3JhcHBlciJdLFsidGFiQm9keVdyYXBwZXIiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJtYXQtdGFiLWJvZHktYWN0aXZlIiwibmdDbGFzcyIsImNvbnRlbnQiLCJwb3NpdGlvbiIsIm9yaWdpbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwicHJlc2VydmVDb250ZW50IiwiX29uQ2VudGVyZWQiLCJfb25DZW50ZXJpbmciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsInRhYiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiIsIm1hdC1yaXBwbGUiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwxLCJtYXQtdGFiLWxhYmVsIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywiaWQiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiXSxbMSwibWF0LXRhYi1sYWJlbC1jb250ZW50Il0sWzMsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidGFiVGV4dExhYmVsIiwiIl0sWzMsImNka1BvcnRhbE91dGxldCJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsInByZXNlcnZlQ29udGVudCIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtYXQtdGFiLWhlYWRlciIsMCwxKSxQKCJpbmRleEZvY3VzZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9mb2N1c0NoYW5nZWQobyl9KSgic2VsZWN0Rm9jdXNlZEluZGV4IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3RlZEluZGV4PW99KSxFKDIsTVJlLDUsMTUsImRpdiIsMiksdigpLGcoMywiZGl2IiwzLDQpLEUoNSxTUmUsMSwxMSwibWF0LXRhYi1ib2R5Iiw1KSx2KCkpLDImZSYmKGIoInNlbGVjdGVkSW5kZXgiLGkuc2VsZWN0ZWRJbmRleHx8MCkoImRpc2FibGVSaXBwbGUiLGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVQYWdpbmF0aW9uIixpLmRpc2FibGVQYWdpbmF0aW9uKSx4KDIpLGIoIm5nRm9yT2YiLGkuX3RhYnMpLHgoMSksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkseCgyKSxiKCJuZ0Zvck9mIixpLl90YWJzKSl9LGRlcGVuZGVuY2llczpbUG4seW4sWGUsQnMsZXMsJFosRGVlLEVlZSxCUmVdLHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCV9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWJvZHktd3JhcHBlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxmST0ocXAoTHMoZ28oY2xhc3N7fSkpKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZG4sd2MseGMsenAsUF8sZG5dfSksbn0pKCkpO2Z1bmN0aW9uIHpSZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25BY3RpdmVQbHVnaW5TZWxlY3Rpb24ocixvLmlkKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7emUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSx4KDEpLHFlKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIGpSZShuLHQpezEmbiYmKGcoMCwibWF0LXRhYiIsMyksRSgxLHpSZSwyLDIsIm5nLXRlbXBsYXRlIiw0KSx2KCkpLDImbiYmYigiZGlzYWJsZWQiLCF0LiRpbXBsaWNpdC5lbmFibGVkKX1mdW5jdGlvbiBHUmUobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDkpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx6ZSgiZGF0YS1wbHVnaW4taWQiLGUuaWQpLHgoMSkscWUoIiAiLGUudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gV1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDYpKDEsIm1hdC1sYWJlbCIpLEQoMiwiSW5hY3RpdmUiKSx2KCksZygzLCJtYXQtc2VsZWN0Iiw3KSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQocikpfSksRSg0LEdSZSwyLDMsIm1hdC1vcHRpb24iLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksYigidmFsdWUiLGUuc2VsZWN0ZWRQbHVnaW4pLHgoMSksYigibmdGb3JPZiIsZS5kaXNhYmxlZFBsdWdpbnMpfX12YXIgSWVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgR31nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiw0LCJuZ0lmIl0sWzMsImRpc2FibGVkIl0sWyJtYXQtdGFiLWxhYmVsIiwiIl0sWzEsInBsdWdpbi1uYW1lIiwzLCJjbGljayJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC10YWItZ3JvdXAiLDApLEUoMSxqUmUsMiwxLCJtYXQtdGFiIiwxKSx2KCksRSgyLFdSZSw1LDIsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoYigic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSx4KDEpLGIoIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucykseCgxKSxiKCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2hJLE1lZSxhdyxEdSx6XyxKcCx1YSx5bixYZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMDttYXJnaW4tdG9wOjVweDt3aWR0aDoxMzBweH1tYXQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYWN0aXZlLXBsdWdpbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59LnBsdWdpbi1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCAxMnB4O3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saXN0IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmt7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWwubWF0LXRhYi1sYWJlbC1hY3RpdmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGluay5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtvcGFjaXR5OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWRpc2FibGVke2Rpc3BsYXk6bm9uZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItbGlzdCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0iXX0pLG59KSgpLFBlZT1ZKHNfLG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLFlSZT1ZKFBlZSxuPT5uLmZpbHRlcih0PT4hdC5lbmFibGVkKSksUmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKSx0aGlzLnBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZShmbihQZWUpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKGZuKFlSZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX3Uoe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksUCgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5zIixXKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVygyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixXKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltJZWUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFFSZT1ZKHNfLGRzLChuLHQpPT4hKCF0fHwhblt0XSkmJm5bdF0uZGlzYWJsZV9yZWxvYWQpLE9lZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlbG9hZERpc2FibGVkJD10aGlzLnN0b3JlLnNlbGVjdChRUmUpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KGJLKS5waXBlKHNyKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxCKChbaSxyXSk9PiFyJiZpPT09RWUuTE9BRElORykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyl9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2woKSl9Z2V0UmVsb2FkVGl0bGUoZSl7cmV0dXJuIGU/YExhc3QgVXBkYXRlZDogJHtlfWA6IkxvYWRpbmcuLi4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1yZWxvYWQiXV0sZGVjbHM6Nix2YXJzOjEzLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDEsInJlbG9hZC1idXR0b24iLDMsInRpdGxlIiwiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInJlZnJlc2hfMjRweCIsMSwicmVmcmVzaC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRyaWdnZXJSZWxvYWQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImRhdGUiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLE4oNSwibWF0LWljb24iLDEpLHYoKSksMiZlJiYoYXQoImxvYWRpbmciLFcoMSw0LGkuaXNSZWxvYWRpbmckKSksYigidGl0bGUiLGkuZ2V0UmVsb2FkVGl0bGUobmYoMiw2LFcoMyw5LGkubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixXKDQsMTEsaS5yZWxvYWREaXNhYmxlZCQpKSl9LGRlcGVuZGVuY2llczpbJG4sWm4sZnQsVTBdLHN0eWxlczpbIi5yZWxvYWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlZnJlc2gtaWNvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnJlbG9hZC1idXR0b24ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9Il19KSxufSkoKSxrZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczo5LHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWF0LXRvb2xiYXIiKSgxLCJzcGFuIiwwKSxEKDIsIlRlbnNvckJvYXJkIiksdigpLE4oMywicGx1Z2luLXNlbGVjdG9yIiwxKSg0LCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiKSg1LCJhcHAtaGVhZGVyLXJlbG9hZCIpKDYsInNldHRpbmdzLWJ1dHRvbiIpLGcoNywiYSIsMiksTig4LCJtYXQtaWNvbiIsMyksdigpKCkpfSxkZXBlbmRlbmNpZXM6W0ZBLFpuLGVlZSxkZWUsX2VlLFJlZSxPZWVdLHN0eWxlczpbIm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlYWRtZVtfbmdjb250ZW50LSVDT01QJV0sIGFwcC1oZWFkZXItcmVsb2FkW19uZ2NvbnRlbnQtJUNPTVAlXSwgc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMCBhdXRvfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV17bGV0dGVyLXNwYWNpbmc6LTAuMDI1ZW07bWFyZ2luLWxlZnQ6MTBweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Il19KSxufSkoKSwkUmVfc2V0RG9jdW1lbnRUaXRsZT1mdW5jdGlvbihuKXtkb2N1bWVudC50aXRsZT1ufSxGZWU9KCgpPT57Y2xhc3MgbntuZ09uQ2hhbmdlcyhlKXtlLnRpdGxlJiYkUmVfc2V0RG9jdW1lbnRUaXRsZShlLnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUtY29tcG9uZW50Il1dLGlucHV0czp7dGl0bGU6InRpdGxlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTmVlPSJUZW5zb3JCb2FyZCIsTGVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jdXN0b21CcmFuZE5hbWU9aSx0aGlzLmdldEV4cGVyaW1lbnRJZCQ9dGhpcy5zdG9yZS5zZWxlY3QoJG8pLnBpcGUoQihyPT5yPy5bMF0pKSx0aGlzLmV4cGVyaW1lbnROYW1lJD10aGlzLmdldEV4cGVyaW1lbnRJZCQucGlwZShIZShCb29sZWFuKSxfbihyPT50aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOnJ9KSksQihyPT5yP3IubmFtZTpudWxsKSksdGhpcy50aXRsZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYkQpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuZXhwZXJpbWVudE5hbWUkKSxCKChbcixvLHNdKT0+e2xldCBhPXRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWU7cmV0dXJuIHIud2luZG93X3RpdGxlP3Iud2luZG93X3RpdGxlOm89PT1maS5FWFBFUklNRU5UJiZzP2Ake3N9IC0gJHthfWA6YX0pLFZuKHRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWUpLGRpKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KHBLLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwYWdlLXRpdGxlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJwYWdlLXRpdGxlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoInRpdGxlIixXKDEsMSxpLnRpdGxlJCkpfSxkZXBlbmRlbmNpZXM6W0ZlZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmdldFBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUoZm4oJGYpKSx0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpLnRmX3BhZ2luYXRlZF92aWV3fW5nT25Jbml0KCl7dGhpcy5nZXRQYWdlU2l6ZSQucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGRpKCkpLnN1YnNjcmliZShlPT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFZlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudmNSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXdlYmFwcCJdXSxkZWNsczo5LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiYXBwLWhlYWRlciIpLGcoMSwibWFpbiIpLE4oMiwicm91dGVyLW91dGxldCIpLHYoKSxOKDMsImFsZXJ0LXNuYWNrYmFyIikoNCwiaGFzaC1zdG9yYWdlIikoNSwicGFnZS10aXRsZSIpKDYsInNldHRpbmdzLXBvbHltZXItaW50ZXJvcCIpKDcsImRhcmstbW9kZS1zdXBwb3J0ZXIiKSg4LCJmZWF0dXJlLWZsYWctbW9kYWwtdHJpZ2dlciIpKX0sZGVwZW5kZW5jaWVzOltqJCxXJCxJSixxJCxYJCxrZWUsTGVlLEJlZV0sc3R5bGVzOlsiaHRtbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1ZjVmNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfWFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDAsMCwwLC4yNSk7ZmxleDowIDA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuMSl9bWFpbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30iXX0pLG59KSgpLEhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUTAsWDAsaGNdfSksbn0pKCksVWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx6ZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6QXAsdXNlQ2xhc3M6VlF9XX0pLG59KSgpLGplZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsemVlXX0pLG59KSgpLEdlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksV2VlPXtpZDpXVCxuYW1lOiIiLHN0YXJ0X3RpbWU6MH0scjJlPXdyKHtleHBlcmltZW50TWFwOntbV2VlLmlkXTpXZWV9fSk7ZnVuY3Rpb24gcWVlKG4sdCl7cmV0dXJuIEhmKHtkYXRhOnIyZX0pKG4sdCl9dmFyIFllZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShGRCxxZWUpXX0pLG59KSgpLFhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUmksSWxdfSksbn0pKCksUWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxYZWVdfSksbn0pKCksS2VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxySSxOJCxSaSwkcCxIXyxTaSxBdV19KSxufSkoKTtmdW5jdGlvbiBvMmUoKXtyZXR1cm4gWShSQyxuPT4oe2F1dG9SZWxvYWQ6bn0pKX1mdW5jdGlvbiBzMmUoKXtyZXR1cm4gWShPQyxuPT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOm59KSl9ZnVuY3Rpb24gYTJlKCl7cmV0dXJuIFkoJGYsbj0+KHtwYWdlU2l6ZTpufSkpfXZhciBtST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShmQSxuZWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcobzJlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKHMyZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhhMmUpLEtlZV19KSxufSkoKSxaZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JpLFNpLGZJLHRlZSxJbCxlaCxrZSxNbCxtSV19KSxufSkoKSxKZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe2xldCByPWUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCIuL2ljb25fYnVuZGxlLnN2ZyIpO2kuYWRkU3ZnSWNvblNldChyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSZiksUihYXykpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltTaV19KSxufSkoKSxUNT1uZXcgc2UoIltwbHVnaW5zXSBQbHVnaW4gcmVnaXN0cnkgY29uZmlnIiksJGVlPW5ldyBNYXAsUnU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZighZSlyZXR1cm47bGV0IGk9bmV3IFNldChlLm1hcChyPT5yLnBsdWdpbk5hbWUpKTtjb25zb2xlLmFzc2VydChpLnNpemU9PT1lLmxlbmd0aCwiQ2Fubm90IHJlZ2lzdGVyIHRoZSBzYW1lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcy4iKTtmb3IobGV0IHIgb2YgZSl7bGV0e3BsdWdpbk5hbWU6byxjb21wb25lbnRDbGFzczpzfT1yOyRlZS5zZXQobyxzKX19c3RhdGljIGZvclBsdWdpbihlLGkpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VDUsbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6ZSxjb21wb25lbnRDbGFzczppfX1dfX1nZXRDb21wb25lbnQoZSl7cmV0dXJuICRlZS5nZXQoZSl8fG51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVDUsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxnST0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL2RlYnVnZ2VyLXYyIn1mZXRjaFJ1bnMoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvcnVucyIpfWZldGNoRXhlY3V0aW9uRGlnZXN0cyhlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEV4ZWN1dGlvbkRhdGEoZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoZSxpLHIsbyl7aWYodm9pZCAwIT09byl0aHJvdyBuZXcgRXJyb3IoInRyYWNlX2lkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoKSB5ZXQiKTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhfZXhlY3V0aW9uL2RpZ2VzdHMiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EYXRhKGUsaSxyLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EYXRhKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kYXRhIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoT3BJbmZvKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhzL29wX2luZm8iLHtwYXJhbXM6e3J1bjplLGdyYXBoX2lkOmksb3BfbmFtZTpyfX0pfWZldGNoU291cmNlRmlsZUxpc3QoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9saXN0Iix7cGFyYW1zOntydW46ZX19KX1mZXRjaFNvdXJjZUZpbGUoZSxpKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc291cmNlX2ZpbGVzL2ZpbGUiLHtwYXJhbXM6e3J1bjplLGluZGV4OlN0cmluZyhpKX19KX1mZXRjaFN0YWNrRnJhbWVzKGUsaSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3N0YWNrX2ZyYW1lcy9zdGFja19mcmFtZXMiLHtwYXJhbXM6e3J1bjplLHN0YWNrX2ZyYW1lX2lkczppLmpvaW4oIiwiKX19KS5waXBlKEIocj0+KHtzdGFja19mcmFtZXM6ci5zdGFja19mcmFtZXMubWFwKG89PmZ1bmN0aW9uKG4pe3JldHVybntob3N0X25hbWU6blswXSxmaWxlX3BhdGg6blsxXSxsaW5lbm86blsyXSxmdW5jdGlvbl9uYW1lOm5bM119fShvKSl9KSkpfWZldGNoQWxlcnRzKGUsaSxyLG8pe2xldCBzPXtydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX07cmV0dXJuIHZvaWQgMCE9PW8mJihzLmFsZXJ0X3R5cGU9byksdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvYWxlcnRzIix7cGFyYW1zOnN9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGV0ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltnSV0saW1wb3J0czpbaV9dfSksbn0pKCksX0k9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIiksdkk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxsdz13ZSgiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIikseUk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSxiST13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHR0ZT13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIFJlcXVlc3QgRmFpbGVkIiksY3c9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIFJlcXVlc3RlZCIpLHhJPXdlKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDST13ZSgiW0RlYnVnZ2VyXSBBbGVydHMgRGF0YSBvZiBhbiBBbGVydFR5cGUgSXMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS189d2UoIltEZWJ1Z2dlcl0gQWxlcnQgVHlwZSBGb2N1cyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksd0k9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLE1JPXdlKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxTST13ZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWl89d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIExlZnR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxKXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgUmlnaHR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSwkXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGV2PXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgQmVpbmcgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksREk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksQUk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUEk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdHY9d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBMaXN0IHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbnY9d2UoIltEZWJ1Z2dlcl0gR3JhcGggRXhlY3V0aW9uIGlzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxpdj13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUkk9d2UoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPST13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgUmVxdWVzdGVkLiIpLEZJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscnY9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGluZSBJcyBGb2N1c2VkIG9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdXc9d2UoIltEZWJ1Z2dlcl0gQSBTZXQgb2YgU3RhY2sgRnJhbWVzIEhhdmUgQmVlbiBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdz0iZGVidWdnZXIiLHpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLG5bbi5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsbltuLkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsbltuLkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsbltuLkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsbltuLlNIQVBFPTVdPSJTSEFQRSIsbltuLkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLG5bbi5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLG5bbi5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifSh6b3x8KHpvPXt9KSksem8pKSgpLE91PSgoKT0+KGZ1bmN0aW9uKG4pe24uRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUPSJGdW5jdGlvblJlY29tcGlsZXNBbGVydCIsbi5JTkZfTkFOX0FMRVJUPSJJbmZOYW5BbGVydCIsbi5URU5TT1JfU0hBUEVfQUxFUlQ9IlRlbnNvclNoYXBlQWxlcnQifShPdXx8KE91PXt9KSksT3UpKSgpLHRzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWEVDVVRJT049MF09IkVYRUNVVElPTiIsbltuLkdSQVBIX09QX0NSRUFUSU9OPTFdPSJHUkFQSF9PUF9DUkVBVElPTiJ9KHRzfHwodHM9e30pKSx0cykpKCk7ZnVuY3Rpb24gb3Yobil7aWYobnVsbD09PW4uY29kZUxvY2F0aW9uRm9jdXNUeXBlKXJldHVybiBudWxsO2xldCB0PVtdO2lmKG4uY29kZUxvY2F0aW9uRm9jdXNUeXBlPT09dHMuRVhFQ1VUSU9OKXtsZXR7Zm9jdXNJbmRleDppLGV4ZWN1dGlvbkRhdGE6cn09bi5leGVjdXRpb25zO2lmKG51bGw9PT1pfHx2b2lkIDA9PT1yW2ldKXJldHVybiBudWxsO3Q9cltpXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09bi5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2xldHtncmFwaElkOmksb3BOYW1lOnJ9PW4uZ3JhcGhzLmZvY3VzZWRPcDtpZih2b2lkIDA9PT1uLmdyYXBocy5vcHNbaV18fCFuLmdyYXBocy5vcHNbaV0uaGFzKHIpKXJldHVybiBudWxsO3Q9bi5ncmFwaHMub3BzW2ldLmdldChyKS5zdGFja19mcmFtZV9pZHN9bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2lmKG51bGw9PW4uc3RhY2tGcmFtZXNbaV0pcmV0dXJuIG51bGw7ZS5wdXNoKG4uc3RhY2tGcmFtZXNbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHB3KG4sdCl7cmV0dXJuIG4uZmluZEluZGV4KGU9PmUuaG9zdF9uYW1lPT09dC5ob3N0X25hbWUmJmUuZmlsZV9wYXRoPT09dC5maWxlX3BhdGgpfWZ1bmN0aW9uIEE1KG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybiBuLmZpbmRJbmRleChpPT5pLmJlZ2luPT09dCYmaS5lbmQ9PT1lKX1mdW5jdGlvbiBCSShuKXtsZXQgdD1uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gdDtsZXQgZT1vdihuKTtpZihudWxsPT09ZSlyZXR1cm4gdDtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2ZvcihsZXQgZT1uLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgaT1uW2VdLHtob3N0X25hbWU6cixmaWxlX3BhdGg6b309aTtpZihyPT09dC5ob3N0X25hbWUmJm89PT10LmZpbGVfcGF0aClyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSx0KTtyZXR1cm4gbnVsbD09PWk/dDppfXZhciB5MmU9d3Ioe3J1bnM6e30scnVuc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYWN0aXZlUnVuSWQ6bnVsbCxsYXN0RGF0YVBvbGxPbnNldFRpbWVNczotMSxsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczoxLGFsZXJ0czp7YWxlcnRzTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxudW1BbGVydHM6MCxhbGVydHNCcmVha2Rvd246e30sYWxlcnRzOnt9LGV4ZWN1dGlvbkluZGljZXM6e30sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnt9LGZvY3VzVHlwZTpudWxsfSxleGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDo1MCxwYWdlU2l6ZToxMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxleGVjdXRpb25EaWdlc3RzOnt9LGV4ZWN1dGlvbkRhdGE6e319LGdyYXBoRXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhzOntvcHM6e30sbG9hZGluZ09wczp7fSxmb2N1c2VkT3A6bnVsbH0sc3RhY2tGcmFtZXM6e30sY29kZUxvY2F0aW9uRm9jdXNUeXBlOm51bGwsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6ITEsc291cmNlQ29kZTp7c291cmNlRmlsZUxpc3RMb2FkZWQ6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHNvdXJjZUZpbGVMaXN0OltdLGZpbGVDb250ZW50czpbXSxmb2N1c0xpbmVTcGVjOm51bGx9fSxTZSh5SSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHR0ZSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoYkksKG4se3J1bnM6dH0pPT57bGV0IGU9T2JqZWN0LmtleXModCksaT1lLmxlbmd0aD4wJiZudWxsPT09bi5hY3RpdmVSdW5JZDtyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczppP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxydW5zOnQscnVuc0xvYWRlZDp7c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxhY3RpdmVSdW5JZDplLmxlbmd0aD4wP2VbMF06bnVsbH19KSxTZShsdyxuPT4oey4uLm4sbGFzdERhdGFQb2xsT25zZXRUaW1lTXM6RGF0ZS5ub3coKX0pKSxTZShjdyxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoeEksKG4se251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgcj10Pm4uYWxlcnRzLm51bUFsZXJ0cztyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczpyP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sbnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmV9fX0pLFNlKENJLChuLHtudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZSxhbGVydFR5cGU6aSxiZWdpbjpyLGFsZXJ0czpvfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgYT17fSxsPW4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV0/bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdLGM9bi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW2ldP24uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdO2ZvcihsZXQgcD0wO3A8by5sZW5ndGg7KytwKXtsZXQgaD1yK3AsZj1vW3BdO2lmKGFbaF09ZixmLmFsZXJ0X3R5cGU9PT1PdS5JTkZfTkFOX0FMRVJUKXtsZXQgbT1mO2xbaF09bS5leGVjdXRpb25faW5kZXgsbnVsbCE9PW0uZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4JiYoY1toXT1tLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCl9fXZvaWQgMCE9PW4uYWxlcnRzLmFsZXJ0c1tpXSYmT2JqZWN0LmFzc2lnbihhLG4uYWxlcnRzLmFsZXJ0c1tpXSk7bGV0IHU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZD1uLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4O2lmKGk9PT1PdS5JTkZfTkFOX0FMRVJUJiYwPT09cil7bGV0IHA9b1swXTt1PU1hdGgubWF4KDAscC5leGVjdXRpb25faW5kZXgtTWF0aC5mbG9vcihuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKSxudWxsIT09cC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihkPXAuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX1yZXR1cm57Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp1fSxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGZvY3VzSW5kZXg6ZH0sYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LG51bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0czp7Li4ubi5hbGVydHMuYWxlcnRzLFtpXTphfSxleGVjdXRpb25JbmRpY2VzOnsuLi5uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzLFtpXTpsfSxncmFwaEV4ZWN1dGlvbkluZGljZXM6ey4uLm4uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyxbaV06Y319fX0pLFNlKEtfLChuLHthbGVydFR5cGU6dH0pPT57bGV0IGU9ey4uLm4sYWxlcnRzOnsuLi5uLmFsZXJ0cyxmb2N1c1R5cGU6bi5hbGVydHMuZm9jdXNUeXBlPT09dD9udWxsOnR9fSxpPWUuYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsIT09aSl7bGV0IHI9ZS5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXXx8W107dm9pZCAwIT09clswXSYmKGUuZXhlY3V0aW9ucz17Li4uZS5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6TWF0aC5tYXgoMCxOdW1iZXIoclswXSktTWF0aC5mbG9vcihlLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKX0pfXJldHVybiBlfSksU2Uod0ksbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoTUksKG4se251bUV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9dD5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zLHI9ey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6aT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0fX19O3JldHVybiB0PjAmJm51bGw9PT1uLmV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKHIuZXhlY3V0aW9ucy5mb2N1c0luZGV4PTApLHJ9KSxTZShTSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPVsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5sb2FkaW5nUmFuZ2VzXTtyZXR1cm4tMT09PUE1KGksdC5iZWdpbix0LmVuZCkmJmkucHVzaCh7YmVnaW46dC5iZWdpbixlbmQ6dC5lbmR9KSx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbG9hZGluZ1JhbmdlczppfX19fSksU2UoRUksKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT1bLi4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc10scj1BNShpLHQuYmVnaW4sdC5lbmQpOy0xIT09ciYmaS5zcGxpY2UociwxKTtsZXQgbz17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0Lm51bV9kaWdlc3RzLGxvYWRpbmdSYW5nZXM6aX0sZXhlY3V0aW9uRGlnZXN0czp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHN9fX07Zm9yKGxldCBzPXQuYmVnaW47czx0LmVuZDsrK3Mpby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNbc109dC5leGVjdXRpb25fZGlnZXN0c1tzLXQuYmVnaW5dO3JldHVybiB0LmVuZD50LmJlZ2luJiYoby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzPXsuLi5vLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXMsW3QuYmVnaW4vbi5leGVjdXRpb25zLnBhZ2VTaXplXTp0LmVuZC10LmJlZ2lufSksb30pLFNlKFpfLG49PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleDtyZXR1cm4gZT4wJiZlLS0sey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZX19fSksU2UoSl8sbj0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlK24uZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQrMTw9bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyYmZSsrLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmV9fX0pLFNlKCRfLChuLHQpPT57aWYodC5pbmRleDwwfHwhTnVtYmVyLmlzSW50ZWdlcih0LmluZGV4KSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIG5lZ2F0aXZlIG9yIG5vbi1pbnRlZ2VyIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSlgKTtsZXR7ZGlzcGxheUNvdW50OmV9PW4uZXhlY3V0aW9ucyx7bnVtRXhlY3V0aW9uczppfT1uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDtpZih0LmluZGV4Pk1hdGgubWF4KDAsaS1lKSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSksIHdoaWNoIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGluZGV4IChudW1FeGVjdXRpb25zPSR7aX07IGRpc3BsYXlDb3VudD0ke2V9KWApO3JldHVybnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OnQuaW5kZXh9fX0pLFNlKGV2LChuLHQpPT57bGV0IGU9ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGZvY3VzSW5kZXg6bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrdC5kaXNwbGF5SW5kZXh9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5FWEVDVVRJT04sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIGUuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUJJKGUpLGV9KSxTZShUSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EYXRhOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YX19fTtmb3IobGV0IHI9dC5iZWdpbjtyPHQuZW5kOysrcilpLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YVtyXT10LmV4ZWN1dGlvbnNbci10LmJlZ2luXTtyZXR1cm4gaX0pLFNlKERJLG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fX0pLFNlKEFJLChuLHtudW1HcmFwaEV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9dD5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMsaT17Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczplP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dH19fTtyZXR1cm4gdD4wJiZudWxsPT09bi5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKGkuZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg9MCksaX0pLFNlKElJLChuLHtwYWdlSW5kZXg6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCk7cmV0dXJuLTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KSx7Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczplfX19KSxTZShQSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldHtwYWdlU2l6ZTplfT1uLmdyYXBoRXhlY3V0aW9ucyxpPW4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpLHI9ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplc30sbz17Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhfTtmb3IobGV0IHM9dC5iZWdpbjtzPHQuZW5kOysrcyl7bGV0IGE9TWF0aC5mbG9vcihzL2UpOy0xIT09aS5pbmRleE9mKGEpJiZpLnNwbGljZShpLmluZGV4T2YoYSksMSksdm9pZCAwPT09clthXSYmKHJbYV09MCksdm9pZCAwPT09b1tzXSYmclthXSsrLG9bc109dC5ncmFwaF9leGVjdXRpb25zW3MtdC5iZWdpbl19cmV0dXJuey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6aSxncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXM6cixncmFwaEV4ZWN1dGlvbkRhdGE6b319fSksU2UodHYsKG4sdCk9PntpZih0LmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZ3JhcGgtZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KWApO3JldHVybnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp0LmluZGV4fX19KSxTZShudiwobix0KT0+cnRlKG4sdC5ncmFwaF9pZCx0Lm9wX25hbWUsdC5pbmRleCkpLFNlKGl2LChuLHQpPT5ydGUobix0LmdyYXBoX2lkLHQub3BfbmFtZSkpLFNlKFJJLChuLHQpPT57bGV0e2dyYXBoX2lkOmUsb3BfbmFtZTppfT10LHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzfX19O3JldHVybiB2b2lkIDA9PT1yLmdyYXBocy5sb2FkaW5nT3BzW2VdJiYoci5ncmFwaHMubG9hZGluZ09wc1tlXT1uZXcgTWFwKSxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLmhhcyhpKXx8ci5ncmFwaHMubG9hZGluZ09wc1tlXS5zZXQoaSxFZS5MT0FESU5HKSxyfSksU2UoT0ksKG4sdCk9PntsZXR7Z3JhcGhPcEluZm9SZXNwb25zZTplfT10LHtncmFwaF9pZHM6aX09ZSxyPWlbaS5sZW5ndGgtMV0sbz17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLG9wczp7Li4ubi5ncmFwaHMub3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLm9wc1tyXSl9LGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMubG9hZGluZ09wc1tyXSl9fX07Zm9yKGxldCBzIG9mIGUuaW5wdXRzKSFzLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQocy5vcF9uYW1lLHMuZGF0YSk7Zm9yKGxldCBzPTA7czxlLmNvbnN1bWVycy5sZW5ndGg7KytzKWZvcihsZXQgYSBvZiBlLmNvbnN1bWVyc1tzXSkhYS5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KGEub3BfbmFtZSxhLmRhdGEpO3JldHVybiBvLmdyYXBocy5vcHNbcl0uc2V0KGUub3BfbmFtZSx7Li4uZSxpbnB1dHM6ZS5pbnB1dHMubWFwKHM9Pih7b3BfbmFtZTpzLm9wX25hbWUsb3V0cHV0X3Nsb3Q6cy5vdXRwdXRfc2xvdH0pKSxjb25zdW1lcnM6ZS5jb25zdW1lcnMubWFwKHM9PnMubWFwKGE9Pih7b3BfbmFtZTphLm9wX25hbWUsaW5wdXRfc2xvdDphLmlucHV0X3Nsb3R9KSkpfSksby5ncmFwaHMubG9hZGluZ09wc1tyXS5zZXQoZS5vcF9uYW1lLEVlLkxPQURFRCksb30pLFNlKGtJLG49Pih7Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FESU5HfX19KSksU2UoRkksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHNvdXJjZUZpbGVMaXN0OnQuc291cmNlRmlsZXMsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dC5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czpyfT1lLnNvdXJjZUNvZGU7Zm9yKGxldCBvPTA7bzxpOysrbylyW29dPW4uc291cmNlQ29kZS5maWxlQ29udGVudHNbb10/P3tsb2FkU3RhdGU6RWUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gZX0pLFNlKHJ2LChuLHQpPT57bGV0IGU9b3YobiksaT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZm9jdXNMaW5lU3BlYzp0LnN0YWNrRnJhbWV9fTtyZXR1cm4gbnVsbCE9PWUmJihpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9LTEsaT0tMTtpZihuLmZvckVhY2goKHtmaWxlX3BhdGg6cixsaW5lbm86b30scyk9PntyPT09dC5maWxlX3BhdGgmJihpPXMsbz09PXQubGluZW5vJiYoZT1zKSl9KSwtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KHQpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIGU9PT1pfShlLHQuc3RhY2tGcmFtZSkpLGl9KSxTZShOSSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT1wdyhlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEsey4uLmUuc291cmNlQ29kZS5maWxlQ29udGVudHNbaV0sbG9hZFN0YXRlOkVlLkxPQURJTkd9KSxlfSksU2UoTEksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9cHcoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHtsb2FkU3RhdGU6RWUuTE9BREVELGxpbmVzOnQubGluZXN9KSxlfSksU2UodXcsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixzdGFja0ZyYW1lczp7Li4ubi5zdGFja0ZyYW1lcywuLi50LnN0YWNrRnJhbWVzfSxzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9QkkoaSksaX0pKTtmdW5jdGlvbiBydGUobix0LGUsaSl7bGV0IHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxmb2N1c2VkT3A6e2dyYXBoSWQ6dCxvcE5hbWU6ZX19LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5HUkFQSF9PUF9DUkVBVElPTixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gci5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Qkkociksdm9pZCAwIT09aSYmKHIuZ3JhcGhFeGVjdXRpb25zPXsuLi5uLmdyYXBoRXhlY3V0aW9ucyxmb2N1c0luZGV4Oml9KSxyfWZ1bmN0aW9uIG90ZShuLHQpe3JldHVybiB5MmUobix0KX12YXIgam89UHIoZHcpLGZtPVkoam8sbj0+bi5ydW5zKSxJNT1ZKGpvLG49Pm4ucnVuc0xvYWRlZCksbXM9WShqbyxuPT5uLmFjdGl2ZVJ1bklkKSxzdGU9WShqbyxuPT5uLmxhc3REYXRhUG9sbE9uc2V0VGltZU1zLW4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMpLHN2PVkoam8sbj0+bi5hbGVydHMpLFA1PVkoc3Ysbj0+bi5hbGVydHNMb2FkZWQpLGF0ZT1ZKHN2LG49Pm4ubnVtQWxlcnRzKSxWST1ZKHN2LG49Pm4uZm9jdXNUeXBlKSxsdGU9WShzdixuPT5udWxsPT09bi5mb2N1c1R5cGU/MDpuLmFsZXJ0c0JyZWFrZG93bltuLmZvY3VzVHlwZV18fDApLGN0ZT1ZKHN2LG49Pm51bGw9PT1uLmZvY3VzVHlwZXx8dm9pZCAwPT09bi5hbGVydHNbbi5mb2N1c1R5cGVdP251bGw6bi5hbGVydHNbbi5mb2N1c1R5cGVdKSx1dGU9WShzdixuPT5uLmFsZXJ0c0JyZWFrZG93biksbW09WShqbyxuPT5uLmV4ZWN1dGlvbnMpLEhJPVkobW0sbj0+bi5udW1FeGVjdXRpb25zTG9hZGVkKSxodz1ZKG1tLG49Pm4uZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCksdGg9WShtbSxuPT5uLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyksZnc9WShtbSxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGF2PVkobW0sbj0+bi5wYWdlU2l6ZSksbHY9WShtbSxuPT5uLmRpc3BsYXlDb3VudCksZHRlPVkobW0sbj0+e2xldCB0PVtdO2ZvcihsZXQgZT1uLnNjcm9sbEJlZ2luSW5kZXg7ZTxuLnNjcm9sbEJlZ2luSW5kZXgrbi5kaXNwbGF5Q291bnQ7KytlKXQucHVzaChlIGluIG4uZXhlY3V0aW9uRGlnZXN0cz9uLmV4ZWN1dGlvbkRpZ2VzdHNbZV06bnVsbCk7cmV0dXJuIHR9KSxuaD1ZKGpvLG49Pm4uZ3JhcGhFeGVjdXRpb25zKSxwdGU9WShuaCxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLG13PVkoam8sbj0+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxodGU9WShuaCxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGZ0ZT1ZKG5oLG49Pm4uZGlzcGxheUNvdW50KSxtdGU9WShuaCxuPT5uLnBhZ2VTaXplKSxndGU9WShuaCxuPT5uLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcyksX3RlPVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXMpLFI1PVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGEpLE81PVkobmgsbj0+bi5mb2N1c0luZGV4KSxrNT1ZKGpvLG49Pm4uZ3JhcGhzKSxGNT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF0/bnVsbDplW3QuZ3JhcGhJZF0uZ2V0KHQub3BOYW1lKXx8bnVsbH0pLE41PVkoazUsbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7aW5wdXRzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+e2xldCBzPXsuLi5vfTtyZXR1cm4gaS5oYXMoby5vcF9uYW1lKSYmKHMuZGF0YT1pLmdldChvLm9wX25hbWUpKSxzfSl9fSksdnRlPVkoTzUsUjUsTjUsKG4sdCxlKT0+e2lmKG51bGw9PT1ufHxudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgaT1lLm1hcChhPT4hMSkscj1bXTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHI7bGV0IG89dFtuXS5ncmFwaF9pZCxzPU1hdGgubWF4KDAsbi0yMDApO2ZvcihsZXQgYT1uLTE7YT49czstLWEpaWYodm9pZCAwIT09dFthXSlmb3IobGV0IGw9MDtsPGUubGVuZ3RoJiYoaVtsXXx8dFthXS5ncmFwaF9pZCE9PW98fHRbYV0ub3BfbmFtZSE9PWVbbF0ub3BfbmFtZXx8dFthXS5vdXRwdXRfc2xvdCE9PWVbbF0ub3V0cHV0X3Nsb3R8fChyLnB1c2goYSksaVtsXT0hMCxyLmxlbmd0aCE9PWUubGVuZ3RoKSk7KytsKTtyZXR1cm4gcn0pLHl0ZT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2NvbnN1bWVyczpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89Pm8ubWFwKHM9PntsZXQgYT17Li4uc307cmV0dXJuIGkuaGFzKHMub3BfbmFtZSkmJihhLmRhdGE9aS5nZXQocy5vcF9uYW1lKSksYX0pKX19KSxidGU9WShqbyxuPT57bGV0IHQ9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCtuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LGk9bmV3IEFycmF5KGUtdCkuZmlsbChudWxsKSxyPW4uYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09cilyZXR1cm4gaTtsZXQgbz1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW3JdO2lmKHZvaWQgMD09PW8pcmV0dXJuIGk7Zm9yKGxldCBzPXQ7czxlOysrcylvLmluY2x1ZGVzKHMpJiYoaVtzLXRdPW4uYWxlcnRzLmZvY3VzVHlwZSk7cmV0dXJuIGl9KSxVST1ZKGpvLG49Pm4uZXhlY3V0aW9ucyksTDU9WShVSSxuPT5uLmZvY3VzSW5kZXgpLHh0ZT1ZKFVJLG49PntpZihudWxsPT09bi5mb2N1c0luZGV4KXJldHVybiBudWxsO2xldHtmb2N1c0luZGV4OnQsc2Nyb2xsQmVnaW5JbmRleDplLGRpc3BsYXlDb3VudDppfT1uO3JldHVybiB0PGV8fHQ+PWUraT9udWxsOnQtZX0pLEI1PVkoVUksbj0+bi5leGVjdXRpb25EYXRhKSxDdGU9WShqbyxuPT5uLmdyYXBocy5sb2FkaW5nT3BzKSxWNT1ZKGpvLG49Pm4uc3RhY2tGcmFtZXMpLGdtPVkoVUksbj0+e2xldHtmb2N1c0luZGV4OnQsZXhlY3V0aW9uRGF0YTplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0XT9udWxsOmVbdF19KSxndz1ZKGpvLEw1LGdtLEY1LChuLHQsZSxpKT0+e2xldHtjb2RlTG9jYXRpb25Gb2N1c1R5cGU6cn09bjtyZXR1cm4gbnVsbD09PXI/bnVsbDpyPT09dHMuRVhFQ1VUSU9OP251bGw9PT10fHxudWxsPT09ZT9udWxsOntjb2RlTG9jYXRpb25UeXBlOnRzLkVYRUNVVElPTixvcFR5cGU6ZS5vcF90eXBlLGV4ZWN1dGlvbkluZGV4OnR9Om51bGw9PT1pP251bGw6e2NvZGVMb2NhdGlvblR5cGU6dHMuR1JBUEhfT1BfQ1JFQVRJT04sb3BUeXBlOmkub3BfdHlwZSxvcE5hbWU6aS5vcF9uYW1lfX0pLHd0ZT1ZKGpvLG92KSx6ST1ZKGpvLG49Pm4uc291cmNlQ29kZSksTXRlPVkoekksbj0+bi5zb3VyY2VGaWxlTGlzdExvYWRlZCksSDU9KFkoekksbj0+bi5zb3VyY2VGaWxlTGlzdCksWSh6SSxuPT57bGV0e3NvdXJjZUZpbGVMaXN0OnQsZm9jdXNMaW5lU3BlYzplfT1uO3JldHVybiBudWxsPT09ZT8tMTpwdyh0LGUpfSkpLGpJPVkoekksSDUsKG4sdCk9Pi0xPT09dD9udWxsOm4uZmlsZUNvbnRlbnRzW3RdfHxudWxsKSxHST1ZKGpvLG49Pm4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjKSxTdGU9WShqbyxuPT5uLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlKSxFdGU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiB4MmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLm9uVG9nZ2xlRm9jdXNUeXBlLmVtaXQoby50eXBlKSl9KSxnKDEsImRpdiIsOCksRCgyKSx2KCksZygzLCJkaXYiLDkpLEQoNCksdigpLE4oNSwiZGl2IiksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7YigibmdDbGFzcyIsSG4oNCxFdGUsZS50eXBlPT09aS5mb2N1c1R5cGU/ImZvY3VzIjoiIikpLHgoMikseXQoZS5kaXNwbGF5TmFtZSkseCgyKSxhcCgiICIsZS5kaXNwbGF5U3ltYm9sLCI6ICIsZS5jb3VudCwiICIpfX12YXIgVHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnRzLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFsZXJ0czoibnVtQWxlcnRzIixhbGVydHNCcmVha2Rvd246ImFsZXJ0c0JyZWFrZG93biIsZm9jdXNUeXBlOiJmb2N1c1R5cGUifSxvdXRwdXRzOntvblRvZ2dsZUZvY3VzVHlwZToib25Ub2dnbGVGb2N1c1R5cGUifSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMSwiYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJkZWJ1Z2dpbmctdGl0bGUiXSxbMSwibnVtLWFsZXJ0cy1jb250YWluZXIiXSxbMSwibnVtLWFsZXJ0cy1sYWJlbCJdLFsxLCJudW0tYWxlcnRzLXZhbHVlIiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyIl0sWyJjbGFzcyIsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYWxlcnQtdHlwZS1uYW1lIl0sWzEsImFsZXJ0LXR5cGUtY291bnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxEKDIsIkRlYnVnZ2luZyIpLHYoKSxnKDMsImRpdiIsMikoNCwiZGl2IiwzKSxEKDUsIkFsZXJ0cyIpLHYoKSxnKDYsImRpdiIsNCksRCg3KSx2KCkoKSxnKDgsImRpdiIsNSksRSg5LHgyZSw2LDYsImRpdiIsNiksdigpKCkpLDImZSYmKHgoNiksYigibmdDbGFzcyIsSG4oMyxFdGUsaS5udW1BbGVydHM+MD8ibm9uLXplcm8iOiIiKSkseCgxKSxxZSgiICIsaS5udW1BbGVydHMsIiAiKSx4KDIpLGIoIm5nRm9yT2YiLGkuYWxlcnRzQnJlYWtkb3duKSl9LGRlcGVuZGVuY2llczpbUG4seW5dLHN0eWxlczpbIi5hbGVydHMtYnJlYWtkb3duLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMCAxMHB4IDEwcHggMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiA2cHggMCA2cHggNTBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZS5mb2N1c1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWUwO1xufVxuXG4uYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90bycsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG59XG5cbi5hbGVydC10eXBlLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0LXR5cGUtbmFtZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRlYnVnZ2luZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDE4cHg7XG59XG5cbi5udW0tYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHggMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubnVtLWFsZXJ0cy1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAyNHB4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZS5ub24temVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiNzgwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn0iXX0pLG59KSgpLHcyZT17W091LkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJGdW5jdGlvbiByZWNvbXBpbGVzIixkaXNwbGF5U3ltYm9sOiJDIn0sW091LklORl9OQU5fQUxFUlRdOntkaXNwbGF5TmFtZToiTmFOL1x1MjIxZSIsZGlzcGxheVN5bWJvbDoiXHUyMjFlIn0sW091LlRFTlNPUl9TSEFQRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJUZW5zb3Igc2hhcGUiLGRpc3BsYXlTeW1ib2w6Ilx1MjVhMCJ9fSxEdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZShmbihhdGUpKSx0aGlzLmFsZXJ0c0JyZWFrZG93biQ9dGhpcy5zdG9yZS5waXBlKGZuKFkodXRlLGk9PntsZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gci5zb3J0KCksci5tYXAobz0+KHt0eXBlOm8sLi4udzJlW29dLGNvdW50Omlbb119KSl9KSkpLHRoaXMuZm9jdXNUeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oVkkpKX1vblRvZ2dsZUZvY3VzVHlwZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEtfKHthbGVydFR5cGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJudW1BbGVydHMiLCJhbGVydHNCcmVha2Rvd24iLCJmb2N1c1R5cGUiLCJvblRvZ2dsZUZvY3VzVHlwZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYWxlcnRzLWNvbXBvbmVudCIsMCksUCgib25Ub2dnbGVGb2N1c1R5cGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVG9nZ2xlRm9jdXNUeXBlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUFsZXJ0cyIsVygxLDMsaS5udW1BbGVydHMkKSkoImFsZXJ0c0JyZWFrZG93biIsVygyLDUsaS5hbGVydHNCcmVha2Rvd24kKSkoImZvY3VzVHlwZSIsVygzLDcsaS5mb2N1c1R5cGUkKSl9LGRlcGVuZGVuY2llczpbVHRlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxfdz17MTk6ImZsb2F0MTYiLDE6ImZsb2F0MzIiLDI6ImZsb2F0NjQiLDM6ImludDMyIiw0OiJ1aW50OCIsMTc6InVpbnQxNiIsMjI6InVpbnQzMiIsMjM6InVpbnQ2NCIsNToiaW50MTYiLDY6ImludDgiLDc6InN0cmluZyIsODoiY29tcGxleDY0IiwxODoiY29tcGxleDEyOCIsOToiaW50NjQiLDEwOiJib29sIiwxMToicWludDgiLDEyOiJxdWludDgiLDE1OiJxaW50MTYiLDE2OiJxdWludDE2IiwxMzoicWludDMyIiwxNDoiYmZsb2F0MTYiLDIwOiJyZXNvdXJjZSIsMjE6InZhcmlhbnQiLDExOToiZmxvYXQxNl9yZWYiLDEwMToiZmxvYXQzMl9yZWYiLDEwMjoiZmxvYXQ2NF9yZWYiLDEwMzoiaW50MzJfcmVmIiwxMjI6InVpbnQzMl9yZWYiLDEwNDoidWludDhfcmVmIiwxMTc6InVpbnQxNl9yZWYiLDEwNToiaW50MTZfcmVmIiwxMDY6ImludDhfcmVmIiwxMDc6InN0cmluZ19yZWYiLDEwODoiY29tcGxleDY0X3JlZiIsMTE4OiJjb21wbGV4MTI4X3JlZiIsMTA5OiJpbnQ2NF9yZWYiLDEyMzoidWludDY0X3JlZiIsMTEwOiJib29sX3JlZiIsMTExOiJxaW50OF9yZWYiLDExMjoicXVpbnQ4X3JlZiIsMTE1OiJxaW50MTZfcmVmIiwxMTY6InF1aW50MTZfcmVmIiwxMTM6InFpbnQzMl9yZWYiLDExNDoiYmZsb2F0MTZfcmVmIiwxMjA6InJlc291cmNlX3JlZiIsMTIxOiJ2YXJpYW50X3JlZiJ9O2Z1bmN0aW9uIFdJKG4pe2xldHt0ZW5zb3JEZWJ1Z01vZGU6dCxhcnJheTplfT1uO3N3aXRjaCh0KXtjYXNlIHpvLk5PX1RFTlNPUjppZihudWxsIT09ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIHpvLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1lfHwyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKGVbMV0pfTtjYXNlIHpvLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09ZXx8NSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT17c2l6ZTplWzFdfTtyZXR1cm4gZVsyXT4wJiYoaS5udW1OZWdhdGl2ZUluZnM9ZVsyXSksZVszXT4wJiYoaS5udW1Qb3NpdGl2ZUluZnM9ZVszXSksZVs0XT4wJiYoaS5udW1OYU5zPWVbNF0pLGl9Y2FzZSB6by5TSEFQRTp7aWYobnVsbD09PWV8fDEwIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBTSEFQRSBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTAsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT1lWzJdLHI9ZS5zbGljZSg0LE1hdGgubWluKDQraSxlLmxlbmd0aCkpO3JldHVybiByLmxlbmd0aDxpJiYocj1uZXcgQXJyYXkoaS1yLmxlbmd0aCkuY29uY2F0KHIpKSx7ZHR5cGU6X3dbZVsxXV0scmFuazppLHNpemU6ZVszXSxzaGFwZTpyfX1jYXNlIHpvLkZVTExfSEVBTFRIOntpZihudWxsPT09ZXx8MTEhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIEZVTExfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMSwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO2xldCByPXtkdHlwZTpfd1tlWzJdXSxyYW5rOmVbM10sc2l6ZTplWzRdfTtyZXR1cm4gZVs1XT4wJiYoci5udW1OZWdhdGl2ZUluZnM9ZVs1XSksZVs2XT4wJiYoci5udW1Qb3NpdGl2ZUluZnM9ZVs2XSksZVs3XT4wJiYoci5udW1OYU5zPWVbN10pLGVbOF0+MCYmKHIubnVtTmVnYXRpdmVGaW5pdGVzPWVbOF0pLGVbOV0+MCYmKHIubnVtWmVyb3M9ZVs5XSksZVsxMF0+MCYmKHIubnVtUG9zaXRpdmVGaW5pdGVzPWVbMTBdKSxyfWNhc2Ugem8uRlVMTF9URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIEZVTExfVEVOU09SIG1vZGUiKTtyZXR1cm57fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHRlbnNvckRlYnVnTW9kZTogJHt0fWApfX12YXIgVTU9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gUzJlKG4sdCl7MSZuJiZOKDAsImRpdiIsNCl9ZnVuY3Rpb24gRTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDgpLEQoMiwiTmFOIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtTmFOcywiIil9fWZ1bmN0aW9uIFQyZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxEKDIsIi1cdTIyMWUiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUluZnMsIiIpfX1mdW5jdGlvbiBEMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsOCksRCgyLCIrXHUyMjFlIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gQTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIi0iKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBJMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsMTApLEQoMiwiMCIpLHYoKSxnKDMsInNwYW4iLDkpLEQoNCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDQpLHFlKCJceGQ3IixlLm51bVplcm9zLCIiKX19ZnVuY3Rpb24gUDJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIisiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBSMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSksRSgxLEUyZSw1LDEsImRpdiIsNiksRSgyLFQyZSw1LDEsImRpdiIsNiksRSgzLEQyZSw1LDEsImRpdiIsNiksRSg0LEEyZSw1LDEsImRpdiIsNiksRSg1LEkyZSw1LDEsImRpdiIsNiksRSg2LFAyZSw1LDEsImRpdiIsNiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmFOcyYmZS5udW1OYU5zPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUluZnMmJmUubnVtTmVnYXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1Qb3NpdGl2ZUluZnMmJmUubnVtUG9zaXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUZpbml0ZXMmJmUubnVtTmVnYXRpdmVGaW5pdGVzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1aZXJvcyYmZS5udW1aZXJvcz4wKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVGaW5pdGVzJiZlLm51bVBvc2l0aXZlRmluaXRlcz4wKX19dmFyIE8yZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbnRhaW5lciIsbl19O2Z1bmN0aW9uIGsyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDUpLDImbiYmYigiZHR5cGUiLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmR0eXBlKX1mdW5jdGlvbiBGMmUobix0KXsxJm4mJk4oMCwiZGVidWctdGVuc29yLXJhbmsiLDYpLDImbiYmYigicmFuayIsTSgpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gTjJlKG4sdCl7MSZuJiZOKDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZuJiZiKCJzaGFwZSIsTSgpLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpfWZ1bmN0aW9uIEwyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDgpLDImbiYmYigiaGFzSW5mT3JOYU4iLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKX1mdW5jdGlvbiBCMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw5KSwyJm4pe2xldCBlPU0oKTt4cigic2l6ZSIsZS5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpLGIoIm51bU5lZ2F0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcykoIm51bVBvc2l0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcykoIm51bU5hTnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zKSgibnVtTmVnYXRpdmVGaW5pdGVzIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzKSgibnVtWmVyb3MiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcykoIm51bVBvc2l0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyl9fXZhciBWMmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiICIsaS5kdHlwZSwiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLEgyZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRCgwKSwyJmUmJnFlKCIgIixpLnJhbmssIkQgIil9LHN0eWxlczpbVTVdfSksbn0pKCksVTJlPSgoKT0+e2NsYXNzIG57Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKGU9PnZvaWQgMD09PWU/Ij8iOlN0cmluZyhlKSkuam9pbigiLCIpKyJdIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiIHNoYXBlOiIsaS5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLHoyZT0oKCk9PntjbGFzcyBue2dldCBicmVha2Rvd25FeGlzdHMoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5udW1OYU5zfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVGaW5pdGVzfHx2b2lkIDAhPT10aGlzLm51bVplcm9zfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlRmluaXRlc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJzcGFuIiksRCgyLCJzaXplOiIpLHYoKSxnKDMsInNwYW4iLDEpLEQoNCksdigpKCksRSg1LFMyZSwxLDAsImRpdiIsMiksRSg2LFIyZSw3LDYsImRpdiIsMykpLDImZSYmKHgoNCkseXQoaS5zaXplKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSl9LGRlcGVuZGVuY2llczpbWGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnNpemVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIG1hcmdpbjogMCAzcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuYnJlYWtkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnlbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIGhlaWd0aDogMTAwJTtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5LXRhZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgICAgfVxuICAgICAgLmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH0iXX0pLG59KSgpLGoyZT0oKCk9PntjbGFzcyBue2dldCBpbmZvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaGFzSW5mT3JOYU4/IkhhcyBcdTIyMWUvTmFOIjoiTm8gXHUyMjFlL05hTiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRCgxKSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLEhuKDIsTzJlLGkuaGFzSW5mT3JOYU4/Imhhcy1pbmYtb3ItbmFuIjoiIikpLHgoMSkscWUoIiAiLGkuaW5mb1N0cmluZywiICIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuaGFzLWluZi1vci1uYW5bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxxST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxrMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDApLEUoMSxGMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItcmFuayIsMSksRSgyLE4yZSwxLDEsImRlYnVnLXRlbnNvci1zaGFwZSIsMiksRSgzLEwyZSwxLDEsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsMyksRSg0LEIyZSwxLDcsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsNCkpLDImZSYmKGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUucmFuaykseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpLHgoMSksYigibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSl9LGRlcGVuZGVuY2llczpbWGUsVjJlLGoyZSx6MmUsSDJlLFUyZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBHMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTIpLEQoMSwiXHUyNWI2IiksdigpKX12YXIgVzJlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBxMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oMik7YigiZGVidWdUZW5zb3JWYWx1ZSIsaS5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMSxXMmUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0udGVuc29yX2RlYnVnX21vZGUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKSkpfX1mdW5jdGlvbiBZMmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSgxLCJkaXYiLDEzKSgyLCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0LG89TSgyKTtyZXR1cm4gb2Uoby5vblRlbnNvck5hbWVDbGljay5lbWl0KHtpbmRleDpyLGdyYXBoX2lkOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLmdyYXBoX2lkLG9wX25hbWU6by5ncmFwaEV4ZWN1dGlvbkRhdGFbcl0ub3BfbmFtZX0pKX0pLEQoMyksdigpLGcoNCwiZGl2IiwxNSksRCg1KSx2KCkoKSxFKDYscTJlLDEsNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNiksdigpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7eCgyKSx4cigidGl0bGUiLGkuZ2V0VGVuc29yTmFtZShlKSkseCgxKSxxZSgiICIsaS5nZXRUZW5zb3JOYW1lKGUpLCIgIikseCgyKSx5dChpLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF90eXBlKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5kZWJ1Z190ZW5zb3JfdmFsdWUpfX1mdW5jdGlvbiBYMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTgpLEQoMSwiIExvYWRpbmcuLi4gIiksdigpKX12YXIgUTJlPWZ1bmN0aW9uKG4pe3JldHVybnsiaW5wdXQtb2YtZm9jdXMiOm59fTtmdW5jdGlvbiBLMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSgyLCJkaXYiLDcpLEUoMyxHMmUsMiwwLCJkaXYiLDgpLEQoNCksdigpLEUoNSxZMmUsNyw0LCJkaXYiLDkpLEUoNixYMmUsMiwwLCJuZy10ZW1wbGF0ZSIsMTAsMTEsZW4pLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoNykscj1NKDIpO3goMSksYigibmdDbGFzcyIsSG4oNSxRMmUsci5pc0lucHV0T2ZGb2N1cyhlKSkpLHgoMiksYigibmdJZiIsZT09PXIuZm9jdXNJbmRleCkseCgxKSxxZSgiICIsZSwiICIpLHgoMSksYigibmdJZiIsci5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0pKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIFoyZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMyksUCgic2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChyKSl9KSxFKDEsSzJlLDgsNywiZGl2Iiw0KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJjZGtWaXJ0dWFsRm9yT2YiLGUuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19dmFyIEl0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblNjcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IEcsdGhpcy5vblRlbnNvck5hbWVDbGljaz1uZXcgRyx0aGlzLnBhcnNlRGVidWdUZW5zb3JWYWx1ZT1XSSx0aGlzLlRFU1RfT05MWT17Z2V0Vmlld1BvcnQ6KCk9PnRoaXMudmlld1BvcnR9fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMudmlld1BvcnQmJmUuZm9jdXNJbmRleCYmbnVsbCE9PWUuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUpe2xldCBpPXRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLHI9ZS5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSxvPU1hdGgucm91bmQoKGkuZW5kLWkuc3RhcnQpLzMpLHM9TWF0aC5tYXgoci1vLDApO3RoaXMudmlld1BvcnQuc2Nyb2xsVG9JbmRleChzLHI+PWkuc3RhcnQmJnI8aS5lbmQ/InNtb290aCI6dm9pZCAwKX19Z2V0VGVuc29yTmFtZShlKXtyZXR1cm5gJHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF9uYW1lfToke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm91dHB1dF9zbG90fWB9aXNJbnB1dE9mRm9jdXMoZSl7cmV0dXJuIG51bGwhPT10aGlzLmZvY3VzSW5wdXRJbmRpY2VzJiZ0aGlzLmZvY3VzSW5wdXRJbmRpY2VzLmluY2x1ZGVzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHFDLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkudmlld1BvcnQ9ci5maXJzdCl9fSxpbnB1dHM6e251bUdyYXBoRXhlY3V0aW9uczoibnVtR3JhcGhFeGVjdXRpb25zIixncmFwaEV4ZWN1dGlvbkRhdGE6ImdyYXBoRXhlY3V0aW9uRGF0YSIsZ3JhcGhFeGVjdXRpb25JbmRpY2VzOiJncmFwaEV4ZWN1dGlvbkluZGljZXMiLGZvY3VzSW5kZXg6ImZvY3VzSW5kZXgiLGZvY3VzSW5wdXRJbmRpY2VzOiJmb2N1c0lucHV0SW5kaWNlcyJ9LG91dHB1dHM6e29uU2Nyb2xsZWRJbmRleENoYW5nZToib25TY3JvbGxlZEluZGV4Q2hhbmdlIixvblRlbnNvck5hbWVDbGljazoib25UZW5zb3JOYW1lQ2xpY2sifSxmZWF0dXJlczpbenRdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyIl0sWzEsImdyYXBoLWV4ZWN1dGlvbnMtdGl0bGUiXSxbIml0ZW1TaXplIiwiMzgiLCJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiLDQsIm5nSWYiXSxbIml0ZW1TaXplIiwiMzgiLDEsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiXSxbImNsYXNzIiwidGVuc29yLWNvbnRhaW5lciIsNCwiY2RrVmlydHVhbEZvciIsImNka1ZpcnR1YWxGb3JPZiJdLFsxLCJ0ZW5zb3ItY29udGFpbmVyIl0sWzEsInRlbnNvci1pdGVtIiwzLCJuZ0NsYXNzIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1pbmRleCJdLFsiY2xhc3MiLCJncmFwaC1leGVjdXRpb24tZm9jdXMiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJjbGFzcyIsInRlbnNvci1pdGVtIl0sWyJkYXRhTG9hZGluZyIsIiJdLFsxLCJncmFwaC1leGVjdXRpb24tZm9jdXMiXSxbMSwidGVuc29yLW5hbWUtYW5kLW9wLXR5cGUiXSxbMSwidGVuc29yLW5hbWUiLDMsInRpdGxlIiwiY2xpY2siXSxbMSwib3AtdHlwZSJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIiw0LCJuZ0lmIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXSxbMSwibG9hZGluZy1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRCgyKSx2KCksRSgzLFoyZSwyLDEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMiksdigpKSwyJmUmJih4KDIpLHFlKCIgR3JhcGggRXhlY3V0aW9ucyAoIixpLm51bUdyYXBoRXhlY3V0aW9ucywiKSAiKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLm51bUdyYXBoRXhlY3V0aW9ucyYmaS5udW1HcmFwaEV4ZWN1dGlvbnM+MCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLHFJLHBKLGhKLHFDXSxzdHlsZXM6WycuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmctbGVmdDoxMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LmdyYXBoLWV4ZWN1dGlvbi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXJpZ2h0OjRweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncmFwaC1leGVjdXRpb25zLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206NXB4fS5ncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtmb250LXNpemU6MTJweDt3aWR0aDoxMDAlO292ZXJmbG93LXg6aGlkZGVufS5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5sb2FkaW5nLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlY2VmZjE7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7cGFkZGluZzoxcHggM3B4O3dpZHRoOm1heC1jb250ZW50O2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS50ZW5zb3ItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MzhweDtsaW5lLWhlaWdodDozOHB4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjpub25lO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O21hcmdpbjoycHggMCAxcHg7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDJweCk7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAycHg7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZToxcHggc29saWQgI2M2Y2FkMX0udGVuc29yLW5hbWUtYW5kLW9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2RpcmVjdGlvbjpydGw7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctcmlnaHQ6OHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjQwcHh9ZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxQdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1HcmFwaEV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihtdykpLHRoaXMuZ3JhcGhFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oUjUpKSx0aGlzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkobXcsaT0+MD09PWk/bnVsbDpBcnJheS5mcm9tKHtsZW5ndGg6aX0pLm1hcCgocixvKT0+bykpKSksdGhpcy5mb2N1c0luZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oTzUpKSx0aGlzLmZvY3VzSW5wdXRJbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUoZm4odnRlKSl9b25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godHYoe2luZGV4OmV9KSl9b25UZW5zb3JOYW1lQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChudihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJudW1HcmFwaEV4ZWN1dGlvbnMiLCJncmFwaEV4ZWN1dGlvbkRhdGEiLCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLCJmb2N1c0luZGV4IiwiZm9jdXNJbnB1dEluZGljZXMiLCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLCJvblRlbnNvck5hbWVDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLDApLFAoIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY3JvbGxlZEluZGV4Q2hhbmdlKG8pfSkoIm9uVGVuc29yTmFtZUNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRlbnNvck5hbWVDbGljayhvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUdyYXBoRXhlY3V0aW9ucyIsVygxLDUsaS5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsVygyLDcsaS5ncmFwaEV4ZWN1dGlvbkRhdGEkKSkoImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsVygzLDksaS5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLFcoNCwxMSxpLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixXKDUsMTMsaS5mb2N1c0lucHV0SW5kaWNlcyQpKX0sZGVwZW5kZW5jaWVzOltJdGUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIGVPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIE91dHB1dCAiKSx2KCkpfWZ1bmN0aW9uIHRPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIElucHV0ICIpLHYoKSl9ZnVuY3Rpb24gbk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpKDEsInNwYW4iLDcpLEUoMixlT2UsMiwwLCJzcGFuIiw4KSxFKDMsdE9lLDIsMCwic3BhbiIsOCksdigpLEQoNCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nU3dpdGNoIixlLmtpbmQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiaW5wdXQiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImNvbnN1bWVyIikseCgxKSxxZSgiIHNsb3Q6ICIsZS5zbG90LCIgIil9fWZ1bmN0aW9uIGlPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiICIsZS5vcERhdGEub3BfdHlwZSwiICIpfX1mdW5jdGlvbiByT2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDEwKSxEKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLHYoKSl9dmFyIG9PZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LFJ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbk9wTmFtZUNsaWNrPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1vcCJdXSxpbnB1dHM6e2tpbmQ6ImtpbmQiLG9wTmFtZToib3BOYW1lIixzbG90OiJzbG90IixvcERhdGE6Im9wRGF0YSJ9LG91dHB1dHM6e29uT3BOYW1lQ2xpY2s6Im9uT3BOYW1lQ2xpY2sifSxkZWNsczo5LHZhcnM6Nyxjb25zdHM6W1sxLCJvcC1jb250YWluZXIiXSxbMSwiaW5wdXQtdGVuc29yLW5hbWUiXSxbMSwib3AtbmFtZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInNsb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWzEsInNsb3QiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm9wLXR5cGUiXSxbMSwib3AtaW5mby1taXNzaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJidXR0b24iLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk9wTmFtZUNsaWNrLmVtaXQoe29wX25hbWU6aS5vcE5hbWV9KX0pLGcoMywic3BhbiIpLEQoNCksdigpKCksRSg1LG5PZSw1LDQsImRpdiIsMyksdigpLEUoNixpT2UsMiwxLCJkaXYiLDQpLEUoNyxyT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSxiKCJuZ0NsYXNzIixIbig1LG9PZSwic2VsZiI9PT1pLmtpbmQ/InNlbGYtb3AtbmFtZSI6IiIpKSx4KDIpLHl0KGkub3BOYW1lKSx4KDEpLGIoIm5nSWYiLCJzZWxmIiE9PWkua2luZCkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLm9wRGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbUG4sWGUsaHIsSXJdLHN0eWxlczpbJy5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjJweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MXB4IDNweCAjZWVlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweCAwIDA7cGFkZGluZzoycHggNnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjAwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzoxcHggM3B4ICM3NTc1NzV9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTowfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlcjoycHggc29saWQgI2ZmZDNiMn0ub3AtaW5mby1taXNzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdy13cmFwOmFueXdoZXJlO3BhZGRpbmc6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zZWxmLW9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xvdFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J119KSxufSkoKTtmdW5jdGlvbiBhT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxEKDIpLHYoKSxnKDMsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgzKTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleDt4KDIpLHFlKCJJbnB1dCBzbG90ICIsaSwiOiIpLHgoMSksYigia2luZCIsImlucHV0IikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5vdXRwdXRfc2xvdCkoIm9wRGF0YSIsZS5kYXRhKX19ZnVuY3Rpb24gbE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDExKSgxLCJkaXYiKSxFKDIsYU9lLDQsNSwiZGl2IiwxMiksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nRm9yT2YiLGUuaW5wdXRPcHMpfX1mdW5jdGlvbiBjT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMTYpLEQoMSwiIChUaGlzIG9wIGhhcyBubyBpbnB1dCB0ZW5zb3IuKSAiKSx2KCkpfWZ1bmN0aW9uIHVPZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjMpKDEsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSg0KTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5pbnB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBkT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTkpKDEsImRpdiIsMjApLEQoMiksZygzLCJzcGFuIiksWUUoNCwyMSksdigpLEQoNSwiKSAiKSx2KCksRSg2LHVPZSwyLDQsImRpdiIsMjIpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7eCgyKSxhcCgiIE91dHB1dCBzbG90ICIsaSwiOiAoIixlLmxlbmd0aCwiICIpLHgoMiksT2IoZS5sZW5ndGgpLFhFKDQpLHgoMiksYigibmdGb3JPZiIsZSl9fWZ1bmN0aW9uIHBPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNykoMSwiZGl2IiksRSgyLGRPZSw3LDQsImRpdiIsMTgpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCgyKSxiKCJuZ0Zvck9mIixlLmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gaE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI0KSxEKDEpLGcoMiwic3BhbiIpLFlFKDMsMjUpLHYoKSxEKDQsIiBhbmQgbm8gY29uc3VtZXIuKSAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHFlKCIgKFRoaXMgb3AgaGFzICIsZS5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSx4KDIpLE9iKGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgpLFhFKDMpfX1mdW5jdGlvbiBmT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSxFKDEsbE9lLDMsMSwiZGl2Iiw0KSxFKDIsY09lLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxlbiksZyg0LCJkaXYiLDYpKDUsImRpdiIsNyksRCg2LCJPcDoiKSx2KCksZyg3LCJncmFwaC1vcCIsOCksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLHYoKSgpLEUoOCxwT2UsMywxLCJkaXYiLDkpLEUoOSxoT2UsNSwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxlbiksdigpfWlmKDImbil7bGV0IGU9c3QoMyksaT1zdCgxMCkscj1NKCk7eCgxKSxiKCJuZ0lmIixyLmlucHV0T3BzLmxlbmd0aD4wKSgibmdJZkVsc2UiLGUpLHgoNiksYigia2luZCIsInNlbGYiKSgib3BOYW1lIixyLm9wSW5mby5vcF9uYW1lKSgib3BEYXRhIixyLm9wSW5mbykseCgxKSxiKCJuZ0lmIixyLnRvdGFsTnVtQ29uc3VtZXJzPjApKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIG1PZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMjYpLEQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksdigpKX1mdW5jdGlvbiBnT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMjcpLEQoMSwiIE5vIGdyYXBoIG9wIHNlbGVjdGVkLiBDbGljayBhIHRlbnNvciBuYW1lIGluIHRoZSBHcmFwaCBFeGVjdXRpb25zIHRhYmxlIHRvIHZpZXcgdGhlIG5laWdoYm9yaG9vZCBvZiB0aGUgdGVuc29yJ3Mgb3AgaW4gaXRzIGdyYXBoLiAiKSx2KCkpfXZhciBPdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25HcmFwaE9wTmF2aWdhdGU9bmV3IEd9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKChlLGkpPT5lK2kubGVuZ3RoLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscjtyZXR1cm4gdD0kbG9jYWxpemVgOuKQn2ZlNTVmOWIxOTNlYTIwYWFlNWI1NjM1ZTY4ZDkzODY1MDM4NDc3NDbikJ80OTU1MTMzNzQwODQxMjk5ODUxOntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHtjb25zdW1lcn0gPTEge2NvbnN1bWVyfSBvdGhlciB7Y29uc3VtZXJzfX1gLHQ9UUUodCx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxlPSRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsaT0kbG9jYWxpemVgOuKQnzZhYTc1ZjYyN2UwZGMxNjE1MGVmNDQ4NDY0ZTBjODU3YWFhMGRjMTjikJ81MTU2NzEyOTM1MTUwNTg2ODc4OntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHt0ZW5zb3J9ID0xIHt0ZW5zb3J9IG90aGVyIHt0ZW5zb3JzfX1gLGk9UUUoaSx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxyPSRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtpfTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLHIsWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IikoMSwiZGl2IiksRCgyLCJHcmFwaCBTdHJ1Y3R1cmUiKSx2KCksZygzLCJkaXYiLDApLEUoNCxmT2UsMTEsNywiZGl2IiwxKSx2KCksRSg1LG1PZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLEUoNyxnT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCg0KSxiKCJuZ0lmIixudWxsIT1pLm9wSW5mbykoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbeW4sWGUsUnRlXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde292ZXJmbG93LXk6YXV0b30uY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206NXB4O292ZXJmbG93LXg6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmNvbnN1bWVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjVweCAwfS5ncmFwaC1zdHJ1Y3R1cmUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtvdmVyZmxvdy15OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7bWFyZ2luLXRvcDo1cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmctYm90dG9tOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1vcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctYm90dG9tOjVweH0uaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OTttYXJnaW4tYm90dG9tOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0uaW5wdXQtdGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5uby1vcC1mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5O2ZvbnQtZmFtaWx5OiJSb2JvdG8iLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3doaXRlLXNwYWNlOm5vcm1hbH0uc2VsZi1vcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbTo1cHh9LnNlbGYtb3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZy1ib3R0b206NXB4fS5zbG90LWNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy10b3A6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH0uc2xvdC1jb25zdW1lcnMtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxrdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5vcEluZm8kPXRoaXMuc3RvcmUucGlwZShmbihGNSkpLHRoaXMuaW5wdXRPcHMkPXRoaXMuc3RvcmUucGlwZShmbihONSkpLHRoaXMuY29uc3VtZXJPcHMkPXRoaXMuc3RvcmUucGlwZShmbih5dGUpKX1vbkdyYXBoT3BOYXZpZ2F0ZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGl2KGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm9wSW5mbyIsImlucHV0T3BzIiwiY29uc3VtZXJPcHMiLCJvbkdyYXBoT3BOYXZpZ2F0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtY29tcG9uZW50IiwwKSxQKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25HcmFwaE9wTmF2aWdhdGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigib3BJbmZvIixXKDEsMyxpLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFcoMiw1LGkuaW5wdXRPcHMkKSkoImNvbnN1bWVyT3BzIixXKDMsNyxpLmNvbnN1bWVyT3BzJCkpfSxkZXBlbmRlbmNpZXM6W090ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRnRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEQoMiwiRGVidWdnZXIgVjIgaXMgaW5hY3RpdmUgYmVjYXVzZSBubyBkYXRhIGlzIGF2YWlsYWJsZS4iKSx2KCksZygzLCJkaXYiKSxEKDQsIlRvIHVzZSB0aGUgZGVidWdnZXIsIiksdigpLGcoNSwiZGl2IikoNiwib2wiKSg3LCJsaSIpLEQoOCwiIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB5b3VyIHByb2dyYW06ICIpLGcoOSwiZGl2IiwyKSgxMCwic3BhbiIpLEQoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSx2KCksZygxMiwic3BhbiIsMyksRCgxMywibG9nZGlyIiksdigpLEQoMTQsIiwgIiksZygxNSwic3BhbiIsMyksRCgxNiwndGVuc29yX2RlYnVnX21vZGU9IkZVTExfSEVBTFRIIicpLHYoKSxEKDE3LCIsICIpLGcoMTgsInNwYW4iLDMpLEQoMTksImNpcmN1bGFyX2J1ZmZlcl9zaXplPS0xIiksdigpLGcoMjAsInNwYW4iKSxEKDIxLCIpIiksdigpKCkoKSxnKDIyLCJsaSIpLEQoMjMsIlJlLXJ1biB0aGUgcHJvZ3JhbS4iKSx2KCkoKSgpLGcoMjQsImRpdiIsNCkoMjUsImRpdiIsNSkoMjYsImRpdiIsNiksTigyNywiaW1nIiw3KSx2KCksZygyOCwiZGl2Iiw4KSxEKDI5LCJBdXRvLWFsZXJ0cyBmb3IgcHJvYmxlbXMgZm91bmQiKSx2KCkoKSxnKDMwLCJkaXYiLDUpKDMxLCJkaXYiLDYpLE4oMzIsImltZyIsOSksdigpLGcoMzMsImRpdiIsOCksRCgzNCwiIEludGVncmF0ZWQgZGVidWdnaW5nIHRvIHRyYWNlIHByb2JsZW1zIHRvIHRoZWlyIGNhdXNlcyAiKSx2KCkoKSxnKDM1LCJkaXYiLDUpKDM2LCJkaXYiLDYpLE4oMzcsImltZyIsMTApLHYoKSxnKDM4LCJkaXYiLDgpLEQoMzksIkxpbmsgbG9nIHRvIGNvZGUiKSx2KCkoKSgpLGcoNDAsImRpdiIsMTEpKDQxLCJkaXYiLDEyKSxEKDQyLCIgVGhlIGxvZyBkaXJlY3RvcnkgbXVzdCBjb250YWluIFRlbnNvckZsb3cgRGVidWdnZXIgKFYyKSBkYXRhLiB0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oKSB3aWxsIGNvbGxlY3QgdGVuc29yIGRhdGEsIGdyYXBoIHN0cnVjdHVyZXMsIHRoZSBhc3NvY2lhdGVkIHN0YWNrIHRyYWNlcywgYW5kIHNvdXJjZSBjb2RlIHRvIHRoZSBzcGVjaWZpY2VkIGRpcmVjdG9yeSBsb2dkaXIgYXMgdGhlIGluc3RydW1lbnRlZCBUZW5zb3JGbG93IHByb2dyYW0gZXhlY3V0ZXMuICIpLHYoKSxnKDQzLCJkaXYiLDEyKSg0NCwiZGl2IiksRCg0NSwiIFNlZSAiKSxnKDQ2LCJhIiwxMyksRCg0NywiIGRvY3VtZW50YXRpb24gIiksdigpLEQoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksdigpLGcoNDksImRpdiIpLEQoNTAsIiBTZWUgIiksZyg1MSwiYSIsMTQpLEQoNTIsIiBoZXJlICIpLHYoKSxEKDUzLCIgZm9yIG90aGVyIFRlbnNvckZsb3cgZGVidWdnaW5nIEFQSXMuICIpLHYoKSgpKCkoKSl9LHN0eWxlczpbIi5hcmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgY29sb3I6IGxpZ2h0Ymx1ZTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBtYXJnaW46IDJweDtcbn1cblxuLmNvZGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IFJvYm90bztcbiAgZm9udC1zaXplOiAxNXB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiA1MHB4O1xufVxuXG4uZGV0YWlscy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB3aWR0aDogNTAlO1xufVxuXG4uZXhoaWJpdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuZGVzY3JpcHRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuc2NyZWVuc2hvdFtfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAyMDBweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksbn0pKCksTnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk4oMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRlcGVuZGVuY2llczpbRnRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxCdGVfZ2V0V2luZG93PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd307ZnVuY3Rpb24gTHRlKG4pe2xldCB0PUJ0ZV9nZXRXaW5kb3coKS5yZXF1aXJlO3JldHVybiBuZXcgUHJvbWlzZShlPT57dChuLGUpfSl9dmFyIGo1X2xvYWRNb25hY289YXN5bmMgZnVuY3Rpb24oKXtsZXQgbj1CdGVfZ2V0V2luZG93KCk7aWYodm9pZCAwPT09bi5tb25hY28pe2lmKCFuLnJlcXVpcmUpdGhyb3cgbmV3IEVycm9yKCJsb2FkTW9uYWNvKCkgZmFpbGVkIGJlY2F1c2UgZnVuY3Rpb24gcmVxdWlyZSgpIGlzIHVuYXZhaWxhYmxlIik7bi5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOiIvdGYtaW1wb3J0cy92cyJ9fSksYXdhaXQgTHRlKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0pLGF3YWl0IEx0ZShbInZzL3B5dGhvbi9weXRob24uY29udHJpYnV0aW9uIl0pfX07ZnVuY3Rpb24gWUkobil7cmV0dXJuIG4/InZzLWRhcmsiOiJ2cyJ9dmFyIF9tPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5yZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5Ncz0xMDAsdGhpcy5vblJlc2l6ZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uUmVzaXplJD1uZXcgVGU7bGV0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5vblJlc2l6ZSQubmV4dCgpfSk7aS5vYnNlcnZlKGUubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCk9PntpLnVub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpfSl9bmdPbkluaXQoKXt0aGlzLm9uUmVzaXplJC5waXBlKENhKDEpLEFyKHRoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMpLG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm9uUmVzaXplLmVtaXQoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlJC5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImRldGVjdFJlc2l6ZSIsIiJdXSxpbnB1dHM6e3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOiJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyJ9LG91dHB1dHM6e29uUmVzaXplOiJvblJlc2l6ZSJ9fSksbn0pKCksTU9lPVsiY29kZVZpZXdlckNvbnRhaW5lciJdLHp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKGUpe2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47bGV0IGk9ZS5tb25hY28mJm51bGw9PT10aGlzLmVkaXRvcjtudWxsPT09dGhpcy5lZGl0b3ImJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHt2YWx1ZToodGhpcy5saW5lcz8/W10pLmpvaW4oIlxuIiksbGFuZ3VhZ2U6InB5dGhvbiIscmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0sdGhlbWU6WUkodGhpcy51c2VEYXJrTW9kZSl9KSksZS5saW5lcyYmdGhpcy5saW5lcyYmdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5saW5lcy5qb2luKCJcbiIpKTtsZXQgcj1pfHxlLmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYociYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKHIsdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtsZXQgbz10aGlzLmxpbmVzW3ItMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEscixvKzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX1lLnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUoWUkodGhpcy51c2VEYXJrTW9kZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChNT2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5jb2RlVmlld2VyQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLG1vbmFjbzoibW9uYWNvIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLDEsImNvZGUtdmlld2VyLWNvbnRhaW5lciIsMywicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY29kZVZpZXdlckNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSx2KCkpLDImZSYmYigicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLGkuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGVwZW5kZW5jaWVzOltfbV0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksanRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLm1vbmFjbyQ9bnVsbH1uZ09uSW5pdCgpe3RoaXMubW9uYWNvJD1sbyhqNV9sb2FkTW9uYWNvKCkpLnBpcGUoQigoKT0+d2luZG93Lm1vbmFjbykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZSJdXSxpbnB1dHM6e2xpbmVzOiJsaW5lcyIsZm9jdXNlZExpbmVubzoiZm9jdXNlZExpbmVubyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6Mix2YXJzOjYsY29uc3RzOltbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwibW9uYWNvIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsInNvdXJjZS1jb2RlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImxpbmVzIixpLmxpbmVzKSgiZm9jdXNlZExpbmVubyIsaS5mb2N1c2VkTGluZW5vKSgibW9uYWNvIixXKDEsNCxpLm1vbmFjbyQpKSgidXNlRGFya01vZGUiLGkudXNlRGFya01vZGUpfSxkZXBlbmRlbmNpZXM6W3p0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gVE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIgIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5maWxlX3BhdGgsIiAiKX19ZnVuY3Rpb24gRE9lKG4sdCl7MSZuJiYoZygwLCJkaXYiLDcpLEQoMSwiIE5vIGZpbGUgc2VsZWN0ZWQuIENsaWNrIGEgbGluZSBudW1iZXIgaW4gdGhlIFN0YWNrIFRyYWNlIHNlY3Rpb24gdG8gc2hvdyB0aGUgc291cmNlIGNvZGUuICIpLHYoKSl9ZnVuY3Rpb24gQU9lKG4sdCl7aWYoMSZuJiZOKDAsInNvdXJjZS1jb2RlIiw4KSwyJm4pe2xldCBlPU0oKTtiKCJsaW5lcyIsZS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpKCJmb2N1c2VkTGluZW5vIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5saW5lbm8pKCJ1c2VEYXJrTW9kZSIsZS51c2VEYXJrTW9kZSl9fXZhciBHdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJkaXYiLDIpLEQoMywiU291cmNlIENvZGUiKSx2KCksRSg0LFRPZSwyLDEsImRpdiIsMyksRSg1LERPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsQU9lLDEsMywic291cmNlLWNvZGUiLDUpLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDQpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIixyKSx4KDMpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJiZudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpfX0sZGVwZW5kZW5jaWVzOltYZSxqdGVdLHN0eWxlczpbJy5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI0cHg7cGFkZGluZy1ib3R0b206NnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtvdmVyZmxvdy15OmF1dG87cGFkZGluZzowIDIwcHh9Lm5vLWZpbGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiM2NjY7cGFkZGluZzowIDIwcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zb3VyY2UtZmlsZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxMDAlfS50aXRsZS10YWdbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjEwMCU7cGFkZGluZy1sZWZ0OjZweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9c291cmNlLWNvZGVbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3dpZHRoOjEwMCV9J119KSxufSkoKSxXdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkPXRoaXMuc3RvcmUuc2VsZWN0KGpJKSx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQ9dGhpcy5zdG9yZS5zZWxlY3QoR0kpLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLCJmb2N1c2VkU291cmNlTGluZVNwZWMiLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwic291cmNlLWZpbGVzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IixXKDEsMyxpLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQpKSgiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIixXKDIsNSxpLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQpKSgidXNlRGFya01vZGUiLFcoMyw3LGkudXNlRGFya01vZGUkKSl9LGRlcGVuZGVuY2llczpbR3RlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxST2U9WyJzdGFja0ZyYW1lQXJyYXkiXTtmdW5jdGlvbiBPT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEzKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAjIixlLmV4ZWN1dGlvbkluZGV4LCI6ICIpfX1mdW5jdGlvbiBrT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE0KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIEZPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRCgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLEUoMixPT2UsMiwxLCJzcGFuIiwxMSksRSgzLGtPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wVHlwZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBOT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE2KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoJyAiJyxlLm9wTmFtZSwnIiAnKX19ZnVuY3Rpb24gTE9lKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwxNCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgzKTt4KDEpLHFlKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBCT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLEUoMixOT2UsMiwxLCJzcGFuIiwxNSksRSgzLExPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wTmFtZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBWT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkscWUoIiAoSG9zdCBuYW1lOiAiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5WzBdLmhvc3RfbmFtZSwiKSAiKX19ZnVuY3Rpb24gSE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iKSgyLCJzcGFuIiw4KSxFKDMsRk9lLDQsMiwiZGl2Iiw5KSxFKDQsQk9lLDQsMiwiZGl2Iiw5KSx2KCkoKSxnKDUsImRpdiIpLEUoNixWT2UsMiwxLCJzcGFuIiwxMCksdigpKCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdTd2l0Y2giLGUuY29kZUxvY2F0aW9uVHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuR1JBUEhfT1BfQ1JFQVRJT04pLHgoMiksYigibmdJZiIsbnVsbCE9PWUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZlLnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFVPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxOCksRCgxLCIgQ2xpY2sgYW4gZWFnZXIgZXhlY3V0aW9uIG9yIGdyYXBoIG9wIHRvIHNob3cgaXRzIG9yaWdpbmFsIHN0YWNrIHRyYWNlLiAiKSx2KCkpfWZ1bmN0aW9uIHpPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwyOCksRCgxLCIgXHUyOTEzICIpLHYoKSl9dmFyIGpPZT1mdW5jdGlvbihuLHQpe3JldHVybltuLHRdfTtmdW5jdGlvbiBHT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIyKSgxLCJkaXYiLDIzKSxEKDIpLHYoKSxnKDMsImRpdiIsMjQpLEUoNCx6T2UsMiwwLCJkaXYiLDI1KSxnKDUsImRpdiIsMjYpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5vblNvdXJjZUxpbmVDbGlja2VkLmVtaXQobykpfSksRCg2KSx2KCksZyg3LCJkaXYiLDI3KSxEKDgpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixqT2UsZS5iZWxvbmdzVG9Gb2N1c2VkRmlsZT8iZm9jdXNlZC1maWxlIjoiIixlLmZvY3VzZWQ/ImZvY3VzZWQtc3RhY2stZnJhbWUiOiIiKSkseCgxKSx4cigidGl0bGUiLGUuZmlsZV9wYXRoKSx4KDEpLHFlKCIgIixlLmNvbmNpc2VfZmlsZV9wYXRoLCIgIikseCgyKSxiKCJuZ0lmIixpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJiZlLmZvY3VzZWQpLHgoMikscWUoIiBMaW5lICIsZS5saW5lbm8sIiAiKSx4KDIpLHFlKCIgIixlLmZ1bmN0aW9uX25hbWUsIiAiKX19ZnVuY3Rpb24gV09lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5LDIwKSxFKDIsR09lLDksOSwiZGl2IiwyMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDIpLGIoIm5nRm9yT2YiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KX19ZnVuY3Rpb24gcU9lKG4sdCl7fXZhciBxdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5PW51bGwsdGhpcy5vblNvdXJjZUxpbmVDbGlja2VkPW5ldyBHLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT10c31uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47bGV0IGU9dGhpcy5zdGFja0ZyYW1lQXJyYXkubmF0aXZlRWxlbWVudCxpPWUucXVlcnlTZWxlY3RvcigiLmZvY3VzZWQtc3RhY2stZnJhbWUiKTtpZihudWxsIT09aSlyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChlLGkpO2xldCByPWUucXVlcnlTZWxlY3RvcigiLnN0YWNrLWZyYW1lLWNvbnRhaW5lcjpsYXN0LWNoaWxkIik7bnVsbCE9PXImJnRoaXMuc2Nyb2xsVG9FbGVtZW50KGUscil9c2Nyb2xsVG9FbGVtZW50KGUsaSl7ZS5zY3JvbGxUb3A9aS5vZmZzZXRUb3B9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInN0YWNrLXRyYWNlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KFJPZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YWNrRnJhbWVBcnJheT1yLmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxEKDMsIiBTdGFjayBUcmFjZSAiKSx2KCksRSg0LEhPZSw3LDQsImRpdiIsMyksRSg1LFVPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsV09lLDMsMSwiZGl2Iiw1KSxFKDgscU9lLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKSwyJmUpe2xldCByPXN0KDYpLG89c3QoOSk7eCg0KSxiKCJuZ0lmIixudWxsIT09aS5jb2RlTG9jYXRpb25UeXBlKSgibmdJZkVsc2UiLHIpLHgoMyksYigibmdJZiIsbnVsbCE9PWkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KSgibmdJZkVsc2UiLG8pfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxocixJcl0sc3R5bGVzOlsnLmZvY3VzZWQtZmlsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uZm9jdXNlZC1zdGFjay1mcmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTEsMCwuMyl9Lm5vLXN0YWNrLXRyYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YW55d2hlcmV9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc3RhY2stZnJhbWUtYXJyYXlbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpfS5zdGFjay1mcmFtZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNhMGEwYTB9LnN0YWNrLWZyYW1lLWZpbGUtcGF0aFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjE4MHB4O3dpZHRoOjE4MHB4fS5zdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGFjay1mcmFtZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmctbGVmdDoxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6MjAwcHg7d29yZC13cmFwOmFueXdoZXJlfS5zdGFjay1mcmFtZS1saW5lbm9bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDo4MHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3dpZHRoOjgwcHh9LnN0YWNrLXRyYWNlLWF1eC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE1cHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDttYXgtaGVpZ2h0OjM2MHB4O292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuO3BhZGRpbmctbGVmdDo4cHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnN0YWNrLXRyYWNlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjNweH0uc3RhY2stdHJhY2UtaG9zdC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5zdGFjay10cmFjZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uc3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEycHg7cGFkZGluZy1yaWdodDozcHh9J119KSxufSkoKSxZdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jb2RlTG9jYXRpb25UeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oWShndyxpPT5udWxsPT09aT9udWxsOmkuY29kZUxvY2F0aW9uVHlwZSkpKSx0aGlzLm9wVHlwZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWk/bnVsbDppLm9wVHlwZSkpKSx0aGlzLm9wTmFtZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkdSQVBIX09QX0NSRUFUSU9OP251bGw6aS5vcE5hbWUpKSksdGhpcy5leGVjdXRpb25JbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkVYRUNVVElPTj9udWxsOmkuZXhlY3V0aW9uSW5kZXgpKSksdGhpcy5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFN0ZSkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh3dGUsR0ksKGkscik9PntpZihudWxsPT09aSlyZXR1cm4gbnVsbDtsZXQgbz1bXTtmb3IobGV0IHMgb2YgaSl7bGV0e2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6dX09cyxkPWwuc3BsaXQoIi8iKSxoPW51bGwhPT1yJiZhPT09ci5ob3N0X25hbWUmJmw9PT1yLmZpbGVfcGF0aDtvLnB1c2goe2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGNvbmNpc2VfZmlsZV9wYXRoOmRbZC5sZW5ndGgtMV0sbGluZW5vOmMsZnVuY3Rpb25fbmFtZTp1LGJlbG9uZ3NUb0ZvY3VzZWRGaWxlOmgsZm9jdXNlZDpoJiZjPT09ci5saW5lbm99KX1yZXR1cm4gb30pKSl9b25Tb3VyY2VMaW5lQ2xpY2tlZChlKXtsZXR7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTpzfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2gocnYoe3N0YWNrRnJhbWU6e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c319KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSJdXSxkZWNsczo3LHZhcnM6MTgsY29uc3RzOltbMywiY29kZUxvY2F0aW9uVHlwZSIsIm9wVHlwZSIsIm9wTmFtZSIsImV4ZWN1dGlvbkluZGV4Iiwic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLCJvblNvdXJjZUxpbmVDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzdGFjay10cmFjZS1jb21wb25lbnQiLDApLFAoIm9uU291cmNlTGluZUNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU291cmNlTGluZUNsaWNrZWQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY29kZUxvY2F0aW9uVHlwZSIsVygxLDYsaS5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFcoMiw4LGkub3BUeXBlJCkpKCJvcE5hbWUiLFcoMywxMCxpLm9wTmFtZSQpKSgiZXhlY3V0aW9uSW5kZXgiLFcoNCwxMixpLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsVyg1LDE0LGkuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkKSkoInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsVyg2LDE2LGkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JCkpfSxkZXBlbmRlbmNpZXM6W3F0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUU9lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBLT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLGcoMywiZGl2IiwxNCksTig0LCJkZWJ1Zy10ZW5zb3ItdmFsdWUiLDE1KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDMpO3goMikscWUoIk91dHB1dCBzbG90ICIsaSwiOiIpLHgoMiksYigiZGVidWdUZW5zb3JWYWx1ZSIsci5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMixRT2Usci50ZW5zb3JEZWJ1Z01vZGUsZSkpKX19ZnVuY3Rpb24gWk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEwKSxFKDEsS09lLDUsNSwiZGl2IiwxMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmRlYnVnVGVuc29yVmFsdWVzKX19ZnVuY3Rpb24gSk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSgxLCJkaXYiKSgyLCJkaXYiLDMpKDMsInNwYW4iLDQpLEQoNCwiIE9wOiAiKSx2KCksZyg1LCJzcGFuIiw1KSxEKDYpLHYoKSgpLGcoNywiZGl2IiwzKSg4LCJzcGFuIiw0KSxEKDksIiAjIG9mIGlucHV0IHRlbnNvcnM6ICIpLHYoKSxnKDEwLCJzcGFuIiw2KSxEKDExKSx2KCkoKSxnKDEyLCJkaXYiLDMpKDEzLCJzcGFuIiw0KSxEKDE0LCIgIyBvZiBvdXRwdXQgdGVuc29yczogIiksdigpLGcoMTUsInNwYW4iLDcpLEQoMTYpLHYoKSxnKDE3LCJzcGFuIiw4KSxEKDE4KSx2KCkoKSxFKDE5LFpPZSwyLDEsImRpdiIsOSksdigpKCkpLDImbil7bGV0IGU9TSgpO3goNikscWUoIiAiLGUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3BfdHlwZSwiICIpLHgoNSkscWUoIiAiLG51bGw9PWUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDUpLHFlKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLm91dHB1dF90ZW5zb3JfaWRzPzA6ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDIpLHFlKCIgKGRlYnVnIG1vZGU6ICIsZS5UZW5zb3JEZWJ1Z01vZGVbZS50ZW5zb3JEZWJ1Z01vZGVdLCIpICIpLHgoMSksYigibmdJZiIsZS5oYXNEZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uICRPZShuLHQpe312YXIgWHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRlbnNvckRlYnVnTW9kZT16by5VTlNQRUNJRklFRCx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzPSExLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXM9bnVsbCx0aGlzLmRlYnVnVGVuc29yRHR5cGVzPW51bGwsdGhpcy5UZW5zb3JEZWJ1Z01vZGU9em8sdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9V0l9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiKSgyLCJzcGFuIiksRCgzKSx2KCkoKSxFKDQsSk9lLDIwLDUsImRpdiIsMSksRSg1LCRPZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDMpLHFlKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLHFJXSxzdHlsZXM6WycuZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSxufSkoKSxRdGU9IlVua25vd24gZHR5cGUiLEt0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oZ20pKSx0aGlzLnRlbnNvckRlYnVnTW9kZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/em8uVU5TUEVDSUZJRUQ6aS50ZW5zb3JfZGVidWdfbW9kZSkpKSx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShnbSxpPT57aWYobnVsbD09PWl8fG51bGw9PT1pLmRlYnVnX3RlbnNvcl92YWx1ZXMpcmV0dXJuITE7Zm9yKGxldCByIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsIT09ciYmci5sZW5ndGg+MClyZXR1cm4hMDtyZXR1cm4hMX0pKSksdGhpcy5kZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/bnVsbDppLmRlYnVnX3RlbnNvcl92YWx1ZXMpKSksdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzfHxpLnRlbnNvcl9kZWJ1Z19tb2RlIT09em8uRlVMTF9IRUFMVEgmJmkudGVuc29yX2RlYnVnX21vZGUhPT16by5TSEFQRSlyZXR1cm4gbnVsbDtsZXQgcj1bXTtmb3IobGV0IG8gb2YgaS5kZWJ1Z190ZW5zb3JfdmFsdWVzKWlmKG51bGw9PT1vKXIucHVzaChRdGUpO2Vsc2V7bGV0IHM9U3RyaW5nKGkudGVuc29yX2RlYnVnX21vZGU9PT16by5GVUxMX0hFQUxUSD9vWzJdOm9bMV0pO3IucHVzaChfd1tzXXx8UXRlKX1yZXR1cm4gcn0pKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4In0sZGVjbHM6Nix2YXJzOjE2LGNvbnN0czpbWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EYXRhIiwidGVuc29yRGVidWdNb2RlIiwiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yRHR5cGVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCkoImZvY3VzZWRFeGVjdXRpb25EYXRhIixXKDEsNixpLmZvY3VzZWRFeGVjdXRpb25EYXRhJCkpKCJ0ZW5zb3JEZWJ1Z01vZGUiLFcoMiw4LGkudGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsVygzLDEwLGkuaGFzRGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yVmFsdWVzIixXKDQsMTIsaS5kZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JEdHlwZXMiLFcoNSwxNCxpLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkZXBlbmRlbmNpZXM6W1h0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkscmtlPVsic2xpZGVyV3JhcHBlciJdLFBsPU5zKHtwYXNzaXZlOiExfSksY2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5UZCksbXVsdGk6ITB9LHVrZT1xcChwcyhnbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksImFjY2VudCIpKSxUZD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdWtle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWMsdGhpcy5faW52ZXJ0PSExLHRoaXMuX21heD0xMDAsdGhpcy5fbWluPTAsdGhpcy5fc3RlcD0xLHRoaXMuX3RodW1iTGFiZWw9ITEsdGhpcy5fdGlja0ludGVydmFsPTAsdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmlucHV0PW5ldyBHLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3BlcmNlbnQ9MCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9wb2ludGVyRG93bj11PT57dGhpcy5kaXNhYmxlZHx8dGhpcy5faXNTbGlkaW5nfHwhdncodSkmJjAhPT11LmJ1dHRvbnx8dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX3RvdWNoSWQ9dncodSk/ZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4udG91Y2hlcy5sZW5ndGg7ZSsrKXtsZXQgaT1uLnRvdWNoZXNbZV0udGFyZ2V0O2lmKHQ9PT1pfHx0LmNvbnRhaW5zKGkpKXJldHVybiBuLnRvdWNoZXNbZV0uaWRlbnRpZmllcn19KHUsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTp2b2lkIDA7bGV0IGQ9SnRlKHUsdGhpcy5fdG91Y2hJZCk7aWYoZCl7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9pc1NsaWRpbmc9InBvaW50ZXIiLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fb25Nb3VzZWVudGVyKCksdGhpcy5fYmluZEdsb2JhbEV2ZW50cyh1KSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9cCx1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX0pfSx0aGlzLl9wb2ludGVyTW92ZT11PT57aWYoInBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nKXtsZXQgZD1KdGUodSx0aGlzLl90b3VjaElkKTtpZihkKXt1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKTtsZXQgcD10aGlzLnZhbHVlO3RoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihkKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX19LHRoaXMuX3BvaW50ZXJVcD11PT57InBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nJiYoIXZ3KHUpfHwibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3RvdWNoSWR8fFc1KHUuY2hhbmdlZFRvdWNoZXMsdGhpcy5fdG91Y2hJZCkpJiYodS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5fdG91Y2hJZD12b2lkIDAsdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQhPXRoaXMudmFsdWUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpfSx0aGlzLl93aW5kb3dCbHVyPSgpPT57dGhpcy5fbGFzdFBvaW50ZXJFdmVudCYmdGhpcy5fcG9pbnRlclVwKHRoaXMuX2xhc3RQb2ludGVyRXZlbnQpfSx0aGlzLl9kb2N1bWVudD1sLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocyl8fDAsYS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCB1PWUubmF0aXZlRWxlbWVudDt1LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpfSl9Z2V0IGludmVydCgpe3JldHVybiB0aGlzLl9pbnZlcnR9c2V0IGludmVydChlKXt0aGlzLl9pbnZlcnQ9V3QoZSl9Z2V0IG1heCgpe3JldHVybiB0aGlzLl9tYXh9c2V0IG1heChlKXt0aGlzLl9tYXg9UGkoZSx0aGlzLl9tYXgpLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IG1pbigpe3JldHVybiB0aGlzLl9taW59c2V0IG1pbihlKXt0aGlzLl9taW49UGkoZSx0aGlzLl9taW4pLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcH1zZXQgc3RlcChlKXt0aGlzLl9zdGVwPVBpKGUsdGhpcy5fc3RlcCksdGhpcy5fc3RlcCUxIT0wJiYodGhpcy5fcm91bmRUb0RlY2ltYWw9dGhpcy5fc3RlcC50b1N0cmluZygpLnNwbGl0KCIuIikucG9wKCkubGVuZ3RoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgdGh1bWJMYWJlbCgpe3JldHVybiB0aGlzLl90aHVtYkxhYmVsfXNldCB0aHVtYkxhYmVsKGUpe3RoaXMuX3RodW1iTGFiZWw9V3QoZSl9Z2V0IHRpY2tJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90aWNrSW50ZXJ2YWx9c2V0IHRpY2tJbnRlcnZhbChlKXt0aGlzLl90aWNrSW50ZXJ2YWw9ImF1dG8iPT09ZT8iYXV0byI6Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGU/UGkoZSx0aGlzLl90aWNrSW50ZXJ2YWwpOjB9Z2V0IHZhbHVlKCl7cmV0dXJuIG51bGw9PT10aGlzLl92YWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5fbWluKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7aWYoZSE9PXRoaXMuX3ZhbHVlKXtsZXQgaT1QaShlLDApO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZpIT09dGhpcy5taW4mJmkhPT10aGlzLm1heCYmKGk9cGFyc2VGbG9hdChpLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9aSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKGUpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoZSl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtsZXQgaT10aGlzLnZlcnRpY2FsP2AxLCAkezEtdGhpcy5wZXJjZW50fSwgMWA6MS10aGlzLnBlcmNlbnQrIiwgMSwgMSI7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iLSI6IiJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7aX0pYH19X2dldFRyYWNrRmlsbFN0eWxlcygpe2xldCBlPXRoaXMucGVyY2VudCxyPXRoaXMudmVydGljYWw/YDEsICR7ZX0sIDFgOmAke2V9LCAxLCAxYDtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyIiOiItIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtyfSlgLGRpc3BsYXk6MD09PWU/Im5vbmUiOiIifX1fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKXtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/Ii0iOiIifSR7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudC8yKjEwMH0lKWB9fV9nZXRUaWNrc1N0eWxlcygpe2xldCBlPTEwMCp0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LGE9e2JhY2tncm91bmRTaXplOnRoaXMudmVydGljYWw/YDJweCAke2V9JWA6YCR7ZX0lIDJweGAsdHJhbnNmb3JtOmB0cmFuc2xhdGVaKDApIHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiLSJ9JHtlLzJ9JSkke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiIHJvdGF0ZSgxODBkZWcpIn1gfTtpZih0aGlzLl9pc01pblZhbHVlKCkmJnRoaXMuX2dldFRodW1iR2FwKCkpe2xldCBjLGw9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO2M9dGhpcy52ZXJ0aWNhbD9sPyJCb3R0b20iOiJUb3AiOmw/IlJpZ2h0IjoiTGVmdCIsYVtgcGFkZGluZyR7Y31gXT1gJHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4YH1yZXR1cm4gYX1fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKXtsZXQgZT10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlKT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybiJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlfV9nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57dGhpcy5faXNBY3RpdmU9ISFlJiYia2V5Ym9hcmQiIT09ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9kaXImJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5fZGlyLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9bnVsbCx0aGlzLl9yZW1vdmVHbG9iYWxFdmVudHMoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X29uTW91c2VlbnRlcigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCkpfV9vbkZvY3VzKCl7dGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpfV9vbkJsdXIoKXt0aGlzLm9uVG91Y2hlZCgpfV9vbktleWRvd24oZSl7aWYodGhpcy5kaXNhYmxlZHx8TXIoZSl8fHRoaXMuX2lzU2xpZGluZyYmImtleWJvYXJkIiE9PXRoaXMuX2lzU2xpZGluZylyZXR1cm47bGV0IGk9dGhpcy52YWx1ZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDMzOnRoaXMuX2luY3JlbWVudCgxMCk7YnJlYWs7Y2FzZSAzNDp0aGlzLl9pbmNyZW1lbnQoLTEwKTticmVhaztjYXNlIDM1OnRoaXMudmFsdWU9dGhpcy5tYXg7YnJlYWs7Y2FzZSAzNjp0aGlzLnZhbHVlPXRoaXMubWluO2JyZWFrO2Nhc2UgMzc6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8xOi0xKTticmVhaztjYXNlIDM4OnRoaXMuX2luY3JlbWVudCgxKTticmVhaztjYXNlIDM5OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/LTE6MSk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9pbmNyZW1lbnQoLTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWkhPXRoaXMudmFsdWUmJih0aGlzLl9lbWl0SW5wdXRFdmVudCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKSx0aGlzLl9pc1NsaWRpbmc9ImtleWJvYXJkIixlLnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXsia2V5Ym9hcmQiPT09dGhpcy5faXNTbGlkaW5nJiYodGhpcy5faXNTbGlkaW5nPW51bGwpfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fYmluZEdsb2JhbEV2ZW50cyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudCxyPXZ3KGUpLHM9cj8idG91Y2hlbmQiOiJtb3VzZXVwIjtpLmFkZEV2ZW50TGlzdGVuZXIocj8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxQbCksaS5hZGRFdmVudExpc3RlbmVyKHMsdGhpcy5fcG9pbnRlclVwLFBsKSxyJiZpLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsUGwpO2xldCBhPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBhPCJ1IiYmYSYmYS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1fcmVtb3ZlR2xvYmFsRXZlbnRzKCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCxQbCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAsUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxQbCk7bGV0IGk9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGk8InUiJiZpJiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQoZSl7bGV0IGk9dGhpcy5fY2xhbXAodGhpcy52YWx1ZXx8MCx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy52YWx1ZT10aGlzLl9jbGFtcChpK3RoaXMuc3RlcCplLHRoaXMubWluLHRoaXMubWF4KX1fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZSl7aWYoIXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBzPXRoaXMuX2NsYW1wKCgodGhpcy52ZXJ0aWNhbD9lLnk6ZS54KS0odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLnRvcDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLmxlZnQpKS8odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoKSk7aWYodGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSYmKHM9MS1zKSwwPT09cyl0aGlzLnZhbHVlPXRoaXMubWluO2Vsc2UgaWYoMT09PXMpdGhpcy52YWx1ZT10aGlzLm1heDtlbHNle2xldCBhPXRoaXMuX2NhbGN1bGF0ZVZhbHVlKHMpLGw9TWF0aC5yb3VuZCgoYS10aGlzLm1pbikvdGhpcy5zdGVwKSp0aGlzLnN0ZXArdGhpcy5taW47dGhpcy52YWx1ZT10aGlzLl9jbGFtcChsLHRoaXMubWluLHRoaXMubWF4KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy52YWx1ZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X2VtaXRJbnB1dEV2ZW50KCl7dGhpcy5pbnB1dC5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl7aWYoIXRoaXMudGlja0ludGVydmFsfHwhdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU7aWYoImF1dG8iPT10aGlzLnRpY2tJbnRlcnZhbCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoO2U9TWF0aC5jZWlsKDMwLyhpKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pKSkqdGhpcy5zdGVwL2l9ZWxzZSBlPXRoaXMudGlja0ludGVydmFsKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9WnRlKGUpP2U6MH1fY3JlYXRlQ2hhbmdlRXZlbnQoZT10aGlzLnZhbHVlKXtsZXQgaT1uZXcgY2xhc3N7fTtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLnZhbHVlPWUsaX1fY2FsY3VsYXRlUGVyY2VudGFnZShlKXtsZXQgaT0oKGV8fDApLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pO3JldHVybiBadGUoaSk/aTowfV9jYWxjdWxhdGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5taW4rZSoodGhpcy5tYXgtdGhpcy5taW4pfV9jbGFtcChlLGk9MCxyPTEpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKGUscikpfV9nZXRTbGlkZXJEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX3NsaWRlcldyYXBwZXI/dGhpcy5fc2xpZGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGx9X2ZvY3VzSG9zdEVsZW1lbnQoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9ibHVySG9zdEVsZW1lbnQoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoenIpLHcobm4pLHcoaXIsOCksS28oInRhYmluZGV4IiksdyhwdCksdyhCdCksdyhMaSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNsaWRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJrZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9zbGlkZXJXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInNsaWRlciIsMSwibWF0LXNsaWRlciIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoyOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uS2V5ZG93bihvKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25LZXl1cCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTW91c2VlbnRlcigpfSkoInNlbGVjdHN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksMiZlJiYoQWEoInRhYkluZGV4IixpLnRhYkluZGV4KSx6ZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImFyaWEtdmFsdWVtYXgiLGkubWF4KSgiYXJpYS12YWx1ZW1pbiIsaS5taW4pKCJhcmlhLXZhbHVlbm93IixpLnZhbHVlKSgiYXJpYS12YWx1ZXRleHQiLG51bGw9PWkudmFsdWVUZXh0P2kuZGlzcGxheVZhbHVlOmkudmFsdWVUZXh0KSgiYXJpYS1vcmllbnRhdGlvbiIsaS52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIiksYXQoIm1hdC1zbGlkZXItZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtc2xpZGVyLWhhcy10aWNrcyIsaS50aWNrSW50ZXJ2YWwpKCJtYXQtc2xpZGVyLWhvcml6b250YWwiLCFpLnZlcnRpY2FsKSgibWF0LXNsaWRlci1heGlzLWludmVydGVkIixpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJtYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHMiLGkuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkpKCJtYXQtc2xpZGVyLXNsaWRpbmciLGkuX2lzU2xpZGluZykoIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyIsaS50aHVtYkxhYmVsKSgibWF0LXNsaWRlci12ZXJ0aWNhbCIsaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItbWluLXZhbHVlIixpLl9pc01pblZhbHVlKCkpKCJtYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrIixpLmRpc2FibGVkfHxpLl9pc01pblZhbHVlKCkmJmkuX2dldFRodW1iR2FwKCkmJmkuX3Nob3VsZEludmVydEF4aXMoKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLGludmVydDoiaW52ZXJ0IixtYXg6Im1heCIsbWluOiJtaW4iLHN0ZXA6InN0ZXAiLHRodW1iTGFiZWw6InRodW1iTGFiZWwiLHRpY2tJbnRlcnZhbDoidGlja0ludGVydmFsIix2YWx1ZToidmFsdWUiLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsdmFsdWVUZXh0OiJ2YWx1ZVRleHQiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIixpbnB1dDoiaW5wdXQiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U2xpZGVyIl0sZmVhdHVyZXM6WyR0KFtja2VdKSx0dF0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsIm1hdC1zbGlkZXItd3JhcHBlciJdLFsic2xpZGVyV3JhcHBlciIsIiJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXIiXSxbMSwibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stZmlsbCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItZm9jdXMtcmluZyJdLFsxLCJtYXQtc2xpZGVyLXRodW1iIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwiXSxbMSwibWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSkoMiwiZGl2IiwyKSxOKDMsImRpdiIsMykoNCwiZGl2Iiw0KSx2KCksZyg1LCJkaXYiLDUpLE4oNiwiZGl2Iiw2KSx2KCksZyg3LCJkaXYiLDcpLE4oOCwiZGl2Iiw4KSg5LCJkaXYiLDkpLGcoMTAsImRpdiIsMTApKDExLCJzcGFuIiwxMSksRCgxMiksdigpKCkoKSgpKSwyJmUmJih4KDMpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrQmFja2dyb3VuZFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrRmlsbFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCkpLHgoMSksYigibmdTdHlsZSIsaS5fZ2V0VGlja3NTdHlsZXMoKSkseCgxKSxiKCJuZ1N0eWxlIixpLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSx4KDUpLHl0KGkuZGlzcGxheVZhbHVlKSl9LGRlcGVuZGVuY2llczpbd3BdLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVyey13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3std2Via2l0LWJhY2tncm91bmQtY2xpcDpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOmdyYWJ9Lm1hdC1zbGlkZXItdGh1bWJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7Ym90dG9tOi0xMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlcjozcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gWnRlKG4pe3JldHVybiFpc05hTihuKSYmaXNGaW5pdGUobil9ZnVuY3Rpb24gdncobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIEp0ZShuLHQpe2xldCBlO3JldHVybiBlPXZ3KG4pPyJudW1iZXIiPT10eXBlb2YgdD9XNShuLnRvdWNoZXMsdCl8fFc1KG4uY2hhbmdlZFRvdWNoZXMsdCk6bi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzWzBdOm4sZT97eDplLmNsaWVudFgseTplLmNsaWVudFl9OnZvaWQgMH1mdW5jdGlvbiBXNShuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0uaWRlbnRpZmllcj09PXQpcmV0dXJuIG5bZV19dmFyIGloPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkbixkbl19KSxufSkoKTtmdW5jdGlvbiBwa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtc2xpZGVyIiwxMSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVyQ2hhbmdlLmVtaXQoci52YWx1ZSkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJtaW4iLDApKCJtYXgiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQpKCJ2YWx1ZSIsZS5zY3JvbGxCZWdpbkluZGV4KX19ZnVuY3Rpb24gaGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSgxLCJidXR0b24iLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25OYXZpZ2F0ZUxlZnQuZW1pdCgpKX0pLEQoMiwiIDwgIiksdigpLGcoMywiZGl2Iiw4KSxEKDQpLHYoKSxnKDUsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk5hdmlnYXRlUmlnaHQuZW1pdCgpKX0pLEQoNiwiID4gIiksdigpLEUoNyxwa2UsMSwzLCJtYXQtc2xpZGVyIiwxMCksdigpfWlmKDImbil7bGV0IGU9TSgpO3goNCksV0UoIiAiLGUuc2Nyb2xsQmVnaW5JbmRleCwiIH4gIixlLnNjcm9sbEJlZ2luSW5kZXgrZS5kaXNwbGF5Q291bnQtMSwiIG9mICIsZS5udW1FeGVjdXRpb25zLCIgIikseCgzKSxiKCJuZ0lmIixlLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PjApfX12YXIgZmtlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm5bbix0LGVdfTtmdW5jdGlvbiBta2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChvKSl9KSxnKDEsImRpdiIsMTUpLEQoMiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDIpO3goMSkseHIoInRpdGxlIixlLm9wX3R5cGUpLGIoIm5nQ2xhc3MiLGtiKDMsZmtlLGUuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixpPT09ci5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixyLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tpXXx8IiIpKSx4KDEpLHFlKCIgIixlLnNob3J0X29wX3R5cGUsIiAiKX19ZnVuY3Rpb24gZ2tlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEyKSxFKDEsbWtlLDMsNywiZGl2IiwxMyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nRm9yT2YiLGUuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMpfX1mdW5jdGlvbiBfa2Uobix0KXtpZigxJm4mJihLdCgwKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIiwxNiksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGUuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19dmFyICR0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmVSdW5JZD1udWxsLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnM9ITEsdGhpcy5udW1FeGVjdXRpb25zPTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4PTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD0wLHRoaXMucGFnZVNpemU9MCx0aGlzLmRpc3BsYXlDb3VudD0wLHRoaXMuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM9W10sdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM9W10sdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhPW51bGwsdGhpcy5vbk5hdmlnYXRlTGVmdD1uZXcgRyx0aGlzLm9uTmF2aWdhdGVSaWdodD1uZXcgRyx0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZD1uZXcgRyx0aGlzLm9uU2xpZGVyQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0aW1lbGluZS1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVSdW5JZDoiYWN0aXZlUnVuSWQiLGxvYWRpbmdOdW1FeGVjdXRpb25zOiJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsbnVtRXhlY3V0aW9uczoibnVtRXhlY3V0aW9ucyIsc2Nyb2xsQmVnaW5JbmRleDoic2Nyb2xsQmVnaW5JbmRleCIsc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ6InNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixwYWdlU2l6ZToicGFnZVNpemUiLGRpc3BsYXlDb3VudDoiZGlzcGxheUNvdW50IixkaXNwbGF5RXhlY3V0aW9uRGlnZXN0czoiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLGRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlczoiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIn0sb3V0cHV0czp7b25OYXZpZ2F0ZUxlZnQ6Im9uTmF2aWdhdGVMZWZ0Iixvbk5hdmlnYXRlUmlnaHQ6Im9uTmF2aWdhdGVSaWdodCIsb25FeGVjdXRpb25EaWdlc3RDbGlja2VkOiJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLG9uU2xpZGVyQ2hhbmdlOiJvblNsaWRlckNoYW5nZSJ9LGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzEsInRpbWVsaW5lLXRpdGxlIl0sWzEsImV4ZWN1dGlvbi1jb3VudCJdLFsxLCJ0b3AtbGV2ZWwtZXhlY3V0aW9ucyJdLFsiY2xhc3MiLCJuYXZpZ2F0aW9uLXNlY3Rpb24iLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhlY3V0aW9uLXRpbWVsaW5lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibmF2aWdhdGlvbi1zZWN0aW9uIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1sZWZ0IiwzLCJjbGljayJdLFsxLCJuYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm8iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLXJpZ2h0IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ0aW1lbGluZS1zbGlkZXIiLCJzdGVwIiwiMSIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiJdLFsic3RlcCIsIjEiLDEsInRpbWVsaW5lLXNsaWRlciIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCJdLFsxLCJleGVjdXRpb24tdGltZWxpbmUiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJleGVjdXRpb24tZGlnZXN0IiwzLCJuZ0NsYXNzIiwidGl0bGUiXSxbMywiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSgxLCJkaXYiLDApLEQoMiwiIFB5dGhvbiBFeGVjdXRpb24gVGltZWxpbmUgIiksZygzLCJzcGFuIiwxKSxEKDQpLHYoKSgpLGcoNSwiZGl2IiwyKSxFKDYsaGtlLDgsNCwiZGl2IiwzKSxFKDcsZ2tlLDIsMSwiZGl2Iiw0KSxFKDgsX2tlLDIsMSwibmctY29udGFpbmVyIiw1KSx2KCkoKSksMiZlJiYoeCg0KSxxZSgiICgiLGkubnVtRXhlY3V0aW9ucywiKSAiKSx4KDIpLGIoIm5nSWYiLGkubnVtRXhlY3V0aW9ucykseCgxKSxiKCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuYWN0aXZlUnVuSWQmJm51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25JbmRleCkpfSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLEt0ZSwkbixUZF0sc3R5bGVzOlsiLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgY29sb3I6ICM0MjUwNjY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMHB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZnVuYy1ncmFwaC1leGVjdXRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZGJmNTtcbiAgY29sb3I6ICM0ZTU2NjQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ0YjM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5JbmZOYW5BbGVydFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuXG4uZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV06aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnRpbWVsaW5lLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogNDhweDtcbiAgbGVmdDogMzQwcHg7IFxuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA0MHB4O1xufVxuXG4gIC50aW1lbGluZS1zbGlkZXIgLm1hdC1zbGlkZXItdGh1bWIge1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHJpZ2h0OiAtNDBweDtcbiAgd2lkdGg6IDgwcHg7XG59XG5cblxuLm5hdmlnYXRpb24tcG9zaXRpb24taW5mb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm5hdmlnYXRpb24tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseWtlPVsiX19mb3J3YXJkXyIsIl9fYmFja3dhcmRfIiwiX19pbmZlcmVuY2VfIl0sZW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZShmbihtcykpLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihZKEhJLGk9Pmkuc3RhdGU9PUVlLkxPQURJTkcpKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oZncpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh0aCxsdiwoaSxyKT0+TWF0aC5tYXgoMCxpLXIpKSkpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShmbihhdikpLHRoaXMuZGlzcGxheUNvdW50JD10aGlzLnN0b3JlLnBpcGUoZm4obHYpKSx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShkdGUsaT0+aS5tYXAocj0+ZnVuY3Rpb24obix0PTEpe2lmKCFuKXJldHVybntvcF90eXBlOiIoTi9BKSIsc2hvcnRfb3BfdHlwZToiLi4iLGlzX2dyYXBoOiExfTtsZXQgZT15a2UuZmlsdGVyKGk9Pm4ub3BfdHlwZS5zdGFydHNXaXRoKGkpKTtpZihlLmxlbmd0aCl7bGV0IGk9bi5vcF90eXBlLnNsaWNlKGVbMF0ubGVuZ3RoKTtyZXR1cm57b3BfdHlwZTpuLm9wX3R5cGUsc2hvcnRfb3BfdHlwZTppLnNsaWNlKDAsdCksaXNfZ3JhcGg6ITB9fXJldHVybntvcF90eXBlOm4ub3BfdHlwZSxzaG9ydF9vcF90eXBlOm4ub3BfdHlwZS5zbGljZSgwLHQpLGlzX2dyYXBoOiExfX0ocikpKSkpLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJD10aGlzLnN0b3JlLnBpcGUoZm4oYnRlKSksdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShmbihMNSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKHh0ZSkpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKGZuKHRoKSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFpfKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSl8oKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZXYoe2Rpc3BsYXlJbmRleDplfSkpfW9uU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJF8oe2luZGV4OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLFAoIm9uTmF2aWdhdGVMZWZ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVMZWZ0KCl9KSgib25OYXZpZ2F0ZVJpZ2h0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVSaWdodCgpfSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKG8pfSkoIm9uU2xpZGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNsaWRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiYWN0aXZlUnVuSWQiLFcoMSwxMSxpLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsVygyLDEzLGkubG9hZGluZ051bUV4ZWN1dGlvbnMkKSkoIm51bUV4ZWN1dGlvbnMiLFcoMywxNSxpLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLFcoNCwxNyxpLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixXKDUsMTksaS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQpKSgicGFnZVNpemUiLFcoNiwyMSxpLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLFcoNywyMyxpLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFcoOCwyNSxpLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJCkpKCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLFcoOSwyNyxpLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixXKDEwLDI5LGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixXKDExLDMxLGkuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQpKX0sZGVwZW5kZW5jaWVzOlskdGUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIENrZShuLHQpezEmbiYmTigwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIpfWZ1bmN0aW9uIHdrZShuLHQpezEmbiYmKGcoMCwiZGl2IiwzKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyIpLGcoMiwiZGl2Iiw0KSxOKDMsInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIikoNCwidGYtZGVidWdnZXItdjItZ3JhcGgiKSx2KCksTig1LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIiksdigpLGcoNiwiZGl2Iiw1KSxOKDcsInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyIpKDgsInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIiksdigpKX12YXIgdG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJ1bnM9e30sdGhpcy5ydW5JZHM9W10sdGhpcy5hY3RpdmVSdW5JZD1udWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Z2dlci1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixydW5JZHM6InJ1bklkcyIsYWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIn0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZGVidWdnZXItY29udGFpbmVyIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZGF0YUF2YWlsYWJsZSIsIiJdLFsxLCJ0b3Atc2VjdGlvbiJdLFsxLCJ0b3AtY2VudGVyLXNlY3Rpb24iXSxbMSwiYm90dG9tLXNlY3Rpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCksRSgxLENrZSwxLDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIiwxKSxFKDIsd2tlLDksMCwibmctdGVtcGxhdGUiLG51bGwsMixlbiksdigpKSwyJmUpe2xldCByPXN0KDMpO3goMSksYigibmdJZiIsMD09PWkucnVuSWRzLmxlbmd0aCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRHRlLFhlLFB0ZSxrdGUsTnRlLFd0ZSxZdGUsZW5lXSxzdHlsZXM6WyIuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG5uZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJ1bnMkPXRoaXMuc3RvcmUucGlwZShmbihmbSkpLHRoaXMucnVuc0lkcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZm0saT0+T2JqZWN0LmtleXMoaSkpKSksdGhpcy5hY3RpdmVSdW5JZCQ9dGhpcy5zdG9yZS5waXBlKGZuKG1zKSl9bmdPbkluaXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF9JKCkpfW5nT25EZXN0cm95KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh2SSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bnMiLCJydW5JZHMiLCJhY3RpdmVSdW5JZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiZGVidWdnZXItY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSksMiZlJiZiKCJydW5zIixXKDEsMyxpLnJ1bnMkKSkoInJ1bklkcyIsVygyLDUsaS5ydW5zSWRzJCkpKCJhY3RpdmVSdW5JZCIsVygzLDcsaS5hY3RpdmVSdW5JZCQpKX0sZGVwZW5kZW5jaWVzOlt0bmUsZnRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdfSksbn0pKCksS0k9ImRlYnVnZ2VyLXYyIjtmdW5jdGlvbiBxNShuLHQsZSxpLHIpe2lmKGU8PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYWdlU2l6ZTogJHtlfWApO2lmKHQ+aSl0aHJvdyBuZXcgRXJyb3IoYGVuZCBpbmRleCAoJHt0fSkgZXhjZWVkcyB0b3RhbCBudW1iZXIgb2YgaXRlbXMgKCR7aX0pYCk7aWYodC1uPmUpdGhyb3cgbmV3IEVycm9yKCJiZWdpbi1lbmQgc3BhbiBleGNlZWRzIHBhZ2Ugc2l6ZSwgd2hpY2ggaXMgbm90IGFsbG93ZWQiKTtsZXQgbz1bXSxzPU1hdGguZmxvb3Iobi9lKTsoIShzIGluIHIpfHxyW3NdPGUmJnMqZStyW3NdPGkpJiZvLnB1c2gocyk7bGV0IGE9TWF0aC5mbG9vcigodC0xKS9lKTtyZXR1cm4gYSE9PXMmJighKGEgaW4gcil8fGEqZStyW2FdPHQmJnQ8aSkmJm8ucHVzaChhKSxvfXZhciBvbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmxvYWREYXRhJD1VcigoKT0+e2xldCBvPXRoaXMubG9hZERlYnVnZ2VyUnVucyh1bih0aGlzLm9uRGVidWdnZXJEYXRhUG9sbCgpLHRoaXMub25Db3JlUmVsb2FkKCkpKS5waXBlKFhzKCkpLHM9dGhpcy5sb2FkU291cmNlRmlsZUxpc3QobyksYT10aGlzLmNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihvKSxsPXRoaXMuY3JlYXRlTnVtQWxlcnRzQW5kQnJlYWtkb3duTG9hZGVyKG8pLGM9dGhpcy5vbkFsZXJ0VHlwZUZvY3VzZWQoKSx1PXRoaXMuZmV0Y2hFeGVjdXRpb25EaWdlc3RzRm9yQWxlcnRUeXBlRm9jdXMoYyksZD10aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihhKS5waXBlKFhzKCkpLHA9dGhpcy5jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIodW4odGhpcy5vbkV4ZWN1dGlvblNjcm9sbCgpLHRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRpZ2VzdChkKSx1KSksaD10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcih1bih0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpLGQucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QoQjUpKSxCKChbLHksSV0pPT4oe2FjdGl2ZVJ1bklkOnksbG9hZGVkRXhlY3V0aW9uRGF0YTpJLGZvY3VzSW5kZXg6MH0pKSkpKTtyZXR1cm4gdW4obCxwLGgsdGhpcy5jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihvKSxzLHRoaXMub25Tb3VyY2VGaWxlRm9jdXNlZCgpLHRoaXMubG9hZEdyYXBoRXhlY3V0aW9uUGFnZXModGhpcy5vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCkpLHRoaXMubG9hZEdyYXBoT3BTdGFja0ZyYW1lcyh0aGlzLmxvYWRHcmFwaE9wSW5mbygpKSkucGlwZShCKCgpPT4oe30pKSl9LHtkaXNwYXRjaDohMX0pfW9uRGVidWdnZXJEYXRhUG9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoX0kpLHZpKGU9PmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpLG8scj0hMSxzPSExLGE9ITEsbD0oKT0+YSYmcyYmKGUuY29tcGxldGUoKSwhMCksdT0oKT0+e2E9ITEsaT10LnN1YnNjcmliZShMdChlLHZvaWQgMCwoKT0+e2E9ITAsIWwoKSYmKG98fChvPW5ldyBUZSxuKG8pLnN1YnNjcmliZShMdChlLCgpPT57aT91KCk6cj0hMH0sKCk9PntzPSEwLGwoKX0pKSksbykubmV4dCgpfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLHI9ITEsdSgpKX07dSgpfSl9KGk9PmkucGlwZShHdCh0KSx2ZygoWyxyXSk9PnhhKHIpKSkpLG90KGUpLEIoKCk9Pnt9KSl9KGp0KGUpLHRoaXMuc3RvcmUuc2VsZWN0KHN0ZSkucGlwZShCKGk9PmZ1bmN0aW9uKG4pe3JldHVybiBuPjZlND82ZTQ6bj40ZTM/bjoyZTN9KGkpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKHZJKSkpKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChsdygpKSksQigoKT0+e30pKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gdW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKHdsLEhhKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKF91KSkucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLGVdKT0+ZS5zdGF0ZT09PUVlLk5PVF9MT0FERUR8fGUuc3RhdGU9PT1FZS5GQUlMRUQmJm51bGw9PT1lLmxhc3RMb2FkZWRUaW1lSW5NcykpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssZV0pPT5lPT09S0kpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGx3KCkpKSxCKCgpPT57fSkpfWxvYWREZWJ1Z2dlclJ1bnMoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLHtzdGF0ZTppfV0pPT5pIT09RWUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goeUkoKSkpLF9uKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShOdChpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChiSSh7cnVuczppfSkpfSksQigoKT0+e30pKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChISSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHdJKCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChNSSh7bnVtRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksQigoKT0+e30pKX0pKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChwdGUpKSxIZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChESSgpKSksX24oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChBSSh7bnVtR3JhcGhFeGVjdXRpb25zOmEubnVtX2RpZ2VzdHN9KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChQNSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKHIsMCwwKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhJKHtudW1BbGVydHM6YS5udW1fYWxlcnRzLGFsZXJ0c0JyZWFrZG93bjphLmFsZXJ0c19icmVha2Rvd259KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHRoKSx0aGlzLnN0b3JlLnNlbGVjdChodykpLEhlKChbLGkscl0pPT5pPjAmJjA9PT1PYmplY3Qua2V5cyhyLnBhZ2VMb2FkZWRTaXplcykubGVuZ3RoKSxCKCgpPT57fSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFssLGldKT0+bnVsbCE9PWkpLEIoKFssaSxyLG9dKT0+KHtiZWdpbjowLGVuZDpNYXRoLm1pbihpLG8pLHJ1bklkOnJ9KSkpfW9uRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaShaXyxKXywkXyksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGZ3KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobHYpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFtlXSk9Pm51bGwhPT1lKSxCKChbLGUsaSxyLG8sc10pPT4oe3J1bklkOmUsYmVnaW46aSxlbmQ6TWF0aC5taW4ocixpK28pLHBhZ2VTaXplOnN9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxCKChbZSxpXSk9Pih7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cTUoZS5iZWdpbixlLmVuZCxlLnBhZ2VTaXplLGkubnVtRXhlY3V0aW9ucyxpLnBhZ2VMb2FkZWRTaXplcyl9KSksSGUoKHttaXNzaW5nUGFnZXM6ZX0pPT5lLmxlbmd0aD4wKSxCKCh7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cn0pPT57bGV0e3J1bklkOm8scGFnZVNpemU6c309ZTtyZXR1cm57YmVnaW46clswXSpzLGVuZDpNYXRoLm1pbihpLm51bUV4ZWN1dGlvbnMsKHJbci5sZW5ndGgtMV0rMSkqcykscnVuSWQ6b319KSl9Y3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxIZSgoW3tiZWdpbjppLGVuZDpyfSxvXSk9PnI+aSYmIWZ1bmN0aW9uKG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybi0xIT09bi5maW5kSW5kZXgoaT0+aS5iZWdpbj49dCYmaS5lbmQ8PWUpfShvLmxvYWRpbmdSYW5nZXMsaSxyKSksTnQoKFt7YmVnaW46aSxlbmQ6cn1dKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goU0koe2JlZ2luOmksZW5kOnJ9KSl9KSxfbigoW3tydW5JZDppLGJlZ2luOnIsZW5kOm99XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoaSxyLG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRUkocykpfSksQigoKT0+e30pKSkpfW9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoZXYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChCNSksdGhpcy5zdG9yZS5zZWxlY3QoZncpKSxCKChbZSxpLHIsb10pPT4oe2FjdGl2ZVJ1bklkOmksbG9hZGVkRXhlY3V0aW9uRGF0YTpyLGZvY3VzSW5kZXg6bytlLmRpc3BsYXlJbmRleH0pKSl9Y3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoSGUoKHthY3RpdmVSdW5JZDppLGxvYWRlZEV4ZWN1dGlvbkRhdGE6cixmb2N1c0luZGV4Om99KT0+bnVsbCE9PWkmJm51bGwhPT1vJiZ2b2lkIDA9PT1yW29dKSxfbigoe2FjdGl2ZVJ1bklkOmksZm9jdXNJbmRleDpyfSk9PntsZXQgbz1yLHM9bysxO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EYXRhKGksbyxzKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRJKGEpKX0pLEIoYT0+KHtleGVjdXRpb25EYXRhOmEsYmVnaW46byxlbmQ6c30pKSl9KSxCKCh7ZXhlY3V0aW9uRGF0YTppfSk9PmkuZXhlY3V0aW9uc1swXSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksSGUoKFtpLHIsb10pPT57aWYobnVsbD09PXIpcmV0dXJuITE7Zm9yKGxldCBzIG9mIGkuc3RhY2tfZnJhbWVfaWRzKWlmKHZvaWQgMD09PW9bc10pcmV0dXJuITA7cmV0dXJuITF9KSxfbigoW2kscl0pPT57bGV0IG89aS5zdGFja19mcmFtZV9pZHM7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKHIsbykucGlwZShOdChzPT57bGV0IGE9e307Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDsrK2wpYVtvW2xdXT1zLnN0YWNrX2ZyYW1lc1tsXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczphfSkpfSksQigoKT0+e30pKX0pKX1vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaSh0diksQXIoMTAwKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QobXcpLHRoaXMuc3RvcmUuc2VsZWN0KGh0ZSkpLEhlKChbLGUsaV0pPT5udWxsIT09ZSYmaT4wKSxCKChbLGUsaSxyXSk9Pih7cnVuSWQ6ZSxudW1HcmFwaEV4ZWN1dGlvbnM6aSxzY3JvbGxCZWdpbkluZGV4OnJ9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXRlKSx0aGlzLnN0b3JlLnNlbGVjdChmdGUpLHRoaXMuc3RvcmUuc2VsZWN0KGd0ZSksdGhpcy5zdG9yZS5zZWxlY3QoX3RlKSksQigoW3tydW5JZDplLG51bUdyYXBoRXhlY3V0aW9uczppLHNjcm9sbEJlZ2luSW5kZXg6cn0sbyxzLGEsbF0pPT57bGV0IGM9cTUocixNYXRoLm1pbihyK3MsaSksbyxpLGwpO3JldHVybiBjPWMuZmlsdGVyKHU9Pi0xPT09YS5pbmRleE9mKHUpKSx7cnVuSWQ6ZSxtaXNzaW5nUGFnZXM6YyxwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczppfX0pKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyhlKXtyZXR1cm4gZS5waXBlKEhlKCh7bWlzc2luZ1BhZ2VzOml9KT0+aS5sZW5ndGg+MCksTnQoKHttaXNzaW5nUGFnZXM6aX0pPT57aS5mb3JFYWNoKHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKElJKHtwYWdlSW5kZXg6cn0pKX0pfSksX24oKHtydW5JZDppLG1pc3NpbmdQYWdlczpyLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOnN9KT0+e2xldCBhPXJbMF0qbyxsPU1hdGgubWluKChyW3IubGVuZ3RoLTFdKzEpKm8scyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShpLGEsbCkucGlwZShOdChjPT57dGhpcy5zdG9yZS5kaXNwYXRjaChQSShjKSl9KSxCKCgpPT57fSkpfSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoaXYsbnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChDdGUpKSxIZSgoW2UsaSxyXSk9PntsZXR7Z3JhcGhfaWQ6byxvcF9uYW1lOnN9PWU7cmV0dXJuIShudWxsPT09aXx8dm9pZCAwIT09cltvXSYmcltvXS5oYXMocykmJihyW29dLmdldChzKT09PUVlLkxPQURJTkd8fHJbb10uZ2V0KHMpPT09RWUuTE9BREVEKSl9KSxOdCgoW3tncmFwaF9pZDplLG9wX25hbWU6aX1dKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChSSSh7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9KSkpLF9uKChbZSxpXSk9PntsZXR7Z3JhcGhfaWQ6cixvcF9uYW1lOm99PWU7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoT3BJbmZvKGkscixvKS5waXBlKE50KHM9PnRoaXMuc3RvcmUuZGlzcGF0Y2goT0koe2dyYXBoT3BJbmZvUmVzcG9uc2U6c30pKSksQihzPT4oe3J1bklkOmksc3RhY2tGcmFtZUlkczpzLnN0YWNrX2ZyYW1lX2lkc30pKSl9KSl9bG9hZEdyYXBoT3BTdGFja0ZyYW1lcyhlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksQigoW3tydW5JZDppLHN0YWNrRnJhbWVJZHM6cn0sb10pPT4oe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6ci5maWx0ZXIoYT0+dm9pZCAwPT09b1thXSl9KSksSGUoKHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnJ9KT0+bnVsbCE9PWkmJnIubGVuZ3RoPjApLF9uKCh7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKGkscikucGlwZShOdChvPT57bGV0IHM9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDsrK2Epc1tyW2FdXT1vLnN0YWNrX2ZyYW1lc1thXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczpzfSkpfSksQigoKT0+e30pKSkpfW9uQWxlcnRUeXBlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoS18pLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChWSSksdGhpcy5zdG9yZS5zZWxlY3QobHRlKSx0aGlzLnN0b3JlLnNlbGVjdChjdGUpLHRoaXMuc3RvcmUuc2VsZWN0KFA1KSksSGUoKFssZSxpLHIsbyxzXSk9Pm51bGwhPT1lJiZudWxsIT09aSYmcj4wJiYobnVsbD09PW98fE9iamVjdC5rZXlzKG8pLmxlbmd0aDxyKSYmcy5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxlLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKGUsMCwtMSxpKSksTnQoKHtudW1fYWxlcnRzOmUsYWxlcnRzX2JyZWFrZG93bjppLGFsZXJ0X3R5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENJKHtudW1BbGVydHM6ZSxhbGVydHNCcmVha2Rvd246aSxhbGVydFR5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSkpfSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoYXYpLHRoaXMuc3RvcmUuc2VsZWN0KGx2KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QoaHcpLHRoaXMuc3RvcmUuc2VsZWN0KG1zKSksQigoW2kscixvLHMsYSxsXSk9PntsZXQgdT1pLmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgsZD1xNShNYXRoLm1heCgwLHUtTWF0aC5mbG9vcihvLzIpKSxNYXRoLm1pbih1K01hdGguZmxvb3Ioby8yKSxzKSxyLHMsYS5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09ZC5sZW5ndGg/e3J1bklkOmwsYmVnaW46MCxlbmQ6MH06e3J1bklkOmwsYmVnaW46ZFswXSpyLGVuZDpNYXRoLm1pbihhLm51bUV4ZWN1dGlvbnMsKGRbZC5sZW5ndGgtMV0rMSkqcil9fSkpfWxvYWRTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChNdGUpKSxIZSgoWyxpLHJdKT0+bnVsbCE9PWkmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChrSSgpKSksX24oKFssaV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlTGlzdChpKS5waXBlKE50KHI9PntsZXQgbz1bXTtyLmZvckVhY2goKFtzLGFdKT0+e28ucHVzaCh7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmF9KX0pLHRoaXMuc3RvcmUuZGlzcGF0Y2goRkkoe3NvdXJjZUZpbGVzOm99KSl9KSxCKCgpPT57fSkpKSl9b25Tb3VyY2VGaWxlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkocnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChINSksdGhpcy5zdG9yZS5zZWxlY3QoakkpKSxCKChbZSxpLHIsb10pPT4oe3J1bklkOmksc3RhY2tGcmFtZTplLnN0YWNrRnJhbWUsZmlsZUluZGV4OnIsZmlsZUNvbnRlbnQ6b30pKSxIZSgoe3J1bklkOmUsZmlsZUNvbnRlbnQ6aX0pPT5udWxsIT09ZSYmbnVsbCE9PWkmJmkubG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRCksTnQoKHtzdGFja0ZyYW1lOmV9KT0+dGhpcy5zdG9yZS5kaXNwYXRjaChOSSh7aG9zdF9uYW1lOmUuaG9zdF9uYW1lLGZpbGVfcGF0aDplLmZpbGVfcGF0aH0pKSksX24oKHtmaWxlSW5kZXg6ZSxydW5JZDppfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGUoaSxlKS5waXBlKE50KHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKExJKHIpKX0pLEIoKCk9Pnt9KSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihnSSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHNuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksYW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZV19KSxufSkoKSxaST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksbG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxaSSxDZF19KSxufSkoKSxjbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHJoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxKST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UscmhdfSksbn0pKCksdW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxKSV19KSxufSkoKSxkbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLEpJXX0pLG59KSgpLHBuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsWkldfSksbn0pKCksaG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxwbmUsUmksaWhdfSksbn0pKCksZm5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltzbmUsa2UsTWwsbG5lLGFuZSxjbmUsdW5lLGRuZSxldGUsaG5lLFJyLmZvckZlYXR1cmUoZHcsb3RlKSxMby5mb3JGZWF0dXJlKFtvbmVdKSxSdS5mb3JQbHVnaW4oS0ksbm5lKV19KSxufSkoKSwkST13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBDbG9zZWQiKSxlUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBUb2dnbGVkIiksdFA9d2UoIltNZXRyaWNzXSBTbGlkZSBvdXQgc2V0dGluZ3MgbWVudSB0b2dnbGVkIiksblA9d2UoIltNZXRyaWNzXSBVc2VyIHJlcXVlc3RlZCB0byBvcGVuIHRoZSBzbGlkZSBvdXQgbWVudSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlQPXdlKCJbTWV0cmljc10gVXNlciBjaGFuZ2VkIHRoZSB0YWIgaW4gdGhlIHRhYmxlIGVkaXRvciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHJQPXdlKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgY2xvc2VkIiksb1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBSZXF1ZXN0ZWQiKSxzUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgRmFpbGVkIiksbFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIENhcmQgU3RhdGUgVXBkYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGN2PXdlKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIEZ1bGwgU2l6ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIENoYW5nZSBUb29sdGlwIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdVA9KHdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBUb2dnbGUgU2hvdyBEYXRhIERvd25sb2FkIiksd2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgVG9nZ2xlIElnbm9yZSBPdXRsaWVyIikpLGRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBDYXJkIFdpZHRoIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUmVzZXQgQ2FyZCBXaWR0aCIpLGZQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbVA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksZ1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2UD13ZSgiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLHlQPXdlKCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLGJQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIikseFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ1A9d2UoIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3UD13ZSgiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTVA9d2UoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx1dj13ZSgiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1A9d2UoIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxFUD13ZSgiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdj13ZSgiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxEUD13ZSgiW01ldHJpY3NdIFRvZ2dsZSBWaXNpYmxlIFBsdWdpbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEFQPXdlKCJbTWV0cmljc10gVG9nZ2xlIFNob3cgQWxsIFBsdWdpbnMiKSxvaD13ZSgiW01ldHJpY3NdIFRpbWUgU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUD13ZSgiW01ldHJpY3NdIENhcmQgVmlldyBCb3ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1uZT13ZSgiW01ldHJpY3NdIExpbmtlZCBUaW1lIFNlbGVjdGlvbiBDbGVhcmVkIiksUFA9d2UoIltNZXRyaWNzXSBMaW5rZWQgVGltZSBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ25lPXdlKCJbTWV0cmljc10gU29ydGluZyBEYXRhIFRhYmxlIEJ5IEhlYWRlciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHB2PXdlKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSUD13ZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc2g9d2UoIltNZXRyaWNzXSBUaW1lIFNlbGVjdG9yIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPUD13ZSgiW01ldHJpY3NdIFJhbmdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX25lPXdlKCJbTWV0cmljc10gSGlkZSBFbXB0eSBDYXJkcyBDaGFuZ2VkIik7ZnVuY3Rpb24geXcobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIEdvPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uU0VUVElOR1NfVEVYVD0ic2V0dGluZ3NUZXh0IixuLlNFVFRJTkdTX1NMSURFUj0ic2V0dGluZ3NTbGlkZXIiLG4uQ0hBTkdFX1RPX1NJTkdMRT0iY2hhbmdlVG9TaW5nbGUiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KEdvfHwoR289e30pKSxHbykpKCksV2E9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShXYXx8KFdhPXt9KSksV2EpKSgpLFZzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0oVnN8fChWcz17fSkpLFZzKSkoKTtmdW5jdGlvbiBrUChuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9PmJ3KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUFrZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gQWtlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiBidyhuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYodm0obltlXSkmJnZtKHRbaV0pKXtsZXQgcj1lLG89aTtlPXZuZShuLGUrMSksaT12bmUodCxpKzEpO2xldCBzPU51bWJlcihuLnNsaWNlKHIsZSkpLGE9TnVtYmVyKHQuc2xpY2UobyxpKSk7aWYoczxhKXJldHVybi0xO2lmKHM+YSlyZXR1cm4gMX1lbHNle2lmKFk1KG5bZV0pKXtpZighWTUodFtpXSkpcmV0dXJuLTF9ZWxzZXtpZihZNSh0W2ldKSlyZXR1cm4gMTtpZihuW2VdPHRbaV0pcmV0dXJuLTE7aWYobltlXT50W2ldKXJldHVybiAxfWUrKyxpKyt9fX1mdW5jdGlvbiB2bmUobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighdm0obltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIXZtKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIXZtKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhdm0obltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gdm0obil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gWTUobil7cmV0dXJuIi8iPT09bnx8dm0obil9dmFyIGZ2PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oZnZ8fChmdj17fSkpLGZ2KSkoKSxtdD0oKCk9PihmdW5jdGlvbihuKXtuLkNPTE9SPSJDT0xPUiIsbi5SRUxBVElWRV9USU1FPSJSRUxBVElWRV9USU1FIixuLlJVTj0iUlVOIixuLlNURVA9IlNURVAiLG4uVElNRT0iVElNRSIsbi5WQUxVRT0iVkFMVUUiLG4uU01PT1RIRUQ9IlNNT09USEVEIixuLlZBTFVFX0NIQU5HRT0iVkFMVUVfQ0hBTkdFIixuLlNUQVJUX1NURVA9IlNUQVJUX1NURVAiLG4uRU5EX1NURVA9IkVORF9TVEVQIixuLlNUQVJUX1ZBTFVFPSJTVEFSVF9WQUxVRSIsbi5FTkRfVkFMVUU9IkVORF9WQUxVRSIsbi5NSU5fVkFMVUU9Ik1JTl9WQUxVRSIsbi5NQVhfVkFMVUU9Ik1BWF9WQUxVRSIsbi5QRVJDRU5UQUdFX0NIQU5HRT0iUEVSQ0VOVEFHRV9DSEFOR0UiLG4uU1RFUF9BVF9NQVg9IlNURVBfQVRfTUFYIixuLlNURVBfQVRfTUlOPSJTVEVQX0FUX01JTiIsbi5NRUFOPSJNRUFOIixuLlJBV19DSEFOR0U9IlJBV19DSEFOR0UifShtdHx8KG10PXt9KSksbXQpKSgpLF9vPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TSU5HTEU9MF09IlNJTkdMRSIsbltuLlJBTkdFPTFdPSJSQU5HRSJ9KF9vfHwoX289e30pKSxfbykpKCkscWE9KCgpPT4oZnVuY3Rpb24obil7bltuLkFTQ0VORElORz0wXT0iQVNDRU5ESU5HIixuW24uREVTQ0VORElORz0xXT0iREVTQ0VORElORyJ9KHFhfHwocWE9e30pKSxxYSkpKCk7ZnVuY3Rpb24gWDUobix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9X2QoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIFBrZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPVg1KG8sbixlKTtpZihudWxsPT09cyljb250aW51ZTtsZXQgYT10Lmhhc093blByb3BlcnR5KG8pP3Rbb10uaW5kZXg6bnVsbCxsPVg1KG8sbixpKSxjPW51bGwhPT1hJiZhPT09bDsobnVsbCE9PWEmJmE+c3x8bnVsbD09PWF8fGMpJiYocltvXT17aW5kZXg6cyxpc0Nsb3Nlc3Q6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiB5bmUobil7bGV0IHQ9eXcobi5ydW5Ub0xvYWRTdGF0ZSxlPT5lPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQpO3JldHVybnsuLi5uLHJ1blRvTG9hZFN0YXRlOnR9fWZ1bmN0aW9uIGJuZShuLHQsZSxpKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW24sdCxlfHwiIixpXSl9dmFye2luaXRpYWxTdGF0ZTpDbmUscmVkdWNlcnM6UmtlfT1ZZih7dGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRUb1Bpbm5lZENvcHk6bmV3IE1hcCxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6bmV3IE1hcCxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuZXcgTWFwLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOltdLGNhcmRNZXRhZGF0YU1hcDp7fSxjYXJkU3RhdGVNYXA6e30sY2FyZFN0ZXBJbmRleDp7fSx0YWdGaWx0ZXI6IiIsdGFnR3JvdXBFeHBhbmRlZDpuZXcgTWFwLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbCxsaW5rZWRUaW1lRW5hYmxlZDohMSxzdGVwU2VsZWN0b3JFbmFibGVkOiExLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDohMSxzaW5nbGVTZWxlY3Rpb25IZWFkZXJzOlt7dHlwZTptdC5SVU4sbmFtZToicnVuIixkaXNwbGF5TmFtZToiUnVuIixlbmFibGVkOiEwfSx7dHlwZTptdC5TTU9PVEhFRCxuYW1lOiJzbW9vdGhlZCIsZGlzcGxheU5hbWU6IlNtb290aGVkIixlbmFibGVkOiEwfSx7dHlwZTptdC5WQUxVRSxuYW1lOiJ2YWx1ZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5TVEVQLG5hbWU6InN0ZXAiLGRpc3BsYXlOYW1lOiJTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5SRUxBVElWRV9USU1FLG5hbWU6InJlbGF0aXZlIixkaXNwbGF5TmFtZToiUmVsYXRpdmUiLGVuYWJsZWQ6ITB9XSxyYW5nZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOm10LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1JTl9WQUxVRSxuYW1lOiJtaW4iLGRpc3BsYXlOYW1lOiJNaW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1BWF9WQUxVRSxuYW1lOiJtYXgiLGRpc3BsYXlOYW1lOiJNYXgiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNUQVJUX1ZBTFVFLG5hbWU6InN0YXJ0IixkaXNwbGF5TmFtZToiU3RhcnQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LkVORF9WQUxVRSxuYW1lOiJlbmQiLGRpc3BsYXlOYW1lOiJFbmQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlZBTFVFX0NIQU5HRSxuYW1lOiJ2YWx1ZUNoYW5nZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5QRVJDRU5UQUdFX0NIQU5HRSxuYW1lOiJwZXJjZW50YWdlQ2hhbmdlIixkaXNwbGF5TmFtZToiJSIsZW5hYmxlZDohMH0se3R5cGU6bXQuU1RBUlRfU1RFUCxuYW1lOiJzdGFydFN0ZXAiLGRpc3BsYXlOYW1lOiJTdGFydCBTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5FTkRfU1RFUCxuYW1lOiJlbmRTdGVwIixkaXNwbGF5TmFtZToiRW5kIFN0ZXAiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNURVBfQVRfTUFYLG5hbWU6InN0ZXBBdE1heCIsZGlzcGxheU5hbWU6IlN0ZXAgQXQgTWF4IixlbmFibGVkOiExfSx7dHlwZTptdC5TVEVQX0FUX01JTixuYW1lOiJzdGVwQXRNaW4iLGRpc3BsYXlOYW1lOiJTdGVwIEF0IE1pbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuTUVBTixuYW1lOiJtZWFuIixkaXNwbGF5TmFtZToiTWVhbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuUkFXX0NIQU5HRSxuYW1lOiJyYXdDaGFuZ2UiLGRpc3BsYXlOYW1lOiJSYXciLGVuYWJsZWQ6ITF9XSxmaWx0ZXJlZFBsdWdpblR5cGVzOm5ldyBTZXQsc3RlcE1pbk1heDp7bWluOjEvMCxtYXg6LTEvMH19LHtpc1NldHRpbmdzUGFuZU9wZW46ITAsaXNTbGlkZW91dE1lbnVPcGVuOiExLHRhYmxlRWRpdG9yU2VsZWN0ZWRUYWI6X28uU0lOR0xFLHRpbWVTZXJpZXNEYXRhOntzY2FsYXJzOnt9LGhpc3RvZ3JhbXM6e30saW1hZ2VzOnt9fSxzZXR0aW5nczpxRCxzZXR0aW5nT3ZlcnJpZGVzOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9LChuLHQsZSk9PnVzKHQsZSk/bjp7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZE1ldGFkYXRhTWFwOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9KSxRNT1DbmUsT2tlPXdyKENuZSxTZShLMCwobix7cm91dGVLaW5kOnQscGFydGlhbFN0YXRlOmV9KT0+e2lmKHQhPT1maS5FWFBFUklNRU5UJiZ0IT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybiBuO2xldCBpPW5ldyBTZXQ7Zm9yKGxldCB1IG9mIG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwua2V5cygpKXtsZXR7cGx1Z2luOmQsdGFnOnAscnVuSWQ6aCxzYW1wbGU6Zn09bi5jYXJkTWV0YWRhdGFNYXBbdV07aS5hZGQoYm5lKGQscCxoLGYpKX1sZXQgcj1lLG89W107Zm9yKGxldCB1IG9mWy4uLm4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsLi4uci5tZXRyaWNzLnBpbm5lZENhcmRzXSl7bGV0IGQ9Ym5lKHUucGx1Z2luLHUudGFnLHUucnVuSWQsdS5zYW1wbGUpO2kuaGFzKGQpfHwoaS5hZGQoZCksby5wdXNoKHUpKX1sZXQgcz12VihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxhPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKGEpJiZudWxsIT09YSl7bGV0IHU9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihhLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dX19bGV0IGM9ey4uLm4sLi4ucyxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMobW8pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQscz10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLGE9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOnMsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczphLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLFNlKEhhLHdsLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQsZT15dyhuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT55dyhpLG89PlVhKHIpP3l3KG8scz0+eW5lKHMpKTp5bmUobykpKTtyZXR1cm57Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTp0fSx0aW1lU2VyaWVzRGF0YTplfX0pLFNlKG9QLG49Pih7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FESU5HfX0pKSxTZShhUCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6RWUuRkFJTEVEfX0pKSxTZShzUCwobix7dGFnTWV0YWRhdGE6dH0pPT57bGV0IGU9e3NjYWxhcnM6eG5lKHQsV24uU0NBTEFSUyksaGlzdG9ncmFtczp4bmUodCxXbi5ISVNUT0dSQU1TKSxpbWFnZXM6dFtXbi5JTUFHRVNdfSxpPXt9LHI9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcixpPWU7aWYoVWEoaSkpe2lmKCF6YShpKSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXJ1biwgc2FtcGxlZCBwbHVnaW4gc3VwcG9ydCBub3QgeWV0IGltcGxlbWVudGVkIik7e2xldCBvPW5baV0udGFnUnVuU2FtcGxlZEluZm87Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKG8pKWZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvW3NdKSl7bGV0e21heFNhbXBsZXNQZXJTdGVwOmx9PW9bc11bYV07Zm9yKGxldCBjPTA7YzxsO2MrKyl0LnB1c2goe3BsdWdpbjppLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmMsbnVtU2FtcGxlOmx9KX19fWVsc2UgaWYoemEoaSkpe3I9bltpXS50YWdUb1J1bnM7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHIpKWZvcihsZXQgcyBvZiByW29dKXQucHVzaCh7cGx1Z2luOmksdGFnOm8scnVuSWQ6c30pfWVsc2V7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDpudWxsfSl9fXJldHVybiB0fShlKSxvPVtdO2ZvcihsZXQgaCBvZiByKXtsZXQgZj1fVihoKTtpW2ZdPWgsby5wdXNoKGYpfWxldCBzPW4udGFnR3JvdXBFeHBhbmRlZDtpZigwPT09bi50YWdHcm91cEV4cGFuZGVkLnNpemUpe2xldCBmPWtQKG8ubWFwKG09Pih7Li4uaVttXSxjYXJkSWQ6bX0pKS5maWx0ZXIoQm9vbGVhbikpO3M9bmV3IE1hcChuLnRhZ0dyb3VwRXhwYW5kZWQpO2ZvcihsZXQgbSBvZiBmLnNsaWNlKDAsMikpcy5zZXQobS5ncm91cE5hbWUsITApfWxldHtuZXh0Q2FyZFRvUGlubmVkQ29weTphLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpsLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpjfT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IE1hcCxyPW5ldyBNYXAsbz17fTtyZXR1cm4gbi5mb3JFYWNoKChzLGEpPT57LTEhPT1lLmluZGV4T2YoYSkmJihpLnNldChhLHMpLHIuc2V0KHMsYSksb1tzXT10W2FdKX0pLHtuZXh0Q2FyZFRvUGlubmVkQ29weTppLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpyLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpvfX0obi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsaSxvKSx1PXsuLi5pLC4uLmN9LGQ9ZnVuY3Rpb24obix0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW2kscl0pPT57dFtpXSYmKGVbaV09cil9KSxlfShuLmNhcmRTdGVwSW5kZXgsdSkscD12VihuLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLG8sdSxhLG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLGwsZCxuLmNhcmRTdGF0ZU1hcCk7cmV0dXJuey4uLm4sLi4ucCx0YWdHcm91cEV4cGFuZGVkOnMsdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sdGFnTWV0YWRhdGE6ZSxjYXJkTGlzdDpvfX0pLFNlKGxQLChuLHtjYXJkSWQ6dCxzZXR0aW5nczplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLC4uLmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKGN2LChuLHtjYXJkSWQ6dH0pPT57bGV0IGU9ey4uLm4uY2FyZFN0YXRlTWFwfTtyZXR1cm4gZVt0XT17Li4uZVt0XSxmdWxsV2lkdGg6IWVbdF0/LmZ1bGxXaWR0aCx0YWJsZUV4cGFuZGVkOiFlW3RdPy5mdWxsV2lkdGh9LHsuLi5uLGNhcmRTdGF0ZU1hcDplfX0pLFNlKEVQLChuLHt0YWdGaWx0ZXI6dH0pPT4oey4uLm4sdGFnRmlsdGVyOnR9KSksU2UoY1AsKG4se3NvcnQ6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHRvb2x0aXBTb3J0OnR9fSkpLFNlKHVQLG49PntsZXQgdD0hKG4uc2V0dGluZ092ZXJyaWRlcy5pZ25vcmVPdXRsaWVycz8/bi5zZXR0aW5ncy5pZ25vcmVPdXRsaWVycyk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGlnbm9yZU91dGxpZXJzOnR9fX0pLFNlKGRQLChuLHt4QXhpc1R5cGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHhBeGlzVHlwZTp0fX0pKSxTZShmUCwobix7c21vb3RoaW5nOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dH19KSksU2UobVAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g/P24uc2V0dGluZ3Muc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6dH19fSksU2UoZ1AsKG4se2JyaWdodG5lc3NJbk1pbGxpOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnR9fSkpLFNlKF9QLChuLHtjb250cmFzdEluTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQ29udHJhc3RJbk1pbGxpOnR9fSkpLFNlKHZQLG49PntsZXR7aW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoeVAsbj0+e2xldHtpbWFnZUNvbnRyYXN0SW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoYlAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmltYWdlU2hvd0FjdHVhbFNpemU/P24uc2V0dGluZ3MuaW1hZ2VTaG93QWN0dWFsU2l6ZSk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlU2hvd0FjdHVhbFNpemU6dH19fSksU2UoeFAsKG4se2hpc3RvZ3JhbU1vZGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpc3RvZ3JhbU1vZGU6dH19KSksU2UocFAsKG4se2NhcmRNaW5XaWR0aDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOnR9fSkpLFNlKGhQLG49Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOm51bGx9fSkpLFNlKF9uZSxuPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpZGVFbXB0eUNhcmRzOiFuLnNldHRpbmdPdmVycmlkZXMuaGlkZUVtcHR5Q2FyZHN9fSkpLFNlKENQLChuLHtyZXF1ZXN0czp0fSk9PntpZighdC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4udGltZVNlcmllc0RhdGF9O2ZvcihsZXQgaSBvZiB0KXtsZXR7cGx1Z2luOnIsdGFnOm8sc2FtcGxlOnN9PWk7ZVtyXT1ZRChlLHIsbyxzKTtsZXQgYT1fZChlLHIsbyxzKSxsPXVWKGkpP1tpLnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLHIsbyxzKTthLnJ1blRvTG9hZFN0YXRlPVhEKEVlLkxPQURJTkcsbCxhLnJ1blRvTG9hZFN0YXRlKX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKHdQLChuLHtyZXF1ZXN0OnR9KT0+e2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfSx7cGx1Z2luOmksdGFnOnIsc2FtcGxlOm99PXQ7ZVtpXT1ZRChlLGkscixvKTtsZXQgcz1fZChlLGkscixvKSxhPXVWKHQpP1t0LnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLGkscixvKTtyZXR1cm4gcy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsYSxzLnJ1blRvTG9hZFN0YXRlKSx7Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKE1QLChuLHtyZXNwb25zZTp0fSk9PntsZXQgZT17Li4ubi5zdGVwTWluTWF4fSxpPXsuLi5uLmNhcmRTdGF0ZU1hcH0scj17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjpvLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmx9PXQ7cltvXT1ZRChyLG8scyxsKTtsZXQgYz1fZChyLG8scyxsKTtpZihIRCh0KSl7bGV0IGQ9YT9bYV06cF8obi50YWdNZXRhZGF0YSxvLHMsbCk7Yy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsZCxjLnJ1blRvTG9hZFN0YXRlKX1lbHNle2xldCBkPXQucnVuVG9TZXJpZXM7Yy5ydW5Ub1Nlcmllcz17Li4uYy5ydW5Ub1Nlcmllc30sYy5ydW5Ub0xvYWRTdGF0ZT17Li4uYy5ydW5Ub0xvYWRTdGF0ZX07Zm9yKGxldCBwIGluIGQpaWYoZC5oYXNPd25Qcm9wZXJ0eShwKSl7Yy5ydW5Ub1Nlcmllc1twXT1kW3BdLGMucnVuVG9Mb2FkU3RhdGVbcF09RWUuTE9BREVEO2ZvcihsZXQgaCBvZiBkW3BdKWUubWluPU1hdGgubWluKGUubWluLGguc3RlcCksZS5tYXg9TWF0aC5tYXgoZS5tYXgsaC5zdGVwKX19aWYodC5ydW5Ub1NlcmllcyYmdC5wbHVnaW49PT1Xbi5TQ0FMQVJTKXtsZXQgZD1fVih7cGx1Z2luOm8sdGFnOnMscnVuSWQ6bnVsbH0pLHA9ZnVuY3Rpb24obil7bGV0IHQ9T2JqZWN0LnZhbHVlcyhuKS5mbGF0KCkubWFwKGU9PmUuc3RlcCk7cmV0dXJue21pblN0ZXA6TWF0aC5taW4oLi4udCksbWF4U3RlcDpNYXRoLm1heCguLi50KX19KGMucnVuVG9TZXJpZXMpO2lbZF09ey4uLmlbZF0sZGF0YU1pbk1heDpwfTtsZXQgaD1uLmNhcmRUb1Bpbm5lZENvcHkuZ2V0KGQpO2gmJihpW2hdPXsuLi5pW2hdLGRhdGFNaW5NYXg6cH0pfXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOnIsY2FyZFN0ZXBJbmRleDpQa2Uobi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkU3RlcEluZGV4LHIsbi50aW1lU2VyaWVzRGF0YSksc3RlcE1pbk1heDplLGNhcmRTdGF0ZU1hcDppfX0pLFNlKFNQLChuLHtjYXJkSWQ6dCxzdGVwSW5kZXg6ZX0pPT57bGV0IGk9WDUodCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhKSxyPWU7cmV0dXJuIG51bGw9PT1pP3I9bnVsbDplPmkmJihyPWkpLHsuLi5uLGNhcmRTdGVwSW5kZXg6ey4uLm4uY2FyZFN0ZXBJbmRleCxbdF06e2luZGV4OnIsaXNDbG9zZXN0OiExfX19fSksU2UoVFAsKG4se3RhZ0dyb3VwOnR9KT0+e2xldCBlPW5ldyBNYXAobi50YWdHcm91cEV4cGFuZGVkKTtyZXR1cm4gZS5zZXQodCwhZS5nZXQodCkpLHsuLi5uLHRhZ0dyb3VwRXhwYW5kZWQ6ZX19KSxTZSh1diwobix7ZW50ZXJlZENhcmRzOnQsZXhpdGVkQ2FyZHM6ZX0pPT57aWYoIXQubGVuZ3RoJiYhZS5sZW5ndGgpcmV0dXJuIG47bGV0IGk9bmV3IE1hcChuLnZpc2libGVDYXJkTWFwKTtyZXR1cm4gdC5mb3JFYWNoKCh7ZWxlbWVudElkOnIsY2FyZElkOm99KT0+e2xldCBzPWkuZ2V0KHIpPz9udWxsO2lmKG51bGwhPT1zJiZzIT09byl0aHJvdyBuZXcgRXJyb3IoIkEgRE9NIGVsZW1lbnQgY2Fubm90IGJlIHJldXNlZCBmb3IgbW9yZSB0aGFuIDEgdW5pcXVlIGNhcmQgbWV0YWRhdGEiKTtpLnNldChyLG8pfSksZS5mb3JFYWNoKCh7ZWxlbWVudElkOnJ9KT0+e2kuZGVsZXRlKHIpfSksey4uLm4sdmlzaWJsZUNhcmRNYXA6aX19KSxTZShkdiwobix7Y2FyZElkOnR9KT0+e2xldCBlPW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKHQpLGk9IWUmJiFuLmNhcmRUb1Bpbm5lZENvcHkuaGFzKHQpO2lmKGkmJiFRRChuKSlyZXR1cm4gbjtsZXQgcj1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weSksbz1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weUNhY2hlKSxzPW5ldyBNYXAobi5waW5uZWRDYXJkVG9PcmlnaW5hbCksYT17Li4ubi5jYXJkTWV0YWRhdGFNYXB9LGw9ey4uLm4uY2FyZFN0ZXBJbmRleH0sYz17Li4ubi5jYXJkU3RhdGVNYXB9O2lmKGUpe2xldCB1PW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuZ2V0KHQpO3IuZGVsZXRlKHUpLG8uZGVsZXRlKHUpLHMuZGVsZXRlKHQpLGRlbGV0ZSBhW3RdLGRlbGV0ZSBsW3RdLGRlbGV0ZSBjW3RdfWVsc2UgaWYoaSl7bGV0IHU9eVYodCxyLG8scyxsLGEsYyk7cj11LmNhcmRUb1Bpbm5lZENvcHksbz11LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxzPXUucGlubmVkQ2FyZFRvT3JpZ2luYWwsYT11LmNhcmRNZXRhZGF0YU1hcCxsPXUuY2FyZFN0ZXBJbmRleCxjPXUuY2FyZFN0YXRlTWFwfWVsc2V7bGV0IHU9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh0KTtyLmRlbGV0ZSh0KSxvLmRlbGV0ZSh0KSxzLmRlbGV0ZSh1KSxkZWxldGUgYVt1XSxkZWxldGUgbFt1XSxkZWxldGUgY1t0XX1yZXR1cm57Li4ubixjYXJkTWV0YWRhdGFNYXA6YSxjYXJkU3RhdGVNYXA6YyxjYXJkU3RlcEluZGV4OmwsY2FyZFRvUGlubmVkQ29weTpyLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOnN9fSksU2UoUFAsbj0+e2xldCB0PSFuLmxpbmtlZFRpbWVFbmFibGVkLGU9ey4uLm4uY2FyZFN0ZXBJbmRleH0saT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24scj1uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtpZih0KXtsZXR7bWluOnN9PW4uc3RlcE1pbk1heCxhPXM9PT0xLzA/MDpzO2k9bi5saW5rZWRUaW1lU2VsZWN0aW9uPz97c3RhcnQ6e3N0ZXA6YX0sZW5kOm51bGx9LGU9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsaSkscj10LG89Qm9vbGVhbihpLmVuZCl9cmV0dXJuey4uLm4sY2FyZFN0ZXBJbmRleDplLGxpbmtlZFRpbWVFbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6cixyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6b319KSxTZShPUCxuPT57bGV0IHQ9IW4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLGU9bi5zdGVwU2VsZWN0b3JFbmFibGVkLGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9T2JqZWN0LmVudHJpZXMobi5jYXJkU3RhdGVNYXApLnJlZHVjZSgobyxbcyxhXSk9PihvW3NdPXsuLi5hLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FLHJhbmdlU2VsZWN0aW9uT3ZlcnJpZGU6c2EuTk9ORX0sbykse30pO3JldHVybiB0PyhlPXQsaXx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDp7c3RlcDpuLnN0ZXBNaW5NYXgubWF4fX0pLGkuZW5kfHwoaT17Li4uaSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSk6aSYmKGk9ey4uLmksZW5kOm51bGx9KSx7Li4ubixzdGVwU2VsZWN0b3JFbmFibGVkOmUscmFuZ2VTZWxlY3Rpb25FbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLGNhcmRTdGF0ZU1hcDpyfX0pLFNlKG9oLChuLHQpPT57bGV0e2NhcmRJZDplLHRpbWVTZWxlY3Rpb246aX09dCxyPWkuc3RhcnQuc3RlcCxvPWkuZW5kPy5zdGVwLGE9bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7bi5saW5rZWRUaW1lRW5hYmxlZCYmKGE9dm9pZCAwIT09byk7bGV0IGw9e3N0YXJ0OntzdGVwOnJ9LGVuZDp2b2lkIDA9PT1vP251bGw6e3N0ZXA6cj5vP3I6b319LGM9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsbCksdT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlJiYodVtlXT17Li4udVtlXSx0aW1lU2VsZWN0aW9uOmwsc3RlcFNlbGVjdGlvbk92ZXJyaWRlOnNhLk9WRVJSSURFX0FTX0VOQUJMRUQscmFuZ2VTZWxlY3Rpb25PdmVycmlkZTp2b2lkIDA9PT1sLmVuZD8uc3RlcD9zYS5PVkVSUklERV9BU19ESVNBQkxFRDpzYS5PVkVSUklERV9BU19FTkFCTEVEfSksey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpsLGNhcmRTdGVwSW5kZXg6YyxjYXJkU3RhdGVNYXA6dSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6YX19KSxTZShJUCwobix7Y2FyZElkOnQsdmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKHNoLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246YSwuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9PntpW2FdPXsuLi5pW2FdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09V2EuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxzPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzLGNhcmRTdGF0ZU1hcDppfX0pLFNlKG1uZSxuPT4oey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpudWxsfSkpLFNlKGlQLChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLFNlKHB2LChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PV9vLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSxTZShSUCwobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlclR5cGU6ZX0pPT57bGV0IGk9dD09PV9vLlJBTkdFP24ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyxyPWkuZmluZEluZGV4KGE9PmEudHlwZT09PWUpLG89ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGkpO2lbcl0uZW5hYmxlZCYmby0tO2xldCBzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KHIsbyxpKTtyZXR1cm4gc1tvXT17Li4uc1tvXSxlbmFibGVkOiFzW29dLmVuYWJsZWR9LHQ9PT1fby5SQU5HRT97Li4ubixyYW5nZVNlbGVjdGlvbkhlYWRlcnM6c306ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczpzfX0pLFNlKERQLChuLHtwbHVnaW46dH0pPT57bGV0IGU9bmV3IFNldChuLmZpbHRlcmVkUGx1Z2luVHlwZXMpO3JldHVybiBlLmhhcyh0KT9lLmRlbGV0ZSh0KTplLmFkZCh0KSxPYmplY3QudmFsdWVzKFduKS5ldmVyeShpPT5lLmhhcyhpKSkmJihlPW5ldyBTZXQpLHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6ZX19KSxTZShBUCxuPT4oey4uLm4sZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0fSkpLFNlKGVQLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46IW4uaXNTZXR0aW5nc1BhbmVPcGVufSkpLFNlKCRJLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46ITF9KSksU2UodFAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3Blbjohbi5pc1NsaWRlb3V0TWVudU9wZW59KSksU2UoblAsKG4se21vZGU6dH0pPT4oey4uLm4saXNTbGlkZW91dE1lbnVPcGVuOiEwLGlzU2V0dGluZ3NQYW5lT3BlbjohMCx0YWJsZUVkaXRvclNlbGVjdGVkVGFiOnR9KSksU2UoclAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMX0pKSk7ZnVuY3Rpb24gd25lKG4sdCl7cmV0dXJuIFhmKE9rZSxSa2UpKG4sdCl9ZnVuY3Rpb24geG5lKG4sdCl7cmV0dXJue3RhZ0Rlc2NyaXB0aW9uczpuW3RdLnRhZ0Rlc2NyaXB0aW9ucyx0YWdUb1J1bnM6a2tlKG5bdF0ucnVuVGFnSW5mbyl9fWZ1bmN0aW9uIGtrZShuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbilmb3IobGV0IGkgb2YgbltlXSl0W2ldPVsuLi50W2ldfHxbXSxlXTtyZXR1cm4gdH12YXIgTGtlPVkoTnAsU2wsKG4sdCxlKT0+dD97Li4udCxsb2FkU3RhdGU6bixpZDplfTpudWxsKSxNbmU9d2UoIltNZXRyaWNzIEVmZmVjdHNdIEluaXQiKSxTbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZShUaShNbmUsX3UscWYseGwpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSx0aGlzLnN0b3JlLnNlbGVjdChTQykpLEhlKChbLG8sc10pPT5vPT09Q0MmJnMuc3RhdGU9PT1FZS5OT1RfTE9BREVEKSksdGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJD10aGlzLmFjdGlvbnMkLnBpcGUoVGkoSGEsd2wpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssb10pPT5vPT09Q0MpKSx0aGlzLmxvYWRUYWdNZXRhZGF0YSQ9dW4odGhpcy5kYXNoYm9hcmRTaG93bldpdGhvdXREYXRhJCx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFNDKSx0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG8sc10pPT5vLnN0YXRlIT09RWUuTE9BRElORyYmbnVsbCE9PXMpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChvUCgpKX0pLHZpKChbLCxvXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goc1Aoe3RhZ01ldGFkYXRhOnN9KSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goYVAoKSksanQobnVsbCkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHV2KSxHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGU9PT1FZS5OT1RfTE9BREVEKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZShHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGUhPT1FZS5MT0FESU5HKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPXVuKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShIZShvPT5vLmxlbmd0aD4wKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykucGlwZShIZShvPT5udWxsIT09bykpKSxfbigoW28sc10pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKG8scykpKSx0aGlzLmRhdGFFZmZlY3RzJD1VcigoKT0+dW4odGhpcy5sb2FkVGFnTWV0YWRhdGEkLHRoaXMubG9hZFRpbWVTZXJpZXMkKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBNbmUoKX1nZXRWaXNpYmxlQ2FyZEZldGNoSW5mb3MoKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3Qob1opLnBpcGUodmkoaT0+aS5zaXplP3hvKFsuLi5pXS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoTGtlLG8pLnBpcGUoSHQoMSkpKSk6anQoW10pKSxCKGk9PmkuZmlsdGVyKEJvb2xlYW4pKSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hUaW1lU2VyaWVzKFtlXSkucGlwZShOdChpPT57bGV0IHI9aS5maWx0ZXIoSEQpO3IubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUaW1lIHNlcmllcyByZXNwb25zZSBjb250YWluZWQgZXJyb3JzOiIsciksdGhpcy5zdG9yZS5kaXNwYXRjaChNUCh7cmVzcG9uc2U6aVswXX0pKX0pLENvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaCh3UCh7cmVxdWVzdDplfSkpLGp0KG51bGwpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKGUsaSl7cmV0dXJuIGp0KGUubWFwKG89PntsZXR7cGx1Z2luOnMsdGFnOmEscnVuSWQ6bCxzYW1wbGU6Y309byx1PXphKHMpP3twbHVnaW46cyx0YWc6YSxydW5JZDpsfTp7cGx1Z2luOnMsdGFnOmEsZXhwZXJpbWVudElkczppfTtyZXR1cm4gdm9pZCAwIT09YyYmKHUuc2FtcGxlPWMpLHV9KSkucGlwZShOdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaChDUCh7cmVxdWVzdHM6b30pKX0pLF9uKG89PnVuKC4uLm8ubWFwKGE9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzKGEpKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUih5dSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEs1PW5ldyBzZSgiTWV0cmljcyBTdG9yZSBDb25maWciKSxaNT1uZXcgc2UoIk1ldHJpY3MgSW5pdGlhbCBTZXR0aW5ncyBDb25maWciKTtmdW5jdGlvbiBFbmUobil7cmV0dXJuIG4/e2luaXRpYWxTdGF0ZTp7Li4uUTUsc2V0dGluZ3M6bn19Ontpbml0aWFsU3RhdGU6UTV9fXZhciBZYT0oKCk9PihmdW5jdGlvbihuKXtuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCIsbltuLk1JRERMRT00XT0iTUlERExFIixuW24uRk9VUlRIPThdPSJGT1VSVEgiLG5bbi5GSUZUSD0zMl09IkZJRlRIIn0oWWF8fChZYT17fSkpLFlhKSkoKSxUbmU9MDtmdW5jdGlvbiBCa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuZXhwYW5kU2lkZWJhcigpKX0pLE4oMSwibWF0LWljb24iLDQpLHYoKX19ZnVuY3Rpb24gVmtlKG4sdCl7aWYoMSZuJiYoZygwLCJuYXYiLDUpLGooMSwiYXN5bmMiKSxObigyLDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7T3QoIndpZHRoIixXKDEsNCxlLndpZHRoJCksIiUiKSgibWluLXdpZHRoIixlLk1JTklNVU1fU0lERUJBUl9XSURUSF9JTl9QWCwicHgiKX19ZnVuY3Rpb24gSGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5yZXNpemVHcmFiYmVkKCkpfSksdigpfX12YXIgVWtlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLHprZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLEFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMud2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHhEKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMucmVzaXppbmc9ITEsdGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg9NzUsbGkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoKCk9PnRoaXMucmVzaXppbmcpKS5zdWJzY3JpYmUocj0+e2lmKChyLmJ1dHRvbnMmWWEuTEVGVCkhPT1ZYS5MRUZUKXJldHVybiB2b2lkKHRoaXMucmVzaXppbmc9ITEpO3IucHJldmVudERlZmF1bHQoKTtsZXR7d2lkdGg6b309aS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RvcmUuZGlzcGF0Y2gocl8oe3dpZHRoSW5QZXJjZW50OnIuY2xpZW50WDw9dGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg/MDpyLmNsaWVudFgvbyoxMDB9KSl9KSxsaShpLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlc2l6aW5nPSExfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfWV4cGFuZFNpZGViYXIoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJfKHt3aWR0aEluUGVyY2VudDoyMH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhc2hib2FyZC1sYXlvdXQiXV0sbmdDb250ZW50U2VsZWN0b3JzOnprZSxkZWNsczo3LHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJleHBhbmQiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDMsIndpZHRoIiwibWluV2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koVWtlKSxFKDAsQmtlLDIsMCwiYnV0dG9uIiwwKSxqKDEsImFzeW5jIiksRSgyLFZrZSwzLDYsIm5hdiIsMSksaigzLCJhc3luYyIpLEUoNCxIa2UsMSwwLCJkaXYiLDIpLGooNSwiYXN5bmMiKSxObig2KSksMiZlJiYoYigibmdJZiIsMD09PVcoMSwzLGkud2lkdGgkKSkseCgyKSxiKCJuZ0lmIixXKDMsNSxpLndpZHRoJCk+MCkseCgyKSxiKCJuZ0lmIixXKDUsNyxpLndpZHRoJCk+MCkpfSxkZXBlbmRlbmNpZXM6W1hlLFpuLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjgwdnd9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleDowIDA7anVzdGlmeS1zZWxmOnN0cmV0Y2h9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4O2N1cnNvcjpldy1yZXNpemU7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNofS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjY2M7b3V0bGluZTozcHggc29saWQgI2NjYzt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3V0bGluZS1jb2xvcjojNzc3O2JvcmRlci1jb2xvcjojNzc3fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDFweCAwIDA7Y29sb3I6aW5oZXJpdDtjb250YWluOmNvbnRlbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKNT1uZXcgV2Vha01hcCx4dz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBXZWFrU2V0fWluaXRpYWxpemUodCl7aWYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcilyZXR1cm47dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10O2xldCBlPXt0aHJlc2hvbGQ6MCxyb290OnRoaXMucm9vdD8/bnVsbH07dGhpcy5idWZmZXImJihlLnJvb3RNYXJnaW49dGhpcy5idWZmZXIpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksZSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKHIsbyk9PnIudGltZS1vLnRpbWUpO2xldCBlPW5ldyBTZXQsaT1uZXcgU2V0O2ZvcihsZXR7aXNJbnRlcnNlY3Rpbmc6cix0YXJnZXQ6b31vZiB0KXI/KGUuYWRkKG8pLGkuZGVsZXRlKG8pKTooZS5kZWxldGUobyksaS5hZGQobykpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXMobykmJiFyJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZShvKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShvKSk7dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLGkpfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fSxJbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaCh1dih7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O0o1LnNldChlLHtlbGVtZW50SWQ6KFRuZSsrLFN5bWJvbChUbmUpKSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSx0aGlzLmNhcmRPYnNlcnZlcnx8KHRoaXMuY2FyZE9ic2VydmVyPW5ldyB4dyksdGhpcy5jYXJkT2JzZXJ2ZXIuaW5pdGlhbGl6ZSh0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpKSx0aGlzLmNhcmRPYnNlcnZlci5hZGQoZSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjYXJkTGF6eUxvYWRlciIsIiJdXSxpbnB1dHM6e2NhcmRJZDpbImNhcmRMYXp5TG9hZGVyIiwiY2FyZElkIl0sY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifX0pLG59KSgpO2Z1bmN0aW9uIFdrZShuLHQpezEmbiYmKEt0KDApLE5uKDEpLFp0KCkpfXZhciBxa2U9WyIqIl0sUG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhFbykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpxa2UsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLFdrZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmYigibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltYZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWGtlPVsiYnV0dG9uIl0sUWtlPVsiKiJdLFJuZT1uZXcgc2UoIk1BVF9CVVRUT05fVE9HR0xFX0RFRkFVTFRfT1BUSU9OUyIpLE9uZT1uZXcgc2UoIk1hdEJ1dHRvblRvZ2dsZUdyb3VwIiksS2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT4kNSksbXVsdGk6ITB9LGtuZT0wLEZQPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSwkNT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX25hbWU9Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLSIra25lKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBGXyh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuX2J1dHRvblRvZ2dsZXMuZmlsdGVyKGU9PmUuY2hlY2tlZCkpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV9lbWl0Q2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IEZQKGUsdGhpcy52YWx1ZSk7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbihpLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KGkpfV9zeW5jQnV0dG9uVG9nZ2xlKGUsaSxyPSExLG89ITEpeyF0aGlzLm11bHRpcGxlJiZ0aGlzLnNlbGVjdGVkJiYhZS5jaGVja2VkJiYodGhpcy5zZWxlY3RlZC5jaGVja2VkPSExKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbD9pP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKTpvPSEwLG8/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5fdXBkYXRlTW9kZWxWYWx1ZShlLHIpKTp0aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscil9X2lzU2VsZWN0ZWQoZSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpfV9pc1ByZWNoZWNrZWQoZSl7cmV0dXJuISh0eXBlb2YgdGhpcy5fcmF3VmFsdWU+InUiKSYmKHRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpP3RoaXMuX3Jhd1ZhbHVlLnNvbWUoaT0+bnVsbCE9ZS52YWx1ZSYmaT09PWUudmFsdWUpOmUudmFsdWU9PT10aGlzLl9yYXdWYWx1ZSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSl7dGhpcy5fcmF3VmFsdWU9ZSx0aGlzLl9idXR0b25Ub2dnbGVzJiYodGhpcy5tdWx0aXBsZSYmZT8oQXJyYXkuaXNBcnJheShlKSx0aGlzLl9jbGVhclNlbGVjdGlvbigpLGUuZm9yRWFjaChpPT50aGlzLl9zZWxlY3RWYWx1ZShpKSkpOih0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuX3NlbGVjdFZhbHVlKGUpKSl9X2NsZWFyU2VsZWN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLl9idXR0b25Ub2dnbGVzLmZvckVhY2goZT0+ZS5jaGVja2VkPSExKX1fc2VsZWN0VmFsdWUoZSl7bGV0IGk9dGhpcy5fYnV0dG9uVG9nZ2xlcy5maW5kKHI9Pm51bGwhPXIudmFsdWUmJnIudmFsdWU9PT1lKTtpJiYoaS5jaGVja2VkPSEwLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSl9X3VwZGF0ZU1vZGVsVmFsdWUoZSxpKXtpJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfV9tYXJrQnV0dG9uc0ZvckNoZWNrKCl7dGhpcy5fYnV0dG9uVG9nZ2xlcz8uZm9yRWFjaChlPT5lLl9tYXJrRm9yQ2hlY2soKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoUm5lLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmTmkocixKa2UsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYnV0dG9uVG9nZ2xlcz1vKX19LGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09aS5hcHBlYXJhbmNlKSl9LGlucHV0czp7YXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsbmFtZToibmFtZSIsdmVydGljYWw6InZlcnRpY2FsIix2YWx1ZToidmFsdWUiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlR3JvdXAiXSxmZWF0dXJlczpbJHQoW0trZSx7cHJvdmlkZTpPbmUsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxaa2U9THMoY2xhc3N7fSksSmtlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaa2V7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEc7bGV0IGw9TnVtYmVyKHMpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9YSYmYS5hcHBlYXJhbmNlP2EuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBidXR0b25JZCgpe3JldHVybmAke3RoaXMuaWR9LWJ1dHRvbmB9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmFwcGVhcmFuY2U6dGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXt0aGlzLl9hcHBlYXJhbmNlPWV9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9pc1NlbGVjdGVkKHRoaXMpOnRoaXMuX2NoZWNrZWR9c2V0IGNoZWNrZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpfW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK2tuZSsrLGUmJihlLl9pc1ByZWNoZWNrZWQodGhpcyk/dGhpcy5jaGVja2VkPSEwOmUuX2lzU2VsZWN0ZWQodGhpcykhPT10aGlzLl9jaGVja2VkJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksZSYmZS5faXNTZWxlY3RlZCh0aGlzKSYmZS5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLCExLCExLCEwKX1mb2N1cyhlKXt0aGlzLl9idXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X29uQnV0dG9uQ2xpY2soKXtsZXQgZT0hIXRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKXx8IXRoaXMuX2NoZWNrZWQ7ZSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWUsdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmKHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkLCEwKSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9vblRvdWNoZWQoKSkpLHRoaXMuY2hhbmdlLmVtaXQobmV3IEZQKHRoaXMsdGhpcy52YWx1ZSkpfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fZ2V0QnV0dG9uTmFtZSgpe3JldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdG9yKCk/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5uYW1lOnRoaXMubmFtZXx8bnVsbH1faXNTaW5nbGVTZWxlY3Rvcigpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYhdGhpcy5idXR0b25Ub2dnbGVHcm91cC5tdWx0aXBsZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPbmUsOCksdyhubiksdyhBZSksdyh6ciksS28oInRhYmluZGV4IiksdyhSbmUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoWGtlLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKHplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpRa2UsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJidXR0b24iLDAsMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGcoMiwic3BhbiIsMiksTm4oMyksdigpKCksTig0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj1zdCgxKTtiKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSx6ZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLHgoNSksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOltlc10sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLHhjLGRuXX0pLG59KSgpO2Z1bmN0aW9uIGVGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJhbmltYXRpb24tbmFtZSIsIm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtIitlLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIHRGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fXZhciBpRmU9cHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxyRmU9bmV3IHNlKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RpYW1ldGVyOjEwMH19fSksdm89Y2xhc3MgZXh0ZW5kcyBpRmV7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXtzdXBlcih0KSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2RpYW1ldGVyPTEwMCx0aGlzLl92YWx1ZT0wLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLm1vZGU9ImRldGVybWluYXRlIjtsZXQgYz12by5fZGlhbWV0ZXJzO3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSxjLmhhcyhpLmhlYWQpfHxjLnNldChpLmhlYWQsbmV3IFNldChbMTAwXSkpLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1yJiYhIW8mJiFvLl9mb3JjZUFuaW1hdGlvbnMsIm1hdC1zcGlubmVyIj09PXQubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYodGhpcy5tb2RlPSJpbmRldGVybWluYXRlIiksbyYmKG8uY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPW8uY29sb3IpLG8uZGlhbWV0ZXImJih0aGlzLmRpYW1ldGVyPW8uZGlhbWV0ZXIpLG8uc3Ryb2tlV2lkdGgmJih0aGlzLnN0cm9rZVdpZHRoPW8uc3Ryb2tlV2lkdGgpKSxlLmlzQnJvd3NlciYmZS5TQUZBUkkmJmEmJnMmJmwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249YS5jaGFuZ2UoMTUwKS5zdWJzY3JpYmUoKCk9PnsiaW5kZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGUmJmwucnVuKCgpPT5zLm1hcmtGb3JDaGVjaygpKX0pKX1nZXQgZGlhbWV0ZXIoKXtyZXR1cm4gdGhpcy5fZGlhbWV0ZXJ9c2V0IGRpYW1ldGVyKHQpe3RoaXMuX2RpYW1ldGVyPVBpKHQpLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSx0aGlzLl9zdHlsZVJvb3QmJnRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpfWdldCBzdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLl9zdHJva2VXaWR0aHx8dGhpcy5kaWFtZXRlci8xMH1zZXQgc3Ryb2tlV2lkdGgodCl7dGhpcy5fc3Ryb2tlV2lkdGg9UGkodCl9Z2V0IHZhbHVlKCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl92YWx1ZTowfXNldCB2YWx1ZSh0KXt0aGlzLl92YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCxQaSh0KSkpfW5nT25Jbml0KCl7bGV0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3N0eWxlUm9vdD1NQSh0KXx8dGhpcy5fZG9jdW1lbnQuaGVhZCx0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKSx0LmNsYXNzTGlzdC5hZGQoIm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uIil9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fZ2V0Q2lyY2xlUmFkaXVzKCl7cmV0dXJuKHRoaXMuZGlhbWV0ZXItMTApLzJ9X2dldFZpZXdCb3goKXtsZXQgdD0yKnRoaXMuX2dldENpcmNsZVJhZGl1cygpK3RoaXMuc3Ryb2tlV2lkdGg7cmV0dXJuYDAgMCAke3R9ICR7dH1gfV9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCl7cmV0dXJuIDIqTWF0aC5QSSp0aGlzLl9nZXRDaXJjbGVSYWRpdXMoKX1fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpKigxMDAtdGhpcy5fdmFsdWUpLzEwMDpudWxsfV9nZXRDaXJjbGVTdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLnN0cm9rZVdpZHRoL3RoaXMuZGlhbWV0ZXIqMTAwfV9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4odCl7bGV0IGU9NTAqKHQuY3VycmVudFNjYWxlPz8xKTtyZXR1cm5gJHtlfSUgJHtlfSVgfV9hdHRhY2hTdHlsZU5vZGUoKXtsZXQgdD10aGlzLl9zdHlsZVJvb3QsZT10aGlzLl9kaWFtZXRlcixpPXZvLl9kaWFtZXRlcnMscj1pLmdldCh0KTtpZighcnx8IXIuaGFzKGUpKXtsZXQgbz10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO28uc2V0QXR0cmlidXRlKCJtYXQtc3Bpbm5lci1hbmltYXRpb24iLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbCksby50ZXh0Q29udGVudD10aGlzLl9nZXRBbmltYXRpb25UZXh0KCksdC5hcHBlbmRDaGlsZChvKSxyfHwocj1uZXcgU2V0LGkuc2V0KHQscikpLHIuYWRkKGUpfX1fZ2V0QW5pbWF0aW9uVGV4dCgpe2xldCB0PXRoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKTtyZXR1cm4iXG4gQGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLURJQU1FVEVSIHtcbiAgICAwJSAgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cbiAgICAyNSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG5cbiAgICAyNS4wMDAxJSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuICAgIDUwJSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG5cbiAgICA1MC4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG4gICAgNzUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cblxuICAgIDc1LjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gICAgMTAwJSAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgfVxuIi5yZXBsYWNlKC9TVEFSVF9WQUxVRS9nLCIiKy45NSp0KS5yZXBsYWNlKC9FTkRfVkFMVUUvZywiIisuMip0KS5yZXBsYWNlKC9ESUFNRVRFUi9nLGAke3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbH1gKX1fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuZGlhbWV0ZXIudG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiXyIpfX07dm8uX2RpYW1ldGVycz1uZXcgV2Vha01hcCx2by5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHx2bykodyhBZSksdyh1aSksdyhCdCw4KSx3KExpLDgpLHcockZlKSx3KG5uKSx3KGRhKSx3KHB0KSl9LHZvLlx1MDI3NWNtcD1rKHt0eXBlOnZvLHNlbGVjdG9yczpbWyJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLFsibWF0LXNwaW5uZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsInByb2dyZXNzYmFyIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXByb2dyZXNzLXNwaW5uZXIiLCJtYXQtc3Bpbm5lciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LGUpezImdCYmKHplKCJhcmlhLXZhbHVlbWluIiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlPzA6bnVsbCkoImFyaWEtdmFsdWVtYXgiLCJkZXRlcm1pbmF0ZSI9PT1lLm1vZGU/MTAwOm51bGwpKCJhcmlhLXZhbHVlbm93IiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlP2UudmFsdWU6bnVsbCkoIm1vZGUiLGUubW9kZSksT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixlLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgiLG1vZGU6Im1vZGUiLHZhbHVlOiJ2YWx1ZSJ9LGV4cG9ydEFzOlsibWF0UHJvZ3Jlc3NTcGlubmVyIl0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6OCxjb25zdHM6W1sicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiLCJmb2N1c2FibGUiLCJmYWxzZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywibmdTd2l0Y2giXSxbInN2ZyIsIiJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMywiYW5pbWF0aW9uLW5hbWUiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLCJ0cmFuc2Zvcm0tb3JpZ2luIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsInRyYW5zZm9ybS1vcmlnaW4iLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LGUpezEmdCYmKGpuKCksZygwLCJzdmciLDAsMSksRSgyLGVGZSwxLDExLCJjaXJjbGUiLDIpLEUoMyx0RmUsMSw5LCJjaXJjbGUiLDMpLHYoKSksMiZ0JiYoT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYigibmdTd2l0Y2giLCJpbmRldGVybWluYXRlIj09PWUubW9kZSksemUoInZpZXdCb3giLGUuX2dldFZpZXdCb3goKSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsITEpKX0sZGVwZW5kZW5jaWVzOltocixJcl0sc3R5bGVzOlsiLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgMjI1bXMgbGluZWFyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzdmcsLm1hdC1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIGNpcmNsZXthbmltYXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSk7dmFyIGt1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbixrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBhRmUobix0KXtpZigxJm4mJihnKDAsImIiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCkuJGltcGxpY2l0O3goMSkscWUoIiIsZS5kaXNwbGF5QWxpYXMsIjoiKX19ZnVuY3Rpb24gbEZlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwyKSgxLCJzcGFuIiwzKSxFKDIsYUZlLDIsMSwiYiIsNCksRCgzKSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJ2YWx1ZSIsZS52YWx1ZSkoImRpc2FibGVkIixlLmRpc2FibGVkKSx4KDEpLEdFKCJ0aXRsZSIsIiIsZS5kaXNwbGF5QWxpYXMsIjogIixlLmRpc3BsYXlUZXh0LCIiKSx4KDEpLGIoIm5nSWYiLGUuZGlzcGxheUFsaWFzKSx4KDEpLHFlKCIgIixlLmRpc3BsYXlUZXh0LCIgIil9fXZhciBGbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXSxbMSwib3B0aW9uLWNvbnRlbnQiLDMsInRpdGxlIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC1zZWxlY3QiLDApLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoby52YWx1ZSl9KSxFKDEsbEZlLDQsNiwibWF0LW9wdGlvbiIsMSksdigpKSwyJmUmJihiKCJ2YWx1ZSIsaS52YWx1ZSkseCgxKSxiKCJuZ0Zvck9mIixpLm9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSxKcCx1YV0sc3R5bGVzOlsibWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweH1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG99ICAubWF0LXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW9wdGlvbntoZWlnaHQ6YXV0b30gIC5tYXQtb3B0aW9uLXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5vcHRpb24tY29udGVudFtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSJdfSksbn0pKCk7ZnVuY3Rpb24gdUZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzMikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLnJhbmdlU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgUmFuZ2UgU2VsZWN0aW9uICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKTt4KDEpLGIoImNoZWNrZWQiLGUuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSl9fWZ1bmN0aW9uIGRGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzMpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5saW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksRCgyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJjaGVja2VkIixlLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSkseCgxKSxxZSgiTGluayBieSBzdGVwICIsZS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKX19dmFyIHBGZT1mdW5jdGlvbihuKXtyZXR1cm57ImNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlIjohMCwidG9nZ2xlLW9wZW5lZCI6bn19O2Z1bmN0aW9uIGhGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMzQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVPdXRUb2dnbGVkLmVtaXQoKSl9KSxOKDEsIm1hdC1pY29uIiwzNSksRCgyLCIgRWRpdCBUYWJsZSBDb2x1bW5zICIpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigibmdDbGFzcyIsSG4oMSxwRmUsZS5pc1NsaWRlT3V0TWVudU9wZW4pKX19ZnVuY3Rpb24gZkZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwyNikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuc3RlcFNlbGVjdG9yVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgc3RlcCBzZWxlY3Rpb24gYW5kIGRhdGEgdGFibGUgIiksdigpLGcoMywic3BhbiIsMjgpLEQoNCwiKFNjYWxhcnMgb25seSkiKSx2KCksRSg1LHVGZSwzLDIsImRpdiIsMjkpLEUoNixkRmUsMywzLCJkaXYiLDMwKSxFKDcsaEZlLDMsMywiYnV0dG9uIiwzMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoInRpdGxlIixlLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIikseCgxKSxiKCJjaGVja2VkIixlLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhZS5pc0F4aXNUeXBlU3RlcCgpKSx4KDQpLGIoIm5nSWYiLGUuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQpLHgoMSksYigibmdJZiIsZS5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCkseCgxKSxiKCJuZ0lmIixlLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpfX1mdW5jdGlvbiBtRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzZWN0aW9uIiwzNikoMSwiaDMiLDEpLEQoMiwiSW1hZ2VzIiksdigpLGcoMywiZGl2IiwzNykoNCwiZGl2IiwzOCksRCg1LCJCcmlnaHRuZXNzIiksdigpLGcoNiwiZGl2Iiw4KSg3LCJtYXQtc2xpZGVyIiwzOSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSx2KCksZyg4LCJidXR0b24iLDQwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQnJpZ2h0bmVzc1Jlc2V0LmVtaXQoKSl9KSxOKDksIm1hdC1pY29uIiwxMSksdigpKCkoKSxnKDEwLCJkaXYiLDQxKSgxMSwiZGl2Iiw0MiksRCgxMiwiQ29udHJhc3QiKSx2KCksZygxMywiZGl2Iiw4KSgxNCwibWF0LXNsaWRlciIsNDMpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5lbWl0KHIudmFsdWUpKX0pLHYoKSxnKDE1LCJidXR0b24iLDQ0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RSZXNldC5lbWl0KCkpfSksTigxNiwibWF0LWljb24iLDExKSx2KCkoKSgpLGcoMTcsImRpdiIsNDUpKDE4LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLEQoMTksIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goNyksYigibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpKCJ0aHVtYkxhYmVsIiwhMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLHgoNyksYigibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSx4KDQpLGIoImNoZWNrZWQiLGUuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fXZhciBMbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmxvY2FsZT1lLHRoaXMubGlua2VkVGltZVRvZ2dsZWQ9bmV3IEcsdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLnN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEcsdGhpcy5yYW5nZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5vblNsaWRlT3V0VG9nZ2xlZD1uZXcgRyx0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6bW8uQUxQSEFCRVRJQ0FMLGRpc3BsYXlUZXh0OiJBbHBoYWJldGljYWwifSx7dmFsdWU6bW8uQVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJBc2NlbmRpbmcifSx7dmFsdWU6bW8uREVTQ0VORElORyxkaXNwbGF5VGV4dDoiRGVzY2VuZGluZyJ9LHt2YWx1ZTptby5ORUFSRVNULGRpc3BsYXlUZXh0OiJOZWFyZXN0IFBpeGVsIn0se3ZhbHVlOm1vLk5FQVJFU1RfWSxkaXNwbGF5VGV4dDoiTmVhcmVzdCBZIn1dLHRoaXMudG9vbHRpcFNvcnRDaGFuZ2VkPW5ldyBHLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBHLHRoaXMuWEF4aXNUeXBlPVlpLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6WWkuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpZaS5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6WWkuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT03MzUsdGhpcy5NSU5fQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9MzM1LHRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5jYXJkV2lkdGhDaGFuZ2VkPXRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLmNhcmRXaWR0aFJlc2V0PW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOk9yLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOk9yLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgRyx0aGlzLnNjYWxhclNtb290aGluZ0NoYW5nZWQ9dGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkPW5ldyBHLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUoemMoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKHpjKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBHLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEd9b25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKXtsZXQgaT1lLnRhcmdldDtpZighaS52YWx1ZSlyZXR1cm47bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGkudmFsdWUpKSwuOTk5KTtyIT09cGFyc2VGbG9hdChpLnZhbHVlKSYmKGkudmFsdWU9U3RyaW5nKHIpKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KHIpfWZvcm1hdE1pbGxpVG9aZXJvdGgoZSl7cmV0dXJuIEEzKGUvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfWdldExpbmtlZFRpbWVTZWxlY3Rpb25TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkfHxudWxsPT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHxudWxsIT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8iIjp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcH1pc0F4aXNUeXBlU3RlcCgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVlpLlNURVB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZDoiaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQiLGlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkOiJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsaXNMaW5rZWRUaW1lRW5hYmxlZDoiaXNMaW5rZWRUaW1lRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsc3RlcE1pbk1heDoic3RlcE1pbk1heCIsaXNTbGlkZU91dE1lbnVPcGVuOiJpc1NsaWRlT3V0TWVudU9wZW4iLGlzSW1hZ2VTdXBwb3J0RW5hYmxlZDoiaXNJbWFnZVN1cHBvcnRFbmFibGVkIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLGNhcmRNaW5XaWR0aDoiY2FyZE1pbldpZHRoIixoaXN0b2dyYW1Nb2RlOiJoaXN0b2dyYW1Nb2RlIixzY2FsYXJTbW9vdGhpbmc6InNjYWxhclNtb290aGluZyIsc2NhbGFyUGFydGl0aW9uWDoic2NhbGFyUGFydGl0aW9uWCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsaW1hZ2VDb250cmFzdEluTWlsbGk6ImltYWdlQ29udHJhc3RJbk1pbGxpIixpbWFnZVNob3dBY3R1YWxTaXplOiJpbWFnZVNob3dBY3R1YWxTaXplIn0sb3V0cHV0czp7bGlua2VkVGltZVRvZ2dsZWQ6ImxpbmtlZFRpbWVUb2dnbGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZDoibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NDMsdmFyczoyMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGNhcmQgd2lkdGgiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsInNjYWxhcnMiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXNtb290aGluZyJdLFsiaWQiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIwIiwic3RlcCIsIjAuMDAxIiwxLCJzbGlkZXItaW5wdXQiLDMsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udHJvbC1yb3ciLCJ0b29sdGlwLXNvcnQiXSxbMSwiY29udHJvbC1uYW1lIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1pZ25vcmUtb3V0bGllcnMiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtcGFydGl0aW9uLXgiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCIsInRpdGxlIiwiTm9uLW1vbm90b25pYyBzdGVwcyBjYW4gb2NjdXIgd2hlbiByZXVzaW5nIGEgbG9nZGlyIHdpdGggbXVsdGlwbGUgc3VtbWFyeSB3cml0ZXJzIGFuZCBvdmVybGFwcGluZyBzdGVwcy4gTGluZSBjaGFydHMsIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCwgY2FuIGFwcGVhciB6aWcgemFnZ2VkLiBUaGlzIGlzIGNvbW1vbiB3aGVuIHJlc3RhcnRpbmcgZnJvbSBhIGNoZWNrcG9pbnQuXG5cbldoZW4gZW5hYmxlZCwgYSBub24tbW9ub3RvbmljIHRpbWUgc2VyaWVzIGNvbXBvc2VkIG9mIE4gbW9ub3RvbmljIHBpZWNlcyB3aWxsIGJlIHNob3duIGFzIE4gbW9ub3RvbmljIGxpbmVzLiIsMSwiaW5mbyJdLFsxLCJIaXN0b2dyYW1zIl0sWzEsImNvbnRyb2wtcm93IiwiaGlzdG9ncmFtLW1vZGUiXSxbImNsYXNzIiwiaW1hZ2UiLDQsIm5nSWYiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIl0sWzMsImNoZWNrZWQiLCJkaXNhYmxlZCIsImNoYW5nZSJdLFsxLCJpbmRlbnQiXSxbImNsYXNzIiwiaW5kZW50IHJhbmdlLXNlbGVjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBsaW5rZWQtdGltZSBpbmRlbnQiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1jb250cmFzdCJdLFsiaWQiLCJpbWFnZS1jb25zdHJhc3QtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZXNldCBjb250cmFzdCIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLXNob3ctYWN0dWFsLXNpemUiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzZWN0aW9uIiwwKSgxLCJoMyIsMSksRCgyLCJHZW5lcmFsIiksdigpLGcoMywiZGl2IiwyKSg0LCJkaXYiLDMpLEQoNSwiSG9yaXpvbnRhbCBBeGlzIiksdigpLGcoNiwidGItZHJvcGRvd24iLDQpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkueEF4aXNUeXBlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCksRSg3LGZGZSw4LDYsImRpdiIsNSksZyg4LCJkaXYiLDYpKDksImRpdiIsNyksRCgxMCwiQ2FyZCBXaWR0aCIpLHYoKSxnKDExLCJkaXYiLDgpKDEyLCJtYXQtc2xpZGVyIiw5KSxQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDEzLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jYXJkV2lkdGhSZXNldC5lbWl0KCl9KSxOKDE0LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCkoKSxnKDE1LCJzZWN0aW9uIiwxMikoMTYsImgzIiwxKSxEKDE3LCJTY2FsYXJzIiksdigpLGcoMTgsImRpdiIsMTMpKDE5LCJkaXYiLDE0KSxEKDIwLCJTbW9vdGhpbmciKSx2KCksZygyMSwiZGl2Iiw4KSgyMiwibWF0LXNsaWRlciIsMTUpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDIzLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksdigpKCkoKSxnKDI0LCJkaXYiLDE3KSgyNSwiZGl2IiwxOCksRCgyNiwiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLHYoKSxnKDI3LCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLHYoKSgpLGcoMjgsImRpdiIsMTkpKDI5LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxEKDMwLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLHYoKSgpLGcoMzEsImRpdiIsMjEpKDMyLCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksRCgzMywiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksdigpLE4oMzQsIm1hdC1pY29uIiwyMiksdigpKCksZygzNSwic2VjdGlvbiIsMjMpKDM2LCJoMyIsMSksRCgzNywiSGlzdG9ncmFtcyIpLHYoKSxnKDM4LCJkaXYiLDI0KSgzOSwiZGl2IiwxOCksRCg0MCwiTW9kZSIpLHYoKSxnKDQxLCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCkoKSxFKDQyLG1GZSwyMCwxMywic2VjdGlvbiIsMjUpKSwyJmUmJih4KDYpLGIoInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCkseCg1KSxiKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLHgoMTApLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSx4KDEpLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx4KDQpLGIoInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucykseCgyKSxiKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSx4KDMpLGIoImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCkseCg5KSxiKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsRm5lLCRuLEVkLFpuLFRkXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowIDAgMTJweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbToxMnB4fS5jb250cm9sLW5hbWVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyOHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNldC1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjZweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjEycHg7cGFkZGluZzowIDRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM0MjUwNjZ9LnNjYWxhcnMtc21vb3RoaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTt3aWR0aDo1ZW19LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVdICAgLmluZm9bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O21hcmdpbi1sZWZ0OjVweDt3aWR0aDoxNXB4O21pbi13aWR0aDoxNXB4fW1hdC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDotOHB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MjhweDtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6MTJweH0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUubWF0LWJ1dHRvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE1cHg7bWFyZ2luLXJpZ2h0OjZweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30ubGlua2VkLXRpbWVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NXB4IDB9LmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmRlbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjI1cHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxiRmU9T2JqZWN0LmZyZWV6ZSh7U0xJREVSOkdvLlNFVFRJTkdTX1NMSURFUixURVhUOkdvLlNFVFRJTkdTX1RFWFQsVEVYVF9ERUxFVEVEOkdvLkNIQU5HRV9UT19TSU5HTEV9KSxCbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3Qob0spLHRoaXMuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGNLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGFLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVEMpLHRoaXMuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEhwKSx0aGlzLmlzTGlua2VkVGltZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KFZwKSx0aGlzLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEVWKSx0aGlzLnN0ZXBNaW5NYXgkPXRoaXMuc3RvcmUuc2VsZWN0KFNWKSx0aGlzLmlzU2xpZGVPdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3Qob0EpLHRoaXMuaXNJbWFnZVN1cHBvcnRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssaV0pPT5pKSksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KG1fKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYnUpLHRoaXMuY2FyZE1pbldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChoXyksdGhpcy5oaXN0b2dyYW1Nb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy5zY2FsYXJTbW9vdGhpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHZkKSx0aGlzLnNjYWxhclBhcnRpdGlvblgkPXRoaXMuc3RvcmUuc2VsZWN0KCREKSx0aGlzLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdCh0QSksdGhpcy5pbWFnZVNob3dBY3R1YWxTaXplJD10aGlzLnN0b3JlLnNlbGVjdChuQSl9b25Ub29sdGlwU29ydENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChjUCh7c29ydDplfSkpfW9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1UCgpKX1vblhBeGlzVHlwZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChkUCh7eEF4aXNUeXBlOmV9KSl9b25DYXJkV2lkdGhDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocFAoe2NhcmRNaW5XaWR0aDplfSkpfW9uQ2FyZFdpZHRoUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGhQKCkpfW9uSGlzdG9ncmFtTW9kZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh4UCh7aGlzdG9ncmFtTW9kZTplfSkpfW9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGZQKHtzbW9vdGhpbmc6ZX0pKX1vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChtUCgpKX1vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1Aoe2JyaWdodG5lc3NJbk1pbGxpOmV9KSl9b25JbWFnZUJyaWdodG5lc3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godlAoKSl9b25JbWFnZUNvbnRyYXN0UmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHlQKCkpfW9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX1Aoe2NvbnRyYXN0SW5NaWxsaTplfSkpfW9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJQKCkpfW9uTGlua2VkVGltZVRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFBQKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblJhbmdlU2VsZWN0aW9uVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT1Aoe2FmZm9yZGFuY2U6V2EuQ0hFQ0tfQk9YfSkpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoe3RpbWVTZWxlY3Rpb246ZSxzb3VyY2U6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goe3RpbWVTZWxlY3Rpb246ZSxhZmZvcmRhbmNlOmJGZVtpXX0pKX1vblNsaWRlT3V0VG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFAoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoyMix2YXJzOjYzLGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJjYXJkTWluV2lkdGgiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIiwiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIiwiaXNMaW5rZWRUaW1lRW5hYmxlZCIsImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE1pbk1heCIsImlzU2xpZGVPdXRNZW51T3BlbiIsInRvb2x0aXBTb3J0Q2hhbmdlZCIsImlnbm9yZU91dGxpZXJzQ2hhbmdlZCIsInhBeGlzVHlwZUNoYW5nZWQiLCJjYXJkV2lkdGhDaGFuZ2VkIiwiY2FyZFdpZHRoUmVzZXQiLCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsInNjYWxhclNtb290aGluZ0NoYW5nZWQiLCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLCJpbWFnZUNvbnRyYXN0UmVzZXQiLCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsImxpbmtlZFRpbWVUb2dnbGVkIiwibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJzdGVwU2VsZWN0b3JUb2dnbGVkIiwicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIiwib25TbGlkZU91dFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCIsMCksUCgidG9vbHRpcFNvcnRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvb2x0aXBTb3J0Q2hhbmdlZChvKX0pKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKCJ4QXhpc1R5cGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblhBeGlzVHlwZUNoYW5nZWQobyl9KSgiY2FyZFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DYXJkV2lkdGhDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2FyZFdpZHRoUmVzZXQoKX0pKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChvKX0pKCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0NoYW5nZWQobyl9KSgic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpfSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQnJpZ2h0bmVzc1Jlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKX0pKCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQ29udHJhc3RSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkoImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKX0pKCJsaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSgibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgic3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKX0pKCJyYW5nZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKX0pKCJvblNsaWRlT3V0VG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNsaWRlT3V0VG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksdigpKSwyJmUmJmIoImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsVygxLDIxLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsVygyLDIzLGkudG9vbHRpcFNvcnQkKSkoImlnbm9yZU91dGxpZXJzIixXKDMsMjUsaS5pZ25vcmVPdXRsaWVycyQpKSgieEF4aXNUeXBlIixXKDQsMjcsaS54QXhpc1R5cGUkKSkoImNhcmRNaW5XaWR0aCIsVyg1LDI5LGkuY2FyZE1pbldpZHRoJCkpKCJoaXN0b2dyYW1Nb2RlIixXKDYsMzEsaS5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFcoNywzMyxpLnNjYWxhclNtb290aGluZyQpKSgic2NhbGFyUGFydGl0aW9uWCIsVyg4LDM1LGkuc2NhbGFyUGFydGl0aW9uWCQpKSgiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsVyg5LDM3LGkuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFcoMTAsMzksaS5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsVygxMSw0MSxpLmltYWdlU2hvd0FjdHVhbFNpemUkKSkoImlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkIixXKDEyLDQzLGkuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQkKSkoImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIixXKDEzLDQ1LGkuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLFcoMTQsNDcsaS5pc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLFcoMTUsNDksaS5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixXKDE2LDUxLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkKSkoImlzTGlua2VkVGltZUVuYWJsZWQiLFcoMTcsNTMsaS5pc0xpbmtlZFRpbWVFbmFibGVkJCkpKCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixXKDE4LDU1LGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxOSw1NyxpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInN0ZXBNaW5NYXgiLFcoMjAsNTksaS5zdGVwTWluTWF4JCkpKCJpc1NsaWRlT3V0TWVudU9wZW4iLFcoMjEsNjEsaS5pc1NsaWRlT3V0TWVudU9wZW4kKSl9LGRlcGVuZGVuY2llczpbTG5lLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxWbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTigwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkZXBlbmRlbmNpZXM6W0JuZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gd0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBNRmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIFNGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gRUZlKG4sdCl7MSZuJiZOKDAsImRpdiIsNSl9dmFyIEJQPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkNvbHVtbkhlYWRlclR5cGU9bXR9Z2V0SGVhZGVyVGV4dENvbHVtbihlKXtzd2l0Y2goZSl7Y2FzZSBtdC5SVU46cmV0dXJuIlJ1biI7Y2FzZSBtdC5WQUxVRTpyZXR1cm4iVmFsdWUiO2Nhc2UgbXQuU1RFUDpyZXR1cm4iU3RlcCI7Y2FzZSBtdC5USU1FOnJldHVybiJUaW1lIjtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIlJlbGF0aXZlIjtjYXNlIG10LlNNT09USEVEOnJldHVybiJTbW9vdGhlZCI7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIlZhbHVlIjtjYXNlIG10LlNUQVJUX1NURVA6cmV0dXJuIlN0YXJ0IFN0ZXAiO2Nhc2UgbXQuRU5EX1NURVA6cmV0dXJuIkVuZCBTdGVwIjtjYXNlIG10LlNUQVJUX1ZBTFVFOnJldHVybiJTdGFydCBWYWx1ZSI7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIkVuZCBWYWx1ZSI7Y2FzZSBtdC5NSU5fVkFMVUU6cmV0dXJuIk1pbiI7Y2FzZSBtdC5NQVhfVkFMVUU6cmV0dXJuIk1heCI7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4iJSI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4iU3RlcCBhdCBNYXgiO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIlN0ZXAgYXQgTWluIjtjYXNlIG10Lk1FQU46cmV0dXJuIk1lYW4iO2Nhc2UgbXQuUkFXX0NIQU5HRTpyZXR1cm4iUmVhbCBWYWx1ZSI7ZGVmYXVsdDpyZXR1cm4iIn19Z2V0U3BlY2lhbFR5cGVDbGFzc2VzKGUpe3N3aXRjaChlKXtjYXNlIG10LlNURVBfQVRfTUlOOnJldHVybiJzdGVwLWF0LW1pbiI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4ic3RlcC1hdC1tYXgiO2RlZmF1bHQ6cmV0dXJuIiJ9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXRhLXRhYmxlLWhlYWRlciJdXSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIn0sZGVjbHM6Nyx2YXJzOjYsY29uc3RzOltbMSwiaGVhZGVyLWNvbnRhaW5lciIsMywibmdTd2l0Y2giXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZXh0cmEtcmlnaHQtcGFkZGluZyIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Il0sWzEsImV4dHJhLXJpZ2h0LXBhZGRpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRSgxLHdGZSwxLDAsIm1hdC1pY29uIiwxKSxFKDIsTUZlLDEsMCwibWF0LWljb24iLDEpLEUoMyxTRmUsMSwwLCJtYXQtaWNvbiIsMSksRSg0LEVGZSwxLDAsImRpdiIsMiksZyg1LCJzcGFuIiwzKSxEKDYpLHYoKSgpKSwyJmUmJihiKCJuZ1N3aXRjaCIsaS5oZWFkZXIudHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5WQUxVRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUEVSQ0VOVEFHRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUkFXX0NIQU5HRSkseCgyKSxiKCJuZ0NsYXNzIixpLmdldFNwZWNpYWxUeXBlQ2xhc3NlcyhpLmhlYWRlci50eXBlKSkseCgxKSx5dChpLmdldEhlYWRlclRleHRDb2x1bW4oaS5oZWFkZXIudHlwZSkpKX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxabl0sc3R5bGVzOlsiLmhlYWRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjEycHh9LnN0ZXAtYXQtbWluW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MzdweH0uc3RlcC1hdC1tYXhbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo0MHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gVEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw5KSxQKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmRyYWdTdGFydChvKSl9KSgiZHJhZ2VuZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbmQocikpfSkoImRyYWdlbnRlciIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQscz1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbnRlcihvLHMpKX0pLGcoMSwibWF0LWNoZWNrYm94IiwxMCksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oKS5kYXRhVGFibGVNb2RlO3JldHVybiBvZShNKCkudG9nZ2xlSGVhZGVyKG8scykpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMTEpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigibmdDbGFzcyIsTSgyKS5nZXRIaWdobGlnaHRDbGFzc2VzKGUpKSx4KDEpLGIoImNoZWNrZWQiLGUuZW5hYmxlZCkseCgxKSxiKCJoZWFkZXIiLGUpfX1mdW5jdGlvbiBERmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNyksRSgxLFRGZSwzLDMsImRpdiIsOCksdigpKSwyJm4pe2xldCBlPXQuaGVhZGVyczt4KDEpLGIoIm5nRm9yT2YiLGUpfX12YXIgVW5lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue2hlYWRlcnM6bixkYXRhVGFibGVNb2RlOnR9fSx0SD1uPT57bi5wcmV2ZW50RGVmYXVsdCgpfSxBRmU9KG4sdCxlKT0+e2xldCBpPVsuLi5lXTtyZXR1cm4gaS5zcGxpY2UobiwxKSxpLnNwbGljZSh0LDAsZVtuXSksaX0sVlA9KG4sdCk9PnQuZmluZEluZGV4KGU9PmUudHlwZT09PW4pLGFoPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5UT1A9MF09IlRPUCIsbltuLkJPVFRPTT0xXT0iQk9UVE9NIn0oYWh8fChhaD17fSkpLGFoKSkoKSx6bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5EYXRhVGFibGVNb2RlPV9vLHRoaXMuaGlnaGxpZ2h0RWRnZT1haC5UT1AsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdD1uZXcgRyx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBHLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZD1uZXcgRyx0aGlzLm9uVGFiQ2hhbmdlPW5ldyBHfW5nT25EZXN0cm95KCl7dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9dGFiQ2hhbmdlKGUpe3RoaXMub25UYWJDaGFuZ2UuZW1pdCgwPT09ZS5pbmRleD9fby5TSU5HTEU6X28uUkFOR0UpfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VuZChlKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGV8fCF0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSlyZXR1cm47bGV0IGk9dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShlKTt0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0LmVtaXQoe2RhdGFUYWJsZU1vZGU6ZSxoZWFkZXJzOkFGZShWUCh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSxpKSxWUCh0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSxpKSxpKX0pLHRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlPXZvaWQgMCx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT12b2lkIDAsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VudGVyKGUsaSl7aWYoIXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlKXJldHVybjtsZXQgcj10aGlzLmdldEhlYWRlcnNGb3JNb2RlKGkpO3RoaXMuaGlnaGxpZ2h0RWRnZT1WUChlLnR5cGUscik8VlAodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUscik/YWguVE9QOmFoLkJPVFRPTSx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT1lLnR5cGV9dG9nZ2xlSGVhZGVyKGUsaSl7dGhpcy5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZC5lbWl0KHtkYXRhVGFibGVNb2RlOmksaGVhZGVyVHlwZTplLnR5cGV9KX1nZXRIaWdobGlnaHRDbGFzc2VzKGUpe3JldHVybiBlLnR5cGUhPT10aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT97fTp7aGlnaGxpZ2h0ZWQ6ITAsImhpZ2hsaWdodC10b3AiOnRoaXMuaGlnaGxpZ2h0RWRnZT09PWFoLlRPUCwiaGlnaGxpZ2h0LWJvdHRvbSI6dGhpcy5oaWdobGlnaHRFZGdlPT09YWguQk9UVE9NfX1nZXRTZWxlY3RlZFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWI9PT1fby5TSU5HTEU/MDoxfWdldEhlYWRlcnNGb3JNb2RlKGUpe3JldHVybiBlPT09X28uU0lOR0xFP3RoaXMuc2luZ2xlSGVhZGVyczp0aGlzLnJhbmdlSGVhZGVyc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMiLHNlbGVjdGVkVGFiOiJzZWxlY3RlZFRhYiJ9LG91dHB1dHM6e29uU2NhbGFyVGFibGVDb2x1bW5FZGl0OiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsb25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ6Im9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkOiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixvblRhYkNoYW5nZToib25UYWJDaGFuZ2UifSxkZWNsczoxMSx2YXJzOjEzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIGNvbHVtbiBlZGl0b3Iu4pCfY2I2MTZjZTliNDMyN2I0MWU2YmRiOTM0NDY2OWJhN2M3MmUyYzcwZeKQnzcyMDU2MzU3NjQ3MTMwMzQ4NDI6Q2xvc2UgY29sdW1uIGVkaXRvcmAsW1sxLCJlZGl0b3ItY29udHJvbHMiXSxbMSwidGFiLWdyb3VwIiwzLCJzZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxbMywibGFiZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImZvb3RlciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsiaGVhZGVyTGlzdCIsIiJdLFsxLCJoZWFkZXItbGlzdCJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiwiZHJhZ2dhYmxlIiwidHJ1ZSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZHJhZ2dhYmxlIiwidHJ1ZSIsMSwiaGVhZGVyLWxpc3QtaXRlbSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFszLCJoZWFkZXIiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsIm1hdC10YWItZ3JvdXAiLDEpLFAoInNlbGVjdGVkVGFiQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50YWJDaGFuZ2Uobyl9KSxnKDIsIm1hdC10YWIiLDIpLE4oMywibmdDb250ZXh0IiwzKSx2KCksZyg0LCJtYXQtdGFiIiwyKSxOKDUsIm5nQ29udGV4dCIsMyksdigpKCkoKSxnKDYsImRpdiIsNCkoNywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkLmVtaXQoKX0pLEQoOCwiIENsb3NlICIpLHYoKSgpLEUoOSxERmUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSksMiZlKXtsZXQgcj1zdCgxMCk7eCgxKSxiKCJzZWxlY3RlZEluZGV4IixpLmdldFNlbGVjdGVkVGFiSW5kZXgoKSkseCgxKSxiKCJsYWJlbCIsIlNpbmdsZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0byg3LFVuZSxpLnNpbmdsZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlNJTkdMRSkpLHgoMSksYigibGFiZWwiLCJSYW5nZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0bygxMCxVbmUsaS5yYW5nZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlJBTkdFKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLE5vLEJQLEVkLGhJLGF3LCRuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgICAubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6MDtwYWRkaW5nOjAgMzBweH0uZWRpdG9yLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gNDVweCl9LnRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowO2hlaWdodDoxMDAlfS5oZWFkZXItbGlzdFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1JTttYXJnaW4tbGVmdDo1JX0uaGVhZGVyLWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9LmhpZ2hsaWdodGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LmhpZ2hsaWdodC1ib3R0b21bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNmZjk4MDB9LmhpZ2hsaWdodC10b3BbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MnB4IHNvbGlkICNmZjk4MDB9LmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6NHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5mb290ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2lkdGg6ODRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9ICAubWF0LXRhYi1ib2R5LXdyYXBwZXJ7ZmxleDoxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksam5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2luZ2xlSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMucmFuZ2VIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChfXyksdGhpcy5zZWxlY3RlZFRhYiQ9dGhpcy5zdG9yZS5zZWxlY3QocFopfW9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUlAoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0KGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJQKCkpfW9uVGFiQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaVAoe3RhYjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJzaW5nbGVIZWFkZXJzIiwicmFuZ2VIZWFkZXJzIiwic2VsZWN0ZWRUYWIiLCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0Iiwib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsIm9uVGFiQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yLWNvbXBvbmVudCIsMCksUCgib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKG8pfSkoIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdChvKX0pKCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKX0pKCJvblRhYkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UYWJDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigic2luZ2xlSGVhZGVycyIsVygxLDMsaS5zaW5nbGVIZWFkZXJzJCkpKCJyYW5nZUhlYWRlcnMiLFcoMiw1LGkucmFuZ2VIZWFkZXJzJCkpKCJzZWxlY3RlZFRhYiIsVygzLDcsaS5zZWxlY3RlZFRhYiQpKX0sZGVwZW5kZW5jaWVzOlt6bmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJGZT1ZKHJaLGVtLChuLHQpPT5uZXcgU2V0KE9iamVjdC5lbnRyaWVzKG4uc2NhbGFycy50YWdUb1J1bnMpLmZpbHRlcigoWyxlXSk9PiF0fHwhdC5zaXplfHxlLnNvbWUoaT0+dD8uZ2V0KGkpKSkubWFwKChbZV0pPT5lKSkpLE9GZT1ZKFpELGVtLGRaLFJGZSwobix0LGUsaSk9PntsZXQgcj1BcnJheS5mcm9tKHQ/LnZhbHVlcygpfHxbXSkuc29tZShCb29sZWFuKTtyZXR1cm4gbi5maWx0ZXIobz0+emEoby5wbHVnaW4pP0Jvb2xlYW4odCYmdC5nZXQoby5ydW5JZCkpOiFlfHwhcnx8by5wbHVnaW4hPT1Xbi5TQ0FMQVJTfHxpLmhhcyhvLnRhZykpfSkseW09WShPRmUsbj0+bi5zb3J0KCh0LGUpPT5idyh0LnRhZyxlLnRhZykpKSxtdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5yZWY9ZSx0aGlzLmNka1Njcm9sbGFibGU9aSx0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uRXZlbnQkPW5ldyBUZX1uZ09uSW5pdCgpe2xldCBlPXtyb290OnRoaXMuY2RrU2Nyb2xsYWJsZT90aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ6bnVsbH07dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiYmKGUucm9vdE1hcmdpbj10aGlzLmludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luKTtsZXQgaT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocj0+e3RoaXMub25FdmVudCQubmV4dChyKX0sZSk7aS5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUodGhpcy5yZWYubmF0aXZlRWxlbWVudCl9KSx0aGlzLm9uRXZlbnQkLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShyPT57bGV0IG89ci5zbGljZSgtMSlbMF07dGhpcy5vblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7dmlzaWJsZTpvLmlzSW50ZXJzZWN0aW5nfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX13YWl0Rm9yRXZlbnRGb3JUZXN0T25seSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT50aGlzLm9uRXZlbnQkLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e2UoKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhZcCw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiXV0saW5wdXRzOntpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbjoiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4ifSxvdXRwdXRzOntvblZpc2liaWxpdHlDaGFuZ2U6Im9uVmlzaWJpbGl0eUNoYW5nZSJ9fSksbn0pKCksR25lPSIvc2NhbGFyX3N1bW1hcnkiO2Z1bmN0aW9uIGd2KG4sdCl7bGV0IGU9bjtyZXR1cm4gdCYmbi5zdGFydHNXaXRoKHQrIi8iKSYmKGU9bi5zbGljZSh0Lmxlbmd0aCsxKSksZS5lbmRzV2l0aChHbmUpJiYoZT1lLnNsaWNlKDAsLUduZS5sZW5ndGgpKSxlfHxufXZhciBIUD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmhyZWZBdHRyPXZvaWQgMCx0aGlzLnNyY0F0dHI9dm9pZCAwLHRoaXMuaW5jbHVkZUZlYXR1cmVGbGFncz0hMH1nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChuXykucGlwZShCKGk9PntpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyIsSlNPTi5zdHJpbmdpZnkoaSldXSksbz1lLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm4gZStvK1N0cmluZyhyKX1yZXR1cm4gZX0pKX1zZXQgaHJlZihlKXtlJiZQUyh0aGlzLmdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSkpLnRoZW4oaT0+e3RoaXMuaHJlZkF0dHI9aX0pfXNldCBzcmMoZSl7ZSYmUFModGhpcy5nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpKS50aGVuKGk9Pnt0aGlzLnNyY0F0dHI9aX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl0sWyJpbWciLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaHJlZiIsaS5ocmVmQXR0cixkbCkoInNyYyIsaS5zcmNBdHRyLGRsKX0saW5wdXRzOntpbmNsdWRlRmVhdHVyZUZsYWdzOiJpbmNsdWRlRmVhdHVyZUZsYWdzIixocmVmOiJocmVmIixzcmM6InNyYyJ9fSksbn0pKCksa0ZlPVsibWVhc3VyZXIiXSxGRmU9WyJpbnB1dCJdLHFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuc3R5bGU9ImRlZmF1bHQiLHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAoIi4qIiksdGhpcy5pc1ZhbGlkPSEwLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmJsdXI9bmV3IEcsdGhpcy5mb2N1cz1uZXcgRyx0aGlzLmtleWRvd249bmV3IEcsdGhpcy5rZXl1cD1uZXcgRyx0aGlzLmludGVybmFsVmFsdWU9IiIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXI9dGhpcy51cGRhdGVJbnB1dFdpZHRoLmJpbmQodGhpcyl9bmdPbkluaXQoKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uRGVzdHJveSgpe2RvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkaW5nZG9uZSIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXIpfW5nT25DaGFuZ2VzKGUpe2UucGF0dGVybiYmKHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuPz8iIikpLGUudmFsdWUmJih0aGlzLmludGVybmFsVmFsdWU9dGhpcy52YWx1ZSksdGhpcy5pc1ZhbGlkPXRoaXMucGF0dGVyblJlZ2V4LnRlc3QodGhpcy5pbnRlcm5hbFZhbHVlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX1vbklucHV0KGUpe2xldCBpPXRoaXMuaW50ZXJuYWxWYWx1ZTt0aGlzLmludGVybmFsVmFsdWU9dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5pbnRlcm5hbFZhbHVlIT09aSYmKHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSksdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3ZhbHVlOnRoaXMuaW50ZXJuYWxWYWx1ZX0pfXVwZGF0ZUlucHV0V2lkdGgoKXtsZXR7d2lkdGg6ZX09dGhpcy5tZWFzdXJlckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjb250ZW50LXdyYXBwaW5nLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGtGZSw3LEFlKSxsdChGRmUsNyxBZSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWVhc3VyZXJFbFJlZj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5pbnB1dEVsUmVmPXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmVhKGkuc3R5bGUpfSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixzdHlsZToic3R5bGUiLHBhdHRlcm46InBhdHRlcm4ifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIixibHVyOiJibHVyIixmb2N1czoiZm9jdXMiLGtleWRvd246ImtleWRvd24iLGtleXVwOiJrZXl1cCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWVhc3VyZXIiXSxbIm1lYXN1cmVyIiwiIl0sWyJhdXRvY29tcGxldGUiLCJvZmYiLCJzcGVsbGNoZWNrIiwiZmFsc2UiLCJ0eXBlIiwidGV4dCIsMywidmFsdWUiLCJwbGFjZWhvbGRlciIsImJsdXIiLCJmb2N1cyIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwic3BhbiIpKDEsInNwYW4iLDAsMSksRCgzKSx2KCksZyg0LCJpbnB1dCIsMiwzKSxQKCJibHVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5ibHVyLmVtaXQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZvY3VzLmVtaXQobyl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5ZG93bi5lbWl0KG8pfSkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5rZXl1cC5lbWl0KG8pfSksdigpKCkpLDImZSYmKGF0KCJjb250YWluZXIiLCEwKSgiaXMtdmFsaWQiLGkuaXNWYWxpZCkseCgzKSx5dChpLmludGVybmFsVmFsdWV8fGkucGxhY2Vob2xkZXIpLHgoMSksYigidmFsdWUiLGkudmFsdWUpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6bWF4LWNvbnRlbnR9W19uZ2hvc3QtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2Y1N2MwMH0uZGVmYXVsdFtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYn0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKXtib3JkZXItY29sb3I6I2VmOWE5YX0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIC5lcnJvcltfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpob3ZlciwgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOm5vdCguaXMtdmFsaWQpOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6I2VmOWE5YX0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2JkYmRiZH0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItY29sb3I6Izc1NzU3NX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7cGFkZGluZzoxcHggMnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZWFzdXJlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbn0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdLCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzowO3doaXRlLXNwYWNlOnByZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5LCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7d2lkdGg6MmNofWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdDtvdXRsaW5lOjB9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze3BhZGRpbmctcmlnaHQ6MWNofSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiY29udGVudC13cmFwcGluZy1pbnB1dCIsMyksUCgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5hbGlhc0NoYW5nZWQuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7cGwoZS5pc0FsaWFzTmFtZUxlZ2FsPyJoaWdoLWNvbnRyYXN0IjoiZXJyb3IiKSxiKCJ2YWx1ZSIsZS5hbGlhcy5hbGlhc1RleHQpfX1mdW5jdGlvbiBCRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTthdCgiaWxsZWdhbCIsIWUuaXNBbGlhc05hbWVMZWdhbCksYigidGl0bGUiLGUudGl0bGUpLHgoMSkseXQoZS5hbGlhcy5hbGlhc1RleHQpfX12YXIgX3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNBbGlhc05hbWVMZWdhbD0hMCx0aGlzLmFsaWFzQ2hhbmdlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZXhwZXJpbWVudC1hbGlhcyJdXSxpbnB1dHM6e2FsaWFzOiJhbGlhcyIsYWxpYXNFZGl0YWJsZToiYWxpYXNFZGl0YWJsZSIsdGl0bGU6InRpdGxlIixpc0FsaWFzTmFtZUxlZ2FsOiJpc0FsaWFzTmFtZUxlZ2FsIn0sb3V0cHV0czp7YWxpYXNDaGFuZ2VkOiJhbGlhc0NoYW5nZWQifSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJhbGlhcy1udW1iZXIiXSxbInBsYWNlaG9sZGVyIiwiQWxpYXMgZm9yIGV4cGVyaW1lbnQiLDMsInN0eWxlIiwidmFsdWUiLCJvblZhbHVlQ2hhbmdlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRWRpdEFsaWFzTmFtZSIsIiJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywidmFsdWUiLCJvblZhbHVlQ2hhbmdlIl0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsTEZlLDEsMywiY29udGVudC13cmFwcGluZy1pbnB1dCIsMSksRSgzLEJGZSwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUpe2xldCByPXN0KDQpO3goMSkseXQoaS5hbGlhcy5hbGlhc051bWJlcikseCgxKSxiKCJuZ0lmIixpLmFsaWFzRWRpdGFibGUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLHFuZV0sc3R5bGVzOlsiLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojMjEyMTIxO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoycHg7cGFkZGluZzowIDJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfSJdfSksbn0pKCk7ZnVuY3Rpb24gVkZlKG4sdCl7MSZuJiZOKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDIpLDImbiYmYigiYWxpYXMiLE0oKS5leHBlcmltZW50QWxpYXMpfWZ1bmN0aW9uIEhGZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiLyIpLHYoKSl9dmFyIFluZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxWRmUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxFKDEsSEZlLDIsMCwic3BhbiIsMSksZygyLCJzcGFuIiksRCgzKSx2KCkpLDImZSYmKGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDEpLGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDIpLHl0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W1hlLF92XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVVA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChjQSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShCKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpXSkucGlwZShCKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJihiKCJuYW1lIixXKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVygzLDcsaS5leHBlcmltZW50QWxpYXMkKSksemUoInRpdGxlIixXKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6W1luZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gekZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLmZpcnN0VGV4dFBhcnQoKSl9fXZhciB2dj0oKCk9PntjbGFzcyBue3BhcnNlVmFsdWUoKXtsZXQgZT10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lP3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCxlKSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZShlKX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXRydW5jYXRlZC1wYXRoIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiZmlyc3QtdGV4dC1wYXJ0Iiw0LCJuZ0lmIl0sWzEsInNlY29uZC10ZXh0LXBhcnQiXSxbMSwiZmlyc3QtdGV4dC1wYXJ0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLHpGZSwyLDEsInNwYW4iLDApLGcoMSwic3BhbiIsMSksRCgyKSx2KCkpLDImZSYmKGIoIm5nSWYiLGkuZmlyc3RUZXh0UGFydCgpLmxlbmd0aD4wKSx4KDIpLHl0KGkuc2Vjb25kVGV4dFBhcnQoKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLG59KSgpO2Z1bmN0aW9uIGpGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMil9ZnVuY3Rpb24gR0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwzKX12YXIgeXY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNDbGlwcGVkPSExLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciXV0saW5wdXRzOntpc0NsaXBwZWQ6ImlzQ2xpcHBlZCIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siZGF0YS12YWx1ZSIsImNsaXBwZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJEYXRhIGlzIG5vdCBmb3VuZCBvbiBzZWxlY3RlZCBzdGVwLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIiw0LCJuZ0lmIl0sWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsakZlLDEsMCwibWF0LWljb24iLDApLEUoMSxHRmUsMSwwLCJtYXQtaWNvbiIsMSkpLDImZSYmKGIoIm5nSWYiLGkuaXNDbGlwcGVkKSx4KDEpLGIoIm5nSWYiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSl9LGRlcGVuZGVuY2llczpbWGUsWm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZjtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjA7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZn1bX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBXRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE5KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJTdGVwICIsVygyLDEsZS5zdGVwc1tlLnN0ZXBJbmRleF0pLCIiKX19ZnVuY3Rpb24gcUZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMCksRCgxKSxqKDIsIm51bWJlciIpLGooMywibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGFwKCJTYW1wbGUgIixXKDIsMixlLnNhbXBsZSsxKSwiLyIsVygzLDQsZS5udW1TYW1wbGUpLCIiKX19ZnVuY3Rpb24gWUZlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyMSl9ZnVuY3Rpb24gWEZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJzcGFuIiwzMCkoMiwic3BhbiIsMzEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMiksT3QoImxlZnQiLGUuc2xpZGVyU3RhcnRQb3NpdGlvbikoIndpZHRoIixlLnNsaWRlclRyYWNrV2lkdGgpfX1mdW5jdGlvbiBRRmUobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzMiksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMyk7T3QoImxlZnQiLGkuZ2V0TGlua2VkVGltZVRpY2tMZWZ0U3R5bGUoZSkpKCJtYXJnaW4tbGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja01hcmdpbkxlZnRTdHlsZShlKSl9fWZ1bmN0aW9uIEtGZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyNyksRSgxLFhGZSwzLDQsInNwYW4iLDI4KSxFKDIsUUZlLDEsNCwiZGl2IiwyOSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0lmIixudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApLHgoMSksYigibmdGb3JPZiIsZS5zZWxlY3RlZFN0ZXBzKX19dmFyIFpGZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LEpGZT1mdW5jdGlvbihuKXtyZXR1cm57ZmlsdGVyOm59fTtmdW5jdGlvbiAkRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDIyKSgyLCJtYXQtc2xpZGVyIiwyMyksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25TbGlkZXJJbnB1dChyKSl9KSx2KCksRSgzLEtGZSwzLDIsImRpdiIsMjQpLHYoKSxnKDQsImRpdiIsMjUpLE4oNSwiaW1nIiwyNiksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgyKSxiKCJuZ0NsYXNzIixIbigxMSxaRmUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSx4KDEpLGIoIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbikseCgyKSxQYigiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSx4cigic3JjIixlLmltYWdlVXJsLGRsKSxiKCJuZ1N0eWxlIixIbigxMyxKRmUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBlTmUobix0KXsxJm4mJihnKDAsImRpdiIsMzQpLEQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24gdE5lKG4sdCl7aWYoMSZuJiZFKDAsZU5lLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT1NKCk7YigibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIG5OZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxRbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1FZSx0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249IiIsdGhpcy5zbGlkZXJUcmFja1dpZHRoPSIiLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbj1udWxsLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBHLHRoaXMuc3RlcEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHfWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KGUpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQoZS52YWx1ZSl9Y2hhbmdlRGlzdGluY3QoZSl7cmV0dXJuIGUuY3VycmVudFZhbHVlIT09ZS5wcmV2aW91c1ZhbHVlfW5nT25DaGFuZ2VzKGUpeyhlLnNlbGVjdGVkU3RlcHMmJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5zZWxlY3RlZFN0ZXBzKXx8ZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZ0aGlzLmNoYW5nZURpc3RpbmN0KGUubGlua2VkVGltZVNlbGVjdGlvbikpJiZ0aGlzLnJlbmRlclJhbmdlU2xpZGVyKCl9cmVuZGVyUmFuZ2VTbGlkZXIoKXtpZighdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHwhdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApcmV0dXJuO2xldCBlPXRoaXMuc3RlcHMubGVuZ3RoLTEsaT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwPHRoaXMuc3RlcHNbMF0/dGhpcy5zdGVwc1swXTp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwLHI9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA+dGhpcy5zdGVwc1tlXT90aGlzLnN0ZXBzW2VdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwLHtzdGFydFBvc2l0aW9uOm8sd2lkdGg6c309dGhpcy5nZXRUcmFja1N0YXJ0UG9zaXRpb25BbmRXaWR0aChpLHIsZSk7dGhpcy5zbGlkZXJTdGFydFBvc2l0aW9uPTEwMCpvKyIlIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9MTAwKnMrIiUifWdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGUsaSxyKXtsZXQgbz0xL3Iscz0wLGE9MCxsPTA7Zm9yKDtsPHRoaXMuc3RlcHMubGVuZ3RoLTE7bCsrKXtsZXQgYz10aGlzLnN0ZXBzW2xdLHU9dGhpcy5zdGVwc1tsKzFdO2lmKGM8PWUmJmU8PXUpe3MrPShlLWMpLyh1LWMpO2JyZWFrfX1mb3Iocz0ocytsKSpvO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sdT10aGlzLnN0ZXBzW2wrMV07aWYoZT49YyYmaTw9dSl7YT0oaS1lKS8odS1jKTticmVha31pZihlPj1jJiZpPj11KWErPSh1LWUpLyh1LWMpO2Vsc2V7aWYoIShpPj11KSl7YSs9KGktYykvKHUtYyk7YnJlYWt9YSs9MX19cmV0dXJuIGEqPW8sKHM+MXx8czwwKSYmKHM9MCkse3N0YXJ0UG9zaXRpb246cyx3aWR0aDphfX1nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKXtpZigtMT09dGhpcy5zdGVwcy5pbmRleE9mKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGVwSW5kZXg6IHN0ZXBJbmRleCB2YWx1ZSBpcyBub3QgaW5jbHVkZWQgaW4gc3RlcHMiKTtyZXR1cm4gdGhpcy5zdGVwcy5pbmRleE9mKGUpLyh0aGlzLnN0ZXBzLmxlbmd0aC0xKSoxMDArIiUifWdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybmAtJHt0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjE0fXB4YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZC1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJhY3R1YWwtc2l6ZSIsaS5zaG93QWN0dWFsU2l6ZSl9LGlucHV0czp7bG9hZFN0YXRlOiJsb2FkU3RhdGUiLHRpdGxlOiJ0aXRsZSIsdGFnOiJ0YWciLHJ1bklkOiJydW5JZCIsc2FtcGxlOiJzYW1wbGUiLG51bVNhbXBsZToibnVtU2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwczoic3RlcHMiLGJyaWdodG5lc3NJbk1pbGxpOiJicmlnaHRuZXNzSW5NaWxsaSIsY29udHJhc3RJbk1pbGxpOiJjb250cmFzdEluTWlsbGkiLHNob3dBY3R1YWxTaXplOiJzaG93QWN0dWFsU2l6ZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsYWxsb3dUb2dnbGVBY3R1YWxTaXplOiJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsc2VsZWN0ZWRTdGVwczoic2VsZWN0ZWRTdGVwcyIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMSx2YXJzOjE2LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYW4gaW1hZ2UgY2FyZCB0aGF0IHRvZ2dsZXMgYWN0dWFsIGltYWdlIHNpemUu4pCfM2NhMDVlZjNhNmUzYTM3MDY1ZjVlMGY2OWM1ZDVhMjE3OGQ5MDc5MeKQnzc2MzUxMDE5MzY2NjQ3ODkxNDA6VG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplYCxbWzEsImhlYWRpbmciXSxbMSwibGluZSJdLFsxLCJ0YWciXSxbMSwidGFnLXBhdGgiLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwiaW1hZ2Vfc2VhcmNoXzI0cHgiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwibWV0YWRhdGEiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYW1wbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ltYWdlRGF0YSIsIiJdLFsxLCJzdGVwIl0sWzEsInNhbXBsZSJdLFsiZGlhbWV0ZXIiLCIxOCIsMSwibG9hZGluZyJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidGlja0ludGVydmFsIiwidmFsdWUiLCJpbnB1dCJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiXSxbMSwibGlua2VkLXRpbWUtd3JhcHBlciJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImxpbmtlZC10aW1lLXRpY2siLDMsImxlZnQiLCJtYXJnaW4tbGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJsaW5rZWQtdGltZS10aWNrIl0sWyJjbGFzcyIsImVtcHR5LW1lc3NhZ2UiLDQsIm5nSWYiXSxbMSwiZW1wdHktbWVzc2FnZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTig3LCJtYXQtaWNvbiIsNyksdigpLGcoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFjdHVhbFNpemVUb2dnbGUuZW1pdCgpfSksTig5LCJtYXQtaWNvbiIsOSksdigpKCkoKSxnKDEwLCJkaXYiLDEpKDExLCJzcGFuIiwxMCksTigxMiwic3BhbiIsMTEpKDEzLCJjYXJkLXJ1bi1uYW1lIiwxMiksdigpLGcoMTQsImRpdiIsMTMpLEUoMTUsV0ZlLDMsMywic3BhbiIsMTQpLEUoMTYscUZlLDQsNiwic3BhbiIsMTUpLEUoMTcsWUZlLDEsMCwibWF0LXNwaW5uZXIiLDE2KSx2KCkoKSgpLEUoMTgsJEZlLDYsMTUsIm5nLWNvbnRhaW5lciIsMTcpLEUoMTksdE5lLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTgsZW4pKSwyJmUpe2xldCByPXN0KDIwKTt4KDMpLHhyKCJ0aXRsZSIsaS50YWcpLHhyKCJ2YWx1ZSIsaS50aXRsZSkseCgxKSxiKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSx4KDIpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMSksYigiZGlzYWJsZWQiLCFpLmFsbG93VG9nZ2xlQWN0dWFsU2l6ZSkseCg0KSxiKCJuZ1N0eWxlIixIbigxNCxuTmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLGkubnVtU2FtcGxlPjEpLHgoMSksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSx3cCxIUCwkbixabix2byxUZCxVUCx2dix5dix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVde2hlaWdodDphdXRvfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHg7cG9zaXRpb246cmVsYXRpdmV9LmxpbmVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBtYXgtY29udGVudH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDo1cHh9Lm1ldGFkYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LXdpZHRoOjE3NXB4O3RleHQtYWxpZ246ZW5kfS50YWctcGF0aFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOmJhc2VsaW5lO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdLCAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RlcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdy15OmF1dG87cG9zaXRpb246cmVsYXRpdmV9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtpbWFnZS1yZW5kZXJpbmc6LW1vei1jcmlzcC1lZGdlcztpbWFnZS1yZW5kZXJpbmc6cGl4ZWxhdGVkfS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV0gICAuaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bztmbGV4Om5vbmV9W19uZ2hvc3QtJUNPTVAlXTpub3QoLmFjdHVhbC1zaXplKSAgIGltZ1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWF4LWhlaWdodDoxMDAlO21heC13aWR0aDoxMDAlO3dpZHRoOmF1dG87aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb250YWlufS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGVwLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfVtfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDowfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0ubGlua2VkLXRpbWUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDt3aWR0aDoxMDAlfS5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjE0cHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjF9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjJweDt0b3A6NnB4O3Bvc2l0aW9uOmFic29sdXRlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2xlZnQ6N3B4O3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksS25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPWksdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QodEEpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KG5BKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IFZyKHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1vblN0ZXBJbmRleENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChTUCh7Y2FyZElkOnRoaXMuY2FyZElkLHN0ZXBJbmRleDplfSkpfWlzSW1hZ2VDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09V24uSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtwbihbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbbCxjXSk9Pnt0aGlzLnNob3dBY3R1YWxTaXplPWx8fGMsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93QWN0dWFsU2l6ZSl9KSkuc3Vic2NyaWJlKCgpPT57fSk7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoU2wsdGhpcy5jYXJkSWQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxIZShsPT4hIWwmJnRoaXMuaXNJbWFnZUNhcmRNZXRhZGF0YShsKSksQihsPT5sKSxRcygxKSksbz1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksQigoW2wsY10pPT57bGV0IHU9bC5ydW5JZDtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eSh1KT9jW3VdOltdfSksZGkoKGwsYyk9PmwubGVuZ3RoPT09Yy5sZW5ndGgmJjA9PT1sLmxlbmd0aHx8bD09PWMpLFFzKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QoTVYsdGhpcy5jYXJkSWQpLnBpcGUoQihsPT5sP2wuaW5kZXg6bnVsbCkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD10aGlzLnN0b3JlLnNlbGVjdChNVix0aGlzLmNhcmRJZCkucGlwZShCKGw9PiEhbCYmbC5pc0Nsb3Nlc3QpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihsPT5sLnJ1bklkKSksdGhpcy5zYW1wbGUkPWkucGlwZShCKGw9Pmwuc2FtcGxlKSksdGhpcy5udW1TYW1wbGUkPWkucGlwZShCKGw9PmwubnVtU2FtcGxlKSksdGhpcy5zdGVwcyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc1osdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KFVwKS5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/Y18obCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcih1PT51Pj1sLnN0YXJ0U3RlcCYmdTw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPXBuKFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoQigoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoQihsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpLHcoeXUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksUCgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFcoMywyMixpLnRhZyQpKSgicnVuSWQiLFcoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFcoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixXKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixXKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixXKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixXKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixXKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVygxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFcoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVcoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFcoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFcoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W1FuZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHJyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KHJyfHwocnI9e30pKSxycikpKCksU3I9KCgpPT4oZnVuY3Rpb24obil7bltuLkxJTkVBUj0wXT0iTElORUFSIixuW24uTE9HMTA9MV09IkxPRzEwIixuW24uVElNRT0yXT0iVElNRSJ9KFNyfHwoU3I9e30pKSxTcikpKCksa3I9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJOT05FIixuLkRSQUdfWk9PTUlORz0iRFJBR19aT09NSU5HIixuLlNDUk9MTF9aT09NSU5HPSJTQ1JPTExfWk9PTUlORyIsbi5QQU5OSU5HPSJQQU5OSU5HIn0oa3J8fChrcj17fSkpLGtyKSkoKTtmdW5jdGlvbiBzTmUobix0KXsxJm4mJihnKDAsInNwYW4iKSxEKDEsInNjYWxhciIpLHYoKSl9ZnVuY3Rpb24gYU5lKG4sdCl7MSZuJiYoZygwLCJzcGFuIiksRCgxLCJoaXN0b2dyYW0iKSx2KCkpfWZ1bmN0aW9uIGxOZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwidW5rbm93biIpLHYoKSl9ZnVuY3Rpb24gY05lKG4sdCl7aWYoMSZuJiYoS3QoMCwxMyksRSgxLHNOZSwyLDAsInNwYW4iLDE0KSxFKDIsYU5lLDIsMCwic3BhbiIsMTQpLEUoMyxsTmUsMiwwLCJzcGFuIiwxNSksWnQoKSksMiZuKXtsZXQgZT1NKDIpO2IoIm5nU3dpdGNoIixlLmNhcmRNZXRhZGF0YS5wbHVnaW4pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUykseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gdU5lKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBkTmUobix0KXtpZigxJm4mJihnKDAsIm9wdGlvbiIsMTYpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx4KDEpLHl0KGUubmFtZSl9fWZ1bmN0aW9uIHBOZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImgyIiksRSgyLGNOZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLGcoNCwic3BhbiIpLEQoNSwiRG93bmxvYWRceGEwIiksdigpLEUoNix1TmUsMSwwLCJuZy1jb250YWluZXIiLDMpLGcoNywic3BhbiIpLEQoOCwiXHhhMGRhdGEgZm9yXHhhMCIpLHYoKSxnKDksImNvZGUiLDQpLEQoMTApLHYoKSgpLGcoMTEsIm1hdC1kaWFsb2ctY29udGVudCIpKDEyLCJtYXQtZm9ybS1maWVsZCIsNSkoMTMsIm1hdC1sYWJlbCIpLEQoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksdigpLGcoMTUsInNlbGVjdCIsNiksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLGcoMTYsIm9wdGlvbiIsNyksRCgxNywiLSIpLHYoKSxFKDE4LGROZSwyLDIsIm9wdGlvbiIsOCksdigpKCksZygxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLEQoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksdigpLEQoMjIsIlx4YTAiKSxnKDIzLCJhIiwxMCksRCgyNCwiSlNPTiIpLHYoKSxnKDI1LCJhIiwxMCksRCgyNiwiQ1NWIiksdigpKCkoKSxnKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksRCgyOSwiQ2xvc2UiKSx2KCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoMyksaT1NKCk7eCg2KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlKSx4KDMpLGIoInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLHgoMSkseXQoaS5jYXJkTWV0YWRhdGEudGFnKSx4KDUpLGIoInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSx4KDEpLGIoInZhbHVlIiwiIikseCgyKSxiKCJuZ0Zvck9mIixpLnJ1bnMpLHgoNSksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24sZGwpLHgoMiksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSkoImhyZWYiLGkuZG93bmxvYWRVcmxDc3YsZGwpfX1mdW5jdGlvbiBoTmUobix0KXsxJm4mJkQoMCwiTG9hZGluZy4uLiIpfXZhciBKbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEcsdGhpcy5QbHVnaW5UeXBlPVdufWdldERvd25sb2FkTmFtZShlKXtsZXQgaT10aGlzLnJ1bnMuZmluZChyPT5yLmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKTtyZXR1cm4gaT9gJHtpLm5hbWV9LiR7ZX1gOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCIsImhyZWYiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIl0sWyJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIk5nU3dpdGNoRGVmYXVsdCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEUoMCxwTmUsMzAsMTIsIm5nLWNvbnRhaW5lciIsMCksRSgxLGhOZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDEsZW4pKSwyJmUpe2xldCByPXN0KDIpO2IoIm5nSWYiLGkuY2FyZE1ldGFkYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxObyxocixJcixIUCxBJCxQJCwkbixGQSxqQSxHQSxXQSxEdSx6XyxRX10sc3R5bGVzOlsiaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksJG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IFZyKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD1lLnNlbGVjdChTbCxyLmNhcmRJZCkucGlwZShIZShvPT5Cb29sZWFuKG8pKSksdGhpcy5kb3dubG9hZFVybENzdiQ9cG4oW2Uuc2VsZWN0KFNsLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShCKChbbyxzXSk9Pm8mJnM/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxzLCJjc3YiKTpudWxsKSxWbihudWxsKSksdGhpcy5kb3dubG9hZFVybEpzb24kPXBuKFtlLnNlbGVjdChTbCxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoQigoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywianNvbiIpOm51bGwpLFZuKG51bGwpKSx0aGlzLnJ1bnMkPXBuKFtlLnNlbGVjdChDWiksZS5zZWxlY3QoTHAsci5jYXJkSWQpXSkucGlwZShCKChbbyxzXSk9PnM/T2JqZWN0LmtleXMocykubWFwKGE9Pm8uZ2V0KGEpKS5maWx0ZXIoQm9vbGVhbik6W10pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyh5dSksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksUCgicnVuU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkUnVuSWQkLm5leHQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLHYoKSksMiZlJiZiKCJjYXJkTWV0YWRhdGEiLFcoMSw1LGkuY2FyZE1ldGFkYXRhJCkpKCJydW5zIixXKDIsNyxpLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFcoMyw5LGkuc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLFcoNCwxMSxpLmRvd25sb2FkVXJsQ3N2JCkpKCJkb3dubG9hZFVybEpzb24iLFcoNSwxMyxpLmRvd25sb2FkVXJsSnNvbiQpKX0sZGVwZW5kZW5jaWVzOltKbmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJsKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIHd3KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBSbChuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgRnU9d3coUmwpLnJpZ2h0LHNIPU1hdGguc3FydCg1MCksYUg9TWF0aC5zcXJ0KDEwKSxsSD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gTXcobix0LGUpe3ZhciBpLG8scyxhLHI9LTE7aWYoZT0rZSwobj0rbik9PSh0PSt0KSYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYobz1uLG49dCx0PW8pLDA9PT0oYT1idihuLHQsZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtbisxKSk7KytyPG87KXNbcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKG4tdCsxKSk7KytyPG87KXNbcl09KG4tcikvYTtyZXR1cm4gaSYmcy5yZXZlcnNlKCksc31mdW5jdGlvbiBidihuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PXNIPzEwOm8+PWFIPzU6bz49bEg/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj1zSD8xMDpvPj1hSD81Om8+PWxIPzI6MSl9ZnVuY3Rpb24gRGQobix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PXNIP3IqPTEwOm8+PWFIP3IqPTU6bz49bEgmJihyKj0yKSx0PG4/LXI6cn12YXIgalA9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIG9pZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNTmUobil7cmV0dXJuInRyYW5zbGF0ZSgiKyhuKy41KSsiLDApIn1mdW5jdGlvbiBTTmUobil7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKG4rLjUpKyIpIn1mdW5jdGlvbiBFTmUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybituKHQpfX1mdW5jdGlvbiBUTmUobil7dmFyIHQ9TWF0aC5tYXgoMCxuLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIG4ucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24oZSl7cmV0dXJuK24oZSkrdH19ZnVuY3Rpb24gRE5lKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGFpZShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD0xPT09bnx8ND09PW4/LTE6MSxjPTQ9PT1ufHwyPT09bj8ieCI6InkiLHU9MT09PW58fDM9PT1uP01OZTpTTmU7ZnVuY3Rpb24gZChwKXt2YXIgaD1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksZj1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOm9pZSksbT1NYXRoLm1heChvLDApK2EsQz10LnJhbmdlKCksXz0rQ1swXSsuNSx5PStDW0MubGVuZ3RoLTFdKy41LEk9KHQuYmFuZHdpZHRoP1ROZTpFTmUpKHQuY29weSgpKSxBPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxPPUEuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLGVlPUEuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCx0KS5vcmRlcigpLFg9ZWUuZXhpdCgpLHhlPWVlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksZmU9ZWUuc2VsZWN0KCJsaW5lIiksdmU9ZWUuc2VsZWN0KCJ0ZXh0Iik7Tz1PLm1lcmdlKE8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLGVlPWVlLm1lcmdlKHhlKSxmZT1mZS5tZXJnZSh4ZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLHZlPXZlLm1lcmdlKHhlLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCptKS5hdHRyKCJkeSIsMT09PW4/IjBlbSI6Mz09PW4/IjAuNzFlbSI6IjAuMzJlbSIpKSxwIT09QSYmKE89Ty50cmFuc2l0aW9uKHApLGVlPWVlLnRyYW5zaXRpb24ocCksZmU9ZmUudHJhbnNpdGlvbihwKSx2ZT12ZS50cmFuc2l0aW9uKHApLFg9WC50cmFuc2l0aW9uKHApLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVCl7cmV0dXJuIGlzRmluaXRlKFQ9SShUKSk/dShUKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSx4ZS5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFQpe3ZhciBuZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KG5lJiZpc0Zpbml0ZShuZT1uZShUKSk/bmU6SShUKSl9KSksWC5yZW1vdmUoKSxPLmF0dHIoImQiLDQ9PT1ufHwyPT1uP3M/Ik0iK2wqcysiLCIrXysiSDAuNVYiK3krIkgiK2wqczoiTTAuNSwiK18rIlYiK3k6cz8iTSIrXysiLCIrbCpzKyJWMC41SCIreSsiViIrbCpzOiJNIitfKyIsMC41SCIreSksZWUuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihUKXtyZXR1cm4gdShJKFQpKX0pLGZlLmF0dHIoYysiMiIsbCpvKSx2ZS5hdHRyKGMsbCptKS50ZXh0KGYpLEEuZmlsdGVyKEROZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PW4/InN0YXJ0Ijo0PT09bj8iZW5kIjoibWlkZGxlIiksQS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9SX0pfXJldHVybiBkLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXAsZCk6dH0sZC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPWpQLmNhbGwoYXJndW1lbnRzKSxkfSxkLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09cD9bXTpqUC5jYWxsKHApLGQpOmUuc2xpY2UoKX0sZC50aWNrVmFsdWVzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXA/bnVsbDpqUC5jYWxsKHApLGQpOmkmJmkuc2xpY2UoKX0sZC50aWNrRm9ybWF0PWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZCk6cn0sZC50aWNrU2l6ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPStwLGQpOm99LGQudGlja1NpemVJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rcCxkKTpvfSxkLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3AsZCk6c30sZC50aWNrUGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rcCxkKTphfSxkfXZhciBBTmU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gY2llKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IHFQKGUpfWZ1bmN0aW9uIHFQKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIElOZShuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfWZ1bmN0aW9uIFBOZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGxpZShuLHQsZSl7Zm9yKHZhciBpPTAscj1uLmxlbmd0aDtpPHI7KytpKWlmKG5baV0ubmFtZT09PXQpe25baV09QU5lLG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn1xUC5wcm90b3R5cGU9Y2llLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cVAsb246ZnVuY3Rpb24obix0KXt2YXIgcixlPXRoaXMuXyxpPUlOZShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZihudWxsPT10KWZvcihyIGluIGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288czspaWYoKHI9KG49aVtvXSkudHlwZSkmJihyPVBOZShlW3JdLG4ubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sdD10aGlzLl87Zm9yKHZhciBlIGluIHQpbltlXT10W2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBxUChuKX0sY2FsbDpmdW5jdGlvbihuLHQpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbyxlPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSllW2ldPWFyZ3VtZW50c1tpKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKGk9MCxyPShvPXRoaXMuX1tuXSkubGVuZ3RoO2k8cjsrK2kpb1tpXS52YWx1ZS5hcHBseSh0LGUpfSxhcHBseTpmdW5jdGlvbihuLHQsZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IodmFyIGk9dGhpcy5fW25dLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseSh0LGUpfX07dmFyIGZIPWNpZSxZUD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbUg9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOllQLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gQWQobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksbUguaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOm1IW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gUk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09WVAmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVlQP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBPTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gWFAobil7dmFyIHQ9QWQobik7cmV0dXJuKHQubG9jYWw/T05lOlJOZSkodCl9ZnVuY3Rpb24ga05lKCl7fWZ1bmN0aW9uIGJtKG4pe3JldHVybiBudWxsPT1uP2tOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIEZOZSgpe3JldHVybltdfWZ1bmN0aW9uIEV3KG4pe3JldHVybiBudWxsPT1uP0ZOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIFR3KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIFFQKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIER3KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWZ1bmN0aW9uIE5OZShuLHQsZSxpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPXQubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT10W3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6ZVtzXT1uZXcgRHcobixvW3NdKTtmb3IoO3M8bDsrK3MpKGE9dFtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIExOZShuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGgsYz17fSx1PXQubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkodSk7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYocFthXT1oPSIkIitzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksaCBpbiBjP3JbYV09bDpjW2hdPWwpO2ZvcihhPTA7YTxkOysrYSkobD1jW2g9IiQiK3MuY2FsbChuLG9bYV0sYSxvKV0pPyhpW2FdPWwsbC5fX2RhdGFfXz1vW2FdLGNbaF09bnVsbCk6ZVthXT1uZXcgRHcobixvW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbcFthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBCTmUobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gVk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBITmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBVTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiB6TmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX19ZnVuY3Rpb24gak5lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0dHJpYnV0ZShuLGUpfX1mdW5jdGlvbiBHTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gS1Aobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFdOZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBxTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBZTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4saSxlKX19ZnVuY3Rpb24gbGgobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxLUChuKS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBYTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uIFFOZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gS05lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9fWZ1bmN0aW9uIFBpZShuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZ0gobil7cmV0dXJuIG4uY2xhc3NMaXN0fHxuZXcgUmllKG4pfWZ1bmN0aW9uIFJpZShuKXt0aGlzLl9ub2RlPW4sdGhpcy5fbmFtZXM9UGllKG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gT2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24ga2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gWk5lKG4pe3JldHVybiBmdW5jdGlvbigpe09pZSh0aGlzLG4pfX1mdW5jdGlvbiBKTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7a2llKHRoaXMsbil9fWZ1bmN0aW9uICROZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9PaWU6a2llKSh0aGlzLG4pfX1mdW5jdGlvbiBlTGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHRMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIG5MZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX1mdW5jdGlvbiBpTGUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiByTGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gb0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ/PyIifX1mdW5jdGlvbiBzTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gYUxlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY0xlKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdUxlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBkTGUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufUR3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RHcsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX0sUmllLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRoaXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIHFpZT17fSxfSD1udWxsO2Z1bmN0aW9uIHBMZShuLHQsZSl7cmV0dXJuIG49WWllKG4sdCxlKSxmdW5jdGlvbihpKXt2YXIgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHxyIT09dGhpcyYmISg4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpKSYmbi5jYWxsKHRoaXMsaSl9fWZ1bmN0aW9uIFlpZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPV9IO19IPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e19IPXJ9fX1mdW5jdGlvbiBoTGUobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixpPXQuaW5kZXhPZigiLiIpO3JldHVybiBpPj0wJiYoZT10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHt0eXBlOnQsbmFtZTplfX0pfWZ1bmN0aW9uIGZMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBvLGU9MCxpPS0xLHI9dC5sZW5ndGg7ZTxyOysrZSlvPXRbZV0sbi50eXBlJiZvLnR5cGUhPT1uLnR5cGV8fG8ubmFtZSE9PW4ubmFtZT90WysraV09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gbUxlKG4sdCxlKXt2YXIgaT1xaWUuaGFzT3duUHJvcGVydHkobi50eXBlKT9wTGU6WWllO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgdT0wLGQ9YS5sZW5ndGg7dTxkOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFpZShuLHQsZSl7dmFyIGk9S1Aobikscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gZ0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFpZSh0aGlzLG4sdCl9fWZ1bmN0aW9uIF9MZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRaWUodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwocWllPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdkg9W251bGxdO2Z1bmN0aW9uIFFyKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFppZSgpe3JldHVybiBuZXcgUXIoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx2SCl9UXIucHJvdG90eXBlPVppZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFyLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Ym0obikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KShsPW9bdV0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbdV09Yyk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPUV3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBRcihpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVR3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGg9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihlZSl7aFsrK2NdPWVlfSksaDt2YXIgZT10P0xOZTpOTmUsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KG4pKTtmb3IodmFyIG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PWlbY10sZD1yW2NdLHA9ZC5sZW5ndGgsaD1uLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsaSksZj1oLmxlbmd0aCxtPWFbY109bmV3IEFycmF5KGYpLEM9c1tjXT1uZXcgQXJyYXkoZik7ZSh1LGQsbSxDLGxbY109bmV3IEFycmF5KHApLGgsdCk7Zm9yKHZhciBBLE8seT0wLEk9MDt5PGY7Kyt5KWlmKEE9bVt5XSl7Zm9yKHk+PUkmJihJPXkrMSk7IShPPUNbSV0pJiYrK0k8ZjspO0EuX25leHQ9T3x8bnVsbH19cmV0dXJuKHM9bmV3IFFyKHMsaSkpLl9lbnRlcj1hLHMuX2V4aXQ9bCxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgUXIodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoUVApLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRcih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFFQKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24oaSk6aS5hcHBlbmQobisiIiksbnVsbCE9dCYmKHI9dChyKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgUXIocyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9LTEsZT1uLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciBzLGk9blt0XSxyPWkubGVuZ3RoLTEsbz1pW3JdOy0tcj49MDspKHM9aVtyXSkmJihvJiY0XnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxvKSxvPXMpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQoZCxwKXtyZXR1cm4gZCYmcD9uKGQuX19kYXRhX18scC5fX2RhdGFfXyk6IWQtIXB9bnx8KG49Qk5lKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYyxzPWVbb10sYT1zLmxlbmd0aCxsPXJbb109bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KShjPXNbdV0pJiYobFt1XT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBRcihyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIHM9aVtyXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsaT10Lmxlbmd0aDtlPGk7KytlKWZvcih2YXIgYSxyPXRbZV0sbz0wLHM9ci5sZW5ndGg7bzxzOysrbykoYT1yW29dKSYmbi5jYWxsKGEsYS5fX2RhdGFfXyxvLHIpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9QWQobik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9lLmxvY2FsP0hOZTpWTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZS5sb2NhbD9HTmU6ak5lOmUubG9jYWw/ek5lOlVOZSkoZSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9XTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/WU5lOnFOZSkobix0LGU/PyIiKSk6bGgodGhpcy5ub2RlKCksbil9LHByb3BlcnR5OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/WE5lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P0tOZTpRTmUpKG4sdCkpOnRoaXMubm9kZSgpW25dfSxjbGFzc2VkOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UGllKG4rIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPWdIKHRoaXMubm9kZSgpKSxyPS0xLG89ZS5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKGVbcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyROZTp0P1pOZTpKTmUpKGUsdCkpfSx0ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2VMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/bkxlOnRMZSkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2lMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/b0xlOnJMZSkobikpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHNMZSl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChhTGUpfSxhcHBlbmQ6ZnVuY3Rpb24obil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKSxpPW51bGw9PXQ/bExlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Ym0odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGNMZSl9LGNsb25lOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNlbGVjdChuP2RMZTp1TGUpfSxkYXR1bTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbik6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKG4sdCxlKXt2YXIgcixzLGk9aExlKG4rIiIpLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT10P21MZTpmTGUsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChhKGlbcl0sdCxlKSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKWZvcih2YXIgdSxsPTAsYz1hLmxlbmd0aDtsPGM7KytsKWZvcihyPTAsdT1hW2xdO3I8bzsrK3IpaWYoKHM9aVtyXSkudHlwZT09PXUudHlwZSYmcy5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P19MZTpnTGUpKG4sdCkpfX07dmFyIElkPVppZTtmdW5jdGlvbiBaUChuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bmV3IFFyKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUXIoW1tuXV0sdkgpfWZ1bmN0aW9uIHhtKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiB4dihuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBjaCgpe312YXIgJFA9MS8uNyxDdj0iXFxzKihbKy1dP1xcZCspXFxzKiIsSXc9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTHU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHZMZT0vXiMoWzAtOWEtZl17Myw4fSkkLyx5TGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0N2LEN2LEN2XSsiXFwpJCIpLGJMZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTHUsTHUsTHVdKyJcXCkkIikseExlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQ3YsQ3YsQ3YsSXddKyJcXCkkIiksQ0xlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTHUsTHUsTHUsSXddKyJcXCkkIiksd0xlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tJdyxMdSxMdV0rIlxcKSQiKSxNTGU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tJdyxMdSxMdSxJd10rIlxcKSQiKSxKaWU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gJGllKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gZXJlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVGMobil7dmFyIHQsZTtyZXR1cm4gbj0obisiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dkxlLmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksNj09PWU/dHJlKHQpOjM9PT1lP25ldyBncyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKDE1JnQpPDw0fDE1JnQsMSk6OD09PWU/SlAodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwoMjU1JnQpLzI1NSk6ND09PWU/SlAodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgoMTUmdCk8PDR8MTUmdCkvMjU1KTpudWxsKToodD15TGUuZXhlYyhuKSk/bmV3IGdzKHRbMV0sdFsyXSx0WzNdLDEpOih0PWJMZS5leGVjKG4pKT9uZXcgZ3MoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFszXS8xMDAsMSk6KHQ9eExlLmV4ZWMobikpP0pQKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PUNMZS5leGVjKG4pKT9KUCgyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCx0WzRdKToodD13TGUuZXhlYyhuKSk/cnJlKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9TUxlLmV4ZWMobikpP3JyZSh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkppZS5oYXNPd25Qcm9wZXJ0eShuKT90cmUoSmllW25dKToidHJhbnNwYXJlbnQiPT09bj9uZXcgZ3MoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB0cmUobil7cmV0dXJuIG5ldyBncyhuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm4sMSl9ZnVuY3Rpb24gSlAobix0LGUsaSl7cmV0dXJuIGk8PTAmJihuPXQ9ZT1OYU4pLG5ldyBncyhuLHQsZSxpKX1mdW5jdGlvbiB4SChuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNofHwobj1UYyhuKSksbj9uZXcgZ3MoKG49bi5yZ2IoKSkucixuLmcsbi5iLG4ub3BhY2l0eSk6bmV3IGdzfWZ1bmN0aW9uIHd2KG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94SChuKTpuZXcgZ3Mobix0LGUsaT8/MSl9ZnVuY3Rpb24gZ3Mobix0LGUsaSl7dGhpcy5yPStuLHRoaXMuZz0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIG5yZSgpe3JldHVybiIjIit5SCh0aGlzLnIpK3lIKHRoaXMuZykreUgodGhpcy5iKX1mdW5jdGlvbiBpcmUoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT1uPyIpIjoiLCAiK24rIikiKX1mdW5jdGlvbiB5SChuKXtyZXR1cm4oKG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpKTwxNj8iMCI6IiIpK24udG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHJyZShuLHQsZSxpKXtyZXR1cm4gaTw9MD9uPXQ9ZT1OYU46ZTw9MHx8ZT49MT9uPXQ9TmFOOnQ8PTAmJihuPU5hTiksbmV3IE51KG4sdCxlLGkpfWZ1bmN0aW9uIG9yZShuKXtpZihuIGluc3RhbmNlb2YgTnUpcmV0dXJuIG5ldyBOdShuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBjaHx8KG49VGMobikpLCFuKXJldHVybiBuZXcgTnU7aWYobiBpbnN0YW5jZW9mIE51KXJldHVybiBuO3ZhciB0PShuPW4ucmdiKCkpLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSksbz1NYXRoLm1heCh0LGUsaSkscz1OYU4sYT1vLXIsbD0obytyKS8yO3JldHVybiBhPyhzPXQ9PT1vPyhlLWkpL2ErNiooZTxpKTplPT09bz8oaS10KS9hKzI6KHQtZSkvYSs0LGEvPWw8LjU/bytyOjItby1yLHMqPTYwKTphPWw+MCYmbDwxPzA6cyxuZXcgTnUocyxhLGwsbi5vcGFjaXR5KX1mdW5jdGlvbiBDbShuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/b3JlKG4pOm5ldyBOdShuLHQsZSxpPz8xKX1mdW5jdGlvbiBOdShuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5zPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gYkgobix0LGUpe3JldHVybiAyNTUqKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpfXhtKGNoLFRjLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiRpZSxmb3JtYXRIZXg6JGllLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBvcmUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjplcmUsdG9TdHJpbmc6ZXJlfSkseG0oZ3Msd3YseHYoY2gse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/JFA6TWF0aC5wb3coJFAsbiksbmV3IGdzKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBncyh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Om5yZSxmb3JtYXRIZXg6bnJlLGZvcm1hdFJnYjppcmUsdG9TdHJpbmc6aXJlfSkpLHhtKE51LENtLHh2KGNoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPyRQOk1hdGgucG93KCRQLG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IGdzKGJIKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLGJIKG4scixpKSxiSChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09bj8iKSI6IiwgIituKyIpIil9fSkpO3ZhciBzcmU9TWF0aC5QSS8xODAsYXJlPTE4MC9NYXRoLlBJLGRyZT00LzI5LE12PTYvMjkscHJlPTMqTXYqTXY7ZnVuY3Rpb24gaHJlKG4pe2lmKG4gaW5zdGFuY2VvZiBCdSlyZXR1cm4gbmV3IEJ1KG4ubCxuLmEsbi5iLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIFBkKXJldHVybiBmcmUobik7biBpbnN0YW5jZW9mIGdzfHwobj14SChuKSk7dmFyIG8scyx0PVNIKG4uciksZT1TSChuLmcpLGk9U0gobi5iKSxyPUNIKCguMjIyNTA0NSp0Ky43MTY4Nzg2KmUrLjA2MDYxNjkqaSkvMSk7cmV0dXJuIHQ9PT1lJiZlPT09aT9vPXM9cjoobz1DSCgoLjQzNjA3NDcqdCsuMzg1MDY0OSplKy4xNDMwODA0KmkpLy45NjQyMikscz1DSCgoLjAxMzkzMjIqdCsuMDk3MTA0NSplKy43MTQxNzMzKmkpLy44MjUyMSkpLG5ldyBCdSgxMTYqci0xNiw1MDAqKG8tciksMjAwKihyLXMpLG4ub3BhY2l0eSl9ZnVuY3Rpb24gQnUobix0LGUsaSl7dGhpcy5sPStuLHRoaXMuYT0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIENIKG4pe3JldHVybiBuPi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3cobiwxLzMpOm4vcHJlK2RyZX1mdW5jdGlvbiB3SChuKXtyZXR1cm4gbj5Ndj9uKm4qbjpwcmUqKG4tZHJlKX1mdW5jdGlvbiBNSChuKXtyZXR1cm4gMjU1KihuPD0uMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFNIKG4pe3JldHVybihuLz0yNTUpPD0uMDQwNDU/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFRMZShuKXtpZihuIGluc3RhbmNlb2YgUGQpcmV0dXJuIG5ldyBQZChuLmgsbi5jLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBCdXx8KG49aHJlKG4pKSwwPT09bi5hJiYwPT09bi5iKXJldHVybiBuZXcgUGQoTmFOLDA8bi5sJiZuLmw8MTAwPzA6TmFOLG4ubCxuLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIobi5iLG4uYSkqYXJlO3JldHVybiBuZXcgUGQodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KG4uYSpuLmErbi5iKm4uYiksbi5sLG4ub3BhY2l0eSl9ZnVuY3Rpb24gd20obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1RMZShuKTpuZXcgUGQobix0LGUsaT8/MSl9ZnVuY3Rpb24gUGQobix0LGUsaSl7dGhpcy5oPStuLHRoaXMuYz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGZyZShuKXtpZihpc05hTihuLmgpKXJldHVybiBuZXcgQnUobi5sLDAsMCxuLm9wYWNpdHkpO3ZhciB0PW4uaCpzcmU7cmV0dXJuIG5ldyBCdShuLmwsTWF0aC5jb3ModCkqbi5jLE1hdGguc2luKHQpKm4uYyxuLm9wYWNpdHkpfWZ1bmN0aW9uIFRIKG4sdCxlLGkscil7dmFyIG89bipuLHM9bypuO3JldHVybigoMS0zKm4rMypvLXMpKnQrKDQtNipvKzMqcykqZSsoMSszKm4rMypvLTMqcykqaStzKnIpLzZ9ZnVuY3Rpb24gU3Yobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIF9yZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbitlKnR9fWZ1bmN0aW9uIHRSKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP19yZShuLGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6U3YoaXNOYU4obik/dDpuKX1mdW5jdGlvbiBmYShuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9fcmUobixlKTpTdihpc05hTihuKT90Om4pfXhtKEJ1LGZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ocmUobik6bmV3IEJ1KG4sdCxlLGk/PzEpfSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBCdSh0aGlzLmwrMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgQnUodGhpcy5sLTE4KihuPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPSh0aGlzLmwrMTYpLzExNix0PWlzTmFOKHRoaXMuYSk/bjpuK3RoaXMuYS81MDAsZT1pc05hTih0aGlzLmIpP246bi10aGlzLmIvMjAwO3JldHVybiBuZXcgZ3MoTUgoMy4xMzM4NTYxKih0PS45NjQyMip3SCh0KSktMS42MTY4NjY3KihuPTEqd0gobikpLS40OTA2MTQ2KihlPS44MjUyMSp3SChlKSkpLE1IKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSpuKy4wMzM0NTQqZSksTUgoLjA3MTk0NTMqdC0uMjI4OTkxNCpuKzEuNDA1MjQyNyplKSx0aGlzLm9wYWNpdHkpfX0pKSx4bShQZCx3bSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQZCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobj8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUGQodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG4/PzEpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBmcmUodGhpcykucmdiKCl9fSkpO3ZhciBNbT1mdW5jdGlvbiBuKHQpe3ZhciBlPWZ1bmN0aW9uKG4pe3JldHVybiAxPT0obj0rbik/ZmE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10P2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbj1NYXRoLnBvdyhuLGUpLHQ9TWF0aC5wb3codCxlKS1uLGU9MS9lLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyhuK2kqdCxlKX19KHQsZSxuKTpTdihpc05hTih0KT9lOnQpfX0odCk7ZnVuY3Rpb24gaShyLG8pe3ZhciBzPWUoKHI9d3YocikpLnIsKG89d3YobykpLnIpLGE9ZShyLmcsby5nKSxsPWUoci5iLG8uYiksYz1mYShyLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHIucj1zKHUpLHIuZz1hKHUpLHIuYj1sKHUpLHIub3BhY2l0eT1jKHUpLHIrIiJ9fXJldHVybiBpLmdhbW1hPW4saX0oMSk7ZnVuY3Rpb24geXJlKG4pe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcyxhLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSk7Zm9yKHM9MDtzPGU7KytzKWE9d3YodFtzXSksaVtzXT1hLnJ8fDAscltzXT1hLmd8fDAsb1tzXT1hLmJ8fDA7cmV0dXJuIGk9bihpKSxyPW4ociksbz1uKG8pLGEub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBhLnI9aShsKSxhLmc9cihsKSxhLmI9byhsKSxhKyIifX19ZnVuY3Rpb24gYnJlKG4sdCl7dHx8KHQ9W10pO3ZhciByLGU9bj9NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCk6MCxpPXQuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1vKSt0W3JdKm87cmV0dXJuIGl9fWZ1bmN0aW9uIENyZShuLHQpe3ZhciBzLGU9dD90Lmxlbmd0aDowLGk9bj9NYXRoLm1pbihlLG4ubGVuZ3RoKTowLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGUpO2ZvcihzPTA7czxpOysrcylyW3NdPVNtKG5bc10sdFtzXSk7Zm9yKDtzPGU7KytzKW9bc109dFtzXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHM9MDtzPGk7KytzKW9bc109cltzXShhKTtyZXR1cm4gb319ZnVuY3Rpb24gd3JlKG4sdCl7dmFyIGU9bmV3IERhdGU7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gZS5zZXRUaW1lKG4qKDEtaSkrdCppKSxlfX1mdW5jdGlvbiBucyhuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIG4qKDEtZSkrdCplfX1mdW5jdGlvbiBNcmUobix0KXt2YXIgcixlPXt9LGk9e307Zm9yKHIgaW4obnVsbD09PW58fCJvYmplY3QiIT10eXBlb2YgbikmJihuPXt9KSwobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJih0PXt9KSx0KXIgaW4gbj9lW3JdPVNtKG5bcl0sdFtyXSk6aVtyXT10W3JdO3JldHVybiBmdW5jdGlvbihvKXtmb3IociBpbiBlKWlbcl09ZVtyXShvKTtyZXR1cm4gaX19eXJlKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0sbz1uW2krMV07cmV0dXJuIFRIKChlLWkvdCkqdCxpPjA/bltpLTFdOjIqci1vLHIsbyxpPHQtMT9uW2krMl06MipvLXIpfX0pLHlyZShmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBUSCgoZS1pL3QpKnQsblsoaSt0LTEpJXRdLG5baSV0XSxuWyhpKzEpJXRdLG5bKGkrMikldF0pfX0pO3ZhciBBSD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csREg9bmV3IFJlZ0V4cChBSC5zb3VyY2UsImciKTtmdW5jdGlvbiBQdyhuLHQpe3ZhciBpLHIsbyxlPUFILmxhc3RJbmRleD1ESC5sYXN0SW5kZXg9MCxzPS0xLGE9W10sbD1bXTtmb3Iobis9IiIsdCs9IiI7KGk9QUguZXhlYyhuKSkmJihyPURILmV4ZWModCkpOykobz1yLmluZGV4KT5lJiYobz10LnNsaWNlKGUsbyksYVtzXT9hW3NdKz1vOmFbKytzXT1vKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbc10/YVtzXSs9cjphWysrc109cjooYVsrK3NdPW51bGwsbC5wdXNoKHtpOnMseDpucyhpLHIpfSkpLGU9REgubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYobz10LnNsaWNlKGUpLGFbc10/YVtzXSs9bzphWysrc109byksYS5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIGQsdT0wO3U8dDsrK3UpYVsoZD1sW3VdKS5pXT1kLngoYyk7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlvbiBTbShuLHQpe3ZhciBpLGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWU/U3YodCk6KCJudW1iZXIiPT09ZT9uczoic3RyaW5nIj09PWU/KGk9VGModCkpPyh0PWksTW0pOlB3OnQgaW5zdGFuY2VvZiBUYz9NbTp0IGluc3RhbmNlb2YgRGF0ZT93cmU6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT9icmU6QXJyYXkuaXNBcnJheSh0KT9DcmU6ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmd8fGlzTmFOKHQpP01yZTpucykobix0KX1mdW5jdGlvbiBJSChuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgUncsUkgsRXJlLGlSLFNyZT0xODAvTWF0aC5QSSxuUj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBQSChuLHQsZSxpLHIsbyl7dmFyIHMsYSxsO3JldHVybihzPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1zLHQvPXMpLChsPW4qZSt0KmkpJiYoZS09bipsLGktPXQqbCksKGE9TWF0aC5zcXJ0KGUqZStpKmkpKSYmKGUvPWEsaS89YSxsLz1hKSxuKmk8dCplJiYobj0tbix0PS10LGw9LWwscz0tcykse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxuKSpTcmUsc2tld1g6TWF0aC5hdGFuKGwpKlNyZSxzY2FsZVg6cyxzY2FsZVk6YX19ZnVuY3Rpb24gQXJlKG4sdCxlLGkpe2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBkPVtdLHA9W107cmV0dXJuIGM9bihjKSx1PW4odSksZnVuY3Rpb24oYyx1LGQscCxoLGYpe2lmKGMhPT1kfHx1IT09cCl7dmFyIG09aC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTtmLnB1c2goe2k6bS00LHg6bnMoYyxkKX0se2k6bS0yLHg6bnModSxwKX0pfWVsc2UoZHx8cCkmJmgucHVzaCgidHJhbnNsYXRlKCIrZCt0K3ArZSl9KGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxkLHApLGZ1bmN0aW9uKGMsdSxkLHApe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKHIoZCkrInJvdGF0ZSgiLG51bGwsaSktMix4Om5zKGMsdSl9KSk6dSYmZC5wdXNoKHIoZCkrInJvdGF0ZSgiK3UraSl9KGMucm90YXRlLHUucm90YXRlLGQscCksZnVuY3Rpb24oYyx1LGQscCl7YyE9PXU/cC5wdXNoKHtpOmQucHVzaChyKGQpKyJza2V3WCgiLG51bGwsaSktMix4Om5zKGMsdSl9KTp1JiZkLnB1c2gocihkKSsic2tld1goIit1K2kpfShjLnNrZXdYLHUuc2tld1gsZCxwKSxmdW5jdGlvbihjLHUsZCxwLGgsZil7aWYoYyE9PWR8fHUhPT1wKXt2YXIgbT1oLnB1c2gocihoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zi5wdXNoKHtpOm0tNCx4Om5zKGMsZCl9LHtpOm0tMix4Om5zKHUscCl9KX1lbHNlKDEhPT1kfHwxIT09cCkmJmgucHVzaChyKGgpKyJzY2FsZSgiK2QrIiwiK3ArIikiKX0oYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksZCxwKSxjPXU9bnVsbCxmdW5jdGlvbihoKXtmb3IodmFyIEMsZj0tMSxtPXAubGVuZ3RoOysrZjxtOylkWyhDPXBbZl0pLmldPUMueChoKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBPSD1BcmUoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9uUjooUnd8fChSdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxSSD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRXJlPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxSdy5zdHlsZS50cmFuc2Zvcm09bixuPUVyZS5nZXRDb21wdXRlZFN0eWxlKFJILmFwcGVuZENoaWxkKFJ3KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxSSC5yZW1vdmVDaGlsZChSdyksUEgoKyhuPW4uc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksa0g9QXJlKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP25SOihpUnx8KGlSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGlSLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1pUi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9QSCgobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTpuUil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gSXJlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9Q20odCkpLmgsKGU9Q20oZSkpLmgpLHI9ZmEodC5zLGUucyksbz1mYSh0LmwsZS5sKSxzPWZhKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gdC5oPWkoYSksdC5zPXIoYSksdC5sPW8oYSksdC5vcGFjaXR5PXMoYSksdCsiIn19fXZhciBGSD1JcmUodFIpO2Z1bmN0aW9uIFByZShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PXdtKHQpKS5oLChlPXdtKGUpKS5oKSxyPWZhKHQuYyxlLmMpLG89ZmEodC5sLGUubCkscz1mYSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX1JcmUoZmEpO3ZhciByUixGdyxOSD1QcmUodFIpLEV2PShQcmUoZmEpLDApLGt3PTAsT3c9MCxvUj0wLEVtPTAsc1I9MCxOdz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxrcmU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24gVHYoKXtyZXR1cm4gRW18fChrcmUoRkxlKSxFbT1Ody5ub3coKStzUil9ZnVuY3Rpb24gRkxlKCl7RW09MH1mdW5jdGlvbiBMdygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gYVIobix0LGUpe3ZhciBpPW5ldyBMdztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIFJyZSgpe0VtPShvUj1Ody5ub3coKSkrc1IsRXY9a3c9MDt0cnl7IWZ1bmN0aW9uKCl7VHYoKSwrK0V2O2Zvcih2YXIgdCxuPXJSO247KSh0PUVtLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1Fdn0oKX1maW5hbGx5e0V2PTAsZnVuY3Rpb24oKXtmb3IodmFyIG4sZSx0PXJSLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpyUj1lKTtGdz1uLExIKGkpfSgpLEVtPTB9fWZ1bmN0aW9uIE5MZSgpe3ZhciBuPU53Lm5vdygpLHQ9bi1vUjt0PjFlMyYmKHNSLT10LG9SPW4pfWZ1bmN0aW9uIExIKG4pe0V2fHwoa3cmJihrdz1jbGVhclRpbWVvdXQoa3cpKSxuLUVtPjI0PyhuPDEvMCYmKGt3PXNldFRpbWVvdXQoUnJlLG4tTncubm93KCktc1IpKSxPdyYmKE93PWNsZWFySW50ZXJ2YWwoT3cpKSk6KE93fHwob1I9Tncubm93KCksT3c9c2V0SW50ZXJ2YWwoTkxlLDFlMykpLEV2PTEsa3JlKFJyZSkpKX1mdW5jdGlvbiBsUihuLHQsZSl7dmFyIGk9bmV3IEx3O3JldHVybiBpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0PW51bGw9PXQ/MDordCxlKSxpfUx3LnByb3RvdHlwZT1hUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkx3LHJlc3RhcnQ6ZnVuY3Rpb24obix0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT9UdigpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmRnchPT10aGlzJiYoRnc/RncuX25leHQ9dGhpczpyUj10aGlzLEZ3PXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsTEgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsTEgoKSl9fTt2YXIgQkxlPWZIKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFZMZT1bXTtmdW5jdGlvbiB1aChuLHQsZSxpLHIsbyl7dmFyIHM9bi5fX3RyYW5zaXRpb247aWYocyl7aWYoZSBpbiBzKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbihuLHQsZSl7dmFyIHIsaT1uLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBzKGMpe3ZhciB1LGQscCxoO2lmKDEhPT1lLnN0YXRlKXJldHVybiBsKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09ZS5uYW1lKXtpZigzPT09aC5zdGF0ZSlyZXR1cm4gbFIocyk7ND09PWguc3RhdGU/KGguc3RhdGU9NixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PHQmJihoLnN0YXRlPTYsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihsUihmdW5jdGlvbigpezM9PT1lLnN0YXRlJiYoZS5zdGF0ZT00LGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxhKGMpKX0pLGUuc3RhdGU9MixlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSwyPT09ZS5zdGF0ZSl7Zm9yKGUuc3RhdGU9MyxyPW5ldyBBcnJheShwPWUudHdlZW4ubGVuZ3RoKSx1PTAsZD0tMTt1PHA7Kyt1KShoPWUudHdlZW5bdV0udmFsdWUuY2FsbChuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrZF09aCk7ci5sZW5ndGg9ZCsxfX1mdW5jdGlvbiBhKGMpe2Zvcih2YXIgdT1jPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxjL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobCksZS5zdGF0ZT01LDEpLGQ9LTEscD1yLmxlbmd0aDsrK2Q8cDspcltkXS5jYWxsKG4sdSk7NT09PWUuc3RhdGUmJihlLm9uLmNhbGwoImVuZCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBjIGluIGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVt0XSxpKXJldHVybjtkZWxldGUgbi5fX3RyYW5zaXRpb259aVt0XT1lLGUudGltZXI9YVIoZnVuY3Rpb24oYyl7ZS5zdGF0ZT0xLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOkJMZSx0d2VlbjpWTGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIFZ3KG4sdCl7dmFyIGU9RG8obix0KTtpZihlLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBIcyhuLHQpe3ZhciBlPURvKG4sdCk7aWYoZS5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIERvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gVUxlKG4sdCl7dmFyIGUsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLG4pLG89ci50d2VlbjtpZihvIT09ZSlmb3IodmFyIHM9MCxhPShpPWU9bykubGVuZ3RoO3M8YTsrK3MpaWYoaVtzXS5uYW1lPT09dCl7KGk9aS5zbGljZSgpKS5zcGxpY2UocywxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIHpMZShuLHQsZSl7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SHModGhpcyxuKSxzPW8udHdlZW47aWYocyE9PWkpe3I9KGk9cykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfW8udHdlZW49cn19ZnVuY3Rpb24gRHYobix0LGUpe3ZhciBpPW4uX2lkO3JldHVybiBuLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLGkpOyhyLnZhbHVlfHwoci52YWx1ZT17fSkpW3RdPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24ocil7cmV0dXJuIERvKHIsaSkudmFsdWVbdF19fWZ1bmN0aW9uIHBSKG4sdCl7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgdD9uczp0IGluc3RhbmNlb2YgVGM/TW06KGU9VGModCkpPyh0PWUsTW0pOlB3KShuLHQpfWZ1bmN0aW9uIGpMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gR0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gV0xlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZShuKTtyZXR1cm4gcz09PXI/bnVsbDpzPT09aT9vOm89dChpPXMsZSl9fWZ1bmN0aW9uIHFMZShuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gWUxlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToocz10aGlzLmdldEF0dHJpYnV0ZShuKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFhMZShuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGwsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOihzPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFFMZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gS0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gWkxlKG4sdCl7dmFyIGUsaTtmdW5jdGlvbiByKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1pJiYoZT0oaT1vKSYmS0xlKG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBKTGUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiZRTGUobixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uICRMZShuLHQpe3JldHVybiBmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBlM2Uobix0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9dH19ZnVuY3Rpb24gdDNlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4zZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBpM2Uobix0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5lYXNlPXR9fWZ1bmN0aW9uIG8zZShuLHQsZSl7dmFyIGkscixvPWZ1bmN0aW9uKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KHQpP1Z3OkhzO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPW8odGhpcyxuKSxhPXMub247YSE9PWkmJihyPShpPWEpLmNvcHkoKSkub24odCxlKSxzLm9uPXJ9fXZhciBhM2U9SWQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEpyZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBwM2Uobix0LGUpe3JldHVybiBmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdC5jYWxsKHRoaXMsaSksZSl9fWZ1bmN0aW9uIGgzZShuLHQsZSl7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMhPT1yJiYoaT0ocj1zKSYmcDNlKG4scyxlKSksaX1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIGczZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1uLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gXzNlKG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJmczZShyKSksdH1yZXR1cm4gaS5fdmFsdWU9bixpfXZhciB2M2U9MDtmdW5jdGlvbiBfcyhuLHQsZSxpKXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1lLHRoaXMuX2lkPWl9ZnVuY3Rpb24gaFIoKXtyZXR1cm4rK3YzZX12YXIgQXY9SWQucHJvdG90eXBlO19zLnByb3RvdHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gSWQoKS50cmFuc2l0aW9uKG4pfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9zLHNlbGVjdDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWJtKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkocikscz0wO3M8cjsrK3MpZm9yKHZhciB1LGQsYT1pW3NdLGw9YS5sZW5ndGgsYz1vW3NdPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCkodT1hW3BdKSYmKGQ9bi5jYWxsKHUsdS5fX2RhdGFfXyxwLGEpKSYmKCJfX2RhdGFfXyJpbiB1JiYoZC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW3BdPWQsdWgoY1twXSx0LGUscCxjLERvKHUsZSkpKTtyZXR1cm4gbmV3IF9zKG8sdGhpcy5fcGFyZW50cyx0LGUpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1FdyhuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10scz1bXSxhPTA7YTxyOysrYSlmb3IodmFyIHUsbD1pW2FdLGM9bC5sZW5ndGgsZD0wO2Q8YzsrK2QpaWYodT1sW2RdKXtmb3IodmFyIGgscD1uLmNhbGwodSx1Ll9fZGF0YV9fLGQsbCksZj1Ebyh1LGUpLG09MCxDPXAubGVuZ3RoO208QzsrK20pKGg9cFttXSkmJnVoKGgsdCxlLG0scCxmKTtvLnB1c2gocCkscy5wdXNoKHUpfXJldHVybiBuZXcgX3MobyxzLHQsZSl9LGZpbHRlcjpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49VHcobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsbz10W3JdLHM9by5sZW5ndGgsYT1pW3JdPVtdLGM9MDtjPHM7KytjKShsPW9bY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJmEucHVzaChsKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24obil7aWYobi5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgX3Mocyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEzZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fbmFtZSx0PXRoaXMuX2lkLGU9aFIoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYylpZihsPXNbY10pe3ZhciB1PURvKGwsdCk7dWgobCxuLGUsYyxzLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBfcyhpLHRoaXMuX3BhcmVudHMsbixlKX0sY2FsbDpBdi5jYWxsLG5vZGVzOkF2Lm5vZGVzLG5vZGU6QXYubm9kZSxzaXplOkF2LnNpemUsZW1wdHk6QXYuZW1wdHksZWFjaDpBdi5lYWNoLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9Ebyh0aGlzLm5vZGUoKSxlKS5vbi5vbihuKTp0aGlzLmVhY2gobzNlKGUsbix0KSl9LGF0dHI6ZnVuY3Rpb24obix0KXt2YXIgZT1BZChuKSxpPSJ0cmFuc2Zvcm0iPT09ZT9rSDpwUjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4obiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZS5sb2NhbD9YTGU6WUxlKShlLGksRHYodGhpcywiYXR0ci4iK24sdCkpOm51bGw9PXQ/KGUubG9jYWw/R0xlOmpMZSkoZSk6KGUubG9jYWw/cUxlOldMZSkoZSxpLHQpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImF0dHIuIituO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjt2YXIgaT1BZChuKTtyZXR1cm4gdGhpcy50d2VlbihlLChpLmxvY2FsP1pMZTpKTGUpKGksdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InRyYW5zZm9ybSI9PShuKz0iIik/T0g6cFI7cmV0dXJuIG51bGw9PXQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bGgodGhpcyxuKSxzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGxoKHRoaXMsbikpO3JldHVybiBvPT09cz9udWxsOm89PT1lJiZzPT09aT9yOnI9dChlPW8saT1zKX19KG4saSkpLm9uKCJlbmQuc3R5bGUuIituLEpyZShuKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pLGE9ZSh0aGlzKSxsPWErIiI7cmV0dXJuIG51bGw9PWEmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGw9YT1saCh0aGlzLG4pKSxzPT09bD9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fShuLGksRHYodGhpcywic3R5bGUuIituLHQpKSkuZWFjaChmdW5jdGlvbihuLHQpe3ZhciBlLGkscixhLG89InN0eWxlLiIrdCxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUhzKHRoaXMsbiksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVtvXT9hfHwoYT1KcmUodCkpOnZvaWQgMDsoYyE9PWV8fHIhPT11KSYmKGk9KGU9YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0odGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InN0eWxlLiIrKG4rPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxoM2Uobix0LGU/PyIiKSl9LHRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19KER2KHRoaXMsInRleHQiLG4pKTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fShudWxsPT1uPyIiOm4rIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKG4pe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxfM2UobikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuX2lkO2lmKG4rPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBzLGk9RG8odGhpcy5ub2RlKCksZSkudHdlZW4scj0wLG89aS5sZW5ndGg7cjxvOysrcilpZigocz1pW3JdKS5uYW1lPT09bilyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P1VMZTp6TGUpKGUsbix0KSl9LGRlbGF5OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/JExlOmUzZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/dDNlOm4zZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGkzZSh0LG4pKTpEbyh0aGlzLm5vZGUoKSx0KS5lYXNlfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgbix0LGU9dGhpcyxpPWUuX2lkLHI9ZS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scyl7dmFyIGE9e3ZhbHVlOnN9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1yJiZvKCl9fTtlLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1Icyh0aGlzLGkpLHU9Yy5vbjt1IT09biYmKCh0PShuPXUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChhKSx0Ll8uaW50ZXJydXB0LnB1c2goYSksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfX07dmFyIEhIPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbihuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn19O2Z1bmN0aW9uIHkzZShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBISC50aW1lPVR2KCksSEg7cmV0dXJuIGV9ZnVuY3Rpb24gVUgobil7cmV0dXJue3R5cGU6bn19SWQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG4sdCl7dmFyIGkscixzLGU9bi5fX3RyYW5zaXRpb24sbz0hMDtpZihlKXtmb3IocyBpbiB0PW51bGw9PXQ/bnVsbDp0KyIiLGUpKGk9ZVtzXSkubmFtZT09PXQ/KHI9aS5zdGF0ZT4yJiZpLnN0YXRlPDUsaS5zdGF0ZT02LGkudGltZXIuc3RvcCgpLGkub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLG4sbi5fX2RhdGFfXyxpLmluZGV4LGkuZ3JvdXApLGRlbGV0ZSBlW3NdKTpvPSExO28mJmRlbGV0ZSBuLl9fdHJhbnNpdGlvbn19KHRoaXMsbil9KX0sSWQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24obil7dmFyIHQsZTtuIGluc3RhbmNlb2YgX3M/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1oUigpLChlPUhIKS50aW1lPVR2KCksbj1udWxsPT1uP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmdWgobCxuLHQsYyxzLGV8fHkzZShsLHQpKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyxuLHQpfSxbInciLCJlIl0ubWFwKFVIKSxbIm4iLCJzIl0ubWFwKFVIKSxbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChVSCksTWF0aDt2YXIgWGE9IiQiO2Z1bmN0aW9uIG1SKCl7fWZ1bmN0aW9uIGxvZShuLHQpe3ZhciBlPW5ldyBtUjtpZihuIGluc3RhbmNlb2YgbVIpbi5lYWNoKGZ1bmN0aW9uKGEsbCl7ZS5zZXQobCxhKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIG8saT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5zZXQoaSxuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuc2V0KHQobz1uW2ldLGksbiksbyl9ZWxzZSBpZihuKWZvcih2YXIgcyBpbiBuKWUuc2V0KHMsbltzXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZ1IoKXt9bVIucHJvdG90eXBlPWxvZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1SLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gWGErbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbWGErbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW1hhK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PVhhK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PVhhJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1YYSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07dmFyIERtPWxvZS5wcm90b3R5cGU7ZnVuY3Rpb24gQW0obix0KXtpZigoZT0obj10P24udG9FeHBvbmVudGlhbCh0LTEpOm4udG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGUsaT1uLnNsaWNlKDAsZSk7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK24uc2xpY2UoZSsxKV19ZnVuY3Rpb24gVnUobil7cmV0dXJuKG49QW0oTWF0aC5hYnMobikpKT9uWzFdOk5hTn1nUi5wcm90b3R5cGU9ZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgZ1I7aWYobiBpbnN0YW5jZW9mIGdSKW4uZWFjaChmdW5jdGlvbihvKXtlLmFkZChvKX0pO2Vsc2UgaWYobil7dmFyIGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuYWRkKG5baV0pO2Vsc2UgZm9yKDsrK2k8cjspZS5hZGQodChuW2ldLGksbikpfXJldHVybiBlfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdSLGhhczpEbS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW1hhKyhuKz0iIildPW4sdGhpc30scmVtb3ZlOkRtLnJlbW92ZSxjbGVhcjpEbS5jbGVhcix2YWx1ZXM6RG0ua2V5cyxzaXplOkRtLnNpemUsZW1wdHk6RG0uZW1wdHksZWFjaDpEbS5lYWNofSxNYXRoLE1hdGguc3FydCg1KTt2YXIgekgsRDNlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGRoKG4pe2lmKCEodD1EM2UuZXhlYyhuKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIituKTt2YXIgdDtyZXR1cm4gbmV3IF9SKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIF9SKG4pe3RoaXMuZmlsbD12b2lkIDA9PT1uLmZpbGw/IiAiOm4uZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PW4uYWxpZ24/Ij4iOm4uYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PW4uc2lnbj8iLSI6bi5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PW4uc3ltYm9sPyIiOm4uc3ltYm9sKyIiLHRoaXMuemVybz0hIW4uemVybyx0aGlzLndpZHRoPXZvaWQgMD09PW4ud2lkdGg/dm9pZCAwOituLndpZHRoLHRoaXMuY29tbWE9ISFuLmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PW4ucHJlY2lzaW9uP3ZvaWQgMDorbi5wcmVjaXNpb24sdGhpcy50cmltPSEhbi50cmltLHRoaXMudHlwZT12b2lkIDA9PT1uLnR5cGU/IiI6bi50eXBlKyIifWZ1bmN0aW9uIGpIKG4sdCl7dmFyIGU9QW0obix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1kaC5wcm90b3R5cGU9X1IucHJvdG90eXBlLF9SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBHSD17IiUiOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKDEwMCpuKS50b0ZpeGVkKHQpfSxiOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKG4pe3JldHVybiBuKyIifSxkOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gakgoMTAwKm4sdCl9LHI6akgsczpmdW5jdGlvbihuLHQpe3ZhciBlPUFtKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV0sbz1yLSh6SD0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyLzMpKSkpKzEscz1pLmxlbmd0aDtyZXR1cm4gbz09PXM/aTpvPnM/aStuZXcgQXJyYXkoby1zKzEpLmpvaW4oIjAiKTpvPjA/aS5zbGljZSgwLG8pKyIuIitpLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK0FtKG4sTWF0aC5tYXgoMCx0K28tMSkpWzBdfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIFdIKG4pe3JldHVybiBufXZhciB2Uixybyx5Uixnb2U9QXJyYXkucHJvdG90eXBlLm1hcCxfb2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gT2woKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12Uj1mdW5jdGlvbihuKXt2YXIgdD12b2lkIDA9PT1uLmdyb3VwaW5nfHx2b2lkIDA9PT1uLnRob3VzYW5kcz9XSDpmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxvPVtdLHM9MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW3M9KHMrMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX0oZ29lLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVsxXSsiIixyPXZvaWQgMD09PW4uZGVjaW1hbD8iLiI6bi5kZWNpbWFsKyIiLG89dm9pZCAwPT09bi5udW1lcmFscz9XSDpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19KGdvZS5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSkscz12b2lkIDA9PT1uLnBlcmNlbnQ/IiUiOm4ucGVyY2VudCsiIixhPXZvaWQgMD09PW4ubWludXM/Ii0iOm4ubWludXMrIiIsbD12b2lkIDA9PT1uLm5hbj8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGQpe3ZhciBwPShkPWRoKGQpKS5maWxsLGg9ZC5hbGlnbixmPWQuc2lnbixtPWQuc3ltYm9sLEM9ZC56ZXJvLF89ZC53aWR0aCx5PWQuY29tbWEsST1kLnByZWNpc2lvbixBPWQudHJpbSxPPWQudHlwZTsibiI9PT1PPyh5PSEwLE89ImciKTpHSFtPXXx8KHZvaWQgMD09PUkmJihJPTEyKSxBPSEwLE89ImciKSwoQ3x8IjAiPT09cCYmIj0iPT09aCkmJihDPSEwLHA9IjAiLGg9Ij0iKTt2YXIgZWU9IiQiPT09bT9lOiIjIj09PW0mJi9bYm94WF0vLnRlc3QoTyk/IjAiK08udG9Mb3dlckNhc2UoKToiIixYPSIkIj09PW0/aTovWyVwXS8udGVzdChPKT9zOiIiLHhlPUdIW09dLGZlPS9bZGVmZ3BycyVdLy50ZXN0KE8pO2Z1bmN0aW9uIHZlKFQpe3ZhciBoZSx5ZSxKLG5lPWVlLGxlPVg7aWYoImMiPT09TylsZT14ZShUKStsZSxUPSIiO2Vsc2V7dmFyIGFlPShUPStUKTwwfHwxL1Q8MDtpZihUPWlzTmFOKFQpP2w6eGUoTWF0aC5hYnMoVCksSSksQSYmKFQ9ZnVuY3Rpb24obil7ZTpmb3IodmFyIHIsdD1uLmxlbmd0aCxlPTEsaT0tMTtlPHQ7KytlKXN3aXRjaChuW2VdKXtjYXNlIi4iOmk9cj1lO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPWUpLHI9ZTticmVhaztkZWZhdWx0OmlmKCErbltlXSlicmVhayBlO2k+MCYmKGk9MCl9cmV0dXJuIGk+MD9uLnNsaWNlKDAsaSkrbi5zbGljZShyKzEpOm59KFQpKSxhZSYmMD09K1QmJiIrIiE9PWYmJihhZT0hMSksbmU9KGFlPyIoIj09PWY/ZjphOiItIj09PWZ8fCIoIj09PWY/IiI6ZikrbmUsbGU9KCJzIj09PU8/X29lWzgrekgvM106IiIpK2xlKyhhZSYmIigiPT09Zj8iKSI6IiIpLGZlKWZvcihoZT0tMSx5ZT1ULmxlbmd0aDsrK2hlPHllOylpZig0OD4oSj1ULmNoYXJDb2RlQXQoaGUpKXx8Sj41Nyl7bGU9KDQ2PT09Sj9yK1Quc2xpY2UoaGUrMSk6VC5zbGljZShoZSkpK2xlLFQ9VC5zbGljZSgwLGhlKTticmVha319eSYmIUMmJihUPXQoVCwxLzApKTt2YXIgbWU9bmUubGVuZ3RoK1QubGVuZ3RoK2xlLmxlbmd0aCxqZT1tZTxfP25ldyBBcnJheShfLW1lKzEpLmpvaW4ocCk6IiI7c3dpdGNoKHkmJkMmJihUPXQoamUrVCxqZS5sZW5ndGg/Xy1sZS5sZW5ndGg6MS8wKSxqZT0iIiksaCl7Y2FzZSI8IjpUPW5lK1QrbGUramU7YnJlYWs7Y2FzZSI9IjpUPW5lK2plK1QrbGU7YnJlYWs7Y2FzZSJeIjpUPWplLnNsaWNlKDAsbWU9amUubGVuZ3RoPj4xKStuZStUK2xlK2plLnNsaWNlKG1lKTticmVhaztkZWZhdWx0OlQ9amUrbmUrVCtsZX1yZXR1cm4gbyhUKX1yZXR1cm4gST12b2lkIDA9PT1JPzY6L1tncHJzXS8udGVzdChPKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLEkpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEkpKSx2ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBkKyIifSx2ZX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKGQscCl7dmFyIGg9YygoKGQ9ZGgoZCkpLnR5cGU9ImYiLGQpKSxmPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFZ1KHApLzMpKSksbT1NYXRoLnBvdygxMCwtZiksQz1fb2VbOCtmLzNdO3JldHVybiBmdW5jdGlvbihfKXtyZXR1cm4gaChtKl8pK0N9fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxybz12Ui5mb3JtYXQseVI9dlIuZm9ybWF0UHJlZml4LGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpPW51bGw9PWk/MDoraSxyPW51bGw9PXI/MTorciwxPT09YXJndW1lbnRzLmxlbmd0aD8ocj1pLGk9MCk6ci09aSxmdW5jdGlvbigpe3JldHVybiB0KCkqcitpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCk7dmFyIEtIPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3ZhciBvLHM7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9bylhPW8sbz1udWxsO2Vsc2UgZG97bz0yKnQoKS0xLGE9Mip0KCktMSxzPW8qbythKmF9d2hpbGUoIXN8fHM+MSk7cmV0dXJuIGkrciphKk1hdGguc3FydCgtMipNYXRoLmxvZyhzKS9zKX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpLFpIPShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXt2YXIgaT1LSC5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChpKCkpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj0wLG89MDtvPGk7KytvKXIrPXQoKTtyZXR1cm4gcn19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpKTtmdW5jdGlvbiBtYShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKX1yZXR1cm4gdGhpc30oZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPVpILnNvdXJjZSh0KShpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpO3ZhciB5b2U9QXJyYXkucHJvdG90eXBlLHp3PXlvZS5tYXAsSW09eW9lLnNsaWNlO2Z1bmN0aW9uIEpIKG4pe3JldHVybitufXZhciB4b2U9WzAsMV07ZnVuY3Rpb24gZ2Eobil7cmV0dXJuIG59ZnVuY3Rpb24gJEgobix0KXtyZXR1cm4odC09bj0rbik/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH06ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIENvZShuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIGszZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPSRIKHIsaSksbz1lKHMsbykpOihpPSRIKGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBGM2Uobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPSRIKG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1GdShuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBwaChuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiBqdygpe3ZhciBpLHIsbyxhLGwsYyxuPXhvZSx0PXhvZSxlPVNtLHM9Z2E7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP0YzZTprM2UsbD1jPW51bGwsZH1mdW5jdGlvbiBkKHApe3JldHVybiBpc05hTihwPStwKT9vOihsfHwobD1hKG4ubWFwKGkpLHQsZSkpKShpKHMocCkpKX1yZXR1cm4gZC5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHMocigoY3x8KGM9YSh0LG4ubWFwKGkpLG5zKSkpKHApKSl9LGQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXp3LmNhbGwocCxKSCkscz09PWdhfHwocz1Db2UobikpLHUoKSk6bi5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUltLmNhbGwocCksdSgpKTp0LnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD1JbS5jYWxsKHApLGU9SUgsdSgpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/Q29lKG4pOmdhLGQpOnMhPT1nYX0sZC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLHUoKSk6ZX0sZC51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsZCk6b30sZnVuY3Rpb24ocCxoKXtyZXR1cm4gaT1wLHI9aCx1KCl9fWZ1bmN0aW9uIEd3KG4sdCl7cmV0dXJuIGp3KCkobix0KX1mdW5jdGlvbiBQbShuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIE13KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj1EZChuLHQsZSk7c3dpdGNoKChpPWRoKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoVnUodCkvMykpKS1WdShNYXRoLmFicyhuKSkpfShyLHMpKSYmKGkucHJlY2lzaW9uPW8pLHlSKGkscyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsVnUodCktVnUobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC1WdShNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiBybyhpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEscz1pW3JdLGE9aVtvXTtyZXR1cm4gYTxzJiYobD1zLHM9YSxhPWwsbD1yLHI9byxvPWwpLChsPWJ2KHMsYSxlKSk+MD9sPWJ2KHM9TWF0aC5mbG9vcihzL2wpKmwsYT1NYXRoLmNlaWwoYS9sKSpsLGUpOmw8MCYmKGw9YnYocz1NYXRoLmNlaWwocypsKS9sLGE9TWF0aC5mbG9vcihhKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKHMvbCkqbCxpW29dPU1hdGguY2VpbChhL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwocypsKS9sLGlbb109TWF0aC5mbG9vcihhKmwpL2wsdChpKSksbn0sbn1mdW5jdGlvbiBEYygpe3ZhciBuPUd3KGdhLGdhKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKG4sRGMoKSl9LG1hLmFwcGx5KG4sYXJndW1lbnRzKSxQbShuKX1mdW5jdGlvbiBiUihuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIHdvZShuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gTW9lKG4pe3JldHVybiBNYXRoLmV4cChuKX1mdW5jdGlvbiBOM2Uobil7cmV0dXJuLU1hdGgubG9nKC1uKX1mdW5jdGlvbiBMM2Uobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiBCM2Uobil7cmV0dXJuIGlzRmluaXRlKG4pPysoIjFlIituKTpuPDA/MDpufWZ1bmN0aW9uIFNvZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiB0NChuKXt2YXIgcixvLHQ9bih3b2UsTW9lKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP0IzZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9U29lKHIpLG89U29lKG8pLG4oTjNlLEwzZSkpOm4od29lLE1vZSksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSthLHMoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUoYSkscygpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24oYSl7dmFyIGQsbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXTsoZD11PGMpJiYocD1jLGM9dSx1PXApO3ZhciBmLG0sQyxwPXIoYyksaD1yKHUpLF89bnVsbD09YT8xMDorYSx5PVtdO2lmKCEoaSUxKSYmaC1wPF8pe2lmKHA9TWF0aC5yb3VuZChwKS0xLGg9TWF0aC5yb3VuZChoKSsxLGM+MCl7Zm9yKDtwPGg7KytwKWZvcihtPTEsZj1vKHApO208aTsrK20paWYoISgoQz1mKm0pPGMpKXtpZihDPnUpYnJlYWs7eS5wdXNoKEMpfX1lbHNlIGZvcig7cDxoOysrcClmb3IobT1pLTEsZj1vKHApO20+PTE7LS1tKWlmKCEoKEM9ZiptKTxjKSl7aWYoQz51KWJyZWFrO3kucHVzaChDKX19ZWxzZSB5PU13KHAsaCxNYXRoLm1pbihoLXAsXykpLm1hcChvKTtyZXR1cm4gZD95LnJldmVyc2UoKTp5fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9cm8obCkpLGE9PT0xLzApcmV0dXJuIGw7bnVsbD09YSYmKGE9MTApO3ZhciBjPU1hdGgubWF4KDEsaSphL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgZD11L28oTWF0aC5yb3VuZChyKHUpKSk7cmV0dXJuIGQqaTxpLS41JiYoZCo9aSksZDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUoYlIoZSgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIoYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmNlaWwocihhKSkpfX0pKX0sdH1mdW5jdGlvbiBXdygpe3ZhciBuPXQ0KGp3KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcGgobixXdygpKS5iYXNlKG4uYmFzZSgpKX0sbWEuYXBwbHkobixhcmd1bWVudHMpLG59dmFyIG40PW5ldyBEYXRlLGk0PW5ldyBEYXRlO2Z1bmN0aW9uIHVyKG4sdCxlLGkpe2Z1bmN0aW9uIHIobyl7cmV0dXJuIG4obz0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZSgrbykpLG99LHIuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxuKG8pLG99LHIucm91bmQ9ZnVuY3Rpb24obyl7dmFyIHM9cihvKSxhPXIuY2VpbChvKTtyZXR1cm4gby1zPGEtbz9zOmF9LHIub2Zmc2V0PWZ1bmN0aW9uKG8scyl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksbnVsbD09cz8xOk1hdGguZmxvb3IocykpLG99LHIucmFuZ2U9ZnVuY3Rpb24obyxzLGEpe3ZhciBjLGw9W107aWYobz1yLmNlaWwobyksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG88cyYmYT4wKSlyZXR1cm4gbDtkb3tsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxhKSxuKG8pfXdoaWxlKGM8byYmbzxzKTtyZXR1cm4gbH0sci5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHVyKGZ1bmN0aW9uKHMpe2lmKHM+PXMpZm9yKDtuKHMpLCFvKHMpOylzLnNldFRpbWUocy0xKX0sZnVuY3Rpb24ocyxhKXtpZihzPj1zKWlmKGE8MClmb3IoOysrYTw9MDspZm9yKDt0KHMsLTEpLCFvKHMpOyk7ZWxzZSBmb3IoOy0tYT49MDspZm9yKDt0KHMsMSksIW8ocyk7KTt9KX0sZSYmKHIuY291bnQ9ZnVuY3Rpb24obyxzKXtyZXR1cm4gbjQuc2V0VGltZSgrbyksaTQuc2V0VGltZSgrcyksbihuNCksbihpNCksTWF0aC5mbG9vcihlKG40LGk0KSl9LHIuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSxpc0Zpbml0ZShvKSYmbz4wP28+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKHMpe3JldHVybiBpKHMpJW89PTB9OmZ1bmN0aW9uKHMpe3JldHVybiByLmNvdW50KDAscyklbz09MH0pOnI6bnVsbH0pLHJ9dmFyIHhSPXVyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC1ufSk7eFIuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5mbG9vcihuKSxpc0Zpbml0ZShuKSYmbj4wP24+MT91cihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L24pKm4pfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKm4pfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL259KTp4UjpudWxsfTt2YXIgQ1I9eFIsUmQ9NmU0LE1SPTYwNDhlNSxUb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLFNSPVRvZSxBb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKS0xZTMqbi5nZXRTZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlJkKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9SZH0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksbzQ9QW9lLElvZT11cihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSpSZCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLHM0PUlvZSxQb2U9dXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqUmQpLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLEl2PVBvZTtmdW5jdGlvbiBPbShuKXtyZXR1cm4gdXIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpSZCkvTVJ9KX12YXIga209T20oMCksUHY9T20oMSksaGg9KE9tKDIpLE9tKDMpLE9tKDQpKSxMb2U9KE9tKDUpLE9tKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0RGF0ZSgxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldE1vbnRoKCktbi5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pKSxhND1Mb2UsbDQ9dXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtsNC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP3VyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciBPZD1sNCxCb2U9dXIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksRVI9Qm9lO2Z1bmN0aW9uIEZtKG4pe3JldHVybiB1cihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1uKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL01SfSl9dmFyIHF3PUZtKDApLFJ2PUZtKDEpLGZoPShGbSgyKSxGbSgzKSxGbSg0KSksYzQ9KEZtKDUpLEZtKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSkpO2M0LmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBpc0Zpbml0ZShuPU1hdGguZmxvb3IobikpJiZuPjA/dXIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9uKSpuKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKm4pfSk6bnVsbH07dmFyIE5tPWM0O2Z1bmN0aW9uIHU0KG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKX1mdW5jdGlvbiBkNChuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKX1mdW5jdGlvbiBZdyhuLHQsZSl7cmV0dXJue3k6bixtOnQsZDplLEg6MCxNOjAsUzowLEw6MH19dmFyIE92LGt2LEdvZT17Ii0iOiIiLF86IiAiLDA6IjAifSxXbz0vXlxzKlxkKy8sc0JlPS9eJS8sYUJlPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBIaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBsQmUobil7cmV0dXJuIG4ucmVwbGFjZShhQmUsIlxcJCYiKX1mdW5jdGlvbiBYdyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAobEJlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUXcobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gY0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZkJlKG4sdCxlKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPTMqaVswXS0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ubT1pWzBdLTEsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9CZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdkJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENCZShuLHQsZSl7dmFyIGk9c0JlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gd0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUW9lKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gU0JlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIEVCZShuLHQpe3JldHVybiBIaShuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gVEJlKG4sdCl7cmV0dXJuIEhpKDErSXYuY291bnQoT2QobiksbiksdCwzKX1mdW5jdGlvbiBlc2Uobix0KXtyZXR1cm4gSGkobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIERCZShuLHQpe3JldHVybiBlc2Uobix0KSsiMDAwIn1mdW5jdGlvbiBBQmUobix0KXtyZXR1cm4gSGkobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBJQmUobix0KXtyZXR1cm4gSGkobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBQQmUobix0KXtyZXR1cm4gSGkobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBSQmUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIE9CZShuLHQpe3JldHVybiBIaShrbS5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gdHNlKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P2hoKG4pOmhoLmNlaWwobil9ZnVuY3Rpb24ga0JlKG4sdCl7cmV0dXJuIG49dHNlKG4pLEhpKGhoLmNvdW50KE9kKG4pLG4pKyg0PT09T2QobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gRkJlKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIE5CZShuLHQpe3JldHVybiBIaShQdi5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gTEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBCQmUobix0KXtyZXR1cm4gSGkoKG49dHNlKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFZCZShuLHQpe3JldHVybiBIaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSEJlKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gSGkoKG49ZT49NHx8MD09PWU/aGgobik6aGguY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBVQmUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStIaSh0LzYwfDAsIjAiLDIpK0hpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIEtvZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHpCZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiBqQmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIEdCZShuLHQpe3JldHVybiBIaSgxK0VSLmNvdW50KE5tKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbnNlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBXQmUobix0KXtyZXR1cm4gbnNlKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gcUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gWEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gUUJlKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBLQmUobix0KXtyZXR1cm4gSGkocXcuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGlzZShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHwwPT09dD9maChuKTpmaC5jZWlsKG4pfWZ1bmN0aW9uIFpCZShuLHQpe3JldHVybiBuPWlzZShuKSxIaShmaC5jb3VudChObShuKSxuKSsoND09PU5tKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIEpCZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiAkQmUobix0KXtyZXR1cm4gSGkoUnYuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGVWZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdFZlKG4sdCl7cmV0dXJuIEhpKChuPWlzZShuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBuVmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGlWZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEhpKChuPWU+PTR8fDA9PT1lP2ZoKG4pOmZoLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gclZlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBab2UoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gSm9lKG4pe3JldHVybitufWZ1bmN0aW9uICRvZShuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfU92PWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMscz1uLnNob3J0RGF5cyxhPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPVh3KHIpLHU9UXcociksZD1YdyhvKSxwPVF3KG8pLGg9WHcocyksZj1RdyhzKSxtPVh3KGEpLEM9UXcoYSksXz1YdyhsKSx5PVF3KGwpLEk9e2E6ZnVuY3Rpb24oQ2Upe3JldHVybiBzW0NlLmdldERheSgpXX0sQTpmdW5jdGlvbihDZSl7cmV0dXJuIG9bQ2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKENlKXtyZXR1cm4gbFtDZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihDZSl7cmV0dXJuIGFbQ2UuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlFvZSxlOlFvZSxmOkRCZSxnOkJCZSxHOkhCZSxIOlNCZSxJOkVCZSxqOlRCZSxMOmVzZSxtOkFCZSxNOklCZSxwOmZ1bmN0aW9uKENlKXtyZXR1cm4gclsrKENlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24oQ2Upe3JldHVybiAxK35+KENlLmdldE1vbnRoKCkvMyl9LFE6Sm9lLHM6JG9lLFM6UEJlLHU6UkJlLFU6T0JlLFY6a0JlLHc6RkJlLFc6TkJlLHg6bnVsbCxYOm51bGwseTpMQmUsWTpWQmUsWjpVQmUsIiUiOlpvZX0sQT17YTpmdW5jdGlvbihDZSl7cmV0dXJuIHNbQ2UuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKENlKXtyZXR1cm4gb1tDZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24oQ2Upe3JldHVybiBsW0NlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKENlKXtyZXR1cm4gYVtDZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6S29lLGU6S29lLGY6V0JlLGc6dFZlLEc6aVZlLEg6ekJlLEk6akJlLGo6R0JlLEw6bnNlLG06cUJlLE06WUJlLHA6ZnVuY3Rpb24oQ2Upe3JldHVybiByWysoQ2UuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihDZSl7cmV0dXJuIDErfn4oQ2UuZ2V0VVRDTW9udGgoKS8zKX0sUTpKb2Usczokb2UsUzpYQmUsdTpRQmUsVTpLQmUsVjpaQmUsdzpKQmUsVzokQmUseDpudWxsLFg6bnVsbCx5OmVWZSxZOm5WZSxaOnJWZSwiJSI6Wm9lfSxPPXthOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9aC5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS53PWZbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbihDZSx2dCxfdCl7dmFyIGllPWQuZXhlYyh2dC5zbGljZShfdCkpO3JldHVybiBpZT8oQ2Uudz1wW2llWzBdLnRvTG93ZXJDYXNlKCldLF90K2llWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oQ2UsdnQsX3Qpe3ZhciBpZT1fLmV4ZWModnQuc2xpY2UoX3QpKTtyZXR1cm4gaWU/KENlLm09eVtpZVswXS50b0xvd2VyQ2FzZSgpXSxfdCtpZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9bS5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5tPUNbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLHQsdnQsX3QpfSxkOllvZSxlOllvZSxmOnhCZSxnOnFvZSxHOldvZSxIOlhvZSxJOlhvZSxqOl9CZSxMOmJCZSxtOmdCZSxNOnZCZSxwOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9Yy5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5wPXVbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0scTptQmUsUTp3QmUsczpNQmUsUzp5QmUsdTp1QmUsVTpkQmUsVjpwQmUsdzpjQmUsVzpoQmUseDpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLGUsdnQsX3QpfSxYOmZ1bmN0aW9uKENlLHZ0LF90KXtyZXR1cm4geGUoQ2UsaSx2dCxfdCl9LHk6cW9lLFk6V29lLFo6ZkJlLCIlIjpDQmV9O2Z1bmN0aW9uIGVlKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBodCxzbixTbixpZT1bXSxjdD0tMSxZZT0wLHh0PUNlLmxlbmd0aDtmb3IoX3QgaW5zdGFuY2VvZiBEYXRlfHwoX3Q9bmV3IERhdGUoK190KSk7KytjdDx4dDspMzc9PT1DZS5jaGFyQ29kZUF0KGN0KSYmKGllLnB1c2goQ2Uuc2xpY2UoWWUsY3QpKSxudWxsIT0oc249R29lW2h0PUNlLmNoYXJBdCgrK2N0KV0pP2h0PUNlLmNoYXJBdCgrK2N0KTpzbj0iZSI9PT1odD8iICI6IjAiLChTbj12dFtodF0pJiYoaHQ9U24oX3Qsc24pKSxpZS5wdXNoKGh0KSxZZT1jdCsxKTtyZXR1cm4gaWUucHVzaChDZS5zbGljZShZZSxjdCkpLGllLmpvaW4oIiIpfX1mdW5jdGlvbiBYKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBZZSx4dCxpZT1ZdygxOTAwLHZvaWQgMCwxKTtpZih4ZShpZSxDZSxfdCs9IiIsMCkhPV90Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBpZSlyZXR1cm4gbmV3IERhdGUoaWUuUSk7aWYoInMiaW4gaWUpcmV0dXJuIG5ldyBEYXRlKDFlMyppZS5zKygiTCJpbiBpZT9pZS5MOjApKTtpZih2dCYmISgiWiJpbiBpZSkmJihpZS5aPTApLCJwImluIGllJiYoaWUuSD1pZS5IJTEyKzEyKmllLnApLHZvaWQgMD09PWllLm0mJihpZS5tPSJxImluIGllP2llLnE6MCksIlYiaW4gaWUpe2lmKGllLlY8MXx8aWUuVj41MylyZXR1cm4gbnVsbDsidyJpbiBpZXx8KGllLnc9MSksIloiaW4gaWU/KHh0PShZZT1kNChZdyhpZS55LDAsMSkpKS5nZXRVVENEYXkoKSxZZT14dD40fHwwPT09eHQ/UnYuY2VpbChZZSk6UnYoWWUpLFllPUVSLm9mZnNldChZZSw3KihpZS5WLTEpKSxpZS55PVllLmdldFVUQ0Z1bGxZZWFyKCksaWUubT1ZZS5nZXRVVENNb250aCgpLGllLmQ9WWUuZ2V0VVRDRGF0ZSgpKyhpZS53KzYpJTcpOih4dD0oWWU9dTQoWXcoaWUueSwwLDEpKSkuZ2V0RGF5KCksWWU9eHQ+NHx8MD09PXh0P1B2LmNlaWwoWWUpOlB2KFllKSxZZT1Jdi5vZmZzZXQoWWUsNyooaWUuVi0xKSksaWUueT1ZZS5nZXRGdWxsWWVhcigpLGllLm09WWUuZ2V0TW9udGgoKSxpZS5kPVllLmdldERhdGUoKSsoaWUudys2KSU3KX1lbHNlKCJXImluIGllfHwiVSJpbiBpZSkmJigidyJpbiBpZXx8KGllLnc9InUiaW4gaWU/aWUudSU3OiJXImluIGllPzE6MCkseHQ9IloiaW4gaWU/ZDQoWXcoaWUueSwwLDEpKS5nZXRVVENEYXkoKTp1NChZdyhpZS55LDAsMSkpLmdldERheSgpLGllLm09MCxpZS5kPSJXImluIGllPyhpZS53KzYpJTcrNyppZS5XLSh4dCs1KSU3OmllLncrNyppZS5VLSh4dCs2KSU3KTtyZXR1cm4iWiJpbiBpZT8oaWUuSCs9aWUuWi8xMDB8MCxpZS5NKz1pZS5aJTEwMCxkNChpZSkpOnU0KGllKX19ZnVuY3Rpb24geGUoQ2UsdnQsX3QsaWUpe2Zvcih2YXIgaHQsc24sY3Q9MCxZZT12dC5sZW5ndGgseHQ9X3QubGVuZ3RoO2N0PFllOyl7aWYoaWU+PXh0KXJldHVybi0xO2lmKDM3PT09KGh0PXZ0LmNoYXJDb2RlQXQoY3QrKykpKXtpZihodD12dC5jaGFyQXQoY3QrKyksIShzbj1PW2h0IGluIEdvZT92dC5jaGFyQXQoY3QrKyk6aHRdKXx8KGllPXNuKENlLF90LGllKSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1fdC5jaGFyQ29kZUF0KGllKyspKXJldHVybi0xfXJldHVybiBpZX1yZXR1cm4gSS54PWVlKGUsSSksSS5YPWVlKGksSSksSS5jPWVlKHQsSSksQS54PWVlKGUsQSksQS5YPWVlKGksQSksQS5jPWVlKHQsQSkse2Zvcm1hdDpmdW5jdGlvbihDZSl7dmFyIHZ0PWVlKENlKz0iIixJKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSxwYXJzZTpmdW5jdGlvbihDZSl7dmFyIHZ0PVgoQ2UrPSIiLCExKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1lZShDZSs9IiIsQSk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH0sdXRjUGFyc2U6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1YKENlKz0iIiwhMCk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLGt2PU92LmZvcm1hdDt2YXIgWnc9NmU0LEp3PTYwKlp3LCR3PTI0Kkp3LGY0PTM2NSokdztmdW5jdGlvbiBzVmUobil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIGFWZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGU/K246K25ldyBEYXRlKCtuKX1mdW5jdGlvbiBtNChuLHQsZSxpLHIsbyxzLGEsbCl7dmFyIGM9R3coZ2EsZ2EpLHU9Yy5pbnZlcnQsZD1jLmRvbWFpbixwPWwoIi4lTCIpLGg9bCgiOiVTIiksZj1sKCIlSTolTSIpLG09bCgiJUkgJXAiKSxDPWwoIiVhICVkIiksXz1sKCIlYiAlZCIpLHk9bCgiJUIiKSxJPWwoIiVZIiksQT1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsWnddLFtvLDUsNSpad10sW28sMTUsMTUqWnddLFtvLDMwLDMwKlp3XSxbciwxLEp3XSxbciwzLDMqSnddLFtyLDYsNipKd10sW3IsMTIsMTIqSnddLFtpLDEsJHddLFtpLDIsMiokd10sW2UsMSw2MDQ4ZTVdLFt0LDEsMjU5MmU2XSxbdCwzLDc3NzZlNl0sW24sMSxmNF1dO2Z1bmN0aW9uIE8oWCl7cmV0dXJuKHMoWCk8WD9wOm8oWCk8WD9oOnIoWCk8WD9mOmkoWCk8WD9tOnQoWCk8WD9lKFgpPFg/QzpfOm4oWCk8WD95OkkpKFgpfWZ1bmN0aW9uIGVlKFgseGUsZmUsdmUpe2lmKG51bGw9PVgmJihYPTEwKSwibnVtYmVyIj09dHlwZW9mIFgpe3ZhciBUPU1hdGguYWJzKGZlLXhlKS9YLG5lPXd3KGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGVbMl19KS5yaWdodChBLFQpO25lPT09QS5sZW5ndGg/KHZlPURkKHhlL2Y0LGZlL2Y0LFgpLFg9bik6bmU/KHZlPShuZT1BW1QvQVtuZS0xXVsyXTxBW25lXVsyXS9UP25lLTE6bmVdKVsxXSxYPW5lWzBdKToodmU9TWF0aC5tYXgoRGQoeGUsZmUsWCksMSksWD1hKX1yZXR1cm4gbnVsbD09dmU/WDpYLmV2ZXJ5KHZlKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBEYXRlKHUoWCkpfSxjLmRvbWFpbj1mdW5jdGlvbihYKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9kKHp3LmNhbGwoWCxhVmUpKTpkKCkubWFwKHNWZSl9LGMudGlja3M9ZnVuY3Rpb24oWCx4ZSl7dmFyIGxlLGZlPWQoKSx2ZT1mZVswXSxUPWZlW2ZlLmxlbmd0aC0xXSxuZT1UPHZlO3JldHVybiBuZSYmKGxlPXZlLHZlPVQsVD1sZSksbGU9KGxlPWVlKFgsdmUsVCx4ZSkpP2xlLnJhbmdlKHZlLFQrMSk6W10sbmU/bGUucmV2ZXJzZSgpOmxlfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oWCx4ZSl7cmV0dXJuIG51bGw9PXhlP086bCh4ZSl9LGMubmljZT1mdW5jdGlvbihYLHhlKXt2YXIgZmU9ZCgpO3JldHVybihYPWVlKFgsZmVbMF0sZmVbZmUubGVuZ3RoLTFdLHhlKSk/ZChiUihmZSxYKSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKGMsbTQobix0LGUsaSxyLG8scyxhLGwpKX0sY31mdW5jdGlvbiBMbSgpe3JldHVybiBtYS5hcHBseShtNChPZCxhNCxrbSxJdixzNCxvNCxTUixDUixrdikuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZzQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBGdihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIGVNKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiB0TShuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY3NlKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1nNC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmc0LGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y3NlKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoZU0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsdE0odGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYodE0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsZU0odGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8scyx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9jc2Uocik6aTpyLHQ/dC5MPT09bj90Lkw9bzp0LlI9bzp0aGlzLl89byxpJiZyPyhzPW8uQyxvLkM9bi5DLG8uTD1pLGkuVT1vLG8hPT1yPyh0PW8uVSxvLlU9bi5VLHQuTD1uPW8uUixvLlI9cixyLlU9byk6KG8uVT10LHQ9byxuPW8uUikpOihzPW4uQyxuPW8pLG4mJihuLlU9dCksIXMpe2lmKG4mJm4uQylyZXR1cm4gdm9pZChuLkM9ITEpO2Rve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoKGU9dC5SKS5DJiYoZS5DPSExLHQuQz0hMCxlTSh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCx0TSh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSxlTSh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPXQuTCkuQyYmKGUuQz0hMSx0LkM9ITAsdE0odGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsZU0odGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsdE0odGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O3ZhciBfND1nNDtmdW5jdGlvbiBOdihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxvPXFvLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJm5NKHIsbix0LGUpLGkmJm5NKHIsdCxuLGkpLFVzW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFVzW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLHJ9ZnVuY3Rpb24gTHYobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIG5NKG4sdCxlLGkpe25bMF18fG5bMV0/bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pOihuWzBdPWksbi5sZWZ0PXQsbi5yaWdodD1lKX1mdW5jdGlvbiB1VmUobix0LGUsaSxyKXt2YXIgbSxvPW5bMF0scz1uWzFdLGE9b1swXSxsPW9bMV0sZD0wLHA9MSxoPXNbMF0tYSxmPXNbMV0tbDtpZihtPXQtYSxofHwhKG0+MCkpe2lmKG0vPWgsaDwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihoPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPWktYSxofHwhKG08MCkpe2lmKG0vPWgsaDwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihoPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1pZihtPWUtbCxmfHwhKG0+MCkpe2lmKG0vPWYsZjwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihmPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPXItbCxmfHwhKG08MCkpe2lmKG0vPWYsZjwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihmPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1yZXR1cm4hKGQ+MCkmJiEocDwxKXx8KGQ+MCYmKG5bMF09W2ErZCpoLGwrZCpmXSkscDwxJiYoblsxXT1bYStwKmgsbCtwKmZdKSksITB9fX19fWZ1bmN0aW9uIGRWZShuLHQsZSxpLHIpe3ZhciBvPW5bMV07aWYobylyZXR1cm4hMDt2YXIgbSxDLHM9blswXSxhPW4ubGVmdCxsPW4ucmlnaHQsYz1hWzBdLHU9YVsxXSxkPWxbMF0scD1sWzFdLGg9KGMrZCkvMjtpZihwPT09dSl7aWYoaDx0fHxoPj1pKXJldHVybjtpZihjPmQpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1baCxlXTtvPVtoLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9W2gscl07bz1baCxlXX19ZWxzZSBpZihDPSh1K3ApLzItKG09KGMtZCkvKHAtdSkpKmgsbTwtMXx8bT4xKWlmKGM+ZCl7aWYocyl7aWYoc1sxXT49cilyZXR1cm59ZWxzZSBzPVsoZS1DKS9tLGVdO289WyhyLUMpL20scl19ZWxzZXtpZihzKXtpZihzWzFdPGUpcmV0dXJufWVsc2Ugcz1bKHItQykvbSxyXTtvPVsoZS1DKS9tLGVdfWVsc2UgaWYodTxwKXtpZihzKXtpZihzWzBdPj1pKXJldHVybn1lbHNlIHM9W3QsbSp0K0NdO289W2ksbSppK0NdfWVsc2V7aWYocyl7aWYoc1swXTx0KXJldHVybn1lbHNlIHM9W2ksbSppK0NdO289W3QsbSp0K0NdfXJldHVybiBuWzBdPXMsblsxXT1vLCEwfWZ1bmN0aW9uIHBWZShuLHQpe3ZhciBlPW4uc2l0ZSxpPXQubGVmdCxyPXQucmlnaHQ7cmV0dXJuIGU9PT1yJiYocj1pLGk9ZSkscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihlPT09aT8oaT10WzFdLHI9dFswXSk6KGk9dFswXSxyPXRbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uIHY0KG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQhPT1uLnNpdGUpXX1mdW5jdGlvbiBoVmUobix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfXZhciBUUixmc2U9W107ZnVuY3Rpb24gZlZlKCl7RnYodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEJtKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLHU9b1swXS1zLGQ9b1sxXS1hLHA9MioobCpkLWMqdSk7aWYoIShwPj0tbXNlKSl7dmFyIGg9bCpsK2MqYyxmPXUqdStkKmQsbT0oZCpoLWMqZikvcCxDPShsKmYtdSpoKS9wLF89ZnNlLnBvcCgpfHxuZXcgZlZlO18uYXJjPW4sXy5zaXRlPXIsXy54PW0rcyxfLnk9KF8uY3k9QythKStNYXRoLnNxcnQobSptK0MqQyksbi5jaXJjbGU9Xztmb3IodmFyIHk9bnVsbCxJPUJ2Ll87STspaWYoXy55PEkueXx8Xy55PT09SS55JiZfLng8PUkueCl7aWYoIUkuTCl7eT1JLlA7YnJlYWt9ST1JLkx9ZWxzZXtpZighSS5SKXt5PUk7YnJlYWt9ST1JLlJ9QnYuaW5zZXJ0KHksXykseXx8KFRSPV8pfX19fWZ1bmN0aW9uIFZtKG4pe3ZhciB0PW4uY2lyY2xlO3QmJih0LlB8fChUUj10Lk4pLEJ2LnJlbW92ZSh0KSxmc2UucHVzaCh0KSxGdih0KSxuLmNpcmNsZT1udWxsKX12YXIgX3NlPVtdO2Z1bmN0aW9uIG1WZSgpe0Z2KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBnc2Uobil7dmFyIHQ9X3NlLnBvcCgpfHxuZXcgbVZlO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIHk0KG4pe1ZtKG4pLEhtLnJlbW92ZShuKSxfc2UucHVzaChuKSxGdihuKX1mdW5jdGlvbiB2c2Uobil7dmFyIHQ9bi5jaXJjbGUsZT10LngsaT10LmN5LHI9W2UsaV0sbz1uLlAscz1uLk4sYT1bbl07eTQobik7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKGUtbC5jaXJjbGUueCk8b3ImJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPG9yOylvPWwuUCxhLnVuc2hpZnQobCkseTQobCksbD1vO2EudW5zaGlmdChsKSxWbShsKTtmb3IodmFyIGM9cztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxvciYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8b3I7KXM9Yy5OLGEucHVzaChjKSx5NChjKSxjPXM7YS5wdXNoKGMpLFZtKGMpO3ZhciBkLHU9YS5sZW5ndGg7Zm9yKGQ9MTtkPHU7KytkKW5NKChjPWFbZF0pLmVkZ2UsKGw9YVtkLTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1hW3UtMV0pLmVkZ2U9TnYoKGw9YVswXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxCbShsKSxCbShjKX1mdW5jdGlvbiB5c2Uobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1IbS5fO2E7KWlmKChvPWJzZShhLGUpLXQpPm9yKWE9YS5MO2Vsc2V7aWYoISgocz10LWdWZShhLGUpKT5vcikpe28+LW9yPyhpPWEuUCxyPWEpOnM+LW9yPyhpPWEscj1hLk4pOmk9cj1hO2JyZWFrfWlmKCFhLlIpe2k9YTticmVha31hPWEuUn0hZnVuY3Rpb24obil7VXNbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1nc2Uobik7aWYoSG0uaW5zZXJ0KGksbCksaXx8cil7aWYoaT09PXIpcmV0dXJuIFZtKGkpLHI9Z3NlKGkuc2l0ZSksSG0uaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSxCbShpKSx2b2lkIEJtKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSk7Vm0oaSksVm0ocik7dmFyIGM9aS5zaXRlLHU9Y1swXSxkPWNbMV0scD1uWzBdLXUsaD1uWzFdLWQsZj1yLnNpdGUsbT1mWzBdLXUsQz1mWzFdLWQsXz0yKihwKkMtaCptKSx5PXAqcCtoKmgsST1tKm0rQypDLEE9WyhDKnktaCpJKS9fK3UsKHAqSS1tKnkpL18rZF07bk0oci5lZGdlLGMsZixBKSxsLmVkZ2U9TnYoYyxuLG51bGwsQSksci5lZGdlPU52KG4sZixudWxsLEEpLEJtKGkpLEJtKHIpfX1mdW5jdGlvbiBic2Uobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgcz1uLlA7aWYoIXMpcmV0dXJuLTEvMDt2YXIgYT0oZT1zLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksZD0xL28tMS9jLHA9dS9jO3JldHVybiBkPygtcCtNYXRoLnNxcnQocCpwLTIqZCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9kK2k6KGkrYSkvMn1mdW5jdGlvbiBnVmUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gYnNlKGUsdCk7dmFyIGk9bi5zaXRlO3JldHVybiBpWzFdPT09dD9pWzBdOjEvMH12YXIgSG0sVXMsQnYscW8sb3I9MWUtNixtc2U9MWUtMTI7ZnVuY3Rpb24gX1ZlKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiB2VmUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gRFIobix0KXt2YXIgaSxyLG8sZT1uLnNvcnQodlZlKS5wb3AoKTtmb3IocW89W10sVXM9bmV3IEFycmF5KG4ubGVuZ3RoKSxIbT1uZXcgXzQsQnY9bmV3IF80OzspaWYobz1UUixlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih5c2UoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7dnNlKG8uYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgZSxpLHIsbyxuPTAsdD1Vcy5sZW5ndGg7bjx0OysrbilpZigoZT1Vc1tuXSkmJihvPShpPWUuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgcz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPG87KytyKXNbcl09cixhW3JdPXBWZShlLHFvW2lbcl1dKTtmb3Iocy5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGFbY10tYVtsXX0pLHI9MDtyPG87KytyKWFbcl09aVtzW3JdXTtmb3Iocj0wO3I8bzsrK3IpaVtyXT1hW3JdfX0oKSx0KXt2YXIgcz0rdFswXVswXSxhPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTsoZnVuY3Rpb24obix0LGUsaSl7Zm9yKHZhciBvLHI9cW8ubGVuZ3RoO3ItLTspZFZlKG89cW9bcl0sbix0LGUsaSkmJnVWZShvLG4sdCxlLGkpJiYoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5vcnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5vcil8fGRlbGV0ZSBxb1tyXX0pKHMsYSxsLGMpLGZ1bmN0aW9uKG4sdCxlLGkpe3ZhciBvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxyPVVzLmxlbmd0aCxfPSEwO2ZvcihvPTA7bzxyOysrbylpZihzPVVzW29dKXtmb3IoYT1zLnNpdGUsbD0oYz1zLmhhbGZlZGdlcykubGVuZ3RoO2wtLTspcW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspbT0oZj1oVmUocyxxb1tjW2xdXSkpWzBdLEM9ZlsxXSxwPShkPXY0KHMscW9bY1srK2wldV1dKSlbMF0saD1kWzFdLChNYXRoLmFicyhtLXApPm9yfHxNYXRoLmFicyhDLWgpPm9yKSYmKGMuc3BsaWNlKGwsMCxxby5wdXNoKEx2KGEsZixNYXRoLmFicyhtLW4pPG9yJiZpLUM+b3I/W24sTWF0aC5hYnMocC1uKTxvcj9oOmldOk1hdGguYWJzKEMtaSk8b3ImJmUtbT5vcj9bTWF0aC5hYnMoaC1pKTxvcj9wOmUsaV06TWF0aC5hYnMobS1lKTxvciYmQy10Pm9yP1tlLE1hdGguYWJzKHAtZSk8b3I/aDp0XTpNYXRoLmFicyhDLXQpPG9yJiZtLW4+b3I/W01hdGguYWJzKGgtdCk8b3I/cDpuLHRdOm51bGwpKS0xKSwrK3UpO3UmJihfPSExKX1pZihfKXt2YXIgeSxJLEEsTz0xLzA7Zm9yKG89MCxfPW51bGw7bzxyOysrbykocz1Vc1tvXSkmJihBPSh5PShhPXMuc2l0ZSlbMF0tbikqeSsoST1hWzFdLXQpKkkpPE8mJihPPUEsXz1zKTtpZihfKXt2YXIgZWU9W24sdF0sWD1bbixpXSx4ZT1bZSxpXSxmZT1bZSx0XTtfLmhhbGZlZGdlcy5wdXNoKHFvLnB1c2goTHYoYT1fLnNpdGUsZWUsWCkpLTEscW8ucHVzaChMdihhLFgseGUpKS0xLHFvLnB1c2goTHYoYSx4ZSxmZSkpLTEscW8ucHVzaChMdihhLGZlLGVlKSktMSl9fWZvcihvPTA7bzxyOysrbykocz1Vc1tvXSkmJihzLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBVc1tvXSl9KHMsYSxsLGMpfXRoaXMuZWRnZXM9cW8sdGhpcy5jZWxscz1VcyxIbT1Cdj1xbz1Vcz1udWxsfWZ1bmN0aW9uIFVtKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1EUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRSLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB2NCh0LG5baV0pfSk7cmV0dXJuIGUuZGF0YT10LnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBuPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7aWYoYT0obz1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgbyxhLGwscj1lLnNpdGUscz0tMSxjPXRbb1thLTFdXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQ7KytzPGE7KWw9dSx1PShjPXRbb1tzXV0pLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJmk8bC5pbmRleCYmaTx1LmluZGV4JiZfVmUocixsLHUpPDAmJm4ucHVzaChbci5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLG59LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybntzb3VyY2U6bi5sZWZ0LmRhdGEsdGFyZ2V0Om4ucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihuLHQsZSl7Zm9yKHZhciByLGEsaT10aGlzLG89aS5fZm91bmR8fDAscz1pLmNlbGxzLmxlbmd0aDshKGE9aS5jZWxsc1tvXSk7KWlmKCsrbz49cylyZXR1cm4gbnVsbDt2YXIgbD1uLWEuc2l0ZVswXSxjPXQtYS5zaXRlWzFdLHU9bCpsK2MqYztkb3thPWkuY2VsbHNbcj1vXSxvPW51bGwsYS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2VzW2RdLGg9cC5sZWZ0O2lmKGghPT1hLnNpdGUmJmh8fChoPXAucmlnaHQpKXt2YXIgZj1uLWhbMF0sbT10LWhbMV0sQz1mKmYrbSptO0M8dSYmKHU9QyxvPWguaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gaS5fZm91bmQ9cixudWxsPT1lfHx1PD1lKmU/YS5zaXRlOm51bGx9fSxVbS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVtLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiAxPT09bj90aGlzOm5ldyBVbSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1uJjA9PT10P3RoaXM6bmV3IFVtKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IFVtKDEsMCwwKTt2YXIgTXNlPXJvKCIuMn5lIikseVZlPXJvKCIuNH5yIikseHNlPXJvKCIsfiIpO2Z1bmN0aW9uIENzZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp5VmUobil9dmFyIHptPXtmb3JtYXRUaWNrOkNzZSxmb3JtYXRTaG9ydDpDc2UsZm9ybWF0UmVhZGFibGUobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp4c2Uobil9LGZvcm1hdExvbmc6eHNlfSxiVmU9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTtmdW5jdGlvbiBBUihuKXtyZXR1cm4gYlZlLmZvcm1hdChuKX12YXIgdnM9e2Zvcm1hdFRpY2s6QVIsZm9ybWF0U2hvcnQ6QVIsZm9ybWF0UmVhZGFibGU6QVIsZm9ybWF0TG9uZzpBUn0seFZlPXJvKCIwLjN+cyIpLENWZT1ybygiLC4zfmYiKTtmdW5jdGlvbiBJUihuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49MWU0fHx0PC4wMDE/eFZlKG4pOkNWZShuKX12YXIgU3NlPXtmb3JtYXRUaWNrOklSLGZvcm1hdFNob3J0OklSLGZvcm1hdFJlYWRhYmxlOklSLGZvcm1hdExvbmc6SVJ9LEU0PTM2ZTUsVnY9cm8oIi40fiIpO2Z1bmN0aW9uIFBSKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTwxZTM/YCR7VnYoZSl9IG1zYDplPDZlND9gJHtWdihlLzFlMyl9IHNlY2A6ZTxFND9gJHtWdihlLzZlNCl9IG1pbmA6ZTw4NjRlNT9gJHtWdihlL0U0KX0gaHJgOmU8MzE1MzZlNj9gJHtWdihlLzg2NGU1KX0gZGF5YDpgJHtWdihlLzMxNTM2ZTYpfSB5cmAsdH12YXIgdzQsaU09e2Zvcm1hdFRpY2s6UFIsZm9ybWF0U2hvcnQ6UFIsZm9ybWF0UmVhZGFibGU6UFIsZm9ybWF0TG9uZzpQUn0sd1ZlPUxtKCkudGlja0Zvcm1hdCgpLEVzZT17Zm9ybWF0VGljazpuPT53VmUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcodzQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIEFjKG4pe3N3aXRjaChuKXtjYXNlIFNyLkxJTkVBUjpyZXR1cm4gbmV3IHJNO2Nhc2UgU3IuTE9HMTA6cmV0dXJuIG5ldyBJNDtjYXNlIFNyLlRJTUU6cmV0dXJuIG5ldyBvTTtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgck09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1EYygpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIERjKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSTQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbCxkPWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSxkLyh1K051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybSh1LyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1XdygpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sb009Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPUxtKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUVzZX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sUDQ9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57UDQ9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO1A0PUJvb2xlYW4odCl9dmFyIEljX2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxJY19pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiBQNH0sSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtpZighc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIikpcmV0dXJuITE7bGV0IG49bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIpO3JldHVybiBCb29sZWFuKG4pfSxJY19hcmVQb2x5bGluZXNFcXVhbD1mdW5jdGlvbihuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9LEh2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy54U2NhbGU9QWMoU3IuTElORUFSKSx0aGlzLnlTY2FsZT1BYyhTci5MSU5FQVIpLHRoaXMuZG9tQ29udGFpbmVyUmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX19Z2V0VXBkYXRlSWRlbnRpZmllcigpe3JldHVybiB0aGlzLmxhc3RVcGRhdGVkfXVwZGF0ZUlkZW50aWZpZXIoKXt0aGlzLmxhc3RVcGRhdGVkKyt9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITB9c2V0WFNjYWxlKHQpe3RoaXMueFNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0WVNjYWxlKHQpe3RoaXMueVNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9Z2V0Q3VycmVudFZpZXdCb3hSZWN0KCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXdCb3hSZWN0fXNldFZpZXdCb3hSZWN0KHQpe3RoaXMuY3VycmVudFZpZXdCb3hSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXt0aGlzLmRvbUNvbnRhaW5lclJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX10cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsZSl7bGV0IGk9dCxyPUljX2NvbnZlcnRSZWN0VG9FeHRlbnQodGhpcy5jdXJyZW50Vmlld0JveFJlY3QpO3JldHVyblt0aGlzLnhTY2FsZS5mb3J3YXJkKHIueCxbaS54LGkueCtpLndpZHRoXSxlWzBdKSx0aGlzLnlTY2FsZS5mb3J3YXJkKHIueSx0aGlzLmlzWUF4aXNQb2ludGVkRG93bigpP1tpLnkraS5oZWlnaHQsaS55XTpbaS55LGkueStpLmhlaWdodF0sZVsxXSldfX07ZnVuY3Rpb24gUlIobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpvLG9wYWNpdHk6c309aSxhPW47cmV0dXJuIGF8fG8/KGE9YT8/dCgpLGE9ZShhKSxhLnN0eWxlLmRpc3BsYXk9bz8iIjoibm9uZSIsYS5zdHlsZS5zdHJva2U9cixhLnN0eWxlLm9wYWNpdHk9U3RyaW5nKHM/PzEpLGEpOm51bGx9dmFyIFphPTEwMDEsSW89MTAwMyxicz0xMDA2LFNoPTEwMDksd009MTAxMixZbT0xMDE1LHV5PTEwMTYsZHk9MTAyMCx6cz0xMDIzLFFtPTEwMjYsbXk9MTAyNyxheT0yNDAwLGx5PTI0MDEsRGg9M2UzLEZyPTMwMDEsTU09MzUwNDQsZzI9MzUwNDgsSGQ9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PWlbdF0mJihpW3RdPVtdKSwtMT09PWlbdF0uaW5kZXhPZihlKSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1pW3RdJiYtMSE9PWlbdF0uaW5kZXhPZihlKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnNbdF07aWYodm9pZCAwIT09cil7bGV0IG89ci5pbmRleE9mKGUpOy0xIT09byYmci5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKHZvaWQgMCE9PWkpe3QudGFyZ2V0PXRoaXM7bGV0IHI9aS5zbGljZSgwKTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxpcz1bXTtmb3IobGV0IG49MDtuPDI1NjtuKyspaXNbbl09KG48MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KTt2YXIgQjQ9TWF0aC5QSS8xODAsd1U9MTgwL01hdGguUEk7ZnVuY3Rpb24gRmMoKXtsZXQgbj00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCx0PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsaT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oaXNbMjU1Jm5dK2lzW24+PjgmMjU1XStpc1tuPj4xNiYyNTVdK2lzW24+PjI0JjI1NV0rIi0iK2lzWzI1NSZ0XStpc1t0Pj44JjI1NV0rIi0iK2lzW3Q+PjE2JjE1fDY0XStpc1t0Pj4yNCYyNTVdKyItIitpc1s2MyZlfDEyOF0raXNbZT4+OCYyNTVdKyItIitpc1tlPj4xNiYyNTVdK2lzW2U+PjI0JjI1NV0raXNbMjU1JmldK2lzW2k+PjgmMjU1XStpc1tpPj4xNiYyNTVdK2lzW2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gX2Eobix0LGUpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfWZ1bmN0aW9uIFY0KG4sdCxlKXtyZXR1cm4oMS1lKSpuK2UqdH1mdW5jdGlvbiBpYWUobil7cmV0dXJuIDA9PShuJm4tMSkmJjAhPT1ufWZ1bmN0aW9uIEE1ZShuKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4yKSl9dmFyIEplPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPXRoaXMueC10Lngscz10aGlzLnktdC55O3JldHVybiB0aGlzLng9byppLXMqcit0LngsdGhpcy55PW8qcitzKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0plLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIFBvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPW8sdVs1XT1sLHVbNl09aSx1WzddPXMsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxkPWlbN10scD1pWzJdLGg9aVs1XSxmPWlbOF0sbT1yWzBdLEM9clszXSxfPXJbNl0seT1yWzFdLEk9cls0XSxBPXJbN10sTz1yWzJdLGVlPXJbNV0sWD1yWzhdO3JldHVybiBvWzBdPXMqbSthKnkrbCpPLG9bM109cypDK2EqSStsKmVlLG9bNl09cypfK2EqQStsKlgsb1sxXT1jKm0rdSp5K2QqTyxvWzRdPWMqQyt1KkkrZCplZSxvWzddPWMqXyt1KkErZCpYLG9bMl09cCptK2gqeStmKk8sb1s1XT1wKkMraCpJK2YqZWUsb1s4XT1wKl8raCpBK2YqWCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVszXSo9dCxlWzZdKj10LGVbMV0qPXQsZVs0XSo9dCxlWzddKj10LGVbMl0qPXQsZVs1XSo9dCxlWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdO3JldHVybiBlKnMqdS1lKmEqYy1pKm8qdStpKmEqbCtyKm8qYy1yKnMqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGQ9dSpzLWEqYyxwPWEqbC11Km8saD1jKm8tcypsLGY9ZSpkK2kqcCtyKmg7aWYoMD09PWYpcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgbT0xL2Y7cmV0dXJuIHRbMF09ZCptLHRbMV09KHIqYy11KmkpKm0sdFsyXT0oYSppLXIqcykqbSx0WzNdPXAqbSx0WzRdPSh1KmUtcipsKSptLHRbNV09KHIqby1hKmUpKm0sdFs2XT1oKm0sdFs3XT0oaSpsLWMqZSkqbSx0WzhdPShzKmUtaSpvKSptLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQsZT10aGlzLmVsZW1lbnRzO3JldHVybiB0PWVbMV0sZVsxXT1lWzNdLGVbM109dCx0PWVbMl0sZVsyXT1lWzZdLGVbNl09dCx0PWVbNV0sZVs1XT1lWzddLGVbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxyLG8scyxhKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChpKmwsaSpjLC1pKihsKnMrYyphKStzK3QsLXIqYyxyKmwsLXIqKC1jKnMrbCphKSthK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKj10LGlbM10qPXQsaVs2XSo9dCxpWzFdKj1lLGlbNF0qPWUsaVs3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLHI9dGhpcy5lbGVtZW50cyxvPXJbMF0scz1yWzNdLGE9cls2XSxsPXJbMV0sYz1yWzRdLHU9cls3XTtyZXR1cm4gclswXT1lKm8raSpsLHJbM109ZSpzK2kqYyxyWzZdPWUqYStpKnUsclsxXT0taSpvK2UqbCxyWzRdPS1pKnMrZSpjLHJbN109LWkqYStlKnUsdGhpc310cmFuc2xhdGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKz10KmlbMl0saVszXSs9dCppWzVdLGlbNl0rPXQqaVs4XSxpWzFdKz1lKmlbMl0saVs0XSs9ZSppWzVdLGlbN10rPWUqaVs4XSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZnVuY3Rpb24gbWxlKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gU00obil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9UG8ucHJvdG90eXBlLmlzTWF0cml4Mz0hMDt2YXIgcmFlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LFBjPXtoOjAsczowLGw6MH0sT1I9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBINChuLHQsZSl7cmV0dXJuIGU8MCYmKGUrPTEpLGU+MSYmKGUtPTEpLGU8MS82P24rNioodC1uKSplOmU8LjU/dDplPDIvMz9uKzYqKHQtbikqKDIvMy1lKTpufWZ1bmN0aW9uIHB5KG4pe3JldHVybiBuPC4wNDA0NT8uMDc3Mzk5MzgwOCpuOk1hdGgucG93KC45NDc4NjcyOTg2Km4rLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBVNChuKXtyZXR1cm4gbjwuMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sLjQxNjY2KS0uMDU1fXZhciBhbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXtyZXR1cm4gdm9pZCAwPT09aSYmdm9pZCAwPT09cj90aGlzLnNldChlKTp0aGlzLnNldFJHQihlLGkscil9c2V0KGUpe3JldHVybiBlJiZlLmlzQ29sb3I/dGhpcy5jb3B5KGUpOiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnNldEhleChlKToic3RyaW5nIj09dHlwZW9mIGUmJnRoaXMuc2V0U3R5bGUoZSksdGhpc31zZXRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1lLHRoaXMuYj1lLHRoaXN9c2V0SGV4KGUpe3JldHVybiBlPU1hdGguZmxvb3IoZSksdGhpcy5yPShlPj4xNiYyNTUpLzI1NSx0aGlzLmc9KGU+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmZSkvMjU1LHRoaXN9c2V0UkdCKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUsdGhpcy5nPWksdGhpcy5iPXIsdGhpc31zZXRIU0woZSxpLHIpe2lmKGU9ZnVuY3Rpb24obix0KXtyZXR1cm4obiUxKzEpJTF9KGUpLGk9X2EoaSwwLDEpLHI9X2EociwwLDEpLDA9PT1pKXRoaXMucj10aGlzLmc9dGhpcy5iPXI7ZWxzZXtsZXQgbz1yPD0uNT9yKigxK2kpOnIraS1yKmkscz0yKnItbzt0aGlzLnI9SDQocyxvLGUrMS8zKSx0aGlzLmc9SDQocyxvLGUpLHRoaXMuYj1INChzLG8sZS0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKGUpe2Z1bmN0aW9uIGkobyl7dm9pZCAwIT09byYmcGFyc2VGbG9hdChvKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIitlKyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCByO2lmKHI9L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWMoZSkpe2xldCBvLGE9clsyXTtzd2l0Y2goclsxXSl7Y2FzZSJyZ2IiOmNhc2UicmdiYSI6aWYobz0vXlxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChvWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQob1szXSwxMCkpLzI1NSxpKG9bNF0pLHRoaXM7aWYobz0vXlxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bMV0sMTApKS8xMDAsdGhpcy5nPU1hdGgubWluKDEwMCxwYXJzZUludChvWzJdLDEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQob1szXSwxMCkpLzEwMCxpKG9bNF0pLHRoaXM7YnJlYWs7Y2FzZSJoc2wiOmNhc2UiaHNsYSI6aWYobz0vXlxzKihcZCpcLj9cZCspXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSl7bGV0IGw9cGFyc2VGbG9hdChvWzFdKS8zNjAsYz1wYXJzZUludChvWzJdLDEwKS8xMDAsdT1wYXJzZUludChvWzNdLDEwKS8xMDA7cmV0dXJuIGkob1s0XSksdGhpcy5zZXRIU0wobCxjLHUpfX19ZWxzZSBpZihyPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyhlKSl7bGV0IG89clsxXSxzPW8ubGVuZ3RoO2lmKDM9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMSkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoNCkrby5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiBlJiZlLmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKGUpOnRoaXN9c2V0Q29sb3JOYW1lKGUpe2xldCBpPXJhZVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB2b2lkIDAhPT1pP3RoaXMuc2V0SGV4KGkpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIitlKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KGUpe3JldHVybiB0aGlzLnI9ZS5yLHRoaXMuZz1lLmcsdGhpcy5iPWUuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIoZSl7cmV0dXJuIHRoaXMucj1weShlLnIpLHRoaXMuZz1weShlLmcpLHRoaXMuYj1weShlLmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQihlKXtyZXR1cm4gdGhpcy5yPVU0KGUuciksdGhpcy5nPVU0KGUuZyksdGhpcy5iPVU0KGUuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0woZSl7bGV0IGwsYyxpPXRoaXMucixyPXRoaXMuZyxvPXRoaXMuYixzPU1hdGgubWF4KGkscixvKSxhPU1hdGgubWluKGkscixvKSx1PShhK3MpLzI7aWYoYT09PXMpbD0wLGM9MDtlbHNle2xldCBkPXMtYTtzd2l0Y2goYz11PD0uNT9kLyhzK2EpOmQvKDItcy1hKSxzKXtjYXNlIGk6bD0oci1vKS9kKyhyPG8/NjowKTticmVhaztjYXNlIHI6bD0oby1pKS9kKzI7YnJlYWs7Y2FzZSBvOmw9KGktcikvZCs0fWwvPTZ9cmV0dXJuIGUuaD1sLGUucz1jLGUubD11LGV9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9b2Zmc2V0SFNMKGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRIU0woUGMpLFBjLmgrPWUsUGMucys9aSxQYy5sKz1yLHRoaXMuc2V0SFNMKFBjLmgsUGMucyxQYy5sKSx0aGlzfWFkZChlKXtyZXR1cm4gdGhpcy5yKz1lLnIsdGhpcy5nKz1lLmcsdGhpcy5iKz1lLmIsdGhpc31hZGRDb2xvcnMoZSxpKXtyZXR1cm4gdGhpcy5yPWUucitpLnIsdGhpcy5nPWUuZytpLmcsdGhpcy5iPWUuYitpLmIsdGhpc31hZGRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucis9ZSx0aGlzLmcrPWUsdGhpcy5iKz1lLHRoaXN9c3ViKGUpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItZS5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctZS5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItZS5iKSx0aGlzfW11bHRpcGx5KGUpe3JldHVybiB0aGlzLnIqPWUucix0aGlzLmcqPWUuZyx0aGlzLmIqPWUuYix0aGlzfW11bHRpcGx5U2NhbGFyKGUpe3JldHVybiB0aGlzLnIqPWUsdGhpcy5nKj1lLHRoaXMuYio9ZSx0aGlzfWxlcnAoZSxpKXtyZXR1cm4gdGhpcy5yKz0oZS5yLXRoaXMucikqaSx0aGlzLmcrPShlLmctdGhpcy5nKSppLHRoaXMuYis9KGUuYi10aGlzLmIpKmksdGhpc31sZXJwQ29sb3JzKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUucisoaS5yLWUucikqcix0aGlzLmc9ZS5nKyhpLmctZS5nKSpyLHRoaXMuYj1lLmIrKGkuYi1lLmIpKnIsdGhpc31sZXJwSFNMKGUsaSl7dGhpcy5nZXRIU0woUGMpLGUuZ2V0SFNMKE9SKTtsZXQgcj1WNChQYy5oLE9SLmgsaSksbz1WNChQYy5zLE9SLnMsaSkscz1WNChQYy5sLE9SLmwsaSk7cmV0dXJuIHRoaXMuc2V0SFNMKHIsbyxzKSx0aGlzfWVxdWFscyhlKXtyZXR1cm4gZS5yPT09dGhpcy5yJiZlLmc9PT10aGlzLmcmJmUuYj09PXRoaXMuYn1mcm9tQXJyYXkoZSxpPTApe3JldHVybiB0aGlzLnI9ZVtpXSx0aGlzLmc9ZVtpKzFdLHRoaXMuYj1lW2krMl0sdGhpc310b0FycmF5KGU9W10saT0wKXtyZXR1cm4gZVtpXT10aGlzLnIsZVtpKzFdPXRoaXMuZyxlW2krMl09dGhpcy5iLGV9ZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGkpe3JldHVybiB0aGlzLnI9ZS5nZXRYKGkpLHRoaXMuZz1lLmdldFkoaSksdGhpcy5iPWUuZ2V0WihpKSwhMD09PWUubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1yZXR1cm4gbi5OQU1FUz1yYWUsbn0pKCk7YW4ucHJvdG90eXBlLmlzQ29sb3I9ITAsYW4ucHJvdG90eXBlLnI9MSxhbi5wcm90b3R5cGUuZz0xLGFuLnByb3RvdHlwZS5iPTE7dmFyIFV2LFVkPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PiJ1IilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ZvaWQgMD09PVV2JiYoVXY9U00oImNhbnZhcyIpKSxVdi53aWR0aD10LndpZHRoLFV2LmhlaWdodD10LmhlaWdodDtsZXQgaT1Vdi5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9VXZ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1TTSgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCksbz1yLmRhdGE7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspb1tzXT0yNTUqcHkob1tzXS8yNTUpO3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1pZih0LmRhdGEpe2xldCBlPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyllW2ldPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/TWF0aC5mbG9vcigyNTUqcHkoZVtpXS8yNTUpKTpweShlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LEk1ZT0wLGJvPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodD1iby5ERUZBVUxUX0lNQUdFLGU9Ym8uREVGQVVMVF9NQVBQSU5HLGk9WmEscj1aYSxvPWJzLHM9MTAwOCxhPXpzLGw9U2gsYz0xLHU9RGgpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6STVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9ZSx0aGlzLndyYXBTPWksdGhpcy53cmFwVD1yLHRoaXMubWFnRmlsdGVyPW8sdGhpcy5taW5GaWx0ZXI9cyx0aGlzLmFuaXNvdHJvcHk9Yyx0aGlzLmZvcm1hdD1hLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9bCx0aGlzLm9mZnNldD1uZXcgSmUoMCwwKSx0aGlzLnJlcGVhdD1uZXcgSmUoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSmUoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBQbyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMCx0aGlzLnByZW11bHRpcGx5QWxwaGE9ITEsdGhpcy5mbGlwWT0hMCx0aGlzLnVucGFja0FsaWdubWVudD00LHRoaXMuZW5jb2Rpbmc9dSx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMSx0aGlzLm5lZWRzUE1SRU1VcGRhdGU9ITF9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7aWYoIWUmJnZvaWQgMCE9PXQudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih2b2lkIDAhPT10aGlzLmltYWdlKXtsZXQgcj10aGlzLmltYWdlO2lmKHZvaWQgMD09PXIudXVpZCYmKHIudXVpZD1GYygpKSwhZSYmdm9pZCAwPT09dC5pbWFnZXNbci51dWlkXSl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShyKSl7bz1bXTtmb3IobGV0IHM9MCxhPXIubGVuZ3RoO3M8YTtzKyspby5wdXNoKHo0KHJbc10uaXNEYXRhVGV4dHVyZT9yW3NdLmltYWdlOnJbc10pKX1lbHNlIG89ejQocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOm99fWkuaW1hZ2U9ci51dWlkfXJldHVybiJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1pKSxpfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9dHJhbnNmb3JtVXYodCl7aWYoMzAwIT09dGhpcy5tYXBwaW5nKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgMWUzOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgWmE6dC54PXQueDwwPzA6MTticmVhaztjYXNlIDEwMDI6dC54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik/TWF0aC5jZWlsKHQueCktdC54OnQueC1NYXRoLmZsb29yKHQueCl9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIDFlMzp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFphOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAxMDAyOnQueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpP01hdGguY2VpbCh0LnkpLXQueTp0LnktTWF0aC5mbG9vcih0LnkpfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07ZnVuY3Rpb24gejQobil7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmbiBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmbiBpbnN0YW5jZW9mIEltYWdlQml0bWFwP1VkLmdldERhdGFVUkwobik6bi5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4uZGF0YSksd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsdHlwZTpuLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX1iby5ERUZBVUxUX0lNQUdFPXZvaWQgMCxiby5ERUZBVUxUX01BUFBJTkc9MzAwLGJvLnByb3RvdHlwZS5pc1RleHR1cmU9ITA7dmFyIHRyPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9MSl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpcy53PXJ9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dm9pZCAwIT09dC53P3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXRoaXMudyxzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1s0XSppK3NbOF0qcitzWzEyXSpvLHRoaXMueT1zWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSpvLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIrc1sxNF0qbyx0aGlzLnc9c1szXSplK3NbN10qaStzWzExXSpyK3NbMTVdKm8sdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgZT1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gZTwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10LngvZSx0aGlzLnk9dC55L2UsdGhpcy56PXQuei9lKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZSxpLHIsbyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxkPWxbOF0scD1sWzFdLGg9bFs1XSxmPWxbOV0sbT1sWzJdLEM9bFs2XSxfPWxbMTBdO2lmKE1hdGguYWJzKHUtcCk8LjAxJiZNYXRoLmFicyhkLW0pPC4wMSYmTWF0aC5hYnMoZi1DKTwuMDEpe2lmKE1hdGguYWJzKHUrcCk8LjEmJk1hdGguYWJzKGQrbSk8LjEmJk1hdGguYWJzKGYrQyk8LjEmJk1hdGguYWJzKGMraCtfLTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtsZXQgST0oYysxKS8yLEE9KGgrMSkvMixPPShfKzEpLzIsZWU9KHUrcCkvNCxYPShkK20pLzQseGU9KGYrQykvNDtyZXR1cm4gST5BJiZJPk8/STwuMDE/KGk9MCxyPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoSSkscj1lZS9pLG89WC9pKTpBPk8/QTwuMDE/KGk9LjcwNzEwNjc4MSxyPTAsbz0uNzA3MTA2NzgxKToocj1NYXRoLnNxcnQoQSksaT1lZS9yLG89eGUvcik6TzwuMDE/KGk9LjcwNzEwNjc4MSxyPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoTyksaT1YL28scj14ZS9vKSx0aGlzLnNldChpLHIsbyxlKSx0aGlzfWxldCB5PU1hdGguc3FydCgoQy1mKSooQy1mKSsoZC1tKSooZC1tKSsocC11KSoocC11KSk7cmV0dXJuIE1hdGguYWJzKHkpPC4wMDEmJih5PTEpLHRoaXMueD0oQy1mKS95LHRoaXMueT0oZC1tKS95LHRoaXMuej0ocC11KS95LHRoaXMudz1NYXRoLmFjb3MoKGMraCtfLTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oZS53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzLnc9dC53KyhlLnctdC53KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O3RyLnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIHZhPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgdHIoMCwwLHQsZSksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyB0cigwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IGJvKHZvaWQgMCxpLm1hcHBpbmcsaS53cmFwUyxpLndyYXBULGkubWFnRmlsdGVyLGkubWluRmlsdGVyLGkuZm9ybWF0LGkudHlwZSxpLmFuaXNvdHJvcHksaS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1pLmdlbmVyYXRlTWlwbWFwcyYmaS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PXZvaWQgMCE9PWkuaW50ZXJuYWxGb3JtYXQ/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09aS5taW5GaWx0ZXI/aS5taW5GaWx0ZXI6YnMsdGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDA9PT1pLmRlcHRoQnVmZmVyfHxpLmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj12b2lkIDAhPT1pLnN0ZW5jaWxCdWZmZXImJmkuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT12b2lkIDAhPT1pLmRlcHRoVGV4dHVyZT9pLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LGUsaT0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9aSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt2YS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMCxjbGFzcyBleHRlbmRzIHZhe2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBvPTA7bzxpO28rKyl0aGlzLnRleHR1cmVbb109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxvPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxvO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgRU09Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9dm9pZCAwPT09aS5pZ25vcmVEZXB0aHx8aS5pZ25vcmVEZXB0aCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT12b2lkIDAhPT1pLnVzZVJlbmRlclRvVGV4dHVyZSYmaS51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9ITE9PT10aGlzLnVzZVJlbmRlclRvVGV4dHVyZX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtFTS5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciBDcz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cn1zdGF0aWMgc2xlcnAodCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLGkuc2xlcnBRdWF0ZXJuaW9ucyh0LGUscil9c3RhdGljIHNsZXJwRmxhdCh0LGUsaSxyLG8scyxhKXtsZXQgbD1pW3IrMF0sYz1pW3IrMV0sdT1pW3IrMl0sZD1pW3IrM10scD1vW3MrMF0saD1vW3MrMV0sZj1vW3MrMl0sbT1vW3MrM107aWYoMD09PWEpcmV0dXJuIHRbZSswXT1sLHRbZSsxXT1jLHRbZSsyXT11LHZvaWQodFtlKzNdPWQpO2lmKDE9PT1hKXJldHVybiB0W2UrMF09cCx0W2UrMV09aCx0W2UrMl09Zix2b2lkKHRbZSszXT1tKTtpZihkIT09bXx8bCE9PXB8fGMhPT1ofHx1IT09Zil7bGV0IEM9MS1hLF89bCpwK2MqaCt1KmYrZCptLHk9Xz49MD8xOi0xLEk9MS1fKl87aWYoST5OdW1iZXIuRVBTSUxPTil7bGV0IE89TWF0aC5zcXJ0KEkpLGVlPU1hdGguYXRhbjIoTyxfKnkpO0M9TWF0aC5zaW4oQyplZSkvTyxhPU1hdGguc2luKGEqZWUpL099bGV0IEE9YSp5O2lmKGw9bCpDK3AqQSxjPWMqQytoKkEsdT11KkMrZipBLGQ9ZCpDK20qQSxDPT09MS1hKXtsZXQgTz0xL01hdGguc3FydChsKmwrYypjK3UqdStkKmQpO2wqPU8sYyo9Tyx1Kj1PLGQqPU99fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109ZH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixvLHMpe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10sZD1vW3NdLHA9b1tzKzFdLGg9b1tzKzJdLGY9b1tzKzNdO3JldHVybiB0W2VdPWEqZit1KmQrbCpoLWMqcCx0W2UrMV09bCpmK3UqcCtjKmQtYSpoLHRbZSsyXT1jKmYrdSpoK2EqcC1sKmQsdFtlKzNdPXUqZi1hKmQtbCpwLWMqaCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighdHx8IXQuaXNFdWxlcil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX29yZGVyLGE9TWF0aC5jb3MsbD1NYXRoLnNpbixjPWEoaS8yKSx1PWEoci8yKSxkPWEoby8yKSxwPWwoaS8yKSxoPWwoci8yKSxmPWwoby8yKTtzd2l0Y2gocyl7Y2FzZSJYWVoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK3MpfXJldHVybiExIT09ZSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LGUpe2xldCBpPWUvMixyPU1hdGguc2luKGkpO3JldHVybiB0aGlzLl94PXQueCpyLHRoaXMuX3k9dC55KnIsdGhpcy5fej10Lnoqcix0aGlzLl93PU1hdGguY29zKGkpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZT10LmVsZW1lbnRzLGk9ZVswXSxyPWVbNF0sbz1lWzhdLHM9ZVsxXSxhPWVbNV0sbD1lWzldLGM9ZVsyXSx1PWVbNl0sZD1lWzEwXSxwPWkrYStkO2lmKHA+MCl7bGV0IGg9LjUvTWF0aC5zcXJ0KHArMSk7dGhpcy5fdz0uMjUvaCx0aGlzLl94PSh1LWwpKmgsdGhpcy5feT0oby1jKSpoLHRoaXMuX3o9KHMtcikqaH1lbHNlIGlmKGk+YSYmaT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2ktYS1kKTt0aGlzLl93PSh1LWwpL2gsdGhpcy5feD0uMjUqaCx0aGlzLl95PShyK3MpL2gsdGhpcy5fej0obytjKS9ofWVsc2UgaWYoYT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2EtaS1kKTt0aGlzLl93PShvLWMpL2gsdGhpcy5feD0ocitzKS9oLHRoaXMuX3k9LjI1KmgsdGhpcy5fej0obCt1KS9ofWVsc2V7bGV0IGg9MipNYXRoLnNxcnQoMStkLWktYSk7dGhpcy5fdz0ocy1yKS9oLHRoaXMuX3g9KG8rYykvaCx0aGlzLl95PShsK3UpL2gsdGhpcy5fej0uMjUqaH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQsZSl7bGV0IGk9dC5kb3QoZSkrMTtyZXR1cm4gaTxOdW1iZXIuRVBTSUxPTj8oaT0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PWkpOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9aSkpOih0aGlzLl94PXQueSplLnotdC56KmUueSx0aGlzLl95PXQueiplLngtdC54KmUueix0aGlzLl96PXQueCplLnktdC55KmUueCx0aGlzLl93PWkpLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoX2EodGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQsZSl7bGV0IGk9dGhpcy5hbmdsZVRvKHQpO2lmKDA9PT1pKXJldHVybiB0aGlzO2xldCByPU1hdGgubWluKDEsZS9pKTtyZXR1cm4gdGhpcy5zbGVycCh0LHIpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gMD09PXQ/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpe2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX3csYT1lLl94LGw9ZS5feSxjPWUuX3osdT1lLl93O3JldHVybiB0aGlzLl94PWkqdStzKmErcipjLW8qbCx0aGlzLl95PXIqdStzKmwrbyphLWkqYyx0aGlzLl96PW8qdStzKmMraSpsLXIqYSx0aGlzLl93PXMqdS1pKmEtcipsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IGk9dGhpcy5feCxyPXRoaXMuX3ksbz10aGlzLl96LHM9dGhpcy5fdyxhPXMqdC5fdytpKnQuX3grcip0Ll95K28qdC5fejtpZihhPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3osYT0tYSk6dGhpcy5jb3B5KHQpLGE+PTEpcmV0dXJuIHRoaXMuX3c9cyx0aGlzLl94PWksdGhpcy5feT1yLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtYSphO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgaD0xLWU7cmV0dXJuIHRoaXMuX3c9aCpzK2UqdGhpcy5fdyx0aGlzLl94PWgqaStlKnRoaXMuX3gsdGhpcy5feT1oKnIrZSp0aGlzLl95LHRoaXMuX3o9aCpvK2UqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxhKSxkPU1hdGguc2luKCgxLWUpKnUpL2MscD1NYXRoLnNpbihlKnUpL2M7cmV0dXJuIHRoaXMuX3c9cypkK3RoaXMuX3cqcCx0aGlzLl94PWkqZCt0aGlzLl94KnAsdGhpcy5feT1yKmQrdGhpcy5feSpwLHRoaXMuX3o9bypkK3RoaXMuX3oqcCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQsZSxpKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKGUsaSl9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxlPU1hdGguc3FydCgxLXQpLGk9TWF0aC5zcXJ0KHQpLHI9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQoZSpNYXRoLmNvcyhyKSxpKk1hdGguc2luKG8pLGkqTWF0aC5jb3MobyksZSpNYXRoLnNpbihyKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLl94PXRbZV0sdGhpcy5feT10W2UrMV0sdGhpcy5fej10W2UrMl0sdGhpcy5fdz10W2UrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5feD10LmdldFgoZSksdGhpcy5feT10LmdldFkoZSksdGhpcy5fej10LmdldFooZSksdGhpcy5fdz10LmdldFcoZSksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07Q3MucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgJD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWl9c2V0KHQsZSxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxlKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54KmUueCx0aGlzLnk9dC55KmUueSx0aGlzLno9dC56KmUueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bM10qaStvWzZdKnIsdGhpcy55PW9bMV0qZStvWzRdKmkrb1s3XSpyLHRoaXMuej1vWzJdKmUrb1s1XSppK29bOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dC5lbGVtZW50cyxzPTEvKG9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0pKnMsdGhpcy55PShvWzFdKmUrb1s1XSppK29bOV0qcitvWzEzXSkqcyx0aGlzLno9KG9bMl0qZStvWzZdKmkrb1sxMF0qcitvWzE0XSkqcyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10Lngscz10LnksYT10LnosbD10LncsYz1sKmUrcypyLWEqaSx1PWwqaSthKmUtbypyLGQ9bCpyK28qaS1zKmUscD0tbyplLXMqaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrcCotbyt1Ki1hLWQqLXMsdGhpcy55PXUqbCtwKi1zK2QqLW8tYyotYSx0aGlzLno9ZCpsK3AqLWErYyotcy11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIsdGhpcy55PW9bMV0qZStvWzVdKmkrb1s5XSpyLHRoaXMuej1vWzJdKmUrb1s2XSppK29bMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1vKmEsdGhpcy55PW8qcy1pKmwsdGhpcy56PWkqYS1yKnMsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKDA9PT1lKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqNC5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihqNCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoajQuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoMD09PWUpcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoX2EoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyw0KmUpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsMyplKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiB2b2lkIDAhPT1pJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PTIqKE1hdGgucmFuZG9tKCktLjUpLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS10KioyKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19OyQucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgajQ9bmV3ICQsb2FlPW5ldyBDcyxKYT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkKDEvMCwxLzAsMS8wKSxlPW5ldyAkKC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5sZW5ndGg7bDxjO2wrPTMpe2xldCB1PXRbbF0sZD10W2wrMV0scD10W2wrMl07dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5jb3VudDtsPGM7bCsrKXtsZXQgdT10LmdldFgobCksZD10LmdldFkobCkscD10LmdldFoobCk7dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9am0uY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9c2V0RnJvbU9iamVjdCh0LGU9ITEpe3JldHVybiB0aGlzLm1ha2VFbXB0eSgpLHRoaXMuZXhwYW5kQnlPYmplY3QodCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYodm9pZCAwIT09aSlpZihlJiZudWxsIT1pLmF0dHJpYnV0ZXMmJnZvaWQgMCE9PWkuYXR0cmlidXRlcy5wb3NpdGlvbil7bGV0IG89aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGE9by5jb3VudDtzPGE7cysrKWptLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KGptKX1lbHNlIG51bGw9PT1pLmJvdW5kaW5nQm94JiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLEc0LmNvcHkoaS5ib3VuZGluZ0JveCksRzQuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oRzQpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltvXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLGptKSxqbS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoYU0pLGtSLnN1YlZlY3RvcnModGhpcy5tYXgsYU0pLHp2LnN1YlZlY3RvcnModC5hLGFNKSxqdi5zdWJWZWN0b3JzKHQuYixhTSksR3Yuc3ViVmVjdG9ycyh0LmMsYU0pLG1oLnN1YlZlY3RvcnMoanYsenYpLGdoLnN1YlZlY3RvcnMoR3YsanYpLEdtLnN1YlZlY3RvcnMoenYsR3YpO2xldCBlPVswLC1taC56LG1oLnksMCwtZ2gueixnaC55LDAsLUdtLnosR20ueSxtaC56LDAsLW1oLngsZ2gueiwwLC1naC54LEdtLnosMCwtR20ueCwtbWgueSxtaC54LDAsLWdoLnksZ2gueCwwLC1HbS55LEdtLngsMF07cmV0dXJuISghVzQoZSx6dixqdixHdixrUil8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIVc0KGUsenYsanYsR3Ysa1IpKSkmJihGUi5jcm9zc1ZlY3RvcnMobWgsZ2gpLGU9W0ZSLngsRlIueSxGUi56XSxXNChlLHp2LGp2LEd2LGtSKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gam0uY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGptKS5sZW5ndGgoKSx0fWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCl8fChrZFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoa2QpKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0phLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIGtkPVtuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJF0sam09bmV3ICQsRzQ9bmV3IEphLHp2PW5ldyAkLGp2PW5ldyAkLEd2PW5ldyAkLG1oPW5ldyAkLGdoPW5ldyAkLEdtPW5ldyAkLGFNPW5ldyAkLGtSPW5ldyAkLEZSPW5ldyAkLFdtPW5ldyAkO2Z1bmN0aW9uIFc0KG4sdCxlLGkscil7Zm9yKGxldCBvPTAscz1uLmxlbmd0aC0zO288PXM7bys9Myl7V20uZnJvbUFycmF5KG4sbyk7bGV0IGE9ci54Kk1hdGguYWJzKFdtLngpK3IueSpNYXRoLmFicyhXbS55KStyLnoqTWF0aC5hYnMoV20ueiksbD10LmRvdChXbSksYz1lLmRvdChXbSksdT1pLmRvdChXbSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIFA1ZT1uZXcgSmEsc2FlPW5ldyAkLE5SPW5ldyAkLHE0PW5ldyAkLEFoPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7dm9pZCAwIT09ZT9pLmNvcHkoZSk6UDVlLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10Lmxlbmd0aDtvPHM7bysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7cTQuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1xNC5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPS41KihpLXRoaXMucmFkaXVzKTt0aGlzLmNlbnRlci5hZGQocTQubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuITA9PT10aGlzLmNlbnRlci5lcXVhbHModC5jZW50ZXIpP05SLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOk5SLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoc2FlLmNvcHkodC5jZW50ZXIpLmFkZChOUikpLHRoaXMuZXhwYW5kQnlQb2ludChzYWUuY29weSh0LmNlbnRlcikuc3ViKE5SKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSxGZD1uZXcgJCxZND1uZXcgJCxMUj1uZXcgJCxfaD1uZXcgJCxYND1uZXcgJCxCUj1uZXcgJCxRND1uZXcgJCxJaD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsRmQpKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9RmQuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KEZkLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksRmQuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7WTQuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLExSLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLF9oLmNvcHkodGhpcy5vcmlnaW4pLnN1YihZNCk7bGV0IGQscCxoLGYsbz0uNSp0LmRpc3RhbmNlVG8oZSkscz0tdGhpcy5kaXJlY3Rpb24uZG90KExSKSxhPV9oLmRvdCh0aGlzLmRpcmVjdGlvbiksbD0tX2guZG90KExSKSxjPV9oLmxlbmd0aFNxKCksdT1NYXRoLmFicygxLXMqcyk7aWYodT4wKWlmKGQ9cypsLWEscD1zKmEtbCxmPW8qdSxkPj0wKWlmKHA+PS1mKWlmKHA8PWYpe2xldCBtPTEvdTtkKj1tLHAqPW0saD1kKihkK3MqcCsyKmEpK3AqKHMqZCtwKzIqbCkrY31lbHNlIHA9byxkPU1hdGgubWF4KDAsLShzKnArYSkpLGg9LWQqZCtwKihwKzIqbCkrYztlbHNlIHA9LW8sZD1NYXRoLm1heCgwLC0ocypwK2EpKSxoPS1kKmQrcCoocCsyKmwpK2M7ZWxzZSBwPD0tZj8oZD1NYXRoLm1heCgwLC0oLXMqbythKSkscD1kPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk6cDw9Zj8oZD0wLHA9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9cCoocCsyKmwpK2MpOihkPU1hdGgubWF4KDAsLShzKm8rYSkpLHA9ZD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk7ZWxzZSBwPXM+MD8tbzpvLGQ9TWF0aC5tYXgoMCwtKHMqcCthKSksaD0tZCpkK3AqKHArMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KExSKS5tdWx0aXBseVNjYWxhcihwKS5hZGQoWTQpLGh9aW50ZXJzZWN0U3BoZXJlKHQsZSl7RmQuc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9RmQuZG90KHRoaXMuZGlyZWN0aW9uKSxyPUZkLmRvdChGZCktaSppLG89dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5vKXJldHVybiBudWxsO2xldCBzPU1hdGguc3FydChvLXIpLGE9aS1zLGw9aStzO3JldHVybiBhPDAmJmw8MD9udWxsOnRoaXMuYXQoYTwwP2w6YSxlKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCBlPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWUpcmV0dXJuIDA9PT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2xldCBpPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9lO3JldHVybiBpPj0wP2k6bnVsbH1pbnRlcnNlY3RQbGFuZSh0LGUpe2xldCBpPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBudWxsPT09aT9udWxsOnRoaXMuYXQoaSxlKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGU9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiAwPT09ZXx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSplPDB9aW50ZXJzZWN0Qm94KHQsZSl7bGV0IGkscixvLHMsYSxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGQ9MS90aGlzLmRpcmVjdGlvbi56LHA9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KGk9KHQubWluLngtcC54KSpjLHI9KHQubWF4LngtcC54KSpjKTooaT0odC5tYXgueC1wLngpKmMscj0odC5taW4ueC1wLngpKmMpLHU+PTA/KG89KHQubWluLnktcC55KSp1LHM9KHQubWF4LnktcC55KSp1KToobz0odC5tYXgueS1wLnkpKnUscz0odC5taW4ueS1wLnkpKnUpLGk+c3x8bz5yfHwoKG8+aXx8aSE9aSkmJihpPW8pLChzPHJ8fHIhPXIpJiYocj1zKSxkPj0wPyhhPSh0Lm1pbi56LXAueikqZCxsPSh0Lm1heC56LXAueikqZCk6KGE9KHQubWF4LnotcC56KSpkLGw9KHQubWluLnotcC56KSpkKSxpPmx8fGE+cil8fCgoYT5pfHxpIT1pKSYmKGk9YSksKGw8cnx8ciE9cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveCh0LEZkKX1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLG8pe1g0LnN1YlZlY3RvcnMoZSx0KSxCUi5zdWJWZWN0b3JzKGksdCksUTQuY3Jvc3NWZWN0b3JzKFg0LEJSKTtsZXQgYSxzPXRoaXMuZGlyZWN0aW9uLmRvdChRNCk7aWYocz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNle2lmKCEoczwwKSlyZXR1cm4gbnVsbDthPS0xLHM9LXN9X2guc3ViVmVjdG9ycyh0aGlzLm9yaWdpbix0KTtsZXQgbD1hKnRoaXMuZGlyZWN0aW9uLmRvdChCUi5jcm9zc1ZlY3RvcnMoX2gsQlIpKTtpZihsPDApcmV0dXJuIG51bGw7bGV0IGM9YSp0aGlzLmRpcmVjdGlvbi5kb3QoWDQuY3Jvc3MoX2gpKTtpZihjPDB8fGwrYz5zKXJldHVybiBudWxsO2xldCB1PS1hKl9oLmRvdChRNCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9zLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19LE1uPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtsZXQgXz10aGlzLmVsZW1lbnRzO3JldHVybiBfWzBdPXQsX1s0XT1lLF9bOF09aSxfWzEyXT1yLF9bMV09byxfWzVdPXMsX1s5XT1hLF9bMTNdPWwsX1syXT1jLF9bNl09dSxfWzEwXT1kLF9bMTRdPXAsX1szXT1oLF9bN109ZixfWzExXT1tLF9bMTVdPUMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyBNbikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLGVbOV09aVs5XSxlWzEwXT1pWzEwXSxlWzExXT1pWzExXSxlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSxlWzE1XT1pWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxpLngsMCx0LnksZS55LGkueSwwLHQueixlLnosaS56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHMscj0xL1d2LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxvPTEvV3Yuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHM9MS9Xdi5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIGVbMF09aVswXSpyLGVbMV09aVsxXSpyLGVbMl09aVsyXSpyLGVbM109MCxlWzRdPWlbNF0qbyxlWzVdPWlbNV0qbyxlWzZdPWlbNl0qbyxlWzddPTAsZVs4XT1pWzhdKnMsZVs5XT1pWzldKnMsZVsxMF09aVsxMF0qcyxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lnoscz1NYXRoLmNvcyhpKSxhPU1hdGguc2luKGkpLGw9TWF0aC5jb3MociksYz1NYXRoLnNpbihyKSx1PU1hdGguY29zKG8pLGQ9TWF0aC5zaW4obyk7aWYoIlhZWiI9PT10Lm9yZGVyKXtsZXQgcD1zKnUsaD1zKmQsZj1hKnUsbT1hKmQ7ZVswXT1sKnUsZVs0XT0tbCpkLGVbOF09YyxlWzFdPWgrZipjLGVbNV09cC1tKmMsZVs5XT0tYSpsLGVbMl09bS1wKmMsZVs2XT1mK2gqYyxlWzEwXT1zKmx9ZWxzZSBpZigiWVhaIj09PXQub3JkZXIpe2xldCBwPWwqdSxoPWwqZCxmPWMqdSxtPWMqZDtlWzBdPXArbSphLGVbNF09ZiphLWgsZVs4XT1zKmMsZVsxXT1zKmQsZVs1XT1zKnUsZVs5XT0tYSxlWzJdPWgqYS1mLGVbNl09bStwKmEsZVsxMF09cypsfWVsc2UgaWYoIlpYWSI9PT10Lm9yZGVyKXtsZXQgcD1sKnUsaD1sKmQsZj1jKnUsbT1jKmQ7ZVswXT1wLW0qYSxlWzRdPS1zKmQsZVs4XT1mK2gqYSxlWzFdPWgrZiphLGVbNV09cyp1LGVbOV09bS1wKmEsZVsyXT0tcypjLGVbNl09YSxlWzEwXT1zKmx9ZWxzZSBpZigiWllYIj09PXQub3JkZXIpe2xldCBwPXMqdSxoPXMqZCxmPWEqdSxtPWEqZDtlWzBdPWwqdSxlWzRdPWYqYy1oLGVbOF09cCpjK20sZVsxXT1sKmQsZVs1XT1tKmMrcCxlWzldPWgqYy1mLGVbMl09LWMsZVs2XT1hKmwsZVsxMF09cypsfWVsc2UgaWYoIllaWCI9PT10Lm9yZGVyKXtsZXQgcD1zKmwsaD1zKmMsZj1hKmwsbT1hKmM7ZVswXT1sKnUsZVs0XT1tLXAqZCxlWzhdPWYqZCtoLGVbMV09ZCxlWzVdPXMqdSxlWzldPS1hKnUsZVsyXT0tYyp1LGVbNl09aCpkK2YsZVsxMF09cC1tKmR9ZWxzZSBpZigiWFpZIj09PXQub3JkZXIpe2xldCBwPXMqbCxoPXMqYyxmPWEqbCxtPWEqYztlWzBdPWwqdSxlWzRdPS1kLGVbOF09Yyp1LGVbMV09cCpkK20sZVs1XT1zKnUsZVs5XT1oKmQtZixlWzJdPWYqZC1oLGVbNl09YSp1LGVbMTBdPW0qZCtwfXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UoUjVlLHQsTzVlKX1sb29rQXQodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIFFhLnN1YlZlY3RvcnModCxlKSwwPT09UWEubGVuZ3RoU3EoKSYmKFFhLno9MSksUWEubm9ybWFsaXplKCksdmguY3Jvc3NWZWN0b3JzKGksUWEpLDA9PT12aC5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKGkueik/UWEueCs9MWUtNDpRYS56Kz0xZS00LFFhLm5vcm1hbGl6ZSgpLHZoLmNyb3NzVmVjdG9ycyhpLFFhKSksdmgubm9ybWFsaXplKCksVlIuY3Jvc3NWZWN0b3JzKFFhLHZoKSxyWzBdPXZoLngscls0XT1WUi54LHJbOF09UWEueCxyWzFdPXZoLnkscls1XT1WUi55LHJbOV09UWEueSxyWzJdPXZoLnoscls2XT1WUi56LHJbMTBdPVFhLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LGUpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxzPWlbMF0sYT1pWzRdLGw9aVs4XSxjPWlbMTJdLHU9aVsxXSxkPWlbNV0scD1pWzldLGg9aVsxM10sZj1pWzJdLG09aVs2XSxDPWlbMTBdLF89aVsxNF0seT1pWzNdLEk9aVs3XSxBPWlbMTFdLE89aVsxNV0sZWU9clswXSxYPXJbNF0seGU9cls4XSxmZT1yWzEyXSx2ZT1yWzFdLFQ9cls1XSxuZT1yWzldLGxlPXJbMTNdLGhlPXJbMl0seWU9cls2XSxKPXJbMTBdLGFlPXJbMTRdLG1lPXJbM10samU9cls3XSxNZT1yWzExXSxGZT1yWzE1XTtyZXR1cm4gb1swXT1zKmVlK2EqdmUrbCpoZStjKm1lLG9bNF09cypYK2EqVCtsKnllK2MqamUsb1s4XT1zKnhlK2EqbmUrbCpKK2MqTWUsb1sxMl09cypmZSthKmxlK2wqYWUrYypGZSxvWzFdPXUqZWUrZCp2ZStwKmhlK2gqbWUsb1s1XT11KlgrZCpUK3AqeWUraCpqZSxvWzldPXUqeGUrZCpuZStwKkoraCpNZSxvWzEzXT11KmZlK2QqbGUrcCphZStoKkZlLG9bMl09ZiplZSttKnZlK0MqaGUrXyptZSxvWzZdPWYqWCttKlQrQyp5ZStfKmplLG9bMTBdPWYqeGUrbSpuZStDKkorXypNZSxvWzE0XT1mKmZlK20qbGUrQyphZStfKkZlLG9bM109eSplZStJKnZlK0EqaGUrTyptZSxvWzddPXkqWCtJKlQrQSp5ZStPKmplLG9bMTFdPXkqeGUrSSpuZStBKkorTypNZSxvWzE1XT15KmZlK0kqbGUrQSphZStPKkZlLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGQ9dFs2XSxwPXRbMTBdLGg9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqZC1yKmMqZC1vKmEqcCtpKmMqcCtyKmEqaC1pKmwqaCkrdFs3XSooK2UqbCpoLWUqYypwK28qcypwLXIqcypoK3IqYyp1LW8qbCp1KSt0WzExXSooK2UqYypkLWUqYSpoLW8qcypkK2kqcypoK28qYSp1LWkqYyp1KSt0WzE1XSooLXIqYSp1LWUqbCpkK2UqYSpwK3IqcypkLWkqcypwK2kqbCp1KX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGY9dFsxMl0sbT10WzEzXSxDPXRbMTRdLF89dFsxNV0seT1kKkMqYy1tKnAqYyttKmwqaC1hKkMqaC1kKmwqXythKnAqXyxJPWYqcCpjLXUqQypjLWYqbCpoK3MqQypoK3UqbCpfLXMqcCpfLEE9dSptKmMtZipkKmMrZiphKmgtcyptKmgtdSphKl8rcypkKl8sTz1mKmQqbC11Km0qbC1mKmEqcCtzKm0qcCt1KmEqQy1zKmQqQyxlZT1lKnkraSpJK3IqQStvKk87aWYoMD09PWVlKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgWD0xL2VlO3JldHVybiB0WzBdPXkqWCx0WzFdPShtKnAqby1kKkMqby1tKnIqaCtpKkMqaCtkKnIqXy1pKnAqXykqWCx0WzJdPShhKkMqby1tKmwqbyttKnIqYy1pKkMqYy1hKnIqXytpKmwqXykqWCx0WzNdPShkKmwqby1hKnAqby1kKnIqYytpKnAqYythKnIqaC1pKmwqaCkqWCx0WzRdPUkqWCx0WzVdPSh1KkMqby1mKnAqbytmKnIqaC1lKkMqaC11KnIqXytlKnAqXykqWCx0WzZdPShmKmwqby1zKkMqby1mKnIqYytlKkMqYytzKnIqXy1lKmwqXykqWCx0WzddPShzKnAqby11Kmwqbyt1KnIqYy1lKnAqYy1zKnIqaCtlKmwqaCkqWCx0WzhdPUEqWCx0WzldPShmKmQqby11Km0qby1mKmkqaCtlKm0qaCt1KmkqXy1lKmQqXykqWCx0WzEwXT0ocyptKm8tZiphKm8rZippKmMtZSptKmMtcyppKl8rZSphKl8pKlgsdFsxMV09KHUqYSpvLXMqZCpvLXUqaSpjK2UqZCpjK3MqaSpoLWUqYSpoKSpYLHRbMTJdPU8qWCx0WzEzXT0odSptKnItZipkKnIrZippKnAtZSptKnAtdSppKkMrZSpkKkMpKlgsdFsxNF09KGYqYSpyLXMqbSpyLWYqaSpsK2UqbSpsK3MqaSpDLWUqYSpDKSpYLHRbMTVdPShzKmQqci11KmEqcit1KmkqbC1lKmQqbC1zKmkqcCtlKmEqcCkqWCx0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyx1PW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCx1KmEraSx1KmwtcipzLDAsYypsLXIqYSx1KmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyx1PXMrcyxkPWErYSxwPW8qYyxoPW8qdSxmPW8qZCxtPXMqdSxDPXMqZCxfPWEqZCx5PWwqYyxJPWwqdSxBPWwqZCxPPWkueCxlZT1pLnksWD1pLno7cmV0dXJuIHJbMF09KDEtKG0rXykpKk8sclsxXT0oaCtBKSpPLHJbMl09KGYtSSkqTyxyWzNdPTAscls0XT0oaC1BKSplZSxyWzVdPSgxLShwK18pKSplZSxyWzZdPShDK3kpKmVlLHJbN109MCxyWzhdPShmK0kpKlgscls5XT0oQy15KSpYLHJbMTBdPSgxLShwK20pKSpYLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPVd2LnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCkscz1Xdi5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9V3Yuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxSYy5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvcyxkPTEvYTtyZXR1cm4gUmMuZWxlbWVudHNbMF0qPWMsUmMuZWxlbWVudHNbMV0qPWMsUmMuZWxlbWVudHNbMl0qPWMsUmMuZWxlbWVudHNbNF0qPXUsUmMuZWxlbWVudHNbNV0qPXUsUmMuZWxlbWVudHNbNl0qPXUsUmMuZWxlbWVudHNbOF0qPWQsUmMuZWxlbWVudHNbOV0qPWQsUmMuZWxlbWVudHNbMTBdKj1kLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJjKSxpLng9byxpLnk9cyxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLG8scyl7dm9pZCAwPT09cyYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxjPTIqby8oaS1yKSx1PShlK3QpLyhlLXQpLGQ9KGkrcikvKGktcikscD0tKHMrbykvKHMtbyksaD0tMipzKm8vKHMtbyk7cmV0dXJuIGFbMF09MipvLyhlLXQpLGFbNF09MCxhWzhdPXUsYVsxMl09MCxhWzFdPTAsYVs1XT1jLGFbOV09ZCxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09cCxhWzE0XT1oLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLGkscixvLHMpe2xldCBhPXRoaXMuZWxlbWVudHMsbD0xLyhlLXQpLGM9MS8oaS1yKSx1PTEvKHMtbyksZD0oZSt0KSpsLHA9KGkrcikqYyxoPShzK28pKnU7cmV0dXJuIGFbMF09MipsLGFbNF09MCxhWzhdPTAsYVsxMl09LWQsYVsxXT0wLGFbNV09MipjLGFbOV09MCxhWzEzXT0tcCxhWzJdPTAsYVs2XT0wLGFbMTBdPS0yKnUsYVsxNF09LWgsYVszXT0wLGFbN109MCxhWzExXT0wLGFbMTVdPTEsdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjwxNjtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDE2O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdFtlKzldPWlbOV0sdFtlKzEwXT1pWzEwXSx0W2UrMTFdPWlbMTFdLHRbZSsxMl09aVsxMl0sdFtlKzEzXT1pWzEzXSx0W2UrMTRdPWlbMTRdLHRbZSsxNV09aVsxNV0sdH19O01uLnByb3RvdHlwZS5pc01hdHJpeDQ9ITA7dmFyIFd2PW5ldyAkLFJjPW5ldyBNbixSNWU9bmV3ICQoMCwwLDApLE81ZT1uZXcgJCgxLDEsMSksdmg9bmV3ICQsVlI9bmV3ICQsUWE9bmV3ICQsYWFlPW5ldyBNbixsYWU9bmV3IENzLFBoPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9UGguRGVmYXVsdE9yZGVyKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX29yZGVyKX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQuX3gsdGhpcy5feT10Ll95LHRoaXMuX3o9dC5feix0aGlzLl9vcmRlcj10Ll9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCxlPXRoaXMuX29yZGVyLGk9ITApe2xldCByPXQuZWxlbWVudHMsbz1yWzBdLHM9cls0XSxhPXJbOF0sbD1yWzFdLGM9cls1XSx1PXJbOV0sZD1yWzJdLHA9cls2XSxoPXJbMTBdO3N3aXRjaChlKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4oX2EoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxoKSx0aGlzLl96PU1hdGguYXRhbjIoLXMsbykpOih0aGlzLl94PU1hdGguYXRhbjIocCxjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtX2EodSwtMSwxKSksTWF0aC5hYnModSk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMihhLGgpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGMpKToodGhpcy5feT1NYXRoLmF0YW4yKC1kLG8pLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9TWF0aC5hc2luKF9hKHAsLTEsMSkpLE1hdGguYWJzKHApPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLWQsaCksdGhpcy5fej1NYXRoLmF0YW4yKC1zLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLV9hKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxoKSx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLXMsYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihfYShsLC0xLDEpKSxNYXRoLmFicyhsKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGMpLHRoaXMuX3k9TWF0aC5hdGFuMigtZCxvKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoYSxoKSk7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3o9TWF0aC5hc2luKC1fYShzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5feT1NYXRoLmF0YW4yKGEsbykpOih0aGlzLl94PU1hdGguYXRhbjIoLXUsaCksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLCEwPT09aSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLGkpe3JldHVybiBhYWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoYWFlLGUsaSl9c2V0RnJvbVZlY3RvcjModCxlPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5zZXQodC54LHQueSx0LnosZSl9cmVvcmRlcih0KXtyZXR1cm4gbGFlLnNldEZyb21FdWxlcih0aGlzKSx0aGlzLnNldEZyb21RdWF0ZXJuaW9uKGxhZSx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx2b2lkIDAhPT10WzNdJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyAkKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07UGgucHJvdG90eXBlLmlzRXVsZXI9ITAsUGguRGVmYXVsdE9yZGVyPSJYWVoiLFBoLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIF8yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxrNWU9MCxjYWU9bmV3ICQscXY9bmV3IENzLE5kPW5ldyBNbixIUj1uZXcgJCxsTT1uZXcgJCxGNWU9bmV3ICQsTjVlPW5ldyBDcyx1YWU9bmV3ICQoMSwwLDApLGRhZT1uZXcgJCgwLDEsMCkscGFlPW5ldyAkKDAsMCwxKSxMNWU9e3R5cGU6ImFkZGVkIn0saGFlPXt0eXBlOiJyZW1vdmVkIn0sR2k9Y2xhc3MgZXh0ZW5kcyBIZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6azVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJPYmplY3QzRCIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMudXA9R2kuRGVmYXVsdFVwLmNsb25lKCk7bGV0IHQ9bmV3ICQsZT1uZXcgUGgsaT1uZXcgQ3Mscj1uZXcgJCgxLDEsMSk7ZS5fb25DaGFuZ2UoZnVuY3Rpb24oKXtpLnNldEZyb21FdWxlcihlLCExKX0pLGkuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBNbn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgUG99fSksdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMubWF0cml4V29ybGQ9bmV3IE1uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT1HaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IF8yLHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319b25CZWZvcmVSZW5kZXIoKXt9b25BZnRlclJlbmRlcigpe31hcHBseU1hdHJpeDQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX1hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0KSx0aGlzfXNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZSh0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9c2V0Um90YXRpb25Gcm9tRXVsZXIodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX1zZXRSb3RhdGlvbkZyb21NYXRyaXgodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KX1zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfXJvdGF0ZU9uQXhpcyh0LGUpe3JldHVybiBxdi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KHF2KSx0aGlzfXJvdGF0ZU9uV29ybGRBeGlzKHQsZSl7cmV0dXJuIHF2LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXModWFlLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGRhZSx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhwYWUsdCl9dHJhbnNsYXRlT25BeGlzKHQsZSl7cmV0dXJuIGNhZS5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGNhZS5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1YWUsdCl9dHJhbnNsYXRlWSh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoZGFlLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHBhZSx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9IUi5jb3B5KHQpOkhSLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksbE0uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9OZC5sb29rQXQobE0sSFIsdGhpcy51cCk6TmQubG9va0F0KEhSLGxNLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoTmQpLHImJihOZC5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCkscXYuc2V0RnJvbVJvdGF0aW9uTWF0cml4KE5kKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChMNWUpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7cmV0dXJuIHRoaXN9bGV0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoaGFlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIG51bGwhPT10JiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCBlPXRoaXMuY2hpbGRyZW5bdF07ZS5wYXJlbnQ9bnVsbCxlLmRpc3BhdGNoRXZlbnQoaGFlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChOZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSx0LEY1ZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSxONWUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksdT1zKHQuaW1hZ2VzKSxkPXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksaD1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGQubGVuZ3RoPjAmJihpLnNoYXBlcz1kKSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksaC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1oKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07R2kuRGVmYXVsdFVwPW5ldyAkKDAsMSwwKSxHaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMCxHaS5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgT2M9bmV3ICQsTGQ9bmV3ICQsSzQ9bmV3ICQsQmQ9bmV3ICQsWXY9bmV3ICQsWHY9bmV3ICQsZmFlPW5ldyAkLFo0PW5ldyAkLEo0PW5ldyAkLCQ0PW5ldyAkLEtyPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLE9jLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKE9jKTtsZXQgbz1yLmxlbmd0aFNxKCk7cmV0dXJuIG8+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KG8pKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLG8pe09jLnN1YlZlY3RvcnMocixlKSxMZC5zdWJWZWN0b3JzKGksZSksSzQuc3ViVmVjdG9ycyh0LGUpO2xldCBzPU9jLmRvdChPYyksYT1PYy5kb3QoTGQpLGw9T2MuZG90KEs0KSxjPUxkLmRvdChMZCksdT1MZC5kb3QoSzQpLGQ9cypjLWEqYTtpZigwPT09ZClyZXR1cm4gby5zZXQoLTIsLTEsLTEpO2xldCBwPTEvZCxoPShjKmwtYSp1KSpwLGY9KHMqdS1hKmwpKnA7cmV0dXJuIG8uc2V0KDEtaC1mLGYsaCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsQmQpLEJkLng+PTAmJkJkLnk+PTAmJkJkLngrQmQueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixCZCksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihvLEJkLngpLGwuYWRkU2NhbGVkVmVjdG9yKHMsQmQueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxCZC56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBPYy5zdWJWZWN0b3JzKGksZSksTGQuc3ViVmVjdG9ycyh0LGUpLE9jLmNyb3NzKExkKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBPYy5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLExkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksLjUqT2MuY3Jvc3MoTGQpLmxlbmd0aCgpfWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIEtyLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiBLci5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlKX1nZXRVVih0LGUsaSxyLG8pe3JldHVybiBLci5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsaSxyLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIEtyLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gS3IuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7bGV0IHMsYSxpPXRoaXMuYSxyPXRoaXMuYixvPXRoaXMuYztZdi5zdWJWZWN0b3JzKHIsaSksWHYuc3ViVmVjdG9ycyhvLGkpLFo0LnN1YlZlY3RvcnModCxpKTtsZXQgbD1Zdi5kb3QoWjQpLGM9WHYuZG90KFo0KTtpZihsPD0wJiZjPD0wKXJldHVybiBlLmNvcHkoaSk7SjQuc3ViVmVjdG9ycyh0LHIpO2xldCB1PVl2LmRvdChKNCksZD1Ydi5kb3QoSjQpO2lmKHU+PTAmJmQ8PXUpcmV0dXJuIGUuY29weShyKTtsZXQgcD1sKmQtdSpjO2lmKHA8PTAmJmw+PTAmJnU8PTApcmV0dXJuIHM9bC8obC11KSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpOyQ0LnN1YlZlY3RvcnModCxvKTtsZXQgaD1Zdi5kb3QoJDQpLGY9WHYuZG90KCQ0KTtpZihmPj0wJiZoPD1mKXJldHVybiBlLmNvcHkobyk7bGV0IG09aCpjLWwqZjtpZihtPD0wJiZjPj0wJiZmPD0wKXJldHVybiBhPWMvKGMtZiksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihYdixhKTtsZXQgQz11KmYtaCpkO2lmKEM8PTAmJmQtdT49MCYmaC1mPj0wKXJldHVybiBmYWUuc3ViVmVjdG9ycyhvLHIpLGE9KGQtdSkvKGQtdSsoaC1mKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihmYWUsYSk7bGV0IF89MS8oQyttK3ApO3JldHVybiBzPW0qXyxhPXAqXyxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpLmFkZFNjYWxlZFZlY3RvcihYdixhKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxCNWU9MCxYbz1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpCNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPTEsdGhpcy5zaWRlPTAsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPTIwNCx0aGlzLmJsZW5kRHN0PTIwNSx0aGlzLmJsZW5kRXF1YXRpb249MTAwLHRoaXMuYmxlbmRTcmNBbHBoYT1udWxsLHRoaXMuYmxlbmREc3RBbHBoYT1udWxsLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPW51bGwsdGhpcy5kZXB0aEZ1bmM9Myx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD03NjgwLHRoaXMuc3RlbmNpbFpGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWlBhc3M9NzY4MCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih2b2lkIDAhPT10KWZvcihsZXQgZSBpbiB0KXtsZXQgaT10W2VdO2lmKHZvaWQgMD09PWkpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1pO2NvbnRpbnVlfWxldCByPXRoaXNbZV07dm9pZCAwIT09cj9yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWk6Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2Z1bmN0aW9uIHIobyl7bGV0IHM9W107Zm9yKGxldCBhIGluIG8pe2xldCBsPW9bYV07ZGVsZXRlIGwubWV0YWRhdGEscy5wdXNoKGwpfXJldHVybiBzfWlmKGkudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdm9pZCAwIT09dGhpcy5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdm9pZCAwIT09dGhpcy5zaGVlbiYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hlZW5Sb3VnaG5lc3MmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zcGVjdWxhckludGVuc2l0eSYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0JiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx2b2lkIDAhPT10aGlzLmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10aGlzLnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10aGlzLnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy50cmFuc21pc3Npb24mJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRoaWNrbmVzcyYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25Db2xvciYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2l6ZSYmKGkuc2l6ZT10aGlzLnNpemUpLG51bGwhPT10aGlzLnNoYWRvd1NpZGUmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSwxIT09dGhpcy5ibGVuZGluZyYmKGkuYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksMCE9PXRoaXMuc2lkZSYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksITA9PT10aGlzLnRyYW5zcGFyZW50JiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiYwIT09dGhpcy5yb3RhdGlvbiYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJihpLnBvbHlnb25PZmZzZXQ9ITApLDAhPT10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3ImJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJjEhPT10aGlzLmxpbmV3aWR0aCYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx2b2lkIDAhPT10aGlzLmRhc2hTaXplJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx2b2lkIDAhPT10aGlzLmdhcFNpemUmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx2b2lkIDAhPT10aGlzLnNjYWxlJiYoaS5zY2FsZT10aGlzLnNjYWxlKSwhMD09PXRoaXMuZGl0aGVyaW5nJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksITA9PT10aGlzLmFscGhhVG9Db3ZlcmFnZSYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSwhMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLCEwPT09dGhpcy53aXJlZnJhbWUmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLCEwPT09dGhpcy5mbGF0U2hhZGluZyYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksITE9PT10aGlzLnZpc2libGUmJihpLnZpc2libGU9ITEpLCExPT09dGhpcy50b25lTWFwcGVkJiYoaS50b25lTWFwcGVkPSExKSwie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGUpe2xldCBvPXIodC50ZXh0dXJlcykscz1yKHQuaW1hZ2VzKTtvLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1vKSxzLmxlbmd0aD4wJiYoaS5pbWFnZXM9cyl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgZT10LmNsaXBwaW5nUGxhbmVzLGk9bnVsbDtpZihudWxsIT09ZSl7bGV0IHI9ZS5sZW5ndGg7aT1uZXcgQXJyYXkocik7Zm9yKGxldCBvPTA7byE9PXI7KytvKWlbb109ZVtvXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPWksdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O1hvLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBLbT1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtLbS5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgZnI9bmV3ICQsVVI9bmV3IEplLExyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9TU0sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgYW4pLGVbaSsrXT1zLnIsZVtpKytdPXMuZyxlW2krK109cy5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgSmUpLGVbaSsrXT1zLngsZVtpKytdPXMueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3ICQpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgdHIpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56LGVbaSsrXT1zLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKDI9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKVVSLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxVUi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLFVSLngsVVIueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksZnIuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsZnIueCxmci55LGZyLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci54PXRoaXMuZ2V0WChlKSxmci55PXRoaXMuZ2V0WShlKSxmci56PXRoaXMuZ2V0WihlKSxmci5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspZnIueD10aGlzLmdldFgoZSksZnIueT10aGlzLmdldFkoZSksZnIuej10aGlzLmdldFooZSksZnIuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWZyLng9dGhpcy5nZXRYKGUpLGZyLnk9dGhpcy5nZXRZKGUpLGZyLno9dGhpcy5nZXRaKGUpLGZyLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLGZyLngsZnIueSxmci56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIsbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PU1NJiYodC51c2FnZT10aGlzLnVzYWdlKSwoMCE9PXRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0fHwtMSE9PXRoaXMudXBkYXRlUmFuZ2UuY291bnQpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07THIucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciB2Mj1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19LHkyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxlLGkpfX07KGNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0pLnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19LFY1ZT0wLGtsPW5ldyBNbixlVT1uZXcgR2ksUXY9bmV3ICQsS2E9bmV3IEphLGNNPW5ldyBKYSxZbz1uZXcgJCxLaT1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpWNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhtbGUodCk/eTI6djIpKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgUG8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31yb3RhdGVZKHQpe3JldHVybiBrbC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGtsKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIGtsLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4ga2wubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIGtsLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9bG9va0F0KHQpe3JldHVybiBlVS5sb29rQXQodCksZVUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoZVUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKFF2KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShRdi54LFF2LnksUXYueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgSmEpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3ICQoLTEvMCwtMS8wLC0xLzApLG5ldyAkKDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKUthLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtpXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixLYS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbyksWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxLYS5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgQWgpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3ICQsMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihLYS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAscz1lLmxlbmd0aDtvPHM7bysrKWNNLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyhLYS5taW4sY00ubWluKSxLYS5leHBhbmRCeVBvaW50KFlvKSxZby5hZGRWZWN0b3JzKEthLm1heCxjTS5tYXgpLEthLmV4cGFuZEJ5UG9pbnQoWW8pKTooS2EuZXhwYW5kQnlQb2ludChjTS5taW4pLEthLmV4cGFuZEJ5UG9pbnQoY00ubWF4KSk7S2EuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10LmNvdW50O288cztvKyspWW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSk7aWYoZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspe2xldCBhPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9YS5jb3VudDtjPHU7YysrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxsJiYoUXYuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLFlvLmFkZChRdikpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXkscz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgTHIobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgdmU9MDt2ZTxhO3ZlKyspY1t2ZV09bmV3ICQsdVt2ZV09bmV3ICQ7bGV0IGQ9bmV3ICQscD1uZXcgJCxoPW5ldyAkLGY9bmV3IEplLG09bmV3IEplLEM9bmV3IEplLF89bmV3ICQseT1uZXcgJDtmdW5jdGlvbiBJKHZlLFQsbmUpe2QuZnJvbUFycmF5KHIsMyp2ZSkscC5mcm9tQXJyYXkociwzKlQpLGguZnJvbUFycmF5KHIsMypuZSksZi5mcm9tQXJyYXkocywyKnZlKSxtLmZyb21BcnJheShzLDIqVCksQy5mcm9tQXJyYXkocywyKm5lKSxwLnN1YihkKSxoLnN1YihkKSxtLnN1YihmKSxDLnN1YihmKTtsZXQgbGU9MS8obS54KkMueS1DLngqbS55KTshaXNGaW5pdGUobGUpfHwoXy5jb3B5KHApLm11bHRpcGx5U2NhbGFyKEMueSkuYWRkU2NhbGVkVmVjdG9yKGgsLW0ueSkubXVsdGlwbHlTY2FsYXIobGUpLHkuY29weShoKS5tdWx0aXBseVNjYWxhcihtLngpLmFkZFNjYWxlZFZlY3RvcihwLC1DLngpLm11bHRpcGx5U2NhbGFyKGxlKSxjW3ZlXS5hZGQoXyksY1tUXS5hZGQoXyksY1tuZV0uYWRkKF8pLHVbdmVdLmFkZCh5KSx1W1RdLmFkZCh5KSx1W25lXS5hZGQoeSkpfWxldCBBPXRoaXMuZ3JvdXBzOzA9PT1BLmxlbmd0aCYmKEE9W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgdmU9MCxUPUEubGVuZ3RoO3ZlPFQ7Kyt2ZSl7bGV0IG5lPUFbdmVdLGxlPW5lLnN0YXJ0O2ZvcihsZXQgeWU9bGUsSj1sZStuZS5jb3VudDt5ZTxKO3llKz0zKUkoaVt5ZSswXSxpW3llKzFdLGlbeWUrMl0pfWxldCBPPW5ldyAkLGVlPW5ldyAkLFg9bmV3ICQseGU9bmV3ICQ7ZnVuY3Rpb24gZmUodmUpe1guZnJvbUFycmF5KG8sMyp2ZSkseGUuY29weShYKTtsZXQgVD1jW3ZlXTtPLmNvcHkoVCksTy5zdWIoWC5tdWx0aXBseVNjYWxhcihYLmRvdChUKSkpLm5vcm1hbGl6ZSgpLGVlLmNyb3NzVmVjdG9ycyh4ZSxUKTtsZXQgbGU9ZWUuZG90KHVbdmVdKTwwPy0xOjE7bFs0KnZlXT1PLngsbFs0KnZlKzFdPU8ueSxsWzQqdmUrMl09Ty56LGxbNCp2ZSszXT1sZX1mb3IobGV0IHZlPTAsVD1BLmxlbmd0aDt2ZTxUOysrdmUpe2xldCBuZT1BW3ZlXSxsZT1uZS5zdGFydDtmb3IobGV0IHllPWxlLEo9bGUrbmUuY291bnQ7eWU8Sjt5ZSs9MylmZShpW3llKzBdKSxmZShpW3llKzFdKSxmZShpW3llKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgTHIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsaD1pLmNvdW50O3A8aDtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3ICQsbz1uZXcgJCxzPW5ldyAkLGE9bmV3ICQsbD1uZXcgJCxjPW5ldyAkLHU9bmV3ICQsZD1uZXcgJDtpZih0KWZvcihsZXQgcD0wLGg9dC5jb3VudDtwPGg7cCs9Myl7bGV0IGY9dC5nZXRYKHArMCksbT10LmdldFgocCsxKSxDPXQuZ2V0WChwKzIpO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLEMpLHUuc3ViVmVjdG9ycyhzLG8pLGQuc3ViVmVjdG9ycyhyLG8pLHUuY3Jvc3MoZCksYS5mcm9tQnVmZmVyQXR0cmlidXRlKGksZiksbC5mcm9tQnVmZmVyQXR0cmlidXRlKGksbSksYy5mcm9tQnVmZmVyQXR0cmlidXRlKGksQyksYS5hZGQodSksbC5hZGQodSksYy5hZGQodSksaS5zZXRYWVooZixhLngsYS55LGEueiksaS5zZXRYWVoobSxsLngsbC55LGwueiksaS5zZXRYWVooQyxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IHA9MCxoPWUuY291bnQ7cDxoO3ArPTMpci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzEpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMiksdS5zdWJWZWN0b3JzKHMsbyksZC5zdWJWZWN0b3JzKHIsbyksdS5jcm9zcyhkKSxpLnNldFhZWihwKzAsdS54LHUueSx1LnopLGkuc2V0WFlaKHArMSx1LngsdS55LHUueiksaS5zZXRYWVoocCsyLHUueCx1LnksdS56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxpLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgciBpbiBpKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbcl0pY29udGludWU7bGV0IHM9aVtyXS5hcnJheSxhPXQuYXR0cmlidXRlc1tyXSxsPWEuYXJyYXksYz1hLml0ZW1TaXplKmUsdT1NYXRoLm1pbihsLmxlbmd0aCxzLmxlbmd0aC1jKTtmb3IobGV0IGQ9MCxwPWM7ZDx1O2QrKyxwKyspc1twXT1sW2RdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLGk9dC5jb3VudDtlPGk7ZSsrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxZby5ub3JtYWxpemUoKSx0LnNldFhZWihlLFlvLngsWW8ueSxZby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KGEsbCl7bGV0IGM9YS5hcnJheSx1PWEuaXRlbVNpemUsZD1hLm5vcm1hbGl6ZWQscD1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCp1KSxoPTAsZj0wO2ZvcihsZXQgbT0wLEM9bC5sZW5ndGg7bTxDO20rKyl7aD1hLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bFttXSphLmRhdGEuc3RyaWRlK2Eub2Zmc2V0OmxbbV0qdTtmb3IobGV0IF89MDtfPHU7XysrKXBbZisrXT1jW2grK119cmV0dXJuIG5ldyBMcihwLHUsZCl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgS2ksaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgYz10KHJbYV0saSk7ZS5zZXRBdHRyaWJ1dGUoYSxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGEgaW4gbyl7bGV0IGw9W10sYz1vW2FdO2ZvcihsZXQgdT0wLGQ9Yy5sZW5ndGg7dTxkO3UrKyl7bGV0IGg9dChjW3VdLGkpO2wucHVzaChoKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgcz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2E8bDthKyspe2xldCBjPXNbYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpdm9pZCAwIT09bFtjXSYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl0LmRhdGEuYXR0cmlidXRlc1tsXT1pW2xdLnRvSlNPTih0LmRhdGEpO2xldCByPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgZD0wLHA9Yy5sZW5ndGg7ZDxwO2QrKyl1LnB1c2goY1tkXS50b0pTT04odC5kYXRhKSk7dS5sZW5ndGg+MCYmKHJbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgcz10aGlzLmdyb3VwcztzLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMpKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWEmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7bnVsbCE9PWkmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXRoaXMuc2V0QXR0cmlidXRlKGMscltjXS5jbG9uZShlKSk7bGV0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIG8pe2xldCB1PVtdLGQ9b1tjXTtmb3IobGV0IHA9MCxoPWQubGVuZ3RoO3A8aDtwKyspdS5wdXNoKGRbcF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPXV9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrKyl7bGV0IGQ9c1tjXTt0aGlzLmFkZEdyb3VwKGQuc3RhcnQsZC5jb3VudCxkLm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7bnVsbCE9PWEmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHZvaWQgMCE9PXQucGFyYW1ldGVycyYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O0tpLnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBtYWU9bmV3IE1uLEt2PW5ldyBJaCx0VT1uZXcgQWgseWg9bmV3ICQsYmg9bmV3ICQseGg9bmV3ICQsblU9bmV3ICQsaVU9bmV3ICQsclU9bmV3ICQselI9bmV3ICQsalI9bmV3ICQsR1I9bmV3ICQsV1I9bmV3IEplLHFSPW5ldyBKZSxZUj1uZXcgSmUsb1U9bmV3ICQsWFI9bmV3ICQseW89Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBLbSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgcyxpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdGVyaWFsLG89dGhpcy5tYXRyaXhXb3JsZDtpZih2b2lkIDAhPT1yJiYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdFUuY29weShpLmJvdW5kaW5nU3BoZXJlKSx0VS5hcHBseU1hdHJpeDQobyksITEhPT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKHRVKSkmJihtYWUuY29weShvKS5pbnZlcnQoKSxLdi5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQobWFlKSxudWxsPT09aS5ib3VuZGluZ0JveHx8ITEhPT1Ldi5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpKSlpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsZD1pLmF0dHJpYnV0ZXMudXYscD1pLmF0dHJpYnV0ZXMudXYyLGg9aS5ncm91cHMsZj1pLmRyYXdSYW5nZTtpZihudWxsIT09YSlpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbT0wLEM9aC5sZW5ndGg7bTxDO20rKyl7bGV0IF89aFttXSx5PXJbXy5tYXRlcmlhbEluZGV4XTtmb3IobGV0IE89TWF0aC5tYXgoXy5zdGFydCxmLnN0YXJ0KSxlZT1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKF8uc3RhcnQrXy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtPPGVlO08rPTMpe2xldCBYPWEuZ2V0WChPKSx4ZT1hLmdldFgoTysxKSxmZT1hLmdldFgoTysyKTtzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxYLHhlLGZlKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihPLzMpLHMuZmFjZS5tYXRlcmlhbEluZGV4PV8ubWF0ZXJpYWxJbmRleCxlLnB1c2gocykpfX1lbHNlIGZvcihsZXQgXz1NYXRoLm1heCgwLGYuc3RhcnQpLHk9TWF0aC5taW4oYS5jb3VudCxmLnN0YXJ0K2YuY291bnQpO188eTtfKz0zKXtsZXQgST1hLmdldFgoXyksQT1hLmdldFgoXysxKSxPPWEuZ2V0WChfKzIpO3M9UVIodGhpcyxyLHQsS3YsbCxjLHUsZCxwLEksQSxPKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihfLzMpLGUucHVzaChzKSl9ZWxzZSBpZih2b2lkIDAhPT1sKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBtPTAsQz1oLmxlbmd0aDttPEM7bSsrKXtsZXQgXz1oW21dLHk9cltfLm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgTz1NYXRoLm1heChfLnN0YXJ0LGYuc3RhcnQpLGVlPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oXy5zdGFydCtfLmNvdW50LGYuc3RhcnQrZi5jb3VudCkpO088ZWU7Tys9MylzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxPLE8rMSxPKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKE8vMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Xy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IF89TWF0aC5tYXgoMCxmLnN0YXJ0KSx5PU1hdGgubWluKGwuY291bnQsZi5zdGFydCtmLmNvdW50KTtfPHk7Xys9MylzPVFSKHRoaXMscix0LEt2LGwsYyx1LGQscCxfLF8rMSxfKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKF8vMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIFFSKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkKXt5aC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksYmguZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLHhoLmZyb21CdWZmZXJBdHRyaWJ1dGUocixkKTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXt6Ui5zZXQoMCwwLDApLGpSLnNldCgwLDAsMCksR1Iuc2V0KDAsMCwwKTtmb3IobGV0IGY9MCxtPW8ubGVuZ3RoO2Y8bTtmKyspe2xldCBDPXBbZl0sXz1vW2ZdOzAhPT1DJiYoblUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGMpLGlVLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyx1KSxyVS5mcm9tQnVmZmVyQXR0cmlidXRlKF8sZCkscz8oelIuYWRkU2NhbGVkVmVjdG9yKG5VLEMpLGpSLmFkZFNjYWxlZFZlY3RvcihpVSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUsQykpOih6Ui5hZGRTY2FsZWRWZWN0b3IoblUuc3ViKHloKSxDKSxqUi5hZGRTY2FsZWRWZWN0b3IoaVUuc3ViKGJoKSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUuc3ViKHhoKSxDKSkpfXloLmFkZCh6UiksYmguYWRkKGpSKSx4aC5hZGQoR1IpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLHloKSxuLmJvbmVUcmFuc2Zvcm0odSxiaCksbi5ib25lVHJhbnNmb3JtKGQseGgpKTtsZXQgaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9MT09PXQuc2lkZT9pLmludGVyc2VjdFRyaWFuZ2xlKHMsbyxyLCEwLGEpOmkuaW50ZXJzZWN0VHJpYW5nbGUocixvLHMsMiE9PXQuc2lkZSxhKSxudWxsPT09bClyZXR1cm4gbnVsbDtYUi5jb3B5KGEpLFhSLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhYUik7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6WFIuY2xvbmUoKSxvYmplY3Q6bn19KG4sdCxlLGkseWgsYmgseGgsb1UpO2lmKGgpe2EmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxkKSxoLnV2PUtyLmdldFVWKG9VLHloLGJoLHhoLFdSLHFSLFlSLG5ldyBKZSkpLGwmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxkKSxoLnV2Mj1Lci5nZXRVVihvVSx5aCxiaCx4aCxXUixxUixZUixuZXcgSmUpKTtsZXQgZj17YTpjLGI6dSxjOmQsbm9ybWFsOm5ldyAkLG1hdGVyaWFsSW5kZXg6MH07S3IuZ2V0Tm9ybWFsKHloLGJoLHhoLGYubm9ybWFsKSxoLmZhY2U9Zn1yZXR1cm4gaH15by5wcm90b3R5cGUuaXNNZXNoPSEwO3ZhciBabT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxvPTEscz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6c307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iociksbz1NYXRoLmZsb29yKG8pLHM9TWF0aC5mbG9vcihzKTtsZXQgbD1bXSxjPVtdLHU9W10sZD1bXSxwPTAsaD0wO2Z1bmN0aW9uIGYobSxDLF8seSxJLEEsTyxlZSxYLHhlLGZlKXtsZXQgdmU9QS9YLFQ9Ty94ZSxuZT1BLzIsbGU9Ty8yLGhlPWVlLzIseWU9WCsxLEo9eGUrMSxhZT0wLG1lPTAsamU9bmV3ICQ7Zm9yKGxldCBNZT0wO01lPEo7TWUrKyl7bGV0IEZlPU1lKlQtbGU7Zm9yKGxldCB1dD0wO3V0PHllO3V0KyspamVbbV09KHV0KnZlLW5lKSp5LGplW0NdPUZlKkksamVbX109aGUsYy5wdXNoKGplLngsamUueSxqZS56KSxqZVttXT0wLGplW0NdPTAsamVbX109ZWU+MD8xOi0xLHUucHVzaChqZS54LGplLnksamUueiksZC5wdXNoKHV0L1gpLGQucHVzaCgxLU1lL3hlKSxhZSs9MX1mb3IobGV0IE1lPTA7TWU8eGU7TWUrKylmb3IobGV0IEZlPTA7RmU8WDtGZSsrKXtsZXQgU3Q9cCtGZSt5ZSooTWUrMSksZ3Q9cCsoRmUrMSkreWUqKE1lKzEpLFJlPXArKEZlKzEpK3llKk1lO2wucHVzaChwK0ZlK3llKk1lLFN0LFJlKSxsLnB1c2goU3QsZ3QsUmUpLG1lKz02fWEuYWRkR3JvdXAoaCxtZSxmZSksaCs9bWUscCs9YWV9ZigieiIsInkiLCJ4IiwtMSwtMSxpLGUsdCxzLG8sMCksZigieiIsInkiLCJ4IiwxLC0xLGksZSwtdCxzLG8sMSksZigieCIsInoiLCJ5IiwxLDEsdCxpLGUscixzLDIpLGYoIngiLCJ6IiwieSIsMSwtMSx0LGksLWUscixzLDMpLGYoIngiLCJ5IiwieiIsMSwtMSx0LGUsaSxyLG8sNCksZigieCIsInkiLCJ6IiwtMSwtMSx0LGUsLWkscixvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKGQsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFptKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gZ3kobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07dFtlXVtpXT1yJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlfHxyLmlzUXVhdGVybmlvbik/ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOnJ9fXJldHVybiB0fWZ1bmN0aW9uIHlzKG4pe2xldCB0PXt9O2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1neShuW2VdKTtmb3IobGV0IHIgaW4gaSl0W3JdPWlbcl19cmV0dXJuIHR9dmFyIFU1ZT17Y2xvbmU6Z3ksbWVyZ2U6eXN9LHpkPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59Iix0aGlzLmZyYWdtZW50U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApO1xufSIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdm9pZCAwIT09dCYmKHZvaWQgMCE9PXQuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9Z3kodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgcz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO2UudW5pZm9ybXNbcl09cyYmcy5pc1RleHR1cmU/e3R5cGU6InQiLHZhbHVlOnMudG9KU09OKHQpLnV1aWR9OnMmJnMuaXNDb2xvcj97dHlwZToiYyIsdmFsdWU6cy5nZXRIZXgoKX06cyYmcy5pc1ZlY3RvcjI/e3R5cGU6InYyIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjM/e3R5cGU6InYzIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjQ/e3R5cGU6InY0Iix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTpzLnRvQXJyYXkoKX06e3ZhbHVlOnN9fU9iamVjdC5rZXlzKHRoaXMuZGVmaW5lcykubGVuZ3RoPjAmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKSxlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcixlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7bGV0IGk9e307Zm9yKGxldCByIGluIHRoaXMuZXh0ZW5zaW9ucykhMD09PXRoaXMuZXh0ZW5zaW9uc1tyXSYmKGlbcl09ITApO3JldHVybiBPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmKGUuZXh0ZW5zaW9ucz1pKSxlfX07emQucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWw9ITA7dmFyIFRNPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ2FtZXJhIix0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgTW4sdGhpcy5wcm9qZWN0aW9uTWF0cml4PW5ldyBNbix0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlPW5ldyBNbn1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHQubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLnByb2plY3Rpb25NYXRyaXguY29weSh0LnByb2plY3Rpb25NYXRyaXgpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSx0aGlzfWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KC1lWzhdLC1lWzldLC1lWzEwXSkubm9ybWFsaXplKCl9dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe3N1cGVyLnVwZGF0ZVdvcmxkTWF0cml4KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O1RNLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgeHM9Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj0yKndVKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKC41KkI0KnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiAyKndVKk1hdGguYXRhbihNYXRoLnRhbiguNSpCNCp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQsZSxpLHIsbyxzKXt0aGlzLmFzcGVjdD10L2UsbnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIsZT10Kk1hdGgudGFuKC41KkI0KnRoaXMuZm92KS90aGlzLnpvb20saT0yKmUscj10aGlzLmFzcGVjdCppLG89LS41KnIscz10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPXMuZnVsbFdpZHRoLGM9cy5mdWxsSGVpZ2h0O28rPXMub2Zmc2V0WCpyL2wsZS09cy5vZmZzZXRZKmkvYyxyKj1zLndpZHRoL2wsaSo9cy5oZWlnaHQvY31sZXQgYT10aGlzLmZpbG1PZmZzZXQ7MCE9PWEmJihvKz10KmEvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8rcixlLGUtaSx0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5mb3Y9dGhpcy5mb3YsZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLGUub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsZS5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZS5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLGUub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LGV9fTt4cy5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgRE09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLCEwIT09aS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTt0aGlzLnJlbmRlclRhcmdldD1pO2xldCByPW5ldyB4cyg5MCwxLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgJCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBvPW5ldyB4cyg5MCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgJCgtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgcz1uZXcgeHMoOTAsMSx0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsMCwxKSxzLmxvb2tBdChuZXcgJCgwLDEsMCkpLHRoaXMuYWRkKHMpO2xldCBhPW5ldyB4cyg5MCwxLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgJCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgeHMoOTAsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3ICQoMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgeHMoOTAsMSx0LGUpO2MubGF5ZXJzPXRoaXMubGF5ZXJzLGMudXAuc2V0KDAsLTEsMCksYy5sb29rQXQobmV3ICQoMCwwLC0xKSksdGhpcy5hZGQoYyl9dXBkYXRlKHQsZSl7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IGk9dGhpcy5yZW5kZXJUYXJnZXQsW3IsbyxzLGEsbCxjXT10aGlzLmNoaWxkcmVuLHU9dC54ci5lbmFibGVkLGQ9dC5nZXRSZW5kZXJUYXJnZXQoKTt0LnhyLmVuYWJsZWQ9ITE7bGV0IHA9aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExLHQuc2V0UmVuZGVyVGFyZ2V0KGksMCksdC5yZW5kZXIoZSxyKSx0LnNldFJlbmRlclRhcmdldChpLDEpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwyKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMyksdC5yZW5kZXIoZSxhKSx0LnNldFJlbmRlclRhcmdldChpLDQpLHQucmVuZGVyKGUsbCksaS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1wLHQuc2V0UmVuZGVyVGFyZ2V0KGksNSksdC5yZW5kZXIoZSxjKSx0LnNldFJlbmRlclRhcmdldChkKSx0LnhyLmVuYWJsZWQ9dSxpLnRleHR1cmUubmVlZHNQTVJFTVVwZGF0ZT0hMH19LF95PWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIodD12b2lkIDAhPT10P3Q6W10sZT12b2lkIDAhPT1lP2U6MzAxLGkscixvLHMsYSxsLGMsdSksdGhpcy5mbGlwWT0hMX1nZXQgaW1hZ2VzKCl7cmV0dXJuIHRoaXMuaW1hZ2V9c2V0IGltYWdlcyh0KXt0aGlzLmltYWdlPXR9fTtfeS5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMDt2YXIgYjI9Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApIiksZT1pKSxzdXBlcih0LHQsZSksdGhpcy50ZXh0dXJlPW5ldyBfeSh2b2lkIDAsKGU9ZXx8e30pLm1hcHBpbmcsZS53cmFwUyxlLndyYXBULGUubWFnRmlsdGVyLGUubWluRmlsdGVyLGUuZm9ybWF0LGUudHlwZSxlLmFuaXNvdHJvcHksZS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PWUuZ2VuZXJhdGVNaXBtYXBzJiZlLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWUubWluRmlsdGVyP2UubWluRmlsdGVyOmJzfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9enMsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGlfdW5pZm9ybXM9e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LGlfdmVydGV4U2hhZGVyPSJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsaV9mcmFnbWVudFNoYWRlcj0iXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHI9bmV3IFptKDUsNSw1KSxvPW5ldyB6ZCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6Z3koaV91bmlmb3JtcyksdmVydGV4U2hhZGVyOmlfdmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmlfZnJhZ21lbnRTaGFkZXIsc2lkZToxLGJsZW5kaW5nOjB9KTtvLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZT1lO2xldCBzPW5ldyB5byhyLG8pLGE9ZS5taW5GaWx0ZXI7cmV0dXJuIDEwMDg9PT1lLm1pbkZpbHRlciYmKGUubWluRmlsdGVyPWJzKSxuZXcgRE0oMSwxMCx0aGlzKS51cGRhdGUodCxzKSxlLm1pbkZpbHRlcj1hLHMuZ2VvbWV0cnkuZGlzcG9zZSgpLHMubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IHM9MDtzPDY7cysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMscyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtiMi5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIHNVPW5ldyAkLEc1ZT1uZXcgJCxXNWU9bmV3IFBvLGtjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9c1Uuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKEc1ZS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoc1UpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKDA9PT1yKXJldHVybiAwPT09dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCk/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gbzwwfHxvPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8VzVlLmdldE5vcm1hbE1hdHJpeCh0KSxyPXRoaXMuY29wbGFuYXJQb2ludChzVSkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1yLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O2tjLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciAkdj1uZXcgQWgsS1I9bmV3ICQsdnk9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcga2MsZT1uZXcga2MsaT1uZXcga2Mscj1uZXcga2Msbz1uZXcga2Mscz1uZXcga2Mpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGQ9aVs3XSxwPWlbOF0saD1pWzldLGY9aVsxMF0sbT1pWzExXSxDPWlbMTJdLF89aVsxM10seT1pWzE0XSxJPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGQtbCxtLXAsSS1DKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGQrbCxtK3AsSStDKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLGQrYyxtK2gsSStfKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLGQtYyxtLWgsSS1fKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLGQtdSxtLWYsSS15KS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLGQrdSxtK2YsSSt5KS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksJHYuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCR2KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiAkdi5jZW50ZXIuc2V0KDAsMCwwKSwkdi5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsJHYuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSgkdil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoS1IueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LEtSLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxLUi56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoS1IpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBnbGUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIHE1ZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgZD1pLmdldChjKTt2b2lkIDA9PT1kP2kuc2V0KGMsZnVuY3Rpb24oYyx1KXtsZXQgZD1jLmFycmF5LHA9Yy51c2FnZSxoPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsaCksbi5idWZmZXJEYXRhKHUsZCxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZj01MTI2O3JldHVybiBkIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Y9NTEyNjpkIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpkIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9mPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmY9NTEyMzpkIGluc3RhbmNlb2YgSW50MTZBcnJheT9mPTUxMjI6ZCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Y9NTEyNTpkIGluc3RhbmNlb2YgSW50MzJBcnJheT9mPTUxMjQ6ZCBpbnN0YW5jZW9mIEludDhBcnJheT9mPTUxMjA6KGQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxkIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZj01MTIxKSx7YnVmZmVyOmgsdHlwZTpmLGJ5dGVzUGVyRWxlbWVudDpkLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyx1KSk6ZC52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsdSxkKXtsZXQgcD11LmFycmF5LGg9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoZCxjKSwtMT09PWguY291bnQ/bi5idWZmZXJTdWJEYXRhKGQsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEoZCxoLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsaC5vZmZzZXQsaC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGQsaC5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K2guY291bnQpKSxoLmNvdW50PS0xKX0oZC5idWZmZXIsYyx1KSxkLnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBBTT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsdT1sKzEsZD10L2EscD1lL2wsaD1bXSxmPVtdLG09W10sQz1bXTtmb3IobGV0IF89MDtfPHU7XysrKXtsZXQgeT1fKnAtcztmb3IobGV0IEk9MDtJPGM7SSsrKWYucHVzaChJKmQtbywteSwwKSxtLnB1c2goMCwwLDEpLEMucHVzaChJL2EpLEMucHVzaCgxLV8vbCl9Zm9yKGxldCBfPTA7XzxsO18rKylmb3IobGV0IHk9MDt5PGE7eSsrKXtsZXQgQT15K2MqKF8rMSksTz15KzErYyooXysxKSxlZT15KzErYypfO2gucHVzaCh5K2MqXyxBLGVlKSxoLnB1c2goQSxPLGVlKX10aGlzLnNldEluZGV4KGgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBHcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBHcihDLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBBTSh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LGJpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sUHQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBQb30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEplKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBKZSguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99fX0sVXU9e2Jhc2ljOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuc3BlY3VsYXJtYXAsUHQuZW52bWFwLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmZvZyxQdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5lbWlzc2l2ZW1hcCxQdC5idW1wbWFwLFB0Lm5vcm1hbG1hcCxQdC5kaXNwbGFjZW1lbnRtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBhbigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5lbnZtYXAsUHQuYW9tYXAsUHQubGlnaHRtYXAsUHQuZW1pc3NpdmVtYXAsUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LnJvdWdobmVzc21hcCxQdC5tZXRhbG5lc3NtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmJ1bXBtYXAsUHQubm9ybWFsbWFwLFB0LmRpc3BsYWNlbWVudG1hcCxQdC5ncmFkaWVudG1hcCxQdC5mb2csUHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGFuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3Jtczp5cyhbUHQucG9pbnRzLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpiaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6YmkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3Jtczp5cyhbUHQuc3ByaXRlLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpiaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3Jtczp5cyhbUHQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YmkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3ICR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOnlzKFtQdC5saWdodHMsUHQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IGFuKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6Ymkuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6Ymkuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiB5VWUobix0LGUsaSxyLG8pe2xldCBsLGMscz1uZXcgYW4oMCksYT0hMD09PXI/MDoxLHU9bnVsbCxkPTAscD1udWxsO2Z1bmN0aW9uIGYobSxDKXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIobS5yLG0uZyxtLmIsQyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKG0sQz0xKXtzLnNldChtKSxhPUMsZihzLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24obSl7YT1tLGYocyxhKX0scmVuZGVyOmZ1bmN0aW9uKG0sQyl7bGV0IF89ITEseT0hMD09PUMuaXNTY2VuZT9DLmJhY2tncm91bmQ6bnVsbDt5JiZ5LmlzVGV4dHVyZSYmKHk9dC5nZXQoeSkpO2xldCBJPW4ueHIsQT1JLmdldFNlc3Npb24mJkkuZ2V0U2Vzc2lvbigpO0EmJiJhZGRpdGl2ZSI9PT1BLmVudmlyb25tZW50QmxlbmRNb2RlJiYoeT1udWxsKSxudWxsPT09eT9mKHMsYSk6eSYmeS5pc0NvbG9yJiYoZih5LDEpLF89ITApLChuLmF1dG9DbGVhcnx8XykmJm4uY2xlYXIobi5hdXRvQ2xlYXJDb2xvcixuLmF1dG9DbGVhckRlcHRoLG4uYXV0b0NsZWFyU3RlbmNpbCkseSYmKHkuaXNDdWJlVGV4dHVyZXx8MzA2PT09eS5tYXBwaW5nKT8odm9pZCAwPT09YyYmKGM9bmV3IHlvKG5ldyBabSgxLDEsMSksbmV3IHpkKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpneShVdS5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6VXUuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6VXUuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKE8sZWUsWCl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oWC5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXksYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXkuaXNDdWJlVGV4dHVyZSYmITE9PT15LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTp5JiZ5LmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyB5byhuZXcgQU0oMiwyKSxuZXcgemQoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6Z3koVXUuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOlV1LmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlV1LmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxpLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9eSwhMD09PXkubWF0cml4QXV0b1VwZGF0ZSYmeS51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoeS5tYXRyaXgpLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIGJVZShuLHQsZSxpKXtsZXQgcj1uLmdldFBhcmFtZXRlcigzNDkyMSksbz1pLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikscz1pLmlzV2ViR0wyfHxudWxsIT09byxhPXt9LGw9bShudWxsKSxjPWw7ZnVuY3Rpb24gcChsZSl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkobGUpOm8uYmluZFZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBoKGxlKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KGxlKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBtKGxlKXtsZXQgaGU9W10seWU9W10sSj1bXTtmb3IobGV0IGFlPTA7YWU8cjthZSsrKWhlW2FlXT0wLHllW2FlXT0wLEpbYWVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmhlLGVuYWJsZWRBdHRyaWJ1dGVzOnllLGF0dHJpYnV0ZURpdmlzb3JzOkosb2JqZWN0OmxlLGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24geSgpe2xldCBsZT1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKWxlW2hlXT0wfWZ1bmN0aW9uIEkobGUpe0EobGUsMCl9ZnVuY3Rpb24gQShsZSxoZSl7bGV0IEo9Yy5lbmFibGVkQXR0cmlidXRlcyxhZT1jLmF0dHJpYnV0ZURpdmlzb3JzO2MubmV3QXR0cmlidXRlc1tsZV09MSwwPT09SltsZV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxlKSxKW2xlXT0xKSxhZVtsZV0hPT1oZSYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKGxlLGhlKSxhZVtsZV09aGUpfWZ1bmN0aW9uIE8oKXtsZXQgbGU9Yy5uZXdBdHRyaWJ1dGVzLGhlPWMuZW5hYmxlZEF0dHJpYnV0ZXM7Zm9yKGxldCB5ZT0wLEo9aGUubGVuZ3RoO3llPEo7eWUrKyloZVt5ZV0hPT1sZVt5ZV0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh5ZSksaGVbeWVdPTApfWZ1bmN0aW9uIGVlKGxlLGhlLHllLEosYWUsbWUpeyEwIT09aS5pc1dlYkdMMnx8NTEyNCE9PXllJiY1MTI1IT09eWU/bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxlLGhlLHllLEosYWUsbWUpOm4udmVydGV4QXR0cmliSVBvaW50ZXIobGUsaGUseWUsYWUsbWUpfWZ1bmN0aW9uIFQoKXtuZSgpLGMhPT1sJiYoYz1sLHAoYy5vYmplY3QpKX1mdW5jdGlvbiBuZSgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24obGUsaGUseWUsSixhZSl7bGV0IG1lPSExO2lmKHMpe2xldCBqZT1mdW5jdGlvbihsZSxoZSx5ZSl7bGV0IEo9ITA9PT15ZS53aXJlZnJhbWUsYWU9YVtsZS5pZF07dm9pZCAwPT09YWUmJihhZT17fSxhW2xlLmlkXT1hZSk7bGV0IG1lPWFlW2hlLmlkXTt2b2lkIDA9PT1tZSYmKG1lPXt9LGFlW2hlLmlkXT1tZSk7bGV0IGplPW1lW0pdO3JldHVybiB2b2lkIDA9PT1qZSYmKGplPW0oaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6by5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKSxtZVtKXT1qZSksamV9KEoseWUsaGUpO2MhPT1qZSYmKGM9amUscChjLm9iamVjdCkpLG1lPWZ1bmN0aW9uKGxlLGhlKXtsZXQgeWU9Yy5hdHRyaWJ1dGVzLEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPXllW21lXSxNZT1KW21lXTtpZih2b2lkIDA9PT1qZXx8amUuYXR0cmlidXRlIT09TWV8fGplLmRhdGEhPT1NZS5kYXRhKXJldHVybiEwO2FlKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PWFlfHxjLmluZGV4IT09aGV9KEosYWUpLG1lJiZmdW5jdGlvbihsZSxoZSl7bGV0IHllPXt9LEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPUpbbWVdLE1lPXt9O01lLmF0dHJpYnV0ZT1qZSxqZS5kYXRhJiYoTWUuZGF0YT1qZS5kYXRhKSx5ZVttZV09TWUsYWUrK31jLmF0dHJpYnV0ZXM9eWUsYy5hdHRyaWJ1dGVzTnVtPWFlLGMuaW5kZXg9aGV9KEosYWUpfWVsc2V7bGV0IGplPSEwPT09aGUud2lyZWZyYW1lOyhjLmdlb21ldHJ5IT09Si5pZHx8Yy5wcm9ncmFtIT09eWUuaWR8fGMud2lyZWZyYW1lIT09amUpJiYoYy5nZW9tZXRyeT1KLmlkLGMucHJvZ3JhbT15ZS5pZCxjLndpcmVmcmFtZT1qZSxtZT0hMCl9ITA9PT1sZS5pc0luc3RhbmNlZE1lc2gmJihtZT0hMCksbnVsbCE9PWFlJiZlLnVwZGF0ZShhZSwzNDk2MyksbWUmJihmdW5jdGlvbihsZSxoZSx5ZSxKKXtpZighMT09PWkuaXNXZWJHTDImJihsZS5pc0luc3RhbmNlZE1lc2h8fEouaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjt5KCk7bGV0IGFlPUouYXR0cmlidXRlcyxtZT15ZS5nZXRBdHRyaWJ1dGVzKCksamU9aGUuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IE1lIGluIG1lKXtsZXQgRmU9bWVbTWVdO2lmKEZlLmxvY2F0aW9uPj0wKXtsZXQgdXQ9YWVbTWVdO2lmKHZvaWQgMD09PXV0JiYoImluc3RhbmNlTWF0cml4Ij09PU1lJiZsZS5pbnN0YW5jZU1hdHJpeCYmKHV0PWxlLmluc3RhbmNlTWF0cml4KSwiaW5zdGFuY2VDb2xvciI9PT1NZSYmbGUuaW5zdGFuY2VDb2xvciYmKHV0PWxlLmluc3RhbmNlQ29sb3IpKSx2b2lkIDAhPT11dCl7bGV0IFN0PXV0Lm5vcm1hbGl6ZWQsZ3Q9dXQuaXRlbVNpemUsUmU9ZS5nZXQodXQpO2lmKHZvaWQgMD09PVJlKWNvbnRpbnVlO2xldCBBbj1SZS5idWZmZXIsRXQ9UmUudHlwZSxvbj1SZS5ieXRlc1BlckVsZW1lbnQ7aWYodXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IENlPXV0LmRhdGEsdnQ9Q2Uuc3RyaWRlLF90PXV0Lm9mZnNldDtpZihDZSYmQ2UuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcil7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUEoRmUubG9jYXRpb24raWUsQ2UubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PUNlLm1lc2hQZXJBdHRyaWJ1dGUqQ2UuY291bnQpfWVsc2UgZm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUkoRmUubG9jYXRpb24raWUpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKWVlKEZlLmxvY2F0aW9uK2llLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCx2dCpvbiwoX3QrZ3QvRmUubG9jYXRpb25TaXplKmllKSpvbil9ZWxzZXtpZih1dC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUEoRmUubG9jYXRpb24rQ2UsdXQubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PXV0Lm1lc2hQZXJBdHRyaWJ1dGUqdXQuY291bnQpfWVsc2UgZm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUkoRmUubG9jYXRpb24rQ2UpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKWVlKEZlLmxvY2F0aW9uK0NlLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCxndCpvbixndC9GZS5sb2NhdGlvblNpemUqQ2Uqb24pfX1lbHNlIGlmKHZvaWQgMCE9PWplKXtsZXQgU3Q9amVbTWVdO2lmKHZvaWQgMCE9PVN0KXN3aXRjaChTdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihGZS5sb2NhdGlvbixTdCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KEZlLmxvY2F0aW9uLFN0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoRmUubG9jYXRpb24sU3QpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoRmUubG9jYXRpb24sU3QpfX19fU8oKX0obGUsaGUseWUsSiksbnVsbCE9PWFlJiZuLmJpbmRCdWZmZXIoMzQ5NjMsZS5nZXQoYWUpLmJ1ZmZlcikpfSxyZXNldDpULHJlc2V0RGVmYXVsdFN0YXRlOm5lLGRpc3Bvc2U6ZnVuY3Rpb24oKXtUKCk7Zm9yKGxldCBsZSBpbiBhKXtsZXQgaGU9YVtsZV07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGVdfX0scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6ZnVuY3Rpb24obGUpe2lmKHZvaWQgMD09PWFbbGUuaWRdKXJldHVybjtsZXQgaGU9YVtsZS5pZF07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGUuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKGxlKXtmb3IobGV0IGhlIGluIGEpe2xldCB5ZT1hW2hlXTtpZih2b2lkIDA9PT15ZVtsZS5pZF0pY29udGludWU7bGV0IEo9eWVbbGUuaWRdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSB5ZVtsZS5pZF19fSxpbml0QXR0cmlidXRlczp5LGVuYWJsZUF0dHJpYnV0ZTpJLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOk99fWZ1bmN0aW9uIHhVZShuLHQsZSxpKXtsZXQgbyxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGMpe289Y30sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oYyx1KXtuLmRyYXdBcnJheXMobyxjLHUpLGUudXBkYXRlKHUsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oYyx1LGQpe2lmKDA9PT1kKXJldHVybjtsZXQgcCxoO2lmKHIpcD1uLGg9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYocD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGg9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXApcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cFtoXShvLGMsdSxkKSxlLnVwZGF0ZSh1LG8sZCl9fWZ1bmN0aW9uIENVZShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gbyhYKXtpZigiaGlnaHAiPT09WCl7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtYPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1YJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBzPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPXZvaWQgMCE9PWUucHJlY2lzaW9uP2UucHJlY2lzaW9uOiJoaWdocCIsbD1vKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1zfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT0hMD09PWUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixkPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxwPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGY9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLG09bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLEM9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLF89bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLHk9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLEk9cD4wLEE9c3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cmV0dXJue2lzV2ViR0wyOnMsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09aSlyZXR1cm4gaTtpZighMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IFg9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2k9bi5nZXRQYXJhbWV0ZXIoWC5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpfWVsc2UgaT0wO3JldHVybiBpfSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6ZCxtYXhWZXJ0ZXhUZXh0dXJlczpwLG1heFRleHR1cmVTaXplOmgsbWF4Q3ViZW1hcFNpemU6ZixtYXhBdHRyaWJ1dGVzOm0sbWF4VmVydGV4VW5pZm9ybXM6QyxtYXhWYXJ5aW5nczpfLG1heEZyYWdtZW50VW5pZm9ybXM6eSx2ZXJ0ZXhUZXh0dXJlczpJLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpBLGZsb2F0VmVydGV4VGV4dHVyZXM6SSYmQSxtYXhTYW1wbGVzOnM/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjB9fWZ1bmN0aW9uIHdVZShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxvPSExLHM9bmV3IGtjLGE9bmV3IFBvLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoZCxwLGgsZil7bGV0IG09bnVsbCE9PWQ/ZC5sZW5ndGg6MCxDPW51bGw7aWYoMCE9PW0pe2lmKEM9bC52YWx1ZSwhMCE9PWZ8fG51bGw9PT1DKXtsZXQgXz1oKzQqbSx5PXAubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHkpLChudWxsPT09Q3x8Qy5sZW5ndGg8XykmJihDPW5ldyBGbG9hdDMyQXJyYXkoXykpO2ZvcihsZXQgST0wLEE9aDtJIT09bTsrK0ksQSs9NClzLmNvcHkoZFtJXSkuYXBwbHlNYXRyaXg0KHksYSkscy5ub3JtYWwudG9BcnJheShDLEEpLENbQSszXT1zLmNvbnN0YW50fWwudmFsdWU9QyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1tLHQubnVtSW50ZXJzZWN0aW9uPTAsQ310aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGQscCxoKXtsZXQgZj0wIT09ZC5sZW5ndGh8fHB8fDAhPT1pfHxyO3JldHVybiByPXAsZT11KGQsaCwwKSxpPWQubGVuZ3RoLGZ9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihkLHAsaCl7bGV0IGY9ZC5jbGlwcGluZ1BsYW5lcyxtPWQuY2xpcEludGVyc2VjdGlvbixDPWQuY2xpcFNoYWRvd3MsXz1uLmdldChkKTtpZighcnx8bnVsbD09PWZ8fDA9PT1mLmxlbmd0aHx8byYmIUMpbz91KG51bGwpOmMoKTtlbHNle2xldCB5PW8/MDppLEk9NCp5LEE9Xy5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9QSxBPXUoZixwLEksaCk7Zm9yKGxldCBPPTA7TyE9PUk7KytPKUFbT109ZVtPXTtfLmNsaXBwaW5nU3RhdGU9QSx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXl9fX1mdW5jdGlvbiBNVWUobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShzLGEpe3JldHVybiAzMDM9PT1hP3MubWFwcGluZz0zMDE6MzA0PT09YSYmKHMubWFwcGluZz0zMDIpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKDMwMz09PWF8fDMwND09PWEpe2lmKHQuaGFzKHMpKXJldHVybiBlKHQuZ2V0KHMpLnRleHR1cmUscy5tYXBwaW5nKTt7bGV0IGw9cy5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgYjIobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixzKSx0LnNldChzLGMpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUscy5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcH19fVV1LnBoeXNpY2FsPXt1bmlmb3Jtczp5cyhbVXUuc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBKZSgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgSmV9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IGFuKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfTt2YXIgSm09Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxvPS4xLHM9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1vLHRoaXMuZmFyPXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsbz1pLXQscz1pK3QsYT1yK2UsbD1yLWU7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtvKz1jKnRoaXMudmlldy5vZmZzZXRYLHM9bytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMobyxzLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07Sm0ucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciB5eT1jbGFzcyBleHRlbmRzIHpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07eXkucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIEh1PU1hdGgucG93KDIsOCksX2xlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSx2bGU9NStfbGUubGVuZ3RoLGFVPW5ldyBKbSx7X2xvZFBsYW5lczp1TSxfc2l6ZUxvZHM6Z2FlLF9zaWdtYXM6WlJ9PVNVZSgpLF9hZT1uZXcgYW4sbFU9bnVsbCxxbT0oMStNYXRoLnNxcnQoNSkpLzIsdHk9MS9xbSx2YWU9W25ldyAkKDEsMSwxKSxuZXcgJCgtMSwxLDEpLG5ldyAkKDEsMSwtMSksbmV3ICQoLTEsMSwtMSksbmV3ICQoMCxxbSx0eSksbmV3ICQoMCxxbSwtdHkpLG5ldyAkKHR5LDAscW0pLG5ldyAkKC10eSwwLHFtKSxuZXcgJChxbSx0eSwwKSxuZXcgJCgtcW0sdHksMCldLHgyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IEZsb2F0MzJBcnJheSgyMCksZT1uZXcgJCgwLDEsMCk7cmV0dXJuIG5ldyB5eSh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOjIwfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSBpbnQgc2FtcGxlcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdO1xuXHRcdFx0dW5pZm9ybSBib29sIGxhdGl0dWRpbmFsO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBkVGhldGE7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1pcEludDtcblx0XHRcdHVuaWZvcm0gdmVjMyBwb2xlQXhpcztcblxuXHRcdFx0I2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0XHQjaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuXG5cdFx0XHR2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHtcblxuXHRcdFx0XHRmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTtcblx0XHRcdFx0Ly8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uXG5cdFx0XHRcdHZlYzMgc2FtcGxlRGlyZWN0aW9uID0gdk91dHB1dERpcmVjdGlvbiAqIGNvc1RoZXRhXG5cdFx0XHRcdFx0KyBjcm9zcyggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogc2luKCB0aGV0YSApXG5cdFx0XHRcdFx0KyBheGlzICogZG90KCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiAoIDEuMCAtIGNvc1RoZXRhICk7XG5cblx0XHRcdFx0cmV0dXJuIGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpcmVjdGlvbiwgbWlwSW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdHZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHtcblxuXHRcdFx0XHRcdGF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7XG5cblx0XHRcdFx0Zm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBpID49IHNhbXBsZXMgKSB7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmxvYXQgdGhldGEgPSBkVGhldGEgKiBmbG9hdCggaSApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCAtMS4wICogdGhldGEsIGF4aXMgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggdGhldGEsIGF4aXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX0oKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIsbyksZT4wJiZ0aGlzLl9ibHVyKG8sMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe251bGw9PT10aGlzLl9jdWJlbWFwU2hhZGVyJiYodGhpcy5fY3ViZW1hcFNoYWRlcj14YWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXtudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fY3ViZW1hcFNoYWRlciYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDx1TS5sZW5ndGg7dCsrKXVNW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQobFUpLHQuc2Npc3NvclRlc3Q9ITEsSlIodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQsZSl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IGk9ZXx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxpKSx0aGlzLl9hcHBseVBNUkVNKGkpLHRoaXMuX2NsZWFudXAoaSksaX1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCBlPXttYWdGaWx0ZXI6YnMsbWluRmlsdGVyOmJzLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOnV5LGZvcm1hdDp6cyxlbmNvZGluZzpEaCxkZXB0aEJ1ZmZlcjohMX0saT15YWUoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsbnVsbD09PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWFlKGUpKSxpfV9jb21waWxlTWF0ZXJpYWwodCl7bGV0IGU9bmV3IHlvKHVNWzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUoZSxhVSl9X3NjZW5lVG9DdWJlVVYodCxlLGkscil7bGV0IGE9bmV3IHhzKDkwLDEsZSxpKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGQ9dS5hdXRvQ2xlYXIscD11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihfYWUpLHUudG9uZU1hcHBpbmc9MCx1LmF1dG9DbGVhcj0hMTtsZXQgaD1uZXcgS20oe25hbWU6IlBNUkVNLkJhY2tncm91bmQiLHNpZGU6MSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGY9bmV3IHlvKG5ldyBabSxoKSxtPSExLEM9dC5iYWNrZ3JvdW5kO0M/Qy5pc0NvbG9yJiYoaC5jb2xvci5jb3B5KEMpLHQuYmFja2dyb3VuZD1udWxsLG09ITApOihoLmNvbG9yLmNvcHkoX2FlKSxtPSEwKTtmb3IobGV0IF89MDtfPDY7XysrKXtsZXQgeT1fJTM7MD09PXk/KGEudXAuc2V0KDAsbFtfXSwwKSxhLmxvb2tBdChjW19dLDAsMCkpOjE9PT15PyhhLnVwLnNldCgwLDAsbFtfXSksYS5sb29rQXQoMCxjW19dLDApKTooYS51cC5zZXQoMCxsW19dLDApLGEubG9va0F0KDAsMCxjW19dKSksSlIocix5Kkh1LF8+Mj9IdTowLEh1LEh1KSx1LnNldFJlbmRlclRhcmdldChyKSxtJiZ1LnJlbmRlcihmLGEpLHUucmVuZGVyKHQsYSl9Zi5nZW9tZXRyeS5kaXNwb3NlKCksZi5tYXRlcmlhbC5kaXNwb3NlKCksdS50b25lTWFwcGluZz1wLHUuYXV0b0NsZWFyPWQsdC5iYWNrZ3JvdW5kPUN9X3RleHR1cmVUb0N1YmVVVih0LGUpe2xldCBpPXRoaXMuX3JlbmRlcmVyLHI9MzAxPT09dC5tYXBwaW5nfHwzMDI9PT10Lm1hcHBpbmc7cj8obnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXhhZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9ITE9PT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxKTpudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSk7bGV0IG89cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLHM9bmV3IHlvKHVNWzBdLG8pLGE9by51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSlIoZSwwLDAsMypIdSwyKkh1KSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihzLGFVKX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8dmxlO3IrKyl7bGV0IG89TWF0aC5zcXJ0KFpSW3JdKlpSW3JdLVpSW3ItMV0qWlJbci0xXSk7dGhpcy5fYmx1cih0LHItMSxyLG8sdmFlWyhyLTEpJXZhZS5sZW5ndGhdKX1lLmF1dG9DbGVhcj1pfV9ibHVyKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxzLGUsaSxyLCJsYXRpdHVkaW5hbCIsbyksdGhpcy5faGFsZkJsdXIocyx0LGksaSxyLCJsb25naXR1ZGluYWwiLG8pfV9oYWxmQmx1cih0LGUsaSxyLG8scyxhKXtsZXQgbD10aGlzLl9yZW5kZXJlcixjPXRoaXMuX2JsdXJNYXRlcmlhbDsibGF0aXR1ZGluYWwiIT09cyYmImxvbmdpdHVkaW5hbCIhPT1zJiZjb25zb2xlLmVycm9yKCJibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhIik7bGV0IGQ9bmV3IHlvKHVNW3JdLGMpLHA9Yy51bmlmb3JtcyxoPWdhZVtpXS0xLGY9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipoKToyKk1hdGguUEkvMzksbT1vL2YsQz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IoMyptKToyMDtDPjIwJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke0N9IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gMjBgKTtsZXQgXz1bXSx5PTA7Zm9yKGxldCBlZT0wO2VlPDIwOysrZWUpe2xldCBYPWVlL20seGU9TWF0aC5leHAoLVgqWC8yKTtfLnB1c2goeGUpLDA9PT1lZT95Kz14ZTplZTxDJiYoeSs9Mip4ZSl9Zm9yKGxldCBlZT0wO2VlPF8ubGVuZ3RoO2VlKyspX1tlZV09X1tlZV0veTtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPUMscC53ZWlnaHRzLnZhbHVlPV8scC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1mLHAubWlwSW50LnZhbHVlPTgtaTtsZXQgST1nYWVbcl07SlIoZSwzKk1hdGgubWF4KDAsSHUtMipJKSwoMD09PXI/MDoyKkh1KSsyKkkqKHI+ND9yLTgrNDowKSwzKkksMipJKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihkLGFVKX19O2Z1bmN0aW9uIFNVZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPTg7Zm9yKGxldCByPTA7cjx2bGU7cisrKXtsZXQgbz1NYXRoLnBvdygyLGkpO3QucHVzaChvKTtsZXQgcz0xL287cj40P3M9X2xlW3ItOCs0LTFdOjA9PT1yJiYocz0wKSxlLnB1c2gocyk7bGV0IGE9MS8oby0xKSxsPS1hLzIsYz0xK2EvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10sZD02LHA9NixoPTMsZj0yLG09MSxDPW5ldyBGbG9hdDMyQXJyYXkoaCpwKmQpLF89bmV3IEZsb2F0MzJBcnJheShmKnAqZCkseT1uZXcgRmxvYXQzMkFycmF5KG0qcCpkKTtmb3IobGV0IEE9MDtBPGQ7QSsrKXtsZXQgTz1BJTMqMi8zLTEsZWU9QT4yPzA6LTE7Qy5zZXQoW08sZWUsMCxPKzIvMyxlZSwwLE8rMi8zLGVlKzEsMCxPLGVlLDAsTysyLzMsZWUrMSwwLE8sZWUrMSwwXSxoKnAqQSksXy5zZXQodSxmKnAqQSkseS5zZXQoW0EsQSxBLEEsQSxBXSxtKnAqQSl9bGV0IEk9bmV3IEtpO0kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKEMsaCkpLEkuc2V0QXR0cmlidXRlKCJ1diIsbmV3IExyKF8sZikpLEkuc2V0QXR0cmlidXRlKCJmYWNlSW5kZXgiLG5ldyBMcih5LG0pKSxuLnB1c2goSSksaT40JiZpLS19cmV0dXJue19sb2RQbGFuZXM6bixfc2l6ZUxvZHM6dCxfc2lnbWFzOmV9fWZ1bmN0aW9uIHlhZShuKXtsZXQgdD1uZXcgdmEoMypIdSwzKkh1LG4pO3JldHVybiB0LnRleHR1cmUubWFwcGluZz0zMDYsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEpSKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBiYWUoKXtsZXQgbj1uZXcgSmUoMSwxKTtyZXR1cm4gbmV3IHl5KHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpufX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuXG5cdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cblx0XHRcdFx0dmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTtcblx0XHRcdFx0dmVjMiB1diA9IGVxdWlyZWN0VXYoIG91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAvIHRleGVsU2l6ZSAtIDAuNSApO1xuXHRcdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0XHR2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCArPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54IC09IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblxuXHRcdFx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdFx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24geGFlKCl7cmV0dXJuIG5ldyB5eSh7bmFtZToiQ3ViZW1hcFRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gVFVlKG4pe2xldCB0PW5ldyBXZWFrTWFwLGU9bnVsbDtmdW5jdGlvbiBvKGEpe2xldCBsPWEudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7dm9pZCAwIT09YyYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2lmKGEmJmEuaXNUZXh0dXJlKXtsZXQgbD1hLm1hcHBpbmcsYz0zMDM9PT1sfHwzMDQ9PT1sLHU9MzAxPT09bHx8MzAyPT09bDtpZihjfHx1KXtpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmITA9PT1hLm5lZWRzUE1SRU1VcGRhdGUpe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgZD10LmdldChhKTtyZXR1cm4gbnVsbD09PWUmJihlPW5ldyB4MihuKSksZD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGQpOmUuZnJvbUN1YmVtYXAoYSxkKSx0LnNldChhLGQpLGQudGV4dHVyZX1pZih0LmhhcyhhKSlyZXR1cm4gdC5nZXQoYSkudGV4dHVyZTt7bGV0IGQ9YS5pbWFnZTtpZihjJiZkJiZkLmhlaWdodD4wfHx1JiZkJiZmdW5jdGlvbihhKXtsZXQgbD0wO2ZvcihsZXQgdT0wO3U8Njt1Kyspdm9pZCAwIT09YVt1XSYmbCsrO3JldHVybiA2PT09bH0oZCkpe251bGw9PT1lJiYoZT1uZXcgeDIobikpO2xldCBwPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEscCksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxwLnRleHR1cmV9cmV0dXJuIG51bGx9fX1yZXR1cm4gYX0sZGlzcG9zZTpmdW5jdGlvbigpe3Q9bmV3IFdlYWtNYXAsbnVsbCE9PWUmJihlLmRpc3Bvc2UoKSxlPW51bGwpfX19ZnVuY3Rpb24gRFVlKG4pe2xldCB0PXt9O2Z1bmN0aW9uIGUoaSl7aWYodm9pZCAwIT09dFtpXSlyZXR1cm4gdFtpXTtsZXQgcjtzd2l0Y2goaSl7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6cj1uLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6cj1uLmdldEV4dGVuc2lvbihpKX1yZXR1cm4gdFtpXT1yLHJ9cmV0dXJue2hhczpmdW5jdGlvbihpKXtyZXR1cm4gbnVsbCE9PWUoaSl9LGluaXQ6ZnVuY3Rpb24oaSl7aS5pc1dlYkdMMj9lKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KGUoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxlKCJPRVNfdGV4dHVyZV9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLGUoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLGUoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxlKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGUoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSksZSgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiksZSgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiksZSgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihpKXtsZXQgcj1lKGkpO3JldHVybiBudWxsPT09ciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2krIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxyfX19ZnVuY3Rpb24gQVVlKG4sdCxlLGkpe2xldCByPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcyhkKXtsZXQgcD1kLnRhcmdldDtudWxsIT09cC5pbmRleCYmdC5yZW1vdmUocC5pbmRleCk7Zm9yKGxldCBmIGluIHAuYXR0cmlidXRlcyl0LnJlbW92ZShwLmF0dHJpYnV0ZXNbZl0pO3AucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZGVsZXRlIHJbcC5pZF07bGV0IGg9by5nZXQocCk7aCYmKHQucmVtb3ZlKGgpLG8uZGVsZXRlKHApKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KHApLCEwPT09cC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiZkZWxldGUgcC5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYyhkKXtsZXQgcD1bXSxoPWQuaW5kZXgsZj1kLmF0dHJpYnV0ZXMucG9zaXRpb24sbT0wO2lmKG51bGwhPT1oKXtsZXQgeT1oLmFycmF5O209aC52ZXJzaW9uO2ZvcihsZXQgST0wLEE9eS5sZW5ndGg7STxBO0krPTMpe2xldCBPPXlbSSswXSxlZT15W0krMV0sWD15W0krMl07cC5wdXNoKE8sZWUsZWUsWCxYLE8pfX1lbHNle209Zi52ZXJzaW9uO2ZvcihsZXQgST0wLEE9Zi5hcnJheS5sZW5ndGgvMy0xO0k8QTtJKz0zKXtsZXQgTz1JKzAsZWU9SSsxLFg9SSsyO3AucHVzaChPLGVlLGVlLFgsWCxPKX19bGV0IEM9bmV3KG1sZShwKT95Mjp2MikocCwxKTtDLnZlcnNpb249bTtsZXQgXz1vLmdldChkKTtfJiZ0LnJlbW92ZShfKSxvLnNldChkLEMpfXJldHVybntnZXQ6ZnVuY3Rpb24oZCxwKXtyZXR1cm4hMD09PXJbcC5pZF18fChwLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHJbcC5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxwfSx1cGRhdGU6ZnVuY3Rpb24oZCl7bGV0IHA9ZC5hdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBwKXQudXBkYXRlKHBbZl0sMzQ5NjIpO2xldCBoPWQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBoKXtsZXQgbT1oW2ZdO2ZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl0LnVwZGF0ZShtW0NdLDM0OTYyKX19LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihkKXtsZXQgcD1vLmdldChkKTtpZihwKXtsZXQgaD1kLmluZGV4O251bGwhPT1oJiZwLnZlcnNpb248aC52ZXJzaW9uJiZjKGQpfWVsc2UgYyhkKTtyZXR1cm4gby5nZXQoZCl9fX1mdW5jdGlvbiBJVWUobix0LGUsaSl7bGV0IG8sYSxsLHI9aS5pc1dlYkdMMjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24ocCl7bz1wfSx0aGlzLnNldEluZGV4PWZ1bmN0aW9uKHApe2E9cC50eXBlLGw9cC5ieXRlc1BlckVsZW1lbnR9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKHAsaCl7bi5kcmF3RWxlbWVudHMobyxoLGEscCpsKSxlLnVwZGF0ZShoLG8sMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKHAsaCxmKXtpZigwPT09ZilyZXR1cm47bGV0IG0sQztpZihyKW09bixDPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYobT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLEM9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixudWxsPT09bSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7bVtDXShvLGgsYSxwKmwsZiksZS51cGRhdGUoaCxvLGYpfX1mdW5jdGlvbiBQVWUobil7bGV0IGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24oKXtlLmZyYW1lKyssZS5jYWxscz0wLGUudHJpYW5nbGVzPTAsZS5wb2ludHM9MCxlLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7c3dpdGNoKGUuY2FsbHMrKyxzKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKG8vMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKG8vMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKG8tMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqbzticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqbzticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixzKX19fX12YXIgSU09Y2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPUlvLHRoaXMubWluRmlsdGVyPUlvLHRoaXMud3JhcFI9WmEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07ZnVuY3Rpb24gUlVlKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBPVWUobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gQ2FlKG4sdCl7bGV0IGU9MSxpPXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT90LmRhdGEuYXJyYXk6dC5hcnJheTtpIGluc3RhbmNlb2YgSW50OEFycmF5P2U9MTI3OmkgaW5zdGFuY2VvZiBJbnQxNkFycmF5P2U9MzI3Njc6aSBpbnN0YW5jZW9mIEludDMyQXJyYXk/ZT0yMTQ3NDgzNjQ3OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMTW9ycGh0YXJnZXRzOiBVbnN1cHBvcnRlZCBtb3JwaCBhdHRyaWJ1dGUgZGF0YSB0eXBlOiAiLGkpLG4uZGl2aWRlU2NhbGFyKGUpfWZ1bmN0aW9uIGtVZShuLHQsZSl7bGV0IGk9e30scj1uZXcgRmxvYXQzMkFycmF5KDgpLG89bmV3IFdlYWtNYXAscz1uZXcgJCxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGMsdSxkLHApe2xldCBoPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKCEwPT09dC5pc1dlYkdMMil7bGV0IGY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLG09by5nZXQodSk7aWYodm9pZCAwPT09bXx8bS5jb3VudCE9PWYpe2xldCBuZT1mdW5jdGlvbigpe3ZlLmRpc3Bvc2UoKSxvLmRlbGV0ZSh1KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX07dm9pZCAwIT09bSYmbS50ZXh0dXJlLmRpc3Bvc2UoKTtsZXQgeT12b2lkIDAhPT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsST11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixBPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbHx8W10sZWU9ITA9PT15PzI6MSxYPXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCplZSx4ZT0xO1g+dC5tYXhUZXh0dXJlU2l6ZSYmKHhlPU1hdGguY2VpbChYL3QubWF4VGV4dHVyZVNpemUpLFg9dC5tYXhUZXh0dXJlU2l6ZSk7bGV0IGZlPW5ldyBGbG9hdDMyQXJyYXkoWCp4ZSo0KmYpLHZlPW5ldyBJTShmZSxYLHhlLGYpO3ZlLmZvcm1hdD16cyx2ZS50eXBlPVltLHZlLm5lZWRzVXBkYXRlPSEwO2xldCBUPTQqZWU7Zm9yKGxldCBsZT0wO2xlPGY7bGUrKyl7bGV0IGhlPUlbbGVdLHllPUFbbGVdLEo9WCp4ZSo0KmxlO2ZvcihsZXQgYWU9MDthZTxoZS5jb3VudDthZSsrKXtzLmZyb21CdWZmZXJBdHRyaWJ1dGUoaGUsYWUpLCEwPT09aGUubm9ybWFsaXplZCYmQ2FlKHMsaGUpO2xldCBtZT1hZSpUO2ZlW0orbWUrMF09cy54LGZlW0orbWUrMV09cy55LGZlW0orbWUrMl09cy56LGZlW0orbWUrM109MCwhMD09PXkmJihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoeWUsYWUpLCEwPT09eWUubm9ybWFsaXplZCYmQ2FlKHMseWUpLGZlW0orbWUrNF09cy54LGZlW0orbWUrNV09cy55LGZlW0orbWUrNl09cy56LGZlW0orbWUrN109MCl9fW09e2NvdW50OmYsdGV4dHVyZTp2ZSxzaXplOm5ldyBKZShYLHhlKX0sby5zZXQodSxtKSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX1sZXQgQz0wO2ZvcihsZXQgeT0wO3k8aC5sZW5ndGg7eSsrKUMrPWhbeV07bGV0IF89dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtQztwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixfKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixoKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZSIsbS50ZXh0dXJlLGUpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZSIsbS5zaXplKX1lbHNle2xldCBmPXZvaWQgMD09PWg/MDpoLmxlbmd0aCxtPWlbdS5pZF07aWYodm9pZCAwPT09bXx8bS5sZW5ndGghPT1mKXttPVtdO2ZvcihsZXQgQT0wO0E8ZjtBKyspbVtBXT1bQSwwXTtpW3UuaWRdPW19Zm9yKGxldCBBPTA7QTxmO0ErKyl7bGV0IE89bVtBXTtPWzBdPUEsT1sxXT1oW0FdfW0uc29ydChPVWUpO2ZvcihsZXQgQT0wO0E8ODtBKyspQTxmJiZtW0FdWzFdPyhhW0FdWzBdPW1bQV1bMF0sYVtBXVsxXT1tW0FdWzFdKTooYVtBXVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixhW0FdWzFdPTApO2Euc29ydChSVWUpO2xldCBDPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLF89dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHk9MDtmb3IobGV0IEE9MDtBPDg7QSsrKXtsZXQgTz1hW0FdLGVlPU9bMF0sWD1PWzFdO2VlIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJlg/KEMmJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkhPT1DW2VlXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitBLENbZWVdKSxfJiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpIT09X1tlZV0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrQSxfW2VlXSkscltBXT1YLHkrPVgpOihDJiYhMD09PXUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSksXyYmITA9PT11Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpLHJbQV09MCl9bGV0IEk9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEteTtwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixJKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19fX1mdW5jdGlvbiBGVWUobix0LGUsaSl7bGV0IHI9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT1jLmluc3RhbmNlQ29sb3ImJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihsKXtsZXQgYz1pLnJlbmRlci5mcmFtZSxkPXQuZ2V0KGwsbC5nZW9tZXRyeSk7cmV0dXJuIHIuZ2V0KGQpIT09YyYmKHQudXBkYXRlKGQpLHIuc2V0KGQsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYoITE9PT1sLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLG51bGwhPT1sLmluc3RhbmNlQ29sb3ImJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGR9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtyPW5ldyBXZWFrTWFwfX19SU0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO3ZhciBDMj1jbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy53cmFwUj1aYSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtDMi5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEPSEwO3ZhciB5bGU9bmV3IGJvLGJsZT1uZXcgSU0seGxlPW5ldyBDMixDbGU9bmV3IF95LHdhZT1bXSxNYWU9W10sU2FlPW5ldyBGbG9hdDMyQXJyYXkoMTYpLEVhZT1uZXcgRmxvYXQzMkFycmF5KDkpLFRhZT1uZXcgRmxvYXQzMkFycmF5KDQpO2Z1bmN0aW9uIER5KG4sdCxlKXtsZXQgaT1uWzBdO2lmKGk8PTB8fGk+MClyZXR1cm4gbjtsZXQgcj10KmUsbz13YWVbcl07aWYodm9pZCAwPT09byYmKG89bmV3IEZsb2F0MzJBcnJheShyKSx3YWVbcl09byksMCE9PXQpe2kudG9BcnJheShvLDApO2ZvcihsZXQgcz0xLGE9MDtzIT09dDsrK3MpYSs9ZSxuW3NdLnRvQXJyYXkobyxhKX1yZXR1cm4gb31mdW5jdGlvbiBqcyhuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHdzKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBXMihuLHQpe2xldCBlPU1hZVt0XTt2b2lkIDA9PT1lJiYoZT1uZXcgSW50MzJBcnJheSh0KSxNYWVbdF09ZSk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKWVbaV09bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIGV9ZnVuY3Rpb24gTlVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIExVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55KSYmKG4udW5pZm9ybTJmKHRoaXMuYWRkcix0LngsdC55KSxlWzBdPXQueCxlWzFdPXQueSk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm0yZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEJVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56KSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LngsdC55LHQueiksZVswXT10LngsZVsxXT10LnksZVsyXT10LnopO2Vsc2UgaWYodm9pZCAwIT09dC5yKShlWzBdIT09dC5yfHxlWzFdIT09dC5nfHxlWzJdIT09dC5iKSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LnIsdC5nLHQuYiksZVswXT10LnIsZVsxXT10LmcsZVsyXT10LmIpO2Vsc2V7aWYoanMoZSx0KSlyZXR1cm47bi51bmlmb3JtM2Z2KHRoaXMuYWRkcix0KSx3cyhlLHQpfX1mdW5jdGlvbiBWVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1RhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxUYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIFVVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO0VhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxFYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIHpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1NhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxTYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIGpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBHVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2pzKGUsdCl8fChuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFdVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksd3MoZSx0KSl9ZnVuY3Rpb24gcVVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtqcyhlLHQpfHwobi51bmlmb3JtNGl2KHRoaXMuYWRkcix0KSx3cyhlLHQpKX1mdW5jdGlvbiBZVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMXVpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIFhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFFVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIEtVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFpVZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHlsZSxyKX1mdW5jdGlvbiBKVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTNEKHR8fHhsZSxyKX1mdW5jdGlvbiAkVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmVDdWJlKHR8fENsZSxyKX1mdW5jdGlvbiBlemUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8YmxlLHIpfWZ1bmN0aW9uIG56ZShuLHQpe24udW5pZm9ybTFmdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaXplKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsMik7bi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiByemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIG96ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDQpO24udW5pZm9ybTRmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gc3plKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsNCk7bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBhemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGx6ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDE2KTtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGN6ZShuLHQpe24udW5pZm9ybTFpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gdXplKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBkemUobix0KXtuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHB6ZShuLHQpe24udW5pZm9ybTRpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaHplKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZnplKG4sdCl7bi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gbXplKG4sdCl7bi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZ3plKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gX3plKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZTJEKHRbb118fHlsZSxyW29dKX1mdW5jdGlvbiB2emUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9VzIoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUzRCh0W29dfHx4bGUscltvXSl9ZnVuY3Rpb24geXplKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZUN1YmUodFtvXXx8Q2xlLHJbb10pfWZ1bmN0aW9uIGJ6ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1XMihlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2V0VGV4dHVyZTJEQXJyYXkodFtvXXx8YmxlLHJbb10pfWZ1bmN0aW9uIEN6ZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBOVWU7Y2FzZSAzNTY2NDpyZXR1cm4gTFVlO2Nhc2UgMzU2NjU6cmV0dXJuIEJVZTtjYXNlIDM1NjY2OnJldHVybiBWVWU7Y2FzZSAzNTY3NDpyZXR1cm4gSFVlO2Nhc2UgMzU2NzU6cmV0dXJuIFVVZTtjYXNlIDM1Njc2OnJldHVybiB6VWU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGpVZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEdVZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIFdVZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHFVZTtjYXNlIDUxMjU6cmV0dXJuIFlVZTtjYXNlIDM2Mjk0OnJldHVybiBYVWU7Y2FzZSAzNjI5NTpyZXR1cm4gUVVlO2Nhc2UgMzYyOTY6cmV0dXJuIEtVZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFpVZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gSlVlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuICRVZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBlemV9fSh0LnR5cGUpfWZ1bmN0aW9uIHdsZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIG56ZTtjYXNlIDM1NjY0OnJldHVybiBpemU7Y2FzZSAzNTY2NTpyZXR1cm4gcnplO2Nhc2UgMzU2NjY6cmV0dXJuIG96ZTtjYXNlIDM1Njc0OnJldHVybiBzemU7Y2FzZSAzNTY3NTpyZXR1cm4gYXplO2Nhc2UgMzU2NzY6cmV0dXJuIGx6ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gY3plO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gdXplO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gZHplO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gcHplO2Nhc2UgNTEyNTpyZXR1cm4gaHplO2Nhc2UgMzYyOTQ6cmV0dXJuIGZ6ZTtjYXNlIDM2Mjk1OnJldHVybiBtemU7Y2FzZSAzNjI5NjpyZXR1cm4gZ3plO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gX3plO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB2emU7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4geXplO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIGJ6ZX19KHQudHlwZSl9ZnVuY3Rpb24gTWxlKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX13bGUucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLHdzKHQsbil9LE1sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLG89aS5sZW5ndGg7ciE9PW87KytyKXtsZXQgcz1pW3JdO3Muc2V0VmFsdWUobix0W3MuaWRdLGUpfX07dmFyIGNVPS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBEYWUobix0KXtuLnNlcS5wdXNoKHQpLG4ubWFwW3QuaWRdPXR9ZnVuY3Rpb24gd3plKG4sdCxlKXtsZXQgaT1uLm5hbWUscj1pLmxlbmd0aDtmb3IoY1UubGFzdEluZGV4PTA7Oyl7bGV0IG89Y1UuZXhlYyhpKSxzPWNVLmxhc3RJbmRleCxhPW9bMV0sYz1vWzNdO2lmKCJdIj09PW9bMl0mJihhfD0wKSx2b2lkIDA9PT1jfHwiWyI9PT1jJiZzKzI9PT1yKXtEYWUoZSx2b2lkIDA9PT1jP25ldyBDemUoYSxuLHQpOm5ldyB3bGUoYSxuLHQpKTticmVha317bGV0IGQ9ZS5tYXBbYV07dm9pZCAwPT09ZCYmKGQ9bmV3IE1sZShhKSxEYWUoZSxkKSksZT1kfX19ZnVuY3Rpb24gVGgobix0KXt0aGlzLnNlcT1bXSx0aGlzLm1hcD17fTtsZXQgZT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcxOCk7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHI9bi5nZXRBY3RpdmVVbmlmb3JtKHQsaSk7d3plKHIsbi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBBYWUobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfVRoLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTt2b2lkIDAhPT1yJiZyLnNldFZhbHVlKG4sZSxpKX0sVGgucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO3ZvaWQgMCE9PWkmJnRoaXMuc2V0VmFsdWUobixlLGkpfSxUaC51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyIT09bzsrK3Ipe2xldCBzPXRbcl0sYT1lW3MuaWRdOyExIT09YS5uZWVkc1VwZGF0ZSYmcy5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fSxUaC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IG89bltpXTtvLmlkIGluIHQmJmUucHVzaChvKX1yZXR1cm4gZX07dmFyIE16ZT0wO2Z1bmN0aW9uIElhZShuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiYiIj09PXI/IiI6ZS50b1VwcGVyQ2FzZSgpKyJcblxuIityKyJcblxuIitmdW5jdGlvbihuKXtsZXQgdD1uLnNwbGl0KCJcbiIpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKCJcbiIpfShuLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24gVHplKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgRGg6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIEZyOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fSh0KTtyZXR1cm4idmVjNCAiK24rIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitlWzBdK2VbMV0rIjsgfSJ9ZnVuY3Rpb24gRHplKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMTplPSJMaW5lYXIiO2JyZWFrO2Nhc2UgMjplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSAzOmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA0OmU9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgNTplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIF9NKG4pe3JldHVybiIiIT09bn1mdW5jdGlvbiBQYWUobix0KXtyZXR1cm4gbi5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLHQubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyx0Lm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csdC5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLHQubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLHQubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csdC5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csdC5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gUmFlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgUnplPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gRVUobil7cmV0dXJuIG4ucmVwbGFjZShSemUsT3plKX1mdW5jdGlvbiBPemUobix0KXtsZXQgZT1iaVt0XTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gRVUoZSl9dmFyIGt6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSBcPSAoXGQrKVw7IGkgPCAoXGQrKVw7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLEZ6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIE9hZShuKXtyZXR1cm4gbi5yZXBsYWNlKEZ6ZSxTbGUpLnJlcGxhY2Uoa3plLE56ZSl9ZnVuY3Rpb24gTnplKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxTbGUoMCx0LGUsaSl9ZnVuY3Rpb24gU2xlKG4sdCxlLGkpe2xldCByPSIiO2ZvcihsZXQgbz1wYXJzZUludCh0KTtvPHBhcnNlSW50KGUpO28rKylyKz1pLnJlcGxhY2UoL1xbXHMqaVxzKlxdL2csIlsgIitvKyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyxvKTtyZXR1cm4gcn1mdW5jdGlvbiBrYWUobil7bGV0IHQ9InByZWNpc2lvbiAiK24ucHJlY2lzaW9uKyIgZmxvYXQ7XG5wcmVjaXNpb24gIituLnByZWNpc2lvbisiIGludDsiO3JldHVybiJoaWdocCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoibWVkaXVtcCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04iOiJsb3dwIj09PW4ucHJlY2lzaW9uJiYodCs9IlxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OIiksdH1mdW5jdGlvbiBVemUobix0LGUsaSl7bGV0IG0sQyxyPW4uZ2V0Q29udGV4dCgpLG89ZS5kZWZpbmVzLHM9ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9ZnVuY3Rpb24obil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gMT09PW4uc2hhZG93TWFwVHlwZT90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT1uLnNoYWRvd01hcFR5cGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOjM9PT1uLnNoYWRvd01hcFR5cGUmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fShlKSxjPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIDMwMTpjYXNlIDMwMjp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gdH0oZSksdT1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX01PREVfUkVGTEVDVElPTiI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSAzMDI6Y2FzZSAzMDc6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiJ9cmV0dXJuIHR9KGUpLGQ9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIDA6dD0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOnQ9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiB0fShlKSxwPWUuaXNXZWJHTDI/IiI6ZnVuY3Rpb24obil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8InBoeXNpY2FsIj09PW4uc2hhZGVySUQ/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihfTSkuam9pbigiXG4iKX0oZSksaD1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTshMSE9PWkmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oIlxuIil9KG8pLGY9ci5jcmVhdGVQcm9ncmFtKCksXz1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rIlxuIjoiIjtlLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KG09W2hdLmZpbHRlcihfTSkuam9pbigiXG4iKSxtLmxlbmd0aD4wJiYobSs9IlxuIiksQz1bcCxoXS5maWx0ZXIoX00pLmpvaW4oIlxuIiksQy5sZW5ndGg+MCYmKEMrPSJcbiIpKToobT1ba2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiYhMT09PWUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIlx0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCJcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIlx0YXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpLEM9W3Asa2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsMCE9PWUudG9uZU1hcHBpbmc/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIiwwIT09ZS50b25lTWFwcGluZz9iaS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1lLnRvbmVNYXBwaW5nP0R6ZSgidG9uZU1hcHBpbmciLGUudG9uZU1hcHBpbmcpOiIiLGUuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsZS5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsYmkuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsVHplKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpKSxzPUVVKHMpLHM9UGFlKHMsZSkscz1SYWUocyxlKSxhPUVVKGEpLGE9UGFlKGEsZSksYT1SYWUoYSxlKSxzPU9hZShzKSxhPU9hZShhKSxlLmlzV2ViR0wyJiYhMCE9PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKF89IiN2ZXJzaW9uIDMwMCBlc1xuIixtPVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIittLEM9WyIjZGVmaW5lIHZhcnlpbmcgaW4iLCIzMDAgZXMiPT09ZS5nbHNsVmVyc2lvbj8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsIjMwMCBlcyI9PT1lLmdsc2xWZXJzaW9uPyIiOiIjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3IiLCIjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qIiwiI2RlZmluZSB0ZXh0dXJlMkRMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJER3JhZEVYVCB0ZXh0dXJlR3JhZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQiXS5qb2luKCJcbiIpKyJcbiIrQyk7bGV0IGVlLFgsST1fK0MrYSxBPUFhZShyLDM1NjMzLF8rbStzKSxPPUFhZShyLDM1NjMyLEkpO2lmKHIuYXR0YWNoU2hhZGVyKGYsQSksci5hdHRhY2hTaGFkZXIoZixPKSx2b2lkIDAhPT1lLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1lLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZiksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IHhlPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZikudHJpbSgpLGZlPXIuZ2V0U2hhZGVySW5mb0xvZyhBKS50cmltKCksdmU9ci5nZXRTaGFkZXJJbmZvTG9nKE8pLnRyaW0oKSxUPSEwLG5lPSEwO2lmKCExPT09ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGYsMzU3MTQpKXtUPSExO2xldCBsZT1JYWUocixBLCJ2ZXJ0ZXgiKSxoZT1JYWUocixPLCJmcmFnbWVudCIpO2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICIrci5nZXRFcnJvcigpKyIgLSBWQUxJREFURV9TVEFUVVMgIityLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNSkrIlxuXG5Qcm9ncmFtIEluZm8gTG9nOiAiK3hlKyJcbiIrbGUrIlxuIitoZSl9ZWxzZSIiIT09eGU/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6Iix4ZSk6KCIiPT09ZmV8fCIiPT09dmUpJiYobmU9ITEpO25lJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6VCxwcm9ncmFtTG9nOnhlLHZlcnRleFNoYWRlcjp7bG9nOmZlLHByZWZpeDptfSxmcmFnbWVudFNoYWRlcjp7bG9nOnZlLHByZWZpeDpDfX0pfXJldHVybiByLmRlbGV0ZVNoYWRlcihBKSxyLmRlbGV0ZVNoYWRlcihPKSx0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWVlJiYoZWU9bmV3IFRoKHIsZikpLGVlfSx0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9ZnVuY3Rpb24obix0KXtsZXQgZT17fSxpPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzIxKTtmb3IobGV0IHI9MDtyPGk7cisrKXtsZXQgbz1uLmdldEFjdGl2ZUF0dHJpYih0LHIpLHM9by5uYW1lLGE9MTszNTY3ND09PW8udHlwZSYmKGE9MiksMzU2NzU9PT1vLnR5cGUmJihhPTMpLDM1Njc2PT09by50eXBlJiYoYT00KSxlW3NdPXt0eXBlOm8udHlwZSxsb2NhdGlvbjpuLmdldEF0dHJpYkxvY2F0aW9uKHQscyksbG9jYXRpb25TaXplOmF9fXJldHVybiBlfShyLGYpKSxYfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksci5kZWxldGVQcm9ncmFtKGYpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1lLnNoYWRlck5hbWUsdGhpcy5pZD1NemUrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09Zix0aGlzLnZlcnRleFNoYWRlcj1BLHRoaXMuZnJhZ21lbnRTaGFkZXI9Tyx0aGlzfXZhciB6emU9MDtmdW5jdGlvbiBqemUobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IF8yLGw9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSkscz10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09cy5oYXMocikmJihzLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PXMuaGFzKG8pJiYocy5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD16emUrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZS5zZXQodCxpKX1yZXR1cm4gZS5nZXQodCl9fSxjPVtdLHU9ci5pc1dlYkdMMixkPXIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixwPXIuZmxvYXRWZXJ0ZXhUZXh0dXJlcyxoPXIubWF4VmVydGV4VW5pZm9ybXMsZj1yLnZlcnRleFRleHR1cmVzLG09ci5wcmVjaXNpb24sQz17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9O3JldHVybntnZXRQYXJhbWV0ZXJzOmZ1bmN0aW9uKFQsbmUsbGUsaGUseWUpe2xldCBGZSx1dCxTdCxndCxKPWhlLmZvZyxtZT0oVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KFQuZW52TWFwfHwoVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2hlLmVudmlyb25tZW50Om51bGwpKSxqZT1DW1QudHlwZV0sTWU9eWUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbihUKXtsZXQgbGU9VC5za2VsZXRvbi5ib25lcztpZihwKXJldHVybiAxMDI0O3tsZXQgeWU9TWF0aC5mbG9vcigoaC0yMCkvNCksSj1NYXRoLm1pbih5ZSxsZS5sZW5ndGgpO3JldHVybiBKPGxlLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitsZS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitKKyIuIiksMCk6Sn19KHllKTowO2lmKG51bGwhPT1ULnByZWNpc2lvbiYmKG09ci5nZXRNYXhQcmVjaXNpb24oVC5wcmVjaXNpb24pLG0hPT1ULnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLFQucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsbSwiaW5zdGVhZC4iKSksamUpe2xldCBDZT1VdVtqZV07RmU9Q2UudmVydGV4U2hhZGVyLHV0PUNlLmZyYWdtZW50U2hhZGVyfWVsc2UgRmU9VC52ZXJ0ZXhTaGFkZXIsdXQ9VC5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShUKSxTdD1sLmdldFZlcnRleFNoYWRlcklEKFQpLGd0PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChUKTtsZXQgUmU9bi5nZXRSZW5kZXJUYXJnZXQoKSxFdD1ULmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmplLHNoYWRlck5hbWU6VC50eXBlLHZlcnRleFNoYWRlcjpGZSxmcmFnbWVudFNoYWRlcjp1dCxkZWZpbmVzOlQuZGVmaW5lcyxjdXN0b21WZXJ0ZXhTaGFkZXJJRDpTdCxjdXN0b21GcmFnbWVudFNoYWRlcklEOmd0LGlzUmF3U2hhZGVyTWF0ZXJpYWw6ITA9PT1ULmlzUmF3U2hhZGVyTWF0ZXJpYWwsZ2xzbFZlcnNpb246VC5nbHNsVmVyc2lvbixwcmVjaXNpb246bSxpbnN0YW5jaW5nOiEwPT09eWUuaXNJbnN0YW5jZWRNZXNoLGluc3RhbmNpbmdDb2xvcjohMD09PXllLmlzSW5zdGFuY2VkTWVzaCYmbnVsbCE9PXllLmluc3RhbmNlQ29sb3Isc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczpmLG91dHB1dEVuY29kaW5nOm51bGw9PT1SZT9uLm91dHB1dEVuY29kaW5nOiEwPT09UmUuaXNYUlJlbmRlclRhcmdldD9SZS50ZXh0dXJlLmVuY29kaW5nOkRoLG1hcDohIVQubWFwLG1hdGNhcDohIVQubWF0Y2FwLGVudk1hcDohIW1lLGVudk1hcE1vZGU6bWUmJm1lLm1hcHBpbmcsZW52TWFwQ3ViZVVWOiEhbWUmJigzMDY9PT1tZS5tYXBwaW5nfHwzMDc9PT1tZS5tYXBwaW5nKSxsaWdodE1hcDohIVQubGlnaHRNYXAsYW9NYXA6ISFULmFvTWFwLGVtaXNzaXZlTWFwOiEhVC5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhVC5idW1wTWFwLG5vcm1hbE1hcDohIVQubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOjE9PT1ULm5vcm1hbE1hcFR5cGUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOjA9PT1ULm5vcm1hbE1hcFR5cGUsZGVjb2RlVmlkZW9UZXh0dXJlOiEhVC5tYXAmJiEwPT09VC5tYXAuaXNWaWRlb1RleHR1cmUmJlQubWFwLmVuY29kaW5nPT09RnIsY2xlYXJjb2F0OkV0LGNsZWFyY29hdE1hcDpFdCYmISFULmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6RXQmJiEhVC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOkV0JiYhIVQuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIVQuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIVQucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIVQubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhVC5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIVQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIVQuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIVQuYWxwaGFNYXAsYWxwaGFUZXN0OlQuYWxwaGFUZXN0PjAsYWxwaGFXcml0ZTpULmFscGhhV3JpdGV8fFQudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISFULmdyYWRpZW50TWFwLHNoZWVuOlQuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEhVC5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEhVC5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246VC50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISFULnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISFULnRoaWNrbmVzc01hcCxjb21iaW5lOlQuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIVQubm9ybWFsTWFwJiYhIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6VC52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOiEwPT09VC52ZXJ0ZXhDb2xvcnMmJiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmND09PXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUsdmVydGV4VXZzOiEhKFQubWFwfHxULmJ1bXBNYXB8fFQubm9ybWFsTWFwfHxULnNwZWN1bGFyTWFwfHxULmFscGhhTWFwfHxULmVtaXNzaXZlTWFwfHxULnJvdWdobmVzc01hcHx8VC5tZXRhbG5lc3NNYXB8fFQuY2xlYXJjb2F0TWFwfHxULmNsZWFyY29hdFJvdWdobmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQuZGlzcGxhY2VtZW50TWFwfHxULnRyYW5zbWlzc2lvbk1hcHx8VC50aGlja25lc3NNYXB8fFQuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fFQuc3BlY3VsYXJDb2xvck1hcHx8VC5zaGVlbkNvbG9yTWFwfHxULnNoZWVuUm91Z2huZXNzTWFwKSx1dnNWZXJ0ZXhPbmx5OiEoVC5tYXB8fFQuYnVtcE1hcHx8VC5ub3JtYWxNYXB8fFQuc3BlY3VsYXJNYXB8fFQuYWxwaGFNYXB8fFQuZW1pc3NpdmVNYXB8fFQucm91Z2huZXNzTWFwfHxULm1ldGFsbmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQudHJhbnNtaXNzaW9uPjB8fFQudHJhbnNtaXNzaW9uTWFwfHxULnRoaWNrbmVzc01hcHx8VC5zcGVjdWxhckludGVuc2l0eU1hcHx8VC5zcGVjdWxhckNvbG9yTWFwfHxULnNoZWVuPjB8fFQuc2hlZW5Db2xvck1hcHx8VC5zaGVlblJvdWdobmVzc01hcHx8IVQuZGlzcGxhY2VtZW50TWFwKSxmb2c6ISFKLHVzZUZvZzpULmZvZyxmb2dFeHAyOkomJkouaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhVC5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246VC5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpkLHNraW5uaW5nOiEwPT09eWUuaXNTa2lubmVkTWVzaCYmTWU+MCxtYXhCb25lczpNZSx1c2VWZXJ0ZXhUZXh0dXJlOnAsbW9ycGhUYXJnZXRzOiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6eWUuZ2VvbWV0cnkmJnllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj95ZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsbnVtRGlyTGlnaHRzOm5lLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpuZS5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpuZS5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpuZS5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpuZS5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6bmUuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOm5lLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOm5lLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOnMubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246cy5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOlQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6bi5zaGFkb3dNYXAuZW5hYmxlZCYmbGUubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTpuLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOlQudG9uZU1hcHBlZD9uLnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6bi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6VC5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6Mj09PVQuc2lkZSxmbGlwU2lkZWQ6MT09PVQuc2lkZSxkZXB0aFBhY2tpbmc6dm9pZCAwIT09VC5kZXB0aFBhY2tpbmcmJlQuZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6VC5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOlQuZXh0ZW5zaW9ucyYmVC5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6VC5leHRlbnNpb25zJiZULmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpULmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uKFQpe2xldCBuZT1bXTtpZihULnNoYWRlcklEP25lLnB1c2goVC5zaGFkZXJJRCk6KG5lLnB1c2goVC5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksbmUucHVzaChULmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSx2b2lkIDAhPT1ULmRlZmluZXMpZm9yKGxldCBsZSBpbiBULmRlZmluZXMpbmUucHVzaChsZSksbmUucHVzaChULmRlZmluZXNbbGVdKTtyZXR1cm4hMT09PVQuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKGZ1bmN0aW9uKFQsbmUpe1QucHVzaChuZS5wcmVjaXNpb24pLFQucHVzaChuZS5vdXRwdXRFbmNvZGluZyksVC5wdXNoKG5lLmVudk1hcE1vZGUpLFQucHVzaChuZS5jb21iaW5lKSxULnB1c2gobmUudmVydGV4VXZzKSxULnB1c2gobmUuZm9nRXhwMiksVC5wdXNoKG5lLnNpemVBdHRlbnVhdGlvbiksVC5wdXNoKG5lLm1heEJvbmVzKSxULnB1c2gobmUubW9ycGhUYXJnZXRzQ291bnQpLFQucHVzaChuZS5udW1EaXJMaWdodHMpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodHMpLFQucHVzaChuZS5udW1IZW1pTGlnaHRzKSxULnB1c2gobmUubnVtUmVjdEFyZWFMaWdodHMpLFQucHVzaChuZS5udW1EaXJMaWdodFNoYWRvd3MpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0U2hhZG93cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodFNoYWRvd3MpLFQucHVzaChuZS5zaGFkb3dNYXBUeXBlKSxULnB1c2gobmUudG9uZU1hcHBpbmcpLFQucHVzaChuZS5udW1DbGlwcGluZ1BsYW5lcyksVC5wdXNoKG5lLm51bUNsaXBJbnRlcnNlY3Rpb24pLFQucHVzaChuZS5hbHBoYVdyaXRlKX0obmUsVCksZnVuY3Rpb24oVCxuZSl7YS5kaXNhYmxlQWxsKCksbmUuaXNXZWJHTDImJmEuZW5hYmxlKDApLG5lLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJmEuZW5hYmxlKDEpLG5lLmluc3RhbmNpbmcmJmEuZW5hYmxlKDIpLG5lLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksbmUubWFwJiZhLmVuYWJsZSg0KSxuZS5tYXRjYXAmJmEuZW5hYmxlKDUpLG5lLmVudk1hcCYmYS5lbmFibGUoNiksbmUuZW52TWFwQ3ViZVVWJiZhLmVuYWJsZSg3KSxuZS5saWdodE1hcCYmYS5lbmFibGUoOCksbmUuYW9NYXAmJmEuZW5hYmxlKDkpLG5lLmVtaXNzaXZlTWFwJiZhLmVuYWJsZSgxMCksbmUuYnVtcE1hcCYmYS5lbmFibGUoMTEpLG5lLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLG5lLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxMyksbmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxNCksbmUuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksbmUuY2xlYXJjb2F0TWFwJiZhLmVuYWJsZSgxNiksbmUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZhLmVuYWJsZSgxNyksbmUuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksbmUuZGlzcGxhY2VtZW50TWFwJiZhLmVuYWJsZSgxOSksbmUuc3BlY3VsYXJNYXAmJmEuZW5hYmxlKDIwKSxuZS5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxuZS5tZXRhbG5lc3NNYXAmJmEuZW5hYmxlKDIyKSxuZS5ncmFkaWVudE1hcCYmYS5lbmFibGUoMjMpLG5lLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksbmUuYWxwaGFUZXN0JiZhLmVuYWJsZSgyNSksbmUudmVydGV4Q29sb3JzJiZhLmVuYWJsZSgyNiksbmUudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksbmUudmVydGV4VXZzJiZhLmVuYWJsZSgyOCksbmUudmVydGV4VGFuZ2VudHMmJmEuZW5hYmxlKDI5KSxuZS51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksbmUuZm9nJiZhLmVuYWJsZSgzMSksVC5wdXNoKGEubWFzayksYS5kaXNhYmxlQWxsKCksbmUudXNlRm9nJiZhLmVuYWJsZSgwKSxuZS5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksbmUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5lbmFibGUoMiksbmUuc2tpbm5pbmcmJmEuZW5hYmxlKDMpLG5lLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLG5lLm1vcnBoVGFyZ2V0cyYmYS5lbmFibGUoNSksbmUubW9ycGhOb3JtYWxzJiZhLmVuYWJsZSg2KSxuZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLG5lLnNoYWRvd01hcEVuYWJsZWQmJmEuZW5hYmxlKDgpLG5lLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzJiZhLmVuYWJsZSg5KSxuZS5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLG5lLmZsaXBTaWRlZCYmYS5lbmFibGUoMTEpLG5lLmRlcHRoUGFja2luZyYmYS5lbmFibGUoMTIpLG5lLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLG5lLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZhLmVuYWJsZSgxNCksbmUuc3BlY3VsYXJDb2xvck1hcCYmYS5lbmFibGUoMTUpLG5lLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLG5lLnRyYW5zbWlzc2lvbk1hcCYmYS5lbmFibGUoMTcpLG5lLnRoaWNrbmVzc01hcCYmYS5lbmFibGUoMTgpLG5lLnNoZWVuJiZhLmVuYWJsZSgxOSksbmUuc2hlZW5Db2xvck1hcCYmYS5lbmFibGUoMjApLG5lLnNoZWVuUm91Z2huZXNzTWFwJiZhLmVuYWJsZSgyMSksbmUuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMiksVC5wdXNoKGEubWFzayl9KG5lLFQpLG5lLnB1c2gobi5vdXRwdXRFbmNvZGluZykpLG5lLnB1c2goVC5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLG5lLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24oVCl7bGV0IGxlLG5lPUNbVC50eXBlXTtyZXR1cm4gbGU9bmU/VTVlLmNsb25lKFV1W25lXS51bmlmb3Jtcyk6VC51bmlmb3JtcyxsZX0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24oVCxuZSl7bGV0IGxlO2ZvcihsZXQgaGU9MCx5ZT1jLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1jW2hlXTtpZihKLmNhY2hlS2V5PT09bmUpe2xlPUosKytsZS51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1sZSYmKGxlPW5ldyBVemUobixuZSxULG8pLGMucHVzaChsZSkpLGxlfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbihUKXtpZigwPT0tLVQudXNlZFRpbWVzKXtsZXQgbmU9Yy5pbmRleE9mKFQpO2NbbmVdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxULmRlc3Ryb3koKX19LHJlbGVhc2VTaGFkZXJDYWNoZTpmdW5jdGlvbihUKXtsLnJlbW92ZShUKX0scHJvZ3JhbXM6YyxkaXNwb3NlOmZ1bmN0aW9uKCl7bC5kaXNwb3NlKCl9fX1mdW5jdGlvbiBHemUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8pe2xldCBzPW4uZ2V0KG8pO3JldHVybiB2b2lkIDA9PT1zJiYocz17fSxuLnNldChvLHMpKSxzfSxyZW1vdmU6ZnVuY3Rpb24obyl7bi5kZWxldGUobyl9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7bi5nZXQobylbc109YX0sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBXemUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ubWF0ZXJpYWwuaWQhPT10Lm1hdGVyaWFsLmlkP24ubWF0ZXJpYWwuaWQtdC5tYXRlcmlhbC5pZDpuLnohPT10Lno/bi56LXQuejpuLmlkLXQuaWR9ZnVuY3Rpb24gRmFlKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLnohPT10Lno/dC56LW4uejpuLmlkLXQuaWR9ZnVuY3Rpb24gTmFlKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoZCxwLGgsZixtLEMpe2xldCBfPW5bdF07cmV0dXJuIHZvaWQgMD09PV8/KF89e2lkOmQuaWQsb2JqZWN0OmQsZ2VvbWV0cnk6cCxtYXRlcmlhbDpoLGdyb3VwT3JkZXI6ZixyZW5kZXJPcmRlcjpkLnJlbmRlck9yZGVyLHo6bSxncm91cDpDfSxuW3RdPV8pOihfLmlkPWQuaWQsXy5vYmplY3Q9ZCxfLmdlb21ldHJ5PXAsXy5tYXRlcmlhbD1oLF8uZ3JvdXBPcmRlcj1mLF8ucmVuZGVyT3JkZXI9ZC5yZW5kZXJPcmRlcixfLno9bSxfLmdyb3VwPUMpLHQrKyxffXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6ZnVuY3Rpb24oKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24oZCxwLGgsZixtLEMpe2xldCBfPXMoZCxwLGgsZixtLEMpO2gudHJhbnNtaXNzaW9uPjA/aS5wdXNoKF8pOiEwPT09aC50cmFuc3BhcmVudD9yLnB1c2goXyk6ZS5wdXNoKF8pfSx1bnNoaWZ0OmZ1bmN0aW9uKGQscCxoLGYsbSxDKXtsZXQgXz1zKGQscCxoLGYsbSxDKTtoLnRyYW5zbWlzc2lvbj4wP2kudW5zaGlmdChfKTohMD09PWgudHJhbnNwYXJlbnQ/ci51bnNoaWZ0KF8pOmUudW5zaGlmdChfKX0sZmluaXNoOmZ1bmN0aW9uKCl7Zm9yKGxldCBkPXQscD1uLmxlbmd0aDtkPHA7ZCsrKXtsZXQgaD1uW2RdO2lmKG51bGw9PT1oLmlkKWJyZWFrO2guaWQ9bnVsbCxoLm9iamVjdD1udWxsLGguZ2VvbWV0cnk9bnVsbCxoLm1hdGVyaWFsPW51bGwsaC5ncm91cD1udWxsfX0sc29ydDpmdW5jdGlvbihkLHApe2UubGVuZ3RoPjEmJmUuc29ydChkfHxXemUpLGkubGVuZ3RoPjEmJmkuc29ydChwfHxGYWUpLHIubGVuZ3RoPjEmJnIuc29ydChwfHxGYWUpfX19ZnVuY3Rpb24gcXplKCl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihpLHIpe2xldCBvO3JldHVybiExPT09bi5oYXMoaSk/KG89bmV3IE5hZSxuLnNldChpLFtvXSkpOnI+PW4uZ2V0KGkpLmxlbmd0aD8obz1uZXcgTmFlLG4uZ2V0KGkpLnB1c2gobykpOm89bi5nZXQoaSlbcl0sb30sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBZemUoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3ICQsY29sb3I6bmV3IGFufTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsZGlyZWN0aW9uOm5ldyAkLGNvbG9yOm5ldyBhbixkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsY29sb3I6bmV3IGFuLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgJCxza3lDb2xvcjpuZXcgYW4sZ3JvdW5kQ29sb3I6bmV3IGFufTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBhbixwb3NpdGlvbjpuZXcgJCxoYWxmV2lkdGg6bmV3ICQsaGFsZkhlaWdodDpuZXcgJH19cmV0dXJuIG5bdC5pZF09ZSxlfX19dmFyIFF6ZT0wO2Z1bmN0aW9uIEt6ZShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gWnplKG4sdCl7bGV0IGU9bmV3IFl6ZSxpPWZ1bmN0aW9uKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgSmV9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBKZSxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIG5bdC5pZF09ZSxlfX19KCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgJCk7bGV0IG89bmV3ICQscz1uZXcgTW4sYT1uZXcgTW47cmV0dXJue3NldHVwOmZ1bmN0aW9uKHUsZCl7bGV0IHA9MCxoPTAsZj0wO2ZvcihsZXQgZmU9MDtmZTw5O2ZlKyspci5wcm9iZVtmZV0uc2V0KDAsMCwwKTtsZXQgbT0wLEM9MCxfPTAseT0wLEk9MCxBPTAsTz0wLGVlPTA7dS5zb3J0KEt6ZSk7bGV0IFg9ITAhPT1kP01hdGguUEk6MTtmb3IobGV0IGZlPTAsdmU9dS5sZW5ndGg7ZmU8dmU7ZmUrKyl7bGV0IFQ9dVtmZV0sbmU9VC5jb2xvcixsZT1ULmludGVuc2l0eSxoZT1ULmRpc3RhbmNlLHllPVQuc2hhZG93JiZULnNoYWRvdy5tYXA/VC5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihULmlzQW1iaWVudExpZ2h0KXArPW5lLnIqbGUqWCxoKz1uZS5nKmxlKlgsZis9bmUuYipsZSpYO2Vsc2UgaWYoVC5pc0xpZ2h0UHJvYmUpZm9yKGxldCBKPTA7Sjw5O0orKylyLnByb2JlW0pdLmFkZFNjYWxlZFZlY3RvcihULnNoLmNvZWZmaWNpZW50c1tKXSxsZSk7ZWxzZSBpZihULmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5jb2xvci5jb3B5KFQuY29sb3IpLm11bHRpcGx5U2NhbGFyKFQuaW50ZW5zaXR5KlgpLFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1ttXT1tZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW21dPXllLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbbV09VC5zaGFkb3cubWF0cml4LEErK31yLmRpcmVjdGlvbmFsW21dPUosbSsrfWVsc2UgaWYoVC5pc1Nwb3RMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksSi5jb2xvci5jb3B5KG5lKS5tdWx0aXBseVNjYWxhcihsZSpYKSxKLmRpc3RhbmNlPWhlLEouY29uZUNvcz1NYXRoLmNvcyhULmFuZ2xlKSxKLnBlbnVtYnJhQ29zPU1hdGguY29zKFQuYW5nbGUqKDEtVC5wZW51bWJyYSkpLEouZGVjYXk9VC5kZWNheSxULmNhc3RTaGFkb3cpe2xldCBhZT1ULnNoYWRvdyxtZT1pLmdldChUKTttZS5zaGFkb3dCaWFzPWFlLmJpYXMsbWUuc2hhZG93Tm9ybWFsQmlhcz1hZS5ub3JtYWxCaWFzLG1lLnNoYWRvd1JhZGl1cz1hZS5yYWRpdXMsbWUuc2hhZG93TWFwU2l6ZT1hZS5tYXBTaXplLHIuc3BvdFNoYWRvd1tfXT1tZSxyLnNwb3RTaGFkb3dNYXBbX109eWUsci5zcG90U2hhZG93TWF0cml4W19dPVQuc2hhZG93Lm1hdHJpeCxlZSsrfXIuc3BvdFtfXT1KLF8rK31lbHNlIGlmKFQuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLmNvbG9yLmNvcHkobmUpLm11bHRpcGx5U2NhbGFyKGxlKSxKLmhhbGZXaWR0aC5zZXQoLjUqVC53aWR0aCwwLDApLEouaGFsZkhlaWdodC5zZXQoMCwuNSpULmhlaWdodCwwKSxyLnJlY3RBcmVhW3ldPUoseSsrfWVsc2UgaWYoVC5pc1BvaW50TGlnaHQpe2xldCBKPWUuZ2V0KFQpO2lmKEouY29sb3IuY29weShULmNvbG9yKS5tdWx0aXBseVNjYWxhcihULmludGVuc2l0eSpYKSxKLmRpc3RhbmNlPVQuZGlzdGFuY2UsSi5kZWNheT1ULmRlY2F5LFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsbWUuc2hhZG93Q2FtZXJhTmVhcj1hZS5jYW1lcmEubmVhcixtZS5zaGFkb3dDYW1lcmFGYXI9YWUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W0NdPW1lLHIucG9pbnRTaGFkb3dNYXBbQ109eWUsci5wb2ludFNoYWRvd01hdHJpeFtDXT1ULnNoYWRvdy5tYXRyaXgsTysrfXIucG9pbnRbQ109SixDKyt9ZWxzZSBpZihULmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLnNreUNvbG9yLmNvcHkoVC5jb2xvcikubXVsdGlwbHlTY2FsYXIobGUqWCksSi5ncm91bmRDb2xvci5jb3B5KFQuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKGxlKlgpLHIuaGVtaVtJXT1KLEkrK319eT4wJiYodC5pc1dlYkdMMnx8ITA9PT1uLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPVB0LkxUQ19GTE9BVF8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19GTE9BVF8yKTohMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPyhyLnJlY3RBcmVhTFRDMT1QdC5MVENfSEFMRl8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxyLmFtYmllbnRbMF09cCxyLmFtYmllbnRbMV09aCxyLmFtYmllbnRbMl09ZjtsZXQgeGU9ci5oYXNoOyh4ZS5kaXJlY3Rpb25hbExlbmd0aCE9PW18fHhlLnBvaW50TGVuZ3RoIT09Q3x8eGUuc3BvdExlbmd0aCE9PV98fHhlLnJlY3RBcmVhTGVuZ3RoIT09eXx8eGUuaGVtaUxlbmd0aCE9PUl8fHhlLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PUF8fHhlLm51bVBvaW50U2hhZG93cyE9PU98fHhlLm51bVNwb3RTaGFkb3dzIT09ZWUpJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9bSxyLnNwb3QubGVuZ3RoPV8sci5yZWN0QXJlYS5sZW5ndGg9eSxyLnBvaW50Lmxlbmd0aD1DLHIuaGVtaS5sZW5ndGg9SSxyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1BLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPUEsci5wb2ludFNoYWRvdy5sZW5ndGg9TyxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1PLHIuc3BvdFNoYWRvdy5sZW5ndGg9ZWUsci5zcG90U2hhZG93TWFwLmxlbmd0aD1lZSxyLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1BLHIucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPU8sci5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1lZSx4ZS5kaXJlY3Rpb25hbExlbmd0aD1tLHhlLnBvaW50TGVuZ3RoPUMseGUuc3BvdExlbmd0aD1fLHhlLnJlY3RBcmVhTGVuZ3RoPXkseGUuaGVtaUxlbmd0aD1JLHhlLm51bURpcmVjdGlvbmFsU2hhZG93cz1BLHhlLm51bVBvaW50U2hhZG93cz1PLHhlLm51bVNwb3RTaGFkb3dzPWVlLHIudmVyc2lvbj1RemUrKyl9LHNldHVwVmlldzpmdW5jdGlvbih1LGQpe2xldCBwPTAsaD0wLGY9MCxtPTAsQz0wLF89ZC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB5PTAsST11Lmxlbmd0aDt5PEk7eSsrKXtsZXQgQT11W3ldO2lmKEEuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTz1yLmRpcmVjdGlvbmFsW3BdO08uZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLnRhcmdldC5tYXRyaXhXb3JsZCksTy5kaXJlY3Rpb24uc3ViKG8pLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxwKyt9ZWxzZSBpZihBLmlzU3BvdExpZ2h0KXtsZXQgTz1yLnNwb3RbZl07Ty5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksTy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoXyksTy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmRpcmVjdGlvbi5zdWIobyksTy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKF8pLGYrK31lbHNlIGlmKEEuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgTz1yLnJlY3RBcmVhW21dO08ucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8ucG9zaXRpb24uYXBwbHlNYXRyaXg0KF8pLGEuaWRlbnRpdHkoKSxzLmNvcHkoQS5tYXRyaXhXb3JsZCkscy5wcmVtdWx0aXBseShfKSxhLmV4dHJhY3RSb3RhdGlvbihzKSxPLmhhbGZXaWR0aC5zZXQoLjUqQS53aWR0aCwwLDApLE8uaGFsZkhlaWdodC5zZXQoMCwuNSpBLmhlaWdodCwwKSxPLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksTy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSxtKyt9ZWxzZSBpZihBLmlzUG9pbnRMaWdodCl7bGV0IE89ci5wb2ludFtoXTtPLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxPLnBvc2l0aW9uLmFwcGx5TWF0cml4NChfKSxoKyt9ZWxzZSBpZihBLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgTz1yLmhlbWlbQ107Ty5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxPLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxDKyt9fX0sc3RhdGU6cn19ZnVuY3Rpb24gTGFlKG4sdCl7bGV0IGU9bmV3IFp6ZShuLHQpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbigpe2kubGVuZ3RoPTAsci5sZW5ndGg9MH0sc3RhdGU6e2xpZ2h0c0FycmF5Omksc2hhZG93c0FycmF5OnIsbGlnaHRzOmV9LHNldHVwTGlnaHRzOmZ1bmN0aW9uKGQpe2Uuc2V0dXAoaSxkKX0sc2V0dXBMaWdodHNWaWV3OmZ1bmN0aW9uKGQpe2Uuc2V0dXBWaWV3KGksZCl9LHB1c2hMaWdodDpmdW5jdGlvbihkKXtpLnB1c2goZCl9LHB1c2hTaGFkb3c6ZnVuY3Rpb24oZCl7ci5wdXNoKGQpfX19ZnVuY3Rpb24gSnplKG4sdCl7bGV0IGU9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihvLHM9MCl7bGV0IGE7cmV0dXJuITE9PT1lLmhhcyhvKT8oYT1uZXcgTGFlKG4sdCksZS5zZXQobyxbYV0pKTpzPj1lLmdldChvKS5sZW5ndGg/KGE9bmV3IExhZShuLHQpLGUuZ2V0KG8pLnB1c2goYSkpOmE9ZS5nZXQobylbc10sYX0sZGlzcG9zZTpmdW5jdGlvbigpe2U9bmV3IFdlYWtNYXB9fX12YXIgdzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPTMyMDAsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVwdGhQYWNraW5nPXQuZGVwdGhQYWNraW5nLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfX07dzIucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7dmFyIE0yPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEaXN0YW5jZU1hdGVyaWFsIix0aGlzLnJlZmVyZW5jZVBvc2l0aW9uPW5ldyAkLHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX07ZnVuY3Rpb24gRWxlKG4sdCxlKXtsZXQgaT1uZXcgdnkscj1uZXcgSmUsbz1uZXcgSmUscz1uZXcgdHIsYT1uZXcgdzIoe2RlcHRoUGFja2luZzozMjAxfSksbD1uZXcgTTIsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsZD17MDoxLDE6MCwyOjJ9LHA9bmV3IHpkKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBKZX0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6InVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG51bmlmb3JtIGZsb2F0IHJhZGl1cztcbiNpbmNsdWRlIDxwYWNraW5nPlxudm9pZCBtYWluKCkge1xuXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xuXHRmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDtcblx0Zm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7XG5cdFx0ZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlO1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGVwdGg7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcblx0XHQjZW5kaWZcblx0fVxuXHRtZWFuID0gbWVhbiAvIHNhbXBsZXM7XG5cdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7XG5cdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xufSJ9KSxoPXAuY2xvbmUoKTtoLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGY9bmV3IEtpO2Yuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgbT1uZXcgeW8oZixwKSxDPXRoaXM7ZnVuY3Rpb24gXyhBLE8pe2xldCBlZT10LnVwZGF0ZShtKTtwLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1BLmJsdXJTYW1wbGVzJiYocC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMsaC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMscC5uZWVkc1VwZGF0ZT0hMCxoLm5lZWRzVXBkYXRlPSEwKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUEubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcFBhc3MpLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChPLG51bGwsZWUscCxtLG51bGwpLGgudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9QS5tYXBQYXNzLnRleHR1cmUsaC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxoLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KE8sbnVsbCxlZSxoLG0sbnVsbCl9ZnVuY3Rpb24geShBLE8sZWUsWCx4ZSxmZSx2ZSl7bGV0IFQ9bnVsbCxuZT0hMD09PVguaXNQb2ludExpZ2h0P0EuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpBLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoVD12b2lkIDAhPT1uZT9uZTohMD09PVguaXNQb2ludExpZ2h0P2w6YSxuLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PWVlLmNsaXBTaGFkb3dzJiYwIT09ZWUuY2xpcHBpbmdQbGFuZXMubGVuZ3RofHxlZS5kaXNwbGFjZW1lbnRNYXAmJjAhPT1lZS5kaXNwbGFjZW1lbnRTY2FsZXx8ZWUuYWxwaGFNYXAmJmVlLmFscGhhVGVzdD4wKXtsZXQgbGU9VC51dWlkLGhlPWVlLnV1aWQseWU9Y1tsZV07dm9pZCAwPT09eWUmJih5ZT17fSxjW2xlXT15ZSk7bGV0IEo9eWVbaGVdO3ZvaWQgMD09PUomJihKPVQuY2xvbmUoKSx5ZVtoZV09SiksVD1KfXJldHVybiBULnZpc2libGU9ZWUudmlzaWJsZSxULndpcmVmcmFtZT1lZS53aXJlZnJhbWUsVC5zaWRlPTM9PT12ZT9udWxsIT09ZWUuc2hhZG93U2lkZT9lZS5zaGFkb3dTaWRlOmVlLnNpZGU6bnVsbCE9PWVlLnNoYWRvd1NpZGU/ZWUuc2hhZG93U2lkZTpkW2VlLnNpZGVdLFQuYWxwaGFNYXA9ZWUuYWxwaGFNYXAsVC5hbHBoYVRlc3Q9ZWUuYWxwaGFUZXN0LFQuY2xpcFNoYWRvd3M9ZWUuY2xpcFNoYWRvd3MsVC5jbGlwcGluZ1BsYW5lcz1lZS5jbGlwcGluZ1BsYW5lcyxULmNsaXBJbnRlcnNlY3Rpb249ZWUuY2xpcEludGVyc2VjdGlvbixULmRpc3BsYWNlbWVudE1hcD1lZS5kaXNwbGFjZW1lbnRNYXAsVC5kaXNwbGFjZW1lbnRTY2FsZT1lZS5kaXNwbGFjZW1lbnRTY2FsZSxULmRpc3BsYWNlbWVudEJpYXM9ZWUuZGlzcGxhY2VtZW50QmlhcyxULndpcmVmcmFtZUxpbmV3aWR0aD1lZS53aXJlZnJhbWVMaW5ld2lkdGgsVC5saW5ld2lkdGg9ZWUubGluZXdpZHRoLCEwPT09WC5pc1BvaW50TGlnaHQmJiEwPT09VC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoVC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oWC5tYXRyaXhXb3JsZCksVC5uZWFyRGlzdGFuY2U9eGUsVC5mYXJEaXN0YW5jZT1mZSksVH1mdW5jdGlvbiBJKEEsTyxlZSxYLHhlKXtpZighMT09PUEudmlzaWJsZSlyZXR1cm47aWYoQS5sYXllcnMudGVzdChPLmxheWVycykmJihBLmlzTWVzaHx8QS5pc0xpbmV8fEEuaXNQb2ludHMpJiYoQS5jYXN0U2hhZG93fHxBLnJlY2VpdmVTaGFkb3cmJjM9PT14ZSkmJighQS5mcnVzdHVtQ3VsbGVkfHxpLmludGVyc2VjdHNPYmplY3QoQSkpKXtBLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGVlLm1hdHJpeFdvcmxkSW52ZXJzZSxBLm1hdHJpeFdvcmxkKTtsZXQgVD10LnVwZGF0ZShBKSxuZT1BLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobmUpKXtsZXQgbGU9VC5ncm91cHM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1sZVtoZV0sYWU9bmVbSi5tYXRlcmlhbEluZGV4XTtpZihhZSYmYWUudmlzaWJsZSl7bGV0IG1lPXkoQSwwLGFlLFgsZWUubmVhcixlZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KGVlLG51bGwsVCxtZSxBLEopfX19ZWxzZSBpZihuZS52aXNpYmxlKXtsZXQgbGU9eShBLDAsbmUsWCxlZS5uZWFyLGVlLmZhcix4ZSk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoZWUsbnVsbCxULGxlLEEsbnVsbCl9fWxldCB2ZT1BLmNoaWxkcmVuO2ZvcihsZXQgVD0wLG5lPXZlLmxlbmd0aDtUPG5lO1QrKylJKHZlW1RdLE8sZWUsWCx4ZSl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT0xLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEEsTyxlZSl7aWYoITE9PT1DLmVuYWJsZWR8fCExPT09Qy5hdXRvVXBkYXRlJiYhMT09PUMubmVlZHNVcGRhdGV8fDA9PT1BLmxlbmd0aClyZXR1cm47bGV0IFg9bi5nZXRSZW5kZXJUYXJnZXQoKSx4ZT1uLmdldEFjdGl2ZUN1YmVGYWNlKCksZmU9bi5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLHZlPW4uc3RhdGU7dmUuc2V0QmxlbmRpbmcoMCksdmUuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSx2ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLHZlLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IFQ9MCxuZT1BLmxlbmd0aDtUPG5lO1QrKyl7bGV0IGxlPUFbVF0saGU9bGUuc2hhZG93O2lmKHZvaWQgMD09PWhlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsbGUsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oZS5hdXRvVXBkYXRlJiYhMT09PWhlLm5lZWRzVXBkYXRlKWNvbnRpbnVlO3IuY29weShoZS5tYXBTaXplKTtsZXQgeWU9aGUuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseSh5ZSksby5jb3B5KGhlLm1hcFNpemUpLChyLng+dXx8ci55PnUpJiYoci54PnUmJihvLng9TWF0aC5mbG9vcih1L3llLngpLHIueD1vLngqeWUueCxoZS5tYXBTaXplLng9by54KSxyLnk+dSYmKG8ueT1NYXRoLmZsb29yKHUveWUueSksci55PW8ueSp5ZS55LGhlLm1hcFNpemUueT1vLnkpKSxudWxsPT09aGUubWFwJiYhaGUuaXNQb2ludExpZ2h0U2hhZG93JiYzPT09dGhpcy50eXBlKXtsZXQgYWU9e21pbkZpbHRlcjpicyxtYWdGaWx0ZXI6YnMsZm9ybWF0OnpzfTtoZS5tYXA9bmV3IHZhKHIueCxyLnksYWUpLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUubWFwUGFzcz1uZXcgdmEoci54LHIueSxhZSksaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1udWxsPT09aGUubWFwJiYoaGUubWFwPW5ldyB2YShyLngsci55LHttaW5GaWx0ZXI6SW8sbWFnRmlsdGVyOklvLGZvcm1hdDp6c30pLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksbi5zZXRSZW5kZXJUYXJnZXQoaGUubWFwKSxuLmNsZWFyKCk7bGV0IEo9aGUuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgYWU9MDthZTxKO2FlKyspe2xldCBtZT1oZS5nZXRWaWV3cG9ydChhZSk7cy5zZXQoby54Km1lLngsby55Km1lLnksby54Km1lLnosby55Km1lLncpLHZlLnZpZXdwb3J0KHMpLGhlLnVwZGF0ZU1hdHJpY2VzKGxlLGFlKSxpPWhlLmdldEZydXN0dW0oKSxJKE8sZWUsaGUuY2FtZXJhLGxlLHRoaXMudHlwZSl9IWhlLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSYmXyhoZSxlZSksaGUubmVlZHNVcGRhdGU9ITF9Qy5uZWVkc1VwZGF0ZT0hMSxuLnNldFJlbmRlclRhcmdldChYLHhlLGZlKX19ZnVuY3Rpb24gdDhlKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyLGE9bmV3IGZ1bmN0aW9uKCl7bGV0IHVlPSExLEp0PW5ldyB0cixVdD1udWxsLFRuPW5ldyB0cigwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihHZSl7VXQhPT1HZSYmIXVlJiYobi5jb2xvck1hc2soR2UsR2UsR2UsR2UpLFV0PUdlKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2UsQ24sbWksbXIsb3MpeyEwPT09b3MmJihHZSo9bXIsQ24qPW1yLG1pKj1tciksSnQuc2V0KEdlLENuLG1pLG1yKSwhMT09PVRuLmVxdWFscyhKdCkmJihuLmNsZWFyQ29sb3IoR2UsQ24sbWksbXIpLFRuLmNvcHkoSnQpKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxVdD1udWxsLFRuLnNldCgtMSwwLDAsMCl9fX0sbD1uZXcgZnVuY3Rpb24oKXtsZXQgdWU9ITEsSnQ9bnVsbCxVdD1udWxsLFRuPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oR2Upe0dlP1JlKDI5MjkpOkFuKDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKEdlKXtKdCE9PUdlJiYhdWUmJihuLmRlcHRoTWFzayhHZSksSnQ9R2UpfSxzZXRGdW5jOmZ1bmN0aW9uKEdlKXtpZihVdCE9PUdlKXtpZihHZSlzd2l0Y2goR2Upe2Nhc2UgMDpuLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgMTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgMjpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgMzpkZWZhdWx0Om4uZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSA0Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSA1Om4uZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSA2Om4uZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSA3Om4uZGVwdGhGdW5jKDUxNyl9ZWxzZSBuLmRlcHRoRnVuYyg1MTUpO1V0PUdlfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2Upe1RuIT09R2UmJihuLmNsZWFyRGVwdGgoR2UpLFRuPUdlKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbH19fSxjPW5ldyBmdW5jdGlvbigpe2xldCB1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oVHIpe3VlfHwoVHI/UmUoMjk2MCk6QW4oMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKFRyKXtKdCE9PVRyJiYhdWUmJihuLnN0ZW5jaWxNYXNrKFRyKSxKdD1Ucil9LHNldEZ1bmM6ZnVuY3Rpb24oVHIsZWwsV3MpeyhVdCE9PVRyfHxUbiE9PWVsfHxHZSE9PVdzKSYmKG4uc3RlbmNpbEZ1bmMoVHIsZWwsV3MpLFV0PVRyLFRuPWVsLEdlPVdzKX0sc2V0T3A6ZnVuY3Rpb24oVHIsZWwsV3MpeyhDbiE9PVRyfHxtaSE9PWVsfHxtciE9PVdzKSYmKG4uc3RlbmNpbE9wKFRyLGVsLFdzKSxDbj1UcixtaT1lbCxtcj1Xcyl9LHNldExvY2tlZDpmdW5jdGlvbihUcil7dWU9VHJ9LHNldENsZWFyOmZ1bmN0aW9uKFRyKXtvcyE9PVRyJiYobi5jbGVhclN0ZW5jaWwoVHIpLG9zPVRyKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGx9fX0sdT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsbGU9bi5nZXRQYXJhbWV0ZXIoMzU2NjEpLGhlPSExLHllPTAsSj1uLmdldFBhcmFtZXRlcig3OTM4KTstMSE9PUouaW5kZXhPZigiV2ViR0wiKT8oeWU9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0xKTotMSE9PUouaW5kZXhPZigiT3BlbkdMIEVTIikmJih5ZT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0yKTtsZXQgYWU9bnVsbCxtZT17fSxqZT1uLmdldFBhcmFtZXRlcigzMDg4KSxNZT1uLmdldFBhcmFtZXRlcigyOTc4KSxGZT0obmV3IHRyKS5mcm9tQXJyYXkoamUpLHV0PShuZXcgdHIpLmZyb21BcnJheShNZSk7ZnVuY3Rpb24gU3QodWUsSnQsVXQpe2xldCBUbj1uZXcgVWludDhBcnJheSg0KSxHZT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKHVlLEdlKSxuLnRleFBhcmFtZXRlcmkodWUsMTAyNDEsOTcyOCksbi50ZXhQYXJhbWV0ZXJpKHVlLDEwMjQwLDk3MjgpO2ZvcihsZXQgQ249MDtDbjxVdDtDbisrKW4udGV4SW1hZ2UyRChKdCtDbiwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLFRuKTtyZXR1cm4gR2V9bGV0IGd0PXt9O2Z1bmN0aW9uIFJlKHVlKXshMCE9PXVbdWVdJiYobi5lbmFibGUodWUpLHVbdWVdPSEwKX1mdW5jdGlvbiBBbih1ZSl7ITEhPT11W3VlXSYmKG4uZGlzYWJsZSh1ZSksdVt1ZV09ITEpfWd0WzM1NTNdPVN0KDM1NTMsMzU1MywxKSxndFszNDA2N109U3QoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksUmUoMjkyOSksbC5zZXRGdW5jKDMpLFllKCExKSx4dCgxKSxSZSgyODg0KSxpZSgwKTtsZXQgdnQ9ezEwMDozMjc3NCwxMDE6MzI3NzgsMTAyOjMyNzc5fTtpZihpKXZ0WzEwM109MzI3NzUsdnRbMTA0XT0zMjc3NjtlbHNle2xldCB1ZT10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT11ZSYmKHZ0WzEwM109dWUuTUlOX0VYVCx2dFsxMDRdPXVlLk1BWF9FWFQpfWxldCBfdD17MjAwOjAsMjAxOjEsMjAyOjc2OCwyMDQ6NzcwLDIxMDo3NzYsMjA4Ojc3NCwyMDY6NzcyLDIwMzo3NjksMjA1Ojc3MSwyMDk6Nzc1LDIwNzo3NzN9O2Z1bmN0aW9uIGllKHVlLEp0LFV0LFRuLEdlLENuLG1pLG1yKXtpZigwIT09dWUpe2lmKCExPT09bSYmKFJlKDMwNDIpLG09ITApLDU9PT11ZSlHZT1HZXx8SnQsQ249Q258fFV0LG1pPW1pfHxUbiwoSnQhPT1ffHxHZSE9PUEpJiYobi5ibGVuZEVxdWF0aW9uU2VwYXJhdGUodnRbSnRdLHZ0W0dlXSksXz1KdCxBPUdlKSwoVXQhPT15fHxUbiE9PUl8fENuIT09T3x8bWkhPT1lZSkmJihuLmJsZW5kRnVuY1NlcGFyYXRlKF90W1V0XSxfdFtUbl0sX3RbQ25dLF90W21pXSkseT1VdCxJPVRuLE89Q24sZWU9bWkpLEM9dWUsWD1udWxsO2Vsc2UgaWYodWUhPT1DfHxtciE9PVgpe2lmKCgxMDAhPT1ffHwxMDAhPT1BKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksXz0xMDAsQT0xMDApLG1yKXN3aXRjaCh1ZSl7Y2FzZSAxOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSA0Om4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9ZWxzZSBzd2l0Y2godWUpe2Nhc2UgMTpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIDQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9eT1udWxsLEk9bnVsbCxPPW51bGwsZWU9bnVsbCxDPXVlLFg9bXJ9fWVsc2UhMD09PW0mJihBbigzMDQyKSxtPSExKX1mdW5jdGlvbiBZZSh1ZSl7eGUhPT11ZSYmKG4uZnJvbnRGYWNlKHVlPzIzMDQ6MjMwNSkseGU9dWUpfWZ1bmN0aW9uIHh0KHVlKXswIT09dWU/KFJlKDI4ODQpLHVlIT09ZmUmJm4uY3VsbEZhY2UoMT09PXVlPzEwMjk6Mj09PXVlPzEwMjg6MTAzMikpOkFuKDI4ODQpLGZlPXVlfWZ1bmN0aW9uIHNuKHVlLEp0LFV0KXt1ZT8oUmUoMzI4MjMpLChUIT09SnR8fG5lIT09VXQpJiYobi5wb2x5Z29uT2Zmc2V0KEp0LFV0KSxUPUp0LG5lPVV0KSk6QW4oMzI4MjMpfWZ1bmN0aW9uIG9pKHVlKXt2b2lkIDA9PT11ZSYmKHVlPTMzOTg0K2xlLTEpLGFlIT09dWUmJihuLmFjdGl2ZVRleHR1cmUodWUpLGFlPXVlKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOlJlLGRpc2FibGU6QW4sYmluZEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHVlLEp0KXtyZXR1cm4gZFt1ZV0hPT1KdCYmKG4uYmluZEZyYW1lYnVmZmVyKHVlLEp0KSxkW3VlXT1KdCxpJiYoMzYwMDk9PT11ZSYmKGRbMzYxNjBdPUp0KSwzNjE2MD09PXVlJiYoZFszNjAwOV09SnQpKSwhMCl9LGRyYXdCdWZmZXJzOmZ1bmN0aW9uKHVlLEp0KXtsZXQgVXQ9aCxUbj0hMTtpZih1ZSlpZihVdD1wLmdldChKdCksdm9pZCAwPT09VXQmJihVdD1bXSxwLnNldChKdCxVdCkpLHVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpe2xldCBHZT11ZS50ZXh0dXJlO2lmKFV0Lmxlbmd0aCE9PUdlLmxlbmd0aHx8MzYwNjQhPT1VdFswXSl7Zm9yKGxldCBDbj0wLG1pPUdlLmxlbmd0aDtDbjxtaTtDbisrKVV0W0NuXT0zNjA2NCtDbjtVdC5sZW5ndGg9R2UubGVuZ3RoLFRuPSEwfX1lbHNlIDM2MDY0IT09VXRbMF0mJihVdFswXT0zNjA2NCxUbj0hMCk7ZWxzZSAxMDI5IT09VXRbMF0mJihVdFswXT0xMDI5LFRuPSEwKTtUbiYmKGUuaXNXZWJHTDI/bi5kcmF3QnVmZmVycyhVdCk6dC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpLmRyYXdCdWZmZXJzV0VCR0woVXQpKX0sdXNlUHJvZ3JhbTpmdW5jdGlvbih1ZSl7cmV0dXJuIGYhPT11ZSYmKG4udXNlUHJvZ3JhbSh1ZSksZj11ZSwhMCl9LHNldEJsZW5kaW5nOmllLHNldE1hdGVyaWFsOmZ1bmN0aW9uKHVlLEp0KXsyPT09dWUuc2lkZT9BbigyODg0KTpSZSgyODg0KTtsZXQgVXQ9MT09PXVlLnNpZGU7SnQmJihVdD0hVXQpLFllKFV0KSwxPT09dWUuYmxlbmRpbmcmJiExPT09dWUudHJhbnNwYXJlbnQ/aWUoMCk6aWUodWUuYmxlbmRpbmcsdWUuYmxlbmRFcXVhdGlvbix1ZS5ibGVuZFNyYyx1ZS5ibGVuZERzdCx1ZS5ibGVuZEVxdWF0aW9uQWxwaGEsdWUuYmxlbmRTcmNBbHBoYSx1ZS5ibGVuZERzdEFscGhhLHVlLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKHVlLmRlcHRoRnVuYyksbC5zZXRUZXN0KHVlLmRlcHRoVGVzdCksbC5zZXRNYXNrKHVlLmRlcHRoV3JpdGUpLGEuc2V0TWFzayh1ZS5jb2xvcldyaXRlKTtsZXQgVG49dWUuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChUbiksVG4mJihjLnNldE1hc2sodWUuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKHVlLnN0ZW5jaWxGdW5jLHVlLnN0ZW5jaWxSZWYsdWUuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKHVlLnN0ZW5jaWxGYWlsLHVlLnN0ZW5jaWxaRmFpbCx1ZS5zdGVuY2lsWlBhc3MpKSxzbih1ZS5wb2x5Z29uT2Zmc2V0LHVlLnBvbHlnb25PZmZzZXRGYWN0b3IsdWUucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PXVlLmFscGhhVG9Db3ZlcmFnZT9SZSgzMjkyNik6QW4oMzI5MjYpfSxzZXRGbGlwU2lkZWQ6WWUsc2V0Q3VsbEZhY2U6eHQsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKHVlKXt1ZSE9PXZlJiYoaGUmJm4ubGluZVdpZHRoKHVlKSx2ZT11ZSl9LHNldFBvbHlnb25PZmZzZXQ6c24sc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24odWUpe3VlP1JlKDMwODkpOkFuKDMwODkpfSxhY3RpdmVUZXh0dXJlOm9pLGJpbmRUZXh0dXJlOmZ1bmN0aW9uKHVlLEp0KXtudWxsPT09YWUmJm9pKCk7bGV0IFV0PW1lW2FlXTt2b2lkIDA9PT1VdCYmKFV0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sbWVbYWVdPVV0KSwoVXQudHlwZSE9PXVlfHxVdC50ZXh0dXJlIT09SnQpJiYobi5iaW5kVGV4dHVyZSh1ZSxKdHx8Z3RbdWVdKSxVdC50eXBlPXVlLFV0LnRleHR1cmU9SnQpfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uKCl7bGV0IHVlPW1lW2FlXTt2b2lkIDAhPT11ZSYmdm9pZCAwIT09dWUudHlwZSYmKG4uYmluZFRleHR1cmUodWUudHlwZSxudWxsKSx1ZS50eXBlPXZvaWQgMCx1ZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4U3RvcmFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3RvcmFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHRleFN0b3JhZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTNEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHNjaXNzb3I6ZnVuY3Rpb24odWUpeyExPT09RmUuZXF1YWxzKHVlKSYmKG4uc2Npc3Nvcih1ZS54LHVlLnksdWUueix1ZS53KSxGZS5jb3B5KHVlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKHVlKXshMT09PXV0LmVxdWFscyh1ZSkmJihuLnZpZXdwb3J0KHVlLngsdWUueSx1ZS56LHVlLncpLHV0LmNvcHkodWUpKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PWkmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHU9e30sYWU9bnVsbCxtZT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsRmUuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHV0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX19fWZ1bmN0aW9uIG44ZShuLHQsZSxpLHIsbyxzKXtsZXQgbSxhPXIuaXNXZWJHTDIsbD1yLm1heFRleHR1cmVzLGM9ci5tYXhDdWJlbWFwU2l6ZSx1PXIubWF4VGV4dHVyZVNpemUsZD1yLm1heFNhbXBsZXMsaD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxmPW5ldyBXZWFrTWFwLEM9ITE7dHJ5e0M9dHlwZW9mIE9mZnNjcmVlbkNhbnZhczwidSImJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaHt9ZnVuY3Rpb24gXyhRLEYpe3JldHVybiBDP25ldyBPZmZzY3JlZW5DYW52YXMoUSxGKTpTTSgiY2FudmFzIil9ZnVuY3Rpb24geShRLEYsVmUsQ3Qpe2xldCB0bj0xO2lmKChRLndpZHRoPkN0fHxRLmhlaWdodD5DdCkmJih0bj1DdC9NYXRoLm1heChRLndpZHRoLFEuaGVpZ2h0KSksdG48MXx8ITA9PT1GKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJlEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZRIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJlEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IEJlPUY/QTVlOk1hdGguZmxvb3IsZ249QmUodG4qUS53aWR0aCksbG49QmUodG4qUS5oZWlnaHQpO3ZvaWQgMD09PW0mJihtPV8oZ24sbG4pKTtsZXQgRnQ9VmU/Xyhnbixsbik6bTtyZXR1cm4gRnQud2lkdGg9Z24sRnQuaGVpZ2h0PWxuLEZ0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKFEsMCwwLGduLGxuKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK1Eud2lkdGgrIngiK1EuaGVpZ2h0KyIpIHRvICgiK2duKyJ4IitsbisiKS4iKSxGdH1yZXR1cm4iZGF0YSJpbiBRJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrUS53aWR0aCsieCIrUS5oZWlnaHQrIikuIiksUX1yZXR1cm4gUX1mdW5jdGlvbiBJKFEpe3JldHVybiBpYWUoUS53aWR0aCkmJmlhZShRLmhlaWdodCl9ZnVuY3Rpb24gTyhRLEYpe3JldHVybiBRLmdlbmVyYXRlTWlwbWFwcyYmRiYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1ic31mdW5jdGlvbiBlZShRKXtuLmdlbmVyYXRlTWlwbWFwKFEpfWZ1bmN0aW9uIFgoUSxGLFZlLEN0LHRuPSExKXtpZighMT09PWEpcmV0dXJuIEY7aWYobnVsbCE9PVEpe2lmKHZvaWQgMCE9PW5bUV0pcmV0dXJuIG5bUV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK1ErIiciKX1sZXQgQmU9RjtyZXR1cm4gNjQwMz09PUYmJig1MTI2PT09VmUmJihCZT0zMzMyNiksNTEzMT09PVZlJiYoQmU9MzMzMjUpLDUxMjE9PT1WZSYmKEJlPTMzMzIxKSksMzMzMTk9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzMzMjgpLDUxMzE9PT1WZSYmKEJlPTMzMzI3KSw1MTIxPT09VmUmJihCZT0zMzMyMykpLDY0MDg9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzQ4MzYpLDUxMzE9PT1WZSYmKEJlPTM0ODQyKSw1MTIxPT09VmUmJihCZT1DdD09PUZyJiYhMT09PXRuPzM1OTA3OjMyODU2KSwzMjgxOT09PVZlJiYoQmU9MzI4NTQpLDMyODIwPT09VmUmJihCZT0zMjg1NSkpLCgzMzMyNT09PUJlfHwzMzMyNj09PUJlfHwzMzMyNz09PUJlfHwzMzMyOD09PUJlfHwzNDg0Mj09PUJlfHwzNDgzNj09PUJlKSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxCZX1mdW5jdGlvbiB4ZShRLEYsVmUpe3JldHVybiEwPT09TyhRLFZlKXx8US5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icz9NYXRoLmxvZzIoTWF0aC5tYXgoRi53aWR0aCxGLmhlaWdodCkpKzE6dm9pZCAwIT09US5taXBtYXBzJiZRLm1pcG1hcHMubGVuZ3RoPjA/US5taXBtYXBzLmxlbmd0aDpRLmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkoUS5pbWFnZSk/Ri5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIGZlKFEpe3JldHVybiBRPT09SW98fDEwMDQ9PT1RfHwxMDA1PT09UT85NzI4Ojk3Mjl9ZnVuY3Rpb24gdmUoUSl7bGV0IEY9US50YXJnZXQ7Ri5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix2ZSksZnVuY3Rpb24oUSl7bGV0IEY9aS5nZXQoUSk7dm9pZCAwIT09Ri5fX3dlYmdsSW5pdCYmKG4uZGVsZXRlVGV4dHVyZShGLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShRKSl9KEYpLEYuaXNWaWRlb1RleHR1cmUmJmYuZGVsZXRlKEYpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gVChRKXtsZXQgRj1RLnRhcmdldDtGLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFQpLGZ1bmN0aW9uKFEpe2xldCBGPVEudGV4dHVyZSxWZT1pLmdldChRKSxDdD1pLmdldChGKTtpZihRKXtpZih2b2lkIDAhPT1DdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShDdC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksUS5kZXB0aFRleHR1cmUmJlEuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgdG49MDt0bjw2O3RuKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXJbdG5dKSxWZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlclt0bl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXIpLFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoVmUuX193ZWJnbERlcHRoYnVmZmVyKSxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoVmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihWZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKFEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IHRuPTAsQmU9Ri5sZW5ndGg7dG48QmU7dG4rKyl7bGV0IGduPWkuZ2V0KEZbdG5dKTtnbi5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShnbi5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUoRlt0bl0pfWkucmVtb3ZlKEYpLGkucmVtb3ZlKFEpfX0oRil9bGV0IGhlPTA7ZnVuY3Rpb24gYWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7aWYoUS5pc1ZpZGVvVGV4dHVyZSYmZnVuY3Rpb24oUSl7bGV0IEY9cy5yZW5kZXIuZnJhbWU7Zi5nZXQoUSkhPT1GJiYoZi5zZXQoUSxGKSxRLnVwZGF0ZSgpKX0oUSksUS52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbil7bGV0IEN0PVEuaW1hZ2U7aWYodm9pZCAwPT09Q3QpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09Q3QuY29tcGxldGUpcmV0dXJuIHZvaWQgUmUoVmUsUSxGKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU1MyxWZS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gTWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9mdW5jdGlvbihRLEYsVmUpe2lmKDYhPT1GLmltYWdlLmxlbmd0aClyZXR1cm47Z3QoUSxGKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUoMzQwNjcsUS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxGLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEYucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEYudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBDdD1GJiYoRi5pc0NvbXByZXNzZWRUZXh0dXJlfHxGLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLHRuPUYuaW1hZ2VbMF0mJkYuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxCZT1bXTtmb3IobGV0IEdlPTA7R2U8NjtHZSsrKUJlW0dlXT1DdHx8dG4/dG4/Ri5pbWFnZVtHZV0uaW1hZ2U6Ri5pbWFnZVtHZV06eShGLmltYWdlW0dlXSwhMSwhMCxjKSxCZVtHZV09c24oRixCZVtHZV0pO2xldCBUbixnbj1CZVswXSxsbj1JKGduKXx8YSxGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPWEmJiEwIT09Ri5pc1ZpZGVvVGV4dHVyZSxKdD12b2lkIDA9PT1RLl9fdmVyc2lvbixVdD14ZShGLGduLGxuKTtpZihTdCgzNDA2NyxGLGxuKSxDdCl7dWUmJkp0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxVdCxMbixnbi53aWR0aCxnbi5oZWlnaHQpO2ZvcihsZXQgR2U9MDtHZTw2O0dlKyspe1RuPUJlW0dlXS5taXBtYXBzO2ZvcihsZXQgQ249MDtDbjxUbi5sZW5ndGg7Q24rKyl7bGV0IG1pPVRuW0NuXTtGLmZvcm1hdCE9PXpzP251bGwhPT1GdD91ZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsbWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStHZSxDbixMbixtaS53aWR0aCxtaS5oZWlnaHQsMCxtaS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsa3QsbWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuLExuLG1pLndpZHRoLG1pLmhlaWdodCwwLEZ0LGt0LG1pLmRhdGEpfX19ZWxzZXtUbj1GLm1pcG1hcHMsdWUmJkp0JiYoVG4ubGVuZ3RoPjAmJlV0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsVXQsTG4sQmVbMF0ud2lkdGgsQmVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBHZT0wO0dlPDY7R2UrKylpZih0bil7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEJlW0dlXS53aWR0aCxCZVtHZV0uaGVpZ2h0LEZ0LGt0LEJlW0dlXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrR2UsMCxMbixCZVtHZV0ud2lkdGgsQmVbR2VdLmhlaWdodCwwLEZ0LGt0LEJlW0dlXS5kYXRhKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtcj1UbltDbl0uaW1hZ2VbR2VdLmltYWdlO3VlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStHZSxDbisxLDAsMCxtci53aWR0aCxtci5oZWlnaHQsRnQsa3QsbXIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sbXIud2lkdGgsbXIuaGVpZ2h0LDAsRnQsa3QsbXIuZGF0YSl9fWVsc2V7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEZ0LGt0LEJlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLDAsTG4sRnQsa3QsQmVbR2VdKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtaT1UbltDbl07dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuKzEsMCwwLEZ0LGt0LG1pLmltYWdlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sRnQsa3QsbWkuaW1hZ2VbR2VdKX19fU8oRixsbikmJmVlKDM0MDY3KSxRLl9fdmVyc2lvbj1GLnZlcnNpb24sRi5vblVwZGF0ZSYmRi5vblVwZGF0ZShGKX0oVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzQwNjcsVmUuX193ZWJnbFRleHR1cmUpKX1sZXQgRmU9ezFlMzoxMDQ5NyxbWmFdOjMzMDcxLDEwMDI6MzM2NDh9LHV0PXtbSW9dOjk3MjgsMTAwNDo5OTg0LDEwMDU6OTk4NixbYnNdOjk3MjksMTAwNzo5OTg1LDEwMDg6OTk4N307ZnVuY3Rpb24gU3QoUSxGLFZlKXtpZihWZT8obi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsRmVbRi53cmFwU10pLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLEZlW0Yud3JhcFRdKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MixGZVtGLndyYXBSXSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDAsdXRbRi5tYWdGaWx0ZXJdKSxuLnRleFBhcmFtZXRlcmkoUSwxMDI0MSx1dFtGLm1pbkZpbHRlcl0pKToobi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsMzMwNzEpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLDMzMDcxKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MiwzMzA3MSksKEYud3JhcFMhPT1aYXx8Ri53cmFwVCE9PVphKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQwLGZlKEYubWFnRmlsdGVyKSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDEsZmUoRi5taW5GaWx0ZXIpKSxGLm1pbkZpbHRlciE9PUlvJiZGLm1pbkZpbHRlciE9PWJzJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksITA9PT10LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2xldCBDdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoRi50eXBlPT09WW0mJiExPT09dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwhMT09PWEmJkYudHlwZT09PXV5JiYhMT09PXQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXJldHVybjsoRi5hbmlzb3Ryb3B5PjF8fGkuZ2V0KEYpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYobi50ZXhQYXJhbWV0ZXJmKFEsQ3QuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsTWF0aC5taW4oRi5hbmlzb3Ryb3B5LHIuZ2V0TWF4QW5pc290cm9weSgpKSksaS5nZXQoRikuX19jdXJyZW50QW5pc290cm9weT1GLmFuaXNvdHJvcHkpfX1mdW5jdGlvbiBndChRLEYpe3ZvaWQgMD09PVEuX193ZWJnbEluaXQmJihRLl9fd2ViZ2xJbml0PSEwLEYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdmUpLFEuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gUmUoUSxGLFZlKXtsZXQgQ3Q9MzU1MztGLmlzRGF0YVRleHR1cmUyREFycmF5JiYoQ3Q9MzU4NjYpLEYuaXNEYXRhVGV4dHVyZTNEJiYoQ3Q9MzI4NzkpLGd0KFEsRiksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1ZlKSxlLmJpbmRUZXh0dXJlKEN0LFEuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsRi5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSxGLnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyxGLnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgdG49ZnVuY3Rpb24oUSl7cmV0dXJuIWEmJihRLndyYXBTIT09WmF8fFEud3JhcFQhPT1aYXx8US5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icyl9KEYpJiYhMT09PUkoRi5pbWFnZSksQmU9eShGLmltYWdlLHRuLCExLHUpO0JlPXNuKEYsQmUpO2xldCBnbj1JKEJlKXx8YSxsbj1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksRnQ9by5jb252ZXJ0KEYudHlwZSksa3Q9WChGLmludGVybmFsRm9ybWF0LGxuLEZ0LEYuZW5jb2RpbmcsRi5pc1ZpZGVvVGV4dHVyZSk7U3QoQ3QsRixnbik7bGV0IExuLHVlPUYubWlwbWFwcyxKdD1hJiYhMCE9PUYuaXNWaWRlb1RleHR1cmUsVXQ9dm9pZCAwPT09US5fX3ZlcnNpb24sVG49eGUoRixCZSxnbik7aWYoRi5pc0RlcHRoVGV4dHVyZSlrdD02NDAyLGE/a3Q9Ri50eXBlPT09WW0/MzYwMTI6MTAxND09PUYudHlwZT8zMzE5MDpGLnR5cGU9PT1keT8zNTA1NjozMzE4OTpGLnR5cGU9PT1ZbSYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksRi5mb3JtYXQ9PT1RbSYmNjQwMj09PWt0JiZGLnR5cGUhPT13TSYmMTAxNCE9PUYudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLEYudHlwZT13TSxGdD1vLmNvbnZlcnQoRi50eXBlKSksRi5mb3JtYXQ9PT1teSYmNjQwMj09PWt0JiYoa3Q9MzQwNDEsRi50eXBlIT09ZHkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksRi50eXBlPWR5LEZ0PW8uY29udmVydChGLnR5cGUpKSksSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxrdCxCZS53aWR0aCxCZS5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LDAsbG4sRnQsbnVsbCk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUpaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKTtGLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIEp0PyhVdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNDb21wcmVzc2VkVGV4dHVyZSl7SnQmJlV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LHVlWzBdLndpZHRoLHVlWzBdLmhlaWdodCk7Zm9yKGxldCBHZT0wLENuPXVlLmxlbmd0aDtHZTxDbjtHZSsrKUxuPXVlW0dlXSxGLmZvcm1hdCE9PXpzP251bGwhPT1sbj9KdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixMbi5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM1NTMsR2Usa3QsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsTG4uZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6SnQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKX1lbHNlIGlmKEYuaXNEYXRhVGV4dHVyZTJEQXJyYXkpSnQ/KFV0JiZlLnRleFN0b3JhZ2UzRCgzNTg2NixUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzNTg2NiwwLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLDAsbG4sRnQsQmUuZGF0YSk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUzRClKdD8oVXQmJmUudGV4U3RvcmFnZTNEKDMyODc5LFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLGxuLEZ0LEJlLmRhdGEpKTplLnRleEltYWdlM0QoMzI4NzksMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNGcmFtZWJ1ZmZlclRleHR1cmUpSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsQmUud2lkdGgsQmUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGt0LEJlLndpZHRoLEJlLmhlaWdodCwwLGxuLEZ0LG51bGwpO2Vsc2UgaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLEdlLDAsMCxsbixGdCxMbik6ZS50ZXhJbWFnZTJEKDM1NTMsR2Usa3QsbG4sRnQsTG4pO0YuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgSnQ/KFV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsbG4sRnQsQmUpKTplLnRleEltYWdlMkQoMzU1MywwLGt0LGxuLEZ0LEJlKTtPKEYsZ24pJiZlZShDdCksUS5fX3ZlcnNpb249Ri52ZXJzaW9uLEYub25VcGRhdGUmJkYub25VcGRhdGUoRil9ZnVuY3Rpb24gRXQoUSxGLFZlLEN0LHRuKXtsZXQgQmU9by5jb252ZXJ0KFZlLmZvcm1hdCxWZS5lbmNvZGluZyksZ249by5jb252ZXJ0KFZlLnR5cGUpLGxuPVgoVmUuaW50ZXJuYWxGb3JtYXQsQmUsZ24sVmUuZW5jb2RpbmcpO2kuZ2V0KEYpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KDMyODc5PT09dG58fDM1ODY2PT09dG4/ZS50ZXhJbWFnZTNEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCxGLmRlcHRoLDAsQmUsZ24sbnVsbCk6ZS50ZXhJbWFnZTJEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCwwLEJlLGduLG51bGwpKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxRKSxGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDAseHQoRikpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDApLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIG9uKFEsRixWZSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLFEpLEYuZGVwdGhCdWZmZXImJiFGLnN0ZW5jaWxCdWZmZXIpe2xldCBDdD0zMzE4OTtpZihWZXx8Ri51c2VSZW5kZXJUb1RleHR1cmUpe2xldCB0bj1GLmRlcHRoVGV4dHVyZTt0biYmdG4uaXNEZXB0aFRleHR1cmUmJih0bi50eXBlPT09WW0/Q3Q9MzYwMTI6MTAxND09PXRuLnR5cGUmJihDdD0zMzE5MCkpO2xldCBCZT14dChGKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KX1lbHNlIG4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxDdCxGLndpZHRoLEYuaGVpZ2h0KTtuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLFEpfWVsc2UgaWYoRi5kZXB0aEJ1ZmZlciYmRi5zdGVuY2lsQnVmZmVyKXtsZXQgQ3Q9eHQoRik7VmUmJkYudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOkYudXNlUmVuZGVyVG9UZXh0dXJlP2gucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSxGLndpZHRoLEYuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLFEpfWVsc2V7bGV0IEN0PSEwPT09Ri5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP0YudGV4dHVyZVswXTpGLnRleHR1cmUsdG49by5jb252ZXJ0KEN0LmZvcm1hdCxDdC5lbmNvZGluZyksQmU9by5jb252ZXJ0KEN0LnR5cGUpLGduPVgoQ3QuaW50ZXJuYWxGb3JtYXQsdG4sQmUsQ3QuZW5jb2RpbmcpLGxuPXh0KEYpO1ZlJiZGLnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZ24sRi53aWR0aCxGLmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIHZ0KFEpe2xldCBGPWkuZ2V0KFEpLFZlPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihRLmRlcHRoVGV4dHVyZSYmIUYuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYoVmUpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpOyFmdW5jdGlvbihRLEYpe2lmKEYmJkYuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUSksIUYuZGVwdGhUZXh0dXJlfHwhRi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7KCFpLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmV8fEYuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoIT09Ri53aWR0aHx8Ri5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0IT09Ri5oZWlnaHQpJiYoRi5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9Ri53aWR0aCxGLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9Ri5oZWlnaHQsRi5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLGFlKEYuZGVwdGhUZXh0dXJlLDApO2xldCBDdD1pLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsdG49eHQoRik7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0PT09UW0pRi51c2VSZW5kZXJUb1RleHR1cmU/aC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsQ3QsMCx0bik6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLEN0LDApO2Vsc2V7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0IT09bXkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzMzMDYsMzU1MyxDdCwwLHRuKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsQ3QsMCl9fShGLl9fd2ViZ2xGcmFtZWJ1ZmZlcixRKX1lbHNlIGlmKFZlKXtGLl9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IEN0PTA7Q3Q8NjtDdCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEYuX193ZWJnbEZyYW1lYnVmZmVyW0N0XSksRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdLFEsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRi5fX3dlYmdsRnJhbWVidWZmZXIpLEYuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXIsUSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24geHQoUSl7cmV0dXJuIGEmJihRLnVzZVJlbmRlcmJ1ZmZlcnx8US51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGQsUS5zYW1wbGVzKTowfWZ1bmN0aW9uIHNuKFEsRil7bGV0IFZlPVEuZW5jb2RpbmcsQ3Q9US5mb3JtYXQsdG49US50eXBlO3JldHVybiEwPT09US5pc0NvbXByZXNzZWRUZXh0dXJlfHwhMD09PVEuaXNWaWRlb1RleHR1cmV8fDEwMzU9PT1RLmZvcm1hdHx8VmUhPT1EaCYmKFZlPT09RnI/ITE9PT1hPyEwPT09dC5oYXMoIkVYVF9zUkdCIikmJkN0PT09enM/KFEuZm9ybWF0PTEwMzUsUS5taW5GaWx0ZXI9YnMsUS5nZW5lcmF0ZU1pcG1hcHM9ITEpOkY9VWQuc1JHQlRvTGluZWFyKEYpOihDdCE9PXpzfHx0biE9PVNoKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsVmUpKSxGfWxldCBTbj0hMSxvaT0hMTt0aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtsZXQgUT1oZTtyZXR1cm4gUT49bCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICIrUSsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLGhlKz0xLFF9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24oKXtoZT0wfSx0aGlzLnNldFRleHR1cmUyRD1hZSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKFEsRil7bGV0IFZlPWkuZ2V0KFEpO1EudmVyc2lvbj4wJiZWZS5fX3ZlcnNpb24hPT1RLnZlcnNpb24/UmUoVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU4NjYsVmUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlM0Q9ZnVuY3Rpb24oUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9SZShWZSxRLEYpOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrRiksZS5iaW5kVGV4dHVyZSgzMjg3OSxWZS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmVDdWJlPU1lLHRoaXMucmViaW5kVGV4dHVyZXM9ZnVuY3Rpb24oUSxGLFZlKXtsZXQgQ3Q9aS5nZXQoUSk7dm9pZCAwIT09RiYmRXQoQ3QuX193ZWJnbEZyYW1lYnVmZmVyLFEsUS50ZXh0dXJlLDM2MDY0LDM1NTMpLHZvaWQgMCE9PVZlJiZ2dChRKX0sdGhpcy5zZXR1cFJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtsZXQgRj1RLnRleHR1cmUsVmU9aS5nZXQoUSksQ3Q9aS5nZXQoRik7US5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixUKSwhMCE9PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyYmKHZvaWQgMD09PUN0Ll9fd2ViZ2xUZXh0dXJlJiYoQ3QuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkpLEN0Ll9fdmVyc2lvbj1GLnZlcnNpb24scy5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IHRuPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCxCZT0hMD09PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyxnbj1GLmlzRGF0YVRleHR1cmUzRHx8Ri5pc0RhdGFUZXh0dXJlMkRBcnJheSxsbj1JKFEpfHxhO2lmKHRuKXtWZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBGdD0wO0Z0PDY7RnQrKylWZS5fX3dlYmdsRnJhbWVidWZmZXJbRnRdPW4uY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCksQmUpaWYoci5kcmF3QnVmZmVycyl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1pLmdldChGdFtrdF0pO3ZvaWQgMD09PXVlLl9fd2ViZ2xUZXh0dXJlJiYodWUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPXh0KFEpO24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHVlLExuLFEud2lkdGgsUS5oZWlnaHQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLFZlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSxRLmRlcHRoQnVmZmVyJiYoVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLFEsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKHRuKXtlLmJpbmRUZXh0dXJlKDM0MDY3LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdCgzNDA2NyxGLGxuKTtmb3IobGV0IEZ0PTA7RnQ8NjtGdCsrKUV0KFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltGdF0sUSxGLDM2MDY0LDM0MDY5K0Z0KTtPKEYsbG4pJiZlZSgzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihCZSl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1GdFtrdF0sSnQ9aS5nZXQodWUpO2UuYmluZFRleHR1cmUoMzU1MyxKdC5fX3dlYmdsVGV4dHVyZSksU3QoMzU1Myx1ZSxsbiksRXQoVmUuX193ZWJnbEZyYW1lYnVmZmVyLFEsdWUsMzYwNjQra3QsMzU1MyksTyh1ZSxsbikmJmVlKDM1NTMpfWUudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IEZ0PTM1NTM7Z24mJihhP0Z0PUYuaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxlLmJpbmRUZXh0dXJlKEZ0LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdChGdCxGLGxuKSxFdChWZS5fX3dlYmdsRnJhbWVidWZmZXIsUSxGLDM2MDY0LEZ0KSxPKEYsbG4pJiZlZShGdCksZS51bmJpbmRUZXh0dXJlKCl9US5kZXB0aEJ1ZmZlciYmdnQoUSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKFEpe2xldCBGPUkoUSl8fGEsVmU9ITA9PT1RLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/US50ZXh0dXJlOltRLnRleHR1cmVdO2ZvcihsZXQgQ3Q9MCx0bj1WZS5sZW5ndGg7Q3Q8dG47Q3QrKyl7bGV0IEJlPVZlW0N0XTtpZihPKEJlLEYpKXtsZXQgZ249US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLGxuPWkuZ2V0KEJlKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKGduLGxuKSxlZShnbiksZS51bmJpbmRUZXh0dXJlKCl9fX0sdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtsZXQgRj1RLndpZHRoLFZlPVEuaGVpZ2h0LEN0PTE2Mzg0LHRuPVszNjA2NF0sQmU9US5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O1EuZGVwdGhCdWZmZXImJnRuLnB1c2goQmUpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fChRLmRlcHRoQnVmZmVyJiYoQ3R8PTI1NiksUS5zdGVuY2lsQnVmZmVyJiYoQ3R8PTEwMjQpKTtsZXQgZ249aS5nZXQoUSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsZ24uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxnbi5fX3dlYmdsRnJhbWVidWZmZXIpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkmJihuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxbQmVdKSxuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOSxbQmVdKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLEYsVmUsMCwwLEYsVmUsQ3QsOTcyOCksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsdG4pLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LGduLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX0sdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPXZ0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9RXQsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWZ1bmN0aW9uKFEsRil7USYmUS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1TbiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLFNuPSEwKSxRPVEudGV4dHVyZSksYWUoUSxGKX0sdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oUSxGKXtRJiZRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoITE9PT1vaSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxvaT0hMCksUT1RLnRleHR1cmUpLE1lKFEsRil9fWZ1bmN0aW9uIGk4ZShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtyZXR1cm57Y29udmVydDpmdW5jdGlvbihvLHM9bnVsbCl7bGV0IGE7aWYobz09PVNoKXJldHVybiA1MTIxO2lmKDEwMTc9PT1vKXJldHVybiAzMjgxOTtpZigxMDE4PT09bylyZXR1cm4gMzI4MjA7aWYoMTAxMD09PW8pcmV0dXJuIDUxMjA7aWYoMTAxMT09PW8pcmV0dXJuIDUxMjI7aWYobz09PXdNKXJldHVybiA1MTIzO2lmKDEwMTM9PT1vKXJldHVybiA1MTI0O2lmKDEwMTQ9PT1vKXJldHVybiA1MTI1O2lmKG89PT1ZbSlyZXR1cm4gNTEyNjtpZihvPT09dXkpcmV0dXJuIGk/NTEzMTooYT10LmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1hP2EuSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYoMTAyMT09PW8pcmV0dXJuIDY0MDY7aWYobz09PXpzKXJldHVybiA2NDA4O2lmKDEwMjQ9PT1vKXJldHVybiA2NDA5O2lmKDEwMjU9PT1vKXJldHVybiA2NDEwO2lmKG89PT1RbSlyZXR1cm4gNjQwMjtpZihvPT09bXkpcmV0dXJuIDM0MDQxO2lmKDEwMjg9PT1vKXJldHVybiA2NDAzO2lmKDEwMzU9PT1vKXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLG51bGwhPT1hP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZigxMDI5PT09bylyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PW8pcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT1vKXJldHVybiAzMzMyMDtpZigxMDMzPT09bylyZXR1cm4gMzYyNDk7aWYoMzM3NzY9PT1vfHwzMzc3Nz09PW98fDMzNzc4PT09b3x8MzM3Nzk9PT1vKWlmKHM9PT1Gcil7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDMzNzc2PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNle2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzM3NzY9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzc9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKDMzNzc4PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigzMzc3OT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9aWYoMzU4NDA9PT1vfHwzNTg0MT09PW98fDM1ODQyPT09b3x8MzU4NDM9PT1vKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNTg0MD09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0MT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZigzNTg0Mj09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDM9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWlmKDM2MTk2PT09bylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YT9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZigzNzQ5Mj09PW98fDM3NDk2PT09byl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDM3NDkyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYoMzc0OTY9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9aWYoMzc4MDg9PT1vfHwzNzgwOT09PW98fDM3ODEwPT09b3x8Mzc4MTE9PT1vfHwzNzgxMj09PW98fDM3ODEzPT09b3x8Mzc4MTQ9PT1vfHwzNzgxNT09PW98fDM3ODE2PT09b3x8Mzc4MTc9PT1vfHwzNzgxOD09PW98fDM3ODE5PT09b3x8Mzc4MjA9PT1vfHwzNzgyMT09PW8pe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzc4MDg9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO2lmKDM3ODA5PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZigzNzgxMD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYoMzc4MTE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO2lmKDM3ODEyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZigzNzgxMz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYoMzc4MTQ9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO2lmKDM3ODE1PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZigzNzgxNj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZigzNzgxNz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtpZigzNzgxOD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZigzNzgxOT09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKDM3ODIwPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7aWYoMzc4MjE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1pZigzNjQ5Mj09PW8pe2lmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNjQ5Mj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1yZXR1cm4gbz09PWR5P2k/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09YT9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fU0yLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTMj1jbGFzcyBleHRlbmRzIHhze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtTMi5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgWG09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtYbS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgcjhlPXt0eXBlOiJtb3ZlIn0seU09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IFhtLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgWG0sdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3ICQpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBYbSx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgJCksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxpKXtsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PWEmJihyPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLGkpLG51bGwhPT1yJiYoYS5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCksYS5tYXRyaXguZGVjb21wb3NlKGEucG9zaXRpb24sYS5yb3RhdGlvbixhLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhhLmhhc0xpbmVhclZlbG9jaXR5PSEwLGEubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6YS5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8oYS5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsYS5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOmEuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChyOGUpKSksYyYmdC5oYW5kKXtzPSEwO2ZvcihsZXQgbSBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBDPWUuZ2V0Sm9pbnRQb3NlKG0saSk7aWYodm9pZCAwPT09Yy5qb2ludHNbbS5qb2ludE5hbWVdKXtsZXQgeT1uZXcgWG07eS5tYXRyaXhBdXRvVXBkYXRlPSExLHkudmlzaWJsZT0hMSxjLmpvaW50c1ttLmpvaW50TmFtZV09eSxjLmFkZCh5KX1sZXQgXz1jLmpvaW50c1ttLmpvaW50TmFtZV07bnVsbCE9PUMmJihfLm1hdHJpeC5mcm9tQXJyYXkoQy50cmFuc2Zvcm0ubWF0cml4KSxfLm1hdHJpeC5kZWNvbXBvc2UoXy5wb3NpdGlvbixfLnJvdGF0aW9uLF8uc2NhbGUpLF8uam9pbnRSYWRpdXM9Qy5yYWRpdXMpLF8udmlzaWJsZT1udWxsIT09Q31sZXQgcD1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLnBvc2l0aW9uLmRpc3RhbmNlVG8oYy5qb2ludHNbInRodW1iLXRpcCJdLnBvc2l0aW9uKSxoPS4wMixmPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPmgrZj8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJnA8PWgtZiYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbnVsbCE9PWwmJnQuZ3JpcFNwYWNlJiYobz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSksbnVsbCE9PW8mJihsLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLG8ubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KG8ubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLG8uYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KG8uYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PXIpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09YyYmKGMudmlzaWJsZT1udWxsIT09cyksdGhpc319LFBNPWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7aWYoKHU9dm9pZCAwIT09dT91OlFtKSE9PVFtJiZ1IT09bXkpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWkmJnU9PT1RbSYmKGk9d00pLHZvaWQgMD09PWkmJnU9PT1teSYmKGk9ZHkpLHN1cGVyKG51bGwscixvLHMsYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1hP2E6SW8sdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bD9sOklvLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtQTS5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIEFVPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLG89MSxzPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxkPW51bGwscD1udWxsLGg9ITEsZj1udWxsLG09ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLEM9bnVsbCxfPW51bGwseT1bXSxJPW5ldyBNYXAsQT1uZXcgeHM7QS5sYXllcnMuZW5hYmxlKDEpLEEudmlld3BvcnQ9bmV3IHRyO2xldCBPPW5ldyB4cztPLmxheWVycy5lbmFibGUoMiksTy52aWV3cG9ydD1uZXcgdHI7bGV0IGVlPVtBLE9dLFg9bmV3IFMyO1gubGF5ZXJzLmVuYWJsZSgxKSxYLmxheWVycy5lbmFibGUoMik7bGV0IHhlPW51bGwsZmU9bnVsbDtmdW5jdGlvbiB2ZShNZSl7bGV0IEZlPUkuZ2V0KE1lLmlucHV0U291cmNlKTtGZSYmRmUuZGlzcGF0Y2hFdmVudCh7dHlwZTpNZS50eXBlLGRhdGE6TWUuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBUKCl7SS5mb3JFYWNoKGZ1bmN0aW9uKE1lLEZlKXtNZS5kaXNjb25uZWN0KEZlKX0pLEkuY2xlYXIoKSx4ZT1udWxsLGZlPW51bGwsdC5zZXRSZW5kZXJUYXJnZXQoQykscD1udWxsLGQ9bnVsbCx1PW51bGwscj1udWxsLF89bnVsbCxqZS5zdG9wKCksaS5pc1ByZXNlbnRpbmc9ITEsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uZW5kIn0pfWZ1bmN0aW9uIG5lKE1lKXtsZXQgRmU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCB1dD0wO3V0PHkubGVuZ3RoO3V0KyspSS5zZXQoRmVbdXRdLHlbdXRdKTtmb3IobGV0IHV0PTA7dXQ8TWUucmVtb3ZlZC5sZW5ndGg7dXQrKyl7bGV0IFN0PU1lLnJlbW92ZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmKGd0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpTdH0pLEkuZGVsZXRlKFN0KSl9Zm9yKGxldCB1dD0wO3V0PE1lLmFkZGVkLmxlbmd0aDt1dCsrKXtsZXQgU3Q9TWUuYWRkZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmZ3QuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOlN0fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKE1lKXtvPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKE1lKXthPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZDpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKE1lKXtpZihyPU1lLG51bGwhPT1yKXtpZihDPXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0Iix2ZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIixUKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIsbmUpLCEwIT09bS54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PXIucmVuZGVyU3RhdGUubGF5ZXJzfHwhMT09PXQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKXA9bmV3IFhSV2ViR0xMYXllcihyLGUse2FudGlhbGlhczp2b2lkIDAhPT1yLnJlbmRlclN0YXRlLmxheWVyc3x8bS5hbnRpYWxpYXMsYWxwaGE6bS5hbHBoYSxkZXB0aDptLmRlcHRoLHN0ZW5jaWw6bS5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpwfSksXz1uZXcgdmEocC5mcmFtZWJ1ZmZlcldpZHRoLHAuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTtlbHNle2g9bS5hbnRpYWxpYXM7bGV0IEZlPW51bGwsdXQ9bnVsbCxTdD1udWxsO20uZGVwdGgmJihTdD1tLnN0ZW5jaWw/MzUwNTY6MzMxOTAsRmU9bS5zdGVuY2lsP215OlFtLHV0PW0uc3RlbmNpbD9keTp3TSk7bGV0IGd0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09RnI/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6U3Qsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxkPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKGd0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2RdfSksXz1oP25ldyBFTShkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGRlcHRoVGV4dHVyZTpuZXcgUE0oZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHV0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEZlKSxzdGVuY2lsQnVmZmVyOm0uc3RlbmNpbCxpZ25vcmVEZXB0aDpkLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTpuZXcgdmEoZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6enMsdHlwZTpTaCxkZXB0aFRleHR1cmU6bmV3IFBNKGQudGV4dHVyZVdpZHRoLGQudGV4dHVyZUhlaWdodCx1dCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZSksc3RlbmNpbEJ1ZmZlcjptLnN0ZW5jaWwsaWdub3JlRGVwdGg6ZC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9Xy5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLHM9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksamUuc2V0Q29udGV4dChyKSxqZS5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07bGV0IGxlPW5ldyAkLGhlPW5ldyAkO2Z1bmN0aW9uIEooTWUsRmUpe251bGw9PT1GZT9NZS5tYXRyaXhXb3JsZC5jb3B5KE1lLm1hdHJpeCk6TWUubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhGZS5tYXRyaXhXb3JsZCxNZS5tYXRyaXgpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihNZSl7aWYobnVsbD09PXIpcmV0dXJuO1gubmVhcj1PLm5lYXI9QS5uZWFyPU1lLm5lYXIsWC5mYXI9Ty5mYXI9QS5mYXI9TWUuZmFyLCh4ZSE9PVgubmVhcnx8ZmUhPT1YLmZhcikmJihyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6WC5uZWFyLGRlcHRoRmFyOlguZmFyfSkseGU9WC5uZWFyLGZlPVguZmFyKTtsZXQgRmU9TWUucGFyZW50LHV0PVguY2FtZXJhcztKKFgsRmUpO2ZvcihsZXQgZ3Q9MDtndDx1dC5sZW5ndGg7Z3QrKylKKHV0W2d0XSxGZSk7WC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoWC5wb3NpdGlvbixYLnF1YXRlcm5pb24sWC5zY2FsZSksTWUucG9zaXRpb24uY29weShYLnBvc2l0aW9uKSxNZS5xdWF0ZXJuaW9uLmNvcHkoWC5xdWF0ZXJuaW9uKSxNZS5zY2FsZS5jb3B5KFguc2NhbGUpLE1lLm1hdHJpeC5jb3B5KFgubWF0cml4KSxNZS5tYXRyaXhXb3JsZC5jb3B5KFgubWF0cml4V29ybGQpO2xldCBTdD1NZS5jaGlsZHJlbjtmb3IobGV0IGd0PTAsUmU9U3QubGVuZ3RoO2d0PFJlO2d0KyspU3RbZ3RdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09dXQubGVuZ3RoP2Z1bmN0aW9uKE1lLEZlLHV0KXtsZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oRmUubWF0cml4V29ybGQpLGhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih1dC5tYXRyaXhXb3JsZCk7bGV0IFN0PWxlLmRpc3RhbmNlVG8oaGUpLGd0PUZlLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsUmU9dXQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxBbj1ndFsxNF0vKGd0WzEwXS0xKSxFdD1ndFsxNF0vKGd0WzEwXSsxKSxvbj0oZ3RbOV0rMSkvZ3RbNV0sQ2U9KGd0WzldLTEpL2d0WzVdLHZ0PShndFs4XS0xKS9ndFswXSxfdD0oUmVbOF0rMSkvUmVbMF0saWU9QW4qdnQsY3Q9QW4qX3QsWWU9U3QvKC12dCtfdCkseHQ9WWUqLXZ0O0ZlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShNZS5wb3NpdGlvbixNZS5xdWF0ZXJuaW9uLE1lLnNjYWxlKSxNZS50cmFuc2xhdGVYKHh0KSxNZS50cmFuc2xhdGVaKFllKSxNZS5tYXRyaXhXb3JsZC5jb21wb3NlKE1lLnBvc2l0aW9uLE1lLnF1YXRlcm5pb24sTWUuc2NhbGUpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgaHQ9QW4rWWUsc249RXQrWWU7TWUucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoaWUteHQsY3QrKFN0LXh0KSxvbipFdC9zbipodCxDZSpFdC9zbipodCxodCxzbil9KFgsQSxPKTpYLnByb2plY3Rpb25NYXRyaXguY29weShBLnByb2plY3Rpb25NYXRyaXgpfSx0aGlzLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiBYfSx0aGlzLmdldEZvdmVhdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT09ZD9kLmZpeGVkRm92ZWF0aW9uOm51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246dm9pZCAwfSx0aGlzLnNldEZvdmVhdGlvbj1mdW5jdGlvbihNZSl7bnVsbCE9PWQmJihkLmZpeGVkRm92ZWF0aW9uPU1lKSxudWxsIT09cCYmdm9pZCAwIT09cC5maXhlZEZvdmVhdGlvbiYmKHAuZml4ZWRGb3ZlYXRpb249TWUpfTtsZXQgYWU9bnVsbCxqZT1uZXcgZ2xlO2plLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oTWUsRmUpe2lmKGM9RmUuZ2V0Vmlld2VyUG9zZShzKSxmPUZlLG51bGwhPT1jKXtsZXQgU3Q9Yy52aWV3cztudWxsIT09cCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIoXyxwLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldChfKSk7bGV0IGd0PSExO1N0Lmxlbmd0aCE9PVguY2FtZXJhcy5sZW5ndGgmJihYLmNhbWVyYXMubGVuZ3RoPTAsZ3Q9ITApO2ZvcihsZXQgUmU9MDtSZTxTdC5sZW5ndGg7UmUrKyl7bGV0IEFuPVN0W1JlXSxFdD1udWxsO2lmKG51bGwhPT1wKUV0PXAuZ2V0Vmlld3BvcnQoQW4pO2Vsc2V7bGV0IENlPXUuZ2V0Vmlld1N1YkltYWdlKGQsQW4pO0V0PUNlLnZpZXdwb3J0LDA9PT1SZSYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoXyxDZS5jb2xvclRleHR1cmUsZC5pZ25vcmVEZXB0aFZhbHVlcz92b2lkIDA6Q2UuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoXykpfWxldCBvbj1lZVtSZV07b24ubWF0cml4LmZyb21BcnJheShBbi50cmFuc2Zvcm0ubWF0cml4KSxvbi5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShBbi5wcm9qZWN0aW9uTWF0cml4KSxvbi52aWV3cG9ydC5zZXQoRXQueCxFdC55LEV0LndpZHRoLEV0LmhlaWdodCksMD09PVJlJiZYLm1hdHJpeC5jb3B5KG9uLm1hdHJpeCksITA9PT1ndCYmWC5jYW1lcmFzLnB1c2gob24pfX1sZXQgdXQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBTdD0wO1N0PHkubGVuZ3RoO1N0KyspeVtTdF0udXBkYXRlKHV0W1N0XSxGZSxzKTthZSYmYWUoTWUsRmUpLGY9bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihNZSl7YWU9TWV9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBvOGUobil7ZnVuY3Rpb24gaShfLHkpe18ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHkseS5jb2xvciYmXy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvcikseS5lbWlzc2l2ZSYmXy5lbWlzc2l2ZS52YWx1ZS5jb3B5KHkuZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHkuZW1pc3NpdmVJbnRlbnNpdHkpLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuc3BlY3VsYXJNYXAmJihfLnNwZWN1bGFyTWFwLnZhbHVlPXkuc3BlY3VsYXJNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCk7bGV0IEEsTyxJPW4uZ2V0KHkpLmVudk1hcDtJJiYoXy5lbnZNYXAudmFsdWU9SSxfLmZsaXBFbnZNYXAudmFsdWU9SS5pc0N1YmVUZXh0dXJlJiYhMT09PUkuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsXy5yZWZsZWN0aXZpdHkudmFsdWU9eS5yZWZsZWN0aXZpdHksXy5pb3IudmFsdWU9eS5pb3IsXy5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eS5yZWZyYWN0aW9uUmF0aW8pLHkubGlnaHRNYXAmJihfLmxpZ2h0TWFwLnZhbHVlPXkubGlnaHRNYXAsXy5saWdodE1hcEludGVuc2l0eS52YWx1ZT15LmxpZ2h0TWFwSW50ZW5zaXR5KSx5LmFvTWFwJiYoXy5hb01hcC52YWx1ZT15LmFvTWFwLF8uYW9NYXBJbnRlbnNpdHkudmFsdWU9eS5hb01hcEludGVuc2l0eSkseS5tYXA/QT15Lm1hcDp5LnNwZWN1bGFyTWFwP0E9eS5zcGVjdWxhck1hcDp5LmRpc3BsYWNlbWVudE1hcD9BPXkuZGlzcGxhY2VtZW50TWFwOnkubm9ybWFsTWFwP0E9eS5ub3JtYWxNYXA6eS5idW1wTWFwP0E9eS5idW1wTWFwOnkucm91Z2huZXNzTWFwP0E9eS5yb3VnaG5lc3NNYXA6eS5tZXRhbG5lc3NNYXA/QT15Lm1ldGFsbmVzc01hcDp5LmFscGhhTWFwP0E9eS5hbHBoYU1hcDp5LmVtaXNzaXZlTWFwP0E9eS5lbWlzc2l2ZU1hcDp5LmNsZWFyY29hdE1hcD9BPXkuY2xlYXJjb2F0TWFwOnkuY2xlYXJjb2F0Tm9ybWFsTWFwP0E9eS5jbGVhcmNvYXROb3JtYWxNYXA6eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/QT15LmNsZWFyY29hdFJvdWdobmVzc01hcDp5LnNwZWN1bGFySW50ZW5zaXR5TWFwP0E9eS5zcGVjdWxhckludGVuc2l0eU1hcDp5LnNwZWN1bGFyQ29sb3JNYXA/QT15LnNwZWN1bGFyQ29sb3JNYXA6eS50cmFuc21pc3Npb25NYXA/QT15LnRyYW5zbWlzc2lvbk1hcDp5LnRoaWNrbmVzc01hcD9BPXkudGhpY2tuZXNzTWFwOnkuc2hlZW5Db2xvck1hcD9BPXkuc2hlZW5Db2xvck1hcDp5LnNoZWVuUm91Z2huZXNzTWFwJiYoQT15LnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1BJiYoQS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoQT1BLnRleHR1cmUpLCEwPT09QS5tYXRyaXhBdXRvVXBkYXRlJiZBLnVwZGF0ZU1hdHJpeCgpLF8udXZUcmFuc2Zvcm0udmFsdWUuY29weShBLm1hdHJpeCkpLHkuYW9NYXA/Tz15LmFvTWFwOnkubGlnaHRNYXAmJihPPXkubGlnaHRNYXApLHZvaWQgMCE9PU8mJihPLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihPPU8udGV4dHVyZSksITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51djJUcmFuc2Zvcm0udmFsdWUuY29weShPLm1hdHJpeCkpfWZ1bmN0aW9uIGQoXyx5KXtfLnJvdWdobmVzcy52YWx1ZT15LnJvdWdobmVzcyxfLm1ldGFsbmVzcy52YWx1ZT15Lm1ldGFsbmVzcyx5LnJvdWdobmVzc01hcCYmKF8ucm91Z2huZXNzTWFwLnZhbHVlPXkucm91Z2huZXNzTWFwKSx5Lm1ldGFsbmVzc01hcCYmKF8ubWV0YWxuZXNzTWFwLnZhbHVlPXkubWV0YWxuZXNzTWFwKSx5LmVtaXNzaXZlTWFwJiYoXy5lbWlzc2l2ZU1hcC52YWx1ZT15LmVtaXNzaXZlTWFwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldCh5KS5lbnZNYXAmJihfLmVudk1hcEludGVuc2l0eS52YWx1ZT15LmVudk1hcEludGVuc2l0eSl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3JtczpmdW5jdGlvbihfLHkpe18uZm9nQ29sb3IudmFsdWUuY29weSh5LmNvbG9yKSx5LmlzRm9nPyhfLmZvZ05lYXIudmFsdWU9eS5uZWFyLF8uZm9nRmFyLnZhbHVlPXkuZmFyKTp5LmlzRm9nRXhwMiYmKF8uZm9nRGVuc2l0eS52YWx1ZT15LmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbihfLHksSSxBLE8pe3kuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKF8seSk6eS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkoXyx5KSxmdW5jdGlvbihfLHkpe3kuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApfShfLHkpKTp5LmlzTWVzaFRvb25NYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7eS5ncmFkaWVudE1hcCYmKF8uZ3JhZGllbnRNYXAudmFsdWU9eS5ncmFkaWVudE1hcCkseS5lbWlzc2l2ZU1hcCYmKF8uZW1pc3NpdmVNYXAudmFsdWU9eS5lbWlzc2l2ZU1hcCkseS5idW1wTWFwJiYoXy5idW1wTWFwLnZhbHVlPXkuYnVtcE1hcCxfLmJ1bXBTY2FsZS52YWx1ZT15LmJ1bXBTY2FsZSwxPT09eS5zaWRlJiYoXy5idW1wU2NhbGUudmFsdWUqPS0xKSkseS5ub3JtYWxNYXAmJihfLm5vcm1hbE1hcC52YWx1ZT15Lm5vcm1hbE1hcCxfLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeS5ub3JtYWxTY2FsZSksMT09PXkuc2lkZSYmXy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseS5kaXNwbGFjZW1lbnRNYXAmJihfLmRpc3BsYWNlbWVudE1hcC52YWx1ZT15LmRpc3BsYWNlbWVudE1hcCxfLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXkuZGlzcGxhY2VtZW50U2NhbGUsXy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXkuZGlzcGxhY2VtZW50Qmlhcyl9KF8seSkpOnkuaXNNZXNoUGhvbmdNYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7Xy5zcGVjdWxhci52YWx1ZS5jb3B5KHkuc3BlY3VsYXIpLF8uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHkuc2hpbmluZXNzLDFlLTQpLHkuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApLHkuYnVtcE1hcCYmKF8uYnVtcE1hcC52YWx1ZT15LmJ1bXBNYXAsXy5idW1wU2NhbGUudmFsdWU9eS5idW1wU2NhbGUsMT09PXkuc2lkZSYmKF8uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHkubm9ybWFsTWFwJiYoXy5ub3JtYWxNYXAudmFsdWU9eS5ub3JtYWxNYXAsXy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkubm9ybWFsU2NhbGUpLDE9PT15LnNpZGUmJl8ubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHkuZGlzcGxhY2VtZW50TWFwJiYoXy5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eS5kaXNwbGFjZW1lbnRNYXAsXy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT15LmRpc3BsYWNlbWVudFNjYWxlLF8uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT15LmRpc3BsYWNlbWVudEJpYXMpfShfLHkpKTp5LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoXyx5KSx5LmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEkpe2QoXyx5KSxfLmlvci52YWx1ZT15Lmlvcix5LnNoZWVuPjAmJihfLnNoZWVuQ29sb3IudmFsdWUuY29weSh5LnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHkuc2hlZW4pLF8uc2hlZW5Sb3VnaG5lc3MudmFsdWU9eS5zaGVlblJvdWdobmVzcyx5LnNoZWVuQ29sb3JNYXAmJihfLnNoZWVuQ29sb3JNYXAudmFsdWU9eS5zaGVlbkNvbG9yTWFwKSx5LnNoZWVuUm91Z2huZXNzTWFwJiYoXy5zaGVlblJvdWdobmVzc01hcC52YWx1ZT15LnNoZWVuUm91Z2huZXNzTWFwKSkseS5jbGVhcmNvYXQ+MCYmKF8uY2xlYXJjb2F0LnZhbHVlPXkuY2xlYXJjb2F0LF8uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXkuY2xlYXJjb2F0Um91Z2huZXNzLHkuY2xlYXJjb2F0TWFwJiYoXy5jbGVhcmNvYXRNYXAudmFsdWU9eS5jbGVhcmNvYXRNYXApLHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoXy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHkuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoXy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLF8uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXkuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT15LnNpZGUmJl8uY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSx5LnRyYW5zbWlzc2lvbj4wJiYoXy50cmFuc21pc3Npb24udmFsdWU9eS50cmFuc21pc3Npb24sXy50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPUkudGV4dHVyZSxfLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChJLndpZHRoLEkuaGVpZ2h0KSx5LnRyYW5zbWlzc2lvbk1hcCYmKF8udHJhbnNtaXNzaW9uTWFwLnZhbHVlPXkudHJhbnNtaXNzaW9uTWFwKSxfLnRoaWNrbmVzcy52YWx1ZT15LnRoaWNrbmVzcyx5LnRoaWNrbmVzc01hcCYmKF8udGhpY2tuZXNzTWFwLnZhbHVlPXkudGhpY2tuZXNzTWFwKSxfLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9eS5hdHRlbnVhdGlvbkRpc3RhbmNlLF8uYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHkuYXR0ZW51YXRpb25Db2xvcikpLF8uc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9eS5zcGVjdWxhckludGVuc2l0eSxfLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSh5LnNwZWN1bGFyQ29sb3IpLHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihfLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXkuc3BlY3VsYXJJbnRlbnNpdHlNYXApLHkuc3BlY3VsYXJDb2xvck1hcCYmKF8uc3BlY3VsYXJDb2xvck1hcC52YWx1ZT15LnNwZWN1bGFyQ29sb3JNYXApfShfLHksTyk6ZChfLHkpKTp5LmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5Lm1hdGNhcCYmKF8ubWF0Y2FwLnZhbHVlPXkubWF0Y2FwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxfLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeS5yZWZlcmVuY2VQb3NpdGlvbiksXy5uZWFyRGlzdGFuY2UudmFsdWU9eS5uZWFyRGlzdGFuY2UsXy5mYXJEaXN0YW5jZS52YWx1ZT15LmZhckRpc3RhbmNlfShfLHkpKTp5LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc0xpbmVCYXNpY01hdGVyaWFsPyhmdW5jdGlvbihfLHkpe18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHl9KF8seSkseS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmZnVuY3Rpb24oXyx5KXtfLmRhc2hTaXplLnZhbHVlPXkuZGFzaFNpemUsXy50b3RhbFNpemUudmFsdWU9eS5kYXNoU2l6ZSt5LmdhcFNpemUsXy5zY2FsZS52YWx1ZT15LnNjYWxlfShfLHkpKTp5LmlzUG9pbnRzTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEksQSl7bGV0IE87Xy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSxfLnNpemUudmFsdWU9eS5zaXplKkksXy5zY2FsZS52YWx1ZT0uNSpBLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/Tz15Lm1hcDp5LmFscGhhTWFwJiYoTz15LmFscGhhTWFwKSx2b2lkIDAhPT1PJiYoITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KE8ubWF0cml4KSl9KF8seSxJLEEpOnkuaXNTcHJpdGVNYXRlcmlhbD9mdW5jdGlvbihfLHkpe2xldCBJO18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHksXy5yb3RhdGlvbi52YWx1ZT15LnJvdGF0aW9uLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/ST15Lm1hcDp5LmFscGhhTWFwJiYoST15LmFscGhhTWFwKSx2b2lkIDAhPT1JJiYoITA9PT1JLm1hdHJpeEF1dG9VcGRhdGUmJkkudXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEkubWF0cml4KSl9KF8seSk6eS5pc1NoYWRvd01hdGVyaWFsPyhfLmNvbG9yLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSk6eS5pc1NoYWRlck1hdGVyaWFsJiYoeS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gWmkobj17fSl7bGV0IHQ9dm9pZCAwIT09bi5jYW52YXM/bi5jYW52YXM6ZnVuY3Rpb24oKXtsZXQgbj1TTSgiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59KCksZT12b2lkIDAhPT1uLmNvbnRleHQ/bi5jb250ZXh0Om51bGwsaT12b2lkIDAhPT1uLmFscGhhJiZuLmFscGhhLHI9dm9pZCAwPT09bi5kZXB0aHx8bi5kZXB0aCxvPXZvaWQgMD09PW4uc3RlbmNpbHx8bi5zdGVuY2lsLHM9dm9pZCAwIT09bi5hbnRpYWxpYXMmJm4uYW50aWFsaWFzLGE9dm9pZCAwPT09bi5wcmVtdWx0aXBsaWVkQWxwaGF8fG4ucHJlbXVsdGlwbGllZEFscGhhLGw9dm9pZCAwIT09bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJm4ucHJlc2VydmVEcmF3aW5nQnVmZmVyLGM9dm9pZCAwIT09bi5wb3dlclByZWZlcmVuY2U/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9dm9pZCAwIT09bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsZD1udWxsLHA9bnVsbCxoPVtdLGY9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1EaCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9MCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgbT10aGlzLEM9ITEsXz0wLHk9MCxJPW51bGwsQT0tMSxPPW51bGwsZWU9bmV3IHRyLFg9bmV3IHRyLHhlPW51bGwsZmU9dC53aWR0aCx2ZT10LmhlaWdodCxUPTEsbmU9bnVsbCxsZT1udWxsLGhlPW5ldyB0cigwLDAsZmUsdmUpLHllPW5ldyB0cigwLDAsZmUsdmUpLEo9ITEsYWU9bmV3IHZ5LG1lPSExLGplPSExLE1lPW51bGwsRmU9bmV3IE1uLHV0PW5ldyAkLFN0PXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gZ3QoKXtyZXR1cm4gbnVsbD09PUk/VDoxfWxldCBFdCxvbixDZSx2dCxfdCxpZSxjdCxZZSx4dCxodCxzbixTbixvaSxVaSx6aSxRLEYsVmUsQ3QsdG4sQmUsZ24sbG4sUmU9ZTtmdW5jdGlvbiBBbihTLEwpe2ZvcihsZXQgcT0wO3E8Uy5sZW5ndGg7cSsrKXtsZXQgY2U9dC5nZXRDb250ZXh0KFNbcV0sTCk7aWYobnVsbCE9PWNlKXJldHVybiBjZX1yZXR1cm4gbnVsbH10cnl7bGV0IFM9e2FscGhhOiEwLGRlcHRoOnIsc3RlbmNpbDpvLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTphLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLCJ0aHJlZS5qcyByMTM3IiksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdWUsITEpLG51bGw9PT1SZSl7bGV0IEw9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKCEwPT09bS5pc1dlYkdMMVJlbmRlcmVyJiZMLnNoaWZ0KCksUmU9QW4oTCxTKSxudWxsPT09UmUpdGhyb3cgQW4oTCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX12b2lkIDA9PT1SZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQmJihSZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKFMpe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrUy5tZXNzYWdlKSxTfWZ1bmN0aW9uIEZ0KCl7RXQ9bmV3IERVZShSZSksb249bmV3IENVZShSZSxFdCxuKSxFdC5pbml0KG9uKSxnbj1uZXcgaThlKFJlLEV0LG9uKSxDZT1uZXcgdDhlKFJlLEV0LG9uKSx2dD1uZXcgUFVlKFJlKSxfdD1uZXcgR3plLGllPW5ldyBuOGUoUmUsRXQsQ2UsX3Qsb24sZ24sdnQpLGN0PW5ldyBNVWUobSksWWU9bmV3IFRVZShtKSx4dD1uZXcgcTVlKFJlLG9uKSxsbj1uZXcgYlVlKFJlLEV0LHh0LG9uKSxodD1uZXcgQVVlKFJlLHh0LHZ0LGxuKSxzbj1uZXcgRlVlKFJlLGh0LHh0LHZ0KSxDdD1uZXcga1VlKFJlLG9uLGllKSxRPW5ldyB3VWUoX3QpLFNuPW5ldyBqemUobSxjdCxZZSxFdCxvbixsbixRKSxvaT1uZXcgbzhlKF90KSxVaT1uZXcgcXplLHppPW5ldyBKemUoRXQsb24pLFZlPW5ldyB5VWUobSxjdCxDZSxzbixpLGEpLEY9bmV3IEVsZShtLHNuLG9uKSx0bj1uZXcgeFVlKFJlLEV0LHZ0LG9uKSxCZT1uZXcgSVVlKFJlLEV0LHZ0LG9uKSx2dC5wcm9ncmFtcz1Tbi5wcm9ncmFtcyxtLmNhcGFiaWxpdGllcz1vbixtLmV4dGVuc2lvbnM9RXQsbS5wcm9wZXJ0aWVzPV90LG0ucmVuZGVyTGlzdHM9VWksbS5zaGFkb3dNYXA9RixtLnN0YXRlPUNlLG0uaW5mbz12dH1GdCgpO2xldCBrdD1uZXcgQVUobSxSZSk7ZnVuY3Rpb24gTG4oUyl7Uy5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksQz0hMH1mdW5jdGlvbiB1ZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLEM9ITE7bGV0IFM9dnQuYXV0b1Jlc2V0LEw9Ri5lbmFibGVkLHE9Ri5hdXRvVXBkYXRlLFo9Ri5uZWVkc1VwZGF0ZSxjZT1GLnR5cGU7RnQoKSx2dC5hdXRvUmVzZXQ9UyxGLmVuYWJsZWQ9TCxGLmF1dG9VcGRhdGU9cSxGLm5lZWRzVXBkYXRlPVosRi50eXBlPWNlfWZ1bmN0aW9uIEp0KFMpe2xldCBMPVMudGFyZ2V0O0wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSnQpLGZ1bmN0aW9uKFMpeyhmdW5jdGlvbihTKXtsZXQgTD1fdC5nZXQoUykucHJvZ3JhbXM7dm9pZCAwIT09TCYmKEwuZm9yRWFjaChmdW5jdGlvbihxKXtTbi5yZWxlYXNlUHJvZ3JhbShxKX0pLFMuaXNTaGFkZXJNYXRlcmlhbCYmU24ucmVsZWFzZVNoYWRlckNhY2hlKFMpKX0pKFMpLF90LnJlbW92ZShTKX0oTCl9dGhpcy54cj1rdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUmV9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gUmUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IFM9RXQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtTJiZTLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBTPUV0LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7UyYmUy5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gVH0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKFMpe3ZvaWQgMCE9PVMmJihUPVMsdGhpcy5zZXRTaXplKGZlLHZlLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihTKXtyZXR1cm4gUy5zZXQoZmUsdmUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oUyxMLHEpe2t0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihmZT1TLHZlPUwsdC53aWR0aD1NYXRoLmZsb29yKFMqVCksdC5oZWlnaHQ9TWF0aC5mbG9vcihMKlQpLCExIT09cSYmKHQuc3R5bGUud2lkdGg9UysicHgiLHQuc3R5bGUuaGVpZ2h0PUwrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuc2V0KGZlKlQsdmUqVCkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihTLEwscSl7ZmU9Uyx2ZT1MLFQ9cSx0LndpZHRoPU1hdGguZmxvb3IoUypxKSx0LmhlaWdodD1NYXRoLmZsb29yKEwqcSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShlZSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShoZSl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyxMLHEsWil7Uy5pc1ZlY3RvcjQ/aGUuc2V0KFMueCxTLnksUy56LFMudyk6aGUuc2V0KFMsTCxxLFopLENlLnZpZXdwb3J0KGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weSh5ZSl9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihTLEwscSxaKXtTLmlzVmVjdG9yND95ZS5zZXQoUy54LFMueSxTLnosUy53KTp5ZS5zZXQoUyxMLHEsWiksQ2Uuc2Npc3NvcihYLmNvcHkoeWUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIEp9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oUyl7Q2Uuc2V0U2Npc3NvclRlc3QoSj1TKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKFMpe25lPVN9LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKFMpe2xlPVN9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihTKXtyZXR1cm4gUy5jb3B5KFZlLmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe1ZlLnNldENsZWFyQ29sb3IuYXBwbHkoVmUsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIFZlLmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7VmUuc2V0Q2xlYXJBbHBoYS5hcHBseShWZSxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKFMsTCxxKXtsZXQgWj0wOyh2b2lkIDA9PT1TfHxTKSYmKFp8PTE2Mzg0KSwodm9pZCAwPT09THx8TCkmJihafD0yNTYpLCh2b2lkIDA9PT1xfHxxKSYmKFp8PTEwMjQpLFJlLmNsZWFyKFopfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsTG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHVlLCExKSxVaS5kaXNwb3NlKCksemkuZGlzcG9zZSgpLF90LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksWWUuZGlzcG9zZSgpLHNuLmRpc3Bvc2UoKSxsbi5kaXNwb3NlKCksU24uZGlzcG9zZSgpLGt0LmRpc3Bvc2UoKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLG1pKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixtciksTWUmJihNZS5kaXNwb3NlKCksTWU9bnVsbCksb3Muc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihTLEwscSxaLGNlLFVlKXtudWxsPT09TCYmKEw9U3QpO2xldCAkZT1jZS5pc01lc2gmJmNlLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxXZT1mdW5jdGlvbihTLEwscSxaLGNlKXshMCE9PUwuaXNTY2VuZSYmKEw9U3QpLGllLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFVlPUwuZm9nLFdlPW51bGw9PT1JP20ub3V0cHV0RW5jb2Rpbmc6ITA9PT1JLmlzWFJSZW5kZXJUYXJnZXQ/SS50ZXh0dXJlLmVuY29kaW5nOkRoLHJ0PShaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/WWU6Y3QpLmdldChaLmVudk1hcHx8KFouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9MLmVudmlyb25tZW50Om51bGwpKSxkdD0hMD09PVoudmVydGV4Q29sb3JzJiYhIXEuYXR0cmlidXRlcy5jb2xvciYmND09PXEuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxUdD0hIVoubm9ybWFsTWFwJiYhIXEuYXR0cmlidXRlcy50YW5nZW50LEF0PSEhcS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sY249ISFxLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsSmk9cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAseGk9Wi50b25lTWFwcGVkP20udG9uZU1hcHBpbmc6MCxtbj1fdC5nZXQoWiksUm49cC5zdGF0ZS5saWdodHM7ITAhPT1tZXx8ITAhPT1qZSYmUz09PU98fFEuc2V0U3RhdGUoWixTLFM9PT1PJiZaLmlkPT09QSk7bGV0IER0PSExO1oudmVyc2lvbj09PW1uLl9fdmVyc2lvbj8obW4ubmVlZHNMaWdodHMmJm1uLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PVJuLnN0YXRlLnZlcnNpb258fG1uLm91dHB1dEVuY29kaW5nIT09V2V8fGNlLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1tbi5pbnN0YW5jaW5nfHwhY2UuaXNJbnN0YW5jZWRNZXNoJiYhMD09PW1uLmluc3RhbmNpbmd8fGNlLmlzU2tpbm5lZE1lc2gmJiExPT09bW4uc2tpbm5pbmd8fCFjZS5pc1NraW5uZWRNZXNoJiYhMD09PW1uLnNraW5uaW5nfHxtbi5lbnZNYXAhPT1ydHx8Wi5mb2cmJm1uLmZvZyE9PVVlfHx2b2lkIDAhPT1tbi5udW1DbGlwcGluZ1BsYW5lcyYmKG1uLm51bUNsaXBwaW5nUGxhbmVzIT09US5udW1QbGFuZXN8fG1uLm51bUludGVyc2VjdGlvbiE9PVEubnVtSW50ZXJzZWN0aW9uKXx8bW4udmVydGV4QWxwaGFzIT09ZHR8fG1uLnZlcnRleFRhbmdlbnRzIT09VHR8fG1uLm1vcnBoVGFyZ2V0cyE9PUF0fHxtbi5tb3JwaE5vcm1hbHMhPT1jbnx8bW4udG9uZU1hcHBpbmchPT14aXx8ITA9PT1vbi5pc1dlYkdMMiYmbW4ubW9ycGhUYXJnZXRzQ291bnQhPT1KaSkmJihEdD0hMCk6KER0PSEwLG1uLl9fdmVyc2lvbj1aLnZlcnNpb24pO2xldCBnaT1tbi5jdXJyZW50UHJvZ3JhbTshMD09PUR0JiYoZ2k9QnkoWixMLGNlKSk7bGV0IGVpPSExLFVuPSExLFhuPSExLFZ0PWdpLmdldFVuaWZvcm1zKCksamk9bW4udW5pZm9ybXM7aWYoQ2UudXNlUHJvZ3JhbShnaS5wcm9ncmFtKSYmKGVpPSEwLFVuPSEwLFhuPSEwKSxaLmlkIT09QSYmKEE9Wi5pZCxVbj0hMCksZWl8fE8hPT1TKXtpZihWdC5zZXRWYWx1ZShSZSwicHJvamVjdGlvbk1hdHJpeCIsUy5wcm9qZWN0aW9uTWF0cml4KSxvbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZWdC5zZXRWYWx1ZShSZSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coUy5mYXIrMSkvTWF0aC5MTjIpKSxPIT09UyYmKE89UyxVbj0hMCxYbj0hMCksWi5pc1NoYWRlck1hdGVyaWFsfHxaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouZW52TWFwKXtsZXQgd249VnQubWFwLmNhbWVyYVBvc2l0aW9uO3ZvaWQgMCE9PXduJiZ3bi5zZXRWYWx1ZShSZSx1dC5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCkpfShaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Wi5pc01lc2hCYXNpY01hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouaXNTaGFkZXJNYXRlcmlhbCkmJlZ0LnNldFZhbHVlKFJlLCJpc09ydGhvZ3JhcGhpYyIsITA9PT1TLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwoWi5pc01lc2hQaG9uZ01hdGVyaWFsfHxaLmlzTWVzaFRvb25NYXRlcmlhbHx8Wi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fFouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Wi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxaLmlzU2hhZGVyTWF0ZXJpYWx8fFouaXNTaGFkb3dNYXRlcmlhbHx8Y2UuaXNTa2lubmVkTWVzaCkmJlZ0LnNldFZhbHVlKFJlLCJ2aWV3TWF0cml4IixTLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoY2UuaXNTa2lubmVkTWVzaCl7VnQuc2V0T3B0aW9uYWwoUmUsY2UsImJpbmRNYXRyaXgiKSxWdC5zZXRPcHRpb25hbChSZSxjZSwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgd249Y2Uuc2tlbGV0b247d24mJihvbi5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09d24uYm9uZVRleHR1cmUmJnduLmNvbXB1dGVCb25lVGV4dHVyZSgpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZSIsd24uYm9uZVRleHR1cmUsaWUpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZVNpemUiLHduLmJvbmVUZXh0dXJlU2l6ZSkpOlZ0LnNldE9wdGlvbmFsKFJlLHduLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFxJiYodm9pZCAwIT09cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb258fHZvaWQgMCE9PXEubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCkmJkN0LnVwZGF0ZShjZSxxLFosZ2kpLChVbnx8bW4ucmVjZWl2ZVNoYWRvdyE9PWNlLnJlY2VpdmVTaGFkb3cpJiYobW4ucmVjZWl2ZVNoYWRvdz1jZS5yZWNlaXZlU2hhZG93LFZ0LnNldFZhbHVlKFJlLCJyZWNlaXZlU2hhZG93IixjZS5yZWNlaXZlU2hhZG93KSksVW4mJihWdC5zZXRWYWx1ZShSZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxtbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oUyxMKXtTLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPUwsUy5saWdodFByb2JlLm5lZWRzVXBkYXRlPUwsUy5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9TCxTLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPUwsUy5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9TCxTLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9TH0oamksWG4pLFVlJiZaLmZvZyYmb2kucmVmcmVzaEZvZ1VuaWZvcm1zKGppLFVlKSxvaS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhqaSxaLFQsdmUsTWUpLFRoLnVwbG9hZChSZSxtbi51bmlmb3Jtc0xpc3QsamksaWUpKSxaLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09Wi51bmlmb3Jtc05lZWRVcGRhdGUmJihUaC51cGxvYWQoUmUsbW4udW5pZm9ybXNMaXN0LGppLGllKSxaLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksWi5pc1Nwcml0ZU1hdGVyaWFsJiZWdC5zZXRWYWx1ZShSZSwiY2VudGVyIixjZS5jZW50ZXIpLFZ0LnNldFZhbHVlKFJlLCJtb2RlbFZpZXdNYXRyaXgiLGNlLm1vZGVsVmlld01hdHJpeCksVnQuc2V0VmFsdWUoUmUsIm5vcm1hbE1hdHJpeCIsY2Uubm9ybWFsTWF0cml4KSxWdC5zZXRWYWx1ZShSZSwibW9kZWxNYXRyaXgiLGNlLm1hdHJpeFdvcmxkKSxnaX0oUyxMLHEsWixjZSk7Q2Uuc2V0TWF0ZXJpYWwoWiwkZSk7bGV0IHJ0PXEuaW5kZXgsZHQ9cS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1ydCl7aWYodm9pZCAwPT09ZHR8fDA9PT1kdC5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09cnQuY291bnQpcmV0dXJuO2xldCBUdD0xOyEwPT09Wi53aXJlZnJhbWUmJihydD1odC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUocSksVHQ9MiksbG4uc2V0dXAoY2UsWixXZSxxLHJ0KTtsZXQgQXQsY249dG47bnVsbCE9PXJ0JiYoQXQ9eHQuZ2V0KHJ0KSxjbj1CZSxjbi5zZXRJbmRleChBdCkpO2xldCBKaT1udWxsIT09cnQ/cnQuY291bnQ6ZHQuY291bnQseGk9cS5kcmF3UmFuZ2Uuc3RhcnQqVHQsbW49cS5kcmF3UmFuZ2UuY291bnQqVHQsUm49bnVsbCE9PVVlP1VlLnN0YXJ0KlR0OjAsRHQ9bnVsbCE9PVVlP1VlLmNvdW50KlR0OjEvMCxnaT1NYXRoLm1heCh4aSxSbiksZWk9TWF0aC5taW4oSmkseGkrbW4sUm4rRHQpLTEsVW49TWF0aC5tYXgoMCxlaS1naSsxKTtpZigwIT09VW4pe2lmKGNlLmlzTWVzaCkhMD09PVoud2lyZWZyYW1lPyhDZS5zZXRMaW5lV2lkdGgoWi53aXJlZnJhbWVMaW5ld2lkdGgqZ3QoKSksY24uc2V0TW9kZSgxKSk6Y24uc2V0TW9kZSg0KTtlbHNlIGlmKGNlLmlzTGluZSl7bGV0IFhuPVoubGluZXdpZHRoO3ZvaWQgMD09PVhuJiYoWG49MSksQ2Uuc2V0TGluZVdpZHRoKFhuKmd0KCkpLGNuLnNldE1vZGUoY2UuaXNMaW5lU2VnbWVudHM/MTpjZS5pc0xpbmVMb29wPzI6Myl9ZWxzZSBjZS5pc1BvaW50cz9jbi5zZXRNb2RlKDApOmNlLmlzU3ByaXRlJiZjbi5zZXRNb2RlKDQpO2lmKGNlLmlzSW5zdGFuY2VkTWVzaCljbi5yZW5kZXJJbnN0YW5jZXMoZ2ksVW4sY2UuY291bnQpO2Vsc2UgaWYocS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgWG49TWF0aC5taW4ocS5pbnN0YW5jZUNvdW50LHEuX21heEluc3RhbmNlQ291bnQpO2NuLnJlbmRlckluc3RhbmNlcyhnaSxVbixYbil9ZWxzZSBjbi5yZW5kZXIoZ2ksVW4pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKFMsTCl7cD16aS5nZXQoUykscC5pbml0KCksZi5wdXNoKHApLFMudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKHEpe3EuaXNMaWdodCYmcS5sYXllcnMudGVzdChMLmxheWVycykmJihwLnB1c2hMaWdodChxKSxxLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhxKSl9KSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLFMudHJhdmVyc2UoZnVuY3Rpb24ocSl7bGV0IFo9cS5tYXRlcmlhbDtpZihaKWlmKEFycmF5LmlzQXJyYXkoWikpZm9yKGxldCBjZT0wO2NlPFoubGVuZ3RoO2NlKyspQnkoWltjZV0sUyxxKTtlbHNlIEJ5KFosUyxxKX0pLGYucG9wKCkscD1udWxsfTtsZXQgR2U9bnVsbDtmdW5jdGlvbiBtaSgpe29zLnN0b3AoKX1mdW5jdGlvbiBtcigpe29zLnN0YXJ0KCl9bGV0IG9zPW5ldyBnbGU7ZnVuY3Rpb24gVHIoUyxMLHEsWil7aWYoITE9PT1TLnZpc2libGUpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoTC5sYXllcnMpKWlmKFMuaXNHcm91cClxPVMucmVuZGVyT3JkZXI7ZWxzZSBpZihTLmlzTE9EKSEwPT09Uy5hdXRvVXBkYXRlJiZTLnVwZGF0ZShMKTtlbHNlIGlmKFMuaXNMaWdodClwLnB1c2hMaWdodChTKSxTLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhTKTtlbHNlIGlmKFMuaXNTcHJpdGUpe2lmKCFTLmZydXN0dW1DdWxsZWR8fGFlLmludGVyc2VjdHNTcHJpdGUoUykpe1omJnV0LnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRmUpO2xldCAkZT1zbi51cGRhdGUoUyksV2U9Uy5tYXRlcmlhbDtXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9fWVsc2UgaWYoKFMuaXNNZXNofHxTLmlzTGluZXx8Uy5pc1BvaW50cykmJihTLmlzU2tpbm5lZE1lc2gmJlMuc2tlbGV0b24uZnJhbWUhPT12dC5yZW5kZXIuZnJhbWUmJihTLnNrZWxldG9uLnVwZGF0ZSgpLFMuc2tlbGV0b24uZnJhbWU9dnQucmVuZGVyLmZyYW1lKSwhUy5mcnVzdHVtQ3VsbGVkfHxhZS5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7WiYmdXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChGZSk7bGV0ICRlPXNuLnVwZGF0ZShTKSxXZT1TLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoV2UpKXtsZXQgcnQ9JGUuZ3JvdXBzO2ZvcihsZXQgZHQ9MCxUdD1ydC5sZW5ndGg7ZHQ8VHQ7ZHQrKyl7bGV0IEF0PXJ0W2R0XSxjbj1XZVtBdC5tYXRlcmlhbEluZGV4XTtjbiYmY24udmlzaWJsZSYmZC5wdXNoKFMsJGUsY24scSx1dC56LEF0KX19ZWxzZSBXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9bGV0IFVlPVMuY2hpbGRyZW47Zm9yKGxldCAkZT0wLFdlPVVlLmxlbmd0aDskZTxXZTskZSsrKVRyKFVlWyRlXSxMLHEsWil9ZnVuY3Rpb24gZWwoUyxMLHEsWil7bGV0IGNlPVMub3BhcXVlLFVlPVMudHJhbnNtaXNzaXZlLCRlPVMudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcocSksVWUubGVuZ3RoPjAmJmZ1bmN0aW9uKFMsTCxxKXtudWxsPT09TWUmJihNZT1uZXcoITA9PT1zJiYhMD09PW9uLmlzV2ViR0wyP0VNOnZhKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT1nbi5jb252ZXJ0KHV5KT91eTpTaCxtaW5GaWx0ZXI6MTAwOCxtYWdGaWx0ZXI6SW8sd3JhcFM6WmEsd3JhcFQ6WmEsdXNlUmVuZGVyVG9UZXh0dXJlOkV0LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KSk7bGV0IFo9bS5nZXRSZW5kZXJUYXJnZXQoKTttLnNldFJlbmRlclRhcmdldChNZSksbS5jbGVhcigpO2xldCBjZT1tLnRvbmVNYXBwaW5nO20udG9uZU1hcHBpbmc9MCxWbChTLEwscSksbS50b25lTWFwcGluZz1jZSxpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChNZSksaWUudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKE1lKSxtLnNldFJlbmRlclRhcmdldChaKX0oY2UsTCxxKSxaJiZDZS52aWV3cG9ydChlZS5jb3B5KFopKSxjZS5sZW5ndGg+MCYmVmwoY2UsTCxxKSxVZS5sZW5ndGg+MCYmVmwoVWUsTCxxKSwkZS5sZW5ndGg+MCYmVmwoJGUsTCxxKX1mdW5jdGlvbiBWbChTLEwscSl7bGV0IFo9ITA9PT1MLmlzU2NlbmU/TC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBjZT0wLFVlPVMubGVuZ3RoO2NlPFVlO2NlKyspe2xldCAkZT1TW2NlXSxXZT0kZS5vYmplY3QscnQ9JGUuZ2VvbWV0cnksZHQ9bnVsbD09PVo/JGUubWF0ZXJpYWw6WixUdD0kZS5ncm91cDtXZS5sYXllcnMudGVzdChxLmxheWVycykmJkNPKFdlLEwscSxydCxkdCxUdCl9fWZ1bmN0aW9uIENPKFMsTCxxLFosY2UsVWUpe1Mub25CZWZvcmVSZW5kZXIobSxMLHEsWixjZSxVZSksUy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhxLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKSxTLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoUy5tb2RlbFZpZXdNYXRyaXgpLGNlLm9uQmVmb3JlUmVuZGVyKG0sTCxxLFosUyxVZSksITA9PT1jZS50cmFuc3BhcmVudCYmMj09PWNlLnNpZGU/KGNlLnNpZGU9MSxjZS5uZWVkc1VwZGF0ZT0hMCxtLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxjZS5zaWRlPTAsY2UubmVlZHNVcGRhdGU9ITAsbS5yZW5kZXJCdWZmZXJEaXJlY3QocSxMLFosY2UsUyxVZSksY2Uuc2lkZT0yKTptLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxTLm9uQWZ0ZXJSZW5kZXIobSxMLHEsWixjZSxVZSl9ZnVuY3Rpb24gQnkoUyxMLHEpeyEwIT09TC5pc1NjZW5lJiYoTD1TdCk7bGV0IFo9X3QuZ2V0KFMpLGNlPXAuc3RhdGUubGlnaHRzLCRlPWNlLnN0YXRlLnZlcnNpb24sV2U9U24uZ2V0UGFyYW1ldGVycyhTLGNlLnN0YXRlLHAuc3RhdGUuc2hhZG93c0FycmF5LEwscSkscnQ9U24uZ2V0UHJvZ3JhbUNhY2hlS2V5KFdlKSxkdD1aLnByb2dyYW1zO1ouZW52aXJvbm1lbnQ9Uy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0wuZW52aXJvbm1lbnQ6bnVsbCxaLmZvZz1MLmZvZyxaLmVudk1hcD0oUy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1llOmN0KS5nZXQoUy5lbnZNYXB8fFouZW52aXJvbm1lbnQpLHZvaWQgMD09PWR0JiYoUy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZHQ9bmV3IE1hcCxaLnByb2dyYW1zPWR0KTtsZXQgVHQ9ZHQuZ2V0KHJ0KTtpZih2b2lkIDAhPT1UdCl7aWYoWi5jdXJyZW50UHJvZ3JhbT09PVR0JiZaLmxpZ2h0c1N0YXRlVmVyc2lvbj09PSRlKXJldHVybiBuUyhTLFdlKSxUdH1lbHNlIFdlLnVuaWZvcm1zPVNuLmdldFVuaWZvcm1zKFMpLFMub25CdWlsZChxLFdlLG0pLFMub25CZWZvcmVDb21waWxlKFdlLG0pLFR0PVNuLmFjcXVpcmVQcm9ncmFtKFdlLHJ0KSxkdC5zZXQocnQsVHQpLFoudW5pZm9ybXM9V2UudW5pZm9ybXM7bGV0IEF0PVoudW5pZm9ybXM7KCFTLmlzU2hhZGVyTWF0ZXJpYWwmJiFTLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09Uy5jbGlwcGluZykmJihBdC5jbGlwcGluZ1BsYW5lcz1RLnVuaWZvcm0pLG5TKFMsV2UpLFoubmVlZHNMaWdodHM9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxTLmlzTWVzaFRvb25NYXRlcmlhbHx8Uy5pc01lc2hQaG9uZ01hdGVyaWFsfHxTLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFMuaXNTaGFkb3dNYXRlcmlhbHx8Uy5pc1NoYWRlck1hdGVyaWFsJiYhMD09PVMubGlnaHRzfShTKSxaLmxpZ2h0c1N0YXRlVmVyc2lvbj0kZSxaLm5lZWRzTGlnaHRzJiYoQXQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9Y2Uuc3RhdGUuYW1iaWVudCxBdC5saWdodFByb2JlLnZhbHVlPWNlLnN0YXRlLnByb2JlLEF0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsLEF0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LEF0LnNwb3RMaWdodHMudmFsdWU9Y2Uuc3RhdGUuc3BvdCxBdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLnNwb3RTaGFkb3csQXQucmVjdEFyZWFMaWdodHMudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWEsQXQubHRjXzEudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWFMVEMxLEF0Lmx0Y18yLnZhbHVlPWNlLnN0YXRlLnJlY3RBcmVhTFRDMixBdC5wb2ludExpZ2h0cy52YWx1ZT1jZS5zdGF0ZS5wb2ludCxBdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvdyxBdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmhlbWksQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsQXQuc3BvdFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5zcG90U2hhZG93TWFwLEF0LnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxBdC5wb2ludFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hcCxBdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IGNuPVR0LmdldFVuaWZvcm1zKCksSmk9VGguc2VxV2l0aFZhbHVlKGNuLnNlcSxBdCk7cmV0dXJuIFouY3VycmVudFByb2dyYW09VHQsWi51bmlmb3Jtc0xpc3Q9SmksVHR9ZnVuY3Rpb24gblMoUyxMKXtsZXQgcT1fdC5nZXQoUyk7cS5vdXRwdXRFbmNvZGluZz1MLm91dHB1dEVuY29kaW5nLHEuaW5zdGFuY2luZz1MLmluc3RhbmNpbmcscS5za2lubmluZz1MLnNraW5uaW5nLHEubW9ycGhUYXJnZXRzPUwubW9ycGhUYXJnZXRzLHEubW9ycGhOb3JtYWxzPUwubW9ycGhOb3JtYWxzLHEubW9ycGhUYXJnZXRzQ291bnQ9TC5tb3JwaFRhcmdldHNDb3VudCxxLm51bUNsaXBwaW5nUGxhbmVzPUwubnVtQ2xpcHBpbmdQbGFuZXMscS5udW1JbnRlcnNlY3Rpb249TC5udW1DbGlwSW50ZXJzZWN0aW9uLHEudmVydGV4QWxwaGFzPUwudmVydGV4QWxwaGFzLHEudmVydGV4VGFuZ2VudHM9TC52ZXJ0ZXhUYW5nZW50cyxxLnRvbmVNYXBwaW5nPUwudG9uZU1hcHBpbmd9b3Muc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihTKXtHZSYmR2UoUyl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmb3Muc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihTKXtHZT1TLGt0LnNldEFuaW1hdGlvbkxvb3AoUyksbnVsbD09PVM/b3Muc3RvcCgpOm9zLnN0YXJ0KCl9LGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsbWkpLGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLG1yKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEwpe2lmKHZvaWQgMD09PUx8fCEwPT09TC5pc0NhbWVyYSl7aWYoITAhPT1DKXtpZighMD09PVMuYXV0b1VwZGF0ZSYmUy51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1MLnBhcmVudCYmTC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09a3QuZW5hYmxlZCYmITA9PT1rdC5pc1ByZXNlbnRpbmcmJighMD09PWt0LmNhbWVyYUF1dG9VcGRhdGUmJmt0LnVwZGF0ZUNhbWVyYShMKSxMPWt0LmdldENhbWVyYSgpKSwhMD09PVMuaXNTY2VuZSYmUy5vbkJlZm9yZVJlbmRlcihtLFMsTCxJKSxwPXppLmdldChTLGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksRmUubXVsdGlwbHlNYXRyaWNlcyhMLnByb2plY3Rpb25NYXRyaXgsTC5tYXRyaXhXb3JsZEludmVyc2UpLGFlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KEZlKSxqZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLG1lPVEuaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLGplLEwpLGQ9VWkuZ2V0KFMsaC5sZW5ndGgpLGQuaW5pdCgpLGgucHVzaChkKSxUcihTLEwsMCxtLnNvcnRPYmplY3RzKSxkLmZpbmlzaCgpLCEwPT09bS5zb3J0T2JqZWN0cyYmZC5zb3J0KG5lLGxlKSwhMD09PW1lJiZRLmJlZ2luU2hhZG93cygpLEYucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LFMsTCksITA9PT1tZSYmUS5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSxWZS5yZW5kZXIoZCxTKSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEwuaXNBcnJheUNhbWVyYSl7bGV0IFo9TC5jYW1lcmFzO2ZvcihsZXQgY2U9MCxVZT1aLmxlbmd0aDtjZTxVZTtjZSsrKXtsZXQgJGU9WltjZV07ZWwoZCxTLCRlLCRlLnZpZXdwb3J0KX19ZWxzZSBlbChkLFMsTCk7bnVsbCE9PUkmJihpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChJKSxpZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoSSkpLCEwPT09Uy5pc1NjZW5lJiZTLm9uQWZ0ZXJSZW5kZXIobSxTLEwpLENlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQ2UuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxDZS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLENlLnNldFBvbHlnb25PZmZzZXQoITEpLGxuLnJlc2V0RGVmYXVsdFN0YXRlKCksQT0tMSxPPW51bGwsZi5wb3AoKSxwPWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLGgucG9wKCksZD1oLmxlbmd0aD4wP2hbaC5sZW5ndGgtMV06bnVsbH19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gX30sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKFMsTCxxKXtfdC5nZXQoUy50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1MLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9cTtsZXQgWj1fdC5nZXQoUyk7Wi5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsWi5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9dm9pZCAwPT09cSxaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fFMudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxTLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxTLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKFMsTCl7bGV0IHE9X3QuZ2V0KFMpO3EuX193ZWJnbEZyYW1lYnVmZmVyPUwscS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1MfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihTLEw9MCxxPTApe0k9UyxfPUwseT1xO2xldCBaPSEwO2lmKFMpe2xldCBydD1fdC5nZXQoUyk7dm9pZCAwIT09cnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXI/KENlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxaPSExKTp2b2lkIDA9PT1ydC5fX3dlYmdsRnJhbWVidWZmZXI/aWUuc2V0dXBSZW5kZXJUYXJnZXQoUyk6cnQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiZpZS5yZWJpbmRUZXh0dXJlcyhTLF90LmdldChTLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBjZT1udWxsLFVlPSExLCRlPSExO2lmKFMpe2xldCBydD1TLnRleHR1cmU7KHJ0LmlzRGF0YVRleHR1cmUzRHx8cnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoJGU9ITApO2xldCBkdD1fdC5nZXQoUykuX193ZWJnbEZyYW1lYnVmZmVyO1MuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGNlPWR0W0xdLFVlPSEwKTpjZT1TLnVzZVJlbmRlcmJ1ZmZlcj9fdC5nZXQoUykuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOmR0LGVlLmNvcHkoUy52aWV3cG9ydCksWC5jb3B5KFMuc2Npc3NvcikseGU9Uy5zY2lzc29yVGVzdH1lbHNlIGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCksWC5jb3B5KHllKS5tdWx0aXBseVNjYWxhcihUKS5mbG9vcigpLHhlPUo7aWYoQ2UuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGNlKSYmb24uZHJhd0J1ZmZlcnMmJlomJkNlLmRyYXdCdWZmZXJzKFMsY2UpLENlLnZpZXdwb3J0KGVlKSxDZS5zY2lzc29yKFgpLENlLnNldFNjaXNzb3JUZXN0KHhlKSxVZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5K0wscnQuX193ZWJnbFRleHR1cmUscSl9ZWxzZSBpZigkZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LHJ0Ll9fd2ViZ2xUZXh0dXJlLHF8fDAsTHx8MCl9QT0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKFMsTCxxLFosY2UsVWUsJGUpe2lmKCFTfHwhUy5pc1dlYkdMUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4iKTtsZXQgV2U9X3QuZ2V0KFMpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihTLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT0kZSYmKFdlPVdlWyRlXSksV2Upe0NlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXZSk7dHJ5e2xldCBydD1TLnRleHR1cmUsZHQ9cnQuZm9ybWF0LFR0PXJ0LnR5cGU7aWYoZHQhPT16cyYmZ24uY29udmVydChkdCkhPT1SZS5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2xldCBBdD1UdD09PXV5JiYoRXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8b24uaXNXZWJHTDImJkV0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZighKFR0PT09U2h8fGduLmNvbnZlcnQoVHQpPT09UmUuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8VHQ9PT1ZbSYmKG9uLmlzV2ViR0wyfHxFdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fEV0LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxBdCkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09UmUuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/TD49MCYmTDw9Uy53aWR0aC1aJiZxPj0wJiZxPD1TLmhlaWdodC1jZSYmUmUucmVhZFBpeGVscyhMLHEsWixjZSxnbi5jb252ZXJ0KGR0KSxnbi5jb252ZXJ0KFR0KSxVZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IHJ0PW51bGwhPT1JP190LmdldChJKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtDZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAscnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxPTApe2lmKCEwIT09TC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO2xldCBaPU1hdGgucG93KDIsLXEpLGNlPU1hdGguZmxvb3IoTC5pbWFnZS53aWR0aCpaKSxVZT1NYXRoLmZsb29yKEwuaW1hZ2UuaGVpZ2h0KlopO2llLnNldFRleHR1cmUyRChMLDApLFJlLmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMscSwwLDAsUy54LFMueSxjZSxVZSksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxLFo9MCl7bGV0IGNlPUwuaW1hZ2Uud2lkdGgsVWU9TC5pbWFnZS5oZWlnaHQsJGU9Z24uY29udmVydChxLmZvcm1hdCksV2U9Z24uY29udmVydChxLnR5cGUpO2llLnNldFRleHR1cmUyRChxLDApLFJlLnBpeGVsU3RvcmVpKDM3NDQwLHEuZmxpcFkpLFJlLnBpeGVsU3RvcmVpKDM3NDQxLHEucHJlbXVsdGlwbHlBbHBoYSksUmUucGl4ZWxTdG9yZWkoMzMxNyxxLnVucGFja0FsaWdubWVudCksTC5pc0RhdGFUZXh0dXJlP1JlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksY2UsVWUsJGUsV2UsTC5pbWFnZS5kYXRhKTpMLmlzQ29tcHJlc3NlZFRleHR1cmU/UmUuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksTC5taXBtYXBzWzBdLndpZHRoLEwubWlwbWFwc1swXS5oZWlnaHQsJGUsTC5taXBtYXBzWzBdLmRhdGEpOlJlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksJGUsV2UsTC5pbWFnZSksMD09PVomJnEuZ2VuZXJhdGVNaXBtYXBzJiZSZS5nZW5lcmF0ZU1pcG1hcCgzNTUzKSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihTLEwscSxaLGNlPTApe2lmKG0uaXNXZWJHTDFSZW5kZXJlcilyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtsZXQgVHQsVWU9Uy5tYXgueC1TLm1pbi54KzEsJGU9Uy5tYXgueS1TLm1pbi55KzEsV2U9Uy5tYXguei1TLm1pbi56KzEscnQ9Z24uY29udmVydChaLmZvcm1hdCksZHQ9Z24uY29udmVydChaLnR5cGUpO2lmKFouaXNEYXRhVGV4dHVyZTNEKWllLnNldFRleHR1cmUzRChaLDApLFR0PTMyODc5O2Vsc2V7aWYoIVouaXNEYXRhVGV4dHVyZTJEQXJyYXkpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO2llLnNldFRleHR1cmUyREFycmF5KFosMCksVHQ9MzU4NjZ9UmUucGl4ZWxTdG9yZWkoMzc0NDAsWi5mbGlwWSksUmUucGl4ZWxTdG9yZWkoMzc0NDEsWi5wcmVtdWx0aXBseUFscGhhKSxSZS5waXhlbFN0b3JlaSgzMzE3LFoudW5wYWNrQWxpZ25tZW50KTtsZXQgQXQ9UmUuZ2V0UGFyYW1ldGVyKDMzMTQpLGNuPVJlLmdldFBhcmFtZXRlcigzMjg3OCksSmk9UmUuZ2V0UGFyYW1ldGVyKDMzMTYpLHhpPVJlLmdldFBhcmFtZXRlcigzMzE1KSxtbj1SZS5nZXRQYXJhbWV0ZXIoMzI4NzcpLFJuPXEuaXNDb21wcmVzc2VkVGV4dHVyZT9xLm1pcG1hcHNbMF06cS5pbWFnZTtSZS5waXhlbFN0b3JlaSgzMzE0LFJuLndpZHRoKSxSZS5waXhlbFN0b3JlaSgzMjg3OCxSbi5oZWlnaHQpLFJlLnBpeGVsU3RvcmVpKDMzMTYsUy5taW4ueCksUmUucGl4ZWxTdG9yZWkoMzMxNSxTLm1pbi55KSxSZS5waXhlbFN0b3JlaSgzMjg3NyxTLm1pbi56KSxxLmlzRGF0YVRleHR1cmV8fHEuaXNEYXRhVGV4dHVyZTNEP1JlLnRleFN1YkltYWdlM0QoVHQsY2UsTC54LEwueSxMLnosVWUsJGUsV2UscnQsZHQsUm4uZGF0YSk6cS5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLFJlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LFJuLmRhdGEpKTpSZS50ZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LGR0LFJuKSxSZS5waXhlbFN0b3JlaSgzMzE0LEF0KSxSZS5waXhlbFN0b3JlaSgzMjg3OCxjbiksUmUucGl4ZWxTdG9yZWkoMzMxNixKaSksUmUucGl4ZWxTdG9yZWkoMzMxNSx4aSksUmUucGl4ZWxTdG9yZWkoMzI4NzcsbW4pLDA9PT1jZSYmWi5nZW5lcmF0ZU1pcG1hcHMmJlJlLmdlbmVyYXRlTWlwbWFwKFR0KSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oUyl7aWUuc2V0VGV4dHVyZTJEKFMsMCksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXtfPTAseT0wLEk9bnVsbCxDZS5yZXNldCgpLGxuLnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1aaS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwLGNsYXNzIGV4dGVuZHMgWml7fS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgUk09Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IFJNKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtSTS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBPTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGFuKHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IE9NKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtPTS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIGJ5PWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07YnkucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyICRtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPU1NLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9RmMoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLG89dGhpcy5zdHJpZGU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07JG0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIG9vPW5ldyAkLGVnPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1yfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspb28ueD10aGlzLmdldFgoZSksb28ueT10aGlzLmdldFkoZSksb28uej10aGlzLmdldFooZSksb28uYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKW9vLng9dGhpcy5nZXRYKGUpLG9vLnk9dGhpcy5nZXRZKGUpLG9vLno9dGhpcy5nZXRaKGUpLG9vLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylvby54PXRoaXMuZ2V0WChlKSxvby55PXRoaXMuZ2V0WShlKSxvby56PXRoaXMuZ2V0WihlKSxvby50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxvby54LG9vLnksb28ueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLG8pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitvXSl9cmV0dXJuIG5ldyBMcihuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBlZyh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmUsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fTtlZy5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgRTI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnJvdGF0aW9uPTAsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtFMi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDt2YXIgbnksZE09bmV3ICQsaXk9bmV3ICQscnk9bmV3ICQsb3k9bmV3IEplLHBNPW5ldyBKZSxUbGU9bmV3IE1uLCRSPW5ldyAkLGhNPW5ldyAkLGUyPW5ldyAkLEJhZT1uZXcgSmUsdVU9bmV3IEplLFZhZT1uZXcgSmU7ZnVuY3Rpb24gdDIobix0LGUsaSxyLG8pe295LnN1YlZlY3RvcnMobixlKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KGkpLHZvaWQgMCE9PXI/KHBNLng9bypveS54LXIqb3kueSxwTS55PXIqb3kueCtvKm95LnkpOnBNLmNvcHkob3kpLG4uY29weSh0KSxuLngrPXBNLngsbi55Kz1wTS55LG4uYXBwbHlNYXRyaXg0KFRsZSl9KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZSIsdm9pZCAwPT09bnkpe255PW5ldyBLaTtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxpPW5ldyAkbShlLDUpO255LnNldEluZGV4KFswLDEsMiwwLDIsM10pLG55LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZyhpLDMsMCwhMSkpLG55LnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZyhpLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9bnksdGhpcy5tYXRlcmlhbD12b2lkIDAhPT10P3Q6bmV3IEUyLHRoaXMuY2VudGVyPW5ldyBKZSguNSwuNSl9cmF5Y2FzdCh0LGUpe251bGw9PT10LmNhbWVyYSYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLGl5LnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxUbGUuY29weSh0LmNhbWVyYS5tYXRyaXhXb3JsZCksdGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsdGhpcy5tYXRyaXhXb3JsZCkscnkuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubW9kZWxWaWV3TWF0cml4KSx0LmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhJiYhMT09PXRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uJiZpeS5tdWx0aXBseVNjYWxhcigtcnkueik7bGV0IHIsbyxpPXRoaXMubWF0ZXJpYWwucm90YXRpb247MCE9PWkmJihvPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkpO2xldCBzPXRoaXMuY2VudGVyO3QyKCRSLnNldCgtLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihoTS5zZXQoLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihlMi5zZXQoLjUsLjUsMCkscnkscyxpeSxyLG8pLEJhZS5zZXQoMCwwKSx1VS5zZXQoMSwwKSxWYWUuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoJFIsaE0sZTIsITEsZE0pO2lmKG51bGw9PT1hJiYodDIoaE0uc2V0KC0uNSwuNSwwKSxyeSxzLGl5LHIsbyksdVUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZSgkUixlMixoTSwhMSxkTSksbnVsbD09PWEpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhkTSk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpkTS5jbG9uZSgpLHV2OktyLmdldFVWKGRNLCRSLGhNLGUyLEJhZSx1VSxWYWUsbmV3IEplKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQuY2VudGVyJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319KS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7dmFyIEhhZT1uZXcgJCxVYWU9bmV3IHRyLHphZT1uZXcgdHIsYThlPW5ldyAkLGphZT1uZXcgTW4sVDI9Y2xhc3MgZXh0ZW5kcyB5b3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgTW4sdGhpcy5iaW5kTWF0cml4SW52ZXJzZT1uZXcgTW59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2xldCB0PW5ldyB0cixlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgaT0wLHI9ZS5jb3VudDtpPHI7aSsrKXt0Lng9ZS5nZXRYKGkpLHQueT1lLmdldFkoaSksdC56PWUuZ2V0WihpKSx0Lnc9ZS5nZXRXKGkpO2xldCBvPTEvdC5tYW5oYXR0YW5MZW5ndGgoKTtvIT09MS8wP3QubXVsdGlwbHlTY2FsYXIobyk6dC5zZXQoMSwwLDAsMCksZS5zZXRYWVpXKGksdC54LHQueSx0LnosdC53KX19dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX1ib25lVHJhbnNmb3JtKHQsZSl7bGV0IGk9dGhpcy5za2VsZXRvbixyPXRoaXMuZ2VvbWV0cnk7VWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSx6YWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxIYWUuY29weShlKS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCBvPTA7bzw0O28rKyl7bGV0IHM9emFlLmdldENvbXBvbmVudChvKTtpZigwIT09cyl7bGV0IGE9VWFlLmdldENvbXBvbmVudChvKTtqYWUubXVsdGlwbHlNYXRyaWNlcyhpLmJvbmVzW2FdLm1hdHJpeFdvcmxkLGkuYm9uZUludmVyc2VzW2FdKSxlLmFkZFNjYWxlZFZlY3RvcihhOGUuY29weShIYWUpLmFwcGx5TWF0cml4NChqYWUpLHMpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fTtUMi5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMCxjbGFzcyBleHRlbmRzIEdpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIsbyxzLGEsbCxjPUlvLHU9SW8sZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBrTT1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7Im51bWJlciI9PXR5cGVvZiBpJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtrTS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdhZT1uZXcgTW4sV2FlPW5ldyBNbixuMj1bXSxmTT1uZXcgeW87KGNsYXNzIGV4dGVuZHMgeW97Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcga00obmV3IEZsb2F0MzJBcnJheSgxNippKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihmTS5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LGZNLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09Zk0ubWF0ZXJpYWwpZm9yKGxldCBvPTA7bzxyO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLEdhZSksV2FlLm11bHRpcGx5TWF0cmljZXMoaSxHYWUpLGZNLm1hdHJpeFdvcmxkPVdhZSxmTS5yYXljYXN0KHQsbjIpO2ZvcihsZXQgcz0wLGE9bjIubGVuZ3RoO3M8YTtzKyspe2xldCBsPW4yW3NdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfW4yLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcga00obmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBqZD1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtqZC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgcWFlPW5ldyAkLFlhZT1uZXcgJCxYYWU9bmV3IE1uLGRVPW5ldyBJaCxpMj1uZXcgQWgsRk09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBqZCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bMF07Zm9yKGxldCByPTEsbz1lLmNvdW50O3I8bztyKyspcWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyLTEpLFlhZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWFlLmRpc3RhbmNlVG8oWWFlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgR3IoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGkyLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksaTIuYXBwbHlNYXRyaXg0KHIpLGkyLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoaTIpKXJldHVybjtYYWUuY29weShyKS5pbnZlcnQoKSxkVS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWGFlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphLGM9bmV3ICQsdT1uZXcgJCxkPW5ldyAkLHA9bmV3ICQsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBmPWkuaW5kZXgsQz1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWYpZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihmLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7bGV0IE89Zi5nZXRYKEkpLGVlPWYuZ2V0WChJKzEpO2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLE8pLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLGVlKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IHhlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO3hlPHQubmVhcnx8eGU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6eGUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfWVsc2UgZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihDLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSksdS5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSsxKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IGVlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO2VlPHQubmVhcnx8ZWU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6ZWUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtGTS5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBRYWU9bmV3ICQsS2FlPW5ldyAkLE5NPWNsYXNzIGV4dGVuZHMgRk17Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bXTtmb3IobGV0IHI9MCxvPWUuY291bnQ7cjxvO3IrPTIpUWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxLYWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT0wPT09cj8wOmlbci0xXSxpW3IrMV09aVtyXStRYWUuZGlzdGFuY2VUbyhLYWUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBHcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O05NLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMCxjbGFzcyBleHRlbmRzIEZNe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBEMj1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtEMi5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgWmFlPW5ldyBNbixOVT1uZXcgSWgscjI9bmV3IEFoLG8yPW5ldyAkO2Z1bmN0aW9uIEphZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1OVS5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyAkO05VLmNsb3Nlc3RQb2ludFRvUG9pbnQobixsKSxsLmFwcGx5TWF0cml4NChpKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPHIubmVhcnx8Yz5yLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KGEpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OnN9KX19KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodD1uZXcgS2ksZT1uZXcgRDIpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkLHM9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCkscjIuY29weShpLmJvdW5kaW5nU3BoZXJlKSxyMi5hcHBseU1hdHJpeDQocikscjIucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShyMikpcmV0dXJuO1phZS5jb3B5KHIpLmludmVydCgpLE5VLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChaYWUpO2xldCBhPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1pLmluZGV4LGQ9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1jKWZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oYy5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspe2xldCBDPWMuZ2V0WChmKTtvMi5mcm9tQnVmZmVyQXR0cmlidXRlKGQsQyksSmFlKG8yLEMsbCxyLHQsZSx0aGlzKX1lbHNlIGZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oZC5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspbzIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShkLGYpLEphZShvMixmLGwscix0LGUsdGhpcyl9ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSkucHJvdG90eXBlLmlzUG9pbnRzPSEwLGNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1zP3M6YnMsdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09bz9vOmJzLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGZ1bmN0aW9uIGQoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhkKX0pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuaW1hZ2UpLmNvcHkodGhpcyl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5pbWFnZTsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0PT0wJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19LnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXMuZm9ybWF0PWksdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH19LnByb3RvdHlwZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX0ucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7c3VwZXIodCxlLGkscixvLHMsYSxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciB4eT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTgsaT0wLHI9MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmksdGhldGFMZW5ndGg6cn0sZT1NYXRoLm1heCgzLGUpO2xldCBvPVtdLHM9W10sYT1bXSxsPVtdLGM9bmV3ICQsdT1uZXcgSmU7cy5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBkPTAscD0zO2Q8PWU7ZCsrLHArPTMpe2xldCBoPWkrZC9lKnI7Yy54PXQqTWF0aC5jb3MoaCksYy55PXQqTWF0aC5zaW4oaCkscy5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0oc1twXS90KzEpLzIsdS55PShzW3ArMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGQ9MTtkPD1lO2QrKylvLnB1c2goZCxkKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgR3IoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgR3IobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgeHkodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSx5YT0obmV3ICQsbmV3ICQsbmV3ICQsbmV3IEtyLGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KGksZSl9Z2V0UG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIGV9Z2V0U3BhY2VkUG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChpL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1nZXRMZW5ndGhzKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpe2lmKHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2xldCBpLGU9W10scj10aGlzLmdldFBvaW50KDApLG89MDtlLnB1c2goMCk7Zm9yKGxldCBzPTE7czw9dDtzKyspaT10aGlzLmdldFBvaW50KHMvdCksbys9aS5kaXN0YW5jZVRvKHIpLGUucHVzaChvKSxyPWk7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX1nZXRVdG9UbWFwcGluZyh0LGUpe2xldCBzLGk9dGhpcy5nZXRMZW5ndGhzKCkscj0wLG89aS5sZW5ndGg7cz1lfHx0Kmlbby0xXTtsZXQgYyxhPTAsbD1vLTE7Zm9yKDthPD1sOylpZihyPU1hdGguZmxvb3IoYSsobC1hKS8yKSxjPWlbcl0tcyxjPDApYT1yKzE7ZWxzZXtpZighKGM+MCkpe2w9cjticmVha31sPXItMX1pZihyPWwsaVtyXT09PXMpcmV0dXJuIHIvKG8tMSk7bGV0IHU9aVtyXTtyZXR1cm4ocisocy11KS8oaVtyKzFdLXUpKS8oby0xKX1nZXRUYW5nZW50KHQsZSl7bGV0IHI9dC0xZS00LG89dCsxZS00O3I8MCYmKHI9MCksbz4xJiYobz0xKTtsZXQgcz10aGlzLmdldFBvaW50KHIpLGE9dGhpcy5nZXRQb2ludChvKSxsPWV8fChzLmlzVmVjdG9yMj9uZXcgSmU6bmV3ICQpO3JldHVybiBsLmNvcHkoYSkuc3ViKHMpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyAkLHI9W10sbz1bXSxzPVtdLGE9bmV3ICQsbD1uZXcgTW47Zm9yKGxldCBoPTA7aDw9dDtoKyspcltoXT10aGlzLmdldFRhbmdlbnRBdChoL3QsbmV3ICQpO29bMF09bmV3ICQsc1swXT1uZXcgJDtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoclswXS54KSxkPU1hdGguYWJzKHJbMF0ueSkscD1NYXRoLmFicyhyWzBdLnopO3U8PWMmJihjPXUsaS5zZXQoMSwwLDApKSxkPD1jJiYoYz1kLGkuc2V0KDAsMSwwKSkscDw9YyYmaS5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKHJbMF0saSkubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxhKSxzWzBdLmNyb3NzVmVjdG9ycyhyWzBdLG9bMF0pO2ZvcihsZXQgaD0xO2g8PXQ7aCsrKXtpZihvW2hdPW9baC0xXS5jbG9uZSgpLHNbaF09c1toLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMocltoLTFdLHJbaF0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7bGV0IGY9TWF0aC5hY29zKF9hKHJbaC0xXS5kb3QocltoXSksLTEsMSkpO29baF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhhLGYpKX1zW2hdLmNyb3NzVmVjdG9ycyhyW2hdLG9baF0pfWlmKCEwPT09ZSl7bGV0IGg9TWF0aC5hY29zKF9hKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtoLz10LHJbMF0uZG90KGEuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihoPS1oKTtmb3IobGV0IGY9MTtmPD10O2YrKylvW2ZdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMocltmXSxoKmYpKSxzW2ZdLmNyb3NzVmVjdG9ycyhyW2ZdLG9bZl0pfXJldHVybnt0YW5nZW50czpyLG5vcm1hbHM6byxiaW5vcm1hbHM6c319Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0pLEN5PWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD0wLGU9MCxpPTEscj0xLG89MCxzPTIqTWF0aC5QSSxhPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9ZSx0aGlzLnhSYWRpdXM9aSx0aGlzLnlSYWRpdXM9cix0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9cyx0aGlzLmFDbG9ja3dpc2U9YSx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplLHI9MipNYXRoLlBJLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxzPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1yO2Zvcig7bz5yOylvLT1yO288TnVtYmVyLkVQU0lMT04mJihvPXM/MDpyKSwhMD09PXRoaXMuYUNsb2Nrd2lzZSYmIXMmJihvPT09cj9vPS1yOm8tPXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZigwIT09dGhpcy5hUm90YXRpb24pe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxkPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxwPWwtdGhpcy5hWCxoPWMtdGhpcy5hWTtsPXAqdS1oKmQrdGhpcy5hWCxjPXAqZCtoKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtDeS5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIEEyPWNsYXNzIGV4dGVuZHMgQ3l7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpLGkscixvLHMpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07ZnVuY3Rpb24gRnooKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIobyxzLGEsbCl7bj1vLHQ9YSxlPS0zKm8rMypzLTIqYS1sLGk9MipvLTIqcythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyl7cihzLGEsYyooYS1vKSxjKihsLXMpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyx1LGQpe2xldCBwPShzLW8pL2MtKGEtbykvKGMrdSkrKGEtcykvdSxoPShhLXMpL3UtKGwtcykvKHUrZCkrKGwtYSkvZDtwKj11LGgqPXUscihzLGEscCxoKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgcz1vKm87cmV0dXJuIG4rdCpvK2UqcytpKihzKm8pfX19QTIucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7dmFyIHMyPW5ldyAkLHBVPW5ldyBGeixoVT1uZXcgRnosZlU9bmV3IEZ6LEkyPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD1bXSxlPSExLGk9ImNlbnRyaXBldGFsIixyPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPWksdGhpcy50ZW5zaW9uPXJ9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgYyx1LGk9ZSxyPXRoaXMucG9pbnRzLG89ci5sZW5ndGgscz0oby0odGhpcy5jbG9zZWQ/MDoxKSkqdCxhPU1hdGguZmxvb3IocyksbD1zLWE7dGhpcy5jbG9zZWQ/YSs9YT4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMoYSkvbykrMSkqbzowPT09bCYmYT09PW8tMSYmKGE9by0yLGw9MSksdGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklb106KHMyLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1zMik7bGV0IGQ9clthJW9dLHA9clsoYSsxKSVvXTtpZih0aGlzLmNsb3NlZHx8YSsyPG8/dT1yWyhhKzIpJW9dOihzMi5zdWJWZWN0b3JzKHJbby0xXSxyW28tMl0pLmFkZChyW28tMV0pLHU9czIpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2xldCBoPSJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlPy41Oi4yNSxmPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoZCksaCksbT1NYXRoLnBvdyhkLmRpc3RhbmNlVG9TcXVhcmVkKHApLGgpLEM9TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZCh1KSxoKTttPDFlLTQmJihtPTEpLGY8MWUtNCYmKGY9bSksQzwxZS00JiYoQz1tKSxwVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGQueCxwLngsdS54LGYsbSxDKSxoVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGQueSxwLnksdS55LGYsbSxDKSxmVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGQueixwLnosdS56LGYsbSxDKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihwVS5pbml0Q2F0bXVsbFJvbShjLngsZC54LHAueCx1LngsdGhpcy50ZW5zaW9uKSxoVS5pbml0Q2F0bXVsbFJvbShjLnksZC55LHAueSx1LnksdGhpcy50ZW5zaW9uKSxmVS5pbml0Q2F0bXVsbFJvbShjLnosZC56LHAueix1LnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIGkuc2V0KHBVLmNhbGMobCksaFUuY2FsYyhsKSxmVS5jYWxjKGwpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyAkKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fTtmdW5jdGlvbiAkYWUobix0LGUsaSxyKXtsZXQgbz0uNSooaS10KSxzPS41KihyLWUpLGE9bipuO3JldHVybigyKmUtMippK28rcykqKG4qYSkrKC0zKmUrMyppLTIqby1zKSphK28qbitlfWZ1bmN0aW9uIGJNKG4sdCxlLGkpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtyZXR1cm4gMiooMS1uKSpuKnR9KG4sZSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKnR9KG4saSl9ZnVuY3Rpb24geE0obix0LGUsaSxyKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIDMqZSplKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiAzKigxLW4pKm4qbip0fShuLGkpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIG4qbipuKnR9KG4scil9STIucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDt2YXIgTE09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyBKZSxlPW5ldyBKZSxpPW5ldyBKZSxyPW5ldyBKZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEplKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQoeE0odCxyLngsby54LHMueCxhLngpLHhNKHQsci55LG8ueSxzLnksYS55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtMTS5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwO3ZhciBQMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkLHI9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHhNKHQsci54LG8ueCxzLngsYS54KSx4TSh0LHIueSxvLnkscy55LGEueSkseE0odCxyLnosby56LHMueixhLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O1AyLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwO3ZhciB3eT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWU7cmV0dXJuIDE9PT10P2kuY29weSh0aGlzLnYyKTooaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksaX1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1nZXRUYW5nZW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplO3JldHVybiBpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07d3kucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwO3ZhciBCTT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplLGk9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O0JNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciBSMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpLGJNKHQsci56LG8ueixzLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1IyLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgVk09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBKZSl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLG89KHIubGVuZ3RoLTEpKnQscz1NYXRoLmZsb29yKG8pLGE9by1zLGw9clswPT09cz9zOnMtMV0sYz1yW3NdLHU9cltzPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpzKzFdLGQ9cltzPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpzKzJdO3JldHVybiBpLnNldCgkYWUoYSxsLngsYy54LHUueCxkLngpLCRhZShhLGwueSxjLnksdS55LGQueSkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgSmUpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTtWTS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgRGxlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOkEyLENhdG11bGxSb21DdXJ2ZTM6STIsQ3ViaWNCZXppZXJDdXJ2ZTpMTSxDdWJpY0JlemllckN1cnZlMzpQMixFbGxpcHNlQ3VydmU6Q3ksTGluZUN1cnZlOnd5LExpbmVDdXJ2ZTM6Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZTtyZXR1cm4gMT09PXQ/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LFF1YWRyYXRpY0JlemllckN1cnZlOkJNLFF1YWRyYXRpY0JlemllckN1cnZlMzpSMixTcGxpbmVDdXJ2ZTpWTX0pLGpVPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtsZXQgdD10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTt0LmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgd3koZSx0KSl9Z2V0UG9pbnQodCxlKXtsZXQgaT10KnRoaXMuZ2V0TGVuZ3RoKCkscj10aGlzLmdldEN1cnZlTGVuZ3RocygpLG89MDtmb3IoO288ci5sZW5ndGg7KXtpZihyW29dPj1pKXtsZXQgcz1yW29dLWksYT10aGlzLmN1cnZlc1tvXSxsPWEuZ2V0TGVuZ3RoKCk7cmV0dXJuIGEuZ2V0UG9pbnRBdCgwPT09bD8wOjEtcy9sLGUpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxlPTA7Zm9yKGxldCBpPTAscj10aGlzLmN1cnZlcy5sZW5ndGg7aTxyO2krKyllKz10aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLnB1c2goZVswXSksZX1nZXRQb2ludHModD0xMil7bGV0IGksZT1bXTtmb3IobGV0IHI9MCxvPXRoaXMuY3VydmVzO3I8by5sZW5ndGg7cisrKXtsZXQgcz1vW3JdLGw9cy5nZXRQb2ludHMocyYmcy5pc0VsbGlwc2VDdXJ2ZT8yKnQ6cyYmKHMuaXNMaW5lQ3VydmV8fHMuaXNMaW5lQ3VydmUzKT8xOnMmJnMuaXNTcGxpbmVDdXJ2ZT90KnMucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXQuY3VydmVzLnB1c2godGhpcy5jdXJ2ZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sSE09Y2xhc3MgZXh0ZW5kcyBqVXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEplLHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtsZXQgaT1uZXcgd3kodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSmUodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBvPW5ldyBCTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQoaSxyKSx0aGlzfWJlemllckN1cnZlVG8odCxlLGkscixvLHMpe2xldCBhPW5ldyBMTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpLG5ldyBKZShvLHMpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChhKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxzKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxpPW5ldyBWTShlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxzKSx0aGlzfWFic2FyYyh0LGUsaSxyLG8scyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsaSxpLHIsbyxzKSx0aGlzfWVsbGlwc2UodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaSxyLG8scyxhLGwpLHRoaXN9YWJzZWxsaXBzZSh0LGUsaSxyLG8scyxhLGwpe2xldCBjPW5ldyBDeSh0LGUsaSxyLG8scyxhLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgZD1jLmdldFBvaW50KDApO2QuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oZC54LGQueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sR2Q9Y2xhc3MgZXh0ZW5kcyBITXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dGhpcy5ob2xlcy5sZW5ndGg7aTxyO2krKyllW2ldPXRoaXMuaG9sZXNbaV0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmhvbGVzLnB1c2godC5ob2xlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IEhNKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBBbGUobix0LGUsaSxyKXtsZXQgbyxzO2lmKHI9PT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0wO2ZvcihsZXQgbz10LHM9ZS1pO288ZTtvKz1pKXIrPShuW3NdLW5bb10pKihuW28rMV0rbltzKzFdKSxzPW87cmV0dXJuIHJ9KG4sdCxlLGkpPjApZm9yKG89dDtvPGU7bys9aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO2Vsc2UgZm9yKG89ZS1pO28+PXQ7by09aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO3JldHVybiBzJiZxMihzLHMubmV4dCkmJihqTShzKSxzPXMubmV4dCksc31mdW5jdGlvbiBSaChuLHQpe2lmKCFuKXJldHVybiBuO3R8fCh0PW4pO2xldCBpLGU9bjtkb3tpZihpPSExLGUuc3RlaW5lcnx8IXEyKGUsZS5uZXh0KSYmMCE9PWpyKGUucHJldixlLGUubmV4dCkpZT1lLm5leHQ7ZWxzZXtpZihqTShlKSxlPXQ9ZS5wcmV2LGU9PT1lLm5leHQpYnJlYWs7aT0hMH19d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIFVNKG4sdCxlLGkscixvLHMpe2lmKCFuKXJldHVybjshcyYmbyYmZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bjtkb3tudWxsPT09ci56JiYoci56PUdVKHIueCxyLnksdCxlLGkpKSxyLnByZXZaPXIucHJldixyLm5leHRaPXIubmV4dCxyPXIubmV4dH13aGlsZShyIT09bik7ci5wcmV2Wi5uZXh0Wj1udWxsLHIucHJldlo9bnVsbCxmdW5jdGlvbihuKXtsZXQgdCxlLGkscixvLHMsYSxsLGM9MTtkb3tmb3IoZT1uLG49bnVsbCxvPW51bGwscz0wO2U7KXtmb3IocysrLGk9ZSxhPTAsdD0wO3Q8YyYmKGErKyxpPWkubmV4dFosaSk7dCsrKTtmb3IobD1jO2E+MHx8bD4wJiZpOykwIT09YSYmKDA9PT1sfHwhaXx8ZS56PD1pLnopPyhyPWUsZT1lLm5leHRaLGEtLSk6KHI9aSxpPWkubmV4dFosbC0tKSxvP28ubmV4dFo9cjpuPXIsci5wcmV2Wj1vLG89cjtlPWl9by5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUocz4xKX0ocil9KG4saSxyLG8pO2xldCBsLGMsYT1uO2Zvcig7bi5wcmV2IT09bi5uZXh0OylpZihsPW4ucHJldixjPW4ubmV4dCxvP184ZShuLGkscixvKTpnOGUobikpdC5wdXNoKGwuaS9lKSx0LnB1c2gobi5pL2UpLHQucHVzaChjLmkvZSksak0obiksbj1jLm5leHQsYT1jLm5leHQ7ZWxzZSBpZigobj1jKT09PWEpe3M/MT09PXM/VU0obj12OGUoUmgobiksdCxlKSx0LGUsaSxyLG8sMik6Mj09PXMmJnk4ZShuLHQsZSxpLHIsbyk6VU0oUmgobiksdCxlLGkscixvLDEpO2JyZWFrfX1mdW5jdGlvbiBnOGUobil7bGV0IHQ9bi5wcmV2LGU9bixpPW4ubmV4dDtpZihqcih0LGUsaSk+PTApcmV0dXJuITE7bGV0IHI9bi5uZXh0Lm5leHQ7Zm9yKDtyIT09bi5wcmV2Oyl7aWYoY3kodC54LHQueSxlLngsZS55LGkueCxpLnksci54LHIueSkmJmpyKHIucHJldixyLHIubmV4dCk+PTApcmV0dXJuITE7cj1yLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gXzhlKG4sdCxlLGkpe2xldCByPW4ucHJldixvPW4scz1uLm5leHQ7aWYoanIocixvLHMpPj0wKXJldHVybiExO2xldCBjPXIueD5vLng/ci54PnMueD9yLng6cy54Om8ueD5zLng/by54OnMueCx1PXIueT5vLnk/ci55PnMueT9yLnk6cy55Om8ueT5zLnk/by55OnMueSxkPUdVKHIueDxvLng/ci54PHMueD9yLng6cy54Om8ueDxzLng/by54OnMueCxyLnk8by55P3IueTxzLnk/ci55OnMueTpvLnk8cy55P28ueTpzLnksdCxlLGkpLHA9R1UoYyx1LHQsZSxpKSxoPW4ucHJldlosZj1uLm5leHRaO2Zvcig7aCYmaC56Pj1kJiZmJiZmLno8PXA7KXtpZihoIT09bi5wcmV2JiZoIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxoLngsaC55KSYmanIoaC5wcmV2LGgsaC5uZXh0KT49MHx8KGg9aC5wcmV2WixmIT09bi5wcmV2JiZmIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxmLngsZi55KSYmanIoZi5wcmV2LGYsZi5uZXh0KT49MCkpcmV0dXJuITE7Zj1mLm5leHRafWZvcig7aCYmaC56Pj1kOyl7aWYoaCE9PW4ucHJldiYmaCE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksaC54LGgueSkmJmpyKGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7ZiYmZi56PD1wOyl7aWYoZiE9PW4ucHJldiYmZiE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksZi54LGYueSkmJmpyKGYucHJldixmLGYubmV4dCk+PTApcmV0dXJuITE7Zj1mLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHY4ZShuLHQsZSl7bGV0IGk9bjtkb3tsZXQgcj1pLnByZXYsbz1pLm5leHQubmV4dDshcTIocixvKSYmSWxlKHIsaSxpLm5leHQsbykmJnpNKHIsbykmJnpNKG8scikmJih0LnB1c2goci5pL2UpLHQucHVzaChpLmkvZSksdC5wdXNoKG8uaS9lKSxqTShpKSxqTShpLm5leHQpLGk9bj1vKSxpPWkubmV4dH13aGlsZShpIT09bik7cmV0dXJuIFJoKGkpfWZ1bmN0aW9uIHk4ZShuLHQsZSxpLHIsbyl7bGV0IHM9bjtkb3tsZXQgYT1zLm5leHQubmV4dDtmb3IoO2EhPT1zLnByZXY7KXtpZihzLmkhPT1hLmkmJkQ4ZShzLGEpKXtsZXQgbD1QbGUocyxhKTtyZXR1cm4gcz1SaChzLHMubmV4dCksbD1SaChsLGwubmV4dCksVU0ocyx0LGUsaSxyLG8pLHZvaWQgVU0obCx0LGUsaSxyLG8pfWE9YS5uZXh0fXM9cy5uZXh0fXdoaWxlKHMhPT1uKX1mdW5jdGlvbiB4OGUobix0KXtyZXR1cm4gbi54LXQueH1mdW5jdGlvbiBDOGUobix0KXtpZih0PWZ1bmN0aW9uKG4sdCl7bGV0IHMsZT10LGk9bi54LHI9bi55LG89LTEvMDtkb3tpZihyPD1lLnkmJnI+PWUubmV4dC55JiZlLm5leHQueSE9PWUueSl7bGV0IHA9ZS54KyhyLWUueSkqKGUubmV4dC54LWUueCkvKGUubmV4dC55LWUueSk7aWYocDw9aSYmcD5vKXtpZihvPXAscD09PWkpe2lmKHI9PT1lLnkpcmV0dXJuIGU7aWYocj09PWUubmV4dC55KXJldHVybiBlLm5leHR9cz1lLng8ZS5uZXh0Lng/ZTplLm5leHR9fWU9ZS5uZXh0fXdoaWxlKGUhPT10KTtpZighcylyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcztsZXQgZCxhPXMsbD1zLngsYz1zLnksdT0xLzA7ZT1zO2Rve2k+PWUueCYmZS54Pj1sJiZpIT09ZS54JiZjeShyPGM/aTpvLHIsbCxjLHI8Yz9vOmkscixlLngsZS55KSYmKGQ9TWF0aC5hYnMoci1lLnkpLyhpLWUueCksek0oZSxuKSYmKGQ8dXx8ZD09PXUmJihlLng+cy54fHxlLng9PT1zLngmJk04ZShzLGUpKSkmJihzPWUsdT1kKSksZT1lLm5leHR9d2hpbGUoZSE9PWEpO3JldHVybiBzfShuLHQpLHQpe2xldCBlPVBsZSh0LG4pO1JoKHQsdC5uZXh0KSxSaChlLGUubmV4dCl9fWZ1bmN0aW9uIE04ZShuLHQpe3JldHVybiBqcihuLnByZXYsbix0LnByZXYpPDAmJmpyKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBHVShuLHQsZSxpLHIpe3JldHVybihuPTE0MzE2NTU3NjUmKChuPTg1ODk5MzQ1OSYoKG49MjUyNjQ1MTM1Jigobj0xNjcxMTkzNSYoKG49MzI3NjcqKG4tZSkqcil8bjw8OCkpfG48PDQpKXxuPDwyKSl8bjw8MSkpfCh0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtaSkqcil8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpPDwxfWZ1bmN0aW9uIFQ4ZShuKXtsZXQgdD1uLGU9bjtkb3sodC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHR9d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIGN5KG4sdCxlLGkscixvLHMsYSl7cmV0dXJuKHItcykqKHQtYSktKG4tcykqKG8tYSk+PTAmJihuLXMpKihpLWEpLShlLXMpKih0LWEpPj0wJiYoZS1zKSooby1hKS0oci1zKSooaS1hKT49MH1mdW5jdGlvbiBEOGUobix0KXtyZXR1cm4gbi5uZXh0LmkhPT10LmkmJm4ucHJldi5pIT09dC5pJiYhZnVuY3Rpb24obix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJklsZShlLGUubmV4dCxuLHQpKXJldHVybiEwO2U9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4hMX0obix0KSYmKHpNKG4sdCkmJnpNKHQsbikmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bixpPSExLHI9KG4ueCt0LngpLzIsbz0obi55K3QueSkvMjtkb3tlLnk+byE9ZS5uZXh0Lnk+byYmZS5uZXh0LnkhPT1lLnkmJnI8KGUubmV4dC54LWUueCkqKG8tZS55KS8oZS5uZXh0LnktZS55KStlLngmJihpPSFpKSxlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuIGl9KG4sdCkmJihqcihuLnByZXYsbix0LnByZXYpfHxqcihuLHQucHJldix0KSl8fHEyKG4sdCkmJmpyKG4ucHJldixuLG4ubmV4dCk+MCYmanIodC5wcmV2LHQsdC5uZXh0KT4wKX1mdW5jdGlvbiBqcihuLHQsZSl7cmV0dXJuKHQueS1uLnkpKihlLngtdC54KS0odC54LW4ueCkqKGUueS10LnkpfWZ1bmN0aW9uIHEyKG4sdCl7cmV0dXJuIG4ueD09PXQueCYmbi55PT09dC55fWZ1bmN0aW9uIElsZShuLHQsZSxpKXtsZXQgcj1sMihqcihuLHQsZSkpLG89bDIoanIobix0LGkpKSxzPWwyKGpyKGUsaSxuKSksYT1sMihqcihlLGksdCkpO3JldHVybiEhKHIhPT1vJiZzIT09YXx8MD09PXImJmEyKG4sZSx0KXx8MD09PW8mJmEyKG4saSx0KXx8MD09PXMmJmEyKGUsbixpKXx8MD09PWEmJmEyKGUsdCxpKSl9ZnVuY3Rpb24gYTIobix0LGUpe3JldHVybiB0Lng8PU1hdGgubWF4KG4ueCxlLngpJiZ0Lng+PU1hdGgubWluKG4ueCxlLngpJiZ0Lnk8PU1hdGgubWF4KG4ueSxlLnkpJiZ0Lnk+PU1hdGgubWluKG4ueSxlLnkpfWZ1bmN0aW9uIGwyKG4pe3JldHVybiBuPjA/MTpuPDA/LTE6MH1mdW5jdGlvbiB6TShuLHQpe3JldHVybiBqcihuLnByZXYsbixuLm5leHQpPDA/anIobix0LG4ubmV4dCk+PTAmJmpyKG4sbi5wcmV2LHQpPj0wOmpyKG4sdCxuLnByZXYpPDB8fGpyKG4sbi5uZXh0LHQpPDB9ZnVuY3Rpb24gUGxlKG4sdCl7bGV0IGU9bmV3IFdVKG4uaSxuLngsbi55KSxpPW5ldyBXVSh0LmksdC54LHQueSkscj1uLm5leHQsbz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLG8ubmV4dD1pLGkucHJldj1vLGl9ZnVuY3Rpb24gZWxlKG4sdCxlLGkpe2xldCByPW5ldyBXVShuLHQsZSk7cmV0dXJuIGk/KHIubmV4dD1pLm5leHQsci5wcmV2PWksaS5uZXh0LnByZXY9cixpLm5leHQ9cik6KHIucHJldj1yLHIubmV4dD1yKSxyfWZ1bmN0aW9uIGpNKG4pe24ubmV4dC5wcmV2PW4ucHJldixuLnByZXYubmV4dD1uLm5leHQsbi5wcmV2WiYmKG4ucHJldloubmV4dFo9bi5uZXh0Wiksbi5uZXh0WiYmKG4ubmV4dFoucHJldlo9bi5wcmV2Wil9ZnVuY3Rpb24gV1Uobix0LGUpe3RoaXMuaT1uLHRoaXMueD10LHRoaXMueT1lLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfXZhciB6dT1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxvPTA7bzxlO3I9bysrKWkrPXRbcl0ueCp0W29dLnktdFtvXS54KnRbcl0ueTtyZXR1cm4uNSppfXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4genUuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7bGV0IGk9W10scj1bXSxvPVtdO3RsZSh0KSxubGUoaSx0KTtsZXQgcz10Lmxlbmd0aDtlLmZvckVhY2godGxlKTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrKylyLnB1c2gocykscys9ZVtsXS5sZW5ndGgsbmxlKGksZVtsXSk7bGV0IGE9ZnVuY3Rpb24obix0LGU9Mil7bGV0IGEsbCxjLHUsZCxwLGgsaT10JiZ0Lmxlbmd0aCxyPWk/dFswXSplOm4ubGVuZ3RoLG89QWxlKG4sMCxyLGUsITApLHM9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gcztpZihpJiYobz1mdW5jdGlvbihuLHQsZSxpKXtsZXQgbyxzLGEsbCxjLHI9W107Zm9yKG89MCxzPXQubGVuZ3RoO288cztvKyspYT10W29dKmksbD1vPHMtMT90W28rMV0qaTpuLmxlbmd0aCxjPUFsZShuLGEsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2goVDhlKGMpKTtmb3Ioci5zb3J0KHg4ZSksbz0wO288ci5sZW5ndGg7bysrKUM4ZShyW29dLGUpLGU9UmgoZSxlLm5leHQpO3JldHVybiBlfShuLHQsbyxlKSksbi5sZW5ndGg+ODAqZSl7YT1jPW5bMF0sbD11PW5bMV07Zm9yKGxldCBmPWU7ZjxyO2YrPWUpZD1uW2ZdLHA9bltmKzFdLGQ8YSYmKGE9ZCkscDxsJiYobD1wKSxkPmMmJihjPWQpLHA+dSYmKHU9cCk7aD1NYXRoLm1heChjLWEsdS1sKSxoPTAhPT1oPzEvaDowfXJldHVybiBVTShvLHMsZSxhLGwsaCksc30oaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpby5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIHRsZShuKXtsZXQgdD1uLmxlbmd0aDt0PjImJm5bdC0xXS5lcXVhbHMoblswXSkmJm4ucG9wKCl9ZnVuY3Rpb24gbmxlKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKHRbZV0ueCksbi5wdXNoKHRbZV0ueSl9dmFyIE9oPWNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IodD1uZXcgR2QoW25ldyBKZSguNSwuNSksbmV3IEplKC0uNSwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10sbz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspcyh0W2FdKTtmdW5jdGlvbiBzKGEpe2xldCBsPVtdLGM9dm9pZCAwIT09ZS5jdXJ2ZVNlZ21lbnRzP2UuY3VydmVTZWdtZW50czoxMix1PXZvaWQgMCE9PWUuc3RlcHM/ZS5zdGVwczoxLGQ9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEscD12b2lkIDA9PT1lLmJldmVsRW5hYmxlZHx8ZS5iZXZlbEVuYWJsZWQsaD12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6LjIsZj12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTpoLS4xLG09dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsQz12b2lkIDAhPT1lLmJldmVsU2VnbWVudHM/ZS5iZXZlbFNlZ21lbnRzOjMsXz1lLmV4dHJ1ZGVQYXRoLHk9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOlI4ZTt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxkPWUuYW1vdW50KTtsZXQgSSxPLGVlLFgseGUsQT0hMTtfJiYoST1fLmdldFNwYWNlZFBvaW50cyh1KSxBPSEwLHA9ITEsTz1fLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksZWU9bmV3ICQsWD1uZXcgJCx4ZT1uZXcgJCkscHx8KEM9MCxoPTAsZj0wLG09MCk7bGV0IGZlPWEuZXh0cmFjdFBvaW50cyhjKSx2ZT1mZS5zaGFwZSxUPWZlLmhvbGVzO2lmKCF6dS5pc0Nsb2NrV2lzZSh2ZSkpe3ZlPXZlLnJldmVyc2UoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO3p1LmlzQ2xvY2tXaXNlKFllKSYmKFRbaWVdPVllLnJldmVyc2UoKSl9fWxldCBsZT16dS50cmlhbmd1bGF0ZVNoYXBlKHZlLFQpLGhlPXZlO2ZvcihsZXQgaWU9MCxjdD1ULmxlbmd0aDtpZTxjdDtpZSsrKXZlPXZlLmNvbmNhdChUW2llXSk7ZnVuY3Rpb24geWUoaWUsY3QsWWUpe3JldHVybiBjdHx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxjdC5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKFllKS5hZGQoaWUpfWxldCBKPXZlLmxlbmd0aCxhZT1sZS5sZW5ndGg7ZnVuY3Rpb24gbWUoaWUsY3QsWWUpe2xldCB4dCxodCxzbixTbj1pZS54LWN0Lngsb2k9aWUueS1jdC55LFVpPVllLngtaWUueCx6aT1ZZS55LWllLnksUT1TbipTbitvaSpvaTtpZihNYXRoLmFicyhTbip6aS1vaSpVaSk+TnVtYmVyLkVQU0lMT04pe2xldCBWZT1NYXRoLnNxcnQoUSksQ3Q9TWF0aC5zcXJ0KFVpKlVpK3ppKnppKSx0bj1jdC54LW9pL1ZlLEJlPWN0LnkrU24vVmUsRnQ9KChZZS54LXppL0N0LXRuKSp6aS0oWWUueStVaS9DdC1CZSkqVWkpLyhTbip6aS1vaSpVaSk7eHQ9dG4rU24qRnQtaWUueCxodD1CZStvaSpGdC1pZS55O2xldCBrdD14dCp4dCtodCpodDtpZihrdDw9MilyZXR1cm4gbmV3IEplKHh0LGh0KTtzbj1NYXRoLnNxcnQoa3QvMil9ZWxzZXtsZXQgVmU9ITE7U24+TnVtYmVyLkVQU0lMT04/VWk+TnVtYmVyLkVQU0lMT04mJihWZT0hMCk6U248LU51bWJlci5FUFNJTE9OP1VpPC1OdW1iZXIuRVBTSUxPTiYmKFZlPSEwKTpNYXRoLnNpZ24ob2kpPT09TWF0aC5zaWduKHppKSYmKFZlPSEwKSxWZT8oeHQ9LW9pLGh0PVNuLHNuPU1hdGguc3FydChRKSk6KHh0PVNuLGh0PW9pLHNuPU1hdGguc3FydChRLzIpKX1yZXR1cm4gbmV3IEplKHh0L3NuLGh0L3NuKX1sZXQgamU9W107Zm9yKGxldCBpZT0wLGN0PWhlLmxlbmd0aCxZZT1jdC0xLHh0PWllKzE7aWU8Y3Q7aWUrKyxZZSsrLHh0KyspWWU9PT1jdCYmKFllPTApLHh0PT09Y3QmJih4dD0wKSxqZVtpZV09bWUoaGVbaWVdLGhlW1llXSxoZVt4dF0pO2xldCBGZSxNZT1bXSx1dD1qZS5jb25jYXQoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO0ZlPVtdO2ZvcihsZXQgeHQ9MCxodD1ZZS5sZW5ndGgsc249aHQtMSxTbj14dCsxO3h0PGh0O3h0Kyssc24rKyxTbisrKXNuPT09aHQmJihzbj0wKSxTbj09PWh0JiYoU249MCksRmVbeHRdPW1lKFllW3h0XSxZZVtzbl0sWWVbU25dKTtNZS5wdXNoKEZlKSx1dD11dC5jb25jYXQoRmUpfWZvcihsZXQgaWU9MDtpZTxDO2llKyspe2xldCBjdD1pZS9DLFllPWgqTWF0aC5jb3MoY3QqTWF0aC5QSS8yKSx4dD1mKk1hdGguc2luKGN0Kk1hdGguUEkvMikrbTtmb3IobGV0IGh0PTAsc249aGUubGVuZ3RoO2h0PHNuO2h0Kyspe2xldCBTbj15ZShoZVtodF0samVbaHRdLHh0KTtFdChTbi54LFNuLnksLVllKX1mb3IobGV0IGh0PTAsc249VC5sZW5ndGg7aHQ8c247aHQrKyl7bGV0IFNuPVRbaHRdO0ZlPU1lW2h0XTtmb3IobGV0IG9pPTAsVWk9U24ubGVuZ3RoO29pPFVpO29pKyspe2xldCB6aT15ZShTbltvaV0sRmVbb2ldLHh0KTtFdCh6aS54LHppLnksLVllKX19fWxldCBTdD1mK207Zm9yKGxldCBpZT0wO2llPEo7aWUrKyl7bGV0IGN0PXA/eWUodmVbaWVdLHV0W2llXSxTdCk6dmVbaWVdO0E/KFguY29weShPLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LngpLGVlLmNvcHkoTy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LnkpLHhlLmNvcHkoSVswXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChjdC54LGN0LnksMCl9Zm9yKGxldCBpZT0xO2llPD11O2llKyspZm9yKGxldCBjdD0wO2N0PEo7Y3QrKyl7bGV0IFllPXA/eWUodmVbY3RdLHV0W2N0XSxTdCk6dmVbY3RdO0E/KFguY29weShPLm5vcm1hbHNbaWVdKS5tdWx0aXBseVNjYWxhcihZZS54KSxlZS5jb3B5KE8uYmlub3JtYWxzW2llXSkubXVsdGlwbHlTY2FsYXIoWWUueSkseGUuY29weShJW2llXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChZZS54LFllLnksZC91KmllKX1mb3IobGV0IGllPUMtMTtpZT49MDtpZS0tKXtsZXQgY3Q9aWUvQyxZZT1oKk1hdGguY29zKGN0Kk1hdGguUEkvMikseHQ9ZipNYXRoLnNpbihjdCpNYXRoLlBJLzIpK207Zm9yKGxldCBodD0wLHNuPWhlLmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249eWUoaGVbaHRdLGplW2h0XSx4dCk7RXQoU24ueCxTbi55LGQrWWUpfWZvcihsZXQgaHQ9MCxzbj1ULmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249VFtodF07RmU9TWVbaHRdO2ZvcihsZXQgb2k9MCxVaT1Tbi5sZW5ndGg7b2k8VWk7b2krKyl7bGV0IHppPXllKFNuW29pXSxGZVtvaV0seHQpO0E/RXQoemkueCx6aS55K0lbdS0xXS55LElbdS0xXS54K1llKTpFdCh6aS54LHppLnksZCtZZSl9fX1mdW5jdGlvbiBBbihpZSxjdCl7bGV0IFllPWllLmxlbmd0aDtmb3IoOy0tWWU+PTA7KXtsZXQgeHQ9WWUsaHQ9WWUtMTtodDwwJiYoaHQ9aWUubGVuZ3RoLTEpO2ZvcihsZXQgc249MCxTbj11KzIqQztzbjxTbjtzbisrKXtsZXQgb2k9SipzbixVaT1KKihzbisxKTtDZShjdCt4dCtvaSxjdCtodCtvaSxjdCtodCtVaSxjdCt4dCtVaSl9fX1mdW5jdGlvbiBFdChpZSxjdCxZZSl7bC5wdXNoKGllKSxsLnB1c2goY3QpLGwucHVzaChZZSl9ZnVuY3Rpb24gb24oaWUsY3QsWWUpe3Z0KGllKSx2dChjdCksdnQoWWUpO2xldCB4dD1yLmxlbmd0aC8zLGh0PXkuZ2VuZXJhdGVUb3BVVihpLHIseHQtMyx4dC0yLHh0LTEpO190KGh0WzBdKSxfdChodFsxXSksX3QoaHRbMl0pfWZ1bmN0aW9uIENlKGllLGN0LFllLHh0KXt2dChpZSksdnQoY3QpLHZ0KHh0KSx2dChjdCksdnQoWWUpLHZ0KHh0KTtsZXQgaHQ9ci5sZW5ndGgvMyxzbj15LmdlbmVyYXRlU2lkZVdhbGxVVihpLHIsaHQtNixodC0zLGh0LTIsaHQtMSk7X3Qoc25bMF0pLF90KHNuWzFdKSxfdChzblszXSksX3Qoc25bMV0pLF90KHNuWzJdKSxfdChzblszXSl9ZnVuY3Rpb24gdnQoaWUpe3IucHVzaChsWzMqaWUrMF0pLHIucHVzaChsWzMqaWUrMV0pLHIucHVzaChsWzMqaWUrMl0pfWZ1bmN0aW9uIF90KGllKXtvLnB1c2goaWUueCksby5wdXNoKGllLnkpfShmdW5jdGlvbigpe2xldCBpZT1yLmxlbmd0aC8zO2lmKHApe2xldCBjdD0wLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMl0rWWUsaHRbMV0rWWUsaHRbMF0rWWUpfWN0PXUrMipDLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMF0rWWUsaHRbMV0rWWUsaHRbMl0rWWUpfX1lbHNle2ZvcihsZXQgY3Q9MDtjdDxhZTtjdCsrKXtsZXQgWWU9bGVbY3RdO29uKFllWzJdLFllWzFdLFllWzBdKX1mb3IobGV0IGN0PTA7Y3Q8YWU7Y3QrKyl7bGV0IFllPWxlW2N0XTtvbihZZVswXStKKnUsWWVbMV0rSip1LFllWzJdK0oqdSl9fWkuYWRkR3JvdXAoaWUsci5sZW5ndGgvMy1pZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgaWU9ci5sZW5ndGgvMyxjdD0wO0FuKGhlLGN0KSxjdCs9aGUubGVuZ3RoO2ZvcihsZXQgWWU9MCx4dD1ULmxlbmd0aDtZZTx4dDtZZSsrKXtsZXQgaHQ9VFtZZV07QW4oaHQsY3QpLGN0Kz1odC5sZW5ndGh9aS5hZGRHcm91cChpZSxyLmxlbmd0aC8zLWllLDEpfSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKG8sMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2lmKGUuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBpPTAscj1uLmxlbmd0aDtpPHI7aSsrKWUuc2hhcGVzLnB1c2gobltpXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdm9pZCAwIT09dC5leHRydWRlUGF0aCYmKGUub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxlfSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgbz0wLHM9dC5zaGFwZXMubGVuZ3RoO288cztvKyspaS5wdXNoKGVbdC5zaGFwZXNbb11dKTtsZXQgcj10Lm9wdGlvbnMuZXh0cnVkZVBhdGg7cmV0dXJuIHZvaWQgMCE9PXImJih0Lm9wdGlvbnMuZXh0cnVkZVBhdGg9KG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpLG5ldyBPaChpLHQub3B0aW9ucyl9fSxSOGU9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgYT10WzMqaV0sbD10WzMqaSsxXSxjPXRbMypyXSx1PXRbMypyKzFdO3JldHVybltuZXcgSmUodFszKmVdLHRbMyplKzFdKSxuZXcgSmUoYSxsKSxuZXcgSmUoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9dFszKmVdLGE9dFszKmUrMV0sbD10WzMqZSsyXSxjPXRbMyppXSx1PXRbMyppKzFdLGQ9dFszKmkrMl0scD10WzMqcl0saD10WzMqcisxXSxmPXRbMypyKzJdLG09dFszKm9dLEM9dFszKm8rMV0sXz10WzMqbysyXTtyZXR1cm4gTWF0aC5hYnMoYS11KTxNYXRoLmFicyhzLWMpP1tuZXcgSmUocywxLWwpLG5ldyBKZShjLDEtZCksbmV3IEplKHAsMS1mKSxuZXcgSmUobSwxLV8pXTpbbmV3IEplKGEsMS1sKSxuZXcgSmUodSwxLWQpLG5ldyBKZShoLDEtZiksbmV3IEplKEMsMS1fKV19fSx0Zz1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9bmV3IEdkKFtuZXcgSmUoMCwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtsZXQgaT1bXSxyPVtdLG89W10scz1bXSxhPTAsbD0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSljKHQpO2Vsc2UgZm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspYyh0W3VdKSx0aGlzLmFkZEdyb3VwKGEsbCx1KSxhKz1sLGw9MDtmdW5jdGlvbiBjKHUpe2xldCBkPXIubGVuZ3RoLzMscD11LmV4dHJhY3RQb2ludHMoZSksaD1wLnNoYXBlLGY9cC5ob2xlczshMT09PXp1LmlzQ2xvY2tXaXNlKGgpJiYoaD1oLnJldmVyc2UoKSk7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKXtsZXQgeT1mW0NdOyEwPT09enUuaXNDbG9ja1dpc2UoeSkmJihmW0NdPXkucmV2ZXJzZSgpKX1sZXQgbT16dS50cmlhbmd1bGF0ZVNoYXBlKGgsZik7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKWg9aC5jb25jYXQoZltDXSk7Zm9yKGxldCBDPTAsXz1oLmxlbmd0aDtDPF87QysrKXtsZXQgeT1oW0NdO3IucHVzaCh5LngseS55LDApLG8ucHVzaCgwLDAsMSkscy5wdXNoKHkueCx5LnkpfWZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl7bGV0IHk9bVtDXTtpLnB1c2goeVswXStkLHlbMV0rZCx5WzJdK2QpLGwrPTN9fXRoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKHMsMikpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXQuc2hhcGVzLnB1c2gobltlXS51dWlkKTtlbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxvPXQuc2hhcGVzLmxlbmd0aDtyPG87cisrKWkucHVzaChlW3Quc2hhcGVzW3JdXSk7cmV0dXJuIG5ldyB0ZyhpLHQuY3VydmVTZWdtZW50cyl9fTsoY2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319KS5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgTzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtPMi5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIE8ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMuaW9yPTEuNSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmVmbGVjdGl2aXR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9hKDIuNSoodGhpcy5pb3ItMSkvKHRoaXMuaW9yKzEpLDAsMSl9LHNldDpmdW5jdGlvbihlKXt0aGlzLmlvcj0oMSsuNCplKS8oMS0uNCplKX19KSx0aGlzLnNoZWVuQ29sb3I9bmV3IGFuKDApLHRoaXMuc2hlZW5Db2xvck1hcD1udWxsLHRoaXMuc2hlZW5Sb3VnaG5lc3M9MSx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPW51bGwsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnRoaWNrbmVzcz0wLHRoaXMudGhpY2tuZXNzTWFwPW51bGwsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPTAsdGhpcy5hdHRlbnVhdGlvbkNvbG9yPW5ldyBhbigxLDEsMSksdGhpcy5zcGVjdWxhckludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bnVsbCx0aGlzLnNwZWN1bGFyQ29sb3I9bmV3IGFuKDEsMSwxKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9bnVsbCx0aGlzLl9zaGVlbj0wLHRoaXMuX2NsZWFyY29hdD0wLHRoaXMuX3RyYW5zbWlzc2lvbj0wLHRoaXMuc2V0VmFsdWVzKHQpfWdldCBzaGVlbigpe3JldHVybiB0aGlzLl9zaGVlbn1zZXQgc2hlZW4odCl7dGhpcy5fc2hlZW4+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9zaGVlbj10fWdldCBjbGVhcmNvYXQoKXtyZXR1cm4gdGhpcy5fY2xlYXJjb2F0fXNldCBjbGVhcmNvYXQodCl7dGhpcy5fY2xlYXJjb2F0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fY2xlYXJjb2F0PXR9Z2V0IHRyYW5zbWlzc2lvbigpe3JldHVybiB0aGlzLl90cmFuc21pc3Npb259c2V0IHRyYW5zbWlzc2lvbih0KXt0aGlzLl90cmFuc21pc3Npb24+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl90cmFuc21pc3Npb249dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLmlvcj10Lmlvcix0aGlzLnNoZWVuPXQuc2hlZW4sdGhpcy5zaGVlbkNvbG9yLmNvcHkodC5zaGVlbkNvbG9yKSx0aGlzLnNoZWVuQ29sb3JNYXA9dC5zaGVlbkNvbG9yTWFwLHRoaXMuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPXQuc2hlZW5Sb3VnaG5lc3NNYXAsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpcy50aGlja25lc3M9dC50aGlja25lc3MsdGhpcy50aGlja25lc3NNYXA9dC50aGlja25lc3NNYXAsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPXQuYXR0ZW51YXRpb25EaXN0YW5jZSx0aGlzLmF0dGVudWF0aW9uQ29sb3IuY29weSh0LmF0dGVudWF0aW9uQ29sb3IpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPXQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsdGhpcy5zcGVjdWxhckNvbG9yLmNvcHkodC5zcGVjdWxhckNvbG9yKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9dC5zcGVjdWxhckNvbG9yTWFwLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGFuKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgTnI9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBOci5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LHZvaWQgMCE9PWU/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246Im51bWJlciI9PXR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2xldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydChmdW5jdGlvbihyLG8pe3JldHVybiBuW3JdLW5bb119KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IG89MCxzPTA7cyE9PWk7KytvKXtsZXQgYT1lW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbcysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEsbz1uWzBdO2Zvcig7dm9pZCAwIT09byYmdm9pZCAwPT09b1tpXTspbz1uW3IrK107aWYodm9pZCAwPT09bylyZXR1cm47bGV0IHM9b1tpXTtpZih2b2lkIDAhPT1zKWlmKEFycmF5LmlzQXJyYXkocykpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2guYXBwbHkoZSxzKSksbz1uW3IrK119d2hpbGUodm9pZCAwIT09byk7ZWxzZSBpZih2b2lkIDAhPT1zLnRvQXJyYXkpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxzLnRvQXJyYXkoZSxlLmxlbmd0aCkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2gocykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IG89bi5jbG9uZSgpO28ubmFtZT10O2xldCBzPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGQ9W10scD1bXTtmb3IobGV0IGg9MDtoPGMudGltZXMubGVuZ3RoOysraCl7bGV0IGY9Yy50aW1lc1toXSpyO2lmKCEoZjxlfHxmPj1pKSl7ZC5wdXNoKGMudGltZXNbaF0pO2ZvcihsZXQgbT0wO208dTsrK20pcC5wdXNoKGMudmFsdWVzW2gqdSttXSl9fTAhPT1kLmxlbmd0aCYmKGMudGltZXM9TnIuY29udmVydEFycmF5KGQsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9TnIuY29udmVydEFycmF5KHAsYy52YWx1ZXMuY29uc3RydWN0b3IpLHMucHVzaChjKSl9by50cmFja3M9cztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKWE+by50cmFja3NbbF0udGltZXNbMF0mJihhPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgsbz10L2k7Zm9yKGxldCBzPTA7czxyOysrcyl7bGV0IGE9ZS50cmFja3Nbc10sbD1hLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09bHx8InN0cmluZyI9PT1sKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24oXyl7cmV0dXJuIF8ubmFtZT09PWEubmFtZSYmXy5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKHZvaWQgMD09PWMpY29udGludWU7bGV0IHU9MCxkPWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9ZC8zKTtsZXQgcD0wLGg9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYocD1oLzMpO2xldCBtLGY9YS50aW1lcy5sZW5ndGgtMTtpZihvPD1hLnRpbWVzWzBdKW09TnIuYXJyYXlTbGljZShhLnZhbHVlcyx1LGQtdSk7ZWxzZSBpZihvPj1hLnRpbWVzW2ZdKXtsZXQgXz1mKmQrdTttPU5yLmFycmF5U2xpY2UoYS52YWx1ZXMsXyxfK2QtdSl9ZWxzZXtsZXQgXz1hLmNyZWF0ZUludGVycG9sYW50KCkseT11LEk9ZC11O18uZXZhbHVhdGUobyksbT1Oci5hcnJheVNsaWNlKF8ucmVzdWx0QnVmZmVyLHksSSl9InF1YXRlcm5pb24iPT09bCYmKG5ldyBDcykuZnJvbUFycmF5KG0pLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkobSk7bGV0IEM9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBfPTA7XzxDOysrXyl7bGV0IHk9XypoK3A7aWYoInF1YXRlcm5pb24iPT09bClDcy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyx5LG0sMCxjLnZhbHVlcyx5KTtlbHNle2xldCBJPWgtMipwO2ZvcihsZXQgQT0wO0E8STsrK0EpYy52YWx1ZXNbeStBXS09bVtBXX19fXJldHVybiBuLmJsZW5kTW9kZT0yNTAxLG59fSxqdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9dm9pZCAwIT09cj9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLG89ZVtpLTFdO2U6e3Q6e2xldCBzO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHZvaWQgMD09PXIpe2lmKHQ8bylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQsbyl9aWYoaT09PWEpYnJlYWs7aWYobz1yLHI9ZVsrK2ldLHQ8cilicmVhayB0fXM9ZS5sZW5ndGg7YnJlYWsgbn1pZih0Pj1vKWJyZWFrIGU7e2xldCBhPWVbMV07dDxhJiYoaT0yLG89YSk7Zm9yKGxldCBsPWktMjs7KXtpZih2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihpPT09bClicmVhaztpZihyPW8sbz1lWy0taS0xXSx0Pj1vKWJyZWFrIHR9cz1pLGk9MH19Zm9yKDtpPHM7KXtsZXQgYT1pK3M+Pj4xO3Q8ZVthXT9zPWE6aT1hKzF9aWYocj1lW2ldLG89ZVtpLTFdLHZvaWQgMD09PW8pcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKHZvaWQgMD09PXIpcmV0dXJuIGk9ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmFmdGVyRW5kXyhpLTEsbyx0KX10aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhpLG8scil9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKGksbyx0LHIpfWdldFNldHRpbmdzXygpe3JldHVybiB0aGlzLnNldHRpbmdzfHx0aGlzLkRlZmF1bHRTZXR0aW5nc199Y29weVNhbXBsZVZhbHVlXyh0KXtsZXQgZT10aGlzLnJlc3VsdEJ1ZmZlcixpPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUsbz10KnI7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWVbc109aVtvK3NdO3JldHVybiBlfWludGVycG9sYXRlXygpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX1pbnRlcnZhbENoYW5nZWRfKCl7fX07anUucHJvdG90eXBlLmJlZm9yZVN0YXJ0Xz1qdS5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXyxqdS5wcm90b3R5cGUuYWZ0ZXJFbmRfPWp1LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3ZhciBlej1jbGFzcyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpLHRoaXMuX3dlaWdodFByZXY9LTAsdGhpcy5fb2Zmc2V0UHJldj0tMCx0aGlzLl93ZWlnaHROZXh0PS0wLHRoaXMuX29mZnNldE5leHQ9LTAsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXtlbmRpbmdTdGFydDpheSxlbmRpbmdFbmQ6YXl9fWludGVydmFsQ2hhbmdlZF8odCxlLGkpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG89dC0yLHM9dCsxLGE9cltvXSxsPXJbc107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBseTpvPXQsYT0yKmUtaTticmVhaztjYXNlIDI0MDI6bz1yLmxlbmd0aC0yLGE9ZStyW29dLXJbbysxXTticmVhaztkZWZhdWx0Om89dCxhPWl9aWYodm9pZCAwPT09bClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgbHk6cz10LGw9MippLWU7YnJlYWs7Y2FzZSAyNDAyOnM9MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6cz10LTEsbD1lfWxldCBjPS41KihpLWUpLHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PXMqdX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIscz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLHU9dGhpcy5fb2Zmc2V0UHJldixkPXRoaXMuX29mZnNldE5leHQscD10aGlzLl93ZWlnaHRQcmV2LGg9dGhpcy5fd2VpZ2h0TmV4dCxmPShpLWUpLyhyLWUpLG09ZipmLEM9bSpmLF89LXAqQysyKnAqbS1wKmYseT0oMStwKSpDKygtMS41LTIqcCkqbSsoLS41K3ApKmYrMSxJPSgtMS1oKSpDKygxLjUraCkqbSsuNSpmLEE9aCpDLWgqbTtmb3IobGV0IE89MDtPIT09YTsrK08pb1tPXT1fKnNbdStPXSt5KnNbYytPXStJKnNbbCtPXStBKnNbZCtPXTtyZXR1cm4gb319LGsyPWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PShpLWUpLyhyLWUpLGQ9MS11O2ZvcihsZXQgcD0wO3AhPT1hOysrcClvW3BdPXNbYytwXSpkK3NbbCtwXSp1O3JldHVybiBvfX0sdHo9Y2xhc3MgZXh0ZW5kcyBqdXtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Oci5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Oci5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGksZT10LmNvbnN0cnVjdG9yO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOk5yLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6TnIuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IHR6KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBrMih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgZXoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMjMwMDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7aWYodD09PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiIsaSksdGhpc31yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGFudD1lLHRoaXN9Z2V0SW50ZXJwb2xhdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIDIzMDA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gMjMwMTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiAyMzAyfX1nZXRWYWx1ZVNpemUoKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoL3RoaXMudGltZXMubGVuZ3RofXNoaWZ0KHQpe2lmKDAhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0rPXR9cmV0dXJuIHRoaXN9c2NhbGUodCl7aWYoMSE9PXQpe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7bGV0IGk9dGhpcy50aW1lcyxyPWkubGVuZ3RoLG89MCxzPXItMTtmb3IoO28hPT1yJiZpW29dPHQ7KSsrbztmb3IoOy0xIT09cyYmaVtzXT5lOyktLXM7aWYoKytzLDAhPT1vfHxzIT09cil7bz49cyYmKHM9TWF0aC5tYXgocywxKSxvPXMtMSk7bGV0IGE9dGhpcy5nZXRWYWx1ZVNpemUoKTt0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UoaSxvLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsbyphLHMqYSl9cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMCxlPXRoaXMuZ2V0VmFsdWVTaXplKCk7ZS1NYXRoLmZsb29yKGUpIT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLG89aS5sZW5ndGg7MD09PW8mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBzPW51bGw7Zm9yKGxldCBhPTA7YSE9PW87YSsrKXtsZXQgbD1pW2FdO2lmKCJudW1iZXIiPT10eXBlb2YgbCYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobnVsbCE9PXMmJnM+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxzKSx0PSExO2JyZWFrfXM9bH1pZih2b2lkIDAhPT1yJiZOci5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1Oci5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj0yMzAyPT09dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCksbz10Lmxlbmd0aC0xLHM9MTtmb3IobGV0IGE9MTthPG87KythKXtsZXQgbD0hMSxjPXRbYV07aWYoYyE9PXRbYSsxXSYmKDEhPT1hfHxjIT09dFswXSkpaWYocilsPSEwO2Vsc2V7bGV0IGQ9YSppLHA9ZC1pLGg9ZCtpO2ZvcihsZXQgZj0wO2YhPT1pOysrZil7bGV0IG09ZVtkK2ZdO2lmKG0hPT1lW3ArZl18fG0hPT1lW2grZl0pe2w9ITA7YnJlYWt9fX1pZihsKXtpZihhIT09cyl7dFtzXT10W2FdO2xldCBkPWEqaSxwPXMqaTtmb3IobGV0IGg9MDtoIT09aTsrK2gpZVtwK2hdPWVbZCtoXX0rK3N9fWlmKG8+MCl7dFtzXT10W29dO2ZvcihsZXQgYT1vKmksbD1zKmksYz0wO2MhPT1pOysrYyllW2wrY109ZVthK2NdOysrc31yZXR1cm4gcyE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UodCwwLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UoZSwwLHMqaSkpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc31jbG9uZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcywwKSxlPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCkscj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtGbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxO3ZhciBraD1jbGFzcyBleHRlbmRzIEZse307a2gucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiLGtoLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksa2gucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEYyPWNsYXNzIGV4dGVuZHMgRmx7fTtGMi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO3ZhciBNeT1jbGFzcyBleHRlbmRzIEZse307TXkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9Im51bWJlciI7dmFyIG56PWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPShpLWUpLyhyLWUpLGM9dCphO2ZvcihsZXQgdT1jK2E7YyE9PXU7Yys9NClDcy5zbGVycEZsYXQobywwLHMsYy1hLHMsYyxsKTtyZXR1cm4gb319LG5nPWNsYXNzIGV4dGVuZHMgRmx7SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgbnoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfX07bmcucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InF1YXRlcm5pb24iLG5nLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxLG5nLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBGaD1jbGFzcyBleHRlbmRzIEZse307RmgucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyIsRmgucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheSxGaC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgU3k9Y2xhc3MgZXh0ZW5kcyBGbHt9O1N5LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBOMj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPTI1MDApe3RoaXMubmFtZT10LHRoaXMudHJhY2tzPWksdGhpcy5kdXJhdGlvbj1lLHRoaXMuYmxlbmRNb2RlPXIsdGhpcy51dWlkPUZjKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7bGV0IGU9W10saT10LnRyYWNrcyxyPTEvKHQuZnBzfHwxKTtmb3IobGV0IHM9MCxhPWkubGVuZ3RoO3MhPT1hOysrcyllLnB1c2goTjhlKGlbc10pLnNjYWxlKHIpKTtsZXQgbz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gby51dWlkPXQudXVpZCxvfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBvPTAscz1pLmxlbmd0aDtvIT09czsrK28pZS5wdXNoKEZsLnRvSlNPTihpW29dKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBvPWUubGVuZ3RoLHM9W107Zm9yKGxldCBhPTA7YTxvO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErby0xKSVvLGEsKGErMSklbyksYy5wdXNoKDAsMSwwKTtsZXQgdT1Oci5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9TnIuc29ydGVkQXJyYXkobCwxLHUpLGM9TnIuc29ydGVkQXJyYXkoYywxLHUpLCFyJiYwPT09bFswXSYmKGwucHVzaChvKSxjLnB1c2goY1swXSkpLHMucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEscyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtsZXQgcj10O2k9ci5nZW9tZXRyeSYmci5nZW9tZXRyeS5hbmltYXRpb25zfHxyLmFuaW1hdGlvbnN9Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LG89L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXtsZXQgYz10W2FdLHU9Yy5uYW1lLm1hdGNoKG8pO2lmKHUmJnUubGVuZ3RoPjEpe2xldCBkPXVbMV0scD1yW2RdO3B8fChyW2RdPXA9W10pLHAucHVzaChjKX19bGV0IHM9W107Zm9yKGxldCBhIGluIHIpcy5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoYSxyW2FdLGUsaSkpO3JldHVybiBzfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24oZCxwLGgsZixtKXtpZigwIT09aC5sZW5ndGgpe2xldCBDPVtdLF89W107TnIuZmxhdHRlbkpTT04oaCxDLF8sZiksMCE9PUMubGVuZ3RoJiZtLnB1c2gobmV3IGQocCxDLF8pKX19LHI9W10sbz10Lm5hbWV8fCJkZWZhdWx0IixzPXQuZnBzfHwzMCxhPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgcD1jW2RdLmtleXM7aWYocCYmMCE9PXAubGVuZ3RoKWlmKHBbMF0ubW9ycGhUYXJnZXRzKXtsZXQgZixoPXt9O2ZvcihmPTA7ZjxwLmxlbmd0aDtmKyspaWYocFtmXS5tb3JwaFRhcmdldHMpZm9yKGxldCBtPTA7bTxwW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7bSsrKWhbcFtmXS5tb3JwaFRhcmdldHNbbV1dPS0xO2ZvcihsZXQgbSBpbiBoKXtsZXQgQz1bXSxfPVtdO2ZvcihsZXQgeT0wO3khPT1wW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt5KXtsZXQgST1wW2ZdO0MucHVzaChJLnRpbWUpLF8ucHVzaChJLm1vcnBoVGFyZ2V0PT09bT8xOjApfXIucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK20rIl0iLEMsXykpfWw9aC5sZW5ndGgqKHN8fDEpfWVsc2V7bGV0IGg9Ii5ib25lc1siK2VbZF0ubmFtZSsiXSI7aShTeSxoKyIucG9zaXRpb24iLHAsInBvcyIsciksaShuZyxoKyIucXVhdGVybmlvbiIscCwicm90IixyKSxpKFN5LGgrIi5zY2FsZSIscCwic2NsIixyKX19cmV0dXJuIDA9PT1yLmxlbmd0aD9udWxsOm5ldyB0aGlzKG8sbCxyLGEpfXJlc2V0RHVyYXRpb24oKXtsZXQgZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy50cmFja3MubGVuZ3RoO2khPT1yOysraSl7bGV0IG89dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIE44ZShuKXtpZih2b2lkIDA9PT1uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO2xldCB0PWZ1bmN0aW9uKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIE15O2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gU3k7Y2FzZSJjb2xvciI6cmV0dXJuIEYyO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIG5nO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4ga2g7Y2FzZSJzdHJpbmciOnJldHVybiBGaH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfShuLnR5cGUpO2lmKHZvaWQgMD09PW4udGltZXMpe2xldCBlPVtdLGk9W107TnIuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdm9pZCAwIT09dC5wYXJzZT90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIEV5PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEw4ZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCBsLHI9dGhpcyxvPSExLHM9MCxhPTAsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPWUsdGhpcy5vbkVycm9yPWksdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24odSl7YSsrLCExPT09byYmdm9pZCAwIT09ci5vblN0YXJ0JiZyLm9uU3RhcnQodSxzLGEpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbih1KXtzKyssdm9pZCAwIT09ci5vblByb2dyZXNzJiZyLm9uUHJvZ3Jlc3ModSxzLGEpLHM9PT1hJiYobz0hMSx2b2lkIDAhPT1yLm9uTG9hZCYmci5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKHUpe3ZvaWQgMCE9PXIub25FcnJvciYmci5vbkVycm9yKHUpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24odSl7cmV0dXJuIGw/bCh1KTp1fSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKHUpe3JldHVybiBsPXUsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKHUsZCl7cmV0dXJuIGMucHVzaCh1LGQpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbih1KXtsZXQgZD1jLmluZGV4T2YodSk7cmV0dXJuLTEhPT1kJiZjLnNwbGljZShkLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGQ9MCxwPWMubGVuZ3RoO2Q8cDtkKz0yKXtsZXQgaD1jW2RdLGY9Y1tkKzFdO2lmKGguZ2xvYmFsJiYoaC5sYXN0SW5kZXg9MCksaC50ZXN0KHUpKXJldHVybiBmfXJldHVybiBudWxsfX19LEd1PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6TDhlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7aS5sb2FkKHQscixlLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LFZkPXt9LHJ6PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz1FeS5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZih2b2lkIDAhPT1WZFt0XSlyZXR1cm4gdm9pZCBWZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7VmRbdF09W10sVmRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO2xldCBzPW5ldyBSZXF1ZXN0KHQse2hlYWRlcnM6bmV3IEhlYWRlcnModGhpcy5yZXF1ZXN0SGVhZGVyKSxjcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscz8iaW5jbHVkZSI6InNhbWUtb3JpZ2luIn0pLGE9dGhpcy5taW1lVHlwZSxsPXRoaXMucmVzcG9uc2VUeXBlO2ZldGNoKHMpLnRoZW4oYz0+e2lmKDIwMD09PWMuc3RhdHVzfHwwPT09Yy5zdGF0dXMpe2lmKDA9PT1jLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHR5cGVvZiBSZWFkYWJsZVN0cmVhbT4idSJ8fHZvaWQgMD09PWMuYm9keS5nZXRSZWFkZXIpcmV0dXJuIGM7bGV0IHU9VmRbdF0sZD1jLmJvZHkuZ2V0UmVhZGVyKCkscD1jLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpLGg9cD9wYXJzZUludChwKTowLGY9MCE9PWgsbT0wLEM9bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydChfKXshZnVuY3Rpb24geSgpe2QucmVhZCgpLnRoZW4oKHtkb25lOkksdmFsdWU6QX0pPT57aWYoSSlfLmNsb3NlKCk7ZWxzZXttKz1BLmJ5dGVMZW5ndGg7bGV0IE89bmV3IFByb2dyZXNzRXZlbnQoInByb2dyZXNzIix7bGVuZ3RoQ29tcHV0YWJsZTpmLGxvYWRlZDptLHRvdGFsOmh9KTtmb3IobGV0IGVlPTAsWD11Lmxlbmd0aDtlZTxYO2VlKyspe2xldCB4ZT11W2VlXTt4ZS5vblByb2dyZXNzJiZ4ZS5vblByb2dyZXNzKE8pfV8uZW5xdWV1ZShBKSx5KCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZShDKX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PWEpcmV0dXJuIGMudGV4dCgpO3tsZXQgZD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSkscD1kJiZkWzFdP2RbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsaD1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGY9PmguZGVjb2RlKGYpKX19fSkudGhlbihjPT57RXkuYWRkKHQsYyk7bGV0IHU9VmRbdF07ZGVsZXRlIFZkW3RdO2ZvcihsZXQgZD0wLHA9dS5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9dVtkXTtoLm9uTG9hZCYmaC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVZkW3RdO2lmKHZvaWQgMD09PXUpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBWZFt0XTtmb3IobGV0IGQ9MCxwPXUubGVuZ3RoO2Q8cDtkKyspe2xldCBoPXVbZF07aC5vbkVycm9yJiZoLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sTDI9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPVNNKCJpbWciKTtmdW5jdGlvbiBsKCl7dSgpLEV5LmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyhkKXt1KCksciYmcihkKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIHUoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoYS5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLGEuc3JjPXQsYX19LG96PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgX3kscz1uZXcgTDIodGhpcy5tYW5hZ2VyKTtzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBhPTA7ZnVuY3Rpb24gbChjKXtzLmxvYWQodFtjXSxmdW5jdGlvbih1KXtvLmltYWdlc1tjXT11LGErKyw2PT09YSYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sc3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBibyxzPW5ldyBMMih0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMubG9hZCh0LGZ1bmN0aW9uKGEpe28uaW1hZ2U9YSxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LE5sPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O05sLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgYW4oZSl9Y29weSh0KXtyZXR1cm4gTmwucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBpbGU9bmV3IE1uLHJsZT1uZXcgJCxvbGU9bmV3ICQsR009Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEplKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHZ5LHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSmUoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgdHIoMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeDtybGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShybGUpLG9sZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLGUubG9va0F0KG9sZSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLGlsZS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChpbGUpLGkuc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLGkubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KSxpLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIDAhPT10aGlzLmJpYXMmJih0LmJpYXM9dGhpcy5iaWFzKSwwIT09dGhpcy5ub3JtYWxCaWFzJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksMSE9PXRoaXMucmFkaXVzJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCg1MTIhPT10aGlzLm1hcFNpemUueHx8NTEyIT09dGhpcy5tYXBTaXplLnkpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LEIyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT0yKndVKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LG89dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxvIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPW8sZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtCMi5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBObHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLG89MCxzPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9cyx0aGlzLnNoYWRvdz1uZXcgQjJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBzbGU9bmV3IE1uLG1NPW5ldyAkLG1VPW5ldyAkLFYyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEplKDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IHRyKDIsMSwxLDEpLG5ldyB0cigwLDEsMSwxKSxuZXcgdHIoMywxLDEsMSksbmV3IHRyKDEsMSwxLDEpLG5ldyB0cigzLDAsMSwxKSxuZXcgdHIoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgJCgxLDAsMCksbmV3ICQoLTEsMCwwKSxuZXcgJCgwLDAsMSksbmV3ICQoMCwwLC0xKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3ICQoMCwxLDApLG5ldyAkKDAsMSwwKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwxLDApLG5ldyAkKDAsMCwxKSxuZXcgJCgwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7bGV0IGk9dGhpcy5jYW1lcmEscj10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fGkuZmFyO28hPT1pLmZhciYmKGkuZmFyPW8saS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLG1NLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxpLnBvc2l0aW9uLmNvcHkobU0pLG1VLmNvcHkoaS5wb3NpdGlvbiksbVUuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxpLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksaS5sb29rQXQobVUpLGkudXBkYXRlTWF0cml4V29ybGQoKSxyLm1ha2VUcmFuc2xhdGlvbigtbU0ueCwtbU0ueSwtbU0ueiksc2xlLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHNsZSl9fTtWMi5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBWMn1nZXQgcG93ZXIoKXtyZXR1cm4gNCp0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIEgyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgSm0oLTUsNSw1LC01LC41LDUwMCkpfX07SDIucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuc2hhZG93PW5ldyBIMn1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIFUyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyAkKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzJdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0saSpyKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLHIqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s2XSwuMzE1MzkyKigzKm8qby0xKSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSxpKm8qMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShzWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihzWzFdLDEuMDIzMzI4KnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sMS4wMjMzMjgqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwxLjAyMzMyOCppKSxlLmFkZFNjYWxlZFZlY3RvcihzWzRdLC44NTgwODYqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLC44NTgwODYqcipvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbN10sLjg1ODA4NippKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0uZnJvbUFycmF5KHQsZSszKnIpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS50b0FycmF5KHQsZSszKnIpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqcixlWzJdPS40ODg2MDMqbyxlWzNdPS40ODg2MDMqaSxlWzRdPTEuMDkyNTQ4KmkqcixlWzVdPTEuMDkyNTQ4KnIqbyxlWzZdPS4zMTUzOTIqKDMqbypvLTEpLGVbN109MS4wOTI1NDgqaSpvLGVbOF09LjU0NjI3NCooaSppLXIqcil9fTtVMi5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciBXTT1jbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQ9bmV3IFUyLGU9MSl7c3VwZXIodm9pZCAwLGUpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLGV9fTtXTS5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBoej1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8IiI9PT10PyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChlKSYmL15cLy8udGVzdCh0KSYmKGU9ZS5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDplK3QpfX07KGNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLGNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD4idSImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPXt9O2EuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLGEuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxhKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7RXkuYWRkKHQsbCksZSYmZShsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe3ImJnIobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgYzIsZ3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPXRoaXMscz1uZXcgcnoodGhpcy5tYW5hZ2VyKTtzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscykscy5sb2FkKHQsZnVuY3Rpb24oYSl7dHJ5e2xldCBsPWEuc2xpY2UoMCk7KHZvaWQgMD09PWMyJiYoYzI9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxjMikuZGVjb2RlQXVkaW9EYXRhKGwsZnVuY3Rpb24odSl7ZSh1KX0pfWNhdGNoKGwpe3I/cihsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxpLHIpfX07KGNsYXNzIGV4dGVuZHMgV017Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPShuZXcgYW4pLnNldCh0KSxvPShuZXcgYW4pLnNldChlKSxzPW5ldyAkKHIucixyLmcsci5iKSxhPW5ldyAkKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShzKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShzKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIoYyl9fSkucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITAsY2xhc3MgZXh0ZW5kcyBXTXtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPShuZXcgYW4pLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB4ej1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHIsbyxzO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pLGUpe2Nhc2UicXVhdGVybmlvbiI6cj10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqaSksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6cj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3Qscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqaSk7YnJlYWs7ZGVmYXVsdDpyPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqaSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPXIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1zLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxlKXtsZXQgaT10aGlzLmJ1ZmZlcixyPXRoaXMudmFsdWVTaXplLG89dCpyK3Iscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PXMpe2ZvcihsZXQgYT0wO2EhPT1yOysrYSlpW28rYV09aVthXTtzPWV9ZWxzZSBzKz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLG8sMCxlL3Mscik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PXN9YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4OzA9PT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLGE9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsbzwxJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGUqdGhpcy5fb3JpZ0luZGV4LDEtbyxlKSxzPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGUscik7Zm9yKGxldCBvPWkscz1yO28hPT1zOysrbyllW29dPWVbcitvJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixvKXtpZihyPj0uNSlmb3IobGV0IHM9MDtzIT09bzsrK3MpdFtlK3NdPXRbaStzXX1fc2xlcnAodCxlLGkscil7Q3Muc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fd29ya0luZGV4Km87Q3MubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxzLHQsZSx0LGkpLENzLnNsZXJwRmxhdCh0LGUsdCxlLHQscyxyKX1fbGVycCh0LGUsaSxyLG8pe2xldCBzPTEtcjtmb3IobGV0IGE9MDthIT09bzsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qcyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2ZvcihsZXQgcz0wO3MhPT1vOysrcyl7bGV0IGE9ZStzO3RbYV09dFthXSt0W2krc10qcn19fSxOej0iXFxbXFxdXFwuOlxcLyIsVjhlPW5ldyBSZWdFeHAoIlsiK056KyJdIiwiZyIpLEx6PSJbXiIrTnorIl0iLEg4ZT0iW14iK056LnJlcGxhY2UoIlxcLiIsIiIpKyJdIixVOGU9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixMeiksejhlPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLEg4ZSksajhlPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxHOGU9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxXOGU9bmV3IFJlZ0V4cCgiXiIrVThlK3o4ZStqOGUrRzhlKyIkIikscThlPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLEN6PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj1pfHxFci5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLHIpfWdldFZhbHVlKHQsZSl7dGhpcy5iaW5kKCk7bGV0IHI9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1yJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG89aS5sZW5ndGg7ciE9PW87KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxFcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnBhdGg9aSx0aGlzLnBhcnNlZFBhdGg9cnx8bi5wYXJzZVRyYWNrTmFtZShpKSx0aGlzLm5vZGU9bi5maW5kTm9kZShlLHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fGUsdGhpcy5yb290Tm9kZT1lLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZShlLGkscil7cmV0dXJuIGUmJmUuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgbi5Db21wb3NpdGUoZSxpLHIpOm5ldyBuKGUsaSxyKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShWOGUsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZShlKXtsZXQgaT1XOGUuZXhlYyhlKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitlKTtsZXQgcj17bm9kZU5hbWU6aVsyXSxvYmplY3ROYW1lOmlbM10sb2JqZWN0SW5kZXg6aVs0XSxwcm9wZXJ0eU5hbWU6aVs1XSxwcm9wZXJ0eUluZGV4OmlbNl19LG89ci5ub2RlTmFtZSYmci5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PW8mJi0xIT09byl7bGV0IHM9ci5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PXE4ZS5pbmRleE9mKHMpJiYoci5ub2RlTmFtZT1yLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLHIub2JqZWN0TmFtZT1zKX1pZihudWxsPT09ci5wcm9wZXJ0eU5hbWV8fDA9PT1yLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2UpO3JldHVybiByfXN0YXRpYyBmaW5kTm9kZShlLGkpe2lmKCFpfHwiIj09PWl8fCIuIj09PWl8fC0xPT09aXx8aT09PWUubmFtZXx8aT09PWUudXVpZClyZXR1cm4gZTtpZihlLnNrZWxldG9uKXtsZXQgcj1lLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoaSk7aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihlLmNoaWxkcmVuKXtsZXQgcj1mdW5jdGlvbihzKXtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErKyl7bGV0IGw9c1thXTtpZihsLm5hbWU9PT1pfHxsLnV1aWQ9PT1pKXJldHVybiBsO2xldCBjPXIobC5jaGlsZHJlbik7aWYoYylyZXR1cm4gY31yZXR1cm4gbnVsbH0sbz1yKGUuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KGUsaSl7ZVtpXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKWVbaSsrXT1yW29dfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXtlW2ldPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkoZSxpKX1fc2V0VmFsdWVfZGlyZWN0KGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKGUsaSl9X3NldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKGUsaSl9YmluZCgpe2xldCBlPXRoaXMubm9kZSxpPXRoaXMucGFyc2VkUGF0aCxyPWkub2JqZWN0TmFtZSxvPWkucHJvcGVydHlOYW1lLHM9aS5wcm9wZXJ0eUluZGV4O2lmKGV8fChlPW4uZmluZE5vZGUodGhpcy5yb290Tm9kZSxpLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9ZSksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCFlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKHIpe2xldCB1PWkub2JqZWN0SW5kZXg7c3dpdGNoKHIpe2Nhc2UibWF0ZXJpYWxzIjppZighZS5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCFlLm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7ZT1lLm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighZS5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO2U9ZS5za2VsZXRvbi5ib25lcztmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylpZihlW2RdLm5hbWU9PT11KXt1PWQ7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1lW3JdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtlPWVbcl19aWYodm9pZCAwIT09dSl7aWYodm9pZCAwPT09ZVt1XSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLGUpO2U9ZVt1XX19bGV0IGE9ZVtvXTtpZih2b2lkIDA9PT1hKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIraS5ub2RlTmFtZSsiLiIrbysiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIixlKTtsZXQgbD10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD1lLHZvaWQgMCE9PWUubmVlZHNVcGRhdGU/bD10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dm9pZCAwIT09ZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlJiYobD10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGM9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYodm9pZCAwIT09cyl7aWYoIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyI9PT1vKXtpZighZS5nZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTt2b2lkIDAhPT1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSYmKHM9ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10pfWM9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEsdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSB2b2lkIDAhPT1hLmZyb21BcnJheSYmdm9pZCAwIT09YS50b0FycmF5PyhjPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOkFycmF5LmlzQXJyYXkoYSk/KGM9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6dGhpcy5wcm9wZXJ0eU5hbWU9bzt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtjXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbY11bbF19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19cmV0dXJuIG4uQ29tcG9zaXRlPUN6LG59KSgpO0VyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxFci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxFci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxFci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxFci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldLEVyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtFci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXSxjbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLG89ci5sZW5ndGgscz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt2b2lkIDA9PT11JiYodT17fSxjW2xdPXUpO2ZvcihsZXQgZD0wO2QhPT1vOysrZCl7bGV0IHA9cltkXSxoPXAubmFtZSxmPXVbaF07aWYodm9pZCAwIT09ZikrK2YucmVmZXJlbmNlQ291bnQsc1tkXT1mO2Vsc2V7aWYoZj1zW2RdLHZvaWQgMCE9PWYpe251bGw9PT1mLl9jYWNoZUluZGV4JiYoKytmLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhmLGwsaCkpO2NvbnRpbnVlfWY9bmV3IHh6KEVyLmNyZWF0ZShpLGgsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1tkXS5iaW5kaW5nLnBhcnNlZFBhdGgpLHAuVmFsdWVUeXBlTmFtZSxwLmdldFZhbHVlU2l6ZSgpKSwrK2YucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGYsbCxoKSxzW2RdPWZ9YVtkXS5yZXN1bHRCdWZmZXI9Zi5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PW8udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnVzZUNvdW50JiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1vW2VdO2lmKHZvaWQgMD09PXMpcz17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW2VdPXM7ZWxzZXtsZXQgYT1zLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PWEubGVuZ3RoLGEucHVzaCh0KX10Ll9jYWNoZUluZGV4PXIubGVuZ3RoLHIucHVzaCh0KSxzLmFjdGlvbkJ5Um9vdFtpXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9ZVtlLmxlbmd0aC0xXSxyPXQuX2NhY2hlSW5kZXg7aS5fY2FjaGVJbmRleD1yLGVbcl09aSxlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQscz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9c1tvXSxsPWEua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgYS5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PWwubGVuZ3RoJiZkZWxldGUgc1tvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz10aGlzLl9iaW5kaW5ncyxzPXJbZV07dm9pZCAwPT09cyYmKHM9e30scltlXT1zKSxzW2ldPXQsdC5fY2FjaGVJbmRleD1vLmxlbmd0aCxvLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxvPWkucGF0aCxzPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPXNbcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbb10sMD09PU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmZGVsZXRlIHNbcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgazIobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsbz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LG8uX19jYWNoZUluZGV4PWksZVtpXT1vfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qsbz1yLnV1aWQscz0ic3RyaW5nIj09dHlwZW9mIHQ/TjIuZmluZEJ5TmFtZShyLHQpOnQsYT1udWxsIT09cz9zLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKHZvaWQgMD09PWkmJihpPW51bGwhPT1zP3MuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PWwpe2xldCBkPWwuYWN0aW9uQnlSb290W29dO2lmKHZvaWQgMCE9PWQmJmQuYmxlbmRNb2RlPT09aSlyZXR1cm4gZDtjPWwua25vd25BY3Rpb25zWzBdLG51bGw9PT1zJiYocz1jLl9jbGlwKX1pZihudWxsPT09cylyZXR1cm4gbnVsbDtsZXQgdT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBvPWUudHJhY2tzLHM9by5sZW5ndGgsYT1uZXcgQXJyYXkocyksbD17ZW5kaW5nU3RhcnQ6YXksZW5kaW5nRW5kOmF5fTtmb3IobGV0IGM9MDtjIT09czsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkocyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPTIyMDEsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJjAhPT10aGlzLnRpbWVTY2FsZSYmbnVsbD09PXRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixhPXIvbzt0LndhcnAoMSxvL3IsZSksdGhpcy53YXJwKGEsMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsaSl7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaSl9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUscz10aGlzLnRpbWVTY2FsZSxhPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1hJiYoYT1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9YSk7bGV0IGw9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1hLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytpLGNbMF09dC9zLGNbMV09ZS9zLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLGkscil7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1vKXtsZXQgbD0odC1vKSppO2lmKGw8MHx8MD09PWkpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgcz10aGlzLl91cGRhdGVUaW1lKGUpLGE9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKGE+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztpZigyNTAxPT09dGhpcy5ibGVuZE1vZGUpZm9yKGxldCB1PTAsZD1sLmxlbmd0aDt1IT09ZDsrK3UpbFt1XS5ldmFsdWF0ZShzKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShhKTtlbHNlIGZvcihsZXQgdT0wLGQ9bC5sZW5ndGg7dSE9PWQ7Kyt1KWxbdV0uZXZhbHVhdGUocyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWkpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PXImJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09aSYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LHM9MjIwMj09PWk7aWYoMD09PXQpcmV0dXJuLTE9PT1vP3I6cyYmMT09KDEmbyk/ZS1yOnI7aWYoMjIwMD09PWkpey0xPT09byYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTtlOntpZihyPj1lKXI9ZTtlbHNle2lmKCEocjwwKSl7dGhpcy50aW1lPXI7YnJlYWsgZX1yPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09byYmKHQ+PTA/KG89MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLHMpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLHMpKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEsbys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1vO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1sKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLHMpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxzKTt0aGlzLl9sb29wQ291bnQ9byx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKHMmJjE9PSgxJm8pKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD1seSxyLmVuZGluZ0VuZD1seSk6KHIuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/bHk6YXk6MjQwMixyLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/bHk6YXk6MjQwMil9X3NjaGVkdWxlRmFkaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxzPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1zJiYocz1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9cyk7bGV0IGE9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1zLnNhbXBsZVZhbHVlcztyZXR1cm4gYVswXT1vLGxbMF09ZSxhWzFdPW8rdCxsWzFdPWksdGhpc319KHRoaXMscyxlLGkpO3JldHVybiB0aGlzLl9iaW5kQWN0aW9uKHUsYyksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odSxhLG8pLHV9ZXhpc3RpbmdBY3Rpb24odCxlKXtsZXQgaT1lfHx0aGlzLl9yb290LHI9aS51dWlkLG89InN0cmluZyI9PXR5cGVvZiB0P04yLmZpbmRCeU5hbWUoaSx0KTp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvP28udXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09YSYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBpPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUsbz1NYXRoLnNpZ24odCkscz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQsbyxzKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShzKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1yW2ldO2lmKHZvaWQgMCE9PW8pe2xldCBzPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9cy5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1zW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxkPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkLl9jYWNoZUluZGV4PXUsZVt1XT1kLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXS5hY3Rpb25CeVJvb3RbZV07dm9pZCAwIT09bCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihsZXQgcyBpbiBvKXtsZXQgYT1vW3NdO2EucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9fXVuY2FjaGVBY3Rpb24odCxlKXtsZXQgaT10aGlzLmV4aXN0aW5nQWN0aW9uKHQsZSk7bnVsbCE9PWkmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGkpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGkpKX19LnByb3RvdHlwZS5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcj1uZXcgRmxvYXQzMkFycmF5KDEpO3ZhciBxTT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgcU0odm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fTsoY2xhc3MgZXh0ZW5kcyAkbXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgYWxlPW5ldyBKZSxpZz1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBKZSgxLzAsMS8wKSxlPW5ldyBKZSgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9YWxlLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBhbGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O2lnLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIENoPW5ldyAkLGQyPW5ldyBNbixnVT1uZXcgTW47ZnVuY3Rpb24gUmxlKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsUmxlKG4uY2hpbGRyZW5bZV0pKTtyZXR1cm4gdH12YXIgWThlPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gQnoobix0LGUpe2lmKDE9PT1lKXJldHVybiBuZXcgYW4odCk7bGV0IGk9Q20odCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHt0fWApO3JldHVybiBuZXcgYW4oRkgoaSxuKSgxLWUpKX1uZXcgSW50MzJBcnJheShZOGUuYnVmZmVyKSx5YS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHlhLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59LEhNLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX0sY2xhc3MgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsaT00NDczOTI0LHI9ODk0Nzg0OCl7aT1uZXcgYW4oaSkscj1uZXcgYW4ocik7bGV0IG89ZS8yLHM9dC9lLGE9dC8yLGw9W10sYz1bXTtmb3IobGV0IHA9MCxoPTAsZj0tYTtwPD1lO3ArKyxmKz1zKXtsLnB1c2goLWEsMCxmLGEsMCxmKSxsLnB1c2goZiwwLC1hLGYsMCxhKTtsZXQgbT1wPT09bz9pOnI7bS50b0FycmF5KGMsaCksaCs9MyxtLnRvQXJyYXkoYyxoKSxoKz0zLG0udG9BcnJheShjLGgpLGgrPTMsbS50b0FycmF5KGMsaCksaCs9M31sZXQgdT1uZXcgS2k7dS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IobCwzKSksdS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IoYywzKSksc3VwZXIodSxuZXcgamQoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfSxjbGFzcyBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKHQpe2xldCBlPVJsZSh0KSxpPW5ldyBLaSxyPVtdLG89W10scz1uZXcgYW4oMCwwLDEpLGE9bmV3IGFuKDAsMSwwKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7bGV0IHU9ZVtjXTt1LnBhcmVudCYmdS5wYXJlbnQuaXNCb25lJiYoci5wdXNoKDAsMCwwKSxyLnB1c2goMCwwLDApLG8ucHVzaChzLnIscy5nLHMuYiksby5wdXNoKGEucixhLmcsYS5iKSl9aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IobywzKSksc3VwZXIoaSxuZXcgamQoe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSkpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtnVS5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAscz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dO2EucGFyZW50JiZhLnBhcmVudC5pc0JvbmUmJihkMi5tdWx0aXBseU1hdHJpY2VzKGdVLGEubWF0cml4V29ybGQpLENoLnNldEZyb21NYXRyaXhQb3NpdGlvbihkMiksci5zZXRYWVoocyxDaC54LENoLnksQ2gueiksZDIubXVsdGlwbHlNYXRyaWNlcyhnVSxhLnBhcmVudC5tYXRyaXhXb3JsZCksQ2guc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQyKSxyLnNldFhZWihzKzEsQ2gueCxDaC55LENoLnopLHMrPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfSxHdS5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLGh6LmV4dHJhY3RVcmxCYXNlKG4pfSxHdS5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX0saWcucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LGlnLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0saWcucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LGlnLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sSmEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LEphLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sSmEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEphLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxKYS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9LEFoLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx2eS5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX0sUG8ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sUG8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFBvLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxQby5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfSxNbi5wcm90b3R5cGUuZXh0cmFjdFBvc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKSx0aGlzLmNvcHlQb3NpdGlvbihuKX0sTW4ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sTW4ucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgJCkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxNbi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sTW4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxNbi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LE1uLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LGtjLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LENzLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LENzLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sSWgucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sS3IucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LEtyLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LEtyLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxLci5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sS3IucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LEtyLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksS3IuZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LEtyLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLEtyLmdldE5vcm1hbChuLHQsZSxpKX0sR2QucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LEdkLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBPaCh0aGlzLG4pfSxHZC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyB0Zyh0aGlzLG4pfSxKZS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sSmUucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSxKZS5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LCQucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUobil9LCQucHJvdG90eXBlLmdldENvbHVtbkZyb21NYXRyaXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCxuKX0sJC5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LCQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LCQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSwkLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sdHIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LHRyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sR2kucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0sR2kucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LEdpLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0sR2kucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxHaS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHaS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLHlvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHlvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksVDIucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4cy5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTmwucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTHIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09ZzJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShnMil9fX0pLExyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9nMjpNTSksdGhpc30sTHIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTHIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sS2kucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sS2kucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBMcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxLaS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxLaS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxLaS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxLaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LEtpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEtpLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksJG0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/ZzI6TU0pLHRoaXN9LCRtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sT2gucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE9oLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGJ5LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scU0ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWG8ucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBhbn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoemQucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxaaS5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxaaS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxaaS5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxaaS5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0sWmkucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxaaS5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LFppLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxaaS5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LFppLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxaaS5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sWmkucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFppLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP0ZyOkRofX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRWxlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2YS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IGd6KS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxETS5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxETS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0sVWQuY3Jvc3NPcmlnaW49dm9pZCAwLFVkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IHN6O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30sVWQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgb3o7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxVZC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFVkLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246IjEzNyJ9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSIxMzciKTt2YXIgTmM9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0oTmN8fChOYz17fSkpLE5jKSkoKTtmdW5jdGlvbiBrbGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBMcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBGbGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLHM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghc3x8cy5jb3VudCE9PXIpJiYocz1uZXcgTHIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLHMpKTtsZXQgYT1zLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsZCxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxoPW5ldyBKZShjLHUpLGY9bmV3IEplKGQscCksbT1uZXcgSmUoZC1jLHAtdSksQz1uZXcgSmUoLW0ueSxtLngpLnNldExlbmd0aChlLzIpLF89aC5jbG9uZSgpLmFkZChDKSx5PWguY2xvbmUoKS5zdWIoQyksST1mLmNsb25lKCkuYWRkKEMpLEE9Zi5jbG9uZSgpLnN1YihDKSxPPVtfLngsXy55LDAseS54LHkueSwwLEkueCxJLnksMCxJLngsSS55LDAseS54LHkueSwwLEEueCxBLnksMF07YS5zZXQoTyxsKk8ubGVuZ3RoKX1zLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBZMihuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTpzfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1CeihuLG8scz8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgUTI9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sc109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09c319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LEF5PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0oQXl8fChBeT17fSkpLEF5KSkoKSxLMj1jbGFzcyBleHRlbmRzIFEye3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6QXkuTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkF5Lk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxzPXt4Om9bMF0seTpvWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGQ9aXNOYU4oYyl8fGlzTmFOKHUpO2QhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PWE/e3g6Yyx5OnV9OmEpKSxpPWwpLGR8fChhPXt4OmMseTp1fSkscj1kfXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYT8/cykpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6cyxwb2x5bGluZTphfV1vZiByLmVudHJpZXMoKSlpZihzPT09QXkuTlVNQkVSKTI9PT1hLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDphWzBdLHk6YVsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLGEse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsYVtsXSxhW2wrMV1dKSx7eDphW2xdLHk6YVtsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sWjI9Y2xhc3MgZXh0ZW5kcyBIdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IEptKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxKMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIHJyLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBIdix0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9UlIodD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixzKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFJY19hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgcz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixzKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWkscz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrcy8zLGUueCtyLzIsZS55K3MvMyxlLngsZS55LTIqcy8zXSksbD1SUih0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWkscz1SUih0Py5kb20sKCk9PntsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGEpLGF9LGE9PihhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxhKSxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDp7ZG9tOnMsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOnN9PXIsYT0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LWEvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCthLzIsaS55K28vMl0pLGM9UlIodD8uZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx1fSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPXMse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSByci5XRUJHTDp7bGV0IGU9bmV3IFoyO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgYnksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLEljX2lzV2ViR2wyT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IFppKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2YgeW8pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IHU9QnoodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLGQ9bmV3IEtpLHA9bmV3IGpkKHtjb2xvcjp1fSksaD1uZXcgeW8oZCxwKTtyZXR1cm4gcC52aXNpYmxlPXIsRmxlKGQsZSxvKSx0aGlzLnNjZW5lLmFkZChoKSx7dHlwZTpOYy5MSU5FLGRhdGE6ZSxvYmozZDpoLHdpZHRoOm99fWxldHtkYXRhOnMsb2JqM2Q6YSx3aWR0aDpsfT10O3JldHVybiBZMih0aGlzLmJhY2tncm91bmRDb2xvcixhLHU9PigobyE9PWx8fCFzfHwhSWNfYXJlUG9seWxpbmVzRXF1YWwocyxlKSkmJkZsZSh1LGUsbyksdSksaSk/e3R5cGU6TmMuTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUscz1Ceih0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLGE9bmV3IEttKHtjb2xvcjpzLHZpc2libGU6aX0pO3JldHVybiBuZXcgeW8odCxhKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixzPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgS2k7a2xlKGwscyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KGtsZShsLHMpLGwpLGkpP3t0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgeHkoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gWTIodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIscz0yL01hdGguc3FydCgzKSpvLGE9bmV3IEdkKFtuZXcgSmUoZS54LXMvMixlLnktby8yKSxuZXcgSmUoZS54LGUueStvLzIpLG5ldyBKZShpLngsaS55K28vMiksbmV3IEplKGkueCtzLzIsaS55LW8vMildKTthLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgdGcoYSk7aWYoIXQpe2xldCB1PXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09dT9udWxsOih0aGlzLnNjZW5lLmFkZCh1KSx7dHlwZTpOYy5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp1fSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6TmMuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgSzIoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoQWModCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShBYyh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSwkYT0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KCRhfHwoJGE9e30pKSwkYSkpKCksSXk9KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KEl5fHwoSXk9e30pKSxJeSkpKCk7ZnVuY3Rpb24gTGxlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciByZz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1yci5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtyclt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9cmcud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6JGEuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTokYS5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8scyk9Pm8rcy5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgcz0wO3M8by5wb2ludHMubGVuZ3RoO3MrKylpW2UrK109by5wb2ludHNbc10ueCxpW2UrK109by5wb2ludHNbc10ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBJeS5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgSXkuT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBXdShuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uIEtNKG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBlTyhuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fXJnLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPUxsZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9MmMxZTcxYzUiKTt2YXIgSHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtmdW5jdGlvbiBVbGUobil7Zm9yKGxldCB0IG9mIG4paWYoU3RyaW5nKHQpLmluY2x1ZGVzKCJlIikpcmV0dXJuITA7cmV0dXJuITF9dmFyIFpNPXtnZXRTdGFuZGFyZFRpY2tzOmVPLGdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLHM9bi50aWNrcyhpLDIpO2lmKG8tcj49ODY0ZTV8fHMubGVuZ3RoPjIpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBhPW4udGlja3MoaSxlKTtyZXR1cm57bWFqb3I6cy5tYXAobD0+KHtzdGFydDpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRTaG9ydChsKX0pKSxtaW5vcjphLm1hcChsPT4oe3ZhbHVlOmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobCl9KSl9fSxnZXRUaWNrc0ZvckxpbmVhclNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWkscz1NYXRoLmFicyhvLXIpO2lmKHM+LjAwMSlyZXR1cm4gZU8obix0LGUsaSk7bGV0IGE9bi50aWNrcyhbcixvXSxlKSxsPW4udGlja3MoW3Isb10sMik7aWYoVWxlKGEpfHxVbGUobCkpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBjPVtdLHU9ZnVuY3Rpb24obil7bGV0IHQ9bi50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PXQubGVuZ3RoP051bWJlcih0WzFdKS0xOjB9KHMpO3M8MSYmbC5ldmVyeShoPT57bGV0IGY9TWF0aC5hYnMoaCk7cmV0dXJuIGY+PTAmJmY8MX0pJiYodSs9MSk7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGggb2YgbCl7bGV0W2YsbT0iIl09U3RyaW5nKGgpLnNwbGl0KCIuIiwyKSxDPU51bWJlcihmKyIuIittLnNsaWNlKDAsdSkpO2Quc2V0KEMse3N0YXJ0OkMsdGlja0Zvcm1hdHRlZFN0cmluZzowPT09Qz8iXHUyMDE0Ijp0LmZvcm1hdFJlYWRhYmxlKEMpfSl9bGV0IHA9MTAqTWF0aC5wb3coMTAsLXUpO2ZvcihsZXQgaCBvZiBhKWZvcihsZXQgZiBvZlsuLi5kLmtleXMoKV0ucmV2ZXJzZSgpKXtsZXQgbT1oLWY7aWYobT49MCYmbTxwKXtpZigwPT09ZiljLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2soaCl9KTtlbHNle2xldCBDPVN0cmluZyhoKS5zbGljZShTdHJpbmcoZikubGVuZ3RoKTtjLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzpgXHUyMDI2JHtDfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbShkLnZhbHVlcygpKSxtaW5vcjpjfX0sZmlsdGVyVGlja3NCeVZpc2liaWxpdHk6ZnVuY3Rpb24obix0LGUsaSxyPTUpe2lmKCFuLmxlbmd0aHx8IUh6KXJldHVybiBuO2xldCBvPSJ4Ij09PWU/MTotMSxzPW51bGw7cmV0dXJuIG4uZmlsdGVyKGE9PntsZXQgbD10KGEpO0h6LmZvbnQ9aTtsZXQgYz1Iei5tZWFzdXJlVGV4dChhLnRpY2tGb3JtYXR0ZWRTdHJpbmcpLHU9IngiPT09ZT9jLndpZHRoOmMuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQtYy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7cmV0dXJuIG51bGw9PT1zPyEobCtvKnU8MHx8KHM9bCtvKnUsMCkpOiEobyoocytvKnItbCk+MHx8KHM9bCtvKnUsMCkpfSl9fTtmdW5jdGlvbiBlamUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsMTcpKDEsInRleHQiKSxEKDIpLHYoKSxnKDMsInRpdGxlIiksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLE90KCJmb250IixpLmF4aXNGb250KSx6ZSgieCIsaS50ZXh0WFBvc2l0aW9uKGUudmFsdWUpKSgieSIsaS50ZXh0WVBvc2l0aW9uKGUudmFsdWUpKSx4KDEpLHFlKCIgIixlLnRpY2tGb3JtYXR0ZWRTdHJpbmcsIiAiKSx4KDIpLHl0KGkuZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnZhbHVlKSl9fWZ1bmN0aW9uIHRqZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjApKDEsInNwYW4iKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXQubGFzdCxvPU0oMik7T3QoImxlZnQiLG8uZ2V0TWFqb3JYUG9zaXRpb24oZSksInB4IikoIndpZHRoIixvLmdldE1ham9yV2lkdGhTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImJvdHRvbSIsby5nZXRNYWpvcllQb3NpdGlvbihlKSwicHgiKSgiaGVpZ2h0IixvLmdldE1ham9ySGVpZ2h0U3RyaW5nKGUscixvLm1ham9yVGlja3NbaSsxXSkpKCJmb250IixvLmF4aXNGb250KSxhdCgibWFqb3ItbGFiZWwiLCEwKSgibGFzdCIsciksYigidGl0bGUiLG8uZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnN0YXJ0KSkseCgyKSx5dChlLnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiBuamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSx0amUsMywxNiwic3BhbiIsMTkpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLm1ham9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ham9yVGljayl9fXZhciB6bGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBHLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCBlPW51bGwscj1LTSgieCI9PT10aGlzLmF4aXM/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMuZ3JpZENvdW50KTtlPXRoaXMuc2NhbGUgaW5zdGFuY2VvZiByTT9aTS5nZXRUaWNrc0ZvckxpbmVhclNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIG9NP1pNLmdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZSh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpOlpNLmdldFN0YW5kYXJkVGlja3ModGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KSx0aGlzLm1ham9yVGlja3M9ZS5tYWpvcix0aGlzLm1pbm9yVGlja3M9Wk0uZmlsdGVyVGlja3NCeVZpc2liaWxpdHkoZS5taW5vcixvPT50aGlzLmdldERvbVBvcyhvLnZhbHVlKSx0aGlzLmF4aXMsIjExcHggUm9ib3RvLCBzYW5zLXNlcmlmIil9Z2V0Rm9ybWF0dGVyKCl7cmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyPz90aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayhlKXtyZXR1cm4gZS52YWx1ZX10cmFja0J5TWFqb3JUaWNrKGUpe3JldHVybiBlLnN0YXJ0fWdldERvbVBvcyhlKXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxXdSh0aGlzLmRvbURpbSx0aGlzLmF4aXMpLGUpfXRleHRYUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzP1N0cmluZyh0aGlzLmdldERvbVBvcyhlKSk6IjEwMCUifXRleHRZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOlN0cmluZyh0aGlzLmdldERvbVBvcyhlKSl9Z2V0TWFqb3JYUG9zaXRpb24oZSl7cmV0dXJuInkiPT09dGhpcy5heGlzPzA6TWF0aC5taW4odGhpcy5kb21EaW0ud2lkdGgsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9yV2lkdGhTdHJpbmcoZSxpLHIpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5nZXRNYWpvclhQb3NpdGlvbihyKSktdGhpcy5nZXRNYWpvclhQb3NpdGlvbihlKSsicHgifWdldE1ham9yWVBvc2l0aW9uKGUpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8wOnRoaXMuZG9tRGltLmhlaWdodC1NYXRoLm1pbih0aGlzLmRvbURpbS5oZWlnaHQsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9ySGVpZ2h0U3RyaW5nKGUsaSxyKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6KGl8fCFyP3RoaXMuZG9tRGltLmhlaWdodDp0aGlzLmdldE1ham9yWVBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWVBvc2l0aW9uKGUpKyJweCJ9a2V5ZG93blByZXZlbnRDbG9zZShlKXsiRXNjYXBlIiE9PWUua2V5JiZlLnN0b3BQcm9wYWdhdGlvbigpfWV4dGVudENoYW5nZWQoZSxpKXtsZXQgcj1OdW1iZXIoZSksbz1OdW1iZXIoaSk7aWYobzxyKXtsZXQgcz1yO3I9byxvPXN9IU51bWJlci5pc0Zpbml0ZShyKXx8IU51bWJlci5pc0Zpbml0ZShvKXx8dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdChbcixvXSl9b25BeGlzVXBkYXRlTWVudU9wZW4oZSxpLHIpe2UudmFsdWU9U3RyaW5nKHJbMF0pLGkudmFsdWU9U3RyaW5nKHJbMV0pLGUuZm9jdXMoKX1zZXRFZGl0TWVudU9wZW5lZChlKXt0aGlzLmVkaXRNZW51T3BlbmVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyNix2YXJzOjEzLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnVPcGVuZWQiLCJtZW51Q2xvc2VkIl0sWyJtYXRNZW51VHJpZ2dlciIsIm1hdE1lbnVUcmlnZ2VyIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm1ham9yIHRpY2tzIiw0LCJuZ0lmIl0sWyJ4UG9zaXRpb24iLCJiZWZvcmUiLDMsInlQb3NpdGlvbiJdLFsibWFudWFsQ29udHJvbCIsIm1hdE1lbnUiXSxbMSwiZXh0ZW50LWVkaXQtaW5wdXQiLDMsImNsaWNrIiwia2V5ZG93biJdLFsidHlwZSIsIm51bWJlciIsMywidmFsdWUiXSxbIm1pbklucHV0IiwiIl0sWyJtYXhJbnB1dCIsIiJdLFsxLCJleHRlbnQtZWRpdC1jb250cm9sIiwzLCJrZXlkb3duIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsMSwiZXh0ZW50LWVkaXQtY2hhbmdlIiwzLCJjbGljayJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwxLCJleHRlbnQtZWRpdC1jYW5jZWwiLDMsImNsaWNrIl0sWzEsIm1pbm9yLXRpY2stbGFiZWwiXSxbMSwibWFqb3IiLCJ0aWNrcyJdLFszLCJtYWpvci1sYWJlbCIsImxhc3QiLCJsZWZ0Iiwid2lkdGgiLCJib3R0b20iLCJoZWlnaHQiLCJmb250IiwidGl0bGUiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFszLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIpLE4oMSwiZGl2IiwwKSxnKDIsImRpdiIsMSksam4oKSxnKDMsInN2ZyIsMiksRSg0LGVqZSw1LDYsImciLDMpLHYoKSxTYSgpLGcoNSwiYnV0dG9uIiw0LDUpLFAoIm1lbnVPcGVuZWQiLGZ1bmN0aW9uKCl7cmUocik7bGV0IHM9c3QoMTUpLGE9c3QoMjApO3JldHVybiBpLm9uQXhpc1VwZGF0ZU1lbnVPcGVuKHMsYSxpLmF4aXNFeHRlbnQpLG9lKGkuc2V0RWRpdE1lbnVPcGVuZWQoITApKX0pKCJtZW51Q2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLnNldEVkaXRNZW51T3BlbmVkKCExKX0pLE4oNywibWF0LWljb24iLDYpLHYoKSgpLEUoOCxuamUsMiwyLCJkaXYiLDcpLHYoKSxnKDksIm1hdC1tZW51Iiw4LDkpKDExLCJkaXYiLDEwKSxQKCJjbGljayIsZnVuY3Rpb24ocyl7cmV0dXJuIHMuc3RvcFByb3BhZ2F0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMTIsImxhYmVsIiksRCgxMywibWluIiksdigpLE4oMTQsImlucHV0IiwxMSwxMiksdigpLGcoMTYsImRpdiIsMTApLFAoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksZygxNywibGFiZWwiKSxEKDE4LCJtYXgiKSx2KCksTigxOSwiaW5wdXQiLDExLDEzKSx2KCksZygyMSwiZGl2IiwxNCksUCgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMjIsImJ1dHRvbiIsMTUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDE1KSxhPXN0KDIwKSxsPXN0KDYpO3JldHVybiBpLmV4dGVudENoYW5nZWQocy52YWx1ZSxhLnZhbHVlKSxvZShsLmNsb3NlTWVudSgpKX0pLEQoMjMsIiBDaGFuZ2UgIiksdigpLGcoMjQsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShyKSxvZShzdCg2KS5jbG9zZU1lbnUoKSl9KSxEKDI1LCIgQ2FuY2VsICIpLHYoKSgpKCl9aWYoMiZlKXtsZXQgcj1zdCgxMCk7ZWEoaS5heGlzKyItYXhpcyBheGlzIikseCg0KSxiKCJuZ0Zvck9mIixpLm1pbm9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeU1pbm9yVGljaykseCgxKSxhdCgiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixpLmVkaXRNZW51T3BlbmVkKSxiKCJtYXRNZW51VHJpZ2dlckZvciIscikseCgzKSxiKCJuZ0lmIixpLm1ham9yVGlja3MubGVuZ3RoKSx4KDEpLGIoInlQb3NpdGlvbiIsInkiPT09aS5heGlzPyJhYm92ZSI6ImJlbG93IikseCg1KSxiKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzBdKSx4KDUpLGIoInZhbHVlIixpLmF4aXNFeHRlbnRbMV0pfX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixabixJdSxQdV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZToxMXB4O3VzZXItc2VsZWN0Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0sIC5taW5vcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDA7b3ZlcmZsb3c6aGlkZGVufS5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7ZmxleDowIDAgMXB4O2p1c3RpZnktY29udGVudDpzdHJldGNofS50aWNrc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTozcHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTp0ZXh0LWJlZm9yZS1lZGdlO3RleHQtYW5jaG9yOm1pZGRsZX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NXB4fS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDt0ZXh0LWFuY2hvcjplbmR9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2ZvbnQtc2l6ZTowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDo1cHg7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjRweH0uZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDo1cHg7ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxMnB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczozMHB4IG1pbm1heChhdXRvLCAxMDBweCk7aGVpZ2h0OjMwcHg7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItc3R5bGU6c29saWQ7Y29sb3I6aW5oZXJpdH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjEuNDttYXJnaW4tbGVmdDo1cHg7cGFkZGluZzowIDEwcHh9LmF4aXNbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4dGVudC1lZGl0LW1lbnUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OnZpc2libGV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Y29udGFpbjpzdHJpY3R9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzllOWU5ZTtwYWRkaW5nOjAgNXB4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzllOWU5ZTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjVweCAwO3dpZHRoOjEwMCV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBKTShuLHQpe2xldCBlPU1hdGgubWluKEZ1KG4ubWFwKCh7eDpvfSk9Pm8pLHQpLG4ubGVuZ3RoLTEpLGk9TWF0aC5tYXgoMCxlLTEpO3JldHVybiBNYXRoLmFicyhuW2ldLngtdCktTWF0aC5hYnMobltlXS54LXQpPD0wP2k6ZX1mdW5jdGlvbiBqbGUobix0LGUsaSxyLG8pe2xldCBzO3N3aXRjaChuLmRlbHRhTW9kZSl7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTDpzPTE7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FOnM9ODticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0U6cz0yMDticmVhaztkZWZhdWx0OnM9MSxjb25zb2xlLndhcm4oYFVua25vd24gV2hlZWxFdmVudCBkZWx0YU1vZGU6ICR7bi5kZWx0YU1vZGV9LmApfWxldCBhPW4uZGVsdGFZKnMsbD1hPDA/TWF0aC5tYXgoYSppLC0uOTUpOmEqaSx7d2lkdGg6YyxoZWlnaHQ6dX09ZSxkPVtyLnJldmVyc2UodC54LFswLGNdLC1uLm9mZnNldFgqbCksci5yZXZlcnNlKHQueCxbMCxjXSxjKyhjLW4ub2Zmc2V0WCkqbCldLHA9W28ucmV2ZXJzZSh0LnksW3UsMF0sLW4ub2Zmc2V0WSpsKSxvLnJldmVyc2UodC55LFt1LDBdLHUrKHUtbi5vZmZzZXRZKSpsKV07cmV0dXJue3g6ZFsxXTxkWzBdP1tkWzFdLGRbMF1dOmQseTpwWzFdPHBbMF0/W3BbMV0scFswXV06cH19dmFyIG9qZT1bImRvdHMiXTtmdW5jdGlvbiBzamUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwxMikpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7emUoImN4IixpLmdldERvbVgoZS5kYXRhUG9pbnQueCkpKCJjeSIsaS5nZXREb21ZKGUuZGF0YVBvaW50LnkpKSgiZmlsbCIsZS5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIGFqZShuLHQpe2lmKDEmbiYmKGpuKCksS3QoMCksRSgxLHNqZSwxLDMsImNpcmNsZSIsMTEpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO3goMSksYigibmdJZiIsaS5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQoZS5kYXRhUG9pbnQpKX19ZnVuY3Rpb24gbGplKG4sdCl7aWYoMSZuJiYoam4oKSxLdCgwKSxFKDEsYWplLDIsMSwibmctY29udGFpbmVyIiwxMCksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLmN1cnNvcmVkRGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5U2VyaWVzTmFtZSl9fWZ1bmN0aW9uIGNqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJyZWN0IiwxMykpLDImbil7bGV0IGU9TSgpO3plKCJ4IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS54KSgid2lkdGgiLGUuem9vbUJveEluVWlDb29yZGluYXRlLndpZHRoKSgieSIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUueSkoImhlaWdodCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUuaGVpZ2h0KX19dmFyIHVqZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJue2RhdGE6bixjdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkOnQsY3Vyc29yTG9jYXRpb246ZX19O2Z1bmN0aW9uIGRqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNCksQWkoMSwxNSksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDExKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUudG9vbHRpcFRlbXBsYXRlP2UudG9vbHRpcFRlbXBsYXRlOmkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsa2IoMix1amUsZS5jdXJzb3JlZERhdGEsZS5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLGUuY3Vyc29yTG9jYXRpb24pKX19ZnVuY3Rpb24gcGplKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMTcpKDIsInRkIiwxOCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDE5KSxEKDUpLHYoKSxnKDYsInRkIiksRCg3KSx2KCksZyg4LCJ0ZCIpLEQoOSksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt4KDMpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLHl0KGUubWV0YWRhdGEuZGlzcGxheU5hbWUpLHgoMikseXQoZS5kYXRhUG9pbnQueSkseCgyKSx5dChlLmRhdGFQb2ludC54KX19ZnVuY3Rpb24gaGplKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIpKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwxNiksZyg0LCJ0aCIpLEQoNSwiTmFtZSIpLHYoKSxnKDYsInRoIiksRCg3LCJZIiksdigpLGcoOCwidGgiKSxEKDksIlgiKSx2KCkoKSgpLGcoMTAsInRib2R5IiksRSgxMSxwamUsMTAsNSwibmctY29udGFpbmVyIiwxMCksdigpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9TSgpO3goMTEpLGIoIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBtamUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIEdsZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgRyx0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBHLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBHLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1rcix0aGlzLnN0YXRlPW5ldyBWcihrci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUoQigoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9rci5QQU5OSU5HOmtyLkRSQUdfWk9PTUlORztpPT09a3IuTk9ORSYmcj09PWtyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09a3IuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxzPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLGE9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sc10seTpbYSxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChrci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBrci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoa3IuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBrci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2Uga3IuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDpzfT10aGlzLmRvbURpbSxhPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKHMrciksdT10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W2EsbF0seTpbYyx1XX19KTticmVha31jYXNlIGtyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLGxpKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksdmkoZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLGp0KGUpKTp4YSgzZTMpLnBpcGUoTnQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLEIoKCk9Pm51bGwpKX0pLEhlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6amxlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChrci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZULG89KGUuYnV0dG9ucyZZYS5NSURETEUpPT09WWEuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsV3UodGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxXdSh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksV3UodGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89Sk0oaS5wb2ludHMsZS54KSxzPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OnMsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKHMueCkseTp0aGlzLmdldERvbVkocy55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhubiksdyhvbSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChvamUsNyxBZSksbHQoUXAsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUifSxvdXRwdXRzOntvblZpZXdFeHRlbnRDaGFuZ2U6Im9uVmlld0V4dGVudENoYW5nZSIsb25WaWV3RXh0ZW50UmVzZXQ6Im9uVmlld0V4dGVudFJlc2V0IixvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2U6Im9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6b20sdXNlRmFjdG9yeTptamUsZGVwczpbUWldfV0pLHp0XSxkZWNsczoxMix2YXJzOjE1LGNvbnN0czpbWzEsImRvdHMiXSxbImRvdHMiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJ6b29tLWJveCIsNCwibmdJZiJdLFsxLCJ6b29tLWluc3RydWN0aW9uIl0sWzEsImluc3RydWN0aW9uLWNvbnRlbnQiXSxbImNka092ZXJsYXlPcmlnaW4iLCIiLDEsInRvb2x0aXAtb3JpZ2luIl0sWyJ0b29sdGlwT3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJkZXRhY2giXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWzEsInRvb2x0aXAtY29udGFpbmVyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzEsInRvb2x0aXAtcm93Il0sWzEsInRvb2x0aXAtcm93LWNpcmNsZSJdLFsxLCJuYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoam4oKSxnKDAsInN2ZyIsMCwxKSxFKDIsbGplLDIsMiwibmctY29udGFpbmVyIiwyKSxFKDMsY2plLDEsNCwicmVjdCIsMyksdigpLFNhKCksZyg0LCJkaXYiLDQpKDUsInNwYW4iLDUpLEQoNiwiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSx2KCkoKSxOKDcsImRpdiIsNiw3KSxFKDksZGplLDIsNiwibmctdGVtcGxhdGUiLDgpLFAoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKX0pLEUoMTAsaGplLDEyLDIsIm5nLXRlbXBsYXRlIixudWxsLDksZW4pKSwyJmUmJihhdCgicGFubmFibGUiLGkuc3BlY2lhbEtleVByZXNzZWQpKCJkcmFnZ2FibGUiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FfHxpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuRFJBR19aT09NSU5HKSgicGFubmluZyIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLlBBTk5JTkcpLHgoMiksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkUpLHgoMSksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykseCg2KSxiKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixpLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixpLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixpLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCkpfSxkZXBlbmRlbmNpZXM6W3luLFhlLE5vLFFwLHNtXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTt1c2VyLXNlbGVjdDpub25lfS5kb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5kb3RzLmRyYWdnYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmNyb3NzaGFpcn0uZG90cy5wYW5uYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJ9LmRvdHMucGFubmluZ1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJiaW5nfS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjYpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXAtb3JpZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udG9vbHRpcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuODUpO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Y29udGFpbjpwYWludCBzdHlsZSBsYXlvdXQ7Zm9udC1zaXplOi45ZW07b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjVweDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCV9dGhbX25nY29udGVudC0lQ09NUCVdLCB0ZFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggNXB4O3RleHQtYWxpZ246bGVmdH10aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmctYm90dG9tOjVweH0uem9vbS1ib3hbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTouMDM7ZmlsbDojMDAwO3N0cm9rZTojY2NjfS56b29tLWluc3RydWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDowO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEwcHg7dHJhbnNpdGlvbjpvcGFjaXR5IC41czt6LWluZGV4OjF9Lmluc3RydWN0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNob3ctem9vbS1pbnN0cnVjdGlvbltfbmdob3N0LSVDT01QJV0gICAuem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gX2plKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImxpbmUiLDIpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO2F0KCJ6ZXJvIiwwPT09ZSksemUoIngxIixpLmdldERvbVgoZSkpKCJ4MiIsaS5nZXREb21YKGUpKSgieTIiLGkuZG9tRGltLmhlaWdodCl9fWZ1bmN0aW9uIHZqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJsaW5lIiwzKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTthdCgiemVybyIsMD09PWUpLHplKCJ5MSIsaS5nZXREb21ZKGUpKSgieDIiLGkuZG9tRGltLndpZHRoKSgieTIiLGkuZ2V0RG9tWShlKSl9fXZhciBXbGU9KCgpPT57Y2xhc3MgbntnZXREb21YKGUpe3JldHVybiB0aGlzLnhTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC54LFd1KHRoaXMuZG9tRGltLCJ4IiksZSl9Z2V0RG9tWShlKXtyZXR1cm4gdGhpcy55U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfWdldFhUaWNrcygpe3JldHVybiB0aGlzLnhTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueCxLTSh0aGlzLmRvbURpbS53aWR0aCx0aGlzLnhHcmlkQ291bnQpKX1nZXRZVGlja3MoKXtyZXR1cm4gdGhpcy55U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LnksS00odGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMueUdyaWRDb3VudCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0LWdyaWQtdmlldyJdXSxpbnB1dHM6e3ZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix4R3JpZENvdW50OiJ4R3JpZENvdW50Iix5U2NhbGU6InlTY2FsZSIseUdyaWRDb3VudDoieUdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0ifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sieTEiLCIwIiwzLCJ6ZXJvIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIngxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ5MSIsIjAiXSxbIngxIiwiMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGpuKCksZygwLCJzdmciKSxFKDEsX2plLDEsNSwibGluZSIsMCksRSgyLHZqZSwxLDUsImxpbmUiLDEpLHYoKSksMiZlJiYoeCgxKSxiKCJuZ0Zvck9mIixpLmdldFhUaWNrcygpKSx4KDEpLGIoIm5nRm9yT2YiLGkuZ2V0WVRpY2tzKCkpKX0sZGVwZW5kZW5jaWVzOlt5bl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2NjYztcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC56ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGJqZT1bInNlcmllc1ZpZXciXSx4amU9WyJ4QXhpcyJdLENqZT1bInlBeGlzIl0sd2plPVsiY2hhcnRFbCJdO2Z1bmN0aW9uIE1qZShuLHQpe2lmKDEmbiYmTigwLCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsMTYpLDImbil7bGV0IGU9TSgpO2IoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgieEdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJ5R3JpZENvdW50IixlLllfR1JJRF9DT1VOVCkoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLm1haW4pfX1mdW5jdGlvbiBTamUobix0KXsxJm4mJihqbigpLE4oMCwic3ZnIixudWxsLDE3KSl9ZnVuY3Rpb24gRWplKG4sdCl7MSZuJiZOKDAsImNhbnZhcyIsbnVsbCwxNyl9ZnVuY3Rpb24gVGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFNqZSwyLDAsInN2ZyIsNSksRSgyLEVqZSwyLDAsImNhbnZhcyIsNSksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuU1ZHKSx4KDEpLGIoIm5nSWYiLGUuZ2V0UmVuZGVyZXJUeXBlKCk9PT1lLlJlbmRlcmVyVHlwZS5XRUJHTCl9fWZ1bmN0aW9uIERqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsMTgpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkKHIpKX0pKCJvblZpZXdFeHRlbnRSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLnZpZXdCb3hSZXNldCgpKX0pKCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKSxpPXN0KDEpO2IoInNlcmllc0RhdGEiLGUuc2VyaWVzRGF0YSkoInNlcmllc01ldGFkYXRhTWFwIixlLnNlcmllc01ldGFkYXRhTWFwKSgidmlld0V4dGVudCIsZS52aWV3Qm94KSgieFNjYWxlIixlLnhTY2FsZSkoInlTY2FsZSIsZS55U2NhbGUpKCJ0b29sdGlwT3JpZ2luRWwiLGkpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKSgidG9vbHRpcFRlbXBsYXRlIixlLnRvb2x0aXBUZW1wbGF0ZSl9fXZhciBBamU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIElqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOSksQWkoMSwyMCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbU4oMixBamUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIFBqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMociwieSIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJheGlzRXh0ZW50IixlLnZpZXdCb3gueSkoImN1c3RvbUZvcm1hdHRlciIsZS5jdXN0b21ZRm9ybWF0dGVyKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMueUF4aXMpKCJncmlkQ291bnQiLGUuWV9HUklEX0NPVU5UKSgic2NhbGUiLGUueVNjYWxlKX19ZnVuY3Rpb24gUmplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibGluZS1jaGFydC1heGlzIiwyMiksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhyLCJ4IikpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImF4aXNFeHRlbnQiLGUudmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIixlLmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJzY2FsZSIsZS54U2NhbGUpfX1mdW5jdGlvbiBPamUobix0KXsxJm4mJihnKDAsImRpdiIsMjMpLE4oMSwic3BhbiIsMjQpLHYoKSl9dmFyIGtqZT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybnt4U2NhbGU6bix5U2NhbGU6dCxkb21EaW1lbnNpb246ZSx2aWV3RXh0ZW50OmksaW50ZXJhY3Rpb25TdGF0ZTpyfX07ZnVuY3Rpb24gRmplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI1LDI2KSxBaSgyLDIwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixnTigyLGtqZSxlLnhTY2FsZSxlLnlTY2FsZSxlLmRvbURpbWVuc2lvbnMubWFpbixlLnZpZXdCb3gsZS5pbnRlcmFjdGlvblN0YXRlKSl9fXZhciBOamU9ZnVuY3Rpb24obix0KXtyZXR1cm57Y29udGFpbmVyOiEwLCJkYXJrLW1vZGUiOm4sImxpbmUtb25seS1tb2RlIjp0LCJsaW5lLWNoYXJ0IjohMH19LFV6PXt4OlswLDFdLHk6WzAsMV19LHRPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuUmVuZGVyZXJUeXBlPXJyLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGU9cnIuV0VCR0wsdGhpcy54U2NhbGVUeXBlPVNyLkxJTkVBUix0aGlzLnlTY2FsZVR5cGU9U3IuTElORUFSLHRoaXMubGluZU9ubHk9ITEsdGhpcy52aWV3Qm94Q2hhbmdlZD1uZXcgRyx0aGlzLm9uVmlld0JveE92ZXJyaWRkZW49bmV3IFVoKDEpLHRoaXMuaWdub3JlWU91dGxpZXJzPSExLHRoaXMuWV9HUklEX0NPVU5UPTYsdGhpcy5YX0dSSURfQ09VTlQ9MTAsdGhpcy54U2NhbGU9QWModGhpcy54U2NhbGVUeXBlKSx0aGlzLnlTY2FsZT1BYyh0aGlzLnhTY2FsZVR5cGUpLHRoaXMudmlld0JveD1Veix0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOjAsaGVpZ2h0OjB9LHhBeGlzOnt3aWR0aDowLGhlaWdodDowfSx5QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH19LHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuaW50ZXJhY3Rpb25TdGF0ZT1rci5OT05FLHRoaXMubGluZUNoYXJ0PW51bGwsdGhpcy5pc0RhdGFVcGRhdGVkPSExLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnNjYWxlVXBkYXRlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITF9bmdPbkluaXQoKXt0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dCh0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4pfW5nT25DaGFuZ2VzKGUpe2UueFNjYWxlVHlwZSYmKHRoaXMueFNjYWxlPUFjKHRoaXMueFNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUueVNjYWxlVHlwZSYmKHRoaXMueVNjYWxlPUFjKHRoaXMueVNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUuc2VyaWVzRGF0YSYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMCksZS5maXhlZFZpZXdCb3gmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMCksZS5zZXJpZXNNZXRhZGF0YU1hcCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITApLGUudXNlRGFya01vZGUmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMCksdGhpcy5zY2FsZVVwZGF0ZWQmJnRoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPXRoaXMuaXNWaWV3Qm94Q2hhbmdlZHx8dGhpcy5zY2FsZVVwZGF0ZWR8fCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuc2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3goZSksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMudXBkYXRlTGluZUNoYXJ0KCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9cmVjb3ZlclJlbmRlcmVySWZOZWVkZWQoKXshdGhpcy5pc1JlbmRlcmluZ0NvbnRleHRMb3N0fHx0aGlzLmRpc2FibGVVcGRhdGV8fCh0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMCx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITAsdGhpcy5pc0RhdGFVcGRhdGVkPSEwLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwLHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITEpfW9uVmlld1Jlc2l6ZSgpeyF0aGlzLmxpbmVDaGFydHx8KHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSx0aGlzLmxpbmVDaGFydC5yZXNpemUodGhpcy5kb21EaW1lbnNpb25zLm1haW4pLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKXtpZihlLnhTY2FsZVR5cGV8fGUueVNjYWxlVHlwZXx8ZS5pZ25vcmVZT3V0bGllcnN8fGUuc2VyaWVzRGF0YSlyZXR1cm4hMDtsZXQgcj1lLnNlcmllc01ldGFkYXRhTWFwO2lmKHIpe2xldCBvPXIucHJldmlvdXNWYWx1ZTtpZihPYmplY3Qua2V5cyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKS5sZW5ndGghPT1PYmplY3Qua2V5cyhvPz97fSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXRbcyxhXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKXtsZXQgbD1vJiZvW3NdO2lmKCFsfHxhLnZpc2libGUhPT1sLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfW9uQ29udGV4dExvc3QoKXt0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITAsdGhpcy5saW5lQ2hhcnQmJih0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCksdGhpcy5saW5lQ2hhcnQ9bnVsbCl9dHJpZ2dlckNvbnRleHRMb3N0Rm9yVGVzdCgpe3RoaXMub25Db250ZXh0TG9zdCgpfWdldExpbmVDaGFydEZvclRlc3QoKXtyZXR1cm4gdGhpcy5saW5lQ2hhcnR9aW5pdGlhbGl6ZUNoYXJ0KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKTtsZXQgZT10aGlzLmdldFJlbmRlcmVyVHlwZSgpLGk9e29uRHJhd0VuZDooKT0+e30sb25Db250ZXh0TG9zdDp0aGlzLm9uQ29udGV4dExvc3QuYmluZCh0aGlzKX0scj1udWxsO3N3aXRjaCh0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksZSl7Y2FzZSByci5TVkc6cj17dHlwZTpyci5TVkcsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGNhbGxiYWNrczppLGRvbURpbWVuc2lvbjp0aGlzLmRvbURpbWVuc2lvbnMubWFpbix1c2VEYXJrTW9kZTp0aGlzLnVzZURhcmtNb2RlfTticmVhaztjYXNlIHJyLldFQkdMOnI9e3R5cGU6cnIuV0VCR0wsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGA8bGluZS1jaGFydD4gZG9lcyBub3QgeWV0IHN1cHBvcnQgcmVuZGVyZXJUeXBlOiAke2V9YCl9bGV0IHM9ZSE9PXJyLlNWRyYmSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKT9yZzpKMjt0aGlzLmxpbmVDaGFydD1uZXcgcyhyKX1uZ09uRGVzdHJveSgpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCl9Z2V0UmVuZGVyZXJUeXBlKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIHJyLlNWRzpyZXR1cm4gcnIuU1ZHO2Nhc2UgcnIuV0VCR0w6cmV0dXJuIEljX2lzV2ViR2wyU3VwcG9ydGVkKCk/cnIuV0VCR0w6cnIuU1ZHO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbmRlcmVyVHlwZTogJHtufWApfX0odGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGUpfXJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCl7dGhpcy5kb21EaW1lbnNpb25zPXttYWluOnt3aWR0aDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy5zZXJpZXNWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx4QXhpczp7d2lkdGg6dGhpcy54QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx5QXhpczp7d2lkdGg6dGhpcy55QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fX19dXBkYXRlTGluZUNoYXJ0KCl7aWYodGhpcy5yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpLHRoaXMubGluZUNoYXJ0JiYhdGhpcy5kaXNhYmxlVXBkYXRlKXtpZih0aGlzLnNjYWxlVXBkYXRlZCYmKHRoaXMuc2NhbGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFhTY2FsZVR5cGUodGhpcy54U2NhbGVUeXBlKSx0aGlzLmxpbmVDaGFydC5zZXRZU2NhbGVUeXBlKHRoaXMueVNjYWxlVHlwZSkpLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQmJih0aGlzLmlzTWV0YWRhdGFVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldE1ldGFkYXRhKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKSx0aGlzLmlzRGF0YVVwZGF0ZWQmJih0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0RGF0YSh0aGlzLnNlcmllc0RhdGEpKSx0aGlzLnVzZURhcmtNb2RlVXBkYXRlZCYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFVzZURhcmtNb2RlKHRoaXMudXNlRGFya01vZGUpKSwhdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmZpeGVkVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy5maXhlZFZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmlzVmlld0JveENoYW5nZWQpe2xldCBpPWZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89bnVsbCxzPW51bGwsYT1bXTtmb3IobGV0e2lkOmQscG9pbnRzOnB9b2Ygbil7bGV0IGg9dFtkXTtpZihoJiYhaC5hdXgmJmgudmlzaWJsZSlmb3IobGV0IGY9MDtmPHAubGVuZ3RoO2YrKyl7bGV0e3g6bSx5OkN9PXBbZl07aShtKSYmKG89bnVsbD09PW98fG08bz9tOm8scz1udWxsPT09c3x8bT5zP206cykscihDKSYmYS5wdXNoKEMpfX1hLnNvcnQoUmwpO2xldCBjPWFbMF0sdT1hW2EubGVuZ3RoLTFdO3JldHVybiBlJiZhLmxlbmd0aD4yJiYoYz1hW01hdGguY2VpbCguMDUqKGEubGVuZ3RoLTEpKV0sdT1hW01hdGguZmxvb3IoLjk1KihhLmxlbmd0aC0xKSldKSx7eDpudWxsIT09byYmbnVsbCE9PXM/W28sc106dm9pZCAwLHk6dm9pZCAwIT09YyYmdm9pZCAwIT09dT9bYyx1XTp2b2lkIDB9fSh0aGlzLnNlcmllc0RhdGEsdGhpcy5zZXJpZXNNZXRhZGF0YU1hcCx0aGlzLmlnbm9yZVlPdXRsaWVycyx0aGlzLnhTY2FsZS5pc1NhZmVOdW1iZXIsdGhpcy55U2NhbGUuaXNTYWZlTnVtYmVyKTt0aGlzLnZpZXdCb3g9e3g6dGhpcy54U2NhbGUubmljZURvbWFpbihpLng/P1V6LngpLHk6dGhpcy55U2NhbGUubmljZURvbWFpbihpLnk/P1V6LnkpfX0odGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWR8fHRoaXMuaXNWaWV3Qm94Q2hhbmdlZCkmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0Vmlld0JveCh0aGlzLnZpZXdCb3gpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX19b25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDplfSl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCEwKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy52aWV3Qm94PWUsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQoZSl9dmlld0JveFJlc2V0KCl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQodGhpcy52aWV3Qm94KX1zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKGUpe2xldCBpPXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbjt0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ZSxpIT09ZSYmdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQoZSl9b25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKGUpe3RoaXMuaW50ZXJhY3Rpb25TdGF0ZT1lfWdldElzVmlld0JveE92ZXJyaWRkZW4oKXtyZXR1cm4gdGhpcy5vblZpZXdCb3hPdmVycmlkZGVufW9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhlLGkpe2xldCByPXsuLi50aGlzLnZpZXdCb3gsW2ldOmV9O3RoaXMub25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDpyfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGJqZSw3LEFlKSxsdCh4amUsNyxBZSksbHQoQ2plLDcsQWUpLGx0KHdqZSw1LEFlKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zZXJpZXNWaWV3PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNoYXJ0RWw9ci5maXJzdCl9fSxpbnB1dHM6e2N1c3RvbVZpc1RlbXBsYXRlOiJjdXN0b21WaXNUZW1wbGF0ZSIsY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGU6ImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLHByZWZlcnJlZFJlbmRlcmVyVHlwZToicHJlZmVycmVkUmVuZGVyZXJUeXBlIixzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixmaXhlZFZpZXdCb3g6ImZpeGVkVmlld0JveCIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix5U2NhbGVUeXBlOiJ5U2NhbGVUeXBlIixjdXN0b21YRm9ybWF0dGVyOiJjdXN0b21YRm9ybWF0dGVyIixjdXN0b21ZRm9ybWF0dGVyOiJjdXN0b21ZRm9ybWF0dGVyIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSIsbGluZU9ubHk6ImxpbmVPbmx5IixkaXNhYmxlVXBkYXRlOiJkaXNhYmxlVXBkYXRlIixpZ25vcmVZT3V0bGllcnM6Imlnbm9yZVlPdXRsaWVycyJ9LG91dHB1dHM6e3ZpZXdCb3hDaGFuZ2VkOiJ2aWV3Qm94Q2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTYsdmFyczoxMyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMywibmdDbGFzcyIsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbIm92ZXJsYXlUYXJnZXQiLCJjZGtPdmVybGF5T3JpZ2luIl0sWzEsInNlcmllcy12aWV3Il0sWyJzZXJpZXNWaWV3IiwiIl0sWzMsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4R3JpZENvdW50IiwieUdyaWRDb3VudCIsImRvbURpbSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIiw0LCJuZ0lmIl0sWzEsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLDQsIm5nSWYiXSxbMSwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwiY3VzdG9tLXZpcyBjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiLDQsIm5nSWYiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIl0sWyJjaGFydEVsIiwiIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJdLFsxLCJjdXN0b20tdmlzIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsxLCJkb3QiXSxbMSwicmVjdCJdLFsxLCJjdXN0b20tdmlzIiwiY3VzdG9tLWNoYXJ0LW92ZXJsYXktdmlzIl0sWyJjdXN0b21DaGFydE92ZXJsYXkiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblZpZXdSZXNpemUoKX0pLGcoMiwiZGl2IiwyLDMpLEUoNCxNamUsMSw2LCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsNCksRSg1LFRqZSwzLDIsIm5nLWNvbnRhaW5lciIsNSksRSg2LERqZSwxLDgsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsNiksRSg3LElqZSwyLDcsImRpdiIsNyksdigpLGcoOCwiZGl2Iiw4LDkpLEUoMTAsUGplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMCksdigpLGcoMTEsImRpdiIsMTEsMTIpLEUoMTMsUmplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMyksdigpLEUoMTQsT2plLDIsMCwiZGl2IiwxNCksRSgxNSxGamUsMyw4LCJkaXYiLDE1KSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLHRvKDEwLE5qZSxpLnVzZURhcmtNb2RlLGkubGluZU9ubHkpKSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLDApLHgoNCksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQpLHgoMSksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5jdXN0b21WaXNUZW1wbGF0ZSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIixpLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsTm8sc20semxlLEdsZSxXbGUsX21dLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1bX25naG9zdC0lQ09NUCVdICAgICAubGluZS1jaGFydDpoYXMoLmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYTpob3ZlcikgLngtYXhpcyAuZXh0ZW50LWVkaXQtYnV0dG9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bX25naG9zdC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtmbGV4LWdyb3c6MTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiICIuIGN1c3RvbUNoYXJ0T3ZlcmxheSI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjUwcHggMWZyO2dyaWQtYXV0by1yb3dzOjFmciAzMHB4IDBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uY29udGFpbmVyLmxpbmUtb25seS1tb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDB9LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2VyaWVzO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWdyaWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzO3Bvc2l0aW9uOnJlbGF0aXZlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9LmN1c3RvbS1jaGFydC1vdmVybGF5LXZpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmN1c3RvbUNoYXJ0T3ZlcmxheTtncmlkLXJvdy1lbmQ6MjtncmlkLXJvdy1zdGFydDoxfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gQmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMCksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gVmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gSGplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwidGgiLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5oZWFkZXJDbGlja2VkKHIudHlwZSkpfSksZygxLCJkaXYiLDUpLFAoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkuZHJhZ1N0YXJ0KHIpKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLmRyYWdFbmQoKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5kcmFnRW50ZXIocikpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsNiksZygzLCJkaXYiLDcpLEUoNCxCamUsMSwxLCJtYXQtaWNvbiIsOCksRSg1LFZqZSwxLDEsIm1hdC1pY29uIiw5KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoImRyYWdnYWJsZSIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoIm5nQ2xhc3MiLGkuZ2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZS50eXBlKSkseCgxKSxiKCJoZWFkZXIiLGUpLHgoMiksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS50eXBlIT09aS5zb3J0aW5nSW5mby5oZWFkZXIpLHgoMSksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkRFU0NFTkRJTkcmJmUudHlwZT09PWkuc29ydGluZ0luZm8uaGVhZGVyKX19ZnVuY3Rpb24gVWplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEhqZSw2LDUsInRoIiwzKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO3goMSksYigibmdJZiIsaS5zaG93Q29sdW1uKGUpKX19ZnVuY3Rpb24gemplKG4sdCl7MSZuJiZBaSgwKX12YXIgcWxlPWZ1bmN0aW9uKG4pe3JldHVybnskaW1wbGljaXQ6bn19O2Z1bmN0aW9uIGpqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOCksRSgxLHpqZSwxLDAsIm5nLWNvbnRhaW5lciIsMTkpLEQoMiksdigpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0LGk9TSgpLiRpbXBsaWNpdCxyPU0oKSxvPXN0KDkpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsbykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixIbigzLHFsZSxpLlZBTFVFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gR2plKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBXamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSxHamUsMSwwLCJuZy1jb250YWluZXIiLDE5KSxEKDIpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCksbz1zdCg5KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMyxxbGUsaS5QRVJDRU5UQUdFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gcWplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDIwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCk7eCgxKSxxZSgiICIsci5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKGUudHlwZSxpKSwiICIpfX1mdW5jdGlvbiBZamUobix0KXtpZigxJm4mJihnKDAsInRkIiwxNSksRSgxLGpqZSwzLDUsImRpdiIsMTYpLEUoMixXamUsMyw1LCJkaXYiLDE2KSxFKDMscWplLDIsMSwiZGl2IiwxNyksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO2IoIm5nU3dpdGNoIixlLnR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlcnMuVkFMVUVfQ0hBTkdFKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJzLlBFUkNFTlRBR0VfQ0hBTkdFKX19ZnVuY3Rpb24gWGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFlqZSw0LDMsInRkIiwxNCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxiKCJuZ0lmIixpLnNob3dDb2x1bW4oZSkpfX1mdW5jdGlvbiBRamUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsInRyIiwxMikoMiwidGQiLDEzKSxOKDMsInNwYW4iKSx2KCksRSg0LFhqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7eCgzKSxPdCgiYmFja2dyb3VuZC1jb2xvciIsZS5DT0xPUikseCgxKSxiKCJuZ0Zvck9mIixpLmhlYWRlcnMpfX1mdW5jdGlvbiBLamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDIzKX1mdW5jdGlvbiBaamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDI0KX1mdW5jdGlvbiBKamUobix0KXtpZigxJm4mJihFKDAsS2plLDEsMCwibWF0LWljb24iLDIxKSxFKDEsWmplLDEsMCwibWF0LWljb24iLDIyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ0lmIixlPj0wKSx4KDEpLGIoIm5nSWYiLGU8MCl9fXZhciBXZD0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KFdkfHwoV2Q9e30pKSxXZCkpKCkseno9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSxZbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRyx0aGlzLkNvbHVtbkhlYWRlcnM9bXQsdGhpcy5Tb3J0aW5nT3JkZXI9cWEsdGhpcy5TaWRlPVdkLHRoaXMuaGlnaGxpZ2h0U2lkZT1XZC5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix6eil9Z2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLGkpe3N3aXRjaChlKXtjYXNlIG10LlJVTjpyZXR1cm4gdm9pZCAwPT09aS5SVU4/IiI6aS5SVU47Y2FzZSBtdC5WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLlZBTFVFKTtjYXNlIG10LlNURVA6cmV0dXJuIHZvaWQgMD09PWkuU1RFUD8iIjp2cy5mb3JtYXRTaG9ydChpLlNURVApO2Nhc2UgbXQuVElNRTpyZXR1cm4gdm9pZCAwPT09aS5USU1FPyIiOm5ldyBEYXRlKGkuVElNRSkudG9JU09TdHJpbmcoKTtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIHZvaWQgMD09PWkuUkVMQVRJVkVfVElNRT8iIjppTS5mb3JtYXRSZWFkYWJsZShpLlJFTEFUSVZFX1RJTUUpO2Nhc2UgbXQuU01PT1RIRUQ6cmV0dXJuIHZvaWQgMD09PWkuU01PT1RIRUQ/IiI6dnMuZm9ybWF0U2hvcnQoaS5TTU9PVEhFRCk7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuVkFMVUVfQ0hBTkdFPyIiOnZzLmZvcm1hdFNob3J0KE1hdGguYWJzKGkuVkFMVUVfQ0hBTkdFKSk7Y2FzZSBtdC5TVEFSVF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLlNUQVJUX1NURVA/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9TVEVQKTtjYXNlIG10LkVORF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLkVORF9TVEVQPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1NURVApO2Nhc2UgbXQuU1RBUlRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuU1RBUlRfVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9WQUxVRSk7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuRU5EX1ZBTFVFPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1ZBTFVFKTtjYXNlIG10Lk1JTl9WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5NSU5fVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5NSU5fVkFMVUUpO2Nhc2UgbXQuTUFYX1ZBTFVFOnJldHVybiB2b2lkIDA9PT1pLk1BWF9WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLk1BWF9WQUxVRSk7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4gdm9pZCAwPT09aS5QRVJDRU5UQUdFX0NIQU5HRT8iIjpNYXRoLnJvdW5kKDEwMCppLlBFUkNFTlRBR0VfQ0hBTkdFKS50b1N0cmluZygpKyIlIjtjYXNlIG10LlNURVBfQVRfTUFYOnJldHVybiB2b2lkIDA9PT1pLlNURVBfQVRfTUFYPyIiOnZzLmZvcm1hdFNob3J0KGkuU1RFUF9BVF9NQVgpO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIHZvaWQgMD09PWkuU1RFUF9BVF9NSU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEVQX0FUX01JTik7Y2FzZSBtdC5NRUFOOnJldHVybiB2b2lkIDA9PT1pLk1FQU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5NRUFOKTtjYXNlIG10LlJBV19DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuUkFXX0NIQU5HRT8iIjp6bS5mb3JtYXRTaG9ydChNYXRoLmFicyhpLlJBV19DSEFOR0UpKTtkZWZhdWx0OnJldHVybiIifX1oZWFkZXJDbGlja2VkKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8uaGVhZGVyIT09ZXx8dGhpcy5zb3J0aW5nSW5mby5vcmRlciE9PXFhLkFTQ0VORElORz97aGVhZGVyOmUsb3JkZXI6cWEuQVNDRU5ESU5HfTp7aGVhZGVyOmUsb3JkZXI6cWEuREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHp6KX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZSh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsenopKX1kcmFnRW50ZXIoZSl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwodGhpcy5oaWdobGlnaHRTaWRlPXRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhUeXBlKGUudHlwZSk8dGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUpP1dkLkxFRlQ6V2QuUklHSFQsdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGU9ZS50eXBlKX1tb3ZlSGVhZGVyKGUsaSl7bGV0IHI9Wy4uLnRoaXMuaGVhZGVyc107cmV0dXJuIHIuc3BsaWNlKGUsMSksci5zcGxpY2UoaSwwLHRoaXMuaGVhZGVyc1tlXSkscn1nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShlKXtyZXR1cm4gZSE9PXRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlP3t9OntoaWdobGlnaHQ6ITAsImhpZ2hsaWdodC1ib3JkZXItcmlnaHQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLlJJR0hULCJoaWdobGlnaHQtYm9yZGVyLWxlZnQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLkxFRlR9fXNob3dDb2x1bW4oZSl7cmV0dXJuIGUuZW5hYmxlZCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8ZS50eXBlIT09bXQuU01PT1RIRUQpfWdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZShlKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmZpbmRJbmRleChpPT5lPT09aS50eXBlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMifSxkZWNsczoxMCx2YXJzOjIsY29uc3RzOltbMSwiZGF0YS10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFycm93IiwiIl0sWzMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImNlbGwiLDMsImRyYWdnYWJsZSIsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImhlYWRlciJdLFsxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWzEsInJvdyJdLFsxLCJyb3ctY2lyY2xlIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsxLCJjZWxsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjZWxsIiwiZXh0cmEtcmlnaHQtcGFkZGluZyJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Iiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IikoMSwidGFibGUiLDApKDIsInRoZWFkIikoMywidHIiKSxOKDQsInRoIiksRSg1LFVqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpKCksZyg2LCJ0Ym9keSIpLEUoNyxRamUsNSwzLCJuZy1jb250YWluZXIiLDEpLHYoKSgpKCksRSg4LEpqZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUmJih4KDUpLGIoIm5nRm9yT2YiLGkuaGVhZGVycykseCgyKSxiKCJuZ0Zvck9mIixpLmRhdGEpKX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxObyxocixJcixDcCxabixCUF0sc3R5bGVzOlsiLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweDt3aWR0aDoxMDAlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246c3RpY2t5O3RleHQtYWxpZ246bGVmdDt0b3A6MDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc29ydGluZy1pY29uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTJweDtoZWlnaHQ6MTJweDtib3JkZXItcmFkaXVzOjVweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc2hvd1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjN9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHQtYm9yZGVyLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZjk4MDB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodC1ib3JkZXItbGVmdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmZjk4MDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxRbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHfWdldE1pblBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LHM9ZVtpXTtmb3IobGV0IGE9aTthPD1yO2ErKylvPmVbYV0ueSYmKG89ZVthXS55LHM9ZVthXSk7cmV0dXJuIHN9Z2V0TWF4UG9pbnRJblJhbmdlKGUsaSxyKXtsZXQgbz1lW2ldLnkscz1lW2ldO2ZvcihsZXQgYT1pO2E8PXI7YSsrKW88ZVthXS55JiYobz1lW2FdLnkscz1lW2FdKTtyZXR1cm4gc31nZXRNZWFuKGUsaSxyKXtsZXQgbz0wO2ZvcihsZXQgcz1pO3M8PXI7cysrKW8rPWVbc10udmFsdWU7cmV0dXJuIG8vKHItaSsxKX1nZXRUaW1lU2VsZWN0aW9uVGFibGVEYXRhKCl7aWYoIXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbilyZXR1cm5bXTtsZXQgZT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxpPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAscj10aGlzLmRhdGFTZXJpZXMuZmlsdGVyKG89PkJEKG8sdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubWFwKG89PntsZXQgcz10aGlzLmNoYXJ0TWV0YWRhdGFNYXBbby5pZF0sYT1KTShvLnBvaW50cyxlKSxsPW8ucG9pbnRzW2FdLGM9bnVsbCx1PW51bGw7bnVsbCE9aSYmKHU9Sk0oby5wb2ludHMsaSksYz1vLnBvaW50c1t1XSk7bGV0IGQ9e2lkOm8uaWR9O2QuQ09MT1I9cy5jb2xvcjtmb3IobGV0IHAgb2YgdGhpcy5jb2x1bW5IZWFkZXJzKXN3aXRjaChwLnR5cGUpe2Nhc2UgbXQuUlVOOmxldCBoPSIiO3MuYWxpYXMmJihoPWAke3MuYWxpYXMuYWxpYXNOdW1iZXJ9ICR7cy5hbGlhcy5hbGlhc1RleHR9L2ApLGQuUlVOPWAke2h9JHtzLmRpc3BsYXlOYW1lfWA7Y29udGludWU7Y2FzZSBtdC5TVEVQOmQuU1RFUD1sLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5WQUxVRTpkLlZBTFVFPWwudmFsdWU7Y29udGludWU7Y2FzZSBtdC5SRUxBVElWRV9USU1FOmQuUkVMQVRJVkVfVElNRT1sLnJlbGF0aXZlVGltZUluTXM7Y29udGludWU7Y2FzZSBtdC5TTU9PVEhFRDpkLlNNT09USEVEPWwueTtjb250aW51ZTtjYXNlIG10LlZBTFVFX0NIQU5HRTppZighYyljb250aW51ZTtkLlZBTFVFX0NIQU5HRT1jLnktbC55O2NvbnRpbnVlO2Nhc2UgbXQuU1RBUlRfU1RFUDpkLlNUQVJUX1NURVA9bC5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuRU5EX1NURVA6aWYoIWMpY29udGludWU7ZC5FTkRfU1RFUD1jLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5TVEFSVF9WQUxVRTpkLlNUQVJUX1ZBTFVFPWwueTtjb250aW51ZTtjYXNlIG10LkVORF9WQUxVRTppZighYyljb250aW51ZTtkLkVORF9WQUxVRT1jLnk7Y29udGludWU7Y2FzZSBtdC5NSU5fVkFMVUU6aWYoIXUpY29udGludWU7ZC5NSU5fVkFMVUU9dGhpcy5nZXRNaW5Qb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS55O2NvbnRpbnVlO2Nhc2UgbXQuTUFYX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO2QuTUFYX1ZBTFVFPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKG8ucG9pbnRzLGEsdSkueTtjb250aW51ZTtjYXNlIG10LlBFUkNFTlRBR0VfQ0hBTkdFOmlmKCFjKWNvbnRpbnVlO2QuUEVSQ0VOVEFHRV9DSEFOR0U9KGMueS1sLnkpL2wueTtjb250aW51ZTtjYXNlIG10LlNURVBfQVRfTUFYOmlmKCF1KWNvbnRpbnVlO2QuU1RFUF9BVF9NQVg9dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuU1RFUF9BVF9NSU46aWYoIXUpY29udGludWU7ZC5TVEVQX0FUX01JTj10aGlzLmdldE1pblBvaW50SW5SYW5nZShvLnBvaW50cyxhLHUpLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5NRUFOOmlmKCF1KWNvbnRpbnVlO2QuTUVBTj10aGlzLmdldE1lYW4oby5wb2ludHMsYSx1KTtjb250aW51ZTtjYXNlIG10LlJBV19DSEFOR0U6aWYoIWMpY29udGludWU7ZC5SQVdfQ0hBTkdFPWMudmFsdWUtbC52YWx1ZTtjb250aW51ZTtkZWZhdWx0OmNvbnRpbnVlfXJldHVybiBkfSk7cmV0dXJuIHIuc29ydCgobyxzKT0+e2xldCBhPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShvLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKSxsPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKTtyZXR1cm4gYTxsP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT1xYS5BU0NFTkRJTkc/LTE6MTphPmw/dGhpcy5zb3J0aW5nSW5mby5vcmRlcj09PXFhLkFTQ0VORElORz8xOi0xOjB9KSxyfWdldFNvcnRhYmxlVmFsdWUoZSxpKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIE51bWJlci5pc05hTihuKXx8Ik5hTiI9PT1ufHxudWxsPT1uPy0xLzA6bn0oaT09PW10LlJVTj90aGlzLmNoYXJ0TWV0YWRhdGFNYXBbZS5pZF0uZGlzcGxheU5hbWU6ZVtpXSl9b3JkZXJDb2x1bW5zKGUpe3RoaXMuZWRpdENvbHVtbkhlYWRlcnMuZW1pdCh7aGVhZGVyczplLGRhdGFUYWJsZU1vZGU6dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9fby5SQU5HRTpfby5TSU5HTEV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2NoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLHN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb246InN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGNvbHVtbkhlYWRlcnM6ImNvbHVtbkhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIn0sZGVjbHM6MSx2YXJzOjUsY29uc3RzOltbMywiaGVhZGVycyIsImRhdGEiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInRiLWRhdGEtdGFibGUiLDApLFAoInNvcnREYXRhQnkiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNvcnREYXRhQnkuZW1pdChvKX0pKCJvcmRlckNvbHVtbnMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9yZGVyQ29sdW1ucyhvKX0pLHYoKSksMiZlJiZiKCJoZWFkZXJzIixpLmNvbHVtbkhlYWRlcnMpKCJkYXRhIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixpLnNtb290aGluZ0VuYWJsZWQpfSxkZXBlbmRlbmNpZXM6W1lsZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7dmFyIHRHZT1bInN0ZXBTcGFuIl07ZnVuY3Rpb24gbkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDUpLHYoKX19ZnVuY3Rpb24gaUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDYpLHYoKX19dmFyIHJHZT1mdW5jdGlvbihuLHQpe3JldHVybntmb2I6ITAsdW5yZW1vdmFibGU6bixwcm9zcGVjdGl2ZTp0fX0sS2xlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsbG93UmVtb3ZhbD0hMCx0aGlzLmlzUHJvc3BlY3RpdmU9ITEsdGhpcy5zdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmZvYlJlbW92ZWQ9bmV3IEd9bmdPbkNoYW5nZXMoZSl7ZS5zdGVwJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50JiZ0aGlzLnN0ZXBTcGFuLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXZhbGlkYXRlU3RlcChlKXtsZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpOygiICI9PT1lLmtleXx8aXNOYU4oTnVtYmVyKGkpKSkmJmUucHJldmVudERlZmF1bHQoKX1zdGVwVHlwZWQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPWUudGFyZ2V0LmlubmVyVGV4dDt0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoIiIhPT1pP051bWJlcihpKTpudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh0R2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGVwU3Bhbj1yLmZpcnN0KX19LGlucHV0czp7c3RlcDoic3RlcCIsYWxsb3dSZW1vdmFsOiJhbGxvd1JlbW92YWwiLGlzUHJvc3BlY3RpdmU6ImlzUHJvc3BlY3RpdmUifSxvdXRwdXRzOntzdGVwQ2hhbmdlZDoic3RlcENoYW5nZWQiLGZvYlJlbW92ZWQ6ImZvYlJlbW92ZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjUsdmFyczo3LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbImNvbnRlbnRlZGl0YWJsZSIsIiIsInJvbGUiLCJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCIsIkVkaXQgc3RlcCIsMywiaW5uZXJIVE1MIiwiYmx1ciIsImtleXByZXNzIiwia2V5ZG93bi5lbnRlciIsImtleWRvd24uc2hpZnQuZW50ZXIiXSxbInN0ZXBTcGFuIiwiIl0sWyJhcmlhLWxhYmVsIiwiRGVzZWxlY3QgZm9iIiwzLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEsMiksUCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleXByZXNzIixmdW5jdGlvbihvKXtyZXR1cm4gaS52YWxpZGF0ZVN0ZXAobyl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleWRvd24uc2hpZnQuZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBvLnByZXZlbnREZWZhdWx0KCl9KSx2KCksRSgzLG5HZSwyLDAsImJ1dHRvbiIsMyksRSg0LGlHZSwyLDAsImJ1dHRvbiIsMyksdigpKSwyJmUmJihiKCJuZ0NsYXNzIix0byg0LHJHZSwhaS5hbGxvd1JlbW92YWwsaS5pc1Byb3NwZWN0aXZlKSkseCgxKSxiKCJpbm5lckhUTUwiLGkuc3RlcCxYRikseCgyKSxiKCJuZ0lmIixpLmFsbG93UmVtb3ZhbCkseCgxKSxiKCJuZ0lmIixpLmlzUHJvc3BlY3RpdmUpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7cGFkZGluZzoycHggMnB4IDJweCA0cHg7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6bWluLWNvbnRlbnR9LmZvYltfbmdjb250ZW50LSVDT01QJV0gPiAucHJvc3BlY3RpdmVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctdG9wOjFweH0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6Z3JhYn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlci5wcm9zcGVjdGl2ZXtjdXJzb3I6cG9pbnRlcn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS5mb2IudW5yZW1vdmFibGVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDRweH0uZm9iLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggZGFzaGVkICM5ZTllOWU7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTdweH1zcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtmb250LXNpemU6MTFweDt3aWR0aDoxMXB4O2hlaWdodDoxMXB4O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjb2xvcjppbmhlcml0fWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjExMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOWU5ZTllO2NvbG9yOiNlZWU7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2UwZTBlMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHNHZT1bInN0YXJ0Rm9iV3JhcHBlciJdLGFHZT1bImVuZEZvYldyYXBwZXIiXSxsR2U9WyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiXTtmdW5jdGlvbiBjR2Uobix0KXsxJm4mJk4oMCwiZGl2Iiw3KX1mdW5jdGlvbiB1R2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMyw0KSxFKDIsY0dlLDEsMCwiZGl2Iiw1KSxOKDMsImNhcmQtZm9iIiw2KSx2KCkpLDImbil7bGV0IGU9TSgyKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gZEdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLEUoMSx1R2UsNCw3LCJkaXYiLDEpLGcoMiwiZGl2IiwyKSxQKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkubW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKHIpKX0pKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5wcm9zcGVjdGl2ZUZvYkNsaWNrZWQocikpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKSl9KSx2KCksWnQoKX1pZigyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLG51bGwhPT1lLnByb3NwZWN0aXZlU3RlcCkseCgxKSxiKCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpfX1mdW5jdGlvbiBwR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMik7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRVhURU5ERURfTElORSxyKSl9KSx2KCl9fWZ1bmN0aW9uIGhHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMyw4KSxFKDIscEdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMCksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gZkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxMSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDIpO3JldHVybiBvZShvLnN0YXJ0RHJhZyhvLkZvYi5FTkQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLHYoKX19ZnVuY3Rpb24gbUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzLDEyKSxFKDIsZkdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMyksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKTtyZXR1cm4gb2Uoci5vbkZvYlJlbW92ZWQoci5Gb2IuRU5EKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCkpLHgoMiksYigibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSx4KDEpLGIoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX12YXIgQnI9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5TVEFSVD0xXT0iU1RBUlQiLG5bbi5FTkQ9Ml09IkVORCJ9KEJyfHwoQnI9e30pKSxCcikpKCksZ0dlPXtzdGFydDpCci5TVEFSVCxlbmQ6QnIuRU5EfSxuTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lLHRoaXMuc2hvd0V4dGVuZGVkTGluZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZD0hMSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsLHRoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uPW51bGwsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRyx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmhhc0ZvYk1vdmVkPSExLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPUJyLk5PTkUsdGhpcy5hZmZvcmRhbmNlPUdvLk5PTkUsdGhpcy5tb3VzZUxpc3RlbmVyPXRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksdGhpcy5zdG9wTGlzdGVuZXI9dGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpLHRoaXMuRm9iPUJyLHRoaXMuVGltZVNlbGVjdGlvbkFmZm9yZGFuY2U9R299Z2V0Q3NzVHJhbnNsYXRlUHhGb3JTdGFydEZvYigpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbj8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvclByb3NwZWN0aXZlRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9c3RvcEV2ZW50UHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9c3RhcnREcmFnKGUsaSxyKXtpIT09R28uRk9CJiZ0aGlzLnN0b3BFdmVudFByb3BhZ2F0aW9uKHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9ZSx0aGlzLmFmZm9yZGFuY2U9aX1zdG9wRHJhZygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9QnIuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkJiZ0aGlzLnRpbWVTZWxlY3Rpb24mJnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnRoaXMudGltZVNlbGVjdGlvbixhZmZvcmRhbmNlOnRoaXMuYWZmb3JkYW5jZX0pLHRoaXMuYWZmb3JkYW5jZT1Hby5OT05FLHRoaXMuaGFzRm9iTW92ZWQ9ITF9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTH1zaG91bGRTd2FwRm9icyhlKXtyZXR1cm4hKCF0aGlzLnRpbWVTZWxlY3Rpb258fCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKSYmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP2U8dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA6dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5TVEFSVCYmZT50aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldE5ld1RpbWVTZWxlY3Rpb24oZSxpKXtsZXQgcj17Li4uaX07aWYoIXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm4gcjtpZighdGhpcy50aW1lU2VsZWN0aW9uLmVuZClyZXR1cm4gci5zdGFydD17c3RlcDplfSxyO2lmKHRoaXMuc2hvdWxkU3dhcEZvYnMoZSkpe2xldFtvLHNdPXRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl07cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPWdHZVtzXSxyW29dPXRoaXMudGltZVNlbGVjdGlvbltzXSxyW3NdPXtzdGVwOmV9LHJ9cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EPyhyLmVuZD17c3RlcDplfSxyKTooci5zdGFydD17c3RlcDplfSxyKX1nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSl7bGV0IGk9bnVsbCxyPXRoaXMuZ2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKSxvPXRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2UubW92ZW1lbnRZOmUubW92ZW1lbnRYO3JldHVybiB0aGlzLmlzTW92aW5nSGlnaGVyKHIsbyk/aT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24ocik6dGhpcy5pc01vdmluZ0xvd2VyKHIsbykmJihpPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKHIpKSxudWxsPT09aT9udWxsOml9bW91c2VNb3ZlKGUpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSlyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7aWYobnVsbD09PWl8fCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuO2xldCByPXRoaXMuZ2V0TmV3VGltZVNlbGVjdGlvbihpLHRoaXMudGltZVNlbGVjdGlvbik7dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cn0pLHRoaXMuaGFzRm9iTW92ZWQ9ITB9bW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKGUpe2lmKG51bGwhPXRoaXMudGltZVNlbGVjdGlvbj8uZW5kKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtudWxsIT09aSYmdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChpKX1pc01vdmluZ0xvd2VyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPHRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaTwwJiZyPnRoaXMubG93ZXN0U3RlcH1pc01vdmluZ0hpZ2hlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZT50aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk+MCYmcjx0aGlzLmhpZ2hlc3RTdGVwfWdldERyYWdnaW5nRm9iQ2VudGVyKCl7bGV0IGU9dGhpcy5nZXRDdXJyZW50Rm9iKCk/Lm5hdGl2ZUVsZW1lbnQ7aWYoIWUpcmV0dXJuIDA7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ascj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2ktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnItdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1nZXRDdXJyZW50Rm9iKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnN0YXJ0Rm9iV3JhcHBlcjtjYXNlIEJyLkVORDpyZXR1cm4gdGhpcy5lbmRGb2JXcmFwcGVyO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZUZvYldyYXBwZXJ9fWdldEN1cnJlbnRGb2JTdGVwKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA7Y2FzZSBCci5FTkQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZVN0ZXA/P3ZvaWQgMH19Z2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09VnMuVkVSVElDQUw/ZS5jbGllbnRZLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLmNsaWVudFgtdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1zdGVwVHlwZWQoZSxpKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZCYmdGhpcy5vbkZvYlJlbW92ZWQoZSkpO2xldCByPXsuLi50aGlzLnRpbWVTZWxlY3Rpb259O2U9PT1Cci5TVEFSVD9yLnN0YXJ0PXtzdGVwOml9OmU9PT1Cci5FTkQmJihyLmVuZD17c3RlcDppfSksbnVsbCE9PXIuZW5kJiZyLnN0YXJ0LnN0ZXA+ci5lbmQuc3RlcCYmKHI9e3N0YXJ0OnIuZW5kLGVuZDpyLnN0YXJ0fSksdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cixhZmZvcmRhbmNlOkdvLkZPQl9URVhUfSl9cHJvc3BlY3RpdmVGb2JDbGlja2VkKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGk9dGhpcy5nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKTshaXx8KHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9BRERFRCx0aW1lU2VsZWN0aW9uOml9KSx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpKX1nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKXtpZih0aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3tzdGFydDp7c3RlcDpNYXRoLm1pbih0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9LGVuZDp7c3RlcDpNYXRoLm1heCh0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9fTp7c3RhcnQ6e3N0ZXA6dGhpcy5wcm9zcGVjdGl2ZVN0ZXB9LGVuZDpudWxsfX1vbkZvYlJlbW92ZWQoZSl7ZSE9PUJyLkVORD9udWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246e3N0YXJ0OnRoaXMudGltZVNlbGVjdGlvbi5lbmQsZW5kOm51bGx9fSk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6R28uRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7Li4udGhpcy50aW1lU2VsZWN0aW9uLGVuZDpudWxsfX0pfW9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpe3RoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLWZvYi1jb250cm9sbGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHNHZSw1KSxsdChhR2UsNSksbHQobEdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YXJ0Rm9iV3JhcHBlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5lbmRGb2JXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnByb3NwZWN0aXZlRm9iV3JhcHBlcj1yLmZpcnN0KX19LGlucHV0czp7YXhpc0RpcmVjdGlvbjoiYXhpc0RpcmVjdGlvbiIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsY2FyZEZvYkhlbHBlcjoiY2FyZEZvYkhlbHBlciIsc3RhcnRTdGVwQXhpc1Bvc2l0aW9uOiJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGVuZFN0ZXBBeGlzUG9zaXRpb246ImVuZFN0ZXBBeGlzUG9zaXRpb24iLGhpZ2hlc3RTdGVwOiJoaWdoZXN0U3RlcCIsbG93ZXN0U3RlcDoibG93ZXN0U3RlcCIsc2hvd0V4dGVuZGVkTGluZToic2hvd0V4dGVuZGVkTGluZSIsaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkOiJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLHByb3NwZWN0aXZlU3RlcDoicHJvc3BlY3RpdmVTdGVwIixwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb246InByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLG9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZDoib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSxFKDEsZEdlLDMsMiwibmctY29udGFpbmVyIiwwKSxFKDIsaEdlLDQsNSwiZGl2IiwxKSxFKDMsbUdlLDQsNSwiZGl2IiwxKSx2KCkpLDImZSYmKHgoMSksYigibmdJZiIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpLHgoMSksYigibmdJZiIsaS50aW1lU2VsZWN0aW9uKSx4KDEpLGIoIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLEtsZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkPSExLHRoaXMuZGlzYWJsZUludGVyYWN0aW9uPSExLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLkhPUklaT05UQUwsdGhpcy5jYXJkRm9iSGVscGVyPXtnZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyksZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKX0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCk6IiJ9Z2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQuc3RlcD8/dGhpcy5taW5NYXhTdGVwLm1heFN0ZXApOm51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/bnVsbDp0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnByb3NwZWN0aXZlU3RlcCl9b25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKGUpe3RoaXMucHJvc3BlY3RpdmVTdGVwPWV9Z2V0SGlnaGVzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1heFN0ZXB9Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWluU3RlcH1nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpe2xldCBpPU1hdGgucm91bmQodGhpcy5zY2FsZS5yZXZlcnNlKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sZSkpO3JldHVybiBpPnRoaXMuZ2V0SGlnaGVzdFN0ZXAoKT90aGlzLmdldEhpZ2hlc3RTdGVwKCk6aTx0aGlzLmdldExvd2VzdFN0ZXAoKT90aGlzLmdldExvd2VzdFN0ZXAoKTppfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3RpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLHNjYWxlOiJzY2FsZSIsbWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQ6Im1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIixheGlzU2l6ZToiYXhpc1NpemUiLGlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZDoiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixkaXNhYmxlSW50ZXJhY3Rpb246ImRpc2FibGVJbnRlcmFjdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6MTMsY29uc3RzOltbMywiYXhpc0RpcmVjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLCJlbmRTdGVwQXhpc1Bvc2l0aW9uIiwicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIiwiaGlnaGVzdFN0ZXAiLCJsb3dlc3RTdGVwIiwicHJvc3BlY3RpdmVTdGVwIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiY2FyZEZvYkhlbHBlciIsInNob3dFeHRlbmRlZExpbmUiLCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiY2FyZC1mb2ItY29udHJvbGxlciIsMCksUCgib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdChvKX0pLHYoKSksMiZlJiYoT3QoInBvaW50ZXItZXZlbnRzIixpLmRpc2FibGVJbnRlcmFjdGlvbj8ibm9uZSI6ImFsbCIpLGIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpKSgiaGlnaGVzdFN0ZXAiLGkuZ2V0SGlnaGVzdFN0ZXAoKSkoImxvd2VzdFN0ZXAiLGkuZ2V0TG93ZXN0U3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwIixpLnByb3NwZWN0aXZlU3RlcCkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpKCJzaG93RXh0ZW5kZWRMaW5lIiwhMCkpfSxkZXBlbmRlbmNpZXM6W25PXSxzdHlsZXM6WyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciAudGltZS1mb2Itd3JhcHBlcntoZWlnaHQ6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHZHZT1bImRhdGFUYWJsZUNvbnRhaW5lciJdO2Z1bmN0aW9uIHlHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMjcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub3BlblRhYmxlRWRpdE1lbnUoKSl9KSxOKDEsIm1hdC1pY29uIiwyOCksZygyLCJzcGFuIiksRCgzLCJFZGl0IFRhYmxlIENvbHVtbnMiKSx2KCkoKX19ZnVuY3Rpb24gYkdlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyOSl9ZnVuY3Rpb24geEdlKG4sdCl7MSZuJiYoZygwLCJ0aCIpLEQoMSwiU21vb3RoZWQiKSx2KCkpfWZ1bmN0aW9uIENHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMzUpLEQoMiwiLyIpLFp0KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDEpLGIoImFsaWFzIixlLm1ldGFkYXRhLmFsaWFzKX19ZnVuY3Rpb24gd0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0ZCIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO3goMSkscWUoIiAiLGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQueSksIiAiKX19ZnVuY3Rpb24gTUdlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMzMpKDIsInRkIiwzNCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDIpLEUoNSxDR2UsMywxLCJuZy1jb250YWluZXIiLDI0KSxEKDYpLHYoKSxFKDcsd0dlLDIsMSwidGQiLDI0KSxnKDgsInRkIiksRCg5KSx2KCksZygxMCwidGQiKSxEKDExKSx2KCksZygxMiwidGQiKSxEKDEzKSxqKDE0LCJkYXRlIiksdigpLGcoMTUsInRkIiksRCgxNiksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxhdCgiY2xvc2VzdCIsZS5tZXRhZGF0YS5jbG9zZXN0KSx4KDIpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLGIoIm5nSWYiLGUubWV0YWRhdGEuYWxpYXMpLHgoMSkscWUoIiIsZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSwiICIpLHgoMSksYigibmdJZiIsaS5zbW9vdGhpbmdFbmFibGVkKSx4KDIpLHl0KGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQudmFsdWUpKSx4KDIpLHl0KGkuc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC5zdGVwKSkseCgyKSx5dChuZigxNCwxMSxlLmRhdGFQb2ludC53YWxsVGltZSwic2hvcnQiKSkseCgzKSxxZSgiICIsaS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUoZS5kYXRhUG9pbnQucmVsYXRpdmVUaW1lSW5NcyksIiAiKX19ZnVuY3Rpb24gU0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwzMSksZyg0LCJ0aCIpLEQoNSwiUnVuIiksdigpLEUoNix4R2UsMiwwLCJ0aCIsMjQpLGcoNywidGgiKSxEKDgsIlZhbHVlIiksdigpLGcoOSwidGgiKSxEKDEwLCJTdGVwIiksdigpLGcoMTEsInRoIiksRCgxMiwiVGltZSIpLHYoKSxnKDEzLCJ0aCIpLEQoMTQsIlJlbGF0aXZlIiksdigpKCkoKSxnKDE1LCJ0Ym9keSIpLEUoMTYsTUdlLDE3LDE0LCJuZy1jb250YWluZXIiLDMyKSx2KCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT10LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQscj10LmN1cnNvckxvY2F0aW9uLG89TSgpO3goNiksYigibmdJZiIsby5zbW9vdGhpbmdFbmFibGVkKSx4KDEwKSxiKCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpKSgibmdGb3JUcmFja0J5IixvLnRyYWNrQnlUb29sdGlwRGF0dW0pfX1mdW5jdGlvbiBFR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDQxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS50b2dnbGVUYWJsZUV4cGFuZGVkKCkpfSksTigxLCJtYXQtaWNvbiIsOSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJ0aXRsZSIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJFeHBhbmQgVGFibGUiOiJDb2xsYXBzZSBUYWJsZSIpLHgoMSksYigic3ZnSWNvbiIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJleHBhbmRfbW9yZV8yNHB4IjoiZXhwYW5kX2xlc3NfMjRweCIpfX12YXIgVEdlPWZ1bmN0aW9uKG4pe3JldHVybnsiZGF0YS10YWJsZS1jb250YWluZXIiOiEwLGV4cGFuZGVkOm59fTtmdW5jdGlvbiBER2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDM2LDM3KSgzLCJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIiwzOCksUCgic29ydERhdGFCeSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5zb3J0RGF0YUJ5KHIpKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHIpKX0pLHYoKSgpLGcoNCwiZGl2IiwzOSksRSg1LEVHZSwyLDIsImJ1dHRvbiIsNDApLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibmdDbGFzcyIsSG4oOSxUR2UsZS5jYXJkU3RhdGUudGFibGVFeHBhbmRlZCkpLHgoMiksYigiY2hhcnRNZXRhZGF0YU1hcCIsZS5jaGFydE1ldGFkYXRhTWFwKSgiZGF0YVNlcmllcyIsZS5kYXRhU2VyaWVzKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsZS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgiY29sdW1uSGVhZGVycyIsZS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGUuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsZS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoInNtb290aGluZ0VuYWJsZWQiLGUuc21vb3RoaW5nRW5hYmxlZCkseCgyKSxiKCJuZ0lmIixlLmNhbkV4cGFuZFRhYmxlKCkpfX12YXIgQUdlPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSxJR2U9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBQR2Uobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzNiksMiZuKXtsZXQgZT1NKDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTtPdCgibGVmdCIsby5mb3J3YXJkKGkueCxIbigzLEFHZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSxiKCJuZ0NsYXNzIixscCg1LElHZSkpfX12YXIgUkdlPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSxPR2U9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIGtHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwiZGl2IiwzNiksRSgyLFBHZSwxLDYsImRpdiIsNDIpLFp0KCkpLDImbil7bGV0IGU9TSgpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTt4KDEpLE90KCJyaWdodCIsby5mb3J3YXJkKGkueCxIbig0LFJHZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IiksYigibmdDbGFzcyIsSG4oNixPR2UsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLHgoMSksYigibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIEZHZShuLHQpezEmbiYmRSgwLGtHZSwzLDgsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIE5HZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiw0MyksUCgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uRm9iUmVtb3ZlZCgpKX0pLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpLGk9ZS5pbnRlcmFjdGlvblN0YXRlLHI9ZS54U2NhbGUsbz1lLnZpZXdFeHRlbnQscz1lLmRvbURpbWVuc2lvbixhPU0oKTt4KDEpLGIoImRpc2FibGVJbnRlcmFjdGlvbiIsIk5PTkUiIT09aSkoInRpbWVTZWxlY3Rpb24iLGEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoInNjYWxlIixyKSgibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG8ueCkoIm1pbk1heFN0ZXAiLGEubWluTWF4U3RlcCkoImF4aXNTaXplIixzLndpZHRoKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixhLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fWZ1bmN0aW9uIExHZShuLHQpezEmbiYmRSgwLE5HZSwyLDcsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciAkbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5SZW5kZXJlclR5cGU9cnIsdGhpcy5TY2FsZVR5cGU9U3IsdGhpcy5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ9ITEsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgRyx0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHLHRoaXMub3BlblRhYmxlRWRpdE1lbnVUb01vZGU9bmV3IEcsdGhpcy5vbkxpbmVDaGFydFpvb209bmV3IEcsdGhpcy5vbkNhcmRTdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5zb3J0aW5nSW5mbz17aGVhZGVyOm10LlJVTixvcmRlcjpxYS5BU0NFTkRJTkd9LHRoaXMueVNjYWxlVHlwZT1Tci5MSU5FQVIsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMucmVsYXRpdmVYRm9ybWF0dGVyPWlNLHRoaXMudmFsdWVGb3JtYXR0ZXI9em0sdGhpcy5zdGVwRm9ybWF0dGVyPXZzfXRvZ2dsZVlTY2FsZVR5cGUoKXt0aGlzLnlTY2FsZVR5cGU9dGhpcy55U2NhbGVUeXBlPT09U3IuTElORUFSP1NyLkxPRzEwOlNyLkxJTkVBUn1zb3J0RGF0YUJ5KGUpe3RoaXMuc29ydGluZ0luZm89ZSx0aGlzLm9uRGF0YVRhYmxlU29ydGluZy5lbWl0KGUpfXJlc2V0RG9tYWluKCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LnZpZXdCb3hSZXNldCgpfXRyYWNrQnlUb29sdGlwRGF0dW0oZSxpKXtyZXR1cm4gaS5pZH1nZXRDdXN0b21YRm9ybWF0dGVyKCl7c3dpdGNoKHRoaXMueEF4aXNUeXBlKXtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBpTTtjYXNlIFlpLlNURVA6cmV0dXJuIFNzZTtkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YShlLGkscil7bGV0IG89ZS5tYXAobD0+KHsuLi5sLG1ldGFkYXRhOnsuLi5sLm1ldGFkYXRhLGNsb3Nlc3Q6ITEsZGlzdFRvQ3Vyc29yUGl4ZWxzOk1hdGguaHlwb3QobC5kb21Qb2ludC54LXIueCxsLmRvbVBvaW50Lnktci55KSxkaXN0VG9DdXJzb3JYOmwuZGF0YVBvaW50LngtaS54LGRpc3RUb0N1cnNvclk6bC5kYXRhUG9pbnQueS1pLnl9fSkpLHM9MS8wLGE9MDtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoO2wrKylzPm9bbF0ubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzJiYocz1vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyxhPWwpO3N3aXRjaChvLmxlbmd0aCYmKG9bYV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBtby5BU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5kYXRhUG9pbnQueS1jLmRhdGFQb2ludC55KTtjYXNlIG1vLkRFU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+Yy5kYXRhUG9pbnQueS1sLmRhdGFQb2ludC55KTtjYXNlIG1vLk5FQVJFU1Q6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMtYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMpO2Nhc2UgbW8uTkVBUkVTVF9ZOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yWS1jLm1ldGFkYXRhLmRpc3RUb0N1cnNvclkpO2Nhc2UgbW8uREVGQVVMVDpjYXNlIG1vLkFMUEhBQkVUSUNBTDpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3BsYXlOYW1lPGMubWV0YWRhdGEuZGlzcGxheU5hbWU/LTE6bC5tZXRhZGF0YS5kaXNwbGF5TmFtZT5jLm1ldGFkYXRhLmRpc3BsYXlOYW1lPzE6MCl9fW9wZW5EYXRhRG93bmxvYWREaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50LHtkYXRhOntjYXJkSWQ6dGhpcy5jYXJkSWR9fSl9b25Gb2JSZW1vdmVkKCl7dGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdChXYS5GT0JfREVTRUxFQ1QpfXNob3dEYXRhVGFibGUoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb259c2hvd0ZvYkNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLm1pbk1heFN0ZXAmJih0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb258fHRoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkKX1jYW5FeHBhbmRUYWJsZSgpe3JldHVybiB0aGlzLmRhdGFTZXJpZXMuZmlsdGVyKGk9PkJEKGksdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubGVuZ3RoPjN9c2hvdWxkRXhwYW5kVGFibGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHR8fCF0aGlzLmNhcmRTdGF0ZT8udGFibGVFeHBhbmRlZCl9dG9nZ2xlVGFibGVFeHBhbmRlZCgpe3RoaXMub25DYXJkU3RhdGVDaGFuZ2VkLmVtaXQoey4uLnRoaXMuY2FyZFN0YXRlLHRhYmxlRXhwYW5kZWQ6dGhpcy5zaG91bGRFeHBhbmRUYWJsZSgpfSksdGhpcy5kYXRhVGFibGVDb250YWluZXImJih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodD0iIil9b3BlblRhYmxlRWRpdE1lbnUoKXt0aGlzLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlLmVtaXQodGhpcy5yYW5nZUVuYWJsZWQ/X28uUkFOR0U6X28uU0lOR0xFKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhNYykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdCh0Tyw1KSxsdCh2R2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubGluZUNoYXJ0PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmRhdGFUYWJsZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGNoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGNhcmRTdGF0ZToiY2FyZFN0YXRlIixEYXRhRG93bmxvYWRDb21wb25lbnQ6IkRhdGFEb3dubG9hZENvbXBvbmVudCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIixpc0NhcmRWaXNpYmxlOiJpc0NhcmRWaXNpYmxlIixpc1Bpbm5lZDoiaXNQaW5uZWQiLGxvYWRTdGF0ZToibG9hZFN0YXRlIixzaG93RnVsbFdpZHRoOiJzaG93RnVsbFdpZHRoIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIix0YWc6InRhZyIsdGl0bGU6InRpdGxlIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLHhBeGlzVHlwZToieEF4aXNUeXBlIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLGZvcmNlU3ZnOiJmb3JjZVN2ZyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ6ImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIscmFuZ2VFbmFibGVkOiJyYW5nZUVuYWJsZWQifSxvdXRwdXRzOntvbkZ1bGxTaXplVG9nZ2xlOiJvbkZ1bGxTaXplVG9nZ2xlIixvblBpbkNsaWNrZWQ6Im9uUGluQ2xpY2tlZCIsb25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25TdGVwU2VsZWN0b3JUb2dnbGVkOiJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLG9uRGF0YVRhYmxlU29ydGluZzoib25EYXRhVGFibGVTb3J0aW5nIixlZGl0Q29sdW1uSGVhZGVyczoiZWRpdENvbHVtbkhlYWRlcnMiLG9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlOiJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsb25MaW5lQ2hhcnRab29tOiJvbkxpbmVDaGFydFpvb20iLG9uQ2FyZFN0YXRlQ2hhbmdlZDoib25DYXJkU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MzgsdmFyczoyOCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscixvLHM7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGk9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAscj0kbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxvPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAscz0kbG9jYWxpemVgOkV4cGFuZCBUYWJsZeKQnzllNTlmZjUwYmZjYjQ3OTI3MmUyYjEwM2UxZTliMTE1MThlMmU0Y2XikJ82Mzc0ODgwMzQxMzkzMDIwNjEwOkV4cGFuZCBUYWJsZWAsW1sxLCJhbHdheXMtdmlzaWJsZSJdLFsxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsInRpdGxlIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsciwidGl0bGUiLCJNb3JlIGxpbmUgY2hhcnQgb3B0aW9ucyIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIixvLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibGluZV93ZWlnaHRfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIGRpYWxvZyB0byBkb3dubG9hZCBkYXRhIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImdldF9hcHBfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUgdG8gZWRpdCBkYXRhIHRhYmxlIGNvbHVtbnMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsiY2hhcnRDb250YWluZXIiLCIiXSxbImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbMywiZGlzYWJsZVVwZGF0ZSIsInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInhTY2FsZVR5cGUiLCJ5U2NhbGVUeXBlIiwiY3VzdG9tWEZvcm1hdHRlciIsImlnbm9yZVlPdXRsaWVycyIsInRvb2x0aXBUZW1wbGF0ZSIsInVzZURhcmtNb2RlIiwiY3VzdG9tVmlzVGVtcGxhdGUiLCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iLCJ2aWV3Qm94Q2hhbmdlZCJdLFsidG9vbHRpcCIsIiJdLFs0LCJuZ0lmIl0sWyJsaW5lQ2hhcnRDdXN0b21WaXMiLCIiXSxbImxpbmVDaGFydEN1c3RvbVhBeGlzVmlzIiwiIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSB0byBlZGl0IGRhdGEgdGFibGUgY29sdW1ucyIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImRpYW1ldGVyIiwiMTgiXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMywiYWxpYXMiXSxbMywibmdDbGFzcyJdLFsiZGF0YVRhYmxlQ29udGFpbmVyIiwiIl0sWzMsImNoYXJ0TWV0YWRhdGFNYXAiLCJkYXRhU2VyaWVzIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImNvbHVtbkhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJlZGl0Q29sdW1uSGVhZGVycyJdLFsxLCJib3R0b20tYXJlYSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiY2xhc3MiLCJleHBhbmQtYnV0dG9uIiwiYXJpYS1sYWJlbCIscywzLCJ0aXRsZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixzLDEsImV4cGFuZC1idXR0b24iLDMsInRpdGxlIiwiY2xpY2siXSxbMywibmdDbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMywiZGlzYWJsZUludGVyYWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInNjYWxlIiwibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLCJtaW5NYXhTdGVwIiwiYXhpc1NpemUiLCJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzZXREb21haW4oKX0pLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksTig5LCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTigxMSwibWF0LWljb24iLDkpLHYoKSxnKDEyLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLE4oMTMsIm1hdC1pY29uIiw5KSx2KCksZygxNCwiYnV0dG9uIiwxMSksTigxNSwibWF0LWljb24iLDEyKSx2KCksZygxNiwibWF0LW1lbnUiLG51bGwsMTMpKDE4LCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVZU2NhbGVUeXBlKCl9KSxOKDE5LCJtYXQtaWNvbiIsMTUpLGcoMjAsInNwYW4iKSxEKDIxLCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSIpLHYoKSgpLGcoMjIsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EYXRhRG93bmxvYWREaWFsb2coKX0pLE4oMjMsIm1hdC1pY29uIiwxNyksZygyNCwic3BhbiIpLEQoMjUsIkRvd25sb2FkIGRhdGEiKSx2KCkoKSxFKDI2LHlHZSw0LDAsImJ1dHRvbiIsMTgpLHYoKSgpKCksZygyNywiZGl2IiwxOSwyMCksRSgyOSxiR2UsMSwwLCJtYXQtc3Bpbm5lciIsMjEpLGcoMzAsImxpbmUtY2hhcnQiLDIyKSxQKCJvblZpZXdCb3hPdmVycmlkZGVuIixmdW5jdGlvbihvKXtyZXR1cm4gaS5pc1ZpZXdCb3hPdmVycmlkZGVuPW99KSgidmlld0JveENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbS5lbWl0KG8pfSksdigpLEUoMzEsU0dlLDE3LDMsIm5nLXRlbXBsYXRlIixudWxsLDIzLGVuKSx2KCkoKSxFKDMzLERHZSw2LDExLCJuZy1jb250YWluZXIiLDI0KSxFKDM0LEZHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI1LGVuKSxFKDM2LExHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI2LGVuKSksMiZlKXtsZXQgcj1zdCgxNyksbz1zdCgzMikscz1zdCgzNSksYT1zdCgzNyk7eCgzKSx4cigidGl0bGUiLGkudGFnKSx4cigidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSx4KDIpLGIoImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFXKDcsMjQsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVyg4LDI2LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSx4KDQpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMiksYigic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLHgoMSksYigibWF0TWVudVRyaWdnZXJGb3IiLHIpLHgoMTIpLGIoIm5nSWYiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpLHgoMyksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgiY3VzdG9tVmlzVGVtcGxhdGUiLHMpKCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsYSkseCgzKSxiKCJuZ0lmIixpLnNob3dEYXRhVGFibGUoKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLF92LHRPLCRuLFpuLEl1LEVjLFB1LHZvLHZ2LHl2LFFsZSxKbGUsZnQsVTBdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH1bX25naG9zdC0lQ09NUCVdOmhhcyguZXhwYW5kLWJ1dHRvbil7cGFkZGluZzo0cHggMTZweCAwfS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWJhc2lzOjI5OHB4fS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoLmV4cGFuZC1idXR0b24pKXtmbGV4LWdyb3c6MX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6NXB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIGF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEuMmVtO2xpbmUtaGVpZ2h0OjB9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOnZlcnRpY2FsfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjExcHg7dG9wOjExcHh9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMHB4O21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDo1MGVtO292ZXJmbG93OmF1dG87cmVzaXplOnZlcnRpY2FsfS5kYXRhLXRhYmxlLWNvbnRhaW5lci5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uYm90dG9tLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBWR2Uobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxpKT0+e2xldCByPXRbaV0sbz1lLnBvaW50cyxzPXIucG9pbnRzO3JldHVybiBlLnJ1bklkPT09ci5ydW5JZCYmby5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+e2xldCBjPXNbbF07cmV0dXJuIGEueD09PWMueCYmYS55PT09Yy55fSl9KX12YXIgZWNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PSRuZSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRyx0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodUspLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChtXyksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChidSksdGhpcy5mb3JjZVN2ZyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc0spLHRoaXMuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLnhTY2FsZVR5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KS5waXBlKEIoaT0+e3N3aXRjaChpKXtjYXNlIFlpLlNURVA6Y2FzZSBZaS5SRUxBVElWRTpyZXR1cm4gU3IuTElORUFSO2Nhc2UgWWkuV0FMTF9USU1FOnJldHVybiBTci5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHtpfWApfX0pKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLnBpcGUoQihpPT5pPjApKSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksQihsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KExwLHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUobD0+Qm9vbGVhbihsKSksQihsPT5sKSxRcygxKSkucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLGRpKFZHZSkpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoJEQpKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEIoKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcCh1PT4oey4uLnUsc2VyaWVzSWQ6dS5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksQihsPT5sLm1hcChjPT57bGV0IHU9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAoZD0+KHsuLi5kLHJlbGF0aXZlVGltZUluTXM6ZC53YWxsVGltZS11fSkpfX0pKSxzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+bC5tYXAodT0+KHsuLi51LHBvaW50czp1LnBvaW50cy5tYXAoZD0+e2xldCBwO3N3aXRjaChjKXtjYXNlIFlpLlJFTEFUSVZFOnA9ZC5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgWWkuV0FMTF9USU1FOnA9ZC53YWxsVGltZTticmVhaztkZWZhdWx0OnA9ZC5zdGVwfXJldHVybnsuLi5kLHg6cH19KX0pKSksUXMoMSkpO3RoaXMubWluTWF4U3RlcHMkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChmWix0aGlzLmNhcmRJZCksdGhpcy5zdG9yZS5zZWxlY3QobVosdGhpcy5jYXJkSWQpXSkucGlwZShCKChbbCxjXSk9PntpZihsJiZjKXJldHVybnttaW5TdGVwOk1hdGgubWF4KGw/Lm1pblN0ZXAsYz8ubWluU3RlcCksbWF4U3RlcDpNYXRoLm1pbihsPy5tYXhTdGVwLGM/Lm1heFN0ZXApfX0pKSx0aGlzLmRhdGFTZXJpZXMkPWEucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdCh2ZCkpLHZpKChbbCxjXSk9PntsZXQgdT1sLm1hcCgoe3Nlcmllc0lkOmQscG9pbnRzOnB9KT0+KHtpZDpkLHBvaW50czpwfSkpO3JldHVybiBjPD0wP2p0KHUpOmxvKGFzeW5jIGZ1bmN0aW9uKG4sdCl7TnVtYmVyLmlzRmluaXRlKHQpfHwodD0wKSx0PU1hdGgubWF4KDAsTWF0aC5taW4odCwxKSk7bGV0IGU9W107Zm9yKGxldCBpIG9mIG4pe2xldCByPWkucG9pbnRzWzBdPy55O2lmKGkucG9pbnRzLmV2ZXJ5KGM9PmMueT09cikpe2UucHVzaChpKTtjb250aW51ZX1sZXQgcz1pLnBvaW50cy5sZW5ndGg+MD8wOk5hTixhPTAsbD1pLnBvaW50cy5tYXAoYz0+e2xldCB1PWMueTtpZihOdW1iZXIuaXNGaW5pdGUodSkpe3M9cyp0KygxLXQpKnUsYSsrO2xldCBkPTE9PT10PzE6MS1NYXRoLnBvdyh0LGEpO3JldHVybnt4OmMueCx5OnMvZH19cmV0dXJue3g6Yy54LHk6dX19KTtlLnB1c2goe2lkOmkuaWQscG9pbnRzOmx9KX1yZXR1cm4gZX0odSxjKSkucGlwZShCKGQ9PntsZXQgcD11Lm1hcCgoaCxmKT0+KHtpZDpzKGguaWQpLHBvaW50czpkW2ZdLnBvaW50cy5tYXAoKHt5Om19LEMpPT4oey4uLmgucG9pbnRzW0NdLHk6bX0pKX0pKTtyZXR1cm5bLi4udSwuLi5wXX0pKX0pLFZuKFtdKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1wbihbdGhpcy5taW5NYXhTdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoVnApLHRoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0b3JlLnNlbGVjdChidSldKS5waXBlKEIoKFtsLGMsdSxkXSk9PmwmJmMmJmQ9PT1ZaS5TVEVQJiZ1P2NfKHUsbC5taW5TdGVwLGwubWF4U3RlcCk6bnVsbCkpLHRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoZ1osdGhpcy5jYXJkSWQpLHRoaXMuY29sdW1uSGVhZGVycyQ9cG4oW3RoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMuc3RvcmUuc2VsZWN0KF9fKV0pLnBpcGUoQigoW2wsYyx1XSk9PmwmJm51bGwhPT1sLmVuZD91OmMpKSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXAkPWEucGlwZSh2aShsPT5wbihsLm1hcChjPT50aGlzLmdldFJ1bkRpc3BsYXlOYW1lQW5kQWxpYXMoYy5ydW5JZCkucGlwZShCKHU9Pih7Li4uYywuLi51fSkpKSkpKSxzcih0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KHZkKSksQXIoMCksQigoW2wsYyx1LGRdKT0+e2xldCBwPXt9LGg9ZD4wO2ZvcihsZXQgZiBvZiBsKXtsZXR7c2VyaWVzSWQ6bSxydW5JZDpDLGRpc3BsYXlOYW1lOl8sYWxpYXM6eSxwYXJ0aXRpb25JbmRleDpJLHBhcnRpdGlvblNpemU6QX09ZjtwW21dPXt0eXBlOmZ2Lk9SSUdJTkFMLGlkOm0sYWxpYXM6eSxkaXNwbGF5TmFtZTpBPjE/YCR7X306ICR7SX1gOl8sdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KEMpKSxjb2xvcjp1W0NdPz8iI2ZmZiIsYXV4OiExLG9wYWNpdHk6MX19aWYoIWgpcmV0dXJuIHA7Zm9yKGxldFtmLG1db2YgT2JqZWN0LmVudHJpZXMocCkpe2xldCBDPXMoZik7cFtDXT17Li4ubSxpZDpDLHR5cGU6ZnYuREVSSVZFRCxhdXg6ITEsb3JpZ2luYWxTZXJpZXNJZDpmfSxtLmF1eD0hMCxtLm9wYWNpdHk9LjI1fXJldHVybiBwfSksVm4oe30pKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMuY2FyZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChtYykucGlwZShCKGw9PmxbdGhpcy5jYXJkSWRdfHx7fSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChCcCx0aGlzLmNhcmRJZCksdGhpcy5yYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGhaLHRoaXMuY2FyZElkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0UnVuRGlzcGxheU5hbWVBbmRBbGlhcyhlKXtyZXR1cm4gcG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpLHRoaXMuc3RvcmUuc2VsZWN0KGNBLHtydW5JZDplfSldKS5waXBlKEIoKFtpLHIsb10pPT57bGV0IHM9bnVsbCE9PWk/cltpXT8/bnVsbDpudWxsO3JldHVybntkaXNwbGF5TmFtZTpvfHxzP28/Lm5hbWU/PyIuLi4iOmUsYWxpYXM6c319KSl9c3RlcFNlcmllc1RvTGluZVNlcmllcyhlLGkpe2xldCByPWk9PT1ZaS5TVEVQO3JldHVybiBlLm1hcChvPT57bGV0IHM9MWUzKm8ud2FsbFRpbWU7cmV0dXJuey4uLm8seDpyP28uc3RlcDpzLHk6by52YWx1ZSx3YWxsVGltZTpzLHJlbGF0aXZlVGltZUluTXM6MH19KX1vbkRhdGFUYWJsZVNvcnRpbmcoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChnbmUoZSkpfW9uQ2FyZFN0YXRlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxQKHtjYXJkSWQ6dGhpcy5jYXJkSWQsc2V0dGluZ3M6ZX0pKX1vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goey4uLmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uU3RlcFNlbGVjdG9yVG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uTGluZUNoYXJ0Wm9vbShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElQKHt2aWV3Qm94OmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfWVkaXRDb2x1bW5IZWFkZXJzKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goblAoe21vZGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MjMsdmFyczo2OSxjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywiY2FyZElkIiwiY2hhcnRNZXRhZGF0YU1hcCIsIkRhdGFEb3dubG9hZENvbXBvbmVudCIsImRhdGFTZXJpZXMiLCJpZ25vcmVPdXRsaWVycyIsImlzQ2FyZFZpc2libGUiLCJpc1Bpbm5lZCIsImxvYWRTdGF0ZSIsInNob3dGdWxsV2lkdGgiLCJzbW9vdGhpbmdFbmFibGVkIiwidGFnIiwidGl0bGUiLCJjYXJkU3RhdGUiLCJ0b29sdGlwU29ydCIsInhBeGlzVHlwZSIsInhTY2FsZVR5cGUiLCJ1c2VEYXJrTW9kZSIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiZm9yY2VTdmciLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsIm1pbk1heFN0ZXAiLCJjb2x1bW5IZWFkZXJzIiwicmFuZ2VFbmFibGVkIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLCJvbkRhdGFUYWJsZVNvcnRpbmciLCJvbkxpbmVDaGFydFpvb20iLCJlZGl0Q29sdW1uSGVhZGVycyIsIm9uQ2FyZFN0YXRlQ2hhbmdlZCIsIm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzY2FsYXItY2FyZC1jb21wb25lbnQiLDApLFAoIm9uRnVsbFNpemVUb2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSgib25WaXNpYmlsaXR5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZpc2liaWxpdHlDaGFuZ2Uobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZChvKX0pKCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZChvKX0pKCJvbkRhdGFUYWJsZVNvcnRpbmciLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRGF0YVRhYmxlU29ydGluZyhvKX0pKCJvbkxpbmVDaGFydFpvb20iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbShvKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24obyl7cmV0dXJuIGkuZWRpdENvbHVtbkhlYWRlcnMobyl9KSgib25DYXJkU3RhdGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNhcmRTdGF0ZUNoYW5nZWQobyl9KSgib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksaigyMiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY2FyZElkIixpLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFcoMSwyNSxpLmNoYXJ0TWV0YWRhdGFNYXAkKSkoIkRhdGFEb3dubG9hZENvbXBvbmVudCIsaS5EYXRhRG93bmxvYWRDb21wb25lbnQpKCJkYXRhU2VyaWVzIixXKDIsMjcsaS5kYXRhU2VyaWVzJCkpKCJpZ25vcmVPdXRsaWVycyIsVygzLDI5LGkuaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLGkuaXNWaXNpYmxlKSgiaXNQaW5uZWQiLFcoNCwzMSxpLmlzUGlubmVkJCkpKCJsb2FkU3RhdGUiLFcoNSwzMyxpLmxvYWRTdGF0ZSQpKSgic2hvd0Z1bGxXaWR0aCIsVyg2LDM1LGkuc2hvd0Z1bGxXaWR0aCQpKSgic21vb3RoaW5nRW5hYmxlZCIsVyg3LDM3LGkuc21vb3RoaW5nRW5hYmxlZCQpKSgidGFnIixXKDgsMzksaS50YWckKSkoInRpdGxlIixXKDksNDEsaS50aXRsZSQpKSgiY2FyZFN0YXRlIixXKDEwLDQzLGkuY2FyZFN0YXRlJCkpKCJ0b29sdGlwU29ydCIsVygxMSw0NSxpLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFcoMTIsNDcsaS54QXhpc1R5cGUkKSkoInhTY2FsZVR5cGUiLFcoMTMsNDksaS54U2NhbGVUeXBlJCkpKCJ1c2VEYXJrTW9kZSIsVygxNCw1MSxpLnVzZURhcmtNb2RlJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE1LDUzLGkubGlua2VkVGltZVNlbGVjdGlvbiQpKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsVygxNiw1NSxpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsVygxNyw1NyxpLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQpKSgiZm9yY2VTdmciLFcoMTgsNTksaS5mb3JjZVN2ZyQpKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLFcoMTksNjEsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibWluTWF4U3RlcCIsVygyMCw2MyxpLm1pbk1heFN0ZXBzJCkpKCJjb2x1bW5IZWFkZXJzIixXKDIxLDY1LGkuY29sdW1uSGVhZGVycyQpKSgicmFuZ2VFbmFibGVkIixXKDIyLDY3LGkucmFuZ2VFbmFibGVkJCkpfSxkZXBlbmRlbmNpZXM6W212LCRsZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB6R2Uobix0LGUpe2xldCBpPVtdLHtsZWZ0OnIscmlnaHQ6b309dCxzPShvLXIpL2UsYT0wLGw9MDtmb3IobGV0IGM9MDtjPGU7YysrKXtsZXQgdT1yK2MqcyxkPXUrcyxwPWM9PT1lLTEsaD1sO2ZvcihsPTA7YTxuLmxlbmd0aDspe2xldCBmPW5bYV0sbT1qR2UoZix1LGQsIXApO2lmKGgrPW0uY3VycixsKz1tLm5leHQsZi54K2YuZHg+ZClicmVhazthKyt9aS5wdXNoKHt4OnUsZHg6cyx5Omh9KX1yZXR1cm4gaX1mdW5jdGlvbiBqR2Uobix0LGUsaSl7bGV0IHI9bi54LG89bi54K24uZHg7aWYocj5lfHxvPHQpcmV0dXJue2N1cnI6MCxuZXh0OjB9O2lmKDA9PT1uLmR4KXJldHVybiBpJiZvPj1lP3tjdXJyOjAsbmV4dDpuLnl9OntjdXJyOm4ueSxuZXh0OjB9O2xldCBzPU1hdGgubWluKG8sZSktTWF0aC5tYXgocix0KTtyZXR1cm57Y3VycjpuLnkqcy9uLmR4LG5leHQ6MH19dmFyIHFHZT1ybygiLjJ+cyIpLFlHZT1ybygiLjR+ciIpLFhHZT1ybygiLjJ+ZSIpO2Z1bmN0aW9uIG5jZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlND9xR2Uobik6dDwuMDAxP1hHZShuKTpZR2Uobil9dmFyIFFHZT1bIm1haW4iXSxLR2U9WyJ4QXhpcyJdLFpHZT1bInlBeGlzIl0sSkdlPVsiY29udGVudCJdLCRHZT1bImhpc3RvZ3JhbXMiXTtmdW5jdGlvbiBlNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIpKDEsInRleHQiKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLHgoMikseXQoZS50b29sdGlwRGF0YS54QXhpcy5sYWJlbCl9fWZ1bmN0aW9uIHQ2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIikoMSwidGV4dCIpLEQoMiksdigpKCkpLDImbil7bGV0IGU9TSgpO090KCJ0cmFuc2Zvcm0iLGUuZ2V0R3JvdXBUcmFuc2Zvcm0oZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSx4KDEpLHplKCJ5IixlLnRvb2x0aXBEYXRhLnlBeGlzLnBvc2l0aW9uKSx4KDEpLHFlKCIgIixlLnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIG42ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLFNhKCksS3QoMCksZygxLCJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciIsMTYpLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJ0aW1lU2VsZWN0aW9uIixlLnRpbWVTZWxlY3Rpb24pKCJzdGVwcyIsZS5nZXRTdGVwcygpKSgidGVtcG9yYWxTY2FsZSIsZS5zY2FsZXMudGVtcG9yYWxTY2FsZSl9fWZ1bmN0aW9uIGk2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIiksTigxLCJsaW5lIiwxNyksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O090KCJ0cmFuc2Zvcm0iLE0oKS5nZXRDc3NUcmFuc2xhdGVQeCgwLGUpKX19ZnVuY3Rpb24gcjZlKG4sdCl7MSZuJiYoam4oKSxOKDAsImxpbmUiLDIxKSl9ZnVuY3Rpb24gbzZlKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7T3QoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeChpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLngsaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS55KSl9fWZ1bmN0aW9uIHM2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLGcoMCwiZyIsMTgpLFAoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHIpe2xldCBzPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLHMsITApKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKG8pKX0pLEUoMSxyNmUsMSwwLCJsaW5lIiwxOSksTigyLCJwYXRoIiksRSgzLG82ZSwxLDIsImNpcmNsZSIsMjApLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO090KCJ0cmFuc2Zvcm0iLGkuZ2V0R3JvdXBUcmFuc2Zvcm0oZSkpKCJjb2xvciIsaS5nZXRIaXN0b2dyYW1GaWxsKGUpKSxhdCgiaGlzdG9ncmFtIiwhMCkoIm5vLWNvbG9yIiwhaS5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSkpLHgoMSksYigibmdJZiIsaS5tb2RlPT09aS5IaXN0b2dyYW1Nb2RlLk9GRlNFVCkseCgxKSx6ZSgiZCIsaS5nZXRIaXN0b2dyYW1QYXRoKGUpKSx4KDEpLGIoIm5nSWYiLGkudG9vbHRpcERhdGEpfX1mdW5jdGlvbiBhNmUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9TSgyKTt6ZSgiY3giLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBsNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsNCkoMSwiZyIpLE4oMiwicGF0aCIpLEUoMyxhNmUsMSwyLCJjaXJjbGUiLDIzKSx2KCksZyg0LCJnIiwyNCkoNSwidGV4dCIsMjUpLEQoNiksdigpKCkoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxPdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSx6ZSgiZCIsZS5nZXRIaXN0b2dyYW1QYXRoKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSxiKCJuZ0lmIixlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLHgoMSksT3QoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLngsZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi55KSkseCgyKSx5dChlLnRvb2x0aXBEYXRhLnZhbHVlLmxhYmVsKX19dmFyIGlPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMubW9kZT1Pci5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9Zm8uU1RFUCx0aGlzLnRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZT1Pcix0aGlzLlRpbWVQcm9wZXJ0eT1mbyx0aGlzLnRvb2x0aXBEYXRhPW51bGwsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOm5jZSxjb3VudDpybygiLjNuIiksd2FsbFRpbWU6a3YoIiVtLyVkICVYIiksc3RlcDpybygiLjBmIikscmVsYXRpdmU6aT0+cm8oIi4xciIpKGkvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe2xpKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+dGhpcy5vbk1vdXNlTW92ZShlKSl9Z2V0Q3NzVHJhbnNsYXRlUHgoZSxpKXtyZXR1cm5gdHJhbnNsYXRlKCR7ZX1weCwgJHtpfXB4KWB9Z2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaSl7aWYoIWUuYmlucy5sZW5ndGgpcmV0dXJue3g6MCxkeDowLHk6MH07bGV0IHI9ZS5iaW5zWzBdLG89ZS5iaW5zLnNsaWNlKC0xKVswXTtyZXR1cm4gaTxyLng/cjppPj1vLngrby5keD9vOmUuYmlucy5maW5kKGE9PmEueDw9aSYmaTxhLngrYS5keCl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZSgkTShlKSkseTp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKGUueSl9Ont4OjAseTowfX1nZXRIaXN0b2dyYW1QYXRoKGUpe2lmKCF0aGlzLnNjYWxlc3x8IWUuYmlucy5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUscj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89ZS5iaW5zWzBdLHM9ZS5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7aSgkTShvKSl9LCR7cigwKX1gXTtmb3IobGV0IGwgb2YgZS5iaW5zKWEucHVzaChgTCR7aSgkTShsKSl9LCR7cihsLnkpfWApO3JldHVybiBhLnB1c2goYEwke2koJE0ocykpfSwke3IoMCl9YCksYS5qb2luKCIiKX10cmFja0J5V2FsbFRpbWUoZSl7cmV0dXJuIGUud2FsbFRpbWV9Z2V0R3JvdXBUcmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuc2NhbGVzJiZ0aGlzLm1vZGUhPT1Pci5PVkVSTEFZP3RoaXMuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKSk6IiJ9Z2V0U3RlcHMoKXtyZXR1cm4gdGhpcy5kYXRhLm1hcChlPT5lLnN0ZXApfWlzVGltZVNlbGVjdGlvbkVuYWJsZWQoZSl7cmV0dXJuIEJvb2xlYW4odGhpcy5tb2RlPT09T3IuT0ZGU0VUJiZ0aGlzLnRpbWVQcm9wZXJ0eT09PWZvLlNURVAmJnRoaXMuc2NhbGVzJiZlKX1pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSl7cmV0dXJuIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHwobnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA9PT1lLnN0ZXA6dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA8PWUuc3RlcCYmdGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwPj1lLnN0ZXApfWdldEhpc3RvZ3JhbUZpbGwoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSk6IiJ9dXBkYXRlQ29sb3JPbkhvdmVyKGUsaSxyKXshdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fHRoaXMuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGkpfHwocj9lLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJuby1jb2xvciIpOmUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm5vLWNvbG9yIikpfWdldEdyaWRUaWNrWUxvY3MoKXtpZighdGhpcy5zY2FsZXN8fHRoaXMubW9kZT09PU9yLk9GRlNFVClyZXR1cm5bXTtsZXQgZT10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiBlLnRpY2tzKCkubWFwKGk9PmUoaSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuZG9tVmlzaWJsZT1lLGUmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQoZSl7aWYoIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pKXJldHVybjtsZXQgaT10aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxyPXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAsbz1lLnN0ZXA8aT9lLnN0ZXA6aSxzPXI7cz12b2lkIDA9PT1zP2Uuc3RlcD5pP2Uuc3RlcDppOmUuc3RlcD5zP2Uuc3RlcDpzLChvIT09aXx8cyE9PXIpJiZvIT09cyYmdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOm99LGVuZDp7c3RlcDpzfX0sYWZmb3JkYW5jZTpHby5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0V9KX1nZXRUaW1lVmFsdWUoZSl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIGZvLldBTExfVElNRTpyZXR1cm4gZS53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIGUuc3RlcDtjYXNlIGZvLlJFTEFUSVZFOnJldHVybiBlLndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXshdGhpcy5kb21WaXNpYmxlfHwodGhpcy5zY2FsZXM9dGhpcy5jb21wdXRlU2NhbGVzKHRoaXMuZGF0YSksdGhpcy5yZW5kZXJYQXhpcygpLHRoaXMucmVuZGVyWUF4aXMoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9Y29tcHV0ZVNjYWxlcyhlKXtsZXR7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDpzfT1pY2UoZSxfPT5mdW5jdGlvbihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5taW4oZSxpLngpLDEvMCl9KF8uYmlucyksXz0+anooXy5iaW5zLCh7eDp5LGR4Okl9KT0+eStJKSksYT1qeihlLF89Pmp6KF8uYmlucywoe3k6eX0pPT55KSksbD1EYygpLmRvbWFpbihbbyxzXSkubmljZSgpLGM9dGhpcy5tb2RlIT09T3IuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PWZvLldBTExfVElNRT9MbSgpOkRjKCksdT1lLm1hcChfPT50aGlzLmdldFRpbWVWYWx1ZShfKSkse21pbjpkLG1heDpwfT1pY2UodSxfPT5fKSxoPVtkLHBdO2MuZG9tYWluKGgpO2xldCBmPURjKCk7Zi5kb21haW4oWzAsYV0pO2xldCBtPXdtKHRoaXMuY29sb3J8fCIjMDAwIiksQz1EYygpO3JldHVybiBDLmRvbWFpbihoKSxsLnJhbmdlKFswLGldKSxDLnJhbmdlKFttLmJyaWdodGVyKCksbS5kYXJrZXIoKV0pLEMuaW50ZXJwb2xhdGUoTkgpLHRoaXMubW9kZT09PU9yLk9WRVJMQVk/KGMucmFuZ2UoW3Iscl0pLGYucmFuZ2UoW3IsMF0pKTooYy5yYW5nZShbci0odGhpcy5tb2RlPT09T3IuT0ZGU0VUP3ItdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLHJdKSxmLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOmwsZDNDb2xvclNjYWxlOkMsY291bnRTY2FsZTpmLHRlbXBvcmFsU2NhbGU6Y319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldHt3aWR0aDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxpPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMyxuKX0odGhpcy5zY2FsZXMuYmluU2NhbGUpLnRpY2tzKE1hdGgubWF4KDIsZS8yMCkpO2kudGlja0Zvcm1hdCh0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKSxpKFpQKHRoaXMueEF4aXMubmF0aXZlRWxlbWVudCkpfWdldFlBeGlzRm9ybWF0dGVyKCl7aWYodGhpcy5tb2RlPT09T3IuT1ZFUkxBWSlyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLmNvdW50O3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBmby5XQUxMX1RJTUU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5zdGVwO2Nhc2UgZm8uUkVMQVRJVkU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5yZWxhdGl2ZTtkZWZhdWx0OnRocm93IFJhbmdlRXJyb3IoYFkgYXhpcyBmb3JtYXR0ZXIgZm9yICR7dGhpcy50aW1lUHJvcGVydHl9IG11c3QgYmUgaW1wbGVtZW50ZWRgKX19Z2V0TWF4VGlja3MoZSl7bGV0e2hlaWdodDppfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxyPWkvMTU7aWYodGhpcy50aW1lUHJvcGVydHk9PT1mby5TVEVQKXtsZXRbbyxzXT1lLmRvbWFpbigpLGE9TWF0aC5tYXgocy1vKzEsMSk7cmV0dXJuIE1hdGgubWluKGEscil9cmV0dXJuIHJ9cmVuZGVyWUF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBlPXRoaXMubW9kZT09PU9yLk9WRVJMQVk/dGhpcy5zY2FsZXMuY291bnRTY2FsZTp0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlLGk9dGhpcy5nZXRNYXhUaWNrcyhlKSxyPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMixuKX0oZSkudGlja3MoTWF0aC5tYXgoMixpKSk7ci50aWNrRm9ybWF0KHRoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSkscihaUCh0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQpKX1maW5kQ2xvc2VzdERhdHVtSW5kZXgoZSl7bGV0IGk9ZS50YXJnZXQscj1pO2Zvcig7aSYmaSE9PXRoaXMuaGlzdG9ncmFtcy5uYXRpdmVFbGVtZW50OylyPWksaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGk/QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpOi0xfW9uTW91c2VNb3ZlRm9yVGVzdE9ubHkoZSl7cmV0dXJuIHRoaXMub25Nb3VzZU1vdmUoZSl9b25Nb3VzZU1vdmUoZSl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgaT1lLm9mZnNldFgscj1lLm9mZnNldFksbz10aGlzLmZpbmRDbG9zZXN0RGF0dW1JbmRleChlKTtpZihvPDApcmV0dXJuO2xldCBzPXRoaXMuc2NhbGVzLmJpblNjYWxlLmludmVydChpKSxhPXRoaXMuZGF0YVtvXSxsPXRoaXMuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGEscyk7dGhpcy50b29sdGlwRGF0YT17dmFsdWU6e3Bvc2l0aW9uOnt4OmkseTpyfSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5mb3JtYXR0ZXJzLmNvdW50KGwueSk6YFN0ZXA6ICR7dGhpcy5mb3JtYXR0ZXJzLnN0ZXAoYS5zdGVwKX1gfSx4QXhpczp7cG9zaXRpb246dGhpcy5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQobCkueCxsYWJlbDp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKCRNKGwpKX0seUF4aXM6e3Bvc2l0aW9uOnRoaXMuc2NhbGVzLmNvdW50U2NhbGUodGhpcy5tb2RlPT09T3IuT0ZGU0VUPzA6bC55KSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKHRoaXMuZ2V0VGltZVZhbHVlKGEpKTp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKGwueSl9LHhQb3NpdGlvbkluQmluQ29vcmQ6cyxjbG9zZXN0RGF0dW06YSxjbG9zZXN0QmluOmx9LHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFFHZSw1KSxsdChLR2UsNSksbHQoWkdlLDUpLGx0KEpHZSw1KSxsdCgkR2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWFpbj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS54QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS55QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5jb250ZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmhpc3RvZ3JhbXM9ci5maXJzdCl9fSxpbnB1dHM6e21vZGU6Im1vZGUiLHRpbWVQcm9wZXJ0eToidGltZVByb3BlcnR5Iixjb2xvcjoiY29sb3IiLGRhdGE6ImRhdGEiLHRpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24ifSxvdXRwdXRzOntvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMix2YXJzOjE1LGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJvblJlc2l6ZSIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdLFsibWFpbiIsIiJdLFsxLCJheGlzIiwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsxLCJ0b29sdGlwIl0sWzMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsxLCJheGlzIiwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbMSwiZ3JpZCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiaGlzdG9ncmFtcyIsIiJdLFszLCJ0cmFuc2Zvcm0iLCJoaXN0b2dyYW0iLCJuby1jb2xvciIsImNvbG9yIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsInRvb2x0aXAiLDQsIm5nSWYiXSxbMSwiaGlzdG9ncmFtLWNhcmQtZm9iIiwzLCJ0aW1lU2VsZWN0aW9uIiwic3RlcHMiLCJ0ZW1wb3JhbFNjYWxlIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXSxbIngyIiwiMTAwJSIsMSwidGljayJdLFszLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIl0sWyJjbGFzcyIsImJhc2VsaW5lIiwieDIiLCIxMDAlIiw0LCJuZ0lmIl0sWyJyIiwiMiIsMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWyJ4MiIsIjEwMCUiLDEsImJhc2VsaW5lIl0sWyJyIiwiMiJdLFsiciIsIjIiLDQsIm5nSWYiXSxbMSwidmFsdWUtbGFiZWwiXSxbIngiLCIzIiwieSIsIi0zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSksUCgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGpuKCksZygyLCJzdmciLDIpLE4oMywiZyIsbnVsbCwzKSxnKDUsImciLDQpLEUoNixlNmUsMywzLCJnIiw1KSx2KCkoKSxTYSgpLGcoNywiZGl2Iiw2KSxqbigpLGcoOCwic3ZnIiksTig5LCJnIixudWxsLDcpLGcoMTEsImciLDQpLEUoMTIsdDZlLDMsNCwiZyIsNSksdigpKCksRSgxMyxuNmUsMiwzLCJuZy1jb250YWluZXIiLDgpLHYoKSxnKDE0LCJzdmciLDksMTApKDE2LCJnIiwxMSksRSgxNyxpNmUsMiwyLCJnIiwxMiksdigpLGcoMTgsImciLG51bGwsMTMpLEUoMjAsczZlLDQsMTEsImciLDE0KSx2KCksRSgyMSxsNmUsNyw3LCJnIiwxNSksdigpKCkpLDImZSYmKGVhKCJtYWluICIraS5tb2RlKyIgIitpLnRpbWVQcm9wZXJ0eSkseCg2KSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDUpLE90KCJ0cmFuc2Zvcm0iLGkuZ2V0Q3NzVHJhbnNsYXRlUHgoOSwwKSkseCgxKSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDEpLGIoIm5nSWYiLGkuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZChpLnRpbWVTZWxlY3Rpb24pKSx4KDQpLGIoIm5nRm9yT2YiLGkuZ2V0R3JpZFRpY2tZTG9jcygpKSx4KDEpLGF0KCJoaXN0b2dyYW1zIiwhMCkoImxpbmtlZC10aW1lLXNpbmdsZS1zdGVwIixpLnRpbWVTZWxlY3Rpb24mJiFpLnRpbWVTZWxlY3Rpb24uZW5kKSx4KDIpLGIoIm5nRm9yT2YiLGkuZGF0YSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5V2FsbFRpbWUpLHgoMSksYigibmdJZiIsaS50b29sdGlwRGF0YSkpfSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX1bX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjEwcHh9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJjb250ZW50IHktYXhpcyIgIngtYXhpcyAuIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDUwcHg7Z3JpZC10ZW1wbGF0ZS1yb3dzOjFmciAzMHB4fS5tYWluLndhbGxfdGltZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA3NXB4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEwcHh9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aWRlb2dyYXBoaWM7dGV4dC1hbmNob3I6c3RhcnR9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjojNjE2MTYxO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBnW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOngtYXhpc30ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpoYW5naW5nO3RleHQtYW5jaG9yOm1pZGRsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eS1heGlzO292ZXJmbG93OmNsaXAgdmlzaWJsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTptaWRkbGU7dGV4dC1hbmNob3I6c3RhcnR9Lmhpc3RvZ3JhbS1jYXJkLWZvYltfbmdjb250ZW50LSVDT01QJV17bGVmdDo5cHg7cG9zaXRpb246YWJzb2x1dGV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiNkZGR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5lLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiM1NTV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjb250ZW50O292ZXJmbG93OnZpc2libGU7ei1pbmRleDoxfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1kYXNoYXJyYXk6Mn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utb3BhY2l0eTouNjtzdHJva2Utd2lkdGg6MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjYpKTtzdHJva2U6I2ZmZjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZTpjdXJyZW50Q29sb3I7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eToxO3N0cm9rZTpjdXJyZW50Q29sb3I7ZmlsbDpyZ2JhKDAsMCwwLDApfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyMjEsMjIxLDIyMSwuNCkgIWltcG9ydGFudH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDUxLDUxLDUxLC40KSAhaW1wb3J0YW50fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGp6KG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkpPT5NYXRoLm1heChlLHQoaSkpLC0xLzApfWZ1bmN0aW9uIGljZShuLHQsZSl7ZXx8KGU9dCk7bGV0IGk9MS8wLHI9LTEvMDtmb3IobGV0IG8gb2YgbilpPU1hdGgubWluKGksdChvKSkscj1NYXRoLm1heChyLGUobykpO3JldHVybnttaW46aSxtYXg6cn19ZnVuY3Rpb24gJE0obil7cmV0dXJuIG4ueCsuNSpuLmR4fWZ1bmN0aW9uIGQ2ZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMTQpLE4oMSwibWF0LXNwaW5uZXIiLDE1KSx2KCkpfWZ1bmN0aW9uIHA2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInRiLWhpc3RvZ3JhbSIsMTYpLFAoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvbkxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImRhdGEiLGUuZGF0YSkoIm1vZGUiLGUubW9kZSkoInRpbWVQcm9wZXJ0eSIsZS50aW1lUHJvcGVydHkoZS54QXhpc1R5cGUpKSgiY29sb3IiLGUucnVuQ29sb3JTY2FsZShlLnJ1bklkKSkoInRpbWVTZWxlY3Rpb24iLGUuY29udmVydFRvVGltZVNlbGVjdGlvbihlLmxpbmtlZFRpbWVTZWxlY3Rpb24pKX19ZnVuY3Rpb24gaDZlKG4sdCl7MSZuJiYoZygwLCJkaXYiLDE4KSxEKDEsIiBEYXRhIGZhaWxlZCB0byBsb2FkLiAiKSx2KCkpfWZ1bmN0aW9uIGY2ZShuLHQpe2lmKDEmbiYmRSgwLGg2ZSwyLDAsImRpdiIsMTcpLDImbil7bGV0IGU9TSgpO2IoIm5nSWYiLGUubG9hZFN0YXRlPT09ZS5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fXZhciBtNmU9ZnVuY3Rpb24obil7cmV0dXJue2JhY2tncm91bmRDb2xvcjpufX0scmNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uTGlua2VkVGltZVRvZ2dsZWQ9bmV3IEd9dGltZVByb3BlcnR5KGUpe3N3aXRjaChlKXtjYXNlIFlpLlNURVA6cmV0dXJuIGZvLlNURVA7Y2FzZSBZaS5XQUxMX1RJTUU6cmV0dXJuIGZvLldBTExfVElNRTtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBmby5SRUxBVElWRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCB4QXhpc1R5cGUgZm9yIGhpc3RvZ3JhbSB0aW1lIHByb3BlcnR5LiIpfX1jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9udWxsOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcH0sZW5kOmUuZW5kU3RlcD97c3RlcDplLmVuZFN0ZXB9Om51bGx9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiXV0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksTigyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSx2KCksZyg0LCJkaXYiLDQpLE4oNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksdigpLGcoNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxOKDksIm1hdC1pY29uIiw5KSx2KCksZygxMCwiYnV0dG9uIiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxOKDExLCJtYXQtaWNvbiIsOSksdigpKCksRSgxMixkNmUsMiwwLCJzcGFuIiwxMSksdigpLEUoMTMscDZlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksRSgxNCxmNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxlbikpLDImZSl7bGV0IHI9c3QoMTUpO3goMiksYigidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCkseCgyKSxiKCJuZ1N0eWxlIixIbigxMixtNmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSx6ZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLHgoMSksYigic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSx4KDIpLGIoInN2Z0ljb24iLGkuc2hvd0Z1bGxXaWR0aD8iZnVsbHNjcmVlbl9leGl0XzI0cHgiOiJmdWxsc2NyZWVuXzI0cHgiKSx4KDEpLGIoIm5nSWYiLGkubG9hZFN0YXRlPT09aS5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHgoMSksYigibmdJZiIsaS5kYXRhJiZpLmRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSx3cCxpTywkbixabix2byxVUCx2dix5dl0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJ0YWcgY29udHJvbHMiICJydW4gc3Bpbm5lciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweDtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjB9LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpydW47ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2dyaWQtYXJlYTpjb250cm9scztqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpzcGlubmVyO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9bWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3RvcDowO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9dGItaGlzdG9ncmFtW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxvY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5tb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpfWlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLkhJU1RPR1JBTVN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKG89PiEhbyYmdGhpcy5pc0hpc3RvZ3JhbUNhcmRNZXRhZGF0YShvKSksQihvPT5vKSkscj1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKTt0aGlzLmRhdGEkPXIucGlwZShCKChbbyxzXSk9PntsZXQgYT1vLnJ1bklkO3JldHVybiBzJiZzLmhhc093blByb3BlcnR5KGEpP2Z1bmN0aW9uKG4sdD0zMCl7aWYoIW4ubGVuZ3RofHx0PDEpcmV0dXJuW107bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bnVsbCxlPW51bGw7Zm9yKGxldHtiaW5zOml9b2Ygbil7aWYoIWkubGVuZ3RoKWNvbnRpbnVlO2xldCByPWlbaS5sZW5ndGgtMV0sbz1pWzBdLngscz1yLngrci5keDsobnVsbD09PXR8fG88dCkmJih0PW8pLChudWxsPT09ZXx8cz5lKSYmKGU9cyl9cmV0dXJuIG51bGw9PT10fHxudWxsPT09ZT9udWxsOntsZWZ0OnQscmlnaHQ6ZX19KG4pO3JldHVybiBlJiZlLmxlZnQ9PT1lLnJpZ2h0JiYoZS5yaWdodD0xLjEqZS5yaWdodCsxLGUubGVmdD1lLmxlZnQvMS4xLTEpLG4ubWFwKGk9Pih7c3RlcDppLnN0ZXAsd2FsbFRpbWU6aS53YWxsVGltZSxiaW5zOmU/ekdlKGkuYmlucyxlLHQpOltdfSkpfShzW2FdLm1hcCh1PT57bGV0e3dhbGxUaW1lOmQsc3RlcDpwfT11O3JldHVybnt3YWxsVGltZTpkLHN0ZXA6cCxiaW5zOnUuYmlucy5tYXAoZj0+KHt4OmYubWluLGR4OmYubWF4LWYubWluLHk6Zi5jb3VudH0pKX19KSk6W119KSksdGhpcy5zdGVwcyQ9dGhpcy5kYXRhJC5waXBlKEIobz0+by5tYXAocz0+cy5zdGVwKSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0ZXBzJCx0aGlzLnN0b3JlLnNlbGVjdChIcCldKS5waXBlKEIoKFtvLHMsYV0pPT57aWYoIW8pcmV0dXJuIG51bGw7bGV0IGw9MS8wLGM9LTEvMDtmb3IobGV0IHAgb2YgcylsPU1hdGgubWluKHAsbCksYz1NYXRoLm1heChwLGMpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKG51bGwhPT1uLmVuZFN0ZXApcmV0dXJuIG47bGV0IGU9ZnVuY3Rpb24obix0KXtsZXQgZT0xLzAsaT1udWxsO2ZvcihsZXQgciBvZiB0KXtsZXQgbz1NYXRoLmFicyhuLXIpO288ZSYmKGU9byxpPXIpfXJldHVybiBpfShuLnN0YXJ0U3RlcCx0KTtyZXR1cm4gbnVsbCE9PWU/ey4uLm4sc3RhcnRTdGVwOmV9Om59KGNfKGxWKG8sYSksbCxjKSxzKX0pKSx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kXSkucGlwZShCKChbbyxzXSk9Pm8mJnMmJiFzLmNsaXBwZWQmJm51bGw9PT1vLmVuZCYmby5zdGFydC5zdGVwIT09cy5zdGFydFN0ZXApKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihvPT5vLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobz0+Z3Yobyx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihvPT5vLnJ1bklkKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQnAsdGhpcy5jYXJkSWQpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChvaChlKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goc2goe2FmZm9yZGFuY2U6V2EuRk9CX0RFU0VMRUNUfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGlzdG9ncmFtLWNhcmQiXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjEyLHZhcnM6MzQsY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsImRhdGEiLCJtb2RlIiwieEF4aXNUeXBlIiwicnVuQ29sb3JTY2FsZSIsInNob3dGdWxsV2lkdGgiLCJpc1Bpbm5lZCIsImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJvbkZ1bGxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCIsMCksUCgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25MaW5rZWRUaW1lVG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxMixpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwxNCxpLnRpdGxlJCkpKCJ0YWciLFcoMywxNixpLnRhZyQpKSgicnVuSWQiLFcoNCwxOCxpLnJ1bklkJCkpKCJkYXRhIixXKDUsMjAsaS5kYXRhJCkpKCJtb2RlIixXKDYsMjIsaS5tb2RlJCkpKCJ4QXhpc1R5cGUiLFcoNywyNCxpLnhBeGlzVHlwZSQpKSgicnVuQ29sb3JTY2FsZSIsaS5ydW5Db2xvclNjYWxlKSgic2hvd0Z1bGxXaWR0aCIsVyg4LDI2LGkuc2hvd0Z1bGxXaWR0aCQpKSgiaXNQaW5uZWQiLFcoOSwyOCxpLmlzUGlubmVkJCkpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLFcoMTAsMzAsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTEsMzIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpfSxkZXBlbmRlbmNpZXM6W3JjZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImltYWdlLWNhcmQiLDYpLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uUGluU3RhdGVDaGFuZ2VkKCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLGUucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIHk2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNjYWxhci1jYXJkIiw3KSxQKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMikub25QaW5TdGF0ZUNoYW5nZWQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19ZnVuY3Rpb24gYjZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaGlzdG9ncmFtLWNhcmQiLDgpLFAoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiB4NmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxxZSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLGUuY2FyZElkLCIiKX19ZnVuY3Rpb24gQzZlKG4sdCl7aWYoMSZuJiYoS3QoMCwxKSxFKDEsdjZlLDEsMywiaW1hZ2UtY2FyZCIsMiksRSgyLHk2ZSwxLDIsInNjYWxhci1jYXJkIiwzKSxFKDMsYjZlLDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLEUoNCx4NmUsMiwxLCJkaXYiLDUpLFp0KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpblR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSU1BR0VTKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLlNDQUxBUlMpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fXZhciBzY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgR31vbkZ1bGxXaWR0aENoYW5nZWQoZSl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlKXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQoZSl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0V2ZXJWaXNpYmxlOiJpc0V2ZXJWaXNpYmxlIixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAsQzZlLDUsNCwibmctY29udGFpbmVyIiwwKSwyJmUmJmIoIm5nSWYiLGkuaXNFdmVyVmlzaWJsZSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsQ3AsS25lLGVjZSxvY2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGFjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzRXZlclZpc2libGU9ITEsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEcsdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdCh2XykucGlwZShiZygzNTAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSksQihpPT5yPT5pLmhhc093blByb3BlcnR5KHIpP2lbcl06IiNmZmYiKSl9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzRXZlclZpc2libGU9dGhpcy5pc0V2ZXJWaXNpYmxlfHxlfW9uRnVsbFdpZHRoQ2hhbmdlZChlKXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdChlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdChlKX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKS5waXBlKEh0KDEpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGNaKSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkdih7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6aSx3YXNQaW5uZWQ6ZX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRnVsbFdpZHRoQ2hhbmdlZChvKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsSGVpZ2h0Q2hhbmdlZChvKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiaXNFdmVyVmlzaWJsZSIsaS5pc0V2ZXJWaXNpYmxlKSgiY2FyZElkIixpLmNhcmRJZCkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIixpLnBsdWdpblR5cGUpKCJydW5Db2xvclNjYWxlIixXKDEsNSxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbbXYsc2NlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gRTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgVDZlPWZ1bmN0aW9uKG4sdCl7cmV0dXJueyJmdWxsLXdpZHRoIjpuLCJmdWxsLWhlaWdodCI6dH19O2Z1bmN0aW9uIEQ2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNSkoMSwiY2FyZC12aWV3Iiw2KSxQKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocy5jYXJkSWQscikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixUNmUsaS5jYXJkc0F0RnVsbFdpZHRoLmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0uZnVsbFdpZHRoKSxpLmNhcmRzQXRGdWxsSGVpZ2h0LmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0udGFibGVFeHBhbmRlZCkpKSx4KDEpLGIoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGkuZ3JvdXBOYW1lKSgicGx1Z2luVHlwZSIsZS5wbHVnaW4pKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZExhenlMb2FkZXIiLGUuY2FyZElkKX19ZnVuY3Rpb24gQTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgSTZlPWZ1bmN0aW9uKCl7cmV0dXJue2lzQm90dG9tQ29udHJvbDohMX19LFA2ZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITB9fTtmdW5jdGlvbiBSNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEUoMSxFNmUsMSwwLCJuZy1jb250YWluZXIiLDIpLGcoMiwiZGl2IiwzKSxFKDMsRDZlLDIsOSwiZGl2Iiw0KSx2KCksRSg0LEE2ZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDIpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCg4LEk2ZSkpLHgoMSksT3QoImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsZS5ncmlkVGVtcGxhdGVDb2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlDYXJkcykseCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDksUDZlKSl9fWZ1bmN0aW9uIE82ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMTIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDMpO3JldHVybiBvZShvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgtMSxyLnRhcmdldCkpfSksRCgxLCIgUHJldmlvdXMgIiksdigpfTImbiYmYigiZGlzYWJsZWQiLDA9PT1NKDMpLnBhZ2VJbmRleCl9ZnVuY3Rpb24gazZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwic3BhbiIsMTUpKDEsImlucHV0IiwxNiksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pLHYoKSxEKDIpLHYoKX1pZigyJm4pe2xldCBlPU0oNCk7eCgxKSxiKCJ2YWx1ZSIsZS5wYWdlSW5kZXgrMSkoIm1heCIsZS5udW1QYWdlcykseCgxKSxxZSgiIG9mICIsZS5udW1QYWdlcywiIil9fWZ1bmN0aW9uIEY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iKSxFKDEsazZlLDMsMywic3BhbiIsMTMpLGcoMiwiYnV0dG9uIiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMyk7cmV0dXJuIG9lKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleCsxLHIudGFyZ2V0KSl9KSxEKDMsIiBOZXh0ICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pc0JvdHRvbUNvbnRyb2wsaT1NKCk7eCgxKSxiKCJuZ0lmIixpLnNob3dQYWdpbmF0aW9uSW5wdXQoZSkpLHgoMSksYigiZGlzYWJsZWQiLGkucGFnZUluZGV4KzE+PWkubnVtUGFnZXMpfX1mdW5jdGlvbiBONmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsOCkoMSwic3BhbiIsOSksRSgyLE82ZSwyLDEsImJ1dHRvbiIsMTApLHYoKSxnKDMsInNwYW4iLDExKSxFKDQsRjZlLDQsMiwic3BhbiIsMCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scykseCgyKSxiKCJuZ0lmIixlLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfX1mdW5jdGlvbiBMNmUobix0KXsxJm4mJkUoMCxONmUsNSwyLCJkaXYiLDcpLDImbiYmYigibmdJZiIsTSgpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfXZhciBsY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNka1Njcm9sbGFibGU9ZSx0aGlzLlBsdWdpblR5cGU9V24sdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiIsdGhpcy5jYXJkc0F0RnVsbFdpZHRoPW5ldyBTZXQsdGhpcy5jYXJkc0F0RnVsbEhlaWdodD1uZXcgU2V0LHRoaXMucGFnZUluZGV4Q2hhbmdlZD1uZXcgR31uZ09uSW5pdCgpe3RoaXMuaXNDYXJkV2lkdGhWYWxpZCh0aGlzLmNhcmRNaW5XaWR0aCkmJih0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5jYXJkTWluV2lkdGgpe2xldCBpPWUuY2FyZE1pbldpZHRoLmN1cnJlbnRWYWx1ZTt0aGlzLmlzQ2FyZFdpZHRoVmFsaWQoaSk/KHRoaXMuY2FyZE1pbldpZHRoPWksdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49YHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgke3RoaXMuY2FyZE1pbldpZHRofXB4LCAxZnIpKWApOnRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPSIifX1pc0NhcmRXaWR0aFZhbGlkKGUpe3JldHVybiBlJiZlPj0zMzUmJmU8PTczNX1zaG93UGFnaW5hdGlvbklucHV0KGUpe3JldHVybiBlfWhhbmRsZVBhZ2VDaGFuZ2UoZSxpKXtsZXQgcj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtzZXRUaW1lb3V0KCgpPT57dGhpcy5zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihpLHIpfSwwKSx0aGlzLnBhZ2VJbmRleENoYW5nZWQuZW1pdChlKX1zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihlLGkpe2xldCByPXRoaXMuY2RrU2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ciYmci5zY3JvbGxUbygwLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWkrci5zY3JvbGxUb3ApfXRyYWNrQnlDYXJkcyhlLGkpe3JldHVybiBpLmNhcmRJZH1vblBhZ2luYXRpb25JbnB1dENoYW5nZShlKXtsZXQgaT1lLnRhcmdldDtpZigiaW5wdXQiPT09ZS50eXBlJiYiIj09PWkudmFsdWUpcmV0dXJuO2xldCByPU51bWJlcihpLnZhbHVlKS0xLG89TWF0aC5taW4oTWF0aC5tYXgoMCxyKSx0aGlzLm51bVBhZ2VzLTEpO2kudmFsdWUhPT1TdHJpbmcobysxKSYmKGkudmFsdWU9U3RyaW5nKG8rMSkpLHRoaXMuaGFuZGxlUGFnZUNoYW5nZShvLGkpfW9uRnVsbFdpZHRoQ2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbFdpZHRoLmFkZChlKTp0aGlzLmNhcmRzQXRGdWxsV2lkdGguZGVsZXRlKGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSxpKXtpP3RoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuZGVsZXRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFlwLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiXV0saW5wdXRzOntpc0dyb3VwRXhwYW5kZWQ6ImlzR3JvdXBFeHBhbmRlZCIscGFnZUluZGV4OiJwYWdlSW5kZXgiLG51bVBhZ2VzOiJudW1QYWdlcyIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixzaG93UGFnaW5hdGlvbkNvbnRyb2xzOiJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixjYXJkU3RhdGVNYXA6ImNhcmRTdGF0ZU1hcCJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjMsdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdJZiJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWyJjbGFzcyIsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLXNwYWNlIiwzLCJuZ0NsYXNzIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInByZXYiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFI2ZSw1LDEwLCJkaXYiLDApLEUoMSxMNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGVuKSksMiZlJiZiKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCl9LGRlcGVuZGVuY2llczpbSW5lLGFjZSxQbix5bixYZSxObywkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOmNvbnRlbnR9LmNhcmQtZ3JpZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzM1cHgsIDFmcikpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH0uY2FyZC1zcGFjZS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWNvbHVtbi1zdGFydDoxO2dyaWQtY29sdW1uLWVuZDotMX0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo0ODBweH0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfWNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250YWluOmxheW91dCBwYWludDtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MzIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpjZW50ZXI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0fS5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNjE2MTYxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmdyb3VwTmFtZSQ9bmV3IFZyKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgVnIoMCksdGhpcy5pdGVtcyQ9bmV3IFZyKFtdKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMuY2FyZFN0YXRlTWFwJD10aGlzLnN0b3JlLnNlbGVjdChtYyksdGhpcy5udW1QYWdlcyQ9cG4oW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KGFhLmdldFBhZ2VTaXplKV0pLnBpcGUoQigoW2kscl0pPT5NYXRoLmNlaWwoaS5sZW5ndGgvcikpKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9dGhpcy5ncm91cE5hbWUkLnBpcGUodmkoaT0+bnVsbCE9PWk/dGhpcy5zdG9yZS5zZWxlY3QoaUEsaSk6anQoITApKSksdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJD10aGlzLm51bVBhZ2VzJC5waXBlKEIoaT0+aT4xKSksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JD1wbihbdGhpcy5wYWdlSW5kZXgkLHRoaXMubnVtUGFnZXMkXSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbaSxyXSk9PnswIT09ciYmKGk+PXI/dGhpcy5wYWdlSW5kZXgkLm5leHQoci0xKTppPDAmJnRoaXMucGFnZUluZGV4JC5uZXh0KDApKX0pLEIoKFtpLHJdKT0+TWF0aC5taW4oTWF0aC5tYXgoaSwwKSxyLTEpKSxRcygxKSksdGhpcy5wYWdlZEl0ZW1zJD1wbihbdGhpcy5pdGVtcyQsdGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0UGFnZVNpemUpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQsdGhpcy5pc0dyb3VwRXhwYW5kZWQkXSkucGlwZShCKChbaSxyLG8sc10pPT5pLnNsaWNlKHIqbyxyKm8rKHM/cjowKSkpKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoaF8pfW5nT25DaGFuZ2VzKGUpe2UuY2FyZElkc1dpdGhNZXRhZGF0YSYmdGhpcy5pdGVtcyQubmV4dCh0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEpLGUuZ3JvdXBOYW1lJiZ0aGlzLmdyb3VwTmFtZSQubmV4dCh0aGlzLmdyb3VwTmFtZSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW9uUGFnZUluZGV4Q2hhbmdlZChlKXt0aGlzLnBhZ2VJbmRleCQubmV4dChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkIl1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZmVhdHVyZXM6W3p0XSxkZWNsczo4LHZhcnM6MjIsY29uc3RzOltbMywiaXNHcm91cEV4cGFuZGVkIiwicGFnZUluZGV4IiwibnVtUGFnZXMiLCJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRNaW5XaWR0aCIsImNhcmRPYnNlcnZlciIsImNhcmRTdGF0ZU1hcCIsInBhZ2VJbmRleENoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCIsMCksUCgicGFnZUluZGV4Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlSW5kZXhDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLHYoKSksMiZlJiZiKCJpc0dyb3VwRXhwYW5kZWQiLFcoMSw4LGkuaXNHcm91cEV4cGFuZGVkJCkpKCJwYWdlSW5kZXgiLFcoMiwxMCxpLm5vcm1hbGl6ZWRQYWdlSW5kZXgkKSkoIm51bVBhZ2VzIixXKDMsMTIsaS5udW1QYWdlcyQpKSgic2hvd1BhZ2luYXRpb25Db250cm9scyIsVyg0LDE0LGkuc2hvd1BhZ2luYXRpb25Db250cm9scyQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVyg1LDE2LGkucGFnZWRJdGVtcyQpKSgiY2FyZE1pbldpZHRoIixXKDYsMTgsaS5jYXJkTWluV2lkdGgkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJjYXJkU3RhdGVNYXAiLFcoNywyMCxpLmNhcmRTdGF0ZU1hcCQpKX0sZGVwZW5kZW5jaWVzOltsY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFU2ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNyksRCgxKSxqKDIsIm51bWJlciIpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIixXKDIsMSxlLm51bWJlck9mQ2FyZHMpLCIgY2FyZHMiKX19ZnVuY3Rpb24gejZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBqNmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDkpfXZhciBjY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhci1jb21wb25lbnQiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyIsaXNHcm91cEV4cGFuZGVkOiJpc0dyb3VwRXhwYW5kZWQifSxvdXRwdXRzOntncm91cEV4cGFuc2lvblRvZ2dsZWQ6Imdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJ9LGRlY2xzOjksdmFyczo1LGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBhbGxvd3MgdXNlciB0byBleHBhbmQgYSB0YWcgZ3JvdXAu4pCfZmZhYTExNDcxYjg3OGE2ZGZmZTJlNjhjNmYzNzA2NGE5ZTA3NDg1M+KQnzUzODYwNTQzMjUyNzQ3NzkyNTg6RXhwYW5kIGdyb3VwYCxbWyJhcmlhLWxhYmVsIix0LDEsImdyb3VwLXRvb2xiYXIiLDMsImNsaWNrIl0sWzEsImdyb3VwLXRpdGxlLXdyYXBwZXIiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiLDMsInRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbMSwiZXhwYW5kLWdyb3VwLWljb24iXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImV4cGFuZE1vcmUiLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsic3ZnSWNvbiIsImV4cGFuZF9sZXNzXzI0cHgiXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiYnV0dG9uIiwwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5ncm91cEV4cGFuc2lvblRvZ2dsZWQuZW1pdCgpfSksZygxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxEKDMpLHYoKSxFKDQsVTZlLDMsMywic3BhbiIsMyksdigpLGcoNSwic3BhbiIsNCksRSg2LHo2ZSwxLDAsIm1hdC1pY29uIiw1KSxFKDcsajZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSx4cigidGl0bGUiLGkuZ3JvdXBOYW1lKSx4KDEpLHl0KGkuZ3JvdXBOYW1lKSx4KDEpLGIoIm5nSWYiLGkubnVtYmVyT2ZDYXJkcz4xKSx4KDIpLGIoIm5nSWYiLGkuaXNHcm91cEV4cGFuZGVkKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSxabix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7Y29sb3I6IzIxMjEyMTt0b3A6LTFweDtkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtmb250OmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNhcmQtZ3JvdXA6Zmlyc3Qtb2YtdHlwZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDowfVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNzU3NTc1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX0uZ3JvdXAtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7dGV4dC1hbGlnbjpsZWZ0fS5ncm91cC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYxNjE2MTttYXJnaW4tbGVmdDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1Y2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9anQoITEpfW5nT25Jbml0KCl7dGhpcy5pc0dyb3VwRXhwYW5kZWQkPW51bGwhPT10aGlzLmdyb3VwTmFtZT90aGlzLnN0b3JlLnNlbGVjdChpQSx0aGlzLmdyb3VwTmFtZSk6anQoITEpfW9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl7aWYobnVsbD09PXRoaXMuZ3JvdXBOYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IGV4cGFuc2lvbiBjYW5ub3QgYmUgdG9nZ2xlZCB3aGVuIGdyb3VwTmFtZSBpcyBudWxsIik7dGhpcy5zdG9yZS5kaXNwYXRjaChUUCh7dGFnR3JvdXA6dGhpcy5ncm91cE5hbWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixudW1iZXJPZkNhcmRzOiJudW1iZXJPZkNhcmRzIn0sZGVjbHM6Mix2YXJzOjUsY29uc3RzOltbMywibnVtYmVyT2ZDYXJkcyIsImlzR3JvdXBFeHBhbmRlZCIsImdyb3VwTmFtZSIsImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50IiwwKSxQKCJncm91cEV4cGFuc2lvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEV4cGFuc2lvblRvZ2dsZWQoKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigibnVtYmVyT2ZDYXJkcyIsaS5udW1iZXJPZkNhcmRzKSgiaXNHcm91cEV4cGFuZGVkIixXKDEsMyxpLmlzR3JvdXBFeHBhbmRlZCQpKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSl9LGRlcGVuZGVuY2llczpbY2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBxNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMSksTigxLCJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciIsMikoMiwibWV0cmljcy1jYXJkLWdyaWQiLDMpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoIm51bWJlck9mQ2FyZHMiLGUuaXRlbXMubGVuZ3RoKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkseCgxKSxiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixlLml0ZW1zKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX12YXIgZGNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9V259dHJhY2tCeUdyb3VwKGUsaSl7cmV0dXJuIGkuZ3JvdXBOYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRHcm91cHM6ImNhcmRHcm91cHMiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6MSx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiY2FyZC1ncm91cCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNhcmQtZ3JvdXAiXSxbMywibnVtYmVyT2ZDYXJkcyIsImdyb3VwTmFtZSJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIiwiZ3JvdXBOYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAscTZlLDMsNSwiZGl2IiwwKSwyJmUmJmIoIm5nRm9yT2YiLGkuY2FyZEdyb3VwcykoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5R3JvdXApfSxkZXBlbmRlbmNpZXM6W3luLFB5LHVjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRHcm91cHMkPXRoaXMuc3RvcmUuc2VsZWN0KHltKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxCKGk9PmtQKGkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzIl1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJjYXJkR3JvdXBzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImNhcmRHcm91cHMiLFcoMSwyLGkuY2FyZEdyb3VwcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbZGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBRNmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIGFuZCAiLGUuZ2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlLnBsdWdpblR5cGVzKSwiIHZpc3VhbGl6YXRpb24gZmlsdGVyIil9fXZhciBoY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmxpc3RGb3JtYXR0ZXI9bmV3IEludGwuTGlzdEZvcm1hdCh2b2lkIDAse3N0eWxlOiJsb25nIix0eXBlOiJkaXNqdW5jdGlvbiJ9KX1nZXRQbHVnaW5UeXBlRmlsdGVyU3RyaW5nKGUpe2xldCBpPVsuLi5lXS5tYXAocj0+e3N3aXRjaChyKXtjYXNlIFduLlNDQUxBUlM6cmV0dXJuInNjYWxhciI7Y2FzZSBXbi5JTUFHRVM6cmV0dXJuImltYWdlIjtjYXNlIFduLkhJU1RPR1JBTVM6cmV0dXJuImhpc3RvZ3JhbSI7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUGxlYXNlIGltcGxlbWVudCBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBwbHVnaW4gdHlwZTogJHtyfWApfX0pO3JldHVybiB0aGlzLmxpc3RGb3JtYXR0ZXIuZm9ybWF0KGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiXV0saW5wdXRzOntwbHVnaW5UeXBlczoicGx1Z2luVHlwZXMiLHRhZ0ZpbHRlclJlZ2V4OiJ0YWdGaWx0ZXJSZWdleCIsdGFnQ291bnRzOiJ0YWdDb3VudHMifSxkZWNsczo2LHZhcnM6NSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRCgwLCJObyBtYXRjaGVzIGZvciB0YWcgZmlsdGVyICIpLGcoMSwiY29kZSIpLEQoMiksdigpLEUoMyxRNmUsMiwxLCJzcGFuIiwwKSxEKDQpLGooNSwibnVtYmVyIikpLDImZSYmKHgoMikscWUoIi8iLGkudGFnRmlsdGVyUmVnZXgsIi8iKSx4KDEpLGIoIm5nSWYiLGkucGx1Z2luVHlwZXMuc2l6ZSkseCgxKSxxZSgiIG91dCBvZiAiLFcoNSwzLGkudGFnQ291bnRzKSwiIHRhZ3MuIikpfSxkZXBlbmRlbmNpZXM6W1hlLHZsXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5wbHVnaW5UeXBlcyQ9dGhpcy5zdG9yZS5zZWxlY3QoeHUpLHRoaXMudGFnRmlsdGVyUmVnZXgkPXRoaXMuc3RvcmUuc2VsZWN0KF9jKSx0aGlzLnRhZ0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoQihpPT5uZXcgU2V0KGkubWFwKCh7dGFnOnJ9KT0+cikpLnNpemUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInBsdWdpblR5cGVzIiwidGFnRmlsdGVyUmVnZXgiLCJ0YWdDb3VudHMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigicGx1Z2luVHlwZXMiLFcoMSwzLGkucGx1Z2luVHlwZXMkKSkoInRhZ0ZpbHRlclJlZ2V4IixXKDIsNSxpLnRhZ0ZpbHRlclJlZ2V4JCkpKCJ0YWdDb3VudHMiLFcoMyw3LGkudGFnQ291bnRzJCkpfSxkZXBlbmRlbmNpZXM6W2hjZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gSjZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiw2KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLFcoMiwxLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpLCIgY2FyZHMiKX19ZnVuY3Rpb24gJDZlKG4sdCl7MSZuJiZOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIiw3KX12YXIgbWNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0VtcHR5TWF0Y2g6ImlzRW1wdHlNYXRjaCIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEifSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJncm91cC10b29sYmFyIl0sWzEsImdyb3VwLXRleHQiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiXSxbImNsYXNzIiwiZ3JvdXAtY2FyZC1jb3VudCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ3YXJuIiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsxLCJ3YXJuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEpKDIsInNwYW4iLDIpLEQoMywiVGFncyBtYXRjaGluZyBmaWx0ZXIiKSx2KCksRSg0LEo2ZSwzLDMsInNwYW4iLDMpLHYoKSgpLEUoNSwkNmUsMSwwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNCksTig2LCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSkpLDImZSYmKHgoNCksYigibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSx4KDEpLGIoIm5nSWYiLGkuaXNFbXB0eU1hdGNoKSx4KDEpLGIoImNhcmRJZHNXaXRoTWV0YWRhdGEiLGkuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKX0sZGVwZW5kZW5jaWVzOltYZSxQeSxmY2UsdmxdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfW1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWV0cmljcy1lbXB0eS10YWctbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeHUpKSxCKChbaSxyXSk9PnIuc2l6ZT9pLmZpbHRlcihvPT5yLmhhcyhvLnBsdWdpbikpOmkpLHNyKHRoaXMuc3RvcmUuc2VsZWN0KF9jKSksQXIoMjAwKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJue2NhcmRMaXN0OmkscmVnZXg6bmV3IFJlZ0V4cChyLCJpIil9fWNhdGNoe3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om51bGx9fX0pLEhlKCh7cmVnZXg6aX0pPT5udWxsIT09aSksQigoe2NhcmRMaXN0OmkscmVnZXg6cn0pPT5pLmZpbHRlcigoe3RhZzpvfSk9PnIudGVzdChvKSkpLGRpKChpLHIpPT5pLmxlbmd0aD09PXIubGVuZ3RoJiZpLmV2ZXJ5KChvLHMpPT5vLmNhcmRJZD09PXJbc10uY2FyZElkKSksWHMoKSxWbihbXSkpLHRoaXMuaXNFbXB0eU1hdGNoJD10aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeW0pKSxCKChbaSxyXSk9PkJvb2xlYW4oci5sZW5ndGgpJiYwPT09aS5sZW5ndGgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiaXNFbXB0eU1hdGNoIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJpc0VtcHR5TWF0Y2giLFcoMSwzLGkuaXNFbXB0eU1hdGNoJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDIsNSxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W21jZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaVdlPVsicGFuZWwiXTtmdW5jdGlvbiByV2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMCwxKSxObigyKSx2KCkpLDImbil7bGV0IGU9dC5pZCxpPU0oKTtiKCJpZCIsaS5pZCkoIm5nQ2xhc3MiLGkuX2NsYXNzTGlzdCksemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGUpKX19dmFyIG9XZT1bIioiXSxzV2U9MCxhV2U9THMoY2xhc3N7fSksX2NlPW5ldyBzZSgibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMSxhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiExfX19KSxjV2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGFXZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5zaG93UGFuZWw9ITEsdGhpcy5faXNPcGVuPSExLHRoaXMuZGlzcGxheVdpdGg9bnVsbCx0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBHLHRoaXMub3BlbmVkPW5ldyBHLHRoaXMuY2xvc2VkPW5ldyBHLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBHLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrc1dlKyssdGhpcy5pbmVydEdyb3Vwcz1vPy5TQUZBUkl8fCExLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIXIuYXV0b0FjdGl2ZUZpcnN0T3B0aW9uLHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249ISFyLmF1dG9TZWxlY3RBY3RpdmVPcHRpb259Z2V0IGlzT3Blbigpe3JldHVybiB0aGlzLl9pc09wZW4mJnRoaXMuc2hvd1BhbmVsfWdldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9ufXNldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oZSl7dGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9uPVd0KGUpfWdldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb259c2V0IGF1dG9TZWxlY3RBY3RpdmVPcHRpb24oZSl7dGhpcy5fYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbj1XdChlKX1zZXQgY2xhc3NMaXN0KGUpe3RoaXMuX2NsYXNzTGlzdD1lJiZlLmxlbmd0aD9mdW5jdGlvbihuLHQ9L1xzKy8pe2xldCBlPVtdO2lmKG51bGwhPW4pe2xldCBpPUFycmF5LmlzQXJyYXkobik/bjpgJHtufWAuc3BsaXQodCk7Zm9yKGxldCByIG9mIGkpe2xldCBvPWAke3J9YC50cmltKCk7byYmZS5wdXNoKG8pfX1yZXR1cm4gZX0oZSkucmVkdWNlKChpLHIpPT4oaVtyXT0hMCxpKSx7fSk6e30sdGhpcy5fc2V0VmlzaWJpbGl0eUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IERfKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pc09wZW4mJnRoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdfHxudWxsfSl9KSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCl9X3NldFNjcm9sbFRvcChlKXt0aGlzLnBhbmVsJiYodGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD1lKX1fZ2V0U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMucGFuZWw/dGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDowfV9zZXRWaXNpYmlsaXR5KCl7dGhpcy5zaG93UGFuZWw9ISF0aGlzLm9wdGlvbnMubGVuZ3RoLHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2VtaXRTZWxlY3RFdmVudChlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9fSh0aGlzLGUpO3RoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChpKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShlKXtyZXR1cm4gdGhpcy5hcmlhTGFiZWw/bnVsbDp0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X3NldFZpc2liaWxpdHlDbGFzc2VzKGUpe2VbdGhpcy5fdmlzaWJsZUNsYXNzXT10aGlzLnNob3dQYW5lbCxlW3RoaXMuX2hpZGRlbkNsYXNzXT0hdGhpcy5zaG93UGFuZWx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoQWUpLHcoX2NlKSx3KHVpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoT2ksNyksbHQoaVdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnRlbXBsYXRlPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsYXV0b0FjdGl2ZUZpcnN0T3B0aW9uOiJhdXRvQWN0aXZlRmlyc3RPcHRpb24iLGF1dG9TZWxlY3RBY3RpdmVPcHRpb246ImF1dG9TZWxlY3RBY3RpdmVPcHRpb24iLHBhbmVsV2lkdGg6InBhbmVsV2lkdGgiLGNsYXNzTGlzdDpbImNsYXNzIiwiY2xhc3NMaXN0Il19LG91dHB1dHM6e29wdGlvblNlbGVjdGVkOiJvcHRpb25TZWxlY3RlZCIsb3BlbmVkOiJvcGVuZWQiLGNsb3NlZDoiY2xvc2VkIixvcHRpb25BY3RpdmF0ZWQ6Im9wdGlvbkFjdGl2YXRlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx2Y2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNXZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLEdDLDUpLE5pKHIsdWEsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLE5lKG89TGUoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOm9XZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1hdXRvY29tcGxldGUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxyV2UsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHljZT1uZXcgc2UoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksZFdlPXtwcm92aWRlOnljZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LHBXZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ZVMpLG11bHRpOiEwfSxoV2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PXUsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcgVGUsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9YmEoKCk9PntsZXQgaD10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGg/aC5jaGFuZ2VzLnBpcGUoVm4oaCksdmkoKCk9PnVuKC4uLmgubWFwKGY9PmYub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShIdCgxKSx2aSgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5lLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSl9bmdPbkNoYW5nZXMoZSl7ZS5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKX0pLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSExLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJih0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZHx8dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfWdldCBwYW5lbENsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIHVuKHRoaXMub3B0aW9uU2VsZWN0aW9ucyx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci50YWJPdXQucGlwZShIZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKEhlKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKTpqdCgpKS5waXBlKEIoZT0+ZSBpbnN0YW5jZW9mIHpDP2U6bnVsbCkpfWdldCBhY3RpdmVPcHRpb24oKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW06bnVsbH1fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCl7cmV0dXJuIHVuKGxpKHRoaXMuX2RvY3VtZW50LCJjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJhdXhjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJ0b3VjaGVuZCIpKS5waXBlKEhlKGU9PntsZXQgaT12YyhlKSxyPXRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsLG89dGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJmkhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJighcnx8IXIuY29udGFpbnMoaSkpJiYoIW98fCFvLmNvbnRhaW5zKGkpKSYmISF0aGlzLl9vdmVybGF5UmVmJiYhdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhpKX0pKX13cml0ZVZhbHVlKGUpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT50aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShlKSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPWV9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9TXIoZSk7aWYoMjc9PT1pJiYhciYmZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiYxMz09PWkmJnRoaXMucGFuZWxPcGVuJiYhcil0aGlzLmFjdGl2ZU9wdGlvbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih0aGlzLmF1dG9jb21wbGV0ZSl7bGV0IG89dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSxzPTM4PT09aXx8NDA9PT1pOzk9PT1pfHxzJiYhciYmdGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKGUpOnMmJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwoc3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW8pJiYodGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKSx0aGlzLmF1dG9jb21wbGV0ZS5hdXRvU2VsZWN0QWN0aXZlT3B0aW9uJiZ0aGlzLmFjdGl2ZU9wdGlvbiYmKHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb258fCh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb249dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPXRoaXMuYWN0aXZlT3B0aW9uLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlKSkpfX1faGFuZGxlSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQscj1pLnZhbHVlOyJudW1iZXIiPT09aS50eXBlJiYocj0iIj09cj9udWxsOnBhcnNlRmxvYXQocikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1yJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1yLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vbkNoYW5nZShyKSx0aGlzLl9jYW5PcGVuKCkmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lLnRhcmdldCYmdGhpcy5vcGVuUGFuZWwoKSl9X2hhbmRsZUZvY3VzKCl7dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzP3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCEwKSk6dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwfV9oYW5kbGVDbGljaygpe3RoaXMuX2Nhbk9wZW4oKSYmIXRoaXMucGFuZWxPcGVuJiZ0aGlzLm9wZW5QYW5lbCgpfV9mbG9hdExhYmVsKGU9ITEpe3RoaXMuX2Zvcm1GaWVsZCYmImF1dG8iPT09dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWwmJihlP3RoaXMuX2Zvcm1GaWVsZC5fYW5pbWF0ZUFuZExvY2tMYWJlbCgpOnRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMCl9X3Jlc2V0TGFiZWwoKXt0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWwmJih0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYXV0byIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiB1bih0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKE50KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSksbmwoMCkpKS5waXBlKHZpKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSxIdCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGhzKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgcyxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07cz0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKHMpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9V0MoZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBzPW8uX2dldEhvc3RFbGVtZW50KCksYT1rQShzLm9mZnNldFRvcCxzLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3AoYSl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIU1yKGkpfHwzOD09PWkua2V5Q29kZSYmTXIoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoUWkpLHcoeWkpLHcocHQpLHcobm4pLHcoeWNlKSx3KGlyLDgpLHcodW0sOSksdyhCdCw4KSx3KGRhKSx3KF9jZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLGVTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoV2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1c2luIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uVG91Y2hlZCgpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSwyJmUmJnplKCJhdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5wYW5lbE9wZW4mJmkuYWN0aXZlT3B0aW9uP2kuYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6aS5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsaS5hdXRvY29tcGxldGVEaXNhYmxlZHx8IWkucGFuZWxPcGVufHxudWxsPT1pLmF1dG9jb21wbGV0ZT9udWxsOmkuYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0Ym94Iil9LGV4cG9ydEFzOlsibWF0QXV0b2NvbXBsZXRlVHJpZ2dlciJdLGZlYXR1cmVzOlskdChbcFdlXSksdHRdfSksbn0pKCksck89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbZFdlXSxpbXBvcnRzOltWbyxPXyxkbixrZSxTdSxPXyxkbl19KSxufSkoKSxvTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLnBsYWNlaG9sZGVyPSIifW9uSW5wdXRLZXlVcChlKXsiRW50ZXIiPT09ZS5rZXkmJnRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGVTLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuYXV0b2NvbXBsZXRlVHJpZ2dlcj1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixtYXRBdXRvY29tcGxldGU6Im1hdEF1dG9jb21wbGV0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsInBsYWNlaG9sZGVyIiwibWF0QXV0b2NvbXBsZXRlIiwibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJ2YWx1ZSIsImtleXVwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtYXQtaWNvbiIsMCksZygxLCJpbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXRLZXlVcChvKX0pLHYoKSksMiZlJiYoeCgxKSxiKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikoIm1hdEF1dG9jb21wbGV0ZSIsaS5tYXRBdXRvY29tcGxldGUpKCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsIWkubWF0QXV0b2NvbXBsZXRlKSgidmFsdWUiLGkudmFsdWUpKX0sZGVwZW5kZW5jaWVzOltlUyxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCk7ZnVuY3Rpb24gZldlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBtV2Uobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlKSx6ZSgidGl0bGUiLGUpLHgoMSkseXQoZSl9fWZ1bmN0aW9uIGdXZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSgxLCJlbSIpLEQoMiksaigzLCJudW1iZXIiKSx2KCkoKSksMiZuKXtsZXQgZT1NKCk7eCgyKSxxZSgiYW5kICIsVygzLDEsZS5jb21wbGV0aW9ucy5sZW5ndGgtMjUpLCIgbW9yZSB0YWdzIG1hdGNoZWQiKX19dmFyIENjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9b25Db21wbGV0aW9uQWNjZXB0ZWQoZSl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKFBEZSwiXFwkJiIpfShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJ2YWxpZCIsaS5pc1JlZ2V4RmlsdGVyVmFsaWQpfSxpbnB1dHM6e3JlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIixjb21wbGV0aW9uczoiY29tcGxldGlvbnMifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjcsdmFyczo1LGNvbnN0czpbWzEsInRhZy1maWx0ZXIiXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHRhZ3MgKHJlZ2V4KSIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJjbGFzcyIsImVycm9yLWljb24iLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbMSwidGFnLW9wdGlvbnMiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWyJjbGFzcyIsIm9wdGlvbiIsMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJhbmQtbW9yZSIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMSwib3B0aW9uIiwzLCJ2YWx1ZSJdLFsxLCJhbmQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChvLnRhcmdldC52YWx1ZSl9KSx2KCksRSgyLGZXZSwxLDAsIm1hdC1pY29uIiwyKSx2KCksZygzLCJtYXQtYXV0b2NvbXBsZXRlIiwzLDQpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbXBsZXRpb25BY2NlcHRlZChvLm9wdGlvbi52YWx1ZSl9KSxFKDUsbVdlLDIsMywibWF0LW9wdGlvbiIsNSksRSg2LGdXZSw0LDMsImRpdiIsNiksdigpKSwyJmUpe2xldCByPXN0KDQpO3goMSksYigidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIscikseCgxKSxiKCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLHgoMyksYigibmdGb3JPZiIsbnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLHgoMSksYigibmdJZiIsKG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLmxlbmd0aCk+MjUpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxvTyx2Y2UsdWEsWm4sdmxdLHN0eWxlczpbIi50YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9dGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX1bX25naG9zdC0lQ09NUCVde2NvbG9yOiMyMTIxMjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICAuZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2M2MjgyODtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfSAgLnRhZy1vcHRpb25zIC5vcHRpb24sICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjM7ZGlzcGxheTotd2Via2l0LWJveDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzo4cHggMTZweH0gIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHdjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShCKGk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoaSksITB9Y2F0Y2h7cmV0dXJuITF9fSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpEKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5pLmZpbHRlcigoe3BsdWdpbjpvfSk9PiFyLnNpemV8fHIuaGFzKG8pKS5tYXAoKHt0YWc6b30pPT5vKSksQihpPT5bLi4ubmV3IFNldChpKV0pLEIoaT0+aS5zb3J0KGJ3KSksc3IodGhpcy5zdG9yZS5zZWxlY3QoX2MpKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJuW2ksbmV3IFJlZ0V4cChyLCJpIildfWNhdGNoe3JldHVybltpLG51bGxdfX0pLEhlKChbLGldKT0+bnVsbCE9PWkpLEIoKFtpLHJdKT0+aS5maWx0ZXIobz0+ci50ZXN0KG8pKSkpfW9uVGFnRmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRVAoe3RhZ0ZpbHRlcjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJjb21wbGV0aW9ucyIsIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCIsMCksUCgib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRhZ0ZpbHRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWdleEZpbHRlclZhbHVlIixXKDEsMyxpLnRhZ0ZpbHRlciQpKSgiaXNSZWdleEZpbHRlclZhbGlkIixXKDIsNSxpLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQpKSgiY29tcGxldGlvbnMiLFcoMyw3LGkuY29tcGxldGlvbnMkKSl9LGRlcGVuZGVuY2llczpbQ2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB5V2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgsIiBjYXJkcyIpfX1mdW5jdGlvbiBiV2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDkpLEQoMSwiTmV3IGNhcmQgcGlubmVkIiksdigpKSwyJm4mJnplKCJkYXRhLWlkIix0LiRpbXBsaWNpdCl9ZnVuY3Rpb24geFdlKG4sdCl7aWYoMSZuJiZOKDAsIm1ldHJpY3MtY2FyZC1ncmlkIiwxMCksMiZuKXtsZXQgZT1NKCk7YigiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixlLmNhcmRPYnNlcnZlcil9fWZ1bmN0aW9uIENXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxMSksRCgxLCJQaW4gY2FyZHMgZm9yIGEgcXVpY2sgdmlldyBhbmQgY29tcGFyaXNvbiIpLHYoKSl9dmFyIE1jZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixuZXdDYXJkUGlubmVkSWRzOiJuZXdDYXJkUGlubmVkSWRzIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbInN2Z0ljb24iLCJrZWVwXzI0cHgiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5ldy1jYXJkLXBpbm5lZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZW1wdHlQaW5uZWRWaWV3IiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwibmV3LWNhcmQtcGlubmVkIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZW1wdHktbWVzc2FnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSxOKDEsIm1hdC1pY29uIiwxKSxnKDIsInNwYW4iLDIpKDMsInNwYW4iLDMpLEQoNCwiUGlubmVkIiksdigpLEUoNSx5V2UsMiwxLCJzcGFuIiw0KSxFKDYsYldlLDIsMSwic3BhbiIsNSksdigpKCksRSg3LHhXZSwxLDIsIm1ldHJpY3MtY2FyZC1ncmlkIiw2KSxFKDgsQ1dlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNyxlbikpLDImZSl7bGV0IHI9c3QoOSk7eCg1KSxiKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLHgoMSksYigibmdGb3JPZiIsaS5uZXdDYXJkUGlubmVkSWRzKSx4KDEpLGIoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLFpuLFB5XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Z2FwOjZweH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5uZXctY2FyZC1waW5uZWRbX25nY29udGVudC0lQ09NUCVde2FuaW1hdGlvbjpwaW5uZWQtdmlldy1mYWRlLW91dCAzcyBsaW5lYXI7YmFja2dyb3VuZDojZjQ0MzM2O2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTowO3BhZGRpbmc6M3B4IDVweH1Aa2V5ZnJhbWVzIHBpbm5lZC12aWV3LWZhZGUtb3V0e2Zyb217b3BhY2l0eToxfTY2JXtvcGFjaXR5Oi45OX10b3tvcGFjaXR5OjB9fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoRUMpLnBpcGUoVm4oW10pKSx0aGlzLm5ld0NhcmRQaW5uZWRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KEVDKS5waXBlKENhKDEpLEIoaT0+aS5tYXAocj0+ci5jYXJkSWQpKSx5ZygpLEIoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQoaSkscz1uZXcgU2V0KHIpO2ZvcihsZXQgYSBvZiBzKWlmKCFvLmhhcyhhKSlyZXR1cm4gRGF0ZS5ub3coKTtyZXR1cm4gbnVsbH0pLFZuKG51bGwpLHlnKCksQigoW2kscl0pPT5udWxsPT09aSYmbnVsbD09PXI/bnVsbDpudWxsPT09cj9baV06W3JdKSxIZShpPT5udWxsIT09aSksQihpPT5baVswXV0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJuZXdDYXJkUGlubmVkSWRzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDEsMyxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoIm5ld0NhcmRQaW5uZWRJZHMiLFcoMiw1LGkubmV3Q2FyZFBpbm5lZElkcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbTWNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBTV2Uobix0KXsxJm4mJk4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMyksMiZuJiZiKCJjYXJkT2JzZXJ2ZXIiLE0oKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIEVXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNyksTigxLCJtYXQtc3Bpbm5lciIsMTgpLHYoKSl9dmFyIFRXZT1mdW5jdGlvbihuKXtyZXR1cm57InNsaWRlLW91dC1tZW51LWV4cGFuZGVkIjpufX07ZnVuY3Rpb24gRFdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5KSxOKDEsIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiKSx2KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nQ2xhc3MiLEhuKDEsVFdlLGUuc2xpZGVPdXRNZW51T3BlbikpfX1mdW5jdGlvbiBBV2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIwKSgxLCJkaXYiLDIxKSgyLCJoMiIsMjIpLEQoMywiU2V0dGluZ3MiKSx2KCksZyg0LCJidXR0b24iLDIzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQuZW1pdCgpKX0pLE4oNSwibWF0LWljb24iLDI0KSx2KCkoKSxOKDYsIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiKSx2KCl9fXZhciBJV2U9ZnVuY3Rpb24obil7cmV0dXJue2NoZWNrZWQ6biwic2V0dGluZ3MtYnV0dG9uIjohMH19LFBXZT1uZXcgc2UoIkN1c3RvbWl6YWJsZSBTaGFyZSBCdXR0b24iKSxFY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuY3VzdG9tU2hhcmVCdXR0b249aSx0aGlzLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkPW5ldyBHLHRoaXMub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZD1uZXcgRyx0aGlzLm9uUGx1Z2luVHlwZVRvZ2dsZWQ9bmV3IEcsdGhpcy5vblBsdWdpblR5cGVBbGxUb2dnbGVkPW5ldyBHLHRoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeHcodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIjYwMHB4IDBweCA2MDBweCAwcHgiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQV2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e3Nob3dGaWx0ZXJlZFZpZXc6InNob3dGaWx0ZXJlZFZpZXciLGlzU2lkZXBhbmVPcGVuOiJpc1NpZGVwYW5lT3BlbiIsZmlsdGVyZWRQbHVnaW5UeXBlczoiZmlsdGVyZWRQbHVnaW5UeXBlcyIsaW5pdGlhbFRhZ3NMb2FkaW5nOiJpbml0aWFsVGFnc0xvYWRpbmciLHNsaWRlT3V0TWVudU9wZW46InNsaWRlT3V0TWVudU9wZW4ifSxvdXRwdXRzOntvblNldHRpbmdzQnV0dG9uQ2xpY2tlZDoib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ6Im9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLG9uUGx1Z2luVHlwZVRvZ2dsZWQ6Im9uUGx1Z2luVHlwZVRvZ2dsZWQiLG9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQ6Im9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQifSxkZWNsczoyNCx2YXJzOjIzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBvbiBhIHRvb2xiYXIgYnV0dG9uIHRvIHRvZ2dsZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQn2QzNTE2ZGI2YmJlNjg2MGE1NWJlYWI2NmU0OTY5ZGFjNjI1YjhkNzLikJ83NjU5Mjg1NDQ1NTgwODM4OTI1OlRvZ2dsZSBzZXR0aW5ncyBzaWRlIHBhbmVgLGU9JGxvY2FsaXplYDpMYWJlbCBvbiBhIGJ1dHRvbiB0byBjbG9zZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQnzA0NTIxZGMwYjZhNjVjZjVjMzgyOTQ0YzlhOGI0Yjg0NGEzZTk1OTjikJ84MTU2NzY2OTk3NzQ3MTY1ODcxOkNsb3NlIHNpZGUgcGFuZWAsW1sxLCJ0b29sYmFyIl0sWyJtdWx0aXBsZSIsIiIsImFwcGVhcmFuY2UiLCJzdGFuZGFyZCIsMSwiZmlsdGVyLXZpZXciXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiYWxsIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsInNjYWxhcnMiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaW1hZ2UiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaGlzdG9ncmFtIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWzMsImN1c3RvbWl6YWJsZUNvbXBvbmVudCJdLFsxLCJyaWdodC1pdGVtcyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il0sWzEsInNwbGl0LWNvbnRlbnQiXSxbImNka1Njcm9sbGFibGUiLCIiXSxbMywiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIl0sWzMsImNhcmRPYnNlcnZlciJdLFsiY2xhc3MiLCJsb2FkaW5nLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiw0LCJuZ0lmIl0sWzEsImxvYWRpbmctY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjM2Il0sWzEsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIl0sWzEsInNpZGViYXIiXSxbMSwiaGVhZGVyIl0sWzEsInRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksTigxLCJtZXRyaWNzLXRhZy1maWx0ZXIiKSxnKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSgzLCJidXR0b24iLDIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSksRCg0LCIgQWxsICIpLHYoKSxnKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5TQ0FMQVJTKX0pLEQoNiwiIFNjYWxhcnMgIiksdigpLGcoNywiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLklNQUdFUyl9KSxEKDgsIiBJbWFnZSAiKSx2KCksZyg5LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSxEKDEwLCIgSGlzdG9ncmFtICIpLHYoKSgpLE4oMTEsInRiLWN1c3RvbWl6YXRpb24iLDYpLGcoMTIsImRpdiIsNykoMTMsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSksTigxNCwibWF0LWljb24iLDkpLEQoMTUsIiBTZXR0aW5ncyAiKSx2KCkoKSgpLGcoMTYsImRpdiIsMTApKDE3LCJkaXYiLDExKSxFKDE4LFNXZSwxLDEsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsMTIpLE4oMTksIm1ldHJpY3MtcGlubmVkLXZpZXciLDEzKSxFKDIwLEVXZSwyLDAsImRpdiIsMTQpLE4oMjEsIm1ldHJpY3MtY2FyZC1ncm91cHMiLDEzKSx2KCksRSgyMixEV2UsMiwzLCJkaXYiLDE1KSxFKDIzLEFXZSw3LDAsImRpdiIsMTYpLHYoKSksMiZlJiYoeCgzKSx6ZSgiYXJpYS1jaGVja2VkIiwwPT09aS5maWx0ZXJlZFBsdWdpblR5cGVzLnNpemUpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuU0NBTEFSUykpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuSU1BR0VTKSkseCgyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKSkseCgyKSxiKCJjdXN0b21pemFibGVDb21wb25lbnQiLGkuY3VzdG9tU2hhcmVCdXR0b24pLHgoMiksYigibmdDbGFzcyIsSG4oMjEsSVdlLGkuaXNTaWRlcGFuZU9wZW4pKSx6ZSgiYXJpYS1wcmVzc2VkIixpLmlzU2lkZXBhbmVPcGVuKSx4KDQpLGF0KCJtYWluIiwhMCkoImZpbHRlci12aWV3IixpLnNob3dGaWx0ZXJlZFZpZXcpLHgoMSksYigibmdJZiIsaS5zaG93RmlsdGVyZWRWaWV3KSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaW5pdGlhbFRhZ3NMb2FkaW5nKSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pLHgoMSksYigibmdJZiIsaS5pc1NpZGVwYW5lT3BlbikpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLFBuZSxZcCwkbiwkNSxabix2byxWbmUsam5lLHBjZSxnY2Usd2NlLFNjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy10YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAxMDBweH0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO21hcmdpbi1sZWZ0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweDttaW4td2lkdGg6dW5zZXQ7cGFkZGluZzowIDEycHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9LnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OmNhbGMoMTAwJSAtIDQ5cHgpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjUwcHg7dG9wOjQ5cHg7dHJhbnNpdGlvbjphbGwgLjc1cyBlYXNlO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjIwMHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LnNsaWRlLW91dC1tZW51LWV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtyaWdodDoyNTBweDt2aXNpYmlsaXR5OnZpc2libGV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxUY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc1NpZGVwYW5lT3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QockEpLHRoaXMuaW5pdGlhbFRhZ3NMb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdChTQykucGlwZShZeShpPT5udWxsPT09aS5sYXN0TG9hZGVkVGltZUluTXMsITApLEIoaT0+aS5zdGF0ZT09PUVlLkxPQURJTkcmJm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcykpLHRoaXMuc2hvd0ZpbHRlcmVkVmlldyQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLnBpcGUoQihpPT5pLmxlbmd0aD4wKSksdGhpcy5maWx0ZXJlZFBsdWdpblR5cGVzJD10aGlzLnN0b3JlLnNlbGVjdCh4dSksdGhpcy5pc1NsaWRlb3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KG9BKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZVAoKSl9b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJEkoKSl9b25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKERQKHtwbHVnaW46ZX0pKX1vblNob3dBbGxQbHVnaW5zKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChBUCgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3Il1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJpbml0aWFsVGFnc0xvYWRpbmciLCJmaWx0ZXJlZFBsdWdpblR5cGVzIiwic2xpZGVPdXRNZW51T3BlbiIsIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsIm9uUGx1Z2luVHlwZVRvZ2dsZWQiLCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiLDApLFAoIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSgib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl9KSgib25QbHVnaW5UeXBlVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChvKX0pKCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2hvd0FsbFBsdWdpbnMoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoInNob3dGaWx0ZXJlZFZpZXciLFcoMSw1LGkuc2hvd0ZpbHRlcmVkVmlldyQpKSgiaXNTaWRlcGFuZU9wZW4iLFcoMiw3LGkuaXNTaWRlcGFuZU9wZW4kKSkoImluaXRpYWxUYWdzTG9hZGluZyIsVygzLDksaS5pbml0aWFsVGFnc0xvYWRpbmckKSkoImZpbHRlcmVkUGx1Z2luVHlwZXMiLFcoNCwxMSxpLmZpbHRlcmVkUGx1Z2luVHlwZXMkKSkoInNsaWRlT3V0TWVudU9wZW4iLFcoNSwxMyxpLmlzU2xpZGVvdXRNZW51T3BlbiQpKX0sZGVwZW5kZW5jaWVzOltFY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEdzPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ0hFQ0tCT1g9ImNoZWNrYm94IixuLlJVTl9OQU1FPSJydW5fbmFtZSIsbi5FWFBFUklNRU5UX05BTUU9ImV4cGVyaW1lbnRfbmFtZSIsbi5SVU5fQ09MT1I9InJ1bl9jb2xvciJ9KEdzfHwoR3M9e30pKSxHcykpKCksTmg9e307U08oTmgse2dldEV4cGVyaW1lbnRzSHBhcmFtc0FuZE1ldHJpY3NTcGVjczooKT0+eldlLGdldEhwYXJhbUZpbHRlck1hcDooKT0+TldlLGdldEhwYXJhbUZpbHRlck1hcEZyb21FeHBlcmltZW50SWRzOigpPT5MV2UsZ2V0TWV0cmljRmlsdGVyTWFwOigpPT5IV2UsZ2V0TWV0cmljRmlsdGVyTWFwRnJvbUV4cGVyaW1lbnRJZHM6KCk9PlVXZX0pO3ZhciBxZD1QcihSRCk7ZnVuY3Rpb24gQWNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLmhwYXJhbS5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIHhDKGUpfXZhciBrV2U9WShxZCxBY2UpO2Z1bmN0aW9uIEljZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5ocGFyYW1zPz9bXV0pfXZhciBOV2U9WShxZCxrV2UsSWNlKTtmdW5jdGlvbiBMV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+QWNlKHQsbikpfShuKSwodCxlKT0+SWNlKHQsZSxuKSl9ZnVuY3Rpb24gUGNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLm1ldHJpYy5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIFBEKGUpfXZhciBCV2U9WShxZCxQY2UpO2Z1bmN0aW9uIFJjZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5tZXRyaWNzPz9bXV0pfXZhciBIV2U9WShxZCxCV2UsUmNlKTtmdW5jdGlvbiBVV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+UGNlKHQsbikpfShuKSwodCxlKT0+UmNlKHQsZSxuKSl9dmFyIHpXZT1ZKHFkLChuLHQpPT5mdW5jdGlvbiguLi5uKXtsZXQgdD1uZXcgTWFwLGU9bmV3IE1hcCxpPW5ldyBNYXAscj1uZXcgTWFwLG89W107Zm9yKGxldCBzIG9mIG4pe2ZvcihsZXQgYSBvZiBzLmhwYXJhbXMpaWYoZS5oYXMoYS5uYW1lKXx8ZS5zZXQoYS5uYW1lLG5ldyBTZXQpLGUuZ2V0KGEubmFtZSkuYWRkKGEuZGlzcGxheU5hbWUpLHQuaGFzKGEubmFtZSkpe2xldCBsPXQuZ2V0KGEubmFtZSksYz1hO2lmKGwudHlwZSE9PWMudHlwZSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgdHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wudHlwZX0gdnMuICR7Yy50eXBlfWApLGwuZG9tYWluLnR5cGU9PT1Lbi5JTlRFUlZBTCYmYy5kb21haW4udHlwZT09PUtuLklOVEVSVkFMKShsLmRvbWFpbi5taW5WYWx1ZSE9PWMuZG9tYWluLm1pblZhbHVlfHxsLmRvbWFpbi5tYXhWYWx1ZSE9PWMuZG9tYWluLm1heFZhbHVlKSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC5kb21haW59IHZzLiAke2MuZG9tYWlufWApO2Vsc2UgaWYobC5kb21haW4udHlwZT09PUtuLkRJU0NSRVRFJiZjLmRvbWFpbi50eXBlPT09S24uRElTQ1JFVEUpe2xldCB1PW5ldyBTZXQoWy4uLmwuZG9tYWluLnZhbHVlcywuLi5jLmRvbWFpbi52YWx1ZXNdKTsobC5kb21haW4udmFsdWVzLmxlbmd0aCE9PWMuZG9tYWluLnZhbHVlcy5sZW5ndGh8fGwuZG9tYWluLnZhbHVlcy5sZW5ndGghPT11LnNpemUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSBvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSB0LnNldChhLm5hbWUsey4uLmF9KTtmb3IobGV0IGEgb2Ygcy5tZXRyaWNzKWlmKHIuaGFzKGEudGFnKXx8ci5zZXQoYS50YWcsbmV3IFNldCksci5nZXQoYS50YWcpLmFkZChhLmRpc3BsYXlOYW1lKSxpLmhhcyhhLnRhZykpe2xldCBsPWkuZ2V0KGEudGFnKSxjPWE7bC5kYXRhc2V0VHlwZSE9PWMuZGF0YXNldFR5cGUmJm8ucHVzaChgTWV0cmljLCAke2MudGFnfSwgZGF0YXNldFR5cGVzIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRhdGFzZXRUeXBlfSB2cy4gJHtjLmRhdGFzZXRUeXBlfWApfWVsc2UgaS5zZXQoYS50YWcsey4uLmF9KX1pZihvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZXJyb3I6XG4ke28uam9pbigiXG4iKX1gKTtyZXR1cm57aHBhcmFtczpbLi4udF0ubWFwKChbcyxhXSk9Pih7Li4uYSxkaXNwbGF5TmFtZTpbLi4uZS5nZXQocyldLmpvaW4oIiBvciAiKX0pKSxtZXRyaWNzOlsuLi5pXS5tYXAoKFtzLGFdKT0+KHsuLi5hLGRpc3BsYXlOYW1lOlsuLi5yLmdldChzKV0uam9pbigiIG9yICIpfSkpfX0oLi4udC5leHBlcmltZW50SWRzLm1hcChlPT57bGV0IGk9bi5zcGVjc1tlXTtyZXR1cm4gaT97aHBhcmFtczppLmhwYXJhbS5zcGVjcyxtZXRyaWNzOmkubWV0cmljLnNwZWNzfTpudWxsfSkuZmlsdGVyKEJvb2xlYW4pKSksaldlPVsidG9vbHRpcCJdLE9jZT0idG9vbHRpcC1wYW5lbCIsa2NlPU5zKHtwYXNzaXZlOiEwfSksRmNlPW5ldyBzZSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksWVdlPXtwcm92aWRlOkZjZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oe3Njcm9sbFRocm90dGxlOjIwfSl9fSxYV2U9bmV3IHNlKCJtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dEZWxheTowLGhpZGVEZWxheTowLHRvdWNoZW5kSGlkZURlbGF5OjE1MDB9fX0pLEtXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX3Njcm9sbERpc3BhdGNoZXI9cix0aGlzLl92aWV3Q29udGFpbmVyUmVmPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZGlyPWQsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cCx0aGlzLl9wb3NpdGlvbj0iYmVsb3ciLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5fc2hvd0RlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLnNob3dEZWxheSx0aGlzLl9oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgVGUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9dSx0aGlzLl9kb2N1bWVudD1oLHAmJihwLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1wLnBvc2l0aW9uKSxwLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9cC50b3VjaEdlc3R1cmVzKSksZC5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKX0pfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7ZSE9PXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249ZSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZiksdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5zaG93KDApLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5oaWRlKDApOnRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKX1nZXQgc2hvd0RlbGF5KCl7cmV0dXJuIHRoaXMuX3Nob3dEZWxheX1zZXQgc2hvd0RlbGF5KGUpe3RoaXMuX3Nob3dEZWxheT1QaShlKX1nZXQgaGlkZURlbGF5KCl7cmV0dXJuIHRoaXMuX2hpZGVEZWxheX1zZXQgaGlkZURlbGF5KGUpe3RoaXMuX2hpZGVEZWxheT1QaShlKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5KX1nZXQgbWVzc2FnZSgpe3JldHVybiB0aGlzLl9tZXNzYWdlfXNldCBtZXNzYWdlKGUpe3RoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMuX21lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9tZXNzYWdlPW51bGwhPWU/U3RyaW5nKGUpLnRyaW0oKToiIiwhdGhpcy5fbWVzc2FnZSYmdGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgwKToodGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2FyaWFEZXNjcmliZXIuZGVzY3JpYmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMubWVzc2FnZSwidG9vbHRpcCIpfSl9KSl9Z2V0IHRvb2x0aXBDbGFzcygpe3JldHVybiB0aGlzLl90b29sdGlwQ2xhc3N9c2V0IHRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwQ2xhc3M9ZSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2U/ImtleWJvYXJkIj09PWUmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuc2hvdygpKTp0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMuZm9yRWFjaCgoW2kscl0pPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscixrY2UpfSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGg9MCx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oZSx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcoZSl9c2hvdyhlPXRoaXMuc2hvd0RlbGF5KXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHx0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKTtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KCk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IENjKHRoaXMuX3Rvb2x0aXBDb21wb25lbnQsdGhpcy5fdmlld0NvbnRhaW5lclJlZik7bGV0IHI9dGhpcy5fdG9vbHRpcEluc3RhbmNlPWkuYXR0YWNoKHRoaXMuX3BvcnRhbCkuaW5zdGFuY2U7ci5fdHJpZ2dlckVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHIuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5LHIuYWZ0ZXJIaWRkZW4oKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksci5zaG93KGUpfWhpZGUoZT10aGlzLmhpZGVEZWxheSl7bGV0IGk9dGhpcy5fdG9vbHRpcEluc3RhbmNlO2kmJihpLmlzVmlzaWJsZSgpP2kuaGlkZShlKTooaS5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9kZXRhY2goKSkpfXRvZ2dsZSgpe3RoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX1faXNUb29sdGlwVmlzaWJsZSgpe3JldHVybiEhdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCl9X2NyZWF0ZU92ZXJsYXkoKXtpZih0aGlzLl9vdmVybGF5UmVmKXJldHVybiB0aGlzLl9vdmVybGF5UmVmO2xldCBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLGk9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKGAuJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcGApLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLl92aWV3cG9ydE1hcmdpbikud2l0aFNjcm9sbGFibGVDb250YWluZXJzKGUpO3JldHVybiBpLnBvc2l0aW9uQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5fdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3Moci5jb25uZWN0aW9uUGFpciksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZyLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCkmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuaGlkZSgwKSl9KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6aSxwYW5lbENsYXNzOmAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX1gLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2RldGFjaCgpKSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpJiYyNz09PXIua2V5Q29kZSYmIU1yKHIpJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKSl9KSx0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZVRvb2x0aXBJbnRlcmFjdGl2aXR5JiZ0aGlzLl9vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXAtcGFuZWwtbm9uLWludGVyYWN0aXZlYCksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbihlKXtsZXQgaT1lLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kscj10aGlzLl9nZXRPcmlnaW4oKSxvPXRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpO2kud2l0aFBvc2l0aW9ucyhbdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLm1haW4sLi4uby5tYWlufSksdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLmZhbGxiYWNrLC4uLm8uZmFsbGJhY2t9KV0pfV9hZGRPZmZzZXQoZSl7cmV0dXJuIGV9X2dldE9yaWdpbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aXx8ImJlbG93Ij09aT9yPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09aT8idG9wIjoiYm90dG9tIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm9yaWdpblgsci5vcmlnaW5ZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvcmlnaW5YOm8sb3JpZ2luWTpzfX19X2dldE92ZXJsYXlQb3NpdGlvbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToiYm90dG9tIn06ImJlbG93Ij09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToidG9wIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e292ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImNlbnRlciJ9KTtsZXR7eDpvLHk6c309dGhpcy5faW52ZXJ0UG9zaXRpb24oci5vdmVybGF5WCxyLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOnN9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKEh0KDEpLG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpfV9zZXRUb29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCkpfV9pbnZlcnRQb3NpdGlvbihlLGkpe3JldHVybiJhYm92ZSI9PT10aGlzLnBvc2l0aW9ufHwiYmVsb3ciPT09dGhpcy5wb3NpdGlvbj8idG9wIj09PWk/aT0iYm90dG9tIjoiYm90dG9tIj09PWkmJihpPSJ0b3AiKToiZW5kIj09PWU/ZT0ic3RhcnQiOiJzdGFydCI9PT1lJiYoZT0iZW5kIikse3g6ZSx5Oml9fV91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhlKXtsZXQgcyx7b3ZlcmxheVk6aSxvcmlnaW5YOnIsb3JpZ2luWTpvfT1lO2lmKHM9ImNlbnRlciI9PT1pP3RoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ImVuZCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJzdGFydCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJib3R0b20iPT09aSYmInRvcCI9PT1vPyJhYm92ZSI6ImJlbG93IixzIT09dGhpcy5fY3VycmVudFBvc2l0aW9uKXtsZXQgYT10aGlzLl9vdmVybGF5UmVmO2lmKGEpe2xldCBsPWAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX0tYDthLnJlbW92ZVBhbmVsQ2xhc3MobCt0aGlzLl9jdXJyZW50UG9zaXRpb24pLGEuYWRkUGFuZWxDbGFzcyhsK3MpfXRoaXMuX2N1cnJlbnRQb3NpdGlvbj1zfX1fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpe3RoaXMuX2Rpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHwhdGhpcy5fdmlld0luaXRpYWxpemVkfHx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aHx8KHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpP3RoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbIm1vdXNlZW50ZXIiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksdGhpcy5zaG93KCl9XSk6Im9mZiIhPT10aGlzLnRvdWNoR2VzdHVyZXMmJih0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbInRvdWNoc3RhcnQiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl90b3VjaHN0YXJ0VGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLnNob3coKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2xldCBlPVtdO2lmKHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpKWUucHVzaChbIm1vdXNlbGVhdmUiLGk9PntsZXQgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHwhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocikpJiZ0aGlzLmhpZGUoKX1dLFsid2hlZWwiLGk9PnRoaXMuX3doZWVsTGlzdGVuZXIoaSldKTtlbHNlIGlmKCJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzKXt0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO2xldCBpPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTtlLnB1c2goWyJ0b3VjaGVuZCIsaV0sWyJ0b3VjaGNhbmNlbCIsaV0pfXRoaXMuX2FkZExpc3RlbmVycyhlKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZSl9X2FkZExpc3RlbmVycyhlKXtlLmZvckVhY2goKFtpLHJdKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGkscixrY2UpfSl9X3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpe3JldHVybiF0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9wbGF0Zm9ybS5BTkRST0lEfV93aGVlbExpc3RlbmVyKGUpe2lmKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpIT09ciYmIXIuY29udGFpbnMoaSkmJnRoaXMuaGlkZSgpfX1fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKXtsZXQgZT10aGlzLnRvdWNoR2VzdHVyZXM7aWYoIm9mZiIhPT1lKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQscj1pLnN0eWxlOygib24iPT09ZXx8IklOUFVUIiE9PWkubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1pLm5vZGVOYW1lKSYmKHIudXNlclNlbGVjdD1yLm1zVXNlclNlbGVjdD1yLndlYmtpdFVzZXJTZWxlY3Q9ci5Nb3pVc2VyU2VsZWN0PSJub25lIiksKCJvbiI9PT1lfHwhaS5kcmFnZ2FibGUpJiYoci53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLHIudG91Y2hBY3Rpb249Im5vbmUiLHIud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7cG9zaXRpb246WyJtYXRUb29sdGlwUG9zaXRpb24iLCJwb3NpdGlvbiJdLGRpc2FibGVkOlsibWF0VG9vbHRpcERpc2FibGVkIiwiZGlzYWJsZWQiXSxzaG93RGVsYXk6WyJtYXRUb29sdGlwU2hvd0RlbGF5Iiwic2hvd0RlbGF5Il0saGlkZURlbGF5OlsibWF0VG9vbHRpcEhpZGVEZWxheSIsImhpZGVEZWxheSJdLHRvdWNoR2VzdHVyZXM6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsInRvdWNoR2VzdHVyZXMiXSxtZXNzYWdlOlsibWF0VG9vbHRpcCIsIm1lc3NhZ2UiXSx0b29sdGlwQ2xhc3M6WyJtYXRUb29sdGlwQ2xhc3MiLCJ0b29sdGlwQ2xhc3MiXX19KSxufSkoKSxOY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEtXZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7c3VwZXIoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpLHRoaXMuX3Rvb2x0aXBDb21wb25lbnQ9SldlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KGltKSx3KHlpKSx3KHB0KSx3KHVpKSx3KElBKSx3KHpyKSx3KEZjZSksdyhpciw4KSx3KFhXZSw4KSx3KEJ0KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRvb2x0aXAiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLFpXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgVGUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IHM9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpufSksbn0pKCksSldlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaV2V7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWksdGhpcy5faXNIYW5kc2V0PXRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKCIobWF4LXdpZHRoOiA1OTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIpLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC10b29sdGlwLXNob3ciLHRoaXMuX2hpZGVBbmltYXRpb249Im1hdC10b29sdGlwLWhpZGUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSx3KG5tKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbHRpcC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChqV2UsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fdG9vbHRpcD1yLmZpcnN0KX19LGhvc3RBdHRyczpbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJtb3VzZWxlYXZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlTW91c2VMZWF2ZShvKX0pLDImZSYmT3QoInpvb20iLGkuaXNWaXNpYmxlKCk/MTpudWxsKX0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtdG9vbHRpcCIsMywibmdDbGFzcyIsImFuaW1hdGlvbmVuZCJdLFsidG9vbHRpcCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoImFuaW1hdGlvbmVuZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUFuaW1hdGlvbkVuZChvKX0pLGooMiwiYXN5bmMiKSxEKDMpLHYoKSksMiZlKXtsZXQgcjthdCgibWF0LXRvb2x0aXAtaGFuZHNldCIsbnVsbD09KHI9VygyLDQsaS5faXNIYW5kc2V0KSk/bnVsbDpyLm1hdGNoZXMpLGIoIm5nQ2xhc3MiLGkudG9vbHRpcENsYXNzKSx4KDMpLHl0KGkubWVzc2FnZSl9fSxkZXBlbmRlbmNpZXM6W1BuLGZ0XSxzdHlsZXM6WyIubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC10b29sdGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle2FuaW1hdGlvbjpub25lO3RyYW5zZm9ybTpzY2FsZSgxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbHRpcHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2x0aXAtaGFuZHNldHttYXJnaW46MjRweDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9Lm1hdC10b29sdGlwLXBhbmVsLW5vbi1pbnRlcmFjdGl2ZXtwb2ludGVyLWV2ZW50czpub25lfUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDApfTUwJXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpzY2FsZSgwLjk5KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtaGlkZXswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm1hdC10b29sdGlwLXNob3d7YW5pbWF0aW9uOm1hdC10b29sdGlwLXNob3cgMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Lm1hdC10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC10b29sdGlwLWhpZGUgMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTGNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1lXZV0saW1wb3J0czpbUF8sa2UsVm8sZG4sZG4sU3VdfSksbn0pKCk7ZnVuY3Rpb24gZTdlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwxOSksRCgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigidmFsdWUiLGUpLHgoMSkscWUoIiAiLGUsIiAiKX19ZnVuY3Rpb24gdDdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDE2KSgxLCJtYXQtc2VsZWN0IiwxNyksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5fY2hhbmdlUGFnZVNpemUoci52YWx1ZSkpfSksRSgyLGU3ZSwyLDIsIm1hdC1vcHRpb24iLDE4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7YigiYXBwZWFyYW5jZSIsZS5fZm9ybUZpZWxkQXBwZWFyYW5jZSkoImNvbG9yIixlLmNvbG9yKSx4KDEpLGIoInZhbHVlIixlLnBhZ2VTaXplKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJwYW5lbENsYXNzIixlLnNlbGVjdENvbmZpZy5wYW5lbENsYXNzfHwiIikoImRpc2FibGVPcHRpb25DZW50ZXJpbmciLGUuc2VsZWN0Q29uZmlnLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpKCJhcmlhLWxhYmVsIixlLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsKSx4KDEpLGIoIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIG43ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHl0KGUucGFnZVNpemUpfX1mdW5jdGlvbiBpN2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLEUoMyx0N2UsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLEUoNCxuN2UsMiwxLCJkaXYiLDE1KSx2KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSx4KDEpLGIoIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSkseCgxKSxiKCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gcjdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiwyMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5maXJzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDIyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKX19ZnVuY3Rpb24gbzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2puKCksU2EoKSxnKDAsImJ1dHRvbiIsMjMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkubGFzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDI0KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpfX1Icigic3RhdGUiLFtFaSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkifSkpLEVpKCJ2aXNpYmxlIixybih7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSksSWkoIiogPT4gdmlzaWJsZSIsVmkoIjIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixPZihbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIixvZmZzZXQ6MH0pLHJuKHtvcGFjaXR5Oi41LHRyYW5zZm9ybToic2NhbGUoMC45OSkiLG9mZnNldDouNX0pLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSIsb2Zmc2V0OjF9KV0pKSksSWkoIiogPT4gaGlkZGVuIixWaSgiMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSk7dmFyIG9nPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IFRlLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9KGUsaSxyKT0+e2lmKDA9PXJ8fDA9PWkpcmV0dXJuYDAgb2YgJHtyfWA7bGV0IG89ZSppO3JldHVybmAke28rMX0gXHUyMDEzICR7bzwocj1NYXRoLm1heChyLDApKT9NYXRoLm1pbihvK2kscik6bytpfSBvZiAke3J9YH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGE3ZT17cHJvdmlkZTpvZyxkZXBzOltbbmV3IE9vLG5ldyBUYSxvZ11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBvZ319LGM3ZT1uZXcgc2UoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksdTdlPWdvKE9BKGNsYXNze30pKSxkN2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHU3ZXtjb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRyx0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoUGkoZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9UGkoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChQaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5QaShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9V3QoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1XdChlKX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4KzEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1wcmV2aW91c1BhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5wYWdlSW5kZXgtMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWZpcnN0UGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLmdldE51bWJlck9mUGFnZXMoKS0xLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4Pj0xJiYwIT10aGlzLnBhZ2VTaXplfWhhc05leHRQYWdlKCl7bGV0IGU9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMTtyZXR1cm4gdGhpcy5wYWdlSW5kZXg8ZSYmMCE9dGhpcy5wYWdlU2l6ZX1nZXROdW1iZXJPZlBhZ2VzKCl7cmV0dXJuIHRoaXMucGFnZVNpemU/TWF0aC5jZWlsKHRoaXMubGVuZ3RoL3RoaXMucGFnZVNpemUpOjB9X2NoYW5nZVBhZ2VTaXplKGUpe2xldCByPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS9lKXx8MCx0aGlzLnBhZ2VTaXplPWUsdGhpcy5fZW1pdFBhZ2VFdmVudChyKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7IXRoaXMuX2luaXRpYWxpemVkfHwodGhpcy5wYWdlU2l6ZXx8KHRoaXMuX3BhZ2VTaXplPTAhPXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aD90aGlzLnBhZ2VTaXplT3B0aW9uc1swXTo1MCksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zPXRoaXMucGFnZVNpemVPcHRpb25zLnNsaWNlKCksLTE9PT10aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuaW5kZXhPZih0aGlzLnBhZ2VTaXplKSYmdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5wYWdlU2l6ZSksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGUsaSk9PmUtaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9lbWl0UGFnZUV2ZW50KGUpe3RoaXMucGFnZS5lbWl0KHtwcmV2aW91c1BhZ2VJbmRleDplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLGxlbmd0aDp0aGlzLmxlbmd0aH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7SmwoKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2NvbG9yOiJjb2xvciIscGFnZUluZGV4OiJwYWdlSW5kZXgiLGxlbmd0aDoibGVuZ3RoIixwYWdlU2l6ZToicGFnZVNpemUiLHBhZ2VTaXplT3B0aW9uczoicGFnZVNpemVPcHRpb25zIixoaWRlUGFnZVNpemU6ImhpZGVQYWdlU2l6ZSIsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6InNob3dGaXJzdExhc3RCdXR0b25zIixzZWxlY3RDb25maWc6InNlbGVjdENvbmZpZyJ9LG91dHB1dHM6e3BhZ2U6InBhZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksc089KCgpPT57Y2xhc3MgbiBleHRlbmRzIGQ3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpLHImJm51bGwhPXIuZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9ci5mb3JtRmllbGRBcHBlYXJhbmNlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhvZyksdyhubiksdyhjN2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwicGFuZWxDbGFzcyIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJhcmlhLWxhYmVsIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRSgyLGk3ZSw1LDMsImRpdiIsMiksZygzLCJkaXYiLDMpKDQsImRpdiIsNCksRCg1KSx2KCksRSg2LHI3ZSwzLDUsImJ1dHRvbiIsNSksZyg3LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksam4oKSxnKDgsInN2ZyIsNyksTig5LCJwYXRoIiw4KSx2KCkoKSxTYSgpLGcoMTAsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLGpuKCksZygxMSwic3ZnIiw3KSxOKDEyLCJwYXRoIiwxMCksdigpKCksRSgxMyxvN2UsMyw1LCJidXR0b24iLDExKSx2KCkoKSgpKSwyJmUmJih4KDIpLGIoIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSkseCgzKSxxZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIikseCgxKSxiKCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSx4KDEpLGIoIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksemUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLHgoMyksYigibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSx6ZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSx4KDMpLGIoIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixEdSxKcCx1YSxOY2VdLHN0eWxlczpbIi5tYXQtcGFnaW5hdG9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzowIDhweDtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlO3dpZHRoOjEwMCV9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbHttYXJnaW46MCA0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdHttYXJnaW46NnB4IDRweCAwIDRweDt3aWR0aDo1NnB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5le3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGx7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25ze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1wYWdpbmF0b3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyOHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcGFnaW5hdG9yLWljb257ZmlsbDpDYW52YXNUZXh0fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEJjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthN2VdLGltcG9ydHM6W2tlLFJpLElsLExjZSxkbl19KSxufSkoKSxoN2U9WyJtYXQtc29ydC1oZWFkZXIiLCIiXTtmdW5jdGlvbiBmN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDMpLFAoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfSkoIkBhcnJvd1Bvc2l0aW9uLmRvbmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSl9KSxOKDEsImRpdiIsNCksZygyLCJkaXYiLDUpLE4oMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsImRpdiIsOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQGFycm93T3BhY2l0eSIsZS5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhcnJvd1Bvc2l0aW9uIixlLl9nZXRBcnJvd1ZpZXdTdGF0ZSgpKSgiQGFsbG93Q2hpbGRyZW4iLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSkseCgyKSxiKCJAaW5kaWNhdG9yIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQGxlZnRQb2ludGVyIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQHJpZ2h0UG9pbnRlciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKX19dmFyIG03ZT1bIioiXSxWY2U9bmV3IHNlKCJNQVRfU09SVF9ERUZBVUxUX09QVElPTlMiKSxnN2U9T0EoZ28oY2xhc3N7fSkpLHRTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBnN2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1lLHRoaXMuc29ydGFibGVzPW5ldyBNYXAsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZSx0aGlzLnN0YXJ0PSJhc2MiLHRoaXMuX2RpcmVjdGlvbj0iIix0aGlzLnNvcnRDaGFuZ2U9bmV3IEd9Z2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259c2V0IGRpcmVjdGlvbihlKXt0aGlzLl9kaXJlY3Rpb249ZX1nZXQgZGlzYWJsZUNsZWFyKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbGVhcn1zZXQgZGlzYWJsZUNsZWFyKGUpe3RoaXMuX2Rpc2FibGVDbGVhcj1XdChlKX1yZWdpc3RlcihlKXt0aGlzLnNvcnRhYmxlcy5zZXQoZS5pZCxlKX1kZXJlZ2lzdGVyKGUpe3RoaXMuc29ydGFibGVzLmRlbGV0ZShlLmlkKX1zb3J0KGUpe3RoaXMuYWN0aXZlIT1lLmlkPyh0aGlzLmFjdGl2ZT1lLmlkLHRoaXMuZGlyZWN0aW9uPWUuc3RhcnQ/ZS5zdGFydDp0aGlzLnN0YXJ0KTp0aGlzLmRpcmVjdGlvbj10aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKGUpLHRoaXMuc29ydENoYW5nZS5lbWl0KHthY3RpdmU6dGhpcy5hY3RpdmUsZGlyZWN0aW9uOnRoaXMuZGlyZWN0aW9ufSl9Z2V0TmV4dFNvcnREaXJlY3Rpb24oZSl7aWYoIWUpcmV0dXJuIiI7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1bImFzYyIsImRlc2MiXTtyZXR1cm4iZGVzYyI9PW4mJmUucmV2ZXJzZSgpLHR8fGUucHVzaCgiIiksZX0oZS5zdGFydHx8dGhpcy5zdGFydCxlPy5kaXNhYmxlQ2xlYXI/P3RoaXMuZGlzYWJsZUNsZWFyPz8hIXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlQ2xlYXIpLG89ci5pbmRleE9mKHRoaXMuZGlyZWN0aW9uKSsxO3JldHVybiBvPj1yLmxlbmd0aCYmKG89MCkscltvXX1uZ09uSW5pdCgpe3RoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFZjZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFNvcnQiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc29ydCJdLGlucHV0czp7ZGlzYWJsZWQ6WyJtYXRTb3J0RGlzYWJsZWQiLCJkaXNhYmxlZCJdLGFjdGl2ZTpbIm1hdFNvcnRBY3RpdmUiLCJhY3RpdmUiXSxzdGFydDpbIm1hdFNvcnRTdGFydCIsInN0YXJ0Il0sZGlyZWN0aW9uOlsibWF0U29ydERpcmVjdGlvbiIsImRpcmVjdGlvbiJdLGRpc2FibGVDbGVhcjpbIm1hdFNvcnREaXNhYmxlQ2xlYXIiLCJkaXNhYmxlQ2xlYXIiXX0sb3V0cHV0czp7c29ydENoYW5nZToibWF0U29ydENoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U29ydCJdLGZlYXR1cmVzOlt0dCx6dF19KSxufSkoKSxMaD1ySi5FTlRFUklORysiICIraUouU1RBTkRBUkRfQ1VSVkUsUnk9e2luZGljYXRvcjpIcigiaW5kaWNhdG9yIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwcHgpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTBweCkifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLGxlZnRQb2ludGVyOkhyKCJsZWZ0UG9pbnRlciIsW0VpKCJhY3RpdmUtYXNjLCBhc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLHJpZ2h0UG9pbnRlcjpIcigicmlnaHRQb2ludGVyIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksRWkoImFjdGl2ZS1kZXNjLCBkZXNjIixybih7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksSWkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixWaShMaCkpXSksYXJyb3dPcGFjaXR5OkhyKCJhcnJvd09wYWNpdHkiLFtFaSgiZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe29wYWNpdHk6MX0pKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCIscm4oe29wYWNpdHk6LjU0fSkpLEVpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjLCBoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjLCB2b2lkIixybih7b3BhY2l0eTowfSkpLElpKCIqID0+IGFzYywgKiA9PiBkZXNjLCAqID0+IGFjdGl2ZSwgKiA9PiBoaW50LCAqID0+IHZvaWQiLFZpKCIwbXMiKSksSWkoIiogPD0+ICoiLFZpKExoKSldKSxhcnJvd1Bvc2l0aW9uOkhyKCJhcnJvd1Bvc2l0aW9uIixbSWkoIiogPT4gZGVzYy10by1oaW50LCAqID0+IGRlc2MtdG8tYWN0aXZlIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWRlc2MsICogPT4gYWN0aXZlLXRvLWRlc2MiLFZpKExoLE9mKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KV0pKSksSWkoIiogPT4gYXNjLXRvLWhpbnQsICogPT4gYXNjLXRvLWFjdGl2ZSIsVmkoTGgsT2YoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWFzYywgKiA9PiBhY3RpdmUtdG8tYXNjIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pXSkpKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCwgZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSksRWkoImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSkpLEVpKCJoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSkpXSksYWxsb3dDaGlsZHJlbjpIcigiYWxsb3dDaGlsZHJlbiIsW0lpKCIqIDw9PiAqIixbRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSldKX0sYU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcgVGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHk3ZT17cHJvdmlkZTphTyxkZXBzOltbbmV3IE9vLG5ldyBUYSxhT11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBhT319LGI3ZT1nbyhjbGFzc3t9KSxIY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGI3ZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5faW50bD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc29ydD1yLHRoaXMuX2NvbHVtbkRlZj1vLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEsdGhpcy5fdmlld1N0YXRlPXt9LHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPSJTb3J0IixjPy5hcnJvd1Bvc2l0aW9uJiYodGhpcy5hcnJvd1Bvc2l0aW9uPWM/LmFycm93UG9zaXRpb24pLHRoaXMuX2hhbmRsZVN0YXRlQ2hhbmdlcygpfWdldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuaWQmJnRoaXMuX2NvbHVtbkRlZiYmKHRoaXMuaWQ9dGhpcy5fY29sdW1uRGVmLm5hbWUpLHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHt0b1N0YXRlOnRoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZSI6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSx0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpLHRoaXMuX3NvcnRCdXR0b249dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiksdGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntsZXQgaT0hIWU7aSE9PXRoaXMuX3Nob3dJbmRpY2F0b3JIaW50JiYodGhpcy5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKGUpe3RoaXMuX2lzRGlzYWJsZWQoKSYmZXx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PWUsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoZSl7dGhpcy5fdmlld1N0YXRlPWV8fHt9LHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24mJih0aGlzLl92aWV3U3RhdGU9e3RvU3RhdGU6ZS50b1N0YXRlfSl9X3RvZ2dsZU9uSW50ZXJhY3Rpb24oKXt0aGlzLl9zb3J0LnNvcnQodGhpcyksKCJoaW50Ij09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlKSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKGUpeyF0aGlzLl9pc0Rpc2FibGVkKCkmJigzMj09PWUua2V5Q29kZXx8MTM9PT1lLmtleUNvZGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2xldCBlPXRoaXMuX3ZpZXdTdGF0ZS5mcm9tU3RhdGU7cmV0dXJuKGU/YCR7ZX0tdG8tYDoiIikrdGhpcy5fdmlld1N0YXRlLnRvU3RhdGV9X3VwZGF0ZUFycm93RGlyZWN0aW9uKCl7dGhpcy5fYXJyb3dEaXJlY3Rpb249dGhpcy5faXNTb3J0ZWQoKT90aGlzLl9zb3J0LmRpcmVjdGlvbjp0aGlzLnN0YXJ0fHx0aGlzLl9zb3J0LnN0YXJ0fV9pc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZWR9X2dldEFyaWFTb3J0QXR0cmlidXRlKCl7cmV0dXJuIHRoaXMuX2lzU29ydGVkKCk/ImFzYyI9PXRoaXMuX3NvcnQuZGlyZWN0aW9uPyJhc2NlbmRpbmciOiJkZXNjZW5kaW5nIjoibm9uZSJ9X3JlbmRlckFycm93KCl7cmV0dXJuIXRoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5faXNTb3J0ZWQoKX1fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpe3RoaXMuX3NvcnRCdXR0b24mJih0aGlzLl9hcmlhRGVzY3JpYmVyPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9zb3J0QnV0dG9uLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbiksdGhpcy5fYXJpYURlc2NyaWJlcj8uZGVzY3JpYmUodGhpcy5fc29ydEJ1dHRvbixlKSksdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPWV9X2hhbmRsZVN0YXRlQ2hhbmdlcygpe3RoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uPXVuKHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0Ll9zdGF0ZUNoYW5nZXMsdGhpcy5faW50bC5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc1NvcnRlZCgpJiYodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYU8pLHcobm4pLHcodFMsOCksdygiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLDgpLHcoenIpLHcoQWUpLHcoSUEsOCksdyhWY2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSksMiZlJiYoemUoImFyaWEtc29ydCIsaS5fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSksYXQoIm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCIsaS5faXNEaXNhYmxlZCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDpbIm1hdC1zb3J0LWhlYWRlciIsImlkIl0sYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsc3RhcnQ6InN0YXJ0Iixzb3J0QWN0aW9uRGVzY3JpcHRpb246InNvcnRBY3Rpb25EZXNjcmlwdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmg3ZSxuZ0NvbnRlbnRTZWxlY3RvcnM6bTdlLGRlY2xzOjQsdmFyczo3LGNvbnN0czpbWzEsIm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1jb250ZW50Il0sWyJjbGFzcyIsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyIsNCwibmdJZiJdLFsxLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciXSxbMSwibWF0LXNvcnQtaGVhZGVyLXN0ZW0iXSxbMSwibWF0LXNvcnQtaGVhZGVyLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDApKDEsImRpdiIsMSksTm4oMiksdigpLEUoMyxmN2UsNiw2LCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLGkuX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09PWkuYXJyb3dQb3NpdGlvbiksemUoInRhYmluZGV4IixpLl9pc0Rpc2FibGVkKCk/bnVsbDowKSgicm9sZSIsaS5faXNEaXNhYmxlZCgpP251bGw6ImJ1dHRvbiIpLHgoMyksYigibmdJZiIsaS5fcmVuZGVyQXJyb3coKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc29ydC1oZWFkZXItY29udGVudHt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3Jle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7b3BhY2l0eTowfS5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgMCAwIDZweH0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDZweCAwIDB9Lm1hdC1zb3J0LWhlYWRlci1zdGVte2JhY2tncm91bmQ6Y3VycmVudENvbG9yO2hlaWdodDoxMHB4O3dpZHRoOjJweDttYXJnaW46YXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1zdGVte3dpZHRoOjA7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItaW5kaWNhdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle21hcmdpbjphdXRvO2hlaWdodDoycHg7d2lkdGg6MnB4O2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXt3aWR0aDowO2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7d2lkdGg6NnB4O2hlaWdodDoycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OnNvbGlkIDZweDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0O2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0O3JpZ2h0OjB9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUnkuaW5kaWNhdG9yLFJ5LmxlZnRQb2ludGVyLFJ5LnJpZ2h0UG9pbnRlcixSeS5hcnJvd09wYWNpdHksUnkuYXJyb3dQb3NpdGlvbixSeS5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxVY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbeTdlXSxpbXBvcnRzOltrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBReihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3N0aWNreT0hMSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfWdldCBzdGlja3koKXtyZXR1cm4gdGhpcy5fc3RpY2t5fXNldCBzdGlja3kodCl7bGV0IGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1XdCh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9aGFzU3RpY2t5Q2hhbmdlZCgpe2xldCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19dmFyIEt6PW5ldyBzZSgiQ0RLX1RBQkxFIiksemNlPShuZXcgc2UoInRleHQtY29sdW1uLW9wdGlvbnMiKSxReihjbGFzc3t9KSxuZXcgc2UoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIiksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPWl9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuX2NvbHVtbnNEaWZmZXIpe2xldCBpPWUuY29sdW1ucyYmZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoaSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGkpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgamNlP2UuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgR2NlP2UuZm9vdGVyQ2VsbC50ZW1wbGF0ZTplLmNlbGwudGVtcGxhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCkpLHc3ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxqY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHc3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLE03ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxHY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE03ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLFdjZT0obmV3IHNlKCJDREtfU1BMIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0NkXX0pLG59KSgpKSxxY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1djZSxkbixkbl19KSxufSkoKSxaej1jbGFzcyBleHRlbmRzIGtfe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgVnIoW10pLHRoaXMuX2ZpbHRlcj1uZXcgVnIoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IFRlLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKE5WKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLHU9dHlwZW9mIGwsZD10eXBlb2YgYzt1IT09ZCYmKCJudW1iZXIiPT09dSYmKGwrPSIiKSwibnVtYmVyIj09PWQmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBWcih0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfXNldCBkYXRhKHQpe3Q9QXJyYXkuaXNBcnJheSh0KT90OltdLHRoaXMuX2RhdGEubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHQpfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5fZmlsdGVyLnZhbHVlfXNldCBmaWx0ZXIodCl7dGhpcy5fZmlsdGVyLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0aGlzLmRhdGEpfWdldCBzb3J0KCl7cmV0dXJuIHRoaXMuX3NvcnR9c2V0IHNvcnQodCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBwYWdpbmF0b3IoKXtyZXR1cm4gdGhpcy5fcGFnaW5hdG9yfXNldCBwYWdpbmF0b3IodCl7dGhpcy5fcGFnaW5hdG9yPXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9X3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpe2xldCB0PXRoaXMuX3NvcnQ/dW4odGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOmp0KG51bGwpLGU9dGhpcy5fcGFnaW5hdG9yP3VuKHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpqdChudWxsKSxyPXBuKFt0aGlzLl9kYXRhLHRoaXMuX2ZpbHRlcl0pLnBpcGUoQigoW2FdKT0+dGhpcy5fZmlsdGVyRGF0YShhKSkpLG89cG4oW3IsdF0pLnBpcGUoQigoW2FdKT0+dGhpcy5fb3JkZXJEYXRhKGEpKSkscz1wbihbbyxlXSkucGlwZShCKChbYV0pPT50aGlzLl9wYWdlRGF0YShhKSkpO3RoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1zLnN1YnNjcmliZShhPT50aGlzLl9yZW5kZXJEYXRhLm5leHQoYSkpfV9maWx0ZXJEYXRhKHQpe3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT1udWxsPT10aGlzLmZpbHRlcnx8IiI9PT10aGlzLmZpbHRlcj90OnQuZmlsdGVyKGU9PnRoaXMuZmlsdGVyUHJlZGljYXRlKGUsdGhpcy5maWx0ZXIpKSx0aGlzLnBhZ2luYXRvciYmdGhpcy5fdXBkYXRlUGFnaW5hdG9yKHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCksdGhpcy5maWx0ZXJlZERhdGF9X29yZGVyRGF0YSh0KXtyZXR1cm4gdGhpcy5zb3J0P3RoaXMuc29ydERhdGEodC5zbGljZSgpLHRoaXMuc29ydCk6dH1fcGFnZURhdGEodCl7aWYoIXRoaXMucGFnaW5hdG9yKXJldHVybiB0O2xldCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtsZXQgaT1NYXRoLmNlaWwoZS5sZW5ndGgvZS5wYWdlU2l6ZSktMXx8MCxyPU1hdGgubWluKGUucGFnZUluZGV4LGkpO3IhPT1lLnBhZ2VJbmRleCYmKGUucGFnZUluZGV4PXIsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcy5uZXh0KCkpfX0pfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPW51bGx9fSxsTz1jbGFzcyBleHRlbmRzIFp6e30sVDdlPVsiZGlhbG9nUG9wdXAiXSxEN2U9WyJodWVTbGlkZXIiXSxBN2U9WyJhbHBoYVNsaWRlciJdO2Z1bmN0aW9uIEk3ZShuLHQpe2lmKDEmbiYmTigwLCJkaXYiKSwyJm4pe2xldCBlPU0oKTtSYigiYXJyb3cgYXJyb3ctIixlLmNwVXNlUG9zaXRpb24sIiIpLE90KCJ0b3AiLGUuYXJyb3dUb3AsInB4Iil9fWZ1bmN0aW9uIFA3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25EcmFnRW5kKCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pLE4oMSwiZGl2IiwxNCksdigpfWlmKDImbil7bGV0IGU9TSgpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmh1ZVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpKCJyZ1kiLDEpLHgoMSksT3QoInRvcCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIFI3ZShuLHQpezEmbiYmKGpuKCksZygwLCJzdmciLDI5KSxOKDEsInBhdGgiLDMwKSgyLCJwYXRoIiwzMSksdigpKX1mdW5jdGlvbiBPN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2VhKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSxiKCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLHgoMSkscWUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gazdlKG4sdCl7MSZuJiZOKDAsImRpdiIsMzMpfWZ1bmN0aW9uIEY3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gTjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEw3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzQpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25DeWFuSW5wdXQocikpfSksdigpLGcoMywiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk1hZ2VudGFJbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uWWVsbG93SW5wdXQocikpfSksdigpLGcoNSwiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkJsYWNrSW5wdXQocikpfSksdigpLEUoNixGN2UsMSwyLCJpbnB1dCIsMzcpLHYoKSxnKDcsImRpdiIsMzUpKDgsImRpdiIpLEQoOSwiQyIpLHYoKSxnKDEwLCJkaXYiKSxEKDExLCJNIiksdigpLGcoMTIsImRpdiIpLEQoMTMsIlkiKSx2KCksZygxNCwiZGl2IiksRCgxNSwiSyIpLHYoKSxFKDE2LE43ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLHgoMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSkseCgxKSxiKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDEwKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIEI3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gVjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IdWVJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLHYoKSxnKDQsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaWdodG5lc3NJbnB1dChyKSl9KSx2KCksRSg1LEI3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNiwiZGl2IiwzNSkoNywiZGl2IiksRCg4LCJIIiksdigpLGcoOSwiZGl2IiksRCgxMCwiUyIpLHYoKSxnKDExLCJkaXYiKSxEKDEyLCJMIiksdigpLEUoMTMsVjdlLDIsMCwiZGl2IiwzOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7T3QoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIikseCgyKSxiKCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCkseCgxKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCkseCg4KSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFU3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gejdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIGo3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDIpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MyksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25SZWRJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uR3JlZW5JbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQmx1ZUlucHV0KHIpKX0pLHYoKSxFKDUsVTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg2LCJkaXYiLDM1KSg3LCJkaXYiKSxEKDgsIlIiKSx2KCksZyg5LCJkaXYiKSxEKDEwLCJHIiksdigpLGcoMTEsImRpdiIpLEQoMTIsIkIiKSx2KCksRSgxMyx6N2UsMiwwLCJkaXYiLDM4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgiZGlzcGxheSIsMSE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSx4KDIpLGIoInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQucikseCgxKSxiKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmcpLHgoMSksYigicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5iKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDgpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gRzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaW5wdXQiLDM5KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWxwaGFJbnB1dChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBXN2Uobix0KXsxJm4mJihnKDAsImRpdiIpLEQoMSwiQSIpLHYoKSl9ZnVuY3Rpb24gcTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxQKCJibHVyIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChudWxsKSl9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChyKSl9KSx2KCksRSgzLEc3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNCwiZGl2IiwzNSkoNSwiZGl2IiksRCg2LCJIZXgiKSx2KCksRSg3LFc3ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGF0KCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCgyKSxiKCJ2YWx1ZSIsZS5oZXhUZXh0KSx4KDEpLGIoIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCg0KSxiKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBZN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJpbnB1dCIsMzkpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BbHBoYUlucHV0KHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIFg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25WYWx1ZUlucHV0KHIpKX0pLHYoKSxFKDMsWTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg0LCJkaXYiLDM1KSg1LCJkaXYiKSxEKDYsIlYiKSx2KCksZyg3LCJkaXYiKSxEKDgsIkEiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gUTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NykoMSwic3BhbiIsNDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLHYoKSxnKDIsInNwYW4iLDQ4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLHYoKSgpfX1mdW5jdGlvbiBLN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1NSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykub25SZW1vdmVQcmVzZXRDb2xvcihyLG8pKX0pLHYoKX0yJm4mJmVhKE0oNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBaN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDUzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLEUoMSxLN2UsMSwzLCJzcGFuIiw1NCksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDMpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIEo3ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRSgxLFo3ZSwyLDMsImRpdiIsNTIpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRDb2xvcnNDbGFzcykseCgxKSxiKCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gJDdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcykseCgxKSx5dChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gZTllKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDQ5KSxOKDEsImhyIiksZygyLCJkaXYiLDUwKSxEKDMpLHYoKSxFKDQsSjdlLDIsNCwiZGl2Iiw1MSksRSg1LCQ3ZSwyLDQsImRpdiIsNTEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgzKSx5dChlLmNwUHJlc2V0TGFiZWwpLHgoMSksYigibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiB0OWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDU4KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25DYW5jZWxDb2xvcihyKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7ZWEoZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gbjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw1OCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSksRCgxKSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BPS0J1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BPS0J1dHRvblRleHQpfX1mdW5jdGlvbiBpOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTYpLEUoMSx0OWUsMiw0LCJidXR0b24iLDU3KSxFKDIsbjllLDIsNCwiYnV0dG9uIiw1NyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLGUuY3BDYW5jZWxCdXR0b24pLHgoMSksYigibmdJZiIsZS5jcE9LQnV0dG9uKX19ZnVuY3Rpb24gcjllKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBvOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTkpLEUoMSxyOWUsMSwwLCJuZy1jb250YWluZXIiLDYwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jcEV4dHJhVGVtcGxhdGUpfX12YXIgcnM9KCgpPT4oZnVuY3Rpb24obil7bltuLkhFWD0wXT0iSEVYIixuW24uUkdCQT0xXT0iUkdCQSIsbltuLkhTTEE9Ml09IkhTTEEiLG5bbi5DTVlLPTNdPSJDTVlLIn0ocnN8fChycz17fSkpLHJzKSkoKSxMYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzLmE9cn19LE95PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sWWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy5sPWksdGhpcy5hPXJ9fSxzZz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PWksdGhpcy5rPXIsdGhpcy5hPW99fSxsOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEd9aW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoaSk7ZWxzZXtsZXQgcj1wYXJzZUZsb2F0KGkpO3RoaXMubmV3VmFsdWUuZW1pdCh7djpyLHJnOnRoaXMucmd9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJ0ZXh0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlucHV0Q2hhbmdlKG8pfSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsUmVmPWUsdGhpcy5kcmFnRW5kPW5ldyBHLHRoaXMuZHJhZ1N0YXJ0PW5ldyBHLHRoaXMubmV3VmFsdWU9bmV3IEcsdGhpcy5saXN0ZW5lck1vdmU9aT0+dGhpcy5tb3ZlKGkpLHRoaXMubGlzdGVuZXJTdG9wPSgpPT50aGlzLnN0b3AoKX1tb3VzZURvd24oZSl7dGhpcy5zdGFydChlKX10b3VjaFN0YXJ0KGUpe3RoaXMuc3RhcnQoZSl9bW92ZShlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDdXJzb3IoZSl9c3RhcnQoZSl7dGhpcy5zZXRDdXJzb3IoZSksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdTdGFydC5lbWl0KCl9c3RvcCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ0VuZC5lbWl0KCl9Z2V0WChlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVg/ZS5wYWdlWDplLnRvdWNoZXNbMF0ucGFnZVgpLWkubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WShlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVk/ZS5wYWdlWTplLnRvdWNoZXNbMF0ucGFnZVkpLWkudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHI9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxvPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRYKGUpLGkpKSxzPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRZKGUpLHIpKTt2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHtzOm8vaSx2OjEtcy9yLHJnWDp0aGlzLnJnWCxyZ1k6dGhpcy5yZ1l9KTp2b2lkIDA9PT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnMvcixyZ1k6dGhpcy5yZ1l9KTp2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwPT09dGhpcy5yZ1kmJnRoaXMubmV3VmFsdWUuZW1pdCh7djpvL2kscmdYOnRoaXMucmdYfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZURvd24obyl9KSgidG91Y2hzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIGkudG91Y2hTdGFydChvKX0pfSxpbnB1dHM6e3JnWDoicmdYIixyZ1k6InJnWSIsc2xpZGVyOiJzbGlkZXIifSxvdXRwdXRzOntkcmFnRW5kOiJkcmFnRW5kIixkcmFnU3RhcnQ6ImRyYWdTdGFydCIsbmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjTz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LHVPPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sSno9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKGUpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PWUmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPWV9aHN2YTJoc2xhKGUpe2xldCBpPWUuaCxyPWUucyxvPWUudixzPWUuYTtpZigwPT09bylyZXR1cm4gbmV3IFlkKGksMCwwLHMpO2lmKDA9PT1yJiYxPT09bylyZXR1cm4gbmV3IFlkKGksMSwxLHMpO3tsZXQgYT1vKigyLXIpLzI7cmV0dXJuIG5ldyBZZChpLG8qci8oMS1NYXRoLmFicygyKmEtMSkpLGEscyl9fWhzbGEyaHN2YShlKXtsZXQgaT1NYXRoLm1pbihlLmgsMSkscj1NYXRoLm1pbihlLnMsMSksbz1NYXRoLm1pbihlLmwsMSkscz1NYXRoLm1pbihlLmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyBPeShpLDAsMCxzKTt7bGV0IGE9bytyKigxLU1hdGguYWJzKDIqby0xKSkvMjtyZXR1cm4gbmV3IE95KGksMiooYS1vKS9hLGEscyl9fWhzdmFUb1JnYmEoZSl7bGV0IGkscixvLHM9ZS5oLGE9ZS5zLGw9ZS52LGM9ZS5hLHU9TWF0aC5mbG9vcig2KnMpLGQ9NipzLXUscD1sKigxLWEpLGg9bCooMS1kKmEpLGY9bCooMS0oMS1kKSphKTtzd2l0Y2godSU2KXtjYXNlIDA6aT1sLHI9ZixvPXA7YnJlYWs7Y2FzZSAxOmk9aCxyPWwsbz1wO2JyZWFrO2Nhc2UgMjppPXAscj1sLG89ZjticmVhaztjYXNlIDM6aT1wLHI9aCxvPWw7YnJlYWs7Y2FzZSA0Omk9ZixyPXAsbz1sO2JyZWFrO2Nhc2UgNTppPWwscj1wLG89aDticmVhaztkZWZhdWx0Omk9MCxyPTAsbz0wfXJldHVybiBuZXcgTGMoaSxyLG8sYyl9Y215a1RvUmdiKGUpe3JldHVybiBuZXcgTGMoKDEtZS5jKSooMS1lLmspLCgxLWUubSkqKDEtZS5rKSwoMS1lLnkpKigxLWUuayksZS5hKX1yZ2JhVG9DbXlrKGUpe2xldCBpPTEtTWF0aC5tYXgoZS5yLGUuZyxlLmIpO3JldHVybiAxPT09aT9uZXcgc2coMCwwLDAsMSxlLmEpOm5ldyBzZygoMS1lLnItaSkvKDEtaSksKDEtZS5nLWkpLygxLWkpLCgxLWUuYi1pKS8oMS1pKSxpLGUuYSl9cmdiYVRvSHN2YShlKXtsZXQgaSxyLG89TWF0aC5taW4oZS5yLDEpLHM9TWF0aC5taW4oZS5nLDEpLGE9TWF0aC5taW4oZS5iLDEpLGw9TWF0aC5taW4oZS5hLDEpLGM9TWF0aC5tYXgobyxzLGEpLHU9TWF0aC5taW4obyxzLGEpLGQ9YyxwPWMtdTtpZihyPTA9PT1jPzA6cC9jLGM9PT11KWk9MDtlbHNle3N3aXRjaChjKXtjYXNlIG86aT0ocy1hKS9wKyhzPGE/NjowKTticmVhaztjYXNlIHM6aT0oYS1vKS9wKzI7YnJlYWs7Y2FzZSBhOmk9KG8tcykvcCs0O2JyZWFrO2RlZmF1bHQ6aT0wfWkvPTZ9cmV0dXJuIG5ldyBPeShpLHIsZCxsKX1yZ2JhVG9IZXgoZSxpKXtsZXQgcj0iIyIrKDE2Nzc3MjE2fGUucjw8MTZ8ZS5nPDw4fGUuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gaSYmKHIrPSgyNTZ8TWF0aC5yb3VuZCgyNTUqZS5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkscn1ub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgc2coZS5jLzEwMCxlLm0vMTAwLGUueS8xMDAsZS5rLzEwMCxlLmEpfWRlbm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IHNnKE1hdGguZmxvb3IoMTAwKmUuYyksTWF0aC5mbG9vcigxMDAqZS5tKSxNYXRoLmZsb29yKDEwMCplLnkpLE1hdGguZmxvb3IoMTAwKmUuayksZS5hKX1kZW5vcm1hbGl6ZVJHQkEoZSl7cmV0dXJuIG5ldyBMYyhNYXRoLnJvdW5kKDI1NSplLnIpLE1hdGgucm91bmQoMjU1KmUuZyksTWF0aC5yb3VuZCgyNTUqZS5iKSxlLmEpfXN0cmluZ1RvSHN2YShlPSIiLGk9ITEpe2xldCByPW51bGw7ZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCk7bGV0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgTGMocGFyc2VJbnQoc1syXSwxMCkvMjU1LHBhcnNlSW50KHNbM10sMTApLzI1NSxwYXJzZUludChzWzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IFlkKHBhcnNlSW50KHNbMl0sMTApLzM2MCxwYXJzZUludChzWzNdLDEwKS8xMDAscGFyc2VJbnQoc1s0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQoc1s1XSkpPzE6cGFyc2VGbG9hdChzWzVdKSl9fV07by5wdXNoKGk/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LHBhcnNlSW50KHNbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0rc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0rc1syXSwxNikvMjU1LHBhcnNlSW50KHNbM10rc1szXSwxNikvMjU1LDEpfX0pO2ZvcihsZXQgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykpe2xldCBhPW9bc10sbD1hLnJlLmV4ZWMoZSksYz1sJiZhLnBhcnNlKGwpO2lmKGMpcmV0dXJuIGMgaW5zdGFuY2VvZiBMYz9yPXRoaXMucmdiYVRvSHN2YShjKTpjIGluc3RhbmNlb2YgWWQmJihyPXRoaXMuaHNsYTJoc3ZhKGMpKSxyfXJldHVybiByfW91dHB1dEZvcm1hdChlLGkscil7c3dpdGNoKCJhdXRvIj09PWkmJihpPWUuYTwxPyJyZ2JhIjoiaGV4IiksaSl7Y2FzZSJoc2xhIjpsZXQgbz10aGlzLmhzdmEyaHNsYShlKSxzPW5ldyBZZChNYXRoLnJvdW5kKDM2MCpvLmgpLE1hdGgucm91bmQoMTAwKm8ucyksTWF0aC5yb3VuZCgxMDAqby5sKSxNYXRoLnJvdW5kKDEwMCpvLmEpLzEwMCk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/ImhzbGEoIitzLmgrIiwiK3MucysiJSwiK3MubCsiJSwiK3MuYSsiKSI6ImhzbCgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlKSI7Y2FzZSJyZ2JhIjpsZXQgYT10aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIrTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDArIikiOiJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIjtkZWZhdWx0OmxldCBsPSJhbHdheXMiPT09cnx8ImZvcmNlZCI9PT1yO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpLGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWWNlPXR5cGVvZiB3aW5kb3c8InUiJiYib250b3VjaHN0YXJ0ImluIHdpbmRvdyx1OWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5uZ1pvbmU9ZSx0aGlzLmVsUmVmPWksdGhpcy5jZFJlZj1yLHRoaXMuZG9jdW1lbnQ9byx0aGlzLnBsYXRmb3JtSWQ9cyx0aGlzLnNlcnZpY2U9YSx0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W3JzLkhFWCxycy5SR0JBLHJzLkhTTEEscnMuQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmV5ZURyb3BwZXJTdXBwb3J0ZWQ9cFQodGhpcy5wbGF0Zm9ybUlkKSYmIkV5ZURyb3BwZXIiaW4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld31oYW5kbGVFc2MoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcihlKX1oYW5kbGVFbnRlcihlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKGUpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3IGNPKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyB1Tyh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP3JzLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9ycy5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/cnMuSFNMQTpycy5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj1yPT57dGhpcy5vbk1vdXNlRG93bihyKX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgdU8odGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKGUsaT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IoZSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSxpKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2coZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyx5LEksQSxPLGVlLFgseGUsZmUsdmUsVCxuZSxsZSxoZSx5ZSxKLGFlLG1lLGplLE1lLEZlLHV0LFN0KXt0aGlzLnNldEluaXRpYWxDb2xvcihyKSx0aGlzLnNldENvbG9yTW9kZShjKSx0aGlzLmlzSUUxMD0xMD09PWZ1bmN0aW9uKCl7bGV0IG49IiI7dHlwZW9mIG5hdmlnYXRvcjwidSImJihuPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7bGV0IHQ9bi5pbmRleE9mKCJtc2llICIpO3JldHVybiB0PjAmJnBhcnNlSW50KG4uc3Vic3RyaW5nKHQrNSxuLmluZGV4T2YoIi4iLHQpKSwxMCl9KCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZT1lLHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZj1pLHRoaXMuY3BEaXNhYmxlSW5wdXQ9aCx0aGlzLmNwQ215a0VuYWJsZWQ9dSx0aGlzLmNwQWxwaGFDaGFubmVsPWQsdGhpcy5jcE91dHB1dEZvcm1hdD1wLHRoaXMuY3BEaWFsb2dEaXNwbGF5PWEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1mLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPW0sdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPUMsdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj1fLHRoaXMud2lkdGg9dGhpcy5jcFdpZHRoPXBhcnNlSW50KG8sMTApLHRoaXMuaGVpZ2h0PXRoaXMuY3BIZWlnaHQ9cGFyc2VJbnQocywxMCksdGhpcy5jcFBvc2l0aW9uPXksdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PXBhcnNlSW50KEksMTApLHRoaXMuY3BPS0J1dHRvbj1ULHRoaXMuY3BPS0J1dHRvblRleHQ9bGUsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9bmUsdGhpcy5jcENhbmNlbEJ1dHRvbj1oZSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD1KLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz15ZSx0aGlzLmNwRXllRHJvcHBlcj1GZSx0aGlzLmZhbGxiYWNrQ29sb3I9bHx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKE8sZWUpLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz1YLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9eGUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT1mZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9dmUsdGhpcy5jcEFkZENvbG9yQnV0dG9uPWFlLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQ9amUsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9bWUsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9TWUsdGhpcy5jcFRyaWdnZXJFbGVtZW50PXV0LHRoaXMuY3BFeHRyYVRlbXBsYXRlPVN0LEF8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09YSYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PXAmJiJhbHdheXMiIT09ZCYmImZvcmNlZCIhPT1kJiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUoZSl7c3dpdGNoKGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6ZGVmYXVsdDp0aGlzLmNwQ29sb3JNb2RlPTE7YnJlYWs7Y2FzZSIyIjpjYXNlIkciOmNhc2UiR1JBWVNDQUxFIjp0aGlzLmNwQ29sb3JNb2RlPTI7YnJlYWs7Y2FzZSIzIjpjYXNlIlAiOmNhc2UiUFJFU0VUUyI6dGhpcy5jcENvbG9yTW9kZT0zfX1zZXRJbml0aWFsQ29sb3IoZSl7dGhpcy5pbml0aWFsQ29sb3I9ZX1zZXRQcmVzZXRDb25maWcoZSxpKXt0aGlzLmNwUHJlc2V0TGFiZWw9ZSx0aGlzLmNwUHJlc2V0Q29sb3JzPWl9c2V0Q29sb3JGcm9tU3RyaW5nKGUsaT0hMCxyPSEwKXtsZXQgbzsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbD8obz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITApLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpKSk6bz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoaSxyKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6ZSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24oZSl7dGhpcy5zaG93JiYhdGhpcy5pc0lFMTAmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmZS50YXJnZXQhPT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCYmIXRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJjA9PT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcihpPT5pPT09ZS50YXJnZXQpLmxlbmd0aCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jcFNhdmVDbGlja091dHNpZGU/dGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpOih0aGlzLmhzdmE9bnVsbCx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMSksdGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNhbmNlbGVkKCkpLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9KX1vbkFjY2VwdENvbG9yKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcihlKXt0aGlzLmhzdmE9bnVsbCxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25FeWVEcm9wcGVyKCl7dGhpcy5leWVEcm9wcGVyU3VwcG9ydGVkJiYobmV3IHdpbmRvdy5FeWVEcm9wcGVyKS5vcGVuKCkudGhlbihpPT57dGhpcy5zZXRDb2xvckZyb21TdHJpbmcoaS5zUkdCSGV4LCEwKX0pfW9uRm9ybWF0VG9nZ2xlKGUpe2xldCBpPXRoaXMuZGlhbG9nSW5wdXRGaWVsZHMubGVuZ3RoLSh0aGlzLmNwQ215a0VuYWJsZWQ/MDoxKSxyPSgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KStlKSVpK2kpJWk7dGhpcy5mb3JtYXQ9dGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tyXX1vbkNvbG9yQ2hhbmdlKGUpe3RoaXMuaHN2YS5zPWUucy9lLnJnWCx0aGlzLmhzdmEudj1lLnYvZS5yZ1ksdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJsaWdodG5lc3MiLHZhbHVlOnRoaXMuaHN2YS52LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoic2F0dXJhdGlvbiIsdmFsdWU6dGhpcy5oc3ZhLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS5oPWUudi9lLnJnWCx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJodWUiLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS52PWUudi9lLnJnWCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InZhbHVlIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUNoYW5nZShlKXt0aGlzLmhzdmEuYT1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJhbHBoYSIsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSGV4SW5wdXQoZSl7aWYobnVsbD09PWUpdGhpcy51cGRhdGVDb2xvclBpY2tlcigpO2Vsc2V7ZSYmIiMiIT09ZVswXSYmKGU9IiMiK2UpO2xldCBpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fSkkL2dpOyJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGk9L14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2kpO2xldCByPWkudGVzdChlKTtyJiYoZS5sZW5ndGg8NSYmKGU9IiMiK2Uuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAobz0+bytvKS5qb2luKCIiKSksImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYoZSs9TWF0aC5yb3VuZCgyNTUqdGhpcy5oc3ZhLmEpLnRvU3RyaW5nKDE2KSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSwhMCwhMSkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaGV4Iix2YWxpZDpyLHZhbHVlOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfX1vblJlZElucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkucj1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJyZWQiLHZhbGlkOnIsdmFsdWU6aS5yLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsdWVJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6cix2YWx1ZTppLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmc9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiZ3JlZW4iLHZhbGlkOnIsdmFsdWU6aS5nLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmg9ZS52L2UucmcsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJodWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLmgsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uVmFsdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS52PWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmE9ZS52L2UucmcsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImFscGhhIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkxpZ2h0bmVzc0lucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5sPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibGlnaHRuZXNzIix2YWxpZDpyLHZhbHVlOmkubCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25TYXR1cmF0aW9uSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnM9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpyLHZhbHVlOmkucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLmM9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsubT1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLnk9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsuaz1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcihyPT5yPT09aSkubGVuZ3RofHwodGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmNvbmNhdChpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycykpfW9uUmVtb3ZlUHJlc2V0Q29sb3IoZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+ciE9PWkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuQ29sb3JQaWNrZXIoKXt0aGlzLnNob3d8fCh0aGlzLnNob3c9ITAsdGhpcy5oaWRkZW49ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaGlkZGVuPSExLHRoaXMuc2V0RGlhbG9nUG9zaXRpb24oKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKX0sMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1ljZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoWWNlP2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMubGlzdGVuZXJNb3VzZURvd24pOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpLHRoaXMuY2RSZWYuZGVzdHJveWVkfHx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlQ29sb3JQaWNrZXIoZT0hMCxpPSEwLHI9ITEpe2lmKHRoaXMuc2xpZGVyRGltTWF4KXsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2xldCBvLHMsYSxsPXRoaXMub3V0cHV0Q29sb3I7aWYocz10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksdGhpcy5jcENteWtFbmFibGVkPyhyPyhhPXRoaXMuc2VydmljZS5jbXlrVG9SZ2IodGhpcy5zZXJ2aWNlLm5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSksdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGEpKTooYT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHRoaXMuY215az10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVDTVlLKHRoaXMuc2VydmljZS5yZ2JhVG9DbXlrKGEpKSksYT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKGEpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCk6YT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpLG89dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYShuZXcgT3kodGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCwxLDEsMSkpKSxpJiYodGhpcy5oc2xhVGV4dD1uZXcgWWQoTWF0aC5yb3VuZCgzNjAqcy5oKSxNYXRoLnJvdW5kKDEwMCpzLnMpLE1hdGgucm91bmQoMTAwKnMubCksTWF0aC5yb3VuZCgxMDAqcy5hKS8xMDApLHRoaXMucmdiYVRleHQ9bmV3IExjKGEucixhLmcsYS5iLE1hdGgucm91bmQoMTAwKmEuYSkvMTAwKSx0aGlzLmNwQ215a0VuYWJsZWQmJih0aGlzLmNteWtUZXh0PW5ldyBzZyh0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuayxNYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwKSksdGhpcy5oZXhUZXh0PXRoaXMuc2VydmljZS5yZ2JhVG9IZXgoYSwiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuaGV4QWxwaGE9dGhpcy5yZ2JhVGV4dC5hKSwiYXV0byI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiZ0aGlzLmZvcm1hdCE9PXJzLlJHQkEmJnRoaXMuZm9ybWF0IT09cnMuQ01ZSyYmdGhpcy5mb3JtYXQhPT1ycy5IU0xBJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT9ycy5SR0JBOnJzLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PXJzLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7bGV0IGM9TWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMDt0aGlzLmNteWtDb2xvcj1gY215a2EoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30sJHtjfSlgfWVsc2UgdGhpcy5jbXlrQ29sb3I9YGNteWsoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30pYDt0aGlzLnNsaWRlcj1uZXcgY08oKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgpKnRoaXMuc2xpZGVyRGltTWF4LmgtOCx0aGlzLmhzdmEucyp0aGlzLnNsaWRlckRpbU1heC5zLTgsKDEtdGhpcy5oc3ZhLnYpKnRoaXMuc2xpZGVyRGltTWF4LnYtOCx0aGlzLmhzdmEuYSp0aGlzLnNsaWRlckRpbU1heC5hLTgpLGUmJmwhPT10aGlzLm91dHB1dENvbG9yJiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKSl9fXNldERpYWxvZ1Bvc2l0aW9uKCl7aWYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSl0aGlzLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZWxzZXtsZXQgcixlPSJzdGF0aWMiLGk9IiIsbz1udWxsLHM9bnVsbCxhPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsbD10aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7Zm9yKDtudWxsIT09YSYmIkhUTUwiIT09YS50YWdOYW1lOyl7aWYocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKSxlPXIuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSxpPXIuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksInN0YXRpYyIhPT1lJiZudWxsPT09byYmKG89YSksaSYmIm5vbmUiIT09aSYmbnVsbD09PXMmJihzPWEpLCJmaXhlZCI9PT1lKXtvPXM7YnJlYWt9YT1hLnBhcmVudE5vZGV9bGV0IGM9dGhpcy5jcmVhdGVEaWFsb2dCb3godGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImZpeGVkIiE9PWUpO2lmKHRoaXMudXNlUm9vdFZpZXdDb250YWluZXJ8fCJmaXhlZCI9PT1lJiYoIW98fG8gaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpKXRoaXMudG9wPWMudG9wLHRoaXMubGVmdD1jLmxlZnQ7ZWxzZXtudWxsPT09byYmKG89YSk7bGV0IGQ9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9Yy50b3AtZC50b3AsdGhpcy5sZWZ0PWMubGVmdC1kLmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCB1PXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJih1PWZ1bmN0aW9uKG4sdCl7bGV0IGU9InJpZ2h0IixpPSJib3R0b20iLHtoZWlnaHQ6cix3aWR0aDpvfT1uLHt0b3A6cyxsZWZ0OmF9PXQsbD1zK3QuaGVpZ2h0LGM9YSt0LndpZHRoLHU9cy1yPDAsZD1sK3I+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkscD1hLW88MCxoPWMrbz4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIGQmJihpPSJ0b3AiKSx1JiYoaT0iYm90dG9tIikscCYmKGU9InJpZ2h0IiksaCYmKGU9ImxlZnQiKSx1JiZkJiZwJiZoP1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKChDLF8pPT5uW0NdPm5bX10/QzpfKTpwJiZoP3U/ImJvdHRvbSI6ZHx8cz5sPyJ0b3AiOiJib3R0b20iOnUmJmQ/cD8icmlnaHQiOmh8fGE+Yz8ibGVmdCI6InJpZ2h0IjpgJHtpfS0ke2V9YH0odGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jcFRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PXU/KHRoaXMuYXJyb3dUb3A9bC0xLHRoaXMudG9wLT1sK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT11fHwibGVmdC10b3AiPT09dT8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09dXx8InJpZ2h0LXRvcCI9PT11Pyh0aGlzLnRvcC09bC1jLmhlaWdodCtjLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9Yy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PXV8fCJib3R0b20tbGVmdCI9PT11fHwibGVmdC1ib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMiksdGhpcy5jcFVzZVBvc2l0aW9uPXV9fWlzRGVzY2VuZGFudChlLGkpe2xldCByPWkucGFyZW50Tm9kZTtmb3IoO251bGwhPT1yOyl7aWYocj09PWUpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KGUsaSl7bGV0e3RvcDpyLGxlZnQ6b309ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnIrKGk/d2luZG93LnBhZ2VZT2Zmc2V0OjApLGxlZnQ6bysoaT93aW5kb3cucGFnZVhPZmZzZXQ6MCksd2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KEJ0KSx3KGlkKSx3KEp6KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY29sb3ItcGlja2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFQ3ZSw3KSxsdChEN2UsNyksbHQoQTdlLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmRpYWxvZ0VsZW1lbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuaHVlU2xpZGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmFscGhhU2xpZGVyPXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJrZXl1cC5lc2MiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUVzYyhvKX0sMCxGRSkoImtleXVwLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFbnRlcihvKX0sITEsRkUpfSxkZWNsczozMCx2YXJzOjUxLGNvbnN0czpbWzEsImNvbG9yLXBpY2tlciIsMywiY2xpY2siXSxbImRpYWxvZ1BvcHVwIiwiIl0sWzMsImNsYXNzIiwidG9wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJiYWNrZ3JvdW5kLWNvbG9yIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIiw0LCJuZ0lmIl0sWzEsImh1ZS1hbHBoYSIsImJveCJdLFsxLCJsZWZ0Il0sWzEsInNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmQiXSxbMSwic2VsZWN0ZWQtY29sb3IiLDMsImNsaWNrIl0sWyJjbGFzcyIsImV5ZWRyb3BwZXItaWNvbiIsInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4dHJhLXRlbXBsYXRlIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiwxLCJleWVkcm9wcGVyLWljb24iXSxbImQiLCJNMCAwaDI0djI0SDBWMHoiLCJmaWxsIiwibm9uZSJdLFsiZCIsIk0xNy42NiA1LjQxbC45Mi45Mi0yLjY5IDIuNjktLjkyLS45MiAyLjY5LTIuNjlNMTcuNjcgM2MtLjI2IDAtLjUxLjEtLjcxLjI5bC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJsLTIuMzQtMi4zNGMtLjItLjE5LS40NS0uMjktLjctLjI5ek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiJdLFsidHlwZSIsImJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsyLCJoZWlnaHQiLCIxNnB4Il0sWzEsImNteWstdGV4dCJdLFsxLCJib3giXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjEwMCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJoc2xhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjM2MCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInJnYmEtdGV4dCJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSoiLCJtaW4iLCIwIiwibWF4IiwiMjU1IiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaGV4LXRleHQiXSxbMywidGV4dCIsInZhbHVlIiwiYmx1ciIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwidmFsdWUtdGV4dCJdLFsxLCJ0eXBlLXBvbGljeSJdLFsxLCJ0eXBlLXBvbGljeS1hcnJvdyIsMywiY2xpY2siXSxbMSwicHJlc2V0LWFyZWEiXSxbMSwicHJlc2V0LWxhYmVsIl0sWzMsImNsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1jb2xvciIsMywiYmFja2dyb3VuZENvbG9yIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJwcmVzZXQtY29sb3IiLDMsImNsaWNrIl0sWzMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwiYnV0dG9uLWFyZWEiXSxbInR5cGUiLCJidXR0b24iLDMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDMsImNsaWNrIl0sWzEsImV4dHJhLXRlbXBsYXRlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RvcFByb3BhZ2F0aW9uKCl9KSxFKDIsSTdlLDEsNSwiZGl2IiwyKSxFKDMsUDdlLDIsOCwiZGl2IiwzKSxnKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxOKDYsImRpdiIsNiksZyg3LCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyJiZpLm9uRXllRHJvcHBlcigpfSksRSg4LFI3ZSwzLDAsInN2ZyIsOCksdigpLEUoOSxPN2UsMiw1LCJidXR0b24iLDkpLHYoKSxnKDEwLCJkaXYiLDEwKSxFKDExLGs3ZSwxLDAsImRpdiIsMTEpLGcoMTIsImRpdiIsMTIsMTMpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkh1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoImh1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJodWUiKX0pLE4oMTQsImRpdiIsMTQpLHYoKSxnKDE1LCJkaXYiLDE1LDE2KSxQKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoInZhbHVlIil9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdFbmQoInZhbHVlIil9KSxOKDE3LCJkaXYiLDE0KSx2KCksZygxOCwiZGl2IiwxNywxOCksUCgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxwaGFDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJhbHBoYSIpfSksTigyMCwiZGl2IiwxNCksdigpKCkoKSxFKDIxLEw3ZSwxNywxMiwiZGl2IiwxOSksRSgyMixIN2UsMTQsMTAsImRpdiIsMjApLEUoMjMsajdlLDE0LDEwLCJkaXYiLDIxKSxFKDI0LHE3ZSw4LDcsImRpdiIsMjIpLEUoMjUsWDdlLDksMywiZGl2IiwyMyksRSgyNixRN2UsMywwLCJkaXYiLDI0KSxFKDI3LGU5ZSw2LDMsImRpdiIsMjUpLEUoMjgsaTllLDMsMiwiZGl2IiwyNiksRSgyOSxvOWUsMiwxLCJkaXYiLDI3KSx2KCkpLDImZSYmKE90KCJkaXNwbGF5IixpLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixpLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLGkudG9wLCJweCIpKCJsZWZ0IixpLmxlZnQsInB4IikoInBvc2l0aW9uIixpLnBvc2l0aW9uKSgiaGVpZ2h0IixpLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsaS5jcFdpZHRoLCJweCIpLGF0KCJvcGVuIixpLnNob3cpLHgoMiksYigibmdJZiIsInBvcHVwIj09PWkuY3BEaWFsb2dEaXNwbGF5KSx4KDEpLGIoIm5nSWYiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSkpLHgoNCksT3QoImJhY2tncm91bmQtY29sb3IiLGkuc2VsZWN0ZWRDb2xvcikoImN1cnNvciIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlcj8icG9pbnRlciI6bnVsbCkseCgxKSxiKCJuZ0lmIixpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbikseCgyKSxiKCJuZ0lmIiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbCkseCgxKSxPdCgiZGlzcGxheSIsMT09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmgsInB4IikseCgxKSxPdCgiZGlzcGxheSIsMj09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJyaWdodCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci52LCJweCIpLHgoMSksT3QoImRpc3BsYXkiLCJkaXNhYmxlZCI9PT1pLmNwQWxwaGFDaGFubmVsPyJub25lIjoiYmxvY2siKSgiYmFja2dyb3VuZC1jb2xvciIsaS5hbHBoYVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpLHgoMiksT3QoImxlZnQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIuYSwicHgiKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYyPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLChudWxsPT1pLmNwUHJlc2V0Q29sb3JzP251bGw6aS5jcFByZXNldENvbG9ycy5sZW5ndGgpfHxpLmNwQWRkQ29sb3JCdXR0b24pLHgoMSksYigibmdJZiIsaS5jcE9LQnV0dG9ufHxpLmNwQ2FuY2VsQnV0dG9uKSx4KDEpLGIoIm5nSWYiLGkuY3BFeHRyYVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbeW4sWGUsTm8sbDllLGM5ZV0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7d2lkdGg6MjMwcHg7aGVpZ2h0OmF1dG87Ym9yZGVyOiM3Nzcgc29saWQgMXB4O2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgaW5wdXR7d2lkdGg6MDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAwfS5jb2xvci1waWNrZXIgaW5wdXQ6aW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnttYXJnaW46MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY29sb3ItcGlja2VyIC5hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTk5OTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjojNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXt0b3A6LTIwcHg7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9we3JpZ2h0Oi0yMXB4O2JvdHRvbTo4cHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3B7Ym90dG9tOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9tLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1sZWZ0e3RvcDo4cHg7cmlnaHQ6LTIxcHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHR7dG9wOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5jdXJzb3J7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6IzIyMiBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOmRlZmF1bHR9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE2cHggOHB4fS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7cGFkZGluZzo0cHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtib3JkZXI6I2E5YTlhOSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXJ9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjhweDtmb250LXN0eWxlOml0YWxpYzt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4IDhweDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7ZmxvYXQ6bGVmdDtmbGV4OjEgMSBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7Y2xlYXI6bGVmdH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxcHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzU1NX0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2Zsb2F0OmxlZnQ7ZmxleDoxO3BhZGRpbmc6MXB4O21hcmdpbjowIDhweCAwIDA7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC52YWx1ZXtkaXJlY3Rpb246cnRsO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSl9LmNvbG9yLXBpY2tlciAuYWxwaGF7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd1lRbFpNYTNnQUFBV1ZKUkVGVWFON3RtRUdPNmpBUVJDc09BckhnQnB5QUpZR2pjR29jeEFtNEEySUhwbW9XRTBlQkgrZXptRmxOdlUwNnNoSjNXNlZFZWxXTVVRQUlJRjlmNnFacGltc0ExTFl0UzJ1RjUxL3UyN1lWQUZaVlJVa0VvR0hkUFYvc0ljYklFSUlrVWRJLzlYYTduZXl2NjErU1dGVVZBVkNTY3QwMFRXbjJmdjZ1MytFY2ZkM3RYenkvMCtuRVV1K1NQam8va3F6cm1pUXBTY042djk4WGV3ZkE4L2xNa2lMSjJXeEdTVW9wY1Q2Zk02VTBOWDkvZnJmYmpldjFXdGZybFpmTGhZZkRRUUhHL0FJT2xuR3dqSU5sSEN4akhDempZSm0vVEpXZEN3cXVKWHNlRkZ6R3dETk5laUtNT0pUTzh4UWREUWFlQjI5K0s5ZWZlTGFCbzlKN3ZkdnRKajFSakZGamZpdjdxdjk1dGp4LzdsZVNRZ2g5M2UxZmZNZUlwNk8rWVFqaG8vTjc5MXQxWFZPU1NJN04vL0srNC9Hb3hXTEJ4K1BCNS9PcDVYTEorLzNPbEpKV3F4VTNtODNvdnY1aUdmOEtqWU5sSEN4akhDempZQmtIeTVnZjVndXN2UVU3VTM3alRBQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjE4cHg7cmlnaHQ6MTJweDt3aWR0aDoxNnB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcn0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeSAudHlwZS1wb2xpY3ktYXJyb3d7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7bGVmdDo4cHg7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3ItYmFja2dyb3VuZHt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjEzMHB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU9ZQUFBQ0NDQVlBQUFCU0Q3VDNBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a3NQV1I2bGdBQUlBQkpSRUZVZU5ydG5WdVQ0N2dSckFITitQLy9Pci82MVk1d09OWjdtWjF1M1hBZUxNakpaR1pWZ2RLc2ZjNXhSM1MwUklJVVcrQ0h6Q3BjMk1jWW83WEd2M2V4N1VpWmQ1N3JqeXp6dit2KzMzWC9SLyszci9mN3ZSMzg2WStUdktOY2Yvd2RoVExQY3Y5cVUyd1pkNzR1dGgwdDE4MjFqa0laTFBjc0kvNm5XYTRYdnV0cXVVMFo4NW1ueDgwUy9aemdwbkxuT3RITnQ3L29meDFUS1hjU056Ti83cWJNUTNqdTdyTlFtTVlZZC80czJqOWFhK1ArZ0dhTWNacmIxTS90ZHJ2ZjcvZDJ2OTlQOS90OTNPLzNjYnZkeHUxMkc5ZnJkVnd1bDNFK244Yy8vL25QKzIrLy9YYjY2YWVmeGwvLyt0Zng1ei8vMllLNUFsMnJndmY0VXNicGRHckI1MmJBdkFyWHB1emptaXFBVlNHejVlRG1HWVh6aGJBWm1Dcm5temRkcFVVKzhZMWRBT1llWEN0RFV3VndWN1lDR0g2dUFteU1jWjlsNXZrVWFCUEdNVVo3L0o1dy83OTIvZnZ2OVhxOTMyNjNkci9mVHhQRUNlTUU4bks1ak0vUHovSFRUei9kdjMzN2R2cmxsMS9HUC83eGovRzN2LzF0L09VdmZ3a1Zzd29uZ2pkT3A5UHpIM1UzRDN6bVdHblpWWG40akNxczd3QzJCS1A0Lzh0QXprWnNvV3g2WHJxZUhaeW12cDRBQkNCSmhUUXdLZkRUOGd6clpDSXFpNUFoaUFDakJmRUIyclA4L1g2M01NN2Y2L1Y2djkvdjdYYTdiWUM4M1c3amNybHNWSElxNWZmdjMwKy8vZmJiK09XWFg4WlBQLzAwL3Y3M3Y0K2ZmLzc1SlN2YmV1K2JMMldNTWFGYkFscEJOTTg1UVgrY3Q2cW9TcWtQQXd1UWxCVktxR05GU1VPQUEzQm11N2dDNWhOT2QxNW5Td3ZBT1VXN0M0Z2lVQ1Y4U2duNUw5aE5GSXFUc3AwR3hJMHlzaW95akFqa1kvdEdKVkVweitmeitPV1hYKzdmdjM4Ly9mNzc3K1BidDIvajExOS9IVC8vL1BQNDlkZGZ4OGZIUndybVRqVjc3OUVYdTJweDJ4aGp3dGRKWlFjQVdRSVBMUElTc01KYVN3aUQ4Z3pJS3J3U3lBVEU1ajVuQWJSNWMxZEJVd0Jsc0VXVzBoNkxxaVlzcUZQQVF4Q3lSWjN3T1NBUnhtbFhNWDVrNjRwUWZ2djI3Zjc1K2RrK1BqNU9IeDhmNC92MzcrUGJ0Mi9qdDk5K0c5KytmUnNmSHgvamNybVVGTE8zMWdZRFdibHhSSXMvVHFmVDdvdXN4SnNBeFhBMkdjN1RBOVhkZ2Zkb0hiRnNqNzZYMisxV0FyZ0kxYWdlR3dBM3F1cHFvSHNtY2JJNkZ1OTNxdWdnRmE5ZDdMZUR0Z0tmQUZIQkorTkVCeUlrY0o1S2VydmRUbWhoR2NnSkpTWjV2bi8vZmorZnorMThQcDgrUHovSDUrZm5tR0QrL3Z2djQvdjM3K1BqNDJOOGZuNk8yKzFXczdKampQNndyYU1JNUU0Ulo4eDJ2VjVUU3drcXVvdFY3L2Q3VHo2SEZXc0QvcU5jZHcwQ1EzcS8zMjFjNjg2VHdEVklkYnV5NzN6TmxkaFNIYjhJMmtsWnpubStJbkJTNFU2bjAzMDJhQkZzTGhIREFLSlZKVmdsZkk5amh2dTUzVzUzc0xBTllOeEFpREE2TUNlVUh4OGY5K3YxMmk2WFM3dGNMcWNaVzU3UDV5ZVk4L2Z6ODNPY3orZm5zU21ZVXlrbldFRzg1V0JzdDlzdHpTTHlNZGZyOVFpMDhpWTE1VVowTGxER0xoUjNvNXpLMmo3T1BVVEQwRStuVTN0azdYYi8xNk5GYmhsb0FNdVkxempMVU9PM0JLZUlEZStaOHMzL0o0Z0ZvNFRNNWpQbXVSZzI4Zm9VS0tWU3dvMTZUZ0E1bnB5d2NXTEhnWWwvUHo4LzczLzYwNS9hYjcvOTFtNjNXN3RjTGllMHNaajRtYW81Z1R5Zno4OEUwZjErajhFY1l6d1RQRUcyY3FqeWZITkYwTThmdXFFaWFPVm5SelpaUU5oNWZ3UXlIZy9IREdmSm84OVExemIvcXV1NVhDNjc3M0kyWEtmVHFkL3Y5K2Qzd3VxV3ZhL1lUZFVkRVYzZmhJdi9WaXlwczZZRTN4M3I0M0s1YkpRUzY2emF4VkdGc3ZkKy8vajRhRisvZm0zZnYzOXZ0OXV0ZmYzNnRmMysrKy90ZHJ1ZHZuMzdadU5MQmFhQ01nVXpDK3JaUmlGb3d4VXVKSThZTXFjQ3A5T3BxNXZhZ2FZVTZsR0pBMVhRcWVqY2h3NkNqMEd3NW5ZQnJHdzAxQTJPMjA2bjA0QkdvdU5OeVRmcC9Gd0VsaFVleTZuWHJJS3c3UVFXZGR4dU4ybGRMNWZMODM5Z1NQRjhhaHUvSnZCTzQ4Q1BTdXFNZjhWcDkvUDUzTDU4K2RMdTkzczduOC90ZnI4LzM5L3Y5L2I1K1RraFBKM1A1Nm1RNDM2L2orL2Z2Ky9pU2diemVyMCtBWngvNSs4OGJ2Nk9NZGE2UzV6NmtkMjFmWUM5ZHh2N2NJSkoyZDlBT1MzMGZQTXp5SGlUTThCNERGNlhVbFlIcDRLUVczVysxdDc3TU5CMXZHSHhXcTdYYTd2Zjc4K3k1L041QStIMWV0Mjl4dVA1ZGJZdHlhUnU0QWtzYlBxNjkzNmZqUnpYUnhCYlByL2IrYjE4K2ZLbGpUSGFCQkJmbjgvbjAvMStIMSsrZkJubjh6bTBzQjhmSDV1NGNyNUd1QmhNVmswRUVuOVJzY3RnVmhNK2l4bEp0TUEyM1I4QjZ5eXNBc3RCT2dGWElLS0NNSWdUb01xTkV1MmZZTUg3enRjNzMyZFFLa0NqMXl0QVp0WTBLeDhwSXI4R0dKK0FUM1YrMkhpcmhsKytmQm1YeTJXejczdytiMTdQOHArZm44L3RVd0dWbGVWa1R5VWI2OERrZmF5V1k0enhOUmloVTRFcExKUFpWcksrdTdKNC9tZ2ZLcWVMVzlYMlJFV2xJdEwxZGl5bmJERGIzK2pYZ1lqUXFuMHJyeFdjK05rSUxQN0Y3eEliTXZ4N3ZWNTN4NDB4bmxiV0pGMTJaU2FnL04wcFc2dCtaem1PTXpIamFqS3dEZm9uZDc4ellUZGZxMTh1cDk3enIycTh2M0lpb0JwclJ0QmwwRVo5b2c1V0JSR09kT0hqSWpYRjdVb3RGYmdPV25YeklKeXpZdmpHNUlZZ3NtTU94SGt6OE9zTVNyVk5XZXE1VDhEYU9jYkV2MU9kNXJiczlhTzdZdk1ldDYzRWtGKytmTUV4cStNUmw0L0w1YkxaTi8rZXorZm5aNkthenVNcVhTUVZPNXNwSlhmbEhBSXplcy94SnNlY2tSSmlETW9nOWQ2VmZScnFYTXI2S3BWVjI3alJ3SmFjR292T0FNMXpNZFFNbndLMUF1Yks2M2tkQ0NodkkxQzdnMHo5bmYvRCtYemUyVmo4SDdHeDRQOWR1UWxzWUNycXlOOFhxRzNIbS8xME9qM2p3L24rY3Jsc3R1TStqUG1teFQyZFR1UHo4M1B6dDJwbjFYc0VIWC9iblBhVnFWbWgweHdPdDBvNlhMTEFIZVBVVTIwM3dIZmNyc3BDd21WM1RyeUI1czBNc2VlZzk3eC9Cd3pDakJsYkIrcFJBUGxhMEJWUXVUNlY2UUhkQmxqM2QwS0cxNDdiK0RxeFFlVXltRE80M1c0ZFFhcitUSWp3bUFkMHo4L2g2NXZmMC95THYzUGI1WExwcnUveWREbzlzN0VUMEkrUGo2ZEtLOVZVRUllS1dRV1BBT3JKOExLZDR2RSt0OTFZM2U3VUZsV2F0ZzJWd0puYitIUG10dm0vc2ZLNTkvT2FXRjN4L2VQMVVQSHZBNUREWURwWVhmYjBkcnYxVjJEa0JreHR3L3RFV1ZWbFhXZEM5cEZZczUvamZoOWRTLzE2dlc3czZsVEcrVGZxc3hTSkh4a1hYcS9YZHIxZXU0THNmRDZQM3ZzVDNONzdEa0wrelBtNWpTZEtMNHpSM0F4UWQ2ckhrTGtZbFNvd3NycTd6bnp1NndTd2RzTUpPWG1BNWZCY2p4dGdNR0JZSGxyNXpva2h0c01DVGdYTFFPVzRYQzZkRXlFTXByTDhtQVF6WFJnZHVpeDJ5WnpvcnhrWXNEbjNoQjFWZU1MR3NYc1Z0Z2wycFc4UzNzdmswdnc3UjRoTmFIdnY0Y0FDbDVIRnp3SUgwS2M2enU0WGpEUFIvanBBVnhXek8xWGsyRERiM3ZUY3hlR1UxaVdaSGttSURXemlXS3ZpckNKNERyYXZzNklKL0dHNmNUcVdkWER5K2ZBclFEVlZrTHFrVmpBb1pJSVRkbW1JcVh3cWE5NU4zK01HWW9aUWRSVk5PNTNZMXhSa2hPMTZ2WTdldTUwN0NhOWxKbmJHcHhPZW1RaFN3L0FRc21tcDV6VTlCaVU4RzZ3dlg3Nk02L1U2UGo0K2RvMEJ6NENwZ2lrblRVZURxd2xLQm1nM3U0T1ZqcloxQStyQWNnYWVqV3E2ZUpDdkNZRkRPTlN3T2dIWDRFUVJ3OGx4YnpET2RFSzZnWjNIazFiKzhnMm8xSkZ0S1h5di9mRWRUWHVXaldYZEFaaUJwNkFEZURyQ0ZpaW03QjZaRm5lZUk3R3ZtL1BNa1VEWDY3Vzd4SThiMEQ3L3Y4ZEE5cWZONW9hQ2Y3NFdaakgwbWYxY21mWTFZMEpVRm1WclRXdTh1emtOY0x0RWo3dTVGWEJUa2ZDNkdPQTVxOFlNeE84S1Z2RjZzQVZHZGNyVWJzS09EY1FLa0xNT01kbWx4dW02NDJZclBtMjZBbGhaVzFZQjFSK3JyR3N3RThUYVlBV2VVTXhkZitXandTdloyRWYzeXRPeWZuNStQcFZQQWFxT240M010TkJxdm1qanhiak00bFpqWlk0Z3FOTUk1a3RhVy9zWUtOd1MrOWxGUXpHaWhtTUNLUGE3K1owVjZFYjBHUm1vYnRwWDhKbGpXdTVGTUxONWphNmhHOWt3UWdacWY1KzFOSDVVeHprRlJlQ2RXaEo4WGRsR1VreE83SFJsWVJtNG1WTzQzVzd0ZXIxMlRQSkV3L3JtRU4zTDVTS0hJV1pnOW16K3BVb0tPWXE1YkpUSmRYMmdtZTFVY3hNWlFGYUVRSWxIY3QzMk0rWTFCekdrR3V6Zml5QU45eit1Z3BsWjFzeW1DckRDWVlrR3hEVHBJOVJ6Qnkwckh5ZURVQzFuV2FlVWFEOW40eGtOeVlNQkRadHpaM0IrK2ZKbFkyMVhGRE9jQVJKbGFiT3lpUzN1Q3BMSTlqclpqQ0RrYVZ2Y0NDandvZ25LU2hXZHpYWldsWk12VlRnRDhMcHFsQ0xycWdiY0IrcVl3cmdLWXBUMGNjQ3FiS3lDVmFsa0VhYm4vRnlub2dDclBLZnFmNTF4SjdzR0IyWlhjWm14b1NPenRqeDMwMERaaTdhMC8yQUlSMFVsQmFnOVN1RHc2S2NBemxhQjd2SFp2V3BqSzkwZHlycTZiS3lEVVpRYlIwQjA1YmlMUWtISWNTVW1nSUsrU3d1cWdIQ25vaW8yUlFVMXlqK0JuQnk5cHBoVktMR3lDN1p6RksxcHhXSytFOEloVkNXTE4vdUx0blVVNGF5b1lMb2FBTno4RmR0YVN2WTRwVjBCRVcybHM2MWN6cWxsQktwVHlLZ01BaHJaMWNkYzFSUk90UG12V05rZGNLWjdaS3hhV2ppUExKTXBwN09aS3hBK3JxRy9vSkxqeGYwcG5KbHFMb0RabzNneVUwbUtHeXMydGFLZWNqL2QxQytySlNwbEJxbFR5QXFnUitEOEtqS2xtUkwyZ3RVY0FkQ3RzTCtpakNOVDFvcXFxa0gyT0hFYkc1c0RGblVnNUFhK3lMb3UyVlUxcHRqMVMyWlFxdjFPUlpOOUlXelJmZ2FSQnhLb0JFOFVXeXFsSkZ0ckljMEF4TmpTamVkOTlDVFkvWERmU3pDejVNMElab1ZFc1duUEZOVHNsOG9vVkMxVHpiR2dxRlpORFNnVndLSysxc0dETUtxeFpDV0dWTUR5c2lFcjFqVlNRSlVZd2o1aUhPbFRoZEh0NDRTUWc5Q04rbmw4RDkwTk1JZ0FkZ3I0NkpxUmlSOUk4dlJkRnZicjE3bS95eFVNS2pOTE1pVlVBRHd1MkNXR2hoaStGNTVUV005TTljb2d6bXMxZG5NNHVPRi9MQUVZV2RjcW5NN3lGbXlxM0lmd21PUk9kN1kxaUZXdE9qb1k4VG80MW1UVjVJeXNnRkZ1UnpzYldGR2JOSUlKQ0R2MWRPbzRsWkc3aldCd1JGdFZUS3VXeWVDQnlKS09hbjhvWjNlcDlYZGRObDB0RHVheXdMejljWFBZZURBQTBTcGtCTzlzYlZjVE9WV2xkUHY0dXl6RWt6eEh0anZvbkhvU2tGRVdOb28xZDhEaGNRcHV0ZDJwcE5vbjRCem9BaUoxaEJGUWcwZFZ0ZGJHSEhEUVd1c2htTkVRdWtMTTJRTzFHMlk4YmdUWHFGaGNCSmo3RWpQZ2NQdHM4VVM4cVBwUEIvZFh6bk9oNVo0Mzh0ekg1ZWM2UWdyT0tyUlJmS215c0JtVURCK1BoWWFiTWxWUEVSK0dDU0lUVHpyN2FtMnRBckgzYmdjRXpQSm0rY3I1ako0Tm5ITkZEVnJGWGNJNUxlOWs1Sm53K2JlZGJWK0ZmUnpaSUhhT09hT3NMWTAvN1VHczU4RGpyR3dLTUlNRklHek9FVzEvakdzZEF0Q042aEVBSTRoQmU5WVhlUlJPQlNWUEFWUEFxdklNNWJ4NWhWS1dBTVA2ekJSeTNpZXNjcmlkVmRGQmluQnhYRG5HMkdSWTJYYkN2cDFsaHZHdE85Qnh1NWg5MDhYUXU0MmxuU0FyTUZkaXpNaW04dXdSQ3hQR25uT1M4bHdwbmJPaURxVEFqc3JSTi9QY29BU2NDYmFBQ3FWTTQweWxuampUQnMrYndXbEFHMjMvVUtiZGtpd0tXSVFQR3pXYWN6cG9TbHhQRWo4MjJjTldrcFM3Rnl6c0RycXBmZ3BHM2phaHcydmdiYVNRQXh1TFdaWXQ3Snp5TmU4Sm9acE5BY3ZERk9kdzB3cVlUOUFLMXJaei9EZGJTbExQcDByeUl4Z1FKbEs5QVpsRXE3SU9YcG9oZzlQSWhyQ25nODhKc094aVY0WldBWWZnNHNpa3gvOGt5Mlo5bDg2MnVxd3Jmc2NJSDgrdWdUbVZHeWlkZGVWWVVnRU1uNEdaemcxNEV3SXNoOXN4MmNLS2lXWFJldU9FNWd6R09RZ2RsUktWVmRsZXZxYjI3OVhxMFFuc3RzMlZEYUJPMGNvZXpzcnVXdEhBcHU2c0tHNElCaE4wYUdVMmtMck1LR1JUTjNIbWJDRHdLVjE0enZrTUVERzRRZlpWc3BWbGFOVTJtaGM1VEVaM04xaC96cVRoZXVMcFcwNVpXVEdWamIzZGJuTm14S1pCbk44SnFpZGFWTEtBT3lBUk5MUytNQjU0WjIrVmFxb01MS3JvVkJsbmdlZm5UUEFjb0hOV0NTdmxmQThDSTBIRW1CTkJuQmxYeU1yelU3QTdXVm05NFBQcVEyZ21xS3grV0RHc252aWxtY1NPQkpxT0sxbll5QUl6dUF5ZXNxM1VkU0szS2ZXY1lLRDk1SG1mWU9VM3FzZXIyQ3RZRVVBK0ZwZnFkTnZnUEJaVUJoRHJHT05SVmxRc2g4ckxjYVVDeWtIRzBPT1V3VGxMQnJzaDVzb0VNR2V6aTFFNEhSVnQxaWNwNXdaRUZYZGliQ2tHOFk4dlg3NXNiTzRFMGlvbTl6K2hqU2lPZnkzRGhwWEl0cFZoRStVR1Fkdm9XanRDaG1yR0hmNFlBektnQk5uR3R1SnhGQ2VHZGhVQWZRTExLOGtCWUFQNmd2RkpaYWpNRzNYa3ljeThLdUMwcTRFeXltd3R3ZHhkdjJNMG1JQnRLMExLbmY2NDBqMDBBdXE0Z1VrZFdHbGhzMjJxSmM2ZFpDc0wxOW94bmxUSkc0U1lWUklHcEQ4VFBGQnVNNk9FbGJTMXBsZGlkNG1HQXlONlpJdXBiQzViWEpOOWZkcGJUaFN4TFVhSThJRzFYSVlCeFczVGpzNktRb3NLY3hmeGNRbWRud1JHTTEwR25GY0N5MlhZdW5MTXlBa2RnazRtZVBpY3pzTHlndGhjQnV0NmdvT3FTN1lWRlhBRExqYW9zQjZzNm9mY1pXQVpTSVJZcVNVa2l6WXd0dFlhYjN2VU9ROXcySFJ4SUlnOFd3UlZlRTY4eGk0VXRMM3pScGh4cGx6d3VacmNxWUNxMUkzalBJNWRuSkl5Z0VvaE1iUHFWSlN6cnd6eEJKVHM1ek4rUmVVU2d4aWtQUVZGM0pWQmVOUXhiSEVOckVNTnZFZEZaVlY5bEg5K09SR0VzTlpRcHlUTmM0QzNBRzdYRjRuZ3pxK0RyTzJ6YnVhYU9YZ2RhRmNka0VvdG9TRkJWWDJxSjBDOE9XWmVHNEtHbHBnaEEwWGZUT1BDcVYycXF3UTI2UVdmRjJQTUxoSTJ3MWxWQWEyYVBzWWQwemEyNU1RUndnY1pONnVRRENpK1p4aUQ0WEVNMmtaeE9UNDFGblpuYVJsY3Bab3V6bFJxcWRiUVZXb3BRb1NCNThSVjUwbEJOckhpL0F3WFM1THJ3RFZscFkzRmMzQnlpWUdjNTJUcmlzdDZrT1hkd0luQVF0SnBwNVFjaHlhcXVZT1Y3U3UrZnhWTWFWM2RjMFJFMlM2bVVZMGdMdDJwTWNZcXJLSVE5dzJsMWdwUVVNdFFZY21tYnQ1RFROeGRoblVDalFxdGJLOVNVU3p2ckMwbW1oaEUxZTJGUzIrb3h5cHkvWkFTdXRrbXRqeDN2Y0JDMjRQWDY1bmJxa0JDUmhmalM5a0lZUG5lZThjTWFnVk9oSS8zVDFmQW1kdEFXWnNDc3dUSkNrUVZOYTBxV0tTS1BPcEhBVWhEOURyYlZjeW9Za3dxaHZoMTd2WUFheVhMUXlLR1lkeGxVREZwNDk0ckJYUmpZZ08xN0REWWV0TklVai9lenA2UzBsbmxwRXdzV21KTWtPd3NLWGVaS0VBaklIbjBFUUpJU2FSQmNPNlVNSU56N3AvYkVqam53NGZ0K3htRHZrc3hYNEcycklyaXM3cWFlS3dBRk1QMk9pN240Y3JpdVp3dHBTVXdwZkx4U25PUlNySXF1c2M1WkZhWHlzcVJXamlaMkR5QVdFSUwzNXRWU29RRWxGQUNqT2VHR1NFN0FIRVFnZG8vTFN2Q09nR0J2a3hzbURidmxTM0ZwNXZoYUIyVEFHcVJLcktLTXJoTFZwYUd6RVZqWjBPUXhEaGFDVEErUXlSUjFkMTVhUXpySm50TDNSaWJzaXBqRzZqbGdMNHlxYlMwc05ZZzFlODR2aGJCVnJFbEs2NENVY1dZWERmS3hocEl1eGlWSlpVeHNiTXkvdVJCS1ROUlE0a1EzTGRSWUxTMHJKalJQbFRQcVk2Z2RKc0VEYythUVhBbitIZ3NOVUNiUnVGME9qMHp3bkE3YldEa2JoTzVFbnMwMHFlUWhTMWxhQk1sNU0vY0FheHNMRjhyS3lxbCtUZjdFTExFR3UvaXhpaW1kQ3ZvMFRqZnBqS3dhZ2dlbjRlaDV2N0xva0xLYkx1eXZIaGNaRzhkaEdyRUR4N0hnOTNacHBKRjdxQnFPM2lWdmVYRURRTkluemVvZThZcTZlUGFaQloySnZpTTNXMlVBR290ZWtSQ0FHcTRFa0YxWDNET25SMTF5UnNCTDF0UmEwUFZjWmlORlhaMmMzNEZza3ZvbUluUVE2bHpwSm9aYkp4azQzTndLSkZCcXVKU3NyQnlIeWR4S09uVHhRQVNCbVMzaitKTW5zSFNsYTNFYzZLOVZXb0pWbjl6Zmp3T003aHFZQUFxSlF3RTJhM25BNDhKMlFHZWdSa3BaTml2U1kreXMzRWtLZDRvSkl3c3ZJSGwzY1dnTHQ1azROSDZPbXRMV2RwdXJPa3dFTXVwWWM3ZU10RFJoT2NJMnVpNUpoVkl6WHpMeXRvL0dBUHVab3lvOHdrb2R1VmdKZ2xDdDdPaEdiZ0lENE1xNHNpKzYzelVTMUZ1RkZYRmxxeWFqMmVtSGxMTWNCcVl1MEZNdVIyOEJiQjdsT3hSTVNpQ1FYRmhDS3V3a2haK3BZRGlHU2dic0tLVjhNaVNSc3VIU0lXTTlya2xSaUlsWlp1cVhqc1FLOG9vWUpNZ3EzSktXVmtoSGJoc1Z4RlV6dGhPV1BrWWlqY2J4NTRJS3NTZFQrdUxyM2NyR0t5b1lnRmlHUjlpQms0a2Zsb1VYK0pJbFFSUXFhYm1wZ25ocXRwUXBiNlJWUTFXSDVEbnJTNGhFb0dacWFlclEyZGhGYno4WGVQeFNobURibzcwZUlTam9vck8ydks4U0pYSTRTVW1FVTR6V0tEelVEdFdUWXc3eFhsYlNURWo0RlJnN3pLbktvR1JBTHYwR3M5VGdjMUJwQ3l3R1pSUUF0cVZ6MnhyQmNBTXpFcGZad0ZTYTJHNVcwUUJGalNNYXBXQUVGYTNIY0dON0N4RHpFQ3lJa0o5N3F3cnFXTlRXVm84NzZQUHNqUGtqMnd2Z3JvTTVsTFpLTUVUS1ZxbC9Ddm5XVkZpRmEvU3pKVVF3a29ac3I2N1k2dmxTUlYzLzJ0bU5UT1kzdm5heFl3TXVvUEtxZHpSMXc3SXFIeW1sUHhhQVRoZlU3S28yWlhZajRBWUpITCtrTmRLd1JRWUVTVFJhNWZzVVovclZDMVRNVHlXVnlZb3FOdHV6YUhzTXl2MnR2b2FyeGRmcXdZZ1UxYXhGby9jbnFsMUZHc3FLK3VBUk9WOEJYNEdVOFdjWlRBVGkycTdRY3lpME8wVitHaFdCTU5SVWtuOEgxU3NXVkU1QnkzR2kwRUNxVWVKb0JmQXREYTRhbWtkWEczN0FHUDVHZ2ViODRwN1VhenBvS1J6ZEZ6ZVE4SGtvSEd4cHJLeS9IcG01dDEycDQ3SjZ4VFlERXo3dUlORVhTdXhZWHZGc2tZQWMreVN4SDlzZjVmdEt6VTZJYndWQmNVR2c1ZTVGTUNFWFNFclpSMHdHYXlWMTl3b005Z3VQalRxSmRWVHFSNHVFNG5KbkxsZFdWa0VDQ1pMZDJWTEYreHRhbWV4N0lwaXJpU0RVcHZycG45bHJ3R01DSHlwcE1IK3BzNkxJTHN1RkdVajFYRU9YaXFicVNIUFVLbkNscFdWNjhrcXRVUlZORFk0VE5hb2N5a29ZZVRVNW5nR0VRYS9TMURubkU0QWVYTWNLakhQQW1GVmpDQkVOYWV5TFZOSGZyM3B4OHhVc3RKOTRoSXBmSDRIS0UvZURhQXJLNmxTeVZWRmJkdDFneFRJVmszcHBwVmxGWGk0cEVoVkJUT2JxdW9oVTg1TUxYbjFpYWh2VWtISmpTQ01jMDF0TEZ2ZVZWQngwRG9kTTZqZnRDdTdET3RJell4cmMwcXAxSkdQMmF5WUZ6MkdiNkh2TXJPOGNuR3RWNkdqbTN1SW1TZkQyR3BXSzZ1b3diWkdNeEZLUUNvMXBPTXRjTVhGcFJzdCtoWEdvQW9tRjNzU1RCR2dUZ2xiQktXd3NRM3RacWFZU3AwWjFDaW1SRFdGY0NKVVBZSjAwQkk1RmtLWU5vaWZ1UXhtTjg4U1dWWFdMTWFVcXFxZ0MwQm1RSlI2c2szdTlOQ2Y2allMWHhBZnFzWUVnVkxBaFJZMkF0Z3RmbFpORm1GeWh4ZHJMa0FkV2xrNEQ4OE0yaXhIeWVwSWRoTUhyRy9pUjFaR3RxME1HcGJEYlJQWU9YZVNZMU02Tnk0WnN0dkdTa3RLK1hiRlBBVGoyRDM3MXNhUEVzQU1YaFhyc1owa20vWFN0a2hoTXlCZnNhNnVYRlplMlZDZStZTXIxK0dLZ3dyUXlOWXExVlJyQitFaXpBb3c2TnNkTktjeVZFa1llTTczeXM2cTRrQUhwNkJpRmtsVGtJclZDNW9ZVjd1endPR0N6NFVKMFN0cTJsV01KeTR3dGIrUmV0TDZ0WkZpY25KbUJ3NVVqQ3ZYWE1aVkpYMk1Ra2JmK1hONUVXZDc4Vno4L0pFc01aVEJpS056c20xaW5MUlVRNzRINE5pZGFxSTY4ajVzQUZneGNSdmVDN2llTEpYZlFZeGpaWjJDc2lXRmV3WlhKbUJJbFoxdGR0clg0aFN1YXRlS3NvL1JaT3RPS1cybm1xMW9UemVLNmRSV0FXdTJOUlZiNGhxMFNYbTFHdnR1Z0hyYnI1SVhxbVNrdGc1Q3VERTJNU2xQd3NZNWtORTJXcDNBcWlaYldWTEF4aUJGKzJpQlpidU5qNk1CNnJzTUxDN0Z5YXNhWUR5bzdLa29QeUV0dzNwRU1YZlB2eEFKaTJqQVFRZ2pyejByTElaU1dabElvTmh3ZDV4SzRBUjltWU5qV0FhTHJudUltSmVCVk45ekJPUk9iVnZicittVFRmRlNFSkxTUm5IbzdoRUpvSWk4TUZxanhtdmdtRjVVUlp6NHpMRmdaWjhDdHUyWDdnZ1ZjY0ttOWdWeElzT0hxeFhnTk1LbkZXWlluZjFkQm5PaGF5WHExN1F3RmxXVzA5ZU5LeVZKRm1YcWFPTkdBNWFDZWdNYkozVVVrR1kxaWMzbktXZ2pxOHFmVllHUUcxZ1J0NnJzNjJhNkhpcXFVT3FkZXNLNU5tWDRuR29mSm9pRTFkMGRGOWxWVmt2VDEva0VFYWFDb1lPd0ZwY1Zjb0xNKzc2NjlQeEM5cldxa3RIMHNXVVlsZDBWQ3B1Qlovc3RWUmNHZ3k5V1gyK1UxUXRoaTlTekFxU3h6WnN5K09pRnpCWW55U0dWNkdrdTQ0ckQ4QkNPWkJWM0J2RDUrQUtSSE53TUVzQjZFekhuSnBrVEFlaVVsRUdrY0VDZUI2R0RaVHA1WUVKVGx2ZHJrbnhZalRsbE1rZk50WHdEak03dVZqSzVKWFVVbjQzcnJxcEsyanl0YXhIVzBNNUc4REM4cnRITVlzN0tTZ2R1VlFNR1RZRnFGdlZTNnJrRDNzREo0NmFmZFlGd29xMTFBT0tDQkxodndvVWdjOElHQU55Y1I2a25acmRKUGRzdXhueWpmZDNGb3ZUbFJNZEVkdE9sNUNNVjVFSHNYUUJpczdUT3d2SURaYUdqMlZucGJoN2NwSzYzVndZRU1Md3Fianp5bDY5OXNhd0ZGa0YxeXFqVVUzMUhmQzZzVzFaRlZGdVhWWFZnejlrZUVhdzB5czFsV2ZtK2F6UUFRU1dBK2hLWVZmc1pqUG5jQWNVQjlvSWF5eS9VWlhSTmNrREdqaTc3R3NXYnZCbzZ0UHJXUHFPeVZrQlVxK0lOZXFwek5kWXMvdTBpZmg1cW1wcUlXKzMzSlZTVWN3WTcwS0w0VTlsWWRVNmxqdFNsczdsbWZpOWczWXplUWZWa2FHRmFWM09EQ25hRDJOOHdzRURGa2xFM1J6TTNaZ2hkWWtXSHNzenE3MEZJZWNuS2tWa3Q4ZXpNelJxOWJrR3VLb2pSTEJWU29kM1kxeVBxS2dZVzdKUlFUUFZ5eTV4SVlMak9neGdUNTJSS0pVWTFkT3JJaVJkNGZ1dFF4L0E1QWNTbUVqejB2Rldya0x6dmJXQXU5SE9XYkdneEZrMVZOVHBuQktrNlRnd2lzSS9IY3hZWFAxdUFXTzcyVUxGbEJUcSthU3UyVlRVczZocnhNMkNGK2hFb3IxVklBOVptRlVhYWIxbFNTZ1pzVnM0c3h6SGxWTG9KSHI5SDREaE9OVGtJMVhDMC93aVkyTm9XQUc1UmxuSEZucTZvTGNjcFFkZE11Si9PMTdKVkE1T0hMaTBCcUN6dHE3WTErK3VjQ2Q5OHFMSThNSUhCVi9jS2p4UVRtZTNoRkJTM015Q3FuRHN1eW0ybzgwSGp2RkZUdHJVUm1OYUdKc21WYWhJbWpUc1VYS3RRWlRBVnM3TXZ2OC8rZnpVclpBWGNMSjZNNGtvZTZYUDBiNlNtV1dORHp5VXBROGJsK0x0V3g0dHVxWjM2Y1JZVjN5dVZ4UE53dklpcWlRQ1NtdTdzcmdUelI2bmt5aHBDYXJYd0Z5MXZHZDVpUDJjWTA2bEZyNU5qaGhnMVk2K05CMjhmdGJLODNzOHJmN2tMSmJLd0RGUGJMZzI1YTBBZFpKRWlxcjVwaGl4S01EbFJVdGNzc3ExaHJpTHFHb0gremVOZ1ZtOU9lbWpzRVRWOEpkRjBOSG5rSUZ4V1kxT0I0WXJwN3J0V0o3TmdBQUFQWGtsRVFWUTNvTnM1bnBseVZmOHUyRm9MdTFKckh2ZWFaV1FqcUFrc2h0RmEyZ3pzU0czWnBrYnZnM0hhZkY5c2xQUGxsZGpGbEs4MEd5c204TXI0TVBobmVOV0VOUEdqQUlwbWlsVFBBVGRUUlRYbENCWUhZQVF1UHdBMzZ4SXBXdEdONHEzWTJNaGlHc1VwdVNTbmxFSlJEOFBvckM3Q0ZZVncrRjUxcVRoZ2FieHNUeFd6Q0dZMFpTc2IzbGZxQXkwT1BOak55OHhpUVFLc0hZRlEySEJaVnZWYkJ1cTNtMW9XS2FqcWFvbnNNNnVaVXI2Q2pYV05aMGw1RTNoM2pVUm1hNmtQM01KSWl5MUxtK2thaFFxNDFOMmlaamE1c2p0bExZTlpIWnJINnFVR200dk1iRHA2UncyQ0ZtdnV5RmtyQmNDeU10RnFCYUVDbXNIb0s5QloyTEEvbEpjUnFTYURxbmFXYnJaZEdhejNETGdJdkJsbjR3b0d6dGJ5Skdxc2x3eGtoaEhyVGpUWUZYQ3RPb0tTOHVMZG9mVmRBYk95bEdVNm5sWXBYV1p0czRuWEJxNld4Sml0TU5va0hVSm5ibkpwbFFtK2FHcFkyYTVHTVYyUUQxaFJ1YkJQRktkdW1mNU9Ia0xIejBGOWx1RTVrakJqUmEwbkZFNUNVR3FIdzMyTW1qWjZ4a2dJTlZuU25aMVZaU3RLMnFLbFJhTGxRZ0s3dVRxN0pGWEp3TSszU09FS3loWk5JK3RKMEk1cU1ZeTlrMnFKRDdkVldkcUtYYTBDS05SMENjamcrQjJJWXUyZmNCWkpaa01GZ00xMXIwWDkyd2lsZ2hGR2d6Vm5leGxxQjd4TDltUzI5U2lZVVZZMm5YT1pqTkJSc3lEc1FQUldXNWhyWjRYY2RDNEhWV1JiamdKcjRzRm9mSzVTempRN3JoSTFVZWJkUGRFYmo2c3FJdlRaUVo1dmEwOHJBQnNBVzBVeGVXeXRBazdBMktKOVpweHpDaW9CMjRYRnRZQWVYWXhyNmFuU3FoTGdwcEVxV2JHd0x1blRnclYrSWpXbEwyOWxqYUFsNEVRTUdzRXJwNGFwZVppcXV3UlhMWEFxT0NlcnUzMm1teWRjNm9XVFNXcEZBR2R6ZVRCOFJUSFZNRXRsTTkwQ2JiUUNZaFBqcTNlZ1lyMUZHZFlJUWppdURHWjV6Wi9Bem9iS0dPeUx4dGk2YzRSd3R2MmFueVdsTElDbmxMaHhKUlh0NkE1ZWJEQldGTk9OYnhXWjJkMDJtbnU0UzlZRUNwZXBwVjF6U1dSQld4SFl6Vkl2MUNYU291d3FxWDNqQkJCRFpkWVFicFRRVzRaUWxTOHI1a0g0c3VTUm1nMisrM0pOMTB4MVBhQW1Fa210WWxFZGVHcEpFTTZrT3VDcUNSMjJvU3VqajVJVjJIZFQwemo1cHJMS1RqWEZBUGpkUWx5cTd4SUJ4QVFQNXlNY3pHNFZ4QUt3MG42aWxaMlFCY2UycEx1bGt1eHhxbm9JekZmZ3F5cWppbDlTMVZOd0JyRm1leWVvcHM4eU9qWlV5YlpkZlM4Q3VhVElKdW16czV0T0RhTnRMcEZEUS9QY0pHd2VMaG1lTDFuQjBLcWlVRFNjc2lVVkQ4OURpM0h0ckt0U1VMdzNSTGl5Z1pEKzdzRjhKVE9iZ1lzckd2RE5VRlJHbDFpeTBMbDFZa1VjMmFKWU1vZzkyMEk4cVc2WURDZzFNcWswSkhKRktYa2JnYlJyZUkrcXBZTk9aSHJWY0RVYmE3cGpzcGhTSk50SzZ1cGdSTkFWb09TMG11Z0JlTjRiSVpnSGh1UFovczFFTmFYNktzVnIrWU5yaDFOYjdpcFIwUEU1emJOUmVnQ2JySFJVdzZZZjA3ZExCSmwxZjhLQjlhczJWMW5OcUFzbDYyTEJCaGVod2FsZXJrSG1CMUpGSUVaS1NFdXNkbDVKUWoxbkpsSFhTQ0YzNDJnSjlDWUdyWGVsa25KSVhxVlA4c0QrcXRwbENSM1hIMnFmS3EweWdNcCtLblZrS3hObFo4bTJZa0lsVk1pQ25YVXdsN3F6bkJLU3ZRejNtM1B0Nm9RYlhPNWI1Rml4Q2gvZkh4VVFXL0FFY0s2ekNOcUtRbkw5c3l3cW1LdXd2cVNZelQvYVBWTk5wVnlodlJXMjFhcWNpQ3NqZFd2QndJTFV2aDVWeUN6YldvQzFwSmpKNjgwQ1dzbCt1ZEtCNlQ1UndHMW1sb2hubHBiZzQ3aXo1VTloYTBGR3RtUkxGWUJ0Tzk5eTk3QXAweitaRFRBb2c2a1NMWnNNSGcvSUZra2dwNkNwdlUyVTBjWVZTZG5ta2p3QmRPbVhieFRXTld6dUliaXBNaW9WeEVja1pFb2FoU09peTJNM0swamNDMUxoVkR3YXFHMFp2a2NXcUNuckc0R0l4eWtycWxiV2R3NkxReUJhWlI4SG1MUkloUVdzSHN3RDQyWlhWTE5rZjlsK0ZsVzBIVlEybHdGc0MvWjFGZHpsUVIwS2FQZm8rRmRmdSsvZHdWUklDdTFDR1I3QUVJaUFoYytBWlVGMGtPQmFQeG1VcWc0aTY0dlFuVTRuRkRZSjlOeisxZlZYdmVIOXFtcitrUElMeDhvS2NSVi9CRmJ4YkUwSk1UMGtTRDR3NkwvbE5ZOG9jc3FhZ1ZkVTNBM01qeGh4Y0d1cXpzUEg0aXJwYW93MXE2T3lyVmp2cDlOcGM1OUU5MUxsZGJvWVZ6SldkaW1XZkFXMlNORUtjRGFYMkZtQkxMQS91S3hsbWhoNjEzSXMxVVJRQXBiS2Z0dHd4TDAycTZPbng1cFF4U2JQb2pBZyt2NWhBbk42TEhWUkRYSXN2S3RSamlTMHFKVXlaVEFYVmJBSzgyRWxGSldhUWRWb3FVQzFVbnQ3QlZhVFF1ZE02U3VxZXhqUUpONCswaWNheHYvdXRiS3Y4M0VUYlQ4SDhnamNPS3hPSm1iVWE2T09WWGh0M2RGWTZySHY5WG9OekZMY2VFQTFvOCtwS20wTEFIUEhaMnJZS2pGcTBoZlpGaXhzcUhKZ0QzZUQ1bitVMGtiMW1GalhrbjJsdk1TU09zTkUvQ2RJQUtGMFN5dHE2dXJPSFVONWd3ZzRHWm9zZ2JtZ2dNNXVjcmEycXJTMklnMWNiaUJCY3hZemd6VUROTEN2TDhHYlpYTnA2T1J5M0xtUytLazgzelJJQUs2QTFpb0thMkk5TmFwSXVpVUZkZkM5NzY2UEZaVXRxVXI2S2JXayt6WlUxYS9acklYRXp0cmpUT2Z6N2h3S3ppQ2VYSWFyYUh0YlpJTXorMnBHZ2F6Q213NHFXQUZ2RWRob2RZcDBYcTBwVjdHMVlXWVdiTzRxaEdxNDIrWjhCWXRyTFd2bHVOUHBaQWVhRkZTMXZ1YlBnYmd4c3FjcG5BYXN6Qm92S2FGb0RROEJHdGpmVU9sNE5BRzJubVFWMDRmZUpndW12WDJmc3JRRVdaZ2hMMEpuVmRZa24zRE9aSWVSTjg2UnFQV0Ntc3ZHVnFFTVJud3hRQXh3UzhFTVlvM0l6bVkyK0JDY0xwNE1LaXV5dWhJbWFtbGJaRmNOb05sN3RwK1JIZDE4WmpRSVJLeVhkRlJoTjk4L2h5S3F3WFdObzdPMXdpYVhvSE4xMDhSRVpaV0VxNmdybklmanplZzhqZFJmMVhFTDRra1hhNWJCakt4b0thbGpCamVIbFZ4UTRHYXljcFc0bERPQUt0blR4SEF0T2Z6T3Rad0hBTTdzcVZYa1Y2eXU2a2FwMW5Ia1hLcVdGLzRYSHFqZW5OS3FCanBSM2wxY2gzRWpnMStFc2dkUWhzZEcwQjRGTTlzV0FWV3B1QXlpd1RQbGVaeHQ5VnlaVlMycVhmUmVXcVRBaWxwcjlBcG9XVGp4eW1pdDdOd1Y0SlRyaVp5T0E5QjBrN0hGZlVMb3VybUtZSFZuUlF2cUdMNUhNSGRxRmNSMnFXcG1jSzZlVHd4MmRpcFdydmlEaWxyK2ZLV3EzT1dSV2RIS3dBNGV1OHdqY2hiZVJ6RmlscWpqWk4zdWZDcGZrSjAvc2NWcG5ZazZMMFBJNzdseGRXQ1o4N1dpV203Qi9BR3F1UVNudWpHS3NCOENKbWlKcThxMXBLSVZXeXFPaVRLNjZyMThCTjhyNzQvQUU3MWZkQzN5UFMyTXhkT3BuRTF0bFZ4RDlKbVZPb2dnTityNFBqQVhWRlBhM0VnNWpWSkdGVlVHTm9sSDIwR1ZyVUI3Qk95U1dxNldxWVFkV1I5MnBjRk1ZTXdja2JTZ0NLQ3FENjdEaWlXdTFnOE1RQzlCeWZjRnFXMUwrakw3MTRxTkN1em5vU3h0MGRhMmd0V04xRzhGMEJLME5OMG51aW1lbFVGOWRJZEFmak80NFVUM0NqUUxvVWVMSEpGVE8zZ21wUnVJSU92d0JRQ2JxTmVvM3F0WjlpRjZ4VksxM0dSbG80enFpbXErQ0dkVGlSMXVSWThvcWdFMDJoWkJhNzlrWlhQTXF1eFJIS2xhMnNhWldONG1ScVpVajB2TENLaGtqS25xT1FITnVTWlZKb0t2QXFTMXdwRXF1dldEQzFCMnlwd3JDUHNSTUVQVlRPRE1MSk1EdjZxZUtYd2kySllWNVNxNHFLeXZnR3NIQ0xpdWoyalI1OVY4Z01xU0oyRkpaUlhFSFZSSGozc0ZQcmN0Nk9wcWxXMUdwYXRRZHQwR3Z3Zk02bjYzSW5zR1ZGaEpHYUJxZ3FxSVY2SXNYbGxaZ3lTUHE0UjNibnQzd2k1Y3YrY04yeXFRTFcxVDk1S1lWc1dXdEtrNGNCOVc1M1dRUWZsUVlSNldsNEhhSlpqdlZFMEQ1eXZxK1JLZ1pDczVxZEJFUDVzRDk0Y0F2UUxsU2dOYVNNQXRIeDg4QnVOUTQxemRGc1gzMHpLYmNzME1MRC9paGtwUXpsMHdpVHFLTFRmYkttQ215WUlDbkswSWJhaWVDNENHOWlTeUxRN2NJTUdRd2F1NlRLb3E2MEFwbDNXTjQwTFpwY2ExQ0tLSzlWUXl5SUVuOHcwRjhGNkNMMmg4bzNpeEd3QzdzN0VXekNPcW1jQXBZeFlENGpzQXpWUzBzbDJ0OThwQTd2cktvcGhDVlNvbmJZcGdINm12U24yNHBUQlY0c2R0VjNCdE1xNWs4MnkrSUFEdlVKMHVBbGtDVlR4SWFQbStVTnUvcWtWNEYxVHpIWENHclhJQXFJdEJLeXBxSzk5VnRBT1ZzNjRPNE9iWDdwSExWQ3BZSGNSbXd2TFI3VHZZQUtCQk41OExHVnpEdUZ6K2hRYldnbmNReUNaQWsrVmJzUFNvdWY5MzI2MWlaZ21mQ3B3UmJBdnFtU3FyaVUyUHdoamFvT3lZcXRJZWdWWFZpVHNteXRhNmJHeVNwWTNneVJycEl5QWVhV0REeHRwc1h3S3lhbE1ES05QN1lCWE1xRXNrVXNpMnVDOEZOQVB4QUtUVmZUMW82VnpNMEUwakYrMXJXY1V1SHZkeWc3dmdvRnBsWDhIcHZIcE1DT01SVVBIelprSW5zcWxGS05YL0VJTzUyRTBTeFN6T3dvYjJWbVJMVzVEMVhJVTByYmdNMUF6V2d5QzdmZThHN3hVQUsvdGFFQmF0N2x1cXR5UDdFbXNhSlFPajVGK21yblpmQ3VZQ2ZCVUFXd1NoeWQ2cE1ZL3ZBSEcxVXFPWXBiSS9neTVUMENNS20rVU8zZ0Z1Qzg1ZGdmRFZlZ3VQRGZJVHJJQkxzTHJjZ2RoM0NGZ0ZaamFLSjRJdjNGOEFORXF2dXhSMXRWS09nTG9DYTFqeGJvQkFrajZ2N2ovaWNGYkE3ZjRyZlJuUURMUlZpRzEzaTB2cUJRcllWcUJiQURaVDBacGlIb1N6dlFwb3BLSUZTM3NFMUhmQldsSFhkMEg3TG5BcnF2b3VnTXRsakhCZ1puaDNFb3ovQktqTE1MNFoyQXEwK2hFSnI5amFWVUJidk56Q0lVaXJvQzdBV21tRnc0bzVBSzNNdEI1VnlwWk1TRmdzMDVKeUdWd2x3QnFzRUdBQWEyWlUxQ2pVZXhYR3NFNHJLcmlpbEJ2RnpPS0tvM0F1QXJvRTZRRlFVM3U4WXBOWHdTNWsrMVRadDVVcndvdU40S2lVRXcrazNaV0RwMVJYSE5ScVhiMjFUczM5OTQ1eVpTZzNWblpGTlE5Q0YzWGVaeXI1RGdCWEtpd0NNYTJNeGVURFlYZ1AxRnNmOVFOS1pjMGs4MVJKazNyNkVRM3JDbUJWeUxMNzVFaloxcElWREhvRnRpT0FIb0IwQmRUVnlscUJzS0tLUytBZUJYSlZMWStDWEFTdUd2Ty9BdXE3R3VFakRmR0tnMW9LYTF6L2RtbWk5STlTVUdOaGwwQXRmdWxIQWF3b1lyblNrbU5YQVZ1R0VockVWWHZVRitBNUN0MlBxTk9qRGV0eW5hNENtZVVvbG1lWExONEFxN0M1U2oxMFE3eWpnbCt0NkNOeFNSSG1JNVgrQ3B3cmVZQjNRZmRxbmE0cTIxS2RCdWM0R29ac240OVpPT2lWaW53SHFLOVd6anZnZXdlRWgyQVU1K3Z0eFo5Q2Q5V3FraDQ5VjE4RTVvajZ2VnluMFJTdEF5R0lPNWVkWFJLZDVCMFZHVlhxMnlyM3hZcCs1VXQrQzRRSjRQMU4zMzlwUU1qUmVqajR2Yi9EY3I2clFjM08vMHJqbXRacGVZQ0JpQ0hmQ2VtUmJOaGJLL3BOVVBjM3dmS3k1ZjJEN09sTDMvdVBodmUvb1U0VDBGOGYrVk5NMnZ5b2l2MGpLK0tIUWZkSHErMGJuY3o0b3o3My8rWTZMYkt3MW8vNUI3ZU9mMVJsLzBkdTlCOXRuLzlidnJmL2ordjBoNnR0bjJ0cC9yLzQ4MTl5NC96djUzOTF1dnp6ZndEaWZ6NnBoVDFNUGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmU7cGFkZGluZzowO21hcmdpbjozcHggLTNweDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojOTk5fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTVweDtyaWdodDotNXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2NvbnRlbnQ6IngiO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozLjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweH0uY29sb3ItcGlja2VyIC5leWVkcm9wcGVyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7ZmlsbDojZmZmO21peC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn1cbiddLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFhjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLmluamVjdG9yPWUsdGhpcy5jZnI9aSx0aGlzLmFwcFJlZj1yLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPXMsdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcEV5ZURyb3BwZXI9ITEsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwVG9nZ2xlQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgRyghMCksdGhpcy5jcFNsaWRlckRyYWdTdGFydD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlck9wZW49bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNhbmNlbD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlclNlbGVjdD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgRyghMSksdGhpcy5jcENteWtDb2xvckNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFByZXNldENvbG9yc0NoYW5nZT1uZXcgRyghMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KGUpe3RoaXMuaW5wdXRDaGFuZ2UoZSl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKGUpe2UuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJihlLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTplLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSxlLmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKGUuY3BQcmVzZXRMYWJlbHx8ZS5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgZT10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7bGV0IG89dGhpcy5pbmplY3Rvci5nZXQodGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0sem4uTlVMTCk7byE9PXpuLk5VTEw/ZT1vLnZjUmVmfHxvLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWY6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1sZXQgaT10aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh1OWUpO2lmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYpdGhpcy5jbXBSZWY9aS5jcmVhdGUodGhpcy5pbmplY3RvciksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNtcFJlZi5ob3N0Vmlldy5yb290Tm9kZXNbMF0pO2Vsc2V7bGV0IHI9em4uY3JlYXRlKHtwcm92aWRlcnM6W10scGFyZW50OmUuaW5qZWN0b3J9KTt0aGlzLmNtcFJlZj1lLmNyZWF0ZUNvbXBvbmVudChpLDAscixbXSl9dGhpcy5jbXBSZWYuaW5zdGFuY2Uuc2V0dXBEaWFsb2codGhpcyx0aGlzLmVsUmVmLHRoaXMuY29sb3JQaWNrZXIsdGhpcy5jcFdpZHRoLHRoaXMuY3BIZWlnaHQsdGhpcy5jcERpYWxvZ0Rpc3BsYXksdGhpcy5jcEZhbGxiYWNrQ29sb3IsdGhpcy5jcENvbG9yTW9kZSx0aGlzLmNwQ215a0VuYWJsZWQsdGhpcy5jcEFscGhhQ2hhbm5lbCx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BEaXNhYmxlSW5wdXQsdGhpcy5jcElnbm9yZWRFbGVtZW50cyx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyLHRoaXMuY3BQb3NpdGlvbix0aGlzLmNwUG9zaXRpb25PZmZzZXQsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93LHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcyx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzLHRoaXMuY3BPS0J1dHRvbix0aGlzLmNwT0tCdXR0b25DbGFzcyx0aGlzLmNwT0tCdXR0b25UZXh0LHRoaXMuY3BDYW5jZWxCdXR0b24sdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0LHRoaXMuY3BBZGRDb2xvckJ1dHRvbix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0LHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BFeWVEcm9wcGVyLHRoaXMuZWxSZWYsdGhpcy5jcEV4dHJhVGVtcGxhdGUpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT1lJiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZChlKXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQoZSl9c3RhdGVDaGFuZ2VkKGUpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdChlKSxlP3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKGUsaT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWksdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KGUpfWNvbG9yU2VsZWN0ZWQoZSl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KGUpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7bGV0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIocj0+cj09PWUpOyF0aGlzLmNwRGlzYWJsZWQmJiFpLmxlbmd0aCYmKHR5cGVvZiBkb2N1bWVudDwidSImJmU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50P3RoaXMub3BlbkRpYWxvZygpOnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zaG93P3RoaXMuY2xvc2VEaWFsb2coKTp0aGlzLm9wZW5EaWFsb2coKSl9aW5wdXRDaGFuZ2UoZSl7dGhpcy5kaWFsb2c/dGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUudGFyZ2V0LnZhbHVlLCEwKToodGhpcy5jb2xvclBpY2tlcj1lLnRhcmdldC52YWx1ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodGhpcy5jb2xvclBpY2tlcikpfWlucHV0Q2hhbmdlZChlKXt0aGlzLmNwSW5wdXRDaGFuZ2UuZW1pdChlKX1zbGlkZXJDaGFuZ2VkKGUpe3RoaXMuY3BTbGlkZXJDaGFuZ2UuZW1pdChlKX1zbGlkZXJEcmFnRW5kKGUpe3RoaXMuY3BTbGlkZXJEcmFnRW5kLmVtaXQoZSl9c2xpZGVyRHJhZ1N0YXJ0KGUpe3RoaXMuY3BTbGlkZXJEcmFnU3RhcnQuZW1pdChlKX1wcmVzZXRDb2xvcnNDaGFuZ2VkKGUpe3RoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2UuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6biksdyhFbyksdyhKYyksdyh5aSksdyhBZSksdyhKeikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjb2xvclBpY2tlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUNsaWNrKCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXMoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXQobyl9KX0saW5wdXRzOntjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BFeWVEcm9wcGVyOiJjcEV5ZURyb3BwZXIiLGNwUHJlc2V0TGFiZWw6ImNwUHJlc2V0TGFiZWwiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjcEV4dHJhVGVtcGxhdGU6ImNwRXh0cmFUZW1wbGF0ZSJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLFFjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltKel0saW1wb3J0czpba2VdfSksbn0pKCksaDllPVsiY29udGFpbmVyIl07ZnVuY3Rpb24gZjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNsaWRlciIsNCksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKHIudmFsdWUpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJkaXNhYmxlZCIsIWUuZW5hYmxlZCkoIm1pbiIsZS5taW4pKCJtYXgiLGUubWF4KSgic3RlcCIsMSkoInZhbHVlIixlLmxvd2VyVmFsdWUpfX1mdW5jdGlvbiBtOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1LDYpLE4oMiwic3BhbiIsNykoMywic3BhbiIsOCksZyg0LCJzcGFuIiw5KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLkxFRlQpKX0pLHYoKSxnKDUsInNwYW4iLDkpLFAoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLmhhbmRsZU1vdXNlRG93bihyLG8uUG9zaXRpb24uUklHSFQpKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLmxvd2VyVmFsdWUpKSgid2lkdGgiLGUuZ2V0VHJhY2tXaWR0aCgpKSx4KDEpLE90KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSksYXQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uTEVGVCkpLHgoMSksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLnVwcGVyVmFsdWUpKSxhdCgiYWN0aXZlIixlLmlzVGh1bWJBY3RpdmUoZS5Qb3NpdGlvbi5SSUdIVCkpfX12YXIgTGw9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5MRUZUPTFdPSJMRUZUIixuW24uUklHSFQ9Ml09IlJJR0hUIn0oTGx8fChMbD17fSkpLExsKSkoKSxLY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy50aWNrQ291bnQ9MjAsdGhpcy5lbmFibGVkPSEwLHRoaXMucmV0dXJuSW50ZWdlcnM9ITEsdGhpcy5yYW5nZVZhbHVlc0NoYW5nZWQ9bmV3IEcsdGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQ9bmV3IEcsdGhpcy5Qb3NpdGlvbj1MbCx0aGlzLmFjdGl2ZVRodW1iPUxsLk5PTkUsdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9MCx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfWdldFRodW1iUG9zaXRpb24oZSl7bGV0IGk9dGhpcy5nZXRDbGlwcGVkVmFsdWUoZSkscj10aGlzLm1heC10aGlzLm1pbjtyZXR1cm4gcjw9MD8iNTAlIjooaS10aGlzLm1pbikvcioxMDArIiUifWdldFRyYWNrV2lkdGgoKXtpZihudWxsPT09dGhpcy51cHBlclZhbHVlKXJldHVybiIwJSI7bGV0IGU9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIGU8PTA/IjAlIjoodGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy51cHBlclZhbHVlKS10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLmxvd2VyVmFsdWUpKS9lKjEwMCsiJSJ9Z2V0Q2xpcHBlZFZhbHVlKGUpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLHRoaXMubWluKSx0aGlzLm1heCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25Jbml0KCl7bGkoZG9jdW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU1vdmUoZSl9KSxsaShkb2N1bWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU91dChlKX0pfWhhbmRsZU1vdXNlRG93bihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlVGh1bWI9aSx0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYj02LWUub2Zmc2V0WH1jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpe2xldCBhLHtsZWZ0OmkscmlnaHQ6cn09dGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWUuY2xpZW50WC1pK3RoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iO2lmKG51bGwhPT10aGlzLnRpY2tDb3VudCYmdGhpcy50aWNrQ291bnQ+MCl7bGV0IGM9KHItaSkvdGhpcy50aWNrQ291bnQ7YT1NYXRoLnJvdW5kKHMvYykqYy8oci1pKX1lbHNlIGE9cy8oci1pKTtsZXQgbD10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLm1pbisodGhpcy5tYXgtdGhpcy5taW4pKmEpO3JldHVybiB0aGlzLnJldHVybkludGVnZXJzP01hdGgucm91bmQobCk6TnVtYmVyKGwudG9GaXhlZCgxMCkpfWhhbmRsZU1vdXNlTW92ZShlKXtpZih0aGlzLmFjdGl2ZVRodW1iPT09TGwuTk9ORXx8bnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm47bGV0IGk9dGhpcy5jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpLHI9W3RoaXMubG93ZXJWYWx1ZSx0aGlzLnVwcGVyVmFsdWVdO3RoaXMuYWN0aXZlVGh1bWI9PT1MbC5MRUZUPyhpPnRoaXMudXBwZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuUklHSFQpLHI9W2ksdGhpcy51cHBlclZhbHVlXSk6KGk8dGhpcy5sb3dlclZhbHVlJiYodGhpcy5hY3RpdmVUaHVtYj1MbC5MRUZUKSxyPVt0aGlzLmxvd2VyVmFsdWUsaV0pLHRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMociwiU0xJREVSIiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX1tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhlLGkpe2xldFtyLG9dPWUuc29ydCgocyxhKT0+cy1hKTsodGhpcy5sb3dlclZhbHVlIT09cnx8dGhpcy51cHBlclZhbHVlIT09bykmJnRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkLmVtaXQoe2xvd2VyVmFsdWU6cix1cHBlclZhbHVlOm8sc291cmNlOml9KX1oYW5kbGVNb3VzZU91dChlKXt0aGlzLmFjdGl2ZVRodW1iIT09TGwuTk9ORSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX1oYW5kbGVTaW5nbGVTbGlkZXJDaGFuZ2UoZSl7dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6ZSxzb3VyY2U6IlNMSURFUiJ9KX1oYW5kbGVJbnB1dENoYW5nZShlLGkpe2xldCByPWUudGFyZ2V0LG89dGhpcy5nZXRDbGlwcGVkVmFsdWUoTnVtYmVyKHIudmFsdWUpKTtpc05hTihvKXx8KGk9PT1MbC5MRUZUP251bGw9PT10aGlzLnVwcGVyVmFsdWU/dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6byxzb3VyY2U6IlRFWFQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbbyx0aGlzLnVwcGVyVmFsdWVdLCJURVhUIik6IiI9PT1yLnZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOnRoaXMubG93ZXJWYWx1ZSxzb3VyY2U6IlRFWFRfREVMRVRFRCJ9KTp0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKFt0aGlzLmxvd2VyVmFsdWUsb10sIlRFWFQiKSl9aXNUaHVtYkFjdGl2ZShlKXtyZXR1cm4gdGhpcy5hY3RpdmVUaHVtYj09PWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1yYW5nZS1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGg5ZSw1LEFlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7bWluOiJtaW4iLG1heDoibWF4Iixsb3dlclZhbHVlOiJsb3dlclZhbHVlIix1cHBlclZhbHVlOiJ1cHBlclZhbHVlIix0aWNrQ291bnQ6InRpY2tDb3VudCIsZW5hYmxlZDoiZW5hYmxlZCIscmV0dXJuSW50ZWdlcnM6InJldHVybkludGVnZXJzIn0sb3V0cHV0czp7cmFuZ2VWYWx1ZXNDaGFuZ2VkOiJyYW5nZVZhbHVlc0NoYW5nZWQiLHNpbmdsZVZhbHVlQ2hhbmdlZDoic2luZ2xlVmFsdWVDaGFuZ2VkIn0sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbInR5cGUiLCJudW1iZXIiLDEsImxvd2VyLWlucHV0IiwzLCJkaXNhYmxlZCIsInZhbHVlIiwiY2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwxLCJ1cHBlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsiY2xhc3MiLCJzaW5nbGUtc2xpZGVyIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbInJhbmdlIiwiIl0sWyJjb2xvciIsInByaW1hcnkiLDEsInNpbmdsZS1zbGlkZXIiLDMsImRpc2FibGVkIiwibWluIiwibWF4Iiwic3RlcCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udGFpbmVyIl0sWyJjb250YWluZXIiLCIiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsInRodW1iIiwzLCJtb3VzZWRvd24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImlucHV0IiwwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5MRUZUKX0pLHYoKSxnKDEsImlucHV0IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5SSUdIVCl9KSx2KCksRSgyLGY5ZSwxLDUsIm1hdC1zbGlkZXIiLDIpLEUoMyxtOWUsNiwxMiwibmctdGVtcGxhdGUiLG51bGwsMyxlbikpLDImZSl7bGV0IHI9c3QoNCk7YigiZGlzYWJsZWQiLCFpLmVuYWJsZWQpKCJ2YWx1ZSIsaS5sb3dlclZhbHVlKSx4KDEpLGIoImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLG51bGwhPT1pLnVwcGVyVmFsdWU/aS51cHBlclZhbHVlOiIiKSx4KDEpLGIoIm5nSWYiLG51bGw9PT1pLnVwcGVyVmFsdWUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLFRkXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ncmlkO2dyaWQtZ2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1hcmVhczoibG93ZXItaW5wdXQgdXBwZXItaW5wdXQiICJzbGlkZXIgc2xpZGVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtmb250LXNpemU6MDttaW4td2lkdGg6MTAwcHg7cGFkZGluZzo2cHh9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9Lmxvd2VyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6bG93ZXItaW5wdXR9LnVwcGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dXBwZXItaW5wdXQ7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO3BhZGRpbmc6MHB4fS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItd3JhcHBlcnt0b3A6NXB4O2xlZnQ6MHB4O3JpZ2h0OjBweH0gIC5zaW5nbGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6MTJweH0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjJweH0udGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMCwwLDAsLjI2KTtib3JkZXItcmFkaXVzOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZTt3aWR0aDoxMnB4O3dpbGwtY2hhbmdlOnRyYW5zZm9ybX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjMpfS50aHVtYltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOmdyYWJ9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS50aHVtYi5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpzY2FsZSgxLjIpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdjllPVsicmVnZXhTdHJpbmdJbnB1dCJdO2Z1bmN0aW9uIHk5ZShuLHQpe2lmKDEmbiYmKEt0KDApLGcoMSwibGkiLDIyKSxEKDIpLHYoKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigidGl0bGUiLGUubmFtZSkseCgxKSx5dChlLm5hbWUpfX1mdW5jdGlvbiBiOWUobix0KXtpZigxJm4mJihnKDAsImxpIiwyMykoMSwiZW0iKSxEKDIpLGooMywibnVtYmVyIiksdigpKCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDIpLHFlKCJhbmQgIixXKDMsMSxlLnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiB4OWUobix0KXsxJm4mJihnKDAsImxpIiwyNCkoMSwiZW0iKSxEKDIsIk5vIHJ1bnMgYXJlIGluIHRoZSBncm91cCIpLHYoKSgpKX12YXIgQzllPWZ1bmN0aW9uKG4pe3JldHVybntib3JkZXJDb2xvcjpufX0sdzllPWZ1bmN0aW9uKG4pe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6bn19O2Z1bmN0aW9uIE05ZShuLHQpe2lmKDEmbiYmKGcoMCwidWwiLDE2KSgxLCJsaSIpKDIsImxhYmVsIiksTigzLCJzcGFuIiwxNyksZyg0LCJjb2RlIiwxOCksRCg1KSx2KCkoKSxnKDYsInVsIiksRSg3LHk5ZSwzLDIsIm5nLWNvbnRhaW5lciIsMTkpLGooOCwic2xpY2UiKSxFKDksYjllLDQsMywibGkiLDIwKSxFKDEwLHg5ZSwzLDAsImxpIiwyMSksdigpKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ1N0eWxlIixIbigxMSxDOWUsZS5jb2xvcikpLHgoMyksYigibmdTdHlsZSIsSG4oMTMsdzllLGUuY29sb3IpKSx4KDEpLGIoInRpdGxlIixlLmdyb3VwSWQpLHgoMSkseXQoZS5ncm91cElkKSx4KDIpLGIoIm5nRm9yT2YiLF9OKDgsNyxlLnJ1bnMsMCw1KSkseCgyKSxiKCJuZ0lmIixlLnJ1bnMubGVuZ3RoPjUpLHgoMSksYigibmdJZiIsMD09PWUucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBTOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTQpLEUoMSxNOWUsMTEsMTUsInVsIiwxNSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmNvbG9yUnVuUGFpckxpc3QpfX1mdW5jdGlvbiBFOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLEQoMSwiIFRoZXJlIGFyZSBubyBydW5zIG1hdGNoaW5nIHRoZSByZWdleCwgIiksZygyLCJjb2RlIiksRCgzKSx2KCksRCg0LCIuIFBsZWFzZSBjaGVjayBpZiB5b3VyIHJlZ2V4IHN0cmluZyBpcyBjb3JyZWN0LiAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDMpLHFlKCIvIixlLnJlZ2V4U3RyaW5nLCIvIil9fWZ1bmN0aW9uIFQ5ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxMCkoMSwiaDQiKSxEKDIsIkNvbG9yIGdyb3VwIHByZXZpZXciKSx2KCksZygzLCJkaXYiLDExKSxFKDQsUzllLDIsMSwiZGl2IiwxMiksRSg1LEU5ZSw1LDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLGVuKSx2KCkoKSksMiZuKXtsZXQgZT1zdCg2KSxpPU0oKTt4KDQpLGIoIm5nSWYiLGkuY29sb3JSdW5QYWlyTGlzdC5sZW5ndGgpKCJuZ0lmRWxzZSIsZSl9fXZhciBaY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5ob3N0RWxSZWY9aSx0aGlzLm9uU2F2ZT1uZXcgRyx0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZT1uZXcgRyx0aGlzLnRpbWVPdXRJZD0wfXJlc2V0Rm9jdXMoKXt0aGlzLmhvc3RFbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlZ2V4U3RyaW5nSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRW50ZXIoZSl7dGhpcy5vblNhdmVDbGljayhlKSx0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfW9uU2F2ZUNsaWNrKGUpe3RoaXMub25TYXZlLmVtaXQoZSl9ZmlsbEV4YW1wbGUoZSl7dGhpcy5yZWdleFN0cmluZz1lLHRoaXMucmVnZXhJbnB1dENoYW5nZShlKX1yZWdleElucHV0Q2hhbmdlKGUpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQoZSl9aGFuZGxlRm9jdXNPdXQoKXtjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpLHRoaXMudGltZU91dElkPXNldFRpbWVvdXQodGhpcy5yZXNldEZvY3VzLmJpbmQodGhpcyksMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTWQpLHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh2OWUsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yZWdleFN0cmluZ0lucHV0PXIuZmlyc3QpfX0saW5wdXRzOntyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLGNvbG9yUnVuUGFpckxpc3Q6ImNvbG9yUnVuUGFpckxpc3QifSxvdXRwdXRzOntvblNhdmU6Im9uU2F2ZSIscmVnZXhJbnB1dE9uQ2hhbmdlOiJyZWdleElucHV0T25DaGFuZ2UifSxkZWNsczozMCx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpDb2xvciBSdW5zIGJ5IFJlZ2V4IFF1ZXJ54pCfMTVlZDlmNmZkMmQ0OTA2YTQ4MDNmYzEyNTVkZTNjNWRiMmM1NjUzMOKQnzkwODg5ODUxMTM5NjAzMTI4MDg6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeWAsW1sxLCJyZWdleC1lZGl0LWRpYWxvZyIsMywiZm9jdXNvdXQiXSxbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMywiY2xpY2siXSxbMSwiZ3JvdXAtY29udGFpbmVyIl0sWzEsImdyb3VwaW5nLXByZXZpZXciXSxbImNsYXNzIiwibWF0Y2gtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImVtcHR5IiwiIl0sWzEsIm1hdGNoLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJncm91cCIsMywibmdTdHlsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImdyb3VwIiwzLCJuZ1N0eWxlIl0sWzEsImNvbG9yLXN3YXRjaCIsMywibmdTdHlsZSJdLFsxLCJncm91cC1pZCIsMywidGl0bGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vcmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2giLDQsIm5nSWYiXSxbMywidGl0bGUiXSxbMSwibW9yZSJdLFsxLCJuby1tYXRjaCJdLFsxLCJ3YXJuaW5nIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIsMCksUCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXNPdXQoKX0pLGcoMSwiaDEiLDEpLEQoMiwiQ29sb3IgcnVucyBieSByZWdleCIpLHYoKSxnKDMsIm1hdC1kaWFsb2ctY29udGVudCIpKDQsInAiKSxEKDUsIkVudGVyIGEgcmVnZXggd2l0aCBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFnYWluc3QgcnVuIG5hbWVzOiIpLHYoKSxnKDYsIm1hdC1mb3JtLWZpZWxkIikoNywiaW5wdXQiLDIsMyksUCgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24ocyl7cmV0dXJuIGkub25FbnRlcihzLnRhcmdldC52YWx1ZSl9KSgiaW5wdXQiLGZ1bmN0aW9uKHMpe3JldHVybiBpLnJlZ2V4SW5wdXRDaGFuZ2Uocy50YXJnZXQudmFsdWUpfSksdigpKCkoKSxnKDksImRpdiIsNCkoMTAsInAiKSxEKDExLCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLE4oMTIsImJyIiksZygxMywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSxEKDE0LCIgVHJ5ICIpLGcoMTUsImNvZGUiKSxEKDE2LCIodHJhaW58ZXZhbCkiKSx2KCkoKSxEKDE3LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygxOCwiY29kZSIpLEQoMTksInRyYWluIiksdigpLEQoMjAsIiB0byBvbmUgY29sb3IgYW5kIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygyMSwiY29kZSIpLEQoMjIsImV2YWwiKSx2KCksRCgyMywiIHRvIGFub3RoZXIgY29sb3IuICIpLHYoKSgpLEUoMjQsVDllLDcsMiwiZGl2Iiw2KSxnKDI1LCJkaXYiLDcpKDI2LCJidXR0b24iLDgpLEQoMjcsIkNhbmNlbCIpLHYoKSxnKDI4LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDgpO3JldHVybiBvZShpLm9uU2F2ZUNsaWNrKHMudmFsdWUpKX0pLEQoMjksIiBTYXZlICIpLHYoKSgpKCl9MiZlJiYoeCg3KSx4cigidmFsdWUiLGkucmVnZXhTdHJpbmcpLHgoMTcpLGIoIm5nSWYiLGkucmVnZXhTdHJpbmcpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSx3cCxEdSwkbixqQSxGSixHQSxXQSxRXyxCWSx2bF0sc3R5bGVzOlsiLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwfS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTBweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO21heC1oZWlnaHQ6NTB2aDtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0ubWF0Y2gtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6Z3JpZDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsIG1pbm1heCg1MCUsIDFmcikpfS5jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6MCAwIDJweCAjMDAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNXB4O3dpZHRoOjE1cHh9dWxbX25nY29udGVudC0lQ09NUCVde2xpc3Qtc3R5bGUtdHlwZTpub25lO3BhZGRpbmc6MH1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDttYXJnaW46MDtwYWRkaW5nOjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1heC1jb250ZW50IGF1dG87cGFkZGluZzo1cHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ncm91cC1pZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45NWVtO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgdWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV0gICBsaVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubW9yZVtfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nUmVmPWksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQ9bmV3IFRlLHRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJD1iYSgoKT0+dW4odGhpcy5zdG9yZS5zZWxlY3QodUEpLnBpcGUoSHQoMSkpLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckKSkucGlwZShWbigiIikpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9YmEoKCk9PnRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJC5waXBlKEFyKDUwMCksSGUobz0+e3RyeXtsZXQgcz1uZXcgUmVnRXhwKG8pO3JldHVybiBCb29sZWFuKHMpfWNhdGNoe3JldHVybiExfX0pLHNyKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCx0aGlzLnN0b3JlLnNlbGVjdChhYS5nZXRDb2xvclBhbGV0dGUpLHRoaXMuc3RvcmUuc2VsZWN0KG11KSksQigoW28scyxhLGwsY10pPT57bGV0IGQ9QUMoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzpvfSxzLGEpLHA9bmV3IE1hcCxoPVtdO2ZvcihsZXRbZixtXW9mIE9iamVjdC5lbnRyaWVzKGQubWF0Y2hlcykpe2xldCBDPXAuZ2V0KGYpO2lmKCFDKXtsZXQgXz1sLmNvbG9yc1twLnNpemUlbC5jb2xvcnMubGVuZ3RoXTtDPWM/Xy5kYXJrSGV4Ol8ubGlnaHRIZXgscC5zZXQoZixDKX1oLnB1c2goe2dyb3VwSWQ6Zixjb2xvcjpDLHJ1bnM6bX0pfXJldHVybiBofSkpKS5waXBlKFZuKFtdKSksdGhpcy5leHBlcmltZW50SWRzPXIuZXhwZXJpbWVudElkcyx0aGlzLnJ1bklkVG9FaWQkPXBuKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoeFose2V4cGVyaW1lbnRJZDpvfSkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkOm8scnVuSWRzOnN9KSkpKSkucGlwZShCKG89PntsZXQgcz17fTtmb3IobGV0e3J1bklkczphLGV4cGVyaW1lbnRJZDpsfW9mIG8pZm9yKGxldCBjIG9mIGEpc1tjXT1sO3JldHVybiBzfSkpLHRoaXMuYWxsUnVucyQ9cG4odGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoQihvPT5vLmZsYXQoKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQoZSl9b25TYXZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobF8oe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTplci5SRUdFWCxyZWdleFN0cmluZzplfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhNZCksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwiY29sb3JSdW5QYWlyTGlzdCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IiwwKSxQKCJvblNhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2F2ZShvKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSwyLGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixXKDIsNCxpLmNvbG9yUnVuUGFpckxpc3QkKSl9LGRlcGVuZGVuY2llczpbWmNlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBJOWUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBQOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDEzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpyLkdyb3VwQnlLZXkuRVhQRVJJTUVOVH0pKX0pLGcoMSwic3BhbiIpLEUoMixJOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMywibGFiZWwiKSxEKDQsIkV4cGVyaW1lbnQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTt6ZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCkseCgyKSxiKCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIFI5ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIE85ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGs5ZShuLHQpe2lmKDEmbiYmKGcoMCwibGFiZWwiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24gRjllKG4sdCl7MSZuJiYoZygwLCJsYWJlbCIsMTUpLEQoMSwiKG5vbmUgc2V0KSIpLHYoKSl9dmFyICRjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWUsdGhpcy5Hcm91cEJ5S2V5PWVyLHRoaXMub25Hcm91cEJ5Q2hhbmdlPW5ldyBHfW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihKY2Use21heEhlaWdodDoiOTV2aCIsbWF4V2lkdGg6IjgwdnciLGRhdGE6e2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfX0pfW9uR3JvdXBCeVJlZ2V4Q2xpY2soKXt0aGlzLnJlZ2V4U3RyaW5nP3RoaXMub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzp0aGlzLnJlZ2V4U3RyaW5nfSk6dGhpcy5vblJlZ2V4U3RyaW5nRWRpdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RXhwZXJpbWVudHNHcm91cEJ5OiJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoyMix2YXJzOjgsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ29sb3IgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJleHBlcmltZW50IiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsInJ1biIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJyZWdleCIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJkYXRhLXZhbHVlIiwicmVnZXgtZWRpdCIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiXSxbMSwibm9uZS1zZXQtc3RyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLE4oMSwibWF0LWljb24iLDEpLHYoKSxnKDIsIm1hdC1tZW51IiwyLDMpKDQsImRpdiIsNCksRCg1LCJDb2xvciBydW5zIGJ5IiksdigpLEUoNixQOWUsNSwyLCJidXR0b24iLDUpLGcoNywiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OmkuR3JvdXBCeUtleS5SVU59KX0pLGcoOCwic3BhbiIpLEUoOSxSOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImxhYmVsIiksRCgxMSwiUnVuIiksdigpKCksZygxMiwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSxnKDEzLCJzcGFuIiksRSgxNCxPOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTUsImxhYmVsIiksRCgxNiwiUmVnZXgiKSx2KCkoKSxnKDE3LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVnZXhTdHJpbmdFZGl0KCl9KSxnKDE4LCJzcGFuIiksTigxOSwibWF0LWljb24iLDEwKSx2KCksRSgyMCxrOWUsMiwxLCJsYWJlbCIsMTEpLEUoMjEsRjllLDIsMCwibGFiZWwiLDEyKSx2KCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDMpKSx4KDYpLGIoIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSkseCgxKSx6ZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLHgoMyksemUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCkseCg2KSxiKCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSx4KDEpLGIoIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbWGUsJG4sWm4sSXUsRWMsUHVdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgYnV0dG9ue2Rpc3BsYXk6Z3JpZDtnYXA6MnB4IDEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjIwcHggYXV0b30gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoRlEpLnBpcGUoQihpPT5pLmhhcyhmaS5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KHdaKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodUEpfW9uR3JvdXBCeUNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxfKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIl1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJyZWdleFN0cmluZyIsInNlbGVjdGVkR3JvdXBCeSIsInNob3dFeHBlcmltZW50c0dyb3VwQnkiLCJleHBlcmltZW50SWRzIiwib25Hcm91cEJ5Q2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudCIsMCksUCgib25Hcm91cEJ5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSw0LGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJzZWxlY3RlZEdyb3VwQnkiLFcoMiw2LGkuc2VsZWN0ZWRHcm91cEJ5JCkpKCJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixXKDMsOCxpLnNob3dFeHBlcmltZW50c0dyb3VwQnkkKSkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcyl9LGRlcGVuZGVuY2llczpbJGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCOWU9WyJmaWx0ZXIiXTtmdW5jdGlvbiBWOWUobix0KXsxJm4mJkFpKDApfWZ1bmN0aW9uIEg5ZShuLHQpezEmbiYmQWkoMCl9dmFyIFU5ZT1mdW5jdGlvbihuKXtyZXR1cm57aXRlbTpufX07ZnVuY3Rpb24gejllKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEg5ZSwxLDAsIm5nLWNvbnRhaW5lciIsMTIpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7TSgpO2xldCBpPXN0KDE0KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMixVOWUsZSkpfX1mdW5jdGlvbiBqOWUobix0KXsxJm4mJihnKDAsImRpdiIsMTMpLE4oMSwibWF0LXNwaW5uZXIiLDE0KSx2KCkpfWZ1bmN0aW9uIEc5ZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNSksRCgxLCJObyBSdW5zIiksdigpKX1mdW5jdGlvbiBXOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTUpKDEsInNwYW4iKSxEKDIsJ05vIHJ1bnMgbWF0Y2ggIicpLGcoMywiY29kZSIpLEQoNCksdigpLEQoNSwnIicpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTt4KDQpLHl0KGUucmVnZXhGaWx0ZXIpfX12YXIgcTllPWZ1bmN0aW9uKCl7cmV0dXJuWzUsMTAsMjBdfTtmdW5jdGlvbiBZOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtcGFnaW5hdG9yIiwxNiksUCgicGFnZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblBhZ2luYXRpb25DaGFuZ2UuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7YigicGFnZVNpemVPcHRpb25zIixscCg0LHE5ZSkpKCJwYWdlSW5kZXgiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlSW5kZXgpKCJwYWdlU2l6ZSIsZS5wYWdpbmF0aW9uT3B0aW9uLnBhZ2VTaXplKSgibGVuZ3RoIixlLmZpbHRlcmVkSXRlbXNMZW5ndGgpfX1mdW5jdGlvbiBYOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtY2hlY2tib3giLDI2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMykuaGFuZGxlUGFnZVRvZ2dsZSgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMyk7YigiY2hlY2tlZCIsZS5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpKSgiaW5kZXRlcm1pbmF0ZSIsIWUuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSYmZS5zb21lUGFnZUl0ZW1zU2VsZWN0ZWQoKSl9fXZhciB0dWU9ZnVuY3Rpb24obil7cmV0dXJue3R5cGU6bn19O2Z1bmN0aW9uIFE5ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjcpLEQoMSwiRXhwZXJpbWVudCIpLHYoKSksMiZuKXtsZXQgZT1NKDMpO2IoIm1hdC1zb3J0LWhlYWRlciIsSG4oMSx0dWUsZS5Tb3J0VHlwZS5FWFBFUklNRU5UX05BTUUpKX19ZnVuY3Rpb24gSzllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyNyksRCgxLCJSdW4iKSx2KCkpLDImbil7bGV0IGU9TSgzKTtiKCJtYXQtc29ydC1oZWFkZXIiLEhuKDEsdHVlLGUuU29ydFR5cGUuUlVOX05BTUUpKX19ZnVuY3Rpb24gWjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwyOCksdigpKSwyJm4pe2xldCBlPU0oMyk7eCgxKSxiKCJleHBlcmltZW50SWRzIixlLmV4cGVyaW1lbnRJZHMpfX12YXIgbnVlPWZ1bmN0aW9uKG4pe3JldHVyblsiY29sdW1uIixuXX07ZnVuY3Rpb24gSjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMSksS3QoMSwyMiksRSgyLFg5ZSwxLDIsIm1hdC1jaGVja2JveCIsMjMpLEUoMyxROWUsMiwzLCJzcGFuIiwyNCksRSg0LEs5ZSwyLDMsInNwYW4iLDI0KSxFKDUsWjllLDIsMSwic3BhbiIsMjUpLFp0KCksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgyKTtiKCJuZ0NsYXNzIixIbig2LG51ZSwidGItY29sdW1uLSIrZSkpLHgoMSksYigibmdTd2l0Y2giLGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5DSEVDS0JPWCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkVYUEVSSU1FTlRfTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX0NPTE9SKX19ZnVuY3Rpb24gJDllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLGcoMSwiZGl2IiwzNyksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZygyLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgyKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKG8scikpfSksdigpKCksWnQoKX1pZigyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMiksYigibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fWZ1bmN0aW9uIGVxZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoMSwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oMykuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChzLG8pKX0pLGcoMiwic3BhbiIpLEQoMyksdigpKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgzKS4kaW1wbGljaXQ7eCgxKSxiKCJjaGVja2VkIixpLmZpbHRlci5maWx0ZXJWYWx1ZXMuaW5jbHVkZXMoZSkpLHgoMikseXQoZSl9fWZ1bmN0aW9uIHRxZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxlcWUsNCwyLCJkaXYiLDM5KSxadCgpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMSksYigibmdGb3JPZiIsZS5maWx0ZXIucG9zc2libGVWYWx1ZXMpfX1mdW5jdGlvbiBucWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxOKDIsIm1hdC1pY29uIiwzMyksdigpLGcoMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoNiwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQocikpfSksZyg3LCJzcGFuIiksRCg4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSx2KCkoKSgpLEUoOSwkOWUsMyw0LCJuZy1jb250YWluZXIiLDMxKSxFKDEwLHRxZSwyLDEsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0LHI9TSgyKTt4KDEpLGIoIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSx6ZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBocGFyYW0gIisoaS5kaXNwbGF5TmFtZXx8aS5uYW1lKSkseCg1KSxiKCJjaGVja2VkIixpLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkKSx4KDMpLGIoIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1yLkRvbWFpblR5cGUuSU5URVJWQUwpLHgoMSksYigibmdJZiIsaS5maWx0ZXIudHlwZT09PXIuRG9tYWluVHlwZS5ESVNDUkVURSl9fXZhciBpcWU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLG5hbWU6dH19O2Z1bmN0aW9uIHJxZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjkpKDEsInNwYW4iLDMwKSxEKDIpLHYoKSxFKDMsbnFlLDExLDUsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibWF0LXNvcnQtaGVhZGVyIix0bygzLGlxZSxpLlNvcnRUeXBlLkhQQVJBTSxlLm5hbWUpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUubmFtZSkseCgxKSxiKCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIG9xZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImJ1dHRvbiIsMzIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLE4oMiwibWF0LWljb24iLDMzKSx2KCksZygzLCJtYXQtbWVudSIsbnVsbCwzNCkoNSwiZGl2IiwzNSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZyg2LCJtYXQtY2hlY2tib3giLDM2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmUoZSk7bGV0IHI9TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChyKSl9KSxnKDcsInNwYW4iKSxEKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLHYoKSgpKCksZyg5LCJkaXYiLDM3KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxnKDEwLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKG8scikpfSksdigpKCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0O3goMSksYigibWF0TWVudVRyaWdnZXJGb3IiLGUpLHplKCJhcmlhLWxhYmVsIiwiRmlsdGVyIG1ldHJpYyAiKyhpLmRpc3BsYXlOYW1lfHxpLnRhZykpLHgoNSksYigiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCkseCg0KSxiKCJtaW4iLGkuZmlsdGVyLm1pblZhbHVlKSgibWF4IixpLmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLGkuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIixpLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19dmFyIHNxZT1mdW5jdGlvbihuLHQpe3JldHVybnt0eXBlOm4sdGFnOnR9fTtmdW5jdGlvbiBhcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksRCgyKSx2KCksRSgzLG9xZSwxMSw3LCJuZy1jb250YWluZXIiLDMxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO2IoIm1hdC1zb3J0LWhlYWRlciIsdG8oMyxzcWUsaS5Tb3J0VHlwZS5NRVRSSUMsZS50YWcpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUudGFnKSx4KDEpLGIoIm5nSWYiLGUuZmlsdGVyKX19ZnVuY3Rpb24gbHFlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxNykoMSwiZGl2IiwxOCksUCgibWF0U29ydENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5oYW5kbGVTb3J0Q2hhbmdlKHIpKX0pLEUoMixKOWUsNiw4LCJzcGFuIiwxOSksRSgzLHJxZSw0LDYsInNwYW4iLDIwKSxFKDQsYXFlLDQsNiwic3BhbiIsMjApLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibWF0U29ydEFjdGl2ZSIsZS5zb3J0T3B0aW9uLmNvbHVtbikseCgxKSxiKCJuZ0Zvck9mIixlLmNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsZS5ocGFyYW1Db2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlIcGFyYW1Db2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5tZXRyaWNDb2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlNZXRyaWNDb2x1bW4pfX1mdW5jdGlvbiBjcWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwibWF0LWNoZWNrYm94Iiw0NyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQocikpfSkoImRibGNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChyKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMikuaXRlbTt4KDEpLGIoImNoZWNrZWQiLGUuc2VsZWN0ZWQpfX1mdW5jdGlvbiB1cWUobix0KXtpZigxJm4mJk4oMCwidGItZXhwZXJpbWVudC1hbGlhcyIsNDgpLDImbil7bGV0IGU9TSgyKS5pdGVtO2IoImFsaWFzIixlLmV4cGVyaW1lbnRBbGlhcykoInRpdGxlIixlLmV4cGVyaW1lbnROYW1lKX19ZnVuY3Rpb24gZHFlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwzMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSkseXQoZS5ydW4ubmFtZSl9fXZhciBwcWU9ZnVuY3Rpb24obil7cmV0dXJueyJydW4tY29sb3Itc3dhdGNoIjohMCwibm8tY29sb3IiOm59fTtmdW5jdGlvbiBocWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwiYnV0dG9uIiw0OSksUCgiY29sb3JQaWNrZXJDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5ydW4uaWQsbmV3Q29sb3I6cn0pKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSksT3QoImJhY2tncm91bmQiLGUucnVuQ29sb3IpLGIoIm5nQ2xhc3MiLEhuKDgscHFlLCFlLnJ1bkNvbG9yKSkoImNvbG9yUGlja2VyIixlLnJ1bkNvbG9yKSgiY3BEaWFsb2dEaXNwbGF5IiwicG9wdXAiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBmcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQ0KSxLdCgxLDIyKSxFKDIsY3FlLDIsMSwic3BhbiIsMjUpLEUoMyx1cWUsMSwyLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0NSksRSg0LGRxZSwyLDEsInNwYW4iLDQ2KSxFKDUsaHFlLDIsMTAsInNwYW4iLDI1KSxadCgpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsSG4oNixudWUsInRiLWNvbHVtbi0iK2UpKSx4KDEpLGIoIm5nU3dpdGNoIixlKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIG1xZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNTApLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpLml0ZW07eCgxKSx5dChpLmhwYXJhbXMuZ2V0KGUubmFtZSkpfX1mdW5jdGlvbiBncWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDUwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKS5pdGVtO3goMSkseXQoaS5tZXRyaWNzLmdldChlLnRhZykpfX1mdW5jdGlvbiBfcWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNDEpLEUoMSxmcWUsNiw4LCJzcGFuIiw0MiksRSgyLG1xZSwyLDEsInNwYW4iLDQzKSxFKDMsZ3FlLDIsMSwic3BhbiIsNDMpLHYoKSksMiZuKXtsZXQgZT10Lml0ZW0saT1NKCk7emUoImRhdGEtaWQiLGUucnVuLmlkKSx4KDEpLGIoIm5nRm9yT2YiLGkuY29sdW1ucykseCgxKSxiKCJuZ0Zvck9mIixpLmhwYXJhbUNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsaS5tZXRyaWNDb2x1bW5zKX19dmFyIHZxZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgb2d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9IlNob3cgcnVuczoifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRhdGFTb3VyY2U9bmV3IGxPLHRoaXMuRG9tYWluVHlwZT1Lbix0aGlzLlJ1bnNUYWJsZUNvbHVtbj1Hcyx0aGlzLlNvcnRUeXBlPUN1LHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRyx0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBHLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRyx0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgRyx0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgRyx0aGlzLm9uU29ydENoYW5nZT1uZXcgRyx0aGlzLm9uUnVuQ29sb3JDaGFuZ2U9bmV3IEcsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgRyx0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkPW5ldyBHLHRoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkPW5ldyBHfW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQoZSl7cmV0dXJuYGg6JHtlLm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZChlKXtyZXR1cm5gbToke2UudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoZT0+ZS5zZWxlY3RlZCl9c29tZVBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMucGFnZUl0ZW1zLnNvbWUoZT0+ZS5zZWxlY3RlZCl9aGFuZGxlUGFnZVRvZ2dsZSgpe3RoaXMub25QYWdlU2VsZWN0aW9uVG9nZ2xlLmVtaXQoe2l0ZW1zOnRoaXMucGFnZUl0ZW1zfSl9aGFuZGxlU29ydENoYW5nZShlKXtsZXQgaTtzd2l0Y2goZS5kaXJlY3Rpb24pe2Nhc2UiYXNjIjppPUVsLkFTQzticmVhaztjYXNlImRlc2MiOmk9RWwuREVTQzticmVhaztkZWZhdWx0Omk9RWwuVU5TRVR9dGhpcy5vblNvcnRDaGFuZ2UuZW1pdCh7a2V5OmUuYWN0aXZlLGRpcmVjdGlvbjppfSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9dGFibGVUcmFja0J5KGUsaSl7cmV0dXJuIGkucnVuLmlkfWhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKGUpe2xldHtuYW1lOmksZmlsdGVyOnJ9PWU7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3IudHlwZT09PUtuLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6IXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6ci5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6cixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChlLGkpe2xldHtuYW1lOnIsZmlsdGVyOm99PWU7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO2lmKG8udHlwZSE9PUtuLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGV4cGVjdGVkIGRpc2NyZXRlIGRvbWFpbiBmb3IgJHtyfWApO2xldCBzPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7cy5oYXMoaSk/cy5kZWxldGUoaSk6cy5hZGQoaSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5zXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKGUpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOiFlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKGUsaSl7aWYoIWUuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUudGFnLGluY2x1ZGVVbmRlZmluZWQ6ZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4oZSl7cmV0dXJuIGUubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKGUpe3JldHVybiBlLnRhZ319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy10YWJsZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQjllLDcsQWUpLGx0KHNPLDcpLGx0KHRTLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmZpbHRlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5wYWdpbmF0b3I9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuc29ydD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dFeHBlcmltZW50TmFtZToic2hvd0V4cGVyaW1lbnROYW1lIixjb2x1bW5zOiJjb2x1bW5zIixocGFyYW1Db2x1bW5zOiJocGFyYW1Db2x1bW5zIixtZXRyaWNDb2x1bW5zOiJtZXRyaWNDb2x1bW5zIixhbGxJdGVtc0xlbmd0aDoiYWxsSXRlbXNMZW5ndGgiLGZpbHRlcmVkSXRlbXNMZW5ndGg6ImZpbHRlcmVkSXRlbXNMZW5ndGgiLHVzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIscGFnZUl0ZW1zOiJwYWdlSXRlbXMiLGxvYWRpbmc6ImxvYWRpbmciLG51bVNlbGVjdGVkSXRlbXM6Im51bVNlbGVjdGVkSXRlbXMiLHNvcnRPcHRpb246InNvcnRPcHRpb24iLHBhZ2luYXRpb25PcHRpb246InBhZ2luYXRpb25PcHRpb24iLHJlZ2V4RmlsdGVyOiJyZWdleEZpbHRlciJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJDaGFuZ2UiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25TZWxlY3Rpb25EYmxDbGljazoib25TZWxlY3Rpb25EYmxDbGljayIsb25QYWdlU2VsZWN0aW9uVG9nZ2xlOiJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLG9uUGFnaW5hdGlvbkNoYW5nZToib25QYWdpbmF0aW9uQ2hhbmdlIixvblNvcnRDaGFuZ2U6Im9uU29ydENoYW5nZSIsb25SdW5Db2xvckNoYW5nZToib25SdW5Db2xvckNoYW5nZSIsb25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDoib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpvZyx1c2VDbGFzczp2cWV9XSksenRdLGRlY2xzOjE1LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJyb2xlIiwidGFibGUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJyb3dzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJsb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXJ1bnMiLDQsIm5nSWYiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiLDQsIm5nSWYiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJoZWFkZXIiXSxbIm1hdFNvcnQiLCIiLCJyb2xlIiwicm93IiwzLCJtYXRTb3J0QWN0aXZlIiwibWF0U29ydENoYW5nZSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJjbGFzcyIsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbInJvbGUiLCJyb3ciXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwiY2xhc3MiLCJjb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiXSxbMywiYWxpYXMiLCJ0aXRsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm5hbWUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsidGl0bGUiLCJDbGljayB0byB0b2dnbGUgcnVuIHNlbGVjdGlvbiBvciBkb3VibGUgY2xpY2sgdG8gc2VsZWN0IG9ubHkgdGhpcyBydW4uIiwzLCJjaGVja2VkIiwiY2hhbmdlIiwiZGJsY2xpY2siXSxbMywiYWxpYXMiLCJ0aXRsZSJdLFszLCJuZ0NsYXNzIiwiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbInJvbGUiLCJjZWxsIiwxLCJjb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxQKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GaWx0ZXJLZXlVcChvKX0pLHYoKSgpLGcoMiwiZGl2IiwyKSgzLCJkaXYiLDMpLEUoNCxWOWUsMSwwLCJuZy1jb250YWluZXIiLDQpLGcoNSwiZGl2Iiw1KSxFKDYsejllLDIsNCwibmctY29udGFpbmVyIiw2KSx2KCkoKSxFKDcsajllLDIsMCwiZGl2Iiw3KSxFKDgsRzllLDIsMCwiZGl2Iiw4KSxFKDksVzllLDYsMSwiZGl2Iiw4KSx2KCksRSgxMCxZOWUsMSw1LCJtYXQtcGFnaW5hdG9yIiw5KSxFKDExLGxxZSw1LDYsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSxFKDEzLF9xZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDExLGVuKSksMiZlKXtsZXQgcj1zdCgxMik7eCgxKSx4cigidmFsdWUiLGkucmVnZXhGaWx0ZXIpLHgoMyksYigibmdUZW1wbGF0ZU91dGxldCIscikseCgyKSxiKCJuZ0Zvck9mIixpLnBhZ2VJdGVtcykoIm5nRm9yVHJhY2tCeSIsaS50YWJsZVRyYWNrQnkpLHgoMSksYigibmdJZiIsaS5sb2FkaW5nKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJjA9PT1pLmFsbEl0ZW1zTGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJmkuYWxsSXRlbXNMZW5ndGg+MCYmMD09PWkuZmlsdGVyZWRJdGVtc0xlbmd0aCkseCgxKSxiKCJuZ0lmIixpLnVzZVBhZ2luYXRpb24pfX0sZGVwZW5kZW5jaWVzOltYY2UsUG4seW4sWGUsTm8saHIsSXIsX3Ysb08sJG4sRWQsWm4sSXUsRWMsUHUsc08sdm8sdFMsSGNlLEtjZSxldWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmctYm90dG9tOjEycHh9Ym9keS5kYXJrLW1vZGUgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6dGFibGUtcm93O2hlaWdodDo0M3B4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bcm9sZT1yb3dncm91cF1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfVtyb2xlPXJvd2dyb3VwXS5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNlbGVjdC1hbGxbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEycHg7cGFkZGluZy10b3A6MTJweH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpsZWZ0fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDRweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4IDAgMjFweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRiLWNvbHVtbi1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0sIC50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0ucnVuLWNvbG9yLXN3YXRjaC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNjNmNhZDE7Ym9yZGVyLXdpZHRoOjJweH0ucmFuZ2UtaW5wdXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6YXV0b31bX25naG9zdC0lQ09NUCVdICAgICBtYXQtcGFnaW5hdG9yIG1hdC1mb3JtLWZpZWxke21hcmdpbjowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcn0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWxhYmVse292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxicWU9WShJQyxuPT5uLnN0YXRlPT09RWUuTE9BRElORyk7ZnVuY3Rpb24gcnVlKG4sdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBDdS5FWFBFUklNRU5UX05BTUU6cmV0dXJuW24uZXhwZXJpbWVudEFsaWFzLG4ucnVuLm5hbWUsbi5ydW4uaWRdO2Nhc2UgQ3UuUlVOX05BTUU6cmV0dXJuW24ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgQ3UuSFBBUkFNOnJldHVybltuLmhwYXJhbXMuZ2V0KHQubmFtZSksbi5ydW4ubmFtZSxuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5pZF07Y2FzZSBDdS5NRVRSSUM6cmV0dXJuW24ubWV0cmljcy5nZXQodC50YWcpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke3R9YCl9fWZ1bmN0aW9uIG91ZShuLHQpe3JldHVybiB2b2lkIDA9PT10P24uaW5jbHVkZVVuZGVmaW5lZDpuLnR5cGU9PT1Lbi5ESVNDUkVURT9uLmZpbHRlclZhbHVlcy5pbmNsdWRlcyh0KTpuLnR5cGU9PT1Lbi5JTlRFUlZBTCYmbi5maWx0ZXJMb3dlclZhbHVlPD10JiZ0PD1uLmZpbHRlclVwcGVyVmFsdWV9dmFyIHN1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmxvYWRpbmckPW51bGwsdGhpcy5ocGFyYW1Db2x1bW5zJD1qdChbXSksdGhpcy5tZXRyaWNDb2x1bW5zJD1qdChbXSksdGhpcy51c2VGbGV4aWJsZUxheW91dD0hMSx0aGlzLnVzZVBhZ2luYXRpb249ITEsdGhpcy5jb2x1bW5zPVtHcy5SVU5fTkFNRV0sdGhpcy5zaG93SHBhcmFtc0FuZE1ldHJpY3M9ITEsdGhpcy5zb3J0T3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChJViksdGhpcy5wYWdpbmF0aW9uT3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChBViksdGhpcy5yZWdleEZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmYpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9aXNFeHBlcmltZW50TmFtZVZpc2libGUoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLnNvbWUoZT0+ZT09PUdzLkVYUEVSSU1FTlRfTkFNRSl9bmdPbkluaXQoKXtsZXQgaT1wbih0aGlzLmV4cGVyaW1lbnRJZHMubWFwKHM9PnRoaXMuZ2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQocykpKS5waXBlKEIocz0+W10uY29uY2F0KC4uLnMpKSk7dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkPWkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFFzKDEpKSx0aGlzLmFsbEl0ZW1zTGVuZ3RoJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShCKHM9PnMubGVuZ3RoKSk7bGV0IHI9dGhpcy5nZXRGaWx0ZXJlZEl0ZW1zJCh0aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxRcygxKSk7dGhpcy5maWx0ZXJlZEl0ZW1zTGVuZ3RoJD1yLnBpcGUoQihzPT5zLmxlbmd0aCkpLHRoaXMucGFnZUl0ZW1zJD10aGlzLnNvcnRlZEFuZFNsaWNlZEl0ZW1zJChyKSx0aGlzLm51bVNlbGVjdGVkSXRlbXMkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKEIocz0+cy5yZWR1Y2UoKGEsbCk9PmErTnVtYmVyKGwuc2VsZWN0ZWQpLDApKSk7bGV0IG89dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLnN0b3JlLnNlbGVjdChicWUse2V4cGVyaW1lbnRJZDpzfSkpO2lmKHRoaXMubG9hZGluZyQ9cG4obykucGlwZShCKHM9PnMuc29tZShhPT5hKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtsZXQgcz10aGlzLnN0b3JlLnNlbGVjdChOaC5nZXRFeHBlcmltZW50c0hwYXJhbXNBbmRNZXRyaWNzU3BlY3Mse2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSk7dGhpcy5ocGFyYW1Db2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0SHBhcmFtRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese2hwYXJhbXM6bH1dKT0+bC5tYXAoKHtuYW1lOmMsZGlzcGxheU5hbWU6dX0pPT57bGV0IHA9YS5nZXQoYyk7aWYoIXApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBocGFyYW0gZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOnUsbmFtZTpjLGZpbHRlcjpwfX0pKSksdGhpcy5tZXRyaWNDb2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0TWV0cmljRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese21ldHJpY3M6bH1dKT0+bC5tYXAoKHt0YWc6YyxkaXNwbGF5TmFtZTp1fSk9PntsZXQgZD1hLmdldChjKTtpZighZCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtjfSBtdXN0IGV4aXN0IHdoZW4gdGhlIG1ldHJpYyBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6dSx0YWc6YyxmaWx0ZXI6ZH19KSkpfXRoaXMuY29sdW1ucy5pbmNsdWRlcyhHcy5DSEVDS0JPWCkmJnRoaXMuc3RvcmUuc2VsZWN0KHJhKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksZGkoKGEsbCk9PnVzKGEsbCkpLHZpKCgpPT5pLnBpcGUoSGUoYT0+YS5sZW5ndGg+NTAwKSxIdCgxKSkpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhfKHtsb2NhbGl6ZWRNZXNzYWdlOiJUaGUgbnVtYmVyIG9mIHJ1bnMgZXhjZWVkcyA1MDAuIE5ldyBydW5zIGFyZSB1bnNlbGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiJ9KSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKEFEKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQoZSl7cmV0dXJuIHBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KEpmKV0pLnBpcGUoQigoW2kscl0pPT57aWYoIXIpcmV0dXJuIGk7bGV0IG89dGhpcy5jb2x1bW5zLmluY2x1ZGVzKEdzLkVYUEVSSU1FTlRfTkFNRSk7cmV0dXJuIGkuZmlsdGVyKHM9Pm1BKHtydW5OYW1lOnMucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOnMuZXhwZXJpbWVudEFsaWFzfSxyLG8pKX0pLHZpKGk9PnRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzP3BuKHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpKS5waXBlKEIoKFtyLG9dKT0+aS5maWx0ZXIoKHtocGFyYW1zOnMsbWV0cmljczphfSk9PlsuLi5yLmVudHJpZXMoKV0uZXZlcnkoKFtjLHVdKT0+b3VlKHUscy5nZXQoYykpKSYmWy4uLm8uZW50cmllcygpXS5ldmVyeSgoW2MsdV0pPT5vdWUodSxhLmdldChjKSkpKSkpOmp0KGkpKSl9c29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpe2xldCBpPXBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KElWKV0pLnBpcGUoQigoW28sc10pPT5mdW5jdGlvbihuLHQpe2xldCBlPXQua2V5LGk9Wy4uLm5dO3JldHVybiBudWxsPT09ZXx8dC5kaXJlY3Rpb249PT1FbC5VTlNFVHx8aS5zb3J0KChyLG8pPT57bGV0IHM9cnVlKHIsZSksYT1ydWUobyxlKTtpZihzLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGdpdmVuIHNvcnQgc2hvdWxkIHJlc3VsdCBpbiBzYW1lIG51bWJlciBvZiBpdGVtczogJHt0fWApO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdLHU9YVtsXTtpZihjIT09dSl7aWYodm9pZCAwPT09Y3x8dm9pZCAwPT09dSlyZXR1cm4gdm9pZCAwPT09dT8tMToxO2lmKHR5cGVvZiBjIT10eXBlb2YgdSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21wYXJlIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXM6ICR7dHlwZW9mIGN9IHZzLiAke3R5cGVvZiB1fWApO3JldHVybiBjPHU9PSh0LmRpcmVjdGlvbj09PUVsLkFTQyk/LTE6MX19cmV0dXJuIDB9KSxpfShvLHMpKSk7cmV0dXJuIHBuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KEFWKV0pLnBpcGUoQigoW28sc10pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gby5zbGljZSgpO2xldHtwYWdlU2l6ZTphLHBhZ2VJbmRleDpsfT1zO3JldHVybiBvLnNsaWNlKGwqYSwobCsxKSphKX0pLFZuKFtdKSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQoZSl7cmV0dXJuIHBuKFt0aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KGh1KV0pLnBpcGUoQigoW2kscixvLHMsYV0pPT5pLm1hcChsPT57bGV0IGM9bmV3IE1hcDsobC5ocGFyYW1zfHxbXSkuZm9yRWFjaChkPT57Yy5zZXQoZC5uYW1lLGQudmFsdWUpfSk7bGV0IHU9bmV3IE1hcDtyZXR1cm4obC5tZXRyaWNzfHxbXSkuZm9yRWFjaChkPT57dS5zZXQoZC50YWcsZC52YWx1ZSl9KSx7cnVuOmwsZXhwZXJpbWVudE5hbWU6cj8ubmFtZXx8IiIsZXhwZXJpbWVudEFsaWFzOmFbZV0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChsLmlkKSkscnVuQ29sb3I6c1tsLmlkXSxocGFyYW1zOmMsbWV0cmljczp1fX0pKSl9b25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3RCh7cnVuSWQ6ZS5ydW4uaWR9KSl9b25SdW5TZWxlY3Rpb25EYmxDbGljayhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1EKHtydW5JZDplLnJ1bi5pZH0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUoZSl7bGV0e2l0ZW1zOml9PWUscj1pLm1hcCgoe3J1bjpvfSk9Pm8uaWQpO3RoaXMuc3RvcmUuZGlzcGF0Y2goU0Qoe3J1bklkczpyfSkpfW9uUGFnaW5hdGlvbkNoYW5nZShlKXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7bGV0e3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChFRCh7cGFnZUluZGV4OmkscGFnZVNpemU6cn0pKX1vblNvcnRDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChURChlKSl9b25SZWdleEZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJDKHtyZWdleFN0cmluZzplfSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOmUsbmV3Q29sb3I6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goREQoe3J1bklkOmUsbmV3Q29sb3I6aX0pKX1vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtsZXR7aHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99KSl9b25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c30pKX1vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxtZXRyaWNUYWc6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c30pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtdGFibGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJmbGV4LWxheW91dCIsaS51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7dXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixjb2x1bW5zOiJjb2x1bW5zIixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93SHBhcmFtc0FuZE1ldHJpY3M6InNob3dIcGFyYW1zQW5kTWV0cmljcyJ9LGRlY2xzOjExLHZhcnM6MzUsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsInVzZUZsZXhpYmxlTGF5b3V0IiwibnVtU2VsZWN0ZWRJdGVtcyIsImNvbHVtbnMiLCJocGFyYW1Db2x1bW5zIiwibWV0cmljQ29sdW1ucyIsInNob3dFeHBlcmltZW50TmFtZSIsInBhZ2VJdGVtcyIsImZpbHRlcmVkSXRlbXNMZW5ndGgiLCJhbGxJdGVtc0xlbmd0aCIsImxvYWRpbmciLCJwYWdpbmF0aW9uT3B0aW9uIiwicmVnZXhGaWx0ZXIiLCJzb3J0T3B0aW9uIiwidXNlUGFnaW5hdGlvbiIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25TZWxlY3Rpb25EYmxDbGljayIsIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNvcnRDaGFuZ2UiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicnVucy10YWJsZS1jb21wb25lbnQiLDApLFAoIm9uU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvblRvZ2dsZShvKX0pKCJvblNlbGVjdGlvbkRibENsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvbkRibENsaWNrKG8pfSkoIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlU2VsZWN0aW9uVG9nZ2xlKG8pfSkoIm9uUGFnaW5hdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdpbmF0aW9uQ2hhbmdlKG8pfSkoIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhGaWx0ZXJDaGFuZ2Uobyl9KSgib25Tb3J0Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNvcnRDaGFuZ2Uobyl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5Db2xvckNoYW5nZShvKX0pKCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQobyl9KSgib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKG8pfSkoIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25NZXRyaWNGaWx0ZXJDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSx2KCkpLDImZSYmYigiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgidXNlRmxleGlibGVMYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpKCJudW1TZWxlY3RlZEl0ZW1zIixXKDEsMTUsaS5udW1TZWxlY3RlZEl0ZW1zJCkpKCJjb2x1bW5zIixpLmNvbHVtbnMpKCJocGFyYW1Db2x1bW5zIixXKDIsMTcsaS5ocGFyYW1Db2x1bW5zJCkpKCJtZXRyaWNDb2x1bW5zIixXKDMsMTksaS5tZXRyaWNDb2x1bW5zJCkpKCJzaG93RXhwZXJpbWVudE5hbWUiLGkuaXNFeHBlcmltZW50TmFtZVZpc2libGUoKSkoInBhZ2VJdGVtcyIsVyg0LDIxLGkucGFnZUl0ZW1zJCkpKCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIixXKDUsMjMsaS5maWx0ZXJlZEl0ZW1zTGVuZ3RoJCkpKCJhbGxJdGVtc0xlbmd0aCIsVyg2LDI1LGkuYWxsSXRlbXNMZW5ndGgkKSkoImxvYWRpbmciLFcoNywyNyxpLmxvYWRpbmckKSkoInBhZ2luYXRpb25PcHRpb24iLFcoOCwyOSxpLnBhZ2luYXRpb25PcHRpb24kKSkoInJlZ2V4RmlsdGVyIixXKDksMzEsaS5yZWdleEZpbHRlciQpKSgic29ydE9wdGlvbiIsVygxMCwzMyxpLnNvcnRPcHRpb24kKSkoInVzZVBhZ2luYXRpb24iLGkudXNlUGFnaW5hdGlvbil9LGRlcGVuZGVuY2llczpbaXVlLGZ0XSxzdHlsZXM6WyIuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgICA+IHJ1bnMtdGFibGUtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Il1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGNvbHVtbnM6ImNvbHVtbnMifSxkZWNsczoxLHZhcnM6NCxjb25zdHM6W1szLCJ1c2VGbGV4aWJsZUxheW91dCIsImNvbHVtbnMiLCJleHBlcmltZW50SWRzIiwic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInJ1bnMtdGFibGUiLDApLDImZSYmYigidXNlRmxleGlibGVMYXlvdXQiLCEwKSgiY29sdW1ucyIsaS5jb2x1bW5zKSgiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixpLnNob3dIcGFyYW1zQW5kTWV0cmljcyl9LGRlcGVuZGVuY2llczpbc3VlXSxzdHlsZXM6WyJydW5zLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGx1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmV4cGVyaW1lbnRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+aT8/W10pKSx0aGlzLmNvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+W0dzLkNIRUNLQk9YLEdzLlJVTl9OQU1FLGkmJmkubGVuZ3RoPjE/R3MuRVhQRVJJTUVOVF9OQU1FOm51bGwsR3MuUlVOX0NPTE9SXS5maWx0ZXIocj0+bnVsbCE9PXIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmYigiZXhwZXJpbWVudElkcyIsVygxLDMsaS5leHBlcmltZW50SWRzJCkpKCJjb2x1bW5zIixXKDIsNSxpLmNvbHVtbnMkKSkoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W2F1ZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksY3VlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzJD10aGlzLnN0b3JlLnNlbGVjdChkSyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZCJdXSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sic2lkZWJhciIsIiIsMywic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl0sWyJtYWluIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0Yi1kYXNoYm9hcmQtbGF5b3V0IiksTigxLCJydW5zLXNlbGVjdG9yIiwwKSxqKDIsImFzeW5jIiksTigzLCJtZXRyaWNzLW1haW4tdmlldyIsMSksdigpKSwyJmUmJih4KDEpLGIoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsVygyLDEsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MkKSkpfSxkZXBlbmRlbmNpZXM6W0FuZSxUY2UsbHVlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7b3ZlcmZsb3c6aGlkZGVufS5ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjQ1LDE1NywuODUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmViM2I7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwfXRiLWRhc2hib2FyZC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxO292ZXJmbG93OmhpZGRlbn1uYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO3dpZHRoOjM0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2JvcmRlci1yaWdodC1jb2xvcjojNTU1fW1ldHJpY3MtbWFpbi12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCR6PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaSxSaV19KSxufSkoKSxkTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksdXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxreT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsdXVlXX0pLG59KSgpLHBPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxyTyxTaV19KSxufSkoKSxoTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsaWhdfSksbn0pKCksZHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltRY2Usa2Usa3kscE8sZG0sUmksJHAsSF8sQXUsU2ksZWgsQmNlLGt1LFVjZSxxY2UsaE8sekFdfSksbn0pKCkscHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkdWVdfSksbn0pKCksRnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaV19KSxufSkoKSxodWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksdigpKSwyJmUmJmIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W25PXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZPLGtlLHJoLEZ5XX0pLG59KSgpO2JiKGlPLFt5bixYZSxfbSxtdixodWVdLFtdKTt2YXIgTnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlXX0pLG59KSgpLG1PPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxreV19KSxufSkoKSxMeT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ldfSksbn0pKCksbXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxmdWUsUmksU2ksa3UsbU8sTnksTHldfSksbn0pKCksZ089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGd1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZ08sUmksU2ksa3UsaWgsbU8sTnksTHldfSksbn0pKCksX089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFNpXX0pLG59KSgpLF91ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ksX09dfSksbn0pKCksdnVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxWbyxSaSxTaSxBdSxlaF19KSxufSkoKSx5dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFZvLHZ1ZSxyaF19KSxufSkoKSxidWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGdPLHJJLFJpLEhfLEF1LElsLEdEXX0pLG59KSgpLHh1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZk8sa2UsYnVlLF91ZSxreSxGeSx5dWUsUmksU2ksZWgsa3UscmgsTnksTHldfSksbn0pKCksQ3VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxndWUseHVlLG11ZSxGeV19KSxufSkoKSx3dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLElsXX0pLG59KSgpLHZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSx3dWUsUmksTlAsJHAsU2ksSWwsaWgsZF8saE9dfSksbn0pKCksTXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxfTywkcCxmSSxTaSxSaV19KSxufSkoKSxTdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0N1ZSxrZSxkTyxwTyxyTyxSaSxOUCxTaSxBdSxrdSx2TyxNdWUsQ2RdfSksbn0pKCksRXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkTywkeixTdWUsU2ksdk8scHVlXX0pLG59KSgpO2Z1bmN0aW9uIEVxZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpkdixhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZToiTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIifX19XX1mdW5jdGlvbiBUcWUoKXtyZXR1cm4gWSh2ZCxuPT4oe3NjYWxhclNtb290aGluZzpufSkpfWZ1bmN0aW9uIERxZSgpe3JldHVybiBZKG1fLG49Pih7aWdub3JlT3V0bGllcnM6bn0pKX1mdW5jdGlvbiBBcWUoKXtyZXR1cm4gWShmXyxuPT4oe3Rvb2x0aXBTb3J0OlN0cmluZyhuKX0pKX1mdW5jdGlvbiBJcWUoKXtyZXR1cm4gWShyQSxuPT4oe3RpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ6bn0pKX1mdW5jdGlvbiBQcWUoKXtyZXR1cm4gWShoXyxuPT4oe3RpbWVTZXJpZXNDYXJkTWluV2lkdGg6bn0pKX1mdW5jdGlvbiBScWUoKXtyZXR1cm4gWShUQyxuPT4oe3N0ZXBTZWxlY3RvckVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBPcWUoKXtyZXR1cm4gWShIcCxuPT4oe3JhbmdlU2VsZWN0aW9uRW5hYmxlZDpufSkpfWZ1bmN0aW9uIGtxZSgpe3JldHVybiBZKFZwLG49Pih7bGlua2VkVGltZUVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBGcWUoKXtyZXR1cm4gWShnXyxuPT4oe3NpbmdsZVNlbGVjdGlvbkhlYWRlcnM6bn0pKX1mdW5jdGlvbiBOcWUoKXtyZXR1cm4gWShfXyxuPT4oe3JhbmdlU2VsZWN0aW9uSGVhZGVyczpufSkpfXZhciBUdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6SzUsdXNlRmFjdG9yeTpFbmUsZGVwczpbWjVdfSx7cHJvdmlkZTpaNSx1c2VWYWx1ZTpxRH1dLGltcG9ydHM6W2tlLCQwLE1sLFJ1LmZvclBsdWdpbihDQyxjdWUpLEdELEV1ZSxSci5mb3JGZWF0dXJlKFdELHduZSxLNSksTG8uZm9yRmVhdHVyZShbU25lXSksdnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoRXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKFRxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhEcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoQXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKElxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhQcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoUnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE9xZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhrcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoRnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE5xZSldfSksbn0pKCksRHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltmbmUsVHVlXX0pLG59KSgpLFhkPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ1VTVE9NX0VMRU1FTlQ9IkNVU1RPTV9FTEVNRU5UIixuLklGUkFNRT0iSUZSQU1FIixuLk5HX0NPTVBPTkVOVD0iTkdfQ09NUE9ORU5UIixuLk5PTkU9Ik5PTkUifShYZHx8KFhkPXt9KSksWGQpKSgpLExxZT1bInBsdWdpbkNvbnRhaW5lciJdLEJxZT1bIm5nUGx1Z2luQ29udGFpbmVyIl07ZnVuY3Rpb24gVnFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBIcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsVnFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIFVxZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24genFlKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFVxZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksWnQoKSksMiZuKXtsZXQgZT1NKDIpLGk9c3QoNik7eCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZTppKX19ZnVuY3Rpb24ganFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBHcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsanFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlP2UuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOmkpfX1mdW5jdGlvbiBXcWUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsImgzIiwxMCksRCgyLCIgVGhlcmVcdTIwMTlzIG5vIGRhc2hib2FyZCBieSB0aGUgbmFtZSBvZiBcdTIwMWMiKSxnKDMsImNvZGUiKSxEKDQpLHYoKSxEKDUsIlx1MjAxZC4gIiksdigpLGcoNiwicCIpLEQoNywiWW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS4iKSx2KCksZyg4LCJwIiksQWkoOSwxMSksdigpLFp0KCkpLDImbil7bGV0IGU9TSgyKSxpPXN0KDgpO3goNCkseXQoZS5hY3RpdmVQbHVnaW5JZCkseCg1KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKX19ZnVuY3Rpb24gcXFlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJoMyIsMTIpLEQoMiwiIE5vIGRhc2hib2FyZHMgYXJlIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZGF0YSBzZXQuICIpLHYoKSxnKDMsInAiKSxEKDQsIlByb2JhYmxlIGNhdXNlczoiKSx2KCksZyg1LCJ1bCIpKDYsImxpIiksRCg3LCJZb3UgaGF2ZW5cdTIwMTl0IHdyaXR0ZW4gYW55IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4iKSx2KCksZyg4LCJsaSIpLEQoOSwiVGVuc29yQm9hcmQgY2FuXHUyMDE5dCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuIiksdigpKCksRCgxMCwiIElmIHlvdVx1MjAxOXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZSAiKSxnKDExLCJhIiwxMyksRCgxMiwiUkVBRE1FIiksdigpLEQoMTMsIiBhbmQgcGVyaGFwcyB0aGUgIiksZygxNCwiYSIsMTQpLEQoMTUsIlRlbnNvckJvYXJkIHR1dG9yaWFsIiksdigpLEQoMTYsIi4gIiksZygxNywicCIpLEQoMTgsIiBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZSAiKSxnKDE5LCJhIiwxNSksRCgyMCwidGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtcyIpLHYoKSxEKDIxLCIgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuICIpLHYoKSxnKDIyLCJwIiksQWkoMjMsMTEpLHYoKSxadCgpKSwyJm4pe00oMik7bGV0IGU9c3QoOCk7eCgyMyksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFlxZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw2KSgxLCJkaXYiLDcpLEUoMixIcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoMyx6cWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNCxHcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNSxXcWUsMTAsMiwibmctY29udGFpbmVyIiw4KSxFKDYscXFlLDI0LDEsIm5nLWNvbnRhaW5lciIsOCksdigpKCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpbkxvYWRTdGF0ZSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTikseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLlVOS05PV05fUExVR0lOX0lEKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuTk9fRU5BQkxFRF9QTFVHSU5TKX19ZnVuY3Rpb24gWHFlKG4sdCl7aWYoMSZuJiYoZygwLCJoMyIsMTYpLEQoMSwiRGF0YSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpLHYoKSxnKDIsInAiKSxEKDMsIlRoZSBUZW5zb3JCb2FyZCBzZXJ2ZXIgbWF5IGJlIGRvd24gb3IgaW5hY2Nlc3NpYmxlLiIpLHYoKSxnKDQsInAiKSxBaSg1LDExKSx2KCkpLDImbil7TSgpO2xldCBlPXN0KDgpO3goNSksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFFxZShuLHQpe2lmKDEmbiYmKGcoMCwicCIsMTkpKDEsImkiKSxEKDIsIkxvZyBkaXJlY3Rvcnk6ICIpLGcoMywic3BhbiIpLEQoNCksdigpKCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkseXQoZS5kYXRhTG9jYXRpb24pfX1mdW5jdGlvbiBLcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLGooMiwiZGF0ZSIpLHYoKSxFKDMsUXFlLDUsMSwicCIsMTgpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJMYXN0IHJlbG9hZDogIixuZigyLDIsZS5sYXN0VXBkYXRlZCwibWVkaXVtIiksIiIpLHgoMiksYigibmdJZiIsZS5kYXRhTG9jYXRpb24pfX12YXIgWnFlPWZ1bmN0aW9uKG4pe3JldHVybntwbHVnaW5zOiEwLCJpcy1maXJzdC1wYXJ0eS1wbHVnaW4iOm59fSxCbD0oKCk9PihmdW5jdGlvbihuKXtuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ9MF09IkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EIixuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRD0xXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTj0yXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOIixuW24uTk9fRU5BQkxFRF9QTFVHSU5TPTNdPSJOT19FTkFCTEVEX1BMVUdJTlMiLG5bbi5VTktOT1dOX1BMVUdJTl9JRD00XT0iVU5LTk9XTl9QTFVHSU5fSUQiLG5bbi5MT0FERUQ9NV09IkxPQURFRCIsbltuLkxPQURJTkc9Nl09IkxPQURJTkcifShCbHx8KEJsPXt9KSksQmwpKSgpLEF1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMucGx1Z2luUmVnaXN0cnk9aSx0aGlzLnBsdWdpbkFwaUhvc3Q9cix0aGlzLlBsdWdpbkxvYWRTdGF0ZT1CbCx0aGlzLkxvYWRpbmdNZWNoYW5pc21UeXBlPVhkLHRoaXMucGx1Z2luSW5zdGFuY2VzPW5ldyBNYXB9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fCF0aGlzLmFjdGl2ZUtub3duUGx1Z2lufHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRHx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLkxPQURJTkcpcmV0dXJuO2xldCBpPUJvb2xlYW4odGhpcy5hY3RpdmVLbm93blBsdWdpbiYmIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkKSk7aWYoZS5hY3RpdmVLbm93blBsdWdpbnx8ZS5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8ZS5zZXR0aW5nc0xvYWRTdGF0ZSl7bGV0IHI9ZS5hY3RpdmVLbm93blBsdWdpbj8ucHJldmlvdXNWYWx1ZTtpZihyJiZyLmlkIT09dGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCYmdGhpcy5oaWRlUGx1Z2luKHIpLGkpe2xldCBvPXRoaXMuY3JlYXRlUGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pO28mJnRoaXMucGx1Z2luSW5zdGFuY2VzLnNldCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkLG8pfWVsc2UgdGhpcy5zaG93UGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pfShpfHxlLmxhc3RVcGRhdGVkKSYmdGhpcy5yZWxvYWQodGhpcy5hY3RpdmVLbm93blBsdWdpbixpKX1oaWRlUGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDowLG92ZXJmbG93OiJoaWRkZW4iLHZpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pfXNob3dQbHVnaW4oZSl7aWYoIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyhlLmlkKSlyZXR1cm47bGV0IGk9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO09iamVjdC5hc3NpZ24oaS5zdHlsZSx7bWF4SGVpZ2h0Om51bGwsb3ZlcmZsb3c6bnVsbCx2aXNpYmlsaXR5Om51bGwscG9zaXRpb246bnVsbH0pfWNyZWF0ZVBsdWdpbihlKXtsZXQgaT1udWxsO3N3aXRjaChlLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgWGQuQ1VTVE9NX0VMRU1FTlQ6aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUubG9hZGluZ19tZWNoYW5pc20uZWxlbWVudF9uYW1lKSxpLnJlbG9hZE9uUmVhZHk9ITEsaS5mZWF0dXJlRmxhZ3M9dGhpcy5mZWF0dXJlRmxhZ3MsdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5JRlJBTUU6aWYoIXRoaXMucGx1Z2luQXBpSG9zdCl0aHJvdyBFcnJvcihgSUZSQU1FLWJhc2VkIHBsdWdpbnMgbm90IHN1cHBvcnRlZDogJHtlLmlkfWApO2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksaS5zZXRBdHRyaWJ1dGUoInNyYyIsYGRhdGEvcGx1Z2luX2VudHJ5Lmh0bWw/bmFtZT0ke2UuaWR9YCksdGhpcy5wbHVnaW5BcGlIb3N0LnJlZ2lzdGVyUGx1Z2luSWZyYW1lKGksZS5pZCksdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5OR19DT01QT05FTlQ6bGV0IHI9dGhpcy5wbHVnaW5SZWdpc3RyeS5nZXRDb21wb25lbnQoZS5pZCk7aWYocil7bGV0IG89dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkocik7aT10aGlzLm5nUGx1Z2luQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChvKS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50fWVsc2UgY29uc29sZS5lcnJvcihgTm8gcmVnaXN0ZXJlZCBBbmd1bGFyIGNvbXBvbmVudCBmb3IgcGx1Z2luOiAke2UuaWR9YCk7YnJlYWs7Y2FzZSBYZC5OT05FOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBwbHVnaW4iKX1yZXR1cm4gaX1yZWxvYWQoZSxpKXtpZighaSYmZS5kaXNhYmxlX3JlbG9hZClyZXR1cm47bGV0IHI9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO3ImJnIucmVsb2FkJiZyLnJlbG9hZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEVvKSx3KFJ1KSx3KHhBLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwbHVnaW5zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChMcWUsNyxBZSksbHQoQnFlLDcseWkpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnBsdWdpbnNDb250YWluZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkubmdQbHVnaW5Db250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCIsYWN0aXZlS25vd25QbHVnaW46ImFjdGl2ZUtub3duUGx1Z2luIixwbHVnaW5Mb2FkU3RhdGU6InBsdWdpbkxvYWRTdGF0ZSIsZGF0YUxvY2F0aW9uOiJkYXRhTG9jYXRpb24iLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsc2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIixmZWF0dXJlRmxhZ3M6ImZlYXR1cmVGbGFncyIsbGFzdFVwZGF0ZWQ6Imxhc3RVcGRhdGVkIixlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbInBsdWdpbkNvbnRhaW5lciIsIiJdLFsibmdQbHVnaW5Db250YWluZXIiLCIiXSxbImNsYXNzIiwid2FybmluZyIsMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImVudmlyb25tZW50RmFpbHVyZURlZmF1bHRUZW1wbGF0ZSIsIiJdLFsiZGF0ZUFuZERhdGFMb2NhdGlvbiIsIiJdLFsxLCJ3YXJuaW5nIiwzLCJuZ1N3aXRjaCJdLFsxLCJ3YXJuaW5nLW1lc3NhZ2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidW5rbm93bi1wbHVnaW4iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJuby1hY3RpdmUtcGx1Z2luIl0sWyJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciXSxbMSwiZW52aXJvbm1lbnQtbm90LWxvYWRlZCJdLFsxLCJsYXN0LXJlbG9hZC10aW1lIl0sWyJjbGFzcyIsImRhdGEtbG9jYXRpb24iLDQsIm5nSWYiXSxbMSwiZGF0YS1sb2NhdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLEFpKDIsbnVsbCwyKSx2KCksRSg0LFlxZSw3LDYsImRpdiIsMyksRSg1LFhxZSw2LDEsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLEUoNyxLcWUsNCw1LCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSksMiZlJiYoYigibmdDbGFzcyIsSG4oMixacWUsKG51bGw9PWkuYWN0aXZlS25vd25QbHVnaW4/bnVsbDppLmFjdGl2ZUtub3duUGx1Z2luLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpIT09aS5Mb2FkaW5nTWVjaGFuaXNtVHlwZS5JRlJBTUUpKSx4KDQpLGIoIm5nSWYiLGkucGx1Z2luTG9hZFN0YXRlIT09aS5QbHVnaW5Mb2FkU3RhdGUuTE9BREVEJiZpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURJTkcpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxObyxocixJcixVMF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wbHVnaW5zLmlzLWZpcnN0LXBhcnR5LXBsdWdpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmZmY7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzAzMDMwfS53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7bWFyZ2luOjgwcHggYXV0byAwO21heC13aWR0aDo1NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGFzdC1yZWxvYWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zdHlsZTppdGFsaWN9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdICAgICBpZnJhbWV7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSnFlPVkoc18sZHMsKG4sdCk9PnQmJm5bdF0/T2JqZWN0LmFzc2lnbih7aWQ6dH0sblt0XSk6bnVsbCkseU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVLbm93blBsdWdpbiQ9dGhpcy5zdG9yZS5zZWxlY3QoSnFlKSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnNlbGVjdChkcyksdGhpcy5wbHVnaW5Mb2FkU3RhdGUkPXBuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4kLHRoaXMuYWN0aXZlUGx1Z2luSWQkLHRoaXMuc3RvcmUuc2VsZWN0KHlEKSkucGlwZShCKChbaSxyLG9dKT0+bnVsbCE9PW8uZmFpbHVyZUNvZGU/by5mYWlsdXJlQ29kZT09PUNsLk5PVF9GT1VORD9CbC5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORDpvLmZhaWx1cmVDb2RlPT09Q2wuUEVSTUlTU0lPTl9ERU5JRUQ/QmwuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRDpCbC5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV046bnVsbCE9PWk/QmwuTE9BREVEOm51bGw9PT1vLmxhc3RMb2FkZWRUaW1lSW5NcyYmby5zdGF0ZT09PUVlLkxPQURJTkc/QmwuTE9BRElORzpyP0JsLlVOS05PV05fUExVR0lOX0lEOkJsLk5PX0VOQUJMRURfUExVR0lOUykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyksdGhpcy5kYXRhTG9jYXRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KGJEKS5waXBlKEIoaT0+aS5kYXRhX2xvY2F0aW9uKSksdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoUHApLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChCbyksdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0U2V0dGluZ3NMb2FkU3RhdGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucyJdXSxpbnB1dHM6e2Vudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJ9LGRlY2xzOjksdmFyczoyNyxjb25zdHM6W1szLCJhY3RpdmVLbm93blBsdWdpbiIsImFjdGl2ZVBsdWdpbklkIiwiZGF0YUxvY2F0aW9uIiwibGFzdFVwZGF0ZWQiLCJwbHVnaW5Mb2FkU3RhdGUiLCJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsInNldHRpbmdzTG9hZFN0YXRlIiwiZmVhdHVyZUZsYWdzIiwiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicGx1Z2lucy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIikpLDImZSYmYigiYWN0aXZlS25vd25QbHVnaW4iLFcoMSwxMSxpLmFjdGl2ZUtub3duUGx1Z2luJCkpKCJhY3RpdmVQbHVnaW5JZCIsVygyLDEzLGkuYWN0aXZlUGx1Z2luSWQkKSkoImRhdGFMb2NhdGlvbiIsVygzLDE1LGkuZGF0YUxvY2F0aW9uJCkpKCJsYXN0VXBkYXRlZCIsVyg0LDE3LGkubGFzdExvYWRlZFRpbWVJbk1zJCkpKCJwbHVnaW5Mb2FkU3RhdGUiLFcoNSwxOSxpLnBsdWdpbkxvYWRTdGF0ZSQpKSgiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLFcoNiwyMSxpLmlzRmVhdHVyZUZsYWdzTG9hZGVkJCkpKCJzZXR0aW5nc0xvYWRTdGF0ZSIsVyg3LDIzLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSkoImZlYXR1cmVGbGFncyIsVyg4LDI1LGkuZmVhdHVyZUZsYWdzJCkpKCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUpKCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGkuZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSl9LHN0eWxlczpbInBsdWdpbnMtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7IGhlaWdodDogMTAwJTsgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYk89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W01sLGtlLFJ1XX0pLG59KSgpO2JiKHlPLFtBdWVdLFtmdF0pO3ZhciBJdWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRvY3VtZW50PWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9dGhpcy5vblZpc2liaWxpdHlDaGFuZ2VJbXBsLmJpbmQodGhpcyksdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnBpcGUoZm4oYWEuZ2V0UmVsb2FkRW5hYmxlZCkpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5waXBlKGZuKGFhLmdldFJlbG9hZFBlcmlvZEluTXMpKSx0aGlzLnJlbG9hZFRpbWVySWQ9bnVsbCx0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UpLHBuKHRoaXMucmVsb2FkRW5hYmxlZCQucGlwZShkaSgpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkLnBpcGUoZGkoKSkpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLmNhbmNlbExvYWQoKSxlJiZ0aGlzLmxvYWQoaSl9KX1vblZpc2liaWxpdHlDaGFuZ2VJbXBsKCl7InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJnRoaXMubWlzc2VkQXV0b1JlbG9hZCYmKHRoaXMubWlzc2VkQXV0b1JlbG9hZD0hMSx0aGlzLnN0b3JlLmRpc3BhdGNoKEhhKCkpKX1sb2FkKGUpe3RoaXMucmVsb2FkVGltZXJJZD1zZXRUaW1lb3V0KCgpPT57InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5zdG9yZS5kaXNwYXRjaChIYSgpKTp0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITAsdGhpcy5sb2FkKGUpfSxlKX1jYW5jZWxMb2FkKCl7bnVsbCE9PXRoaXMucmVsb2FkVGltZXJJZCYmY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXJJZCksdGhpcy5yZWxvYWRUaW1lcklkPW51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLmNhbmNlbExvYWQoKSx0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSx0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KEJ0KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicmVsb2FkZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFB1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCJdXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJwbHVnaW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInBsdWdpbnMiLDApKDEsInJlbG9hZGVyIil9LGRlcGVuZGVuY2llczpbeU8sSXVlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksZTg9InNtb290aGluZyIsdDg9InJ1bkNvbG9yR3JvdXAiLG44PSJ0YWdGaWx0ZXIiLGk4PSJydW5GaWx0ZXIiLHI4PSJyZWdleDoiLHhPPWNsYXNzIGV4dGVuZHMgUnVle2dldE1ldHJpY3NQaW5uZWRDYXJkcyh0KXtyZXR1cm4gcG4oW3Quc2VsZWN0KEVDKSx0LnNlbGVjdChsWildKS5waXBlKEIoKFtlLGldKT0+e2lmKCFlLmxlbmd0aCYmIWkubGVuZ3RoKXJldHVybltdO2xldCBvPVsuLi5lLm1hcCgoe3BsdWdpbjpzLHRhZzphLHNhbXBsZTpsLHJ1bklkOmN9KT0+e2xldCB1PXtwbHVnaW46cyx0YWc6YX07cmV0dXJuIHphKHMpJiYodS5ydW5JZD1jKSxVYShzKSYmKHUuc2FtcGxlPWwpLHV9KSwuLi5pXTtyZXR1cm5be2tleToicGlubmVkQ2FyZHMiLHZhbHVlOkpTT04uc3RyaW5naWZ5KG8pfV19KSl9c2VyaWFsaXplU3RhdGVUb1F1ZXJ5UGFyYW1zKHQpe3JldHVybiBwbihbdGhpcy5nZXRNZXRyaWNzUGlubmVkQ2FyZHModCksdC5zZWxlY3QoX2MpLnBpcGUoQihlPT5lP1t7a2V5Om44LHZhbHVlOmV9XTpbXSkpLHBuKFt0LnNlbGVjdChnQyksdC5zZWxlY3QoV2YpXSkucGlwZShCKChbZSxpXSk9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT57aWYodm9pZCAwPT09aSlyZXR1cm57fTtsZXQgcj10W2VdO3JldHVybiByJiZyLnF1ZXJ5UGFyYW1PdmVycmlkZT97a2V5OnIucXVlcnlQYXJhbU92ZXJyaWRlLHZhbHVlOmk/LnRvU3RyaW5nKCl9Ont9fSkuZmlsdGVyKCh7a2V5OmUsdmFsdWU6aX0pPT5lJiZ2b2lkIDAhPT1pKX0oZSxpKSkpLHQuc2VsZWN0KHVaKS5waXBlKEIoZT0+TnVtYmVyLmlzRmluaXRlKGUuc2NhbGFyU21vb3RoaW5nKT9be2tleTplOCx2YWx1ZTpTdHJpbmcoZS5zY2FsYXJTbW9vdGhpbmcpfV06W10pKSx0LnNlbGVjdChUVikucGlwZShCKGU9PntpZighZSlyZXR1cm5bXTtsZXQgaTtzd2l0Y2goZS5rZXkpe2Nhc2UgZXIuRVhQRVJJTUVOVDppPSJleHBlcmltZW50IjticmVhaztjYXNlIGVyLlJVTjppPSJydW4iO2JyZWFrO2Nhc2UgZXIuUkVHRVg6aT1gJHtyOH0ke2UucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5OnQ4LHZhbHVlOml9XX0pKSx0LnNlbGVjdChKZikucGlwZShCKGU9PmU/W3trZXk6aTgsdmFsdWU6ZX1dOltdKSldKS5waXBlKEIoZT0+ZS5mbGF0KCkpKX1kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHQpe2xldCBlPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwscz1udWxsO2ZvcihsZXR7a2V5OmEsdmFsdWU6bH1vZiB0KXN3aXRjaChhKXtjYXNlInBpbm5lZENhcmRzIjplPXRZZShsKTticmVhaztjYXNlIGU4Omk9TnVtYmVyKGwpO2JyZWFrO2Nhc2UgdDg6c3dpdGNoKGwpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OmVyLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6ZXIuUlVOfX1pZihsLnN0YXJ0c1dpdGgocjgpKXtsZXQgYz1sLnNsaWNlKHI4Lmxlbmd0aCk7bz17a2V5OmVyLlJFR0VYLHJlZ2V4U3RyaW5nOmN9fWJyZWFrO2Nhc2Ugbjg6cj1sO2JyZWFrO2Nhc2UgaTg6cz1sfXJldHVybnttZXRyaWNzOntwaW5uZWRDYXJkczplfHxbXSxzbW9vdGhpbmc6aSx0YWdGaWx0ZXI6cn0scnVuczp7Z3JvdXBCeTpvLHJlZ2V4RmlsdGVyOnN9fX19O2Z1bmN0aW9uIHRZZShuKXtsZXQgdDt0cnl7dD1KU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBudWxsO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIGkucnVuSWQscz0ibnVtYmVyIj09dHlwZW9mIGkuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiBpLnRhZyxsPW98fHR5cGVvZiBpLnJ1bklkPiJ1IixjPXN8fHR5cGVvZiBpLnNhbXBsZT4idSI7aWYoISgic3RyaW5nIj09dHlwZW9mIGkucGx1Z2luJiZhJiZsJiZjJiZMSyhpLnBsdWdpbikmJmkudGFnKSljb250aW51ZTtpZih6YShpLnBsdWdpbikpe2lmKCFpLnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYoaS5ydW5JZCljb250aW51ZTtpZihzJiYoIVVhKGkucGx1Z2luKXx8IU51bWJlci5pc0ludGVnZXIoaS5zYW1wbGUpfHxpLnNhbXBsZTwwKSljb250aW51ZTtsZXQgdT17cGx1Z2luOmkucGx1Z2luLHRhZzppLnRhZ307byYmKHUucnVuSWQ9aS5ydW5JZCkscyYmKHUuc2FtcGxlPWkuc2FtcGxlKSxlLnB1c2godSl9cmV0dXJuIGV9ZnVuY3Rpb24ga3VlKCl7cmV0dXJuW3tyb3V0ZUtpbmQ6ZmkuRVhQRVJJTUVOVCxwYXRoOiIvIixuZ0NvbXBvbmVudDpQdWUsZGVmYXVsdFJvdXRlOiEwLGRlZXBMaW5rUHJvdmlkZXI6bmV3IHhPfV19ZnVuY3Rpb24gblllKG4pe3JldHVybih0LGUpPT57bGV0IGk9bih0LGUpO3JldHVybiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGUudHlwZSksY29uc29sZS5sb2coInByZXYgc3RhdGUiLHQpLGNvbnNvbGUubG9nKCJhY3Rpb24iLGUpLGNvbnNvbGUubG9nKCJuZXh0IHN0YXRlIixpKSxjb25zb2xlLmdyb3VwRW5kKCksaX19ZnVuY3Rpb24gRnVlKCl7cmV0dXJuIEJiKCk/blllOm49Pih0LGUpPT5uKHQsZSl9eE89WTgoW0g2KCldLHhPKTt2YXIgTnVlPW5ldyBzZSgiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KSxMdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VzAsdXNlRmFjdG9yeTpGdWUsbXVsdGk6ITB9XSxpbXBvcnRzOltSci5mb3JSb290KE51ZSx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxMby5mb3JSb290KFtdKV19KSxufSkoKSxCdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFZ1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsYk8sQnVlXX0pLG59KSgpLG84PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm4sYm9vdHN0cmFwOltWZWVdfSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZF8sUWVlLHlULE5YLCQwLEhlZSxoYy5yZWdpc3RlclJvdXRlcyhrdWUpLHpBLFVBLFVlZSxWdWUsTWwsWWVlLGplZSxaZWUsT0QsSmVlLEdlZSxZQix4QSxiTyxnQSxtSSxMdWUsRHVlXX0pLG59KSgpOyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/QjMoKS5ib290c3RyYXBNb2R1bGUobzgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKT0+e0IzKCkuYm9vdHN0cmFwTW9kdWxlKG84KX0pLGZ1bmN0aW9uKCl7aWYoajcpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTt6Nz0hMX0oKX0pKCk7Ci8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAogKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4zLjYgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuCiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9ibG9iL21hc3Rlci9MSUNFTlNFCiAqLwovL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5MiwgYW5kIGNhdXNlcwovL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4KLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCi8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KCnZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKGZ1bmN0aW9uIChnbG9iYWwsIHNldFRpbWVvdXQpIHsKICAgIHZhciByZXEsIHMsIGhlYWQsIGJhc2VFbGVtZW50LCBkYXRhTWFpbiwgc3JjLAogICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCiAgICAgICAgdmVyc2lvbiA9ICcyLjMuNicsCiAgICAgICAgY29tbWVudFJlZ0V4cCA9IC9cL1wqW1xzXFNdKj9cKlwvfChbXjoiJz1dfF4pXC9cLy4qJC9tZywKICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAogICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKICAgICAgICBjdXJyRGlyUmVnRXhwID0gL15cLlwvLywKICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCiAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAogICAgICAgIGhhc093biA9IG9wLmhhc093blByb3BlcnR5LAogICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGUKICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAogICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRlLCBidXQgbm90IHN1cmUgaG93CiAgICAgICAgLy90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCiAgICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwogICAgICAgICAgICAgICAgICAgICAgL15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAogICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAogICAgICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCiAgICAgICAgaXNPcGVyYSA9IHR5cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT3BlcmFdJywKICAgICAgICBjb250ZXh0cyA9IHt9LAogICAgICAgIGNmZyA9IHt9LAogICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCiAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKCiAgICAvL0NvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlICcpLy9jb21tZW50JywgZG8gbm90IGxvc2UgdGhlIHByZWZpeCB0byBjb21tZW50LgogICAgZnVuY3Rpb24gY29tbWVudFJlcGxhY2UobWF0Y2gsIHNpbmdsZVByZWZpeCkgewogICAgICAgIHJldHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKICAgICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCiAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOwogICAgfQoKICAgIC8qKgogICAgICogQ3ljbGVzIG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gKICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKICAgICAgICB2YXIgcHJvcDsKICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7CiAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKICAgICAgICAgICAgICAgIGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgewogICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFpc0FycmF5KHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZhbHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAogICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgogICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihlcnIpIHsKICAgICAgICB0aHJvdyBlcnI7CiAgICB9CgogICAgLy9BbGxvdyBnZXR0aW5nIGEgZ2xvYmFsIHRoYXQgaXMgZXhwcmVzc2VkIGluCiAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgogICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHZhciBnID0gZ2xvYmFsOwogICAgICAgIGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKICAgICAgICAgICAgZyA9IGdbcGFydF07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGVycm9yIElEIHRoYXQgbWFwcyB0byBhbiBJRCBvbiBhIHdlYiBwYWdlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KICAgICAqCiAgICAgKiBAcmV0dXJucyB7RXJyb3J9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihpZCwgbXNnLCBlcnIsIHJlcXVpcmVNb2R1bGVzKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0cHM6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjJyArIGlkKTsKICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7CiAgICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZTsKICAgIH0KCiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAogICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVvZiByZXF1aXJlanMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkgewogICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3RhbmNlLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNmZyA9IHJlcXVpcmVqczsKICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKICAgICAgICAvL2Fzc3VtZSBpdCBpcyBhIGNvbmZpZyBvYmplY3QuCiAgICAgICAgY2ZnID0gcmVxdWlyZTsKICAgICAgICByZXF1aXJlID0gdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKICAgICAgICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0LCBoYW5kbGVycywKICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCiAgICAgICAgICAgIGNvbmZpZyA9IHsKICAgICAgICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBkZWZhdWx0IGZvciBtYXAKICAgICAgICAgICAgICAgIC8vY29uZmlnIHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAogICAgICAgICAgICAgICAgLy93aWxsIHJ1biBmYXN0ZXIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KICAgICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAogICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHt9LAogICAgICAgICAgICAgICAgcGtnczoge30sCiAgICAgICAgICAgICAgICBzaGltOiB7fSwKICAgICAgICAgICAgICAgIGNvbmZpZzoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgLy9yZWdpc3RyeSBvZiBqdXN0IGVuYWJsZWQgbW9kdWxlcywgdG8gc3BlZWQKICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCiAgICAgICAgICAgIC8vYXJlIHJlZ2lzdGVyZWQsIGJ1dCBub3QgYWN0aXZhdGVkLgogICAgICAgICAgICBlbmFibGVkUmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKICAgICAgICAgICAgZGVmUXVldWUgPSBbXSwKICAgICAgICAgICAgZGVmaW5lZCA9IHt9LAogICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCiAgICAgICAgICAgIGJ1bmRsZXNNYXAgPSB7fSwKICAgICAgICAgICAgcmVxdWlyZUNvdW50ZXIgPSAxLAogICAgICAgICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lCiAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCiAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKICAgICAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgogICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS4KICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpLCBwYXJ0OwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwogICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgewogICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLiwKICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CiAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgd29yayB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGgsIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnQKICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgogICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChpID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCiAgICAgICAgICogdG8uCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcCBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgdmFsdWUuIFNob3VsZAogICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciBwa2dNYWluLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwgbGFzdEluZGV4LAogICAgICAgICAgICAgICAgZm91bmRNYXAsIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgbm9ybWFsaXplZEJhc2VQYXJ0cywKICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpKSwKICAgICAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsCiAgICAgICAgICAgICAgICBzdGFyTWFwID0gbWFwICYmIG1hcFsnKiddOwoKICAgICAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKCiAgICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQgY29tcGF0aWJpbGl0eSwgc3RyaXAgLmpzIGZyb20gZW5kCiAgICAgICAgICAgICAgICAvLyBvZiBJRHMuIEhhdmUgdG8gZG8gdGhpcyBoZXJlLCBhbmQgbm90IGluIG5hbWVUb1VybAogICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBub2RlIGFsbG93cyBlaXRoZXIgLmpzIG9yIG5vbiAuanMgdG8gbWFwCiAgICAgICAgICAgICAgICAvLyB0byBzYW1lIGZpbGUuCiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm5vZGVJZENvbXBhdCAmJiBqc1N1ZmZpeFJlZ0V4cC50ZXN0KG5hbWVbbGFzdEluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lW2xhc3RJbmRleF0gPSBuYW1lW2xhc3RJbmRleF0ucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lCiAgICAgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCiAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwogICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bwogICAgICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yCiAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuam9pbignLycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgogICAgICAgICAgICBpZiAoYXBwbHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1hcCkpIHsKICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKCiAgICAgICAgICAgICAgICBvdXRlckxvb3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lU2VnbWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24gdGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJMb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBmb3IgYSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCwKICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rhck1hcCAmJiBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3VuZFN0YXJNYXApIHsKICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmFtZSBwb2ludHMgdG8gYSBwYWNrYWdlJ3MgbmFtZSwgdXNlCiAgICAgICAgICAgIC8vIHRoZSBwYWNrYWdlIG1haW4gaW5zdGVhZC4KICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbmFtZSk7CgogICAgICAgICAgICByZXR1cm4gcGtnTWFpbiA/IHBrZ01haW4gOiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KG5hbWUpIHsKICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKSA9PT0gbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYXNQYXRoRmFsbGJhY2soaWQpIHsKICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CiAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJyYXkocGF0aENvbmZpZykgJiYgcGF0aENvbmZpZy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvL1BvcCBvZmYgdGhlIGZpcnN0IGFycmF5IHZhbHVlLCBzaW5jZSBpdCBmYWlsZWQsIGFuZAogICAgICAgICAgICAgICAgLy9yZXRyeQogICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOwogICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlLnVuZGVmKGlkKTsKCiAgICAgICAgICAgICAgICAvL0N1c3RvbSByZXF1aXJlIHRoYXQgZG9lcyBub3QgZG8gbWFwIHRyYW5zbGF0aW9uLCBzaW5jZQogICAgICAgICAgICAgICAgLy9JRCBpcyAiYWJzb2x1dGUiLCBhbHJlYWR5IG1hcHBlZC9yZXNvbHZlZC4KICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUobnVsbCwgewogICAgICAgICAgICAgICAgICAgIHNraXBNYXA6IHRydWUKICAgICAgICAgICAgICAgIH0pKFtpZF0pOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL1R1cm5zIGEgcGx1Z2luIXJlc291cmNlIHRvIFtwbHVnaW4sIHJlc291cmNlXQogICAgICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQogICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KICAgICAgICBmdW5jdGlvbiBzcGxpdFByZWZpeChuYW1lKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXgsCiAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVmaXgsIG1vZHVsZQogICAgICAgICAqIG5hbWUsIGFuZCBwYXRoLiBJZiBwYXJlbnRNb2R1bGVNYXAgaXMgcHJvdmlkZWQgaXQgd2lsbAogICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbW9kdWxlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKICAgICAgICAgKiBmb3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc05vcm1hbGl6ZWQ6IGlzIHRoZSBJRCBhbHJlYWR5IG5vcm1hbGl6ZWQuCiAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCiAgICAgICAgICogU2hvdWxkIG9ubHkgYmUgdHJ1ZSBpZiB0aGlzIG1hcCBpcyBmb3IgYSBkZXBlbmRlbmN5LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRzLAogICAgICAgICAgICAgICAgcHJlZml4ID0gbnVsbCwKICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSB0cnVlLAogICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKCiAgICAgICAgICAgIC8vSWYgbm8gbmFtZSwgdGhlbiBpdCBtZWFucyBpdCBpcyBhIHJlcXVpcmUgY2FsbCwgZ2VuZXJhdGUgYW4KICAgICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgogICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOwogICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHNbMV07CgogICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBub3JtYWxpemUocHJlZml4LCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbk1vZHVsZSAmJiBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXN0ZWQgcGx1Z2luIHJlZmVyZW5jZXMsIHRoZW4gZG8gbm90IHRyeSB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFzIGl0IHdpbGwgbm90IG5vcm1hbGl6ZSBjb3JyZWN0bHkuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGxhY2VzIGEgcmVzdHJpY3Rpb24gb24gcmVzb3VyY2VJZHMsIGFuZCB0aGUgbG9uZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm0gc29sdXRpb24gaXMgbm90IHRvIG5vcm1hbGl6ZSB1bnRpbCBwbHVnaW5zIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgYW5kIGFsbCBub3JtYWxpemF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGluZyBvZiBhIGxvYWRlciBwbHVnaW4uIEJ1dCBmb3Igbm93LCBmaXhlcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIHVzZXMuIERldGFpbHMgaW4gIzExMzEKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lLmluZGV4T2YoJyEnKSA9PT0gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgcmVndWxhciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwoKICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZWQgbmFtZSBtYXkgYmUgYSBwbHVnaW4gSUQgZHVlIHRvIG1hcCBjb25maWcKICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QKICAgICAgICAgICAgICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQuCiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKICAgICAgICAgICAgICAgICAgICBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgdGhlIGlkIGlzIGEgcGx1Z2luIGlkIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgaXQgbmVlZHMKICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQogICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUuCiAgICAgICAgICAgIHN1ZmZpeCA9IHByZWZpeCAmJiAhcGx1Z2luTW9kdWxlICYmICFpc05vcm1hbGl6ZWQgPwogICAgICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CiAgICAgICAgICAgICAgICAgICAgICcnOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAogICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsCiAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgsCiAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAogICAgICAgICAgICAgICAgaWQ6IChwcmVmaXggPwogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0TW9kdWxlKGRlcE1hcCkgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1vZDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwgbmFtZSwgZm4pIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoaGFzUHJvcChkZWZpbmVkLCBpZCkgJiYKICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgewogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgIGZuKGRlZmluZWRbaWRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1vZCA9IGdldE1vZHVsZShkZXBNYXApOwogICAgICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIsIGVycmJhY2spIHsKICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRoaXMgY29udGV4dCdzCiAgICAgICAgICogZGVmUXVldWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgewogICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZRdWV1ZSBpdGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgZWFjaChnbG9iYWxEZWZRdWV1ZSwgZnVuY3Rpb24ocXVldWVJdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gcXVldWVJdGVtWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBoYW5kbGVycyA9IHsKICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLnJlcXVpcmUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1vZC5tYXApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2V4cG9ydHMnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5leHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFttb2QubWFwLmlkXSA9IG1vZC5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5leHBvcnRzID0gZGVmaW5lZFttb2QubWFwLmlkXSA9IHt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QubW9kdWxlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtb2QubWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCkgfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1vZC5leHBvcnRzIHx8IChtb2QuZXhwb3J0cyA9IHt9KQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgewogICAgICAgICAgICAvL0NsZWFuIHVwIG1hY2hpbmVyeSB1c2VkIGZvciB3YWl0aW5nIG1vZHVsZXMuCiAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CiAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7CiAgICAgICAgICAgIHZhciBpZCA9IG1vZC5tYXAuaWQ7CgogICAgICAgICAgICBpZiAobW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICBlYWNoKG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7CiAgICAgICAgICAgIHZhciBlcnIsIHVzaW5nUGF0aEZhbGxiYWNrLAogICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwKICAgICAgICAgICAgICAgIC8vSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0U2Vjb25kcyBvZiAwLgogICAgICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCiAgICAgICAgICAgICAgICByZXFDYWxscyA9IFtdLAogICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7CgogICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgogICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgogICAgICAgICAgICBlYWNoUHJvcChlbmFibGVkUmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtb2QubWFwLAogICAgICAgICAgICAgICAgICAgIG1vZElkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNob3VsZCBiZSBleGVjdXRlZCwgYW5kIGl0IGhhcyBub3QKICAgICAgICAgICAgICAgICAgICAvL2JlZW4gaW5pdGVkIGFuZCB0aW1lIGlzIHVwLCByZW1lbWJlciBpdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQYXRoRmFsbGJhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTG9hZHMucHVzaChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW9kLmluaXRlZCAmJiBtb2QuZmV0Y2hlZCAmJiBtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAucHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vIHJlYXNvbiB0byBrZWVwIGxvb2tpbmcgZm9yIHVuZmluaXNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmVjYXVzZSBpdCBtYXkgYmUgdGhhdCBhIHBsdWdpbiByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5Y2xlQ2hlY2sgPSBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGV4cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vSWYgd2FpdCB0aW1lIGV4cGlyZWQsIHRocm93IGVycm9yIG9mIHVubG9hZGVkIG1vZHVsZXMuCiAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CiAgICAgICAgICAgICAgICBlcnIuY29udGV4dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Ob3QgZXhwaXJlZCwgY2hlY2sgZm9yIGEgY3ljbGUuCiAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgewogICAgICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUobW9kLCB7fSwge30pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCiAgICAgICAgICAgIC8vb3RoZXIgdGhhbiBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5kaW5nCiAgICAgICAgICAgIC8vc2NyaXB0cywgdGhlbiBqdXN0IHRyeSBiYWNrIGxhdGVyLgogICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcgdG8gbG9hZC4gV2FpdCBmb3IgaXQsIGJ1dCBvbmx5CiAgICAgICAgICAgICAgICAvL2lmIGEgdGltZW91dCBpcyBub3QgYWxyZWFkeSBpbiBlZmZlY3QuCiAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTW9kdWxlID0gZnVuY3Rpb24gKG1hcCkgewogICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7CiAgICAgICAgICAgIHRoaXMuc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbWFwLmlkKTsKICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWQgPSBbXTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CiAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOwoKICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQogICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXSwKICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkLCB0aGlzLmZldGNoZWQKICAgICAgICAgICAgKi8KICAgICAgICB9OwoKICAgICAgICBNb2R1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENhbiBoYXBwZW4gaWYgdGhlcmUKICAgICAgICAgICAgICAgIC8vYXJlIG11bHRpcGxlIGRlZmluZSBjYWxscyBmb3IgdGhlIHNhbWUgbW9kdWxlLiBUaGF0IGlzIG5vdAogICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ2lzdGVyIGZvciBlcnJvcnMgb24gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG5vIGVycmJhY2sgYWxyZWFkeSwgYnV0IHRoZXJlIGFyZSBlcnJvciBsaXN0ZW5lcnMKICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgogICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKICAgICAgICAgICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3IgZXhhbXBsZQogICAgICAgICAgICAgICAgLy8ic2hpbSIgZGVwcyBhcmUgcGFzc2VkIGluIGhlcmUgZGlyZWN0bHksIGFuZAogICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0IHRoYXQgY29uZmlnLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gZGVwTWFwcyAmJiBkZXBNYXBzLnNsaWNlKDApOwoKICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJhY2s7CgogICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwoKICAgICAgICAgICAgICAgIC8vQ291bGQgaGF2ZSBvcHRpb24gdG8gaW5pdCB0aGlzIG1vZHVsZSBpbiBlbmFibGVkIG1vZGUsCiAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAogICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCiAgICAgICAgICAgICAgICAvL2lmIGVuYWJsZWQgcHJldmlvdXNseSwgbm93IHRyaWdnZXIgZGVwZW5kZW5jaWVzIGFzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgLy9XaWxsIGNhbGwgdGhpcy5jaGVjaygpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxsYmFjayBmb3IgYSBnaXZlbgogICAgICAgICAgICAgICAgLy9leHBvcnQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50IC09IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5mZXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5mZXRjaGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOwoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1hbmFnZXIgaXMgZm9yIGEgcGx1Z2luIG1hbmFnZWQgcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUodGhpcy5tYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8IFtdLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMubWFwLnVybDsKCiAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgIGlmICghdXJsRmV0Y2hlZFt1cmxdKSB7CiAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAogICAgICAgICAgICAgKiBkZWZpbmUgaXQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgdGhpcy5lbmFibGluZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZXJyLCBjanNNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICBkZXBFeHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCBpZiBub3QgYWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGNvbnRleHQuZGVmUXVldWVNYXAsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykgewogICAgICAgICAgICAgICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2FsbAogICAgICAgICAgICAgICAgICAgIC8vdGhhdCB3b3VsZCByZXN1bHQgaW4gY2hlY2tpbmcgdGhpcyBtb2R1bGUgdG8KICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5nIHRoYXQsIHNraXAgdGhpcyB3b3JrLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYgIXRoaXMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmYWN0b3J5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29ubHkgZG8gaXQgZm9yIGRlZmluZSgpJ2QgIG1vZHVsZXMuIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25FcnJvciBpcyBzZXQsIHVzZSB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvciAhPT0gZGVmYXVsdE9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF2b3IgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cy4gSWYgbm9kZS9janMgaW4gcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIEZhdm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBhc3NpZ25tZW50IG92ZXIgZXhwb3J0cyBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgZXhwb3J0cyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzaW5nRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IHRoaXMubWFwLmlzRGVmaW5lID8gW3RoaXMubWFwLmlkXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIGxpdGVyYWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmICF0aGlzLmlnbm9yZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEub25SZXNvdXJjZUxvYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1hcHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNMb2FkTWFwcy5wdXNoKGRlcE1hcC5ub3JtYWxpemVkTWFwIHx8IGRlcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCByZXNMb2FkTWFwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBjYWxsaW5nIGNoZWNrIGFnYWluCiAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBhCiAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCwKICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXgpOwoKICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CgogICAgICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCB0aGlzLm1hcC5pZCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLm1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vSWYgY3VycmVudCBtYXAgaXMgbm90IG5vcm1hbGl6ZWQsIHdhaXQgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBpZiB0aGUgcGx1Z2luIGFsbG93cyBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4ICsgJyEnICsgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5ub3JtYWxpemVkTWFwID0gbm9ybWFsaXplZE1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZCA9IGdldE93bihyZWdpc3RyeSwgbm9ybWFsaXplZE1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0lmIGEgcGF0aHMgY29uZmlnLCB0aGVuIGp1c3QgbG9hZCB0aGF0IGZpbGUgaW5zdGVhZCB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVzb2x2ZSB0aGUgcGx1Z2luLCBhcyBpdCBpcyBidWlsdCBpbnRvIHRoYXQgcGF0aHMgbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnVybCA9IGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRlbXAgdW5ub3JtYWxpemVkIG1vZHVsZXMgZm9yIHRoaXMgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaWQuaW5kZXhPZihpZCArICdfdW5ub3JtYWxpemVkJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQogICAgICAgICAgICAgICAgICAgIC8vY29udGV4dCBvciBob3cgdG8gJ2NvbXBsZXRlJyB0aGUgbG9hZC4KICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byByZWluZm9yY2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zdXBwb3J0IG9sZCBzdHlsZSBvZiBwYXNzaW5nIG1vZHVsZU5hbWUgYnV0IGRpc2NhcmQKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGludGVybmFsIHJlZi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QWx0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb2ZmIGludGVyYWN0aXZlIHNjcmlwdCBtYXRjaGluZyBmb3IgSUUgZm9yIGFueSBkZWZpbmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1ByaW1lIHRoZSBzeXN0ZW0gYnkgY3JlYXRpbmcgYSBtb2R1bGUgaW5zdGFuY2UgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jb25maWdbbW9kdWxlTmFtZV0gPSBjb25maWcuY29uZmlnW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ2Zyb210ZXh0ZXZhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBldmFsIGZvciAnICsgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2luCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3VwcG9ydCBhbm9ueW1vdXMgbW9kdWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIHZhbHVlIG9mIHRoYXQgbW9kdWxlIHRvIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKICAgICAgICAgICAgICAgICAgICAvL2NvdWxkIGJlIHNvbWUgd2VpcmQgc3RyaW5nIHdpdGggbm8gcGF0aCB0aGF0IGFjdHVhbGx5IHdhbnRzIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwc1twbHVnaW5NYXAuaWRdID0gcGx1Z2luTWFwOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBlbmFibGVkUmVnaXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhlIG1vZHVsZSBpcyBlbmFibGluZywKICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAvL2ZvciBkZXBlbmRlbmNpZXMgZG8gbm90IHRyaWdnZXIgaW5hZHZlcnRlbnQgbG9hZAogICAgICAgICAgICAgICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtb2QsIGhhbmRsZXI7CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0RlcGVuZGVuY3kgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgZGVwTWFwCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdpcmVkIHVwIHRvIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXAuaXNEZWZpbmUgPyB0aGlzLm1hcCA6IHRoaXMubWFwLnBhcmVudE1hcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwc1tpXSA9IGRlcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCArPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuZGVmZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIHRoaXMuZXJyYmFjaykpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkaXJlY3QgZXJyYmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpcyBsaXN0ZW5pbmcgZm9yIGVycm9ycywgc28gYmUgc3VyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvciBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOwogICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9kdWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJwogICAgICAgICAgICAgICAgICAgIC8vQWxzbywgZG9uJ3QgY2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAogICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYgbW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShkZXBNYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoUHJvcCh0aGlzLnBsdWdpbk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsKICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIGlmICghY2JzKSB7CiAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNbbmFtZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNicy5wdXNoKGNiKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHsKICAgICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9uIChjYikgewogICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMgYnJva2VuIE1vZHVsZSBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZvciBhIHdoaWxlIGluIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgogICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKGFyZ3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsKICAgICAgICAgICAgLy9GYXZvciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQogICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZlbnQvYWRkRXZlbnRMaXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQogICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCB3aGljaCB3aWxsIGJlCiAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgogICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5vZGUuZGV0YWNoRXZlbnQoaWVOYW1lLCBmdW5jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAogICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgbm9kZS4KICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7CiAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQ7CgogICAgICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOwogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGludGFrZURlZmluZXMoKSB7CiAgICAgICAgICAgIHZhciBhcmdzOwoKICAgICAgICAgICAgLy9BbnkgZGVmaW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCiAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogJyArCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXplZCBieSB0aGUKICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgY29uZmlnOiBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSwKICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAogICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVkLAogICAgICAgICAgICB1cmxGZXRjaGVkOiB1cmxGZXRjaGVkLAogICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCiAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKICAgICAgICAgICAgTW9kdWxlOiBNb2R1bGUsCiAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCiAgICAgICAgICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCiAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogU2V0IGEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb25maWd1cmU6IGZ1bmN0aW9uIChjZmcpIHsKICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybC5jaGFyQXQoY2ZnLmJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgb2xkIHN0eWxlIHVybEFyZ3Mgc3RyaW5nIHRvIGEgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNmZy51cmxBcmdzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHZhciB1cmxBcmdzID0gY2ZnLnVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgY2ZnLnVybEFyZ3MgPSBmdW5jdGlvbihpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJnczsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcsCiAgICAgICAgICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgogICAgICAgICAgICAgICAgdmFyIHNoaW0gPSBjb25maWcuc2hpbSwKICAgICAgICAgICAgICAgICAgICBvYmpzID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9ianNbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhlIGJ1bmRsZXMKICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5idW5kbGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlc01hcFt2XSA9IHByb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQogICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLnNoaW0sIGZ1bmN0aW9uICh2YWx1ZSwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hpbSA9IHNoaW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9BZGp1c3QgcGFja2FnZXMgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiwgbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBwa2dPYmo7CgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGtnT2JqLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1tuYW1lXSA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TYXZlIHBvaW50ZXIgdG8gbWFpbiBtb2R1bGUgSUQgZm9yIHBrZyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWluIHBhdGhzIGFyZSBub3JtYWxpemVkLAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmlsZSBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGtnc1tuYW1lXSA9IHBrZ09iai5uYW1lICsgJy8nICsgKHBrZ09iai5tYWluIHx8ICdtYWluJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAvL3VwZGF0ZSB0aGUgbWFwcyBmb3IgdGhlbSwgc2luY2UgdGhlaXIgaW5mbywgbGlrZSBVUkxzIHRvIGxvYWQsCiAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG1vZHVsZSBhbHJlYWR5IGhhcyBpbml0IGNhbGxlZCwgc2luY2UgaXQgaXMgdG9vCiAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCiAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmICFtb2QubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKICAgICAgICAgICAgICAgIC8vcmVxdWlyZSB3aXRoIHRob3NlIGFyZ3MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmVxdWlyZSBpcyBkZWZpbmVkIGFzIGEKICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlKGNmZy5kZXBzIHx8IFtdLCBjZmcuY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmbjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VSZXF1aXJlOiBmdW5jdGlvbiAocmVsTWFwLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2NhbFJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQnVpbGRDYWxsYmFjayAmJiBjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ludmFsaWQgY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZlYXQ6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBvbmx5IHdvcmtzIHdoaWxlIG1vZHVsZSBpcyBiZWluZyBkZWZpbmVkLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYXZhaWxhYmxlIChhcyBpbiB0aGUgTm9kZSBhZGFwdGVyKSwgcHJlZmVyIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxNYXAsIGxvY2FsUmVxdWlyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVsZSBuYW1lLCBpZiBpdCBjb250YWlucyAuIG9yIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwcywgcmVsTWFwLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQgZm9yIGNvbnRleHQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbE1hcCA/ICcnIDogJy4gVXNlIHJlcXVpcmUoW10pJykpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCiAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU29tZSBkZWZpbmVzIGNvdWxkIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KICAgICAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdG9yZSBpZiBtYXAgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9ucy5za2lwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBtaXhpbihsb2NhbFJlcXVpcmUsIHsKICAgICAgICAgICAgICAgICAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlciwKCiAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSArIC5leHRlbnNpb24gaW50byBhbiBVUkwgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIHBsYWluIFVSTHMgbGlrZSBuYW1lVG9VcmwuCiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtb2R1bGVOYW1lUGx1c0V4dC5sYXN0SW5kZXhPZignLicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQgPT09ICcuLic7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBleHQsICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIGlkKSB8fCBoYXNQcm9wKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCiAgICAgICAgICAgICAgICBpZiAoIXJlbE1hcCkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZS51bmRlZiA9IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZpeCBmb3IgIzQwOAogICAgICAgICAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIHRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBtb2QudW5kZWZlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cmxGZXRjaGVkW21hcC51cmxdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiBxdWV1ZWQgZGVmaW5lcyB0b28uIEdvIGJhY2t3YXJkcwogICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWVzcyB1cCB0aGUgaXRlcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUmV2ZXJzZShkZWZRdWV1ZSwgZnVuY3Rpb24oYXJncywgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gYmUgcmVsb2FkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmRXZlbnRzW2lkXSA9IG1vZC5ldmVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGVkIHRvIGVuYWJsZSBhIG1vZHVsZSBpZiBpdCBpcyBzdGlsbCBpbiB0aGUgcmVnaXN0cnkKICAgICAgICAgICAgICogYXdhaXRpbmcgZW5hYmxlbWVudC4gQSBzZWNvbmQgYXJnLCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAogICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieQogICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qgc2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCiAgICAgICAgICAgICAqIEEgbG9hZCBldmVudCBjb3VsZCBiZSBhIHNjcmlwdCBsb2FkIG9yIGp1c3QgYSBsb2FkIHBhc3MgZnJvbSBhIHN5bmNocm9ub3VzCiAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAogICAgICAgICAgICAgICAgICAgIHNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1vZHVsZU5hbWUpIHx8IHt9LAogICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKCiAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYWxyZWFkeSBmb3VuZCBhbiBhbm9ueW1vdXMgbW9kdWxlIGFuZCBib3VuZCBpdAogICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIHRoaXMgYWZ0ZXIgdGhlIGN5Y2xlIG9mIGNhbGxHZXRNb2R1bGUgaW4gY2FzZSB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub2RlZmluZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9BIHNjcmlwdCB0aGF0IGRvZXMgbm90IGNhbGwgZGVmaW5lKCksIHNvIGp1c3Qgc2ltdWxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCiAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgogICAgICAgICAgICAgKiBOb3RlIHRoYXQgaXQgKipkb2VzIG5vdCoqIGNhbGwgbm9ybWFsaXplIG9uIHRoZSBtb2R1bGVOYW1lLAogICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CiAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAogICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGgsIGJ1bmRsZUlkLAogICAgICAgICAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChwa2dNYWluKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBrZ01haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkLCBleHQsIHNraXBFeHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgYSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMgYSBwcm90b2NvbCBpcyB1c2VkIGFuZCBpdCBpcyBqdXN0CiAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCiAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMsIHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4KICAgICAgICAgICAgICAgIC8vVGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wtbGVzcyBVUkxzIGFzIHdlbGwgYXMgZnVsbCBwYXRocy4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0LgogICAgICAgICAgICAgICAgICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRlZC4gVGhpcyBpcyBhIGJpdCB3b25reSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCiAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0IHx8ICcnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7CgogICAgICAgICAgICAgICAgICAgIHN5bXMgPSBtb2R1bGVOYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKICAgICAgICAgICAgICAgICAgICAvL2FuZCB3b3JrIHVwIGZyb20gaXQuCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbiBhcnJheSwgaXQgbWVhbnMgdGhlcmUgYXJlIGEgZmV3IGNob2ljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gcGFyZW50UGF0aFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSm9pbiB0aGUgcGF0aCBwYXJ0cyB0b2dldGhlciwgdGhlbiBmaWd1cmUgb3V0IGlmIGJhc2VVcmwgaXMgbmVlZGVkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwogICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDogJy5qcycpKTsKICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVybCkgKyB1cmw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdzICYmICEvXmJsb2JcOi8udGVzdCh1cmwpID8KICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJncyhtb2R1bGVOYW1lLCB1cmwpIDogdXJsOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bwogICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4KICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxiYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAogICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgYXJncywgZXhwb3J0cykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIGNhbGxiYWNrIGZvciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAogICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2FkZWQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19AcicpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBNYXAuaWQgPT09IGRhdGEuaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdzY3JpcHRlcnJvcicsICdTY3JpcHQgZXJyb3IgZm9yICInICsgZGF0YS5pZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciLCBuZWVkZWQgYnk6ICcgKyBwYXJlbnRzLmpvaW4oJywgJykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIicpLCBldnQsIFtkYXRhLmlkXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOwogICAgICAgIHJldHVybiBjb250ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogTWFpbiBlbnRyeSBwb2ludC4KICAgICAqCiAgICAgKiBJZiB0aGUgb25seSBhcmd1bWVudCB0byByZXF1aXJlIGlzIGEgc3RyaW5nLCB0aGVuIHRoZSBtb2R1bGUgdGhhdAogICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGVuIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBhcnJheQogICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgogICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCiAgICAgKgogICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAogICAgICogbmFtZSBmb3IgbWluaWZpY2F0aW9uL2xvY2FsIHNjb3BlIHVzZS4KICAgICAqLwogICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgewoKICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CiAgICAgICAgdmFyIGNvbnRleHQsIGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBkZWZDb250ZXh0TmFtZTsKCiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykgJiYgdHlwZW9mIGRlcHMgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0CiAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJiYWNrOwogICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CiAgICAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcpIHsKICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spOwogICAgfTsKCiAgICAvKioKICAgICAqIFN1cHBvcnQgcmVxdWlyZS5jb25maWcoKSB0byBtYWtlIGl0IGVhc2llciB0byBjb29wZXJhdGUgd2l0aCBvdGhlcgogICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgogICAgICovCiAgICByZXEuY29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykgewogICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNrCiAgICAgKiBvZiB0aGUgZXZlbnQgbG9vcC4gT3ZlcnJpZGUgZm9yIG90aGVyIGVudnMKICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KICAgICAqLwogICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CiAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CiAgICB9IDogZnVuY3Rpb24gKGZuKSB7IGZuKCk7IH07CgogICAgLyoqCiAgICAgKiBFeHBvcnQgcmVxdWlyZSBhcyBhIGdsb2JhbCwgYnV0IG9ubHkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAqLwogICAgaWYgKCFyZXF1aXJlKSB7CiAgICAgICAgcmVxdWlyZSA9IHJlcTsKICAgIH0KCiAgICByZXEudmVyc2lvbiA9IHZlcnNpb247CgogICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCiAgICByZXEuanNFeHRSZWdFeHAgPSAvXlwvfDp8XD98XC5qcyQvOwogICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKICAgIHMgPSByZXEucyA9IHsKICAgICAgICBjb250ZXh0czogY29udGV4dHMsCiAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAogICAgfTsKCiAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCiAgICByZXEoe30pOwoKICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCiAgICBlYWNoKFsKICAgICAgICAndG9VcmwnLAogICAgICAgICd1bmRlZicsCiAgICAgICAgJ2RlZmluZWQnLAogICAgICAgICdzcGVjaWZpZWQnCiAgICBdLCBmdW5jdGlvbiAocHJvcCkgewogICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKICAgICAgICAvL3NvIHRoYXQgZHVyaW5nIGJ1aWxkcywgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBjb250ZXh0CiAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgogICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IGNvbnRleHRzW2RlZkNvbnRleHROYW1lXTsKICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfSk7CgogICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgIGhlYWQgPSBzLmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwogICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCiAgICAgICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1ZXJ5IGJ1ZzoKICAgICAgICAvL2h0dHA6Ly9kZXYuanF1ZXJ5LmNvbS90aWNrZXQvMjcwOQogICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGJhc2VFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcwogICAgICogZnVuY3Rpb24uIEludGVyY2VwdC9vdmVycmlkZSBpdCBpZiB5b3Ugd2FudCBjdXN0b20gZXJyb3IgaGFuZGxpbmcuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KICAgICAqLwogICAgcmVxLm9uRXJyb3IgPSBkZWZhdWx0T25FcnJvcjsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIG5vZGUgZm9yIHRoZSBsb2FkIGNvbW1hbmQuIE9ubHkgdXNlZCBpbiBicm93c2VyIGVudnMuCiAgICAgKi8KICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIG5vZGUgPSBjb25maWcueGh0bWwgPwogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgbm9kZS50eXBlID0gY29uZmlnLnNjcmlwdFR5cGUgfHwgJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKICAgICAgICBub2RlLmFzeW5jID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCiAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBlbnZpcm9ubWVudHMKICAgICAqIHRvIG92ZXJyaWRlIGl0LgogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KICAgICAqLwogICAgcmVxLmxvYWQgPSBmdW5jdGlvbiAoY29udGV4dCwgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwogICAgICAgICAgICBub2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwoKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKICAgICAgICAgICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBmaXJpbmdzCiAgICAgICAgICAgIC8vdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGFsbCBvdGhlciBicm93c2VycyB3aXRoCiAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKICAgICAgICAgICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKICAgICAgICAgICAgLy9odHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzY0ODA1Ny9zY3JpcHQtb25sb2FkLWV2ZW50LWlzLW5vdC1maXJlZC1pbW1lZGlhdGVseS1hZnRlci1zY3JpcHQtZXhlY3V0aW9uCiAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAogICAgICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNoRXZlbnQgJiYKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKICAgICAgICAgICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCiAgICAgICAgICAgICAgICAgICAgLy9yZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8xODcKICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgICAgICAgIC8vaW4gSUU4LCBub2RlLmF0dGFjaEV2ZW50IGRvZXMgbm90IGhhdmUgdG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6CiAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMjczCiAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCiAgICAgICAgICAgICAgICAgICAgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJlCiAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCiAgICAgICAgICAgICAgICAvL3dlIGNhbm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCiAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElFIHJlcG9ydHMgdGhlIHNjcmlwdCBhcyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCiAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgogICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAogICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2ZXIsIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aWxsIGZpcmUgYmVmb3JlCiAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJRSB3aWxsIGZpcmUgZXJyb3IgYmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCiAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3JpcHQgbG9hZCBldmVudCBsaXN0ZW5lciBiZWZvcmUgZXhlY3V0ZQogICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4KICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCiAgICAgICAgICAgICAgICAvL2FuZCB0aGVuIGRlc3Ryb3lzIGFsbCBpbnN0YWxscyBvZiBJRSA2LTkuCiAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29udGV4dC5vblNjcmlwdExvYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKCiAgICAgICAgICAgIC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlIGhhdmUgYmVlbgogICAgICAgICAgICAvL3NldCwgYnV0IGJlZm9yZSBpdCBpcyBwbGFjZWQgaW4gdGhlIERPTS4KICAgICAgICAgICAgaWYgKGNvbmZpZy5vbk5vZGVDcmVhdGVkKSB7CiAgICAgICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCiAgICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlvbiwgc28gdG8gdGllIGFuIGFub255bW91cyBkZWZpbmUKICAgICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgogICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBub2RlOwogICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VFbGVtZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CiAgICAgICAgICAgICAgICAvL2VmZmljaWVudCB1c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2NrIHVudGlsCiAgICAgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVhdGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycwogICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25lIHNvCiAgICAgICAgICAgICAgICAvL3RoYXQgb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMgbWF5IG5lZWQKICAgICAgICAgICAgICAgIC8vdG8gYmUgcmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNhc2VzIGJlY29tZSBjb21tb24uCgogICAgICAgICAgICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGV2ZW50IGxvb3AgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2ViS2l0CiAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMgZ2FyYmFnZS1jb2xsZWN0ZWQgYWZ0ZXIgY2FsbGluZwogICAgICAgICAgICAgICAgLy8gaW1wb3J0U2NyaXB0cygpOiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTMzMTcKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgMCk7CiAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CgogICAgICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihtYWtlRXJyb3IoJ2ltcG9ydHNjcmlwdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKSB7CiAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgICAgIH0KCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICB9CgogICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KICAgIGlmIChpc0Jyb3dzZXIgJiYgIWNmZy5za2lwRGF0YU1haW4pIHsKICAgICAgICAvL0ZpZ3VyZSBvdXQgYmFzZVVybC4gR2V0IGl0IGZyb20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0LgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKICAgICAgICAgICAgLy91c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgogICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgIGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQogICAgICAgICAgICAvL3RvIGxvYWQuIElmIGl0IGlzIHRoZXJlLCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYWluJyk7CiAgICAgICAgICAgIGlmIChkYXRhTWFpbikgewogICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CgogICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCiAgICAgICAgICAgICAgICAvL2J1dCBvbmx5IGRvIHNvIGlmIHRoZSBkYXRhLW1haW4gdmFsdWUgaXMgbm90IGEgbG9hZGVyIHBsdWdpbgogICAgICAgICAgICAgICAgLy9tb2R1bGUgSUQuCiAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9yIHVzZSBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2Jhc2VVcmwuCiAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IHNyYy5sZW5ndGggPyBzcmMuam9pbignLycpICArICcvJyA6ICcuLyc7CgogICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3JpcHQgaXMgbm93CiAgICAgICAgICAgICAgICAvL2xpa2UgYSBtb2R1bGUgbmFtZS4KICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKCiAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkgewogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4KICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcuZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCiAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAogICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAogICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRoZSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncwogICAgICogbmFtZS4KICAgICAqLwogICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7CgogICAgICAgIC8vQWxsb3cgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbmFtZTsKICAgICAgICAgICAgbmFtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBhCiAgICAgICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVuY2llcy4KICAgICAgICBpZiAoIWRlcHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICAvL1JlbW92ZSBjb21tZW50cyBmcm9tIHRoZSBjYWxsYmFjayBzdHJpbmcsCiAgICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCiAgICAgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UmVnRXhwLCBjb21tZW50UmVwbGFjZSkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKICAgICAgICAgICAgICAgIC8vY291bGQgdXNlIGV4cG9ydHMsIGFuZCBtb2R1bGUuIEF2b2lkIGRvaW5nIGV4cG9ydHMgYW5kIG1vZHVsZQogICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUuCiAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKICAgICAgICAgICAgICAgIC8vb3JkZXIgbGlzdGVkIGJlbG93LgogICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBbJ3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVwcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQogICAgICAgIC8vd29yay4KICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOwogICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KICAgICAgICAvL1RoaXMgYWxsb3dzIG11bHRpcGxlIG1vZHVsZXMgdG8gYmUgaW4gYSBmaWxlIHdpdGhvdXQgcHJlbWF0dXJlbHkKICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZvciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCiAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CiAgICAgICAgLy9vY2N1cnMuIElmIG5vIGNvbnRleHQsIHVzZSB0aGUgZ2xvYmFsIHF1ZXVlLCBhbmQgZ2V0IGl0IHByb2Nlc3NlZAogICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCiAgICAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW25hbWVdID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgIH0KICAgIH07CgogICAgZGVmaW5lLmFtZCA9IHsKICAgICAgICBqUXVlcnk6IHRydWUKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyB0aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1lbnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwogICAgICogbG9hZGVyIHBsdWdpbnMsIG5vdCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZhbHVhdGUuCiAgICAgKi8KICAgIHJlcS5leGVjID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7CiAgICB9OwoKICAgIC8vU2V0IHVwIHdpdGggY29uZmlnIGluZm8uCiAgICByZXEoY2ZnKTsKfSh0aGlzLCAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogc2V0VGltZW91dCkpKTsKCg==","headers":[["content-type","text/javascript; charset=utf-8"]],"ok":true,"status":200,"status_text":""}}},"executionInfo":{"elapsed":6821,"status":"ok","timestamp":1695200600705,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"uXrjvSYXtqwO","outputId":"71d9eb10-985a-4c01-df99-a75e0e0cc656"},"outputs":[{"data":{"text/plain":["Output hidden; open in https://colab.research.google.com to view."]},"metadata":{},"output_type":"display_data"}],"source":["%load_ext tensorboard\n","%tensorboard --logdir logs"]},{"cell_type":"code","execution_count":13,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":12,"status":"ok","timestamp":1695296793570,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"BlVJ4lGccok6","outputId":"9c8d4618-8011-4a1f-90b1-68b767ceb0d0"},"outputs":[{"name":"stdout","output_type":"stream","text":["cuda\n"]}],"source":["if torch.cuda.is_available():\n"," device = torch.device('cuda')\n","elif hasattr(torch.backends, 'mps') and torch.backends.mps.is_available():\n"," # MPS is currently slower than CPU due to missing int64 min/max ops\n"," device = torch.device('cpu')\n","else:\n"," device = torch.device('cpu')\n","\n","print(device)"]},{"cell_type":"code","execution_count":14,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1161,"status":"ok","timestamp":1695296794721,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"m1P1_BmBcpkT","outputId":"30cc328b-ea3f-4084-abac-d41619e6cb49"},"outputs":[{"name":"stderr","output_type":"stream","text":["Downloading https://www.chrsmrrs.com/graphkerneldatasets/MUTAG.zip\n","Extracting /data/TU/MUTAG/MUTAG.zip\n","Processing...\n","Done!\n"]}],"source":["init_wandb(name=f'GIN-{args.dataset}', batch_size=args.batch_size, lr=args.lr,\n"," epochs=args.epochs, hidden_channels=args.hidden_channels,\n"," num_layers=args.num_layers, device=device)\n","\n","path = osp.join(osp.dirname(osp.realpath( \"__file__\")), '..', 'data', 'TU')\n","dataset = TUDataset(path, name=args.dataset).shuffle()\n","\n","train_dataset = dataset[len(dataset) // 10:]\n","train_loader = DataLoader(train_dataset, args.batch_size, shuffle=True)\n","\n","test_dataset = dataset[:len(dataset) // 10]\n","test_loader = DataLoader(test_dataset, args.batch_size)"]},{"cell_type":"code","execution_count":15,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":7,"status":"ok","timestamp":1695296794721,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"0EgN4Ta6jUV8","outputId":"3e07f34b-25e2-4683-97c1-e4b2f2bb10bf"},"outputs":[{"data":{"text/plain":["2"]},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"source":["dataset.num_classes"]},{"cell_type":"code","execution_count":114,"metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1695206338471,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"WPFyTI1zdRqb"},"outputs":[],"source":["class Net(torch.nn.Module):\n"," def __init__(self, in_channels, hidden_channels, out_channels, num_layers):\n"," super().__init__()\n","\n"," self.convs = torch.nn.ModuleList()\n"," for _ in range(num_layers):\n"," mlp = MLP([in_channels, hidden_channels, hidden_channels])\n"," self.convs.append(GINConv(nn=mlp, train_eps=False))\n"," in_channels = hidden_channels\n","\n"," self.mlp = MLP([hidden_channels, hidden_channels, out_channels],\n"," norm=None, dropout=0.5)\n","\n"," def forward(self, x, edge_index, batch):\n"," for conv in self.convs:\n"," x = conv(x, edge_index).relu()\n"," x = global_add_pool(x, batch)\n"," return self.mlp(x)"]},{"cell_type":"code","execution_count":115,"metadata":{"executionInfo":{"elapsed":437,"status":"ok","timestamp":1695206343793,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"sW1VRcm_dWsk"},"outputs":[],"source":["model = Net(dataset.num_features, args.hidden_channels, dataset.num_classes,\n"," args.num_layers).to(device)\n","#optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)\n","optimizer = torch.optim.SGD(model.parameters(), lr=args.lr,momentum=args.momentum)"]},{"cell_type":"code","execution_count":116,"metadata":{"executionInfo":{"elapsed":1,"status":"ok","timestamp":1695206344211,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"G3ghLRrGdynw"},"outputs":[],"source":["def train(model, loader):\n"," model.train()\n","\n"," total_loss = 0\n"," for data in train_loader:\n"," data = data.to(device)\n"," optimizer.zero_grad()\n"," out = model(data.x, data.edge_index, data.batch)\n"," loss = F.cross_entropy(out, data.y)\n"," loss.backward()\n"," optimizer.step()\n"," total_loss += float(loss) * data.num_graphs\n"," return total_loss / len(train_loader.dataset)"]},{"cell_type":"markdown","metadata":{"id":"NgSQuSDdZjyu"},"source":[]},{"cell_type":"code","execution_count":117,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1695206345756,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"TNtiySFiZevA"},"outputs":[],"source":["@torch.no_grad()\n","def test(model, loader):\n"," model.eval()\n","\n"," total_correct = 0\n"," for data in loader:\n"," data = data.to(device)\n"," pred = model(data.x, data.edge_index, data.batch).argmax(dim=-1)\n"," total_correct += int((pred == data.y).sum())\n"," accuracy = total_correct / len(loader.dataset)\n"," # print(\"Accuracy on the passed data is: \", accuracy)\n"," return accuracy\n"]},{"cell_type":"code","execution_count":118,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":10798,"status":"ok","timestamp":1695206357361,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"SNAyXlb-d1qP","outputId":"46719e4d-4c5e-4988-d23d-6936379ba069"},"outputs":[{"name":"stdout","output_type":"stream","text":["Epoch: 001, Loss: 0.7889, Train: 0.6647, Test: 0.6667\n","Epoch: 002, Loss: 0.5052, Train: 0.6647, Test: 0.6667\n","Epoch: 003, Loss: 0.4643, Train: 0.6706, Test: 0.6667\n","Epoch: 004, Loss: 0.4022, Train: 0.7529, Test: 0.7222\n","Epoch: 005, Loss: 0.4030, Train: 0.7941, Test: 0.7778\n","Epoch: 006, Loss: 0.3493, Train: 0.8176, Test: 0.7778\n","Epoch: 007, Loss: 0.3394, Train: 0.8235, Test: 0.7778\n","Epoch: 008, Loss: 0.3318, Train: 0.8353, Test: 0.7222\n","Epoch: 009, Loss: 0.3620, Train: 0.8353, Test: 0.7778\n","Epoch: 010, Loss: 0.3319, Train: 0.8588, Test: 0.8333\n","Epoch: 011, Loss: 0.3964, Train: 0.8353, Test: 0.8889\n","Epoch: 012, Loss: 0.3780, Train: 0.8412, Test: 0.8333\n","Epoch: 013, Loss: 0.3566, Train: 0.8706, Test: 0.7778\n","Epoch: 014, Loss: 0.3459, Train: 0.8471, Test: 0.8333\n","Epoch: 015, Loss: 0.3362, Train: 0.8529, Test: 0.8333\n","Epoch: 016, Loss: 0.3136, Train: 0.8471, Test: 0.8333\n","Epoch: 017, Loss: 0.3290, Train: 0.8941, Test: 0.7778\n","Epoch: 018, Loss: 0.3106, Train: 0.8529, Test: 0.7222\n","Epoch: 019, Loss: 0.3187, Train: 0.8882, Test: 0.8333\n","Epoch: 020, Loss: 0.3098, Train: 0.8882, Test: 0.9444\n","Epoch: 021, Loss: 0.2899, Train: 0.9000, Test: 0.8889\n","Epoch: 022, Loss: 0.3363, Train: 0.5706, Test: 0.6667\n","Epoch: 023, Loss: 0.3040, Train: 0.8059, Test: 0.7778\n","Epoch: 024, Loss: 0.3113, Train: 0.5353, Test: 0.5556\n","Epoch: 025, Loss: 0.2812, Train: 0.8412, Test: 0.7222\n","Epoch: 026, Loss: 0.2900, Train: 0.8824, Test: 0.8333\n","Epoch: 027, Loss: 0.2852, Train: 0.9059, Test: 0.8889\n","Epoch: 028, Loss: 0.2887, Train: 0.8353, Test: 0.8889\n","Epoch: 029, Loss: 0.2553, Train: 0.8529, Test: 0.8889\n","Epoch: 030, Loss: 0.2944, Train: 0.8765, Test: 0.9444\n","Epoch: 031, Loss: 0.2683, Train: 0.8882, Test: 0.8889\n","Epoch: 032, Loss: 0.2616, Train: 0.8941, Test: 0.8889\n","Epoch: 033, Loss: 0.2424, Train: 0.9118, Test: 0.8889\n","Epoch: 034, Loss: 0.2401, Train: 0.7529, Test: 0.7222\n","Epoch: 035, Loss: 0.2269, Train: 0.8118, Test: 0.7222\n","Epoch: 036, Loss: 0.1981, Train: 0.9118, Test: 0.9444\n","Epoch: 037, Loss: 0.2320, Train: 0.9294, Test: 0.8889\n","Epoch: 038, Loss: 0.2096, Train: 0.3706, Test: 0.3889\n","Epoch: 039, Loss: 0.2528, Train: 0.4471, Test: 0.5556\n","Epoch: 040, Loss: 0.3539, Train: 0.8412, Test: 0.8333\n","Epoch: 041, Loss: 0.2797, Train: 0.8412, Test: 0.8889\n","Epoch: 042, Loss: 0.2931, Train: 0.9118, Test: 0.8333\n","Epoch: 043, Loss: 0.2944, Train: 0.8824, Test: 0.8889\n","Epoch: 044, Loss: 0.2344, Train: 0.9176, Test: 0.8333\n","Epoch: 045, Loss: 0.2306, Train: 0.7765, Test: 0.7222\n","Epoch: 046, Loss: 0.2168, Train: 0.7059, Test: 0.7222\n","Epoch: 047, Loss: 0.2212, Train: 0.7941, Test: 0.9444\n","Epoch: 048, Loss: 0.1960, Train: 0.8882, Test: 0.8889\n","Epoch: 049, Loss: 0.1784, Train: 0.9059, Test: 0.8333\n","Epoch: 050, Loss: 0.1906, Train: 0.9471, Test: 0.9444\n","Epoch: 051, Loss: 0.2301, Train: 0.9176, Test: 1.0000\n","Epoch: 052, Loss: 0.1899, Train: 0.9000, Test: 0.9444\n","Epoch: 053, Loss: 0.2135, Train: 0.8647, Test: 0.9444\n","Epoch: 054, Loss: 0.2013, Train: 0.9000, Test: 0.9444\n","Epoch: 055, Loss: 0.2105, Train: 0.8824, Test: 0.8889\n","Epoch: 056, Loss: 0.3095, Train: 0.8588, Test: 0.8889\n","Epoch: 057, Loss: 0.3163, Train: 0.9176, Test: 0.8889\n","Epoch: 058, Loss: 0.2733, Train: 0.8824, Test: 0.9444\n","Epoch: 059, Loss: 0.2717, Train: 0.9059, Test: 1.0000\n","Epoch: 060, Loss: 0.2311, Train: 0.8824, Test: 1.0000\n","Epoch: 061, Loss: 0.2357, Train: 0.6294, Test: 0.6667\n","Epoch: 062, Loss: 0.2530, Train: 0.9235, Test: 0.9444\n","Epoch: 063, Loss: 0.1789, Train: 0.8882, Test: 0.8889\n","Epoch: 064, Loss: 0.2318, Train: 0.9412, Test: 0.8889\n","Epoch: 065, Loss: 0.1808, Train: 0.9294, Test: 0.8889\n","Epoch: 066, Loss: 0.1771, Train: 0.9235, Test: 0.8333\n","Epoch: 067, Loss: 0.2001, Train: 0.9412, Test: 0.8889\n","Epoch: 068, Loss: 0.1716, Train: 0.9118, Test: 0.8889\n","Epoch: 069, Loss: 0.2511, Train: 0.9118, Test: 0.8889\n","Epoch: 070, Loss: 0.2174, Train: 0.9000, Test: 0.9444\n","Epoch: 071, Loss: 0.2149, Train: 0.9118, Test: 0.8333\n","Epoch: 072, Loss: 0.1955, Train: 0.9294, Test: 0.9444\n","Epoch: 073, Loss: 0.1752, Train: 0.9176, Test: 1.0000\n","Epoch: 074, Loss: 0.2204, Train: 0.7529, Test: 0.8333\n","Epoch: 075, Loss: 0.1884, Train: 0.9353, Test: 0.8889\n","Epoch: 076, Loss: 0.1575, Train: 0.8765, Test: 0.9444\n","Epoch: 077, Loss: 0.2088, Train: 0.8882, Test: 0.8333\n","Epoch: 078, Loss: 0.2521, Train: 0.8824, Test: 0.8333\n","Epoch: 079, Loss: 0.2823, Train: 0.9000, Test: 0.8333\n","Epoch: 080, Loss: 0.2624, Train: 0.9000, Test: 0.8333\n","Epoch: 081, Loss: 0.2771, Train: 0.9235, Test: 0.8889\n","Epoch: 082, Loss: 0.2513, Train: 0.3412, Test: 0.3333\n","Epoch: 083, Loss: 0.3296, Train: 0.3412, Test: 0.3333\n","Epoch: 084, Loss: 0.3728, Train: 0.7882, Test: 0.7778\n","Epoch: 085, Loss: 0.3142, Train: 0.8059, Test: 0.7778\n","Epoch: 086, Loss: 0.2847, Train: 0.8294, Test: 0.8333\n","Epoch: 087, Loss: 0.2748, Train: 0.8353, Test: 0.8333\n","Epoch: 088, Loss: 0.2539, Train: 0.8765, Test: 0.8889\n","Epoch: 089, Loss: 0.2678, Train: 0.9000, Test: 0.8333\n","Epoch: 090, Loss: 0.2991, Train: 0.8706, Test: 0.7778\n","Epoch: 091, Loss: 0.2485, Train: 0.7706, Test: 0.6667\n","Epoch: 092, Loss: 0.2867, Train: 0.8529, Test: 0.8333\n","Epoch: 093, Loss: 0.2283, Train: 0.9059, Test: 0.9444\n","Epoch: 094, Loss: 0.2465, Train: 0.8882, Test: 0.8333\n","Epoch: 095, Loss: 0.2426, Train: 0.8941, Test: 0.8889\n","Epoch: 096, Loss: 0.2096, Train: 0.8824, Test: 0.8333\n","Epoch: 097, Loss: 0.2186, Train: 0.8412, Test: 0.8333\n","Epoch: 098, Loss: 0.2013, Train: 0.8353, Test: 0.8889\n","Epoch: 099, Loss: 0.2036, Train: 0.9059, Test: 0.9444\n","Epoch: 100, Loss: 0.1733, Train: 0.9176, Test: 0.9444\n"]}],"source":["identity = \"Original\"\n","for epoch in range(1, args.epochs + 1):\n"," loss = train(model, train_loader)\n"," train_acc = test(model, train_loader)\n"," test_acc = test(model, test_loader)\n"," write_metric(identity, \"train\", \"loss\", loss, epoch)\n"," write_metric(identity, \"train\", \"accuracy\", train_acc, epoch)\n"," write_metric(identity, \"test\", \"accuracy\", test_acc, epoch)\n"," log(Epoch=epoch, Loss=loss, Train=train_acc, Test=test_acc)"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"qBgYFzY0tKqm"},"outputs":[],"source":[]},{"cell_type":"markdown","metadata":{"id":"U_GMUXIwZfQc"},"source":["## OpenFL"]},{"cell_type":"code","execution_count":119,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":304,"status":"ok","timestamp":1695206400795,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"6VORCce2k7ZV","outputId":"e52a9df7-46a1-41e7-f3f4-a81f60677a95"},"outputs":[{"name":"stdout","output_type":"stream","text":["147473\n"]}],"source":["log_interval = 100\n","BS = args.batch_size\n","unique_id_openfl = random.randint(10,200000)\n","# tensorboard\n","# from torch.utils.tensorboard import SummaryWriter\n","writer = SummaryWriter('./logs/pyg_and_openFL_reusing_PYG_Example_OPENFL_{}_BS{}'.format(unique_id_openfl, BS), flush_secs=5)\n","print(unique_id_openfl)"]},{"cell_type":"code","execution_count":120,"metadata":{"executionInfo":{"elapsed":284,"status":"ok","timestamp":1695206402022,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"vvGFb1HFZhQY"},"outputs":[],"source":["#openFL imports\n","from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n","from openfl.experimental.runtime import LocalRuntime\n","from openfl.experimental.placement import aggregator, collaborator"]},{"cell_type":"code","execution_count":121,"metadata":{"executionInfo":{"elapsed":513,"status":"ok","timestamp":1695206403638,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"H5WukI0Yjjng"},"outputs":[],"source":["import numpy as np\n","import random\n","import warnings\n","warnings.filterwarnings('ignore')\n","from copy import deepcopy"]},{"cell_type":"code","execution_count":122,"metadata":{"executionInfo":{"elapsed":335,"status":"ok","timestamp":1695206404820,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"NpIyNFalim_X"},"outputs":[],"source":["# OpenFL: Averaging all parameter vectors\n","def FedAvg(models): \n"," new_model = models[0]\n"," state_dict_keys = new_model.state_dict().keys()\n"," model_dict_list = [mdl.state_dict() for mdl in models]\n"," state_dict = new_model.state_dict()\n"," num_models = len(models)\n"," for key in state_dict_keys:\n"," state_dict[key] = torch.sum(\n"," torch.stack(\n"," [mdldict[key]/num_models for mdldict in model_dict_list]), dim=0)\n"," new_model.load_state_dict(state_dict)\n"," return new_model"]},{"cell_type":"code","execution_count":123,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":374,"status":"ok","timestamp":1695206409587,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"R8uDtwZvexOA","outputId":"8f566d57-ade0-427d-8182-0f4dcd4d9bc9"},"outputs":[{"name":"stdout","output_type":"stream","text":["Aggregator step \"start\" registered\n","Collaborator step \"aggregated_model_validation\" registered\n","Collaborator step \"train\" registered\n","Collaborator step \"local_model_validation\" registered\n","Aggregator step \"join\" registered\n","Aggregator step \"end\" registered\n"]}],"source":["#OpenFL: definition of compute flow\n","class FederatedFlow(FLSpec):\n"," def __init__(self, model = None, optimizer = None, rounds=3, **kwargs):\n"," super().__init__(**kwargs)\n"," if model is not None:\n"," self.model = model\n"," self.optimizer = optimizer #optimizer(params=self.model.parameters()) #\n"," else:\n"," raise Exception(\"Sorry, model must be defined\")\n"," self.rounds = rounds\n"," self.aggr_training_value_list = []\n","\n"," @aggregator\n"," def start(self):\n"," print(f'Performing initialization for model')\n"," self.collaborators = self.runtime.collaborators\n"," self.private = 10\n"," self.current_round = 0\n"," self.next(self.aggregated_model_validation,foreach='collaborators',exclude=['private'])\n","\n"," @collaborator\n"," def aggregated_model_validation(self):\n"," print(f'########################## Performing aggregated model validation for collaborator {self.input}')\n"," self.agg_validation_score = test(self.model, self.test_loader)\n"," self.next(self.train)\n","\n"," @collaborator\n"," def train(self):\n"," self.model.train()\n"," self.optimizer = torch.optim.Adam(self.model.parameters(), lr=args.lr)\n"," self.optimizer = torch.optim.SGD(self.model.parameters(), lr=args.lr, momentum=args.momentum)\n"," # NOTE: it seems that we need to define here the opt fot it to be able to act on collaborator parameters\n"," total_loss = 0\n"," # print(\"Collaborator self.model params example BEFORE a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n"," ll = len(self.train_loader)\n"," for batch_idx, data in enumerate(self.train_loader):\n"," data = data.to(device)\n"," self.optimizer.zero_grad()\n"," out = self.model(data.x, data.edge_index, data.batch)\n"," loss = F.cross_entropy(out, data.y)\n"," loss.backward()\n"," self.optimizer.step()\n"," total_loss += loss.item() * data.num_graphs\n"," self.loss = loss.item()\n"," # print(\"Collaborator self.model params example AFTER a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n"," write_metric(self.input, \"train\", \"loss\", loss.item(), self.current_round)\n"," self.training_completed = True\n"," self.next(self.local_model_validation)\n","\n"," @collaborator\n"," def local_model_validation(self):\n"," self.local_validation_score = test(self.model, self.test_loader)\n"," write_metric(self.input, \"test\", \"accuracy\", self.local_validation_score, self.current_round)\n"," self.next(self.join, exclude=['training_completed'])\n","\n"," @aggregator\n"," def join(self, inputs):\n"," print(f'############## AGGREGATOR NOW: time to join!! for Epoch {self.current_round}')\n"," self.average_loss = sum(input.loss for input in inputs)/len(inputs)\n"," self.aggr_training_value_list.append(self.average_loss)\n"," self.aggregated_model_accuracy = sum(input.agg_validation_score for input in inputs)/len(inputs)\n"," self.local_model_accuracy = sum(input.local_validation_score for input in inputs)/len(inputs)\n"," print(f'Average aggregated model validation values = {self.aggregated_model_accuracy}')\n"," print(f'Average training loss = {self.average_loss}')\n"," print(f'Average local model validation values = {self.local_model_accuracy}')\n","\n"," self.model = FedAvg([input.model for input in inputs])\n"," self.optimizer = [input.optimizer for input in inputs][0]\n","\n"," write_metric(\"Aggregator\", \"train\", \"avg_loss\", self.average_loss, self.current_round)\n"," write_metric(\"Aggregator\", \"test\", \"accuracy\", self.aggregated_model_accuracy, self.current_round)\n"," print(\"Wrote TensorBoard information for Aggregator \")\n","\n"," self.current_round += 1\n"," if self.current_round < self.rounds:\n"," self.next(self.aggregated_model_validation, foreach='collaborators', exclude=['private'])\n"," else:\n"," self.next(self.end)\n","\n"," @aggregator\n"," def end(self):\n"," print(\"List of averaged training losses :\\n\", self.aggr_training_value_list)\n"," print(f'This is the end of the flow')"]},{"cell_type":"code","execution_count":124,"metadata":{"executionInfo":{"elapsed":295,"status":"ok","timestamp":1695206414815,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"38RpwbrrkP8s"},"outputs":[],"source":["# for the data we have already these object from the stand alone part:\n","# train_dataset = dataset[len(dataset) // 10:]\n","# train_loader = DataLoader(train_dataset, args.batch_size, shuffle=True)\n","\n","# test_dataset = dataset[:len(dataset) // 10]\n","# test_loader = DataLoader(test_dataset, args.batch_size)\n","\n","#also we can reuse the model definition, instantiating a new object (model) that will be trained\n","model_OpenFL = Net(dataset.num_features, args.hidden_channels, dataset.num_classes,\n"," args.num_layers)\n","model = model_OpenFL.to(device)\n","\n","#optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)\n","optimizer = torch.optim.SGD(model.parameters(), lr=args.lr,momentum=args.momentum)"]},{"cell_type":"code","execution_count":125,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":297,"status":"ok","timestamp":1695206416814,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"HVwS7gMZjaag","outputId":"a002f21d-7fb3-4296-a889-075922325829"},"outputs":[{"name":"stdout","output_type":"stream","text":["Local runtime collaborators = ['Coll_1', 'Coll_2']\n"]}],"source":["# Setup participants\n","aggregator = Aggregator()\n","aggregator.private_attributes = {}\n","\n","# Setup collaborators with private attributes\n","collaborator_names = ['Coll_1', 'Coll_2']\n","collaborators = [Collaborator(name=name) for name in collaborator_names]\n","\n","for idx, collaborator in enumerate(collaborators):\n"," local_train = deepcopy(train_dataset)\n"," local_test = deepcopy(test_dataset)\n"," test_l = len(local_test)\n"," train_l = len(local_train)\n"," local_train = train_dataset[idx*train_l//2: (idx+1)*train_l//2] # this is ok only for 2 collaborators....\n"," local_test = test_dataset[idx*test_l//2: (idx+1)*test_l//2]\n"," collaborator.private_attributes = {\n"," 'train_loader': DataLoader(local_train, batch_size=BS, shuffle=True),\n"," 'test_loader': DataLoader(local_test, batch_size=BS)\n"," }\n","\n","local_runtime = LocalRuntime(aggregator=aggregator, collaborators=collaborators, backend='single_process')\n","print(f'Local runtime collaborators = {local_runtime.collaborators}')\n","\n","best_model = None\n","optimizer = None\n","flflow = FederatedFlow(model, optimizer, rounds=args.epochs)\n","flflow.runtime = local_runtime"]},{"cell_type":"code","execution_count":126,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":656029,"status":"ok","timestamp":1695207079112,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"Ff7vW6EcklM2","outputId":"ec583adb-37e5-4aa9-8d46-ce3f0f455bbe"},"outputs":[{"name":"stdout","output_type":"stream","text":["NOW CALLING .run -----------------------------------------------------------------------------------------------------\n","\n","Calling start\n","Performing initialization for model\n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 0\n","Average aggregated model validation values = 0.6666666666666667\n","Average training loss = 0.7407504916191101\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 1\n","Average aggregated model validation values = 0.6666666666666667\n","Average training loss = 0.4424946457147598\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 2\n","Average aggregated model validation values = 0.6666666666666667\n","Average training loss = 0.527766153216362\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 3\n","Average aggregated model validation values = 0.6666666666666667\n","Average training loss = 0.4008120149374008\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 4\n","Average aggregated model validation values = 0.6666666666666667\n","Average training loss = 0.3924349546432495\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 5\n","Average aggregated model validation values = 0.6111111111111112\n","Average training loss = 0.4025471657514572\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 6\n","Average aggregated model validation values = 0.6111111111111112\n","Average training loss = 0.34922273457050323\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 7\n","Average aggregated model validation values = 0.6666666666666666\n","Average training loss = 0.33064595609903336\n","Average local model validation values = 0.6666666666666666\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 8\n","Average aggregated model validation values = 0.6666666666666666\n","Average training loss = 0.37977445125579834\n","Average local model validation values = 0.5555555555555556\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 9\n","Average aggregated model validation values = 0.6666666666666666\n","Average training loss = 0.3509543836116791\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 10\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.3629107028245926\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 11\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.29452597349882126\n","Average local model validation values = 0.6666666666666666\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 12\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.25660597532987595\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 13\n","Average aggregated model validation values = 0.6666666666666666\n","Average training loss = 0.5069262832403183\n","Average local model validation values = 0.5555555555555556\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 14\n","Average aggregated model validation values = 0.6111111111111112\n","Average training loss = 0.3647744879126549\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 15\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.37384365499019623\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 16\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.41296738386154175\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 17\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.2622897997498512\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 18\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.3537328392267227\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 19\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.2694278582930565\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 20\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.25479865074157715\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 21\n","Average aggregated model validation values = 0.6666666666666666\n","Average training loss = 0.2630894333124161\n","Average local model validation values = 0.8888888888888888\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 22\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.25613831728696823\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 23\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.30098171532154083\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 24\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.2519044019281864\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 25\n","Average aggregated model validation values = 0.6111111111111112\n","Average training loss = 0.28671641647815704\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 26\n","Average aggregated model validation values = 0.7777777777777777\n","Average training loss = 0.3341909795999527\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 27\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.3425826132297516\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 28\n","Average aggregated model validation values = 0.7777777777777778\n","Average training loss = 0.27341049909591675\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 29\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.22363951802253723\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 30\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.42122258245944977\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 31\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.19971107691526413\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 32\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.4545050486922264\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 33\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.3936046361923218\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 34\n","Average aggregated model validation values = 0.5\n","Average training loss = 0.3010508567094803\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 35\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.25072813779115677\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 36\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.2179390713572502\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 37\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.1724315881729126\n","Average local model validation values = 0.6666666666666666\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 38\n","Average aggregated model validation values = 0.7777777777777778\n","Average training loss = 0.3269926607608795\n","Average local model validation values = 0.8888888888888888\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 39\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.31861457228660583\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 40\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.2919468358159065\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 41\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.20025137066841125\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 42\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.21502771228551865\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 43\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.1465834118425846\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 44\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.31925294548273087\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 45\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.19342155009508133\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 46\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.22807322442531586\n","Average local model validation values = 0.6666666666666666\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 47\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.3952621519565582\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 48\n","Average aggregated model validation values = 0.7777777777777777\n","Average training loss = 0.3543557897210121\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 49\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.1872914806008339\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 50\n","Average aggregated model validation values = 0.7777777777777778\n","Average training loss = 0.2146270051598549\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 51\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.28856760263442993\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 52\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.749430812895298\n","Average local model validation values = 0.6666666666666667\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 53\n","Average aggregated model validation values = 0.7777777777777778\n","Average training loss = 0.2626350149512291\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 54\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.39075006544589996\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 55\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.1620950996875763\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 56\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.19235169887542725\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 57\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.20321551710367203\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 58\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.23765242099761963\n","Average local model validation values = 0.6666666666666666\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 59\n","Average aggregated model validation values = 0.6111111111111112\n","Average training loss = 0.159604512155056\n","Average local model validation values = 0.6666666666666666\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 60\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.4011051654815674\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 61\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.5944064259529114\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 62\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.13561729341745377\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 63\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.10720225796103477\n","Average local model validation values = 0.9444444444444444\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 64\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.20296604186296463\n","Average local model validation values = 0.8888888888888888\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 65\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.289148785173893\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 66\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.40238966047763824\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 67\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.15016180649399757\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 68\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.19968459382653236\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 69\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.12216378375887871\n","Average local model validation values = 0.8888888888888888\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 70\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.24877294898033142\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 71\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.12673237919807434\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 72\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.10484540462493896\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 73\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.19293393939733505\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 74\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.17722845450043678\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 75\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.11174895614385605\n","Average local model validation values = 0.7222222222222222\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 76\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.1270182579755783\n","Average local model validation values = 0.5\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 77\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.3193989712744951\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 78\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.31355440616607666\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 79\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.17336885631084442\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 80\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.1690324768424034\n","Average local model validation values = 0.5\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 81\n","Average aggregated model validation values = 0.3888888888888889\n","Average training loss = 0.33698371052742004\n","Average local model validation values = 0.6111111111111112\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 82\n","Average aggregated model validation values = 0.5555555555555556\n","Average training loss = 0.284449003636837\n","Average local model validation values = 0.5\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 83\n","Average aggregated model validation values = 0.3888888888888889\n","Average training loss = 0.20757846534252167\n","Average local model validation values = 0.5555555555555556\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 84\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.291068859398365\n","Average local model validation values = 0.5555555555555556\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 85\n","Average aggregated model validation values = 0.6111111111111112\n","Average training loss = 0.2623564228415489\n","Average local model validation values = 0.6666666666666666\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 86\n","Average aggregated model validation values = 0.6666666666666666\n","Average training loss = 0.228414386510849\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 87\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.15063484385609627\n","Average local model validation values = 0.7777777777777777\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 88\n","Average aggregated model validation values = 0.7222222222222222\n","Average training loss = 0.2648018002510071\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 89\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.13665351644158363\n","Average local model validation values = 0.9444444444444444\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 90\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.19140832871198654\n","Average local model validation values = 0.8888888888888888\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 91\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.4170079529285431\n","Average local model validation values = 0.5\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 92\n","Average aggregated model validation values = 0.8888888888888888\n","Average training loss = 0.23161888495087624\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 93\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.2598135881125927\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 94\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.21994257345795631\n","Average local model validation values = 0.7777777777777778\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 95\n","Average aggregated model validation values = 0.8333333333333333\n","Average training loss = 0.17075039446353912\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 96\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.08305266313254833\n","Average local model validation values = 0.9444444444444444\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 97\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.20520053803920746\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 98\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.23730268329381943\n","Average local model validation values = 0.8333333333333333\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","\n","Calling train\n","\n","Calling local_model_validation\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 99\n","Average aggregated model validation values = 0.9444444444444444\n","Average training loss = 0.05102689377963543\n","Average local model validation values = 0.8888888888888888\n","Wrote TensorBoard information for Aggregator \n","\n","Calling end\n","List of averaged training losses :\n"," [0.7407504916191101, 0.4424946457147598, 0.527766153216362, 0.4008120149374008, 0.3924349546432495, 0.4025471657514572, 0.34922273457050323, 0.33064595609903336, 0.37977445125579834, 0.3509543836116791, 0.3629107028245926, 0.29452597349882126, 0.25660597532987595, 0.5069262832403183, 0.3647744879126549, 0.37384365499019623, 0.41296738386154175, 0.2622897997498512, 0.3537328392267227, 0.2694278582930565, 0.25479865074157715, 0.2630894333124161, 0.25613831728696823, 0.30098171532154083, 0.2519044019281864, 0.28671641647815704, 0.3341909795999527, 0.3425826132297516, 0.27341049909591675, 0.22363951802253723, 0.42122258245944977, 0.19971107691526413, 0.4545050486922264, 0.3936046361923218, 0.3010508567094803, 0.25072813779115677, 0.2179390713572502, 0.1724315881729126, 0.3269926607608795, 0.31861457228660583, 0.2919468358159065, 0.20025137066841125, 0.21502771228551865, 0.1465834118425846, 0.31925294548273087, 0.19342155009508133, 0.22807322442531586, 0.3952621519565582, 0.3543557897210121, 0.1872914806008339, 0.2146270051598549, 0.28856760263442993, 0.749430812895298, 0.2626350149512291, 0.39075006544589996, 0.1620950996875763, 0.19235169887542725, 0.20321551710367203, 0.23765242099761963, 0.159604512155056, 0.4011051654815674, 0.5944064259529114, 0.13561729341745377, 0.10720225796103477, 0.20296604186296463, 0.289148785173893, 0.40238966047763824, 0.15016180649399757, 0.19968459382653236, 0.12216378375887871, 0.24877294898033142, 0.12673237919807434, 0.10484540462493896, 0.19293393939733505, 0.17722845450043678, 0.11174895614385605, 0.1270182579755783, 0.3193989712744951, 0.31355440616607666, 0.17336885631084442, 0.1690324768424034, 0.33698371052742004, 0.284449003636837, 0.20757846534252167, 0.291068859398365, 0.2623564228415489, 0.228414386510849, 0.15063484385609627, 0.2648018002510071, 0.13665351644158363, 0.19140832871198654, 0.4170079529285431, 0.23161888495087624, 0.2598135881125927, 0.21994257345795631, 0.17075039446353912, 0.08305266313254833, 0.20520053803920746, 0.23730268329381943, 0.05102689377963543]\n","This is the end of the flow\n",".run has finished-----------------------------------------------------------------------------------------------------\n","\n","Final aggregated model accuracy for 100 rounds of training: 0.9444444444444444\n"]}],"source":["print(\"NOW CALLING .run -----------------------------------------------------------------------------------------------------\")\n","flflow.run()\n","print(\".run has finished-----------------------------------------------------------------------------------------------------\")\n","\n","print(f'\\nFinal aggregated model accuracy for {flflow.rounds} rounds of training: {flflow.aggregated_model_accuracy}')\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"E3Xl1PxxkxK-"},"outputs":[],"source":[]}],"metadata":{"accelerator":"GPU","colab":{"authorship_tag":"ABX9TyNjf2YgchOtBqsa1N9JW3vB","gpuType":"T4","provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "09Go3-G4X_Vb" + }, + "source": [ + "# Stand-alone and OpenFL federated learning (simulated with workflow interface)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 43288, + "status": "ok", + "timestamp": 1695296685026, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "-FkxTdv0YTCV", + "outputId": "c033a04a-90c4-430d-c57c-b9c6dec60aa2" + }, + "outputs": [], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oh_y2G4TZlSb" + }, + "source": [ + "#Prepare environment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 495, + "status": "ok", + "timestamp": 1695296688920, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "-gron7piL9ok", + "outputId": "9834ed4b-6d25-4f3f-a232-be89699f4427" + }, + "outputs": [], + "source": [ + "!ls -l" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "executionInfo": { + "elapsed": 28136, + "status": "ok", + "timestamp": 1695296720394, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "hBo3V8c2Zswm", + "outputId": "06a8da77-15b9-439f-b73e-731f88b80fa0" + }, + "outputs": [], + "source": [ + "# we will use pytorch_geometric and OpenFL in this notebook\n", + "!pip install git+https://github.com/securefederatedai/openfl.git\n", + "!pip install -r workflow_interface_requirements.txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 25386, + "status": "ok", + "timestamp": 1695296753572, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "wFuNmuFwZ6nB", + "outputId": "12fd0ec1-4447-4a84-b9ca-88744789c4e6" + }, + "outputs": [], + "source": [ + "# Uncomment this if running in Google Colab\n", + "!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", + "import os\n", + "os.environ[\"USERNAME\"] = \"colab\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 6, + "status": "ok", + "timestamp": 1695296757737, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "-W8YeZd-Z-LS", + "outputId": "b15a3116-3272-42d3-a5ac-97ba93e92300" + }, + "outputs": [], + "source": [ + "# to fix a current issue:\n", + "!curl https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python/google/protobuf/internal/builder.py > /usr/local/lib/python3.10/dist-packages/google/protobuf/internal/builder.py\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 22446, + "status": "ok", + "timestamp": 1695296784777, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "q1G2_n1baCIx", + "outputId": "4cc74b4d-68a9-4840-cfdd-4a9b5613a593" + }, + "outputs": [], + "source": [ + "!pip install torch_geometric" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9SkklaKyZbMF" + }, + "source": [ + "## Stand-Alone" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 5937, + "status": "ok", + "timestamp": 1695296790711, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "Rnxwwy5ga3rd" + }, + "outputs": [], + "source": [ + "import argparse\n", + "import os.path as osp\n", + "\n", + "import torch\n", + "import torch.nn.functional as F\n", + "\n", + "from torch_geometric.datasets import TUDataset\n", + "from torch_geometric.loader import DataLoader\n", + "from torch_geometric.logging import init_wandb, log\n", + "from torch_geometric.nn import MLP, GINConv, global_add_pool" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 5, + "status": "ok", + "timestamp": 1695296790712, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "S5H52e09bJGU" + }, + "outputs": [], + "source": [ + "# parser = argparse.ArgumentParser()\n", + "# parser.add_argument('--dataset', type=str, default='MUTAG')\n", + "# parser.add_argument('--batch_size', type=int, default=128)\n", + "# parser.add_argument('--hidden_channels', type=int, default=32)\n", + "# parser.add_argument('--num_layers', type=int, default=5)\n", + "# parser.add_argument('--lr', type=float, default=0.01)\n", + "# parser.add_argument('--epochs', type=int, default=100)\n", + "# parser.add_argument('--wandb', action='store_true', help='Track experiment')\n", + "# args = parser.parse_args()\n", + "\n", + "class dummy:\n", + " pass\n", + "args = dummy()\n", + "\n", + "args.dataset='MUTAG'\n", + "args.batch_size=32\n", + "args.hidden_channels=32\n", + "args.num_layers=5\n", + "args.lr=0.01\n", + "args.momentum=0.9\n", + "args.epochs=100\n", + "args.wandb=False" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 4, + "status": "ok", + "timestamp": 1695296790712, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "ny-bTHNztY7O", + "outputId": "ab844580-6034-44fd-8c14-d190989d63b9" + }, + "outputs": [], + "source": [ + "## tensorboard unique id for runs\n", + "import random\n", + "unique_id_stand_alone = random.randint(10,2000000) # random 'unique' id for tensorboard clarity\n", + "print(\"Last Run ID is: \", unique_id_stand_alone)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 2861, + "status": "ok", + "timestamp": 1695296793569, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "c0TlMUSbt-8h" + }, + "outputs": [], + "source": [ + "# tensorboard\n", + "from torch.utils.tensorboard import SummaryWriter\n", + "writer = SummaryWriter('./logs/pyg_and_openFL_standalone_reusing_PYG_Example{}_BS{}'.format(unique_id_stand_alone, args.batch_size), flush_secs=5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 12, + "status": "ok", + "timestamp": 1695296793570, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "XRb2ZMF0uDgK" + }, + "outputs": [], + "source": [ + "def write_metric(node_name, task_name, metric_name, metric, round_number):\n", + " writer.add_scalar(\"{}/{}/{}\".format(node_name, task_name, metric_name),\n", + " metric, round_number)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 821, + "output_embedded_package_id": "1r0jXefV6w5IkXKDm_CPi-3oMAilf3KYP", + "resources": { + "https://localhost:6006/?tensorboardColab=true": { + "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMiwubWF0LXR5cG9ncmFwaHkgLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNCwubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IGg0e2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSBoNXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgaDZ7Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmcsLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS1zdHJvbmcsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5IHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IHB7bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGwsLm1hdC1jYXB0aW9uLC5tYXQtdHlwb2dyYXBoeSAubWF0LXNtYWxsLC5tYXQtdHlwb2dyYXBoeSAubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCByZ2JhKDAsMCwwLDApfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2Vye2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwNnB4KTt3aWR0aDoxMzMuMzMzMzkzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTA3cHgpO3dpZHRoOjEzMy4zMzM0MDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwOHB4KTt3aWR0aDoxMzMuMzMzNDEzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE2ZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMTVlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE0ZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS5tYXQtYmFkZ2V7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYmRiZGJkO2NvbG9yOiM3NTc1NzV9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggI2UwZTBlMH1bZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiNmZmZ9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6I2ZmZiAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciwubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzIxMjEyMTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgwLDAsMCwuMjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNzU3NTc1fS5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fS5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWhpbnR7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjojNjE2MTYxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM3NTc1NzV9Lm1hdC1saXN0LW9wdGlvbjpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiMyMTIxMjF9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fS5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmRkZWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZlNWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmNkMGNkfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmY5ODAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojMjEyMTIxfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNzU3NTc1fS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM3NTc1NzV9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6IzYxNjE2MX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYxNjE2MTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keS5kYXJrLW1vZGV7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiM0MmE1ZjV9Ym9keS5kYXJrLW1vZGUgYTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojYmE2OGM4fWJvZHkuZGFyay1tb2RlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtYXBwLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MHB4IDZweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MHB4IDlweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowcHggMTBweCAxNHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzIxMjEyMTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJke2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMzMDMwMzAgIWltcG9ydGFudH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGhlYWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Ym9keSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRmb290LGJvZHkuZGFyay1tb2RlIG1hdC1oZWFkZXItcm93LGJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgW21hdC1oZWFkZXItcm93XSxib2R5LmRhcmstbW9kZSBbbWF0LXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1mb290ZXItcm93XSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgbWF0LXJvdyxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtZm9vdGVyLXJvdyxib2R5LmRhcmstbW9kZSB0aC5tYXQtaGVhZGVyLWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjE1KX1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6bm90KC5tYXQtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb246ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcixib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgxODksMTg5LDE4OSwuNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiNjNmM2YzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1ib3R0b206bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZDojZmFmYWZhO2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6aW5oZXJpdH0KPC9zdHlsZT4KCjxzdHlsZT4KICBodG1sLAogIGJvZHkgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKTsKCiAgICAvKiBMZWdhY3kgbWVjaGFuaXNtIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHN1YnBpeGVsIGFudGktYWxpYXNpbmcgb24gbWFjT1MuCiAgICAgKgogICAgICogSW4gdGhlIHBhc3QgWzFdLCBtYWNPUyBzdWJwaXhlbCBBQSBjYXVzZWQgZXhjZXNzaXZlIGJvbGRpbmcgZm9yIGxpZ2h0LW9uLWRhcmsgdGV4dDsgdGhpcyBydWxlCiAgICAgKiBhdm9pZHMgdGhhdCBieSByZXF1ZXN0aW5nIG5vbi1zdWJwaXhlbCBBQSBhbHdheXMsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGljaCBpcwogICAgICogdG8gdXNlIHN1YnBpeGVsIEFBIHdoZW4gYXZhaWxhYmxlLiBUaGUgb3JpZ2luYWwgaXNzdWUgd2FzICJmaXhlZCIgYnkgcmVtb3Zpbmcgc3VicGl4ZWwgQUEgaW4KICAgICAqIG1hY09TIDE0IChNb2phdmUpLCBidXQgZm9yIGxlZ2FjeSByZWFzb25zIHRoZXkgcHJlc2VydmVkIHRoZSBib2xkaW5nIGVmZmVjdCBhcyBhbiBvcHRpb24uCiAgICAgKiBDaHJvbWUgdGhlbiBpbiB0dXJuIHVwZGF0ZWQgaXRzIGZvbnQgcmVuZGVyaW5nIHRvIGFwcGx5IHRoYXQgYm9sZGluZyBlZmZlY3QgWzJdLCB3aGljaCBtZWFucwogICAgICogdGhhdCBldmVuIHRob3VnaCB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGRvY3MgWzNdIHN1Z2dlc3QgdGhhdCBzZXR0aW5nIGBhbnRpYWxpYXNlZGAKICAgICAqIHdvdWxkIGhhdmUgbm8gZWZmZWN0IGZvciByZWNlbnQgdmVyc2lvbnMgb2YgbWFjT1MsIGl0IHN0aWxsIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgYm9sZGluZy4KICAgICAqCiAgICAgKiBbMV06IGh0dHA6Ly93d3cubGlnaHRlcnJhLmNvbS9hcnRpY2xlcy9tYWNvc3h0ZXh0YWFidWcvCiAgICAgKiBbMl06IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg1ODg2MQogICAgICogWzNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udC1zbW9vdGgKICAgICAqCiAgICAgKi8KCiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICB9CiAgbm9zY3JpcHQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBwYWRkaW5nOiAxMHB4OwogIH0KPC9zdHlsZT4KCjwvaGVhZD48Ym9keT48bm9zY3JpcHQ+CiAgICA8aDE+VGVuc29yQm9hcmQgcmVxdWlyZXMgSmF2YVNjcmlwdDwvaDE+CiAgICA8cD5QbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQgYW5kIHJlbG9hZCB0aGlzIHBhZ2UuPC9wPgogIDwvbm9zY3JpcHQ+PHRiLXdlYmFwcD48L3RiLXdlYmFwcD48c2NyaXB0IHNyYz0iaW5kZXguanM/X2ZpbGVfaGFzaD1jOWMyMGFkOSI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4=", + "headers": [ + [ + "content-type", + "text/html; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/chart_worker.js?_file_hash=2c1e71c5": { + "data": "KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9ZnVuY3Rpb24gZXcobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG53KG4sdCl7cmV0dXJuIG4ueFswXT09PXQueFswXSYmbi54WzFdPT09dC54WzFdJiZuLnlbMF09PT10LnlbMF0mJm4ueVsxXT09PXQueVsxXX12YXIgRGk9e2NvbnZlcnRSZWN0VG9FeHRlbnQ6UV8saXNXZWJHbDJTdXBwb3J0ZWQ6al8saXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dHcsYXJlUG9seWxpbmVzRXF1YWw6ZXcsYXJlRXh0ZW50c0VxdWFsOm53fTt2YXIgZHI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1mcihvbi5MSU5FQVIpLHRoaXMueVNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9RGkuY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTt2YXIgVG47KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KShUbnx8KFRuPXt9KSk7ZnVuY3Rpb24geWEobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpzLG9wYWNpdHk6b309aSxhPW47cmV0dXJuIWEmJiFzP251bGw6KGE9YSE9bnVsbD9hOnQoKSxhPWUoYSksYS5zdHlsZS5kaXNwbGF5PXM/IiI6Im5vbmUiLGEuc3R5bGUuc3Ryb2tlPXIsYS5zdHlsZS5vcGFjaXR5PVN0cmluZyhvIT1udWxsP286MSksYSl9dmFyIE9zPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFtpKjJdfSwke3RbaSoyKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7cy5zdHlsZS5maWxsPSJub25lIjtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3JldHVybiBzLnNldEF0dHJpYnV0ZSgiZCIsbyksdGhpcy5zdmcuYXBwZW5kQ2hpbGQocyksc30scz0+e2lmKCEodCE9bnVsbCYmdC5kYXRhKXx8IURpLmFyZVBvbHlsaW5lc0VxdWFsKGUsdD09bnVsbD92b2lkIDA6dC5kYXRhKSl7bGV0IG89dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtzLnNldEF0dHJpYnV0ZSgiZCIsbyl9cmV0dXJuIHN9LGkpO3JldHVybiByPT09bnVsbD9udWxsOihyLnN0eWxlLnN0cm9rZVdpZHRoPVN0cmluZyhpLndpZHRoKSx7ZG9tOnIsZGF0YTplfSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cixjb2xvcjpzfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55K28vMyxlLngrci8yLGUueStvLzMsZS54LGUueS1vKjIvM10pLGw9eWEodD09bnVsbD92b2lkIDA6dC5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIGw9PT1udWxsP251bGw6KGwuc3R5bGUuZmlsbD1zLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOnN9PWksbz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcocykpLGEpLGkpO3JldHVybiBvPT09bnVsbD9udWxsOntkb206byxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnMsY29sb3I6b309cixhPTIvTWF0aC5zcXJ0KDMpKnMsbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStzLzIsZS54LGUueS1zLzIsaS54LGkueS1zLzIsaS54K2EvMixpLnkrcy8yXSksYz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dS5jbGFzc0xpc3QuYWRkKCJ0cmFwZXpvaWQiKSx1LnN0eWxlLmZpbGw9Im5vbmUiO2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodSksdX0sdT0+e2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdX0scik7cmV0dXJuIGM9PT1udWxsP251bGw6KGMuc3R5bGUuZmlsbD1vLHtkb206YyxkYXRhOmx9KX1kaXNwb3NlKCl7fX07dmFyICRoPSIxMzciO3ZhciBpdz0wLEFtPTEscnc9Mjt2YXIgbDA9MSxzdz0yLEpzPTMsZW89MCxoZT0xLEhyPTIsYzA9MTt2YXIgam49MCxLcz0xLENtPTIsUm09MyxMbT00LG93PTUsSXI9MTAwLGF3PTEwMSxsdz0xMDIsUG09MTAzLERtPTEwNCxjdz0yMDAsdXc9MjAxLGh3PTIwMixmdz0yMDMsdTA9MjA0LGgwPTIwNSxkdz0yMDYscHc9MjA3LG13PTIwOCxndz0yMDkseHc9MjEwLHl3PTAsdnc9MSxfdz0yLHp1PTMsd3c9NCxNdz01LGJ3PTYsU3c9NyxDbD0wLEV3PTEsVHc9Mix0aT0wLEF3PTEsQ3c9MixSdz0zLEx3PTQsUHc9NSxmMD0zMDAsQW89MzAxLENvPTMwMixVdT0zMDMsQnU9MzA0LFJsPTMwNixLaD0zMDcsT3U9MWUzLFZlPTEwMDEsa3U9MTAwMixmZT0xMDAzLEltPTEwMDQ7dmFyIE5tPTEwMDU7dmFyIGJlPTEwMDYsRHc9MTAwNzt2YXIgTGw9MTAwODt2YXIgZWk9MTAwOSxJdz0xMDEwLE53PTEwMTEsbm89MTAxMixGdz0xMDEzLFFhPTEwMTQsVWk9MTAxNSxVcj0xMDE2LHp3PTEwMTcsVXc9MTAxOCxCcj0xMDIwLEJ3PTEwMjEsUmU9MTAyMyxPdz0xMDI0LGt3PTEwMjUsT2k9MTAyNixWcj0xMDI3LEh3PTEwMjgsVnc9MTAyOSxHdz0xMDMwLFd3PTEwMzEscXc9MTAzMyxLYz0zMzc3NixRYz0zMzc3NyxqYz0zMzc3OCx0dT0zMzc3OSxGbT0zNTg0MCx6bT0zNTg0MSxVbT0zNTg0MixCbT0zNTg0MyxYdz0zNjE5NixPbT0zNzQ5MixrbT0zNzQ5NixIbT0zNzgwOCxWbT0zNzgwOSxHbT0zNzgxMCxXbT0zNzgxMSxxbT0zNzgxMixYbT0zNzgxMyxZbT0zNzgxNCxabT0zNzgxNSxKbT0zNzgxNiwkbT0zNzgxNyxLbT0zNzgxOCxRbT0zNzgxOSxqbT0zNzgyMCx0Zz0zNzgyMSxlZz0zNjQ5MixZdz0yMjAwLFp3PTIyMDEsSnc9MjIwMixqYT0yMzAwLHRsPTIzMDEsZXU9MjMwMixOcj0yNDAwLEZyPTI0MDEsZWw9MjQwMixRaD0yNTAwLGQwPTI1MDEsJHc9MDt2YXIgcmk9M2UzLCR0PTMwMDEsS3c9MzIwMCxRdz0zMjAxLHRzPTAsanc9MTt2YXIgbnU9NzY4MDt2YXIgdE09NTE5LGlvPTM1MDQ0LG5sPTM1MDQ4O3ZhciBuZz0iMzAwIGVzIixIdT0xMDM1LEluPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDAmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVycztpW3RdPT09dm9pZCAwJiYoaVt0XT1bXSksaVt0XS5pbmRleE9mKGUpPT09LTEmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gaVt0XSE9PXZvaWQgMCYmaVt0XS5pbmRleE9mKGUpIT09LTF9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHIhPT12b2lkIDApe2xldCBzPXIuaW5kZXhPZihlKTtzIT09LTEmJnIuc3BsaWNlKHMsMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZihpIT09dm9pZCAwKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sdmU9W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKXZlW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIGl1PU1hdGguUEkvMTgwLFZ1PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHRuKCl7bGV0IG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGk9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKHZlW24mMjU1XSt2ZVtuPj44JjI1NV0rdmVbbj4+MTYmMjU1XSt2ZVtuPj4yNCYyNTVdKyItIit2ZVt0JjI1NV0rdmVbdD4+OCYyNTVdKyItIit2ZVt0Pj4xNiYxNXw2NF0rdmVbdD4+MjQmMjU1XSsiLSIrdmVbZSY2M3wxMjhdK3ZlW2U+PjgmMjU1XSsiLSIrdmVbZT4+MTYmMjU1XSt2ZVtlPj4yNCYyNTVdK3ZlW2kmMjU1XSt2ZVtpPj44JjI1NV0rdmVbaT4+MTYmMjU1XSt2ZVtpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEllKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBlTShuLHQpe3JldHVybihuJXQrdCkldH1mdW5jdGlvbiBydShuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gaWcobil7cmV0dXJuKG4mbi0xKT09PTAmJm4hPT0wfWZ1bmN0aW9uIG5NKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgSz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qaStyWzZdLHRoaXMueT1yWzFdKmUrcls0XSppK3JbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PXMqaS1vKnIrdC54LHRoaXMueT1zKnIrbyppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtLLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGRlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixzLG8sYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPXMsdVs1XT1sLHVbNl09aSx1WzddPW8sdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxoPWlbN10sZj1pWzJdLGQ9aVs1XSxnPWlbOF0seD1yWzBdLHY9clszXSxtPXJbNl0scD1yWzFdLGI9cls0XSxfPXJbN10sUz1yWzJdLEw9cls1XSxBPXJbOF07cmV0dXJuIHNbMF09byp4K2EqcCtsKlMsc1szXT1vKnYrYSpiK2wqTCxzWzZdPW8qbSthKl8rbCpBLHNbMV09Yyp4K3UqcCtoKlMsc1s0XT1jKnYrdSpiK2gqTCxzWzddPWMqbSt1Kl8raCpBLHNbMl09Zip4K2QqcCtnKlMsc1s1XT1mKnYrZCpiK2cqTCxzWzhdPWYqbStkKl8rZypBLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIGUqbyp1LWUqYSpjLWkqcyp1K2kqYSpsK3IqcypjLXIqbypsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11Km8tYSpjLGY9YSpsLXUqcyxkPWMqcy1vKmwsZz1lKmgraSpmK3IqZDtpZihnPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCB4PTEvZztyZXR1cm4gdFswXT1oKngsdFsxXT0ocipjLXUqaSkqeCx0WzJdPShhKmktcipvKSp4LHRbM109Zip4LHRbNF09KHUqZS1yKmwpKngsdFs1XT0ocipzLWEqZSkqeCx0WzZdPWQqeCx0WzddPShpKmwtYyplKSp4LHRbOF09KG8qZS1pKnMpKngsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxpLHIscyxvLGEpe2xldCBsPU1hdGguY29zKHMpLGM9TWF0aC5zaW4ocyk7cmV0dXJuIHRoaXMuc2V0KGkqbCxpKmMsLWkqKGwqbytjKmEpK28rdCwtcipjLHIqbCwtciooLWMqbytsKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0qPXQsaVszXSo9dCxpWzZdKj10LGlbMV0qPWUsaVs0XSo9ZSxpWzddKj1lLHRoaXN9cm90YXRlKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCkscj10aGlzLmVsZW1lbnRzLHM9clswXSxvPXJbM10sYT1yWzZdLGw9clsxXSxjPXJbNF0sdT1yWzddO3JldHVybiByWzBdPWUqcytpKmwsclszXT1lKm8raSpjLHJbNl09ZSphK2kqdSxyWzFdPS1pKnMrZSpsLHJbNF09LWkqbytlKmMscls3XT0taSphK2UqdSx0aGlzfXRyYW5zbGF0ZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0rPXQqaVsyXSxpWzNdKz10KmlbNV0saVs2XSs9dCppWzhdLGlbMV0rPWUqaVsyXSxpWzRdKz1lKmlbNV0saVs3XSs9ZSppWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZGUucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBwMChuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJvKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfXZhciBtMD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSwkZT17aDowLHM6MCxsOjB9LHZhPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gc3Uobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKyh0LW4pKjYqZTplPDEvMj90OmU8Mi8zP24rKHQtbikqNiooMi8zLWUpOm59ZnVuY3Rpb24gT3Iobil7cmV0dXJuIG48LjA0MDQ1P24qLjA3NzM5OTM4MDg6TWF0aC5wb3cobiouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIG91KG4pe3JldHVybiBuPC4wMDMxMzA4P24qMTIuOTI6MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGZ0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtyZXR1cm4gZT09PXZvaWQgMCYmaT09PXZvaWQgMD90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsaSl9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOnR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLnNldEhleCh0KTp0eXBlb2YgdD09InN0cmluZyImJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSh0JjI1NSkvMjU1LHRoaXN9c2V0UkdCKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPWksdGhpc31zZXRIU0wodCxlLGkpe2lmKHQ9ZU0odCwxKSxlPUllKGUsMCwxKSxpPUllKGksMCwxKSxlPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1pO2Vsc2V7bGV0IHI9aTw9LjU/aSooMStlKTppK2UtaSplLHM9MippLXI7dGhpcy5yPXN1KHMscix0KzEvMyksdGhpcy5nPXN1KHMscix0KSx0aGlzLmI9c3UocyxyLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKHIpe3IhPT12b2lkIDAmJnBhcnNlRmxvYXQocik8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgaTtpZihpPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgcixzPWlbMV0sbz1pWzJdO3N3aXRjaChzKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihyPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChyWzNdLDEwKSkvMjU1LGUocls0XSksdGhpcztpZihyPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChyWzNdLDEwKSkvMTAwLGUocls0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihyPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXtsZXQgYT1wYXJzZUZsb2F0KHJbMV0pLzM2MCxsPXBhcnNlSW50KHJbMl0sMTApLzEwMCxjPXBhcnNlSW50KHJbM10sMTApLzEwMDtyZXR1cm4gZShyWzRdKSx0aGlzLnNldEhTTChhLGwsYyl9YnJlYWt9fWVsc2UgaWYoaT0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCByPWlbMV0scz1yLmxlbmd0aDtpZihzPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDEpK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihzPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDQpK3IuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgZT1tMFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBlIT09dm9pZCAwP3RoaXMuc2V0SGV4KGUpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1Pcih0LnIpLHRoaXMuZz1Pcih0LmcpLHRoaXMuYj1Pcih0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPW91KHQuciksdGhpcy5nPW91KHQuZyksdGhpcy5iPW91KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IGU9dGhpcy5yLGk9dGhpcy5nLHI9dGhpcy5iLHM9TWF0aC5tYXgoZSxpLHIpLG89TWF0aC5taW4oZSxpLHIpLGEsbCxjPShvK3MpLzI7aWYobz09PXMpYT0wLGw9MDtlbHNle2xldCB1PXMtbztzd2l0Y2gobD1jPD0uNT91LyhzK28pOnUvKDItcy1vKSxzKXtjYXNlIGU6YT0oaS1yKS91KyhpPHI/NjowKTticmVhaztjYXNlIGk6YT0oci1lKS91KzI7YnJlYWs7Y2FzZSByOmE9KGUtaSkvdSs0O2JyZWFrfWEvPTZ9cmV0dXJuIHQuaD1hLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxpKXtyZXR1cm4gdGhpcy5nZXRIU0woJGUpLCRlLmgrPXQsJGUucys9ZSwkZS5sKz1pLHRoaXMuc2V0SFNMKCRlLmgsJGUucywkZS5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxlKXtyZXR1cm4gdGhpcy5yPXQucitlLnIsdGhpcy5nPXQuZytlLmcsdGhpcy5iPXQuYitlLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxlKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqZSx0aGlzLmcrPSh0LmctdGhpcy5nKSplLHRoaXMuYis9KHQuYi10aGlzLmIpKmUsdGhpc31sZXJwQ29sb3JzKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQucisoZS5yLXQucikqaSx0aGlzLmc9dC5nKyhlLmctdC5nKSppLHRoaXMuYj10LmIrKGUuYi10LmIpKmksdGhpc31sZXJwSFNMKHQsZSl7dGhpcy5nZXRIU0woJGUpLHQuZ2V0SFNMKHZhKTtsZXQgaT1ydSgkZS5oLHZhLmgsZSkscj1ydSgkZS5zLHZhLnMsZSkscz1ydSgkZS5sLHZhLmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKGkscixzKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07ZnQuTkFNRVM9bTA7ZnQucHJvdG90eXBlLmlzQ29sb3I9ITA7ZnQucHJvdG90eXBlLnI9MTtmdC5wcm90b3R5cGUuZz0xO2Z0LnByb3RvdHlwZS5iPTE7dmFyIHByLE5uPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PT0idW5kZWZpbmVkIilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ByPT09dm9pZCAwJiYocHI9cm8oImNhbnZhcyIpKSxwci53aWR0aD10LndpZHRoLHByLmhlaWdodD10LmhlaWdodDtsZXQgaT1wci5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9cHJ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1ybygiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCkscz1yLmRhdGE7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXT1PcihzW29dLzI1NSkqMjU1O3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1lbHNlIGlmKHQuZGF0YSl7bGV0IGU9dC5kYXRhLnNsaWNlKDApO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/ZVtpXT1NYXRoLmZsb29yKE9yKGVbaV0vMjU1KSoyNTUpOmVbaV09T3IoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LGlNPTAsYWU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0PWFlLkRFRkFVTFRfSU1BR0UsZT1hZS5ERUZBVUxUX01BUFBJTkcsaT1WZSxyPVZlLHM9YmUsbz1MbCxhPVJlLGw9ZWksYz0xLHU9cmkpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXIsdGhpcy5tYWdGaWx0ZXI9cyx0aGlzLm1pbkZpbHRlcj1vLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PWEsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBLKDAsMCksdGhpcy5yZXBlYXQ9bmV3IEsoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSygwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGRlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIWUmJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgcj10aGlzLmltYWdlO2lmKHIudXVpZD09PXZvaWQgMCYmKHIudXVpZD10bigpKSwhZSYmdC5pbWFnZXNbci51dWlkXT09PXZvaWQgMCl7bGV0IHM7aWYoQXJyYXkuaXNBcnJheShyKSl7cz1bXTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspcltvXS5pc0RhdGFUZXh0dXJlP3MucHVzaChhdShyW29dLmltYWdlKSk6cy5wdXNoKGF1KHJbb10pKX1lbHNlIHM9YXUocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOnN9fWkuaW1hZ2U9ci51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PWYwKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgT3U6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBWZTp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2Uga3U6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBPdTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFZlOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTthZS5ERUZBVUxUX0lNQUdFPXZvaWQgMDthZS5ERUZBVUxUX01BUFBJTkc9ZjA7YWUucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBhdShuKXtyZXR1cm4gdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/Tm4uZ2V0RGF0YVVSTChuKTpuLmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kYXRhKSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4uZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfXZhciBXdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXQudyE9PXZvaWQgMD90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10aGlzLncsbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0qcyx0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIrb1sxM10qcyx0aGlzLno9b1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKnMsdGhpcy53PW9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSpzLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLHMsbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0saD1sWzhdLGY9bFsxXSxkPWxbNV0sZz1sWzldLHg9bFsyXSx2PWxbNl0sbT1sWzEwXTtpZihNYXRoLmFicyh1LWYpPC4wMSYmTWF0aC5hYnMoaC14KTwuMDEmJk1hdGguYWJzKGctdik8LjAxKXtpZihNYXRoLmFicyh1K2YpPC4xJiZNYXRoLmFicyhoK3gpPC4xJiZNYXRoLmFicyhnK3YpPC4xJiZNYXRoLmFicyhjK2QrbS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IGI9KGMrMSkvMixfPShkKzEpLzIsUz0obSsxKS8yLEw9KHUrZikvNCxBPShoK3gpLzQsSD0oZyt2KS80O3JldHVybiBiPl8mJmI+Uz9iPC4wMT8oaT0wLHI9LjcwNzEwNjc4MSxzPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChiKSxyPUwvaSxzPUEvaSk6Xz5TP188LjAxPyhpPS43MDcxMDY3ODEscj0wLHM9LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KF8pLGk9TC9yLHM9SC9yKTpTPC4wMT8oaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSxzPTApOihzPU1hdGguc3FydChTKSxpPUEvcyxyPUgvcyksdGhpcy5zZXQoaSxyLHMsZSksdGhpc31sZXQgcD1NYXRoLnNxcnQoKHYtZykqKHYtZykrKGgteCkqKGgteCkrKGYtdSkqKGYtdSkpO3JldHVybiBNYXRoLmFicyhwKTwuMDAxJiYocD0xKSx0aGlzLng9KHYtZykvcCx0aGlzLnk9KGgteCkvcCx0aGlzLno9KGYtdSkvcCx0aGlzLnc9TWF0aC5hY29zKChjK2QrbS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtXdC5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBOZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFd0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgV3QoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBhZSh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9aS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/aS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PWkuaW50ZXJuYWxGb3JtYXQhPT12b2lkIDA/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9aS5taW5GaWx0ZXIhPT12b2lkIDA/aS5taW5GaWx0ZXI6YmUsdGhpcy5kZXB0aEJ1ZmZlcj1pLmRlcHRoQnVmZmVyIT09dm9pZCAwP2kuZGVwdGhCdWZmZXI6ITAsdGhpcy5zdGVuY2lsQnVmZmVyPWkuc3RlbmNpbEJ1ZmZlciE9PXZvaWQgMD9pLnN0ZW5jaWxCdWZmZXI6ITEsdGhpcy5kZXB0aFRleHR1cmU9aS5kZXB0aFRleHR1cmUhPT12b2lkIDA/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9T2JqZWN0LmFzc2lnbih7fSx0LnRleHR1cmUuaW1hZ2UpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O05lLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwO3ZhciBHdT1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBzPTA7czxpO3MrKyl0aGlzLnRleHR1cmVbc109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxzPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxzO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fTtHdS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgc289Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9aS5pZ25vcmVEZXB0aCE9PXZvaWQgMD9pLmlnbm9yZURlcHRoOiEwLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPWkudXNlUmVuZGVyVG9UZXh0dXJlIT09dm9pZCAwP2kudXNlUmVuZGVyVG9UZXh0dXJlOiExLHRoaXMudXNlUmVuZGVyYnVmZmVyPXRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPT09ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07c28ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgRWU9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixzLG8sYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGg9aVtyKzNdLGY9c1tvKzBdLGQ9c1tvKzFdLGc9c1tvKzJdLHg9c1tvKzNdO2lmKGE9PT0wKXt0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aDtyZXR1cm59aWYoYT09PTEpe3RbZSswXT1mLHRbZSsxXT1kLHRbZSsyXT1nLHRbZSszXT14O3JldHVybn1pZihoIT09eHx8bCE9PWZ8fGMhPT1kfHx1IT09Zyl7bGV0IHY9MS1hLG09bCpmK2MqZCt1KmcraCp4LHA9bT49MD8xOi0xLGI9MS1tKm07aWYoYj5OdW1iZXIuRVBTSUxPTil7bGV0IFM9TWF0aC5zcXJ0KGIpLEw9TWF0aC5hdGFuMihTLG0qcCk7dj1NYXRoLnNpbih2KkwpL1MsYT1NYXRoLnNpbihhKkwpL1N9bGV0IF89YSpwO2lmKGw9bCp2K2YqXyxjPWMqditkKl8sdT11KnYrZypfLGg9aCp2K3gqXyx2PT09MS1hKXtsZXQgUz0xL01hdGguc3FydChsKmwrYypjK3UqdStoKmgpO2wqPVMsYyo9Uyx1Kj1TLGgqPVN9fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixzLG8pe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10saD1zW29dLGY9c1tvKzFdLGQ9c1tvKzJdLGc9c1tvKzNdO3JldHVybiB0W2VdPWEqZyt1KmgrbCpkLWMqZix0W2UrMV09bCpnK3UqZitjKmgtYSpkLHRbZSsyXT1jKmcrdSpkK2EqZi1sKmgsdFtlKzNdPXUqZy1hKmgtbCpmLWMqZCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighKHQmJnQuaXNFdWxlcikpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksaD1hKHMvMiksZj1sKGkvMiksZD1sKHIvMiksZz1sKHMvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4gZSE9PSExJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7bGV0IGk9ZS8yLHI9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnIsdGhpcy5feT10Lnkqcix0aGlzLl96PXQueipyLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlPXQuZWxlbWVudHMsaT1lWzBdLHI9ZVs0XSxzPWVbOF0sbz1lWzFdLGE9ZVs1XSxsPWVbOV0sYz1lWzJdLHU9ZVs2XSxoPWVbMTBdLGY9aSthK2g7aWYoZj4wKXtsZXQgZD0uNS9NYXRoLnNxcnQoZisxKTt0aGlzLl93PS4yNS9kLHRoaXMuX3g9KHUtbCkqZCx0aGlzLl95PShzLWMpKmQsdGhpcy5fej0oby1yKSpkfWVsc2UgaWYoaT5hJiZpPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDEraS1hLWgpO3RoaXMuX3c9KHUtbCkvZCx0aGlzLl94PS4yNSpkLHRoaXMuX3k9KHIrbykvZCx0aGlzLl96PShzK2MpL2R9ZWxzZSBpZihhPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDErYS1pLWgpO3RoaXMuX3c9KHMtYykvZCx0aGlzLl94PShyK28pL2QsdGhpcy5feT0uMjUqZCx0aGlzLl96PShsK3UpL2R9ZWxzZXtsZXQgZD0yKk1hdGguc3FydCgxK2gtaS1hKTt0aGlzLl93PShvLXIpL2QsdGhpcy5feD0ocytjKS9kLHRoaXMuX3k9KGwrdSkvZCx0aGlzLl96PS4yNSpkfXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgaT10LmRvdChlKSsxO3JldHVybiBpPE51bWJlci5FUFNJTE9OPyhpPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9aSk6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1pKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9aSksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhJZSh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtsZXQgaT10aGlzLmFuZ2xlVG8odCk7aWYoaT09PTApcmV0dXJuIHRoaXM7bGV0IHI9TWF0aC5taW4oMSxlL2kpO3JldHVybiB0aGlzLnNsZXJwKHQsciksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiB0PT09MD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7bGV0IGk9dC5feCxyPXQuX3kscz10Ll96LG89dC5fdyxhPWUuX3gsbD1lLl95LGM9ZS5feix1PWUuX3c7cmV0dXJuIHRoaXMuX3g9aSp1K28qYStyKmMtcypsLHRoaXMuX3k9cip1K28qbCtzKmEtaSpjLHRoaXMuX3o9cyp1K28qYytpKmwtciphLHRoaXMuX3c9byp1LWkqYS1yKmwtcypjLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoZT09PTApcmV0dXJuIHRoaXM7aWYoZT09PTEpcmV0dXJuIHRoaXMuY29weSh0KTtsZXQgaT10aGlzLl94LHI9dGhpcy5feSxzPXRoaXMuX3osbz10aGlzLl93LGE9byp0Ll93K2kqdC5feCtyKnQuX3krcyp0Ll96O2lmKGE8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixhPS1hKTp0aGlzLmNvcHkodCksYT49MSlyZXR1cm4gdGhpcy5fdz1vLHRoaXMuX3g9aSx0aGlzLl95PXIsdGhpcy5fej1zLHRoaXM7bGV0IGw9MS1hKmE7aWYobDw9TnVtYmVyLkVQU0lMT04pe2xldCBkPTEtZTtyZXR1cm4gdGhpcy5fdz1kKm8rZSp0aGlzLl93LHRoaXMuX3g9ZCppK2UqdGhpcy5feCx0aGlzLl95PWQqcitlKnRoaXMuX3ksdGhpcy5fej1kKnMrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bGV0IGM9TWF0aC5zcXJ0KGwpLHU9TWF0aC5hdGFuMihjLGEpLGg9TWF0aC5zaW4oKDEtZSkqdSkvYyxmPU1hdGguc2luKGUqdSkvYztyZXR1cm4gdGhpcy5fdz1vKmgrdGhpcy5fdypmLHRoaXMuX3g9aSpoK3RoaXMuX3gqZix0aGlzLl95PXIqaCt0aGlzLl95KmYsdGhpcy5fej1zKmgrdGhpcy5feipmLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtsZXQgdD1NYXRoLnJhbmRvbSgpLGU9TWF0aC5zcXJ0KDEtdCksaT1NYXRoLnNxcnQodCkscj0yKk1hdGguUEkqTWF0aC5yYW5kb20oKSxzPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpO3JldHVybiB0aGlzLnNldChlKk1hdGguY29zKHIpLGkqTWF0aC5zaW4ocyksaSpNYXRoLmNvcyhzKSxlKk1hdGguc2luKHIpKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTtFZS5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO3ZhciBUPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24ocmcuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbM10qaStzWzZdKnIsdGhpcy55PXNbMV0qZStzWzRdKmkrc1s3XSpyLHRoaXMuej1zWzJdKmUrc1s1XSppK3NbOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LHM9dC5lbGVtZW50cyxvPTEvKHNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSk7cmV0dXJuIHRoaXMueD0oc1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0pKm8sdGhpcy55PShzWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSkqbyx0aGlzLno9KHNbMl0qZStzWzZdKmkrc1sxMF0qcitzWzE0XSkqbyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10Lngsbz10LnksYT10LnosbD10LncsYz1sKmUrbypyLWEqaSx1PWwqaSthKmUtcypyLGg9bCpyK3MqaS1vKmUsZj0tcyplLW8qaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrZiotcyt1Ki1hLWgqLW8sdGhpcy55PXUqbCtmKi1vK2gqLXMtYyotYSx0aGlzLno9aCpsK2YqLWErYyotby11Ki1zLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIsdGhpcy55PXNbMV0qZStzWzVdKmkrc1s5XSpyLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1zKmEsdGhpcy55PXMqby1pKmwsdGhpcy56PWkqYS1yKm8sdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKGU9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBsdS5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihsdSl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIobHUuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoZT09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoSWUoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsZSozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiBpIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS1jZih0LDIpKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O1QucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgbHU9bmV3IFQscmc9bmV3IEVlLEdlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMS8wLDEvMCwxLzApLGU9bmV3IFQoLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT1JaS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYoaSE9PXZvaWQgMClpZihlJiZpLmF0dHJpYnV0ZXMhPW51bGwmJmkuYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IHM9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgbz0wLGE9cy5jb3VudDtvPGE7bysrKUlpLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxvKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KElpKX1lbHNlIGkuYm91bmRpbmdCb3g9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGN1LmNvcHkoaS5ib3VuZGluZ0JveCksY3UuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oY3UpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltzXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLElpKSxJaS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoa3MpLF9hLnN1YlZlY3RvcnModGhpcy5tYXgsa3MpLG1yLnN1YlZlY3RvcnModC5hLGtzKSxnci5zdWJWZWN0b3JzKHQuYixrcykseHIuc3ViVmVjdG9ycyh0LmMsa3MpLHFuLnN1YlZlY3RvcnMoZ3IsbXIpLFhuLnN1YlZlY3RvcnMoeHIsZ3IpLE5pLnN1YlZlY3RvcnMobXIseHIpO2xldCBlPVswLC1xbi56LHFuLnksMCwtWG4ueixYbi55LDAsLU5pLnosTmkueSxxbi56LDAsLXFuLngsWG4ueiwwLC1Ybi54LE5pLnosMCwtTmkueCwtcW4ueSxxbi54LDAsLVhuLnksWG4ueCwwLC1OaS55LE5pLngsMF07cmV0dXJuIXV1KGUsbXIsZ3IseHIsX2EpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF1dShlLG1yLGdyLHhyLF9hKSk/ITE6KHdhLmNyb3NzVmVjdG9ycyhxbixYbiksZT1bd2EueCx3YS55LHdhLnpdLHV1KGUsbXIsZ3IseHIsX2EpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBJaS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoSWkpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihBblswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBblsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoQW4pLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0dlLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIEFuPVtuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVF0sSWk9bmV3IFQsY3U9bmV3IEdlLG1yPW5ldyBULGdyPW5ldyBULHhyPW5ldyBULHFuPW5ldyBULFhuPW5ldyBULE5pPW5ldyBULGtzPW5ldyBULF9hPW5ldyBULHdhPW5ldyBULEZpPW5ldyBUO2Z1bmN0aW9uIHV1KG4sdCxlLGkscil7Zm9yKGxldCBzPTAsbz1uLmxlbmd0aC0zO3M8PW87cys9Myl7RmkuZnJvbUFycmF5KG4scyk7bGV0IGE9ci54Kk1hdGguYWJzKEZpLngpK3IueSpNYXRoLmFicyhGaS55KStyLnoqTWF0aC5hYnMoRmkueiksbD10LmRvdChGaSksYz1lLmRvdChGaSksdT1pLmRvdChGaSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIHJNPW5ldyBHZSxzZz1uZXcgVCxNYT1uZXcgVCxodT1uZXcgVCxzaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2xldCBpPXRoaXMuY2VudGVyO2UhPT12b2lkIDA/aS5jb3B5KGUpOnJNLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtzPG87cysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbc10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7aHUuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1odS5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPShpLXRoaXMucmFkaXVzKSouNTt0aGlzLmNlbnRlci5hZGQoaHUubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9NYS5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpNYS5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLmFkZChNYSkpLHRoaXMuZXhwYW5kQnlQb2ludChzZy5jb3B5KHQuY2VudGVyKS5zdWIoTWEpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxDbj1uZXcgVCxmdT1uZXcgVCxiYT1uZXcgVCxZbj1uZXcgVCxkdT1uZXcgVCxTYT1uZXcgVCxwdT1uZXcgVCxvaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsQ24pKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9Q24uc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KENuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksQ24uZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7ZnUuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLGJhLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLFluLmNvcHkodGhpcy5vcmlnaW4pLnN1YihmdSk7bGV0IHM9dC5kaXN0YW5jZVRvKGUpKi41LG89LXRoaXMuZGlyZWN0aW9uLmRvdChiYSksYT1Zbi5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LVluLmRvdChiYSksYz1Zbi5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1vKm8pLGgsZixkLGc7aWYodT4wKWlmKGg9bypsLWEsZj1vKmEtbCxnPXMqdSxoPj0wKWlmKGY+PS1nKWlmKGY8PWcpe2xldCB4PTEvdTtoKj14LGYqPXgsZD1oKihoK28qZisyKmEpK2YqKG8qaCtmKzIqbCkrY31lbHNlIGY9cyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LXMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZz8oaD1NYXRoLm1heCgwLC0oLW8qcythKSksZj1oPjA/LXM6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk6Zjw9Zz8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShvKnMrYSkpLGY9aD4wP3M6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPW8+MD8tczpzLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KGJhKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoZnUpLGR9aW50ZXJzZWN0U3BoZXJlKHQsZSl7Q24uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9Q24uZG90KHRoaXMuZGlyZWN0aW9uKSxyPUNuLmRvdChDbiktaSppLHM9dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5zKXJldHVybiBudWxsO2xldCBvPU1hdGguc3FydChzLXIpLGE9aS1vLGw9aStvO3JldHVybiBhPDAmJmw8MD9udWxsOmE8MD90aGlzLmF0KGwsZSk6dGhpcy5hdChhLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZihlPT09MClyZXR1cm4gdC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPT09MD8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIGk9PT1udWxsP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIGU9PT0wfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLHMsbyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksaD0xL3RoaXMuZGlyZWN0aW9uLnosZj10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1mLngpKmMscj0odC5tYXgueC1mLngpKmMpOihpPSh0Lm1heC54LWYueCkqYyxyPSh0Lm1pbi54LWYueCkqYyksdT49MD8ocz0odC5taW4ueS1mLnkpKnUsbz0odC5tYXgueS1mLnkpKnUpOihzPSh0Lm1heC55LWYueSkqdSxvPSh0Lm1pbi55LWYueSkqdSksaT5vfHxzPnJ8fCgocz5pfHxpIT09aSkmJihpPXMpLChvPHJ8fHIhPT1yKSYmKHI9byksaD49MD8oYT0odC5taW4uei1mLnopKmgsbD0odC5tYXguei1mLnopKmgpOihhPSh0Lm1heC56LWYueikqaCxsPSh0Lm1pbi56LWYueikqaCksaT5sfHxhPnIpfHwoKGE+aXx8aSE9PWkpJiYoaT1hKSwobDxyfHxyIT09cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KHQsQ24pIT09bnVsbH1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLHMpe2R1LnN1YlZlY3RvcnMoZSx0KSxTYS5zdWJWZWN0b3JzKGksdCkscHUuY3Jvc3NWZWN0b3JzKGR1LFNhKTtsZXQgbz10aGlzLmRpcmVjdGlvbi5kb3QocHUpLGE7aWYobz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNlIGlmKG88MClhPS0xLG89LW87ZWxzZSByZXR1cm4gbnVsbDtZbi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFNhLmNyb3NzVmVjdG9ycyhZbixTYSkpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChkdS5jcm9zcyhZbikpO2lmKGM8MHx8bCtjPm8pcmV0dXJuIG51bGw7bGV0IHU9LWEqWW4uZG90KHB1KTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L28scyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LHd0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2KXtsZXQgbT10aGlzLmVsZW1lbnRzO3JldHVybiBtWzBdPXQsbVs0XT1lLG1bOF09aSxtWzEyXT1yLG1bMV09cyxtWzVdPW8sbVs5XT1hLG1bMTNdPWwsbVsyXT1jLG1bNl09dSxtWzEwXT1oLG1bMTRdPWYsbVszXT1kLG1bN109ZyxtWzExXT14LG1bMTVdPXYsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB3dCgpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCkscz0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKnMsZVs1XT1pWzVdKnMsZVs2XT1pWzZdKnMsZVs3XT0wLGVbOF09aVs4XSpvLGVbOV09aVs5XSpvLGVbMTBdPWlbMTBdKm8sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56LG89TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksdT1NYXRoLmNvcyhzKSxoPU1hdGguc2luKHMpO2lmKHQub3JkZXI9PT0iWFlaIil7bGV0IGY9byp1LGQ9bypoLGc9YSp1LHg9YSpoO2VbMF09bCp1LGVbNF09LWwqaCxlWzhdPWMsZVsxXT1kK2cqYyxlWzVdPWYteCpjLGVbOV09LWEqbCxlWzJdPXgtZipjLGVbNl09ZytkKmMsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWFoiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mK3gqYSxlWzRdPWcqYS1kLGVbOF09bypjLGVbMV09bypoLGVbNV09byp1LGVbOV09LWEsZVsyXT1kKmEtZyxlWzZdPXgrZiphLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWlhZIil7bGV0IGY9bCp1LGQ9bCpoLGc9Yyp1LHg9YypoO2VbMF09Zi14KmEsZVs0XT0tbypoLGVbOF09ZytkKmEsZVsxXT1kK2cqYSxlWzVdPW8qdSxlWzldPXgtZiphLGVbMl09LW8qYyxlWzZdPWEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWVgiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT1nKmMtZCxlWzhdPWYqYyt4LGVbMV09bCpoLGVbNV09eCpjK2YsZVs5XT1kKmMtZyxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWVpYIil7bGV0IGY9bypsLGQ9bypjLGc9YSpsLHg9YSpjO2VbMF09bCp1LGVbNF09eC1mKmgsZVs4XT1nKmgrZCxlWzFdPWgsZVs1XT1vKnUsZVs5XT0tYSp1LGVbMl09LWMqdSxlWzZdPWQqaCtnLGVbMTBdPWYteCpofWVsc2UgaWYodC5vcmRlcj09PSJYWlkiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT0taCxlWzhdPWMqdSxlWzFdPWYqaCt4LGVbNV09byp1LGVbOV09ZCpoLWcsZVsyXT1nKmgtZCxlWzZdPWEqdSxlWzEwXT14KmgrZn1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKHNNLHQsb00pfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4ga2Uuc3ViVmVjdG9ycyh0LGUpLGtlLmxlbmd0aFNxKCk9PT0wJiYoa2Uuej0xKSxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSksWm4ubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhpLnopPT09MT9rZS54Kz0xZS00OmtlLnorPTFlLTQsa2Uubm9ybWFsaXplKCksWm4uY3Jvc3NWZWN0b3JzKGksa2UpKSxabi5ub3JtYWxpemUoKSxFYS5jcm9zc1ZlY3RvcnMoa2UsWm4pLHJbMF09Wm4ueCxyWzRdPUVhLngscls4XT1rZS54LHJbMV09Wm4ueSxyWzVdPUVhLnkscls5XT1rZS55LHJbMl09Wm4ueixyWzZdPUVhLnosclsxMF09a2Uueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMscz10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGg9aVs1XSxmPWlbOV0sZD1pWzEzXSxnPWlbMl0seD1pWzZdLHY9aVsxMF0sbT1pWzE0XSxwPWlbM10sYj1pWzddLF89aVsxMV0sUz1pWzE1XSxMPXJbMF0sQT1yWzRdLEg9cls4XSx0dD1yWzEyXSxYPXJbMV0seT1yWzVdLFI9cls5XSxEPXJbMTNdLEY9clsyXSx6PXJbNl0sTj1yWzEwXSxWPXJbMTRdLFE9clszXSxhdD1yWzddLEc9clsxMV0sJD1yWzE1XTtyZXR1cm4gc1swXT1vKkwrYSpYK2wqRitjKlEsc1s0XT1vKkErYSp5K2wqeitjKmF0LHNbOF09bypIK2EqUitsKk4rYypHLHNbMTJdPW8qdHQrYSpEK2wqVitjKiQsc1sxXT11KkwraCpYK2YqRitkKlEsc1s1XT11KkEraCp5K2YqeitkKmF0LHNbOV09dSpIK2gqUitmKk4rZCpHLHNbMTNdPXUqdHQraCpEK2YqVitkKiQsc1syXT1nKkwreCpYK3YqRittKlEsc1s2XT1nKkEreCp5K3YqeittKmF0LHNbMTBdPWcqSCt4KlIrdipOK20qRyxzWzE0XT1nKnR0K3gqRCt2KlYrbSokLHNbM109cCpMK2IqWCtfKkYrUypRLHNbN109cCpBK2IqeStfKnorUyphdCxzWzExXT1wKkgrYipSK18qTitTKkcsc1sxNV09cCp0dCtiKkQrXypWK1MqJCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0scz10WzEyXSxvPXRbMV0sYT10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxkPXRbMTRdLGc9dFszXSx4PXRbN10sdj10WzExXSxtPXRbMTVdO3JldHVybiBnKigrcypsKmgtcipjKmgtcyphKmYraSpjKmYrciphKmQtaSpsKmQpK3gqKCtlKmwqZC1lKmMqZitzKm8qZi1yKm8qZCtyKmMqdS1zKmwqdSkrdiooK2UqYypoLWUqYSpkLXMqbypoK2kqbypkK3MqYSp1LWkqYyp1KSttKigtciphKnUtZSpsKmgrZSphKmYrcipvKmgtaSpvKmYraSpsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMsZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnopOihyWzEyXT10LHJbMTNdPWUsclsxNF09aSksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLHM9dFszXSxvPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLGQ9dFsxMV0sZz10WzEyXSx4PXRbMTNdLHY9dFsxNF0sbT10WzE1XSxwPWgqdipjLXgqZipjK3gqbCpkLWEqdipkLWgqbCptK2EqZiptLGI9ZypmKmMtdSp2KmMtZypsKmQrbyp2KmQrdSpsKm0tbypmKm0sXz11KngqYy1nKmgqYytnKmEqZC1vKngqZC11KmEqbStvKmgqbSxTPWcqaCpsLXUqeCpsLWcqYSpmK28qeCpmK3UqYSp2LW8qaCp2LEw9ZSpwK2kqYityKl8rcypTO2lmKEw9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgQT0xL0w7cmV0dXJuIHRbMF09cCpBLHRbMV09KHgqZipzLWgqdipzLXgqcipkK2kqdipkK2gqciptLWkqZiptKSpBLHRbMl09KGEqdipzLXgqbCpzK3gqcipjLWkqdipjLWEqciptK2kqbCptKSpBLHRbM109KGgqbCpzLWEqZipzLWgqcipjK2kqZipjK2EqcipkLWkqbCpkKSpBLHRbNF09YipBLHRbNV09KHUqdipzLWcqZipzK2cqcipkLWUqdipkLXUqciptK2UqZiptKSpBLHRbNl09KGcqbCpzLW8qdipzLWcqcipjK2UqdipjK28qciptLWUqbCptKSpBLHRbN109KG8qZipzLXUqbCpzK3UqcipjLWUqZipjLW8qcipkK2UqbCpkKSpBLHRbOF09XypBLHRbOV09KGcqaCpzLXUqeCpzLWcqaSpkK2UqeCpkK3UqaSptLWUqaCptKSpBLHRbMTBdPShvKngqcy1nKmEqcytnKmkqYy1lKngqYy1vKmkqbStlKmEqbSkqQSx0WzExXT0odSphKnMtbypoKnMtdSppKmMrZSpoKmMrbyppKmQtZSphKmQpKkEsdFsxMl09UypBLHRbMTNdPSh1Kngqci1nKmgqcitnKmkqZi1lKngqZi11KmkqditlKmgqdikqQSx0WzE0XT0oZyphKnItbyp4KnItZyppKmwrZSp4KmwrbyppKnYtZSphKnYpKkEsdFsxNV09KG8qaCpyLXUqYSpyK3UqaSpsLWUqaCpsLW8qaSpmK2UqYSpmKSpBLHRoaXN9c2NhbGUodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxzPXQuejtyZXR1cm4gZVswXSo9aSxlWzRdKj1yLGVbOF0qPXMsZVsxXSo9aSxlWzVdKj1yLGVbOV0qPXMsZVsyXSo9aSxlWzZdKj1yLGVbMTBdKj1zLGVbM10qPWksZVs3XSo9cixlWzExXSo9cyx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLGk9dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0scj10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoZSxpLHIpKX1tYWtlVHJhbnNsYXRpb24odCxlLGkpe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsaSwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLWksMCwwLGksZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLDAsaSwwLDAsMSwwLDAsLWksMCxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLWksMCwwLGksZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLHM9MS1pLG89dC54LGE9dC55LGw9dC56LGM9cypvLHU9cyphO3JldHVybiB0aGlzLnNldChjKm8raSxjKmEtcipsLGMqbCtyKmEsMCxjKmErcipsLHUqYStpLHUqbC1yKm8sMCxjKmwtciphLHUqbCtyKm8scypsKmwraSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxpLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLGkscixzLG8pe3JldHVybiB0aGlzLnNldCgxLGkscywwLHQsMSxvLDAsZSxyLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz1lLl94LG89ZS5feSxhPWUuX3osbD1lLl93LGM9cytzLHU9bytvLGg9YSthLGY9cypjLGQ9cyp1LGc9cypoLHg9byp1LHY9bypoLG09YSpoLHA9bCpjLGI9bCp1LF89bCpoLFM9aS54LEw9aS55LEE9aS56O3JldHVybiByWzBdPSgxLSh4K20pKSpTLHJbMV09KGQrXykqUyxyWzJdPShnLWIpKlMsclszXT0wLHJbNF09KGQtXykqTCxyWzVdPSgxLShmK20pKSpMLHJbNl09KHYrcCkqTCxyWzddPTAscls4XT0oZytiKSpBLHJbOV09KHYtcCkqQSxyWzEwXT0oMS0oZit4KSkqQSxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz15ci5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLG89eXIuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxhPXlyLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYocz0tcyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0sS2UuY29weSh0aGlzKTtsZXQgYz0xL3MsdT0xL28saD0xL2E7cmV0dXJuIEtlLmVsZW1lbnRzWzBdKj1jLEtlLmVsZW1lbnRzWzFdKj1jLEtlLmVsZW1lbnRzWzJdKj1jLEtlLmVsZW1lbnRzWzRdKj11LEtlLmVsZW1lbnRzWzVdKj11LEtlLmVsZW1lbnRzWzZdKj11LEtlLmVsZW1lbnRzWzhdKj1oLEtlLmVsZW1lbnRzWzldKj1oLEtlLmVsZW1lbnRzWzEwXSo9aCxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChLZSksaS54PXMsaS55PW8saS56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixzLG8pe289PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBhPXRoaXMuZWxlbWVudHMsbD0yKnMvKGUtdCksYz0yKnMvKGktciksdT0oZSt0KS8oZS10KSxoPShpK3IpLyhpLXIpLGY9LShvK3MpLyhvLXMpLGQ9LTIqbypzLyhvLXMpO3JldHVybiBhWzBdPWwsYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1oLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1mLGFbMTRdPWQsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8oby1zKSxoPShlK3QpKmwsZj0oaStyKSpjLGQ9KG8rcykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0taCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1mLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07d3QucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgeXI9bmV3IFQsS2U9bmV3IHd0LHNNPW5ldyBUKDAsMCwwKSxvTT1uZXcgVCgxLDEsMSksWm49bmV3IFQsRWE9bmV3IFQsa2U9bmV3IFQsb2c9bmV3IHd0LGFnPW5ldyBFZSxhaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPWFpLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLHM9clswXSxvPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxmPXJbNl0sZD1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEllKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUllKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxkKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihJZShmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1JZShoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsZCksdGhpcy5fej1NYXRoLmF0YW4yKGwscykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oSWUobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgscykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtSWUobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKC11LGQpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSxpPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gb2cubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgob2csZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBhZy5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhZyx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx0WzNdIT09dm9pZCAwJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBUKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07YWkucHJvdG90eXBlLmlzRXVsZXI9ITA7YWkuRGVmYXVsdE9yZGVyPSJYWVoiO2FpLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIGlsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4odGhpcy5tYXNrJnQubWFzaykhPT0wfWlzRW5hYmxlZCh0KXtyZXR1cm4odGhpcy5tYXNrJigxPDx0fDApKSE9PTB9fSxhTT0wLGxnPW5ldyBULHZyPW5ldyBFZSxSbj1uZXcgd3QsVGE9bmV3IFQsSHM9bmV3IFQsbE09bmV3IFQsY009bmV3IEVlLGNnPW5ldyBUKDEsMCwwKSx1Zz1uZXcgVCgwLDEsMCksaGc9bmV3IFQoMCwwLDEpLHVNPXt0eXBlOiJhZGRlZCJ9LGZnPXt0eXBlOiJyZW1vdmVkIn0sa3Q9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6YU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1rdC5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgVCxlPW5ldyBhaSxpPW5ldyBFZSxyPW5ldyBUKDEsMSwxKTtmdW5jdGlvbiBzKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9ZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfWUuX29uQ2hhbmdlKHMpLGkuX29uQ2hhbmdlKG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IHd0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBkZX19KSx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5tYXRyaXhXb3JsZD1uZXcgd3QsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPWt0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgaWwsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQsZSl7cmV0dXJuIHZyLnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkodnIpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ciksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhjZyx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh1Zyx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhoZyx0KX10cmFuc2xhdGVPbkF4aXModCxlKXtyZXR1cm4gbGcuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChsZy5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhjZyx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1Zyx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhoZyx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9UYS5jb3B5KHQpOlRhLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9Sbi5sb29rQXQoSHMsVGEsdGhpcy51cCk6Um4ubG9va0F0KFRhLEhzLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHImJihSbi5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksdnIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJuKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodnIuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KHQucGFyZW50IT09bnVsbCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudCh1TSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIGUhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoZmcpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChmZyl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdC5wYXJlbnQhPT1udWxsJiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoUm4pLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBvPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG99fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSHMsdCxsTSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyxjTSx0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCBlPXRoaXMucGFyZW50O2UhPT1udWxsJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7bGV0IGk9dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZpIT09bnVsbCYmaS51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksZT09PSEwKXtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKylyW3NdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixpPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxpLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCByPXt9O3IudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHIubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoci5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKHIucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihyLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoci5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBzKGEsbCl7cmV0dXJuIGFbbC51dWlkXT09PXZvaWQgMCYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9yLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihyLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihyLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtyLmdlb21ldHJ5PXModC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBhPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihhIT09dm9pZCAwJiZhLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9YS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107cyh0LnNoYXBlcyxoKX1lbHNlIHModC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKHIuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxyLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYocyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxyLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IGE9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKWEucHVzaChzKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtyLm1hdGVyaWFsPWF9ZWxzZSByLm1hdGVyaWFsPXModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7ci5jaGlsZHJlbj1bXTtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlblthXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe3IuYW5pbWF0aW9ucz1bXTtmb3IobGV0IGE9MDthPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7YSsrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbYV07ci5hbmltYXRpb25zLnB1c2gocyh0LmFuaW1hdGlvbnMsbCkpfX1pZihlKXtsZXQgYT1vKHQuZ2VvbWV0cmllcyksbD1vKHQubWF0ZXJpYWxzKSxjPW8odC50ZXh0dXJlcyksdT1vKHQuaW1hZ2VzKSxoPW8odC5zaGFwZXMpLGY9byh0LnNrZWxldG9ucyksZD1vKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihpLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9ZiksZC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1kKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIG8oYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxlPT09ITApZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCByPXQuY2hpbGRyZW5baV07dGhpcy5hZGQoci5jbG9uZSgpKX1yZXR1cm4gdGhpc319O2t0LkRlZmF1bHRVcD1uZXcgVCgwLDEsMCk7a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7a3QucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIFFlPW5ldyBULExuPW5ldyBULG11PW5ldyBULFBuPW5ldyBULF9yPW5ldyBULHdyPW5ldyBULGRnPW5ldyBULGd1PW5ldyBULHh1PW5ldyBULHl1PW5ldyBULHJlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLFFlLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKFFlKTtsZXQgcz1yLmxlbmd0aFNxKCk7cmV0dXJuIHM+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KHMpKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLHMpe1FlLnN1YlZlY3RvcnMocixlKSxMbi5zdWJWZWN0b3JzKGksZSksbXUuc3ViVmVjdG9ycyh0LGUpO2xldCBvPVFlLmRvdChRZSksYT1RZS5kb3QoTG4pLGw9UWUuZG90KG11KSxjPUxuLmRvdChMbiksdT1Mbi5kb3QobXUpLGg9bypjLWEqYTtpZihoPT09MClyZXR1cm4gcy5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxkPShjKmwtYSp1KSpmLGc9KG8qdS1hKmwpKmY7cmV0dXJuIHMuc2V0KDEtZC1nLGcsZCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsUG4pLFBuLng+PTAmJlBuLnk+PTAmJlBuLngrUG4ueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixzLG8sYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihzLFBuLngpLGwuYWRkU2NhbGVkVmVjdG9yKG8sUG4ueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxQbi56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBRZS5zdWJWZWN0b3JzKGksZSksTG4uc3ViVmVjdG9ycyh0LGUpLFFlLmNyb3NzKExuKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gUWUuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxMbi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLFFlLmNyb3NzKExuKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiByZS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gcmUuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixzKXtyZXR1cm4gcmUuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixzKX1jb250YWluc1BvaW50KHQpe3JldHVybiByZS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIHJlLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBpPXRoaXMuYSxyPXRoaXMuYixzPXRoaXMuYyxvLGE7X3Iuc3ViVmVjdG9ycyhyLGkpLHdyLnN1YlZlY3RvcnMocyxpKSxndS5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9X3IuZG90KGd1KSxjPXdyLmRvdChndSk7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO3h1LnN1YlZlY3RvcnModCxyKTtsZXQgdT1fci5kb3QoeHUpLGg9d3IuZG90KHh1KTtpZih1Pj0wJiZoPD11KXJldHVybiBlLmNvcHkocik7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBvPWwvKGwtdSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKTt5dS5zdWJWZWN0b3JzKHQscyk7bGV0IGQ9X3IuZG90KHl1KSxnPXdyLmRvdCh5dSk7aWYoZz49MCYmZDw9ZylyZXR1cm4gZS5jb3B5KHMpO2xldCB4PWQqYy1sKmc7aWYoeDw9MCYmYz49MCYmZzw9MClyZXR1cm4gYT1jLyhjLWcpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSk7bGV0IHY9dSpnLWQqaDtpZih2PD0wJiZoLXU+PTAmJmQtZz49MClyZXR1cm4gZGcuc3ViVmVjdG9ycyhzLHIpLGE9KGgtdSkvKGgtdSsoZC1nKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihkZyxhKTtsZXQgbT0xLyh2K3grZik7cmV0dXJuIG89eCptLGE9ZiptLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoX3IsbykuYWRkU2NhbGVkVmVjdG9yKHdyLGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LGhNPTAseGU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aE0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPUtzLHRoaXMuc2lkZT1lbyx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9dTAsdGhpcy5ibGVuZERzdD1oMCx0aGlzLmJsZW5kRXF1YXRpb249SXIsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz16dSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPXRNLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW51LHRoaXMuc3RlbmNpbFpGYWlsPW51LHRoaXMuc3RlbmNpbFpQYXNzPW51LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYoaT09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKGU9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9aT09PWMwO2NvbnRpbnVlfWxldCByPXRoaXNbZV07aWYocj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIik7Y29udGludWV9ciYmci5pc0NvbG9yP3Iuc2V0KGkpOnImJnIuaXNWZWN0b3IzJiZpJiZpLmlzVmVjdG9yMz9yLmNvcHkoaSk6dGhpc1tlXT1pfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2UmJih0PXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihpLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHRoaXMucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHRoaXMubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXRoaXMuc2hlZW4pLHRoaXMuc2hlZW5Db2xvciYmdGhpcy5zaGVlbkNvbG9yLmlzQ29sb3ImJihpLnNoZWVuQ29sb3I9dGhpcy5zaGVlbkNvbG9yLmdldEhleCgpKSx0aGlzLnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10aGlzLnNoZWVuUm91Z2huZXNzKSx0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihpLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJnRoaXMuZW1pc3NpdmVJbnRlbnNpdHkhPT0xJiYoaS5lbWlzc2l2ZUludGVuc2l0eT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihpLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXJDb2xvciYmdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3ImJihpLnNwZWN1bGFyQ29sb3I9dGhpcy5zcGVjdWxhckNvbG9yLmdldEhleCgpKSx0aGlzLnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx0aGlzLmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx0aGlzLmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihpLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKGkubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKGkuYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihpLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQsaS5saWdodE1hcEludGVuc2l0eT10aGlzLmxpZ2h0TWFwSW50ZW5zaXR5KSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKGkuYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxpLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKGkuYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsaS5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihpLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLGkubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihpLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxpLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsaS5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoaS5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCYmdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPXRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJDb2xvck1hcCYmdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJDb2xvck1hcD10aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihpLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04odCkudXVpZCx0aGlzLmNvbWJpbmUhPT12b2lkIDAmJihpLmNvbWJpbmU9dGhpcy5jb21iaW5lKSksdGhpcy5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSksdGhpcy5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSksdGhpcy5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10aGlzLnJlZnJhY3Rpb25SYXRpbyksdGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihpLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dGhpcy50cmFuc21pc3Npb24pLHRoaXMudHJhbnNtaXNzaW9uTWFwJiZ0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUmJihpLnRyYW5zbWlzc2lvbk1hcD10aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04odCkudXVpZCksdGhpcy50aGlja25lc3MhPT12b2lkIDAmJihpLnRoaWNrbmVzcz10aGlzLnRoaWNrbmVzcyksdGhpcy50aGlja25lc3NNYXAmJnRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSYmKGkudGhpY2tuZXNzTWFwPXRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0aGlzLmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uQ29sb3I9dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmdldEhleCgpKSx0aGlzLnNpemUhPT12b2lkIDAmJihpLnNpemU9dGhpcy5zaXplKSx0aGlzLnNoYWRvd1NpZGUhPT1udWxsJiYoaS5zaGFkb3dTaWRlPXRoaXMuc2hhZG93U2lkZSksdGhpcy5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksdGhpcy5ibGVuZGluZyE9PUtzJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSx0aGlzLnNpZGUhPT1lbyYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksdGhpcy50cmFuc3BhcmVudD09PSEwJiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiZ0aGlzLnJvdGF0aW9uIT09MCYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksdGhpcy5wb2x5Z29uT2Zmc2V0PT09ITAmJihpLnBvbHlnb25PZmZzZXQ9ITApLHRoaXMucG9seWdvbk9mZnNldEZhY3RvciE9PTAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0aGlzLnBvbHlnb25PZmZzZXRVbml0cyE9PTAmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJnRoaXMubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx0aGlzLmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx0aGlzLmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx0aGlzLnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10aGlzLnNjYWxlKSx0aGlzLmRpdGhlcmluZz09PSEwJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksdGhpcy5hbHBoYVRvQ292ZXJhZ2U9PT0hMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT09PSEwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLHRoaXMud2lyZWZyYW1lPT09ITAmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSx0aGlzLndpcmVmcmFtZUxpbmVjYXAhPT0icm91bmQiJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksdGhpcy53aXJlZnJhbWVMaW5lam9pbiE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLHRoaXMuZmxhdFNoYWRpbmc9PT0hMCYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMudG9uZU1hcHBlZD09PSExJiYoaS50b25lTWFwcGVkPSExKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO2Z1bmN0aW9uIHIocyl7bGV0IG89W107Zm9yKGxldCBhIGluIHMpe2xldCBsPXNbYV07ZGVsZXRlIGwubWV0YWRhdGEsby5wdXNoKGwpfXJldHVybiBvfWlmKGUpe2xldCBzPXIodC50ZXh0dXJlcyksbz1yKHQuaW1hZ2VzKTtzLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1zKSxvLmxlbmd0aD4wJiYoaS5pbWFnZXM9byl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYoZSE9PW51bGwpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW3NdPWVbc10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt4ZS5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIga2k9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2tpLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBKdD1uZXcgVCxBYT1uZXcgSyxRdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPWk9PT0hMCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5pdGVtU2l6ZSxpKj1lLml0ZW1TaXplO2ZvcihsZXQgcj0wLHM9dGhpcy5pdGVtU2l6ZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IGZ0KSxlW2krK109by5yLGVbaSsrXT1vLmcsZVtpKytdPW8uYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IEspLGVbaSsrXT1vLngsZVtpKytdPW8ueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IFQpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgV3QpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56LGVbaSsrXT1vLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUFhLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxBYS5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLEFhLngsQWEueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSnQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPXMsdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1pbyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1F0LnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgcmw9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fTt2YXIgc2w9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fSxXdT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O1d1LnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGVlPWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19O3ZhciBmTT0wLHFlPW5ldyB3dCx2dT1uZXcga3QsTXI9bmV3IFQsSGU9bmV3IEdlLFZzPW5ldyBHZSxnZT1uZXcgVCxIdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpmTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KHAwKHQpP3NsOnJsKSh0LDEpOnRoaXMuaW5kZXg9dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdIT09dm9pZCAwfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO2UhPT12b2lkIDAmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKGkhPT12b2lkIDApe2xldCBzPW5ldyBkZSgpLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KHMpLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHIhPT12b2lkIDAmJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSx0aGlzLmJvdW5kaW5nQm94IT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nU3BoZXJlIT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVZKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHFlLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9bG9va0F0KHQpe3JldHVybiB2dS5sb29rQXQodCksdnUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQodnUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKE1yKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShNci54LE1yLnksTXIueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dFtpXTtlLnB1c2gocy54LHMueSxzLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe3RoaXMuYm91bmRpbmdCb3g9PT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1uZXcgR2UpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyBUKC0xLzAsLTEvMCwtMS8wKSxuZXcgVCgxLzAsMS8wLDEvMCkpO3JldHVybn1pZih0IT09dm9pZCAwKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2xldCBzPWVbaV07SGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShzKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSxnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEhlLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5tYXgpKX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe3RoaXMuYm91bmRpbmdTcGhlcmU9PT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgc2kpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBULDEvMCk7cmV0dXJufWlmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEhlLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2xldCBhPWVbc107VnMuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShhKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKEhlLm1pbixWcy5taW4pLEhlLmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnMoSGUubWF4LFZzLm1heCksSGUuZXhwYW5kQnlQb2ludChnZSkpOihIZS5leHBhbmRCeVBvaW50KFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChWcy5tYXgpKX1IZS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQuY291bnQ7czxvO3MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQscykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKTtpZihlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsdT1hLmNvdW50O2M8dTtjKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihNci5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksZ2UuYWRkKE1yKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZih0PT09bnVsbHx8ZS5wb3NpdGlvbj09PXZvaWQgMHx8ZS5ub3JtYWw9PT12b2lkIDB8fGUudXY9PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO3JldHVybn1sZXQgaT10LmFycmF5LHI9ZS5wb3NpdGlvbi5hcnJheSxzPWUubm9ybWFsLmFycmF5LG89ZS51di5hcnJheSxhPXIubGVuZ3RoLzM7ZS50YW5nZW50PT09dm9pZCAwJiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoNCphKSw0KSk7bGV0IGw9ZS50YW5nZW50LmFycmF5LGM9W10sdT1bXTtmb3IobGV0IFg9MDtYPGE7WCsrKWNbWF09bmV3IFQsdVtYXT1uZXcgVDtsZXQgaD1uZXcgVCxmPW5ldyBULGQ9bmV3IFQsZz1uZXcgSyx4PW5ldyBLLHY9bmV3IEssbT1uZXcgVCxwPW5ldyBUO2Z1bmN0aW9uIGIoWCx5LFIpe2guZnJvbUFycmF5KHIsWCozKSxmLmZyb21BcnJheShyLHkqMyksZC5mcm9tQXJyYXkocixSKjMpLGcuZnJvbUFycmF5KG8sWCoyKSx4LmZyb21BcnJheShvLHkqMiksdi5mcm9tQXJyYXkobyxSKjIpLGYuc3ViKGgpLGQuc3ViKGgpLHguc3ViKGcpLHYuc3ViKGcpO2xldCBEPTEvKHgueCp2Lnktdi54KngueSk7IWlzRmluaXRlKEQpfHwobS5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKHYueSkuYWRkU2NhbGVkVmVjdG9yKGQsLXgueSkubXVsdGlwbHlTY2FsYXIoRCkscC5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKHgueCkuYWRkU2NhbGVkVmVjdG9yKGYsLXYueCkubXVsdGlwbHlTY2FsYXIoRCksY1tYXS5hZGQobSksY1t5XS5hZGQobSksY1tSXS5hZGQobSksdVtYXS5hZGQocCksdVt5XS5hZGQocCksdVtSXS5hZGQocCkpfWxldCBfPXRoaXMuZ3JvdXBzO18ubGVuZ3RoPT09MCYmKF89W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKWIoaVt6KzBdLGlbeisxXSxpW3orMl0pfWxldCBTPW5ldyBULEw9bmV3IFQsQT1uZXcgVCxIPW5ldyBUO2Z1bmN0aW9uIHR0KFgpe0EuZnJvbUFycmF5KHMsWCozKSxILmNvcHkoQSk7bGV0IHk9Y1tYXTtTLmNvcHkoeSksUy5zdWIoQS5tdWx0aXBseVNjYWxhcihBLmRvdCh5KSkpLm5vcm1hbGl6ZSgpLEwuY3Jvc3NWZWN0b3JzKEgseSk7bGV0IEQ9TC5kb3QodVtYXSk8MD8tMToxO2xbWCo0XT1TLngsbFtYKjQrMV09Uy55LGxbWCo0KzJdPVMueixsW1gqNCszXT1EfWZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKXR0KGlbeiswXSksdHQoaVt6KzFdKSx0dChpW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihlIT09dm9pZCAwKXtsZXQgaT10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYoaT09PXZvaWQgMClpPW5ldyBRdChuZXcgRmxvYXQzMkFycmF5KGUuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsaSk7ZWxzZSBmb3IobGV0IGY9MCxkPWkuY291bnQ7ZjxkO2YrKylpLnNldFhZWihmLDAsMCwwKTtsZXQgcj1uZXcgVCxzPW5ldyBULG89bmV3IFQsYT1uZXcgVCxsPW5ldyBULGM9bmV3IFQsdT1uZXcgVCxoPW5ldyBUO2lmKHQpZm9yKGxldCBmPTAsZD10LmNvdW50O2Y8ZDtmKz0zKXtsZXQgZz10LmdldFgoZiswKSx4PXQuZ2V0WChmKzEpLHY9dC5nZXRYKGYrMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZykscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdiksdS5zdWJWZWN0b3JzKG8scyksaC5zdWJWZWN0b3JzKHIscyksdS5jcm9zcyhoKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxnKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx2KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihnLGEueCxhLnksYS56KSxpLnNldFhZWih4LGwueCxsLnksbC56KSxpLnNldFhZWih2LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLGQ9ZS5jb3VudDtmPGQ7Zis9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzApLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisyKSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGkuc2V0WFlaKGYrMCx1LngsdS55LHUueiksaS5zZXRYWVooZisxLHUueCx1LnksdS56KSxpLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59ZT09PXZvaWQgMCYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHQuYXR0cmlidXRlc1tyXT09PXZvaWQgMCljb250aW51ZTtsZXQgbz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLG8ubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylvW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLGdlLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsZ2UueCxnZS55LGdlLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxoPWEubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGQ9MCxnPTA7Zm9yKGxldCB4PTAsdj1sLmxlbmd0aDt4PHY7eCsrKXthLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ZD1sW3hdKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6ZD1sW3hdKnU7Zm9yKGxldCBtPTA7bTx1O20rKylmW2crK109Y1tkKytdfXJldHVybiBuZXcgUXQoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IGU9bmV3IEh0LGk9dGhpcy5pbmRleC5hcnJheSxyPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGEgaW4gcil7bGV0IGw9clthXSxjPXQobCxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBzPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBzKXtsZXQgbD1bXSxjPXNbYV07Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLGQ9dChmLGkpO2wucHVzaChkKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPW8ubGVuZ3RoO2E8bDthKyspe2xldCBjPW9bYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O2UhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl7bGV0IGM9aVtsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCByPXt9LHM9ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9Y1toXTt1LnB1c2goZC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKHJbbF09dSxzPSEwKX1zJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgbz10aGlzLmdyb3VwcztvLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gYSE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IGU9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgaT10LmluZGV4O2khPT1udWxsJiZ0aGlzLnNldEluZGV4KGkuY2xvbmUoZSkpO2xldCByPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gcil7bGV0IHU9cltjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUoZSkpfWxldCBzPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1bXSxoPXNbY107Zm9yKGxldCBmPTAsZD1oLmxlbmd0aDtmPGQ7ZisrKXUucHVzaChoW2ZdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PW8ubGVuZ3RoO2M8dTtjKyspe2xldCBoPW9bY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgYT10LmJvdW5kaW5nQm94O2EhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtIdC5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgcGc9bmV3IHd0LGJyPW5ldyBvaSxfdT1uZXcgc2ksSm49bmV3IFQsJG49bmV3IFQsS249bmV3IFQsd3U9bmV3IFQsTXU9bmV3IFQsYnU9bmV3IFQsQ2E9bmV3IFQsUmE9bmV3IFQsTGE9bmV3IFQsUGE9bmV3IEssRGE9bmV3IEssSWE9bmV3IEssU3U9bmV3IFQsTmE9bmV3IFQsb2U9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0PW5ldyBIdCxlPW5ldyBraSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYociE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXtsZXQgYT1yW3NdLm5hbWV8fFN0cmluZyhzKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPXN9fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0cztlIT09dm9pZCAwJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxzPXRoaXMubWF0cml4V29ybGQ7aWYocj09PXZvaWQgMHx8KGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLF91LmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksX3UuYXBwbHlNYXRyaXg0KHMpLHQucmF5LmludGVyc2VjdHNTcGhlcmUoX3UpPT09ITEpfHwocGcuY29weShzKS5pbnZlcnQoKSxici5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQocGcpLGkuYm91bmRpbmdCb3ghPT1udWxsJiZici5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgbztpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1pLmF0dHJpYnV0ZXMudXYsZj1pLmF0dHJpYnV0ZXMudXYyLGQ9aS5ncm91cHMsZz1pLmRyYXdSYW5nZTtpZihhIT09bnVsbClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPWEuZ2V0WChTKSxIPWEuZ2V0WChTKzEpLHR0PWEuZ2V0WChTKzIpO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4oYS5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9YS5nZXRYKG0pLF89YS5nZXRYKG0rMSksUz1hLmdldFgobSsyKTtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHg9MCx2PWQubGVuZ3RoO3g8djt4Kyspe2xldCBtPWRbeF0scD1yW20ubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heChtLnN0YXJ0LGcuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbihtLnN0YXJ0K20uY291bnQsZy5zdGFydCtnLmNvdW50KSk7Zm9yKGxldCBTPWIsTD1fO1M8TDtTKz0zKXtsZXQgQT1TLEg9UysxLHR0PVMrMjtvPUZhKHRoaXMscCx0LGJyLGwsYyx1LGgsZixBLEgsdHQpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKFMvMyksby5mYWNlLm1hdGVyaWFsSW5kZXg9bS5tYXRlcmlhbEluZGV4LGUucHVzaChvKSl9fWVsc2V7bGV0IHg9TWF0aC5tYXgoMCxnLnN0YXJ0KSx2PU1hdGgubWluKGwuY291bnQsZy5zdGFydCtnLmNvdW50KTtmb3IobGV0IG09eCxwPXY7bTxwO20rPTMpe2xldCBiPW0sXz1tKzEsUz1tKzI7bz1GYSh0aGlzLHIsdCxicixsLGMsdSxoLGYsYixfLFMpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG0vMyksZS5wdXNoKG8pKX19fWVsc2UgaS5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX07b2UucHJvdG90eXBlLmlzTWVzaD0hMDtmdW5jdGlvbiBkTShuLHQsZSxpLHIscyxvLGEpe2xldCBsO2lmKHQuc2lkZT09PWhlP2w9aS5pbnRlcnNlY3RUcmlhbmdsZShvLHMsciwhMCxhKTpsPWkuaW50ZXJzZWN0VHJpYW5nbGUocixzLG8sdC5zaWRlIT09SHIsYSksbD09PW51bGwpcmV0dXJuIG51bGw7TmEuY29weShhKSxOYS5hcHBseU1hdHJpeDQobi5tYXRyaXhXb3JsZCk7bGV0IGM9ZS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTmEpO3JldHVybiBjPGUubmVhcnx8Yz5lLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50Ok5hLmNsb25lKCksb2JqZWN0Om59fWZ1bmN0aW9uIEZhKG4sdCxlLGkscixzLG8sYSxsLGMsdSxoKXtKbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksJG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLEtuLmZyb21CdWZmZXJBdHRyaWJ1dGUocixoKTtsZXQgZj1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihzJiZmKXtDYS5zZXQoMCwwLDApLFJhLnNldCgwLDAsMCksTGEuc2V0KDAsMCwwKTtmb3IobGV0IGc9MCx4PXMubGVuZ3RoO2c8eDtnKyspe2xldCB2PWZbZ10sbT1zW2ddO3YhPT0wJiYod3UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGMpLE11LmZyb21CdWZmZXJBdHRyaWJ1dGUobSx1KSxidS5mcm9tQnVmZmVyQXR0cmlidXRlKG0saCksbz8oQ2EuYWRkU2NhbGVkVmVjdG9yKHd1LHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUsdikpOihDYS5hZGRTY2FsZWRWZWN0b3Iod3Uuc3ViKEpuKSx2KSxSYS5hZGRTY2FsZWRWZWN0b3IoTXUuc3ViKCRuKSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUuc3ViKEtuKSx2KSkpfUpuLmFkZChDYSksJG4uYWRkKFJhKSxLbi5hZGQoTGEpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLEpuKSxuLmJvbmVUcmFuc2Zvcm0odSwkbiksbi5ib25lVHJhbnNmb3JtKGgsS24pKTtsZXQgZD1kTShuLHQsZSxpLEpuLCRuLEtuLFN1KTtpZihkKXthJiYoUGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLERhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxJYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCksZC51dj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpLGwmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxkLnV2Mj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpO2xldCBnPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IFQsbWF0ZXJpYWxJbmRleDowfTtyZS5nZXROb3JtYWwoSm4sJG4sS24sZy5ub3JtYWwpLGQuZmFjZT1nfXJldHVybiBkfXZhciBIaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxzPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpzLGRlcHRoU2VnbWVudHM6b307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iocikscz1NYXRoLmZsb29yKHMpLG89TWF0aC5mbG9vcihvKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAsZD0wO2coInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQsbyxzLDApLGcoInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQsbyxzLDEpLGcoIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIsbywyKSxnKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIsbywzKSxnKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixzLDQpLGcoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIscyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShoLDIpKTtmdW5jdGlvbiBnKHgsdixtLHAsYixfLFMsTCxBLEgsdHQpe2xldCBYPV8vQSx5PVMvSCxSPV8vMixEPVMvMixGPUwvMix6PUErMSxOPUgrMSxWPTAsUT0wLGF0PW5ldyBUO2ZvcihsZXQgRz0wO0c8TjtHKyspe2xldCAkPUcqeS1EO2ZvcihsZXQgbHQ9MDtsdDx6O2x0Kyspe2xldCBkdD1sdCpYLVI7YXRbeF09ZHQqcCxhdFt2XT0kKmIsYXRbbV09RixjLnB1c2goYXQueCxhdC55LGF0LnopLGF0W3hdPTAsYXRbdl09MCxhdFttXT1MPjA/MTotMSx1LnB1c2goYXQueCxhdC55LGF0LnopLGgucHVzaChsdC9BKSxoLnB1c2goMS1HL0gpLFYrPTF9fWZvcihsZXQgRz0wO0c8SDtHKyspZm9yKGxldCAkPTA7JDxBOyQrKyl7bGV0IGx0PWYrJCt6KkcsZHQ9ZiskK3oqKEcrMSkseHQ9ZisoJCsxKSt6KihHKzEpLGs9ZisoJCsxKSt6Kkc7bC5wdXNoKGx0LGR0LGspLGwucHVzaChkdCx4dCxrKSxRKz02fWEuYWRkR3JvdXAoZCxRLHR0KSxkKz1RLGYrPVZ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEhpKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gR3Iobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3RbZV1baV09ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/dFtlXVtpXT1yLnNsaWNlKCk6dFtlXVtpXT1yfX1yZXR1cm4gdH1mdW5jdGlvbiBNZShuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9R3IobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBwTT17Y2xvbmU6R3IsbWVyZ2U6TWV9LG1NPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLGdNPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsRm49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPW1NLHRoaXMuZnJhZ21lbnRTaGFkZXI9Z00sdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9R3IodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgbz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO28mJm8uaXNUZXh0dXJlP2UudW5pZm9ybXNbcl09e3R5cGU6InQiLHZhbHVlOm8udG9KU09OKHQpLnV1aWR9Om8mJm8uaXNDb2xvcj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJjIix2YWx1ZTpvLmdldEhleCgpfTpvJiZvLmlzVmVjdG9yMj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP2UudW5pZm9ybXNbcl09e3R5cGU6InYzIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjQ/ZS51bmlmb3Jtc1tyXT17dHlwZToidjQiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzTWF0cml4Mz9lLnVuaWZvcm1zW3JdPXt0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P2UudW5pZm9ybXNbcl09e3R5cGU6Im00Iix2YWx1ZTpvLnRvQXJyYXkoKX06ZS51bmlmb3Jtc1tyXT17dmFsdWU6b319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tyXT09PSEwJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtGbi5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgb289Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyB3dCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O29vLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgU2U9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1WdSoyKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKGl1Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gVnUqMipNYXRoLmF0YW4oTWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy5hc3BlY3Q9dC9lLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9cyx0aGlzLnZpZXcuaGVpZ2h0PW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxzPS0uNSpyLG89dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1vLmZ1bGxXaWR0aCxjPW8uZnVsbEhlaWdodDtzKz1vLm9mZnNldFgqci9sLGUtPW8ub2Zmc2V0WSppL2Mscio9by53aWR0aC9sLGkqPW8uaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0O2EhPT0wJiYocys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUocyxzK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07U2UucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFNyPTkwLEVyPTEsYW89Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLGkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFNlKFNyLEVyLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgVCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBzPW5ldyBTZShTcixFcix0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3IFQoLTEsMCwwKSksdGhpcy5hZGQocyk7bGV0IG89bmV3IFNlKFNyLEVyLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwwLDEpLG8ubG9va0F0KG5ldyBUKDAsMSwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFNlKFNyLEVyLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgVCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgU2UoU3IsRXIsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBUKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFNlKFNyLEVyLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgVCgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixzLG8sYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sV3I9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxlPWUhPT12b2lkIDA/ZTpBbyxzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O1dyLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBvbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSxlPWV8fHt9LHRoaXMudGV4dHVyZT1uZXcgV3Iodm9pZCAwLGUubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ZS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlciE9PXZvaWQgMD9lLm1pbkZpbHRlcjpiZX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVJlLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LHI9bmV3IEhpKDUsNSw1KSxzPW5ldyBGbih7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6R3IoaS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmkudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmkuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxibGVuZGluZzpqbn0pO3MudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IG89bmV3IG9lKHIscyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1MbCYmKGUubWluRmlsdGVyPWJlKSxuZXcgYW8oMSwxMCx0aGlzKS51cGRhdGUodCxvKSxlLm1pbkZpbHRlcj1hLG8uZ2VvbWV0cnkuZGlzcG9zZSgpLG8ubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IHM9dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IG89MDtvPDY7bysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsbyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQocyl9fTtvbC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIEV1PW5ldyBULHhNPW5ldyBULHlNPW5ldyBkZSxqZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBUKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPUV1LnN1YlZlY3RvcnMoaSxlKS5jcm9zcyh4TS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoRXUpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKHI9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IHM9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gczwwfHxzPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIocykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8eU0uZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEV1KS5hcHBseU1hdHJpeDQodCkscz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KHMpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2plLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBUcj1uZXcgc2ksemE9bmV3IFQscXI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgamUsZT1uZXcgamUsaT1uZXcgamUscj1uZXcgamUscz1uZXcgamUsbz1uZXcgamUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLHMsb119c2V0KHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShzKSxhWzVdLmNvcHkobyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLHM9aVsxXSxvPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGg9aVs3XSxmPWlbOF0sZD1pWzldLGc9aVsxMF0seD1pWzExXSx2PWlbMTJdLG09aVsxM10scD1pWzE0XSxiPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGgtbCx4LWYsYi12KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGgrbCx4K2YsYit2KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStzLGgrYyx4K2QsYittKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1zLGgtYyx4LWQsYi1tKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLGgtdSx4LWcsYi1wKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLGgrdSx4K2csYitwKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gZS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksVHIuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBUci5jZW50ZXIuc2V0KDAsMCwwKSxUci5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsVHIuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShUcil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgcz0wO3M8NjtzKyspaWYoZVtzXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoemEueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHphLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx6YS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoemEpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gZzAoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKHMsbyl7ZShzLG8pLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZlIT09bnVsbCYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24ocyl7ZT1zfSxzZXRDb250ZXh0OmZ1bmN0aW9uKHMpe249c319fWZ1bmN0aW9uIHZNKG4sdCl7bGV0IGU9dC5pc1dlYkdMMixpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxkPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsZCksbi5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZz01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2c9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9nPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmc9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9nPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2c9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9nPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9nPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZz01MTIxKSx7YnVmZmVyOmQsdHlwZTpnLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBzKGMsdSxoKXtsZXQgZj11LmFycmF5LGQ9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoaCxjKSxkLmNvdW50PT09LTE/bi5idWZmZXJTdWJEYXRhKGgsMCxmKTooZT9uLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYsZC5vZmZzZXQsZC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGgsZC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KGQub2Zmc2V0LGQub2Zmc2V0K2QuY291bnQpKSxkLmNvdW50PS0xKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9ZnVuY3Rpb24gYShjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9aS5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1pLmdldChjKTtoPT09dm9pZCAwP2kuc2V0KGMscihjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYocyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6byxyZW1vdmU6YSx1cGRhdGU6bH19dmFyIGxvPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpyfTtsZXQgcz10LzIsbz1lLzIsYT1NYXRoLmZsb29yKGkpLGw9TWF0aC5mbG9vcihyKSxjPWErMSx1PWwrMSxoPXQvYSxmPWUvbCxkPVtdLGc9W10seD1bXSx2PVtdO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBwPW0qZi1vO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBfPWIqaC1zO2cucHVzaChfLC1wLDApLHgucHVzaCgwLDAsMSksdi5wdXNoKGIvYSksdi5wdXNoKDEtbS9sKX19Zm9yKGxldCBtPTA7bTxsO20rKylmb3IobGV0IHA9MDtwPGE7cCsrKXtsZXQgYj1wK2MqbSxfPXArYyoobSsxKSxTPXArMStjKihtKzEpLEw9cCsxK2MqbTtkLnB1c2goYixfLEwpLGQucHVzaChfLFMsTCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShnLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoeCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUodiwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgbG8odC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfTT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZzsKI2VuZGlmYCx3TT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsTU09YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxiTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCXVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0OwojZW5kaWZgLFNNPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsRU09YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxUTT0idmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixBTT1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLENNPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxSTT1gI2lmZGVmIFVTRV9CVU1QTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwOwoJdW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7Cgl2ZWMyIGRIZHh5X2Z3ZCgpIHsKCQl2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7CgkJdmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApOwoJCWZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDsKCQlmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDsKCQlmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDsKCQlyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTsKCX0KCXZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZOID0gc3VyZl9ub3JtOwoJCXZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTsKCQl2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7CgkJZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247CgkJdmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApOwoJfQojZW5kaWZgLExNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsUE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxETT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKI2VuZGlmYCxJTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxOTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsRk09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCXZhcnlpbmcgdmVjMyB2Q29sb3I7CiNlbmRpZmAsek09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxVTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsQk09YCNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMKI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODYKI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NgojZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3CiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNQojZGVmaW5lIEVQU0lMT04gMWUtNgojaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKQpmbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9CmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfQpmbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9CmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfQpmbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfQpoaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkgewoJY29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzOwoJaGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7CglyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTsKfQojaWZkZWYgSElHSF9QUkVDSVNJT04KCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9CiNlbHNlCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7CgkJZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTsKCQlyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7Cgl9CiNlbmRpZgpzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7Cgl2ZWMzIGNvbG9yOwoJdmVjMyBkaXJlY3Rpb247Cglib29sIHZpc2libGU7Cn07CnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7Cgl2ZWMzIGRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGRpcmVjdFNwZWN1bGFyOwoJdmVjMyBpbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGluZGlyZWN0U3BlY3VsYXI7Cn07CnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHsKCXZlYzMgcG9zaXRpb247Cgl2ZWMzIG5vcm1hbDsKCXZlYzMgdmlld0RpcjsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXZlYzMgY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKfTsKdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwp9CnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7Cn0KbWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7CgltYXQzIHRtcDsKCXRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApOwoJdG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7Cgl0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTsKCXJldHVybiB0bXA7Cn0KZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsKCXZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTsKCXJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApOwp9CmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkgewoJcmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wOwp9CnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7CglmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTsKCWZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTsKCXJldHVybiB2ZWMyKCB1LCB2ICk7Cn1gLE9NPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLGtNPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxITT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7CiNlbmRpZmAsVk09YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxXTT1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7CiNlbmRpZmAscU09ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsWE09YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLFlNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZlYzMgY2FtZXJhVG9GcmFnOwoJCWlmICggaXNPcnRob2dyYXBoaWMgKSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZWxzZQoJCXZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0OwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApOwoJI2Vsc2UKCQl2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYICkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKQoJCW91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTsKCSNlbmRpZgojZW5kaWZgLFpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLEpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLCRNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQkKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgojZW5kaWZgLEtNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUU09YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxqTT1gI2lmZGVmIFVTRV9GT0cKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwojZW5kaWZgLHRiPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxlYj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxuYj1gI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7CiNlbmRpZgp2ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7CglmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApOwoJdmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTsKCSNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCQlyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7CgkjZWxzZQoJCXJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7CgkjZW5kaWYKfWAsaWI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxyYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNiPWB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTsKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTsKR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7CmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwpiYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDsKYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwp2TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApOwp2SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7Cgl2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwpmbG9hdCBkb3ROTDsKdmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJdkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwojZW5kaWYKI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJdkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWZgLG9iPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGFiPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLGxiPWBUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7YCxjYj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCx1Yj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGhiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyU2hpbmluZXNzOwoJZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKfTsKdm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9CbGlublBob25nCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZwojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxmYj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsZGI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxwYj1gCkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uOwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCWdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVBvaW50TGlnaHQgcG9pbnRMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKQoJCXBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVNwb3RMaWdodCBzcG90TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdOwoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTICkKCQlzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCURpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKQoJCWRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhICkKCVJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkgewoJCXJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdOwoJCVJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJdmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CgkjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwICkKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCQlpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJfQoJCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmYCxtYj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLGdiPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAseGI9YCNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUICkKCWdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTsKI2VuZGlmYCx5Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCx2Yj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX2I9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7CgkJdklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7CgkjZWxzZQoJCWlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkgewoJCQlnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7CgkJCWdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udzsKCQl9CgkjZW5kaWYKI2VuZGlmYCx3Yj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCxNYj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxiYj1gI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKQoJdmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nOwojZW5kaWZgLFNiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsRWI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxUYj1gI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDsKI2VuZGlmYCxBYj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxDYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUmI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDEgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZWxzZQoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZW5kaWYKCQl9CgkjZWxzZQoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdOwoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLExiPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsUGI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsRGI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsSWI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTmI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLEZiPWAjaWZkZWYgVVNFX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlOwojZW5kaWYKI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJdW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsKI2VuZGlmCiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApCgl2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTsKCQl2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApOwoJCXZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7CgkJdmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTsKCQl2ZWMzIE4gPSBzdXJmX25vcm07CgkJdmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTsKCQl2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApOwoJCXZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7CgkJdmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTsKCQlmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApOwoJCWZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApOwoJCXJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApOwoJfQojZW5kaWZgLHpiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxVYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxCYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CiNlbmRpZmAsT2I9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCxrYj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxIYj1gI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEEKCWdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7CiNlbmRpZmAsVmI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxHYj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFdiPWAjaWZkZWYgRElUSEVSSU5HCgl2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHsKCQlmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7CgkJdmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTsKCQlkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApOwoJCXJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7Cgl9CiNlbmRpZmAscWI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxYYj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxZYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCWZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7CgkJcmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7Cgl9Cgl2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHsKCQlyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7Cgl9CglmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXsKCQlmbG9hdCBvY2NsdXNpb24gPSAxLjA7CgkJdmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTsKCQlmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApOwoJCWlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7CgkJCWZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDsKCQkJZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTsKCQkJZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTsJCQlzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTsJCQlvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTsKCQl9CgkJcmV0dXJuIG9jY2x1c2lvbjsKCX0KCWZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7CgkJZmxvYXQgc2hhZG93ID0gMS4wOwoJCXNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53OwoJCXNoYWRvd0Nvb3JkLnogKz0gc2hhZG93QmlhczsKCQlidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7CgkJYm9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApOwoJCWJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTsKCQlib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApOwoJCWlmICggZnJ1c3R1bVRlc3QgKSB7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDIgPSBkeDAgLyAyLjA7CgkJCWZsb2F0IGR5MiA9IGR5MCAvIDIuMDsKCQkJZmxvYXQgZHgzID0gZHgxIC8gMi4wOwoJCQlmbG9hdCBkeTMgPSBkeTEgLyAyLjA7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApCgkJCSkgKiAoIDEuMCAvIDE3LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeCA9IHRleGVsU2l6ZS54OwoJCQlmbG9hdCBkeSA9IHRleGVsU2l6ZS55OwoJCQl2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7CgkJCXZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTsKCQkJdXYgLT0gZiAqIHRleGVsU2l6ZTsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIGYueSApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbHNlCgkJCXNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZW5kaWYKCQl9CgkJcmV0dXJuIHNoYWRvdzsKCX0KCXZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHsKCQl2ZWMzIGFic1YgPSBhYnMoIHYgKTsKCQlmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTsKCQlhYnNWICo9IHNjYWxlVG9DdWJlOwoJCXYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTsKCQl2ZWMyIHBsYW5hciA9IHYueHk7CgkJZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTsKCQlmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7CgkJaWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkgewoJCQlpZiAoIHYueiA+IDAuMCApCgkJCQlwbGFuYXIueCA9IDQuMCAtIHYueDsKCQl9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApOwoJCQlwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7CgkJfSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTsKCQkJcGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDsKCQkJcGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDsKCQl9CgkJcmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApOwoJfQoJZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7CgkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTsKCQl2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejsKCQlmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApOwkJZHAgKz0gc2hhZG93QmlhczsKCQl2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApOwoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTsKCQkJcmV0dXJuICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsWmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsSmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCwkYj1gZmxvYXQgZ2V0U2hhZG93TWFzaygpIHsKCWZsb2F0IHNoYWRvdyA9IDEuMDsKCSNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNlbmRpZgoJcmV0dXJuIHNoYWRvdzsKfWAsS2I9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLFFiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxqYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCXZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApOwoJc2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7Cglza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTsKCXNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56OwoJc2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7Cgl0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6OwojZW5kaWZgLHQxPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLGUxPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLG4xPWAjaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDsKI2VuZGlmYCxpMT1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxyMT1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHMxPWAjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7CglmbG9hdCB0cmFuc21pc3Npb25GYWN0b3IgPSB0cmFuc21pc3Npb247CglmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7CgkjZW5kaWYKCXZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247Cgl2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7Cgl2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzQgdHJhbnNtaXNzaW9uID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbigKCQluLCB2LCByb3VnaG5lc3NGYWN0b3IsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsCgkJcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsCgkJYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApOwoJdHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7CiNlbmRpZmAsbzE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsYTE9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxsMT1gI2lmZGVmIFVTRV9VVgoJI2lmZGVmIFVWU19WRVJURVhfT05MWQoJCXZlYzIgdlV2OwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJI2VuZGlmCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZmAsYzE9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsdTE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsaDE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJYXR0cmlidXRlIHZlYzIgdXYyOwoJdmFyeWluZyB2ZWMyIHZVdjI7Cgl1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtOwojZW5kaWZgLGYxPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsZDE9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAscDE9YHZhcnlpbmcgdmVjMiB2VXY7CnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKdm9pZCBtYWluKCkgewoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7Cn1gLG0xPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGcxPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx4MT1gI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7Cgl2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCWdsX0ZyYWdDb2xvciA9IGVudkNvbG9yOwoJZ2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHkxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLHYxPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfMT1gI2RlZmluZSBESVNUQU5DRQp2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7Cn1gLHcxPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCxNMT1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLGIxPWB1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCXZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsUzE9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEUxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxUMT1gI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HICkKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQzE9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxSMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTsKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsTDE9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsUDE9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxEMT1gI2RlZmluZSBOT1JNQUwKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWYKfWAsSTE9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLE4xPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEYxPWAjZGVmaW5lIFBIT05HCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gdmVjMyBzcGVjdWxhcjsKdW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsejE9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLFUxPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQjE9YCNkZWZpbmUgVE9PTgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsTzE9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxrMT1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEgxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFYxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEcxPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVzE9YHVuaWZvcm0gZmxvYXQgcm90YXRpb247CnVuaWZvcm0gdmVjMiBjZW50ZXI7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7Cgl2ZWMyIHNjYWxlOwoJc2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7CglzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTsKCSNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejsKCSNlbmRpZgoJdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTsKCXZlYzIgcm90YXRlZFBvc2l0aW9uOwoJcm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJbXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHExPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsUHQ9e2FscGhhbWFwX2ZyYWdtZW50Ol9NLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6d00sYWxwaGF0ZXN0X2ZyYWdtZW50Ok1NLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OmJNLGFvbWFwX2ZyYWdtZW50OlNNLGFvbWFwX3BhcnNfZnJhZ21lbnQ6RU0sYmVnaW5fdmVydGV4OlRNLGJlZ2lubm9ybWFsX3ZlcnRleDpBTSxic2RmczpDTSxidW1wbWFwX3BhcnNfZnJhZ21lbnQ6Uk0sY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkxNLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OlBNLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpETSxjbGlwcGluZ19wbGFuZXNfdmVydGV4OklNLGNvbG9yX2ZyYWdtZW50Ok5NLGNvbG9yX3BhcnNfZnJhZ21lbnQ6Rk0sY29sb3JfcGFyc192ZXJ0ZXg6ek0sY29sb3JfdmVydGV4OlVNLGNvbW1vbjpCTSxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T00sZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6a00sZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkhNLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6Vk0sZW1pc3NpdmVtYXBfZnJhZ21lbnQ6R00sZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpXTSxlbmNvZGluZ3NfZnJhZ21lbnQ6cU0sZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6WE0sZW52bWFwX2ZyYWdtZW50OllNLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpaTSxlbnZtYXBfcGFyc19mcmFnbWVudDpKTSxlbnZtYXBfcGFyc192ZXJ0ZXg6JE0sZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6YWIsZW52bWFwX3ZlcnRleDpLTSxmb2dfdmVydGV4OlFNLGZvZ19wYXJzX3ZlcnRleDpqTSxmb2dfZnJhZ21lbnQ6dGIsZm9nX3BhcnNfZnJhZ21lbnQ6ZWIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpuYixsaWdodG1hcF9mcmFnbWVudDppYixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OnJiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzYixsaWdodHNfcGFyc19iZWdpbjpvYixsaWdodHNfdG9vbl9mcmFnbWVudDpsYixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmNiLGxpZ2h0c19waG9uZ19mcmFnbWVudDp1YixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpoYixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZmIsbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6ZGIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOnBiLGxpZ2h0c19mcmFnbWVudF9tYXBzOm1iLGxpZ2h0c19mcmFnbWVudF9lbmQ6Z2IsbG9nZGVwdGhidWZfZnJhZ21lbnQ6eGIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp5Yixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDp2Yixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X2IsbWFwX2ZyYWdtZW50OndiLG1hcF9wYXJzX2ZyYWdtZW50Ok1iLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDpiYixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpTYixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6RWIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6VGIsbW9ycGhub3JtYWxfdmVydGV4OkFiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OkNiLG1vcnBodGFyZ2V0X3ZlcnRleDpSYixub3JtYWxfZnJhZ21lbnRfYmVnaW46TGIsbm9ybWFsX2ZyYWdtZW50X21hcHM6UGIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6RGIsbm9ybWFsX3BhcnNfdmVydGV4OkliLG5vcm1hbF92ZXJ0ZXg6TmIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6RmIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjp6YixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6VWIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6QmIsb3V0cHV0X2ZyYWdtZW50Ok9iLHBhY2tpbmc6a2IscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpIYixwcm9qZWN0X3ZlcnRleDpWYixkaXRoZXJpbmdfZnJhZ21lbnQ6R2IsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6V2Iscm91Z2huZXNzbWFwX2ZyYWdtZW50OnFiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OlhiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OlliLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpaYixzaGFkb3dtYXBfdmVydGV4OkpiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDokYixza2luYmFzZV92ZXJ0ZXg6S2Isc2tpbm5pbmdfcGFyc192ZXJ0ZXg6UWIsc2tpbm5pbmdfdmVydGV4OmpiLHNraW5ub3JtYWxfdmVydGV4OnQxLHNwZWN1bGFybWFwX2ZyYWdtZW50OmUxLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6bjEsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6aTEsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDpyMSx0cmFuc21pc3Npb25fZnJhZ21lbnQ6czEsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bzEsdXZfcGFyc19mcmFnbWVudDphMSx1dl9wYXJzX3ZlcnRleDpsMSx1dl92ZXJ0ZXg6YzEsdXYyX3BhcnNfZnJhZ21lbnQ6dTEsdXYyX3BhcnNfdmVydGV4OmgxLHV2Ml92ZXJ0ZXg6ZjEsd29ybGRwb3NfdmVydGV4OmQxLGJhY2tncm91bmRfdmVydDpwMSxiYWNrZ3JvdW5kX2ZyYWc6bTEsY3ViZV92ZXJ0OmcxLGN1YmVfZnJhZzp4MSxkZXB0aF92ZXJ0OnkxLGRlcHRoX2ZyYWc6djEsZGlzdGFuY2VSR0JBX3ZlcnQ6XzEsZGlzdGFuY2VSR0JBX2ZyYWc6dzEsZXF1aXJlY3RfdmVydDpNMSxlcXVpcmVjdF9mcmFnOmIxLGxpbmVkYXNoZWRfdmVydDpTMSxsaW5lZGFzaGVkX2ZyYWc6RTEsbWVzaGJhc2ljX3ZlcnQ6VDEsbWVzaGJhc2ljX2ZyYWc6QTEsbWVzaGxhbWJlcnRfdmVydDpDMSxtZXNobGFtYmVydF9mcmFnOlIxLG1lc2htYXRjYXBfdmVydDpMMSxtZXNobWF0Y2FwX2ZyYWc6UDEsbWVzaG5vcm1hbF92ZXJ0OkQxLG1lc2hub3JtYWxfZnJhZzpJMSxtZXNocGhvbmdfdmVydDpOMSxtZXNocGhvbmdfZnJhZzpGMSxtZXNocGh5c2ljYWxfdmVydDp6MSxtZXNocGh5c2ljYWxfZnJhZzpVMSxtZXNodG9vbl92ZXJ0OkIxLG1lc2h0b29uX2ZyYWc6TzEscG9pbnRzX3ZlcnQ6azEscG9pbnRzX2ZyYWc6SDEsc2hhZG93X3ZlcnQ6VjEsc2hhZG93X2ZyYWc6RzEsc3ByaXRlX3ZlcnQ6VzEsc3ByaXRlX2ZyYWc6cTF9LG90PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBLKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX19fSxmbj17YmFzaWM6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmZvZ10pLHZlcnRleFNoYWRlcjpQdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IGZ0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3Qucm91Z2huZXNzbWFwLG90Lm1ldGFsbmVzc21hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmdyYWRpZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOk1lKFtvdC5wb2ludHMsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlB0LmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpQdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOk1lKFtvdC5zcHJpdGUsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOk1lKFtvdC5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpQdC5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgVH0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6TWUoW290LmxpZ2h0cyxvdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5zaGFkb3dfZnJhZ319O2ZuLnBoeXNpY2FsPXt1bmlmb3JtczpNZShbZm4uc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyBLfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBmdCgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gWDEobix0LGUsaSxyLHMpe2xldCBvPW5ldyBmdCgwKSxhPXI9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIGQoeCx2KXtsZXQgbT0hMSxwPXYuaXNTY2VuZT09PSEwP3YuYmFja2dyb3VuZDpudWxsO3AmJnAuaXNUZXh0dXJlJiYocD10LmdldChwKSk7bGV0IGI9bi54cixfPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7XyYmXy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJihwPW51bGwpLHA9PT1udWxsP2cobyxhKTpwJiZwLmlzQ29sb3ImJihnKHAsMSksbT0hMCksKG4uYXV0b0NsZWFyfHxtKSYmbi5jbGVhcihuLmF1dG9DbGVhckNvbG9yLG4uYXV0b0NsZWFyRGVwdGgsbi5hdXRvQ2xlYXJTdGVuY2lsKSxwJiYocC5pc0N1YmVUZXh0dXJlfHxwLm1hcHBpbmc9PT1SbCk/KGM9PT12b2lkIDAmJihjPW5ldyBvZShuZXcgSGkoMSwxLDEpLG5ldyBGbih7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oUyxMLEEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKEEubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1wLGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1wLmlzQ3ViZVRleHR1cmUmJnAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6cCYmcC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgb2UobmV3IGxvKDIsMiksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOkdyKGZuLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpmbi5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpmbi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6ZW8sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1wLHAubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZwLnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShwLm1hdHJpeCksKHUhPT1wfHxoIT09cC52ZXJzaW9ufHxmIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9cCxoPXAudmVyc2lvbixmPW4udG9uZU1hcHBpbmcpLHgudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGcoeCx2KXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoeC5yLHguZyx4LmIsdixzKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBvfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHgsdj0xKXtvLnNldCh4KSxhPXYsZyhvLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oeCl7YT14LGcobyxhKX0scmVuZGVyOmR9fWZ1bmN0aW9uIFkxKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxzPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxvPWkuaXNXZWJHTDJ8fHMhPT1udWxsLGE9e30sbD14KG51bGwpLGM9bDtmdW5jdGlvbiB1KEQsRix6LE4sVil7bGV0IFE9ITE7aWYobyl7bGV0IGF0PWcoTix6LEYpO2MhPT1hdCYmKGM9YXQsZihjLm9iamVjdCkpLFE9dihOLFYpLFEmJm0oTixWKX1lbHNle2xldCBhdD1GLndpcmVmcmFtZT09PSEwOyhjLmdlb21ldHJ5IT09Ti5pZHx8Yy5wcm9ncmFtIT09ei5pZHx8Yy53aXJlZnJhbWUhPT1hdCkmJihjLmdlb21ldHJ5PU4uaWQsYy5wcm9ncmFtPXouaWQsYy53aXJlZnJhbWU9YXQsUT0hMCl9RC5pc0luc3RhbmNlZE1lc2g9PT0hMCYmKFE9ITApLFYhPT1udWxsJiZlLnVwZGF0ZShWLDM0OTYzKSxRJiYoQShELEYseixOKSxWIT09bnVsbCYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KFYpLmJ1ZmZlcikpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6cy5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfWZ1bmN0aW9uIGYoRCl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkoRCk6cy5iaW5kVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KEQpOnMuZGVsZXRlVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZyhELEYseil7bGV0IE49ei53aXJlZnJhbWU9PT0hMCxWPWFbRC5pZF07Vj09PXZvaWQgMCYmKFY9e30sYVtELmlkXT1WKTtsZXQgUT1WW0YuaWRdO1E9PT12b2lkIDAmJihRPXt9LFZbRi5pZF09USk7bGV0IGF0PVFbTl07cmV0dXJuIGF0PT09dm9pZCAwJiYoYXQ9eChoKCkpLFFbTl09YXQpLGF0fWZ1bmN0aW9uIHgoRCl7bGV0IEY9W10sej1bXSxOPVtdO2ZvcihsZXQgVj0wO1Y8cjtWKyspRltWXT0wLHpbVl09MCxOW1ZdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkYsZW5hYmxlZEF0dHJpYnV0ZXM6eixhdHRyaWJ1dGVEaXZpc29yczpOLG9iamVjdDpELGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gdihELEYpe2xldCB6PWMuYXR0cmlidXRlcyxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD16W1FdLEc9TltRXTtpZihhdD09PXZvaWQgMHx8YXQuYXR0cmlidXRlIT09R3x8YXQuZGF0YSE9PUcuZGF0YSlyZXR1cm4hMDtWKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PVZ8fGMuaW5kZXghPT1GfWZ1bmN0aW9uIG0oRCxGKXtsZXQgej17fSxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD1OW1FdLEc9e307Ry5hdHRyaWJ1dGU9YXQsYXQuZGF0YSYmKEcuZGF0YT1hdC5kYXRhKSx6W1FdPUcsVisrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1WLGMuaW5kZXg9Rn1mdW5jdGlvbiBwKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKylEW0ZdPTB9ZnVuY3Rpb24gYihEKXtfKEQsMCl9ZnVuY3Rpb24gXyhELEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxOPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVj1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbRF09MSxOW0RdPT09MCYmKG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoRCksTltEXT0xKSxWW0RdIT09RiYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKEQsRiksVltEXT1GKX1mdW5jdGlvbiBTKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxOPUYubGVuZ3RoO3o8Tjt6KyspRlt6XSE9PURbel0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIEwoRCxGLHosTixWLFEpe2kuaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihELEYseixWLFEpOm4udmVydGV4QXR0cmliUG9pbnRlcihELEYseixOLFYsUSl9ZnVuY3Rpb24gQShELEYseixOKXtpZihpLmlzV2ViR0wyPT09ITEmJihELmlzSW5zdGFuY2VkTWVzaHx8Ti5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3AoKTtsZXQgVj1OLmF0dHJpYnV0ZXMsUT16LmdldEF0dHJpYnV0ZXMoKSxhdD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBHIGluIFEpe2xldCAkPVFbR107aWYoJC5sb2NhdGlvbj49MCl7bGV0IGx0PVZbR107aWYobHQ9PT12b2lkIDAmJihHPT09Imluc3RhbmNlTWF0cml4IiYmRC5pbnN0YW5jZU1hdHJpeCYmKGx0PUQuaW5zdGFuY2VNYXRyaXgpLEc9PT0iaW5zdGFuY2VDb2xvciImJkQuaW5zdGFuY2VDb2xvciYmKGx0PUQuaW5zdGFuY2VDb2xvcikpLGx0IT09dm9pZCAwKXtsZXQgZHQ9bHQubm9ybWFsaXplZCx4dD1sdC5pdGVtU2l6ZSxrPWUuZ2V0KGx0KTtpZihrPT09dm9pZCAwKWNvbnRpbnVlO2xldCBGdD1rLmJ1ZmZlcixtdD1rLnR5cGUsU3Q9ay5ieXRlc1BlckVsZW1lbnQ7aWYobHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IEI9bHQuZGF0YSxzdD1CLnN0cmlkZSxudD1sdC5vZmZzZXQ7aWYoQiYmQi5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IEM9MDtDPCQubG9jYXRpb25TaXplO0MrKylfKCQubG9jYXRpb24rQyxCLm1lc2hQZXJBdHRyaWJ1dGUpO0QuaXNJbnN0YW5jZWRNZXNoIT09ITAmJk4uX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihOLl9tYXhJbnN0YW5jZUNvdW50PUIubWVzaFBlckF0dHJpYnV0ZSpCLmNvdW50KX1lbHNlIGZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKWIoJC5sb2NhdGlvbitDKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKUwoJC5sb2NhdGlvbitDLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHN0KlN0LChudCt4dC8kLmxvY2F0aW9uU2l6ZSpDKSpTdCl9ZWxzZXtpZihsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBCPTA7QjwkLmxvY2F0aW9uU2l6ZTtCKyspXygkLmxvY2F0aW9uK0IsbHQubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9bHQubWVzaFBlckF0dHJpYnV0ZSpsdC5jb3VudCl9ZWxzZSBmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKyliKCQubG9jYXRpb24rQik7bi5iaW5kQnVmZmVyKDM0OTYyLEZ0KTtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylMKCQubG9jYXRpb24rQix4dC8kLmxvY2F0aW9uU2l6ZSxtdCxkdCx4dCpTdCx4dC8kLmxvY2F0aW9uU2l6ZSpCKlN0KX19ZWxzZSBpZihhdCE9PXZvaWQgMCl7bGV0IGR0PWF0W0ddO2lmKGR0IT09dm9pZCAwKXN3aXRjaChkdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDM6bi52ZXJ0ZXhBdHRyaWIzZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7Y2FzZSA0Om4udmVydGV4QXR0cmliNGZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoJC5sb2NhdGlvbixkdCl9fX19UygpfWZ1bmN0aW9uIEgoKXt5KCk7Zm9yKGxldCBEIGluIGEpe2xldCBGPWFbRF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRF19fWZ1bmN0aW9uIHR0KEQpe2lmKGFbRC5pZF09PT12b2lkIDApcmV0dXJuO2xldCBGPWFbRC5pZF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRC5pZF19ZnVuY3Rpb24gWChEKXtmb3IobGV0IEYgaW4gYSl7bGV0IHo9YVtGXTtpZih6W0QuaWRdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBOPXpbRC5pZF07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIHpbRC5pZF19fWZ1bmN0aW9uIHkoKXtSKCksYyE9PWwmJihjPWwsZihjLm9iamVjdCkpfWZ1bmN0aW9uIFIoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOnUscmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTpSLGRpc3Bvc2U6SCxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTp0dCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOlgsaW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpTfX1mdW5jdGlvbiBaMShuLHQsZSxpKXtsZXQgcj1pLmlzV2ViR0wyLHM7ZnVuY3Rpb24gbyhjKXtzPWN9ZnVuY3Rpb24gYShjLHUpe24uZHJhd0FycmF5cyhzLGMsdSksZS51cGRhdGUodSxzLDEpfWZ1bmN0aW9uIGwoYyx1LGgpe2lmKGg9PT0wKXJldHVybjtsZXQgZixkO2lmKHIpZj1uLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYoZj10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsZj09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1mW2RdKHMsYyx1LGgpLGUudXBkYXRlKHUscyxoKX10aGlzLnNldE1vZGU9byx0aGlzLnJlbmRlcj1hLHRoaXMucmVuZGVySW5zdGFuY2VzPWx9ZnVuY3Rpb24gSjEobix0LGUpe2xldCBpO2Z1bmN0aW9uIHIoKXtpZihpIT09dm9pZCAwKXJldHVybiBpO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgQT10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihBLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9ZnVuY3Rpb24gcyhBKXtpZihBPT09ImhpZ2hwIil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtBPSJtZWRpdW1wIn1yZXR1cm4gQT09PSJtZWRpdW1wIiYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgbz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT1lLnByZWNpc2lvbiE9PXZvaWQgMD9lLnByZWNpc2lvbjoiaGlnaHAiLGw9cyhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9b3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1uLmdldFBhcmFtZXRlcigzNDkzMCksZj1uLmdldFBhcmFtZXRlcigzNTY2MCksZD1uLmdldFBhcmFtZXRlcigzMzc5KSxnPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSx4PW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSx2PW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtPW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSxwPW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxfPW98fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLFM9YiYmXyxMPW8/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOm8sZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OnIsZ2V0TWF4UHJlY2lzaW9uOnMscHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpkLG1heEN1YmVtYXBTaXplOmcsbWF4QXR0cmlidXRlczp4LG1heFZlcnRleFVuaWZvcm1zOnYsbWF4VmFyeWluZ3M6bSxtYXhGcmFnbWVudFVuaWZvcm1zOnAsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6XyxmbG9hdFZlcnRleFRleHR1cmVzOlMsbWF4U2FtcGxlczpMfX1mdW5jdGlvbiAkMShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxzPSExLG89bmV3IGplLGE9bmV3IGRlLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWgubGVuZ3RoIT09MHx8Znx8aSE9PTB8fHI7cmV0dXJuIHI9ZixlPXUoaCxkLDApLGk9aC5sZW5ndGgsZ30sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtzPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe3M9ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixkKXtsZXQgZz1oLmNsaXBwaW5nUGxhbmVzLHg9aC5jbGlwSW50ZXJzZWN0aW9uLHY9aC5jbGlwU2hhZG93cyxtPW4uZ2V0KGgpO2lmKCFyfHxnPT09bnVsbHx8Zy5sZW5ndGg9PT0wfHxzJiYhdilzP3UobnVsbCk6YygpO2Vsc2V7bGV0IHA9cz8wOmksYj1wKjQsXz1tLmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1fLF89dShnLGYsYixkKTtmb3IobGV0IFM9MDtTIT09YjsrK1MpX1tTXT1lW1NdO20uY2xpcHBpbmdTdGF0ZT1fLHRoaXMubnVtSW50ZXJzZWN0aW9uPXg/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9cH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLGQsZyl7bGV0IHg9aCE9PW51bGw/aC5sZW5ndGg6MCx2PW51bGw7aWYoeCE9PTApe2lmKHY9bC52YWx1ZSxnIT09ITB8fHY9PT1udWxsKXtsZXQgbT1kK3gqNCxwPWYubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHApLCh2PT09bnVsbHx8di5sZW5ndGg8bSkmJih2PW5ldyBGbG9hdDMyQXJyYXkobSkpO2ZvcihsZXQgYj0wLF89ZDtiIT09eDsrK2IsXys9NClvLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHAsYSksby5ub3JtYWwudG9BcnJheSh2LF8pLHZbXyszXT1vLmNvbnN0YW50fWwudmFsdWU9dixsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz14LHQubnVtSW50ZXJzZWN0aW9uPTAsdn19ZnVuY3Rpb24gSzEobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShvLGEpe3JldHVybiBhPT09VXU/by5tYXBwaW5nPUFvOmE9PT1CdSYmKG8ubWFwcGluZz1Dbyksb31mdW5jdGlvbiBpKG8pe2lmKG8mJm8uaXNUZXh0dXJlJiZvLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExKXtsZXQgYT1vLm1hcHBpbmc7aWYoYT09PVV1fHxhPT09QnUpaWYodC5oYXMobykpe2xldCBsPXQuZ2V0KG8pLnRleHR1cmU7cmV0dXJuIGUobCxvLm1hcHBpbmcpfWVsc2V7bGV0IGw9by5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgb2wobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixvKSx0LnNldChvLGMpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUsby5tYXBwaW5nKX1lbHNlIHJldHVybiBudWxsfX1yZXR1cm4gb31mdW5jdGlvbiByKG8pe2xldCBhPW8udGFyZ2V0O2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscik7bGV0IGw9dC5nZXQoYSk7bCE9PXZvaWQgMCYmKHQuZGVsZXRlKGEpLGwuZGlzcG9zZSgpKX1mdW5jdGlvbiBzKCl7dD1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpzfX12YXIgVmk9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxzPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1zLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIscz1pLXQsbz1pK3QsYT1yK2UsbD1yLWU7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtzKz1jKnRoaXMudmlldy5vZmZzZXRYLG89cytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocyxvLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsdGhpcy52aWV3IT09bnVsbCYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07VmkucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBYcj1jbGFzcyBleHRlbmRzIEZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07WHIucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIGtyPTQsbmk9OCxobj1NYXRoLnBvdygyLG5pKSx4MD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0seTA9bmkta3IrMSt4MC5sZW5ndGgsQXI9MjAsVHU9bmV3IFZpLHtfbG9kUGxhbmVzOkdzLF9zaXplTG9kczptZyxfc2lnbWFzOlVhfT1RMSgpLGdnPW5ldyBmdCxBdT1udWxsLHppPSgxK01hdGguc3FydCg1KSkvMixDcj0xL3ppLHhnPVtuZXcgVCgxLDEsMSksbmV3IFQoLTEsMSwxKSxuZXcgVCgxLDEsLTEpLG5ldyBUKC0xLDEsLTEpLG5ldyBUKDAsemksQ3IpLG5ldyBUKDAsemksLUNyKSxuZXcgVChDciwwLHppKSxuZXcgVCgtQ3IsMCx6aSksbmV3IFQoemksQ3IsMCksbmV3IFQoLXppLENyLDApXSxhbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWoxKEFyKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IHM9dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIscyksZT4wJiZ0aGlzLl9ibHVyKHMsMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0ocyksdGhpcy5fY2xlYW51cChzKSxzfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1fZygpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe3RoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8R3MubGVuZ3RoO3QrKylHc1t0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KEF1KSx0LnNjaXNzb3JUZXN0PSExLEJhKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe0F1PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOmJlLG1pbkZpbHRlcjpiZSxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVcixmb3JtYXQ6UmUsZW5jb2Rpbmc6cmksZGVwdGhCdWZmZXI6ITF9LGk9eWcoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWcoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgb2UoR3NbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFR1KX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgU2UoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsaD11LmF1dG9DbGVhcixmPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKGdnKSx1LnRvbmVNYXBwaW5nPXRpLHUuYXV0b0NsZWFyPSExO2xldCBkPW5ldyBraSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpoZSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGc9bmV3IG9lKG5ldyBIaSxkKSx4PSExLHY9dC5iYWNrZ3JvdW5kO3Y/di5pc0NvbG9yJiYoZC5jb2xvci5jb3B5KHYpLHQuYmFja2dyb3VuZD1udWxsLHg9ITApOihkLmNvbG9yLmNvcHkoZ2cpLHg9ITApO2ZvcihsZXQgbT0wO208NjttKyspe2xldCBwPW0lMztwPT09MD8oYS51cC5zZXQoMCxsW21dLDApLGEubG9va0F0KGNbbV0sMCwwKSk6cD09PTE/KGEudXAuc2V0KDAsMCxsW21dKSxhLmxvb2tBdCgwLGNbbV0sMCkpOihhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoMCwwLGNbbV0pKSxCYShyLHAqaG4sbT4yP2huOjAsaG4saG4pLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLHgmJnUucmVuZGVyKGcsYSksdS5yZW5kZXIodCxhKX1nLmdlb21ldHJ5LmRpc3Bvc2UoKSxnLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9dn1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1Bb3x8dC5tYXBwaW5nPT09Q287cj8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEpOnRoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCkpO2xldCBzPXI/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixvPW5ldyBvZShHc1swXSxzKSxhPXMudW5pZm9ybXM7YS5lbnZNYXAudmFsdWU9dCxyfHxhLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLEJhKGUsMCwwLDMqaG4sMipobiksaS5zZXRSZW5kZXJUYXJnZXQoZSksaS5yZW5kZXIobyxUdSl9X2FwcGx5UE1SRU0odCl7bGV0IGU9dGhpcy5fcmVuZGVyZXIsaT1lLmF1dG9DbGVhcjtlLmF1dG9DbGVhcj0hMTtmb3IobGV0IHI9MTtyPHkwO3IrKyl7bGV0IHM9TWF0aC5zcXJ0KFVhW3JdKlVhW3JdLVVhW3ItMV0qVWFbci0xXSksbz14Z1soci0xKSV4Zy5sZW5ndGhdO3RoaXMuX2JsdXIodCxyLTEscixzLG8pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixzKXtsZXQgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxpLHIsImxhdGl0dWRpbmFsIixzKSx0aGlzLl9oYWxmQmx1cihvLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIscyl9X2hhbGZCbHVyKHQsZSxpLHIscyxvLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO28hPT0ibGF0aXR1ZGluYWwiJiZvIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IG9lKEdzW3JdLGMpLGY9Yy51bmlmb3JtcyxkPW1nW2ldLTEsZz1pc0Zpbml0ZShzKT9NYXRoLlBJLygyKmQpOjIqTWF0aC5QSS8oMipBci0xKSx4PXMvZyx2PWlzRmluaXRlKHMpPzErTWF0aC5mbG9vcih1KngpOkFyO3Y+QXImJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3N9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7dn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAke0FyfWApO2xldCBtPVtdLHA9MDtmb3IobGV0IEw9MDtMPEFyOysrTCl7bGV0IEE9TC94LEg9TWF0aC5leHAoLUEqQS8yKTttLnB1c2goSCksTD09PTA/cCs9SDpMPHYmJihwKz0yKkgpfWZvcihsZXQgTD0wO0w8bS5sZW5ndGg7TCsrKW1bTF09bVtMXS9wO2YuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxmLnNhbXBsZXMudmFsdWU9dixmLndlaWdodHMudmFsdWU9bSxmLmxhdGl0dWRpbmFsLnZhbHVlPW89PT0ibGF0aXR1ZGluYWwiLGEmJihmLnBvbGVBeGlzLnZhbHVlPWEpLGYuZFRoZXRhLnZhbHVlPWcsZi5taXBJbnQudmFsdWU9bmktaTtsZXQgYj1tZ1tyXSxfPTMqTWF0aC5tYXgoMCxobi0yKmIpLFM9KHI9PT0wPzA6MipobikrMipiKihyPm5pLWtyP3Itbmkra3I6MCk7QmEoZSxfLFMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQoZSksbC5yZW5kZXIoaCxUdSl9fTtmdW5jdGlvbiBRMSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPW5pO2ZvcihsZXQgcj0wO3I8eTA7cisrKXtsZXQgcz1NYXRoLnBvdygyLGkpO3QucHVzaChzKTtsZXQgbz0xL3M7cj5uaS1rcj9vPXgwW3Itbmkra3ItMV06cj09PTAmJihvPTApLGUucHVzaChvKTtsZXQgYT0xLyhzLTEpLGw9LWEvMixjPTErYS8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LGQ9MyxnPTIseD0xLHY9bmV3IEZsb2F0MzJBcnJheShkKmYqaCksbT1uZXcgRmxvYXQzMkFycmF5KGcqZipoKSxwPW5ldyBGbG9hdDMyQXJyYXkoeCpmKmgpO2ZvcihsZXQgXz0wO188aDtfKyspe2xldCBTPV8lMyoyLzMtMSxMPV8+Mj8wOi0xLEE9W1MsTCwwLFMrMi8zLEwsMCxTKzIvMyxMKzEsMCxTLEwsMCxTKzIvMyxMKzEsMCxTLEwrMSwwXTt2LnNldChBLGQqZipfKSxtLnNldCh1LGcqZipfKTtsZXQgSD1bXyxfLF8sXyxfLF9dO3Auc2V0KEgseCpmKl8pfWxldCBiPW5ldyBIdDtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBRdCh2LGQpKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBRdChtLGcpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUXQocCx4KSksbi5wdXNoKGIpLGk+a3ImJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24geWcobil7bGV0IHQ9bmV3IE5lKDMqaG4sMypobixuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9UmwsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEJhKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBqMShuKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KG4pLGU9bmV3IFQoMCwxLDApO3JldHVybiBuZXcgWHIoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bn0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gdmcoKXtsZXQgbj1uZXcgSygxLDEpO3JldHVybiBuZXcgWHIoe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBfZygpe3JldHVybiBuZXcgWHIoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwOwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDsKCgkJCXZvaWQgbWFpbigpIHsKCgkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTsKCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gamgoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gdFMobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIGkoYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1VdXx8bD09PUJ1LHU9bD09PUFvfHxsPT09Q287aWYoY3x8dSlpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmYS5uZWVkc1BNUkVNVXBkYXRlPT09ITApe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChhKTtyZXR1cm4gZT09PW51bGwmJihlPW5ldyBhbChuKSksaD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGgpOmUuZnJvbUN1YmVtYXAoYSxoKSx0LnNldChhLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgaD1hLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJnIoaCkpe2U9PT1udWxsJiYoZT1uZXcgYWwobikpO2xldCBmPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEsZiksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBhfWZ1bmN0aW9uIHIoYSl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylhW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIHMoYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwLGUhPT1udWxsJiYoZS5kaXNwb3NlKCksZT1udWxsKX1yZXR1cm57Z2V0OmksZGlzcG9zZTpvfX1mdW5jdGlvbiBlUyhuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHRbaV0hPT12b2lkIDApcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSkhPT1udWxsfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gcj09PW51bGwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIG5TKG4sdCxlLGkpe2xldCByPXt9LHM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbyhoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBnIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZ10pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZGVsZXRlIHJbZi5pZF07bGV0IGQ9cy5nZXQoZik7ZCYmKHQucmVtb3ZlKGQpLHMuZGVsZXRlKGYpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYShoLGYpe3JldHVybiByW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHJbZi5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBmKXQudXBkYXRlKGZbZ10sMzQ5NjIpO2xldCBkPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBkKXtsZXQgeD1kW2ddO2ZvcihsZXQgdj0wLG09eC5sZW5ndGg7djxtO3YrKyl0LnVwZGF0ZSh4W3ZdLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxkPWguaW5kZXgsZz1oLmF0dHJpYnV0ZXMucG9zaXRpb24seD0wO2lmKGQhPT1udWxsKXtsZXQgcD1kLmFycmF5O3g9ZC52ZXJzaW9uO2ZvcihsZXQgYj0wLF89cC5sZW5ndGg7YjxfO2IrPTMpe2xldCBTPXBbYiswXSxMPXBbYisxXSxBPXBbYisyXTtmLnB1c2goUyxMLEwsQSxBLFMpfX1lbHNle2xldCBwPWcuYXJyYXk7eD1nLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aC8zLTE7YjxfO2IrPTMpe2xldCBTPWIrMCxMPWIrMSxBPWIrMjtmLnB1c2goUyxMLEwsQSxBLFMpfX1sZXQgdj1uZXcocDAoZik/c2w6cmwpKGYsMSk7di52ZXJzaW9uPXg7bGV0IG09cy5nZXQoaCk7bSYmdC5yZW1vdmUobSkscy5zZXQoaCx2KX1mdW5jdGlvbiB1KGgpe2xldCBmPXMuZ2V0KGgpO2lmKGYpe2xldCBkPWguaW5kZXg7ZCE9PW51bGwmJmYudmVyc2lvbjxkLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBzLmdldChoKX1yZXR1cm57Z2V0OmEsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIGlTKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGYpe3M9Zn1sZXQgYSxsO2Z1bmN0aW9uIGMoZil7YT1mLnR5cGUsbD1mLmJ5dGVzUGVyRWxlbWVudH1mdW5jdGlvbiB1KGYsZCl7bi5kcmF3RWxlbWVudHMocyxkLGEsZipsKSxlLnVwZGF0ZShkLHMsMSl9ZnVuY3Rpb24gaChmLGQsZyl7aWYoZz09PTApcmV0dXJuO2xldCB4LHY7aWYocil4PW4sdj0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHg9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSx2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIseD09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59eFt2XShzLGQsYSxmKmwsZyksZS51cGRhdGUoZCxzLGcpfXRoaXMuc2V0TW9kZT1vLHRoaXMuc2V0SW5kZXg9Yyx0aGlzLnJlbmRlcj11LHRoaXMucmVuZGVySW5zdGFuY2VzPWh9ZnVuY3Rpb24gclMobil7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gaShzLG8sYSl7c3dpdGNoKGUuY2FsbHMrKyxvKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKHMvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKHMvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKHMtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqczticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqczticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixvKTticmVha319ZnVuY3Rpb24gcigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6cix1cGRhdGU6aX19dmFyIGNvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2NvLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBzUyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gb1Mobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gd2cobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gYVMobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxzPW5ldyBXZWFrTWFwLG89bmV3IFQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgZD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBnPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCx4PXMuZ2V0KHUpO2lmKHg9PT12b2lkIDB8fHguY291bnQhPT1nKXtsZXQgUj1mdW5jdGlvbigpe1guZGlzcG9zZSgpLHMuZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9O3ghPT12b2lkIDAmJngudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHA9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sXz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LEw9cD09PSEwPzI6MSxBPVMqTCxIPTE7QT50Lm1heFRleHR1cmVTaXplJiYoSD1NYXRoLmNlaWwoQS90Lm1heFRleHR1cmVTaXplKSxBPXQubWF4VGV4dHVyZVNpemUpO2xldCB0dD1uZXcgRmxvYXQzMkFycmF5KEEqSCo0KmcpLFg9bmV3IGNvKHR0LEEsSCxnKTtYLmZvcm1hdD1SZSxYLnR5cGU9VWksWC5uZWVkc1VwZGF0ZT0hMDtsZXQgeT1MKjQ7Zm9yKGxldCBEPTA7RDxnO0QrKyl7bGV0IEY9YltEXSx6PV9bRF0sTj1BKkgqNCpEO2ZvcihsZXQgVj0wO1Y8Ri5jb3VudDtWKyspe28uZnJvbUJ1ZmZlckF0dHJpYnV0ZShGLFYpLEYubm9ybWFsaXplZD09PSEwJiZ3ZyhvLEYpO2xldCBRPVYqeTt0dFtOK1ErMF09by54LHR0W04rUSsxXT1vLnksdHRbTitRKzJdPW8ueix0dFtOK1ErM109MCxwPT09ITAmJihvLmZyb21CdWZmZXJBdHRyaWJ1dGUoeixWKSx6Lm5vcm1hbGl6ZWQ9PT0hMCYmd2cobyx6KSx0dFtOK1ErNF09by54LHR0W04rUSs1XT1vLnksdHRbTitRKzZdPW8ueix0dFtOK1ErN109MCl9fXg9e2NvdW50OmcsdGV4dHVyZTpYLHNpemU6bmV3IEsoQSxIKX0scy5zZXQodSx4KSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFIpfWxldCB2PTA7Zm9yKGxldCBwPTA7cDxkLmxlbmd0aDtwKyspdis9ZFtwXTtsZXQgbT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS12O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLG0pLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGQpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIix4LnRleHR1cmUsZSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIix4LnNpemUpfWVsc2V7bGV0IGc9ZD09PXZvaWQgMD8wOmQubGVuZ3RoLHg9aVt1LmlkXTtpZih4PT09dm9pZCAwfHx4Lmxlbmd0aCE9PWcpe3g9W107Zm9yKGxldCBfPTA7XzxnO18rKyl4W19dPVtfLDBdO2lbdS5pZF09eH1mb3IobGV0IF89MDtfPGc7XysrKXtsZXQgUz14W19dO1NbMF09XyxTWzFdPWRbX119eC5zb3J0KG9TKTtmb3IobGV0IF89MDtfPDg7XysrKV88ZyYmeFtfXVsxXT8oYVtfXVswXT14W19dWzBdLGFbX11bMV09eFtfXVsxXSk6KGFbX11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtfXVsxXT0wKTthLnNvcnQoc1MpO2xldCB2PXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHA9MDtmb3IobGV0IF89MDtfPDg7XysrKXtsZXQgUz1hW19dLEw9U1swXSxBPVNbMV07TCE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZBPyh2JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pIT09dltMXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfLHZbTF0pLG0mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykhPT1tW0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18sbVtMXSkscltfXT1BLHArPUEpOih2JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyksbSYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pLHJbX109MCl9bGV0IGI9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtcDtmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixiKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19cmV0dXJue3VwZGF0ZTpsfX1mdW5jdGlvbiBsUyhuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIHIuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLHIuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gbygpe3I9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpzLGRpc3Bvc2U6b319dmFyIGxsPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2xsLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIHYwPW5ldyBhZSxfMD1uZXcgY28sdzA9bmV3IGxsLE0wPW5ldyBXcixNZz1bXSxiZz1bXSxTZz1uZXcgRmxvYXQzMkFycmF5KDE2KSxFZz1uZXcgRmxvYXQzMkFycmF5KDkpLFRnPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gZXMobix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxzPU1nW3JdO2lmKHM9PT12b2lkIDAmJihzPW5ldyBGbG9hdDMyQXJyYXkociksTWdbcl09cyksdCE9PTApe2kudG9BcnJheShzLDApO2ZvcihsZXQgbz0xLGE9MDtvIT09dDsrK28pYSs9ZSxuW29dLnRvQXJyYXkocyxhKX1yZXR1cm4gc31mdW5jdGlvbiBMZShuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFRlKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBQbChuLHQpe2xldCBlPWJnW3RdO2U9PT12b2lkIDAmJihlPW5ldyBJbnQzMkFycmF5KHQpLGJnW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIGNTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHVTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gaFMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZlMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLFRlKGUsdCl9fWZ1bmN0aW9uIGRTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47VGcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsVGcpLFRlKGUsaSl9fWZ1bmN0aW9uIHBTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47RWcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRWcpLFRlKGUsaSl9fWZ1bmN0aW9uIG1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47U2cuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsU2cpLFRlKGUsaSl9fWZ1bmN0aW9uIGdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHhTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB5UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gdlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIF9TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB3UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIE1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gYlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBTUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHYwLHIpfWZ1bmN0aW9uIEVTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx3MCxyKX1mdW5jdGlvbiBUUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8TTAscil9ZnVuY3Rpb24gQVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8XzAscil9ZnVuY3Rpb24gQ1Mobil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gY1M7Y2FzZSAzNTY2NDpyZXR1cm4gdVM7Y2FzZSAzNTY2NTpyZXR1cm4gaFM7Y2FzZSAzNTY2NjpyZXR1cm4gZlM7Y2FzZSAzNTY3NDpyZXR1cm4gZFM7Y2FzZSAzNTY3NTpyZXR1cm4gcFM7Y2FzZSAzNTY3NjpyZXR1cm4gbVM7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGdTO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geFM7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB5UztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHZTO2Nhc2UgNTEyNTpyZXR1cm4gX1M7Y2FzZSAzNjI5NDpyZXR1cm4gd1M7Y2FzZSAzNjI5NTpyZXR1cm4gTVM7Y2FzZSAzNjI5NjpyZXR1cm4gYlM7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBTUztjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gRVM7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gVFM7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gQVN9fWZ1bmN0aW9uIFJTKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBMUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gUFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIERTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBJUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gTlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIEZTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gelMobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVTKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCUyhuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT1Mobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGtTKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSFMobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWUyhuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdTKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gV1Mobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNhZmVTZXRUZXh0dXJlMkQodFtzXXx8djAscltzXSl9ZnVuY3Rpb24gcVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUzRCh0W3NdfHx3MCxyW3NdKX1mdW5jdGlvbiBYUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbc118fE0wLHJbc10pfWZ1bmN0aW9uIFlTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zZXRUZXh0dXJlMkRBcnJheSh0W3NdfHxfMCxyW3NdKX1mdW5jdGlvbiBaUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBSUztjYXNlIDM1NjY0OnJldHVybiBMUztjYXNlIDM1NjY1OnJldHVybiBQUztjYXNlIDM1NjY2OnJldHVybiBEUztjYXNlIDM1Njc0OnJldHVybiBJUztjYXNlIDM1Njc1OnJldHVybiBOUztjYXNlIDM1Njc2OnJldHVybiBGUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gelM7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBVUztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEJTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT1M7Y2FzZSA1MTI1OnJldHVybiBrUztjYXNlIDM2Mjk0OnJldHVybiBIUztjYXNlIDM2Mjk1OnJldHVybiBWUztjYXNlIDM2Mjk2OnJldHVybiBHUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFdTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBxUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBZU319ZnVuY3Rpb24gSlMobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9Q1ModC50eXBlKX1mdW5jdGlvbiBiMChuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVpTKHQudHlwZSl9YjAucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLFRlKHQsbil9O2Z1bmN0aW9uIFMwKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1TMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKXtsZXQgbz1pW3JdO28uc2V0VmFsdWUobix0W28uaWRdLGUpfX07dmFyIEN1PS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBBZyhuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiAkUyhuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKEN1Lmxhc3RJbmRleD0wOzspe2xldCBzPUN1LmV4ZWMoaSksbz1DdS5sYXN0SW5kZXgsYT1zWzFdLGw9c1syXT09PSJdIixjPXNbM107aWYobCYmKGE9YXwwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZvKzI9PT1yKXtBZyhlLGM9PT12b2lkIDA/bmV3IEpTKGEsbix0KTpuZXcgYjAoYSxuLHQpKTticmVha31lbHNle2xldCBoPWUubWFwW2FdO2g9PT12b2lkIDAmJihoPW5ldyBTMChhKSxBZyhlLGgpKSxlPWh9fX1mdW5jdGlvbiBpaShuLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCBlPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcj1uLmdldEFjdGl2ZVVuaWZvcm0odCxpKSxzPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKTskUyhyLHMsdGhpcyl9fWlpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTtyIT09dm9pZCAwJiZyLnNldFZhbHVlKG4sZSxpKX07aWkucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO2khPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUobixlLGkpfTtpaS51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPXRbcl0sYT1lW28uaWRdO2EubmVlZHNVcGRhdGUhPT0hMSYmby5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fTtpaS5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9bltpXTtzLmlkIGluIHQmJmUucHVzaChzKX1yZXR1cm4gZX07ZnVuY3Rpb24gQ2cobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfXZhciBLUz0wO2Z1bmN0aW9uIFFTKG4pe2xldCB0PW4uc3BsaXQoYApgKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGpTKG4pe3N3aXRjaChuKXtjYXNlIHJpOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAkdDpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBSZyhuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiZyPT09IiI/IiI6ZS50b1VwcGVyQ2FzZSgpK2AKCmArcitgCgpgK1FTKG4uZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiB0RShuLHQpe2xldCBlPWpTKHQpO3JldHVybiJ2ZWM0ICIrbisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiBlRShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIEF3OmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBDdzplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBSdzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgTHc6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBQdzplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIG5FKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fG4uc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoJHMpLmpvaW4oYApgKX1mdW5jdGlvbiBpRShuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTtpIT09ITEmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiByRShuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBzPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksbz1zLm5hbWUsYT0xO3MudHlwZT09PTM1Njc0JiYoYT0yKSxzLnR5cGU9PT0zNTY3NSYmKGE9Mykscy50eXBlPT09MzU2NzYmJihhPTQpLGVbb109e3R5cGU6cy50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxvKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9ZnVuY3Rpb24gJHMobil7cmV0dXJuIG4hPT0iIn1mdW5jdGlvbiBMZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBQZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIHNFPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gcXUobil7cmV0dXJuIG4ucmVwbGFjZShzRSxvRSl9ZnVuY3Rpb24gb0Uobix0KXtsZXQgZT1QdFt0XTtpZihlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gcXUoZSl9dmFyIGFFPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csbEU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBEZyhuKXtyZXR1cm4gbi5yZXBsYWNlKGxFLEUwKS5yZXBsYWNlKGFFLGNFKX1mdW5jdGlvbiBjRShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksRTAobix0LGUsaSl9ZnVuY3Rpb24gRTAobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBzPXBhcnNlSW50KHQpO3M8cGFyc2VJbnQoZSk7cysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK3MrIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLHMpO3JldHVybiByfWZ1bmN0aW9uIElnKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtuLnByZWNpc2lvbisiIGludDsiO3JldHVybiBuLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6bi5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gdUUobil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gbi5zaGFkb3dNYXBUeXBlPT09bDA/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT1zdz90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09SnMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGhFKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIEFvOmNhc2UgQ286dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBSbDpjYXNlIEtoOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGZFKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIENvOmNhc2UgS2g6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZEUobil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIENsOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBFdzp0PSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIFR3OnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHBFKG4sdCxlLGkpe2xldCByPW4uZ2V0Q29udGV4dCgpLHM9ZS5kZWZpbmVzLG89ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9dUUoZSksYz1oRShlKSx1PWZFKGUpLGg9ZEUoZSksZj1lLmlzV2ViR0wyPyIiOm5FKGUpLGQ9aUUocyksZz1yLmNyZWF0ZVByb2dyYW0oKSx4LHYsbT1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rYApgOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oeD1bZF0uZmlsdGVyKCRzKS5qb2luKGAKYCkseC5sZW5ndGg+MCYmKHgrPWAKYCksdj1bZixkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2Lmxlbmd0aD4wJiYodis9YApgKSk6KHg9W0lnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiZlLmZsYXRTaGFkaW5nPT09ITE/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIglhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCIJYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiCWF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiCWF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiCWF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiCSNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiCSNlbHNlIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiCSNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCIJYXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIglhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2PVtmLElnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PXRpPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PXRpP1B0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PXRpP2VFKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixQdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx0RSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLGAKYF0uZmlsdGVyKCRzKS5qb2luKGAKYCkpLG89cXUobyksbz1MZyhvLGUpLG89UGcobyxlKSxhPXF1KGEpLGE9TGcoYSxlKSxhPVBnKGEsZSksbz1EZyhvKSxhPURnKGEpLGUuaXNXZWJHTDImJmUuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYobT1gI3ZlcnNpb24gMzAwIGVzCmAseD1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK3gsdj1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PW5nPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09bmc/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArdik7bGV0IHA9bSt4K28sYj1tK3YrYSxfPUNnKHIsMzU2MzMscCksUz1DZyhyLDM1NjMyLGIpO2lmKHIuYXR0YWNoU2hhZGVyKGcsXyksci5hdHRhY2hTaGFkZXIoZyxTKSxlLmluZGV4MEF0dHJpYnV0ZU5hbWUhPT12b2lkIDA/ci5iaW5kQXR0cmliTG9jYXRpb24oZywwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ZS5tb3JwaFRhcmdldHM9PT0hMCYmci5iaW5kQXR0cmliTG9jYXRpb24oZywwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZyksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IEg9ci5nZXRQcm9ncmFtSW5mb0xvZyhnKS50cmltKCksdHQ9ci5nZXRTaGFkZXJJbmZvTG9nKF8pLnRyaW0oKSxYPXIuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCkseT0hMCxSPSEwO2lmKHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE0KT09PSExKXt5PSExO2xldCBEPVJnKHIsXywidmVydGV4IiksRj1SZyhyLFMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK0grYApgK0QrYApgK0YpfWVsc2UgSCE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsSCk6KHR0PT09IiJ8fFg9PT0iIikmJihSPSExKTtSJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6eSxwcm9ncmFtTG9nOkgsdmVydGV4U2hhZGVyOntsb2c6dHQscHJlZml4Onh9LGZyYWdtZW50U2hhZGVyOntsb2c6WCxwcmVmaXg6dn19KX1yLmRlbGV0ZVNoYWRlcihfKSxyLmRlbGV0ZVNoYWRlcihTKTtsZXQgTDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIEw9PT12b2lkIDAmJihMPW5ldyBpaShyLGcpKSxMfTtsZXQgQTtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEE9PT12b2lkIDAmJihBPXJFKHIsZykpLEF9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZyksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUtTKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWcsdGhpcy52ZXJ0ZXhTaGFkZXI9Xyx0aGlzLmZyYWdtZW50U2hhZGVyPVMsdGhpc312YXIgbUU9MCxYdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hhZGVyQ2FjaGU9bmV3IE1hcCx0aGlzLm1hdGVyaWFsQ2FjaGU9bmV3IE1hcH11cGRhdGUodCl7bGV0IGU9dC52ZXJ0ZXhTaGFkZXIsaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoZSkscz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxvPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuIG8uaGFzKHIpPT09ITEmJihvLmFkZChyKSxyLnVzZWRUaW1lcysrKSxvLmhhcyhzKT09PSExJiYoby5hZGQocykscy51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLGkudXNlZFRpbWVzPT09MCYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiBlLmhhcyh0KT09PSExJiZlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpfV9nZXRTaGFkZXJTdGFnZSh0KXtsZXQgZT10aGlzLnNoYWRlckNhY2hlO2lmKGUuaGFzKHQpPT09ITEpe2xldCBpPW5ldyBZdTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LFl1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1tRSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBnRShuLHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgaWwsbD1uZXcgWHUsYz1bXSx1PXIuaXNXZWJHTDIsaD1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1yLmZsb2F0VmVydGV4VGV4dHVyZXMsZD1yLm1heFZlcnRleFVuaWZvcm1zLGc9ci52ZXJ0ZXhUZXh0dXJlcyx4PXIucHJlY2lzaW9uLHY9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiBtKHkpe2xldCBEPXkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigoZC0yMCkvNCksTj1NYXRoLm1pbih6LEQubGVuZ3RoKTtyZXR1cm4gTjxELmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitELmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK04rIi4iKSwwKTpOfX1mdW5jdGlvbiBwKHksUixELEYseil7bGV0IE49Ri5mb2csVj15LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFE9KHkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh5LmVudk1hcHx8ViksYXQ9dlt5LnR5cGVdLEc9ei5pc1NraW5uZWRNZXNoP20oeik6MDt5LnByZWNpc2lvbiE9PW51bGwmJih4PXIuZ2V0TWF4UHJlY2lzaW9uKHkucHJlY2lzaW9uKSx4IT09eS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6Iix5LnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHgsImluc3RlYWQuIikpO2xldCAkLGx0LGR0LHh0O2lmKGF0KXtsZXQgQj1mblthdF07JD1CLnZlcnRleFNoYWRlcixsdD1CLmZyYWdtZW50U2hhZGVyfWVsc2UgJD15LnZlcnRleFNoYWRlcixsdD15LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHkpLGR0PWwuZ2V0VmVydGV4U2hhZGVySUQoeSkseHQ9bC5nZXRGcmFnbWVudFNoYWRlcklEKHkpO2xldCBrPW4uZ2V0UmVuZGVyVGFyZ2V0KCksRnQ9eS5hbHBoYVRlc3Q+MCxtdD15LmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmF0LHNoYWRlck5hbWU6eS50eXBlLHZlcnRleFNoYWRlcjokLGZyYWdtZW50U2hhZGVyOmx0LGRlZmluZXM6eS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmR0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6eHQsaXNSYXdTaGFkZXJNYXRlcmlhbDp5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjp5Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjp4LGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmcsb3V0cHV0RW5jb2Rpbmc6az09PW51bGw/bi5vdXRwdXRFbmNvZGluZzprLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9rLnRleHR1cmUuZW5jb2Rpbmc6cmksbWFwOiEheS5tYXAsbWF0Y2FwOiEheS5tYXRjYXAsZW52TWFwOiEhUSxlbnZNYXBNb2RlOlEmJlEubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFRJiYoUS5tYXBwaW5nPT09Umx8fFEubWFwcGluZz09PUtoKSxsaWdodE1hcDohIXkubGlnaHRNYXAsYW9NYXA6ISF5LmFvTWFwLGVtaXNzaXZlTWFwOiEheS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEheS5idW1wTWFwLG5vcm1hbE1hcDohIXkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PWp3LHRhbmdlbnRTcGFjZU5vcm1hbE1hcDp5Lm5vcm1hbE1hcFR5cGU9PT10cyxkZWNvZGVWaWRlb1RleHR1cmU6ISF5Lm1hcCYmeS5tYXAuaXNWaWRlb1RleHR1cmU9PT0hMCYmeS5tYXAuZW5jb2Rpbmc9PT0kdCxjbGVhcmNvYXQ6bXQsY2xlYXJjb2F0TWFwOm10JiYhIXkuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDptdCYmISF5LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6bXQmJiEheS5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEheS5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEheS5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEheS5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF5LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEheS5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEheS5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEheS5hbHBoYU1hcCxhbHBoYVRlc3Q6RnQsYWxwaGFXcml0ZTp5LmFscGhhV3JpdGV8fHkudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISF5LmdyYWRpZW50TWFwLHNoZWVuOnkuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEheS5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEheS5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246eS50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISF5LnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISF5LnRoaWNrbmVzc01hcCxjb21iaW5lOnkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIXkubm9ybWFsTWFwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsdmVydGV4Q29sb3JzOnkudmVydGV4Q29sb3JzLHZlcnRleEFscGhhczp5LnZlcnRleENvbG9ycz09PSEwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiZ6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHZlcnRleFV2czohIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE1hcHx8ISF5LmNsZWFyY29hdFJvdWdobmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8ISF5LmRpc3BsYWNlbWVudE1hcHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCx1dnNWZXJ0ZXhPbmx5OiEoISF5Lm1hcHx8ISF5LmJ1bXBNYXB8fCEheS5ub3JtYWxNYXB8fCEheS5zcGVjdWxhck1hcHx8ISF5LmFscGhhTWFwfHwhIXkuZW1pc3NpdmVNYXB8fCEheS5yb3VnaG5lc3NNYXB8fCEheS5tZXRhbG5lc3NNYXB8fCEheS5jbGVhcmNvYXROb3JtYWxNYXB8fHkudHJhbnNtaXNzaW9uPjB8fCEheS50cmFuc21pc3Npb25NYXB8fCEheS50aGlja25lc3NNYXB8fCEheS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISF5LnNwZWN1bGFyQ29sb3JNYXB8fHkuc2hlZW4+MHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCkmJiEheS5kaXNwbGFjZW1lbnRNYXAsZm9nOiEhTix1c2VGb2c6eS5mb2csZm9nRXhwMjpOJiZOLmlzRm9nRXhwMixmbGF0U2hhZGluZzohIXkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOnkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aCxza2lubmluZzp6LmlzU2tpbm5lZE1lc2g9PT0hMCYmRz4wLG1heEJvbmVzOkcsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpSLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpSLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOlIuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6Ui5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpSLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpSLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpSLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOlIuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6by5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpvLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6eS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZELmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6bi5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzp5LnRvbmVNYXBwZWQ/bi50b25lTWFwcGluZzp0aSxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp5LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDp5LnNpZGU9PT1IcixmbGlwU2lkZWQ6eS5zaWRlPT09aGUsZGVwdGhQYWNraW5nOnkuZGVwdGhQYWNraW5nIT09dm9pZCAwP3kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6eS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTp5LmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKHkpe2xldCBSPVtdO2lmKHkuc2hhZGVySUQ/Ui5wdXNoKHkuc2hhZGVySUQpOihSLnB1c2goeS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksUi5wdXNoKHkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IEQgaW4geS5kZWZpbmVzKVIucHVzaChEKSxSLnB1c2goeS5kZWZpbmVzW0RdKTtyZXR1cm4geS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihfKFIseSksUyhSLHkpLFIucHVzaChuLm91dHB1dEVuY29kaW5nKSksUi5wdXNoKHkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxSLmpvaW4oKX1mdW5jdGlvbiBfKHksUil7eS5wdXNoKFIucHJlY2lzaW9uKSx5LnB1c2goUi5vdXRwdXRFbmNvZGluZykseS5wdXNoKFIuZW52TWFwTW9kZSkseS5wdXNoKFIuY29tYmluZSkseS5wdXNoKFIudmVydGV4VXZzKSx5LnB1c2goUi5mb2dFeHAyKSx5LnB1c2goUi5zaXplQXR0ZW51YXRpb24pLHkucHVzaChSLm1heEJvbmVzKSx5LnB1c2goUi5tb3JwaFRhcmdldHNDb3VudCkseS5wdXNoKFIubnVtRGlyTGlnaHRzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0cykseS5wdXNoKFIubnVtU3BvdExpZ2h0cykseS5wdXNoKFIubnVtSGVtaUxpZ2h0cykseS5wdXNoKFIubnVtUmVjdEFyZWFMaWdodHMpLHkucHVzaChSLm51bURpckxpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtUG9pbnRMaWdodFNoYWRvd3MpLHkucHVzaChSLm51bVNwb3RMaWdodFNoYWRvd3MpLHkucHVzaChSLnNoYWRvd01hcFR5cGUpLHkucHVzaChSLnRvbmVNYXBwaW5nKSx5LnB1c2goUi5udW1DbGlwcGluZ1BsYW5lcykseS5wdXNoKFIubnVtQ2xpcEludGVyc2VjdGlvbikseS5wdXNoKFIuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gUyh5LFIpe2EuZGlzYWJsZUFsbCgpLFIuaXNXZWJHTDImJmEuZW5hYmxlKDApLFIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksUi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxSLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksUi5tYXAmJmEuZW5hYmxlKDQpLFIubWF0Y2FwJiZhLmVuYWJsZSg1KSxSLmVudk1hcCYmYS5lbmFibGUoNiksUi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLFIubGlnaHRNYXAmJmEuZW5hYmxlKDgpLFIuYW9NYXAmJmEuZW5hYmxlKDkpLFIuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxSLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxSLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLFIub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxSLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLFIuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksUi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxSLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLFIuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksUi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxSLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksUi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxSLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLFIuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxSLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksUi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxSLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLFIudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksUi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxSLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksUi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksUi5mb2cmJmEuZW5hYmxlKDMxKSx5LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxSLnVzZUZvZyYmYS5lbmFibGUoMCksUi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksUi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxSLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxSLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLFIubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxSLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksUi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLFIuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksUi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksUi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLFIuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksUi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxSLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLFIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxSLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxSLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLFIudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksUi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxSLnNoZWVuJiZhLmVuYWJsZSgxOSksUi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksUi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMikseS5wdXNoKGEubWFzayl9ZnVuY3Rpb24gTCh5KXtsZXQgUj12W3kudHlwZV0sRDtpZihSKXtsZXQgRj1mbltSXTtEPXBNLmNsb25lKEYudW5pZm9ybXMpfWVsc2UgRD15LnVuaWZvcm1zO3JldHVybiBEfWZ1bmN0aW9uIEEoeSxSKXtsZXQgRDtmb3IobGV0IEY9MCx6PWMubGVuZ3RoO0Y8ejtGKyspe2xldCBOPWNbRl07aWYoTi5jYWNoZUtleT09PVIpe0Q9TiwrK0QudXNlZFRpbWVzO2JyZWFrfX1yZXR1cm4gRD09PXZvaWQgMCYmKEQ9bmV3IHBFKG4sUix5LHMpLGMucHVzaChEKSksRH1mdW5jdGlvbiBIKHkpe2lmKC0teS51c2VkVGltZXM9PT0wKXtsZXQgUj1jLmluZGV4T2YoeSk7Y1tSXT1jW2MubGVuZ3RoLTFdLGMucG9wKCkseS5kZXN0cm95KCl9fWZ1bmN0aW9uIHR0KHkpe2wucmVtb3ZlKHkpfWZ1bmN0aW9uIFgoKXtsLmRpc3Bvc2UoKX1yZXR1cm57Z2V0UGFyYW1ldGVyczpwLGdldFByb2dyYW1DYWNoZUtleTpiLGdldFVuaWZvcm1zOkwsYWNxdWlyZVByb2dyYW06QSxyZWxlYXNlUHJvZ3JhbTpILHJlbGVhc2VTaGFkZXJDYWNoZTp0dCxwcm9ncmFtczpjLGRpc3Bvc2U6WH19ZnVuY3Rpb24geEUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KHMpe2xldCBvPW4uZ2V0KHMpO3JldHVybiBvPT09dm9pZCAwJiYobz17fSxuLnNldChzLG8pKSxvfWZ1bmN0aW9uIGUocyl7bi5kZWxldGUocyl9ZnVuY3Rpb24gaShzLG8sYSl7bi5nZXQocylbb109YX1mdW5jdGlvbiByKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQscmVtb3ZlOmUsdXBkYXRlOmksZGlzcG9zZTpyfX1mdW5jdGlvbiB5RShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBOZyhuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIEZnKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoLGYsZCxnLHgsdil7bGV0IG09blt0XTtyZXR1cm4gbT09PXZvaWQgMD8obT17aWQ6aC5pZCxvYmplY3Q6aCxnZW9tZXRyeTpmLG1hdGVyaWFsOmQsZ3JvdXBPcmRlcjpnLHJlbmRlck9yZGVyOmgucmVuZGVyT3JkZXIsejp4LGdyb3VwOnZ9LG5bdF09bSk6KG0uaWQ9aC5pZCxtLm9iamVjdD1oLG0uZ2VvbWV0cnk9ZixtLm1hdGVyaWFsPWQsbS5ncm91cE9yZGVyPWcsbS5yZW5kZXJPcmRlcj1oLnJlbmRlck9yZGVyLG0uej14LG0uZ3JvdXA9diksdCsrLG19ZnVuY3Rpb24gYShoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnB1c2gobSk6ZC50cmFuc3BhcmVudD09PSEwP3IucHVzaChtKTplLnB1c2gobSl9ZnVuY3Rpb24gbChoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQobSk6ZC50cmFuc3BhcmVudD09PSEwP3IudW5zaGlmdChtKTplLnVuc2hpZnQobSl9ZnVuY3Rpb24gYyhoLGYpe2UubGVuZ3RoPjEmJmUuc29ydChofHx5RSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fE5nKSxyLmxlbmd0aD4xJiZyLnNvcnQoZnx8TmcpfWZ1bmN0aW9uIHUoKXtmb3IobGV0IGg9dCxmPW4ubGVuZ3RoO2g8ZjtoKyspe2xldCBkPW5baF07aWYoZC5pZD09PW51bGwpYnJlYWs7ZC5pZD1udWxsLGQub2JqZWN0PW51bGwsZC5nZW9tZXRyeT1udWxsLGQubWF0ZXJpYWw9bnVsbCxkLmdyb3VwPW51bGx9fXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6cyxwdXNoOmEsdW5zaGlmdDpsLGZpbmlzaDp1LHNvcnQ6Y319ZnVuY3Rpb24gdkUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KGkscil7bGV0IHM7cmV0dXJuIG4uaGFzKGkpPT09ITE/KHM9bmV3IEZnLG4uc2V0KGksW3NdKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhzPW5ldyBGZyxuLmdldChpKS5wdXNoKHMpKTpzPW4uZ2V0KGkpW3JdLHN9ZnVuY3Rpb24gZSgpe249bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LGRpc3Bvc2U6ZX19ZnVuY3Rpb24gX0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsZGlyZWN0aW9uOm5ldyBULGNvbG9yOm5ldyBmdCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxza3lDb2xvcjpuZXcgZnQsZ3JvdW5kQ29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBmdCxwb3NpdGlvbjpuZXcgVCxoYWxmV2lkdGg6bmV3IFQsaGFsZkhlaWdodDpuZXcgVH07YnJlYWt9cmV0dXJuIG5bdC5pZF09ZSxlfX19ZnVuY3Rpb24gd0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBLLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgTUU9MDtmdW5jdGlvbiBiRShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gU0Uobix0KXtsZXQgZT1uZXcgX0UsaT13RSgpLHI9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylyLnByb2JlLnB1c2gobmV3IFQpO2xldCBzPW5ldyBULG89bmV3IHd0LGE9bmV3IHd0O2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLGQ9MCxnPTA7Zm9yKGxldCB0dD0wO3R0PDk7dHQrKylyLnByb2JlW3R0XS5zZXQoMCwwLDApO2xldCB4PTAsdj0wLG09MCxwPTAsYj0wLF89MCxTPTAsTD0wO3Uuc29ydChiRSk7bGV0IEE9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IHR0PTAsWD11Lmxlbmd0aDt0dDxYO3R0Kyspe2xldCB5PXVbdHRdLFI9eS5jb2xvcixEPXkuaW50ZW5zaXR5LEY9eS5kaXN0YW5jZSx6PXkuc2hhZG93JiZ5LnNoYWRvdy5tYXA/eS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZih5LmlzQW1iaWVudExpZ2h0KWYrPVIucipEKkEsZCs9Ui5nKkQqQSxnKz1SLmIqRCpBO2Vsc2UgaWYoeS5pc0xpZ2h0UHJvYmUpZm9yKGxldCBOPTA7Tjw5O04rKylyLnByb2JlW05dLmFkZFNjYWxlZFZlY3Rvcih5LnNoLmNvZWZmaWNpZW50c1tOXSxEKTtlbHNlIGlmKHkuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuZGlyZWN0aW9uYWxTaGFkb3dbeF09USxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW3hdPXosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeFt4XT15LnNoYWRvdy5tYXRyaXgsXysrfXIuZGlyZWN0aW9uYWxbeF09Tix4Kyt9ZWxzZSBpZih5LmlzU3BvdExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbih5Lm1hdHJpeFdvcmxkKSxOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmRpc3RhbmNlPUYsTi5jb25lQ29zPU1hdGguY29zKHkuYW5nbGUpLE4ucGVudW1icmFDb3M9TWF0aC5jb3MoeS5hbmdsZSooMS15LnBlbnVtYnJhKSksTi5kZWNheT15LmRlY2F5LHkuY2FzdFNoYWRvdyl7bGV0IFY9eS5zaGFkb3csUT1pLmdldCh5KTtRLnNoYWRvd0JpYXM9Vi5iaWFzLFEuc2hhZG93Tm9ybWFsQmlhcz1WLm5vcm1hbEJpYXMsUS5zaGFkb3dSYWRpdXM9Vi5yYWRpdXMsUS5zaGFkb3dNYXBTaXplPVYubWFwU2l6ZSxyLnNwb3RTaGFkb3dbbV09USxyLnNwb3RTaGFkb3dNYXBbbV09eixyLnNwb3RTaGFkb3dNYXRyaXhbbV09eS5zaGFkb3cubWF0cml4LEwrK31yLnNwb3RbbV09TixtKyt9ZWxzZSBpZih5LmlzUmVjdEFyZWFMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5jb2xvci5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLE4uaGFsZldpZHRoLnNldCh5LndpZHRoKi41LDAsMCksTi5oYWxmSGVpZ2h0LnNldCgwLHkuaGVpZ2h0Ki41LDApLHIucmVjdEFyZWFbcF09TixwKyt9ZWxzZSBpZih5LmlzUG9pbnRMaWdodCl7bGV0IE49ZS5nZXQoeSk7aWYoTi5jb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkuaW50ZW5zaXR5KkEpLE4uZGlzdGFuY2U9eS5kaXN0YW5jZSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLFEuc2hhZG93Q2FtZXJhTmVhcj1WLmNhbWVyYS5uZWFyLFEuc2hhZG93Q2FtZXJhRmFyPVYuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3ZdPVEsci5wb2ludFNoYWRvd01hcFt2XT16LHIucG9pbnRTaGFkb3dNYXRyaXhbdl09eS5zaGFkb3cubWF0cml4LFMrK31yLnBvaW50W3ZdPU4sdisrfWVsc2UgaWYoeS5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5za3lDb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksTi5ncm91bmRDb2xvci5jb3B5KHkuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksci5oZW1pW2JdPU4sYisrfX1wPjAmJih0LmlzV2ViR0wyfHxuLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0ZMT0FUXzIpOm4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITA/KHIucmVjdEFyZWFMVEMxPW90LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1mLHIuYW1iaWVudFsxXT1kLHIuYW1iaWVudFsyXT1nO2xldCBIPXIuaGFzaDsoSC5kaXJlY3Rpb25hbExlbmd0aCE9PXh8fEgucG9pbnRMZW5ndGghPT12fHxILnNwb3RMZW5ndGghPT1tfHxILnJlY3RBcmVhTGVuZ3RoIT09cHx8SC5oZW1pTGVuZ3RoIT09Ynx8SC5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1ffHxILm51bVBvaW50U2hhZG93cyE9PVN8fEgubnVtU3BvdFNoYWRvd3MhPT1MKSYmKHIuZGlyZWN0aW9uYWwubGVuZ3RoPXgsci5zcG90Lmxlbmd0aD1tLHIucmVjdEFyZWEubGVuZ3RoPXAsci5wb2ludC5sZW5ndGg9dixyLmhlbWkubGVuZ3RoPWIsci5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9XyxyLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1fLHIucG9pbnRTaGFkb3cubGVuZ3RoPVMsci5wb2ludFNoYWRvd01hcC5sZW5ndGg9UyxyLnNwb3RTaGFkb3cubGVuZ3RoPUwsci5zcG90U2hhZG93TWFwLmxlbmd0aD1MLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPV8sci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9UyxyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPUwsSC5kaXJlY3Rpb25hbExlbmd0aD14LEgucG9pbnRMZW5ndGg9dixILnNwb3RMZW5ndGg9bSxILnJlY3RBcmVhTGVuZ3RoPXAsSC5oZW1pTGVuZ3RoPWIsSC5udW1EaXJlY3Rpb25hbFNoYWRvd3M9XyxILm51bVBvaW50U2hhZG93cz1TLEgubnVtU3BvdFNoYWRvd3M9TCxyLnZlcnNpb249TUUrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAsZD0wLGc9MCx4PTAsdj0wLG09aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBwPTAsYj11Lmxlbmd0aDtwPGI7cCsrKXtsZXQgXz11W3BdO2lmKF8uaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgUz1yLmRpcmVjdGlvbmFsW2ZdO1MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxzLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLnRhcmdldC5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24uc3ViKHMpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxmKyt9ZWxzZSBpZihfLmlzU3BvdExpZ2h0KXtsZXQgUz1yLnNwb3RbZ107Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksUy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGcrK31lbHNlIGlmKF8uaXNSZWN0QXJlYUxpZ2h0KXtsZXQgUz1yLnJlY3RBcmVhW3hdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGEuaWRlbnRpdHkoKSxvLmNvcHkoXy5tYXRyaXhXb3JsZCksby5wcmVtdWx0aXBseShtKSxhLmV4dHJhY3RSb3RhdGlvbihvKSxTLmhhbGZXaWR0aC5zZXQoXy53aWR0aCouNSwwLDApLFMuaGFsZkhlaWdodC5zZXQoMCxfLmhlaWdodCouNSwwKSxTLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksUy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSx4Kyt9ZWxzZSBpZihfLmlzUG9pbnRMaWdodCl7bGV0IFM9ci5wb2ludFtkXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxkKyt9ZWxzZSBpZihfLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgUz1yLmhlbWlbdl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxTLmRpcmVjdGlvbi5ub3JtYWxpemUoKSx2Kyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTpyfX1mdW5jdGlvbiB6ZyhuLHQpe2xldCBlPW5ldyBTRShuLHQpLGk9W10scj1bXTtmdW5jdGlvbiBzKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfWZ1bmN0aW9uIG8oaCl7aS5wdXNoKGgpfWZ1bmN0aW9uIGEoaCl7ci5wdXNoKGgpfWZ1bmN0aW9uIGwoaCl7ZS5zZXR1cChpLGgpfWZ1bmN0aW9uIGMoaCl7ZS5zZXR1cFZpZXcoaSxoKX1yZXR1cm57aW5pdDpzLHN0YXRlOntsaWdodHNBcnJheTppLHNoYWRvd3NBcnJheTpyLGxpZ2h0czplfSxzZXR1cExpZ2h0czpsLHNldHVwTGlnaHRzVmlldzpjLHB1c2hMaWdodDpvLHB1c2hTaGFkb3c6YX19ZnVuY3Rpb24gRUUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKHMsbz0wKXtsZXQgYTtyZXR1cm4gZS5oYXMocyk9PT0hMT8oYT1uZXcgemcobix0KSxlLnNldChzLFthXSkpOm8+PWUuZ2V0KHMpLmxlbmd0aD8oYT1uZXcgemcobix0KSxlLmdldChzKS5wdXNoKGEpKTphPWUuZ2V0KHMpW29dLGF9ZnVuY3Rpb24gcigpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDppLGRpc3Bvc2U6cn19dmFyIGNsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz1Ldyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtjbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgdWw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IFQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTt1bC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgVEU9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxBRT1gdW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7CnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKI2luY2x1ZGUgPHBhY2tpbmc+CnZvaWQgbWFpbigpIHsKCWNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTsKCWZsb2F0IG1lYW4gPSAwLjA7CglmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7CglmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7CglmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDsKCWZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkgewoJCWZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTsKCQkjaWZkZWYgSE9SSVpPTlRBTF9QQVNTCgkJCXZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkaXN0cmlidXRpb24ueDsKCQkJc3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54OwoJCSNlbHNlCgkJCWZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkZXB0aDsKCQkJc3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7CgkJI2VuZGlmCgl9CgltZWFuID0gbWVhbiAvIHNhbXBsZXM7CglzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzOwoJZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7CglnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApOwp9YDtmdW5jdGlvbiBUMChuLHQsZSl7bGV0IGk9bmV3IHFyLHI9bmV3IEsscz1uZXcgSyxvPW5ldyBXdCxhPW5ldyBjbCh7ZGVwdGhQYWNraW5nOlF3fSksbD1uZXcgdWwsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsaD17MDpoZSwxOmVvLDI6SHJ9LGY9bmV3IEZuKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBLfSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6VEUsZnJhZ21lbnRTaGFkZXI6QUV9KSxkPWYuY2xvbmUoKTtkLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGc9bmV3IEh0O2cuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgeD1uZXcgb2UoZyxmKSx2PXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1sMCx0aGlzLnJlbmRlcj1mdW5jdGlvbihfLFMsTCl7aWYodi5lbmFibGVkPT09ITF8fHYuYXV0b1VwZGF0ZT09PSExJiZ2Lm5lZWRzVXBkYXRlPT09ITF8fF8ubGVuZ3RoPT09MClyZXR1cm47bGV0IEE9bi5nZXRSZW5kZXJUYXJnZXQoKSxIPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx0dD1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksWD1uLnN0YXRlO1guc2V0QmxlbmRpbmcoam4pLFguYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxYLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksWC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCB5PTAsUj1fLmxlbmd0aDt5PFI7eSsrKXtsZXQgRD1fW3ldLEY9RC5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLEQsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtyLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoeikscy5jb3B5KEYubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKHMueD1NYXRoLmZsb29yKHUvei54KSxyLng9cy54KnoueCxGLm1hcFNpemUueD1zLngpLHIueT51JiYocy55PU1hdGguZmxvb3IodS96LnkpLHIueT1zLnkqei55LEYubWFwU2l6ZS55PXMueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1Kcyl7bGV0IFY9e21pbkZpbHRlcjpiZSxtYWdGaWx0ZXI6YmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IE5lKHIueCxyLnksViksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFY9e21pbkZpbHRlcjpmZSxtYWdGaWx0ZXI6ZmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bi5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLG4uY2xlYXIoKTtsZXQgTj1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFY9MDtWPE47VisrKXtsZXQgUT1GLmdldFZpZXdwb3J0KFYpO28uc2V0KHMueCpRLngscy55KlEueSxzLngqUS56LHMueSpRLncpLFgudmlld3BvcnQobyksRi51cGRhdGVNYXRyaWNlcyhELFYpLGk9Ri5nZXRGcnVzdHVtKCksYihTLEwsRi5jYW1lcmEsRCx0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09SnMmJm0oRixMKSxGLm5lZWRzVXBkYXRlPSExfXYubmVlZHNVcGRhdGU9ITEsbi5zZXRSZW5kZXJUYXJnZXQoQSxILHR0KX07ZnVuY3Rpb24gbShfLFMpe2xldCBMPXQudXBkYXRlKHgpO2YuZGVmaW5lcy5WU01fU0FNUExFUyE9PV8uYmx1clNhbXBsZXMmJihmLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxkLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxmLm5lZWRzVXBkYXRlPSEwLGQubmVlZHNVcGRhdGU9ITApLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXAudGV4dHVyZSxmLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Xy5tYXBTaXplLGYudW5pZm9ybXMucmFkaXVzLnZhbHVlPV8ucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KF8ubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGYseCxudWxsKSxkLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPV8ubWFwUGFzcy50ZXh0dXJlLGQudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChTLG51bGwsTCxkLHgsbnVsbCl9ZnVuY3Rpb24gcChfLFMsTCxBLEgsdHQsWCl7bGV0IHk9bnVsbCxSPUEuaXNQb2ludExpZ2h0PT09ITA/Xy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOl8uY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihSIT09dm9pZCAwP3k9Ujp5PUEuaXNQb2ludExpZ2h0PT09ITA/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJkwuY2xpcFNoYWRvd3M9PT0hMCYmTC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxMLmRpc3BsYWNlbWVudE1hcCYmTC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fEwuYWxwaGFNYXAmJkwuYWxwaGFUZXN0PjApe2xldCBEPXkudXVpZCxGPUwudXVpZCx6PWNbRF07ej09PXZvaWQgMCYmKHo9e30sY1tEXT16KTtsZXQgTj16W0ZdO049PT12b2lkIDAmJihOPXkuY2xvbmUoKSx6W0ZdPU4pLHk9Tn1yZXR1cm4geS52aXNpYmxlPUwudmlzaWJsZSx5LndpcmVmcmFtZT1MLndpcmVmcmFtZSxYPT09SnM/eS5zaWRlPUwuc2hhZG93U2lkZSE9PW51bGw/TC5zaGFkb3dTaWRlOkwuc2lkZTp5LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6aFtMLnNpZGVdLHkuYWxwaGFNYXA9TC5hbHBoYU1hcCx5LmFscGhhVGVzdD1MLmFscGhhVGVzdCx5LmNsaXBTaGFkb3dzPUwuY2xpcFNoYWRvd3MseS5jbGlwcGluZ1BsYW5lcz1MLmNsaXBwaW5nUGxhbmVzLHkuY2xpcEludGVyc2VjdGlvbj1MLmNsaXBJbnRlcnNlY3Rpb24seS5kaXNwbGFjZW1lbnRNYXA9TC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZT1MLmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcz1MLmRpc3BsYWNlbWVudEJpYXMseS53aXJlZnJhbWVMaW5ld2lkdGg9TC53aXJlZnJhbWVMaW5ld2lkdGgseS5saW5ld2lkdGg9TC5saW5ld2lkdGgsQS5pc1BvaW50TGlnaHQ9PT0hMCYmeS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJih5LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSx5Lm5lYXJEaXN0YW5jZT1ILHkuZmFyRGlzdGFuY2U9dHQpLHl9ZnVuY3Rpb24gYihfLFMsTCxBLEgpe2lmKF8udmlzaWJsZT09PSExKXJldHVybjtpZihfLmxheWVycy50ZXN0KFMubGF5ZXJzKSYmKF8uaXNNZXNofHxfLmlzTGluZXx8Xy5pc1BvaW50cykmJihfLmNhc3RTaGFkb3d8fF8ucmVjZWl2ZVNoYWRvdyYmSD09PUpzKSYmKCFfLmZydXN0dW1DdWxsZWR8fGkuaW50ZXJzZWN0c09iamVjdChfKSkpe18ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTC5tYXRyaXhXb3JsZEludmVyc2UsXy5tYXRyaXhXb3JsZCk7bGV0IHk9dC51cGRhdGUoXyksUj1fLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoUikpe2xldCBEPXkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49RFtGXSxWPVJbTi5tYXRlcmlhbEluZGV4XTtpZihWJiZWLnZpc2libGUpe2xldCBRPXAoXyx5LFYsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksUSxfLE4pfX19ZWxzZSBpZihSLnZpc2libGUpe2xldCBEPXAoXyx5LFIsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksRCxfLG51bGwpfX1sZXQgWD1fLmNoaWxkcmVuO2ZvcihsZXQgeT0wLFI9WC5sZW5ndGg7eTxSO3krKyliKFhbeV0sUyxMLEEsSCl9fWZ1bmN0aW9uIENFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIoKXtsZXQgUD0hMSxwdD1uZXcgV3QsaHQ9bnVsbCxFdD1uZXcgV3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oWSl7aHQhPT1ZJiYhUCYmKG4uY29sb3JNYXNrKFksWSxZLFkpLGh0PVkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZLE10LER0LGp0LHplKXt6ZT09PSEwJiYoWSo9anQsTXQqPWp0LER0Kj1qdCkscHQuc2V0KFksTXQsRHQsanQpLEV0LmVxdWFscyhwdCk9PT0hMSYmKG4uY2xlYXJDb2xvcihZLE10LER0LGp0KSxFdC5jb3B5KHB0KSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxodD1udWxsLEV0LnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBzKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oWSl7WT9rKDI5MjkpOkZ0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFkpe3B0IT09WSYmIVAmJihuLmRlcHRoTWFzayhZKSxwdD1ZKX0sc2V0RnVuYzpmdW5jdGlvbihZKXtpZihodCE9PVkpe2lmKFkpc3dpdGNoKFkpe2Nhc2UgeXc6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIHZ3Om4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBfdzpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgenU6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHd3Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBNdzpuLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgYnc6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIFN3Om4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtodD1ZfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFkpe1A9WX0sc2V0Q2xlYXI6ZnVuY3Rpb24oWSl7RXQhPT1ZJiYobi5jbGVhckRlcHRoKFkpLEV0PVkpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGx9fX1mdW5jdGlvbiBvKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24obmUpe1B8fChuZT9rKDI5NjApOkZ0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihuZSl7cHQhPT1uZSYmIVAmJihuLnN0ZW5jaWxNYXNrKG5lKSxwdD1uZSl9LHNldEZ1bmM6ZnVuY3Rpb24obmUsZW4seW4peyhodCE9PW5lfHxFdCE9PWVufHxZIT09eW4pJiYobi5zdGVuY2lsRnVuYyhuZSxlbix5biksaHQ9bmUsRXQ9ZW4sWT15bil9LHNldE9wOmZ1bmN0aW9uKG5lLGVuLHluKXsoTXQhPT1uZXx8RHQhPT1lbnx8anQhPT15bikmJihuLnN0ZW5jaWxPcChuZSxlbix5biksTXQ9bmUsRHQ9ZW4sanQ9eW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24obmUpe1A9bmV9LHNldENsZWFyOmZ1bmN0aW9uKG5lKXt6ZSE9PW5lJiYobi5jbGVhclN0ZW5jaWwobmUpLHplPW5lKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLHB0PW51bGwsaHQ9bnVsbCxFdD1udWxsLFk9bnVsbCxNdD1udWxsLER0PW51bGwsanQ9bnVsbCx6ZT1udWxsfX19bGV0IGE9bmV3IHIsbD1uZXcgcyxjPW5ldyBvLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsRD1uLmdldFBhcmFtZXRlcigzNTY2MSksRj0hMSx6PTAsTj1uLmdldFBhcmFtZXRlcig3OTM4KTtOLmluZGV4T2YoIldlYkdMIikhPT0tMT8oej1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0xKTpOLmluZGV4T2YoIk9wZW5HTCBFUyIpIT09LTEmJih6PXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0yKTtsZXQgVj1udWxsLFE9e30sYXQ9bi5nZXRQYXJhbWV0ZXIoMzA4OCksRz1uLmdldFBhcmFtZXRlcigyOTc4KSwkPW5ldyBXdCgpLmZyb21BcnJheShhdCksbHQ9bmV3IFd0KCkuZnJvbUFycmF5KEcpO2Z1bmN0aW9uIGR0KFAscHQsaHQpe2xldCBFdD1uZXcgVWludDhBcnJheSg0KSxZPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoUCxZKSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MCw5NzI4KTtmb3IobGV0IE10PTA7TXQ8aHQ7TXQrKyluLnRleEltYWdlMkQocHQrTXQsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxFdCk7cmV0dXJuIFl9bGV0IHh0PXt9O3h0WzM1NTNdPWR0KDM1NTMsMzU1MywxKSx4dFszNDA2N109ZHQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksaygyOTI5KSxsLnNldEZ1bmMoenUpLEooITEpLGl0KEFtKSxrKDI4ODQpLEMoam4pO2Z1bmN0aW9uIGsoUCl7dVtQXSE9PSEwJiYobi5lbmFibGUoUCksdVtQXT0hMCl9ZnVuY3Rpb24gRnQoUCl7dVtQXSE9PSExJiYobi5kaXNhYmxlKFApLHVbUF09ITEpfWZ1bmN0aW9uIG10KFAscHQpe3JldHVybiBoW1BdIT09cHQ/KG4uYmluZEZyYW1lYnVmZmVyKFAscHQpLGhbUF09cHQsaSYmKFA9PT0zNjAwOSYmKGhbMzYxNjBdPXB0KSxQPT09MzYxNjAmJihoWzM2MDA5XT1wdCkpLCEwKTohMX1mdW5jdGlvbiBTdChQLHB0KXtsZXQgaHQ9ZCxFdD0hMTtpZihQKWlmKGh0PWYuZ2V0KHB0KSxodD09PXZvaWQgMCYmKGh0PVtdLGYuc2V0KHB0LGh0KSksUC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgWT1QLnRleHR1cmU7aWYoaHQubGVuZ3RoIT09WS5sZW5ndGh8fGh0WzBdIT09MzYwNjQpe2ZvcihsZXQgTXQ9MCxEdD1ZLmxlbmd0aDtNdDxEdDtNdCsrKWh0W010XT0zNjA2NCtNdDtodC5sZW5ndGg9WS5sZW5ndGgsRXQ9ITB9fWVsc2UgaHRbMF0hPT0zNjA2NCYmKGh0WzBdPTM2MDY0LEV0PSEwKTtlbHNlIGh0WzBdIT09MTAyOSYmKGh0WzBdPTEwMjksRXQ9ITApO0V0JiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGh0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChodCkpfWZ1bmN0aW9uIEIoUCl7cmV0dXJuIGchPT1QPyhuLnVzZVByb2dyYW0oUCksZz1QLCEwKTohMX1sZXQgc3Q9e1tJcl06MzI3NzQsW2F3XTozMjc3OCxbbHddOjMyNzc5fTtpZihpKXN0W1BtXT0zMjc3NSxzdFtEbV09MzI3NzY7ZWxzZXtsZXQgUD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO1AhPT1udWxsJiYoc3RbUG1dPVAuTUlOX0VYVCxzdFtEbV09UC5NQVhfRVhUKX1sZXQgbnQ9e1tjd106MCxbdXddOjEsW2h3XTo3NjgsW3UwXTo3NzAsW3h3XTo3NzYsW213XTo3NzQsW2R3XTo3NzIsW2Z3XTo3NjksW2gwXTo3NzEsW2d3XTo3NzUsW3B3XTo3NzN9O2Z1bmN0aW9uIEMoUCxwdCxodCxFdCxZLE10LER0LGp0KXtpZihQPT09am4pe3g9PT0hMCYmKEZ0KDMwNDIpLHg9ITEpO3JldHVybn1pZih4PT09ITEmJihrKDMwNDIpLHg9ITApLFAhPT1vdyl7aWYoUCE9PXZ8fGp0IT09QSl7aWYoKG0hPT1Jcnx8XyE9PUlyKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksbT1JcixfPUlyKSxqdClzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIENtOm4uYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsUCk7YnJlYWt9ZWxzZSBzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgUm06bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgTG06bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31wPW51bGwsYj1udWxsLFM9bnVsbCxMPW51bGwsdj1QLEE9anR9cmV0dXJufVk9WXx8cHQsTXQ9TXR8fGh0LER0PUR0fHxFdCwocHQhPT1tfHxZIT09XykmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShzdFtwdF0sc3RbWV0pLG09cHQsXz1ZKSwoaHQhPT1wfHxFdCE9PWJ8fE10IT09U3x8RHQhPT1MKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUobnRbaHRdLG50W0V0XSxudFtNdF0sbnRbRHRdKSxwPWh0LGI9RXQsUz1NdCxMPUR0KSx2PVAsQT1udWxsfWZ1bmN0aW9uIGooUCxwdCl7UC5zaWRlPT09SHI/RnQoMjg4NCk6aygyODg0KTtsZXQgaHQ9UC5zaWRlPT09aGU7cHQmJihodD0haHQpLEooaHQpLFAuYmxlbmRpbmc9PT1LcyYmUC50cmFuc3BhcmVudD09PSExP0Moam4pOkMoUC5ibGVuZGluZyxQLmJsZW5kRXF1YXRpb24sUC5ibGVuZFNyYyxQLmJsZW5kRHN0LFAuYmxlbmRFcXVhdGlvbkFscGhhLFAuYmxlbmRTcmNBbHBoYSxQLmJsZW5kRHN0QWxwaGEsUC5wcmVtdWx0aXBsaWVkQWxwaGEpLGwuc2V0RnVuYyhQLmRlcHRoRnVuYyksbC5zZXRUZXN0KFAuZGVwdGhUZXN0KSxsLnNldE1hc2soUC5kZXB0aFdyaXRlKSxhLnNldE1hc2soUC5jb2xvcldyaXRlKTtsZXQgRXQ9UC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KEV0KSxFdCYmKGMuc2V0TWFzayhQLnN0ZW5jaWxXcml0ZU1hc2spLGMuc2V0RnVuYyhQLnN0ZW5jaWxGdW5jLFAuc3RlbmNpbFJlZixQLnN0ZW5jaWxGdW5jTWFzayksYy5zZXRPcChQLnN0ZW5jaWxGYWlsLFAuc3RlbmNpbFpGYWlsLFAuc3RlbmNpbFpQYXNzKSksdnQoUC5wb2x5Z29uT2Zmc2V0LFAucG9seWdvbk9mZnNldEZhY3RvcixQLnBvbHlnb25PZmZzZXRVbml0cyksUC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9rKDMyOTI2KTpGdCgzMjkyNil9ZnVuY3Rpb24gSihQKXtIIT09UCYmKFA/bi5mcm9udEZhY2UoMjMwNCk6bi5mcm9udEZhY2UoMjMwNSksSD1QKX1mdW5jdGlvbiBpdChQKXtQIT09aXc/KGsoMjg4NCksUCE9PXR0JiYoUD09PUFtP24uY3VsbEZhY2UoMTAyOSk6UD09PXJ3P24uY3VsbEZhY2UoMTAyOCk6bi5jdWxsRmFjZSgxMDMyKSkpOkZ0KDI4ODQpLHR0PVB9ZnVuY3Rpb24gZXQoUCl7UCE9PVgmJihGJiZuLmxpbmVXaWR0aChQKSxYPVApfWZ1bmN0aW9uIHZ0KFAscHQsaHQpe1A/KGsoMzI4MjMpLCh5IT09cHR8fFIhPT1odCkmJihuLnBvbHlnb25PZmZzZXQocHQsaHQpLHk9cHQsUj1odCkpOkZ0KDMyODIzKX1mdW5jdGlvbiBidChQKXtQP2soMzA4OSk6RnQoMzA4OSl9ZnVuY3Rpb24gSXQoUCl7UD09PXZvaWQgMCYmKFA9MzM5ODQrRC0xKSxWIT09UCYmKG4uYWN0aXZlVGV4dHVyZShQKSxWPVApfWZ1bmN0aW9uIFp0KFAscHQpe1Y9PT1udWxsJiZJdCgpO2xldCBodD1RW1ZdO2h0PT09dm9pZCAwJiYoaHQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxRW1ZdPWh0KSwoaHQudHlwZSE9PVB8fGh0LnRleHR1cmUhPT1wdCkmJihuLmJpbmRUZXh0dXJlKFAscHR8fHh0W1BdKSxodC50eXBlPVAsaHQudGV4dHVyZT1wdCl9ZnVuY3Rpb24gcXQoKXtsZXQgUD1RW1ZdO1AhPT12b2lkIDAmJlAudHlwZSE9PXZvaWQgMCYmKG4uYmluZFRleHR1cmUoUC50eXBlLG51bGwpLFAudHlwZT12b2lkIDAsUC50ZXh0dXJlPXZvaWQgMCl9ZnVuY3Rpb24gRSgpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHcoKXt0cnl7bi50ZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHEoKXt0cnl7bi50ZXhTdWJJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHJ0KCl7dHJ5e24uY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gZ3QoKXt0cnl7bi50ZXhTdG9yYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gVygpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBfdCgpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24geXQoKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHV0KFApeyQuZXF1YWxzKFApPT09ITEmJihuLnNjaXNzb3IoUC54LFAueSxQLnosUC53KSwkLmNvcHkoUCkpfWZ1bmN0aW9uIGN0KFApe2x0LmVxdWFscyhQKT09PSExJiYobi52aWV3cG9ydChQLngsUC55LFAueixQLncpLGx0LmNvcHkoUCkpfWZ1bmN0aW9uIEF0KCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksaT09PSEwJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LFY9bnVsbCxRPXt9LGg9e30sZj1uZXcgV2Vha01hcCxkPVtdLGc9bnVsbCx4PSExLHY9bnVsbCxtPW51bGwscD1udWxsLGI9bnVsbCxfPW51bGwsUz1udWxsLEw9bnVsbCxBPSExLEg9bnVsbCx0dD1udWxsLFg9bnVsbCx5PW51bGwsUj1udWxsLCQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmssZGlzYWJsZTpGdCxiaW5kRnJhbWVidWZmZXI6bXQsZHJhd0J1ZmZlcnM6U3QsdXNlUHJvZ3JhbTpCLHNldEJsZW5kaW5nOkMsc2V0TWF0ZXJpYWw6aixzZXRGbGlwU2lkZWQ6SixzZXRDdWxsRmFjZTppdCxzZXRMaW5lV2lkdGg6ZXQsc2V0UG9seWdvbk9mZnNldDp2dCxzZXRTY2lzc29yVGVzdDpidCxhY3RpdmVUZXh0dXJlOkl0LGJpbmRUZXh0dXJlOlp0LHVuYmluZFRleHR1cmU6cXQsY29tcHJlc3NlZFRleEltYWdlMkQ6RSx0ZXhJbWFnZTJEOl90LHRleEltYWdlM0Q6eXQsdGV4U3RvcmFnZTJEOmd0LHRleFN0b3JhZ2UzRDpXLHRleFN1YkltYWdlMkQ6dyx0ZXhTdWJJbWFnZTNEOnEsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6cnQsc2Npc3Nvcjp1dCx2aWV3cG9ydDpjdCxyZXNldDpBdH19ZnVuY3Rpb24gUkUobix0LGUsaSxyLHMsbyl7bGV0IGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXIubWF4U2FtcGxlcyxkPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGc9bmV3IFdlYWtNYXAseCx2PSExO3RyeXt2PXR5cGVvZiBPZmZzY3JlZW5DYW52YXMhPSJ1bmRlZmluZWQiJiZuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSE9PW51bGx9Y2F0Y2goRSl7fWZ1bmN0aW9uIG0oRSx3KXtyZXR1cm4gdj9uZXcgT2Zmc2NyZWVuQ2FudmFzKEUsdyk6cm8oImNhbnZhcyIpfWZ1bmN0aW9uIHAoRSx3LHEscnQpe2xldCBndD0xO2lmKChFLndpZHRoPnJ0fHxFLmhlaWdodD5ydCkmJihndD1ydC9NYXRoLm1heChFLndpZHRoLEUuaGVpZ2h0KSksZ3Q8MXx8dz09PSEwKWlmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJkUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgVz13P25NOk1hdGguZmxvb3IsX3Q9VyhndCpFLndpZHRoKSx5dD1XKGd0KkUuaGVpZ2h0KTt4PT09dm9pZCAwJiYoeD1tKF90LHl0KSk7bGV0IHV0PXE/bShfdCx5dCk6eDtyZXR1cm4gdXQud2lkdGg9X3QsdXQuaGVpZ2h0PXl0LHV0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwLF90LHl0KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpIHRvICgiK190KyJ4Iit5dCsiKS4iKSx1dH1lbHNlIHJldHVybiJkYXRhImluIEUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIitFLndpZHRoKyJ4IitFLmhlaWdodCsiKS4iKSxFO3JldHVybiBFfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGlnKEUud2lkdGgpJiZpZyhFLmhlaWdodCl9ZnVuY3Rpb24gXyhFKXtyZXR1cm4gYT8hMTpFLndyYXBTIT09VmV8fEUud3JhcFQhPT1WZXx8RS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZX1mdW5jdGlvbiBTKEUsdyl7cmV0dXJuIEUuZ2VuZXJhdGVNaXBtYXBzJiZ3JiZFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIEwoRSl7bi5nZW5lcmF0ZU1pcG1hcChFKX1mdW5jdGlvbiBBKEUsdyxxLHJ0LGd0PSExKXtpZihhPT09ITEpcmV0dXJuIHc7aWYoRSE9PW51bGwpe2lmKG5bRV0hPT12b2lkIDApcmV0dXJuIG5bRV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK0UrIiciKX1sZXQgVz13O3JldHVybiB3PT09NjQwMyYmKHE9PT01MTI2JiYoVz0zMzMyNikscT09PTUxMzEmJihXPTMzMzI1KSxxPT09NTEyMSYmKFc9MzMzMjEpKSx3PT09MzMzMTkmJihxPT09NTEyNiYmKFc9MzMzMjgpLHE9PT01MTMxJiYoVz0zMzMyNykscT09PTUxMjEmJihXPTMzMzIzKSksdz09PTY0MDgmJihxPT09NTEyNiYmKFc9MzQ4MzYpLHE9PT01MTMxJiYoVz0zNDg0MikscT09PTUxMjEmJihXPXJ0PT09JHQmJmd0PT09ITE/MzU5MDc6MzI4NTYpLHE9PT0zMjgxOSYmKFc9MzI4NTQpLHE9PT0zMjgyMCYmKFc9MzI4NTUpKSwoVz09PTMzMzI1fHxXPT09MzMzMjZ8fFc9PT0zMzMyN3x8Vz09PTMzMzI4fHxXPT09MzQ4NDJ8fFc9PT0zNDgzNikmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksV31mdW5jdGlvbiBIKEUsdyxxKXtyZXR1cm4gUyhFLHEpPT09ITB8fEUuaXNGcmFtZWJ1ZmZlclRleHR1cmUmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmU/TWF0aC5sb2cyKE1hdGgubWF4KHcud2lkdGgsdy5oZWlnaHQpKSsxOkUubWlwbWFwcyE9PXZvaWQgMCYmRS5taXBtYXBzLmxlbmd0aD4wP0UubWlwbWFwcy5sZW5ndGg6RS5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KEUuaW1hZ2UpP3cubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiB0dChFKXtyZXR1cm4gRT09PWZlfHxFPT09SW18fEU9PT1ObT85NzI4Ojk3Mjl9ZnVuY3Rpb24gWChFKXtsZXQgdz1FLnRhcmdldDt3LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLFIodyksdy5pc1ZpZGVvVGV4dHVyZSYmZy5kZWxldGUodyksby5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB5KEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRCh3KX1mdW5jdGlvbiBSKEUpe2xldCB3PWkuZ2V0KEUpO3cuX193ZWJnbEluaXQhPT12b2lkIDAmJihuLmRlbGV0ZVRleHR1cmUody5fX3dlYmdsVGV4dHVyZSksaS5yZW1vdmUoRSkpfWZ1bmN0aW9uIEQoRSl7bGV0IHc9RS50ZXh0dXJlLHE9aS5nZXQoRSkscnQ9aS5nZXQodyk7aWYoISFFKXtpZihydC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZShydC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksRS5kZXB0aFRleHR1cmUmJkUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZ3Q9MDtndDw2O2d0Kyspbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcltndF0pLHEuX193ZWJnbERlcHRoYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aGJ1ZmZlcltndF0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcikscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyKSxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcikscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGd0PTAsVz13Lmxlbmd0aDtndDxXO2d0Kyspe2xldCBfdD1pLmdldCh3W2d0XSk7X3QuX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUoX3QuX193ZWJnbFRleHR1cmUpLG8ubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKHdbZ3RdKX1pLnJlbW92ZSh3KSxpLnJlbW92ZShFKX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIE4oKXtsZXQgRT1GO3JldHVybiBFPj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitFKyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSxFfWZ1bmN0aW9uIFYoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLmlzVmlkZW9UZXh0dXJlJiZldChFKSxFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2xldCBydD1FLmltYWdlO2lmKHJ0PT09dm9pZCAwKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZSBpZihydC5jb21wbGV0ZT09PSExKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpO2Vsc2V7ayhxLEUsdyk7cmV0dXJufX1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTUzLHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFEoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2socSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTg2NixxLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBhdChFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDMyODc5LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIEcoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe0Z0KHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzQwNjcscS5fX3dlYmdsVGV4dHVyZSl9bGV0ICQ9e1tPdV06MTA0OTcsW1ZlXTozMzA3MSxba3VdOjMzNjQ4fSxsdD17W2ZlXTo5NzI4LFtJbV06OTk4NCxbTm1dOjk5ODYsW2JlXTo5NzI5LFtEd106OTk4NSxbTGxdOjk5ODd9O2Z1bmN0aW9uIGR0KEUsdyxxKXtpZihxPyhuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwkW3cud3JhcFNdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywkW3cud3JhcFRdKSwoRT09PTMyODc5fHxFPT09MzU4NjYpJiZuLnRleFBhcmFtZXRlcmkoRSwzMjg4MiwkW3cud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCxsdFt3Lm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLGx0W3cubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDMsMzMwNzEpLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLDMzMDcxKSwody53cmFwUyE9PVZlfHx3LndyYXBUIT09VmUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDAsdHQody5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MSx0dCh3Lm1pbkZpbHRlcikpLHcubWluRmlsdGVyIT09ZmUmJncubWluRmlsdGVyIT09YmUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSx0LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik9PT0hMCl7bGV0IHJ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZih3LnR5cGU9PT1VaSYmdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITF8fGE9PT0hMSYmdy50eXBlPT09VXImJnQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITEpcmV0dXJuOyh3LmFuaXNvdHJvcHk+MXx8aS5nZXQodykuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoRSxydC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbih3LmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5PXcuYW5pc290cm9weSl9fWZ1bmN0aW9uIHh0KEUsdyl7RS5fX3dlYmdsSW5pdD09PXZvaWQgMCYmKEUuX193ZWJnbEluaXQ9ITAsdy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixYKSxFLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLG8ubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGsoRSx3LHEpe2xldCBydD0zNTUzO3cuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihydD0zNTg2Niksdy5pc0RhdGFUZXh0dXJlM0QmJihydD0zMjg3OSkseHQoRSx3KSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrcSksZS5iaW5kVGV4dHVyZShydCxFLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLHcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsdy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsdy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGd0PV8odykmJmIody5pbWFnZSk9PT0hMSxXPXAody5pbWFnZSxndCwhMSx1KTtXPXZ0KHcsVyk7bGV0IF90PWIoVyl8fGEseXQ9cy5jb252ZXJ0KHcuZm9ybWF0LHcuZW5jb2RpbmcpLHV0PXMuY29udmVydCh3LnR5cGUpLGN0PUEody5pbnRlcm5hbEZvcm1hdCx5dCx1dCx3LmVuY29kaW5nLHcuaXNWaWRlb1RleHR1cmUpO2R0KHJ0LHcsX3QpO2xldCBBdCxQPXcubWlwbWFwcyxwdD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAsaHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsRXQ9SCh3LFcsX3QpO2lmKHcuaXNEZXB0aFRleHR1cmUpY3Q9NjQwMixhP3cudHlwZT09PVVpP2N0PTM2MDEyOncudHlwZT09PVFhP2N0PTMzMTkwOncudHlwZT09PUJyP2N0PTM1MDU2OmN0PTMzMTg5OncudHlwZT09PVVpJiZjb25zb2xlLmVycm9yKCJXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4iKSx3LmZvcm1hdD09PU9pJiZjdD09PTY0MDImJncudHlwZSE9PW5vJiZ3LnR5cGUhPT1RYSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLHcudHlwZT1ubyx1dD1zLmNvbnZlcnQody50eXBlKSksdy5mb3JtYXQ9PT1WciYmY3Q9PT02NDAyJiYoY3Q9MzQwNDEsdy50eXBlIT09QnImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPUJyLHV0PXMuY29udmVydCh3LnR5cGUpKSkscHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxjdCxXLndpZHRoLFcuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxudWxsKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZSlpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSk7dy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBwdD8oaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVy53aWR0aCxXLmhlaWdodCx5dCx1dCxXLmRhdGEpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxXLmRhdGEpO2Vsc2UgaWYody5pc0NvbXByZXNzZWRUZXh0dXJlKXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSx3LmZvcm1hdCE9PVJlP3l0IT09bnVsbD9wdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LEF0LmRhdGEpOmUuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLEF0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEF0LndpZHRoLEF0LmhlaWdodCx5dCx1dCxBdC5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLHl0LHV0LEF0LmRhdGEpfWVsc2UgaWYody5pc0RhdGFUZXh0dXJlMkRBcnJheSlwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDM1ODY2LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUzRClwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDMyODc5LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzMjg3OSwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRnJhbWVidWZmZXJUZXh0dXJlKXB0JiZodD9lLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYoUC5sZW5ndGg+MCYmX3Qpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLHl0LHV0LEF0KTplLnRleEltYWdlMkQoMzU1MyxZLGN0LHl0LHV0LEF0KTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCx5dCx1dCxXKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCx5dCx1dCxXKTtTKHcsX3QpJiZMKHJ0KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBGdChFLHcscSl7aWYody5pbWFnZS5sZW5ndGghPT02KXJldHVybjt4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKDM0MDY3LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgcnQ9dyYmKHcuaXNDb21wcmVzc2VkVGV4dHVyZXx8dy5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxndD13LmltYWdlWzBdJiZ3LmltYWdlWzBdLmlzRGF0YVRleHR1cmUsVz1bXTtmb3IobGV0IFk9MDtZPDY7WSsrKSFydCYmIWd0P1dbWV09cCh3LmltYWdlW1ldLCExLCEwLGMpOldbWV09Z3Q/dy5pbWFnZVtZXS5pbWFnZTp3LmltYWdlW1ldLFdbWV09dnQodyxXW1ldKTtsZXQgX3Q9V1swXSx5dD1iKF90KXx8YSx1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9YSYmdy5pc1ZpZGVvVGV4dHVyZSE9PSEwLHB0PUUuX192ZXJzaW9uPT09dm9pZCAwLGh0PUgodyxfdCx5dCk7ZHQoMzQwNjcsdyx5dCk7bGV0IEV0O2lmKHJ0KXtQJiZwdCYmZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsX3Qud2lkdGgsX3QuaGVpZ2h0KTtmb3IobGV0IFk9MDtZPDY7WSsrKXtFdD1XW1ldLm1pcG1hcHM7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQgRHQ9RXRbTXRdO3cuZm9ybWF0IT09UmU/dXQhPT1udWxsP1A/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsRHQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStZLE10LEF0LER0LndpZHRoLER0LmhlaWdodCwwLER0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCkiKTpQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsY3QsRHQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsdXQsY3QsRHQuZGF0YSl9fX1lbHNle0V0PXcubWlwbWFwcyxQJiZwdCYmKEV0Lmxlbmd0aD4wJiZodCsrLGUudGV4U3RvcmFnZTJEKDM0MDY3LGh0LEF0LFdbMF0ud2lkdGgsV1swXS5oZWlnaHQpKTtmb3IobGV0IFk9MDtZPDY7WSsrKWlmKGd0KXtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLDAsMCwwLFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsdXQsY3QsV1tZXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsMCx1dCxjdCxXW1ldLmRhdGEpO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IGp0PUV0W010XS5pbWFnZVtZXS5pbWFnZTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLGp0LndpZHRoLGp0LmhlaWdodCx1dCxjdCxqdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LGp0LndpZHRoLGp0LmhlaWdodCwwLHV0LGN0LGp0LmRhdGEpfX1lbHNle1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsdXQsY3QsV1tZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksMCxBdCx1dCxjdCxXW1ldKTtmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSxNdCsxLDAsMCx1dCxjdCxEdC5pbWFnZVtZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQrMSxBdCx1dCxjdCxEdC5pbWFnZVtZXSl9fX1TKHcseXQpJiZMKDM0MDY3KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBtdChFLHcscSxydCxndCl7bGV0IFc9cy5jb252ZXJ0KHEuZm9ybWF0LHEuZW5jb2RpbmcpLF90PXMuY29udmVydChxLnR5cGUpLHl0PUEocS5pbnRlcm5hbEZvcm1hdCxXLF90LHEuZW5jb2RpbmcpO2kuZ2V0KHcpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGd0PT09MzI4Nzl8fGd0PT09MzU4NjY/ZS50ZXhJbWFnZTNEKGd0LDAseXQsdy53aWR0aCx3LmhlaWdodCx3LmRlcHRoLDAsVyxfdCxudWxsKTplLnRleEltYWdlMkQoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LDAsVyxfdCxudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHJ0LGd0LGkuZ2V0KHEpLl9fd2ViZ2xUZXh0dXJlLDAsaXQodykpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gU3QoRSx3LHEpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxFKSx3LmRlcHRoQnVmZmVyJiYhdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9MzMxODk7aWYocXx8dy51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBndD13LmRlcHRoVGV4dHVyZTtndCYmZ3QuaXNEZXB0aFRleHR1cmUmJihndC50eXBlPT09VWk/cnQ9MzYwMTI6Z3QudHlwZT09PVFhJiYocnQ9MzMxOTApKTtsZXQgVz1pdCh3KTt3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxXLHJ0LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscnQsdy53aWR0aCx3LmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxFKX1lbHNlIGlmKHcuZGVwdGhCdWZmZXImJncuc3RlbmNpbEJ1ZmZlcil7bGV0IHJ0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSx3LndpZHRoLHcuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLEUpfWVsc2V7bGV0IHJ0PXcuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3cudGV4dHVyZVswXTp3LnRleHR1cmUsZ3Q9cy5jb252ZXJ0KHJ0LmZvcm1hdCxydC5lbmNvZGluZyksVz1zLmNvbnZlcnQocnQudHlwZSksX3Q9QShydC5pbnRlcm5hbEZvcm1hdCxndCxXLHJ0LmVuY29kaW5nKSx5dD1pdCh3KTtxJiZ3LnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTp3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsX3Qsdy53aWR0aCx3LmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIEIoRSx3KXtpZih3JiZ3LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXRocm93IG5ldyBFcnJvcigiRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEUpLCEody5kZXB0aFRleHR1cmUmJncuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KHcuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8dy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT13LndpZHRofHx3LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT13LmhlaWdodCkmJih3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD13LndpZHRoLHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD13LmhlaWdodCx3LmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVih3LmRlcHRoVGV4dHVyZSwwKTtsZXQgcnQ9aS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGd0PWl0KHcpO2lmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PU9pKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxydCwwKTtlbHNlIGlmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PVZyKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxydCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gc3QoRSl7bGV0IHc9aS5nZXQoRSkscT1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYoRS5kZXB0aFRleHR1cmUmJiF3Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKHEpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO0Iody5fX3dlYmdsRnJhbWVidWZmZXIsRSl9ZWxzZSBpZihxKXt3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IHJ0PTA7cnQ8NjtydCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHcuX193ZWJnbEZyYW1lYnVmZmVyW3J0XSksdy5fX3dlYmdsRGVwdGhidWZmZXJbcnRdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXJbcnRdLEUsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXIpLHcuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXIsRSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gbnQoRSx3LHEpe2xldCBydD1pLmdldChFKTt3IT09dm9pZCAwJiZtdChydC5fX3dlYmdsRnJhbWVidWZmZXIsRSxFLnRleHR1cmUsMzYwNjQsMzU1MykscSE9PXZvaWQgMCYmc3QoRSl9ZnVuY3Rpb24gQyhFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHkpLEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyE9PSEwJiYocnQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihydC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSkscnQuX192ZXJzaW9uPXcudmVyc2lvbixvLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgZ3Q9RS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFc9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITAsX3Q9dy5pc0RhdGFUZXh0dXJlM0R8fHcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseXQ9YihFKXx8YTtpZihndCl7cS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCB1dD0wO3V0PDY7dXQrKylxLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYocS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFcpaWYoci5kcmF3QnVmZmVycyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPWkuZ2V0KHV0W2N0XSk7UC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKFAuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihFLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCkscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCB1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9aXQoRSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsUCxBdCxFLndpZHRoLEUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLEUuZGVwdGhCdWZmZXImJihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFN0KHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLEUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGd0KXtlLmJpbmRUZXh0dXJlKDM0MDY3LHJ0Ll9fd2ViZ2xUZXh0dXJlKSxkdCgzNDA2Nyx3LHl0KTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKW10KHEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XSxFLHcsMzYwNjQsMzQwNjkrdXQpO1Modyx5dCkmJkwoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPXV0W2N0XSxwdD1pLmdldChQKTtlLmJpbmRUZXh0dXJlKDM1NTMscHQuX193ZWJnbFRleHR1cmUpLGR0KDM1NTMsUCx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSxQLDM2MDY0K2N0LDM1NTMpLFMoUCx5dCkmJkwoMzU1Myl9ZS51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgdXQ9MzU1MztfdCYmKGE/dXQ9dy5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLGUuYmluZFRleHR1cmUodXQscnQuX193ZWJnbFRleHR1cmUpLGR0KHV0LHcseXQpLG10KHEuX193ZWJnbEZyYW1lYnVmZmVyLEUsdywzNjA2NCx1dCksUyh3LHl0KSYmTCh1dCksZS51bmJpbmRUZXh0dXJlKCl9RS5kZXB0aEJ1ZmZlciYmc3QoRSl9ZnVuY3Rpb24gaihFKXtsZXQgdz1iKEUpfHxhLHE9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/RS50ZXh0dXJlOltFLnRleHR1cmVdO2ZvcihsZXQgcnQ9MCxndD1xLmxlbmd0aDtydDxndDtydCsrKXtsZXQgVz1xW3J0XTtpZihTKFcsdykpe2xldCBfdD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PzM0MDY3OjM1NTMseXQ9aS5nZXQoVykuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShfdCx5dCksTChfdCksZS51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBKKEUpe2lmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe2xldCB3PUUud2lkdGgscT1FLmhlaWdodCxydD0xNjM4NCxndD1bMzYwNjRdLFc9RS5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O0UuZGVwdGhCdWZmZXImJmd0LnB1c2goVyksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weXx8KEUuZGVwdGhCdWZmZXImJihydHw9MjU2KSxFLnN0ZW5jaWxCdWZmZXImJihydHw9MTAyNCkpO2xldCBfdD1pLmdldChFKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtXXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1ddKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHcscSwwLDAsdyxxLHJ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGd0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gaXQoRSl7cmV0dXJuIGEmJihFLnVzZVJlbmRlcmJ1ZmZlcnx8RS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsRS5zYW1wbGVzKTowfWZ1bmN0aW9uIGV0KEUpe2xldCB3PW8ucmVuZGVyLmZyYW1lO2cuZ2V0KEUpIT09dyYmKGcuc2V0KEUsdyksRS51cGRhdGUoKSl9ZnVuY3Rpb24gdnQoRSx3KXtsZXQgcT1FLmVuY29kaW5nLHJ0PUUuZm9ybWF0LGd0PUUudHlwZTtyZXR1cm4gRS5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fEUuaXNWaWRlb1RleHR1cmU9PT0hMHx8RS5mb3JtYXQ9PT1IdXx8cSE9PXJpJiYocT09PSR0P2E9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiZydD09PVJlPyhFLmZvcm1hdD1IdSxFLm1pbkZpbHRlcj1iZSxFLmdlbmVyYXRlTWlwbWFwcz0hMSk6dz1Obi5zUkdCVG9MaW5lYXIodyk6KHJ0IT09UmV8fGd0IT09ZWkpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixxKSksd31sZXQgYnQ9ITEsSXQ9ITE7ZnVuY3Rpb24gWnQoRSx3KXtFJiZFLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihidD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYnQ9ITApLEU9RS50ZXh0dXJlKSxWKEUsdyl9ZnVuY3Rpb24gcXQoRSx3KXtFJiZFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoSXQ9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxJdD0hMCksRT1FLnRleHR1cmUpLEcoRSx3KX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9Tix0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vix0aGlzLnNldFRleHR1cmUyREFycmF5PVEsdGhpcy5zZXRUZXh0dXJlM0Q9YXQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1HLHRoaXMucmViaW5kVGV4dHVyZXM9bnQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1DLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWosdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1KLHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1zdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPW10LHRoaXMuc2FmZVNldFRleHR1cmUyRD1adCx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1xdH1mdW5jdGlvbiBMRShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtmdW5jdGlvbiByKHMsbz1udWxsKXtsZXQgYTtpZihzPT09ZWkpcmV0dXJuIDUxMjE7aWYocz09PXp3KXJldHVybiAzMjgxOTtpZihzPT09VXcpcmV0dXJuIDMyODIwO2lmKHM9PT1JdylyZXR1cm4gNTEyMDtpZihzPT09TncpcmV0dXJuIDUxMjI7aWYocz09PW5vKXJldHVybiA1MTIzO2lmKHM9PT1GdylyZXR1cm4gNTEyNDtpZihzPT09UWEpcmV0dXJuIDUxMjU7aWYocz09PVVpKXJldHVybiA1MTI2O2lmKHM9PT1VcilyZXR1cm4gaT81MTMxOihhPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksYSE9PW51bGw/YS5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihzPT09QncpcmV0dXJuIDY0MDY7aWYocz09PVJlKXJldHVybiA2NDA4O2lmKHM9PT1PdylyZXR1cm4gNjQwOTtpZihzPT09a3cpcmV0dXJuIDY0MTA7aWYocz09PU9pKXJldHVybiA2NDAyO2lmKHM9PT1WcilyZXR1cm4gMzQwNDE7aWYocz09PUh3KXJldHVybiA2NDAzO2lmKHM9PT1IdSlyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxhIT09bnVsbD9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYocz09PVZ3KXJldHVybiAzNjI0NDtpZihzPT09R3cpcmV0dXJuIDMzMzE5O2lmKHM9PT1XdylyZXR1cm4gMzMzMjA7aWYocz09PXF3KXJldHVybiAzNjI0OTtpZihzPT09S2N8fHM9PT1RY3x8cz09PWpjfHxzPT09dHUpaWYobz09PSR0KWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxhIT09bnVsbCl7aWYocz09PUtjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7ZWxzZSBpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihzPT09UWMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYocz09PWpjKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKHM9PT10dSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1GbXx8cz09PXptfHxzPT09VW18fHM9PT1CbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxhIT09bnVsbCl7aWYocz09PUZtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PXptKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYocz09PVVtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKHM9PT1CbSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1YdylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxhIT09bnVsbD9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihzPT09T218fHM9PT1rbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksYSE9PW51bGwpe2lmKHM9PT1PbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYocz09PWttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09SG18fHM9PT1WbXx8cz09PUdtfHxzPT09V218fHM9PT1xbXx8cz09PVhtfHxzPT09WW18fHM9PT1abXx8cz09PUptfHxzPT09JG18fHM9PT1LbXx8cz09PVFtfHxzPT09am18fHM9PT10ZylpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLGEhPT1udWxsKXtpZihzPT09SG0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYocz09PVZtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKHM9PT1HbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtpZihzPT09V20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYocz09PXFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKHM9PT1YbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtpZihzPT09WW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYocz09PVptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKHM9PT1KbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO2lmKHM9PT0kbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKHM9PT1LbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKHM9PT1RbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7aWYocz09PWptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihzPT09dGcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PWVnKWlmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxhIT09bnVsbCl7aWYocz09PWVnKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09QnIpcmV0dXJuIGk/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxhIT09bnVsbD9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0OnJ9fXZhciBobD1jbGFzcyBleHRlbmRzIFNle2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtobC5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgQmk9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtCaS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgUEU9e3R5cGU6Im1vdmUifSxRcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgQmksdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBCaSx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgVCksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IEJpLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwscz1udWxsLG89bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJmUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihhIT09bnVsbCYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksciE9PW51bGwmJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KFBFKSkpLGMmJnQuaGFuZCl7bz0hMDtmb3IobGV0IHggb2YgdC5oYW5kLnZhbHVlcygpKXtsZXQgdj1lLmdldEpvaW50UG9zZSh4LGkpO2lmKGMuam9pbnRzW3guam9pbnROYW1lXT09PXZvaWQgMCl7bGV0IHA9bmV3IEJpO3AubWF0cml4QXV0b1VwZGF0ZT0hMSxwLnZpc2libGU9ITEsYy5qb2ludHNbeC5qb2ludE5hbWVdPXAsYy5hZGQocCl9bGV0IG09Yy5qb2ludHNbeC5qb2ludE5hbWVdO3YhPT1udWxsJiYobS5tYXRyaXguZnJvbUFycmF5KHYudHJhbnNmb3JtLm1hdHJpeCksbS5tYXRyaXguZGVjb21wb3NlKG0ucG9zaXRpb24sbS5yb3RhdGlvbixtLnNjYWxlKSxtLmpvaW50UmFkaXVzPXYucmFkaXVzKSxtLnZpc2libGU9diE9PW51bGx9bGV0IHU9Yy5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXSxoPWMuam9pbnRzWyJ0aHVtYi10aXAiXSxmPXUucG9zaXRpb24uZGlzdGFuY2VUbyhoLnBvc2l0aW9uKSxkPS4wMixnPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPmQrZz8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJmY8PWQtZyYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbCE9PW51bGwmJnQuZ3JpcFNwYWNlJiYocz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSkscyE9PW51bGwmJihsLm1hdHJpeC5mcm9tQXJyYXkocy50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLHMubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KHMubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLHMuYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHMuYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gYSE9PW51bGwmJihhLnZpc2libGU9ciE9PW51bGwpLGwhPT1udWxsJiYobC52aXNpYmxlPXMhPT1udWxsKSxjIT09bnVsbCYmKGMudmlzaWJsZT1vIT09bnVsbCksdGhpc319LHVvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSl7aWYodT11IT09dm9pZCAwP3U6T2ksdSE9PU9pJiZ1IT09VnIpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO2k9PT12b2lkIDAmJnU9PT1PaSYmKGk9bm8pLGk9PT12b2lkIDAmJnU9PT1WciYmKGk9QnIpLHN1cGVyKG51bGwscixzLG8sYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj1hIT09dm9pZCAwP2E6ZmUsdGhpcy5taW5GaWx0ZXI9bCE9PXZvaWQgMD9sOmZlLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTt1by5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIFp1PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLHM9MSxvPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLGQ9ITEsZz1udWxsLHg9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLHY9bnVsbCxtPW51bGwscD1bXSxiPW5ldyBNYXAsXz1uZXcgU2U7Xy5sYXllcnMuZW5hYmxlKDEpLF8udmlld3BvcnQ9bmV3IFd0O2xldCBTPW5ldyBTZTtTLmxheWVycy5lbmFibGUoMiksUy52aWV3cG9ydD1uZXcgV3Q7bGV0IEw9W18sU10sQT1uZXcgaGw7QS5sYXllcnMuZW5hYmxlKDEpLEEubGF5ZXJzLmVuYWJsZSgyKTtsZXQgSD1udWxsLHR0PW51bGw7dGhpcy5jYW1lcmFBdXRvVXBkYXRlPSEwLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldEhhbmRTcGFjZSgpfTtmdW5jdGlvbiBYKEcpe2xldCAkPWIuZ2V0KEcuaW5wdXRTb3VyY2UpOyQmJiQuZGlzcGF0Y2hFdmVudCh7dHlwZTpHLnR5cGUsZGF0YTpHLmlucHV0U291cmNlfSl9ZnVuY3Rpb24geSgpe2IuZm9yRWFjaChmdW5jdGlvbihHLCQpe0cuZGlzY29ubmVjdCgkKX0pLGIuY2xlYXIoKSxIPW51bGwsdHQ9bnVsbCx0LnNldFJlbmRlclRhcmdldCh2KSxmPW51bGwsaD1udWxsLHU9bnVsbCxyPW51bGwsbT1udWxsLGF0LnN0b3AoKSxpLmlzUHJlc2VudGluZz0hMSxpLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKEcpe3M9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbihHKXthPUcsaS5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oRyl7cmV0dXJuIGhmKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihyPUcsciE9PW51bGwpe2lmKHY9dC5nZXRSZW5kZXJUYXJnZXQoKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJlbmQiLHkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixSKSx4LnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgZS5tYWtlWFJDb21wYXRpYmxlKCkpLHIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgJD17YW50aWFsaWFzOnIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP3guYW50aWFsaWFzOiEwLGFscGhhOnguYWxwaGEsZGVwdGg6eC5kZXB0aCxzdGVuY2lsOnguc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOnN9O2Y9bmV3IFhSV2ViR0xMYXllcihyLGUsJCksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOmZ9KSxtPW5ldyBOZShmLmZyYW1lYnVmZmVyV2lkdGgsZi5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pfWVsc2V7ZD14LmFudGlhbGlhcztsZXQgJD1udWxsLGx0PW51bGwsZHQ9bnVsbDt4LmRlcHRoJiYoZHQ9eC5zdGVuY2lsPzM1MDU2OjMzMTkwLCQ9eC5zdGVuY2lsP1ZyOk9pLGx0PXguc3RlbmNpbD9Ccjpubyk7bGV0IHh0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09JHQ/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6ZHQsc2NhbGVGYWN0b3I6c307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKHh0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSksZD9tPW5ldyBzbyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpSZSx0eXBlOmVpLGRlcHRoVGV4dHVyZTpuZXcgdW8oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCQpLHN0ZW5jaWxCdWZmZXI6eC5zdGVuY2lsLGlnbm9yZURlcHRoOmguaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm09bmV3IE5lKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9bS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLG89eWllbGQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksYXQuc2V0Q29udGV4dChyKSxhdC5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBSKEcpe2xldCAkPXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgbHQ9MDtsdDxwLmxlbmd0aDtsdCsrKWIuc2V0KCRbbHRdLHBbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Ry5yZW1vdmVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5yZW1vdmVkW2x0XSx4dD1iLmdldChkdCk7eHQmJih4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6ZHR9KSxiLmRlbGV0ZShkdCkpfWZvcihsZXQgbHQ9MDtsdDxHLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5hZGRlZFtsdF0seHQ9Yi5nZXQoZHQpO3h0JiZ4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6ZHR9KX19bGV0IEQ9bmV3IFQsRj1uZXcgVDtmdW5jdGlvbiB6KEcsJCxsdCl7RC5zZXRGcm9tTWF0cml4UG9zaXRpb24oJC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24obHQubWF0cml4V29ybGQpO2xldCBkdD1ELmRpc3RhbmNlVG8oRikseHQ9JC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLGs9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxGdD14dFsxNF0vKHh0WzEwXS0xKSxtdD14dFsxNF0vKHh0WzEwXSsxKSxTdD0oeHRbOV0rMSkveHRbNV0sQj0oeHRbOV0tMSkveHRbNV0sc3Q9KHh0WzhdLTEpL3h0WzBdLG50PShrWzhdKzEpL2tbMF0sQz1GdCpzdCxqPUZ0Km50LEo9ZHQvKC1zdCtudCksaXQ9Siotc3Q7JC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy50cmFuc2xhdGVYKGl0KSxHLnRyYW5zbGF0ZVooSiksRy5tYXRyaXhXb3JsZC5jb21wb3NlKEcucG9zaXRpb24sRy5xdWF0ZXJuaW9uLEcuc2NhbGUpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGV0PUZ0K0osdnQ9bXQrSixidD1DLWl0LEl0PWorKGR0LWl0KSxadD1TdCptdC92dCpldCxxdD1CKm10L3Z0KmV0O0cucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoYnQsSXQsWnQscXQsZXQsdnQpfWZ1bmN0aW9uIE4oRywkKXskPT09bnVsbD9HLm1hdHJpeFdvcmxkLmNvcHkoRy5tYXRyaXgpOkcubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcygkLm1hdHJpeFdvcmxkLEcubWF0cml4KSxHLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KEcubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKEcpe2lmKHI9PT1udWxsKXJldHVybjtBLm5lYXI9Uy5uZWFyPV8ubmVhcj1HLm5lYXIsQS5mYXI9Uy5mYXI9Xy5mYXI9Ry5mYXIsKEghPT1BLm5lYXJ8fHR0IT09QS5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOkEubmVhcixkZXB0aEZhcjpBLmZhcn0pLEg9QS5uZWFyLHR0PUEuZmFyKTtsZXQgJD1HLnBhcmVudCxsdD1BLmNhbWVyYXM7TihBLCQpO2ZvcihsZXQgeHQ9MDt4dDxsdC5sZW5ndGg7eHQrKylOKGx0W3h0XSwkKTtBLm1hdHJpeFdvcmxkLmRlY29tcG9zZShBLnBvc2l0aW9uLEEucXVhdGVybmlvbixBLnNjYWxlKSxHLnBvc2l0aW9uLmNvcHkoQS5wb3NpdGlvbiksRy5xdWF0ZXJuaW9uLmNvcHkoQS5xdWF0ZXJuaW9uKSxHLnNjYWxlLmNvcHkoQS5zY2FsZSksRy5tYXRyaXguY29weShBLm1hdHJpeCksRy5tYXRyaXhXb3JsZC5jb3B5KEEubWF0cml4V29ybGQpO2xldCBkdD1HLmNoaWxkcmVuO2ZvcihsZXQgeHQ9MCxrPWR0Lmxlbmd0aDt4dDxrO3h0KyspZHRbeHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtsdC5sZW5ndGg9PT0yP3ooQSxfLFMpOkEucHJvamVjdGlvbk1hdHJpeC5jb3B5KF8ucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKEcpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1HKSxmIT09bnVsbCYmZi5maXhlZEZvdmVhdGlvbiE9PXZvaWQgMCYmKGYuZml4ZWRGb3ZlYXRpb249Ryl9O2xldCBWPW51bGw7ZnVuY3Rpb24gUShHLCQpe2lmKGM9JC5nZXRWaWV3ZXJQb3NlKG8pLGc9JCxjIT09bnVsbCl7bGV0IGR0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKG0sZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQobSkpO2xldCB4dD0hMTtkdC5sZW5ndGghPT1BLmNhbWVyYXMubGVuZ3RoJiYoQS5jYW1lcmFzLmxlbmd0aD0wLHh0PSEwKTtmb3IobGV0IGs9MDtrPGR0Lmxlbmd0aDtrKyspe2xldCBGdD1kdFtrXSxtdD1udWxsO2lmKGYhPT1udWxsKW10PWYuZ2V0Vmlld3BvcnQoRnQpO2Vsc2V7bGV0IEI9dS5nZXRWaWV3U3ViSW1hZ2UoaCxGdCk7bXQ9Qi52aWV3cG9ydCxrPT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMobSxCLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpCLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KG0pKX1sZXQgU3Q9TFtrXTtTdC5tYXRyaXguZnJvbUFycmF5KEZ0LnRyYW5zZm9ybS5tYXRyaXgpLFN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEZ0LnByb2plY3Rpb25NYXRyaXgpLFN0LnZpZXdwb3J0LnNldChtdC54LG10LnksbXQud2lkdGgsbXQuaGVpZ2h0KSxrPT09MCYmQS5tYXRyaXguY29weShTdC5tYXRyaXgpLHh0PT09ITAmJkEuY2FtZXJhcy5wdXNoKFN0KX19bGV0IGx0PXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgZHQ9MDtkdDxwLmxlbmd0aDtkdCsrKXtsZXQgeHQ9cFtkdF0saz1sdFtkdF07eHQudXBkYXRlKGssJCxvKX1WJiZWKEcsJCksZz1udWxsfWxldCBhdD1uZXcgZzA7YXQuc2V0QW5pbWF0aW9uTG9vcChRKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oRyl7Vj1HfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gREUobil7ZnVuY3Rpb24gdChtLHApe20uZm9nQ29sb3IudmFsdWUuY29weShwLmNvbG9yKSxwLmlzRm9nPyhtLmZvZ05lYXIudmFsdWU9cC5uZWFyLG0uZm9nRmFyLnZhbHVlPXAuZmFyKTpwLmlzRm9nRXhwMiYmKG0uZm9nRGVuc2l0eS52YWx1ZT1wLmRlbnNpdHkpfWZ1bmN0aW9uIGUobSxwLGIsXyxTKXtwLmlzTWVzaEJhc2ljTWF0ZXJpYWw/aShtLHApOnAuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhpKG0scCksbChtLHApKTpwLmlzTWVzaFRvb25NYXRlcmlhbD8oaShtLHApLHUobSxwKSk6cC5pc01lc2hQaG9uZ01hdGVyaWFsPyhpKG0scCksYyhtLHApKTpwLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkobSxwKSxwLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZihtLHAsUyk6aChtLHApKTpwLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKG0scCksZChtLHApKTpwLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGkobSxwKSxnKG0scCkpOnAuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oaShtLHApLHgobSxwKSk6cC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaShtLHApLHYobSxwKSk6cC5pc0xpbmVCYXNpY01hdGVyaWFsPyhyKG0scCkscC5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcyhtLHApKTpwLmlzUG9pbnRzTWF0ZXJpYWw/byhtLHAsYixfKTpwLmlzU3ByaXRlTWF0ZXJpYWw/YShtLHApOnAuaXNTaGFkb3dNYXRlcmlhbD8obS5jb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHkpOnAuaXNTaGFkZXJNYXRlcmlhbCYmKHAudW5pZm9ybXNOZWVkVXBkYXRlPSExKX1mdW5jdGlvbiBpKG0scCl7bS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxwLmNvbG9yJiZtLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxwLmVtaXNzaXZlJiZtLmVtaXNzaXZlLnZhbHVlLmNvcHkocC5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIocC5lbWlzc2l2ZUludGVuc2l0eSkscC5tYXAmJihtLm1hcC52YWx1ZT1wLm1hcCkscC5hbHBoYU1hcCYmKG0uYWxwaGFNYXAudmFsdWU9cC5hbHBoYU1hcCkscC5zcGVjdWxhck1hcCYmKG0uc3BlY3VsYXJNYXAudmFsdWU9cC5zcGVjdWxhck1hcCkscC5hbHBoYVRlc3Q+MCYmKG0uYWxwaGFUZXN0LnZhbHVlPXAuYWxwaGFUZXN0KTtsZXQgYj1uLmdldChwKS5lbnZNYXA7YiYmKG0uZW52TWFwLnZhbHVlPWIsbS5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmYi5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLG0ucmVmbGVjdGl2aXR5LnZhbHVlPXAucmVmbGVjdGl2aXR5LG0uaW9yLnZhbHVlPXAuaW9yLG0ucmVmcmFjdGlvblJhdGlvLnZhbHVlPXAucmVmcmFjdGlvblJhdGlvKSxwLmxpZ2h0TWFwJiYobS5saWdodE1hcC52YWx1ZT1wLmxpZ2h0TWFwLG0ubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9cC5saWdodE1hcEludGVuc2l0eSkscC5hb01hcCYmKG0uYW9NYXAudmFsdWU9cC5hb01hcCxtLmFvTWFwSW50ZW5zaXR5LnZhbHVlPXAuYW9NYXBJbnRlbnNpdHkpO2xldCBfO3AubWFwP189cC5tYXA6cC5zcGVjdWxhck1hcD9fPXAuc3BlY3VsYXJNYXA6cC5kaXNwbGFjZW1lbnRNYXA/Xz1wLmRpc3BsYWNlbWVudE1hcDpwLm5vcm1hbE1hcD9fPXAubm9ybWFsTWFwOnAuYnVtcE1hcD9fPXAuYnVtcE1hcDpwLnJvdWdobmVzc01hcD9fPXAucm91Z2huZXNzTWFwOnAubWV0YWxuZXNzTWFwP189cC5tZXRhbG5lc3NNYXA6cC5hbHBoYU1hcD9fPXAuYWxwaGFNYXA6cC5lbWlzc2l2ZU1hcD9fPXAuZW1pc3NpdmVNYXA6cC5jbGVhcmNvYXRNYXA/Xz1wLmNsZWFyY29hdE1hcDpwLmNsZWFyY29hdE5vcm1hbE1hcD9fPXAuY2xlYXJjb2F0Tm9ybWFsTWFwOnAuY2xlYXJjb2F0Um91Z2huZXNzTWFwP189cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA6cC5zcGVjdWxhckludGVuc2l0eU1hcD9fPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXA6cC5zcGVjdWxhckNvbG9yTWFwP189cC5zcGVjdWxhckNvbG9yTWFwOnAudHJhbnNtaXNzaW9uTWFwP189cC50cmFuc21pc3Npb25NYXA6cC50aGlja25lc3NNYXA/Xz1wLnRoaWNrbmVzc01hcDpwLnNoZWVuQ29sb3JNYXA/Xz1wLnNoZWVuQ29sb3JNYXA6cC5zaGVlblJvdWdobmVzc01hcCYmKF89cC5zaGVlblJvdWdobmVzc01hcCksXyE9PXZvaWQgMCYmKF8uaXNXZWJHTFJlbmRlclRhcmdldCYmKF89Xy50ZXh0dXJlKSxfLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmXy51cGRhdGVNYXRyaXgoKSxtLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoXy5tYXRyaXgpKTtsZXQgUztwLmFvTWFwP1M9cC5hb01hcDpwLmxpZ2h0TWFwJiYoUz1wLmxpZ2h0TWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoUy5tYXRyaXgpKX1mdW5jdGlvbiByKG0scCl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eX1mdW5jdGlvbiBzKG0scCl7bS5kYXNoU2l6ZS52YWx1ZT1wLmRhc2hTaXplLG0udG90YWxTaXplLnZhbHVlPXAuZGFzaFNpemUrcC5nYXBTaXplLG0uc2NhbGUudmFsdWU9cC5zY2FsZX1mdW5jdGlvbiBvKG0scCxiLF8pe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5zaXplLnZhbHVlPXAuc2l6ZSpiLG0uc2NhbGUudmFsdWU9XyouNSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBTO3AubWFwP1M9cC5tYXA6cC5hbHBoYU1hcCYmKFM9cC5hbHBoYU1hcCksUyE9PXZvaWQgMCYmKFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIGEobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LG0ucm90YXRpb24udmFsdWU9cC5yb3RhdGlvbixwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiO3AubWFwP2I9cC5tYXA6cC5hbHBoYU1hcCYmKGI9cC5hbHBoYU1hcCksYiE9PXZvaWQgMCYmKGIubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZiLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShiLm1hdHJpeCkpfWZ1bmN0aW9uIGwobSxwKXtwLmVtaXNzaXZlTWFwJiYobS5lbWlzc2l2ZU1hcC52YWx1ZT1wLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBjKG0scCl7bS5zcGVjdWxhci52YWx1ZS5jb3B5KHAuc3BlY3VsYXIpLG0uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHAuc2hpbmluZXNzLDFlLTQpLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gdShtLHApe3AuZ3JhZGllbnRNYXAmJihtLmdyYWRpZW50TWFwLnZhbHVlPXAuZ3JhZGllbnRNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gaChtLHApe20ucm91Z2huZXNzLnZhbHVlPXAucm91Z2huZXNzLG0ubWV0YWxuZXNzLnZhbHVlPXAubWV0YWxuZXNzLHAucm91Z2huZXNzTWFwJiYobS5yb3VnaG5lc3NNYXAudmFsdWU9cC5yb3VnaG5lc3NNYXApLHAubWV0YWxuZXNzTWFwJiYobS5tZXRhbG5lc3NNYXAudmFsdWU9cC5tZXRhbG5lc3NNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyksbi5nZXQocCkuZW52TWFwJiYobS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9cC5lbnZNYXBJbnRlbnNpdHkpfWZ1bmN0aW9uIGYobSxwLGIpe2gobSxwKSxtLmlvci52YWx1ZT1wLmlvcixwLnNoZWVuPjAmJihtLnNoZWVuQ29sb3IudmFsdWUuY29weShwLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHAuc2hlZW4pLG0uc2hlZW5Sb3VnaG5lc3MudmFsdWU9cC5zaGVlblJvdWdobmVzcyxwLnNoZWVuQ29sb3JNYXAmJihtLnNoZWVuQ29sb3JNYXAudmFsdWU9cC5zaGVlbkNvbG9yTWFwKSxwLnNoZWVuUm91Z2huZXNzTWFwJiYobS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1wLnNoZWVuUm91Z2huZXNzTWFwKSkscC5jbGVhcmNvYXQ+MCYmKG0uY2xlYXJjb2F0LnZhbHVlPXAuY2xlYXJjb2F0LG0uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXAuY2xlYXJjb2F0Um91Z2huZXNzLHAuY2xlYXJjb2F0TWFwJiYobS5jbGVhcmNvYXRNYXAudmFsdWU9cC5jbGVhcmNvYXRNYXApLHAuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYobS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHAuY2xlYXJjb2F0Tm9ybWFsTWFwJiYobS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLG0uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXAuY2xlYXJjb2F0Tm9ybWFsTWFwLHAuc2lkZT09PWhlJiZtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkscC50cmFuc21pc3Npb24+MCYmKG0udHJhbnNtaXNzaW9uLnZhbHVlPXAudHJhbnNtaXNzaW9uLG0udHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1iLnRleHR1cmUsbS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoYi53aWR0aCxiLmhlaWdodCkscC50cmFuc21pc3Npb25NYXAmJihtLnRyYW5zbWlzc2lvbk1hcC52YWx1ZT1wLnRyYW5zbWlzc2lvbk1hcCksbS50aGlja25lc3MudmFsdWU9cC50aGlja25lc3MscC50aGlja25lc3NNYXAmJihtLnRoaWNrbmVzc01hcC52YWx1ZT1wLnRoaWNrbmVzc01hcCksbS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXAuYXR0ZW51YXRpb25EaXN0YW5jZSxtLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weShwLmF0dGVudWF0aW9uQ29sb3IpKSxtLnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHksbS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkocC5zcGVjdWxhckNvbG9yKSxwLnNwZWN1bGFySW50ZW5zaXR5TWFwJiYobS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT1wLnNwZWN1bGFySW50ZW5zaXR5TWFwKSxwLnNwZWN1bGFyQ29sb3JNYXAmJihtLnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9cC5zcGVjdWxhckNvbG9yTWFwKX1mdW5jdGlvbiBkKG0scCl7cC5tYXRjYXAmJihtLm1hdGNhcC52YWx1ZT1wLm1hdGNhcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24geChtLHApe3AuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpLG0ucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShwLnJlZmVyZW5jZVBvc2l0aW9uKSxtLm5lYXJEaXN0YW5jZS52YWx1ZT1wLm5lYXJEaXN0YW5jZSxtLmZhckRpc3RhbmNlLnZhbHVlPXAuZmFyRGlzdGFuY2V9ZnVuY3Rpb24gdihtLHApe3AuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3Jtczp0LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmV9fWZ1bmN0aW9uIElFKCl7bGV0IG49cm8oImNhbnZhcyIpO3JldHVybiBuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixufWZ1bmN0aW9uIFZ0KG49e30pe2xldCB0PW4uY2FudmFzIT09dm9pZCAwP24uY2FudmFzOklFKCksZT1uLmNvbnRleHQhPT12b2lkIDA/bi5jb250ZXh0Om51bGwsaT1uLmFscGhhIT09dm9pZCAwP24uYWxwaGE6ITEscj1uLmRlcHRoIT09dm9pZCAwP24uZGVwdGg6ITAscz1uLnN0ZW5jaWwhPT12b2lkIDA/bi5zdGVuY2lsOiEwLG89bi5hbnRpYWxpYXMhPT12b2lkIDA/bi5hbnRpYWxpYXM6ITEsYT1uLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9uLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPW4ucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP24ucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9bi5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP24uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLGQ9W10sZz1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPXJpLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz10aSx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgeD10aGlzLHY9ITEsbT0wLHA9MCxiPW51bGwsXz0tMSxTPW51bGwsTD1uZXcgV3QsQT1uZXcgV3QsSD1udWxsLHR0PXQud2lkdGgsWD10LmhlaWdodCx5PTEsUj1udWxsLEQ9bnVsbCxGPW5ldyBXdCgwLDAsdHQsWCksej1uZXcgV3QoMCwwLHR0LFgpLE49ITEsVj1uZXcgcXIsUT0hMSxhdD0hMSxHPW51bGwsJD1uZXcgd3QsbHQ9bmV3IFQsZHQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiB4dCgpe3JldHVybiBiPT09bnVsbD95OjF9bGV0IGs9ZTtmdW5jdGlvbiBGdChNLEkpe2ZvcihsZXQgTz0wO088TS5sZW5ndGg7TysrKXtsZXQgVT1NW09dLFo9dC5nZXRDb250ZXh0KFUsSSk7aWYoWiE9PW51bGwpcmV0dXJuIFp9cmV0dXJuIG51bGx9dHJ5e2xldCBNPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6cyxhbnRpYWxpYXM6byxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7JGh9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixBdCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsUCwhMSksaz09PW51bGwpe2xldCBJPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZih4LmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmSS5zaGlmdCgpLGs9RnQoSSxNKSxrPT09bnVsbCl0aHJvdyBGdChJKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfWsuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYoay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKE0pe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrTS5tZXNzYWdlKSxNfWxldCBtdCxTdCxCLHN0LG50LEMsaixKLGl0LGV0LHZ0LGJ0LEl0LFp0LHF0LEUsdyxxLHJ0LGd0LFcsX3QseXQ7ZnVuY3Rpb24gdXQoKXttdD1uZXcgZVMoayksU3Q9bmV3IEoxKGssbXQsbiksbXQuaW5pdChTdCksX3Q9bmV3IExFKGssbXQsU3QpLEI9bmV3IENFKGssbXQsU3QpLHN0PW5ldyByUyhrKSxudD1uZXcgeEUsQz1uZXcgUkUoayxtdCxCLG50LFN0LF90LHN0KSxqPW5ldyBLMSh4KSxKPW5ldyB0Uyh4KSxpdD1uZXcgdk0oayxTdCkseXQ9bmV3IFkxKGssbXQsaXQsU3QpLGV0PW5ldyBuUyhrLGl0LHN0LHl0KSx2dD1uZXcgbFMoayxldCxpdCxzdCkscnQ9bmV3IGFTKGssU3QsQyksRT1uZXcgJDEobnQpLGJ0PW5ldyBnRSh4LGosSixtdCxTdCx5dCxFKSxJdD1uZXcgREUobnQpLFp0PW5ldyB2RSxxdD1uZXcgRUUobXQsU3QpLHE9bmV3IFgxKHgsaixCLHZ0LGksYSksdz1uZXcgVDAoeCx2dCxTdCksZ3Q9bmV3IFoxKGssbXQsc3QsU3QpLFc9bmV3IGlTKGssbXQsc3QsU3QpLHN0LnByb2dyYW1zPWJ0LnByb2dyYW1zLHguY2FwYWJpbGl0aWVzPVN0LHguZXh0ZW5zaW9ucz1tdCx4LnByb3BlcnRpZXM9bnQseC5yZW5kZXJMaXN0cz1adCx4LnNoYWRvd01hcD13LHguc3RhdGU9Qix4LmluZm89c3R9dXQoKTtsZXQgY3Q9bmV3IFp1KHgsayk7dGhpcy54cj1jdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgTT1tdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO00mJk0ucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihNKXtNIT09dm9pZCAwJiYoeT1NLHRoaXMuc2V0U2l6ZSh0dCxYLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihNKXtyZXR1cm4gTS5zZXQodHQsWCl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihNLEksTyl7aWYoY3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn10dD1NLFg9SSx0LndpZHRoPU1hdGguZmxvb3IoTSp5KSx0LmhlaWdodD1NYXRoLmZsb29yKEkqeSksTyE9PSExJiYodC5zdHlsZS53aWR0aD1NKyJweCIsdC5zdHlsZS5oZWlnaHQ9SSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCp5LFgqeSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihNLEksTyl7dHQ9TSxYPUkseT1PLHQud2lkdGg9TWF0aC5mbG9vcihNKk8pLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSpPKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihNKXtyZXR1cm4gTS5jb3B5KEwpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoRil9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSxJLE8sVSl7TS5pc1ZlY3RvcjQ/Ri5zZXQoTS54LE0ueSxNLnosTS53KTpGLnNldChNLEksTyxVKSxCLnZpZXdwb3J0KEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoeil9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND96LnNldChNLngsTS55LE0ueixNLncpOnouc2V0KE0sSSxPLFUpLEIuc2Npc3NvcihBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTn0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihNKXtCLnNldFNjaXNzb3JUZXN0KE49TSl9LHRoaXMuc2V0T3BhcXVlU29ydD1mdW5jdGlvbihNKXtSPU19LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKE0pe0Q9TX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkocS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtxLnNldENsZWFyQ29sb3IuYXBwbHkocSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gcS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3Euc2V0Q2xlYXJBbHBoYS5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oTSxJLE8pe2xldCBVPTA7KE09PT12b2lkIDB8fE0pJiYoVXw9MTYzODQpLChJPT09dm9pZCAwfHxJKSYmKFV8PTI1NiksKE89PT12b2lkIDB8fE8pJiYoVXw9MTAyNCksay5jbGVhcihVKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxadC5kaXNwb3NlKCkscXQuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxqLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSx2dC5kaXNwb3NlKCkseXQuZGlzcG9zZSgpLGJ0LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0IixEdCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIsanQpLEcmJihHLmRpc3Bvc2UoKSxHPW51bGwpLHplLnN0b3AoKX07ZnVuY3Rpb24gQXQoTSl7TS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksdj0hMH1mdW5jdGlvbiBQKCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksdj0hMTtsZXQgTT1zdC5hdXRvUmVzZXQsST13LmVuYWJsZWQsTz13LmF1dG9VcGRhdGUsVT13Lm5lZWRzVXBkYXRlLFo9dy50eXBlO3V0KCksc3QuYXV0b1Jlc2V0PU0sdy5lbmFibGVkPUksdy5hdXRvVXBkYXRlPU8sdy5uZWVkc1VwZGF0ZT1VLHcudHlwZT1afWZ1bmN0aW9uIHB0KE0pe2xldCBJPU0udGFyZ2V0O0kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLGh0KEkpfWZ1bmN0aW9uIGh0KE0pe0V0KE0pLG50LnJlbW92ZShNKX1mdW5jdGlvbiBFdChNKXtsZXQgST1udC5nZXQoTSkucHJvZ3JhbXM7SSE9PXZvaWQgMCYmKEkuZm9yRWFjaChmdW5jdGlvbihPKXtidC5yZWxlYXNlUHJvZ3JhbShPKX0pLE0uaXNTaGFkZXJNYXRlcmlhbCYmYnQucmVsZWFzZVNoYWRlckNhY2hlKE0pKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihNLEksTyxVLFosVHQpe0k9PT1udWxsJiYoST1kdCk7bGV0IEN0PVouaXNNZXNoJiZaLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxMdD1CMChNLEksTyxVLFopO0Iuc2V0TWF0ZXJpYWwoVSxDdCk7bGV0IFJ0PU8uaW5kZXgsR3Q9Ty5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKFJ0PT09bnVsbCl7aWYoR3Q9PT12b2lkIDB8fEd0LmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihSdC5jb3VudD09PTApcmV0dXJuO2xldCB6dD0xO1Uud2lyZWZyYW1lPT09ITAmJihSdD1ldC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoTyksenQ9MikseXQuc2V0dXAoWixVLEx0LE8sUnQpO2xldCBVdCxpZT1ndDtSdCE9PW51bGwmJihVdD1pdC5nZXQoUnQpLGllPVcsaWUuc2V0SW5kZXgoVXQpKTtsZXQgZmk9UnQhPT1udWxsP1J0LmNvdW50Okd0LmNvdW50LFppPU8uZHJhd1JhbmdlLnN0YXJ0Knp0LE90PU8uZHJhd1JhbmdlLmNvdW50Knp0LG5uPVR0IT09bnVsbD9UdC5zdGFydCp6dDowLGxlPVR0IT09bnVsbD9UdC5jb3VudCp6dDoxLzAscm49TWF0aC5tYXgoWmksbm4pLElvPU1hdGgubWluKGZpLFppK090LG5uK2xlKS0xLHNuPU1hdGgubWF4KDAsSW8tcm4rMSk7aWYoc24hPT0wKXtpZihaLmlzTWVzaClVLndpcmVmcmFtZT09PSEwPyhCLnNldExpbmVXaWR0aChVLndpcmVmcmFtZUxpbmV3aWR0aCp4dCgpKSxpZS5zZXRNb2RlKDEpKTppZS5zZXRNb2RlKDQpO2Vsc2UgaWYoWi5pc0xpbmUpe2xldCB2bj1VLmxpbmV3aWR0aDt2bj09PXZvaWQgMCYmKHZuPTEpLEIuc2V0TGluZVdpZHRoKHZuKnh0KCkpLFouaXNMaW5lU2VnbWVudHM/aWUuc2V0TW9kZSgxKTpaLmlzTGluZUxvb3A/aWUuc2V0TW9kZSgyKTppZS5zZXRNb2RlKDMpfWVsc2UgWi5pc1BvaW50cz9pZS5zZXRNb2RlKDApOlouaXNTcHJpdGUmJmllLnNldE1vZGUoNCk7aWYoWi5pc0luc3RhbmNlZE1lc2gpaWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLFouY291bnQpO2Vsc2UgaWYoTy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgdm49TWF0aC5taW4oTy5pbnN0YW5jZUNvdW50LE8uX21heEluc3RhbmNlQ291bnQpO2llLnJlbmRlckluc3RhbmNlcyhybixzbix2bil9ZWxzZSBpZS5yZW5kZXIocm4sc24pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKE0sSSl7Zj1xdC5nZXQoTSksZi5pbml0KCksZy5wdXNoKGYpLE0udHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKE8pe08uaXNMaWdodCYmTy5sYXllcnMudGVzdChJLmxheWVycykmJihmLnB1c2hMaWdodChPKSxPLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhPKSl9KSxmLnNldHVwTGlnaHRzKHgucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLE0udHJhdmVyc2UoZnVuY3Rpb24oTyl7bGV0IFU9Ty5tYXRlcmlhbDtpZihVKWlmKEFycmF5LmlzQXJyYXkoVSkpZm9yKGxldCBaPTA7WjxVLmxlbmd0aDtaKyspe2xldCBUdD1VW1pdO09sKFR0LE0sTyl9ZWxzZSBPbChVLE0sTyl9KSxnLnBvcCgpLGY9bnVsbH07bGV0IFk9bnVsbDtmdW5jdGlvbiBNdChNKXtZJiZZKE0pfWZ1bmN0aW9uIER0KCl7emUuc3RvcCgpfWZ1bmN0aW9uIGp0KCl7emUuc3RhcnQoKX1sZXQgemU9bmV3IGcwO3plLnNldEFuaW1hdGlvbkxvb3AoTXQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ6ZS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKE0pe1k9TSxjdC5zZXRBbmltYXRpb25Mb29wKE0pLE09PT1udWxsP3plLnN0b3AoKTp6ZS5zdGFydCgpfSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oTSxJKXtpZihJIT09dm9pZCAwJiZJLmlzQ2FtZXJhIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4iKTtyZXR1cm59aWYodj09PSEwKXJldHVybjtNLmF1dG9VcGRhdGU9PT0hMCYmTS51cGRhdGVNYXRyaXhXb3JsZCgpLEkucGFyZW50PT09bnVsbCYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLGN0LmVuYWJsZWQ9PT0hMCYmY3QuaXNQcmVzZW50aW5nPT09ITAmJihjdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJmN0LnVwZGF0ZUNhbWVyYShJKSxJPWN0LmdldENhbWVyYSgpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkJlZm9yZVJlbmRlcih4LE0sSSxiKSxmPXF0LmdldChNLGcubGVuZ3RoKSxmLmluaXQoKSxnLnB1c2goZiksJC5tdWx0aXBseU1hdHJpY2VzKEkucHJvamVjdGlvbk1hdHJpeCxJLm1hdHJpeFdvcmxkSW52ZXJzZSksVi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgkKSxhdD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLFE9RS5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsYXQsSSksaD1adC5nZXQoTSxkLmxlbmd0aCksaC5pbml0KCksZC5wdXNoKGgpLG5lKE0sSSwwLHguc29ydE9iamVjdHMpLGguZmluaXNoKCkseC5zb3J0T2JqZWN0cz09PSEwJiZoLnNvcnQoUixEKSxRPT09ITAmJkUuYmVnaW5TaGFkb3dzKCk7bGV0IE89Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYody5yZW5kZXIoTyxNLEkpLFE9PT0hMCYmRS5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxxLnJlbmRlcihoLE0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksSS5pc0FycmF5Q2FtZXJhKXtsZXQgVT1JLmNhbWVyYXM7Zm9yKGxldCBaPTAsVHQ9VS5sZW5ndGg7WjxUdDtaKyspe2xldCBDdD1VW1pdO2VuKGgsTSxDdCxDdC52aWV3cG9ydCl9fWVsc2UgZW4oaCxNLEkpO2IhPT1udWxsJiYoQy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxDLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksTS5pc1NjZW5lPT09ITAmJk0ub25BZnRlclJlbmRlcih4LE0sSSksQi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEIuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxCLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksQi5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5dC5yZXNldERlZmF1bHRTdGF0ZSgpLF89LTEsUz1udWxsLGcucG9wKCksZy5sZW5ndGg+MD9mPWdbZy5sZW5ndGgtMV06Zj1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9oPWRbZC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBuZShNLEksTyxVKXtpZihNLnZpc2libGU9PT0hMSlyZXR1cm47aWYoTS5sYXllcnMudGVzdChJLmxheWVycykpe2lmKE0uaXNHcm91cClPPU0ucmVuZGVyT3JkZXI7ZWxzZSBpZihNLmlzTE9EKU0uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZShJKTtlbHNlIGlmKE0uaXNMaWdodClmLnB1c2hMaWdodChNKSxNLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhNKTtlbHNlIGlmKE0uaXNTcHJpdGUpe2lmKCFNLmZydXN0dW1DdWxsZWR8fFYuaW50ZXJzZWN0c1Nwcml0ZShNKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7THQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1lbHNlIGlmKChNLmlzTWVzaHx8TS5pc0xpbmV8fE0uaXNQb2ludHMpJiYoTS5pc1NraW5uZWRNZXNoJiZNLnNrZWxldG9uLmZyYW1lIT09c3QucmVuZGVyLmZyYW1lJiYoTS5za2VsZXRvbi51cGRhdGUoKSxNLnNrZWxldG9uLmZyYW1lPXN0LnJlbmRlci5mcmFtZSksIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzT2JqZWN0KE0pKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMdCkpe2xldCBSdD1DdC5ncm91cHM7Zm9yKGxldCBHdD0wLHp0PVJ0Lmxlbmd0aDtHdDx6dDtHdCsrKXtsZXQgVXQ9UnRbR3RdLGllPUx0W1V0Lm1hdGVyaWFsSW5kZXhdO2llJiZpZS52aXNpYmxlJiZoLnB1c2goTSxDdCxpZSxPLGx0LnosVXQpfX1lbHNlIEx0LnZpc2libGUmJmgucHVzaChNLEN0LEx0LE8sbHQueixudWxsKX19bGV0IFR0PU0uY2hpbGRyZW47Zm9yKGxldCBDdD0wLEx0PVR0Lmxlbmd0aDtDdDxMdDtDdCsrKW5lKFR0W0N0XSxJLE8sVSl9ZnVuY3Rpb24gZW4oTSxJLE8sVSl7bGV0IFo9TS5vcGFxdWUsVHQ9TS50cmFuc21pc3NpdmUsQ3Q9TS50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhPKSxUdC5sZW5ndGg+MCYmeW4oWixJLE8pLFUmJkIudmlld3BvcnQoTC5jb3B5KFUpKSxaLmxlbmd0aD4wJiZEbyhaLEksTyksVHQubGVuZ3RoPjAmJkRvKFR0LEksTyksQ3QubGVuZ3RoPjAmJkRvKEN0LEksTyl9ZnVuY3Rpb24geW4oTSxJLE8pe2lmKEc9PT1udWxsKXtsZXQgQ3Q9bz09PSEwJiZTdC5pc1dlYkdMMj09PSEwP3NvOk5lO0c9bmV3IEN0KDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6X3QuY29udmVydChVcikhPT1udWxsP1VyOmVpLG1pbkZpbHRlcjpMbCxtYWdGaWx0ZXI6ZmUsd3JhcFM6VmUsd3JhcFQ6VmUsdXNlUmVuZGVyVG9UZXh0dXJlOm10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgVT14LmdldFJlbmRlclRhcmdldCgpO3guc2V0UmVuZGVyVGFyZ2V0KEcpLHguY2xlYXIoKTtsZXQgWj14LnRvbmVNYXBwaW5nO3gudG9uZU1hcHBpbmc9dGksRG8oTSxJLE8pLHgudG9uZU1hcHBpbmc9WixDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEcpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEcpLHguc2V0UmVuZGVyVGFyZ2V0KFUpfWZ1bmN0aW9uIERvKE0sSSxPKXtsZXQgVT1JLmlzU2NlbmU9PT0hMD9JLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IFo9MCxUdD1NLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PU1bWl0sTHQ9Q3Qub2JqZWN0LFJ0PUN0Lmdlb21ldHJ5LEd0PVU9PT1udWxsP0N0Lm1hdGVyaWFsOlUsenQ9Q3QuZ3JvdXA7THQubGF5ZXJzLnRlc3QoTy5sYXllcnMpJiZVMChMdCxJLE8sUnQsR3QsenQpfX1mdW5jdGlvbiBVMChNLEksTyxVLFosVHQpe00ub25CZWZvcmVSZW5kZXIoeCxJLE8sVSxaLFR0KSxNLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKE8ubWF0cml4V29ybGRJbnZlcnNlLE0ubWF0cml4V29ybGQpLE0ubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChNLm1vZGVsVmlld01hdHJpeCksWi5vbkJlZm9yZVJlbmRlcih4LEksTyxVLE0sVHQpLFoudHJhbnNwYXJlbnQ9PT0hMCYmWi5zaWRlPT09SHI/KFouc2lkZT1oZSxaLm5lZWRzVXBkYXRlPSEwLHgucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksWi5zaWRlPWVvLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9SHIpOngucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksTS5vbkFmdGVyUmVuZGVyKHgsSSxPLFUsWixUdCl9ZnVuY3Rpb24gT2woTSxJLE8pe0kuaXNTY2VuZSE9PSEwJiYoST1kdCk7bGV0IFU9bnQuZ2V0KE0pLFo9Zi5zdGF0ZS5saWdodHMsVHQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXksQ3Q9Wi5zdGF0ZS52ZXJzaW9uLEx0PWJ0LmdldFBhcmFtZXRlcnMoTSxaLnN0YXRlLFR0LEksTyksUnQ9YnQuZ2V0UHJvZ3JhbUNhY2hlS2V5KEx0KSxHdD1VLnByb2dyYW1zO1UuZW52aXJvbm1lbnQ9TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0kuZW52aXJvbm1lbnQ6bnVsbCxVLmZvZz1JLmZvZyxVLmVudk1hcD0oTS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0o6aikuZ2V0KE0uZW52TWFwfHxVLmVudmlyb25tZW50KSxHdD09PXZvaWQgMCYmKE0uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLEd0PW5ldyBNYXAsVS5wcm9ncmFtcz1HdCk7bGV0IHp0PUd0LmdldChSdCk7aWYoenQhPT12b2lkIDApe2lmKFUuY3VycmVudFByb2dyYW09PT16dCYmVS5saWdodHNTdGF0ZVZlcnNpb249PT1DdClyZXR1cm4gb2YoTSxMdCksenR9ZWxzZSBMdC51bmlmb3Jtcz1idC5nZXRVbmlmb3JtcyhNKSxNLm9uQnVpbGQoTyxMdCx4KSxNLm9uQmVmb3JlQ29tcGlsZShMdCx4KSx6dD1idC5hY3F1aXJlUHJvZ3JhbShMdCxSdCksR3Quc2V0KFJ0LHp0KSxVLnVuaWZvcm1zPUx0LnVuaWZvcm1zO2xldCBVdD1VLnVuaWZvcm1zOyghTS5pc1NoYWRlck1hdGVyaWFsJiYhTS5pc1Jhd1NoYWRlck1hdGVyaWFsfHxNLmNsaXBwaW5nPT09ITApJiYoVXQuY2xpcHBpbmdQbGFuZXM9RS51bmlmb3JtKSxvZihNLEx0KSxVLm5lZWRzTGlnaHRzPWswKE0pLFUubGlnaHRzU3RhdGVWZXJzaW9uPUN0LFUubmVlZHNMaWdodHMmJihVdC5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1aLnN0YXRlLmFtYmllbnQsVXQubGlnaHRQcm9iZS52YWx1ZT1aLnN0YXRlLnByb2JlLFV0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWwsVXQuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxVdC5zcG90TGlnaHRzLnZhbHVlPVouc3RhdGUuc3BvdCxVdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvdyxVdC5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1aLnN0YXRlLnJlY3RBcmVhLFV0Lmx0Y18xLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMxLFV0Lmx0Y18yLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMyLFV0LnBvaW50TGlnaHRzLnZhbHVlPVouc3RhdGUucG9pbnQsVXQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvdyxVdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPVouc3RhdGUuaGVtaSxVdC5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLFV0LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsVXQuc3BvdFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXAsVXQuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsVXQucG9pbnRTaGFkb3dNYXAudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvd01hcCxVdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgaWU9enQuZ2V0VW5pZm9ybXMoKSxmaT1paS5zZXFXaXRoVmFsdWUoaWUuc2VxLFV0KTtyZXR1cm4gVS5jdXJyZW50UHJvZ3JhbT16dCxVLnVuaWZvcm1zTGlzdD1maSx6dH1mdW5jdGlvbiBvZihNLEkpe2xldCBPPW50LmdldChNKTtPLm91dHB1dEVuY29kaW5nPUkub3V0cHV0RW5jb2RpbmcsTy5pbnN0YW5jaW5nPUkuaW5zdGFuY2luZyxPLnNraW5uaW5nPUkuc2tpbm5pbmcsTy5tb3JwaFRhcmdldHM9SS5tb3JwaFRhcmdldHMsTy5tb3JwaE5vcm1hbHM9SS5tb3JwaE5vcm1hbHMsTy5tb3JwaFRhcmdldHNDb3VudD1JLm1vcnBoVGFyZ2V0c0NvdW50LE8ubnVtQ2xpcHBpbmdQbGFuZXM9SS5udW1DbGlwcGluZ1BsYW5lcyxPLm51bUludGVyc2VjdGlvbj1JLm51bUNsaXBJbnRlcnNlY3Rpb24sTy52ZXJ0ZXhBbHBoYXM9SS52ZXJ0ZXhBbHBoYXMsTy52ZXJ0ZXhUYW5nZW50cz1JLnZlcnRleFRhbmdlbnRzLE8udG9uZU1hcHBpbmc9SS50b25lTWFwcGluZ31mdW5jdGlvbiBCMChNLEksTyxVLFope0kuaXNTY2VuZSE9PSEwJiYoST1kdCksQy5yZXNldFRleHR1cmVVbml0cygpO2xldCBUdD1JLmZvZyxDdD1VLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLEx0PWI9PT1udWxsP3gub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOnJpLFJ0PShVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoVS5lbnZNYXB8fEN0KSxHdD1VLnZlcnRleENvbG9ycz09PSEwJiYhIU8uYXR0cmlidXRlcy5jb2xvciYmTy5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx6dD0hIVUubm9ybWFsTWFwJiYhIU8uYXR0cmlidXRlcy50YW5nZW50LFV0PSEhTy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24saWU9ISFPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsZmk9Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsWmk9VS50b25lTWFwcGVkP3gudG9uZU1hcHBpbmc6dGksT3Q9bnQuZ2V0KFUpLG5uPWYuc3RhdGUubGlnaHRzO2lmKFE9PT0hMCYmKGF0PT09ITB8fE0hPT1TKSl7bGV0IFplPU09PT1TJiZVLmlkPT09XztFLnNldFN0YXRlKFUsTSxaZSl9bGV0IGxlPSExO1UudmVyc2lvbj09PU90Ll9fdmVyc2lvbj8oT3QubmVlZHNMaWdodHMmJk90LmxpZ2h0c1N0YXRlVmVyc2lvbiE9PW5uLnN0YXRlLnZlcnNpb258fE90Lm91dHB1dEVuY29kaW5nIT09THR8fFouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITF8fCFaLmlzSW5zdGFuY2VkTWVzaCYmT3QuaW5zdGFuY2luZz09PSEwfHxaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITF8fCFaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITB8fE90LmVudk1hcCE9PVJ0fHxVLmZvZyYmT3QuZm9nIT09VHR8fE90Lm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYoT3QubnVtQ2xpcHBpbmdQbGFuZXMhPT1FLm51bVBsYW5lc3x8T3QubnVtSW50ZXJzZWN0aW9uIT09RS5udW1JbnRlcnNlY3Rpb24pfHxPdC52ZXJ0ZXhBbHBoYXMhPT1HdHx8T3QudmVydGV4VGFuZ2VudHMhPT16dHx8T3QubW9ycGhUYXJnZXRzIT09VXR8fE90Lm1vcnBoTm9ybWFscyE9PWllfHxPdC50b25lTWFwcGluZyE9PVppfHxTdC5pc1dlYkdMMj09PSEwJiZPdC5tb3JwaFRhcmdldHNDb3VudCE9PWZpKSYmKGxlPSEwKToobGU9ITAsT3QuX192ZXJzaW9uPVUudmVyc2lvbik7bGV0IHJuPU90LmN1cnJlbnRQcm9ncmFtO2xlPT09ITAmJihybj1PbChVLEksWikpO2xldCBJbz0hMSxzbj0hMSx2bj0hMSxfZT1ybi5nZXRVbmlmb3JtcygpLG5zPU90LnVuaWZvcm1zO2lmKEIudXNlUHJvZ3JhbShybi5wcm9ncmFtKSYmKElvPSEwLHNuPSEwLHZuPSEwKSxVLmlkIT09XyYmKF89VS5pZCxzbj0hMCksSW98fFMhPT1NKXtpZihfZS5zZXRWYWx1ZShrLCJwcm9qZWN0aW9uTWF0cml4IixNLnByb2plY3Rpb25NYXRyaXgpLFN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJl9lLnNldFZhbHVlKGssImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKE0uZmFyKzEpL01hdGguTE4yKSksUyE9PU0mJihTPU0sc249ITAsdm49ITApLFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc01lc2hQaG9uZ01hdGVyaWFsfHxVLmlzTWVzaFRvb25NYXRlcmlhbHx8VS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxVLmVudk1hcCl7bGV0IFplPV9lLm1hcC5jYW1lcmFQb3NpdGlvbjtaZSE9PXZvaWQgMCYmWmUuc2V0VmFsdWUoayxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkpfShVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbCkmJl9lLnNldFZhbHVlKGssImlzT3J0aG9ncmFwaGljIixNLmlzT3J0aG9ncmFwaGljQ2FtZXJhPT09ITApLChVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc1NoYWRvd01hdGVyaWFsfHxaLmlzU2tpbm5lZE1lc2gpJiZfZS5zZXRWYWx1ZShrLCJ2aWV3TWF0cml4IixNLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoWi5pc1NraW5uZWRNZXNoKXtfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXgiKSxfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IFplPVouc2tlbGV0b247WmUmJihTdC5mbG9hdFZlcnRleFRleHR1cmVzPyhaZS5ib25lVGV4dHVyZT09PW51bGwmJlplLmNvbXB1dGVCb25lVGV4dHVyZSgpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlIixaZS5ib25lVGV4dHVyZSxDKSxfZS5zZXRWYWx1ZShrLCJib25lVGV4dHVyZVNpemUiLFplLmJvbmVUZXh0dXJlU2l6ZSkpOl9lLnNldE9wdGlvbmFsKGssWmUsImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hIU8mJihPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8Ty5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwKSYmcnQudXBkYXRlKFosTyxVLHJuKSwoc258fE90LnJlY2VpdmVTaGFkb3chPT1aLnJlY2VpdmVTaGFkb3cpJiYoT3QucmVjZWl2ZVNoYWRvdz1aLnJlY2VpdmVTaGFkb3csX2Uuc2V0VmFsdWUoaywicmVjZWl2ZVNoYWRvdyIsWi5yZWNlaXZlU2hhZG93KSksc24mJihfZS5zZXRWYWx1ZShrLCJ0b25lTWFwcGluZ0V4cG9zdXJlIix4LnRvbmVNYXBwaW5nRXhwb3N1cmUpLE90Lm5lZWRzTGlnaHRzJiZPMChucyx2biksVHQmJlUuZm9nJiZJdC5yZWZyZXNoRm9nVW5pZm9ybXMobnMsVHQpLEl0LnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKG5zLFUseSxYLEcpLGlpLnVwbG9hZChrLE90LnVuaWZvcm1zTGlzdCxucyxDKSksVS5pc1NoYWRlck1hdGVyaWFsJiZVLnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpLFUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxVLmlzU3ByaXRlTWF0ZXJpYWwmJl9lLnNldFZhbHVlKGssImNlbnRlciIsWi5jZW50ZXIpLF9lLnNldFZhbHVlKGssIm1vZGVsVmlld01hdHJpeCIsWi5tb2RlbFZpZXdNYXRyaXgpLF9lLnNldFZhbHVlKGssIm5vcm1hbE1hdHJpeCIsWi5ub3JtYWxNYXRyaXgpLF9lLnNldFZhbHVlKGssIm1vZGVsTWF0cml4IixaLm1hdHJpeFdvcmxkKSxybn1mdW5jdGlvbiBPMChNLEkpe00uYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9SSxNLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9SSxNLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1JfWZ1bmN0aW9uIGswKE0pe3JldHVybiBNLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8TS5pc01lc2hUb29uTWF0ZXJpYWx8fE0uaXNNZXNoUGhvbmdNYXRlcmlhbHx8TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxNLmlzU2hhZG93TWF0ZXJpYWx8fE0uaXNTaGFkZXJNYXRlcmlhbCYmTS5saWdodHM9PT0hMH10aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG19LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihNLEksTyl7bnQuZ2V0KE0udGV4dHVyZSkuX193ZWJnbFRleHR1cmU9SSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPU87bGV0IFU9bnQuZ2V0KE0pO1UuX19oYXNFeHRlcm5hbFRleHR1cmVzPSEwLFUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPU89PT12b2lkIDAsVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxNLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksTS51c2VSZW5kZXJUb1RleHR1cmU9ITEsTS51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihNLEkpe2xldCBPPW50LmdldChNKTtPLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1JLE8uX191c2VEZWZhdWx0RnJhbWVidWZmZXI9ST09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oTSxJPTAsTz0wKXtiPU0sbT1JLHA9TztsZXQgVT0hMDtpZihNKXtsZXQgUnQ9bnQuZ2V0KE0pO1J0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyIT09dm9pZCAwPyhCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxVPSExKTpSdC5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/Qy5zZXR1cFJlbmRlclRhcmdldChNKTpSdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJkMucmViaW5kVGV4dHVyZXMoTSxudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgWj1udWxsLFR0PSExLEN0PSExO2lmKE0pe2xldCBSdD1NLnRleHR1cmU7KFJ0LmlzRGF0YVRleHR1cmUzRHx8UnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoQ3Q9ITApO2xldCBHdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO00uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KFo9R3RbSV0sVHQ9ITApOk0udXNlUmVuZGVyYnVmZmVyP1o9bnQuZ2V0KE0pLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpaPUd0LEwuY29weShNLnZpZXdwb3J0KSxBLmNvcHkoTS5zY2lzc29yKSxIPU0uc2Npc3NvclRlc3R9ZWxzZSBMLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxIPU47aWYoQi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWikmJlN0LmRyYXdCdWZmZXJzJiZVJiZCLmRyYXdCdWZmZXJzKE0sWiksQi52aWV3cG9ydChMKSxCLnNjaXNzb3IoQSksQi5zZXRTY2lzc29yVGVzdChIKSxUdCl7bGV0IFJ0PW50LmdldChNLnRleHR1cmUpO2suZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrSSxSdC5fX3dlYmdsVGV4dHVyZSxPKX1lbHNlIGlmKEN0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSksR3Q9SXx8MDtrLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LFJ0Ll9fd2ViZ2xUZXh0dXJlLE98fDAsR3QpfV89LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihNLEksTyxVLFosVHQsQ3Qpe2lmKCEoTSYmTS5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgTHQ9bnQuZ2V0KE0pLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihNLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZDdCE9PXZvaWQgMCYmKEx0PUx0W0N0XSksTHQpe0IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEx0KTt0cnl7bGV0IFJ0PU0udGV4dHVyZSxHdD1SdC5mb3JtYXQsenQ9UnQudHlwZTtpZihHdCE9PVJlJiZfdC5jb252ZXJ0KEd0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBVdD16dD09PVVyJiYobXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8U3QuaXNXZWJHTDImJm10LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZih6dCE9PWVpJiZfdC5jb252ZXJ0KHp0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM4KSYmISh6dD09PVVpJiYoU3QuaXNXZWJHTDJ8fG10LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8bXQuaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSkpJiYhVXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTtyZXR1cm59ay5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP0k+PTAmJkk8PU0ud2lkdGgtVSYmTz49MCYmTzw9TS5oZWlnaHQtWiYmay5yZWFkUGl4ZWxzKEksTyxVLFosX3QuY29udmVydChHdCksX3QuY29udmVydCh6dCksVHQpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBSdD1iIT09bnVsbD9udC5nZXQoYikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPPTApe2lmKEkuaXNGcmFtZWJ1ZmZlclRleHR1cmUhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtyZXR1cm59bGV0IFU9TWF0aC5wb3coMiwtTyksWj1NYXRoLmZsb29yKEkuaW1hZ2Uud2lkdGgqVSksVHQ9TWF0aC5mbG9vcihJLmltYWdlLmhlaWdodCpVKTtDLnNldFRleHR1cmUyRChJLDApLGsuY29weVRleFN1YkltYWdlMkQoMzU1MyxPLDAsMCxNLngsTS55LFosVHQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPLFU9MCl7bGV0IFo9SS5pbWFnZS53aWR0aCxUdD1JLmltYWdlLmhlaWdodCxDdD1fdC5jb252ZXJ0KE8uZm9ybWF0KSxMdD1fdC5jb252ZXJ0KE8udHlwZSk7Qy5zZXRUZXh0dXJlMkQoTywwKSxrLnBpeGVsU3RvcmVpKDM3NDQwLE8uZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsTy5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsTy51bnBhY2tBbGlnbm1lbnQpLEkuaXNEYXRhVGV4dHVyZT9rLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksWixUdCxDdCxMdCxJLmltYWdlLmRhdGEpOkkuaXNDb21wcmVzc2VkVGV4dHVyZT9rLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsVSxNLngsTS55LEkubWlwbWFwc1swXS53aWR0aCxJLm1pcG1hcHNbMF0uaGVpZ2h0LEN0LEkubWlwbWFwc1swXS5kYXRhKTprLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksQ3QsTHQsSS5pbWFnZSksVT09PTAmJk8uZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKDM1NTMpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oTSxJLE8sVSxaPTApe2lmKHguaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBUdD1NLm1heC54LU0ubWluLngrMSxDdD1NLm1heC55LU0ubWluLnkrMSxMdD1NLm1heC56LU0ubWluLnorMSxSdD1fdC5jb252ZXJ0KFUuZm9ybWF0KSxHdD1fdC5jb252ZXJ0KFUudHlwZSksenQ7aWYoVS5pc0RhdGFUZXh0dXJlM0QpQy5zZXRUZXh0dXJlM0QoVSwwKSx6dD0zMjg3OTtlbHNlIGlmKFUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpQy5zZXRUZXh0dXJlMkRBcnJheShVLDApLHp0PTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1rLnBpeGVsU3RvcmVpKDM3NDQwLFUuZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsVS5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsVS51bnBhY2tBbGlnbm1lbnQpO2xldCBVdD1rLmdldFBhcmFtZXRlcigzMzE0KSxpZT1rLmdldFBhcmFtZXRlcigzMjg3OCksZmk9ay5nZXRQYXJhbWV0ZXIoMzMxNiksWmk9ay5nZXRQYXJhbWV0ZXIoMzMxNSksT3Q9ay5nZXRQYXJhbWV0ZXIoMzI4NzcpLG5uPU8uaXNDb21wcmVzc2VkVGV4dHVyZT9PLm1pcG1hcHNbMF06Ty5pbWFnZTtrLnBpeGVsU3RvcmVpKDMzMTQsbm4ud2lkdGgpLGsucGl4ZWxTdG9yZWkoMzI4Nzgsbm4uaGVpZ2h0KSxrLnBpeGVsU3RvcmVpKDMzMTYsTS5taW4ueCksay5waXhlbFN0b3JlaSgzMzE1LE0ubWluLnkpLGsucGl4ZWxTdG9yZWkoMzI4NzcsTS5taW4ueiksTy5pc0RhdGFUZXh0dXJlfHxPLmlzRGF0YVRleHR1cmUzRD9rLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubi5kYXRhKTpPLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksay5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LG5uLmRhdGEpKTprLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubiksay5waXhlbFN0b3JlaSgzMzE0LFV0KSxrLnBpeGVsU3RvcmVpKDMyODc4LGllKSxrLnBpeGVsU3RvcmVpKDMzMTYsZmkpLGsucGl4ZWxTdG9yZWkoMzMxNSxaaSksay5waXhlbFN0b3JlaSgzMjg3NyxPdCksWj09PTAmJlUuZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKHp0KSxCLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihNKXtDLnNldFRleHR1cmUyRChNLDApLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXttPTAscD0wLGI9bnVsbCxCLnJlc2V0KCkseXQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfVZ0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIEp1PWNsYXNzIGV4dGVuZHMgVnR7fTtKdS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgaG89Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGhvKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtoby5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBmbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGZ0KHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IGZvKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtmby5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIFlyPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07WXIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIEdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9dG4oKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLHM9dGhpcy5zdHJpZGU7cjxzO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07R2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIHNlPW5ldyBULFdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9cj09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLHMpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1zLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJuIG5ldyBRdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IFdpKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6ZSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07V2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07ZmwucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIFJyLFdzPW5ldyBULExyPW5ldyBULFByPW5ldyBULERyPW5ldyBLLHFzPW5ldyBLLEEwPW5ldyB3dCxPYT1uZXcgVCxYcz1uZXcgVCxrYT1uZXcgVCxVZz1uZXcgSyxSdT1uZXcgSyxCZz1uZXcgSywkdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLFJyPT09dm9pZCAwKXtScj1uZXcgSHQ7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgR2koZSw1KTtSci5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxSci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgV2koaSwzLDAsITEpKSxSci5zZXRBdHRyaWJ1dGUoInV2IixuZXcgV2koaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVJyLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBmbCx0aGlzLmNlbnRlcj1uZXcgSyguNSwuNSl9cmF5Y2FzdCh0LGUpe3QuY2FtZXJhPT09bnVsbCYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLExyLnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxBMC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxQci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkxyLm11bHRpcGx5U2NhbGFyKC1Qci56KTtsZXQgaT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLHIscztpIT09MCYmKHM9TWF0aC5jb3MoaSkscj1NYXRoLnNpbihpKSk7bGV0IG89dGhpcy5jZW50ZXI7SGEoT2Euc2V0KC0uNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKFhzLnNldCguNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKGthLnNldCguNSwuNSwwKSxQcixvLExyLHIscyksVWcuc2V0KDAsMCksUnUuc2V0KDEsMCksQmcuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoT2EsWHMsa2EsITEsV3MpO2lmKGE9PT1udWxsJiYoSGEoWHMuc2V0KC0uNSwuNSwwKSxQcixvLExyLHIscyksUnUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxrYSxYcywhMSxXcyksYT09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhXcyk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpXcy5jbG9uZSgpLHV2OnJlLmdldFVWKFdzLE9hLFhzLGthLFVnLFJ1LEJnLG5ldyBLKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQuY2VudGVyIT09dm9pZCAwJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319OyR1LnByb3RvdHlwZS5pc1Nwcml0ZT0hMDtmdW5jdGlvbiBIYShuLHQsZSxpLHIscyl7RHIuc3ViVmVjdG9ycyhuLGUpLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksciE9PXZvaWQgMD8ocXMueD1zKkRyLngtcipEci55LHFzLnk9cipEci54K3MqRHIueSk6cXMuY29weShEciksbi5jb3B5KHQpLG4ueCs9cXMueCxuLnkrPXFzLnksbi5hcHBseU1hdHJpeDQoQTApfXZhciBPZz1uZXcgVCxrZz1uZXcgV3QsSGc9bmV3IFd0LE5FPW5ldyBULFZnPW5ldyB3dCxkbD1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyB3dCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyB3dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LGU9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IFd0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBpPTAscj1lLmNvdW50O2k8cjtpKyspe3QueD1lLmdldFgoaSksdC55PWUuZ2V0WShpKSx0Lno9ZS5nZXRaKGkpLHQudz1lLmdldFcoaSk7bGV0IHM9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO3MhPT0xLzA/dC5tdWx0aXBseVNjYWxhcihzKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcoaSx0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtsZXQgaT10aGlzLnNrZWxldG9uLHI9dGhpcy5nZW9tZXRyeTtrZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSGcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxPZy5jb3B5KGUpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IHM9MDtzPDQ7cysrKXtsZXQgbz1IZy5nZXRDb21wb25lbnQocyk7aWYobyE9PTApe2xldCBhPWtnLmdldENvbXBvbmVudChzKTtWZy5tdWx0aXBseU1hdHJpY2VzKGkuYm9uZXNbYV0ubWF0cml4V29ybGQsaS5ib25lSW52ZXJzZXNbYV0pLGUuYWRkU2NhbGVkVmVjdG9yKE5FLmNvcHkoT2cpLmFwcGx5TWF0cml4NChWZyksbyl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2RsLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBLdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07S3UucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgUXU9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLHMsbyxhLGwsYz1mZSx1PWZlLGgsZil7c3VwZXIobnVsbCxvLGEsbCxjLHUscixzLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtRdS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgcG89Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpe3R5cGVvZiBpPT0ibnVtYmVyIiYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cG8ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBHZz1uZXcgd3QsV2c9bmV3IHd0LFZhPVtdLFlzPW5ldyBvZSxqdT1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHBvKG5ldyBGbG9hdDMyQXJyYXkoaSoxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYoWXMuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxZcy5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLFlzLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgcz0wO3M8cjtzKyspe3RoaXMuZ2V0TWF0cml4QXQocyxHZyksV2cubXVsdGlwbHlNYXRyaWNlcyhpLEdnKSxZcy5tYXRyaXhXb3JsZD1XZyxZcy5yYXljYXN0KHQsVmEpO2ZvcihsZXQgbz0wLGE9VmEubGVuZ3RoO288YTtvKyspe2xldCBsPVZhW29dO2wuaW5zdGFuY2VJZD1zLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVZhLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcG8obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2p1LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIHpuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O3puLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBxZz1uZXcgVCxYZz1uZXcgVCxZZz1uZXcgd3QsTHU9bmV3IG9pLEdhPW5ldyBzaSxtbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHpuKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxzPWUuY291bnQ7cjxzO3IrKylxZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxYZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWcuZGlzdGFuY2VUbyhYZyk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGVlKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsbz1pLmRyYXdSYW5nZTtpZihpLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHYS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLEdhLmFwcGx5TWF0cml4NChyKSxHYS5yYWRpdXMrPXMsdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHYSk9PT0hMSlyZXR1cm47WWcuY29weShyKS5pbnZlcnQoKSxMdS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWWcpO2xldCBhPXMvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQsZj1uZXcgVCxkPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGc9aS5pbmRleCx2PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihnIT09bnVsbCl7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKGcuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7bGV0IFM9Zy5nZXRYKGIpLEw9Zy5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsUyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsTCksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBIPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0g8dC5uZWFyfHxIPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkgscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCBtPU1hdGgubWF4KDAsby5zdGFydCkscD1NYXRoLm1pbih2LmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBiPW0sXz1wLTE7YjxfO2IrPWQpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIrMSksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBMPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0w8dC5uZWFyfHxMPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkwscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07bW8ucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgWmc9bmV3IFQsSmc9bmV3IFQsZ289Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLHM9ZS5jb3VudDtyPHM7cis9MilaZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksSmcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT1yPT09MD8wOmlbci0xXSxpW3IrMV09aVtyXStaZy5kaXN0YW5jZVRvKEpnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtnby5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITA7dmFyIHRoPWNsYXNzIGV4dGVuZHMgbW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX07dGgucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIHBsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O3BsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciAkZz1uZXcgd3QsZWg9bmV3IG9pLFdhPW5ldyBzaSxxYT1uZXcgVCxuaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHBsKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2EuYXBwbHlNYXRyaXg0KHIpLFdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKFdhKT09PSExKXJldHVybjskZy5jb3B5KHIpLmludmVydCgpLGVoLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCgkZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPWkuaW5kZXgsaD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihjLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspe2xldCB2PWMuZ2V0WChnKTtxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsdiksS2cocWEsdixsLHIsdCxlLHRoaXMpfX1lbHNle2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihoLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspcWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLGcpLEtnKHFhLGcsbCxyLHQsZSx0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtuaC5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gS2cobix0LGUsaSxyLHMsbyl7bGV0IGE9ZWguZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgVDtlaC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO3MucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpvfSl9fXZhciBpaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjKXtzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9byE9PXZvaWQgMD9vOmJlLHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpiZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtpaC5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHJoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5mb3JtYXQ9aSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07cmgucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07c2gucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIG9oPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07b2gucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgWnI9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgcz1bXSxvPVtdLGE9W10sbD1bXSxjPW5ldyBULHU9bmV3IEs7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PWU7aCsrLGYrPTMpe2xldCBkPWkraC9lKnI7Yy54PXQqTWF0aC5jb3MoZCksYy55PXQqTWF0aC5zaW4oZCksby5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0ob1tmXS90KzEpLzIsdS55PShvW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1lO2grKylzLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWnIodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fTt2YXIgU2s9bmV3IFQsRWs9bmV3IFQsVGs9bmV3IFQsQWs9bmV3IHJlO3ZhciBGZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgZT1bXSxpLHI9dGhpcy5nZXRQb2ludCgwKSxzPTA7ZS5wdXNoKDApO2ZvcihsZXQgbz0xO288PXQ7bysrKWk9dGhpcy5nZXRQb2ludChvL3QpLHMrPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gocykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgaT10aGlzLmdldExlbmd0aHMoKSxyPTAscz1pLmxlbmd0aCxvO2U/bz1lOm89dCppW3MtMV07bGV0IGE9MCxsPXMtMSxjO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLW8sYzwwKWE9cisxO2Vsc2UgaWYoYz4wKWw9ci0xO2Vsc2V7bD1yO2JyZWFrfWlmKHI9bCxpW3JdPT09bylyZXR1cm4gci8ocy0xKTtsZXQgdT1pW3JdLGY9aVtyKzFdLXUsZD0oby11KS9mO3JldHVybihyK2QpLyhzLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQscz10KzFlLTQ7cjwwJiYocj0wKSxzPjEmJihzPTEpO2xldCBvPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KHMpLGw9ZXx8KG8uaXNWZWN0b3IyP25ldyBLOm5ldyBUKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihvKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgVCxyPVtdLHM9W10sbz1bXSxhPW5ldyBULGw9bmV3IHd0O2ZvcihsZXQgZD0wO2Q8PXQ7ZCsrKXtsZXQgZz1kL3Q7cltkXT10aGlzLmdldFRhbmdlbnRBdChnLG5ldyBUKX1zWzBdPW5ldyBULG9bMF09bmV3IFQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSx1PU1hdGguYWJzKHJbMF0ueCksaD1NYXRoLmFicyhyWzBdLnkpLGY9TWF0aC5hYnMoclswXS56KTt1PD1jJiYoYz11LGkuc2V0KDEsMCwwKSksaDw9YyYmKGM9aCxpLnNldCgwLDEsMCkpLGY8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxzWzBdKTtmb3IobGV0IGQ9MTtkPD10O2QrKyl7aWYoc1tkXT1zW2QtMV0uY2xvbmUoKSxvW2RdPW9bZC0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZC0xXSxyW2RdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBnPU1hdGguYWNvcyhJZShyW2QtMV0uZG90KHJbZF0pLC0xLDEpKTtzW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxnKSl9b1tkXS5jcm9zc1ZlY3RvcnMocltkXSxzW2RdKX1pZihlPT09ITApe2xldCBkPU1hdGguYWNvcyhJZShzWzBdLmRvdChzW3RdKSwtMSwxKSk7ZC89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhzWzBdLHNbdF0pKT4wJiYoZD0tZCk7Zm9yKGxldCBnPTE7Zzw9dDtnKyspc1tnXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbZ10sZCpnKSksb1tnXS5jcm9zc1ZlY3RvcnMocltnXSxzW2ddKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOnMsYmlub3JtYWxzOm99fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSxKcj1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxzPTAsbz1NYXRoLlBJKjIsYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1zLHRoaXMuYUVuZEFuZ2xlPW8sdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyBLLHI9TWF0aC5QSSoyLHM9dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxvPU1hdGguYWJzKHMpPE51bWJlci5FUFNJTE9OO2Zvcig7czwwOylzKz1yO2Zvcig7cz5yOylzLT1yO3M8TnVtYmVyLkVQU0lMT04mJihvP3M9MDpzPXIpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhbyYmKHM9PT1yP3M9LXI6cz1zLXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpzLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxkPWMtdGhpcy5hWTtsPWYqdS1kKmgrdGhpcy5hWCxjPWYqaCtkKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtKci5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIG1sPWNsYXNzIGV4dGVuZHMgSnJ7Y29uc3RydWN0b3IodCxlLGkscixzLG8pe3N1cGVyKHQsZSxpLGkscixzLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifX07bWwucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gdGYoKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIocyxvLGEsbCl7bj1zLHQ9YSxlPS0zKnMrMypvLTIqYS1sLGk9MipzLTIqbythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyl7cihvLGEsYyooYS1zKSxjKihsLW8pKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyx1LGgpe2xldCBmPShvLXMpL2MtKGEtcykvKGMrdSkrKGEtbykvdSxkPShhLW8pL3UtKGwtbykvKHUraCkrKGwtYSkvaDtmKj11LGQqPXUscihvLGEsZixkKX0sY2FsYzpmdW5jdGlvbihzKXtsZXQgbz1zKnMsYT1vKnM7cmV0dXJuIG4rdCpzK2UqbytpKmF9fX12YXIgWGE9bmV3IFQsUHU9bmV3IHRmLER1PW5ldyB0ZixJdT1uZXcgdGYsZ2w9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdLGU9ITEsaT0iY2VudHJpcGV0YWwiLHI9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9aSx0aGlzLnRlbnNpb249cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnBvaW50cyxzPXIubGVuZ3RoLG89KHMtKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKG8pLGw9by1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL3MpKzEpKnM6bD09PTAmJmE9PT1zLTEmJihhPXMtMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklc106KFhhLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1YYSk7bGV0IGg9clthJXNdLGY9clsoYSsxKSVzXTtpZih0aGlzLmNsb3NlZHx8YSsyPHM/dT1yWyhhKzIpJXNdOihYYS5zdWJWZWN0b3JzKHJbcy0xXSxyW3MtMl0pLmFkZChyW3MtMV0pLHU9WGEpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBkPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxnPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCksZCkseD1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLGQpLHY9TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxkKTt4PDFlLTQmJih4PTEpLGc8MWUtNCYmKGc9eCksdjwxZS00JiYodj14KSxQdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGgueCxmLngsdS54LGcseCx2KSxEdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGcseCx2KSxJdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGcseCx2KX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoUHUuaW5pdENhdG11bGxSb20oYy54LGgueCxmLngsdS54LHRoaXMudGVuc2lvbiksRHUuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbiksSXUuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChQdS5jYWxjKGwpLER1LmNhbGMobCksSXUuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBUKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07Z2wucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBRZyhuLHQsZSxpLHIpe2xldCBzPShpLXQpKi41LG89KHItZSkqLjUsYT1uKm4sbD1uKmE7cmV0dXJuKDIqZS0yKmkrcytvKSpsKygtMyplKzMqaS0yKnMtbykqYStzKm4rZX1mdW5jdGlvbiBGRShuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9ZnVuY3Rpb24gekUobix0KXtyZXR1cm4gMiooMS1uKSpuKnR9ZnVuY3Rpb24gVUUobix0KXtyZXR1cm4gbipuKnR9ZnVuY3Rpb24ganMobix0LGUsaSl7cmV0dXJuIEZFKG4sdCkrekUobixlKStVRShuLGkpfWZ1bmN0aW9uIEJFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIE9FKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9ZnVuY3Rpb24ga0Uobix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH1mdW5jdGlvbiBIRShuLHQpe3JldHVybiBuKm4qbip0fWZ1bmN0aW9uIHRvKG4sdCxlLGkscil7cmV0dXJuIEJFKG4sdCkrT0UobixlKStrRShuLGkpK0hFKG4scil9dmFyIHhvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEsscj1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O3hvLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHhsPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQscj1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQodG8odCxyLngscy54LG8ueCxhLngpLHRvKHQsci55LHMueSxvLnksYS55KSx0byh0LHIueixzLnosby56LGEueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eGwucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyICRyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWdldFRhbmdlbnQodCxlKXtsZXQgaT1lfHxuZXcgSztyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319OyRyLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYWg9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHlvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5by5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeWw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSxqcyh0LHIueixzLnosby56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5bC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIHZvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9KHIubGVuZ3RoLTEpKnQsbz1NYXRoLmZsb29yKHMpLGE9cy1vLGw9cltvPT09MD9vOm8tMV0sYz1yW29dLHU9cltvPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpvKzFdLGg9cltvPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpvKzJdO3JldHVybiBpLnNldChRZyhhLGwueCxjLngsdS54LGgueCksUWcoYSxsLnksYy55LHUueSxoLnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChuZXcgSygpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTt2by5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgQzA9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bWwsQ2F0bXVsbFJvbUN1cnZlMzpnbCxDdWJpY0JlemllckN1cnZlOnhvLEN1YmljQmV6aWVyQ3VydmUzOnhsLEVsbGlwc2VDdXJ2ZTpKcixMaW5lQ3VydmU6JHIsTGluZUN1cnZlMzphaCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp5byxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6eWwsU3BsaW5lQ3VydmU6dm99KSxsaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3ICRyKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxzPTA7Zm9yKDtzPHIubGVuZ3RoOyl7aWYocltzXT49aSl7bGV0IG89cltzXS1pLGE9dGhpcy5jdXJ2ZXNbc10sbD1hLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLW8vbDtyZXR1cm4gYS5nZXRQb2ludEF0KGMsZSl9cysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgZT1bXSxpO2ZvcihsZXQgcj0wLHM9dGhpcy5jdXJ2ZXM7cjxzLmxlbmd0aDtyKyspe2xldCBvPXNbcl0sYT1vJiZvLmlzRWxsaXBzZUN1cnZlP3QqMjpvJiYoby5pc0xpbmVDdXJ2ZXx8by5pc0xpbmVDdXJ2ZTMpPzE6byYmby5pc1NwbGluZUN1cnZlP3Qqby5wb2ludHMubGVuZ3RoOnQsbD1vLmdldFBvaW50cyhhKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmN1cnZlc1tlXTt0LmN1cnZlcy5wdXNoKHIudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2gobmV3IEMwW3IudHlwZV0oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxfbz1jbGFzcyBleHRlbmRzIGxoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgSyx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3ICRyKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBzPW5ldyB5byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgeG8odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpLG5ldyBLKGksciksbmV3IEsocyxvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHMsbyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgdm8oZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrYSxlK2wsaSxyLHMsbyksdGhpc31hYnNhcmModCxlLGkscixzLG8pe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLHMsbyksdGhpc31lbGxpcHNlKHQsZSxpLHIscyxvLGEsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2MsZSt1LGkscixzLG8sYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz1uZXcgSnIodCxlLGkscixzLG8sYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LFVuPWNsYXNzIGV4dGVuZHMgX297Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPXRuKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5ob2xlc1tlXTt0LmhvbGVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2gobmV3IF9vKCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sVkU9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKG4sdCxlPTIpe2xldCBpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgscz1SMChuLDAscixlLCEwKSxvPVtdO2lmKCFzfHxzLm5leHQ9PT1zLnByZXYpcmV0dXJuIG87bGV0IGEsbCxjLHUsaCxmLGQ7aWYoaSYmKHM9WUUobix0LHMsZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9dT1uWzFdO2ZvcihsZXQgZz1lO2c8cjtnKz1lKWg9bltnXSxmPW5bZysxXSxoPGEmJihhPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO2Q9TWF0aC5tYXgoYy1hLHUtbCksZD1kIT09MD8xL2Q6MH1yZXR1cm4gd28ocyxvLGUsYSxsLGQpLG99fTtmdW5jdGlvbiBSMChuLHQsZSxpLHIpe2xldCBzLG87aWYocj09PXJUKG4sdCxlLGkpPjApZm9yKHM9dDtzPGU7cys9aSlvPWpnKHMsbltzXSxuW3MrMV0sbyk7ZWxzZSBmb3Iocz1lLWk7cz49dDtzLT1pKW89amcocyxuW3NdLG5bcysxXSxvKTtyZXR1cm4gbyYmRGwobyxvLm5leHQpJiYoYm8obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gbGkobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgZT1uLGk7ZG8gaWYoaT0hMSwhZS5zdGVpbmVyJiYoRGwoZSxlLm5leHQpfHx0ZShlLnByZXYsZSxlLm5leHQpPT09MCkpe2lmKGJvKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfWVsc2UgZT1lLm5leHQ7d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIHdvKG4sdCxlLGkscixzLG8pe2lmKCFuKXJldHVybjshbyYmcyYmUUUobixpLHIscyk7bGV0IGE9bixsLGM7Zm9yKDtuLnByZXYhPT1uLm5leHQ7KXtpZihsPW4ucHJldixjPW4ubmV4dCxzP1dFKG4saSxyLHMpOkdFKG4pKXt0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxibyhuKSxuPWMubmV4dCxhPWMubmV4dDtjb250aW51ZX1pZihuPWMsbj09PWEpe28/bz09PTE/KG49cUUobGkobiksdCxlKSx3byhuLHQsZSxpLHIscywyKSk6bz09PTImJlhFKG4sdCxlLGkscixzKTp3byhsaShuKSx0LGUsaSxyLHMsMSk7YnJlYWt9fX1mdW5jdGlvbiBHRShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKHRlKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZih6cih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmdGUoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBXRShuLHQsZSxpKXtsZXQgcj1uLnByZXYscz1uLG89bi5uZXh0O2lmKHRlKHIscyxvKT49MClyZXR1cm4hMTtsZXQgYT1yLng8cy54P3IueDxvLng/ci54Om8ueDpzLng8by54P3MueDpvLngsbD1yLnk8cy55P3IueTxvLnk/ci55Om8ueTpzLnk8by55P3MueTpvLnksYz1yLng+cy54P3IueD5vLng/ci54Om8ueDpzLng+by54P3MueDpvLngsdT1yLnk+cy55P3IueT5vLnk/ci55Om8ueTpzLnk+by55P3MueTpvLnksaD1jaChhLGwsdCxlLGkpLGY9Y2goYyx1LHQsZSxpKSxkPW4ucHJldlosZz1uLm5leHRaO2Zvcig7ZCYmZC56Pj1oJiZnJiZnLno8PWY7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MHx8KGQ9ZC5wcmV2WixnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MCkpcmV0dXJuITE7Zz1nLm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PW4ucHJldiYmZCE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZC54LGQueSkmJnRlKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7ZyYmZy56PD1mOyl7aWYoZyE9PW4ucHJldiYmZyE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZy54LGcueSkmJnRlKGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHFFKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixzPWkubmV4dC5uZXh0OyFEbChyLHMpJiZMMChyLGksaS5uZXh0LHMpJiZNbyhyLHMpJiZNbyhzLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChzLmkvZSksYm8oaSksYm8oaS5uZXh0KSxpPW49cyksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiBsaShpKX1mdW5jdGlvbiBYRShuLHQsZSxpLHIscyl7bGV0IG89bjtkb3tsZXQgYT1vLm5leHQubmV4dDtmb3IoO2EhPT1vLnByZXY7KXtpZihvLmkhPT1hLmkmJmVUKG8sYSkpe2xldCBsPVAwKG8sYSk7bz1saShvLG8ubmV4dCksbD1saShsLGwubmV4dCksd28obyx0LGUsaSxyLHMpLHdvKGwsdCxlLGkscixzKTtyZXR1cm59YT1hLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PW4pfWZ1bmN0aW9uIFlFKG4sdCxlLGkpe2xldCByPVtdLHMsbyxhLGwsYztmb3Iocz0wLG89dC5sZW5ndGg7czxvO3MrKylhPXRbc10qaSxsPXM8by0xP3RbcysxXSppOm4ubGVuZ3RoLGM9UjAobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHRUKGMpKTtmb3Ioci5zb3J0KFpFKSxzPTA7czxyLmxlbmd0aDtzKyspSkUocltzXSxlKSxlPWxpKGUsZS5uZXh0KTtyZXR1cm4gZX1mdW5jdGlvbiBaRShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIEpFKG4sdCl7aWYodD0kRShuLHQpLHQpe2xldCBlPVAwKHQsbik7bGkodCx0Lm5leHQpLGxpKGUsZS5uZXh0KX19ZnVuY3Rpb24gJEUobix0KXtsZXQgZT10LGk9bi54LHI9bi55LHM9LTEvMCxvO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgZj1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihmPD1pJiZmPnMpe2lmKHM9ZixmPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1vPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1zKXJldHVybiBvO2xldCBhPW8sbD1vLngsYz1vLnksdT0xLzAsaDtlPW87ZG8gaT49ZS54JiZlLng+PWwmJmkhPT1lLngmJnpyKHI8Yz9pOnMscixsLGMscjxjP3M6aSxyLGUueCxlLnkpJiYoaD1NYXRoLmFicyhyLWUueSkvKGktZS54KSxNbyhlLG4pJiYoaDx1fHxoPT09dSYmKGUueD5vLnh8fGUueD09PW8ueCYmS0UobyxlKSkpJiYobz1lLHU9aCkpLGU9ZS5uZXh0O3doaWxlKGUhPT1hKTtyZXR1cm4gb31mdW5jdGlvbiBLRShuLHQpe3JldHVybiB0ZShuLnByZXYsbix0LnByZXYpPDAmJnRlKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBRRShuLHQsZSxpKXtsZXQgcj1uO2RvIHIuej09PW51bGwmJihyLno9Y2goci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0O3doaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGpFKHIpfWZ1bmN0aW9uIGpFKG4pe2xldCB0LGUsaSxyLHMsbyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLHM9bnVsbCxvPTA7ZTspe2ZvcihvKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WiwhIWkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspYSE9PTAmJihsPT09MHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSkscz9zLm5leHRaPXI6bj1yLHIucHJldlo9cyxzPXI7ZT1pfXMubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSk7cmV0dXJuIG59ZnVuY3Rpb24gY2gobix0LGUsaSxyKXtyZXR1cm4gbj0zMjc2Nyoobi1lKSpyLHQ9MzI3NjcqKHQtaSkqcixuPShufG48PDgpJjE2NzExOTM1LG49KG58bjw8NCkmMjUyNjQ1MTM1LG49KG58bjw8MikmODU4OTkzNDU5LG49KG58bjw8MSkmMTQzMTY1NTc2NSx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxufHQ8PDF9ZnVuY3Rpb24gdFQobil7bGV0IHQ9bixlPW47ZG8odC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHQ7d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIHpyKG4sdCxlLGkscixzLG8sYSl7cmV0dXJuKHItbykqKHQtYSktKG4tbykqKHMtYSk+PTAmJihuLW8pKihpLWEpLShlLW8pKih0LWEpPj0wJiYoZS1vKSoocy1hKS0oci1vKSooaS1hKT49MH1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFuVChuLHQpJiYoTW8obix0KSYmTW8odCxuKSYmaVQobix0KSYmKHRlKG4ucHJldixuLHQucHJldil8fHRlKG4sdC5wcmV2LHQpKXx8RGwobix0KSYmdGUobi5wcmV2LG4sbi5uZXh0KT4wJiZ0ZSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHRlKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRGwobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gTDAobix0LGUsaSl7bGV0IHI9WmEodGUobix0LGUpKSxzPVphKHRlKG4sdCxpKSksbz1aYSh0ZShlLGksbikpLGE9WmEodGUoZSxpLHQpKTtyZXR1cm4hIShyIT09cyYmbyE9PWF8fHI9PT0wJiZZYShuLGUsdCl8fHM9PT0wJiZZYShuLGksdCl8fG89PT0wJiZZYShlLG4saSl8fGE9PT0wJiZZYShlLHQsaSkpfWZ1bmN0aW9uIFlhKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gblQobix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJkwwKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfWZ1bmN0aW9uIE1vKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLG4ubmV4dCk8MD90ZShuLHQsbi5uZXh0KT49MCYmdGUobixuLnByZXYsdCk+PTA6dGUobix0LG4ucHJldik8MHx8dGUobixuLm5leHQsdCk8MH1mdW5jdGlvbiBpVChuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLHM9KG4ueSt0LnkpLzI7ZG8gZS55PnMhPWUubmV4dC55PnMmJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihzLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHQ7d2hpbGUoZSE9PW4pO3JldHVybiBpfWZ1bmN0aW9uIFAwKG4sdCl7bGV0IGU9bmV3IHVoKG4uaSxuLngsbi55KSxpPW5ldyB1aCh0LmksdC54LHQueSkscj1uLm5leHQscz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLHMubmV4dD1pLGkucHJldj1zLGl9ZnVuY3Rpb24gamcobix0LGUsaSl7bGV0IHI9bmV3IHVoKG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gYm8obil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiB1aChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gclQobix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IHM9dCxvPWUtaTtzPGU7cys9aSlyKz0obltvXS1uW3NdKSoobltzKzFdK25bbysxXSksbz1zO3JldHVybiByfXZhciBkbj1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxzPTA7czxlO3I9cysrKWkrPXRbcl0ueCp0W3NdLnktdFtzXS54KnRbcl0ueTtyZXR1cm4gaSouNX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIGRuLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10scz1bXTt0MCh0KSxlMChpLHQpO2xldCBvPXQubGVuZ3RoO2UuZm9yRWFjaCh0MCk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKG8pLG8rPWVbbF0ubGVuZ3RoLGUwKGksZVtsXSk7bGV0IGE9VkUudHJpYW5ndWxhdGUoaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpcy5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gc319O2Z1bmN0aW9uIHQwKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBlMChuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBjaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9bmV3IFVuKFtuZXcgSyguNSwuNSksbmV3IEsoLS41LC41KSxuZXcgSygtLjUsLS41KSxuZXcgSyguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10scz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV07byhjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShzLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXSxjPWUuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9lLmN1cnZlU2VnbWVudHM6MTIsdT1lLnN0ZXBzIT09dm9pZCAwP2Uuc3RlcHM6MSxoPWUuZGVwdGghPT12b2lkIDA/ZS5kZXB0aDoxLGY9ZS5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ZS5iZXZlbEVuYWJsZWQ6ITAsZD1lLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP2UuYmV2ZWxUaGlja25lc3M6LjIsZz1lLmJldmVsU2l6ZSE9PXZvaWQgMD9lLmJldmVsU2l6ZTpkLS4xLHg9ZS5iZXZlbE9mZnNldCE9PXZvaWQgMD9lLmJldmVsT2Zmc2V0OjAsdj1lLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ZS5iZXZlbFNlZ21lbnRzOjMsbT1lLmV4dHJ1ZGVQYXRoLHA9ZS5VVkdlbmVyYXRvciE9PXZvaWQgMD9lLlVWR2VuZXJhdG9yOnNUO2UuYW1vdW50IT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGg9ZS5hbW91bnQpO2xldCBiLF89ITEsUyxMLEEsSDttJiYoYj1tLmdldFNwYWNlZFBvaW50cyh1KSxfPSEwLGY9ITEsUz1tLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQpLGZ8fCh2PTAsZD0wLGc9MCx4PTApO2xldCB0dD1hLmV4dHJhY3RQb2ludHMoYyksWD10dC5zaGFwZSx5PXR0LmhvbGVzO2lmKCFkbi5pc0Nsb2NrV2lzZShYKSl7WD1YLnJldmVyc2UoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107ZG4uaXNDbG9ja1dpc2UoSikmJih5W0NdPUoucmV2ZXJzZSgpKX19bGV0IEQ9ZG4udHJpYW5ndWxhdGVTaGFwZShYLHkpLEY9WDtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107WD1YLmNvbmNhdChKKX1mdW5jdGlvbiB6KEMsaixKKXtyZXR1cm4ganx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxqLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoSikuYWRkKEMpfWxldCBOPVgubGVuZ3RoLFY9RC5sZW5ndGg7ZnVuY3Rpb24gUShDLGosSil7bGV0IGl0LGV0LHZ0LGJ0PUMueC1qLngsSXQ9Qy55LWoueSxadD1KLngtQy54LHF0PUoueS1DLnksRT1idCpidCtJdCpJdCx3PWJ0KnF0LUl0Klp0O2lmKE1hdGguYWJzKHcpPk51bWJlci5FUFNJTE9OKXtsZXQgcT1NYXRoLnNxcnQoRSkscnQ9TWF0aC5zcXJ0KFp0Klp0K3F0KnF0KSxndD1qLngtSXQvcSxXPWoueStidC9xLF90PUoueC1xdC9ydCx5dD1KLnkrWnQvcnQsdXQ9KChfdC1ndCkqcXQtKHl0LVcpKlp0KS8oYnQqcXQtSXQqWnQpO2l0PWd0K2J0KnV0LUMueCxldD1XK0l0KnV0LUMueTtsZXQgY3Q9aXQqaXQrZXQqZXQ7aWYoY3Q8PTIpcmV0dXJuIG5ldyBLKGl0LGV0KTt2dD1NYXRoLnNxcnQoY3QvMil9ZWxzZXtsZXQgcT0hMTtidD5OdW1iZXIuRVBTSUxPTj9adD5OdW1iZXIuRVBTSUxPTiYmKHE9ITApOmJ0PC1OdW1iZXIuRVBTSUxPTj9adDwtTnVtYmVyLkVQU0lMT04mJihxPSEwKTpNYXRoLnNpZ24oSXQpPT09TWF0aC5zaWduKHF0KSYmKHE9ITApLHE/KGl0PS1JdCxldD1idCx2dD1NYXRoLnNxcnQoRSkpOihpdD1idCxldD1JdCx2dD1NYXRoLnNxcnQoRS8yKSl9cmV0dXJuIG5ldyBLKGl0L3Z0LGV0L3Z0KX1sZXQgYXQ9W107Zm9yKGxldCBDPTAsaj1GLmxlbmd0aCxKPWotMSxpdD1DKzE7QzxqO0MrKyxKKyssaXQrKylKPT09aiYmKEo9MCksaXQ9PT1qJiYoaXQ9MCksYXRbQ109UShGW0NdLEZbSl0sRltpdF0pO2xldCBHPVtdLCQsbHQ9YXQuY29uY2F0KCk7Zm9yKGxldCBDPTAsaj15Lmxlbmd0aDtDPGo7QysrKXtsZXQgSj15W0NdOyQ9W107Zm9yKGxldCBpdD0wLGV0PUoubGVuZ3RoLHZ0PWV0LTEsYnQ9aXQrMTtpdDxldDtpdCsrLHZ0KyssYnQrKyl2dD09PWV0JiYodnQ9MCksYnQ9PT1ldCYmKGJ0PTApLCRbaXRdPVEoSltpdF0sSlt2dF0sSltidF0pO0cucHVzaCgkKSxsdD1sdC5jb25jYXQoJCl9Zm9yKGxldCBDPTA7Qzx2O0MrKyl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksLUopfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7bXQocXQueCxxdC55LC1KKX19fWxldCBkdD1nK3g7Zm9yKGxldCBDPTA7QzxOO0MrKyl7bGV0IGo9Zj96KFhbQ10sbHRbQ10sZHQpOlhbQ107Xz8oQS5jb3B5KFMubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai54KSxMLmNvcHkoUy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGoueSksSC5jb3B5KGJbMF0pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChqLngsai55LDApfWZvcihsZXQgQz0xO0M8PXU7QysrKWZvcihsZXQgaj0wO2o8TjtqKyspe2xldCBKPWY/eihYW2pdLGx0W2pdLGR0KTpYW2pdO18/KEEuY29weShTLm5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueCksTC5jb3B5KFMuYmlub3JtYWxzW0NdKS5tdWx0aXBseVNjYWxhcihKLnkpLEguY29weShiW0NdKS5hZGQoQSkuYWRkKEwpLG10KEgueCxILnksSC56KSk6bXQoSi54LEoueSxoL3UqQyl9Zm9yKGxldCBDPXYtMTtDPj0wO0MtLSl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksaCtKKX1mb3IobGV0IGV0PTAsdnQ9eS5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXlbZXRdOyQ9R1tldF07Zm9yKGxldCBJdD0wLFp0PWJ0Lmxlbmd0aDtJdDxadDtJdCsrKXtsZXQgcXQ9eihidFtJdF0sJFtJdF0saXQpO18/bXQocXQueCxxdC55K2JbdS0xXS55LGJbdS0xXS54K0opOm10KHF0LngscXQueSxoK0opfX19eHQoKSxrKCk7ZnVuY3Rpb24geHQoKXtsZXQgQz1yLmxlbmd0aC8zO2lmKGYpe2xldCBqPTAsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzJdK0osZXRbMV0rSixldFswXStKKX1qPXUrdioyLEo9TipqO2ZvcihsZXQgaXQ9MDtpdDxWO2l0Kyspe2xldCBldD1EW2l0XTtTdChldFswXStKLGV0WzFdK0osZXRbMl0rSil9fWVsc2V7Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzJdLEpbMV0sSlswXSl9Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzBdK04qdSxKWzFdK04qdSxKWzJdK04qdSl9fWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMCl9ZnVuY3Rpb24gaygpe2xldCBDPXIubGVuZ3RoLzMsaj0wO0Z0KEYsaiksais9Ri5sZW5ndGg7Zm9yKGxldCBKPTAsaXQ9eS5sZW5ndGg7SjxpdDtKKyspe2xldCBldD15W0pdO0Z0KGV0LGopLGorPWV0Lmxlbmd0aH1pLmFkZEdyb3VwKEMsci5sZW5ndGgvMy1DLDEpfWZ1bmN0aW9uIEZ0KEMsail7bGV0IEo9Qy5sZW5ndGg7Zm9yKDstLUo+PTA7KXtsZXQgaXQ9SixldD1KLTE7ZXQ8MCYmKGV0PUMubGVuZ3RoLTEpO2ZvcihsZXQgdnQ9MCxidD11K3YqMjt2dDxidDt2dCsrKXtsZXQgSXQ9Tip2dCxadD1OKih2dCsxKSxxdD1qK2l0K0l0LEU9aitldCtJdCx3PWorZXQrWnQscT1qK2l0K1p0O0IocXQsRSx3LHEpfX19ZnVuY3Rpb24gbXQoQyxqLEope2wucHVzaChDKSxsLnB1c2goaiksbC5wdXNoKEopfWZ1bmN0aW9uIFN0KEMsaixKKXtzdChDKSxzdChqKSxzdChKKTtsZXQgaXQ9ci5sZW5ndGgvMyxldD1wLmdlbmVyYXRlVG9wVVYoaSxyLGl0LTMsaXQtMixpdC0xKTtudChldFswXSksbnQoZXRbMV0pLG50KGV0WzJdKX1mdW5jdGlvbiBCKEMsaixKLGl0KXtzdChDKSxzdChqKSxzdChpdCksc3Qoaiksc3QoSiksc3QoaXQpO2xldCBldD1yLmxlbmd0aC8zLHZ0PXAuZ2VuZXJhdGVTaWRlV2FsbFVWKGkscixldC02LGV0LTMsZXQtMixldC0xKTtudCh2dFswXSksbnQodnRbMV0pLG50KHZ0WzNdKSxudCh2dFsxXSksbnQodnRbMl0pLG50KHZ0WzNdKX1mdW5jdGlvbiBzdChDKXtyLnB1c2gobFtDKjMrMF0pLHIucHVzaChsW0MqMysxXSksci5wdXNoKGxbQyozKzJdKX1mdW5jdGlvbiBudChDKXtzLnB1c2goQy54KSxzLnB1c2goQy55KX19fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxpPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO3JldHVybiBvVChlLGksdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBzPTAsbz10LnNoYXBlcy5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVt0LnNoYXBlc1tzXV07aS5wdXNoKGEpfWxldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gciE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKSxuZXcgY2koaSx0Lm9wdGlvbnMpfX0sc1Q9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10W2UqM10sbz10W2UqMysxXSxhPXRbaSozXSxsPXRbaSozKzFdLGM9dFtyKjNdLHU9dFtyKjMrMV07cmV0dXJuW25ldyBLKHMsbyksbmV3IEsoYSxsKSxuZXcgSyhjLHUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixzKXtsZXQgbz10W2UqM10sYT10W2UqMysxXSxsPXRbZSozKzJdLGM9dFtpKjNdLHU9dFtpKjMrMV0saD10W2kqMysyXSxmPXRbciozXSxkPXRbciozKzFdLGc9dFtyKjMrMl0seD10W3MqM10sdj10W3MqMysxXSxtPXRbcyozKzJdO3JldHVybiBNYXRoLmFicyhhLXUpPE1hdGguYWJzKG8tYyk/W25ldyBLKG8sMS1sKSxuZXcgSyhjLDEtaCksbmV3IEsoZiwxLWcpLG5ldyBLKHgsMS1tKV06W25ldyBLKGEsMS1sKSxuZXcgSyh1LDEtaCksbmV3IEsoZCwxLWcpLG5ldyBLKHYsMS1tKV19fTtmdW5jdGlvbiBvVChuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe2xldCBzPW5baV07ZS5zaGFwZXMucHVzaChzLnV1aWQpfWVsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0LmV4dHJ1ZGVQYXRoIT09dm9pZCAwJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9dmFyIHFpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKDAsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10scz1bXSxvPVtdLGE9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAoYSxsLHUpLGErPWwsbD0wO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKG8sMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9ci5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhlKSxkPWYuc2hhcGUsZz1mLmhvbGVzO2RuLmlzQ2xvY2tXaXNlKGQpPT09ITEmJihkPWQucmV2ZXJzZSgpKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZG4uaXNDbG9ja1dpc2UocCk9PT0hMCYmKGdbdl09cC5yZXZlcnNlKCkpfWxldCB4PWRuLnRyaWFuZ3VsYXRlU2hhcGUoZCxnKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZD1kLmNvbmNhdChwKX1mb3IobGV0IHY9MCxtPWQubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWRbdl07ci5wdXNoKHAueCxwLnksMCkscy5wdXNoKDAsMCwxKSxvLnB1c2gocC54LHAueSl9Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXtsZXQgcD14W3ZdLGI9cFswXStoLF89cFsxXStoLFM9cFsyXStoO2kucHVzaChiLF8sUyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYVQoZSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxzPXQuc2hhcGVzLmxlbmd0aDtyPHM7cisrKXtsZXQgbz1lW3Quc2hhcGVzW3JdXTtpLnB1c2gobyl9cmV0dXJuIG5ldyBxaShpLHQuY3VydmVTZWdtZW50cyl9fTtmdW5jdGlvbiBhVChuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj1uW2VdO3Quc2hhcGVzLnB1c2goci51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH12YXIgaGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O2hoLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciB2bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBmdCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMucm91Z2huZXNzTWFwPW51bGwsdGhpcy5tZXRhbG5lc3NNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmVudk1hcEludGVuc2l0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3ZsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPSEwO3ZhciBmaD1jbGFzcyBleHRlbmRzIHZse2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWUoMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaW9yPSgxKy40KmUpLygxLS40KmUpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgZnQoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IGZ0KDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O2ZoLnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBkaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGZ0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtkaC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgcGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BoLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7dmFyIG1oPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O21oLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgZ2g9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtnaC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4aD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3hoLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgeWg9Y2xhc3MgZXh0ZW5kcyB6bntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt5aC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIEt0PXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gS3QuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCxlIT09dm9pZCAwP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOnR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UPT0ibnVtYmVyIj9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHIscyl7cmV0dXJuIG5bcl0tbltzXX1sZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQodCksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBzPTAsbz0wO28hPT1pOysrcyl7bGV0IGE9ZVtzXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW28rK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLHM9blswXTtmb3IoO3MhPT12b2lkIDAmJnNbaV09PT12b2lkIDA7KXM9bltyKytdO2lmKHM9PT12b2lkIDApcmV0dXJuO2xldCBvPXNbaV07aWYobyE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KG8pKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoLmFwcGx5KGUsbykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgaWYoby50b0FycmF5IT09dm9pZCAwKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksby50b0FycmF5KGUsZS5sZW5ndGgpKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKTtlbHNlIGRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoKG8pKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBzPW4uY2xvbmUoKTtzLm5hbWU9dDtsZXQgbz1bXTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPXMudHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxoPVtdLGY9W107Zm9yKGxldCBkPTA7ZDxjLnRpbWVzLmxlbmd0aDsrK2Qpe2xldCBnPWMudGltZXNbZF0qcjtpZighKGc8ZXx8Zz49aSkpe2gucHVzaChjLnRpbWVzW2RdKTtmb3IobGV0IHg9MDt4PHU7Kyt4KWYucHVzaChjLnZhbHVlc1tkKnUreF0pfX1oLmxlbmd0aCE9PTAmJihjLnRpbWVzPUt0LmNvbnZlcnRBcnJheShoLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUt0LmNvbnZlcnRBcnJheShmLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxvLnB1c2goYykpfXMudHJhY2tzPW87bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbClhPnMudHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1zLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKXMudHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBzLnJlc2V0RHVyYXRpb24oKSxzfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLHM9dC9pO2ZvcihsZXQgbz0wO288cjsrK28pe2xldCBhPWUudHJhY2tzW29dLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKGw9PT0iYm9vbCJ8fGw9PT0ic3RyaW5nIiljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT1hLm5hbWUmJm0uVmFsdWVUeXBlTmFtZT09PWx9KTtpZihjPT09dm9pZCAwKWNvbnRpbnVlO2xldCB1PTAsaD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWgvMyk7bGV0IGY9MCxkPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGY9ZC8zKTtsZXQgZz1hLnRpbWVzLmxlbmd0aC0xLHg7aWYoczw9YS50aW1lc1swXSl7bGV0IG09dSxwPWgtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNlIGlmKHM+PWEudGltZXNbZ10pe2xldCBtPWcqaCt1LHA9bStoLXU7eD1LdC5hcnJheVNsaWNlKGEudmFsdWVzLG0scCl9ZWxzZXtsZXQgbT1hLmNyZWF0ZUludGVycG9sYW50KCkscD11LGI9aC11O20uZXZhbHVhdGUocykseD1LdC5hcnJheVNsaWNlKG0ucmVzdWx0QnVmZmVyLHAsYil9bD09PSJxdWF0ZXJuaW9uIiYmbmV3IEVlKCkuZnJvbUFycmF5KHgpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoeCk7bGV0IHY9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBtPTA7bTx2OysrbSl7bGV0IHA9bSpkK2Y7aWYobD09PSJxdWF0ZXJuaW9uIilFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyxwLHgsMCxjLnZhbHVlcyxwKTtlbHNle2xldCBiPWQtZioyO2ZvcihsZXQgXz0wO188YjsrK18pYy52YWx1ZXNbcCtfXS09eFtfXX19fXJldHVybiBuLmJsZW5kTW9kZT1kMCxufX0scG49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXIhPT12b2lkIDA/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxzPWVbaS0xXTt0OntlOntsZXQgbztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZihyPT09dm9pZCAwKXtpZih0PHMpYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LHMpfWlmKGk9PT1hKWJyZWFrO2lmKHM9cixyPWVbKytpXSx0PHIpYnJlYWsgZX1vPWUubGVuZ3RoO2JyZWFrIG59aWYoISh0Pj1zKSl7bGV0IGE9ZVsxXTt0PGEmJihpPTIscz1hKTtmb3IobGV0IGw9aS0yOzspe2lmKHM9PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKGk9PT1sKWJyZWFrO2lmKHI9cyxzPWVbLS1pLTFdLHQ+PXMpYnJlYWsgZX1vPWksaT0wO2JyZWFrIG59YnJlYWsgdH1mb3IoO2k8bzspe2xldCBhPWkrbz4+PjE7dDxlW2FdP289YTppPWErMX1pZihyPWVbaV0scz1lW2ktMV0scz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYocj09PXZvaWQgMClyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSxzLHQpfXRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5pbnRlcnZhbENoYW5nZWRfKGkscyxyKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaSxzLHQscil9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCBlPXRoaXMucmVzdWx0QnVmZmVyLGk9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPXQqcjtmb3IobGV0IG89MDtvIT09cjsrK28pZVtvXT1pW3Mrb107cmV0dXJuIGV9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtwbi5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPXBuLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3BuLnByb3RvdHlwZS5hZnRlckVuZF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHZoPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGksciksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0Ok5yLGVuZGluZ0VuZDpOcn19aW50ZXJ2YWxDaGFuZ2VkXyh0LGUsaSl7bGV0IHI9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMscz10LTIsbz10KzEsYT1yW3NdLGw9cltvXTtpZihhPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIEZyOnM9dCxhPTIqZS1pO2JyZWFrO2Nhc2UgZWw6cz1yLmxlbmd0aC0yLGE9ZStyW3NdLXJbcysxXTticmVhaztkZWZhdWx0OnM9dCxhPWl9aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgRnI6bz10LGw9MippLWU7YnJlYWs7Y2FzZSBlbDpvPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0Om89dC0xLGw9ZX1sZXQgYz0oaS1lKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1zKnUsdGhpcy5fb2Zmc2V0TmV4dD1vKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixkPXRoaXMuX3dlaWdodE5leHQsZz0oaS1lKS8oci1lKSx4PWcqZyx2PXgqZyxtPS1mKnYrMipmKngtZipnLHA9KDErZikqdisoLTEuNS0yKmYpKngrKC0uNStmKSpnKzEsYj0oLTEtZCkqdisoMS41K2QpKngrLjUqZyxfPWQqdi1kKng7Zm9yKGxldCBTPTA7UyE9PWE7KytTKXNbU109bSpvW3UrU10rcCpvW2MrU10rYipvW2wrU10rXypvW2grU107cmV0dXJuIHN9fSxfbD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09YTsrK2Ypc1tmXT1vW2MrZl0qaCtvW2wrZl0qdTtyZXR1cm4gc319LF9oPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LFhlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9S3QuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9S3QuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBlPXQuY29uc3RydWN0b3IsaTtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpLdC5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOkt0LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBfaCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgX2wodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHZoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIGphOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIHRsOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBldTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKGU9PT12b2lkIDApe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGkpO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixpKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gamE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gdGw7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZXV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKj10fXJldHVybiB0aGlzfXRyaW0odCxlKXtsZXQgaT10aGlzLnRpbWVzLHI9aS5sZW5ndGgscz0wLG89ci0xO2Zvcig7cyE9PXImJmlbc108dDspKytzO2Zvcig7byE9PS0xJiZpW29dPmU7KS0tbztpZigrK28scyE9PTB8fG8hPT1yKXtzPj1vJiYobz1NYXRoLm1heChvLDEpLHM9by0xKTtsZXQgYT10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9S3QuYXJyYXlTbGljZShpLHMsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxzKmEsbyphKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLGU9dGhpcy5nZXRWYWx1ZVNpemUoKTtlLU1hdGguZmxvb3IoZSkhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLHM9aS5sZW5ndGg7cz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBhPTA7YSE9PXM7YSsrKXtsZXQgbD1pW2FdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobyE9PW51bGwmJm8+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxvKSx0PSExO2JyZWFrfW89bH1pZihyIT09dm9pZCAwJiZLdC5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PUt0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj10aGlzLmdldEludGVycG9sYXRpb24oKT09PWV1LHM9dC5sZW5ndGgtMSxvPTE7Zm9yKGxldCBhPTE7YTxzOysrYSl7bGV0IGw9ITEsYz10W2FdLHU9dFthKzFdO2lmKGMhPT11JiYoYSE9PTF8fGMhPT10WzBdKSlpZihyKWw9ITA7ZWxzZXtsZXQgaD1hKmksZj1oLWksZD1oK2k7Zm9yKGxldCBnPTA7ZyE9PWk7KytnKXtsZXQgeD1lW2grZ107aWYoeCE9PWVbZitnXXx8eCE9PWVbZCtnXSl7bD0hMDticmVha319fWlmKGwpe2lmKGEhPT1vKXt0W29dPXRbYV07bGV0IGg9YSppLGY9byppO2ZvcihsZXQgZD0wO2QhPT1pOysrZCllW2YrZF09ZVtoK2RdfSsrb319aWYocz4wKXt0W29dPXRbc107Zm9yKGxldCBhPXMqaSxsPW8qaSxjPTA7YyE9PWk7KytjKWVbbCtjXT1lW2ErY107KytvfXJldHVybiBvIT09dC5sZW5ndGg/KHRoaXMudGltZXM9S3QuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZShlLDAsbyppKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxpPXRoaXMuY29uc3RydWN0b3Iscj1uZXcgaSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtYZS5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj10bDt2YXIgdWk9Y2xhc3MgZXh0ZW5kcyBYZXt9O3VpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjt1aS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3VpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgd2w9Y2xhc3MgZXh0ZW5kcyBYZXt9O3dsLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIEtyPWNsYXNzIGV4dGVuZHMgWGV7fTtLci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgd2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9KGktZSkvKHItZSksYz10KmE7Zm9yKGxldCB1PWMrYTtjIT09dTtjKz00KUVlLnNsZXJwRmxhdChzLDAsbyxjLWEsbyxjLGwpO3JldHVybiBzfX0sWGk9Y2xhc3MgZXh0ZW5kcyBYZXtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyB3aCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WGkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO1hpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBoaT1jbGFzcyBleHRlbmRzIFhle307aGkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7aGkucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtoaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249amE7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIFFyPWNsYXNzIGV4dGVuZHMgWGV7fTtRci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgTWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj1RaCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9aSx0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9cix0aGlzLnV1aWQ9dG4oKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgZT1bXSxpPXQudHJhY2tzLHI9MS8odC5mcHN8fDEpO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChjVChpW29dKS5zY2FsZShyKSk7bGV0IHM9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIHMudXVpZD10LnV1aWQsc31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgcz0wLG89aS5sZW5ndGg7cyE9PW87KytzKWUucHVzaChYZS50b0pTT04oaVtzXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgcz1lLmxlbmd0aCxvPVtdO2ZvcihsZXQgYT0wO2E8czthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK3MtMSklcyxhLChhKzEpJXMpLGMucHVzaCgwLDEsMCk7bGV0IHU9S3QuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUt0LnNvcnRlZEFycmF5KGwsMSx1KSxjPUt0LnNvcnRlZEFycmF5KGMsMSx1KSwhciYmbFswXT09PTAmJihsLnB1c2gocyksYy5wdXNoKGNbMF0pKSxvLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLG8pfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxzPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChzKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9cltoXTtmfHwocltoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBvPVtdO2ZvcihsZXQgYSBpbiByKW8ucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gb31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGgsZixkLGcseCl7aWYoZC5sZW5ndGghPT0wKXtsZXQgdj1bXSxtPVtdO0t0LmZsYXR0ZW5KU09OKGQsdixtLGcpLHYubGVuZ3RoIT09MCYmeC5wdXNoKG5ldyBoKGYsdixtKSl9fSxyPVtdLHM9dC5uYW1lfHwiZGVmYXVsdCIsbz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBkPXt9LGc7Zm9yKGc9MDtnPGYubGVuZ3RoO2crKylpZihmW2ddLm1vcnBoVGFyZ2V0cylmb3IobGV0IHg9MDt4PGZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDt4KyspZFtmW2ddLm1vcnBoVGFyZ2V0c1t4XV09LTE7Zm9yKGxldCB4IGluIGQpe2xldCB2PVtdLG09W107Zm9yKGxldCBwPTA7cCE9PWZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3Ape2xldCBiPWZbZ107di5wdXNoKGIudGltZSksbS5wdXNoKGIubW9ycGhUYXJnZXQ9PT14PzE6MCl9ci5wdXNoKG5ldyBLcigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIreCsiXSIsdixtKSl9bD1kLmxlbmd0aCoob3x8MSl9ZWxzZXtsZXQgZD0iLmJvbmVzWyIrZVtoXS5uYW1lKyJdIjtpKFFyLGQrIi5wb3NpdGlvbiIsZiwicG9zIixyKSxpKFhpLGQrIi5xdWF0ZXJuaW9uIixmLCJyb3QiLHIpLGkoUXIsZCsiLnNjYWxlIixmLCJzY2wiLHIpfX1yZXR1cm4gci5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMocyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLGU9MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLHMudGltZXNbcy50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGxUKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEtyO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gUXI7Y2FzZSJjb2xvciI6cmV0dXJuIHdsO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFhpO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdWk7Y2FzZSJzdHJpbmciOnJldHVybiBoaX10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfWZ1bmN0aW9uIGNUKG4pe2lmKG4udHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9bFQobi50eXBlKTtpZihuLnRpbWVzPT09dm9pZCAwKXtsZXQgZT1bXSxpPVtdO0t0LmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciBqcj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxNaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9dGhpcyxzPSExLG89MCxhPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXthKysscz09PSExJiZyLm9uU3RhcnQhPT12b2lkIDAmJnIub25TdGFydCh1LG8sYSkscz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe28rKyxyLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJnIub25Qcm9ncmVzcyh1LG8sYSksbz09PWEmJihzPSExLHIub25Mb2FkIT09dm9pZCAwJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7ci5vbkVycm9yIT09dm9pZCAwJiZyLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgZD1jW2hdLGc9Y1toKzFdO2lmKGQuZ2xvYmFsJiYoZC5sYXN0SW5kZXg9MCksZC50ZXN0KHUpKXJldHVybiBnfXJldHVybiBudWxsfX19LHVUPW5ldyBNaCxtbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dCE9PXZvaWQgMD90OnVULHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIscyl7aS5sb2FkKHQscixlLHMpfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LERuPXt9LGJoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz1qci5nZXQodCk7aWYocyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShzKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCkscztpZihEblt0XSE9PXZvaWQgMCl7RG5bdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO3JldHVybn1Eblt0XT1bXSxEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IG89bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gobykudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1Eblt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mP3BhcnNlSW50KGYpOjAsZz1kIT09MCx4PTAsdj1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KG0pe3AoKTtmdW5jdGlvbiBwKCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpffSk9PntpZihiKW0uY2xvc2UoKTtlbHNle3grPV8uYnl0ZUxlbmd0aDtsZXQgUz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmcsbG9hZGVkOngsdG90YWw6ZH0pO2ZvcihsZXQgTD0wLEE9dS5sZW5ndGg7TDxBO0wrKyl7bGV0IEg9dVtMXTtILm9uUHJvZ3Jlc3MmJkgub25Qcm9ncmVzcyhTKX1tLmVucXVldWUoXykscCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKHYpfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxhKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihhPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKGEpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLGQ9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihnPT5kLmRlY29kZShnKSl9fX0pLnRoZW4oYz0+e2pyLmFkZCh0LGMpO2xldCB1PURuW3RdO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkxvYWQmJmQub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1Eblt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgRG5bdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgZD11W2hdO2Qub25FcnJvciYmZC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319O3ZhciBibD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9cm8oImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksanIuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxyJiZyKGgpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHMubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sU2g9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBXcixvPW5ldyBibCh0aGlzLm1hbmFnZXIpO28uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe28ubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe3MuaW1hZ2VzW2NdPXUsYSsrLGE9PT02JiYocy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHMpKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIHN9fTt2YXIgRWg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBhZSxvPW5ldyBibCh0aGlzLm1hbmFnZXIpO3JldHVybiBvLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLG8uc2V0UGF0aCh0aGlzLnBhdGgpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3MuaW1hZ2U9YSxzLm5lZWRzVXBkYXRlPSEwLGUhPT12b2lkIDAmJmUocyl9LGksciksc319LFllPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O1llLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBUaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGkpLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IGZ0KGUpfWNvcHkodCl7cmV0dXJuIFllLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O1RoLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbjA9bmV3IHd0LGkwPW5ldyBULHIwPW5ldyBULFNvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBLKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHd0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHFyLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSygxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O2kwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxlLnBvc2l0aW9uLmNvcHkoaTApLHIwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQocjApLGUudXBkYXRlTWF0cml4V29ybGQoKSxuMC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuMCksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIHRoaXMuYmlhcyE9PTAmJih0LmJpYXM9dGhpcy5iaWFzKSx0aGlzLm5vcm1hbEJpYXMhPT0wJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksdGhpcy5yYWRpdXMhPT0xJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCh0aGlzLm1hcFNpemUueCE9PTUxMnx8dGhpcy5tYXBTaXplLnkhPT01MTIpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFNsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT1WdSoyKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LHM9dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxzIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPXMsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtTbC5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITA7dmFyIEFoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPU1hdGguUEkvMyxzPTAsbz0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLmRpc3RhbmNlPWksdGhpcy5hbmdsZT1yLHRoaXMucGVudW1icmE9cyx0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IFNsfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10L01hdGguUEl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmFuZ2xlPXQuYW5nbGUsdGhpcy5wZW51bWJyYT10LnBlbnVtYnJhLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0FoLnByb3RvdHlwZS5pc1Nwb3RMaWdodD0hMDt2YXIgczA9bmV3IHd0LFpzPW5ldyBULE51PW5ldyBULEVsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEsoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgV3QoMiwxLDEsMSksbmV3IFd0KDAsMSwxLDEpLG5ldyBXdCgzLDEsMSwxKSxuZXcgV3QoMSwxLDEsMSksbmV3IFd0KDMsMCwxLDEpLG5ldyBXdCgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyBUKDEsMCwwKSxuZXcgVCgtMSwwLDApLG5ldyBUKDAsMCwxKSxuZXcgVCgwLDAsLTEpLG5ldyBUKDAsMSwwKSxuZXcgVCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LHM9dC5kaXN0YW5jZXx8aS5mYXI7cyE9PWkuZmFyJiYoaS5mYXI9cyxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksWnMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShacyksTnUuY29weShpLnBvc2l0aW9uKSxOdS5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChOdSksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1acy54LC1acy55LC1acy56KSxzMC5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzMCl9fTtFbC5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBDaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRWx9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtDaC5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBUbD1jbGFzcyBleHRlbmRzIFNve2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFZpKC01LDUsNSwtNSwuNSw1MDApKX19O1RsLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIFJoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGt0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcga3QsdGhpcy5zaGFkb3c9bmV3IFRsfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O1JoLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIExoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0xoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgUGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fTtQaC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBBbD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgVCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwuNDg4NjAzKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bM10sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDEuMDkyNTQ4KihpKnIpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDEuMDkyNTQ4KihyKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzZdLC4zMTUzOTIqKDMqcypzLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDEuMDkyNTQ4KihpKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC41NDYyNzQqKGkqaS1yKnIpKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkob1swXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksZS5hZGRTY2FsZWRWZWN0b3Iob1sxXSwyKi41MTE2NjQqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwyKi41MTE2NjQqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwyKi41MTE2NjQqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1s0XSwyKi40MjkwNDMqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDIqLjQyOTA0MypyKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpzKnMtLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwyKi40MjkwNDMqaSpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC40MjkwNDMqKGkqaS1yKnIpKSxlfWFkZCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmFkZCh0LmNvZWZmaWNpZW50c1tlXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmxlcnAodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW2VdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tlXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlK3IqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlK3IqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypzLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipzLGVbNl09LjMxNTM5MiooMypzKnMtMSksZVs3XT0xLjA5MjU0OCppKnMsZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0FsLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIEVvPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodD1uZXcgQWwsZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O0VvLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIERoPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoKGkpe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBlPT09LTE/Ii4vIjp0LnN1YnN0cigwLGUrMSl9c3RhdGljIHJlc29sdmVVUkwodCxlKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fSxJaD1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtJaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9e307YS5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKHMub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtqci5hZGQodCxsKSxlJiZlKGwpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkscy5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05oLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKYSxoVD17Z2V0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBKYT09PXZvaWQgMCYmKEphPW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksSmF9LHNldENvbnRleHQ6ZnVuY3Rpb24obil7SmE9bn19LEZoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgcz10aGlzLG89bmV3IGJoKHRoaXMubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3RyeXtsZXQgbD1hLnNsaWNlKDApO2hULmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fSx6aD1jbGFzcyBleHRlbmRzIEVve2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHZvaWQgMCxpKTtsZXQgcj1uZXcgZnQoKS5zZXQodCkscz1uZXcgZnQoKS5zZXQoZSksbz1uZXcgVChyLnIsci5nLHIuYiksYT1uZXcgVChzLnIscy5nLHMuYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkobykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkobykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX07emgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIFVoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT1uZXcgZnQoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtVaC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCBlPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gZS5idWZmZXI9dGhpcy5idWZmZXIsZS5sb29wPXRoaXMubG9vcCxlLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxlLmxvb3BFbmQ9dGhpcy5sb29wRW5kLGUub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxlLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1lLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX07dmFyIE9oPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1lLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdCs9ZVtpXTtyZXR1cm4gdC9lLmxlbmd0aH19LGtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pO2xldCByLHMsbztzd2l0Y2goZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLHM9dGhpcy5fc2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoaSo1KTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxzPXRoaXMuX2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo1KX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1zLHRoaXMuX3NldElkZW50aXR5PW8sdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUscz10KnIrcixvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihvPT09MCl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbcythXT1pW2FdO289ZX1lbHNle28rPWU7bGV0IGE9ZS9vO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHMsMCxhLHIpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1vfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Uscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsbz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHM8MSl7bGV0IGw9ZSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixsLDEtcyxlKX1vPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcsZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgcz1pLG89cjtzIT09bzsrK3MpZVtzXT1lW3IrcyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixzKXtpZihyPj0uNSlmb3IobGV0IG89MDtvIT09czsrK28pdFtlK29dPXRbaStvXX1fc2xlcnAodCxlLGkscil7RWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7bGV0IG89dGhpcy5fd29ya0luZGV4KnM7RWUubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxvLHQsZSx0LGkpLEVlLnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxyKX1fbGVycCh0LGUsaSxyLHMpe2xldCBvPTEtcjtmb3IobGV0IGE9MDthIT09czsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qbyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLHMpe2ZvcihsZXQgbz0wO28hPT1zOysrbyl7bGV0IGE9ZStvO3RbYV09dFthXSt0W2krb10qcn19fSxlZj0iXFxbXFxdXFwuOlxcLyIsZlQ9bmV3IFJlZ0V4cCgiWyIrZWYrIl0iLCJnIiksbmY9IlteIitlZisiXSIsZFQ9IlteIitlZi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIscFQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixuZiksbVQ9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsZFQpLGdUPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSx4VD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHlUPW5ldyBSZWdFeHAoIl4iK3BUK21UK2dUK3hUKyIkIiksdlQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sSGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj10aGlzLl9iaW5kaW5nc1tpXTtyIT09dm9pZCAwJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxOdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpLHRoaXMubm9kZT1OdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10LHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIHQmJnQuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgTnQuQ29tcG9zaXRlKHQsZSxpKTpuZXcgTnQodCxlLGkpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKGZULCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IGU9eVQuZXhlYyh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgaT17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LHI9aS5ub2RlTmFtZSYmaS5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHIhPT12b2lkIDAmJnIhPT0tMSl7bGV0IHM9aS5ub2RlTmFtZS5zdWJzdHJpbmcocisxKTt2VC5pbmRleE9mKHMpIT09LTEmJihpLm5vZGVOYW1lPWkubm9kZU5hbWUuc3Vic3RyaW5nKDAsciksaS5vYmplY3ROYW1lPXMpfWlmKGkucHJvcGVydHlOYW1lPT09bnVsbHx8aS5wcm9wZXJ0eU5hbWUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIGl9c3RhdGljIGZpbmROb2RlKHQsZSl7aWYoIWV8fGU9PT0iInx8ZT09PSIuInx8ZT09PS0xfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2xldCBpPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZihpIT09dm9pZCAwKXJldHVybiBpfWlmKHQuY2hpbGRyZW4pe2xldCBpPWZ1bmN0aW9uKHMpe2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtsZXQgYT1zW29dO2lmKGEubmFtZT09PWV8fGEudXVpZD09PWUpcmV0dXJuIGE7bGV0IGw9aShhLmNoaWxkcmVuKTtpZihsKXJldHVybiBsfXJldHVybiBudWxsfSxyPWkodC5jaGlsZHJlbik7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QodCxlKXt0W2VdPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpdFtlKytdPWlbcl19X2dldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RbZV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheSh0LGUpfV9zZXRWYWx1ZV9kaXJlY3QodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUodCxlKX1fc2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGk9ZS5vYmplY3ROYW1lLHI9ZS5wcm9wZXJ0eU5hbWUscz1lLnByb3BlcnR5SW5kZXg7aWYodHx8KHQ9TnQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtyZXR1cm59aWYoaSl7bGV0IGM9ZS5vYmplY3RJbmRleDtzd2l0Y2goaSl7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO3JldHVybn1pZighdC5tYXRlcmlhbC5tYXRlcmlhbHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtyZXR1cm59dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtyZXR1cm59dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0ubmFtZT09PWMpe2M9dTticmVha31icmVhaztkZWZhdWx0OmlmKHRbaV09PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtyZXR1cm59dD10W2ldfWlmKGMhPT12b2lkIDApe2lmKHRbY109PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7cmV0dXJufXQ9dFtjXX19bGV0IG89dFtyXTtpZihvPT09dm9pZCAwKXtsZXQgYz1lLm5vZGVOYW1lO2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrYysiLiIrcisiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIix0KTtyZXR1cm59bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx0Lm5lZWRzVXBkYXRlIT09dm9pZCAwP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnQubWF0cml4V29ybGROZWVkc1VwZGF0ZSE9PXZvaWQgMCYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBsPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHMhPT12b2lkIDApe2lmKHI9PT0ibW9ycGhUYXJnZXRJbmZsdWVuY2VzIil7aWYoIXQuZ2VvbWV0cnkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7cmV0dXJufWlmKHQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTtyZXR1cm59dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10hPT12b2lkIDAmJihzPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1lbHNle2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtyZXR1cm59fWw9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8sdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSBvLmZyb21BcnJheSE9PXZvaWQgMCYmby50b0FycmF5IT09dm9pZCAwPyhsPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOkFycmF5LmlzQXJyYXkobyk/KGw9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6dGhpcy5wcm9wZXJ0eU5hbWU9cjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtsXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbbF1bYV19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19O050LkNvbXBvc2l0ZT1IaDtOdC5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307TnQucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07TnQucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W050LnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtOdC5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIFZoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPXRuKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgaT0wLHI9YXJndW1lbnRzLmxlbmd0aDtpIT09cjsrK2kpdFthcmd1bWVudHNbaV0udXVpZF09aTt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX2JpbmRpbmdzLG89cy5sZW5ndGgsYSxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLGQ9Zi51dWlkLGc9ZVtkXTtpZihnPT09dm9pZCAwKXtnPWwrKyxlW2RdPWcsdC5wdXNoKGYpO2ZvcihsZXQgeD0wLHY9bzt4IT09djsrK3gpc1t4XS5wdXNoKG5ldyBOdChmLGlbeF0sclt4XSkpfWVsc2UgaWYoZzxjKXthPXRbZ107bGV0IHg9LS1jLHY9dFt4XTtlW3YudXVpZF09Zyx0W2ddPXYsZVtkXT14LHRbeF09Zjtmb3IobGV0IG09MCxwPW87bSE9PXA7KyttKXtsZXQgYj1zW21dLF89Ylt4XSxTPWJbZ107YltnXT1fLFM9PT12b2lkIDAmJihTPW5ldyBOdChmLGlbbV0sclttXSkpLGJbeF09U319ZWxzZSB0W2ddIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgbz0wLGE9YXJndW1lbnRzLmxlbmd0aDtvIT09YTsrK28pe2xldCBsPWFyZ3VtZW50c1tvXSxjPWwudXVpZCx1PWVbY107aWYodSE9PXZvaWQgMCYmdT49cyl7bGV0IGg9cysrLGY9dFtoXTtlW2YudXVpZF09dSx0W3VdPWYsZVtjXT1oLHRbaF09bDtmb3IobGV0IGQ9MCxnPXI7ZCE9PWc7KytkKXtsZXQgeD1pW2RdLHY9eFtoXSxtPXhbdV07eFt1XT12LHhbaF09bX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfLG89dC5sZW5ndGg7Zm9yKGxldCBhPTAsbD1hcmd1bWVudHMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9YXJndW1lbnRzW2FdLHU9Yy51dWlkLGg9ZVt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSBlW3VdLGg8cyl7bGV0IGY9LS1zLGQ9dFtmXSxnPS0tbyx4PXRbZ107ZVtkLnV1aWRdPWgsdFtoXT1kLGVbeC51dWlkXT1mLHRbZl09eCx0LnBvcCgpO2ZvcihsZXQgdj0wLG09cjt2IT09bTsrK3Ype2xldCBwPWlbdl0sYj1wW2ZdLF89cFtnXTtwW2hdPWIscFtmXT1fLHAucG9wKCl9fWVsc2V7bGV0IGY9LS1vLGQ9dFtmXTtmPjAmJihlW2QudXVpZF09aCksdFtoXT1kLHQucG9wKCk7Zm9yKGxldCBnPTAseD1yO2chPT14OysrZyl7bGV0IHY9aVtnXTt2W2hdPXZbZl0sdi5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9c3Vic2NyaWJlXyh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxyPWlbdF0scz10aGlzLl9iaW5kaW5ncztpZihyIT09dm9pZCAwKXJldHVybiBzW3JdO2xldCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtyPXMubGVuZ3RoLGlbdF09cixvLnB1c2godCksYS5wdXNoKGUpLHMucHVzaChoKTtmb3IobGV0IGY9dSxkPWwubGVuZ3RoO2YhPT1kOysrZil7bGV0IGc9bFtmXTtoW2ZdPW5ldyBOdChnLHQsZSl9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPWVbdF07aWYoaSE9PXZvaWQgMCl7bGV0IHI9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgtMSxsPW9bYV0sYz10W2FdO2VbY109aSxvW2ldPWwsby5wb3AoKSxzW2ldPXNbYV0scy5wb3AoKSxyW2ldPXJbYV0sci5wb3AoKX19fTtWaC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgR2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBzPWUudHJhY2tzLG89cy5sZW5ndGgsYT1uZXcgQXJyYXkobyksbD17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfTtmb3IobGV0IGM9MDtjIT09bzsrK2Mpe2xldCB1PXNbY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkobyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVp3LHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiZ0aGlzLnRpbWVTY2FsZSE9PTAmJnRoaXMuX3N0YXJ0VGltZT09PW51bGwmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixzPXQuX2NsaXAuZHVyYXRpb24sbz1zL3IsYT1yL3M7dC53YXJwKDEsbyxlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixzPXIudGltZSxvPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7YT09PW51bGwmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPXMsbFsxXT1zK2ksY1swXT10L28sY1sxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXt0aGlzLl91cGRhdGVXZWlnaHQodCk7cmV0dXJufWxldCBzPXRoaXMuX3N0YXJ0VGltZTtpZihzIT09bnVsbCl7bGV0IGw9KHQtcykqaTtpZihsPDB8fGk9PT0wKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7c3dpdGNoKHRoaXMuYmxlbmRNb2RlKXtjYXNlIGQwOmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSBRaDpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKGkhPT1udWxsKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLHI9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aSE9PW51bGwmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksZT09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxzPXRoaXMuX2xvb3BDb3VudCxvPWk9PT1KdztpZih0PT09MClyZXR1cm4gcz09PS0xP3I6byYmKHMmMSk9PT0xP2UtcjpyO2lmKGk9PT1Zdyl7cz09PS0xJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKHI+PWUpcj1lO2Vsc2UgaWYocjwwKXI9MDtlbHNle3RoaXMudGltZT1yO2JyZWFrIHR9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKHM9PT0tMSYmKHQ+PTA/KHM9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLHRoaXMucmVwZXRpdGlvbnM9PT0wLG8pKTp0aGlzLl9zZXRFbmRpbmdzKHRoaXMucmVwZXRpdGlvbnM9PT0wLCEwLG8pKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEscys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1zO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKGw9PT0xKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLG8pfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxvKTt0aGlzLl9sb29wQ291bnQ9cyx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKG8mJihzJjEpPT09MSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9RnIsci5lbmRpbmdFbmQ9RnIpOih0P3IuZW5kaW5nU3RhcnQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P0ZyOk5yOnIuZW5kaW5nU3RhcnQ9ZWwsZT9yLmVuZGluZ0VuZD10aGlzLnplcm9TbG9wZUF0RW5kP0ZyOk5yOnIuZW5kaW5nRW5kPWVsKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bz09PW51bGwmJihvPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtsZXQgYT1vLnBhcmFtZXRlclBvc2l0aW9ucyxsPW8uc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPXMsbFswXT1lLGFbMV09cyt0LGxbMV09aSx0aGlzfX0sV2g9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxzPXIubGVuZ3RoLG89dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dT09PXZvaWQgMCYmKHU9e30sY1tsXT11KTtmb3IobGV0IGg9MDtoIT09czsrK2gpe2xldCBmPXJbaF0sZD1mLm5hbWUsZz11W2RdO2lmKGchPT12b2lkIDApKytnLnJlZmVyZW5jZUNvdW50LG9baF09ZztlbHNle2lmKGc9b1toXSxnIT09dm9pZCAwKXtnLl9jYWNoZUluZGV4PT09bnVsbCYmKCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpKTtjb250aW51ZX1sZXQgeD1lJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW2hdLmJpbmRpbmcucGFyc2VkUGF0aDtnPW5ldyBraChOdC5jcmVhdGUoaSxkLHgpLGYuVmFsdWVUeXBlTmFtZSxmLmdldFZhbHVlU2l6ZSgpKSwrK2cucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGcsbCxkKSxvW2hdPWd9YVtoXS5yZXN1bHRCdWZmZXI9Zy5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKHQuX2NhY2hlSW5kZXg9PT1udWxsKXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQscyYmcy5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldO3MudXNlQ291bnQrKz09PTAmJih0aGlzLl9sZW5kQmluZGluZyhzKSxzLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy51c2VDb3VudD09PTAmJihzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKHMpKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gZSE9PW51bGwmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXNbZV07aWYobz09PXZvaWQgMClvPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLHNbZV09bztlbHNle2xldCBhPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLG8uYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBzPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3NdLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLHU9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PXUsbFt1XT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2xldCBoPWEuYWN0aW9uQnlSb290LGY9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZDtkZWxldGUgaFtmXSxsLmxlbmd0aD09PTAmJmRlbGV0ZSBvW3NdLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9ZVtpXTstLXMucmVmZXJlbmNlQ291bnQ9PT0wJiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz10aGlzLl9iaW5kaW5ncyxvPXJbZV07bz09PXZvaWQgMCYmKG89e30scltlXT1vKSxvW2ldPXQsdC5fY2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxzPWkucGF0aCxvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPW9bcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbc10sT2JqZWN0LmtleXMoYSkubGVuZ3RoPT09MCYmZGVsZXRlIG9bcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiBpPT09dm9pZCAwJiYoaT1uZXcgX2wobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LHMuX19jYWNoZUluZGV4PWksZVtpXT1zfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qscz1yLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShyLHQpOnQsYT1vIT09bnVsbD9vLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKGk9PT12b2lkIDAmJihvIT09bnVsbD9pPW8uYmxlbmRNb2RlOmk9UWgpLGwhPT12b2lkIDApe2xldCBoPWwuYWN0aW9uQnlSb290W3NdO2lmKGghPT12b2lkIDAmJmguYmxlbmRNb2RlPT09aSlyZXR1cm4gaDtjPWwua25vd25BY3Rpb25zWzBdLG89PT1udWxsJiYobz1jLl9jbGlwKX1pZihvPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdT1uZXcgR2godGhpcyxvLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LGEscyksdX1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQscz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShpLHQpOnQsbz1zP3MudXVpZDp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvXTtyZXR1cm4gYSE9PXZvaWQgMCYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMsZT10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IGk9ZS0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQscz1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQscyxvKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShvKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1yW2ldO2lmKHMhPT12b2lkIDApe2xldCBvPXMua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1vW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsZVt1XT1oLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IG8gaW4gaSl7bGV0IGE9aVtvXS5hY3Rpb25CeVJvb3QsbD1hW2VdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1yW2VdO2lmKHMhPT12b2lkIDApZm9yKGxldCBvIGluIHMpe2xldCBhPXNbb107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtpIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX07V2gucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIFRvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBUbyh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LHFoPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fTtxaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgWGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixzKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9aSx0aGlzLmVsZW1lbnRTaXplPXIsdGhpcy5jb3VudD1zLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1hoLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvMD1uZXcgSyxZaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLKDEvMCwxLzApLGU9bmV3IEsoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW8wLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gbzAuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1lpLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIGEwPW5ldyBULCRhPW5ldyBULFloPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5zdGFydCx0aGlzLmVuZCkubXVsdGlwbHlTY2FsYXIoLjUpfWRlbHRhKHQpe3JldHVybiB0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHRoaXMuZGVsdGEoZSkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpfWNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKXthMC5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksJGEuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgaT0kYS5kb3QoJGEpLHM9JGEuZG90KGEwKS9pO3JldHVybiBlJiYocz1JZShzLDAsMSkpLHN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUsaSl7bGV0IHI9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSk7cmV0dXJuIHRoaXMuZGVsdGEoaSkubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTt2YXIgUW49bmV3IFQsS2E9bmV3IHd0LEZ1PW5ldyB3dCxaaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQpe2xldCBlPUQwKHQpLGk9bmV3IEh0LHI9W10scz1bXSxvPW5ldyBmdCgwLDAsMSksYT1uZXcgZnQoMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCkscy5wdXNoKG8ucixvLmcsby5iKSxzLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShzLDMpKTtsZXQgbD1uZXcgem4oe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIoaSxsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1lLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCBlPXRoaXMuYm9uZXMsaT10aGlzLmdlb21ldHJ5LHI9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7RnUuY29weSh0aGlzLnJvb3QubWF0cml4V29ybGQpLmludmVydCgpO2ZvcihsZXQgcz0wLG89MDtzPGUubGVuZ3RoO3MrKyl7bGV0IGE9ZVtzXTthLnBhcmVudCYmYS5wYXJlbnQuaXNCb25lJiYoS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLm1hdHJpeFdvcmxkKSxRbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oS2EpLHIuc2V0WFlaKG8sUW4ueCxRbi55LFFuLnopLEthLm11bHRpcGx5TWF0cmljZXMoRnUsYS5wYXJlbnQubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobysxLFFuLngsUW4ueSxRbi56KSxvKz0yKX1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIEQwKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsRDAobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBKaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBmdChpKSxyPW5ldyBmdChyKTtsZXQgcz1lLzIsbz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLGQ9MCxnPS1hO2Y8PWU7ZisrLGcrPW8pe2wucHVzaCgtYSwwLGcsYSwwLGcpLGwucHVzaChnLDAsLWEsZywwLGEpO2xldCB4PWY9PT1zP2k6cjt4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zfWxldCB1PW5ldyBIdDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShjLDMpKTtsZXQgaD1uZXcgem4oe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX07dmFyIF9UPW5ldyBGbG9hdDMyQXJyYXkoMSksQ2s9bmV3IEludDMyQXJyYXkoX1QuYnVmZmVyKTtGZS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59O19vLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX07SmgucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07WmgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfTttbi5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLERoLmV4dHJhY3RVcmxCYXNlKG4pfTttbi5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX07WWkucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O1lpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07WWkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O1lpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07R2UucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O0dlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O0dlLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtHZS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9O3NpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtxci5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX07WWgucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKG4pfTtkZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2RlLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9O3d0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfTt3dC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTt3dC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IFQoKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O3d0LnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfTt3dC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTt3dC5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixzKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixzKX07d3QucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07amUucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX07RWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX07RWUucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtyZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07cmUucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX07cmUucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9O3JlLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfTtyZS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX07cmUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxyZS5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX07cmUubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIikscmUuZ2V0Tm9ybWFsKG4sdCxlLGkpfTtVbi5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX07VW4ucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGNpKHRoaXMsbil9O1VuLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IHFpKHRoaXMsbil9O0sucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9O0sucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfTtLLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX07VC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX07VC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfTtULnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07VC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07VC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O1QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtXdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07V3QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtrdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfTtrdC5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfTtrdC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O2t0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7b2UucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2UucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLCR3fSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7ZGwucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtTZS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWWUucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUXQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09bmx9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShubCl9fX0pO1F0LnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307UXQucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUXQucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07SHQucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX07SHQucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBRdChhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOm49PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpfTtIdC5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe2UhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfTtIdC5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtIdC5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtIdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9O0h0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7R2kucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShuPT09ITA/bmw6aW8pLHRoaXN9O0dpLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07Y2kucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtjaS5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1lyLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VG8ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBmdH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PWMwfX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz1ufX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZuLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9bn19fSk7VnQucHJvdG90eXBlLmNsZWFyVGFyZ2V0PWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldChuKSx0aGlzLmNsZWFyKHQsZSxpKX07VnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcChuKX07VnQucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIiksdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX07VnQucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9O1Z0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn07VnQucHJvdG90eXBlLnJlc2V0R0xTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuIiksdGhpcy5zdGF0ZS5yZXNldCgpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc307VnQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfTtWdC5wcm90b3R5cGUuZW5hYmxlU2Npc3NvclRlc3Q9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZW5hYmxlU2Npc3NvclRlc3QoKSBpcyBub3cgLnNldFNjaXNzb3JUZXN0KCkuIiksdGhpcy5zZXRTY2lzc29yVGVzdChuKX07VnQucHJvdG90eXBlLmluaXRNYXRlcmlhbD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUudXBkYXRlU2hhZG93TWFwPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZUN1YmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuZ2V0QWN0aXZlTWlwTWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9bn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9bn19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPW49PT0hMD8kdDpyaX19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sZ2FtbWFGYWN0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpLDJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQwLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOZS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSk7QmgucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IEZoKCkubG9hZChuLGZ1bmN0aW9uKGkpe3Quc2V0QnVmZmVyKGkpfSksdGhpc307T2gucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTthby5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfTthby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX07Tm4uY3Jvc3NPcmlnaW49dm9pZCAwO05uLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEVoO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IHM9ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihzLm1hcHBpbmc9dCksc307Tm4ubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgU2g7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTt0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246JGh9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSRoKTtmdW5jdGlvbiByZihuLHQsZSl7aWYoZT09PTEpcmV0dXJuIG5ldyBmdCh0KTtsZXQgaT1waSh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBmdChzYyhpLG4pKDEtZSkpfXZhciBnbjsoZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBOMChuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09ZSozKSYmKGk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZSozKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgcz0wO3M8ZTtzKyspcltzKjNdPXRbcyoyXSxyW3MqMysxXT10W3MqMisxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsZSozKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEYwKG4sdCxlKXtsZXQgaT1NYXRoLm1heCh0Lmxlbmd0aC8yLTEsMCkscj1pKjIqMyxzPXIqMyxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIW98fG8uY291bnQhPT1yKSYmKG89bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkocyksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixvKSk7bGV0IGE9by5hcnJheTtmb3IobGV0IGw9MDtsPGk7bCsrKXtsZXRbYyx1LGgsZl09W3RbMipsXSx0WzIqbCsxXSx0WzIqbCsyXSx0WzIqbCszXV0sZD1uZXcgSyhjLHUpLGc9bmV3IEsoaCxmKSx4PW5ldyBLKGgtYyxmLXUpLHY9bmV3IEsoLXgueSx4LngpLnNldExlbmd0aChlLzIpLG09ZC5jbG9uZSgpLmFkZCh2KSxwPWQuY2xvbmUoKS5zdWIodiksYj1nLmNsb25lKCkuYWRkKHYpLF89Zy5jbG9uZSgpLnN1Yih2KSxTPVttLngsbS55LDAscC54LHAueSwwLGIueCxiLnksMCxiLngsYi55LDAscC54LHAueSwwLF8ueCxfLnksMF07YS5zZXQoUyxsKlMubGVuZ3RoKX1vLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAscyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBJbChuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOnMsb3BhY2l0eTpvfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1yZihuLHMsbyE9bnVsbD9vOjEpLGM9ZSh0Lmdlb21ldHJ5KTtyZXR1cm4gdC5nZW9tZXRyeSE9PWMmJih0Lmdlb21ldHJ5PWMpLGEuY29sb3IuZXF1YWxzKGwpfHwoYS5jb2xvci5zZXQobCksYS5uZWVkc1VwZGF0ZT0hMCksITB9dmFyIHdUPXtjcmVhdGVTY2VuZTooKT0+bmV3IFlyfSxSbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT13VC5jcmVhdGVTY2VuZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSIjZmZmIixEaS5pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksciYmdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixyKSx0aGlzLnJlbmRlcmVyPW5ldyBWdCh7Y2FudmFzOnQsYW50aWFsaWFzOiEwLGFscGhhOiEwfSksdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKGkpfW9uUmVzaXplKHQpe3RoaXMucmVuZGVyZXIuc2V0U2l6ZSh0LndpZHRoLHQuaGVpZ2h0KX1kZXN0cm95T2JqZWN0KHQpe2xldCBlPXQub2JqM2Q7aWYodGhpcy5zY2VuZS5yZW1vdmUoZSksZSBpbnN0YW5jZW9mIG9lKXtlLmdlb21ldHJ5LmRpc3Bvc2UoKTtsZXQgaT1BcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpP2UubWF0ZXJpYWw6W2UubWF0ZXJpYWxdO2ZvcihsZXQgciBvZiBpKXIuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXt2YXIgdTtpZighdCYmIWkudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTpyLHdpZHRoOnN9PWk7aWYoIXQpe2xldCBoPXJmKHRoaXMuYmFja2dyb3VuZENvbG9yLGkuY29sb3IsKHU9aS5vcGFjaXR5KSE9bnVsbD91OjEpLGY9bmV3IEh0LGQ9bmV3IHpuKHtjb2xvcjpofSksZz1uZXcgb2UoZixkKTtyZXR1cm4gZC52aXNpYmxlPXIsRjAoZixlLHMpLHRoaXMuc2NlbmUuYWRkKGcpLHt0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmcsd2lkdGg6c319bGV0e2RhdGE6byxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsaD0+KChzIT09bHx8IW98fCFEaS5hcmVQb2x5bGluZXNFcXVhbChvLGUpKSYmRjAoaCxlLHMpLGgpLGkpP3t0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmEsd2lkdGg6c306dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTppLGNvbG9yOnIsb3BhY2l0eTpzfT1lLG89cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IscixzIT1udWxsP3M6MSksYT1uZXcga2koe2NvbG9yOm8sdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBvZSh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWkscz1yKk1hdGguc3FydCgzKS8yLG89bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktcy8zLGUueCtyLzIsZS55LXMvMyxlLngsZS55K3MqMi8zXSk7aWYoIXQpe2xldCBsPW5ldyBIdDtOMChsLG8pO2xldCBjPXRoaXMuY3JlYXRlTWVzaChsLGkpO3JldHVybiBjPT09bnVsbD9udWxsOih0aGlzLnNjZW5lLmFkZChjKSx7dHlwZTpnbi5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6Y30pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLGw9PihOMChsLG8pLGwpLGkpP3t0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWkscz1uZXcgWnIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gocyxpKTtyZXR1cm4gYT09PW51bGw/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+cyxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnN9PXIsbz0yL01hdGguc3FydCgzKSpzLGE9bmV3IFVuKFtuZXcgSyhlLngtby8yLGUueS1zLzIpLG5ldyBLKGUueCxlLnkrcy8yKSxuZXcgSyhpLngsaS55K3MvMiksbmV3IEsoaS54K28vMixpLnktcy8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBxaShhKTtpZighdCl7bGV0IHU9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIHU9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKHUpLHt0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnV9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTpnbi5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fTt2YXIgTmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlbmRlckNhY2hlPXQsdGhpcy5yZW5kZXJlcj1lfXNldExpbmUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJpYW5nbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldENpcmNsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyYXBlem9pZCh0LGUsaSxyKXtsZXQgcz10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpLHIpO3MmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxzKX19O3ZhciBzZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7bGV0IGU9dGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk7cmV0dXJuIGUhPW51bGw/ZTpudWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LEZsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgc2YsdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IE5sKHRoaXMucmVuZGVyQ2FjaGUsdGhpcy5yZW5kZXJlcil9c2V0TGF5b3V0UmVjdCh0KXsodGhpcy5sYXlvdXQueCE9PXQueHx8dGhpcy5sYXlvdXQud2lkdGghPT10LndpZHRofHx0aGlzLmxheW91dC55IT09dC55fHx0aGlzLmxheW91dC5oZWlnaHQhPT10LmhlaWdodCkmJih0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSwhIXRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheShpLnBvaW50cy5sZW5ndGgqMil9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W3Msb109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMl09cyx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVtyKjIrMV09b319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19O3ZhciBMbzsoZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifSkoTG98fChMbz17fSkpO3ZhciB6bD1jbGFzcyBleHRlbmRzIEZse3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6TG8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkxvLk5BTixwb2x5bGluZTplLm1hcCgocixzKT0+aXNOYU4ocik/cyUyPT09MD9pLng6aS55OnIpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtsZXQgZT1bXSxpPTAscj0hMSxzPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksbz17eDpzWzBdLHk6c1sxXX0sYT1udWxsO2ZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCs9Mil7bGV0IGM9dFtsXSx1PXRbbCsxXSxoPWlzTmFOKGMpfHxpc05hTih1KTtoIT09ciYmaSE9PWwmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLGwpLGE9PT1udWxsP3t4OmMseTp1fTphKSksaT1sKSxofHwoYT17eDpjLHk6dX0pLHI9aH1yZXR1cm4gaSE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksdC5sZW5ndGgpLGEhPW51bGw/YTpvKSksZX1yZWRyYXcoKXt2YXIgdCxlLGk7Zm9yKGxldCByIG9mIHRoaXMuc2VyaWVzKXtsZXQgbz10aGlzLmdldE1ldGFkYXRhTWFwKClbci5pZF07aWYoIW8pY29udGludWU7aWYoci5wb2x5bGluZS5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke3IucG9seWxpbmUubGVuZ3RofWApO2xldCBhPXRoaXMucGFydGl0aW9uUG9seWxpbmUoci5wb2x5bGluZSk7Zm9yKGxldFtsLHt0eXBlOmMscG9seWxpbmU6dX1db2YgYS5lbnRyaWVzKCkpaWYoYz09PUxvLk5VTUJFUil1Lmxlbmd0aD09PTI/dGhpcy5wYWludEJydXNoLnNldENpcmNsZShKU09OLnN0cmluZ2lmeShbImNpcmNsZSIsci5pZCxsXSkse3g6dVswXSx5OnVbMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KHQ9by5vcGFjaXR5KSE9bnVsbD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHIuaWQsbF0pLHUse2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooZT1vLm9wYWNpdHkpIT1udWxsP2U6MSx3aWR0aDoyfSk7ZWxzZSBpZighby5hdXgpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsci5pZCx1W2hdLHVbaCsxXV0pLHt4OnVbaF0seTp1W2grMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KGk9by5vcGFjaXR5KSE9bnVsbD9pOjEsc2l6ZToxMn0pfX19O3ZhciBVbD1jbGFzcyBleHRlbmRzIGRye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgVmkoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19O3ZhciBNVD17cmVxdWVzdEFuaW1hdGlvbkZyYW1lOm49PnNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxCbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFRuLlNWRzp7dGhpcy5jb29yZGluYXRvcj1uZXcgZHIsdGhpcy5yZW5kZXJlcj1uZXcgT3ModC5jb250YWluZXIpO2JyZWFrfWNhc2UgVG4uV0VCR0w6e2xldCBlPW5ldyBVbDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgUm8odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgemwoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoZnIodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KE5vKHt4OjAseTowfSx0KSksdGhpcy5yZW5kZXJlci5vblJlc2l6ZShObyh7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh1ZihObyh7fSx0KSx7eDowLHk6MH0pKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldE1ldGFkYXRhKHQpe2xldCBlPSExO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtpLHJdKT0+e2xldCBzPXRoaXMubWV0YWRhdGFNYXBbaV07KCFzfHxyLmNvbG9yIT09cy5jb2xvcnx8ci52aXNpYmxlIT09cy52aXNpYmxlfHxyLm9wYWNpdHkhPT1zLm9wYWNpdHkpJiYoZT0hMCksdGhpcy5tZXRhZGF0YU1hcFtpXT1yfSksZSYmdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRWaWV3Qm94KHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0Vmlld0JveFJlY3Qoe3g6dC54WzBdLHdpZHRoOnQueFsxXS10LnhbMF0seTp0LnlbMF0saGVpZ2h0OnQueVsxXS10LnlbMF19KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldERhdGEodCl7dGhpcy5zZXJpZXNMaW5lVmlldy5zZXREYXRhKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0KSx0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNjaGVkdWxlUmVwYWludCgpe3RoaXMuc2hvdWxkUmVwYWludHx8KHRoaXMuc2hvdWxkUmVwYWludD0hMCxNVC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnJlcGFpbnQoKSx0aGlzLnNob3VsZFJlcGFpbnQ9ITF9KSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX07ZnVuY3Rpb24gejAobil7bGV0e2ZsYXR0ZW5lZFNlcmllczp0LGlkc0FuZExlbmd0aHM6ZX09bixpPW5ldyBGbG9hdDY0QXJyYXkodCkscj1bXTtpZihpLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoImBmbGF0dGVuZWRTZXJpZXNgIG11c3QgaGF2ZSBldmVuIG51bWJlciBvZiBlbGVtZW50cyIpO2xldCBzPTA7Zm9yKGxldHtpZDpvLGxlbmd0aDphfW9mIGUpe2xldCBsPVtdO2ZvcihsZXQgYz0wO2M8YTtjKyspbC5wdXNoKHt4OmlbcysrXSx5OmlbcysrXX0pO3IucHVzaCh7aWQ6byxwb2ludHM6bH0pfXJldHVybiByfXZhciB4bjsoZnVuY3Rpb24obil7bltuLlNFUklFU19EQVRBX1VQREFURUQ9MF09IlNFUklFU19EQVRBX1VQREFURUQiLG5bbi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRD0xXT0iU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQiLG5bbi5TQ0FMRV9VUERBVEVEPTJdPSJTQ0FMRV9VUERBVEVEIixuW24uVklFV19CT1hfVVBEQVRFRD0zXT0iVklFV19CT1hfVVBEQVRFRCIsbltuLklOSVQ9NF09IklOSVQiLG5bbi5ET01fUkVTSVpFRD01XT0iRE9NX1JFU0laRUQiLG5bbi5EQVJLX01PREVfVVBEQVRFRD02XT0iREFSS19NT0RFX1VQREFURUQiLG5bbi5ESVNQT1NFRD03XT0iRElTUE9TRUQifSkoeG58fCh4bj17fSkpO3ZhciBQbzsoZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KShQb3x8KFBvPXt9KSk7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57YlQobi5wb3J0c1swXSxuLmRhdGEpfSk7ZnVuY3Rpb24gYlQobix0KXtsZXR7Y2FudmFzOmUsZGV2aWNlUGl4ZWxSYXRpbzppLGRpbTpyLHJlbmRlcmVyVHlwZTpzLHVzZURhcmtNb2RlOm99PXQsYT17b25EcmF3RW5kOigpPT57bi5wb3N0TWVzc2FnZSh7dHlwZTpQby5PTl9SRURSQVdfRU5EfSl9LG9uQ29udGV4dExvc3Q6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX0NPTlRFWFRfTE9TVH0pfX0sbDtzd2l0Y2gocyl7Y2FzZSBUbi5XRUJHTDpsPXt0eXBlOlRuLldFQkdMLGRvbURpbWVuc2lvbjpyLGNhbGxiYWNrczphLGNvbnRhaW5lcjplLGRldmljZVBpeGVsUmF0aW86aSx1c2VEYXJrTW9kZTpvfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGNhbm5vdCBoYXZlIE9mZnNjcmVlbiBjaGFydCBmb3IgcmVuZGVyZXIgdHlwZTogJHtzfWApfWxldCBjPW5ldyBCbChsKTtuLm9ubWVzc2FnZT1mdW5jdGlvbih1KXtsZXQgaD11LmRhdGE7c3dpdGNoKGgudHlwZSl7Y2FzZSB4bi5TRVJJRVNfREFUQV9VUERBVEVEOntsZXQgZj16MChoLmNvbXBhY3REYXRhU2VyaWVzKTtjLnNldERhdGEoZik7YnJlYWt9Y2FzZSB4bi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRDp7Yy5zZXRNZXRhZGF0YShoLm1ldGFkYXRhKTticmVha31jYXNlIHhuLlZJRVdfQk9YX1VQREFURUQ6e2Muc2V0Vmlld0JveChoLmV4dGVudCk7YnJlYWt9Y2FzZSB4bi5ET01fUkVTSVpFRDp7Yy5yZXNpemUoaC5kaW0pO2JyZWFrfWNhc2UgeG4uREFSS19NT0RFX1VQREFURUQ6e2Muc2V0VXNlRGFya01vZGUoaC51c2VEYXJrTW9kZSk7YnJlYWt9Y2FzZSB4bi5TQ0FMRV9VUERBVEVEOntzd2l0Y2goaC5heGlzKXtjYXNlIngiOmMuc2V0WFNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7Y2FzZSJ5IjpjLnNldFlTY2FsZVR5cGUoaC5zY2FsZVR5cGUpO2JyZWFrO2RlZmF1bHQ6bGV0IGY9aC5heGlzO3Rocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIGF4aXM6ICR7Zn1gKX1icmVha31jYXNlIHhuLkRJU1BPU0VEOntjLmRpc3Bvc2UoKTticmVha319fX19KSgpOwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYXJ0X3dvcmtlci5qcy5tYXAK", + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/environment": { + "data": "eyJ2ZXJzaW9uIjogIjIuMTMuMCIsICJkYXRhX2xvY2F0aW9uIjogImxvZ3MiLCAid2luZG93X3RpdGxlIjogIiIsICJleHBlcmltZW50X25hbWUiOiAiIiwgImV4cGVyaW1lbnRfZGVzY3JpcHRpb24iOiAiIiwgImNyZWF0aW9uX3RpbWUiOiAwLjAsICJkZWJ1ZyI6IHsiZGF0YV9wcm92aWRlciI6ICJHcnBjRGF0YVByb3ZpZGVyKGFkZHI9J2xvY2FsaG9zdDozNjQ5OScpIiwgImZsYWdzIjogeyJsb2dkaXIiOiAibG9ncyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IG51bGwsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImRldGVjdF9maWxlX3JlcGxhY2VtZW50IjogbnVsbCwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugins_listing": { + "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkaXN0cmlidXRpb25zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIn19LCAiaGlzdG9ncmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhpc3RvZ3JhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQifX0sICJ0ZXh0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAidGV4dCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtdGV4dC1kYXNoYm9hcmQifX0sICJwcl9jdXJ2ZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQUiBDdXJ2ZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByLWN1cnZlLWRhc2hib2FyZCJ9fSwgInByb2ZpbGVfcmVkaXJlY3QiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQcm9maWxlIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgImhwYXJhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJocGFyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ocGFyYW1zLWRhc2hib2FyZCJ9fSwgIm1lc2giOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJtZXNoIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJtZXNoLWRhc2hib2FyZCJ9fSwgIndpdF9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIldoYXQtSWYgVG9vbCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtd2l0LXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgInByb2plY3RvciI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAicHJvamVjdG9yIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIklGUkFNRSIsICJtb2R1bGVfcGF0aCI6ICIvZGF0YS9wbHVnaW4vcHJvamVjdG9yL2luZGV4LmpzIn19fQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/runs": { + "data": "WyJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMDg1MjBfQlMxMjgiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfOTE3NjBfQlMxMjgiLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiIsICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMzA4Mzc2X0JTNjQiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCIsICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMTUxNjI0X0JTNjQiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNzkxNDNfQlM2NCIsICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxNDU2MDlfQlMxMDAiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIiwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTQ3NDczX0JTMzIiXQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22%7D": { + "data": "ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000%7D": { + "data": "ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags": { + "data": "eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFsiQWdncmVnYXRvci90ZXN0L2FjY3VyYWN5IiwgIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAiQ29sbF8xL3Rlc3QvYWNjdXJhY3kiLCAiQ29sbF8xL3RyYWluL2xvc3MiLCAiQ29sbF8yL3Rlc3QvYWNjdXJhY3kiLCAiQ29sbF8yL3RyYWluL2xvc3MiXSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzc5MTQzX0JTNjQiOiBbIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMi90cmFpbi9sb3NzIl0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMDg1MjBfQlMxMjgiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTMwODM3Nl9CUzY0IjogWyJPcmlnaW5hbC90ZXN0L2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2xvc3MiXSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzQxNTMzX0JTMzIiOiBbIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMi90cmFpbi9sb3NzIl0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF81ODMwNl9CUzY0IjogWyJBZ2dyZWdhdG9yL3Rlc3QvYWNjdXJhY3kiLCAiQWdncmVnYXRvci90cmFpbi9hdmdfbG9zcyIsICJDb2xsXzEvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzEvdHJhaW4vbG9zcyIsICJDb2xsXzIvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzIvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTQ1NjA5X0JTMTAwIjogWyJPcmlnaW5hbC90ZXN0L2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2FjY3VyYWN5IiwgIk9yaWdpbmFsL3RyYWluL2xvc3MiXSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIjogWyJBZ2dyZWdhdG9yL3Rlc3QvYWNjdXJhY3kiLCAiQWdncmVnYXRvci90cmFpbi9hdmdfbG9zcyIsICJDb2xsXzEvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzEvdHJhaW4vbG9zcyIsICJDb2xsXzIvdGVzdC9hY2N1cmFjeSIsICJDb2xsXzIvdHJhaW4vbG9zcyJdLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTQ3NDczX0JTMzIiOiBbIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgIkNvbGxfMi90cmFpbi9sb3NzIl0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMTUxNjI0X0JTNjQiOiBbIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vYWNjdXJhY3kiLCAiT3JpZ2luYWwvdHJhaW4vbG9zcyJdfSwgInRhZ0Rlc2NyaXB0aW9ucyI6IHt9fSwgImhpc3RvZ3JhbXMiOiB7InJ1blRhZ0luZm8iOiB7fSwgInRhZ0Rlc2NyaXB0aW9ucyI6IHt9fSwgImltYWdlcyI6IHsidGFnRGVzY3JpcHRpb25zIjoge30sICJ0YWdSdW5TYW1wbGVkSW5mbyI6IHt9fX0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Aggregator/test/accuracy%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkFnZ3JlZ2F0b3IvdGVzdC9hY2N1cmFjeSIsICJydW5Ub1NlcmllcyI6IHsicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfOTE3NjBfQlMxMjgiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzAuNDk5MTgzMiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMS44MzM0MjM2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMzLjI5MjgyOCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNC45MzUxODE0LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM2LjM0MTA3NTcsICJzdGVwIjogNCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzcuNTY0MjI0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM4Ljg0OTMyMzcsICJzdGVwIjogNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDAuMjQ4NTA4MiwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0MS43MTEzMDQsICJzdGVwIjogOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDMuMjg3NTc5NSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NC45OTQ5ODUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQ3LjM3MTg1NzYsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODUwLjMyMTE3LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1My4zNDc5OTQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU1LjUwOTU0NTgsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU3LjcyNDE2NzYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYwLjAxMTUxNTEsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYyLjMzMDgzNzUsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY1LjMxNTI2MSwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjkuMDgwNjYxNSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NzIuNDM5MDYyLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3NS4xNDkwMDExLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3OC4wMTExMTY1LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4MC44MjA2MTQ4LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4NS4xNDA1NDUxLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4OS41NTQ4MDIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkyLjYyODUxNDUsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODk1Ljg4MzQzOTgsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODk5LjEwODIxOCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDQuNTI0MjAwNywgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTEuMDcxMzUxLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxNS43NDAzMTksICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE5LjQwNjgyODksICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI0LjkxMzQzOSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjkuNjE3NjgwMywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzMuNTU3Mzg3OCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzcuNTM0NjA2MiwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NDMuODM2NzYxLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0OC41Nzc5MjE2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1Mi44MDk2NjQ3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1OC4yMDM5ODk1LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2NS4wODY1MTAyLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3MS43MTQyNDgyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3OC4wMjUxODE1LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4My42OTY4ODQ0LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4OC40OTkzMzI3LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk5NC43NjIxMDE3LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAwMS4xNTE1NDIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDA2LjMyMzM4MTQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDEzLjA5ODE4MjQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE5LjQxMzI0MiwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMjQuNzQwMjM5MSwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzIuNDU4NDYwNiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzguNTM4MDUyMywgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNDQuMjY2NzA5OCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTIuODU5OTgxMywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTguNjcxMzU4MywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjYuMDMzMjg4MiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNzMuMjU5MTM5MywgInN0ZXAiOiA1OCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNzkuMzcwNzcyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4OC4yOTkxODYsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDk0LjY2OTY2NjUsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTAzLjMyNTk0NDQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTEwLjIzNDM5MzQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTE3LjczNjIxNywgInN0ZXAiOiA2NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMjYuMDY4OTgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTMzLjA0NzE2ODMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQyLjU3MjU4NTgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ5LjQ2NTU2MTQsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTYwLjYyMTIzMzUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTY5Ljg3NzExMzYsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc5Ljc0OTcxOTQsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTg3Ljk1NDY1MjgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk3Ljc5ODIwNDQsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjA2LjMwMTMyNTMsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjE2LjI4NDI3OTgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjI1LjA2ODgyMzgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjM0LjUxMTA1NjQsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjQ0LjEyNTYwOTQsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjUzLjIyNDE5NzksICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjYzLjcwMDU1MzcsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjcyLjIyMDc2NzMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjgzLjQ0NDg0MjgsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjkxLjY4MzQ1OSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDIuOTA4NzI2MiwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMTIuMDA2OTY0LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMyNS4zNDYxMjE4LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzNy41OTkxOTA3LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0Ni45OTU5MTksICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzU4Ljc3ODAwOTcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzcxLjE4NjMxNjMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzgwLjY4MDgwMzgsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzkzLjA0OTA3MTgsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDA1LjQwODkxMjQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDIwLjE5NTI5NywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzIuMTIwMDgyNCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NDUuMTA2NzU0MywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NTYuOTY3MzY1LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2OC40NjI3NDk1LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ4MS45ODYwMzI3LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzc5MTQzX0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDQzODUuNTExNTcyMSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ni4zNDU3NzM1LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg3LjI3NDgwOTgsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODguMjc0MzM0NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS4zOTY3NTQ1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MzkxLjI2NzcyNDgsICJzdGVwIjogNSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTMuMjc0NDg1OCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5NS4zNDE1ODI1LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk3LjM4ODA5NDIsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTguOTAzMDU2NCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwMC41MjE2MzM2LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwMi4zMTg5ODA1LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNC4xNDE5NTkyLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNi4wNDcwNjcyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwOC41ODM0MzMyLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxMS45NTA1MzEyLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxNS4yMjY0MTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE3LjQ3MjM2MzIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE5Ljg4NDY4MTUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIyLjM0MDgzMDgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI0Ljg2Nzg2NDYsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI4Ljg1MDc0MTEsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDMyLjkyODI2NzIsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM1Ljc3MDEwMDYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM4LjkyODU3OCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDMuNjc1OTgxMywgInN0ZXAiOiAyNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDkuMzU2MTEzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1NC4wMTQyNzYsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU3LjUzNjY1NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NjEuMDAyNzc5MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NjUuMDU4ODE3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3MC41NjY3NTEyLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3NC40MTE4OTkzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3OC4xNzE1NDM2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ4Mi40MTczMzU3LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ4OC4zOTE3NDQxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5Mi40MTc4MzcxLCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5Ni40NzE2NDQyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwMS44NTQ1MDQ2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwOS42OTk0ODMyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxNS40NzMxMzYsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMzg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE5LjgzOTA1NywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4zODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjYuNjUzNzU0NywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzEuNzI3MDc0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUzNi40ODcyMTQ4LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU0My4yNjk4NzQsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ5LjE3MTcwMywgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NTQuMTY0NjA5MiwgInN0ZXAiOiA0NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjEuNDM1NDAzMywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjcuMjQ1OTg4NCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NzIuNDg4MjAwMiwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODAuMzI3MjM4LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU4NS45NzE3NDI5LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5MS43MjY5NTQ1LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYwMC4wMjcxNjE4LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYwNS43NjMyOTUsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjEzLjA2NDg1NjUsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjIwLjI0NDI2MDUsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI2LjIwMTgyNDIsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjM1LjEwMDc3NzQsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQxLjQ4Mjg2NzIsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQ5LjczNTM4MDIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjU2LjkwNjg1NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjQuMDQyNzIyMiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzIuNjI5NjQxLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY3OS4yNjE4OSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODkuMDQ3MTk1NywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC41fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTkuMTU5MTcyMywgInN0ZXAiOiA2NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MDguMzIzNjYxNiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MTUuMjkxNzAwMSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MjUuMTc3ODcyNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MzIuNDg3Mjk0NCwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDIuNjQ5ODgzNSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDkuOTg4NzM0LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc2MC4yOTk0ODA0LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc2Ny45ODExOTg1LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc3OC43Mjc2MTE1LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc4Ni4zNDg4MjI2LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc5Ni45ODA5NzYzLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgwNS4yNjc5MjA3LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgxNS45MDQ2NjU3LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyNS4zMDM5ODM3LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzNS40NDc5OTc4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg0Ni4wNDg5ODUyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg1OC45Nzc5NjA2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg3MC42Mjc4NDQsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODgxLjg3MjAwNjIsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODkxLjY4Njk5NTcsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTAzLjM1ODIzMDgsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTEyLjc0MDg0NzMsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTI0LjI3OTEwOSwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MzUuNzA4MzY3OCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NDkuMTI1NDIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTYwLjcxOTUzMDMsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTczLjAyNjI1NTQsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTgyLjkwOTg4MjUsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTk1LjgwNjcxNTMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDA5LjI2MDA1NywgInN0ZXAiOiA5NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUwMTkuNTE4MDU1LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAzMi4wODA5NTQsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTk4NC44MjE0MTIsICJzdGVwIjogMCwgInZhbHVlIjogMC4xNjY2NjY2NzE2MzM3MjA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODUuOTg5NTEyNCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni45NDA4MjMsICJzdGVwIjogMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODcuOTUwNzk5LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg5LjA5MjEwMzcsICJzdGVwIjogNCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTAuMzA0MDY4NiwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5MS42MDE0NiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Mi45OTkzNzA4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk0LjQ3OTM3MTUsICJzdGVwIjogOCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTYuMjkwNzgyNSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5OC44NjY1NTcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAxLjU1OTM1NTcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA0LjA2MzQ5OTcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA2LjAyMjEyMTQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA4LjA2MTY5NDQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEwLjE3MjQ4NiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTIuNDE2OTIyMywgInN0ZXAiOiAxNiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTUuNTM2MDksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDE5LjI5NDE1ODIsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIyLjU0MDQ1NSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjUuMTM0MzQ1LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyNy44NDM2NDE4LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMC42NDE0MjE2LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzNC45NTkwMTYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQwLjEwMjYzNTEsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ1LjAwNzQxNjUsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ4LjYxNzE3MDYsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDUxLjg5MzY1NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNTUuNTA4Mjc0MywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjAuODQ1NzI0NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjQuOTk0OTYwMywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjguNjU1NTcwNSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzIuMzAyNTQ3MiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzguMTYxMjc5NCwgInN0ZXAiOiAzMywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODIuNTM0NzQxLCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4Ni41MDAyNDM3LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5MC45OTA4MDc4LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Ny40MzQyNzIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAxLjY4OTgwMjIsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTA1Ljk5ODU3NCwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTIuMzk2OTk2NSwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTcuOTk4MzAxLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyMi42MDU0MDM3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyOC4zOTY3Mjc2LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNC45OTAwMzEsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTM5LjgzNzk0ODMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTQ1LjgyNDgyMDgsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTUyLjY0MTQ1NSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNTcuOTI3MzMyNCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNjQuNTEyMTIxNywgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzMuODIyNTIyOSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzkuNzU3OTExMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODcuOTcyNjgwMywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTMuNjAyMzcxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5OS44Mzc1NTMzLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIwNy45OTA3NDcyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIxMy45MDQ5OTE0LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyMS45NTMzMDE3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyOC42MTg5MTc3LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzNS4wNzEwODQzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0My41OTczODk1LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI1MC4wMTU3MTgyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI1OS4yMjEzNDE4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI2NS44MTMyMjk4LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI3NC4yNDcxMDEsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjgxLjk0MjQ4ODQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjg5Ljg2ODUzMywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyOTguNzQzODg4OSwgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMDYuMTEwODE3LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMxNS42ODg1MzE5LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMi44OTQ4NTA3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMzMy4xMDAxNzI4LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0MC42OTk1NjU0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1MS4wNjIxNjU1LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1OC44MTc4NTg1LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM2OS4zMDk5NjkyLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM3Ny4zMDQwODM4LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM4OC40MDUyMzUzLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQwMC45OTUxMDM2LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQwOS41Njg1NTIzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQyMS4xNTA2Nzk2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQzMy4wMzQ5MDQ1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ0My43OTMyMzksICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDUzLjg3Nzk1NjksICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDYzLjU0NjEzMzMsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDc1LjEwNjA3MywgInN0ZXAiOiA4NSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0ODMuOTExMjYyNSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0OTUuNDE1MzA0MiwgInN0ZXAiOiA4NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MDQuNjM4NDcyOCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC41fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MTUuNzkyNzU1LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUyNy4yNjY0NTIzLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUzNi43OTgzMzcyLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU0OC43NjgyNzUzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU1OS4yNDU4MDEyLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU3MC40MjUxNDU0LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU4Mi43ODEyMjY0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU5Mi43Mjg0MTQ4LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYwNC44Mjg0NjM2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYxNy43NzYxMDg1LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYyNy43MTI0NTk4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzU4MzA2X0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzcuMDIzNDI3LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc4LjAzMDM0ODgsICJzdGVwIjogMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzkuMDA4Njg5MiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4MC4xMDI1MjIxLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgxLjI2MTI5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjQ4ODkzMjgsICJzdGVwIjogNSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODMuODM5OTg1MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4Ni4wODc4MzQsICJzdGVwIjogNywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODguNTkzMTc0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkxLjAxNjE5MiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Mi45OTE1NTEyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5NC44NTc0MDY2LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ni43OTQxNTI1LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OC44MTk1ODgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDAwLjk5Nzg4MDIsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDAzLjk5MTc1OTUsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDA3LjUzMzM4MTcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDEwLjcwNDQxOTksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDEzLjI0Mjg2MDMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE1LjgxNjkwNDgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE4LjQzNjQ0MDUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDIyLjEyMzY5OTcsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDI2LjM5ODk1MDMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDI5LjY1MTI4NDUsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDMyLjYzOTU2MTcsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM1LjY0MTkxODcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM5LjQyMTUxODMsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ0LjQzNjM3MTYsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ4LjA1MDc4OTgsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUxLjQzODcyNDMsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDU1LjAzODIwOSwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjAuNTI1MjEwMSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjUuMTk2NzEzNCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjguOTU4NDc2NSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzIuNzc0NTMwNCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzguODQxNTkzNSwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODMuNTgzODkwNCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODcuNjkxMjczLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5Mi41NDQwMzMzLCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5OC45NjI2NTcsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTA1LjcyODEyNzcsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTEyLjI3MTQzOTYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTE4LjIzNzYyNjgsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTIyLjg2MTgyODgsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI4LjI1NzUzMTYsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM1LjA3NjU4MjIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQwLjA0MDcwMTYsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQ1LjYwNDU3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1Mi45ODgyNjY3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1OC4xMjAzNjA2LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE2NC41Nzk5MTksICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTcxLjYwNzkyMTQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTc3LjEyMzQyNSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODUuMTEyMDI5NiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxOTQuMjE3NzQxNSwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMDAuMjE2MDYsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjA4Ljk0NzcxNjIsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjE0LjkxNjQzODMsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjIyLjU2MDcyNjYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI5Ljg2MTE2ODQsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjM2LjA1Njk0OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNDUuMzY2MDI1MiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTEuNzkyMDY3LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI2MC43MDQ4OTYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjY3LjY5NjM3MDgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjc1LjkyNDMxOTUsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjgzLjg3NzA3NzgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjkxLjc3ODY0NjcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzAwLjU2NDkxNTIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzA3Ljg2NTg3NSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTcuNDEwNjE4MywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMjQuNjgzMDYzNSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzUuMDI4ODQzMiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDIuNjE2ODYwNiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTIuODMzMDI3OCwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjAuNzIzNDQ1NCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzAuOTE0NTEzNiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzkuNDIyNDI4NCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzODkuNjQ2NjIxMiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzOTguNjc5MDc5NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MDguNDE4NTM5OCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MTguNTk1MDE5NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MjcuODY2MTMxOCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MzkuNDI5NTQ5LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ1MC40NTkwMTk3LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2NC40Nzc5OTIzLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ3My41OTI3NTEsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDg0LjkzODU4OCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTMuOTM2Nzc1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUwNS4yODQ5MDc4LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUxNi4yOTA4NTY0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUyNi4xMjc3MDYzLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUzOC4yNTkyNDk3LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU0OC4xMTYxMjQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTU5LjcwMTU0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NzIuMDIwOTU5OSwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1ODEuNTQ5OTM3NSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1OTQuMDAyNjYzMSwgInN0ZXAiOiA5NywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MDYuMTg1MjIzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzYxNi4zMDg2ODAzLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE4MzgyMV9CUzEwMCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny40ODM3ODQ3LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjQwMjkxNjIsICJzdGVwIjogMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODkuMzk0MzU2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkwLjUwMTgwNjUsICJzdGVwIjogMywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTEuNjczNjE3MSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Mi45OTAxMzAyLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk0Ljk0OTE5ODUsICJzdGVwIjogNiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTcuMjk2NCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5OS42Mzc1MzA4LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAyLjEwMDI1NTMsICJzdGVwIjogOSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDMuODU5NDIyNCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDUuNjcxMTcxMiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDguMjgxMzkzLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMC4zMTU5NzY0LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMi43MTA2NTc4LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxNi4xNzEwODI1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxOS41Nzc0Mjg4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyMi4wMDQyNjYzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNC40OTQxNjM1LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNy4wNzQwMzE0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyOS43MDM1NTI1LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzMy44OTQwMzIyLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzOC44OTU3MTE0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0My44MTQzNDczLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0Ny41NDAwNDgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDUwLjYwMzM0MDEsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDU1LjQ4NzQ4OSwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjAuMDU1MDEzLCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2My40NjQzMzQyLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Ni45NDU0MjAzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3MS4zNjI0OTE2LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3Ny4wOTIyNTEzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4MC45MjgzOTQsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDg0LjczOTUzMjcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDg5Ljg2MjcwODYsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk2LjEyOTM2NjksICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTAwLjMwNjA5MywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDQuNjQzMDA0LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxMS4xODU3Nzg0LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxNi41MTQzNDA0LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyMS4wOTA4MDksICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTI3LjAzNjYyMiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzMuMzAyNzkwNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzguMjM3NDUxMywgInN0ZXAiOiA0MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NDUuNTkwNDQ0MywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTQuMzgxMjY0NCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTkuNTQwMzI5NSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjQuNzQ3MjcyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3Mi45NjIyMzg4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3OC40MTc1OTkyLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU4NC44MDU4MzcyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5Mi42MTkyNjMsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTk4LjIyMzE1NDgsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjA1Ljk2NzA3MzQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjEyLjY4ODY5NTcsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjE4LjYwMzEyMywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MjcuODQ3Njk0NiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MzQuMDA2ODExLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0Mi4zODQ0ODYyLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0OS40NTUzMDAzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY1Ni40NTUxOTczLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY2NS4yMDc2MDk3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3MS45NzUzMTEzLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4MS43ODQ1NjM4LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5Mi4yODc4NjUyLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwMS42OTQ3NTI3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwOC43Mzk4NTIsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzE4LjY2ODA1NjUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzI1Ljc4ODc5NDUsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzM2LjExNDE0OTgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQzLjMyMzcwNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NTMuODYxMjI4NywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NjEuNzE1NDIxNywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NzIuNTczNjUxMywgInN0ZXAiOiA3MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3ODAuMzgxMTg0MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3OTEuMzQ1NDM5NCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3OTkuNjU0MTMxMiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTAuNDEwNTUwOCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTkuNTM2MzMyLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgyOS43MjAwMjY3LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgzOS42MDI3NTkxLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg0OS40NDU0OTMyLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg2MS4yNTY4ODksICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODcwLjA2OTk2OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODIuMjMzODgwOCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4OTcuMDA5MzA4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkwNi4wMDQ3ODg0LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkxNy45OTQxMjgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTI3LjgwODcxNDIsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTQyLjY0NjgwODQsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTU0Ljk5ODMxNiwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NjQuMTgwNjM3LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk3Ni4zNTkxNDQ3LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk4Ny43NTA4OTMsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTk4LjE1OTM4MzMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDEwLjY2ODYyMzcsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDIxLjQ3NDcwMTYsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDMyLjk4ODcyMTgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDQ2LjA4NzUzODUsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDU3LjcwMDU4MDgsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTQ3NDczX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjMuOTEzODU2NywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyNS4xNzQwMDA3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI2LjYxNTEyOCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyOC4yMTY4NzYzLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMwLjMzMjczMDMsICJzdGVwIjogNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzIuNzQ4NTksICJzdGVwIjogNSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzUuMDg1ODE0NSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNy4yMTIzMzQ5LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM5LjM3NzE0MTUsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDAuOTg1MTYzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQyLjY3OTkxODUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ0LjUwMjA0MSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDYuMzg3OTA1MSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDguMzg0NjI4OCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NTEuMjIxODI3MywgInN0ZXAiOiAxNCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NTQuNTgyMjQ4NCwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NTcuNjQzMjgyNCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjAuMDQ2NDkxNiwgInN0ZXAiOiAxNywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjIuNDYxNjUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY1LjA0MzE2NjQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY4LjE5MjA5NDgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDcyLjQ5NjAyMjcsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc2LjEwOTQ2MywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzkuMjI0MjYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDgyLjI5NDQ4MDgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDg1Ljg1MDQzNTUsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDkxLjEzOTQxMTIsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDk1LjI1MjM4ODcsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDk4LjgwMzAwMzgsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAyLjI5NjcwMDIsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTA4LjU2OTgyNjYsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEyLjgwNTYwMTQsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE2LjY1OTg2NjgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTIxLjEzNzkxMTYsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTI3Ljg5MzgwMjQsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTMyLjIxMDk0NDQsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM2LjQyMDk1MTEsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQyLjA0ODc5NDUsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ3LjUwODYyMjYsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTUxLjc1NDk1MiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NTYuNDkwNDMyNSwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjQuNTc0OTkyLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3MS41MTA3MiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NzYuMjQzODE4NSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODIuOTk0NTAwOSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODguODM1MzI3LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5My44MjI2MzAyLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwMC44MzE2NzcsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjA2Ljk1NzM1MTQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjEyLjA5Nzc5NzQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIwLjA0MDI0MjIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjI1LjcxMTg5NDgsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjMxLjU3MzcwMiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NDAuMjMzNjg5NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NDYuMTU0MDg2OCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NTQuMjQ0NzIyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2MS4zNDM2MjY1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2Ny44MzQxMzMxLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3OC44NzA5NTcxLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY4NS44NDI0MzYzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY5NS4yNTI0MDg3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwMS41NzY1NCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDkuOTE5MDAzNSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MTcuMjk4MTAzNiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MjQuNjIyMjkxOCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MzMuNDMxMzU5NSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NDAuMTcwNjMyNCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NTAuMTA4NDQ4MywgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NTcuMTY4ODc5MywgInN0ZXAiOiA2OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NjcuMTQzMTY5OSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzQuMzc2NTQyNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3ODQuOTY0NzQ4OSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3OTIuMTkwNTYxOCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDIuNTIwNjg5NywgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDkuOTkzMzUyNywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjAuNTI4MjA4NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjguMzk5MDMyLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgzOS4wMDQ4ODksICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODQ2Ljg3MDE4NCwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTcuNTgyNDkyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg2Ni4wMTE2NTMyLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg3Ni43MTg3MjQ1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg4Ni4xNDI0NTY4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg5Ni4wNjQ1NzAyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkwOS44NDQwMTQsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE5LjI5NjM0ODMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTMxLjc1Mjk0ODUsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTQyLjU2NzA5NzQsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTU0LjI2MTg4MDYsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTY1LjE5Nzc0MzQsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTc1LjA4MzUyMDQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTg3LjA0NTM4MDgsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTk2LjU0MTczMDYsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDA4LjQ3MTk2NDYsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDIwLjI0NTQzNTUsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDMwLjAzOTM2MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNDIuNTIzOTgwOSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNTQuMDYwMDg2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA2NC44MTY0NDAzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA3Ny4zODQ3NzU2LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9XX19XQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Aggregator/train/avg_loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7InB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzkxNzYwX0JTMTI4IjogW3sid2FsbFRpbWUiOiAxNjk1MjAwODMwLjQ5OTA5OTcsICJzdGVwIjogMCwgInZhbHVlIjogMS4wOTU1NDExMTk1NzU1MDA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzEuODMzMzE1OCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjA4NDgyNTk5MjU4NDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMy4yOTI3MjEsICJzdGVwIjogMiwgInZhbHVlIjogMC42NDAwNjYwMjc2NDEyOTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzQuOTM1MDYzOCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQ4NzMyNTAxMjY4Mzg2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNi4zNDA5ODU4LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDM5NjE5MzkyMTU2NjAwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNy41NjQxNDg0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDA1MTMwNTY1MTY2NDczNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM4Ljg0OTI0NDgsICJzdGVwIjogNiwgInZhbHVlIjogMC40MTY0MDQxODc2NzkyOTA3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQwLjI0ODQzMywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQxNTY0MzUxMzIwMjY2NzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDEuNzExMjI1NSwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjM2MjIyNjE1ODM4MDUwODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0My4yODc0ODksICJzdGVwIjogOSwgInZhbHVlIjogMC4zODU0OTcyMTI0MDk5NzMxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQ0Ljk5NDg1MSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC4zNDE2Nzg2Nzg5ODk0MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDcuMzcxNzYyMywgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zMjc1MjcxOTUyMTUyMjUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTAuMzIxMDQxNiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40MzIzMDU5OTE2NDk2Mjc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTMuMzQ3ODY5LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMxODI1OTcxNjAzMzkzNTU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTUuNTA5NDY3LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM1NTMzNTQ0NDIxMTk1OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTcuNzI0MDU4OSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zMDU5OTk0NTc4MzYxNTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjAuMDExNDMzOCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zOTgzODIyNzYyOTY2MTU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjIuMzMwNzU3OSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC40MDY2NzE4ODE2NzU3MjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjUuMzE1MTczMSwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC4yOTk2NjEwNDAzMDYwOTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjkuMDgwNTQ2OSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4zMDg5NTAxMjYxNzExMTIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcyLjQzODk4NSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4zNTkwNjcyNjEyMTkwMjQ2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc1LjE0ODkwNDgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMzQ5MTM3OTAyMjU5ODI2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3OC4wMTEwMTA0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI3ODA0ODAwODY4MDM0MzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODAuODIwNTE2LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjM1NTYyNTc0ODYzNDMzODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4NS4xNDA0MzY0LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjMwMzM1ODYxNDQ0NDczMjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODkuNTU0NzIwNCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yNzIxMTIzMDk5MzI3MDg3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkyLjYyODQyODUsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMjQ3NDk5NjE0OTUzOTk0NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5NS44ODMzNDk3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjQ0NTgyMTEwNjQzMzg2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5OS4xMDgxNDI0LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjMwNzc3NjAwNDA3NjAwNDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDQuNTI0MTAyLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjQ1MTUxOTI4MDY3MjA3MzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTEuMDcxMjUwNCwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zNzY3MzMxMjQyNTYxMzQwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE1Ljc0MDIzNSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zODg3NDc4MTEzMTc0NDM4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE5LjQwNjc0NjksICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuMjg4MDIxNTM0NjgxMzIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI0LjkxMzMzNTgsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMjc3MDgxMTYxNzM3NDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjkuNjE3NjA2LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjIyODUzODUxMzE4MzU5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzMuNTU3MzEyLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjIwMTIxNDM0MzMwOTQwMjQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzcuNTM0NTI3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjI0ODI4OTA3ODQ3NDA0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0My44MzY2NTYzLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjUwMTEzNDM5NTU5OTM2NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0OC41Nzc4NDE4LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI1NTIyNzE3ODMzNTE4OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1Mi44MDk1ODQsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMjI5OTYzODA5MjUxNzg1Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1OC4yMDM4Njc0LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI4MjIzNDYzODkyOTM2NzA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjUuMDg2NDE4MiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4yNDQ2ODA0NjQyNjc3MzA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NzEuNzE0MTczNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMTYyMzY3MTA1NDg0MDA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTc4LjAyNTA0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjI2MjI4ODE1MzE3MTUzOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4My42OTY3OTk1LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjI4Mjc2MjQwODI1NjUzMDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5ODguNDk5MjM1NCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yNTQzOTY2NzcwMTcyMTE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTQuNzYxOTg0NiwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4zMTU2ODUyMTI2MTIxNTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDEuMTUxNDQ3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjI2MTg0NTA1MjI0MjI3OTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDYuMzIzMTg4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjIxOTUxMDAwMzkyNDM2OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAxMy4wOTgwNzczLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjIzMzk1OTAxOTE4NDExMjU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMTkuNDEzMTQzNCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yOTgyMzI0NjU5ODI0MzcxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDI0Ljc0MDE2MDUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjM5OTcxNjIyODI0NjY4ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAzMi40NTgzNzE2LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjIzMDQ4ODEzNjQxMDcxMzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAzOC41Mzc5NjIyLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI0Mjc3MjY2ODYwMDA4MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA0NC4yNjY2MTA0LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjIyMjM4ODA3MzgwMTk5NDMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTIuODU5ODgwNywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4zMTYwNjUxNjI0MjAyNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTguNjcxMjc4NSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4zNDM5MjkyMzExNjY4Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjYuMDMzMTg1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjIzODEyNjI2MzAyMjQyMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3My4yNTkwNjU2LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI1MjU5MTYwOTk1NDgzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDc5LjM3MDY5MTUsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMzgyNDg5MjA0NDA2NzM4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDg4LjI5OTA5NjgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNDk3NTY2Nzg5Mzg4NjU2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDk0LjY2OTU3NDMsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjAyMTY4OTU2Mzk4OTYzOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEwMy4zMjU4NDc2LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjIyMTU0MDU3MDI1OTA5NDI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMTAuMjM0Mjk5NywgInN0ZXAiOiA2MywgInZhbHVlIjogMC4zMzMyNjgxMzU3ODYwNTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMTcuNzM2MTI2LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjIyMjcyMzA1MTkwNTYzMjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMjYuMDY4ODY0NiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC40NjU2Mzk0NzIwMDc3NTE0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTMzLjA0NzA2NDMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMTkyMDU3MjIyMTI3OTE0NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE0Mi41NzI0OTgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTc1ODM3NDU3MTgwMDIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ5LjQ2NTQ2OTEsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNjcwNjAxMzY3OTUwNDM5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTYwLjYyMTEzMTcsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMjQ3OTM0MzI2NTI5NTAyODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE2OS44NzY5OTksICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMzE0MDkwODQ3OTY5MDU1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc5Ljc0OTYyMjYsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTgxNTQzNzY3NDUyMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE4Ny45NTQ1MjMzLCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjI3NDE2MjYyMDMwNjAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk3Ljc5ODEyMjIsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTY2NjUzMjAwOTg0MDAxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIwNi4zMDEyMzcsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMTk1NDUzNDM1MTgyNTcxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjE2LjI4NDIwMjYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzI5OTkyODkwMzU3OTcxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjI1LjA2ODczMywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMDE2MDk4NDk5Mjk4MDk1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjM0LjUxMDk1MjIsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMzI1MTU1Nzk0NjIwNTEzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjQ0LjEyNTQ4LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjIwNjE1MDc4NTA4ODUzOTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNTMuMjI0MTAzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjM2ODY4ODg4MTM5NzI0NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI2My43MDA0MzU2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjIwMzM3NjUxNjY5OTc5MDk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNzIuMjIwNjM0MiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMzYxMjc3OTM3ODg5MDk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODMuNDQ0NzI1OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4xODg2MTE1NjcwMjA0MTYyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjkxLjY4MzM3MywgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yNDAxMzkxNTY1Nzk5NzEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDIuOTA4NjI4NSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4yNjk0MjgzNDI1ODA3OTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMTIuMDA2ODQ4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjE5MDc3MzY1MTAwMzgzNzU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMjUuMzQ2MDM5MywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yMTczMDE1NDc1MjczMTMyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzM3LjU5OTA5MzcsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNDcyMTgxNjQ4MDE1OTc1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0Ni45OTU4NDE1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjIyNzI3MDU0MzU3NTI4Njg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNTguNzc3OTAyMSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC42MjIxNTEzNzQ4MTY4OTQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNzEuMTg2MjI2NCwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC43NDkwOTM0NzI5NTc2MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzODAuNjgwNzE2LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjI1NTIyMTM2Njg4MjMyNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM5My4wNDg5NjY0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjUzOTE0MDcwMTI5Mzk0NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQwNS40MDg4MTY2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjIwNzU0NjE0NDcyMzg5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQyMC4xOTUxODk3LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjM0MjMyMDM1Mjc5MjczOTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzIuMTE5OTg3MiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4zODQ1MjA3NjkxMTkyNjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NDUuMTA2Njc1OSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4xNzEwODQ5NTUzMzQ2NjM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NTYuOTY3MjY0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjY3NDEzNDI1NDQ1NTU2NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2OC40NjI2NTM0LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjIyNDY0MjkzMjQxNTAwODU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0ODEuOTg1OTA4MywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC41MjY2NjIxMTEyODIzNDg2fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF83OTE0M19CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjA0Mzg1LjUxMTQ3NjgsICJzdGVwIjogMCwgInZhbHVlIjogMC44MDQ2MjQwODA2NTc5NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ni4zNDU2ODcyLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTU4OTc0ODYyMDk4NjkzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg3LjI3NDczLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNTQ2NjI1MDE4MTE5ODEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODguMjc0MjU2MiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjU5NzUwNTc0ODI3MTk0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS4zOTY2NjIyLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDY1Mzk0OTE0MTUwMjM4MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MS4yNjc2MzAzLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDI3MjQyMDcwNDM2NDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5My4yNzQzODUsICJzdGVwIjogNiwgInZhbHVlIjogMC40OTU3Mjk0NzYyMTM0NTUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTUuMzQxNDY2NywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjMzNTA2ODI4NTQ2NTI0MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Ny4zODc5OTYsICJzdGVwIjogOCwgInZhbHVlIjogMC4yODU3MjA5NzQyMDY5MjQ0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk4LjkwMjk3NCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQwNTgxNzc3NjkxODQxMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDAuNTIxNTU1NywgInN0ZXAiOiAxMCwgInZhbHVlIjogMC41MDM2MjU5ODg5NjAyNjYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDIuMzE4ODg4MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zOTM4NDA4NzkyMDE4ODkwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA0LjE0MTg2NTcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjcxNDEwNTg0NDQ5NzY4MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNi4wNDY5NzY4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjUwMDYwMDY5NTYxMDA0NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwOC41ODMzNDA0LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM5MTEzMjkyMDk4MDQ1MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxMS45NTA0MzMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzY4Njg5MTc5NDIwNDcxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE1LjIyNjMxODQsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNDA3MDQ4MTY1Nzk4MTg3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxNy40NzIyNzU3LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjI5ODE0MTE4MTQ2ODk2MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxOS44ODQ2MDMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNDEwNTc0Mjg3MTc2MTMyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIyLjM0MDc1NjQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNTg3MTYxMTgzMzU3MjM4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI0Ljg2Nzc4NDUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjgzNTYzNDM1MDc3NjY3MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQyOC44NTA2Mjg2LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI2NTU5OTQ1OTQwOTcxMzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzIuOTI4MTkyOSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNDE3NjYyOTc4MTcyMzAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzUuNzcwMDEyMSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMTY5NTMxODIyMjA0NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQzOC45Mjg0OTQ3LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjM2NjI1NTQ2MjE2OTY0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0My42NzU4NzcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMzAwMjI3OTQwMDgyNTUwMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0OS4zNTU5OTk3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIyMjMyOTQzNzczMjY5NjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTQuMDE0MTk1NCwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4yODgxNzMyNTgzMDQ1OTU5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU3LjUzNjU3NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4zNjYyOTU2NjU1MDI1NDgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NjEuMDAyNjk5NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zMTc0ODA3NDI5MzEzNjU5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY1LjA1ODcyOTQsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDQzNTEwMzUzNTY1MjE2MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3MC41NjY2MzY2LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjE2NDcwMDgyMTA0MjA2MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NzQuNDExNzk2OCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zNTI5Njg3MjI1ODE4NjM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NzguMTcxNDMzLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMxODQ3MzM2ODg4MzEzMjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0ODIuNDE3MjQ0MiwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMjg2NTQ3NjYwODI3NjM2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg4LjM5MTYzODgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMzY0MjE4Mjk0NjIwNTEzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDkyLjQxNzc1NzcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzY0MDg5NzI3NDAxNzMzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk2LjQ3MTU2NiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC40NDUwNjcyNTY2ODkwNzE2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTAxLjg1NDQxNDcsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMzA5NTQ0MzI0ODc0ODc3OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwOS42OTkzNTU0LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI1MDQ3NDg3MDIwNDkyNTU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MTUuNDczMDYxMywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4yMDk0MjI2Nzc3NTUzNTU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE5LjgzODk3OCwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4xMDkzMDA5NTYxMzAwMjc3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTI2LjY1MzU5NSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMTgwMTYyNjY4MjI4MTQ5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTMxLjcyNjk4OSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xOTUxNjU5MDIzNzYxNzQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTM2LjQ4NzEzNTIsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTkwOTA5MzcwNzc5OTkxMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU0My4yNjk3Njc4LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjE2MTk3NDk5NjMyODM1Mzg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NDkuMTcxNjIyLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjM1ODkwMDkwNDY1NTQ1NjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NTQuMTY0NTMxMiwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4yOTc3MTUyNzY0Nzk3MjEwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTYxLjQzNTI5OSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMjMxNjk2NTQ2MDc3NzI4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTY3LjI0NTg5NzgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzY3OTQ3NjA4MjMyNDk4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU3Mi40ODgxMjA4LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjI3Njc3ODM0MDMzOTY2MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODAuMzI3MTMyMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC40OTc4Nzc4NjYwMjk3Mzk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODUuOTcxNjYxMywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4zMTI3MDU5MzQwNDc2OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5MS43MjY4MzY3LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjE5ODQ4NTI0MDM0MDIzMjg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDAuMDI3MDgzMiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC4zMDc5NzQzMzg1MzE0OTQxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjA1Ljc2MzIxNDMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMjE1NDA2NzE1ODY5OTAzNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYxMy4wNjQ3NDg4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjE1MzczMjAxNjY4MjYyNDgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MjAuMjQ0MTgxLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjE5Mzk0NTMxODQ2MDQ2NDQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MjYuMjAxNzQ0NiwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4zMzE5NTcxMDE4MjE4OTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MzUuMTAwNjk1OCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xOTg4NjI3OTEwNjE0MDEzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQxLjQ4Mjc4NDcsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMjIxNzc3NjE3OTMxMzY1OTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY0OS43MzUyNzg0LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjEzMDAzMjM2MDU1Mzc0MTQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTYuOTA2NzcxLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjE2NjQxMzI0NzU4NTI5NjYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjQuMDQyNjM0NywgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yMDUyNzU0MzEyNzUzNjc3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjcyLjYyOTU1ODMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMzQ0NzEzODM2OTA4MzQwNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY3OS4yNjE4MDY1LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjE3OTY2MzI0MDkwOTU3NjQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODkuMDQ3MTE3NSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yOTA2OTUyNTAwMzQzMzIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTkuMTU5MDcxLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjE4MTkwODMyNDM2MDg0NzQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MDguMzIzNTY4NiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNjE5MTE0MjIwMTQyMzY0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzE1LjI5MTYyMDMsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTM0NzE3NTI0MDUxNjY2MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcyNS4xNzc3OTQsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMjIzMDU3NDc4NjY2MzA1NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDczMi40ODcxOTY3LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjE1MTg4Mjg4Njg4NjU5NjY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDIuNjQ5Nzg4NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4zNDE4MzY1NDE4OTEwOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc0OS45ODg2NDg3LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjMzMzg3OTgyODQ1MzA2Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NjAuMjk5Mzk1NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4yMzkwOTE1NDUzNDMzOTkwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzY3Ljk4MTEwNDksICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzQ3MDkyNjU4MjgxMzI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzc4LjcyNzUyNDgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMjkxODg5MTkwNjczODI4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzg2LjM0ODczNjUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMTc4OTIzMTg5NjQwMDQ1MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc5Ni45ODA4NjU1LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjE5NDMwMDc1NTg1ODQyMTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDUuMjY3ODI4NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xOTQzOTc4MzY5MjM1OTkyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODE1LjkwNDU4MDYsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMjE3MTA1OTU0ODg1NDgyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODI1LjMwMzg3NTQsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTUwMTQ4NjU5OTQ0NTM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODM1LjQ0Nzg5MzYsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMzI4MzE5OTY2NzkzMDYwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODQ2LjA0ODg0NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4xNjA0Mjg1OTg1MjMxMzk5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODU4Ljk3Nzg1MjgsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjM3MjExOTEyODcwNDA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODcwLjYyNzc1ODMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMTY2MTQ1NDI5MDE1MTU5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODgxLjg3MTg4MDgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjE3NDIxMDI1MDM3NzY1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODkxLjY4Njg5NjYsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjUwOTY2Nzg3MzM4MjU2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkwMy4zNTgxMzc0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjE5NTMxMzM5NDA2OTY3MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTIuNzQwNzU0NiwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xMzMyMzU5MDE1OTQxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkyNC4yNzkwMTc0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjMwNDE1NjUxMjAyMjAxODQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MzUuNzA4MjYwOCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yNzU2MTIzODQwODA4ODY4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTQ5LjEyNTMyNDUsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMTAxOTUyNTA4MDkxOTI2NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk2MC43MTk0NDQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMTcwNjAyMTI3OTA5NjYwMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk3My4wMjYxNTkzLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjE3Njg5ODA5MjAzMTQ3ODg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5ODIuOTA5Nzg3NCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4wODQ1OTE1OTczMTg2NDkyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTk1LjgwNjYyMzcsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMjM3NTgyNTk0MTU2MjY1MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAwOS4yNTk4ODQ2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjI4MDgzNzg5MzQ4NjAyMjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUwMTkuNTE3OTQ5LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjQ4NDEyODkyMjIyNDA0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAzMi4wODA4Mzg3LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjE5MDczOTY5MTI1NzQ3Njh9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzQxNTMzX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODQuODIxMzAwNywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjYyMjc5ODc0MDg2Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4NS45ODk0MzE2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTg0MzQ0NTY1ODY4Mzc3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg2Ljk0MDc0MzQsICJzdGVwIjogMiwgInZhbHVlIjogMC40NjY2NTE5NDYzMDYyMjg2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg3Ljk1MDcyMywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjMyMDYzMjc4NTU1ODcwMDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODkuMDkyMDIxMiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQzOTIxNjM0NTU0ODYyOTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTAuMzAzOTgxLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjE5MDMxNjY3NzA5MzUwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkxLjYwMTM3OTksICJzdGVwIjogNiwgInZhbHVlIjogMC43MTI0MzkwNjAyMTExODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTIuOTk5MjcxNCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQ4NTQ5OTA4Mzk5NTgxOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NC40NzkyOTQsICJzdGVwIjogOCwgInZhbHVlIjogMC4zNDE4ODUzNTgwOTUxNjkwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk2LjI5MDY4OCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjI0NDY5MzEwMDQ1MjQyMzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5OC44NjY0NDgyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjg2NDI5NTU0MjI0MDE0Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwMS41NTkyNTU0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI1MjU2MzIwODM0MTU5ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNC4wNjM0MTkzLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjMwMTkyMjIwMjExMDI5MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNi4wMjIwMzYzLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjUxMDY3Mzg4MDU3NzA4NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwOC4wNjE2MTcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTAzODkyMDA0NDg5ODk4N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEwLjE3MjQwNTUsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDE4MDMzMTUyODE4Njc5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEyLjQxNjg0MTUsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDUuODU5MTA5NDAxNzAyODgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTUuNTM1OTkyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjQxNTg2MTg3NDgxODgwMTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAxOS4yOTQwNTMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjE2NjAyMDYzMTc5MDE2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIyLjU0MDM3NDUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMTQ4NDc0MTg2NjU4ODU5MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyNS4xMzQyNjcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODUyMjUyOTYwMjA1MDc4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI3Ljg0MzU1NzYsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNTU3MjY2MTE2MTQyMjczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzAuNjQxMzQ1NSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNjQ4NDI0NDQ2NTgyNzk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzQuOTU0OTg3OCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zNTE4MzM1ODE5MjQ0Mzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDAuMTAyMzU3MSwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43OTkwMDI5NDU0MjMxMjYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDUuMDA3MzExLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjIwMzQ0MTE0MzAzNTg4ODY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDguNjE3MDkzOCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC42NjIyNjE0MjY0NDg4MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1MS44OTM1NzQyLCAic3RlcCI6IDI3LCAidmFsdWUiOiAyLjY4ODIzMDAzNzY4OTIwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU1LjUwODE4OCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC40NjU0MDA2MzYxOTYxMzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjAuODQ1NjA4MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4xNDc5OTM1NDk3MDQ1NTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNjQuOTk0ODY0LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjI5MTQ4MzEwNDIyODk3MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2OC42NTU0ODc1LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjQ0MDMxOTA2MTI3OTI5Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA3Mi4zMDI0NTczLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjI3OTI4NDI2ODYxNzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzguMTYxMTc1MywgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yMDMwODYzNDYzODc4NjMxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDgyLjUzNDY2MTUsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuMzcwNjA0OTMyMzA4MTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODYuNTAwMTY0MywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNzYzNTA4NTU4MjczMzE1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDkwLjk5MDcxNTcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzY2NTY0MTg0NDI3MjYxMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Ny40MzQxODE1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjQwNTQxODY5NDAxOTMxNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwMS42ODk3MjAyLCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI5OTY5Mjc0OTk3NzExMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwNS45OTg0OTQ5LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjM2OTY2MzgwNDc2OTUxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTEyLjM5Njg4MDQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDEuMDMxMTQ5MDI5NzMxNzUwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTE3Ljk5ODIyMTksICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjMzODgyNTQ2NDI0ODY1NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyMi42MDUzMjI4LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjE4ODkzNjc0MDE1OTk4ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyOC4zOTY2MzQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNDMyODM1MTMxODgzNjIxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTM0Ljk4OTk1MTEsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNTI1ODk4NzU0NTk2NzEwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTM5LjgzNzg0OTYsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDIuOTYwNzY2MzE1NDYwMjA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNDUuODI0NzEzLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjMxNTk5Mjg5MTc4ODQ4MjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNTIuNjQxMzcxNSwgInN0ZXAiOiA0NywgInZhbHVlIjogMS44NDQ3MzcxNzIxMjY3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU3LjkyNzI0NjYsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMzY2OTQzODk1ODE2ODAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNjQuNTEyMDMxNiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4zMzcxMjIwNTI5MDc5NDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzMuODIyNDExMywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yNTAyNjM0NTI1Mjk5MDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzkuNzU3ODMzMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4yNzM4NTAyMzIzNjI3NDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODcuOTcyNTc2MSwgInN0ZXAiOiA1MiwgInZhbHVlIjogOC45Njg4MTg2NjQ1NTA3ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5My42MDIyODg1LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjE3MzU2OTM1MTQzNDcwNzY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTkuODM3NDU5NiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC42OTYyMzY3Mjk2MjE4ODcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMDcuOTkwNjcxNCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC41MzQ2MzMxMDAwMzI4MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTMuOTA0ODgyNywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC40Nzk1MDg5MDY2MDI4NTk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMjEuOTUzMjA2OCwgInN0ZXAiOiA1NywgInZhbHVlIjogMC41NjE1ODk3MTc4NjQ5OTAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMjguNjE4ODM1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAyLjQ2MzAwMTI1MTIyMDcwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjM1LjA3MDk5LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjE2MjU4ODMyODEyMzA5MjY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNDMuNTk3MzExMywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC41NzgyOTkxNjQ3NzIwMzM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTAuMDE1NTI4NywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC42NDI2MDE0MzA0MTYxMDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTkuMjIxMjM4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAxLjE1NDY1MjM1NzEwMTQ0MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI2NS44MTMsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDIuMDcxNzQ2ODI2MTcxODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNzQuMjQ2OTgxOSwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4wODg3MjEyNzUzMjk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjgxLjk0MjQwOSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4yMTMxMDQyNDgwNDY4NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI4OS44Njg0Mzc1LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjEwOTk3MjAyMjQ3MzgxMjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI5OC43NDM4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg3MjU2MzgzODk1ODc0MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMwNi4xMTA3MjQ3LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjE2NDQ2MjkwOTEwMjQzOTg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMTUuNjg4NDUyLCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjQwODAyNTA4NTkyNjA1NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMi44OTQ3NjUsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMjg0MTkwNTA1NzQzMDI2NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMzMy4xMDAwNzcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMjQ1NDY0MDU2NzMwMjcwMzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0MC42OTk0Njg2LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjQ4MDI4NDI0MzgyMjA5Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1MS4wNjIwODkyLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjE3ODk4NjUxOTU3NTExOTAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNTguODE3NzcyMiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xNTI2NzEzMzcxMjc2ODU1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzY5LjMwOTg2NTcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzQ1MDAxMjIwNzAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNzcuMzAzOTYyNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4zMTAwMDg4ODM0NzYyNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzODguNDA1MTUxNiwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4xMTA5NzIxODg0MTMxNDMxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDAwLjk5NDk4NjgsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjgyMDkzMzQ2MTE4OTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDkuNTY4NDUxNCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yNzA4Mzc5NjI2Mjc0MTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MjEuMTUwNTc4LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjE5ODIxMTA4ODc3NjU4ODQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MzMuMDM0Nzk1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjIyMDcxOTQ0MTc3MTUwNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NDMuNzkzMTM2LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjE2MzIzOTc3NzA4ODE2NTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NTMuODc3ODI5NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMy4xMjgzMjk3NTM4NzU3MzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NjMuNTQ2MDUxLCAic3RlcCI6IDg0LCAidmFsdWUiOiAyLjY0NzMzMDc2MDk1NTgxMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ3NS4xMDU5ODE2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjIxOTU3MDE4OTcxNDQzMTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0ODMuOTExMTY2NCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC42MDYwNzAxNjA4NjU3ODM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0OTUuNDE1MjEyOSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4zOTAwOTU1MzE5NDA0NjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MDQuNjM3ODQxNSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMS4xMjQ1NjA1OTQ1NTg3MTU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MTUuNzkyNjQ5LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjIyOTI5NjkwNzc4MjU1NDYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MjcuMjY2MzM3OSwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4zNTAyNzUwMDk4NzA1MjkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzYuNzk4MjU5NywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yMDI4NDgzNTk5NDI0MzYyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTQ4Ljc2ODEzMTcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDEuMTA4NjY2NDE5OTgyOTEwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTU5LjI0NTcxOCwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xMjMxODE0MDI2ODMyNTgwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTcwLjQyNTA0MzMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuNDkzNTEyODY4ODgxMjI1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTgyLjc4MTE0NTgsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTg4NjU2NzkyMDQ0NjM5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTkyLjcyNzczOCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4yODkxNjgzMjgwNDY3OTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MDQuODI4Mzc3MiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4wOTgwMzM3MTEzMTQyMDEzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjE3Ljc3NjAyNiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yNTc4MjM0OTcwNTY5NjEwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjI3LjcxMjM2OSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4zMDU3NTQzNjM1MzY4MzQ3fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF81ODMwNl9CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjAyMzM1MTIsICJzdGVwIjogMCwgInZhbHVlIjogMC42NzYwMTI2MzUyMzEwMTgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzguMDMwMjY4NCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjcwMTUzMjAwNjI2MzczMjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OS4wMDg1OTksICJzdGVwIjogMiwgInZhbHVlIjogMC41MTYwNDk4MDIzMDMzMTQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODAuMTAyNDQ1OCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjMxMDAyMTYzODg3MDIzOTI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODEuMjYxMjE1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuODA0NDUzNzkwMTg3ODM1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjQ4ODg0NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM0OTU1ODI5MzgxOTQyNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4My44Mzk4NzgsICJzdGVwIjogNiwgInZhbHVlIjogMC4zMjk5MzY0NDQ3NTkzNjg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODYuMDg3NzM4NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjM2NTEwMzM2Mzk5MDc4Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4OC41OTMwNzQsICJzdGVwIjogOCwgInZhbHVlIjogMS40MDQ0NzQ3MzUyNjAwMDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTEuMDE2MDg5NCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQzNDM5NTU1MTY4MTUxODU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTIuOTkxNDU0NiwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC4yOTU2Mjc1MDQ1ODcxNzM0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk0Ljg1NzMyNDQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMjkzMDc4NjMxMTYyNjQzNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ni43OTQwNzcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzM1MzY5OTE0NzcwMTI2MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OC44MTk1MDI4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMzNzk4NjkxNjMwMzYzNDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDAuOTk3Nzk3NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43OTY3MzMzMTk3NTkzNjg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDMuOTkxNjY4MiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC40MzIxOTQyOTI1NDUzMTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDcuNTMxOTE0LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjUxNjQ5MDU3ODY1MTQyODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAxMC43MDQzNDEyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2MDIxMDYwOTQzNjAzNTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAxMy4yNDI3Nzc4LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjMzMTI2MzkyOTYwNTQ4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE1LjgxNjgyMzIsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzQ2MTcwODQyNjQ3NTUyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE4LjQzNjM2NTEsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjMwMzUxNjAzMDMxMTU4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDIyLjEyMzYxMSwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4xODMxNTk1ODk3Njc0NTYwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDI2LjM5ODgyMSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42MTAxNDU3NDc2NjE1OTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjkuNjUxMjA4OSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC41MTI1NDg0NDY2NTUyNzM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzIuNjM5NDgwNCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43MjU5NjM4MzA5NDc4NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzNS42NDE4Mzc0LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjU3NTg2Mjg4NDUyMTQ4NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzOS40MjE0MjksICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMzM0ODYwODYxMzAxNDIyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ0LjQzNjI1OSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4yMTMzNjA5MDU2NDcyNzc4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQ4LjA1MDY4MjMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzE3MDM4MjczODExMzQwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUxLjQzODYyODQsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTcwMTg0NzkxMDg4MTA0MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1NS4wMzgxMzUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMzk2MTkxNTk2OTg0ODYzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDYwLjUyNTExMTIsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMzUzODk4Mjg2ODE5NDU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjUuMTk2NjMyNCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4yNDUwMTMyNjY4MDE4MzQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjguOTU4Mzk2NywgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zNzcwNTA0ODkxODcyNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzIuNzc0NDUxNSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC40MDkwMDc2MDg4OTA1MzM0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDc4Ljg0MTQ4MjIsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNDg1ODQ0MTA1NDgyMTAxNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4My41ODM4MTUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzI4NzE2ODc0MTIyNjE5NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4Ny42OTExOTM2LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMwMTQyMzQzMDQ0MjgxMDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwOTIuNTQzOTI0MywgInN0ZXAiOiAzOCwgInZhbHVlIjogMC41MDkzODY2NTg2Njg1MTgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwOTguOTYyNTc3NiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC40MjMwNDQ0NDMxMzA0OTMxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTA1LjcyODAxNjQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMjc4NjA4NDExNTUwNTIxODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExMi4yNzEzMzQsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNjA2MjkyMDY4OTU4MjgyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTE4LjIzNzU0NTcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNTMxODMzNTg5MDc2OTk1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTIyLjg2MTc0NzMsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDEuMTI5OTExNjYxMTQ4MDcxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI4LjI1NzQ0MDMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMjcwMzg4NDU0MTk4ODM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM1LjA3NjUwMjMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMzEyMjkzNDQwMTAzNTMwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQwLjA0MDYyNDYsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjY2NDUyMDQ0MjQ4NTgwOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0NS42MDQ0NTg4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjQ5MDIzMTYzMzE4NjM0MDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNTIuOTg4MTg5MiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMzY5NjI3OTUyNTc1NjgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTU4LjEyMDI3NTMsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzQwMDY5MTc0NzY2NTQwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTY0LjU3OTgzMTYsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNDEyMjA2ODI4NTk0MjA3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE3MS42MDc4MzYyLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjQxNzc5MjMyMDI1MTQ2NDg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzcuMTIzMzUwOSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC40NTExODc5MDg2NDk0NDQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODUuMTExOTIwNCwgInN0ZXAiOiA1MywgInZhbHVlIjogMS45MjM0NzE0NTA4MDU2NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5NC4yMTc2NjE5LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4NzIzODg2MDEzMDMxMDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwMC4yMTU5NzEyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjMwMDQ5NjAxMTk3MjQyNzM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMDguOTQ3NjM2NCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yMjExMDE2MTE4NTI2NDU4N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjE0LjkxNjM1NywgInN0ZXAiOiA1NywgInZhbHVlIjogMC4yMjgwMTk4MDM3NjI0MzU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMjIuNTYwNjIwMywgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4yNTgwMzg4MTg4MzYyMTIxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI5Ljg2MTA5MDQsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMjY2OTE2MDY2NDA4MTU3MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIzNi4wNTY4NDAyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjE4MDE3NjU4NTkxMjcwNDQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNDUuMzY1OTQyMiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC40NjMwOTM1Nzg4MTU0NjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTEuNzkxOTgzOCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4zMTIxNDc0Mzg1MjYxNTM1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjYwLjcwNDU1NjcsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMzczNDU3MDQ0MzYzMDIxODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI2Ny42OTYyODk1LCAic3RlcCI6IDY0LCAidmFsdWUiOiAxLjY1NDg4NjYwMzM1NTQwNzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI3NS45MjQyMTY3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjY1MjUyMjU2MzkzNDMyNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI4My44NzY5OTYzLCAic3RlcCI6IDY2LCAidmFsdWUiOiAxLjU1MzI4MDExNTEyNzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI5MS43Nzg1NDUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTg3ODYxNzc2MzUxOTI4N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzAwLjU2NDgzNTMsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNTQwMTk5MTAwOTcxMjIxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzA3Ljg2NTc3NTgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDEuNDIyMzk2NDIxNDMyNDk1MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzE3LjQxMDUzMDMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNTY4MDY0ODA4ODQ1NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyNC42NzY3MDksICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTk5MTM5ODAzNjQ3OTk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzUuMDI4NzU1LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjQ5NjcxOTEyMTkzMjk4MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM0Mi42MTY3NjUsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjg0MzUzMjI2NDIzMjYzNTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM1Mi44MzI5Mzk5LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjY1MzI5NDIwNTY2NTU4ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM2MC43MjMzNTcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNDI5OTMwNjg2OTUwNjgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzcwLjkxNDQxNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNzY2NzczMzEzMjgzOTIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzc5LjQyMjM0OSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4yMjk1OTY3MDQyNDQ2MTM2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzg5LjY0NjUxMywgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4wOTg0MzM0MjAwNjIwNjUxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzk4LjY3ODk4NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yMjkzNDk4MjE4MDU5NTM5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDA4LjQxODQ2MSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4wODQ1MTQzNDIyNDg0Mzk3OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDE4LjU5NDg4MTUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNzcwODEyODA5NDY3MzE1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDI3Ljg2NjA1NjcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNzUxNDA5ODg4MjY3NTE3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDM5LjQyOTQzNDUsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMzExMTU2NDgxNTA0NDQwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDUwLjQ1ODkxNTIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDEuMjM5Mzk4ODM3MDg5NTM4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDY0LjQ3Nzg5NjIsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNjA4MzcxNzM0NjE5MTQwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDczLjU5MjY0OCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC43OTE5MzY2MzU5NzEwNjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0ODQuOTM4NTA0NSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC45NTczNDA0Nzg4OTcwOTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTMuOTM2NjgyLCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjM2OTMzOTA0ODg2MjQ1NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUwNS4yODQ4MTksICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMDM0OTAzOTAyNTYwNDcyNDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUxNi4yOTA1Nzg0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjQzNjkyOTM0NTEzMDkyMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUyNi4xMjc2MTcxLCAic3RlcCI6IDkxLCAidmFsdWUiOiAxLjE2NTA4MDMwODkxNDE4NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUzOC4yNTkxNjkzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjA5MjM0NDU0NDgyNzkzODA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDguMTE2MDMyOCwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xOTMwMzM3ODQ2Mjc5MTQ0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTU5LjcwMTQ1NTgsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMjk5NTY3OTY3NjUzMjc0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU3Mi4wMjA3NTUzLCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjc3MDMwMTEwMzU5MTkxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTgxLjU0OTg0NCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMy4xMzY2ODI1MTAzNzU5NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1OTQuMDAyNTc3OCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yMDQyMTY1MTAwNTc0NDkzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNjA2LjE4NTE0MTgsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDQuODU4MzE1OTQ0NjcxNjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MTYuMzA4NTk1NywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC41NzY5NjAxNDY0MjcxNTQ1fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xODM4MjFfQlMxMDAiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDUzODcuNDgzNjkxNSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjg0MTY3MTk0MzY2NDU1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4OC40MDI4Mjg3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzYxMjQyNjI4MDk3NTM0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg5LjM5NDI3MTEsICJzdGVwIjogMiwgInZhbHVlIjogMC43MjU0NzEwMTk3NDQ4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MC41MDE3MTQ1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjMxNjcwOTUxODQzMjYxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkxLjY3MzUyODcsICJzdGVwIjogNCwgInZhbHVlIjogMC42Mjc0MjE2NzcxMTI1NzkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTIuOTkwMDU2NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjU5NDg3NzYwMDY2OTg2MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5NC45NDkxMDA1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNTE3MDgyNjkxMTkyNjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTcuMjk2MjkxOCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjUyMTM0NDU0MjUwMzM1Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5OS42Mzc0Mjg1LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNTE0MTA5MDE1NDY0NzgyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAyLjEwMDE3MDYsICJzdGVwIjogOSwgInZhbHVlIjogMC40MzcwMjMxMzMwMzk0NzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDMuODU5MzQxOSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40OTE4NDY4NTk0NTUxMDg2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA1LjY3MTA4OCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40NTAyMzYxNzE0ODM5OTM1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA4LjI4MTMwODcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNDQ1Nzk0ODIwNzg1NTIyNDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMC4zMTU4Njk4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0ODA3MzgwNDM3ODUwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMi43MTA1NjQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMzgwNjQwODA0NzY3NjA4NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxNi4xNzA5NDgsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzgwNzE0ODkzMzQxMDY0NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxOS41NzczMjE4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQyNzEwNzI3NDUzMjMxODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyMi4wMDQxODY0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjM3Nzc1NzM3MDQ3MTk1NDM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjQuNDk0MDgzLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjM5ODY1NDEwMzI3OTExMzc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjcuMDczOTUxNSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4zNjU5NDIxODAxNTY3MDc3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI5LjcwMzQ2NiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4zNDUxNTE2MDMyMjE4OTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MzMuODkzODkzNywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4zNjE4ODMyODI2NjE0Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzOC44OTU2MSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zMzg5NTYzODU4NTA5MDYzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQzLjgxNDI0NCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zNDkyMTAzMjE5MDMyMjg3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ3LjUzOTk1NTYsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNDE2Mzg4MzMyODQzNzgwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDUwLjYwMzI1MiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4zNzU0MjUzOTgzNDk3NjE5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDU1LjQ4NzM4NCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zNDQ2NTAzNTc5NjE2NTQ2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDYwLjA1NDkzNTUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuMzE3Njg3ODk4ODc0MjgyODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2My40NjQyNTI3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjM3NDcyMjI0MjM1NTM0Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Ni45NDUzNDA5LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjMxNTA1NjMyNDAwNTEyNjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzEuMzYyNDAzMiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMjc4MzIzNzA5OTY0NzUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzcuMDkyMTY3NiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zMTM4ODg1NDk4MDQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODAuOTI4MzEyOCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zMjIzMjQyNDYxNjgxMzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODQuNzM5NDQ2OSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zMDc0NTIxNDIyMzg2MTY5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDg5Ljg2MjYxMSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMDg1NzA2MjMzOTc4MjcxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk2LjEyOTI2NTUsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMjg4NjU2MDg1NzI5NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDAuMzA2MDA5LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjI2MjA2MTYyNTcxOTA3MDQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDQuNjQyOTA5NSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC4yODc0NjIwNTU2ODMxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxMS4xODU2NjY2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI5MjIwOTg2MzY2MjcxOTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxNi41MTQyNjE3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI4NTA2MzY1NDE4NDM0MTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MjEuMDkwNzI5LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI3MTMxOTAwMTkxMzA3MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyNy4wMzY1MjEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjY5NjcxNDQwMTI0NTExN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTMzLjMwMjcxNDMsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMjY5MDU5NTk4NDQ1ODkyMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUzOC4yMzczNzIsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMjY2NjM2MjIyNjAwOTM2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTQ1LjU5MDM0MDQsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMjM5MzAyNzI0NTk5ODM4MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1NC4zODExNDgzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjI1NzAxMjc1NDY3ODcyNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1OS41NDAyMTg2LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjI1NDQyODM4NjY4ODIzMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU2NC43NDcxNzYyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjIzOTYwMjUzNTk2MzA1ODQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NzIuOTYyMTQ4NywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yNDEyNjU4MDM1NzU1MTU3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTc4LjQxNzUxNCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4yNTM1MjYyNzAzODk1NTY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODQuODA1NzI2OCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yMzA4MjgzMTUwMTk2MDc1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTkyLjYxOTE4MTQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjY2NzM2NTY3MDIwNDE2MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5OC4yMjMwNzU5LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjM0MzI1NTgxNzg5MDE2NzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDUuOTY2OTU2MSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNjA0Nzk4OTcyNjA2NjU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MTIuNjg4NjExLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjIzODc2NDMxNTg0MzU4MjE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MTguNjAzMDMyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjI1NDM4ODUxMTE4MDg3Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyNy44NDc2MTI2LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjIwODkyNjcwNzUwNjE3OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzNC4wMDY3Mjg0LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjIxNzc5NTA1OTA4NDg5MjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NDIuMzg0MzY3NywgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4yMjQzMjU0NzgwNzY5MzQ4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjQ5LjQ1NTIxNzEsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMjI0ODQ4OTExMTY2MTkxMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjU2LjQ1NTA5NjIsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMTk4Nzk0Mzk0NzMxNTIxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjY1LjIwNzUxOTMsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjE5NDU5MjA1ODY1ODU5OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3MS45NzUyMjk3LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjE5MzEwNzQ4NTc3MTE3OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4MS43ODQ0NTc3LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjE3NTI3MzI2OTQxNDkwMTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2OTIuMjg3NzcwMywgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4xODg1OTc5MzI0NTc5MjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MDEuNjk0NjY4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjIyMjc5OTk1Njc5ODU1MzQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MDguNzM5NzYwNiwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yMTU1MjY1NTEwMDgyMjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MTguNjY3OTczMywgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yNTUwMTY4NjMzNDYwOTk4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzI1Ljc4ODcwOSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yMTA2NzczMjU3MjU1NTU0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzM2LjExNDA3MTQsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTk2MDM5ODU1NDgwMTk0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQzLjMyMzYyNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4yMzQwNTQyNjc0MDY0NjM2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzUzLjg2MTE0MDMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTkyMjk5ODcyNjM2Nzk1MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc2MS43MTUzMjMyLCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjIwMTgwNTQ3MjM3Mzk2MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3Mi41NzM1NjI2LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjIwMzA3MTU2NDQzNTk1ODg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3ODAuMzgxMDc4NywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xNjk5NjgzMzY4MjA2MDI0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzkxLjM0NTM1MTcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTg0OTY5MDIyODcwMDYzNzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc5OS42NTQwMTU4LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjIwNjY5MTkyMDc1NzI5Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgxMC40MTA0NTc2LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjE4NTY3NzQwOTE3MjA1ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgxOS41MzYyNDQsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjA5MzkyODAwOTI3MTYyMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgyOS43MTk5MiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xODA0MjcyNTMyNDYzMDczN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODM5LjYwMjY1NjQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTc0NTQ2MDYyOTQ2MzE5NTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg0OS40NDUzOTU3LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjE1ODI4MDgxOTY1NDQ2NDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NjEuMjU2Nzc2MywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4xNzI2NTgyMDUwMzIzNDg2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODcwLjA2OTg3NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4xNTg2MjIzODQwNzEzNTAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODIuMjMzNzg0NCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4xMzk3NDc0NzA2MTcyOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4OTcuMDA5MjA0NiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4xNjA3MTg1NzUxMTk5NzIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTA2LjAwNDcwOSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4xNzU3MDA4NDMzMzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkxNy45OTQwMzgzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE2MTk2NjU5MjA3MzQ0MDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MjcuODA4NjIzNiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4xNzA0NDE0MDM5ODUwMjM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NDIuNjQ2NzI2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjEzNDE1MzEyNzY3MDI4ODA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NTQuOTk4MjI0NywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4xNDQzMzUzNDQ0MzM3ODQ0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTY0LjE4MDUzODcsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMTQ5Njc0OTUyMDMwMTgxODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk3Ni4zNTkwMzcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMTQyNjM4ODMyMzMwNzAzNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk4Ny43NTA3Njc3LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjE0NTk4NTY2MjkzNzE2NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk5OC4xNTkzMDcsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMTMyODI5NzEwODQxMTc4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDEwLjY2ODU0MzMsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTYzMDU0ODUzNjc3NzQ5NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAyMS40NzQ1OTQ0LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjEyNDYwNDk2Mjc2NjE3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAzMi45ODg2MjEyLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjE1NzQ4Nzg2OTI2MjY5NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjA0Ni4wODc0Mzc2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjE2MTczOTYxNzU4NjEzNTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNTcuNzAwNDYyOCwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xNTM1MjQwMTEzNzM1MTk5fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xNDc0NzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwNjQyMy45MTM3Nzk1LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNzQwNzUwNDkxNjE5MTEwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI1LjE3Mzg5NTEsICJzdGVwIjogMSwgInZhbHVlIjogMC40NDI0OTQ2MzA4MTM1OTg2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI2LjYxNTAyMDgsICJzdGVwIjogMiwgInZhbHVlIjogMC41Mjc3NjYxNjgxMTc1MjMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjguMjE2Nzc3MywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQwMDgxMjAyOTgzODU2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMwLjMzMjYxNjMsICJzdGVwIjogNCwgInZhbHVlIjogMC4zOTI0MzQ5NTQ2NDMyNDk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzIuNzQ4NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQwMjU0NzE4MDY1MjYxODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNS4wODU0OTQsICJzdGVwIjogNiwgInZhbHVlIjogMC4zNDkyMjI3MTk2NjkzNDIwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM3LjIxMjIxNzYsICJzdGVwIjogNywgInZhbHVlIjogMC4zMzA2NDU5NDg2NDg0NTI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM5LjM3NzA2NDcsICJzdGVwIjogOCwgInZhbHVlIjogMC4zNzk3NzQ0NTEyNTU3OTgzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQwLjk4NTA4MTQsICJzdGVwIjogOSwgInZhbHVlIjogMC4zNTA5NTQzODM2MTE2NzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDIuNjc5ODM0MSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC4zNjI5MTA2ODc5MjM0MzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDQuNTAxOTQ4NiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4yOTQ1MjU5ODA5NDk0MDE4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ2LjM4NzgyNiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yNTY2MDU5ODI3ODA0NTY1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ4LjM4NDUzOTYsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTA2OTI2Mjk4MTQxNDc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUxLjIyMTQyMjcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMzY0Nzc0NDk1MzYzMjM1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU0LjU4MjE0MzMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzczODQzNjY5ODkxMzU3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU3LjY0MzIwMDQsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNDEyOTY3MzgzODYxNTQxNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2MC4wNDYzOTAzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjI2MjI4OTc5MjI5OTI3MDYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjIuNDYxNTcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzUzNzMyODI0MzI1NTYxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY1LjA0MzA4NDksICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMjY5NDI3ODY1NzQzNjM3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY4LjE5MTg3MTIsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjU0Nzk4NjUwNzQxNTc3MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ3Mi40OTU4OTc1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI2MzA4OTQxODQxMTI1NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ3Ni4xMDkzNzMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuMjU2MTM4MzI0NzM3NTQ4ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ3OS4yMjQxNzc4LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjMwMDk4MTcwMDQyMDM3OTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODIuMjk0Mzk3NiwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4yNTE5MDQzOTgyMDI4OTYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODUuODUwMzIyMiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yODY3MTY0MDE1NzY5OTU4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDkxLjEzOTI5MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zMzQxOTA5NjQ2OTg3OTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTUuMjUyMjk2MiwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zNDI1ODI2MTMyMjk3NTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTguODAyOTA1OCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yNzM0MTA0OTkwOTU5MTY3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAyLjI5NjU5NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yMjM2Mzk1MTgwMjI1MzcyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTA4LjU2OTcyMDMsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDIxMjIyNTY3NTU4Mjg4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEyLjgwNTUwMzgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTk5NzExMDg0MzY1ODQ0NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUxNi42NTk3ODM2LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjQ1NDUwNTA1NjE0MjgwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTIxLjEzNzgwNTIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMzkzNjA0NjM2MTkyMzIxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTI3Ljg5MzY5OCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMDEwNTA4NDE4MDgzMTkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzIuMjEwODQ0NSwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNTA3MjgxMzAzNDA1NzYxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM2LjQyMDg1ODEsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMjE3OTM5MDc4ODA3ODMwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQyLjA0ODY4ODIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMTcyNDMxNTg4MTcyOTEyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ3LjUwODU0MjMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMzI2OTkyNjYwNzYwODc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTUxLjc1NDg1NjMsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMzE4NjE0NTcyMjg2NjA1ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1Ni40OTAzMzg4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI5MTk0NjgyODM2NTMyNTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU2NC41NzQ4NjIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjAwMjUxMzcwNjY4NDExMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3MS41MTA2NDIzLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjIxNTAyNzcxOTczNjA5OTI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NzYuMjQzNzM1NiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xNDY1ODM0MDgxMTcyOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODIuOTk0NCwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4zMTkyNTI5MzgwMzIxNTAyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTg4LjgzNTI0MDgsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMTkzNDIxNTQyNjQ0NTAwNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5My44MjI1NDksICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjI4MDczMjI0NDI1MzE1ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwMC44MzE1Njg1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjM5NTI2MjE1MTk1NjU1ODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwNi45NTcyNzQ0LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjM1NDM1NTc4MjI3MDQzMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxMi4wOTc3MTQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTg3MjkxNDczMTUwMjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIwLjA0MDExMDMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMjE0NjI2OTk3NzA5Mjc0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjI1LjcxMTgxNTYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjg4NTY3NjAyNjM0NDI5OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzMS41NzM2MDM0LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc0OTQzMDgzNTI0NzAzOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0MC4yMzM2MDIsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjYyNjM1MDIyNDAxODA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjQ2LjE1NDAxMDUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMzkwNzUwMDUwNTQ0NzM4Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1NC4yNDQ2MDI3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjE2MjA5NTA5OTY4NzU3NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2MS4zNDM1NDM1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjE5MjM1MTY5ODg3NTQyNzI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NjcuODM0MDQsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjAzMjE1NTA5NjUzMDkxNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3OC44NzA4NDAzLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjIzNzY1MjQyMDk5NzYxOTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODUuODQyMzU3MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNTk2MDQ1MTk2MDU2MzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2OTUuMjUyMzI0OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC40MDExMDUxNjU0ODE1Njc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDEuNTc2NDYyNSwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC41OTQ0MDY0MjU5NTI5MTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDkuOTE4ODc0NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4xMzU2MTcyODU5NjY4NzMxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzE3LjI5ODAyNDQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMTA3MjAyMjYxNjg2MzI1MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcyNC42MjIyMDgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjAyOTY2MDM0NDEyMzg0MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjczMy40MzEyODMyLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjI4OTE0ODc3NzcyMzMxMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc0MC4xNzA1MjMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNDAyMzg5NjQ1NTc2NDc3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc1MC4xMDgzNjE3LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjE1MDE2MTgwMjc2ODcwNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NTcuMTY4Nzk4MiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4xOTk2ODQ1OTAxMDEyNDIwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzY3LjE0MzA5NDMsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTIyMTYzNzg3NDg0MTY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzQuMzc2NDYxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjI0ODc3Mjk0ODk4MDMzMTQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3ODQuOTY0NjY3OCwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xMjY3MzIzNzkxOTgwNzQzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzkyLjE5MDQ1NTQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMTA0ODQ1NDA0NjI0OTM4OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgwMi41MjA2MDEsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTkyOTMzOTQ2ODQ3OTE1NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgwOS45OTMyNzMzLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjE3NzIyODQ1MDc3NTE0NjQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjAuNTI4MTE3MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4xMTE3NDg5NTYxNDM4NTYwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODI4LjM5ODkzMDUsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMTI3MDE4MjU3OTc1NTc4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODM5LjAwNDgwMTMsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMzE5Mzk4OTY5NDExODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg0Ni44NzAwODcsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMzEzNTU0NDA2MTY2MDc2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg1Ny41ODIzOTYzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjE3MzM2ODg1NjMxMDg0NDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjYuMDA3MzgwNywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNjkwMzI0ODQyOTI5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg3Ni43MTg2MzE1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjMzNjk4MzcxMDUyNzQyMDA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4ODYuMTQyMzUwNCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4yODQ0NDkwMTEwODc0MTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4OTYuMDY0NDkwOCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yMDc1Nzg0NjUzNDI1MjE2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTA5Ljg0MzkwMDIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjkxMDY4ODUxOTQ3Nzg0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE5LjI5NjI2OCwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4yNjIzNTY0MzAyOTIxMjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MzEuNzUyODQ0NiwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yMjg0MTQzODY1MTA4NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk0Mi41NjcwMDM3LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE1MDYzNDg0MDEzMDgwNTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5NTQuMjYxODA0OCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNjQ4MDE4MDAyNTEwMDcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5NjUuMTk3NjQyMywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xMzY2NTM1MTI3MTYyOTMzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTc1LjA4MzQyMjQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTkxNDA4MzM2MTYyNTY3MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk4Ny4wNDUyOTcsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNDE3MDA3OTUyOTI4NTQzMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTk2LjU0MTYyOTYsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMjMxNjE4ODgxMjI1NTg1OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAwOC40NzE4MzYzLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjI1OTgxMzU3NjkzNjcyMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAyMC4yNDUzMjQxLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjIxOTk0MjU2OTczMjY2NjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMzAuMDM5MjgsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTcwNzUwMzk0NDYzNTM5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0Mi41MjM4ODUsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMDgzMDUyNjY0OTk1MTkzNDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA1NC4wNTk5NzM1LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjIwNTIwMDUzODAzOTIwNzQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNjQuODE2MzU2NywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yMzczMDI2OTA3NDQ0MDAwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDc3LjM4NDY1MDUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMDUxMDI2ODk1NjQyMjgwNTh9XX19XQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_1/test/accuracy%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMS90ZXN0L2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgyOS43MDcwOCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMC45NTgwMjY0LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMyLjM1MTgyMjksICJzdGVwIjogMiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzMuOTEyNjc5NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNS41ODQ1MTgsICJzdGVwIjogNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzYuNzcwNzU3NywgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzOC4wMjQ3NDYyLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM5LjM2MTE5NjMsICJzdGVwIjogNywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDAuODAyNjg4NiwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Mi4yOTY3MDYyLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQzLjkzMTkwOCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDUuNjczOTgyNCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDguNTMzODc0LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1MS41MDIzMDM4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1NC4yNTU0Mzg4LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1Ni4zMjcwOTksICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU4LjY1NzA4MjMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYwLjg5NDE3NTMsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYzLjI2Mjc1NjYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY2Ljg0MTQxOTIsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcwLjYzNDczLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3My41MDAwNjY4LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3Ni4yNTczMDEsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc5LjEzMjUzODgsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODgyLjM2NTY5OTgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODg2Ljk4NDM4ODYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkwLjc3NTg4MDMsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODkzLjkxNzk0LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5Ny4xNzQzMzU3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkwMS4yNzQ0NDM2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkwNy40Mjg0NzYzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxMy4yNzQ4OTMzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxNy4yMTI4ODgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTIxLjQ5NTU0MDYsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI3LjIwODE0MywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzEuMTgyMDEyMywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MzUuMTY5NDA3OCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NDAuMTQzMjU4OCwgInN0ZXAiOiAzNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NDYuMDgyOTQ2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1MC4yODg2MDEyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1NC41Mzg5MTA5LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2MS4wMDgwMzYxLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2Ny45ODg1NTMsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTczLjcyODg1NjYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTgwLjkyNzYyOTUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTg1LjY1OTQzNiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTAuNDY4MTk5NSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTcuOTAyMzI4NywgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDMuMjI2MTg4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAwOC40NTI2NDk0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAxNi4zMTMwNDksICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDIxLjU2NTg2MDUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDI3LjM5NTYwMDYsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDM1LjI2NTMzODQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQwLjg0MTY2NTMsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQ4LjA0MDMwNzMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDU1LjIzMzQ1NywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjEuMDg1MjgwNywgInN0ZXAiOiA1NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNjkuNzEwNDM2LCAic3RlcCI6IDU4LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3NS43Nzg1NzE2LCAic3RlcCI6IDU5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4My4zMjg5MTY4LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5MC44ODQ5MTk0LCAic3RlcCI6IDYxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5Ny41MTUyMDQyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEwNi40NzQyNzM3LCAic3RlcCI6IDYzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTExMi44ODU2ODc0LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyMS45Nzk3NDgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTI4LjgzMzE1NTksICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTM3LjU0OTYyMzMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ1LjQwNzUyMzYsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTUzLjcwODQ1NjgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTY1LjIzNjI3ODgsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc0LjU3NjgwMiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExODIuODA3NDc2LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE5Mi44MDY5NTk2LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIwMC45NzU4MTg2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIxMS40NjYzNzQ0LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIxOS40NjEyNjM0LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIyOS43ODcwNzYsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjM3Ljc4MDU4NiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNDguNTA4OTYzMywgInN0ZXAiOiA3OSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNTYuNTc5MzcxLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI2Ny40MTEwNjYzLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI3Ni4xOTMxOTY1LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI4Ni44MDEyODcyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI5Ni42MDAzNjE2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMwNi40ODE2NTA2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMxNy41NjcyMzE0LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzMC41MzgxMTY3LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0MS4yMTQ3NjY3LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM1My4yMzMwOTU2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM2Mi42NDQzMDYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzc1LjEyMDAxOTIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzg2LjQ0NzA4OSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzOTcuMTQyODA5MiwgInN0ZXAiOiA5MywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MTAuOTYyMjk3NCwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MjYuMTM5ODgxNCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzcuNDM0OTQ0NiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NDkuMjc5MTA3LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2Mi4zNDg0MjMsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDc0LjU0MzUxMDcsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNzkxNDNfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDM4NC45ODA4MDQyLCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg1Ljc4NzM2ODgsICJzdGVwIjogMSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODYuNjQ5ODg4MywgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ny42MTY3ODg2LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg4LjY1NzI1MjMsICJzdGVwIjogNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTAuMDg4MjgzNSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MS45ODgzMDc1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk0LjA0NjgyNTIsICJzdGVwIjogNywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTYuMTkzMzY3NywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Ny45NDI5MTY2LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk5LjQ5Nzg2MSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDEuMTc5ODM4MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDMuMDE0NzAzNSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDQuODcwNjg4NCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDYuNzkwNDA0LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwOS44NjkwOTY1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxMy4yNTI5NzI4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxNi4wODAwMjQyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQxOC40MjMzNTcyLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQyMC44MzkxMzU0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQyMy4zMjIwMzMsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI2LjM0NzUxNjgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDMwLjQ5ODI5NCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzQuMDQxNDk5OSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzcuMTExMTAwNCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDAuODI2NDk2LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0NS45MTMwMDQ5LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1MS4zNzUxNTk3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1NS4zNzU4NDMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU4LjkxMTU5MjIsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDYyLjQxMjY4MzIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY3LjMzMjkxNjcsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDcyLjIwNDU1MzgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc1LjkxMjM2NDUsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc5LjczMzE2ODYsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg0Ljg5NjgxNCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0OTAuMDYxNTk0LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5NC4wNTEzMjI1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5OC4xMTg0LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwNS4xNzc1MTU3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxMi41MDQ0NzQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE3LjIzOTIwNSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjIuNDk1NjQ2NywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjguOTU5MTcyMiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzMuNjY1ODU2NiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzguNzI0ODUsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ2LjAzNjgyMzUsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTUxLjE3MzYyMzMsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTU2LjY0NjExMTUsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTY0LjIwNDEwMTgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTY5LjM5Njk5MjQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTc1LjQzMjI2MiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODIuNzgxMDc3OSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODguMjM3NTg0OCwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1OTUuNTE1Njg4NCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDIuMzg4MDE1NSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDguMTM3Mzk2MywgInN0ZXAiOiA1NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MTYuNzI3OTExLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYyMi42Nzg1MTgsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI5LjkwNzUwMzYsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjM3LjYyODkwMDgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQ0LjAyNTc5MDUsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjUzLjE2NjI2NiwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTkuNTI0NzY4OCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjguMjQwNTk5NCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzUuMzU0ODMzNCwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODMuNTgyNDgzMywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTMuNDM2NjA5LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcwMy42MjE3NDA4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxMS4xOTYyNjQ1LCAic3RlcCI6IDY5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxOS43Njc2ODczLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcyOC4wODk0MzUsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzM2Ljg5NDQ2NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDUuNjU1Nzc0OCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NTQuMzMyNjI4MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NjMuNDkwNDIwNiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NzIuNjgyODY5NywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3ODEuODMyMTM4OCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3OTEuMjYxNzI5NSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDAuMzQ1Nzc3LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgxMC41MjI1NzU2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgxOS40NTAxLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzMC40NDY4MzUzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzOC45Mjg1NDYyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg1MS43MzM3NjIzLCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg2NS4wMDc5OTgyLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg3NC4zMzY2MjM3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg4Ni4zOTQwMTEsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODk2LjA3OTI4NDcsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTA3LjA3NzcxOSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTguNjMwMzQ2LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkyOC4xMTUzMTUsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTQxLjYyODQzODIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTU1LjI5MzMyNDIsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTY0LjcwMzE0MDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTc2Ljk3Nzk3MjcsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTg5LjMxMTY2MTcsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDAwLjI1NTA3NjQsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDEzLjUxNjc4ODcsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDI2LjEyOTYwNTMsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTk4My45NjU5MDMsICJzdGVwIjogMCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODUuMjk5NDk4NiwgInN0ZXAiOiAxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni4zMTQ3MTksICJzdGVwIjogMiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODcuMjk2OTA4MSwgInN0ZXAiOiAzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4OC4zNTgzMzM2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg5LjUzMzExNjgsICJzdGVwIjogNSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTAuNzYzMDczNCwgInN0ZXAiOiA2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Mi4xMjE2NzQsICJzdGVwIjogNywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTMuNTU5MzA5MiwgInN0ZXAiOiA4LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NS4wNjkwMjE3LCAic3RlcCI6IDksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk3LjMxMzYwOTEsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk5LjkzMjExMzQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAyLjY1NjM1ODIsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA0LjgyOTE5MzgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA2LjgyNTQwNzUsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA4Ljg2OTgxOSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTEuMDUxNTkyNiwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTMuMzQ2MDI2LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAxNy4wMTAyMzMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIwLjc4NzE4MjMsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIzLjU0MTMzMzQsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI2LjE3OTgwMjQsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI4LjkyODkxNCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzIuMDE0MDkwNSwgInN0ZXAiOiAyMywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzcuMDA2NywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDIuMTA3NTA0OCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDYuNjY1NzY4NiwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDkuOTE2NDY3NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNTMuMjM3NzEyLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1Ny42NzA3OTkzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Mi43NDQ1MDk3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Ni40ODA4OTMxLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA3MC4xMjY1MTU5LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA3NC43MDAxODg5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4MC4yODQzMjc1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4NC4xNDIwMzMzLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4OC4xNTU3MjEyLCAic3RlcCI6IDM2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5My42ODI2MjIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDk5LjE1OTE3ODUsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAzLjQ1MzQ0ODUsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTA4LjAzMjc2NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTUuMjU0ODA5NiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMTkuODQ3NjE5LCAic3RlcCI6IDQyLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyNC41Mjk2OTg2LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzMS41NTEyODgxLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNi45NjQ3OTQ2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0MS45MDAyMzM1LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0OS4wNDM2NzEsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMTExMTExMTExOTM4OTUzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU0LjcyNzYwMjcsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMTExMTExMTExOTM4OTUzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTYwLjA3NTg3MjcsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTY4LjY0MzQ1OSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzYuNTU5NjI3OCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODMuMDA2MjkzLCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5MC4yNzc3OTEzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5NS45Mjk4MzIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjAzLjcwMzk3NjksICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjEwLjM4Mjg5NDMsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjE2LjQwMTEyNzYsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjI1LjA5OTExMSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMzEuMTE1ODg4NCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMzkuMDkwNzQxMiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNDYuMTY3Mjg5MywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTMuMzY5NTkyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI2MS45ODIyNzIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjY4LjUxODAwOTcsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjc4LjAwODc1NDUsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjg0Ljc5MTcwMjMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjk0LjQ2NzAyOSwgInN0ZXAiOiA2NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMDEuNjUyNjczNSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMTAuNzY3ODU2MSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMTguNjQ4NjkxNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMjcuNzMwMDkxMywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMzYuMjIzMTM4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0NS41NjU1NjI1LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1NC4yODc1NzksICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzYzLjg0OTk3OTYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzcyLjU1MzIxOTgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzgyLjQ1NjQ3NDgsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzkzLjU3ODI4MzgsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDA0LjgxNTc1NDIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDEzLjMzODY5ODEsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDI3LjE5NjA3OTMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDM4LjU2NzkyOTUsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDQ3LjI2NDYwNywgInN0ZXAiOiA4MywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NTguNTQzMjAxLCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ2Ny4wODE0MzczLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ3OC43OTk0NTI4LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ4OC44Mjk1MDYyLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ5OS4wMjA0MDEyLCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUxMC40NDE3OTc3LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUxOS40OTM0Njg4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUzMS40MTg3ODU2LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU0MS45MDk5NTQsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTUyLjYxMTE1MzQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTY0LjcwNTk3MjQsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTc0LjkwMzg5NzUsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTg2LjczNDU3MzgsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTk5LjE1MDA2MzgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjA4LjkyMTg3NzYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjIxLjg0MzM5OTUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjk3Ni40MDQ2OTI2LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjQyNzk4OTUsICJzdGVwIjogMSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzguMzYwNDI3NCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OS40MDM0NjU1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgwLjUxMTI2NCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4MS42OTk2MTM4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjk2OTg1MjIsICJzdGVwIjogNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODQuNjYyMTE3NywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4Ny4wNjI2MDg3LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTg5LjU0OTk0LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkxLjk2NjYzNDgsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkzLjY5MzY4LCAic3RlcCI6IDExLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5NS42MTA4NzMsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk3LjU2MDI0ODQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk5LjY1MDA1OTcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDAxLjg4NTY3OTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDA1LjQyODE0ODcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDA4Ljk5NTM1OTIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDExLjcxMjczNzMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE0LjI3NTYwNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTYuODY2NTI3OCwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTkuNjYzMDE1NiwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjMuODQ2NDQ3NywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjcuOTIxNDk1NCwgInN0ZXAiOiAyMywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzAuODE5MjkzLCAic3RlcCI6IDI0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMy44MzY4MDczLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzNi44NjgzNjE3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0MS40ODI0Njg4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0Ni4wNDUxMzkzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0OS40MTIzODE2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1Mi44NjI3NTIyLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1Ny4xOTk1OTc4LCAic3RlcCI6IDMxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2Mi43OTQxMzcyLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2Ni43MTY1MDcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDcwLjQ5MDA5NDIsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDc1LjIzODEzOTYsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDgxLjE0NzE5NzUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg1LjIzMDQ1MDIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg5LjQyMDE3OTEsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDk1LjMyNDMzMywgInN0ZXAiOiAzOSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxMDEuNjg0MDUxOCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxMDguMTI2OTQ3LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExNS4xNTAzNTQxLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyMC4xMzAzNjEzLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyNC43NDU5NjgzLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzMS4zMzY5ODg0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzNy4xMjMxOTIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQyLjA2MjY2MTYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQ4Ljg4NzY4NCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNTUuMDgzNzAwNCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNjAuMjkxMDU3MywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNjguMDMxMzQwOCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzMuODUwMjA0MiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzkuNTIzNzEyMiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODkuMzIzODY1MiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxOTYuNzI3MDg3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwNC4wMDEyMDY5LCAic3RlcCI6IDU2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIxMS4zNzk4MzgyLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIxNy4zOTE0NDA0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIyNi4yNTE2MDEyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIzMi4zODM1MTgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQwLjI0MjE3NDEsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQ3Ljk0NDY5NTcsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjU0Ljc3NzI0NjIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjYzLjc5MDY3ODUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjcwLjQ0MzMzNiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNzkuODg2NTYzOCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyODYuNzEzODMxNywgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyOTYuMjQzMDkwOSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMDMuNTE0Mzk1LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMxMi40OTUyOTc0LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyMC40MDA4MjUsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzI5LjQ5ODU4MzgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzM4LjExMDMyOSwgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDcuNTQ4NTQwNiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTYuMDA0NTk2NSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjUuNzYyNzExNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzQuMTE4OTM4NCwgInN0ZXAiOiA3NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzODQuNTg3MzUyLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM5Mi45ODg0NjIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDAzLjYzMDE0OTQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDExLjgzMTA1NTIsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDIyLjkwOTMyMiwgInN0ZXAiOiA4MiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MzEuMzIwODAxNywgInN0ZXAiOiA4MywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NDUuMjAzNjIzOCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NTYuMzQ2NjkxLCAic3RlcCI6IDg1LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2OC4zNzIwMTEsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDc4LjI4MTAxMjgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDg4LjQ5OTAzMDQsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDk5LjcyODM0OTcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTA4Ljk0NjQwOSwgInN0ZXAiOiA5MCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MjAuODY2OTQ4MSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MzAuNzg5NDAzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU0Mi4xODExNzIxLCAic3RlcCI6IDkzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU1NC4wOTA1NDUyLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU2My42MjgxMjc4LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU3NS45NDg0ODI4LCAic3RlcCI6IDk2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU4Ny43OTk1ODM3LCAic3RlcCI6IDk3LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU5OC4wMjUxNzQ2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzYxMC41OTIxNjQsICJzdGVwIjogOTksICJ2YWx1ZSI6IDEuMH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1Mzg2LjgxMzA1NTMsICJzdGVwIjogMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODcuNzgzOTA4LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjczOTU3ODcsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODkuNzc3NzMzMywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MC45MTcxNDg2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkyLjEyNjMyMDgsICJzdGVwIjogNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTMuNjA1ODA5MiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5NS44NTMxNDE4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk4LjIwNTc5NzcsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDAuNTU3NTExMywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwMi43NTMyMjUzLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNC41MzYyODY0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNi4zODA5NDYsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA5LjA1MTc3NDUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDExLjEzNjY2MzIsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE0LjA2NTc0MzIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE3LjQ5OTI5MSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjAuNTY2MDg0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyMi45NjQ1OTEsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI1LjUwMDU5NzcsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI4LjEzODYwNjMsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDMxLjMwMDc2OTYsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDM1Ljc1MTg5MjMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQxLjEyNTg5NDUsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ1LjcyNDE5NTIsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ4Ljc1MDk4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1Mi40MTAzMzIsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDU3LjU3Mjk2OSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjEuMzkwMDQsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDY0Ljg0OTI2MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjguMzgwMDk4NiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzMuNzE1MTYxMywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzguNjA3MTU3NywgInN0ZXAiOiAzMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODIuNDMyMTMzMiwgInN0ZXAiOiAzMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODYuMzI3OTQ1NSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0OTIuNjQ1NzcxNywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0OTcuNzg0NDI3NCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDIuMDE2NTMxNSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDcuMDgzMzQ2NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MTMuODE4MjcsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTE4LjM2MzQ0ODksICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTIyLjk4NTMwOSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MjkuOTczMDU1LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUzNS4zOTc0MTk3LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU0MC40MzUzMjc1LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU0OS42MDk0MTkzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1Ni41MjI1OTEsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTYxLjYzODA3OSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjguMTk0NTgwNiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NzUuMTQwNzk1MiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODAuNzk3NDU3NywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODguNjgyNTc4OCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1OTQuOTAwNDA3NiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDAuNTg0NDg3NywgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDkuMjk3MzUzMywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MTUuMDkzNzM2LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyMi42MTc3MjM3LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzMC4zODAyODA1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzNi42MjA0NzIsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjQ1LjcyNDc3MDgsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjUyLjExMTczMTgsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjYwLjY3NjI4MTcsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjY4LjA4Mjc5NDIsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Njc2LjIyMzczLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4NS43MDQwMDA1LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5Ni44MDExNDc3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwNC41ODI4NjMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzEzLjM5NjA2MzYsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzIxLjU2MTMyOTgsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzMwLjAwMzg2ODYsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzM5LjA3NjU2MTUsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQ3LjQ5NTQ2OTgsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzU3LjE3MjY4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc2Ni4zMzU4ODM0LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3NS43NjM0MDQ2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc4NS40Njg1OTMsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzk0LjYzMDIyMTEsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODA1LjE2NDI5NTIsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODEzLjgwNDcxMSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MjQuODYwMjc1MywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MzMuMDI3MTA1MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NDQuNDQwMzA4NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NTMuMTc4NzUwOCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NjQuOTMwNjU5OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NzUuNzc1NjI4MywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODguMjk5NDI2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkwMC44MTU3ODkyLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkxMS4wOTI1NjY1LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkyMS42NzE1MTUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTM0LjcyOTY4OSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NDYuNDU0ODYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTU4Ljc3OTEwNzYsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTcwLjE4ODU3NTcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTgwLjIyOTc0ODIsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTkyLjYxODY2MSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMDMuMzU3MzQ5MiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMTQuNjMxODk0OCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMjYuODQ4NzI1MywgInN0ZXAiOiA5NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMzguMzU5MDM1NSwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNTAuMjI1NjcyMiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xNDc0NzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwNjQyMy4yODE5NzU1LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI0LjMyNzQxODYsICJzdGVwIjogMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjUuNjg4Nzk2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI3LjE3ODc4NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyOC44NDgxMzE0LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMxLjI0NTE3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMzLjYyMTAwMTUsICJzdGVwIjogNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzUuODgwNDAzLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM4LjA2NjkxMDUsICJzdGVwIjogOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzkuOTYxNzI5MywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0MS42MTMzMzA4LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0My4zNTI0NjcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ1LjIxMzAwNzcsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ3LjE0NzUyMzIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ5LjIzMjU2OTUsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUyLjU2NDU1MTYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU1LjkxODA5MjcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU4LjU2NzEzMzcsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYwLjk3MzIzMzUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYzLjQzNzUwNTUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY2LjExNzQwMTEsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY5Ljg5MjExNDIsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc0LjMwMjM4OSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzcuMjY5NTgxOCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODAuNDYyNTIzMiwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODMuNDk4MjY0NiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODcuOTgyMzQ5NiwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTMuMDIwNzA5LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5Ni42NjM3NzksICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAwLjE4ODAxNDUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTA0Ljc3MTkxMDIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEwLjYxNzI4OTUsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE0LjM3MTc4MDQsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE4LjI5MzAwMDIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTIzLjgwMDg1NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MjkuNjAzNzc5LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUzMy45NTEwMzUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM4LjE1ODY4ODgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ0LjY3MzE1NTMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTQ5LjIxMTg4NTUsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTUzLjUyNzM4OTMsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTU5LjQ2MDEwNiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjcuNzg3NzI3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3My40MTIxNjYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTc4LjU3MDc4MTUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTg1LjkyNjM3MjMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTkwLjg4MjI1OTQsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTk2LjIwMTkxMDMsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjAzLjY3MzQwNDUsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjA5LjA2MTI3MTIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjE0Ljk5NTI0MzgsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIyLjUxNDMwNSwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MjguMDAzMTUzLCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzNS42ODAyOTcxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0Mi42NDM5MTA2LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0OC42NzkzODIzLCAic3RlcCI6IDU1LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1Ny43MTUxMDkzLCAic3RlcCI6IDU2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2My45MDkxMzE1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3Mi4xNjIyMTYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjgyLjIxNDQ4NCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODkuNTQ1NDc3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY5Ny44NDEyNDIzLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwNC4xNjg1ODg0LCAic3RlcCI6IDYyLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcxMy40NDY2MDgzLCAic3RlcCI6IDYzLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcxOS45NzIyMTEsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzI5LjA0MTUwNjgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzM2LjE4NTMyMTgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzQ0LjgxNjMyMzgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzUzLjAyMzU2MjIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzYxLjQwMzIyNDUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzcwLjA4MDA0NDMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzc4LjMyOTI2MTgsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzg3Ljk1NzAxMywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3OTYuMDEyNDk0NiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDUuNTgyMjU0NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MTQuMDE1NjM5NSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MjMuNjg4Njc5MiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzIuNzk5ODg0MywgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NDIuMjI5ODY3NSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTEuODU2Mjg1MywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjAuOTgxMDU4MSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NzEuNDA5NDc2OCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4ODAuMTAzNTc5OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4OTEuMTU1NjM2OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MDAuNzUyMDcxMSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MTQuMjUyMTgxLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkyMy4yMDUzMzc1LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkzNy4zMjAyOTU2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk0OC40MDkxMzYsICJzdGVwIjogODgsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTU3Ljk1MTQyNDgsICJzdGVwIjogODksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTY5Ljc1Nzg3MTIsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTc5LjYxOTUyNywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5OTAuNzg1OTk3OSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMDIuNzU4NzQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDEyLjM2OTgzOTcsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDI0LjQ3MzY3NzksICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDM1LjYwNzI4LCAic3RlcCI6IDk2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0Ni40NjE2MTQxLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA1OS4wNTcxNzA5LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA3MC4xMTA4MywgInN0ZXAiOiA5OSwgInZhbHVlIjogMS4wfV19fV0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_1/train/loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMS90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgyOS41OTEwMzE4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDEuMTQwMjYzOTE1MDYxOTUwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMwLjgxODQyMTgsICJzdGVwIjogMSwgInZhbHVlIjogMC42NjU3MDkwNzgzMTE5MjAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzIuMjAwMzc2MywgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjU4MDc4MDUwNjEzNDAzMzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMy43MDk1ODMzLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTE5NDc0MzI3NTY0MjM5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM1LjM4NDAzMjUsICJzdGVwIjogNCwgInZhbHVlIjogMC40MDg4Nzc5MDkxODM1MDIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzYuNjQwNzcyNiwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQwMjgwMjk0NDE4MzM0OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNy44OTQ5NjQ3LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDE1ODAxMTA3ODgzNDUzMzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzOS4yMDIxMzcyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNDI2Nzc0MTQ0MTcyNjY4NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0MC42MTkxOTIxLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMzExMTM0NTQ2OTk1MTYyOTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Mi4xMTk3MzUsICJzdGVwIjogOSwgInZhbHVlIjogMC4zOTE4Njc2Mzc2MzQyNzczNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQzLjczNTQzNDgsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMjkyNzAwNDk5Mjk2MTg4MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NS40NjU3MDU2LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI2NTc4MDQ3ODcxNTg5NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0OC4xNjY0Mjc5LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM5NjEyNDk4ODc5NDMyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1MS4xMTkyMjA3LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjI4NDc3MjE4NzQ3MTM4OTc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTQuMDA1MzQ0NiwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zMjU2MTk3ODY5Nzc3Njc5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU2LjA2MTM1NjMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjc3MDcwMDc1MjczNTEzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU4LjM3Njk4OCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zODQyODE2MDU0ODIxMDE0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYwLjYyNjA1MDcsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzk5NjM0NzE4ODk0OTU4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODYyLjk2MzI3NjYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMjY3MDkzMjExNDEyNDI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY2LjM0NDYzMzYsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMjUxNjk4MzE1MTQzNTg1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcwLjE1NzkxMzcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjY1MTk5ODk5NjczNDYxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODczLjE1ODE2MzMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMjI4NTM5MDQ5NjI1Mzk2NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3NS44OTE4OTEyLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI1MjQ2NjgyNzYzMDk5Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3OC43Njk5MDIyLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjMxMDk0NTEyMzQzNDA2Njh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg4MS43NTQ3ODk2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjI2Mjg1NjAzNjQyNDYzNjg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODYuMzk5ODcyOCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yMTI4MDcwNTkyODgwMjQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTAuMzc4OTAxLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIxNzI1NDY2ODQ3NDE5NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg5My41MTQ2ODIzLCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjMyNzgyMjU5NTgzNDczMjA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTYuNzU3ODE4NywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4xOTMzMjA5MTUxMDI5NTg2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTAwLjU3MzY2NiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC40MzAyNDM0MDI3MTk0OTc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDYuNDgyODc1NiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMzU3OTkwMzg0MTAxODY3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTEyLjU1MzUzMiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zMzU3MTA1MjU1MTI2OTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTYuNzQyMzIyLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjE5MjY1NTA3MTYxNjE3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkyMC43MjAyNjkyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjIxNTkxOTcxODE0NjMyNDE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjYuNDY2NzY3NSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4xNjQzMTc0MjkwNjU3MDQzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTMwLjY0MjQzNjMsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMTQxNzUxNDk3OTgzOTMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM0LjY1NDUxNywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xNDg2Mzc2NjcyOTgzMTY5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM5LjI3ODIzMTQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNDUwODQ0NDM2ODgzOTI2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQ1LjUyNzY0MzQsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMTY5MTQ5OTc5OTQ4OTk3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQ5LjczMDI4NTIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTY2MzI5ODYwNjg3MjU1ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk1My45OTI1NDI1LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjE4MDgxMjk1NDkwMjY0ODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjAuMTE4NTE5NSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4xOTU5OTYyMDk5NzkwNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjcuMDc3NTEzMiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4xNDE0NzAzODc1NzgwMTA1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTcyLjk4OTEwMjYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMTk3NTIxMzI4OTI2MDg2NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3OS45ODYxMzIxLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjEzMzMyNzYwMzM0MDE0ODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5ODUuMDQwNDQ3LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjIwMjU1ODIxOTQzMjgzMDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4OS44MzY4Mzk3LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjE3MTM2OTE1MDI4MDk1MjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTYuODgxMzc4NCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4xNzQ5NjA0NDkzMzc5NTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDIuNTYyNTU1OCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4xNDQyNjY0MjY1NjMyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDA3Ljc1OTMwOSwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4xNDU5NTg0NjgzMTc5ODU1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE1LjI2NjE3LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjE1OTcyMDUyNTE0NTUzMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAyMC44NjUzODU1LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE3ODQwNzQ2MDQ1MTEyNjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAyNi4yNTM3ODE2LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjE0NjAyMTk2MjE2NTgzMjUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzQuNTI3NTU1NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4xNzI0MTMzMDQ0NDgxMjc3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQwLjA4MjQxMjcsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMTgwMzc0OTc5OTcyODM5MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA0Ni43ODc2MjY3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjIzNzE1NTQyMjU2ODMyMTIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNTQuNDYxMzA1OSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yNDc3MzkxNjYwMjEzNDcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDYwLjMwNDE5MDIsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMTcyMjQxNDQ5MzU2MDc5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDY4LjU1NTU1ODIsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTQ4NzU1NDYwOTc3NTU0MzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3NC45NDY2OTQ0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI1MDU4MTU2MjUxOTA3MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4MS45NzYxMDA3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjQzMzU0MTA1OTQ5NDAxODU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwOTAuMDM0NjYzNCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4xNjI3NTA3MDYwNzY2MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5Ni41NTQ2MzY1LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjExMzg1OTg0NzE4Nzk5NTkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDUuNjE2NDI4OSwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yMzgxNjcyMTE0MTMzODM0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTExLjk5Njg4MzIsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTI3MDE0MzA5MTY3ODYxOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyMC42MTQzMjgsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMTY5NTg0MTU1MDgyNzAyNjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyNy45Mzc3NDUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMTUxNzY1NjU5NDUxNDg0Njh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEzNi4xNTU3MzYsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTEzNzQzNTIxMjczMTM2MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE0NC40Njc4Nzc0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjI3NjM3MDAxODcyMDYyNjgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExNTIuMjA5NzE5LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjIwNzA1ODg3Njc1Mjg1MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE2My43NTkzODUzLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjEzNzMzMzI3Mzg4NzYzNDI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExNzMuMDU2NDE0NCwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xNDcyNzc1MzQwMDgwMjYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTgxLjgyNjkwNDgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMTI1NjgyODYwNjEyODY5MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE5MS4yODAyNzYsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTE4NzM5MDYxMDU3NTY3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk5Ljk0MTc2NzIsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMDkwMjEzOTA5NzQ1MjE2Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIwOS44MDE5MTMzLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjE2Mjg1OTkxNjY4NzAxMTcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMTguNDI2NTQxLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjEzNjk4MTUwMjE3NTMzMTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMjguNDA3MzY0LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjE2MjgyMjQ3MDA2ODkzMTU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMzYuNzAwODI3MSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4xNjM2NTE5MjgzMDU2MjU5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjQ3LjQyNTQ0NDgsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMjcxODg0OTc3ODE3NTM1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjU1LjQ4Mjc4OSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNTgyMjUyMzgzMjMyMTE2N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjY2LjI5NzgwMDUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTI1MjQ3MTUwNjU5NTYxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI3NC41MjYwOTU5LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjExODkyNzA2OTAwODM1MDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODUuNjkxNjIwMywgInN0ZXAiOiA4MywgInZhbHVlIjogMC4xMTM5MTY5OTMxNDExNzQzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjk0Ljc1NDY0MTgsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMTE5MTc4MTUzNTc0NDY2N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzA1LjMzNjAyMTcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMTAxNDUzNjk5MTcxNTQzMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMxNS43MzQ4NjE2LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjE4Nzg1NTYwMTMxMDcyOTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMjguNTk3NzU1LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE3Njc3MDA3NjE1NTY2MjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNDAuMDM3NzQ4MywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yMjgxOTMwMjk3NjEzMTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNTEuMjYyODk5NCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4zMjUxODgzMzg3NTY1NjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNjEuMzkxMTAzMywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC40NzY3NzMyOTE4MjYyNDgxN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzczLjgzMTY5MzQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMTUxNjAwNjczNzk0NzQ2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzg0LjM2Mzk2MjIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNDY2MTIxNTI0NTcyMzcyNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM5NS43OTQ3NDM1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjEzNjIwMzAwNTkwOTkxOTc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MDguNzE1NDIxLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjIzNjk5OTI1ODM5OTAwOTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQyNC42OTQ5OTczLCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE4NzczMzkzMzMyOTU4MjIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MzUuMTY2ODcxOCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4xNTMwNDk5NDU4MzEyOTg4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDQ3Ljg2NTcyNjcsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMjI3MDE3NjU1OTY4NjY2MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ2MC45MTE3NDUzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjE2NjA3Mjk0OTc2NzExMjczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NzIuMjQ4MzYyMywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xNTI1NDI4NDQ0MTQ3MTF9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzc5MTQzX0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDQzODQuOTIyNzUxMiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjc5Njc5MDU5OTgyMjk5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg1LjcwNTQ1NTUsICJzdGVwIjogMSwgInZhbHVlIjogMC41ODkzNzU2MTUxMTk5MzQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODYuNTYyNTAyNCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjQ4NDExNzY4Njc0ODUwNDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODcuNTE5MzAyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuODI3NjA1NjY0NzMwMDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODguNTQzMzM4MywgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjU5Mzg1MDk3MDI2ODI0OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS44Njk2ODc4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDY5MTc2ODg4NDY1ODgxMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MS43NjI1OTAyLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNTgxMTkzOTgzNTU0ODQwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MzkzLjgxNjY5MSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQwOTM3MjMyOTcxMTkxNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTUuOTQzNTQzLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMjkxNTg0OTM4NzY0NTcyMTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Ny43NzI4NTQzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDYxNjIwMDYyNTg5NjQ1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk5LjMwODAyNDIsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjM1MDY4NDE2NTk1NDU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDAuOTc5MTg0OSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC40MzkzMDY2NzYzODc3ODY4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAyLjc5NDUxNzMsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjUzNTg0NDQ0NTIyODU3Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQwNC42MzczNjIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTUzNzcwNDgyNTQwMTMwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA2LjU1ODc3NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zNjM1NzAwNjQzMDYyNTkxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA5LjQ2OTg5NjYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzQyNDYzNjQyMzU4Nzc5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDEyLjgzOTA2MywgInN0ZXAiOiAxNiwgInZhbHVlIjogMC41MDkwODA5NDY0NDU0NjUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTUuODE1OTEsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzQ4NjMwODE1NzQ0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE4LjEyMTg0MjQsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTAxNzE2NDk0NTYwMjQxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIwLjU0MTc2NDMsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODEwNDc4ODY2MTAwMzExM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIyLjk5NjQ1MSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4zMDU2Mzg4NDk3MzUyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI1LjgyMDg1NTYsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMjk2OTg4Mzk3ODM2Njg1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDI5Ljk3NTg5MywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zODgyMzEzMzcwNzA0NjUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzMuNjkwNjg1MywgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zODk4Nzc1ODc1NTY4Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQzNi43MjQ2NjY2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU0NDg4NzAwNjI4MjgwNjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0MC4yMDgzMzkyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjM1MDY5MDQyNDQ0MjI5MTI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDUuMDc3NzUxLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIwMTc1MTg3Mjg5NzE0ODEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTAuNzMyNjM2NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zODE5NDkwOTY5MTgxMDYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTQuOTQ1NzYwNywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC41NDIyMzEyNjE3MzAxOTQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTguNDY5NjE0NSwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yMzY0OTU4OTcxNzM4ODE1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDYxLjk0NjAwMjIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDU2NDgwNzQxNTAwODU0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY2LjU5NzYxNDUsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTk1NjE1ODg3NjQxOTA2NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3MS43MTM2OTAzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjUyMjAwNDU0NDczNDk1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3NS40MzcyMjQsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMjMxMjU2NjE5MDk1ODAyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc5LjI0NTIzNDMsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuMzYyODU3NjM5Nzg5NTgxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg0LjA4ODg3NDMsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNDcwOTUxNTg2OTYxNzQ2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg5LjU0NjMxMTQsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzQ1OTQzODY4MTYwMjQ3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDkzLjUxNDQzNTgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNjIzNzMxMzE1MTM1OTU1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk3LjU4NzMwNjUsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNDE4ODUwMjEzMjg5MjYwODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwNC4wODY5NjU4LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI3ODM5NjA0MDIwMTE4NzEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MTEuNjE1ODc0LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjI0NTg1NTc3ODQ1NTczNDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MTYuNjY1OTgsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMTE2MjY1NzczNzczMTkzMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUyMS41MjQ3NzEyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI2NzE1MTQ3NDk1MjY5Nzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MjguMzQzNjk0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjIyOTAwMDQ0OTE4MDYwMzAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzMuMDQ4MTE2LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjI2ODQyMzU4NzA4MzgxNjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzcuNzkwNDU4NywgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMjkyMzc5NTg3ODg4NzE3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ1LjMxNzI5NzUsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNTMxMjU5NjU1OTUyNDUzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTUwLjUzNzQyNjIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNDUyOTUzOTM0NjY5NDk0NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1NS41NjY0MjUzLCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjI2NzI5ODkzNjg0Mzg3MjA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjMuNTE4MjY4MywgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4zMTIzNDk1NTc4NzY1ODY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NjguNjkyODIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMzg1MTkzNzM1MzYxMDk5MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU3NC4yOTc3MDMzLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjg0ODI2Nzg1MzI2MDA0MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU4Mi4wNDA0MzksICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMjg0NjcwNDEyNTQwNDM1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTg3LjQ5NDY1MDgsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjY5NDk3NjYyNzgyNjY5MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5NC4zMTExNDUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNDk5NTMxNjg2MzA1OTk5NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYwMS41NzI0MjgyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjIyNTgyNzYwNDUzMjI0MTgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDcuMzYxMDU0NCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yMjI3NDEzODAzMzM5MDA0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjE1LjU1NzYyLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjE5OTg3ODcyMjQyOTI3NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYyMS44ODM2MTg2LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjM3NzkwODczNjQ2NzM2MTQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MjguNTkwMDcxLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI0ODU2MTc2OTcyMzg5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDYzNi44MDE1MjYsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMTk0MzM2NDE0MzM3MTU4Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjQzLjIxNjgxMDcsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMTMxMDYzMzQyMDk0NDIxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjUyLjMxNTkzOTQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMTE1NjQxMzQwNjEzMzY1MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY1OC42NjE5ODczLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjMzMDI5MDUyNjE1MTY1NzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY2Ni44OTk3NTQsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNTIxODM4ODQzODIyNDc5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Njc0LjQ5NjQ5MjksICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjY1NDEwODQwNTExMzIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2ODEuOTg3NTMwNywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC40NjU3NDA4ODkzMTA4MzY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2OTEuOTU1MjA2NiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yODk2NTA5NDY4NTU1NDUwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzAyLjE3OTQ2NjcsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuMjM5MjY0MTQ1NDkzNTA3Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxMC4yNTkzMTU3LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjI0MDIyNTg4MTMzODExOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxOC4yODA3OTM3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjMxMjI0NTI3OTU1MDU1MjM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MjcuMTM5NDUwNiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yNTU3NjczNzUyMzA3ODkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MzUuMzQyMzY4NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4zOTc3NzI1NTA1ODI4ODU3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzQ0LjY2MTM4NzcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMzQzNTU1Nzc4MjY0OTk5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzUyLjY5Mzc5MjMsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMzc0NjgzODU2OTY0MTExMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDc2Mi4zOTU5MDk4LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjQ5MDA5ODA4ODk3OTcyMTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NzEuMDE4MjE5MiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4zNTIxMTA0MTU2OTcwOTc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3ODAuODEyMzAxOSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4xMTUzMDAxOTM0Mjg5OTMyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzg5LjYwNzU5NSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yOTgzNTQ2NTU1MDQyMjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3OTkuMjI4OTkzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjIyOTc0NjM0MTcwNTMyMjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDguODM2NTEyMywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4yOTg4OTUwNjEwMTYwODI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODE4LjMzMDE3NTIsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMjE3NDc1NzI3MjAwNTA4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyOC44ODM4MjA1LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjIyMTYyODUzMTgxMzYyMTUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MzcuNzkxMDgzLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjI3Njk2OTk2OTI3MjYxMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg0OS42NjY1NzI2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjEwOTk1MTE5MDY1MDQ2MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg2Mi45ODEyMjI2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjI5MzMzMzM1MTYxMjA5MTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4NzMuMTAxOTY3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjIzNTYzMDU1Njk0MTAzMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg4NS4xODY3NjYxLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE0OTM0OTI0MjQ0ODgwNjc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4OTQuMDg3NDMxMiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4xNDM1MDU0OTg3NjY4OTkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MDUuODI5ODg0LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjE3ODU2OTI4NzA2MTY5MTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTYuNzI1Nzg2LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjQ4Mjk5OTM4NDQwMzIyODc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MjYuOTA4MTM4LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjM4MjA4NjgxMzQ0OTg1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkzOS41NDIxMTA0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjEyNDg1NDc4ODE4NDE2NTk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NTMuMzUyODAxOCwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xNDYzNjcxNjI0NjYwNDkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NjMuNDA4Nzg3MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xNjAxMDg4NzkyMDg1NjQ3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTc1LjcwMDk4MTEsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTQwODMzMTM5NDE5NTU1NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk4Ny4xNjU0ODk3LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjMxMTQyNjY2OTM1OTIwNzE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5OTguNjI1MDEzNiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC40MDQxNDMzMzM0MzUwNTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUwMTIuMTM0NTAzOCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC43MDQzNTI4NTU2ODIzNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAyNC4wMjMxNjc4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjIzMzM4Mzk1MzU3MTMxOTU4fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF80MTUzM19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjAxOTgzLjg2OTI2NzcsICJzdGVwIjogMCwgInZhbHVlIjogMC42MTk4MjY2MTQ4NTY3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg1LjE2NjczMzUsICJzdGVwIjogMSwgInZhbHVlIjogMC40Nzk4MjIzMzc2Mjc0MTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODYuMjMxMzc0MywgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjYwOTQzMTU2NDgwNzg5MTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ny4xOTgwODAzLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDQ3MjUyNzIwNTk0NDA2MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4OC4yMjkyMjkyLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTUyNjkzNjA1NDIyOTczNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg5LjQwNDMwNywgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjU3MzIwMzc0MjUwNDExOTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5MC42Mjk4MzYzLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDEuMTYzNjg5MjU1NzE0NDE2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkxLjk3NDQyNTYsICJzdGVwIjogNywgInZhbHVlIjogMC4zMjEyMDMwNTI5OTc1ODkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTMuMzkwMzk1NiwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQ2MjgwNzU5NTcyOTgyNzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NC44Nzc2NjUsICJzdGVwIjogOSwgInZhbHVlIjogMC4zMjE5OTI0MjcxMTA2NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Ni45OTM4NzY1LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjU2MDIwODY3ODI0NTU0NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5OS42MjEzOTQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMjI4NDQ4MDkyOTM3NDY5NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwMi4zMjQxNTMsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNDMxMjUxMzc2ODY3Mjk0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA0LjU4ODYzNTcsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNDI1NjY2MzAyNDQyNTUwNjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNi41OTE1ODczLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjgzMzI5NTY0MzMyOTYyMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwOC42MjE1OTg1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjM0OTkwOTg0MjAxNDMxMjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTAuNzgwNTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDExLjY2ODkxMjg4NzU3MzI0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDEzLjA0NTQ3MjYsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDU3MDI2MzAyODE0NDgzNjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAxNi41MjcwMiwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC44NTY1MDc1Mzk3NDkxNDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjAuMzIwNjI2MywgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4xNjA4MjE4Njk5NjkzNjc5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDIzLjIyNjQ1NzQsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjUxNTI2MTc2OTI5NDczOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI1Ljg0NDU4MTgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMzg4NjI1MDU1NTUxNTI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyOC41ODcyOTIsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuMTY2NzU3MTUxNDg0NDg5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMS40MTQ5NjQ3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjM4MjU4MDkzNTk1NTA0NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzNi4zMDU2ODIsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMjIwMjA3MDgwMjQ1MDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNDEuNDc3NTY1OCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4yMDMwNjYyMTQ5MTkwOTAyN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ2LjI3MTY3MjcsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDEuMjk2MTQ2ODY5NjU5NDIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQ5LjUwNTMzMDMsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNDMxNTU4NjY4NjEzNDMzODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1Mi44MTg4MDIsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNTI3NjM2OTQ1MjQ3NjUwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU2Ljk3MDM4NjUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTYwOTg5MzczOTIyMzQ4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Mi4zMDAyLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjIwMDM3NDUxMzg2NDUxNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Ni4wMjUxNTc3LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjY1NDg4NTIzMjQ0ODU3Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2OS42NDQwMzg0LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjE5NzY1NjE1NDYzMjU2ODM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzMuOTM3NzI0NiwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yODQ4NTY3NjY0NjIzMjYwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDc5Ljc2MDg3LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjY0MDc2NjI2MzAwODExNzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4My42MjM5ODA1LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjI2MTQ3MzE3ODg2MzUyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4Ny42MjE0NTI2LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjU5MTM5Nzk0MTExMjUxODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Mi43ODcyODYsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMzIzNjQ2ODczMjM1NzAyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDk4LjYxODc1MTMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMjY2MjcwOTY1MzM3NzUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAyLjg4NTM2MDUsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTg2MjU0Mzk3MDM0NjQ1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwNy4yMzM3Mzk5LCAic3RlcCI6IDQwLCAidmFsdWUiOiAxLjg3MjgwOTc2NzcyMzA4MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExNC4zMzY1OTAzLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjMzNTg3Nzk1NDk1OTg2OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExOS4yNDg0NTIsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMzQwNTc4MzE3NjQyMjExOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTIzLjkwOTEzOTQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMzM0NTQ1MTM1NDk4MDQ2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTMwLjUzNjQ5MjMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTk4OTE1MDc5MjM2MDMwNTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNi4zNDIwMTg2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiA1LjcwODI5NzI1MjY1NTAyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTQxLjI1MzE5LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjU2MDQ4NTU0MTgyMDUyNjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0OC4wMjg1ODg1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAzLjU2MDAzMzA4Mjk2MjAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU0LjAzNjQwMzcsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMjEwMjQ4MDM4MTcyNzIxODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE1OS4zOTkxMDIyLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjUyMzQ2NjU4NzA2NjY1MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE2Ny4zMTQ2NTgyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjQzNzM5NTYzMjI2Njk5ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE3NS44NDY2NTY4LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjIxNTg3MDkwMTk0MjI1MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE4MS44MjIyMzIsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDEuMDk2Mzc1MTA3NzY1MTk3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTg5LjUzODgxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI3MjMxMDU1NDk4MTIzMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE5NS4xODYzMzUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMzM0OTUxMDQzMTI4OTY3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjAyLjUxMTEyMjcsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMjQ5NzU5ODgyNjg4NTIyMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIwOS42MTQ4MDk1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjM2NDg5MzU1NTY0MTE3NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIxNS41MzQ0MDYyLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjk1NTUxMzUzNjkzMDA4NDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyNC4zMDQ4MjM0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI3NDE3Njc0NjYwNjgyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzMC4zMDk4MjAyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI3ODg2MzAxMjc5MDY3OTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMzcuODIzOTcxNSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC40MTQ1NzM5Mzc2NTQ0OTUyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjQ1LjMyODU5MjgsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDEuMDcwNjc1NDkyMjg2NjgyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjUxLjk2OTc4MTQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDEuNDM4MTYxNjExNTU3MDA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjYxLjEzMDIwMDQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDEuMjQzMTY4MTE1NjE1ODQ0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjY3LjYzOTMwNjgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTQzODI2NzUyOTAxMDc3Mjd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI3Ny4wOTM3NzYyLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjE2Mjg5OTgzNjg5Nzg1MDA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyODMuODc3NzM1OSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yMTExNjg4NTU0Mjg2OTU2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjkzLjAzNjI4NDIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODk1NzYwMTE4OTYxMzM0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzAwLjcwNjE0MzQsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuMjE3MzY4MTU1NzE3ODQ5NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMwOS4zMTE4MjEyLCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjc2OTM0MDgxMzE1OTk0MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMxNy42ODE1MzE0LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjM0NzQ3MDYxMTMzMzg0NzA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMjYuMTU1Nzg0NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yMjgxMzg3MTUwMjg3NjI4Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzM1LjIwNzMzMjQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMzEzMDQ4NzIwMzU5ODAyMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM0My45NTk2MTAyLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjM0NDU1MDM3MTE3MDA0Mzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNTMuMjA4Mjg0NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xODU0MDQxNjY1NzkyNDY1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzYyLjI4MzgwOSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4zMDUzOTE0NjA2NTcxMTk3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzcxLjUwMjgwMzYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMzEyODQ1ODI2MTQ4OTg2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzgwLjc0MzA4ODUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMDk4Njc5NTg3MjQ0OTg3NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM5MS45MTk1MDMyLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjI5NzQ5NzEyMzQ3OTg0MzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDMuNjkzNzA5NCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xNjUwNjM3Mzg4MjI5Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQxMS44MzMzNzUyLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjMzOTAwODAzMzI3NTYwNDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MjQuODgzNjEwNywgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMTk0NjUzNzQ5NDY1OTQyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDM2Ljc3NDE0ODcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMjQ1ODM3ODA3NjU1MzM0NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ0Ni4xNDIzMTMsICJzdGVwIjogODMsICJ2YWx1ZSI6IDUuNTA1MDkxNjY3MTc1MjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NTcuMzkyOTM5NiwgInN0ZXAiOiA4NCwgInZhbHVlIjogNS4xNjkxMjA3ODg1NzQyMTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ2NS45MTU0MzI1LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjIxMDg3NjU4NDA1MzAzOTU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NzcuNjA4NzkwOSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yODc4NzA5NDM1NDYyOTUxN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDg2LjkyMzU4MDIsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMzA4NDY0Mzc4MTE4NTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0OTcuODM0NjM4NCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMS4zOTc3OTg3NzY2MjY1ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUwOC41NzMzNzE2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjM1MTI0NTEwNTI2NjU3MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MTguMjc3NjkzMywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4yMDk0NDY5NTE3NDY5NDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzAuMjE4Njg3NSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4zMjk2MjMwMTM3MzQ4MTc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzkuOTI2NDYyNCwgInN0ZXAiOiA5MiwgInZhbHVlIjogMS4yMDk0MjA2ODA5OTk3NTU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1NTEuMzM3MDU0NSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4yMDk4MDM5Njg2Njc5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU2My4yNzY0OTI0LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjM2NTMxODQ0NzM1MTQ1NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU3My4xNDI3MTYsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMjIwMDA5MzcxNjM4Mjk4MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU4NS40Mzc1NDg5LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjIwMzczNjM3OTc0MjYyMjM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1OTcuMTI2NjA4NCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4xODY0NTkyMjgzOTY0MTU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MDcuNTc2MzY0NSwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC40OTAwMDcxMzIyOTE3OTM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MjAuNTEzNzMyLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjI3OTk1MTQ4MzAxMTI0NTd9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzU4MzA2X0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzYuMzQxMTUwNSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjU3MDU3NjAxMjEzNDU1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjM1MDQ1NjUsICJzdGVwIjogMSwgInZhbHVlIjogMC41NDI1OTYzNDAxNzk0NDM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5NzguMjY4NTc2MSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjM1MDk1MDIxMTI4NjU0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OS4yOTU5MzY4LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuMzAwNzIyNDUwMDE3OTI5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgwLjM5NDgwODMsICJzdGVwIjogNCwgInZhbHVlIjogMS4xNzE3ODI3MzIwMDk4ODc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODEuNTY5NzAyOSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM0NTE2NDUzNzQyOTgwOTU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODIuODI2ODYyOCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjI4NTU2MTYyMTE4OTExNzQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODQuNDA3NjkyNCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQ3MjEwMzU2NTkzMTMyMDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4Ni43NzQxMjYsICJzdGVwIjogOCwgInZhbHVlIjogMS4zNDk4MTQ2NTMzOTY2MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODkuMjczMDczNywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQ0MjY1NTU2MzM1NDQ5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5MS42ODk0MDA0LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjI1NTk4NDA2NzkxNjg3MDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5My40ODE4ODc2LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI4MzA3OTgzMjc5MjI4MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5NS4zOTA5NTk1LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjI4MTU2NTEyOTc1NjkyNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ny4zMTg3OTE0LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMwODg4MzM2ODk2ODk2MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OS4zNzEzNjM5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjYwMTE4NDY2NjE1Njc2ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwMS42MjE3MTk2LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjM3NjY1MTA0ODY2MDI3ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwNC45ODMyODA0LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjc3OTMxNzk3NTA0NDI1MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwOC41MzU3NTk0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjMzNzQwMjQwMzM1NDY0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAxMS4zOTM4NDU4LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjA3MzI2MTE5MzkzMTEwMjc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTMuOTMzNzg3NiwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC40Njc5NDY2Nzg0MDAwMzk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTYuNTUyMDgxMywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4xOTUxNzcwMDM3NDEyNjQzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE5LjMzNjI2MywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4xODIxNDM4NTIxMTQ2Nzc0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDIzLjMyMDMzLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjMzODQxMTY1OTAwMjMwNDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAyNy41NjY3MzY3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjQ2NjQ1MjAwMjUyNTMyOTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMC40NDcyOTY5LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU0NjMwMTMwNTI5NDAzNjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMy40NTcyODM1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjQyNzE0NDA1MDU5ODE0NDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzYuNDg4ODk2NCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zNzEwNjYzMzE4NjM0MDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDAuODA0NjI3NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4xMjY2MjU2NDIxODA0NDI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDUuNjE4MzEwNSwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4zODEzOTEyODY4NDk5NzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDguOTcyMTM3MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yMTIxMTkwNTc3NzQ1NDM3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUyLjQyMjM3NjQsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMzgwNTkxNTQxNTI4NzAxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDU2LjQ1NTM2MDQsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMDg3Mzg2MTIzODM2MDQwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDYyLjA1NDc1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjIyOTI5OTU3NTA5MDQwODMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNjYuMjM1NjYxNSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yMzkzODE0OTIxMzc5MDg5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDY5Ljk4NDI1NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC40NDI4MTg1ODIwNTc5NTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzQuMzc1MDcxNSwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC41ODQ4MDczMzYzMzA0MTM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODAuNTMyOTE0OSwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4zNTM3Mzk4ODc0NzU5Njc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODQuNjk4NzA3MywgInN0ZXAiOiAzNywgInZhbHVlIjogMC4yNDU3MTY3ODA0MjQxMTgwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg4Ljg1NDYwMiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4xNjgwMDA1Nzg4ODAzMTAwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDk0LjQzNzEyODgsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTA1NzEyMTYwNDY4MTAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTAwLjczODAwNywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4yNDk0OTEzNDg4NjI2NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEwNy40NzMwOTA2LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjMxODUwMzc2NzI1MTk2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExNC4yMzQyMjEyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjQxMjAyOTYyMzk4NTI5MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExOS41MTk1NjE1LCAic3RlcCI6IDQzLCAidmFsdWUiOiAxLjcwNDcxMTY3NTY0MzkyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI0LjEyMjUyNjIsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMjAzMjEwMTg5OTM4NTQ1MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzMC4zNTQwMDYsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNDMzMDgxODY1MzEwNjY4OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzNi40MzA2NDcsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjQxMjQ3ODYyNTc3NDM4MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0MS40MTIzODU3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjA3Nzc2NzAyMTk1NDA1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0Ny44NTA2NjY4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjExODc0MjEyMzI0NjE5MjkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNTQuNDA2OTIxLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjMxMDU4ODU2ODQ0OTAyMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1OS41ODMzNTg1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA4MzM1NjU4MTYyODMyMjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE2Ni45MDAyMTQ0LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE4MDAxNjM2ODYyNzU0ODIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzMuMTAyNTk2MywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC40MjM5NTk3OTE2NjAzMDg4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTc4LjY1MjI5ODUsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuNDI3MjY0NDgxNzgyOTEzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTg3Ljk4NTc2MjgsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNDM3OTE1OTgwODE1ODg3NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5NS43ODI2MjM1LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjQ5NjcyMzQxMzQ2NzQwNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwMi43MDk4NTcyLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjEyNDQzMjgxNzEwMTQ3ODU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMTAuNTg3Njc1MywgInN0ZXAiOiA1NywgInZhbHVlIjogMC4yMTUwNjg1NDg5MTc3NzAzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjE2LjU2MjQwNTYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTY5NjA4OTgwNDE3MjUxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI1LjE2NjM4NTIsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuMjM5OTc3OTcwNzE5MzM3NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIzMS41NjkwMTM2LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjEzNTg4MDA1MzA0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMzguODg0OTU1MiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4zMTQxODIzMTEyOTY0NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI0Ny4xMTY1NzY3LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjI1NTQ2MzI3MjMzMzE0NTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTMuNjEwOTk2MiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC40MzM3OTI5Nzg1MjUxNjE3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjYyLjg5NTQ1NjgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMzg2MjUyODUwMjk0MTEzMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI2OS41NTc4MzU2LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjIzMzI3NzAyMjgzODU5MjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNzguNzg2NDg3MywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xNjE2MjQ1OTU1MjI4ODA1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjg1Ljc5MDAwMDIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTkxMDcyNzMyMjEwMTU5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjk0LjgyNzczNDUsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuODE2OTg5NDIxODQ0NDgyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzAyLjUzODQ4NiwgInN0ZXAiOiA2OSwgInZhbHVlIjogMi42NDM1NzE4NTM2Mzc2OTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTEuMDQ2MTczMywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC45MjkxODAwMjYwNTQzODIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTkuNDM1ODgyNiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xNDUzMTc4NjczOTgyNjIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzI3Ljk1NzI1NzMsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuNjE4NTIxMjEzNTMxNDk0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzM3LjExNTY5MDcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjAyMTk2MjU1MzI2MjcxMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM0Ni4wMDY1NzA4LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3NjYyOTM4ODMzMjM2Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM1NC45NzIxNDgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMDUwMzIwMzAxMjA0OTE5ODE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjQuMTI0MTUwOCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNjQzMzg5MDE2Mzg5ODQ2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzczLjA2MDY1MTMsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjM4MDUxNjIzMTA2MDAyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzgyLjk2MTYxMTMsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMTM4Nzg1MTk4MzMwODc5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzkxLjg3NTk4OTcsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMjM1MzQyNTc3MDk5ODAwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDAyLjEyMjAyOTUsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMDUzODI0NDM1OTE5NTIzMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQxMC42OTA5NjQ1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAxLjM1MjI3ODExMzM2NTE3MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQyMS43ODc4MzcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMTA3NDYxMzg1NDI4OTA1NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQzMC4xNTQ3NjQ3LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjUwMjU4MzgwMTc0NjM2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ0My40ODE1NzMzLCAic3RlcCI6IDg0LCAidmFsdWUiOiAxLjAwMjgwODQ1MTY1MjUyNjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ1NC40MTQ0NDMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMzE1Nzc5ODM0OTg1NzMzMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2Ny4xODA1NjQyLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjQxOTY1OTUyNTE1NjAyMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ3Ni4zODQ0MjY2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAxLjU3Mzg1Njk0OTgwNjIxMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ4Ny4zMTcwOTgsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuMzc1NjQwMDY0NDc3OTIwNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ5Ny44NDAwOTg0LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjA1NzI5MjU2OTQyODY4MjMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MDcuNzQ2NDc0MywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC41NDAyMjc3NzA4MDUzNTg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MTkuNjI5NjM5MSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC42MTc0NzQwMTk1Mjc0MzUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MjguNzM1NzMyOCwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4wOTQyNzA0OTc1NjA1MDExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDAuOTI3NzkyNSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4yMTYzMzYxNjA4OTgyMDg2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTUyLjIxNDEzNjEsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMjM1ODE0MDA1MTM2NDg5ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU2Mi4zMzQwNzY2LCAic3RlcCI6IDk1LCAidmFsdWUiOiAxLjA3MjE0MTA1MTI5MjQxOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzU3NC42NjM5NzI2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjI0MTM2NzM2OTg5MDIxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTg1Ljc4NTU0NiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yMzYyNTgwNTk3NDAwNjY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTk2LjcxNzc4MzUsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDMuNzQ5OTMwMTQzMzU2MzIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNjA5LjI4Njg1MiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMS4wNjE3MjM3MDkxMDY0NDUzfV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xODM4MjFfQlMxMDAiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDUzODYuNzQ2OTkxMiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjc3ODE4Nzc1MTc3MDAxOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny42OTIwNzg2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODMwNDE3NzUyMjY1OTMwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjY0MzQ2NCwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjc1MjIyNjI5MzA4NzAwNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4OS42Njc5MTY1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjMwNTk5ODU2Mzc2NjQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTAuNzg2NDg0NSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjcwNzk0ODMyNzA2NDUxNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MS45OTIwOTU1LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjM3NTg5MTU2NjI3NjU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTMuMzY3NDYwNSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQ5NzQyODM1NzYwMTE2NTc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTUuNTg2NTA0NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjUzNTA2NTM1MjkxNjcxNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Ny45MzI5ODI3LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNDk2NDgzOTIyMDA0Njk5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAwLjI3MjcxNzcsICJzdGVwIjogOSwgInZhbHVlIjogMC40ODE4NzIwNTE5NTQyNjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDIuNTUyNzYyMywgInN0ZXAiOiAxMCwgInZhbHVlIjogMC40MzAzNTg5NzYxMjU3MTcxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDA0LjMzMzA1ODgsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNDkxOTE2Mzg4MjczMjM5MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNi4xNTA2ODIsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNDkzNzE0NDUxNzg5ODU1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwOC43OTg3NzgzLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0NjY5NzUwMzMyODMyMzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MTAuODc1MjUxOCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zNzI0MzU0NTA1NTM4OTQwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDEzLjYyODYyNTksICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzg5MjU3MTMzMDA3MDQ5NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxNy4wNjAzNTkyLCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQzMTc5OTE0MzU1Mjc4MDE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjAuMjkwODg2NCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zOTMxMDM0MjA3MzQ0MDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjIuNjYwODEyNCwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC40MDU3MDg5MDkwMzQ3Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNS4xNzI0ODQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNDE3NTA0NTc4ODI4ODExNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNy43OTkxOTgyLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjM1MTczNjQyNjM1MzQ1NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzMC43Mjk5NTQ1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjM3OTAyNDk1MjY1MDA3MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzNS4xNDI0MzkxLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjM5MTM2NzE2NzIzNDQyMDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0MC40NzY0NzcsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuMzc5ODMyODkzNjEwMDAwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDQ1LjEyNTM0LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjQyNTc2OTgwNTkwODIwMzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0OC4zNjAwMTI4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjQxNTE3MTI2NTYwMjExMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1MS43NTY4NjA3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjM2NjY5MjkwMDY1NzY1Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1Ni44ODQ0MDQ3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjMzOTk3MTg3MDE4Mzk0NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2MC45MzczNTI0LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjQzMDIyMDUxNDUzNTkwMzkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjQuNDAxNTU2NywgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zNTY0ODA4MDcwNjU5NjM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDY3Ljg5MjYyODcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMzQwOTYxNjA1MzEwNDQwMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3Mi45NzI2NTIsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMzU0NzMxMjYxNzMwMTk0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDc4LjEwMDkyOSwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zNDc0NzQ5MDI4NjgyNzA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODEuOTQ2Mjk1NywgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zNTAzNzU5ODAxMzg3Nzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODUuODIxMzU5OSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMjIxNzA3NjQyMDc4Mzk5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDkxLjc5NDg4MTgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMzI4ODQ2MTU2NTk3MTM3NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ5Ny4yNTg0MzM4LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjI5MTcwMDAzNTMzMzYzMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUwMS40Njk0MTMzLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjI3NDE5NTIyNDA0NjcwNzE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDYuMTMxMDgwNiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yOTgyMjIxNTQzNzg4OTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxMy4wNzQ4MzMyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjMyMDI0MjAxNzUwNzU1MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUxNy43Njc0NzY2LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjMxMDc4OTQ5NTcwNjU1ODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyMi4zNjQ2Njk4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjMxMjM2MDEzNzcwMTAzNDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MjkuMDM0MTQzNCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yODQ4NDA0MzQ3ODk2NTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzQuNjE4NzQyMiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4zMTM3MzI5MjIwNzcxNzg5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTM5LjU2OTQ1OCwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yNjY5MzkxNjMyMDgwMDc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NDguNDc2OTIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMjc0NDM3ODE0OTUwOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTUuODQ2ODY5MiwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4yNjY0NzUxNDEwNDg0MzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjAuOTQ3NjQyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjI1MDIwNTU3NjQxOTgzMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU2Ny4wNDc4NjI4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjI3NDg5MjY4Nzc5NzU0NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3NC40NDc1Mzg5LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjI3OTY3NTk5MDM0MzA5Mzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1ODAuMDgzNTQ4MywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4yNzA4NTQwNTU4ODE1MDAyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTg3LjQ0OTYzMjQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjgzNjcyMDY0NTQyNzcwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTk0LjE3NDM5MTcsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMzk0OTM2NDcyMTc3NTA1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTk5Ljc3NjkxLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI4Mjc1MTU5MDAxMzUwNDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MDguNTE2NjMyLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjI3NjE1MDcwMzQzMDE3NTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxNC4zMDM4ODk1LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjI3MzczOTYzNTk0NDM2NjQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2MjEuMzEzMTI1NiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yNDA0NjczMjQ4NTI5NDM0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjI5LjU1ODQ0NzgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjY0MTQ1OTEwNzM5ODk4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjM1LjczNDgwMDgsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMjk0MTg4NjQ4NDYyMjk1NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0NC45MDUyMDMzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI3NTQ2NzkzMjIyNDI3Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY1MS4yNTcyODI3LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjIxMTQ4MDMzNDQwMTEzMDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NTkuMzM0MjMyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjI0OTE0ODI5NDMyOTY0MzI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NjcuMjE3MTU0NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4yNDA4MDcwNzEzMjgxNjMxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Njc0LjcxNjY0MywgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yMDU0ODY0MzE3MTc4NzI2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Njg0LjE5ODMxNzgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjE0MjgwMDUzOTczMTk3OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5NS4zMjMzMjA5LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjI2NTk5Mjk2OTI3NDUyMDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwMy42MTg0NTE0LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjI0NTI0MTQ2MzE4NDM1Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcxMS44ODgzMTk1LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjMwODUzMjY1NTIzOTEwNTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcyMC42MjE2NTkzLCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjI1NzM1MTY2NjY4ODkxOTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MjguNDE5OTAwNywgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yMTMyNjM2MzA4NjcwMDQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MzguMTEwODQxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjI0NjAyNDgzMjEyOTQ3ODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NDUuODE1ODA5MiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yMjY3NDI2MjUyMzY1MTEyM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzU2LjEzOTMwMywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4yMTI2NTgyNDEzOTExODE5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzY0LjU4NTUwMjksICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjQ2MzE3NjU0ODQ4MDk4NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3NC43MjE1NjMzLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjE5MDE0NTA2MDQyMDAzNjMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3ODMuNzE3ODkxNywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4yMjMxMzIyNTI2OTMxNzYyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzkzLjU2MTAyODIsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMjUzODUwMzcwNjQ1NTIzMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgwMy4zODA3NTkyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjI0MTA4NzgzOTAwNzM3NzYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTIuNjU0NDEwMSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yMzcwNDIwOTkyMzc0NDIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODIzLjE3MzI3NTcsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMjEzMzc0NDIxMDAwNDgwNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgzMS45NTQ0MTQ4LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjIxODA2NzU3MTUyMDgwNTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NDMuMjczNzg5NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMDkxMDA1ODkxNTYxNTA4Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODUxLjgxMTYyMDcsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMTk2ODU2ODQxNDQ0OTY5MTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg2My43Mzk5MDkyLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjE4ODU1NzUwNTYwNzYwNDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NzMuODI0NTQ0MiwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4xNzk1Njg1ODg3MzM2NzMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODYuMzM1OTA0NiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4yMDU0NDgyNjk4NDQwNTUxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODk5LjY0NTgyMjUsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjI0MjM2MjM1MDIyNTQ0ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkwOS4wNjgyMDQ5LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjE3MTEzOTUzODI4ODExNjQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MjAuNDYyODY4NywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yMjU4NTA2NTY2Mjg2MDg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MzIuMTAzNjU2OCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xNzAwNTI5OTAzMTczNDQ2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTQ1LjIwMzcyMTUsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTkzNjU5NDg0Mzg2NDQ0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTU3LjU0NjczMzYsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMTk0MjgxODMxMzgzNzA1MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk2OC4yMDQ0MSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4xNDkyMDI0MzYyMDg3MjQ5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTc4Ljk1Mjk0OTgsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMjAyNjQ1MzMxNjIxMTcwMDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk5MS4yMDAyMDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMTU5Mzk1MTczMTkyMDI0MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAwMS4yMDMzMjksICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTk1Njg5OTQ2NDEzMDQwMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAxMy4zNTc3NDMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTY0OTE3MTQxMTk5MTExOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAyNS41MTM3NDg2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjE3ODY2NjY4MTA1MTI1NDI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMzYuMTIwNjQ0OCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4xNzY2NzI4NjA5ODAwMzM4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDQ4Ljg2OTQ5MDEsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMTc4MDAxNTY3NzIxMzY2ODh9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE0NzQ3M19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjA2NDIzLjIyMDEzOTcsICJzdGVwIjogMCwgInZhbHVlIjogMC42NDg3NDExMjYwNjA0ODU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjQuMjA2MDM1OSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjUxNTgwMjE0NTAwNDI3MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyNS41NDAxODYyLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNDc1MjU5NTEyNjYyODg3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI3LjAxNDUwNiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjM5NDY4NTkyNDA1MzE5MjE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjguNjQzMzI2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDg0MzI0MTI3NDM1Njg0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMwLjk2MTY5MDIsICJzdGVwIjogNSwgInZhbHVlIjogMC40MzI1NjUwNjMyMzgxNDM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzMuMzYwNDgwOCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjM5NTA2Njc2NzkzMDk4NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNS42NDYwNjY3LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMjQzOTc3MjMzNzY3NTA5NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNy44MDgyMTQ0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMzQzNDk0OTUxNzI1MDA2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM5Ljc4OTA4OSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjQzNTYwOTEzMjA1MTQ2Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0MS40MTMwMzI4LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjQyMjAyMDg1MjU2NTc2NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0My4xNDUyMjg5LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjQxODQzMDk1NDIxNzkxMDc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDQuOTk4MTQ2LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjIxMjk4NTI5MjA3NzA2NDUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDYuOTEyMjYzNCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC40Mjk5ODk1NDY1MzczOTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDguOTE5Njk2OCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC40ODQ5MDI4Mjg5MzE4MDg0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUyLjEzNzI0MDIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDUyMDYwNDMxMjQxOTg5MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ1NS41MDMzODU4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjYzNTEyNzkwMjAzMDk0NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ1OC4yNzQ4NzksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzMyNjgyMjUxOTMwMjM2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYwLjY3MjgxNzUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzU3NTk4ODQxMTkwMzM4MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2My4xMjYxMTQ4LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjM0Mjk2NjA3OTcxMTkxNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjUuNzc2NzA5NiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4yMzQ1MDYwNDA4MTE1Mzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjkuMzMzMDYyNCwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yODg2ODAwNzY1OTkxMjExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzMuNzAyODQzNCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNTc1MTAwMzAyNjk2MjI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzYuOTA2NDAxLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjQxNTA3MTEyOTc5ODg4OTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODAuMDgxMjQ4OCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zOTc5NTk2MTk3NjA1MTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODMuMTEwMjY2LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjI0NDI4ODcxMjczOTk0NDQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODcuMjk5NjY5MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zMzE1NzEwNDI1Mzc2ODkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTIuNTE0MjI1NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zMjIyNzQwNTkwNTcyMzU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTYuMjM0OTg0NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yOTEyNDE1ODYyMDgzNDM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTkuNzI5NDI5LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjI1NjU0NzIxMjYwMDcwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAzLjk2ODc3NzQsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNjg3ODg1NDAzNjMzMTE3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEwLjEyMzI5OTgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMzAzNTc3MDM1NjY1NTEyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTEzLjg2NzI0OTcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjcyNjM5MDEyMzM2NzMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MTcuNzc1NzU2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjQ2NDY5MjI5NDU5NzYyNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MjIuOTU0ODU4LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjMwNjYzMDEwNDc4MDE5NzE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MjkuMDEzNjc4NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yODcxMDAyODUyOTE2NzE3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTMzLjQxNTAyLCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjE5MTIwOTM0NjA1NTk4NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUzNy41NTg5Mzk1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjIxOTQ3ODM5ODU2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NDMuNzk1OTY2NCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zMzMyMTkyODk3Nzk2NjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NDguNjY4OTcwOCwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4zMzE2NDIyMTA0ODM1NTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1Mi45NjQ1NDI2LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjQwOTcwNjgwMTE3NjA3MTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NTguNDMyNDIyOSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4zMDA5MTU0Nzk2NjAwMzQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjYuODE3NTA2MywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMTM2MDkxNDQwOTE2MDYxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTcyLjc5NjY2OCwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4yMDI1MjA5NjY1Mjk4NDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NzcuNTQ4NjQ0MywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC40MjQyNjAxMzk0NjUzMzIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTg1LjE4MjY4NiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4xNDUxNjY4NTkwMzA3MjM1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTkwLjIwNzk2MzcsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjgzODk5MDk4NjM0NzE5ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5NS4yMDg0OTIzLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjQ1NzA5OTMxODUwNDMzMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwMi45NzAzODcyLCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjUwNjY3MDgzMjYzMzk3MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYwOC4zNTMxMzEzLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjIzMzk3Nzc2NDg0NDg5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxMy44NTY0MDUsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMjk4OTE3NTYxNzY5NDg1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjIxLjc5NjM2NzQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjQwODE4MDUzNDgzOTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MjcuMjY1MTY4NywgInN0ZXAiOiA1MiwgInZhbHVlIjogMS4zNTkxNDY5NTI2MjkwODk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MzQuMzM5ODI1OSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNDc2NzYyMzg0MTc2MjU0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjQxLjg1MTAyNDksICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjM4ODYzMzc4NzYzMTk4ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0Ny44MDQ5NjgsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMTgzMDA2NzQ4NTU3MDkwNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1Ni44NTgyOSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yODg0NDc5MTY1MDc3MjA5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjYzLjA4MDAxMjgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMzA3MTMyNzgwNTUxOTEwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjcwLjY4MTc0MDUsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMjQzMDI5OTA3MzQ1NzcxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjgxLjQwMzA2MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNzAzNTAwNTk4NjY5MDUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODguMTk5NzMwNiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC41NDM4OTMzOTY4NTQ0MDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2OTYuOTgyMjUxLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjU2NDU0MTE2MTA2MDMzMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwMy4zMjkwMTcyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjEzODkwMTkwNDIyNTM0OTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MTIuNTY1NDEzNSwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4xMTYxODE3MTYzMjI4OTg4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzE5LjA3MTgxNjQsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjY2MDYzNjMwNTgwOTAyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzI3LjYzMDY3MywgInN0ZXAiOiA2NSwgInZhbHVlIjogMC40NTEzMDg4NzYyNzYwMTYyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzM1LjMwODIwMzIsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNTM0NDEyNTAzMjQyNDkyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzQzLjM3OTc0ODMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMjE0MzY5MzQxNzMxMDcxNDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc1Mi4wNjIxMDUsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuMzYxNjg0MjkyNTU0ODU1MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc1OS44MjIyODY4LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjEwMzE2OTc0NjY5Njk0OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzY5LjEzMDc0NjgsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMzE4NDE5OTkyOTIzNzM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzc2LjczMDIyMzcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTIwOTMzNDI4NDA2NzE1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzg2Ljk4ODMzNTgsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMTQ0NTU4MjIxMTAxNzYwODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc5NC4zNTg3MDkzLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjE2MTk2OTA4MDU2NzM1OTkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDQuNTk4Mjg4MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4yMzQ4NDA5NDQ0MDkzNzA0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODEyLjMxOTU3NTgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTE0NjM1MjUxNDYyNDU5NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgyMi42NDIwNzk2LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjE4MTAyNzcyNTMzODkzNTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzEuMTA3MjIyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjU5NzQwMDc4NDQ5MjQ5Mjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg0MS4xODY1ODM4LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjQyNDg1NzU4NjYyMjIzODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTAuMTY0OTU1LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjE0NTc3Mjk5MzU2NDYwNTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg1OS45MDIxNDM3LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjE1OTY4NDk3MDk3NDkyMjE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjkuNjk2NDg5NiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMjY0NzM2ODkwNzkyODQ2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODc4Ljk5ODU2NjIsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMzQwODAyMDQzNjc2Mzc2MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg4OS43MDA3ODgsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMTgzNTg3ODY0MDQxMzI4NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg5OC44NDIwNDMsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjI4ODM4ODc1ODg5Nzc4MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkxMy4xMTU1ODksICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjk4OTQ1MTg4NTIyMzM4ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkyMS43MDIyMTgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjc0NDE5NTE2MzI0OTk2OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkzNS42MzgxMDgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMTkyNjk4NjU3NTEyNjY0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTQ2LjUyMjU2NjYsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuMjgxNTYwMDMzNTU5Nzk5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTU2LjczNjA3MjUsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMjAxODIyOTIxNjMzNzIwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTY4LjUyMTIxMTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTg1NTI1MTQ5MTA2OTc5Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk3Ny41OTM2NDM0LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjU2MTk5Mzg5Njk2MTIxMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk4OS41NTExOTA5LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjM1MDQ5MzMxMTg4MjAxOTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMDAuODI2MDQ2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjQwMDcxNDQ1NzAzNTA2NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAxMS4xMjUwMTc0LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjM0NDM5NDE0NzM5NjA4NzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMjMuMjAzMDU2MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4xNDMzNzc5NzQ2Mjk0MDIxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDMzLjU0NDI1ODgsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTEyNTg5NTk3NzAyMDI2Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0NS4xNTQ5NzU0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjIyODEwNjU4ODEyNTIyODg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNTcuNzMxNDYwOCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4zNTkyMTU5NzQ4MDc3MzkyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDY3Ljg5ODYxNDIsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMDYwOTgzMDA5NjM2NDAyMTN9XX19XQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_2/test/accuracy%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMi90ZXN0L2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgzMC4wNDgxOTMsICJzdGVwIjogMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzEuMzY2NTc3NCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzMi44MjI2MTc4LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM0LjQzNzc3MDYsICJzdGVwIjogMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzUuOTc4OTc4OSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNy4xODgzMjg3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM4LjQ1MzIyMTgsICJzdGVwIjogNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzkuODM1NTQ3NCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0MS4zMDUzMjQ4LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQyLjgzOTIwOCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NC41MjkxMDAyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Ni42ODAwNTc1LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0OS42NDc2NTAyLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1Mi42MTcwMzY4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1NS4wMDUwMzk3LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1Ny4xMzYxMjAzLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1OS40ODgyMjE2LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg2MS43ODI0OTM0LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg2NC40ODc5MDksICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY4LjI1MDA2MTUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODcxLjg0NzUwMzcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc0LjUyOTAxOTgsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc3LjM3NDQ2NTIsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODgwLjE5OTcxMSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODQuMTg3MzIxNCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODguNzU0Njc3NSwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTEuOTYwNzg3MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTUuMTY2OTg2NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTguNDIyODQxOCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MDMuNDE4NjA5MSwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MTAuMDAzNTksICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE0Ljk5MDQzNzcsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE4LjY0MTcwMTcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTIzLjc5OTczNTUsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTI4Ljg0MjcxNzIsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTMyLjcyMzIyNjgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM2LjcwMTEyMTgsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQyLjY0MTA1NDksICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTQ3LjczOTUwMDgsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTUxLjk3MzI0MDksICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTU2LjgxOTI1NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NjMuNzU3MjAxMiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NzAuNzUyNjgyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3Ni42ODcyODYsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTgyLjc3MjM0NTUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTg3LjU3NDgxNzIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTkzLjMyMzE2MTYsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDAwLjE3MDA3NDIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDA1LjM3NTA5MTgsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDExLjYyMTg1OTMsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE4LjQxNTAwNDMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDIzLjcxMzQxMjUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDMwLjkxNTE5NzgsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDM3LjQ3NzQzNDYsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQzLjEwNjYxMjIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDUxLjY2NzQxNzMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDU3LjU1ODA5MDQsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDY0LjM1Mzg0NTQsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDcyLjExOTE2MjMsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDc4LjI0MTUxMjMsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDg3LjA5ODY3MDUsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDkzLjQ4ODQwNCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDEuNjA0ODY2MywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDkuMDMwMzIxMSwgInN0ZXAiOiA2MywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMTUuOTEyOTQxLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEyNC44NTMxMzEsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTMxLjYyNDYzMTQsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQxLjE2MzU5NDUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ4LjIxMDI0NzMsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTU4LjU0MjAyODQsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTY4LjEwNzU2NzMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTc4LjM2NTE3NSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExODUuODM4MDU5MiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExOTYuNDA3NTU2OCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMDQuMTI0NjMzNiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMTQuODczNDE0NSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMjIuOTY2MTU4NCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyMzMuMDczNDc3NywgInN0ZXAiOiA3NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNDEuOTY2MDkzMywgInN0ZXAiOiA3OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNTEuNzY4NjMyMiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNjEuNTA2NDE1NCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNzAuNzY2NTIzMSwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODEuNTk2MTk4OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyOTAuMTc3NDExLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMwMS40MDQ5NjY0LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMwOS45OTQ4MDY4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMyMi44ODMwNTU3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzNi4wMjU4ODQ5LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0NS4wMTYxODUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzU3LjEwNjk1MzQsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzY4LjY0NDA4NTYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzc4Ljk5MjE4NywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzOTEuMzIxNjcxNywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MDIuNTY4MDczLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQxNy40MDQ5NDI4LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQzMC4zNTkxMTksICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDQzLjQwMzU4MywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NTQuMTE5MzA3MywgInN0ZXAiOiA5NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NjYuNjgyMDIwNywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0ODAuMTA0NTkxNiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF83OTE0M19CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjA0Mzg1LjE4MjQ4MDYsICJzdGVwIjogMCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODYuMDE0NTY3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg2LjkyNDc1MTgsICJzdGVwIjogMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODcuOTI5NjQ0MywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4OS4wMDE4MDkxLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MzkwLjcyMzEzOSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5Mi42OTY0MTM4LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk0Ljc3MjE5NDksICJzdGVwIjogNywgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTYuOTcyMzYyMywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5OC40NzcyNDI1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAwLjA4MjQ2ODcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAxLjg1MzM0NTYsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDAzLjY3NzQ5NTUsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA1LjU1NjQ0NTQsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA3Ljg0OTk0NjcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDExLjEzOTcxNzYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE0LjQ2OTIxMTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE2LjkxMzIzMjgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE5LjMyNDAzMTgsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIxLjc1ODg5NywgInN0ZXAiOiAxOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjQuMjc5NDk3MSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjcuOTU2MjYxOSwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzIuMDg3OTc5NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzUuMTI1MTk2LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQzOC4yNjI1ODU0LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0Mi42Mzg1ODI1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0OC4yMzMxOTI3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1My4yNTcyNDAzLCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1Ni44MDgxMjA3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2MC4yNjU2Mjc2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2My45NDYxNjU2LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjExMTExMTExMTkzODk1MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2OS40Njk3MTY1LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3My42MzMwMjEsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDc3LjM4OTcxNDcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDgxLjI3NzMxNDcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg3LjIxOTk4MzgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDkxLjYwMTI4NzYsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk1LjY1MDY0OSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MDAuNTIwMjA1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUwOC4yODY5MDY3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxNC42MTMzMjYzLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUxOC45NjM3Mzk0LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUyNS4zMjc3MDU5LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUzMC43OTE1NTksICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTM1LjU0OTQyNSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NDEuODczNDkxNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1NDguMTk1OTc2LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1My4xOTI1MzI1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1OS45NjEyODQ0LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU2Ni4yNzMxMjYsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTcxLjQ2NjI1OTUsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTc4Ljc5MzY1MjMsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTg0LjkzNjk3LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5MC40NjMzNDM5LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5OC45NDQyODIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjA0LjY3NTczMzYsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjExLjM4OTAwNjYsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjE5LjEzMjQ1MTgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI1LjA3ODgwOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MzMuNzE2Mzc0MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NDAuMzA4MDE3MywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NDcuOTgyODYzNywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTUuNzE4NzIzNSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NjIuMTY5MDc3NCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzEuNDEzMTExMiwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzguMDM3NzU4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjIyMjIyMjIyMzg3NzkwNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY4Ny43ODEzNTUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMjIyMjIyMjIzODc3OTA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Njk3LjQ1ODU0NDUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzA3LjA4MTU0NTQsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzE0LjAxMzY4NTUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzIzLjgzNDMxODYsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzMxLjE3MTYxMTMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzQxLjMwMjYxNTYsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzQ4LjYzMzY5NjMsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzU4LjkyNTY4NzMsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzY2LjU5MTIzMjgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzc3LjMxNDI5MjIsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzg0LjkzNzA3NCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3OTUuNTkzNTM1NCwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDMuNjEwODg5NywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MTQuNDM2NzY0LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyMy4wNTI3ODc4LCAic3RlcCI6IDgxLCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgzMy45MzgwNzA1LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDg0My43NTc5MDEsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODU3LjAzNjAxMjIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODY5LjAzNjU0ODksICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODc5LjQwOTM1NCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4OTAuMDk1NTAxNCwgInN0ZXAiOiA4NywgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MDEuNzI5NzUxOCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MTAuODkyODIxLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkyMi42NTU3NTYyLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkzMy4zMTgzOTg1LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk0Ni44MTg3ODY0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk1OS4xMDcyMTg1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk3MC41NDgxOTEzLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk4MS4xMTc3OTUyLCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDk5NC4wNjUwNzY2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAwNi41NDM5MTYsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDE3LjY1ODAyMTcsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDMwLjMzMDg2OTIsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNDE1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTk4NC4yODcyNTQ4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg1LjY1NTcxMSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni41OTUxMjExLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg3LjYwODk1NiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4OC43MjU3MjYsICJzdGVwIjogNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODkuOTM0Mjg3NSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5MS4yMTQzMDU5LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkyLjYwMjIxNDYsICJzdGVwIjogNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTQuMDY1MTM3MSwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NS42NzE3NzI3LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTk4LjI1NjM5MzIsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAwLjg4OTAyNjksICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAzLjU5MDg3OSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMDUuNTMxODAwMywgInN0ZXAiOiAxMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMDcuNTg2MTgyNCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMDkuNjUzNDg4MiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTEuODg2MDExOCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTQuNzU5NTk5NywgInN0ZXAiOiAxNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTguNTA2MzQzMSwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjEuOTQzOTcwNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjQuNTMyNDU4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAyNy4yMjM2NDkzLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMC4wMTEzMzE2LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzMy45MDgyMTg5LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAzOS4wOTUxNzQzLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA0NC4wMDg5MjE2LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA0Ny45MjIzODE0LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1MS4xOTYyNTIsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU0LjUwMzk2OTIsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDU5Ljc2MjIzOTUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDY0LjI0NjA0MjcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDY3Ljg5MTM4OTEsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDcxLjUzNzkwMjgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDc3LjAyMzIxMDMsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDgxLjc1NjI4OSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODUuNjg1OTg0LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4OS43NzQ4ODU3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA5Ni4yMDM4MjYyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwMC44NDAzMzc4LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEwNS4xNDM0MDE2LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExMS4wNzgwOTg4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExNy4wOTUxOTg2LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyMS42OTczMjA1LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEyNi45ODE5NTk4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzNC4wNTAyMTc0LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjEzOC44ODg3MzQ2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE0NC4zNzQ0MzMsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTUxLjY3NzI3MTYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTU2LjkyMzEwNTUsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTYzLjAwNTYwNiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzIuMjYxNzAzNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzguNzMxNzI4OCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxODYuNDU2ODQ4OSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTIuNTU1MzkzNywgInN0ZXAiOiA1MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTguMjA1ODkwNywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMDYuODkyMDA1MiwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTIuNzc4NDkxLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyMC4yODM0MzAzLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIyNy40OTY5NTU0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzMy41NTQ4MTgyLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0Mi40NDE3NTMxLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0OC44MzE3NzYsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjU3LjQ1NTk3MDgsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjY0LjYwNDUyNDYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjcyLjM3OTIxODMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjgwLjcxMTU2NSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyODcuOTU5MTU0MSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyOTcuNDkxNjI1LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMwNC41MDc4NjU0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMxNC40Mjc1OTI1LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMS41NzMxOTMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzMxLjc1ODIyOSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMzkuMzUzMzI4NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNDkuNzA5MDI5NCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNTcuMzkwOTEsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzY3Ljg5OTAyNCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNzUuNjc2MDM5NSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzODYuMzg3NzAyMiwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzOTguODI5MDk0NiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDguMTA3NTM0MiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MTguNzQ1MjA3OCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MzEuMDE2MDI5LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ0Mi4yODc5OTgsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDUxLjU0MDg4NjksICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDYyLjAxMzk2MTgsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDcyLjcwODIwMjYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDgyLjM1Njk4NDYsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDkzLjg1MTk2NDcsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTAyLjU3NDg0NjMsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTE0LjE4Mjk1NzIsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTI0Ljg0OTY2MTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTM1LjE1MTI0MzIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTQ3LjEyNjkwOTUsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTU2LjY4ODQ3NywgInN0ZXAiOiA5MywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1NjguNzc1MzkwOSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1ODAuOTUzMjUzNywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1OTAuNjIwNTQ0LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYwMy4xMjcwMDY1LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYxNS4yODE2NzYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjI1Ljg4NzIxNzUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjk3Ni42MTEzNTcyLCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjY5MDcxOSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OC42NjcyNjg1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc5Ljc0ODM1OTcsICJzdGVwIjogMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODAuODk2MjA3LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgyLjExMjIwODgsICJzdGVwIjogNSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODMuNDI5NzUyOCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk4NS40OTI2MzQsICJzdGVwIjogNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODcuOTcyNDMwNywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5MC40MDU4Njk1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkyLjU0NzI3MDMsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk0LjM2NjAzNCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTYuMjk3MTMxNSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5OTguMjgwMDkwOCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDAuNDU1MTU1NCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDMuMTk1NDA1MiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDYuNzUzNDkzNSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTAuMTQwNzgyNCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTIuNjQ2OTA1MiwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTUuMjQwNjY4MywgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTcuODQ1OTE1MywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjEuMjQ1NDE5MywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjUuNDY0OTM5NCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjkuMDA4NzE5NywgInN0ZXAiOiAyMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzEuOTc3MjE1OCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzQuOTg2NjM1NywgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMzguNDMzNjY5MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNDMuNDI1OTU4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0Ny4zNDA5NTI2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1MC43MTAxMTk1LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1NC4yOTI0OTg4LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1OS40MzA2MDIzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2NC40NDI5MDksICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDY4LjE3OTY1MjUsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDcxLjk2NzE3MywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwNzcuNjYyNzcxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4Mi43NDAwNzYzLCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA4Ni44NTIwMzg2LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5MS4yNDcwMzA1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5Ny45MTc4MTYyLCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEwNC40MDMwMDY4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExMC45MjkyMzQzLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzExNy4zMTY4NjYyLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyMS45NjQyNTUsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTI2Ljg4Nzk4NzQsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMzMzMzMzMzQzMjY3NDQwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM0LjEyNDkyMzIsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTM5LjA3MjE0MDUsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTQ0LjEzOTE3NzMsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTUxLjgxNDgzODQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTU3LjEwOTU3MjYsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTYzLjAzOTAzODIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTcwLjU4ODUyOCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxNzYuMDUxNDMwNywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxODMuMjI0NDI0MSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxOTIuODUxNDM5LCAic3RlcCI6IDU0LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5OS4wODk4NjQ1LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwNy42NDE5NzEsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjEzLjc5NzMyODUsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjIwLjgyODg2NTUsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI4LjcxMzU2MTUsICJzdGVwIjogNTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjM0Ljg5MDM5NTksICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQ0LjE4MDIyMDYsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjUwLjU2Nzc1MSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNTguOTM2NDUwMiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNjYuNDc4ODg4LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI3NC4wMTgzMjg3LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI4Mi42NDY3MjgzLCAic3RlcCI6IDY2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI4OS44NzUyMjAzLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI5OS4yODQ5Mjg2LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMwNi4zMTk4OTk2LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMxNi4xMTQ0MzQyLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyMy4zNTQ1NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzMuNjMyNTI2NCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDEuMTYxNjM2OCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTEuNDc3NTAwMiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTkuMTEyODAyNSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjkuNTI0ODAxLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM3Ny4zMzYwNTg2LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM4OC4yMzA1NzUzLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM5Ni41MzMyMDIyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQwNi45Mzk1MTIsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDE2LjMzMjc2OSwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MjYuNDA4MDYyLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQzNi42OTIxNjg3LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ0OC45MzE0NSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NjIuMTA5MjIwNSwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NzIuMDA3NTkzNiwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0ODMuNDY1MjY4OSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTIuMDM4NTAwNSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MDMuNzA3NTAyNCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MTMuODA2NTQ1NywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MjQuNTU4ODY1MywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1MzYuNjUzOTAxMywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDUuOTI5NzQzNSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NTcuODc3MDQwOSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NjkuNjAwNzE4NywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NzkuODU2NDE2MiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1OTIuMjgwOTE3NiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MDMuNTk3ODAxLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzYxNC42MDI3NTQ4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE4MzgyMV9CUzEwMCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny4wMjg1Mzc4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzg4LjA0ODE3NjUsICJzdGVwIjogMSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODkuMDI4OTc0LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkwLjExODE3NzcsICJzdGVwIjogMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTEuMjg5MjYxMywgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Mi41NjM1NzE1LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk0LjM0NDMwMDcsICJzdGVwIjogNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTYuNjgyNDUyMiwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5OS4wMjE1ODgzLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDAxLjUxNTM2MDYsICJzdGVwIjogOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MDMuMzgxNDg2LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNS4xODE3NDEyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNy40NTUwMTYxLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwOS43ODMwODIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDExLjk1MDk4OTIsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE1LjM3MzQ3MzYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDE4Ljc3NjA2OTYsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDIxLjQzMDg4OTgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDIzLjg5NzkwODQsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI2LjQ2NTI4OCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjkuMTEyODM5MiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MzIuOTczODI1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzNy43ODM0MTU4LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0Mi44NTU3NTI3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0Ni44NzU0NDIzLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ0OS45Mzk4MTIyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1NC40Mzc1NzYzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1OS4zNDAyNTg2LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Mi43MjQyNTAzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ2Ni4xOTAwNTQ3LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3MC4yMzQ0ODI1LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ3NS45ODc3MDI0LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4MC4xMTk1NjY0LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4My45MjY1MjQyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ4OC41NzkyODU5LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ5NS4yMDU0MjQsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk5LjQ1MjE4MywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDMuNzM2NTg5MiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MDkuODYwNDczMiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MTUuNTk5NTE4LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyMC4xODEzMzc4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyNS42NjkyNzEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTMyLjM3MjM2NSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzcuMjg5ODM0LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU0My43NTI4ODg3LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1Mi44NTc2MjY0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU1OC41NDc1NywgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NjMuNzA3NjAzNywgInN0ZXAiOiA0NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NzEuNTExNjA3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3Ny4zMzA3ODE3LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU4My4xOTIyODM5LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5MS41NTE3MTkyLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5Ny4xNDY4MTY3LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYwNC4zMjI3OTUyLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxMS42MDQwNjk3LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxNy40NjM2NzU3LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyNi41OTY0Njc1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzMi44Mjc2MjI3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0MC42MTgzODA4LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0OC4yODAyNDI0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY1NC42MTA3MDkyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY2My45NDQxNjA3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3MC43NTY3NzM1LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4MC40OTgwNzQzLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY5MC4xNDcxMTgzLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTcwMC4zNTk3MjQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzA3LjQ4MjAwOTYsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzE3LjM3ODEzODMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzI0LjQ3MTY4MiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MzQuNzIxMTQ2LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc0MS45NzQ4MTQ3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc1Mi4yOTAzNDY0LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc2MC4zMjMxODc0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3MS4xNjM1ODQsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzc4Ljk0MTg5OTgsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzg5Ljg4ODY4NzYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzk3LjkwMDQ3NzYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODA5LjAwNTY5OTYsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODE3LjI5MTI2NTcsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODI4LjE5Nzc0NiwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MzcuMjc0OTk5NCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NDcuOTAwOTc5OCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NTkuMDYzNTM1NywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4NjguNDgyMTA2MiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4ODAuNDY2NDcwNywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4OTQuNjM1OTMyNywgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MDQuNDQzOTEsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTE2LjM4NTg2ODgsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTI1LjMyNDczODUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTQwLjk3MTIxODYsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTUyLjcyNDcxNzYsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTYyLjU0NDcwMzIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTc0LjY4NzQ0NywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5ODUuMjY3ODM3NSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5OTYuNDY2ODI0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwMDguODY5NzY4LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAxOC45MDI4NDk0LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAzMS4yMTA5NzA0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjA0NC4zMTU0MTIzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjA1NC44NDA5NDU1LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9XSwgInB5Z19hbmRfb3BlbkZMX3JldXNpbmdfUFlHX0V4YW1wbGVfT1BFTkZMXzE0NzQ3M19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjA2NDIzLjQ5NTE0NDgsICJzdGVwIjogMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjQuNzIzMjg0NSwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyNi4xNTE0NjU3LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI3LjcxNzA5OTQsICJzdGVwIjogMywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjkuNjE0MDE0LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDMyLjA3Mjk5MTgsICJzdGVwIjogNSwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzQuMzk0MDg0NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNi42Mjc3MDE4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDM4Ljg1Njg2NTIsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMzMzMzMzNDMyNjc0NDA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDAuNTQ1NjA5MiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0Mi4yMDQyNTEzLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0NC4wMTE5NSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDUuODkxMjA1MywgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDcuODc1NzgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUwLjQ2NDQ1NTQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUzLjgwNTExMzMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU3LjA5MDM4MTYsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU5LjQ0OTI5NDYsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDYxLjg3MDMxMTMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY0LjQyMzMzNSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NjcuMjg3Nzk1MywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzEuNTkxNDc4OCwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzUuNDY3ODg4NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NzguNTU2NjM1MSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0ODEuNjIyMTU1LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ4NC44MjYyOTI1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5MC4wODA1NTM1LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5NC40NjQwMjQsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDk4LjA2NzU3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUwMS40OTg1MTM3LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUwNy4zNjM5NzEyLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUxMi4wMzQ0ODksICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE1Ljg2ODg0NDcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTE5LjgzOTExNjYsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTI2LjY3Mjk3MywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzEuMzMxNTEwMywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzUuNTg0MjcxNCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NDAuNzc0NjQ5LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU0Ni42Nzk3MzI4LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1MC45MDIxMDIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTU1LjM3MDg4OTIsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTYyLjg1MTM5MzIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTcwLjU4OTE4MjEsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTc1LjMwNjY4NDcsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTgxLjYxNjEyMSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODcuODg2NDIyOSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1OTIuODQzNTM2OSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1OTkuMzk4MjMzNCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MDUuODAyNDc1MiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MTEuMTAyNzc2LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxOC41NDk3MzY1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYyNC42ODE2NDAxLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzMC4yNzQwMzE0LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYzOS4xNzQ3MzUzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY0NS4wMTE3NTc5LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1Mi41NDg1MTcyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2MC4xNzk1MDY1LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY2Ni40MTk5OTU1LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3Ny4xNDQ1NTc3LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY4NC42OTMzMDM4LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjQ0NDQ0NDQ0Nzc1NTgxMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY5My41NDkyMjIyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwMC40MTMzMTcyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcwOC4wODExMjIyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcxNi4wNzU3MDI0LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjcyMi43MTgzNTc4LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjczMi4xODEzMDYsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzM4LjkyNDIwNjUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzQ4Ljc4ODMzMTMsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzU1Ljg5NDk5OCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NjUuODUxODU4NCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzMuMDMzNDU2OCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3ODMuMTM1NTIzNiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3OTAuODY4MjEyMiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDAuODEwODAxNywgInN0ZXAiOiA3MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDguNjMzMTU2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgxOC45MzU2MjMsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODI3LjAxOTgzOSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzcuNTU4MjU4OCwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NDUuNDQ3ODU0LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg1Ni4xNjEyMTIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODY0LjIzMzEwMzMsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODc1LjIzNTkyMzUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODgzLjg5NDQ1MDIsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODk0LjU1MDgzNzgsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTA3LjU2OTExODUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE3Ljc1NjkwNiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5MjguOTQ4ODg2LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk0MC44ODI4MzY2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk1Mi41NTAyMjY0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk2Mi43ODk2OTM0LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk3My40NzY1Mjk4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk4NS40MzY2Njg5LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjk5NC41NTQxNjA0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAwNi44MTgwODExLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAxNy43ODc0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwMjguMzY4MDY2NSwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNDAuODUzMTA0NCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNTEuMzgxMjQsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDYzLjA5OTU5NDYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDc1LjY5NTczOTcsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dfX1d", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_2/train/loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMi90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF85MTc2MF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDgyOS45MzY0MjY2LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDEuMDUwODE4MzI0MDg5MDUwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODMxLjIzODEwNDYsICJzdGVwIjogMSwgInZhbHVlIjogMC42NjY0NjA1NzM2NzMyNDgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzIuNjY0Mjk0NSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjY5OTM1MTU0OTE0ODU1OTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzNC4yNzcyMDA1LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDU1MTc1NzI3NjA1ODE5N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODM1Ljg2Nzc0NzgsICJzdGVwIjogNCwgInZhbHVlIjogMC40NzAzNjA4NzUxMjk2OTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzcuMDYxNjY4NCwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjQwNzQ1ODIxNTk1MTkxOTU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4MzguMzE1NTA2NSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQxNzAwNzI2NzQ3NTEyODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDgzOS42NzA4ODgsICJzdGVwIjogNywgInZhbHVlIjogMC40MDQ1MTI5MTIwMzQ5ODg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDEuMTM4NjUwNCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjQxMzMxNzc2OTc2NTg1Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0Mi42NjM3ODkzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzc5MTI2Nzg3MTg1NjY4OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg0NC4zMzY5NzU4LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjM5MDY1Njg1ODY4MjYzMjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NDYuMzI2NDQwOCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zODkyNzM5MTE3MTQ1NTM4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODQ5LjI5NzA0NiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC40Njg0ODY5NjQ3MDI2MDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTIuMjM3NjAyMiwgInN0ZXAiOiAxMywgInZhbHVlIjogMC4zNTE3NDcyNzQzOTg4MDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NTQuNzU2OTA0MSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zODUwNTExMDE0NDYxNTE3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODU2Ljg2NTAyMTcsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzM0OTI4ODcwMjAxMTEwODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg1OS4yMDUwNDgzLCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQxMjQ4Mjk0NzExMTEyOTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NjEuNDc5OTQxMSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC40MTM3MDkwNDQ0NTY0ODE5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY0LjAwMDY3NDcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzMyMjI4ODY5MTk5NzUyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODY3Ljc5NTc0ODIsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzY2MjAxOTA3Mzk2MzE2NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3MS41MTUxMDA3LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjQ1MjkzNDU5Mjk2MjI2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwODc0LjE5MzUwNSwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC40Njk3MzY3ODQ2OTY1Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDg3Ni45ODE2Njk3LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjMwMzYyOTE4OTcyOTY5MDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4NzkuODM4MTg3MiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC40MDAzMDYzNDQwMzIyODc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODMuNTczMjQ2NSwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zNDM4NjExOTI0NjQ4Mjg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4ODguMTU5NDY4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjMzMTQxNzU5MDM3OTcxNDk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTEuNTc0MTM0MywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4yNzc3NDQ1NjE0MzM3OTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTQuNzY1NzIwNiwgInN0ZXAiOiAyNywgInZhbHVlIjogMC41NjM4MTk2NDY4MzUzMjcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA4OTguMDEwNDc2NCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC40MjIyMzExMDc5NTAyMTA1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTAyLjcxOTgwOCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC40NzI3OTUxNTg2MjQ2NDkwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTA5LjIwNTIzNzIsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDE3NjY3MjM5OTA0NDAzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTE0LjUxNzczMzgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuNDQxNzg1MDY3MzE5ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkxOC4xNjMzMDE1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjM4MzM4ODAxMjY0NzYyODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDkyMy4wMTY0MTY1LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMzODI0MjYyMDIyOTcyMTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5MjguMzYwODgyOCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yOTI3NTk1OTczMDE0ODMxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTMyLjIwOTY0NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNjA2NzcxODg2MzQ4NzI0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTM2LjE5MjI3NzcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzQ3OTQwNTA0NTUwOTMzODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0MS44Mjk2NzIzLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjU1MTQyNDM4NDExNzEyNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk0Ny4xOTU0ODQyLCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjM0MTMwNDM2MTgyMDIyMDk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NTEuNDI1NDI4NiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yOTM1OTc3NTc4MTYzMTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5NTUuODk5MjAxLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjM4MzY1NjMyMjk1NjA4NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2Mi43ODA2NzI4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjI5MzM2NDcwMzY1NTI0Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk2OS44MzI5ODU5LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI5MTAwMzA0ODQxOTk1MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk3NS43MjA4NTY3LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjMyNzA1NDk0NzYxNDY2OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk4Mi4xNzE2ODgsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuNDMyMTk3MjEzMTcyOTEyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwOTg2Ljk0Njg5NiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4zMDYyMzUxMzQ2MDE1OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDk5Mi4yNzA4OTgzLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjQ2MDAwMTI4OTg0NDUxMjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA5OTkuNTA2MzYwNSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4zNDg3Mjk2NDAyNDU0Mzc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMDQuNjU2NTQzNywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yOTQ3NTM1ODEyODU0NzY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMTAuNTI2OTE4NiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC4zMjE5NTk1ODQ5NTE0MDA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDE3LjcxMzY1MiwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC40MzY3NDQ0MjE3MjA1MDQ3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDIzLjAwMjE4NDYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMzAxNTM1Nzg1MTk4MjExNjd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTAyOS43NjU1NzQ1LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjMxNDk1NDMxMDY1NTU5Mzg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwMzYuNzQyNDYxNywgInN0ZXAiOiA1MywgInZhbHVlIjogMC4zMTMxMzIwNDc2NTMxOTgyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDQyLjM1MzEyODQsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjY0NDAxMTY3NjMxMTQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDUwLjQ4NTUyNDQsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMzk0OTc0OTE3MTczMzg1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMDU2Ljc3NDEzMTUsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNDQwMTE5Mjk2MzEyMzMyMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA2My4wODQyNDE0LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjMwNDAxMTA3NjY4ODc2NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA3MS4zMTg4NzMyLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjM1NjQyNzc1ODkzMjExMzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEwNzcuNDIzMjU3LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjUxNDM5Njg0NjI5NDQwMzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA4NS44NTEzMDI0LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjU2MTU5MjUxOTI4MzI5NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTA5Mi42MjQ3ODksICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjQxNTg3MjA2NzIxMzA1ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTEwMC4yODE3OTE0LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjMyOTIyMTMwODIzMTM1Mzc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMDguMTk0Njc5MywgInN0ZXAiOiA2MywgInZhbHVlIjogMC40MjgzNjkwNDUyNTc1NjgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTE0LjY0MjQ0MDgsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMzE4NDMxNzk0NjQzNDAyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTIzLjk3NDgzNywgInN0ZXAiOiA2NSwgInZhbHVlIjogMC43NjE2OTQ3ODg5MzI4MDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExMzAuNjkzNzI3NSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yMzIzNDg3Njk5MDMxODI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQwLjI3NzY0MiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yMzc5MzE0MDA1Mzc0OTA4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTQ3LjI3NTU2OTIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDEuMDY0ODMyNjg3Mzc3OTI5N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTU2LjY5NTY0NzcsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMjg4ODA5Nzc2MzA2MTUyMzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE2Ny4xNzAwNjQ3LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjQ5MDg0ODM5MjI0ODE1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTE3Ny4yMTg5NTg5LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjIxNTgwOTk4NTk5NTI5MjY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDExODQuODQ2NjA1MywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC40MjI2NDIzNzk5OTkxNjA3N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMTk1LjM4NTIwNCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4yMTQ1NjczNDgzNjEwMTUzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjAzLjA2NTM4NDQsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMzAwNjkyOTQ1NzE4NzY1MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIxMy44MDg4NzUsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuNDk3MTI1ODY0MDI4OTMwNjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIyMS41MzAyMjQ2LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjI2NjIzODIxMjU4NTQ0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTIzMS45MDg1NTYyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjQ4NzQ4OTEwNDI3MDkzNTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyNDAuMjA3NDMyMywgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yNDg2NDk2NDE4NzE0NTIzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMjUwLjY4OTIyNTcsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNDY1NDkyNzU1MTc0NjM2ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI1OS43NzMyMTcsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMjQ4NTI3Nzk1MDc2MzcwMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI2OS42NDk0ODMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMzQ3MDA4NDM2OTE4MjU4Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTI3OS44ODQ1NzU4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjI1ODI5NjA3MjQ4MzA2Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEyODkuMDY0NTEzNCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4zNjYzNjEzMjAwMTg3NjgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDAuMDc0MTE3NCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC40MTk2Nzg1MDkyMzUzODIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMDguODA2OTA4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjI4MDA5MzYxMDI4NjcxMjY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzMjAuODE0NzczLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjI0Njc0NzQ3ODg0MjczNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTMzNC4yNDc5MzUzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjc2NzU5MzIwNDk3NTEyODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM0My43NzI1NDI1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjIyNjM0ODA3MjI5MDQyMDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDEzNTUuODUzNzUxLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjkxOTExNDM1MTI3MjU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzY2LjQ2OTE2NDQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDEuMDIxNDEzNjgzODkxMjk2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxMzc3LjcyMTU4MzEsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMzU4ODQyMDc0ODcxMDYzMjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTM5MC4wNDA5NDA4LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjYxMjE1OTkwNzgxNzg0MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQwMC4yODk5MTQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMjc4ODg5Mjk4NDM5MDI1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDE1LjIxMDE5LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjQ0NzY0MTQzMjI4NTMwODg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0MjguOTY2MjYwMiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC41ODEzMDc1OTAwMDc3ODJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTQ0MS44NTE5MSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4xODkxMTk5NjQ4MzgwMjc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDUyLjAzOTIzNzcsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDEuMTIxMjUwODY3ODQzNjI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE0NjUuMzA1MTQ4NiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yODMyMTI5Mjk5NjQwNjU1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxNDc4LjY4ODU1NDgsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuOTAwNzgxMzMzNDQ2NTAyN31dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNzkxNDNfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDM4NS4xMjA2ODksICJzdGVwIjogMCwgInZhbHVlIjogMC44MTI0NTc1NjE0OTI5MTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzODUuOTQxODYzOCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjUyODU3NDA0OTQ3MjgwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM4Ni44MzkwNzUzLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjA5MTMyMjg5ODg2NDc0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg3LjgyODQ0OTcsICJzdGVwIjogMywgInZhbHVlIjogMC4zNjc0MDU4MzE4MTM4MTIyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzg4Ljg5MjA4NCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjMzNjkzODgyODIyOTkwNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5MC41MjgwMDQyLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuMzg1MzA3MjUyNDA3MDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTIuNDU4NjAzNiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQxMDI2NDk2ODg3MjA3MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDM5NC41NDM5MjI0LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMjYwNzY0MjcxMDIwODg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk2LjcyODE3MDIsICJzdGVwIjogOCwgInZhbHVlIjogMC4yNzk4NTcwMDk2NDkyNzY3M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mzk4LjMwNzIwNjIsICJzdGVwIjogOSwgInZhbHVlIjogMC4zNTAwMTU0OTEyNDcxNzcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQzOTkuOTAyMjUyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjM3MjE4MzU2MTMyNTA3MzI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDEuNjQ3NjUxNywgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zNDgzNzUwODIwMTU5OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDMuNDcwODQzNiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yODkyMzY3NTQxNzkwMDA4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDA1LjMzMjg4LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0NzQzMDkzODQ4MjI4NDU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MDcuNDczMTg2NywgInN0ZXAiOiAxNCwgInZhbHVlIjogMC40MTg2OTU3Nzc2NTQ2NDc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTAuNzEyNjA1NSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zOTQ5MTQ2ODY2Nzk4NDAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTQuMDYzMjkwNCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMDUwMTU0MTQ5NTMyMzE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MTYuNjQ2MDI0MiwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4yNDc2NTE1NDcxOTM1MjcyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDE5LjAyMzM0ODYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzE5NDMyMDc5NzkyMDIyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDIxLjQ2MDQ0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjM2Mzg0MzU2MDIxODgxMTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjMuOTU1NzUxNCwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4yNjE0ODc5OTA2MTc3NTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MjcuNDI3MDk4MywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yMzQyMTA1MzU4ODM5MDM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0MzEuNTQ2MzYxNCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4yOTUzMDEyODgzNjYzMTc3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM0Ljc3MTU5NiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yNDQwMjg3NzY4ODQwNzg5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDM3Ljg4NzU5NjYsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMTg3NjIzOTQ3ODU4ODEwNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ0Mi4wMzY3MjUzLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjI0OTc2NTQyNTkyMDQ4NjQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NDcuNDE5OTc4LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjI0MjkwNzAwMjU2ODI0NDkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NTIuNjQzNDU1NywgInN0ZXAiOiAyNywgInZhbHVlIjogMC4xOTQzOTc0MDQ3ODk5MjQ2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDU2LjIzMjU0NTEsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuMTkwMzYwMDg0MTc2MDYzNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ1OS44MTE5OTM2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjM5ODQ2NTU3Mzc4NzY4OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ2My4zMDQwNzEsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNDMwNTM5OTk1NDMxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDY4Ljc0NzAyNDMsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTMzNzg1NzU0NDQyMjE0OTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ3My4xNjI3NDAyLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjE4MzkzMjkwMDQyODc3MTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0NzYuODk1ODA5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjQwNTY5MDEzMzU3MTYyNDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ0ODAuNzE5NjYwNSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yOTQ0NTE4NjI1NzM2MjM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDg2LjQ0ODE1ODUsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuMjU3NDg0OTcyNDc2OTU5MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDQ5MS4wODkzMTcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMzgyMjM1NjE2NDQ1NTQxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk1LjEyNjkxMDIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMjY2NDAzMTk4MjQyMTg3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NDk5LjU5OTM2OCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yMDAyMzg0MDY2NTgxNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MDcuMjI0Mjg3MywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yMjI1NTM3MDAyMDg2NjM5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE0LjAzMjgyNCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4xNzI5ODk1NjIxNTM4MTYyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTE4LjM5NDMsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMTAyMzM2MTMxMDM2MjgxNTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDUyNC40MDg1MDk3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjE2ODg4MTA3MzU5NDA5MzMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1MzAuMTc4MzcyMSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xNjEzMzEzNDA2NzA1ODU2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTM0LjkzOTI0MDUsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTEzMzk1MTU0NDc2MTY1Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU0MC44NjEzNzQxLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjA5NDcxMjAzMzg2NzgzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTQ3LjU0OTkyNjMsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMTg2NTQyMTM4NDU3Mjk4Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1Mi41MjY5Nzg1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjE0MjQ3NjYzMzE5MTEwODd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU1OC44Nzc4MzQsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMTc5MDQwMzg3MjcyODM0Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU2NS41ODYxMjQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNDIzNTQ1NjU4NTg4NDA5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTcwLjc4MTk0ODMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMTY4MzYyOTMwNDE3MDYwODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU3Ny43MDI1OTkzLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE0NzQ4Nzg3ODc5OTQzODQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ1ODQuMjIyNTMwOCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4zNDA3NDE0ODUzNTcyODQ1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NTg5LjcyMDgzNzQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMTI3NDcyODE3ODk3Nzk2NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDU5Ny44MTQ0NDI0LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjExNjQxNjk5ODIwNzU2OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MDMuOTEzNDA0NSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yMDQ5ODU4MjcyMDc1NjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MTAuMTUyNTA5NSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4wODQ3MjI2NDU1ODA3Njg1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjE4LjM0MDA3MiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC4xODgwMTE4OTk1OTA0OTIyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjI0LjI3Mzc4MTMsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMjg2MDA1NDM3Mzc0MTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2MzIuNDU3MzI2NCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNDkxNjM3OTc0OTc3NDkzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NjM5LjQ3MTA0OTMsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMjQ5MjE4ODA2NjI0NDEyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY0Ni41Nzc4MTk4LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjEyOTAwMTM5MzkxNDIyMjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NTQuODgwMTA4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjIxNzE4NTE1NDU1NzIyODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY2MS4yNjczMjQyLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjA4MDI2MDM0Mzg0OTY1ODk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ2NzAuNTExODM5MiwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4xNjc1ODg4MTUwOTMwNDA0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Njc3LjEzNDM1MzYsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMDkzOTE1NjI2NDA2NjY5NjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY4Ni40MDA5MTgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMTE1NjQ5NjE4MjA4NDA4MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDY5Ni4zMDIzNjgyLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjA3NDE2NTY5NDQxNTU2OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcwNi4xNDMzMTA1LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjI4NDU1ODY4MzYzMzgwNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDcxMy4wODczNjEsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMDI5MjA5MTUzNzI2Njk2OTY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MjIuNjg2ODcyNywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4xMzM4Njk2OTI2ODMyMTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3MzAuMjA1NjkzNSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4wNDc5OTgzODM2NDEyNDI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzM5Ljk2MDMyMiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4yODU5MDA1MzMxOTkzMTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NDcuNjY1Mjg3LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjMyNDIwMzg3ODY0MTEyODU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NTcuNTEzMDM1NSwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xMDM0OTkyMTg4MjE1MjU1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzY1LjU4MjIxLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjIwNDA4NzIyNzU4MjkzMTUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ3NzYuMDE0MzcwMiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMzE2Njc5NTA3NDkzOTcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0NzgzLjg5MjAwMDcsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjQyNTQ2MTcwOTQ5OTM1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Nzk0LjUyMzIxLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjA5MDI0Njg0ODc2MjAzNTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MDIuNTQyMDM1MywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4xNTkwNDkzMzIxNDE4NzYyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODEzLjMyNDAwMiwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xMzUzMTY4NjM2NTYwNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDgyMS42MjYxNTg1LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjA4MjgyMTU3Nzc4NzM5OTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4MzIuNzc0NTI2MSwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC40MzUwMTE0MTY2NzM2NjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4NDEuOTI4Nzc2NSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4wNDM4ODcyMjc3NzM2NjYzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODU1LjUyMDMyMDQsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMzY0NDcyNjI3NjM5NzcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0ODY3LjgyMDQ4NzcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMDM4OTU3NTE3NTk0MDk5MDQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4NzcuMjMxMTc3NiwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4xOTkyMTE1MDgwMzU2NTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4ODguODYxMzA0NSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4zNTI1ODQzMDI0MjUzODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ4OTkuODg3NTA5NiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNDcxMjEyODkzNzI0NDQxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTA5LjY3NjczLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjA4NzkwMjUxNjEyNjYzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5MjEuNDIyNjg5LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjEyNTMxMzY1NDU0MTk2OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDkzMS4yOTQ1NTE2LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjE2OTEzNzk1NDcxMTkxNDA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NDUuNTU1NTUyMiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4wNzkwNTAyMjA1NDkxMDY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NTcuODUzMjU1MywgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xOTQ4MzcwOTMzNTMyNzE0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTY4LjUxNzUyMDIsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMTkzNjg3MzA0ODU0MzkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQ5NzkuNzA2MDU3MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4wMjgzNTAwNTE0OTI0NTI2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0OTkyLjY3MjgyOTQsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTYzNzM4NTA0MDUyMTYyMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAwNC4zMTc5ODIsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMTU3NTMyNDgzMzM5MzA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MDE2LjI1NDgwOTQsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMjYzOTA0OTg4NzY1NzE2NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTAyOS4wMzE1NjAyLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjE0ODA5NTQyODk0MzYzNDAzfV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF80MTUzM19CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjAxOTg0LjE5MjQwMDIsICJzdGVwIjogMCwgInZhbHVlIjogMC42MjU3NzA4NjY4NzA4ODAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODUuNTc3MTA5NiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY4ODg2Njc5NDEwOTM0NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ni41MTA5MTg2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuMzIzODcyMzI3ODA0NTY1NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk4Ny41MDc5OTczLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuMTk0MDEyODY1NDI0MTU2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTg4LjYwODM4ODIsICJzdGVwIjogNCwgInZhbHVlIjogMC4zMjU3MzkwODU2NzQyODU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5ODkuODAxMDc4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjY0ODU5NTMzMzA5OTM2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxOTkxLjA3MDE2MjgsICJzdGVwIjogNiwgInZhbHVlIjogMC4yNjExODg4MzQ5MDU2MjQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE5OTIuNDUyMDE3NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjY0OTc5NTExNDk5NDA0OTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5My44OTYwODc2LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMjIwOTYzMTIwNDYwNTEwMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5NS40NjM2MDksICJzdGVwIjogOSwgInZhbHVlIjogMC4xNjczOTM3NTg4OTMwMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTk5Ny45NDgxMDEsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDEuMTY4MzgyNDA2MjM0NzQxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAwLjU4OTE4OCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4yNzY2NzgzMjM3NDU3Mjc1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDAzLjM2MDg5NjgsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMTcyNTkzMDQyMjU0NDQ3OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNS4zMDMxNzEyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjU5NTY4MTQ4ODUxMzk0NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjAwNy4zMzM0NTUsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMTc0NDg4MzUwNzQ5MDE1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDA5LjQwMTQ3OTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNDg2MTU2NDYzNjIzMDQ2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDExLjYxNDI0NTIsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMDQ5MzA1Nzg1NDQ3MzU5MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTQuMzA1NjAxOCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zNzQ2OTc0NDY4MjMxMjAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMTguMDY0MDMxLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjM3NjY5NjUyNzAwNDI0MTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMjEuNjM0NTkwMSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4xMzYxMjY0ODg0NDcxODkzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI0LjIxNzc5NzUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDEuNDUyOTc5ODAzMDg1MzI3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI2Ljg4NTU2NTUsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNzI1OTA3MTQ2OTMwNjk0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDI5LjY0MzU0NSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC41NjI5Mjc3MjI5MzA5MDgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzMuMzE4MTA0LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjMyMTA4NjI1NzY5NjE1MTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwMzguMzQ0NzksICJzdGVwIjogMjQsICJ2YWx1ZSI6IDEuMzc3Nzk4Nzk1NzAwMDczMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDQzLjM5MzIxNTIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjAzODE2MDU2MjUxNTI1ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA0Ny41MDc0NDk5LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjAyODM3NTk4ODgyNjE1NTY2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDUwLjc1OTgyMDIsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDQuOTQ0OTAxNDY2MzY5NjI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNTQuMDkwOTA2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjQwMzE2NDMyNzE0NDYyMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA1OS4wODI2NzQsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTM0OTk3NzI1NDg2NzU1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2My44MDM1MzQzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjM4MjU5MTY2NDc5MTEwNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA2Ny40NTI5OTM2LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjIyNTc1MjkwNTAxMTE3NzA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwNzEuMDYzNzMzNiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zNjA5MTIzODI2MDI2OTE2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMDc2LjI4NjMxNDIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMTIxMzE1OTMzNzYzOTgwODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjA4MS4yNzY5NjI4LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjEwMDQ0MzU3OTI1NjUzNDU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODUuMTY0Mzk0NCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yOTEyMjg1MDI5ODg4MTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwODkuMjI0NDczNywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xNDE3MzA0Mjc3NDIwMDQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIwOTUuMzY3NDAxMSwgInN0ZXAiOiAzNywgInZhbHVlIjogMC40ODcxOTA0ODUwMDA2MTAzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTAwLjI4ODkzOCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zMzMxMTQ1MzQ2MTY0NzAzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTA0LjU5NzAwMTgsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNTUzMDczMjI3NDA1NTQ4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTEwLjE0MTExMDQsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMTg5NDg4MzgxMTQ3Mzg0NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjExNi41MDQ0NzU4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjEzMTg4NzEzNzg4OTg2MjA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMjEuMDk2ODYwNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4wMzcyOTUxNjY0MDMwNTUxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTI1Ljk4NTgyNTMsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuNTMxMTI1MTI4MjY5MTk1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTMzLjQzODk0NywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC44NTI4ODIzODUyNTM5MDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxMzguMjcxMTE0OCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMTMyMzU0MDgwNjc3MDMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTQzLjI4NzI0ODgsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMDcxNTAwMjQ5MjA3MDE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTUxLjAwMDI2MzIsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMTI5NDQxMTcxODg0NTM2NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE1Ni4yNjE4NzE4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjUyMzYzOTczODU1OTcyMjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjE2MS44Njg5OTE0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjE1MDc3NzUzMzY1MDM5ODI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxNzEuMTYxODE5NywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC4wNjMxMzEyODAyNDMzOTY3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTc4LjAxMzAyNDgsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMzMxODI5NTQ3ODgyMDgwMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMTg1LjMzOTI2MywgInN0ZXAiOiA1MiwgInZhbHVlIjogMTYuODQxMjYyODE3MzgyODEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTEuODAzNzIyLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjA3NDgyODE1NTMzODc2NDE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIxOTcuNDM0MDc4MiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMS4wNTc1MjI0MTYxMTQ4MDcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMDYuMTA1NTAyMSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC44MTk1MDYzNDcxNzk0MTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTEuOTk0NTY5OCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC41OTQxMjQyNTc1NjQ1NDQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyMTkuMDI1MjgzOCwgInN0ZXAiOiA1NywgInZhbHVlIjogMC4xNjc2NjU4ODM4OTg3MzUwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjI2LjczMDAzOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogNC42NTE4MjU5MDQ4NDYxOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjIzMi43NjA5MDM4LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjA0NjMxMzY1MDkwNjA4NTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNDEuNjE5MzkxLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc0MjAyNDQyMTY5MTg5NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI0Ny45OTc2OTUyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjIxNDUyNzM5ODM0Nzg1NDYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNTYuMTI3NDA4NywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44NzExNDI5ODM0MzY1ODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNjMuNzI5MjE5NywgInN0ZXAiOiA2MywgInZhbHVlIjogMi45MDAzMjU1MzY3Mjc5MDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIyNzAuOTA4OTUxNSwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4wMzM2MTU3OTc3NTgxMDI0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjc5LjgxODg3MzQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjYzMzA4Njc0MDk3MDYxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjI4Ni43MDc2NjAyLCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjAwODc3NTE4Mjk5OTY3MDUwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMjk2LjU2OTkyMDgsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODQ5MzY3NDk5MzUxNTAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzAzLjU1NjMzMSwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4xMTE1NTc2NTUwMzY0NDk0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzEzLjQ4NzM1NTIsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMDQ2NzA5Mzg4NDk0NDkxNTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjMyMC42MDI2Nzc2LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIyMDkxMDQxNTA1MzM2NzYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzMzAuNzUyOTcxMiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yNjI3ODkzOTg0MzE3Nzc5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzM4LjM3OTA1NiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC42NDc1MTk3NjcyODQzOTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNDguNjc4NDQzMiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4wMTM0MjI2NjA1Mjk2MTM0OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM1Ni4zNzEwODc4LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjExOTkzODUwNzY3NjEyNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDIzNjYuODU0ODcxMywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4zODQ2MTA5NTA5NDY4MDc4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzc0LjY1NTk4NDYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMzA3MTcxOTcwNjA1ODUwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyMzg1LjMzNzg5NTksICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMTIzMjY0Nzg5NTgxMjk4ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjM5Ny4wNzUzMTcxLCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjI2NjY4OTU2ODc1ODAxMDg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MDcuMDI2NTczNCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4zNzY2MTIxNTY2Mjk1NjI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0MTcuMDI0Nzc0MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4wNTc0MTQxNDQyNzc1NzI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDI5LjkxNjg5MSwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4yMjE5NzM1MDg1OTY0MjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NDEuMTAyNTU0LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjA4MDY0MTc2MTQyMjE1NzI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NDkuNzAwMDQ1NiwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43NTE1Njc2MDIxNTc1OTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI0NjAuODYwNTIwNiwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4xMjU1NDA1MDk4MTk5ODQ0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNDcwLjg5OTA3NzcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjI4MjYzODEwMjc2OTg1MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ4MS4xNTg1OTkxLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjkyNDI2OTM3ODE4NTI3MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjQ5Mi41MDA4MDA2LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjQ3MTcyNjY4NTc2MjQwNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUwMS40MDQ0ODQ3LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg1MTMyMjM1Mjg4NjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUxMi45ODU3NDE2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjEwNzM0ODcxNzc0OTExODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjUyMi45NTA0LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjQ5MTEwMzA4Mjg5NTI3ODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1MzMuOTA1MjM4OSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4wNzYwNzM3MDYxNTAwNTQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyNTQ1Ljc4NjMwMDcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDEuMDA3OTEyMDM5NzU2Nzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1NTUuMTQ1OTYyMiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4wMzY1NTg4MzI5NzMyNDE4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU2Ny40ODY2Nzk2LCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjYyMTcwNzMyMDIxMzMxNzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjU3OS4wMTQxNjY0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE1NzMwNDIxMjQ1MDk4MTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI1ODkuMzQyOTgwNiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4zNzQ2MDAyNjE0NDk4MTM4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyNjAxLjg0MzEzNTgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMDA5NjA4MTk3OTU3Mjc3Mjk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI2MTMuMjEwNjgwMiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4wMjU2Mzk4NzExMzUzNTQwNDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjYyNC41MTUyNDEsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMzMxNTU3MjE0MjYwMTAxM31dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfNTgzMDZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjk3Ni41NDg0MjI4LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNzgxNDQ5MjU4MzI3NDg0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc3LjYwMTkxNywgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjg2MDQ2NzYxMjc0MzM3Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk3OC41NzM4NTM1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjgxMTQ5MzYzNTE3NzYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTc5LjY0MDEzMDMsICJzdGVwIjogMywgInZhbHVlIjogMC4zMTkzMjA4Mjc3MjI1NDk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgwLjc3MjIxNzgsICJzdGVwIjogNCwgInZhbHVlIjogMC40MzcxMjQ4NzgxNjgxMDYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODEuOTgwOTIzLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuMzUzOTUyMDgwMDExMzY3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTgzLjI3MTkxMTYsICJzdGVwIjogNiwgInZhbHVlIjogMC4zNzQzMTEyNjgzMjk2MjAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTg1LjIyNzkzOTEsICJzdGVwIjogNywgInZhbHVlIjogMC4yNTgxMDMxMzIyNDc5MjQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI5ODcuNjgwMzAyNCwgInN0ZXAiOiA4LCAidmFsdWUiOiAxLjQ1OTEzNDgxNzEyMzQxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkwLjEyNDc4LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDI2MTM1NTY5ODEwODY3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTkyLjM2MDgzMDMsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMzM1MjcwOTQxMjU3NDc2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyOTk0LjE0MjI3OTEsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMzAzMDc3NDI5NTMzMDA0NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5Ni4wNzIzNDM2LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM4OTE3NDY5OTc4MzMyNTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjk5OC4wMzQ1NDQ1LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjM2NzA5MDQ2MzYzODMwNTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDAuMTkyNTc3MSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC45OTIyODE5NzMzNjE5Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwMi43NTI4MDA1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjQ4NzczNzU2NjIzMjY4MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAwNi4zMzg2MDc4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjI1MzY2MzE1MjQ1NjI4MzU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMDkuODQyODM1NCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC45ODMwMTg4NzUxMjIwNzAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMTIuMzQwNTksICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNTg5MjY2NjU3ODI5Mjg0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE0LjkyMDY5NjcsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMjI0Mzk1MDA2ODk1MDY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDE3LjUzMzIxMywgInN0ZXAiOiAyMCwgInZhbHVlIjogMS4wNjU1MjYyNDcwMjQ1MzYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjAuNzExODU0LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjE4NDE3NTMyNzQyMDIzNDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwMjQuOTE4NjkzLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjg4MTg3OTgwNjUxODU1NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAyOC42NTc2MTMzLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjU1ODY0NDk1MDM4OTg2MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzAzMS41OTExOTIsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuOTA1NjI2Mjk2OTk3MDcwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM0LjYxMzE0MjcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNzI0NTgxNjU4ODQwMTc5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDM3Ljc5Njk0MzcsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMjk4NjU1MzkwNzM5NDQwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDQyLjc5Njk2ODUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuMzAwMDk2MTg0MDE1Mjc0MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA0Ni45MTgwNDQzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAxLjA1MjY4NTI2MDc3MjcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDUwLjI5MDY0NjgsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTI4MjUwNTI0NDAxNjY0NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1My44MzA3NzE0LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjQxMTc5MTYyMjYzODcwMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA1OC42OTM2MDE4LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjYyMDQxMDQ0MjM1MjI5NDl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA2My45NjAwODEsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuMjYwNzI2OTU4NTEzMjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDY3LjY4ODE2MjMsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNTE0NzE5NDg2MjM2NTcyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDcxLjQ5NjgyOSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zNzUxOTY2MzU3MjMxMTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA3Ni44ODY0NjkxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjM4Njg4MDg3NDYzMzc4OTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMwODIuMjE1MjA5NywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4zMDM2OTM4MzA5NjY5NDk0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMDg2LjMxODE3NzUsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMzU3MTMwMTEwMjYzODI0NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5MC41MjM2MDk5LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjg1MDc3MjY3ODg1MjA4MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzA5Ny4wNTQxODQ3LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjc0MDM3NjcxMDg5MTcyMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEwMy41MzQ5OTEsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMzA3NzI1NDg5MTM5NTU2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTA5Ljk3NTA5MjYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODk0MDgwNDAwNDY2OTE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMxMTYuNzMwNzA2LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjY1MTYzNzU1NDE2ODcwMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyMS4zNTE3MjA4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjU1NTExMTc2NTg2MTUxMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEyNi4wMTAxMzMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMzM3NTY2NzAzNTU3OTY4MTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzMy4zMTEyMDYsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuMTkxNTA1MDI5Nzk3NTU0MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzEzOC40MzcwMTU1LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjI5MTY1NjIyNTkxOTcyMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE0My4zODMyNDg4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjkwMjY5NjI1MTg2OTIwMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1MC45NjczNDQ1LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjM1NTE4MzQ1MjM2Nzc4MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE1Ni40NTA2OTIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzY5NTQ5ODEwODg2MzgzMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE2MS44OTM5ODQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzQxMDU3MDk3OTExODM0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTY5Ljg3NjUyNTYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNjU1NTY4MjQyMDczMDU5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTc1LjMxNzgwNjIsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNDc4NDE1OTk1ODM2MjU3OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE4MS45OTA5ODQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDMuNDE5Njc4NDQ5NjMwNzM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAzMTkxLjcwMDM5MywgInN0ZXAiOiA1NCwgInZhbHVlIjogMS4zMzY1NjE2Nzk4NDAwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMzE5OC4zMjU1NDQ2LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjEwNDI2ODYzMjgyOTE4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzIwNi40Mjk1NjM4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjMxNzc3MDQyMTUwNDk3NDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMTMuMDA4MTU3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjI0MDk3MTA1ODYwNzEwMTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMTkuNTM0Mjg5NCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC4zNDY0Njg2Mjc0NTI4NTAzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjI3LjkwNTkwNSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4yOTM4NTQxNzY5OTgxMzg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyMzQuMDY2MTUxMSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yMjQ0NzMxMTg3ODIwNDM0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjQyLjk2NDEyMzcsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjEyMDA0ODE2NTMyMTM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNDkuNjc1Nzc5MywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4zNjg4MzE2MDQ3MTkxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzI1Ny41OTc4MDQzLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjMxMzEyMTExMDIwMDg4MTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyNjUuNTgwOTgxNywgInN0ZXAiOiA2NCwgInZhbHVlIjogMi45MjM1MjAzMjY2MTQzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMjcyLjU1MTAxNDcsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDEuMDcxNzY4MDQ1NDI1NDE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyODEuNzMzMzI3NCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMi45NDQ5MzU1NjAyMjY0NDA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyODguNzgwNzk3NywgInN0ZXAiOiA2NywgInZhbHVlIjogMC45ODQ2NTA4NTAyOTYwMjA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMyOTguMzQ3MzYzMiwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNjM0MDg3ODAwOTc5NjE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMDUuMzc0NTQ3NSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yMDEyMjEwNjM3MzMxMDA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMTUuMTUzODU4LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIwNjk0OTYyMTQzODk4MDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMzMyMi4zNTU0NTU2LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjI1Mjk2MTc1NDc5ODg4OTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzMzIuNDQ4ODkyLCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjM3NDkxNzAwMDUzMjE1MDI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNDAuMTU3NjAyMywgInN0ZXAiOiA3MywgInZhbHVlIjogMC4zNjY1MTAyMTI0MjE0MTcyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzMzUwLjQ3MDQwNywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC41Mjk5NTkwMjI5OTg4MDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNTguMDY5Njc0NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44MDk1NDEwNDY2MTk0MTUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNjguNDk0NTkyLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjE4OTAxNTc2MTAxNzc5OTM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzNzYuMjkwMjEyLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjIyMTE0MTc4NTM4MzIyNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzM4Ny4xOTA1ODI4LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjA1ODA4MTYzODA2Nzk2MDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDMzOTUuMTg5NzM0NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yMjMzNTcwODE0MTMyNjkwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNDA1Ljg1OTEzMTYsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTE1MjA0MjUyMzAyNjQ2NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQxNC41MDQyNywgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4xODkzNDc1NTAyNzI5NDE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0MjUuMzM1MDA4LCAic3RlcCI6IDgyLCAidmFsdWUiOiAxLjM5NTM1ODQ0MzI2MDE5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQzNC45OTEwMTExLCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjExOTcyOTE0NjM2MTM1MTAxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0NDcuNzk3MjAyLCAic3RlcCI6IDg0LCAidmFsdWUiOiAxLjQ3NTk4OTIyMjUyNjU1MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ2MC4yMTY0MzQ1LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjkwMDk2MzY2NDA1NDg3MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzQ3MC44NTQ2OTE1LCAic3RlcCI6IDg2LCAidmFsdWUiOiAxLjE2NDIxMzc3NjU4ODQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0ODEuOTc4MjcwNSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4zNDA4MjM5NzgxODU2NTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM0OTAuODg0NjkwNSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4zNjMwMzgwMzMyNDY5OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUwMi40ODQxMzgzLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjAxMjUxNTIzMjg5ODI5NDkyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTExLjgzMDE2MTMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMzMzNjMwODg5NjU0MTU5NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUyMy4zNTI3NTEzLCAic3RlcCI6IDkxLCAidmFsdWUiOiAxLjcxMjY4NjY1NzkwNTU3ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMzUzNC44MjMxNTk1LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjA5MDQxODU5MjA5NTM3NTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM1NDQuNjc5NzkwMywgInN0ZXAiOiA5MywgInZhbHVlIjogMC4xNjk3MzE0MDgzNTc2MjAyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTU2LjYxNzcwMDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMzYzMzIxOTMwMTcwMDU5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTY3LjY0MDg2NzUsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuNDY4NDYxMDk2Mjg2NzczN30sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTc4LjU3NjAzNzQsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDYuMDMxOTk3NjgwNjY0MDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNTkwLjk5MDczMiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4xNzIxNzQ5NjAzNzQ4MzIxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAzNjAxLjQ2MDg1NzksICJzdGVwIjogOTgsICJ2YWx1ZSI6IDUuOTY2NzAxNTA3NTY4MzU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDM2MTMuMjc3MTk3OCwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4wOTIxOTY1ODM3NDc4NjM3N31dLCAicHlnX2FuZF9vcGVuRkxfcmV1c2luZ19QWUdfRXhhbXBsZV9PUEVORkxfMTgzODIxX0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1Mzg2Ljk1ODkxOCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjkwNTE1NjE5NTE2MzcyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM4Ny45NjI2MjA1LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjkyMDY3NTYzNTMzNzgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzODguOTM1NDA1LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjk4NzE1Njg2Nzk4MDk1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkwLjAwOTczMywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjYzMjc0MjEwNjkxNDUyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5MS4xNTk2NjQ2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTQ2ODk1MDI3MTYwNjQ0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MzkyLjQyNzYwMjMsICJzdGVwIjogNSwgInZhbHVlIjogMC41NTIxNjU5ODUxMDc0MjE5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUzOTQuMTA5MzYyNCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjUzNjczNzAyNDc4NDA4ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTM5Ni40MTYzOTA3LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNTA3NjIzNjcyNDg1MzUxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mzk4Ljc1NTY4MjIsICJzdGVwIjogOCwgInZhbHVlIjogMC41MzE3MzQwNDkzMjAyMjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwMS4xNzI5NDI0LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzkyMTc0MjE0MTI0Njc5NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwMy4xODQ5MjI3LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjU1MzMzNDc3MjU4NjgyMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNC45NTg2NDgyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjQwODU1NTk1NDY5NDc0Nzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwNy4yMjE4MzI4LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM5Nzg3NTE1OTk3ODg2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQwOS41NDUxNjgyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjQ0OTQ1MDEwNTQyODY5NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxMS42NjYyNzI0LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM4ODg0NjE4ODc4MzY0NTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MTQuOTM3NjcsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMzcyMTcyNjgzNDc3NDAxNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQxOC4zNTM5MTU3LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjQyMjQxNTQzNTMxNDE3ODQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0MjEuMTQyNjg0NSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zNjI0MTEzNTAwMTE4MjU1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDIzLjU4MzY2MTYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzkxNTk5MjY3NzIxMTc2MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQyNi4xNTAxMDcsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzE0Mzc5NzgxNDg0NjAzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDI4Ljc4MjY4NjcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMzM4NTY2NzgwMDkwMzMyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzMi40MzE1NzA1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjM0NDc0MTU4Mjg3MDQ4MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQzNy4xMzM1NTExLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI4NjU0NTYwNDQ2NzM5MTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NDIuMjg1OTQ3OCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMTg1ODc3MjAzOTQxMzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NDYuNTAzNTcxNywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC40MDcwMDY4ODk1ODE2ODAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NDkuNTM4ODQ2NSwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4zMzU2Nzk1MzEwOTc0MTIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NTMuNzU1NzE3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjMyMjYwNzgxNTI2NTY1NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTQ1OC44NzQwNDI1LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjI5NTQwMzkyNzU2NDYyMDk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjIuMjk3NDQ4NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4zMTkyMjM5OTk5NzcxMTE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjUuNzQ1MzUwNCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yNzM2MzE4MTExNDE5Njc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NjkuNDg2NzIzNywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMTQ3MDMxMzY2ODI1MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzUuMjE4OTM2NywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4yNzMwNDU4MDgwNzY4NTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0NzkuNjI0MjE0MiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4yOTcxNzM1ODk0NjgwMDIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODMuNDI0ODI2OSwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4yNjQ1MjgzMzQxNDA3Nzc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0ODcuNzAzNjgxMiwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yOTQ5NzA1MTIzOTAxMzY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU0OTQuMzU1MjU2NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNDg0NjYwMTQ4NjIwNjA1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NDk4Ljg4NzYwNjQsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMjMyNDIzMjAxMjAzMzQ2MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUwMy4xNjA3Mjk0LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMwMDcyODg4NzMxOTU2NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUwOC45NzE2MDE1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjI4NjE5NzYwMjc0ODg3MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MTUuMDEyOTQyNiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yNDk4ODUzMDU3NjIyOTA5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTE5LjU2OTA4MjcsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMjMxODQ4NTA4MTE5NTgzMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUyNC42NjI2NzY4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjIyNjk4Mjc0MjU0Nzk4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTUzMS43NTU0MTQ3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI1MzI3ODc5MTkwNDQ0OTQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1MzYuNjUwNTM4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjIxOTUzOTUwODIyMzUzMzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NDIuNTg4ODc0OCwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yMTE2NjYyODU5OTE2Njg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTEuNzcyODY0OCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMzk1ODc2OTQ0MDY1MDk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1NTcuODY2NzY1MywgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4yNDIzODE2MTc0MjY4NzIyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTYzLjAxMzA2MDgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMjI4OTk5NDgwNjA1MTI1NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3MC40Mjg5NzA4LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjIwNzYzODkzNDI1NDY0NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU3Ni41OTcwNTgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMjI3Mzc2NTUwNDM2MDE5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NTgyLjI0OTEwNjIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMTkwODAyNTg5MDU4ODc2MDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTU5MC44MjA2NjA2LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjI0OTgwMTA1NDU5NjkwMDk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU1OTYuMzk0MjUyNSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4yOTE1NzUxNjM2MDI4Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYwMy4wNzY5NTUsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjM4MjA4MjA0NTA3ODI3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxMC44NDg2NTksICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjAxMzc3OTEzMzU1ODI3MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYxNi42NDg5NTU2LCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjIzNTAzNzQxNjIxOTcxMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYyNS4zMzg1MDcyLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjE3NzM4NjA3NTI1ODI1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjMyLjAxMTE2OTIsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMTcxNDQ0MjA3NDI5ODg1ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTYzOS4yODc3MDY0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjE1NDQ2MjMwNzY5MTU3NDF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY0Ny40MTc4NDk1LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjE3NDIyOTg5MDEwODEwODUyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2NTMuNzg3NDM1OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4xODYxMDg0NDAxNjA3NTEzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjYzLjA3MDYwNiwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4xODk3NzAxMDI1MDA5MTU1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NjY5Ljg2NTc5ODIsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMTQ1NDA3ODg1MzEzMDM0MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY3OS4xNDI4NjEsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMTQ1MDYwMTA3MTExOTMwODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTY4OC42NzIzMzkyLCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjE2MjkxNTgxMDk0MjY0OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU2OTkuNDEzMTYyMiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4xNzk2MDY5NDQzMjI1ODYwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzA2LjUyNzc0NywgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xODU4MTE2MjM5MzA5MzExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MTYuMjYxNjUzMiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yMDE1MDEwNTY1NTE5MzMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3MjMuNTAyNjYyNCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4xNjQwMDI5ODQ3NjIxOTE3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzMzLjIxMTY1MTgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuMTc4ODE2MDgwMDkzMzgzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzQxLjAwMDUyOCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4yMjIwODM2ODc3ODIyODc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NTAuNzAzMTQ0LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjE1Nzg1NzEwNTEzNTkxNzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU3NTkuMjczOTE5MywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4xOTA5NTI2ODg0NTU1ODE2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1NzY5LjcwODY5NTcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTU5ODI1NDg4OTI0OTgwMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTc3Ny44OTUzNSwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xNDk3OTE2MTMyMjExNjg1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzg4LjgwNjg2MzUsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTQ2ODA1NzkzMDQ2OTUxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Nzk2LjgxMjYwNzMsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMTU5NTMzNDcwODY5MDY0MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTgwNy45Mjk2OTAxLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjEzMDI2Njk5NDIzNzg5OTc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU4MTYuMDgzMTMzMiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4xODE3NDM1MDI2MTY4ODIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODI3LjA2NDQ5NzUsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMTQ3NDgwMDg1NDkyMTM0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODM1LjQ5NzU3OTMsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTMxMDI0NTM5NDcwNjcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1ODQ2LjcyNjQyMjUsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTA3NDYxMDU3NjAzMzU5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg1Ny4xOTE4NzMzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjE0ODQ1OTU1MzcxODU2Njl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg2Ny4zMDUyODgsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMTI4Njg3MjYyNTM1MDk1MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg3OS4yODgzMDUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMDk5OTI2MzQ1MDUwMzM0OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTg5Mi43MTcyOTQ1LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjExNTk4ODg4MDM5NTg4OTI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5MDMuMjU1MzU5NCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4xMjcxNjU0NTE2NDU4NTExNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTE0Ljk5OTQ2ODYsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMTUyNzkzNjYwNzU5OTI1ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkyNC4xMTcwNDI4LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjExNTAzMjE1MTM0MTQzODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTkzOC45OTc4NjgsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMDk4MjUzMjcyNDczODEyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1OTUwLjc3NTgzNTMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMDk1MDExMTk3MDMwNTQ0Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk2MS4yODgzMTM0LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjEwNTA2ODA4MDEyNzIzOTIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5NzMuNDY1MTQxLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjEzNjA3NTIxMzU1MTUyMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTk4My4xNzMyOTg0LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjA4OTMyNTk4NjgwMjU3Nzk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDU5OTUuMTY2ODExNywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xMDYyNjQyNDg0OTAzMzM1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDA3LjQzODMyODcsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTMwNDE5NzYwOTQyNDU5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MDE3LjIzNDUxODMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMDg0MjkyNzg0MzMzMjI5MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjAyOS44NDUyMjQ5LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjEzNjMwOTA1NzQ3NDEzNjM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNDIuNjgwNjE2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjE0NjgwNjM3NDE5MjIzNzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYwNTIuOTYzODM3MSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xMjkwNDY0NTUwMjU2NzI5fV0sICJweWdfYW5kX29wZW5GTF9yZXVzaW5nX1BZR19FeGFtcGxlX09QRU5GTF8xNDc0NzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwNjQyMy40MzQ3NjEsICJzdGVwIjogMCwgInZhbHVlIjogMC44MzI3NTk4NTcxNzc3MzQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjQuNjAyOTIyLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuMzY5MTg3MTQ2NDI1MjQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDI2LjAxNDc2ODgsICJzdGVwIjogMiwgInZhbHVlIjogMC41ODAyNzI3OTM3Njk4MzY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MjcuNTUxNjExMiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQwNjkzODEwNTgyMTYwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQyOS4zMzEwMTgsICJzdGVwIjogNCwgInZhbHVlIjogMC4zMDA1NDU3ODE4NTA4MTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0MzEuNzk3ODQwNCwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM3MjUyOTI2ODI2NDc3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNC4xMjMyODcsICJzdGVwIjogNiwgInZhbHVlIjogMC4zMDMzNzg3MDEyMTAwMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzNi4zOTAyNTU1LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNDE3MzE0Njc4NDMwNTU3MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQzOC42MDY2MDEsICJzdGVwIjogOCwgInZhbHVlIjogMC40MTYwNTM5NTA3ODY1OTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDAuMzUwNzg3NiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjI2NjI5OTYzNTE3MTg5MDI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0NDIuMDA1MjkyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjMwMzgwMDU1MzA4MzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0My44MDM0NzksICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuMTcwNjIwOTkyNzc5NzMxNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ0NS42NzY5MTgsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzAwMjI2NjU4NTgyNjg3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDQ3LjYyNzE3NzIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTgzODYzMDE5OTQzMjM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDUwLjA2MjM5NTMsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMjQ0NjQ2MTQ2ODkzNTAxMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ1My40MTM0NTYsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjk1NjI2ODc4NzM4NDAzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU2Ljc3NjYzNywgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4xOTA4MDY4NjU2OTIxMzg2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDU5LjE2MjQyNDYsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMTkxODk3MzQ3NTY5NDY1NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2MS41ODYzNTA0LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjM0OTg2NjgzNzI2MzEwNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ2NC4wOTk4NTEsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMTk1ODg5NjM2ODc0MTk4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDY2Ljc5NTE0MzgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjc1MDkxMjYwNjcxNjE1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDcxLjA0MDMzNCwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yMzc0OTg3OTAwMjU3MTEwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc1LjExMTc3NSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4xNTQ3NjY2MDQzMDQzMTM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDc4LjA0NzcyMDQsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuMTg2ODkyMzAwODQ0MTkyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDgxLjIzODA5MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4xMDU4NDkxODQwOTU4NTk1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDg0LjMyOTQzMiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC4zMjkxNDQxMjAyMTYzNjk2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NDg5LjM5NTYyLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjMzNjgxMDkxNjY2MjIxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjQ5My45ODAyNzA0LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjM2Mjg5MTE2NzQwMjI2NzQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY0OTcuNjU1NjQ3OCwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yNTU1Nzk0MTE5ODM0OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTAxLjA0OTQxNzcsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTkwNzMxODIzNDQ0MzY2NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUwNi40MDE3MjcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMTU0NTU5NzYxMjg1NzgxODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUxMS41NzYzODAzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjA5NTg0NTExODE2NTAxNjE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MTUuMzQ5MDY3LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjIzNjM3MTA4NTA0NzcyMTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MTkuMzIwMzU5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjMyMjUxNjk3Nzc4NzAxNzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUyNS44MDE4NTI1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjI5NTQ3MTYwODYzODc2MzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjUzMC43NjkzMjg2LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjIxNDM1NTk5MDI5MDY0MTc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1MzUuMDUxODkwMSwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4yNDQ2Njg3OTY2NTg1MTU5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTM5LjkzMjM5MzgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMTI1Mzg0Nzc3Nzg0MzQ3NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU0Ni4xNDE4MjcsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuMzIwNzY2MDMxNzQyMDk1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU1MC4zNTQ5Njc2LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjMwNTU4NjkzNDA4OTY2MDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NTQuNzcyNjg3LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjE3NDE4Njg3MDQ1NTc0MTg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1NjEuNzA2OTI5NywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4wOTk1ODcyNjE2NzY3ODgzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NTY5LjY4NjYyMDcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMjE2NDQ2MjgwNDc5NDMxMTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU3NC42ODExOTA3LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjA5MDY0NTg1NzE1NTMyMzAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODAuNjE3MDgxOSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yMTQyNDU3NTE1MDAxMjk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1ODcuMjY1OTg4LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjI0MTY3NjI0MTE1OTQzOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjU5Mi4yMDA5OTgzLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjE3MjI0NzM1MDIxNTkxMTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY1OTguMzY1MjQyNSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC4zMzM0MjQ5ODU0MDg3ODI5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjA1LjA5OTUxNSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMDIwNDA3NDY4MDgwNTIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjEwLjQzODMwNTQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTQwNjA1MTk2MzU2NzczMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYxNy40MTUwNzEyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjEzMDMzNjQ0ODU1MDIyNDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjYyMy45NjAxOTE1LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjMzNjMxNzE1MTc4NDg5Njg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2MjkuNTAwOTEyNywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4xMzk3MTQ2NzMxNjE1MDY2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjM4LjE2MDcwNiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNzc1OTM3OTE0ODQ4MzI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjQ0LjIzMTgxLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjU0MjYzNjc1MjEyODYwMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY1MS4yNjU4MDYyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjE0MTE4MzQ1MDgxODA2MTgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2NTkuMzQ1MjIzMiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4wOTYyNTU0ODEyNDMxMzM1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NjY1LjU5NTIxNzUsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMDk5Mjk4MjUzNjU1NDMzNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjY3NS42MDUzMjYyLCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjIzMjI3NDkzNDY0OTQ2NzQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2ODMuODkzMzcxOCwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xNDg4NTg5NjQ0NDMyMDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY2OTIuMjI0NjYzNywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yNTgzMTY5MzQxMDg3MzQxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2Njk5LjU1NDExNywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC42MjQyNzE2OTA4NDU0ODk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MDYuNjc0MzI4MywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4xMzIzMzI2ODI2MDk1NTgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MTUuMjE1OTg0OCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4wOTgyMjI3OTk1OTkxNzA2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzIxLjcxNjc5MzUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTM5ODY4NDUzMTQ1MDI3MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjczMS4yNzgwODc5LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjEyNjk4ODY5NDA3MTc2OTcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3MzguMDI5MTg4OSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4yNzAzNjY4MTc3MTI3ODM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NDcuNzAyODE3NCwgInN0ZXAiOiA2NywgInZhbHVlIjogMC4wODU5NTQyNzEyNTY5MjM2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzU0Ljk1NTQ2NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4wMzc2ODQ4OTUwOTgyMDkzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzY0LjQxMjM5OSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4xNDExNTc4MjA4MjA4MDg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY3NzIuMDQ1MzkxNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4xNzkxMjU5MDUwMzY5MjYyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2NzgxLjU3MzMxNTksICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMTMyNTMxMzI5OTg5NDMzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2Nzg5LjkwNjE2NTYsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuMDY1MTMyNTg4MTQ4MTE3MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjc5OS4zMDY5Njc3LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjIyMzg5ODc5ODIyNzMxMDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MDcuNjI4NDM5NywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4xMTk2MTU5NjQ1OTE1MDMxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODE3LjM1MTg5NzcsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuMTA4ODYyNjYwODI1MjUyNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjgyNS43OTA4NTg1LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjA3MzAwODc5MDYxMjIyMDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4MzYuMDg2MTc0NywgInN0ZXAiOiA3NywgInZhbHVlIjogMC4wNDEzOTcxNTgwNTY0OTc1NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg0NC40MTEzNTI0LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjIwMjI1MTIyNTcwOTkxNTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NTUuMDg1ODYyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjIwMDk2NDcxOTA1NzA4MzEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY4NjMuMTY3MDg3NiwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNzgzNzk5ODI3MDk4ODQ2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODc0LjExMzg5MjgsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuNDQ3NDkzNzMxOTc1NTU1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2ODgyLjM0MzcwMzMsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMjI4MDk1OTYzNTk3Mjk3Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjg5My40Mzg4NTA2LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjIzMTU2OTA2NjY0MzcxNDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkwNS40MzYxMDcsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMzUzMjk4ODQyOTA2OTUxOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTE2LjYwMTg4NDYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjI1NzY3NjU3MTYwNzU4OTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkyNi44NTgwMDksICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMTgyNDA5MjU2Njk2NzAxMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjkzOS42OTExMzMzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjEwODU3MTAzMDE5OTUyNzc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5NTEuMzY2MjIxNywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNDgwNDM1NjY5NDIyMTQ5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTYwLjgzMzAxMSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4wNzE0ODQxMTEyNDk0NDY4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTcyLjIyOTg4MzcsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMTk3MjkxNTA4MzE2OTkzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2OTgzLjU0OTE1NjQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMjcyMDIyMDA4ODk1ODc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDY5OTMuMzI5MDY4MiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4xMTI3NDQ0NTgwMTk3MzM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDA1LjU2NzQ5MDgsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuMTE4OTEyNzE5MTkwMTIwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA3MDE1Ljc3MjkwNDksICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMDk1NDkwOTk5NTE5ODI0OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAyNy4wODY2MDc3LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE5ODEyMjgxNDI5NzY3NjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNzAzOS40OTMzMDUyLCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjA1MzUxNTcyODU2MzA3MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNzA0OS4xNjMxMDc2LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjE4MjI5NDQ4Nzk1MzE4NjA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNjEuNzY0NzI0MywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4xMTUzODkzOTE3Nzk4OTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDcwNzQuMjUzMDg2NiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4wNDEwNzA3Nzc5MjI4Njg3M31dfX1d", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/test/accuracy%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3Rlc3QvYWNjdXJhY3kiLCAicnVuVG9TZXJpZXMiOiB7InB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTIwODUyMF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4wNjMzNjcxLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjEyNjk2NDYsICJzdGVwIjogMiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMTg5NDA3NiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4yNTE2Njk0LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjMxNzI1LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjM3OTIwOSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny40NDEzMDg1LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjUwNDcxOTMsICJzdGVwIjogOCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNTcwMTE4MiwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny42MzE3MTgsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3Ljc1MTIzNzksICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjkyNzE3NDYsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjEzNDYxNzYsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjI5MjAzNCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNDQ0ODg1MywgInN0ZXAiOiAxNSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNjM1MTI4NSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguODExNDc3MiwgInN0ZXAiOiAxNywgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguOTQ2MTUxLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4wOTg5NjA2LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4yNDIwOTgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjM5NjQ5MTMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjUzMTQ3OSwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuNjg1NzA1NywgInN0ZXAiOiAyMywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuODIzMzQ2NCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuOTY1MTUxMywgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMTc1MzMxNCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMjc0MTgxNCwgInN0ZXAiOiAyNywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMzE0NDQwMywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMzYwNDkwOCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNDAwNzYzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC40MzczODkxLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC40NzM3OTY2LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41MTQ1MDU2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41NTA4OTU1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41ODczODY2LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42MjY3NjIsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjY2OTI4NDgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjcwNTk0NTUsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjc0MjQ2MTQsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjc3OTM1NDMsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjgxNTg1MDMsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjg1NDgwMTcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjg5MDk3MywgInN0ZXAiOiA0MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuOTI4MTg3MSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuOTY4NTIwMiwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDA2MTk5LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wNTE4NTIyLCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wOTQ4OTg3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4xMzE5NDQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjE2ODU4NSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjA2NzE0NiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjQ0Mzg1NSwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjg3MjExLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4zMzAzNDYzLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4zNjk5MDMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQxMDUxNzcsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQ0NjM5MTgsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQ4MTg4MDcsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjUxODQwMiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTU2NTU2NSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTk4MTQ3NCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNjMzODUsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjY3MDk3NzYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjcwNjYwMzUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc0MTgxOTksICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc4MTA5NDMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjgxNzA1NDcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjg1Mjg2NTIsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjg5NjcwOCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuOTMyNjUxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS45NzAyMTgyLCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wMTAwMDY0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wNDgzMDQzLCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wOTM5ODQ0LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4xMzE0MzMyLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4xNjk2NzMyLCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yMDgzNDcsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjI1MDU3NDYsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjI4Njk0NzMsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjMyNjc3MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMzY1Njg1NywgInN0ZXAiOiA4MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDAzODc2OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDQxNjc4NSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDgzMDgxLCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41MjgxMzg2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41NjU3NDQsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjYwMjc1OCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNjQwMTU0MSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNjc3MjQ5NCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNzE3NDMxMywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNzU0OTU4OSwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNzkxNzA4LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi44Mjc3MTI1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi44NjQ3MDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjkwNzQ3MywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTQ3ODY0OCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTg1ODMzLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4My4wMjI3MjksICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjA1OTcyNjUsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjEwNjE5NDMsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTEzMDgzNzZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjg1OC44ODU2ODUyLCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU4Ljk1NTQ4MzQsICJzdGVwIjogMiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMDMxODkyOCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4xMjE4MzE3LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjE5ODU2NTUsICJzdGVwIjogNSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMjcwNDM0NCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4zNDE2ODg2LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQxMjA3OTMsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNDgyMzEyNCwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS41NTI4NTY3LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS42Mjc2NjcyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43MDM4MDE0LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43ODY2NDczLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS44NTc3NjE5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS45Mjk2ODQsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjAwMjQ5NjcsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMzg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjA3MzY4LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4xNDUzMzA0LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yMTc3OTYzLCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yOTExMjk4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4zNjcwMDQyLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC40Mzc0Nzk1LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC41MDUzMzc3LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC41NzU1OTA2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC42NDk3MzY0LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43MTkxMTk1LCAic3RlcCI6IDI2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43ODcyMjc5LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC44NjU0MjQ2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC45Mzg3MTEsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjAwNjI0MjgsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjA3OTM3MiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuMTUwMjc1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4yMjgxNTAxLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zMDM1NDA3LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zNzU4OTI2LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS40NDcxMTczLCAic3RlcCI6IDM2LCAidmFsdWUiOiAxLjB9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS41MjA5NTQ4LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS41OTY1NDQ1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS42NzI5MzI0LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS43NDg1NDkyLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS44MjkxODU1LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS45MTA2MjMsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjk4OTQ2OTUsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjA3NTcwMTIsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjE2MTc5OTcsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjI1NjA4MTMsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjM0MDc3ODYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjQyNTUxMTgsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjUxMTY3MDQsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjU5NTIyOTQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjY3NjA4NjIsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjc1OTY0NjQsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjg0MjU1NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuOTI1NzcxMiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDEwNjE1NiwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDk4NDI5LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4xNzk5NTc0LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4yNjQwOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMzQ0MjA1NiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNDI3MjUyLCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My41MTM2NjA3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My41OTkwODk2LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My42ODI4OTcsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjc2NzUzNjksICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjg0NjM5MjIsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjkyOTQzMzMsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjAxMjEwNTcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjA5MDUyMzcsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjE2Nzk3ODgsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjI1NDQyNTMsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjMzMjA5MDYsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjQxMDY3NzQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjQ5MDkwNDgsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjU3MjIzOTYsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjY0ODc2NDgsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjcyNTkxMjYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjgwMzIwNTUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0Ljg3OTMzNzgsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0Ljk1ODQzODIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjAzOTI5MjgsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjExOTQxOTMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjIwMjA3MywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMjgxMjExOSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMzYwMzgzMywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNDQ2NzE1NiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNTI2NTIyNCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNjEzMjUzNCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNjkzMjU4NSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNzcxNjY2NSwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuODQ4MjQzLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS45MjU2MDMyLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4wMTg5NTc5LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4xMDc1OTcsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjE5MTAzNzcsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjI1NzY5MDIsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjMxMDEyNSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMzU5MDA2NCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDA4OTQ1MywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDY1NzM0NSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNTEzMjUxOCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn1dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuMDcxODE3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjIxMDM3ODYsICJzdGVwIjogMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuMzUwNTgxNiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC40OTQyNjI1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjYzMTE2NzQsICJzdGVwIjogNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNzU5NjM4OCwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC45MDA4MDMzLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjA0NzAxOSwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS4xODM4NDk4LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNDQ0NDQ0NDQ3NzU1ODEzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjMxNTQ4NTIsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjQ1NjExMTcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjU4NzU5NzYsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjcyNjgzMjIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjg1NzIwODMsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjk5MTIxNzksICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjExODMwMTIsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjI3NDczMTksICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjQwMzA4NzYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjUzMzY4NSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTIuNjYwMDAxLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi43OTUxNzEzLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi45MzA3Mzk0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4wNjEyNzc5LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4xNjExOTgxLCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4yNTI2MjU1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4zMzg2NzAzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My40MjExNjk1LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My41MDMxNDkzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjU1NTU1NTU4MjA0NjUwODh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My41ODg2MzY2LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My42NzI1OTkzLCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My43NTg2MzYyLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My44NDQ0ODM2LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My45Mjg3NjM5LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4wMTA4MTIsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk0LjA5NDEwOTgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk0LjE3MTkwNCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMjY5MDI1NiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMzUyMzk1LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC40MzU1MjQ1LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC41MTY4NTk1LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC42MDg4ODEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk0LjY4ODE3OSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNzY4MTM5NiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuODU1MTAyMywgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuOTM4MTU0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4wMjMzOTM5LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4xMDc5NjYsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjE4OTQ2NiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMjc1NzAxOCwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMzY5ODkwNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNDQ4NDA2NywgInN0ZXAiOiA1MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNTI4ODE0OCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNjIxNDU4OCwgInN0ZXAiOiA1MywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzAxMjg0NCwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzgwMTY5NywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuODYyNzg3LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS45NDQ5OTcsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjAyMzUyNDUsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjEwOTY5MSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTkxMjY1OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMjcyMTkzNCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMzY5MTcxNCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNDUxNDY1LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjM4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni41MzE5NDI2LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni42MTc2Mzg4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni43MDI4Njc3LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni43ODE5NDM4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni44NjYwMDc4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni45NDU1OTk4LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny4wMzY3MDg2LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny4xMjI3NTMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjIwMzI0MzcsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjI4NjAyNjcsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjM3ODU5NjgsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjQ2MjI3MzYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjU0MTIxNzgsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjYyOTU2MDUsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjcwNzAyOSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNzg1MTMzMSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuODY3Njk2MywgInN0ZXAiOiA4MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuOTU2ODk2OCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMDM1ODM0OCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMTIyMzc5OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMjAzNTc5NCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMjg1ODczNCwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMzc3NDY2NywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNDU1NTQyOCwgInN0ZXAiOiA4NywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNTQ0OTM5OCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNjI4MzYyNCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNzA3MTE3OCwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNzg3MjczMiwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguODczODg0NywgInN0ZXAiOiA5MiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguOTU0ODAxNiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMDM0OTY0MywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMTI0NTQ4NywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjA5MjkyMiwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjg3MzgwNSwgInN0ZXAiOiA5NywgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMzc3Mjg2MiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4yMjIyMjIyMjM4Nzc5MDY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNDU3Njg3NiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNTQ0MDc5OCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH1dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTQ1NjA5X0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjU3NzAzNjQsICJzdGVwIjogMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjE1NDQzNSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi42NTYyNDU3LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjY5Mzc2MzcsICJzdGVwIjogNCwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNzMwOTY2NiwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi43Njc1NTM2LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjgwOTQ0MjgsICJzdGVwIjogNywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuODQ2MzU4MywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjYxMTExMTEwNDQ4ODM3Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44ODM4MzQ2LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjkyODAwNzYsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjk3NzA1MjcsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjAyODI5NjUsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjA4MTEwNjIsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjEyNDQ4NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMTYzNDczLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yMDExNTY2LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yNDgwNjU1LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yODc4OTIzLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zMjkxMjA0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zNzc0NDA3LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40MTYzNzU2LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40NTY3NjMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjQ5NDE5NSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNTMyNjQ1NywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNTcwOTA2MiwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjA5MDg4NywgInN0ZXAiOiAyNiwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjQ3MzA4OCwgInN0ZXAiOiAyNywgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjg3NjE5MiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNzI0NzY4OSwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNzcyODMxMiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODExMTg3NSwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC42MTExMTExMDQ0ODgzNzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODQ4MTcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjg4NDI3MjgsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuNjExMTExMTA0NDg4MzcyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjkyNzgxOSwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuOTY5OTQxNiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDA3MzIyOCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDUyNjM5MiwgInN0ZXAiOiAzNywgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDk0ODU0LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4xMzU2NzMsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjE4MDA3NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjE3NDgwMiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjU2MDU3LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4yOTI0MjA2LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zMjkwNTM5LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zNjQ1MDI0LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40MDMzNjk3LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40NDc1MjA3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40ODQ3MjY3LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41MjEyMjIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjU2MzUxOTcsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjYwMjA1NzUsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY0Mzc5NTcsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY4MTg1MTYsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjcyMTgwMywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNzU4MzcxNCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNzk3MDk4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC44MzM4MjU2LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC44NzU4OTA1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45MTI0OTc1LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45NDkyOTU1LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45ODQ0MzAzLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wMjQyNTgsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjA2NjI4NTYsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjEwOTUyNCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMTQ2NDU5NiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMTg5NzM3NiwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMjI5MTUsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjI2NTgxNCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzAxNDkxNSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzQyMDAyNCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzgyMzIzNSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDIwNDYyOCwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDU5Njk1LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS40OTY0NDY0LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS41MzQxMTY1LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS41ODc4ODcsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjYyNTY3NjQsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjY2MzgxOTYsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjcwMTE1OCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzM4MzIxLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS43NzU1OTk3LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44MTQ2ODQ5LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44NTU0MzU4LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44OTA5NDA0LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45MzA3MzgyLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45Nzg1NDgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjAxNTE1MDMsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjA1NDk4MiwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMTAwNzU4LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4xMzgzNjksICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjE3NDk3OCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjEwNTc5NiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjUwMTg4NiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjkwMzU2MiwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzI3OTY4LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4zNjUxODI2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40MDI0OTAxLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40NDIwNzUzLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40ODIyODI0LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni41MzE1OTIsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNTAwNTc3MiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni41Nzc3Mjc2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjY1NDkxMiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni43Mzc2NjQ1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjgxNjEyMDksICJzdGVwIjogNSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuODk3NjQ1NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni45Nzk4NTgyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjA2NDQzODYsICJzdGVwIjogOCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMTUwOTA1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjIzOTQ1NzQsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjMyMjE0ODgsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjQwMDc0MiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNDgzNzc4NywgInN0ZXAiOiAxMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNTY5NjY4NSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNjYyMzMwMiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNzkxMjE0LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny45MTI0MzAzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4wNDAyMTcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjE0NjIwNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguMjIyOTkzOSwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguMjk5MDk1NiwgInN0ZXAiOiAyMSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguMzc0MDU0NCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNDQ5MTkxMywgInN0ZXAiOiAyMywgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNTMyODY4NCwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNjEyODQxNCwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNjkwNjMxMiwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNzcxNTU3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC44NDQ1OTM1LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45MjAwNzgzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45OTY3NjM3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4wNzY3MzI0LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4xNTI2MDkzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4yMzgzNzgzLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4zMjMxNTYsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjQwMjIxMzgsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjQ4MDg2NzYsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjU2ODYwMDIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjY0Nzc5NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNzI3Mzk4MiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuODEwODU0NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuOTIxMjgsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjAzNzU5OTgsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjE1NDA3NTQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjI2NjA0MDYsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjM3MjU1OTUsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjQ5Mjk4NzIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjYyNDg5NjgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjc0MjA5MywgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuODYwMDQ0NywgInN0ZXAiOiA0OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuOTY5NjAwNCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMDc4MTA3NiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMTkxMTQxNiwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMzA0NzgwNSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNDIxNzk2MywgInN0ZXAiOiA1NCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNTMwMDU4OSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNjQwMDYyOCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNzUwMzI1MiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuODY3NTc5LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS45Nzc3MjUsICJzdGVwIjogNTksICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjA4ODI0MTMsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjE5OTg0MTMsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuNjY2NjY2Njg2NTM0ODgxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjMwNzMwNywgInN0ZXAiOiA2MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNDIyNjIzNCwgInN0ZXAiOiA2MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNTI4NDg4NiwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNjMyMDU5LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi43NDM2NDQ1LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi44NDUyNDA4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi45Njg1NTg4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4wNzUyMzQ0LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4xOTEyNjI1LCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4zMDYyMzMsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjQyNzEyNTIsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjU0Nzg2ODUsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDEuMH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjY3MTcyOCwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNzk2NTQ3MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuOTMwODg1LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC4wNTMyODU4LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC4xODcxNTksICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjMwNzM1NywgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuNDM1NDY5LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC41NTM0NTQ2LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC42Nzc0MzgzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC44MDAwNjk4LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjMzMzMzMzM0MzI2NzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC45MjQyMzA2LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4wNDg4MjM2LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4xNzQwOTI4LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4zMDE2Njk0LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS40MjI4ODg1LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS41NDYxOTAzLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS42NzMzMjk4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS43OTkwNTI3LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjY2NjY2NjY4NjUzNDg4MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS45MjU0MDIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjA0NDAzNzYsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjE2NzAwMzYsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjI5MDE3NzYsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjQxNTc2ODYsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjUzNzMzMywgInN0ZXAiOiA5NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNjYwOTQxNiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNzgyNjg2NywgInN0ZXAiOiA5OSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuOTExMjkxLCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfV0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUxMTUxNjI0X0JTNjQiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuMzUzODkyNiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40MDI1NzUsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjY2NjY2ODY1MzQ4ODE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNDUwOTAyNywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40OTY0NDQ1LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU0MjQ0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU5MjE1MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My42MzkxODg4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjY5MTE1NCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjk0NDQ0NDQxNzk1MzQ5MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My43Mzg2NTQsICJzdGVwIjogOSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNzk0OTEzMywgInN0ZXAiOiAxMCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODQxMTI4MywgInN0ZXAiOiAxMSwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODg1NDUxMywgInN0ZXAiOiAxMiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuOTI5NTA5MiwgInN0ZXAiOiAxMywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuOTczMzAyMSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMDE5Njk4MSwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMDY4MzU4LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xMTM1OTgzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xNTk5NTY1LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4yMTAxODY3LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4yNTcxNTA0LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zMDE5NTE0LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zNDU2MDQ0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zOTE1OTYzLCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC40MzY0MjgsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjQ5MjE4NDYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjUzNjk5MjgsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjU4NDQ0MDUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjYzMTE0OTMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjY3NTQ4ODUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjcyMjE3MTUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljc3NjM5NzUsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjgyMzA1NzcsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuOTQ0NDQ0NDE3OTUzNDkxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljg2ODMzNTcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjkxMzc0MzcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljk2MDI1OTQsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjAwNDAxMzUsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjA1MjA3MDQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNTU1NTU1NTgyMDQ2NTA4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjEwMjE4MjEsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE0NzYzMTIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE5ODk0MzEsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI0ODE3MzIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuNzIyMjIyMjA4OTc2NzQ1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI5MzY4LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjcyMjIyMjIwODk3Njc0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4zMzgzNzgyLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4zODY3MzMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQzNDM0ODMsICJzdGVwIjogNDUsICJ2YWx1ZSI6IDAuODMzMzMzMzEzNDY1MTE4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQ4Njc0MSwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNTM2Mzc1MywgInN0ZXAiOiA0NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNTgxNzcyNiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjI2NiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjgyNDU3NCwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzM0MzU4NSwgInN0ZXAiOiA1MSwgInZhbHVlIjogMS4wfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzg5NDE5NCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45NDQ0NDQ0MTc5NTM0OTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuODQ0MTAwMiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuODk2OTUyMiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuOTQ3ODEzMywgInN0ZXAiOiA1NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDAxODM5NiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDUyMzYyNCwgInN0ZXAiOiA1NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTE0NzA2OCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTY0MTkyMiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMjEyOTY0MywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMjg2Nzk3LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4zNjkzODUsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjQ0MTMzNDIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjUxNDAyOTMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjU4MjY5MTQsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjY1MDY5MSwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNzE2MTU5NiwgInN0ZXAiOiA2NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNzgzMDE4NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuODY0NjU3OSwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuOTMxMzA5MiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDAzNDI2MywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4yNzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDcwNDI1NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC40NDQ0NDQ0NDc3NTU4MTM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMTM4ODI1NCwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4zODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMjA0ODA2MywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC41NTU1NTU1ODIwNDY1MDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMjgxMzE5OSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMzQ4NjkzMSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDE3ODQ2NywgInN0ZXAiOiA3NywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDg1Njc0MSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNTU0NDEyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgzMzMzMzMxMzQ2NTExODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny42MjQ2NDM2LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny42OTM4NzQsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljc2MjUzNSwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuODM1NDA0OSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuOTE3MDEzNCwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC43MjIyMjIyMDg5NzY3NDU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuOTgyOTIsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjA2MjQ1MDQsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjEyOTM5MTQsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjE5NDYzODMsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjI2MTE4MzcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjMzMDA1NywgInN0ZXAiOiA5MCwgInZhbHVlIjogMC44MzMzMzMzMTM0NjUxMTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMzk4MTE3LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjc3Nzc3Nzc5MTAyMzI1NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC40NjQ3MzQ2LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjg4ODg4ODg5NTUxMTYyNzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC41MzgxNTQsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjYwOTg0MTgsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuODg4ODg4ODk1NTExNjI3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjY3NzQ0NywgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNzQ2NTg0NywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODEyOTQyNywgInN0ZXAiOiA5NywgInZhbHVlIjogMC44ODg4ODg4OTU1MTE2MjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODg1NDQ1OCwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguOTYyOTg0NiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC43Nzc3Nzc3OTEwMjMyNTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTkuMDI5MSwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuNzc3Nzc3NzkxMDIzMjU0NH1dfX1d", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/train/accuracy%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3RyYWluL2FjY3VyYWN5IiwgInJ1blRvU2VyaWVzIjogeyJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMDg1MjBfQlMxMjgiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMDYzMzI3OCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY3NjQ3MDU3NzcxNjgyNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4xMjY5MDIsICJzdGVwIjogMiwgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMTg5MzcsICJzdGVwIjogMywgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMjUxNjMwOCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY3NjQ3MDU3NzcxNjgyNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4zMTcxOTQ3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjc2NDcwNTc3NzE2ODI3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjM3OTE3MDQsICJzdGVwIjogNiwgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNDQxMjY0NCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjY3NjQ3MDU3NzcxNjgyNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny41MDQ2ODA0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNjg4MjM1MjgyODk3OTQ5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjU3MDA3NjcsICJzdGVwIjogOSwgInZhbHVlIjogMC43NDcwNTg4MDg4MDM1NTgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNjMxNjgzOCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuNzUxMTkzOCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43NTI5NDExOTExOTY0NDE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuOTI3MTM3NCwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC43NDExNzY0ODYwMTUzMTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguMTM0NTcsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzQ3MDU4ODA4ODAzNTU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjI5MTk0NTcsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNzQxMTc2NDg2MDE1MzE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjQ0NDg0NzgsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjYzNTA1NCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OC44MTE0MzkzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OC45NDYxMTAyLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4wOTg5MDE1LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjgyOTQxMTc0NTA3MTQxMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4yNDE4NDUsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjM5NjQ1NDMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuNTMxNDQ4OCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS42ODUwMzYsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjgyMzMwNjMsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5Ljk2NTA5MjcsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuODE3NjQ3MDM5ODkwMjg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjE3NTEyODIsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjI3NDE0NzUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzQxMTc2NDg2MDE1MzE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjMxNDQxMDcsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzQ3MDU4ODA4ODAzNTU4M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjM2MDQ1ODEsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuNzU4ODIzNTEzOTg0NjgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjQwMDcyNywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC43NjQ3MDU4OTYzNzc1NjM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNDM3MzUyNywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC43NzA1ODgyMTkxNjU4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC40NzM3NjEzLCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjc4MjM1MjkyNDM0NjkyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41MTQ0NzQyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41NTA4NTkyLCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjc4MjM1MjkyNDM0NjkyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41ODczNTEzLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjc5NDExNzYyOTUyODA0NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42MjY3MjcsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjY2OTI0NzQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjcwNTksICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzQyNDIzNSwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MTE3NjQ3MTcxMDIwNTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzc5MzE4MywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC44MTU4MTM4LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC44NTQ3NjY4LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjg5MDkzNjQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjkyODE1MDQsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuODUyOTQxMTU1NDMzNjU0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjk2ODQ4NywgInN0ZXAiOiA0NSwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDA2MTYzNCwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDUxODEzOCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMDk0ODYzMiwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMTMxODk4LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4xNjg1NDgzLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4yMDY2ODIsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjI0NDM0OTUsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjI4NzE3NTQsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjMzMDMwOTQsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjM2OTg2NzMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjQxMDQ4MiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNDQ2MzU1MywgInN0ZXAiOiA1NywgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNDgxODQ2NiwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTE4MzY5MiwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTU2NTI0MywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS41OTgxMTEyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjc3NjQ3MDYwMTU1ODY4NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS42MzM4MTMxLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS42NzA5MzcsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuNjgyMzUyOTYwMTA5NzEwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjcwNjU2ODUsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNzQxNzg2LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS43ODEwNjU1LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS44MTcwMTk1LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS44NTI4MjkyLCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS44OTY2NzM0LCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS45MzI2MTUzLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS45NzAxODIsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuODU4ODIzNTM3ODI2NTM4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjAwOTk3NjQsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjA0ODI2NzYsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjA5Mzk0NywgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTMxMzk4MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTY5NjMzNiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMjA4MzAyNSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMjUwNTM5LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjc2NDcwNTg5NjM3NzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yODY5MDMxLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4zMjY3Mzc0LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4zNjU2NTEsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODU4ODIzNTM3ODI2NTM4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQwMzgyOTYsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQ0MTY0LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjcyOTQxMTc4MDgzNDE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQ4MzA0MywgInN0ZXAiOiA4NCwgInZhbHVlIjogMC43ODIzNTI5MjQzNDY5MjM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNTI4MTAxMiwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41NjU3MDc3LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi42MDI3MjM0LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi42NDAxMTg4LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjg0NzA1ODgzMjY0NTQxNjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi42NzcyMTU2LCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi43MTczOTY1LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi43NTQ5MTQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjc5MTY3MiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuODI3Njc3MiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuODY0NjY1NywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTA3NDM3OCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTQ3ODI5LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi45ODU3OTYyLCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4My4wMjI2OTQsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuODA1ODgyMzM0NzA5MTY3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjA1OTY5MjYsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjEwNjE1ODMsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM31dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTMwODM3Nl9CUzY0IjogW3sid2FsbFRpbWUiOiAxNjk1MjAyODU4Ljg4NTY1MDksICJzdGVwIjogMSwgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTguOTU1NDQ5NiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4wMzE4NTksICJzdGVwIjogMywgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMTIxNzk2NCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS4xOTg1MzE0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjI3MDQwMDUsICJzdGVwIjogNiwgInZhbHVlIjogMC42ODgyMzUyODI4OTc5NDkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMzQxNjU1NSwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjczNTI5NDEwMzYyMjQzNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS40MTIwNDI0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNzU4ODIzNTEzOTg0NjgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQ4MjI3ODgsICJzdGVwIjogOSwgInZhbHVlIjogMC43NDExNzY0ODYwMTUzMTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNTUyODIzOCwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC43Mjk0MTE3ODA4MzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS42Mjc2MzE0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjc2NDcwNTg5NjM3NzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43MDM3NjgzLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc1ODgyMzUxMzk4NDY4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS43ODY2MTMsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuODU3NzI5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg1OS45Mjk2NDg0LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjY4ODIzNTI4Mjg5Nzk0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4wMDI0NjI2LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjM5NDExNzY1MzM2OTkwMzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuMDczNjQ0OSwgInN0ZXAiOiAxNywgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuMTQ1Mjk2MywgInN0ZXAiOiAxOCwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yMTc3NjA2LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yOTEwOTY3LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjM2Njk2OTMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjQzNzQ0NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuNTA1MzA1MywgInN0ZXAiOiAyMywgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuNTc1NTU2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC42NDk3MDc4LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43MTkwODM4LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43ODcxOTI4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC44NjUzODY3LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC45Mzg2NzU5LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4wMDYyMDk0LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjA3OTMzODgsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjE1MDI0LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4yMjgxMTcyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zMDM1MDY2LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zNzU4NTk3LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS40NDcwODM3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjUyMDkwNjQsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjU5NjQ4NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuNjcyODk4OCwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuNzQ4NDkzMiwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuODI5MTQ2OSwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuOTEwNTgyNSwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuOTg5NDMwNCwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44MTE3NjQ3MTcxMDIwNTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuMDc1NjU1LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4xNjE3NjIyLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4yNTYwMzg0LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4zNDA3MjU3LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi40MjU0NzIsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjUxMTYzMDUsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjU5NTE5MSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC43MDU4ODIzNzA0NzE5NTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuNjc2MDQ2LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi43NTk2MTQ1LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi44NDI1MTY0LCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjc1ODgyMzUxMzk4NDY4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi45MjU3MjM4LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4wMTA1NzcsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDk4MzkwNiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4xNzk5MDIzLCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjgwMDAwMDAxMTkyMDkyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjI2NDA1MSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44MDU4ODIzMzQ3MDkxNjc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMzQ0MTY3NSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNDI3MjIxNSwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNTEzNjE5NCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNTk5MDQ4NiwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNjgyODU5LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My43Njc0OTg3LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My44NDYzNTU0LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjU1Mjk0MTIwMzExNzM3MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My45MjkzOTA0LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjcyMzUyOTM5ODQ0MTMxNDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wMTIwNjQyLCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjc2NDcwNTg5NjM3NzU2MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wOTA0ODcsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjE2NzkxNzcsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjI1NDM4NzksICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjMzMjA0ODcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuNzI5NDExNzgwODM0MTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNDEwNjM4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC40OTA4NzQsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjU3MjIwNCwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNjQ4NzI3MiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNzI1ODc0NywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuODAzMTY5LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC44NzkzMDA0LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC45NTg0MDU1LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS4wMzkyNTksICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuNzk0MTE3NjI5NTI4MDQ1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjExOTM4MDcsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjIwMjAzMTksICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjI4MTE3MywgInN0ZXAiOiA4MywgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMzYwMzQ3LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS40NDY2NzcyLCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS41MjY0NzgzLCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS42MTMyMTQzLCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjY5MzIyMzUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1Ljc3MTYyODYsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1Ljg0ODIwNjMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjkyNTU2NTIsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjAxODg5NiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMTA3NTU3MywgInN0ZXAiOiA5MywgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMTkxMDAxLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4yNTc2NTU5LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4zMTAwOSwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMzU4OTc4NywgInN0ZXAiOiA5NywgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDA4ODk3OSwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDY1Njk4NSwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNTEzMjExMywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N31dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMjM0NTMzX0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuMDcxNzc3OCwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY0NzA1ODg0NDU2NjM0NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC4yMTAzNDE3LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjUyOTQxMTY3MzU0NTgzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjM1MDUzNDcsICJzdGVwIjogMywgInZhbHVlIjogMC42NTI5NDExNjczNTQ1ODM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNDk0MjIxNCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjY4ODIzNTI4Mjg5Nzk0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC42MzExMjcsICJzdGVwIjogNSwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNzU5NTk4NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC45MDA3NTYsICJzdGVwIjogNywgInZhbHVlIjogMC44MTc2NDcwMzk4OTAyODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuMDQ2OTA5MywgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS4xODM4MDY3LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjk0MTE3NjY1MjkwODMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjMxNTQ0NDcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjQ1NjA2NSwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuNTg3NTU1NiwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC42NzY0NzA1Nzc3MTY4Mjc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuNzI2NzkxLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjc1Mjk0MTE5MTE5NjQ0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS44NTcxNjUzLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS45OTExNzk3LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi4xMTgyNTg1LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi4yNzQ2ODgyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi40MDMwNDM3LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjc4MjM1MjkyNDM0NjkyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi41MzM2NDQ0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjc3NjQ3MDYwMTU1ODY4NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Mi42NTk5NTcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjc5NTEyODMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjkzMDY5ODQsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjA2MTIzOSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMTYxMTYyMSwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC43MzUyOTQxMDM2MjI0MzY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMjUyNTc1LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjcwNTg4MjM3MDQ3MTk1NDN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My4zMzg2MzAyLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjcyOTQxMTc4MDgzNDE5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjQyMTEzNTcsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzI5NDExNzgwODM0MTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNTAzMTE0MiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC43NTI5NDExOTExOTY0NDE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNTg4NjAwNiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNjcyNTY0MywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNzU4NTk3LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My44NDQ0NDgsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjkyODcyNjcsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODQxMTc2NDUwMjUyNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMDEwNzc3NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMDk0MDcyNiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44MjM1Mjk0MjIyODMxNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMTcxODY4NiwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMjY4OTk0MywgInN0ZXAiOiAzNywgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMzUyMzU4NiwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNDM1NDg3NSwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC44MjM1Mjk0MjIyODMxNzI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNTE2ODIzMywgInN0ZXAiOiA0MCwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNjA4ODQ1MiwgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNjg4MTQ2OCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuNzY4MTA3MiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuODU1MDY5OSwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuOTM4MTIyNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMDIzMzU4OCwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMTA3OTE0NCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMTg5NDI5NSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMjc1NjYyMiwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMzY5ODUzNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNDQ4MzcwMiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNTI4Nzc3NCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNjIxNDI0MiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzAxMjQ3MiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzgwMTM0NCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuODYyNzUyMiwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuOTQ0OTYyNywgInN0ZXAiOiA1NywgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMDIzNDkxOSwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTA5NjU0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni4xOTEyMzM5LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjI3MjE1OCwgInN0ZXAiOiA2MSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMzY5MTM1NCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNDUxNDE3NywgInN0ZXAiOiA2MywgInZhbHVlIjogMC40NzY0NzA1ODk2Mzc3NTYzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjUzMTg5OSwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNjE3NTk2LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjc3MDU4ODIxOTE2NTgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjcwMjgzMzQsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2Ljc4MTg5NCwgInN0ZXAiOiA2NywgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuODY1OTcyMywgInN0ZXAiOiA2OCwgInZhbHVlIjogMC44Mjk0MTE3NDUwNzE0MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuOTQ1NTY1MiwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMDM2NjcyNiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMTIyNzE5NSwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMjAzMjA2NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMjg1OTk3MiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMzc4NTYxLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny40NjIyMzYsICJzdGVwIjogNzUsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjU0MTE4MjMsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjYyOTUyMiwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNzA2OTk1LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny43ODUwOTgsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3Ljg2NzY2MjQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3Ljk1Njg2MDMsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjAzNTc5NzgsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjEyMjM0OTMsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMjAzNTM4LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjI4NTgzNjcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMzc3NDM2OSwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNDU1NTA4NywgInN0ZXAiOiA4NywgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNTQ0ODk0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC42MjgzMzAyLCAic3RlcCI6IDg5LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC43MDcwNzk2LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4Ljc4NzIzNjUsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4Ljg3Mzg0NzcsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4Ljk1NDc2MjcsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjAzNDkxOCwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMTI0NTEsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjIwOTI1NjQsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjI4NzM0NTIsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjM3NzI1MjYsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuNDE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjQ1NzY1MTQsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNTQ0MDQ2MiwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuODI5NDExNzQ1MDcxNDExMX1dLCAicHlnX2FuZF9vcGVuRkxfc3RhbmRhbG9uZV9yZXVzaW5nX1BZR19FeGFtcGxlMTQ1NjA5X0JTMTAwIjogW3sid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjU3NzAwMTMsICJzdGVwIjogMSwgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjE1NDA5LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjY1NjIxMzMsICJzdGVwIjogMywgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjkzNzI5LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjczMDkxNDQsICJzdGVwIjogNSwgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNzY3NTE4MywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44MDk0MDg3LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjcwNTg4MjU0OTI4NTg4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjg0NjMyNCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjY3MDU4ODI1NDkyODU4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44ODM3OTcsICJzdGVwIjogOSwgInZhbHVlIjogMC42OTQxMTc2NjUyOTA4MzI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuOTI3OTcwNiwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC43NDExNzY0ODYwMTUzMTk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuOTc3MDEzLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4wMjgyNDc2LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4wODEwNjksICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjEyNDQ1MiwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43MTc2NDcwNzU2NTMwNzYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMTYzNDM2LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yMDExMTg1LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yNDgwMjM1LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yODc4NTU0LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zMjkwODEzLCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg1ODgyMzUzNzgyNjUzODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4zNzc0MDU0LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40MTYzMzg0LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40NTY3MzM1LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjg0NzA1ODgzMjY0NTQxNjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40OTQxNTc2LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My41MzI2MDk1LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjc5NDExNzYyOTUyODA0NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My41NzA4Njg3LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjgwMDAwMDAxMTkyMDkyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjYwOTA1NDYsICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjY0NzI3MzUsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuNzgyMzUyOTI0MzQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjY4NzU4MTgsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjcyNDczNCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC43NzA1ODgyMTkxNjU4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My43NzI3OTUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuNzcwNTg4MjE5MTY1ODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODExMTUxMywgInN0ZXAiOiAzMSwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODQ4MTM3MSwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODg0MjM3LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My45Mjc3ODcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjk2OTg4NywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC44NjQ3MDU4NjA2MTQ3NzY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDA3Mjg5NCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDUyNjA5NCwgInN0ZXAiOiAzNywgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDk0ODIxNSwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC45NDcwNTg3OTY4ODI2Mjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMTM1NjIyMywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMTgwMDMwOCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC45MjM1MjkzODY1MjAzODU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjE3NDQ3MywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjU2MDIzNCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMjkyMzg2NSwgInN0ZXAiOiA0MywgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMzI5MDE5LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zNjQ0NjgzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40MDMzMzQ0LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40NDc0Nzg4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40ODQ2OTE2LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41MjExODY0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41NjM0ODMyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC42MDIwMTkzLCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC42NDM3NTgzLCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjk1ODgyMzUwMjA2Mzc1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC42ODE4MTYzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43MjE3Njk2LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43NTgzMzYsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODExNzY0NzE3MTAyMDUwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0Ljc5NzA2MDUsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuODQxMTc2NDUwMjUyNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuODMzNzkxNSwgInN0ZXAiOiA1NywgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuODc1ODU1NCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC45MjM1MjkzODY1MjAzODU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTEyNDYyNSwgInN0ZXAiOiA1OSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTQ5MjYwMiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTg0Mzk2NywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wMjQyMjYyLCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wNjYyNDg0LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg2NDcwNTg2MDYxNDc3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xMDk0OTA5LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xNDY0MjM4LCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xODk2OTk2LCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjkzNTI5NDA5MTcwMTUwNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4yMjkxMDc0LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4yNjU3NzgsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuNzc2NDcwNjAxNTU4Njg1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjMwMTQ1NjUsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjM0MTk3NCwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC45ODIzNTI5MTI0MjU5OTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzgyMjg5NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC45NjQ3MDU4ODQ0NTY2MzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDIwNDI2MSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC45ODIzNTI5MTI0MjU5OTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDU5NjY2NywgInN0ZXAiOiA3MywgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDk2NDExNiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNTM0MDgzOCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNTg3ODUyMiwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNjI1NjQsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuOTc2NDcwNTg5NjM3NzU2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjY2Mzc4NiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC45ODgyMzUyOTQ4MTg4NzgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzAxMTI0NCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC45ODIzNTI5MTI0MjU5OTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzM4Mjg0LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjk2NDcwNTg4NDQ1NjYzNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS43NzU1NjYzLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44MTQ2NDQzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44NTU0MDE1LCAic3RlcCI6IDgzLCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS44OTA4OTU4LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45MzA3MDQ0LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45Nzg1MTQsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjAxNTExNTMsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjA1NDkyMSwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMTAwNzI1NCwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC45NzA1ODgyMDcyNDQ4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4xMzgzMzQzLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjk3MDU4ODIwNzI0NDg3M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjE3NDk0MjUsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuOTY0NzA1ODg0NDU2NjM0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjIxMDUzODQsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjI1MDE1MiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjkwMzIwOSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzI3OTIxMiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzY1MTQ4MywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NjQ3MDU4ODQ0NTY2MzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuNDAyNDU0LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40NDIwMzc4LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40ODIyNDc0LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjUzMTU1NTcsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjk2NDcwNTg4NDQ1NjYzNDV9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTc5Mzk5X0JTMzIiOiBbeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNTAwNTM1MiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjY2NDcwNTg3MjUzNTcwNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni41Nzc2ODgyLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNjY0NzA1ODcyNTM1NzA1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjY1NDg3OTMsICJzdGVwIjogMywgInZhbHVlIjogMC42NzA1ODgyNTQ5Mjg1ODg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNzM3NjI1NiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjc1Mjk0MTE5MTE5NjQ0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni44MTYwODU2LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNzk0MTE3NjI5NTI4MDQ1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ2Ljg5NzYxNTcsICJzdGVwIjogNiwgInZhbHVlIjogMC44MTc2NDcwMzk4OTAyODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuOTc5ODI0MywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjgyMzUyOTQyMjI4MzE3MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny4wNjQ0MDMzLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjE1MDg2OTgsICJzdGVwIjogOSwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMjM5NDIzNSwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMzIyMTEzLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny40MDA3MDQ5LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjQ4Mzc0NSwgInN0ZXAiOiAxMywgInZhbHVlIjogMC44NzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNTY5NjMyLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjg0NzA1ODgzMjY0NTQxNjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny42NjIyOTEzLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny43OTExNzQsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjkxMjM5LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4wNDAxNzQ1LCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4xNDYxNjk3LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4yMjI5NjM4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4yOTkwNjIzLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjg5OTk5OTk3NjE1ODE0MjF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4zNzQwMjMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuNTcwNTg4MjMxMDg2NzMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNDQ5MTU1LCAic3RlcCI6IDIzLCAidmFsdWUiOiAwLjgwNTg4MjMzNDcwOTE2NzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC41MzI4MzcsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuNTM1Mjk0MTE1NTQzMzY1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjYxMjgxNSwgInN0ZXAiOiAyNSwgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC42OTA1OTczLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC43NzE1MjI4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC44NDQ1NTU2LCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45MjAwMjc3LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjg1Mjk0MTE1NTQzMzY1NDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC45OTY3MTU1LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4wNzY2OTY2LCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4xNTI1NzU1LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4yMzgzNDA2LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4zMjMxMTk0LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjc1Mjk0MTE5MTE5NjQ0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS40MDIxNzYxLCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjgxMTc2NDcxNzEwMjA1MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS40ODA4MzMsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjU2ODU2NTgsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNjQ3NzYzNSwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zNzA1ODgyNDMwMDc2NTk5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNzI3MzYxNywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC40NDcwNTg4MjY2ODQ5NTE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuODEwODE4LCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjg0MTE3NjQ1MDI1MjUzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjkyMTI0NDEsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODQxMTc2NDUwMjUyNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMDM3NTY1NywgInN0ZXAiOiA0MiwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMTU0MDQxMywgInN0ZXAiOiA0MywgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMjY2MDA3MiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMzcyNTE1NCwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNDkyOTQ4OCwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC43MDU4ODIzNzA0NzE5NTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNjI0ODU4OSwgInN0ZXAiOiA0NywgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNzQyMDU5LCAic3RlcCI6IDQ4LCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC44NjAwMDU2LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC45Njk1NTQsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjA3ODA3MzcsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjE5MTEwMDQsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjMwNDc0NzMsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuODY0NzA1ODYwNjE0Nzc2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjQyMTc2MTMsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjUzMDAyNTIsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuODgyMzUyOTQ4MTg4NzgxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjY0MDAyNSwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC44NTg4MjM1Mzc4MjY1MzgxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNzUwMjkwMiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuODY3NTMzMiwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuOTc3Njk0LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4wODgyMDQ5LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4xOTk4MDg2LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjYyOTQxMTc1Njk5MjM0MDF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4zMDcyNzA4LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi40MjI1ODcyLCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjg4ODIzNTI3MDk3NzAyMDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi41Mjg0NTU3LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi42MzIwMTgzLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjc0MzUzODYsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuOTIzNTI5Mzg2NTIwMzg1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjg0NTIwODIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjk2ODUyNjgsICJzdGVwIjogNjgsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjA3NTIwMDYsICJzdGVwIjogNjksICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjE5MTIzMDgsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjMwNjE5NzIsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuOTExNzY0NjgxMzM5MjYzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjQyNzA4NTYsICJzdGVwIjogNzIsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNTQ3ODI4NywgInN0ZXAiOiA3MywgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNjcxNjg4NiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC43NTI5NDExOTExOTY0NDE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNzk2NDk2OSwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuOTMwODQwNSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuMDUzMjQ1NSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuMTg3MTE5MiwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuMzA3MzIsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjQzNTQyODQsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjU1MzQxNiwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC45MjM1MjkzODY1MjAzODU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuNjc3NDAwNCwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4zNDExNzY0ODAwNTQ4NTUzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjgwMDAyOSwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4zNDExNzY0ODAwNTQ4NTUzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjkyNDE5MTcsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjA0ODc4NTcsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuODA1ODgyMzM0NzA5MTY3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjE3NDA1LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjgyOTQxMTc0NTA3MTQxMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NS4zMDE2MjksICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuODM1Mjk0MTI3NDY0Mjk0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjQyMjg0OTcsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjU0NjEzOTcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjY3MzI5MTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuODcwNTg4MjQzMDA3NjU5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1Ljc5ODk5ODQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuNzcwNTg4MjE5MTY1ODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTUuOTI1MzcwMiwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC44NTI5NDExNTU0MzM2NTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMDQzOTgzNywgInN0ZXAiOiA5MywgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMTY2OTU1NSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMjkwMTM0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjg5NDExNzY1MzM2OTkwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni40MTU3MjksICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuODgyMzUyOTQ4MTg4NzgxN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjUzNzI5NSwgInN0ZXAiOiA5NywgInZhbHVlIjogMC44NDExNzY0NTAyNTI1MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni42NjA4OTIyLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjgzNTI5NDEyNzQ2NDI5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni43ODI2NTEsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjkxMTIzNjgsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTExNTE2MjRfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDI5My4zNTM4NjMsICJzdGVwIjogMSwgInZhbHVlIjogMC44Mjk0MTE3NDUwNzE0MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNDAyNTM2LCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuNzIzNTI5Mzk4NDQxMzE0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjQ1MDg2ODgsICJzdGVwIjogMywgInZhbHVlIjogMC43NzA1ODgyMTkxNjU4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40OTY0MDgyLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNzk0MTE3NjI5NTI4MDQ1N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU0MjQwNTgsICJzdGVwIjogNSwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My41OTIxMTQ3LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuODAwMDAwMDExOTIwOTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNjM5MTM4NywgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My42OTExMTQ0LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuODE3NjQ3MDM5ODkwMjg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjczODYxNzcsICJzdGVwIjogOSwgInZhbHVlIjogMC43ODgyMzUzMDY3Mzk4MDcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNzk0ODg0MiwgInN0ZXAiOiAxMCwgInZhbHVlIjogMC44MTc2NDcwMzk4OTAyODkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODQxMDk2MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC44MzUyOTQxMjc0NjQyOTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODg1NDE2NSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC44Mjk0MTE3NDUwNzE0MTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuOTI5NDczLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My45NzMyNzAyLCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjY0MTE3NjQ2MjE3MzQ2MTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4wMTk2NjQzLCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjg4MjM1Mjk0ODE4ODc4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4wNjgzMjYyLCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xMTM1NjI2LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjg3NjQ3MDU2NTc5NTg5ODR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4xNTk5MTEsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjIxMDE1MjksICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjI1NzExNjMsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuODc2NDcwNTY1Nzk1ODk4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjMwMTkwNzMsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjM0NTU3MiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC44ODIzNTI5NDgxODg3ODE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMzkxNTYzMiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNDM2Mzk2LCAic3RlcCI6IDI0LCAidmFsdWUiOiAwLjg3MDU4ODI0MzAwNzY1OTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC40OTIxNDgyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC41MzY5NjM3LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjkxMTc2NDY4MTMzOTI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC41ODQ0MDk3LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjc4ODIzNTMwNjczOTgwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC42MzExMTQyLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjc3MDU4ODIxOTE2NTgwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjY3NTQ1LCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjkxNzY0NzA2MzczMjE0NzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC43MjIxMzY3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjkwNTg4MjM1ODU1MTAyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC43NzYzNjYsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjgyMzAxODYsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljg2ODMwMTQsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuODg4MjM1MjcwOTc3MDIwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjkxMzcwODcsICJzdGVwIjogMzQsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljk2MDIyODIsICJzdGVwIjogMzUsICJ2YWx1ZSI6IDAuODk0MTE3NjUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjAwMzk3OTQsICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuODk5OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjA1MjAyODIsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjEwMjE0NzMsICJzdGVwIjogMzgsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMTQ3NTk4LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4xOTg4OTcsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI0ODEzODQsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuODQ3MDU4ODMyNjQ1NDE2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjI5MzY1MDYsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjMzODM0MzQsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuODIzNTI5NDIyMjgzMTcyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjM4NjY5NiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC43OTQxMTc2Mjk1MjgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNDM0MzEzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjgxNzY0NzAzOTg5MDI4OTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS40ODY3MDgsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuODUyOTQxMTU1NDMzNjU0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjUzNjMzOCwgInN0ZXAiOiA0NywgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNTgxNzM3NSwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjI2NTY1NSwgInN0ZXAiOiA0OSwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNjgyNDIxNywgInN0ZXAiOiA1MCwgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzM0MzE2MywgInN0ZXAiOiA1MSwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzg5Mzc1MywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC45MDU4ODIzNTg1NTEwMjU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuODQ0MDM1NiwgInN0ZXAiOiA1MywgInZhbHVlIjogMC45Mjk0MTE3Njg5MTMyNjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS44OTY5MDIsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuOTA1ODgyMzU4NTUxMDI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1Ljk0Nzc3MjMsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDAxODAwOCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC45MzUyOTQwOTE3MDE1MDc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMDUyMzIyNiwgInN0ZXAiOiA1NywgInZhbHVlIjogMC45NTg4MjM1MDIwNjM3NTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTE0NjY3NCwgInN0ZXAiOiA1OCwgInZhbHVlIjogMC45NTI5NDExNzkyNzU1MTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMTY0MDQxLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4yMTI5MTEsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjI4Njc1ODIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjM2OTMxNTQsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjQ0MTI5OTQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjUxMzk5MzMsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuOTUyOTQxMTc5Mjc1NTEyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjU4MjY1NSwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC45NzA1ODgyMDcyNDQ4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni42NTA2NTcsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuOTM1Mjk0MDkxNzAxNTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjcxNjEyNTIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuOTQ3MDU4Nzk2ODgyNjI5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2Ljc4Mjk4NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC43NzY0NzA2MDE1NTg2ODUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuODY0NjIzOCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC43MjM1MjkzOTg0NDEzMTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuOTMxMjc1NiwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC43MTc2NDcwNzU2NTMwNzYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDAzMzg4NiwgInN0ZXAiOiA3MSwgInZhbHVlIjogMC40OTQxMTc2NDc0MDk0MzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDcwMzg4MywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC42OTk5OTk5ODgwNzkwNzF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny4xMzg3OTI4LCAic3RlcCI6IDczLCAidmFsdWUiOiAwLjY1ODgyMzU0OTc0NzQ2N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjIwNDc3MzcsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuNzM1Mjk0MTAzNjIyNDM2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjI4MTI4NiwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMzQ4NjU3NCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC44NzY0NzA1NjU3OTU4OTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDE3ODAwNywgInN0ZXAiOiA3NywgInZhbHVlIjogMC44NDcwNTg4MzI2NDU0MTYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDg1NjQxNSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC44ODgyMzUyNzA5NzcwMjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNTU0Mzc4NSwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC44OTQxMTc2NTMzNjk5MDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNjI0NjA0NSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNjkzODM0LCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjk1ODgyMzUwMjA2Mzc1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny43NjI1MDEsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuODE3NjQ3MDM5ODkwMjg5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjgzNTM3MjIsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuNzg4MjM1MzA2NzM5ODA3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjkxNjk3NjIsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuNzA1ODgyMzcwNDcxOTU0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljk4Mjg4NjMsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuNzY0NzA1ODk2Mzc3NTYzNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjA2MjQxOCwgInN0ZXAiOiA4NiwgInZhbHVlIjogMC45MTE3NjQ2ODEzMzkyNjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMTI5MzM4LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjkyOTQxMTc2ODkxMzI2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjE5NDYwNDQsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuOTE3NjQ3MDYzNzMyMTQ3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjI2MTE0ODUsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuOTUyOTQxMTc5Mjc1NTEyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjMzMDAxMzMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuOTI5NDExNzY4OTEzMjY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMzk4MDgyLCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjk0MTE3NjQ3NDA5NDM5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC40NjQ3MDA3LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjk1Mjk0MTE3OTI3NTUxMjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC41MzgxMTUsICJzdGVwIjogOTMsICJ2YWx1ZSI6IDAuOTQxMTc2NDc0MDk0MzkwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjYwOTgwNSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC45NTI5NDExNzkyNzU1MTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNjc3NDEzMiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC45NTI5NDExNzkyNzU1MTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNzQ2NTQ5OCwgInN0ZXAiOiA5NiwgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODEyODkyNCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC45NDExNzY0NzQwOTQzOTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguODg1NDEzNiwgInN0ZXAiOiA5OCwgInZhbHVlIjogMC44OTk5OTk5NzYxNTgxNDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguOTYyOTQ4LCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjkyMzUyOTM4NjUyMDM4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OS4wMjkwNjY2LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC45MTc2NDcwNjM3MzIxNDcyfV19fV0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/train/loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3RyYWluL2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7InB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTIwODUyMF9CUzEyOCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4wNjMyMTA3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuOTg1Nzk0NDI1MDEwNjgxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjEyNjgxMDYsICJzdGVwIjogMiwgInZhbHVlIjogMC41MDUzNTAwNTMzMTAzOTQzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzcuMTg5MjgxLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDMzNTQ5NTUzMTU1ODk5MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny4yNTE1MzIzLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMzk4NTI1NjU1MjY5NjIyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjMxNzExMDgsICJzdGVwIjogNSwgInZhbHVlIjogMC4zODA1NDUzNzc3MzEzMjMyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjM3OTA4MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjM3OTAwMTczNjY0MDkzMDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3Ny40NDExNjY2LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzU4NTk3NzU1NDMyMTI4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjUwNDU4NzIsICJzdGVwIjogOCwgInZhbHVlIjogMC4zNDg3NzY4NDcxMjQwOTk3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjU2OTk4LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzI5NTA5NjE1ODk4MTMyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjYzMTU5NDcsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMzYwNjczMjQ4NzY3ODUyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3Ljc1MTA3NzQsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNDA1Mzk5ODU4OTUxNTY4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc3LjkyNzAyOTEsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzQ0NjI1MzgzNjE1NDkzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4LjEzNDQzNDUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMzM3ODI0NDA0MjM5NjU0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OC4yOTAwMTQ1LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjMzMTU1NjQwOTU5NzM5Njg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNDQ0NzQ5NiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zMjg3MjI3NzQ5ODI0NTI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguNjM0NTMwNSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zNDI0ODA4OTc5MDM0NDI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzguODExMzI0NCwgInN0ZXAiOiAxNywgInZhbHVlIjogMC4zMjkyMDgwMTYzOTU1Njg4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc4Ljk0NjAwNTMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzI3OTc1MjEzNTI3Njc5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4wOTg3OTA0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjMwODgzNDI1NDc0MTY2ODd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS4yMzY1OTUyLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjMxNTcxMzIyNjc5NTE5NjUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuMzk2MzU4NywgInN0ZXAiOiAyMSwgInZhbHVlIjogMC4yOTY4OTM2NTYyNTM4MTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2NzkuNTMxMzczMywgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNjkxMDU0Mjg0NTcyNjAxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjY3MzcwNCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yOTAxMjgwNTIyMzQ2NDk2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjc5LjgyMzIxMTQsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMjk4NjgyMDA0MjEzMzMzMTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY3OS45NjAzNDYyLCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjU0MTg3Nzc0NjU4MjAzMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC4xNjU2MjksICJzdGVwIjogMjYsICJ2YWx1ZSI6IDAuMzI5Mjc0NDE1OTY5ODQ4NjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC4yNzQwNjc5LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjMzMzA2OTU2MjkxMTk4NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC4zMTQzNDIzLCAic3RlcCI6IDI4LCAidmFsdWUiOiAwLjM2MTc0NjI1MTU4MzA5OTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuMzYwMzg2OCwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4zNTYyOTYwOTIyNzE4MDQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNDAwNjYwMywgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4zMzE5NzY1OTI1NDA3NDA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjQzNzI4NiwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4zNjI1NjY4Mjg3Mjc3MjIxN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjQ3MzY5NywgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zMzg3MjM4OTc5MzM5NTk5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjUxNDQwOCwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4zMjM5Mjc2NzA3MTcyMzk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNTUwNzkzNCwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4zMjgxMTk2OTUxODY2MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC41ODcyODY1LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjMzNTQxNjQ2NTk5NzY5NTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42MjY2NTg3LCAic3RlcCI6IDM2LCAidmFsdWUiOiAwLjMyOTAxMzk0MzY3MjE4MDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC42NjkxNzQyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMzMzkzMTUwNTY4MDA4NDIzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzA1ODM2NSwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4zMjIzMDUxNDI4Nzk0ODYxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuNzQyMzU3NywgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4zNDIzMzAwNjgzNDk4MzgyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjc3OTI1MzIsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMzE1MjAwMDMwODAzNjgwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjgxNTc0OTYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMzEzNDE0NjAzNDcxNzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODAuODU0NzAzLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjMwODYwNDg2NjI2NjI1MDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC44OTA4NjA4LCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjMyMDc0MzU5MDU5MzMzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgwLjkyODA4NjMsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMzA3NjUzODc0MTU4ODU5MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MC45Njg0MTc2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjMzMzM1NDcxMTUzMjU5Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wMDYwOTczLCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjI5NzA1NzE1MTc5NDQzMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4wNTE3MzUsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMzEwOTQ2NDY0NTM4NTc0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjA5NDc5MjgsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMzIzMjczODY3MzY4Njk4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjEzMTgyODUsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMzE2NTAwNTQ0NTQ4MDM0Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4xNjg0NzkyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjMwNjMyNjAwMTg4MjU1MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4yMDY2MTYsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMzA3MDgxMzQxNzQzNDY5MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS4yNDQyODM0LCAic3RlcCI6IDUyLCAidmFsdWUiOiAwLjMwNDkzMzE5MDM0NTc2NDE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuMjg3MDk1NSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yOTExMTM4ODMyNTY5MTIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjMzMDIzOTUsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMjkxMTMxMTM4ODAxNTc0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjM2OTc5OTQsICJzdGVwIjogNTUsICJ2YWx1ZSI6IDAuMjk2ODMxMjUwMTkwNzM0ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS40MTA0MTUyLCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjI4MDQ0NzU0MjY2NzM4ODl9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS40NDYyOTE3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjI5MDUwNTQ5ODY0NzY4OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4MS40ODE3ODU1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI5MTkxNjkzNjYzNTk3MTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTE4MzA2MywgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4zMTM1NjQzMDA1MzcxMDk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTU2NDU4LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjI5MTMwOTU2NTMwNTcwOTg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNTk4MDQyLCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjI4MjQzNzU5Mjc0NDgyNzI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNjMzNzQ2MSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4yODU1NDQwMzc4MTg5MDg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNjcwODU5NiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4yOTc3OTEyNDI1OTk0ODczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuNzA2NDk2NywgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4yODIxNTk1OTY2ODE1OTQ4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc0MTcyNDUsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjkzOTU3NjIwODU5MTQ2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjc4MDk4MTgsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMjg4MjQ2MDA1NzczNTQ0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjgxNjk2LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjI4MjYwODg5NjQ5MzkxMTc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuODUyNzY0OCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNzkyODU0MzA5MDgyMDMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuODk2NjExNywgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yOTc5MTc5OTE4NzY2MDIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODEuOTMyNTUsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMjgxMTY4ODc4MDc4NDYwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgxLjk3MDExOTcsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMjgyOTI0NzExNzA0MjU0MTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4wMDk4OTQ0LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjI3NTIwNzQzMDEyNDI4Mjg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMDQ4MTk5MiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4yNjczMTMxMjI3NDkzMjg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMDkzODY1MiwgInN0ZXAiOiA3NCwgInZhbHVlIjogMC4yODA2MDk5MDU3MTk3NTcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTMxMzI2LCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjI4MjY0OTMzODI0NTM5MTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMTY5NTU5LCAic3RlcCI6IDc2LCAidmFsdWUiOiAwLjI4NzUwNjM0MTkzNDIwNDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yMDgyMjA3LCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjI4MDAyMDMyNjM3NTk2MTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi4yNTA0NzA2LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjI4Njk2Nzc1NDM2NDAxMzY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMjg2ODM3OCwgInN0ZXAiOiA3OSwgInZhbHVlIjogMC4yNzQ2NzIyMTAyMTY1MjIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuMzI2NjcwNCwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4yNzIzNDQ3NjgwNDczMzI3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjM2NTU4NDYsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMjY4Nzk0ODM0NjEzODAwMDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi40MDM3NTk3LCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjI4NDg5NTI0MTI2MDUyODU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuNDQxNTcsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMjc5NjczOTkzNTg3NDkzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjQ4Mjk3OTUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjc0NjQ0MjU1NjM4MTIyNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi41MjgwMjYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMjgxNTkxOTgxNjQ5Mzk4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjU2NTY0MTksICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjgzMTc5NjEwOTY3NjM2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjYwMjY0NzUsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjczNTI1OTIzNDkwNTI0M30sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjY0MDA1MzUsICJzdGVwIjogODgsICJ2YWx1ZSI6IDAuMjYzODU2ODg3ODE3MzgyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjY3NzE1MDcsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMjYwODcwNjA1NzA3MTY4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjcxNzMzMTQsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMjcyNTI2MDU1NTc0NDE3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgyLjc1NDg0NzMsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMjYwNDEwOTM0Njg2NjYwNzd9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi43OTE2MDgzLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjI3MjU5ODc3MzI0MTA0MzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4Mi44Mjc2MDk1LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjI2MjIxMDAxMTQ4MjIzODc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuODY0NTk5NywgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4yNzU0Mjc0MzA4NjgxNDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTA3MzcwNiwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4yNjA0Njc3Njc3MTU0NTQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTQ3NzYwMywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4yNjI5NDc5NDY3ODY4ODA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDA2ODIuOTg1NzI4NywgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yNTg5MjMzODE1NjcwMDEzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjAyMjYyODgsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMjY3MjgxNDEzMDc4MzA4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAwNjgzLjA1OTYyNzMsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMjYwOTEzMzQyMjM3NDcyNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMDY4My4xMDYwOTE1LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC4yNTc2ODA3NDM5MzI3MjR9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTEzMDgzNzZfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwMjg1OC44ODU1NDQ1LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuOTQ4ODcxMDc2MTA3MDI1MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU4Ljk1NTM2MzUsICJzdGVwIjogMiwgInZhbHVlIjogMC40OTUzMTE2MTc4NTEyNTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMDMxNzY5OCwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjQwMjU0NzI5OTg2MTkwNzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMTIxNzA3MiwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQzNDk1Njc4OTAxNjcyMzYzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMTk4NDI0OCwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM1MTU3MzMxODI0MzAyNjczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuMjcwMzAyLCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuMzQ3NzY5Nzk2ODQ4Mjk3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjM0MTU2ODUsICJzdGVwIjogNywgInZhbHVlIjogMC4zMTAzNjc5NzE2NTg3MDY2N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQxMTkyMjcsICJzdGVwIjogOCwgInZhbHVlIjogMC4yODg1MTg4NDYwMzUwMDM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjQ4MjE5NTYsICJzdGVwIjogOSwgInZhbHVlIjogMC4zMTQ1MTk4MjI1OTc1MDM2Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjU1Mjc0LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjI3MTMyMjk2NTYyMTk0ODI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNjI3NTQ0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjIzNjk4NDY4NTA2MzM2MjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNzAzNjgwOCwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yNzI5NzYzOTg0NjgwMTc2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuNzg2NTI0LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjMyMTgyMjU1Mzg3MzA2MjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NTkuODU3NjQ2LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjI3NjM1NjA0MTQzMTQyN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODU5LjkyOTU1OTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjczNDEzMTUxNTAyNjA5MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4wMDIzNzM3LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjI0NjExNTUzNTQ5NzY2NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4wNzM1NDE5LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjMyMzYyOTkxNTcxNDI2Mzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4xNDUyMDUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzA1NjY3NDMwMTYyNDI5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjIxNzY2MjgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzcxOTQ2NDI0MjQ1ODM0MzV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4yOTEwMDY2LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjI4NjQwNjcyNTY0NTA2NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC4zNjY4NzQyLCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI4NjU3NDc4MDk0MTAwOTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC40MzczNjM0LCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjI1NzI5NTkzNjM0NjA1NDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC41MDUyNDEsICJzdGVwIjogMjMsICJ2YWx1ZSI6IDAuMjg0ODQxNDE4MjY2Mjk2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjU3NTQ3MiwgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4yMTM1MDY3NDMzMTE4ODIwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjY0OTYyMjIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjE1MzY0NjIwMDg5NTMwOTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43MTg5NzUzLCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIyMzM5MDU3OTIyMzYzMjh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MC43ODcxMDk2LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjIxMjY0Nzg5OTk4NTMxMzQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjAuODY1Mjk1NiwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yMzk5NDI5NTI5OTA1MzE5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYwLjkzODU5MiwgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4xOTYxMzY1MTkzMTI4NTg1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjAwNjEzMDcsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMjIzMzQ2MjQ4MjY5MDgxMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4wNzkyNTEsICJzdGVwIjogMzEsICJ2YWx1ZSI6IDAuMTc1NDU1NzE5MjMyNTU5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjE1MDE0NzQsICJzdGVwIjogMzIsICJ2YWx1ZSI6IDAuMjIyNTkwNjg0ODkwNzQ3MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4yMjgwMjQyLCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjIyODY4MDU4MDg1NDQxNTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS4zMDM0MTMyLCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjI1MjY2Njc0MTYwOTU3MzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuMzc1NzcxOCwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNjA0NjIzMTM4OTA0NTcxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjQ0Njk5MjksICJzdGVwIjogMzYsICJ2YWx1ZSI6IDAuMjEwODE4MjkwNzEwNDQ5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2MS41MjA4MTgyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjMyODk1MzY4MzM3NjMxMjI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuNTk2Mzc2NCwgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yNDc3NjI3MjQ3NTcxOTQ1Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjY3MjgwODIsICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMjQwNDc5NzUyNDIxMzc5MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjc0ODM4OSwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4yMTY5MzA1ODMxMTkzOTI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjEuODI5MDUyNywgInN0ZXAiOiA0MSwgInZhbHVlIjogMC4yMTQ2NjQ1Nzg0Mzc4MDUxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjkxMDQ3OCwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4xOTQ2NTI1NTczNzMwNDY4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYxLjk4OTMyNjIsICJzdGVwIjogNDMsICJ2YWx1ZSI6IDAuMjA0NzM3MTU2NjI5NTYyMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4wNzU1MTkzLCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjIzODU2OTA4MDgyOTYyMDM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuMTYxNjYzNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4xOTI5NzM2NTg0NDI0OTcyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjI1NTkwNDIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMTk4NzY3ODExMDU5OTUxNzh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi4zNDA2MTU1LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjE3OTU1MTk3MzkzODk0MTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuNDI1MzYwNCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMTg5NjQxODkyOTEwMDAzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjUxMTUzMTgsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTgzMzM2OTQzMzg3OTg1MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi41OTUwOTA5LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjE3ODEyNjYwMzM2NDk0NDQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuNjc1OTE4NiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4xOTMyMzUyMzM0MjYwOTQwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYyLjc1OTUyODQsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMTU5MDQyNDc3NjA3NzI3MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Mi44NDI0MjAzLCAic3RlcCI6IDUzLCAidmFsdWUiOiAwLjI5Njk5MTg1NDkwNjA4MjE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjIuOTI1NjE4NiwgInN0ZXAiOiA1NCwgInZhbHVlIjogMC40MDY2MDA4OTI1NDM3OTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDEwNDgwOSwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yNDI4MTk2MjIxNTkwMDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuMDk4MjkzOCwgInN0ZXAiOiA1NiwgInZhbHVlIjogMC4yNTE5NTU0MTk3Nzg4MjM4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjE3OTgwODEsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjg0NTcyMTg0MDg1ODQ1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4yNjM5NDg0LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI4OTY2NTEzMjc2MTAwMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My4zNDQwNjgzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjIyODE0MTk2MzQ4MTkwMzA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuNDI3MTM2MiwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yMTg1NTYzMjk2MDc5NjM1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjUxMzUxNTIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjMwNzUyNDk3OTExNDUzMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My41OTg5NSwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4yNDQxOTUyNTI2NTY5MzY2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjY4Mjc3MjIsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMjE4MjY3MTEyOTcwMzUyMTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2My43Njc0MDc0LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjI0MjY4NTY0NTgxODcxMDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjMuODQ2MjY4NCwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4yMDY1ODk4NjI3MDQyNzcwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODYzLjkyOTMwMDUsICJzdGVwIjogNjYsICJ2YWx1ZSI6IDAuMjI2NTE1ODQ0NDY0MzAyMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wMTE5NzQ4LCAic3RlcCI6IDY3LCAidmFsdWUiOiAwLjIwNzQyOTk0NTQ2ODkwMjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC4wOTAzOTg4LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjE4MzQxMjUyMjA3NzU2MDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuMTY3ODAzLCAic3RlcCI6IDY5LCAidmFsdWUiOiAwLjE5NjM5MjI5Nzc0NDc1MDk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuMjU0Mjk3MywgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4xOTY2NDIzNTQxMzA3NDQ5M30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjMzMTk1MywgInN0ZXAiOiA3MSwgInZhbHVlIjogMC4xNTkzMDkyODI4OTg5MDI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNDEwNTUwNiwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4yMjQxNDgwNzk3NTI5MjIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjQ5MDc5ODIsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMjEwODgzMDUxMTU2OTk3Njh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC41NzIxMjM4LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjE1NzQzMTU4NzU3Njg2NjE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjQuNjQ4NjM5NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4xNTEzNDY1MTk1ODk0MjQxM30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY0LjcyNTc5MzYsICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMTYyNDM5MTA3ODk0ODk3NDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC44MDMwOTEsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMTkxNjA2MDAwMDY1ODAzNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC44NzkyMjEsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjAwMzkwNzI2MzI3ODk2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NC45NTgzMjgsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMTUxMjU2MjAzNjUxNDI4MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS4wMzkxNzYsICJzdGVwIjogODAsICJ2YWx1ZSI6IDAuMTg2NTE3NjcwNzUwNjE3OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS4xMTkyOTYzLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjIzNzg3MTg4NTI5OTY4MjYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuMjAxOTIyNywgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4xODE3NzQ5NDQwNjcwMDEzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjI4MTA3NjQsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMTgyNjM2MDUyMzcwMDcxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjM2MDI3MjYsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMTkxNTIzOTU0MjcyMjcwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjQ0NjU3NjYsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMTk3MDI4NTMyNjI0MjQ0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY1LjUyNjM5MDMsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMTc1NzUzMzU1MDI2MjQ1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS42MTMxMjksICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMTY0MTAwNDgzMDU5ODgzMTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS42OTMxMzg0LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjE0OTI4NDgwOTgyNzgwNDU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuNzcxNTMyMywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xNjQyNDE3NjA5NjkxNjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2NS44NDgxMjM4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjE1OTcxNDAyODIzOTI1MDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjUuOTI1NDY5NCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4xNjQ0NTk3NTAwNTYyNjY3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjAxODc5OSwgInN0ZXAiOiA5MiwgInZhbHVlIjogMC4xNTU0MTg4NTc5MzIwOTA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjEwNzQ2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjE0NDkzODAyMTg5ODI2OTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMTkwODgyLCAic3RlcCI6IDk0LCAidmFsdWUiOiAwLjE1MjY2Mjc4Mzg2MTE2MDI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuMjU3NTc5LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjE2NTI4Mjk5NDUwODc0MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4zMTAwMTIzLCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjE1MTkzNzA5NzMxMTAxOTl9LCB7IndhbGxUaW1lIjogMTY5NTIwMjg2Ni4zNTg4ODc3LCAic3RlcCI6IDk3LCAidmFsdWUiOiAwLjEzMTQ4NjgxODE5NDM4OTM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNDA4ODMzNywgInN0ZXAiOiA5OCwgInZhbHVlIjogMC4xMzg0MjIyMzU4NDY1MTk0N30sIHsid2FsbFRpbWUiOiAxNjk1MjAyODY2LjQ2NTYzMjIsICJzdGVwIjogOTksICJ2YWx1ZSI6IDAuMTE4MTE5MDE2Mjg5NzExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDI4NjYuNTEzMTQ2NiwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMjA1NzY5ODgxNjA2MTAyfV0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGUyMzQ1MzNfQlMzMiI6IFt7IndhbGxUaW1lIjogMTY5NTIwMTg5MC4wNzE2NzQ2LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuODUwMDkxMzM4MTU3NjUzOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjIxMDIyNzcsICJzdGVwIjogMiwgInZhbHVlIjogMC40ODQwNjM5ODI5NjM1NjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MC4zNTA0MTEyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDA1NjgxNzg4OTIxMzU2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjQ5NDExMzIsICJzdGVwIjogNCwgInZhbHVlIjogMC4zNTgwNTQ2Mzc5MDg5MzU1NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkwLjYzMTAyMSwgInN0ZXAiOiA1LCAidmFsdWUiOiAwLjM4NjUzNzY0MTI4Njg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuNzU5NDgxMiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjM2ODc1NTYzODU5OTM5NTc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTAuOTAwNjMzLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzU1NzEzNjA1ODgwNzM3M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjA0Njc5NTgsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMjc2OTMwMTUzMzY5OTAzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjE4MzY5MzYsICJzdGVwIjogOSwgInZhbHVlIjogMC4zNjI1MzYyMjE3NDI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkxLjMxNTMzNTUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMzIzMDE4MjIzMDQ3MjU2NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS40NTU5MzI5LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjMxMzk4MjM2NzUxNTU2Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuNTg3NDQsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMzcyNzU3Mjg1ODMzMzU4NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5MS43MjY2Njk1LCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjM1NzMxMDA4NjQ4ODcyMzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuODU3MDM2OCwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4zNTkxNzg1NDMwOTA4MjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTEuOTkxMDcxMiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC40MzM3ODAxNjM1MjY1MzUwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjExODEyOTMsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMzYyNjQ2OTM3MzcwMzAwM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjI3NDU3NTcsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNDE0NjMyOTE2NDUwNTAwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjQwMjkxMTcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMzgzMjcwMDg0ODU3OTQwN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjUzMzUzNDgsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNDA5ODYzMjMzNTY2Mjg0Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkyLjY1OTgyNTgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMzgwOTQ0MTYyNjA3MTkzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTIuNzk1MDE1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjMzOTc3NjMzNzE0Njc1OTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTIuOTMwNTc2NiwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4zNDY4OTc5NTk3MDkxNjc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMDYxMDk5NSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMjQ0MzEwNjE3NDQ2ODk5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjE2MTA3MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zMjkyNjY1MTgzNTQ0MTU5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMjUyNDQ5LCAic3RlcCI6IDI1LCAidmFsdWUiOiAwLjI4MzkyMDE2ODg3NjY0Nzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuMzM4NTM0OCwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4yNzgzOTE1NDAwNTA1MDY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuNDIxMDU3NSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4zMjkwMzY1MzM4MzI1NTAwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjUwMzAxOTMsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuMjg0NTA0ODYwNjM5NTcyMTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My41ODg1MDkzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjMzNTA4NDIyOTcwNzcxNzl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My42NzI0NzI3LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjMwODQ4NTE4MDEzOTU0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5My43NTg1MDEzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjMyMzQzMDI5OTc1ODkxMTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTMuODQ0MzYzMiwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4zMTA1MjU0NzY5MzI1MjU2M30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODkzLjkyODY0LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjI4NTE2OTA5NDgwMDk0OTF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4wMTA2OTU1LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjI3MzQ3MzY4MDAxOTM3ODY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMDkzOTkwMywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yNDMzMzA0Nzg2NjgyMTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTQuMTcxNzg0MiwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4yNTU4MzkwNzk2MTg0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4yNjg4NjkyLCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjI1MzczMzU0NTU0MTc2MzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC4zNTIyNzQ3LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjMwMDEwMTMzOTgxNzA0NzF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC40MzUzOTU1LCAic3RlcCI6IDM5LCAidmFsdWUiOiAwLjI4NTk3MDA2MjAxNzQ0MDh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC41MTY3MzYzLCAic3RlcCI6IDQwLCAidmFsdWUiOiAwLjM4MjgxNTM2MTAyMjk0OTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC42MDg3NDQ5LCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjM2MDg0MzE4MTYxMDEwNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC42ODgwNjY1LCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI5ODkxODQ4NTY0MTQ3OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC43NjgwMDczLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjMwNTI2MTA0NTY5NDM1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC44NTQ5Nzc0LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjI5MTQ1MjQ5NzI0Mzg4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NC45MzgwNDQzLCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjI4MjExMDU0MjA1ODk0NDd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4wMjMyNzIsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjg5MjgwMzg0Nzc4OTc2NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS4xMDc4MjQ4LCAic3RlcCI6IDQ3LCAidmFsdWUiOiAwLjI5MTg3MDI2NjE5OTExMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMTg5MzQ5NCwgInN0ZXAiOiA0OCwgInZhbHVlIjogMC4yMjMzMzIwOTIxNjU5NDY5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjI3NTU1LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjIyNjM0Njc3NTg4OTM5NjY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuMzY5NzcyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjI4NzAzMjY2MzgyMjE3NDF9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS40NDgyODQsICJzdGVwIjogNTEsICJ2YWx1ZSI6IDAuMjgxMzc3NDA0OTI4MjA3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjUyODY4NywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4yNDg1OTA3NjczODM1NzU0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1LjYyMTMzNSwgInN0ZXAiOiA1MywgInZhbHVlIjogMC4yNTQwOTI1MTQ1MTQ5MjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzAxMTYyLCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjI5ODMxNzkwOTI0MDcyMjY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTUuNzgwMDU5NiwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yMzE3NDgxMTg5OTY2MjAxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk1Ljg2MjY3MzgsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuMjM0MjY0NDc4MDg3NDI1MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5NS45NDQ4NTcsICJzdGVwIjogNTcsICJ2YWx1ZSI6IDAuMjIzMjAxNTQzMDkyNzI3NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni4wMjM0MTE1LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI0MDQwNDAzOTYyMTM1MzE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTA5NTcwNywgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4yNTIwMDk4Mzg4MTk1MDM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuMTkxMTU0NywgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4yMDMyMTc1ODA5MTQ0OTczOH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjI3MjA3MzUsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMjM0MTg3Mjc1MTcxMjc5OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjM2OTA1MzYsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMjk4NzYyMDUzMjUxMjY2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjQ1MTMzMTQsICJzdGVwIjogNjMsICJ2YWx1ZSI6IDAuMjQ1NzQ5NTc3ODc5OTA1N30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjUzMTgxODksICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMjY1NzU3NTMwOTI3NjU4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk2LjYxNzUwMjcsICJzdGVwIjogNjUsICJ2YWx1ZSI6IDAuMjU0MDIxNDM1OTc2MDI4NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ni43MDI3NTQzLCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjI1MzA5OTg1ODc2MDgzMzc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuNzgxODE0MywgInN0ZXAiOiA2NywgInZhbHVlIjogMC4yODkyNTExMTg4OTgzOTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuODY1ODY3NCwgInN0ZXAiOiA2OCwgInZhbHVlIjogMC4yNzk0MTQwNTc3MzE2Mjg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTYuOTQ1NDg2OCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yNjQ2NDUyNDg2NTE1MDQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMDM2NTg2NSwgInN0ZXAiOiA3MCwgInZhbHVlIjogMC4yODI5MzUxNzIzMTk0MTIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjEyMjYzODIsICJzdGVwIjogNzEsICJ2YWx1ZSI6IDAuMjY1MzM3ODU0NjIzNzk0NTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny4yMDMxMjQ1LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjI0NzUwNTg4ODM0Mjg1NzM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuMjg1OTAyNywgInN0ZXAiOiA3MywgInZhbHVlIjogMC4yNTg4NDE0ODQ3ODUwNzk5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjM3ODQ2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjIzNTk1NzEwMDk4NzQzNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny40NjIxNTAzLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjI3NDg5MzI1NDA0MTY3MTc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNTQxMDk1NywgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4yMTc2MjA1NjY0ODczMTIzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjYyOTQ0NTYsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjkxNjU4NjM5OTA3ODM2OX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk3LjcwNjkwMSwgInN0ZXAiOiA3OCwgInZhbHVlIjogMC4yNTQ3ODgwNzA5MTcxMjk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTcuNzg1MDEyLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjI1MzUwODc0NjYyMzk5Mjl9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny44Njc1ODAyLCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjIyNDMzMzUwOTgwMjgxODN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5Ny45NTY3NzQyLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjIzODg0NTQzNzc2NTEyMTQ2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMDM1NzEzLCAic3RlcCI6IDgyLCAidmFsdWUiOiAwLjI0NDk3Nzg3NjU0Mzk5ODcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMTIyMjY2OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yMDA2MzQwNjIyOTAxOTE2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk4LjIwMzQ0ODUsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjE1ODI3NjU4NzcyNDY4NTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC4yODU3NDc4LCAic3RlcCI6IDg1LCAidmFsdWUiOiAwLjE4MDYwNjc4MjQzNjM3MDg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguMzc3MzYxMywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yMDk4MzM3NzA5OTAzNzE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNDU1NDI4LCAic3RlcCI6IDg3LCAidmFsdWUiOiAwLjI4OTE3NzI5ODU0NTgzNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC41NDQ4MDk4LCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjI0ODcxMDQ1MzUxMDI4NDQyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguNjI4MjQ1NiwgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4xOTYxMjAwMjM3Mjc0MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC43MDY5ODk4LCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjIxNTkwOTkyODA4MzQxOTh9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OC43ODcxNTU5LCAic3RlcCI6IDkxLCAidmFsdWUiOiAwLjIwNjY4OTMyNzk1NTI0NTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguODczNzYyLCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjE4MTI1NDEzMzU4MjExNTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTguOTU0NjcwMiwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4yMTEyNDkxMTMwODI4ODU3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjAzNDgzNSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xODg0MjQzMTkwMjg4NTQzN30sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjEyNDQzMSwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4yMDY1MjE0MDY3Njk3NTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjA5MTc2LCAic3RlcCI6IDk2LCAidmFsdWUiOiAwLjE3NTIwODQ3OTE2NjAzMDg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuMjg3MjYyNCwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4yNDg5ODcwMDQxNjA4ODEwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjAxODk5LjM3NzE4MzQsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMjI5NjYzMzU3MTM4NjMzNzN9LCB7IndhbGxUaW1lIjogMTY5NTIwMTg5OS40NTc1NTEyLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjI3MjMzNTMyMDcxMTEzNTg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDE4OTkuNTQzOTU3NSwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMjIzOTIwOTg2MDU2MzI3ODJ9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTE0NTYwOV9CUzEwMCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi41NzY5MDU3LCAic3RlcCI6IDEsICJ2YWx1ZSI6IDAuNzY1MjkxMDk0Nzc5OTY4M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjYxNTM0MDcsICJzdGVwIjogMiwgInZhbHVlIjogMC42NjE3Mzk2NDczODg0NTgzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNjU2MTQ0LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNTMyMDU5OTY3NTE3ODUyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjY5MzY2MjYsICJzdGVwIjogNCwgInZhbHVlIjogMC40OTU3NzM0MzQ2Mzg5NzcwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkyLjczMDg0NTcsICJzdGVwIjogNSwgInZhbHVlIjogMC40ODQ2ODc0MTc3NDU1OTAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuNzY3NDU1MywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQwODM1MTgwODc4NjM5MjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44MDkzNDEyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzkyMTcwNjA4MDQzNjcwNjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi44NDYyNTgsICJzdGVwIjogOCwgInZhbHVlIjogMC4zODM2MDAzMjQzOTIzMTg3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuODgzNzIyMywgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjMwOTcwNDc1MDc3NjI5MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Mi45Mjc4ODIyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjM1MTU5MTczNjA3ODI2MjMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTIuOTc2OTUxNCwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4yOTg0MjY3MTc1MTk3NjAxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjAyODE1MzQsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuMjkzNjY4MjQwMzA4NzYxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjA4MDk2OCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC4yMzIyNjY2MTk4MDE1MjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMTI0Mzc0OSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC4yMjM5MTUzMjM2MTUwNzQxNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjE2MzM2MjcsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuMjA3NjI3NDMwNTU4MjA0NjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yMDEwNDksICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuMjIwNDI5Nzc4MDk5MDYwMDZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My4yNDc5NTgyLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjE5NDQ1NzkwMzUwNDM3MTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuMjg3Nzc1MywgInN0ZXAiOiAxOCwgInZhbHVlIjogMC4xNTcxOTI5OTAxODM4MzAyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjMyODk3NSwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4xNTk4OTg3MjgxMzIyNDc5Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjM3NzMzNTgsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjAwMjkxNTI5Mjk3ODI4Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My40MTYyNjc2LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjE5ODgyNTgzNjE4MTY0MDYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNDU2NjU5OCwgInN0ZXAiOiAyMiwgInZhbHVlIjogMC4yNTUxNDg0NDA1OTk0NDE1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjQ5NDA4MiwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yMzAzNjA3MDE2ODAxODM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNTMyNTM1MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4yNDgyNzI5NzAzMTg3OTQyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjU3MDc5ODYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjIwMzI4ODM3NjMzMTMyOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My42MDg5ODA0LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjIzNjE5MTc5NDI3NjIzNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My42NDcyMTA4LCAic3RlcCI6IDI3LCAidmFsdWUiOiAwLjIxNjA1ODc3NTc4MjU4NTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuNjg3NTA0NSwgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yMTM2MzM1OTY4OTcxMjUyNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjcyNDY2ODUsICJzdGVwIjogMjksICJ2YWx1ZSI6IDAuMTk0MzI4NTMxNjIyODg2NjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My43NzI3MjI1LCAic3RlcCI6IDMwLCAidmFsdWUiOiAwLjE4NTc5MTMyODU0OTM4NTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTMuODExMDgzOCwgInN0ZXAiOiAzMSwgInZhbHVlIjogMC4yMTEyNzQzMTA5NDY0NjQ1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjg0ODA3OCwgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4yMTAwOTI3OTc4NzU0MDQzNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1MjkzLjg4NDE3MzIsICJzdGVwIjogMzMsICJ2YWx1ZSI6IDAuMTY0NzYxNTg3OTc3NDA5MzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My45Mjc3MTg2LCAic3RlcCI6IDM0LCAidmFsdWUiOiAwLjEzMzU4Njg1Mzc0MjU5OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5My45Njk4MTA3LCAic3RlcCI6IDM1LCAidmFsdWUiOiAwLjE2MjU1ODk3MjgzNTU0MDc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMDA3MjI1OCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xMzQzMDI2MTYxMTkzODQ3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjA1MjUzMzEsICJzdGVwIjogMzcsICJ2YWx1ZSI6IDAuMTIwNTY0MDA2MjY4OTc4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4wOTQ3NTE2LCAic3RlcCI6IDM4LCAidmFsdWUiOiAwLjE1Mzc1MTY0MTUxMTkxNzExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuMTM1NTU3MiwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4xMzkwMDUwMjAyNjA4MTA4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjE3OTk2NDMsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMTMwMTEwNTkxNjUwMDA5MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4yMTczODIsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMTE2ODU3MTE4OTA0NTkwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjI1NTk1OTcsICJzdGVwIjogNDIsICJ2YWx1ZSI6IDAuMTM3NDI3Mjg1MzEzNjA2MjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4yOTIzMiwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4wOTM0NzA5NDU5NTQzMjI4MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjMyODk2MTEsICJzdGVwIjogNDQsICJ2YWx1ZSI6IDAuMTAzOTMyODA1MzU5MzYzNTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC4zNjQ0MDY2LCAic3RlcCI6IDQ1LCAidmFsdWUiOiAwLjExNjY3NDc2NTk0NDQ4MDl9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC40MDMyNjc2LCAic3RlcCI6IDQ2LCAidmFsdWUiOiAwLjA5MTM2MTI2OTM1NDgyMDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNDQ3NDA1MywgInN0ZXAiOiA0NywgInZhbHVlIjogMC4wOTgxMzc0NDU3NDc4NTIzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjQ4NDYyOTksICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMDkyOTExMDg2OTc2NTI4MTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC41MjExMjMyLCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjEwNjI0NzE1Njg1ODQ0NDIxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNTYzNDA1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA3ODEzNTA2NTczNDM4NjQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuNjAxOTUyOCwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4wNzAxOTIyNjk5ODA5MDc0NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY0MzY4NywgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4xMTMwMTQxOTEzODkwODM4Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0LjY4MTc0ODIsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMDc2NDkwNDI0NTczNDIxNDh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43MjE3MDMsICJzdGVwIjogNTQsICJ2YWx1ZSI6IDAuMTE4NDgzMzM0Nzc5NzM5Mzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43NTgyNzEyLCAic3RlcCI6IDU1LCAidmFsdWUiOiAwLjE2Nzg0MDE2Nzg4MDA1ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC43OTcwMDE4LCAic3RlcCI6IDU2LCAidmFsdWUiOiAwLjA5NzkwNTcxNzc5MDEyNjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC44MzM3MjI2LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjExODI1ODI1MjczOTkwNjMxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuODc1NzksICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTc0NTExNjg1OTY3NDQ1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NC45MTIzOTc5LCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjA4NTkxMTU2NDUyODk0MjExfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTQuOTQ5MTk3OCwgInN0ZXAiOiA2MCwgInZhbHVlIjogMC4xMjM5NDk1NDI2NDE2Mzk3MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk0Ljk4NDMzNDIsICJzdGVwIjogNjEsICJ2YWx1ZSI6IDAuMDkyNzE3NTgwNDk3MjY0ODZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4wMjQxNjc1LCAic3RlcCI6IDYyLCAidmFsdWUiOiAwLjA4OTQ5MzgwMzY3OTk0MzA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMDY2MTY5LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjA5NzA4NzgxNTQwMzkzODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xMDk0MTcsICJzdGVwIjogNjQsICJ2YWx1ZSI6IDAuMTExMzEzOTA5MjkyMjIxMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4xNDYzNTEzLCAic3RlcCI6IDY1LCAidmFsdWUiOiAwLjA3MjYwODg5NTU5OTg0MjA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMTg5NjI2MiwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xMDE3ODA1Nzg0OTQwNzE5Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjIyOTAzNTYsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMTE1Nzk4NjQ0NzIxNTA4MDN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4yNjU3MDg0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjEwNDA1MDgwMDIwNDI3NzA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuMzAxMzkyNiwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4wODAxNjMwMzkyNjcwNjMxNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjM0MTg5NzIsICJzdGVwIjogNzAsICJ2YWx1ZSI6IDAuMDgwOTMwMDY5MDg4OTM1ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS4zODIyMjc3LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjA4Nzg2NjEyMDA0MDQxNjcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNDIwMzU2NSwgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4wOTgzNjQ4NzQ3MjA1NzM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjQ1OTU4MTYsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMDkxMzg3NzYzNjE5NDIyOTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS40OTYzNDg2LCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjA4NTk1ODAyNjM0OTU0NDUzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNTM0MDE1NCwgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4wOTgyMTM4NDQwMDEyOTMxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjU4Nzc4MjksICJzdGVwIjogNzYsICJ2YWx1ZSI6IDAuMDgyMjYyMjAzMDk3MzQzNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS42MjU1NzEzLCAic3RlcCI6IDc3LCAidmFsdWUiOiAwLjA3NzM3MTI2MjAxMzkxMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS42NjM3MTQ2LCAic3RlcCI6IDc4LCAidmFsdWUiOiAwLjA1OTM3NDcxOTg1ODE2OTU1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjcwMTA1NjUsICJzdGVwIjogNzksICJ2YWx1ZSI6IDAuMDY0NTM1MTg1Njk0Njk0NTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS43MzgyMTM1LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjA1NTM3NDE5MzkzNjU4NjM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuNzc1NDk3NCwgInN0ZXAiOiA4MSwgInZhbHVlIjogMC4wNDEyNTIwNDY4MjM1MDE1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1LjgxNDU3NSwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4wNTU5MzU0OTQ2MDE3MjY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk1Ljg1NTMzNzQsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMDQ4MzkxNzE0NjkyMTE1Nzg0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTUuODkwODMzOSwgInN0ZXAiOiA4NCwgInZhbHVlIjogMC4wNDg2MTYyMzQyMTMxMTM3ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45MzA2NDUsICJzdGVwIjogODUsICJ2YWx1ZSI6IDAuMDU0NjEzNzc2NTA0OTkzNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5NS45Nzg0NDg2LCAic3RlcCI6IDg2LCAidmFsdWUiOiAwLjA3ODM0Njg0ODQ4Nzg1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjAxNTA0OSwgInN0ZXAiOiA4NywgInZhbHVlIjogMC4wODE4Njc5MDM0NzA5OTMwNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjA1NDg1MywgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4wNTYzMzQ5MTI3NzY5NDcwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjEwMDY2MDMsICJzdGVwIjogODksICJ2YWx1ZSI6IDAuMDU4ODQ5MzIzNTQwOTI1OTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4xMzgyNjUxLCAic3RlcCI6IDkwLCAidmFsdWUiOiAwLjAzNDEzOTkwNTEyNDkwMjcyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjE3NDg1NzQsICJzdGVwIjogOTEsICJ2YWx1ZSI6IDAuMDQ1OTM3NzY5MTE0OTcxMTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni4yMTA0NDU0LCAic3RlcCI6IDkyLCAidmFsdWUiOiAwLjA4ODg5NzMwMjc0Njc3Mjc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMjUwMDcyNSwgInN0ZXAiOiA5MywgInZhbHVlIjogMC4wODEzODQzNjgyNDA4MzMyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjI5MDI1MDMsICJzdGVwIjogOTQsICJ2YWx1ZSI6IDAuMDU4NjE0NzY0MzYyNTczNjI0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuMzI3ODU0NCwgInN0ZXAiOiA5NSwgInZhbHVlIjogMC4wNzExMjY4NDEwMDg2NjMxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjM2NTA3MzcsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTIwNDEzMTI0NTYxMzA5ODF9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40MDIzODUsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMTM3NzgzODg1MDAyMTM2MjN9LCB7IndhbGxUaW1lIjogMTY5NTIwNTI5Ni40NDE5Mjk2LCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjA4NTUwNjc0NDY4Mjc4ODg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDUyOTYuNDgyMTc4NCwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4xMTE2NzIzNDkyNzQxNTg0OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA1Mjk2LjUzMTQ4NzUsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjA2ODQzODkzMjI5OTYxMzk1fV0sICJweWdfYW5kX29wZW5GTF9zdGFuZGFsb25lX3JldXNpbmdfUFlHX0V4YW1wbGU3OTM5OV9CUzMyIjogW3sid2FsbFRpbWUiOiAxNjk1MjA2MzQ2LjUwMDQ0MzUsICJzdGVwIjogMSwgInZhbHVlIjogMC43ODg4NzM5NzA1MDg1NzU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDYuNTc3NiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjUwNTIzNzIyMTcxNzgzNDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni42NTQ4MDI4LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDY0MzEyNDkzODAxMTE2OTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni43Mzc1MzI2LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNDAyMjQ1NTUxMzQ3NzMyNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni44MTU5ODU0LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDAyOTUxNzQ3MTc5MDMxMzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni44OTc1MjU1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuMzQ5MzE2ODY1MjA1NzY0Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ni45Nzk3NDgyLCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuMzM5Mzg0MDQ5MTc3MTY5OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjA2NDMyMjUsICJzdGVwIjogOCwgInZhbHVlIjogMC4zMzE3NzY5NzY1ODUzODgyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMTUwNzc2LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMzYxOTUxOTE3NDA5ODk2ODV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0Ny4yMzkzMzgyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjMzMTg5MDg4MTA2MTU1Mzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuMzIyMDI3MiwgInN0ZXAiOiAxMSwgInZhbHVlIjogMC4zOTY0MzI1NDg3NjEzNjc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNDAwNjI0LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjM3ODAzMjI2NzA5MzY1ODQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNDgzNjY2NCwgInN0ZXAiOiAxMywgInZhbHVlIjogMC4zNTY2MzMyMTYxNDI2NTQ0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNTY5NTM5LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjM0NTg1ODcyMjkyNTE4NjE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNjYyMTgxNiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC4zMzYyMjc1OTU4MDYxMjE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDcuNzkxMDY2MiwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4zMTM2MTc5MTQ5MTUwODQ4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ3LjkxMjI4MzIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuMzI4OTk3MTY0OTY0Njc1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjA0MDAyOCwgInN0ZXAiOiAxOCwgInZhbHVlIjogMC4zMTA2MDI5MzMxNjg0MTEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjE0NjA4ODQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuMzE4NzA4ODk2NjM2OTYyOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjIyMjg2MzcsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMzA5ODMxMDgyODIwODkyMzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4yOTg5ODQ1LCAic3RlcCI6IDIxLCAidmFsdWUiOiAwLjI4OTg3NTExOTkyNDU0NTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC4zNzM5MTUyLCAic3RlcCI6IDIyLCAidmFsdWUiOiAwLjMzNjI5MjQ0NTY1OTYzNzQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNDQ5MDc3MSwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4zMDM5OTcyNDg0MTExNzg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDguNTMyNzU3MywgInN0ZXAiOiAyNCwgInZhbHVlIjogMC4zMTEzMTMwMzMxMDM5NDI4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjYxMjczMzYsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMjgxMjQxODM0MTYzNjY1Nzd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OC42OTA1MSwgInN0ZXAiOiAyNiwgInZhbHVlIjogMC4yOTAwMTA4Mzk3MDA2OTg4NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4Ljc3MTQ0NDYsICJzdGVwIjogMjcsICJ2YWx1ZSI6IDAuMjg1MjQ5NzEwMDgzMDA3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4Ljg0NDQ3NywgInN0ZXAiOiAyOCwgInZhbHVlIjogMC4yODg2ODIxMzI5NTkzNjU4NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4LjkxOTkwNywgInN0ZXAiOiAyOSwgInZhbHVlIjogMC4yNTUyOTg1ODQ2OTk2MzA3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ4Ljk5NjYzNDUsICJzdGVwIjogMzAsICJ2YWx1ZSI6IDAuMjk0Mzc2ODIwMzI1ODUxNDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4wNzY2MTMyLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjI2ODI4NDA4MjQxMjcxOTd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4xNTI0OTM3LCAic3RlcCI6IDMyLCAidmFsdWUiOiAwLjI2MTYxOTE4MDQ0MDkwMjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM0OS4yMzgyNTI0LCAic3RlcCI6IDMzLCAidmFsdWUiOiAwLjI0MjM3MzQ1MTU5MDUzODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuMzIzMDMwMiwgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4yNDAxNDA5MTQ5MTY5OTIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNDAyMDk1NiwgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4yMjY5MzkxNTY2NTE0OTY5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNDgwNzUyNywgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xOTgwOTY4ODYyNzcxOTg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNTY4NDc0LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjIzMjAyOTYwMTkzMTU3MTk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuNjQ3Njc2NywgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yMDk1ODU4MzA1NjkyNjcyN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzQ5LjcyNzI3MSwgInN0ZXAiOiAzOSwgInZhbHVlIjogMC4yNTI3NzU4Nzc3MTQxNTcxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuODEwNzM2NCwgInN0ZXAiOiA0MCwgInZhbHVlIjogMC4zNTM4NTczMzg0Mjg0OTczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNDkuOTIxMTYsICJzdGVwIjogNDEsICJ2YWx1ZSI6IDAuMjc5NzQ5OTI5OTA0OTM3NzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC4wMzc0NjEzLCAic3RlcCI6IDQyLCAidmFsdWUiOiAwLjI5MzE0MzMwMjIwMjIyNDczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMTUzOTQyLCAic3RlcCI6IDQzLCAidmFsdWUiOiAwLjI5NDM5MzY4ODQ0MDMyMjl9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC4yNjU4OTY2LCAic3RlcCI6IDQ0LCAidmFsdWUiOiAwLjIzNDM4NTQ2MDYxNTE1ODA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuMzcyNDIwNSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMzA1NjE1MjQ2Mjk1OTI5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTAuNDkyODQyMiwgInN0ZXAiOiA0NiwgInZhbHVlIjogMC4yMTY4MTk5NDE5OTc1MjgwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjYyNDc1MTgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMjIxMjM1MDk2NDU0NjIwMzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC43NDE5NTksICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMTk1OTcwNTUwMTc5NDgxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUwLjg1OTg3NDIsICJzdGVwIjogNDksICJ2YWx1ZSI6IDAuMTc4Mzg1OTQzMTc0MzYyMTh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MC45Njk0Mzc0LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjE5MDU2MDE5MTg2OTczNTcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuMDc3OTc3MiwgInN0ZXAiOiA1MSwgInZhbHVlIjogMC4yMzAxMjAzMTYxNDc4MDQyNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjE5MDk4MDcsICJzdGVwIjogNTIsICJ2YWx1ZSI6IDAuMTg5ODgzNDEwOTMwNjMzNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS4zMDQ2NTIsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMjEzNDUwODc4ODU4NTY2Mjh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS40MjE2NTk1LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjIwMTI1NzgwOTk5NjYwNDkyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNTI5OTA5OCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4yMTA1MDA2NTc1NTg0NDExNn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUxLjYzOTkxNTcsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuMzA5NTQ5NDgwNjc2NjUxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTEuNzUwMTY3LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjMxNjMzODAwMjY4MTczMjJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS44Njc0Mzg4LCAic3RlcCI6IDU4LCAidmFsdWUiOiAwLjI3MzMzMDE1MjAzNDc1OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1MS45Nzc2MDUzLCAic3RlcCI6IDU5LCAidmFsdWUiOiAwLjI3MTY1ODk4NjgwNjg2OTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi4wODgxMDI4LCAic3RlcCI6IDYwLCAidmFsdWUiOiAwLjIzMTExODYzNDM0MzE0NzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuMTk5NzE3MywgInN0ZXAiOiA2MSwgInZhbHVlIjogMC4yMzU2NTM3ODc4NTEzMzM2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjMwNzE2NTEsICJzdGVwIjogNjIsICJ2YWx1ZSI6IDAuMjUyOTUxMzgzNTkwNjk4MjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi40MjI0ODI1LCAic3RlcCI6IDYzLCAidmFsdWUiOiAwLjE3ODg4ODYwNDA0NDkxNDI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNTI4MzY2LCAic3RlcCI6IDY0LCAidmFsdWUiOiAwLjIzMTc2Nzg3NzkzNjM2MzIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNjMxOTA3MiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4xODA3NTA5OTU4NzQ0MDQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTIuNzQyNzU3OCwgInN0ZXAiOiA2NiwgInZhbHVlIjogMC4xNzcwNzgxNTc2NjMzNDUzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUyLjg0NTEzMDcsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMjAwMTQ5OTA4NjYxODQyMzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Mi45Njg0NDI0LCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjE3MTU2MDUyNTg5NDE2NTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuMDc1MTA4OCwgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4yNTExMjkxNTAzOTA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4xOTExNDYxLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjIxNzQzNzIzNzUwMTE0NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My4zMDYxMDI1LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjIxNDkxNzEwODQxNjU1NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My40MjY5NzQ4LCAic3RlcCI6IDcyLCAidmFsdWUiOiAwLjE5NTQ2MDExMDkwMjc4NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuNTQ3NzMwMiwgInN0ZXAiOiA3MywgInZhbHVlIjogMC4xNzUyMDU5MzEwNjc0NjY3NH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzUzLjY3MTU4MzQsICJzdGVwIjogNzQsICJ2YWx1ZSI6IDAuMjIwNDM3ODY5NDI5NTg4MzJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1My43OTYzOTEyLCAic3RlcCI6IDc1LCAidmFsdWUiOiAwLjE4ODM2MjgwNzAzNTQ0NjE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTMuOTMwNzI1OCwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNTc1NDk5OTIyMDM3MTI0Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjA1MzEzNDcsICJzdGVwIjogNzcsICJ2YWx1ZSI6IDAuMjA4ODQ3NTA3ODM0NDM0NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0LjE4NzAwNjUsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMjUyMTI4ODY5Mjk1MTIwMjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC4zMDcyMTY2LCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjI4MjI5NDgwOTgxODI2Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC40MzUzMjM3LCAic3RlcCI6IDgwLCAidmFsdWUiOiAwLjI2MjM1MTEyNTQ3ODc0NDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC41NTMyOTgyLCAic3RlcCI6IDgxLCAidmFsdWUiOiAwLjI3NzE0ODM2NTk3NDQyNjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTQuNjc3MjkxMiwgInN0ZXAiOiA4MiwgInZhbHVlIjogMC4yNTEyODg2ODIyMjIzNjYzM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU0Ljc5OTkxMDMsICJzdGVwIjogODMsICJ2YWx1ZSI6IDAuMzI5NTc2MTY0NDg0MDI0MDV9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1NC45MjQwNzI1LCAic3RlcCI6IDg0LCAidmFsdWUiOiAwLjM3MjgwMjg4MzM4NjYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTUuMDQ4Njc2MywgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4zMTQyMTkwMjc3NTc2NDQ2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjE3MzkwNjgsICJzdGVwIjogODYsICJ2YWx1ZSI6IDAuMjg0NzE0NzU4Mzk2MTQ4N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjMwMTUxMzIsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjc0ODExMjY3ODUyNzgzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjQyMjczOCwgInN0ZXAiOiA4OCwgInZhbHVlIjogMC4yNTM4NTE1OTI1NDA3NDA5N30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjU0NjAxNywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4yNjc3NzQ0MzI4OTc1Njc3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjY3MzE2OCwgInN0ZXAiOiA5MCwgInZhbHVlIjogMC4yOTkxMTA1MDIwMDQ2MjM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTUuNzk4NzA2OCwgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4yNDg1Mjc4MjQ4Nzg2OTI2M30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU1LjkyNTI5NTgsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMjg2NjgzNzk3ODM2MzAzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjA0Mzg2LCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjIyODI5MjkyNzE0NTk1Nzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMTY2ODMwNSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4yNDY0OTE3MTUzMTIwMDQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuMjkwMDE0LCAic3RlcCI6IDk1LCAidmFsdWUiOiAwLjI0MjU3NTk0MzQ3MDAwMTIyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNDE1NDc4NywgInN0ZXAiOiA5NiwgInZhbHVlIjogMC4yMDk2MzAyNTA5MzA3ODYxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjUzNzE4NzgsICJzdGVwIjogOTcsICJ2YWx1ZSI6IDAuMjE4NTc0MzE1MzA5NTI0NTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNjM1Ni42NjA3OTEyLCAic3RlcCI6IDk4LCAidmFsdWUiOiAwLjIwMTI4Mzk3NjQzNTY2MTMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDYzNTYuNzgyNTQ4MiwgInN0ZXAiOiA5OSwgInZhbHVlIjogMC4yMDM2NDI5NzkyNjQyNTkzNH0sIHsid2FsbFRpbWUiOiAxNjk1MjA2MzU2LjkxMTA3MiwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMTczMjU5MTA5MjU4NjUxNzN9XSwgInB5Z19hbmRfb3BlbkZMX3N0YW5kYWxvbmVfcmV1c2luZ19QWUdfRXhhbXBsZTExNTE2MjRfQlM2NCI6IFt7IndhbGxUaW1lIjogMTY5NTIwNDI5My4zNTM3NzgsICJzdGVwIjogMSwgInZhbHVlIjogMC42OTY5OTIzOTczMDgzNDk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNDAyNDM4OSwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjUxMTYyMDg3OTE3MzI3ODh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My40NTA3OTAyLCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuNDU2MjI4NDA1MjM3MTk3OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjQ5NjMzMDMsICJzdGVwIjogNCwgInZhbHVlIjogMC40MTQyMDIxODM0ODUwMzExM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU0MjMzMjIsICJzdGVwIjogNSwgInZhbHVlIjogMC4zODc3MDkyMzAxODQ1NTUwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjU5MjAyODEsICJzdGVwIjogNiwgInZhbHVlIjogMC4zNTgzOTkxNTI3NTU3MzczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNjM5MDYxMiwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjMzNDcwMDk3MTg0MTgxMjEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuNjkxMDMzOCwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjMwODcwNTkyNTk0MTQ2NzN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My43Mzg1MjUyLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMjg2OTU5NTg4NTI3Njc5NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My43OTQ4MDg5LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjI3NjgzMzM4NTIyOTExMDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5My44NDEwMzQ0LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjI2MTkzODMwMzcwOTAzMDE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTMuODg1MzQ0NywgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yNDgwODI5MDYwMDc3NjY3Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjkyOTQwNTUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMjU2NjExNDA2ODAzMTMxMX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0MjkzLjk3MzIwODQsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuMjM3NDIzMDc3MjI1Njg1MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4wMTk2LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjIxMzUyMTY1OTM3NDIzNzA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMDY4MjYxOSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4yNDIxOTMzMjYzNTQwMjY4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMTEzNDk2MywgInN0ZXAiOiAxNywgInZhbHVlIjogMC4yMjk4MjUxNTM5NDY4NzY1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjE1OTg0NTYsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuMjE2ODc2OTgzNjQyNTc4MTJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4yMTAwOTA0LCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjIyODAxNjg2ODIzMzY4MDczfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuMjU3MDQ4NiwgInN0ZXAiOiAyMCwgInZhbHVlIjogMC4yMzA5MTY4ODc1MjE3NDM3N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjMwMTg0MjUsICJzdGVwIjogMjEsICJ2YWx1ZSI6IDAuMjI2MTYxMDE4MDEzOTU0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zNDU1MDMsICJzdGVwIjogMjIsICJ2YWx1ZSI6IDAuMjE3NjQ2MzQ1NDk2MTc3Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC4zOTE0OCwgInN0ZXAiOiAyMywgInZhbHVlIjogMC4yNTcyMzY4OTc5NDU0MDQwNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjQzNjMxOTQsICJzdGVwIjogMjQsICJ2YWx1ZSI6IDAuMTc2NzU2NTc1NzAzNjIwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjQ5MjA4MDIsICJzdGVwIjogMjUsICJ2YWx1ZSI6IDAuMTg1OTYzMDk0MjM0NDY2NTV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC41MzY4ODA1LCAic3RlcCI6IDI2LCAidmFsdWUiOiAwLjE4MjI0OTg0NDA3NDI0OTI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNTg0MzM3NSwgInN0ZXAiOiAyNywgInZhbHVlIjogMC4xNzk1OTIwMjgyNjAyMzEwMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0LjYzMTA0MzQsICJzdGVwIjogMjgsICJ2YWx1ZSI6IDAuMTk2NDU0Nzc4MzEzNjM2Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NC42NzUzODMzLCAic3RlcCI6IDI5LCAidmFsdWUiOiAwLjE5MTAzMzk0NDQ4NzU3MTcyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNzIyMDc2MiwgInN0ZXAiOiAzMCwgInZhbHVlIjogMC4yMDE2NTUwODk4NTUxOTQxfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuNzc2MzAzLCAic3RlcCI6IDMxLCAidmFsdWUiOiAwLjE2NTM0OTQ2ODU4ODgyOTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuODIyOTU4NywgInN0ZXAiOiAzMiwgInZhbHVlIjogMC4xNzk4NzgzODM4NzQ4OTMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuODY4MjM5MiwgInN0ZXAiOiAzMywgInZhbHVlIjogMC4xODk4MDk2Nzk5ODUwNDY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTQuOTEzNjQ1NywgInN0ZXAiOiAzNCwgInZhbHVlIjogMC4xNjg2NzcxMjE0MDA4MzMxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk0Ljk2MDE2NywgInN0ZXAiOiAzNSwgInZhbHVlIjogMC4xODUwNDkxNzYyMTYxMjU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMDAzOTA3NCwgInN0ZXAiOiAzNiwgInZhbHVlIjogMC4xNjUzNDcxNTg5MDg4NDR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4wNTE5Mjg1LCAic3RlcCI6IDM3LCAidmFsdWUiOiAwLjE2NTcwNjY3OTIyNDk2Nzk2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMTAyMDgzNywgInN0ZXAiOiAzOCwgInZhbHVlIjogMC4yMTI3MzA4Njk2NTA4NDA3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE0NzUyMzksICJzdGVwIjogMzksICJ2YWx1ZSI6IDAuMTgzMjk2MzIyODIyNTcwOH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjE5ODgxMjUsICJzdGVwIjogNDAsICJ2YWx1ZSI6IDAuMjE2NzczMzE2MjY0MTUyNTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS4yNDgwNzAyLCAic3RlcCI6IDQxLCAidmFsdWUiOiAwLjIyMzM3NzE5Nzk4MDg4MDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMjkzNTgzNiwgInN0ZXAiOiA0MiwgInZhbHVlIjogMC4yMzkzNjE5MTIwMTIxMDAyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjMzODI3OCwgInN0ZXAiOiA0MywgInZhbHVlIjogMC4xODkxMzYwODc4OTQ0Mzk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuMzg2NjI5NiwgInN0ZXAiOiA0NCwgInZhbHVlIjogMC4yMzA1NTQxNjM0NTU5NjMxM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQzNDI0OSwgInN0ZXAiOiA0NSwgInZhbHVlIjogMC4yMDI1MzIxNDI0MDA3NDE1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjQ4NjYzNjQsICJzdGVwIjogNDYsICJ2YWx1ZSI6IDAuMjM1MzU1MDA0NjY4MjM1Nzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS41MzYyNjgsICJzdGVwIjogNDcsICJ2YWx1ZSI6IDAuMTgyNTIxOTgzOTgxMTMyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjU4MTY2ODEsICJzdGVwIjogNDgsICJ2YWx1ZSI6IDAuMjI1NTU4MzcwMzUxNzkxMzh9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS42MjY0OTA0LCAic3RlcCI6IDQ5LCAidmFsdWUiOiAwLjE1NzAxOTcwNDU4MDMwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1LjY4MjMzNDIsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMTczNDQyMjI5NjI4NTYyOTN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS43MzQyMzA1LCAic3RlcCI6IDUxLCAidmFsdWUiOiAwLjE1NjQwMTA5Nzc3NDUwNTYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuNzg5Mjc3OCwgInN0ZXAiOiA1MiwgInZhbHVlIjogMC4xMjk0NTM0NTA0NDEzNjA0N30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk1Ljg0Mzk2MTcsICJzdGVwIjogNTMsICJ2YWx1ZSI6IDAuMTE3ODk0ODQzMjIwNzEwNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5NS44OTY4Mjc1LCAic3RlcCI6IDU0LCAidmFsdWUiOiAwLjE0MTE5NDczMDk5NzA4NTU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTUuOTQ3Njk4NCwgInN0ZXAiOiA1NSwgInZhbHVlIjogMC4xMjAxMDUyMDY5NjY0MDAxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjAwMTcyMjYsICJzdGVwIjogNTYsICJ2YWx1ZSI6IDAuMTUzNjQ2MTQxMjkwNjY0Njd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4wNTIyNDE4LCAic3RlcCI6IDU3LCAidmFsdWUiOiAwLjE5Nzc1ODA0ODc3MjgxMTl9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4xMTQ1ODYsICJzdGVwIjogNTgsICJ2YWx1ZSI6IDAuMTM5NzU1NTc2ODQ4OTgzNzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4xNjM5NywgInN0ZXAiOiA1OSwgInZhbHVlIjogMC4xMzA3MDY3MTI2MDM1NjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjIxMjgzNzUsICJzdGVwIjogNjAsICJ2YWx1ZSI6IDAuMTI3ODE5ODIxMjM4NTE3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni4yODY2NTE0LCAic3RlcCI6IDYxLCAidmFsdWUiOiAwLjEyOTIzNTIzNzgzNjgzNzc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuMzY5MTk4OCwgInN0ZXAiOiA2MiwgInZhbHVlIjogMC4xMTI1NDMwMDE3NzA5NzMyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNDQxMjE2MiwgInN0ZXAiOiA2MywgInZhbHVlIjogMC4wODcxOTMzMTc3MTEzNTMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuNTEzODk5OCwgInN0ZXAiOiA2NCwgInZhbHVlIjogMC4wODU2NDczMDczMzYzMzA0MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk2LjU4MjU2MiwgInN0ZXAiOiA2NSwgInZhbHVlIjogMC4xMDkwNDYwNzE3Njc4MDd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni42NTA1ODAyLCAic3RlcCI6IDY2LCAidmFsdWUiOiAwLjA4MzM2MDcwMTc5OTM5Mjd9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni43MTYwNTIsICJzdGVwIjogNjcsICJ2YWx1ZSI6IDAuMDg4OTIzOTk4MTc3MDUxNTR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ni43ODI4ODgyLCAic3RlcCI6IDY4LCAidmFsdWUiOiAwLjExODc2ODQ5MDg1MDkyNTQ1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuODY0NTI2NywgInN0ZXAiOiA2OSwgInZhbHVlIjogMC4xNjgwMTYyMjUwOTk1NjM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTYuOTMxMTkzLCAic3RlcCI6IDcwLCAidmFsdWUiOiAwLjEzMjQ3MTQ1NzEyMzc1NjR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny4wMDMyNTI1LCAic3RlcCI6IDcxLCAidmFsdWUiOiAwLjE3MTk3MTUyOTcyMjIxMzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMDcwMjk3NywgInN0ZXAiOiA3MiwgInZhbHVlIjogMC4xMzM1MjEwNjUxMTU5Mjg2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjEzODcwOTMsICJzdGVwIjogNzMsICJ2YWx1ZSI6IDAuMTU3NzA1MDIzODg0NzczMjV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny4yMDQ2OTYyLCAic3RlcCI6IDc0LCAidmFsdWUiOiAwLjEzNzM2ODc2ODQ1MzU5ODAyfSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuMjgxMjA1NywgInN0ZXAiOiA3NSwgInZhbHVlIjogMC4xMzU1NDY1MzUyNTM1MjQ3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjM0ODU3OSwgInN0ZXAiOiA3NiwgInZhbHVlIjogMC4xNDMyOTE2MjI0MDAyODM4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNDE3MjIxNSwgInN0ZXAiOiA3NywgInZhbHVlIjogMC4xMjIwNDM2NzY2NzQzNjZ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny40ODU1NjcsICJzdGVwIjogNzgsICJ2YWx1ZSI6IDAuMTI0MTQ3MzkyODA5MzkxMDJ9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5Ny41NTQzMDYzLCAic3RlcCI6IDc5LCAidmFsdWUiOiAwLjE0MDY0NTg5MTQyNzk5Mzc3fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTcuNjI0NTA2NSwgInN0ZXAiOiA4MCwgInZhbHVlIjogMC4xNDQ3MTc3ODI3MzU4MjQ1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjY5MzcyMzIsICJzdGVwIjogODEsICJ2YWx1ZSI6IDAuMTE2NDM1OTMwMTMyODY1OX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljc2MjQyMTEsICJzdGVwIjogODIsICJ2YWx1ZSI6IDAuMjk1Mzc2MDAyNzg4NTQzN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjgzNTI4OCwgInN0ZXAiOiA4MywgInZhbHVlIjogMC4yMTE0MTUyOTA4MzI1MTk1M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3LjkxNjg3ODcsICJzdGVwIjogODQsICJ2YWx1ZSI6IDAuMjIwMTI0NzY2MjMwNTgzMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk3Ljk4MjgwNSwgInN0ZXAiOiA4NSwgInZhbHVlIjogMC4zMDU2MTIyOTU4NjYwMTI2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMDYyMzQ1NywgInN0ZXAiOiA4NiwgInZhbHVlIjogMC4yNjU3NTcxNzMyOTk3ODk0M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjEyOTIyNDUsICJzdGVwIjogODcsICJ2YWx1ZSI6IDAuMjE0NTEzNDk1NTY0NDYwNzV9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC4xOTQ1MDAyLCAic3RlcCI6IDg4LCAidmFsdWUiOiAwLjI0NjY5OTM0ODA5MjA3OTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguMjYxMDY0MywgInN0ZXAiOiA4OSwgInZhbHVlIjogMC4yMTMzNTc3NjE1MDIyNjU5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjMyOTkyMDMsICJzdGVwIjogOTAsICJ2YWx1ZSI6IDAuMjE5MTg2NzIzMjMyMjY5M30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjM5Nzk4MywgInN0ZXAiOiA5MSwgInZhbHVlIjogMC4xODM4NjQ5NjYwMzQ4ODkyMn0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjQ2NDYxOTIsICJzdGVwIjogOTIsICJ2YWx1ZSI6IDAuMTQ3OTYzMTk2MDM5MTk5ODN9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC41MzgwMTgyLCAic3RlcCI6IDkzLCAidmFsdWUiOiAwLjEyNTk5NDI3OTk4MDY1OTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyMDQyOTguNjA5NzE3MSwgInN0ZXAiOiA5NCwgInZhbHVlIjogMC4xMTk3MTkxMjUzMzA0NDgxNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjY3NzMzMzgsICJzdGVwIjogOTUsICJ2YWx1ZSI6IDAuMTYzMTM4MDE3MDU4MzcyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4Ljc0NjQ1NzMsICJzdGVwIjogOTYsICJ2YWx1ZSI6IDAuMTQ1Njk0MDQ3MjEyNjAwN30sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4LjgxMjgxNiwgInN0ZXAiOiA5NywgInZhbHVlIjogMC4xNDM3OTI0OTUxMzE0OTI2MX0sIHsid2FsbFRpbWUiOiAxNjk1MjA0Mjk4Ljg4NTMzMzMsICJzdGVwIjogOTgsICJ2YWx1ZSI6IDAuMTE0MTMwMTM5MzUwODkxMTF9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OC45NjI4NjEzLCAic3RlcCI6IDk5LCAidmFsdWUiOiAwLjE3MzA4OTQyOTczNjEzNzR9LCB7IndhbGxUaW1lIjogMTY5NTIwNDI5OS4wMjg5ODQ4LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC4xMjAwNzE5MTAzMjE3MTI1fV19fV0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACoMAA4AAAAAUsQAACm2AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu5A1nULg14AATYCJAOHNgQgBYJ+ByAbIkSzoqzwsjiKkj2aj6JicZf9lwnmGDrzUL5ooaWgICnvqxcvLU1UUm052dq0PPEbkDL7t7A4c3dKponrEu8IjX2Sy0PoX9DLJNk9AHsAO6uC0MkqVZH48wM/t95fEVEDtBGpESMixmDAqNgYMLpGpmSIhFWEFSiIoIiFRIli3p2nHuksZyTDeXbXshPuAKlMlW53Zbg7HZue7/8N06wSlnxFE+rSAhYVkmR44D5FCo4yXQlcOX/hZsHaQuZYMcQ8fkufGldr+uACwqKNzkSGPbR7G1BVUZ3KOl0lGRYOQuDT2zTbfVpvBF5fojuuchvk6YE73cxV6dJS//W/1qu/X2vQGiTZDshHKx3JCpgmIwjIGl8FXKUCLIGkY12AuaMOqUzRXNWnLQmqS1HWqdIFnu/vG79/2raDcUAPMPAMtn38TkB/ouZjIAEmGGgThZmsWZkYwdIwtsYh6+N7ZqYra0NPaN1poDFKzhjB6Ep9/G4ZTnWidqQaNBB6+Y1RoPACsDkUTvsZQJjzgUiWDJEtGyJXLgQLC6JIEUSJMohOPVAu+QiBQAHTADNAgAKRDAGmosIAZt317VxBcvfkGAZI7h0THA6SB/jHRYIkDOBDaNj+e8ZEAjtwbBhGLXC2MFFLe6nWKwp1sS6WQ4VY39XdhkP/X4wChWLH4FC8KPFQDqMIiLjGjWJFabOIvvgn/jQ7N9ClKlWDRqlUq8XUxVp68cWGQ7/D+N36//YNN54bY0H9DUgUJtSPLQYOF25C9jvokMOOOE6FOg0EmrQR6dJnwJA1G3YcOXNB4obCkxdvvmrUqtfgksuuuOqa68ZNmDTlhpvue+ChRx6bteiVJa8t+2DFqjXrdnyE0M5bMIiE6TpAn6hZohBCyQ4q+IddgvVd259GlFOFNmHm+YZlbrMiWMMWJJCru+Uaj9zimRu8ySnLbXUJGnkTtMtp5Aqu4hquY1x71htzeI55LOCF9rJti3iFJbzGB6xgFWtY1zbasoktbGs7bfiYRnjlVP+hPoJCwSt7WIClnW8Rc4Vu7tDP12bBMR5M8483PCX8SrDD5C1uOcErZ0QkQ1pGyk5TrDylKDth8BBmTIBbLvMnBPCBG9uCt+WBq3CUc5cOYxpP8BQzexSGw49L58kUZJkbrABr2IJMeXnZ7NTgV8uoR4P2sg2LeIUlvK6OqM1GXCxzhxXBGrYgowwvsYhXWMLrdWPYEEahxosAu8OGlMtrXNyHhK8kWMUa1veMxZ95BFGHRjTRCLGDHexgBzsEexZimY2sYA1bh5RM5GSge4rzwqVs5y8Zi3iFJbzWPsS0glWsYV0g5P5oijmKkp9O3nw7kCfXGOc3/jcHxSZ3fc4WRHYgzYszl8Xt4s0nAnMbv+OWL1BmKuw9jcgRaflYdnZg5ZSinHQinwkpJtdyISq/Exs8UN0JBvTnxrwgTdysfiY754dWTK8Zted21jPU8/6ErTbDLJtDyepp3/I79jzdpwqjW9NkvFDxcrFn8ct7uyI/Nw20ef7NquSYG/mY2X3qX1lrwCxM5fcKo/9ELfnuZQg72j1T/muh/JezBlNxFtf0x58eYNG3oste6z3I1ae4pvIFyU8FzkQfejHes5fRm2qnDgIE807LfcaTOpsEUuLOw/wOZH8rylWi04VRGvkSdfjzXLcqGTZ0Ft8w4B8+d+iZ6+vzC6o0sWYSH/HEcH5jFetUsY0j935Npssg79F/4F6kHQmLa1Ms9Va9TLCHGVYlSVrgX3FCh77jG/+4Jd/AaEir86/WBqxJDUpC15D5baQ+bKJ1eAepuz3VUvN2vN56JxY2PSZ7AvMVJjZbZ/Wx571F+emsX0bLt4pUr261+xXWRibmZHFmW+n8uPjvZqdsHgYZaJrhAxFfgsQCHC4IflcVRfA32n6HYSjRwEGbwf3enCUJ1lCaXS7DmStZbirwzBVR+dinOD+oRqNDmr4ru+S145atI/8AunlBIbSLGGJIJak5i3JACQcVcEjEYbGU5XRcLiqKUhehoTBteejIiagkXcXpyU9fbgbyMRfHQjaWR5G4utgTpnSBQYJorrJxU4inHKgK8paDj7yKT2w/DkNMHU5SPxJDTCOU0qSUSznisnEoE/8JmHQT1n2PIabN4DRLObdnXsB5mYtY9Bq75SrGB+vQ4jU5EEAghAngKCphl/AJZwLlKIuirBh1UQiiaB15BevihAMRhOCDC/6lVKU1hC2fEJFAgwk0MkS4y81DLM9ndsFgDx65EKVUlLIqoko1UQkRQBgBhEPYRZxEAe6EEg8UHHAltutriGyg55hs2Ia9sP/pma3UcvNIgV4p7wPbWtuZ49ms4+I6jtZ3MR7rbeZo5+bGbm7taB/butgGVl5gXjGwzjQ6od7j9jgoKgIO/FOeB1A6gBbqD5oWvarVQfERMeBEXNJTXfov3YSsODZL10PI5bawcHipoWJqco0AdmG0Fahzlbqh2bDXCVXlnj+0tNzjd9JFoCEQNgJSIKK4OEEIjqMBwZ4QEBpHObSmwc1GiBZw3z09nPr16TVg0ElDThk+b/Qg+WyPShErzpjTzjjrnPNQEMJkgNr64xos6Fd0dVDm386rLwuJ+xGaHfI4sBiwjhfOBls4WgIeLDgTDv4A7DVuCsBDrgW0NfsYPDw0GIp54gptJc57XPaBKXbA6vAwxIFpZegI/5mdcMcTaz75i6gWUtyJxViaCOMl8bJ4BfwBPBFvhj8Cf9eCM/39C7yAR2e1EZPuemrdZ1JcdhbCi+OlD61TG8kfuUI0b+DMKZD/KL48Ms+I/9/7//zvc+8ypk6ZOG5Aj0fefn1zjikFLImVsdORlv+39+LZLrn3l/f7z5Fr2hNPzZiVJ98zc56bt+AFloK/wve6UJENm7Zs21HsI25A+fEeyGIo1rRLVExwDJpyHe7F9bgLuyt34z7cgwdxMB7C43hAeQLH40m8iAeVl3A/XsYbeApv4i2cgLfxPl7AB/gQJ+EjfI5XlS9wCr7Ej3hb+Qmn4mf8gU/wJ/7Cafgb/+MrZcAZSkrfq2UFjzO9ZWtpG4+z1HjC4xw13vE4V433PM7zTmY+8CwAzgeTOQ48F4ALwWQeaT6PS9TJgh6Xq5NFPa7wTtaQ1vS4Up2s63G1OjnC4xp1cpfHteqCM9mu+6jLZofKv/gMfuhW3pPiAU17HJjlQVDfAHEIQIeI+YlHYKEhpagtUCaan7BRoLDQThEoqCOLAJWzHoFQz5cnRaEgTFRYKkwRY+WMAUjjWkaXIJEwAoNOLUHcfDGMY644+bMo8P1hJLwSUN+asKZZ45uRjo1YMxyWKxyRtHwY9rOgmds0CKCF/jl3i3nj6npwDKJXOkiXSZbceUDhogx++TB31vdN6ZQnaxvAQgPbYXpfy/I6Gby5BrrAfAo57tf9GfB1tVXWWnuVU4GpY37ByDQpciH9rs9Fkp9P443DfcLcV8x96yyufmrJu5efcMIUsxvuc0q7GNZjpZHyRPs5yF+Nft3+yuA/6LcH2dFJjHAgZXAZJRIrN6goNldD9qlBbULVGSsaoh5oEK2LNnEsNozxNUMUkOcgY6GEwOWgXGdoIAytWzkWqXKsImVogtwlQ6QN8eIy43KaUgRlyCHLph1r2AI9X9Vp3ZzH4o1zI21kn+12int3NZc1cRD+pVws+BcrisPZ0GTWgzeWRs/8GTt0dqHtPLTxTW/D3C0Nb4WbLdHYNhtN3WpYVp50ki+pRNOGEQ3TGe1XMQgbZqEtbIgFv2GLob7lvxkOXHOrQVt7Ed5GWJeVDTwqrq9hZ66xSVL3jemdwJRJq1wbKtXMS5RsB3cd4wyxAPKkX7WsRqr4UBTVodqIhaMvIjaz6kPjla6hfx8DZaTPbfjoYxyuhqsJPQaOci4eSa7i9dxYeCq5d1aMAgpd2LR+JNLCmbR5fPmVlgbeuLah8bWrk7zjSbyg6uCwN0H2uIb1gvYbHvHHMPI78fT26Z1plmlY57237cR6slAinFkaTXsr8XAewr3w+momYZWzR5msF3pxUIdK5nei6fZM+2y4iu7NclQfbX/3oD9FtSFZjeVptS5YHdzJpO576objZkvUXNJktpdTQegVeg9Gzh5ZHQS/LZxulgBukUUnpQKlD+SqF0CN6zCTvb0ge2b2lOwzluW4B5tBiBIDlsULM1QhKCo1EytKj8N4somh9ur6hh11ciy3r59QPI4gw49GNFn7I8lyUorpYmXFzjZFpH0JWquDrEFBcpBGa8utTlysjL+82uit732iQ1pvhaCa2QM5MSLq0N1X7EzVecMmY510zPNyN+SKrEi8nktuL5OjLasS13VMy/usRnKieE17mxmz4I7q9uTejhz0H6VBrCCLktoO4Do0xSxgGguASIz1eDdRMHGDBqJH4xrWmfZU8FnFQKiplhMeNcfLAY7wkEeRkvNbHPtl1GhoqSMIr8zRc08vrfOrukNlnsFPH3XFAWJRHPJeKKpxULH9tiq5HwhfRkoogqAEVPNr/U1Gk4S0wo9pUSYUzhMD/Z2cKSKASmK6Q7XiprYN2yaK7MTN1lDiefZgXJDF/FFdp5SsqD0xumuYK3gTM/jD5bS40vIY0TEdlLp2etK4TCObfadRkLW26S3ICt+EabwQUb0NORjj9tOjnxs9HEXZAQfv8IxenpliLP26MSoQ+VEge76lti+2vQJFXjSImMBJx3JeyRNABXcr0jrwoOmkSCj8ow+n2qIquDBOM1bkfmRHQZxO66uEndYiMWz7Wg36SDwGTvrpVJ8M7WmLNRxIrMPxKynGGUzRXKIms/m16TyC3OwSC+PaSZzFqBVyXQfkAhKw2ODi0Q8bbOFZraQiMZYMOa193XxYXDO9SYRoLxcBkkPjzs36WsU8toTC1kPSKODcxrQN0RLjyLRGYOq4RmBPnDyqCNoi6dBIdQVIUEBK9wQVShR91SyrUlkWFbtzj5w13eK2As0rWE45U5zMAT982YojPiwMPrBKstKUGlMj0jMV1NsIworbxO3YX6FkvXjDXT7YnZ3giY5LPcMPCo4JoQPHhjEHWyI9+H5kBI7Jr2I9+t5IFpk+4lFZEfygX9jxrUCfWGTElirbElcxYKGs4GLzWiohxwyNi6K+CBbpYRU7/8WdHX+A4hbFFXkIf6XuFwodK7Yp3qX/QYZY7RAXjpn9tdnMGVqD4r83BTShxhFk7Dv29m2sUZsWbUA4pKLGbZGPPGjI6EQSrONDR103OGFBrMZiGP51aOrYVpprLdmIMnevqUA2g4lab3f2wt2O2dnVeztEQE1HIkZidCiJdDJyMNBV7+HYdDObwZ7Io2AGeZJ3vZI0s6ySFSg6wXlk+wuh4bCgL9DfL3KcmAxvo1uxtLlzSB2goNAWmSKvqtfOGRGdWHg5LkLOzkKGmFn7ZBPmULKaYlwt8nV4/YmGVWnhwAKUXjXS6hV2Zg4G3yG1GZvVT1HEQKvDK9Aw2sW1jP4ifj2x2E0Xs0YplhtsVEaRClGNl8uQ0ajYNQNZTdgRXNBE6H5tp+sv+fGrxNvsO8tz2cRj/q1d2Wwww4mV7VyCv4jm9lg6286I6NMyFpQcNGkvq4V2YYfaLZ7JhmUUSmamR0s+GYRiflL54FlmOlIgQaViIWKS5x0zaZlBvRgnzfLxqi/GMpaVV4zXW5ZliWVFPcc4jOTBaAJPjASuIvbLZ1nM4fZNaLjU2PHUB7gvgIBQ2o7YEXhLu61A6t80krAiF4C/rBsYkkz3cjJLN5ImOOVew3WXBhKDoQQaQKkbtzRiE4uO+8PY360dkcjskaGdYYSpzm3aQL6oE0RWUkwm4xF5qQuD65N63/eKXzz4u6tQLNff6J3+Pzu8epPi2nvxmg/2jtrxzyjFPQ2OngprCtnURD3WVrXyKG7A35twsKlr/wOzogN5v/vQdGLK8sTFvtKHU4iq1MYIm1X7BZJuSBdjr0b+u8bfnfoTinmaT5k/1TdA1T/TxdPvpXOrEzPMoCxgcGHhjMB8x8sx8bvfbsonBSSQXDyoLnbuXru+J1xpdK1Cr5PPnl0WvNt+55HIux+P5ROZGXRKMBWw3xpZw31lFcM9ZVYFw91l5SM9pRNYPTMrprG1gY2esTVRy9TKWC73eMFoT2n5SFeFFWuop6JyuLdoAq1laa+ZUmCnZ2rFNLUyRL6V2irFxZTagkVBMHOoPszIzbqRdHJ+7kL306mqkdG8KKf/FImxpT+kc0Zf/m9lQ+6gzbxAL29iwqg6srYOFNtQ90gGIhRv6x5tp9arZBlkbU00sHEEAUKEdM3Fg3OQ6ria3PrRoFhfq7kqvPumstzxzts1UVqNBXpbGqk16Ffgp72c3fnVsFhXq7GM3n0dJU842nW3Krre5kz8TMhrRi2BCOmGDoV4TjNNiHpLKFA5hXjBkDLD0cY8r3hWoi0cjgYep2FpjUKNdCy9QAguM+odFI1MkpGkd9/gLkRGvIeO/9Q31SG9zJxKtrCkks3NvFytLL1c4X7agjzr2AKYxngq/2u4t/tLB7WPW/V/3aVf2qh9eInzAT20EL8WVF/AGb9T4XTvXuQkyMt7UujbngtyYL12Z/67H43aaunvH+kVwGRFKuRnvFpPq3n/z8JtRtTbglobagyI11CaImkRXpQwfyopytNaPibl3FJw/jp26UZQcn+AUsrRpNGkG5Kbm4vCq9flXVJCPUPjGJ6Ln0+Abte+3s1eXXldMvf5/V8n9h1QLzVB4aHsIemDyp6ponaIZtzTbWSjLOHN65SGvPf0nCl0qiy7JyOIEkArzU5LzmWGfr8MWoSJXembqN3bYqOx8afH3/K9KU9ZfZdZviZpyBX28Qzd4c4SbL6wiLYaolRFd4V6x1THJ8ZWgZkIryKBV1XR7M7cFgaM847Rad1UFZpa6pnkG2zv7nC8n0pOPRumSlUJ66Zf+bn0fO6fRX51c9+IaG9qBNPPOzzaz4ceIfOK7BHi4uwRSHH3oPVQaKASY8GMbJhaZ39fkbb7Nq+08m1FKg8MhzNo7bY8FrD3ecTfOW4RZFmdWBPV6eMe1ZaUyGgECk3nnjhhJmJHDywORgFbGTsZrRXgGsPsgahmdMQ2vQyRYuA5Xmrae65DN0h7sMWG4ok4KiDjXxZm5zYfXSXb1vt4OdnZWnH660mrmXq6lXu6uXO4Wv4GQYSLOOffo9JNtzRrObPAks7q9u9C9wV6cuBuUVxFkPGWmjGHgyZJj5o6jx3mpxITCFPHbg6HcW7w+evm6JLO7zOW3X/i7rQKjT127kIblxyX0Ifzhbs/f/Xmz1YYZsdy5poW2qm6k6WdDr9gHI7NuAm62Uq8gUcN5VfHRBVExgzlZRkX8JAD2LE/HAIPboVHdPnvj5LKGkyd5Vr4iXAkFyH0hCCPe9MowWdvltGnA2Pc0mbBsWqVf0ubB8SNkqw9ZmsMBU9e+F+dR+yrEmcpK6O4vnYeeR+5U/6yqaQwgyOP81M9Oal8atDgoenDPt3jw+PAEXf9UdXY5VXkuf2biyunwWA50YjVs/cUsGPTX7u8jC5nkIxISmbyua+FSS+jE/6Sk99B+rnr0j1NOsizwMVqA+GBK2jFH5Lb+4TSCmOTTrSvwrL36vDmwKCl5S+B1/rgogJKTGsme7aSg7WDEkztY6D0fHgEn0tS5t7Glq0jWwvK4R7B/m7B8RFgbdnc3/H4HtTmnot5E41hyZseDobhz+l7g0xV8L1jYkF4MTN8cbmFY+UyI+K1+tPieXoyw+XjoeCCB6V9uePj7A9uX83k5FFwWb640GAqOXrxvNRwswnMWC00WUiOMHoyPYz547Da/bGxoXsLli3fdn9vaujcgWUYBoR16412zz+J+Utl8/t+oHFfuBPTosLC03MjESFwuXHxUa5SnOfe9fEBwj9WOlyTLcKfRFo/YjIosdXZuqw7OUSiC68JHs3+JTo1Jjg0Lj55D7ScM8iJnlpBnio/8z8k5F36J7S55SuT9ThXKSg9MiYymWpnWe5bfPiv3eaHk9dl5r8MCKVUPi87tocPT3QDu57r49eVrl/62gX22LGJT0dE0H+rCrX9QGmqojAn+Tea4z40hwn3WDrInR/TkasbswdHpIfbjPuoMGFMmffZdM+Vtzt5lNuVkw/D+QcOnb3C/92jf+bMa2+x3y7sPZO9hgcczMUrV1jJfOjgV+WvnklrmPj8Zo88dgzD8+Sr2SlQyJ8oB5x6+dsxYNsbA+hjBw/gjh0CeKPtovVtRYBof2lM1/C9tSPzs7LQKujAcoX8MwSKrg8+ChF0YVmzKCxuoP3pxdJTfy5+hnwDWzsPkrWLub68T2z7M8+8e1v3LjyHE4cdBATvGYVrt19hvOSpA01bczBdFsK8Vrg7FsbijsEADuQPBsZ133mnwI7H9ITWhxarM4c0oktKjxYJG4PKnFOgO2LFBxHxFx4FpW1wHcAI/cdxeOPhtzVkgg8hBYa5BIdU98r2B1eB8b7fy0dvt4XEH1IAHGB5YsJZJyfWlPA/GmmdwSxN5hCBmT8DfkK7RxS/Snenw1px7Zs/YkjCaR5aaSaj3zuprM3I63UIZ26SGz2WN7xaDPENDIPxkM65TuqFp/eu6bkJod5qa3SfcF+YWwgBs33/7hy/fyYgmSsYJ1qeNbMZ0Zr43kfHJnM0PKkpNjMlmhjI7L75WeV/PHtNfF9onnbAXZ2A7LCEQRCvuRVTNOKHaTwvP+ztSPHO1PZH5AEH8tChQFRQEzN2I9nauJOMTSikagoJJIWJ8Wev3zlra8q/qn0wtyRR9GFnvdtX+ufp0FCbb2+zIGlZCpt5sW4MJNhBhwLgQAHEVojsSTGlt2bse6J7no0NPZo+q3CGaunqlaOaCmvyp32sSR6pmsG/5YkgVktkT4utvHmq/z5y76r8Oaqji3eKXugveSIYH+hM/bVR1PRKmItvFbH+V0RpTvQoCs/WFNvFoMV3nG6I7w2nx/aA6azQf8tKUz1B0X/kAbvIzUELSx+89/ogBo9toHeHFKqFXtWgFz4B4wN/lw/eGQnJE2T+Aeyiwu9AZtfU6lH8v82MzsB8TdoEITgvKKITlL4e7T/WoxZ5S54owJblVtuk0gKXjhDC9GLFsp1+Vu5OTk3/mGqWN3B0Ils7GqureBIXjlhLrpCe1P6+cL9w1i9xIEAQbUdz9iC5GoB0nRnn5bnL0nrPjFUsXrlKeKpg1Szb5to44UcEPfv6yIW7yORt+auDTTWawX8UiPyA9rv3Qll0jiism1EG46misjExATPil0cDhu8td1KsdPT26Axw/jhvQlAXMDqoOUmaIGnJL7SagCagGu92aEppLCf5PXtraCT4aszFSZUmTxE7p68FVzYENnPG/m/f3QocAuvQ0CDG3Wdnnoyg78xdPvvhrJpWh62UfTGSMrt8xvOM14c5zGa9OnjxjAJufBTkbzcQ0NtzyxfcL7ivz6A3GrS1Os6onl2GiwvoOyNPzsy8ZPP2DQA7ksSVy+s1NhnavW0WRMtAh3nkyrn39Q6Zul1Npro2NDsYzNhDCX1WFzq/39SLXOpFZpFsxNnb3n78SOXkbJP01r3NKzLP5JZFF2fkr8m9u/e+S/rSa6SLHyEHhjiHBNdCu/xASCWoG2KLU/WtyvYU96iWAp2Y5q6dJtzygx+bT+b23k3Kkd08nE3c/P3Ylwk7YMof3pbx4GFrelZuaQWrMLD59iNGR0X1XqGssilm6kZTXEWNqVBTT297MOXfXFyKCtoxqQnhD8bjoiKVzP0SEsPvXY+NYoLg5w0UAtPequsY318cxcfiR/CiSqJqI2qxaqPfTO7rQiaPFEbqHuYHBqyn3l/opLCCr4wK3vmCyD5/iAePTJ9MZqyNoXGWMyPoUoRnHf1cJ7Ug5PKQ+Mynn3zv78u7p9DDIxPtzawjraP9b0R4N87E2BwONHexST342sRZ2dvA0yH+IIgRyAR7K30DW+swW5s0O5sZdU0nK6KugzVB4/TfCmA+69o40ml0be5c9Mj4XFv3qZ66Fj8vFwo1iAXM1PhgFtXDwymgN6+vTlrgZHc7f3eznGuTHH+fkeBgg5wzf/+DKx42d7Js7lzxePDouqfV7Ykpq7tXPcBrsinMzjktISeFFtmfNByinhlnbKWmcoonbCSrsKC5Il/PX8LJN/sQad9AId0WyLqqFNATSLiHSR0yBfILgat35n+Yh/9bLno6N7hINAwXZjCZ+tMqkT0403r+5qkOO2MT+9b8QhsfQw0LCyIVyoDQy3am/wywrYzFdHZGRrR1rLW1RDC6W/jYCWYWBA0zW7qlbZiVJRwhjVjtWTF+Mxz3HN1/C97G+G37wbkmRrEsMFVIYq6+asPHp+NOthbUdmQlWljGhrvVxPiCgHC0SyJFsUj1yIjM45CBlNyqkwnhiSzVukMVtAsZteVDeTHTCqYqGnpmitRkoIJgH+gKE7ZB8hYxKsMpIbBOK+yXPJEHa0qhFIZYKl2SB+wiFLM7rbH/nn/O8WftCGDHoOSSuRe5nEou9na1sPJ0AwpusE6yOvJCZh+uj+l8xETWBiNbDnxNj/ZdO9QWnyQEbEH+HeM3NCem+qzar95obbt+s3sEE0CNcHLwDAc/J39qhKMDlRECJ3Ly9bvbarQtpa2VWpvsPT0QJ3lkYm9+9vn2g2vtjY1+VOkD/ghFUdUVn4y4SsjmsRvvsyOp7h/7Z8eNN+DHzg5fEd0e8dAS0wGjODVtt9Bg/3FNFc0xdDirCuE4AUguzal19uSYu1ZeK9+7dSNMJ/W5pxdGi52tU6/mL5+5TSJm6Z5SYY5/s9ILbwT9ty4J07A/7OK6ubJ3Q9cOLINk8BjXWifsRmY+Yj0Q/voJ80VOHrBj+K/n3sZnx9/KSIxCYEDefunnx+WJtTtDDPqw/X49B3f7+vza06u3Fpxb5RIJK/7qyY4kK0NlMzdn47rEer+Ic44WFBezdswc2L8T/llcbWj2yD79yvPTna0/h77AgI6dE9nexcdCAy9Yh7n29FlsRHrUXWRuD7fR2sIZW5wcb58j56Zkd81Ka95QgzmnGqsUcL3HByJJ+tpOJqpqPZ6MGG5GhrSPWzAQRCT+YKHA5lSewMf6msrVjKx3hevfOacLw21VGuKY48n20Q1+sZY1Bzzffjx+Ovckwy56aNHUpSY6pjabmVgeEJp8rg3M1HQxa5huOTNPkpUl1cXc1MPFxtadtHVq0OOrEuwqbV7eGTJ7t9biXxGlLV8nCcuazpBn01V4nZxD9mgh/aP02J7xhph9zn/t5SFafAeYfiHM/oHM3wrA1qGguPTtuvN2Pxse199jHiF4ghDG+tPUL0+Uh3gjSOgTSh4Rqm7kRA3oD9fzC9eNpfYJxX3t9DLcNmR1W/vJ+IRy70TxUOq7L8EpwljfVXA50Jn833px03pJbX79PDL/HdlpK+dj5qSFkvPxzkoOV6x0XholbpbUFtXOCh9B49mamV0MenTHmROx3XRadDdxrMfeP5qPHiXpT/UHrbgN7rUTlScql/kPCg0AW/wxt+wEb2pOHIWcGevrnx4f46LUFtSmpDwSMAKawd+icxt9D3SEai1JKSLK/RxROc2+sg6JOq8kFPHKILCmUOBALkCV9K/W+4TNAbfi3rkiC1UxuNbsGTgD91Vks/bpqJrzu9ALlIDH8NSs3E7OR7W9WPgO+Hkv/rXiqeQaVNXCk/EA8Q16CazfYbnpYYysVCToaGhOGp2WlxoO9lyfyq+I5Qv16SvAf7Z5F756nf+pAk4y/ld5ObWWMY6Y6uqaZpqrrOJeqnQem5ok26/BxsG0wcYh/l96ojhajqziF285LylJvH2jY5ojGCq4+u74wvkE8elRQx7+WHpfMEk8vOsvHc5v8OCs0vO55yEFCkQF0DDHkzlsbvVbp42mwosfvCtydf3BXIOLHGC/KzQwI0Hc6lk33AzyayooxOkp8Cz+nWHOML714Fmlx2QeFk/msJVKmZYGzgfYZv6gtpXuNKGpo6+mrr0XqR5u7h6squ4eOvGQvZ4eiGbddtU0UgtGFQH/czz+71GoOaWf0v643ZOLFbQ7HTndNfcc3NIIDT+7nIRZW+Z5RbkpqYONJdln85CgabR5cFi0+il9tSP3QbF7/0B1FpnXw8woPCGvPDnuVEvhiaEuVK3+069bG82XHVUOpMYdM9ZXDYTTnTadL2wjB/oyod0wJlIrSzeL0ZVUVdmXxMjOITJ1mGGtiZxt8ZevOtNDnQ+VqhwvFQy3didb27uTYUnZRN0ptSQnN+l0X25lTx806r5YerEp0E33liEYkVoMsfbxNCWiuVY4dOScu3gu8ef6WkyzX1VVnbm8tWj21b827xXAoiD4lz9i7Pyt6nDQYjeJA37Ral/z+2QzEgCOrwXrb0HKMxeDvr9vUI3stCJywO4bN4ga0VrhO7BrfX8fo9rG96L565FJbRBtB7ClAVBGNYMFdGyA3WMjyFI5EBJi1Iqvhj1Zg/iC46vlHVeL0BKCbBBiF/IOQrbRY1ttECCa0Y9GZVA5qQwp6XBKGXaNTAkcCHQtaj/PArPCh2g6gfHlVmC567tXujMaK9K9qNYqim+pkw9qyeVW/pUPLzAzPzoIjC8lgeXyxtG1y8cCzZIVGI8YWJ4a4+jpaKmFKG9Y6rHJMoq6PKuoyw8VdXlOUZfXLJ3wrX9tCKUjCCzXP47uhqVPkksscwZ/DlDMm7VMeISS5dNJlWvkePomQAWebJZvA0vZGNbSyD4SEEptFVmItWQJ66Ova5VI2xPXng2PYC1uWWopVIYg9J2IS1iurSxSLHKzQpKd6kjYSEXC1iqSaw/Lw1duUDxkuzqPkvWOPvouljdBFpe94/SldWOqtTZ8YPcFIf8fW1L7P+Do/F5uNSqdoQY5O7809tJrR21BllZP12bBoB/UT3IF/fE+xgeMpsFe1RiuracaiQjXPktPJbOJVyxOgVXdi+URwMn5vceXwwjRHJN9jGWUxZl+CSEaz/5h5vw0YOHc7Nep+3CmkeKYRmmM8JclsvyKzljBBvoOY81EUVc4vzwV3AbV9qvfkgPa1mOdJJPn7xVQHmapzhPXtuYocCeGE7ePeeyHpi84VueWO095rAlFfQdOiGu9pyiOYEhDgfYjzNYAhwM0YP9Yc6jmwWRQrT+aAytaA9kRYLN9LgdAub3vYYE4m7zZisvRXP3SfhsNtOmxf5jEroHpCEAtg39O2HTw4SAIDT1scgjDmwI7BwFioZlex7GL+PR+Z5eYAgCPfYFlAXh9XN74T+X/51MWTBELwQEFUMD4gIEbYMozKs9AWAXEbF/fb6kgbWUYVollpEUVo3aLajeg9g2+3YhlsWUYT/wPZdah2kGq+dAp3yhWSZFBkhG/82ss92X0wwJG0AINQdCH71PtFibSQ4JOE6TZahU2BUn1l2Pjw2x7ALYuJafrcevqcloW8YDz1Fg+vb9KkNW1JIe6cCKRvWMU72POihWHt6arb0bbZt6+xryXzMR1XWyjv6DYRYi2L1DtJevQkVT9QKyBp2ZSqtWQ6KXRbJi1bFFNiUnLYdJIrOINmVbFvKUICzkRIZydZyEq5GSMPopqqWiNxcRHym+Nbe4rQzvO4aTXbFzA09+TboJEGgbQ84FtoodK4GD45VHoKuhhIqs1CWxTAnsx52aDMzCQ1dmAWq/xGVlwq2WK6l+wbzQZbs2GgoEqJaPZ8YhftPSXXCX6BbePSuo226ApjX0C4peCOiCh/gVyHxc8EuM6SuRTfzEf50M1I8Y9l3d7I79zQ8Foiklr4toqGbY8Jq1YdKhijSf4jbWQ6k+pcVJifSm+80LjSEpEeSuszCOW/5lUQ8xqzqrqMIl3Cvq2/MjACDqnWkU2fiG0Bh4tRk17Q7itkxlHJFPiP1oogCVUQIA5LKAOS800frEEAeawsNSLpqmGqSaT3Tl3tFR0SbXFdGUYimhesYS9Odo0rKnCmMZMHNUT1UxxE1HSTx4mh2oOeLC82drUrJ3CmDZF2GuFATQ0BPhBBVEOsBCA6UBArQgHAaYQAg1pHAB2AsddEdx8dkVhR98VTVTMoTG7Yh1QyHE+ZeSh8nJ1i6koTMli0IQKEwdPjQpVp+FZiiLwMwTv2VqkQMrc+AZGs4uHiHXiwWI1HiPBxoMo3+JRAhhxMFmZIShrxveFm088Fg0isn0oL1CnRTeYkVp+7mO07cw4TETHnZxYTZk/Jn+BwhKuzE6MUMdtNk2gYJFB3pNYx9mxZsqcAxJzx1ptUvlZcFlJF2QG", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { + "data": "d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": { + "data": "d09GMgABAAAAADBAAA4AAAAAWSgAAC/nAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCvtU5E8Lg14AATYCJAOHNgQgBYMKByAbzkqzoqzvGjeKSs5nUZTtzWj2XyXwZOjNKyMiImBY6zWKNWA4InKyCXHjC4uVkc/4jsPk6tWO0dBIYh7RfvvZ2xfNC6JEQBvBRsACoSVa6XxUtYSUCCLyUMJGxQYVRREVMb/RPwqiaO3/++ju6jlvgdCDQkS1EtguC4OoERR+EIr4ZoID9KtY027T2QGFC8Sv3Wdr/ZL9V7XGmSLf7eVq1V0NM8fgyzEnvgOVQLoTJHeOBOnpy033erpXvoAXNLb//7rMVtfPikfHmhw/mzsrxFN0S6eXEzdVikojDfjPtwysJR4vzhKPJzAOEfRLwFWQSiyarXJStOlSlGlLxmrvXfu0V2RVV2FkMjP5L5lJPmT3mHIAoFJEoSpsHaOtc/Xd3n97Iqt3cLdZiriXiEgIUqQLI3uXfvxtVWfBTplCeE5blssTmOjrTLc6eFqS0E7GBITAcXnvmyMwrLEPos8VEi8eki4dkikTkiMHki8fUqgY0uYowhmfIAgBgAWACwFAkHgIAMMW+5COOsbUFmSvjI8IBtlrI3yCQPYmj6hQkEUCAN9CU914dUQo0IBckjoaBEapySreYP2mPI4vu7Ctb1pjaFwYc+NO0+4EQcNznUNId7Wu3T171HjWc3pRSfcur/xpY6KxduwohWEOw3scHykWzHNjqODCuJM1d17PSlpRcJT6uiWhYGIRWGOd9TbYaLMtttthJ3UatOy21z77GTNhyoIVazbsHebIiQs3larUqHXGqDHjJpx1znkXXHTJZdfdcNMtt93zxLynFry05JXX3njro08Qjcwh0SJuN769JN0jCRFE0RbcSOLTqq2JPbW1P2kQp59nDPOB0QRjHIQN7GZtnzcc8hvHvOMyBRbng+pIqkODMRp7YxjHBM7inHE/zzzALB7iEeaMx/ngCebxFAtYwiu8xhu8Nd7lN+/xGz4YH/POpwp0rc/FO9tym3IYR3qOINPILK28sjsf7c2Ce06QKhgUnwpMW3RYaEiZYx8Rp1wTsnampKyXHjM5KZGfNiRs4nTw2OclDwKAGFj4IDkbT/wahVo+0yTcwV1MY+bU4ii4mKE+iXyGeccIMMZB2Nl9RXGKV+KqItSg1nicd55gHk+xcGomw3xkBGMchB2K8RhPMI+nWFg0ZkLMYds44aGwKcUS8Aqv8QZvT03GTRY+qlGHBosLNWjiDu5iGjOJTKYUWQCWs7ZJmkMp44Rp6UW8Al7jDd5KVJ0QW5XLDudLpuX5xOy8oZOfPIotI5jkM6f8BknPcxyMvMQmjpO7mgmT+mD7zDmcHK0SQzIgKbeZn6NWObkoPxfU5z6kKoMQE2zEtEQC5C9XHJAnLWTzHb+8lFfKCzyNyx9cj9eZ9QW/5X1Fg/eD1l9g+WcM4tR38iWpaXdZDeQ9+jhY7u1f/e3J/QoZt+VFE8ou12lY/hTr88U/UW8AiHfCtzb8ZT/LTf8lCqG8S/mGH8nuWpe/N0PX1F2k2IzqNnG9f7O7kd9kMe/zenXcZZ1jyQsufj5LmYub+jjtOZ2PacXDz9W8zFdsALD8Hi+qpbhVT4Tl5rxKJY3elpMpzZnfwhHcFGXy3Y2fIpa1Zat0uMBH4oUfveKDd+j5/YQNll/vVb7lyg/oskXm5F5K8WVf6p32MV740dM/Cc59Dh/cm8JythXCbrzlmPwiBmcnet7w/x/lX9a48Gb1A8jzjh8QPFVibqx9WubB9/9rvuVwfdmqbvnK4FouF+bljr48mMKUDcuLbrR8ymyeozMcbTn7skwOe2uvc73ivkvygS7xe3kV0fWy/JI/ryvB8rxQZtmeJH7LLA+IMyHchQn8RWNrbECyyQ50GvaVifoMyTAGyzMNXMGKLQX2rMwxcBVnrlYrCFynUp31Guas5owFm730lt0xZhQnhJ22JSmSIjnIWcSEtSxjHfOsZ2QDk6kxw2Zm2sKStjOyg8VpMJsmM2ixrN0sbQ9z7WWWfSxGnykMmMowJrGvbDSQ4tZIbMCYLVPZs4Aj0zkznwvTuTJHgaQe8Twp1ZByRz1PSh1YTgPLOROIjDqHcH7VeC64jOy625A7ZjDcmwJZ7ptD8ThQwhMLaF6OTrLkLaxeFp14xPPE8cCS+FJcQ0khj6BCTFBjKduZsJMJu2IcxbIxiE4SJCAxYhLX1ipuDDlIEqlEmEgeZgdGDjGLQ4ysmAkN0ST73OERiogJxaMj5SpIakg8EiceiXviTkNKgiiSUI8IohMT1G4LkG6ELRz/zgdkl3Z2KV+Rl1kbM4ZjvFlQD79AXxFMjrS2jTnHWOuU7DnZwpRP0bHnMyzMcs6yPihNRFQ3JSFnHWMQT0256hZhCKz9vzuTwaabAvw8QJ1oz9hGt0SHRIBll6EAGCEvAQQ51/AKgtCyyCg4tnEWpsEEAzSpnSTRkh0Hyqc204Zg1u5Qno6ypXZpuR2bQPYVSBaUBQIUgQF+D18wmiAWNA8D6DQwcKj36u3B0K1Lpx69julzXH87OkN2b5+QIFKUQScNOWWYCAERtwIALmErQwbkZ+Z2gHZJw/B3fPvbEQqlaWAdv65dYHiqhSEgoLw5Bf4HvquGDorQiwCAdMAcpHjTCwMv5fcVSlvCAOg6pGYKQIMiEmkAbClax9+z51111xtfLKOtzaZf7U/6013FFWUVFRSVFdcqainqKUYpHlfmLy8jgqJs2/nEF1wz7a2vUK2PFyhKK8p3qLnolt/zimQuYeQiWP5zxfcj7xit/0/9J3pYikQJYkXx5GDj8x/PSiAwi43ADrh2MSSfXh+a7oypk+uRz5DpjrumzbgnS7b7Hpj10CNzcuSeaNc7T7533vvNBx8V+IQFANDhvcN1QC57BYYiUkBSWzGCNhyHl9qP0xjAeQhxAVcwql5FOq65dznuNHAGM3iIKTzCHDLwGAu4g2d4jiy8wGvcV98gB2/dLxL3K5CLb/gdL/EH/kQe/sJ/eKf+jwJ1Wfmko318UKihM5QzfVCkEx/7oEQnfvJBqU784oMyTXELZUsflGuK24rtX1CJHbEzarA7dkc99sbeaMD+OACNOApHoRl34S60VL4EHxzRlTc/B7RCCLTGLB/1Mj43oF+08HEO9cl+Pxr+DRC3IYssieX8I2QYSicSiBjub1G0sFGJs1RQiS5FIGaI7RD3wggdtDVEjBhLR0pBboIDoEgknIZ24jAchLlpKE9WI/ySrE5yqEP61Qg0XYwA+K6b4x6/4bGw7FpLNLCoWacXj+Uo65icZAV0wv9g/qK1a+/ptkSmJNeyt+OS7MU0bbTOwCiw8Y2byrEZLdngAgM2rdTGwnAa9TUwuyUWY/jdeplHwDeS81iWTnKeWpDE+IA+GTXGCfMfp85F+3h4tyC8nxpXiVHcFWfJoZleGFEVR4wwOeM21siDx7x5HZD9mFKJjCClRCYmX4vD0mRHXKyAYHLt1Ve3XuZm2LoYCpQycIS99jSgB4zkuEKABrMJamFAsTDxzmnH3jMjZRkKT8ct2WyZtFhLw2B2jhH6qMxLE0Shy9693ptc+baB+dtpZ28Td6DiR7SogHG6iKkmLajt86QvKdDfbx3KePzrFl9mYtUH7HnRQc2KgQAj395kZRv/qJmmItcKPFdtY430ZuR1S3PWbJIlGeahAM2IGuyjfqOlQHkDQd5aqa2qtTGzCL7/0r6w9VmvQHBoDMob25vKDGmsideq9jVWNTWfdwlkkI9jZ5mr7M1oJq/9Q0ZLotJbxWRVqBxWvOQCUU8gCi2u/sWgyIJJIXo/ikpUNF5lTbJrdhc0Zqae+b8IgV2iDkJ2b57j9mZhYt5CM4Ve5CQBKXKntBe9DxSq4ROdKGZ7DhifAw4atwrXNtYGgdGv6n+l8JD75Fz2QRYfpVMsJGXuDLc1copPUsKVco8jSOhGDPCa9o19fr0+5XRidXHtYUyFNmeH/nbgWzi+1DC2Wf0aKwtupdXh2purKltu5mbaUzb/wJ/tDB595xokRQOCU3CuMIAylGZk4xAMhEMurw5vRFwEUuNbh7Kmgpb+0jWIzGWuGpeb4V2Xl0Slm+w9+kophiUqSycVTekL8FDapWZiu+3CqGDZaJifDgrPD/Jc2gpRwTkYliIsXKqSpLgZIANcJfPFnCqemYKR5Nropqo2iKKtMR0G2a2nS3otCUc7Ye4HqhlqNMjGyTfU1tL2OIQJjd5l6/OKtIVqGESF2cCCZKzmJfXJ0UPb4NznlNf6p5X4Kwi6b1xRSi0TSITurGUv+QS2Id4qiXsBvGRhlNP29E9jhcTOKcUnUdP5yyXGM4dhcgKqk1jt+5IQoiFxJ21hsK4ngQQpL4XAquMzSZ5RQEYhxkNwFGSLoR9LFzt24HnWKqqkmxfSXPeuYaCWuoYXrmEXNfkb4VzMd9kSyegY/Uihij2+t3qZ0xBv7JqjfATQFGECXGBQLygbZvhYYIdciw8KdG9ZtLBt2Gnf9Ud3eocCjINhtkoV3fyuppgiJEhqDAyLQrPApveRJYlBAxAtHlAYQOFw++P+Wy9zl9m6fyWJtfqe5htfpCxBgp3MXZZKH5ufcAVHD0PxQkjFvbWx3QXf6L2FWmKJvezyDaUqh/4ApynK93jIOLcpPMPUATwrD4YiJkaI5ue1axchmXYwmhRdo6TUTPrtaa/Jn8LDT/rb6SzT0DeTYZYDM60Lz+/OMP2eIB45yl1y/H6KMLy8XzkE26URQVzDc9PUq+MKThyG/lGIB7AindfQNzV/4XmlG+ISlQHIYzkKPID0f3lEWfPJTF3ZR7Q7U30gSD5QK+3xqwe1DXDb4Nz+TPGEDBLoQv2XA0f7CNCqZgBTzz2IhX2lI0gIPMOg6BiTYS/lIN3uQxuTOXScyqzkCKPaqmt011kgAXbUXNbyKQpSbYqy/HiDWqZtoFDstBLjBFKe2M/x9v4BNIKJQIRiiScyrtS0AlYyH12t+H9ALQ9rSrBPH0SNXBA+HznUhPV3KV7a3TFqO5KtH2m1rV0L+TvJt7E+kW0safRPVW2h1u0Yqt5Le+qhe7ZL1/Ey03V5/3DKDNY+8alw512dUVkNwrgHDUfnZDlkqI7nAvmaLru7exdcPci9+XdMed+7OABjliVpnDTmuajF3mvjjT2jhh9OlbmzWuSK52v1L53tYrrBP6ggNY3VoUZQH8RAr50dOCPZM/6CUZDQdgOViGVTTRuQUvRd7v0yDiXRov/+1svcnG+uO/yYogFJ/lf9JccQEY+gjKmKqs265pK+gZlZgoAQ/KakHBRH85rafiMsTReioDLOYxU1Okbjo0dJkznpFSKsDiCykB3vnQzIR506ydi7WUyiLoNhA9LHwha/ypgIpg1q5i5FAPGaUrdIGr2LJt+rMY4MDg7XPK036QppIcJKd7/UUz5N8dqlr7R3sSdoUJqG6Mi3sldQg4M5KbJwnMM8bWk+NevdUVsPF/dBBpDM12Kqrl/o3dneDK2Kpx7puNMTD6e2mae+0xjmJBB128pEfVuLA99epZSbFyQZi4PRpPbJxbhDcxoQMYl2oVszH+K9PCv05ofs/WJOa6KOCor3mGY5mzB3XH4JW7gYevTs0eee3JjeyR6+lbIo5On0op/uZc3miPJRg7JP/m1H3Af9eysofbtGodLPWpTkrVIXXW7JHZAqtjczHn5wAXHA18CGh1i7wm1acMlFoCMdC3Amoaaiqiird/MnF+Z7SyeQfLKVGamYsDxzD0wtT4qD9xspJa4vDKswRFaUXBJ1wl2Lh+ZgaK87jQQEnM+9CYO3g8D87seYFrJ6FO758bvaZN45wOs4ARlYReOQn1M8GqtOQJxHX21B2xkihgcxv4KkC58uBNfqsi/eUgk9KU5lwi67BG9y6nXdt/fSnqvfEGRtM2Z1NOXtFYGRLwRt8G133ySQByexjzOQqbwM/ZgvzNilNoxc8pALhi0NRxlVEufkJOw5Td9mxtU2j7ngXpCuDrV2CgGL33Npn8uellCLX7DycKn+7+r6sqr6N1J5yw8M/SlVwK89Ul535J9aqaiYpCueSSrm5BXftL8EKrYr/53m8Tds46XQ7QJS/3U32VMZx77M6Hj4cFBy7ZOKdQuV8mVfOedPUSt8m7yIMFSRwQyl2Tkn8oKLY7TrKZ6sY69mJgRK58qVL3RIdb9njIoYGVGN0SgFHcsCxdmrcbikh5pGNuVkD/cm4ThU3kdNdmOVjhw/kEKy1HP9pou8vRmWNDPKQR2fA0gP+fgwLJ+QE3HxMWoy+QCraHggFceiil5qGlmXVXCyf28KyeKAuw7SR54+DEuaOcWkSo4B8voJZcH66Wm4S9zf0wAMUjmjd8rDD240NcykhjGPPprqwDnoxDFqCq3vZkmFx59JjjmSDW2y/9f3Nf28YRTWnzuNJ9DrFz2m2UR1JKe7fyiRn8EJSi6m4qdUGw3vgTrfQAuGv5uVjZ6NMA6kfAoO+qeZPquALBPFN0MivOOIuWxiU9SLuHgK+uduoJa34yZhV+TgFepq5Ma0B2Uj5R+nh2Bjo5lchD2K0FJ9jR6Qjt8YVRMKzRoII3t8mnBn2oE0nhd30C2VCNvmVKN/SC2I36LlWMFPPZShtCAV7gEbO9gFCgP5FjdHVnt71LVxzwjQlP1MIkvkimRqTornrFqCHwrzsjXz0DED/yGPf93wE8+92rAt6ag6RbUDHglO49P/Uj8hY5rhqu+b1dlbn5JG8cjvlN8IE5qh8m87jJibmTbZ7Dg4QPrvPKWQdHxO6e1GJXYkGJFo5yhZ5ON3Vy+C8wjb+1ZGrsIJuUuKMHJEokia7uHe08MrYYUIC3xwBj7Ryi8cAlZ2wZ2XoVnEMH5wj9PNPX/zvpPz/YnzIIu3xULWcAErhhUpzApE4agljxc5BNxT3BcTaARPP2UP03wLexN3ea7zOE6NFJuU/jKFx/DCc+rgMJCFsXnhOBX31jPTGDHpWWm4AGBn+ftJ2ZrLWlYjWlZZ4jHb8NurW+5fG0y/eR2ePD1z76HsMS1hcYh2KhpGF1m8u/znUmLTuB/NzpNHeimx8Zl+KBUPnBWrZ+fED0RjIxS2OQl2i4bEmlZdw3JfzN7n5opwBOpIMJ1jZgieiitcJ7fhu685F6j+ikN6UTX5Wpql7qg3UtWBcgBZWm+t97DQgTjS8bPcBrrDhmp3ezDs3Lc1et/VrTul/5SqnYADWXtpwXkD0RouOx2HqYGcCyveXccTeH6RM8BIqh/L0jTbadJBdWGfIS+dw/345mNepiUzLLYmHCeiE63sFGZkXGEoSsYnGiirlBje/vnuWIjqK1iRDL/AbHcUjBrKYHtEmrFZp6kVikDtySbzzHRWae6XJxmZuB9f+UG9RQTKtehEZyVsIauKNa55iPnvZv90xN2hO12oRoQlbgjs9sKJpIEpdk0wL/nETnegpO74V3HscYJM+c6ZhFW3YN8qtY1yrSre+zfKHVGBLfdK7AhF0T8JMmUaKGnVFGjXsSLcTgS5WRokhYrFM13soh2xD8oI4x4+BfyjP68Oom585ib7KFc01h3v53FYsuaP/Zymb9M3OGrjLxZ7weSr+GEUfJhlmttXQkQioYjZSG+tNZ8fTEcFRJZPlipdR46U405UkEV2DDblVADvTWEP8RTH//fzNVOSOhwi97ysDXpwr5VsVIH963Mg01WvfQ/NtVyStfcfvEZcJCS7K3RuLWa4PR0+uZd0LIoIJDlX/WRk/bXbvYB0QUrpI2jMJJlfTby+NXqwk08eHN0v8zyuC3aLzQ4eg+cL19hDvOmfAR5r3E/TQjmTK94sXetxZK6HvNPlnER2dEhmNFZp4EDqQDonnBUQHJRMWgFgzJvesKhHfUnOIa6nCD+Ty7AVw4wbq2YYmkAh3cJfgLI0ztr6UgpNkP5VXv2PRA35EPl0yVwRriVdbdx+vOXDEA9DcFKoIXmRbqSytzphO6rms7yjz8CDtVSV18qnGWmchhMDlRj2Em3eDnhKrimzxCLkms9a3veG3RGZlsKMCUEJfkEN2n2zAsPBC0a+kqFDqISYTY3/TKulxBhVi9ZxG08QN/DXd9x7Y4z80soUPE75V24dl19IHLzS9rAc3SMlBu82MJJrBEiYiGq9tto19p4IDr+a9zkLpHGq9zhovBb2BOMnVf624OdtfB7PPGdeHmfECkuEKAH3tvHTYGX7g3M2S5VWIXHy9eT3o4XyNqtngN/UItfkqJjtWVC2GxT72b5hsv2PxhbntT/GeINeQRlXr80h0n1TqVlAwohiViBLL/AsZZGXYpWQZSscB0tBAXErNfpPcgM5TserbUWkXVPkFH6AfynQfmL/bboZEt4uJzq4S7Xkyeq5SpyN79XmqPHeEtrky7ULZXiC9Kfs+uWWDA6anpodvBhew+KPz9wrvOn1X37sa9aF+sv13DyxhOy6VHwYQGPQdG66IOy/78ZiJnlwNyPid3IjOVnbuVlaaHck/jYuIu6mh4sflrChWzNt9w74J1Gu1c6Wt7maOGLvtRw/D+I05W+pDf+Lp8BxU0sfU3Pe7CJ4BV9e868w8gbvVuxY9GVNwXsBlF2p46ZyktKLs7AygPpMrMSRcePj++pWZfG/0uPKR7965xKZxB1h0BQ5eQLo2YUV6SgPnc5khwuqbphW7TBZKZMuvuwSSod+9ygm8uBlRPQ1Sso40NJb6pTweDqYz/KvcCT449vRZlfkmvXBmjzIyHys9FKX9QqXEPcSvJ5xixmZT0YZkfPcuvyBQlxLnh6UPcLIfAp7YfXPEw82kwe7+NGDV+DsBXxCt09u+48j1B1A79w3JaW7cHFV52Af9ZUq9toQuYK0oo+6ZvA0bOjI7Nn0Tv2J9YP7SF2k/u7AG+OpafCc/fz4xfr7jc7i424bxG1ybsH7JmW5JrJs/R7vuJ9yzU9kamB957tRrn3emFStUGB4JgyYvwaPCkZUO4Dxe1qY4NCZMKnaca593gQoTo4yn59sfZjU/rAF/q5JkK1JAOXhJyW31twGUbD8+qr8LlyChgapWfQ+6QuvJ4BpR3d3DXNFzqjEVcxMBDTX9IqblsGoB49PctoPSZFMJWe59wvtUYP9LtO1z/KgTxTE9KQdPOwN+62lBZ3F9OupCcRl7FqyOrmbOwKi4L3ppaO4EfcvkC6JBfXbEOV+DYG4B0f1Wz7cffQoDsAt2VZf4W26O2qMknI9BhyfrO7rLgFEDhrLO/STXafDbyz99TavEPfim/O9PYACwjPccREx9kjy4gY3rEuJis4FawXB0WL63cwkYhi7p/rtEHG7oJMfmVo4jqvxyZeUcxtFEkRJULMfaqLEH7X7sbuyGQcS7Tm23+G74DpeUuItmnBbm+iLORlEFz47SxshtCnaDOvLvIqs25n4CM6t9Duk6/EwFAluC4mu5i2NbNgvlhzWBbEM3b5u6ZIuXqpMu5eTv1s72m7Glaj5C7lGRbHdxQJfSJe8YGzvAxsFqcES0q2keGIcu+Wviuti6q2SvyPx501yCJry0rT3DfUoa8VpeKhWvlDglpk5iL2JKl+rSzhWdkRAlPg3BeA2HNVu+3V3ZRO5Ak/8wb0HUoKR4oYzuBZV3OKfiZ4UxVyzNOYWVhKdOPYkzYsk4o6ACJaGmZNaw2sLZm5s4fS54FHk0gwy3lqsB+OCuqNHspCODk+s0mgmXaae9XNcQY5T/G3mlhpnfPHiOLR/L07ZH1nHlyED14QKU90+fL1lF3wVloa5XSACab3dknG5pRewLypxkLWqPXkHt+H6GcFgzNXh6CkbR35uC+GJWlMkfRPujMReY4U6x3qgHuzVTKuUEjEntUDae7dMXvmRUVyHy2+qX9JOJAw6BV7767LMc9HFUud/OdUS/Obq/z8VF+McdKnU4Q9WFae7lvm54rlhKEWXHh1X6E04ELWufuc5UVQnc2ZcfKE3LiQuL0qOwP5t0oKj+dSbGYnEOPZKcKeLuPpPOkAQl106Bs1d4CQi2VSENvjjJhxe50jZU9qMc4iJOVhdZTGC3VIUQ7rdD9+wB05P7MO1SLRIOU9O1OcX3Drrc8eQZEOUhbb6oTocXe0i0CmoxnnE+CPYhKttaQNeTTQbZMc32wDIJkfUNGIlc5hYzRHmq46rf7KinqWU/D7ShTrQrTFcfQqQZYDPIeSCdDd/pBuxXFI3OkqPbm6sJ4eTvWOrr5mHEX3o+SRuGAanyBAfT1RqDytntVXJV6RLJsNaN0hQzMyVAtg12jzdIBTUwMwIaT4vXXJelQy3A1MyLuMGXDXLPxM5Joo6e3ADyfCglS5xkRzQTssUV+5v+z7o/lfaa+95ZXGtArae1hDsawOJSq1xhQdalVS8TdprWyXVVquftGqtNF5bAV9OrMl/dnIlVebKUOWWyoVzKsvhKrRzpQUbptav/pxNmSG0Dbli1a/scJLtZlftRObwqrPwvsZdtuaAdNkmG+5OuTp5qUJYCG7eUfmZ3yd3x9KYm1tBFSubo6/8TWFJy9rVWzbqvv4mhtIXxWsnXXxN6cUqWgrfkYECtyV7BwyxK7hvzlVA5N9zBhu5CosKdy85h+mxKjRNFX4hA+J0leamsMYdpZ/5x2TvWhmJ5VRQOWWP6Ss/yd3Z5hHgB2b3Gez2S3OFKJlIEI4aHjiQS6h0RTUSYm2XpotwDBHkfNhad8/+g/4hPB8Y6utkVImfk/1lsbnZDferih1bnL4O79LdUVOErHsfiGdPTxxZofpOpPYhZkXZOLuIGarCiJsZzYoR37Qo2vQiY2XFjepjgcJMd1xLvrLMXqITxZFNcDpE7r6g7pDvDUK+6YN84wEUtl7+qeztVtmmJoV/pW9K/DpP7sbnp6mDY0AJ8Ij3xiG4vkMsbeXf6rJNsE87dCz7LL6Kc5ObcoNLW7JX2NLt+dWHFf2iopqKUsIrh+JFeBzlxQzUhpYfr1hpzzzMK7WU8YyNqC5J2foyghNufLclIQhH4YfJZQtiCewIo9vNcUE4Gj9KLp0H5UzZpuonL+7+KZGkJX90t0Si1i6dsxo6OyUSd8gf3SmRRHpzdwpobFqH1Mj2vcLInBrJ/DUCut9O887dc/P1ZfWw+1feXEBz+NtrxtVhINvuS07XOwTWqHKnkydNj2kaGCp+2GLNtwjBB/bpGV/PAFYnNSj7eIxawuYidAe/eMW8MkxNzqxOxDloJIrjz7B0C+bYGCiwIj9Q6rd3qUnUsL1M9kgjS23p/u0SFQwjV2HMBmB3OrCn1LNffNHbuondvPh1TGzzWKjefHrWduya0a4qXIaPPGJ30T0EE3eeNKFi3NBOriwBsq2ehwNyRSll8v+z+RRTcwddopeifO6ejMQdTDmLxrDps5EkwVmJW8voAmkCmz4XxTqukbi65OVy4yI+ieQuFzuKX5a8seRx6No4MEawFPdag+hz2NjJLiIgNgG7kyJGE7tDIXujFMXclgiz3/K2kcEIPpGSgRJwVhU9caejJitZL/6go65cicshwm9/jIkL7DoZO6JGjZRvXQfRMx0tfADJnqtwlJiSvPna0/H6eTwEFrswl0xVZkba/K3oZGIMG8+3E/AvsbPSHt2IzJUzf3fPTiRNhO6wKqDZWAEUkKrSKOEbdN0sVU1VaO4shr3CZm6BrYBiaEfR2ayniyvTSsAQeevlt2jvPUwUgYa+ZLFkSTFwJk/j0NZWX+SOUqqQNxa2NPogD5RRluRrucdoq7qtxSG3XeY71O1tYcOSvYdUjbt281Ht5hjpmmjtpg6q+A8VqVoVaGswEER6bvC0YRoL9b/qgIXJQj0wovqrUlEsKkgm+VATapK+Xy5LBIkoXzPQQc57fCynt4XJOzcxvFvikpOJ4miSOyWmVid6I04jhQ6nZaEYVJUYXLtNR11L23G/N8uniGQPIPc7vN265gjIvNLyFdJtNtBHyokRsnsT7ZTSCHNSq50fEZrfhnItTA7PDnP1n4C4I/XrPeLF/4IpdnHl4y9RZeIgdmUQjs7CHm3et/+2wf/oorYWdBukyeNswqc/vJrAQZ1kMW+mgR9zVjULPjQ0+NnO75LK8QqTgNWzV4pw6ySrjmLA7ZyeqsbFuPUaq5qiz+2+d83kNN3NMMIUmRPCcI4fzZLqYxxsiKyQMJLtBYY9zGDrVn8vd8eYCFYEy8Ml0hl5oKwwnssp4Hf9uDGIj+Oz1zmdnJFzA5E+jrbSVb/2b+5f/NavyhmbmZ6CoDBwUHOXJ7m/018z2C5b27Lv4T7Zml0G/H5zpbhhtxlYZ5VgTrJIDSebxZl5Z8RakL//ASkWCRZgJt6JoywSG2on3gYcI70G9y0qMcTJM4vuKcRtnBafcbTm7vKWSHo8u8dufHFfi45Q7cj/KEjBepNXkalfI0lE+keg8kPp/LZyQ2zGMFPZHmOsGY7Pkf5ds44tUQEKosFtqz/BXfjwkjPOSC+a/BRYLgnqGiNis4P+E65KAIUX67gp7Ni04mgM90XMV4d42dG3RwPiUAvuP8mqpLm2/WAezNkZVF6pGaZC73g7dhyfROFGWnUBJmHIp8CTYeevHlhRvSfG1WSXu7ajhms83epgkCX2J3JrxMvAEMTj0BnnbbY9pwW4HPUcpxfRj/x36vEiMO2YfnZxDtgPlQZy7Ib4YjX/nBhFwajdXsm0reciTkH9ycZPufm86HM03VJWYFqSHzigpt3Gajvy8mP3DVbroxYjHY2Nn25AXGcY05Fm7GC/+9TOEKK3aUczwy3Hg2Hh4wSarwWDa7dGsByluproL7LSiXH8nM+fYpfmf1/IzcT1ODQUiwLqPldqBd1J9rE7uV2/aX5Xde50umbwm6ldyb2kUnz5Br+HU5A6JiRSSKInCudB++XhG4qnr0upbwXo2J888HzRsnflv91wC9a9svRFjht9qjKh9E5IOuWKJNWO39hC+ZJbjA4jZ+Wrb6GiW9GJlFvyTitXUXZuO1FFz9zmeGM0+FsTnubb8wljBb1rpyTTC4mpeYUxlivsvyQt6Cyk30hLJEaxd6I7XSSxq3U4QD0jbxg34+NLxARrdC/JplzY6IeOYGGtA2VPSRMpj5h4Aksjja0VgZ8ibJrj6UEtftLszhNvUdu4kXfY+DsyRvf4mj/ff6LLNXk54CkDkD5I5LPY4mVBXLcB9OG74n01FboZxYyeUVwD616Zx6GzkRs9Tz6dI5LQiWTjeW4uP344yY0eFJXmRvSRS0P3pOhqX9OJQIloIkzF9djcD3IWGi+2/VOsauUq0qbtTUYhWJcUFVHiTeSSLs3LjEmQ7EsjOoJxIenCG8lhfaVab+JovXrNf3Awyp1l7usI6npfORUorOdEdx3BlWAHAndnHHJMS3awjoi0Q4fTEh1sI8I9bPe6qqiZG1i57NLZqGZhBFqvF5ih8dkua+6IFrbYEgrB8RRmSFKhM5J7EaCNWu1XhoGspMDLWFgomy2VPcwTrloAzgNJL+PoCql8yYwhftyqF0CS9TSJKJUq4AWIOG7K84BV/Uwia2RrVhwblm5c+9WnxpfOqZephGhnfYHWf8kuUWH2Vv7Bh2XIDmEhjta+AXbAkDuZkfwiQ+CYVQc8L9ED8UkMawezwFLo8Y+ytb9pYdvLFRE0Y4oBMzY7O5xwJRKVSK3h8jFoEX/aufLXKZBIPC6d1y+R1LmXpSX7FjlUrlDqCFjliVrRveuqFxMkkqKk8qJhr2ehimyNCjgxtvd1SZd0AttLdiTWK8J1ABmgLGV9KZXmsG2h6BVWWmLZP5IueegS00DmpY6A5i+fNIndXrGhHFdexOLvqCrRz60Vp8h0PRrtRMHo9AY3gdjrOdEvscPDjZPsvn/+CLIyEZOo/Qs5RAVwXfhxmWxvmcE3U8PIEOWt0ZVSa4jYFoqWkNIiy35OuuRRvcENmZVCaMpYZe1OJpUXxbv4mBUjndpWu3G9U1SImC83KIsTKH1q9kIvskNhEufWtd8ittO7/KB7biGll2zXRZmS5zXeILCZ79Ljs8fCVjLTcdopZh0rnt9//HTeZ1XK8Gc2dhq/99ip7VtwoieRRchfFgxRcIo3kUmWn+KLYOlGtpyQsdFfMt1vRU/D+g0cxBKe++fouffTmsouoJ8dXXJfKtNS69g/B0LSsnAEObG/IQNFobJUkmcl0LxDkY6dFVXXSVt/UPc9rLq8kpXB/I+we2Fl5oMCoyvIQeT4Ey3/4PI+RqGhxE3apwdXy53RHsutFANNtxR7e2f/3cbQOjg52D9ZMSSZ7ggRJpSwXKMgLRxN+LenJhHcZKI0huRBSW80clTH/jiwPSkWRaK8mMtntXXU1ffZ7vey2nwBtdNWyze23aJutNvVMUptm9keuLjfdL9jUHwxOYycMNCdjlJQ1iCjdJtE6MzAix+3sFIebHA51GaJ95yQvGmTuZ/qXlsnis6FWgfB4Y76cdma8dCU/x8fubn+x6H/iVV8xub3PwHW4v8DgIqvdERahyHE9aXgbljnxv/837uxaQVWxk0bwaybmhuAdbqY9zrMvrnx0FD19gvgTvPGbsHYquV3Dkp2KzJ6hwxYXI+O3shA609g+pV2T60Pge812lty5TowKpsm4KoNoV9V22lUpZR13dpxIw8e+wCRjF6RvRHdqFN71WNqn3pc7aeBkSjAA4TjNWCEXgto6pk5uv0wl/jr5LKGkNZNA9v2ulHaUpoOrTPi26X84W7ozrvaAXVD+kUyl7iWF9gQqZr18tkcLdZckpS8wJxxt41IO2n7CL1W0DRgju7ippImG5QUKbc9eYHN1tXs0Mu7qZM5un02l/iZF9jU3L0sOkv6I/TMAxRFN5+7UJTcOOeV3Ulyel1VJ98o9RXTNdSY9rnGnemCakwmmcZpp1XzAhVQYS+955Zf9Oi9Quo2bgo5kL5ZpfVoGTe4NhvSddXGtSEH8vxriN/B5XmBKl0HMd1WHehQpoN7MTkCqnVdOKRALl7gJRCOxWZLIga8dgf0/wcy7dr/AVDJ93a0DNK4toCKy4CD2lEyThFTN+yHyCgg7zf7DSfcj5aZPzbP6u6FVT2UNUzafLhrRmrr2LcIVJfkkFgANPO9bNzn1Rv7mzmorOf1nxIrR11Lv3zUDsJNWN4L+vw8o72mjbVbmtKL+oc5rreX9t/mGJm+sosRIzkBSI+u1IGnk/L8V1dKjct/9OmpELV2oP6a1+0GpNdXByiRDsaA2A5B6HgnnfhjLV6v9WnZDcj3rpTE5u1kUzWQuaqEsgzXlkNxpT7R8p8eQN4Xo27Pu3F3AejFjOZ5SvNDj9/ntdqSnRmsHRhvypp+fhsvFiD16zEvgtxR1QD6ZC7DT3yhPlX67rxqZR/StvMDHsO7WrkA/PMDX+NUDoUFrNYp0rmmPz6GEHSHAQEg9th87stPo0vF9vydJrMOAAAm/8RTAwCYbda/+1vjv1m66bpIBDoCzQwB6k1rLAD61rP2f/DdAL0pnOnTqOGtAf3j9pAS64FuzzZVM6zLl8kcNV4LtJq3Y/2kkH42pcNTUIUxbWUp7WpkuoSdY29KucIf+AtS2AEyIhCGZujMqqp9oNIG0jj+zYVpfdOkaY1hnSsC9KZsTtRzu6eUqKlkd0WSsKVSG/Gzwv5mSShrjHrrlF3aMh2sjTbdxdaXtGuFNUOrOq2rPj2Tz6/+dnT56HK9zYM6padO5EOXyfLQdH7aNQnDiMUoSHoPM126tpePlSXLoAIdrLX0+4SocvGksrSyfbS5vYr4+IviS8LyiEJZc3dlLP3yyaOKZNyPWVkMUOuVdMuK07gldD6XNpYyOUbS6cSn9mCN9pkSWlI08VswoH3OtzJiXUX5MSvwawXd9iZ/1K0sDCNPllU8R4bLY4BD2UtfVvMYdf7oX72rzdb0l5z7S6E93mwJ83rMSuxcne33TPWXno1yF0Y/sTlqdBGD4UWgZYzk/upgskrV+ulOsVppVDeFpZagajhXHL0S0qzMvGi/qK3C2K4kGY6TTaq3N4RPWZjKuhcZ9a3WQKuV36pT16eM9Luq+0iqerfWuZtmd+XWXRGjPF/6S17ly6ri9ZW9wxUhajm2FveXea8JUlZo+Uf5qpGEAjaDCXWUwQv5KEc7UmK9FrYt2Xfux7NSSmdby7FVlEJIQsRSbaMMn59tJ8cyqci2kG2fJLJ1TELUOm2ijBUn2zaWXwIE4LMykuyRs20F4AACsT0KBIDGF4aKDgCuYD4RYXEFoQaeiMmK6ZB0ItlaZYJSU0c2lcPWNF1CYeJFCODHXxRF22yxdTEUGRJa4GA+pzYWyoua0CkQXG0tkJGZ5yNy9SLE+Im9qbEm5AlECWM8vYdgAbxq7RW9tJd6kQIgQ8eA2ojtdtk9VPtdriNVhxKjhNGyeaFYodbIC+Ph+VCjEyP42dzNR+jAIrIQppSoS585myhVN07cAoPln9d7C+TtAgAAAA==", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/icon_bundle.svg": { + "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hhbmdlX2hpc3RvcnlfMjRweCI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fbGVmdF8yNHB4Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX3JpZ2h0XzI0cHgiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjbGVhcl8yNHB4Ij48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImNsb3NlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNvbnRlbnRfY29weV8yNHB4Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRhcmtfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsM2MtNC45NywwLTksNC4wMy05LDlzNC4wMyw5LDksOXM5LTQuMDMsOS05YzAtMC40Ni0wLjA0LTAuOTItMC4xLTEuMzZjLTAuOTgsMS4zNy0yLjU4LDIuMjYtNC40LDIuMjYgYy0yLjk4LDAtNS40LTIuNDItNS40LTUuNGMwLTEuODEsMC44OS0zLjQyLDIuMjYtNC40QzEyLjkyLDMuMDQsMTIuNDYsMywxMiwzTDEyLDN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZG9uZV8yNHB4Ij48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRyYWdfaW5kaWNhdG9yXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMSAxOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTIgMiAuOSAyIDJ6bS0yLThjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wLTZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDRjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImVkaXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXJyb3JfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX2xlc3NfMjRweCI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9tb3JlXzI0cHgiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZpbHRlcl9hbHRfMjRweCI+PGc+PHBhdGggZD0iTTAsMGgyNCBNMjQsMjRIMCIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik00LjI1LDUuNjFDNi4yNyw4LjIsMTAsMTMsMTAsMTN2NmMwLDAuNTUsMC40NSwxLDEsMWgyYzAuNTUsMCwxLTAuNDUsMS0xdi02YzAsMCwzLjcyLTQuOCw1Ljc0LTcuMzkgQzIwLjI1LDQuOTUsMTkuNzgsNCwxOC45NSw0SDUuMDRDNC4yMSw0LDMuNzQsNC45NSw0LjI1LDUuNjF6Ii8+PHBhdGggZD0iTTAsMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImZsYWdfMjRweCI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl9leGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImdldF9hcHBfMjRweCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJncm91cF93b3JrXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImhlbHBfb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJpbWFnZV9zZWFyY2hfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAxM3Y3SDRWNmg1LjAyYy4wNS0uNzEuMjItMS4zOC40OC0ySDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTVsLTItMnptLTEuNSA1aC0xMWwyLjc1LTMuNTMgMS45NiAyLjM2IDIuNzUtMy41NHptMi44LTkuMTFjLjQ0LS43LjctMS41MS43LTIuMzlDMjAgNC4wMSAxNy45OSAyIDE1LjUgMlMxMSA0LjAxIDExIDYuNXMyLjAxIDQuNSA0LjQ5IDQuNWMuODggMCAxLjctLjI2IDIuMzktLjdMMjEgMTMuNDIgMjIuNDIgMTIgMTkuMyA4Ljg5ek0xNS41IDlDMTQuMTIgOSAxMyA3Ljg4IDEzIDYuNVMxNC4xMiA0IDE1LjUgNCAxOCA1LjEyIDE4IDYuNSAxNi44OCA5IDE1LjUgOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJpbmZvX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNiw5VjRsMSwwYzAuNTUsMCwxLTAuNDUsMS0xdjBjMC0wLjU1LTAuNDUtMS0xLTFIN0M2LjQ1LDIsNiwyLjQ1LDYsM3YwIGMwLDAuNTUsMC40NSwxLDEsMWwxLDB2NWMwLDEuNjYtMS4zNCwzLTMsM2gwdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJoMEMxNy4zNCwxMiwxNiwxMC42NiwxNiw5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwX291dGxpbmVfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNCw0djVjMCwxLjEyLDAuMzcsMi4xNiwxLDNIOWMwLjY1LTAuODYsMS0xLjksMS0zVjRIMTQgTTE3LDJIN0M2LjQ1LDIsNiwyLjQ1LDYsM2MwLDAuNTUsMC40NSwxLDEsMWMwLDAsMCwwLDAsMGwxLDB2NSBjMCwxLjY2LTEuMzQsMy0zLDN2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmMwLDAsMCwwLDAsMGMtMS42NiwwLTMtMS4zNC0zLTNWNGwxLDBjMCwwLDAsMCwwLDBjMC41NSwwLDEtMC40NSwxLTEgQzE4LDIuNDUsMTcuNTUsMiwxNywyTDE3LDJ6Ii8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaWdodF9tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiw3Yy0yLjc2LDAtNSwyLjI0LTUsNXMyLjI0LDUsNSw1czUtMi4yNCw1LTVTMTQuNzYsNywxMiw3TDEyLDd6IE0yLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwIGMtMC41NSwwLTEsMC40NS0xLDFTMS40NSwxMywyLDEzeiBNMjAsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDBjLTAuNTUsMC0xLDAuNDUtMSwxUzE5LjQ1LDEzLDIwLDEzeiBNMTEsMnYyIGMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xVjJjMC0wLjU1LTAuNDUtMS0xLTFTMTEsMS40NSwxMSwyeiBNMTEsMjB2MmMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xdi0yYzAtMC41NS0wLjQ1LTEtMS0xIEMxMS40NSwxOSwxMSwxOS40NSwxMSwyMHogTTUuOTksNC41OGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxbDEuMDYsMS4wNiBjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBzMC4zOS0xLjAzLDAtMS40MUw1Ljk5LDQuNTh6IE0xOC4zNiwxNi45NWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxIGwxLjA2LDEuMDZjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFMMTguMzYsMTYuOTV6IE0xOS40Miw1Ljk5YzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxIGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEwxOS40Miw1Ljk5eiBNNy4wNSwxOC4zNiBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMNy4wNSwxOC4zNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGluZV93ZWlnaHRfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0IiB4PSIwIi8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik0zLDE3aDE4di0ySDNWMTd6IE0zLDIwaDE4di0xSDNWMjB6IE0zLDEzaDE4di0zSDNWMTN6IE0zLDR2NGgxOFY0SDN6Ii8+PC9nPjwvZz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibW9yZV92ZXJ0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibm90aWZpY2F0aW9uc19ub25lXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgMjJjMS4xIDAgMi0uOSAyLTJoLTRjMCAxLjEuOSAyIDIgMnptNi02di01YzAtMy4wNy0xLjYzLTUuNjQtNC41LTYuMzJWNGMwLS44My0uNjctMS41LTEuNS0xLjVzLTEuNS42Ny0xLjUgMS41di42OEM3LjY0IDUuMzYgNiA3LjkyIDYgMTF2NWwtMiAydjFoMTZ2LTFsLTItMnptLTIgMUg4di02YzAtMi40OCAxLjUxLTQuNSA0LTQuNXM0IDIuMDIgNCA0LjV2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJwYWxldHRlXzI0cHgiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icmVmcmVzaF8yNHB4Ij48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNldHRpbmdzXzI0cHgiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX2JhY2t1cF9yZXN0b3JlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX292ZXJzY2FuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InZpc2liaWxpdHlfb2ZmXzI0cHgiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJ3YXJuaW5nXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPjwvZGVmcz48L3N2Zz4K", + "headers": [ + [ + "content-type", + "image/svg+xml; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/index.js?_file_hash=c9c20ad9": { + "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIG12ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHksZ3ZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLF92ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHl2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2dmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMseHZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxidmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpYnZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pmd2ZShlLHl2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIHZ2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPV92ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP212ZSh4dmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBPZHQ9SCgobF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxDSSxoRyxNZHQsRWR0LFRkdCxUeCxDZHQsQWR0LFBkdCxJZHQsTGR0LGtkdCxSZHQsTmR0LERkdCxBSTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGdsb2JhbD09Im9iamVjdCI/Z2xvYmFsOnR5cGVvZiBzZWxmPT0ib2JqZWN0Ij9zZWxmOnR5cGVvZiB0aGlzPT0ib2JqZWN0Ij90aGlzOnt9O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKCJ0c2xpYiIsWyJleHBvcnRzIl0sZnVuY3Rpb24obil7ZShyKHQscihuKSkpfSk6dHlwZW9mIFBJPT0ib2JqZWN0IiYmdHlwZW9mIFBJLmV4cG9ydHM9PSJvYmplY3QiP2Uocih0LHIoUEkuZXhwb3J0cykpKTplKHIodCkpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbiE9PXQmJih0eXBlb2YgT2JqZWN0LmNyZWF0ZT09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk6bi5fX2VzTW9kdWxlPSEwKSxmdW5jdGlvbihvLGEpe3JldHVybiBuW29dPWk/aShvLGEpOmF9fX0pKGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihuLGkpe24uX19wcm90b19fPWl9fHxmdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYobltvXT1pW29dKX07bWR0PWZ1bmN0aW9uKG4saSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiImJmkhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7dChuLGkpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPW59bi5wcm90b3R5cGU9aT09PW51bGw/T2JqZWN0LmNyZWF0ZShpKTooby5wcm90b3R5cGU9aS5wcm90b3R5cGUsbmV3IG8pfSxnZHQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obil7Zm9yKHZhciBpLG89MSxhPWFyZ3VtZW50cy5sZW5ndGg7bzxhO28rKyl7aT1hcmd1bWVudHNbb107Zm9yKHZhciBzIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJihuW3NdPWlbc10pfXJldHVybiBufSxfZHQ9ZnVuY3Rpb24obixpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKSYmaS5pbmRleE9mKGEpPDAmJihvW2FdPW5bYV0pO2lmKG4hPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgcz0wLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtzPGEubGVuZ3RoO3MrKylpLmluZGV4T2YoYVtzXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG4sYVtzXSkmJihvW2Fbc11dPW5bYVtzXV0pO3JldHVybiBvfSx5ZHQ9ZnVuY3Rpb24obixpLG8sYSl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aCxsPXM8Mz9pOmE9PT1udWxsP2E9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOmEsYztpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKWw9UmVmbGVjdC5kZWNvcmF0ZShuLGksbyxhKTtlbHNlIGZvcih2YXIgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKShjPW5bdV0pJiYobD0oczwzP2MobCk6cz4zP2MoaSxvLGwpOmMoaSxvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLG8sbCksbH0sdmR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aShvLGEsbil9fSx4ZHQ9ZnVuY3Rpb24obixpKXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG4saSl9LGJkdD1mdW5jdGlvbihuLGksbyxhKXtmdW5jdGlvbiBzKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX1yZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUocCl7dHJ5e2YoYS5uZXh0KHApKX1jYXRjaChkKXtjKGQpfX1mdW5jdGlvbiBoKHApe3RyeXtmKGEudGhyb3cocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGYocCl7cC5kb25lP2wocC52YWx1ZSk6cyhwLnZhbHVlKS50aGVuKHUsaCl9ZigoYT1hLmFwcGx5KG4saXx8W10pKS5uZXh0KCkpfSl9LHdkdD1mdW5jdGlvbihuLGkpe3ZhciBvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihsWzBdJjEpdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119LGEscyxsLGM7cmV0dXJuIGM9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBoKFtmLHBdKX19ZnVuY3Rpb24gaChmKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAsZlswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9ZlswXSYyP3MucmV0dXJuOmZbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxmWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihmPVtmWzBdJjIsbC52YWx1ZV0pLGZbMF0pe2Nhc2UgMDpjYXNlIDE6bD1mO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpmWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1mWzFdLGY9WzBdO2NvbnRpbnVlO2Nhc2UgNzpmPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGw9by50cnlzLCEobD1sLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKGZbMF09PT02fHxmWzBdPT09Mikpe289MDtjb250aW51ZX1pZihmWzBdPT09MyYmKCFsfHxmWzFdPmxbMF0mJmZbMV08bFszXSkpe28ubGFiZWw9ZlsxXTticmVha31pZihmWzBdPT09NiYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1mO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2goZik7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfWY9aS5jYWxsKG4sbyl9Y2F0Y2gocCl7Zj1bNixwXSxzPTB9ZmluYWxseXthPWw9MH1pZihmWzBdJjUpdGhyb3cgZlsxXTtyZXR1cm57dmFsdWU6ZlswXT9mWzFdOnZvaWQgMCxkb25lOiEwfX19LFNkdD1mdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBuKW8hPT0iZGVmYXVsdCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmQUkoaSxuLG8pfSxBST1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pO3ZhciBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTsoIXN8fCgiZ2V0ImluIHM/IWkuX19lc01vZHVsZTpzLndyaXRhYmxlfHxzLmNvbmZpZ3VyYWJsZSkpJiYocz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaVtvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixhLHMpfTpmdW5jdGlvbihuLGksbyxhKXthPT09dm9pZCAwJiYoYT1vKSxuW2FdPWlbb119LENJPWZ1bmN0aW9uKG4pe3ZhciBpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixvPWkmJm5baV0sYT0wO2lmKG8pcmV0dXJuIG8uY2FsbChuKTtpZihuJiZ0eXBlb2Ygbi5sZW5ndGg9PSJudW1iZXIiKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmE+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2ErK10sZG9uZTohbn19fTt0aHJvdyBuZXcgVHlwZUVycm9yKGk/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSxoRz1mdW5jdGlvbihuLGkpe3ZhciBvPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gbjt2YXIgYT1vLmNhbGwobikscyxsPVtdLGM7dHJ5e2Zvcig7KGk9PT12b2lkIDB8fGktLSA+MCkmJiEocz1hLm5leHQoKSkuZG9uZTspbC5wdXNoKHMudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sTWR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW49bi5jb25jYXQoaEcoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG59LEVkdD1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKyluKz1hcmd1bWVudHNbaV0ubGVuZ3RoO2Zvcih2YXIgYT1BcnJheShuKSxzPTAsaT0wO2k8bztpKyspZm9yKHZhciBsPWFyZ3VtZW50c1tpXSxjPTAsdT1sLmxlbmd0aDtjPHU7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFRkdD1mdW5jdGlvbihuLGksbyl7aWYob3x8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBhPTAscz1pLmxlbmd0aCxsO2E8czthKyspKGx8fCEoYSBpbiBpKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpLDAsYSkpLGxbYV09aVthXSk7cmV0dXJuIG4uY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpKX0sVHg9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBUeD8odGhpcy52PW4sdGhpcyk6bmV3IFR4KG4pfSxDZHQ9ZnVuY3Rpb24obixpLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYT1vLmFwcGx5KG4saXx8W10pLHMsbD1bXTtyZXR1cm4gcz17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxzO2Z1bmN0aW9uIGMoZyl7YVtnXSYmKHNbZ109ZnVuY3Rpb24oXyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHkseCl7bC5wdXNoKFtnLF8seSx4XSk+MXx8dShnLF8pfSl9KX1mdW5jdGlvbiB1KGcsXyl7dHJ5e2goYVtnXShfKSl9Y2F0Y2goeSl7ZChsWzBdWzNdLHkpfX1mdW5jdGlvbiBoKGcpe2cudmFsdWUgaW5zdGFuY2VvZiBUeD9Qcm9taXNlLnJlc29sdmUoZy52YWx1ZS52KS50aGVuKGYscCk6ZChsWzBdWzJdLGcpfWZ1bmN0aW9uIGYoZyl7dSgibmV4dCIsZyl9ZnVuY3Rpb24gcChnKXt1KCJ0aHJvdyIsZyl9ZnVuY3Rpb24gZChnLF8pe2coXyksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxBZHQ9ZnVuY3Rpb24obil7dmFyIGksbztyZXR1cm4gaT17fSxhKCJuZXh0IiksYSgidGhyb3ciLGZ1bmN0aW9uKHMpe3Rocm93IHN9KSxhKCJyZXR1cm4iKSxpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKHMsbCl7aVtzXT1uW3NdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6VHgobltzXShjKSksZG9uZTpzPT09InJldHVybiJ9Omw/bChjKTpjfTpsfX0sUGR0PWZ1bmN0aW9uKG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxvO3JldHVybiBpP2kuY2FsbChuKToobj10eXBlb2YgQ0k9PSJmdW5jdGlvbiI/Q0kobik6bltTeW1ib2wuaXRlcmF0b3JdKCksbz17fSxhKCJuZXh0IiksYSgidGhyb3ciKSxhKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBhKGwpe29bbF09bltsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsaCl7Yz1uW2xdKGMpLHModSxoLGMuZG9uZSxjLnZhbHVlKX0pfX1mdW5jdGlvbiBzKGwsYyx1LGgpe1Byb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKGYpe2woe3ZhbHVlOmYsZG9uZTp1fSl9LGMpfX0sSWR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwicmF3Iix7dmFsdWU6aX0pOm4ucmF3PWksbn07dmFyIHI9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppfSl9OmZ1bmN0aW9uKG4saSl7bi5kZWZhdWx0PWl9O0xkdD1mdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIGk9e307aWYobiE9bnVsbClmb3IodmFyIG8gaW4gbilvIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmQUkoaSxuLG8pO3JldHVybiByKGksbiksaX0sa2R0PWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX0sUmR0PWZ1bmN0aW9uKG4saSxvLGEpe2lmKG89PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhYTohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIG89PT0ibSI/YTpvPT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6aS5nZXQobil9LE5kdD1mdW5jdGlvbihuLGksbyxhLHMpe2lmKGE9PT0ibSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7aWYoYT09PSJhIiYmIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyIik7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiI/biE9PWl8fCFzOiFpLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBhPT09ImEiP3MuY2FsbChuLG8pOnM/cy52YWx1ZT1vOmkuc2V0KG4sbyksb30sRGR0PWZ1bmN0aW9uKG4saSl7aWYoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IiYmdHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/aT09PW46bi5oYXMoaSl9LGUoIl9fZXh0ZW5kcyIsbWR0KSxlKCJfX2Fzc2lnbiIsZ2R0KSxlKCJfX3Jlc3QiLF9kdCksZSgiX19kZWNvcmF0ZSIseWR0KSxlKCJfX3BhcmFtIix2ZHQpLGUoIl9fbWV0YWRhdGEiLHhkdCksZSgiX19hd2FpdGVyIixiZHQpLGUoIl9fZ2VuZXJhdG9yIix3ZHQpLGUoIl9fZXhwb3J0U3RhciIsU2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixNZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixFZHQpLGUoIl9fc3ByZWFkQXJyYXkiLFRkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLENkdCksZSgiX19hc3luY0RlbGVnYXRvciIsQWR0KSxlKCJfX2FzeW5jVmFsdWVzIixQZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixJZHQpLGUoIl9faW1wb3J0U3RhciIsTGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLGtkdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsUmR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixOZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRGR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxqbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxYbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixmcGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixwcGU9IlxcdTIwMDAtXFx1MjA2ZiIsZHBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2ZwZStwcGUrZHBlLGVxPSJbJ1x1MjAxOV0iLG1wZT0iWyIrWG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVmwrIl0iLGpodD0iXFxkKyIsZ3BlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrWG4rV2h0K2podCtZaStobStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLF9wZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iK1huKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix5cGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1fcGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsdnBlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIix4cGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsYnBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K3ZwZSx3cGU9Iig/OiIrW2dwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsU3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLG1wZV0uam9pbigifCIpKyIpIixNcGU9UmVnRXhwKGVxLCJnIiksRXBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK1NwZStuZnQsImciKSxUcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIseXBlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LGJwZSx4cGUsamh0LHdwZV0uam9pbigifCIpLCJnIiksQ3BlPVJlZ0V4cCgiWyIrWmh0K1huK1ZsK0dodCsiXSIpLEFwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxQcGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxJcGU9LTEsa249e307a25bVHRdPWtuW2JlXT1rbltudF09a25bQ3RdPWtuW1d0XT1rbltmZV09a25bYXRdPWtuW3NlXT1rbltRdF09ITAsa25bYnRdPWtuW010XT1rblskdF09a25bS3RdPWtuW2hlXT1rbltfdF09a25bWF09a25bZXRdPWtuW3FdPWtuW3B0XT1rblt3dF09a25bZWVdPWtuW0xlXT1rblthcl09a25bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgTHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sa3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxScGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LE5wZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxEcGU9cGFyc2VGbG9hdCxPcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCx6cGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fHpwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gRnBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBCcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gSHBlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBWcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFVwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBxcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/ZWRlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIEdwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gV3BlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBZcGUodXQsQXQpe3JldHVybiAkbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gJG4oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24ganBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgWHBlPWZxKExwZSksJHBlPWZxKGtwZSk7ZnVuY3Rpb24gS3BlKHV0KXtyZXR1cm4iXFwiK05wZVt1dF19ZnVuY3Rpb24gWnBlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBDcGUudGVzdCh1dCl9ZnVuY3Rpb24gSnBlKHV0KXtyZXR1cm4gQXBlLnRlc3QodXQpfWZ1bmN0aW9uIFFwZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIHRkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gZWRlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiByZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP2lkZSh1dCk6VnBlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9vZGUodXQpOlVwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIG5kZT1mcShScGUpO2Z1bmN0aW9uIGlkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gb2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiBhZGUodXQpe3JldHVybiB1dC5tYXRjaChUcGUpfHxbXX12YXIgc2RlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLFBwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxsZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUsY2RlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PWNkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSx1ZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PW14LnRvU3RyaW5nLGhkZT1ZNi5jYWxsKHZuKSxmZGU9Zm8uXyxwZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSxkZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsbWRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LGdkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxfZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUseWRlPUc2LmpvaW4sdmRlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLHhkZT1nZS5ub3csYmRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sd2RlPUc2LnJldmVyc2UsdnE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHhxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00sX3g9e30sU2RlPWFfKHZxKSxNZGU9YV8oVE0pLEVkZT1hXyh4cSksVGRlPWFfKGd4KSxDZGU9YV8oQ00pLHJJPWdtP2dtLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgobkkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBBZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFBkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBJZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVVtZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBMZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIGtkZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiBSZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIE5kZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gRGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPUxkZSxlXy5wcm90b3R5cGUuZGVsZXRlPWtkZSxlXy5wcm90b3R5cGUuZ2V0PVJkZSxlXy5wcm90b3R5cGUuaGFzPU5kZSxlXy5wcm90b3R5cGUuc2V0PURkZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBPZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHpkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBCZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gSGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPU9kZSxpcC5wcm90b3R5cGUuZGVsZXRlPXpkZSxpcC5wcm90b3R5cGUuZ2V0PUZkZSxpcC5wcm90b3R5cGUuaGFzPUJkZSxpcC5wcm90b3R5cGUuc2V0PUhkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBWZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gVWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gcWRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBHZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uIFdkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPVZkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVVkZSxvcC5wcm90b3R5cGUuZ2V0PXFkZSxvcC5wcm90b3R5cGUuaGFzPUdkZSxvcC5wcm90b3R5cGUuc2V0PVdkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIFlkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIGpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1ZZGUscl8ucHJvdG90eXBlLmhhcz1qZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBYZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiAkZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gS2RlKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBaZGUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIEpkZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1YZGUsZXUucHJvdG90eXBlLmRlbGV0ZT0kZGUsZXUucHJvdG90eXBlLmdldD1LZGUsZXUucHJvdG90eXBlLmhhcz1aZGUsZXUucHJvdG90eXBlLnNldD1KZGU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsbGRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gUWRlKG0sdil7cmV0dXJuIF9JKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIHRtZShtKXtyZXR1cm4gX0kocHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIGVtZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gcm1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1HbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/Um1lKG0scm1lKEosbSkpOmttZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPVdtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIG5tZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj0kbih2LFdzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBpbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gb21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1qbWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9WbWUobSk6dGdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiBhbWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIHNtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGxtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PSRuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBjbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJkxhKG0pPT1idH1mdW5jdGlvbiB1bWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gaG1lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpmbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBmbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6Qm1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxIbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBwbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8JG1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP3BkZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIGdtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFrbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiB2ZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIF9tZShtKXtpZighZWkobSkpcmV0dXJuIFFtZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXltZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24geW1lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PSRuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PSRuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gV3BlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gTG1lKFksSixUKX0pfWZ1bmN0aW9uIHZtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiB4bWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP0dwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9JG4obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBibWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiB3bWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gU21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIF9JKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19OmdzLE1tZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIEVtZShtKXtyZXR1cm4gX0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBUbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LGdzLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuICRuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOnptZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIENtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9ZGRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBBbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBQbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gSW1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIExtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBrbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiBSbWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9GcGU6ZW1lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gTm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoTXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gRG1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1qcGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgYmk9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPWVnZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gY21lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9JG4odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBPbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSxibWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIHptZT1neCYmMS9xNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP3RkZSh2KTpZcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJkptZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPU5tZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPURtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1PbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gRm1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gQm1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEhtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBYbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPVpwZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFZtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1MYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgU2RlOnJldHVybiBoZTtjYXNlIE1kZTpyZXR1cm4gcTtjYXNlIEVkZTpyZXR1cm4ga3Q7Y2FzZSBUZGU6cmV0dXJuIExlO2Nhc2UgQ2RlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gVW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gcW1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gR21lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoSzYobSkpOnt9fWZ1bmN0aW9uIFdtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4gQW1lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBQbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gSW1lKG0pfX1mdW5jdGlvbiBZbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIGptZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiAkbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciBLbWU9VzY/dXA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIFptZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiBKbWUobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBRbWUobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIHRnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIGVnZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPWdkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoTW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sWW1lKE4scmdlKHFtZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj14ZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9Wm1lKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIHJnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gbmdlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBpZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIG9nZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciBhZ2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLHNnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksbGdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIGNnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiB1Z2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gaGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gcGdlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxvbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIGRnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiBtZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiBnZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBfZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24geWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciB2Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JG4obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLHhnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPSRuKG0sT3EpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxiZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD0kbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gd2dlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6eWRlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gU2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P3JkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gTWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBFZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBUZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gQ2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIEFnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLCRuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFBnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206d2RlLmNhbGwobSl9ZnVuY3Rpb24gSWdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIExnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIGtnZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiBSZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gTmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gRGdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIE9nZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiB6Z2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBGZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gQmdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gSGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFZnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBxZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgR2dlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEseGksITApKX0pLFdnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4geGkodikmJih2PWUpLHltKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxZZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIGpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gWGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gJGdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiAkbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6JG4oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyIEtnZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksWmdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShmbShtLHhpKSl9KSxKZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShmbShtLHhpKSxrZSh2LDIpKX0pLFFnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEoZm0obSx4aSksZSx2KX0pLHQwZT1ucihacSk7ZnVuY3Rpb24gZTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gcjBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gaTBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBvMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gYTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBzMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gbDBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gYzBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gdTBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBoMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBmMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIHAwZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiBkMGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDppbWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIG0wZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBnMGU9dXB0KExwdCksXzBlPXVwdChrcHQpO2Z1bmN0aW9uIHkwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIHYwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIHgwZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/QnBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBiMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiB3MGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciBTMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxNMGU9dUkoZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/JG46VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gRTBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgVDBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBDMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBBMGUobSx2LFQpe3ZhciBOPSRlKG0pP0hwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFAwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBJMGUobSl7dmFyIHY9JGUobSk/TGZ0OndtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBMMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/UWRlOlNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIGswZShtKXt2YXIgdj0kZShtKT90bWU6RW1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIFIwZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBNSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBOMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOlRtZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEQwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST1tZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIE8wZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChKcSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LGZwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQsZnA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiAkcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgejBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxGMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIEIwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxvcCksVH1iSS5DYWNoZT1vcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gSDBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVjBlPUNtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pPyRuKHZbMF0sV3Moa2UoKSkpOiRuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoUXEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxVMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gcTBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBHMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gVzBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBZMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIGowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBYMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uICQwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiBLMGUobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIFowZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIEowZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBRMGUobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgdF9lPWRJKEVxKSxlX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxyX2U9YWZ0P1dzKGFmdCk6dW1lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJmRzKG0pfWZ1bmN0aW9uIG5fZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZMYShtKT09S3R9dmFyIGJtPV9kZXx8dUcsaV9lPXNmdD9XcyhzZnQpOmhtZTtmdW5jdGlvbiBvX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIGFfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBsX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBjX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6cG1lO2Z1bmN0aW9uIHVfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBoX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZl9lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIHBfZShtKXtpZihLbWUobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24gZF9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiBtX2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PWhkZX12YXIgZUc9Y2Z0P1dzKGNmdCk6ZG1lO2Z1bmN0aW9uIGdfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOm1tZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6Z21lO2Z1bmN0aW9uIF9fZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gdl9lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PUl0fXZhciB4X2U9ZEkoUHEpLGJfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBNSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIFFwZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxqbi50ZXN0KG0pP09wZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiB3X2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciBTX2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLEVJPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLE1fZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxFX2U9bHAod3EpO2Z1bmN0aW9uIFRfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIENfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxBX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBQX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gSV9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIExfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBrX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIFJfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIE5fZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIERfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBPX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxtcyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gel9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsYW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LHNtZSl9dmFyIEZfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKGdzKSksQl9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxIX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpfbWUobSl9ZnVuY3Rpb24gVl9lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBVX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBxX2U9dngoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLEdfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCxGbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gV19lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIFlfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OnZtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD0kbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIGpfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gWF9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiAkX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gS19lKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPXVwKFkpP3l4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIFpfZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIFFfZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gdHllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sbXMobSkpfWZ1bmN0aW9uIGV5ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLGxtZShtLHYsVCl9ZnVuY3Rpb24gbnllKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rRHBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGl5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLFhwZSkucmVwbGFjZShFcGUsIiIpfWZ1bmN0aW9uIG95ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiBheWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sJHBlKTptfWZ1bmN0aW9uIHN5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGx5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxjeWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksdXllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBoeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBmeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIHB5ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24gZHllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLGJkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiBteWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24gZ3llKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgX3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHl5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgdnllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24geHllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBieWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK0lwZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCxLcGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gd3llKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBNeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBFeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gVHllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gQ3llKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIEF5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxuZGUpOm19dmFyIFB5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP0pwZShtKT9hZGUobSk6cXBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksSXllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gTHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj8kbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24ga3llKG0pe3JldHVybiBubWUoWWwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIFJ5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIE55ZT1ocHQoKSxEeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24genllKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciBGeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxCeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEh5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89ZmRlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFZ5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgVXllPUJxKCRuKSxxeWU9QnEoZmZ0KSxHeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOnhtZShtKX1mdW5jdGlvbiBXeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIFl5ZT1wcHQoKSxqeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gWHllKCl7cmV0dXJue319ZnVuY3Rpb24gJHllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gS3llKCl7cmV0dXJuITB9ZnVuY3Rpb24gWnllKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gSnllKG0pe3JldHVybiAkZShtKT8kbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gUXllKG0pe3ZhciB2PSsrdWRlO3JldHVybiBvbihtKSt2fXZhciB0dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxldmU9SHEoImNlaWwiKSxydmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxudmU9SHEoImZsb29yIik7ZnVuY3Rpb24gaXZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGdzLEVxKTplfWZ1bmN0aW9uIG92ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gYXZlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gc3ZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGx2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxncyxQcSk6ZX1mdW5jdGlvbiBjdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciB1dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxodmU9SHEoInJvdW5kIiksZnZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gcHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGdzKTowfWZ1bmN0aW9uIGR2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9TzBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1TX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPU1fZSxHLmF0PUVfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1JeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1YMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1uZ2UsRy5jb21wYWN0PWlnZSxHLmNvbmNhdD1vZ2UsRy5jb25kPUx5ZSxHLmNvbmZvcm1zPWt5ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1wMGUsRy5jcmVhdGU9VF9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1DX2UsRy5kZWZhdWx0c0RlZXA9QV9lLEcuZGVmZXI9ejBlLEcuZGVsYXk9RjBlLEcuZGlmZmVyZW5jZT1hZ2UsRy5kaWZmZXJlbmNlQnk9c2dlLEcuZGlmZmVyZW5jZVdpdGg9bGdlLEcuZHJvcD1jZ2UsRy5kcm9wUmlnaHQ9dWdlLEcuZHJvcFJpZ2h0V2hpbGU9aGdlLEcuZHJvcFdoaWxlPWZnZSxHLmZpbGw9cGdlLEcuZmlsdGVyPW0wZSxHLmZsYXRNYXA9eTBlLEcuZmxhdE1hcERlZXA9djBlLEcuZmxhdE1hcERlcHRoPXgwZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9ZGdlLEcuZmxhdHRlbkRlcHRoPW1nZSxHLmZsaXA9QjBlLEcuZmxvdz1OeWUsRy5mbG93UmlnaHQ9RHllLEcuZnJvbVBhaXJzPWdnZSxHLmZ1bmN0aW9ucz1EX2UsRy5mdW5jdGlvbnNJbj1PX2UsRy5ncm91cEJ5PWIwZSxHLmluaXRpYWw9eWdlLEcuaW50ZXJzZWN0aW9uPXZnZSxHLmludGVyc2VjdGlvbkJ5PXhnZSxHLmludGVyc2VjdGlvbldpdGg9YmdlLEcuaW52ZXJ0PUZfZSxHLmludmVydEJ5PUJfZSxHLmludm9rZU1hcD1TMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PU0wZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9dkksRy5tYXBLZXlzPVZfZSxHLm1hcFZhbHVlcz1VX2UsRy5tYXRjaGVzPU95ZSxHLm1hdGNoZXNQcm9wZXJ0eT16eWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9cV9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1GeWUsRy5tZXRob2RPZj1CeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1WeWUsRy5vbWl0PUdfZSxHLm9taXRCeT1XX2UsRy5vbmNlPUgwZSxHLm9yZGVyQnk9RTBlLEcub3Zlcj1VeWUsRy5vdmVyQXJncz1WMGUsRy5vdmVyRXZlcnk9cXllLEcub3ZlclNvbWU9R3llLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249VDBlLEcucGljaz1ZX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj1XeWUsRy5wdWxsPUVnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PVRnZSxHLnB1bGxBbGxXaXRoPUNnZSxHLnB1bGxBdD1BZ2UsRy5yYW5nZT1ZeWUsRy5yYW5nZVJpZ2h0PWp5ZSxHLnJlYXJnPVUwZSxHLnJlamVjdD1QMGUsRy5yZW1vdmU9UGdlLEcucmVzdD1xMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1MMGUsRy5zZXQ9WF9lLEcuc2V0V2l0aD0kX2UsRy5zaHVmZmxlPWswZSxHLnNsaWNlPUlnZSxHLnNvcnRCeT1EMGUsRy5zb3J0ZWRVbmlxPXpnZSxHLnNvcnRlZFVuaXFCeT1GZ2UsRy5zcGxpdD15eWUsRy5zcHJlYWQ9RzBlLEcudGFpbD1CZ2UsRy50YWtlPUhnZSxHLnRha2VSaWdodD1WZ2UsRy50YWtlUmlnaHRXaGlsZT1VZ2UsRy50YWtlV2hpbGU9cWdlLEcudGFwPWkwZSxHLnRocm90dGxlPVcwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1KeWUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT1LX2UsRy51bmFyeT1ZMGUsRy51bmlvbj1HZ2UsRy51bmlvbkJ5PVdnZSxHLnVuaW9uV2l0aD1ZZ2UsRy51bmlxPWpnZSxHLnVuaXFCeT1YZ2UsRy51bmlxV2l0aD0kZ2UsRy51bnNldD1aX2UsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9Sl9lLEcudXBkYXRlV2l0aD1RX2UsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj10eWUsRy53aXRob3V0PUtnZSxHLndvcmRzPXNkdCxHLndyYXA9ajBlLEcueG9yPVpnZSxHLnhvckJ5PUpnZSxHLnhvcldpdGg9UWdlLEcuemlwPXQwZSxHLnppcE9iamVjdD1lMGUsRy56aXBPYmplY3REZWVwPXIwZSxHLnppcFdpdGg9bjBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD10dmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1peWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9ZXZlLEcuY2xhbXA9ZXllLEcuY2xvbmU9JDBlLEcuY2xvbmVEZWVwPVowZSxHLmNsb25lRGVlcFdpdGg9SjBlLEcuY2xvbmVXaXRoPUswZSxHLmNvbmZvcm1zVG89UTBlLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz1SeWUsRy5kaXZpZGU9cnZlLEcuZW5kc1dpdGg9b3llLEcuZXE9cnUsRy5lc2NhcGU9YXllLEcuZXNjYXBlUmVnRXhwPXN5ZSxHLmV2ZXJ5PWQwZSxHLmZpbmQ9ZzBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9UF9lLEcuZmluZExhc3Q9XzBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1JX2UsRy5mbG9vcj1udmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1MX2UsRy5mb3JJblJpZ2h0PWtfZSxHLmZvck93bj1SX2UsRy5mb3JPd25SaWdodD1OX2UsRy5nZXQ9ckcsRy5ndD10X2UsRy5ndGU9ZV9lLEcuaGFzPXpfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPXcwZSxHLmluZGV4T2Y9X2dlLEcuaW5SYW5nZT1yeWUsRy5pbnZva2U9SF9lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1yX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPW5fZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPWlfZSxHLmlzRWxlbWVudD1vX2UsRy5pc0VtcHR5PWFfZSxHLmlzRXF1YWw9c19lLEcuaXNFcXVhbFdpdGg9bF9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPWNfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPXVfZSxHLmlzTWF0Y2hXaXRoPWhfZSxHLmlzTmFOPWZfZSxHLmlzTmF0aXZlPXBfZSxHLmlzTmlsPW1fZSxHLmlzTnVsbD1kX2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9Z19lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPV9fZSxHLmlzV2Vha01hcD15X2UsRy5pc1dlYWtTZXQ9dl9lLEcuam9pbj13Z2UsRy5rZWJhYkNhc2U9bHllLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPVNnZSxHLmxvd2VyQ2FzZT1jeWUsRy5sb3dlckZpcnN0PXV5ZSxHLmx0PXhfZSxHLmx0ZT1iX2UsRy5tYXg9aXZlLEcubWF4Qnk9b3ZlLEcubWVhbj1hdmUsRy5tZWFuQnk9c3ZlLEcubWluPWx2ZSxHLm1pbkJ5PWN2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9WHllLEcuc3R1YlN0cmluZz0keWUsRy5zdHViVHJ1ZT1LeWUsRy5tdWx0aXBseT11dmUsRy5udGg9TWdlLEcubm9Db25mbGljdD1IeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPWh5ZSxHLnBhZEVuZD1meWUsRy5wYWRTdGFydD1weWUsRy5wYXJzZUludD1keWUsRy5yYW5kb209bnllLEcucmVkdWNlPUMwZSxHLnJlZHVjZVJpZ2h0PUEwZSxHLnJlcGVhdD1teWUsRy5yZXBsYWNlPWd5ZSxHLnJlc3VsdD1qX2UsRy5yb3VuZD1odmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9STBlLEcuc2l6ZT1SMGUsRy5zbmFrZUNhc2U9X3llLEcuc29tZT1OMGUsRy5zb3J0ZWRJbmRleD1MZ2UsRy5zb3J0ZWRJbmRleEJ5PWtnZSxHLnNvcnRlZEluZGV4T2Y9UmdlLEcuc29ydGVkTGFzdEluZGV4PU5nZSxHLnNvcnRlZExhc3RJbmRleEJ5PURnZSxHLnNvcnRlZExhc3RJbmRleE9mPU9nZSxHLnN0YXJ0Q2FzZT12eWUsRy5zdGFydHNXaXRoPXh5ZSxHLnN1YnRyYWN0PWZ2ZSxHLnN1bT1wdmUsRy5zdW1CeT1kdmUsRy50ZW1wbGF0ZT1ieWUsRy50aW1lcz1aeWUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9d3llLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPXdfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1TeWUsRy50cmltPU15ZSxHLnRyaW1FbmQ9RXllLEcudHJpbVN0YXJ0PVR5ZSxHLnRydW5jYXRlPUN5ZSxHLnVuZXNjYXBlPUF5ZSxHLnVuaXF1ZUlkPVF5ZSxHLnVwcGVyQ2FzZT1QeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPUFkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1QZGUsZ3IucHJvdG90eXBlLnZhbHVlPUlkZSxHLnByb3RvdHlwZS5hdD1vMGUsRy5wcm90b3R5cGUuY2hhaW49YTBlLEcucHJvdG90eXBlLmNvbW1pdD1zMGUsRy5wcm90b3R5cGUubmV4dD1sMGUsRy5wcm90b3R5cGUucGxhbnQ9dTBlLEcucHJvdG90eXBlLnJldmVyc2U9aDBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWYwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPWMwZSksR30sbW09c2RlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sYXEuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gcF90KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGYyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHAyZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGZfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09aDJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgaDJlLHZzLGRfdD1NKCgpPT57aDJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1wX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWYyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXAyZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Zl90KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Zl90KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9cF90fSk7dmFyIGttPU0oKCk9PntkX3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBTdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIE12dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgRXZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsVHZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSpBdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKkF2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoQ3Z0KmUpKS8yfXZhciBDdnQsQXZ0LFB2dD1NKCgpPT57Q3Z0PU1hdGguUEksQXZ0PUN2dC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgSXZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgTHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTxhU2U/REwqKGUtPW9TZSkqZStzU2U6ZTxjU2U/REwqKGUtPWxTZSkqZSt1U2U6REwqKGUtPWhTZSkqZStmU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBrWSxvU2UsYVNlLHNTZSxsU2UsY1NlLHVTZSxoU2UsZlNlLERMLGt2dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LG9TZT02LzExLGFTZT04LzExLHNTZT0zLzQsbFNlPTkvMTEsY1NlPTEwLzExLHVTZT0xNS8xNixoU2U9MjEvMjIsZlNlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsUnZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLE52dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIER2dD17fTtLcyhEdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIElfPU0oKCk9PntTdnQoKTtNdnQoKTtFdnQoKTtUdnQoKTtQdnQoKTtJdnQoKTtMdnQoKTtrdnQoKTtSdnQoKTtOdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uICR2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLGpMPU0oKCk9PntlbD0iJCI7WUwucHJvdG90eXBlPSR2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9JHZ0fSk7ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxJU2UsTFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxLdnQsWnZ0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCxLdnQsWnZ0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIElTZSgpe3JldHVybnt9fWZ1bmN0aW9uIExTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIEt2dCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIFp2dChlLHQscil7ZS5zZXQodCxyKX12YXIgUXZ0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gdDF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sZTF0LHIxdD1NKCgpPT57akwoKTtrXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPXQxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTtlMXQ9dDF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBuMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGkxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIG8xdD1NKCgpPT57fSk7ZnVuY3Rpb24gYTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57UXZ0KCk7cjF0KCk7akwoKTtuMXQoKTtvMXQoKTtzMXQoKX0pO2Z1bmN0aW9uIG0xdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEhTZShlLHQpe3ZhciByPW0xdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIGQxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gVlNlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFVTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6VlNlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/SFNlKF8sZik6bTF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLHAxdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09cDF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1VTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBwMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e3AxdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBSXyxDYixnMXQsXzF0LHkxdCx2MXQseDF0LGIxdCx3MXQ9TSgoKT0+e3RrKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSxnMXQ9Ul8ucGFyc2VSb3dzLF8xdD1SXy5mb3JtYXQseTF0PVJfLmZvcm1hdEJvZHksdjF0PVJfLmZvcm1hdFJvd3MseDF0PVJfLmZvcm1hdFJvdyxiMXQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsUzF0LE0xdCxFMXQsVDF0LEMxdCxBMXQsUDF0PU0oKCk9Pnt0aygpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2UsUzF0PU5fLnBhcnNlUm93cyxNMXQ9Tl8uZm9ybWF0LEUxdD1OXy5mb3JtYXRCb2R5LFQxdD1OXy5mb3JtYXRSb3dzLEMxdD1OXy5mb3JtYXRSb3csQTF0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKXFTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBxU2UsSTF0PU0oKCk9PntxU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7dzF0KCk7UDF0KCk7STF0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT5kNWUsX19hc3luY0RlbGVnYXRvcjooKT0+TTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PlM1ZSxfX2FzeW5jVmFsdWVzOigpPT5FNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT52NWUsX19kZWNvcmF0ZTooKT0+ZzVlLF9fZXhwb3J0U3RhcjooKT0+YjVlLF9fZXh0ZW5kczooKT0+cDVlLF9fZ2VuZXJhdG9yOigpPT54NWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PlQ1ZSxfX21ldGFkYXRhOigpPT55NWUsX19wYXJhbTooKT0+XzVlLF9fcmVhZDooKT0+UTN0LF9fcmVzdDooKT0+bTVlLF9fc3ByZWFkOigpPT53NWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gcDVlKGUsdCl7ZjVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gbTVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIGc1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIF81ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB5NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gdjVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIHg1ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBiNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gUTN0KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIHc1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KFEzdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gUzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBNNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gRTVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIFQ1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGY1ZSxkNWUsZGU9TSgoKT0+e2Y1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07ZDVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgdE10LGVNdD1NKCgpPT57dE10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1DNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBDNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57cHkoKX0pO3ZhciByTXQseCQsbk10LHNSLGIkPU0oKCk9PntweSgpO3YkKCk7ck10PWFSKF9jKSx4JD1yTXQucmlnaHQsbk10PXJNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gaU10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9NdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciBhTXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBzTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGxNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgY010LHVNdCxoTXQsQyQ9TSgoKT0+e2NNdD1BcnJheS5wcm90b3R5cGUsdU10PWNNdC5zbGljZSxoTXQ9Y010Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBwTXQoZSl7cmV0dXJuIGV9dmFyIGRNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiBnTXQoKXt2YXIgZT1wTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUodU10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIF9NdD1NKCgpPT57QyQoKTtiJCgpO2ZNdCgpO1QkKCk7ZE10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB5TXQoZSx0LHIpe3JldHVybiBlPWhNdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgdk10PU0oKCk9PntDJCgpO3B5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24geE10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgYk10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gd010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBTTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1NdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBFTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBUTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIENNdD1NKCgpPT57cHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBBTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIElNdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgTE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBrTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgUk10PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gTk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIERNdD1NKCgpPT57fSk7ZnVuY3Rpb24gT010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciB6TXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxBNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gQTVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBGTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgQk10PU0oKCk9PntPJCgpfSk7dmFyIEhNdD1NKCgpPT57YiQoKTtweSgpO3YkKCk7YU10KCk7bE10KCk7RSQoKTtUJCgpO19NdCgpO3ZNdCgpO2JNdCgpO04kKCk7U010KCk7RU10KCk7Q010KCk7UE10KCk7RCQoKTtTJCgpO0xNdCgpO2RSKCk7QSQoKTtSTXQoKTtETXQoKTt6TXQoKTtSJCgpO08kKCk7TSQoKTtCTXQoKX0pO3ZhciBfUixWTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFVNdChlKXtyZXR1cm4gZX12YXIgcU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBQNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBrNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gUjVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UDVlOkk1ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6VU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP2s1ZTpMNWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLEdNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsR010KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKFI1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gV010KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBZTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIGpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gWE10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsR010LCRNdD1NKCgpPT57Vk10KCk7cU10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxHTXQ9MWUtNn0pO3ZhciBLTXQ9TSgoKT0+eyRNdCgpfSk7ZnVuY3Rpb24gSk10KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEQ1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIE81ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFpNdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTjVlLFc1LFFNdD1NKCgpPT57TjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1KTXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUQ1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPU81ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Wk10KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Wk10KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9Sk10fSk7dmFyIEYkPU0oKCk9PntRTXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gejVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBGNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/RjVlOno1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBCNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/QjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiB0RXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgZUV0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBINWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9INWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIG5FdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBvRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gYUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIHNFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGxFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVjVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gVTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9Y0V0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9Y0V0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gdUV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9VNWU6VjVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9c0V0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGNFdCxoRXQ9TSgoKT0+e3d1KCk7VyQoKTtsRXQoKTtjRXQ9IiQifSk7ZnVuY3Rpb24gZkV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgcEV0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiBkRXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIG1FdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBfRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB2RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhFdChlKXtlfHwoZT1xNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIHE1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgYkV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gd0V0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBFRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIENFdD1NKCgpPT57fSk7ZnVuY3Rpb24gQUV0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUEV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJRXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFc1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFk1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBYNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uICQ1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBORXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VzVlOkc1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsPyQ1ZTpYNWU6ci5sb2NhbD9qNWU6WTVlKShyLHQpKX12YXIgREV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gSzVlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBPRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0s1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9KNWU6WjVlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBRNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHRUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gZVRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHpFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1E1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9lVGU6dFRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEhFdChlKX1mdW5jdGlvbiBIRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUJFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFZFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFVFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHJUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtWRXQodGhpcyxlKX19ZnVuY3Rpb24gblRlKGUpe3JldHVybiBmdW5jdGlvbigpe1VFdCh0aGlzLGUpfX1mdW5jdGlvbiBpVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VkV0OlVFdCkodGhpcyxlKX19ZnVuY3Rpb24gcUV0KGUsdCl7dmFyIHI9QkV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2lUZTp0P3JUZTpuVGUpKHIsdCkpfXZhciBHRXQ9TSgoKT0+e0hFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBvVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gV0V0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP29UZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/c1RlOmFUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBZRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiB1VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBqRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/bFRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj91VGU6Y1RlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBYRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGhUZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiAkRXQoKXtyZXR1cm4gdGhpcy5lYWNoKGhUZSl9dmFyIEtFdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlRlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gWkV0KCl7cmV0dXJuIHRoaXMuZWFjaChmVGUpfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFFFdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciB0NXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBwVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBlNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9wVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIHI1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24gZFRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbjV0KCl7cmV0dXJuIHRoaXMuZWFjaChkVGUpfXZhciBpNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gZ1RlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBvNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/Z1RlOm1UZSl9dmFyIGE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gczV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgbDV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfVGUoZSx0LHIpe3JldHVybiBlPWg1dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBoNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24geVRlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiB2VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24geFRlKGUsdCxyKXt2YXIgbj11NXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9fVGU6aDV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGY1dChlLHQscil7dmFyIG49eVRlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD94VGU6dlRlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciB1NXQsd3IsYzV0LEFSPU0oKCk9Pnt1NXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoYzV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIGM1dHx8KHU1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBwNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGJUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwNXQodGhpcyxlLHQpfX1mdW5jdGlvbiB3VGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcDV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGQ1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3dUZTpiVGUpKGUsdCkpfXZhciBtNXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBnNXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxVcCx3dT1NKCgpPT57ZUV0KCk7bkV0KCk7b0V0KCk7aEV0KCk7VyQoKTtwRXQoKTttRXQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTtqJCgpO0ZFdCgpO0dFdCgpO1lFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO0FSKCk7bTV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT1nNXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6dEV0LHNlbGVjdEFsbDpyRXQsZmlsdGVyOmlFdCxkYXRhOnVFdCxlbnRlcjphRXQsZXhpdDpmRXQsam9pbjpkRXQsbWVyZ2U6Z0V0LG9yZGVyOnlFdCxzb3J0OnhFdCxjYWxsOndFdCxub2RlczpNRXQsbm9kZTpURXQsc2l6ZTpBRXQsZW1wdHk6SUV0LGVhY2g6a0V0LGF0dHI6TkV0LHN0eWxlOk9FdCxwcm9wZXJ0eTp6RXQsY2xhc3NlZDpxRXQsdGV4dDpXRXQsaHRtbDpqRXQscmFpc2U6JEV0LGxvd2VyOlpFdCxhcHBlbmQ6UUV0LGluc2VydDplNXQscmVtb3ZlOm41dCxjbG9uZTpvNXQsZGF0dW06czV0LG9uOmY1dCxkaXNwYXRjaDpkNXR9O1VwPWc1dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBfNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgdjV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24geDV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIGI1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9eTV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLHg1dChlLHQpfXZhciB3NXQ9TSgoKT0+e3Y1dCgpO2I1dCgpfSk7dmFyIEVzPU0oKCk9PntxJCgpO3c1dCgpO1NSKCk7XzV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBTNXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgTTV0PU0oKCk9PntFcygpO1M1dCgpfSk7dmFyIEU1dD1NKCgpPT57TTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIFQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gQTV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSVRlKCl7cmV0dXJuIE41dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBQNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1TVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9JNXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU1UZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9RVRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1UVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9Q1RlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUFUZS5leGVjKGUpKT9SNXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1QVGUuZXhlYyhlKSk/UjV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6QzV0Lmhhc093blByb3BlcnR5KGUpP0k1dChDNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEk1dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIExUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0xUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBMNXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gazV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFI1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIE41dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gRDV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ONXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LFpoLFNUZSxNVGUsRVRlLFRUZSxDVGUsQVRlLFBUZSxDNXQsTzV0PU0oKCk9PntUNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsU1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLE1UZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksRVRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxUVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxDVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCxLNV0rIlxcKSQiKSxBVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LFpoLFpoXSsiXFwpJCIpLFBUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LFpoLFpoLEs1XSsiXFwpJCIpLEM1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpBNXQsZm9ybWF0SGV4OkE1dCxmb3JtYXRIc2w6SVRlLGZvcm1hdFJnYjpQNXQsdG9TdHJpbmc6UDV0fSk7TFIoc2wsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Okw1dCxmb3JtYXRIZXg6TDV0LGZvcm1hdFJnYjprNXQsdG9TdHJpbmc6azV0fSkpO0xSKEtoLEQ1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e081dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiB6NXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBGNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBCNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBrVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBSVGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBINXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9SVGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2tUZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFY1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFU1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxOVGUsRFRlLG9LPU0oKCk9PntOUigpO25LKCk7QjV0KCk7VjV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1INXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7TlRlPVU1dCh6NXQpLERUZT1VNXQoRjV0KX0pO2Z1bmN0aW9uIHE1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciBXNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFk1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIGo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIFg1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyICQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiBLNXQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBaNXQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBPVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHpUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT96VGUobFswXS54KTpPVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTp0VDp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/WDV0Okc1dCh0KT9xNXQ6QXJyYXkuaXNBcnJheSh0KT9ZNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP0s1dDpVYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtqNXQoKTskNXQoKTtRNSgpO1o1dCgpO2xLKCk7aUsoKTtXNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKko1dCxza2V3WDpNYXRoLmF0YW4obCkqSjV0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSjV0LHpSLFE1dD1NKCgpPT57SjV0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gZVR0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0VHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9dFR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHJUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLHRUdCxGUixuVHQ9TSgoKT0+e1E1dCgpfSk7ZnVuY3Rpb24gaVR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxvVHQ9TSgoKT0+e1E1KCk7blR0KCk7aEs9aVR0KGVUdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1pVHQoclR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO29UdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KGxUdChGVGUpLHl5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBGVGUoKXt5eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gY1R0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiBhVHQoKXt5eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e2NUdCgpfWZpbmFsbHl7aDI9MCxIVGUoKSx5eT0wfX1mdW5jdGlvbiBCVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5zVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBIVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dChhVHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChCVGUsc1R0KSksaDI9MSxsVHQoYVR0KSl9fXZhciBoMixpVCxuVCxzVHQsQlIsb1QsSFIseXksVlIsYVQsbFR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxzVHQ9MWUzLEhSPTAseXk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGxUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIHVUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTt1VHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47cVRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpWVGUsdHdlZW46VVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmZUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmZUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcVRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1oVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1oVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFZUZSxVVGUsZlR0LGdLLFdSLEdSLGhUdCxZUixsVCxUcz1NKCgpPT57RiQoKTttSygpO1ZUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxVVGU9W10sZlR0PTAsZ0s9MSxXUj0yLEdSPTMsaFR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHBUdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciBkVHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBHVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBXVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIG1UdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP0dUZTpXVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gWVRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBqVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBYVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gJFRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBLVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBaVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGdUdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP1pUZTpLVGUpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9qVGU6WVRlKShyKTooci5sb2NhbD8kVGU6WFRlKShyLG4sdCkpfXZhciBfVHQ9TSgoKT0+e3JUKCk7RXMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiBKVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIFFUZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIHRDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJlFUZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gZUNlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSlRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/dENlOmVDZSkobix0KSl9dmFyIHZUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIHJDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBuQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24geFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ckNlOm5DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIGJUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGlDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBvQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gd1R0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/aUNlOm9DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFNUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChhQ2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgRVR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gVFR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBDVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIEFUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBQVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBzQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBsQ2UoZSx0LHIpe3ZhciBuLGksbz1zQ2UodCk/Y1Q6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gSVR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2gobENlKHIsZSx0KSl9dmFyIExUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGNDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24ga1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGNDZSh0aGlzLl9pZCkpfXZhciBSVHQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5UdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBEVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gT1R0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciB6VHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gRlR0KCl7cmV0dXJuIG5ldyB1Q2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciB1Q2UsQlR0PU0oKCk9PntFcygpO3VDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBoQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSFR0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGZDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHBDZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBkQ2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9SFR0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gVlR0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxoQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsSFR0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxwQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZENlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxmQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBVVHQ9TSgoKT0+e3JUKCk7RXMoKTtUcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIG1DZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gZ0NlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZtQ2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gcVR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLGdDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIEdUdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24geUNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/eUNlKGQyKHRoaXMsInRleHQiLGUpKTpfQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIFlUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIHZDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24geENlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJnZDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIGpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQseENlKGUpKX12YXIgWFR0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgS1R0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBaVHQoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgSlR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK2JDZX12YXIgYkNlLG0yLEdwPU0oKCk9PntFcygpO19UdCgpO3ZUdCgpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1VUdCgpO0dUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO3VUKCk7SlR0KCk7YkNlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpOVHQsc2VsZWN0QWxsOk9UdCxmaWx0ZXI6VFR0LG1lcmdlOkFUdCxzZWxlY3Rpb246RlR0LHRyYW5zaXRpb246JFR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpJVHQsYXR0cjpnVHQsYXR0clR3ZWVuOnlUdCxzdHlsZTpWVHQsc3R5bGVUd2VlbjpxVHQsdGV4dDpXVHQsdGV4dFR3ZWVuOmpUdCxyZW1vdmU6a1R0LHR3ZWVuOm1UdCxkZWxheTp4VHQsZHVyYXRpb246d1R0LGVhc2U6TVR0LGVuZDpaVHR9fSk7ZnVuY3Rpb24gd0NlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBRVHQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fHdDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4Syx0Q3Q9TSgoKT0+e0dwKCk7VHMoKTtJXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBlQ3Q9TSgoKT0+e0VzKCk7ZFR0KCk7dEN0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1wVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249UVR0fSk7dmFyIHJDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIG5DdD1NKCgpPT57ZUN0KCk7R3AoKTtyQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBpQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG9DdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciBhQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBzQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBUQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIENDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gaEN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZkN0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBwQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIGRDdCgpe3JldHVybiBUSyhTQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUNDZSxyPVRDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgb0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2xDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpNQ2VbcF0sXz1lPT09JFI/bnVsbDpFQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgbEN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIGNDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPWNDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiB1Q3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD11Q3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGxDdCxTSyxnMixfMiwkUixLUixTQ2UsV3AsY0N0LHVDdCxNQ2UsRUNlLG1DdD1NKCgpPT57RiQoKTtFNXQoKTtyVCgpO0VzKCk7bkN0KCk7aUN0KCk7YUN0KCk7c0N0KCk7bEN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LFNDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sY0N0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSx1Q3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LE1DZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxFQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgZ0N0PU0oKCk9PnttQ3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9QUNlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gQUNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3Z5KCl9KTt2YXIgX0N0LFBDZSxJQ2UsUEs9TSgoKT0+e3Z5KCk7QUsoKTtfQ3Q9Q0sobGcpLFBDZT1fQ3QucmlnaHQsSUNlPV9DdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgeUN0PU0oKCk9PntJSygpfSk7dmFyIHZDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciB4Q3Qsa0NlLFJDZSxOSz1NKCgpPT57eEN0PUFycmF5LnByb3RvdHlwZSxrQ2U9eEN0LnNsaWNlLFJDZT14Q3QubWFwfSk7dmFyIGJDdD1NKCgpPT57fSk7dmFyIHdDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgZGxuLG1sbixnbG4sT0s9TSgoKT0+e2Rsbj1NYXRoLnNxcnQoNTApLG1sbj1NYXRoLnNxcnQoMTApLGdsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBTQ3Q9TSgoKT0+e05LKCk7UEsoKTtiQ3QoKTtSSygpO3dDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIEVDdD1NKCgpPT57TksoKTt2eSgpO3kyKCk7SlIoKX0pO3ZhciBUQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgQ0N0PU0oKCk9Pnt9KTt2YXIgQUN0PU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57dnkoKTt5MigpO0pSKCl9KTt2YXIgSUN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBMQ3Q9TSgoKT0+e30pO3ZhciBrQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIgUkN0PU0oKCk9Pnt9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgREN0PU0oKCk9PntCSygpfSk7dmFyIE9DdD1NKCgpPT57UEsoKTt2eSgpO0FLKCk7eUN0KCk7dkN0KCk7a0soKTtSSygpO1NDdCgpO0VDdCgpO1RDdCgpO3pLKCk7Q0N0KCk7QUN0KCk7UEN0KCk7SUN0KCk7RksoKTtJSygpO0xDdCgpO0pSKCk7REsoKTtrQ3QoKTtSQ3QoKTtOQ3QoKTtPSygpO0JLKCk7TEsoKTtEQ3QoKX0pO3ZhciBISyxWSyx6Q3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLHpDdD1NYXRoLlBJLGRUPXpDdC8yLFVLPXpDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gVkNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRkN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVZDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgQkN0PU0oKCk9PntPQ3QoKTtHSygpfSk7dmFyIEhDdCxWQ3Q9TSgoKT0+e0hDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFVDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBxQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyx4eSxVQ2UsWEssR0N0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0sseHk9MWUtNixVQ2U9WUsteHk7aksucHJvdG90eXBlPXFDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPlVDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1xQ3R9KTt2YXIgV0N0PU0oKCk9PntHQ3QoKX0pO2Z1bmN0aW9uIHFDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gR0NlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBXQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIFlDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBZQ3QoKXt2YXIgZT1xQ2UsdD1HQ2Uscj1XQ2Usbj1ZQ2UsaT1qQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUhDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIGpDdD1NKCgpPT57VkN0KCk7VUN0KCk7R0soKTtXQ3QoKX0pO3ZhciBYQ3Q9TSgoKT0+e0JDdCgpO2pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gJEN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksZU49TSgoKT0+e2xsPSIkIjt0Ti5wcm90b3R5cGU9JEN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT0kQ3R9KTtmdW5jdGlvbiBKQ3QoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLFhDZSwkQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEtDdCxaQ3QpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLEtDdCxaQ3QpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gWENlKCl7cmV0dXJue319ZnVuY3Rpb24gJENlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gS0N0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gWkN0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBRQ3Q9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiB0QXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSxlQXQsckF0PU0oKCk9PntlTigpO3d5PWJ5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9dEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O2VBdD10QXR9KTtmdW5jdGlvbiBuQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBpQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9BdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGFBdD1NKCgpPT57fSk7ZnVuY3Rpb24gc0F0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO3ZhciBjQXQ9TSgoKT0+e1FDdCgpO3JBdCgpO2VOKCk7aUF0KCk7YUF0KCk7bEF0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9S0NlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PVpDZS5leGVjKGUpKT9oQXQocGFyc2VJbnQodFsxXSwxNikpOih0PUpDZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9UUNlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD10QWUuZXhlYyhlKSk/ZkF0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWVBZS5leGVjKGUpKT9mQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ckFlLmV4ZWMoZSkpP3BBdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW5BZS5leGVjKGUpKT9wQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTp1QXQuaGFzT3duUHJvcGVydHkoZSk/aEF0KHVBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gaEF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGZBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gcEF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gaUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/aUFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixtVCxRaCxLQ2UsWkNlLEpDZSxRQ2UsdEFlLGVBZSxyQWUsbkFlLHVBdCxpTj1NKCgpPT57bk4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsS0NlPS9eIyhbMC05YS1mXXszfSkkLyxaQ2U9L14jKFswLTlhLWZdezZ9KSQvLEpDZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksUUNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSx0QWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxlQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxtVF0rIlxcKSQiKSxyQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULFFoLFFoXSsiXFwpJCIpLG5BZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULFFoLFFoLG1UXSsiXFwpJCIpLHVBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLEtLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsWkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkvZEF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS9tQXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL2dBdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPm9BZT9NYXRoLnBvdyhlLDEvMyk6ZS95QXQrX0F0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOnlBdCooZS1fQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gYUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9hQWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLGRBdCxtQXQsZ0F0LF9BdCxiMix5QXQsb0FlLHZBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgsZEF0PS45NTA0NyxtQXQ9MSxnQXQ9MS4wODg4MyxfQXQ9NC8yOSxiMj02LzI5LHlBdD0zKmIyKmIyLG9BZT1iMipiMipiMjtZcChqcCxsTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9bUF0KnRaKGUpLHQ9ZEF0KnRaKHQpLHI9Z0F0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxpWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIHNBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPSh3QXQqbit4QXQqdC1iQXQqcikvKHdBdCt4QXQtYkF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3NBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgU0F0LG9aLGFaLGNOLF9ULHhBdCxiQXQsd0F0LE1BdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7U0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCx4QXQ9X1QqY04sYkF0PV9UKm9aLHdBdD1vWiphWi1jTipTQXQ7WXAoTXksdU4sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKFNBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBFQXQ9TSgoKT0+e2lOKCk7dkF0KCk7TUF0KCl9KTtmdW5jdGlvbiBDQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGNBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHVBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFRBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bEFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbEFlLEFBdCxQQXQ9TSgoKT0+e2xBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9Q0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1jQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT11QWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPVRBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPVRBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O0FBdD1DQXR9KTt2YXIgSUF0PU0oKCk9PntQQXQoKX0pO2Z1bmN0aW9uIGtBdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBmQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBwQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBMQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPWhBZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIGhBZSxzWixSQXQ9TSgoKT0+e2hBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9a0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1mQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1wQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUxBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUxBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPWtBdH0pO3ZhciBOQXQ9TSgoKT0+e1JBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiBkQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG1BZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD9tQWU6ZEFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIGdBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD9nQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIERBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBPQXQ9TSgoKT0+e2VmKCk7ZlooKX0pO2Z1bmN0aW9uIF9BZSgpe3JldHVybltdfWZ1bmN0aW9uIHpBdChlKXtyZXR1cm4gZT09bnVsbD9fQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgRkF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgSEF0PU0oKCk9PntlZigpO0ZBdCgpfSk7ZnVuY3Rpb24gVkF0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBVQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VkF0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBHQXQ9TSgoKT0+e2VmKCk7VUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uIFdBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtlZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBZQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBqQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHZBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVhBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVhBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uICRBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/dkFlOnlBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVlBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBYQXQsS0F0PU0oKCk9PntlZigpO2RaKCk7akF0KCk7WEF0PSIkIn0pO2Z1bmN0aW9uIFpBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIEpBdD1NKCgpPT57cFooKTtlZigpfSk7ZnVuY3Rpb24gUUF0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciB0NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGU0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgcjR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gbjR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgaTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBvNHQoZSl7ZXx8KGU9eEFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4QWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIGE0dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIHM0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgdTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBmNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA0dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIGQ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gbTR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gYkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB3QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBTQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gRUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBUQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gdjR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3dBZTpiQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9UQWU6RUFlOnIubG9jYWw/TUFlOlNBZSkocix0KSl9dmFyIHg0dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIENBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBBQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBQQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gYjR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9DQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UEFlOkFBZSkoZSx0LHI9PW51bGw/IiI6cikpOklBZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgdzR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gTEFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBrQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIFJBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBTNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIE00dD1NKCgpPT57fSk7ZnVuY3Rpb24gRTR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBUNHQoZSl9ZnVuY3Rpb24gVDR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1FNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBDNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBBNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBOQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7QzR0KHRoaXMsZSl9fWZ1bmN0aW9uIERBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBNHQodGhpcyxlKX19ZnVuY3Rpb24gT0FlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0M0dDpBNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFA0dChlLHQpe3ZhciByPUU0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PQWU6dD9OQWU6REFlKShyLHQpKX12YXIgSTR0PU0oKCk9PntUNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gekFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBCQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEw0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD96QWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0JBZTpGQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgazR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBWQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gUjR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0hBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VUFlOlZBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRDR0KCl7cmV0dXJuIHRoaXMuZWFjaChxQWUpfXZhciBPNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIHo0dCgpe3JldHVybiB0aGlzLmVhY2goR0FlKX12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgSDR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gV0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVjR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/V0FlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBVNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIFlBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHE0dCgpe3JldHVybiB0aGlzLmVhY2goWUFlKX12YXIgRzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIFhBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVzR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP1hBZTpqQWUpfXZhciBZNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIFg0dD1NKCgpPT57fSk7ZnVuY3Rpb24gJEFlKGUsdCxyKXtyZXR1cm4gZT1aNHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gWjR0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIEtBZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gWkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEpBZShlLHQscil7dmFyIG49SzR0Lmhhc093blByb3BlcnR5KGUudHlwZSk/JEFlOlo0dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBKNHQoZSx0LHIpe3ZhciBuPUtBZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/SkFlOlpBZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgSzR0LHNuLCQ0dCx4Tj1NKCgpPT57SzR0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKCQ0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiAkNHR8fChLNHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gUTR0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBRQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUTR0KHRoaXMsZSx0KX19ZnVuY3Rpb24gdDRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFE0dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiB0UHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj90NGU6UUFlKShlLHQpKX12YXIgZVB0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gZTRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1osZWY9TSgoKT0+e09BdCgpO0hBdCgpO0dBdCgpO0tBdCgpO2RaKCk7SkF0KCk7dDR0KCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7STR0KCk7azR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7eE4oKTtlUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPWU0ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpEQXQsc2VsZWN0QWxsOkJBdCxmaWx0ZXI6cUF0LGRhdGE6JEF0LGVudGVyOldBdCxleGl0OlpBdCxqb2luOlFBdCxtZXJnZTplNHQsb3JkZXI6bjR0LHNvcnQ6bzR0LGNhbGw6czR0LG5vZGVzOmM0dCxub2RlOmg0dCxzaXplOnA0dCxlbXB0eTptNHQsZWFjaDpfNHQsYXR0cjp2NHQsc3R5bGU6YjR0LHByb3BlcnR5OlM0dCxjbGFzc2VkOlA0dCx0ZXh0Okw0dCxodG1sOlI0dCxyYWlzZTpENHQsbG93ZXI6ejR0LGFwcGVuZDpCNHQsaW5zZXJ0OlY0dCxyZW1vdmU6cTR0LGNsb25lOlc0dCxkYXR1bTpqNHQsb246SjR0LGRpc3BhdGNoOnRQdH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgclB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgblB0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBpUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57blB0KCk7clB0KCk7aVB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciBhUHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gcjRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBuNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGk0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBvNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gc1B0KCl7dmFyIGU9cjRlLHQ9bjRlLHI9aTRlLG49bzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGxQdD1NKCgpPT57TkF0KCk7U04oKTtTWigpO3daKCk7b1B0KCk7YVB0KCl9KTt2YXIgY1B0PU0oKCk9PntsUHQoKTtTWigpfSk7ZnVuY3Rpb24gaFB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gYTRlKGUsdCl7dmFyIHI9aFB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gczRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P2E0ZShkLHUpOmhQdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSx1UHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PXVQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1zNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciB1UHQsTVosRVosYlQsVFosQ049TSgoKT0+e3VQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixmUHQscFB0LGRQdCxtUHQsZ1B0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZlB0PUFOLnBhcnNlLHBQdD1BTi5wYXJzZVJvd3MsZFB0PUFOLmZvcm1hdCxtUHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixfUHQseVB0LHZQdCx4UHQsYlB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksX1B0PVBOLnBhcnNlLHlQdD1QTi5wYXJzZVJvd3MsdlB0PVBOLmZvcm1hdCx4UHQ9UE4uZm9ybWF0Um93c30pO3ZhciB3UHQ9TSgoKT0+e0NOKCk7Z1B0KCk7YlB0KCl9KTtmdW5jdGlvbiBTUHQoZSl7cmV0dXJuK2V9dmFyIE1QdD1NKCgpPT57fSk7ZnVuY3Rpb24gRVB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gVFB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBDUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUFB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgSVB0PU0oKCk9Pnt9KTt2YXIgUFosTFB0LGtQdCxJWixSUHQ9TSgoKT0+e1BaPTMsTFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLGtQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gT1B0KGUpe3JldHVybiAxLU1hdGguY29zKGUqRFB0KX1mdW5jdGlvbiB6UHQoZSl7cmV0dXJuIE1hdGguc2luKGUqRFB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhOUHQqZSkpLzJ9dmFyIE5QdCxEUHQsRlB0PU0oKCk9PntOUHQ9TWF0aC5QSSxEUHQ9TlB0LzJ9KTtmdW5jdGlvbiBCUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFZQdD1NKCgpPT57fSk7ZnVuY3Rpb24gVVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gcVB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBHUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFdQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxjNGU/SU4qKGUtPWw0ZSkqZSt1NGU6ZTxmNGU/SU4qKGUtPWg0ZSkqZStwNGU6SU4qKGUtPWQ0ZSkqZSttNGV9ZnVuY3Rpb24gWVB0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosbDRlLGM0ZSx1NGUsaDRlLGY0ZSxwNGUsZDRlLG00ZSxJTixqUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxsNGU9Ni8xMSxjNGU9OC8xMSx1NGU9My80LGg0ZT05LzExLGY0ZT0xMC8xMSxwNGU9MTUvMTYsZDRlPTIxLzIyLG00ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLFhQdCwkUHQsT1osS1B0PU0oKCk9PntEWj0xLjcwMTU4LFhQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSwkUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixaUHQsQlosSlB0LFFQdD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsWlB0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEpQdD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIHQ2dD1NKCgpPT57TVB0KCk7Q1B0KCk7SVB0KCk7UlB0KCk7RlB0KCk7VlB0KCk7R1B0KCk7alB0KCk7S1B0KCk7UVB0KCl9KTtmdW5jdGlvbiBlNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgcjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6bihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gbjZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gaTZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gaTZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIG82dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilpNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBsNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGM2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB1NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGg2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIHA2dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIGQ2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIG02dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBnNnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBfNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHk2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciB2NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHg2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIGI2dD1NKCgpPT57fSk7ZnVuY3Rpb24gdzZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIE02dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRTZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gVDZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEM2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEk2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEw2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP1Q2dDp0LHI9PW51bGw/UDZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gazZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsUjZ0PU0oKCk9PnthNnQoKTtsNnQoKTt1NnQoKTtmNnQoKTtkNnQoKTtfNnQoKTt2NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtBNnQoKTtMNnQoKTtHYT1DeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1rNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1rNnQobikpO3JldHVybiBlfTtHYS5hZGQ9bjZ0O0dhLmFkZEFsbD1vNnQ7R2EuY292ZXI9czZ0O0dhLmRhdGE9YzZ0O0dhLmV4dGVudD1oNnQ7R2EuZmluZD1wNnQ7R2EucmVtb3ZlPW02dDtHYS5yZW1vdmVBbGw9ZzZ0O0dhLnJvb3Q9eTZ0O0dhLnNpemU9eDZ0O0dhLnZpc2l0PXc2dDtHYS52aXNpdEFmdGVyPU02dDtHYS54PUM2dDtHYS55PUk2dH0pO3ZhciBWWj1NKCgpPT57UjZ0KCl9KTtmdW5jdGlvbiBnNGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIF80ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gTjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9em4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQsZzRlLF80ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6em4oK2wpLHMoKSxvKTplfSxvfXZhciBENnQ9TSgoKT0+e1R5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gTzZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsTk49TSgoKT0+e2NsPSIkIjtSTi5wcm90b3R5cGU9TzZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1PNnR9KTt2YXIgejZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24geTRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksRjZ0PU0oKCk9PntOTigpO0F5PXBnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9eTRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIEI2dD1NKCgpPT57fSk7dmFyIEg2dD1NKCgpPT57fSk7dmFyIFY2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9Pnt6NnQoKTtGNnQoKTtOTigpO0I2dCgpO0g2dCgpO1Y2dCgpfSk7ZnVuY3Rpb24gdjRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFU2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBxNnQoZSl7dmFyIHQ9djRlLHI9dSxuLGk9em4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVU2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVU2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLGQoKSxoKTppfSxofXZhciBHNnQ9TSgoKT0+e1R5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gWTZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGI0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHc0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFc2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09eDRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgeDRlLHFaLGo2dD1NKCgpPT57eDRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1ZNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWI0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXc0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09VzZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09VzZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9WTZ0fSk7dmFyIFg2dD1NKCgpPT57ajZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBQeXx8KFo2dChTNGUpLFB5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBTNGUoKXtQeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gSjZ0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiAkNnQoKXtQeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e0o2dCgpfWZpbmFsbHl7RTI9MCxFNGUoKSxQeT0wfX1mdW5jdGlvbiBNNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD5LNnQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBFNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dCgkNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChNNGUsSzZ0KSksRTI9MSxaNnQoJDZ0KSl9fXZhciBFMixTVCx3VCxLNnQsek4sTVQsRk4sUHksQk4sRVQsWjZ0LFE2dD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsSzZ0PTFlMyxGTj0wLFB5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxaNnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIHRJdD1NKCgpPT57UTZ0KCl9KTtmdW5jdGlvbiBlSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBySXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBuSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1UNGUqTWF0aC5zcXJ0KGQpLHg9ZCpDNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIFQ0ZSxDNGUsalo9TSgoKT0+e1g2dCgpO1VaKCk7dEl0KCk7VDRlPTEwLEM0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBpSXQoKXt2YXIgZSx0LHIsbj16bigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsZUl0LHJJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOnpuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgb0l0PU0oKCk9PntUeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gYUl0KGUsdCxyKXt2YXIgbixpPXpuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6em4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnpuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBzSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBsSXQoZSl7dmFyIHQ9em4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT16bihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6em4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOmV9LG99dmFyIGNJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIHVJdChlKXt2YXIgdD16biguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnpuKCtzKSxhKCksbyk6ZX0sb312YXIgaEl0PU0oKCk9PntUeSgpfSk7dmFyIGZJdD1NKCgpPT57cjZ0KCk7RDZ0KCk7RzZ0KCk7b0l0KCk7c0l0KCk7alooKTtjSXQoKTtoSXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gcEl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciBkSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1JdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIGdJdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0l0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgeUl0PU0oKCk9Pnt9KTtmdW5jdGlvbiB2SXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHhJdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57eUl0KCk7JFooKTt4SXQoKTtVTj17IiI6X0l0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6dkl0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1BNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBBNGUsUVo9TSgoKT0+e1paKCk7QTRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBiSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP3BJdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP21JdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP3dJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPXdJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgd0l0LGVKPU0oKCk9PntUVCgpO2RJdCgpO2dJdCgpO1FaKCk7WlooKTskWigpO2JJdCgpO3dJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixTSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBNSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIEVJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIFRJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgQ0l0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24gQUl0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIFBJdD1NKCgpPT57VFQoKX0pO3ZhciBJSXQ9TSgoKT0+e1NJdCgpO2VKKCk7UVooKTtFSXQoKTtDSXQoKTtQSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBMSXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sa3k9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtMSXQoWU4sZSx0aGlzLnQpLExJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBabihlKXtyZXR1cm4gZT4xP0ZuOmU8LTE/LUZuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixGbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixSeSwkTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEZuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLFJ5PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmUkl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJlJJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gTkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYma0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/a0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBrSXQsUkl0LG1nPU0oKCk9PntrSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LFJJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtOSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylOSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFA0ZSgpe0V1LnBvaW50PUw0ZX1mdW5jdGlvbiBJNGUoKXt6SXQoREl0LE9JdCl9ZnVuY3Rpb24gTDRlKGUsdCl7RXUucG9pbnQ9ekl0LERJdD1lLE9JdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIHpJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gRkl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLERJdCxPSXQsc0osbEosY0osRXUsdUo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7QVQ9Q3MoKSxKTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1QNGUsRXUubGluZUVuZD1JNGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxabihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7Z2cucHVzaChacD1bZGk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBHSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKGRpLGUpPnVsKGRpLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChkaSxlKT51bChkaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChkaSxFaSkmJihkaT1lKX1lbHNlIGdnLnB1c2goWnA9W2RpPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIEJJdCgpe0twLnBvaW50PUdJdH1mdW5jdGlvbiBISXQoKXtacFswXT1kaSxacFsxXT1FaSxLcC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uIFdJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFVJdD1lLHFJdD10O0V1LnBvaW50KGUsdCksR0l0KGUsdCl9ZnVuY3Rpb24gazRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gUjRlKCl7V0l0KFVJdCxxSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLFpwWzBdPWRpLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIE40ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gVkl0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBZSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChONGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxWSXQobixpWzBdKXx8Vkl0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxkaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksaGxdLFtFaSx4Y11dfXZhciBkaSxobCxFaSx4YyxPeSxVSXQscUl0LFAyLExULGdnLFpwLEtwLGpJdD1NKCgpPT57a3koKTt1SigpO0EyKCk7bHIoKTttZygpO0xUPUNzKCksS3A9e3BvaW50OmhKLGxpbmVTdGFydDpCSXQsbGluZUVuZDpISXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9V0l0LEtwLmxpbmVTdGFydD1rNGUsS3AubGluZUVuZD1SNGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1oSixLcC5saW5lU3RhcnQ9Qkl0LEtwLmxpbmVFbmQ9SEl0LEFUPDA/KGRpPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoaGw9LTkwKSxacFswXT1kaSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIFhJdCgpe1R1LnBvaW50PUQ0ZX1mdW5jdGlvbiBENGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9TzRlLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBPNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO3REKz1hLGlEKz1hKihXYSsoV2E9bikpLG9EKz1hKihZYSsoWWE9aSkpLGFEKz1hKihqYSsoamE9bykpLFJUKFdhLFlhLGphKX1mdW5jdGlvbiAkSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiB6NGUoKXtUdS5wb2ludD1CNGV9ZnVuY3Rpb24gRjRlKCl7Skl0KEtJdCxaSXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIEI0ZShlLHQpe0tJdD1lLFpJdD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PUpJdDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksUlQoV2EsWWEsamEpfWZ1bmN0aW9uIEpJdChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PVpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooV2ErKFdhPW4pKSxvRCs9dSooWWErKFlhPWkpKSxhRCs9dSooamErKGphPW8pKSxSVChXYSxZYSxqYSl9ZnVuY3Rpb24gUUl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixabihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLEtJdCxaSXQsV2EsWWEsamEsVHUsdDl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpYSXQsbGluZUVuZDokSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PXo0ZSxUdS5saW5lRW5kPUY0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1YSXQsVHUubGluZUVuZD0kSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZTl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qobjl0KGUpLGk5dCh0LHIpKTpuOXQoZSk6dHx8cj9pOXQodCxyKTpfSn1mdW5jdGlvbiByOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIG45dChlKXt2YXIgdD1yOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PXI5dCgtZSksdH1mdW5jdGlvbiBpOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxabihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxabihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPW85dChhLGkpLG89bzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gbzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIGE5dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtlOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLHM5dChvKSxzOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIHM5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqWm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntreSgpO0EyKCk7bHIoKTtTSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1INGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBINGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBUSj1NKCgpPT57RnkoKX0pO3ZhciBsOXQsVjRlLFU0ZSxDSj1NKCgpPT57RnkoKTtUSigpO2w5dD1FSihfZyksVjRlPWw5dC5yaWdodCxVNGU9bDl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBjOXQ9TSgoKT0+e0FKKCl9KTt2YXIgdTl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIGg5dCxHNGUsVzRlLGtKPU0oKCk9PntoOXQ9QXJyYXkucHJvdG90eXBlLEc0ZT1oOXQuc2xpY2UsVzRlPWg5dC5tYXB9KTt2YXIgZjl0PU0oKCk9Pnt9KTt2YXIgcDl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBTMG4sTTBuLEUwbixOSj1NKCgpPT57UzBuPU1hdGguc3FydCg1MCksTTBuPU1hdGguc3FydCgxMCksRTBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIGQ5dD1NKCgpPT57a0ooKTtDSigpO2Y5dCgpO0xKKCk7cDl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgZzl0PU0oKCk9PntrSigpO0Z5KCk7TDIoKTtkRCgpfSk7dmFyIF85dD1NKCgpPT57SUooKX0pO3ZhciB5OXQ9TSgoKT0+e30pO3ZhciB2OXQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntGeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIGI5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgdzl0PU0oKCk9Pnt9KTt2YXIgUzl0PU0oKCk9PntGeSgpfSk7dmFyIE05dD1NKCgpPT57fSk7dmFyIEU5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIFQ5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtGeSgpO1RKKCk7Yzl0KCk7dTl0KCk7SUooKTtMSigpO2Q5dCgpO2c5dCgpO185dCgpO0RKKCk7eTl0KCk7djl0KCk7eDl0KCk7Yjl0KCk7T0ooKTtBSigpO3c5dCgpO2REKCk7UkooKTtTOXQoKTtNOXQoKTtFOXQoKTtOSigpO3pKKCk7UEooKTtUOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsdFBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoUTRlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBRNGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gdFBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUZuLWNlOkZuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Gbi1jZTpGbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIGVQZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9GbjotRm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9clBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gclBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBuUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqRm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sZVBlLG5QZSxbLXJyLC1Gbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gQzl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIEE5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0M5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7QTl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBQOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgSTl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gaVBlKCl7azIucG9pbnQ9YVBlLGsyLmxpbmVFbmQ9b1BlfWZ1bmN0aW9uIG9QZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gYVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1zUGV9ZnVuY3Rpb24gc1BlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1ZKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6aVBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGxQZSl9dmFyIEdKLGxQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxsUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJms5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2s5dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gUjl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIE45dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEQ5dChlLHQpe3JldHVybiEhZkQoZS5tYXAoY1BlKSxPOXQodCkpfWZ1bmN0aW9uIGNQZShlKXtyZXR1cm4gZT1lLm1hcChPOXQpLGUucG9wKCksZX1mdW5jdGlvbiBPOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuKGUmJkw5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0w5dFtlLnR5cGVdOndEKShlLHQpfXZhciBMOXQsazl0LEY5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7TDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sazl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUjl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE45dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE45dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEQ5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEQ5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gQjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gSDl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPUI5dChvLGksOTApLHA9SDl0KHQsZSxfKSxkPUI5dChzLGEsOTApLGc9SDl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBWOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBVOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIHE5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKlpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBHOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVQZSgpe3lnLnBvaW50PWhQZX1mdW5jdGlvbiBoUGUoZSx0KXt5Zy5wb2ludD1qOXQsVzl0PVhKPWUsWTl0PSRKPXR9ZnVuY3Rpb24gajl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGZQZSgpe2o5dChXOXQsWTl0KX12YXIgWUosakosVzl0LFk5dCxYSiwkSix5ZyxLSixYOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO1lKPUNzKCksako9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PXVQZSx5Zy5saW5lRW5kPWZQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXlnfSk7ZnVuY3Rpb24gZFBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxwUGUsTjIsWko9TSgoKT0+e1hwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxwUGU9e3BvaW50OmRQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1wUGV9KTtmdW5jdGlvbiBIeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gJDl0KCl7Q3UucG9pbnQ9bVBlfWZ1bmN0aW9uIG1QZShlLHQpe0N1LnBvaW50PWdQZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIGdQZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7Q0QrPWkqKG9mK2UpLzIsQUQrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiBLOXQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBfUGUoKXtDdS5wb2ludD12UGV9ZnVuY3Rpb24geVBlKCl7UTl0KFo5dCxKOXQpfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PVE5dCxIeShaOXQ9b2Y9ZSxKOXQ9YWY9dCl9ZnVuY3Rpb24gUTl0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtDRCs9aSoob2YrZSkvMixBRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCx0USs9aSoob2YrZSksZVErPWkqKGFmK3QpLFVUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsWjl0LEo5dCxvZixhZixDdSxyUSx0THQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDokOXQsbGluZUVuZDpLOXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PV9QZSxDdS5saW5lRW5kPXlQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD0kOXQsQ3UubGluZUVuZD1LOXR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIGVMdD1NKCgpPT57bHIoKTtYcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIHhQZShlLHQpe0lELnBvaW50PWlMdCxyTHQ9cVQ9ZSxuTHQ9R1Q9dH1mdW5jdGlvbiBpTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLHJMdCxuTHQscVQsR1QsSUQsb1Esb0x0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtpUT1DcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD14UGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmaUx0KHJMdCxuTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBhTHQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIHNMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOmFMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPWFMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gbEx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBjTHQ9TSgoKT0+e01EKCk7bWcoKTtYOXQoKTtaSigpO3RMdCgpO2VMdCgpO29MdCgpO3NMdCgpfSk7ZnVuY3Rpb24gdUx0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57bWcoKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9TUGUoZSx0KTp3UGUoZSl9ZnVuY3Rpb24gd1BlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIFNQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPVpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPGJQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxoTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLGhMdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBoTHQsYlBlLGZMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7aEx0PTE2LGJQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBFUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1NUGUoRVBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIE1QZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Zkx0KCk7TVBlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gcEx0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsWm4oaSp0KV19LHJ9dmFyIGRMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gcEx0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksWm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTtkTHQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gVFBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBtTHQoKXt2YXIgZSx0LHI9REQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1UUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgZ0x0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxabihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBfTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQseUx0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqWm4oZS8yKX0pfSk7ZnVuY3Rpb24gdkx0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCx4THQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoRm4rdCkvMikpXX1mdW5jdGlvbiBiTHQoKXtyZXR1cm4gaFEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Gbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChGbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUZuK2NlJiYocz0tRm4rY2UpOnM+Rm4tY2UmJihzPUZuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoJE4oaS9jLDEvbikpLUZuXX0sb31mdW5jdGlvbiB3THQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIFNMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIE1MdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIEVMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgVEx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gQ0x0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBBTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFBMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBJTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBMTHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBrTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gUkx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgTkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoWm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIERMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgT0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW1J5KEMyKChGbit0KS8yKSksLWVdfWZ1bmN0aW9uIHpMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIEZMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Gbl19fSk7dmFyIEJMdD1NKCgpPT57dUooKTtqSXQoKTt0OXQoKTt2SigpO0JKKCk7SEooKTtJOXQoKTtCVCgpO0Y5dCgpO1dKKCk7VTl0KCk7Rzl0KCk7cUooKTtjTHQoKTt1USgpO2dMdCgpO3lMdCgpO3hMdCgpO1NMdCgpO05EKCk7VEx0KCk7cFEoKTtBTHQoKTtJTHQoKTtBdSgpO0JEKCk7a0x0KCk7Tkx0KCk7T0x0KCk7Rkx0KCk7RFQoKTttZygpO1dUKCl9KTtmdW5jdGlvbiBDUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gQVBlKGUpe3JldHVybiBlLnJlZHVjZShQUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUFBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIElQZShlKXtyZXR1cm4gMStlLnJlZHVjZShMUGUsMCl9ZnVuY3Rpb24gTFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBrUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIFJQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gSEx0KCl7dmFyIGU9Q1BlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1BUGUocCksZi55PUlQZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1rUGUobyksYz1SUGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFZMdD1NKCgpPT57fSk7ZnVuY3Rpb24gTlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFVMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihOUGUpfXZhciBxTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgV0x0PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgakx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyICRMdD1NKCgpPT57fSk7ZnVuY3Rpb24gS0x0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIFpMdD1NKCgpPT57fSk7ZnVuY3Rpb24gSkx0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe2Zvcih2YXIgdD10aGlzLHI9RFBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRFBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgZWt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBya3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBva3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGFrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgc2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsa3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIGNrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD16UGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBPUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShGUGUpfWZ1bmN0aW9uIHpQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBGUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntxTHQoKTtXTHQoKTtqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTt4Zy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpVTHQsZWFjaDpHTHQsZWFjaEFmdGVyOlhMdCxlYWNoQmVmb3JlOllMdCxzdW06S0x0LHNvcnQ6Skx0LHBhdGg6dGt0LGFuY2VzdG9yczpya3QsZGVzY2VuZGFudHM6aWt0LGxlYXZlczpha3QsbGlua3M6bGt0LGNvcHk6T1BlfX0pO2Z1bmN0aW9uIGhrdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgdWt0LGZrdD1NKCgpPT57dWt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9aGt0KHVrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJnBrdChvLGkpPysrdDoobz1IUGUobj1CUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBCUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKGRrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gcGt0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighcGt0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSFBlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBWUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gZGt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gVlBlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIGRrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Zmt0KCl9KTtmdW5jdGlvbiBta3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24gZ2t0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIF9rdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7bWt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtta3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoZ2t0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoZ2t0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPV9rdCh0KTsobj1uLm5leHQpIT09cjspKGE9X2t0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB5a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gdmt0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBVUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB3a3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoeGt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoYmt0KDEpKTpvLmVhY2hCZWZvcmUoeGt0KFVQZSkpLmVhY2hBZnRlcihiUSh0ZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGJrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12a3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIHhrdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBia3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIFNrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gTWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIEVrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gR1BlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIFdQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBBa3QoKXt2YXIgZT1HUGUsdD1XUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9VGt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0NrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtUa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Da3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1xUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBUa3QscVBlLENrdCxQa3Q9TSgoKT0+e1pEKCk7akQoKTtUa3Q9IiQiLHFQZT17ZGVwdGg6LTF9LENrdD17fX0pO2Z1bmN0aW9uIFlQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24galBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIFhQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiAkUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiBLUGUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gSWt0KCl7dmFyIGU9WVBlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9S1BlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe1hQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoalBlKCRQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBMa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIGtrdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciBSa3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBOa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgRGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciB6a3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBGa3QsQmt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtGa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgSGt0PU0oKCk9PntWTHQoKTtqRCgpO1NrdCgpO3ZRKCk7X1EoKTtFa3QoKTtQa3QoKTtMa3QoKTtSa3QoKTtEa3QoKTtVMigpOyRUKCk7emt0KCk7ZU8oKTtCa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFVrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGk2ZSgpe3JldHVybiBYa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gcWt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9WlBlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/R2t0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1KUGUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PVFQZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9dDZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWU2ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1yNmUuZXhlYyhlKSk/amt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9bjZlLmV4ZWMoZSkpP2prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOlZrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ha3QoVmt0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBHa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFdrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBZa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gamt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gWGt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/WGt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMixLVCx1ZixaUGUsSlBlLFFQZSx0NmUsZTZlLHI2ZSxuNmUsVmt0LGlPPU0oKCk9PntyTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixaUGU9L14jKFswLTlhLWZdezMsOH0pJC8sSlBlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxRUGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLHQ2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLGU2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLEtUXSsiXFwpJCIpLHI2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsdWYsdWZdKyJcXCkkIiksbjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsdWYsdWYsS1RdKyJcXCkkIiksVmt0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlVrdCxmb3JtYXRIZXg6VWt0LGZvcm1hdEhzbDppNmUsZm9ybWF0UmdiOnFrdCx0b1N0cmluZzpxa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6V2t0LGZvcm1hdEhleDpXa3QsZm9ybWF0UmdiOllrdCx0b1N0cmluZzpZa3R9KSk7ZWQoY2YsSlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIHQ4dChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gZTh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvS2t0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pLyRrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL1prdCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3Q4dChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5vNmU/TWF0aC5wb3coZSwxLzMpOmUvUWt0K0prdH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpRa3QqKGUtSmt0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGE2ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9dDh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/YTZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGU4dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLCRrdCxLa3QsWmt0LEprdCxXMixRa3QsbzZlLHI4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsJGt0PS45NjQyMixLa3Q9MSxaa3Q9LjgyNTIxLEprdD00LzI5LFcyPTYvMjksUWt0PTMqVzIqVzIsbzZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD0ka3QqTFEodCksZT1La3QqTFEoZSkscj1aa3QqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxRVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGU4dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBzNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obzh0Km4rbjh0KnQtaTh0KnIpLyhvOHQrbjh0LWk4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9zNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGE4dCxOUSxEUSxsTyx0QyxuOHQsaTh0LG84dCxzOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO2E4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsbjh0PXRDKmxPLGk4dD10QypOUSxvOHQ9TlEqRFEtbE8qYTh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKihhOHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e2lPKCk7cjh0KCk7czh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGw4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGw2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBjOHQoZSl7cmV0dXJuKGU9K2UpPT0xP0puOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9sNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIEpuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gdTh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLGg4dCxmOHQsQlE9TSgoKT0+e2p5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1jOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7aDh0PXU4dChjTyksZjh0PXU4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gYzZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiB1NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/dTZlKGxbMF0ueCk6YzZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIEVnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POkFzKShlLHQpfXZhciBwTz1NKCgpPT57ankoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gcDh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciBkOHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKm04dCxza2V3WDpNYXRoLmF0YW4obCkqbTh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgbTh0LF9PLGc4dD1NKCgpPT57bTh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24geTh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxfOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Xzh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHY4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLF84dCx5Tyx4OHQ9TSgoKT0+e2c4dCgpfSk7ZnVuY3Rpb24gYjh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciB3OHQsUzh0LE04dD1NKCgpPT57ckMoKTt4OHQoKTt3OHQ9Yjh0KHk4dCwicHgsICIsInB4KSIsImRlZykiKSxTOHQ9Yjh0KHY4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gVDh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGY2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBwNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEM4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8aDZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0U4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktRTh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9VDh0KF8pLEM9aS8oWFEqcCkqKFMqcDZlKGlDKmIrXyktZjZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL1Q4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsRTh0LGg2ZSxBOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixFOHQ9NCxoNmU9MWUtMTJ9KTtmdW5jdGlvbiBQOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Kbih0LnMsci5zKSxvPUpuKHQubCxyLmwpLGE9Sm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIEk4dCxMOHQsazh0PU0oKCk9PntqeSgpO0syKCk7STh0PVA4dCgkMiksTDh0PVA4dChKbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPUpuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPUpuKGUuYSx0LmEpLGk9Sm4oZS5iLHQuYiksbz1KbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciBSOHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIE44dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPUpuKHQuYyxyLmMpLG89Sm4odC5sLHIubCksYT1Kbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgRDh0LE84dCx6OHQ9TSgoKT0+e2p5KCk7SzIoKTtEOHQ9Tjh0KCQyKSxPOHQ9Tjh0KEpuKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPUpuKGkucyxvLnMpLGw9Sm4oaS5sLG8ubCksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEI4dCxIOHQsVjh0PU0oKCk9PntqeSgpO0syKCk7Qjh0PUY4dCgkMiksSDh0PUY4dChKbil9KTtmdW5jdGlvbiBVOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgcTh0PU0oKCk9Pnt9KTt2YXIgRzh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO2Q4dCgpO1dRKCk7TTh0KCk7QTh0KCk7QlEoKTtrOHQoKTtSOHQoKTt6OHQoKTtWOHQoKTtxOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gVzh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsWHksZDZlLFk4dCxqOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSxYeT0xZS02LGQ2ZT1aUS1YeTtKUS5wcm90b3R5cGU9Vzh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+ZDZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O1k4dD1XOHR9KTt2YXIgWDh0PU0oKCk9PntqOHQoKX0pO2Z1bmN0aW9uICQ4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIEs4dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjh0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgSjh0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROHQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciB0UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBlUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmUTh0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIHJSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KG02ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89ZVJ0KG4pLGE9ZVJ0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBuUnQ9TSgoKT0+e3RSdCgpfSk7ZnVuY3Rpb24gaVJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgb1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIHNSdD1NKCgpPT57fSk7dmFyIGxSdD1NKCgpPT57Szh0KCk7Sjh0KCk7blJ0KCk7b1J0KCk7c1J0KCl9KTtmdW5jdGlvbiBjUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiB1UnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiB1UnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gaFJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcil1UnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFJ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBkUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1SdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBnUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgeVJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIHZSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHhSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIGJSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB3UnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBTUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1SdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBFUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIENSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQVJ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFBSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIElSdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgTFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24ga1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIFJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIE5SdD1NKCgpPT57fSk7ZnVuY3Rpb24gRFJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIHpSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP2tSdDp0LHI9PW51bGw/RFJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gRlJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgWGEsQlJ0PU0oKCk9PntmUnQoKTtkUnQoKTtnUnQoKTt5UnQoKTt4UnQoKTtTUnQoKTtFUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtOUnQoKTt6UnQoKTtYYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1GUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1GUnQobikpO3JldHVybiBlfTtYYS5hZGQ9Y1J0O1hhLmFkZEFsbD1oUnQ7WGEuY292ZXI9cFJ0O1hhLmRhdGE9bVJ0O1hhLmV4dGVudD1fUnQ7WGEuZmluZD12UnQ7WGEucmVtb3ZlPWJSdDtYYS5yZW1vdmVBbGw9d1J0O1hhLnJvb3Q9TVJ0O1hhLnNpemU9VFJ0O1hhLnZpc2l0PUFSdDtYYS52aXNpdEFmdGVyPUlSdDtYYS54PVJSdDtYYS55PU9SdH0pO3ZhciBIUnQ9TSgoKT0+e0JSdCgpfSk7dmFyIFZSdCxVUnQ9TSgoKT0+e1ZSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBxUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtfNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gXzZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09eTZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8ZzZlKX19ZnVuY3Rpb24geTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/cVJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIGc2ZSxHUnQ9TSgoKT0+e1VSdCgpO2c2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVZSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLHFSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgV1J0PU0oKCk9PntHUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyICR5PU0oKCk9Pnt9KTt2YXIgWVJ0LGpSdD1NKCgpPT57JHkoKTtZUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgWFJ0LCRSdD1NKCgpPT57JHkoKTtydHQoKTtYUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57JHkoKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgS1J0LFpSdD1NKCgpPT57JHkoKTtudHQoKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBKUnQsUVJ0PU0oKCk9PnskeSgpO0pSdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50PU0oKCk9PntqUnQoKTtydHQoKTskUnQoKTtaUnQoKTtudHQoKTtRUnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj12cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZ4NmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9djZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIHY2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24geDZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO2ttKCl9KTtmdW5jdGlvbiBUZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBlTnQsck50PU0oKCk9PntvQygpO2VOdD1UZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgbk50LGlOdD1NKCgpPT57b0MoKTtuTnQ9VGcoImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIG9OdCxhTnQ9TSgoKT0+e29DKCk7b050PVRnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBzTnQsbE50PU0oKCk9PntvQygpO3NOdD1UZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKGI2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gYjZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e3FFKCk7aXR0KCk7Y050PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIGhOdCxmTnQ9TSgoKT0+e3FFKCk7aXR0KCk7aE50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgcE50PU0oKCk9PntFTygpO3JOdCgpO2lOdCgpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpfSk7ZnVuY3Rpb24gcGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEt5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT13NmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiB3NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHBmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e0t5KCl9KTt2YXIgZE50LG1OdCxTNmUsZGYsYXR0PU0oKCk9PntLeSgpO290dCgpO2ROdD1hQyhwZiksbU50PWROdC5yaWdodCxTNmU9ZE50LmxlZnQsZGY9bU50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIGdOdD1NKCgpPT57c3R0KCl9KTt2YXIgX050PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHlOdCxFNmUsVDZlLGh0dD1NKCgpPT57eU50PUFycmF5LnByb3RvdHlwZSxFNmU9eU50LnNsaWNlLFQ2ZT15TnQubWFwfSk7dmFyIHZOdD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIFp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBiTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO3ZOdCgpO3V0dCgpO3hOdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIHdOdD1NKCgpPT57aHR0KCk7S3koKTt0dygpO0FPKCl9KTt2YXIgU050PU0oKCk9PntjdHQoKX0pO3ZhciBNTnQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e3R3KCl9KTt2YXIgVE50PU0oKCk9PntLeSgpO3R3KCk7QU8oKX0pO3ZhciBDTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e0t5KCl9KTt2YXIgSU50PU0oKCk9Pnt9KTt2YXIgTE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBrTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIG1mPU0oKCk9PnthdHQoKTtLeSgpO290dCgpO2dOdCgpO19OdCgpO2N0dCgpO3V0dCgpO2JOdCgpO3dOdCgpO1NOdCgpO190dCgpO01OdCgpO0VOdCgpO1ROdCgpO0NOdCgpO3l0dCgpO3N0dCgpO0FOdCgpO0FPKCk7ZnR0KCk7UE50KCk7SU50KCk7TE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7a050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiBSTnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBmbCxKeSxJTz1NKCgpPT57Zmw9IiQiO1BPLnByb3RvdHlwZT1STnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2ZsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tmbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1mbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1mbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09ZmwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O0p5PVJOdH0pO3ZhciBOTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBrNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBReSxETnQ9TSgoKT0+e0lPKCk7UXk9SnkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1rNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6UXkuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1tmbCtlXT1lLHRoaXN9LHJlbW92ZTpReS5yZW1vdmUsY2xlYXI6UXkuY2xlYXIsdmFsdWVzOlF5LmtleXMsc2l6ZTpReS5zaXplLGVtcHR5OlF5LmVtcHR5LGVhY2g6UXkuZWFjaH19KTt2YXIgT050PU0oKCk9Pnt9KTt2YXIgek50PU0oKCk9Pnt9KTt2YXIgRk50PU0oKCk9Pnt9KTt2YXIgQk50PU0oKCk9PntOTnQoKTtETnQoKTtJTygpO09OdCgpO3pOdCgpO0ZOdCgpfSk7dmFyIEhOdCxydyxwbCxDZz1NKCgpPT57SE50PUFycmF5LnByb3RvdHlwZSxydz1ITnQubWFwLHBsPUhOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PUp5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpwbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1KeSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57Qk50KCk7Q2coKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gVk50KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZOdCh0KCkpfSxlfWZ1bmN0aW9uIFVOdCgpe3JldHVybiBWTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBxTnQ9TSgoKT0+e21mKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZXYoKXt9ZnVuY3Rpb24gV050KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSDZlKCl7cmV0dXJuIFpOdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBZTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBQZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1SNmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9qTnQodCk6cj09PTM/bmV3IGhhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU42ZS5leGVjKGUpKT9uZXcgaGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9RDZlLmV4ZWMoZSkpP25ldyBoYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1PNmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9ejZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUY2ZS5leGVjKGUpKT9LTnQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1CNmUuZXhlYyhlKSk/S050KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6R050Lmhhc093blByb3BlcnR5KGUpP2pOdChHTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBoYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGpOdChlKXtyZXR1cm4gbmV3IGhhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGhhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGV2fHwoZT1QZyhlKSksZT8oZT1lLnJnYigpLG5ldyBoYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgaGF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgaGEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGhhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gJE50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBLTnQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBnZihlLHQscixuKX1mdW5jdGlvbiBaTnQoZSl7aWYoZSBpbnN0YW5jZW9mIGdmKXJldHVybiBuZXcgZ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZXZ8fChlPVBnKGUpKSwhZSlyZXR1cm4gbmV3IGdmO2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBnZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIEpOdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Wk50KGUpOm5ldyBnZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgQWcsdHYsb3csaEMsX2YsUjZlLE42ZSxENmUsTzZlLHo2ZSxGNmUsQjZlLEdOdCxFdHQ9TSgoKT0+e2J0dCgpO0FnPS43LHR2PTEvQWcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLF9mPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixSNmU9L14jKFswLTlhLWZdezMsOH0pJC8sTjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxENmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW19mLF9mLF9mXSsiXFwpJCIpLE82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLHo2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW19mLF9mLF9mLGhDXSsiXFwpJCIpLEY2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMsX2YsX2ZdKyJcXCkkIiksQjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMsX2YsX2YsaENdKyJcXCkkIiksR050PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KGV2LFBnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OldOdCxmb3JtYXRIZXg6V050LGZvcm1hdEhzbDpINmUsZm9ybWF0UmdiOllOdCx0b1N0cmluZzpZTnR9KTtpdyhoYSxhdyx1Qyhldix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90djpNYXRoLnBvdyh0dixlKSxuZXcgaGEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/QWc6TWF0aC5wb3coQWcsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6WE50LGZvcm1hdEhleDpYTnQsZm9ybWF0UmdiOiROdCx0b1N0cmluZzokTnR9KSk7aXcoZ2YsSk50LHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGhhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBRTnQsdER0LGVEdD1NKCgpPT57UU50PU1hdGguUEkvMTgwLHREdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFY2ZShlKXtpZihlIGluc3RhbmNlb2YgcnYpcmV0dXJuIG5ldyBydihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBoYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oaUR0Km4rckR0KnQtbkR0KnIpLyhpRHQrckR0LW5EdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKnREdC0xMjA6TmFOO3JldHVybiBuZXcgcnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gJGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1Y2ZShlKTpuZXcgcnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHJ2KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgb0R0LFR0dCxDdHQsTk8sZkMsckR0LG5EdCxpRHQsYUR0PU0oKCk9PntidHQoKTtFdHQoKTtlRHQoKTtvRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsckR0PWZDKk5PLG5EdD1mQypUdHQsaUR0PVR0dCpDdHQtTk8qb0R0O2l3KHJ2LCRhLHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUU50LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBoYSgyNTUqKHQrcioob0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO2FEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gc0R0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgY0R0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1RHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBVNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBoRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGZEdChlKXtyZXR1cm4oZT0rZSk9PTE/bmQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1U2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gbmQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIHBEdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsbDVuLGM1bixkRHQ9TSgoKT0+e3N3KCk7UHR0KCk7Y0R0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9ZkR0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9bmQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2w1bj1wRHQoc0R0KSxjNW49cER0KGxEdCl9KTtmdW5jdGlvbiBtRHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gZ0R0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgX0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1udihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciB2RHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiB4RHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBiRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gd0R0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bnYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgU0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gcTZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBHNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6eWYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/RzZlKGxbMF0ueCk6cTZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LEVEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIG52KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3lmOnI9PT0ic3RyaW5nIj8obj1QZyh0KSk/KHQ9bixrdHQpOk1EdDp0IGluc3RhbmNlb2YgUGc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP3hEdDpnRHQodCk/bUR0OkFycmF5LmlzQXJyYXkodCk/eUR0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT93RHQ6eWYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO2REdCgpO3ZEdCgpO2JEdCgpO09PKCk7U0R0KCk7RUR0KCk7SXR0KCk7X0R0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIFREdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ0R0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9JGEoaSkpLmgsKG89JGEobykpLmgpLHM9bmQoaS5zLG8ucyksbD1uZChpLmwsby5sKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgVzZlLGN3LEFEdD1NKCgpPT57c3coKTtMdHQoKTtXNmU9Q0R0KGhEdCksY3c9Q0R0KG5kKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO1REdCgpO0FEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gWTZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIGo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBYNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gJDZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPWRmKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIElnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIGlkKGUsdCl7dmFyIHI9UER0LG49UER0LGk9bnYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/JDZlOlg2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/WTZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP2o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1wbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49cGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBQRHQsZEM9TSgoKT0+e21mKCk7dXcoKTtDZygpO3pPKCk7T3R0KCk7UER0PVswLDFdfSk7ZnVuY3Rpb24gSUR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBpdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUpe3JldHVybiBlPWl2KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIExEdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIga0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSRHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBORHQ9TSgoKT0+e30pO2Z1bmN0aW9uIExnKGUpe2lmKCEodD1LNmUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciBLNmUsenR0PU0oKCk9PntLNmU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7TGcucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEREdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikraXYoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBGRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LEJEdD1NKCgpPT57bUMoKTtCdHQoKTtGRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpJRHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOnpEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBIRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6TER0KFZEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OlJEdChWRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9RER0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/VUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1MZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1VRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFZEdCxVRHQsR0R0PU0oKCk9PntnQygpO2tEdCgpO05EdCgpO3p0dCgpO09EdCgpO0JEdCgpO0J0dCgpO0hEdCgpO1ZEdD1BcnJheS5wcm90b3R5cGUubWFwLFVEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89cUR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLFdEdD1NKCgpPT57R0R0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwtdmYoTWF0aC5hYnMoZSkpKX12YXIgWUR0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHZmKHQpLzMpKSkqMy12ZihNYXRoLmFicyhlKSkpfXZhciBqRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx2Zih0KS12ZihlKSkrMX12YXIgWER0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57V0R0KCk7enR0KCk7WUR0KCk7akR0KCk7WER0KCl9KTtmdW5jdGlvbiAkRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89WnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1MZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciBLRHQ9TSgoKT0+e21mKCk7anR0KCl9KTtmdW5jdGlvbiBvZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gJER0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1pZChwQyx5Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhlLFVPKCkpfSxvZChlKX12YXIgcHc9TSgoKT0+e21mKCk7dXcoKTtkQygpO0tEdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sb2QodCl9dmFyIFpEdD1NKCgpPT57Q2coKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaNmUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBKNmUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIFE2ZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gSkR0KGUpe3JldHVybiBlPT09MTA/UTZlOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIFFEdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gdE90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9aWQoWjZlLEo2ZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49UUR0KDEwKSxpPUpEdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPVFEdChyKSxpPUpEdChyKSx0KClbMF08MCYmKG49dE90KG4pLGk9dE90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxXTygpLmJhc2UocikpfSxlfXZhciBlT3Q9TSgoKT0+e21mKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PWlkKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHQsX0MoKS5leHBvbmVudChlKSl9LG9kKHQpfWZ1bmN0aW9uIHJPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgbk90PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbZGYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KHBmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGlPdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW2RmKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9cGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LG9kKG8pfXZhciBvT3Q9TSgoKT0+e21mKCk7Q2coKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFtkZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgYU90PU0oKCk9PnttZigpO0NnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LEthPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LHNPdCxsT3Q9TSgoKT0+e0thKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxzT3Q9JE8ucmFuZ2V9KTt2YXIgb3Ysd2MsZ3csS08sWk8seGY9TSgoKT0+e292PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgY090LF93LHVPdCxoT3Q9TSgoKT0+e0thKCk7eGYoKTtjT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqb3YpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL292fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1jT3QsdU90PWNPdC5yYW5nZX0pO3ZhciBmT3QsWnR0LHRJZSxwT3Q9TSgoKT0+e0thKCk7eGYoKTtmT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Zk90LHRJZT1mT3QucmFuZ2V9KTt2YXIgZE90LEp0dCxlSWUsbU90PU0oKCk9PntLYSgpO3hmKCk7ZE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqb3YtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD1kT3QsZUllPWRPdC5yYW5nZX0pO3ZhciBnT3QseXcsckllLF9PdD1NKCgpPT57S2EoKTt4ZigpO2dPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9Z090LHJJZT1nT3QucmFuZ2V9KTtmdW5jdGlvbiBhdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgc3YsdncseU90LHZPdCxrZyx4T3QsYk90LHdPdCxuSWUsaUllLG9JZSxhSWUsc0llLGxJZSxTT3Q9TSgoKT0+e0thKCk7eGYoKTtzdj1hdigwKSx2dz1hdigxKSx5T3Q9YXYoMiksdk90PWF2KDMpLGtnPWF2KDQpLHhPdD1hdig1KSxiT3Q9YXYoNiksd090PXN2LnJhbmdlLG5JZT12dy5yYW5nZSxpSWU9eU90LnJhbmdlLG9JZT12T3QucmFuZ2UsYUllPWtnLnJhbmdlLHNJZT14T3QucmFuZ2UsbEllPWJPdC5yYW5nZX0pO3ZhciBNT3QsUXR0LGNJZSxFT3Q9TSgoKT0+e0thKCk7TU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1NT3QsY0llPU1PdC5yYW5nZX0pO3ZhciB0ZXQsYWQsdUllLFRPdD1NKCgpPT57S2EoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTthZD10ZXQsdUllPXRldC5yYW5nZX0pO3ZhciBDT3QsZWV0LGhJZSxBT3Q9TSgoKT0+e0thKCk7eGYoKTtDT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9Q090LGhJZT1DT3QucmFuZ2V9KTt2YXIgUE90LHJldCxmSWUsSU90PU0oKCk9PntLYSgpO3hmKCk7UE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVBPdCxmSWU9UE90LnJhbmdlfSk7dmFyIExPdCx4dyxwSWUsa090PU0oKCk9PntLYSgpO3hmKCk7TE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PUxPdCxwSWU9TE90LnJhbmdlfSk7ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgY3YsYncsUk90LE5PdCxSZyxET3QsT090LHpPdCxkSWUsbUllLGdJZSxfSWUseUllLHZJZSxGT3Q9TSgoKT0+e0thKCk7eGYoKTtjdj1sdigwKSxidz1sdigxKSxST3Q9bHYoMiksTk90PWx2KDMpLFJnPWx2KDQpLERPdD1sdig1KSxPT3Q9bHYoNiksek90PWN2LnJhbmdlLGRJZT1idy5yYW5nZSxtSWU9Uk90LnJhbmdlLGdJZT1OT3QucmFuZ2UsX0llPVJnLnJhbmdlLHlJZT1ET3QucmFuZ2UsdkllPU9PdC5yYW5nZX0pO3ZhciBCT3QsbmV0LHhJZSxIT3Q9TSgoKT0+e0thKCk7Qk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1CT3QseEllPUJPdC5yYW5nZX0pO3ZhciBpZXQsc2QsYkllLFZPdD1NKCgpPT57S2EoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtzZD1pZXQsYkllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57bE90KCk7aE90KCk7cE90KCk7bU90KCk7X090KCk7U090KCk7RU90KCk7VE90KCk7QU90KCk7SU90KCk7a090KCk7Rk90KCk7SE90KCk7Vk90KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmpPdCxlOmpPdCxmOkdJZSxnOnQ5ZSxHOnI5ZSxIOlZJZSxJOlVJZSxqOnFJZSxMOkpPdCxtOldJZSxNOllJZSxwOnN0LHE6U3QsUTpLT3QsczpaT3QsUzpqSWUsdTpYSWUsVTokSWUsVjpLSWUsdzpaSWUsVzpKSWUseDpudWxsLFg6bnVsbCx5OlFJZSxZOmU5ZSxaOm45ZSwiJSI6JE90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOlhPdCxlOlhPdCxmOnM5ZSxnOl85ZSxHOnY5ZSxIOmk5ZSxJOm85ZSxqOmE5ZSxMOnQ3dCxtOmw5ZSxNOmM5ZSxwOl90LHE6Y3QsUTpLT3QsczpaT3QsUzp1OWUsdTpoOWUsVTpmOWUsVjpwOWUsdzpkOWUsVzptOWUseDpudWxsLFg6bnVsbCx5Omc5ZSxZOnk5ZSxaOng5ZSwiJSI6JE90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6V090LGU6V090LGY6ekllLGc6R090LEc6cU90LEg6WU90LEk6WU90LGo6UkllLEw6T0llLG06a0llLE06TkllLHA6RCxxOkxJZSxROkJJZSxzOkhJZSxTOkRJZSx1OlRJZSxVOkNJZSxWOkFJZSx3OkVJZSxXOlBJZSx4OnosWDpVLHk6R090LFk6cU90LFo6SUllLCIlIjpGSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1VT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gVU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gTUllKGUpe3JldHVybiBlLnJlcGxhY2UoU0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKE1JZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEVJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElJZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBESWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGSWUoZSx0LHIpe3ZhciBuPXdJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEJJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFZJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBVSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHFJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KGFkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSk90KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBHSWUoZSx0KXtyZXR1cm4gSk90KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gV0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gakllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWEllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiAkSWUoZSx0KXtyZXR1cm4gR3Ioc3YuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFPdChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9rZyhlKTprZy5jZWlsKGUpfWZ1bmN0aW9uIEtJZShlLHQpe3JldHVybiBlPVFPdChlKSxHcihrZy5jb3VudChhZChlKSxlKSsoYWQoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFpJZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBKSWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFJZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdDllKGUsdCl7cmV0dXJuIGU9UU90KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBlOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHI5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/a2coZSk6a2cuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gbjllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBYT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBpOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBhOWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChzZChlKSxlKSx0LDMpfWZ1bmN0aW9uIHQ3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gczllKGUsdCl7cmV0dXJuIHQ3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGw5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGM5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHU5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGg5ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZjllKGUsdCl7cmV0dXJuIEdyKGN2LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBlN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/UmcoZSk6UmcuY2VpbChlKX1mdW5jdGlvbiBwOWUoZSx0KXtyZXR1cm4gZT1lN3QoZSksR3IoUmcuY291bnQoc2QoZSksZSkrKHNkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBkOWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gbTllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBnOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIF85ZShlLHQpe3JldHVybiBlPWU3dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24geTllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB2OWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1JnKGUpOlJnLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHg5ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gJE90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEtPdChlKXtyZXR1cm4rZX1mdW5jdGlvbiBaT3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgVU90LFRvLHdJZSxTSWUscjd0PU0oKCk9PntKTygpO1VPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sd0llPS9eJS8sU0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxuN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGk3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sbjd0LHQ3LGk3dCxvN3Q9TSgoKT0+e3I3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57bzd0KCl9KTtmdW5jdGlvbiB3OWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIFM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9aWQocEMseWYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxiOWVdLFt0LDEsYTd0XSxbdCwzLDMqYTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1aeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KFp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxTOWUpKTpoKCkubWFwKHc5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gczd0KCl7cmV0dXJuIGU3KGFkLFF0dCxzdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLGI5ZSxhN3QsaGV0LGZldD1NKCgpPT57bWYoKTt1dygpO0pPKCk7dWV0KCk7Q2coKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxiOWU9TUMqNyxhN3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGw3dCgpe3JldHVybiBlNyhzZCxuZXQsY3YseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBjN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBkbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciB1N3QsaDd0PU0oKCk9PntTdygpO3U3dD1kbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZjd0LHA3dD1NKCgpPT57U3coKTtmN3Q9ZGwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIGQ3dCxtN3Q9TSgoKT0+e1N3KCk7ZDd0PWRsKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciBnN3QsXzd0PU0oKCk9PntTdygpO2c3dD1kbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgeTd0LHY3dD1NKCgpPT57c3coKTt1dygpO3k3dD1jdygkYSgzMDAsLjUsMCksJGEoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiB3N3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIHg3dCxiN3QscjcsUzd0PU0oKCk9PntzdygpO3V3KCk7eDd0PWN3KCRhKC0xMDAsLjc1LC4zNSksJGEoODAsMS41LC44KSksYjd0PWN3KCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxyNz0kYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIE03dCxFN3QsVDd0LEM3dCxBN3Q9TSgoKT0+e1N3KCk7TTd0PW43KGRsKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksRTd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksVDd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksQzd0PW43KGRsKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxvZChpKX12YXIgUDd0PU0oKCk9PntwdygpfSk7dmFyIEk3dD1NKCgpPT57cU50KCk7WkR0KCk7cHcoKTtlT3QoKTt4dHQoKTtuT3QoKTtpT3QoKTtvT3QoKTthT3QoKTtmZXQoKTtjN3QoKTtoN3QoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtTN3QoKTtBN3QoKTtQN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gTTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBFOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/RTllOk05ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBUOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/VDllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBMN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgQm4obix0aGlzLl9wYXJlbnRzKX12YXIgazd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBDOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9DOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBCbihuLGkpfXZhciBON3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgTzd0LFR3LEQ3dCx1NyxkZXQ9TSgoKT0+e083dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoRDd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixPN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEQ3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PU83dH0pO2Z1bmN0aW9uIHo3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJuKG4sdGhpcy5fcGFyZW50cyl9dmFyIEY3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEI3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEg3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFY3dD1NKCgpPT57fSk7ZnVuY3Rpb24gQTllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUDllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9VTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9VTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gcTd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9QOWU6QTllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SDd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBCbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFU3dCxHN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vjd0KCk7VTd0PSIkIn0pO2Z1bmN0aW9uIFc3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIFk3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIGo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgQm4oYSx0aGlzLl9wYXJlbnRzKX12YXIgWDd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gJDd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBLN3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFo3dChlKXtlfHwoZT1JOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgQm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIEk5ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciByenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG56dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGl6dD1NKCgpPT57fSk7ZnVuY3Rpb24gb3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgYXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGs5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFI5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBEOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIE85ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBoenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/azllOkw5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP085ZTpEOWU6ci5sb2NhbD9OOWU6UjllKShyLHQpKX12YXIgZnp0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gejllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEY5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEI5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBwenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3o5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9COWU6RjllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBIOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gVTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIGR6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0g5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9VOWU6VjllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgbXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBnenQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBfenQoZSl9ZnVuY3Rpb24gX3p0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1nenQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB5enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gdnp0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHE5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt5enQodGhpcyxlKX19ZnVuY3Rpb24gRzllKGUpe3JldHVybiBmdW5jdGlvbigpe3Z6dCh0aGlzLGUpfX1mdW5jdGlvbiBXOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/eXp0OnZ6dCkodGhpcyxlKX19ZnVuY3Rpb24geHp0KGUsdCl7dmFyIHI9Z3p0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9XOWU6dD9xOWU6RzllKShyLHQpKX12YXIgYnp0PU0oKCk9PntfenQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gWTllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBqOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBYOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHd6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9ZOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1g5ZTpqOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgU3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkOWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBLOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWjllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsPyQ5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WjllOks5ZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVHp0KCl7cmV0dXJuIHRoaXMuZWFjaChKOWUpfXZhciBDenQ9TSgoKT0+e30pO2Z1bmN0aW9uIFE5ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEF6dCgpe3JldHVybiB0aGlzLmVhY2goUTllKX12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgTHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gdExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24ga3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKSxuPXQ9PW51bGw/dExlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBSenQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIGVMZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIE56dCgpe3JldHVybiB0aGlzLmVhY2goZUxlKX12YXIgRHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gbkxlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIE96dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9uTGU6ckxlKX12YXIgenp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBCenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlMZShlLHQscil7cmV0dXJuIGU9VXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFV6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBvTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIGFMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBzTGUoZSx0LHIpe3ZhciBuPVZ6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2lMZTpVenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gcXp0KGUsdCxyKXt2YXIgbj1vTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P3NMZTphTGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR3p0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBWenQsUHUsSHp0LHA3PU0oKCk9PntWenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoSHp0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEh6dHx8KFZ6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBXenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGxMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXenQodGhpcyxlLHQpfX1mdW5jdGlvbiBjTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV3p0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIFl6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2NMZTpsTGUpKGUsdCkpfXZhciBqenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBCbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBYenQoKXtyZXR1cm4gbmV3IEJuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQywkenQsU2M9TSgoKT0+e2s3dCgpO043dCgpO0Y3dCgpO0c3dCgpO2dldCgpO1k3dCgpO1g3dCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO3lldCgpO216dCgpO2J6dCgpO1N6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO3A3KCk7anp0KCk7QUM9W251bGxdO0JuLnByb3RvdHlwZT1YenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCbixzZWxlY3Q6TDd0LHNlbGVjdEFsbDpSN3QsZmlsdGVyOno3dCxkYXRhOnE3dCxlbnRlcjpCN3QsZXhpdDpXN3QsbWVyZ2U6ajd0LG9yZGVyOiQ3dCxzb3J0Olo3dCxjYWxsOlE3dCxub2RlczplenQsbm9kZTpuenQsc2l6ZTpvenQsZW1wdHk6c3p0LGVhY2g6Y3p0LGF0dHI6aHp0LHN0eWxlOnB6dCxwcm9wZXJ0eTpkenQsY2xhc3NlZDp4enQsdGV4dDp3enQsaHRtbDpNenQscmFpc2U6VHp0LGxvd2VyOkF6dCxhcHBlbmQ6SXp0LGluc2VydDprenQscmVtb3ZlOk56dCxjbG9uZTpPenQsZGF0dW06Rnp0LG9uOnF6dCxkaXNwYXRjaDpZenR9OyR6dD1YenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBCbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gS3p0KGUpe3JldHVybiBkNyhOZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBaenQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrdUxlKS50b1N0cmluZygzNil9dmFyIHVMZSxKenQ9TSgoKT0+e3VMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIERnKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBRenQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRGcoZSx0KX12YXIgdEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBlRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgQm4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQm4oW2U9PW51bGw/W106ZV0sQUMpfXZhciByRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBuRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRGcoZSxvKTtyZXR1cm4gbnVsbH12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EZyhlLHRbcl0pO3JldHVybiBpfXZhciBhRnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBzRnQ9TSgoKT0+e1p6dCgpO1RDKCk7Snp0KCk7ZGV0KCk7dEZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7ckZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2lGdCgpO2FGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGxGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LHV2LGhMZSxJdSxjRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCx1dj0xZS02LGhMZT1NZXQtdXY7RWV0LnByb3RvdHlwZT1sRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPnV2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+dXYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnV2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnV2fHxNYXRoLmFicyh0aGlzLl95MS1jKT51dikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+aExlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPnV2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1sRnR9KTt2YXIgUHc9TSgoKT0+e2NGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBPZz1NKCgpPT57fSk7ZnVuY3Rpb24gaEZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLHpnLHVGdCxfNyxMdSxodixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsemc9TWF0aC5jb3MsdUZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGh2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGZMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBwTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZExlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gbUxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIGdMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBfTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9odihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpodih1RnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGZGdCgpe3ZhciBlPWZMZSx0PXBMZSxyPUdlKDApLG49bnVsbCxpPWRMZSxvPW1MZSxhPWdMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKnpnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqemcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aHYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKnpnKHkpLFc9ZipMdSh5KSxaPWgqemcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9Zip6Zyh4KSxzdD1mKkx1KHgpLFN0PWgqemcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9fTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KGhGdCgobHQqX3QrS3QqY3QpLyhodihsdCpsdCtLdCpLdCkqaHYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9aHYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW3pnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgcEZ0PU0oKCk9PntQdygpO09nKCk7SXcoKX0pO2Z1bmN0aW9uIGRGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIG5ldyBkRnQoZSl9dmFyIExDPU0oKCk9PntkRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1GZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO09nKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUZnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO09nKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiBtRnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGdGdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0Z0KGUpe3JldHVybiBlfXZhciB5RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZGdCgpe3ZhciBlPV9GdCx0PW1GdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIHhGdD1NKCgpPT57T2coKTtnRnQoKTt5RnQoKTtJdygpfSk7ZnVuY3Rpb24gYkZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IGJGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoRmcpO2JGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciB3RnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gZnYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiB2TGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD15TGUscj12TGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHhMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIGJMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHdMZShlLHQscixuLGkpe3ZhciBvPWZ2KHQsciksYT1mdih0LHI9KHIraSkvMikscz1mdihuLHIpLGw9ZnYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gU0Z0KCl7cmV0dXJuIERldCh4TGUpfWZ1bmN0aW9uIE1GdCgpe3JldHVybiBEZXQoYkxlKX1mdW5jdGlvbiBFRnQoKXt2YXIgZT1EZXQod0xlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBURnQ9TSgoKT0+e1B3KCk7TmV0KCk7T2coKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBDRnQsU0xlLE03LEZldD1NKCgpPT57Q0Z0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksU0xlPUNGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvU0xlKSxuPXIqQ0Z0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgTUxlLEFGdCxFTGUsVExlLEU3LEJldD1NKCgpPT57SXcoKTtNTGU9Ljg5MDgxMzA5MTUyOTI4NTIsQUZ0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxFTGU9TWF0aC5zaW4oTWMvMTApKkFGdCxUTGU9LU1hdGguY29zKE1jLzEwKSpBRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpNTGUpLG49RUxlKnIsaT1UTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsQ0xlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksQ0xlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gSUZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBQRnQsTEZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO09nKCk7UEZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24ga0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIFJGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gTkZ0KGUpe3JldHVybiBuZXcgUkZ0KGUpfXZhciBERnQ9TSgoKT0+e05DKCk7T0MoKTtSRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIE9GdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gekZ0KGUpe3JldHVybiBuZXcgT0Z0KGUpfXZhciBGRnQ9TSgoKT0+e09DKCk7T0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gQkZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgSEZ0LFZGdD1NKCgpPT57T0MoKTtCRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgQkZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgVUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtVRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIHFGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtxRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIEdGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gV0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFlGdCxrNz1NKCgpPT57SXcoKTt6QygpO1dGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07WUZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgV0Z0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBqRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgWEZ0LCRGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO2pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gS0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFpGdCxKRnQ9TSgoKT0+e1lldCgpO2s3KCk7S0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IEtGdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gUUZ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB0QnQoZSl7cmV0dXJuIG5ldyBRRnQoZSl9dmFyIGVCdD1NKCgpPT57TkMoKTtRRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIHJCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gbkJ0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKHJCdChvKStyQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBpQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIG9CdChlKXt0aGlzLl9jb250ZXh0PW5ldyBhQnQoZSl9ZnVuY3Rpb24gYUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBzQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBsQnQoZSl7cmV0dXJuIG5ldyBvQnQoZSl9dmFyIGNCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGlCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsaUJ0KHRoaXMscj1uQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9bkJ0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KG9CdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07YUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gaEJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB1QnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBoQnQoZSl9dmFyIHBCdD1NKCgpPT57aEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPXVCdChlKSxpPXVCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24gZEJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gbUJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBfQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIEFMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHlCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1BTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIHZCdD1NKCgpPT57TmV0KCk7T2coKTtGdygpO0J3KCl9KTtmdW5jdGlvbiB4QnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIGJCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIHdCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBTQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1CdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBFQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBUQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBDQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24gQUJ0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFBCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIElCdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgTEJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBrQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgUkJ0PU0oKCk9PntCdygpfSk7dmFyIE5CdD1NKCgpPT57cEZ0KCk7QWV0KCk7eDcoKTt4RnQoKTt3RnQoKTtMZXQoKTtSZXQoKTtURnQoKTtMRnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtERnQoKTtGRnQoKTtPQygpO1ZGdCgpO1dldCgpO1lldCgpO3pDKCk7JEZ0KCk7SkZ0KCk7azcoKTtlQnQoKTtMQygpO2NCdCgpO3BCdCgpO19CdCgpO3ZCdCgpO2JCdCgpO1NCdCgpO0Z3KCk7RUJ0KCk7Q0J0KCk7TzcoKTtQQnQoKTtMQnQoKTtCdygpO1JCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQsZmE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxEQnQ9TSgoKT0+e2ZhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLFBzLGJmLEY3LEI3LHdmPU0oKCk9PntCQz0xZTMsUHM9NmU0LGJmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIE9CdCxRZXQsdHJ0LHpCdD1NKCgpPT57ZmEoKTt3ZigpO09CdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9T0J0LHRydD1PQnQucmFuZ2V9KTt2YXIgRkJ0LEJCdCxIQnQsVkJ0PU0oKCk9PntmYSgpO3dmKCk7RkJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvUHMpKlBzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLEJCdD1GQnQsSEJ0PUZCdC5yYW5nZX0pO3ZhciBVQnQscUJ0LEdCdCxXQnQ9TSgoKT0+e2ZhKCk7d2YoKTtVQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKlBzJWJmO3Q8MCYmKHQrPWJmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvYmYpKmJmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e2ZhKCk7d2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUHMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO2Z1bmN0aW9uIHB2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsS0J0LFpCdCxKQnQsUUJ0LHRIdCxlSHQsckh0PU0oKCk9PntmYSgpO3dmKCk7SDc9cHYoMCksZXJ0PXB2KDEpLHJydD1wdigyKSxucnQ9cHYoMyksaXJ0PXB2KDQpLG9ydD1wdig1KSxhcnQ9cHYoNiksc3J0PUg3LnJhbmdlLEtCdD1lcnQucmFuZ2UsWkJ0PXJydC5yYW5nZSxKQnQ9bnJ0LnJhbmdlLFFCdD1pcnQucmFuZ2UsdEh0PW9ydC5yYW5nZSxlSHQ9YXJ0LnJhbmdlfSk7dmFyIG5IdCxpSHQsb0h0LGFIdD1NKCgpPT57ZmEoKTtuSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksaUh0PW5IdCxvSHQ9bkh0LnJhbmdlfSk7dmFyIGxydCxzSHQsbEh0LGNIdD1NKCgpPT57ZmEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtzSHQ9bHJ0LGxIdD1scnQucmFuZ2V9KTt2YXIgdUh0LGhIdCxmSHQscEh0PU0oKCk9PntmYSgpO3dmKCk7dUh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KlBzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Qc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksaEh0PXVIdCxmSHQ9dUh0LnJhbmdlfSk7dmFyIGRIdCxtSHQsZ0h0LF9IdD1NKCgpPT57ZmEoKTt3ZigpO2RIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLG1IdD1kSHQsZ0h0PWRIdC5yYW5nZX0pO3ZhciB5SHQsdkh0LHhIdCxiSHQ9TSgoKT0+e2ZhKCk7d2YoKTt5SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksdkh0PXlIdCx4SHQ9eUh0LnJhbmdlfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LHdIdCxTSHQsTUh0LEVIdCxUSHQsQ0h0LEFIdD1NKCgpPT57ZmEoKTt3ZigpO1Y3PWR2KDApLGNydD1kdigxKSx1cnQ9ZHYoMiksaHJ0PWR2KDMpLGZydD1kdig0KSxwcnQ9ZHYoNSksZHJ0PWR2KDYpLG1ydD1WNy5yYW5nZSx3SHQ9Y3J0LnJhbmdlLFNIdD11cnQucmFuZ2UsTUh0PWhydC5yYW5nZSxFSHQ9ZnJ0LnJhbmdlLFRIdD1wcnQucmFuZ2UsQ0h0PWRydC5yYW5nZX0pO3ZhciBQSHQsSUh0LExIdCxrSHQ9TSgoKT0+e2ZhKCk7UEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLElIdD1QSHQsTEh0PVBIdC5yYW5nZX0pO3ZhciBncnQsUkh0LE5IdCxESHQ9TSgoKT0+e2ZhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07Ukh0PWdydCxOSHQ9Z3J0LnJhbmdlfSk7dmFyIE9IdD1NKCgpPT57ZmEoKTtEQnQoKTt6QnQoKTtWQnQoKTtXQnQoKTskQnQoKTtySHQoKTthSHQoKTtjSHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtBSHQoKTtrSHQoKTtESHQoKX0pO2Z1bmN0aW9uIHBhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHBhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsbXY9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgekh0LFc3LFBMZSxGSHQ9TSgoKT0+e212KCk7SEMoKTt6SHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PXpIdCxQTGU9ekh0LnJhbmdlfSk7ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LEJIdCxISHQsVncsVkh0LFVIdCxxSHQsSUxlLExMZSxrTGUsUkxlLE5MZSxETGUsR0h0PU0oKCk9PnttdigpO0hDKCk7VkM9Z3YoMCksSHc9Z3YoMSksQkh0PWd2KDIpLEhIdD1ndigzKSxWdz1ndig0KSxWSHQ9Z3YoNSksVUh0PWd2KDYpLHFIdD1WQy5yYW5nZSxJTGU9SHcucmFuZ2UsTExlPUJIdC5yYW5nZSxrTGU9SEh0LnJhbmdlLFJMZT1Wdy5yYW5nZSxOTGU9Vkh0LnJhbmdlLERMZT1VSHQucmFuZ2V9KTt2YXIgdnJ0LF92LE9MZSxXSHQ9TSgoKT0+e212KCk7dnJ0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpwYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07X3Y9dnJ0LE9MZT12cnQucmFuZ2V9KTt2YXIgWUh0LFk3LHpMZSxqSHQ9TSgoKT0+e212KCk7SEMoKTtZSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9WUh0LHpMZT1ZSHQucmFuZ2V9KTtmdW5jdGlvbiB5dihlKXtyZXR1cm4gcGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxYSHQsJEh0LHF3LEtIdCxaSHQsSkh0LEZMZSxCTGUsSExlLFZMZSxVTGUscUxlLFFIdD1NKCgpPT57bXYoKTtIQygpO1VDPXl2KDApLFV3PXl2KDEpLFhIdD15digyKSwkSHQ9eXYoMykscXc9eXYoNCksS0h0PXl2KDUpLFpIdD15dig2KSxKSHQ9VUMucmFuZ2UsRkxlPVV3LnJhbmdlLEJMZT1YSHQucmFuZ2UsSExlPSRIdC5yYW5nZSxWTGU9cXcucmFuZ2UsVUxlPUtIdC5yYW5nZSxxTGU9Wkh0LnJhbmdlfSk7dmFyIHhydCx2dixHTGUsdFZ0PU0oKCk9PnttdigpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3Z2PXhydCxHTGU9eHJ0LnJhbmdlfSk7dmFyIGVWdD1NKCgpPT57Rkh0KCk7R0h0KCk7V0h0KCk7akh0KCk7UUh0KCk7dFZ0KCl9KTtmdW5jdGlvbiBXTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOm9WdCxlOm9WdCxmOm1rZSxIOmZrZSxJOnBrZSxqOmRrZSxMOnVWdCxtOmdrZSxNOl9rZSxwOnN0LFE6bFZ0LHM6Y1Z0LFM6eWtlLHU6dmtlLFU6eGtlLFY6YmtlLHc6d2tlLFc6U2tlLHg6bnVsbCxYOm51bGwseTpNa2UsWTpFa2UsWjpUa2UsIiUiOnNWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDphVnQsZTphVnQsZjpJa2UsSDpDa2UsSTpBa2UsajpQa2UsTDpoVnQsbTpMa2UsTTpra2UscDpLdCxROmxWdCxzOmNWdCxTOlJrZSx1Ok5rZSxVOkRrZSxWOk9rZSx3OnprZSxXOkZrZSx4Om51bGwsWDpudWxsLHk6QmtlLFk6SGtlLFo6VmtlLCIlIjpzVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpuVnQsZTpuVnQsZjpsa2UsSDppVnQsSTppVnQsajppa2UsTDpza2UsbTpua2UsTTpva2UscDpELFE6dWtlLHM6aGtlLFM6YWtlLHU6S0xlLFU6WkxlLFY6SkxlLHc6JExlLFc6UUxlLHg6eixYOlUseTpla2UsWTp0a2UsWjpya2UsIiUiOmNrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PXJWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiByVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsV0xlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBYTGUoZSl7cmV0dXJuIGUucmVwbGFjZShqTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoWExlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gJExlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSkxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBva2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2tlKGUsdCxyKXt2YXIgbj1ZTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiB1a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZmtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIHBrZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gZGtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoX3YoZSksZSksdCwzKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIG1rZShlLHQpe3JldHVybiB1VnQoZSx0KSsiMDAwIn1mdW5jdGlvbiBna2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBfa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB5a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB2a2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIHhrZShlLHQpe3JldHVybiBnbihWQy5jb3VudChfdihlKSxlKSx0LDIpfWZ1bmN0aW9uIGJrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudChfdihlKSxlKSsoX3YoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHdrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBTa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoX3YoZSksZSksdCwyKX1mdW5jdGlvbiBNa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gVGtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiBhVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gQWtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBQa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh2dihlKSxlKSx0LDMpfWZ1bmN0aW9uIGhWdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gSWtlKGUsdCl7cmV0dXJuIGhWdChlLHQpKyIwMDAifWZ1bmN0aW9uIExrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGtrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIFJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIE5rZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gRGtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHZ2KGUpLGUpLHQsMil9ZnVuY3Rpb24gT2tlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHZ2KGUpLGUpKyh2dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gemtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIEZrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh2dihlKSxlKSx0LDIpfWZ1bmN0aW9uIEJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBWa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHNWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBsVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gY1Z0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIHJWdCxWbyxZTGUsakxlLGJydD1NKCgpPT57ZVZ0KCk7clZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxZTGU9L14lLyxqTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFVrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQscWtlLGZWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO3FrZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Va2U6akMoTXJ0KSxmVnQ9cWtlfSk7ZnVuY3Rpb24gR2tlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFdrZSxwVnQsZFZ0PU0oKCk9PntFcnQoKTskNygpO1drZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP0drZTpYQyhNcnQpLHBWdD1Xa2V9KTt2YXIgbVZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO2RWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4geHZ8fCh5VnQoWWtlKSx4dj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gWWtlKCl7eHY9MH1mdW5jdGlvbiBidigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9eHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIGdWdCgpe3h2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLFhrZSgpLHh2PTB9fWZ1bmN0aW9uIGprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0Pl9WdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIFhrZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS14djt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoZ1Z0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoamtlLF9WdCkpLFd3PTEseVZ0KGdWdCkpfX12YXIgV3csS0MsJEMsX1Z0LEs3LFpDLFo3LHh2LEo3LEpDLHlWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsX1Z0PTFlMyxaNz0wLHh2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx5VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07YnYucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJ2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gdlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgeFZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gYlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnYsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciB3VnQ9TSgoKT0+e1E3KCl9KTt2YXIgU1Z0PU0oKCk9PntRNygpO3hWdCgpO3dWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBsZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiAka2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIEtrZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1sZChlKTtyZXR1cm4odC5sb2NhbD9La2U6JGtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gWmtlKCl7fWZ1bmN0aW9uIHd2KGUpe3JldHVybiBlPT1udWxsP1prZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gTVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13dihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIEVWdD1NKCgpPT57U2YoKTtueigpfSk7ZnVuY3Rpb24gSmtlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/SmtlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gVFZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgQ1Z0PU0oKCk9PntTZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUFZ0PU0oKCk9PntTZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7U2YoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gTFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIga1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRa2UoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB0OGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1SVnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1SVnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBOVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3Q4ZTpRa2Usbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1MVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgUlZ0LERWdD1NKCgpPT57U2YoKTtEcnQoKTtrVnQoKTtSVnQ9IiQifSk7ZnVuY3Rpb24gT1Z0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgelZ0PU0oKCk9PntOcnQoKTtTZigpfSk7ZnVuY3Rpb24gRlZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBCVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEhWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntTZigpfSk7ZnVuY3Rpb24gVVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgcVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHVnQoZSl7ZXx8KGU9ZThlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBlOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFdWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIFlWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgJFZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLVnQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBaVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpWdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIFFWdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gcjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBuOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBpOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gYThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBzOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gaVV0KGUsdCl7dmFyIHI9bGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP244ZTpyOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9zOGU6YThlOnIubG9jYWw/bzhlOmk4ZSkocix0KSl9dmFyIG9VdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gYzhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gdThlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIGFVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/bDhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3U4ZTpjOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpCZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gaDhlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBmOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHA4ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBzVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9oOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/cDhlOmY4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGxVdD1NKCgpPT57fSk7ZnVuY3Rpb24gY1V0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgdVV0KGUpfWZ1bmN0aW9uIHVVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9Y1V0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaFV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGZVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBkOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aFV0KHRoaXMsZSl9fWZ1bmN0aW9uIG04ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtmVXQodGhpcyxlKX19ZnVuY3Rpb24gZzhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP2hVdDpmVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIHBVdChlLHQpe3ZhciByPWNVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZzhlOnQ/ZDhlOm04ZSkocix0KSl9dmFyIGRVdD1NKCgpPT57dVV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIF84ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24geThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gdjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBtVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/XzhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj92OGU6eThlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIGdVdD1NKCgpPT57fSk7ZnVuY3Rpb24geDhlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gYjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIHc4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIF9VdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD94OGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3c4ZTpiOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHlVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIHZVdCgpe3JldHVybiB0aGlzLmVhY2goUzhlKX12YXIgeFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBNOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBiVXQoKXtyZXR1cm4gdGhpcy5lYWNoKE04ZSl9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gU1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE1VdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBFOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBFVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9FOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp3dih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIFRVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIFQ4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIENVdCgpe3JldHVybiB0aGlzLmVhY2goVDhlKX12YXIgQVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEE4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUFV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0E4ZTpDOGUpfXZhciBJVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIExVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIGtVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUDhlKGUsdCxyKXtyZXR1cm4gZT1EVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gRFV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIEk4ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gTDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGs4ZShlLHQscil7dmFyIG49TlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UDhlOkRVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBPVXQoZSx0LHIpe3ZhciBuPUk4ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/azhlOkw4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgTlV0LEJydCxSVXQselV0PU0oKCk9PntOVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFJVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBSVXR8fChOVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gRlV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBSOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRlV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gTjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBCVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9OOGU6UjhlKShlLHQpKX12YXIgSFV0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFZVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxEOGUpfXZhciBEOGUsY2QsU2Y9TSgoKT0+e0VWdCgpO0NWdCgpO1BWdCgpO0RWdCgpO0RydCgpO3pWdCgpO0JWdCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3pydCgpO2xVdCgpO2RVdCgpO2dVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO3pVdCgpO0hVdCgpO0Q4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVZVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpNVnQsc2VsZWN0QWxsOlRWdCxmaWx0ZXI6QVZ0LGRhdGE6TlZ0LGVudGVyOklWdCxleGl0Ok9WdCxqb2luOkZWdCxtZXJnZTpIVnQsb3JkZXI6VVZ0LHNvcnQ6R1Z0LGNhbGw6WVZ0LG5vZGVzOlhWdCxub2RlOktWdCxzaXplOkpWdCxlbXB0eTp0VXQsZWFjaDpyVXQsYXR0cjppVXQsc3R5bGU6YVV0LHByb3BlcnR5OnNVdCxjbGFzc2VkOnBVdCx0ZXh0Om1VdCxodG1sOl9VdCxyYWlzZTp2VXQsbG93ZXI6YlV0LGFwcGVuZDpTVXQsaW5zZXJ0OkVVdCxyZW1vdmU6Q1V0LGNsb25lOlBVdCxkYXR1bTpMVXQsb246T1V0LGRpc3BhdGNoOkJVdH07Y2Q9VlV0fSk7dmFyIE1mPU0oKCk9PntScnQoKTtleigpO1NmKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIHFVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBGOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBVVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPU84ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIE84ZSxIcnQsR1V0PU0oKCk9PntPOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPXFVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49ejhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9RjhlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1VVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1VVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9cVV0fSk7dmFyIFdVdD1NKCgpPT57R1V0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBTdnx8KFhVdChCOGUpLFN2PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBCOGUoKXtTdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gJFV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PVN2LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBZVXQoKXtTdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5eyRVdCgpfWZpbmFsbHl7anc9MCxWOGUoKSxTdj0wfX1mdW5jdGlvbiBIOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5qVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBWOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtU3Y7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KFlVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEg4ZSxqVXQpKSxqdz0xLFhVdChZVXQpKX19dmFyIGp3LG5BLHJBLGpVdCxzeixpQSxseixTdixjeixvQSxYVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxqVXQ9MWUzLGx6PTAsU3Y9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFhVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgS1V0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO0tVdCgpfSk7ZnVuY3Rpb24gSGcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtHOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlU4ZSx0d2VlbjpxOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6SlV0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+SlV0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBHOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1aVXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1aVXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBVOGUscThlLEpVdCxmeixsQSxHcnQsWlV0LHB6LHNBLEFjPU0oKCk9PntXVXQoKTtxcnQoKTtVOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLHE4ZT1bXSxKVXQ9MCxmej0xLGxBPTIsR3J0PTMsWlV0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gUVV0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIHRxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBlcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIG5xdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEo4ZSgpe3JldHVybiBjcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gaXF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9VzhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/b3F0KHQpOnI9PT0zP25ldyBtbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1ZOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0sdFsyXSx0WzNdLDEpOih0PWo4ZS5leGVjKGUpKT9uZXcgbWwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9WDhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PSQ4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1LOGUuZXhlYyhlKSk/bHF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9WjhlLmV4ZWMoZSkpP2xxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOnJxdC5oYXNPd25Qcm9wZXJ0eShlKT9vcXQocnF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgbWwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBvcXQoZSl7cmV0dXJuIG5ldyBtbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBtbChlLHQscixuKX1mdW5jdGlvbiBROGUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VmcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgbWwoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IG1sfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ROGUoZSk6bmV3IG1sKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBtbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gYXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIHNxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gbHF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgRWYoZSx0LHIsbil9ZnVuY3Rpb24gY3F0KGUpe2lmKGUgaW5zdGFuY2VvZiBFZilyZXR1cm4gbmV3IEVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1WZyhlKSksIWUpcmV0dXJuIG5ldyBFZjtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgRWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiB1cXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2NxdChlKTpuZXcgRWYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEVmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLFRmLFc4ZSxZOGUsajhlLFg4ZSwkOGUsSzhlLFo4ZSxycXQsaHF0PU0oKCk9PntlcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixUZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsVzhlPS9eIyhbMC05YS1mXXszLDh9KSQvLFk4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksajhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tUZixUZixUZl0rIlxcKSQiKSxYOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSwkOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUZixUZixUZixoQV0rIlxcKSQiKSxLOGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLFRmLFRmXSsiXFwpJCIpLFo4ZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLFRmLFRmLGhBXSsiXFwpJCIpLHJxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxWZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpucXQsZm9ybWF0SGV4Om5xdCxmb3JtYXRIc2w6SjhlLGZvcm1hdFJnYjppcXQsdG9TdHJpbmc6aXF0fSk7bXoobWwsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBtbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDphcXQsZm9ybWF0SGV4OmFxdCxmb3JtYXRSZ2I6c3F0LHRvU3RyaW5nOnNxdH0pKTtteihFZix1cXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IG1sKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e2hxdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZnF0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgZHF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG1xdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gZVJlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gZ3F0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/ZVJlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dFJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIF9xdD1NKCgpPT57bXF0KCl9KTtmdW5jdGlvbiB5cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosclJlLG5SZSx2cXQ9TSgoKT0+eyRydCgpO1pydCgpO2RxdCgpO19xdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z3F0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO3JSZT15cXQoZnF0KSxuUmU9eXF0KHBxdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGlSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gb1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP29SZShsWzBdLngpOmlSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCx4cXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqYnF0LHNrZXdYOk1hdGguYXRhbihsKSpicXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBicXQsYnosd3F0PU0oKCk9PnticXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBNcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxTcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9U3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIEVxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsU3F0LHd6LFRxdD1NKCgpPT57d3F0KCl9KTtmdW5jdGlvbiBDcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsQXF0PU0oKCk9Pnt4eigpO1RxdCgpO2ludD1DcXQoTXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1DcXQoRXF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7eHF0KCk7QXF0KCk7dnF0KCl9KTtmdW5jdGlvbiBhUmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBzUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFBxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2FSZTpzUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVmc/dno6KHI9VmcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gbFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBjUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiB1UmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZlJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBwUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gSXF0KGUsdCl7dmFyIHI9bGQoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP3BSZTpmUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9jUmU6bFJlKShyKTooci5sb2NhbD9oUmU6dVJlKShyLG4sdCsiIikpfXZhciBMcXQ9TSgoKT0+e1N6KCk7TWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24gZFJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gbVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBrcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWxkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/ZFJlOm1SZSkobix0KSl9dmFyIFJxdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIGdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBfUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/Z1JlOl9SZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIERxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHlSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB2UmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gT3F0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eVJlOnZSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIHpxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh4UmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgQnF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gSHF0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBWcXQ9TSgoKT0+e01mKCk7dWQoKX0pO2Z1bmN0aW9uIFVxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBxcXQ9TSgoKT0+e3VkKCl9KTtmdW5jdGlvbiBiUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiB3UmUoZSx0LHIpe3ZhciBuLGksbz1iUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gR3F0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2god1JlKHIsZSx0KSl9dmFyIFdxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIFNSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gWXF0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLFNSZSh0aGlzLl9pZCkpfXZhciBqcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXd2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsSGcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciAkcXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gS3F0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZIZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBacXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gSnF0KCl7cmV0dXJuIG5ldyBNUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBNUmUsUXF0PU0oKCk9PntNZigpO01SZT1jZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBFUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gVFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIENSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gQVJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gdEd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsRVJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLFRSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/QVJlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkNSZShlLG4sdCsiIikscil9dmFyIGVHdD1NKCgpPT57U3ooKTtNZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBQUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIHJHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBuR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIElSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBpR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xSZShadyh0aGlzLCJ0ZXh0IixlKSk6SVJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBvR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiBhR3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7SGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgc0d0PU0oKCk9Pnt1ZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIGNkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisra1JlfXZhciBrUmUsSncsdWQ9TSgoKT0+e01mKCk7THF0KCk7UnF0KCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7ZEEoKTtrUmU9MDtKdz1jZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OlhxdCxzZWxlY3RBbGw6S3F0LGZpbHRlcjpIcXQsbWVyZ2U6VXF0LHNlbGVjdGlvbjpKcXQsdHJhbnNpdGlvbjphR3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOkdxdCxhdHRyOklxdCxhdHRyVHdlZW46a3F0LHN0eWxlOnRHdCxzdHlsZVR3ZWVuOnJHdCx0ZXh0OmlHdCxyZW1vdmU6WXF0LHR3ZWVuOlBxdCxkZWxheTpOcXQsZHVyYXRpb246T3F0LGVhc2U6RnF0fX0pO2Z1bmN0aW9uIFJSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBsR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkhnKGwsZSx0LGMsYSxyfHxSUmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LGNHdD1NKCgpPT57dWQoKTtBYygpO0lfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgdUd0PU0oKCk9PntNZigpO3RxdCgpO2NHdCgpO2NkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9UVV0O2NkLnByb3RvdHlwZS50cmFuc2l0aW9uPWxHdH0pO2Z1bmN0aW9uIGhHdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxOUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIE5SZSxmR3Q9TSgoKT0+e3VkKCk7QWMoKTtOUmU9W251bGxdfSk7dmFyIHBHdD1NKCgpPT57dUd0KCk7dWQoKTtmR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGRHdD1NKCgpPT57fSk7ZnVuY3Rpb24gbUd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGdHdChlKXtyZXR1cm4gZVsxXX12YXIgX0d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24geUd0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT15R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz15R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxaYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBEUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIE9SZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiB2R3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFPUmUobz1Bb1tpXSxlLHQscixuKXx8IURSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIHhHdChlKXtyZXR1cm4gWmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIHpSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gRlJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBiR3QoKXtmb3IodmFyIGU9MCx0PVphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9WmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT16UmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gd0d0KGUsdCxyLG4pe3ZhciBpPVphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1GUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9WmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1aYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gQlJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE12KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1NR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1TR3QucG9wKCl8fG5ldyBCUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBFdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksU0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIFNHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtTR3Q9W119KTtmdW5jdGlvbiBIUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRUd0KGUpe3ZhciB0PVRHdC5wb3AoKXx8bmV3IEhSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7RXYoZSksVHYucmVtb3ZlKGUpLFRHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIENHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksRXYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksRXYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE12KGwpLE12KGMpfWZ1bmN0aW9uIEFHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPVR2Ll87czspaWYobz1QR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtVlJlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9eEd0KGUpO3ZhciBsPUVHdChlKTtpZihUdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtFdihuKSxpPUVHdChuLnNpdGUpLFR2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksTXYobiksTXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufUV2KG4pLEV2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxNdihuKSxNdihpKX19ZnVuY3Rpb24gUEd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gVlJlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFBHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIFRHdCxJR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO1RHdD1bXX0pO2Z1bmN0aW9uIFVSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24gcVJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KHFSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLFphPW5ldyBBcnJheShlLmxlbmd0aCksVHY9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihBR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylDR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoYkd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dkd0KGEscyxsLGMpLHdHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9WmEsVHY9blM9QW89WmE9bnVsbH12YXIgV3IsTUd0LFR2LFphLG5TLEFvLHJTPU0oKCk9PntJR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixNR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZVUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBMR3QoKXt2YXIgZT1tR3QsdD1nR3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIGtHdD1NKCgpPT57ZEd0KCk7X0d0KCk7clMoKX0pO3ZhciBSR3Q9TSgoKT0+e2tHdCgpfSk7ZnVuY3Rpb24gREd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIFdSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFlSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIE5HdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09R1JlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgR1JlLHZBLE9HdD1NKCgpPT57R1JlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1ER3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPVdSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVlSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Tkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Tkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9REd0fSk7dmFyIG1udD1NKCgpPT57T0d0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGhkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIGpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gWFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWhkKGUpO3JldHVybih0LmxvY2FsP1hSZTpqUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiAkUmUoKXt9ZnVuY3Rpb24gQ3YoZSl7cmV0dXJuIGU9PW51bGw/JFJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiB6R3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUN2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgRkd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiBLUmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD9LUmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBCR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBIR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBVR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBHR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBXR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFpSZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIEpSZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVlHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVlHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIGpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/SlJlOlpSZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUdHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBZR3QsWEd0PU0oKCk9PntPdSgpO3dudCgpO1dHdCgpO1lHdD0iJCJ9KTtmdW5jdGlvbiAkR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciBLR3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBaR3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIEpHdD1NKCgpPT57fSk7ZnVuY3Rpb24gUUd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBlV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciByV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG5XdChlKXtlfHwoZT1RUmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFFSZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgaVd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gb1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBsV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIHVXdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHJOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBpTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIG9OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBfV3QoZSx0KXt2YXIgcj1oZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/ZU5lOnROZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP29OZTppTmU6ci5sb2NhbD9uTmU6ck5lKShyLHQpKX12YXIgeVd0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBzTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBsTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gdld0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9hTmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/bE5lOnNOZSkoZSx0LHI9PW51bGw/IiI6cikpOlVnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBjTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHVOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gaE5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHhXdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP2NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9oTmU6dU5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgYld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3V3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBTV3QoZSl9ZnVuY3Rpb24gU1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz13V3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBNV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gRVd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtNV3QodGhpcyxlKX19ZnVuY3Rpb24gcE5lKGUpe3JldHVybiBmdW5jdGlvbigpe0VXdCh0aGlzLGUpfX1mdW5jdGlvbiBkTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TVd0OkVXdCkodGhpcyxlKX19ZnVuY3Rpb24gVFd0KGUsdCl7dmFyIHI9d1d0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9kTmU6dD9mTmU6cE5lKShyLHQpKX12YXIgQ1d0PU0oKCk9PntTV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gbU5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBnTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBfTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEFXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9tTmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP19OZTpnTmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB2TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24geE5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gSVd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3lOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/eE5lOnZOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24ga1d0KCl7cmV0dXJuIHRoaXMuZWFjaChiTmUpfXZhciBSV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdOZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE5XdCgpe3JldHVybiB0aGlzLmVhY2god05lKX12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgeld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIFNOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEZXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP1NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkN2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgQld0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gTU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSFd0KCl7cmV0dXJuIHRoaXMuZWFjaChNTmUpfXZhciBWV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEVOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVE5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBVV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/VE5lOkVOZSl9dmFyIHFXdD1NKCgpPT57fSk7ZnVuY3Rpb24gR1d0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgV1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDTmUoZSx0LHIpe3JldHVybiBlPVhXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBYV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24gQU5lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBQTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSU5lKGUsdCxyKXt2YXIgbj1qV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9DTmU6WFd0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uICRXdChlLHQscil7dmFyIG49QU5lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9JTmU6UE5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgald0LFlyLFlXdCx6ej1NKCgpPT57ald0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFlXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBZV3R8fChqV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gS1d0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBMTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS1d0KHRoaXMsZSx0KX19ZnVuY3Rpb24ga05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtXdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBaV3QoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9rTmU6TE5lKShlLHQpKX12YXIgSld0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFFXdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQsZmQsT3U9TSgoKT0+e0ZHdCgpO0hHdCgpO1VHdCgpO1hHdCgpO3dudCgpO0tHdCgpO0pHdCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO01udCgpO2JXdCgpO0NXdCgpO1BXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO3p6KCk7Sld0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9UVd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OnpHdCxzZWxlY3RBbGw6Qkd0LGZpbHRlcjpWR3QsZGF0YTpqR3QsZW50ZXI6cUd0LGV4aXQ6JEd0LGpvaW46Wkd0LG1lcmdlOlFHdCxvcmRlcjplV3Qsc29ydDpuV3QsY2FsbDpvV3Qsbm9kZXM6c1d0LG5vZGU6Y1d0LHNpemU6aFd0LGVtcHR5OnBXdCxlYWNoOm1XdCxhdHRyOl9XdCxzdHlsZTp2V3QscHJvcGVydHk6eFd0LGNsYXNzZWQ6VFd0LHRleHQ6QVd0LGh0bWw6SVd0LHJhaXNlOmtXdCxsb3dlcjpOV3QsYXBwZW5kOk9XdCxpbnNlcnQ6Rld0LHJlbW92ZTpIV3QsY2xvbmU6VVd0LGRhdHVtOkdXdCxvbjokV3QsZGlzcGF0Y2g6Wld0fTtmZD1RV3R9KTtmdW5jdGlvbiBwZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIHRZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgZVl0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIHJZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgSXM9TSgoKT0+e3hudCgpO2VZdCgpO2t6KCk7dFl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO3JZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIG5ZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGlZdD1NKCgpPT57SXMoKTtuWXQoKX0pO3ZhciBvWXQ9TSgoKT0+e2lZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgYVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBsWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBITmUoKXtyZXR1cm4gZFl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGNZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVJOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P3VZdCh0KTpyPT09Mz9uZXcgZ2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Tk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdLHRbMl0sdFszXSwxKToodD1ETmUuZXhlYyhlKSk/bmV3IGdsKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PU9OZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD16TmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9Rk5lLmV4ZWMoZSkpP3BZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PUJOZS5leGVjKGUpKT9wWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpzWXQuaGFzT3duUHJvcGVydHkoZSk/dVl0KHNZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IGdsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdVl0KGUpe3JldHVybiBuZXcgZ2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgZ2woZSx0LHIsbil9ZnVuY3Rpb24gVk5lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPXFnKGUpKSxlPyhlPWUucmdiKCksbmV3IGdsKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBnbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Vk5lKGUpOm5ldyBnbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGhZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBmWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHBZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IENmKGUsdCxyLG4pfWZ1bmN0aW9uIGRZdChlKXtpZihlIGluc3RhbmNlb2YgQ2YpcmV0dXJuIG5ldyBDZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9cWcoZSkpLCFlKXJldHVybiBuZXcgQ2Y7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IENmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gbVl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kWXQoZSk6bmV3IENmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBDZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxBZixSTmUsTk5lLEROZSxPTmUsek5lLEZOZSxCTmUsc1l0LGdZdD1NKCgpPT57YVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQWY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFJOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxOTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEROZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbQWYsQWYsQWZdKyJcXCkkIiksT05lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksek5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQWYsQWYsQWYsTUFdKyJcXCkkIiksRk5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxBZixBZl0rIlxcKSQiKSxCTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxBZixBZixNQV0rIlxcKSQiKSxzWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEscWcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6bFl0LGZvcm1hdEhleDpsWXQsZm9ybWF0SHNsOkhOZSxmb3JtYXRSZ2I6Y1l0LHRvU3RyaW5nOmNZdH0pO1V6KGdsLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6aFl0LGZvcm1hdEhleDpoWXQsZm9ybWF0UmdiOmZZdCx0b1N0cmluZzpmWXR9KSk7VXooQ2YsbVl0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBnbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9PntnWXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIF9ZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24geVl0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIHZZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB4WXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHFOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIGJZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3FOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1VOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciB3WXQ9TSgoKT0+e3hZdCgpfSk7ZnVuY3Rpb24gU1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LEdOZSxXTmUsTVl0PU0oKCk9PntEbnQoKTt6bnQoKTt2WXQoKTt3WXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPWJZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtHTmU9U1l0KF9ZdCksV05lPVNZdCh5WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9qTmUobFswXS54KTpZTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsRVl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKlRZdCxza2V3WDpNYXRoLmF0YW4obCkqVFl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgVFl0LFh6LENZdD1NKCgpPT57VFl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUFl0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQVl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPUFZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBJWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LEFZdCwkeixMWXQ9TSgoKT0+e0NZdCgpfSk7ZnVuY3Rpb24ga1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LFJZdD1NKCgpPT57anooKTtMWXQoKTtHbnQ9a1l0KFBZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9a1l0KElZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gRFl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uICROZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBLTmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8WE5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK05ZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLU5ZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1EWXQoXyksQz1pLyhZbnQqcCkqKFMqS05lKENBKmIrXyktJE5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0RZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LE5ZdCxYTmUsT1l0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLE5ZdD00LFhOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtFWXQoKTtSWXQoKTtPWXQoKTtNWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIEF2fHwoQll0KFpOZSksQXY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIFpOZSgpe0F2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBIWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9QXYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIHpZdCgpe0F2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7SFl0KCl9ZmluYWxseXtzUz0wLFFOZSgpLEF2PTB9fWZ1bmN0aW9uIEpOZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PkZZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIFFOZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Bdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoell0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwoSk5lLEZZdCkpLHNTPTEsQll0KHpZdCkpfX12YXIgc1MsSUEsUEEsRll0LEt6LExBLFp6LEF2LEp6LGtBLEJZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLEZZdD0xZTMsWno9MCxBdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQll0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBWWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7Vll0KCl9KTtmdW5jdGlvbiBHZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO3JEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246dERlLHR3ZWVuOmVEZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpxWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5xWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBKYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIHJEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1VWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1VWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIHREZSxlRGUscVl0LFpudCxyRixlRixVWXQsbkYsTkEsTHM9TSgoKT0+e21udCgpO0tudCgpO3REZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxlRGU9W10scVl0PTAsWm50PTEsckY9MixlRj0zLFVZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIFB2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gR1l0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQdih0aGlzLGUpfSl9dmFyIFdZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBuRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUphKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBpRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUphKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFlZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP25EZTppRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgcWc/WXo6KHI9cWcodCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gb0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBhRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBzRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gbERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBjRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiB1RGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGpZdChlLHQpe3ZhciByPWhkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD91RGU6Y0RlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/YURlOm9EZSkocik6KHIubG9jYWw/bERlOnNEZSkocixuLHQpKX12YXIgWFl0PU0oKCk9PntBQSgpO0lzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIGhEZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gcERlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZkRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBkRGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZoRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uICRZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aGQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9wRGU6ZERlKShuLHQpKX12YXIgS1l0PU0oKCk9PntJcygpfSk7ZnVuY3Rpb24gbURlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBaWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9tRGU6Z0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgSll0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gX0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHlEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBRWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9fRGU6eURlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgdGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHZEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciByanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBuanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGlqdD1NKCgpPT57SXMoKTtkZCgpfSk7ZnVuY3Rpb24gb2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBkYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGFqdD1NKCgpPT57ZGQoKX0pO2Z1bmN0aW9uIHhEZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIGJEZShlLHQscil7dmFyIG4saSxvPXhEZSh0KT9EQTpKYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBzanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChiRGUocixlLHQpKX12YXIgbGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gd0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBjanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsd0RlKHRoaXMuX2lkKSl9dmFyIHVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gaGp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Q3YoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgZGEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGZqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBwanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgZGEobyxhLHQscil9dmFyIGRqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBtanQoKXtyZXR1cm4gbmV3IFNEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIFNEZSxnanQ9TSgoKT0+e0lzKCk7U0RlPWZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIE1EZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1VZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksVWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBfanQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gRURlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gVERlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIENEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUphKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1fanQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB5anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxNRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsX2p0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxURGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goQ0RlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxFRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciB2anQ9TSgoKT0+e0FBKCk7SXMoKTtMcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBBRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFBEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYmQURlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIHhqdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBianQ9TSgoKT0+e30pO2Z1bmN0aW9uIElEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB3anQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xEZShjUyh0aGlzLCJ0ZXh0IixlKSk6SURlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBTanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBrRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIFJEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZrRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBNanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LFJEZShlKSl9dmFyIEVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gVGp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO0dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIENqdD1NKCgpPT57ZGQoKTtMcygpfSk7ZnVuY3Rpb24gQWp0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPUphKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFBqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIGZkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrTkRlfXZhciBORGUsdVMsZGQ9TSgoKT0+e0lzKCk7WFl0KCk7S1l0KCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7dmp0KCk7Ymp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7T0EoKTtQanQoKTtORGU9MDt1Uz1mZC5wcm90b3R5cGU7ZGEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRhLHNlbGVjdDpoanQsc2VsZWN0QWxsOnBqdCxmaWx0ZXI6bmp0LG1lcmdlOm9qdCxzZWxlY3Rpb246bWp0LHRyYW5zaXRpb246VGp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpzanQsYXR0cjpqWXQsYXR0clR3ZWVuOiRZdCxzdHlsZTp5anQsc3R5bGVUd2Vlbjp4anQsdGV4dDp3anQsdGV4dFR3ZWVuOk1qdCxyZW1vdmU6Y2p0LHR3ZWVuOllZdCxkZWxheTpaWXQsZHVyYXRpb246UVl0LGVhc2U6ZWp0LGVuZDpBanR9fSk7ZnVuY3Rpb24gRERlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIElqdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBkYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmR2cobCxlLHQsYyxhLHJ8fEREZShsLHQpKTtyZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsTGp0PU0oKCk9PntkZCgpO0xzKCk7SV8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBranQ9TSgoKT0+e0lzKCk7V1l0KCk7TGp0KCk7ZmQucHJvdG90eXBlLmludGVycnVwdD1HWXQ7ZmQucHJvdG90eXBlLnRyYW5zaXRpb249SWp0fSk7dmFyIFJqdD1NKCgpPT57ZGQoKTtMcygpfSk7dmFyIE5qdD1NKCgpPT57a2p0KCk7ZGQoKTtSanQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgT2p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntQZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBQZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFBmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IFBmKDEsMCwwKTthRi5wcm90b3R5cGU9UGYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHpqdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIE9EZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gekRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIEZqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gRkRlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gQkRlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEhEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gQmp0KCl7dmFyIGU9T0RlLHQ9ekRlLHI9SERlLG49RkRlLGk9QkRlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsRmp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsRmp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBQZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IFBmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgUGYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxQdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1wZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLFB2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/cGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOnBkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PXBkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksUHYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEhqdD1NKCgpPT57bW50KCk7b1l0KCk7QUEoKTtJcygpO05qdCgpO0RqdCgpO09qdCgpO25pdCgpO3pqdCgpfSk7dmFyIFZqdD1NKCgpPT57SGp0KCk7bml0KCl9KTt2YXIgTXI9e307S3MoTXIse2FjdGl2ZTooKT0+aEd0LGFyYzooKT0+ZkZ0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PmpNdCxheGlzTGVmdDooKT0+WE10LGF4aXNSaWdodDooKT0+WU10LGF4aXNUb3A6KCk9PldNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9Pm5NdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT5kQ3QsYnJ1c2hTZWxlY3Rpb246KCk9PmhDdCxicnVzaFg6KCk9PmZDdCxicnVzaFk6KCk9PnBDdCxjaG9yZDooKT0+RkN0LGNsaWVudFBvaW50OigpPT5EZyxjbHVzdGVyOigpPT5ITHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+S3p0LGNyZWF0b3I6KCk9Pk5nLGNyb3NzOigpPT5vTXQsY3N2OigpPT5jTnQsY3N2Rm9ybWF0OigpPT5kUHQsY3N2Rm9ybWF0Um93czooKT0+bVB0LGNzdlBhcnNlOigpPT5mUHQsY3N2UGFyc2VSb3dzOigpPT5wUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5rRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+TkZ0LGN1cnZlQmFzaXNPcGVuOigpPT56RnQsY3VydmVCdW5kbGU6KCk9PkhGdCxjdXJ2ZUNhcmRpbmFsOigpPT5VRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+cUZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5HRnQsY3VydmVDYXRtdWxsUm9tOigpPT5ZRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+WkZ0LGN1cnZlTGluZWFyOigpPT5GZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+dEJ0LGN1cnZlTW9ub3RvbmVYOigpPT5zQnQsY3VydmVNb25vdG9uZVk6KCk9PmxCdCxjdXJ2ZU5hdHVyYWw6KCk9PmZCdCxjdXJ2ZVN0ZXA6KCk9PmRCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+Z0J0LGN1cnZlU3RlcEJlZm9yZTooKT0+bUJ0LGN1c3RvbUV2ZW50OigpPT5HenQsZGVzY2VuZGluZzooKT0+c010LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PkFBdCxkcmFnOigpPT5zUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PlhQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+JFB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+V1B0LGVhc2VCb3VuY2VJbk91dDooKT0+WVB0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+VVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+cVB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PkFQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5QUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PlpQdCxlYXNlRWxhc3RpY0luT3V0OigpPT5KUHQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+QlB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+SFB0LGVhc2VMaW5lYXI6KCk9PlNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+TFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5rUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PkVQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+VFB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+T1B0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+elB0LGVudHJpZXM6KCk9PnNBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+ZTZ0LGZvcmNlQ29sbGlkZTooKT0+TjZ0LGZvcmNlTGluazooKT0+cTZ0LGZvcmNlTWFueUJvZHk6KCk9PmlJdCxmb3JjZVJhZGlhbDooKT0+YUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+bkl0LGZvcmNlWDooKT0+bEl0LGZvcmNlWTooKT0+dUl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+THksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9Pm1MdCxnZW9BcmVhOigpPT5GSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5fTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+dkx0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PllJdCxnZW9DZW50cm9pZDooKT0+UUl0LGdlb0NpcmNsZTooKT0+YTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlA5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT5RcCxnZW9Db25pY0NvbmZvcm1hbDooKT0+d0x0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+VXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PkVMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+ejl0LGdlb0Rpc3RhbmNlOigpPT5CeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk1MdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pkd5LGdlb0dub21vbmljOigpPT5DTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9PlY5dCxnZW9JZGVudGl0eTooKT0+UEx0LGdlb0ludGVycG9sYXRlOigpPT5xOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+Ykx0LGdlb01lcmNhdG9yUmF3OigpPT5xeSxnZW9OYXR1cmFsRWFydGgxOigpPT5MTHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT5STHQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5sTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5ETHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PnVMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PnpMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PmdNdCxoc2w6KCk9PlpLLGh0bWw6KCk9PmVOdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5iN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PkI4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnk3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkg4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5EOHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5POHQsaW50ZXJwb2xhdGVIc2w6KCk9Pkk4dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9Pkw4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PlQ3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+RTd0LGludGVycG9sYXRlTnVtYmVyOigpPT5BcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9PkM3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9Pnc3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+aDh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9PmY4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5wOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT53OHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PlM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9Pk03dCxpbnRlcnBvbGF0ZVdhcm06KCk9Png3dCxpbnRlcnBvbGF0ZVpvb206KCk9PkM4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5iVnQsaXNvRm9ybWF0OigpPT5mVnQsaXNvUGFyc2U6KCk9PnBWdCxqc29uOigpPT5uTnQsa2V5czooKT0+bkF0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5TRnQsbGlua1JhZGlhbDooKT0+RUZ0LGxpbmtWZXJ0aWNhbDooKT0+TUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9PmJ5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+d010LG1lYW46KCk9Pk1NdCxtZWRpYW46KCk9PlRNdCxtZXJnZTooKT0+QU10LG1pbjooKT0+bVIsbW91c2U6KCk9PlF6dCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PkpDdCxub3c6KCk9Pll3LHBhY2s6KCk9PndrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT55a3QscGFpcnM6KCk9PmlNdCxwYXJ0aXRpb246KCk9Pk1rdCxwYXRoOigpPT5ZOHQscGVybXV0ZTooKT0+SU10LHBpZTooKT0+dkZ0LHBvaW50UmFkaWFsOigpPT5mdixwb2x5Z29uQXJlYTooKT0+JDh0LHBvbHlnb25DZW50cm9pZDooKT0+Wjh0LHBvbHlnb25Db250YWluczooKT0+aVJ0LHBvbHlnb25IdWxsOigpPT5yUnQscG9seWdvbkxlbmd0aDooKT0+YVJ0LHByZWNpc2lvbkZpeGVkOigpPT5NSXQscHJlY2lzaW9uUHJlZml4OigpPT5USXQscHJlY2lzaW9uUm91bmQ6KCk9PkFJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9PmR5LHF1YW50aXplOigpPT5VOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PktSdCxyYW5kb21FeHBvbmVudGlhbDooKT0+SlJ0LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5YUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5ZUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5ZQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+VU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+ck90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9PnM3dCxzY2FsZVV0YzooKT0+bDd0LHNjYW46KCk9PmtNdCxzY2hlbWVDYXRlZ29yeTEwOigpPT51N3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+Zzd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5mN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9PmQ3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+ZUZ0LHNlbGVjdGlvbjooKT0+JHp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5lQXQsc2h1ZmZsZTooKT0+Tk10LHN0YWNrOigpPT55QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PndCdCxzdGFja09mZnNldEV4cGFuZDooKT0+eEJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5NQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PlRCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+QUJ0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PklCdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9PmtCdCxzdHJhdGlmeTooKT0+QWt0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5PTXQsc3ltYm9sOigpPT5JRnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5QRnQsdGV4dDooKT0+b050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PnlNdCx0aHJlc2hvbGRTY290dDooKT0+eE10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+bU10LHRpbWVEYXk6KCk9PmpCdCx0aW1lRGF5czooKT0+WEJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT50SHQsdGltZUhvdXI6KCk9PnFCdCx0aW1lSG91cnM6KCk9PkdCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5CQnQsdGltZU1pbnV0ZXM6KCk9PkhCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PktCdCx0aW1lTW9udGg6KCk9PmlIdCx0aW1lTW9udGhzOigpPT5vSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+ZUh0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+UUJ0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5aQnQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5KQnQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5zSHQsdGltZVllYXJzOigpPT5sSHQsdGltZW91dDooKT0+dlZ0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5uRnQsdG91Y2hlczooKT0+b0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+SWt0LHRyZWVtYXA6KCk9PmtrdCx0cmVlbWFwQmluYXJ5OigpPT5Oa3QsdHJlZW1hcERpY2U6KCk9PmxmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Ga3QsdHJlZW1hcFNsaWNlOigpPT53Zyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Pa3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9PmhOdCx0c3ZGb3JtYXQ6KCk9PnZQdCx0c3ZGb3JtYXRSb3dzOigpPT54UHQsdHN2UGFyc2U6KCk9Pl9QdCx0c3ZQYXJzZVJvd3M6KCk9PnlQdCx1dGNEYXk6KCk9PnZIdCx1dGNEYXlzOigpPT54SHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5USHQsdXRjSG91cjooKT0+bUh0LHV0Y0hvdXJzOigpPT5nSHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9PmhIdCx1dGNNaW51dGVzOigpPT5mSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+d0h0LHV0Y01vbnRoOigpPT5JSHQsdXRjTW9udGhzOigpPT5MSHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5DSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5FSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5TSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+TUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+Ukh0LHV0Y1llYXJzOigpPT5OSHQsdmFsdWVzOigpPT5vQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PnRNdCx2b3Jvbm9pOigpPT5MR3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PnNOdCx6aXA6KCk9PkZNdCx6b29tOigpPT5CanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57ZU10KCk7SE10KCk7S010KCk7Z0N0KCk7WEN0KCk7Y0F0KCk7RUF0KCk7SUF0KCk7Y1B0KCk7d1B0KCk7dDZ0KCk7Zkl0KCk7SUl0KCk7Qkx0KCk7SGt0KCk7Rzh0KCk7WDh0KCk7bFJ0KCk7SFJ0KCk7V1J0KCk7dE50KCk7cE50KCk7STd0KCk7c0Z0KCk7TkJ0KCk7T0h0KCk7bVZ0KCk7U1Z0KCk7cEd0KCk7Ukd0KCk7Vmp0KCl9KTt2YXIgV2p0PUgoR2p0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVanQ9KEVyKCksVXQoTXIpKSxXZz1VanQscWp0PVVqdDtmdW5jdGlvbiBWRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBVRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBxRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1ZEZTpVRGUpKHRoaXMsZSl9ZnVuY3Rpb24gR0RlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiBXRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIFlEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9HRGU6V0RlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBqRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gWERlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uICREZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/akRlOlhEZSkodGhpcyxlKX1mdW5jdGlvbiBLRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIFpEZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIEpEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/S0RlOlpEZSkodGhpcyxlKX1mdW5jdGlvbiBRRGUoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVdnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gdE9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBlT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/UURlOnRPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1xRGU7V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9WURlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz0kRGU7cWp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPUpEZTtxanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPWVPZX0pO3ZhciBZZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWWp0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gck9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLFlqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gWWp0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9ck9lfSk7dmFyIElmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIG5PZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09bk9lfSk7dmFyIFhqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShJXygpLFV0KER2dCkpLGlPZT1ZZygpLG9PZT1JZigpLGpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPW9PZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgYU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWlPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPWpqdFt0XTtyZXR1cm4gcj09bnVsbD9qanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz1hT2V9KTt2YXIgJGp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzT2U9WWcoKSxsT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1zT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWxPZX0pO3ZhciBMZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtqdD0oZGUoKSxVdChwZSkpO0tqdC5fX2V4cG9ydFN0YXIoWGp0KCksY0YpO0tqdC5fX2V4cG9ydFN0YXIoJGp0KCksY0YpfSk7dmFyIFpqdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgY09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1jT2V9KTt2YXIgSmp0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1T2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz11T2V9KTt2YXIgUWp0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPWhPZX0pO3ZhciB0WHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWZPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihaanQoKSk7aEYoSmp0KCkpO2hGKFFqdCgpKTtoRih0WHQoKSl9KTt2YXIgclh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlWHQ9cFMoKSxwT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPWVYdC5NZXRob2RzLmRlZmF1bHRzKHt9LHBPZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9ZVh0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkT2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RPZShyWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIG1PZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PW1PZX0pO3ZhciBvWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnT2U9RkEoKSxuWHQ9Zml0KCksamc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBuWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoblh0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtqZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1qZzt2YXIgaVh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9amcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9amcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoamcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1qZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qZ09lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPWpnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9amcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7aVh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1pWHR9KTt2YXIgYVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfT2U9RkEoKSx5T2U9IiM0NDQiLHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXlPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpfT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD12T2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQob1h0KCkpO2RpdChhWHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc1h0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtzWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1zWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIHhPZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksYk9lPWZ1bmN0aW9uKGUpe3hPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPWJPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgd09lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU09lPV9pdCgpLE1PZT1mdW5jdGlvbihlKXt3T2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KFNPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9TU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBFT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUT2U9cFMoKSxDT2U9eWl0KCksQU9lPWZ1bmN0aW9uKGUpe0VPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBUT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShDT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIGxYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9X0YoKSxrT2U9dml0KCksUk9lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IElPZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9TE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShrT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj1ST2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShsWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksTk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Tk9lfSk7dmFyIHVYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBET2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPT2U9d2l0KCksY1h0PWZ1bmN0aW9uKGUpe0RPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShPT2UuV3JhcHBlcik7Y1h0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPWNYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2hYdCh1WHQoKSk7aFh0KHdpdCgpKX0pO3ZhciBmWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSx6T2U9eGl0KCksRk9lPVNpdCgpLEJPZT1GQSgpLEhPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgek9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IEZPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBCT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9SE9lfSk7dmFyIF9sPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZlh0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBwWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWT2U9KEVyKCksVXQoTXIpKSxVT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIHFPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9cU9lO2Z1bmN0aW9uIEdPZShlKXt2YXIgdD1WT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9R09lO2Z1bmN0aW9uIFdPZShlKXtyZXR1cm4gVU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj1XT2U7ZnVuY3Rpb24gWU9lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PVlPZX0pO3ZhciBnWHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtWHQ9KEVyKCksVXQoTXIpKSxqT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gWE9lKGUsdCl7dmFyIHI9ZFh0KGUpKy4wNSxuPWRYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PVhPZTtmdW5jdGlvbiAkT2UoZSx0KXt2YXIgcj1tWHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9JE9lO2Z1bmN0aW9uIEtPZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PUtPZTtmdW5jdGlvbiBkWHQoZSl7dmFyIHQ9bVh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOmpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxtYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBaT2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPVpPZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9eVh0O2Z1bmN0aW9uIEpPZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4geVh0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9Sk9lO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBRT2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9UU9lO2Z1bmN0aW9uIHQ3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGtmKHIsIndpZHRoIikra2YociwicGFkZGluZy1sZWZ0Iikra2YociwicGFkZGluZy1yaWdodCIpK2tmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikra2YociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPXQ3ZTtmdW5jdGlvbiBlN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJoZWlnaHQiKStrZihyLCJwYWRkaW5nLXRvcCIpK2tmKHIsInBhZGRpbmctYm90dG9tIikra2YociwiYm9yZGVyLXRvcC13aWR0aCIpK2tmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PWU3ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLHZYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIscjdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK3ZYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxuN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxpN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86Iit2WHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gbzdlKGUpe3ZhciB0PXI3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1vN2U7ZnVuY3Rpb24gYTdlKGUpe3ZhciB0PW43ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9YTdlO2Z1bmN0aW9uIHM3ZShlKXt2YXIgdD1pN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1zN2U7ZnVuY3Rpb24gbDdlKGUsdCl7cmV0dXJuIShtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LmxlZnQpfHxtYS5jZWlsKGUubGVmdCk+PW1hLmZsb29yKHQucmlnaHQpfHxtYS5mbG9vcihlLmJvdHRvbSk8PW1hLmNlaWwodC50b3ApfHxtYS5jZWlsKGUudG9wKT49bWEuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9bDdlO2Z1bmN0aW9uIGM3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PWM3ZTtmdW5jdGlvbiB1N2UoZSx0KXtyZXR1cm4gbWEuZmxvb3IodC5sZWZ0KTw9bWEuY2VpbChlLmxlZnQpJiZtYS5mbG9vcih0LnRvcCk8PW1hLmNlaWwoZS50b3ApJiZtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LnJpZ2h0KSYmbWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPXU3ZTtmdW5jdGlvbiBoN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPV9YdChlKSxvPV9YdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9aDdlO2Z1bmN0aW9uIF9YdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBrZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZjdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mN2U7ZnVuY3Rpb24gcDdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIGc3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPXA3ZTt2YXIgZDdlPS9ebWF0cml4XCgoW14pXSspXCkkLyxtN2U9L1ssIF0rLztmdW5jdGlvbiBnN2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKGQ3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KG03ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSx4WHQ9Q2l0KCksbWQ9d2luZG93Lk1hdGgsXzdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24geTdlKGUsdCxyKXtyZXR1cm4gbWQubWluKHQscik8PWUmJmU8PW1kLm1heCh0LHIpfXNvLmluUmFuZ2U9eTdlO2Z1bmN0aW9uIHY3ZShlLHQscil7cmV0dXJuIG1kLm1pbihtZC5tYXgodCxlKSxyKX1zby5jbGFtcD12N2U7ZnVuY3Rpb24geDdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9eDdlO2Z1bmN0aW9uIGI3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPWI3ZTtmdW5jdGlvbiB3N2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPXc3ZTtmdW5jdGlvbiBTN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49bWQubWF4KG1kLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPU03ZTtmdW5jdGlvbiBFN2UoZSx0KXtyZXR1cm4gbWQucG93KHQueS1lLnksMikrbWQucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUvMzYwKm1kLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1UN2U7ZnVuY3Rpb24gQzdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49QzdlO2Z1bmN0aW9uIEE3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1BN2U7ZnVuY3Rpb24gUDdlKGUpe2Zvcih2YXIgdD14WHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1fN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz14WHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1iWHQocix3WHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVA3ZTtmdW5jdGlvbiBiWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1iWHQ7ZnVuY3Rpb24gSTdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9STdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gd1h0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD13WHQ7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUw3ZX0pO3ZhciBTWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9azdlO3ZhciBSN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj1SN2V9KTt2YXIgSWl0PUgoZ2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTjdlPVNYdCgpLEQ3ZT01LE83ZT1uZXcgTjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsUmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKFJmPWdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZ2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLFJmLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/UmYuUEFTUzpSZi5GQUlMOnM+bz9SZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLFJmLlBBU1MpfX1nZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1nZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIHo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1EN2UpLHI9PT12b2lkIDAmJihyPU83ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsUWEuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSxRYS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1SZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PVJmLlBBU1N8fHM9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO2dkLlJUcmVlPXo3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9UWEudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz1RYS51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKFFhLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7Z2QuUlRyZWVOb2RlPVRGO3ZhciBRYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtnZC5SVHJlZUJvdW5kcz1RYX0pO3ZhciBUWHQ9SChfZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNWHQ9KEVyKCksVXQoTXIpKSxGN2U9T2UoKSxYZz1GZSgpLEI3ZT1JZigpO19kLklTdGFja2luZ09yZGVyPUI3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgRVh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEg3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1NWHQubWFwKCksbz1NWHQubWFwKCksYT1uZXcgWGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyBYZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz1fZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX1fZC5zdGFjaz1IN2U7ZnVuY3Rpb24gVjdlKGUpe3ZhciB0PW5ldyBYZy5NYXAscj1uZXcgWGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPVhnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD1YZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX1fZC5zdGFja2VkRXh0ZW50cz1WN2U7ZnVuY3Rpb24gVTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KF9kLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9WGcuTWF0aC5tYXgobiwwKSxvPVhnLk1hdGgubWluKG4sMCk7cmV0dXJuW0VYdC5taW4obywwKSxFWHQubWF4KDAsaSldfV9kLnN0YWNrZWRFeHRlbnQ9VTdlO19kLm5vcm1hbGl6ZUtleT1GN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcTdlPSRBKCk7ZnVuY3Rpb24gQ1h0KGUpeyFxN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49Q1h0O2Z1bmN0aW9uIEFYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9QVh0O2Z1bmN0aW9uIEc3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1BWHQobyxlKX19Z1MuZGVib3VuY2U9RzdlO2Z1bmN0aW9uIFc3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLENYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9VzdlfSk7dmFyIFBYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9WTdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9ajdlfSk7dmFyIElYdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWDdlPShkZSgpLFV0KHBlKSksJDdlPVJpdCgpLEs3ZT1mdW5jdGlvbihlKXtYN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oJDdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PUs3ZX0pO3ZhciBMWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRnPUlpdCgpLFo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgJGcuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPSRnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7JGcuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1aN2V9KTt2YXIga1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKN2U9QWl0KCksUTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihKN2UuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9UTdlfSk7dmFyIFJYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiB0emUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPXR6ZX0pO3ZhciBPWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxOWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIGV6ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbTlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IERYdCh0KSx0W05YdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPWV6ZTt2YXIgRFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPURYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPShkZSgpLFV0KHBlKSkscnplPXBYdCgpO3FvLkFycmF5PXJ6ZTt2YXIgbnplPWdYdCgpO3FvLkNvbG9yPW56ZTt2YXIgaXplPUNpdCgpO3FvLkRPTT1pemU7dmFyIG96ZT1BaXQoKTtxby5NYXRoPW96ZTt2YXIgYXplPUlpdCgpO3FvLlJUcmVlPWF6ZTt2YXIgc3plPVRYdCgpO3FvLlN0YWNraW5nPXN6ZTt2YXIgbHplPUFGKCk7cW8uV2luZG93PWx6ZTtLZy5fX2V4cG9ydFN0YXIoUFh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihJWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKFlnKCkscW8pO0tnLl9fZXhwb3J0U3RhcihMWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKGtYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7S2cuX19leHBvcnRTdGFyKE9YdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6WHQ9RmUoKSxCaXQ9SUYoKSxjemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9Y3plO3ZhciB1emU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt6WHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9dXplO3ZhciBoemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9elh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9aHplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxmemU9SWYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9ZnplLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gcHplKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9cHplO2Z1bmN0aW9uIGR6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxCWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPWR6ZTtmdW5jdGlvbiBGWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSksQlh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9Rlh0O2Z1bmN0aW9uIG16ZShlKXtGWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9bXplO2Z1bmN0aW9uIEJYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIGd6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPWd6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEhYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxfemU9T2UoKSxWWHQ9WWcoKSxVWHQ9SWYoKTtRQS5YQWxpZ25tZW50PVVYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVVYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgeXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9Vlh0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8X3plLmlzRWxlbWVudCh0KT9yPUhYdC5zZWxlY3QodCk6cj1WWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXl6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksdnplPSExO2Z1bmN0aW9uIHh6ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT14emU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gYnplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1iemU7ZnVuY3Rpb24gd3plKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PXd6ZTtmdW5jdGlvbiBTemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1TemU7ZnVuY3Rpb24gTXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PU16ZTtmdW5jdGlvbiBFemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1FemU7ZnVuY3Rpb24gVHplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9VHplO2Z1bmN0aW9uIEN6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD12emUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1DemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEF6ZT0oZGUoKSxVdChwZSkpLHlkPShFcigpLFV0KE1yKSksR2l0PV9sKCksUHplPWtjKCkscVh0PUJ1KCkseFM9RmUoKSxJemU9SWYoKTtERi5BeGlzT3JpZW50YXRpb249SXplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBMemU9ZnVuY3Rpb24oZSl7QXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihxWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1xWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnlkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSkseWQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHlkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx5ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz15ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnlkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUHplLkNvbXBvbmVudCk7REYuQXhpcz1MemV9KTt2YXIgV1h0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBremU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj1fbCgpLFJ6ZT1rYygpLEdYdD1GZSgpLFlpdD10NCgpLE56ZT1mdW5jdGlvbihlKXtremUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUnplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpHWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/R1h0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1OemV9KTt2YXIgWVh0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD1fbCgpLE96ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSx6emU9ZnVuY3Rpb24oZSl7RHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihPemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9enplfSk7dmFyIGpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZ6ZT1GZSgpO2Z1bmN0aW9uIEJ6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9RnplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9QnplO2Z1bmN0aW9uIEh6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9SHplfSk7dmFyIGU0PUgoSXY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEl2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9SXYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFZ6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1YWHQoZSx0LG4saSksJFh0KGUsdCxyLG8sYSl9SXYuY29uc3RyYWluZWRab29tPVZ6ZTtmdW5jdGlvbiBYWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Jdi5jb25zdHJhaW5ab29tRXh0ZW50cz1YWHQ7ZnVuY3Rpb24gJFh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz1LWHQoZSksYT1xemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Jdi5jb25zdHJhaW5ab29tVmFsdWVzPSRYdDtmdW5jdGlvbiBVemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz1LWHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUl2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249VXplO2Z1bmN0aW9uIEtYdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBxemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIEx2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBaWHQ9RmUoKSxHemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgWlh0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBaWHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9R3plfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgV3plPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxZemU9ZTQoKSxKWHQ9RmUoKSxqemU9THYoKSxRaXQ9WzAsMV0sWHplPWZ1bmN0aW9uKGUpe1d6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiBKWHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBKWHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KFl6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oanplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9WHplfSk7dmFyIFFYdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksTmY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLEt6ZT1MdigpLFp6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxKemU9ZnVuY3Rpb24oZSl7JHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgWnplO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9TmYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1OZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0oS3plLlNjYWxlKTtyb3QuQ29sb3I9SnplfSk7dmFyIGUkdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSx0JHQ9RmUoKSx0RmU9THYoKSxlRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFt0JHQuTWF0aC5taW4ociwwKSx0JHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0odEZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9ZUZlfSk7dmFyIHZkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByRmU9KGRlKCksVXQocGUpKSxuRmU9KEVyKCksVXQoTXIpKSxpRmU9ZTQoKSxFUz1GZSgpLG9GZT1MdigpLGFGZT1mdW5jdGlvbihlKXtyRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49bkZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChpRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KG9GZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPWFGZX0pO3ZhciByJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHNGZT0oZGUoKSxVdChwZSkpLGxGZT0oRXIoKSxVdChNcikpLGNGZT12ZCgpLHVGZT1mdW5jdGlvbihlKXtzRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1sRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0oY0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPXVGZX0pO3ZhciBuJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT12ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWZGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPWRGZX0pO3ZhciBpJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9a3MoKSxnRmU9dmQoKSxfRmU9ZnVuY3Rpb24oZSl7bUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oZ0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9X0ZlfSk7dmFyIG8kdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeUZlPShkZSgpLFV0KHBlKSksZ2E9KEVyKCksVXQoTXIpKSxrdj1IRigpLHZGZT12ZCgpLHhGZT1mdW5jdGlvbihlKXt5RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1nYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1nYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP2dhLnV0Y1NlY29uZDpnYS50aW1lU2Vjb25kO2Nhc2Uga3YuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9nYS51dGNNaW51dGU6Z2EudGltZU1pbnV0ZTtjYXNlIGt2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP2dhLnV0Y0hvdXI6Z2EudGltZUhvdXI7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP2dhLnV0Y0RheTpnYS50aW1lRGF5O2Nhc2Uga3YuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/Z2EudXRjV2VlazpnYS50aW1lV2VlaztjYXNlIGt2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9nYS51dGNNb250aDpnYS50aW1lTW9udGg7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9nYS51dGNZZWFyOmdhLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fSh2RmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPXhGZX0pO3ZhciBrcz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJ2PShkZSgpLFV0KHBlKSksYkZlPWpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPWJGZTtSdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihRWHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGUkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIociR0KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGkkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIobyR0KCksSHUpO3ZhciB3RmU9ZW90KCksU0ZlPXZkKCk7ZnVuY3Rpb24gTUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2Ygd0ZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1NRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLGEkdD1fbCgpLHMkdD1CdSgpLFRGZT1rcygpLG40PUZlKCksdW90PUlmKCksdHM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgQ0ZlPWZ1bmN0aW9uKGUpe0VGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihzJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9VEZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgYSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBhJHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHRzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKHRzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPSh4ZD17fSx4ZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLHhkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEseGRbU2UuVGltZUludGVydmFsLmhvdXJdPTIseGRbU2UuVGltZUludGVydmFsLmRheV09Myx4ZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCx4ZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUseGRbU2UuVGltZUludGVydmFsLnllYXJdPTYseGQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBzJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KHRzLkF4aXMpO1NlLlRpbWU9Q0ZlO3ZhciB4ZH0pO3ZhciBsJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKFdYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKFlYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBRmU9RmUoKSxQRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcgQUZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UEZlfSk7dmFyIGMkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSUZlPShkZSgpLFV0KHBlKSksTEZlPW80KCksa0ZlPWZ1bmN0aW9uKGUpe0lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShMRmUuRGlzcGF0Y2hlcik7cG90LktleT1rRmV9KTt2YXIgaCR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSRmU9KGRlKCksVXQocGUpKSx1JHQ9RmUoKSxORmU9bzQoKSxERmU9ZnVuY3Rpb24oZSl7UkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9dSR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHUkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KE5GZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9REZlfSk7dmFyIHAkdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT0ZlPShkZSgpLFV0KHBlKSksZiR0PUZlKCksekZlPW80KCksRkZlPWZ1bmN0aW9uKGUpe09GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1mJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZiR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KHpGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9RkZlfSk7dmFyIE52PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihjJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihoJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCl9KTt2YXIgRHY9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249QkZlfSk7dmFyIGckdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZCR0PU52KCksbSR0PUZlKCksVkZlPUR2KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyBtJHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgbSR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1kJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9ZCR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oVkZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9VUZlfSk7dmFyIHkkdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcUZlPShkZSgpLFV0KHBlKSksXyR0PU52KCksczQ9RmUoKSxHRmU9RHYoKSxXRmU9ZnVuY3Rpb24oZSl7cUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9XyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9XyR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KEdGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9V0ZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWUZlPShkZSgpLFV0KHBlKSksdiR0PU52KCkseG90PUZlKCksakZlPUR2KCksWEZlPWZ1bmN0aW9uKGUpe1lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9diR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPXYkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oakZlLkludGVyYWN0aW9uKTtib3QuS2V5PVhGZX0pO3ZhciBTJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRGZT0oZGUoKSxVdChwZSkpLEtGZT0oRXIoKSxVdChNcikpLHgkdD1OdigpLGIkdD1rcygpLHlsPUZlKCksWkZlPWw0KCksSkZlPUR2KCksdyR0PWU0KCksUUZlPWZ1bmN0aW9uKGUpeyRGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB5bC5TZXQsaS5feVNjYWxlcz1uZXcgeWwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgWkZlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz1LRmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgeWwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj14JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eCR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHckdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gdyR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgYiR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIGIkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgeWwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmeWwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KEpGZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209UUZlfSk7dmFyIEUkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdEJlPShkZSgpLFV0KHBlKSksTSR0PU52KCksTW90PUZlKCksZUJlPUR2KCksckJlPWZ1bmN0aW9uKGUpe3RCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9TSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oZUJlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1yQmV9KTt2YXIgbDQ9SChaZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3RhcihnJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKHkkdCgpLFpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksWmcpO2M0Ll9fZXhwb3J0U3RhcihTJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKEUkdCgpLFpnKTt2YXIgbkJlPWU0KCk7Wmcuem9vbU91dD1uQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLG9CZT1rYygpLGVzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKGVzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciBhQmU9ZnVuY3Rpb24oZSl7aUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWVzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KG9CZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPWFCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0JlPShkZSgpLFV0KHBlKSksbEJlPWw0KCksQ290PUZlKCksY0JlPVlnKCksVUY9UG90KCksdUJlPVRvdCgpLGhCZT1mdW5jdGlvbihlKXtzQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbEJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1jQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0odUJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPWhCZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZCZT0oZGUoKSxVdChwZSkpLHBCZT1GZSgpLGRCZT1rYygpLE92OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKE92fHwoT3Y9e30pKTt2YXIgbUJlPWZ1bmN0aW9uKGUpe2ZCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPU92LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PU92LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09T3YuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT1Pdi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFwQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT1Pdi5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oZEJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPW1CZX0pO3ZhciBUJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1Mb3QoKSx5QmU9bDQoKSxrb3Q9RmUoKSx2QmU9ZnVuY3Rpb24oZSl7Z0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB5QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oX0JlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj12QmV9KTt2YXIgQyR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4QmU9KGRlKCksVXQocGUpKSxiQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciB3QmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KGJCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9d0JlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTQmU9KGRlKCksVXQocGUpKSxNQmU9WWcoKSxFQmU9a2MoKSxUQmU9ZnVuY3Rpb24oZSl7U0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9TUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oRUJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1UQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBJHQ9RmUoKSxBQmU9V0YoKSxQQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDpBJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OkEkdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KEFCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1QQmV9KTt2YXIgUCR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJQmU9KGRlKCksVXQocGUpKSxZRj1fbCgpLExCZT0kQSgpLGtCZT1CdSgpLFJCZT1GZSgpLE5CZT1rYygpLERCZT1mdW5jdGlvbihlKXtJQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9a0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj1SQmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksTEJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oTkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPURCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj1fbCgpLE9CZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShPQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIHpCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD16QmU7dmFyIEZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPUZCZX0pO3ZhciBYRj1IKGJkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJzPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gQkJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fWJkLmNpcmNsZT1CQmU7ZnVuY3Rpb24gSEJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19YmQuc3F1YXJlPUhCZTtmdW5jdGlvbiBWQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX1iZC5jcm9zcz1WQmU7ZnVuY3Rpb24gVUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX1iZC5kaWFtb25kPVVCZTtmdW5jdGlvbiBxQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fWJkLnRyaWFuZ2xlPXFCZTt2YXIgR0JlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uIFdCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTdGFyKS5zaXplKEdCZSpNYXRoLnBvdyhlLzIsMikpfX1iZC5zdGFyPVdCZTt2YXIgWUJlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIGpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xXeWUpLnNpemUoWUJlKk1hdGgucG93KGUvMi40LDIpKX19YmQud3llPWpCZX0pO3ZhciBJJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFhCZT0oZGUoKSxVdChwZSkpLHp2PShFcigpLFV0KE1yKSksJEY9X2woKSwkQmU9JEEoKSxLQmU9QnUoKSxaQmU9WEYoKSxKZz1GZSgpLEpCZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSmcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksUUJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihKZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSx0SGU9ZnVuY3Rpb24oZSl7WEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUtCZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gWkJlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsJEJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgUUJlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoSmcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1KZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1KZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89enYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PXp2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHp2LnNlbGVjdChnKSksYj1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOkpnLkRPTS5lbGVtZW50QkJveCh6di5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOnp2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PXp2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPXp2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0oSkJlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD10SGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZUhlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKGVIZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgayR0PUgoKFlxbixMJHQpPT57InVzZSBzdHJpY3QiO0wkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgRCR0PUgoKGpxbixOJHQpPT57InVzZSBzdHJpY3QiO3ZhciBySGU9ayR0KCk7ZnVuY3Rpb24gUiR0KGUpe3JldHVybiBySGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9TiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKFIkdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUsUiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkhlPUZlKCksTyR0PTAsaUhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBuSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9aUhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLG9IZT1EJHQoKSxhSGU9WW90KCksc0hlPUx2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIHNIZS5TY2FsZT96JHQoZSk6ZSBpbnN0YW5jZW9mIGFIZS5EYXRhc2V0P0YkdChlKTpvSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9CJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24geiR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT16JHQ7ZnVuY3Rpb24gRiR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9RiR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgViR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gQiR0KGUpe3JldHVybiBuZXcgSCR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PUIkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgVSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBIJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9SCR0O3ZhciBWJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVYkdDt2YXIgVSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9VSR0fSk7dmFyIHEkdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbEhlPSRvdCgpO2Z1bmN0aW9uIGNIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWxIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9Y0hlfSk7dmFyIFkkdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHVIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksRyR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uIFckdChlKXt2YXIgdD11SGUubWVtb2l6ZShlLEckdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IEckdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9VyR0O2Z1bmN0aW9uIGhIZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPVckdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9aEhlfSk7dmFyIGokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPUNTKCk7ZnVuY3Rpb24gcEhlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9ZkhlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPXBIZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIocSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO3ZhciBkSGU9JG90KCk7QVMuc2lnbj1kSGUuc2lnbn0pO3ZhciBGdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFgkdD0oRXIoKSxVdChNcikpLG1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9bUhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBnSGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiAkJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPWdIZTtmdW5jdGlvbiAkJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz0kJHQ7ZnVuY3Rpb24gX0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24geUhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiBLJHQoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9SyR0O2Z1bmN0aW9uIFokdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PVokdDtmdW5jdGlvbiB2SGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT12SGU7ZnVuY3Rpb24geEhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9eEhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD1LJHQodCk7dmFyIHI9WCR0LmNvbG9yKHQuc3Ryb2tlKSxuPVokdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9X0hlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1YJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXlIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9YkhlfSk7dmFyIERmPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB3SGU9KEVyKCksVXQoTXIpKSxKJHQ9RmUoKSxTSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD13SGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtKJHQuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyBKJHQuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPVNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFEkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLE1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IFEkdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IFEkdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9TUhlfSk7dmFyIHJzPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRUhlPShkZSgpLFV0KHBlKSksd2Q9KEVyKCksVXQoTXIpKSxkND1MZigpLFNkPUZlKCksdEt0PUdvdCgpLG9hdD1DUygpLFRIZT1rYygpLENIZT1GdigpLEFIZT1VdSgpLFBIZT1EZigpLElIZT1ZZygpLExIZT1JZigpLGtIZT1pYXQoKTtRRi5SZW5kZXJlcj1MSGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIFJIZT1mdW5jdGlvbihlKXtFSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgU2QuTWFwLHIuX2F0dHJCaW5kaW5ncz13ZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9d2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IodEt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcih0S3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1TZC5XaW5kb3cuZGVib3VuY2Uoa0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9SUhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IEFIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUEhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IENIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIFNkLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gZUt0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBlS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9d2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoU2QuTWF0aC5pc05hTihnLngpfHxTZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNkLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1TZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIHdkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSx3ZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IFNkLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246d2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShUSGUuQ29tcG9uZW50KTtRRi5QbG90PVJIZTtmdW5jdGlvbiBlS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIHJLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkhlPShkZSgpLFV0KHBlKSksREhlPXJzKCksT0hlPUZlKCksekhlPXpvdCgpLEZIZT1mdW5jdGlvbihlKXtOSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1PSGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIERIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oekhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPUZIZX0pO3ZhciBuS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxISGU9V0YoKSxWSGU9ZnVuY3Rpb24oZSl7QkhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oSEhlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVZIZX0pO3ZhciBpS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFVIZT0oZGUoKSxVdChwZSkpLHFIZT1Wb3QoKSxHSGU9MixXSGU9ZnVuY3Rpb24oZSl7VUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPUdIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KHFIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD1XSGV9KTt2YXIgb0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZSGU9KGRlKCksVXQocGUpKSxqSGU9cUYoKSxYSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShqSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1YSGV9KTt2YXIgYUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkSGU9KGRlKCksVXQocGUpKSxLSGU9cUYoKSxaSGU9ZnVuY3Rpb24oZSl7JEhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KEtIZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPVpIZX0pO3ZhciBQb3Q9SChfYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOcz0oZGUoKSxVdChwZSkpO05zLl9fZXhwb3J0U3RhcihxRigpLF9hKTtOcy5fX2V4cG9ydFN0YXIoVCR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihDJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKHpvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTG90KCksX2EpO05zLl9fZXhwb3J0U3RhcihQJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKFZvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoSSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihyS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFRvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIobkt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihpS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKG9LdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoYUt0KCksX2EpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSkhlPShkZSgpLFV0KHBlKSksUUhlPURmKCksdFZlPWZ1bmN0aW9uKGUpe0pIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShRSGUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPXRWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGVWZT0oZGUoKSxVdChwZSkpLHJWZT1EZigpLG5WZT1mdW5jdGlvbihlKXtlVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KHJWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPW5WZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpVmU9KGRlKCksVXQocGUpKSx0Qj1GdigpLG9WZT1EZigpLGFWZT1mdW5jdGlvbihlKXtpVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0ob1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj1hVmU7dmFyIHNWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sbFZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIGNWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxzVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxsVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9Y1ZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdVZlPShkZSgpLFV0KHBlKSksc0t0PUZ2KCksaFZlPURmKCksZlZlPWZ1bmN0aW9uKGUpe3VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oaFZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1mVmU7dmFyIHBWZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBkVmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1zS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixwVmUsclswXSwwKTtzS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWRWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGxLdD0oZGUoKSxVdChwZSkpLGlCPUZ2KCksbVZlPURmKCksZ1ZlPWZ1bmN0aW9uKGUpe2xLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KG1WZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixfVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB5VmU9ZnVuY3Rpb24oZSl7bEt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj15VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2VmU9KGRlKCksVXQocGUpKSx4VmU9RGYoKSxiVmU9ZnVuY3Rpb24oZSl7dlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oeFZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9YlZlfSk7dmFyIGNLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd1ZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj13VmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1ZlPShkZSgpLFV0KHBlKSksbTQ9RnYoKSxNVmU9Y0t0KCksRVZlPURmKCksVFZlPWZ1bmN0aW9uKGUpe1NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KEVWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1UVmU7dmFyIENWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBBVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IE1WZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLENWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFQVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPUlWZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1BVmU7ZnVuY3Rpb24gUFZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBJVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgQnY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPZj0oZGUoKSxVdChwZSkpO09mLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGRhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihGdigpLERjKTtPZi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7T2YuX19leHBvcnRTdGFyKG5CKCksRGMpO09mLl9fZXhwb3J0U3RhcihvQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO09mLl9fZXhwb3J0U3RhcihEZigpLERjKTtPZi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIEh2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMVmU9KGRlKCksVXQocGUpKSx1S3Q9a3MoKSx4YXQ9RmUoKSxrVmU9aWF0KCksZzQ9cnMoKSxSVmU9ZnVuY3Rpb24oZSl7TFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IGtWZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiB1S3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgdUt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9UlZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE5WZT0oZGUoKSxVdChwZSkpLHlhPShFcigpLFV0KE1yKSksRFZlPUxmKCksT1ZlPUJ2KCkselZlPVV1KCksaEt0PW5CKCksRlZlPWtzKCksc0I9dmQoKSxRZz1GZSgpLEJWZT1JZigpLHdhdD1JUygpLHZsPXJzKCksSFZlPUh2KCksZkt0PXtsaW5lYXI6eWEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnlhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6eWEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6eWEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp5YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp5YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp5YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp5YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp5YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp5YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp5YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp5YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnlhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9QlZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBWVmU9ZnVuY3Rpb24oZSl7TlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBEVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHZsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBGVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IHpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaEt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgT1ZlLkNhbnZhc0RyYXdlcihpLGhLdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB5YS5leHRlbnQoeWEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIVFnLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiBRZy5NYXRoLmlzVmFsaWROdW1iZXIoYykmJlFnLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHlhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1mS3Rbcl07cmV0dXJuIG49PW51bGw/Zkt0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyBRZy5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gUWcuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZRZy5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgUWcuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgUWcuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oSFZlLlhZUGxvdCk7bEIuTGluZT1WVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLHFWZT1rcygpLF80PUZlKCksTWF0PUJ2KCkscEt0PW1hdCgpLEdWZT1VdSgpLGRLdD1uQigpLHVCPUlTKCksV1ZlPVNhdCgpLERzPXJzKCksWVZlPWZ1bmN0aW9uKGUpe1VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IHFWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSxkS3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPURzLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IEdWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgcEt0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLHBLdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fShXVmUuTGluZSk7RWF0LkFyZWE9WVZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgalZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PV9sKCksWFZlPUxmKCksJFZlPUJ1KCksS1ZlPUJ2KCksWlZlPVV1KCksSlZlPW9CKCksUVZlPUNTKCksUGF0PWtzKCksbUt0PXZkKCkseGw9RmUoKSxMYXQ9SWYoKSxnS3Q9SVMoKSxoQj1ycygpLHRVZT1IdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7alZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPSRWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9UVZlLm1lbW9pemUoZVVlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBYVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgeGwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgSlZlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgS1ZlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107eGwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2YgbUt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmeGwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIG1LdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPXhsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PHhsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoZ0t0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihnS3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IHhsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPXhsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj94bC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KHRVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gZVVlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldCh4bC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249eGwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgeUt0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByVWU9KGRlKCksVXQocGUpKSxuVWU9a3MoKSxpVWU9RmUoKSxfS3Q9eTQoKSxvVWU9cnMoKSxhVWU9ZnVuY3Rpb24oZSl7clVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBpVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBuVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49b1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihfS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oX0t0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj1hVWV9KTt2YXIgdkt0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD1fbCgpLGxVZT1MZigpLGNVZT1CdSgpLHVVZT1rcygpLFZ2PUZlKCksaFVlPWZhdCgpLGZVZT1kYXQoKSxwVWU9VXUoKSxkVWU9QUYoKSxNZD1ycygpLG1VZT1mdW5jdGlvbihlKXtzVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1jVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgdVVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBWdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFZ2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZlVlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHBVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaFVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gZFVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFZ2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPU1kLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGxVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVnYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Wdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxWdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KE1kLlBsb3QpO05hdC5QaWU9bVVlfSk7dmFyIHhLdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ1VlPShkZSgpLFV0KHBlKSksX1VlPShFcigpLFV0KE1yKSksRGF0PV9sKCkseVVlPUxmKCksdlVlPUJ2KCkseFVlPVV1KCksYlVlPW9CKCksZkI9a3MoKSxPYz1GZSgpLHBCPXJzKCksd1VlPUh2KCksU1VlPWZ1bmN0aW9uKGUpe2dVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHlVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgeFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IHZVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9X1VlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0od1VlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1TVWV9KTt2YXIgd0t0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNVWU9KGRlKCksVXQocGUpKSx6YXQ9X2woKSxFVWU9QnUoKSxUVWU9WEYoKSxDVWU9VXUoKSxiS3Q9dmF0KCksQVVlPUxmKCksUFVlPUJ2KCksSVVlPWtzKCksRmF0PUZlKCksQmF0PUlTKCksYmw9cnMoKSxMVWU9SHYoKSxrVWU9ZnVuY3Rpb24oZSl7TVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9RVVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcgQVVlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24oYmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBJVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9VFVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBDVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUFVlLkNhbnZhc0RyYXdlcihpLGJLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiBibC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oTFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9a1VlfSk7dmFyIFNLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUlVlPShkZSgpLFV0KHBlKSksTlVlPUxmKCksRFVlPVV1KCksT1VlPV9hdCgpLHpVZT1rcygpLEZVZT1BRigpLExTPXJzKCksQlVlPUh2KCksSFVlPWZ1bmN0aW9uKGUpe1JVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IHpVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgRFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gRlVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBOVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KEJVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUhVZX0pO3ZhciBUS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFZVZT0oZGUoKSxVdChwZSkpLE1LdD0oRXIoKSxVdChNcikpLFVVZT1MZigpLEVLdD1DUygpLHQwPUZlKCkscVVlPVRhdCgpLEdVZT1ycygpLFdVZT1mdW5jdGlvbihlKXtWVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9RUt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PUVLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiB0MC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8odDAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBVVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJnQwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1NS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPUdVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldCh0MC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KHFVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9V1VlfSk7dmFyIEFLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWVVlPShkZSgpLFV0KHBlKSkscWF0PV9sKCksalVlPUJ1KCksQ0t0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxYVWU9cnMoKSwkVWU9ZnVuY3Rpb24oZSl7WVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9alVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9Q0t0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUNLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1YVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj0kVWV9KTt2YXIgUEt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLVWU9KGRlKCksVXQocGUpKSxaVWU9RmUoKSxKVWU9eTQoKSxRVWU9cnMoKSx0cWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJlpVZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89UVVlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0oSlVlLkJhcik7WWF0LldhdGVyZmFsbD10cWV9KTt2YXIgSVM9SChPcz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSxPcyk7emMuX19leHBvcnRTdGFyKHk0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHlLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksT3MpO3pjLl9fZXhwb3J0U3Rhcih2S3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHhLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIod0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKFRLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoQUt0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihQS3QoKSxPcyl9KTt2YXIgSUt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgd2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpO1dqdCgpO3ZhciBlcWU9TGYoKTtsbi5BbmltYXRvcnM9ZXFlO3ZhciBycWU9bCR0KCk7bG4uQXhlcz1ycWU7dmFyIG5xZT1Qb3QoKTtsbi5Db21wb25lbnRzPW5xZTt2YXIgaXFlPSRBKCk7bG4uQ29uZmlncz1pcWU7dmFyIG9xZT1CdSgpO2xuLkZvcm1hdHRlcnM9b3FlO3ZhciBhcWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPWFxZTt2YXIgc3FlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPXNxZTt2YXIgbHFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWxxZTt2YXIgY3FlPU52KCk7bG4uRGlzcGF0Y2hlcnM9Y3FlO3ZhciB1cWU9QnYoKTtsbi5EcmF3ZXJzPXVxZTt2YXIgaHFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPWhxZTt2YXIgZnFlPUlTKCk7bG4uUGxvdHM9ZnFlO3ZhciBwcWU9a3MoKTtsbi5TY2FsZXM9cHFlO3ZhciBkcWU9RmUoKTtsbi5VdGlscz1kcWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciBtcWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9bXFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIGdxZT1JS3QoKTtsbi52ZXJzaW9uPWdxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKER2KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKEh2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihycygpLGxuKTtGYy5fX2V4cG9ydFN0YXIodmQoKSxsbik7RmMuX19leHBvcnRTdGFyKEx2KCksbG4pfSk7dmFyICRLdD1IKChKam4sWEt0KT0+e2Z1bmN0aW9uIERxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9WEt0LmV4cG9ydHM9RHFlfSk7dmFyIFl2PUgoKFFqbixLS3QpPT57ZnVuY3Rpb24gT3FlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9S0t0LmV4cG9ydHM9T3FlfSk7dmFyIE00PUgoKHRYbixaS3QpPT57dmFyIHpxZT1ZdigpO2Z1bmN0aW9uIEZxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKHpxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfVpLdC5leHBvcnRzPUZxZX0pO3ZhciBRS3Q9SCgoZVhuLEpLdCk9Pnt2YXIgQnFlPU00KCksSHFlPUFycmF5LnByb3RvdHlwZSxWcWU9SHFlLnNwbGljZTtmdW5jdGlvbiBVcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPUJxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6VnFlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfUpLdC5leHBvcnRzPVVxZX0pO3ZhciBlWnQ9SCgoclhuLHRadCk9Pnt2YXIgcXFlPU00KCk7ZnVuY3Rpb24gR3FlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1xcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfXRadC5leHBvcnRzPUdxZX0pO3ZhciBuWnQ9SCgoblhuLHJadCk9Pnt2YXIgV3FlPU00KCk7ZnVuY3Rpb24gWXFlKGUpe3JldHVybiBXcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1yWnQuZXhwb3J0cz1ZcWV9KTt2YXIgb1p0PUgoKGlYbixpWnQpPT57dmFyIGpxZT1NNCgpO2Z1bmN0aW9uIFhxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1qcWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31pWnQuZXhwb3J0cz1YcWV9KTt2YXIgRTQ9SCgob1huLGFadCk9Pnt2YXIgJHFlPSRLdCgpLEtxZT1RS3QoKSxacWU9ZVp0KCksSnFlPW5adCgpLFFxZT1vWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9JHFlO3pTLnByb3RvdHlwZS5kZWxldGU9S3FlO3pTLnByb3RvdHlwZS5nZXQ9WnFlO3pTLnByb3RvdHlwZS5oYXM9SnFlO3pTLnByb3RvdHlwZS5zZXQ9UXFlO2FadC5leHBvcnRzPXpTfSk7dmFyIGxadD1IKChhWG4sc1p0KT0+e3ZhciB0R2U9RTQoKTtmdW5jdGlvbiBlR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyB0R2UsdGhpcy5zaXplPTB9c1p0LmV4cG9ydHM9ZUdlfSk7dmFyIHVadD1IKChzWG4sY1p0KT0+e2Z1bmN0aW9uIHJHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1jWnQuZXhwb3J0cz1yR2V9KTt2YXIgZlp0PUgoKGxYbixoWnQpPT57ZnVuY3Rpb24gbkdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1oWnQuZXhwb3J0cz1uR2V9KTt2YXIgZFp0PUgoKGNYbixwWnQpPT57ZnVuY3Rpb24gaUdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1wWnQuZXhwb3J0cz1pR2V9KTt2YXIgY3N0PUgoKHVYbixtWnQpPT57dmFyIG9HZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7bVp0LmV4cG9ydHM9b0dlfSk7dmFyIEhjPUgoKGhYbixnWnQpPT57dmFyIGFHZT1jc3QoKSxzR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixsR2U9YUdlfHxzR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Z1p0LmV4cG9ydHM9bEdlfSk7dmFyIGp2PUgoKGZYbixfWnQpPT57dmFyIGNHZT1IYygpLHVHZT1jR2UuU3ltYm9sO19adC5leHBvcnRzPXVHZX0pO3ZhciBiWnQ9SCgocFhuLHhadCk9Pnt2YXIgeVp0PWp2KCksdlp0PU9iamVjdC5wcm90b3R5cGUsaEdlPXZadC5oYXNPd25Qcm9wZXJ0eSxmR2U9dlp0LnRvU3RyaW5nLFQ0PXladD95WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHBHZShlKXt2YXIgdD1oR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWZHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX14WnQuZXhwb3J0cz1wR2V9KTt2YXIgU1p0PUgoKGRYbix3WnQpPT57dmFyIGRHZT1PYmplY3QucHJvdG90eXBlLG1HZT1kR2UudG9TdHJpbmc7ZnVuY3Rpb24gZ0dlKGUpe3JldHVybiBtR2UuY2FsbChlKX13WnQuZXhwb3J0cz1nR2V9KTt2YXIgczA9SCgobVhuLFRadCk9Pnt2YXIgTVp0PWp2KCksX0dlPWJadCgpLHlHZT1TWnQoKSx2R2U9IltvYmplY3QgTnVsbF0iLHhHZT0iW29iamVjdCBVbmRlZmluZWRdIixFWnQ9TVp0P01adC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gYkdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/eEdlOnZHZTpFWnQmJkVadCBpbiBPYmplY3QoZSk/X0dlKGUpOnlHZShlKX1UWnQuZXhwb3J0cz1iR2V9KTt2YXIgTWw9SCgoZ1huLENadCk9PntmdW5jdGlvbiB3R2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9Q1p0LmV4cG9ydHM9d0dlfSk7dmFyIEZTPUgoKF9YbixBWnQpPT57dmFyIFNHZT1zMCgpLE1HZT1NbCgpLEVHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsVEdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsQ0dlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsQUdlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUEdlKGUpe2lmKCFNR2UoZSkpcmV0dXJuITE7dmFyIHQ9U0dlKGUpO3JldHVybiB0PT1UR2V8fHQ9PUNHZXx8dD09RUdlfHx0PT1BR2V9QVp0LmV4cG9ydHM9UEdlfSk7dmFyIEladD1IKCh5WG4sUFp0KT0+e3ZhciBJR2U9SGMoKSxMR2U9SUdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtQWnQuZXhwb3J0cz1MR2V9KTt2YXIgUlp0PUgoKHZYbixrWnQpPT57dmFyIHVzdD1JWnQoKSxMWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIGtHZShlKXtyZXR1cm4hIUxadCYmTFp0IGluIGV9a1p0LmV4cG9ydHM9a0dlfSk7dmFyIGhzdD1IKCh4WG4sTlp0KT0+e3ZhciBSR2U9RnVuY3Rpb24ucHJvdG90eXBlLE5HZT1SR2UudG9TdHJpbmc7ZnVuY3Rpb24gREdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gTkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifU5adC5leHBvcnRzPURHZX0pO3ZhciBPWnQ9SCgoYlhuLERadCk9Pnt2YXIgT0dlPUZTKCksekdlPVJadCgpLEZHZT1NbCgpLEJHZT1oc3QoKSxIR2U9L1tcXF4kLiorPygpW1xde318XS9nLFZHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxVR2U9RnVuY3Rpb24ucHJvdG90eXBlLHFHZT1PYmplY3QucHJvdG90eXBlLEdHZT1VR2UudG9TdHJpbmcsV0dlPXFHZS5oYXNPd25Qcm9wZXJ0eSxZR2U9UmVnRXhwKCJeIitHR2UuY2FsbChXR2UpLnJlcGxhY2UoSEdlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIGpHZShlKXtpZighRkdlKGUpfHx6R2UoZSkpcmV0dXJuITE7dmFyIHQ9T0dlKGUpP1lHZTpWR2U7cmV0dXJuIHQudGVzdChCR2UoZSkpfURadC5leHBvcnRzPWpHZX0pO3ZhciBGWnQ9SCgod1huLHpadCk9PntmdW5jdGlvbiBYR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX16WnQuZXhwb3J0cz1YR2V9KTt2YXIgbDA9SCgoU1huLEJadCk9Pnt2YXIgJEdlPU9adCgpLEtHZT1GWnQoKTtmdW5jdGlvbiBaR2UoZSx0KXt2YXIgcj1LR2UoZSx0KTtyZXR1cm4gJEdlKHIpP3I6dm9pZCAwfUJadC5leHBvcnRzPVpHZX0pO3ZhciB6Qj1IKChNWG4sSFp0KT0+e3ZhciBKR2U9bDAoKSxRR2U9SGMoKSx0V2U9SkdlKFFHZSwiTWFwIik7SFp0LmV4cG9ydHM9dFdlfSk7dmFyIEM0PUgoKEVYbixWWnQpPT57dmFyIGVXZT1sMCgpLHJXZT1lV2UoT2JqZWN0LCJjcmVhdGUiKTtWWnQuZXhwb3J0cz1yV2V9KTt2YXIgR1p0PUgoKFRYbixxWnQpPT57dmFyIFVadD1DNCgpO2Z1bmN0aW9uIG5XZSgpe3RoaXMuX19kYXRhX189VVp0P1VadChudWxsKTp7fSx0aGlzLnNpemU9MH1xWnQuZXhwb3J0cz1uV2V9KTt2YXIgWVp0PUgoKENYbixXWnQpPT57ZnVuY3Rpb24gaVdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fVdadC5leHBvcnRzPWlXZX0pO3ZhciBYWnQ9SCgoQVhuLGpadCk9Pnt2YXIgb1dlPUM0KCksYVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixzV2U9T2JqZWN0LnByb3RvdHlwZSxsV2U9c1dlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGNXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKG9XZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PWFXZT92b2lkIDA6cn1yZXR1cm4gbFdlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1qWnQuZXhwb3J0cz1jV2V9KTt2YXIgS1p0PUgoKFBYbiwkWnQpPT57dmFyIHVXZT1DNCgpLGhXZT1PYmplY3QucHJvdG90eXBlLGZXZT1oV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcFdlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHVXZT90W2VdIT09dm9pZCAwOmZXZS5jYWxsKHQsZSl9JFp0LmV4cG9ydHM9cFdlfSk7dmFyIEpadD1IKChJWG4sWlp0KT0+e3ZhciBkV2U9QzQoKSxtV2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIGdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09ZFdlJiZ0PT09dm9pZCAwP21XZTp0LHRoaXN9Wlp0LmV4cG9ydHM9Z1dlfSk7dmFyIHRKdD1IKChMWG4sUVp0KT0+e3ZhciBfV2U9R1p0KCkseVdlPVladCgpLHZXZT1YWnQoKSx4V2U9S1p0KCksYldlPUpadCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1fV2U7QlMucHJvdG90eXBlLmRlbGV0ZT15V2U7QlMucHJvdG90eXBlLmdldD12V2U7QlMucHJvdG90eXBlLmhhcz14V2U7QlMucHJvdG90eXBlLnNldD1iV2U7UVp0LmV4cG9ydHM9QlN9KTt2YXIgbkp0PUgoKGtYbixySnQpPT57dmFyIGVKdD10SnQoKSx3V2U9RTQoKSxTV2U9ekIoKTtmdW5jdGlvbiBNV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlSnQsbWFwOm5ldyhTV2V8fHdXZSksc3RyaW5nOm5ldyBlSnR9fXJKdC5leHBvcnRzPU1XZX0pO3ZhciBvSnQ9SCgoUlhuLGlKdCk9PntmdW5jdGlvbiBFV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9aUp0LmV4cG9ydHM9RVdlfSk7dmFyIEE0PUgoKE5YbixhSnQpPT57dmFyIFRXZT1vSnQoKTtmdW5jdGlvbiBDV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBUV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH1hSnQuZXhwb3J0cz1DV2V9KTt2YXIgbEp0PUgoKERYbixzSnQpPT57dmFyIEFXZT1BNCgpO2Z1bmN0aW9uIFBXZShlKXt2YXIgdD1BV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1zSnQuZXhwb3J0cz1QV2V9KTt2YXIgdUp0PUgoKE9YbixjSnQpPT57dmFyIElXZT1BNCgpO2Z1bmN0aW9uIExXZShlKXtyZXR1cm4gSVdlKHRoaXMsZSkuZ2V0KGUpfWNKdC5leHBvcnRzPUxXZX0pO3ZhciBmSnQ9SCgoelhuLGhKdCk9Pnt2YXIga1dlPUE0KCk7ZnVuY3Rpb24gUldlKGUpe3JldHVybiBrV2UodGhpcyxlKS5oYXMoZSl9aEp0LmV4cG9ydHM9UldlfSk7dmFyIGRKdD1IKChGWG4scEp0KT0+e3ZhciBOV2U9QTQoKTtmdW5jdGlvbiBEV2UoZSx0KXt2YXIgcj1OV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31wSnQuZXhwb3J0cz1EV2V9KTt2YXIgRkI9SCgoQlhuLG1KdCk9Pnt2YXIgT1dlPW5KdCgpLHpXZT1sSnQoKSxGV2U9dUp0KCksQldlPWZKdCgpLEhXZT1kSnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9T1dlO0hTLnByb3RvdHlwZS5kZWxldGU9eldlO0hTLnByb3RvdHlwZS5nZXQ9RldlO0hTLnByb3RvdHlwZS5oYXM9QldlO0hTLnByb3RvdHlwZS5zZXQ9SFdlO21KdC5leHBvcnRzPUhTfSk7dmFyIF9KdD1IKChIWG4sZ0p0KT0+e3ZhciBWV2U9RTQoKSxVV2U9ekIoKSxxV2U9RkIoKSxHV2U9MjAwO2Z1bmN0aW9uIFdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFZXZSl7dmFyIG49ci5fX2RhdGFfXztpZighVVdlfHxuLmxlbmd0aDxHV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IHFXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9Z0p0LmV4cG9ydHM9V1dlfSk7dmFyIFA0PUgoKFZYbix5SnQpPT57dmFyIFlXZT1FNCgpLGpXZT1sWnQoKSxYV2U9dVp0KCksJFdlPWZadCgpLEtXZT1kWnQoKSxaV2U9X0p0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgWVdlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPWpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPVhXZTtWUy5wcm90b3R5cGUuZ2V0PSRXZTtWUy5wcm90b3R5cGUuaGFzPUtXZTtWUy5wcm90b3R5cGUuc2V0PVpXZTt5SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChVWG4sdkp0KT0+e2Z1bmN0aW9uIEpXZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfXZKdC5leHBvcnRzPUpXZX0pO3ZhciBmc3Q9SCgocVhuLHhKdCk9Pnt2YXIgUVdlPWwwKCksdFllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPVFXZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTt4SnQuZXhwb3J0cz10WWV9KTt2YXIgSTQ9SCgoR1huLHdKdCk9Pnt2YXIgYkp0PWZzdCgpO2Z1bmN0aW9uIGVZZShlLHQscil7dD09Il9fcHJvdG9fXyImJmJKdD9iSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfXdKdC5leHBvcnRzPWVZZX0pO3ZhciBMND1IKChXWG4sU0p0KT0+e3ZhciByWWU9STQoKSxuWWU9WXYoKSxpWWU9T2JqZWN0LnByb3RvdHlwZSxvWWU9aVllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFZZShlLHQscil7dmFyIG49ZVt0XTsoIShvWWUuY2FsbChlLHQpJiZuWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJnJZZShlLHQscil9U0p0LmV4cG9ydHM9YVllfSk7dmFyIFVTPUgoKFlYbixNSnQpPT57dmFyIHNZZT1MNCgpLGxZZT1JNCgpO2Z1bmN0aW9uIGNZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/bFllKHIscyxsKTpzWWUocixzLGwpfXJldHVybiByfU1KdC5leHBvcnRzPWNZZX0pO3ZhciBUSnQ9SCgoalhuLEVKdCk9PntmdW5jdGlvbiB1WWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufUVKdC5leHBvcnRzPXVZZX0pO3ZhciBZdT1IKChYWG4sQ0p0KT0+e2Z1bmN0aW9uIGhZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUNKdC5leHBvcnRzPWhZZX0pO3ZhciBQSnQ9SCgoJFhuLEFKdCk9Pnt2YXIgZlllPXMwKCkscFllPVl1KCksZFllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gcFllKGUpJiZmWWUoZSk9PWRZZX1BSnQuZXhwb3J0cz1tWWV9KTt2YXIgcVM9SCgoS1huLGtKdCk9Pnt2YXIgSUp0PVBKdCgpLGdZZT1ZdSgpLExKdD1PYmplY3QucHJvdG90eXBlLF9ZZT1MSnQuaGFzT3duUHJvcGVydHkseVllPUxKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSx2WWU9SUp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/SUp0OmZ1bmN0aW9uKGUpe3JldHVybiBnWWUoZSkmJl9ZZS5jYWxsKGUsImNhbGxlZSIpJiYheVllLmNhbGwoZSwiY2FsbGVlIil9O2tKdC5leHBvcnRzPXZZZX0pO3ZhciBUaT1IKChaWG4sUkp0KT0+e3ZhciB4WWU9QXJyYXkuaXNBcnJheTtSSnQuZXhwb3J0cz14WWV9KTt2YXIgREp0PUgoKEpYbixOSnQpPT57ZnVuY3Rpb24gYlllKCl7cmV0dXJuITF9Tkp0LmV4cG9ydHM9YlllfSk7dmFyIFh2PUgoKGs0LEdTKT0+e3ZhciB3WWU9SGMoKSxTWWU9REp0KCksRkp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LE9KdD1GSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLE1ZZT1PSnQmJk9KdC5leHBvcnRzPT09Rkp0LHpKdD1NWWU/d1llLkJ1ZmZlcjp2b2lkIDAsRVllPXpKdD96SnQuaXNCdWZmZXI6dm9pZCAwLFRZZT1FWWV8fFNZZTtHUy5leHBvcnRzPVRZZX0pO3ZhciBSND1IKChRWG4sQkp0KT0+e3ZhciBDWWU9OTAwNzE5OTI1NDc0MDk5MSxBWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFBZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/Q1llOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZBWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fUJKdC5leHBvcnRzPVBZZX0pO3ZhciBIQj1IKCh0JG4sSEp0KT0+e3ZhciBJWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1JWWV9SEp0LmV4cG9ydHM9TFllfSk7dmFyIFVKdD1IKChlJG4sVkp0KT0+e3ZhciBrWWU9czAoKSxSWWU9SEIoKSxOWWU9WXUoKSxEWWU9IltvYmplY3QgQXJndW1lbnRzXSIsT1llPSJbb2JqZWN0IEFycmF5XSIselllPSJbb2JqZWN0IEJvb2xlYW5dIixGWWU9IltvYmplY3QgRGF0ZV0iLEJZZT0iW29iamVjdCBFcnJvcl0iLEhZZT0iW29iamVjdCBGdW5jdGlvbl0iLFZZZT0iW29iamVjdCBNYXBdIixVWWU9IltvYmplY3QgTnVtYmVyXSIscVllPSJbb2JqZWN0IE9iamVjdF0iLEdZZT0iW29iamVjdCBSZWdFeHBdIixXWWU9IltvYmplY3QgU2V0XSIsWVllPSJbb2JqZWN0IFN0cmluZ10iLGpZZT0iW29iamVjdCBXZWFrTWFwXSIsWFllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJFllPSJbb2JqZWN0IERhdGFWaWV3XSIsS1llPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpZZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKWWU9IltvYmplY3QgSW50OEFycmF5XSIsUVllPSJbb2JqZWN0IEludDE2QXJyYXldIix0amU9IltvYmplY3QgSW50MzJBcnJheV0iLGVqZT0iW29iamVjdCBVaW50OEFycmF5XSIscmplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsbmplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaWplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVm49e307Vm5bS1llXT1WbltaWWVdPVZuW0pZZV09Vm5bUVllXT1Wblt0amVdPVZuW2VqZV09Vm5bcmplXT1WbltuamVdPVZuW2lqZV09ITA7Vm5bRFllXT1WbltPWWVdPVZuW1hZZV09Vm5belllXT1WblskWWVdPVZuW0ZZZV09Vm5bQlllXT1WbltIWWVdPVZuW1ZZZV09Vm5bVVllXT1WbltxWWVdPVZuW0dZZV09Vm5bV1llXT1WbltZWWVdPVZuW2pZZV09ITE7ZnVuY3Rpb24gb2plKGUpe3JldHVybiBOWWUoZSkmJlJZZShlLmxlbmd0aCkmJiEhVm5ba1llKGUpXX1WSnQuZXhwb3J0cz1vamV9KTt2YXIgTjQ9SCgociRuLHFKdCk9PntmdW5jdGlvbiBhamUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1xSnQuZXhwb3J0cz1hamV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIHNqZT1jc3QoKSxHSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9R0p0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxsamU9TzQmJk80LmV4cG9ydHM9PT1HSnQscHN0PWxqZSYmc2plLnByb2Nlc3MsY2plPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPWNqZX0pO3ZhciBZUz1IKChuJG4sakp0KT0+e3ZhciB1amU9VUp0KCksaGplPU40KCksV0p0PVZCKCksWUp0PVdKdCYmV0p0LmlzVHlwZWRBcnJheSxmamU9WUp0P2hqZShZSnQpOnVqZTtqSnQuZXhwb3J0cz1mamV9KTt2YXIgZHN0PUgoKGkkbixYSnQpPT57dmFyIHBqZT1USnQoKSxkamU9cVMoKSxtamU9VGkoKSxnamU9WHYoKSxfamU9UjQoKSx5amU9WVMoKSx2amU9T2JqZWN0LnByb3RvdHlwZSx4amU9dmplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGJqZShlLHQpe3ZhciByPW1qZShlKSxuPSFyJiZkamUoZSksaT0hciYmIW4mJmdqZShlKSxvPSFyJiYhbiYmIWkmJnlqZShlKSxhPXJ8fG58fGl8fG8scz1hP3BqZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fHhqZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxfamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9WEp0LmV4cG9ydHM9YmplfSk7dmFyIHo0PUgoKG8kbiwkSnQpPT57dmFyIHdqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIFNqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHx3amU7cmV0dXJuIGU9PT1yfSRKdC5leHBvcnRzPVNqZX0pO3ZhciBtc3Q9SCgoYSRuLEtKdCk9PntmdW5jdGlvbiBNamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fUtKdC5leHBvcnRzPU1qZX0pO3ZhciBKSnQ9SCgocyRuLFpKdCk9Pnt2YXIgRWplPW1zdCgpLFRqZT1FamUoT2JqZWN0LmtleXMsT2JqZWN0KTtaSnQuZXhwb3J0cz1UamV9KTt2YXIgVUI9SCgobCRuLFFKdCk9Pnt2YXIgQ2plPXo0KCksQWplPUpKdCgpLFBqZT1PYmplY3QucHJvdG90eXBlLElqZT1QamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTGplKGUpe2lmKCFDamUoZSkpcmV0dXJuIEFqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKUlqZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1RSnQuZXhwb3J0cz1MamV9KTt2YXIgQmY9SCgoYyRuLHRRdCk9Pnt2YXIga2plPUZTKCksUmplPUhCKCk7ZnVuY3Rpb24gTmplKGUpe3JldHVybiBlIT1udWxsJiZSamUoZS5sZW5ndGgpJiYha2plKGUpfXRRdC5leHBvcnRzPU5qZX0pO3ZhciBBZD1IKCh1JG4sZVF0KT0+e3ZhciBEamU9ZHN0KCksT2plPVVCKCksemplPUJmKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiB6amUoZSk/RGplKGUpOk9qZShlKX1lUXQuZXhwb3J0cz1GamV9KTt2YXIgblF0PUgoKGgkbixyUXQpPT57dmFyIEJqZT1VUygpLEhqZT1BZCgpO2Z1bmN0aW9uIFZqZShlLHQpe3JldHVybiBlJiZCamUodCxIamUodCksZSl9clF0LmV4cG9ydHM9VmplfSk7dmFyIG9RdD1IKChmJG4saVF0KT0+e2Z1bmN0aW9uIFVqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWlRdC5leHBvcnRzPVVqZX0pO3ZhciBzUXQ9SCgocCRuLGFRdCk9Pnt2YXIgcWplPU1sKCksR2plPXo0KCksV2plPW9RdCgpLFlqZT1PYmplY3QucHJvdG90eXBlLGpqZT1ZamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWGplKGUpe2lmKCFxamUoZSkpcmV0dXJuIFdqZShlKTt2YXIgdD1HamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IWpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9YVF0LmV4cG9ydHM9WGplfSk7dmFyIGMwPUgoKGQkbixsUXQpPT57dmFyICRqZT1kc3QoKSxLamU9c1F0KCksWmplPUJmKCk7ZnVuY3Rpb24gSmplKGUpe3JldHVybiBaamUoZSk/JGplKGUsITApOktqZShlKX1sUXQuZXhwb3J0cz1KamV9KTt2YXIgdVF0PUgoKG0kbixjUXQpPT57dmFyIFFqZT1VUygpLHRYZT1jMCgpO2Z1bmN0aW9uIGVYZShlLHQpe3JldHVybiBlJiZRamUodCx0WGUodCksZSl9Y1F0LmV4cG9ydHM9ZVhlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgclhlPUhjKCksZFF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LGhRdD1kUXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLG5YZT1oUXQmJmhRdC5leHBvcnRzPT09ZFF0LGZRdD1uWGU/clhlLkJ1ZmZlcjp2b2lkIDAscFF0PWZRdD9mUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGlYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPXBRdD9wUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9aVhlfSk7dmFyIF9zdD1IKChnJG4sbVF0KT0+e2Z1bmN0aW9uIG9YZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fW1RdC5leHBvcnRzPW9YZX0pO3ZhciB5c3Q9SCgoXyRuLGdRdCk9PntmdW5jdGlvbiBhWGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfWdRdC5leHBvcnRzPWFYZX0pO3ZhciB2c3Q9SCgoeSRuLF9RdCk9PntmdW5jdGlvbiBzWGUoKXtyZXR1cm5bXX1fUXQuZXhwb3J0cz1zWGV9KTt2YXIgcUI9SCgodiRuLHZRdCk9Pnt2YXIgbFhlPXlzdCgpLGNYZT12c3QoKSx1WGU9T2JqZWN0LnByb3RvdHlwZSxoWGU9dVhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHlRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZYZT15UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGxYZSh5UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIGhYZS5jYWxsKGUsdCl9KSl9OmNYZTt2UXQuZXhwb3J0cz1mWGV9KTt2YXIgYlF0PUgoKHgkbix4UXQpPT57dmFyIHBYZT1VUygpLGRYZT1xQigpO2Z1bmN0aW9uIG1YZShlLHQpe3JldHVybiBwWGUoZSxkWGUoZSksdCl9eFF0LmV4cG9ydHM9bVhlfSk7dmFyIEdCPUgoKGIkbix3UXQpPT57ZnVuY3Rpb24gZ1hlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9d1F0LmV4cG9ydHM9Z1hlfSk7dmFyIEI0PUgoKHckbixTUXQpPT57dmFyIF9YZT1tc3QoKSx5WGU9X1hlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO1NRdC5leHBvcnRzPXlYZX0pO3ZhciB4c3Q9SCgoUyRuLE1RdCk9Pnt2YXIgdlhlPUdCKCkseFhlPUI0KCksYlhlPXFCKCksd1hlPXZzdCgpLFNYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLE1YZT1TWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KXZYZSh0LGJYZShlKSksZT14WGUoZSk7cmV0dXJuIHR9OndYZTtNUXQuZXhwb3J0cz1NWGV9KTt2YXIgVFF0PUgoKE0kbixFUXQpPT57dmFyIEVYZT1VUygpLFRYZT14c3QoKTtmdW5jdGlvbiBDWGUoZSx0KXtyZXR1cm4gRVhlKGUsVFhlKGUpLHQpfUVRdC5leHBvcnRzPUNYZX0pO3ZhciBic3Q9SCgoRSRuLENRdCk9Pnt2YXIgQVhlPUdCKCksUFhlPVRpKCk7ZnVuY3Rpb24gSVhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBQWGUoZSk/bjpBWGUobixyKGUpKX1DUXQuZXhwb3J0cz1JWGV9KTt2YXIgd3N0PUgoKFQkbixBUXQpPT57dmFyIExYZT1ic3QoKSxrWGU9cUIoKSxSWGU9QWQoKTtmdW5jdGlvbiBOWGUoZSl7cmV0dXJuIExYZShlLFJYZSxrWGUpfUFRdC5leHBvcnRzPU5YZX0pO3ZhciBJUXQ9SCgoQyRuLFBRdCk9Pnt2YXIgRFhlPWJzdCgpLE9YZT14c3QoKSx6WGU9YzAoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfVBRdC5leHBvcnRzPUZYZX0pO3ZhciBrUXQ9SCgoQSRuLExRdCk9Pnt2YXIgQlhlPWwwKCksSFhlPUhjKCksVlhlPUJYZShIWGUsIkRhdGFWaWV3Iik7TFF0LmV4cG9ydHM9VlhlfSk7dmFyIE5RdD1IKChQJG4sUlF0KT0+e3ZhciBVWGU9bDAoKSxxWGU9SGMoKSxHWGU9VVhlKHFYZSwiUHJvbWlzZSIpO1JRdC5leHBvcnRzPUdYZX0pO3ZhciBTc3Q9SCgoSSRuLERRdCk9Pnt2YXIgV1hlPWwwKCksWVhlPUhjKCksalhlPVdYZShZWGUsIlNldCIpO0RRdC5leHBvcnRzPWpYZX0pO3ZhciB6UXQ9SCgoTCRuLE9RdCk9Pnt2YXIgWFhlPWwwKCksJFhlPUhjKCksS1hlPVhYZSgkWGUsIldlYWtNYXAiKTtPUXQuZXhwb3J0cz1LWGV9KTt2YXIgS3Y9SCgoayRuLEdRdCk9Pnt2YXIgTXN0PWtRdCgpLEVzdD16QigpLFRzdD1OUXQoKSxDc3Q9U3N0KCksQXN0PXpRdCgpLHFRdD1zMCgpLFhTPWhzdCgpLEZRdD0iW29iamVjdCBNYXBdIixaWGU9IltvYmplY3QgT2JqZWN0XSIsQlF0PSJbb2JqZWN0IFByb21pc2VdIixIUXQ9IltvYmplY3QgU2V0XSIsVlF0PSJbb2JqZWN0IFdlYWtNYXBdIixVUXQ9IltvYmplY3QgRGF0YVZpZXddIixKWGU9WFMoTXN0KSxRWGU9WFMoRXN0KSx0JGU9WFMoVHN0KSxlJGU9WFMoQ3N0KSxyJGU9WFMoQXN0KSwkdj1xUXQ7KE1zdCYmJHYobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9VVF0fHxFc3QmJiR2KG5ldyBFc3QpIT1GUXR8fFRzdCYmJHYoVHN0LnJlc29sdmUoKSkhPUJRdHx8Q3N0JiYkdihuZXcgQ3N0KSE9SFF0fHxBc3QmJiR2KG5ldyBBc3QpIT1WUXQpJiYoJHY9ZnVuY3Rpb24oZSl7dmFyIHQ9cVF0KGUpLHI9dD09WlhlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEpYZTpyZXR1cm4gVVF0O2Nhc2UgUVhlOnJldHVybiBGUXQ7Y2FzZSB0JGU6cmV0dXJuIEJRdDtjYXNlIGUkZTpyZXR1cm4gSFF0O2Nhc2UgciRlOnJldHVybiBWUXR9cmV0dXJuIHR9KTtHUXQuZXhwb3J0cz0kdn0pO3ZhciBZUXQ9SCgoUiRuLFdRdCk9Pnt2YXIgbiRlPU9iamVjdC5wcm90b3R5cGUsaSRlPW4kZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZpJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn1XUXQuZXhwb3J0cz1vJGV9KTt2YXIgUHN0PUgoKE4kbixqUXQpPT57dmFyIGEkZT1IYygpLHMkZT1hJGUuVWludDhBcnJheTtqUXQuZXhwb3J0cz1zJGV9KTt2YXIgV0I9SCgoRCRuLCRRdCk9Pnt2YXIgWFF0PVBzdCgpO2Z1bmN0aW9uIGwkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWFF0KHQpLnNldChuZXcgWFF0KGUpKSx0fSRRdC5leHBvcnRzPWwkZX0pO3ZhciBaUXQ9SCgoTyRuLEtRdCk9Pnt2YXIgYyRlPVdCKCk7ZnVuY3Rpb24gdSRlKGUsdCl7dmFyIHI9dD9jJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfUtRdC5leHBvcnRzPXUkZX0pO3ZhciBRUXQ9SCgoeiRuLEpRdCk9Pnt2YXIgaCRlPS9cdyokLztmdW5jdGlvbiBmJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsaCRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fUpRdC5leHBvcnRzPWYkZX0pO3ZhciBpdGU9SCgoRiRuLG50ZSk9Pnt2YXIgdHRlPWp2KCksZXRlPXR0ZT90dGUucHJvdG90eXBlOnZvaWQgMCxydGU9ZXRlP2V0ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBwJGUoZSl7cmV0dXJuIHJ0ZT9PYmplY3QocnRlLmNhbGwoZSkpOnt9fW50ZS5leHBvcnRzPXAkZX0pO3ZhciBJc3Q9SCgoQiRuLG90ZSk9Pnt2YXIgZCRlPVdCKCk7ZnVuY3Rpb24gbSRlKGUsdCl7dmFyIHI9dD9kJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9b3RlLmV4cG9ydHM9bSRlfSk7dmFyIHN0ZT1IKChIJG4sYXRlKT0+e3ZhciBnJGU9V0IoKSxfJGU9WlF0KCkseSRlPVFRdCgpLHYkZT1pdGUoKSx4JGU9SXN0KCksYiRlPSJbb2JqZWN0IEJvb2xlYW5dIix3JGU9IltvYmplY3QgRGF0ZV0iLFMkZT0iW29iamVjdCBNYXBdIixNJGU9IltvYmplY3QgTnVtYmVyXSIsRSRlPSJbb2JqZWN0IFJlZ0V4cF0iLFQkZT0iW29iamVjdCBTZXRdIixDJGU9IltvYmplY3QgU3RyaW5nXSIsQSRlPSJbb2JqZWN0IFN5bWJvbF0iLFAkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEkkZT0iW29iamVjdCBEYXRhVmlld10iLEwkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixrJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsUiRlPSJbb2JqZWN0IEludDhBcnJheV0iLE4kZT0iW29iamVjdCBJbnQxNkFycmF5XSIsRCRlPSJbb2JqZWN0IEludDMyQXJyYXldIixPJGU9IltvYmplY3QgVWludDhBcnJheV0iLHokZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLEYkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLEIkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEgkZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBQJGU6cmV0dXJuIGckZShlKTtjYXNlIGIkZTpjYXNlIHckZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgSSRlOnJldHVybiBfJGUoZSxyKTtjYXNlIEwkZTpjYXNlIGskZTpjYXNlIFIkZTpjYXNlIE4kZTpjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpyZXR1cm4geCRlKGUscik7Y2FzZSBTJGU6cmV0dXJuIG5ldyBuO2Nhc2UgTSRlOmNhc2UgQyRlOnJldHVybiBuZXcgbihlKTtjYXNlIEUkZTpyZXR1cm4geSRlKGUpO2Nhc2UgVCRlOnJldHVybiBuZXcgbjtjYXNlIEEkZTpyZXR1cm4gdiRlKGUpfX1hdGUuZXhwb3J0cz1IJGV9KTt2YXIgTHN0PUgoKFYkbixjdGUpPT57dmFyIFYkZT1NbCgpLGx0ZT1PYmplY3QuY3JlYXRlLFUkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFWJGUodCkpcmV0dXJue307aWYobHRlKXJldHVybiBsdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO2N0ZS5leHBvcnRzPVUkZX0pO3ZhciBrc3Q9SCgoVSRuLHV0ZSk9Pnt2YXIgcSRlPUxzdCgpLEckZT1CNCgpLFckZT16NCgpO2Z1bmN0aW9uIFkkZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFXJGUoZSk/cSRlKEckZShlKSk6e319dXRlLmV4cG9ydHM9WSRlfSk7dmFyIGZ0ZT1IKChxJG4saHRlKT0+e3ZhciBqJGU9S3YoKSxYJGU9WXUoKSwkJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gSyRlKGUpe3JldHVybiBYJGUoZSkmJmokZShlKT09JCRlfWh0ZS5leHBvcnRzPUskZX0pO3ZhciBndGU9SCgoRyRuLG10ZSk9Pnt2YXIgWiRlPWZ0ZSgpLEokZT1ONCgpLHB0ZT1WQigpLGR0ZT1wdGUmJnB0ZS5pc01hcCxRJGU9ZHRlP0okZShkdGUpOlokZTttdGUuZXhwb3J0cz1RJGV9KTt2YXIgeXRlPUgoKFckbixfdGUpPT57dmFyIHRLZT1LdigpLGVLZT1ZdSgpLHJLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBuS2UoZSl7cmV0dXJuIGVLZShlKSYmdEtlKGUpPT1yS2V9X3RlLmV4cG9ydHM9bktlfSk7dmFyIHd0ZT1IKChZJG4sYnRlKT0+e3ZhciBpS2U9eXRlKCksb0tlPU40KCksdnRlPVZCKCkseHRlPXZ0ZSYmdnRlLmlzU2V0LGFLZT14dGU/b0tlKHh0ZSk6aUtlO2J0ZS5leHBvcnRzPWFLZX0pO3ZhciBSc3Q9SCgoaiRuLFR0ZSk9Pnt2YXIgc0tlPVA0KCksbEtlPUJCKCksY0tlPUw0KCksdUtlPW5RdCgpLGhLZT11UXQoKSxmS2U9Z3N0KCkscEtlPV9zdCgpLGRLZT1iUXQoKSxtS2U9VFF0KCksZ0tlPXdzdCgpLF9LZT1JUXQoKSx5S2U9S3YoKSx2S2U9WVF0KCkseEtlPXN0ZSgpLGJLZT1rc3QoKSx3S2U9VGkoKSxTS2U9WHYoKSxNS2U9Z3RlKCksRUtlPU1sKCksVEtlPXd0ZSgpLENLZT1BZCgpLEFLZT1jMCgpLFBLZT0xLElLZT0yLExLZT00LFN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixrS2U9IltvYmplY3QgQXJyYXldIixSS2U9IltvYmplY3QgQm9vbGVhbl0iLE5LZT0iW29iamVjdCBEYXRlXSIsREtlPSJbb2JqZWN0IEVycm9yXSIsTXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsT0tlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsektlPSJbb2JqZWN0IE1hcF0iLEZLZT0iW29iamVjdCBOdW1iZXJdIixFdGU9IltvYmplY3QgT2JqZWN0XSIsQktlPSJbb2JqZWN0IFJlZ0V4cF0iLEhLZT0iW29iamVjdCBTZXRdIixWS2U9IltvYmplY3QgU3RyaW5nXSIsVUtlPSJbb2JqZWN0IFN5bWJvbF0iLHFLZT0iW29iamVjdCBXZWFrTWFwXSIsR0tlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsV0tlPSJbb2JqZWN0IERhdGFWaWV3XSIsWUtlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixYS2U9IltvYmplY3QgSW50OEFycmF5XSIsJEtlPSJbb2JqZWN0IEludDE2QXJyYXldIixLS2U9IltvYmplY3QgSW50MzJBcnJheV0iLFpLZT0iW29iamVjdCBVaW50OEFycmF5XSIsSktlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsUUtlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdFplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bU3RlXT1DbltrS2VdPUNuW0dLZV09Q25bV0tlXT1DbltSS2VdPUNuW05LZV09Q25bWUtlXT1DbltqS2VdPUNuW1hLZV09Q25bJEtlXT1DbltLS2VdPUNuW3pLZV09Q25bRktlXT1DbltFdGVdPUNuW0JLZV09Q25bSEtlXT1DbltWS2VdPUNuW1VLZV09Q25bWktlXT1DbltKS2VdPUNuW1FLZV09Q25bdFplXT0hMDtDbltES2VdPUNuW010ZV09Q25bcUtlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlBLZSxsPXQmSUtlLGM9dCZMS2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIUVLZShlKSlyZXR1cm4gZTt2YXIgdT13S2UoZSk7aWYodSl7aWYoYT12S2UoZSksIXMpcmV0dXJuIHBLZShlLGEpfWVsc2V7dmFyIGg9eUtlKGUpLGY9aD09TXRlfHxoPT1PS2U7aWYoU0tlKGUpKXJldHVybiBmS2UoZSxzKTtpZihoPT1FdGV8fGg9PVN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpiS2UoZSksIXMpcmV0dXJuIGw/bUtlKGUsaEtlKGEsZSkpOmRLZShlLHVLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9eEtlKGUsaCxzKX19b3x8KG89bmV3IHNLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLFRLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOk1LZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP19LZTpnS2U6bD9BS2U6Q0tlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gbEtlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSksY0tlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1UdGUuZXhwb3J0cz1ZQn0pO3ZhciBBdGU9SCgoWCRuLEN0ZSk9Pnt2YXIgZVplPVJzdCgpLHJaZT00O2Z1bmN0aW9uIG5aZShlKXtyZXR1cm4gZVplKGUsclplKX1DdGUuZXhwb3J0cz1uWmV9KTt2YXIgakI9SCgoJCRuLFB0ZSk9PntmdW5jdGlvbiBpWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVB0ZS5leHBvcnRzPWlaZX0pO3ZhciBMdGU9SCgoSyRuLEl0ZSk9PntmdW5jdGlvbiBvWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1JdGUuZXhwb3J0cz1vWmV9KTt2YXIgWEI9SCgoWiRuLGt0ZSk9Pnt2YXIgYVplPUx0ZSgpLHNaZT1hWmUoKTtrdGUuZXhwb3J0cz1zWmV9KTt2YXIgJEI9SCgoSiRuLFJ0ZSk9Pnt2YXIgbFplPVhCKCksY1plPUFkKCk7ZnVuY3Rpb24gdVplKGUsdCl7cmV0dXJuIGUmJmxaZShlLHQsY1plKX1SdGUuZXhwb3J0cz11WmV9KTt2YXIgRHRlPUgoKFEkbixOdGUpPT57dmFyIGhaZT1CZigpO2Z1bmN0aW9uIGZaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIWhaZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fU50ZS5leHBvcnRzPWZaZX0pO3ZhciBIND1IKCh0S24sT3RlKT0+e3ZhciBwWmU9JEIoKSxkWmU9RHRlKCksbVplPWRaZShwWmUpO090ZS5leHBvcnRzPW1aZX0pO3ZhciB1MD1IKChlS24senRlKT0+e2Z1bmN0aW9uIGdaZShlKXtyZXR1cm4gZX16dGUuZXhwb3J0cz1nWmV9KTt2YXIgTnN0PUgoKHJLbixGdGUpPT57dmFyIF9aZT11MCgpO2Z1bmN0aW9uIHlaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpfWmV9RnRlLmV4cG9ydHM9eVplfSk7dmFyIERzdD1IKChuS24sQnRlKT0+e3ZhciB2WmU9QkIoKSx4WmU9SDQoKSxiWmU9TnN0KCksd1plPVRpKCk7ZnVuY3Rpb24gU1plKGUsdCl7dmFyIHI9d1plKGUpP3ZaZTp4WmU7cmV0dXJuIHIoZSxiWmUodCkpfUJ0ZS5leHBvcnRzPVNaZX0pO3ZhciBPc3Q9SCgoaUtuLEh0ZSk9PntIdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBVdGU9SCgob0tuLFZ0ZSk9Pnt2YXIgTVplPUg0KCk7ZnVuY3Rpb24gRVplKGUsdCl7dmFyIHI9W107cmV0dXJuIE1aZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1WdGUuZXhwb3J0cz1FWmV9KTt2YXIgR3RlPUgoKGFLbixxdGUpPT57dmFyIFRaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gQ1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLFRaZSksdGhpc31xdGUuZXhwb3J0cz1DWmV9KTt2YXIgWXRlPUgoKHNLbixXdGUpPT57ZnVuY3Rpb24gQVplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1XdGUuZXhwb3J0cz1BWmV9KTt2YXIgenN0PUgoKGxLbixqdGUpPT57dmFyIFBaZT1GQigpLElaZT1HdGUoKSxMWmU9WXRlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFBaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1JWmU7S0IucHJvdG90eXBlLmhhcz1MWmU7anRlLmV4cG9ydHM9S0J9KTt2YXIgJHRlPUgoKGNLbixYdGUpPT57ZnVuY3Rpb24ga1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1YdGUuZXhwb3J0cz1rWmV9KTt2YXIgRnN0PUgoKHVLbixLdGUpPT57ZnVuY3Rpb24gUlplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfUt0ZS5leHBvcnRzPVJaZX0pO3ZhciBCc3Q9SCgoaEtuLFp0ZSk9Pnt2YXIgTlplPXpzdCgpLERaZT0kdGUoKSxPWmU9RnN0KCkselplPTEsRlplPTI7ZnVuY3Rpb24gQlplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnpaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZGWmU/bmV3IE5aZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIURaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIU9aZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfVp0ZS5leHBvcnRzPUJaZX0pO3ZhciBRdGU9SCgoZktuLEp0ZSk9PntmdW5jdGlvbiBIWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfUp0ZS5leHBvcnRzPUhaZX0pO3ZhciBaQj1IKChwS24sdGVlKT0+e2Z1bmN0aW9uIFZaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9dGVlLmV4cG9ydHM9VlplfSk7dmFyIG9lZT1IKChkS24saWVlKT0+e3ZhciBlZWU9anYoKSxyZWU9UHN0KCksVVplPVl2KCkscVplPUJzdCgpLEdaZT1RdGUoKSxXWmU9WkIoKSxZWmU9MSxqWmU9MixYWmU9IltvYmplY3QgQm9vbGVhbl0iLCRaZT0iW29iamVjdCBEYXRlXSIsS1plPSJbb2JqZWN0IEVycm9yXSIsWlplPSJbb2JqZWN0IE1hcF0iLEpaZT0iW29iamVjdCBOdW1iZXJdIixRWmU9IltvYmplY3QgUmVnRXhwXSIsdEplPSJbb2JqZWN0IFNldF0iLGVKZT0iW29iamVjdCBTdHJpbmddIixySmU9IltvYmplY3QgU3ltYm9sXSIsbkplPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsaUplPSJbb2JqZWN0IERhdGFWaWV3XSIsbmVlPWVlZT9lZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9bmVlP25lZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBvSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgaUplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBuSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IHJlZShlKSxuZXcgcmVlKHQpKSk7Y2FzZSBYWmU6Y2FzZSAkWmU6Y2FzZSBKWmU6cmV0dXJuIFVaZSgrZSwrdCk7Y2FzZSBLWmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIFFaZTpjYXNlIGVKZTpyZXR1cm4gZT09dCsiIjtjYXNlIFpaZTp2YXIgcz1HWmU7Y2FzZSB0SmU6dmFyIGw9biZZWmU7aWYoc3x8KHM9V1plKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1qWmUsYS5zZXQoZSx0KTt2YXIgdT1xWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgckplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWllZS5leHBvcnRzPW9KZX0pO3ZhciBsZWU9SCgobUtuLHNlZSk9Pnt2YXIgYWVlPXdzdCgpLGFKZT0xLHNKZT1PYmplY3QucHJvdG90eXBlLGxKZT1zSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gY0plKGUsdCxyLG4saSxvKXt2YXIgYT1yJmFKZSxzPWFlZShlKSxsPXMubGVuZ3RoLGM9YWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmxKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9c2VlLmV4cG9ydHM9Y0plfSk7dmFyIGdlZT1IKChnS24sbWVlKT0+e3ZhciBWc3Q9UDQoKSx1SmU9QnN0KCksaEplPW9lZSgpLGZKZT1sZWUoKSxjZWU9S3YoKSx1ZWU9VGkoKSxoZWU9WHYoKSxwSmU9WVMoKSxkSmU9MSxmZWU9IltvYmplY3QgQXJndW1lbnRzXSIscGVlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsbUplPU9iamVjdC5wcm90b3R5cGUsZGVlPW1KZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBnSmUoZSx0LHIsbixpLG8pe3ZhciBhPXVlZShlKSxzPXVlZSh0KSxsPWE/cGVlOmNlZShlKSxjPXM/cGVlOmNlZSh0KTtsPWw9PWZlZT9KQjpsLGM9Yz09ZmVlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmaGVlKGUpKXtpZighaGVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8cEplKGUpP3VKZShlLHQscixuLGksbyk6aEplKGUsdCxsLHIsbixpLG8pO2lmKCEociZkSmUpKXt2YXIgcD11JiZkZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmZGVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZkplKGUsdCxyLG4saSxvKSk6ITF9bWVlLmV4cG9ydHM9Z0plfSk7dmFyIFVzdD1IKChfS24sdmVlKT0+e3ZhciBfSmU9Z2VlKCksX2VlPVl1KCk7ZnVuY3Rpb24geWVlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFfZWUoZSkmJiFfZWUodCk/ZSE9PWUmJnQhPT10Ol9KZShlLHQscixuLHllZSxpKX12ZWUuZXhwb3J0cz15ZWV9KTt2YXIgYmVlPUgoKHlLbix4ZWUpPT57dmFyIHlKZT1QNCgpLHZKZT1Vc3QoKSx4SmU9MSxiSmU9MjtmdW5jdGlvbiB3SmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB5SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/dkplKHUsYyx4SmV8YkplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfXhlZS5leHBvcnRzPXdKZX0pO3ZhciBxc3Q9SCgodktuLHdlZSk9Pnt2YXIgU0plPU1sKCk7ZnVuY3Rpb24gTUplKGUpe3JldHVybiBlPT09ZSYmIVNKZShlKX13ZWUuZXhwb3J0cz1NSmV9KTt2YXIgTWVlPUgoKHhLbixTZWUpPT57dmFyIEVKZT1xc3QoKSxUSmU9QWQoKTtmdW5jdGlvbiBDSmUoZSl7Zm9yKHZhciB0PVRKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxFSmUoaSldfXJldHVybiB0fVNlZS5leHBvcnRzPUNKZX0pO3ZhciBHc3Q9SCgoYktuLEVlZSk9PntmdW5jdGlvbiBBSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fUVlZS5leHBvcnRzPUFKZX0pO3ZhciBDZWU9SCgod0tuLFRlZSk9Pnt2YXIgUEplPWJlZSgpLElKZT1NZWUoKSxMSmU9R3N0KCk7ZnVuY3Rpb24ga0plKGUpe3ZhciB0PUlKZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/TEplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxQSmUocixlLHQpfX1UZWUuZXhwb3J0cz1rSmV9KTt2YXIgWnY9SCgoU0tuLEFlZSk9Pnt2YXIgUkplPXMwKCksTkplPVl1KCksREplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIE9KZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxOSmUoZSkmJlJKZShlKT09REplfUFlZS5leHBvcnRzPU9KZX0pO3ZhciBRQj1IKChNS24sUGVlKT0+e3ZhciB6SmU9VGkoKSxGSmU9WnYoKSxCSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sSEplPS9eXHcqJC87ZnVuY3Rpb24gVkplKGUsdCl7aWYoekplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8RkplKGUpPyEwOkhKZS50ZXN0KGUpfHwhQkplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVBlZS5leHBvcnRzPVZKZX0pO3ZhciBrZWU9SCgoRUtuLExlZSk9Pnt2YXIgSWVlPUZCKCksVUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihVSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fEllZSkscn1Xc3QuQ2FjaGU9SWVlO0xlZS5leHBvcnRzPVdzdH0pO3ZhciBOZWU9SCgoVEtuLFJlZSk9Pnt2YXIgcUplPWtlZSgpLEdKZT01MDA7ZnVuY3Rpb24gV0plKGUpe3ZhciB0PXFKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1HSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoQ0tuLERlZSk9Pnt2YXIgWUplPU5lZSgpLGpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxYSmU9L1xcKFxcKT8vZywkSmU9WUplKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoakplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShYSmUsIiQxIik6bnx8cil9KSx0fSk7RGVlLmV4cG9ydHM9JEplfSk7dmFyIFY0PUgoKEFLbix6ZWUpPT57ZnVuY3Rpb24gS0plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9emVlLmV4cG9ydHM9S0plfSk7dmFyIHFlZT1IKChQS24sVWVlKT0+e3ZhciBGZWU9anYoKSxaSmU9VjQoKSxKSmU9VGkoKSxRSmU9WnYoKSx0UWU9MS8wLEJlZT1GZWU/RmVlLnByb3RvdHlwZTp2b2lkIDAsSGVlPUJlZT9CZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFZlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoSkplKGUpKXJldHVybiBaSmUoZSxWZWUpKyIiO2lmKFFKZShlKSlyZXR1cm4gSGVlP0hlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tdFFlPyItMCI6dH1VZWUuZXhwb3J0cz1WZWV9KTt2YXIgWXN0PUgoKElLbixHZWUpPT57dmFyIGVRZT1xZWUoKTtmdW5jdGlvbiByUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6ZVFlKGUpfUdlZS5leHBvcnRzPXJRZX0pO3ZhciBVND1IKChMS24sV2VlKT0+e3ZhciBuUWU9VGkoKSxpUWU9UUIoKSxvUWU9T2VlKCksYVFlPVlzdCgpO2Z1bmN0aW9uIHNRZShlLHQpe3JldHVybiBuUWUoZSk/ZTppUWUoZSx0KT9bZV06b1FlKGFRZShlKSl9V2VlLmV4cG9ydHM9c1FlfSk7dmFyICRTPUgoKGtLbixZZWUpPT57dmFyIGxRZT1adigpLGNRZT0xLzA7ZnVuY3Rpb24gdVFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8bFFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tY1FlPyItMCI6dH1ZZWUuZXhwb3J0cz11UWV9KTt2YXIgcTQ9SCgoUktuLGplZSk9Pnt2YXIgaFFlPVU0KCksZlFlPSRTKCk7ZnVuY3Rpb24gcFFlKGUsdCl7dD1oUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2ZRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1qZWUuZXhwb3J0cz1wUWV9KTt2YXIgJGVlPUgoKE5LbixYZWUpPT57dmFyIGRRZT1xNCgpO2Z1bmN0aW9uIG1RZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6ZFFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufVhlZS5leHBvcnRzPW1RZX0pO3ZhciBaZWU9SCgoREtuLEtlZSk9PntmdW5jdGlvbiBnUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9S2VlLmV4cG9ydHM9Z1FlfSk7dmFyIGpzdD1IKChPS24sSmVlKT0+e3ZhciBfUWU9VTQoKSx5UWU9cVMoKSx2UWU9VGkoKSx4UWU9UjQoKSxiUWU9SEIoKSx3UWU9JFMoKTtmdW5jdGlvbiBTUWUoZSx0LHIpe3Q9X1FlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPXdRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJmJRZShpKSYmeFFlKGEsaSkmJih2UWUoZSl8fHlRZShlKSkpfUplZS5leHBvcnRzPVNRZX0pO3ZhciBYc3Q9SCgoektuLFFlZSk9Pnt2YXIgTVFlPVplZSgpLEVRZT1qc3QoKTtmdW5jdGlvbiBUUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmRVFlKGUsdCxNUWUpfVFlZS5leHBvcnRzPVRRZX0pO3ZhciBlcmU9SCgoRktuLHRyZSk9Pnt2YXIgQ1FlPVVzdCgpLEFRZT0kZWUoKSxQUWU9WHN0KCksSVFlPVFCKCksTFFlPXFzdCgpLGtRZT1Hc3QoKSxSUWU9JFMoKSxOUWU9MSxEUWU9MjtmdW5jdGlvbiBPUWUoZSx0KXtyZXR1cm4gSVFlKGUpJiZMUWUodCk/a1FlKFJRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1BUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UFFlKHIsZSk6Q1FlKHQsbixOUWV8RFFlKX19dHJlLmV4cG9ydHM9T1FlfSk7dmFyICRzdD1IKChCS24scnJlKT0+e2Z1bmN0aW9uIHpRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fXJyZS5leHBvcnRzPXpRZX0pO3ZhciBpcmU9SCgoSEtuLG5yZSk9Pnt2YXIgRlFlPXE0KCk7ZnVuY3Rpb24gQlFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRlFlKHQsZSl9fW5yZS5leHBvcnRzPUJRZX0pO3ZhciBhcmU9SCgoVktuLG9yZSk9Pnt2YXIgSFFlPSRzdCgpLFZRZT1pcmUoKSxVUWU9UUIoKSxxUWU9JFMoKTtmdW5jdGlvbiBHUWUoZSl7cmV0dXJuIFVRZShlKT9IUWUocVFlKGUpKTpWUWUoZSl9b3JlLmV4cG9ydHM9R1FlfSk7dmFyIEhmPUgoKFVLbixzcmUpPT57dmFyIFdRZT1DZWUoKSxZUWU9ZXJlKCksalFlPXUwKCksWFFlPVRpKCksJFFlPWFyZSgpO2Z1bmN0aW9uIEtRZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP2pRZTp0eXBlb2YgZT09Im9iamVjdCI/WFFlKGUpP1lRZShlWzBdLGVbMV0pOldRZShlKTokUWUoZSl9c3JlLmV4cG9ydHM9S1FlfSk7dmFyIEtzdD1IKChxS24sbHJlKT0+e3ZhciBaUWU9eXN0KCksSlFlPVV0ZSgpLFFRZT1IZigpLHR0cj1UaSgpO2Z1bmN0aW9uIGV0cihlLHQpe3ZhciByPXR0cihlKT9aUWU6SlFlO3JldHVybiByKGUsUVFlKHQsMykpfWxyZS5leHBvcnRzPWV0cn0pO3ZhciB1cmU9SCgoR0tuLGNyZSk9Pnt2YXIgcnRyPU9iamVjdC5wcm90b3R5cGUsbnRyPXJ0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBpdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmbnRyLmNhbGwoZSx0KX1jcmUuZXhwb3J0cz1pdHJ9KTt2YXIgWnN0PUgoKFdLbixocmUpPT57dmFyIG90cj11cmUoKSxhdHI9anN0KCk7ZnVuY3Rpb24gc3RyKGUsdCl7cmV0dXJuIGUhPW51bGwmJmF0cihlLHQsb3RyKX1ocmUuZXhwb3J0cz1zdHJ9KTt2YXIgcHJlPUgoKFlLbixmcmUpPT57dmFyIGx0cj1VQigpLGN0cj1LdigpLHV0cj1xUygpLGh0cj1UaSgpLGZ0cj1CZigpLHB0cj1YdigpLGR0cj16NCgpLG10cj1ZUygpLGd0cj0iW29iamVjdCBNYXBdIixfdHI9IltvYmplY3QgU2V0XSIseXRyPU9iamVjdC5wcm90b3R5cGUsdnRyPXl0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4dHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihmdHIoZSkmJihodHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxwdHIoZSl8fG10cihlKXx8dXRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9Y3RyKGUpO2lmKHQ9PWd0cnx8dD09X3RyKXJldHVybiFlLnNpemU7aWYoZHRyKGUpKXJldHVybiFsdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKHZ0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9ZnJlLmV4cG9ydHM9eHRyfSk7dmFyIEpzdD1IKChqS24sZHJlKT0+e2Z1bmN0aW9uIGJ0cihlKXtyZXR1cm4gZT09PXZvaWQgMH1kcmUuZXhwb3J0cz1idHJ9KTt2YXIgUXN0PUgoKFhLbixtcmUpPT57dmFyIHd0cj1INCgpLFN0cj1CZigpO2Z1bmN0aW9uIE10cihlLHQpe3ZhciByPS0xLG49U3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gd3RyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59bXJlLmV4cG9ydHM9TXRyfSk7dmFyIHRsdD1IKCgkS24sZ3JlKT0+e3ZhciBFdHI9VjQoKSxUdHI9SGYoKSxDdHI9UXN0KCksQXRyPVRpKCk7ZnVuY3Rpb24gUHRyKGUsdCl7dmFyIHI9QXRyKGUpP0V0cjpDdHI7cmV0dXJuIHIoZSxUdHIodCwzKSl9Z3JlLmV4cG9ydHM9UHRyfSk7dmFyIHlyZT1IKChLS24sX3JlKT0+e2Z1bmN0aW9uIEl0cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfV9yZS5leHBvcnRzPUl0cn0pO3ZhciB4cmU9SCgoWktuLHZyZSk9PntmdW5jdGlvbiBMdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9dnJlLmV4cG9ydHM9THRyfSk7dmFyIGVsdD1IKChKS24sYnJlKT0+e3ZhciBrdHI9eXJlKCksUnRyPUg0KCksTnRyPUhmKCksRHRyPXhyZSgpLE90cj1UaSgpO2Z1bmN0aW9uIHp0cihlLHQscil7dmFyIG49T3RyKGUpP2t0cjpEdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxOdHIodCw0KSxyLGksUnRyKX1icmUuZXhwb3J0cz16dHJ9KTt2YXIgU3JlPUgoKFFLbix3cmUpPT57dmFyIEZ0cj1zMCgpLEJ0cj1UaSgpLEh0cj1ZdSgpLFZ0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBVdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IUJ0cihlKSYmSHRyKGUpJiZGdHIoZSk9PVZ0cn13cmUuZXhwb3J0cz1VdHJ9KTt2YXIgRXJlPUgoKHRabixNcmUpPT57dmFyIHF0cj0kc3QoKSxHdHI9cXRyKCJsZW5ndGgiKTtNcmUuZXhwb3J0cz1HdHJ9KTt2YXIgQ3JlPUgoKGVabixUcmUpPT57dmFyIFd0cj0iXFx1ZDgwMC1cXHVkZmZmIixZdHI9IlxcdTAzMDAtXFx1MDM2ZiIsanRyPSJcXHVmZTIwLVxcdWZlMmYiLFh0cj0iXFx1MjBkMC1cXHUyMGZmIiwkdHI9WXRyK2p0citYdHIsS3RyPSJcXHVmZTBlXFx1ZmUwZiIsWnRyPSJcXHUyMDBkIixKdHI9UmVnRXhwKCJbIitadHIrV3RyKyR0citLdHIrIl0iKTtmdW5jdGlvbiBRdHIoZSl7cmV0dXJuIEp0ci50ZXN0KGUpfVRyZS5leHBvcnRzPVF0cn0pO3ZhciBPcmU9SCgoclpuLERyZSk9Pnt2YXIgUHJlPSJcXHVkODAwLVxcdWRmZmYiLHRlcj0iXFx1MDMwMC1cXHUwMzZmIixlZXI9IlxcdWZlMjAtXFx1ZmUyZiIscmVyPSJcXHUyMGQwLVxcdTIwZmYiLG5lcj10ZXIrZWVyK3JlcixpZXI9IlxcdWZlMGVcXHVmZTBmIixvZXI9IlsiK1ByZSsiXSIscmx0PSJbIituZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixhZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLElyZT0iW14iK1ByZSsiXSIsTHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixrcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLHNlcj0iXFx1MjAwZCIsUnJlPWFlcisiPyIsTnJlPSJbIitpZXIrIl0/IixsZXI9Iig/OiIrc2VyKyIoPzoiK1tJcmUsTHJlLGtyZV0uam9pbigifCIpKyIpIitOcmUrUnJlKyIpKiIsY2VyPU5yZStScmUrbGVyLHVlcj0iKD86IitbSXJlK3JsdCsiPyIscmx0LExyZSxrcmUsb2VyXS5qb2luKCJ8IikrIikiLEFyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK3VlcitjZXIsImciKTtmdW5jdGlvbiBoZXIoZSl7Zm9yKHZhciB0PUFyZS5sYXN0SW5kZXg9MDtBcmUudGVzdChlKTspKyt0O3JldHVybiB0fURyZS5leHBvcnRzPWhlcn0pO3ZhciBGcmU9SCgoblpuLHpyZSk9Pnt2YXIgZmVyPUVyZSgpLHBlcj1DcmUoKSxkZXI9T3JlKCk7ZnVuY3Rpb24gbWVyKGUpe3JldHVybiBwZXIoZSk/ZGVyKGUpOmZlcihlKX16cmUuZXhwb3J0cz1tZXJ9KTt2YXIgSHJlPUgoKGlabixCcmUpPT57dmFyIGdlcj1VQigpLF9lcj1LdigpLHllcj1CZigpLHZlcj1TcmUoKSx4ZXI9RnJlKCksYmVyPSJbb2JqZWN0IE1hcF0iLHdlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBTZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih5ZXIoZSkpcmV0dXJuIHZlcihlKT94ZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9X2VyKGUpO3JldHVybiB0PT1iZXJ8fHQ9PXdlcj9lLnNpemU6Z2VyKGUpLmxlbmd0aH1CcmUuZXhwb3J0cz1TZXJ9KTt2YXIgVXJlPUgoKG9abixWcmUpPT57dmFyIE1lcj1CQigpLEVlcj1Mc3QoKSxUZXI9JEIoKSxDZXI9SGYoKSxBZXI9QjQoKSxQZXI9VGkoKSxJZXI9WHYoKSxMZXI9RlMoKSxrZXI9TWwoKSxSZXI9WVMoKTtmdW5jdGlvbiBOZXIoZSx0LHIpe3ZhciBuPVBlcihlKSxpPW58fEllcihlKXx8UmVyKGUpO2lmKHQ9Q2VyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTprZXIoZSk/cj1MZXIobyk/RWVyKEFlcihlKSk6e306cj17fX1yZXR1cm4oaT9NZXI6VGVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9VnJlLmV4cG9ydHM9TmVyfSk7dmFyIFlyZT1IKChhWm4sV3JlKT0+e3ZhciBxcmU9anYoKSxEZXI9cVMoKSxPZXI9VGkoKSxHcmU9cXJlP3FyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIHplcihlKXtyZXR1cm4gT2VyKGUpfHxEZXIoZSl8fCEhKEdyZSYmZSYmZVtHcmVdKX1XcmUuZXhwb3J0cz16ZXJ9KTt2YXIgdEg9SCgoc1puLFhyZSk9Pnt2YXIgRmVyPUdCKCksQmVyPVlyZSgpO2Z1bmN0aW9uIGpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPUJlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP2pyZShzLHQtMSxyLG4saSk6RmVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfVhyZS5leHBvcnRzPWpyZX0pO3ZhciBLcmU9SCgobFpuLCRyZSk9PntmdW5jdGlvbiBIZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX0kcmUuZXhwb3J0cz1IZXJ9KTt2YXIgaWx0PUgoKGNabixKcmUpPT57dmFyIFZlcj1LcmUoKSxacmU9TWF0aC5tYXg7ZnVuY3Rpb24gVWVyKGUsdCxyKXtyZXR1cm4gdD1acmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1acmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxWZXIoZSx0aGlzLHMpfX1KcmUuZXhwb3J0cz1VZXJ9KTt2YXIgZW5lPUgoKHVabix0bmUpPT57dmFyIHFlcj1qQigpLFFyZT1mc3QoKSxHZXI9dTAoKSxXZXI9UXJlP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIFFyZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnFlcih0KSx3cml0YWJsZTohMH0pfTpHZXI7dG5lLmV4cG9ydHM9V2VyfSk7dmFyIG5uZT1IKChoWm4scm5lKT0+e3ZhciBZZXI9ODAwLGplcj0xNixYZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gJGVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPVhlcigpLGk9amVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49WWVyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXJuZS5leHBvcnRzPSRlcn0pO3ZhciBvbHQ9SCgoZlpuLGluZSk9Pnt2YXIgS2VyPWVuZSgpLFplcj1ubmUoKSxKZXI9WmVyKEtlcik7aW5lLmV4cG9ydHM9SmVyfSk7dmFyIEc0PUgoKHBabixvbmUpPT57dmFyIFFlcj11MCgpLHRycj1pbHQoKSxlcnI9b2x0KCk7ZnVuY3Rpb24gcnJyKGUsdCl7cmV0dXJuIGVycih0cnIoZSx0LFFlciksZSsiIil9b25lLmV4cG9ydHM9cnJyfSk7dmFyIGFsdD1IKChkWm4sYW5lKT0+e2Z1bmN0aW9uIG5ycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX1hbmUuZXhwb3J0cz1ucnJ9KTt2YXIgbG5lPUgoKG1abixzbmUpPT57ZnVuY3Rpb24gaXJyKGUpe3JldHVybiBlIT09ZX1zbmUuZXhwb3J0cz1pcnJ9KTt2YXIgdW5lPUgoKGdabixjbmUpPT57ZnVuY3Rpb24gb3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfWNuZS5leHBvcnRzPW9ycn0pO3ZhciBmbmU9SCgoX1puLGhuZSk9Pnt2YXIgYXJyPWFsdCgpLHNycj1sbmUoKSxscnI9dW5lKCk7ZnVuY3Rpb24gY3JyKGUsdCxyKXtyZXR1cm4gdD09PXQ/bHJyKGUsdCxyKTphcnIoZSxzcnIscil9aG5lLmV4cG9ydHM9Y3JyfSk7dmFyIGRuZT1IKCh5Wm4scG5lKT0+e3ZhciB1cnI9Zm5lKCk7ZnVuY3Rpb24gaHJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmdXJyKGUsdCwwKT4tMX1wbmUuZXhwb3J0cz1ocnJ9KTt2YXIgZ25lPUgoKHZabixtbmUpPT57ZnVuY3Rpb24gZnJyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX1tbmUuZXhwb3J0cz1mcnJ9KTt2YXIgeW5lPUgoKHhabixfbmUpPT57ZnVuY3Rpb24gcHJyKCl7fV9uZS5leHBvcnRzPXBycn0pO3ZhciB4bmU9SCgoYlpuLHZuZSk9Pnt2YXIgc2x0PVNzdCgpLGRycj15bmUoKSxtcnI9WkIoKSxncnI9MS8wLF9ycj1zbHQmJjEvbXJyKG5ldyBzbHQoWywtMF0pKVsxXT09Z3JyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTpkcnI7dm5lLmV4cG9ydHM9X3JyfSk7dmFyIHduZT1IKCh3Wm4sYm5lKT0+e3ZhciB5cnI9enN0KCksdnJyPWRuZSgpLHhycj1nbmUoKSxicnI9RnN0KCksd3JyPXhuZSgpLFNycj1aQigpLE1ycj0yMDA7ZnVuY3Rpb24gRXJyKGUsdCxyKXt2YXIgbj0tMSxpPXZycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9eHJyO2Vsc2UgaWYobz49TXJyKXt2YXIgYz10P251bGw6d3JyKGUpO2lmKGMpcmV0dXJuIFNycihjKTthPSExLGk9YnJyLGw9bmV3IHlycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9Ym5lLmV4cG9ydHM9RXJyfSk7dmFyIGxsdD1IKChTWm4sU25lKT0+e3ZhciBUcnI9QmYoKSxDcnI9WXUoKTtmdW5jdGlvbiBBcnIoZSl7cmV0dXJuIENycihlKSYmVHJyKGUpfVNuZS5leHBvcnRzPUFycn0pO3ZhciBFbmU9SCgoTVpuLE1uZSk9Pnt2YXIgUHJyPXRIKCksSXJyPUc0KCksTHJyPXduZSgpLGtycj1sbHQoKSxScnI9SXJyKGZ1bmN0aW9uKGUpe3JldHVybiBMcnIoUHJyKGUsMSxrcnIsITApKX0pO01uZS5leHBvcnRzPVJycn0pO3ZhciBDbmU9SCgoRVpuLFRuZSk9Pnt2YXIgTnJyPVY0KCk7ZnVuY3Rpb24gRHJyKGUsdCl7cmV0dXJuIE5ycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9VG5lLmV4cG9ydHM9RHJyfSk7dmFyIGNsdD1IKChUWm4sQW5lKT0+e3ZhciBPcnI9Q25lKCksenJyPUFkKCk7ZnVuY3Rpb24gRnJyKGUpe3JldHVybiBlPT1udWxsP1tdOk9ycihlLHpycihlKSl9QW5lLmV4cG9ydHM9RnJyfSk7dmFyIEVsPUgoKENabixQbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOkF0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5OnByZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOkFkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkhyZSgpLHRyYW5zZm9ybTpVcmUoKSx1bmlvbjpFbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtQbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChQWm4sUm5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9RWwoKTtSbmUuZXhwb3J0cz1jcjt2YXIgQnJyPSJcMCIsSnY9IlwwIixJbmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0p2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SnYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSnZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1KdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09SnYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPUp2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PUp2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUhycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLExuZSh0aGlzLl9wcmVkc1t0XSxlKSxMbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sa25lKHRoaXMuX3ByZWRzW3RdLGUpLGtuZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBMbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24ga25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrSW5lK28rSW5lKyhqZS5pc1VuZGVmaW5lZChuKT9CcnI6bil9ZnVuY3Rpb24gSHJyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIERuZT1IKChJWm4sTm5lKT0+e05uZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgem5lPUgoKExabixPbmUpPT57T25lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpEbmUoKX19KTt2YXIgQm5lPUgoKGtabixGbmUpPT57dmFyIFZmPUVsKCksVnJyPXJIKCk7Rm5lLmV4cG9ydHM9e3dyaXRlOlVycixyZWFkOldycn07ZnVuY3Rpb24gVXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOnFycihlKSxlZGdlczpHcnIoZSl9O3JldHVybiBWZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1WZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIHFycihlKXtyZXR1cm4gVmYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBWZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVmYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gR3JyKGUpe3JldHVybiBWZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFZmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxWZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uIFdycihlKXt2YXIgdD1uZXcgVnJyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFZmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVmYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgVm5lPUgoKFJabixIbmUpPT57dmFyIG5IPUVsKCk7SG5lLmV4cG9ydHM9WXJyO2Z1bmN0aW9uIFlycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChOWm4scW5lKT0+e3ZhciBVbmU9RWwoKTtxbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFVuZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFVbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoRFpuLEduZSk9Pnt2YXIganJyPUVsKCksWHJyPWhsdCgpO0duZS5leHBvcnRzPUtycjt2YXIgJHJyPWpyci5jb25zdGFudCgxKTtmdW5jdGlvbiBLcnIoZSx0LHIsbil7cmV0dXJuIFpycihlLFN0cmluZyh0KSxyfHwkcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBacnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgWHJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgWW5lPUgoKE9abixXbmUpPT57dmFyIEpycj1mbHQoKSxRcnI9RWwoKTtXbmUuZXhwb3J0cz10bnI7ZnVuY3Rpb24gdG5yKGUsdCxyKXtyZXR1cm4gUXJyLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPUpycihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoelpuLFhuZSk9Pnt2YXIgam5lPUVsKCk7WG5lLmV4cG9ydHM9ZW5yO2Z1bmN0aW9uIGVucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7am5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtqbmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciBLbmU9SCgoRlpuLCRuZSk9Pnt2YXIgcm5yPUVsKCksbm5yPXBsdCgpOyRuZS5leHBvcnRzPWlucjtmdW5jdGlvbiBpbnIoZSl7cmV0dXJuIHJuci5maWx0ZXIobm5yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIEpuZT1IKChCWm4sWm5lKT0+e3ZhciBvbnI9RWwoKTtabmUuZXhwb3J0cz1zbnI7dmFyIGFucj1vbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gc25yKGUsdCxyKXtyZXR1cm4gbG5yKGUsdHx8YW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gbG5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKChIWm4sdGllKT0+e3ZhciBZND1FbCgpO3RpZS5leHBvcnRzPVFuZTtRbmUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gUW5lKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgbmllPUgoKFZabixyaWUpPT57dmFyIGVpZT1kbHQoKTtyaWUuZXhwb3J0cz1jbnI7ZnVuY3Rpb24gY25yKGUpe3RyeXtlaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIGVpZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoVVpuLG9pZSk9Pnt2YXIgb0g9RWwoKTtvaWUuZXhwb3J0cz11bnI7ZnVuY3Rpb24gdW5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtpaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBpaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2lpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBzaWU9SCgocVpuLGFpZSk9Pnt2YXIgaG5yPW1sdCgpO2FpZS5leHBvcnRzPWZucjtmdW5jdGlvbiBmbnIoZSx0KXtyZXR1cm4gaG5yKGUsdCwicG9zdCIpfX0pO3ZhciBjaWU9SCgoR1puLGxpZSk9Pnt2YXIgcG5yPW1sdCgpO2xpZS5leHBvcnRzPWRucjtmdW5jdGlvbiBkbnIoZSx0KXtyZXR1cm4gcG5yKGUsdCwicHJlIil9fSk7dmFyIGZpZT1IKChXWm4saGllKT0+e3ZhciB1aWU9RWwoKSxtbnI9ckgoKSxnbnI9aGx0KCk7aGllLmV4cG9ydHM9X25yO2Z1bmN0aW9uIF9ucihlLHQpe3ZhciByPW5ldyBtbnIsbj17fSxpPW5ldyBnbnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7dWllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSx1aWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIGRpZT1IKChZWm4scGllKT0+e3BpZS5leHBvcnRzPXtjb21wb25lbnRzOlZuZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOlluZSgpLGZpbmRDeWNsZXM6S25lKCksZmxveWRXYXJzaGFsbDpKbmUoKSxpc0FjeWNsaWM6bmllKCkscG9zdG9yZGVyOnNpZSgpLHByZW9yZGVyOmNpZSgpLHByaW06ZmllKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIF9pZT1IKChqWm4sZ2llKT0+e3ZhciBtaWU9em5lKCk7Z2llLmV4cG9ydHM9e0dyYXBoOm1pZS5HcmFwaCxqc29uOkJuZSgpLGFsZzpkaWUoKSx2ZXJzaW9uOm1pZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChYWm4seWllKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPV9pZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7eWllLmV4cG9ydHM9YUh9KTt2YXIgeGllPUgoKEtabix2aWUpPT57dmFyIHlucj1Sc3QoKSx2bnI9MSx4bnI9NDtmdW5jdGlvbiBibnIoZSl7cmV0dXJuIHlucihlLHZucnx4bnIpfXZpZS5leHBvcnRzPWJucn0pO3ZhciBqND1IKChaWm4sYmllKT0+e3ZhciB3bnI9WXYoKSxTbnI9QmYoKSxNbnI9UjQoKSxFbnI9TWwoKTtmdW5jdGlvbiBUbnIoZSx0LHIpe2lmKCFFbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP1NucihyKSYmTW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP3ducihyW3RdLGUpOiExfWJpZS5leHBvcnRzPVRucn0pO3ZhciBNaWU9SCgoSlpuLFNpZSk9Pnt2YXIgQ25yPUc0KCksQW5yPVl2KCksUG5yPWo0KCksSW5yPWMwKCksd2llPU9iamVjdC5wcm90b3R5cGUsTG5yPXdpZS5oYXNPd25Qcm9wZXJ0eSxrbnI9Q25yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUG5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9SW5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxBbnIodSx3aWVbY10pJiYhTG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7U2llLmV4cG9ydHM9a25yfSk7dmFyIFRpZT1IKChRWm4sRWllKT0+e3ZhciBSbnI9SGYoKSxObnI9QmYoKSxEbnI9QWQoKTtmdW5jdGlvbiBPbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIU5ucih0KSl7dmFyIG89Um5yKHIsMyk7dD1EbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19RWllLmV4cG9ydHM9T25yfSk7dmFyIEFpZT1IKCh0Sm4sQ2llKT0+e3ZhciB6bnI9L1xzLztmdW5jdGlvbiBGbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmem5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9Q2llLmV4cG9ydHM9Rm5yfSk7dmFyIElpZT1IKChlSm4sUGllKT0+e3ZhciBCbnI9QWllKCksSG5yPS9eXHMrLztmdW5jdGlvbiBWbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxCbnIoZSkrMSkucmVwbGFjZShIbnIsIiIpfVBpZS5leHBvcnRzPVZucn0pO3ZhciBOaWU9SCgockpuLFJpZSk9Pnt2YXIgVW5yPUlpZSgpLExpZT1NbCgpLHFucj1adigpLGtpZT0wLzAsR25yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLFducj0vXjBiWzAxXSskL2ksWW5yPS9eMG9bMC03XSskL2ksam5yPXBhcnNlSW50O2Z1bmN0aW9uIFhucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYocW5yKGUpKXJldHVybiBraWU7aWYoTGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1MaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVVucihlKTt2YXIgcj1XbnIudGVzdChlKTtyZXR1cm4gcnx8WW5yLnRlc3QoZSk/am5yKGUuc2xpY2UoMikscj8yOjgpOkduci50ZXN0KGUpP2tpZTorZX1SaWUuZXhwb3J0cz1YbnJ9KTt2YXIgZ2x0PUgoKG5KbixPaWUpPT57dmFyICRucj1OaWUoKSxEaWU9MS8wLEtucj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gWm5yKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT0kbnIoZSksZT09PURpZXx8ZT09PS1EaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0Kktucn1yZXR1cm4gZT09PWU/ZTowfU9pZS5leHBvcnRzPVpucn0pO3ZhciBGaWU9SCgoaUpuLHppZSk9Pnt2YXIgSm5yPWdsdCgpO2Z1bmN0aW9uIFFucihlKXt2YXIgdD1KbnIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH16aWUuZXhwb3J0cz1RbnJ9KTt2YXIgSGllPUgoKG9KbixCaWUpPT57dmFyIHRpcj1hbHQoKSxlaXI9SGYoKSxyaXI9RmllKCksbmlyPU1hdGgubWF4O2Z1bmN0aW9uIGlpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDpyaXIocik7cmV0dXJuIGk8MCYmKGk9bmlyKG4raSwwKSksdGlyKGUsZWlyKHQsMyksaSl9QmllLmV4cG9ydHM9aWlyfSk7dmFyIFVpZT1IKChhSm4sVmllKT0+e3ZhciBvaXI9VGllKCksYWlyPUhpZSgpLHNpcj1vaXIoYWlyKTtWaWUuZXhwb3J0cz1zaXJ9KTt2YXIgX2x0PUgoKHNKbixxaWUpPT57dmFyIGxpcj10SCgpO2Z1bmN0aW9uIGNpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/bGlyKGUsMSk6W119cWllLmV4cG9ydHM9Y2lyfSk7dmFyIFdpZT1IKChsSm4sR2llKT0+e3ZhciB1aXI9WEIoKSxoaXI9TnN0KCksZmlyPWMwKCk7ZnVuY3Rpb24gcGlyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTp1aXIoZSxoaXIodCksZmlyKX1HaWUuZXhwb3J0cz1waXJ9KTt2YXIgamllPUgoKGNKbixZaWUpPT57ZnVuY3Rpb24gZGlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfVlpZS5leHBvcnRzPWRpcn0pO3ZhciAkaWU9SCgodUpuLFhpZSk9Pnt2YXIgbWlyPUk0KCksZ2lyPSRCKCksX2lyPUhmKCk7ZnVuY3Rpb24geWlyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9X2lyKHQsMyksZ2lyKGUsZnVuY3Rpb24obixpLG8pe21pcihyLGksdChuLGksbykpfSkscn1YaWUuZXhwb3J0cz15aXJ9KTt2YXIgc0g9SCgoaEpuLEtpZSk9Pnt2YXIgdmlyPVp2KCk7ZnVuY3Rpb24geGlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhdmlyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9S2llLmV4cG9ydHM9eGlyfSk7dmFyIEppZT1IKChmSm4sWmllKT0+e2Z1bmN0aW9uIGJpcihlLHQpe3JldHVybiBlPnR9WmllLmV4cG9ydHM9YmlyfSk7dmFyIHRvZT1IKChwSm4sUWllKT0+e3ZhciB3aXI9c0goKSxTaXI9SmllKCksTWlyPXUwKCk7ZnVuY3Rpb24gRWlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD93aXIoZSxNaXIsU2lyKTp2b2lkIDB9UWllLmV4cG9ydHM9RWlyfSk7dmFyIHlsdD1IKChkSm4sZW9lKT0+e3ZhciBUaXI9STQoKSxDaXI9WXYoKTtmdW5jdGlvbiBBaXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhQ2lyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJlRpcihlLHQscil9ZW9lLmV4cG9ydHM9QWlyfSk7dmFyIGlvZT1IKChtSm4sbm9lKT0+e3ZhciBQaXI9czAoKSxJaXI9QjQoKSxMaXI9WXUoKSxraXI9IltvYmplY3QgT2JqZWN0XSIsUmlyPUZ1bmN0aW9uLnByb3RvdHlwZSxOaXI9T2JqZWN0LnByb3RvdHlwZSxyb2U9UmlyLnRvU3RyaW5nLERpcj1OaXIuaGFzT3duUHJvcGVydHksT2lyPXJvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gemlyKGUpe2lmKCFMaXIoZSl8fFBpcihlKSE9a2lyKXJldHVybiExO3ZhciB0PUlpcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1EaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJnJvZS5jYWxsKHIpPT1PaXJ9bm9lLmV4cG9ydHM9emlyfSk7dmFyIHZsdD1IKChnSm4sb29lKT0+e2Z1bmN0aW9uIEZpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19b29lLmV4cG9ydHM9RmlyfSk7dmFyIHNvZT1IKChfSm4sYW9lKT0+e3ZhciBCaXI9VVMoKSxIaXI9YzAoKTtmdW5jdGlvbiBWaXIoZSl7cmV0dXJuIEJpcihlLEhpcihlKSl9YW9lLmV4cG9ydHM9VmlyfSk7dmFyIHBvZT1IKCh5Sm4sZm9lKT0+e3ZhciBsb2U9eWx0KCksVWlyPWdzdCgpLHFpcj1Jc3QoKSxHaXI9X3N0KCksV2lyPWtzdCgpLGNvZT1xUygpLHVvZT1UaSgpLFlpcj1sbHQoKSxqaXI9WHYoKSxYaXI9RlMoKSwkaXI9TWwoKSxLaXI9aW9lKCksWmlyPVlTKCksaG9lPXZsdCgpLEppcj1zb2UoKTtmdW5jdGlvbiBRaXIoZSx0LHIsbixpLG8sYSl7dmFyIHM9aG9lKGUsciksbD1ob2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2xvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj11b2UobCkscD0hZiYmamlyKGwpLGQ9IWYmJiFwJiZaaXIobCk7dT1sLGZ8fHB8fGQ/dW9lKHMpP3U9czpZaXIocyk/dT1HaXIocyk6cD8oaD0hMSx1PVVpcihsLCEwKSk6ZD8oaD0hMSx1PXFpcihsLCEwKSk6dT1bXTpLaXIobCl8fGNvZShsKT8odT1zLGNvZShzKT91PUppcihzKTooISRpcihzKXx8WGlyKHMpKSYmKHU9V2lyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGxvZShlLHIsdSl9Zm9lLmV4cG9ydHM9UWlyfSk7dmFyIGdvZT1IKCh2Sm4sbW9lKT0+e3ZhciB0b3I9UDQoKSxlb3I9eWx0KCkscm9yPVhCKCksbm9yPXBvZSgpLGlvcj1NbCgpLG9vcj1jMCgpLGFvcj12bHQoKTtmdW5jdGlvbiBkb2UoZSx0LHIsbixpKXtlIT09dCYmcm9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgdG9yKSxpb3Iobykpbm9yKGUsdCxhLHIsZG9lLG4saSk7ZWxzZXt2YXIgcz1uP24oYW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksZW9yKGUsYSxzKX19LG9vcil9bW9lLmV4cG9ydHM9ZG9lfSk7dmFyIHlvZT1IKCh4Sm4sX29lKT0+e3ZhciBzb3I9RzQoKSxsb3I9ajQoKTtmdW5jdGlvbiBjb3IoZSl7cmV0dXJuIHNvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZsb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfV9vZS5leHBvcnRzPWNvcn0pO3ZhciB4b2U9SCgoYkpuLHZvZSk9Pnt2YXIgdW9yPWdvZSgpLGhvcj15b2UoKSxwb3I9aG9yKGZ1bmN0aW9uKGUsdCxyKXt1b3IoZSx0LHIpfSk7dm9lLmV4cG9ydHM9cG9yfSk7dmFyIHhsdD1IKCh3Sm4sYm9lKT0+e2Z1bmN0aW9uIGRvcihlLHQpe3JldHVybiBlPHR9Ym9lLmV4cG9ydHM9ZG9yfSk7dmFyIFNvZT1IKChTSm4sd29lKT0+e3ZhciBtb3I9c0goKSxnb3I9eGx0KCksX29yPXUwKCk7ZnVuY3Rpb24geW9yKGUpe3JldHVybiBlJiZlLmxlbmd0aD9tb3IoZSxfb3IsZ29yKTp2b2lkIDB9d29lLmV4cG9ydHM9eW9yfSk7dmFyIEVvZT1IKChNSm4sTW9lKT0+e3ZhciB2b3I9c0goKSx4b3I9SGYoKSxib3I9eGx0KCk7ZnVuY3Rpb24gd29yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3ZvcihlLHhvcih0LDIpLGJvcik6dm9pZCAwfU1vZS5leHBvcnRzPXdvcn0pO3ZhciBDb2U9SCgoRUpuLFRvZSk9Pnt2YXIgU29yPUhjKCksTW9yPWZ1bmN0aW9uKCl7cmV0dXJuIFNvci5EYXRlLm5vdygpfTtUb2UuZXhwb3J0cz1Nb3J9KTt2YXIgSW9lPUgoKFRKbixQb2UpPT57dmFyIEVvcj1MNCgpLFRvcj1VNCgpLENvcj1SNCgpLEFvZT1NbCgpLEFvcj0kUygpO2Z1bmN0aW9uIFBvcihlLHQscixuKXtpZighQW9lKGUpKXJldHVybiBlO3Q9VG9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9QW9yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPUFvZSh1KT91OkNvcih0W2krMV0pP1tdOnt9KX1Fb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Qb2UuZXhwb3J0cz1Qb3J9KTt2YXIga29lPUgoKENKbixMb2UpPT57dmFyIElvcj1xNCgpLExvcj1Jb2UoKSxrb3I9VTQoKTtmdW5jdGlvbiBSb3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9SW9yKGUsYSk7cihzLGEpJiZMb3Iobyxrb3IoYSxlKSxzKX1yZXR1cm4gb31Mb2UuZXhwb3J0cz1Sb3J9KTt2YXIgTm9lPUgoKEFKbixSb2UpPT57dmFyIE5vcj1rb2UoKSxEb3I9WHN0KCk7ZnVuY3Rpb24gT29yKGUsdCl7cmV0dXJuIE5vcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gRG9yKGUsbil9KX1Sb2UuZXhwb3J0cz1Pb3J9KTt2YXIgT29lPUgoKFBKbixEb2UpPT57dmFyIHpvcj1fbHQoKSxGb3I9aWx0KCksQm9yPW9sdCgpO2Z1bmN0aW9uIEhvcihlKXtyZXR1cm4gQm9yKEZvcihlLHZvaWQgMCx6b3IpLGUrIiIpfURvZS5leHBvcnRzPUhvcn0pO3ZhciBGb2U9SCgoSUpuLHpvZSk9Pnt2YXIgVm9yPU5vZSgpLFVvcj1Pb2UoKSxxb3I9VW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306Vm9yKGUsdCl9KTt6b2UuZXhwb3J0cz1xb3J9KTt2YXIgSG9lPUgoKExKbixCb2UpPT57dmFyIEdvcj1NYXRoLmNlaWwsV29yPU1hdGgubWF4O2Z1bmN0aW9uIFlvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz1Xb3IoR29yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfUJvZS5leHBvcnRzPVlvcn0pO3ZhciBVb2U9SCgoa0puLFZvZSk9Pnt2YXIgam9yPUhvZSgpLFhvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiAkb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZYb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxqb3IodCxyLG4sZSl9fVZvZS5leHBvcnRzPSRvcn0pO3ZhciBHb2U9SCgoUkpuLHFvZSk9Pnt2YXIgS29yPVVvZSgpLFpvcj1Lb3IoKTtxb2UuZXhwb3J0cz1ab3J9KTt2YXIgWW9lPUgoKE5KbixXb2UpPT57ZnVuY3Rpb24gSm9yKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX1Xb2UuZXhwb3J0cz1Kb3J9KTt2YXIgJG9lPUgoKERKbixYb2UpPT57dmFyIGpvZT1adigpO2Z1bmN0aW9uIFFvcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPWpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9am9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Yb2UuZXhwb3J0cz1Rb3J9KTt2YXIgWm9lPUgoKE9KbixLb2UpPT57dmFyIHRhcj0kb2UoKTtmdW5jdGlvbiBlYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPXRhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fUtvZS5leHBvcnRzPWVhcn0pO3ZhciBRb2U9SCgoekpuLEpvZSk9Pnt2YXIgd2x0PVY0KCkscmFyPXE0KCksbmFyPUhmKCksaWFyPVFzdCgpLG9hcj1Zb2UoKSxhYXI9TjQoKSxzYXI9Wm9lKCksbGFyPXUwKCksY2FyPVRpKCk7ZnVuY3Rpb24gdWFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBjYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIHJhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bbGFyXTt2YXIgbj0tMTt0PXdsdCh0LGFhcihuYXIpKTt2YXIgaT1pYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gb2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gc2FyKG8sYSxyKX0pfUpvZS5leHBvcnRzPXVhcn0pO3ZhciByYWU9SCgoRkpuLGVhZSk9Pnt2YXIgaGFyPXRIKCksZmFyPVFvZSgpLHBhcj1HNCgpLHRhZT1qNCgpLGRhcj1wYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJnRhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJnRhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZmFyKGUsaGFyKHQsMSksW10pfSk7ZWFlLmV4cG9ydHM9ZGFyfSk7dmFyIGlhZT1IKChCSm4sbmFlKT0+e3ZhciBtYXI9WXN0KCksZ2FyPTA7ZnVuY3Rpb24gX2FyKGUpe3ZhciB0PSsrZ2FyO3JldHVybiBtYXIoZSkrdH1uYWUuZXhwb3J0cz1fYXJ9KTt2YXIgYWFlPUgoKEhKbixvYWUpPT57ZnVuY3Rpb24geWFyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChWSm4sc2FlKT0+e3ZhciB4YXI9TDQoKSxiYXI9YWFlKCk7ZnVuY3Rpb24gd2FyKGUsdCl7cmV0dXJuIGJhcihlfHxbXSx0fHxbXSx4YXIpfXNhZS5leHBvcnRzPXdhcn0pO3ZhciBVbj1IKChVSm4sY2FlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6eGllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpNaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOlVpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjpXaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpqaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOiRpZSgpLG1heDp0b2UoKSxtZXJnZTp4b2UoKSxtaW46U29lKCksbWluQnk6RW9lKCksbm93OkNvZSgpLHBpY2s6Rm9lKCkscmFuZ2U6R29lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTpyYWUoKSx1bmlxdWVJZDppYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmxhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7Y2FlLmV4cG9ydHM9bEh9KTt2YXIgZmFlPUgoKEdKbixoYWUpPT57aGFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiB1YWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmdWFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixTYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIHVhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIFNhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgZGFlPUgoKFdKbixwYWUpPT57dmFyIFBkPVVuKCksTWFyPVVjKCkuR3JhcGgsRWFyPWZhZSgpO3BhZS5leHBvcnRzPUNhcjt2YXIgVGFyPVBkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIENhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UGFyKGUsdHx8VGFyKSxuPUFhcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBQZC5mbGF0dGVuKFBkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIEFhcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBQZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksUGQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUGFyKGUsdCl7dmFyIHI9bmV3IE1hcixuPTAsaT0wO1BkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksUGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89UGQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRWFyfSksYT1uKzE7cmV0dXJuIFBkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciBnYWU9SCgoWUpuLG1hZSk9PnsidXNlIHN0cmljdCI7dmFyIFF2PVVuKCksSWFyPWRhZSgpO21hZS5leHBvcnRzPXtydW46TGFyLHVuZG86UmFyfTtmdW5jdGlvbiBMYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP0lhcihlLHIoZSkpOmthcihlKTtRdi5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksUXYudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24ga2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe1F2LmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLFF2LmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXtRdi5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIFF2LmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gUmFyKGUpe1F2LmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBucz1IKChqSm4seGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9VW4oKSxfYWU9VWMoKS5HcmFwaDt4YWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOnlhZSxzaW1wbGlmeTpOYXIsYXNOb25Db21wb3VuZEdyYXBoOkRhcixzdWNjZXNzb3JXZWlnaHRzOk9hcixwcmVkZWNlc3NvcldlaWdodHM6emFyLGludGVyc2VjdFJlY3Q6RmFyLGJ1aWxkTGF5ZXJNYXRyaXg6QmFyLG5vcm1hbGl6ZVJhbmtzOkhhcixyZW1vdmVFbXB0eVJhbmtzOlZhcixhZGRCb3JkZXJOb2RlOlVhcixtYXhSYW5rOnZhZSxwYXJ0aXRpb246cWFyLHRpbWU6R2FyLG5vdGltZTpXYXJ9O2Z1bmN0aW9uIHlhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIE5hcihlKXt2YXIgdD1uZXcgX2FlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gRGFyKGUpe3ZhciB0PW5ldyBfYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiB6YXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gRmFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIEJhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UodmFlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBVYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx5YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIHZhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIHFhcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBHYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gV2FyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgU2FlPUgoKFhKbix3YWUpPT57InVzZSBzdHJpY3QiO3ZhciBiYWU9VW4oKSxZYXI9bnMoKTt3YWUuZXhwb3J0cz17cnVuOmphcix1bmRvOiRhcn07ZnVuY3Rpb24gamFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxiYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7WGFyKGUsdCl9KX1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9WWFyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uICRhcihlKXtiYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKCRKbixNYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1VbigpO01hZS5leHBvcnRzPXtsb25nZXN0UGF0aDpLYXIsc2xhY2s6WmFyfTtmdW5jdGlvbiBLYXIoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBaYXIoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChLSm4sRWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9VW4oKSxKYXI9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO0VhZS5leHBvcnRzPVFhcjtmdW5jdGlvbiBRYXIoZSl7dmFyIHQ9bmV3IEphcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO3Rzcih0LGUpPG47KWk9ZXNyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLHJzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gdHNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gZXNyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gcnNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciBSYWU9SCgoWkpuLGthZSk9PnsidXNlIHN0cmljdCI7dmFyIElkPVVuKCksbnNyPUVsdCgpLGlzcj1YNCgpLnNsYWNrLG9zcj1YNCgpLmxvbmdlc3RQYXRoLGFzcj1VYygpLmFsZy5wcmVvcmRlcixzc3I9VWMoKS5hbGcucG9zdG9yZGVyLGxzcj1ucygpLnNpbXBsaWZ5O2thZS5leHBvcnRzPXQxO3QxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O3QxLmluaXRDdXRWYWx1ZXM9VGx0O3QxLmNhbGNDdXRWYWx1ZT1DYWU7dDEubGVhdmVFZGdlPVBhZTt0MS5lbnRlckVkZ2U9SWFlO3QxLmV4Y2hhbmdlRWRnZXM9TGFlO2Z1bmN0aW9uIHQxKGUpe2U9bHNyKGUpLG9zcihlKTt2YXIgdD1uc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UGFlKHQpOyluPUlhZSh0LGUsciksTGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPXNzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksSWQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe2NzcihlLHQsbil9KX1mdW5jdGlvbiBjc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUNhZShlLHQscil9ZnVuY3Rpb24gQ2FlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LElkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixoc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLEFhZShlLHt9LDEsdCl9ZnVuY3Rpb24gQWFlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxJZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0lkLmhhcyh0LHMpfHwocj1BYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUGFlKGUpe3JldHVybiBJZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBJYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9SWQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PVRhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09VGFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gSWQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gaXNyKHQsdSl9KX1mdW5jdGlvbiBMYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksdXNyKGUsdCl9ZnVuY3Rpb24gdXNyKGUsdCl7dmFyIHI9SWQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPWFzcihlLHIpO249bi5zbGljZSgxKSxJZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIGhzcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIFRhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciB6YWU9SCgoSkpuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIGZzcj1YNCgpLERhZT1mc3IubG9uZ2VzdFBhdGgscHNyPUVsdCgpLGRzcj1SYWUoKTtPYWUuZXhwb3J0cz1tc3I7ZnVuY3Rpb24gbXNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6TmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6X3NyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpnc3IoZSk7YnJlYWs7ZGVmYXVsdDpOYWUoZSl9fXZhciBnc3I9RGFlO2Z1bmN0aW9uIF9zcihlKXtEYWUoZSkscHNyKGUpfWZ1bmN0aW9uIE5hZShlKXtkc3IoZSl9fSk7dmFyIEJhZT1IKChRSm4sRmFlKT0+e3ZhciBBbHQ9VW4oKTtGYWUuZXhwb3J0cz15c3I7ZnVuY3Rpb24geXNyKGUpe3ZhciB0PXhzcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPXZzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiB2c3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24geHNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFVhZT1IKCh0UW4sVmFlKT0+e3ZhciBMZD1VbigpLFBsdD1ucygpO1ZhZS5leHBvcnRzPXtydW46YnNyLGNsZWFudXA6TXNyfTtmdW5jdGlvbiBic3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPXdzcihlKSxuPUxkLm1heChMZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89U3NyKGUpKzE7TGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7SGFlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gSGFlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLExkLmZvckVhY2gocyxmdW5jdGlvbihoKXtIYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiB3c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJkxkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4gTGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBTc3IoZSl7cmV0dXJuIExkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBNc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyIFdhZT1IKChlUW4sR2FlKT0+e3ZhciBJbHQ9VW4oKSxFc3I9bnMoKTtHYWUuZXhwb3J0cz1Uc3I7ZnVuY3Rpb24gVHNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pcWFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxxYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIHFhZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Fc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciAkYWU9SCgoclFuLFhhZSk9PnsidXNlIHN0cmljdCI7dmFyIFVmPVVuKCk7WGFlLmV4cG9ydHM9e2FkanVzdDpDc3IsdW5kbzpBc3J9O2Z1bmN0aW9uIENzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZqYWUoZSl9ZnVuY3Rpb24gQXNyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlBzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKElzcihlKSxqYWUoZSkpfWZ1bmN0aW9uIGphZShlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtZYWUoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe1lhZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gWWFlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFBzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLExsdCksVWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIElzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLGtsdCksVWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBaYWU9SCgoblFuLEthZSk9PnsidXNlIHN0cmljdCI7dmFyIGtkPVVuKCk7S2FlLmV4cG9ydHM9THNyO2Z1bmN0aW9uIExzcihlKXt2YXIgdD17fSxyPWtkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1rZC5tYXgoa2QubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9a2QubWFwKGtkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIWtkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxrZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9a2Quc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIGtkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBRYWU9SCgoaVFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIGgwPVVuKCk7SmFlLmV4cG9ydHM9a3NyO2Z1bmN0aW9uIGtzcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz1Sc3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnNyKGUsdCxyKXtmb3IodmFyIG49aDAuemlwT2JqZWN0KHIsaDAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWgwLmZsYXR0ZW4oaDAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGgwLnNvcnRCeShoMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9aDAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBoMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIHJzZT1IKChvUW4sZXNlKT0+e3ZhciB0c2U9VW4oKTtlc2UuZXhwb3J0cz1Oc3I7ZnVuY3Rpb24gTnNyKGUsdCl7cmV0dXJuIHRzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPXRzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGlzZT1IKChhUW4sbnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVGw9VW4oKTtuc2UuZXhwb3J0cz1Ec3I7ZnVuY3Rpb24gRHNyKGUsdCl7dmFyIHI9e307VGwuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O1RsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLFRsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshVGwuaXNVbmRlZmluZWQobykmJiFUbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49VGwuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gT3NyKG4pfWZ1bmN0aW9uIE9zcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KFRsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fFRsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmenNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxUbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLFRsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIFRsLm1hcChUbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gVGwucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIHpzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBzc2U9SCgoc1FuLGFzZSk9Pnt2YXIgJDQ9VW4oKSxGc3I9bnMoKTthc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9RnNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoSHNyKCEhdCkpLGw9b3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPW9zZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gb3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBIc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgdXNlPUgoKGxRbixjc2UpPT57dmFyIGYwPVVuKCksVnNyPXJzZSgpLFVzcj1pc2UoKSxxc3I9c3NlKCk7Y3NlLmV4cG9ydHM9bHNlO2Z1bmN0aW9uIGxzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPWYwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9VnNyKGUsaSk7ZjAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWxzZShlLGQudixyLG4pO2xbZC52XT1nLGYwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJldzcihkLGcpfX0pO3ZhciB1PVVzcihjLHIpO0dzcih1LGwpO3ZhciBoPXFzcih1LG4pO2lmKGEmJihoLnZzPWYwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7ZjAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIEdzcihlLHQpe2YwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPWYwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gV3NyKGUsdCl7ZjAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBmc2U9SCgoY1FuLGhzZSk9Pnt2YXIgSzQ9VW4oKSxZc3I9VWMoKS5HcmFwaDtoc2UuZXhwb3J0cz1qc3I7ZnVuY3Rpb24ganNyKGUsdCxyKXt2YXIgbj1Yc3IoZSksaT1uZXcgWXNyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIFhzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIGRzZT1IKCh1UW4scHNlKT0+e3ZhciAkc3I9VW4oKTtwc2UuZXhwb3J0cz1Lc3I7ZnVuY3Rpb24gS3NyKGUsdCxyKXt2YXIgbj17fSxpOyRzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIHZzZT1IKChoUW4seXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcDA9VW4oKSxac3I9WmFlKCksSnNyPVFhZSgpLFFzcj11c2UoKSx0bHI9ZnNlKCksZWxyPWRzZSgpLHJscj1VYygpLkdyYXBoLG1zZT1ucygpO3lzZS5leHBvcnRzPW5scjtmdW5jdGlvbiBubHIoZSl7dmFyIHQ9bXNlLm1heFJhbmsoZSkscj1nc2UoZSxwMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPWdzZShlLHAwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1ac3IoZSk7X3NlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2lscihzJTI/cjpuLHMlND49MiksaT1tc2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1Kc3IoZSxpKTtjPG8mJihsPTAsYT1wMC5jbG9uZURlZXAoaSksbz1jKX1fc2UoZSxhKX1mdW5jdGlvbiBnc2UoZSx0LHIpe3JldHVybiBwMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gdGxyKGUsbixyKX0pfWZ1bmN0aW9uIGlscihlLHQpe3ZhciByPW5ldyBybHI7cDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89UXNyKG4saSxyLHQpO3AwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksZWxyKG4scixvLnZzKX0pfWZ1bmN0aW9uIF9zZShlLHQpe3AwLmZvckVhY2godCxmdW5jdGlvbihyKXtwMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFBzZT1IKChmUW4sQXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9VW4oKSxvbHI9VWMoKS5HcmFwaCxhbHI9bnMoKTtBc2UuZXhwb3J0cz17cG9zaXRpb25YOmNscixmaW5kVHlwZTFDb25mbGljdHM6eHNlLGZpbmRUeXBlMkNvbmZsaWN0czpic2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OndzZSx2ZXJ0aWNhbEFsaWdubWVudDpTc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246TXNlLGFsaWduQ29vcmRpbmF0ZXM6VHNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OkVzZSxiYWxhbmNlOkNzZX07ZnVuY3Rpb24geHNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1zbHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gYnNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gc2xyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiB3c2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBTc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIXdzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIE1zZShlLHQscixuLGkpe3ZhciBvPXt9LGE9bGxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGxscihlLHQscixuKXt2YXIgaT1uZXcgb2xyLG89ZS5ncmFwaCgpLGE9dWxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBFc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPWhscihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBUc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBDc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gY2xyKGUpe3ZhciB0PWFsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoeHNlKGUsdCksYnNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPVNzZShlLGkscixsKSx1PU1zZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPUVzZShlLG4pO3JldHVybiBUc2UobixvKSxDc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIHVscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBobHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBrc2U9SCgocFFuLExzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PVVuKCksSXNlPW5zKCksZmxyPVBzZSgpLnBvc2l0aW9uWDtMc2UuZXhwb3J0cz1wbHI7ZnVuY3Rpb24gcGxyKGUpe2U9SXNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSxkbHIoZSksWjQuZm9yRWFjaChmbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24gZGxyKGUpe3ZhciB0PUlzZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIEZzZT1IKChkUW4senNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9VW4oKSxSc2U9Z2FlKCksTnNlPVNhZSgpLG1scj16YWUoKSxnbHI9bnMoKS5ub3JtYWxpemVSYW5rcyxfbHI9QmFlKCkseWxyPW5zKCkucmVtb3ZlRW1wdHlSYW5rcyxEc2U9VWFlKCksdmxyPVdhZSgpLE9zZT0kYWUoKSx4bHI9dnNlKCksYmxyPWtzZSgpLGQwPW5zKCksd2xyPVVjKCkuR3JhcGg7enNlLmV4cG9ydHM9U2xyO2Z1bmN0aW9uIFNscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/ZDAudGltZTpkMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gTmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7TWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7RWxyKGUsbil9KX0pfWZ1bmN0aW9uIE1scihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0RscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7UnNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0RzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXttbHIoZDAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe09scihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3lscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtEc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtnbHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXt6bHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtGbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtOc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe19scihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXt2bHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7eGxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtXbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtZbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7cWxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe05zZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1ZscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtCbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7SGxyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7VWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXtSc2UudW5kbyhlKX0pfWZ1bmN0aW9uIEVscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgVGxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxDbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sQWxyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUGxyPVsid2lkdGgiLCJoZWlnaHQiXSxJbHI9e3dpZHRoOjAsaGVpZ2h0OjB9LExscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxrbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxSbHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIE5scihlKXt2YXIgdD1uZXcgd2xyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxDbHIsTmx0KHIsVGxyKSxpci5waWNrKHIsQWxyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFBsciksSWxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxrbHIsTmx0KGksTGxyKSxpci5waWNrKGksUmxyKSkpfSksdH1mdW5jdGlvbiBEbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIE9scihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTtkMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gemxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIEZscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIEJscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBIbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KGQwLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChkMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gVmxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gcWxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uIFdscihlKXt2YXIgdD1kMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe2QwLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEhzZT1IKChtUW4sQnNlKT0+e3ZhciBwSD1VbigpLGpscj1ucygpLFhscj1VYygpLkdyYXBoO0JzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOiRscn07ZnVuY3Rpb24gJGxyKGUpe3ZhciB0PWpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IFhscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgVXNlPUgoKGdRbixWc2UpPT57VnNlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoX1FuLHFzZSk9Pntxc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6RnNlKCksZGVidWc6SHNlKCksdXRpbDp7dGltZTpucygpLnRpbWUsbm90aW1lOm5zKCkubm90aW1lfSx2ZXJzaW9uOlVzZSgpfX0pO3ZhciB6ZHQ9RWUoT2R0KCksMSkse19fZXh0ZW5kczpjX3IsX19hc3NpZ246dV9yLF9fcmVzdDpoX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06Zl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6cF9yLF9fZ2VuZXJhdG9yOmRfcixfX2V4cG9ydFN0YXI6bV9yLF9fY3JlYXRlQmluZGluZzpnX3IsX192YWx1ZXM6X19yLF9fcmVhZDp5X3IsX19zcHJlYWQ6dl9yLF9fc3ByZWFkQXJyYXlzOnhfcixfX3NwcmVhZEFycmF5OmJfcixfX2F3YWl0OndfcixfX2FzeW5jR2VuZXJhdG9yOlNfcixfX2FzeW5jRGVsZWdhdG9yOk1fcixfX2FzeW5jVmFsdWVzOkVfcixfX21ha2VUZW1wbGF0ZU9iamVjdDpUX3IsX19pbXBvcnRTdGFyOkNfcixfX2ltcG9ydERlZmF1bHQ6QV9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6UF9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6SV9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpMX3J9PXpkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gRmR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e0ZkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7RmR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBSX3I9QmR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLE5fcj1CZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gQmR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIHd2ZT0vKHVybFwoKShbXildKikoXCkpL2csU3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxacztmdW5jdGlvbiBsXyhlLHQpe2lmKGUmJlN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIFpzfHwoWnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksWnMuYmFzZT1acy5jcmVhdGVFbGVtZW50KCJiYXNlIiksWnMuaGVhZC5hcHBlbmRDaGlsZChacy5iYXNlKSxacy5hbmNob3I9WnMuY3JlYXRlRWxlbWVudCgiYSIpLFpzLmJvZHkuYXBwZW5kQ2hpbGQoWnMuYW5jaG9yKSksWnMuYmFzZS5ocmVmPXQsWnMuYW5jaG9yLmhyZWY9ZSxacy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2Uod3ZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitsXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIGNfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsSF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksVl9yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxIZHQ9Y18mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxWZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFVkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBxZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgcHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBHZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyIFdkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgWWR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBNdmU9MDtmdW5jdGlvbiBqZHQoKXt9amR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO2pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgUm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1NdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSxLZHQ9e307ZnVuY3Rpb24gWGR0KGUsdCl7ZEdbZV09S2R0W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiAkZHQoZSl7cmV0dXJuIGRHW2VdfHxLZHRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBFdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj0kZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9bF8odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiYkZHQodCkhPT12b2lkIDApdGhyb3cgWGR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsWGR0KHQsdGhpcyksRXZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBUdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsQ3ZlPSJpbmNsdWRlIixaZHQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIEpkdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBBdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlB2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShDdmUpO2EmJnIucHVzaCguLi5BdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBRZHQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoVHZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShaZHQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1KZHQobyk7cy5zZXRBdHRyaWJ1dGUoWmR0LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPUpkdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIHRtdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1JdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSXZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPWt2ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9THZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIEx2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIGt2ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIGRwKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIGVtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9ZW10KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1lbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSxSdmU9Ly1bYS16XS9nLE52ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIHdtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoUnZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShOdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBEdmU9MCxybXQ9MCxMeD1bXSxPdmU9MCx2Rz0hMSxubXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcih6dmUpLm9ic2VydmUobm10LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24genZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxybXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsbm10LnRleHRDb250ZW50PU92ZSsrKSxMeC5wdXNoKGUpLER2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1ybXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgRnZlPWxpLEZJPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLEZ2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBpbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaW10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gQnZlKGUsdCl7aWYoIWltdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Um4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHdtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtCdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEh2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxvbXQ9ITEsYW10PSExO2Z1bmN0aW9uIFZ2ZSgpe2lmKCFvbXQpe29tdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLGFtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gYW10fWZ1bmN0aW9uIFV2ZShlKXtWdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24gcXZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkh2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBzbXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJnNtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIEd2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiBXdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gWXZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBqdmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGxtdD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksVXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1xdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPXNtdChzLGgpO0d2ZSh0aGlzLHMuJCxmLGgpLFl2ZSh0aGlzLGYsaCxpKSxXdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9anZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0sZ210PSJfX2NvbXB1dGVJbmZvIixYdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiAkdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBjbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIEt2ZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmJHZlKGUsbyxzLGMscixuLGkpfHxpJiZadmUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIFp2ZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIF9tdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBfbXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiBKdmUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxfbXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIFF2ZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1kcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gdDFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gZTFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZihXZHQpe2pNKys7bGV0IG89bjFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpdW10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspeW10KGUsIiIsdCxyLHMpJiZ1bXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIHIxZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSx1bXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0scjFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIG4xZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309aTFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGkxZShlKXtsZXQgdD1lW2dtdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24geW10KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIG8xZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPWRwKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9ZHAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLHUxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9YyxhMWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gYTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPXhtdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOnMxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBzMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1kcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmbDFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGwxZShlLHQscixuLGkpe2lmKGk9YzFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBjMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIHUxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gaDFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2YxZShhLGMpLHAxZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGYxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIHAxZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7UXZlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gaG10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgZDFlPVtdLHZtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIixtMWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIsZzFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixfMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHkxZT0iKD86IitnMWUrInwiK18xZSsiKSIsZm10PSIoPzooIit2bXQrInwiK20xZSsifCIreTFlKyIpXFxzKikiLHYxZT0iKD86IitmbXQrIig/OixcXHMqIitmbXQrIikqKSIseDFlPSIoPzpcXChcXHMqKD86Iit2MWUrIj8pXFwpXFxzKikiLGIxZT0iKCIrdm10KyJcXHMqIit4MWUrIj8pIix3MWU9IihcXFtcXFt8e3spXFxzKiIsUzFlPSIoPzpdXXx9fSkiLE0xZT0iKD86KCEpXFxzKik/IixFMWU9dzFlK00xZStiMWUrUzFlLHBtdD1uZXcgUmVnRXhwKEUxZSwiZyIpO2Z1bmN0aW9uIGRtdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOmQxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBUMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIFQxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49eG10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiB4bXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gbW10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIGJtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe2JtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEMxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciB1Xz1SbihlPT57bGV0IHQ9bG10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gbzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7ZTFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmS3ZlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO2JtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0MxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpjbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOmNtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO2htdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46SnZlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjp0MWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9aG10KHRoaXMscyx6ci5DT01QVVRFLHltdCxpLGEpO3hHKHRoaXMsZ210KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PW1tdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj9tbXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLGgxZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PWRtdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7WHZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9ZG10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9d20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1wbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1wbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIEExZT0wO2Z1bmN0aW9uIHdtdCgpe0ExZSsrfXZhciBQMWU9W107ZnVuY3Rpb24gVkkoZSl7UDFlLnB1c2goZSl9ZnVuY3Rpb24gSTFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgU210PVJuKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9STFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt3bXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgTW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsU209Um4oZT0+e2xldCB0PVNtdCh1XyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1RZHQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksWWR0JiZVSSYmSGR0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fHFkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIE1tdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6cHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1WZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2xfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksR2R0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9bF8odGhpcy5pbXBvcnRQYXRoKSksbF8oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEwxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gazFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEwxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrazFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9U20oSFRNTEVsZW1lbnQpO3ZhciBmeT1FZShPZSgpLDEpO3ZhciBoXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBFbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1oX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIE1tO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoTW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhFbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpFbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPVIxZShlKSxUbXQoTjFlKGUpLGUpfWZ1bmN0aW9uIFIxZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLmNvbW1lbnRzLCIiKS5yZXBsYWNlKGdwLnBvcnQsIiIpfWZ1bmN0aW9uIE4xZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1DbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09QW10JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIFRtdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUQxZShyKSxyPXIucmVwbGFjZShncC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVjFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEgxZSk9PT0wP2UudHlwZT1tcC5NRURJQV9SVUxFOm8ubWF0Y2goZ3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9bXAuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoZ3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUG10KT09PTA/ZS50eXBlPW1wLk1JWElOX1JVTEU6ZS50eXBlPW1wLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylUbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBEMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhTzFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6ejFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitDbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1BbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gTzFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihQbXQpPT09MH1mdW5jdGlvbiB6MWUoZSl7cmV0dXJuIGU9RjFlKGUpLEIxZShlKX1mdW5jdGlvbiBGMWUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKGdwLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gQjFlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AubWl4aW5BcHBseSwiIikucmVwbGFjZShncC52YXJBcHBseSwiIil9dmFyIG1wPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LENtdD0ieyIsQW10PSJ9IixncD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUG10PSItLSIsSDFlPSJAbWVkaWEiLFYxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIEltdD0vQG1lZGlhXHMoLiopLzt2YXIgTG10PW5ldyBTZXQsVTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24ga210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIUxtdC5oYXModCkpe0xtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gUm10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShVMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PW1wLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goSW10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09bXAuU1RZTEVfUlVMRT90KGUpOnImJm89PT1tcC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1tcC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gcTFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPXExZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIG52cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gTm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gRG10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO1JtdChpKT9oX3x8KGttdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIE9tdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBHMWUoZSl7aWYoTW0hPT12b2lkIDApcmV0dXJuIE1tO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoT210KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9VzFlKGUpO3IhPT0iIiYmWTFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gRzFlKGUpIT09IiJ9ZnVuY3Rpb24gVzFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PU9tdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBZMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gem10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIGoxZT0vO1xzKi9tLFgxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxGbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIHptdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9RG10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShqMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShGbXQsIiIpKSxhLnB1c2goIikiKSxGbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPVgxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBCbXQ9RG87dmFyICQxZT17fSxRTT0kMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLEsxZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBIbXQoZSl7bGV0IHQ9UU1bZV07dCYmWjFlKHQpfWZ1bmN0aW9uIFoxZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gVm10KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBVbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsSzFlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLHFtdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cW10P3FtdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIEdtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbR210XXx8KHRbR210XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgQm10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1IbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1ObXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtWbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFVtdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSxXbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixZbXQ9MjUsam10PTUsUTFlPTIsdHhlPTI1MDAsSm10PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sZXhlPVswLDEsNCwyXSxyeGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiBKbXQuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIFFtdChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmVWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgdGd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLG54ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxpeGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBveGUoZSl7cmV0dXJuIG54ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIGF4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIFhtdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYob3hlKG5baV0pKXtsZXQgbz1heGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09aWEubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uICRtdChlKXtsZXQgdD10Z3Q/WyJjbGljayJdOkptdDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sWG10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLFhtdCwhMCl9ZnVuY3Rpb24gc3hlKGUpe2lmKCFmRylyZXR1cm47aWEubW91c2UubW91c2VJZ25vcmVKb2J8fCRtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXskbXQoKSxpYS5tb3VzZS50YXJnZXQ9bnVsbCxpYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtpYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0saWEubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2UoaWEubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIodHhlKSx0KX1mdW5jdGlvbiBwXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFyeGUmJihyPWV4ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBseGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PV9wKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBpYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBjeGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZWd0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsc3hlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30sZl89W107ZnVuY3Rpb24gdXhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIF9wKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gcmd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKGlhLnRvdWNoLmlkPWEuaWRlbnRpZmllciksaWEudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmaHhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPGZfLmxlbmd0aDthKyspcz1mX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gaHhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilpYS50b3VjaC54PXQuY2xpZW50WCxpYS50b3VjaC55PXQuY2xpZW50WSxpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihpYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPWN4ZShlKSxpPSExLG89TWF0aC5hYnMoaWEudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMoaWEudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIEVtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGZ4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIG5ndChlLHQscil7cmV0dXJuIGlFW3RdPyhweGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBmeGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sISh0Z3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZkXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIHB4ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtmXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24gZHhlKGUpe2ZvcihsZXQgdD0wLHI7dDxmXy5sZW5ndGg7dCsrKXtyPWZfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGRfKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9ZHhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighcF8oZSkpcmV0dXJuO2xldCB0PV9wKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe3BfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe3BfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07ZWd0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLF9wKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPlExZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7S210KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSkscF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O2VndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTtLbXQodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gS210KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49am10fHxpPj1qbXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdXhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtwXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtwXyhlKSYmWm10KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe1ptdCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBabXQoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz1fcChyfHx0KTshb3x8aXhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PVltdCYmaTw9WW10fHxseGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBpZ3Q9X3A7dmFyIHloPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7RW0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bmd0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIG14ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyxneGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxfeGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHl4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLHZ4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sYWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gc2d0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gbGd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gY2d0KCl7c2d0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWxndChvRVtlXSl9ZnVuY3Rpb24geHhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZjZ3QoKX12YXIgdWd0PVJuKGU9PnthZ3R8fGFFfHwoc2d0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2d0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCFhZ3QmJnZ4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UobXhlLGd4ZSksbz1vLnJlcGxhY2UoX3hlLHl4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKHh4ZSgpLG9FLnB1c2godGhpcyksbGd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxoZ3Q9W10sZmd0PVtdO2Z1bmN0aW9uIHBndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLGJ4ZShoZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3eGUoZmd0KX0pfSl9ZnVuY3Rpb24gYnhlKGUpe2Zvcig7ZS5sZW5ndGg7KWRndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIHd4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspZGd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24gZGd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIG1ndChlLHQscil7aTl8fHBndCgpLGhndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIFRtKGUsdCxyKXtpOXx8cGd0KCksZmd0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24gZ2d0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/Z2d0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGdndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBfZ3Q9MCx5Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gU3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIE14ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChfZ3QpOihpLnB1c2goeWd0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gRXhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9VHhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1DeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1NeGUoU3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBfZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHlndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBUeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gQ3hlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBFeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB2aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PVdtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsQXhlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEF4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgdmgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFB4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gdmd0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIEl4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSx2Z3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBQeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLHZndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxJeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00seGd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBiZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gd2d0KGUsdD0hMSl7aWYoIUtHfHwheGd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPXhndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIWJndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFiZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LGcxcj1SbihlPT57bGV0IHQ9U20oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixMeGU9d2luZG93LlNoYWR5Q1NTLEd0PVJuKGU9PntsZXQgdD15aChTbShlKSkscj1VST90OnVndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYocHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7ZF8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gd2d0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBMeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQ209RWUoT2UoKSwxKTtmdW5jdGlvbiB4aChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYobV8oZVtyXSkmJm1fKHRbbl0pKXtsZXQgaT1yLG89bjtyPVNndChlLHIrMSksbj1TZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIFNndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighbV8oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihtXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhbV8oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gbV8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fG1fKGUpfXZhciBreGU9W107ZnVuY3Rpb24gUnhlKGUpe3JldHVybiBDbS5rZXlzKGUpLnNvcnQoeGgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBDbS51bmlvbi5hcHBseShudWxsLENtLnZhbHVlcyhlKSkuc29ydCh4aCl9ZnVuY3Rpb24gTnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxDbS51bmlxKHIpLnNvcnQoeGgpfXZhciBFZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsVGd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O0tzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pk94ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+Q2d0LHNldEZlYXR1cmVGbGFnczooKT0+RHhlfSk7dmFyIHM5LGw5O0NndCgpO2Z1bmN0aW9uIENndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBEeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gT3hlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LEFtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoQW18fChBbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PUFtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49RnhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz16eGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKEVndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24genhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIEZ4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1BbS5QT1NULHQuYm9keT1CeGUoZSksdCk6KHQubWV0aG9kVHlwZT1BbS5HRVQsdCl9ZnVuY3Rpb24gQnhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBBZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsSHhlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksVnhlPVBndCgpO2Z1bmN0aW9uIFBndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChUZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixJZ3Qoe1tBZ3RdOkh4ZS5nZXRBbGwoQWd0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gVnhlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gSWd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKE5hfHwoTmE9e30pKTtmdW5jdGlvbiBVeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOk5hLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBxeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOk5hLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBHeGUoZSx0PSIiKXtsZXQgcj1bVXhlKGUsdCldLG49cXhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPUd4ZShuLHIpLG89V3hlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uIFd4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj14aChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjp4aChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoWXhlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O0tzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PkpzfSk7dmFyIGp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxOZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LFh4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LE5ndCk7ZnVuY3Rpb24gJHhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBEZ3QoZSx0KXtyZXR1cm4gRmd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIEt4ZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspT2d0KGUsdFtuXSxyLFh4ZSl9ZnVuY3Rpb24gT2d0KGUsdCxyLG4peyR4ZSh0LGUsbik7Zm9yKGxldCBpIGluIGp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIHpndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/emd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24ga2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIFJndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gRmd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylrZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBrZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCkscHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249emd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZLeGUocyxuLGkpLE9ndChzLGUsaSxOZ3QpfTtyZXR1cm4gcHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dChSZ3QpOlJndDtyZXR1cm4gcj1GZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Um4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgSGd0PXVfKG5XKSxaeGU9R3goSGd0KTtmdW5jdGlvbiBKeGUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBReGU9dV8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgYmg9Y2xhc3MgZXh0ZW5kcyBReGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07YmgucHJvdG90eXBlLl9fZGF0YUhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7YmgucHJvdG90eXBlLl9tZXRob2RIb3N0O2JoLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjtiaC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIHRiZT1HeChiaCk7ZnVuY3Rpb24gQmd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBlYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/dGJlOmJoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGliZShpLGUsdCxyKSxpfWZ1bmN0aW9uIHJiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP1p4ZTpIZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46bmJlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJnNiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKUp4ZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gbmJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gaWJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpvYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46YWJlKCl9KX1mdW5jdGlvbiBvYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gYWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFCZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOmJoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89ZWJlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPUJndChlKTtyYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gc2JlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFZndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgVWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYocHAmJiFjXyl7aWYoIVVndCl7VWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGxiZT15aChmOSh1XyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGxiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIGNiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBjYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9ZHAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxxZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHFndC5pcyxxZ3QpO3ZhciB1YmU9Um4oZT0+e2xldCB0PVNtKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgaGJlPXViZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBoYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIEdndD0iaW5jbHVkZSIsZmJlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGZiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShHZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoR2d0KSx0LnRleHRDb250ZW50PXRtdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyIFdndDtXZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgWWd0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiBXZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBEYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LEpzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufWNffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W0pzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe0RhLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgamd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7amd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoamd0LmNvbnRlbnQpO3ZhciBYZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7WGd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWGd0LmNvbnRlbnQpO3ZhciAkZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTskZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCRndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHBiZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBwYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOkRhLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciBkYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZGJlLmNvbnRlbnQpO3ZhciBtYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1iZS5jb250ZW50KTt2YXIgS2d0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSxnYmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sWmd0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sX2JlPS9bYS16MC05Kl0vLHliZT0vVVwrLyx2YmU9L15hcnJvdy8seGJlPS9ec3BhY2UoYmFyKT8vLGJiZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIEpndChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHx4YmUudGVzdChuKT9yPSJzcGFjZSI6YmJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fF9iZS50ZXN0KG4pKSYmKHI9bik6dmJlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gd2JlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiBLZ3Q/dD1LZ3RbZV06eWJlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBTYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9Z2JlW2VdKSx0fWZ1bmN0aW9uIE1iZShlLHQpe3JldHVybiBlLmtleT9KZ3QoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9KZ3QoZS5kZXRhaWwua2V5LHQpOndiZShlLmtleUlkZW50aWZpZXIpfHxTYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gUWd0KGUsdCl7dmFyIHI9TWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gRWJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gWmd0Pyh0W1pndFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiB0MHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBFYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10MHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKFFndChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXt0MHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYoUWd0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgZTB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksVGJlPWUwdCYmZTB0WzFdPj04LHIwdD0zLG4wdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1ZndCxKcyx2OSxZZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UscjB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChyMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IVRiZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKGRwKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciB3aD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbd20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W0pzLHdoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgaTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7aTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaTB0LmNvbnRlbnQpO3ZhciBvMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO28wdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8wdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxTaD1bT28sWXhdO3ZhciBNaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIGEwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9YTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWguZGlzdGFuY2UoZSx0LDAsMCksbj1NaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPU1oLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBnXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9Z18uTUFYX1JBRElVUz0zMDA7Z18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1NaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01oLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxnXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9nXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLGdfLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IGEwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9TWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPU1oLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PU1oLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBnXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxzMHQ9W1NoLERpLHN1LHVXXTt2YXIgbDB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7bDB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6bDB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbczB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBjMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7YzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYzB0LmNvbnRlbnQpO3ZhciB1MHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDt1MHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh1MHQuY29udGVudCk7dmFyIEVoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLFRoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LGgwdD1bRWgsVGgsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W1NoLERpLHN1LHBFXTt2YXIgQ2JlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LGgwdCxDYmVdO3ZhciBmMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtmMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpmMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBwMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtwMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgZDB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIEFiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1bZDB0LEFiZV07dmFyIHc5LFBiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LG0wdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVBiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LGcwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxFbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sXzB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0seTB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiB2MHQoZSl7Q2guaW5kZXhPZihlKT49MHx8KENoLmxlbmd0aD09PTAmJkxiZSgpLENoLnB1c2goZSksX1c9Q2hbQ2gubGVuZ3RoLTFdLGIwdD1bXSx3MHQ9W10pfWZ1bmN0aW9uIHgwdChlKXt2YXIgdD1DaC5pbmRleE9mKGUpO3QhPT0tMSYmKENoLnNwbGljZSh0LDEpLF9XPUNoW0NoLmxlbmd0aC0xXSxiMHQ9W10sdzB0PVtdLENoLmxlbmd0aD09PTAmJmtiZSgpKX12YXIgQ2g9W10sYjB0PW51bGwsdzB0PW51bGw7ZnVuY3Rpb24gSWJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmUmJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBMYmUoKXtNOT1NOXx8SWJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIGtiZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gUmJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJnkwdCE9PXQmJih5MHQ9dCxnVz1OYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPU9iZShlKTtyZXR1cm4hRGJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBOYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIERiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gT2JlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgUG09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpfMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIGcwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxGYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyh4MHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSx2MHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sY18pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSx6YmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LEZiZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj16YmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVttMHQsSnMsUG1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxTMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltTMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltUaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgTTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7TTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gd20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgQmJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLEJiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpQbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHlwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEhiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtIYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBWYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbU2gsRGksRWgsVGhdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxWYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7aWd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxFMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6RTB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PUUwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbVGgsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFViZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W1NoLERpLFViZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTp3aC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LFQwdD1bd2gsU1ddO3ZhciBfXz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx3aC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7X18uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLF9fLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZighX18uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3doLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07X18uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W1QwdCxPbyxfX107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBDMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7QzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQzB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIEEwdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtBMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpBMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX13aC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUDB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1AwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlAwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLEVoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZkXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgSTB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtJMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpJMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEwwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0wwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkwwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBxYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChxYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksU2gsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W0pzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxfXy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBEYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgazB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7azB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6azB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXtkXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtLcyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5HYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgUjB0PSExO2Z1bmN0aW9uIEdiZShlKXtSMHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiBSMHR9dmFyIE4wdD0iIjtmdW5jdGlvbiBJVyhlKXtOMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBOMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBEMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gTzB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIHowdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBCMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6V2JlLHNldDpZYmUsZ2V0SW5pdGlhbGl6ZXI6eV8sZ2V0T2JzZXJ2ZXI6dl8sZGlzcG9zZUJpbmRpbmc6amJlfT12RShlPT5lLGU9PmUpLHtnZXQ6WGJlLHNldDokYmUsZ2V0SW5pdGlhbGl6ZXI6dnAsZ2V0T2JzZXJ2ZXI6eHAsZGlzcG9zZUJpbmRpbmc6S2JlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOlpiZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OkpiZSxzZXQ6UWJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOnQyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpejB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBlMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLE8wdCh0KX1mdW5jdGlvbiBGMHQoZSx0KXtsZXQgcj1lW0IwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj15XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24gX3MoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfV9zKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX1fcyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEgwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIscjJlPTEyLEFoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIEFoPT1udWxsJiYoQWg9TlcoSDB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoQWg9PW51bGx8fCFpc0Zpbml0ZShBaCl8fEFoPD0wKSYmKEFoPXIyZSkpLEFofWZ1bmN0aW9uIG4yZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PUFoJiYoQWg9ZSxEVyhIMHQsQWgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09TmEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVjB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LGJwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFWMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgVTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgYnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57VTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LHdwPW5ldyBVOTt2YXIgVnI9e307S3MoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT56dnQsYXJjOigpPT5EU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5vYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+aF90LGF4aXNUb3A6KCk9PnVfdCxiaXNlY3Q6KCk9PnlzLGJpc2VjdExlZnQ6KCk9PlcwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkwxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+cXZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5rMXQsY2hvcmQ6KCk9Pld2dCxjbGllbnRQb2ludDooKT0+RG0sY2x1c3RlcjooKT0+VmJ0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZjF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9Pm55dCxjcmVhdG9yOigpPT5SbSxjcm9zczooKT0+cTksY3N2OigpPT5OMXQsY3N2Rm9ybWF0OigpPT5fMXQsY3N2Rm9ybWF0Qm9keTooKT0+eTF0LGNzdkZvcm1hdFJvdzooKT0+eDF0LGNzdkZvcm1hdFJvd3M6KCk9PnYxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+YjF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PmcxdCxjdWJlaGVsaXg6KCk9PmxhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PiRTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+WlN0LGN1cnZlQnVuZGxlOigpPT5RU3QsY3VydmVDYXJkaW5hbDooKT0+dDN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9PmUzdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+cjN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+aTN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmwzdCxjdXJ2ZUxpbmVhcjooKT0+WWgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PnUzdCxjdXJ2ZU1vbm90b25lWDooKT0+ZzN0LGN1cnZlTW9ub3RvbmVZOigpPT5fM3QsY3VydmVOYXR1cmFsOigpPT54M3QsY3VydmVTdGVwOigpPT5iM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PlMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PnczdCxjdXN0b21FdmVudDooKT0+TXAsZGVzY2VuZGluZzooKT0+ajB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnZzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT56bSxkcmFnRW5hYmxlOigpPT5GbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+V20sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5QXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+UF8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+eHMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT54cyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+YTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PmFhLGZvcmNlQ2VudGVyOigpPT5WMXQsZm9yY2VDb2xsaWRlOigpPT5heHQsZm9yY2VMaW5rOigpPT5seHQsZm9yY2VNYW55Qm9keTooKT0+Znh0LGZvcmNlUmFkaWFsOigpPT5weHQsZm9yY2VTaW11bGF0aW9uOigpPT5oeHQsZm9yY2VYOigpPT5keHQsZm9yY2VZOigpPT5teHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5McCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+Q2J0LGdlb0FyZWE6KCk9Pkl4dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PkFidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5QYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+Rnh0LGdlb0NlbnRyb2lkOigpPT5HeHQsZ2VvQ2lyY2xlOigpPT4keHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+Snh0LGdlb0NsaXBSZWN0YW5nbGU6KCk9PkRwLGdlb0NvbmljQ29uZm9ybWFsOigpPT5MYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5XXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+UmJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5vYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9Pk5idCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PmtidCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PmpfLGdlb0dub21vbmljOigpPT5EYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmxidCxnZW9JZGVudGl0eTooKT0+T2J0LGdlb0ludGVycG9sYXRlOigpPT5jYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+SWJ0LGdlb01lcmNhdG9yUmF3OigpPT5ZXyxnZW9OYXR1cmFsRWFydGgxOigpPT56YnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5GYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT53YnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5CYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PlNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkhidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PnZ5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5KMHQsaHNsOigpPT5WbSxodG1sOigpPT5CMXQsaW1hZ2U6KCk9Pk8xdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+THl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PmdTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PiR3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmlTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9Pm9TdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PndTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PkVTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+WHl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+U1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+RV8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5reXQsaW50ZXJwb2xhdGVHbkJ1OigpPT5hU3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9Pl9TdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT55U3QsaW50ZXJwb2xhdGVIY2w6KCk9Pld5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pll5dCxpbnRlcnBvbGF0ZUhzbDooKT0+VXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+cXl0LGludGVycG9sYXRlSHVlOigpPT5SeXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5MU3QsaW50ZXJwb2xhdGVMYWI6KCk9Pk1fLGludGVycG9sYXRlTWFnbWE6KCk9PklTdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+c1N0LGludGVycG9sYXRlT3JhbmdlczooKT0+YlN0LGludGVycG9sYXRlUFJHbjooKT0+S3d0LGludGVycG9sYXRlUGlZRzooKT0+Wnd0LGludGVycG9sYXRlUGxhc21hOigpPT5rU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5jU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9Pkp3dCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PnVTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PnZTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlRTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9PlF3dCxpbnRlcnBvbGF0ZVJkR3k6KCk9PnRTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9PmhTdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+ZVN0LGludGVycG9sYXRlUmRZbEduOigpPT5yU3QsaW50ZXJwb2xhdGVSZWRzOigpPT54U3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnFtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pkl5dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkNTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5uU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+QVN0LGludGVycG9sYXRlVmlyaWRpczooKT0+UFN0LGludGVycG9sYXRlV2FybTooKT0+TVN0LGludGVycG9sYXRlWWxHbjooKT0+cFN0LGludGVycG9sYXRlWWxHbkJ1OigpPT5mU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PmRTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+bVN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+UXl0LGlzb0Zvcm1hdDooKT0+Tnd0LGlzb1BhcnNlOigpPT5Ed3QsanNvbjooKT0+ejF0LGtleXM6KCk9PiRMLGxhYjooKT0+d18sbGNoOigpPT5ieXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PlZTdCxsaW5rUmFkaWFsOigpPT5xU3QsbGlua1ZlcnRpY2FsOigpPT5VU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5lX3QsbWVkaWFuOigpPT5yX3QsbWVyZ2U6KCk9PkltLG1pbjooKT0+TG0sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+UGgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+SnZ0LG5vdzooKT0+QXAscGFjazooKT0+dTJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PmEydCxwYWlyczooKT0+WTB0LHBhcnRpdGlvbjooKT0+aDJ0LHBhdGg6KCk9PmJzLHBlcm11dGU6KCk9Pm5fdCxwaWU6KCk9PkJTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5seSxwb2x5Z29uQXJlYTooKT0+eDJ0LHBvbHlnb25DZW50cm9pZDooKT0+YjJ0LHBvbHlnb25Db250YWluczooKT0+RTJ0LHBvbHlnb25IdWxsOigpPT5NMnQscG9seWdvbkxlbmd0aDooKT0+VDJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+emgscXVhbnRpbGU6KCk9PnNhLHF1YW50aXplOigpPT4keXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlAydCxyYW5kb21FeHBvbmVudGlhbDooKT0+STJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5BMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5DMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5YdnQsc2NhbGVCYW5kOigpPT5RbSxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PkJ3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9Pk9uLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PnRnLHNjYWxlUG93OigpPT5LXyxzY2FsZVF1YW50aWxlOigpPT5lZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+Rnd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5VMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT56d3Qsc2NhbjooKT0+aV90LHNjaGVtZUFjY2VudDooKT0+SHd0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+Vnd0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+VXd0LHNjaGVtZVBhc3RlbDE6KCk9PnF3dCxzY2hlbWVQYXN0ZWwyOigpPT5Hd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+V3d0LHNjaGVtZVNldDI6KCk9Pll3dCxzY2hlbWVTZXQzOigpPT5qd3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+WHd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5FcCxzZWxlY3Rpb246KCk9PkloLHNlbGVjdG9yOigpPT5ObSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5lMXQsc2h1ZmZsZTooKT0+b190LHN0YWNrOigpPT5NM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlQzdCxzdGFja09mZnNldEV4cGFuZDooKT0+RTN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5DM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PkEzdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlAzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5JM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5MM3Qsc3RyYXRpZnk6KCk9PmQydCxzdHlsZTooKT0+U3Asc3VtOigpPT5hX3Qsc3ZnOigpPT5IMXQsc3ltYm9sOigpPT5qU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5ZU3QsdGV4dDooKT0+RF8sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+UTB0LHRocmVzaG9sZFNjb3R0OigpPT50X3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+eF8sdGlja1N0ZXA6KCk9PnRsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT50eSx0aW1lRGF5czooKT0+JDJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+dHd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PmoydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Wl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PlcydCx0aW1lTW9uZGF5OigpPT5yeSx0aW1lTW9uZGF5czooKT0+SzJ0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+bnd0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5ld3QsdGltZVNlY29uZDooKT0+UV8sdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9PnJnLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PnpwLHRpbWVUaHVyc2RheXM6KCk9PlEydCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5aMnQsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PkoydCx0aW1lV2VlazooKT0+cmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+R2gsdGltZVllYXJzOigpPT5pd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PkFfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5UcCx0b3VjaGVzOigpPT5peXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT5tMnQsdHJlZW1hcDooKT0+ZzJ0LHRyZWVtYXBCaW5hcnk6KCk9Pl8ydCx0cmVlbWFwRGljZTooKT0+VWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PnYydCx0cmVlbWFwU2xpY2U6KCk9PkptLHRyZWVtYXBTbGljZURpY2U6KCk9PnkydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+RDF0LHRzdkZvcm1hdDooKT0+TTF0LHRzdkZvcm1hdEJvZHk6KCk9PkUxdCx0c3ZGb3JtYXRSb3c6KCk9PkMxdCx0c3ZGb3JtYXRSb3dzOigpPT5UMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PkExdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5TMXQsdXRjRGF5OigpPT5ueSx1dGNEYXlzOigpPT51d3QsdXRjRm9ybWF0OigpPT5heSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9Pm13dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+bHd0LHV0Y01pbGxpc2Vjb25kOigpPT5aXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+YXd0LHV0Y01vbmRheTooKT0+b3ksdXRjTW9uZGF5czooKT0+aHd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnl3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+Z3d0LHV0Y1NlY29uZDooKT0+UV8sdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5uZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+RnAsdXRjVGh1cnNkYXlzOigpPT5kd3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9PmZ3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9PnB3dCx1dGNXZWVrOigpPT5uZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+V2gsdXRjWWVhcnM6KCk9PnZ3dCx2YWx1ZXM6KCk9PmkxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+cTB0LHZvcm9ub2k6KCk9PlkzdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+RjF0LHppcDooKT0+c190LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+WGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgcTB0PSI1LjcuMCI7ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9aTJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gaTJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvYShlKHQpLHIpfX12YXIgRzB0PW9iKG9hKSxXVz1HMHQucmlnaHQsVzB0PUcwdC5sZWZ0LHlzPVdXO2Z1bmN0aW9uIFkwdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBqMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT1RcyhlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9UXModChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBhYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBYMHQ9QXJyYXkucHJvdG90eXBlLCQwdD1YMHQuc2xpY2UsSzB0PVgwdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFowdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPXhfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiB4XyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gdGwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBKMHQoKXt2YXIgZT1aMHQsdD1hYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPXRsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3lzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRSgkMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBzYShlLHQscil7aWYocj09bnVsbCYmKHI9UXMpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBRMHQoZSx0LHIpe3JldHVybiBlPUswdC5jYWxsKGUsUXMpLnNvcnQob2EpLE1hdGguY2VpbCgoci10KS8oMiooc2EoZSwuNzUpLXNhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiB0X3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIGVfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1RcyhlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPVFzKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIHJfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT1RcyhlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9UXModChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBzYShvLnNvcnQob2EpLC41KX1mdW5jdGlvbiBJbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIExtKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG5fdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBpX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9b2EpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBvX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiBhX3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1MbShlLG8yZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBvMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIHNfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gbF90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LGNfdD0xZS02O2Z1bmN0aW9uIGEyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIHMyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGwyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIGMyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiB1MmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz9hMmU6czJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpsX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/YzJlOmwyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIsY190KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixjX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIodTJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiB1X3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIGhfdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1rbSgpO2ttKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBQaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiBkMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG0yZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBSbShlKXt2YXIgdD1QaChlKTtyZXR1cm4odC5sb2NhbD9tMmU6ZDJlKSh0KX1mdW5jdGlvbiBnMmUoKXt9ZnVuY3Rpb24gTm0oZSl7cmV0dXJuIGU9PW51bGw/ZzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gbV90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IE5uKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gXzJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/XzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24gZ190KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgTm4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBfX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBObihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHlfdCgpe3JldHVybiBuZXcgTm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gdl90KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgeF90PSIkIjtmdW5jdGlvbiB5MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB2MmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD14X3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD14X3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBiX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3YyZTp5MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT12X3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IE5uKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiB3X3QoKXtyZXR1cm4gbmV3IE5uKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFNfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBNX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IE5uKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gRV90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBUX3QoZSl7ZXx8KGU9eDJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IE5uKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4MmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gQ190KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIEFfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFBfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSV90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBMX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24ga190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBiMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIHcyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE0yZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBFMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBSX3QoZSx0KXt2YXIgcj1QaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/dzJlOmIyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1QyZTpFMmU6ci5sb2NhbD9NMmU6UzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEEyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFAyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBOX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0MyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9QMmU6QTJlKShlLHQscj09bnVsbD8iIjpyKSk6U3AodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBJMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEwyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gazJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIERfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0kyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9rMmU6TDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBPX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IHpfdChlKX1mdW5jdGlvbiB6X3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPU9fdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfXpfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gRl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gQl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gUjJlKGUpe3JldHVybiBmdW5jdGlvbigpe0ZfdCh0aGlzLGUpfX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Ql90KHRoaXMsZSl9fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9GX3Q6Ql90KSh0aGlzLGUpfX1mdW5jdGlvbiBIX3QoZSx0KXt2YXIgcj1PX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/RDJlOnQ/UjJlOk4yZSkocix0KSl9ZnVuY3Rpb24gTzJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB6MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFZfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9PMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0YyZTp6MmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBCMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBIMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVjJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gVV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0IyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VjJlOkgyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBVMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcV90KCl7cmV0dXJuIHRoaXMuZWFjaChVMmUpfWZ1bmN0aW9uIHEyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEdfdCgpe3JldHVybiB0aGlzLmVhY2gocTJlKX1mdW5jdGlvbiBXX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSbShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBHMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBZX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpLG49dD09bnVsbD9HMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpObSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gVzJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChXMmUpfWZ1bmN0aW9uIFkyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gajJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBYX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/ajJlOlkyZSl9ZnVuY3Rpb24gJF90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgWl90PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtfdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLX3R8fChaX3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBLX3Q7ZnVuY3Rpb24gWDJlKGUsdCxyKXtyZXR1cm4gZT1KX3QoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gSl90KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uICQyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gSzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFoyZShlLHQscil7dmFyIG49Wl90Lmhhc093blByb3BlcnR5KGUudHlwZSk/WDJlOkpfdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBRX3QoZSx0LHIpe3ZhciBuPSQyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/WjJlOksyZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBNcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiB0eXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEoyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0eXQodGhpcyxlLHQpfX1mdW5jdGlvbiBRMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdHl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGV5dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1EyZTpKMmUpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gTm4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gcnl0KCl7cmV0dXJuIG5ldyBObihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Obi5wcm90b3R5cGU9cnl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tm4sc2VsZWN0Om1fdCxzZWxlY3RBbGw6Z190LGZpbHRlcjpfX3QsZGF0YTpiX3QsZW50ZXI6eV90LGV4aXQ6d190LGpvaW46U190LG1lcmdlOk1fdCxvcmRlcjpFX3Qsc29ydDpUX3QsY2FsbDpDX3Qsbm9kZXM6QV90LG5vZGU6UF90LHNpemU6SV90LGVtcHR5OkxfdCxlYWNoOmtfdCxhdHRyOlJfdCxzdHlsZTpOX3QscHJvcGVydHk6RF90LGNsYXNzZWQ6SF90LHRleHQ6Vl90LGh0bWw6VV90LHJhaXNlOnFfdCxsb3dlcjpHX3QsYXBwZW5kOldfdCxpbnNlcnQ6WV90LHJlbW92ZTpqX3QsY2xvbmU6WF90LGRhdHVtOiRfdCxvbjpRX3QsZGlzcGF0Y2g6ZXl0fTt2YXIgSWg9cnl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IE5uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTm4oW1tlXV0sRUUpfWZ1bmN0aW9uIG55dChlKXtyZXR1cm4gSHQoUm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgdHdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKyt0d2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIERtKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRG0oZSx0KX1mdW5jdGlvbiBFcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBObihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBObihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gVHAoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRG0oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBpeXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT20oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHptKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixPbSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixPbSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLE9tLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBld2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiByd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIG53ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBpd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1ld2UsdD1yd2Uscj1ud2Usbj1pd2UsaT17fSxvPXZzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLHptKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoT20oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRm0ocXQudmlldyxjKSxPbSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLFRwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihPbSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFNcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfU1wKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBDcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUmgoKXt9dmFyIEhtPS43LGJfPTEvSG0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGtoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixvd2U9L14jKFswLTlhLWZdezMsOH0pJC8sYXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxzd2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2toLGtoLGtoXSsiXFwpJCIpLGx3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLGN3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2toLGtoLGtoLEFFXSsiXFwpJCIpLHV3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsa2gsa2hdKyJcXCkkIiksaHdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsa2gsa2gsQUVdKyJcXCkkIiksb3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NwKFJoLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmF5dCxmb3JtYXRIZXg6YXl0LGZvcm1hdEhzbDpmd2UsZm9ybWF0UmdiOnN5dCx0b1N0cmluZzpzeXR9KTtmdW5jdGlvbiBheXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBmd2UoKXtyZXR1cm4gZnl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHN5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PW93ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2x5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9YXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1zd2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWx3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1jd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9dXdlLmV4ZWMoZSkpP2h5dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PWh3ZS5leGVjKGUpKT9oeXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpveXQuaGFzT3duUHJvcGVydHkoZSk/bHl0KG95dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbHl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcChLaSxjdSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Y3l0LGZvcm1hdEhleDpjeXQsZm9ybWF0UmdiOnV5dCx0b1N0cmluZzp1eXR9KSk7ZnVuY3Rpb24gY3l0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIHV5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBoeXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBMaChlLHQscixuKX1mdW5jdGlvbiBmeXQoZSl7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBuZXcgTGgoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgUmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IExoO2lmKGUgaW5zdGFuY2VvZiBMaClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMaChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFZtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9meXQoZSk6bmV3IExoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBMaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoTGgsVm0sQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgscHl0PS45NjQyMixkeXQ9MSxteXQ9LjgyNTIxLGd5dD00LzI5LG1iPTYvMjksX3l0PTMqbWIqbWIscHdlPW1iKm1iKm1iO2Z1bmN0aW9uIHl5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBOaClyZXR1cm4gd3l0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvZHl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL3B5dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL215dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdnl0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gd18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3l5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcCh1dSx3XyxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9cHl0KnJZKHQpLGU9ZHl0KnJZKGUpLHI9bXl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+cHdlP01hdGgucG93KGUsMS8zKTplL195dCtneXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6X3l0KihlLWd5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB4eXQoZSl7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBuZXcgTmgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXl5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IE5oKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgTmgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gYnl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT94eXQoZSk6bmV3IE5oKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/eHl0KGUpOm5ldyBOaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gTmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHd5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9Q3AoTmgsZ2IsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB3eXQodGhpcykucmdiKCl9fSkpO3ZhciBUeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LFN5dD1JRSpzTCxNeXQ9SUUqb1ksRXl0PW9ZKmFZLXNMKlR5dDtmdW5jdGlvbiBkd2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNfKXJldHVybiBuZXcgU18oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oRXl0Km4rU3l0KnQtTXl0KnIpLyhFeXQrU3l0LU15dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IFNfKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGxhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kd2UoZSk6bmV3IFNfKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBTXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoU18sbGEsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKFR5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gQ3l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gbXdlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gVW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIEF5dChlKXtyZXR1cm4oZT0rZSk9PTE/S246ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P213ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gS24oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgcW09ZnVuY3Rpb24gZSh0KXt2YXIgcj1BeXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUHl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVB5dChsTCksSXl0PVB5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIEx5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24gZ3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBfd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/X3dlKGxbMF0ueCk6Z3dlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixxbSk6dmI6dCBpbnN0YW5jZW9mIHJjP3FtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIGt5dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiBSeXQoZSx0KXt2YXIgcj1VbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgTnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKk55dCxza2V3WDpNYXRoLmF0YW4obCkqTnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksRHl0LGdMO2Z1bmN0aW9uIE95dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRHl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUR5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiB6eXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIEZ5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9Rnl0KE95dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1GeXQoenl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixCeXQ9NCx5d2U9MWUtMTI7ZnVuY3Rpb24gSHl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIHZ3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB4d2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx5d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrQnl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1CeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1IeXQoXyksQz1pLyhwWSpwKSooUyp4d2Uoa0UqYitfKS12d2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvSHl0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFZ5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVZtKHQpKS5oLChyPVZtKHIpKS5oKSxpPUtuKHQucyxyLnMpLG89S24odC5sLHIubCksYT1Lbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgVXl0PVZ5dChVbSkscXl0PVZ5dChLbik7ZnVuY3Rpb24gTV8oZSx0KXt2YXIgcj1LbigoZT13XyhlKSkubCwodD13Xyh0KSkubCksbj1LbihlLmEsdC5hKSxpPUtuKGUuYix0LmIpLG89S24oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBHeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1Lbih0LmMsci5jKSxvPUtuKHQubCxyLmwpLGE9S24odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIFd5dD1HeXQoVW0pLFl5dD1HeXQoS24pO2Z1bmN0aW9uIGp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWxhKGkpKS5oLChvPWxhKG8pKS5oKSxzPUtuKGkucyxvLnMpLGw9S24oaS5sLG8ubCksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIFh5dD1qeXQoVW0pLEVfPWp5dChLbik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gJHl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9a20oKTt2YXIgeGI9MCxORT0wLFJFPTAsWnl0PTFlMyx4TCxERSxiTD0wLFRfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxKeXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gQXAoKXtyZXR1cm4gVF98fChKeXQoYndlKSxUXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gYndlKCl7VF89MH1mdW5jdGlvbiBDXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9Q18ucHJvdG90eXBlPUFfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q18scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP0FwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIEFfKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe0FwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1UXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gS3l0KCl7VF89KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxTd2UoKSxUXz0wfX1mdW5jdGlvbiB3d2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5aeXQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBTd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLVRfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dChLeXQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbCh3d2UsWnl0KSkseGI9MSxKeXQoS3l0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBReXQoZSx0LHIpe3ZhciBuPW5ldyBDXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP0FwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIE13ZT12cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxFd2U9W10sZXZ0PTAsTUw9MSxFTD0yLFNMPTMsdHZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIEdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47VHdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpNd2UsdHdlZW46RXdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmV2dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPmV2dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gVHdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPUFfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT10dnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT10dnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIHJ2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEN3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIEF3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2EodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gbnZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/Q3dlOkF3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPU9hKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9xbToocj1yYyh0KSk/KHQ9cixxbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBJd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBMd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24ga3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBSd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBOd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGl2dChlLHQpe3ZhciByPVBoKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP053ZTpSd2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Jd2U6UHdlKShyKTooci5sb2NhbD9rd2U6THdlKShyLG4sdCkpfWZ1bmN0aW9uIER3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gT3dlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gendlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmT3dlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBGd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZEd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIG92dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49UGgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD96d2U6RndlKShuLHQpKX1mdW5jdGlvbiBCd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIGF2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP0J3ZTpId2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFZ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gc3Z0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/VndlOlV3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gcXdlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBsdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHF3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIGN2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiB1dnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBHd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBXd2UoZSx0LHIpe3ZhciBuLGksbz1Hd2UodCk/QkU6T2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gaHZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goV3dlKHIsZSx0KSl9ZnVuY3Rpb24gWXdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBmdnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsWXdlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gcHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Tm0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24gZHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBqd2U9SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIG12dCgpe3JldHVybiBuZXcgandlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBYd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89U3AodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gZ3Z0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uICR3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIEt3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVNwKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxTcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBad2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1PYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9Z3Z0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gX3Z0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxYd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsZ3Z0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxLd2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goWndlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSwkd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIEp3ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gUXdlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZKd2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24geXZ0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLFF3ZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gdFNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gZVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHZ2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZVNlKGJiKHRoaXMsInRleHQiLGUpKTp0U2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gclNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBuU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmclNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24geHZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxuU2UoZSkpfWZ1bmN0aW9uIGJ2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtHbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIHd2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBpU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIEloKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisraVNlfXZhciB3Yj1JaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0OnB2dCxzZWxlY3RBbGw6ZHZ0LGZpbHRlcjpjdnQsbWVyZ2U6dXZ0LHNlbGVjdGlvbjptdnQsdHJhbnNpdGlvbjpidnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOmh2dCxhdHRyOml2dCxhdHRyVHdlZW46b3Z0LHN0eWxlOl92dCxzdHlsZVR3ZWVuOnl2dCx0ZXh0OnZ2dCx0ZXh0VHdlZW46eHZ0LHJlbW92ZTpmdnQsdHdlZW46bnZ0LGRlbGF5OmF2dCxkdXJhdGlvbjpzdnQsZWFzZTpsdnQsZW5kOnd2dH07SV8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfTtmdW5jdGlvbiBwU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1BcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIE92dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9QXAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZHbShsLGUsdCxjLGEscnx8cFNlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9SWgucHJvdG90eXBlLmludGVycnVwdD1ydnQ7SWgucHJvdG90eXBlLnRyYW5zaXRpb249T3Z0O3ZhciBkU2U9W251bGxdO2Z1bmN0aW9uIHp2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSxkU2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEZ2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBCdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEh2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltIdnQoZVswXSksSHZ0KGVbMV0pXX1mdW5jdGlvbiBtU2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBUcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LGdTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFBwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxWdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFV2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sX1NlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHlTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiB2U2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiB4U2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIHdTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gcXZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoZ1NlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD14U2Uscj12U2Usbj1iU2UsaT0hMCxvPXZzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gUHBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtNcChuZXcgRnZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9CdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6X1NlW3ldLFM9ZT09PUhMP251bGw6eVNlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP21TZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixQcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksem0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIEJ2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gVnZ0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9VnZ0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFV2dCYmZHQuYXR0cigiY3Vyc29yIixQcFt5PVV2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBGbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSx3U2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLFBwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLEd2dD1NYXRoLlBJLFZFPUd2dC8yLEtZPUd2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIFNTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uIFd2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1TU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIFl2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksTF89MWUtNixNU2U9UVktTF87ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqdnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1qdnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+TF8paWYoIShNYXRoLmFicyh1KnMtbCpjKT5MXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5MXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5MX3x8TWF0aC5hYnModGhpcy5feTEtYyk+TF8pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5NU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+TF8mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJzPWp2dDtmdW5jdGlvbiBFU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gQ1NlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBBU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gWHZ0KCl7dmFyIGU9RVNlLHQ9VFNlLHI9Q1NlLG49QVNlLGk9UFNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1ZdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPWJzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIGtTZT1BcnJheS5wcm90b3R5cGUsS0w9a1NlLnNsaWNlO2Z1bmN0aW9uIGwxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gYzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gT2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHUxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9UlNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gUlNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoTlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gTlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gRFNlKGUsdCxyKSYmT1NlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBEU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gT1NlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBoMXQoKXt9dmFyIElwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGwxdCk7ZWxzZXt2YXIgaD1hYShjKSxmPWhbMF0scD1oWzFdO3U9dGwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSksYzF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKHUxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LElwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LElwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoSXBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxJcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsSXBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsSXBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LElwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT9PaChLTC5jYWxsKGMpKTpPaChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6aDF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiB6U2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gRlNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEJTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGYxdCgpe3ZhciBlPXpTZSx0PUZTZSxyPUJTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT1PaCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz10bCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP09oKEtMLmNhbGwoeSkpOk9oKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofWttKCk7cUUoKTtJXygpO2Z1bmN0aW9uIEdTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEwxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oR1NlKX1mdW5jdGlvbiBXU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gazF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihXU2UpfXFFKCk7ZnVuY3Rpb24gWVNlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gRF8oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKFlTZSl9ZnVuY3Rpb24gUjF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksRF8odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1XbShlKTtyZXR1cm4gRF8odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgTjF0PVIxdChDYiksRDF0PVIxdChBYik7ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBqU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gejF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihqU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgRjF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxCMXQ9YWooInRleHQvaHRtbCIpLEgxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFYxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIERuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFUxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIHExdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIHExdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBHMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpcTF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIFcxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBZMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBqMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gWDF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiAkMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gSzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBaMXQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiBKMXQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIFExdChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIHR4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gcnh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBueHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gaXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiB6aChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/ZXh0OnQscj09bnVsbD9ueHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBveHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciB6YT16aC5wcm90b3R5cGU9c2oucHJvdG90eXBlO3phLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1veHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1veHQobikpO3JldHVybiBlfTt6YS5hZGQ9VTF0O3phLmFkZEFsbD1HMXQ7emEuY292ZXI9VzF0O3phLmRhdGE9WTF0O3phLmV4dGVudD1qMXQ7emEuZmluZD1YMXQ7emEucmVtb3ZlPSQxdDt6YS5yZW1vdmVBbGw9SzF0O3phLnJvb3Q9WjF0O3phLnNpemU9SjF0O3phLnZpc2l0PVExdDt6YS52aXNpdEFmdGVyPXR4dDt6YS54PXJ4dDt6YS55PWl4dDtmdW5jdGlvbiBYU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uICRTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gYXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PXpoKHQsWFNlLCRTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6RG4oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gS1NlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIHN4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBseHQoZSl7dmFyIHQ9S1NlLHI9dSxuLGk9RG4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPXN4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PXN4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLGQoKSxoKTppfSxofWttKCk7VGIoKTtmdW5jdGlvbiBjeHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiB1eHQoZSl7cmV0dXJuIGUueX12YXIgWlNlPTEwLEpTZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gaHh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPUFfKHUpLGM9dnMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PVpTZSpNYXRoLnNxcnQoZCkseD1kKkpTZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBmeHQoKXt2YXIgZSx0LHIsbj1EbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPXpoKGUsY3h0LHV4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkRuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBweHQoZSx0LHIpe3ZhciBuLGk9RG4oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpEbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6RG4oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24gZHh0KGUpe3ZhciB0PURuKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6RG4oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIG14dChlKXt2YXIgdD1EbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPURuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpEbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiBneHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE9fKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEZoKGUpe3JldHVybiBlPU9fKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIF94dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB5eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBRU2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTHAoZSl7aWYoISh0PVFTZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9THAucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiB2eHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIHh4dChlLHQpe3ZhciByPU9fKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK09fKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpneHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczp4eHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgYnh0PUFycmF5LnByb3RvdHlwZS5tYXAsd3h0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOl94dChieHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnl4dChieHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPXZ4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP3d4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1McChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz13eHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaCh0KS8zKSkpKjMtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEZoKHQpLUZoKGUpKSsxfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7U3h0KHNrLGUsdGhpcy50KSxTeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIFN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LHpfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEZfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLGNhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZFeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmRXh0W2UudHlwZV0oZSx0KX12YXIgTXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxFeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7VHh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspVHh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gVHh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmTXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/TXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1TcygpLHBrPVNzKCksQ3h0LEF4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9dDNlLHB1LmxpbmVFbmQ9ZTNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIHQzZSgpe3B1LnBvaW50PXIzZX1mdW5jdGlvbiBlM2UoKXtQeHQoQ3h0LEF4dCl9ZnVuY3Rpb24gcjNlKGUsdCl7cHUucG9pbnQ9UHh0LEN4dD1lLEF4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFB4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gSXh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gQl8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIEhfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksTXMsdWksbmwsVl8sTnh0LER4dCxMYixLRT1TcygpLFltLE5wLFJwPXtwb2ludDpfaixsaW5lU3RhcnQ6THh0LGxpbmVFbmQ6a3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JwLnBvaW50PXp4dCxScC5saW5lU3RhcnQ9bjNlLFJwLmxpbmVFbmQ9aTNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksUnAucG9pbnQ9X2osUnAubGluZVN0YXJ0PUx4dCxScC5saW5lRW5kPWt4dCxqRTwwPyhyaT0tKHVpPTE4MCksTXM9LShubD05MCkpOktFPmxlP25sPTkwOktFPC1sZSYmKE1zPS05MCksTnBbMF09cmksTnBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxNcz0tKG5sPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7WW0ucHVzaChOcD1bcmk9ZSx1aT1lXSksdDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KX1mdW5jdGlvbiBPeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPWtwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1rcChpLG4pO0hfKG8pLG89Ql8obyk7dmFyIGE9ZS1WXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypWXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPm5sJiYobmw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlZfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPE1zJiYoTXM9YykpOih0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpKSksdT9lPFZfP3JsKHJpLGUpPnJsKHJpLHVpKSYmKHVpPWUpOnJsKGUsdWkpPnJsKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5WXz9ybChyaSxlKT5ybChyaSx1aSkmJih1aT1lKTpybChlLHVpKT5ybChyaSx1aSkmJihyaT1lKX1lbHNlIFltLnB1c2goTnA9W3JpPWUsdWk9ZV0pO3Q8TXMmJihNcz10KSx0Pm5sJiYobmw9dCksTGI9cixWXz1lfWZ1bmN0aW9uIEx4dCgpe1JwLnBvaW50PU94dH1mdW5jdGlvbiBreHQoKXtOcFswXT1yaSxOcFsxXT11aSxScC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIHp4dChlLHQpe2lmKExiKXt2YXIgcj1lLVZfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIE54dD1lLER4dD10O3B1LnBvaW50KGUsdCksT3h0KGUsdCl9ZnVuY3Rpb24gbjNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gaTNlKCl7enh0KE54dCxEeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLE5wWzBdPXJpLE5wWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gcmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIG8zZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gUnh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBGeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYobmw9dWk9LShyaT1Ncz0xLzApLFltPVtdLHZvKGUsUnApLHI9WW0ubGVuZ3RoKXtmb3IoWW0uc29ydChvM2UpLHQ9MSxuPVltWzBdLG89W25dO3Q8cjsrK3QpaT1ZbVt0XSxSeHQobixpWzBdKXx8Unh0KG4saVsxXSk/KHJsKG5bMF0saVsxXSk+cmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSkscmwoaVswXSxuWzFdKT5ybChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXJsKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gWW09TnA9bnVsbCxyaT09PTEvMHx8TXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksTXNdLFt1aSxubF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixWeHQsVXh0LEZhLEJhLEhhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OkJ4dCxsaW5lRW5kOkh4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9bDNlLGR1LmxpbmVFbmQ9YzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PUJ4dCxkdS5saW5lRW5kPUh4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBCeHQoKXtkdS5wb2ludD1hM2V9ZnVuY3Rpb24gYTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLGR1LnBvaW50PXMzZSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gczNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9QmEqby1IYSppKSphKyhhPUhhKm4tRmEqbykqYSsoYT1GYSppLUJhKm4pKmEpLEZhKm4rQmEqaStIYSpvKTttays9YSx2ays9YSooRmErKEZhPW4pKSx4ays9YSooQmErKEJhPWkpKSxiays9YSooSGErKEhhPW8pKSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gSHh0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gbDNlKCl7ZHUucG9pbnQ9dTNlfWZ1bmN0aW9uIGMzZSgpe3F4dChWeHQsVXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiB1M2UoZSx0KXtWeHQ9ZSxVeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1xeHQ7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLEpFKEZhLEJhLEhhKX1mdW5jdGlvbiBxeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1CYSpvLUhhKmkscz1IYSpuLUZhKm8sbD1GYSppLUJhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEZhKyhGYT1uKSkseGsrPXUqKEJhKyhCYT1pKSksYmsrPXUqKEhhKyhIYT1vKSksSkUoRmEsQmEsSGEpfWZ1bmN0aW9uIEd4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPHpfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPHpfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKFl4dChlKSxqeHQodCxyKSk6WXh0KGUpOnR8fHI/anh0KHQscik6d2p9ZnVuY3Rpb24gV3h0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBZeHQoZSl7dmFyIHQ9V3h0KGUpO3JldHVybiB0LmludmVydD1XeHQoLWUpLHR9ZnVuY3Rpb24ganh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1YeHQoYSxpKSxvPVh4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9Ql8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIFh4dChlLHQpe3Q9b2ModCksdFswXS09ZSxIXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiAkeHQoKXt2YXIgZT1VXyhbMCwwXSksdD1VXyg5MCkscj1VXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6VV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksS3h0KG8pLEt4dChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gS3h0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9U3MoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06Y2EoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPWtwKG9jKGYpLG9jKHgpKTtIXyhMKTt2YXIgUj1rcChvLEwpO0hfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9SW0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxmM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihoM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIGgzZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBmM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxwM2UsbTNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gcDNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj1kM2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiBkM2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIG0zZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPWtwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9a3AoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1CXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixCXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBaeHQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBEcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9SW0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07Wnh0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiBKeHQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9RHAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9U3MoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDpnM2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24gZzNlKCl7UmIucG9pbnQ9eTNlLFJiLmxpbmVFbmQ9XzNlfWZ1bmN0aW9uIF8zZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24geTNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD12M2V9ZnVuY3Rpb24gdjNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLHgzZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayh4M2UpfXZhciBReHQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSx0YnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBlYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoZWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYocmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYobmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmdGJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/dGJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBlYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gcmJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTx6XyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gbmJ0KGUsdCl7cmV0dXJuISFUayhlLm1hcChiM2UpLGlidCh0KSl9ZnVuY3Rpb24gYjNlKGUpe3JldHVybiBlPWUubWFwKGlidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGlidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4oZSYmUXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UXh0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gYWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gc2J0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPWFidChvLGksOTApLHA9c2J0KHQsZSxfKSxkPWFidChzLGEsOTApLGc9c2J0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBsYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIGNidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIGptKGUpe3JldHVybiBlfXZhciBQaj1TcygpLElqPVNzKCksdWJ0LGhidCxMaixraixYbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PXczZSxYbS5saW5lRW5kPU0zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1htLmxpbmVTdGFydD1YbS5saW5lRW5kPVhtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIHczZSgpe1htLnBvaW50PVMzZX1mdW5jdGlvbiBTM2UoZSx0KXtYbS5wb2ludD1mYnQsdWJ0PUxqPWUsaGJ0PWtqPXR9ZnVuY3Rpb24gZmJ0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIE0zZSgpe2ZidCh1YnQsaGJ0KX12YXIgUmo9WG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsRTNlPXtwb2ludDpUM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gVDNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1FM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLG1idCxnYnQsQmgsSGgsbXU9e3BvaW50OnFfLGxpbmVTdGFydDpwYnQsbGluZUVuZDpkYnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVAzZSxtdS5saW5lRW5kPUkzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PXFfLG11LmxpbmVTdGFydD1wYnQsbXUubGluZUVuZD1kYnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gcV8oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIHBidCgpe211LnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXttdS5wb2ludD1BM2UscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBBM2UoZSx0KXt2YXIgcj1lLUJoLG49dC1IaCxpPXhyKHIqcituKm4pO3prKz1pKihCaCtlKS8yLEZrKz1pKihIaCt0KS8yLHpiKz1pLHFfKEJoPWUsSGg9dCl9ZnVuY3Rpb24gZGJ0KCl7bXUucG9pbnQ9cV99ZnVuY3Rpb24gUDNlKCl7bXUucG9pbnQ9TDNlfWZ1bmN0aW9uIEkzZSgpe19idChtYnQsZ2J0KX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1fYnQscV8obWJ0PUJoPWUsZ2J0PUhoPXQpfWZ1bmN0aW9uIF9idChlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7emsrPWkqKEJoK2UpLzIsRmsrPWkqKEhoK3QpLzIsemIrPWksaT1IaCplLUJoKnQsT2orPWkqKEJoK2UpLHpqKz1pKihIaCt0KSxvNSs9aSozLHFfKEJoPWUsSGg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPVNzKCksQmoseWJ0LHZidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9azNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJnhidCh5YnQsdmJ0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIGszZShlLHQpe0hrLnBvaW50PXhidCx5YnQ9YTU9ZSx2YnQ9czU9dH1mdW5jdGlvbiB4YnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpiYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1iYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBiYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gd2J0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLGptKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIFNidChlKXtyZXR1cm57c3RyZWFtOiRtKGUpfX1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIEdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBHXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBNYnQ9MTYsUjNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0QzZShlLHQpOk4zZShlKX1mdW5jdGlvbiBOM2UoZSl7cmV0dXJuICRtKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gRDNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8UjNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLE1idCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsTWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIE8zZT0kbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIHozZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIEYzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIEVidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9am0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPU8zZSh6M2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLGptKTpEcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBHXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1FYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP0VidDpGM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIFRidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gVGJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSpjYShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSpjYShzKSpjYShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFdfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFdfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gQjNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBDYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9V18oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1XXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1CM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBHXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFZoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIEFidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBQYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gWV8oZSx0KXtyZXR1cm5bZSxGXyhJYigobW4rdCkvMikpXX1ZXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIElidCgpe3JldHVybiBZaihZXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1ZXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpGXyhyL1p0KHQpKS9GXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIFlfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9Y2EobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSpjYShhKSpjYShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gTGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIGpfKGUsdCl7cmV0dXJuW2UsdF19al8uaW52ZXJ0PWpfO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShqXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSpjYShhKSpjYShsKSksW2MvbixpLWNhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiBSYnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsSDNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288SDNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8el8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBOYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVZoKGljKTtmdW5jdGlvbiBEYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gT2J0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPSRtKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1qbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsam0pOkRwKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBHXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIHpidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1WaCh3bik7ZnVuY3Rpb24gRmJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVZoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gQmJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0ZfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEhidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVjNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFUzZShlKXtyZXR1cm4gZS5yZWR1Y2UocTNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIHEzZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBHM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoVzNlLDApfWZ1bmN0aW9uIFczZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gWTNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBqM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFZidCgpe3ZhciBlPVYzZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9VTNlKHApLGYueT1HM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9WTNlKG8pLGM9ajNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIFgzZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBVYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoWDNlKX1mdW5jdGlvbiBxYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFlidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIGpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIFhidChlKXtmb3IodmFyIHQ9dGhpcyxyPSQzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uICQzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gJGJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIEtidCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBaYnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gSmJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IEttKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9WjNlKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgS20oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gSzNlKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUoSjNlKX1mdW5jdGlvbiBaM2UoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gSjNlKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIEttKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfUttLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkttLGNvdW50OlVidCxlYWNoOnFidCxlYWNoQWZ0ZXI6V2J0LGVhY2hCZWZvcmU6R2J0LHN1bTpZYnQsc29ydDpqYnQscGF0aDpYYnQsYW5jZXN0b3JzOiRidCxkZXNjZW5kYW50czpLYnQsbGVhdmVzOlpidCxsaW5rczpKYnQsY29weTpLM2V9O3ZhciBRYnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHQydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPXQydChRYnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZlMnQobyxpKT8rK3Q6KG89dE1lKG49UTNlKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gUTNlKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihyMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIGUydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIWUydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHRNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZU1lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIHIydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIGVNZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiByMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBuMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBpMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBvMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO24ydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7bjJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGkydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGkydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1vMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPW8ydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gYTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIHMydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiBPcCgpe3JldHVybiAwfWZ1bmN0aW9uIFptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiByTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB1MnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1PcDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUobDJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUoYzJ0KDEpKTpvLmVhY2hCZWZvcmUobDJ0KHJNZSkpLmVhY2hBZnRlcihKaihPcCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGMydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOlptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGwydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBjMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIFVoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gaDJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmVWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGYydD0iJCIsbk1lPXtkZXB0aDotMX0scDJ0PXt9O2Z1bmN0aW9uIGlNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBvTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24gZDJ0KCl7dmFyIGU9aU1lLHQ9b01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBLbShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWYydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9wMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZjJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09cDJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9bk1lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiBhTWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIHNNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBsTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gY01lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS20ucHJvdG90eXBlKTtmdW5jdGlvbiB1TWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9YU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dU1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2xNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoc01lKGNNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEptKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/VWgobCxyLG4saSxnP24rPWQqXy9nOm8pOkptKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiBnMnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz1PcCxhPU9wLHM9T3AsbD1PcCxjPU9wO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Wm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6Y30sdX1mdW5jdGlvbiBfMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB5MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP0ptOlVoKShlLHQscixuLGkpfXZhciB2MnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP1VoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpKbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24geDJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBiMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIHcydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gaE1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIFMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZ3MnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gTTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQoaE1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1TMnQobiksYT1TMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gRTJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBUMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgQzJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBBMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFAydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBJMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgTDJ0PUFycmF5LnByb3RvdHlwZSxYXz1MMnQubWFwLGxjPUwydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gUW0oKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFtKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBrMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gazJ0KHQoKSl9LGV9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gazJ0KFFtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIFIydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIE4ydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTpSMnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBEMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBmTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gcE1lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9eXMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gJF8oKXt2YXIgZT1OMnQsdD1OMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9wTWU6Zk1lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9RDJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0QydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiAkXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9dGwoZSx0LHIpLG87c3dpdGNoKG49THAobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD14XyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPXhfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD14XyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiBPbigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsT24oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxpbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD9YXy5jYWxsKGUsbTUpOlswLDFdLGlsKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gTzJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiB6MnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIGRNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIG1NZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIGdNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gX01lKGUpe3JldHVybiBlPT09MTA/Z01lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gRjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoTzJ0LHoydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9eU1lKG4pLG89X01lKG4pLHIoKVswXTwwPyhpPUYydChpKSxvPUYydChvKSxlKGRNZSxtTWUpKTplKE8ydCx6MnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNSgkXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIEIydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBIMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUoQjJ0KHQpLEgydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShCMnQodD0rbiksSDJ0KHQpKTp0fSxpbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiB2TWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24geE1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2Uodk1lLHhNZSk6ZShWMnQociksVjJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0saWwodCl9ZnVuY3Rpb24gS18oKXt2YXIgZT12NSgkXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsS18oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gVTJ0KCl7cmV0dXJuIEtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gZWcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09c2EoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt5cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQob2EpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbeXMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkoaWwoYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbeXMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIFpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBKXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBxMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqSl8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0pffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRXz1xMnQsc1g9cTJ0LnJhbmdlO3ZhciBHMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1HMnQsVzJ0PUcydC5yYW5nZTt2YXIgWTJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqSl8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PVkydCxqMnQ9WTJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHR5PVgydCwkMnQ9WDJ0LnJhbmdlO2Z1bmN0aW9uIGV5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciByZz1leSgwKSxyeT1leSgxKSxsWD1leSgyKSxjWD1leSgzKSx6cD1leSg0KSx1WD1leSg1KSxoWD1leSg2KSxmWD1yZy5yYW5nZSxLMnQ9cnkucmFuZ2UsWjJ0PWxYLnJhbmdlLEoydD1jWC5yYW5nZSxRMnQ9enAucmFuZ2UsdHd0PXVYLnJhbmdlLGV3dD1oWC5yYW5nZTt2YXIgcnd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PXJ3dCxud3Q9cnd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIEdoPXBYLGl3dD1wWC5yYW5nZTt2YXIgb3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9b3d0LGF3dD1vd3QucmFuZ2U7dmFyIHN3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PXN3dCxsd3Q9c3d0LnJhbmdlO3ZhciBjd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksbnk9Y3d0LHV3dD1jd3QucmFuZ2U7ZnVuY3Rpb24gaXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgbmc9aXkoMCksb3k9aXkoMSksZFg9aXkoMiksbVg9aXkoMyksRnA9aXkoNCksZ1g9aXkoNSksX1g9aXkoNikseVg9bmcucmFuZ2UsaHd0PW95LnJhbmdlLGZ3dD1kWC5yYW5nZSxwd3Q9bVgucmFuZ2UsZHd0PUZwLnJhbmdlLG13dD1nWC5yYW5nZSxnd3Q9X1gucmFuZ2U7dmFyIF93dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1fd3QseXd0PV93dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBXaD12WCx2d3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpFd3QsZTpFd3QsZjpxTWUsZzpRTWUsRzplRWUsSDpITWUsSTpWTWUsajpVTWUsTDpJd3QsbTpHTWUsTTpXTWUscDpzdCxxOlN0LFE6QXd0LHM6UHd0LFM6WU1lLHU6ak1lLFU6WE1lLFY6JE1lLHc6S01lLFc6Wk1lLHg6bnVsbCxYOm51bGwseTpKTWUsWTp0RWUsWjpyRWUsIiUiOkN3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpUd3QsZTpUd3QsZjphRWUsZzpnRWUsRzp5RWUsSDpuRWUsSTppRWUsajpvRWUsTDprd3QsbTpzRWUsTTpsRWUscDpfdCxxOmN0LFE6QXd0LHM6UHd0LFM6Y0VlLHU6dUVlLFU6aEVlLFY6ZkVlLHc6cEVlLFc6ZEVlLHg6bnVsbCxYOm51bGwseTptRWUsWTpfRWUsWjp2RWUsIiUiOkN3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOlN3dCxlOlN3dCxmOk9NZSxnOnd3dCxHOmJ3dCxIOk13dCxJOk13dCxqOmtNZSxMOkRNZSxtOkxNZSxNOlJNZSxwOkQscTpJTWUsUTpGTWUsczpCTWUsUzpOTWUsdTpFTWUsVTpUTWUsVjpDTWUsdzpNTWUsVzpBTWUseDp6LFg6VSx5Ond3dCxZOmJ3dCxaOlBNZSwiJSI6ek1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9eHd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/b3kuY2VpbChodCk6b3koaHQpLGh0PW55Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9yeS5jZWlsKGh0KTpyeShodCksaHQ9dHkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIHh3dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciB4d3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLGJNZT0vXiUvLHdNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gU01lKGUpe3JldHVybiBlLnJlcGxhY2Uod01lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKFNNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIE1NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYnd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHd3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFBNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6TWUoZSx0LHIpe3ZhciBuPWJNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEZNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEhNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBWTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFVNZShlLHQpe3JldHVybiBCcigxK3R5LmNvdW50KEdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSXd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBxTWUoZSx0KXtyZXR1cm4gSXd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gR01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gV01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWU1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gak1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBYTWUoZSx0KXtyZXR1cm4gQnIocmcuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEx3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD96cChlKTp6cC5jZWlsKGUpfWZ1bmN0aW9uICRNZShlLHQpe3JldHVybiBlPUx3dChlKSxCcih6cC5jb3VudChHaChlKSxlKSsoR2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIEtNZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBaTWUoZSx0KXtyZXR1cm4gQnIocnkuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEpNZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gUU1lKGUsdCl7cmV0dXJuIGU9THd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB0RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGVFZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/enAoZSk6enAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gckVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBUd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBuRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gaUVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBvRWUoZSx0KXtyZXR1cm4gQnIoMStueS5jb3VudChXaChlKSxlKSx0LDMpfWZ1bmN0aW9uIGt3dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gYUVlKGUsdCl7cmV0dXJuIGt3dChlLHQpKyIwMDAifWZ1bmN0aW9uIHNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGxFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHVFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gaEVlKGUsdCl7cmV0dXJuIEJyKG5nLmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBSd3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/RnAoZSk6RnAuY2VpbChlKX1mdW5jdGlvbiBmRWUoZSx0KXtyZXR1cm4gZT1Sd3QoZSksQnIoRnAuY291bnQoV2goZSksZSkrKFdoKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBwRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZEVlKGUsdCl7cmV0dXJuIEJyKG95LmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBtRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGdFZShlLHQpe3JldHVybiBlPVJ3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gX0VlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB5RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0ZwKGUpOkZwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHZFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gQ3d0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEF3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBQd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsYXksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLGF5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24geEVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIGJFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz94RWU6YXkoU1gpLE53dD1iRWU7ZnVuY3Rpb24gd0VlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFNFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP3dFZTpFNShTWCksRHd0PVNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LE1FZT1QNSo3LE93dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gRUVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBURWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsTUVlXSxbdCwxLE93dF0sW3QsMywzKk93dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj10bChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heCh0bChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChYXy5jYWxsKGssVEVlKSk6aCgpLm1hcChFRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KEdoLHY4LHJnLHR5LHk4LF84LFFfLFpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiB6d3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoV2gsdzgsbmcsbnksYjgseDgsUV8sWl8sYXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1pbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEZ3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgoeXMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQob2EpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1pbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEJ3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEh3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFZ3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFV3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIHF3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIEd3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyIFd3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIFl3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIGp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIFh3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLCR3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksS3d0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxad3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLEp3dD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksUXd0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSx0U3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLGVTdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksclN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxuU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGlTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksb1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSxhU3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLHNTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksbFN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxjU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLHVTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksaFN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxmU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLHBTdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSksZFN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSxtU3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLGdTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksX1N0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx5U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLHZTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSkseFN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxiU3Q9SWUoZSQpO2Z1bmN0aW9uIHdTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgU1N0PUVfKGxhKDMwMCwuNSwwKSxsYSgtMjQwLC41LDEpKTt2YXIgTVN0PUVfKGxhKC0xMDAsLjc1LC4zNSksbGEoODAsMS41LC44KSksRVN0PUVfKGxhKDI2MCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxrOD1sYSgpO2Z1bmN0aW9uIFRTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxDRWU9TWF0aC5QSS8zLEFFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBDU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStDRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUrQUVlKSkqdCxSOCsiIn1mdW5jdGlvbiBBU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUFN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksSVN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksTFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksa1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLGlnPU1hdGguY29zLFJTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixzeT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gTlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFBFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTEVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24ga0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBORWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvc3kocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqc3koUlN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBEU3QoKXt2YXIgZT1QRWUsdD1JRWUscj1xZSgwKSxuPW51bGwsaT1MRWUsbz1rRWUsYT1SRWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1icygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKmlnKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqaWcoZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6c3koaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKmlnKHkpLFc9ZipfdSh5KSxaPWgqaWcoUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZippZyh4KSxzdD1mKl91KHgpLFN0PWgqaWcoYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9TkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KE5TdCgobHQqX3QrS3QqY3QpLyhzeShsdCpsdCtLdCpLdCkqc3koX3QqX3QrY3QqY3QpKSkvMiksZXQ9c3koTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW2lnKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBPU3QoZSl7dGhpcy5fY29udGV4dD1lfU9TdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBZaChlKXtyZXR1cm4gbmV3IE9TdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9WWgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPWJzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1ZaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PWJzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gelN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIEZTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1GU3QsdD16U3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihZaCk7ZnVuY3Rpb24gSFN0KGUpe3RoaXMuX2N1cnZlPWV9SFN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEhTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBseShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIERFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1ERWUscj1PRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1icygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHpFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIEJFZShlLHQscixuLGkpe3ZhciBvPWx5KHQsciksYT1seSh0LHI9KHIraSkvMikscz1seShuLHIpLGw9bHkobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gVlN0KCl7cmV0dXJuIGEkKHpFZSl9ZnVuY3Rpb24gVVN0KCl7cmV0dXJuIGEkKEZFZSl9ZnVuY3Rpb24gcVN0KCl7dmFyIGU9YSQoQkVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBHU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxIRWU9R1N0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9IRWUpLG49cipHU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgVkVlPS44OTA4MTMwOTE1MjkyODUyLFdTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksVUVlPU1hdGguc2luKGhjLzEwKSpXU3QscUVlPS1NYXRoLmNvcyhoYy8xMCkqV1N0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqVkVlKSxuPVVFZSpyLGk9cUVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxHRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L0dFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIFlTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIGpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9YnMoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gWFN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1YU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiAkU3QoZSl7cmV0dXJuIG5ldyBYU3QoZSl9ZnVuY3Rpb24gS1N0KGUpe3RoaXMuX2NvbnRleHQ9ZX1LU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gWlN0KGUpe3JldHVybiBuZXcgS1N0KGUpfWZ1bmN0aW9uIEpTdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9SlN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgUVN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyBKU3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgdDN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgZTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIHIzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIG4zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW4zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGkzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IG4zdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIG8zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW8zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciBhM3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBvM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBzM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1zM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlKXt0aGlzLl9jb250ZXh0PWV9YzN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gdTN0KGUpe3JldHVybiBuZXcgYzN0KGUpfWZ1bmN0aW9uIGgzdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZjN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGgzdChvKStoM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBwM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAscDN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLHAzdCh0aGlzLHI9ZjN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZjN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24gZDN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IG0zdChlKX0oZDN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiBtM3QoZSl7dGhpcy5fY29udGV4dD1lfW0zdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiBnM3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBfM3QoZSl7cmV0dXJuIG5ldyBkM3QoZSl9ZnVuY3Rpb24gdjN0KGUpe3RoaXMuX2NvbnRleHQ9ZX12M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49eTN0KGUpLGk9eTN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB5M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyB2M3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiB3M3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIFMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiBXRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBNM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49V0VlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIEUzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBUM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEMzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIEEzdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoWUVlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBZRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUDN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gSTN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEwzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBrM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9TjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289TjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBOM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFZhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFZhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIGpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gWEVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEQzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIVhFZShvPXdvW2ldLGUsdCxyLG4pfHwhakVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gTzN0KGUpe3JldHVybiBWYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gJEVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIEtFZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gejN0KCl7Zm9yKHZhciBlPTAsdD1WYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVZhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09JEVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIEYzdChlLHQscixuKXt2YXIgaT1WYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1WYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9S0VlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1WYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBWYVtvXSl9dmFyIEIzdD1bXSxRODtmdW5jdGlvbiBaRWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gY3koZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUgzdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PUIzdC5wb3AoKXx8bmV3IFpFZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIHV5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxCM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgVTN0PVtdO2Z1bmN0aW9uIEpFZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBWM3QoZSl7dmFyIHQ9VTN0LnBvcCgpfHxuZXcgSkVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe3V5KGUpLGh5LnJlbW92ZShlKSxVM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBxM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSx1eShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLHV5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxjeShsKSxjeShjKX1mdW5jdGlvbiBHM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1oeS5fO3M7KWlmKG89VzN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LVFFZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfU8zdChlKTt2YXIgbD1WM3QoZSk7aWYoaHkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7dXkobiksaT1WM3Qobi5zaXRlKSxoeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLGN5KG4pLGN5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn11eShuKSx1eShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksY3kobiksY3koaSl9fWZ1bmN0aW9uIFczdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIFFFZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiBXM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEgzdD0xZS0xMixoeSxWYSxuMix3bztmdW5jdGlvbiB0NWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIGU1ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChlNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxWYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGh5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKEczdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKXEzdChvLmFyYyk7ZWxzZSBicmVhaztpZih6M3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtEM3QoYSxzLGwsYyksRjN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1WYSxoeT1uMj13bz1WYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZ0NWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gWTN0KCl7dmFyIGU9azN0LHQ9UjN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1rbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIGpoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1qaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBqaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IGpoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFhoPW5ldyBqaCgxLDAsMCk7aTIucHJvdG90eXBlPWpoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIFhoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBuNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIGozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8WGh9ZnVuY3Rpb24gaTVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gbzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGE1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1yNWUsdD1uNWUscj1hNWUsbj1pNWUsaT1vNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXZzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixqM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLGozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKFhoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IGpoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgamgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IGpoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtNcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7em0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxGbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9VHAodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPVRwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBYM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e1gzdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBzNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPXM1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uICQzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49JDN0KHdwLCgpPT53cC5nZXRSdW5zKCkpLHVRcj0kM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgb2c9RWUoT2UoKSwxKTtfcyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBvbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PW9nLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9b2cuZmlsdGVyKG9nLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPW9nLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07b2wudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG9sLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sb2wucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG9sLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb2wucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTtvbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sb2wpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD15XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj13cC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIix3cC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3dwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO19zKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiBLM3QoZSl7bGV0IHQ9YzVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBjNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIEszdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyICRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihmeS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49ZnkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWZ5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBmeS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTskaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJGgucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLCRoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLCRoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLCRoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpOyRoPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sJGgpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke3U1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiB1NWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIEozdD1FZShPZSgpLDEpO3ZhciBIcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9SjN0LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O0hwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtIcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLEhwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHtoNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBoNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgV0t0PUVlKE9lKCksMSksVVduPUVlKHdsKCksMSk7dmFyIExLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9TEt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgX3FlPUVlKE9lKCksMSksV289RWUod2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLEVkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKEVkfHwoRWQ9e30pKTt2YXIgZTA9NCx5cWU9NCxtQj0zLGdCPTIwLF9CPTQsa0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt5cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiB2cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgcjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiB4cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6cjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIEVkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgRWQuV0FMTF9USU1FOnJldHVybiB2cWUoKTtjYXNlIEVkLlJFTEFUSVZFOnJldHVybiB4cWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIHpzPUVlKE9lKCksMSksTW49RWUod2woKSwxKTt2YXIgdmE9RWUod2woKSwxKTtmdW5jdGlvbiBicWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgd3FlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gU3FlKGUpe2xldCB0PWJxZShlKSxyPXdxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXZhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHZhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHZhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9U3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnZhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LFV2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW1V2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBVdih0KSxyW1V2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LHF2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3ZhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgdmEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPVV2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9cXYuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgUkt0PUVlKE9lKCksMSk7dmFyIEd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKEd2fHwoR3Y9e30pKTt2YXIgTXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249R3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Hdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09R3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07Ukt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLE1xZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKHdsKCksMSk7dmFyIE9LdD0xZTQsekt0PS4wMDEsRkt0PXhuKCIuMn5lIiksRXFlPXhuKCIuNH5yIiksTkt0PXhuKCIsfiIpO2Z1bmN0aW9uIERLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOkVxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkRLdCxmb3JtYXRTaG9ydDpES3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOk5LdChlKX0sZm9ybWF0TG9uZzpOS3R9LCRHbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBLR249eG4oIjAuM35zIiksWkduPXhuKCIsLjN+ZiIpO3ZhciBUcWU9MWUzLENxZT02MCpUcWUsQXFlPTYwKkNxZSxQcWU9MjQqQXFlLEpHbj0zNjUqUHFlLFFHbj14bigiLjR+Iik7dmFyIElxZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQsQkt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBJcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgVGQ7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoVGR8fChUZD17fSkpO2Z1bmN0aW9uIEhLdChlKXtzd2l0Y2goZSl7Y2FzZSBUZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBUZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgTHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT1PbigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqTHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIE9uKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9Qkt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBIS3QoVGQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9c2EobywuMDUpLHM9c2EobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9YWEobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZSh3bCgpLDEpO3ZhciBWS3Q9RWUod2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFZLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1zYShhLC4wNSksbD1zYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIENkPUVlKHdsKCksMSk7dmFyIG4wPUVlKHdsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBuMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPXhzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmbjAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP24wLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciB4YTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoeGF8fCh4YT17fSkpO3ZhciB6Zj1jbGFzcyBleHRlbmRzIENkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT14YS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBDZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT56Zi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IXpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1DZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT14YS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZSh4YS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09eGEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09eGEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSB4YS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIHhhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHhhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEZmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEZmfHwoRmY9e30pKTt2YXIgVUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IHpmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09RmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoa0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4genMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9cjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1yMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9enMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UoZTApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9enMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD16cy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PXpzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89enMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9enMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1GZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09RmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9VUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9VS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoTXgoS2woe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIEdLdD1FZShPZSgpLDEpLG5zdD1FZSh3bCgpLDEpO19zKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgaTA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShpMHx8KGkwPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1pMC5ESVZ8fHI9PWkwLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaTAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PWkwLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PWkwLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPWkwLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTtfcyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIga3FlPVd1KGUwKSxxS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6a3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIHFLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+cUt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIocjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1GZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249R3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtHS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSxScWU9MCxOcWU9V0t0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShScWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksSG49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9GZi5MT0c6RmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLE5xZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtIbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEhuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSG4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEhuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSG4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sSG4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7SG49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sSG4pO19zKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgV3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIocjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIgUkI9e307S3MoUkIse0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pmt4ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+UGd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5JZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+TnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT5SeGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT53cH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgV3Yoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgT0I9e307S3MoT0Ise0RJU0FNQklHVUFUT1I6KCk9PkIwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PktiZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+WmJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT50MmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PmpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PlhiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+SmJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT5XYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+RDB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+ZTJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+JGJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5RYmUsc2V0U3RyaW5nOigpPT5ZYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIFlLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLGpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxzc3QpLGxzdCk7dmFyIFFzZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLEtscj0uMyxabHI9WzEsNWU2XSxHc2U9S18oKS5leHBvbmVudChLbHIpLmRvbWFpbihabHIpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgWXNlPTIwO2Z1bmN0aW9uIEpscihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtKbHIoZSk/KGpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihZS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIGpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZTEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxZc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LFlzZSl9KX1mdW5jdGlvbiBYc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uICRzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBRbHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9UWxyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gV3NlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiBLc2UoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKFdzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2IjtXc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIix0bGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBlbGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIHRjcj0iX291dHB1dF9zaGFwZXMiLGVjcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPW9jcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1yY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9bmNyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBybGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gcmNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT10Y3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemUpKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1lY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgaWNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBvY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2goaWNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBubGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGlsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9WnNlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1ac2UodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGUxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmUxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9YWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IFFzZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gWnNlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBhY3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBKc2UoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gb2xlKGUsdCl7bGV0IHI9SnNlKGUpLG49SnNlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiBhbGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBzbGUoZSx0KXtsZXQgcj1sY3IoZSksbj1jY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIHNjcihlKXtsZXQgdD1yMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1yMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGxjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1zY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBjY3IoZSx0KXtyZXR1cm4gcjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fHVjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gcjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gdWNyKGUsdCl7aWYoIW9sZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFoY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGhjcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBsbGUobyx0LHIsbiksbGxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9c2xlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gbGxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGUxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLHBjcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmUxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmaGxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZTEoIkFkZGluZyBlZGdlcyIsNDAsKCk9PntkY3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBjbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gdWxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gcGNyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiBkY3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBobGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmaGxlKGgsdCxyLG4saSxvKX0pO2xldCBzPW1jcihhKSxjPShvP19jcjpnY3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiBtY3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24gZ2NyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBfY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0seWNyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPU9uKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9T24oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP0dzZTpPbigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe2RsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7ZmxlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtwbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmRWNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh5Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBmbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gcGxlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiB2Y3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzpkbGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIGRsZShlLHQpe2UuY29yZUdyYXBoJiZ2Y3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwocGxlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZmxlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIG1sZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHhjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gYmNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmbWxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIHdjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJm1sZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIFNjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gTWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIEVjcihlLHQpe3hjcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZiY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZ3Y3IoZSksdCYmU2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJk1jcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIGdsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciB4bGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6T24oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkNjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/QWNyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZQY3IoZSl9ZnVuY3Rpb24gVGNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8VGNyKHIpLEljcihyKX0pfWZ1bmN0aW9uIGJsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt4bGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZMY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09dmxlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT12bGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBBY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LGJsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUGNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsYmxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBJY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9Pl9sZSh1KSksWmUuZWFjaChyLHU9Pl9sZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9T24oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPU9uKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIF9sZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24geWxlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIExjcihlKXtsZXQgdD15bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj15bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gdmxlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXZlLGtjcj0zMjAsUmNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gU2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIE1sZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLWtjcixmPXUudG9wK3UuaGVpZ2h0LVJjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBFbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIFRsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIENsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24gQWxlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIHdsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIE5jcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBEY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1OY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9d2xlKGQubWluLGspLEI9d2xlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFBsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtEY3IodGhpcyxzLG8sbisrKX0pfXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKHFufHwocW49e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBPY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1PY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIEZjcj0iXHhENyIsSWxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxCY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrZWxlK2Uud31mdW5jdGlvbiBSbGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7VmNyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1VjcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oRmNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIExsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBrbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke0lsZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtJbGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5CY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBIY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1rbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9a2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBWY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gSGNyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBVY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO3psZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTt6bGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9SGxlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJkdjcihjLG8sciksT2xlKGMsbyxyKSxxY3IoYSxvLHIpO2xldCB1PVljcihhLG8scik7T2xlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLFhjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHFjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIEdjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLEFsZShuLHQpfWZ1bmN0aW9uIE9sZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixGbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBGbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiBXY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gYWxlKFdjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gWWNyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9amNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gQmxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIEJsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PUtzZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gamNyKGUpe3JldHVybiAkbHR8fCgkbHQ9T24oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtQbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBIbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFZsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gWGNyKGUsdCl7bGV0IHI9UGwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtDbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksRGxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxEbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Yc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIHFuLk5PTkU6Y2FzZSBxbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PXFuLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIHFuLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgcW4uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgcW4uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBVbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPXFsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9R2xlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD1LY3IodCxzKTtaY3IoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBxbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQocWxlKG8sdCkpfSkscn1mdW5jdGlvbiBHbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPUdsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmJGNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiAkY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIEtjcihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIFpjcihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiB6bGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyh0dXIoYSxvKSxRY3IoYSxvKSk6V2xlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitKY3Ioby5hbm5vdGF0aW9uVHlwZSkrIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtydXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZldXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIEpjcihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIFFjcihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9SGxlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiBXbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gV2xlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBCbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBldXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sRmxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIHJ1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLFJsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gRWxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgbnVyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8bnVyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBZbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7TWxlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksTEgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtNSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtlY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxUbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209ZVIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksbVAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsU2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O1BsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTttUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO21QLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1VsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9WWxlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKHJsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxjbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOmljdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjppY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPW5QKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7YkgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9ZlB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PSRzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj1nbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgb2N0PXt9O0tzKG9jdCx7R3JhcGhJY29uVHlwZTooKT0+bjF9KTt2YXIgbjE7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobjF8fChuMT17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbjEuU0VSSUVTOnJldHVybiBWbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBuMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXFuLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/a0goaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P3RjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PW9jdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmTEgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZrSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksdWxlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gZ0godCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLGlQKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksb1ApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09dGxlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpZbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6amx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixRbHQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIseUgodCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PUlIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gSmx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBvdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1vdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PXFuLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1xbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PXFuLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIGpsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgZ1A9RWUoT2UoKSwxKTt2YXIgWGxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7WGxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBsY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLHNjdD1be3JlZ2V4OmxjdH1dLCRsZT1bXSxhdXI9bmV3IFNldChbcW4uQ09NUFVURV9USU1FLHFuLk1FTU9SWV0pLFBuPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXFuLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1xbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1nUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPWdQLnNvbWUoc2N0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1nUC5zb21lKCRsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PnNjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9emx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGxjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gJGxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiBhdXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5zY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj16bHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChsY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PXFuLk1FTU9SWT8oaT1OZChpLGlQKSxvPU5kKG8saVApKTpyPT09cW4uQ09NUFVURV9USU1FJiYoaT1OZChpLG9QKSxvPU5kKG8sb1ApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9cW4uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtQbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIHN1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIEtsZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBabGUoZSx0KXtyZXR1cm4ganNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6S2xlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2Z1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIEpsZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgS2xlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pmh1cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gbHVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBjdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LHV1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gaHVyKGUpe3JldHVybiBRbGUoZSxjdXIpfWZ1bmN0aW9uIGZ1cihlKXtyZXR1cm4gUWxlKGUsdXVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gUWxlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1zdXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gbHVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBlY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIEpsZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gaWxlKGMsbmxlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7amxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7WmxlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBlY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIHJjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhyY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKHJjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIGR1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiBtdXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIG5jZShlKXtsZXQgdD1lLm1hcChkdXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczptdXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW5jZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgcGNlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciBjcz17fTtLcyhjcyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT54MCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PkV1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5GZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PnNjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+YWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9PmhjZSxpc051bGxPclVuZGVmaW5lZDooKT0+d3VyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+bGNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+aWNlLG51bU1ldHJpY3M6KCk9Pm9jZSxudW1WaXNpYmxlQ29sdW1uczooKT0+eXVyLG51bVZpc2libGVIUGFyYW1zOigpPT5jY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PnVjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmZjZSxwcmV0dHlQcmludDooKT0+YjAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+dnVyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pnh1cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5NdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+U3VyLHJvdGF0ZVN0cjooKT0+YnVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+X3VyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBGZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gaWNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIG9jZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGljZShlKStvY2UoZSl9ZnVuY3Rpb24gYWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBzY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gbGNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiB4MChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9zY2UoZSx0LHIpOmxjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBhYSh0LG49PngwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIF91cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEZkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gdWNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB5dXIoZSl7cmV0dXJuIGNjZShlKSt1Y2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBhYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gdnVyKGUsdCl7cmV0dXJuIGIwKGFjZShlLHQpKX1mdW5jdGlvbiB4dXIoZSx0KXtyZXR1cm4gYjAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/aGNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09PXZvaWQgMD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBmY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gYnVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIHd1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBTdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBNdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBmY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBFdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIFFuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpBcnJheSgpLG1ldHJpY0NvbHVtbnM6QXJyYXkoKX0sY29sdW1uc1Zpc2liaWxpdHk6QXJyYXkoKSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpBcnJheSgpLG1ldHJpY0luZm9zOkFycmF5KCl9fSx0aGlzLnNlc3Npb25Hcm91cHM9W10sdGhpcy5kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcz0hMSx0aGlzLmRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zPSExLHRoaXMuX3N0YXR1c2VzPVt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX0ZBSUxVUkUiLGRpc3BsYXlOYW1lOiJGYWlsdXJlIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19SVU5OSU5HIixkaXNwbGF5TmFtZToiUnVubmluZyIsYWxsb3dlZDohMH1dLHRoaXMuX2dldEV4cGVyaW1lbnRSZXNvbHZlZD1uZXcgUHJvbWlzZSh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9wYWdlU2l6ZUlucHV0PXt2YWx1ZToiMTAwIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlTnVtYmVySW5wdXQ9e3ZhbHVlOiIxIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlQ291bnRTdHI9Ij8iLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdSx0aGlzLl9wcmV0dHlQcmludD1iMH1yZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfV9jc3ZVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwiY3N2Iil9X2pzb25VcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwianNvbiIpfV9sYXRleFVybCh0LHIpe3JldHVybiB0aGlzLl9kb3dubG9hZERhdGFVcmwodCxyLCJsYXRleCIpfV9kb3dubG9hZERhdGFVcmwodCxyLG4pe2xldCBpPXIuY29sdW1uc1Zpc2liaWxpdHk7cmV0dXJuIHRoaXMuYmFja2VuZC5nZXREb3dubG9hZFVybChuLHQsaSl9X2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzKCl7bGV0IHQ9Y3M7aWYodC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHx0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpKXJldHVybjtsZXQgcj17ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX07dGhpcy5iYWNrZW5kLmdldEV4cGVyaW1lbnQocikudGhlbihuPT57cGNlLmlzRXF1YWwobix0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsbiksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KS5maW5hbGx5KCgpPT57dGhpcy5fY29tcHV0ZURhdGFGb3VuZCgpfSl9X2NvbXB1dGVEYXRhRm91bmQoKXtsZXQgdD1Cb29sZWFuKHRoaXMuX2V4cGVyaW1lbnQmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MubGVuZ3RoPjAmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MubGVuZ3RoPjApO3RoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdCksdGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zIiwhdCl9X2NvbXB1dGVIUGFyYW1zKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixkaXNwbGF5ZWQ6aTw1LGZpbHRlcjp7fX07by5pbmZvLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpPyhvLmZpbHRlci5kb21haW5EaXNjcmV0ZT1bXSxvLmluZm8uZG9tYWluRGlzY3JldGUuZm9yRWFjaChhPT57by5maWx0ZXIuZG9tYWluRGlzY3JldGUucHVzaCh7dmFsdWU6YSxjaGVja2VkOiEwfSl9KSk6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0JPT0wiP28uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XTpvLmluZm8udHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCI/by5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX1NUUklORyI/by5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsby5pbmZvLnR5cGUpLHQucHVzaChvKX0pLHRoaXMuc2V0KCJfaHBhcmFtcyIsdCl9X2NvbXB1dGVNZXRyaWNzKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6aTw1fTt0LnB1c2gobyl9KSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOltdLG1ldHJpY0NvbHVtbnM6W119OntocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcCh0PT4oe21ldHJpY0luZm86dC5pbmZvfSkpfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKT0+e3RoaXMuY29uZmlndXJhdGlvbj17c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9fSl9X2NvbXB1dGVDb2x1bW5zVmlzaWJpbGl0eSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz9bXTp0aGlzLl9ocGFyYW1zLm1hcCh0PT50LmRpc3BsYXllZCkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKHQ9PnQuZGlzcGxheWVkKSl9X2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl7aWYoIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzKXJldHVybntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX07bGV0IHQ9dGhpcy5faHBhcmFtcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pLHI9dGhpcy5fbWV0cmljcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pO3JldHVybntocGFyYW1JbmZvczp0LG1ldHJpY0luZm9zOnJ9fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX1fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCl7aWYoISghdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOnQsY2FuY2VsbGVkOnJ9KT0+e2lmKCFyKXtpZih0LnRvdGFsU2l6ZT49MCl7bGV0IG49K3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWU7dGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvbikpKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix0LnRvdGFsU2l6ZSl9ZWxzZSB0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsIj8iKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIiwiVW5rbm93biIpO3BjdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpfX0pKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYodCE9PW51bGwpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtsZXQgdD10aGlzLHI9ITA7ZnVuY3Rpb24gbihoKXtyZXR1cm4gaC5taW4udmFsdWUhPT0iInx8aC5tYXgudmFsdWUhPT0iIn1mdW5jdGlvbiBpKGgpe2xldCBmPXQuZ2V0KGgrIi5taW4udmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD1mPT09IiI/Ii1JbmZpbml0eSI6K2YsZD1pc05hTihwKTt0LnNldChoKyIubWluLmludmFsaWQiLGQpLHI9ciYmIWQ7bGV0IGc9dC5nZXQoaCsiLm1heC52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGchPT12b2lkIDApO2xldCBfPWc9PT0iIj8iSW5maW5pdHkiOitnLHk9aXNOYU4oXyk7cmV0dXJuIHQuc2V0KGgrIi5tYXguaW52YWxpZCIseSkscj1yJiYheSxkfHx5P251bGw6e21pblZhbHVlOnAsbWF4VmFsdWU6X319ZnVuY3Rpb24gbyhoKXtsZXQgZj10LmdldChoKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD0rZixkPU51bWJlci5pc0ludGVnZXIocCkmJnA+MDtyZXR1cm4gdC5zZXQoaCsiLmludmFsaWQiLCFkKSxyPXImJmQsZD9wOm51bGx9bGV0IGE9dGhpcy5fc3RhdHVzZXMuZmlsdGVyKGg9PmguYWxsb3dlZCkubWFwKGg9PmgudmFsdWUpLHM9W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e2hwYXJhbTpoLmluZm8ubmFtZX07aC5maWx0ZXIuZG9tYWluRGlzY3JldGU/aC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZXZlcnkoZz0+Zy5jaGVja2VkKXx8KHAuZmlsdGVyRGlzY3JldGU9W10saC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaChnPT57Zy5jaGVja2VkJiZwLmZpbHRlckRpc2NyZXRlLnB1c2goZy52YWx1ZSl9KSk6aC5maWx0ZXIuaW50ZXJ2YWw/bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9ocGFyYW1zLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKTpoLmZpbHRlci5yZWdleHAmJihwLmZpbHRlclJlZ2V4cD1oLmZpbHRlci5yZWdleHApLHMucHVzaChwKX0pLHRoaXMuX21ldHJpY3MuZm9yRWFjaCgoaCxmKT0+e2xldCBwPXttZXRyaWM6aC5pbmZvLm5hbWV9O24oaC5maWx0ZXIuaW50ZXJ2YWwpJiYocC5maWx0ZXJJbnRlcnZhbD1pKCJfbWV0cmljcy4iK2YrIi5maWx0ZXIuaW50ZXJ2YWwiKSkscy5wdXNoKHApfSksdGhpcy5fc29ydEJ5SW5kZXghPT12b2lkIDAmJnRoaXMuX3NvcnREaXJlY3Rpb24hPT12b2lkIDApe2lmKCEodGhpcy5fc29ydEJ5SW5kZXggaW4gcykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIk5vIGNvbHVtbiBpbiBjb2xQYXJhbXMgd2l0aCBpbmRleCBzb3J0QnlJbmRleDogJXMiLHRoaXMuX3NvcnRCeUluZGV4KSxudWxsO3NbdGhpcy5fc29ydEJ5SW5kZXhdLm9yZGVyPXRoaXMuX3NvcnREaXJlY3Rpb249PT0wPyJPUkRFUl9BU0MiOiJPUkRFUl9ERVNDIn1sZXQgbD1vKCJfcGFnZU51bWJlcklucHV0Iil8fDAsYz1vKCJfcGFnZVNpemVJbnB1dCIpfHwwO2lmKCFyKXJldHVybiBudWxsO2xldCB1PWMqKGwtMSk7cmV0dXJue2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsYWxsb3dlZFN0YXR1c2VzOmEsY29sUGFyYW1zOnMsc3RhcnRJbmRleDp1LHNsaWNlU2l6ZTpjfX1fbWV0cmljU29ydEJ5SW5kZXgodCl7cmV0dXJuIHQrdGhpcy5faHBhcmFtcy5sZW5ndGh9fTtRbi50ZW1wbGF0ZT1RYAogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gaHlwZXJwYXJhbWV0ZXJzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5IeXBlcnBhcmFtZXRlcnM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19ocGFyYW1zfX0iIGFzPSJocGFyYW0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHBhcmFtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgY2hlY2tlZD0ie3tocGFyYW0uZGlzcGxheWVkfX0iCiAgICAgICAgICAgICAgY2xhc3M9ImhwYXJhbS1jaGVja2JveCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPCEtLSBQcmVjaXNlbHkgb25lIG9mIHRoZSB0ZW1wbGF0ZXMgYmVsb3cgd2lsbCBiZSBzdGFtcGVkLi0tPgogICAgICAgICAgICA8IS0tIDEuIEEgbGlzdCBvZiBjaGVja2JveGVzIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e2l0ZW0uY2hlY2tlZH19IgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzY3JldGUtdmFsdWUtY2hlY2tib3giCiAgICAgICAgICAgICAgICAgIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBbW19wcmV0dHlQcmludChpdGVtLnZhbHVlKV1dCiAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMi4gQSBudW1lcmljIGludGVydmFsIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAzLiBBIHJlZ2V4cCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIucmVnZXhwXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9IlJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgIDwhLS0gVE9ETyhlcmV6KTogTWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgICAgICAgICAgIG1ldHJpY3M6CiAgICAgICAgICAgICAgICAgIDEuIEFkZCBhbiAnaXNvbGF0b3InIHJhZGlvLWJ1dHRvbiB0byBzZWxlY3QganVzdCBvbmUKICAgICAgICAgICAgICAgICAgbWV0cmljIGFuZAogICAgICAgICAgICAgICAgICBoaWRlIGFsbCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAyLiBBZGQgYSAndG9nZ2xlLWFsbCcgYnV0dG9uIHRoYXQgd2lsbCBoaWRlL3VuaGlkZQogICAgICAgICAgICAgICAgICAgIGFsbCB0aGUKICAgICAgICAgICAgICAgICAgbWV0cmljcy4KICAgICAgICAgICAgICAgICAgVXNlIHNpbWlsYXIgbG9naWMvYXBwZWFyYW5jZSB0byB0aGUgcnVuLXNlbGVjdG9yIG9mCiAgICAgICAgICAgICAgICAgIHNjYWxhcnMuLS0+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7bWV0cmljLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzdGF0dXMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7c3RhdHVzLmFsbG93ZWR9fSIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNvcnRpbmc8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IlNvcnQgYnkiCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IgogICAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21ldHJpY3NdXSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IkRpcmVjdGlvbiIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gcGFnaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgTnVtYmVyIG9mIG1hdGNoaW5nIHNlc3Npb24gZ3JvdXBzOiBbW190b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0cl1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJQYWdlICMiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlTnVtYmVySW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZU51bWJlcklucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9Ik1heCAjIG9mIHNlc3Npb24gZ3JvdXBzIHBlciBwYWdlOiIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VTaXplSW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZVNpemVJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGRvd25sb2FkIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlc3Npb25Hcm91cHNSZXF1ZXN0XV0iPgogICAgICAgICAgRG93bmxvYWQgZGF0YSBhcwogICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImNzdkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuY3N2IgogICAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9Impzb25MaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmpzb24iCiAgICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJsYXRleExpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUudGV4IgogICAgICAgICAgICAgIGhyZWY9IltbX2xhdGV4VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+TGFUZVg8L2EKICAgICAgICAgICAgPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFuLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc3RhdHVzZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUW4ucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9wYWdlU2l6ZUlucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFuLnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUW4ucHJvdG90eXBlLCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCk7RShbQnQoImJhY2tlbmQiLCJleHBlcmltZW50TmFtZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpO0UoW0J0KCJfaHBhcmFtcy4qIiwiX21ldHJpY3MuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCk7UW49RShbeXQoInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxRbik7dmFyIFVjdD1FZShPZSgpLDEpO3ZhciBtY3Q9dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5jdXN0b21FbGVtZW50cyE9bnVsbCYmd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2shPT12b2lkIDA7dmFyIGkxPShlLHQscj1udWxsKT0+e2Zvcig7dCE9PXI7KXtsZXQgbj10Lm5leHRTaWJsaW5nO2UucmVtb3ZlQ2hpbGQodCksdD1ufX07dmFyIFljPWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsZ2N0PWA8IS0tJHtZY30tLT5gLGRjZT1uZXcgUmVnRXhwKGAke1ljfXwke2djdH1gKSxkMz0iJGxpdCQiLG8xPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJ0cz1bXSx0aGlzLmVsZW1lbnQ9cjtsZXQgbj1bXSxpPVtdLG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLmNvbnRlbnQsMTMzLG51bGwsITEpLGE9MCxzPS0xLGw9MCx7c3RyaW5nczpjLHZhbHVlczp7bGVuZ3RoOnV9fT10O2Zvcig7bDx1Oyl7bGV0IGg9by5uZXh0Tm9kZSgpO2lmKGg9PT1udWxsKXtvLmN1cnJlbnROb2RlPWkucG9wKCk7Y29udGludWV9aWYocysrLGgubm9kZVR5cGU9PT0xKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7bGV0IGY9aC5hdHRyaWJ1dGVzLHtsZW5ndGg6cH09ZixkPTA7Zm9yKGxldCBnPTA7ZzxwO2crKyltY2UoZltnXS5uYW1lLGQzKSYmZCsrO2Zvcig7ZC0tID4wOyl7bGV0IGc9Y1tsXSxfPUhILmV4ZWMoZylbMl0seT1fLnRvTG93ZXJDYXNlKCkrZDMseD1oLmdldEF0dHJpYnV0ZSh5KTtoLnJlbW92ZUF0dHJpYnV0ZSh5KTtsZXQgYj14LnNwbGl0KGRjZSk7dGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJhdHRyaWJ1dGUiLGluZGV4OnMsbmFtZTpfLHN0cmluZ3M6Yn0pLGwrPWIubGVuZ3RoLTF9fWgudGFnTmFtZT09PSJURU1QTEFURSImJihpLnB1c2goaCksby5jdXJyZW50Tm9kZT1oLmNvbnRlbnQpfWVsc2UgaWYoaC5ub2RlVHlwZT09PTMpe2xldCBmPWguZGF0YTtpZihmLmluZGV4T2YoWWMpPj0wKXtsZXQgcD1oLnBhcmVudE5vZGUsZD1mLnNwbGl0KGRjZSksZz1kLmxlbmd0aC0xO2ZvcihsZXQgXz0wO188ZztfKyspe2xldCB5LHg9ZFtfXTtpZih4PT09IiIpeT1ZZigpO2Vsc2V7bGV0IGI9SEguZXhlYyh4KTtiIT09bnVsbCYmbWNlKGJbMl0sZDMpJiYoeD14LnNsaWNlKDAsYi5pbmRleCkrYlsxXStiWzJdLnNsaWNlKDAsLWQzLmxlbmd0aCkrYlszXSkseT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KX1wLmluc2VydEJlZm9yZSh5LGgpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KytzfSl9ZFtnXT09PSIiPyhwLmluc2VydEJlZm9yZShZZigpLGgpLG4ucHVzaChoKSk6aC5kYXRhPWRbZ10sbCs9Z319ZWxzZSBpZihoLm5vZGVUeXBlPT09OClpZihoLmRhdGE9PT1ZYyl7bGV0IGY9aC5wYXJlbnROb2RlOyhoLnByZXZpb3VzU2libGluZz09PW51bGx8fHM9PT1hKSYmKHMrKyxmLmluc2VydEJlZm9yZShZZigpLGgpKSxhPXMsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDpzfSksaC5uZXh0U2libGluZz09PW51bGw/aC5kYXRhPSIiOihuLnB1c2goaCkscy0tKSxsKyt9ZWxzZXtsZXQgZj0tMTtmb3IoOyhmPWguZGF0YS5pbmRleE9mKFljLGYrMSkpIT09LTE7KXRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6LTF9KSxsKyt9fWZvcihsZXQgaCBvZiBuKWgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKX19LG1jZT0oZSx0KT0+e2xldCByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiByPj0wJiZlLnNsaWNlKHIpPT09dH0sdlA9ZT0+ZS5pbmRleCE9PS0xLFlmPSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxISD0vKFsgXHgwOVx4MGFceDBjXHgwZF0pKFteXDAtXHgxRlx4N0YtXHg5RiAiJz49L10rKShbIFx4MDlceDBhXHgwY1x4MGRdKj1bIFx4MDlceDBhXHgwY1x4MGRdKig/OlteIFx4MDlceDBhXHgwY1x4MGQiJ2A8Pj1dKnwiW14iXSp8J1teJ10qKSkkLzt2YXIgX2N0PTEzMztmdW5jdGlvbiB5Y3QoZSx0KXtsZXR7ZWxlbWVudDp7Y29udGVudDpyfSxwYXJ0czpufT1lLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLF9jdCxudWxsLCExKSxvPXhQKG4pLGE9bltvXSxzPS0xLGw9MCxjPVtdLHU9bnVsbDtmb3IoO2kubmV4dE5vZGUoKTspe3MrKztsZXQgaD1pLmN1cnJlbnROb2RlO2ZvcihoLnByZXZpb3VzU2libGluZz09PXUmJih1PW51bGwpLHQuaGFzKGgpJiYoYy5wdXNoKGgpLHU9PT1udWxsJiYodT1oKSksdSE9PW51bGwmJmwrKzthIT09dm9pZCAwJiZhLmluZGV4PT09czspYS5pbmRleD11IT09bnVsbD8tMTphLmluZGV4LWwsbz14UChuLG8pLGE9bltvXX1jLmZvckVhY2goaD0+aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpKX12YXIgVHVyPWU9PntsZXQgdD1lLm5vZGVUeXBlPT09MTE/MDoxLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLF9jdCxudWxsLCExKTtmb3IoO3IubmV4dE5vZGUoKTspdCsrO3JldHVybiB0fSx4UD0oZSx0PS0xKT0+e2ZvcihsZXQgcj10KzE7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYodlAobikpcmV0dXJuIHJ9cmV0dXJuLTF9O2Z1bmN0aW9uIGdjZShlLHQscj1udWxsKXtsZXR7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT1lO2lmKHI9PW51bGwpe24uYXBwZW5kQ2hpbGQodCk7cmV0dXJufWxldCBvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobixfY3QsbnVsbCwhMSksYT14UChpKSxzPTAsbD0tMTtmb3IoO28ubmV4dE5vZGUoKTspZm9yKGwrKyxvLmN1cnJlbnROb2RlPT09ciYmKHM9VHVyKHQpLHIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxyKSk7YSE9PS0xJiZpW2FdLmluZGV4PT09bDspe2lmKHM+MCl7Zm9yKDthIT09LTE7KWlbYV0uaW5kZXgrPXMsYT14UChpLGEpO3JldHVybn1hPXhQKGksYSl9fXZhciBDdXI9bmV3IFdlYWtNYXA7dmFyIGExPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iJiZDdXIuaGFzKGUpO3ZhciBMbD17fSxWSD17fTt2YXIgdzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX19wYXJ0cz1bXSx0aGlzLnRlbXBsYXRlPXQsdGhpcy5wcm9jZXNzb3I9cix0aGlzLm9wdGlvbnM9bn11cGRhdGUodCl7bGV0IHI9MDtmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uc2V0VmFsdWUodFtyXSkscisrO2ZvcihsZXQgbiBvZiB0aGlzLl9fcGFydHMpbiE9PXZvaWQgMCYmbi5jb21taXQoKX1fY2xvbmUoKXtsZXQgdD1tY3Q/dGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQuY2xvbmVOb2RlKCEwKTpkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LCEwKSxyPVtdLG49dGhpcy50ZW1wbGF0ZS5wYXJ0cyxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSksbz0wLGE9MCxzLGw9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspe2lmKHM9bltvXSwhdlAocykpe3RoaXMuX19wYXJ0cy5wdXNoKHZvaWQgMCksbysrO2NvbnRpbnVlfWZvcig7YTxzLmluZGV4OylhKyssbC5ub2RlTmFtZT09PSJURU1QTEFURSImJihyLnB1c2gobCksaS5jdXJyZW50Tm9kZT1sLmNvbnRlbnQpLChsPWkubmV4dE5vZGUoKSk9PT1udWxsJiYoaS5jdXJyZW50Tm9kZT1yLnBvcCgpLGw9aS5uZXh0Tm9kZSgpKTtpZihzLnR5cGU9PT0ibm9kZSIpe2xldCBjPXRoaXMucHJvY2Vzc29yLmhhbmRsZVRleHRFeHByZXNzaW9uKHRoaXMub3B0aW9ucyk7Yy5pbnNlcnRBZnRlck5vZGUobC5wcmV2aW91c1NpYmxpbmcpLHRoaXMuX19wYXJ0cy5wdXNoKGMpfWVsc2UgdGhpcy5fX3BhcnRzLnB1c2goLi4udGhpcy5wcm9jZXNzb3IuaGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnMobCxzLm5hbWUscy5zdHJpbmdzLHRoaXMub3B0aW9ucykpO28rK31yZXR1cm4gbWN0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fTt2YXIgX2NlPXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDplPT5lfSksUHVyPWAgJHtZY30gYCxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1yLHRoaXMudHlwZT1uLHRoaXMucHJvY2Vzc29yPWl9Z2V0SFRNTCgpe2xldCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMSxyPSIiLG49ITE7Zm9yKGxldCBpPTA7aTx0O2krKyl7bGV0IG89dGhpcy5zdHJpbmdzW2ldLGE9by5sYXN0SW5kZXhPZigiPCEtLSIpO249KGE+LTF8fG4pJiZvLmluZGV4T2YoIi0tPiIsYSsxKT09PS0xO2xldCBzPUhILmV4ZWMobyk7cz09PW51bGw/cis9bysobj9QdXI6Z2N0KTpyKz1vLnN1YnN0cigwLHMuaW5kZXgpK3NbMV0rc1syXStkMytzWzNdK1ljfXJldHVybiByKz10aGlzLnN0cmluZ3NbdF0scn1nZXRUZW1wbGF0ZUVsZW1lbnQoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLHI9dGhpcy5nZXRIVE1MKCk7cmV0dXJuIF9jZSE9PXZvaWQgMCYmKHI9X2NlLmNyZWF0ZUhUTUwocikpLHQuaW5uZXJIVE1MPXIsdH19O3ZhciBHSD1lPT5lPT09bnVsbHx8ISh0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSxVSD1lPT5BcnJheS5pc0FycmF5KGUpfHwhIShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLG0zPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmRpcnR5PSEwLHRoaXMuZWxlbWVudD10LHRoaXMubmFtZT1yLHRoaXMuc3RyaW5ncz1uLHRoaXMucGFydHM9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aC0xO2krKyl0aGlzLnBhcnRzW2ldPXRoaXMuX2NyZWF0ZVBhcnQoKX1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgYlAodGhpcyl9X2dldFZhbHVlKCl7bGV0IHQ9dGhpcy5zdHJpbmdzLHI9dC5sZW5ndGgtMSxuPXRoaXMucGFydHM7aWYocj09PTEmJnRbMF09PT0iIiYmdFsxXT09PSIiKXtsZXQgbz1uWzBdLnZhbHVlO2lmKHR5cGVvZiBvPT0ic3ltYm9sIilyZXR1cm4gU3RyaW5nKG8pO2lmKHR5cGVvZiBvPT0ic3RyaW5nInx8IVVIKG8pKXJldHVybiBvfWxldCBpPSIiO2ZvcihsZXQgbz0wO288cjtvKyspe2krPXRbb107bGV0IGE9bltvXTtpZihhIT09dm9pZCAwKXtsZXQgcz1hLnZhbHVlO2lmKEdIKHMpfHwhVUgocykpaSs9dHlwZW9mIHM9PSJzdHJpbmciP3M6U3RyaW5nKHMpO2Vsc2UgZm9yKGxldCBsIG9mIHMpaSs9dHlwZW9mIGw9PSJzdHJpbmciP2w6U3RyaW5nKGwpfX1yZXR1cm4gaSs9dFtyXSxpfWNvbW1pdCgpe3RoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHRoaXMuX2dldFZhbHVlKCkpKX19LGJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuY29tbWl0dGVyPXR9c2V0VmFsdWUodCl7dCE9PUxsJiYoIUdIKHQpfHx0IT09dGhpcy52YWx1ZSkmJih0aGlzLnZhbHVlPXQsYTEodCl8fCh0aGlzLmNvbW1pdHRlci5kaXJ0eT0hMCkpfWNvbW1pdCgpe2Zvcig7YTEodGhpcy52YWx1ZSk7KXtsZXQgdD10aGlzLnZhbHVlO3RoaXMudmFsdWU9TGwsdCh0aGlzKX10aGlzLnZhbHVlIT09TGwmJnRoaXMuY29tbWl0dGVyLmNvbW1pdCgpfX0sQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsdGhpcy5vcHRpb25zPXR9YXBwZW5kSW50byh0KXt0aGlzLnN0YXJ0Tm9kZT10LmFwcGVuZENoaWxkKFlmKCkpLHRoaXMuZW5kTm9kZT10LmFwcGVuZENoaWxkKFlmKCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdC5fX2luc2VydCh0aGlzLmVuZE5vZGU9WWYoKSl9aW5zZXJ0QWZ0ZXJQYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGU9PT1udWxsKXJldHVybjtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IHI9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLHIodGhpcyl9bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0IT09TGwmJihHSCh0KT90IT09dGhpcy52YWx1ZSYmdGhpcy5fX2NvbW1pdFRleHQodCk6dCBpbnN0YW5jZW9mIFMwP3RoaXMuX19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KTp0IGluc3RhbmNlb2YgTm9kZT90aGlzLl9fY29tbWl0Tm9kZSh0KTpVSCh0KT90aGlzLl9fY29tbWl0SXRlcmFibGUodCk6dD09PVZIPyh0aGlzLnZhbHVlPVZILHRoaXMuY2xlYXIoKSk6dGhpcy5fX2NvbW1pdFRleHQodCkpfV9faW5zZXJ0KHQpe3RoaXMuZW5kTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMuZW5kTm9kZSl9X19jb21taXROb2RlKHQpe3RoaXMudmFsdWUhPT10JiYodGhpcy5jbGVhcigpLHRoaXMuX19pbnNlcnQodCksdGhpcy52YWx1ZT10KX1fX2NvbW1pdFRleHQodCl7bGV0IHI9dGhpcy5zdGFydE5vZGUubmV4dFNpYmxpbmc7dD10PT1udWxsPyIiOnQ7bGV0IG49dHlwZW9mIHQ9PSJzdHJpbmciP3Q6U3RyaW5nKHQpO3I9PT10aGlzLmVuZE5vZGUucHJldmlvdXNTaWJsaW5nJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGE9bjp0aGlzLl9fY29tbWl0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksdGhpcy52YWx1ZT10fV9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCl7bGV0IHI9dGhpcy5vcHRpb25zLnRlbXBsYXRlRmFjdG9yeSh0KTtpZih0aGlzLnZhbHVlIGluc3RhbmNlb2YgdzAmJnRoaXMudmFsdWUudGVtcGxhdGU9PT1yKXRoaXMudmFsdWUudXBkYXRlKHQudmFsdWVzKTtlbHNle2xldCBuPW5ldyB3MChyLHQucHJvY2Vzc29yLHRoaXMub3B0aW9ucyksaT1uLl9jbG9uZSgpO24udXBkYXRlKHQudmFsdWVzKSx0aGlzLl9fY29tbWl0Tm9kZShpKSx0aGlzLnZhbHVlPW59fV9fY29tbWl0SXRlcmFibGUodCl7QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKXx8KHRoaXMudmFsdWU9W10sdGhpcy5jbGVhcigpKTtsZXQgcj10aGlzLnZhbHVlLG49MCxpO2ZvcihsZXQgbyBvZiB0KWk9cltuXSxpPT09dm9pZCAwJiYoaT1uZXcgQmQodGhpcy5vcHRpb25zKSxyLnB1c2goaSksbj09PTA/aS5hcHBlbmRJbnRvUGFydCh0aGlzKTppLmluc2VydEFmdGVyUGFydChyW24tMV0pKSxpLnNldFZhbHVlKG8pLGkuY29tbWl0KCksbisrO248ci5sZW5ndGgmJihyLmxlbmd0aD1uLHRoaXMuY2xlYXIoaSYmaS5lbmROb2RlKSl9Y2xlYXIodD10aGlzLnN0YXJ0Tm9kZSl7aTEodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fSx3UD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsbi5sZW5ndGghPT0yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIil0aHJvdyBuZXcgRXJyb3IoIkJvb2xlYW4gYXR0cmlidXRlcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIGV4cHJlc3Npb24iKTt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bn1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9ISF0aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMudmFsdWUhPT10JiYodD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwiIik6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpLHRoaXMudmFsdWU9dCksdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH19LFNQPWNsYXNzIGV4dGVuZHMgbTN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscixuKSx0aGlzLnNpbmdsZT1uLmxlbmd0aD09PTImJm5bMF09PT0iIiYmblsxXT09PSIifV9jcmVhdGVQYXJ0KCl7cmV0dXJuIG5ldyBxSCh0aGlzKX1fZ2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zaW5nbGU/dGhpcy5wYXJ0c1swXS52YWx1ZTpzdXBlci5fZ2V0VmFsdWUoKX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT10aGlzLl9nZXRWYWx1ZSgpKX19LHFIPWNsYXNzIGV4dGVuZHMgYlB7fSx5Y2U9ITE7KCgpPT57dHJ5e2xldCBlPXtnZXQgY2FwdHVyZSgpe3JldHVybiB5Y2U9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKX1jYXRjaChlKXt9fSkoKTt2YXIgTVA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMuZWxlbWVudD10LHRoaXMuZXZlbnROYW1lPXIsdGhpcy5ldmVudENvbnRleHQ9bix0aGlzLl9fYm91bmRIYW5kbGVFdmVudD1pPT50aGlzLmhhbmRsZUV2ZW50KGkpfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IG89dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLG8odGhpcyl9aWYodGhpcy5fX3BlbmRpbmdWYWx1ZT09PUxsKXJldHVybjtsZXQgdD10aGlzLl9fcGVuZGluZ1ZhbHVlLHI9dGhpcy52YWx1ZSxuPXQ9PW51bGx8fHIhPW51bGwmJih0LmNhcHR1cmUhPT1yLmNhcHR1cmV8fHQub25jZSE9PXIub25jZXx8dC5wYXNzaXZlIT09ci5wYXNzaXZlKSxpPXQhPW51bGwmJihyPT1udWxsfHxuKTtuJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucyksaSYmKHRoaXMuX19vcHRpb25zPUl1cih0KSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucykpLHRoaXMudmFsdWU9dCx0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsfWhhbmRsZUV2ZW50KHQpe3R5cGVvZiB0aGlzLnZhbHVlPT0iZnVuY3Rpb24iP3RoaXMudmFsdWUuY2FsbCh0aGlzLmV2ZW50Q29udGV4dHx8dGhpcy5lbGVtZW50LHQpOnRoaXMudmFsdWUuaGFuZGxlRXZlbnQodCl9fSxJdXI9ZT0+ZSYmKHljZT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmUsb25jZTplLm9uY2V9OmUuY2FwdHVyZSk7ZnVuY3Rpb24gdmN0KGUpe2xldCB0PXMxLmdldChlLnR5cGUpO3Q9PT12b2lkIDAmJih0PXtzdHJpbmdzQXJyYXk6bmV3IFdlYWtNYXAsa2V5U3RyaW5nOm5ldyBNYXB9LHMxLnNldChlLnR5cGUsdCkpO2xldCByPXQuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49ZS5zdHJpbmdzLmpvaW4oWWMpO3JldHVybiByPXQua2V5U3RyaW5nLmdldChuKSxyPT09dm9pZCAwJiYocj1uZXcgbzEoZSxlLmdldFRlbXBsYXRlRWxlbWVudCgpKSx0LmtleVN0cmluZy5zZXQobixyKSksdC5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfXZhciBzMT1uZXcgTWFwO3ZhciBNMD1uZXcgV2Vha01hcCx4Y3Q9KGUsdCxyKT0+e2xldCBuPU0wLmdldCh0KTtuPT09dm9pZCAwJiYoaTEodCx0LmZpcnN0Q2hpbGQpLE0wLnNldCh0LG49bmV3IEJkKE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTp2Y3R9LHIpKSksbi5hcHBlbmRJbnRvKHQpKSxuLnNldFZhbHVlKGUpLG4uY29tbWl0KCl9O3ZhciBXSD1jbGFzc3toYW5kbGVBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LHIsbixpKXtsZXQgbz1yWzBdO3JldHVybiBvPT09Ii4iP25ldyBTUCh0LHIuc2xpY2UoMSksbikucGFydHM6bz09PSJAIj9bbmV3IE1QKHQsci5zbGljZSgxKSxpLmV2ZW50Q29udGV4dCldOm89PT0iPyI/W25ldyB3UCh0LHIuc2xpY2UoMSksbildOm5ldyBtMyh0LHIsbikucGFydHN9aGFuZGxlVGV4dEV4cHJlc3Npb24odCl7cmV0dXJuIG5ldyBCZCh0KX19LHZjZT1uZXcgV0g7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cubGl0SHRtbFZlcnNpb25zfHwod2luZG93LmxpdEh0bWxWZXJzaW9ucz1bXSkpLnB1c2goIjEuNC4xIik7dmFyIGJjZT0oZSx0KT0+YCR7ZX0tLSR7dH1gLFlIPSEwO3R5cGVvZiB3aW5kb3cuU2hhZHlDU1M9PSJ1bmRlZmluZWQiP1lIPSExOnR5cGVvZiB3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tPT0idW5kZWZpbmVkIiYmKGNvbnNvbGUud2FybigiSW5jb21wYXRpYmxlIFNoYWR5Q1NTIHZlcnNpb24gZGV0ZWN0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gYXQgbGVhc3QgQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzQDIuMC4yIGFuZCBAd2ViY29tcG9uZW50cy9zaGFkeWNzc0AxLjMuMS4iKSxZSD0hMSk7dmFyIFJ1cj1lPT50PT57bGV0IHI9YmNlKHQudHlwZSxlKSxuPXMxLmdldChyKTtuPT09dm9pZCAwJiYobj17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzMS5zZXQocixuKSk7bGV0IGk9bi5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgbz10LnN0cmluZ3Muam9pbihZYyk7aWYoaT1uLmtleVN0cmluZy5nZXQobyksaT09PXZvaWQgMCl7bGV0IGE9dC5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtZSCYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbShhLGUpLGk9bmV3IG8xKHQsYSksbi5rZXlTdHJpbmcuc2V0KG8saSl9cmV0dXJuIG4uc3RyaW5nc0FycmF5LnNldCh0LnN0cmluZ3MsaSksaX0sTnVyPVsiaHRtbCIsInN2ZyJdLER1cj1lPT57TnVyLmZvckVhY2godD0+e2xldCByPXMxLmdldChiY2UodCxlKSk7ciE9PXZvaWQgMCYmci5rZXlTdHJpbmcuZm9yRWFjaChuPT57bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6aX19PW4sbz1uZXcgU2V0O0FycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKS5mb3JFYWNoKGE9PntvLmFkZChhKX0pLHljdChuLG8pfSl9KX0sd2NlPW5ldyBTZXQsT3VyPShlLHQscik9Pnt3Y2UuYWRkKGUpO2xldCBuPXI/ci5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1pO2lmKG89PT0wKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7cmV0dXJufWxldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCBjPTA7YzxvO2MrKyl7bGV0IHU9aVtjXTt1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSksYS50ZXh0Q29udGVudCs9dS50ZXh0Q29udGVudH1EdXIoZSk7bGV0IHM9bi5jb250ZW50O3I/Z2NlKHIsYSxzLmZpcnN0Q2hpbGQpOnMuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKSx3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7bGV0IGw9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJmwhPT1udWxsKXQuaW5zZXJ0QmVmb3JlKGwuY2xvbmVOb2RlKCEwKSx0LmZpcnN0Q2hpbGQpO2Vsc2UgaWYocil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2xldCBjPW5ldyBTZXQ7Yy5hZGQoYSkseWN0KHIsYyl9fSxTY2U9KGUsdCxyKT0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCJ8fCFyLnNjb3BlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgc2NvcGVOYW1lYCBvcHRpb24gaXMgcmVxdWlyZWQuIik7bGV0IG49ci5zY29wZU5hbWUsaT1NMC5oYXModCksbz1ZSCYmdC5ub2RlVHlwZT09PTExJiYhIXQuaG9zdCxhPW8mJiF3Y2UuaGFzKG4pLHM9YT9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk6dDtpZih4Y3QoZSxzLE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTpSdXIobil9LHIpKSxhKXtsZXQgbD1NMC5nZXQocyk7TTAuZGVsZXRlKHMpO2xldCBjPWwudmFsdWUgaW5zdGFuY2VvZiB3MD9sLnZhbHVlLnRlbXBsYXRlOnZvaWQgMDtPdXIobixzLGMpLGkxKHQsdC5maXJzdENoaWxkKSx0LmFwcGVuZENoaWxkKHMpLE0wLnNldCh0LGwpfSFpJiZvJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHQuaG9zdCl9O3ZhciBNY2U7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KGUsdCk9PmU7dmFyIFRjdD17dG9BdHRyaWJ1dGUoZSx0KXtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnJldHVybiBlPyIiOm51bGw7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZSE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIGU9PT1udWxsP251bGw6TnVtYmVyKGUpO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIEpTT04ucGFyc2UoZSl9cmV0dXJuIGV9fSxFY2U9KGUsdCk9PnQhPT1lJiYodD09PXR8fGU9PT1lKSxiY3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6VGN0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpFY2V9LHdjdD0xLFNjdD0xPDwyLE1jdD0xPDwzLEVjdD0xPDw0LENjdD0iZmluYWxpemVkIixnMz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PntsZXQgaT10aGlzLl9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobixyKTtpIT09dm9pZCAwJiYodGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5zZXQoaSxuKSx0LnB1c2goaSkpfSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9jbGFzc1Byb3BlcnRpZXM7dCE9PXZvaWQgMCYmdC5mb3JFYWNoKChyLG4pPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KG4scikpfX1zdGF0aWMgY3JlYXRlUHJvcGVydHkodCxyPWJjdCl7aWYodGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldCh0LHIpLHIubm9BY2Nlc3Nvcnx8dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2xldCBuPXR5cGVvZiB0PT0ic3ltYm9sIj9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtpIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQscixuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbcl19LHNldChpKXtsZXQgbz10aGlzW3RdO3RoaXNbcl09aSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LG8sbil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMmJnRoaXMuX2NsYXNzUHJvcGVydGllcy5nZXQodCl8fGJjdH1zdGF0aWMgZmluYWxpemUoKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYodC5oYXNPd25Qcm9wZXJ0eShDY3QpfHx0LmZpbmFsaXplKCksdGhpc1tDY3RdPSEwLHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXA9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLHRoaXMpKSl7bGV0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocik6W11dO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxyKXtsZXQgbj1yLmF0dHJpYnV0ZTtyZXR1cm4gbj09PSExP3ZvaWQgMDp0eXBlb2Ygbj09InN0cmluZyI/bjp0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1zdGF0aWMgX3ZhbHVlSGFzQ2hhbmdlZCh0LHIsbj1FY2Upe3JldHVybiBuKHQscil9c3RhdGljIF9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZSh0LHIpe2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyfHxUY3Qsbz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmkuZnJvbUF0dHJpYnV0ZTtyZXR1cm4gbz9vKHQsbik6dH1zdGF0aWMgX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZSh0LHIpe2lmKHIucmVmbGVjdD09PXZvaWQgMClyZXR1cm47bGV0IG49ci50eXBlLGk9ci5jb252ZXJ0ZXI7cmV0dXJuKGkmJmkudG9BdHRyaWJ1dGV8fFRjdC50b0F0dHJpYnV0ZSkodCxuKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKHQ9PnRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dCksdGhpcy5fY2hhbmdlZFByb3BlcnRpZXM9bmV3IE1hcCx0aGlzLl9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwoKX1fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuY29uc3RydWN0b3IuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG49dGhpc1tyXTtkZWxldGUgdGhpc1tyXSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXN8fCh0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9bmV3IE1hcCksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzLnNldChyLG4pfX0pfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT50aGlzW3JdPXQpLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz12b2lkIDB9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLmVuYWJsZVVwZGF0aW5nKCl9ZW5hYmxlVXBkYXRpbmcoKXt0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyIT09dm9pZCAwJiYodGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcigpLHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dm9pZCAwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3IhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbil9X3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxyLG49YmN0KXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLG89aS5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQsbik7aWYobyE9PXZvaWQgMCl7bGV0IGE9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHIsbik7aWYoYT09PXZvaWQgMClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0LGE9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyk6dGhpcy5zZXRBdHRyaWJ1dGUobyxhKSx0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZSZ+TWN0fX1fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LHIpe2lmKHRoaXMuX3VwZGF0ZVN0YXRlJk1jdClyZXR1cm47bGV0IG49dGhpcy5jb25zdHJ1Y3RvcixpPW4uX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuZ2V0KHQpO2lmKGkhPT12b2lkIDApe2xldCBvPW4uZ2V0UHJvcGVydHlPcHRpb25zKGkpO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKHIsbyksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19cmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKXtsZXQgaT0hMDtpZih0IT09dm9pZCAwKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yO249bnx8by5nZXRQcm9wZXJ0eU9wdGlvbnModCksby5fdmFsdWVIYXNDaGFuZ2VkKHRoaXNbdF0scixuLmhhc0NoYW5nZWQpPyh0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5oYXModCl8fHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzLnNldCh0LHIpLG4ucmVmbGVjdD09PSEwJiYhKHRoaXMuX3VwZGF0ZVN0YXRlJkVjdCkmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz09PXZvaWQgMCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxyKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfV9lbnF1ZXVlVXBkYXRlKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxTY3Q7dHJ5e3lpZWxkIHRoaXMuX3VwZGF0ZVByb21pc2V9Y2F0Y2gocil7fWxldCB0PXRoaXMucGVyZm9ybVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiYoeWllbGQgdCksIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZX0pfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN0YXRlJlNjdH1nZXQgaGFzVXBkYXRlZCgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZ3Y3R9cGVyZm9ybVVwZGF0ZSgpe2lmKCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGUpcmV0dXJuO3RoaXMuX2luc3RhbmNlUHJvcGVydGllcyYmdGhpcy5fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKTtsZXQgdD0hMSxyPXRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/dGhpcy51cGRhdGUocik6dGhpcy5fbWFya1VwZGF0ZWQoKX1jYXRjaChuKXt0aHJvdyB0PSExLHRoaXMuX21hcmtVcGRhdGVkKCksbn10JiYodGhpcy5fdXBkYXRlU3RhdGUmd2N0fHwodGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8d2N0LHRoaXMuZmlyc3RVcGRhdGVkKHIpKSx0aGlzLnVwZGF0ZWQocikpfV9tYXJrVXBkYXRlZCgpe3RoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmflNjdH1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fZ2V0VXBkYXRlQ29tcGxldGUoKX1fZ2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2V9c2hvdWxkVXBkYXRlKHQpe3JldHVybiEwfXVwZGF0ZSh0KXt0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyE9PXZvaWQgMCYmdGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuc2l6ZT4wJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocixuKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShuLHRoaXNbbl0scikpLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPXZvaWQgMCksdGhpcy5fbWFya1VwZGF0ZWQoKX11cGRhdGVkKHQpe31maXJzdFVwZGF0ZWQodCl7fX07TWNlPUNjdDtnM1tNY2VdPSEwO3ZhciBUY2U9RWxlbWVudC5wcm90b3R5cGUsYmlpPVRjZS5tc01hdGNoZXNTZWxlY3Rvcnx8VGNlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2YXIgakg9d2luZG93LlNoYWRvd1Jvb3QmJih3aW5kb3cuU2hhZHlDU1M9PT12b2lkIDB8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsQWN0PVN5bWJvbCgpLGwxPWNsYXNze2NvbnN0cnVjdG9yKHQscil7aWYociE9PUFjdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdGhpcy5fc3R5bGVTaGVldD09PXZvaWQgMCYmKGpIPyh0aGlzLl9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHRoaXMuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSk6dGhpcy5fc3R5bGVTaGVldD1udWxsKSx0aGlzLl9zdHlsZVNoZWV0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19LFBjdD1lPT5uZXcgbDEoU3RyaW5nKGUpLEFjdCksenVyPWU9PntpZihlIGluc3RhbmNlb2YgbDEpcmV0dXJuIGUuY3NzVGV4dDtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogJHtlfS4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApfSxDaT0oZSwuLi50KT0+e2xldCByPXQucmVkdWNlKChuLGksbyk9Pm4renVyKGkpK2VbbysxXSxlWzBdKTtyZXR1cm4gbmV3IGwxKHIsQWN0KX07KHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTt2YXIgQ2NlPXt9LEVQPWNsYXNzIGV4dGVuZHMgZzN7c3RhdGljIGdldFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlc31zdGF0aWMgX2dldFVuaXF1ZVN0eWxlcygpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3N0eWxlcyIsdGhpcykpKXJldHVybjtsZXQgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2xldCByPShvLGEpPT5vLnJlZHVjZVJpZ2h0KChzLGwpPT5BcnJheS5pc0FycmF5KGwpP3IobCxzKToocy5hZGQobCkscyksYSksbj1yKHQsbmV3IFNldCksaT1bXTtuLmZvckVhY2gobz0+aS51bnNoaWZ0KG8pKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz10PT09dm9pZCAwP1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcChyPT57aWYociBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFqSCl7bGV0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5jc3NSdWxlcykucmVkdWNlKChpLG8pPT5pK28uY3NzVGV4dCwiIik7cmV0dXJuIFBjdChuKX1yZXR1cm4gcn0pfWluaXRpYWxpemUoKXtzdXBlci5pbml0aWFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0VW5pcXVlU3R5bGVzKCksdGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHdpbmRvdy5TaGFkb3dSb290JiZ0aGlzLnJlbmRlclJvb3QgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5hZG9wdFN0eWxlcygpfWNyZWF0ZVJlbmRlclJvb3QoKXtyZXR1cm4gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyl9YWRvcHRTdHlsZXMoKXtsZXQgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7dC5sZW5ndGghPT0wJiYod2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiYhd2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdz93aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKHI9PnIuY3NzVGV4dCksdGhpcy5sb2NhbE5hbWUpOmpIP3RoaXMucmVuZGVyUm9vdC5hZG9wdGVkU3R5bGVTaGVldHM9dC5tYXAocj0+ciBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/cjpyLnN0eWxlU2hlZXQpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzVXBkYXRlZCYmd2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpfXVwZGF0ZSh0KXtsZXQgcj10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxyIT09Q2NlJiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihyLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9bi5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChpKX0pKX1yZW5kZXIoKXtyZXR1cm4gQ2NlfX07RVAuZmluYWxpemVkPSEwO0VQLnJlbmRlcj1TY2U7RVAuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTt2YXIgQWNlPTAsSWN0PXt9LGpjPShlLHQscik9PntsZXQgbj1yJiZyLm1vZHVsZUlkfHxgY3VzdG9tLXN0eWxlLW1vZHVsZS0ke0FjZSsrfWA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dD9bdF06W10pLHQuZm9yRWFjaChhPT57aWYoIShhIGluc3RhbmNlb2YgbDEpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIUljdFthXSl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpO3MuaW5uZXJIVE1MPWAKICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8c3R5bGU+JHthLnRvU3RyaW5nKCl9PC9zdHlsZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICBgO2xldCBsPWBjdXN0b20tc3R5bGUtbW9kdWxlLSR7QWNlKyt9YDtzLnJlZ2lzdGVyKGwpLEljdFthXT1sfX0pO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZihlKXtsZXQgYT1jdXN0b21FbGVtZW50cy5nZXQoZSk7YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9fZmluYWxpemVkIikmJmNvbnNvbGUud2FybihgVGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gZm9yICIke2V9IgogICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC4KICAgICAgTWFrZSBzdXJlIHRvIGFkZCBjb21wb25lbnQgc3BlY2lmaWMgc3R5bGUgbW9kdWxlcyBiZWZvcmUKICAgICAgaW1wb3J0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGN1c3RvbSBlbGVtZW50LmApLGkuc2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiLGUpfWxldCBvPXImJnIuaW5jbHVkZXx8W107aS5pbm5lckhUTUw9YAogICAgPHRlbXBsYXRlPgogICAgICAke28ubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke2F9Pjwvc3R5bGU+YCl9CiAgICAgICR7dC5tYXAoYT0+YDxzdHlsZSBpbmNsdWRlPSR7SWN0W2FdfT48L3N0eWxlPmApfQogICAgPC90ZW1wbGF0ZT4KICBgLGkucmVnaXN0ZXIobil9O3ZhciBMY3Q9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixMY3QpO3ZhciBGdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjZmZmOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMyk7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zNyk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC40NCk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41KTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjU3KTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjY0KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNzcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuODQpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogI2ZmZjsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXNoYWRlLTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby1zaGFkZS0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby1zaGFkZS04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXNoYWRlKTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgMTAwJSwgNjElKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCA5MiUsIDUzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDgwJSwgNDIlKTsgLyogaHNsKDE0NCw4MiUsMzclKTsgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuNTUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC4xMik7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCAxMDAlLCAzMiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29udHJhc3QtY29sb3I6ICNmZmY7CiAgfQpgLFBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1BjZS5pbm5lckhUTUw9YDxzdHlsZT4ke0Z1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFBjZS5jb250ZW50KTt2YXIgQnVyPUNpYAogIFt0aGVtZX49J2RhcmsnXSB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6IGhzbCgyMTQsIDM1JSwgMjElKTsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDIxNCwgNjUlLCA4NSUsIDAuMDYpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgyMTQsIDY0JSwgODIlLCAwLjIzKTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDIxNCwgNjklLCA4NCUsIDAuMzIpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgyMTQsIDc4JSwgODglLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMjE0LCA4MiUsIDkwJSwgMC42KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgyMTQsIDkxJSwgOTQlLCAwLjgpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMjE0LCA5NiUsIDk2JSwgMC45KTsKICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDAlLCAwJSwgMC4wNyk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA0JSwgMiUsIDAuMTUpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDEyJSwgNiUsIDAuMzIpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgMTYlLCA4JSwgMC40MSk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDI0JSwgMTIlLCAwLjYpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgMjglLCAxMyUsIDAuNyk7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDMzJSwgMTMlLCAwLjkpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzMyUsIDEzJSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tdGludC0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tdGludC0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tdGludC00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tdGludC01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tdGludC03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tdGludC04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tdGludCk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgODYlLCA1NSUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA4NiUsIDU1JSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiBoc2woMjE0LCAxMDAlLCA3MCUpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgNjUlLCA0MiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC41KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCA4NSUsIDQ3JSk7CiAgfQoKICBodG1sIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgY29sb3I6IHZhcigtLWx1bW8taGVhZGVyLXRleHQtY29sb3IpOwogIH0KCiAgYSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgfQoKICBjb2RlLAogIHByZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICB9CmA7amMoIiIsQnVyLHttb2R1bGVJZDoibHVtby1jb2xvciJ9KTt2YXIgSHVyPUNpYAogIDpob3N0IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcikgIWltcG9ydGFudDsKICB9CmA7amMoIiIsSHVyLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTt2YXIgSWNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7SWNlLmlubmVySFRNTD1gCiAgPHN0eWxlPgogICAgQGZvbnQtZmFjZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnbHVtby1pY29ucyc7CiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoJ3dvZmYnKTsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgfQoKICAgIGh0bWwgewogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tY2VudGVyOiAiXFxlYTAxIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiOwogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tcmlnaHQ6ICJcXGVhMDMiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtZG93bjogIlxcZWEwNCI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXJpZ2h0OiAiXFxlYTA2IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXVwOiAiXFxlYTA3IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctbGVmdDogIlxcZWEwOSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1yaWdodDogIlxcZWEwYSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7CiAgICAgIC0tbHVtby1pY29ucy1iYXItY2hhcnQ6ICJcXGVhMGMiOwogICAgICAtLWx1bW8taWNvbnMtYmVsbDogIlxcZWEwZCI7CiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGVja21hcms6ICJcXGVhMGYiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1kb3duOiAiXFxlYTEwIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXJpZ2h0OiAiXFxlYTEyIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tdXA6ICJcXGVhMTMiOwogICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiOwogICAgICAtLWx1bW8taWNvbnMtY29nOiAiXFxlYTE1IjsKICAgICAgLS1sdW1vLWljb25zLWNyb3NzOiAiXFxlYTE2IjsKICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjsKICAgICAgLS1sdW1vLWljb25zLWRyb3Bkb3duOiAiXFxlYTE4IjsKICAgICAgLS1sdW1vLWljb25zLWVkaXQ6ICJcXGVhMTkiOwogICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiOwogICAgICAtLWx1bW8taWNvbnMtZXllOiAiXFxlYTFiIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZS1kaXNhYmxlZDogIlxcZWExYyI7CiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjsKICAgICAgLS1sdW1vLWljb25zLW1pbnVzOiAiXFxlYTFlIjsKICAgICAgLS1sdW1vLWljb25zLW9yZGVyZWQtbGlzdDogIlxcZWExZiI7CiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7CiAgICAgIC0tbHVtby1pY29ucy1waG90bzogIlxcZWEyMSI7CiAgICAgIC0tbHVtby1pY29ucy1wbGF5OiAiXFxlYTIyIjsKICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiOwogICAgICAtLWx1bW8taWNvbnMtcmVkbzogIlxcZWEyNCI7CiAgICAgIC0tbHVtby1pY29ucy1yZWxvYWQ6ICJcXGVhMjUiOwogICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjsKICAgICAgLS1sdW1vLWljb25zLXVuZG86ICJcXGVhMjciOwogICAgICAtLWx1bW8taWNvbnMtdW5vcmRlcmVkLWxpc3Q6ICJcXGVhMjgiOwogICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjsKICAgICAgLS1sdW1vLWljb25zLXVzZXI6ICJcXGVhMmEiOwogICAgfQogIDwvc3R5bGU+CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChJY2UuY29udGVudCk7dmFyIFZ1cj1DaWAKICA6aG9zdCB7CiAgICAtLWx1bW8tc2l6ZS14czogMS42MjVyZW07CiAgICAtLWx1bW8tc2l6ZS1zOiAxLjg3NXJlbTsKICAgIC0tbHVtby1zaXplLW06IDIuMjVyZW07CiAgICAtLWx1bW8tc2l6ZS1sOiAyLjc1cmVtOwogICAgLS1sdW1vLXNpemUteGw6IDMuNXJlbTsKCiAgICAvKiBJY29ucyAqLwogICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07CiAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pOwogIH0KYCxMY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtMY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtWdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChMY2UuY29udGVudCk7dmFyIFV1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsa2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7a2NlLmlubmVySFRNTD1gPHN0eWxlPiR7VXVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoa2NlLmNvbnRlbnQpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtczogMC4yNWVtOyAvKiBDaGVja2JveCwgYmFkZ2UsIGRhdGUtcGlja2VyIHllYXIgaW5kaWNhdG9yLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLW06IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cywgMC4yNWVtKTsgLyogQnV0dG9uLCB0ZXh0IGZpZWxkLCBtZW51IG92ZXJsYXksIGV0YyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtbDogMC41ZW07IC8qIERpYWxvZywgbm90aWZpY2F0aW9uLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzOiAwLjI1ZW07IC8qIERlcHJlY2F0ZWQgKi8KCiAgICAvKiBTaGFkb3cgKi8KICAgIC0tbHVtby1ib3gtc2hhZG93LXhzOiAwIDFweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXM6IDAgMnB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDNweCAxMnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1tOiAwIDJweCA2cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCA4cHggMjRweCAtNHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbDogMCAzcHggMThweCAtMnB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDEycHggNDhweCAtNnB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3cteGw6IDAgNHB4IDI0cHggLTNweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxOHB4IDY0cHggLThweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKCiAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi8KICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0OwogIH0KYCxSY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtSY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtxdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChSY2UuY29udGVudCk7dmFyIEd1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi8KICAgIC0tbHVtby1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7CgogICAgLyogRm9udCBzaXplcyAqLwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IDAuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhzOiAwLjgxMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXM6IDAuODc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTsKCiAgICAvKiBMaW5lIGhlaWdodHMgKi8KICAgIC0tbHVtby1saW5lLWhlaWdodC14czogMS4yNTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1zOiAxLjM3NTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1tOiAxLjYyNTsKICB9CmAsTmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7TmNlLmlubmVySFRNTD1gPHN0eWxlPiR7R3VyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTmNlLmNvbnRlbnQpO3ZhciBXdXI9Q2lgCiAgaHRtbCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqLwogIDpob3N0IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgc21hbGwsCiAgW3RoZW1lfj0nZm9udC1zaXplLXMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgfQoKICBbdGhlbWV+PSdmb250LXNpemUteHMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgfQoKICBoMSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgaDIgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoMyB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDQgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1sKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDUgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTsKICB9CgogIGg2IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KCiAgcCwKICBibG9ja3F1b3RlIHsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQoKICBhOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgaHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgaGVpZ2h0OiAxcHg7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiB2YXIoLS1sdW1vLXNwYWNlLXMpIGNhbGModmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pIC8gMik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CgogIGIsCiAgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogIGJsb2NrcXVvdGVbZGlyPSdydGwnXSB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KYDtqYygiIixXdXIse21vZHVsZUlkOiJsdW1vLXR5cG9ncmFwaHkifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO3ZhciBEY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0aGVtZTp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSkscj09PSJ0aGVtZSImJnRoaXMuX3NldFRoZW1lKGkpfX07dmFyIFhIPWU9PmNsYXNzIGV4dGVuZHMgRGNlKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0IHI9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5fdGVtcGxhdGU7biYmQXJyYXkuZnJvbShuLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbaW5jbHVkZV0iKSkuZm9yRWFjaChpPT57dGhpcy5faW5jbHVkZVN0eWxlKGkuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIikscil9KSx0aGlzLl9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil9c3RhdGljIF9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil7bGV0IGk9b3UucHJvdG90eXBlLm1vZHVsZXMsbz0hMSxhPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhpKS5zb3J0KChzLGwpPT57bGV0IGM9cy5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLHU9bC5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLGg9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLGY9aC5maWx0ZXIoZD0+cy5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjAscD1oLmZpbHRlcihkPT5sLmluZGV4T2YoZCk9PT0wKS5sZW5ndGg+MDtyZXR1cm4gYyE9PXU/Yz8tMToxOmYhPT1wP2Y/LTE6MTowfSkuZm9yRWFjaChzPT57aWYocyE9PWEpe2xldCBsPWlbc10uZ2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiKTtsJiZsLnNwbGl0KCIgIikuZm9yRWFjaChjPT57bmV3IFJlZ0V4cCgiXiIrYy5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobz0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocyxyKSl9KX19KSwhbyYmaVthXSYmdGhpcy5faW5jbHVkZVN0eWxlKGEscil9c3RhdGljIF9pbmNsdWRlU3R5bGUocixuKXtpZihuJiYhbi5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2luY2x1ZGU9IiR7cn0iXWApKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJpbmNsdWRlIixyKSxuLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSl9fX07dmFyIGtjdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntrY3Q9ITB9LHtjYXB0dXJlOiEwfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntrY3Q9ITF9LHtjYXB0dXJlOiEwfSk7dmFyIFl1cj1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fX19LE9jZT1lPT5jbGFzcyBleHRlbmRzIFl1cihlKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57ci5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyhyLnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOnIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCkhPT0tMSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX3NldEZvY3VzZWQoITApfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3NldEZvY3VzZWQoITEpKSxzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscj0+eyFyLmRlZmF1bHRQcmV2ZW50ZWQmJnIua2V5Q29kZT09PTkmJnIuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKT0+dGhpcy5faXNTaGlmdFRhYmJpbmc9ITEsMCkpfSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzQXR0cmlidXRlKCJmb2N1c2VkIikmJnRoaXMuX3NldEZvY3VzZWQoITEpfV9zZXRGb2N1c2VkKHIpe3I/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzZWQiLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXNlZCIpLHImJmtjdD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1cy1yaW5nIil9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB3aW5kb3cuY29uc29sZS53YXJuKGBQbGVhc2UgaW1wbGVtZW50IHRoZSAnZm9jdXNFbGVtZW50JyBwcm9wZXJ0eSBpbiA8JHt0aGlzLmxvY2FsTmFtZX0+YCksdGhpc31fZm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuX2lzU2hpZnRUYWJiaW5nfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Zm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1ibHVyKCl7IXRoaXMuZm9jdXNFbGVtZW50fHwodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHIpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXIscj8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih0eXBlb2YgdGhpcy5fcHJldmlvdXNUYWJJbmRleCE9InVuZGVmaW5lZCImJih0aGlzLnRhYmluZGV4PXRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIikpfV90YWJpbmRleENoYW5nZWQocil7ciE9PXZvaWQgMCYmKHRoaXMuZm9jdXNFbGVtZW50LnRhYkluZGV4PXIpLHRoaXMuZGlzYWJsZWQmJnRoaXMudGFiaW5kZXgmJih0aGlzLnRhYmluZGV4IT09LTEmJih0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMudGFiaW5kZXgpLHRoaXMudGFiaW5kZXg9cj12b2lkIDApfWNsaWNrKCl7dGhpcy5kaXNhYmxlZHx8c3VwZXIuY2xpY2soKX19O3ZhciBqdXI9L1wvXCpcKlxzK3ZhYWRpbi1kZXYtbW9kZTpzdGFydChbXHNcU10qKXZhYWRpbi1kZXYtbW9kZTplbmRccytcKlwqXC8vaSwkSD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIFh1cigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4hMH1yZXR1cm4gemNlKGUpfWZ1bmN0aW9uICR1cigpe3RyeXtyZXR1cm4gS3VyKCk/ITA6WnVyKCk/JEg/IUp1cigpOiFYdXIoKTohMX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gS3VyKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9ZnVuY3Rpb24gWnVyKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9ZnVuY3Rpb24gSnVyKCl7cmV0dXJuISEoJEgmJk9iamVjdC5rZXlzKCRIKS5tYXAodD0+JEhbdF0pLmZpbHRlcih0PT50LnByb2R1Y3Rpb25Nb2RlKS5sZW5ndGg+MCl9ZnVuY3Rpb24gemNlKGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCByPWp1ci5leGVjKGUudG9TdHJpbmcoKSk7aWYocil0cnl7ZT1uZXcgRnVuY3Rpb24oclsxXSl9Y2F0Y2gobil7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLG4pfXJldHVybiBlKHQpfXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307dmFyIFJjdD1mdW5jdGlvbihlLHQpe2lmKHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlKXJldHVybiB6Y2UoZSx0KX07d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9PT12b2lkIDAmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT0kdXIoKSk7ZnVuY3Rpb24gUXVyKCl7fXZhciBGY2U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmN0PT0iZnVuY3Rpb24iKXJldHVybiBSY3QoUXVyKX07dmFyIF8zPWNsYXNze3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC50ZXh0Q29udGVudD0iQUJDRCIsdC5kaXI9InJ0bCIsdC5zdHlsZS5mb250U2l6ZT0iMTRweCIsdC5zdHlsZS53aWR0aD0iNHB4Iix0LnN0eWxlLmhlaWdodD0iMXB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Ii0xMDAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtsZXQgcj0icmV2ZXJzZSI7cmV0dXJuIHQuc2Nyb2xsTGVmdD4wP3I9ImRlZmF1bHQiOih0LnNjcm9sbExlZnQ9Mix0LnNjcm9sbExlZnQ8MiYmKHI9Im5lZ2F0aXZlIikpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkscn1zdGF0aWMgZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4pe2xldHtzY3JvbGxMZWZ0Oml9PW47aWYociE9PSJydGwifHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LHIsbixpKXtpZihyIT09InJ0bCJ8fCF0KXtuLnNjcm9sbExlZnQ9aTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pO2JyZWFrfX19O3ZhciBFMD1bXSx0aHI9ZnVuY3Rpb24oKXtsZXQgZT1EY3QoKTtFMC5mb3JFYWNoKHQ9PntOY3QodCxlKX0pfSxLSCxlaHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhyKTtlaHIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTt2YXIgTmN0PWZ1bmN0aW9uKGUsdCxyPWUuZ2V0QXR0cmlidXRlKCJkaXIiKSl7dD9lLnNldEF0dHJpYnV0ZSgiZGlyIix0KTpyIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9LERjdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKX0sWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksS0h8fChLSD1fMy5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksTmN0KHRoaXMsRGN0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSl7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKSxyIT09ImRpciIpcmV0dXJuO2xldCBvPURjdCgpLGE9aT09PW8mJkUwLmluZGV4T2YodGhpcyk9PT0tMSxzPSFpJiZuJiZFMC5pbmRleE9mKHRoaXMpPT09LTE7YXx8cz8odGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLG8saSkpOmkhPT1vJiZuPT09byYmdGhpcy5fX3N1YnNjcmliZSghMSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX19zdWJzY3JpYmUoITEpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpe2k9PT0iZGlyIiYmbj09PSIiJiYhci5oYXNBdHRyaWJ1dGUoImRpciIpfHxzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKXtyPT09ImRpciImJiFuP3RoaXMuZGlyPSIiOnN1cGVyLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKX1fX3N1YnNjcmliZShyPSEwKXtyP0UwLmluZGV4T2YodGhpcyk9PT0tMSYmRTAucHVzaCh0aGlzKTpFMC5pbmRleE9mKHRoaXMpPi0xJiZFMC5zcGxpY2UoRTAuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIpe3JldHVybiBfMy5nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChLSCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHIpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQocixuKXtyZXR1cm4gXzMuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyLG4pfX07d2luZG93LlZhYWRpbj13aW5kb3cuVmFhZGlufHx7fTt3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXtGY2UoKX07dmFyIE9jdCxCY2U9bmV3IFNldCxKSD1lPT5jbGFzcyBleHRlbmRzIFpIKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0e2lzOnJ9PXRoaXM7ciYmIUJjZS5oYXMocikmJih3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnMucHVzaCh0aGlzKSxCY2UuYWRkKHIpLHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2smJihPY3Q9c3IuZGVib3VuY2UoT2N0LGt4LCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSksSmwoT2N0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxkb2N1bWVudC5kb2N0eXBlPT09bnVsbCYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19O3ZhciBRSD1jbGFzcyBleHRlbmRzIEpIKE9jZShYSCh5aChtdCkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBRYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGxhYmVsPgogICAgICAgIDxzcGFuIHBhcnQ9ImNoZWNrYm94Ij4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIKICAgICAgICAgICAgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iCiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9Int7aW5kZXRlcm1pbmF0ZTo6Y2hhbmdlfX0iCiAgICAgICAgICAgIHJvbGU9InByZXNlbnRhdGlvbiIKICAgICAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgICAgLz4KICAgICAgICA8L3NwYW4+CgogICAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvbGFiZWw+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWNoZWNrYm94In1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbmRldGVybWluYXRlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIn0sX25hdGl2ZUNoZWNrYm94Ont0eXBlOk9iamVjdH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm5hbWV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtsZXQgdD10aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpO3QmJih0aGlzLm5hbWU9dCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0ibGFiZWwiXScpLnF1ZXJ5U2VsZWN0b3IoInNsb3QiKS5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZS5iaW5kKHRoaXMpKSx0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpfV91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpe2xldCB0PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKSxyPXQuZmlyc3RFbGVtZW50Q2hpbGQuYXNzaWduZWROb2RlcygpO3RoaXMuX2lzQXNzaWduZWROb2Rlc0VtcHR5KHIpP3Quc2V0QXR0cmlidXRlKCJlbXB0eSIsIiIpOnQucmVtb3ZlQXR0cmlidXRlKCJlbXB0eSIpfV9pc0Fzc2lnbmVkTm9kZXNFbXB0eSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09MSYmdFswXS5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnRbMF0udGV4dENvbnRlbnQudHJpbSgpPT09IiJ9X2NoZWNrZWRDaGFuZ2VkKHQpe3RoaXMuaW5kZXRlcm1pbmF0ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIixCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmNoZWNrZWQpfV9hZGRBY3RpdmVMaXN0ZW5lcnMoKXt0aGlzLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsImRvd24iLHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJ1cCIsKCk9PnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhY3RpdmUiKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKSl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpfV9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KXtyZXR1cm4hKHRoaXMuZGlzYWJsZWR8fHQudGFyZ2V0LmxvY2FsTmFtZT09PSJhIil9X2hhbmRsZUNsaWNrKHQpe3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYodGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmluZGV0ZXJtaW5hdGU9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSk6dC5jb21wb3NlZFBhdGgoKVswXSE9PXRoaXMuX25hdGl2ZUNoZWNrYm94JiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSkpfV90b2dnbGVDaGVja2VkKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7Y29tcG9zZWQ6ITEsYnViYmxlczohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShRSC5pcyxRSCk7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKCiAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdCk7CiAgICB9CgogICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLWJvcmRlciddKSkgewogICAgICBib3JkZXI6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ2VsbCBzdHlsZXMgKi8KCiAgICBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1tKTsKICAgIH0KCiAgICAvKiBBcHBseSByb3cgYm9yZGVycyBieSBkZWZhdWx0IGFuZCBpbnRyb2R1Y2UgdGhlICJuby1yb3ctYm9yZGVycyIgdmFyaWFudCAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogSGlkZSBmaXJzdCBib2R5IHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLW0pIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICAvKiBGb2N1cy1yaW5nICovCgogICAgW3BhcnR+PSdjZWxsJ106Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIDpob3N0KFtuYXZpZ2F0aW5nXSkgW3BhcnR+PSdjZWxsJ106Zm9jdXM6OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICA6aG9zdChbZHJhZ292ZXJdKTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIHsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ10gewogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgKyAycHgpOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSBbZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMnB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiAxMDAlOwogICAgICBib3R0b206IGF1dG87CiAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IGF1dG87CiAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSk6OmFmdGVyLAogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdkZXRhaWxzLWNlbGwnXTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdW2RyYWdvdmVyPSdvbi10b3AnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIHsKICAgICAgLyogQWRkIGJvdHRvbS1zcGFjZSB0byB0aGUgcm93IHNvIHRoZSBkcmFnIG51bWJlciBkb2Vzbid0IGdldCBjbGlwcGVkLiBOZWVkZWQgZm9yIElFL0VkZ2UgKi8KICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OiAwLjk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICBbaW9zXSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgICNzY3JvbGxlcjpub3QoW2lvc10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XTpub3QoW2RyYWdzdGFydD0nJ10pOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteCk7CiAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgei1pbmRleDogMTAwOwogICAgICBjb250ZW50OiBhdHRyKGRyYWdzdGFydCk7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbG9yKTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhzKTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsOwogICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgbWluLXdpZHRoOiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAqIDAuNyk7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAvKiBIZWFkZXJzIGFuZCBmb290ZXJzICovCgogICAgW3BhcnR+PSdoZWFkZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgIH0KCiAgICAvKiBIZWFkZXIgYm9yZGVycyAqLwoKICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSd0b3AnXSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZvb3RlciBib3JkZXJzICovCgogICAgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdib3R0b20nXSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVvcmRlcmluZyAqLwoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2FsbG93ZWQnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nZHJhZ2dpbmcnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYm94LXNoYWRvdzogdmFyKC0tbHVtby1ib3gtc2hhZG93LXMpOwogICAgICAvKiBUT0RPIFVzZSB0aGUgc2FtZSBzdHlsZXMgYXMgZm9yIHRoZSBjZWxsIGVsZW1lbnQgKHJlb3JkZXItZ2hvc3QgY29waWVzIHN0eWxlcyBmcm9tIHRoZSBjZWxsIGVsZW1lbnQpICovCiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIENvbHVtbiByZXNpemluZyAqLwoKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10gewogICAgICB3aWR0aDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSdjZWxsJ106aG92ZXIgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSwKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ106YWN0aXZlIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICB9CgogICAgLyogQ29sdW1uIGJvcmRlcnMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdsZWZ0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBSb3cgc3RyaXBlcyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2JvZHktY2VsbCddLAogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIH0KCiAgICAvKiBTZWxlY3RlZCByb3cgKi8KCiAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSB7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2JvZHktY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvciksIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICB9CgogICAgLyogQ292ZXIgdGhlIGJvcmRlciBvZiBhbiB1bnNlbGVjdGVkIHJvdyAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgMCAwIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb21wYWN0ICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1zKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLXMpOwogICAgfQoKICAgIC8qIFdyYXAgY2VsbCBjb250ZW50cyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3dyYXAtY2VsbC1jb250ZW50J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVtvdmVyZmxvd349J3JpZ2h0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWdyaWQifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zZWxlY3QtYWxsLWNoZWNrYm94LWx1bW8ifSk7dmFyIEhjZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHJocj1IY2UmJkhjZVsxXT49OCxWY2U9MyxVY2U9aDkoe2JlaGF2aW9yczpbSnMsdjldLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3ZpZXdwb3J0SGVpZ2h0K3RoaXMuX3Njcm9sbE9mZnNldH0sZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPWV9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KGUpe2U9ZSV0aGlzLl9waHlzaWNhbENvdW50LGU8MCYmKGU9dGhpcy5fcGh5c2ljYWxDb3VudCtlKSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2xldCB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl0sdD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gbn0pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7bGV0IGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl19KSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludChlWyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKGUuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtsZXQgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDtsZXQgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7bGV0e3BoeXNpY2FsVG9wOm4saW5kZXhlczppfT10aGlzLl9nZXRSZXVzYWJsZXMocik7cj8odGhpcy5fcGh5c2ljYWxUb3A9bix0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2kubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWkubGVuZ3RoKSx0aGlzLl91cGRhdGUoaSxyP251bGw6aSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGxpKX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oZSl7bGV0IHQscixuLGk9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fc2Nyb2xsVG9wLGY9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj1oLWMpOih0PXRoaXMuX3BoeXNpY2FsRW5kLHI9dS1mKTtuPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0scj1yLW4sIShpLmxlbmd0aD49bHx8cjw9byk7KWlmKGUpe2lmKHMraS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50fHxjK24+PWgtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO2kucHVzaCh0KSxjPWMrbix0PSh0KzEpJWx9ZWxzZXtpZihhLWkubGVuZ3RoPD0wfHxjK3RoaXMuX3BoeXNpY2FsU2l6ZS1uPD1mKWJyZWFrO2kucHVzaCh0KSxjPWMtbix0PXQ9PT0wP2wtMTp0LTF9cmV0dXJue2luZGV4ZXM6aSxwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oZSx0KXtpZighKGUmJmUubGVuZ3RoPT09MHx8dGhpcy5fcGh5c2ljYWxDb3VudD09PTApKXtpZih0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXtsZXQgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3JdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe2xldCByPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxWY2UsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudCxuPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSk7aWYoIShyPDApKXtpZihyPjApe2xldCBpPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChyKSk7Zm9yKGxldCBvPTA7bzxyO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K3IsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLWkpL3Isbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHxuPT09MHx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSksa3gpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsaSkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuaXNBdHRhY2hlZHx8IXRoaXMuX2lzVmlzaWJsZSkpaWYodGhpcy5fcGh5c2ljYWxDb3VudCE9PTApe2xldHtwaHlzaWNhbFRvcDplLGluZGV4ZXM6dH09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3VwZGF0ZSh0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChWY2UpKX0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXtsZXQgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9pc1Zpc2libGUpcmV0dXJuO2NpKCk7bGV0IHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgZT10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCl7dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTtsZXQgdD10aGlzLl9zY3JvbGxUb3A7IXJociYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsKGV8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTF8fChjaSgpLHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSlyZXR1cm47ZT10aGlzLl9jbGFtcChlLDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHxlPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PWUtMSksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7bGV0IHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtmb3IoO3I8ZSYmbjw9aTspbj1uK3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sTmkpfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LF9jbGFtcDpmdW5jdGlvbihlLHQscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgodCxlKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihlLHQscil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2VdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbZV0scix0LmJpbmQodGhpcykpLEpsKHRoaXMuX2RlYm91bmNlcnNbZV0pfX0pO3ZhciB0Vj1jbGFzcyBleHRlbmRzIFVjZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKTtsZXQgcj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKG49Pm4uaW5kZXg9PT10KVswXTtpZihyKXtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtNYXRoLmFicyhuKT4xJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9bix0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfXRoaXMuX3Njcm9sbGluZ1RvSW5kZXg9ITF9X2VmZmVjdGl2ZVNpemVDaGFuZ2VkKHQpe2xldCByLG49MDt0aGlzLl9pdGVyYXRlSXRlbXMoKGksbyk9PntpZihvPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07cj1hLmluZGV4LG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9fSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsMWU1KX0pLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLHRoaXMuX3Njcm9sbFRvcD09PTAmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fc2Nyb2xsVG9JbmRleChNYXRoLm1pbih0LTEscikpKSx0aGlzLl9pdGVyYXRlSXRlbXMoaT0+e2xldCBvPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07aWYoby5pbmRleD09PXImJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxvLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2xldCBhPUFycmF5LmZyb20odGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSk7by5jaGlsZHJlblthXS5mb2N1cygpfX0pKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3VwZGF0ZSgpKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fcG9zaXRpb25JdGVtcygpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IHQ7aXNOYU4odGhpcy5fcGh5c2ljYWxUb3ApJiYodD0hMCx0aGlzLl9waHlzaWNhbFRvcD0wKTtsZXQgcj10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMobj0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbbl0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cn1weClgLHIrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSx0JiZ0aGlzLl9zY3JvbGxUb0luZGV4KDApfV9pbmNyZWFzZVBvb2xJZk5lZWRlZCh0KXt0PT09MCYmdGhpcy5fc2Nyb2xsaW5nVG9JbmRleHx8IXRoaXMuX2NhblBvcHVsYXRlKCl8fCF0aGlzLl9lZmZlY3RpdmVTaXplfHwodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkP3RoaXMuX29wdFBoeXNpY2FsU2l6ZSE9PTEvMCYmKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLE5pLCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpO2xldCByPXRoaXMuX29wdFBoeXNpY2FsU2l6ZS10aGlzLl9waHlzaWNhbFNpemUsbj1NYXRoLmNlaWwoci90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrbj50aGlzLl9lZmZlY3RpdmVTaXplJiYobj1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmbj4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQobiksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpOih0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQ9ITAsc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKDI1KSkpfV9fcmVvcmRlckNoaWxkTm9kZXMoKXtsZXQgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTshIXQucmVkdWNlKChuLGksbyxhKT0+e2lmKG89PT0wfHxhW28tMV0uaW5kZXg9PT1pLmluZGV4LTEpcmV0dXJuIG59LCEwKXx8dC5zb3J0KChuLGkpPT5uLmluZGV4LWkuaW5kZXgpLmZvckVhY2gobj0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKG4pKX1fY3JlYXRlUG9vbCh0KXtsZXQgcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKG89PnIuYXBwZW5kQ2hpbGQobykpLHRoaXMuX2dldFJvd1RhcmdldCgpLmFwcGVuZENoaWxkKHIpO2xldCBpPXRoaXMucXVlcnlTZWxlY3RvcigiW3Nsb3RdIik7aWYoaSl7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsbyl9cmV0dXJuIFRtKHRoaXMsKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpLG59X2Fzc2lnbk1vZGVscyh0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKHIsbik9PntsZXQgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3JdO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIixuPj10aGlzLl9lZmZlY3RpdmVTaXplLGkpLHRoaXMuX3VwZGF0ZVNjcm9sbGVySXRlbShpLG4rKHRoaXMuX3ZpZHhPZmZzZXR8fDApKX0sdCl9X3Njcm9sbEhhbmRsZXIoKXtsZXQgdD10aGlzLiQudGFibGUuc2Nyb2xsVG9wLXRoaXMuX3Njcm9sbFBvc2l0aW9uO3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9zY3JvbGxIYW5kbGVyKTtsZXQgcj10aGlzLl92aWR4T2Zmc2V0O3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1yJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXt0aGlzLl9ub1NjYWxlPSExO3JldHVybn1sZXQgcj10aGlzLiQudGFibGUuc2Nyb2xsVG9wLyh0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLG49cip0aGlzLl9lZmZlY3RpdmVTaXplO3RoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChuLXIqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2xldCByPXRoaXMuX3ZpZHhPZmZzZXR8fDAsbj0xZTMsaT0xMDA7dGhpcy5fc2Nyb2xsVG9wPT09MD8odGhpcy5fdmlkeE9mZnNldD0wLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KDApKTp0aGlzLmZpcnN0VmlzaWJsZUluZGV4PG4mJnRoaXMuX3ZpZHhPZmZzZXQ+MCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsaSksciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoci10aGlzLl92aWR4T2Zmc2V0KSksdGhpcy5fbm9TY2FsZT0hMCk7bGV0IG89dGhpcy5fZWZmZWN0aXZlU2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3AmJnRoaXMuX21heFNjcm9sbFRvcD4wPyh0aGlzLl92aWR4T2Zmc2V0PW8sciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtbiYmdGhpcy5fdmlkeE9mZnNldDxvJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oby10aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtcikpLHRoaXMuX25vU2NhbGU9ITApfX1fYWNjZXNzSXJvbkxpc3RBUEkodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3NBc3luY0VuYWJsZWQ9ITE7bGV0IHI9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsTmksKCk9PnRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSEwKSxyfV9kZWJvdW5jZVJlbmRlcih0LHIpe3N1cGVyLl9kZWJvdW5jZVJlbmRlcigoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkscil9X3dhcm5Qcml2YXRlQVBJQWNjZXNzKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkJiZjb25zb2xlLndhcm4oYEFjY2Vzc2luZyBwcml2YXRlIEFQSSAoJHt0fSkhYCl9X3JlbmRlcigpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZW5kZXIpfV9pdGVtc0NoYW5nZWQoKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuZmlyc3RWaXNpYmxlSW5kZXgpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCl9X3Njcm9sbFRvSW5kZXgodCl7dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksY2koKX19O3ZhciBxY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfYTExeVVwZGF0ZUdyaWRTaXplKHNpemUsIF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfV9hMTF5R2V0SGVhZGVyUm93Q291bnQocil7cmV0dXJuIHIuZmlsdGVyKG49Pm4uc29tZShpPT5pLl9oZWFkZXJUZW1wbGF0ZXx8aS5oZWFkZXJSZW5kZXJlcnx8aS5wYXRofHxpLmhlYWRlcikpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXIpKS5sZW5ndGh9X2ExMXlVcGRhdGVHcmlkU2l6ZShyLG4pe2lmKHI9PT12b2lkIDB8fG49PT12b2lkIDApcmV0dXJuO2xldCBpPW5bbi5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIscit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQobikrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KG4pKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixpJiZpLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLG4rMSkpfV9hMTF5VXBkYXRlRm9vdGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmZvb3Rlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrbisxKSl9X2ExMXlVcGRhdGVSb3dSb3dpbmRleChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuK3RoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSsxKX1fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpLEFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT5pLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsQm9vbGVhbihuKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsbisxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e3R5cGVvZiBuPT0iYm9vbGVhbiI/aS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG4pOmkuaGFzQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikmJmkucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KX1fYTExeVNldFJvd0RldGFpbHNDZWxsKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpIT09biYmaS5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLG4uaWQpfSl9X2ExMXlVcGRhdGVDZWxsQ29sc3BhbihyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLWNvbHNwYW4iLE51bWJlcihuKSl9X2ExMXlVcGRhdGVTb3J0ZXJzKCl7QXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoInZhYWRpbi1ncmlkLXNvcnRlciIpKS5mb3JFYWNoKHI9PntsZXQgbj1yLnBhcmVudE5vZGU7Zm9yKDtuJiZuLmxvY2FsTmFtZSE9PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiOyluPW4ucGFyZW50Tm9kZTtuJiZuLmFzc2lnbmVkU2xvdCYmbi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtc29ydCIse2FzYzoiYXNjZW5kaW5nIixkZXNjOiJkZXNjZW5kaW5nIn1bU3RyaW5nKHIuZGlyZWN0aW9uKV18fCJub25lIil9KX19O3ZhciBHY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjZWxsLWFjdGl2YXRlIix0aGlzLl9hY3RpdmF0ZUl0ZW0uYmluZCh0aGlzKSl9X2FjdGl2YXRlSXRlbShyKXtsZXQgbj1yLmRldGFpbC5tb2RlbCxpPW4/bi5pdGVtOm51bGw7aSYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxpKT9udWxsOmkpfV9vbkNsaWNrKHIpe2lmKHIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW5bbi5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIWl8fGkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2xldCBvPWkuX2NvbnRlbnQsYT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDshby5jb250YWlucyhhKSYmIXRoaXMuX2lzRm9jdXNhYmxlKHIudGFyZ2V0KSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKGkucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZShyKXtyZXR1cm4gbmhyKHIpfX0sbmhyPWU9PntpZighZS5wYXJlbnROb2RlKXJldHVybiExO2xldCByPUFycmF5LmZyb20oZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpKS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoInBhcnQiKSE9PSJjZWxsIGJvZHktY2VsbCIpLmluZGV4T2YoZSkhPT0tMTtyZXR1cm4hZS5kaXNhYmxlZCYmcn07dmFyIFdjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHIsbixpKXtpZighIWkpe2lmKCFBcnJheS5pc0FycmF5KHIpKXtyPT1udWxsJiYodGhpcy5zaXplPTApLHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApO3JldHVybn10aGlzLnNpemU9ci5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIocixuKXtsZXQgaT0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsaSkmJihpPXRoaXMuX2ZpbHRlcihpKSksdGhpcy5zaXplPWkubGVuZ3RoLHIuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsaSkmJihpPWkuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2xldCBvPXIucGFnZSpyLnBhZ2VTaXplLGE9bytyLnBhZ2VTaXplLHM9aS5zbGljZShvLGEpO24ocyxpLmxlbmd0aCl9X2NoZWNrUGF0aHMocixuLGkpe2lmKCFpLmxlbmd0aClyZXR1cm4hMTtsZXQgbz0hMDtmb3IobGV0IGEgaW4gcil7bGV0IHM9clthXS5wYXRoO2lmKCFzfHxzLmluZGV4T2YoIi4iKT09PS0xKWNvbnRpbnVlO2xldCBsPXMucmVwbGFjZSgvXC5bXi5dKiQvLCIiKTtEYS5nZXQobCxpWzBdKT09PXZvaWQgMCYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtzfSIgdXNlZCBmb3IgJHtufSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke259IGlzIGRpc2FibGVkLmApLG89ITEpfXJldHVybiBvfV9tdWx0aVNvcnQocixuKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoaT0+aS5kaXJlY3Rpb249PT0iYXNjIj90aGlzLl9jb21wYXJlKERhLmdldChpLnBhdGgsciksRGEuZ2V0KGkucGF0aCxuKSk6aS5kaXJlY3Rpb249PT0iZGVzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLG4pLERhLmdldChpLnBhdGgscikpOjApLnJlZHVjZSgoaSxvKT0+aXx8bywwKX1fbm9ybWFsaXplRW1wdHlWYWx1ZShyKXtyZXR1cm5bdm9pZCAwLG51bGxdLmluZGV4T2Yocik+PTA/IiI6aXNOYU4ocik/ci50b1N0cmluZygpOnJ9X2NvbXBhcmUocixuKXtyZXR1cm4gcj10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKHIpLG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShuKSxyPG4/LTE6cj5uPzE6MH1fZmlsdGVyKHIpe3JldHVybiByLmZpbHRlcihuPT50aGlzLl9maWx0ZXJzLmZpbHRlcihpPT57bGV0IG89dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShEYS5nZXQoaS5wYXRoLG4pKSxhPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoaS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBvLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPT09LTF9KS5sZW5ndGg9PT0wKX19O3ZhciBZY2U9ZT0+Y2xhc3MgZXh0ZW5kcyB5aChlKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7bGV0IHI9dGhpcy4kLnNjcm9sbGVyO0VtKHIsInRyYWNrIix0aGlzLl9vbkhlYWRlclRyYWNrLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixuPT5yLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PSJyZXNpemUtaGFuZGxlIiYmbi5wcmV2ZW50RGVmYXVsdCgpKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSl9X29uSGVhZGVyVHJhY2socil7bGV0IG49ci50YXJnZXQ7aWYobi5nZXRBdHRyaWJ1dGUoInBhcnQiKT09PSJyZXNpemUtaGFuZGxlIil7bGV0IG89bi5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO28ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbC5fb3JkZXItYy5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCk7bGV0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKSxzPWEuZmlsdGVyKGw9PmwuX2NvbHVtbj09PW8pWzBdO2lmKHMub2Zmc2V0V2lkdGgpe2xldCBsPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLGM9MTArcGFyc2VJbnQobC5wYWRkaW5nTGVmdCkrcGFyc2VJbnQobC5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGwuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChsLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGwubWFyZ2luTGVmdCkrcGFyc2VJbnQobC5tYXJnaW5SaWdodCksdT1zLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXIuZGV0YWlsLng6ci5kZXRhaWwueC1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KGMsdSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX2NvbHVtbi5fb3JkZXItYy5fY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxjLHUpe2M8dS5pbmRleE9mKHMpJiYobC5fY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLl9jb2x1bW4uZmxleEdyb3c9MCl9KSxyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpvfX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19O3ZhciBqY2U9Y2xhc3MgWGNle2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPXIsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIodD0+dGhpcy5pdGVtQ2FjaGVzW3RdLmlzTG9hZGluZygpKVswXSl9Z2V0SXRlbUZvckluZGV4KHQpe2xldHtjYWNoZTpyLHNjYWxlZEluZGV4Om59PXRoaXMuZ2V0Q2FjaGVBbmRJbmRleCh0KTtyZXR1cm4gci5pdGVtc1tuXX11cGRhdGVTaXplKCl7dGhpcy5lZmZlY3RpdmVTaXplPSF0aGlzLnBhcmVudEl0ZW18fHRoaXMuZ3JpZC5faXNFeHBhbmRlZCh0aGlzLnBhcmVudEl0ZW0pP3RoaXMuc2l6ZStPYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpLnJlZHVjZSgodCxyKT0+e2xldCBuPXRoaXMuaXRlbUNhY2hlc1tyXTtyZXR1cm4gbi51cGRhdGVTaXplKCksdCtuLmVmZmVjdGl2ZVNpemV9LDApOjB9ZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh0KXtpZighdGhpcy5pdGVtQ2FjaGVzW3RdKXtsZXQgcj1uZXcgWGNlKHRoaXMuZ3JpZCx0aGlzLHRoaXMuaXRlbXNbdF0pO3RoaXMuaXRlbUNhY2hlc1t0XT1yLHRoaXMuZ3JpZC5fbG9hZFBhZ2UoMCxyKX19Z2V0Q2FjaGVBbmRJbmRleCh0KXtsZXQgcj10LG49T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89TnVtYmVyKG5baV0pLGE9dGhpcy5pdGVtQ2FjaGVzW29dO2lmKHI8PW8pcmV0dXJue2NhY2hlOnRoaXMsc2NhbGVkSW5kZXg6cn07aWYocjw9bythLmVmZmVjdGl2ZVNpemUpcmV0dXJuIGEuZ2V0Q2FjaGVBbmRJbmRleChyLW8tMSk7ci09YS5lZmZlY3RpdmVTaXplfXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9fX0sJGNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sbG9hZGluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpjZSh0aGlzKX19LGl0ZW1JZFBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGV4cGFuZGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NpemVDaGFuZ2VkKHNpemUpIiwiX2l0ZW1JZFBhdGhDaGFuZ2VkKGl0ZW1JZFBhdGgpIiwiX2V4cGFuZGVkSXRlbXNDaGFuZ2VkKGV4cGFuZGVkSXRlbXMuKikiXX1fc2l6ZUNoYW5nZWQocil7bGV0IG49ci10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPW4sdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9bix0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0ocixuKXtpZihyPj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtuLmluZGV4PXI7bGV0e2NhY2hlOmksc2NhbGVkSW5kZXg6b309dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxhPWkuaXRlbXNbb107YT8odGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMSxuKSx0aGlzLl91cGRhdGVJdGVtKG4sYSksdGhpcy5faXNFeHBhbmRlZChhKSYmaS5lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KG8pKToodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMCxuKSx0aGlzLl9sb2FkUGFnZSh0aGlzLl9nZXRQYWdlRm9ySW5kZXgobyksaSkpfV9leHBhbmRlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7ci5pdGVtIT09dm9pZCAwJiYobj90aGlzLmV4cGFuZEl0ZW0oci5pdGVtKTp0aGlzLmNvbGxhcHNlSXRlbShyLml0ZW0pKX1nZXRJdGVtSWQocil7cmV0dXJuIHRoaXMuaXRlbUlkUGF0aD90aGlzLmdldCh0aGlzLml0ZW1JZFBhdGgscik6cn1faXNFeHBhbmRlZChyKXtyZXR1cm4gdGhpcy5fX2V4cGFuZGVkS2V5cy5oYXModGhpcy5nZXRJdGVtSWQocikpfV9leHBhbmRlZEl0ZW1zQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCl9X19jYWNoZUV4cGFuZGVkS2V5cygpe3RoaXMuZXhwYW5kZWRJdGVtcyYmKHRoaXMuX19leHBhbmRlZEtleXM9bmV3IFNldCx0aGlzLmV4cGFuZGVkSXRlbXMuZm9yRWFjaChyPT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQocikpfSkpfWV4cGFuZEl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKXx8KHRoaXMuZXhwYW5kZWRJdGVtcz1bLi4udGhpcy5leHBhbmRlZEl0ZW1zLHJdKX1jb2xsYXBzZUl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKSYmKHRoaXMuZXhwYW5kZWRJdGVtcz10aGlzLmV4cGFuZGVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZ2V0SW5kZXhMZXZlbChyKXtsZXR7Y2FjaGU6bn09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxpPTA7Zm9yKDtuLnBhcmVudENhY2hlOyluPW4ucGFyZW50Q2FjaGUsaSsrO3JldHVybiBpfV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZShyLG4pe2lmKCFuLnBlbmRpbmdSZXF1ZXN0c1tyXSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLG4ucGVuZGluZ1JlcXVlc3RzW3JdPSEwO2xldCBpPXtwYWdlOnIscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKSxwYXJlbnRJdGVtOm4ucGFyZW50SXRlbX07dGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5kYXRhUHJvdmlkZXIoaSwobyxhKT0+e2EhPT12b2lkIDA/bi5zaXplPWE6aS5wYXJlbnRJdGVtJiYobi5zaXplPW8ubGVuZ3RoKTtsZXQgcz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikubWFwKGw9PmwuX2l0ZW0pO28uZm9yRWFjaCgobCxjKT0+e2xldCB1PXIqdGhpcy5wYWdlU2l6ZStjO24uaXRlbXNbdV09bCx0aGlzLl9pc0V4cGFuZGVkKGwpJiZzLmluZGV4T2YobCk+LTEmJm4uZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh1KX0pLHRoaXMuX2hhc0RhdGE9ITAsZGVsZXRlIG4ucGVuZGluZ1JlcXVlc3RzW3JdLHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEsbW8uYWZ0ZXIoMCksKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+IWwuaGlkZGVuKS5mb3JFYWNoKGw9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgobC5pbmRleCkmJnRoaXMuX2dldEl0ZW0obC5pbmRleCxsKX0pLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSksdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YS5mbHVzaCgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCl9KX19X2dldFBhZ2VGb3JJbmRleChyKXtyZXR1cm4gTWF0aC5mbG9vcihyL3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgamNlKHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PntBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2gobj0+e24uX2luc3RhbmNlJiZuLl9pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KCJpdGVtIix7fSwhMSl9KX0pLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLCghdGhpcy5fZWZmZWN0aXZlU2l6ZXx8IXRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZCkmJnRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQocixuKXtuIT09dm9pZCAwJiZyIT09biYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3RoaXMuc2l6ZT09PXZvaWQgMCYmdGhpcy5fZWZmZWN0aXZlU2l6ZT09PTAmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYFx1MjAxOXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmdGhpcy5jbGVhckNhY2hlKCksciYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsbW8uYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbChyLG4pe3JldHVybiB0aGlzLmdldEl0ZW1JZChyKT09PXRoaXMuZ2V0SXRlbUlkKG4pfV9nZXRJdGVtSW5kZXhJbkFycmF5KHIsbil7bGV0IGk9LTE7cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e3RoaXMuX2l0ZW1zRXF1YWwobyxyKSYmKGk9YSl9KSxpfXNjcm9sbFRvSW5kZXgocil7c3VwZXIuc2Nyb2xsVG9JbmRleChyKSwhaXNOYU4ocikmJih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8IXRoaXMuY2xpZW50SGVpZ2h0KSYmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleD1yKX1fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCl7aWYodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4JiZ0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtsZXQgcj10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgocil9fX07dmFyIEtjZT1lPT5jbGFzcyBleHRlbmRzIGV7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHMocil7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIilyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHIpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2RlcyhyKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3VwcyhyKXtyZXR1cm4gci5tYXAobj0+bi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj90aGlzLl9nZXRDaGlsZENvbHVtbnMobik6W25dKS5yZWR1Y2UoKG4saSk9Pm4uY29uY2F0KGkpLFtdKX1fZ2V0Q29sdW1uVHJlZSgpe2xldCByPXZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLG49W107Zm9yKGxldCBpPXI7bi5wdXNoKGkpLCEhdGhpcy5faGFzQ29sdW1uR3JvdXBzKGkpOylpPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoaSk7cmV0dXJuIG59X3VwZGF0ZUNvbHVtblRyZWUoKXtsZXQgcj10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMocix0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9cil9X2FkZE5vZGVPYnNlcnZlcigpe3RoaXMuX29ic2VydmVyPW5ldyB2aCh0aGlzLHI9PntsZXQgbj1yLmFkZGVkTm9kZXMuZmlsdGVyKG89Pm8ubG9jYWxOYW1lPT09InRlbXBsYXRlIiYmby5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpWzBdO24mJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PW4mJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9bik7bGV0IGk9bz0+by5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihpKHIuYWRkZWROb2Rlcyl8fGkoci5yZW1vdmVkTm9kZXMpKXtsZXQgbz1yLnJlbW92ZWROb2Rlcy5mbGF0TWFwKHM9PnMuX2FsbENlbGxzKSxhPXM9Pm8uZmlsdGVyKGw9PmwuX2NvbnRlbnQuY29udGFpbnMocykpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihhKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIoYSkpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSl9X2FycmF5RXF1YWxzKHIsbil7aWYoIXJ8fCFufHxyLmxlbmd0aCE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKWlmKHJbaV1pbnN0YW5jZW9mIEFycmF5JiZuW2ldaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKHJbaV0sbltpXSkpcmV0dXJuITF9ZWxzZSBpZihyW2ldIT1uW2ldKXJldHVybiExO3JldHVybiEwfV9jaGVja0ltcG9ydHMoKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLWZpbHRlci1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC10cmVlLXRvZ2dsZSIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0LWNvbHVtbiIsInZhYWRpbi1ncmlkLXNvcnRlciJdLmZvckVhY2gocj0+e2xldCBuPXRoaXMucXVlcnlTZWxlY3RvcihyKTtuJiYhKG4gaW5zdGFuY2VvZiBtdCkmJmNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3J9PiBlbGVtZW50LmApfSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2gocj0+dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpe0FycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgobixpKT0+bi5fY29sdW1uLl9vcmRlci1pLl9jb2x1bW4uX29yZGVyKS5mb3JFYWNoKChuLGksbyk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsaT09PTAsbiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsaT09PW8ubGVuZ3RoLTEsbil9KX1faXNDb2x1bW5FbGVtZW50KHIpe3JldHVybiByLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHIubG9jYWxOYW1lKX19O3ZhciBaY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldEV2ZW50Q29udGV4dChyKXtsZXQgbj17fSxpPXIuY29tcG9zZWRQYXRoKCksbz1pW2kuaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO3JldHVybiBvJiYobi5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoYT0+by5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKGEpPi0xKVswXSxvLl9jb2x1bW4mJihuLmNvbHVtbj1vLl9jb2x1bW4pLChuLnNlY3Rpb249PT0iYm9keSJ8fG4uc2VjdGlvbj09PSJkZXRhaWxzIikmJk9iamVjdC5hc3NpZ24obix0aGlzLl9fZ2V0Um93TW9kZWwoby5wYXJlbnRFbGVtZW50KSkpLG59fTt2YXIgSmNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZChyKXtyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIoci50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHIpe3RoaXMuX2ZpbHRlcnMuaW5kZXhPZihyKT09PS0xJiZ0aGlzLl9maWx0ZXJzLnB1c2gocil9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLHZhbHVlOnIudmFsdWV9KSl9fTt2YXIgVDA9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLXRlbXBsYXRpemVyIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sX2dyaWQ6T2JqZWN0fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5zdGFuY2VQcm9wcz17ZGV0YWlsc09wZW5lZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwLGV4cGFuZGVkOiEwLGxldmVsOiEwfX1jcmVhdGVJbnN0YW5jZSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7bGV0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KT09PS0xJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMubm90aWZ5UGF0aCgiX3RlbXBsYXRlSW5zdGFuY2VzLioiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzKSkpfXJlbW92ZUluc3RhbmNlKHQpe2xldCByPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk7dGhpcy5zcGxpY2UoIl90ZW1wbGF0ZUluc3RhbmNlcyIsciwxKX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXt0aGlzLl9UZW1wbGF0ZUNsYXNzfHwodGhpcy5fVGVtcGxhdGVDbGFzcz10Yyh0aGlzLnRlbXBsYXRlLHRoaXMse2luc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxwYXJlbnRNb2RlbDohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24odCxyKXt0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCh0LHIpLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzJiZ0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQscixuKXtpZihyPT09ImluZGV4Inx8cj09PSJpdGVtIilyZXR1cm47bGV0IGk9YF9fJHtyfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2xldCBvPUFycmF5LmZyb20odGhpcy5fZ3JpZC4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChsLl9pdGVtLHQuaXRlbSkpWzBdO28mJkFycmF5LmZyb20oby5jaGlsZHJlbikuZm9yRWFjaChsPT57bC5faW5zdGFuY2UmJihsLl9pbnN0YW5jZVtpXT1uLGwuX2luc3RhbmNlLm5vdGlmeVBhdGgocixuKSl9KTtsZXQgYT0iaXRlbS4iO2lmKEFycmF5LmlzQXJyYXkodGhpcy5fZ3JpZC5pdGVtcykmJnIuaW5kZXhPZihhKT09PTApe2xldCBsPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLGM9ci5zbGljZShhLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2x9LiR7Y31gLG4pfWxldCBzPWBfJHtyfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW3NdJiZ0aGlzLl9ncmlkW3NdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LHIpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09cix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX1fdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKHQpe2xldCByLG47aWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcyIpcj0wLG49dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2UgaWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIilyPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goaT0+e2ZvcihsZXQgbz1yO288cituO28rKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tvXS5zZXQoaSx0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ldKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKFQwLmlzLFQwKTt2YXIgUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHIsbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZihyfHxuKXtpZihyJiYhci50ZW1wbGF0aXplcil7bGV0IGk9bmV3IFQwO2kuX2dyaWQ9dGhpcyxpLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChpPT57aS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpfHwodGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQoaSwhMSkpLGRlbGV0ZSBpLnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIikuX2luc3RhbmNlfSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChyKXtyLnBhdGg9PT0iZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCJ8fCFyLnZhbHVlfHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChuPT57dGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwobixuLl9pdGVtKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZChuLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkZXRhaWxzLW9wZW5lZCIsdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4uX2l0ZW0pLG4pfSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHIpe3Iuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAscil9X3RvZ2dsZURldGFpbHNDZWxsKHIsbil7bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyk7aWYoIWkpcmV0dXJuO2xldCBvPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQobiksYT0hIWkuaGlkZGVuIT09bzsoIWkuX2luc3RhbmNlJiYhaS5fcmVuZGVyZXJ8fGkuaGlkZGVuIT09bykmJihpLmhpZGRlbj1vLG8/ci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKToodGhpcy5yb3dEZXRhaWxzUmVuZGVyZXI/KGkuX3JlbmRlcmVyPXRoaXMucm93RGV0YWlsc1JlbmRlcmVyLGkuX3JlbmRlcmVyLmNhbGwodGhpcyxpLl9jb250ZW50LHRoaXMse2luZGV4OnIuaW5kZXgsaXRlbTpufSkpOnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSYmIWkuX2luc3RhbmNlJiYoaS5faW5zdGFuY2U9dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksaS5fY29udGVudC5pbm5lckhUTUw9IiIsaS5fY29udGVudC5hcHBlbmRDaGlsZChpLl9pbnN0YW5jZS5yb290KSx0aGlzLl91cGRhdGVJdGVtKHIsbikpLGNpKCksci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke2kub2Zmc2V0SGVpZ2h0fXB4YCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpLGEmJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2gocj0+e3IucGFyZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke3Iub2Zmc2V0SGVpZ2h0fXB4YCl9KX1faXNEZXRhaWxzT3BlbmVkKHIpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zKSE9PS0xfW9wZW5JdGVtRGV0YWlscyhyKXt0aGlzLl9pc0RldGFpbHNPcGVuZWQocil8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMscl0pfWNsb3NlSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLm9wZW5JdGVtRGV0YWlscyhyLml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyhyLml0ZW0pfX07dmFyIHpjdD17U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfSx0dWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHIpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9cn1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKS5mb250U2l6ZTtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxuP3dpbmRvdy5wYXJzZUludChuKTp2b2lkIDB9X3Njcm9sbFZpZXdwb3J0SGVpZ2h0VXBkYXRlZChyKXt0aGlzLl9zY3JvbGxQYWdlSGVpZ2h0PXItdGhpcy4kLmhlYWRlci5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQtdGhpcy5fc2Nyb2xsTGluZUhlaWdodH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLm91dGVyc2Nyb2xsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy4kLnRhYmxlLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57bGV0IG49ci5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuJC5pdGVtcyk7dGhpcy5fcm93V2l0aEZvY3VzZWRFbGVtZW50PXIuY29tcG9zZWRQYXRoKClbbi0xXX0pLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PnRoaXMuX19tb3VzZURvd249ITApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5fX21vdXNlRG93bj0hMSx0aGlzLl9fcGVuZGluZ1Jlb3JkZXImJih0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITEsc2V0VGltZW91dCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSx6Y3QuU0NST0xMSU5HKSl9KX1zY3JvbGxUb0luZGV4KHIpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHIpKX1fb25XaGVlbChyKXtpZihyLmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci50YXJnZXQsci5kZWx0YVgsci5kZWx0YVkpKXJldHVybjtsZXQgbj10aGlzLiQudGFibGUsaT1yLmRlbHRhWTtpZihyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/aSo9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDpyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihpKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXt0aGlzLl9kZWx0YVlBY2MrPWksci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsTmksKCk9PnRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITEpO2xldCBvPU1hdGguYWJzKHIuZGVsdGFYKStNYXRoLmFicyhpKTt0aGlzLl9jYW5TY3JvbGwobixyLmRlbHRhWCxpKT8oci5wcmV2ZW50RGVmYXVsdCgpLG4uc2Nyb2xsVG9wKz1pLG4uc2Nyb2xsTGVmdCs9ci5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsbW8uYWZ0ZXIoemN0LklHTk9SRV9XSEVFTCksKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmbzw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/ci5wcmV2ZW50RGVmYXVsdCgpOm8+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpLHRoaXMuX3ByZXZpb3VzTW9tZW50dW09b31faGFzU2Nyb2xsZWRBbmNlc3RvcihyLG4saSl7aWYoci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IilyZXR1cm4hMTtpZih0aGlzLl9jYW5TY3JvbGwocixuLGkpJiZbImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUocikub3ZlcmZsb3cpIT09LTEpcmV0dXJuITA7aWYociE9PXRoaXMmJnIucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihyLnBhcmVudEVsZW1lbnQsbixpKX1fY2FuU2Nyb2xsKHIsbixpKXtyZXR1cm4gaT4wJiZyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLm9mZnNldEhlaWdodHx8aTwwJiZyLnNjcm9sbFRvcD4wfHxuPjAmJnIuc2Nyb2xsTGVmdDxyLnNjcm9sbFdpZHRoLXIub2Zmc2V0V2lkdGh8fG48MCYmci5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSksdGhpcy5fZGVib3VuY2VTY3JvbGxpbmc9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VTY3JvbGxpbmcsbW8uYWZ0ZXIoemN0LlNDUk9MTElORyksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxpbmdGcmFtZSksZGVsZXRlIHRoaXMuX3Njcm9sbGluZ0ZyYW1lLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuX3Jlb3JkZXJSb3dzKCl9KX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHI9IiIsbj10aGlzLiQudGFibGU7bi5zY3JvbGxUb3A8bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQmJihyKz0iIGJvdHRvbSIpLG4uc2Nyb2xsVG9wPjAmJihyKz0iIHRvcCIpLG4uc2Nyb2xsTGVmdDxuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgmJihyKz0iIHJpZ2h0Iiksbi5zY3JvbGxMZWZ0PjAmJihyKz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csTmksKCk9PntsZXQgaT1yLnRyaW0oKTtpLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWk/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixpKTppLmxlbmd0aD09MCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bil7dGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwO3JldHVybn1sZXQgcj10aGlzLiQuaXRlbXMsbj1yLnF1ZXJ5U2VsZWN0b3JBbGwoInRyIik7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxvPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShuKS5maWx0ZXIobD0+IWwuaGlkZGVuKVswXTtpZighbylyZXR1cm47bGV0IGE9by5pbmRleC1pLHM9QXJyYXkuZnJvbShuKS5pbmRleE9mKG8pLWE7aWYocz4wKWZvcihsZXQgbD0wO2w8cztsKyspci5hcHBlbmRDaGlsZChuW2xdKTtlbHNlIGlmKHM8MClmb3IobGV0IGw9bi5sZW5ndGgrcztsPG4ubGVuZ3RoO2wrKylyLmluc2VydEJlZm9yZShuW2xdLG5bMF0pO2lmKHRoaXMuX3NhZmFyaSl7bGV0e3RyYW5zZm9ybTpsfT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPWwpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLGxpLCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaChmdW5jdGlvbihyKXtyLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47bGV0IHI9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTtyLnNvcnQoKGksbyk9PmkuX29yZGVyLW8uX29yZGVyKTtsZXQgbj1yLnJlZHVjZSgoaSxvLGEpPT4oby5fbGFzdEZyb3plbj0hMSxvLmZyb3plbiYmIW8uaGlkZGVuP2E6aSksdm9pZCAwKTtuIT09dm9pZCAwJiYocltuXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2xldCByPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsTGVmdCksbj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbFRvcCksaT0wLG89MCxhPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwoaT1yLG89bixhPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8pLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8rYSksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7bGV0IHM9dGhpcy5fX2lzUlRMP3RoaXMuX19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0aGlzLiQudGFibGUpK3RoaXMuX19zY3JvbGxlck1ldHJpY3MuY2xpZW50V2lkdGgtdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5zY3JvbGxXaWR0aDp0aGlzLl9zY3JvbGxMZWZ0LGw9dGhpcy5fZ2V0VHJhbnNsYXRlKHMsMCk7Zm9yKGxldCBjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1sfX1fZ2V0VHJhbnNsYXRlKHIsbil7cmV0dXJuYHRyYW5zbGF0ZSgke3J9cHgsICR7bn1weClgfX07dmFyIGV1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkSXRlbXMuKikiXX1faXNTZWxlY3RlZChyKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHIsdGhpcy5zZWxlY3RlZEl0ZW1zKT4tMX1zZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocil8fCh0aGlzLnNlbGVjdGVkSXRlbXM9Wy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxyXSl9ZGVzZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocikmJih0aGlzLnNlbGVjdGVkSXRlbXM9dGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X3RvZ2dsZUl0ZW0ocil7dGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk9PT0tMT90aGlzLnNlbGVjdEl0ZW0ocik6dGhpcy5kZXNlbGVjdEl0ZW0ocil9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHIpe3RoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJihyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcyJ8fHIucGF0aD09PSJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiKSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3VwZGF0ZUl0ZW0obixuLl9pdGVtKX0pfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLnNlbGVjdEl0ZW0oci5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbShyLml0ZW0pfX07dmFyIHJ1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQocil7bGV0IG49ci50YXJnZXQ7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fdXBkYXRlU29ydGVyKG4pLHRoaXMuX19hcHBseVNvcnRlcnMoKX1fX3JlbW92ZVNvcnRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9zb3J0ZXJzPXRoaXMuX3NvcnRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgocixuKT0+ci5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9uOm51bGwsdGhpcyl9X191cGRhdGVTb3J0ZXIocil7aWYoISghci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMuaW5kZXhPZihyKT09PS0xKSl7aWYoci5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxyKSxyLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHIpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCk7ZWxzZSBpZihyLmRpcmVjdGlvbil7bGV0IG49dGhpcy5fc29ydGVycy5maWx0ZXIoaT0+aSE9cik7dGhpcy5fc29ydGVycz1bcl0sbi5mb3JFYWNoKGk9PntpLl9vcmRlcj1udWxsLGkuZGlyZWN0aW9uPW51bGx9KX19fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLGRpcmVjdGlvbjpyLmRpcmVjdGlvbn0pKX1fcmVtb3ZlQXJyYXlJdGVtKHIsbil7bGV0IGk9ci5pbmRleE9mKG4pO2k+LTEmJnIuc3BsaWNlKGksMSl9fTt2YXIgbnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKS5mb3JFYWNoKHI9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocix0aGlzLl9fZ2V0Um93TW9kZWwocikpKX1fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyhyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2gobz0+aS5jbGFzc0xpc3QucmVtb3ZlKG8pKSx0aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3Ipe2xldCBvPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcihpLl9jb2x1bW4sbik7aS5fX2dlbmVyYXRlZENsYXNzZXM9byYmby5zcGxpdCgiICIpLmZpbHRlcihhPT5hLmxlbmd0aD4wKSxpLl9fZ2VuZXJhdGVkQ2xhc3NlcyYmaS5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpfX0pfX07dmFyIFRQPXtCRVRXRUVOOiJiZXR3ZWVuIixPTl9UT1A6Im9uLXRvcCIsT05fVE9QX09SX0JFVFdFRU46Im9uLXRvcC1vci1iZXR3ZWVuIixPTl9HUklEOiJvbi1ncmlkIn0sQzA9e09OX1RPUDoib24tdG9wIixBQk9WRToiYWJvdmUiLEJFTE9XOiJiZWxvdyIsRU1QVFk6ImVtcHR5In0saXVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLHI9Pnt0aGlzLmRyb3BNb2RlJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpfSl9X29uRHJhZ1N0YXJ0KHIpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IG49ci50YXJnZXQ7aWYobi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiYmKG49bi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2xldCBzPW4uc3R5bGUudHJhbnNmb3JtO24uc3R5bGUudG9wPS90cmFuc2xhdGVZXCgoLiopXCkvLmV4ZWMocylbMV0sbi5zdHlsZS50cmFuc2Zvcm09Im5vbmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e24uc3R5bGUudG9wPSIiLG4uc3R5bGUudHJhbnNmb3JtPXN9KX1sZXQgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz9yLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uobik6ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sci5jbGllbnRYLWkubGVmdCxyLmNsaWVudFktaS50b3ApO2xldCBvPVtuXTt0aGlzLl9pc1NlbGVjdGVkKG4uX2l0ZW0pJiYobz10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKHM9PnRoaXMuX2lzU2VsZWN0ZWQocy5faXRlbSkpLmZpbHRlcihzPT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHMpKSkpLHIuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLHRoaXMuX19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKG8pKSxuLnNldEF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IixvLmxlbmd0aD4xP28ubGVuZ3RoOiIiKSx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tX2dyaWQtZHJhZy1zdGFydC14IjpgJHtyLmNsaWVudFgtaS5sZWZ0KzIwfXB4YCwiLS1fZ3JpZC1kcmFnLXN0YXJ0LXkiOmAke3IuY2xpZW50WS1pLnRvcCsxMH1weGB9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6IiIsIi0tX2dyaWQtZHJhZy1zdGFydC15IjoiIn0pfSk7bGV0IGE9bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdzdGFydCIse2RldGFpbDp7ZHJhZ2dlZEl0ZW1zOm8ubWFwKHM9PnMuX2l0ZW0pLHNldERyYWdEYXRhOihzLGwpPT5yLmRhdGFUcmFuc2Zlci5zZXREYXRhKHMsbCksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6cz0+bi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIscyl9fSk7YS5vcmlnaW5hbEV2ZW50PXIsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfX1fb25EcmFnRW5kKHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksci5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJhZ2VuZCIpO24ub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChuKX1fb25EcmFnTGVhdmUocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX1fb25EcmFnT3ZlcihyKXtpZih0aGlzLmRyb3BNb2RlKXtpZih0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwLHRoaXMuX2RyYWdPdmVySXRlbT12b2lkIDAsdGhpcy5fX2RuZEF1dG9TY3JvbGwoci5jbGllbnRZKSl7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7cmV0dXJufWxldCBuPXIuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkubG9jYWxOYW1lPT09InRyIilbMF07aWYoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9HUklEKXRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5FTVBUWTtlbHNlIGlmKCFufHxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpe2lmKG4pcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fVE9QX09SX0JFVFdFRU4pbj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PiFpLmhpZGRlbikucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XO2Vsc2UgcmV0dXJufWVsc2V7bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLl9kcm9wTG9jYXRpb249QzAuT05fVE9QLHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOKXtsZXQgbz1yLmNsaWVudFktaS50b3A8aS5ib3R0b20tci5jbGllbnRZO3RoaXMuX2Ryb3BMb2NhdGlvbj1vP0MwLkFCT1ZFOkMwLkJFTE9XfWVsc2UgdGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOJiYoci5jbGllbnRZLWkudG9wPGkuaGVpZ2h0LzM/dGhpcy5fZHJvcExvY2F0aW9uPUMwLkFCT1ZFOnIuY2xpZW50WS1pLnRvcD5pLmhlaWdodC8zKjImJih0aGlzLl9kcm9wTG9jYXRpb249QzAuQkVMT1cpKX1pZihuJiZuLmhhc0F0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIpKXt0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwO3JldHVybn1yLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1DMC5FTVBUWT90aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdvdmVyIiwhMCx0aGlzKTpuPyh0aGlzLl9kcmFnT3Zlckl0ZW09bi5faXRlbSxuLmdldEF0dHJpYnV0ZSgiZHJhZ292ZXIiKSE9PXRoaXMuX2Ryb3BMb2NhdGlvbiYmbi5zZXRBdHRyaWJ1dGUoImRyYWdvdmVyIix0aGlzLl9kcm9wTG9jYXRpb24pKTp0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX19X19kbmRBdXRvU2Nyb2xsKHIpe2lmKHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nKXJldHVybiEwO2xldCBuPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLGk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Asbz1uLXIrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQsYT1yLWkrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscz0wO2lmKGE+MD9zPWEqMjpvPjAmJihzPS1vKjIpLHMpe2xldCBsPXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9cyxsIT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKT0+dGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITEsMjApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwhMH19X19nZXRWaWV3cG9ydFJvd3MoKXtsZXQgcj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxuPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PntsZXQgbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmJvdHRvbT5yJiZvLnRvcDxufSl9X2NsZWFyRHJhZ1N0eWxlcygpe3RoaXMucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnIucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKX1fb25Ecm9wKHIpe2lmKHRoaXMuZHJvcE1vZGUpe3Iuc3RvcFByb3BhZ2F0aW9uKCksci5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPXIuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHIuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAobz0+KHt0eXBlOm8sZGF0YTpyLmRhdGFUcmFuc2Zlci5nZXREYXRhKG8pfSkpO3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBpPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcm9wIix7YnViYmxlczpyLmJ1YmJsZXMsY2FuY2VsYWJsZTpyLmNhbmNlbGFibGUsZGV0YWlsOntkcm9wVGFyZ2V0SXRlbTp0aGlzLl9kcmFnT3Zlckl0ZW0sZHJvcExvY2F0aW9uOnRoaXMuX2Ryb3BMb2NhdGlvbixkcmFnRGF0YTpufX0pO2kub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChpKX19X19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKHIpe3JldHVybiByLm1hcChuPT5BcnJheS5mcm9tKG4uY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4mJmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik9PT0tMSkuc29ydCgoaSxvKT0+aS5fY29sdW1uLl9vcmRlcj5vLl9jb2x1bW4uX29yZGVyPzE6LTEpLm1hcChpPT5pLl9jb250ZW50LnRleHRDb250ZW50LnRyaW0oKSkuZmlsdGVyKGk9PmkpLmpvaW4oIgkiKSkuam9pbihgCmApfV9kcmFnRHJvcEFjY2Vzc0NoYW5nZWQoKXt0aGlzLmZpbHRlckRyYWdBbmREcm9wKCl9ZmlsdGVyRHJhZ0FuZERyb3AoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT57dGhpcy5fZmlsdGVyRHJhZ0FuZERyb3Aocix0aGlzLl9fZ2V0Um93TW9kZWwocikpfSl9X2ZpbHRlckRyYWdBbmREcm9wKHIsbil7bGV0IGk9IXRoaXMucm93c0RyYWdnYWJsZXx8dGhpcy5kcmFnRmlsdGVyJiYhdGhpcy5kcmFnRmlsdGVyKG4pLG89IXRoaXMuZHJvcE1vZGV8fHRoaXMuZHJvcEZpbHRlciYmIXRoaXMuZHJvcEZpbHRlcihuKTtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLm1hcChzPT5zLl9jb250ZW50KS5mb3JFYWNoKHM9PntpP3MucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTpzLnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWctZGlzYWJsZWQiLGksciksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcm9wLWRpc2FibGVkIixvLHIpfX07dmFyIG91ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19oZWFkZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9pdGVtc0ZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2Zvb3RlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX25hdmlnYXRpbmdJc0hpZGRlbjpCb29sZWFuLF9mb2N1c2VkSXRlbUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfZm9jdXNlZENvbHVtbk9yZGVyOk51bWJlcixpbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxvYnNlcnZlcjoiX2ludGVyYWN0aW5nQ2hhbmdlZCJ9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksISh0aGlzLl9pb3N8fHRoaXMuX2FuZHJvaWQpJiYodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5faXNNb3VzZWRvd249ITB9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpfV9mb2N1c2FibGVDaGFuZ2VkKHIsbil7biYmbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxyJiZ0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHIpfV9pbnRlcmFjdGluZ0NoYW5nZWQoKXt0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2hlYWRlckZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9pdGVtc0ZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9mb290ZXJGb2N1c2FibGUpfV9vbktleURvd24ocil7bGV0IG49ci5rZXksaTtzd2l0Y2gobil7Y2FzZSJBcnJvd1VwIjpjYXNlIkFycm93RG93biI6Y2FzZSJBcnJvd0xlZnQiOmNhc2UiQXJyb3dSaWdodCI6Y2FzZSJQYWdlVXAiOmNhc2UiUGFnZURvd24iOmNhc2UiSG9tZSI6Y2FzZSJFbmQiOmk9Ik5hdmlnYXRpb24iO2JyZWFrO2Nhc2UiRW50ZXIiOmNhc2UiRXNjYXBlIjpjYXNlIkYyIjppPSJJbnRlcmFjdGlvbiI7YnJlYWs7Y2FzZSJUYWIiOmk9IlRhYiI7YnJlYWs7Y2FzZSIgIjppPSJTcGFjZSI7YnJlYWt9dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksdGhpcy5pbnRlcmFjdGluZyYmaSE9PSJJbnRlcmFjdGlvbiImJihpPXZvaWQgMCksaSYmdGhpc1tgX29uJHtpfUtleURvd25gXShyLG4pfV9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocil7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT5pLmluZGV4PT09cilbMF18fHRoaXMuX3Njcm9sbFRvSW5kZXgocil9X29uTmF2aWdhdGlvbktleURvd24ocixuKXt0aGlzLl9zY3JvbGxIYW5kbGVyKCksci5wcmV2ZW50RGVmYXVsdCgpO2Z1bmN0aW9uIGkoQil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoQi5wYXJlbnROb2RlLmNoaWxkcmVuLEIpfWxldCBvPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMSxhPTAscz0wO3N3aXRjaChuKXtjYXNlIkFycm93UmlnaHQiOmE9dGhpcy5fX2lzUlRMPy0xOjE7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmE9dGhpcy5fX2lzUlRMPzE6LTE7YnJlYWs7Y2FzZSJIb21lIjphPS0xLzAsci5jdHJsS2V5JiYocz0tMS8wKTticmVhaztjYXNlIkVuZCI6YT0xLzAsci5jdHJsS2V5JiYocz0xLzApO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpzPTE7YnJlYWs7Y2FzZSJBcnJvd1VwIjpzPS0xO2JyZWFrO2Nhc2UiUGFnZURvd24iOnM9bzticmVhaztjYXNlIlBhZ2VVcCI6cz0tbzticmVha31sZXQgbD1yLmNvbXBvc2VkUGF0aCgpWzBdLGM9aShsKSx1PXRoaXMuX2VsZW1lbnRNYXRjaGVzKGwsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxoPWwucGFyZW50Tm9kZSxmPWgucGFyZW50Tm9kZSxwPShmPT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6Zi5jaGlsZHJlbi5sZW5ndGgpLTEsZD1mPT09dGhpcy4kLml0ZW1zP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXghPT12b2lkIDA/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpoLmluZGV4OmkoaCksZz1NYXRoLm1heCgwLE1hdGgubWluKGQrcyxwKSksXz0hMTtpZihmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1oLl9pdGVtLEk9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGcpO3U/Xz1zPT09MDpfPXM9PT0xJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoQil8fHM9PT0tMSYmZyE9PWQmJnRoaXMuX2lzRGV0YWlsc09wZW5lZChJKSxfIT09dSYmKHM9PT0xJiZffHxzPT09LTEmJiFfKSYmKGc9ZCl9aWYoZiE9PXRoaXMuJC5pdGVtcyl7aWYoZz5kKWZvcig7ZzxwJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZysrO2Vsc2UgaWYoZzxkKWZvcig7Zz4wJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZy0tfXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj09PXZvaWQgMCYmKHU/dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPTA6dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXRoaXMuX2dldENvbHVtbnMoZixkKS5maWx0ZXIoQj0+IUIuaGlkZGVuKVtjXS5fb3JkZXIpO2xldCB5PXRoaXMuX2dldENvbHVtbnMoZixnKS5maWx0ZXIoQj0+IUIuaGlkZGVuKSx4PXkubWFwKEI9PkIuX29yZGVyKS5zb3J0KChCLEkpPT5CLUkpLGI9eC5sZW5ndGgtMSxTPXguaW5kZXhPZih4LnNsaWNlKDApLnNvcnQoKEIsSSk9Pk1hdGguYWJzKEItdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyKS1NYXRoLmFicyhJLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcikpWzBdKSxDPXM9PT0wJiZ1P1M6TWF0aC5tYXgoMCxNYXRoLm1pbihTK2EsYikpO0MhPT1TJiYodGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCksZj09PXRoaXMuJC5pdGVtcyYmdGhpcy5fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KGcpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IGs9eS5yZWR1Y2UoKEIsSSxMKT0+KEJbSS5fb3JkZXJdPUwsQikse30pW3hbQ11dLE89Zj09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKGYuY2hpbGRyZW4pLmZpbHRlcihCPT5CLmluZGV4PT09ZylbMF06Zi5jaGlsZHJlbltnXTtpZighTylyZXR1cm47bGV0IEQ9Xz9BcnJheS5mcm9tKE8uY2hpbGRyZW4pLmZpbHRlcihCPT50aGlzLl9lbGVtZW50TWF0Y2hlcyhCLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpWzBdOk8uY2hpbGRyZW5ba107aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKEQpLGY9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PWcpLGY9PT10aGlzLiQuaXRlbXMpe2xldCBCPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxMPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO0IuYm90dG9tPkk/KHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPUIuYm90dG9tLUksdGhpcy5fc2Nyb2xsSGFuZGxlcigpKTpCLnRvcDxMJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcC09TC1CLnRvcCx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfUQuZm9jdXMoKX1fb25JbnRlcmFjdGlvbktleURvd24ocixuKXtsZXQgaT1yLmNvbXBvc2VkUGF0aCgpWzBdLG89aS5sb2NhbE5hbWU9PT0iaW5wdXQiJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KGkudHlwZSksYTtzd2l0Y2gobil7Y2FzZSJFbnRlciI6YT10aGlzLmludGVyYWN0aW5nPyFvOiEwO2JyZWFrO2Nhc2UiRXNjYXBlIjphPSExO2JyZWFrO2Nhc2UiRjIiOmE9IXRoaXMuaW50ZXJhY3Rpbmc7YnJlYWt9bGV0e2NlbGw6c309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7aWYodGhpcy5pbnRlcmFjdGluZyE9PWEmJnMhPT1udWxsKWlmKGEpe2xldCBsPXMuX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8cy5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtsJiYoci5wcmV2ZW50RGVmYXVsdCgpLGwuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCxzLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITEpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQocixuKXtsZXQgaT1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF0sbz1pLmluZGV4T2Yocik7Zm9yKG8rPW47bz49MCYmbzw9aS5sZW5ndGgtMSYmKCFpW29dfHxpW29dLnBhcmVudE5vZGUuaGlkZGVuKTspbys9bjtyZXR1cm4gaVtvXX1fb25UYWJLZXlEb3duKHIpe2xldCBuPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoci5jb21wb3NlZFBhdGgoKVswXSxyLnNoaWZ0S2V5Py0xOjEpO2lmKG49PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBpPW4sbz10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxvLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7bGV0IGE9QXJyYXkuZnJvbShvLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxzPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+bC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpWzBdO3MmJihpPXMuY2hpbGRyZW5bYV0pfXIucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X29uU3BhY2VLZXlEb3duKHIpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdOyghbi5fY29udGVudHx8IW4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAocil7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdChyLmtleSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO2lmKG4uX2NvbnRlbnQmJm4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCBpPXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7bi5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsaSx0aGlzKX19X29uRm9jdXNJbihyKXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO249PT10aGlzLiQudGFibGV8fG49PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KG4sbj09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uRm9jdXNPdXQocil7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyhyKX1fb25DZWxsRm9jdXNJbihyKXtsZXR7c2VjdGlvbjpuLGNlbGw6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksbiYmaSYmKHRoaXMuX2FjdGl2ZVJvd0dyb3VwPW4sdGhpcy4kLmhlYWRlcj09PW4/dGhpcy5faGVhZGVyRm9jdXNhYmxlPWk6dGhpcy4kLml0ZW1zPT09bj90aGlzLl9pdGVtc0ZvY3VzYWJsZT1pOnRoaXMuJC5mb290ZXI9PT1uJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWkpLGkuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSksaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1cyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpLHRoaXMuX2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil9X29uQ2VsbEZvY3VzT3V0KHIpe3IuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpPT09MyYmci5jb21wb3NlZFBhdGgoKVswXS5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c291dCIse2J1YmJsZXM6ITF9KSl9X2RldGVjdEludGVyYWN0aW5nKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCkuc29tZShpPT5pLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhuKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleChyKXtsZXR7c2VjdGlvbjpuLHJvdzppfT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbihyKTtuPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1pLmluZGV4KX1fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKXtpZighcilyZXR1cm47bGV0IG49dGhpcy5fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQociksaT10aGlzLmludGVyYWN0aW5nJiZuPT09dGhpcy5fYWN0aXZlUm93R3JvdXA7ci50YWJJbmRleD1pPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHIsbil7ci5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLG49PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnMocixuKXtsZXQgaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiByPT09dGhpcy4kLmhlYWRlcj9pPW46cj09PXRoaXMuJC5mb290ZXImJihpPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtbiksdGhpcy5fY29sdW1uVHJlZVtpXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbilbMF0pLHRoaXMuJC5pdGVtcy5maXJzdEVsZW1lbnRDaGlsZCl7bGV0IHI9dGhpcy5faXRlcmF0ZUl0ZW1zKChuLGkpPT57aWYodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg9PT1pKXJldHVybiB0aGlzLiQuaXRlbXMuY2hpbGRyZW5bbl19KTtyJiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5maWx0ZXIobj0+IW4uaGlkZGVuKVswXSl9dGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKX1fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHIpe2lmKHIuaGFzQXR0cmlidXRlKCJmcm96ZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXMociwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKXJldHVybjtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5wYXJlbnROb2RlLG89QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpLGE9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5sZWZ0LGw9YS5yaWdodDtmb3IobGV0IGM9by0xO2M+PTA7Yy0tKXtsZXQgdT1pLmNoaWxkcmVuW2NdO2lmKCEodS5oYXNBdHRyaWJ1dGUoImhpZGRlbiIpfHx0aGlzLl9lbGVtZW50TWF0Y2hlcyh1LCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpJiZ1Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIikpe3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDticmVha319Zm9yKGxldCBjPW8rMTtjPGkuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtsPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319bi5sZWZ0PHMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLmxlZnQtcykpLG4ucmlnaHQ+bCYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKG4ucmlnaHQtbCkpfV9lbGVtZW50TWF0Y2hlcyhyLG4pe3JldHVybiByLm1hdGNoZXM/ci5tYXRjaGVzKG4pOkFycmF5LmZyb20oci5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwobikpLmluZGV4T2YocikhPT0tMX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocil7bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW4uaW5kZXhPZih0aGlzLiQudGFibGUpLG89aT49MT9uW2ktMV06bnVsbCxhPWk+PTI/bltpLTJdOm51bGwscz1pPj0zP25baS0zXTpudWxsO3JldHVybntzZWN0aW9uOm8scm93OmEsY2VsbDpzfX1fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQocil7cmV0dXJuIHI9PT10aGlzLl9oZWFkZXJGb2N1c2FibGU/dGhpcy4kLmhlYWRlcjpyPT09dGhpcy5faXRlbXNGb2N1c2FibGU/dGhpcy4kLml0ZW1zOnI9PT10aGlzLl9mb290ZXJGb2N1c2FibGU/dGhpcy4kLmZvb3RlcjpudWxsfX07ZnVuY3Rpb24gYXVlKGUsdCxyKXtsZXQgbj0xO2UuZm9yRWFjaChpPT57biUxMD09PTAmJm4rKyxpLl9vcmRlcj1yK24qdCxuKyt9KX12YXIgc3VlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLEVtKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUocil7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmci5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQocil7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9vblRyYWNrU3RhcnQoe2RldGFpbDp7eDpyLnRvdWNoZXNbMF0uY2xpZW50WCx5OnIudG91Y2hlc1swXS5jbGllbnRZfX0pfSwxMDApfV9vblRvdWNoTW92ZShyKXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZyLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudChyKXtpZihyLmRldGFpbC5zdGF0ZT09PSJzdGFydCIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQuaGVhZGVyKS0yXTtpZighaXx8IWkuX2NvbnRlbnR8fGkuX2NvbnRlbnQuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLiQuc2Nyb2xsZXIuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSlyZXR1cm47dGhpcy5fdG91Y2hEZXZpY2V8fHRoaXMuX29uVHJhY2tTdGFydChyKX1lbHNlIHIuZGV0YWlsLnN0YXRlPT09InRyYWNrIj90aGlzLl9vblRyYWNrKHIpOnIuZGV0YWlsLnN0YXRlPT09ImVuZCImJnRoaXMuX29uVHJhY2tFbmQocil9X29uVHJhY2tTdGFydChyKXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgmJnIuY29tcG9zZWRQYXRoKCk7aWYobiYmbi5maWx0ZXIobz0+by5oYXNBdHRyaWJ1dGUmJm8uaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSlbMF0pcmV0dXJuO2xldCBpPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIik9PT0tMSkpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49aS5fY29sdW1uO3RoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudD09PTE7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KGkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2socil7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2xldCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighbilyZXR1cm47bGV0IGk9dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKG4sdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oaSxyLmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oci5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT9yLmRldGFpbC55LTUwOnIuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1yLmRldGFpbC54fV9vblRyYWNrRW5kKCl7IXRoaXMuX2RyYWdnZWRDb2x1bW58fCh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKHI9PiFyLmhpZGRlbikuc29ydCgocixuKT0+ci5fb3JkZXItbi5fb3JkZXIpfV9jZWxsRnJvbVBvaW50KHIsbil7cj1yfHwwLG49bnx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7bGV0IGk9dGhpcy5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQocixuKTtpZih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExLHRoaXMuJC5zY3JvbGxlciksaSYmaS5fY29sdW1uKXJldHVybiBpfV91cGRhdGVHaG9zdFBvc2l0aW9uKHIsbil7bGV0IGk9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci1pLndpZHRoLzIsYT1uLWkuaGVpZ2h0LzIscz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGw9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1zLShpLmxlZnQtbyksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9bC0oaS50b3AtYSksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X3VwZGF0ZUdob3N0KHIpe2xldCBuPXRoaXMuX3Jlb3JkZXJHaG9zdDtuLnRleHRDb250ZW50PXIuX2NvbnRlbnQuaW5uZXJUZXh0O2xldCBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpO3JldHVyblsiYm94U2l6aW5nIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsImFsaWduSXRlbXMiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZmxleC1kaXJlY3Rpb24iLCJvdmVyZmxvdyJdLmZvckVhY2gobz0+bi5zdHlsZVtvXT1pW29dKSxufV91cGRhdGVPcmRlcnMocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHwoclswXS5mb3JFYWNoKGk9PmkuX29yZGVyPTApLGF1ZShyWzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHIsbil7QXJyYXkuZnJvbShyLnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcihpPT4vY29sdW1uLy50ZXN0KGkubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChpLHIpKS5mb3JFYWNoKGk9PmkuX3Jlb3JkZXJTdGF0dXM9bil9X2F1dG9TY3JvbGxlcigpe2lmKHRoaXMuX2xhc3REcmFnQ2xpZW50WCl7bGV0IHI9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3I+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9ci8xMDpuPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09bi8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZChyLG4pe2lmKHImJm4pe2xldCBpPXIhPT1uLG89ci5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50LGE9ci5mcm96ZW49PT1uLmZyb3plbjtyZXR1cm4gaSYmbyYmYX19X2lzU3dhcHBhYmxlQnlQb3NpdGlvbihyLG4pe2xldCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcihzPT5yLmNvbnRhaW5zKHMuX2NvbHVtbikpWzBdLG89dGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJ0cjpub3QoW2hpZGRlbl0pIFtyZW9yZGVyLXN0YXR1cz1kcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEubGVmdD5vLmxlZnQ/bj5hLnJpZ2h0LW8ud2lkdGg6bjxhLmxlZnQrby53aWR0aH1fc3dhcENvbHVtbk9yZGVycyhyLG4pe2xldCBpPXIuX29yZGVyO3IuX29yZGVyPW4uX29yZGVyLG4uX29yZGVyPWksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpfV9nZXRUYXJnZXRDb2x1bW4ocixuKXtpZihyJiZuKXtsZXQgaT1yLl9jb2x1bW47Zm9yKDtpLnBhcmVudEVsZW1lbnQhPT1uLnBhcmVudEVsZW1lbnQmJmkhPT10aGlzOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaS5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50P2k6ci5fY29sdW1ufX19O3ZhciBpaHI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuO2xldCByPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gciYmci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiYmci5yZXNpemFibGV8fCExfX0sX2hlYWRlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2Zvb3RlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sZnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGRlbjp7dHlwZTpCb29sZWFufSxoZWFkZXI6e3R5cGU6U3RyaW5nfSx0ZXh0QWxpZ246e3R5cGU6U3RyaW5nfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXI6TnVtYmVyLF9yZW9yZGVyU3RhdHVzOkJvb2xlYW4sX2VtcHR5Q2VsbHM6QXJyYXksX2hlYWRlckNlbGw6T2JqZWN0LF9mb290ZXJDZWxsOk9iamVjdCxfZ3JpZDpPYmplY3QsaGVhZGVyUmVuZGVyZXI6RnVuY3Rpb24sZm9vdGVyUmVuZGVyZXI6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfd2lkdGhDaGFuZ2VkKHdpZHRoLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mcm96ZW5DaGFuZ2VkKGZyb3plbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93LCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9wYXRoT3JIZWFkZXJDaGFuZ2VkKHBhdGgsIGhlYWRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKiwgcmVuZGVyZXIsIGhlYWRlclJlbmRlcmVyLCBfYm9keVRlbXBsYXRlLCBfaGVhZGVyVGVtcGxhdGUpIiwiX3RleHRBbGlnbkNoYW5nZWQodGV4dEFsaWduLCBfY2VsbHMuKiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsKSIsIl9vcmRlckNoYW5nZWQoX29yZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiLCJfc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihfYm9keVRlbXBsYXRlLCByZW5kZXJlciwgX2NlbGxzLCBfY2VsbHMuKikiLCJfc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKF9oZWFkZXJUZW1wbGF0ZSwgaGVhZGVyUmVuZGVyZXIsIF9oZWFkZXJDZWxsKSIsIl9zZXRGb290ZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2Zvb3RlclRlbXBsYXRlLCBmb290ZXJSZW5kZXJlciwgX2Zvb3RlckNlbGwpIiwiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlLCBfaGVhZGVyQ2VsbCkiLCJfcmVvcmRlclN0YXR1c0NoYW5nZWQoX3Jlb3JkZXJTdGF0dXMsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2hpZGRlbkNoYW5nZWQoaGlkZGVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9ib2R5VGVtcGxhdGUmJih0aGlzLl9ib2R5VGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5faGVhZGVyVGVtcGxhdGUmJih0aGlzLl9oZWFkZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9mb290ZXJUZW1wbGF0ZSYmKHRoaXMuX2Zvb3RlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLl9ib2R5VGVtcGxhdGV8fHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuY2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKHI9PntyLl9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQoci5fY29udGVudCl9KX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlJiZyLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoci5fY29udGVudCl9KX0pLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCByPXRoaXM7Zm9yKDtyJiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdChyLmxvY2FsTmFtZSk7KXI9ci5hc3NpZ25lZFNsb3Q/ci5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTpyLnBhcmVudE5vZGU7cmV0dXJuIHJ8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIocj0+cil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHZoKHRoaXMsKCk9Pnt0aGlzLl9oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLl9mb290ZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKSx0aGlzLl9ib2R5VGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpfSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHIsbil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMuX2dyaWQsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkuX2luc3RhbmNlUHJvcHM9bnx8aS5faW5zdGFuY2VQcm9wcyxpLnRlbXBsYXRlPXIsci50ZW1wbGF0aXplcj1pfXJldHVybiByfV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHIsbixpKXtsZXQgbz1bbi5fY29udGVudCx0aGlzXTtpJiZpLml0ZW0mJm8ucHVzaChpKSxyLmFwcGx5KHRoaXMsbyl9X19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpe2lmKCF0aGlzLmhpZGRlbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSIpO2kuZm9yRWFjaChvPT57bGV0IGE9dGhpcy5fZ3JpZC5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCk7aWYobilvLl9yZW5kZXJlcj1uLChhLml0ZW18fG49PT10aGlzLmhlYWRlclJlbmRlcmVyfHxuPT09dGhpcy5mb290ZXJSZW5kZXJlcikmJnRoaXMuX19ydW5SZW5kZXJlcihuLG8sYSk7ZWxzZSBpZihvLl90ZW1wbGF0ZSE9PXIpe28uX3RlbXBsYXRlPXIsby5fY29udGVudC5pbm5lckhUTUw9IiIsci50ZW1wbGF0aXplci5fZ3JpZD1yLnRlbXBsYXRpemVyLl9ncmlkfHx0aGlzLl9ncmlkO2xldCBzPXIudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtvLl9jb250ZW50LmFwcGVuZENoaWxkKHMucm9vdCksby5faW5zdGFuY2U9cyxhLml0ZW0mJm8uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoYSl9fSl9fV9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpfV9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpeyhyfHxuKSYmaSYmdGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKX1fc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJih0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixbaV0pLHRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCkpfV9zZWxlY3RGaXJzdFRlbXBsYXRlKHI9ITEsbj0hMSl7cmV0dXJuIHZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJoZWFkZXIiKT09PXImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb290ZXIiKT09PW4pWzBdfV9maW5kVGVtcGxhdGUocixuKXtsZXQgaT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKHIsbik7cmV0dXJuIGkmJnRoaXMuZGF0YUhvc3QmJihpLl9yb290RGF0YUhvc3Q9dGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0KSxpfV9mbGV4R3Jvd0NoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmbGV4R3JvdyIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5mbGV4R3Jvdz1yKX1fb3JkZXJDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5vcmRlcj1yKX1fd2lkdGhDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUud2lkdGg9ciksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93JiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3coKX1fZnJvemVuQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZyb3plbiIsciksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIscixuKSksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkJiZ0aGlzLl9ncmlkLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX1fbGFzdEZyb3plbkNoYW5nZWQocil7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtZnJvemVuIixyLG4pKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49cil9X3BhdGhPckhlYWRlckNoYW5nZWQocixuLGksbyxhLHMsbCxjLHUpe2xldCBoPW4hPT12b2lkIDA7aWYoIWwmJiF1JiZoJiZpJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCxuKSxyJiZhLnZhbHVlKXtpZighcyYmIWMpe2xldCBmPShwLGQse2l0ZW06Z30pPT50aGlzLl9fc2V0VGV4dENvbnRlbnQocCx0aGlzLmdldChyLGcpKTt0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCxmLGEudmFsdWUpfSFsJiYhdSYmIWgmJmkmJm4hPT1udWxsJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCx0aGlzLl9nZW5lcmF0ZUhlYWRlcihyKSl9aSYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkoaS5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHIsbil7ci50ZXh0Q29udGVudCE9PW4mJihyLnRleHRDb250ZW50PW4pfV9nZW5lcmF0ZUhlYWRlcihyKXtyZXR1cm4gci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sbj0+bi50b1VwcGVyQ2FzZSgpKX1fdG9nZ2xlQXR0cmlidXRlKHIsbixpKXtpLmhhc0F0dHJpYnV0ZShyKT09PSFuJiYobj9pLnNldEF0dHJpYnV0ZShyLCIiKTppLnJlbW92ZUF0dHJpYnV0ZShyKSl9X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIixyKSl9X3Jlc2l6YWJsZUNoYW5nZWQocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHxuJiZbbl0uY29uY2F0KHRoaXMuX2VtcHR5Q2VsbHMpLmZvckVhY2goaT0+e2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3RvcignW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0nKTtpZihvJiZpLnJlbW92ZUNoaWxkKG8pLHIpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGkuYXBwZW5kQ2hpbGQoYSl9fX0pfV90ZXh0QWxpZ25DaGFuZ2VkKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuO2lmKFsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHIpPT09LTEpe2NvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO3JldHVybn1sZXQgbjtnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2dyaWQpLmRpcmVjdGlvbj09PSJsdHIiP3I9PT0ic3RhcnQiP249ImxlZnQiOnI9PT0iZW5kIiYmKG49InJpZ2h0Iik6cj09PSJzdGFydCI/bj0icmlnaHQiOnI9PT0iZW5kIiYmKG49ImxlZnQiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKGk9PntpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1yLGdldENvbXB1dGVkU3R5bGUoaS5fY29udGVudCkudGV4dEFsaWduIT09ciYmKGkuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPW4pfSl9X2hpZGRlbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJoaWRkZW4iLHIpLCEhciE9ISF0aGlzLl9wcmV2aW91c0hpZGRlbiYmdGhpcy5fZ3JpZCYmKHI9PT0hMCYmdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bi5fY29udGVudC5wYXJlbnROb2RlJiZuLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobi5fY29udGVudCl9KSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPXNyLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsTmksKCk9Pnt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlKHRoaXMuX2dyaWQuX2NvbHVtblRyZWUpfSksdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbiYmdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX2dyaWQubm90aWZ5UmVzaXplJiZ0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uJiZ0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpKSx0aGlzLl9wcmV2aW91c0hpZGRlbj1yfX0sZVY9Y2xhc3MgZXh0ZW5kcyBpaHIoWkgobXQpKXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3dpZHRoOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwcHgifSxmbGV4R3Jvdzp7dHlwZTpOdW1iZXIsdmFsdWU6MX0scmVuZGVyZXI6RnVuY3Rpb24scGF0aDp7dHlwZTpTdHJpbmd9LGF1dG9XaWR0aDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm9keVRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2NlbGxzOkFycmF5fX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTt2YXIgb2hyPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KSgpLHJWPWNsYXNzIGV4dGVuZHMgSkgoWEgoJGNlKFdjZShLY2UoR2NlKHR1ZShldWUocnVlKFFjZShvdWUocWNlKEpjZShzdWUoWWNlKFpjZShpdWUobnVlKHRWKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8bmF2aWdhdG9yLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOm9ocn0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbiksdD09PSJkaXIiJiYodGhpcy5fX2lzUlRMPW49PT0icnRsIix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHQ9PnQuY2xpZW50SGVpZ2h0KS5sZW5ndGh9X19pdGVtc1JlY2VpdmVkKCl7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQmJiF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCkmJih0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpfV9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KXt0LmZvckVhY2gocj0+e3Iud2lkdGg9ImF1dG8iLHIuX29yaWdGbGV4R3Jvdz1yLmZsZXhHcm93LHIuZmxleEdyb3c9MH0pLHQuZm9yRWFjaChyPT57ci5fY3VycmVudFdpZHRoPTAsci5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bGV0IGk9bi5vZmZzZXRXaWR0aCsxO3IuX2N1cnJlbnRXaWR0aD1NYXRoLm1heChyLl9jdXJyZW50V2lkdGgsaSl9KX0pLHQuZm9yRWFjaChyPT57ci53aWR0aD1gJHtyLl9jdXJyZW50V2lkdGh9cHhgLHIuZmxleEdyb3c9ci5fb3JpZ0ZsZXhHcm93LHIuX2N1cnJlbnRXaWR0aD12b2lkIDAsci5fb3JpZ0ZsZXhHcm93PXZvaWQgMH0pfXJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl7aWYoISF0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7bGV0IHQ9dGhpcy5fZ2V0Q29sdW1ucygpLmZpbHRlcihyPT4hci5oaWRkZW4mJnIuYXV0b1dpZHRoKTt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KX19X2NyZWF0ZVNjcm9sbGVyUm93cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO2kuc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl91cGRhdGVSb3coaSx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLCJib2R5IiwhMSwhMCksci5wdXNoKGkpfXJldHVybiB0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLmZvckVhY2gobj0+bi5pc0Nvbm5lY3RlZCYmbi5ub3RpZnlQYXRoJiZuLm5vdGlmeVBhdGgoIl9jZWxscy4qIixuLl9jZWxscykpLG1ndCh0aGlzLCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pLHJ9X2dldFJvd1RhcmdldCgpe3JldHVybiB0aGlzLiQuaXRlbXN9X2NyZWF0ZUNlbGwodCl7bGV0IHI9dGhpcy5fY29udGVudEluZGV4PXRoaXMuX2NvbnRlbnRJbmRleCsxfHwwLG49InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iK3IsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsbik7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtvLmlkPW4ucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksby5zZXRBdHRyaWJ1dGUoInJvbGUiLHQ9PT0idGQiPyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIm5hbWUiLG4pLG8uYXBwZW5kQ2hpbGQoYSksby5fY29udGVudD1pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2xldCBzPSgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCEwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKX0pfSksb31fdXBkYXRlUm93KHQscixuLGksbyl7bj1ufHwiYm9keSI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChzPT5zLl92YWNhbnQ9ITApLHQuaW5uZXJIVE1MPSIiLHQuaWQhPT0ic2l6ZXIiJiYodC5oaWRkZW49ITApLHIuZmlsdGVyKHM9PiFzLmhpZGRlbikuZm9yRWFjaCgocyxsLGMpPT57bGV0IHU7aWYobj09PSJib2R5Iil7aWYocy5fY2VsbHM9cy5fY2VsbHN8fFtdLHU9cy5fY2VsbHMuZmlsdGVyKGg9PmguX3ZhY2FudClbMF0sdXx8KHU9dGhpcy5fY3JlYXRlQ2VsbCgidGQiKSxzLl9jZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgYm9keS1jZWxsIiksdC5hcHBlbmRDaGlsZCh1KSxsPT09Yy5sZW5ndGgtMSYmKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpKXt0aGlzLl9kZXRhaWxzQ2VsbHM9dGhpcy5fZGV0YWlsc0NlbGxzfHxbXTtsZXQgaD10aGlzLl9kZXRhaWxzQ2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7dGhpcy5fZGV0YWlsc0NlbGxzLmluZGV4T2YoaCk9PT0tMSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goaCksaC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKGguX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGgpLHQuYXBwZW5kQ2hpbGQoaCksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsaCksaC5fdmFjYW50PSExfXMubm90aWZ5UGF0aCYmIW8mJnMubm90aWZ5UGF0aCgiX2NlbGxzLioiLHMuX2NlbGxzKX1lbHNle2xldCBoPW49PT0iaGVhZGVyIj8idGgiOiJ0ZCI7aXx8cy5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj8odT1zW2BfJHtufUNlbGxgXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHNbYF8ke259Q2VsbGBdPXUpOihzLl9lbXB0eUNlbGxzPXMuX2VtcHR5Q2VsbHN8fFtdLHU9cy5fZW1wdHlDZWxscy5maWx0ZXIoZj0+Zi5fdmFjYW50KVswXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHMuX2VtcHR5Q2VsbHMuaW5kZXhPZih1KT09PS0xJiZzLl9lbXB0eUNlbGxzLnB1c2godSkpLHUuc2V0QXR0cmlidXRlKCJwYXJ0IixgY2VsbCAke259LWNlbGxgKSx0aGlzLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KX11Ll9jb250ZW50LnBhcmVudEVsZW1lbnR8fGEuYXBwZW5kQ2hpbGQodS5fY29udGVudCksdS5fdmFjYW50PSExLHUuX2NvbHVtbj1zfSksdGhpcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl9X191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KHQpe2lmKCF0KXJldHVybjtsZXQgcj1BcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZpbHRlcihuPT57bGV0IGk9bi5fY29sdW1uO2lmKGkuX2VtcHR5Q2VsbHMmJmkuX2VtcHR5Q2VsbHMuaW5kZXhPZihuKT4tMSlyZXR1cm4hMTtpZih0LnBhcmVudEVsZW1lbnQ9PT10aGlzLiQuaGVhZGVyKXtpZihpLmhlYWRlclJlbmRlcmVyfHxpLl9oZWFkZXJUZW1wbGF0ZSlyZXR1cm4hMDtpZihpLmhlYWRlcj09PW51bGwpcmV0dXJuITE7aWYoaS5wYXRofHxpLmhlYWRlciE9PXZvaWQgMClyZXR1cm4hMH1lbHNlIGlmKGkuZm9vdGVyUmVuZGVyZXJ8fGkuX2Zvb3RlclRlbXBsYXRlKXJldHVybiEwfSk7dC5oaWRkZW4hPT0hci5sZW5ndGgmJih0LmhpZGRlbj0hci5sZW5ndGgsdGhpcy5ub3RpZnlSZXNpemUoKSl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LHIpe3RoaXMuX3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsciksdGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QiLHI9PT0wLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgib2RkIixyJTIsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1Jvd2luZGV4KHQsciksdGhpcy5fZ2V0SXRlbShyLHQpKX1fY29sdW1uVHJlZUNoYW5nZWQodCl7dGhpcy5fcmVuZGVyQ29sdW1uVHJlZSh0KSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9X3JlbmRlckNvbHVtblRyZWUodCl7Zm9yKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtyLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZChyKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO24uc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93Iiksbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuZm9vdGVyLmFwcGVuZENoaWxkKG4pfWZvcig7dGhpcy4kLmhlYWRlci5jaGlsZHJlbi5sZW5ndGg+dC5sZW5ndGg7KXRoaXMuJC5oZWFkZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCksdGhpcy4kLmZvb3Rlci5yZW1vdmVDaGlsZCh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkKTtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMS1uXSwiZm9vdGVyIixuPT09MCkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKX1fdXBkYXRlSXRlbSh0LHIpe3QuX2l0ZW09cjtsZXQgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChyKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsciksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpZihpLl9yZW5kZXJlcil7bGV0IG89aS5fY29sdW1ufHx0aGlzO2kuX3JlbmRlcmVyLmNhbGwobyxpLl9jb250ZW50LG8sbil9ZWxzZSBpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCxpLl9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCxpLl9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCxpLl9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCxpLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pLHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cyxtby5hZnRlcigxKSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXt0LmFuaW1hdGlvbk5hbWUuaW5kZXhPZigidmFhZGluLWdyaWQtYXBwZWFyIik9PT0wJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCksdGhpcy4kLnRhYmxlLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9KSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LHIsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hciYmKHI/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISEodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCh0PT57dC5mb3JFYWNoKHI9PnIuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKX0pLHRoaXMuX3VwZGF0ZSgpKX1ub3RpZnlSZXNpemUoKXtzdXBlci5ub3RpZnlSZXNpemUoKX1faGVpZ2h0QnlSb3dzQ2hhbmdlZCh0LHIpeyh0fHxyKSYmdGhpcy5ub3RpZnlSZXNpemUoKX1fX2ZvcmNlUmVmbG93KCl7dGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3c9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3csTmksKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJWLmlzLHJWKTtmdW5jdGlvbiBsdWUoZSx0KXtyZXR1cm4gRGd0KGUsdCl9dmFyIGMxPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQscixuKXtyZXR1cm4gcj9NaShuKHQscikse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQscixuKXtyZXR1cm4gcj9uKHQscik6IiJ9X2Nzdk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uanNvbmA6IiJ9fTtjMS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGMxLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjMS5wcm90b3R5cGUsInVybEZuIix2b2lkIDApO2MxPUUoW3l0KCJ0Zi1kb3dubG9hZGVyIildLGMxKTt2YXIgYWhyPTY0LGdsaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEduPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2lmKG49PW51bGwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIscik7cmV0dXJufWxldCBpPW4ubWFwKGE9Pih7d2FsbF90aW1lOm5ldyBEYXRlKGFbMF0qMWUzKSxzdGVwOmFbMV0sc2NhbGFyOmFbMl19KSksbz10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHIpO3Quc2V0U2VyaWVzTWV0YWRhdGEobyxyKSx0LnNldFNlcmllc0RhdGEobyxpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjpyfSk9Pl9lKCkucGx1Z2luUm91dGVGb3JTcmMoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOnJ9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxyKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOnJ9KSx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LHIsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQscixuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPU1pKG8se3RhZzphLnRhZyxydW46YS5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHMpLnRoZW4obD0+dm9pZCByKHtpdGVtOmEsZGF0YTpsfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LHIsbik9Pnt2YXIgYztsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxhPW5ldyBNYXA7Zm9yKGxldHt0YWc6dSxydW46aH1vZiB0KXtsZXQgZj1hLmdldCh1KTtmPT1udWxsJiZhLnNldCh1LGY9W10pLGYucHVzaChoKX1sZXQgcz0oYz10aGlzLmJhdGNoU2l6ZSkhPW51bGw/YzphaHIsbD1bXTtmb3IobGV0W3UsaF1vZiBhKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7Zis9cylsLnB1c2goe3RhZzp1LHJ1bnM6aC5zbGljZShmLGYrcyl9KTtQcm9taXNlLmFsbChsLm1hcCgoe3RhZzp1LHJ1bnM6aH0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyx7dGFnOnUscnVuczpofSkudGhlbihmPT57Zm9yKGxldCBwIG9mIGgpe2xldCBkPXt0YWc6dSxydW46cH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYscCk/cih7aXRlbTpkLGRhdGE6ZltwXX0pOnIoe2l0ZW06ZCxkYXRhOm51bGx9KX19KSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9aXN0LnNsaWNlKCkscj10LmZpbmRJbmRleChuPT5uLnRpdGxlPT0iTmFtZSIpO3JldHVybiB0LnNwbGljZShyLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT57bGV0IGk9bi5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oaSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe3ZhciBuO2xldCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLmV4cG9ydEFzU3ZnU3RyaW5nKCkscj0obj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDpuLnF1ZXJ5U2VsZWN0b3IoIiNzdmdMaW5rIik7ci5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKHI9PnIucnVuKX1fZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OnI9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3IubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUhPT1udWxsP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2xldFsscl09SlNPTi5wYXJzZSh0KTtyZXR1cm4gZm4ocil9fX19O0duLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19nZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUpXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC1uYW1lPSJbW19nZXREYXRhTG9hZE5hbWVdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIgogICAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249ImF1dG8iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBpY29uPSJmaWxlLWRvd25sb2FkIgogICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPgogICAgICAgICAgICAgIDxhIGlkPSJzdmdMaW5rIiBkb3dubG9hZD0iW1t0YWddXS5zdmciPgogICAgICAgICAgICAgICAgRG93bmxvYWQgQ3VycmVudCBDaGFydCBhcyBTVkcKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLW1lbnUtYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8dGYtZG93bmxvYWRlcgogICAgICAgICAgICBydW5zPSJbW19ydW5zRnJvbURhdGEoZGF0YVRvTG9hZCldXSIKICAgICAgICAgICAgdGFnPSJbW3RhZ11dIgogICAgICAgICAgICB1cmwtZm49IltbX2Rvd25sb2FkVXJsRm5dXSIKICAgICAgICAgID48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sR24ucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEduLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sR24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHbi5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEduLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEduLnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfbG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwicmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR24ucHJvdG90eXBlLCJfbG9nU2NhbGVBY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEduLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0duPUUoW3l0KCJ0Zi1zY2FsYXItY2FyZCIpXSxHbik7dmFyIFZzPWNsYXNzIGV4dGVuZHMgbHVlKFtjV10sbXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fbm9NdWx0aUV4cGVyaW1lbnRzPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntQcm9taXNlLmFsbCh0Lm1hcChpPT57bGV0IG89e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6aS5ydW4sbWV0cmljTmFtZTppLnRhZ307cmV0dXJuIHRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMobykudGhlbihhPT52b2lkIHIoe2l0ZW06aSxkYXRhOmF9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57bGV0IHI9SlNPTi5wYXJzZSh0KVsxXSxuPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChyKSxpPWlSO3JldHVybiBpWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVpLmxlbmd0aF19fX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5yZWRyYXcuYmluZCh0aGlzKSl9cmVkcmF3KCl7dmFyIHQ7KHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2gocj0+e3IucmVkcmF3KCl9KX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3ZhciB0OyF0aGlzLnNlc3Npb25Hcm91cHx8T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD09MD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKHIsbik9PltyLm5hbWUsbl0pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD1kY3QodGhpcy5zZXNzaW9uR3JvdXAubmFtZSkpLCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntsZXQgbj1yLGk9bi5nZXQoInRhZyIpO24uc2V0KCJ0YWciLCIiKSxuLnNldCgidGFnIixpKX0pfV9oYXZlTWV0cmljcygpe3JldHVybiB0aGlzLnZpc2libGVTY2hlbWEmJkFycmF5LmlzQXJyYXkodGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zKSYmdGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wfV9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX1fY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyh0LHIpe3JldHVybiB0PT09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHxyPT09bnVsbD9bXTp0LnNlc3Npb25zLmZpbHRlcihuPT5mMyhuLm1ldHJpY1ZhbHVlcyxyLm5hbWUpIT09dm9pZCAwKS5tYXAobj0+KHt0YWc6ci5uYW1lLHJ1bjpuLm5hbWV9KSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6UXUodCksZGVzY3JpcHRpb246dC5kZXNjcmlwdGlvbnx8IiJ9fX07VnMudGVtcGxhdGU9UWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVnMucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2luZGV4T2ZTZXNzaW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVnMucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3VwLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cENoYW5nZWQiLG51bGwpO1ZzPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIpXSxWcyk7dmFyIEhkPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faHBhcmFtTmFtZT1GZCx0aGlzLl9tZXRyaWNOYW1lPVF1fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2xldCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksY2koKTtsZXQgcj1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKG49PntyLnNldChuLm5hbWUsbil9KSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcChuPT5yLmdldChuLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxyKXtyZXR1cm4gdD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQuaHBhcmFtcyxyKT8iIjpiMCh0LmhwYXJhbXNbcl0pfV9zZXNzaW9uR3JvdXBNZXRyaWModCxyKXtpZih0PT1udWxsfHxPYmplY3Qua2V5cyh0KS5sZW5ndGg9PTApcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1yLmdyb3VwJiZpLm5hbWUudGFnPT1yLnRhZylyZXR1cm4gYjAoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07SGQudGVtcGxhdGU9UWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSGQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIZC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIZC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIZC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhkLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtIZD1FKFt5dCgidGYtaHBhcmFtcy10YWJsZS12aWV3IildLEhkKTt2YXIgQ1A9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LHIpe3JldHVybiB0IT1udWxsJiZyIT09dm9pZCAwJiZyIT09bnVsbH1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gdD09bnVsbD9bXTpbdF19fTtDUC50ZW1wbGF0ZT1RYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0NQPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLENQKTt2YXIgQVA9RWUoT2UoKSwxKTtmdW5jdGlvbiBjdWUoZSx0LHIsbil7aWYodC5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtsZXQgaT1yWzBdLG89clsxXTtpZihpPD10WzBdfHxpPj10W3QubGVuZ3RoLTFdKXJldHVybiBudWxsO2xldCBhPUFQLnNvcnRlZEluZGV4KHQsaSk7Y29uc29sZS5hc3NlcnQoYT4wKSxjb25zb2xlLmFzc2VydChhPHQubGVuZ3RoKTtsZXQgcz1hLTE7ZnVuY3Rpb24gbChoLGYscCxkKXtsZXQgZz1oLXAsXz1mLWQseT1pLXAseD1vLWQsYj0oZyp5K18qeCkvKGcqZytfKl8pO2lmKGI8PTApcmV0dXJuIHAzKHkseCk7aWYoYj49MSl7bGV0IFM9aC1pLEM9Zi1vO3JldHVybiBwMyhTLEMpfXJldHVybiBwMyh5LWIqZyx4LWIqXyl9bGV0IGM9bnVsbCx1PW51bGw7cmV0dXJuIGUuZm9yRWFjaChoPT57bGV0IGY9bChoLmNvbnRyb2xQb2ludHNbc11bMF0saC5jb250cm9sUG9pbnRzW3NdWzFdLGguY29udHJvbFBvaW50c1thXVswXSxoLmNvbnRyb2xQb2ludHNbYV1bMV0pO2Y+bnx8KGM9PT1udWxsfHxmPGMpJiYoYz1mLHU9aCl9KSx1fWZ1bmN0aW9uIHV1ZShlLHQscil7cmV0dXJuIGUuZG9tYWluKCkuZmlsdGVyKG49PntsZXQgaT1lKG4pO3JldHVybiB0PD1pJiZpPD1yfSl9ZnVuY3Rpb24gaHVlKGUsdCxyKXtsZXQgbj1lLnJhbmdlKCksaT1uLmZpbHRlcihvPT50PD1vJiZvPD1yKS5tYXAobz0+e2xldCBhPWUuaW52ZXJ0RXh0ZW50KG8pO3JldHVybiBvPT09bltuLmxlbmd0aC0xXT9bYVswXSxhWzFdKzFdOmF9KTtyZXR1cm4gaS5sZW5ndGg9PTA/WzAsMF06YWEoSW0oaSkpfWZ1bmN0aW9uIGZ1ZShlLHQscil7cmV0dXJuW2UuaW52ZXJ0KHQpLGUuaW52ZXJ0KHIpXS5zb3J0KChuLGkpPT5uLWkpfWZ1bmN0aW9uIEZjdChlLHQscil7ZnVuY3Rpb24gbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5bMSwyXTtsZXRbaSxvXT1hYShlKTtyZXR1cm4gaSE9PW8/W2ksb106aT4wP1tpKi41LGkqMS41XTppPDA/W2kqMS41LGkqLjVdOlstMSwxXX1pZihyPT09IkxJTkVBUiIpcmV0dXJuIE9uKCkuZG9tYWluKG4oKSkucmFuZ2UoW3QsMF0pO2lmKHI9PT0iTE9HIil7bGV0IGk9bigpO3JldHVybiBpWzBdPD0wJiZpWzFdPj0wP0ZjdChlLHQsIkxJTkVBUiIpOmNjKCkuZG9tYWluKGkpLnJhbmdlKFt0LDBdKX1lbHNlIGlmKHI9PT0iUVVBTlRJTEUiKXtsZXQgbz1JcigyMCkubWFwKGE9PnQtYSp0LzE5KTtyZXR1cm4gZS5sZW5ndGg9PT0wJiYoZT1bMV0pLGVnKCkuZG9tYWluKEFQLnVuaXEoZSkpLnJhbmdlKG8pfWVsc2V7aWYocj09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKEFQLnVuaXEoZS5zb3J0KCkpKS5yYW5nZShbdCwwXSkucGFkZGluZyguMSk7dGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBzY2FsZTogIityKX19dmFyIHUxOyhmdW5jdGlvbihlKXtlLkxJTkVBUj0iTElORUFSIixlLkxPRz0iTE9HIixlLlFVQU5USUxFPSJRVUFOVElMRSIsZS5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkodTF8fCh1MT17fSkpO3ZhciBQUD1jbGFzc3tpc1Bhc3NpbmcodCl7cmV0dXJuITB9fSxuVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPXIsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2xldCByPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQscixuKXtyZXR1cm4gbj90PD1yOnQ8cn19LEhjdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb21haW5TZXQ9dH1pc1Bhc3NpbmcodCl7cmV0dXJuIHRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgocj0+cj09PXQpIT09LTF9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bix0aGlzLl9jb2xJbmRleD1pLHRoaXMuX2lzRGlzcGxheWVkPSExLHRoaXMuX3lTY2FsZT1udWxsLHRoaXMuX3NjYWxlVHlwZT1udWxsLHRoaXMuc2V0QnJ1c2hTZWxlY3Rpb24obnVsbCl9Y29sSW5kZXgoKXtyZXR1cm4gdGhpcy5fY29sSW5kZXh9eVNjYWxlKCl7cmV0dXJuIHRoaXMuX3lTY2FsZX1zY2FsZVR5cGUoKXtyZXR1cm4gdGhpcy5fc2NhbGVUeXBlfWJydXNoU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2JydXNoU2VsZWN0aW9ufWlzRGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcGxheWVkfXNldEJydXNoU2VsZWN0aW9uKHQpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXQsdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZSh0LHIpe3RoaXMuX3NjYWxlVHlwZT1yLHRoaXMuX3lTY2FsZT1GY3QodC5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKSx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTSh0KXtsZXQgcj1sYih0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09dTEuUVVBTlRJTEUmJihyPXIudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KHhuKCItLjZnIikpKTtsZXQgbj1IdCh0KTtuLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLG4uYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwocikuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoYT0+Y2N0KHRoaXMuX3NjaGVtYSxhKSksbi5jYWxsKHBiKCkub24oInN0YXJ0IiwoKT0+e3Quc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHF0LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTtsZXQgaT1xTCgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCk9PnshQmN0KHF0KXx8KHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKSl9KS5vbigiYnJ1c2giLCgpPT57IUJjdChxdCl8fHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKX0pLm9uKCJlbmQiLCgpPT57IUJjdChxdCl8fCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbiksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSksbz1IdCh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO28uY2FsbChpKSxpLm1vdmUobyx0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQscixuKXtpZih0PT09bnVsbClyZXR1cm4gbmV3IFBQO2lmKHI9PT1udWxsKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgUFA7c3dpdGNoKHIpe2Nhc2UgdTEuTElORUFSOmNhc2UgdTEuTE9HOntsZXRbaSxvXT1mdWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCExKX1jYXNlIHUxLlFVQU5USUxFOntsZXRbaSxvXT1odWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCEwKX1jYXNlIHUxLk5PTl9OVU1FUklDOnJldHVybiBuZXcgSGN0KHV1ZShuLHRbMF0sdFsxXSkpfXJldHVybiBjb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsciksbmV3IFBQfX0saVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPXRnKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQscil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7bGV0IG49bmV3IFNldDt0LmNvbHVtbnMuZm9yRWFjaChvPT57bGV0IGE9by5hYnNvbHV0ZUluZGV4LHM9dGhpcy5fYXhlc1thXTtzLnNldERpc3BsYXllZCghMCk7bGV0IGw9ci5tYXAoYz0+eDAodGhpcy5fc2NoZW1hLGMsYSkpO3Muc2V0RG9tYWluQW5kU2NhbGUobCxvLnNjYWxlKSxuLmFkZChhKX0pLHRoaXMuX2F4ZXMuZm9yRWFjaChvPT57bi5oYXMoby5jb2xJbmRleCgpKXx8by5zZXREaXNwbGF5ZWQoITEpfSksdGhpcy5fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMobiksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmRhdGEoQXJyYXkuZnJvbShuKSxvPT5vKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2xldCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKG89PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShvKSkuZWFjaChmdW5jdGlvbihvKXtpLl9heGVzW29dLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeShyPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpLHRoaXMuX2F4ZXNbcl0pKX1nZXRBeGlzRm9yQ29sSW5kZXgodCl7cmV0dXJuIHRoaXMuX2F4ZXNbdF19ZHJhZ1N0YXJ0KHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2F4ZXNbdF0uaXNEaXNwbGF5ZWQoKSksdGhpcy5fZHJhZ2dlZEF4aXM9dGhpcy5fYXhlc1t0XSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfWRyYWcodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXQ7bGV0IHI9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCk7ci5zb3J0KChuLGkpPT50aGlzLmdldEF4aXNQb3NpdGlvbihuKS10aGlzLmdldEF4aXNQb3NpdGlvbihpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGx9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGwmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcihpPT50LmhhcyhpKSksbj1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnIsLi4uQXJyYXkuZnJvbSh0KV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4obil9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KXt0LmF0dHIoInRyYW5zZm9ybSIscj0+eVAodGhpcy5nZXRBeGlzUG9zaXRpb24ocikpKX1fY3JlYXRlQXhlcyh0KXtyZXR1cm4gSXIodWN0KHRoaXMuX3NjaGVtYSkpLm1hcChyPT5uZXcgVmN0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LHIpKX19O2Z1bmN0aW9uIEJjdChlKXtyZXR1cm4gZS5zb3VyY2VFdmVudCE9PW51bGx9dmFyIGpmOyhmdW5jdGlvbihlKXtlW2UuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsZVtlLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoamZ8fChqZj17fSkpO3ZhciB0aD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0PT09dm9pZCAwJiYodD1FcChudWxsKSksY29uc29sZS5hc3NlcnQodC5zaXplKCk8PTEpLHRoaXMuX3Nlc3Npb25Hcm91cFNlbD10fXNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpPT09MT90aGlzLl9zZXNzaW9uR3JvdXBTZWwuZGF0dW0oKTpudWxsfWlzTnVsbCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCgpPT09bnVsbH1zZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsfWVxdWFsc1RvKHQpe3ZhciByLG47cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTp0LmlzTnVsbCgpPyExOigocj10LnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6ci5uYW1lKT09KChuPXRoaXMuc2Vzc2lvbkdyb3VwKCkpPT1udWxsP3ZvaWQgMDpuLm5hbWUpfX0sb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlc0NvbGxlY3Rpb249bix0aGlzLl9zZXNzaW9uR3JvdXBzPVtdLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmJhY2tncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5mb3JlZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiZm9yZWdyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB0aCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fZDNsaW5lPXZ1KCkuY3VydmUoWWgpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gdD09bnVsbD9uZXcgdGg6bmV3IHRoKHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKHI9PnIubmFtZT09PXQubmFtZSkpfWhpZGVCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKX1zaG93QmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IixudWxsKX1wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlfXNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlfXJlY29tcHV0ZUNvbnRyb2xQb2ludHModCxyPTApeyh0PT09amYuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyKS5hdHRyKCJkIixpPT50aGlzLl9wYXRoREF0dHJpYnV0ZShpKSksdD09PWpmLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IGk9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goZnVuY3Rpb24obyl7aS5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsbyl9KX0pfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIix0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KChyLG4pPT5uLmJydXNoRmlsdGVyKCkuaXNQYXNzaW5nKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKX1zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcih0LHIsbil7bGV0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxyLG4saSl7bGV0IG89dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLGE9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGEpLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCksdGhpcy5zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcihyLG4saSl9dXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITEpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITApfWNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCl7dGhpcy51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAobmV3IHRoKX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKXtsZXQgbj10aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygobyxhKT0+byksaT1jdWUodGhpcy5fdmlzaWJsZUZnUGF0aHNTZWwubm9kZXMoKSxuLFt0LHJdLDEwMCk7cmV0dXJuIGk9PT1udWxsP25ldyB0aDpuZXcgdGgoSHQoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuKCk9PiJyZWQiO2xldCBpPU9uKCkuZG9tYWluKGhjdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW3Isbl0pLmludGVycG9sYXRlKE1fKTtyZXR1cm4gbz0+aSh4MCh0aGlzLl9zY2hlbWEsbyx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuIHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMscj0+ci5uYW1lKSx0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UodCl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0LHIpe3QuY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhyKX1fY29tcHV0ZUNvbnRyb2xQb2ludHModCl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChyLG4pPT5bcixuLnlTY2FsZSgpKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSl9X3BhdGhEQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLl9kM2xpbmUodGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHModCkpfV91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpe3RoaXMuX3Zpc2libGVGZ1BhdGhzU2VsPXRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19O3ZhciBhVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuc3ZnPUh0KHQpO2xldCBuPXt0b3A6MzAscmlnaHQ6MTAsYm90dG9tOjEwLGxlZnQ6MTB9LGk9MTAwLG89MjAwLGE9cippK24ubGVmdCtuLnJpZ2h0LHM9bytuLnRvcCtuLmJvdHRvbTt0aGlzLnN2Zy5hdHRyKCJ2aWV3Qm94IixgMCAwICR7YX0gJHtzfWApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGErInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLHMrInB4IiksdGhpcy53aWR0aD1hLW4ubGVmdC1uLnJpZ2h0LHRoaXMuaGVpZ2h0PXMtbi50b3Atbi5ib3R0b20sdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseVAobi5sZWZ0LG4udG9wKSl9fSxzVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGlWKHQscix0aGlzKSx0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IG9WKHQscix0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57bGV0W28sYV09em8odGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKG8sYSl9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydCh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKHIpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQscil7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyB0aCk6dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodCxyKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKHQscik7bGV0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhyLHQuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwP3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fTt2YXIgZWg9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5yZWRyYXdDb3VudD0wfV9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3ZhciBuO2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuO2xldHtjb25maWd1cmF0aW9uOnR9PShuPXRoaXMuX3ByZXZPcHRpb25zKSE9bnVsbD9uOnt9LHtjb25maWd1cmF0aW9uOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9PT12b2lkIDB8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LnNjaGVtYSxyLnNjaGVtYSl8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LmNvbHVtbnNWaXNpYmlsaXR5LHIuY29sdW1uc1Zpc2liaWxpdHkpKXtIdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgaT1uZXcgYVYodGhpcy4kLnN2ZyxyLmNvbHVtbnNWaXNpYmlsaXR5LmZpbHRlcihCb29sZWFuKS5sZW5ndGgpO3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uZXcgc1YoaSxyLnNjaGVtYSxvPT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pLG89PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7bGV0IHQ9Y3M7aWYodGhpcy5zZXNzaW9uR3JvdXBzPT09dm9pZCAwKXt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO3JldHVybn1sZXQgcj10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5zY2hlbWE7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXRoaXMuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKHIpOysraSl7aWYoIXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldKWNvbnRpbnVlO2xldCBvPXQuY29sdW1uVmFsdWVCeUluZGV4KHIsbixpKTtpZihvPT09dm9pZCAwfHxvPT09Ik5hTiIpcmV0dXJuITF9cmV0dXJuITB9KX19O2VoLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxlaC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZWgucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCk7RShbQnQoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZWgucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO2VoPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLGVoKTt2YXIgQTA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEscj10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLG49KGEscyk9Pih7bmFtZTpGZChhKSxpbmRleDpzLGFic29sdXRlSW5kZXg6ekgocix0LHMpLHNjYWxlOnRoaXMuX2lzTnVtZXJpY0NvbHVtbihzKT8iTElORUFSIjoiTk9OX05VTUVSSUMifSksaT0oYSxzKT0+e2xldCBsPXMrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6UXUoYSksaW5kZXg6bCxhYnNvbHV0ZUluZGV4OnpIKHIsdCxsKX19LG89e2NvbHVtbnM6dC5ocGFyYW1JbmZvcy5tYXAobikuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKGkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbyksY2koKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXt0aGlzLm9wdGlvbnMhPT1udWxsJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHQ9PntsZXQgcj0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDshdGhpcy5fYWxsb3dMb2dTY2FsZSh0KSYmdC5zY2FsZT09PSJMT0ciJiZ0aGlzLnNldChyKyIuc2NhbGUiLCJMSU5FQVIiKX0pfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7bGV0W3Isbl09X1AodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiByPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW3RdLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQifV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtsZXQgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgocj0+ci50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0Iik7aWYodCE9PS0xKXJldHVybiB0fX07QTAudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQTAucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBMC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtCdCgiY29uZmlndXJhdGlvbi4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxBMC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCk7QTA9RShbeXQoInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLEEwKTt2YXIgaDE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07aDEudGVtcGxhdGU9UWAKICAgIDwhLS0gQ29udHJvbHMgYmVoYXZpb3Igb2YgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdAogICAgICAgICBvdXRwdXRzIHNldCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4KICAgICAgLS0+CiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBUaGUgc2NhbGUgYW5kIGNvbG9yIGNvbnRyb2xzLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdCAtLT4KICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QKICAgICAgICBpZD0icGxvdCIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iCiAgICAgICAgY2xvc2VzdC1zZXNzaW9uLWdyb3VwPSJ7e19jbG9zZXN0R3JvdXB9fSIKICAgICAgICBvcHRpb25zPSJbW19vcHRpb25zXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIGlkPSJ2YWx1ZXMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGgxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxoMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7aDE9RShbeXQoInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0saDEpO3ZhciB5Mz1FZShPZSgpLDEpO3ZhciAkbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9SHQodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPWZjdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57bGV0IHQ9Y3Mscj0xMjAwLG49LjQqcixpPTE1MCxvPS43NSppO3RoaXMud2lkdGg9TWF0aC5tYXgoaSp0Lm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksciksdGhpcy5oZWlnaHQ9TWF0aC5tYXgobyp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksbiksdGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KSx0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksdGhpcy5fZHJhdygpfSwxMDApfV9kcmF3KCl7bGV0IHQ9Y3Mscj10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fHRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGg9PTB8fCF0aGlzLnZpc2libGVTY2hlbWF8fHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg9PTApcmV0dXJuO2xldCBuPUlyKHQubnVtVmlzaWJsZUNvbHVtbnMoci52aXNpYmxlU2NoZW1hKSksaT1Jcih0Lm51bVZpc2libGVNZXRyaWNzKHIudmlzaWJsZVNjaGVtYSkpLG89ODAsYT01MCxzPTUsbD1RbSgpLmRvbWFpbihuKS5yYW5nZShbbytzLHRoaXMud2lkdGgtMS1zXSkucGFkZGluZ0lubmVyKC4xKSxjPVFtKCkuZG9tYWluKGkpLnJhbmdlKFt0aGlzLmhlaWdodC0xLXMtYSxzXSkucGFkZGluZ0lubmVyKC4xKSx1PWwuYmFuZHdpZHRoKCksaD1jLmJhbmR3aWR0aCgpLGY9bi5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCxbMCx1LTFdKSkscD1pLm1hcChjdD0+ci5fY2VsbFNjYWxlKGN0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKSxbaC0xLDBdKSksZD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKGwoY3QpLDApKTtmdW5jdGlvbiBnKGN0KXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIF8oY3Qpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2N0fWQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixnKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0LWEvMiksZC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLF8pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHIuaGVpZ2h0LWEvMikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsYS8yKSxkLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrZyhjdCkrIikiKS5lYWNoKGZ1bmN0aW9uKGN0KXtIdCh0aGlzKS5jYWxsKFMsWjkoZltjdF0pLnRpY2tTaXplKHIuaGVpZ2h0LWEpLHUsNDAsci5vcHRpb25zLmNvbHVtbnNbY3RdLnNjYWxlKX0pLGQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIitfKGN0KSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsdS8yKS5hdHRyKCJ5IixyLmhlaWdodC0xLWEvNCkudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKS5hcHBlbmQoInRpdGxlIikudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKTtsZXQgeT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKHIud2lkdGgtMSxjKGN0KSkpO2Z1bmN0aW9uIHgoY3Qpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrY3R9ZnVuY3Rpb24gYihjdCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrY3R9eS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oci53aWR0aC1vLzItMSkpLmF0dHIoInkiLC1zKS5hdHRyKCJ3aWR0aCIsci53aWR0aC1vLzIpLmF0dHIoImhlaWdodCIsaCsyKnMpLHkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixiKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixvLzIpLmF0dHIoImhlaWdodCIsaCkseS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK3goY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLGxiKHBbY3RdKS50aWNrU2l6ZShyLndpZHRoLW8pLGgsMjAsci5vcHRpb25zLmNvbHVtbnNbY3QrdC5udW1WaXNpYmxlSFBhcmFtcyhyLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSx5LmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrYihjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oci53aWR0aC1vLzQtMSkpLmF0dHIoInkiLGgvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKHIud2lkdGgtby80LTEpLGgvMikpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSk7ZnVuY3Rpb24gUyhjdCxYLGV0LGR0LHEpe2xldCBwdD1NYXRoLmZsb29yKGV0L2R0KSxodD1YLnNjYWxlKCk7aWYocT09PSJRVUFOVElMRSIpe2xldCB3dD1odC5xdWFudGlsZXMoKSxrdD1NYXRoLmNlaWwod3QubGVuZ3RoL3B0KTt3dD1JcigwLHd0Lmxlbmd0aCxrdCkubWFwKGllPT53dFtpZV0pLFgudGlja1ZhbHVlcyh3dCkudGlja0Zvcm1hdCh4bigiLS4yZyIpKX0ocT09PSJMSU5FQVIifHxxPT09IkxPRyIpJiZYLnRpY2tzKHB0KSxjdC5jYWxsKFgpLGN0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLGN0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1sZXQgQz10aGlzLl9zdmcuc2VsZWN0QWxsKCIuY2VsbCIpLmRhdGEocTkobixpKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjZWxsIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoW2N0LFhdKT0+dC50cmFuc2xhdGVTdHIobChjdCksYyhYKSkpLFA9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC1zKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLGgrMipzKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksaz1udWxsO3Iub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXghPT12b2lkIDAmJihrPU9uKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShNXykpO2xldCBPPXIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg9PT12b2lkIDA/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmN0fSk9PmsodGhpcy5fY29sVmFsdWUoY3Qsci5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpO2Z1bmN0aW9uIEQoY3QsWCl7cmV0dXJuIGZbWF0oci5fY29sVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEIoY3QsWCl7cmV0dXJuIHBbWF0oci5fbWV0cmljVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEkoY3QsWCl7bGV0IGV0PWN0LnNlbGVjdEFsbCgiLmRhdGEtbWFya2VyIikuZGF0YSgoW3B0LGh0XSk9PnIuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIod3Q9PnIuX2NvbFZhbHVlKHd0LHB0KSE9PXZvaWQgMCYmci5fbWV0cmljVmFsdWUod3QsaHQpIT09dm9pZCAwKS5tYXAod3Q9Pih7Y29sOnB0LG1ldHJpYzpodCxzZXNzaW9uR3JvdXA6d3QseDpEKHd0LHB0KSx5OkIod3QsaHQpLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImRhdGEtbWFya2VyIiwhMCkuYXR0cigiY3giLCh7eDpwdH0pPT5wdCkuYXR0cigiY3kiLCh7eTpwdH0pPT5wdCkuYXR0cigiciIsMikuYXR0cigiZmlsbCIsWCksZHQ9bmV3IE1hcDtyLnNlc3Npb25Hcm91cHMuZm9yRWFjaChwdD0+e2R0LnNldChwdCxbXSl9KSxldC5lYWNoKGZ1bmN0aW9uKHB0KXt2YXIgaHQ7KGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApKT09bnVsbHx8aHQucHVzaCh0aGlzKX0pLGV0LmVhY2gocHQ9PntsZXQgaHQ9ZHQuZ2V0KHB0LnNlc3Npb25Hcm91cCk7cHQuc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGh0KX0pO2xldCBxPW4ubWFwKHB0PT5pLm1hcChodD0+ZXQuZmlsdGVyKHd0PT53dC5jb2w9PXB0JiZ3dC5tZXRyaWM9PWh0KSkpO3JldHVybltldCxxLGR0XX1sZXRbTCxSLEZdPUkoQy5hcHBlbmQoImciKSxPKTtmdW5jdGlvbiB6KGN0LFgpe2xldCBldD1bXTtyZXR1cm4gUltjdF1bWF0uZWFjaChmdW5jdGlvbigpe2V0LnB1c2godGhpcyl9KSx6aCgpLngoZHQ9Pkh0KGR0KS5kYXR1bSgpLngpLnkoZHQ9Pkh0KGR0KS5kYXR1bSgpLnkpLmFkZEFsbChldCl9bGV0IFU9bi5tYXAoY3Q9PmkubWFwKFg9PnooY3QsWCkpKSxXPW51bGw7YnQoKSYmKFc9Qy5maWx0ZXIoY3Q9PnkzLmlzRXF1YWwoY3Qsci5fYnJ1c2hlZENlbGxJbmRleCkpLGNvbnNvbGUuYXNzZXJ0KFcuc2l6ZSgpPT0xLFcpKTtsZXQgWj1uZXcgU2V0KEwubm9kZXMoKSk7cnQoKTtmdW5jdGlvbiBydCgpe2xldCBjdD1uZXcgU2V0KEwubm9kZXMoKSk7TXQoKXx8KGN0PW90KHIuX2JydXNoZWRDZWxsSW5kZXgsci5fYnJ1c2hTZWxlY3Rpb24pKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KGN0LFg9PiFaLmhhcyhYKSkpKS5hdHRyKCJmaWxsIixPKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KFosWD0+IWN0LmhhcyhYKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLFo9Y3R9ZnVuY3Rpb24gb3QoY3QsWCl7Y29uc29sZS5hc3NlcnQoY3QhPT1udWxsKSxjb25zb2xlLmFzc2VydChYIT09bnVsbCk7bGV0W2V0LGR0XT1jdCxxPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChVW2V0XVtkdF0sWFswXVswXSxYWzBdWzFdLFhbMV1bMF0sWFsxXVsxXSxwdD0+e0h0KHB0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCh3dD0+e3EuYWRkKHd0KX0pfSkscX1sZXQgc3Q9R0woKS5leHRlbnQoW1stcysxLC1zKzFdLFt1LTErcy0xLGgtMStzLTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe2J0KCkmJlcubm9kZSgpIT10aGlzJiZzdC5tb3ZlKFcsbnVsbCksU3QodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7U3QodGhpcyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1N0KHRoaXMpfSk7ZnVuY3Rpb24gU3QoY3Qpe2xldCBYPVVMKGN0KTshYnQoKSYmWD09PW51bGx8fGJ0KCkmJmN0PT09Vy5ub2RlKCkmJnkzLmlzRXF1YWwoWCxyLl9icnVzaFNlbGVjdGlvbil8fChyLl9icnVzaFNlbGVjdGlvbj1YLFghPT1udWxsPyhXPUh0KGN0KSxyLl9icnVzaGVkQ2VsbEluZGV4PVcuZGF0dW0oKSk6KFc9bnVsbCxyLl9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHJ0KCkpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHIuX2JydXNoZWRDZWxsSW5kZXghPT1udWxsJiZyLl9icnVzaFNlbGVjdGlvbiE9PW51bGx9ZnVuY3Rpb24gTXQoKXtyZXR1cm4hYnQoKXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMF09PT1yLl9icnVzaFNlbGVjdGlvblsxXVswXXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMV09PT1yLl9icnVzaFNlbGVjdGlvblsxXVsxXX1DLmNhbGwoc3QpLGJ0KCkmJnN0Lm1vdmUoVyxyLl9icnVzaFNlbGVjdGlvbik7bGV0IGx0PW51bGwsS3Q9bnVsbDt0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwIT09bnVsbCYmKEt0PUVwKEYuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSksQy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IGN0PWx0PT09S3Q/bnVsbDpsdDtpZihjdD09PUt0KXJldHVybjtLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITEpLEt0PWN0LEt0IT09bnVsbCYmS3QuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCk7bGV0IFg9S3Q9PT1udWxsP251bGw6S3QuZGF0dW0oKS5zZXNzaW9uR3JvdXA7ci5zZWxlY3RlZFNlc3Npb25Hcm91cD1YfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbY3QsWF0pe2xldFtldCxkdF09em8odGhpcykscT1fdChjdCxYLGV0LGR0LDIwKTtsdCE9PXEmJihsdCE9PW51bGwmJmx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksbHQ9cSxsdCE9PW51bGw/KGx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMCksci5jbG9zZXN0U2Vzc2lvbkdyb3VwPWx0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwKTpyLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oW2N0LFhdKXtsdCE9PW51bGwmJihsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PW51bGwsci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSk7ZnVuY3Rpb24gX3QoY3QsWCxldCxkdCxxKXtsZXQgcHQ9MS8wLGh0PW51bGw7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhVW2N0XVtYXSxldCxkdCxxLCh3dCxrdCk9PntpZihaLmhhcyh3dCkmJmt0PHB0KXtsZXQgaWU9SHQod3QpLmRhdHVtKCk7cHQ9a3QsaHQ9aWUuc2Vzc2lvbkdyb3VwfX0pLGh0PT09bnVsbD9udWxsOkVwKEYuZ2V0KGh0KSl9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LHIpe2xldCBuPXRoaXMuX2NvbEV4dGVudCh0KSxpPU9uKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxJTkVBUiIpcmV0dXJuIGk7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTE9HIilyZXR1cm4gblswXTw9MCYmblsxXT49MD9pOmNjKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IlFVQU5USUxFIil7bGV0IG89KHJbMV0tclswXSkvMTksYT1JcigyMCkubWFwKHM9PnJbMF0rbypzKTtyZXR1cm4gZWcoKS5kb21haW4oeTMudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKHM9PnRoaXMuX2NvbFZhbHVlKHMsdCkpKSkucmFuZ2UoYSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChvPT50aGlzLl9jb2xWYWx1ZShvLHQpKS5zb3J0KCkpKS5yYW5nZShyKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc319X2NvbFZhbHVlKHQscil7cmV0dXJuIEJIKHRoaXMudmlzaWJsZVNjaGVtYSx0LHIpfV9tZXRyaWNWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fY29sRXh0ZW50KHQpe3JldHVybiBfUCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQpfX07JG8udGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkby5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSwkby5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfc3ZnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sJG8ucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hlZENlbGxJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInZpc2libGVTY2hlbWEuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpO0UoW0J0KCJvcHRpb25zLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCk7JG89RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLCRvKTt2YXIgZjE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07ZjEudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZjEucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGYxLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtmMT1FKFt5dCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciKV0sZjEpO3ZhciBYZj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zZWxlY3RlZFRhYj0wLHRoaXMuX3RhYmxlVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlRhYmxlIil9LHRoaXMuX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlBhcmFsbGVsIENvb3JkcyIpfSx0aGlzLl9zY2F0dGVyUGxvdE1hdHJpeFRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJTY2F0dGVyIFBsb3QgTWF0cml4Iil9LHRoaXMubG9nQWN0aW9uPSh0LHIpPT57KHdpbmRvdy5nYXx8ZnVuY3Rpb24oKXt9KSgic2VuZCIse2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJIUGFyYW1zIixldmVudEFjdGlvbjp0LGV2ZW50TGFiZWw6cn0pfSx0aGlzLmxvZ0FjdGlvbigiUGx1Z2luIExvYWQiKX19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIG9uLWNsaWNrPSJfdGFibGVUYWJDbGlja2VkIiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfcGFyYWxsZWxDb29yZHNUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyIKICAgICAgICAgID4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWGYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFhmLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWGYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFhmLnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApO1hmPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxYZik7dmFyIHJoPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07cmgudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dD4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgPHRmLWhwYXJhbXMtcXVlcnktcGFuZQogICAgICAgICAgaWQ9InF1ZXJ5LXBhbmUiCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IgogICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtbm9uLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1xdWVyeS1wYW5lPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhwYXJhbXMgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhwYXJhbXMgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgRXZlbnQgZmlsZXMgYXJlIHN0aWxsIGJlaW5nIGxvYWRlZCAodHJ5IHJlbG9hZGluZyB0aGlzIHBhZ2UpLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZQogICAgICAgICAgICBpZD0ic2Vzc2lvbnMtcGFuZSIKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIKICAgICAgICAgICAgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIGhwYXJhbXMtc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsdTMpXSxyaC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scmgucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scmgucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7cmg9RShbeXQoInRmLWhwYXJhbXMtbWFpbiIpXSxyaCk7dmFyIGxocj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgidGVuc29yYm9hcmRDb2xhYiIpPT09InRydWUiLGxWPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9iYWNrZW5kPW5ldyB1MyhuZXcgQWUsbGhyKX1yZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX07bFYudGVtcGxhdGU9UWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsVi5wcm90b3R5cGUsIl9iYWNrZW5kIix2b2lkIDApO2xWPUUoW3l0KCJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIpXSxsVik7dmFyIHAxPUVlKE9lKCksMSk7dmFyIF9uPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdHVhbFNpemU9ITEsdGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudD0uNSx0aGlzLmNvbnRyYXN0UGVyY2VudGFnZT0wLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9pbWFnZUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5fc3RlcHM9W10sdGhpcy5faXNJbWFnZUxvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1nZXQgX2hhc0F0TGVhc3RPbmVTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfWdldCBfaGFzTXVsdGlwbGVTdGVwcygpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiB0Lmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy5vZlNhbXBsZXM7cmV0dXJuIHQ+MX1fZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxyPV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiLHQpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsdC53YWxsX3RpbWUpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiLHIpO3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUodC53YWxsX3RpbWUqMWUzKSxzdGVwOnQuc3RlcCx1cmw6bn19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAscj10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2xldCBpPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKSxpLm9ubG9hZD1pLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUobz0+e2lmKG8uY2FuY2VsbGVkKXJldHVybjtsZXQgYT10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKTthJiYoYS50ZXh0Q29udGVudD0iIix6dChhKS5hcHBlbmRDaGlsZChpKSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkuYmluZCh0aGlzKSxpLnN0eWxlLmZpbHRlcj1gY29udHJhc3QoJHtufSUpIGAsaS5zdHlsZS5maWx0ZXIrPWBicmlnaHRuZXNzKCR7cn0pYCx0aGlzLnNldCgiX2lzSW1hZ2VMb2FkaW5nIiwhMCksaS5zcmM9dC51cmx9X2hhbmRsZVRhcCh0KXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9X3RvTG9jYWxlU3RyaW5nKHQpe3JldHVybiB0LnRvTG9jYWxlU3RyaW5nKCl9fTtfbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJvZlNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxfbi5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxfbi5wcm90b3R5cGUsImNvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLF9uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfaW1hZ2VDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxfbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJfaXNJbWFnZUxvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJzYW1wbGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKTtFKFtSdCgib2ZTYW1wbGVzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU2FtcGxlcyIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAiLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsImNvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJfdXBkYXRlSW1hZ2VVcmwiLG51bGwpO19uPUUoW3l0KCJ0Zi1pbWFnZS1sb2FkZXIiKV0sX24pO3ZhciBJbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWV9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihwMS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cDEubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSW1hZ2VzKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3ZhciB0PXRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50O3JldHVybiB0PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U7cmV0dXJuIHQ9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtsZXQgbz1wMS5tYXBWYWx1ZXModCxjPT5PYmplY3Qua2V5cyhjKSksYT1RbChvLHIsbik7ZnVuY3Rpb24gcyhjKXtsZXQgdT10W2MucnVuXVtjLnRhZ10uc2FtcGxlcztyZXR1cm4gcDEucmFuZ2UodSkubWFwKGg9Pk9iamVjdC5hc3NpZ24oe30sYyx7c2FtcGxlOmgsb2ZTYW1wbGVzOnV9KSl9cmV0dXJuIGEubWFwKGM9Pk9iamVjdC5hc3NpZ24oe30sYyx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGMuaXRlbXMubWFwKHMpKX0pKX1fdGFnTWV0YWRhdGEodCxyLG4pe3JldHVybiB0W3JdW25dfX07SW8udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9hY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2JyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9icmlnaHRuZXNzQWRqdXN0bWVudCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKTtFKFtSdCgiX2NvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLElvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0lvPUUoW3l0KCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sSW8pO3ZhciBzeD1FZShPZSgpLDEpO3ZhciBkMTsoZnVuY3Rpb24oZSl7ZVtlLkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKGQxfHwoZDE9e30pKTt2YXIgY1Y7KGZ1bmN0aW9uKGUpe2VbZS5WRVJURVg9MV09IlZFUlRFWCIsZVtlLkZBQ0U9Ml09IkZBQ0UiLGVbZS5DT0xPUj0zXT0iQ09MT1IifSkoY1Z8fChjVj17fSkpO3ZhciBxY3Q7KGZ1bmN0aW9uKGUpe2UuVkVSVEVYPSJmbG9hdDMyIixlLkZBQ0U9ImludDMyIixlLkNPTE9SPSJ1aW50OCJ9KShxY3R8fChxY3Q9e30pKTt2YXIgSVA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LHIsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQscixuKX1fZmV0Y2hEYXRhQnlTdGVwKHQscixuLGksbyxhKXtsZXQgcz1fZSgpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcobyl9KSksbD1mdW5jdGlvbih1KXtsZXQgZj1bXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoLzM7cCsrKXtsZXQgZD1bXTtmb3IobGV0IGc9MDtnPDM7ZysrKWQucHVzaCh1W3AqMytnXSk7Zi5wdXNoKGQpfXJldHVybiBmfSxjPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh1PT57aWYodS5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO2xldCBoPXUudmFsdWU7c3dpdGNoKG4pe2Nhc2UiVkVSVEVYIjphLnZlcnRpY2VzPWwobmV3IEZsb2F0MzJBcnJheShoKSk7YnJlYWs7Y2FzZSJGQUNFIjphLmZhY2VzPWwobmV3IEludDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiQ09MT1IiOmEuY29sb3JzPWwobmV3IFVpbnQ4QXJyYXkoaCkpO2JyZWFrfXJldHVybiBhfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKHMse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpxY3Rbbl19fSkudGhlbih1PT51LmFycmF5QnVmZmVyKCkpLnRoZW4oYyl9ZmV0Y2hEYXRhKHQscixuLGkpe2xldCBvPVtdLGE9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoY1YpLmZvckVhY2gocz0+e2xldCBsPTE8PGNWW3NdO3QuY29tcG9uZW50cyZsJiZvLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKHIsbixzLGksdC5zdGVwLGEpKX0pLFByb21pc2UuYWxsKG8pfV9mZXRjaE1ldGFkYXRhKHQscixuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IGk9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LHNhbXBsZTpufSkpLG89dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PmEuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pOmEudmFsdWUpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKGE9PmEuanNvbigpKS50aGVuKG8pLnRoZW4odGhpcy5fcHJvY2Vzc01ldGFkYXRhLmJpbmQodGhpcykpfV9wcm9jZXNzTWV0YWRhdGEodCl7aWYoIXQpcmV0dXJuO2xldCByPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV07ci5oYXMoby5zdGVwKXx8ci5zZXQoby5zdGVwLFtdKSxyLmdldChvLnN0ZXApLnB1c2gobyl9bGV0IG49W107cmV0dXJuIHIuZm9yRWFjaChpPT57bGV0IG89dGhpcy5fY3JlYXRlU3RlcERhdHVtKGlbMF0pO24ucHVzaChvKX0pLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fTt2YXIgd009e307S3Mod00se0FDRVNGaWxtaWNUb25lTWFwcGluZzooKT0+Y2ZlLEFkZEVxdWF0aW9uOigpPT5NMSxBZGRPcGVyYXRpb246KCk9Pm9mZSxBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTooKT0+a2h0LEFkZGl0aXZlQmxlbmRpbmc6KCk9Pk11dCxBbHBoYUZvcm1hdDooKT0+Z2ZlLEFsd2F5c0RlcHRoOigpPT5KaGUsQWx3YXlzU3RlbmNpbEZ1bmM6KCk9PmtmZSxBbWJpZW50TGlnaHQ6KCk9Pkw2LEFtYmllbnRMaWdodFByb2JlOigpPT56VSxBbmltYXRpb25DbGlwOigpPT5RMSxBbmltYXRpb25Mb2FkZXI6KCk9Pm9odCxBbmltYXRpb25NaXhlcjooKT0+VlUsQW5pbWF0aW9uT2JqZWN0R3JvdXA6KCk9PkhVLEFuaW1hdGlvblV0aWxzOigpPT5ZbixBcmNDdXJ2ZTooKT0+bDYsQXJyYXlDYW1lcmE6KCk9Pm42LEFycm93SGVscGVyOigpPT5NaHQsQXVkaW86KCk9PkQ2LEF1ZGlvQW5hbHlzZXI6KCk9PkZVLEF1ZGlvQ29udGV4dDooKT0+emh0LEF1ZGlvTGlzdGVuZXI6KCk9PmNodCxBdWRpb0xvYWRlcjooKT0+RFUsQXhlc0hlbHBlcjooKT0+dk0sQXhpc0hlbHBlcjooKT0+VzByLEJhY2tTaWRlOigpPT5JaSxCYXNpY0RlcHRoUGFja2luZzooKT0+UGZlLEJhc2ljU2hhZG93TWFwOigpPT51aHIsQmluYXJ5VGV4dHVyZUxvYWRlcjooKT0+SzByLEJvbmU6KCk9PnNNLEJvb2xlYW5LZXlmcmFtZVRyYWNrOigpPT5hbSxCb3VuZGluZ0JveEhlbHBlcjooKT0+WTByLEJveDI6KCk9PiQwLEJveDM6KCk9PnRhLEJveDNIZWxwZXI6KCk9PndodCxCb3hCdWZmZXJHZW9tZXRyeTooKT0+UWYsQm94R2VvbWV0cnk6KCk9PlFmLEJveEhlbHBlcjooKT0+eU0sQnVmZmVyQXR0cmlidXRlOigpPT5KZSxCdWZmZXJHZW9tZXRyeTooKT0+UGUsQnVmZmVyR2VvbWV0cnlMb2FkZXI6KCk9PlJVLEJ5dGVUeXBlOigpPT5oZmUsQ2FjaGU6KCk9PnR4LENhbWVyYTooKT0+UjEsQ2FtZXJhSGVscGVyOigpPT5iaHQsQ2FudmFzUmVuZGVyZXI6KCk9PkowcixDYW52YXNUZXh0dXJlOigpPT54VSxDYXRtdWxsUm9tQ3VydmUzOigpPT5jNixDaW5lb25Ub25lTWFwcGluZzooKT0+bGZlLENpcmNsZUJ1ZmZlckdlb21ldHJ5OigpPT5GMSxDaXJjbGVHZW9tZXRyeTooKT0+RjEsQ2xhbXBUb0VkZ2VXcmFwcGluZzooKT0+Sm8sQ2xvY2s6KCk9Pm1NLENvbG9yOigpPT5uZSxDb2xvcktleWZyYW1lVHJhY2s6KCk9Pk02LENvbXByZXNzZWRUZXh0dXJlOigpPT5hNixDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjooKT0+YWh0LENvbmVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ29uZUdlb21ldHJ5OigpPT5CMSxDdWJlQ2FtZXJhOigpPT5KMyxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6KCk9Pm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzooKT0+aXgsQ3ViZVRleHR1cmU6KCk9PkgwLEN1YmVUZXh0dXJlTG9hZGVyOigpPT5UVSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzooKT0+eE0sQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pno2LEN1YmljQmV6aWVyQ3VydmU6KCk9PmNNLEN1YmljQmV6aWVyQ3VydmUzOigpPT51NixDdWJpY0ludGVycG9sYW50OigpPT5TVSxDdWxsRmFjZUJhY2s6KCk9PlN1dCxDdWxsRmFjZUZyb250OigpPT56aGUsQ3VsbEZhY2VGcm9udEJhY2s6KCk9PmNocixDdWxsRmFjZU5vbmU6KCk9Pk9oZSxDdXJ2ZTooKT0+ZnMsQ3VydmVQYXRoOigpPT53VSxDdXN0b21CbGVuZGluZzooKT0+QmhlLEN1c3RvbVRvbmVNYXBwaW5nOigpPT51ZmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kcmljYWw6KCk9Pm1odCxEYXRhVGV4dHVyZTooKT0+SmQsRGF0YVRleHR1cmUyREFycmF5OigpPT50TSxEYXRhVGV4dHVyZTNEOigpPT5yNixEYXRhVGV4dHVyZUxvYWRlcjooKT0+Q1UsRGF0YVV0aWxzOigpPT5UaHQsRGVjcmVtZW50U3RlbmNpbE9wOigpPT5iaHIsRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDooKT0+U2hyLERlZmF1bHRMb2FkaW5nTWFuYWdlcjooKT0+dHBlLERlcHRoRm9ybWF0OigpPT56MCxEZXB0aFN0ZW5jaWxGb3JtYXQ6KCk9PmsxLERlcHRoVGV4dHVyZTooKT0+bk0sRGlyZWN0aW9uYWxMaWdodDooKT0+STYsRGlyZWN0aW9uYWxMaWdodEhlbHBlcjooKT0+eGh0LERpc2NyZXRlSW50ZXJwb2xhbnQ6KCk9Pk1VLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5IMSxEb2RlY2FoZWRyb25HZW9tZXRyeTooKT0+SDEsRG91YmxlU2lkZTooKT0+TDEsRHN0QWxwaGFGYWN0b3I6KCk9PlloZSxEc3RDb2xvckZhY3RvcjooKT0+WGhlLER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6KCk9PkQwcixEeW5hbWljQ29weVVzYWdlOigpPT56aHIsRHluYW1pY0RyYXdVc2FnZTooKT0+WTMsRHluYW1pY1JlYWRVc2FnZTooKT0+TmhyLEVkZ2VzR2VvbWV0cnk6KCk9PnM2LEVkZ2VzSGVscGVyOigpPT5qMHIsRWxsaXBzZUN1cnZlOigpPT5WMSxFcXVhbERlcHRoOigpPT50ZmUsRXF1YWxTdGVuY2lsRnVuYzooKT0+Q2hyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOigpPT5ZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzooKT0+alAsRXVsZXI6KCk9PnRtLEV2ZW50RGlzcGF0Y2hlcjooKT0+VXMsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OigpPT5oaCxFeHRydWRlR2VvbWV0cnk6KCk9PmhoLEZhY2VDb2xvcnM6KCk9Pk0wcixGaWxlTG9hZGVyOigpPT5KYyxGbGF0U2hhZGluZzooKT0+QWh0LEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0MzJBdHRyaWJ1dGU6KCk9PnEwcixGbG9hdDMyQnVmZmVyQXR0cmlidXRlOigpPT54ZSxGbG9hdDY0QXR0cmlidXRlOigpPT5HMHIsRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTooKT0+bVUsRmxvYXRUeXBlOigpPT5qZCxGb2c6KCk9PnoxLEZvZ0V4cDI6KCk9Pk8xLEZvbnQ6KCk9Pm9fcixGb250TG9hZGVyOigpPT5pX3IsRnJhbWVidWZmZXJUZXh0dXJlOigpPT52VSxGcm9udFNpZGU6KCk9PkkxLEZydXN0dW06KCk9Pk4xLEdMQnVmZmVyQXR0cmlidXRlOigpPT5xVSxHTFNMMTooKT0+QmhyLEdMU0wzOigpPT5LdXQsR3JlYXRlckRlcHRoOigpPT5yZmUsR3JlYXRlckVxdWFsRGVwdGg6KCk9PmVmZSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzooKT0+TGhyLEdyZWF0ZXJTdGVuY2lsRnVuYzooKT0+UGhyLEdyaWRIZWxwZXI6KCk9PllVLEdyb3VwOigpPT5YZCxIYWxmRmxvYXRUeXBlOigpPT5DMSxIZW1pc3BoZXJlTGlnaHQ6KCk9PlQ2LEhlbWlzcGhlcmVMaWdodEhlbHBlcjooKT0+eWh0LEhlbWlzcGhlcmVMaWdodFByb2JlOigpPT5PVSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5HMSxJY29zYWhlZHJvbkdlb21ldHJ5OigpPT5HMSxJbWFnZUJpdG1hcExvYWRlcjooKT0+TlUsSW1hZ2VMb2FkZXI6KCk9PmV4LEltYWdlVXRpbHM6KCk9PktmLEltbWVkaWF0ZVJlbmRlck9iamVjdDooKT0+YV9yLEluY3JlbWVudFN0ZW5jaWxPcDooKT0+eGhyLEluY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PndocixJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnJtLEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OigpPT5ONixJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+VVUsSW5zdGFuY2VkTWVzaDooKT0+aTYsSW50MTZBdHRyaWJ1dGU6KCk9PkIwcixJbnQxNkJ1ZmZlckF0dHJpYnV0ZTooKT0+ZlUsSW50MzJBdHRyaWJ1dGU6KCk9PlYwcixJbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+cFUsSW50OEF0dHJpYnV0ZTooKT0+TzByLEludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLEludFR5cGU6KCk9PnBmZSxJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+ZW0sSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnRwLEludGVycG9sYW50OigpPT5maCxJbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5LUCxJbnRlcnBvbGF0ZUxpbmVhcjooKT0+WlAsSW50ZXJwb2xhdGVTbW9vdGg6KCk9PnJVLEludmVydFN0ZW5jaWxPcDooKT0+TWhyLEpTT05Mb2FkZXI6KCk9PlEwcixLZWVwU3RlbmNpbE9wOigpPT5uVSxLZXlmcmFtZVRyYWNrOigpPT5EbCxMT0Q6KCk9Pl9VLExhdGhlQnVmZmVyR2VvbWV0cnk6KCk9PlcxLExhdGhlR2VvbWV0cnk6KCk9PlcxLExheWVyczooKT0+WDMsTGVuc0ZsYXJlOigpPT5lX3IsTGVzc0RlcHRoOigpPT5RaGUsTGVzc0VxdWFsRGVwdGg6KCk9PmlVLExlc3NFcXVhbFN0ZW5jaWxGdW5jOigpPT5BaHIsTGVzc1N0ZW5jaWxGdW5jOigpPT5UaHIsTGlnaHQ6KCk9Pk9sLExpZ2h0UHJvYmU6KCk9PnJ4LExpbmU6KCk9PmNoLExpbmUzOigpPT5HVSxMaW5lQmFzaWNNYXRlcmlhbDooKT0+R2ksTGluZUN1cnZlOigpPT5VMSxMaW5lQ3VydmUzOigpPT5iVSxMaW5lRGFzaGVkTWF0ZXJpYWw6KCk9Pnc2LExpbmVMb29wOigpPT5vNixMaW5lUGllY2VzOigpPT53MHIsTGluZVNlZ21lbnRzOigpPT5BYSxMaW5lU3RyaXA6KCk9PmIwcixMaW5lYXJFbmNvZGluZzooKT0+UWQsTGluZWFyRmlsdGVyOigpPT5paSxMaW5lYXJJbnRlcnBvbGFudDooKT0+UzYsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOigpPT5taHIsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZGhyLExpbmVhck1pcG1hcExpbmVhckZpbHRlcjooKT0+b3gsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+TGh0LExpbmVhclRvbmVNYXBwaW5nOigpPT5hZmUsTG9hZGVyOigpPT5lYSxMb2FkZXJVdGlsczooKT0+ZE0sTG9hZGluZ01hbmFnZXI6KCk9PkU2LExvb3BPbmNlOigpPT5FZmUsTG9vcFBpbmdQb25nOigpPT5DZmUsTG9vcFJlcGVhdDooKT0+VGZlLEx1bWluYW5jZUFscGhhRm9ybWF0OigpPT55ZmUsTHVtaW5hbmNlRm9ybWF0OigpPT5fZmUsTU9VU0U6KCk9PkswLE1hdGVyaWFsOigpPT5xaSxNYXRlcmlhbExvYWRlcjooKT0+a1UsTWF0aDooKT0+UWhyLE1hdGhVdGlsczooKT0+UWhyLE1hdHJpeDM6KCk9PmtpLE1hdHJpeDQ6KCk9Pk1lLE1heEVxdWF0aW9uOigpPT5BdXQsTWVzaDooKT0+dGksTWVzaEJhc2ljTWF0ZXJpYWw6KCk9PnNoLE1lc2hEZXB0aE1hdGVyaWFsOigpPT5lTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDooKT0+ck0sTWVzaEZhY2VNYXRlcmlhbDooKT0+VDByLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6KCk9Png2LE1lc2hNYXRjYXBNYXRlcmlhbDooKT0+YjYsTWVzaE5vcm1hbE1hdGVyaWFsOigpPT52NixNZXNoUGhvbmdNYXRlcmlhbDooKT0+XzYsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6KCk9Pmc2LE1lc2hTdGFuZGFyZE1hdGVyaWFsOigpPT5wTSxNZXNoVG9vbk1hdGVyaWFsOigpPT55NixNaW5FcXVhdGlvbjooKT0+Q3V0LE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6KCk9PiRQLE1peE9wZXJhdGlvbjooKT0+aWZlLE11bHRpTWF0ZXJpYWw6KCk9PkMwcixNdWx0aXBseUJsZW5kaW5nOigpPT5UdXQsTXVsdGlwbHlPcGVyYXRpb246KCk9Pk82LE5lYXJlc3RGaWx0ZXI6KCk9PkxpLE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6KCk9PnBocixOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZmhyLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmFVLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOigpPT5vVSxOZXZlckRlcHRoOigpPT5aaGUsTmV2ZXJTdGVuY2lsRnVuYzooKT0+RWhyLE5vQmxlbmRpbmc6KCk9PiRkLE5vQ29sb3JzOigpPT5TMHIsTm9Ub25lTWFwcGluZzooKT0+S2QsTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOigpPT4kVSxOb3JtYWxCbGVuZGluZzooKT0+VjMsTm90RXF1YWxEZXB0aDooKT0+bmZlLE5vdEVxdWFsU3RlbmNpbEZ1bmM6KCk9PklocixOdW1iZXJLZXlmcmFtZVRyYWNrOigpPT5aMSxPYmplY3QzRDooKT0+b3IsT2JqZWN0TG9hZGVyOigpPT5zaHQsT2JqZWN0U3BhY2VOb3JtYWxNYXA6KCk9PkxmZSxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PlcwLE9jdGFoZWRyb25HZW9tZXRyeTooKT0+VzAsT25lRmFjdG9yOigpPT5xaGUsT25lTWludXNEc3RBbHBoYUZhY3RvcjooKT0+amhlLE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6KCk9PiRoZSxPbmVNaW51c1NyY0FscGhhRmFjdG9yOigpPT5JaHQsT25lTWludXNTcmNDb2xvckZhY3RvcjooKT0+V2hlLE9ydGhvZ3JhcGhpY0NhbWVyYTooKT0+RDEsUENGU2hhZG93TWFwOigpPT5DaHQsUENGU29mdFNoYWRvd01hcDooKT0+RmhlLFBNUkVNR2VuZXJhdG9yOigpPT5lNixQYXJhbWV0cmljR2VvbWV0cnk6KCk9PnJfcixQYXJ0aWNsZTooKT0+UDByLFBhcnRpY2xlQmFzaWNNYXRlcmlhbDooKT0+azByLFBhcnRpY2xlU3lzdGVtOigpPT5JMHIsUGFydGljbGVTeXN0ZW1NYXRlcmlhbDooKT0+UjByLFBhdGg6KCk9PnExLFBlcnNwZWN0aXZlQ2FtZXJhOigpPT5VaSxQbGFuZTooKT0+JGMsUGxhbmVCdWZmZXJHZW9tZXRyeTooKT0+VjAsUGxhbmVHZW9tZXRyeTooKT0+VjAsUGxhbmVIZWxwZXI6KCk9PlNodCxQb2ludENsb3VkOigpPT5BMHIsUG9pbnRDbG91ZE1hdGVyaWFsOigpPT5MMHIsUG9pbnRMaWdodDooKT0+UDYsUG9pbnRMaWdodEhlbHBlcjooKT0+X2h0LFBvaW50czooKT0+aW0sUG9pbnRzTWF0ZXJpYWw6KCk9Pm5tLFBvbGFyR3JpZEhlbHBlcjooKT0+dmh0LFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+dWgsUG9seWhlZHJvbkdlb21ldHJ5OigpPT51aCxQb3NpdGlvbmFsQXVkaW86KCk9PnVodCxQcm9wZXJ0eUJpbmRpbmc6KCk9PkNyLFByb3BlcnR5TWl4ZXI6KCk9PkJVLFF1YWRyYXRpY0JlemllckN1cnZlOigpPT51TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6KCk9PmhNLFF1YXRlcm5pb246KCk9PnlpLFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOigpPT5YMCxRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ6KCk9PkVVLFJFVklTSU9OOigpPT5qVSxSR0JBRGVwdGhQYWNraW5nOigpPT5JZmUsUkdCQUZvcm1hdDooKT0+UW8sUkdCQUludGVnZXJGb3JtYXQ6KCk9PlNmZSxSR0JBX0FTVENfMTB4MTBfRm9ybWF0OigpPT5ZdXQsUkdCQV9BU1RDXzEweDVfRm9ybWF0OigpPT5xdXQsUkdCQV9BU1RDXzEweDZfRm9ybWF0OigpPT5HdXQsUkdCQV9BU1RDXzEweDhfRm9ybWF0OigpPT5XdXQsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfNHg0X0Zvcm1hdDooKT0+RHV0LFJHQkFfQVNUQ181eDRfRm9ybWF0OigpPT5PdXQsUkdCQV9BU1RDXzV4NV9Gb3JtYXQ6KCk9Pnp1dCxSR0JBX0FTVENfNng1X0Zvcm1hdDooKT0+RnV0LFJHQkFfQVNUQ182eDZfRm9ybWF0OigpPT5CdXQsUkdCQV9BU1RDXzh4NV9Gb3JtYXQ6KCk9Pkh1dCxSR0JBX0FTVENfOHg2X0Zvcm1hdDooKT0+VnV0LFJHQkFfQVNUQ184eDhfRm9ybWF0OigpPT5VdXQsUkdCQV9CUFRDX0Zvcm1hdDooKT0+JHV0LFJHQkFfRVRDMl9FQUNfRm9ybWF0OigpPT5OdXQsUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5rdXQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCQV9TM1RDX0RYVDFfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUM19Gb3JtYXQ6KCk9PnRVLFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDooKT0+ZVUsUkdCX0VUQzFfRm9ybWF0OigpPT5NZmUsUkdCX0VUQzJfRm9ybWF0OigpPT5SdXQsUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+UHV0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OigpPT5KVixSR0Zvcm1hdDooKT0+YmZlLFJHSW50ZWdlckZvcm1hdDooKT0+d2ZlLFJhd1NoYWRlck1hdGVyaWFsOigpPT5VMCxSYXk6KCk9PkpmLFJheWNhc3RlcjooKT0+cGh0LFJlY3RBcmVhTGlnaHQ6KCk9Pms2LFJlZEZvcm1hdDooKT0+dmZlLFJlZEludGVnZXJGb3JtYXQ6KCk9PnhmZSxSZWluaGFyZFRvbmVNYXBwaW5nOigpPT5zZmUsUmVwZWF0V3JhcHBpbmc6KCk9PlhQLFJlcGxhY2VTdGVuY2lsT3A6KCk9PnZocixSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjooKT0+VmhlLFJpbmdCdWZmZXJHZW9tZXRyeTooKT0+WTEsUmluZ0dlb21ldHJ5OigpPT5ZMSxTY2VuZTooKT0+cTAsU2NlbmVVdGlsczooKT0+dF9yLFNoYWRlckNodW5rOigpPT5ocixTaGFkZXJMaWI6KCk9PmFoLFNoYWRlck1hdGVyaWFsOigpPT5saCxTaGFkb3dNYXRlcmlhbDooKT0+bTYsU2hhcGU6KCk9PktjLFNoYXBlQnVmZmVyR2VvbWV0cnk6KCk9PlkwLFNoYXBlR2VvbWV0cnk6KCk9PlkwLFNoYXBlUGF0aDooKT0+RWh0LFNoYXBlVXRpbHM6KCk9PlpjLFNob3J0VHlwZTooKT0+ZmZlLFNrZWxldG9uOigpPT5sTSxTa2VsZXRvbkhlbHBlcjooKT0+V1UsU2tpbm5lZE1lc2g6KCk9PmFNLFNtb290aFNoYWRpbmc6KCk9PmhocixTcGhlcmU6KCk9PlpmLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTcGhlcmVHZW9tZXRyeTooKT0+ajAsU3BoZXJpY2FsOigpPT5fTSxTcGhlcmljYWxIYXJtb25pY3MzOigpPT5SNixTcGxpbmVDdXJ2ZTooKT0+Zk0sU3BvdExpZ2h0OigpPT5BNixTcG90TGlnaHRIZWxwZXI6KCk9PmdodCxTcHJpdGU6KCk9Pm9NLFNwcml0ZU1hdGVyaWFsOigpPT5pTSxTcmNBbHBoYUZhY3RvcjooKT0+UGh0LFNyY0FscGhhU2F0dXJhdGVGYWN0b3I6KCk9PktoZSxTcmNDb2xvckZhY3RvcjooKT0+R2hlLFN0YXRpY0NvcHlVc2FnZTooKT0+T2hyLFN0YXRpY0RyYXdVc2FnZTooKT0+VzMsU3RhdGljUmVhZFVzYWdlOigpPT5SaHIsU3RlcmVvQ2FtZXJhOigpPT5saHQsU3RyZWFtQ29weVVzYWdlOigpPT5GaHIsU3RyZWFtRHJhd1VzYWdlOigpPT5raHIsU3RyZWFtUmVhZFVzYWdlOigpPT5EaHIsU3RyaW5nS2V5ZnJhbWVUcmFjazooKT0+c20sU3VidHJhY3RFcXVhdGlvbjooKT0+SGhlLFN1YnRyYWN0aXZlQmxlbmRpbmc6KCk9PkV1dCxUT1VDSDooKT0+WjAsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOigpPT5heCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5qMSxUZXRyYWhlZHJvbkdlb21ldHJ5OigpPT5qMSxUZXh0R2VvbWV0cnk6KCk9Pm5fcixUZXh0dXJlOigpPT52aSxUZXh0dXJlTG9hZGVyOigpPT5BVSxUb3J1c0J1ZmZlckdlb21ldHJ5OigpPT5YMSxUb3J1c0dlb21ldHJ5OigpPT5YMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90R2VvbWV0cnk6KCk9PiQxLFRyaWFuZ2xlOigpPT5vaSxUcmlhbmdsZUZhbkRyYXdNb2RlOigpPT5faHIsVHJpYW5nbGVTdHJpcERyYXdNb2RlOigpPT5naHIsVHJpYW5nbGVzRHJhd01vZGU6KCk9PkFmZSxUdWJlQnVmZmVyR2VvbWV0cnk6KCk9PksxLFR1YmVHZW9tZXRyeTooKT0+SzEsVVZNYXBwaW5nOigpPT5YVSxVaW50MTZBdHRyaWJ1dGU6KCk9PkgwcixVaW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PiQzLFVpbnQzMkF0dHJpYnV0ZTooKT0+VTByLFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+SzMsVWludDhBdHRyaWJ1dGU6KCk9PnowcixVaW50OEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVWludDhDbGFtcGVkQXR0cmlidXRlOigpPT5GMHIsVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOigpPT5oVSxVbmlmb3JtOigpPT5nTSxVbmlmb3Jtc0xpYjooKT0+cmUsVW5pZm9ybXNVdGlsczooKT0+emZlLFVuc2lnbmVkQnl0ZVR5cGU6KCk9PlpkLFVuc2lnbmVkSW50MjQ4VHlwZTooKT0+QTEsVW5zaWduZWRJbnRUeXBlOigpPT5WUCxVbnNpZ25lZFNob3J0NDQ0NFR5cGU6KCk9PmRmZSxVbnNpZ25lZFNob3J0NTU1MVR5cGU6KCk9Pm1mZSxVbnNpZ25lZFNob3J0VHlwZTooKT0+RzMsVlNNU2hhZG93TWFwOigpPT5GMyxWZWN0b3IyOigpPT5MdCxWZWN0b3IzOigpPT5qLFZlY3RvcjQ6KCk9PmVuLFZlY3RvcktleWZyYW1lVHJhY2s6KCk9PkoxLFZlcnRleDooKT0+TjByLFZlcnRleENvbG9yczooKT0+RTByLFZpZGVvVGV4dHVyZTooKT0+eVUsV2ViR0wxUmVuZGVyZXI6KCk9PmdVLFdlYkdMQ3ViZVJlbmRlclRhcmdldDooKT0+UTMsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6KCk9PmxVLFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6KCk9PmozLFdlYkdMUmVuZGVyVGFyZ2V0OigpPT51cyxXZWJHTFJlbmRlclRhcmdldEN1YmU6KCk9PlowcixXZWJHTFJlbmRlcmVyOigpPT5ybixXZWJHTFV0aWxzOigpPT4kZmUsV2lyZWZyYW1lR2VvbWV0cnk6KCk9PmQ2LFdpcmVmcmFtZUhlbHBlcjooKT0+WDByLFdyYXBBcm91bmRFbmRpbmc6KCk9PkpQLFhIUkxvYWRlcjooKT0+JDByLFplcm9DdXJ2YXR1cmVFbmRpbmc6KCk9PkUxLFplcm9GYWN0b3I6KCk9PlVoZSxaZXJvU2xvcGVFbmRpbmc6KCk9PlQxLFplcm9TdGVuY2lsT3A6KCk9PnlocixfU1JHQkFGb3JtYXQ6KCk9PnNVLHNSR0JFbmNvZGluZzooKT0+V259KTt2YXIgalU9IjEzNyIsSzA9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LFowPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sT2hlPTAsU3V0PTEsemhlPTIsY2hyPTMsdWhyPTAsQ2h0PTEsRmhlPTIsRjM9MyxJMT0wLElpPTEsTDE9MixBaHQ9MSxoaHI9MiwkZD0wLFYzPTEsTXV0PTIsRXV0PTMsVHV0PTQsQmhlPTUsTTE9MTAwLEhoZT0xMDEsVmhlPTEwMixDdXQ9MTAzLEF1dD0xMDQsVWhlPTIwMCxxaGU9MjAxLEdoZT0yMDIsV2hlPTIwMyxQaHQ9MjA0LElodD0yMDUsWWhlPTIwNixqaGU9MjA3LFhoZT0yMDgsJGhlPTIwOSxLaGU9MjEwLFpoZT0wLEpoZT0xLFFoZT0yLGlVPTMsdGZlPTQsZWZlPTUscmZlPTYsbmZlPTcsTzY9MCxpZmU9MSxvZmU9MixLZD0wLGFmZT0xLHNmZT0yLGxmZT0zLGNmZT00LHVmZT01LFhVPTMwMCxueD0zMDEsaXg9MzAyLFlQPTMwMyxqUD0zMDQseE09MzA2LHo2PTMwNyxYUD0xZTMsSm89MTAwMSwkUD0xMDAyLExpPTEwMDMsb1U9MTAwNCxmaHI9MTAwNCxhVT0xMDA1LHBocj0xMDA1LGlpPTEwMDYsTGh0PTEwMDcsZGhyPTEwMDcsb3g9MTAwOCxtaHI9MTAwOCxaZD0xMDA5LGhmZT0xMDEwLGZmZT0xMDExLEczPTEwMTIscGZlPTEwMTMsVlA9MTAxNCxqZD0xMDE1LEMxPTEwMTYsZGZlPTEwMTcsbWZlPTEwMTgsQTE9MTAyMCxnZmU9MTAyMSxRbz0xMDIzLF9mZT0xMDI0LHlmZT0xMDI1LHowPTEwMjYsazE9MTAyNyx2ZmU9MTAyOCx4ZmU9MTAyOSxiZmU9MTAzMCx3ZmU9MTAzMSxTZmU9MTAzMyxKVj0zMzc3NixRVj0zMzc3Nyx0VT0zMzc3OCxlVT0zMzc3OSxQdXQ9MzU4NDAsSXV0PTM1ODQxLEx1dD0zNTg0MixrdXQ9MzU4NDMsTWZlPTM2MTk2LFJ1dD0zNzQ5MixOdXQ9Mzc0OTYsRHV0PTM3ODA4LE91dD0zNzgwOSx6dXQ9Mzc4MTAsRnV0PTM3ODExLEJ1dD0zNzgxMixIdXQ9Mzc4MTMsVnV0PTM3ODE0LFV1dD0zNzgxNSxxdXQ9Mzc4MTYsR3V0PTM3ODE3LFd1dD0zNzgxOCxZdXQ9Mzc4MTksanV0PTM3ODIwLFh1dD0zNzgyMSwkdXQ9MzY0OTIsRWZlPTIyMDAsVGZlPTIyMDEsQ2ZlPTIyMDIsS1A9MjMwMCxaUD0yMzAxLHJVPTIzMDIsRTE9MjQwMCxUMT0yNDAxLEpQPTI0MDIsJFU9MjUwMCxraHQ9MjUwMSxBZmU9MCxnaHI9MSxfaHI9MixRZD0zZTMsV249MzAwMSxQZmU9MzIwMCxJZmU9MzIwMSxheD0wLExmZT0xLHlocj0wLG5VPTc2ODAsdmhyPTc2ODEseGhyPTc2ODIsYmhyPTc2ODMsd2hyPTM0MDU1LFNocj0zNDA1NixNaHI9NTM4NixFaHI9NTEyLFRocj01MTMsQ2hyPTUxNCxBaHI9NTE1LFBocj01MTYsSWhyPTUxNyxMaHI9NTE4LGtmZT01MTksVzM9MzUwNDQsWTM9MzUwNDgsa2hyPTM1MDQwLFJocj0zNTA0NSxOaHI9MzUwNDksRGhyPTM1MDQxLE9ocj0zNTA0Nix6aHI9MzUwNTAsRmhyPTM1MDQyLEJocj0iMTAwIixLdXQ9IjMwMCBlcyIsc1U9MTAzNSxVcz1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQscil7dGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7blt0XT09PXZvaWQgMCYmKG5bdF09W10pLG5bdF0uaW5kZXhPZihyKT09PS0xJiZuW3RdLnB1c2gocil9aGFzRXZlbnRMaXN0ZW5lcih0LHIpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm4hMTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIG5bdF0hPT12b2lkIDAmJm5bdF0uaW5kZXhPZihyKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0XTtpZihpIT09dm9pZCAwKXtsZXQgbz1pLmluZGV4T2Yocik7byE9PS0xJiZpLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IG49dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYobiE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztsZXQgaT1uLnNsaWNlKDApO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LEtvPVtdO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylLb1tlXT0oZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpO3ZhciB1Vj0xMjM0NTY3LFAxPU1hdGguUEkvMTgwLFFQPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIE5sKCl7bGV0IGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxyPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKEtvW2UmMjU1XStLb1tlPj44JjI1NV0rS29bZT4+MTYmMjU1XStLb1tlPj4yNCYyNTVdKyItIitLb1t0JjI1NV0rS29bdD4+OCYyNTVdKyItIitLb1t0Pj4xNiYxNXw2NF0rS29bdD4+MjQmMjU1XSsiLSIrS29bciY2M3wxMjhdK0tvW3I+PjgmMjU1XSsiLSIrS29bcj4+MTYmMjU1XStLb1tyPj4yNCYyNTVdK0tvW24mMjU1XStLb1tuPj44JjI1NV0rS29bbj4+MTYmMjU1XStLb1tuPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFpvKGUsdCxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX1mdW5jdGlvbiBSaHQoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gSGhyKGUsdCxyLG4saSl7cmV0dXJuIG4rKGUtdCkqKGktbikvKHItdCl9ZnVuY3Rpb24gVmhyKGUsdCxyKXtyZXR1cm4gZSE9PXQ/KHItZSkvKHQtZSk6MH1mdW5jdGlvbiBVUChlLHQscil7cmV0dXJuKDEtcikqZStyKnR9ZnVuY3Rpb24gVWhyKGUsdCxyLG4pe3JldHVybiBVUChlLHQsMS1NYXRoLmV4cCgtcipuKSl9ZnVuY3Rpb24gcWhyKGUsdD0xKXtyZXR1cm4gdC1NYXRoLmFicyhSaHQoZSx0KjIpLXQpfWZ1bmN0aW9uIEdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKigzLTIqZSkpfWZ1bmN0aW9uIFdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKmUqKGUqKGUqNi0xNSkrMTApKX1mdW5jdGlvbiBZaHIoZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9ZnVuY3Rpb24gamhyKGUsdCl7cmV0dXJuIGUrTWF0aC5yYW5kb20oKSoodC1lKX1mdW5jdGlvbiBYaHIoZSl7cmV0dXJuIGUqKC41LU1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uICRocihlKXtyZXR1cm4gZSE9PXZvaWQgMCYmKHVWPWUlMjE0NzQ4MzY0NyksdVY9dVYqMTY4MDclMjE0NzQ4MzY0NywodVYtMSkvMjE0NzQ4MzY0Nn1mdW5jdGlvbiBLaHIoZSl7cmV0dXJuIGUqUDF9ZnVuY3Rpb24gWmhyKGUpe3JldHVybiBlKlFQfWZ1bmN0aW9uIFp1dChlKXtyZXR1cm4oZSZlLTEpPT09MCYmZSE9PTB9ZnVuY3Rpb24gUmZlKGUpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIE5mZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSl9ZnVuY3Rpb24gSmhyKGUsdCxyLG4saSl7bGV0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8oci8yKSxsPWEoci8yKSxjPW8oKHQrbikvMiksdT1hKCh0K24pLzIpLGg9bygodC1uKS8yKSxmPWEoKHQtbikvMikscD1vKChuLXQpLzIpLGQ9YSgobi10KS8yKTtzd2l0Y2goaSl7Y2FzZSJYWVgiOmUuc2V0KHMqdSxsKmgsbCpmLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOmUuc2V0KGwqZixzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOmUuc2V0KGwqaCxsKmYscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOmUuc2V0KHMqdSxsKmQsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOmUuc2V0KGwqcCxzKnUsbCpkLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOmUuc2V0KGwqZCxsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2kpfX12YXIgUWhyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFRzJSQUQ6UDEsUkFEMkRFRzpRUCxnZW5lcmF0ZVVVSUQ6TmwsY2xhbXA6Wm8sZXVjbGlkZWFuTW9kdWxvOlJodCxtYXBMaW5lYXI6SGhyLGludmVyc2VMZXJwOlZocixsZXJwOlVQLGRhbXA6VWhyLHBpbmdwb25nOnFocixzbW9vdGhzdGVwOkdocixzbW9vdGhlcnN0ZXA6V2hyLHJhbmRJbnQ6WWhyLHJhbmRGbG9hdDpqaHIscmFuZEZsb2F0U3ByZWFkOlhocixzZWVkZWRSYW5kb206JGhyLGRlZ1RvUmFkOktocixyYWRUb0RlZzpaaHIsaXNQb3dlck9mVHdvOlp1dCxjZWlsUG93ZXJPZlR3bzpSZmUsZmxvb3JQb3dlck9mVHdvOk5mZSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOkpocn0pLEx0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTApe3RoaXMueD10LHRoaXMueT1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKnIraVszXSpuK2lbNl0sdGhpcy55PWlbMV0qcitpWzRdKm4raVs3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiByKnIrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXN9cm90YXRlQXJvdW5kKHQscil7bGV0IG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9bypuLWEqaSt0LngsdGhpcy55PW8qaSthKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0x0LnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGtpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPWksdVsyXT1zLHVbM109cix1WzRdPW8sdVs1XT1sLHVbNl09bix1WzddPWEsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxyLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0scls0XSxyWzhdLHJbMV0scls1XSxyWzldLHJbMl0scls2XSxyWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxyKXtsZXQgbj10LmVsZW1lbnRzLGk9ci5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1uWzBdLHM9blszXSxsPW5bNl0sYz1uWzFdLHU9bls0XSxoPW5bN10sZj1uWzJdLHA9bls1XSxkPW5bOF0sZz1pWzBdLF89aVszXSx5PWlbNl0seD1pWzFdLGI9aVs0XSxTPWlbN10sQz1pWzJdLFA9aVs1XSxrPWlbOF07cmV0dXJuIG9bMF09YSpnK3MqeCtsKkMsb1szXT1hKl8rcypiK2wqUCxvWzZdPWEqeStzKlMrbCprLG9bMV09YypnK3UqeCtoKkMsb1s0XT1jKl8rdSpiK2gqUCxvWzddPWMqeSt1KlMraCprLG9bMl09ZipnK3AqeCtkKkMsb1s1XT1mKl8rcCpiK2QqUCxvWzhdPWYqeStwKlMrZCprLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzNdKj10LHJbNl0qPXQsclsxXSo9dCxyWzRdKj10LHJbN10qPXQsclsyXSo9dCxyWzVdKj10LHJbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIHIqYSp1LXIqcypjLW4qbyp1K24qcypsK2kqbypjLWkqYSpsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11KmEtcypjLGY9cypsLXUqbyxwPWMqby1hKmwsZD1yKmgrbipmK2kqcDtpZihkPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCBnPTEvZDtyZXR1cm4gdFswXT1oKmcsdFsxXT0oaSpjLXUqbikqZyx0WzJdPShzKm4taSphKSpnLHRbM109ZipnLHRbNF09KHUqci1pKmwpKmcsdFs1XT0oaSpvLXMqcikqZyx0WzZdPXAqZyx0WzddPShuKmwtYypyKSpnLHRbOF09KGEqci1uKm8pKmcsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxyPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9clsxXSxyWzFdPXJbM10sclszXT10LHQ9clsyXSxyWzJdPXJbNl0scls2XT10LHQ9cls1XSxyWzVdPXJbN10scls3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPXJbMF0sdFsxXT1yWzNdLHRbMl09cls2XSx0WzNdPXJbMV0sdFs0XT1yWzRdLHRbNV09cls3XSx0WzZdPXJbMl0sdFs3XT1yWzVdLHRbOF09cls4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQscixuLGksbyxhLHMpe2xldCBsPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7cmV0dXJuIHRoaXMuc2V0KG4qbCxuKmMsLW4qKGwqYStjKnMpK2ErdCwtaSpjLGkqbCwtaSooLWMqYStsKnMpK3MrciwwLDAsMSksdGhpc31zY2FsZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPXIsbls0XSo9cixuWzddKj1yLHRoaXN9cm90YXRlKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbM10scz1pWzZdLGw9aVsxXSxjPWlbNF0sdT1pWzddO3JldHVybiBpWzBdPXIqbytuKmwsaVszXT1yKmErbipjLGlbNl09cipzK24qdSxpWzFdPS1uKm8rcipsLGlbNF09LW4qYStyKmMsaVs3XT0tbipzK3IqdSx0aGlzfXRyYW5zbGF0ZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPXIqblsyXSxuWzRdKz1yKm5bNV0sbls3XSs9cipuWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspaWYocltpXSE9PW5baV0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQscj0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07a2kucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBEZmUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpaWYoZVt0XT42NTUzNSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgdGZyPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheX07ZnVuY3Rpb24gQjMoZSx0KXtyZXR1cm4gbmV3IHRmcltlXSh0KX1mdW5jdGlvbiB0NihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixlKX12YXIgT2ZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LG5oPXtoOjAsczowLGw6MH0saFY9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBHY3QoZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKyh0LWUpKjYqcjpyPDEvMj90OnI8Mi8zP2UrKHQtZSkqNiooMi8zLXIpOmV9ZnVuY3Rpb24gVTMoZSl7cmV0dXJuIGU8LjA0MDQ1P2UqLjA3NzM5OTM4MDg6TWF0aC5wb3coZSouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIFdjdChlKXtyZXR1cm4gZTwuMDAzMTMwOD9lKjEyLjkyOjEuMDU1Kk1hdGgucG93KGUsLjQxNjY2KS0uMDU1fXZhciBuZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7cmV0dXJuIHI9PT12b2lkIDAmJm49PT12b2lkIDA/dGhpcy5zZXQodCk6dGhpcy5zZXRSR0IodCxyLG4pfXNldCh0KXtyZXR1cm4gdCYmdC5pc0NvbG9yP3RoaXMuY29weSh0KTp0eXBlb2YgdD09Im51bWJlciI/dGhpcy5zZXRIZXgodCk6dHlwZW9mIHQ9PSJzdHJpbmciJiZ0aGlzLnNldFN0eWxlKHQpLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9dCx0aGlzLmI9dCx0aGlzfXNldEhleCh0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLHRoaXMucj0odD4+MTYmMjU1KS8yNTUsdGhpcy5nPSh0Pj44JjI1NSkvMjU1LHRoaXMuYj0odCYyNTUpLzI1NSx0aGlzfXNldFJHQih0LHIsbil7cmV0dXJuIHRoaXMucj10LHRoaXMuZz1yLHRoaXMuYj1uLHRoaXN9c2V0SFNMKHQscixuKXtpZih0PVJodCh0LDEpLHI9Wm8ociwwLDEpLG49Wm8obiwwLDEpLHI9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtsZXQgaT1uPD0uNT9uKigxK3IpOm4rci1uKnIsbz0yKm4taTt0aGlzLnI9R2N0KG8saSx0KzEvMyksdGhpcy5nPUdjdChvLGksdCksdGhpcy5iPUdjdChvLGksdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIHIoaSl7aSE9PXZvaWQgMCYmcGFyc2VGbG9hdChpKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCBpLG89blsxXSxhPW5bMl07c3dpdGNoKG8pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKGk9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChpWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbM10sMTApKS8yNTUscihpWzRdKSx0aGlzO2lmKGk9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChpWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbM10sMTApKS8xMDAscihpWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKGk9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBzPXBhcnNlRmxvYXQoaVsxXSkvMzYwLGw9cGFyc2VJbnQoaVsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoaVszXSwxMCkvMTAwO3JldHVybiByKGlbNF0pLHRoaXMuc2V0SFNMKHMsbCxjKX1icmVha319ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IGk9blsxXSxvPWkubGVuZ3RoO2lmKG89PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMSkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKG89PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoNCkraS5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCByPU9mZVt0LnRvTG93ZXJDYXNlKCldO3JldHVybiByIT09dm9pZCAwP3RoaXMuc2V0SGV4KHIpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1VMyh0LnIpLHRoaXMuZz1VMyh0LmcpLHRoaXMuYj1VMyh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVdjdCh0LnIpLHRoaXMuZz1XY3QodC5nKSx0aGlzLmI9V2N0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IHI9dGhpcy5yLG49dGhpcy5nLGk9dGhpcy5iLG89TWF0aC5tYXgocixuLGkpLGE9TWF0aC5taW4ocixuLGkpLHMsbCxjPShhK28pLzI7aWYoYT09PW8pcz0wLGw9MDtlbHNle2xldCB1PW8tYTtzd2l0Y2gobD1jPD0uNT91LyhvK2EpOnUvKDItby1hKSxvKXtjYXNlIHI6cz0obi1pKS91KyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS1yKS91KzI7YnJlYWs7Y2FzZSBpOnM9KHItbikvdSs0O2JyZWFrfXMvPTZ9cmV0dXJuIHQuaD1zLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQscixuKXtyZXR1cm4gdGhpcy5nZXRIU0wobmgpLG5oLmgrPXQsbmgucys9cixuaC5sKz1uLHRoaXMuc2V0SFNMKG5oLmgsbmgucyxuaC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxyKXtyZXR1cm4gdGhpcy5yPXQucityLnIsdGhpcy5nPXQuZytyLmcsdGhpcy5iPXQuYityLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxyKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqcix0aGlzLmcrPSh0LmctdGhpcy5nKSpyLHRoaXMuYis9KHQuYi10aGlzLmIpKnIsdGhpc31sZXJwQ29sb3JzKHQscixuKXtyZXR1cm4gdGhpcy5yPXQucisoci5yLXQucikqbix0aGlzLmc9dC5nKyhyLmctdC5nKSpuLHRoaXMuYj10LmIrKHIuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQscil7dGhpcy5nZXRIU0wobmgpLHQuZ2V0SFNMKGhWKTtsZXQgbj1VUChuaC5oLGhWLmgsciksaT1VUChuaC5zLGhWLnMsciksbz1VUChuaC5sLGhWLmwscik7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxvKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLnI9dFtyXSx0aGlzLmc9dFtyKzFdLHRoaXMuYj10W3IrMl0sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLnIsdFtyKzFdPXRoaXMuZyx0W3IrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpe3JldHVybiB0aGlzLnI9dC5nZXRYKHIpLHRoaXMuZz10LmdldFkociksdGhpcy5iPXQuZ2V0WihyKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07bmUuTkFNRVM9T2ZlO25lLnByb3RvdHlwZS5pc0NvbG9yPSEwO25lLnByb3RvdHlwZS5yPTE7bmUucHJvdG90eXBlLmc9MTtuZS5wcm90b3R5cGUuYj0xO3ZhciB2MyxLZj1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD09InVuZGVmaW5lZCIpcmV0dXJuIHQuc3JjO2xldCByO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClyPXQ7ZWxzZXt2Mz09PXZvaWQgMCYmKHYzPXQ2KCJjYW52YXMiKSksdjMud2lkdGg9dC53aWR0aCx2My5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49djMuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxyPXYzfXJldHVybiByLndpZHRoPjIwNDh8fHIuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTpyLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHI9dDYoImNhbnZhcyIpO3Iud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodDtsZXQgbj1yLmdldENvbnRleHQoIjJkIik7bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IGk9bi5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89aS5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09VTMob1thXS8yNTUpKjI1NTtyZXR1cm4gbi5wdXRJbWFnZURhdGEoaSwwLDApLHJ9ZWxzZSBpZih0LmRhdGEpe2xldCByPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3Jbbl09TWF0aC5mbG9vcihVMyhyW25dLzI1NSkqMjU1KTpyW25dPVUzKHJbbl0pO3JldHVybntkYXRhOnIsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxlZnI9MCx2aT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQ9dmkuREVGQVVMVF9JTUFHRSxyPXZpLkRFRkFVTFRfTUFQUElORyxuPUpvLGk9Sm8sbz1paSxhPW94LHM9UW8sbD1aZCxjPTEsdT1RZCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTplZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1yLHRoaXMud3JhcFM9bix0aGlzLndyYXBUPWksdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBMdCgwLDApLHRoaXMucmVwZWF0PW5ldyBMdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBMdCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGtpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIXImJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgaT10aGlzLmltYWdlO2lmKGkudXVpZD09PXZvaWQgMCYmKGkudXVpZD1ObCgpKSwhciYmdC5pbWFnZXNbaS51dWlkXT09PXZvaWQgMCl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1bXTtmb3IobGV0IGE9MCxzPWkubGVuZ3RoO2E8czthKyspaVthXS5pc0RhdGFUZXh0dXJlP28ucHVzaChZY3QoaVthXS5pbWFnZSkpOm8ucHVzaChZY3QoaVthXSkpfWVsc2Ugbz1ZY3QoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOm99fW4uaW1hZ2U9aS51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHJ8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PVhVKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgWFA6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBKbzp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBYUDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEpvOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAkUDpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt2aS5ERUZBVUxUX0lNQUdFPXZvaWQgMDt2aS5ERUZBVUxUX01BUFBJTkc9WFU7dmkucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBZY3QoZSl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwP0tmLmdldERhdGFVUkwoZSk6ZS5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuZGF0YSksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsdHlwZTplLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX12YXIgZW49Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7Y2FzZSAzOnRoaXMudz1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz10LnchPT12b2lkIDA/dC53OjEsdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpcy56PXQueityLnosdGhpcy53PXQudytyLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXMueis9dC56KnIsdGhpcy53Kz10Lncqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzLno9dC56LXIueix0aGlzLnc9dC53LXIudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qcithWzRdKm4rYVs4XSppK2FbMTJdKm8sdGhpcy55PWFbMV0qcithWzVdKm4rYVs5XSppK2FbMTNdKm8sdGhpcy56PWFbMl0qcithWzZdKm4rYVsxMF0qaSthWzE0XSpvLHRoaXMudz1hWzNdKnIrYVs3XSpuK2FbMTFdKmkrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCByPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiByPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9yLHRoaXMueT10Lnkvcix0aGlzLno9dC56L3IpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCByLG4saSxvLGw9dC5lbGVtZW50cyxjPWxbMF0sdT1sWzRdLGg9bFs4XSxmPWxbMV0scD1sWzVdLGQ9bFs5XSxnPWxbMl0sXz1sWzZdLHk9bFsxMF07aWYoTWF0aC5hYnModS1mKTwuMDEmJk1hdGguYWJzKGgtZyk8LjAxJiZNYXRoLmFicyhkLV8pPC4wMSl7aWYoTWF0aC5hYnModStmKTwuMSYmTWF0aC5hYnMoaCtnKTwuMSYmTWF0aC5hYnMoZCtfKTwuMSYmTWF0aC5hYnMoYytwK3ktMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7cj1NYXRoLlBJO2xldCBiPShjKzEpLzIsUz0ocCsxKS8yLEM9KHkrMSkvMixQPSh1K2YpLzQsaz0oaCtnKS80LE89KGQrXykvNDtyZXR1cm4gYj5TJiZiPkM/YjwuMDE/KG49MCxpPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQoYiksaT1QL24sbz1rL24pOlM+Qz9TPC4wMT8obj0uNzA3MTA2NzgxLGk9MCxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChTKSxuPVAvaSxvPU8vaSk6QzwuMDE/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoQyksbj1rL28saT1PL28pLHRoaXMuc2V0KG4saSxvLHIpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChfLWQpKihfLWQpKyhoLWcpKihoLWcpKyhmLXUpKihmLXUpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShfLWQpL3gsdGhpcy55PShoLWcpL3gsdGhpcy56PShmLXUpL3gsdGhpcy53PU1hdGguYWNvcygoYytwK3ktMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihyLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXMudys9KHQudy10aGlzLncpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzLno9dC56KyhyLnotdC56KSpuLHRoaXMudz10LncrKHIudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXMuej10W3IrMl0sdGhpcy53PXRbciszXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdFtyKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzLnc9dC5nZXRXKHIpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07ZW4ucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBlbigwLDAsdCxyKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGVuKDAsMCx0LHIpLHRoaXMudGV4dHVyZT1uZXcgdmkodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwP24uZ2VuZXJhdGVNaXBtYXBzOiExLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD1uLmludGVybmFsRm9ybWF0IT09dm9pZCAwP24uaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPW4ubWluRmlsdGVyIT09dm9pZCAwP24ubWluRmlsdGVyOmlpLHRoaXMuZGVwdGhCdWZmZXI9bi5kZXB0aEJ1ZmZlciE9PXZvaWQgMD9uLmRlcHRoQnVmZmVyOiEwLHRoaXMuc3RlbmNpbEJ1ZmZlcj1uLnN0ZW5jaWxCdWZmZXIhPT12b2lkIDA/bi5zdGVuY2lsQnVmZmVyOiExLHRoaXMuZGVwdGhUZXh0dXJlPW4uZGVwdGhUZXh0dXJlIT09dm9pZCAwP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQscixuPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bikmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt1cy5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMDt2YXIgbFU9Y2xhc3MgZXh0ZW5kcyB1c3tjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIodCxyKTtsZXQgaT10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288bjtvKyspdGhpcy50ZXh0dXJlW29dPWkuY2xvbmUoKX1zZXRTaXplKHQscixuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PXJ8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW47Zm9yKGxldCBpPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO2k8bztpKyspdGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCByPTAsbj10LnRleHR1cmUubGVuZ3RoO3I8bjtyKyspdGhpcy50ZXh0dXJlW3JdPXQudGV4dHVyZVtyXS5jbG9uZSgpO3JldHVybiB0aGlzfX07bFUucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIGozPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKHQscixuKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PW4uaWdub3JlRGVwdGghPT12b2lkIDA/bi5pZ25vcmVEZXB0aDohMCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT1uLnVzZVJlbmRlclRvVGV4dHVyZSE9PXZvaWQgMD9uLnVzZVJlbmRlclRvVGV4dHVyZTohMSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10aGlzLnVzZVJlbmRlclRvVGV4dHVyZT09PSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O2ozLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIHlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pfXN0YXRpYyBzbGVycCh0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksbi5zbGVycFF1YXRlcm5pb25zKHQscixpKX1zdGF0aWMgc2xlcnBGbGF0KHQscixuLGksbyxhLHMpe2xldCBsPW5baSswXSxjPW5baSsxXSx1PW5baSsyXSxoPW5baSszXSxmPW9bYSswXSxwPW9bYSsxXSxkPW9bYSsyXSxnPW9bYSszXTtpZihzPT09MCl7dFtyKzBdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWg7cmV0dXJufWlmKHM9PT0xKXt0W3IrMF09Zix0W3IrMV09cCx0W3IrMl09ZCx0W3IrM109ZztyZXR1cm59aWYoaCE9PWd8fGwhPT1mfHxjIT09cHx8dSE9PWQpe2xldCBfPTEtcyx5PWwqZitjKnArdSpkK2gqZyx4PXk+PTA/MTotMSxiPTEteSp5O2lmKGI+TnVtYmVyLkVQU0lMT04pe2xldCBDPU1hdGguc3FydChiKSxQPU1hdGguYXRhbjIoQyx5KngpO189TWF0aC5zaW4oXypQKS9DLHM9TWF0aC5zaW4ocypQKS9DfWxldCBTPXMqeDtpZihsPWwqXytmKlMsYz1jKl8rcCpTLHU9dSpfK2QqUyxoPWgqXytnKlMsXz09PTEtcyl7bGV0IEM9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUraCpoKTtsKj1DLGMqPUMsdSo9QyxoKj1DfX10W3JdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWh9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscixuLGksbyxhKXtsZXQgcz1uW2ldLGw9bltpKzFdLGM9bltpKzJdLHU9bltpKzNdLGg9b1thXSxmPW9bYSsxXSxwPW9bYSsyXSxkPW9bYSszXTtyZXR1cm4gdFtyXT1zKmQrdSpoK2wqcC1jKmYsdFtyKzFdPWwqZCt1KmYrYypoLXMqcCx0W3IrMl09YypkK3UqcCtzKmYtbCpoLHRbciszXT11KmQtcypoLWwqZi1jKnAsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQscixuLGkpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1yLHRoaXMuX3o9bix0aGlzLl93PWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQscil7aWYoISh0JiZ0LmlzRXVsZXIpKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IG49dC5feCxpPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhuLzIpLHU9cyhpLzIpLGg9cyhvLzIpLGY9bChuLzIpLHA9bChpLzIpLGQ9bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIllYWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIlpYWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlpZWCI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIllaWCI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlhaWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuIHIhPT0hMSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LHIpe2xldCBuPXIvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcj10LmVsZW1lbnRzLG49clswXSxpPXJbNF0sbz1yWzhdLGE9clsxXSxzPXJbNV0sbD1yWzldLGM9clsyXSx1PXJbNl0saD1yWzEwXSxmPW4rcytoO2lmKGY+MCl7bGV0IHA9LjUvTWF0aC5zcXJ0KGYrMSk7dGhpcy5fdz0uMjUvcCx0aGlzLl94PSh1LWwpKnAsdGhpcy5feT0oby1jKSpwLHRoaXMuX3o9KGEtaSkqcH1lbHNlIGlmKG4+cyYmbj5oKXtsZXQgcD0yKk1hdGguc3FydCgxK24tcy1oKTt0aGlzLl93PSh1LWwpL3AsdGhpcy5feD0uMjUqcCx0aGlzLl95PShpK2EpL3AsdGhpcy5fej0obytjKS9wfWVsc2UgaWYocz5oKXtsZXQgcD0yKk1hdGguc3FydCgxK3Mtbi1oKTt0aGlzLl93PShvLWMpL3AsdGhpcy5feD0oaSthKS9wLHRoaXMuX3k9LjI1KnAsdGhpcy5fej0obCt1KS9wfWVsc2V7bGV0IHA9MipNYXRoLnNxcnQoMStoLW4tcyk7dGhpcy5fdz0oYS1pKS9wLHRoaXMuX3g9KG8rYykvcCx0aGlzLl95PShsK3UpL3AsdGhpcy5fej0uMjUqcH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQscil7bGV0IG49dC5kb3QocikrMTtyZXR1cm4gbjxOdW1iZXIuRVBTSUxPTj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSpyLnotdC56KnIueSx0aGlzLl95PXQueipyLngtdC54KnIueix0aGlzLl96PXQueCpyLnktdC55KnIueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoWm8odGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQscil7bGV0IG49dGhpcy5hbmdsZVRvKHQpO2lmKG49PT0wKXJldHVybiB0aGlzO2xldCBpPU1hdGgubWluKDEsci9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpe2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX3cscz1yLl94LGw9ci5feSxjPXIuX3osdT1yLl93O3JldHVybiB0aGlzLl94PW4qdSthKnMraSpjLW8qbCx0aGlzLl95PWkqdSthKmwrbypzLW4qYyx0aGlzLl96PW8qdSthKmMrbipsLWkqcyx0aGlzLl93PWEqdS1uKnMtaSpsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LHIpe2lmKHI9PT0wKXJldHVybiB0aGlzO2lmKHI9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IG49dGhpcy5feCxpPXRoaXMuX3ksbz10aGlzLl96LGE9dGhpcy5fdyxzPWEqdC5fdytuKnQuX3graSp0Ll95K28qdC5fejtpZihzPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscz0tcyk6dGhpcy5jb3B5KHQpLHM+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1pLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtcypzO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgcD0xLXI7cmV0dXJuIHRoaXMuX3c9cCphK3IqdGhpcy5fdyx0aGlzLl94PXAqbityKnRoaXMuX3gsdGhpcy5feT1wKmkrcip0aGlzLl95LHRoaXMuX3o9cCpvK3IqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxzKSxoPU1hdGguc2luKCgxLXIpKnUpL2MsZj1NYXRoLnNpbihyKnUpL2M7cmV0dXJuIHRoaXMuX3c9YSpoK3RoaXMuX3cqZix0aGlzLl94PW4qaCt0aGlzLl94KmYsdGhpcy5feT1pKmgrdGhpcy5feSpmLHRoaXMuX3o9bypoK3RoaXMuX3oqZix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQscixuKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKHIsbil9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxyPU1hdGguc3FydCgxLXQpLG49TWF0aC5zcXJ0KHQpLGk9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQocipNYXRoLmNvcyhpKSxuKk1hdGguc2luKG8pLG4qTWF0aC5jb3MobykscipNYXRoLnNpbihpKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLl94PXRbcl0sdGhpcy5feT10W3IrMV0sdGhpcy5fej10W3IrMl0sdGhpcy5fdz10W3IrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5feCx0W3IrMV09dGhpcy5feSx0W3IrMl09dGhpcy5feix0W3IrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5feD10LmdldFgociksdGhpcy5feT10LmdldFkociksdGhpcy5fej10LmdldFoociksdGhpcy5fdz10LmdldFcociksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eWkucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgaj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW59c2V0KHQscixuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxyKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54KnIueCx0aGlzLnk9dC55KnIueSx0aGlzLno9dC56KnIueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQscil7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tQXhpc0FuZ2xlKHQscikpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bM10qbitvWzZdKmksdGhpcy55PW9bMV0qcitvWzRdKm4rb1s3XSppLHRoaXMuej1vWzJdKnIrb1s1XSpuK29bOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cyxhPTEvKG9bM10qcitvWzddKm4rb1sxMV0qaStvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSpyK29bNF0qbitvWzhdKmkrb1sxMl0pKmEsdGhpcy55PShvWzFdKnIrb1s1XSpuK29bOV0qaStvWzEzXSkqYSx0aGlzLno9KG9bMl0qcitvWzZdKm4rb1sxMF0qaStvWzE0XSkqYSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LngsYT10Lnkscz10LnosbD10LncsYz1sKnIrYSppLXMqbix1PWwqbitzKnItbyppLGg9bCppK28qbi1hKnIsZj0tbypyLWEqbi1zKmk7cmV0dXJuIHRoaXMueD1jKmwrZiotbyt1Ki1zLWgqLWEsdGhpcy55PXUqbCtmKi1hK2gqLW8tYyotcyx0aGlzLno9aCpsK2YqLXMrYyotYS11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bNF0qbitvWzhdKmksdGhpcy55PW9bMV0qcitvWzVdKm4rb1s5XSppLHRoaXMuej1vWzJdKnIrb1s2XSpuK29bMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKHIueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzfWNyb3NzKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LHIpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXIueCxzPXIueSxsPXIuejtyZXR1cm4gdGhpcy54PWkqbC1vKnMsdGhpcy55PW8qYS1uKmwsdGhpcy56PW4qcy1pKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IHI9dC5sZW5ndGhTcSgpO2lmKHI9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IG49dC5kb3QodGhpcykvcjtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqY3QuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoamN0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihqY3QuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgcj1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYocj09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgbj10aGlzLmRvdCh0KS9yO3JldHVybiBNYXRoLmFjb3MoWm8obiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gcipyK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxyLG4pe2xldCBpPU1hdGguc2luKHIpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhyKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4ociksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MociksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMTJdLHRoaXMueT1yWzEzXSx0aGlzLno9clsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9cix0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxyKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxyKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsciozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdFtyKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLHI9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsbj1NYXRoLnNxcnQoMS1USSh0LDIpKTtyZXR1cm4gdGhpcy54PW4qTWF0aC5jb3MociksdGhpcy55PW4qTWF0aC5zaW4ociksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O2oucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgamN0PW5ldyBqLGR1ZT1uZXcgeWksdGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaigxLzAsMS8wLDEvMCkscj1uZXcgaigtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCByPTAsbj10Lmxlbmd0aDtyPG47cisrKXRoaXMuZXhwYW5kQnlQb2ludCh0W3JdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LHIpe2xldCBuPW0xLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCxyPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQscil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQscj0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IG49dC5nZW9tZXRyeTtpZihuIT09dm9pZCAwKWlmKHImJm4uYXR0cmlidXRlcyE9bnVsbCYmbi5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspbTEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQobTEpfWVsc2Ugbi5ib3VuZGluZ0JveD09PW51bGwmJm4uY29tcHV0ZUJvdW5kaW5nQm94KCksWGN0LmNvcHkobi5ib3VuZGluZ0JveCksWGN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKFhjdCk7bGV0IGk9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChpW29dLHIpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsbTEpLG0xLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByLG47cmV0dXJuIHQubm9ybWFsLng+MD8ocj10Lm5vcm1hbC54KnRoaXMubWluLngsbj10Lm5vcm1hbC54KnRoaXMubWF4LngpOihyPXQubm9ybWFsLngqdGhpcy5tYXgueCxuPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhyKz10Lm5vcm1hbC55KnRoaXMubWluLnksbis9dC5ub3JtYWwueSp0aGlzLm1heC55KToocis9dC5ub3JtYWwueSp0aGlzLm1heC55LG4rPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhyKz10Lm5vcm1hbC56KnRoaXMubWluLnosbis9dC5ub3JtYWwueip0aGlzLm1heC56KToocis9dC5ub3JtYWwueip0aGlzLm1heC56LG4rPXQubm9ybWFsLnoqdGhpcy5taW4ueikscjw9LXQuY29uc3RhbnQmJm4+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihMUCksZlYuc3ViVmVjdG9ycyh0aGlzLm1heCxMUCkseDMuc3ViVmVjdG9ycyh0LmEsTFApLGIzLnN1YlZlY3RvcnModC5iLExQKSx3My5zdWJWZWN0b3JzKHQuYyxMUCksUDAuc3ViVmVjdG9ycyhiMyx4MyksSTAuc3ViVmVjdG9ycyh3MyxiMyksZzEuc3ViVmVjdG9ycyh4Myx3Myk7bGV0IHI9WzAsLVAwLnosUDAueSwwLC1JMC56LEkwLnksMCwtZzEueixnMS55LFAwLnosMCwtUDAueCxJMC56LDAsLUkwLngsZzEueiwwLC1nMS54LC1QMC55LFAwLngsMCwtSTAueSxJMC54LDAsLWcxLnksZzEueCwwXTtyZXR1cm4hJGN0KHIseDMsYjMsdzMsZlYpfHwocj1bMSwwLDAsMCwxLDAsMCwwLDFdLCEkY3Qocix4MyxiMyx3MyxmVikpPyExOihwVi5jcm9zc1ZlY3RvcnMoUDAsSTApLHI9W3BWLngscFYueSxwVi56XSwkY3Qocix4MyxiMyx3MyxmVikpfWNsYW1wUG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG0xLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShtMSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KFZkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhWZCksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dGEucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgVmQ9W25ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqXSxtMT1uZXcgaixYY3Q9bmV3IHRhLHgzPW5ldyBqLGIzPW5ldyBqLHczPW5ldyBqLFAwPW5ldyBqLEkwPW5ldyBqLGcxPW5ldyBqLExQPW5ldyBqLGZWPW5ldyBqLHBWPW5ldyBqLF8xPW5ldyBqO2Z1bmN0aW9uICRjdChlLHQscixuLGkpe2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGgtMztvPD1hO28rPTMpe18xLmZyb21BcnJheShlLG8pO2xldCBzPWkueCpNYXRoLmFicyhfMS54KStpLnkqTWF0aC5hYnMoXzEueSkraS56Kk1hdGguYWJzKF8xLnopLGw9dC5kb3QoXzEpLGM9ci5kb3QoXzEpLHU9bi5kb3QoXzEpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5zKXJldHVybiExfXJldHVybiEwfXZhciByZnI9bmV3IHRhLG11ZT1uZXcgaixkVj1uZXcgaixLY3Q9bmV3IGosWmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9cix0aGlzfXNldEZyb21Qb2ludHModCxyKXtsZXQgbj10aGlzLmNlbnRlcjtyIT09dm9pZCAwP24uY29weShyKTpyZnIuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgcj10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1yKnJ9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LHIpe2xldCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiByLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKHIuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxyLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxyfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtLY3Quc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgcj1LY3QubGVuZ3RoU3EoKTtpZihyPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgbj1NYXRoLnNxcnQociksaT0obi10aGlzLnJhZGl1cykqLjU7dGhpcy5jZW50ZXIuYWRkKEtjdC5tdWx0aXBseVNjYWxhcihpL24pKSx0aGlzLnJhZGl1cys9aX1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP2RWLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOmRWLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQobXVlLmNvcHkodC5jZW50ZXIpLmFkZChkVikpLHRoaXMuZXhwYW5kQnlQb2ludChtdWUuY29weSh0LmNlbnRlcikuc3ViKGRWKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sVWQ9bmV3IGosWmN0PW5ldyBqLG1WPW5ldyBqLEwwPW5ldyBqLEpjdD1uZXcgaixnVj1uZXcgaixRY3Q9bmV3IGosSmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LFVkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7ci5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBuPXIuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP3IuY29weSh0aGlzLm9yaWdpbik6ci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCByPVVkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gcjwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihVZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5vcmlnaW4pLFVkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQscixuLGkpe1pjdC5jb3B5KHQpLmFkZChyKS5tdWx0aXBseVNjYWxhciguNSksbVYuY29weShyKS5zdWIodCkubm9ybWFsaXplKCksTDAuY29weSh0aGlzLm9yaWdpbikuc3ViKFpjdCk7bGV0IG89dC5kaXN0YW5jZVRvKHIpKi41LGE9LXRoaXMuZGlyZWN0aW9uLmRvdChtVikscz1MMC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LUwwLmRvdChtViksYz1MMC5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1hKmEpLGgsZixwLGQ7aWYodT4wKWlmKGg9YSpsLXMsZj1hKnMtbCxkPW8qdSxoPj0wKWlmKGY+PS1kKWlmKGY8PWQpe2xldCBnPTEvdTtoKj1nLGYqPWcscD1oKihoK2EqZisyKnMpK2YqKGEqaCtmKzIqbCkrY31lbHNlIGY9byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZD8oaD1NYXRoLm1heCgwLC0oLWEqbytzKSksZj1oPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk6Zjw9ZD8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShhKm8rcykpLGY9aD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPWE+MD8tbzpvLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO3JldHVybiBuJiZuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksaSYmaS5jb3B5KG1WKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoWmN0KSxwfWludGVyc2VjdFNwaGVyZSh0LHIpe1VkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBuPVVkLmRvdCh0aGlzLmRpcmVjdGlvbiksaT1VZC5kb3QoVWQpLW4qbixvPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1pKSxzPW4tYSxsPW4rYTtyZXR1cm4gczwwJiZsPDA/bnVsbDpzPDA/dGhpcy5hdChsLHIpOnRoaXMuYXQocyxyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCByPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYocj09PTApcmV0dXJuIHQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT09PTA/MDpudWxsO2xldCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9yO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LHIpe2xldCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBuPT09bnVsbD9udWxsOnRoaXMuYXQobixyKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IHI9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiByPT09MHx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpyPDB9aW50ZXJzZWN0Qm94KHQscil7bGV0IG4saSxvLGEscyxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGg9MS90aGlzLmRpcmVjdGlvbi56LGY9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KG49KHQubWluLngtZi54KSpjLGk9KHQubWF4LngtZi54KSpjKToobj0odC5tYXgueC1mLngpKmMsaT0odC5taW4ueC1mLngpKmMpLHU+PTA/KG89KHQubWluLnktZi55KSp1LGE9KHQubWF4LnktZi55KSp1KToobz0odC5tYXgueS1mLnkpKnUsYT0odC5taW4ueS1mLnkpKnUpLG4+YXx8bz5pfHwoKG8+bnx8biE9PW4pJiYobj1vKSwoYTxpfHxpIT09aSkmJihpPWEpLGg+PTA/KHM9KHQubWluLnotZi56KSpoLGw9KHQubWF4LnotZi56KSpoKToocz0odC5tYXguei1mLnopKmgsbD0odC5taW4uei1mLnopKmgpLG4+bHx8cz5pKXx8KChzPm58fG4hPT1uKSYmKG49cyksKGw8aXx8aSE9PWkpJiYoaT1sKSxpPDApP251bGw6dGhpcy5hdChuPj0wP246aSxyKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0aGlzLmludGVyc2VjdEJveCh0LFVkKSE9PW51bGx9aW50ZXJzZWN0VHJpYW5nbGUodCxyLG4saSxvKXtKY3Quc3ViVmVjdG9ycyhyLHQpLGdWLnN1YlZlY3RvcnMobix0KSxRY3QuY3Jvc3NWZWN0b3JzKEpjdCxnVik7bGV0IGE9dGhpcy5kaXJlY3Rpb24uZG90KFFjdCkscztpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7cz0xfWVsc2UgaWYoYTwwKXM9LTEsYT0tYTtlbHNlIHJldHVybiBudWxsO0wwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoZ1YuY3Jvc3NWZWN0b3JzKEwwLGdWKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KEpjdC5jcm9zcyhMMCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IHU9LXMqTDAuZG90KFFjdCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9hLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxNZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09cix5WzhdPW4seVsxMl09aSx5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPXUseVsxMF09aCx5WzE0XT1mLHlbM109cCx5WzddPWQseVsxMV09Zyx5WzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgTWUoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0scls5XT1uWzldLHJbMTBdPW5bMTBdLHJbMTFdPW5bMTFdLHJbMTJdPW5bMTJdLHJbMTNdPW5bMTNdLHJbMTRdPW5bMTRdLHJbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiByWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0sclszXSxyWzZdLDAsclsxXSxyWzRdLHJbN10sMCxyWzJdLHJbNV0scls4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxyLG4pe3JldHVybiB0aGlzLnNldCh0Lngsci54LG4ueCwwLHQueSxyLnksbi55LDAsdC56LHIueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gclswXT1uWzBdKmksclsxXT1uWzFdKmksclsyXT1uWzJdKmksclszXT0wLHJbNF09bls0XSpvLHJbNV09bls1XSpvLHJbNl09bls2XSpvLHJbN109MCxyWzhdPW5bOF0qYSxyWzldPW5bOV0qYSxyWzEwXT1uWzEwXSphLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQueixhPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGkpLHU9TWF0aC5jb3MobyksaD1NYXRoLnNpbihvKTtpZih0Lm9yZGVyPT09IlhZWiIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPS1sKmgscls4XT1jLHJbMV09cCtkKmMscls1XT1mLWcqYyxyWzldPS1zKmwsclsyXT1nLWYqYyxyWzZdPWQrcCpjLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWVhaIil7bGV0IGY9bCp1LHA9bCpoLGQ9Yyp1LGc9YypoO3JbMF09ZitnKnMscls0XT1kKnMtcCxyWzhdPWEqYyxyWzFdPWEqaCxyWzVdPWEqdSxyWzldPS1zLHJbMl09cCpzLWQscls2XT1nK2YqcyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYtZypzLHJbNF09LWEqaCxyWzhdPWQrcCpzLHJbMV09cCtkKnMscls1XT1hKnUscls5XT1nLWYqcyxyWzJdPS1hKmMscls2XT1zLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWllYIil7bGV0IGY9YSp1LHA9YSpoLGQ9cyp1LGc9cypoO3JbMF09bCp1LHJbNF09ZCpjLXAscls4XT1mKmMrZyxyWzFdPWwqaCxyWzVdPWcqYytmLHJbOV09cCpjLWQsclsyXT0tYyxyWzZdPXMqbCxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllaWCIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPWctZipoLHJbOF09ZCpoK3AsclsxXT1oLHJbNV09YSp1LHJbOV09LXMqdSxyWzJdPS1jKnUscls2XT1wKmgrZCxyWzEwXT1mLWcqaH1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7bGV0IGY9YSpsLHA9YSpjLGQ9cypsLGc9cypjO3JbMF09bCp1LHJbNF09LWgscls4XT1jKnUsclsxXT1mKmgrZyxyWzVdPWEqdSxyWzldPXAqaC1kLHJbMl09ZCpoLXAscls2XT1zKnUsclsxMF09ZypoK2Z9cmV0dXJuIHJbM109MCxyWzddPTAsclsxMV09MCxyWzEyXT0wLHJbMTNdPTAsclsxNF09MCxyWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShuZnIsdCxpZnIpfWxvb2tBdCh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4ga2wuc3ViVmVjdG9ycyh0LHIpLGtsLmxlbmd0aFNxKCk9PT0wJiYoa2wuej0xKSxrbC5ub3JtYWxpemUoKSxrMC5jcm9zc1ZlY3RvcnMobixrbCksazAubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhuLnopPT09MT9rbC54Kz0xZS00OmtsLnorPTFlLTQsa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpKSxrMC5ub3JtYWxpemUoKSxfVi5jcm9zc1ZlY3RvcnMoa2wsazApLGlbMF09azAueCxpWzRdPV9WLngsaVs4XT1rbC54LGlbMV09azAueSxpWzVdPV9WLnksaVs5XT1rbC55LGlbMl09azAueixpWzZdPV9WLnosaVsxMF09a2wueix0aGlzfW11bHRpcGx5KHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQscikpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bNF0sbD1uWzhdLGM9blsxMl0sdT1uWzFdLGg9bls1XSxmPW5bOV0scD1uWzEzXSxkPW5bMl0sZz1uWzZdLF89blsxMF0seT1uWzE0XSx4PW5bM10sYj1uWzddLFM9blsxMV0sQz1uWzE1XSxQPWlbMF0saz1pWzRdLE89aVs4XSxEPWlbMTJdLEI9aVsxXSxJPWlbNV0sTD1pWzldLFI9aVsxM10sRj1pWzJdLHo9aVs2XSxVPWlbMTBdLFc9aVsxNF0sWj1pWzNdLHJ0PWlbN10sb3Q9aVsxMV0sc3Q9aVsxNV07cmV0dXJuIG9bMF09YSpQK3MqQitsKkYrYypaLG9bNF09YSprK3MqSStsKnorYypydCxvWzhdPWEqTytzKkwrbCpVK2Mqb3Qsb1sxMl09YSpEK3MqUitsKlcrYypzdCxvWzFdPXUqUCtoKkIrZipGK3AqWixvWzVdPXUqaytoKkkrZip6K3AqcnQsb1s5XT11Kk8raCpMK2YqVStwKm90LG9bMTNdPXUqRCtoKlIrZipXK3Aqc3Qsb1syXT1kKlArZypCK18qRit5Klosb1s2XT1kKmsrZypJK18qeit5KnJ0LG9bMTBdPWQqTytnKkwrXypVK3kqb3Qsb1sxNF09ZCpEK2cqUitfKlcreSpzdCxvWzNdPXgqUCtiKkIrUypGK0MqWixvWzddPXgqaytiKkkrUyp6K0MqcnQsb1sxMV09eCpPK2IqTCtTKlUrQypvdCxvWzE1XT14KkQrYipSK1MqVytDKnN0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzRdKj10LHJbOF0qPXQsclsxMl0qPXQsclsxXSo9dCxyWzVdKj10LHJbOV0qPXQsclsxM10qPXQsclsyXSo9dCxyWzZdKj10LHJbMTBdKj10LHJbMTRdKj10LHJbM10qPXQscls3XSo9dCxyWzExXSo9dCxyWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0sbj10WzRdLGk9dFs4XSxvPXRbMTJdLGE9dFsxXSxzPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLHA9dFsxNF0sZD10WzNdLGc9dFs3XSxfPXRbMTFdLHk9dFsxNV07cmV0dXJuIGQqKCtvKmwqaC1pKmMqaC1vKnMqZituKmMqZitpKnMqcC1uKmwqcCkrZyooK3IqbCpwLXIqYypmK28qYSpmLWkqYSpwK2kqYyp1LW8qbCp1KStfKigrcipjKmgtcipzKnAtbyphKmgrbiphKnArbypzKnUtbipjKnUpK3kqKC1pKnMqdS1yKmwqaCtyKnMqZitpKmEqaC1uKmEqZituKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyO3JldHVybiByPXRbMV0sdFsxXT10WzRdLHRbNF09cixyPXRbMl0sdFsyXT10WzhdLHRbOF09cixyPXRbNl0sdFs2XT10WzldLHRbOV09cixyPXRbM10sdFszXT10WzEyXSx0WzEyXT1yLHI9dFs3XSx0WzddPXRbMTNdLHRbMTNdPXIscj10WzExXSx0WzExXT10WzE0XSx0WzE0XT1yLHRoaXN9c2V0UG9zaXRpb24odCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109cixpWzE0XT1uKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0scD10WzExXSxkPXRbMTJdLGc9dFsxM10sXz10WzE0XSx5PXRbMTVdLHg9aCpfKmMtZypmKmMrZypsKnAtcypfKnAtaCpsKnkrcypmKnksYj1kKmYqYy11Kl8qYy1kKmwqcCthKl8qcCt1KmwqeS1hKmYqeSxTPXUqZypjLWQqaCpjK2QqcypwLWEqZypwLXUqcyp5K2EqaCp5LEM9ZCpoKmwtdSpnKmwtZCpzKmYrYSpnKmYrdSpzKl8tYSpoKl8sUD1yKngrbipiK2kqUytvKkM7aWYoUD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBrPTEvUDtyZXR1cm4gdFswXT14KmssdFsxXT0oZypmKm8taCpfKm8tZyppKnArbipfKnAraCppKnktbipmKnkpKmssdFsyXT0ocypfKm8tZypsKm8rZyppKmMtbipfKmMtcyppKnkrbipsKnkpKmssdFszXT0oaCpsKm8tcypmKm8taCppKmMrbipmKmMrcyppKnAtbipsKnApKmssdFs0XT1iKmssdFs1XT0odSpfKm8tZCpmKm8rZCppKnAtcipfKnAtdSppKnkrcipmKnkpKmssdFs2XT0oZCpsKm8tYSpfKm8tZCppKmMrcipfKmMrYSppKnktcipsKnkpKmssdFs3XT0oYSpmKm8tdSpsKm8rdSppKmMtcipmKmMtYSppKnArcipsKnApKmssdFs4XT1TKmssdFs5XT0oZCpoKm8tdSpnKm8tZCpuKnArcipnKnArdSpuKnktcipoKnkpKmssdFsxMF09KGEqZypvLWQqcypvK2QqbipjLXIqZypjLWEqbip5K3Iqcyp5KSprLHRbMTFdPSh1KnMqby1hKmgqby11Km4qYytyKmgqYythKm4qcC1yKnMqcCkqayx0WzEyXT1DKmssdFsxM109KHUqZyppLWQqaCppK2QqbipmLXIqZypmLXUqbipfK3IqaCpfKSprLHRbMTRdPShkKnMqaS1hKmcqaS1kKm4qbCtyKmcqbCthKm4qXy1yKnMqXykqayx0WzE1XT0oYSpoKmktdSpzKmkrdSpuKmwtcipoKmwtYSpuKmYrcipzKmYpKmssdGhpc31zY2FsZSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LG89dC56O3JldHVybiByWzBdKj1uLHJbNF0qPWkscls4XSo9byxyWzFdKj1uLHJbNV0qPWkscls5XSo9byxyWzJdKj1uLHJbNl0qPWksclsxMF0qPW8sclszXSo9bixyWzddKj1pLHJbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sbj10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxpPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChyLG4saSkpfW1ha2VUcmFuc2xhdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsciwwLDAsMSxuLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsciwtbiwwLDAsbixyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsMCxuLDAsMCwxLDAsMCwtbiwwLHIsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQociwtbiwwLDAsbixyLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz0xLW4sYT10Lngscz10LnksbD10LnosYz1vKmEsdT1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStuLGMqcy1pKmwsYypsK2kqcywwLGMqcytpKmwsdSpzK24sdSpsLWkqYSwwLGMqbC1pKnMsdSpsK2kqYSxvKmwqbCtuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxyLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsciwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsbixvLDAsdCwxLGEsMCxyLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPXIuX3gsYT1yLl95LHM9ci5feixsPXIuX3csYz1vK28sdT1hK2EsaD1zK3MsZj1vKmMscD1vKnUsZD1vKmgsZz1hKnUsXz1hKmgseT1zKmgseD1sKmMsYj1sKnUsUz1sKmgsQz1uLngsUD1uLnksaz1uLno7cmV0dXJuIGlbMF09KDEtKGcreSkpKkMsaVsxXT0ocCtTKSpDLGlbMl09KGQtYikqQyxpWzNdPTAsaVs0XT0ocC1TKSpQLGlbNV09KDEtKGYreSkpKlAsaVs2XT0oXyt4KSpQLGlbN109MCxpWzhdPShkK2IpKmssaVs5XT0oXy14KSprLGlbMTBdPSgxLShmK2cpKSprLGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPVMzLnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCksYT1TMy5zZXQoaVs0XSxpWzVdLGlbNl0pLmxlbmd0aCgpLHM9UzMuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSxpaC5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvYSxoPTEvcztyZXR1cm4gaWguZWxlbWVudHNbMF0qPWMsaWguZWxlbWVudHNbMV0qPWMsaWguZWxlbWVudHNbMl0qPWMsaWguZWxlbWVudHNbNF0qPXUsaWguZWxlbWVudHNbNV0qPXUsaWguZWxlbWVudHNbNl0qPXUsaWguZWxlbWVudHNbOF0qPWgsaWguZWxlbWVudHNbOV0qPWgsaWguZWxlbWVudHNbMTBdKj1oLHIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGloKSxuLng9byxuLnk9YSxuLno9cyx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LHIsbixpLG8sYSl7YT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTIqby8oci10KSxjPTIqby8obi1pKSx1PShyK3QpLyhyLXQpLGg9KG4raSkvKG4taSksZj0tKGErbykvKGEtbykscD0tMiphKm8vKGEtbyk7cmV0dXJuIHNbMF09bCxzWzRdPTAsc1s4XT11LHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPWgsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPWYsc1sxNF09cCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oci10KSxjPTEvKG4taSksdT0xLyhhLW8pLGg9KHIrdCkqbCxmPShuK2kpKmMscD0oYStvKSp1O3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS1oLHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LWYsc1syXT0wLHNbNl09MCxzWzEwXT0tMip1LHNbMTRdPS1wLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8MTY7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rcl07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtyXT1uWzBdLHRbcisxXT1uWzFdLHRbcisyXT1uWzJdLHRbciszXT1uWzNdLHRbcis0XT1uWzRdLHRbcis1XT1uWzVdLHRbcis2XT1uWzZdLHRbcis3XT1uWzddLHRbcis4XT1uWzhdLHRbcis5XT1uWzldLHRbcisxMF09blsxMF0sdFtyKzExXT1uWzExXSx0W3IrMTJdPW5bMTJdLHRbcisxM109blsxM10sdFtyKzE0XT1uWzE0XSx0W3IrMTVdPW5bMTVdLHR9fTtNZS5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBTMz1uZXcgaixpaD1uZXcgTWUsbmZyPW5ldyBqKDAsMCwwKSxpZnI9bmV3IGooMSwxLDEpLGswPW5ldyBqLF9WPW5ldyBqLGtsPW5ldyBqLGd1ZT1uZXcgTWUsX3VlPW5ldyB5aSx0bT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPXRtLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQscj10aGlzLl9vcmRlcixuPSEwKXtsZXQgaT10LmVsZW1lbnRzLG89aVswXSxhPWlbNF0scz1pWzhdLGw9aVsxXSxjPWlbNV0sdT1pWzldLGg9aVsyXSxmPWlbNl0scD1pWzEwXTtzd2l0Y2gocil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFpvKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUscCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVpvKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihabyhmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1abyhoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWm8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMscCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWm8oYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIityKX1yZXR1cm4gdGhpcy5fb3JkZXI9cixuPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQscixuKXtyZXR1cm4gZ3VlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGd1ZSxyLG4pfXNldEZyb21WZWN0b3IzKHQscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LHIpfXJlb3JkZXIodCl7cmV0dXJuIF91ZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihfdWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdFszXSE9PXZvaWQgMCYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RtLnByb3RvdHlwZS5pc0V1bGVyPSEwO3RtLkRlZmF1bHRPcmRlcj0iWFlaIjt0bS5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBYMz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuKHRoaXMubWFzayZ0Lm1hc2spIT09MH1pc0VuYWJsZWQodCl7cmV0dXJuKHRoaXMubWFzayYoMTw8dHwwKSkhPT0wfX0sb2ZyPTAseXVlPW5ldyBqLE0zPW5ldyB5aSxxZD1uZXcgTWUseVY9bmV3IGosa1A9bmV3IGosYWZyPW5ldyBqLHNmcj1uZXcgeWksdnVlPW5ldyBqKDEsMCwwKSx4dWU9bmV3IGooMCwxLDApLGJ1ZT1uZXcgaigwLDAsMSksbGZyPXt0eXBlOiJhZGRlZCJ9LHd1ZT17dHlwZToicmVtb3ZlZCJ9LG9yPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm9mcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPW9yLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBqLHI9bmV3IHRtLG49bmV3IHlpLGk9bmV3IGooMSwxLDEpO2Z1bmN0aW9uIG8oKXtuLnNldEZyb21FdWxlcihyLCExKX1mdW5jdGlvbiBhKCl7ci5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9ci5fb25DaGFuZ2Uobyksbi5fb25DaGFuZ2UoYSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTWV9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGtpfX0pLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLm1hdHJpeFdvcmxkPW5ldyBNZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxyKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LHIpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShNMyksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LHIpe3JldHVybiBNMy5zZXRGcm9tQXhpc0FuZ2xlKHQsciksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHZ1ZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh4dWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYnVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LHIpe3JldHVybiB5dWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCh5dWUubXVsdGlwbHlTY2FsYXIocikpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXModnVlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHh1ZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhidWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHFkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LHIsbil7dC5pc1ZlY3RvcjM/eVYuY29weSh0KTp5Vi5zZXQodCxyLG4pO2xldCBpPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGtQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/cWQubG9va0F0KGtQLHlWLHRoaXMudXApOnFkLmxvb2tBdCh5VixrUCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHFkKSxpJiYocWQuZXh0cmFjdFJvdGF0aW9uKGkubWF0cml4V29ybGQpLE0zLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCByPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0aGlzLmFkZChhcmd1bWVudHNbcl0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnBhcmVudCE9PW51bGwmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQobGZyKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbbl0pO3JldHVybiB0aGlzfWxldCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpLHQuZGlzcGF0Y2hFdmVudCh3dWUpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IHI9dGhpcy5jaGlsZHJlblt0XTtyLnBhcmVudD1udWxsLHIuZGlzcGF0Y2hFdmVudCh3dWUpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpLHQucGFyZW50IT09bnVsbCYmKHQucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KHFkKSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQscil7aWYodGhpc1t0XT09PXIpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtsZXQgYT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxyKTtpZihhIT09dm9pZCAwKXJldHVybiBhfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHQsYWZyKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHNmcix0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCByPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KHJbOF0scls5XSxyWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCByPXRoaXMucGFyZW50O3IhPT1udWxsJiYodChyKSxyLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7bGV0IG49dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZuIT09bnVsbCYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkscj09PSEwKXtsZXQgaT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixuPXt9O3ImJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCBpPXt9O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoaS5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKGkucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBvKHMsbCl7cmV0dXJuIHNbbC51dWlkXT09PXZvaWQgMCYmKHNbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9pLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihpLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihpLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtpLmdlb21ldHJ5PW8odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBzPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihzIT09dm9pZCAwJiZzLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9cy5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107byh0LnNoYXBlcyxoKX1lbHNlIG8odC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IHM9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKXMucHVzaChvKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtpLm1hdGVyaWFsPXN9ZWxzZSBpLm1hdGVyaWFsPW8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7aS5jaGlsZHJlbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylpLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltzXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe2kuYW5pbWF0aW9ucz1bXTtmb3IobGV0IHM9MDtzPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7cysrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbc107aS5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsbCkpfX1pZihyKXtsZXQgcz1hKHQuZ2VvbWV0cmllcyksbD1hKHQubWF0ZXJpYWxzKSxjPWEodC50ZXh0dXJlcyksdT1hKHQuaW1hZ2VzKSxoPWEodC5zaGFwZXMpLGY9YSh0LnNrZWxldG9ucykscD1hKHQuYW5pbWF0aW9ucyk7cy5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1zKSxsLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKG4udGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKG4uaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihuLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9ZikscC5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1wKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIGEocyl7bGV0IGw9W107Zm9yKGxldCBjIGluIHMpe2xldCB1PXNbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LHI9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxyPT09ITApZm9yKGxldCBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe2xldCBpPXQuY2hpbGRyZW5bbl07dGhpcy5hZGQoaS5jbG9uZSgpKX1yZXR1cm4gdGhpc319O29yLkRlZmF1bHRVcD1uZXcgaigwLDEsMCk7b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7b3IucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIG9oPW5ldyBqLEdkPW5ldyBqLHR1dD1uZXcgaixXZD1uZXcgaixFMz1uZXcgaixUMz1uZXcgaixTdWU9bmV3IGosZXV0PW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosb2k9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3RoaXMuYT10LHRoaXMuYj1yLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxyLG4saSl7aS5zdWJWZWN0b3JzKG4sciksb2guc3ViVmVjdG9ycyh0LHIpLGkuY3Jvc3Mob2gpO2xldCBvPWkubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP2kubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOmkuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQscixuLGksbyl7b2guc3ViVmVjdG9ycyhpLHIpLEdkLnN1YlZlY3RvcnMobixyKSx0dXQuc3ViVmVjdG9ycyh0LHIpO2xldCBhPW9oLmRvdChvaCkscz1vaC5kb3QoR2QpLGw9b2guZG90KHR1dCksYz1HZC5kb3QoR2QpLHU9R2QuZG90KHR1dCksaD1hKmMtcypzO2lmKGg9PT0wKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLHA9KGMqbC1zKnUpKmYsZD0oYSp1LXMqbCkqZjtyZXR1cm4gby5zZXQoMS1wLWQsZCxwKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LHIsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksV2QueD49MCYmV2QueT49MCYmV2QueCtXZC55PD0xfXN0YXRpYyBnZXRVVih0LHIsbixpLG8sYSxzLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LHIsbixpLFdkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sV2QueCksbC5hZGRTY2FsZWRWZWN0b3IoYSxXZC55KSxsLmFkZFNjYWxlZFZlY3RvcihzLFdkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxyLG4saSl7cmV0dXJuIG9oLnN1YlZlY3RvcnMobixyKSxHZC5zdWJWZWN0b3JzKHQsciksb2guY3Jvc3MoR2QpLmRvdChpKTwwfXNldCh0LHIsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KHIpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbcl0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbaV0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBvaC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLEdkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksb2guY3Jvc3MoR2QpLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIG9pLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LHIpe3JldHVybiBvaS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyKX1nZXRVVih0LHIsbixpLG8pe3JldHVybiBvaS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLHIsbixpLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIG9pLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gb2kuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7bGV0IG49dGhpcy5hLGk9dGhpcy5iLG89dGhpcy5jLGEscztFMy5zdWJWZWN0b3JzKGksbiksVDMuc3ViVmVjdG9ycyhvLG4pLGV1dC5zdWJWZWN0b3JzKHQsbik7bGV0IGw9RTMuZG90KGV1dCksYz1UMy5kb3QoZXV0KTtpZihsPD0wJiZjPD0wKXJldHVybiByLmNvcHkobik7cnV0LnN1YlZlY3RvcnModCxpKTtsZXQgdT1FMy5kb3QocnV0KSxoPVQzLmRvdChydXQpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIHIuY29weShpKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIGE9bC8obC11KSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpO251dC5zdWJWZWN0b3JzKHQsbyk7bGV0IHA9RTMuZG90KG51dCksZD1UMy5kb3QobnV0KTtpZihkPj0wJiZwPD1kKXJldHVybiByLmNvcHkobyk7bGV0IGc9cCpjLWwqZDtpZihnPD0wJiZjPj0wJiZkPD0wKXJldHVybiBzPWMvKGMtZCksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihUMyxzKTtsZXQgXz11KmQtcCpoO2lmKF88PTAmJmgtdT49MCYmcC1kPj0wKXJldHVybiBTdWUuc3ViVmVjdG9ycyhvLGkpLHM9KGgtdSkvKGgtdSsocC1kKSksci5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihTdWUscyk7bGV0IHk9MS8oXytnK2YpO3JldHVybiBhPWcqeSxzPWYqeSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpLmFkZFNjYWxlZFZlY3RvcihUMyxzKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxjZnI9MCxxaT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpjZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPVYzLHRoaXMuc2lkZT1JMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9UGh0LHRoaXMuYmxlbmREc3Q9SWh0LHRoaXMuYmxlbmRFcXVhdGlvbj1NMSx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPWlVLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9a2ZlLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW5VLHRoaXMuc3RlbmNpbFpGYWlsPW5VLHRoaXMuc3RlbmNpbFpQYXNzPW5VLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCByIGluIHQpe2xldCBuPXRbcl07aWYobj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrcisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKHI9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PUFodDtjb250aW51ZX1sZXQgaT10aGlzW3JdO2lmKGk9PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrcisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpO2NvbnRpbnVlfWkmJmkuaXNDb2xvcj9pLnNldChuKTppJiZpLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/aS5jb3B5KG4pOnRoaXNbcl09bn19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtyJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07bi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx0aGlzLnJvdWdobmVzcyE9PXZvaWQgMCYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx0aGlzLm1ldGFsbmVzcyE9PXZvaWQgMCYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuIT09dm9pZCAwJiYobi5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYobi5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdGhpcy5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKG4uc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiZ0aGlzLmVtaXNzaXZlSW50ZW5zaXR5IT09MSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYobi5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYobi5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdGhpcy5zaGluaW5lc3MhPT12b2lkIDAmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdGhpcy5jbGVhcmNvYXQhPT12b2lkIDAmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MhPT12b2lkIDAmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdGhpcy5jb21iaW5lIT09dm9pZCAwJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHRoaXMuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHRoaXMucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHRoaXMucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudGhpY2tuZXNzIT09dm9pZCAwJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdGhpcy5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdGhpcy5zaXplIT09dm9pZCAwJiYobi5zaXplPXRoaXMuc2l6ZSksdGhpcy5zaGFkb3dTaWRlIT09bnVsbCYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHRoaXMuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1WMyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09STEmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLHRoaXMudHJhbnNwYXJlbnQ9PT0hMCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmdGhpcy5yb3RhdGlvbiE9PTAmJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLHRoaXMucG9seWdvbk9mZnNldD09PSEwJiYobi5wb2x5Z29uT2Zmc2V0PSEwKSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IhPT0wJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMhPT0wJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiZ0aGlzLmxpbmV3aWR0aCE9PTEmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdGhpcy5kYXNoU2l6ZSE9PXZvaWQgMCYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdGhpcy5nYXBTaXplIT09dm9pZCAwJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdGhpcy5zY2FsZSE9PXZvaWQgMCYmKG4uc2NhbGU9dGhpcy5zY2FsZSksdGhpcy5kaXRoZXJpbmc9PT0hMCYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLHRoaXMuYWxwaGFUb0NvdmVyYWdlPT09ITAmJihuLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9PT0hMCYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSx0aGlzLndpcmVmcmFtZT09PSEwJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksdGhpcy53aXJlZnJhbWVMaW5lY2FwIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLHRoaXMud2lyZWZyYW1lTGluZWpvaW4hPT0icm91bmQiJiYobi53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSx0aGlzLmZsYXRTaGFkaW5nPT09ITAmJihuLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLHRoaXMudmlzaWJsZT09PSExJiYobi52aXNpYmxlPSExKSx0aGlzLnRvbmVNYXBwZWQ9PT0hMSYmKG4udG9uZU1hcHBlZD0hMSksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtmdW5jdGlvbiBpKG8pe2xldCBhPVtdO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1vW3NdO2RlbGV0ZSBsLm1ldGFkYXRhLGEucHVzaChsKX1yZXR1cm4gYX1pZihyKXtsZXQgbz1pKHQudGV4dHVyZXMpLGE9aSh0LmltYWdlcyk7by5sZW5ndGg+MCYmKG4udGV4dHVyZXM9byksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpfXJldHVybiBufWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCByPXQuY2xpcHBpbmdQbGFuZXMsbj1udWxsO2lmKHIhPT1udWxsKXtsZXQgaT1yLmxlbmd0aDtuPW5ldyBBcnJheShpKTtmb3IobGV0IG89MDtvIT09aTsrK28pbltvXT1yW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07cWkucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtzaC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgSW49bmV3IGosdlY9bmV3IEx0LEplPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLm5vcm1hbGl6ZWQ9bj09PSEwLHRoaXMudXNhZ2U9VzMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLml0ZW1TaXplLG4qPXIuaXRlbVNpemU7Zm9yKGxldCBpPTAsbz10aGlzLml0ZW1TaXplO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgbmUpLHJbbisrXT1hLnIscltuKytdPWEuZyxyW24rK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgTHQpLHJbbisrXT1hLngscltuKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGopLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgZW4pLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56LHJbbisrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKXZWLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxyKSx2Vi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShyLHZWLngsdlYueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksSW4uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKHIsSW4ueCxJbi55LEluLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi54PXRoaXMuZ2V0WChyKSxJbi55PXRoaXMuZ2V0WShyKSxJbi56PXRoaXMuZ2V0WihyKSxJbi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspSW4ueD10aGlzLmdldFgociksSW4ueT10aGlzLmdldFkociksSW4uej10aGlzLmdldFoociksSW4uYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUluLng9dGhpcy5nZXRYKHIpLEluLnk9dGhpcy5nZXRZKHIpLEluLno9dGhpcy5nZXRaKHIpLEluLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihyLEluLngsSW4ueSxJbi56KTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxyKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPXIsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPXIsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPXIsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPXIsdGhpc31zZXRYWSh0LHIsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQscixuLGksbyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1XMyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O0plLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgY1U9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDhBcnJheSh0KSxyLG4pfX0sdVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQ4QXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyLG4pfX0sZlU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDE2QXJyYXkodCkscixuKX19LCQzPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX0scFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCkscixuKX19LEszPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLHIsbil9fTtkVS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciB4ZT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLHIsbil9fSxtVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQ2NEFycmF5KHQpLHIsbil9fSx1ZnI9MCxYYz1uZXcgTWUsaXV0PW5ldyBvcixDMz1uZXcgaixSbD1uZXcgdGEsUlA9bmV3IHRhLExvPW5ldyBqLFBlPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnVmcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KERmZSh0KT9LMzokMykodCwxKTp0aGlzLmluZGV4PXQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPXIsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XSE9PXZvaWQgMH1hZGRHcm91cCh0LHIsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OnIsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxyKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PXJ9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtyIT09dm9pZCAwJiYoci5hcHBseU1hdHJpeDQodCksci5uZWVkc1VwZGF0ZT0hMCk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZihuIT09dm9pZCAwKXtsZXQgbz1uZXcga2koKS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChvKSxuLm5lZWRzVXBkYXRlPSEwfWxldCBpPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBpIT09dm9pZCAwJiYoaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksaS5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWSh0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVaKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXRyYW5zbGF0ZSh0LHIsbil7cmV0dXJuIFhjLm1ha2VUcmFuc2xhdGlvbih0LHIsbiksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9c2NhbGUodCxyLG4pe3JldHVybiBYYy5tYWtlU2NhbGUodCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gaXV0Lmxvb2tBdCh0KSxpdXQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaXV0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihDMykubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoQzMueCxDMy55LEMzLnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPXRbbl07ci5wdXNoKG8ueCxvLnksby56fHwwKX1yZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXt0aGlzLmJvdW5kaW5nQm94PT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHRhKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgaigtMS8wLC0xLzAsLTEvMCksbmV3IGooMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO1JsLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixSbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxSbC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWF4KSl9fWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXt0aGlzLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IFpmKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaiwxLzApO3JldHVybn1pZih0KXtsZXQgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dO1JQLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyhSbC5taW4sUlAubWluKSxSbC5leHBhbmRCeVBvaW50KExvKSxMby5hZGRWZWN0b3JzKFJsLm1heCxSUC5tYXgpLFJsLmV4cGFuZEJ5UG9pbnQoTG8pKTooUmwuZXhwYW5kQnlQb2ludChSUC5taW4pLFJsLmV4cGFuZEJ5UG9pbnQoUlAubWF4KSl9UmwuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSk7aWYocilmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9cy5jb3VudDtjPHU7YysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoQzMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLExvLmFkZChDMykpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KGkpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmF0dHJpYnV0ZXM7aWYodD09PW51bGx8fHIucG9zaXRpb249PT12b2lkIDB8fHIubm9ybWFsPT09dm9pZCAwfHxyLnV2PT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtyZXR1cm59bGV0IG49dC5hcnJheSxpPXIucG9zaXRpb24uYXJyYXksbz1yLm5vcm1hbC5hcnJheSxhPXIudXYuYXJyYXkscz1pLmxlbmd0aC8zO3IudGFuZ2VudD09PXZvaWQgMCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KDQqcyksNCkpO2xldCBsPXIudGFuZ2VudC5hcnJheSxjPVtdLHU9W107Zm9yKGxldCBCPTA7QjxzO0IrKyljW0JdPW5ldyBqLHVbQl09bmV3IGo7bGV0IGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IGoseD1uZXcgajtmdW5jdGlvbiBiKEIsSSxMKXtoLmZyb21BcnJheShpLEIqMyksZi5mcm9tQXJyYXkoaSxJKjMpLHAuZnJvbUFycmF5KGksTCozKSxkLmZyb21BcnJheShhLEIqMiksZy5mcm9tQXJyYXkoYSxJKjIpLF8uZnJvbUFycmF5KGEsTCoyKSxmLnN1YihoKSxwLnN1YihoKSxnLnN1YihkKSxfLnN1YihkKTtsZXQgUj0xLyhnLngqXy55LV8ueCpnLnkpOyFpc0Zpbml0ZShSKXx8KHkuY29weShmKS5tdWx0aXBseVNjYWxhcihfLnkpLmFkZFNjYWxlZFZlY3RvcihwLC1nLnkpLm11bHRpcGx5U2NhbGFyKFIpLHguY29weShwKS5tdWx0aXBseVNjYWxhcihnLngpLmFkZFNjYWxlZFZlY3RvcihmLC1fLngpLm11bHRpcGx5U2NhbGFyKFIpLGNbQl0uYWRkKHkpLGNbSV0uYWRkKHkpLGNbTF0uYWRkKHkpLHVbQl0uYWRkKHgpLHVbSV0uYWRkKHgpLHVbTF0uYWRkKHgpKX1sZXQgUz10aGlzLmdyb3VwcztTLmxlbmd0aD09PTAmJihTPVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MyliKG5beiswXSxuW3orMV0sblt6KzJdKX1sZXQgQz1uZXcgaixQPW5ldyBqLGs9bmV3IGosTz1uZXcgajtmdW5jdGlvbiBEKEIpe2suZnJvbUFycmF5KG8sQiozKSxPLmNvcHkoayk7bGV0IEk9Y1tCXTtDLmNvcHkoSSksQy5zdWIoay5tdWx0aXBseVNjYWxhcihrLmRvdChJKSkpLm5vcm1hbGl6ZSgpLFAuY3Jvc3NWZWN0b3JzKE8sSSk7bGV0IFI9UC5kb3QodVtCXSk8MD8tMToxO2xbQio0XT1DLngsbFtCKjQrMV09Qy55LGxbQio0KzJdPUMueixsW0IqNCszXT1SfWZvcihsZXQgQj0wLEk9Uy5sZW5ndGg7QjxJOysrQil7bGV0IEw9U1tCXSxSPUwuc3RhcnQsRj1MLmNvdW50O2ZvcihsZXQgej1SLFU9UitGO3o8VTt6Kz0zKUQoblt6KzBdKSxEKG5beisxXSksRChuW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihyIT09dm9pZCAwKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYobj09PXZvaWQgMCluPW5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHIuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IGY9MCxwPW4uY291bnQ7ZjxwO2YrKyluLnNldFhZWihmLDAsMCwwKTtsZXQgaT1uZXcgaixvPW5ldyBqLGE9bmV3IGoscz1uZXcgaixsPW5ldyBqLGM9bmV3IGosdT1uZXcgaixoPW5ldyBqO2lmKHQpZm9yKGxldCBmPTAscD10LmNvdW50O2Y8cDtmKz0zKXtsZXQgZD10LmdldFgoZiswKSxnPXQuZ2V0WChmKzEpLF89dC5nZXRYKGYrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZCksby5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZyksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsXyksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUobixfKSxzLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxuLnNldFhZWihkLHMueCxzLnkscy56KSxuLnNldFhZWihnLGwueCxsLnksbC56KSxuLnNldFhZWihfLGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLHA9ci5jb3VudDtmPHA7Zis9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZisyKSx1LnN1YlZlY3RvcnMoYSxvKSxoLnN1YlZlY3RvcnMoaSxvKSx1LmNyb3NzKGgpLG4uc2V0WFlaKGYrMCx1LngsdS55LHUueiksbi5zZXRYWVooZisxLHUueCx1LnksdS56KSxuLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQscil7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59cj09PXZvaWQgMCYmKHI9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBpIGluIG4pe2lmKHQuYXR0cmlidXRlc1tpXT09PXZvaWQgMCljb250aW51ZTtsZXQgYT1uW2ldLmFycmF5LHM9dC5hdHRyaWJ1dGVzW2ldLGw9cy5hcnJheSxjPXMuaXRlbVNpemUqcix1PU1hdGgubWluKGwubGVuZ3RoLGEubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylhW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCByPTAsbj10LmNvdW50O3I8bjtyKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLExvLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKHIsTG8ueCxMby55LExvLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQocyxsKXtsZXQgYz1zLmFycmF5LHU9cy5pdGVtU2l6ZSxoPXMubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLHA9MCxkPTA7Zm9yKGxldCBnPTAsXz1sLmxlbmd0aDtnPF87ZysrKXtzLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/cD1sW2ddKnMuZGF0YS5zdHJpZGUrcy5vZmZzZXQ6cD1sW2ddKnU7Zm9yKGxldCB5PTA7eTx1O3krKylmW2QrK109Y1twKytdfXJldHVybiBuZXcgSmUoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IHI9bmV3IFBlLG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXSxjPXQobCxuKTtyLnNldEF0dHJpYnV0ZShzLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1bXSxjPW9bc107Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLHA9dChmLG4pO2wucHVzaChwKX1yLm1vcnBoQXR0cmlidXRlc1tzXT1sfXIubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ci5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gcn10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgcj10aGlzLmluZGV4O3IhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOnIuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLmFycmF5KX0pO2xldCBuPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gbil7bGV0IGM9bltsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCBpPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IHA9Y1toXTt1LnB1c2gocC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKGlbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gcyE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IHI9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgbj10LmluZGV4O24hPT1udWxsJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUocikpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gaSl7bGV0IHU9aVtjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUocikpfWxldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgdT1bXSxoPW9bY107Zm9yKGxldCBmPTAscD1oLmxlbmd0aDtmPHA7ZisrKXUucHVzaChoW2ZdLmNsb25lKHIpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PWEubGVuZ3RoO2M8dTtjKyspe2xldCBoPWFbY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O3MhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtQZS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTXVlPW5ldyBNZSxBMz1uZXcgSmYsb3V0PW5ldyBaZixSMD1uZXcgaixOMD1uZXcgaixEMD1uZXcgaixhdXQ9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaix4Vj1uZXcgaixiVj1uZXcgaix3Vj1uZXcgaixTVj1uZXcgTHQsTVY9bmV3IEx0LEVWPW5ldyBMdCxjdXQ9bmV3IGosVFY9bmV3IGosdGk9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBzaCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYoaT09PXZvaWQgMHx8KG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLG91dC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLG91dC5hcHBseU1hdHJpeDQobyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShvdXQpPT09ITEpfHwoTXVlLmNvcHkobykuaW52ZXJ0KCksQTMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE11ZSksbi5ib3VuZGluZ0JveCE9PW51bGwmJkEzLmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBhO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHM9bi5pbmRleCxsPW4uYXR0cmlidXRlcy5wb3NpdGlvbixjPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPW4uYXR0cmlidXRlcy51dixmPW4uYXR0cmlidXRlcy51djIscD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKHMhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKHMuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9cy5nZXRYKEMpLE89cy5nZXRYKEMrMSksRD1zLmdldFgoQysyKTthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4ocy5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9cy5nZXRYKHkpLFM9cy5nZXRYKHkrMSksQz1zLmdldFgoeSsyKTthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGc9MCxfPXAubGVuZ3RoO2c8XztnKyspe2xldCB5PXBbZ10seD1pW3kubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heCh5LnN0YXJ0LGQuc3RhcnQpLFM9TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbih5LnN0YXJ0K3kuY291bnQsZC5zdGFydCtkLmNvdW50KSk7Zm9yKGxldCBDPWIsUD1TO0M8UDtDKz0zKXtsZXQgaz1DLE89QysxLEQ9QysyO2E9Q1YodGhpcyx4LHQsQTMsbCxjLHUsaCxmLGssTyxEKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihDLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxyLnB1c2goYSkpfX1lbHNle2xldCBnPU1hdGgubWF4KDAsZC5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7Zm9yKGxldCB5PWcseD1fO3k8eDt5Kz0zKXtsZXQgYj15LFM9eSsxLEM9eSsyO2E9Q1YodGhpcyxpLHQsQTMsbCxjLHUsaCxmLGIsUyxDKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLHIucHVzaChhKSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O3RpLnByb3RvdHlwZS5pc01lc2g9ITA7ZnVuY3Rpb24gaGZyKGUsdCxyLG4saSxvLGEscyl7bGV0IGw7aWYodC5zaWRlPT09SWk/bD1uLmludGVyc2VjdFRyaWFuZ2xlKGEsbyxpLCEwLHMpOmw9bi5pbnRlcnNlY3RUcmlhbmdsZShpLG8sYSx0LnNpZGUhPT1MMSxzKSxsPT09bnVsbClyZXR1cm4gbnVsbDtUVi5jb3B5KHMpLFRWLmFwcGx5TWF0cml4NChlLm1hdHJpeFdvcmxkKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhUVik7cmV0dXJuIGM8ci5uZWFyfHxjPnIuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6VFYuY2xvbmUoKSxvYmplY3Q6ZX19ZnVuY3Rpb24gQ1YoZSx0LHIsbixpLG8sYSxzLGwsYyx1LGgpe1IwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxjKSxOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksdSksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGgpO2xldCBmPWUubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKG8mJmYpe3hWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKSx3Vi5zZXQoMCwwLDApO2ZvcihsZXQgZD0wLGc9by5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXSx5PW9bZF07XyE9PTAmJihhdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLHN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksbHV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxoKSxhPyh4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihzdXQsXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dCxfKSk6KHhWLmFkZFNjYWxlZFZlY3RvcihhdXQuc3ViKFIwKSxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihOMCksXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoRDApLF8pKSl9UjAuYWRkKHhWKSxOMC5hZGQoYlYpLEQwLmFkZCh3Vil9ZS5pc1NraW5uZWRNZXNoJiYoZS5ib25lVHJhbnNmb3JtKGMsUjApLGUuYm9uZVRyYW5zZm9ybSh1LE4wKSxlLmJvbmVUcmFuc2Zvcm0oaCxEMCkpO2xldCBwPWhmcihlLHQscixuLFIwLE4wLEQwLGN1dCk7aWYocCl7cyYmKFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksRVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGgpLHAudXY9b2kuZ2V0VVYoY3V0LFIwLE4wLEQwLFNWLE1WLEVWLG5ldyBMdCkpLGwmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1vaS5nZXRVVihjdXQsUjAsTjAsRDAsU1YsTVYsRVYsbmV3IEx0KSk7bGV0IGQ9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgaixtYXRlcmlhbEluZGV4OjB9O29pLmdldE5vcm1hbChSMCxOMCxEMCxkLm5vcm1hbCkscC5mYWNlPWR9cmV0dXJuIHB9dmFyIFFmPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO2k9TWF0aC5mbG9vcihpKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxwPTA7ZCgieiIsInkiLCJ4IiwtMSwtMSxuLHIsdCxhLG8sMCksZCgieiIsInkiLCJ4IiwxLC0xLG4sciwtdCxhLG8sMSksZCgieCIsInoiLCJ5IiwxLDEsdCxuLHIsaSxhLDIpLGQoIngiLCJ6IiwieSIsMSwtMSx0LG4sLXIsaSxhLDMpLGQoIngiLCJ5IiwieiIsMSwtMSx0LHIsbixpLG8sNCksZCgieCIsInkiLCJ6IiwtMSwtMSx0LHIsLW4saSxvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGgsMikpO2Z1bmN0aW9uIGQoZyxfLHkseCxiLFMsQyxQLGssTyxEKXtsZXQgQj1TL2ssST1DL08sTD1TLzIsUj1DLzIsRj1QLzIsej1rKzEsVT1PKzEsVz0wLFo9MCxydD1uZXcgajtmb3IobGV0IG90PTA7b3Q8VTtvdCsrKXtsZXQgc3Q9b3QqSS1SO2ZvcihsZXQgU3Q9MDtTdDx6O1N0Kyspe2xldCBidD1TdCpCLUw7cnRbZ109YnQqeCxydFtfXT1zdCpiLHJ0W3ldPUYsYy5wdXNoKHJ0LngscnQueSxydC56KSxydFtnXT0wLHJ0W19dPTAscnRbeV09UD4wPzE6LTEsdS5wdXNoKHJ0LngscnQueSxydC56KSxoLnB1c2goU3QvayksaC5wdXNoKDEtb3QvTyksVys9MX19Zm9yKGxldCBvdD0wO290PE87b3QrKylmb3IobGV0IHN0PTA7c3Q8aztzdCsrKXtsZXQgU3Q9ZitzdCt6Km90LGJ0PWYrc3Qreioob3QrMSksTXQ9Zisoc3QrMSkreioob3QrMSksbHQ9Zisoc3QrMSkreipvdDtsLnB1c2goU3QsYnQsbHQpLGwucHVzaChidCxNdCxsdCksWis9Nn1zLmFkZEdyb3VwKHAsWixEKSxwKz1aLGYrPVd9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFFmKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gWjMoZSl7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe3Rbcl09e307Zm9yKGxldCBuIGluIGVbcl0pe2xldCBpPWVbcl1bbl07aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP3Rbcl1bbl09aS5jbG9uZSgpOkFycmF5LmlzQXJyYXkoaSk/dFtyXVtuXT1pLnNsaWNlKCk6dFtyXVtuXT1pfX1yZXR1cm4gdH1mdW5jdGlvbiBUYShlKXtsZXQgdD17fTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49WjMoZVtyXSk7Zm9yKGxldCBpIGluIG4pdFtpXT1uW2ldfXJldHVybiB0fXZhciB6ZmU9e2Nsb25lOlozLG1lcmdlOlRhfSxmZnI9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAscGZyPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsbGg9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPWZmcix0aGlzLmZyYWdtZW50U2hhZGVyPXBmcix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1aMyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7ci5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLHIudW5pZm9ybXM9e307Zm9yKGxldCBpIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbaV0udmFsdWU7YSYmYS5pc1RleHR1cmU/ci51bmlmb3Jtc1tpXT17dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3IudW5pZm9ybXNbaV09e3R5cGU6ImMiLHZhbHVlOmEuZ2V0SGV4KCl9OmEmJmEuaXNWZWN0b3IyP3IudW5pZm9ybXNbaV09e3R5cGU6InYyIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjM/ci51bmlmb3Jtc1tpXT17dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2NCIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXgzP3IudW5pZm9ybXNbaV09e3R5cGU6Im0zIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc01hdHJpeDQ/ci51bmlmb3Jtc1tpXT17dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTpyLnVuaWZvcm1zW2ldPXt2YWx1ZTphfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoci5kZWZpbmVzPXRoaXMuZGVmaW5lcyksci52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsci5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBuPXt9O2ZvcihsZXQgaSBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW2ldPT09ITAmJihuW2ldPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmV4dGVuc2lvbnM9bikscn19O2xoLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBSMT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgTWUsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgTWV9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtcls4XSwtcls5XSwtclsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxyKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07UjEucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBVaT1jbGFzcyBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKHQ9NTAscj0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9cix0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgcj0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVFQKjIqTWF0aC5hdGFuKHIpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oUDEqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBRUCoyKk1hdGguYXRhbihNYXRoLnRhbihQMSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLmFzcGVjdD10L3IsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PXIsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIscj10Kk1hdGgudGFuKFAxKi41KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKnIsaT10aGlzLmFzcGVjdCpuLG89LS41KmksYT10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPWEuZnVsbFdpZHRoLGM9YS5mdWxsSGVpZ2h0O28rPWEub2Zmc2V0WCppL2wsci09YS5vZmZzZXRZKm4vYyxpKj1hLndpZHRoL2wsbio9YS5oZWlnaHQvY31sZXQgcz10aGlzLmZpbG1PZmZzZXQ7cyE9PTAmJihvKz10KnMvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8raSxyLHItbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5mb3Y9dGhpcy5mb3Ysci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHIub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsci5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksci5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLHIub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LHJ9fTtVaS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgUDM9OTAsSTM9MSxKMz1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9bjtsZXQgaT1uZXcgVWkoUDMsSTMsdCxyKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBqKDEsMCwwKSksdGhpcy5hZGQoaSk7bGV0IG89bmV3IFVpKFAzLEkzLHQscik7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaigtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgVWkoUDMsSTMsdCxyKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsMSksYS5sb29rQXQobmV3IGooMCwxLDApKSx0aGlzLmFkZChhKTtsZXQgcz1uZXcgVWkoUDMsSTMsdCxyKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBqKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBVaShQMyxJMyx0LHIpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGooMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgVWkoUDMsSTMsdCxyKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBqKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LHIpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtpLG8sYSxzLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPW4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChuLDApLHQucmVuZGVyKHIsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwxKSx0LnJlbmRlcihyLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMiksdC5yZW5kZXIocixhKSx0LnNldFJlbmRlclRhcmdldChuLDMpLHQucmVuZGVyKHIscyksdC5zZXRSZW5kZXJUYXJnZXQobiw0KSx0LnJlbmRlcihyLGwpLG4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChuLDUpLHQucmVuZGVyKHIsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsbi50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxIMD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLHI9ciE9PXZvaWQgMD9yOm54LHN1cGVyKHQscixuLGksbyxhLHMsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07SDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIFEzPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe051bWJlci5pc0ludGVnZXIocikmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLHI9biksc3VwZXIodCx0LHIpLHI9cnx8e30sdGhpcy50ZXh0dXJlPW5ldyBIMCh2b2lkIDAsci5tYXBwaW5nLHIud3JhcFMsci53cmFwVCxyLm1hZ0ZpbHRlcixyLm1pbkZpbHRlcixyLmZvcm1hdCxyLnR5cGUsci5hbmlzb3Ryb3B5LHIuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9yLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyIT09dm9pZCAwP3IubWluRmlsdGVyOmlpfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQscil7dGhpcy50ZXh0dXJlLnR5cGU9ci50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UW8sdGhpcy50ZXh0dXJlLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ci5tYWdGaWx0ZXI7bGV0IG49e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0saT1uZXcgUWYoNSw1LDUpLG89bmV3IGxoKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpaMyhuLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6bi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6bi5mcmFnbWVudFNoYWRlcixzaWRlOklpLGJsZW5kaW5nOiRkfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9cjtsZXQgYT1uZXcgdGkoaSxvKSxzPXIubWluRmlsdGVyO3JldHVybiByLm1pbkZpbHRlcj09PW94JiYoci5taW5GaWx0ZXI9aWkpLG5ldyBKMygxLDEwLHRoaXMpLnVwZGF0ZSh0LGEpLHIubWluRmlsdGVyPXMsYS5nZW9tZXRyeS5kaXNwb3NlKCksYS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LHIsbixpKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgYT0wO2E8NjthKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxhKSx0LmNsZWFyKHIsbixpKTt0LnNldFJlbmRlclRhcmdldChvKX19O1EzLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgdXV0PW5ldyBqLGRmcj1uZXcgaixtZnI9bmV3IGtpLCRjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMSwwLDApLHI9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0Q29tcG9uZW50cyh0LHIsbixpKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQscixuKSx0aGlzLmNvbnN0YW50PWksdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LXIuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LHIsbil7bGV0IGk9dXV0LnN1YlZlY3RvcnMobixyKS5jcm9zcyhkZnIuc3ViVmVjdG9ycyh0LHIpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxyKXtsZXQgbj10LmRlbHRhKHV1dCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoaT09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9yLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9pO3JldHVybiBvPDB8fG8+MT9udWxsOnIuY29weShuKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IHI9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIHI8MCYmbj4wfHxuPDAmJnI+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxyKXtsZXQgbj1yfHxtZnIuZ2V0Tm9ybWFsTWF0cml4KHQpLGk9dGhpcy5jb3BsYW5hclBvaW50KHV1dCkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1pLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTskYy5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgTDM9bmV3IFpmLEFWPW5ldyBqLE4xPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRjLHI9bmV3ICRjLG49bmV3ICRjLGk9bmV3ICRjLG89bmV3ICRjLGE9bmV3ICRjKXt0aGlzLnBsYW5lcz1bdCxyLG4saSxvLGFdfXNldCh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkociksc1syXS5jb3B5KG4pLHNbM10uY29weShpKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXJbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxvPW5bMV0sYT1uWzJdLHM9blszXSxsPW5bNF0sYz1uWzVdLHU9bls2XSxoPW5bN10sZj1uWzhdLHA9bls5XSxkPW5bMTBdLGc9blsxMV0sXz1uWzEyXSx5PW5bMTNdLHg9blsxNF0sYj1uWzE1XTtyZXR1cm4gclswXS5zZXRDb21wb25lbnRzKHMtaSxoLWwsZy1mLGItXykubm9ybWFsaXplKCksclsxXS5zZXRDb21wb25lbnRzKHMraSxoK2wsZytmLGIrXykubm9ybWFsaXplKCksclsyXS5zZXRDb21wb25lbnRzKHMrbyxoK2MsZytwLGIreSkubm9ybWFsaXplKCksclszXS5zZXRDb21wb25lbnRzKHMtbyxoLWMsZy1wLGIteSkubm9ybWFsaXplKCkscls0XS5zZXRDb21wb25lbnRzKHMtYSxoLXUsZy1kLGIteCkubm9ybWFsaXplKCkscls1XS5zZXRDb21wb25lbnRzKHMrYSxoK3UsZytkLGIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCByPXQuZ2VvbWV0cnk7cmV0dXJuIHIuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEwzLmNvcHkoci5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShMMyl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gTDMuY2VudGVyLnNldCgwLDAsMCksTDMucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEwzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKHJbb10uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtsZXQgaT1yW25dO2lmKEFWLng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxBVi55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksQVYuej1pLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LGkuZGlzdGFuY2VUb1BvaW50KEFWKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihyW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2Z1bmN0aW9uIEZmZSgpe2xldCBlPW51bGwsdD0hMSxyPW51bGwsbj1udWxsO2Z1bmN0aW9uIGkobyxhKXtyKG8sYSksbj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJnIhPT1udWxsJiYobj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe2UuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihvKXtyPW99LHNldENvbnRleHQ6ZnVuY3Rpb24obyl7ZT1vfX19ZnVuY3Rpb24gZ2ZyKGUsdCl7bGV0IHI9dC5pc1dlYkdMMixuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxwPWUuY3JlYXRlQnVmZmVyKCk7ZS5iaW5kQnVmZmVyKHUscCksZS5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZD01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Q9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/cj9kPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmQ9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9kPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Q9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9kPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9kPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZD01MTIxKSx7YnVmZmVyOnAsdHlwZTpkLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBvKGMsdSxoKXtsZXQgZj11LmFycmF5LHA9dS51cGRhdGVSYW5nZTtlLmJpbmRCdWZmZXIoaCxjKSxwLmNvdW50PT09LTE/ZS5idWZmZXJTdWJEYXRhKGgsMCxmKToocj9lLmJ1ZmZlclN1YkRhdGEoaCxwLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYscC5vZmZzZXQscC5jb3VudCk6ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KHAub2Zmc2V0LHAub2Zmc2V0K3AuY291bnQpKSxwLmNvdW50PS0xKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksbi5nZXQoYyl9ZnVuY3Rpb24gcyhjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9bi5nZXQoYyk7dSYmKGUuZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxuLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9bi5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmbi5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1uLmdldChjKTtoPT09dm9pZCAwP24uc2V0KGMsaShjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYobyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6YSxyZW1vdmU6cyx1cGRhdGU6bH19dmFyIFYwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtsZXQgbz10LzIsYT1yLzIscz1NYXRoLmZsb29yKG4pLGw9TWF0aC5mbG9vcihpKSxjPXMrMSx1PWwrMSxoPXQvcyxmPXIvbCxwPVtdLGQ9W10sZz1bXSxfPVtdO2ZvcihsZXQgeT0wO3k8dTt5Kyspe2xldCB4PXkqZi1hO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBTPWIqaC1vO2QucHVzaChTLC14LDApLGcucHVzaCgwLDAsMSksXy5wdXNoKGIvcyksXy5wdXNoKDEteS9sKX19Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PHM7eCsrKXtsZXQgYj14K2MqeSxTPXgrYyooeSsxKSxDPXgrMStjKih5KzEpLFA9eCsxK2MqeTtwLnB1c2goYixTLFApLHAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjAodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfZnI9YCNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7CiNlbmRpZmAseWZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx2ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCx4ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCgl1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsKI2VuZGlmYCxiZnI9YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCx3ZnI9YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxTZnI9InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsTWZyPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsRWZyPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxUZnI9YCNpZmRlZiBVU0VfQlVNUE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDsKCXVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlOwoJdmVjMiBkSGR4eV9md2QoKSB7CgkJdmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApOwoJCXZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTsKCQlmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7CgkJZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7CgkJZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7CgkJcmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7Cgl9Cgl2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2TiA9IHN1cmZfbm9ybTsKCQl2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7CgkJdmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApOwoJCWZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uOwoJCXZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApOwoJCXJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTsKCX0KI2VuZGlmYCxDZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxBZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxQZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247CiNlbmRpZmAsSWZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLExmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsa2ZyPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZhcnlpbmcgdmVjNCB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLFJmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLE5mcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsRGZyPWAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2CiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjYKI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwNwojZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzUKI2RlZmluZSBFUFNJTE9OIDFlLTYKI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApICkKZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfQpmbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH0KZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfQpmbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH0KZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH0KaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHsKCWNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MzsKCWhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApOwoJcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7Cn0KI2lmZGVmIEhJR0hfUFJFQ0lTSU9OCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfQojZWxzZQoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgewoJCWZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7CgkJcmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50OwoJfQojZW5kaWYKc3RydWN0IEluY2lkZW50TGlnaHQgewoJdmVjMyBjb2xvcjsKCXZlYzMgZGlyZWN0aW9uOwoJYm9vbCB2aXNpYmxlOwp9OwpzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQgewoJdmVjMyBkaXJlY3REaWZmdXNlOwoJdmVjMyBkaXJlY3RTcGVjdWxhcjsKCXZlYzMgaW5kaXJlY3REaWZmdXNlOwoJdmVjMyBpbmRpcmVjdFNwZWN1bGFyOwp9OwpzdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7Cgl2ZWMzIHBvc2l0aW9uOwoJdmVjMyBub3JtYWw7Cgl2ZWMzIHZpZXdEaXI7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCn07CnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTsKfQp2ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApOwp9Cm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkgewoJbWF0MyB0bXA7Cgl0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTsKCXRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApOwoJdG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7CglyZXR1cm4gdG1wOwp9CmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7Cgl2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7CglyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTsKfQpib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHsKCXJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDsKfQp2ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkgewoJZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7CglmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7CglyZXR1cm4gdmVjMiggdSwgdiApOwp9YCxPZnI9YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsemZyPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxGZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzOwojZW5kaWZgLEJmcj1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsSGZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxWZnI9YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwOwojZW5kaWZgLFVmcj0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixxZnI9YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLEdmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2ZWMzIGNhbWVyYVRvRnJhZzsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApOwoJCX0KCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApOwoJCSNlbHNlCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2Vsc2UKCQl2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkUKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTsKCSNlbHNlCgkJdmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApOwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREICkKCQlvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7CgkjZW5kaWYKI2VuZGlmYCxXZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsWWZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLGpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKI2VuZGlmYCxYZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCwkZnI9YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxLZnI9YCNpZmRlZiBVU0VfRk9HCgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKI2VuZGlmYCxaZnI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLEpmcj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxRZnI9YCNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwOwojZW5kaWYKdmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkgewoJZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTsKCXZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7CgkjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgkJcmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApOwoJI2Vsc2UKCQlyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApOwoJI2VuZGlmCn1gLHRwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLGVwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHJwcj1gdmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7Ckdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7Ckdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5OwpiYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7CmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKdkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKdkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApOwoJdkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKZmxvYXQgZG90Tkw7CnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwp2SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwp2SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fRElSX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCXZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmYCxucHI9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsaXByPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLG9wcj1gVG9vbk1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO2AsYXByPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLHNwcj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGxwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhclNoaW5pbmVzczsKCWZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7Cn07CnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfQmxpbm5QaG9uZwojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcKI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApCSgwKWAsY3ByPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCx1cHI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxocHI9YApHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCglnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwojaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglQb2ludExpZ2h0IHBvaW50TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdOwoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTICkKCQlwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglTcG90TGlnaHQgc3BvdExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApCgkJc3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTICkKCQlkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApCglSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHsKCQlyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTsKCQlSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCXZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCWlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApCgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQkJaXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCgl2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7CiNlbmRpZmAsZnByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAscHByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAsZHByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCglnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7CiNlbmRpZmAsbXByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLGdwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX3ByPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53OwoJCXZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApOwoJI2Vsc2UKCQlpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHsKCQkJZ2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wOwoJCQlnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7CgkJfQoJI2VuZGlmCiNlbmRpZmAseXByPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLHZwcj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCx4cHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5OwojZW5kaWYKI2lmZGVmIFVTRV9NQVAKCWRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZzsKI2VuZGlmYCxicHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx3cHI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxTcHI9YCNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7CiNlbmRpZmAsTXByPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLEVwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsVHByPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJZm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkgewoJCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2Vsc2UKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2VuZGlmCgkJfQoJI2Vsc2UKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxDcHI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxBcHI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsUHByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZhcnlpbmcgdmVjMyB2VGFuZ2VudDsKCQl2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLElwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxMcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLGtwcj1gI2lmZGVmIFVTRV9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTsKI2VuZGlmCiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CiNlbmRpZgojaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKQoJdmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7CgkJdmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTsKCQl2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApOwoJCXZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7CgkJdmVjMyBOID0gc3VyZl9ub3JtOwoJCXZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7CgkJdmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTsKCQl2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54OwoJCXZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7CgkJZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTsKCQlmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTsKCX0KI2VuZGlmYCxScHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLE5wcj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxEcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlOwojZW5kaWZgLE9wcj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLHpwcj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxGcHI9YCNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBCglnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hOwojZW5kaWZgLEJwcj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLEhwcj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFZwcj1gI2lmZGVmIERJVEhFUklORwoJdmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7CgkJZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApOwoJCXZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7CgkJZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTsKCQlyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCOwoJfQojZW5kaWZgLFVwcj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLHFwcj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxHcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCglmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkgewoJCXJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApOwoJfQoJdmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7CgkJcmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApOwoJfQoJZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7CgkJZmxvYXQgb2NjbHVzaW9uID0gMS4wOwoJCXZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7CgkJZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTsKCQlpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkgewoJCQlmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7CgkJCWZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7CgkJCWZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7CQkJc29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7CQkJb2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7CgkJfQoJCXJldHVybiBvY2NsdXNpb247Cgl9CglmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkgewoJCWZsb2F0IHNoYWRvdyA9IDEuMDsKCQlzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudzsKCQlzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7CgkJYnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApOwoJCWJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTsKCQlidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7CgkJYm9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTsKCQlpZiAoIGZydXN0dW1UZXN0ICkgewoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgyID0gZHgwIC8gMi4wOwoJCQlmbG9hdCBkeTIgPSBkeTAgLyAyLjA7CgkJCWZsb2F0IGR4MyA9IGR4MSAvIDIuMDsKCQkJZmxvYXQgZHkzID0gZHkxIC8gMi4wOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKQoJCQkpICogKCAxLjAgLyAxNy4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHggPSB0ZXhlbFNpemUueDsKCQkJZmxvYXQgZHkgPSB0ZXhlbFNpemUueTsKCQkJdmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5OwoJCQl2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7CgkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBmLnkgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQlzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZWxzZQoJCQlzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2VuZGlmCgkJfQoJCXJldHVybiBzaGFkb3c7Cgl9Cgl2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7CgkJdmVjMyBhYnNWID0gYWJzKCB2ICk7CgkJZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7CgkJYWJzViAqPSBzY2FsZVRvQ3ViZTsKCQl2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7CgkJdmVjMiBwbGFuYXIgPSB2Lnh5OwoJCWZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7CgkJZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsOwoJCWlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHsKCQkJaWYgKCB2LnogPiAwLjAgKQoJCQkJcGxhbmFyLnggPSA0LjAgLSB2Lng7CgkJfSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTsKCQkJcGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YOwoJCX0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7CgkJCXBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7CgkJCXBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7CgkJfQoJCXJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTsKCX0KCWZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkgewoJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7CgkJdmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7CgkJZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTsJCWRwICs9IHNoYWRvd0JpYXM7CgkJdmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQl2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7CgkJCXJldHVybiAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLFdwcj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxZcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCxqcHI9YGZsb2F0IGdldFNoYWRvd01hc2soKSB7CglmbG9hdCBzaGFkb3cgPSAxLjA7CgkjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjZW5kaWYKCXJldHVybiBzaGFkb3c7Cn1gLFhwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsJHByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxLcHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7Cgl2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTsKCXNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54OwoJc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7Cglza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejsKCXNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53OwoJdHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejsKI2VuZGlmYCxacHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsSnByPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLFFwcj1gI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7CiNlbmRpZmAsdGRyPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLGVkcj1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHJkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCWZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wOwoJZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uOwoJZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzOwoJI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVAKCQl0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQCgkJdGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nOwoJI2VuZGlmCgl2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uOwoJdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApOwoJdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oCgkJbiwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLAoJCXBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLAoJCWF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTsKCXRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKCXRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApOwojZW5kaWZgLG5kcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxpZHI9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxvZHI9YCNpZmRlZiBVU0VfVVYKCSNpZmRlZiBVVlNfVkVSVEVYX09OTFkKCQl2ZWMyIHZVdjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMyIHZVdjsKCSNlbmRpZgoJdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwojZW5kaWZgLGFkcj1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCxzZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsbGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCWF0dHJpYnV0ZSB2ZWMyIHV2MjsKCXZhcnlpbmcgdmVjMiB2VXYyOwoJdW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTsKI2VuZGlmYCxjZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCx1ZHI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAsaGRyPWB2YXJ5aW5nIHZlYzIgdlV2Owp1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CnZvaWQgbWFpbigpIHsKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApOwp9YCxmZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAscGRyPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCxkZHI9YCNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJdmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CglnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjsKCWdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxtZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsZ2RyPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfZHI9YCNkZWZpbmUgRElTVEFOQ0UKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6Owp9YCx5ZHI9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLHZkcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLHhkcj1gdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7Cgl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CglnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGJkcj1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsd2RyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxTZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE1kcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxFZHI9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxUZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250OwoJI2VuZGlmCgkjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250OwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpOwoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLENkcj1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxBZHI9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxQZHI9YCNkZWZpbmUgTk9STUFMCiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLElkcj1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsTGRyPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLGtkcj1gI2RlZmluZSBQSE9ORwp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIHZlYzMgc3BlY3VsYXI7CnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLFJkcj1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsTmRyPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsRGRyPWAjZGVmaW5lIFRPT04KdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE9kcj1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLHpkcj1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEZkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxCZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsSGRyPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVmRyPWB1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOwp1bmlmb3JtIHZlYzIgY2VudGVyOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCXZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJdmVjMiBzY2FsZTsKCXNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApOwoJc2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7CgkjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7CgkjZW5kaWYKCXZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7Cgl2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsKCXJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCXJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCW12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOwoJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxVZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxocj17YWxwaGFtYXBfZnJhZ21lbnQ6X2ZyLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6eWZyLGFscGhhdGVzdF9mcmFnbWVudDp2ZnIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6eGZyLGFvbWFwX2ZyYWdtZW50OmJmcixhb21hcF9wYXJzX2ZyYWdtZW50OndmcixiZWdpbl92ZXJ0ZXg6U2ZyLGJlZ2lubm9ybWFsX3ZlcnRleDpNZnIsYnNkZnM6RWZyLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpUZnIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkNmcixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDpBZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OlBmcixjbGlwcGluZ19wbGFuZXNfdmVydGV4Oklmcixjb2xvcl9mcmFnbWVudDpMZnIsY29sb3JfcGFyc19mcmFnbWVudDprZnIsY29sb3JfcGFyc192ZXJ0ZXg6UmZyLGNvbG9yX3ZlcnRleDpOZnIsY29tbW9uOkRmcixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T2ZyLGRlZmF1bHRub3JtYWxfdmVydGV4OnpmcixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6RmZyLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6QmZyLGVtaXNzaXZlbWFwX2ZyYWdtZW50OkhmcixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OlZmcixlbmNvZGluZ3NfZnJhZ21lbnQ6VWZyLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OnFmcixlbnZtYXBfZnJhZ21lbnQ6R2ZyLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpXZnIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6WWZyLGVudm1hcF9wYXJzX3ZlcnRleDpqZnIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6aXByLGVudm1hcF92ZXJ0ZXg6WGZyLGZvZ192ZXJ0ZXg6JGZyLGZvZ19wYXJzX3ZlcnRleDpLZnIsZm9nX2ZyYWdtZW50Olpmcixmb2dfcGFyc19mcmFnbWVudDpKZnIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpRZnIsbGlnaHRtYXBfZnJhZ21lbnQ6dHByLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6ZXByLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpycHIsbGlnaHRzX3BhcnNfYmVnaW46bnByLGxpZ2h0c190b29uX2ZyYWdtZW50Om9wcixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmFwcixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6c3ByLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OmxwcixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6Y3ByLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OnVwcixsaWdodHNfZnJhZ21lbnRfYmVnaW46aHByLGxpZ2h0c19mcmFnbWVudF9tYXBzOmZwcixsaWdodHNfZnJhZ21lbnRfZW5kOnBwcixsb2dkZXB0aGJ1Zl9mcmFnbWVudDpkcHIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDptcHIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6Z3ByLGxvZ2RlcHRoYnVmX3ZlcnRleDpfcHIsbWFwX2ZyYWdtZW50OnlwcixtYXBfcGFyc19mcmFnbWVudDp2cHIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OnhwcixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpicHIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OndwcixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpTcHIsbW9ycGhub3JtYWxfdmVydGV4Ok1wcixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDpFcHIsbW9ycGh0YXJnZXRfdmVydGV4OlRwcixub3JtYWxfZnJhZ21lbnRfYmVnaW46Q3ByLG5vcm1hbF9mcmFnbWVudF9tYXBzOkFwcixub3JtYWxfcGFyc19mcmFnbWVudDpQcHIsbm9ybWFsX3BhcnNfdmVydGV4Oklwcixub3JtYWxfdmVydGV4Okxwcixub3JtYWxtYXBfcGFyc19mcmFnbWVudDprcHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjpScHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOk5wcixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpEcHIsb3V0cHV0X2ZyYWdtZW50Ok9wcixwYWNraW5nOnpwcixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OkZwcixwcm9qZWN0X3ZlcnRleDpCcHIsZGl0aGVyaW5nX2ZyYWdtZW50OkhwcixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpWcHIscm91Z2huZXNzbWFwX2ZyYWdtZW50OlVwcixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDpxcHIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6R3ByLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpXcHIsc2hhZG93bWFwX3ZlcnRleDpZcHIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50Ompwcixza2luYmFzZV92ZXJ0ZXg6WHByLHNraW5uaW5nX3BhcnNfdmVydGV4OiRwcixza2lubmluZ192ZXJ0ZXg6S3ByLHNraW5ub3JtYWxfdmVydGV4OlpwcixzcGVjdWxhcm1hcF9mcmFnbWVudDpKcHIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDpRcHIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6dGRyLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6ZWRyLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpyZHIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bmRyLHV2X3BhcnNfZnJhZ21lbnQ6aWRyLHV2X3BhcnNfdmVydGV4Om9kcix1dl92ZXJ0ZXg6YWRyLHV2Ml9wYXJzX2ZyYWdtZW50OnNkcix1djJfcGFyc192ZXJ0ZXg6bGRyLHV2Ml92ZXJ0ZXg6Y2RyLHdvcmxkcG9zX3ZlcnRleDp1ZHIsYmFja2dyb3VuZF92ZXJ0OmhkcixiYWNrZ3JvdW5kX2ZyYWc6ZmRyLGN1YmVfdmVydDpwZHIsY3ViZV9mcmFnOmRkcixkZXB0aF92ZXJ0Om1kcixkZXB0aF9mcmFnOmdkcixkaXN0YW5jZVJHQkFfdmVydDpfZHIsZGlzdGFuY2VSR0JBX2ZyYWc6eWRyLGVxdWlyZWN0X3ZlcnQ6dmRyLGVxdWlyZWN0X2ZyYWc6eGRyLGxpbmVkYXNoZWRfdmVydDpiZHIsbGluZWRhc2hlZF9mcmFnOndkcixtZXNoYmFzaWNfdmVydDpTZHIsbWVzaGJhc2ljX2ZyYWc6TWRyLG1lc2hsYW1iZXJ0X3ZlcnQ6RWRyLG1lc2hsYW1iZXJ0X2ZyYWc6VGRyLG1lc2htYXRjYXBfdmVydDpDZHIsbWVzaG1hdGNhcF9mcmFnOkFkcixtZXNobm9ybWFsX3ZlcnQ6UGRyLG1lc2hub3JtYWxfZnJhZzpJZHIsbWVzaHBob25nX3ZlcnQ6TGRyLG1lc2hwaG9uZ19mcmFnOmtkcixtZXNocGh5c2ljYWxfdmVydDpSZHIsbWVzaHBoeXNpY2FsX2ZyYWc6TmRyLG1lc2h0b29uX3ZlcnQ6RGRyLG1lc2h0b29uX2ZyYWc6T2RyLHBvaW50c192ZXJ0Onpkcixwb2ludHNfZnJhZzpGZHIsc2hhZG93X3ZlcnQ6QmRyLHNoYWRvd19mcmFnOkhkcixzcHJpdGVfdmVydDpWZHIsc3ByaXRlX2ZyYWc6VWRyfSxyZT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHV2MlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LGlvcjp7dmFsdWU6MS41fSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEx0KC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX19fSxhaD17YmFzaWM6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5zcGVjdWxhcm1hcCxyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IG5lKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUucm91Z2huZXNzbWFwLHJlLm1ldGFsbmVzc21hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmdyYWRpZW50bWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOlRhKFtyZS5wb2ludHMscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOmhyLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpoci5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlRhKFtyZS5zcHJpdGUscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmhyLmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOlRhKFtyZS5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgan0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VGEoW3JlLmxpZ2h0cyxyZS5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zaGFkb3dfZnJhZ319O2FoLnBoeXNpY2FsPXt1bmlmb3JtczpUYShbYWguc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBMdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgTHR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IG5lKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBxZHIoZSx0LHIsbixpLG8pe2xldCBhPW5ldyBuZSgwKSxzPWk9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIHAoZyxfKXtsZXQgeT0hMSx4PV8uaXNTY2VuZT09PSEwP18uYmFja2dyb3VuZDpudWxsO3gmJnguaXNUZXh0dXJlJiYoeD10LmdldCh4KSk7bGV0IGI9ZS54cixTPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7UyYmUy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJih4PW51bGwpLHg9PT1udWxsP2QoYSxzKTp4JiZ4LmlzQ29sb3ImJihkKHgsMSkseT0hMCksKGUuYXV0b0NsZWFyfHx5KSYmZS5jbGVhcihlLmF1dG9DbGVhckNvbG9yLGUuYXV0b0NsZWFyRGVwdGgsZS5hdXRvQ2xlYXJTdGVuY2lsKSx4JiYoeC5pc0N1YmVUZXh0dXJlfHx4Lm1hcHBpbmc9PT14TSk/KGM9PT12b2lkIDAmJihjPW5ldyB0aShuZXcgUWYoMSwxLDEpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6WjMoYWguY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmFoLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFoLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oQyxQLGspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG4udXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJnguaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXh8fGghPT14LnZlcnNpb258fGYhPT1lLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT14LGg9eC52ZXJzaW9uLGY9ZS50b25lTWFwcGluZyksZy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgdGkobmV3IFYwKDIsMiksbmV3IGxoKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6STEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG4udXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LHgubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGQoZyxfKXtyLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoZy5yLGcuZyxnLmIsXyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGcsXz0xKXthLnNldChnKSxzPV8sZChhLHMpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oZyl7cz1nLGQoYSxzKX0scmVuZGVyOnB9fWZ1bmN0aW9uIEdkcihlLHQscixuKXtsZXQgaT1lLmdldFBhcmFtZXRlcigzNDkyMSksbz1uLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksYT1uLmlzV2ViR0wyfHxvIT09bnVsbCxzPXt9LGw9ZyhudWxsKSxjPWw7ZnVuY3Rpb24gdShSLEYseixVLFcpe2xldCBaPSExO2lmKGEpe2xldCBydD1kKFUseixGKTtjIT09cnQmJihjPXJ0LGYoYy5vYmplY3QpKSxaPV8oVSxXKSxaJiZ5KFUsVyl9ZWxzZXtsZXQgcnQ9Ri53aXJlZnJhbWU9PT0hMDsoYy5nZW9tZXRyeSE9PVUuaWR8fGMucHJvZ3JhbSE9PXouaWR8fGMud2lyZWZyYW1lIT09cnQpJiYoYy5nZW9tZXRyeT1VLmlkLGMucHJvZ3JhbT16LmlkLGMud2lyZWZyYW1lPXJ0LFo9ITApfVIuaXNJbnN0YW5jZWRNZXNoPT09ITAmJihaPSEwKSxXIT09bnVsbCYmci51cGRhdGUoVywzNDk2MyksWiYmKGsoUixGLHosVSksVyE9PW51bGwmJmUuYmluZEJ1ZmZlcigzNDk2MyxyLmdldChXKS5idWZmZXIpKX1mdW5jdGlvbiBoKCl7cmV0dXJuIG4uaXNXZWJHTDI/ZS5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX1mdW5jdGlvbiBmKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuYmluZFZlcnRleEFycmF5KFIpOm8uYmluZFZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIHAoUil7cmV0dXJuIG4uaXNXZWJHTDI/ZS5kZWxldGVWZXJ0ZXhBcnJheShSKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIGQoUixGLHope2xldCBVPXoud2lyZWZyYW1lPT09ITAsVz1zW1IuaWRdO1c9PT12b2lkIDAmJihXPXt9LHNbUi5pZF09Vyk7bGV0IFo9V1tGLmlkXTtaPT09dm9pZCAwJiYoWj17fSxXW0YuaWRdPVopO2xldCBydD1aW1VdO3JldHVybiBydD09PXZvaWQgMCYmKHJ0PWcoaCgpKSxaW1VdPXJ0KSxydH1mdW5jdGlvbiBnKFIpe2xldCBGPVtdLHo9W10sVT1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUZbV109MCx6W1ddPTAsVVtXXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpGLGVuYWJsZWRBdHRyaWJ1dGVzOnosYXR0cmlidXRlRGl2aXNvcnM6VSxvYmplY3Q6UixhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIF8oUixGKXtsZXQgej1jLmF0dHJpYnV0ZXMsVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9eltaXSxvdD1VW1pdO2lmKHJ0PT09dm9pZCAwfHxydC5hdHRyaWJ1dGUhPT1vdHx8cnQuZGF0YSE9PW90LmRhdGEpcmV0dXJuITA7VysrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1XfHxjLmluZGV4IT09Rn1mdW5jdGlvbiB5KFIsRil7bGV0IHo9e30sVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9VVtaXSxvdD17fTtvdC5hdHRyaWJ1dGU9cnQscnQuZGF0YSYmKG90LmRhdGE9cnQuZGF0YSkseltaXT1vdCxXKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVcsYy5pbmRleD1GfWZ1bmN0aW9uIHgoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKVJbRl09MH1mdW5jdGlvbiBiKFIpe1MoUiwwKX1mdW5jdGlvbiBTKFIsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLFU9Yy5lbmFibGVkQXR0cmlidXRlcyxXPWMuYXR0cmlidXRlRGl2aXNvcnM7eltSXT0xLFVbUl09PT0wJiYoZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShSKSxVW1JdPTEpLFdbUl0hPT1GJiYoKG4uaXNXZWJHTDI/ZTp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtuLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oUixGKSxXW1JdPUYpfWZ1bmN0aW9uIEMoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLFU9Ri5sZW5ndGg7ejxVO3orKylGW3pdIT09Ult6XSYmKGUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gUChSLEYseixVLFcsWil7bi5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9lLnZlcnRleEF0dHJpYklQb2ludGVyKFIsRix6LFcsWik6ZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFIsRix6LFUsVyxaKX1mdW5jdGlvbiBrKFIsRix6LFUpe2lmKG4uaXNXZWJHTDI9PT0hMSYmKFIuaXNJbnN0YW5jZWRNZXNofHxVLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47eCgpO2xldCBXPVUuYXR0cmlidXRlcyxaPXouZ2V0QXR0cmlidXRlcygpLHJ0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IG90IGluIFope2xldCBzdD1aW290XTtpZihzdC5sb2NhdGlvbj49MCl7bGV0IFN0PVdbb3RdO2lmKFN0PT09dm9pZCAwJiYob3Q9PT0iaW5zdGFuY2VNYXRyaXgiJiZSLmluc3RhbmNlTWF0cml4JiYoU3Q9Ui5pbnN0YW5jZU1hdHJpeCksb3Q9PT0iaW5zdGFuY2VDb2xvciImJlIuaW5zdGFuY2VDb2xvciYmKFN0PVIuaW5zdGFuY2VDb2xvcikpLFN0IT09dm9pZCAwKXtsZXQgYnQ9U3Qubm9ybWFsaXplZCxNdD1TdC5pdGVtU2l6ZSxsdD1yLmdldChTdCk7aWYobHQ9PT12b2lkIDApY29udGludWU7bGV0IEt0PWx0LmJ1ZmZlcixfdD1sdC50eXBlLGN0PWx0LmJ5dGVzUGVyRWxlbWVudDtpZihTdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgWD1TdC5kYXRhLGV0PVguc3RyaWRlLGR0PVN0Lm9mZnNldDtpZihYJiZYLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylTKHN0LmxvY2F0aW9uK3EsWC5tZXNoUGVyQXR0cmlidXRlKTtSLmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZVLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoVS5fbWF4SW5zdGFuY2VDb3VudD1YLm1lc2hQZXJBdHRyaWJ1dGUqWC5jb3VudCl9ZWxzZSBmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspYihzdC5sb2NhdGlvbitxKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylQKHN0LmxvY2F0aW9uK3EsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LGV0KmN0LChkdCtNdC9zdC5sb2NhdGlvblNpemUqcSkqY3QpfWVsc2V7aWYoU3QuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylTKHN0LmxvY2F0aW9uK1gsU3QubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9U3QubWVzaFBlckF0dHJpYnV0ZSpTdC5jb3VudCl9ZWxzZSBmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspYihzdC5sb2NhdGlvbitYKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylQKHN0LmxvY2F0aW9uK1gsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LE10KmN0LE10L3N0LmxvY2F0aW9uU2l6ZSpYKmN0KX19ZWxzZSBpZihydCE9PXZvaWQgMCl7bGV0IGJ0PXJ0W290XTtpZihidCE9PXZvaWQgMClzd2l0Y2goYnQubGVuZ3RoKXtjYXNlIDI6ZS52ZXJ0ZXhBdHRyaWIyZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgMzplLnZlcnRleEF0dHJpYjNmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7Y2FzZSA0OmUudmVydGV4QXR0cmliNGZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztkZWZhdWx0OmUudmVydGV4QXR0cmliMWZ2KHN0LmxvY2F0aW9uLGJ0KX19fX1DKCl9ZnVuY3Rpb24gTygpe0koKTtmb3IobGV0IFIgaW4gcyl7bGV0IEY9c1tSXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSXX19ZnVuY3Rpb24gRChSKXtpZihzW1IuaWRdPT09dm9pZCAwKXJldHVybjtsZXQgRj1zW1IuaWRdO2ZvcihsZXQgeiBpbiBGKXtsZXQgVT1GW3pdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSBGW3pdfWRlbGV0ZSBzW1IuaWRdfWZ1bmN0aW9uIEIoUil7Zm9yKGxldCBGIGluIHMpe2xldCB6PXNbRl07aWYoeltSLmlkXT09PXZvaWQgMCljb250aW51ZTtsZXQgVT16W1IuaWRdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSB6W1IuaWRdfX1mdW5jdGlvbiBJKCl7TCgpLGMhPT1sJiYoYz1sLGYoYy5vYmplY3QpKX1mdW5jdGlvbiBMKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDp1LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6TCxkaXNwb3NlOk8scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6RCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOkIsaW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpDfX1mdW5jdGlvbiBXZHIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoYyl7bz1jfWZ1bmN0aW9uIHMoYyx1KXtlLmRyYXdBcnJheXMobyxjLHUpLHIudXBkYXRlKHUsbywxKX1mdW5jdGlvbiBsKGMsdSxoKXtpZihoPT09MClyZXR1cm47bGV0IGYscDtpZihpKWY9ZSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGY9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLGY9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59ZltwXShvLGMsdSxoKSxyLnVwZGF0ZSh1LG8saCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5yZW5kZXI9cyx0aGlzLnJlbmRlckluc3RhbmNlcz1sfWZ1bmN0aW9uIFlkcihlLHQscil7bGV0IG47ZnVuY3Rpb24gaSgpe2lmKG4hPT12b2lkIDApcmV0dXJuIG47aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBrPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtuPWUuZ2V0UGFyYW1ldGVyKGsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG49MDtyZXR1cm4gbn1mdW5jdGlvbiBvKGspe2lmKGs9PT0iaGlnaHAiKXtpZihlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO2s9Im1lZGl1bXAifXJldHVybiBrPT09Im1lZGl1bXAiJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxzPXIucHJlY2lzaW9uIT09dm9pZCAwP3IucHJlY2lzaW9uOiJoaWdocCIsbD1vKHMpO2whPT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIscywibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikscz1sKTtsZXQgYz1hfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPWUuZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPWUuZ2V0UGFyYW1ldGVyKDM1NjYwKSxwPWUuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9ZS5nZXRQYXJhbWV0ZXIoMzQwNzYpLGc9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLF89ZS5nZXRQYXJhbWV0ZXIoMzYzNDcpLHk9ZS5nZXRQYXJhbWV0ZXIoMzYzNDgpLHg9ZS5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLFM9YXx8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksQz1iJiZTLFA9YT9lLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6aSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246cyxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOnAsbWF4Q3ViZW1hcFNpemU6ZCxtYXhBdHRyaWJ1dGVzOmcsbWF4VmVydGV4VW5pZm9ybXM6XyxtYXhWYXJ5aW5nczp5LG1heEZyYWdtZW50VW5pZm9ybXM6eCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpTLGZsb2F0VmVydGV4VGV4dHVyZXM6QyxtYXhTYW1wbGVzOlB9fWZ1bmN0aW9uIGpkcihlKXtsZXQgdD10aGlzLHI9bnVsbCxuPTAsaT0hMSxvPSExLGE9bmV3ICRjLHM9bmV3IGtpLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLHApe2xldCBkPWgubGVuZ3RoIT09MHx8Znx8biE9PTB8fGk7cmV0dXJuIGk9ZixyPXUoaCxwLDApLG49aC5sZW5ndGgsZH0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmNsaXBwaW5nUGxhbmVzLGc9aC5jbGlwSW50ZXJzZWN0aW9uLF89aC5jbGlwU2hhZG93cyx5PWUuZ2V0KGgpO2lmKCFpfHxkPT09bnVsbHx8ZC5sZW5ndGg9PT0wfHxvJiYhXylvP3UobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOm4sYj14KjQsUz15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1TLFM9dShkLGYsYixwKTtmb3IobGV0IEM9MDtDIT09YjsrK0MpU1tDXT1yW0NdO3kuY2xpcHBpbmdTdGF0ZT1TLHRoaXMubnVtSW50ZXJzZWN0aW9uPWc/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ciYmKGwudmFsdWU9cixsLm5lZWRzVXBkYXRlPW4+MCksdC5udW1QbGFuZXM9bix0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLHAsZCl7bGV0IGc9aCE9PW51bGw/aC5sZW5ndGg6MCxfPW51bGw7aWYoZyE9PTApe2lmKF89bC52YWx1ZSxkIT09ITB8fF89PT1udWxsKXtsZXQgeT1wK2cqNCx4PWYubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHgpLChfPT09bnVsbHx8Xy5sZW5ndGg8eSkmJihfPW5ldyBGbG9hdDMyQXJyYXkoeSkpO2ZvcihsZXQgYj0wLFM9cDtiIT09ZzsrK2IsUys9NClhLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHgscyksYS5ub3JtYWwudG9BcnJheShfLFMpLF9bUyszXT1hLmNvbnN0YW50fWwudmFsdWU9XyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1nLHQubnVtSW50ZXJzZWN0aW9uPTAsX319ZnVuY3Rpb24gWGRyKGUpe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm4gcz09PVlQP2EubWFwcGluZz1ueDpzPT09alAmJihhLm1hcHBpbmc9aXgpLGF9ZnVuY3Rpb24gbihhKXtpZihhJiZhLmlzVGV4dHVyZSYmYS5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMSl7bGV0IHM9YS5tYXBwaW5nO2lmKHM9PT1ZUHx8cz09PWpQKWlmKHQuaGFzKGEpKXtsZXQgbD10LmdldChhKS50ZXh0dXJlO3JldHVybiByKGwsYS5tYXBwaW5nKX1lbHNle2xldCBsPWEuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFEzKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKGUsYSksdC5zZXQoYSxjKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLHIoYy50ZXh0dXJlLGEubWFwcGluZyl9ZWxzZSByZXR1cm4gbnVsbH19cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtsZXQgcz1hLnRhcmdldDtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2xldCBsPXQuZ2V0KHMpO2whPT12b2lkIDAmJih0LmRlbGV0ZShzKSxsLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXB9cmV0dXJue2dldDpuLGRpc3Bvc2U6b319dmFyIEQxPWNsYXNzIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IodD0tMSxyPTEsbj0xLGk9LTEsbz0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1yLHRoaXMudG9wPW4sdGhpcy5ib3R0b209aSx0aGlzLm5lYXI9byx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxyLG4saSxvLGEpe3RoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLHI9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLGk9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89bi10LGE9bit0LHM9aStyLGw9aS1yO2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLHU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxhPW8rYyp0aGlzLnZpZXcud2lkdGgscy09dSp0aGlzLnZpZXcub2Zmc2V0WSxsPXMtdSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8sYSxzLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC56b29tPXRoaXMuem9vbSxyLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxyLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LHIub2JqZWN0LnRvcD10aGlzLnRvcCxyLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSkscn19O0QxLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgVTA9Y2xhc3MgZXh0ZW5kcyBsaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O1UwLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBxMz00LEYwPTgsJGY9TWF0aC5wb3coMixGMCksQmZlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxIZmU9RjAtcTMrMStCZmUubGVuZ3RoLGszPTIwLGh1dD1uZXcgRDEse19sb2RQbGFuZXM6TlAsX3NpemVMb2RzOkV1ZSxfc2lnbWFzOlBWfT0kZHIoKSxUdWU9bmV3IG5lLGZ1dD1udWxsLFMxPSgxK01hdGguc3FydCg1KSkvMixSMz0xL1MxLEN1ZT1bbmV3IGooMSwxLDEpLG5ldyBqKC0xLDEsMSksbmV3IGooMSwxLC0xKSxuZXcgaigtMSwxLC0xKSxuZXcgaigwLFMxLFIzKSxuZXcgaigwLFMxLC1SMyksbmV3IGooUjMsMCxTMSksbmV3IGooLVIzLDAsUzEpLG5ldyBqKFMxLFIzLDApLG5ldyBqKC1TMSxSMywwKV0sZTY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD1LZHIoazMpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LHI9MCxuPS4xLGk9MTAwKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxuLGksbykscj4wJiZ0aGlzLl9ibHVyKG8sMCwwLHIpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxyPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LHIpfWZyb21DdWJlbWFwKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1JdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXt0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxOUC5sZW5ndGg7dCsrKU5QW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZnV0KSx0LnNjaXNzb3JUZXN0PSExLElWKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LHIpe2Z1dD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbj1yfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LG4pLHRoaXMuX2FwcGx5UE1SRU0obiksdGhpcy5fY2xlYW51cChuKSxufV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IHI9e21hZ0ZpbHRlcjppaSxtaW5GaWx0ZXI6aWksZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6QzEsZm9ybWF0OlFvLGVuY29kaW5nOlFkLGRlcHRoQnVmZmVyOiExfSxuPUF1ZShyKTtyZXR1cm4gbi5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1BdWUocikpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgcj1uZXcgdGkoTlBbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShyLGh1dCl9X3NjZW5lVG9DdWJlVVYodCxyLG4saSl7bGV0IHM9bmV3IFVpKDkwLDEscixuKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGg9dS5hdXRvQ2xlYXIsZj11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihUdWUpLHUudG9uZU1hcHBpbmc9S2QsdS5hdXRvQ2xlYXI9ITE7bGV0IHA9bmV3IHNoKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOklpLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZD1uZXcgdGkobmV3IFFmLHApLGc9ITEsXz10LmJhY2tncm91bmQ7Xz9fLmlzQ29sb3ImJihwLmNvbG9yLmNvcHkoXyksdC5iYWNrZ3JvdW5kPW51bGwsZz0hMCk6KHAuY29sb3IuY29weShUdWUpLGc9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzt4PT09MD8ocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KGNbeV0sMCwwKSk6eD09PTE/KHMudXAuc2V0KDAsMCxsW3ldKSxzLmxvb2tBdCgwLGNbeV0sMCkpOihzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoMCwwLGNbeV0pKSxJVihpLHgqJGYseT4yPyRmOjAsJGYsJGYpLHUuc2V0UmVuZGVyVGFyZ2V0KGkpLGcmJnUucmVuZGVyKGQscyksdS5yZW5kZXIodCxzKX1kLmdlb21ldHJ5LmRpc3Bvc2UoKSxkLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9X31fdGV4dHVyZVRvQ3ViZVVWKHQscil7bGV0IG49dGhpcy5fcmVuZGVyZXIsaT10Lm1hcHBpbmc9PT1ueHx8dC5tYXBwaW5nPT09aXg7aT8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPUl1ZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9dC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxKTp0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSk7bGV0IG89aT90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLGE9bmV3IHRpKE5QWzBdLG8pLHM9by51bmlmb3JtcztzLmVudk1hcC52YWx1ZT10LGl8fHMudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSVYociwwLDAsMyokZiwyKiRmKSxuLnNldFJlbmRlclRhcmdldChyKSxuLnJlbmRlcihhLGh1dCl9X2FwcGx5UE1SRU0odCl7bGV0IHI9dGhpcy5fcmVuZGVyZXIsbj1yLmF1dG9DbGVhcjtyLmF1dG9DbGVhcj0hMTtmb3IobGV0IGk9MTtpPEhmZTtpKyspe2xldCBvPU1hdGguc3FydChQVltpXSpQVltpXS1QVltpLTFdKlBWW2ktMV0pLGE9Q3VlWyhpLTEpJUN1ZS5sZW5ndGhdO3RoaXMuX2JsdXIodCxpLTEsaSxvLGEpfXIuYXV0b0NsZWFyPW59X2JsdXIodCxyLG4saSxvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEscixuLGksImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsbixuLGksImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQscixuLGksbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO2EhPT0ibGF0aXR1ZGluYWwiJiZhIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IHRpKE5QW2ldLGMpLGY9Yy51bmlmb3JtcyxwPUV1ZVtuXS0xLGQ9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvKDIqazMtMSksZz1vL2QsXz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IodSpnKTprMztfPmszJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke199IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtrM31gKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCBQPTA7UDxrMzsrK1Ape2xldCBrPVAvZyxPPU1hdGguZXhwKC1rKmsvMik7eS5wdXNoKE8pLFA9PT0wP3grPU86UDxfJiYoeCs9MipPKX1mb3IobGV0IFA9MDtQPHkubGVuZ3RoO1ArKyl5W1BdPXlbUF0veDtmLmVudk1hcC52YWx1ZT10LnRleHR1cmUsZi5zYW1wbGVzLnZhbHVlPV8sZi53ZWlnaHRzLnZhbHVlPXksZi5sYXRpdHVkaW5hbC52YWx1ZT1hPT09ImxhdGl0dWRpbmFsIixzJiYoZi5wb2xlQXhpcy52YWx1ZT1zKSxmLmRUaGV0YS52YWx1ZT1kLGYubWlwSW50LnZhbHVlPUYwLW47bGV0IGI9RXVlW2ldLFM9MypNYXRoLm1heCgwLCRmLTIqYiksQz0oaT09PTA/MDoyKiRmKSsyKmIqKGk+RjAtcTM/aS1GMCtxMzowKTtJVihyLFMsQywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChyKSxsLnJlbmRlcihoLGh1dCl9fTtmdW5jdGlvbiAkZHIoKXtsZXQgZT1bXSx0PVtdLHI9W10sbj1GMDtmb3IobGV0IGk9MDtpPEhmZTtpKyspe2xldCBvPU1hdGgucG93KDIsbik7dC5wdXNoKG8pO2xldCBhPTEvbztpPkYwLXEzP2E9QmZlW2ktRjArcTMtMV06aT09PTAmJihhPTApLHIucHVzaChhKTtsZXQgcz0xLyhvLTEpLGw9LXMvMixjPTErcy8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LHA9MyxkPTIsZz0xLF89bmV3IEZsb2F0MzJBcnJheShwKmYqaCkseT1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSx4PW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpO2ZvcihsZXQgUz0wO1M8aDtTKyspe2xldCBDPVMlMyoyLzMtMSxQPVM+Mj8wOi0xLGs9W0MsUCwwLEMrMi8zLFAsMCxDKzIvMyxQKzEsMCxDLFAsMCxDKzIvMyxQKzEsMCxDLFArMSwwXTtfLnNldChrLHAqZipTKSx5LnNldCh1LGQqZipTKTtsZXQgTz1bUyxTLFMsUyxTLFNdO3guc2V0KE8sZypmKlMpfWxldCBiPW5ldyBQZTtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShfLHApKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKZSh5LGQpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgSmUoeCxnKSksZS5wdXNoKGIpLG4+cTMmJm4tLX1yZXR1cm57X2xvZFBsYW5lczplLF9zaXplTG9kczp0LF9zaWdtYXM6cn19ZnVuY3Rpb24gQXVlKGUpe2xldCB0PW5ldyB1cygzKiRmLDMqJGYsZSk7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPXhNLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBJVihlLHQscixuLGkpe2Uudmlld3BvcnQuc2V0KHQscixuLGkpLGUuc2Npc3Nvci5zZXQodCxyLG4saSl9ZnVuY3Rpb24gS2RyKGUpe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoZSkscj1uZXcgaigwLDEsMCk7cmV0dXJuIG5ldyBVMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOmV9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpyfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBQdWUoKXtsZXQgZT1uZXcgTHQoMSwxKTtyZXR1cm4gbmV3IFUwKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIEl1ZSgpe3JldHVybiBuZXcgVTAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6Tmh0KCksZnJhZ21lbnRTaGFkZXI6YAoKCQkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCgkJCXZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uOwoKCQkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE5odCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiBaZHIoZSl7bGV0IHQ9bmV3IFdlYWtNYXAscj1udWxsO2Z1bmN0aW9uIG4ocyl7aWYocyYmcy5pc1RleHR1cmUpe2xldCBsPXMubWFwcGluZyxjPWw9PT1ZUHx8bD09PWpQLHU9bD09PW54fHxsPT09aXg7aWYoY3x8dSlpZihzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmcy5uZWVkc1BNUkVNVXBkYXRlPT09ITApe3MubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChzKTtyZXR1cm4gcj09PW51bGwmJihyPW5ldyBlNihlKSksaD1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzLGgpOnIuZnJvbUN1YmVtYXAocyxoKSx0LnNldChzLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgaD1zLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJmkoaCkpe3I9PT1udWxsJiYocj1uZXcgZTYoZSkpO2xldCBmPWM/ci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMpOnIuZnJvbUN1YmVtYXAocyk7cmV0dXJuIHQuc2V0KHMsZikscy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBzfWZ1bmN0aW9uIGkocyl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylzW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIG8ocyl7bGV0IGw9cy50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIGEoKXt0PW5ldyBXZWFrTWFwLHIhPT1udWxsJiYoci5kaXNwb3NlKCkscj1udWxsKX1yZXR1cm57Z2V0Om4sZGlzcG9zZTphfX1mdW5jdGlvbiBKZHIoZSl7bGV0IHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dIT09dm9pZCAwKXJldHVybiB0W25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPWUuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiB0W25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pIT09bnVsbH0saW5pdDpmdW5jdGlvbihuKXtuLmlzV2ViR0wyP3IoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToocigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHIoIk9FU190ZXh0dXJlX2Zsb2F0IikscigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikscigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikscigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLHIoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikscigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxyKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxyKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKG4pe2xldCBpPXIobik7cmV0dXJuIGk9PT1udWxsJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrbisiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGl9fX1mdW5jdGlvbiBRZHIoZSx0LHIsbil7bGV0IGk9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGQgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tkXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgaVtmLmlkXTtsZXQgcD1vLmdldChmKTtwJiYodC5yZW1vdmUocCksby5kZWxldGUoZikpLG4ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LHIubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGlbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksaVtmLmlkXT0hMCxyLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIGYpdC51cGRhdGUoZltkXSwzNDk2Mik7bGV0IHA9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIHApe2xldCBnPXBbZF07Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXQudXBkYXRlKGdbX10sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLHA9aC5pbmRleCxkPWguYXR0cmlidXRlcy5wb3NpdGlvbixnPTA7aWYocCE9PW51bGwpe2xldCB4PXAuYXJyYXk7Zz1wLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aDtiPFM7Yis9Myl7bGV0IEM9eFtiKzBdLFA9eFtiKzFdLGs9eFtiKzJdO2YucHVzaChDLFAsUCxrLGssQyl9fWVsc2V7bGV0IHg9ZC5hcnJheTtnPWQudmVyc2lvbjtmb3IobGV0IGI9MCxTPXgubGVuZ3RoLzMtMTtiPFM7Yis9Myl7bGV0IEM9YiswLFA9YisxLGs9YisyO2YucHVzaChDLFAsUCxrLGssQyl9fWxldCBfPW5ldyhEZmUoZik/SzM6JDMpKGYsMSk7Xy52ZXJzaW9uPWc7bGV0IHk9by5nZXQoaCk7eSYmdC5yZW1vdmUoeSksby5zZXQoaCxfKX1mdW5jdGlvbiB1KGgpe2xldCBmPW8uZ2V0KGgpO2lmKGYpe2xldCBwPWguaW5kZXg7cCE9PW51bGwmJmYudmVyc2lvbjxwLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBvLmdldChoKX1yZXR1cm57Z2V0OnMsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIHRtcihlLHQscixuKXtsZXQgaT1uLmlzV2ViR0wyLG87ZnVuY3Rpb24gYShmKXtvPWZ9bGV0IHMsbDtmdW5jdGlvbiBjKGYpe3M9Zi50eXBlLGw9Zi5ieXRlc1BlckVsZW1lbnR9ZnVuY3Rpb24gdShmLHApe2UuZHJhd0VsZW1lbnRzKG8scCxzLGYqbCksci51cGRhdGUocCxvLDEpfWZ1bmN0aW9uIGgoZixwLGQpe2lmKGQ9PT0wKXJldHVybjtsZXQgZyxfO2lmKGkpZz1lLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihnPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksXz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLGc9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWdbX10obyxwLHMsZipsLGQpLHIudXBkYXRlKHAsbyxkKX10aGlzLnNldE1vZGU9YSx0aGlzLnNldEluZGV4PWMsdGhpcy5yZW5kZXI9dSx0aGlzLnJlbmRlckluc3RhbmNlcz1ofWZ1bmN0aW9uIGVtcihlKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBuKG8sYSxzKXtzd2l0Y2goci5jYWxscysrLGEpe2Nhc2UgNDpyLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ci5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ci5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ci5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDpyLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpO2JyZWFrfX1mdW5jdGlvbiBpKCl7ci5mcmFtZSsrLHIuY2FsbHM9MCxyLnRyaWFuZ2xlcz0wLHIucG9pbnRzPTAsci5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6cixwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDppLHVwZGF0ZTpufX12YXIgdE09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07dE0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHJtcihlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gbm1yKGUsdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKGVbMV0pfWZ1bmN0aW9uIEx1ZShlLHQpe2xldCByPTEsbj10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7biBpbnN0YW5jZW9mIEludDhBcnJheT9yPTEyNzpuIGluc3RhbmNlb2YgSW50MTZBcnJheT9yPTMyNzY3Om4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P3I9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixuKSxlLmRpdmlkZVNjYWxhcihyKX1mdW5jdGlvbiBpbXIoZSx0LHIpe2xldCBuPXt9LGk9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLGE9bmV3IGoscz1bXTtmb3IobGV0IGM9MDtjPDg7YysrKXNbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgcD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBkPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxnPW8uZ2V0KHUpO2lmKGc9PT12b2lkIDB8fGcuY291bnQhPT1kKXtsZXQgTD1mdW5jdGlvbigpe0IuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9O2chPT12b2lkIDAmJmcudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sUz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLEM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LFA9eD09PSEwPzI6MSxrPUMqUCxPPTE7az50Lm1heFRleHR1cmVTaXplJiYoTz1NYXRoLmNlaWwoay90Lm1heFRleHR1cmVTaXplKSxrPXQubWF4VGV4dHVyZVNpemUpO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkoaypPKjQqZCksQj1uZXcgdE0oRCxrLE8sZCk7Qi5mb3JtYXQ9UW8sQi50eXBlPWpkLEIubmVlZHNVcGRhdGU9ITA7bGV0IEk9UCo0O2ZvcihsZXQgUj0wO1I8ZDtSKyspe2xldCBGPWJbUl0sej1TW1JdLFU9aypPKjQqUjtmb3IobGV0IFc9MDtXPEYuY291bnQ7VysrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoRixXKSxGLm5vcm1hbGl6ZWQ9PT0hMCYmTHVlKGEsRik7bGV0IFo9VypJO0RbVStaKzBdPWEueCxEW1UrWisxXT1hLnksRFtVK1orMl09YS56LERbVStaKzNdPTAseD09PSEwJiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKHosVyksei5ub3JtYWxpemVkPT09ITAmJkx1ZShhLHopLERbVStaKzRdPWEueCxEW1UrWis1XT1hLnksRFtVK1orNl09YS56LERbVStaKzddPTApfX1nPXtjb3VudDpkLHRleHR1cmU6QixzaXplOm5ldyBMdChrLE8pfSxvLnNldCh1LGcpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9bGV0IF89MDtmb3IobGV0IHg9MDt4PHAubGVuZ3RoO3grKylfKz1wW3hdO2xldCB5PXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLV87Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGcudGV4dHVyZSxyKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZSwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGcuc2l6ZSl9ZWxzZXtsZXQgZD1wPT09dm9pZCAwPzA6cC5sZW5ndGgsZz1uW3UuaWRdO2lmKGc9PT12b2lkIDB8fGcubGVuZ3RoIT09ZCl7Zz1bXTtmb3IobGV0IFM9MDtTPGQ7UysrKWdbU109W1MsMF07blt1LmlkXT1nfWZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWdbU107Q1swXT1TLENbMV09cFtTXX1nLnNvcnQobm1yKTtmb3IobGV0IFM9MDtTPDg7UysrKVM8ZCYmZ1tTXVsxXT8oc1tTXVswXT1nW1NdWzBdLHNbU11bMV09Z1tTXVsxXSk6KHNbU11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsc1tTXVsxXT0wKTtzLnNvcnQocm1yKTtsZXQgXz11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBTPTA7Uzw4O1MrKyl7bGV0IEM9c1tTXSxQPUNbMF0saz1DWzFdO1AhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmaz8oXyYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSE9PV9bUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyxfW1BdKSx5JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpIT09eVtQXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTLHlbUF0pLGlbU109ayx4Kz1rKTooXyYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MpLHkmJnUuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSxpW1NdPTApfWxldCBiPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsYiksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaSl9fXJldHVybnt1cGRhdGU6bH19ZnVuY3Rpb24gb21yKGUsdCxyLG4pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG8obCl7bGV0IGM9bi5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gaS5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksaS5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBhKCl7aT1uZXcgV2Vha01hcH1mdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOm8sZGlzcG9zZTphfX12YXIgcjY9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07cjYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgVmZlPW5ldyB2aSxVZmU9bmV3IHRNLHFmZT1uZXcgcjYsR2ZlPW5ldyBIMCxrdWU9W10sUnVlPVtdLE51ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxEdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxPdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBiTShlLHQscil7bGV0IG49ZVswXTtpZihuPD0wfHxuPjApcmV0dXJuIGU7bGV0IGk9dCpyLG89a3VlW2ldO2lmKG89PT12b2lkIDAmJihvPW5ldyBGbG9hdDMyQXJyYXkoaSksa3VlW2ldPW8pLHQhPT0wKXtuLnRvQXJyYXkobywwKTtmb3IobGV0IGE9MSxzPTA7YSE9PXQ7KythKXMrPXIsZVthXS50b0FycmF5KG8scyl9cmV0dXJuIG99ZnVuY3Rpb24gaHMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDYShlLHQpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl19ZnVuY3Rpb24gS1UoZSx0KXtsZXQgcj1SdWVbdF07cj09PXZvaWQgMCYmKHI9bmV3IEludDMyQXJyYXkodCksUnVlW3RdPXIpO2ZvcihsZXQgbj0wO24hPT10OysrbilyW25dPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiByfWZ1bmN0aW9uIGFtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBzbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueSkmJihlLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksclswXT10LngsclsxXT10LnkpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBsbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueXx8clsyXSE9PXQueikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoclswXSE9PXQucnx8clsxXSE9PXQuZ3x8clsyXSE9PXQuYikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLHJbMF09dC5yLHJbMV09dC5nLHJbMl09dC5iKTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTNmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gY21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10Lnp8fHJbM10hPT10LncpJiYoZS51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksclswXT10LngsclsxXT10LnksclsyXT10LnosclszXT10LncpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiB1bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtPdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsT3VlKSxDYShyLG4pfX1mdW5jdGlvbiBobXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtEdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRHVlKSxDYShyLG4pfX1mdW5jdGlvbiBmbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtOdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsTnVlKSxDYShyLG4pfX1mdW5jdGlvbiBwbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gZG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBtbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIGdtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTRpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gX21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiB5bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB2bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB4bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBibXIoZSx0LHIpe2xldCBuPXRoaXMuY2FjaGUsaT1yLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09aSYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxuWzBdPWkpLHIuc2FmZVNldFRleHR1cmUyRCh0fHxWZmUsaSl9ZnVuY3Rpb24gd21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUzRCh0fHxxZmUsaSl9ZnVuY3Rpb24gU21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxHZmUsaSl9ZnVuY3Rpb24gTW1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUyREFycmF5KHR8fFVmZSxpKX1mdW5jdGlvbiBFbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gYW1yO2Nhc2UgMzU2NjQ6cmV0dXJuIHNtcjtjYXNlIDM1NjY1OnJldHVybiBsbXI7Y2FzZSAzNTY2NjpyZXR1cm4gY21yO2Nhc2UgMzU2NzQ6cmV0dXJuIHVtcjtjYXNlIDM1Njc1OnJldHVybiBobXI7Y2FzZSAzNTY3NjpyZXR1cm4gZm1yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBwbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBkbXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBtbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBnbXI7Y2FzZSA1MTI1OnJldHVybiBfbXI7Y2FzZSAzNjI5NDpyZXR1cm4geW1yO2Nhc2UgMzYyOTU6cmV0dXJuIHZtcjtjYXNlIDM2Mjk2OnJldHVybiB4bXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBibXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIHdtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBTbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gTW1yfX1mdW5jdGlvbiBUbXIoZSx0KXtlLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIENtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDIpO2UudW5pZm9ybTJmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gQW1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMyk7ZS51bmlmb3JtM2Z2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBQbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm00ZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIEltcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDQpO2UudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gTG1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsOSk7ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBrbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwxNik7ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBSbXIoZSx0KXtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIE5tcihlLHQpe2UudW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gRG1yKGUsdCl7ZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBPbXIoZSx0KXtlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHptcihlLHQpe2UudW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEZtcihlLHQpe2UudW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJtcihlLHQpe2UudW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEhtcihlLHQpe2UudW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFZtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmUyRCh0W29dfHxWZmUsaVtvXSl9ZnVuY3Rpb24gVW1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlM0QodFtvXXx8cWZlLGlbb10pfWZ1bmN0aW9uIHFtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fEdmZSxpW29dKX1mdW5jdGlvbiBHbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNldFRleHR1cmUyREFycmF5KHRbb118fFVmZSxpW29dKX1mdW5jdGlvbiBXbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gVG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIENtcjtjYXNlIDM1NjY1OnJldHVybiBBbXI7Y2FzZSAzNTY2NjpyZXR1cm4gUG1yO2Nhc2UgMzU2NzQ6cmV0dXJuIEltcjtjYXNlIDM1Njc1OnJldHVybiBMbXI7Y2FzZSAzNTY3NjpyZXR1cm4ga21yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBSbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBObXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBEbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPbXI7Y2FzZSA1MTI1OnJldHVybiB6bXI7Y2FzZSAzNjI5NDpyZXR1cm4gRm1yO2Nhc2UgMzYyOTU6cmV0dXJuIEJtcjtjYXNlIDM2Mjk2OnJldHVybiBIbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBWbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIFVtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBxbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gR21yfX1mdW5jdGlvbiBZbXIoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmFkZHI9cix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9RW1yKHQudHlwZSl9ZnVuY3Rpb24gV2ZlKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9V21yKHQudHlwZSl9V2ZlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLmNhY2hlO2UgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09ZS5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgpKSxDYSh0LGUpfTtmdW5jdGlvbiBZZmUoZSl7dGhpcy5pZD1lLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fVlmZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuc2VxO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT1uW2ldO2Euc2V0VmFsdWUoZSx0W2EuaWRdLHIpfX07dmFyIHB1dD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24genVlKGUsdCl7ZS5zZXEucHVzaCh0KSxlLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGptcihlLHQscil7bGV0IG49ZS5uYW1lLGk9bi5sZW5ndGg7Zm9yKHB1dC5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wdXQuZXhlYyhuKSxhPXB1dC5sYXN0SW5kZXgscz1vWzFdLGw9b1syXT09PSJdIixjPW9bM107aWYobCYmKHM9c3wwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZhKzI9PT1pKXt6dWUocixjPT09dm9pZCAwP25ldyBZbXIocyxlLHQpOm5ldyBXZmUocyxlLHQpKTticmVha31lbHNle2xldCBoPXIubWFwW3NdO2g9PT12b2lkIDAmJihoPW5ldyBZZmUocyksenVlKHIsaCkpLHI9aH19fWZ1bmN0aW9uIEIwKGUsdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IHI9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgbj0wO248cjsrK24pe2xldCBpPWUuZ2V0QWN0aXZlVW5pZm9ybSh0LG4pLG89ZS5nZXRVbmlmb3JtTG9jYXRpb24odCxpLm5hbWUpO2ptcihpLG8sdGhpcyl9fUIwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlLHQscixuKXtsZXQgaT10aGlzLm1hcFt0XTtpIT09dm9pZCAwJiZpLnNldFZhbHVlKGUscixuKX07QjAucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10W3JdO24hPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSxyLG4pfTtCMC51cGxvYWQ9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpIT09bzsrK2kpe2xldCBhPXRbaV0scz1yW2EuaWRdO3MubmVlZHNVcGRhdGUhPT0hMSYmYS5zZXRWYWx1ZShlLHMudmFsdWUsbil9fTtCMC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbil7bGV0IG89ZVtuXTtvLmlkIGluIHQmJnIucHVzaChvKX1yZXR1cm4gcn07ZnVuY3Rpb24gRnVlKGUsdCxyKXtsZXQgbj1lLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gZS5zaGFkZXJTb3VyY2UobixyKSxlLmNvbXBpbGVTaGFkZXIobiksbn12YXIgWG1yPTA7ZnVuY3Rpb24gJG1yKGUpe2xldCB0PWUuc3BsaXQoYApgKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXIrMSsiOiAiK3Rbcl07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIEttcihlKXtzd2l0Y2goZSl7Y2FzZSBRZDpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgV246cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsZSksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gQnVlKGUsdCxyKXtsZXQgbj1lLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxpPWUuZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIG4mJmk9PT0iIj8iIjpyLnRvVXBwZXJDYXNlKCkrYAoKYCtpK2AKCmArJG1yKGUuZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiBabXIoZSx0KXtsZXQgcj1LbXIodCk7cmV0dXJuInZlYzQgIitlKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrclswXStyWzFdKyI7IH0ifWZ1bmN0aW9uIEptcihlLHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIGFmZTpyPSJMaW5lYXIiO2JyZWFrO2Nhc2Ugc2ZlOnI9IlJlaW5oYXJkIjticmVhaztjYXNlIGxmZTpyPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgY2ZlOnI9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgdWZlOnI9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxyPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrZSsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIityKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gUW1yKGUpe3JldHVybltlLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8ZS5jbGVhcmNvYXROb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmd8fGUuc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGUuZXh0ZW5zaW9uRnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixlLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwfHxlLnRyYW5zbWlzc2lvbikmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoSFApLmpvaW4oYApgKX1mdW5jdGlvbiB0Z3IoZSl7bGV0IHQ9W107Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07biE9PSExJiZ0LnB1c2goIiNkZWZpbmUgIityKyIgIituKX1yZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gZWdyKGUsdCl7bGV0IHI9e30sbj1lLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG89ZS5nZXRBY3RpdmVBdHRyaWIodCxpKSxhPW8ubmFtZSxzPTE7by50eXBlPT09MzU2NzQmJihzPTIpLG8udHlwZT09PTM1Njc1JiYocz0zKSxvLnR5cGU9PT0zNTY3NiYmKHM9NCksclthXT17dHlwZTpvLnR5cGUsbG9jYXRpb246ZS5nZXRBdHRyaWJMb2NhdGlvbih0LGEpLGxvY2F0aW9uU2l6ZTpzfX1yZXR1cm4gcn1mdW5jdGlvbiBIUChlKXtyZXR1cm4gZSE9PSIifWZ1bmN0aW9uIEh1ZShlLHQpe3JldHVybiBlLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBWdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciByZ3I9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBKdXQoZSl7cmV0dXJuIGUucmVwbGFjZShyZ3IsbmdyKX1mdW5jdGlvbiBuZ3IoZSx0KXtsZXQgcj1oclt0XTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gSnV0KHIpfXZhciBpZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxvZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBVdWUoZSl7cmV0dXJuIGUucmVwbGFjZShvZ3IsamZlKS5yZXBsYWNlKGlncixhZ3IpfWZ1bmN0aW9uIGFncihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksamZlKGUsdCxyLG4pfWZ1bmN0aW9uIGpmZShlLHQscixuKXtsZXQgaT0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChyKTtvKyspaSs9bi5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIGl9ZnVuY3Rpb24gcXVlKGUpe2xldCB0PSJwcmVjaXNpb24gIitlLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtlLnByZWNpc2lvbisiIGludDsiO3JldHVybiBlLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDplLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gc2dyKGUpe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIGUuc2hhZG93TWFwVHlwZT09PUNodD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOmUuc2hhZG93TWFwVHlwZT09PUZoZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6ZS5zaGFkb3dNYXBUeXBlPT09RjMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGxncihlKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuZW52TWFwTW9kZSl7Y2FzZSBueDpjYXNlIGl4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgeE06Y2FzZSB6Njp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBjZ3IoZSl7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSB6Njp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiB1Z3IoZSl7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihlLmVudk1hcClzd2l0Y2goZS5jb21iaW5lKXtjYXNlIE82OnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBpZmU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBvZmU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gaGdyKGUsdCxyLG4pe2xldCBpPWUuZ2V0Q29udGV4dCgpLG89ci5kZWZpbmVzLGE9ci52ZXJ0ZXhTaGFkZXIscz1yLmZyYWdtZW50U2hhZGVyLGw9c2dyKHIpLGM9bGdyKHIpLHU9Y2dyKHIpLGg9dWdyKHIpLGY9ci5pc1dlYkdMMj8iIjpRbXIocikscD10Z3IobyksZD1pLmNyZWF0ZVByb2dyYW0oKSxnLF8seT1yLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK3IuZ2xzbFZlcnNpb24rYApgOiIiO3IuaXNSYXdTaGFkZXJNYXRlcmlhbD8oZz1bcF0uZmlsdGVyKEhQKS5qb2luKGAKYCksZy5sZW5ndGg+MCYmKGcrPWAKYCksXz1bZixwXS5maWx0ZXIoSFApLmpvaW4oYApgKSxfLmxlbmd0aD4wJiYoXys9YApgKSk6KGc9W3F1ZShyKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3Iuc2hhZGVyTmFtZSxwLHIuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLHIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK3IubWF4Qm9uZXMsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsci5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHIuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixyLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHIubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHIuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixyLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsci5kaXNwbGFjZW1lbnRNYXAmJnIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHIudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixyLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixyLm1vcnBoTm9ybWFscyYmci5mbGF0U2hhZGluZz09PSExPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHIubW9ycGhUYXJnZXRzJiZyLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIityLm1vcnBoVGFyZ2V0c0NvdW50OiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCIJYXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiCWF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIglhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIglhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIglhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIgkjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIgkjZWxzZSIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIgkjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCIJYXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLGAKYF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXz1bZixxdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLnVzZUZvZyYmci5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsci51c2VGb2cmJnIuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsci5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsci5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixyLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsci5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixyLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixyLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixyLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsci5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsci5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9yc3x8ci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixyLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLHIudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsci51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsci5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmci5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoci5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxyLmVudk1hcCkmJnIucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixyLnRvbmVNYXBwaW5nIT09S2Q/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixyLnRvbmVNYXBwaW5nIT09S2Q/aHIudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixyLnRvbmVNYXBwaW5nIT09S2Q/Sm1yKCJ0b25lTWFwcGluZyIsci50b25lTWFwcGluZyk6IiIsci5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixyLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixoci5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxabXIoImxpbmVhclRvT3V0cHV0VGV4ZWwiLHIub3V0cHV0RW5jb2RpbmcpLHIuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIityLmRlcHRoUGFja2luZzoiIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApKSxhPUp1dChhKSxhPUh1ZShhLHIpLGE9VnVlKGEscikscz1KdXQocykscz1IdWUocyxyKSxzPVZ1ZShzLHIpLGE9VXVlKGEpLHM9VXVlKHMpLHIuaXNXZWJHTDImJnIuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYoeT1gI3ZlcnNpb24gMzAwIGVzCmAsZz1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK2csXz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCtfKTtsZXQgeD15K2crYSxiPXkrXytzLFM9RnVlKGksMzU2MzMseCksQz1GdWUoaSwzNTYzMixiKTtpZihpLmF0dGFjaFNoYWRlcihkLFMpLGkuYXR0YWNoU2hhZGVyKGQsQyksci5pbmRleDBBdHRyaWJ1dGVOYW1lIT09dm9pZCAwP2kuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCxyLmluZGV4MEF0dHJpYnV0ZU5hbWUpOnIubW9ycGhUYXJnZXRzPT09ITAmJmkuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCwicG9zaXRpb24iKSxpLmxpbmtQcm9ncmFtKGQpLGUuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2xldCBPPWkuZ2V0UHJvZ3JhbUluZm9Mb2coZCkudHJpbSgpLEQ9aS5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSxCPWkuZ2V0U2hhZGVySW5mb0xvZyhDKS50cmltKCksST0hMCxMPSEwO2lmKGkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE0KT09PSExKXtJPSExO2xldCBSPUJ1ZShpLFMsInZlcnRleCIpLEY9QnVlKGksQywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK2kuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIraS5nZXRQcm9ncmFtUGFyYW1ldGVyKGQsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArTytgCmArUitgCmArRil9ZWxzZSBPIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixPKTooRD09PSIifHxCPT09IiIpJiYoTD0hMSk7TCYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOkkscHJvZ3JhbUxvZzpPLHZlcnRleFNoYWRlcjp7bG9nOkQscHJlZml4Omd9LGZyYWdtZW50U2hhZGVyOntsb2c6QixwcmVmaXg6X319KX1pLmRlbGV0ZVNoYWRlcihTKSxpLmRlbGV0ZVNoYWRlcihDKTtsZXQgUDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPW5ldyBCMChpLGQpKSxQfTtsZXQgaztyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGs9PT12b2lkIDAmJihrPWVncihpLGQpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksaS5kZWxldGVQcm9ncmFtKGQpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1yLnNoYWRlck5hbWUsdGhpcy5pZD1YbXIrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09ZCx0aGlzLnZlcnRleFNoYWRlcj1TLHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfXZhciBmZ3I9MCxRdXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCByPXQudmVydGV4U2hhZGVyLG49dC5mcmFnbWVudFNoYWRlcixpPXRoaXMuX2dldFNoYWRlclN0YWdlKHIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UobiksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiBhLmhhcyhpKT09PSExJiYoYS5hZGQoaSksaS51c2VkVGltZXMrKyksYS5oYXMobyk9PT0hMSYmKGEuYWRkKG8pLG8udXNlZFRpbWVzKyspLHRoaXN9cmVtb3ZlKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZS5nZXQodCk7Zm9yKGxldCBuIG9mIHIpbi51c2VkVGltZXMtLSxuLnVzZWRUaW1lcz09PTAmJnRoaXMuc2hhZGVyQ2FjaGUuZGVsZXRlKG4pO3JldHVybiB0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKHQpLHRoaXN9Z2V0VmVydGV4U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQudmVydGV4U2hhZGVyKS5pZH1nZXRGcmFnbWVudFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LmZyYWdtZW50U2hhZGVyKS5pZH1kaXNwb3NlKCl7dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpLHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpfV9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZTtyZXR1cm4gci5oYXModCk9PT0hMSYmci5zZXQodCxuZXcgU2V0KSxyLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IHI9dGhpcy5zaGFkZXJDYWNoZTtpZihyLmhhcyh0KT09PSExKXtsZXQgbj1uZXcgdGh0O3Iuc2V0KHQsbil9cmV0dXJuIHIuZ2V0KHQpfX0sdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1mZ3IrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZnVuY3Rpb24gcGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPW5ldyBYMyxsPW5ldyBRdXQsYz1bXSx1PWkuaXNXZWJHTDIsaD1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLGQ9aS52ZXJ0ZXhUZXh0dXJlcyxnPWkucHJlY2lzaW9uLF89e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiB5KEkpe2xldCBSPUkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigocC0yMCkvNCksVT1NYXRoLm1pbih6LFIubGVuZ3RoKTtyZXR1cm4gVTxSLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitSLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1UrIi4iKSwwKTpVfX1mdW5jdGlvbiB4KEksTCxSLEYseil7bGV0IFU9Ri5mb2csVz1JLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFo9KEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9yOnQpLmdldChJLmVudk1hcHx8VykscnQ9X1tJLnR5cGVdLG90PXouaXNTa2lubmVkTWVzaD95KHopOjA7SS5wcmVjaXNpb24hPT1udWxsJiYoZz1pLmdldE1heFByZWNpc2lvbihJLnByZWNpc2lvbiksZyE9PUkucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsSS5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixnLCJpbnN0ZWFkLiIpKTtsZXQgc3QsU3QsYnQsTXQ7aWYocnQpe2xldCBYPWFoW3J0XTtzdD1YLnZlcnRleFNoYWRlcixTdD1YLmZyYWdtZW50U2hhZGVyfWVsc2Ugc3Q9SS52ZXJ0ZXhTaGFkZXIsU3Q9SS5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShJKSxidD1sLmdldFZlcnRleFNoYWRlcklEKEkpLE10PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChJKTtsZXQgbHQ9ZS5nZXRSZW5kZXJUYXJnZXQoKSxLdD1JLmFscGhhVGVzdD4wLF90PUkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6cnQsc2hhZGVyTmFtZTpJLnR5cGUsdmVydGV4U2hhZGVyOnN0LGZyYWdtZW50U2hhZGVyOlN0LGRlZmluZXM6SS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmJ0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6TXQsaXNSYXdTaGFkZXJNYXRlcmlhbDpJLmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjpJLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpnLGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bHQ9PT1udWxsP2Uub3V0cHV0RW5jb2Rpbmc6bHQuaXNYUlJlbmRlclRhcmdldD09PSEwP2x0LnRleHR1cmUuZW5jb2Rpbmc6UWQsbWFwOiEhSS5tYXAsbWF0Y2FwOiEhSS5tYXRjYXAsZW52TWFwOiEhWixlbnZNYXBNb2RlOlomJloubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFaJiYoWi5tYXBwaW5nPT09eE18fFoubWFwcGluZz09PXo2KSxsaWdodE1hcDohIUkubGlnaHRNYXAsYW9NYXA6ISFJLmFvTWFwLGVtaXNzaXZlTWFwOiEhSS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhSS5idW1wTWFwLG5vcm1hbE1hcDohIUkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PUxmZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09YXgsZGVjb2RlVmlkZW9UZXh0dXJlOiEhSS5tYXAmJkkubWFwLmlzVmlkZW9UZXh0dXJlPT09ITAmJkkubWFwLmVuY29kaW5nPT09V24sY2xlYXJjb2F0Ol90LGNsZWFyY29hdE1hcDpfdCYmISFJLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6X3QmJiEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOl90JiYhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUkuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUkuYWxwaGFNYXAsYWxwaGFUZXN0Okt0LGFscGhhV3JpdGU6SS5hbHBoYVdyaXRlfHxJLnRyYW5zcGFyZW50LGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxzaGVlbjpJLnNoZWVuPjAsc2hlZW5Db2xvck1hcDohIUkuc2hlZW5Db2xvck1hcCxzaGVlblJvdWdobmVzc01hcDohIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdHJhbnNtaXNzaW9uOkkudHJhbnNtaXNzaW9uPjAsdHJhbnNtaXNzaW9uTWFwOiEhSS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhSS50aGlja25lc3NNYXAsY29tYmluZTpJLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFJLm5vcm1hbE1hcCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6SS52ZXJ0ZXhDb2xvcnM9PT0hMCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx2ZXJ0ZXhVdnM6ISFJLm1hcHx8ISFJLmJ1bXBNYXB8fCEhSS5ub3JtYWxNYXB8fCEhSS5zcGVjdWxhck1hcHx8ISFJLmFscGhhTWFwfHwhIUkuZW1pc3NpdmVNYXB8fCEhSS5yb3VnaG5lc3NNYXB8fCEhSS5tZXRhbG5lc3NNYXB8fCEhSS5jbGVhcmNvYXRNYXB8fCEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fCEhSS5jbGVhcmNvYXROb3JtYWxNYXB8fCEhSS5kaXNwbGFjZW1lbnRNYXB8fCEhSS50cmFuc21pc3Npb25NYXB8fCEhSS50aGlja25lc3NNYXB8fCEhSS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISFJLnNwZWN1bGFyQ29sb3JNYXB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdXZzVmVydGV4T25seTohKCEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxJLnRyYW5zbWlzc2lvbj4wfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuPjB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXApJiYhIUkuZGlzcGxhY2VtZW50TWFwLGZvZzohIVUsdXNlRm9nOkkuZm9nLGZvZ0V4cDI6VSYmVS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsc2tpbm5pbmc6ei5pc1NraW5uZWRNZXNoPT09ITAmJm90PjAsbWF4Qm9uZXM6b3QsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpMLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpMLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOkwuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6TC5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpMLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpMLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpMLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOkwuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDplLnNoYWRvd01hcC5lbmFibGVkJiZSLmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6ZS5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzpJLnRvbmVNYXBwZWQ/ZS50b25lTWFwcGluZzpLZCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czplLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpJLnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDpJLnNpZGU9PT1MMSxmbGlwU2lkZWQ6SS5zaWRlPT09SWksZGVwdGhQYWNraW5nOkkuZGVwdGhQYWNraW5nIT09dm9pZCAwP0kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6SS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpJLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKEkpe2xldCBMPVtdO2lmKEkuc2hhZGVySUQ/TC5wdXNoKEkuc2hhZGVySUQpOihMLnB1c2goSS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksTC5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLEkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IFIgaW4gSS5kZWZpbmVzKUwucHVzaChSKSxMLnB1c2goSS5kZWZpbmVzW1JdKTtyZXR1cm4gSS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihTKEwsSSksQyhMLEkpLEwucHVzaChlLm91dHB1dEVuY29kaW5nKSksTC5wdXNoKEkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxMLmpvaW4oKX1mdW5jdGlvbiBTKEksTCl7SS5wdXNoKEwucHJlY2lzaW9uKSxJLnB1c2goTC5vdXRwdXRFbmNvZGluZyksSS5wdXNoKEwuZW52TWFwTW9kZSksSS5wdXNoKEwuY29tYmluZSksSS5wdXNoKEwudmVydGV4VXZzKSxJLnB1c2goTC5mb2dFeHAyKSxJLnB1c2goTC5zaXplQXR0ZW51YXRpb24pLEkucHVzaChMLm1heEJvbmVzKSxJLnB1c2goTC5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKEwubnVtRGlyTGlnaHRzKSxJLnB1c2goTC5udW1Qb2ludExpZ2h0cyksSS5wdXNoKEwubnVtU3BvdExpZ2h0cyksSS5wdXNoKEwubnVtSGVtaUxpZ2h0cyksSS5wdXNoKEwubnVtUmVjdEFyZWFMaWdodHMpLEkucHVzaChMLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVNwb3RMaWdodFNoYWRvd3MpLEkucHVzaChMLnNoYWRvd01hcFR5cGUpLEkucHVzaChMLnRvbmVNYXBwaW5nKSxJLnB1c2goTC5udW1DbGlwcGluZ1BsYW5lcyksSS5wdXNoKEwubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKEwuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gQyhJLEwpe3MuZGlzYWJsZUFsbCgpLEwuaXNXZWJHTDImJnMuZW5hYmxlKDApLEwuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSksTC5pbnN0YW5jaW5nJiZzLmVuYWJsZSgyKSxMLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMyksTC5tYXAmJnMuZW5hYmxlKDQpLEwubWF0Y2FwJiZzLmVuYWJsZSg1KSxMLmVudk1hcCYmcy5lbmFibGUoNiksTC5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLEwubGlnaHRNYXAmJnMuZW5hYmxlKDgpLEwuYW9NYXAmJnMuZW5hYmxlKDkpLEwuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxMLmJ1bXBNYXAmJnMuZW5hYmxlKDExKSxMLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLEwub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxMLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmcy5lbmFibGUoMTQpLEwuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSksTC5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxMLmNsZWFyY29hdFJvdWdobmVzc01hcCYmcy5lbmFibGUoMTcpLEwuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCksTC5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxMLnNwZWN1bGFyTWFwJiZzLmVuYWJsZSgyMCksTC5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLEwuZ3JhZGllbnRNYXAmJnMuZW5hYmxlKDIzKSxMLmFscGhhTWFwJiZzLmVuYWJsZSgyNCksTC5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxMLnZlcnRleENvbG9ycyYmcy5lbmFibGUoMjYpLEwudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNyksTC52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxMLnZlcnRleFRhbmdlbnRzJiZzLmVuYWJsZSgyOSksTC51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCksTC5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxMLnVzZUZvZyYmcy5lbmFibGUoMCksTC5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSksTC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxMLnNraW5uaW5nJiZzLmVuYWJsZSgzKSxMLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLEwubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxMLm1vcnBoTm9ybWFscyYmcy5lbmFibGUoNiksTC5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLEwuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCksTC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmcy5lbmFibGUoOSksTC5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLEwuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSksTC5kZXB0aFBhY2tpbmcmJnMuZW5hYmxlKDEyKSxMLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLEwuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxMLnNwZWN1bGFyQ29sb3JNYXAmJnMuZW5hYmxlKDE1KSxMLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLEwudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNyksTC50aGlja25lc3NNYXAmJnMuZW5hYmxlKDE4KSxMLnNoZWVuJiZzLmVuYWJsZSgxOSksTC5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCksTC5zaGVlblJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLEwuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksSS5wdXNoKHMubWFzayl9ZnVuY3Rpb24gUChJKXtsZXQgTD1fW0kudHlwZV0sUjtpZihMKXtsZXQgRj1haFtMXTtSPXpmZS5jbG9uZShGLnVuaWZvcm1zKX1lbHNlIFI9SS51bmlmb3JtcztyZXR1cm4gUn1mdW5jdGlvbiBrKEksTCl7bGV0IFI7Zm9yKGxldCBGPTAsej1jLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1jW0ZdO2lmKFUuY2FjaGVLZXk9PT1MKXtSPVUsKytSLnVzZWRUaW1lczticmVha319cmV0dXJuIFI9PT12b2lkIDAmJihSPW5ldyBoZ3IoZSxMLEksbyksYy5wdXNoKFIpKSxSfWZ1bmN0aW9uIE8oSSl7aWYoLS1JLnVzZWRUaW1lcz09PTApe2xldCBMPWMuaW5kZXhPZihJKTtjW0xdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxJLmRlc3Ryb3koKX19ZnVuY3Rpb24gRChJKXtsLnJlbW92ZShJKX1mdW5jdGlvbiBCKCl7bC5kaXNwb3NlKCl9cmV0dXJue2dldFBhcmFtZXRlcnM6eCxnZXRQcm9ncmFtQ2FjaGVLZXk6YixnZXRVbmlmb3JtczpQLGFjcXVpcmVQcm9ncmFtOmsscmVsZWFzZVByb2dyYW06TyxyZWxlYXNlU2hhZGVyQ2FjaGU6RCxwcm9ncmFtczpjLGRpc3Bvc2U6Qn19ZnVuY3Rpb24gZGdyKCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdChvKXtsZXQgYT1lLmdldChvKTtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30sZS5zZXQobyxhKSksYX1mdW5jdGlvbiByKG8pe2UuZGVsZXRlKG8pfWZ1bmN0aW9uIG4obyxhLHMpe2UuZ2V0KG8pW2FdPXN9ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LHJlbW92ZTpyLHVwZGF0ZTpuLGRpc3Bvc2U6aX19ZnVuY3Rpb24gbWdyKGUsdCl7cmV0dXJuIGUuZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9lLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOmUucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP2UucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjplLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9lLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6ZS56IT09dC56P2Uuei10Lno6ZS5pZC10LmlkfWZ1bmN0aW9uIEd1ZShlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS56IT09dC56P3Quei1lLno6ZS5pZC10LmlkfWZ1bmN0aW9uIFd1ZSgpe2xldCBlPVtdLHQ9MCxyPVtdLG49W10saT1bXTtmdW5jdGlvbiBvKCl7dD0wLHIubGVuZ3RoPTAsbi5sZW5ndGg9MCxpLmxlbmd0aD0wfWZ1bmN0aW9uIGEoaCxmLHAsZCxnLF8pe2xldCB5PWVbdF07cmV0dXJuIHk9PT12b2lkIDA/KHk9e2lkOmguaWQsb2JqZWN0OmgsZ2VvbWV0cnk6ZixtYXRlcmlhbDpwLGdyb3VwT3JkZXI6ZCxyZW5kZXJPcmRlcjpoLnJlbmRlck9yZGVyLHo6Zyxncm91cDpffSxlW3RdPXkpOih5LmlkPWguaWQseS5vYmplY3Q9aCx5Lmdlb21ldHJ5PWYseS5tYXRlcmlhbD1wLHkuZ3JvdXBPcmRlcj1kLHkucmVuZGVyT3JkZXI9aC5yZW5kZXJPcmRlcix5Lno9Zyx5Lmdyb3VwPV8pLHQrKyx5fWZ1bmN0aW9uIHMoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi5wdXNoKHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnB1c2goeSk6ci5wdXNoKHkpfWZ1bmN0aW9uIGwoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi51bnNoaWZ0KHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnVuc2hpZnQoeSk6ci51bnNoaWZ0KHkpfWZ1bmN0aW9uIGMoaCxmKXtyLmxlbmd0aD4xJiZyLnNvcnQoaHx8bWdyKSxuLmxlbmd0aD4xJiZuLnNvcnQoZnx8R3VlKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8R3VlKX1mdW5jdGlvbiB1KCl7Zm9yKGxldCBoPXQsZj1lLmxlbmd0aDtoPGY7aCsrKXtsZXQgcD1lW2hdO2lmKHAuaWQ9PT1udWxsKWJyZWFrO3AuaWQ9bnVsbCxwLm9iamVjdD1udWxsLHAuZ2VvbWV0cnk9bnVsbCxwLm1hdGVyaWFsPW51bGwscC5ncm91cD1udWxsfX1yZXR1cm57b3BhcXVlOnIsdHJhbnNtaXNzaXZlOm4sdHJhbnNwYXJlbnQ6aSxpbml0Om8scHVzaDpzLHVuc2hpZnQ6bCxmaW5pc2g6dSxzb3J0OmN9fWZ1bmN0aW9uIGdncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobixpKXtsZXQgbztyZXR1cm4gZS5oYXMobik9PT0hMT8obz1uZXcgV3VlLGUuc2V0KG4sW29dKSk6aT49ZS5nZXQobikubGVuZ3RoPyhvPW5ldyBXdWUsZS5nZXQobikucHVzaChvKSk6bz1lLmdldChuKVtpXSxvfWZ1bmN0aW9uIHIoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxkaXNwb3NlOnJ9fWZ1bmN0aW9uIF9ncigpe2xldCBlPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoZVt0LmlkXSE9PXZvaWQgMClyZXR1cm4gZVt0LmlkXTtsZXQgcjtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixjb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixjb2xvcjpuZXcgbmUsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj17ZGlyZWN0aW9uOm5ldyBqLHNreUNvbG9yOm5ldyBuZSxncm91bmRDb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6cj17Y29sb3I6bmV3IG5lLHBvc2l0aW9uOm5ldyBqLGhhbGZXaWR0aDpuZXcgaixoYWxmSGVpZ2h0Om5ldyBqfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX1mdW5jdGlvbiB5Z3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0fTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX12YXIgdmdyPTA7ZnVuY3Rpb24geGdyKGUsdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShlLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBiZ3IoZSx0KXtsZXQgcj1uZXcgX2dyLG49eWdyKCksaT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKWkucHJvYmUucHVzaChuZXcgaik7bGV0IG89bmV3IGosYT1uZXcgTWUscz1uZXcgTWU7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAscD0wLGQ9MDtmb3IobGV0IEQ9MDtEPDk7RCsrKWkucHJvYmVbRF0uc2V0KDAsMCwwKTtsZXQgZz0wLF89MCx5PTAseD0wLGI9MCxTPTAsQz0wLFA9MDt1LnNvcnQoeGdyKTtsZXQgaz1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgRD0wLEI9dS5sZW5ndGg7RDxCO0QrKyl7bGV0IEk9dVtEXSxMPUkuY29sb3IsUj1JLmludGVuc2l0eSxGPUkuZGlzdGFuY2Usej1JLnNoYWRvdyYmSS5zaGFkb3cubWFwP0kuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoSS5pc0FtYmllbnRMaWdodClmKz1MLnIqUiprLHArPUwuZypSKmssZCs9TC5iKlIqaztlbHNlIGlmKEkuaXNMaWdodFByb2JlKWZvcihsZXQgVT0wO1U8OTtVKyspaS5wcm9iZVtVXS5hZGRTY2FsZWRWZWN0b3IoSS5zaC5jb2VmZmljaWVudHNbVV0sUik7ZWxzZSBpZihJLmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KmspLEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxpLmRpcmVjdGlvbmFsU2hhZG93W2ddPVosaS5kaXJlY3Rpb25hbFNoYWRvd01hcFtnXT16LGkuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZ109SS5zaGFkb3cubWF0cml4LFMrK31pLmRpcmVjdGlvbmFsW2ddPVUsZysrfWVsc2UgaWYoSS5pc1Nwb3RMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksVS5jb2xvci5jb3B5KEwpLm11bHRpcGx5U2NhbGFyKFIqayksVS5kaXN0YW5jZT1GLFUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxVLnBlbnVtYnJhQ29zPU1hdGguY29zKEkuYW5nbGUqKDEtSS5wZW51bWJyYSkpLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5zcG90U2hhZG93W3ldPVosaS5zcG90U2hhZG93TWFwW3ldPXosaS5zcG90U2hhZG93TWF0cml4W3ldPUkuc2hhZG93Lm1hdHJpeCxQKyt9aS5zcG90W3ldPVUseSsrfWVsc2UgaWYoSS5pc1JlY3RBcmVhTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1UuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKSxVLmhhbGZXaWR0aC5zZXQoSS53aWR0aCouNSwwLDApLFUuaGFsZkhlaWdodC5zZXQoMCxJLmhlaWdodCouNSwwKSxpLnJlY3RBcmVhW3hdPVUseCsrfWVsc2UgaWYoSS5pc1BvaW50TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxVLmRpc3RhbmNlPUkuZGlzdGFuY2UsVS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxaLnNoYWRvd0NhbWVyYU5lYXI9Vy5jYW1lcmEubmVhcixaLnNoYWRvd0NhbWVyYUZhcj1XLmNhbWVyYS5mYXIsaS5wb2ludFNoYWRvd1tfXT1aLGkucG9pbnRTaGFkb3dNYXBbX109eixpLnBvaW50U2hhZG93TWF0cml4W19dPUkuc2hhZG93Lm1hdHJpeCxDKyt9aS5wb2ludFtfXT1VLF8rK31lbHNlIGlmKEkuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1Uuc2t5Q29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLGkuaGVtaVtiXT1VLGIrK319eD4wJiYodC5pc1dlYkdMMnx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITA/KGkucmVjdEFyZWFMVEMxPXJlLkxUQ19GTE9BVF8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19GTE9BVF8yKTplLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfSEFMRl8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxpLmFtYmllbnRbMF09ZixpLmFtYmllbnRbMV09cCxpLmFtYmllbnRbMl09ZDtsZXQgTz1pLmhhc2g7KE8uZGlyZWN0aW9uYWxMZW5ndGghPT1nfHxPLnBvaW50TGVuZ3RoIT09X3x8Ty5zcG90TGVuZ3RoIT09eXx8Ty5yZWN0QXJlYUxlbmd0aCE9PXh8fE8uaGVtaUxlbmd0aCE9PWJ8fE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09U3x8Ty5udW1Qb2ludFNoYWRvd3MhPT1DfHxPLm51bVNwb3RTaGFkb3dzIT09UCkmJihpLmRpcmVjdGlvbmFsLmxlbmd0aD1nLGkuc3BvdC5sZW5ndGg9eSxpLnJlY3RBcmVhLmxlbmd0aD14LGkucG9pbnQubGVuZ3RoPV8saS5oZW1pLmxlbmd0aD1iLGkuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPVMsaS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9UyxpLnBvaW50U2hhZG93Lmxlbmd0aD1DLGkucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUMsaS5zcG90U2hhZG93Lmxlbmd0aD1QLGkuc3BvdFNoYWRvd01hcC5sZW5ndGg9UCxpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1TLGkucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUMsaS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1QLE8uZGlyZWN0aW9uYWxMZW5ndGg9ZyxPLnBvaW50TGVuZ3RoPV8sTy5zcG90TGVuZ3RoPXksTy5yZWN0QXJlYUxlbmd0aD14LE8uaGVtaUxlbmd0aD1iLE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPVMsTy5udW1Qb2ludFNoYWRvd3M9QyxPLm51bVNwb3RTaGFkb3dzPVAsaS52ZXJzaW9uPXZncisrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxwPTAsZD0wLGc9MCxfPTAseT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxiPXUubGVuZ3RoO3g8Yjt4Kyspe2xldCBTPXVbeF07aWYoUy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBDPWkuZGlyZWN0aW9uYWxbZl07Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGYrK31lbHNlIGlmKFMuaXNTcG90TGlnaHQpe2xldCBDPWkuc3BvdFtkXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy50YXJnZXQubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnN1YihvKSxDLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksZCsrfWVsc2UgaWYoUy5pc1JlY3RBcmVhTGlnaHQpe2xldCBDPWkucmVjdEFyZWFbZ107Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSkscy5pZGVudGl0eSgpLGEuY29weShTLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHkpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEMuaGFsZldpZHRoLnNldChTLndpZHRoKi41LDAsMCksQy5oYWxmSGVpZ2h0LnNldCgwLFMuaGVpZ2h0Ki41LDApLEMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxDLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLGcrK31lbHNlIGlmKFMuaXNQb2ludExpZ2h0KXtsZXQgQz1pLnBvaW50W3BdO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHArK31lbHNlIGlmKFMuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBDPWkuaGVtaVtfXTtDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLEMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLF8rK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOml9fWZ1bmN0aW9uIFl1ZShlLHQpe2xldCByPW5ldyBiZ3IoZSx0KSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe24ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgpe24ucHVzaChoKX1mdW5jdGlvbiBzKGgpe2kucHVzaChoKX1mdW5jdGlvbiBsKGgpe3Iuc2V0dXAobixoKX1mdW5jdGlvbiBjKGgpe3Iuc2V0dXBWaWV3KG4saCl9cmV0dXJue2luaXQ6byxzdGF0ZTp7bGlnaHRzQXJyYXk6bixzaGFkb3dzQXJyYXk6aSxsaWdodHM6cn0sc2V0dXBMaWdodHM6bCxzZXR1cExpZ2h0c1ZpZXc6YyxwdXNoTGlnaHQ6YSxwdXNoU2hhZG93OnN9fWZ1bmN0aW9uIHdncihlLHQpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4obyxhPTApe2xldCBzO3JldHVybiByLmhhcyhvKT09PSExPyhzPW5ldyBZdWUoZSx0KSxyLnNldChvLFtzXSkpOmE+PXIuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgWXVlKGUsdCksci5nZXQobykucHVzaChzKSk6cz1yLmdldChvKVthXSxzfWZ1bmN0aW9uIGkoKXtyPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOml9fXZhciBlTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9UGZlLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2VNLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciByTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgaix0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3JNLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTZ3I9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxNZ3I9YHVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzOwp1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CiNpbmNsdWRlIDxwYWNraW5nPgp2b2lkIG1haW4oKSB7Cgljb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7CglmbG9hdCBtZWFuID0gMC4wOwoJZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wOwoJZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApOwoJZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7Cglmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHsKCQlmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7CgkJI2lmZGVmIEhPUklaT05UQUxfUEFTUwoJCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGlzdHJpYnV0aW9uLng7CgkJCXNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDsKCQkjZWxzZQoJCQlmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGVwdGg7CgkJCXNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoOwoJCSNlbmRpZgoJfQoJbWVhbiA9IG1lYW4gLyBzYW1wbGVzOwoJc3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlczsKCWZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApOwoJZ2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTsKfWA7ZnVuY3Rpb24gWGZlKGUsdCxyKXtsZXQgbj1uZXcgTjEsaT1uZXcgTHQsbz1uZXcgTHQsYT1uZXcgZW4scz1uZXcgZU0oe2RlcHRoUGFja2luZzpJZmV9KSxsPW5ldyByTSxjPXt9LHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXswOklpLDE6STEsMjpMMX0sZj1uZXcgbGgoe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEx0fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6U2dyLGZyYWdtZW50U2hhZGVyOk1ncn0pLHA9Zi5jbG9uZSgpO3AuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZD1uZXcgUGU7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCBnPW5ldyB0aShkLGYpLF89dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPUNodCx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEMsUCl7aWYoXy5lbmFibGVkPT09ITF8fF8uYXV0b1VwZGF0ZT09PSExJiZfLm5lZWRzVXBkYXRlPT09ITF8fFMubGVuZ3RoPT09MClyZXR1cm47bGV0IGs9ZS5nZXRSZW5kZXJUYXJnZXQoKSxPPWUuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxEPWUuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxCPWUuc3RhdGU7Qi5zZXRCbGVuZGluZygkZCksQi5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLEIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxCLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEk9MCxMPVMubGVuZ3RoO0k8TDtJKyspe2xldCBSPVNbSV0sRj1SLnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsUiwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO2kuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoaS5tdWx0aXBseSh6KSxvLmNvcHkoRi5tYXBTaXplKSwoaS54PnV8fGkueT51KSYmKGkueD51JiYoby54PU1hdGguZmxvb3IodS96LngpLGkueD1vLngqei54LEYubWFwU2l6ZS54PW8ueCksaS55PnUmJihvLnk9TWF0aC5mbG9vcih1L3oueSksaS55PW8ueSp6LnksRi5tYXBTaXplLnk9by55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUYzKXtsZXQgVz17bWluRmlsdGVyOmlpLG1hZ0ZpbHRlcjppaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgdXMoaS54LGkueSxXKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVz17bWluRmlsdGVyOkxpLG1hZ0ZpbHRlcjpMaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1lLnNldFJlbmRlclRhcmdldChGLm1hcCksZS5jbGVhcigpO2xldCBVPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVz0wO1c8VTtXKyspe2xldCBaPUYuZ2V0Vmlld3BvcnQoVyk7YS5zZXQoby54KloueCxvLnkqWi55LG8ueCpaLnosby55KloudyksQi52aWV3cG9ydChhKSxGLnVwZGF0ZU1hdHJpY2VzKFIsVyksbj1GLmdldEZydXN0dW0oKSxiKEMsUCxGLmNhbWVyYSxSLHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyYmeShGLFApLEYubmVlZHNVcGRhdGU9ITF9Xy5uZWVkc1VwZGF0ZT0hMSxlLnNldFJlbmRlclRhcmdldChrLE8sRCl9O2Z1bmN0aW9uIHkoUyxDKXtsZXQgUD10LnVwZGF0ZShnKTtmLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1TLmJsdXJTYW1wbGVzJiYoZi5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMscC5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMsZi5uZWVkc1VwZGF0ZT0hMCxwLm5lZWRzVXBkYXRlPSEwKSxmLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVMubWFwLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcFBhc3MpLGUuY2xlYXIoKSxlLnJlbmRlckJ1ZmZlckRpcmVjdChDLG51bGwsUCxmLGcsbnVsbCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcFBhc3MudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Uy5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVMucmFkaXVzLGUuc2V0UmVuZGVyVGFyZ2V0KFMubWFwKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAscCxnLG51bGwpfWZ1bmN0aW9uIHgoUyxDLFAsayxPLEQsQil7bGV0IEk9bnVsbCxMPWsuaXNQb2ludExpZ2h0PT09ITA/Uy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOlMuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihMIT09dm9pZCAwP0k9TDpJPWsuaXNQb2ludExpZ2h0PT09ITA/bDpzLGUubG9jYWxDbGlwcGluZ0VuYWJsZWQmJlAuY2xpcFNoYWRvd3M9PT0hMCYmUC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxQLmRpc3BsYWNlbWVudE1hcCYmUC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fFAuYWxwaGFNYXAmJlAuYWxwaGFUZXN0PjApe2xldCBSPUkudXVpZCxGPVAudXVpZCx6PWNbUl07ej09PXZvaWQgMCYmKHo9e30sY1tSXT16KTtsZXQgVT16W0ZdO1U9PT12b2lkIDAmJihVPUkuY2xvbmUoKSx6W0ZdPVUpLEk9VX1yZXR1cm4gSS52aXNpYmxlPVAudmlzaWJsZSxJLndpcmVmcmFtZT1QLndpcmVmcmFtZSxCPT09RjM/SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOlAuc2lkZTpJLnNpZGU9UC5zaGFkb3dTaWRlIT09bnVsbD9QLnNoYWRvd1NpZGU6aFtQLnNpZGVdLEkuYWxwaGFNYXA9UC5hbHBoYU1hcCxJLmFscGhhVGVzdD1QLmFscGhhVGVzdCxJLmNsaXBTaGFkb3dzPVAuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz1QLmNsaXBwaW5nUGxhbmVzLEkuY2xpcEludGVyc2VjdGlvbj1QLmNsaXBJbnRlcnNlY3Rpb24sSS5kaXNwbGFjZW1lbnRNYXA9UC5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT1QLmRpc3BsYWNlbWVudFNjYWxlLEkuZGlzcGxhY2VtZW50Qmlhcz1QLmRpc3BsYWNlbWVudEJpYXMsSS53aXJlZnJhbWVMaW5ld2lkdGg9UC53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9UC5saW5ld2lkdGgsay5pc1BvaW50TGlnaHQ9PT0hMCYmSS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJihJLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihrLm1hdHJpeFdvcmxkKSxJLm5lYXJEaXN0YW5jZT1PLEkuZmFyRGlzdGFuY2U9RCksSX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7aWYoUy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoQy5sYXllcnMpJiYoUy5pc01lc2h8fFMuaXNMaW5lfHxTLmlzUG9pbnRzKSYmKFMuY2FzdFNoYWRvd3x8Uy5yZWNlaXZlU2hhZG93JiZPPT09RjMpJiYoIVMuZnJ1c3R1bUN1bGxlZHx8bi5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7Uy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhQLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKTtsZXQgST10LnVwZGF0ZShTKSxMPVMubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMKSl7bGV0IFI9SS5ncm91cHM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1SW0ZdLFc9TFtVLm1hdGVyaWFsSW5kZXhdO2lmKFcmJlcudmlzaWJsZSl7bGV0IFo9eChTLEksVyxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxaLFMsVSl9fX1lbHNlIGlmKEwudmlzaWJsZSl7bGV0IFI9eChTLEksTCxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxSLFMsbnVsbCl9fWxldCBCPVMuY2hpbGRyZW47Zm9yKGxldCBJPTAsTD1CLmxlbmd0aDtJPEw7SSsrKWIoQltJXSxDLFAsayxPKX19ZnVuY3Rpb24gRWdyKGUsdCxyKXtsZXQgbj1yLmlzV2ViR0wyO2Z1bmN0aW9uIGkoKXtsZXQgYXQ9ITEsc2U9bmV3IGVuLFF0PW51bGwsQ2U9bmV3IGVuKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFB0KXtRdCE9PVB0JiYhYXQmJihlLmNvbG9yTWFzayhQdCxQdCxQdCxQdCksUXQ9UHQpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCxOdCx6ZSx5bixXaSl7V2k9PT0hMCYmKFB0Kj15bixOdCo9eW4semUqPXluKSxzZS5zZXQoUHQsTnQsemUseW4pLENlLmVxdWFscyhzZSk9PT0hMSYmKGUuY2xlYXJDb2xvcihQdCxOdCx6ZSx5biksQ2UuY29weShzZSkpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLFF0PW51bGwsQ2Uuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIG8oKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oUHQpe1B0P2x0KDI5MjkpOkt0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFB0KXtzZSE9PVB0JiYhYXQmJihlLmRlcHRoTWFzayhQdCksc2U9UHQpfSxzZXRGdW5jOmZ1bmN0aW9uKFB0KXtpZihRdCE9PVB0KXtpZihQdClzd2l0Y2goUHQpe2Nhc2UgWmhlOmUuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSBKaGU6ZS5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIFFoZTplLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgaVU6ZS5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHRmZTplLmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIG5mZTplLmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6ZS5kZXB0aEZ1bmMoNTE1KX1lbHNlIGUuZGVwdGhGdW5jKDUxNSk7UXQ9UHR9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCl7Q2UhPT1QdCYmKGUuY2xlYXJEZXB0aChQdCksQ2U9UHQpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsfX19ZnVuY3Rpb24gYSgpe2xldCBhdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oQXIpe2F0fHwoQXI/bHQoMjk2MCk6S3QoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKEFyKXtzZSE9PUFyJiYhYXQmJihlLnN0ZW5jaWxNYXNrKEFyKSxzZT1Bcil9LHNldEZ1bmM6ZnVuY3Rpb24oQXIsUGEsaG8peyhRdCE9PUFyfHxDZSE9PVBhfHxQdCE9PWhvKSYmKGUuc3RlbmNpbEZ1bmMoQXIsUGEsaG8pLFF0PUFyLENlPVBhLFB0PWhvKX0sc2V0T3A6ZnVuY3Rpb24oQXIsUGEsaG8peyhOdCE9PUFyfHx6ZSE9PVBhfHx5biE9PWhvKSYmKGUuc3RlbmNpbE9wKEFyLFBhLGhvKSxOdD1Bcix6ZT1QYSx5bj1obyl9LHNldExvY2tlZDpmdW5jdGlvbihBcil7YXQ9QXJ9LHNldENsZWFyOmZ1bmN0aW9uKEFyKXtXaSE9PUFyJiYoZS5jbGVhclN0ZW5jaWwoQXIpLFdpPUFyKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGx9fX1sZXQgcz1uZXcgaSxsPW5ldyBvLGM9bmV3IGEsdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLFI9ZS5nZXRQYXJhbWV0ZXIoMzU2NjEpLEY9ITEsej0wLFU9ZS5nZXRQYXJhbWV0ZXIoNzkzOCk7VS5pbmRleE9mKCJXZWJHTCIpIT09LTE/KHo9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49MSk6VS5pbmRleE9mKCJPcGVuR0wgRVMiKSE9PS0xJiYoej1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49Mik7bGV0IFc9bnVsbCxaPXt9LHJ0PWUuZ2V0UGFyYW1ldGVyKDMwODgpLG90PWUuZ2V0UGFyYW1ldGVyKDI5NzgpLHN0PW5ldyBlbigpLmZyb21BcnJheShydCksU3Q9bmV3IGVuKCkuZnJvbUFycmF5KG90KTtmdW5jdGlvbiBidChhdCxzZSxRdCl7bGV0IENlPW5ldyBVaW50OEFycmF5KDQpLFB0PWUuY3JlYXRlVGV4dHVyZSgpO2UuYmluZFRleHR1cmUoYXQsUHQpLGUudGV4UGFyYW1ldGVyaShhdCwxMDI0MSw5NzI4KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDAsOTcyOCk7Zm9yKGxldCBOdD0wO050PFF0O050KyspZS50ZXhJbWFnZTJEKHNlK050LDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsQ2UpO3JldHVybiBQdH1sZXQgTXQ9e307TXRbMzU1M109YnQoMzU1MywzNTUzLDEpLE10WzM0MDY3XT1idCgzNDA2NywzNDA2OSw2KSxzLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxsdCgyOTI5KSxsLnNldEZ1bmMoaVUpLGh0KCExKSx3dChTdXQpLGx0KDI4ODQpLHEoJGQpO2Z1bmN0aW9uIGx0KGF0KXt1W2F0XSE9PSEwJiYoZS5lbmFibGUoYXQpLHVbYXRdPSEwKX1mdW5jdGlvbiBLdChhdCl7dVthdF0hPT0hMSYmKGUuZGlzYWJsZShhdCksdVthdF09ITEpfWZ1bmN0aW9uIF90KGF0LHNlKXtyZXR1cm4gaFthdF0hPT1zZT8oZS5iaW5kRnJhbWVidWZmZXIoYXQsc2UpLGhbYXRdPXNlLG4mJihhdD09PTM2MDA5JiYoaFszNjE2MF09c2UpLGF0PT09MzYxNjAmJihoWzM2MDA5XT1zZSkpLCEwKTohMX1mdW5jdGlvbiBjdChhdCxzZSl7bGV0IFF0PXAsQ2U9ITE7aWYoYXQpaWYoUXQ9Zi5nZXQoc2UpLFF0PT09dm9pZCAwJiYoUXQ9W10sZi5zZXQoc2UsUXQpKSxhdC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgUHQ9YXQudGV4dHVyZTtpZihRdC5sZW5ndGghPT1QdC5sZW5ndGh8fFF0WzBdIT09MzYwNjQpe2ZvcihsZXQgTnQ9MCx6ZT1QdC5sZW5ndGg7TnQ8emU7TnQrKylRdFtOdF09MzYwNjQrTnQ7UXQubGVuZ3RoPVB0Lmxlbmd0aCxDZT0hMH19ZWxzZSBRdFswXSE9PTM2MDY0JiYoUXRbMF09MzYwNjQsQ2U9ITApO2Vsc2UgUXRbMF0hPT0xMDI5JiYoUXRbMF09MTAyOSxDZT0hMCk7Q2UmJihyLmlzV2ViR0wyP2UuZHJhd0J1ZmZlcnMoUXQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKFF0KSl9ZnVuY3Rpb24gWChhdCl7cmV0dXJuIGQhPT1hdD8oZS51c2VQcm9ncmFtKGF0KSxkPWF0LCEwKTohMX1sZXQgZXQ9e1tNMV06MzI3NzQsW0hoZV06MzI3NzgsW1ZoZV06MzI3Nzl9O2lmKG4pZXRbQ3V0XT0zMjc3NSxldFtBdXRdPTMyNzc2O2Vsc2V7bGV0IGF0PXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7YXQhPT1udWxsJiYoZXRbQ3V0XT1hdC5NSU5fRVhULGV0W0F1dF09YXQuTUFYX0VYVCl9bGV0IGR0PXtbVWhlXTowLFtxaGVdOjEsW0doZV06NzY4LFtQaHRdOjc3MCxbS2hlXTo3NzYsW1hoZV06Nzc0LFtZaGVdOjc3MixbV2hlXTo3NjksW0lodF06NzcxLFskaGVdOjc3NSxbamhlXTo3NzN9O2Z1bmN0aW9uIHEoYXQsc2UsUXQsQ2UsUHQsTnQsemUseW4pe2lmKGF0PT09JGQpe2c9PT0hMCYmKEt0KDMwNDIpLGc9ITEpO3JldHVybn1pZihnPT09ITEmJihsdCgzMDQyKSxnPSEwKSxhdCE9PUJoZSl7aWYoYXQhPT1ffHx5biE9PWspe2lmKCh5IT09TTF8fFMhPT1NMSkmJihlLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9TTEsUz1NMSkseW4pc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgTXV0OmUuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhdCk7YnJlYWt9ZWxzZSBzd2l0Y2goYXQpe2Nhc2UgVjM6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfXg9bnVsbCxiPW51bGwsQz1udWxsLFA9bnVsbCxfPWF0LGs9eW59cmV0dXJufVB0PVB0fHxzZSxOdD1OdHx8UXQsemU9emV8fENlLChzZSE9PXl8fFB0IT09UykmJihlLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShldFtzZV0sZXRbUHRdKSx5PXNlLFM9UHQpLChRdCE9PXh8fENlIT09Ynx8TnQhPT1DfHx6ZSE9PVApJiYoZS5ibGVuZEZ1bmNTZXBhcmF0ZShkdFtRdF0sZHRbQ2VdLGR0W050XSxkdFt6ZV0pLHg9UXQsYj1DZSxDPU50LFA9emUpLF89YXQsaz1udWxsfWZ1bmN0aW9uIHB0KGF0LHNlKXthdC5zaWRlPT09TDE/S3QoMjg4NCk6bHQoMjg4NCk7bGV0IFF0PWF0LnNpZGU9PT1JaTtzZSYmKFF0PSFRdCksaHQoUXQpLGF0LmJsZW5kaW5nPT09VjMmJmF0LnRyYW5zcGFyZW50PT09ITE/cSgkZCk6cShhdC5ibGVuZGluZyxhdC5ibGVuZEVxdWF0aW9uLGF0LmJsZW5kU3JjLGF0LmJsZW5kRHN0LGF0LmJsZW5kRXF1YXRpb25BbHBoYSxhdC5ibGVuZFNyY0FscGhhLGF0LmJsZW5kRHN0QWxwaGEsYXQucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoYXQuZGVwdGhGdW5jKSxsLnNldFRlc3QoYXQuZGVwdGhUZXN0KSxsLnNldE1hc2soYXQuZGVwdGhXcml0ZSkscy5zZXRNYXNrKGF0LmNvbG9yV3JpdGUpO2xldCBDZT1hdC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KENlKSxDZSYmKGMuc2V0TWFzayhhdC5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoYXQuc3RlbmNpbEZ1bmMsYXQuc3RlbmNpbFJlZixhdC5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoYXQuc3RlbmNpbEZhaWwsYXQuc3RlbmNpbFpGYWlsLGF0LnN0ZW5jaWxaUGFzcykpLGllKGF0LnBvbHlnb25PZmZzZXQsYXQucG9seWdvbk9mZnNldEZhY3RvcixhdC5wb2x5Z29uT2Zmc2V0VW5pdHMpLGF0LmFscGhhVG9Db3ZlcmFnZT09PSEwP2x0KDMyOTI2KTpLdCgzMjkyNil9ZnVuY3Rpb24gaHQoYXQpe08hPT1hdCYmKGF0P2UuZnJvbnRGYWNlKDIzMDQpOmUuZnJvbnRGYWNlKDIzMDUpLE89YXQpfWZ1bmN0aW9uIHd0KGF0KXthdCE9PU9oZT8obHQoMjg4NCksYXQhPT1EJiYoYXQ9PT1TdXQ/ZS5jdWxsRmFjZSgxMDI5KTphdD09PXpoZT9lLmN1bGxGYWNlKDEwMjgpOmUuY3VsbEZhY2UoMTAzMikpKTpLdCgyODg0KSxEPWF0fWZ1bmN0aW9uIGt0KGF0KXthdCE9PUImJihGJiZlLmxpbmVXaWR0aChhdCksQj1hdCl9ZnVuY3Rpb24gaWUoYXQsc2UsUXQpe2F0PyhsdCgzMjgyMyksKEkhPT1zZXx8TCE9PVF0KSYmKGUucG9seWdvbk9mZnNldChzZSxRdCksST1zZSxMPVF0KSk6S3QoMzI4MjMpfWZ1bmN0aW9uIGVlKGF0KXthdD9sdCgzMDg5KTpLdCgzMDg5KX1mdW5jdGlvbiBMZShhdCl7YXQ9PT12b2lkIDAmJihhdD0zMzk4NCtSLTEpLFchPT1hdCYmKGUuYWN0aXZlVGV4dHVyZShhdCksVz1hdCl9ZnVuY3Rpb24gYXIoYXQsc2Upe1c9PT1udWxsJiZMZSgpO2xldCBRdD1aW1ddO1F0PT09dm9pZCAwJiYoUXQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxaW1ddPVF0KSwoUXQudHlwZSE9PWF0fHxRdC50ZXh0dXJlIT09c2UpJiYoZS5iaW5kVGV4dHVyZShhdCxzZXx8TXRbYXRdKSxRdC50eXBlPWF0LFF0LnRleHR1cmU9c2UpfWZ1bmN0aW9uIGZyKCl7bGV0IGF0PVpbV107YXQhPT12b2lkIDAmJmF0LnR5cGUhPT12b2lkIDAmJihlLmJpbmRUZXh0dXJlKGF0LnR5cGUsbnVsbCksYXQudHlwZT12b2lkIDAsYXQudGV4dHVyZT12b2lkIDApfWZ1bmN0aW9uIHR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkKCl7dHJ5e2UudGV4U3ViSW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEl0KCl7dHJ5e2UudGV4U3ViSW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uICR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBoZSgpe3RyeXtlLnRleFN0b3JhZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIFR0KCl7dHJ5e2UudGV4U3RvcmFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gYmUoKXt0cnl7ZS50ZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gbnQoKXt0cnl7ZS50ZXhJbWFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gQ3QoYXQpe3N0LmVxdWFscyhhdCk9PT0hMSYmKGUuc2Npc3NvcihhdC54LGF0LnksYXQueixhdC53KSxzdC5jb3B5KGF0KSl9ZnVuY3Rpb24gV3QoYXQpe1N0LmVxdWFscyhhdCk9PT0hMSYmKGUudmlld3BvcnQoYXQueCxhdC55LGF0LnosYXQudyksU3QuY29weShhdCkpfWZ1bmN0aW9uIGZlKCl7ZS5kaXNhYmxlKDMwNDIpLGUuZGlzYWJsZSgyODg0KSxlLmRpc2FibGUoMjkyOSksZS5kaXNhYmxlKDMyODIzKSxlLmRpc2FibGUoMzA4OSksZS5kaXNhYmxlKDI5NjApLGUuZGlzYWJsZSgzMjkyNiksZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSxlLmJsZW5kRnVuYygxLDApLGUuYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksZS5jb2xvck1hc2soITAsITAsITAsITApLGUuY2xlYXJDb2xvcigwLDAsMCwwKSxlLmRlcHRoTWFzayghMCksZS5kZXB0aEZ1bmMoNTEzKSxlLmNsZWFyRGVwdGgoMSksZS5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLGUuc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxlLmNsZWFyU3RlbmNpbCgwKSxlLmN1bGxGYWNlKDEwMjkpLGUuZnJvbnRGYWNlKDIzMDUpLGUucG9seWdvbk9mZnNldCgwLDApLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbj09PSEwJiYoZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLGUudXNlUHJvZ3JhbShudWxsKSxlLmxpbmVXaWR0aCgxKSxlLnNjaXNzb3IoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS52aWV3cG9ydCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSx1PXt9LFc9bnVsbCxaPXt9LGg9e30sZj1uZXcgV2Vha01hcCxwPVtdLGQ9bnVsbCxnPSExLF89bnVsbCx5PW51bGwseD1udWxsLGI9bnVsbCxTPW51bGwsQz1udWxsLFA9bnVsbCxrPSExLE89bnVsbCxEPW51bGwsQj1udWxsLEk9bnVsbCxMPW51bGwsc3Quc2V0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLFN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmx0LGRpc2FibGU6S3QsYmluZEZyYW1lYnVmZmVyOl90LGRyYXdCdWZmZXJzOmN0LHVzZVByb2dyYW06WCxzZXRCbGVuZGluZzpxLHNldE1hdGVyaWFsOnB0LHNldEZsaXBTaWRlZDpodCxzZXRDdWxsRmFjZTp3dCxzZXRMaW5lV2lkdGg6a3Qsc2V0UG9seWdvbk9mZnNldDppZSxzZXRTY2lzc29yVGVzdDplZSxhY3RpdmVUZXh0dXJlOkxlLGJpbmRUZXh0dXJlOmFyLHVuYmluZFRleHR1cmU6ZnIsY29tcHJlc3NlZFRleEltYWdlMkQ6dHQsdGV4SW1hZ2UyRDpiZSx0ZXhJbWFnZTNEOm50LHRleFN0b3JhZ2UyRDpoZSx0ZXhTdG9yYWdlM0Q6VHQsdGV4U3ViSW1hZ2UyRDokLHRleFN1YkltYWdlM0Q6SXQsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6JHQsc2Npc3NvcjpDdCx2aWV3cG9ydDpXdCxyZXNldDpmZX19ZnVuY3Rpb24gVGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSx1PWkubWF4VGV4dHVyZVNpemUsaD1pLm1heFNhbXBsZXMscD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxkPW5ldyBXZWFrTWFwLGcsXz0hMTt0cnl7Xz10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIT0idW5kZWZpbmVkIiYmbmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikhPT1udWxsfWNhdGNoKHR0KXt9ZnVuY3Rpb24geSh0dCwkKXtyZXR1cm4gXz9uZXcgT2Zmc2NyZWVuQ2FudmFzKHR0LCQpOnQ2KCJjYW52YXMiKX1mdW5jdGlvbiB4KHR0LCQsSXQsJHQpe2xldCBoZT0xO2lmKCh0dC53aWR0aD4kdHx8dHQuaGVpZ2h0PiR0KSYmKGhlPSR0L01hdGgubWF4KHR0LndpZHRoLHR0LmhlaWdodCkpLGhlPDF8fCQ9PT0hMClpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IFR0PSQ/TmZlOk1hdGguZmxvb3IsYmU9VHQoaGUqdHQud2lkdGgpLG50PVR0KGhlKnR0LmhlaWdodCk7Zz09PXZvaWQgMCYmKGc9eShiZSxudCkpO2xldCBDdD1JdD95KGJlLG50KTpnO3JldHVybiBDdC53aWR0aD1iZSxDdC5oZWlnaHQ9bnQsQ3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodHQsMCwwLGJlLG50KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3R0LndpZHRoKyJ4Iit0dC5oZWlnaHQrIikgdG8gKCIrYmUrIngiK250KyIpLiIpLEN0fWVsc2UgcmV0dXJuImRhdGEiaW4gdHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpLiIpLHR0O3JldHVybiB0dH1mdW5jdGlvbiBiKHR0KXtyZXR1cm4gWnV0KHR0LndpZHRoKSYmWnV0KHR0LmhlaWdodCl9ZnVuY3Rpb24gUyh0dCl7cmV0dXJuIHM/ITE6dHQud3JhcFMhPT1Kb3x8dHQud3JhcFQhPT1Kb3x8dHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIEModHQsJCl7cmV0dXJuIHR0LmdlbmVyYXRlTWlwbWFwcyYmJCYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIFAodHQpe2UuZ2VuZXJhdGVNaXBtYXAodHQpfWZ1bmN0aW9uIGsodHQsJCxJdCwkdCxoZT0hMSl7aWYocz09PSExKXJldHVybiAkO2lmKHR0IT09bnVsbCl7aWYoZVt0dF0hPT12b2lkIDApcmV0dXJuIGVbdHRdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIit0dCsiJyIpfWxldCBUdD0kO3JldHVybiAkPT09NjQwMyYmKEl0PT09NTEyNiYmKFR0PTMzMzI2KSxJdD09PTUxMzEmJihUdD0zMzMyNSksSXQ9PT01MTIxJiYoVHQ9MzMzMjEpKSwkPT09MzMzMTkmJihJdD09PTUxMjYmJihUdD0zMzMyOCksSXQ9PT01MTMxJiYoVHQ9MzMzMjcpLEl0PT09NTEyMSYmKFR0PTMzMzIzKSksJD09PTY0MDgmJihJdD09PTUxMjYmJihUdD0zNDgzNiksSXQ9PT01MTMxJiYoVHQ9MzQ4NDIpLEl0PT09NTEyMSYmKFR0PSR0PT09V24mJmhlPT09ITE/MzU5MDc6MzI4NTYpLEl0PT09MzI4MTkmJihUdD0zMjg1NCksSXQ9PT0zMjgyMCYmKFR0PTMyODU1KSksKFR0PT09MzMzMjV8fFR0PT09MzMzMjZ8fFR0PT09MzMzMjd8fFR0PT09MzMzMjh8fFR0PT09MzQ4NDJ8fFR0PT09MzQ4MzYpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLFR0fWZ1bmN0aW9uIE8odHQsJCxJdCl7cmV0dXJuIEModHQsSXQpPT09ITB8fHR0LmlzRnJhbWVidWZmZXJUZXh0dXJlJiZ0dC5taW5GaWx0ZXIhPT1MaSYmdHQubWluRmlsdGVyIT09aWk/TWF0aC5sb2cyKE1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpKSsxOnR0Lm1pcG1hcHMhPT12b2lkIDAmJnR0Lm1pcG1hcHMubGVuZ3RoPjA/dHQubWlwbWFwcy5sZW5ndGg6dHQuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheSh0dC5pbWFnZSk/JC5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIEQodHQpe3JldHVybiB0dD09PUxpfHx0dD09PW9VfHx0dD09PWFVPzk3Mjg6OTcyOX1mdW5jdGlvbiBCKHR0KXtsZXQgJD10dC50YXJnZXQ7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSxMKCQpLCQuaXNWaWRlb1RleHR1cmUmJmQuZGVsZXRlKCQpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gSSh0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksUigkKX1mdW5jdGlvbiBMKHR0KXtsZXQgJD1uLmdldCh0dCk7JC5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkLl9fd2ViZ2xUZXh0dXJlKSxuLnJlbW92ZSh0dCkpfWZ1bmN0aW9uIFIodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO2lmKCEhdHQpe2lmKCR0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYoZS5kZWxldGVUZXh0dXJlKCR0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSx0dC5kZXB0aFRleHR1cmUmJnR0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBoZT0wO2hlPDY7aGUrKyllLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcltoZV0pLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyW2hlXSk7ZWxzZSBlLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksSXQuX193ZWJnbERlcHRoYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhidWZmZXIpLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYodHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGhlPTAsVHQ9JC5sZW5ndGg7aGU8VHQ7aGUrKyl7bGV0IGJlPW4uZ2V0KCRbaGVdKTtiZS5fX3dlYmdsVGV4dHVyZSYmKGUuZGVsZXRlVGV4dHVyZShiZS5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksbi5yZW1vdmUoJFtoZV0pfW4ucmVtb3ZlKCQpLG4ucmVtb3ZlKHR0KX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIFUoKXtsZXQgdHQ9RjtyZXR1cm4gdHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3R0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSx0dH1mdW5jdGlvbiBXKHR0LCQpe2xldCBJdD1uLmdldCh0dCk7aWYodHQuaXNWaWRlb1RleHR1cmUmJmt0KHR0KSx0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2xldCAkdD10dC5pbWFnZTtpZigkdD09PXZvaWQgMCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoJHQuY29tcGxldGU9PT0hMSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle2x0KEl0LHR0LCQpO3JldHVybn19ci5hY3RpdmVUZXh0dXJlKDMzOTg0KyQpLHIuYmluZFRleHR1cmUoMzU1MyxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gWih0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1ODY2LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBydCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDMyODc5LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBvdCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7S3QoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM0MDY3LEl0Ll9fd2ViZ2xUZXh0dXJlKX1sZXQgc3Q9e1tYUF06MTA0OTcsW0pvXTozMzA3MSxbJFBdOjMzNjQ4fSxTdD17W0xpXTo5NzI4LFtvVV06OTk4NCxbYVVdOjk5ODYsW2lpXTo5NzI5LFtMaHRdOjk5ODUsW294XTo5OTg3fTtmdW5jdGlvbiBidCh0dCwkLEl0KXtpZihJdD8oZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQyLHN0WyQud3JhcFNdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDMsc3RbJC53cmFwVF0pLCh0dD09PTMyODc5fHx0dD09PTM1ODY2KSYmZS50ZXhQYXJhbWV0ZXJpKHR0LDMyODgyLHN0WyQud3JhcFJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsU3RbJC5tYWdGaWx0ZXJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDEsU3RbJC5taW5GaWx0ZXJdKSk6KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MiwzMzA3MSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLDMzMDcxKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MiwzMzA3MSksKCQud3JhcFMhPT1Kb3x8JC53cmFwVCE9PUpvKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MCxEKCQubWFnRmlsdGVyKSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLEQoJC5taW5GaWx0ZXIpKSwkLm1pbkZpbHRlciE9PUxpJiYkLm1pbkZpbHRlciE9PWlpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksdC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCAkdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoJC50eXBlPT09amQmJnQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSExfHxzPT09ITEmJiQudHlwZT09PUMxJiZ0LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSExKXJldHVybjsoJC5hbmlzb3Ryb3B5PjF8fG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYoZS50ZXhQYXJhbWV0ZXJmKHR0LCR0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKCQuYW5pc290cm9weSxpLmdldE1heEFuaXNvdHJvcHkoKSkpLG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHk9JC5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTXQodHQsJCl7dHQuX193ZWJnbEluaXQ9PT12b2lkIDAmJih0dC5fX3dlYmdsSW5pdD0hMCwkLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEIpLHR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGx0KHR0LCQsSXQpe2xldCAkdD0zNTUzOyQuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJigkdD0zNTg2NiksJC5pc0RhdGFUZXh0dXJlM0QmJigkdD0zMjg3OSksTXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKCR0LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGhlPVMoJCkmJmIoJC5pbWFnZSk9PT0hMSxUdD14KCQuaW1hZ2UsaGUsITEsdSk7VHQ9aWUoJCxUdCk7bGV0IGJlPWIoVHQpfHxzLG50PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxDdD1vLmNvbnZlcnQoJC50eXBlKSxXdD1rKCQuaW50ZXJuYWxGb3JtYXQsbnQsQ3QsJC5lbmNvZGluZywkLmlzVmlkZW9UZXh0dXJlKTtidCgkdCwkLGJlKTtsZXQgZmUsYXQ9JC5taXBtYXBzLHNlPXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxRdD10dC5fX3ZlcnNpb249PT12b2lkIDAsQ2U9TygkLFR0LGJlKTtpZigkLmlzRGVwdGhUZXh0dXJlKVd0PTY0MDIscz8kLnR5cGU9PT1qZD9XdD0zNjAxMjokLnR5cGU9PT1WUD9XdD0zMzE5MDokLnR5cGU9PT1BMT9XdD0zNTA1NjpXdD0zMzE4OTokLnR5cGU9PT1qZCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksJC5mb3JtYXQ9PT16MCYmV3Q9PT02NDAyJiYkLnR5cGUhPT1HMyYmJC50eXBlIT09VlAmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9RzMsQ3Q9by5jb252ZXJ0KCQudHlwZSkpLCQuZm9ybWF0PT09azEmJld0PT09NjQwMiYmKFd0PTM0MDQxLCQudHlwZSE9PUExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLCQudHlwZT1BMSxDdD1vLmNvbnZlcnQoJC50eXBlKSkpLHNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLDEsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LG51bGwpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlKWlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzQ29tcHJlc3NlZFRleHR1cmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sJC5mb3JtYXQhPT1Rbz9udCE9PW51bGw/c2U/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsZmUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLGZlLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnNlP3IudGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSl9ZWxzZSBpZigkLmlzRGF0YVRleHR1cmUyREFycmF5KXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzU4NjYsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzNTg2NiwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlM0Qpc2U/KFF0JiZyLnRleFN0b3JhZ2UzRCgzMjg3OSxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgpLHIudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCxudCxDdCxUdC5kYXRhKSk6ci50ZXhJbWFnZTNEKDMyODc5LDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzRnJhbWVidWZmZXJUZXh0dXJlKXNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsbnQsQ3QsZmUpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LG50LEN0LGZlKTskLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHNlPyhRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpLHIudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLG50LEN0LFR0KSk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxudCxDdCxUdCk7QygkLGJlKSYmUCgkdCksdHQuX192ZXJzaW9uPSQudmVyc2lvbiwkLm9uVXBkYXRlJiYkLm9uVXBkYXRlKCQpfWZ1bmN0aW9uIEt0KHR0LCQsSXQpe2lmKCQuaW1hZ2UubGVuZ3RoIT09NilyZXR1cm47TXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKDM0MDY3LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0ICR0PSQmJigkLmlzQ29tcHJlc3NlZFRleHR1cmV8fCQuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksaGU9JC5pbWFnZVswXSYmJC5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLFR0PVtdO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspISR0JiYhaGU/VHRbUHRdPXgoJC5pbWFnZVtQdF0sITEsITAsYyk6VHRbUHRdPWhlPyQuaW1hZ2VbUHRdLmltYWdlOiQuaW1hZ2VbUHRdLFR0W1B0XT1pZSgkLFR0W1B0XSk7bGV0IGJlPVR0WzBdLG50PWIoYmUpfHxzLEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9cyYmJC5pc1ZpZGVvVGV4dHVyZSE9PSEwLHNlPXR0Ll9fdmVyc2lvbj09PXZvaWQgMCxRdD1PKCQsYmUsbnQpO2J0KDM0MDY3LCQsbnQpO2xldCBDZTtpZigkdCl7YXQmJnNlJiZyLnRleFN0b3JhZ2UyRCgzNDA2NyxRdCxmZSxiZS53aWR0aCxiZS5oZWlnaHQpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0Kyspe0NlPVR0W1B0XS5taXBtYXBzO2ZvcihsZXQgTnQ9MDtOdDxDZS5sZW5ndGg7TnQrKyl7bGV0IHplPUNlW050XTskLmZvcm1hdCE9PVFvP0N0IT09bnVsbD9hdD9yLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsemUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCx6ZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsV3QsemUuZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50LGZlLHplLndpZHRoLHplLmhlaWdodCwwLEN0LFd0LHplLmRhdGEpfX19ZWxzZXtDZT0kLm1pcG1hcHMsYXQmJnNlJiYoQ2UubGVuZ3RoPjAmJlF0Kyssci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsVHRbMF0ud2lkdGgsVHRbMF0uaGVpZ2h0KSk7Zm9yKGxldCBQdD0wO1B0PDY7UHQrKylpZihoZSl7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLFR0W1B0XS53aWR0aCxUdFtQdF0uaGVpZ2h0LEN0LFd0LFR0W1B0XS5kYXRhKTpyLnRleEltYWdlMkQoMzQwNjkrUHQsMCxmZSxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCwwLEN0LFd0LFR0W1B0XS5kYXRhKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB5bj1DZVtOdF0uaW1hZ2VbUHRdLmltYWdlO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCx5bi53aWR0aCx5bi5oZWlnaHQsQ3QsV3QseW4uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUseW4ud2lkdGgseW4uaGVpZ2h0LDAsQ3QsV3QseW4uZGF0YSl9fWVsc2V7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLEN0LFd0LFR0W1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsQ3QsV3QsVHRbUHRdKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50KzEsMCwwLEN0LFd0LHplLmltYWdlW1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUsQ3QsV3QsemUuaW1hZ2VbUHRdKX19fUMoJCxudCkmJlAoMzQwNjcpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBfdCh0dCwkLEl0LCR0LGhlKXtsZXQgVHQ9by5jb252ZXJ0KEl0LmZvcm1hdCxJdC5lbmNvZGluZyksYmU9by5jb252ZXJ0KEl0LnR5cGUpLG50PWsoSXQuaW50ZXJuYWxGb3JtYXQsVHQsYmUsSXQuZW5jb2RpbmcpO24uZ2V0KCQpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGhlPT09MzI4Nzl8fGhlPT09MzU4NjY/ci50ZXhJbWFnZTNEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwkLmRlcHRoLDAsVHQsYmUsbnVsbCk6ci50ZXhJbWFnZTJEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwwLFR0LGJlLG51bGwpKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwLHd0KCQpKTplLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBjdCh0dCwkLEl0KXtpZihlLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsdHQpLCQuZGVwdGhCdWZmZXImJiEkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD0zMzE4OTtpZihJdHx8JC51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBoZT0kLmRlcHRoVGV4dHVyZTtoZSYmaGUuaXNEZXB0aFRleHR1cmUmJihoZS50eXBlPT09amQ/JHQ9MzYwMTI6aGUudHlwZT09PVZQJiYoJHQ9MzMxOTApKTtsZXQgVHQ9d3QoJCk7JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCl9ZWxzZSBlLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsJHQsJC53aWR0aCwkLmhlaWdodCk7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSx0dCl9ZWxzZSBpZigkLmRlcHRoQnVmZmVyJiYkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLCQud2lkdGgsJC5oZWlnaHQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsdHQpfWVsc2V7bGV0ICR0PSQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwPyQudGV4dHVyZVswXTokLnRleHR1cmUsaGU9by5jb252ZXJ0KCR0LmZvcm1hdCwkdC5lbmNvZGluZyksVHQ9by5jb252ZXJ0KCR0LnR5cGUpLGJlPWsoJHQuaW50ZXJuYWxGb3JtYXQsaGUsVHQsJHQuZW5jb2RpbmcpLG50PXd0KCQpO0l0JiYkLnVzZVJlbmRlcmJ1ZmZlcj9lLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTokLnVzZVJlbmRlclRvVGV4dHVyZT9wLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTplLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYmUsJC53aWR0aCwkLmhlaWdodCl9ZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFgodHQsJCl7aWYoJCYmJC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksISgkLmRlcHRoVGV4dHVyZSYmJC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghbi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHwkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PSQud2lkdGh8fCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PSQuaGVpZ2h0KSYmKCQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPSQud2lkdGgsJC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PSQuaGVpZ2h0LCQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxXKCQuZGVwdGhUZXh0dXJlLDApO2xldCAkdD1uLmdldCgkLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsaGU9d3QoJCk7aWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09ejApJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLCR0LDApO2Vsc2UgaWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09azEpJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLCR0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBldCh0dCl7bGV0ICQ9bi5nZXQodHQpLEl0PXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYodHQuZGVwdGhUZXh0dXJlJiYhJC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihJdCl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7WCgkLl9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCl9ZWxzZSBpZihJdCl7JC5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCAkdD0wOyR0PDY7JHQrKylyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlclskdF0pLCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XT1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XSx0dCwhMSl9ZWxzZSByLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlciksJC5fX3dlYmdsRGVwdGhidWZmZXI9ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlcix0dCwhMSk7ci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gZHQodHQsJCxJdCl7bGV0ICR0PW4uZ2V0KHR0KTskIT09dm9pZCAwJiZfdCgkdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsdHQudGV4dHVyZSwzNjA2NCwzNTUzKSxJdCE9PXZvaWQgMCYmZXQodHQpfWZ1bmN0aW9uIHEodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO3R0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMhPT0hMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoJHQuX193ZWJnbFRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCkpLCR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IGhlPXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVHQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwLGJlPSQuaXNEYXRhVGV4dHVyZTNEfHwkLmlzRGF0YVRleHR1cmUyREFycmF5LG50PWIodHQpfHxzO2lmKGhlKXtJdC5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdPWUuY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksVHQpaWYoaS5kcmF3QnVmZmVycyl7bGV0IEN0PXR0LnRleHR1cmU7Zm9yKGxldCBXdD0wLGZlPUN0Lmxlbmd0aDtXdDxmZTtXdCsrKXtsZXQgYXQ9bi5nZXQoQ3RbV3RdKTthdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKGF0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe0l0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9d3QodHQpO2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGF0LGZlLHR0LndpZHRoLHR0LmhlaWdodCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHR0LmRlcHRoQnVmZmVyJiYoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLHR0LCEwKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihoZSl7ci5iaW5kVGV4dHVyZSgzNDA2NywkdC5fX3dlYmdsVGV4dHVyZSksYnQoMzQwNjcsJCxudCk7Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylfdChJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdLHR0LCQsMzYwNjQsMzQwNjkrQ3QpO0MoJCxudCkmJlAoMzQwNjcpLHIudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVHQpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PUN0W1d0XSxzZT1uLmdldChhdCk7ci5iaW5kVGV4dHVyZSgzNTUzLHNlLl9fd2ViZ2xUZXh0dXJlKSxidCgzNTUzLGF0LG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsYXQsMzYwNjQrV3QsMzU1MyksQyhhdCxudCkmJlAoMzU1Myl9ci51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgQ3Q9MzU1MztiZSYmKHM/Q3Q9JC5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLHIuYmluZFRleHR1cmUoQ3QsJHQuX193ZWJnbFRleHR1cmUpLGJ0KEN0LCQsbnQpLF90KEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCwkLDM2MDY0LEN0KSxDKCQsbnQpJiZQKEN0KSxyLnVuYmluZFRleHR1cmUoKX10dC5kZXB0aEJ1ZmZlciYmZXQodHQpfWZ1bmN0aW9uIHB0KHR0KXtsZXQgJD1iKHR0KXx8cyxJdD10dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dHQudGV4dHVyZTpbdHQudGV4dHVyZV07Zm9yKGxldCAkdD0wLGhlPUl0Lmxlbmd0aDskdDxoZTskdCsrKXtsZXQgVHQ9SXRbJHRdO2lmKEMoVHQsJCkpe2xldCBiZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG50PW4uZ2V0KFR0KS5fX3dlYmdsVGV4dHVyZTtyLmJpbmRUZXh0dXJlKGJlLG50KSxQKGJlKSxyLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIGh0KHR0KXtpZih0dC51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0ICQ9dHQud2lkdGgsSXQ9dHQuaGVpZ2h0LCR0PTE2Mzg0LGhlPVszNjA2NF0sVHQ9dHQuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5Njt0dC5kZXB0aEJ1ZmZlciYmaGUucHVzaChUdCksdHQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fCh0dC5kZXB0aEJ1ZmZlciYmKCR0fD0yNTYpLHR0LnN0ZW5jaWxCdWZmZXImJigkdHw9MTAyNCkpO2xldCBiZT1uLmdldCh0dCk7ci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsRnJhbWVidWZmZXIpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYoZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1R0XSksZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1R0XSkpLGUuYmxpdEZyYW1lYnVmZmVyKDAsMCwkLEl0LDAsMCwkLEl0LCR0LDk3MjgpLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGhlKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gd3QodHQpe3JldHVybiBzJiYodHQudXNlUmVuZGVyYnVmZmVyfHx0dC51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsdHQuc2FtcGxlcyk6MH1mdW5jdGlvbiBrdCh0dCl7bGV0ICQ9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodHQpIT09JCYmKGQuc2V0KHR0LCQpLHR0LnVwZGF0ZSgpKX1mdW5jdGlvbiBpZSh0dCwkKXtsZXQgSXQ9dHQuZW5jb2RpbmcsJHQ9dHQuZm9ybWF0LGhlPXR0LnR5cGU7cmV0dXJuIHR0LmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8dHQuaXNWaWRlb1RleHR1cmU9PT0hMHx8dHQuZm9ybWF0PT09c1V8fEl0IT09UWQmJihJdD09PVduP3M9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiYkdD09PVFvPyh0dC5mb3JtYXQ9c1UsdHQubWluRmlsdGVyPWlpLHR0LmdlbmVyYXRlTWlwbWFwcz0hMSk6JD1LZi5zUkdCVG9MaW5lYXIoJCk6KCR0IT09UW98fGhlIT09WmQpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixJdCkpLCR9bGV0IGVlPSExLExlPSExO2Z1bmN0aW9uIGFyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoZWU9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGVlPSEwKSx0dD10dC50ZXh0dXJlKSxXKHR0LCQpfWZ1bmN0aW9uIGZyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKExlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTGU9ITApLHR0PXR0LnRleHR1cmUpLG90KHR0LCQpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1VLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1XLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9Wix0aGlzLnNldFRleHR1cmUzRD1ydCx0aGlzLnNldFRleHR1cmVDdWJlPW90LHRoaXMucmViaW5kVGV4dHVyZXM9ZHQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1xLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPXB0LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9aHQsdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWV0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9X3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWFyLHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZyfWZ1bmN0aW9uICRmZShlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKG8sYT1udWxsKXtsZXQgcztpZihvPT09WmQpcmV0dXJuIDUxMjE7aWYobz09PWRmZSlyZXR1cm4gMzI4MTk7aWYobz09PW1mZSlyZXR1cm4gMzI4MjA7aWYobz09PWhmZSlyZXR1cm4gNTEyMDtpZihvPT09ZmZlKXJldHVybiA1MTIyO2lmKG89PT1HMylyZXR1cm4gNTEyMztpZihvPT09cGZlKXJldHVybiA1MTI0O2lmKG89PT1WUClyZXR1cm4gNTEyNTtpZihvPT09amQpcmV0dXJuIDUxMjY7aWYobz09PUMxKXJldHVybiBuPzUxMzE6KHM9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxzIT09bnVsbD9zLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKG89PT1nZmUpcmV0dXJuIDY0MDY7aWYobz09PVFvKXJldHVybiA2NDA4O2lmKG89PT1fZmUpcmV0dXJuIDY0MDk7aWYobz09PXlmZSlyZXR1cm4gNjQxMDtpZihvPT09ejApcmV0dXJuIDY0MDI7aWYobz09PWsxKXJldHVybiAzNDA0MTtpZihvPT09dmZlKXJldHVybiA2NDAzO2lmKG89PT1zVSlyZXR1cm4gcz10LmdldCgiRVhUX3NSR0IiKSxzIT09bnVsbD9zLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYobz09PXhmZSlyZXR1cm4gMzYyNDQ7aWYobz09PWJmZSlyZXR1cm4gMzMzMTk7aWYobz09PXdmZSlyZXR1cm4gMzMzMjA7aWYobz09PVNmZSlyZXR1cm4gMzYyNDk7aWYobz09PUpWfHxvPT09UVZ8fG89PT10VXx8bz09PWVVKWlmKGE9PT1XbilpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1lVSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2Vsc2UgaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxzIT09bnVsbCl7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UHV0fHxvPT09SXV0fHxvPT09THV0fHxvPT09a3V0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLHMhPT1udWxsKXtpZihvPT09UHV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PWt1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKG89PT1NZmUpcmV0dXJuIHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIikscyE9PW51bGw/cy5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYobz09PVJ1dHx8bz09PU51dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIikscyE9PW51bGwpe2lmKG89PT1SdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfRVRDMjpzLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKG89PT1OdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKG89PT1EdXR8fG89PT1PdXR8fG89PT16dXR8fG89PT1GdXR8fG89PT1CdXR8fG89PT1IdXR8fG89PT1WdXR8fG89PT1VdXR8fG89PT1xdXR8fG89PT1HdXR8fG89PT1XdXR8fG89PT1ZdXR8fG89PT1qdXR8fG89PT1YdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxzIT09bnVsbCl7aWYobz09PUR1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihvPT09T3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT16dXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PUZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihvPT09QnV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1IdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihvPT09VXV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1xdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1qdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKG89PT1YdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PSR1dClpZihzPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIikscyE9PW51bGwpe2lmKG89PT0kdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKG89PT1BMSlyZXR1cm4gbj8zNDA0Mjoocz10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHMhPT1udWxsP3MuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6aX19dmFyIG42PWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O242LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBYZD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O1hkLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBDZ3I9e3R5cGU6Im1vdmUifSxxUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgWGQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBYZCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IFhkLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBqKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxyLG4pe2xldCBpPW51bGwsbz1udWxsLGE9bnVsbCxzPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJnIuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihzIT09bnVsbCYmKGk9ci5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksaSE9PW51bGwmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KHMuaGFzTGluZWFyVmVsb2NpdHk9ITAscy5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTpzLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxzLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6cy5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KENncikpKSxjJiZ0LmhhbmQpe2E9ITA7Zm9yKGxldCBnIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IF89ci5nZXRKb2ludFBvc2UoZyxuKTtpZihjLmpvaW50c1tnLmpvaW50TmFtZV09PT12b2lkIDApe2xldCB4PW5ldyBYZDt4Lm1hdHJpeEF1dG9VcGRhdGU9ITEseC52aXNpYmxlPSExLGMuam9pbnRzW2cuam9pbnROYW1lXT14LGMuYWRkKHgpfWxldCB5PWMuam9pbnRzW2cuam9pbnROYW1lXTtfIT09bnVsbCYmKHkubWF0cml4LmZyb21BcnJheShfLnRyYW5zZm9ybS5tYXRyaXgpLHkubWF0cml4LmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucm90YXRpb24seS5zY2FsZSkseS5qb2ludFJhZGl1cz1fLnJhZGl1cykseS52aXNpYmxlPV8hPT1udWxsfWxldCB1PWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0saD1jLmpvaW50c1sidGh1bWItdGlwIl0sZj11LnBvc2l0aW9uLmRpc3RhbmNlVG8oaC5wb3NpdGlvbikscD0uMDIsZD0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmZj5wK2Q/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPD1wLWQmJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIGwhPT1udWxsJiZ0LmdyaXBTcGFjZSYmKG89ci5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG8hPT1udWxsJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIHMhPT1udWxsJiYocy52aXNpYmxlPWkhPT1udWxsKSxsIT09bnVsbCYmKGwudmlzaWJsZT1vIT09bnVsbCksYyE9PW51bGwmJihjLnZpc2libGU9YSE9PW51bGwpLHRoaXN9fSxuTT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe2lmKHU9dSE9PXZvaWQgMD91OnowLHUhPT16MCYmdSE9PWsxKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTtuPT09dm9pZCAwJiZ1PT09ejAmJihuPUczKSxuPT09dm9pZCAwJiZ1PT09azEmJihuPUExKSxzdXBlcihudWxsLGksbyxhLHMsbCx1LG4sYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cn0sdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOkxpLHRoaXMubWluRmlsdGVyPWwhPT12b2lkIDA/bDpMaSx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bk0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBlaHQ9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCk7bGV0IG49dGhpcyxpPW51bGwsbz0xLGE9bnVsbCxzPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwscD0hMSxkPW51bGwsZz1yLmdldENvbnRleHRBdHRyaWJ1dGVzKCksXz1udWxsLHk9bnVsbCx4PVtdLGI9bmV3IE1hcCxTPW5ldyBVaTtTLmxheWVycy5lbmFibGUoMSksUy52aWV3cG9ydD1uZXcgZW47bGV0IEM9bmV3IFVpO0MubGF5ZXJzLmVuYWJsZSgyKSxDLnZpZXdwb3J0PW5ldyBlbjtsZXQgUD1bUyxDXSxrPW5ldyBuNjtrLmxheWVycy5lbmFibGUoMSksay5sYXllcnMuZW5hYmxlKDIpO2xldCBPPW51bGwsRD1udWxsO3RoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRIYW5kU3BhY2UoKX07ZnVuY3Rpb24gQihvdCl7bGV0IHN0PWIuZ2V0KG90LmlucHV0U291cmNlKTtzdCYmc3QuZGlzcGF0Y2hFdmVudCh7dHlwZTpvdC50eXBlLGRhdGE6b3QuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBJKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKG90LHN0KXtvdC5kaXNjb25uZWN0KHN0KX0pLGIuY2xlYXIoKSxPPW51bGwsRD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KF8pLGY9bnVsbCxoPW51bGwsdT1udWxsLGk9bnVsbCx5PW51bGwscnQuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24ob3Qpe289b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24ob3Qpe3M9b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24ob3Qpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoaT1vdCxpIT09bnVsbCl7aWYoXz10LmdldFJlbmRlclRhcmdldCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLEwpLGcueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCByLm1ha2VYUkNvbXBhdGlibGUoKSksaS5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCBzdD17YW50aWFsaWFzOmkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP2cuYW50aWFsaWFzOiEwLGFscGhhOmcuYWxwaGEsZGVwdGg6Zy5kZXB0aCxzdGVuY2lsOmcuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99O2Y9bmV3IFhSV2ViR0xMYXllcihpLHIsc3QpLGkudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpmfSkseT1uZXcgdXMoZi5mcmFtZWJ1ZmZlcldpZHRoLGYuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1lbHNle3A9Zy5hbnRpYWxpYXM7bGV0IHN0PW51bGwsU3Q9bnVsbCxidD1udWxsO2cuZGVwdGgmJihidD1nLnN0ZW5jaWw/MzUwNTY6MzMxOTAsc3Q9Zy5zdGVuY2lsP2sxOnowLFN0PWcuc3RlbmNpbD9BMTpHMyk7bGV0IE10PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09V24/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6YnQsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcoaSxyKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKE10KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSkscD95PW5ldyBqMyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTp5PW5ldyB1cyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX15LmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksYT15aWVsZCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShzKSxydC5zZXRDb250ZXh0KGkpLHJ0LnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIEwob3Qpe2xldCBzdD1pLmlucHV0U291cmNlcztmb3IobGV0IFN0PTA7U3Q8eC5sZW5ndGg7U3QrKyliLnNldChzdFtTdF0seFtTdF0pO2ZvcihsZXQgU3Q9MDtTdDxvdC5yZW1vdmVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QucmVtb3ZlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiYoTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOmJ0fSksYi5kZWxldGUoYnQpKX1mb3IobGV0IFN0PTA7U3Q8b3QuYWRkZWQubGVuZ3RoO1N0Kyspe2xldCBidD1vdC5hZGRlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiZNdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6YnR9KX19bGV0IFI9bmV3IGosRj1uZXcgajtmdW5jdGlvbiB6KG90LHN0LFN0KXtSLnNldEZyb21NYXRyaXhQb3NpdGlvbihzdC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24oU3QubWF0cml4V29ybGQpO2xldCBidD1SLmRpc3RhbmNlVG8oRiksTXQ9c3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxsdD1TdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEt0PU10WzE0XS8oTXRbMTBdLTEpLF90PU10WzE0XS8oTXRbMTBdKzEpLGN0PShNdFs5XSsxKS9NdFs1XSxYPShNdFs5XS0xKS9NdFs1XSxldD0oTXRbOF0tMSkvTXRbMF0sZHQ9KGx0WzhdKzEpL2x0WzBdLHE9S3QqZXQscHQ9S3QqZHQsaHQ9YnQvKC1ldCtkdCksd3Q9aHQqLWV0O3N0Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC50cmFuc2xhdGVYKHd0KSxvdC50cmFuc2xhdGVaKGh0KSxvdC5tYXRyaXhXb3JsZC5jb21wb3NlKG90LnBvc2l0aW9uLG90LnF1YXRlcm5pb24sb3Quc2NhbGUpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQga3Q9S3QraHQsaWU9X3QraHQsZWU9cS13dCxMZT1wdCsoYnQtd3QpLGFyPWN0Kl90L2llKmt0LGZyPVgqX3QvaWUqa3Q7b3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZWUsTGUsYXIsZnIsa3QsaWUpfWZ1bmN0aW9uIFUob3Qsc3Qpe3N0PT09bnVsbD9vdC5tYXRyaXhXb3JsZC5jb3B5KG90Lm1hdHJpeCk6b3QubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhzdC5tYXRyaXhXb3JsZCxvdC5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihvdCl7aWYoaT09PW51bGwpcmV0dXJuO2submVhcj1DLm5lYXI9Uy5uZWFyPW90Lm5lYXIsay5mYXI9Qy5mYXI9Uy5mYXI9b3QuZmFyLChPIT09ay5uZWFyfHxEIT09ay5mYXIpJiYoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOmsubmVhcixkZXB0aEZhcjprLmZhcn0pLE89ay5uZWFyLEQ9ay5mYXIpO2xldCBzdD1vdC5wYXJlbnQsU3Q9ay5jYW1lcmFzO1UoayxzdCk7Zm9yKGxldCBNdD0wO010PFN0Lmxlbmd0aDtNdCsrKVUoU3RbTXRdLHN0KTtrLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrLnBvc2l0aW9uLGsucXVhdGVybmlvbixrLnNjYWxlKSxvdC5wb3NpdGlvbi5jb3B5KGsucG9zaXRpb24pLG90LnF1YXRlcm5pb24uY29weShrLnF1YXRlcm5pb24pLG90LnNjYWxlLmNvcHkoay5zY2FsZSksb3QubWF0cml4LmNvcHkoay5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkLmNvcHkoay5tYXRyaXhXb3JsZCk7bGV0IGJ0PW90LmNoaWxkcmVuO2ZvcihsZXQgTXQ9MCxsdD1idC5sZW5ndGg7TXQ8bHQ7TXQrKylidFtNdF0udXBkYXRlTWF0cml4V29ybGQoITApO1N0Lmxlbmd0aD09PTI/eihrLFMsQyk6ay5wcm9qZWN0aW9uTWF0cml4LmNvcHkoUy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24ob3Qpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1vdCksZiE9PW51bGwmJmYuZml4ZWRGb3ZlYXRpb24hPT12b2lkIDAmJihmLmZpeGVkRm92ZWF0aW9uPW90KX07bGV0IFc9bnVsbDtmdW5jdGlvbiBaKG90LHN0KXtpZihjPXN0LmdldFZpZXdlclBvc2UoYSksZD1zdCxjIT09bnVsbCl7bGV0IGJ0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHksZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoeSkpO2xldCBNdD0hMTtidC5sZW5ndGghPT1rLmNhbWVyYXMubGVuZ3RoJiYoay5jYW1lcmFzLmxlbmd0aD0wLE10PSEwKTtmb3IobGV0IGx0PTA7bHQ8YnQubGVuZ3RoO2x0Kyspe2xldCBLdD1idFtsdF0sX3Q9bnVsbDtpZihmIT09bnVsbClfdD1mLmdldFZpZXdwb3J0KEt0KTtlbHNle2xldCBYPXUuZ2V0Vmlld1N1YkltYWdlKGgsS3QpO190PVgudmlld3BvcnQsbHQ9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyh5LFguY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlguZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBjdD1QW2x0XTtjdC5tYXRyaXguZnJvbUFycmF5KEt0LnRyYW5zZm9ybS5tYXRyaXgpLGN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEt0LnByb2plY3Rpb25NYXRyaXgpLGN0LnZpZXdwb3J0LnNldChfdC54LF90LnksX3Qud2lkdGgsX3QuaGVpZ2h0KSxsdD09PTAmJmsubWF0cml4LmNvcHkoY3QubWF0cml4KSxNdD09PSEwJiZrLmNhbWVyYXMucHVzaChjdCl9fWxldCBTdD1pLmlucHV0U291cmNlcztmb3IobGV0IGJ0PTA7YnQ8eC5sZW5ndGg7YnQrKyl7bGV0IE10PXhbYnRdLGx0PVN0W2J0XTtNdC51cGRhdGUobHQsc3QsYSl9VyYmVyhvdCxzdCksZD1udWxsfWxldCBydD1uZXcgRmZlO3J0LnNldEFuaW1hdGlvbkxvb3AoWiksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKG90KXtXPW90fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gQWdyKGUpe2Z1bmN0aW9uIHQoeSx4KXt5LmZvZ0NvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseC5pc0ZvZz8oeS5mb2dOZWFyLnZhbHVlPXgubmVhcix5LmZvZ0Zhci52YWx1ZT14LmZhcik6eC5pc0ZvZ0V4cDImJih5LmZvZ0RlbnNpdHkudmFsdWU9eC5kZW5zaXR5KX1mdW5jdGlvbiByKHkseCxiLFMsQyl7eC5pc01lc2hCYXNpY01hdGVyaWFsP24oeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8obih5LHgpLGwoeSx4KSk6eC5pc01lc2hUb29uTWF0ZXJpYWw/KG4oeSx4KSx1KHkseCkpOnguaXNNZXNoUGhvbmdNYXRlcmlhbD8obih5LHgpLGMoeSx4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhuKHkseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2YoeSx4LEMpOmgoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8obih5LHgpLHAoeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhuKHkseCksZCh5LHgpKTp4LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KG4oeSx4KSxnKHkseCkpOnguaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KG4oeSx4KSxfKHkseCkpOnguaXNMaW5lQmFzaWNNYXRlcmlhbD8oaSh5LHgpLHguaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJm8oeSx4KSk6eC5pc1BvaW50c01hdGVyaWFsP2EoeSx4LGIsUyk6eC5pc1Nwcml0ZU1hdGVyaWFsP3MoeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9ZnVuY3Rpb24gbih5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI9ZS5nZXQoeCkuZW52TWFwO2ImJih5LmVudk1hcC52YWx1ZT1iLHkuZmxpcEVudk1hcC52YWx1ZT1iLmlzQ3ViZVRleHR1cmUmJmIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSx5LnJlZmxlY3Rpdml0eS52YWx1ZT14LnJlZmxlY3Rpdml0eSx5Lmlvci52YWx1ZT14Lmlvcix5LnJlZnJhY3Rpb25SYXRpby52YWx1ZT14LnJlZnJhY3Rpb25SYXRpbykseC5saWdodE1hcCYmKHkubGlnaHRNYXAudmFsdWU9eC5saWdodE1hcCx5LmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPXgubGlnaHRNYXBJbnRlbnNpdHkpLHguYW9NYXAmJih5LmFvTWFwLnZhbHVlPXguYW9NYXAseS5hb01hcEludGVuc2l0eS52YWx1ZT14LmFvTWFwSW50ZW5zaXR5KTtsZXQgUzt4Lm1hcD9TPXgubWFwOnguc3BlY3VsYXJNYXA/Uz14LnNwZWN1bGFyTWFwOnguZGlzcGxhY2VtZW50TWFwP1M9eC5kaXNwbGFjZW1lbnRNYXA6eC5ub3JtYWxNYXA/Uz14Lm5vcm1hbE1hcDp4LmJ1bXBNYXA/Uz14LmJ1bXBNYXA6eC5yb3VnaG5lc3NNYXA/Uz14LnJvdWdobmVzc01hcDp4Lm1ldGFsbmVzc01hcD9TPXgubWV0YWxuZXNzTWFwOnguYWxwaGFNYXA/Uz14LmFscGhhTWFwOnguZW1pc3NpdmVNYXA/Uz14LmVtaXNzaXZlTWFwOnguY2xlYXJjb2F0TWFwP1M9eC5jbGVhcmNvYXRNYXA6eC5jbGVhcmNvYXROb3JtYWxNYXA/Uz14LmNsZWFyY29hdE5vcm1hbE1hcDp4LmNsZWFyY29hdFJvdWdobmVzc01hcD9TPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwOnguc3BlY3VsYXJJbnRlbnNpdHlNYXA/Uz14LnNwZWN1bGFySW50ZW5zaXR5TWFwOnguc3BlY3VsYXJDb2xvck1hcD9TPXguc3BlY3VsYXJDb2xvck1hcDp4LnRyYW5zbWlzc2lvbk1hcD9TPXgudHJhbnNtaXNzaW9uTWFwOngudGhpY2tuZXNzTWFwP1M9eC50aGlja25lc3NNYXA6eC5zaGVlbkNvbG9yTWFwP1M9eC5zaGVlbkNvbG9yTWFwOnguc2hlZW5Sb3VnaG5lc3NNYXAmJihTPXguc2hlZW5Sb3VnaG5lc3NNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSk7bGV0IEM7eC5hb01hcD9DPXguYW9NYXA6eC5saWdodE1hcCYmKEM9eC5saWdodE1hcCksQyE9PXZvaWQgMCYmKEMuaXNXZWJHTFJlbmRlclRhcmdldCYmKEM9Qy50ZXh0dXJlKSxDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gaSh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9ZnVuY3Rpb24gbyh5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9ZnVuY3Rpb24gYSh5LHgsYixTKXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqYix5LnNjYWxlLnZhbHVlPVMqLjUseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgQzt4Lm1hcD9DPXgubWFwOnguYWxwaGFNYXAmJihDPXguYWxwaGFNYXApLEMhPT12b2lkIDAmJihDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQy5tYXRyaXgpKX1mdW5jdGlvbiBzKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgYjt4Lm1hcD9iPXgubWFwOnguYWxwaGFNYXAmJihiPXguYWxwaGFNYXApLGIhPT12b2lkIDAmJihiLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmYi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpKX1mdW5jdGlvbiBsKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9ZnVuY3Rpb24gYyh5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIHUoeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGgoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLGUuZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1mdW5jdGlvbiBmKHkseCxiKXtoKHkseCkseS5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYoeS5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx5LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYoeS5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHkuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih5LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx5LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHkuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx5LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT1JaSYmeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih5LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix5LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Yi50ZXh0dXJlLHkudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KGIud2lkdGgsYi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYoeS50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHkudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYoeS50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHkuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2UseS5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSkseS5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHkuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYoeS5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9ZnVuY3Rpb24gcCh5LHgpe3gubWF0Y2FwJiYoeS5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHkuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAseS5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09SWkmJih5LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHkubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHkubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT1JaSYmeS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gZCh5LHgpe3guZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfWZ1bmN0aW9uIF8oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6dCxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpyfX1mdW5jdGlvbiBQZ3IoKXtsZXQgZT10NigiY2FudmFzIik7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV9ZnVuY3Rpb24gcm4oZT17fSl7bGV0IHQ9ZS5jYW52YXMhPT12b2lkIDA/ZS5jYW52YXM6UGdyKCkscj1lLmNvbnRleHQhPT12b2lkIDA/ZS5jb250ZXh0Om51bGwsbj1lLmFscGhhIT09dm9pZCAwP2UuYWxwaGE6ITEsaT1lLmRlcHRoIT09dm9pZCAwP2UuZGVwdGg6ITAsbz1lLnN0ZW5jaWwhPT12b2lkIDA/ZS5zdGVuY2lsOiEwLGE9ZS5hbnRpYWxpYXMhPT12b2lkIDA/ZS5hbnRpYWxpYXM6ITEscz1lLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9lLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP2UucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9ZS5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/ZS5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP2UuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLHA9W10sZD1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPVFkLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1LZCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgZz10aGlzLF89ITEseT0wLHg9MCxiPW51bGwsUz0tMSxDPW51bGwsUD1uZXcgZW4saz1uZXcgZW4sTz1udWxsLEQ9dC53aWR0aCxCPXQuaGVpZ2h0LEk9MSxMPW51bGwsUj1udWxsLEY9bmV3IGVuKDAsMCxELEIpLHo9bmV3IGVuKDAsMCxELEIpLFU9ITEsVz1uZXcgTjEsWj0hMSxydD0hMSxvdD1udWxsLHN0PW5ldyBNZSxTdD1uZXcgaixidD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIGI9PT1udWxsP0k6MX1sZXQgbHQ9cjtmdW5jdGlvbiBLdChLLGd0KXtmb3IobGV0IEV0PTA7RXQ8Sy5sZW5ndGg7RXQrKyl7bGV0IHh0PUtbRXRdLEZ0PXQuZ2V0Q29udGV4dCh4dCxndCk7aWYoRnQhPT1udWxsKXJldHVybiBGdH1yZXR1cm4gbnVsbH10cnl7bGV0IEs9e2FscGhhOiEwLGRlcHRoOmksc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtqVX1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixhdCwhMSksbHQ9PT1udWxsKXtsZXQgZ3Q9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKGcuaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZndC5zaGlmdCgpLGx0PUt0KGd0LEspLGx0PT09bnVsbCl0aHJvdyBLdChndCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX1sdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihsdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEspe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrSy5tZXNzYWdlKSxLfWxldCBfdCxjdCxYLGV0LGR0LHEscHQsaHQsd3Qsa3QsaWUsZWUsTGUsYXIsZnIsdHQsJCxJdCwkdCxoZSxUdCxiZSxudDtmdW5jdGlvbiBDdCgpe190PW5ldyBKZHIobHQpLGN0PW5ldyBZZHIobHQsX3QsZSksX3QuaW5pdChjdCksYmU9bmV3ICRmZShsdCxfdCxjdCksWD1uZXcgRWdyKGx0LF90LGN0KSxldD1uZXcgZW1yKGx0KSxkdD1uZXcgZGdyLHE9bmV3IFRncihsdCxfdCxYLGR0LGN0LGJlLGV0KSxwdD1uZXcgWGRyKGcpLGh0PW5ldyBaZHIoZyksd3Q9bmV3IGdmcihsdCxjdCksbnQ9bmV3IEdkcihsdCxfdCx3dCxjdCksa3Q9bmV3IFFkcihsdCx3dCxldCxudCksaWU9bmV3IG9tcihsdCxrdCx3dCxldCksJHQ9bmV3IGltcihsdCxjdCxxKSx0dD1uZXcgamRyKGR0KSxlZT1uZXcgcGdyKGcscHQsaHQsX3QsY3QsbnQsdHQpLExlPW5ldyBBZ3IoZHQpLGFyPW5ldyBnZ3IsZnI9bmV3IHdncihfdCxjdCksSXQ9bmV3IHFkcihnLHB0LFgsaWUsbixzKSwkPW5ldyBYZmUoZyxpZSxjdCksaGU9bmV3IFdkcihsdCxfdCxldCxjdCksVHQ9bmV3IHRtcihsdCxfdCxldCxjdCksZXQucHJvZ3JhbXM9ZWUucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9Y3QsZy5leHRlbnNpb25zPV90LGcucHJvcGVydGllcz1kdCxnLnJlbmRlckxpc3RzPWFyLGcuc2hhZG93TWFwPSQsZy5zdGF0ZT1YLGcuaW5mbz1ldH1DdCgpO2xldCBXdD1uZXcgZWh0KGcsbHQpO3RoaXMueHI9V3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBLPV90LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7SyYmSy5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihLKXtLIT09dm9pZCAwJiYoST1LLHRoaXMuc2V0U2l6ZShELEIsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEspe3JldHVybiBLLnNldChELEIpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oSyxndCxFdCl7aWYoV3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn1EPUssQj1ndCx0LndpZHRoPU1hdGguZmxvb3IoSypJKSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkkpLEV0IT09ITEmJih0LnN0eWxlLndpZHRoPUsrInB4Iix0LnN0eWxlLmhlaWdodD1ndCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCpJLEIqSSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLLGd0LEV0KXtEPUssQj1ndCxJPUV0LHQud2lkdGg9TWF0aC5mbG9vcihLKkV0KSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkV0KSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShQKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEYpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P0Yuc2V0KEsueCxLLnksSy56LEsudyk6Ri5zZXQoSyxndCxFdCx4dCksWC52aWV3cG9ydChQLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KHopfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSyxndCxFdCx4dCl7Sy5pc1ZlY3RvcjQ/ei5zZXQoSy54LEsueSxLLnosSy53KTp6LnNldChLLGd0LEV0LHh0KSxYLnNjaXNzb3Ioay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFV9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSyl7WC5zZXRTY2lzc29yVGVzdChVPUspfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oSyl7TD1LfSx0aGlzLnNldFRyYW5zcGFyZW50U29ydD1mdW5jdGlvbihLKXtSPUt9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEl0LmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0l0LnNldENsZWFyQ29sb3IuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SXQuc2V0Q2xlYXJBbHBoYS5hcHBseShJdCxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEssZ3QsRXQpe2xldCB4dD0wOyhLPT09dm9pZCAwfHxLKSYmKHh0fD0xNjM4NCksKGd0PT09dm9pZCAwfHxndCkmJih4dHw9MjU2KSwoRXQ9PT12b2lkIDB8fEV0KSYmKHh0fD0xMDI0KSxsdC5jbGVhcih4dCl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGFyLmRpc3Bvc2UoKSxmci5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHB0LmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksaWUuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxlZS5kaXNwb3NlKCksV3QuZGlzcG9zZSgpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSxvdCYmKG90LmRpc3Bvc2UoKSxvdD1udWxsKSxXaS5zdG9wKCl9O2Z1bmN0aW9uIGZlKEspe0sucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gYXQoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2xldCBLPWV0LmF1dG9SZXNldCxndD0kLmVuYWJsZWQsRXQ9JC5hdXRvVXBkYXRlLHh0PSQubmVlZHNVcGRhdGUsRnQ9JC50eXBlO0N0KCksZXQuYXV0b1Jlc2V0PUssJC5lbmFibGVkPWd0LCQuYXV0b1VwZGF0ZT1FdCwkLm5lZWRzVXBkYXRlPXh0LCQudHlwZT1GdH1mdW5jdGlvbiBzZShLKXtsZXQgZ3Q9Sy50YXJnZXQ7Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFF0KGd0KX1mdW5jdGlvbiBRdChLKXtDZShLKSxkdC5yZW1vdmUoSyl9ZnVuY3Rpb24gQ2UoSyl7bGV0IGd0PWR0LmdldChLKS5wcm9ncmFtcztndCE9PXZvaWQgMCYmKGd0LmZvckVhY2goZnVuY3Rpb24oRXQpe2VlLnJlbGVhc2VQcm9ncmFtKEV0KX0pLEsuaXNTaGFkZXJNYXRlcmlhbCYmZWUucmVsZWFzZVNoYWRlckNhY2hlKEspKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0LFZlKXtndD09PW51bGwmJihndD1idCk7bGV0IFVlPUZ0LmlzTWVzaCYmRnQubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHRyPWNuKEssZ3QsRXQseHQsRnQpO1guc2V0TWF0ZXJpYWwoeHQsVWUpO2xldCBLZT1FdC5pbmRleCxYcj1FdC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKEtlPT09bnVsbCl7aWYoWHI9PT12b2lkIDB8fFhyLmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihLZS5jb3VudD09PTApcmV0dXJuO2xldCBfcj0xO3h0LndpcmVmcmFtZT09PSEwJiYoS2U9a3QuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKEV0KSxfcj0yKSxudC5zZXR1cChGdCx4dCx0cixFdCxLZSk7bGV0IFByLGpuPWhlO0tlIT09bnVsbCYmKFByPXd0LmdldChLZSksam49VHQsam4uc2V0SW5kZXgoUHIpKTtsZXQgbnA9S2UhPT1udWxsP0tlLmNvdW50OlhyLmNvdW50LHVtPUV0LmRyYXdSYW5nZS5zdGFydCpfcixtcj1FdC5kcmF3UmFuZ2UuY291bnQqX3IsRmw9VmUhPT1udWxsP1ZlLnN0YXJ0Kl9yOjAsWG49VmUhPT1udWxsP1ZlLmNvdW50Kl9yOjEvMCxCbD1NYXRoLm1heCh1bSxGbCksdXg9TWF0aC5taW4obnAsdW0rbXIsRmwrWG4pLTEsSGw9TWF0aC5tYXgoMCx1eC1CbCsxKTtpZihIbCE9PTApe2lmKEZ0LmlzTWVzaCl4dC53aXJlZnJhbWU9PT0hMD8oWC5zZXRMaW5lV2lkdGgoeHQud2lyZWZyYW1lTGluZXdpZHRoKk10KCkpLGpuLnNldE1vZGUoMSkpOmpuLnNldE1vZGUoNCk7ZWxzZSBpZihGdC5pc0xpbmUpe2xldCBWbD14dC5saW5ld2lkdGg7Vmw9PT12b2lkIDAmJihWbD0xKSxYLnNldExpbmVXaWR0aChWbCpNdCgpKSxGdC5pc0xpbmVTZWdtZW50cz9qbi5zZXRNb2RlKDEpOkZ0LmlzTGluZUxvb3A/am4uc2V0TW9kZSgyKTpqbi5zZXRNb2RlKDMpfWVsc2UgRnQuaXNQb2ludHM/am4uc2V0TW9kZSgwKTpGdC5pc1Nwcml0ZSYmam4uc2V0TW9kZSg0KTtpZihGdC5pc0luc3RhbmNlZE1lc2gpam4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLEZ0LmNvdW50KTtlbHNlIGlmKEV0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCBWbD1NYXRoLm1pbihFdC5pbnN0YW5jZUNvdW50LEV0Ll9tYXhJbnN0YW5jZUNvdW50KTtqbi5yZW5kZXJJbnN0YW5jZXMoQmwsSGwsVmwpfWVsc2Ugam4ucmVuZGVyKEJsLEhsKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihLLGd0KXtmPWZyLmdldChLKSxmLmluaXQoKSxkLnB1c2goZiksSy50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oRXQpe0V0LmlzTGlnaHQmJkV0LmxheWVycy50ZXN0KGd0LmxheWVycykmJihmLnB1c2hMaWdodChFdCksRXQuY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KEV0KSl9KSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEsudHJhdmVyc2UoZnVuY3Rpb24oRXQpe2xldCB4dD1FdC5tYXRlcmlhbDtpZih4dClpZihBcnJheS5pc0FycmF5KHh0KSlmb3IobGV0IEZ0PTA7RnQ8eHQubGVuZ3RoO0Z0Kyspe2xldCBWZT14dFtGdF07Y20oVmUsSyxFdCl9ZWxzZSBjbSh4dCxLLEV0KX0pLGQucG9wKCksZj1udWxsfTtsZXQgUHQ9bnVsbDtmdW5jdGlvbiBOdChLKXtQdCYmUHQoSyl9ZnVuY3Rpb24gemUoKXtXaS5zdG9wKCl9ZnVuY3Rpb24geW4oKXtXaS5zdGFydCgpfWxldCBXaT1uZXcgRmZlO1dpLnNldEFuaW1hdGlvbkxvb3AoTnQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZXaS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKEspe1B0PUssV3Quc2V0QW5pbWF0aW9uTG9vcChLKSxLPT09bnVsbD9XaS5zdG9wKCk6V2kuc3RhcnQoKX0sV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0Iix6ZSksV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIseW4pLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEssZ3Qpe2lmKGd0IT09dm9pZCAwJiZndC5pc0NhbWVyYSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7cmV0dXJufWlmKF89PT0hMClyZXR1cm47Sy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlTWF0cml4V29ybGQoKSxndC5wYXJlbnQ9PT1udWxsJiZndC51cGRhdGVNYXRyaXhXb3JsZCgpLFd0LmVuYWJsZWQ9PT0hMCYmV3QuaXNQcmVzZW50aW5nPT09ITAmJihXdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJld0LnVwZGF0ZUNhbWVyYShndCksZ3Q9V3QuZ2V0Q2FtZXJhKCkpLEsuaXNTY2VuZT09PSEwJiZLLm9uQmVmb3JlUmVuZGVyKGcsSyxndCxiKSxmPWZyLmdldChLLGQubGVuZ3RoKSxmLmluaXQoKSxkLnB1c2goZiksc3QubXVsdGlwbHlNYXRyaWNlcyhndC5wcm9qZWN0aW9uTWF0cml4LGd0Lm1hdHJpeFdvcmxkSW52ZXJzZSksVy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzdCkscnQ9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCxaPXR0LmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxydCxndCksaD1hci5nZXQoSyxwLmxlbmd0aCksaC5pbml0KCkscC5wdXNoKGgpLEFyKEssZ3QsMCxnLnNvcnRPYmplY3RzKSxoLmZpbmlzaCgpLGcuc29ydE9iamVjdHM9PT0hMCYmaC5zb3J0KEwsUiksWj09PSEwJiZ0dC5iZWdpblNoYWRvd3MoKTtsZXQgRXQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYoJC5yZW5kZXIoRXQsSyxndCksWj09PSEwJiZ0dC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxJdC5yZW5kZXIoaCxLKSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLGd0LmlzQXJyYXlDYW1lcmEpe2xldCB4dD1ndC5jYW1lcmFzO2ZvcihsZXQgRnQ9MCxWZT14dC5sZW5ndGg7RnQ8VmU7RnQrKyl7bGV0IFVlPXh0W0Z0XTtQYShoLEssVWUsVWUudmlld3BvcnQpfX1lbHNlIFBhKGgsSyxndCk7YiE9PW51bGwmJihxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkFmdGVyUmVuZGVyKGcsSyxndCksWC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFguYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxYLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksWC5zZXRQb2x5Z29uT2Zmc2V0KCExKSxudC5yZXNldERlZmF1bHRTdGF0ZSgpLFM9LTEsQz1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9mPWRbZC5sZW5ndGgtMV06Zj1udWxsLHAucG9wKCkscC5sZW5ndGg+MD9oPXBbcC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBBcihLLGd0LEV0LHh0KXtpZihLLnZpc2libGU9PT0hMSlyZXR1cm47aWYoSy5sYXllcnMudGVzdChndC5sYXllcnMpKXtpZihLLmlzR3JvdXApRXQ9Sy5yZW5kZXJPcmRlcjtlbHNlIGlmKEsuaXNMT0QpSy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlKGd0KTtlbHNlIGlmKEsuaXNMaWdodClmLnB1c2hMaWdodChLKSxLLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhLKTtlbHNlIGlmKEsuaXNTcHJpdGUpe2lmKCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c1Nwcml0ZShLKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDt0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1lbHNlIGlmKChLLmlzTWVzaHx8Sy5pc0xpbmV8fEsuaXNQb2ludHMpJiYoSy5pc1NraW5uZWRNZXNoJiZLLnNrZWxldG9uLmZyYW1lIT09ZXQucmVuZGVyLmZyYW1lJiYoSy5za2VsZXRvbi51cGRhdGUoKSxLLnNrZWxldG9uLmZyYW1lPWV0LnJlbmRlci5mcmFtZSksIUsuZnJ1c3R1bUN1bGxlZHx8Vy5pbnRlcnNlY3RzT2JqZWN0KEspKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHRyKSl7bGV0IEtlPVVlLmdyb3Vwcztmb3IobGV0IFhyPTAsX3I9S2UubGVuZ3RoO1hyPF9yO1hyKyspe2xldCBQcj1LZVtYcl0sam49dHJbUHIubWF0ZXJpYWxJbmRleF07am4mJmpuLnZpc2libGUmJmgucHVzaChLLFVlLGpuLEV0LFN0LnosUHIpfX1lbHNlIHRyLnZpc2libGUmJmgucHVzaChLLFVlLHRyLEV0LFN0LnosbnVsbCl9fWxldCBWZT1LLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCx0cj1WZS5sZW5ndGg7VWU8dHI7VWUrKylBcihWZVtVZV0sZ3QsRXQseHQpfWZ1bmN0aW9uIFBhKEssZ3QsRXQseHQpe2xldCBGdD1LLm9wYXF1ZSxWZT1LLnRyYW5zbWlzc2l2ZSxVZT1LLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KEV0KSxWZS5sZW5ndGg+MCYmaG8oRnQsZ3QsRXQpLHh0JiZYLnZpZXdwb3J0KFAuY29weSh4dCkpLEZ0Lmxlbmd0aD4wJiZJYShGdCxndCxFdCksVmUubGVuZ3RoPjAmJklhKFZlLGd0LEV0KSxVZS5sZW5ndGg+MCYmSWEoVWUsZ3QsRXQpfWZ1bmN0aW9uIGhvKEssZ3QsRXQpe2lmKG90PT09bnVsbCl7bGV0IFVlPWE9PT0hMCYmY3QuaXNXZWJHTDI9PT0hMD9qMzp1cztvdD1uZXcgVWUoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpiZS5jb252ZXJ0KEMxKSE9PW51bGw/QzE6WmQsbWluRmlsdGVyOm94LG1hZ0ZpbHRlcjpMaSx3cmFwUzpKbyx3cmFwVDpKbyx1c2VSZW5kZXJUb1RleHR1cmU6X3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCB4dD1nLmdldFJlbmRlclRhcmdldCgpO2cuc2V0UmVuZGVyVGFyZ2V0KG90KSxnLmNsZWFyKCk7bGV0IEZ0PWcudG9uZU1hcHBpbmc7Zy50b25lTWFwcGluZz1LZCxJYShLLGd0LEV0KSxnLnRvbmVNYXBwaW5nPUZ0LHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQob3QpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKG90KSxnLnNldFJlbmRlclRhcmdldCh4dCl9ZnVuY3Rpb24gSWEoSyxndCxFdCl7bGV0IHh0PWd0LmlzU2NlbmU9PT0hMD9ndC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBGdD0wLFZlPUsubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT1LW0Z0XSx0cj1VZS5vYmplY3QsS2U9VWUuZ2VvbWV0cnksWHI9eHQ9PT1udWxsP1VlLm1hdGVyaWFsOnh0LF9yPVVlLmdyb3VwO3RyLmxheWVycy50ZXN0KEV0LmxheWVycykmJmx4KHRyLGd0LEV0LEtlLFhyLF9yKX19ZnVuY3Rpb24gbHgoSyxndCxFdCx4dCxGdCxWZSl7Sy5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKSxLLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKEV0Lm1hdHJpeFdvcmxkSW52ZXJzZSxLLm1hdHJpeFdvcmxkKSxLLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoSy5tb2RlbFZpZXdNYXRyaXgpLEZ0Lm9uQmVmb3JlUmVuZGVyKGcsZ3QsRXQseHQsSyxWZSksRnQudHJhbnNwYXJlbnQ9PT0hMCYmRnQuc2lkZT09PUwxPyhGdC5zaWRlPUlpLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9STEsRnQubmVlZHNVcGRhdGU9ITAsZy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksRnQuc2lkZT1MMSk6Zy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksSy5vbkFmdGVyUmVuZGVyKGcsZ3QsRXQseHQsRnQsVmUpfWZ1bmN0aW9uIGNtKEssZ3QsRXQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KTtsZXQgeHQ9ZHQuZ2V0KEspLEZ0PWYuc3RhdGUubGlnaHRzLFZlPWYuc3RhdGUuc2hhZG93c0FycmF5LFVlPUZ0LnN0YXRlLnZlcnNpb24sdHI9ZWUuZ2V0UGFyYW1ldGVycyhLLEZ0LnN0YXRlLFZlLGd0LEV0KSxLZT1lZS5nZXRQcm9ncmFtQ2FjaGVLZXkodHIpLFhyPXh0LnByb2dyYW1zO3h0LmVudmlyb25tZW50PUsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHh0LmZvZz1ndC5mb2cseHQuZW52TWFwPShLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldChLLmVudk1hcHx8eHQuZW52aXJvbm1lbnQpLFhyPT09dm9pZCAwJiYoSy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzZSksWHI9bmV3IE1hcCx4dC5wcm9ncmFtcz1Ycik7bGV0IF9yPVhyLmdldChLZSk7aWYoX3IhPT12b2lkIDApe2lmKHh0LmN1cnJlbnRQcm9ncmFtPT09X3ImJnh0LmxpZ2h0c1N0YXRlVmVyc2lvbj09PVVlKXJldHVybiBKMChLLHRyKSxfcn1lbHNlIHRyLnVuaWZvcm1zPWVlLmdldFVuaWZvcm1zKEspLEsub25CdWlsZChFdCx0cixnKSxLLm9uQmVmb3JlQ29tcGlsZSh0cixnKSxfcj1lZS5hY3F1aXJlUHJvZ3JhbSh0cixLZSksWHIuc2V0KEtlLF9yKSx4dC51bmlmb3Jtcz10ci51bmlmb3JtcztsZXQgUHI9eHQudW5pZm9ybXM7KCFLLmlzU2hhZGVyTWF0ZXJpYWwmJiFLLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fEsuY2xpcHBpbmc9PT0hMCkmJihQci5jbGlwcGluZ1BsYW5lcz10dC51bmlmb3JtKSxKMChLLHRyKSx4dC5uZWVkc0xpZ2h0cz1ycChLKSx4dC5saWdodHNTdGF0ZVZlcnNpb249VWUseHQubmVlZHNMaWdodHMmJihQci5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1GdC5zdGF0ZS5hbWJpZW50LFByLmxpZ2h0UHJvYmUudmFsdWU9RnQuc3RhdGUucHJvYmUsUHIuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWwsUHIuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csUHIuc3BvdExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5zcG90LFByLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvdyxQci5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYSxQci5sdGNfMS52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYUxUQzEsUHIubHRjXzIudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMyLFByLnBvaW50TGlnaHRzLnZhbHVlPUZ0LnN0YXRlLnBvaW50LFByLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93LFByLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9RnQuc3RhdGUuaGVtaSxQci5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxQci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxQci5zcG90U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3dNYXAsUHIuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWF0cml4LFByLnBvaW50U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWFwLFByLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgam49X3IuZ2V0VW5pZm9ybXMoKSxucD1CMC5zZXFXaXRoVmFsdWUoam4uc2VxLFByKTtyZXR1cm4geHQuY3VycmVudFByb2dyYW09X3IseHQudW5pZm9ybXNMaXN0PW5wLF9yfWZ1bmN0aW9uIEowKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQub3V0cHV0RW5jb2Rpbmc9Z3Qub3V0cHV0RW5jb2RpbmcsRXQuaW5zdGFuY2luZz1ndC5pbnN0YW5jaW5nLEV0LnNraW5uaW5nPWd0LnNraW5uaW5nLEV0Lm1vcnBoVGFyZ2V0cz1ndC5tb3JwaFRhcmdldHMsRXQubW9ycGhOb3JtYWxzPWd0Lm1vcnBoTm9ybWFscyxFdC5tb3JwaFRhcmdldHNDb3VudD1ndC5tb3JwaFRhcmdldHNDb3VudCxFdC5udW1DbGlwcGluZ1BsYW5lcz1ndC5udW1DbGlwcGluZ1BsYW5lcyxFdC5udW1JbnRlcnNlY3Rpb249Z3QubnVtQ2xpcEludGVyc2VjdGlvbixFdC52ZXJ0ZXhBbHBoYXM9Z3QudmVydGV4QWxwaGFzLEV0LnZlcnRleFRhbmdlbnRzPWd0LnZlcnRleFRhbmdlbnRzLEV0LnRvbmVNYXBwaW5nPWd0LnRvbmVNYXBwaW5nfWZ1bmN0aW9uIGNuKEssZ3QsRXQseHQsRnQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFZlPWd0LmZvZyxVZT14dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2d0LmVudmlyb25tZW50Om51bGwsdHI9Yj09PW51bGw/Zy5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6UWQsS2U9KHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldCh4dC5lbnZNYXB8fFVlKSxYcj14dC52ZXJ0ZXhDb2xvcnM9PT0hMCYmISFFdC5hdHRyaWJ1dGVzLmNvbG9yJiZFdC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCxfcj0hIXh0Lm5vcm1hbE1hcCYmISFFdC5hdHRyaWJ1dGVzLnRhbmdlbnQsUHI9ISFFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sam49ISFFdC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG5wPUV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsdW09eHQudG9uZU1hcHBlZD9nLnRvbmVNYXBwaW5nOktkLG1yPWR0LmdldCh4dCksRmw9Zi5zdGF0ZS5saWdodHM7aWYoWj09PSEwJiYocnQ9PT0hMHx8SyE9PUMpKXtsZXQgcXM9Sz09PUMmJnh0LmlkPT09Uzt0dC5zZXRTdGF0ZSh4dCxLLHFzKX1sZXQgWG49ITE7eHQudmVyc2lvbj09PW1yLl9fdmVyc2lvbj8obXIubmVlZHNMaWdodHMmJm1yLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PUZsLnN0YXRlLnZlcnNpb258fG1yLm91dHB1dEVuY29kaW5nIT09dHJ8fEZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSExfHwhRnQuaXNJbnN0YW5jZWRNZXNoJiZtci5pbnN0YW5jaW5nPT09ITB8fEZ0LmlzU2tpbm5lZE1lc2gmJm1yLnNraW5uaW5nPT09ITF8fCFGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSEwfHxtci5lbnZNYXAhPT1LZXx8eHQuZm9nJiZtci5mb2chPT1WZXx8bXIubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihtci5udW1DbGlwcGluZ1BsYW5lcyE9PXR0Lm51bVBsYW5lc3x8bXIubnVtSW50ZXJzZWN0aW9uIT09dHQubnVtSW50ZXJzZWN0aW9uKXx8bXIudmVydGV4QWxwaGFzIT09WHJ8fG1yLnZlcnRleFRhbmdlbnRzIT09X3J8fG1yLm1vcnBoVGFyZ2V0cyE9PVByfHxtci5tb3JwaE5vcm1hbHMhPT1qbnx8bXIudG9uZU1hcHBpbmchPT11bXx8Y3QuaXNXZWJHTDI9PT0hMCYmbXIubW9ycGhUYXJnZXRzQ291bnQhPT1ucCkmJihYbj0hMCk6KFhuPSEwLG1yLl9fdmVyc2lvbj14dC52ZXJzaW9uKTtsZXQgQmw9bXIuY3VycmVudFByb2dyYW07WG49PT0hMCYmKEJsPWNtKHh0LGd0LEZ0KSk7bGV0IHV4PSExLEhsPSExLFZsPSExLFlpPUJsLmdldFVuaWZvcm1zKCksaG09bXIudW5pZm9ybXM7aWYoWC51c2VQcm9ncmFtKEJsLnByb2dyYW0pJiYodXg9ITAsSGw9ITAsVmw9ITApLHh0LmlkIT09UyYmKFM9eHQuaWQsSGw9ITApLHV4fHxDIT09Syl7aWYoWWkuc2V0VmFsdWUobHQsInByb2plY3Rpb25NYXRyaXgiLEsucHJvamVjdGlvbk1hdHJpeCksY3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmWWkuc2V0VmFsdWUobHQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEsuZmFyKzEpL01hdGguTE4yKSksQyE9PUsmJihDPUssSGw9ITAsVmw9ITApLHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuZW52TWFwKXtsZXQgcXM9WWkubWFwLmNhbWVyYVBvc2l0aW9uO3FzIT09dm9pZCAwJiZxcy5zZXRWYWx1ZShsdCxTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkpfSh4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8eHQuaXNNZXNoQmFzaWNNYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuaXNTaGFkZXJNYXRlcmlhbCkmJllpLnNldFZhbHVlKGx0LCJpc09ydGhvZ3JhcGhpYyIsSy5pc09ydGhvZ3JhcGhpY0NhbWVyYT09PSEwKSwoeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzU2hhZG93TWF0ZXJpYWx8fEZ0LmlzU2tpbm5lZE1lc2gpJiZZaS5zZXRWYWx1ZShsdCwidmlld01hdHJpeCIsSy5tYXRyaXhXb3JsZEludmVyc2UpfWlmKEZ0LmlzU2tpbm5lZE1lc2gpe1lpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4IiksWWkuc2V0T3B0aW9uYWwobHQsRnQsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHFzPUZ0LnNrZWxldG9uO3FzJiYoY3QuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8ocXMuYm9uZVRleHR1cmU9PT1udWxsJiZxcy5jb21wdXRlQm9uZVRleHR1cmUoKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmUiLHFzLmJvbmVUZXh0dXJlLHEpLFlpLnNldFZhbHVlKGx0LCJib25lVGV4dHVyZVNpemUiLHFzLmJvbmVUZXh0dXJlU2l6ZSkpOllpLnNldE9wdGlvbmFsKGx0LHFzLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFFdCYmKEV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8RXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCkmJiR0LnVwZGF0ZShGdCxFdCx4dCxCbCksKEhsfHxtci5yZWNlaXZlU2hhZG93IT09RnQucmVjZWl2ZVNoYWRvdykmJihtci5yZWNlaXZlU2hhZG93PUZ0LnJlY2VpdmVTaGFkb3csWWkuc2V0VmFsdWUobHQsInJlY2VpdmVTaGFkb3ciLEZ0LnJlY2VpdmVTaGFkb3cpKSxIbCYmKFlpLnNldFZhbHVlKGx0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLG1yLm5lZWRzTGlnaHRzJiZjeChobSxWbCksVmUmJnh0LmZvZyYmTGUucmVmcmVzaEZvZ1VuaWZvcm1zKGhtLFZlKSxMZS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhobSx4dCxJLEIsb3QpLEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkpLHh0LmlzU2hhZGVyTWF0ZXJpYWwmJnh0LnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoQjAudXBsb2FkKGx0LG1yLnVuaWZvcm1zTGlzdCxobSxxKSx4dC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLHh0LmlzU3ByaXRlTWF0ZXJpYWwmJllpLnNldFZhbHVlKGx0LCJjZW50ZXIiLEZ0LmNlbnRlciksWWkuc2V0VmFsdWUobHQsIm1vZGVsVmlld01hdHJpeCIsRnQubW9kZWxWaWV3TWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibm9ybWFsTWF0cml4IixGdC5ub3JtYWxNYXRyaXgpLFlpLnNldFZhbHVlKGx0LCJtb2RlbE1hdHJpeCIsRnQubWF0cml4V29ybGQpLEJsfWZ1bmN0aW9uIGN4KEssZ3Qpe0suYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9Z3QsSy5saWdodFByb2JlLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9Z3QsSy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndH1mdW5jdGlvbiBycChLKXtyZXR1cm4gSy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEsuaXNNZXNoVG9vbk1hdGVyaWFsfHxLLmlzTWVzaFBob25nTWF0ZXJpYWx8fEsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Sy5pc1NoYWRvd01hdGVyaWFsfHxLLmlzU2hhZGVyTWF0ZXJpYWwmJksubGlnaHRzPT09ITB9dGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXM9ZnVuY3Rpb24oSyxndCxFdCl7ZHQuZ2V0KEsudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9Z3QsZHQuZ2V0KEsuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1FdDtsZXQgeHQ9ZHQuZ2V0KEspO3h0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcz0hMCx4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJih4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPUV0PT09dm9pZCAwLHh0Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEsudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxLLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxLLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQuX193ZWJnbEZyYW1lYnVmZmVyPWd0LEV0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPWd0PT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihLLGd0PTAsRXQ9MCl7Yj1LLHk9Z3QseD1FdDtsZXQgeHQ9ITA7aWYoSyl7bGV0IEtlPWR0LmdldChLKTtLZS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciE9PXZvaWQgMD8oWC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCkseHQ9ITEpOktlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9xLnNldHVwUmVuZGVyVGFyZ2V0KEspOktlLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmcS5yZWJpbmRUZXh0dXJlcyhLLGR0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBGdD1udWxsLFZlPSExLFVlPSExO2lmKEspe2xldCBLZT1LLnRleHR1cmU7KEtlLmlzRGF0YVRleHR1cmUzRHx8S2UuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoVWU9ITApO2xldCBYcj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO0suaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KEZ0PVhyW2d0XSxWZT0hMCk6Sy51c2VSZW5kZXJidWZmZXI/RnQ9ZHQuZ2V0KEspLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpGdD1YcixQLmNvcHkoSy52aWV3cG9ydCksay5jb3B5KEsuc2Npc3NvciksTz1LLnNjaXNzb3JUZXN0fWVsc2UgUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksTz1VO2lmKFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLEZ0KSYmY3QuZHJhd0J1ZmZlcnMmJnh0JiZYLmRyYXdCdWZmZXJzKEssRnQpLFgudmlld3BvcnQoUCksWC5zY2lzc29yKGspLFguc2V0U2Npc3NvclRlc3QoTyksVmUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKTtsdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStndCxLZS5fX3dlYmdsVGV4dHVyZSxFdCl9ZWxzZSBpZihVZSl7bGV0IEtlPWR0LmdldChLLnRleHR1cmUpLFhyPWd0fHwwO2x0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LEtlLl9fd2ViZ2xUZXh0dXJlLEV0fHwwLFhyKX1TPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSxVZSl7aWYoIShLJiZLLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCB0cj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEsuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJlVlIT09dm9pZCAwJiYodHI9dHJbVWVdKSx0cil7WC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHIpO3RyeXtsZXQgS2U9Sy50ZXh0dXJlLFhyPUtlLmZvcm1hdCxfcj1LZS50eXBlO2lmKFhyIT09UW8mJmJlLmNvbnZlcnQoWHIpIT09bHQuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBQcj1fcj09PUMxJiYoX3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Y3QuaXNXZWJHTDImJl90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZihfciE9PVpkJiZiZS5jb252ZXJ0KF9yKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOCkmJiEoX3I9PT1qZCYmKGN0LmlzV2ViR0wyfHxfdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fF90LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpKSYmIVByKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7cmV0dXJufWx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/Z3Q+PTAmJmd0PD1LLndpZHRoLXh0JiZFdD49MCYmRXQ8PUsuaGVpZ2h0LUZ0JiZsdC5yZWFkUGl4ZWxzKGd0LEV0LHh0LEZ0LGJlLmNvbnZlcnQoWHIpLGJlLmNvbnZlcnQoX3IpLFZlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgS2U9YiE9PW51bGw/ZHQuZ2V0KGIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLEtlKX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0PTApe2lmKGd0LmlzRnJhbWVidWZmZXJUZXh0dXJlIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7cmV0dXJufWxldCB4dD1NYXRoLnBvdygyLC1FdCksRnQ9TWF0aC5mbG9vcihndC5pbWFnZS53aWR0aCp4dCksVmU9TWF0aC5mbG9vcihndC5pbWFnZS5oZWlnaHQqeHQpO3Euc2V0VGV4dHVyZTJEKGd0LDApLGx0LmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsRXQsMCwwLEsueCxLLnksRnQsVmUpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEssZ3QsRXQseHQ9MCl7bGV0IEZ0PWd0LmltYWdlLndpZHRoLFZlPWd0LmltYWdlLmhlaWdodCxVZT1iZS5jb252ZXJ0KEV0LmZvcm1hdCksdHI9YmUuY29udmVydChFdC50eXBlKTtxLnNldFRleHR1cmUyRChFdCwwKSxsdC5waXhlbFN0b3JlaSgzNzQ0MCxFdC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEsRXQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyxFdC51bnBhY2tBbGlnbm1lbnQpLGd0LmlzRGF0YVRleHR1cmU/bHQudGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksRnQsVmUsVWUsdHIsZ3QuaW1hZ2UuZGF0YSk6Z3QuaXNDb21wcmVzc2VkVGV4dHVyZT9sdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksZ3QubWlwbWFwc1swXS53aWR0aCxndC5taXBtYXBzWzBdLmhlaWdodCxVZSxndC5taXBtYXBzWzBdLmRhdGEpOmx0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LFVlLHRyLGd0LmltYWdlKSx4dD09PTAmJkV0LmdlbmVyYXRlTWlwbWFwcyYmbHQuZ2VuZXJhdGVNaXBtYXAoMzU1MyksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0PTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBWZT1LLm1heC54LUsubWluLngrMSxVZT1LLm1heC55LUsubWluLnkrMSx0cj1LLm1heC56LUsubWluLnorMSxLZT1iZS5jb252ZXJ0KHh0LmZvcm1hdCksWHI9YmUuY29udmVydCh4dC50eXBlKSxfcjtpZih4dC5pc0RhdGFUZXh0dXJlM0QpcS5zZXRUZXh0dXJlM0QoeHQsMCksX3I9MzI4Nzk7ZWxzZSBpZih4dC5pc0RhdGFUZXh0dXJlMkRBcnJheSlxLnNldFRleHR1cmUyREFycmF5KHh0LDApLF9yPTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1sdC5waXhlbFN0b3JlaSgzNzQ0MCx4dC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEseHQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyx4dC51bnBhY2tBbGlnbm1lbnQpO2xldCBQcj1sdC5nZXRQYXJhbWV0ZXIoMzMxNCksam49bHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxucD1sdC5nZXRQYXJhbWV0ZXIoMzMxNiksdW09bHQuZ2V0UGFyYW1ldGVyKDMzMTUpLG1yPWx0LmdldFBhcmFtZXRlcigzMjg3NyksRmw9RXQuaXNDb21wcmVzc2VkVGV4dHVyZT9FdC5taXBtYXBzWzBdOkV0LmltYWdlO2x0LnBpeGVsU3RvcmVpKDMzMTQsRmwud2lkdGgpLGx0LnBpeGVsU3RvcmVpKDMyODc4LEZsLmhlaWdodCksbHQucGl4ZWxTdG9yZWkoMzMxNixLLm1pbi54KSxsdC5waXhlbFN0b3JlaSgzMzE1LEsubWluLnkpLGx0LnBpeGVsU3RvcmVpKDMyODc3LEsubWluLnopLEV0LmlzRGF0YVRleHR1cmV8fEV0LmlzRGF0YVRleHR1cmUzRD9sdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsLmRhdGEpOkV0LmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksbHQuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsRmwuZGF0YSkpOmx0LnRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsWHIsRmwpLGx0LnBpeGVsU3RvcmVpKDMzMTQsUHIpLGx0LnBpeGVsU3RvcmVpKDMyODc4LGpuKSxsdC5waXhlbFN0b3JlaSgzMzE2LG5wKSxsdC5waXhlbFN0b3JlaSgzMzE1LHVtKSxsdC5waXhlbFN0b3JlaSgzMjg3NyxtciksRnQ9PT0wJiZ4dC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKF9yKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihLKXtxLnNldFRleHR1cmUyRChLLDApLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLGI9bnVsbCxYLnJlc2V0KCksbnQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXJuLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIGdVPWNsYXNzIGV4dGVuZHMgcm57fTtnVS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgTzE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5kZW5zaXR5PXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IE8xKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtPMS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB6MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMubmVhcj1yLHRoaXMuZmFyPW59Y2xvbmUoKXtyZXR1cm4gbmV3IHoxKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt6MS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoci5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxyfX07cTAucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIGVtPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9TmwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxyLG4pe3QqPXRoaXMuc3RyaWRlLG4qPXIuc3RyaWRlO2ZvcihsZXQgaT0wLG89dGhpcy5zdHJpZGU7aTxvO2krKyl0aGlzLmFycmF5W3QraV09ci5hcnJheVtuK2ldO3JldHVybiB0aGlzfXNldCh0LHI9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsciksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IHI9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHIsdGhpcy5zdHJpZGUpO3JldHVybiBuLnNldFVzYWdlKHRoaXMudXNhZ2UpLG59b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07ZW0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIEFpPW5ldyBqLHRwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGk9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5kYXRhLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixBaS54LEFpLnksQWkueik7cmV0dXJuIHRoaXN9c2V0WCh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1yLHRoaXN9c2V0WSh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPXIsdGhpc31zZXRaKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09cix0aGlzfXNldFcodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1yLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxyLG4pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPXIsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJuIG5ldyBKZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihyKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IHRwKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6cixub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07dHAucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGlNPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aU0ucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIE4zLERQPW5ldyBqLEQzPW5ldyBqLE8zPW5ldyBqLHozPW5ldyBMdCxPUD1uZXcgTHQsS2ZlPW5ldyBNZSxMVj1uZXcgaix6UD1uZXcgaixrVj1uZXcgaixqdWU9bmV3IEx0LGR1dD1uZXcgTHQsWHVlPW5ldyBMdCxvTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLE4zPT09dm9pZCAwKXtOMz1uZXcgUGU7bGV0IHI9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksbj1uZXcgZW0ociw1KTtOMy5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxOMy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgdHAobiwzLDAsITEpKSxOMy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgdHAobiwyLDMsITEpKX10aGlzLmdlb21ldHJ5PU4zLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBpTSx0aGlzLmNlbnRlcj1uZXcgTHQoLjUsLjUpfXJheWNhc3QodCxyKXt0LmNhbWVyYT09PW51bGwmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxEMy5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksS2ZlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE8zLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmRDMubXVsdGlwbHlTY2FsYXIoLU8zLnopO2xldCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb24saSxvO24hPT0wJiYobz1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtsZXQgYT10aGlzLmNlbnRlcjtSVihMVi5zZXQoLS41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoelAuc2V0KC41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoa1Yuc2V0KC41LC41LDApLE8zLGEsRDMsaSxvKSxqdWUuc2V0KDAsMCksZHV0LnNldCgxLDApLFh1ZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVix6UCxrViwhMSxEUCk7aWYocz09PW51bGwmJihSVih6UC5zZXQoLS41LC41LDApLE8zLGEsRDMsaSxvKSxkdXQuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVixrVix6UCwhMSxEUCkscz09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhEUCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpEUC5jbG9uZSgpLHV2Om9pLmdldFVWKERQLExWLHpQLGtWLGp1ZSxkdXQsWHVlLG5ldyBMdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0LmNlbnRlciE9PXZvaWQgMCYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fTtvTS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7ZnVuY3Rpb24gUlYoZSx0LHIsbixpLG8pe3ozLnN1YlZlY3RvcnMoZSxyKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG4pLGkhPT12b2lkIDA/KE9QLng9byp6My54LWkqejMueSxPUC55PWkqejMueCtvKnozLnkpOk9QLmNvcHkoejMpLGUuY29weSh0KSxlLngrPU9QLngsZS55Kz1PUC55LGUuYXBwbHlNYXRyaXg0KEtmZSl9dmFyIE5WPW5ldyBqLCR1ZT1uZXcgaixfVT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtsZXQgcj10LmxldmVscztmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspe2xldCBvPXJbbl07dGhpcy5hZGRMZXZlbChvLm9iamVjdC5jbG9uZSgpLG8uZGlzdGFuY2UpfXJldHVybiB0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXN9YWRkTGV2ZWwodCxyPTApe3I9TWF0aC5hYnMocik7bGV0IG49dGhpcy5sZXZlbHMsaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEocjxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOnIsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfWdldEN1cnJlbnRMZXZlbCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9Z2V0T2JqZWN0Rm9yRGlzdGFuY2UodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ci5sZW5ndGg7bjxpJiYhKHQ8cltuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gcltuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQscil7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe05WLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOVik7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShpKS5yYXljYXN0KHQscil9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLmxldmVscztpZihyLmxlbmd0aD4xKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksJHVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgbj1OVi5kaXN0YW5jZVRvKCR1ZSkvdC56b29tO3JbMF0ub2JqZWN0LnZpc2libGU9ITA7bGV0IGksbztmb3IoaT0xLG89ci5sZW5ndGg7aTxvJiZuPj1yW2ldLmRpc3RhbmNlO2krKylyW2ktMV0ub2JqZWN0LnZpc2libGU9ITEscltpXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPWktMTtpPG87aSsrKXJbaV0ub2JqZWN0LnZpc2libGU9ITF9fXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7dGhpcy5hdXRvVXBkYXRlPT09ITEmJihyLm9iamVjdC5hdXRvVXBkYXRlPSExKSxyLm9iamVjdC5sZXZlbHM9W107bGV0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXtsZXQgYT1uW2ldO3Iub2JqZWN0LmxldmVscy5wdXNoKHtvYmplY3Q6YS5vYmplY3QudXVpZCxkaXN0YW5jZTphLmRpc3RhbmNlfSl9cmV0dXJuIHJ9fSxLdWU9bmV3IGosWnVlPW5ldyBlbixKdWU9bmV3IGVuLElncj1uZXcgaixRdWU9bmV3IE1lLGFNPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IE1lLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxyKXt0aGlzLnNrZWxldG9uPXQscj09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxyPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KHIpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShyKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgZW4scj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7dC54PXIuZ2V0WChuKSx0Lnk9ci5nZXRZKG4pLHQuej1yLmdldFoobiksdC53PXIuZ2V0VyhuKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLHIuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LHIpe2xldCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O1p1ZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSnVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksS3VlLmNvcHkocikuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksci5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBhPUp1ZS5nZXRDb21wb25lbnQobyk7aWYoYSE9PTApe2xldCBzPVp1ZS5nZXRDb21wb25lbnQobyk7UXVlLm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tzXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tzXSksci5hZGRTY2FsZWRWZWN0b3IoSWdyLmNvcHkoS3VlKS5hcHBseU1hdHJpeDQoUXVlKSxhKX19cmV0dXJuIHIuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07YU0ucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIHNNPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtzTS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBKZD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEsbj0xLGksbyxhLHMsbCxjPUxpLHU9TGksaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bn0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O0pkLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciB0aGU9bmV3IE1lLExncj1uZXcgTWUsbE09Y2xhc3N7Y29uc3RydWN0b3IodD1bXSxyPVtdKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9cix0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9aW5pdCgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjE2KSxyLmxlbmd0aD09PTApdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCBuPTAsaT10aGlzLmJvbmVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKX19Y2FsY3VsYXRlSW52ZXJzZXMoKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPW5ldyBNZTt0aGlzLmJvbmVzW3RdJiZuLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChuKX19cG9zZSgpe2ZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiZuLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiYobi5wYXJlbnQmJm4ucGFyZW50LmlzQm9uZT8obi5tYXRyaXguY29weShuLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbi5tYXRyaXgubXVsdGlwbHkobi5tYXRyaXhXb3JsZCkpOm4ubWF0cml4LmNvcHkobi5tYXRyaXhXb3JsZCksbi5tYXRyaXguZGVjb21wb3NlKG4ucG9zaXRpb24sbi5xdWF0ZXJuaW9uLG4uc2NhbGUpKX19dXBkYXRlKCl7bGV0IHQ9dGhpcy5ib25lcyxyPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXT90W29dLm1hdHJpeFdvcmxkOkxncjt0aGUubXVsdGlwbHlNYXRyaWNlcyhzLHJbb10pLHRoZS50b0FycmF5KG4sbyoxNil9aSE9PW51bGwmJihpLm5lZWRzVXBkYXRlPSEwKX1jbG9uZSgpe3JldHVybiBuZXcgbE0odGhpcy5ib25lcyx0aGlzLmJvbmVJbnZlcnNlcyl9Y29tcHV0ZUJvbmVUZXh0dXJlKCl7bGV0IHQ9TWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoKjQpO3Q9UmZlKHQpLHQ9TWF0aC5tYXgodCw0KTtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KHQqdCo0KTtyLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7bGV0IG49bmV3IEpkKHIsdCx0LFFvLGpkKTtyZXR1cm4gbi5uZWVkc1VwZGF0ZT0hMCx0aGlzLmJvbmVNYXRyaWNlcz1yLHRoaXMuYm9uZVRleHR1cmU9bix0aGlzLmJvbmVUZXh0dXJlU2l6ZT10LHRoaXN9Z2V0Qm9uZUJ5TmFtZSh0KXtmb3IobGV0IHI9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMuYm9uZXNbcl07aWYoaS5uYW1lPT09dClyZXR1cm4gaX19ZGlzcG9zZSgpe3RoaXMuYm9uZVRleHR1cmUhPT1udWxsJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LHIpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtsZXQgbz10LmJvbmVzW25dLGE9cltvXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxhPW5ldyBzTSksdGhpcy5ib25lcy5wdXNoKGEpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7bGV0IHI9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7bGV0IGE9cltpXTt0LmJvbmVzLnB1c2goYS51dWlkKTtsZXQgcz1uW2ldO3QuYm9uZUludmVyc2VzLnB1c2gocy50b0FycmF5KCkpfXJldHVybiB0fX0scm09Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbixpPTEpe3R5cGVvZiBuPT0ibnVtYmVyIiYmKGk9bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LHIsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cm0ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBlaGU9bmV3IE1lLHJoZT1uZXcgTWUsRFY9W10sRlA9bmV3IHRpLGk2PWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsciksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcm0obmV3IEZsb2F0MzJBcnJheShuKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxyKXtyLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLm1hdHJpeFdvcmxkLGk9dGhpcy5jb3VudDtpZihGUC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LEZQLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsRlAubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBvPTA7bzxpO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLGVoZSkscmhlLm11bHRpcGx5TWF0cmljZXMobixlaGUpLEZQLm1hdHJpeFdvcmxkPXJoZSxGUC5yYXljYXN0KHQsRFYpO2ZvcihsZXQgYT0wLHM9RFYubGVuZ3RoO2E8czthKyspe2xldCBsPURWW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsci5wdXNoKGwpfURWLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQscil7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcm0obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxyLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxyKXtyLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2k2LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIEdpPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O0dpLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBuaGU9bmV3IGosaWhlPW5ldyBqLG9oZT1uZXcgTWUsbXV0PW5ldyBKZixPVj1uZXcgWmYsY2g9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBHaSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCBpPTEsbz1yLmNvdW50O2k8bztpKyspbmhlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpLTEpLGloZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSksbltpXT1uW2ktMV0sbltpXSs9bmhlLmRpc3RhbmNlVG8oaWhlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgeGUobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLE9WLmNvcHkobi5ib3VuZGluZ1NwaGVyZSksT1YuYXBwbHlNYXRyaXg0KGkpLE9WLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKE9WKT09PSExKXJldHVybjtvaGUuY29weShpKS5pbnZlcnQoKSxtdXQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KG9oZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcyxjPW5ldyBqLHU9bmV3IGosaD1uZXcgaixmPW5ldyBqLHA9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZD1uLmluZGV4LF89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGQhPT1udWxsKXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oZC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtsZXQgQz1kLmdldFgoYiksUD1kLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxDKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxQKSxtdXQuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBPPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO088dC5uZWFyfHxPPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOk8scG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCB5PU1hdGgubWF4KDAsYS5zdGFydCkseD1NYXRoLm1pbihfLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBiPXksUz14LTE7YjxTO2IrPXApe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIrMSksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgUD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtQPHQubmVhcnx8UD50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpQLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19fWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2NoLnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIGFoZT1uZXcgaixzaGU9bmV3IGosQWE9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgaT0wLG89ci5jb3VudDtpPG87aSs9MilhaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLHNoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSsxKSxuW2ldPWk9PT0wPzA6bltpLTFdLG5baSsxXT1uW2ldK2FoZS5kaXN0YW5jZVRvKHNoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07QWEucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19O282LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBubT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtubS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgbGhlPW5ldyBNZSxyaHQ9bmV3IEpmLHpWPW5ldyBaZixGVj1uZXcgaixpbT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IFBlLHI9bmV3IG5tKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHpWLmNvcHkobi5ib3VuZGluZ1NwaGVyZSkselYuYXBwbHlNYXRyaXg0KGkpLHpWLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKHpWKT09PSExKXJldHVybjtsaGUuY29weShpKS5pbnZlcnQoKSxyaHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGxoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPW4uaW5kZXgsaD1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsYS5zdGFydCkscD1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBkPWYsZz1wO2Q8ZztkKyspe2xldCBfPWMuZ2V0WChkKTtGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsXyksY2hlKEZWLF8sbCxpLHQscix0aGlzKX19ZWxzZXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oaC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKUZWLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCxkKSxjaGUoRlYsZCxsLGksdCxyLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2ltLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBjaGUoZSx0LHIsbixpLG8sYSl7bGV0IHM9cmh0LmRpc3RhbmNlU3FUb1BvaW50KGUpO2lmKHM8cil7bGV0IGw9bmV3IGo7cmh0LmNsb3Nlc3RQb2ludFRvUG9pbnQoZSxsKSxsLmFwcGx5TWF0cml4NChuKTtsZXQgYz1pLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPGkubmVhcnx8Yz5pLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19dmFyIHlVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj1hIT09dm9pZCAwP2E6aWksdGhpcy5tYWdGaWx0ZXI9byE9PXZvaWQgMD9vOmlpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O3lVLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgdlU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzLmZvcm1hdD1uLHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt2VS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIGE2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoLGYpe3N1cGVyKG51bGwsYSxzLGwsYyx1LGksbyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTthNi5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgeFU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyl7c3VwZXIodCxyLG4saSxvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt4VS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBGMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTgsbj0wLGk9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6cix0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6aX0scj1NYXRoLm1heCgzLHIpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IGosdT1uZXcgTHQ7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PXI7aCsrLGYrPTMpe2xldCBwPW4raC9yKmk7Yy54PXQqTWF0aC5jb3MocCksYy55PXQqTWF0aC5zaW4ocCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLHUueD0oYVtmXS90KzEpLzIsdS55PShhW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1yO2grKylvLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRjEodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxvbT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9OCxvPTEsYT0hMSxzPTAsbD1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTpyLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6byxvcGVuRW5kZWQ6YSx0aGV0YVN0YXJ0OnMsdGhldGFMZW5ndGg6bH07bGV0IGM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pO2xldCB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9MCxnPVtdLF89bi8yLHk9MDt4KCksYT09PSExJiYodD4wJiZiKCEwKSxyPjAmJmIoITEpKSx0aGlzLnNldEluZGV4KHUpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiB4KCl7bGV0IFM9bmV3IGosQz1uZXcgaixQPTAsaz0oci10KS9uO2ZvcihsZXQgTz0wO088PW87TysrKXtsZXQgRD1bXSxCPU8vbyxJPUIqKHItdCkrdDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IFI9TC9pLEY9UipsK3Msej1NYXRoLnNpbihGKSxVPU1hdGguY29zKEYpO0MueD1JKnosQy55PS1CKm4rXyxDLno9SSpVLGgucHVzaChDLngsQy55LEMueiksUy5zZXQoeixrLFUpLm5vcm1hbGl6ZSgpLGYucHVzaChTLngsUy55LFMueikscC5wdXNoKFIsMS1CKSxELnB1c2goZCsrKX1nLnB1c2goRCl9Zm9yKGxldCBPPTA7TzxpO08rKylmb3IobGV0IEQ9MDtEPG87RCsrKXtsZXQgQj1nW0RdW09dLEk9Z1tEKzFdW09dLEw9Z1tEKzFdW08rMV0sUj1nW0RdW08rMV07dS5wdXNoKEIsSSxSKSx1LnB1c2goSSxMLFIpLFArPTZ9Yy5hZGRHcm91cCh5LFAsMCkseSs9UH1mdW5jdGlvbiBiKFMpe2xldCBDPWQsUD1uZXcgTHQsaz1uZXcgaixPPTAsRD1TPT09ITA/dDpyLEI9Uz09PSEwPzE6LTE7Zm9yKGxldCBMPTE7TDw9aTtMKyspaC5wdXNoKDAsXypCLDApLGYucHVzaCgwLEIsMCkscC5wdXNoKC41LC41KSxkKys7bGV0IEk9ZDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IEY9TC9pKmwrcyx6PU1hdGguY29zKEYpLFU9TWF0aC5zaW4oRik7ay54PUQqVSxrLnk9XypCLGsuej1EKnosaC5wdXNoKGsueCxrLnksay56KSxmLnB1c2goMCxCLDApLFAueD16Ki41Ky41LFAueT1VKi41KkIrLjUscC5wdXNoKFAueCxQLnkpLGQrK31mb3IobGV0IEw9MDtMPGk7TCsrKXtsZXQgUj1DK0wsRj1JK0w7Uz09PSEwP3UucHVzaChGLEYrMSxSKTp1LnB1c2goRisxLEYsUiksTys9M31jLmFkZEdyb3VwKHksTyxTPT09ITA/MToyKSx5Kz1PfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvbSh0LnJhZGl1c1RvcCx0LnJhZGl1c0JvdHRvbSx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sQjE9Y2xhc3MgZXh0ZW5kcyBvbXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49OCxpPTEsbz0hMSxhPTAscz1NYXRoLlBJKjIpe3N1cGVyKDAsdCxyLG4saSxvLGEscyksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OnIscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBCMSh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sdWg9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PVtdLHI9W10sbj0xLGk9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczp0LGluZGljZXM6cixyYWRpdXM6bixkZXRhaWw6aX07bGV0IG89W10sYT1bXTtzKGkpLGMobiksdSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLnNsaWNlKCksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpLGk9PT0wP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtmdW5jdGlvbiBzKHgpe2xldCBiPW5ldyBqLFM9bmV3IGosQz1uZXcgajtmb3IobGV0IFA9MDtQPHIubGVuZ3RoO1ArPTMpcChyW1ArMF0sYikscChyW1ArMV0sUykscChyW1ArMl0sQyksbChiLFMsQyx4KX1mdW5jdGlvbiBsKHgsYixTLEMpe2xldCBQPUMrMSxrPVtdO2ZvcihsZXQgTz0wO088PVA7TysrKXtrW09dPVtdO2xldCBEPXguY2xvbmUoKS5sZXJwKFMsTy9QKSxCPWIuY2xvbmUoKS5sZXJwKFMsTy9QKSxJPVAtTztmb3IobGV0IEw9MDtMPD1JO0wrKylMPT09MCYmTz09PVA/a1tPXVtMXT1EOmtbT11bTF09RC5jbG9uZSgpLmxlcnAoQixML0kpfWZvcihsZXQgTz0wO088UDtPKyspZm9yKGxldCBEPTA7RDwyKihQLU8pLTE7RCsrKXtsZXQgQj1NYXRoLmZsb29yKEQvMik7RCUyPT09MD8oZihrW09dW0IrMV0pLGYoa1tPKzFdW0JdKSxmKGtbT11bQl0pKTooZihrW09dW0IrMV0pLGYoa1tPKzFdW0IrMV0pLGYoa1tPKzFdW0JdKSl9fWZ1bmN0aW9uIGMoeCl7bGV0IGI9bmV3IGo7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz0zKWIueD1vW1MrMF0sYi55PW9bUysxXSxiLno9b1tTKzJdLGIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoeCksb1tTKzBdPWIueCxvW1MrMV09Yi55LG9bUysyXT1iLnp9ZnVuY3Rpb24gdSgpe2xldCB4PW5ldyBqO2ZvcihsZXQgYj0wO2I8by5sZW5ndGg7Yis9Myl7eC54PW9bYiswXSx4Lnk9b1tiKzFdLHguej1vW2IrMl07bGV0IFM9Xyh4KS8yL01hdGguUEkrLjUsQz15KHgpL01hdGguUEkrLjU7YS5wdXNoKFMsMS1DKX1kKCksaCgpfWZ1bmN0aW9uIGgoKXtmb3IobGV0IHg9MDt4PGEubGVuZ3RoO3grPTYpe2xldCBiPWFbeCswXSxTPWFbeCsyXSxDPWFbeCs0XSxQPU1hdGgubWF4KGIsUyxDKSxrPU1hdGgubWluKGIsUyxDKTtQPi45JiZrPC4xJiYoYjwuMiYmKGFbeCswXSs9MSksUzwuMiYmKGFbeCsyXSs9MSksQzwuMiYmKGFbeCs0XSs9MSkpfX1mdW5jdGlvbiBmKHgpe28ucHVzaCh4LngseC55LHgueil9ZnVuY3Rpb24gcCh4LGIpe2xldCBTPXgqMztiLng9dFtTKzBdLGIueT10W1MrMV0sYi56PXRbUysyXX1mdW5jdGlvbiBkKCl7bGV0IHg9bmV3IGosYj1uZXcgaixTPW5ldyBqLEM9bmV3IGosUD1uZXcgTHQsaz1uZXcgTHQsTz1uZXcgTHQ7Zm9yKGxldCBEPTAsQj0wO0Q8by5sZW5ndGg7RCs9OSxCKz02KXt4LnNldChvW0QrMF0sb1tEKzFdLG9bRCsyXSksYi5zZXQob1tEKzNdLG9bRCs0XSxvW0QrNV0pLFMuc2V0KG9bRCs2XSxvW0QrN10sb1tEKzhdKSxQLnNldChhW0IrMF0sYVtCKzFdKSxrLnNldChhW0IrMl0sYVtCKzNdKSxPLnNldChhW0IrNF0sYVtCKzVdKSxDLmNvcHkoeCkuYWRkKGIpLmFkZChTKS5kaXZpZGVTY2FsYXIoMyk7bGV0IEk9XyhDKTtnKFAsQiswLHgsSSksZyhrLEIrMixiLEkpLGcoTyxCKzQsUyxJKX19ZnVuY3Rpb24gZyh4LGIsUyxDKXtDPDAmJngueD09PTEmJihhW2JdPXgueC0xKSxTLng9PT0wJiZTLno9PT0wJiYoYVtiXT1DLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gXyh4KXtyZXR1cm4gTWF0aC5hdGFuMih4LnosLXgueCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gTWF0aC5hdGFuMigteC55LE1hdGguc3FydCh4LngqeC54K3gueip4LnopKX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgdWgodC52ZXJ0aWNlcyx0LmluZGljZXMsdC5yYWRpdXMsdC5kZXRhaWxzKX19LEgxPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uLG89Wy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxhPVszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XTtzdXBlcihvLGEsdCxyKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBIMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxCVj1uZXcgaixIVj1uZXcgaixndXQ9bmV3IGosVlY9bmV3IG9pLHM2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsLHI9MSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dCx0aHJlc2hvbGRBbmdsZTpyfSx0IT09bnVsbCl7bGV0IGk9TWF0aC5wb3coMTAsNCksbz1NYXRoLmNvcyhQMSpyKSxhPXQuZ2V0SW5kZXgoKSxzPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGw9YT9hLmNvdW50OnMuY291bnQsYz1bMCwwLDBdLHU9WyJhIiwiYiIsImMiXSxoPW5ldyBBcnJheSgzKSxmPXt9LHA9W107Zm9yKGxldCBkPTA7ZDxsO2QrPTMpe2E/KGNbMF09YS5nZXRYKGQpLGNbMV09YS5nZXRYKGQrMSksY1syXT1hLmdldFgoZCsyKSk6KGNbMF09ZCxjWzFdPWQrMSxjWzJdPWQrMik7bGV0e2E6ZyxiOl8sYzp5fT1WVjtpZihnLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzBdKSxfLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzFdKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzJdKSxWVi5nZXROb3JtYWwoZ3V0KSxoWzBdPWAke01hdGgucm91bmQoZy54KmkpfSwke01hdGgucm91bmQoZy55KmkpfSwke01hdGgucm91bmQoZy56KmkpfWAsaFsxXT1gJHtNYXRoLnJvdW5kKF8ueCppKX0sJHtNYXRoLnJvdW5kKF8ueSppKX0sJHtNYXRoLnJvdW5kKF8ueippKX1gLGhbMl09YCR7TWF0aC5yb3VuZCh5LngqaSl9LCR7TWF0aC5yb3VuZCh5LnkqaSl9LCR7TWF0aC5yb3VuZCh5LnoqaSl9YCwhKGhbMF09PT1oWzFdfHxoWzFdPT09aFsyXXx8aFsyXT09PWhbMF0pKWZvcihsZXQgeD0wO3g8Mzt4Kyspe2xldCBiPSh4KzEpJTMsUz1oW3hdLEM9aFtiXSxQPVZWW3VbeF1dLGs9VlZbdVtiXV0sTz1gJHtTfV8ke0N9YCxEPWAke0N9XyR7U31gO0QgaW4gZiYmZltEXT8oZ3V0LmRvdChmW0RdLm5vcm1hbCk8PW8mJihwLnB1c2goUC54LFAueSxQLnopLHAucHVzaChrLngsay55LGsueikpLGZbRF09bnVsbCk6TyBpbiBmfHwoZltPXT17aW5kZXgwOmNbeF0saW5kZXgxOmNbYl0sbm9ybWFsOmd1dC5jbG9uZSgpfSl9fWZvcihsZXQgZCBpbiBmKWlmKGZbZF0pe2xldHtpbmRleDA6ZyxpbmRleDE6X309ZltkXTtCVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZyksSFYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLF8pLHAucHVzaChCVi54LEJWLnksQlYueikscC5wdXNoKEhWLngsSFYueSxIVi56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShwLDMpKX19fSxmcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLHIpfWdldFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiByfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIHJ9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgcj1bXSxuLGk9dGhpcy5nZXRQb2ludCgwKSxvPTA7ci5wdXNoKDApO2ZvcihsZXQgYT0xO2E8PXQ7YSsrKW49dGhpcy5nZXRQb2ludChhL3QpLG8rPW4uZGlzdGFuY2VUbyhpKSxyLnB1c2gobyksaT1uO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1yLHJ9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxyKXtsZXQgbj10aGlzLmdldExlbmd0aHMoKSxpPTAsbz1uLmxlbmd0aCxhO3I/YT1yOmE9dCpuW28tMV07bGV0IHM9MCxsPW8tMSxjO2Zvcig7czw9bDspaWYoaT1NYXRoLmZsb29yKHMrKGwtcykvMiksYz1uW2ldLWEsYzwwKXM9aSsxO2Vsc2UgaWYoYz4wKWw9aS0xO2Vsc2V7bD1pO2JyZWFrfWlmKGk9bCxuW2ldPT09YSlyZXR1cm4gaS8oby0xKTtsZXQgdT1uW2ldLGY9bltpKzFdLXUscD0oYS11KS9mO3JldHVybihpK3ApLyhvLTEpfWdldFRhbmdlbnQodCxyKXtsZXQgaT10LTFlLTQsbz10KzFlLTQ7aTwwJiYoaT0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQoaSkscz10aGlzLmdldFBvaW50KG8pLGw9cnx8KGEuaXNWZWN0b3IyP25ldyBMdDpuZXcgaik7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxyKXtsZXQgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixyKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQscil7bGV0IG49bmV3IGosaT1bXSxvPVtdLGE9W10scz1uZXcgaixsPW5ldyBNZTtmb3IobGV0IHA9MDtwPD10O3ArKyl7bGV0IGQ9cC90O2lbcF09dGhpcy5nZXRUYW5nZW50QXQoZCxuZXcgail9b1swXT1uZXcgaixhWzBdPW5ldyBqO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhpWzBdLngpLGg9TWF0aC5hYnMoaVswXS55KSxmPU1hdGguYWJzKGlbMF0ueik7dTw9YyYmKGM9dSxuLnNldCgxLDAsMCkpLGg8PWMmJihjPWgsbi5zZXQoMCwxLDApKSxmPD1jJiZuLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoaVswXSxuKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sb1swXSk7Zm9yKGxldCBwPTE7cDw9dDtwKyspe2lmKG9bcF09b1twLTFdLmNsb25lKCksYVtwXT1hW3AtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhpW3AtMV0saVtwXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgZD1NYXRoLmFjb3MoWm8oaVtwLTFdLmRvdChpW3BdKSwtMSwxKSk7b1twXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsZCkpfWFbcF0uY3Jvc3NWZWN0b3JzKGlbcF0sb1twXSl9aWYocj09PSEwKXtsZXQgcD1NYXRoLmFjb3MoWm8ob1swXS5kb3Qob1t0XSksLTEsMSkpO3AvPXQsaVswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKHA9LXApO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKW9bZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhpW2RdLHAqZCkpLGFbZF0uY3Jvc3NWZWN0b3JzKGlbZF0sb1tkXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0sVjE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MSxpPTEsbz0wLGE9TWF0aC5QSSoyLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1yLHRoaXMueFJhZGl1cz1uLHRoaXMueVJhZGl1cz1pLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQsaT1NYXRoLlBJKjIsbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPWk7Zm9yKDtvPmk7KW8tPWk7bzxOdW1iZXIuRVBTSUxPTiYmKGE/bz0wOm89aSksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFhJiYobz09PWk/bz0taTpvPW8taSk7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLHA9Yy10aGlzLmFZO2w9Zip1LXAqaCt0aGlzLmFYLGM9ZipoK3AqdSt0aGlzLmFZfXJldHVybiBuLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O1YxLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbDY9Y2xhc3MgZXh0ZW5kcyBWMXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSl7c3VwZXIodCxyLG4sbixpLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtsNi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiBEaHQoKXtsZXQgZT0wLHQ9MCxyPTAsbj0wO2Z1bmN0aW9uIGkobyxhLHMsbCl7ZT1vLHQ9cyxyPS0zKm8rMyphLTIqcy1sLG49MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7aShhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyx1LGgpe2xldCBmPShhLW8pL2MtKHMtbykvKGMrdSkrKHMtYSkvdSxwPShzLWEpL3UtKGwtYSkvKHUraCkrKGwtcykvaDtmKj11LHAqPXUsaShhLHMsZixwKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm8scz1hKm87cmV0dXJuIGUrdCpvK3IqYStuKnN9fX12YXIgVVY9bmV3IGosX3V0PW5ldyBEaHQseXV0PW5ldyBEaHQsdnV0PW5ldyBEaHQsYzY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdLHI9ITEsbj0iY2VudHJpcGV0YWwiLGk9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPXIsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnBvaW50cyxvPWkubGVuZ3RoLGE9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQscz1NYXRoLmZsb29yKGEpLGw9YS1zO3RoaXMuY2xvc2VkP3MrPXM+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKHMpL28pKzEpKm86bD09PTAmJnM9PT1vLTEmJihzPW8tMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fHM+MD9jPWlbKHMtMSklb106KFVWLnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYz1VVik7bGV0IGg9aVtzJW9dLGY9aVsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/dT1pWyhzKzIpJW9dOihVVi5zdWJWZWN0b3JzKGlbby0xXSxpW28tMl0pLmFkZChpW28tMV0pLHU9VVYpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBwPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxkPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCkscCksZz1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLHApLF89TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxwKTtnPDFlLTQmJihnPTEpLGQ8MWUtNCYmKGQ9ZyksXzwxZS00JiYoXz1nKSxfdXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCxkLGcsXykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGQsZyxfKX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoX3V0LmluaXRDYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCx0aGlzLnRlbnNpb24pLHl1dC5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBuLnNldChfdXQuY2FsYyhsKSx5dXQuY2FsYyhsKSx2dXQuY2FsYyhsKSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCByPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5wb2ludHNbcl07dC5wb2ludHMucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBqKCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07YzYucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiB1aGUoZSx0LHIsbixpKXtsZXQgbz0obi10KSouNSxhPShpLXIpKi41LHM9ZSplLGw9ZSpzO3JldHVybigyKnItMipuK28rYSkqbCsoLTMqciszKm4tMipvLWEpKnMrbyplK3J9ZnVuY3Rpb24ga2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqdH1mdW5jdGlvbiBSZ3IoZSx0KXtyZXR1cm4gMiooMS1lKSplKnR9ZnVuY3Rpb24gTmdyKGUsdCl7cmV0dXJuIGUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4pe3JldHVybiBrZ3IoZSx0KStSZ3IoZSxyKStOZ3IoZSxuKX1mdW5jdGlvbiBEZ3IoZSx0KXtsZXQgcj0xLWU7cmV0dXJuIHIqcipyKnR9ZnVuY3Rpb24gT2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiAzKnIqciplKnR9ZnVuY3Rpb24gemdyKGUsdCl7cmV0dXJuIDMqKDEtZSkqZSplKnR9ZnVuY3Rpb24gRmdyKGUsdCl7cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gV1AoZSx0LHIsbixpKXtyZXR1cm4gRGdyKGUsdCkrT2dyKGUscikremdyKGUsbikrRmdyKGUsaSl9dmFyIGNNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQsaT1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIG4uc2V0KFdQKHQsaS54LG8ueCxhLngscy54KSxXUCh0LGkueSxvLnksYS55LHMueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07Y00ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgdTY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGosbj1uZXcgaixpPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1uLHRoaXMudjM9aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpLFdQKHQsaS56LG8ueixhLnoscy56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt1Ni5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgVTE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCxyPW5ldyBMdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yO3JldHVybiB0PT09MT9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LHIpe3JldHVybiB0aGlzLmdldFBvaW50KHQscil9Z2V0VGFuZ2VudCh0LHIpe2xldCBuPXJ8fG5ldyBMdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1UxLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1yfWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHVNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW59Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07dU0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIGhNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSksR1AodCxpLnosby56LGEueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07aE0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBmTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz0oaS5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1pW2E9PT0wP2E6YS0xXSxjPWlbYV0sdT1pW2E+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOmErMV0saD1pW2E+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOmErMl07cmV0dXJuIG4uc2V0KHVoZShzLGwueCxjLngsdS54LGgueCksdWhlKHMsbC55LGMueSx1LnksaC55KSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2gobmV3IEx0KCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpc319O2ZNLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBPaHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bDYsQ2F0bXVsbFJvbUN1cnZlMzpjNixDdWJpY0JlemllckN1cnZlOmNNLEN1YmljQmV6aWVyQ3VydmUzOnU2LEVsbGlwc2VDdXJ2ZTpWMSxMaW5lQ3VydmU6VTEsTGluZUN1cnZlMzpiVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp1TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6aE0sU3BsaW5lQ3VydmU6Zk19KSx3VT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCkscj10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMocil8fHRoaXMuY3VydmVzLnB1c2gobmV3IFUxKHIsdCkpfWdldFBvaW50KHQscil7bGV0IG49dCp0aGlzLmdldExlbmd0aCgpLGk9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPGkubGVuZ3RoOyl7aWYoaVtvXT49bil7bGV0IGE9aVtvXS1uLHM9dGhpcy5jdXJ2ZXNbb10sbD1zLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLWEvbDtyZXR1cm4gcy5nZXRQb2ludEF0KGMscil9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLHI9MDtmb3IobGV0IG49MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtuPGk7bisrKXIrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChyKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIucHVzaChyWzBdKSxyfWdldFBvaW50cyh0PTEyKXtsZXQgcj1bXSxuO2ZvcihsZXQgaT0wLG89dGhpcy5jdXJ2ZXM7aTxvLmxlbmd0aDtpKyspe2xldCBhPW9baV0scz1hJiZhLmlzRWxsaXBzZUN1cnZlP3QqMjphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQsbD1hLmdldFBvaW50cyhzKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtuJiZuLmVxdWFscyh1KXx8KHIucHVzaCh1KSxuPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIubGVuZ3RoPjEmJiFyW3IubGVuZ3RoLTFdLmVxdWFscyhyWzBdKSYmci5wdXNoKHJbMF0pLHJ9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmN1cnZlc1tyXTt0LmN1cnZlcy5wdXNoKGkudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2gobmV3IE9odFtpLnR5cGVdKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0scTE9Y2xhc3MgZXh0ZW5kcyB3VXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEx0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgcj0xLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmxpbmVUbyh0W3JdLngsdFtyXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31saW5lVG8odCxyKXtsZXQgbj1uZXcgVTEodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe2xldCBvPW5ldyB1TSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe2xldCBzPW5ldyBjTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpLG5ldyBMdChvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IHI9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxuPW5ldyBmTShyKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCtzLHIrbCxuLGksbyxhKSx0aGlzfWFic2FyYyh0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LHIsbixuLGksbyxhKSx0aGlzfWVsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxyK3UsbixpLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LHIsbixpLG8sYSxzLGwpe2xldCBjPW5ldyBWMSh0LHIsbixpLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sS2M9Y2xhc3MgZXh0ZW5kcyBxMXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7bjxpO24rKylyW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiByfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmhvbGVzW3JdO3QuaG9sZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCByPTAsbj10LmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmhvbGVzW3JdO3RoaXMuaG9sZXMucHVzaChuZXcgcTEoKS5mcm9tSlNPTihpKSl9cmV0dXJuIHRoaXN9fSxCZ3I9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGUsdCxyPTIpe2xldCBuPXQmJnQubGVuZ3RoLGk9bj90WzBdKnI6ZS5sZW5ndGgsbz1aZmUoZSwwLGksciwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2xldCBzLGwsYyx1LGgsZixwO2lmKG4mJihvPUdncihlLHQsbyxyKSksZS5sZW5ndGg+ODAqcil7cz1jPWVbMF0sbD11PWVbMV07Zm9yKGxldCBkPXI7ZDxpO2QrPXIpaD1lW2RdLGY9ZVtkKzFdLGg8cyYmKHM9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7cD1NYXRoLm1heChjLXMsdS1sKSxwPXAhPT0wPzEvcDowfXJldHVybiBoNihvLGEscixzLGwscCksYX19O2Z1bmN0aW9uIFpmZShlLHQscixuLGkpe2xldCBvLGE7aWYoaT09PWUwcihlLHQscixuKT4wKWZvcihvPXQ7bzxyO28rPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtlbHNlIGZvcihvPXItbjtvPj10O28tPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtyZXR1cm4gYSYmWlUoYSxhLm5leHQpJiYocDYoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gRzAoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgcj1lLG47ZG8gaWYobj0hMSwhci5zdGVpbmVyJiYoWlUocixyLm5leHQpfHxhaShyLnByZXYscixyLm5leHQpPT09MCkpe2lmKHA2KHIpLHI9dD1yLnByZXYscj09PXIubmV4dClicmVhaztuPSEwfWVsc2Ugcj1yLm5leHQ7d2hpbGUobnx8ciE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGg2KGUsdCxyLG4saSxvLGEpe2lmKCFlKXJldHVybjshYSYmbyYmJGdyKGUsbixpLG8pO2xldCBzPWUsbCxjO2Zvcig7ZS5wcmV2IT09ZS5uZXh0Oyl7aWYobD1lLnByZXYsYz1lLm5leHQsbz9WZ3IoZSxuLGksbyk6SGdyKGUpKXt0LnB1c2gobC5pL3IpLHQucHVzaChlLmkvciksdC5wdXNoKGMuaS9yKSxwNihlKSxlPWMubmV4dCxzPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PXMpe2E/YT09PTE/KGU9VWdyKEcwKGUpLHQsciksaDYoZSx0LHIsbixpLG8sMikpOmE9PT0yJiZxZ3IoZSx0LHIsbixpLG8pOmg2KEcwKGUpLHQscixuLGksbywxKTticmVha319fWZ1bmN0aW9uIEhncihlKXtsZXQgdD1lLnByZXYscj1lLG49ZS5uZXh0O2lmKGFpKHQscixuKT49MClyZXR1cm4hMTtsZXQgaT1lLm5leHQubmV4dDtmb3IoO2khPT1lLnByZXY7KXtpZihIMyh0LngsdC55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmYWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBWZ3IoZSx0LHIsbil7bGV0IGk9ZS5wcmV2LG89ZSxhPWUubmV4dDtpZihhaShpLG8sYSk+PTApcmV0dXJuITE7bGV0IHM9aS54PG8ueD9pLng8YS54P2kueDphLng6by54PGEueD9vLng6YS54LGw9aS55PG8ueT9pLnk8YS55P2kueTphLnk6by55PGEueT9vLnk6YS55LGM9aS54Pm8ueD9pLng+YS54P2kueDphLng6by54PmEueD9vLng6YS54LHU9aS55Pm8ueT9pLnk+YS55P2kueTphLnk6by55PmEueT9vLnk6YS55LGg9bmh0KHMsbCx0LHIsbiksZj1uaHQoYyx1LHQscixuKSxwPWUucHJldlosZD1lLm5leHRaO2Zvcig7cCYmcC56Pj1oJiZkJiZkLno8PWY7KXtpZihwIT09ZS5wcmV2JiZwIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxwLngscC55KSYmYWkocC5wcmV2LHAscC5uZXh0KT49MHx8KHA9cC5wcmV2WixkIT09ZS5wcmV2JiZkIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxkLngsZC55KSYmYWkoZC5wcmV2LGQsZC5uZXh0KT49MCkpcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1mOyl7aWYoZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIFVncihlLHQscil7bGV0IG49ZTtkb3tsZXQgaT1uLnByZXYsbz1uLm5leHQubmV4dDshWlUoaSxvKSYmSmZlKGksbixuLm5leHQsbykmJmY2KGksbykmJmY2KG8saSkmJih0LnB1c2goaS5pL3IpLHQucHVzaChuLmkvciksdC5wdXNoKG8uaS9yKSxwNihuKSxwNihuLm5leHQpLG49ZT1vKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIEcwKG4pfWZ1bmN0aW9uIHFncihlLHQscixuLGksbyl7bGV0IGE9ZTtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJkpncihhLHMpKXtsZXQgbD1RZmUoYSxzKTthPUcwKGEsYS5uZXh0KSxsPUcwKGwsbC5uZXh0KSxoNihhLHQscixuLGksbyksaDYobCx0LHIsbixpLG8pO3JldHVybn1zPXMubmV4dH1hPWEubmV4dH13aGlsZShhIT09ZSl9ZnVuY3Rpb24gR2dyKGUsdCxyLG4pe2xldCBpPVtdLG8sYSxzLGwsYztmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qbixsPW88YS0xP3RbbysxXSpuOmUubGVuZ3RoLGM9WmZlKGUscyxsLG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGkucHVzaChaZ3IoYykpO2ZvcihpLnNvcnQoV2dyKSxvPTA7bzxpLmxlbmd0aDtvKyspWWdyKGlbb10scikscj1HMChyLHIubmV4dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gV2dyKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24gWWdyKGUsdCl7aWYodD1qZ3IoZSx0KSx0KXtsZXQgcj1RZmUodCxlKTtHMCh0LHQubmV4dCksRzAocixyLm5leHQpfX1mdW5jdGlvbiBqZ3IoZSx0KXtsZXQgcj10LG49ZS54LGk9ZS55LG89LTEvMCxhO2Rve2lmKGk8PXIueSYmaT49ci5uZXh0LnkmJnIubmV4dC55IT09ci55KXtsZXQgZj1yLngrKGktci55KSooci5uZXh0Lngtci54KS8oci5uZXh0Lnktci55KTtpZihmPD1uJiZmPm8pe2lmKG89ZixmPT09bil7aWYoaT09PXIueSlyZXR1cm4gcjtpZihpPT09ci5uZXh0LnkpcmV0dXJuIHIubmV4dH1hPXIueDxyLm5leHQueD9yOnIubmV4dH19cj1yLm5leHR9d2hpbGUociE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKG49PT1vKXJldHVybiBhO2xldCBzPWEsbD1hLngsYz1hLnksdT0xLzAsaDtyPWE7ZG8gbj49ci54JiZyLng+PWwmJm4hPT1yLngmJkgzKGk8Yz9uOm8saSxsLGMsaTxjP286bixpLHIueCxyLnkpJiYoaD1NYXRoLmFicyhpLXIueSkvKG4tci54KSxmNihyLGUpJiYoaDx1fHxoPT09dSYmKHIueD5hLnh8fHIueD09PWEueCYmWGdyKGEscikpKSYmKGE9cix1PWgpKSxyPXIubmV4dDt3aGlsZShyIT09cyk7cmV0dXJuIGF9ZnVuY3Rpb24gWGdyKGUsdCl7cmV0dXJuIGFpKGUucHJldixlLHQucHJldik8MCYmYWkodC5uZXh0LGUsZS5uZXh0KTwwfWZ1bmN0aW9uICRncihlLHQscixuKXtsZXQgaT1lO2RvIGkuej09PW51bGwmJihpLno9bmh0KGkueCxpLnksdCxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dDt3aGlsZShpIT09ZSk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxLZ3IoaSl9ZnVuY3Rpb24gS2dyKGUpe2xldCB0LHIsbixpLG8sYSxzLGwsYz0xO2Rve2ZvcihyPWUsZT1udWxsLG89bnVsbCxhPTA7cjspe2ZvcihhKyssbj1yLHM9MCx0PTA7dDxjJiYocysrLG49bi5uZXh0WiwhIW4pO3QrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspcyE9PTAmJihsPT09MHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksbz9vLm5leHRaPWk6ZT1pLGkucHJldlo9byxvPWk7cj1ufW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmh0KGUsdCxyLG4saSl7cmV0dXJuIGU9MzI3NjcqKGUtcikqaSx0PTMyNzY3Kih0LW4pKmksZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIFpncihlKXtsZXQgdD1lLHI9ZTtkbyh0Lng8ci54fHx0Lng9PT1yLngmJnQueTxyLnkpJiYocj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSDMoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4oaS1hKSoodC1zKS0oZS1hKSooby1zKT49MCYmKGUtYSkqKG4tcyktKHItYSkqKHQtcyk+PTAmJihyLWEpKihvLXMpLShpLWEpKihuLXMpPj0wfWZ1bmN0aW9uIEpncihlLHQpe3JldHVybiBlLm5leHQuaSE9PXQuaSYmZS5wcmV2LmkhPT10LmkmJiFRZ3IoZSx0KSYmKGY2KGUsdCkmJmY2KHQsZSkmJnQwcihlLHQpJiYoYWkoZS5wcmV2LGUsdC5wcmV2KXx8YWkoZSx0LnByZXYsdCkpfHxaVShlLHQpJiZhaShlLnByZXYsZSxlLm5leHQpPjAmJmFpKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gYWkoZSx0LHIpe3JldHVybih0LnktZS55KSooci54LXQueCktKHQueC1lLngpKihyLnktdC55KX1mdW5jdGlvbiBaVShlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBKZmUoZSx0LHIsbil7bGV0IGk9R1YoYWkoZSx0LHIpKSxvPUdWKGFpKGUsdCxuKSksYT1HVihhaShyLG4sZSkpLHM9R1YoYWkocixuLHQpKTtyZXR1cm4hIShpIT09byYmYSE9PXN8fGk9PT0wJiZxVihlLHIsdCl8fG89PT0wJiZxVihlLG4sdCl8fGE9PT0wJiZxVihyLGUsbil8fHM9PT0wJiZxVihyLHQsbikpfWZ1bmN0aW9uIHFWKGUsdCxyKXtyZXR1cm4gdC54PD1NYXRoLm1heChlLngsci54KSYmdC54Pj1NYXRoLm1pbihlLngsci54KSYmdC55PD1NYXRoLm1heChlLnksci55KSYmdC55Pj1NYXRoLm1pbihlLnksci55KX1mdW5jdGlvbiBHVihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9ZnVuY3Rpb24gUWdyKGUsdCl7bGV0IHI9ZTtkb3tpZihyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZKZmUocixyLm5leHQsZSx0KSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gZjYoZSx0KXtyZXR1cm4gYWkoZS5wcmV2LGUsZS5uZXh0KTwwP2FpKGUsdCxlLm5leHQpPj0wJiZhaShlLGUucHJldix0KT49MDphaShlLHQsZS5wcmV2KTwwfHxhaShlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIHQwcihlLHQpe2xldCByPWUsbj0hMSxpPShlLngrdC54KS8yLG89KGUueSt0LnkpLzI7ZG8gci55Pm8hPXIubmV4dC55Pm8mJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihvLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHQ7d2hpbGUociE9PWUpO3JldHVybiBufWZ1bmN0aW9uIFFmZShlLHQpe2xldCByPW5ldyBpaHQoZS5pLGUueCxlLnkpLG49bmV3IGlodCh0LmksdC54LHQueSksaT1lLm5leHQsbz10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLG59ZnVuY3Rpb24gaGhlKGUsdCxyLG4pe2xldCBpPW5ldyBpaHQoZSx0LHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBwNihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uIGlodChlLHQscil7dGhpcy5pPWUsdGhpcy54PXQsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gZTByKGUsdCxyLG4pe2xldCBpPTA7Zm9yKGxldCBvPXQsYT1yLW47bzxyO28rPW4paSs9KGVbYV0tZVtvXSkqKGVbbysxXStlW2ErMV0pLGE9bztyZXR1cm4gaX12YXIgWmM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IHI9dC5sZW5ndGgsbj0wO2ZvcihsZXQgaT1yLTEsbz0wO288cjtpPW8rKyluKz10W2ldLngqdFtvXS55LXRbb10ueCp0W2ldLnk7cmV0dXJuIG4qLjV9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBaYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxyKXtsZXQgbj1bXSxpPVtdLG89W107ZmhlKHQpLHBoZShuLHQpO2xldCBhPXQubGVuZ3RoO3IuZm9yRWFjaChmaGUpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKWkucHVzaChhKSxhKz1yW2xdLmxlbmd0aCxwaGUobixyW2xdKTtsZXQgcz1CZ3IudHJpYW5ndWxhdGUobixpKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIGZoZShlKXtsZXQgdD1lLmxlbmd0aDt0PjImJmVbdC0xXS5lcXVhbHMoZVswXSkmJmUucG9wKCl9ZnVuY3Rpb24gcGhlKGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wdXNoKHRbcl0ueCksZS5wdXNoKHRbcl0ueSl9dmFyIGhoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCguNSwuNSksbmV3IEx0KC0uNSwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOnJ9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgbj10aGlzLGk9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc107YShjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gYShzKXtsZXQgbD1bXSxjPXIuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9yLmN1cnZlU2VnbWVudHM6MTIsdT1yLnN0ZXBzIT09dm9pZCAwP3Iuc3RlcHM6MSxoPXIuZGVwdGghPT12b2lkIDA/ci5kZXB0aDoxLGY9ci5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ci5iZXZlbEVuYWJsZWQ6ITAscD1yLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP3IuYmV2ZWxUaGlja25lc3M6LjIsZD1yLmJldmVsU2l6ZSE9PXZvaWQgMD9yLmJldmVsU2l6ZTpwLS4xLGc9ci5iZXZlbE9mZnNldCE9PXZvaWQgMD9yLmJldmVsT2Zmc2V0OjAsXz1yLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ci5iZXZlbFNlZ21lbnRzOjMseT1yLmV4dHJ1ZGVQYXRoLHg9ci5VVkdlbmVyYXRvciE9PXZvaWQgMD9yLlVWR2VuZXJhdG9yOnIwcjtyLmFtb3VudCE9PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxoPXIuYW1vdW50KTtsZXQgYixTPSExLEMsUCxrLE87eSYmKGI9eS5nZXRTcGFjZWRQb2ludHModSksUz0hMCxmPSExLEM9eS5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFA9bmV3IGosaz1uZXcgaixPPW5ldyBqKSxmfHwoXz0wLHA9MCxkPTAsZz0wKTtsZXQgRD1zLmV4dHJhY3RQb2ludHMoYyksQj1ELnNoYXBlLEk9RC5ob2xlcztpZighWmMuaXNDbG9ja1dpc2UoQikpe0I9Qi5yZXZlcnNlKCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO1pjLmlzQ2xvY2tXaXNlKGh0KSYmKElbcV09aHQucmV2ZXJzZSgpKX19bGV0IFI9WmMudHJpYW5ndWxhdGVTaGFwZShCLEkpLEY9Qjtmb3IobGV0IHE9MCxwdD1JLmxlbmd0aDtxPHB0O3ErKyl7bGV0IGh0PUlbcV07Qj1CLmNvbmNhdChodCl9ZnVuY3Rpb24geihxLHB0LGh0KXtyZXR1cm4gcHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IikscHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihodCkuYWRkKHEpfWxldCBVPUIubGVuZ3RoLFc9Ui5sZW5ndGg7ZnVuY3Rpb24gWihxLHB0LGh0KXtsZXQgd3Qsa3QsaWUsZWU9cS54LXB0LngsTGU9cS55LXB0LnksYXI9aHQueC1xLngsZnI9aHQueS1xLnksdHQ9ZWUqZWUrTGUqTGUsJD1lZSpmci1MZSphcjtpZihNYXRoLmFicygkKT5OdW1iZXIuRVBTSUxPTil7bGV0IEl0PU1hdGguc3FydCh0dCksJHQ9TWF0aC5zcXJ0KGFyKmFyK2ZyKmZyKSxoZT1wdC54LUxlL0l0LFR0PXB0LnkrZWUvSXQsYmU9aHQueC1mci8kdCxudD1odC55K2FyLyR0LEN0PSgoYmUtaGUpKmZyLShudC1UdCkqYXIpLyhlZSpmci1MZSphcik7d3Q9aGUrZWUqQ3QtcS54LGt0PVR0K0xlKkN0LXEueTtsZXQgV3Q9d3Qqd3Qra3Qqa3Q7aWYoV3Q8PTIpcmV0dXJuIG5ldyBMdCh3dCxrdCk7aWU9TWF0aC5zcXJ0KFd0LzIpfWVsc2V7bGV0IEl0PSExO2VlPk51bWJlci5FUFNJTE9OP2FyPk51bWJlci5FUFNJTE9OJiYoSXQ9ITApOmVlPC1OdW1iZXIuRVBTSUxPTj9hcjwtTnVtYmVyLkVQU0lMT04mJihJdD0hMCk6TWF0aC5zaWduKExlKT09PU1hdGguc2lnbihmcikmJihJdD0hMCksSXQ/KHd0PS1MZSxrdD1lZSxpZT1NYXRoLnNxcnQodHQpKTood3Q9ZWUsa3Q9TGUsaWU9TWF0aC5zcXJ0KHR0LzIpKX1yZXR1cm4gbmV3IEx0KHd0L2llLGt0L2llKX1sZXQgcnQ9W107Zm9yKGxldCBxPTAscHQ9Ri5sZW5ndGgsaHQ9cHQtMSx3dD1xKzE7cTxwdDtxKyssaHQrKyx3dCsrKWh0PT09cHQmJihodD0wKSx3dD09PXB0JiYod3Q9MCkscnRbcV09WihGW3FdLEZbaHRdLEZbd3RdKTtsZXQgb3Q9W10sc3QsU3Q9cnQuY29uY2F0KCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO3N0PVtdO2ZvcihsZXQgd3Q9MCxrdD1odC5sZW5ndGgsaWU9a3QtMSxlZT13dCsxO3d0PGt0O3d0KyssaWUrKyxlZSsrKWllPT09a3QmJihpZT0wKSxlZT09PWt0JiYoZWU9MCksc3Rbd3RdPVooaHRbd3RdLGh0W2llXSxodFtlZV0pO290LnB1c2goc3QpLFN0PVN0LmNvbmNhdChzdCl9Zm9yKGxldCBxPTA7cTxfO3ErKyl7bGV0IHB0PXEvXyxodD1wKk1hdGguY29zKHB0Kk1hdGguUEkvMiksd3Q9ZCpNYXRoLnNpbihwdCpNYXRoLlBJLzIpK2c7Zm9yKGxldCBrdD0wLGllPUYubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT16KEZba3RdLHJ0W2t0XSx3dCk7X3QoZWUueCxlZS55LC1odCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtfdChmci54LGZyLnksLWh0KX19fWxldCBidD1kK2c7Zm9yKGxldCBxPTA7cTxVO3ErKyl7bGV0IHB0PWY/eihCW3FdLFN0W3FdLGJ0KTpCW3FdO1M/KGsuY29weShDLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LngpLFAuY29weShDLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIocHQueSksTy5jb3B5KGJbMF0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChwdC54LHB0LnksMCl9Zm9yKGxldCBxPTE7cTw9dTtxKyspZm9yKGxldCBwdD0wO3B0PFU7cHQrKyl7bGV0IGh0PWY/eihCW3B0XSxTdFtwdF0sYnQpOkJbcHRdO1M/KGsuY29weShDLm5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LngpLFAuY29weShDLmJpbm9ybWFsc1txXSkubXVsdGlwbHlTY2FsYXIoaHQueSksTy5jb3B5KGJbcV0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChodC54LGh0LnksaC91KnEpfWZvcihsZXQgcT1fLTE7cT49MDtxLS0pe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSxoK2h0KX1mb3IobGV0IGt0PTAsaWU9SS5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPUlba3RdO3N0PW90W2t0XTtmb3IobGV0IExlPTAsYXI9ZWUubGVuZ3RoO0xlPGFyO0xlKyspe2xldCBmcj16KGVlW0xlXSxzdFtMZV0sd3QpO1M/X3QoZnIueCxmci55K2JbdS0xXS55LGJbdS0xXS54K2h0KTpfdChmci54LGZyLnksaCtodCl9fX1NdCgpLGx0KCk7ZnVuY3Rpb24gTXQoKXtsZXQgcT1pLmxlbmd0aC8zO2lmKGYpe2xldCBwdD0wLGh0PVUqcHQ7Zm9yKGxldCB3dD0wO3d0PFc7d3QrKyl7bGV0IGt0PVJbd3RdO2N0KGt0WzJdK2h0LGt0WzFdK2h0LGt0WzBdK2h0KX1wdD11K18qMixodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFswXStodCxrdFsxXStodCxrdFsyXStodCl9fWVsc2V7Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzJdLGh0WzFdLGh0WzBdKX1mb3IobGV0IHB0PTA7cHQ8VztwdCsrKXtsZXQgaHQ9UltwdF07Y3QoaHRbMF0rVSp1LGh0WzFdK1UqdSxodFsyXStVKnUpfX1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDApfWZ1bmN0aW9uIGx0KCl7bGV0IHE9aS5sZW5ndGgvMyxwdD0wO0t0KEYscHQpLHB0Kz1GLmxlbmd0aDtmb3IobGV0IGh0PTAsd3Q9SS5sZW5ndGg7aHQ8d3Q7aHQrKyl7bGV0IGt0PUlbaHRdO0t0KGt0LHB0KSxwdCs9a3QubGVuZ3RofW4uYWRkR3JvdXAocSxpLmxlbmd0aC8zLXEsMSl9ZnVuY3Rpb24gS3QocSxwdCl7bGV0IGh0PXEubGVuZ3RoO2Zvcig7LS1odD49MDspe2xldCB3dD1odCxrdD1odC0xO2t0PDAmJihrdD1xLmxlbmd0aC0xKTtmb3IobGV0IGllPTAsZWU9dStfKjI7aWU8ZWU7aWUrKyl7bGV0IExlPVUqaWUsYXI9VSooaWUrMSksZnI9cHQrd3QrTGUsdHQ9cHQra3QrTGUsJD1wdCtrdCthcixJdD1wdCt3dCthcjtYKGZyLHR0LCQsSXQpfX19ZnVuY3Rpb24gX3QocSxwdCxodCl7bC5wdXNoKHEpLGwucHVzaChwdCksbC5wdXNoKGh0KX1mdW5jdGlvbiBjdChxLHB0LGh0KXtldChxKSxldChwdCksZXQoaHQpO2xldCB3dD1pLmxlbmd0aC8zLGt0PXguZ2VuZXJhdGVUb3BVVihuLGksd3QtMyx3dC0yLHd0LTEpO2R0KGt0WzBdKSxkdChrdFsxXSksZHQoa3RbMl0pfWZ1bmN0aW9uIFgocSxwdCxodCx3dCl7ZXQocSksZXQocHQpLGV0KHd0KSxldChwdCksZXQoaHQpLGV0KHd0KTtsZXQga3Q9aS5sZW5ndGgvMyxpZT14LmdlbmVyYXRlU2lkZVdhbGxVVihuLGksa3QtNixrdC0zLGt0LTIsa3QtMSk7ZHQoaWVbMF0pLGR0KGllWzFdKSxkdChpZVszXSksZHQoaWVbMV0pLGR0KGllWzJdKSxkdChpZVszXSl9ZnVuY3Rpb24gZXQocSl7aS5wdXNoKGxbcSozKzBdKSxpLnB1c2gobFtxKjMrMV0pLGkucHVzaChsW3EqMysyXSl9ZnVuY3Rpb24gZHQocSl7by5wdXNoKHEueCksby5wdXNoKHEueSl9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXMsbj10aGlzLnBhcmFtZXRlcnMub3B0aW9ucztyZXR1cm4gbjByKHIsbix0KX1zdGF0aWMgZnJvbUpTT04odCxyKXtsZXQgbj1bXTtmb3IobGV0IG89MCxhPXQuc2hhcGVzLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW3Quc2hhcGVzW29dXTtuLnB1c2gocyl9bGV0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiBpIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKSxuZXcgaGgobix0Lm9wdGlvbnMpfX0scjByPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKGUsdCxyLG4saSl7bGV0IG89dFtyKjNdLGE9dFtyKjMrMV0scz10W24qM10sbD10W24qMysxXSxjPXRbaSozXSx1PXRbaSozKzFdO3JldHVybltuZXcgTHQobyxhKSxuZXcgTHQocyxsKSxuZXcgTHQoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihlLHQscixuLGksbyl7bGV0IGE9dFtyKjNdLHM9dFtyKjMrMV0sbD10W3IqMysyXSxjPXRbbiozXSx1PXRbbiozKzFdLGg9dFtuKjMrMl0sZj10W2kqM10scD10W2kqMysxXSxkPXRbaSozKzJdLGc9dFtvKjNdLF89dFtvKjMrMV0seT10W28qMysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTxNYXRoLmFicyhhLWMpP1tuZXcgTHQoYSwxLWwpLG5ldyBMdChjLDEtaCksbmV3IEx0KGYsMS1kKSxuZXcgTHQoZywxLXkpXTpbbmV3IEx0KHMsMS1sKSxuZXcgTHQodSwxLWgpLG5ldyBMdChwLDEtZCksbmV3IEx0KF8sMS15KV19fTtmdW5jdGlvbiBuMHIoZSx0LHIpe2lmKHIuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1lW25dO3Iuc2hhcGVzLnB1c2goby51dWlkKX1lbHNlIHIuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdC5leHRydWRlUGF0aCE9PXZvaWQgMCYmKHIub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxyfXZhciBHMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPVstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sbz1bMCwxMSw1LDAsNSwxLDAsMSw3LDAsNywxMCwwLDEwLDExLDEsNSw5LDUsMTEsNCwxMSwxMCwyLDEwLDcsNiw3LDEsOCwzLDksNCwzLDQsMiwzLDIsNiwzLDYsOCwzLDgsOSw0LDksNSwyLDQsMTEsNiwyLDEwLDgsNiw3LDksOCwxXTtzdXBlcihpLG8sdCxyKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEcxKHQucmFkaXVzLHQuZGV0YWlsKX19LFcxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bbmV3IEx0KDAsLjUpLG5ldyBMdCguNSwwKSxuZXcgTHQoMCwtLjUpXSxyPTEyLG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6cixwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxyPU1hdGguZmxvb3IociksaT1abyhpLDAsTWF0aC5QSSoyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPVtdLHU9MS9yLGg9bmV3IGosZj1uZXcgTHQscD1uZXcgaixkPW5ldyBqLGc9bmV3IGosXz0wLHk9MDtmb3IobGV0IHg9MDt4PD10Lmxlbmd0aC0xO3grKylzd2l0Y2goeCl7Y2FzZSAwOl89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZy5jb3B5KHApLHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KTticmVhaztjYXNlIHQubGVuZ3RoLTE6bC5wdXNoKGcueCxnLnksZy56KTticmVhaztkZWZhdWx0Ol89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZC5jb3B5KHApLHAueCs9Zy54LHAueSs9Zy55LHAueis9Zy56LHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KSxnLmNvcHkoZCl9Zm9yKGxldCB4PTA7eDw9cjt4Kyspe2xldCBiPW4reCp1KmksUz1NYXRoLnNpbihiKSxDPU1hdGguY29zKGIpO2ZvcihsZXQgUD0wO1A8PXQubGVuZ3RoLTE7UCsrKXtoLng9dFtQXS54KlMsaC55PXRbUF0ueSxoLno9dFtQXS54KkMsYS5wdXNoKGgueCxoLnksaC56KSxmLng9eC9yLGYueT1QLyh0Lmxlbmd0aC0xKSxzLnB1c2goZi54LGYueSk7bGV0IGs9bFszKlArMF0qUyxPPWxbMypQKzFdLEQ9bFszKlArMF0qQztjLnB1c2goayxPLEQpfX1mb3IobGV0IHg9MDt4PHI7eCsrKWZvcihsZXQgYj0wO2I8dC5sZW5ndGgtMTtiKyspe2xldCBTPWIreCp0Lmxlbmd0aCxDPVMsUD1TK3QubGVuZ3RoLGs9Uyt0Lmxlbmd0aCsxLE89UysxO28ucHVzaChDLFAsTyksby5wdXNoKGssTyxQKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHMsMikpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShjLDMpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX0sVzA9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLGk9WzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVzAodC5yYWRpdXMsdC5kZXRhaWwpfX0sWTE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PS41LHI9MSxuPTgsaT0xLG89MCxhPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOnIsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LG49TWF0aC5tYXgoMyxuKSxpPU1hdGgubWF4KDEsaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD10LGY9KHItdCkvaSxwPW5ldyBqLGQ9bmV3IEx0O2ZvcihsZXQgZz0wO2c8PWk7ZysrKXtmb3IobGV0IF89MDtfPD1uO18rKyl7bGV0IHk9bytfL24qYTtwLng9aCpNYXRoLmNvcyh5KSxwLnk9aCpNYXRoLnNpbih5KSxsLnB1c2gocC54LHAueSxwLnopLGMucHVzaCgwLDAsMSksZC54PShwLngvcisxKS8yLGQueT0ocC55L3IrMSkvMix1LnB1c2goZC54LGQueSl9aCs9Zn1mb3IobGV0IGc9MDtnPGk7ZysrKXtsZXQgXz1nKihuKzEpO2ZvcihsZXQgeT0wO3k8bjt5Kyspe2xldCB4PXkrXyxiPXgsUz14K24rMSxDPXgrbisyLFA9eCsxO3MucHVzaChiLFMsUCkscy5wdXNoKFMsQyxQKX19dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCgwLC41KSxuZXcgTHQoLS41LC0uNSksbmV3IEx0KC41LC0uNSldKSxyPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOnJ9O2xldCBuPVtdLGk9W10sbz1bXSxhPVtdLHM9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAocyxsLHUpLHMrPWwsbD0wO3RoaXMuc2V0SW5kZXgobiksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9aS5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhyKSxwPWYuc2hhcGUsZD1mLmhvbGVzO1pjLmlzQ2xvY2tXaXNlKHApPT09ITEmJihwPXAucmV2ZXJzZSgpKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107WmMuaXNDbG9ja1dpc2UoeCk9PT0hMCYmKGRbX109eC5yZXZlcnNlKCkpfWxldCBnPVpjLnRyaWFuZ3VsYXRlU2hhcGUocCxkKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107cD1wLmNvbmNhdCh4KX1mb3IobGV0IF89MCx5PXAubGVuZ3RoO188eTtfKyspe2xldCB4PXBbX107aS5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxhLnB1c2goeC54LHgueSl9Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1nW19dLGI9eFswXStoLFM9eFsxXStoLEM9eFsyXStoO24ucHVzaChiLFMsQyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLHI9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gaTByKHIsdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBpPTAsbz10LnNoYXBlcy5sZW5ndGg7aTxvO2krKyl7bGV0IGE9clt0LnNoYXBlc1tpXV07bi5wdXNoKGEpfXJldHVybiBuZXcgWTAobix0LmN1cnZlU2VnbWVudHMpfX07ZnVuY3Rpb24gaTByKGUsdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2xldCBpPWVbcl07dC5zaGFwZXMucHVzaChpLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChlLnV1aWQpO3JldHVybiB0fXZhciBqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTMyLG49MTYsaT0wLG89TWF0aC5QSSoyLGE9MCxzPU1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6bixwaGlTdGFydDppLHBoaUxlbmd0aDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfSxyPU1hdGgubWF4KDMsTWF0aC5mbG9vcihyKSksbj1NYXRoLm1heCgyLE1hdGguZmxvb3IobikpO2xldCBsPU1hdGgubWluKGErcyxNYXRoLlBJKSxjPTAsdT1bXSxoPW5ldyBqLGY9bmV3IGoscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PD1uO3krKyl7bGV0IHg9W10sYj15L24sUz0wO3k9PTAmJmE9PTA/Uz0uNS9yOnk9PW4mJmw9PU1hdGguUEkmJihTPS0uNS9yKTtmb3IobGV0IEM9MDtDPD1yO0MrKyl7bGV0IFA9Qy9yO2gueD0tdCpNYXRoLmNvcyhpK1AqbykqTWF0aC5zaW4oYStiKnMpLGgueT10Kk1hdGguY29zKGErYipzKSxoLno9dCpNYXRoLnNpbihpK1AqbykqTWF0aC5zaW4oYStiKnMpLGQucHVzaChoLngsaC55LGgueiksZi5jb3B5KGgpLm5vcm1hbGl6ZSgpLGcucHVzaChmLngsZi55LGYueiksXy5wdXNoKFArUywxLWIpLHgucHVzaChjKyspfXUucHVzaCh4KX1mb3IobGV0IHk9MDt5PG47eSsrKWZvcihsZXQgeD0wO3g8cjt4Kyspe2xldCBiPXVbeV1beCsxXSxTPXVbeV1beF0sQz11W3krMV1beF0sUD11W3krMV1beCsxXTsoeSE9PTB8fGE+MCkmJnAucHVzaChiLFMsUCksKHkhPT1uLTF8fGw8TWF0aC5QSSkmJnAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajAodC5yYWRpdXMsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5waGlTdGFydCx0LnBoaUxlbmd0aCx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPVsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0saT1bMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdO3N1cGVyKG4saSx0LHIpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajEodC5yYWRpdXMsdC5kZXRhaWwpfX0sWDE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0uNCxuPTgsaT02LG89TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIscmFkaWFsU2VnbWVudHM6bix0dWJ1bGFyU2VnbWVudHM6aSxhcmM6b30sbj1NYXRoLmZsb29yKG4pLGk9TWF0aC5mbG9vcihpKTtsZXQgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBqLGg9bmV3IGosZj1uZXcgajtmb3IobGV0IHA9MDtwPD1uO3ArKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7bGV0IGc9ZC9pKm8sXz1wL24qTWF0aC5QSSoyO2gueD0odCtyKk1hdGguY29zKF8pKSpNYXRoLmNvcyhnKSxoLnk9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5zaW4oZyksaC56PXIqTWF0aC5zaW4oXykscy5wdXNoKGgueCxoLnksaC56KSx1Lng9dCpNYXRoLmNvcyhnKSx1Lnk9dCpNYXRoLnNpbihnKSxmLnN1YlZlY3RvcnMoaCx1KS5ub3JtYWxpemUoKSxsLnB1c2goZi54LGYueSxmLnopLGMucHVzaChkL2kpLGMucHVzaChwL24pfWZvcihsZXQgcD0xO3A8PW47cCsrKWZvcihsZXQgZD0xO2Q8PWk7ZCsrKXtsZXQgZz0oaSsxKSpwK2QtMSxfPShpKzEpKihwLTEpK2QtMSx5PShpKzEpKihwLTEpK2QseD0oaSsxKSpwK2Q7YS5wdXNoKGcsXyx4KSxhLnB1c2goXyx5LHgpfXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQudHViZSx0LnJhZGlhbFNlZ21lbnRzLHQudHVidWxhclNlZ21lbnRzLHQuYXJjKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj02NCxpPTgsbz0yLGE9Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6cix0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6byxxOmF9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD1uZXcgaixmPW5ldyBqLHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89bmV3IGoseT1uZXcgajtmb3IobGV0IGI9MDtiPD1uOysrYil7bGV0IFM9Yi9uKm8qTWF0aC5QSSoyO3goUyxvLGEsdCxwKSx4KFMrLjAxLG8sYSx0LGQpLF8uc3ViVmVjdG9ycyhkLHApLHkuYWRkVmVjdG9ycyhkLHApLGcuY3Jvc3NWZWN0b3JzKF8seSkseS5jcm9zc1ZlY3RvcnMoZyxfKSxnLm5vcm1hbGl6ZSgpLHkubm9ybWFsaXplKCk7Zm9yKGxldCBDPTA7Qzw9aTsrK0Mpe2xldCBQPUMvaSpNYXRoLlBJKjIsaz0tcipNYXRoLmNvcyhQKSxPPXIqTWF0aC5zaW4oUCk7aC54PXAueCsoayp5LngrTypnLngpLGgueT1wLnkrKGsqeS55K08qZy55KSxoLno9cC56KyhrKnkueitPKmcueiksbC5wdXNoKGgueCxoLnksaC56KSxmLnN1YlZlY3RvcnMoaCxwKS5ub3JtYWxpemUoKSxjLnB1c2goZi54LGYueSxmLnopLHUucHVzaChiL24pLHUucHVzaChDL2kpfX1mb3IobGV0IGI9MTtiPD1uO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztzLnB1c2goQyxQLE8pLHMucHVzaChQLGssTyl9dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSk7ZnVuY3Rpb24geChiLFMsQyxQLGspe2xldCBPPU1hdGguY29zKGIpLEQ9TWF0aC5zaW4oYiksQj1DL1MqYixJPU1hdGguY29zKEIpO2sueD1QKigyK0kpKi41Kk8say55PVAqKDIrSSkqRCouNSxrLno9UCpNYXRoLnNpbihCKSouNX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgJDEodC5yYWRpdXMsdC50dWJlLHQudHVidWxhclNlZ21lbnRzLHQucmFkaWFsU2VnbWVudHMsdC5wLHQucSl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IGhNKG5ldyBqKC0xLC0xLDApLG5ldyBqKC0xLDEsMCksbmV3IGooMSwxLDApKSxyPTY0LG49MSxpPTgsbz0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOnIscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6b307bGV0IGE9dC5jb21wdXRlRnJlbmV0RnJhbWVzKHIsbyk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzLHRoaXMubm9ybWFscz1hLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9YS5iaW5vcm1hbHM7bGV0IHM9bmV3IGosbD1uZXcgaixjPW5ldyBMdCx1PW5ldyBqLGg9W10sZj1bXSxwPVtdLGQ9W107ZygpLHRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHAsMikpO2Z1bmN0aW9uIGcoKXtmb3IobGV0IGI9MDtiPHI7YisrKV8oYik7XyhvPT09ITE/cjowKSx4KCkseSgpfWZ1bmN0aW9uIF8oYil7dT10LmdldFBvaW50QXQoYi9yLHUpO2xldCBTPWEubm9ybWFsc1tiXSxDPWEuYmlub3JtYWxzW2JdO2ZvcihsZXQgUD0wO1A8PWk7UCsrKXtsZXQgaz1QL2kqTWF0aC5QSSoyLE89TWF0aC5zaW4oayksRD0tTWF0aC5jb3Moayk7bC54PUQqUy54K08qQy54LGwueT1EKlMueStPKkMueSxsLno9RCpTLnorTypDLnosbC5ub3JtYWxpemUoKSxmLnB1c2gobC54LGwueSxsLnopLHMueD11LngrbipsLngscy55PXUueStuKmwueSxzLno9dS56K24qbC56LGgucHVzaChzLngscy55LHMueil9fWZ1bmN0aW9uIHkoKXtmb3IobGV0IGI9MTtiPD1yO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztkLnB1c2goQyxQLE8pLGQucHVzaChQLGssTyl9fWZ1bmN0aW9uIHgoKXtmb3IobGV0IGI9MDtiPD1yO2IrKylmb3IobGV0IFM9MDtTPD1pO1MrKyljLng9Yi9yLGMueT1TL2kscC5wdXNoKGMueCxjLnkpfX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSzEobmV3IE9odFt0LnBhdGgudHlwZV0oKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX0sZDY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW51bGwpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtnZW9tZXRyeTp0fSx0IT09bnVsbCl7bGV0IHI9W10sbj1uZXcgU2V0LGk9bmV3IGosbz1uZXcgajtpZih0LmluZGV4IT09bnVsbCl7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9dC5pbmRleCxsPXQuZ3JvdXBzO2wubGVuZ3RoPT09MCYmKGw9W3tzdGFydDowLGNvdW50OnMuY291bnQsbWF0ZXJpYWxJbmRleDowfV0pO2ZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1OysrYyl7bGV0IGg9bFtjXSxmPWguc3RhcnQscD1oLmNvdW50O2ZvcihsZXQgZD1mLGc9ZitwO2Q8ZztkKz0zKWZvcihsZXQgXz0wO188MztfKyspe2xldCB5PXMuZ2V0WChkK18pLHg9cy5nZXRYKGQrKF8rMSklMyk7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEseSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEseCksZGhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19fWVsc2V7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGw9YS5jb3VudC8zO3M8bDtzKyspZm9yKGxldCBjPTA7YzwzO2MrKyl7bGV0IHU9MypzK2MsaD0zKnMrKGMrMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSxkaGUoaSxvLG4pPT09ITAmJihyLnB1c2goaS54LGkueSxpLnopLHIucHVzaChvLngsby55LG8ueikpfX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKX19fTtmdW5jdGlvbiBkaGUoZSx0LHIpe2xldCBuPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWAsaT1gJHt0Lnh9LCR7dC55fSwke3Quen0tJHtlLnh9LCR7ZS55fSwke2Uuen1gO3JldHVybiByLmhhcyhuKT09PSEwfHxyLmhhcyhpKT09PSEwPyExOihyLmFkZChuLGkpLCEwKX12YXIgbWhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJveEdlb21ldHJ5OlFmLEJveEJ1ZmZlckdlb21ldHJ5OlFmLENpcmNsZUdlb21ldHJ5OkYxLENpcmNsZUJ1ZmZlckdlb21ldHJ5OkYxLENvbmVHZW9tZXRyeTpCMSxDb25lQnVmZmVyR2VvbWV0cnk6QjEsQ3lsaW5kZXJHZW9tZXRyeTpvbSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om9tLERvZGVjYWhlZHJvbkdlb21ldHJ5OkgxLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkgxLEVkZ2VzR2VvbWV0cnk6czYsRXh0cnVkZUdlb21ldHJ5OmhoLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpoaCxJY29zYWhlZHJvbkdlb21ldHJ5OkcxLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6RzEsTGF0aGVHZW9tZXRyeTpXMSxMYXRoZUJ1ZmZlckdlb21ldHJ5OlcxLE9jdGFoZWRyb25HZW9tZXRyeTpXMCxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VzAsUGxhbmVHZW9tZXRyeTpWMCxQbGFuZUJ1ZmZlckdlb21ldHJ5OlYwLFBvbHloZWRyb25HZW9tZXRyeTp1aCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6dWgsUmluZ0dlb21ldHJ5OlkxLFJpbmdCdWZmZXJHZW9tZXRyeTpZMSxTaGFwZUdlb21ldHJ5OlkwLFNoYXBlQnVmZmVyR2VvbWV0cnk6WTAsU3BoZXJlR2VvbWV0cnk6ajAsU3BoZXJlQnVmZmVyR2VvbWV0cnk6ajAsVGV0cmFoZWRyb25HZW9tZXRyeTpqMSxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmoxLFRvcnVzR2VvbWV0cnk6WDEsVG9ydXNCdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0tub3RHZW9tZXRyeTokMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTokMSxUdWJlR2VvbWV0cnk6SzEsVHViZUJ1ZmZlckdlb21ldHJ5OksxLFdpcmVmcmFtZUdlb21ldHJ5OmQ2fSksbTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O202LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBwTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtwTS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDt2YXIgZzY9Y2xhc3MgZXh0ZW5kcyBwTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBabygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5pb3I9KDErLjQqcikvKDEtLjQqcil9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBuZSgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBuZSgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgbmUoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtfNi5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt5Ni5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO3ZhciB2Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07djYucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPU82LHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3g2LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2I2LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgdzY9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt3Ni5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIG8wcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxTaGFkb3dNYXRlcmlhbDptNixTcHJpdGVNYXRlcmlhbDppTSxSYXdTaGFkZXJNYXRlcmlhbDpVMCxTaGFkZXJNYXRlcmlhbDpsaCxQb2ludHNNYXRlcmlhbDpubSxNZXNoUGh5c2ljYWxNYXRlcmlhbDpnNixNZXNoU3RhbmRhcmRNYXRlcmlhbDpwTSxNZXNoUGhvbmdNYXRlcmlhbDpfNixNZXNoVG9vbk1hdGVyaWFsOnk2LE1lc2hOb3JtYWxNYXRlcmlhbDp2NixNZXNoTGFtYmVydE1hdGVyaWFsOng2LE1lc2hEZXB0aE1hdGVyaWFsOmVNLE1lc2hEaXN0YW5jZU1hdGVyaWFsOnJNLE1lc2hCYXNpY01hdGVyaWFsOnNoLE1lc2hNYXRjYXBNYXRlcmlhbDpiNixMaW5lRGFzaGVkTWF0ZXJpYWw6dzYsTGluZUJhc2ljTWF0ZXJpYWw6R2ksTWF0ZXJpYWw6cWl9KSxZbj17YXJyYXlTbGljZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIFluLmlzVHlwZWRBcnJheShlKT9uZXcgZS5jb25zdHJ1Y3RvcihlLnN1YmFycmF5KHQsciE9PXZvaWQgMD9yOmUubGVuZ3RoKSk6ZS5zbGljZSh0LHIpfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiFlfHwhciYmZS5jb25zdHJ1Y3Rvcj09PXQ/ZTp0eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD09Im51bWJlciI/bmV3IHQoZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLG8pe3JldHVybiBlW2ldLWVbb119bGV0IHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7Zm9yKGxldCBpPTA7aSE9PXI7KytpKW5baV09aTtyZXR1cm4gbi5zb3J0KHQpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPW5ldyBlLmNvbnN0cnVjdG9yKG4pO2ZvcihsZXQgbz0wLGE9MDthIT09bjsrK28pe2xldCBzPXJbb10qdDtmb3IobGV0IGw9MDtsIT09dDsrK2wpaVthKytdPWVbcytsXX1yZXR1cm4gaX0sZmxhdHRlbkpTT046ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9MSxvPWVbMF07Zm9yKDtvIT09dm9pZCAwJiZvW25dPT09dm9pZCAwOylvPWVbaSsrXTtpZihvPT09dm9pZCAwKXJldHVybjtsZXQgYT1vW25dO2lmKGEhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShhKSlkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaC5hcHBseShyLGEpKSxvPWVbaSsrXTt3aGlsZShvIT09dm9pZCAwKTtlbHNlIGlmKGEudG9BcnJheSE9PXZvaWQgMClkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLGEudG9BcnJheShyLHIubGVuZ3RoKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaChhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCl9LHN1YmNsaXA6ZnVuY3Rpb24oZSx0LHIsbixpPTMwKXtsZXQgbz1lLmNsb25lKCk7by5uYW1lPXQ7bGV0IGE9W107Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXtsZXQgYz1vLnRyYWNrc1tsXSx1PWMuZ2V0VmFsdWVTaXplKCksaD1bXSxmPVtdO2ZvcihsZXQgcD0wO3A8Yy50aW1lcy5sZW5ndGg7KytwKXtsZXQgZD1jLnRpbWVzW3BdKmk7aWYoIShkPHJ8fGQ+PW4pKXtoLnB1c2goYy50aW1lc1twXSk7Zm9yKGxldCBnPTA7Zzx1OysrZylmLnB1c2goYy52YWx1ZXNbcCp1K2ddKX19aC5sZW5ndGghPT0wJiYoYy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkoaCxjLnRpbWVzLmNvbnN0cnVjdG9yKSxjLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkoZixjLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGMpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpcz5vLnRyYWNrc1tsXS50aW1lc1swXSYmKHM9by50cmFja3NbbF0udGltZXNbMF0pO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClvLnRyYWNrc1tsXS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbihlLHQ9MCxyPWUsbj0zMCl7bjw9MCYmKG49MzApO2xldCBpPXIudHJhY2tzLmxlbmd0aCxvPXQvbjtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgcz1yLnRyYWNrc1thXSxsPXMuVmFsdWVUeXBlTmFtZTtpZihsPT09ImJvb2wifHxsPT09InN0cmluZyIpY29udGludWU7bGV0IGM9ZS50cmFja3MuZmluZChmdW5jdGlvbih5KXtyZXR1cm4geS5uYW1lPT09cy5uYW1lJiZ5LlZhbHVlVHlwZU5hbWU9PT1sfSk7aWYoYz09PXZvaWQgMCljb250aW51ZTtsZXQgdT0wLGg9cy5nZXRWYWx1ZVNpemUoKTtzLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYodT1oLzMpO2xldCBmPTAscD1jLmdldFZhbHVlU2l6ZSgpO2MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihmPXAvMyk7bGV0IGQ9cy50aW1lcy5sZW5ndGgtMSxnO2lmKG88PXMudGltZXNbMF0pe2xldCB5PXUseD1oLXU7Zz1Zbi5hcnJheVNsaWNlKHMudmFsdWVzLHkseCl9ZWxzZSBpZihvPj1zLnRpbWVzW2RdKXtsZXQgeT1kKmgrdSx4PXkraC11O2c9WW4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9dSxiPWgtdTt5LmV2YWx1YXRlKG8pLGc9WW4uYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LGIpfWw9PT0icXVhdGVybmlvbiImJm5ldyB5aSgpLmZyb21BcnJheShnKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KGcpO2xldCBfPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8XzsrK3kpe2xldCB4PXkqcCtmO2lmKGw9PT0icXVhdGVybmlvbiIpeWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxnLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgYj1wLWYqMjtmb3IobGV0IFM9MDtTPGI7KytTKWMudmFsdWVzW3grU10tPWdbU119fX1yZXR1cm4gZS5ibGVuZE1vZGU9a2h0LGV9fSxmaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9aSE9PXZvaWQgMD9pOm5ldyByLmNvbnN0cnVjdG9yKG4pLHRoaXMuc2FtcGxlVmFsdWVzPXIsdGhpcy52YWx1ZVNpemU9bix0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG49dGhpcy5fY2FjaGVkSW5kZXgsaT1yW25dLG89cltuLTFdO3Q6e2U6e2xldCBhO3I6e246aWYoISh0PGkpKXtmb3IobGV0IHM9bisyOzspe2lmKGk9PT12b2lkIDApe2lmKHQ8bylicmVhayBuO3JldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLHQsbyl9aWYobj09PXMpYnJlYWs7aWYobz1pLGk9clsrK25dLHQ8aSlicmVhayBlfWE9ci5sZW5ndGg7YnJlYWsgcn1pZighKHQ+PW8pKXtsZXQgcz1yWzFdO3Q8cyYmKG49MixvPXMpO2ZvcihsZXQgbD1uLTI7Oyl7aWYobz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PWwpYnJlYWs7aWYoaT1vLG89clstLW4tMV0sdD49bylicmVhayBlfWE9bixuPTA7YnJlYWsgcn1icmVhayB0fWZvcig7bjxhOyl7bGV0IHM9bithPj4+MTt0PHJbc10/YT1zOm49cysxfWlmKGk9cltuXSxvPXJbbi0xXSxvPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihpPT09dm9pZCAwKXJldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmludGVydmFsQ2hhbmdlZF8obixvLGkpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhuLG8sdCxpKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLG89dCppO2ZvcihsZXQgYT0wO2EhPT1pOysrYSlyW2FdPW5bbythXTtyZXR1cm4gcn1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O2ZoLnByb3RvdHlwZS5iZWZvcmVTdGFydF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87ZmgucHJvdG90eXBlLmFmdGVyRW5kXz1maC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgU1U9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfX1pbnRlcnZhbENoYW5nZWRfKHQscixuKXtsZXQgaT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPWlbb10sbD1pW2FdO2lmKHM9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVDE6bz10LHM9MipyLW47YnJlYWs7Y2FzZSBKUDpvPWkubGVuZ3RoLTIscz1yK2lbb10taVtvKzFdO2JyZWFrO2RlZmF1bHQ6bz10LHM9bn1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBUMTphPXQsbD0yKm4tcjticmVhaztjYXNlIEpQOmE9MSxsPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEsbD1yfWxldCBjPShuLXIpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhyLXMpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1uKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PWEqdX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9dCpzLGM9bC1zLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LHA9dGhpcy5fd2VpZ2h0TmV4dCxkPShuLXIpLyhpLXIpLGc9ZCpkLF89ZypkLHk9LWYqXysyKmYqZy1mKmQseD0oMStmKSpfKygtMS41LTIqZikqZysoLS41K2YpKmQrMSxiPSgtMS1wKSpfKygxLjUrcCkqZysuNSpkLFM9cCpfLXAqZztmb3IobGV0IEM9MDtDIT09czsrK0Mpb1tDXT15KmFbdStDXSt4KmFbYytDXStiKmFbbCtDXStTKmFbaCtDXTtyZXR1cm4gb319LFM2PWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PShuLXIpLyhpLXIpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1zOysrZilvW2ZdPWFbYytmXSpoK2FbbCtmXSp1O3JldHVybiBvfX0sTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRGw9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYocj09PXZvaWQgMHx8ci5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkocix0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkobix0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKGl8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IHI9dC5jb25zdHJ1Y3RvcixuO2lmKHIudG9KU09OIT09dGhpcy50b0pTT04pbj1yLnRvSlNPTih0KTtlbHNle249e25hbWU6dC5uYW1lLHRpbWVzOlluLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6WW4uY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IGk9dC5nZXRJbnRlcnBvbGF0aW9uKCk7aSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249aSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE1VKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBTNih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgU1UodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgS1A6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgWlA6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIHJVOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYocj09PXZvaWQgMCl7bGV0IG49InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLG4pLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9cix0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBLUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBaUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiByVX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgcj10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXJbbl0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LHIpe2xldCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aCxvPTAsYT1pLTE7Zm9yKDtvIT09aSYmbltvXTx0OykrK287Zm9yKDthIT09LTEmJm5bYV0+cjspLS1hO2lmKCsrYSxvIT09MHx8YSE9PWkpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKG4sbyxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAscj10aGlzLmdldFZhbHVlU2l6ZSgpO3ItTWF0aC5mbG9vcihyKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgbj10aGlzLnRpbWVzLGk9dGhpcy52YWx1ZXMsbz1uLmxlbmd0aDtvPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IGE9bnVsbDtmb3IobGV0IHM9MDtzIT09bztzKyspe2xldCBsPW5bc107aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsbCksdD0hMTticmVha31pZihhIT09bnVsbCYmYT5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMscyxsLGEpLHQ9ITE7YnJlYWt9YT1sfWlmKGkhPT12b2lkIDAmJlluLmlzVHlwZWRBcnJheShpKSlmb3IobGV0IHM9MCxsPWkubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9aVtzXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9WW4uYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxyPVluLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLG49dGhpcy5nZXRWYWx1ZVNpemUoKSxpPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09clUsbz10Lmxlbmd0aC0xLGE9MTtmb3IobGV0IHM9MTtzPG87KytzKXtsZXQgbD0hMSxjPXRbc10sdT10W3MrMV07aWYoYyE9PXUmJihzIT09MXx8YyE9PXRbMF0pKWlmKGkpbD0hMDtlbHNle2xldCBoPXMqbixmPWgtbixwPWgrbjtmb3IobGV0IGQ9MDtkIT09bjsrK2Qpe2xldCBnPXJbaCtkXTtpZihnIT09cltmK2RdfHxnIT09cltwK2RdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgaD1zKm4sZj1hKm47Zm9yKGxldCBwPTA7cCE9PW47KytwKXJbZitwXT1yW2grcF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9bypuLGw9YSpuLGM9MDtjIT09bjsrK2MpcltsK2NdPXJbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHIsMCxhKm4pKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPXIpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Zbi5hcnJheVNsaWNlKHRoaXMudGltZXMsMCkscj1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLG49dGhpcy5jb25zdHJ1Y3RvcixpPW5ldyBuKHRoaXMubmFtZSx0LHIpO3JldHVybiBpLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsaX19O0RsLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQO3ZhciBhbT1jbGFzcyBleHRlbmRzIERse307YW0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO2FtLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7YW0ucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBNNj1jbGFzcyBleHRlbmRzIERse307TTYucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgWjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O1oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBFVT1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0obi1yKS8oaS1yKSxjPXQqcztmb3IobGV0IHU9YytzO2MhPT11O2MrPTQpeWkuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxYMD1jbGFzcyBleHRlbmRzIERse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEVVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1gwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYMC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249WlA7WDAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNtPWNsYXNzIGV4dGVuZHMgRGx7fTtzbS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgSjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O0oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBRMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9LTEsbixpPSRVKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249cix0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ObCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCByPVtdLG49dC50cmFja3MsaT0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthIT09czsrK2Epci5wdXNoKHMwcihuW2FdKS5zY2FsZShpKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24scix0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCByPVtdLG49dC50cmFja3MsaT17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6cix1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9bi5sZW5ndGg7byE9PWE7KytvKXIucHVzaChEbC50b0pTT04obltvXSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LHIsbixpKXtsZXQgbz1yLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9WW4uZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPVluLnNvcnRlZEFycmF5KGwsMSx1KSxjPVluLnNvcnRlZEFycmF5KGMsMSx1KSwhaSYmbFswXT09PTAmJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IFoxKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrcltzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQscil7bGV0IG49dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IGk9dDtuPWkuZ2VvbWV0cnkmJmkuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8aS5hbmltYXRpb25zfWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV0ubmFtZT09PXIpcmV0dXJuIG5baV07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQscixuKXtsZXQgaT17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKyl7bGV0IGM9dFtzXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9aVtoXTtmfHwoaVtoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBhPVtdO2ZvcihsZXQgcyBpbiBpKWEucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHMsaVtzXSxyLG4pKTtyZXR1cm4gYX1zdGF0aWMgcGFyc2VBbmltYXRpb24odCxyKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBuPWZ1bmN0aW9uKGgsZixwLGQsZyl7aWYocC5sZW5ndGghPT0wKXtsZXQgXz1bXSx5PVtdO1luLmZsYXR0ZW5KU09OKHAsXyx5LGQpLF8ubGVuZ3RoIT09MCYmZy5wdXNoKG5ldyBoKGYsXyx5KSl9fSxpPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIsYT10LmZwc3x8MzAscz10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBwPXt9LGQ7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylpZihmW2RdLm1vcnBoVGFyZ2V0cylmb3IobGV0IGc9MDtnPGZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDtnKyspcFtmW2RdLm1vcnBoVGFyZ2V0c1tnXV09LTE7Zm9yKGxldCBnIGluIHApe2xldCBfPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PWZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBiPWZbZF07Xy5wdXNoKGIudGltZSkseS5wdXNoKGIubW9ycGhUYXJnZXQ9PT1nPzE6MCl9aS5wdXNoKG5ldyBaMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrZysiXSIsXyx5KSl9bD1wLmxlbmd0aCooYXx8MSl9ZWxzZXtsZXQgcD0iLmJvbmVzWyIrcltoXS5uYW1lKyJdIjtuKEoxLHArIi5wb3NpdGlvbiIsZiwicG9zIixpKSxuKFgwLHArIi5xdWF0ZXJuaW9uIixmLCJyb3QiLGkpLG4oSjEscCsiLnNjYWxlIixmLCJzY2wiLGkpfX1yZXR1cm4gaS5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMobyxsLGkscyl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO24hPT1pOysrbil7bGV0IG89dGhpcy50cmFja3Nbbl07cj1NYXRoLm1heChyLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPXIsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0PXQmJnRoaXMudHJhY2tzW3JdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0LnB1c2godGhpcy50cmFja3Nbcl0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGEwcihlKXtzd2l0Y2goZS50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBaMTtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIEoxO2Nhc2UiY29sb3IiOnJldHVybiBNNjtjYXNlInF1YXRlcm5pb24iOnJldHVybiBYMDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGFtO2Nhc2Uic3RyaW5nIjpyZXR1cm4gc219dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitlKX1mdW5jdGlvbiBzMHIoZSl7aWYoZS50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1hMHIoZS50eXBlKTtpZihlLnRpbWVzPT09dm9pZCAwKXtsZXQgcj1bXSxuPVtdO1luLmZsYXR0ZW5KU09OKGUua2V5cyxyLG4sInZhbHVlIiksZS50aW1lcz1yLGUudmFsdWVzPW59cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShlKTpuZXcgdChlLm5hbWUsZS50aW1lcyxlLnZhbHVlcyxlLmludGVycG9sYXRpb24pfXZhciB0eD17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbZV09dCl9LGdldDpmdW5jdGlvbihlKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tlXX0scmVtb3ZlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmZpbGVzW2VdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxFNj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9dGhpcyxvPSExLGE9MCxzPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9cix0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXtzKyssbz09PSExJiZpLm9uU3RhcnQhPT12b2lkIDAmJmkub25TdGFydCh1LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe2ErKyxpLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJmkub25Qcm9ncmVzcyh1LGEscyksYT09PXMmJihvPSExLGkub25Mb2FkIT09dm9pZCAwJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7aS5vbkVycm9yIT09dm9pZCAwJiZpLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgcD1jW2hdLGQ9Y1toKzFdO2lmKHAuZ2xvYmFsJiYocC5sYXN0SW5kZXg9MCkscC50ZXN0KHUpKXJldHVybiBkfXJldHVybiBudWxsfX19LHRwZT1uZXcgRTYsZWE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXQhPT12b2lkIDA/dDp0cGUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQscil7bGV0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLmxvYWQodCxpLHIsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sWWQ9e30sSmM9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXR4LmdldCh0KTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntyJiZyKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKFlkW3RdIT09dm9pZCAwKXtZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7cmV0dXJufVlkW3RdPVtdLFlkW3RdLnB1c2goe29uTG9hZDpyLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtsZXQgYT1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxzPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChhKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PVlkW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxwPWY/cGFyc2VJbnQoZik6MCxkPXAhPT0wLGc9MCxfPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoeSl7eCgpO2Z1bmN0aW9uIHgoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOlN9KT0+e2lmKGIpeS5jbG9zZSgpO2Vsc2V7Zys9Uy5ieXRlTGVuZ3RoO2xldCBDPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6ZCxsb2FkZWQ6Zyx0b3RhbDpwfSk7Zm9yKGxldCBQPTAsaz11Lmxlbmd0aDtQPGs7UCsrKXtsZXQgTz11W1BdO08ub25Qcm9ncmVzcyYmTy5vblByb2dyZXNzKEMpfXkuZW5xdWV1ZShTKSx4KCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2UoXyl9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHM9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocyksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAscD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGQ9PnAuZGVjb2RlKGQpKX19fSkudGhlbihjPT57dHguYWRkKHQsYyk7bGV0IHU9WWRbdF07ZGVsZXRlIFlkW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9dVtoXTtwLm9uTG9hZCYmcC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVlkW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkVycm9yJiZwLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sb2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1RMS5wYXJzZSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSxhaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1bXSxzPW5ldyBhNixsPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2wuc2V0UGF0aCh0aGlzLnBhdGgpLGwuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGwuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGwuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKTtsZXQgYz0wO2Z1bmN0aW9uIHUoaCl7bC5sb2FkKHRbaF0sZnVuY3Rpb24oZil7bGV0IHA9by5wYXJzZShmLCEwKTthW2hdPXt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxmb3JtYXQ6cC5mb3JtYXQsbWlwbWFwczpwLm1pcG1hcHN9LGMrPTEsYz09PTYmJihwLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmltYWdlPWEscy5mb3JtYXQ9cC5mb3JtYXQscy5uZWVkc1VwZGF0ZT0hMCxyJiZyKHMpKX0sbixpKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgaD0wLGY9dC5sZW5ndGg7aDxmOysraCl1KGgpO2Vsc2UgbC5sb2FkKHQsZnVuY3Rpb24oaCl7bGV0IGY9by5wYXJzZShoLCEwKTtpZihmLmlzQ3ViZW1hcCl7bGV0IHA9Zi5taXBtYXBzLmxlbmd0aC9mLm1pcG1hcENvdW50O2ZvcihsZXQgZD0wO2Q8cDtkKyspe2FbZF09e21pcG1hcHM6W119O2ZvcihsZXQgZz0wO2c8Zi5taXBtYXBDb3VudDtnKyspYVtkXS5taXBtYXBzLnB1c2goZi5taXBtYXBzW2QqZi5taXBtYXBDb3VudCtnXSksYVtkXS5mb3JtYXQ9Zi5mb3JtYXQsYVtkXS53aWR0aD1mLndpZHRoLGFbZF0uaGVpZ2h0PWYuaGVpZ2h0fXMuaW1hZ2U9YX1lbHNlIHMuaW1hZ2Uud2lkdGg9Zi53aWR0aCxzLmltYWdlLmhlaWdodD1mLmhlaWdodCxzLm1pcG1hcHM9Zi5taXBtYXBzO2YubWlwbWFwQ291bnQ9PT0xJiYocy5taW5GaWx0ZXI9aWkpLHMuZm9ybWF0PWYuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKX0sbixpKTtyZXR1cm4gc319LGV4PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXRoaXMsYT10eC5nZXQodCk7aWYoYSE9PXZvaWQgMClyZXR1cm4gby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ciYmcihhKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksYTtsZXQgcz10NigiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSx0eC5hZGQodCx0aGlzKSxyJiZyKHRoaXMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLGkmJmkoaCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKHMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzLnNyYz10LHN9fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IEgwLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7YS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxhLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgcz0wO2Z1bmN0aW9uIGwoYyl7YS5sb2FkKHRbY10sZnVuY3Rpb24odSl7by5pbWFnZXNbY109dSxzKysscz09PTYmJihvLm5lZWRzVXBkYXRlPSEwLHImJnIobykpfSx2b2lkIDAsaSl9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gb319LENVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpkLHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1vLnBhcnNlKGwpOyFjfHwoYy5pbWFnZSE9PXZvaWQgMD9hLmltYWdlPWMuaW1hZ2U6Yy5kYXRhIT09dm9pZCAwJiYoYS5pbWFnZS53aWR0aD1jLndpZHRoLGEuaW1hZ2UuaGVpZ2h0PWMuaGVpZ2h0LGEuaW1hZ2UuZGF0YT1jLmRhdGEpLGEud3JhcFM9Yy53cmFwUyE9PXZvaWQgMD9jLndyYXBTOkpvLGEud3JhcFQ9Yy53cmFwVCE9PXZvaWQgMD9jLndyYXBUOkpvLGEubWFnRmlsdGVyPWMubWFnRmlsdGVyIT09dm9pZCAwP2MubWFnRmlsdGVyOmlpLGEubWluRmlsdGVyPWMubWluRmlsdGVyIT09dm9pZCAwP2MubWluRmlsdGVyOmlpLGEuYW5pc290cm9weT1jLmFuaXNvdHJvcHkhPT12b2lkIDA/Yy5hbmlzb3Ryb3B5OjEsYy5lbmNvZGluZyE9PXZvaWQgMCYmKGEuZW5jb2Rpbmc9Yy5lbmNvZGluZyksYy5mbGlwWSE9PXZvaWQgMCYmKGEuZmxpcFk9Yy5mbGlwWSksYy5mb3JtYXQhPT12b2lkIDAmJihhLmZvcm1hdD1jLmZvcm1hdCksYy50eXBlIT09dm9pZCAwJiYoYS50eXBlPWMudHlwZSksYy5taXBtYXBzIT09dm9pZCAwJiYoYS5taXBtYXBzPWMubWlwbWFwcyxhLm1pbkZpbHRlcj1veCksYy5taXBtYXBDb3VudD09PTEmJihhLm1pbkZpbHRlcj1paSksYy5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDAmJihhLmdlbmVyYXRlTWlwbWFwcz1jLmdlbmVyYXRlTWlwbWFwcyksYS5uZWVkc1VwZGF0ZT0hMCxyJiZyKGEsYykpfSxuLGkpLGF9fSxBVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IHZpLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCksYS5sb2FkKHQsZnVuY3Rpb24ocyl7by5pbWFnZT1zLG8ubmVlZHNVcGRhdGU9ITAsciE9PXZvaWQgMCYmcihvKX0sbixpKSxvfX0sT2w9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLmludGVuc2l0eT1yfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLHIub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoci5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKHIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihyLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoci5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKHIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoci5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxyfX07T2wucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFQ2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsbiksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgbmUocil9Y29weSh0KXtyZXR1cm4gT2wucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VDYucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBnaGU9bmV3IE1lLF9oZT1uZXcgaix5aGU9bmV3IGosQzY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEx0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IE4xLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgTHQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgZW4oMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IHI9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtfaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLHIucG9zaXRpb24uY29weShfaGUpLHloZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLHIubG9va0F0KHloZSksci51cGRhdGVNYXRyaXhXb3JsZCgpLGdoZS5tdWx0aXBseU1hdHJpY2VzKHIucHJvamVjdGlvbk1hdHJpeCxyLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChnaGUpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoci5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KHIubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXt9O3JldHVybiB0aGlzLmJpYXMhPT0wJiYodC5iaWFzPXRoaXMuYmlhcyksdGhpcy5ub3JtYWxCaWFzIT09MCYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLHRoaXMucmFkaXVzIT09MSYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSwodGhpcy5tYXBTaXplLnghPT01MTJ8fHRoaXMubWFwU2l6ZS55IT09NTEyKSYmKHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fSxQVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49UVAqMip0LmFuZ2xlKnRoaXMuZm9jdXMsaT10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodCxvPXQuZGlzdGFuY2V8fHIuZmFyOyhuIT09ci5mb3Z8fGkhPT1yLmFzcGVjdHx8byE9PXIuZmFyKSYmKHIuZm92PW4sci5hc3BlY3Q9aSxyLmZhcj1vLHIudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX07UFUucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwO3ZhciBBNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT1NYXRoLlBJLzMsbz0wLGE9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5kaXN0YW5jZT1uLHRoaXMuYW5nbGU9aSx0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1hLHRoaXMuc2hhZG93PW5ldyBQVX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtBNi5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIHZoZT1uZXcgTWUsQlA9bmV3IGoseHV0PW5ldyBqLElVPWNsYXNzIGV4dGVuZHMgQzZ7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWkoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDIsMSwxLDEpLG5ldyBlbigwLDEsMSwxKSxuZXcgZW4oMywxLDEsMSksbmV3IGVuKDEsMSwxLDEpLG5ldyBlbigzLDAsMSwxKSxuZXcgZW4oMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgaigxLDAsMCksbmV3IGooLTEsMCwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKSxuZXcgaigwLDEsMCksbmV3IGooMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMCwxKSxuZXcgaigwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LHI9MCl7bGV0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fG4uZmFyO28hPT1uLmZhciYmKG4uZmFyPW8sbi51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLEJQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoQlApLHh1dC5jb3B5KG4ucG9zaXRpb24pLHh1dC5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbcl0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW3JdKSxuLmxvb2tBdCh4dXQpLG4udXBkYXRlTWF0cml4V29ybGQoKSxpLm1ha2VUcmFuc2xhdGlvbigtQlAueCwtQlAueSwtQlAueiksdmhlLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHZoZSl9fTtJVS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT0xKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1uLHRoaXMuZGVjYXk9aSx0aGlzLnNoYWRvdz1uZXcgSVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IEQxKC01LDUsNSwtNSwuNSw1MDApKX19O0xVLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIEk2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5zaGFkb3c9bmV3IExVfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0k2LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0w2LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgazY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0xMCxpPTEwKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsci5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LHJ9fTtrNi5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBSNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgail9c2V0KHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspdGhpcy5jb2VmZmljaWVudHNbcl0uY29weSh0W3JdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIHIuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxyLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxyLmFkZFNjYWxlZFZlY3RvcihhWzRdLDEuMDkyNTQ4KihuKmkpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDEuMDkyNTQ4KihpKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzddLDEuMDkyNTQ4KihuKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxyfWdldElycmFkaWFuY2VBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwyKi41MTE2NjQqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwyKi41MTE2NjQqbyksci5hZGRTY2FsZWRWZWN0b3IoYVszXSwyKi41MTE2NjQqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwyKi40MjkwNDMqbippKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDIqLjQyOTA0MyppKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwyKi40MjkwNDMqbipvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC40MjkwNDMqKG4qbi1pKmkpKSxyfWFkZCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmFkZCh0LmNvZWZmaWNpZW50c1tyXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tuXSxyKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmxlcnAodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW3JdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tyXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxyK2kqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLnRvQXJyYXkodCxyK2kqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10Lno7clswXT0uMjgyMDk1LHJbMV09LjQ4ODYwMyppLHJbMl09LjQ4ODYwMypvLHJbM109LjQ4ODYwMypuLHJbNF09MS4wOTI1NDgqbippLHJbNV09MS4wOTI1NDgqaSpvLHJbNl09LjMxNTM5MiooMypvKm8tMSkscls3XT0xLjA5MjU0OCpuKm8scls4XT0uNTQ2Mjc0KihuKm4taSppKX19O1I2LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIHJ4PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodD1uZXcgUjYscj0xKXtzdXBlcih2b2lkIDAsciksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCkscn19O3J4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9dGhpcy50ZXh0dXJlcztmdW5jdGlvbiBuKG8pe3JldHVybiByW29dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsbykscltvXX1sZXQgaT1uZXcgbzByW3QudHlwZV07aWYodC51dWlkIT09dm9pZCAwJiYoaS51dWlkPXQudXVpZCksdC5uYW1lIT09dm9pZCAwJiYoaS5uYW1lPXQubmFtZSksdC5jb2xvciE9PXZvaWQgMCYmaS5jb2xvciE9PXZvaWQgMCYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdC5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdC5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdC5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dC5zaGVlbiksdC5zaGVlbkNvbG9yIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yPW5ldyBuZSgpLnNldEhleCh0LnNoZWVuQ29sb3IpKSx0LnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzKSx0LmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlLnNldEhleCh0LmVtaXNzaXZlKSx0LnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyLnNldEhleCh0LnNwZWN1bGFyKSx0LnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYoaS5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5KSx0LnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvciE9PXZvaWQgMCYmaS5zcGVjdWxhckNvbG9yLnNldEhleCh0LnNwZWN1bGFyQ29sb3IpLHQuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHQuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHQuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHQudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHQudGhpY2tuZXNzIT09dm9pZCAwJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHQuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHQuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiZpLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KHQuYXR0ZW51YXRpb25Db2xvciksdC5mb2chPT12b2lkIDAmJihpLmZvZz10LmZvZyksdC5mbGF0U2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdC5ibGVuZGluZyE9PXZvaWQgMCYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdC5jb21iaW5lIT09dm9pZCAwJiYoaS5jb21iaW5lPXQuY29tYmluZSksdC5zaWRlIT09dm9pZCAwJiYoaS5zaWRlPXQuc2lkZSksdC5zaGFkb3dTaWRlIT09dm9pZCAwJiYoaS5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSksdC5vcGFjaXR5IT09dm9pZCAwJiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdC50cmFuc3BhcmVudCE9PXZvaWQgMCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdC5hbHBoYVRlc3QhPT12b2lkIDAmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdC5kZXB0aFRlc3QhPT12b2lkIDAmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdC5kZXB0aFdyaXRlIT09dm9pZCAwJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdC5jb2xvcldyaXRlIT09dm9pZCAwJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdC5hbHBoYVdyaXRlIT09dm9pZCAwJiYoaS5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSksdC5zdGVuY2lsV3JpdGUhPT12b2lkIDAmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdC5zdGVuY2lsV3JpdGVNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdC5zdGVuY2lsRnVuYyE9PXZvaWQgMCYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdC5zdGVuY2lsUmVmIT09dm9pZCAwJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdC5zdGVuY2lsRnVuY01hc2shPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdC5zdGVuY2lsRmFpbCE9PXZvaWQgMCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdC5zdGVuY2lsWkZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdC5zdGVuY2lsWlBhc3MhPT12b2lkIDAmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdC53aXJlZnJhbWUhPT12b2lkIDAmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdC53aXJlZnJhbWVMaW5ld2lkdGghPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdC53aXJlZnJhbWVMaW5lY2FwIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdC53aXJlZnJhbWVMaW5lam9pbiE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdC5yb3RhdGlvbiE9PXZvaWQgMCYmKGkucm90YXRpb249dC5yb3RhdGlvbiksdC5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHQuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHQuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHQuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXQuc2NhbGUpLHQucG9seWdvbk9mZnNldCE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHQucG9seWdvbk9mZnNldEZhY3RvciE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHQucG9seWdvbk9mZnNldFVuaXRzIT09dm9pZCAwJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHQuZGl0aGVyaW5nIT09dm9pZCAwJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHQuYWxwaGFUb0NvdmVyYWdlIT09dm9pZCAwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UpLHQucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEpLHQudmlzaWJsZSE9PXZvaWQgMCYmKGkudmlzaWJsZT10LnZpc2libGUpLHQudG9uZU1hcHBlZCE9PXZvaWQgMCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHQudXNlckRhdGEhPT12b2lkIDAmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHQudmVydGV4Q29sb3JzIT09dm9pZCAwJiYodHlwZW9mIHQudmVydGV4Q29sb3JzPT0ibnVtYmVyIj9pLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycz4wOmkudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzKSx0LnVuaWZvcm1zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LnVuaWZvcm1zKXtsZXQgYT10LnVuaWZvcm1zW29dO3N3aXRjaChpLnVuaWZvcm1zW29dPXt9LGEudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW29dLnZhbHVlPW4oYS52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBuZSgpLnNldEhleChhLnZhbHVlKTticmVhaztjYXNlInYyIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBMdCgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBqKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UidjQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGVuKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGtpKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IE1lKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2RlZmF1bHQ6aS51bmlmb3Jtc1tvXS52YWx1ZT1hLnZhbHVlfX1pZih0LmRlZmluZXMhPT12b2lkIDAmJihpLmRlZmluZXM9dC5kZWZpbmVzKSx0LnZlcnRleFNoYWRlciE9PXZvaWQgMCYmKGkudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyKSx0LmZyYWdtZW50U2hhZGVyIT09dm9pZCAwJiYoaS5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyKSx0LmV4dGVuc2lvbnMhPT12b2lkIDApZm9yKGxldCBvIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbb109dC5leHRlbnNpb25zW29dO2lmKHQuc2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5zaGFkaW5nPT09MSksdC5zaXplIT09dm9pZCAwJiYoaS5zaXplPXQuc2l6ZSksdC5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdC5tYXAhPT12b2lkIDAmJihpLm1hcD1uKHQubWFwKSksdC5tYXRjYXAhPT12b2lkIDAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdC5hbHBoYU1hcCE9PXZvaWQgMCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdC5idW1wTWFwIT09dm9pZCAwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdC5idW1wU2NhbGUhPT12b2lkIDAmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdC5ub3JtYWxNYXAhPT12b2lkIDAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdC5ub3JtYWxNYXBUeXBlIT09dm9pZCAwJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdC5ub3JtYWxTY2FsZSE9PXZvaWQgMCl7bGV0IG89dC5ub3JtYWxTY2FsZTtBcnJheS5pc0FycmF5KG8pPT09ITEmJihvPVtvLG9dKSxpLm5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheShvKX1yZXR1cm4gdC5kaXNwbGFjZW1lbnRNYXAhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudE1hcD1uKHQuZGlzcGxhY2VtZW50TWFwKSksdC5kaXNwbGFjZW1lbnRTY2FsZSE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSksdC5kaXNwbGFjZW1lbnRCaWFzIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50QmlhcyksdC5yb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLnJvdWdobmVzc01hcD1uKHQucm91Z2huZXNzTWFwKSksdC5tZXRhbG5lc3NNYXAhPT12b2lkIDAmJihpLm1ldGFsbmVzc01hcD1uKHQubWV0YWxuZXNzTWFwKSksdC5lbWlzc2l2ZU1hcCE9PXZvaWQgMCYmKGkuZW1pc3NpdmVNYXA9bih0LmVtaXNzaXZlTWFwKSksdC5lbWlzc2l2ZUludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSksdC5zcGVjdWxhck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJNYXA9bih0LnNwZWN1bGFyTWFwKSksdC5zcGVjdWxhckludGVuc2l0eU1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bih0LnNwZWN1bGFySW50ZW5zaXR5TWFwKSksdC5zcGVjdWxhckNvbG9yTWFwIT09dm9pZCAwJiYoaS5zcGVjdWxhckNvbG9yTWFwPW4odC5zcGVjdWxhckNvbG9yTWFwKSksdC5lbnZNYXAhPT12b2lkIDAmJihpLmVudk1hcD1uKHQuZW52TWFwKSksdC5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSksdC5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSksdC5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyksdC5saWdodE1hcCE9PXZvaWQgMCYmKGkubGlnaHRNYXA9bih0LmxpZ2h0TWFwKSksdC5saWdodE1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSksdC5hb01hcCE9PXZvaWQgMCYmKGkuYW9NYXA9bih0LmFvTWFwKSksdC5hb01hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSksdC5ncmFkaWVudE1hcCE9PXZvaWQgMCYmKGkuZ3JhZGllbnRNYXA9bih0LmdyYWRpZW50TWFwKSksdC5jbGVhcmNvYXRNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE1hcD1uKHQuY2xlYXJjb2F0TWFwKSksdC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD1uKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSksdC5jbGVhcmNvYXROb3JtYWxNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbE1hcD1uKHQuY2xlYXJjb2F0Tm9ybWFsTWFwKSksdC5jbGVhcmNvYXROb3JtYWxTY2FsZSE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx0LnRyYW5zbWlzc2lvbk1hcCE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSx0LnRoaWNrbmVzc01hcCE9PXZvaWQgMCYmKGkudGhpY2tuZXNzTWFwPW4odC50aGlja25lc3NNYXApKSx0LnNoZWVuQ29sb3JNYXAhPT12b2lkIDAmJihpLnNoZWVuQ29sb3JNYXA9bih0LnNoZWVuQ29sb3JNYXApKSx0LnNoZWVuUm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzc01hcD1uKHQuc2hlZW5Sb3VnaG5lc3NNYXApKSxpfXNldFRleHR1cmVzKHQpe3JldHVybiB0aGlzLnRleHR1cmVzPXQsdGhpc319LGRNPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocikpfWNhdGNoKG4pe3JldHVybiByfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IHI9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiByPT09LTE/Ii4vIjp0LnN1YnN0cigwLHIrMSl9c3RhdGljIHJlc29sdmVVUkwodCxyKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KHIpJiYvXlwvLy50ZXN0KHQpJiYocj1yLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OnIrdCl9fSxONj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtONi5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgUlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9e30sbj17fTtmdW5jdGlvbiBpKHAsZCl7aWYocltkXSE9PXZvaWQgMClyZXR1cm4gcltkXTtsZXQgXz1wLmludGVybGVhdmVkQnVmZmVyc1tkXSx5PW8ocCxfLmJ1ZmZlcikseD1CMyhfLnR5cGUseSksYj1uZXcgZW0oeCxfLnN0cmlkZSk7cmV0dXJuIGIudXVpZD1fLnV1aWQscltkXT1iLGJ9ZnVuY3Rpb24gbyhwLGQpe2lmKG5bZF0hPT12b2lkIDApcmV0dXJuIG5bZF07bGV0IF89cC5hcnJheUJ1ZmZlcnNbZF0seT1uZXcgVWludDMyQXJyYXkoXykuYnVmZmVyO3JldHVybiBuW2RdPXkseX1sZXQgYT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IE42Om5ldyBQZSxzPXQuZGF0YS5pbmRleDtpZihzIT09dm9pZCAwKXtsZXQgcD1CMyhzLnR5cGUscy5hcnJheSk7YS5zZXRJbmRleChuZXcgSmUocCwxKSl9bGV0IGw9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGxldCBwIGluIGwpe2xldCBkPWxbcF0sZztpZihkLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBfPWkodC5kYXRhLGQuZGF0YSk7Zz1uZXcgdHAoXyxkLml0ZW1TaXplLGQub2Zmc2V0LGQubm9ybWFsaXplZCl9ZWxzZXtsZXQgXz1CMyhkLnR5cGUsZC5hcnJheSkseT1kLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3JtOkplO2c9bmV3IHkoXyxkLml0ZW1TaXplLGQubm9ybWFsaXplZCl9ZC5uYW1lIT09dm9pZCAwJiYoZy5uYW1lPWQubmFtZSksZC51c2FnZSE9PXZvaWQgMCYmZy5zZXRVc2FnZShkLnVzYWdlKSxkLnVwZGF0ZVJhbmdlIT09dm9pZCAwJiYoZy51cGRhdGVSYW5nZS5vZmZzZXQ9ZC51cGRhdGVSYW5nZS5vZmZzZXQsZy51cGRhdGVSYW5nZS5jb3VudD1kLnVwZGF0ZVJhbmdlLmNvdW50KSxhLnNldEF0dHJpYnV0ZShwLGcpfWxldCBjPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoYylmb3IobGV0IHAgaW4gYyl7bGV0IGQ9Y1twXSxnPVtdO2ZvcihsZXQgXz0wLHk9ZC5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9ZFtfXSxiO2lmKHguaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFM9aSh0LmRhdGEseC5kYXRhKTtiPW5ldyB0cChTLHguaXRlbVNpemUseC5vZmZzZXQseC5ub3JtYWxpemVkKX1lbHNle2xldCBTPUIzKHgudHlwZSx4LmFycmF5KTtiPW5ldyBKZShTLHguaXRlbVNpemUseC5ub3JtYWxpemVkKX14Lm5hbWUhPT12b2lkIDAmJihiLm5hbWU9eC5uYW1lKSxnLnB1c2goYil9YS5tb3JwaEF0dHJpYnV0ZXNbcF09Z310LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUmJihhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSEwKTtsZXQgaD10LmRhdGEuZ3JvdXBzfHx0LmRhdGEuZHJhd2NhbGxzfHx0LmRhdGEub2Zmc2V0cztpZihoIT09dm9pZCAwKWZvcihsZXQgcD0wLGQ9aC5sZW5ndGg7cCE9PWQ7KytwKXtsZXQgZz1oW3BdO2EuYWRkR3JvdXAoZy5zdGFydCxnLmNvdW50LGcubWF0ZXJpYWxJbmRleCl9bGV0IGY9dC5kYXRhLmJvdW5kaW5nU3BoZXJlO2lmKGYhPT12b2lkIDApe2xldCBwPW5ldyBqO2YuY2VudGVyIT09dm9pZCAwJiZwLmZyb21BcnJheShmLmNlbnRlciksYS5ib3VuZGluZ1NwaGVyZT1uZXcgWmYocCxmLnJhZGl1cyl9cmV0dXJuIHQubmFtZSYmKGEubmFtZT10Lm5hbWUpLHQudXNlckRhdGEmJihhLnVzZXJEYXRhPXQudXNlckRhdGEpLGF9fSxzaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGE7bGV0IHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cy5zZXRQYXRoKHRoaXMucGF0aCkscy5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcikscy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLHMubG9hZCh0LGZ1bmN0aW9uKGwpe2xldCBjPW51bGw7dHJ5e2M9SlNPTi5wYXJzZShsKX1jYXRjaChoKXtpIT09dm9pZCAwJiZpKGgpLGNvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIit0KyIuIixoLm1lc3NhZ2UpO3JldHVybn1sZXQgdT1jLm1ldGFkYXRhO2lmKHU9PT12b2lkIDB8fHUudHlwZT09PXZvaWQgMHx8dS50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KTtyZXR1cm59by5wYXJzZShjLHIpfSxuLGkpfWxvYWRBc3luYyh0LHIpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IG49dGhpcyxpPXRoaXMucGF0aD09PSIiP2RNLmV4dHJhY3RVcmxCYXNlKHQpOnRoaXMucGF0aDt0aGlzLnJlc291cmNlUGF0aD10aGlzLnJlc291cmNlUGF0aHx8aTtsZXQgbz1uZXcgSmModGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7bGV0IGE9eWllbGQgby5sb2FkQXN5bmModCxyKSxzPUpTT04ucGFyc2UoYSksbD1zLm1ldGFkYXRhO2lmKGw9PT12b2lkIDB8fGwudHlwZT09PXZvaWQgMHx8bC50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXRocm93IG5ldyBFcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJuIHlpZWxkIG4ucGFyc2VBc3luYyhzKX0pfXBhcnNlKHQscil7bGV0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLG89dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLGE9dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcyxmdW5jdGlvbigpe3IhPT12b2lkIDAmJnIoYyl9KSxzPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLGEpLGw9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxzKSxjPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsbyxsLHMsbiksdT10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGMpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhjLHUpLHIhPT12b2lkIDApe2xldCBoPSExO2ZvcihsZXQgZiBpbiBhKWlmKGFbZl1pbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpe2g9ITA7YnJlYWt9aD09PSExJiZyKGMpfXJldHVybiBjfXBhcnNlQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLnBhcnNlQW5pbWF0aW9ucyh0LmFuaW1hdGlvbnMpLG49dGhpcy5wYXJzZVNoYXBlcyh0LnNoYXBlcyksaT10aGlzLnBhcnNlR2VvbWV0cmllcyh0Lmdlb21ldHJpZXMsbiksbz15aWVsZCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmModC5pbWFnZXMpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxpLHMsYSxyKSxjPXRoaXMucGFyc2VTa2VsZXRvbnModC5za2VsZXRvbnMsbCk7cmV0dXJuIHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLGx9KX1wYXJzZVNoYXBlcyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7bGV0IG89bmV3IEtjKCkuZnJvbUpTT04odFtuXSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VTa2VsZXRvbnModCxyKXtsZXQgbj17fSxpPXt9O2lmKHIudHJhdmVyc2UoZnVuY3Rpb24obyl7by5pc0JvbmUmJihpW28udXVpZF09byl9KSx0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9bmV3IGxNKCkuZnJvbUpTT04odFtvXSxpKTtuW3MudXVpZF09c31yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxyKXtsZXQgbj17fTtpZih0IT09dm9pZCAwKXtsZXQgaT1uZXcgUlU7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgcyxsPXRbb107c3dpdGNoKGwudHlwZSl7Y2FzZSJCdWZmZXJHZW9tZXRyeSI6Y2FzZSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI6cz1pLnBhcnNlKGwpO2JyZWFrO2Nhc2UiR2VvbWV0cnkiOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7ZGVmYXVsdDpsLnR5cGUgaW4gbWhlP3M9bWhlW2wudHlwZV0uZnJvbUpTT04obCxyKTpjb25zb2xlLndhcm4oYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJHtsLnR5cGV9ImApfXMudXVpZD1sLnV1aWQsbC5uYW1lIT09dm9pZCAwJiYocy5uYW1lPWwubmFtZSkscy5pc0J1ZmZlckdlb21ldHJ5PT09ITAmJmwudXNlckRhdGEhPT12b2lkIDAmJihzLnVzZXJEYXRhPWwudXNlckRhdGEpLG5bbC51dWlkXT1zfX1yZXR1cm4gbn1wYXJzZU1hdGVyaWFscyh0LHIpe2xldCBuPXt9LGk9e307aWYodCE9PXZvaWQgMCl7bGV0IG89bmV3IGtVO28uc2V0VGV4dHVyZXMocik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdO2lmKGwudHlwZT09PSJNdWx0aU1hdGVyaWFsIil7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxsLm1hdGVyaWFscy5sZW5ndGg7dSsrKXtsZXQgaD1sLm1hdGVyaWFsc1t1XTtuW2gudXVpZF09PT12b2lkIDAmJihuW2gudXVpZF09by5wYXJzZShoKSksYy5wdXNoKG5baC51dWlkXSl9aVtsLnV1aWRdPWN9ZWxzZSBuW2wudXVpZF09PT12b2lkIDAmJihuW2wudXVpZF09by5wYXJzZShsKSksaVtsLnV1aWRdPW5bbC51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2xldCByPXt9O2lmKHQhPT12b2lkIDApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0sbz1RMS5wYXJzZShpKTtyW28udXVpZF09b31yZXR1cm4gcn1wYXJzZUltYWdlcyh0LHIpe2xldCBuPXRoaXMsaT17fSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4ubWFuYWdlci5pdGVtU3RhcnQobCksby5sb2FkKGwsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZChsKX0sdm9pZCAwLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FcnJvcihsKSxuLm1hbmFnZXIuaXRlbUVuZChsKX0pfWZ1bmN0aW9uIHMobCl7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtsZXQgYz1sLHU9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoYyk/YzpuLnJlc291cmNlUGF0aCtjO3JldHVybiBhKHUpfWVsc2UgcmV0dXJuIGwuZGF0YT97ZGF0YTpCMyhsLnR5cGUsbC5kYXRhKSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH06bnVsbH1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtsZXQgbD1uZXcgRTYocik7bz1uZXcgZXgobCksby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGM9MCx1PXQubGVuZ3RoO2M8dTtjKyspe2xldCBoPXRbY10sZj1oLnVybDtpZihBcnJheS5pc0FycmF5KGYpKXtpW2gudXVpZF09W107Zm9yKGxldCBwPTAsZD1mLmxlbmd0aDtwPGQ7cCsrKXtsZXQgZz1mW3BdLF89cyhnKTtfIT09bnVsbCYmKF8gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbaC51dWlkXS5wdXNoKF8pOmlbaC51dWlkXS5wdXNoKG5ldyBKZChfLmRhdGEsXy53aWR0aCxfLmhlaWdodCkpKX19ZWxzZXtsZXQgcD1zKGgudXJsKTtwIT09bnVsbCYmKGlbaC51dWlkXT1wKX19fXJldHVybiBpfXBhcnNlSW1hZ2VzQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLG49e30saTtmdW5jdGlvbiBvKGEpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtsZXQgcz1hLGw9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3Qocyk/czpyLnJlc291cmNlUGF0aCtzO3JldHVybiB5aWVsZCBpLmxvYWRBc3luYyhsKX1lbHNlIHJldHVybiBhLmRhdGE/e2RhdGE6QjMoYS50eXBlLGEuZGF0YSksd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9Om51bGx9KX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtpPW5ldyBleCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdLGM9bC51cmw7aWYoQXJyYXkuaXNBcnJheShjKSl7bltsLnV1aWRdPVtdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXlpZWxkIG8oZik7cCE9PW51bGwmJihwIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9uW2wudXVpZF0ucHVzaChwKTpuW2wudXVpZF0ucHVzaChuZXcgSmQocC5kYXRhLHAud2lkdGgscC5oZWlnaHQpKSl9fWVsc2V7bGV0IHU9eWllbGQgbyhsLnVybCk7dSE9PW51bGwmJihuW2wudXVpZF09dSl9fX1yZXR1cm4gbn0pfXBhcnNlVGV4dHVyZXModCxyKXtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuIHR5cGVvZiBvPT0ibnVtYmVyIj9vOihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uIixvKSxhW29dKX1sZXQgaT17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXTtzLmltYWdlPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxzLnV1aWQpLHJbcy5pbWFnZV09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHMuaW1hZ2UpO2xldCBsLGM9cltzLmltYWdlXTtBcnJheS5pc0FycmF5KGMpPyhsPW5ldyBIMChjKSxjLmxlbmd0aD09PTYmJihsLm5lZWRzVXBkYXRlPSEwKSk6KGMmJmMuZGF0YT9sPW5ldyBKZChjLmRhdGEsYy53aWR0aCxjLmhlaWdodCk6bD1uZXcgdmkoYyksYyYmKGwubmVlZHNVcGRhdGU9ITApKSxsLnV1aWQ9cy51dWlkLHMubmFtZSE9PXZvaWQgMCYmKGwubmFtZT1zLm5hbWUpLHMubWFwcGluZyE9PXZvaWQgMCYmKGwubWFwcGluZz1uKHMubWFwcGluZyxsMHIpKSxzLm9mZnNldCE9PXZvaWQgMCYmbC5vZmZzZXQuZnJvbUFycmF5KHMub2Zmc2V0KSxzLnJlcGVhdCE9PXZvaWQgMCYmbC5yZXBlYXQuZnJvbUFycmF5KHMucmVwZWF0KSxzLmNlbnRlciE9PXZvaWQgMCYmbC5jZW50ZXIuZnJvbUFycmF5KHMuY2VudGVyKSxzLnJvdGF0aW9uIT09dm9pZCAwJiYobC5yb3RhdGlvbj1zLnJvdGF0aW9uKSxzLndyYXAhPT12b2lkIDAmJihsLndyYXBTPW4ocy53cmFwWzBdLHhoZSksbC53cmFwVD1uKHMud3JhcFsxXSx4aGUpKSxzLmZvcm1hdCE9PXZvaWQgMCYmKGwuZm9ybWF0PXMuZm9ybWF0KSxzLnR5cGUhPT12b2lkIDAmJihsLnR5cGU9cy50eXBlKSxzLmVuY29kaW5nIT09dm9pZCAwJiYobC5lbmNvZGluZz1zLmVuY29kaW5nKSxzLm1pbkZpbHRlciE9PXZvaWQgMCYmKGwubWluRmlsdGVyPW4ocy5taW5GaWx0ZXIsYmhlKSkscy5tYWdGaWx0ZXIhPT12b2lkIDAmJihsLm1hZ0ZpbHRlcj1uKHMubWFnRmlsdGVyLGJoZSkpLHMuYW5pc290cm9weSE9PXZvaWQgMCYmKGwuYW5pc290cm9weT1zLmFuaXNvdHJvcHkpLHMuZmxpcFkhPT12b2lkIDAmJihsLmZsaXBZPXMuZmxpcFkpLHMucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmKGwucHJlbXVsdGlwbHlBbHBoYT1zLnByZW11bHRpcGx5QWxwaGEpLHMudW5wYWNrQWxpZ25tZW50IT09dm9pZCAwJiYobC51bnBhY2tBbGlnbm1lbnQ9cy51bnBhY2tBbGlnbm1lbnQpLHMudXNlckRhdGEhPT12b2lkIDAmJihsLnVzZXJEYXRhPXMudXNlckRhdGEpLGlbcy51dWlkXT1sfXJldHVybiBpfXBhcnNlT2JqZWN0KHQscixuLGksbyl7bGV0IGE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gcltmXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsZikscltmXX1mdW5jdGlvbiBsKGYpe2lmKGYhPT12b2lkIDApe2lmKEFycmF5LmlzQXJyYXkoZikpe2xldCBwPVtdO2ZvcihsZXQgZD0wLGc9Zi5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXTtuW19dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixfKSxwLnB1c2gobltfXSl9cmV0dXJuIHB9cmV0dXJuIG5bZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLGYpLG5bZl19fWZ1bmN0aW9uIGMoZil7cmV0dXJuIGlbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsZiksaVtmXX1sZXQgdSxoO3N3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOmE9bmV3IHEwLHQuYmFja2dyb3VuZCE9PXZvaWQgMCYmKE51bWJlci5pc0ludGVnZXIodC5iYWNrZ3JvdW5kKT9hLmJhY2tncm91bmQ9bmV3IG5lKHQuYmFja2dyb3VuZCk6YS5iYWNrZ3JvdW5kPWModC5iYWNrZ3JvdW5kKSksdC5lbnZpcm9ubWVudCE9PXZvaWQgMCYmKGEuZW52aXJvbm1lbnQ9Yyh0LmVudmlyb25tZW50KSksdC5mb2chPT12b2lkIDAmJih0LmZvZy50eXBlPT09IkZvZyI/YS5mb2c9bmV3IHoxKHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKTp0LmZvZy50eXBlPT09IkZvZ0V4cDIiJiYoYS5mb2c9bmV3IE8xKHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6YT1uZXcgVWkodC5mb3YsdC5hc3BlY3QsdC5uZWFyLHQuZmFyKSx0LmZvY3VzIT09dm9pZCAwJiYoYS5mb2N1cz10LmZvY3VzKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LmZpbG1HYXVnZSE9PXZvaWQgMCYmKGEuZmlsbUdhdWdlPXQuZmlsbUdhdWdlKSx0LmZpbG1PZmZzZXQhPT12b2lkIDAmJihhLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0KSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIk9ydGhvZ3JhcGhpY0NhbWVyYSI6YT1uZXcgRDEodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6YT1uZXcgTDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjphPW5ldyBJNih0LmNvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIlBvaW50TGlnaHQiOmE9bmV3IFA2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmE9bmV3IGs2KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmE9bmV3IEE2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmFuZ2xlLHQucGVudW1icmEsdC5kZWNheSk7YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmE9bmV3IFQ2KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjphPW5ldyByeCgpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgYU0odSxoKSx0LmJpbmRNb2RlIT09dm9pZCAwJiYoYS5iaW5kTW9kZT10LmJpbmRNb2RlKSx0LmJpbmRNYXRyaXghPT12b2lkIDAmJmEuYmluZE1hdHJpeC5mcm9tQXJyYXkodC5iaW5kTWF0cml4KSx0LnNrZWxldG9uIT09dm9pZCAwJiYoYS5za2VsZXRvbj10LnNrZWxldG9uKTticmVhaztjYXNlIk1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgdGkodSxoKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCk7bGV0IGY9dC5jb3VudCxwPXQuaW5zdGFuY2VNYXRyaXgsZD10Lmluc3RhbmNlQ29sb3I7YT1uZXcgaTYodSxoLGYpLGEuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkocC5hcnJheSksMTYpLGQhPT12b2lkIDAmJihhLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkoZC5hcnJheSksZC5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjphPW5ldyBfVTticmVhaztjYXNlIkxpbmUiOmE9bmV3IGNoKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lTG9vcCI6YT1uZXcgbzYocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6YT1uZXcgQWEocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlBvaW50Q2xvdWQiOmNhc2UiUG9pbnRzIjphPW5ldyBpbShzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiU3ByaXRlIjphPW5ldyBvTShsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjphPW5ldyBYZDticmVhaztjYXNlIkJvbmUiOmE9bmV3IHNNO2JyZWFrO2RlZmF1bHQ6YT1uZXcgb3J9aWYoYS51dWlkPXQudXVpZCx0Lm5hbWUhPT12b2lkIDAmJihhLm5hbWU9dC5uYW1lKSx0Lm1hdHJpeCE9PXZvaWQgMD8oYS5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx0Lm1hdHJpeEF1dG9VcGRhdGUhPT12b2lkIDAmJihhLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxhLm1hdHJpeEF1dG9VcGRhdGUmJmEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKSk6KHQucG9zaXRpb24hPT12b2lkIDAmJmEucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHQucm90YXRpb24hPT12b2lkIDAmJmEucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHQucXVhdGVybmlvbiE9PXZvaWQgMCYmYS5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHQuc2NhbGUhPT12b2lkIDAmJmEuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx0LmNhc3RTaGFkb3chPT12b2lkIDAmJihhLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx0LnJlY2VpdmVTaGFkb3chPT12b2lkIDAmJihhLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHQuc2hhZG93LmJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHQuc2hhZG93Lm5vcm1hbEJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHQuc2hhZG93LnJhZGl1cyE9PXZvaWQgMCYmKGEuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHQuc2hhZG93Lm1hcFNpemUhPT12b2lkIDAmJmEuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHQuc2hhZG93LmNhbWVyYSE9PXZvaWQgMCYmKGEuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx0LnZpc2libGUhPT12b2lkIDAmJihhLnZpc2libGU9dC52aXNpYmxlKSx0LmZydXN0dW1DdWxsZWQhPT12b2lkIDAmJihhLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx0LnJlbmRlck9yZGVyIT09dm9pZCAwJiYoYS5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LmxheWVycyE9PXZvaWQgMCYmKGEubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHQuY2hpbGRyZW4hPT12b2lkIDApe2xldCBmPXQuY2hpbGRyZW47Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspYS5hZGQodGhpcy5wYXJzZU9iamVjdChmW3BdLHIsbixpLG8pKX1pZih0LmFuaW1hdGlvbnMhPT12b2lkIDApe2xldCBmPXQuYW5pbWF0aW9ucztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXTthLmFuaW1hdGlvbnMucHVzaChvW2RdKX19aWYodC50eXBlPT09IkxPRCIpe3QuYXV0b1VwZGF0ZSE9PXZvaWQgMCYmKGEuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2xldCBmPXQubGV2ZWxzO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgZD1mW3BdLGc9YS5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixkLm9iamVjdCk7ZyE9PXZvaWQgMCYmYS5hZGRMZXZlbChnLGQuZGlzdGFuY2UpfX1yZXR1cm4gYX1iaW5kU2tlbGV0b25zKHQscil7T2JqZWN0LmtleXMocikubGVuZ3RoIT09MCYmdC50cmF2ZXJzZShmdW5jdGlvbihuKXtpZihuLmlzU2tpbm5lZE1lc2g9PT0hMCYmbi5za2VsZXRvbiE9PXZvaWQgMCl7bGV0IGk9cltuLnNrZWxldG9uXTtpPT09dm9pZCAwP2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6IixuLnNrZWxldG9uKTpuLmJpbmQoaSxuLmJpbmRNYXRyaXgpfX0pfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxsMHI9e1VWTWFwcGluZzpYVSxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6bngsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOml4LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOllQLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOmpQLEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOno2fSx4aGU9e1JlcGVhdFdyYXBwaW5nOlhQLENsYW1wVG9FZGdlV3JhcHBpbmc6Sm8sTWlycm9yZWRSZXBlYXRXcmFwcGluZzokUH0sYmhlPXtOZWFyZXN0RmlsdGVyOkxpLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOm9VLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6YVUsTGluZWFyRmlsdGVyOmlpLExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6TGh0LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpveH0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9e307cy5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIscy5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LHMpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt0eC5hZGQodCxsKSxyJiZyKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7aSYmaShsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05VLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBXVix6aHQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1Y9PT12b2lkIDAmJihXVj1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLFdWfSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe1dWPWV9fSxEVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7bGV0IGw9cy5zbGljZSgwKTt6aHQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe3IodSl9KX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX19LE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodm9pZCAwLG4pO2xldCBpPW5ldyBuZSgpLnNldCh0KSxvPW5ldyBuZSgpLnNldChyKSxhPW5ldyBqKGkucixpLmcsaS5iKSxzPW5ldyBqKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fTtPVS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgelU9Y2xhc3MgZXh0ZW5kcyByeHtjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIodm9pZCAwLHIpO2xldCBuPW5ldyBuZSgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQobi5yLG4uZyxuLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O3pVLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB3aGU9bmV3IE1lLFNoZT1uZXcgTWUseTE9bmV3IE1lLGxodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBVaSx0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKSx0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNhbWVyYVI9bmV3IFVpLHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLl9jYWNoZTtpZihyLmZvY3VzIT09dC5mb2N1c3x8ci5mb3YhPT10LmZvdnx8ci5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ci5uZWFyIT09dC5uZWFyfHxyLmZhciE9PXQuZmFyfHxyLnpvb20hPT10Lnpvb218fHIuZXllU2VwIT09dGhpcy5leWVTZXApe3IuZm9jdXM9dC5mb2N1cyxyLmZvdj10LmZvdixyLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxyLm5lYXI9dC5uZWFyLHIuZmFyPXQuZmFyLHIuem9vbT10Lnpvb20sci5leWVTZXA9dGhpcy5leWVTZXAseTEuY29weSh0LnByb2plY3Rpb25NYXRyaXgpO2xldCBpPXIuZXllU2VwLzIsbz1pKnIubmVhci9yLmZvY3VzLGE9ci5uZWFyKk1hdGgudGFuKFAxKnIuZm92Ki41KS9yLnpvb20scyxsO1NoZS5lbGVtZW50c1sxMl09LWksd2hlLmVsZW1lbnRzWzEyXT1pLHM9LWEqci5hc3BlY3QrbyxsPWEqci5hc3BlY3Qrbyx5MS5lbGVtZW50c1swXT0yKnIubmVhci8obC1zKSx5MS5lbGVtZW50c1s4XT0obCtzKS8obC1zKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KHkxKSxzPS1hKnIuYXNwZWN0LW8sbD1hKnIuYXNwZWN0LW8seTEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseTEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weSh5MSl9dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoU2hlKSx0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseSh3aGUpfX0sbU09Y2xhc3N7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1NaGUoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7bGV0IHI9TWhlKCk7dD0oci10aGlzLm9sZFRpbWUpLzFlMyx0aGlzLm9sZFRpbWU9cix0aGlzLmVsYXBzZWRUaW1lKz10fXJldHVybiB0fX07ZnVuY3Rpb24gTWhlKCl7cmV0dXJuKHR5cGVvZiBwZXJmb3JtYW5jZT09InVuZGVmaW5lZCI/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCl9dmFyIHYxPW5ldyBqLEVoZT1uZXcgeWksYzByPW5ldyBqLHgxPW5ldyBqLGNodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiLHRoaXMuY29udGV4dD16aHQuZ2V0Q29udGV4dCgpLHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCx0aGlzLnRpbWVEZWx0YT0wLHRoaXMuX2Nsb2NrPW5ldyBtTX1nZXRJbnB1dCgpe3JldHVybiB0aGlzLmdhaW59cmVtb3ZlRmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbCYmKHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj1udWxsKSx0aGlzfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlcn1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbD8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj10LHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpc31nZXRNYXN0ZXJWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0TWFzdGVyVm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpO2xldCByPXRoaXMuY29udGV4dC5saXN0ZW5lcixuPXRoaXMudXA7aWYodGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh2MSxFaGUsYzByKSx4MS5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oRWhlKSxyLnBvc2l0aW9uWCl7bGV0IGk9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHYxLngsaSksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodjEueSxpKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2MS56LGkpLHIuZm9yd2FyZFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueCxpKSxyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS56LGkpLHIudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueCxpKSxyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksaSksci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi56LGkpfWVsc2Ugci5zZXRQb3NpdGlvbih2MS54LHYxLnksdjEueiksci5zZXRPcmllbnRhdGlvbih4MS54LHgxLnkseDEueixuLngsbi55LG4ueil9fSxENj1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IHI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiByLmJ1ZmZlcj10aGlzLmJ1ZmZlcixyLmxvb3A9dGhpcy5sb29wLHIubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LHIubG9vcEVuZD10aGlzLmxvb3BFbmQsci5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLHIuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPXIsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fSxiMT1uZXcgaixUaGU9bmV3IHlpLHUwcj1uZXcgaix3MT1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBENntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LHIsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9cix0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSEwJiZ0aGlzLmlzUGxheWluZz09PSExKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiMSxUaGUsdTByKSx3MS5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihUaGUpO2xldCByPXRoaXMucGFubmVyO2lmKHIucG9zaXRpb25YKXtsZXQgbj10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueCxuKSxyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LG4pLHIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLnosbiksci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueCxuKSxyLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS55LG4pLHIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLnosbil9ZWxzZSByLnNldFBvc2l0aW9uKGIxLngsYjEueSxiMS56KSxyLnNldE9yaWVudGF0aW9uKHcxLngsdzEueSx3MS56KX19LEZVPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1yLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLHI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspdCs9cltuXTtyZXR1cm4gdC9yLmxlbmd0aH19LEJVPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uO2xldCBpLG8sYTtzd2l0Y2gocil7Y2FzZSJxdWF0ZXJuaW9uIjppPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjppPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkobio1KTticmVhaztkZWZhdWx0Omk9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio1KX10aGlzLl9taXhCdWZmZXJSZWdpb249aSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LHIpe2xldCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUsbz10KmkraSxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihhPT09MCl7Zm9yKGxldCBzPTA7cyE9PWk7KytzKW5bbytzXT1uW3NdO2E9cn1lbHNle2ErPXI7bGV0IHM9ci9hO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLG8sMCxzLGkpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUocixpLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgcj10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCpyK3Isbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxzPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSl7bGV0IGw9cip0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxsLDEtbyxyKX1hPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4saSx0aGlzLl9hZGRJbmRleCpyLDEscik7Zm9yKGxldCBsPXIsYz1yK3I7bCE9PWM7KytsKWlmKG5bbF0hPT1uW2wrcl0pe3Muc2V0VmFsdWUobixpKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcscj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShyLGkpO2ZvcihsZXQgbz1uLGE9aTtvIT09YTsrK28pcltvXT1yW2krbyVuXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxyO24rKyl0aGlzLmJ1ZmZlcltuXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLHI9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbcituXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxyLG4saSxvKXtpZihpPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtyK2FdPXRbbithXX1fc2xlcnAodCxyLG4saSl7eWkuc2xlcnBGbGF0KHQscix0LHIsdCxuLGkpfV9zbGVycEFkZGl0aXZlKHQscixuLGksbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87eWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQscix0LG4pLHlpLnNsZXJwRmxhdCh0LHIsdCxyLHQsYSxpKX1fbGVycCh0LHIsbixpLG8pe2xldCBhPTEtaTtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPXIrczt0W2xdPXRbbF0qYSt0W24rc10qaX19X2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9cithO3Rbc109dFtzXSt0W24rYV0qaX19fSxGaHQ9IlxcW1xcXVxcLjpcXC8iLGgwcj1uZXcgUmVnRXhwKCJbIitGaHQrIl0iLCJnIiksQmh0PSJbXiIrRmh0KyJdIixmMHI9IlteIitGaHQucmVwbGFjZSgiXFwuIiwiIikrIl0iLHAwcj0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZDByPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLGYwciksbTByPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZzByPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLF8wcj1uZXcgUmVnRXhwKCJeIitwMHIrZDByK20wcitnMHIrIiQiKSx5MHI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0saGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1ufHxDci5wYXJzZVRyYWNrTmFtZShyKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhyLGkpfWdldFZhbHVlKHQscil7dGhpcy5iaW5kKCk7bGV0IG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dGhpcy5fYmluZGluZ3Nbbl07aSE9PXZvaWQgMCYmaS5nZXRWYWx1ZSh0LHIpfXNldFZhbHVlKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO3IhPT1uOysrcil0W3JdLnVuYmluZCgpfX0sQ3I9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMucGF0aD1yLHRoaXMucGFyc2VkUGF0aD1ufHxDci5wYXJzZVRyYWNrTmFtZShyKSx0aGlzLm5vZGU9Q3IuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxyLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IENyLkNvbXBvc2l0ZSh0LHIsbik6bmV3IENyKHQscixuKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShoMHIsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgcj1fMHIuZXhlYyh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgbj17bm9kZU5hbWU6clsyXSxvYmplY3ROYW1lOnJbM10sb2JqZWN0SW5kZXg6cls0XSxwcm9wZXJ0eU5hbWU6cls1XSxwcm9wZXJ0eUluZGV4OnJbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKGkhPT12b2lkIDAmJmkhPT0tMSl7bGV0IG89bi5ub2RlTmFtZS5zdWJzdHJpbmcoaSsxKTt5MHIuaW5kZXhPZihvKSE9PS0xJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLGkpLG4ub2JqZWN0TmFtZT1vKX1pZihuLnByb3BlcnR5TmFtZT09PW51bGx8fG4ucHJvcGVydHlOYW1lLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufXN0YXRpYyBmaW5kTm9kZSh0LHIpe2lmKCFyfHxyPT09IiJ8fHI9PT0iLiJ8fHI9PT0tMXx8cj09PXQubmFtZXx8cj09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtsZXQgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUocik7aWYobiE9PXZvaWQgMClyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtsZXQgbj1mdW5jdGlvbihvKXtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKyl7bGV0IHM9b1thXTtpZihzLm5hbWU9PT1yfHxzLnV1aWQ9PT1yKXJldHVybiBzO2xldCBsPW4ocy5jaGlsZHJlbik7aWYobClyZXR1cm4gbH1yZXR1cm4gbnVsbH0saT1uKHQuY2hpbGRyZW4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQscil7dFtyXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXRbcisrXT1uW2ldfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0W3JdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxyKX1fc2V0VmFsdWVfZGlyZWN0KHQscil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbcl19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKW5baV09dFtyKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbcl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsciksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQscil9X3NldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMubm9kZSxyPXRoaXMucGFyc2VkUGF0aCxuPXIub2JqZWN0TmFtZSxpPXIucHJvcGVydHlOYW1lLG89ci5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PUNyLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsci5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7cmV0dXJufWlmKG4pe2xldCBjPXIub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtyZXR1cm59aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufXQ9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7cmV0dXJufXQ9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKylpZih0W3VdLm5hbWU9PT1jKXtjPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih0W25dPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufXQ9dFtuXX1pZihjIT09dm9pZCAwKXtpZih0W2NdPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3JldHVybn10PXRbY119fWxldCBhPXRbaV07aWYoYT09PXZvaWQgMCl7bGV0IGM9ci5ub2RlTmFtZTtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2MrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7cmV0dXJufWxldCBzPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdC5uZWVkc1VwZGF0ZSE9PXZvaWQgMD9zPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUhPT12b2lkIDAmJihzPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgbD10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZihvIT09dm9pZCAwKXtpZihpPT09Im1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpe2lmKCF0Lmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZih0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W29dIT09dm9pZCAwJiYobz10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSl9ZWxzZXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7cmV0dXJufX1sPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1vfWVsc2UgYS5mcm9tQXJyYXkhPT12b2lkIDAmJmEudG9BcnJheSE9PXZvaWQgMD8obD10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhsPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbbF0sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2xdW3NdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fTtDci5Db21wb3NpdGU9aGh0O0NyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtDci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtDci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxDci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO0NyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgSFU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO24hPT1pOysrbil0W2FyZ3VtZW50c1tuXS51dWlkXT1uO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgcj10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiByLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtci5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gci5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aCxzLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0scD1mLnV1aWQsZD1yW3BdO2lmKGQ9PT12b2lkIDApe2Q9bCsrLHJbcF09ZCx0LnB1c2goZik7Zm9yKGxldCBnPTAsXz1hO2chPT1fOysrZylvW2ddLnB1c2gobmV3IENyKGYsbltnXSxpW2ddKSl9ZWxzZSBpZihkPGMpe3M9dFtkXTtsZXQgZz0tLWMsXz10W2ddO3JbXy51dWlkXT1kLHRbZF09XyxyW3BdPWcsdFtnXT1mO2ZvcihsZXQgeT0wLHg9YTt5IT09eDsrK3kpe2xldCBiPW9beV0sUz1iW2ddLEM9YltkXTtiW2RdPVMsQz09PXZvaWQgMCYmKEM9bmV3IENyKGYsblt5XSxpW3ldKSksYltnXT1DfX1lbHNlIHRbZF0hPT1zJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7bGV0IGw9YXJndW1lbnRzW2FdLGM9bC51dWlkLHU9cltjXTtpZih1IT09dm9pZCAwJiZ1Pj1vKXtsZXQgaD1vKyssZj10W2hdO3JbZi51dWlkXT11LHRbdV09ZixyW2NdPWgsdFtoXT1sO2ZvcihsZXQgcD0wLGQ9aTtwIT09ZDsrK3Ape2xldCBnPW5bcF0sXz1nW2hdLHk9Z1t1XTtnW3VdPV8sZ1toXT15fX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c18sYT10Lmxlbmd0aDtmb3IobGV0IHM9MCxsPWFyZ3VtZW50cy5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hcmd1bWVudHNbc10sdT1jLnV1aWQsaD1yW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIHJbdV0saDxvKXtsZXQgZj0tLW8scD10W2ZdLGQ9LS1hLGc9dFtkXTtyW3AudXVpZF09aCx0W2hdPXAscltnLnV1aWRdPWYsdFtmXT1nLHQucG9wKCk7Zm9yKGxldCBfPTAseT1pO18hPT15OysrXyl7bGV0IHg9bltfXSxiPXhbZl0sUz14W2RdO3hbaF09Yix4W2ZdPVMseC5wb3AoKX19ZWxzZXtsZXQgZj0tLWEscD10W2ZdO2Y+MCYmKHJbcC51dWlkXT1oKSx0W2hdPXAsdC5wb3AoKTtmb3IobGV0IGQ9MCxnPWk7ZCE9PWc7KytkKXtsZXQgXz1uW2RdO19baF09X1tmXSxfLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b31zdWJzY3JpYmVfKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9blt0XSxvPXRoaXMuX2JpbmRpbmdzO2lmKGkhPT12b2lkIDApcmV0dXJuIG9baV07bGV0IGE9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO2k9by5sZW5ndGgsblt0XT1pLGEucHVzaCh0KSxzLnB1c2gociksby5wdXNoKGgpO2ZvcihsZXQgZj11LHA9bC5sZW5ndGg7ZiE9PXA7KytmKXtsZXQgZD1sW2ZdO2hbZl09bmV3IENyKGQsdCxyKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IHI9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49clt0XTtpZihuIT09dm9pZCAwKXtsZXQgaT10aGlzLl9wYXRocyxvPXRoaXMuX3BhcnNlZFBhdGhzLGE9dGhpcy5fYmluZGluZ3Mscz1hLmxlbmd0aC0xLGw9YVtzXSxjPXRbc107cltjXT1uLGFbbl09bCxhLnBvcCgpLG9bbl09b1tzXSxvLnBvcCgpLGlbbl09aVtzXSxpLnBvcCgpfX19O0hVLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBmaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49bnVsbCxpPXIuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9cix0aGlzLl9sb2NhbFJvb3Q9bix0aGlzLmJsZW5kTW9kZT1pO2xldCBvPXIudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVRmZSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmdGhpcy50aW1lU2NhbGUhPT0wJiZ0aGlzLl9zdGFydFRpbWU9PT1udWxsJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LHIpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPXIsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LHIsbil7aWYodC5mYWRlT3V0KHIpLHRoaXMuZmFkZUluKHIpLG4pe2xldCBpPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9by9pLHM9aS9vO3Qud2FycCgxLGEsciksdGhpcy53YXJwKHMsMSxyKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LHIsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLHIsbil9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3M9PT1udWxsJiYocz1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytuLGNbMF09dC9hLGNbMV09ci9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxyLG4saSl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO3JldHVybn1sZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobyE9PW51bGwpe2xldCBsPSh0LW8pKm47aWYobDwwfHxuPT09MClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwscj1uKmx9cio9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBhPXRoaXMuX3VwZGF0ZVRpbWUocikscz10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYocz4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBraHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTticmVhaztjYXNlICRVOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGUoaSxzKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IHI9MDtpZih0aGlzLmVuYWJsZWQpe3I9dGhpcy53ZWlnaHQ7bGV0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobiE9PW51bGwpe2xldCBpPW4uZXZhbHVhdGUodClbMF07cio9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksaT09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1yLHJ9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgcj0wO2lmKCF0aGlzLnBhdXNlZCl7cj10aGlzLnRpbWVTY2FsZTtsZXQgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtuIT09bnVsbCYmKHIqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxyPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1yKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1yLHJ9X3VwZGF0ZVRpbWUodCl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcCxpPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9bj09PUNmZTtpZih0PT09MClyZXR1cm4gbz09PS0xP2k6YSYmKG8mMSk9PT0xP3ItaTppO2lmKG49PT1FZmUpe289PT0tMSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihpPj1yKWk9cjtlbHNlIGlmKGk8MClpPTA7ZWxzZXt0aGlzLnRpbWU9aTticmVhayB0fXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZihvPT09LTEmJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCx0aGlzLnJlcGV0aXRpb25zPT09MCxhKSk6dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zPT09MCwhMCxhKSksaT49cnx8aTwwKXtsZXQgcz1NYXRoLmZsb29yKGkvcik7aS09cipzLG8rPU1hdGguYWJzKHMpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGk9dD4wP3I6MCx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZihsPT09MSl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOnN9KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihhJiYobyYxKT09PTEpcmV0dXJuIHItaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LHIsbil7bGV0IGk9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhpLmVuZGluZ1N0YXJ0PVQxLGkuZW5kaW5nRW5kPVQxKToodD9pLmVuZGluZ1N0YXJ0PXRoaXMuemVyb1Nsb3BlQXRTdGFydD9UMTpFMTppLmVuZGluZ1N0YXJ0PUpQLHI/aS5lbmRpbmdFbmQ9dGhpcy56ZXJvU2xvcGVBdEVuZD9UMTpFMTppLmVuZGluZ0VuZD1KUCl9X3NjaGVkdWxlRmFkaW5nKHQscixuKXtsZXQgaT10aGlzLl9taXhlcixvPWkudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O2E9PT1udWxsJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09cixzWzFdPW8rdCxsWzFdPW4sdGhpc319LFZVPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQscil7bGV0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Msbz1pLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscz10Ll9pbnRlcnBvbGFudHMsbD1uLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1jW2xdO3U9PT12b2lkIDAmJih1PXt9LGNbbF09dSk7Zm9yKGxldCBoPTA7aCE9PW87KytoKXtsZXQgZj1pW2hdLHA9Zi5uYW1lLGQ9dVtwXTtpZihkIT09dm9pZCAwKSsrZC5yZWZlcmVuY2VDb3VudCxhW2hdPWQ7ZWxzZXtpZihkPWFbaF0sZCE9PXZvaWQgMCl7ZC5fY2FjaGVJbmRleD09PW51bGwmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQsbCxwKSk7Y29udGludWV9bGV0IGc9ciYmci5fcHJvcGVydHlCaW5kaW5nc1toXS5iaW5kaW5nLnBhcnNlZFBhdGg7ZD1uZXcgQlUoQ3IuY3JlYXRlKG4scCxnKSxmLlZhbHVlVHlwZU5hbWUsZi5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCksYVtoXT1kfXNbaF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZih0Ll9jYWNoZUluZGV4PT09bnVsbCl7bGV0IG49KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxpPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbaV07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LGksbil9bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTtvLnVzZUNvdW50Kys9PT0wJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTstLW8udXNlQ291bnQ9PT0wJiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCByPXQuX2NhY2hlSW5kZXg7cmV0dXJuIHIhPT1udWxsJiZyPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsbil7bGV0IGk9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3JdO2lmKGE9PT12b2lkIDApYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW3JdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49cltyLmxlbmd0aC0xXSxpPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1pLHJbaV09bixyLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtsZXQgaD1zLmFjdGlvbkJ5Um9vdCxmPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQ7ZGVsZXRlIGhbZl0sbC5sZW5ndGg9PT0wJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnJlZmVyZW5jZUNvdW50PT09MCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2FkZEluYWN0aXZlQmluZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3MsYT1pW3JdO2E9PT12b2lkIDAmJihhPXt9LGlbcl09YSksYVtuXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQsbz1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1hW2ldLGw9cltyLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLHJbY109bCxyLnBvcCgpLGRlbGV0ZSBzW29dLE9iamVjdC5rZXlzKHMpLmxlbmd0aD09PTAmJmRlbGV0ZSBhW2ldfV9sZW5kQmluZGluZyh0KXtsZXQgcj10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMscj10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLG49dFtyXTtyZXR1cm4gbj09PXZvaWQgMCYmKG49bmV3IFM2KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PXIsdFtyXT1uKSxufV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgcj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89cltpXTt0Ll9fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9fY2FjaGVJbmRleD1uLHJbbl09b31jbGlwQWN0aW9uKHQscixuKXtsZXQgaT1yfHx0aGlzLl9yb290LG89aS51dWlkLGE9dHlwZW9mIHQ9PSJzdHJpbmciP1ExLmZpbmRCeU5hbWUoaSx0KTp0LHM9YSE9PW51bGw/YS51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW3NdLGM9bnVsbDtpZihuPT09dm9pZCAwJiYoYSE9PW51bGw/bj1hLmJsZW5kTW9kZTpuPSRVKSxsIT09dm9pZCAwKXtsZXQgaD1sLmFjdGlvbkJ5Um9vdFtvXTtpZihoIT09dm9pZCAwJiZoLmJsZW5kTW9kZT09PW4pcmV0dXJuIGg7Yz1sLmtub3duQWN0aW9uc1swXSxhPT09bnVsbCYmKGE9Yy5fY2xpcCl9aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGZodCh0aGlzLGEscixuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUscyxvKSx1fWV4aXN0aW5nQWN0aW9uKHQscil7bGV0IG49cnx8dGhpcy5fcm9vdCxpPW4udXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9RMS5maW5kQnlOYW1lKG4sdCk6dCxhPW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO3JldHVybiBzIT09dm9pZCAwJiZzLmFjdGlvbkJ5Um9vdFtpXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxyPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgbj1yLTE7bj49MDstLW4pdFtuXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCxvPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09bjsrK2MpcltjXS5fdXBkYXRlKGksdCxvLGEpO2xldCBzPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylzW2NdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9hY3Rpb25zLmxlbmd0aDtyKyspdGhpcy5fYWN0aW9uc1tyXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPWlbbl07aWYobyE9PXZvaWQgMCl7bGV0IGE9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWFbc107dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9cltyLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxyW3VdPWgsci5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSBpW25dfX11bmNhY2hlUm9vdCh0KXtsZXQgcj10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgYSBpbiBuKXtsZXQgcz1uW2FdLmFjdGlvbkJ5Um9vdCxsPXNbcl07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPWlbcl07aWYobyE9PXZvaWQgMClmb3IobGV0IGEgaW4gbyl7bGV0IHM9b1thXTtzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHMpfX11bmNhY2hlQWN0aW9uKHQscil7bGV0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LHIpO24hPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fTtWVS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZ009Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGdNKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0sVVU9Y2xhc3MgZXh0ZW5kcyBlbXtjb25zdHJ1Y3Rvcih0LHIsbj0xKXtzdXBlcih0LHIpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCByPXN1cGVyLmNsb25lKHQpO3JldHVybiByLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLHIubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUscn19O1VVLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBxVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPXIsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9aSx0aGlzLmNvdW50PW8sdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LHIpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPXIsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07cVUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIHBodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgSmYodCxyKSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFgzLHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fX1zZXQodCxyKXt0aGlzLnJheS5zZXQodCxyKX1zZXRGcm9tQ2FtZXJhKHQscil7ciYmci5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KHIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPXIpOnImJnIuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoci5uZWFyK3IuZmFyKS8oci5uZWFyLXIuZmFyKSkudW5wcm9qZWN0KHIpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oci5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9cik6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIityLnR5cGUpfWludGVyc2VjdE9iamVjdCh0LHI9ITAsbj1bXSl7cmV0dXJuIGRodCh0LHRoaXMsbixyKSxuLnNvcnQoQ2hlKSxufWludGVyc2VjdE9iamVjdHModCxyPSEwLG49W10pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKylkaHQodFtpXSx0aGlzLG4scik7cmV0dXJuIG4uc29ydChDaGUpLG59fTtmdW5jdGlvbiBDaGUoZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfWZ1bmN0aW9uIGRodChlLHQscixuKXtpZihlLmxheWVycy50ZXN0KHQubGF5ZXJzKSYmZS5yYXljYXN0KHQsciksbj09PSEwKXtsZXQgaT1lLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylkaHQoaVtvXSx0LHIsITApfX12YXIgX009Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPXIsdGhpcy50aGV0YT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMucGhpPXQucGhpLHRoaXMudGhldGE9dC50aGV0YSx0aGlzfW1ha2VTYWZlKCl7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KDFlLTYsTWF0aC5taW4oTWF0aC5QSS0xZS02LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtyKnIrbipuKSx0aGlzLnJhZGl1cz09PTA/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFpvKHIvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LG1odD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTEscj0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPXIsdGhpcy55PW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxyLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PXIsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxBaGU9bmV3IEx0LCQwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEx0KDEvMCwxLzApLHI9bmV3IEx0KC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1BaGUuY29weShyKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBBaGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19OyQwLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIFBoZT1uZXcgaixZVj1uZXcgaixHVT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfXNldCh0LHIpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodCksdGhpcy5lbmQuY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0LnN0YXJ0KSx0aGlzLmVuZC5jb3B5KHQuZW5kKSx0aGlzfWdldENlbnRlcih0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX1kZWx0YSh0KXtyZXR1cm4gdC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfWRpc3RhbmNlU3EoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCl9ZGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX1hdCh0LHIpe3JldHVybiB0aGlzLmRlbHRhKHIpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscil7UGhlLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxZVi5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBuPVlWLmRvdChZViksbz1ZVi5kb3QoUGhlKS9uO3JldHVybiByJiYobz1abyhvLDAsMSkpLG99Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIsbil7bGV0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscik7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxJaGU9bmV3IGosZ2h0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1yO2xldCBuPW5ldyBQZSxpPVswLDAsMCwwLDAsMSwwLDAsMCwxLDAsMSwwLDAsMCwtMSwwLDEsMCwwLDAsMCwxLDEsMCwwLDAsMCwtMSwxXTtmb3IobGV0IGE9MCxzPTEsbD0zMjthPGw7YSsrLHMrKyl7bGV0IGM9YS9sKk1hdGguUEkqMix1PXMvbCpNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKGMpLE1hdGguc2luKGMpLDEsTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMuY29uZT1uZXcgQWEobixvKSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IHQ9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFlMyxyPXQqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChyLHIsdCksSWhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksdGhpcy5jb25lLmxvb2tBdChJaGUpLHRoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19LE8wPW5ldyBqLGpWPW5ldyBNZSxidXQ9bmV3IE1lLFdVPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9ZXBlKHQpLG49bmV3IFBlLGk9W10sbz1bXSxhPW5ldyBuZSgwLDAsMSkscz1uZXcgbmUoMCwxLDApO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgdT1yW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksby5wdXNoKGEucixhLmcsYS5iKSxvLnB1c2gocy5yLHMuZyxzLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShvLDMpKTtsZXQgbD1uZXcgR2koe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIobixsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1yLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7YnV0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxhPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107cy5wYXJlbnQmJnMucGFyZW50LmlzQm9uZSYmKGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSxPMC54LE8wLnksTzAueiksalYubXVsdGlwbHlNYXRyaWNlcyhidXQscy5wYXJlbnQubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSsxLE8wLngsTzAueSxPMC56KSxhKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIGVwZShlKXtsZXQgdD1bXTtlJiZlLmlzQm9uZSYmdC5wdXNoKGUpO2ZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaC5hcHBseSh0LGVwZShlLmNoaWxkcmVuW3JdKSk7cmV0dXJuIHR9dmFyIF9odD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1uZXcgajAociw0LDIpLG89bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihpLG8pLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5jb2xvciE9PXZvaWQgMD90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSx2MHI9bmV3IGosTGhlPW5ldyBuZSxraGU9bmV3IG5lLHlodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2xldCBpPW5ldyBXMChyKTtpLnJvdGF0ZVkoTWF0aC5QSSouNSksdGhpcy5tYXRlcmlhbD1uZXcgc2goe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHRoaXMuY29sb3I9PT12b2lkIDAmJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksYT1uZXcgRmxvYXQzMkFycmF5KG8uY291bnQqMyk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoYSwzKSksdGhpcy5hZGQobmV3IHRpKGksdGhpcy5tYXRlcmlhbCkpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodGhpcy5jb2xvciE9PXZvaWQgMCl0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2xldCByPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0xoZS5jb3B5KHRoaXMubGlnaHQuY29sb3IpLGtoZS5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgbj0wLGk9ci5jb3VudDtuPGk7bisrKXtsZXQgbz1uPGkvMj9MaGU6a2hlO3Iuc2V0WFlaKG4sby5yLG8uZyxvLmIpfXIubmVlZHNVcGRhdGU9ITB9dC5sb29rQXQodjByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSl9fSxZVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBuZShuKSxpPW5ldyBuZShpKTtsZXQgbz1yLzIsYT10L3Iscz10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLHA9MCxkPS1zO2Y8PXI7ZisrLGQrPWEpe2wucHVzaCgtcywwLGQscywwLGQpLGwucHVzaChkLDAsLXMsZCwwLHMpO2xldCBnPWY9PT1vP246aTtnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zfWxldCB1PW5ldyBQZTt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShjLDMpKTtsZXQgaD1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX0sdmh0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xMCxyPTE2LG49OCxpPTY0LG89NDQ3MzkyNCxhPTg5NDc4NDgpe289bmV3IG5lKG8pLGE9bmV3IG5lKGEpO2xldCBzPVtdLGw9W107Zm9yKGxldCBoPTA7aDw9cjtoKyspe2xldCBmPWgvciooTWF0aC5QSSoyKSxwPU1hdGguc2luKGYpKnQsZD1NYXRoLmNvcyhmKSp0O3MucHVzaCgwLDAsMCkscy5wdXNoKHAsMCxkKTtsZXQgZz1oJjE/bzphO2wucHVzaChnLnIsZy5nLGcuYiksbC5wdXNoKGcucixnLmcsZy5iKX1mb3IobGV0IGg9MDtoPD1uO2grKyl7bGV0IGY9aCYxP286YSxwPXQtdC9uKmg7Zm9yKGxldCBkPTA7ZDxpO2QrKyl7bGV0IGc9ZC9pKihNYXRoLlBJKjIpLF89TWF0aC5zaW4oZykqcCx5PU1hdGguY29zKGcpKnA7cy5wdXNoKF8sMCx5KSxsLnB1c2goZi5yLGYuZyxmLmIpLGc9KGQrMSkvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwLHMucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKX19bGV0IGM9bmV3IFBlO2Muc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKGwsMykpO2xldCB1PW5ldyBHaSh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihjLHUpLHRoaXMudHlwZT0iUG9sYXJHcmlkSGVscGVyIn19LFJoZT1uZXcgaixYVj1uZXcgaixOaGU9bmV3IGoseGh0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4scj09PXZvaWQgMCYmKHI9MSk7bGV0IGk9bmV3IFBlO2kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFstcixyLDAscixyLDAsciwtciwwLC1yLC1yLDAsLXIsciwwXSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFBlLGkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7UmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSxYVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLE5oZS5zdWJWZWN0b3JzKFhWLFJoZSksdGhpcy5saWdodFBsYW5lLmxvb2tBdChYViksdGhpcy5jb2xvciE9PXZvaWQgMD8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQoWFYpLHRoaXMudGFyZ2V0TGluZS5zY2FsZS56PU5oZS5sZW5ndGgoKX19LCRWPW5ldyBqLF9pPW5ldyBSMSxiaHQ9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1uZXcgUGUsbj1uZXcgR2koe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxvPVtdLGE9e30scz1uZXcgbmUoMTY3NTUyMDApLGw9bmV3IG5lKDE2NzExNjgwKSxjPW5ldyBuZSg0Mzc3NSksdT1uZXcgbmUoMTY3NzcyMTUpLGg9bmV3IG5lKDMzNTU0NDMpO2YoIm4xIiwibjIiLHMpLGYoIm4yIiwibjQiLHMpLGYoIm40IiwibjMiLHMpLGYoIm4zIiwibjEiLHMpLGYoImYxIiwiZjIiLHMpLGYoImYyIiwiZjQiLHMpLGYoImY0IiwiZjMiLHMpLGYoImYzIiwiZjEiLHMpLGYoIm4xIiwiZjEiLHMpLGYoIm4yIiwiZjIiLHMpLGYoIm4zIiwiZjMiLHMpLGYoIm40IiwiZjQiLHMpLGYoInAiLCJuMSIsbCksZigicCIsIm4yIixsKSxmKCJwIiwibjMiLGwpLGYoInAiLCJuNCIsbCksZigidTEiLCJ1MiIsYyksZigidTIiLCJ1MyIsYyksZigidTMiLCJ1MSIsYyksZigiYyIsInQiLHUpLGYoInAiLCJjIixoKSxmKCJjbjEiLCJjbjIiLGgpLGYoImNuMyIsImNuNCIsaCksZigiY2YxIiwiY2YyIixoKSxmKCJjZjMiLCJjZjQiLGgpO2Z1bmN0aW9uIGYoZCxnLF8pe3AoZCxfKSxwKGcsXyl9ZnVuY3Rpb24gcChkLGcpe2kucHVzaCgwLDAsMCksby5wdXNoKGcucixnLmcsZy5iKSxhW2RdPT09dm9pZCAwJiYoYVtkXT1bXSksYVtkXS5wdXNoKGkubGVuZ3RoLzMtMSl9ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksci5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSksc3VwZXIocixuKSx0aGlzLnR5cGU9IkNhbWVyYUhlbHBlciIsdGhpcy5jYW1lcmE9dCx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5wb2ludE1hcD1hLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeSxyPXRoaXMucG9pbnRNYXAsbj0xLGk9MTtfaS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSxQaSgiYyIscix0LF9pLDAsMCwtMSksUGkoInQiLHIsdCxfaSwwLDAsMSksUGkoIm4xIixyLHQsX2ksLW4sLWksLTEpLFBpKCJuMiIscix0LF9pLG4sLWksLTEpLFBpKCJuMyIscix0LF9pLC1uLGksLTEpLFBpKCJuNCIscix0LF9pLG4saSwtMSksUGkoImYxIixyLHQsX2ksLW4sLWksMSksUGkoImYyIixyLHQsX2ksbiwtaSwxKSxQaSgiZjMiLHIsdCxfaSwtbixpLDEpLFBpKCJmNCIscix0LF9pLG4saSwxKSxQaSgidTEiLHIsdCxfaSxuKi43LGkqMS4xLC0xKSxQaSgidTIiLHIsdCxfaSwtbiouNyxpKjEuMSwtMSksUGkoInUzIixyLHQsX2ksMCxpKjIsLTEpLFBpKCJjZjEiLHIsdCxfaSwtbiwwLDEpLFBpKCJjZjIiLHIsdCxfaSxuLDAsMSksUGkoImNmMyIscix0LF9pLDAsLWksMSksUGkoImNmNCIscix0LF9pLDAsaSwxKSxQaSgiY24xIixyLHQsX2ksLW4sMCwtMSksUGkoImNuMiIscix0LF9pLG4sMCwtMSksUGkoImNuMyIscix0LF9pLDAsLWksLTEpLFBpKCJjbjQiLHIsdCxfaSwwLGksLTEpLHQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19O2Z1bmN0aW9uIFBpKGUsdCxyLG4saSxvLGEpeyRWLnNldChpLG8sYSkudW5wcm9qZWN0KG4pO2xldCBzPXRbZV07aWYocyE9PXZvaWQgMCl7bGV0IGw9ci5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKWwuc2V0WFlaKHNbY10sJFYueCwkVi55LCRWLnopfX12YXIgS1Y9bmV3IHRhLHlNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgRmxvYXQzMkFycmF5KDgqMyksbz1uZXcgUGU7by5zZXRJbmRleChuZXcgSmUobiwxKSksby5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoaSwzKSksc3VwZXIobyxuZXcgR2koe2NvbG9yOnIsdG9uZU1hcHBlZDohMX0pKSx0aGlzLm9iamVjdD10LHRoaXMudHlwZT0iQm94SGVscGVyIix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX11cGRhdGUodCl7aWYodCE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKSx0aGlzLm9iamVjdCE9PXZvaWQgMCYmS1Yuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksS1YuaXNFbXB0eSgpKXJldHVybjtsZXQgcj1LVi5taW4sbj1LVi5tYXgsaT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sbz1pLmFycmF5O29bMF09bi54LG9bMV09bi55LG9bMl09bi56LG9bM109ci54LG9bNF09bi55LG9bNV09bi56LG9bNl09ci54LG9bN109ci55LG9bOF09bi56LG9bOV09bi54LG9bMTBdPXIueSxvWzExXT1uLnosb1sxMl09bi54LG9bMTNdPW4ueSxvWzE0XT1yLnosb1sxNV09ci54LG9bMTZdPW4ueSxvWzE3XT1yLnosb1sxOF09ci54LG9bMTldPXIueSxvWzIwXT1yLnosb1syMV09bi54LG9bMjJdPXIueSxvWzIzXT1yLnosaS5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMub2JqZWN0PXQsdGhpcy51cGRhdGUoKSx0aGlzfWNvcHkodCl7cmV0dXJuIEFhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX0sd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IHI9dGhpcy5ib3g7ci5pc0VtcHR5KCl8fChyLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxyLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCkpfX0sU2h0PWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyPTEsbj0xNjc3Njk2MCl7bGV0IGk9bixvPVsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSxhPW5ldyBQZTthLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSxhLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHN1cGVyKGEsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQbGFuZUhlbHBlciIsdGhpcy5wbGFuZT10LHRoaXMuc2l6ZT1yO2xldCBzPVsxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwtMSwxLDEsLTEsMV0sbD1uZXcgUGU7bC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksbC5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzLmFkZChuZXcgdGkobCxuZXcgc2goe2NvbG9yOmksb3BhY2l0eTouMix0cmFuc3BhcmVudDohMCxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITF9KSkpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPS10aGlzLnBsYW5lLmNvbnN0YW50O01hdGguYWJzKHIpPDFlLTgmJihyPTFlLTgpLHRoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsciksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPXI8MD9JaTpJMSx0aGlzLmxvb2tBdCh0aGlzLnBsYW5lLm5vcm1hbCksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fSxEaGU9bmV3IGosWlYsd3V0LE1odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IGooMCwwLDEpLHI9bmV3IGooMCwwLDApLG49MSxpPTE2Nzc2OTYwLG89biouMixhPW8qLjIpe3N1cGVyKCksdGhpcy50eXBlPSJBcnJvd0hlbHBlciIsWlY9PT12b2lkIDAmJihaVj1uZXcgUGUsWlYuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDEsMF0sMykpLHd1dD1uZXcgb20oMCwuNSwxLDUsMSksd3V0LnRyYW5zbGF0ZSgwLC0uNSwwKSksdGhpcy5wb3NpdGlvbi5jb3B5KHIpLHRoaXMubGluZT1uZXcgY2goWlYsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5saW5lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5saW5lKSx0aGlzLmNvbmU9bmV3IHRpKHd1dCxuZXcgc2goe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4sbyxhKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle0RoZS5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7bGV0IHI9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoRGhlLHIpfX1zZXRMZW5ndGgodCxyPXQqLjIsbj1yKi4yKXt0aGlzLmxpbmUuc2NhbGUuc2V0KDEsTWF0aC5tYXgoMWUtNCx0LXIpLDEpLHRoaXMubGluZS51cGRhdGVNYXRyaXgoKSx0aGlzLmNvbmUuc2NhbGUuc2V0KG4scixuKSx0aGlzLmNvbmUucG9zaXRpb24ueT10LHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKX1zZXRDb2xvcih0KXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpLHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0LCExKSx0aGlzLmxpbmUuY29weSh0LmxpbmUpLHRoaXMuY29uZS5jb3B5KHQuY29uZSksdGhpc319LHZNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xKXtsZXQgcj1bMCwwLDAsdCwwLDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwwLHRdLG49WzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSxpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShuLDMpKTtsZXQgbz1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LHIsbil7bGV0IGk9bmV3IG5lLG89dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkobywwKSxpLnRvQXJyYXkobywzKSxpLnNldChyKSxpLnRvQXJyYXkobyw2KSxpLnRvQXJyYXkobyw5KSxpLnNldChuKSxpLnRvQXJyYXkobywxMiksaS50b0FycmF5KG8sMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19LEVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBuZSx0aGlzLnN1YlBhdGhzPVtdLHRoaXMuY3VycmVudFBhdGg9bnVsbH1tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aD1uZXcgcTEsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsciksdGhpc31saW5lVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxyKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxyLG4saSxvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9dG9TaGFwZXModCxyKXtmdW5jdGlvbiBuKHgpe2xldCBiPVtdO2ZvcihsZXQgUz0wLEM9eC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9eFtTXSxrPW5ldyBLYztrLmN1cnZlcz1QLmN1cnZlcyxiLnB1c2goayl9cmV0dXJuIGJ9ZnVuY3Rpb24gaSh4LGIpe2xldCBTPWIubGVuZ3RoLEM9ITE7Zm9yKGxldCBQPVMtMSxrPTA7azxTO1A9aysrKXtsZXQgTz1iW1BdLEQ9YltrXSxCPUQueC1PLngsST1ELnktTy55O2lmKE1hdGguYWJzKEkpPk51bWJlci5FUFNJTE9OKXtpZihJPDAmJihPPWJba10sQj0tQixEPWJbUF0sST0tSSkseC55PE8ueXx8eC55PkQueSljb250aW51ZTtpZih4Lnk9PT1PLnkpe2lmKHgueD09PU8ueClyZXR1cm4hMH1lbHNle2xldCBMPUkqKHgueC1PLngpLUIqKHgueS1PLnkpO2lmKEw9PT0wKXJldHVybiEwO2lmKEw8MCljb250aW51ZTtDPSFDfX1lbHNle2lmKHgueSE9PU8ueSljb250aW51ZTtpZihELng8PXgueCYmeC54PD1PLnh8fE8ueDw9eC54JiZ4Lng8PUQueClyZXR1cm4hMH19cmV0dXJuIEN9bGV0IG89WmMuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtpZihyPT09ITApcmV0dXJuIG4oYSk7bGV0IHMsbCxjLHU9W107aWYoYS5sZW5ndGg9PT0xKXJldHVybiBsPWFbMF0sYz1uZXcgS2MsYy5jdXJ2ZXM9bC5jdXJ2ZXMsdS5wdXNoKGMpLHU7bGV0IGg9IW8oYVswXS5nZXRQb2ludHMoKSk7aD10PyFoOmg7bGV0IGY9W10scD1bXSxkPVtdLGc9MCxfO3BbZ109dm9pZCAwLGRbZ109W107Zm9yKGxldCB4PTAsYj1hLmxlbmd0aDt4PGI7eCsrKWw9YVt4XSxfPWwuZ2V0UG9pbnRzKCkscz1vKF8pLHM9dD8hczpzLHM/KCFoJiZwW2ddJiZnKysscFtnXT17czpuZXcgS2MscDpffSxwW2ddLnMuY3VydmVzPWwuY3VydmVzLGgmJmcrKyxkW2ddPVtdKTpkW2ddLnB1c2goe2g6bCxwOl9bMF19KTtpZighcFswXSlyZXR1cm4gbihhKTtpZihwLmxlbmd0aD4xKXtsZXQgeD0hMSxiPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKylmW1NdPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9ZFtTXTtmb3IobGV0IGs9MDtrPFAubGVuZ3RoO2srKyl7bGV0IE89UFtrXSxEPSEwO2ZvcihsZXQgQj0wO0I8cC5sZW5ndGg7QisrKWkoTy5wLHBbQl0ucCkmJihTIT09QiYmYi5wdXNoKHtmcm9tczpTLHRvczpCLGhvbGU6a30pLEQ/KEQ9ITEsZltCXS5wdXNoKE8pKTp4PSEwKTtEJiZmW1NdLnB1c2goTyl9fWIubGVuZ3RoPjAmJih4fHwoZD1mKSl9bGV0IHk7Zm9yKGxldCB4PTAsYj1wLmxlbmd0aDt4PGI7eCsrKXtjPXBbeF0ucyx1LnB1c2goYykseT1kW3hdO2ZvcihsZXQgUz0wLEM9eS5sZW5ndGg7UzxDO1MrKyljLmhvbGVzLnB1c2goeVtTXS5oKX1yZXR1cm4gdX19LHJwZT1uZXcgRmxvYXQzMkFycmF5KDEpLHgwcj1uZXcgSW50MzJBcnJheShycGUuYnVmZmVyKSxUaHQ9Y2xhc3N7c3RhdGljIHRvSGFsZkZsb2F0KHQpe3Q+NjU1MDQmJihjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LiIpLHQ9NjU1MDQpLHJwZVswXT10O2xldCByPXgwclswXSxuPXI+PjE2JjMyNzY4LGk9cj4+MTImMjA0NyxvPXI+PjIzJjI1NTtyZXR1cm4gbzwxMDM/bjpvPjE0Mj8obnw9MzE3NDQsbnw9KG89PTI1NT8wOjEpJiZyJjgzODg2MDcsbik6bzwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1vKSsoaT4+MTEzLW8mMSksbik6KG58PW8tMTEyPDwxMHxpPj4xLG4rPWkmMSxuKX19LGIwcj0wLHcwcj0xLFMwcj0wLE0wcj0xLEUwcj0yO2Z1bmN0aW9uIFQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGV9ZnVuY3Rpb24gQzByKGU9W10pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksZS5pc011bHRpTWF0ZXJpYWw9ITAsZS5tYXRlcmlhbHM9ZSxlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xpY2UoKX0sZX1mdW5jdGlvbiBBMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIFAwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKSxuZXcgb00oZSl9ZnVuY3Rpb24gSTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIiksbmV3IGltKGUsdCl9ZnVuY3Rpb24gTDByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBrMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIFIwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIE4wcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IGooZSx0LHIpfWZ1bmN0aW9uIEQwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IEplKGUsdCkuc2V0VXNhZ2UoWTMpfWZ1bmN0aW9uIE8wcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgY1UoZSx0KX1mdW5jdGlvbiB6MHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBGMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OENsYW1wZWRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBoVShlLHQpfWZ1bmN0aW9uIEIwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIEgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3ICQzKGUsdCl9ZnVuY3Rpb24gVjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHBVKGUsdCl9ZnVuY3Rpb24gVTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgSzMoZSx0KX1mdW5jdGlvbiBxMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHhlKGUsdCl9ZnVuY3Rpb24gRzByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBtVShlLHQpfWZzLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZnMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldFBvaW50PXQsZX07cTEucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKGUpfTtmdW5jdGlvbiBXMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIiksbmV3IHZNKGUpfWZ1bmN0aW9uIFkwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IHlNKGUsdCl9ZnVuY3Rpb24gajByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRWRnZXNIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkVkZ2VzR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHM2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfVlVLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O1dVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07ZnVuY3Rpb24gWDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBBYShuZXcgZDYoZS5nZW9tZXRyeSksbmV3IEdpKHtjb2xvcjp0IT09dm9pZCAwP3Q6MTY3NzcyMTV9KSl9ZWEucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxkTS5leHRyYWN0VXJsQmFzZShlKX07ZWEuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uICQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLiIpLG5ldyBKYyhlKX1mdW5jdGlvbiBLMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpLG5ldyBDVShlKX0kMC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07JDAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTskMC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07JDAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKGUpfTt0YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07dGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTt0YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O3RhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07WmYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O04xLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KGUpfTtHVS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O2tpLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O2tpLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtraS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07TWUucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24oZSl9O01lLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O01lLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgaigpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07TWUucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oZSl9O01lLnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksZS50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O01lLnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUoZSx0LG4scixpLG8pfTtNZS5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KGUpLmludmVydCgpfTskYy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKGUpfTt5aS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLGUuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTt5aS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUoZSl9O0pmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O29pLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtvaS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChlLHQpfTtvaS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChlKX07b2kucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwoZSl9O29pLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKGUpfTtvaS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLG9pLmdldEJhcnljb29yZChlLHQscixuLGkpfTtvaS5ub3JtYWw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxvaS5nZXROb3JtYWwoZSx0LHIsbil9O0tjLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKGUpfTtLYy5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaGgodGhpcyxlKX07S2MucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgWTAodGhpcyxlKX07THQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQscil9O0x0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07THQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpfTtqLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKGUpfTtqLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl9O2oucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtqLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtqLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07ai5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2VuLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtlbi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O29yLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUoZSl9O29yLnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtvci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsZSl9O29yLnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3IucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPWV9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTt0aS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksQWZlfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7YU0ucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtVaS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihlLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2wucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9ZX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1lfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1lfX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9ZX19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWV9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9ZX19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWV9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPWV9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9ZX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9ZX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmUucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09WTN9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShZMyl9fX0pO0plLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKGU9PT0hMD9ZMzpXMyksdGhpc307SmUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSmUucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07UGUucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChlKX07UGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShlLG5ldyBKZShhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOmU9PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTtQZS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24oZSx0LHIpe3IhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChlLHQpfTtQZS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtQZS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtQZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUoZSl9O1BlLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7ZW0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O2VtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07aGgucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2hoLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3EwLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Z00ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWkucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBuZX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9ZT09PUFodH19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9ZX19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsaC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWV9fX0pO3JuLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihlLHQscixuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQoZSksdGhpcy5jbGVhcih0LHIsbil9O3JuLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3AoZSl9O3JuLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9O3JuLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfTtybi5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259O3JuLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX07cm4ucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QoZSl9O3JuLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocm4ucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPWV9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPWV9fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz1lPT09ITA/V246UWR9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYZmUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO2Z1bmN0aW9uIFowcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLiIpLG5ldyBRMyhlLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPWV9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9ZX19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZX19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZX19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PWV9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PWV9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PWV9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PWV9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1lfX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lfX19KTtENi5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRFUoKS5sb2FkKGUsZnVuY3Rpb24obil7dC5zZXRCdWZmZXIobil9KSx0aGlzfTtGVS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O0ozLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKGUsdCl9O0ozLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKGUsdCxyLG4pfTtLZi5jcm9zc09yaWdpbj12b2lkIDA7S2YubG9hZFRleHR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgQVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCBpPW5ldyBUVTtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPWkubG9hZChlLHIsdm9pZCAwLG4pO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07S2YubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O2Z1bmN0aW9uIEowcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX1mdW5jdGlvbiBRMHIoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuIil9dmFyIHRfcj17Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGF0dGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9fTtmdW5jdGlvbiBlX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfWZ1bmN0aW9uIHJfcigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcyIpLG5ldyBQZX1mdW5jdGlvbiBuX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gaV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyIpfWZ1bmN0aW9uIG9fcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBhX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4iKX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246alV9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPWpVKTt2YXIgbnBlPXt0eXBlOiJjaGFuZ2UifSxIaHQ9e3R5cGU6InN0YXJ0In0saXBlPXt0eXBlOiJlbmQifSxKVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSxyPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLHI9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9cix0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgaix0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6IkFycm93TGVmdCIsVVA6IkFycm93VXAiLFJJR0hUOiJBcnJvd1JpZ2h0IixCT1RUT006IkFycm93RG93biJ9LHRoaXMubW91c2VCdXR0b25zPXtMRUZUOkswLlJPVEFURSxNSURETEU6SzAuRE9MTFksUklHSFQ6SzAuUEFOfSx0aGlzLnRvdWNoZXM9e09ORTpaMC5ST1RBVEUsVFdPOlowLkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnRoZXRhfSx0aGlzLmdldERpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0LnBvc2l0aW9uLmRpc3RhbmNlVG8odGhpcy50YXJnZXQpfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKG50KXtudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmciksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KG5wZSksbi51cGRhdGUoKSxvPWkuTk9ORX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGosQ3Q9bmV3IHlpKCkuc2V0RnJvbVVuaXRWZWN0b3JzKHQudXAsbmV3IGooMCwxLDApKSxXdD1DdC5jbG9uZSgpLmludmVydCgpLGZlPW5ldyBqLGF0PW5ldyB5aSxzZT0yKk1hdGguUEk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IENlPW4ub2JqZWN0LnBvc2l0aW9uO250LmNvcHkoQ2UpLnN1YihuLnRhcmdldCksbnQuYXBwbHlRdWF0ZXJuaW9uKEN0KSxzLnNldEZyb21WZWN0b3IzKG50KSxuLmF1dG9Sb3RhdGUmJm89PT1pLk5PTkUmJkQoaygpKSxuLmVuYWJsZURhbXBpbmc/KHMudGhldGErPWwudGhldGEqbi5kYW1waW5nRmFjdG9yLHMucGhpKz1sLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihzLnRoZXRhKz1sLnRoZXRhLHMucGhpKz1sLnBoaSk7bGV0IFB0PW4ubWluQXppbXV0aEFuZ2xlLE50PW4ubWF4QXppbXV0aEFuZ2xlO3JldHVybiBpc0Zpbml0ZShQdCkmJmlzRmluaXRlKE50KSYmKFB0PC1NYXRoLlBJP1B0Kz1zZTpQdD5NYXRoLlBJJiYoUHQtPXNlKSxOdDwtTWF0aC5QST9OdCs9c2U6TnQ+TWF0aC5QSSYmKE50LT1zZSksUHQ8PU50P3MudGhldGE9TWF0aC5tYXgoUHQsTWF0aC5taW4oTnQscy50aGV0YSkpOnMudGhldGE9cy50aGV0YT4oUHQrTnQpLzI/TWF0aC5tYXgoUHQscy50aGV0YSk6TWF0aC5taW4oTnQscy50aGV0YSkpLHMucGhpPU1hdGgubWF4KG4ubWluUG9sYXJBbmdsZSxNYXRoLm1pbihuLm1heFBvbGFyQW5nbGUscy5waGkpKSxzLm1ha2VTYWZlKCkscy5yYWRpdXMqPWMscy5yYWRpdXM9TWF0aC5tYXgobi5taW5EaXN0YW5jZSxNYXRoLm1pbihuLm1heERpc3RhbmNlLHMucmFkaXVzKSksbi5lbmFibGVEYW1waW5nPT09ITA/bi50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHUsbi5kYW1waW5nRmFjdG9yKTpuLnRhcmdldC5hZGQodSksbnQuc2V0RnJvbVNwaGVyaWNhbChzKSxudC5hcHBseVF1YXRlcm5pb24oV3QpLENlLmNvcHkobi50YXJnZXQpLmFkZChudCksbi5vYmplY3QubG9va0F0KG4udGFyZ2V0KSxuLmVuYWJsZURhbXBpbmc9PT0hMD8obC50aGV0YSo9MS1uLmRhbXBpbmdGYWN0b3IsbC5waGkqPTEtbi5kYW1waW5nRmFjdG9yLHUubXVsdGlwbHlTY2FsYXIoMS1uLmRhbXBpbmdGYWN0b3IpKToobC5zZXQoMCwwLDApLHUuc2V0KDAsMCwwKSksYz0xLGh8fGZlLmRpc3RhbmNlVG9TcXVhcmVkKG4ub2JqZWN0LnBvc2l0aW9uKT5hfHw4KigxLWF0LmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+YT8obi5kaXNwYXRjaEV2ZW50KG5wZSksZmUuY29weShuLm9iamVjdC5wb3NpdGlvbiksYXQuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSxoPSExLCEwKTohMX19KCksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCksbi5fZG9tRWxlbWVudEtleUV2ZW50cyE9PW51bGwmJm4uX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpfTtsZXQgbj10aGlzLGk9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sbz1pLk5PTkUsYT0xZS02LHM9bmV3IF9NLGw9bmV3IF9NLGM9MSx1PW5ldyBqLGg9ITEsZj1uZXcgTHQscD1uZXcgTHQsZD1uZXcgTHQsZz1uZXcgTHQsXz1uZXcgTHQseT1uZXcgTHQseD1uZXcgTHQsYj1uZXcgTHQsUz1uZXcgTHQsQz1bXSxQPXt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKm4uYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIE8oKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBEKG50KXtsLnRoZXRhLT1udH1mdW5jdGlvbiBCKG50KXtsLnBoaS09bnR9bGV0IEk9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50Lm11bHRpcGx5U2NhbGFyKC1XdCksdS5hZGQobnQpfX0oKSxMPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bi5zY3JlZW5TcGFjZVBhbm5pbmc9PT0hMD9udC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDEpOihudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCxudCkpLG50Lm11bHRpcGx5U2NhbGFyKFd0KSx1LmFkZChudCl9fSgpLFI9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtsZXQgYXQ9bi5kb21FbGVtZW50O2lmKG4ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe2xldCBzZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KHNlKS5zdWIobi50YXJnZXQpO2xldCBRdD1udC5sZW5ndGgoKTtRdCo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEkoMipXdCpRdC9hdC5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxMKDIqZmUqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oSShXdCoobi5vYmplY3QucmlnaHQtbi5vYmplY3QubGVmdCkvbi5vYmplY3Quem9vbS9hdC5jbGllbnRXaWR0aCxuLm9iamVjdC5tYXRyaXgpLEwoZmUqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSxuLmVuYWJsZVBhbj0hMSl9fSgpO2Z1bmN0aW9uIEYobnQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/Yy89bnQ6bi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KG4ub2JqZWN0Lnpvb209TWF0aC5tYXgobi5taW5ab29tLE1hdGgubWluKG4ubWF4Wm9vbSxuLm9iamVjdC56b29tKm50KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLGg9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiB6KG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MqPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbS9udCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gVShudCl7Zi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBXKG50KXt4LnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIFoobnQpe2cuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gcnQobnQpe3Auc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksZC5zdWJWZWN0b3JzKHAsZikubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7bGV0IEN0PW4uZG9tRWxlbWVudDtEKDIqTWF0aC5QSSpkLngvQ3QuY2xpZW50SGVpZ2h0KSxCKDIqTWF0aC5QSSpkLnkvQ3QuY2xpZW50SGVpZ2h0KSxmLmNvcHkocCksbi51cGRhdGUoKX1mdW5jdGlvbiBvdChudCl7Yi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSxTLnN1YlZlY3RvcnMoYix4KSxTLnk+MD9GKE8oKSk6Uy55PDAmJnooTygpKSx4LmNvcHkoYiksbi51cGRhdGUoKX1mdW5jdGlvbiBzdChudCl7Xy5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSx5LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIFN0KG50KXtudC5kZWx0YVk8MD96KE8oKSk6bnQuZGVsdGFZPjAmJkYoTygpKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIGJ0KG50KXtsZXQgQ3Q9ITE7c3dpdGNoKG50LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOlIoMCxuLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5CT1RUT006UigwLC1uLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5MRUZUOlIobi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpSKC1uLmtleVBhblNwZWVkLDApLEN0PSEwO2JyZWFrfUN0JiYobnQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX1mdW5jdGlvbiBNdCgpe2lmKEMubGVuZ3RoPT09MSlmLnNldChDWzBdLnBhZ2VYLENbMF0ucGFnZVkpO2Vsc2V7bGV0IG50PS41KihDWzBdLnBhZ2VYK0NbMV0ucGFnZVgpLEN0PS41KihDWzBdLnBhZ2VZK0NbMV0ucGFnZVkpO2Yuc2V0KG50LEN0KX19ZnVuY3Rpb24gbHQoKXtpZihDLmxlbmd0aD09PTEpZy5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtnLnNldChudCxDdCl9fWZ1bmN0aW9uIEt0KCl7bGV0IG50PUNbMF0ucGFnZVgtQ1sxXS5wYWdlWCxDdD1DWzBdLnBhZ2VZLUNbMV0ucGFnZVksV3Q9TWF0aC5zcXJ0KG50Km50K0N0KkN0KTt4LnNldCgwLFd0KX1mdW5jdGlvbiBfdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVBhbiYmbHQoKX1mdW5jdGlvbiBjdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVJvdGF0ZSYmTXQoKX1mdW5jdGlvbiBYKG50KXtpZihDLmxlbmd0aD09MSlwLnNldChudC5wYWdlWCxudC5wYWdlWSk7ZWxzZXtsZXQgV3Q9YmUobnQpLGZlPS41KihudC5wYWdlWCtXdC54KSxhdD0uNSoobnQucGFnZVkrV3QueSk7cC5zZXQoZmUsYXQpfWQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApfWZ1bmN0aW9uIGV0KG50KXtpZihDLmxlbmd0aD09PTEpXy5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IEN0PWJlKG50KSxXdD0uNSoobnQucGFnZVgrQ3QueCksZmU9LjUqKG50LnBhZ2VZK0N0LnkpO18uc2V0KFd0LGZlKX15LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKX1mdW5jdGlvbiBkdChudCl7bGV0IEN0PWJlKG50KSxXdD1udC5wYWdlWC1DdC54LGZlPW50LnBhZ2VZLUN0LnksYXQ9TWF0aC5zcXJ0KFd0Kld0K2ZlKmZlKTtiLnNldCgwLGF0KSxTLnNldCgwLE1hdGgucG93KGIueS94Lnksbi56b29tU3BlZWQpKSxGKFMueSkseC5jb3B5KGIpfWZ1bmN0aW9uIHEobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUGFuJiZldChudCl9ZnVuY3Rpb24gcHQobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUm90YXRlJiZYKG50KX1mdW5jdGlvbiBodChudCl7bi5lbmFibGVkIT09ITEmJihDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUobnQucG9pbnRlcklkKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCkpLCR0KG50KSxudC5wb2ludGVyVHlwZT09PSJ0b3VjaCI/dHQobnQpOmVlKG50KSl9ZnVuY3Rpb24gd3QobnQpe24uZW5hYmxlZCE9PSExJiYobnQucG9pbnRlclR5cGU9PT0idG91Y2giPyQobnQpOkxlKG50KSl9ZnVuY3Rpb24ga3QobnQpe2hlKG50KSxDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSxuLmRpc3BhdGNoRXZlbnQoaXBlKSxvPWkuTk9ORX1mdW5jdGlvbiBpZShudCl7aGUobnQpfWZ1bmN0aW9uIGVlKG50KXtsZXQgQ3Q7c3dpdGNoKG50LmJ1dHRvbil7Y2FzZSAwOkN0PW4ubW91c2VCdXR0b25zLkxFRlQ7YnJlYWs7Y2FzZSAxOkN0PW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6Q3Q9bi5tb3VzZUJ1dHRvbnMuUklHSFQ7YnJlYWs7ZGVmYXVsdDpDdD0tMX1zd2l0Y2goQ3Qpe2Nhc2UgSzAuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO1cobnQpLG89aS5ET0xMWTticmVhaztjYXNlIEswLlJPVEFURTppZihudC5jdHJsS2V5fHxudC5tZXRhS2V5fHxudC5zaGlmdEtleSl7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1lbHNle2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9YnJlYWs7Y2FzZSBLMC5QQU46aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9ZWxzZXtpZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtaKG50KSxvPWkuUEFOfWJyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9byE9PWkuTk9ORSYmbi5kaXNwYXRjaEV2ZW50KEhodCl9ZnVuY3Rpb24gTGUobnQpe2lmKG4uZW5hYmxlZCE9PSExKXN3aXRjaChvKXtjYXNlIGkuUk9UQVRFOmlmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO3J0KG50KTticmVhaztjYXNlIGkuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO290KG50KTticmVhaztjYXNlIGkuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3N0KG50KTticmVha319ZnVuY3Rpb24gYXIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVpvb209PT0hMXx8byE9PWkuTk9ORXx8KG50LnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaEV2ZW50KEhodCksU3QobnQpLG4uZGlzcGF0Y2hFdmVudChpcGUpKX1mdW5jdGlvbiBmcihudCl7bi5lbmFibGVkPT09ITF8fG4uZW5hYmxlUGFuPT09ITF8fGJ0KG50KX1mdW5jdGlvbiB0dChudCl7c3dpdGNoKFR0KG50KSxDLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChuLnRvdWNoZXMuT05FKXtjYXNlIFowLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtNdCgpLG89aS5UT1VDSF9ST1RBVEU7YnJlYWs7Y2FzZSBaMC5QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47bHQoKSxvPWkuVE9VQ0hfUEFOO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChuLnRvdWNoZXMuVFdPKXtjYXNlIFowLkRPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47X3QoKSxvPWkuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgWjAuRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtjdCgpLG89aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uICQobnQpe3N3aXRjaChUdChudCksbyl7Y2FzZSBpLlRPVUNIX1JPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtYKG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47ZXQobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47cShudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtwdChudCksbi51cGRhdGUoKTticmVhaztkZWZhdWx0Om89aS5OT05FfX1mdW5jdGlvbiBJdChudCl7bi5lbmFibGVkIT09ITEmJm50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gJHQobnQpe0MucHVzaChudCl9ZnVuY3Rpb24gaGUobnQpe2RlbGV0ZSBQW250LnBvaW50ZXJJZF07Zm9yKGxldCBDdD0wO0N0PEMubGVuZ3RoO0N0KyspaWYoQ1tDdF0ucG9pbnRlcklkPT1udC5wb2ludGVySWQpe0Muc3BsaWNlKEN0LDEpO3JldHVybn19ZnVuY3Rpb24gVHQobnQpe2xldCBDdD1QW250LnBvaW50ZXJJZF07Q3Q9PT12b2lkIDAmJihDdD1uZXcgTHQsUFtudC5wb2ludGVySWRdPUN0KSxDdC5zZXQobnQucGFnZVgsbnQucGFnZVkpfWZ1bmN0aW9uIGJlKG50KXtsZXQgQ3Q9bnQucG9pbnRlcklkPT09Q1swXS5wb2ludGVySWQ/Q1sxXTpDWzBdO3JldHVybiBQW0N0LnBvaW50ZXJJZF19bi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyLHtwYXNzaXZlOiExfSksdGhpcy51cGRhdGUoKX19O3ZhciBGNj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgbU0sdGhpcy5fY2FudmFzU2l6ZT1udWxsLHRoaXMuX2xheWVyc0NvbmZpZz1udWxsLHRoaXMuX3J1bkNvbG9yPXR9X2lzT2JqZWN0KHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ib2JqZWN0IiYmdCE9bnVsbCYmIUFycmF5LmlzQXJyYXkodCl9X2FwcGx5RGVmYXVsdHModCxyKXtsZXQgbj17fSxpPVt0LHJdO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2ZvcihsZXQgcyBpbiBhKXtsZXQgbD1zIGluIG47dGhpcy5faXNPYmplY3QoYVtzXSk/bltzXT10aGlzLl9hcHBseURlZmF1bHRzKG5bc118fHt9LGFbc10pOmx8fChuW3NdPWFbc10pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYoISghdGhpcy5fbGF5ZXJzQ29uZmlnfHwhdGhpcy5fc2NlbmV8fCF0aGlzLl9sYXN0TWVzaCkpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyB5TSh0aGlzLl9sYXN0TWVzaCxuZXcgbmUoInJnYigwLCAwLCAyNTUpIikpO3RoaXMuX3NjZW5lLmFkZCh0KX1pZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0F4ZXMpe3ZhciByPW5ldyB2TSg1KTt0aGlzLl9zY2VuZS5hZGQocil9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxyKXt2YXIgYSxzLGwsYztpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IHEwO3ZhciBuPW5ldyB3TVt0LmNhbWVyYS5jbHNdKHQuY2FtZXJhLmZvdiwoKGE9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmEud2lkdGgpLygocz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6cy5oZWlnaHQpLHQuY2FtZXJhLm5lYXIsdC5jYW1lcmEuZmFyKTt0aGlzLl9jYW1lcmE9bix0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj12b2lkIDAsdC5jYW1lcmEucG9zaXRpb24mJih0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5wb3NpdGlvbikpLHRoaXMuaW5pdENhbWVyYUxvb2tBdD12b2lkIDAsdC5jYW1lcmEubG9va0F0JiYodGhpcy5pbml0Q2FtZXJhTG9va0F0PW5ldyBqKCkuZnJvbUFycmF5KHQuY2FtZXJhLmxvb2tBdCkpO3ZhciBpPW5ldyBKVShuLHIpO2xldCBvPWk7by5sb29rU3BlZWQ9LjQsby5tb3ZlbWVudFNwZWVkPTIwLG8ubm9GbHk9ITAsby5sb29rVmVydGljYWw9ITAsby5jb25zdHJhaW5WZXJ0aWNhbD0hMCxvLnZlcnRpY2FsTWluPTEsby52ZXJ0aWNhbE1heD0yLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IHJuKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChsPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpsLndpZHRoLChjPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpjLmhlaWdodCksdGhpcy5fcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigxNjc3NzIxNSwxKX1fY2xlYXJTY2VuZSgpe3ZhciB0O2lmKHRoaXMuX3NjZW5lKWZvcig7dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoPjA7KXRoaXMuX3NjZW5lLnJlbW92ZSgodD10aGlzLl9zY2VuZSk9PW51bGw/dm9pZCAwOnQuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3ZhciB0LHIsbjtyZXR1cm57ZmFyOih0PXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnQuZmFyLHBvc2l0aW9uOihyPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnIucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsP3ZvaWQgMDpuLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dmFyIHIsbixpLG87dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhJiYodGhpcy5fY2FtZXJhLmFzcGVjdD0oKHI9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnIud2lkdGgpLygobj10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bi5oZWlnaHQpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX3JlbmRlcmVyLnNldFNpemUoKGk9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmkud2lkdGgsKG89dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm8uaGVpZ2h0KTtsZXQgdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKGEpLHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSx0aGlzLl9jYW1lcmEpfS5iaW5kKHRoaXMpO3QoKX11cGRhdGVTY2VuZSh0LHIpe2xldCBuPXt9OyJjb25maWciaW4gdCYmdC5jb25maWcmJihuPUpTT04ucGFyc2UodC5jb25maWcpKSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImJlZm9yZVVwZGF0ZVNjZW5lIn0pO2xldCBpPXtjYW1lcmE6e2NsczoiUGVyc3BlY3RpdmVDYW1lcmEiLGZvdjo3NSxuZWFyOi4xLGZhcjoxZTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX07bj10aGlzLl9hcHBseURlZmF1bHRzKG4saSksdGhpcy5fY3JlYXRlV29ybGQobixyKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe3ZhciBuLGk7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjsobj10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fG4ucmVzZXQoKTtsZXQgcjshdCYmdGhpcy5fbGFzdE1lc2gmJihyPXRoaXMuX2xhc3RNZXNoKSxyJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChyKSx0aGlzLl9sYXN0TWVzaD1yKSwoaT10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fGkudXBkYXRlKCl9X2NyZWF0ZUdlb21ldHJ5KHQscil7bGV0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixyKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4scil9X2NyZWF0ZVBvaW50Q2xvdWQodCxyKXt2YXIgaDtsZXQgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnMsbz17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9vLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpvLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2xldCBhPXRoaXMuX2FwcGx5RGVmYXVsdHMocixvKSxzPW5ldyBQZSxsPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKHMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGwsMykpLGkmJmkubGVuZ3RoPT1uLmxlbmd0aCl7bGV0IGY9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXT1mW3BdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShmLDMpKX12YXIgYz1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLHU9bmV3IGltKHMsYyk7KGg9dGhpcy5fc2NlbmUpPT1udWxsfHxoLmFkZCh1KSx0aGlzLl9sYXN0TWVzaD11fXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5mYXI9cix0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdGhpcy5fY2FtZXJhQ29udHJvbHMmJih0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7dmFyIHAsZCxnO2xldCBuPW5ldyB0YSxpPW5ldyBqLG89bmV3IGo7bi5zZXRGcm9tT2JqZWN0KHQpLG4uZ2V0Q2VudGVyKGkpLG4uZ2V0U2l6ZShvKTtsZXQgYT1NYXRoLm1heChvLngsby55LG8ueikscz0oKHA9dGhpcy5fY2FtZXJhKT09bnVsbD92b2lkIDA6cC5mb3YpKihNYXRoLlBJLzE4MCksbD1NYXRoLmFicyhhLygyKk1hdGgudGFuKHMvMikpKSoxLjI1LGM9bi5taW4ueix1PWM8MD8tYytsOmwtYyxoPShkPXRoaXMuaW5pdENhbWVyYVBvc2l0aW9uKSE9bnVsbD9kOm5ldyBqKGkueCxpLnksbCksZj0oZz10aGlzLmluaXRDYW1lcmFMb29rQXQpIT1udWxsP2c6aTt0aGlzLnNldENhbWVyYVZpZXdwb2ludChoLHUqMyxmKX1fY3JlYXRlTWVzaCh0LHIpe3ZhciBmO2xldCBuPXQudmVydGljZXMsaT10LmZhY2VzLG89dC5jb2xvcnMsYT10aGlzLl9hcHBseURlZmF1bHRzKHIse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSkscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKTtsZXQgYz1uZXcgVWludDE2QXJyYXkoaS5mbGF0KCkpO2lmKG8mJm8ubGVuZ3RoKXtsZXQgcD1vLmZsYXQoKTtmb3IobGV0IGQ9MDtkPHAubGVuZ3RoO2QrKylwW2RdPXBbZF0vMjU1O3Muc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkocCksMykpLGEubWF0ZXJpYWw9YS5tYXRlcmlhbHx8e30sYS5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITB9cy5jZW50ZXIoKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHMuc2V0SW5kZXgobmV3IEplKGMsMSkpLHMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgdT1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLGg9bmV3IHRpKHMsdSk7aC5jYXN0U2hhZG93PSEwLGgucmVjZWl2ZVNoYWRvdz0hMCwoZj10aGlzLl9zY2VuZSk9PW51bGx8fGYuYWRkKGgpLHRoaXMuX2xhc3RNZXNoPWh9X2NyZWF0ZUxpZ2h0cyh0LHIpe2ZvcihsZXQgbj0wO248ci5saWdodHMubGVuZ3RoO24rKyl7bGV0IGk9ci5saWdodHNbbl0sbz1uZXcgd01baS5jbHNdKGkuY29sb3IsaS5pbnRlbnNpdHkpO2kucG9zaXRpb24mJm8ucG9zaXRpb24uc2V0KGkucG9zaXRpb25bMF0saS5wb3NpdGlvblsxXSxpLnBvc2l0aW9uWzJdKSx0LmFkZChvKX19fTt2YXIgTG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuYWN0aXZlPSExLHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITEsdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMSx0aGlzLl9pc01lc2hMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IElQKHRoaXMucmVxdWVzdE1hbmFnZXIpO2xldCB0PW5ldyBGNih0aGlzLl9ydW5Db2xvcik7dC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVVcGRhdGVTY2VuZSIsdGhpcy5fdXBkYXRlQ2FudmFzU2l6ZS5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX21lc2hWaWV3ZXI9dH1yZWxvYWQoKXshdGhpcy5hY3RpdmV8fCF0aGlzLl9kYXRhUHJvdmlkZXJ8fCh0aGlzLl9pc01lc2hMb2FkaW5nPSEwLHRoaXMuX2RhdGFQcm92aWRlci5yZWxvYWQodGhpcy5ydW4sdGhpcy50YWcsdGhpcy5zYW1wbGUpLnRoZW4odD0+eyF0fHwodGhpcy5fc3RlcHM9dCx0aGlzLl9zdGVwSW5kZXg9dC5sZW5ndGgtMSl9KS5jYXRjaCh0PT57aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHQ9dHx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHQpfSkpfV91cGRhdGVTY2VuZSgpe3ZhciByO2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwOyF0fHwhdC5tZXNofHwodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KChyPXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHIuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfV9kZWJvdW5jZWRGZXRjaE1lc2goKXt0aGlzLmRlYm91bmNlKCJmZXRjaE1lc2giLCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpLDEwMCl9X21heWJlRmV0Y2hNZXNoKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtpZighKCF0fHx0Lm1lc2h8fHQubWVzaEZldGNoaW5nKSl7dC5tZXNoRmV0Y2hpbmc9ITAsdGhpcy5faXNNZXNoTG9hZGluZz0hMDt0cnl7bGV0IHI9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9clswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2gocil7aWYoIXJ8fCFyLmNvZGV8fHIuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHI9cnx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHIpfWZpbmFsbHl7dGhpcy5faXNNZXNoTG9hZGluZz0hMSx0Lm1lc2hGZXRjaGluZz0hMX19fSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UoKXtpZighdGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpcmV0dXJuO2xldCB0PW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIse2RldGFpbDp0aGlzLl9tZXNoVmlld2VyLmdldENhbWVyYVBvc2l0aW9uKCl9KTt0aGlzLmRpc3BhdGNoRXZlbnQodCl9c2V0Q2FtZXJhVmlld3BvaW50KHQscixuKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludCh0LHIsbil9X3VwZGF0ZUNhbnZhc1NpemUoKXtsZXQgdD10aGlzLm9mZnNldFdpZHRoLHI9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQsaT17d2lkdGg6dCxoZWlnaHQ6ci1ufTt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoaSl9cmVkcmF3KCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfV9oYXNBdExlYXN0T25lU3RlcCh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjB9X2hhc011bHRpcGxlU3RlcHModCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWaWV3O3RoaXMuX21lc2hWaWV3ZXImJnQ9PSJhbGwiJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfXRvTG9jYWxlU3RyaW5nXyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07TG4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwic2VsZWN0ZWRWaWV3Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxMbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEY2KV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixJUCldLExuLnByb3RvdHlwZSwiX2RhdGFQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMbi5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxMbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTG4ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExuLnByb3RvdHlwZSwiX2lzTWVzaExvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExuLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiwiYWN0aXZlIiwiX2RhdGFQcm92aWRlciIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcC4qIiwiX21lc2hWaWV3ZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVNjZW5lIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsIl9kZWJvdW5jZWRGZXRjaE1lc2giLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTG4ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW0J0KCJzZWxlY3RlZFZpZXciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVZpZXciLG51bGwpO0xuPUUoW3l0KCJ0Zi1tZXNoLWxvYWRlciIpXSxMbik7dmFyIHBoPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9Ii4qIix0aGlzLl9zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7dmFyIHQ7cmV0dXJuIEFycmF5LmZyb20oKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQodCl7dGhpcy5fc2VsZWN0ZWRWaWV3PT0ic2hhcmUiJiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2gocj0+e3QudGFyZ2V0IT1yJiZyLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfV9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2godD0+e3QucmVkcmF3KCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoc3guaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXN4Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuX2RhdGFOb3RGb3VuZD1pLmxlbmd0aD09PTAsdGhpcy5fcnVuVG9UYWdJbmZvPXJ9KX1fcmVsb2FkTWVzaGVzKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXN4Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBzeC5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSxvZlNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfX07cGgudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scGgucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHBoLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtwaD1FKFt5dCgibWVzaC1kYXNoYm9hcmQiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaCk7dmFyIFFVPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pbnN0YWxsQ29tbWFuZD0icGlwIGluc3RhbGwgLVUgdGVuc29yYm9hcmQtcGx1Z2luLXByb2ZpbGUifV9jb3B5SW5zdGFsbENvbW1hbmQoKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCB0PSgpPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKGkpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pLHI9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dHJ5e3lpZWxkIHQoKSxyLmlubmVyVGV4dD0iQ29waWVkLiJ9Y2F0Y2gobil7ci5pbm5lclRleHQ9IkZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZC4ifX0pfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7bGV0IHQ9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dC5pbm5lclRleHQ9IiJ9fTtRVS50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVUucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCk7UVU9RShbeXQoInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLFFVKTt2YXIgbG09RWUoT2UoKSwxKTt2YXIgemw9RWUoT2UoKSwxKSx0cT1FZSh3bCgpLDEpO3ZhciBubj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6Zm59LHRoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2xldCB0PW5ldyB0cS5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHRxLkF4ZXMuTnVtZXJpYyh0LCJib3R0b20iKSxhY2Nlc3NvcjpyPT5yLnJlY2FsbH19LHRoaXMuX3lWYWx1ZUFjY2Vzc29yPXQ9PnQucHJlY2lzaW9uLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgicHJfY3VydmVzIiwiL3ByX2N1cnZlcyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy50YWcsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9zbW9vdGhpbmdFbmFibGVkPSExfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsbikpfX1fY29tcHV0ZVJ1bkNvbG9yKHQpe3JldHVybiBmbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYXR0YWNoZWQ9ITAsdGhpcy5yZWxvYWQoKX1fZ2V0Q2hhcnREYXRhTG9hZGVyKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIil9cmVsb2FkKCl7aWYoISF0aGlzLl9hdHRhY2hlZCl7aWYodGhpcy5ydW5zLmxlbmd0aD09PTApe3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KTtyZXR1cm59dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVsb2FkKCl9fV9zZXRDaGFydERhdGEoKXt2YXIgdD10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSxyPXRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksbj10aGlzLl9zZXRPZlJlbGV2YW50UnVuczt6bC5mb3JPd24odCwoaSxvKT0+e2xldCBhPXJbb107aWYoIShhJiZ0W29dLnN0ZXA9PT1hLnN0ZXApKXtpZighbltvXSl7dGhpcy5fY2xlYXJTZXJpZXNEYXRhKG8pO3JldHVybn10aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKG8saSl9fSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxyKXtsZXQgbj16bC5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoYSxzKT0+KGFbc109cltzXS5zbGljZSgpLnJldmVyc2UoKSxhKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV09emwubWFwVmFsdWVzKG4scz0+c1thXSk7bGV0IG89dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7by5zZXRTZXJpZXNEYXRhKHQsaSksby5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtsZXQgcj10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTtyLnNldFNlcmllc0RhdGEodCxbXSksci5jb21taXRDaGFuZ2VzKCl9X3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUscj10aGlzLnJ1blRvU3RlcENhcDtsZXQgbj17fTt6bC5mb3JPd24odCwoaSxvKT0+eyFpfHwhaS5sZW5ndGh8fChuW29dPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHJbb10saSkpfSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsbil9X25vdGlmeURhdGFDaGFuZ2UoKXt2YXIgdD10aGlzLl9ydW5Ub0RhdGFPdmVyVGltZTt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodCl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQscil7bGV0IG49TWF0aC5taW4oemwuc29ydGVkSW5kZXgoci5tYXAoaT0+aS5zdGVwKSx0KSxyLmxlbmd0aC0xKTtyZXR1cm4gcltuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiB6bC5maWx0ZXIodCxuPT5yW25dKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe3ZhciB0PXRoaXMuX3J1bnNXaXRoU3RlcEF2YWlsYWJsZTtsZXQgcj17fTtyZXR1cm4gemwuZm9yRWFjaCh0LG49PntyW25dPSEwfSkscn1fY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bmV3IERhdGUobi53YWxsX3RpbWUqMWUzKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07bm4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW194Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbX3lWYWx1ZUFjY2Vzc29yXV0iCiAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbX2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgZGVmYXVsdC15LXJhbmdlPSJbW19kZWZhdWx0WVJhbmdlXV0iCiAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICBkYXRhLXNlcmllcz0iW1tydW5zXV0iCiAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgID48L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CgogICAgPGRpdiBpZD0iYnV0dG9ucy1yb3ciPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic3RlcC1sZWdlbmQiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFN0ZXBBdmFpbGFibGVdXSIgYXM9InJ1biI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1ib3giCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiBbW19jb21wdXRlUnVuQ29sb3IocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4KICAgICAgICAgID48YnIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3YWxsLXRpbWUtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIChbW19jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dKQogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgI3N0ZXAtbGVnZW5kIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBtYXJnaW46IDVweCAwIDVweCAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jb2xvci1ib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CiAgICAgIC5zdGVwLWxhYmVsLXRleHQgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC53YWxsLXRpbWUtbGFiZWwtdGV4dCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbm4ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLG5uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sbm4ucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFGaWVsZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxubi5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQnQoInJ1bnMiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX3J1blRvUHJDdXJ2ZUVudHJ5IiwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLCJfc2V0T2ZSZWxldmFudFJ1bnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCk7RShbQnQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsInJ1blRvU3RlcENhcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sbm4ucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpO0UoW1J0KCJydW5zIiwiX3J1blRvUHJDdXJ2ZUVudHJ5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxubi5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpO0UoW1J0KCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpO25uPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1jYXJkIildLG5uKTt2YXIgU009RWUoT2UoKSwxKTt2YXIgZXA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVuVG9TdGVwSW5kZXg9e319X2NvbXB1dGVDb2xvckZvclJ1bih0KXtyZXR1cm4gZm4odCl9X2NvbXB1dGVUaW1lVGV4dEZvclJ1bih0LHIsbixpKXtsZXQgbz1yW25dO2lmKCFTTS5pc051bWJlcihvKSlyZXR1cm4iIjtsZXQgYT10W25dO2lmKCFhKXJldHVybiIiO2xldCBzPWFbb11baV07aWYoaT09PSJzdGVwIilyZXR1cm5gc3RlcCAke3N9YDtpZihpPT09InJlbGF0aXZlIilyZXR1cm4gczwxP2AkeyhzKjFlMykudG9GaXhlZCgyKX0gbXNgOmAke3MudG9GaXhlZCgyKX0gc2A7aWYoaT09PSJ3YWxsX3RpbWUiKXJldHVybiBuZXcgRGF0ZShzKjFlMykudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2xldCByPXQudGFyZ2V0LmRhdGFzZXQucnVuLG49dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsaT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtpc05hTihuKT9kZWxldGUgaVtyXTppW3JdPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLHRoaXMuX3J1blRvU3RlcEluZGV4PWl9X2NvbXB1dGVNYXhTdGVwSW5kZXhGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztsZXQgcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTTS5mb3JPd24odCwobixpKT0+e1NNLmlzTnVtYmVyKHJbaV0pfHwocltpXT1uLmxlbmd0aC0xKX0pLHRoaXMuX3J1blRvU3RlcEluZGV4PXJ9X2dldFN0ZXAodCxyKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbcl06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LHIpe2xldCBuPXt9O3JldHVybiBTTS5mb3JPd24ociwoaSxvKT0+e2xldCBhPXRbb107IWF8fChuW29dPWFbaV0uc3RlcCl9KSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5zLHI9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX19O2VwLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZXAucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGVwLnByb3RvdHlwZSwidGltZURpc3BsYXlUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlcC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpO0UoW1J0KCJydW5zIiwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZXAucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKTtlcD1FKFt5dCgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sZXApO3ZhciBrbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYobG0uaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWxtLm1hcFZhbHVlcyhyLG89PmxtLmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkQ2FyZHMoKXt2YXIgdDtsbS5mb3JFYWNoKCh0PXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWxtLm1hcFZhbHVlcyh0LG89Pk9iamVjdC5rZXlzKG8pKTtyZXR1cm4gaEUoaSxyLG4pfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMscj10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHQuZmlsdGVyKG49PnJbbl0pfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9e307ci5mb3JFYWNoKGE9PntpW2FdPXRbYV1bbl19KTtsZXQgbz1uLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBvUihpLG8pfV9jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2sodCl7cmV0dXJuIHI9Pnt0aGlzLnNldCgiX3RhZ1RvUnVuVG9EYXRhIixNeChLbCh7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTpyfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtsZXQgcj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyh0KSlmb3IobGV0W2Fdb2YgT2JqZWN0LmVudHJpZXMobykpKHJbYV09PW51bGx8fGk8clthXSkmJihyW2FdPWkpO2xldCBuPXt9O2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgYT10W29dW2ldO25baV09YS5tYXAocz0+KHtzdGVwOnMuc3RlcCx3YWxsX3RpbWU6cy53YWxsX3RpbWUscmVsYXRpdmU6cy53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KSl9cmV0dXJuIG59fTtrby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa28ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxrby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa28ucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7RShbUnQoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCk7RShbUnQoIl90YWdUb1J1blRvRGF0YSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpO2tvPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sa28pO3ZhciBCNj1FZShPZSgpLDEpO3ZhciB1bz1jbGFzcyBleHRlbmRzIEd0KG5iKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3ZhciB0PXRoaXMuX3Ntb290aGluZ1dlaWdodDtyZXR1cm4gdD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1OYS5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoQjYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPUI2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENoYXJ0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3VwZGF0ZUNhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGksbz1uLGE9QjYubWFwVmFsdWVzKHQscz0+T2JqZWN0LmtleXMocykpO2k9aEUoYSxyLG8pLGkuZm9yRWFjaChzPT57cy5pdGVtcz1zLml0ZW1zLm1hcChsPT4oe3RhZzpsLnRhZyxzZXJpZXM6bC5ydW5zLm1hcChjPT4oe3J1bjpjLHRhZzpsLnRhZ30pKX0pKX0pLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsaSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQscixuKXtsZXQgaT10Lm5hbWUsbz1uLnRhZyxhPXt9O24uc2VyaWVzLmZvckVhY2goKHtydW46dX0pPT57YVt1XT1yW3VdW29dfSk7bGV0IHM9by5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpLHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmN9PW9SKGEscyk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuUFJFRklYX0dST1VQJiZjLnN0YXJ0c1dpdGgoaSsiLyIpJiYoYz1jLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfX19O3VvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJzaG93LWRvd25sb2FkLWxpbmtzIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSIKICAgICAgICAgICAgICAgID5TaG93IGRhdGEgZG93bmxvYWQgbGlua3M8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJpZ25vcmUteS1vdXRsaWVyIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iCiAgICAgICAgICAgICAgICA+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0iMCIKICAgICAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQKICAgICAgICAgICAgICB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IgogICAgICAgICAgICAgIHN0ZXA9IjAuMDAxIgogICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICBtYXg9IjAuOTk5IgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHNjYWxhciBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgYmF0Y2gtc2l6ZT0iW1tmZWF0dXJlRmxhZ3Muc2NhbGFyc0JhdGNoU2l6ZV1dIgogICAgICAgICAgICAgICAgICBpbi1jb2xhYj0iW1tmZWF0dXJlRmxhZ3MuaW5Db2xhYl1dIgogICAgICAgICAgICAgICAgPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1by5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1by5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx1by5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1by5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtCdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdW8ucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCk7dW89RShbeXQoInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sdW8pO3ZhciBvcGU9RWUoT2UoKSwxKTt2YXIgZGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgYW59Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1fY2hhbmdlUnVuQ29sb3IoKXt2YXIgdD10aGlzLl9ydW5Db2xvcjt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dH0pfWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9X2UoKSxyPU1pKHQucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLG1hcmtkb3duOnRoaXMubWFya2Rvd25FbmFibGVkPyJ0cnVlIjoiZmFsc2UifSksbj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgbz1pLnZhbHVlLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhLndhbGxfdGltZSoxZTMpLHN0ZXA6YS5zdGVwLHRleHQ6YS50ZXh0fSkpO3RoaXMuc2V0KCJfdGV4dHMiLG8uc2xpY2UoKS5yZXZlcnNlKCkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIHhuKCIsIikodCl9fTtkaC50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwKICAgICAgZWxldmF0aW9uPSIxIgogICAgICBpZD0ic3RlcHMtY29udGFpbmVyIgogICAgICBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdGV4dHNdXSI+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InN0ZXAtY29udGFpbmVyIj4KICAgICAgICAgIHN0ZXAgPHNwYW4gY2xhc3M9InN0ZXAtdmFsdWUiPltbX2Zvcm1hdFN0ZXAoaXRlbS5zdGVwKV1dPC9zcGFuPgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InRleHQiPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tpdGVtLnRleHRdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAjc3RlcHMtY29udGFpbmVyIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgLyogY29sb3IgY29tcHV0ZWQgYW5kIHNldCBhcyBpbmxpbmUgc3R5bGUgKi87CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXRiLXRleHQtbG9hZGVyLW91dGxpbmUpOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkaC5wcm90b3R5cGUsIm1hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZGgucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxkaC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sZGgucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkaC5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoIl9ydW5Db2xvciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGgucHJvdG90eXBlLCJfY2hhbmdlUnVuQ29sb3IiLG51bGwpO2RoPUUoW3l0KCJ0Zi10ZXh0LWxvYWRlciIpXSxkaCk7dmFyIFFjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fbWFya2Rvd25FbmFibGVkPXZwKCJfbWFya2Rvd25FbmFibGVkIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlcj14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX21hcmtkb3duRW5hYmxlZE9ic2VydmVyKF9tYXJrZG93bkVuYWJsZWQpIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihvcGUuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnKSlyZXR1cm47bGV0IG49JGkocik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLG4ubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRUZXh0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWcscj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIFFsKHQscixuKX1fbWFya2Rvd25FbmFibGVkT2JzZXJ2ZXIoKXt0aGlzLl9yZWxvYWRUZXh0cygpfX07UWMudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X21hcmtkb3duRW5hYmxlZH19IgogICAgICAgICAgICAgID5FbmFibGUgTWFya2Rvd248L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSB0ZXh0IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi10ZXh0LWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBtYXJrZG93bi1lbmFibGVkPSJbW19tYXJrZG93bkVuYWJsZWRdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfbWFya2Rvd25FbmFibGVkU3RvcmFnZU9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfbWFya2Rvd25FbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRYy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUWMucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUWMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1FjPUUoW3l0KCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxRYyk7dmFyIFZodD1jbGFzcyBleHRlbmRzIEd0KG10KXt9O1ZodC50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgV2hhdC1JZiBUb29sIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgVGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWlyLWNvZGUuZ2l0aHViLmlvL2xpdC8iCiAgICAgICAgICA+TGVhcm5pbmcgSW50ZXJwcmV0YWJpbGl0eSBUb29sIChMSVQpPC9hCiAgICAgICAgPgogICAgICAgIGlzIGFuIGFjdGl2ZWx5IG1haW50YWluZWQgYWx0ZXJuYXRpdmUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvc2V0dXAvIj5oZXJlPC9hPiB0byBpbnN0YWxsIGFuZAogICAgICAgIHVzZSB0aGlzIHRvb2wuCiAgICAgIDwvcD4KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQoKICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIH0KICAgICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQogICAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQogICAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgIDwvZGl2PgogIGA7Vmh0PUUoW3l0KCJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIildLFZodCk7dmFyIGFwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1SQn19O2FwZT1FKFt5dCgidGYtYmFja2VuZCIpXSxhcGUpO3ZhciBzcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPWZufX07c3BlPUUoW3l0KCJ0Zi1jb2xvci1zY2FsZSIpXSxzcGUpO3ZhciBscGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2ZlYXR1cmVfZmxhZ3M9dFd9fTtscGU9RShbeXQoInRmLWZlYXR1cmUtZmxhZ3MiKV0sbHBlKTt2YXIgY3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPWtXfX07Y3BlPUUoW3l0KCJ0Zi1nbG9iYWxzIildLGNwZSk7dmFyIFVodD17fTtLcyhVaHQse1RmRG9tUmVwZWF0OigpPT5PaSxhZGRMaW1pdExpc3RlbmVyOigpPT5VVyxnZXRMaW1pdDooKT0+R1cscmVtb3ZlTGltaXRMaXN0ZW5lcjooKT0+cVcsc2V0TGltaXQ6KCk9Pm4yZX0pO3ZhciB1cGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PVVodH19O3VwZT1FKFt5dCgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sdXBlKTt2YXIgaHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPU9CfX07aHBlPUUoW3l0KCJ0Zi1zdG9yYWdlIildLGhwZSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIFV1ZT1PYmplY3QuY3JlYXRlLE1PPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx6dWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixqdWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsR3VlPU9iamVjdC5nZXRQcm90b3R5cGVPZixXdWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx1OD0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLFNPPShuLHQpPT57Zm9yKHZhciBlIGluIHQpTU8obixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LGQ4PShuLHQsZSk9PihlPW51bGwhPW4/VXVlKEd1ZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIGp1ZSh0KSkhV3VlLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYmTU8obixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9enVlKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTpNTyhlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLFc4PXU4KChkUWUseVMpPT57dmFyIE04LFM4LEU4LFQ4LEQ4LEE4LEk4LFA4LFI4LF9TLFZPLE84LGs4LEY4LG1nLE44LEw4LEI4LFY4LEg4LFU4LHo4LGo4LEc4LHZTOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8scyl7cmV0dXJuIGlbb109cj9yKG8scyk6c319ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgeVMmJiJvYmplY3QiPT10eXBlb2YgeVMuZXhwb3J0cz9lKHQsZSh5Uy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07TTg9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LFM4PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEscz1hcmd1bWVudHMubGVuZ3RoO288cztvKyspZm9yKHZhciBhIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpJiYoaVthXT1yW2FdKTtyZXR1cm4gaX0sRTg9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIHMgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmci5pbmRleE9mKHMpPDAmJihvW3NdPWlbc10pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT0wO2ZvcihzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7YTxzLmxlbmd0aDthKyspci5pbmRleE9mKHNbYV0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLHNbYV0pJiYob1tzW2FdXT1pW3NbYV1dKX1yZXR1cm4gb30sVDg9ZnVuY3Rpb24oaSxyLG8scyl7dmFyIGMsYT1hcmd1bWVudHMubGVuZ3RoLGw9YTwzP3I6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6cztpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxzKTtlbHNlIGZvcih2YXIgdT1pLmxlbmd0aC0xO3U+PTA7dS0tKShjPWlbdV0pJiYobD0oYTwzP2MobCk6YT4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBhPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sRDg9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtyKG8scyxpKX19LEE4PWZ1bmN0aW9uKGkscil7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShpLHIpfSxJOD1mdW5jdGlvbihpLHIsbyxzKXtyZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUoaCl7dHJ5e3Aocy5uZXh0KGgpKX1jYXRjaChmKXtjKGYpfX1mdW5jdGlvbiBkKGgpe3RyeXtwKHMudGhyb3coaCkpfWNhdGNoKGYpe2MoZil9fWZ1bmN0aW9uIHAoaCl7aC5kb25lP2woaC52YWx1ZSk6ZnVuY3Rpb24obCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfShoLnZhbHVlKS50aGVuKHUsZCl9cCgocz1zLmFwcGx5KGkscnx8W10pKS5uZXh0KCkpfSl9LFA4PWZ1bmN0aW9uKGkscil7dmFyIHMsYSxsLGMsbz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZsWzBdKXRocm93IGxbMV07cmV0dXJuIGxbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShwKXtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKHMpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxwWzBdJiYobz0wKSksbzspdHJ5e2lmKHM9MSxhJiYobD0yJnBbMF0/YS5yZXR1cm46cFswXT9hLnRocm93fHwoKGw9YS5yZXR1cm4pJiZsLmNhbGwoYSksMCk6YS5uZXh0KSYmIShsPWwuY2FsbChhLHBbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChhPTAsbCYmKHA9WzImcFswXSxsLnZhbHVlXSkscFswXSl7Y2FzZSAwOmNhc2UgMTpsPXA7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOnBbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxhPXBbMV0scD1bMF07Y29udGludWU7Y2FzZSA3OnA9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShsPShsPW8udHJ5cykubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoNj09PXBbMF18fDI9PT1wWzBdKSl7bz0wO2NvbnRpbnVlfWlmKDM9PT1wWzBdJiYoIWx8fHBbMV0+bFswXSYmcFsxXTxsWzNdKSl7by5sYWJlbD1wWzFdO2JyZWFrfWlmKDY9PT1wWzBdJiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPXA7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChwKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9cD1yLmNhbGwoaSxvKX1jYXRjaChoKXtwPVs2LGhdLGE9MH1maW5hbGx5e3M9bD0wfWlmKDUmcFswXSl0aHJvdyBwWzFdO3JldHVybnt2YWx1ZTpwWzBdP3BbMV06dm9pZCAwLGRvbmU6ITB9fShbcCxoXSl9fX0sUjg9ZnVuY3Rpb24oaSxyKXtmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJnZTKHIsaSxvKX0sdlM9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihpLHIsbyxzKXt2b2lkIDA9PT1zJiYocz1vKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk7KCFhfHwoImdldCJpbiBhPyFyLl9fZXNNb2R1bGU6YS53cml0YWJsZXx8YS5jb25maWd1cmFibGUpKSYmKGE9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJbb119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyxhKX06ZnVuY3Rpb24oaSxyLG8scyl7dm9pZCAwPT09cyYmKHM9byksaVtzXT1yW29dfSxfUz1mdW5jdGlvbihpKXt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbz1yJiZpW3JdLHM9MDtpZihvKXJldHVybiBvLmNhbGwoaSk7aWYoaSYmIm51bWJlciI9PXR5cGVvZiBpLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBpJiZzPj1pLmxlbmd0aCYmKGk9dm9pZCAwKSx7dmFsdWU6aSYmaVtzKytdLGRvbmU6IWl9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihyPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0sVk89ZnVuY3Rpb24oaSxyKXt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZpW1N5bWJvbC5pdGVyYXRvcl07aWYoIW8pcmV0dXJuIGk7dmFyIGEsYyxzPW8uY2FsbChpKSxsPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1yfHxyLS0gPjApJiYhKGE9cy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKX1jYXRjaCh1KXtjPXtlcnJvcjp1fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobz1zLnJldHVybikmJm8uY2FsbChzKX1maW5hbGx5e2lmKGMpdGhyb3cgYy5lcnJvcn19cmV0dXJuIGx9LE84PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWk9aS5jb25jYXQoVk8oYXJndW1lbnRzW3JdKSk7cmV0dXJuIGl9LGs4PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAscj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWkrPWFyZ3VtZW50c1tyXS5sZW5ndGg7dmFyIHM9QXJyYXkoaSksYT0wO2ZvcihyPTA7cjxvO3IrKylmb3IodmFyIGw9YXJndW1lbnRzW3JdLGM9MCx1PWwubGVuZ3RoO2M8dTtjKyssYSsrKXNbYV09bFtjXTtyZXR1cm4gc30sRjg9ZnVuY3Rpb24oaSxyLG8pe2lmKG98fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbCxzPTAsYT1yLmxlbmd0aDtzPGE7cysrKShsfHwhKHMgaW4gcikpJiYobHx8KGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwwLHMpKSxsW3NdPXJbc10pO3JldHVybiBpLmNvbmNhdChsfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSl9LG1nPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbWc/KHRoaXMudj1pLHRoaXMpOm5ldyBtZyhpKX0sTjg9ZnVuY3Rpb24oaSxyLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYSxzPW8uYXBwbHkoaSxyfHxbXSksbD1bXTtyZXR1cm4gYT17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhO2Z1bmN0aW9uIGMobSl7c1ttXSYmKGFbbV09ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8seSl7bC5wdXNoKFttLEMsXyx5XSk+MXx8dShtLEMpfSl9KX1mdW5jdGlvbiB1KG0sQyl7dHJ5eyFmdW5jdGlvbihtKXttLnZhbHVlIGluc3RhbmNlb2YgbWc/UHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLGgpOmYobFswXVsyXSxtKX0oc1ttXShDKSl9Y2F0Y2goXyl7ZihsWzBdWzNdLF8pfX1mdW5jdGlvbiBwKG0pe3UoIm5leHQiLG0pfWZ1bmN0aW9uIGgobSl7dSgidGhyb3ciLG0pfWZ1bmN0aW9uIGYobSxDKXttKEMpLGwuc2hpZnQoKSxsLmxlbmd0aCYmdShsWzBdWzBdLGxbMF1bMV0pfX0sTDg9ZnVuY3Rpb24oaSl7dmFyIHIsbztyZXR1cm4gcj17fSxzKCJuZXh0IikscygidGhyb3ciLGZ1bmN0aW9uKGEpe3Rocm93IGF9KSxzKCJyZXR1cm4iKSxyW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBzKGEsbCl7clthXT1pW2FdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6bWcoaVthXShjKSksZG9uZToicmV0dXJuIj09PWF9Omw/bChjKTpjfTpsfX0sQjg9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPV9TKGkpLG89e30scygibmV4dCIpLHMoInRocm93IikscygicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gcyhsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGQpeyFmdW5jdGlvbihsLGMsdSxkKXtQcm9taXNlLnJlc29sdmUoZCkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6dX0pfSxjKX0odSxkLChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxWOD1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTtIOD1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmdlMocixpLG8pO3JldHVybiBlKHIsaSkscn0sVTg9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSx6OD1mdW5jdGlvbihpLHIsbyxzKXtpZigiYSI9PT1vJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/czoiYSI9PT1vP3MuY2FsbChpKTpzP3MudmFsdWU6ci5nZXQoaSl9LGo4PWZ1bmN0aW9uKGkscixvLHMsYSl7aWYoIm0iPT09cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1zJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09cz9hLmNhbGwoaSxvKTphP2EudmFsdWU9bzpyLnNldChpLG8pLG99LEc4PWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixNOCksbigiX19hc3NpZ24iLFM4KSxuKCJfX3Jlc3QiLEU4KSxuKCJfX2RlY29yYXRlIixUOCksbigiX19wYXJhbSIsRDgpLG4oIl9fbWV0YWRhdGEiLEE4KSxuKCJfX2F3YWl0ZXIiLEk4KSxuKCJfX2dlbmVyYXRvciIsUDgpLG4oIl9fZXhwb3J0U3RhciIsUjgpLG4oIl9fY3JlYXRlQmluZGluZyIsdlMpLG4oIl9fdmFsdWVzIixfUyksbigiX19yZWFkIixWTyksbigiX19zcHJlYWQiLE84KSxuKCJfX3NwcmVhZEFycmF5cyIsazgpLG4oIl9fc3ByZWFkQXJyYXkiLEY4KSxuKCJfX2F3YWl0IixtZyksbigiX19hc3luY0dlbmVyYXRvciIsTjgpLG4oIl9fYXN5bmNEZWxlZ2F0b3IiLEw4KSxuKCJfX2FzeW5jVmFsdWVzIixCOCksbigiX19tYWtlVGVtcGxhdGVPYmplY3QiLFY4KSxuKCJfX2ltcG9ydFN0YXIiLEg4KSxuKCJfX2ltcG9ydERlZmF1bHQiLFU4KSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Iix6OCksbigiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsajgpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRzgpfSl9KSxaWT11OChWMz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbixNcD1WMyYmVjMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24obix0LGUpe2lmKGV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbyxpPTAscj10Lmxlbmd0aDtpPHI7aSsrKShvfHwhKGkgaW4gdCkpJiYob3x8KG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxvW2ldPXRbaV0pO3JldHVybiBuLmNvbmNhdChvfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9O249ZnVuY3Rpb24oKXshZnVuY3Rpb24oVil7dmFyIHRlPVYucGVyZm9ybWFuY2U7ZnVuY3Rpb24gZGUoYnQpe3RlJiZ0ZS5tYXJrJiZ0ZS5tYXJrKGJ0KX1mdW5jdGlvbiBTKGJ0LF9lKXt0ZSYmdGUubWVhc3VyZSYmdGUubWVhc3VyZShidCxfZSl9ZGUoIlpvbmUiKTt2YXIgTD1WLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBxKGJ0KXtyZXR1cm4gTCtidH12YXIgWj0hMD09PVZbcSgiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoVi5ab25lKXtpZihafHwiZnVuY3Rpb24iIT10eXBlb2YgVi5ab25lLl9fc3ltYm9sX18pdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3JldHVybiBWLlpvbmV9dmFyIGNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUpe3RoaXMuX3BhcmVudD1fZSx0aGlzLl9uYW1lPWJlP2JlLm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPWJlJiZiZS5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3ICRlKHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxiZSl9cmV0dXJuIGJ0LmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYoVi5Qcm9taXNlIT09a24uWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIF9lPWJ0LmN1cnJlbnQ7X2UucGFyZW50OylfZT1fZS5wYXJlbnQ7cmV0dXJuIF9lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkci56b25lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKF9lLGJlLERlKXtpZih2b2lkIDA9PT1EZSYmKERlPSExKSxrbi5oYXNPd25Qcm9wZXJ0eShfZSkpe2lmKCFEZSYmWil0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrX2UpfWVsc2UgaWYoIVZbIl9fWm9uZV9kaXNhYmxlXyIrX2VdKXt2YXIgRW49IlpvbmU6IitfZTtkZShFbiksa25bX2VdPWJlKFYsYnQsZ3IpLFMoRW4sRW4pfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihfZSl7dmFyIGJlPXRoaXMuZ2V0Wm9uZVdpdGgoX2UpO2lmKGJlKXJldHVybiBiZS5fcHJvcGVydGllc1tfZV19LGJ0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihfZSl7Zm9yKHZhciBiZT10aGlzO2JlOyl7aWYoYmUuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoX2UpKXJldHVybiBiZTtiZT1iZS5fcGFyZW50fXJldHVybiBudWxsfSxidC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihfZSl7aWYoIV9lKXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsX2UpfSxidC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihfZSxiZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIGZ1bmN0aW9uIGdvdDogIitfZSk7dmFyIERlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxfZSxiZSksRW49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRW4ucnVuR3VhcmRlZChEZSx0aGlzLGFyZ3VtZW50cyxiZSl9fSxidC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsX2UsYmUsRGUsRW4pfWZpbmFsbHl7ZHI9ZHIucGFyZW50fX0sYnQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3ZvaWQgMD09PWJlJiYoYmU9bnVsbCksZHI9e3BhcmVudDpkcix6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxfZSxiZSxEZSxFbil9Y2F0Y2godnIpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHZyKSl0aHJvdyB2cn19ZmluYWxseXtkcj1kci5wYXJlbnR9fSxidC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7aWYoX2Uuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoX2Uuem9uZXx8RHQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKF9lLnN0YXRlIT09Z2l8fF9lLnR5cGUhPT1faSYmX2UudHlwZSE9PU9uKXt2YXIgRW49X2Uuc3RhdGUhPVhuO0VuJiZfZS5fdHJhbnNpdGlvblRvKFhuLFVuKSxfZS5ydW5Db3VudCsrO3ZhciB2cj1xcztxcz1fZSxkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e19lLnR5cGU9PU9uJiZfZS5kYXRhJiYhX2UuZGF0YS5pc1BlcmlvZGljJiYoX2UuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsX2UsYmUsRGUpfWNhdGNoKEhsKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxIbCkpdGhyb3cgSGx9fWZpbmFsbHl7X2Uuc3RhdGUhPT1naSYmX2Uuc3RhdGUhPT1qaSYmKF9lLnR5cGU9PV9pfHxfZS5kYXRhJiZfZS5kYXRhLmlzUGVyaW9kaWM/RW4mJl9lLl90cmFuc2l0aW9uVG8oVW4sWG4pOihfZS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksRW4mJl9lLl90cmFuc2l0aW9uVG8oZ2ksWG4sZ2kpKSksZHI9ZHIucGFyZW50LHFzPXZyfX19LGJ0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oX2Upe2lmKF9lLnpvbmUmJl9lLnpvbmUhPT10aGlzKWZvcih2YXIgYmU9dGhpcztiZTspe2lmKGJlPT09X2Uuem9uZSl0aHJvdyBFcnJvcigiY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gIi5jb25jYXQodGhpcy5uYW1lLCIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIikuY29uY2F0KF9lLnpvbmUubmFtZSkpO2JlPWJlLnBhcmVudH1fZS5fdHJhbnNpdGlvblRvKGVpLGdpKTt2YXIgRGU9W107X2UuX3pvbmVEZWxlZ2F0ZXM9RGUsX2UuX3pvbmU9dGhpczt0cnl7X2U9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLF9lKX1jYXRjaChFbil7dGhyb3cgX2UuX3RyYW5zaXRpb25UbyhqaSxlaSxnaSksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsRW4pLEVufXJldHVybiBfZS5fem9uZURlbGVnYXRlcz09PURlJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoX2UsMSksX2Uuc3RhdGU9PWVpJiZfZS5fdHJhbnNpdGlvblRvKFVuLGVpKSxfZX0sYnQucHJvdG90eXBlLnNjaGVkdWxlTWljcm9UYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKHduLF9lLGJlLERlLEVuLHZvaWQgMCkpfSxidC5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4sdnIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgV2UoT24sX2UsYmUsRGUsRW4sdnIpKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuLHZyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKF9pLF9lLGJlLERlLEVuLHZyKSl9LGJ0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKF9lKXtpZihfZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhfZS56b25lfHxEdCkubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYoX2Uuc3RhdGU9PT1Vbnx8X2Uuc3RhdGU9PT1Ybil7X2UuX3RyYW5zaXRpb25UbyhWdCxVbixYbik7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsX2UpfWNhdGNoKGJlKXt0aHJvdyBfZS5fdHJhbnNpdGlvblRvKGppLFZ0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxiZSksYmV9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksX2UuX3RyYW5zaXRpb25UbyhnaSxWdCksX2UucnVuQ291bnQ9MCxfZX19LGJ0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKF9lLGJlKXt2YXIgRGU9X2UuX3pvbmVEZWxlZ2F0ZXM7LTE9PWJlJiYoX2UuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciBFbj0wO0VuPERlLmxlbmd0aDtFbisrKURlW0VuXS5fdXBkYXRlVGFza0NvdW50KF9lLnR5cGUsYmUpfSxidH0oKTtjZS5fX3N5bWJvbF9fPXE7dmFyIEppLFVlPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0Lmhhc1Rhc2soYmUsRGUpfSxvblNjaGVkdWxlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0LnNjaGVkdWxlVGFzayhiZSxEZSl9LG9uSW52b2tlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSxFbix2cil7cmV0dXJuIGJ0Lmludm9rZVRhc2soYmUsRGUsRW4sdnIpfSxvbkNhbmNlbFRhc2s6ZnVuY3Rpb24oYnQsX2UsYmUsRGUpe3JldHVybiBidC5jYW5jZWxUYXNrKGJlLERlKX19LCRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUpe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9X2UsdGhpcy5fcGFyZW50RGVsZWdhdGU9YmUsdGhpcy5fZm9ya1pTPURlJiYoRGUmJkRlLm9uRm9yaz9EZTpiZS5fZm9ya1pTKSx0aGlzLl9mb3JrRGxndD1EZSYmKERlLm9uRm9yaz9iZTpiZS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1EZSYmKERlLm9uRm9yaz90aGlzLnpvbmU6YmUuX2ZvcmtDdXJyWm9uZSksdGhpcy5faW50ZXJjZXB0WlM9RGUmJihEZS5vbkludGVyY2VwdD9EZTpiZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9RGUmJihEZS5vbkludGVyY2VwdD9iZTpiZS5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9RGUmJihEZS5vbkludGVyY2VwdD90aGlzLnpvbmU6YmUuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZva2VaUz1EZSYmKERlLm9uSW52b2tlP0RlOmJlLl9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1EZSYmKERlLm9uSW52b2tlP2JlOmJlLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1EZSYmKERlLm9uSW52b2tlP3RoaXMuem9uZTpiZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9RGUmJihEZS5vbkhhbmRsZUVycm9yP0RlOmJlLl9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9RGUmJihEZS5vbkhhbmRsZUVycm9yP2JlOmJlLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9RGUmJihEZS5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTpiZS5faGFuZGxlRXJyb3JDdXJyWm9uZSksdGhpcy5fc2NoZWR1bGVUYXNrWlM9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9EZTpiZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9iZTpiZS5fc2NoZWR1bGVUYXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9RGUmJihEZS5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6YmUuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9RGUmJihEZS5vbkludm9rZVRhc2s/RGU6YmUuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFza0RsZ3Q9RGUmJihEZS5vbkludm9rZVRhc2s/YmU6YmUuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9RGUmJihEZS5vbkludm9rZVRhc2s/dGhpcy56b25lOmJlLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1EZSYmKERlLm9uQ2FuY2VsVGFzaz9EZTpiZS5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1EZSYmKERlLm9uQ2FuY2VsVGFzaz9iZTpiZS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1EZSYmKERlLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6YmUuX2NhbmNlbFRhc2tDdXJyWm9uZSksdGhpcy5faGFzVGFza1pTPW51bGwsdGhpcy5faGFzVGFza0RsZ3Q9bnVsbCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPW51bGwsdGhpcy5faGFzVGFza0N1cnJab25lPW51bGw7dmFyIEVuPURlJiZEZS5vbkhhc1Rhc2s7KEVufHxiZSYmYmUuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9RW4/RGU6VWUsdGhpcy5faGFzVGFza0RsZ3Q9YmUsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1fZSxEZS5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPVVlLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9YmUsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxEZS5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9VWUsdGhpcy5faW52b2tlVGFza0RsZ3Q9YmUsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksRGUub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPVVlLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWJlLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gYnQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oX2UsYmUpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsX2UsYmUpOm5ldyBjZShfZSxiZSl9LGJ0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oX2UsYmUsRGUpe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLF9lLGJlLERlKTpiZX0sYnQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihfZSxiZSxEZSxFbix2cil7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsX2UsYmUsRGUsRW4sdnIpOmJlLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKF9lLGJlKXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLF9lLGJlKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihfZSxiZSl7dmFyIERlPWJlO2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmRGUuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwoRGU9dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxfZSxiZSkpfHwoRGU9YmUpO2Vsc2UgaWYoYmUuc2NoZWR1bGVGbiliZS5zY2hlZHVsZUZuKGJlKTtlbHNle2lmKGJlLnR5cGUhPXduKXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7bW4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmludm9rZVRhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsX2UsYmUsRGUsRW4pOmJlLmNhbGxiYWNrLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oX2UsYmUpe3ZhciBEZTtpZih0aGlzLl9jYW5jZWxUYXNrWlMpRGU9dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsX2UsYmUpO2Vsc2V7aWYoIWJlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7RGU9YmUuY2FuY2VsRm4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmhhc1Rhc2s9ZnVuY3Rpb24oX2UsYmUpe3RyeXt0aGlzLl9oYXNUYXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLF9lLGJlKX1jYXRjaChEZSl7dGhpcy5oYW5kbGVFcnJvcihfZSxEZSl9fSxidC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihfZSxiZSl7dmFyIERlPXRoaXMuX3Rhc2tDb3VudHMsRW49RGVbX2VdLHZyPURlW19lXT1FbitiZTtpZih2cjwwKXRocm93IG5ldyBFcnJvcigiTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPUVuJiYwIT12cnx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOkRlLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpEZS5tYWNyb1Rhc2s+MCxldmVudFRhc2s6RGUuZXZlbnRUYXNrPjAsY2hhbmdlOl9lfSl9LGJ0fSgpLFdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUsRW4sdnIsSGwpe2lmKHRoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVsZWQiLHRoaXMudHlwZT1fZSx0aGlzLnNvdXJjZT1iZSx0aGlzLmRhdGE9RW4sdGhpcy5zY2hlZHVsZUZuPXZyLHRoaXMuY2FuY2VsRm49SGwsIURlKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPURlO3ZhciBldD10aGlzO3RoaXMuaW52b2tlPV9lPT09X2kmJkVuJiZFbi51c2VHP2J0Lmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gYnQuaW52b2tlVGFzay5jYWxsKFYsZXQsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gYnQuaW52b2tlVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7X2V8fChfZT10aGlzKSxEcisrO3RyeXtyZXR1cm4gX2UucnVuQ291bnQrKyxfZS56b25lLnJ1blRhc2soX2UsYmUsRGUpfWZpbmFsbHl7MT09RHImJlJuKCksRHItLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidC5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJzdGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxidC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKGdpLGVpKX0sYnQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oX2UsYmUsRGUpe2lmKHRoaXMuX3N0YXRlIT09YmUmJnRoaXMuX3N0YXRlIT09RGUpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdCh0aGlzLnR5cGUsIiAnIikuY29uY2F0KHRoaXMuc291cmNlLCInOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyIpLmNvbmNhdChfZSwiJywgZXhwZWN0aW5nIHN0YXRlICciKS5jb25jYXQoYmUsIiciKS5jb25jYXQoRGU/IiBvciAnIitEZSsiJyI6IiIsIiwgd2FzICciKS5jb25jYXQodGhpcy5fc3RhdGUsIicuIikpO3RoaXMuX3N0YXRlPV9lLF9lPT1naSYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGJ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEmJnR5cGVvZiB0aGlzLmRhdGEuaGFuZGxlSWQ8InUiP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sYnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fSxidH0oKSxydD1xKCJzZXRUaW1lb3V0IiksZHQ9cSgiUHJvbWlzZSIpLFR0PXEoInRoZW4iKSxBdD1bXSxjbj0hMTtmdW5jdGlvbiB4aShidCl7aWYoSml8fFZbZHRdJiYoSmk9VltkdF0ucmVzb2x2ZSgwKSksSmkpe3ZhciBfZT1KaVtUdF07X2V8fChfZT1KaS50aGVuKSxfZS5jYWxsKEppLGJ0KX1lbHNlIFZbcnRdKGJ0LDApfWZ1bmN0aW9uIG1uKGJ0KXswPT09RHImJjA9PT1BdC5sZW5ndGgmJnhpKFJuKSxidCYmQXQucHVzaChidCl9ZnVuY3Rpb24gUm4oKXtpZighY24pe2Zvcihjbj0hMDtBdC5sZW5ndGg7KXt2YXIgYnQ9QXQ7QXQ9W107Zm9yKHZhciBfZT0wO19lPGJ0Lmxlbmd0aDtfZSsrKXt2YXIgYmU9YnRbX2VdO3RyeXtiZS56b25lLnJ1blRhc2soYmUsbnVsbCxudWxsKX1jYXRjaChEZSl7Z3Iub25VbmhhbmRsZWRFcnJvcihEZSl9fX1nci5taWNyb3Rhc2tEcmFpbkRvbmUoKSxjbj0hMX19dmFyIER0PXtuYW1lOiJOTyBaT05FIn0sZ2k9Im5vdFNjaGVkdWxlZCIsZWk9InNjaGVkdWxpbmciLFVuPSJzY2hlZHVsZWQiLFhuPSJydW5uaW5nIixWdD0iY2FuY2VsaW5nIixqaT0idW5rbm93biIsd249Im1pY3JvVGFzayIsT249Im1hY3JvVGFzayIsX2k9ImV2ZW50VGFzayIsa249e30sZ3I9e3N5bWJvbDpxLGN1cnJlbnRab25lRnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LG9uVW5oYW5kbGVkRXJyb3I6X3IsbWljcm90YXNrRHJhaW5Eb25lOl9yLHNjaGVkdWxlTWljcm9UYXNrOm1uLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWNlW3EoImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hPblByb3BlcnRpZXM6X3IscGF0Y2hNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaE1hY3JvVGFzazpmdW5jdGlvbigpe3JldHVybiBfcn0scGF0Y2hFdmVudFByb3RvdHlwZTpmdW5jdGlvbigpe3JldHVybiBfcn0saXNJRU9yRWRnZTpmdW5jdGlvbigpe3JldHVybiExfSxnZXRHbG9iYWxPYmplY3RzOmZ1bmN0aW9uKCl7fSxPYmplY3REZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBfcn0sT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7fSxPYmplY3RDcmVhdGU6ZnVuY3Rpb24oKXt9LEFycmF5U2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hDbGFzczpmdW5jdGlvbigpe3JldHVybiBfcn0sd3JhcFdpdGhDdXJyZW50Wm9uZTpmdW5jdGlvbigpe3JldHVybiBfcn0sZmlsdGVyUHJvcGVydGllczpmdW5jdGlvbigpe3JldHVybltdfSxhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LF9yZWRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaENhbGxiYWNrczpmdW5jdGlvbigpe3JldHVybiBfcn0sbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6eGl9LGRyPXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBjZShudWxsLG51bGwpfSxxcz1udWxsLERyPTA7ZnVuY3Rpb24gX3IoKXt9UygiWm9uZSIsIlpvbmUiKSxWLlpvbmU9Y2V9KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8Z2xvYmFsKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGk9T2JqZWN0LmNyZWF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZSxvPSJhZGRFdmVudExpc3RlbmVyIixzPSJyZW1vdmVFdmVudExpc3RlbmVyIixhPVpvbmUuX19zeW1ib2xfXyhvKSxsPVpvbmUuX19zeW1ib2xfXyhzKSxjPSJ0cnVlIix1PSJmYWxzZSIsZD1ab25lLl9fc3ltYm9sX18oIiIpO2Z1bmN0aW9uIHAoVix0ZSl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKFYsdGUpfWZ1bmN0aW9uIGgoVix0ZSxkZSxTLEwpe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2soVix0ZSxkZSxTLEwpfXZhciBmPVpvbmUuX19zeW1ib2xfXyxtPXR5cGVvZiB3aW5kb3c8InUiLEM9bT93aW5kb3c6dm9pZCAwLF89bSYmQ3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWw7ZnVuY3Rpb24gSShWLHRlKXtmb3IodmFyIGRlPVYubGVuZ3RoLTE7ZGU+PTA7ZGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgVltkZV0mJihWW2RlXT1wKFZbZGVdLHRlKyJfIitkZSkpO3JldHVybiBWfWZ1bmN0aW9uIE8oVil7cmV0dXJuIVZ8fCExIT09Vi53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgVi5nZXQmJnR5cGVvZiBWLnNldD4idSIpfXZhciBlZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsWD0hKCJudyJpbiBfKSYmdHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSx4ZT0hWCYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksZmU9dHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksdmU9e30sVD1mdW5jdGlvbihWKXtpZihWPVZ8fF8uZXZlbnQpe3ZhciB0ZT12ZVtWLnR5cGVdO3RlfHwodGU9dmVbVi50eXBlXT1mKCJPTl9QUk9QRVJUWSIrVi50eXBlKSk7dmFyIEwsZGU9dGhpc3x8Vi50YXJnZXR8fF8sUz1kZVt0ZV07aWYoeGUmJmRlPT09QyYmImVycm9yIj09PVYudHlwZSl7dmFyIHE9VjshMD09PShMPVMmJlMuY2FsbCh0aGlzLHEubWVzc2FnZSxxLmZpbGVuYW1lLHEubGluZW5vLHEuY29sbm8scS5lcnJvcikpJiZWLnByZXZlbnREZWZhdWx0KCl9ZWxzZSBudWxsIT0oTD1TJiZTLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkmJiFMJiZWLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIEx9fTtmdW5jdGlvbiBuZShWLHRlLGRlKXt2YXIgUz1uKFYsdGUpO2lmKCFTJiZkZSYmbihkZSx0ZSkmJihTPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLFMmJlMuY29uZmlndXJhYmxlKXt2YXIgcT1mKCJvbiIrdGUrInBhdGNoZWQiKTtpZighVi5oYXNPd25Qcm9wZXJ0eShxKXx8IVZbcV0pe2RlbGV0ZSBTLndyaXRhYmxlLGRlbGV0ZSBTLnZhbHVlO3ZhciBaPVMuZ2V0LGNlPVMuc2V0LFVlPXRlLnNsaWNlKDIpLCRlPXZlW1VlXTskZXx8KCRlPXZlW1VlXT1mKCJPTl9QUk9QRVJUWSIrVWUpKSxTLnNldD1mdW5jdGlvbihXZSl7dmFyIHJ0PXRoaXM7IXJ0JiZWPT09XyYmKHJ0PV8pLHJ0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WyRlXSYmcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihVZSxUKSxjZSYmY2UuY2FsbChydCxudWxsKSxydFskZV09V2UsImZ1bmN0aW9uIj09dHlwZW9mIFdlJiZydC5hZGRFdmVudExpc3RlbmVyKFVlLFQsITEpKX0sUy5nZXQ9ZnVuY3Rpb24oKXt2YXIgV2U9dGhpcztpZighV2UmJlY9PT1fJiYoV2U9XyksIVdlKXJldHVybiBudWxsO3ZhciBydD1XZVskZV07aWYocnQpcmV0dXJuIHJ0O2lmKFope3ZhciBkdD1aLmNhbGwodGhpcyk7aWYoZHQpcmV0dXJuIFMuc2V0LmNhbGwodGhpcyxkdCksImZ1bmN0aW9uIj09dHlwZW9mIFdlLnJlbW92ZUF0dHJpYnV0ZSYmV2UucmVtb3ZlQXR0cmlidXRlKHRlKSxkdH1yZXR1cm4gbnVsbH0sdChWLHRlLFMpLFZbcV09ITB9fX1mdW5jdGlvbiBsZShWLHRlLGRlKXtpZih0ZSlmb3IodmFyIFM9MDtTPHRlLmxlbmd0aDtTKyspbmUoViwib24iK3RlW1NdLGRlKTtlbHNle3ZhciBMPVtdO2Zvcih2YXIgcSBpbiBWKSJvbiI9PXEuc2xpY2UoMCwyKSYmTC5wdXNoKHEpO2Zvcih2YXIgWj0wO1o8TC5sZW5ndGg7WisrKW5lKFYsTFtaXSxkZSl9fXZhciBoZT1mKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24geWUoVil7dmFyIHRlPV9bVl07aWYodGUpe19bZihWKV09dGUsX1tWXT1mdW5jdGlvbigpe3ZhciBMPUkoYXJndW1lbnRzLFYpO3N3aXRjaChMLmxlbmd0aCl7Y2FzZSAwOnRoaXNbaGVdPW5ldyB0ZTticmVhaztjYXNlIDE6dGhpc1toZV09bmV3IHRlKExbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2hlXT1uZXcgdGUoTFswXSxMWzFdKTticmVhaztjYXNlIDM6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdKTticmVhaztjYXNlIDQ6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdLExbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LG1lKF9bVl0sdGUpO3ZhciBTLGRlPW5ldyB0ZShmdW5jdGlvbigpe30pO2ZvcihTIGluIGRlKSJYTUxIdHRwUmVxdWVzdCI9PT1WJiYicmVzcG9uc2VCbG9iIj09PVN8fGZ1bmN0aW9uKEwpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZVtMXT9fW1ZdLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW2hlXVtMXS5hcHBseSh0aGlzW2hlXSxhcmd1bWVudHMpfTp0KF9bVl0ucHJvdG90eXBlLEwse3NldDpmdW5jdGlvbihxKXsiZnVuY3Rpb24iPT10eXBlb2YgcT8odGhpc1toZV1bTF09cChxLFYrIi4iK0wpLG1lKHRoaXNbaGVdW0xdLHEpKTp0aGlzW2hlXVtMXT1xfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1toZV1bTF19fSl9KFMpO2ZvcihTIGluIHRlKSJwcm90b3R5cGUiIT09UyYmdGUuaGFzT3duUHJvcGVydHkoUykmJihfW1ZdW1NdPXRlW1NdKX19ZnVuY3Rpb24gSihWLHRlLGRlKXtmb3IodmFyIFM9VjtTJiYhUy5oYXNPd25Qcm9wZXJ0eSh0ZSk7KVM9ZShTKTshUyYmVlt0ZV0mJihTPVYpO3ZhciBMPWYodGUpLHE9bnVsbDtpZihTJiYoIShxPVNbTF0pfHwhUy5oYXNPd25Qcm9wZXJ0eShMKSkmJihxPVNbTF09U1t0ZV0sTyhTJiZuKFMsdGUpKSkpe3ZhciBjZT1kZShxLEwsdGUpO1NbdGVdPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKHRoaXMsYXJndW1lbnRzKX0sbWUoU1t0ZV0scSl9cmV0dXJuIHF9ZnVuY3Rpb24gYWUoVix0ZSxkZSl7dmFyIFM9bnVsbDtmdW5jdGlvbiBMKHEpe3ZhciBaPXEuZGF0YTtyZXR1cm4gWi5hcmdzW1ouY2JJZHhdPWZ1bmN0aW9uKCl7cS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxTLmFwcGx5KFoudGFyZ2V0LFouYXJncykscX1TPUooVix0ZSxmdW5jdGlvbihxKXtyZXR1cm4gZnVuY3Rpb24oWixjZSl7dmFyIFVlPWRlKFosY2UpO3JldHVybiBVZS5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIGNlW1VlLmNiSWR4XT9oKFVlLm5hbWUsY2VbVWUuY2JJZHhdLFVlLEwpOnEuYXBwbHkoWixjZSl9fSl9ZnVuY3Rpb24gbWUoVix0ZSl7VltmKCJPcmlnaW5hbERlbGVnYXRlIildPXRlfXZhciBqZT0hMSxNZT0hMTtmdW5jdGlvbiB1dCgpe2lmKGplKXJldHVybiBNZTtqZT0hMDt0cnl7dmFyIFY9Qy5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PVYuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1WLmluZGV4T2YoIlRyaWRlbnQvIil8fC0xIT09Vi5pbmRleE9mKCJFZGdlLyIpKSYmKE1lPSEwKX1jYXRjaHt9cmV0dXJuIE1lfVpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEw9T2JqZWN0LmRlZmluZVByb3BlcnR5LFo9ZGUuc3ltYm9sLGNlPVtdLFVlPSEwPT09VltaKCJESVNBQkxFX1dSQVBQSU5HX1VOQ0FVR0hUX1BST01JU0VfUkVKRUNUSU9OIildLCRlPVooIlByb21pc2UiKSxXZT1aKCJ0aGVuIik7ZGUub25VbmhhbmRsZWRFcnJvcj1mdW5jdGlvbihldCl7aWYoZGUuc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIFJ0PWV0JiZldC5yZWplY3Rpb247UnQ/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5tZXNzYWdlOlJ0LCI7IFpvbmU6IixldC56b25lLm5hbWUsIjsgVGFzazoiLGV0LnRhc2smJmV0LnRhc2suc291cmNlLCI7IFZhbHVlOiIsUnQsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3IoZXQpfX0sZGUubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciBldD1mdW5jdGlvbigpe3ZhciBSdD1jZS5zaGlmdCgpO3RyeXtSdC56b25lLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXt0aHJvdyBSdC50aHJvd09yaWdpbmFsP1J0LnJlamVjdGlvbjpSdH0pfWNhdGNoKHd0KXshZnVuY3Rpb24oZXQpe2RlLm9uVW5oYW5kbGVkRXJyb3IoZXQpO3RyeXt2YXIgUnQ9dGVbZHRdOyJmdW5jdGlvbiI9PXR5cGVvZiBSdCYmUnQuY2FsbCh0aGlzLGV0KX1jYXRjaHt9fSh3dCl9fTtjZS5sZW5ndGg7KWV0KCl9O3ZhciBkdD1aKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEF0KGV0KXtyZXR1cm4gZXQmJmV0LnRoZW59ZnVuY3Rpb24gY24oZXQpe3JldHVybiBldH1mdW5jdGlvbiBKaShldCl7cmV0dXJuIGJlLnJlamVjdChldCl9dmFyIHhpPVooInN0YXRlIiksbW49WigidmFsdWUiKSxSbj1aKCJmaW5hbGx5IiksRHQ9WigicGFyZW50UHJvbWlzZVZhbHVlIiksZ2k9WigicGFyZW50UHJvbWlzZVN0YXRlIiksVW49bnVsbCxWdD0hMTtmdW5jdGlvbiB3bihldCxSdCl7cmV0dXJuIGZ1bmN0aW9uKHd0KXt0cnl7Z3IoZXQsUnQsd3QpfWNhdGNoKEtlKXtncihldCwhMSxLZSl9fX12YXIgT249ZnVuY3Rpb24oKXt2YXIgZXQ9ITE7cmV0dXJuIGZ1bmN0aW9uKHd0KXtyZXR1cm4gZnVuY3Rpb24oKXtldHx8KGV0PSEwLHd0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sa249WigiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIGdyKGV0LFJ0LHd0KXt2YXIgS2U9T24oKTtpZihldD09PXd0KXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiKTtpZihldFt4aV09PT1Vbil7dmFyIFh0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIHd0fHwiZnVuY3Rpb24iPT10eXBlb2Ygd3QpJiYoWHQ9d3QmJnd0LnRoZW4pfWNhdGNoKHNpKXtyZXR1cm4gS2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpLGV0fWlmKFJ0IT09VnQmJnd0IGluc3RhbmNlb2YgYmUmJnd0Lmhhc093blByb3BlcnR5KHhpKSYmd3QuaGFzT3duUHJvcGVydHkobW4pJiZ3dFt4aV0hPT1Vbilxcyh3dCksZ3IoZXQsd3RbeGldLHd0W21uXSk7ZWxzZSBpZihSdCE9PVZ0JiYiZnVuY3Rpb24iPT10eXBlb2YgWHQpdHJ5e1h0LmNhbGwod3QsS2Uod24oZXQsUnQpKSxLZSh3bihldCwhMSkpKX1jYXRjaChzaSl7S2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpfWVsc2V7ZXRbeGldPVJ0O3ZhciBCbj1ldFttbl07aWYoZXRbbW5dPXd0LGV0W1JuXT09PVJuJiYhMD09PVJ0JiYoZXRbeGldPWV0W2dpXSxldFttbl09ZXRbRHRdKSxSdD09PVZ0JiZ3dCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgSW49dGUuY3VycmVudFRhc2smJnRlLmN1cnJlbnRUYXNrLmRhdGEmJnRlLmN1cnJlbnRUYXNrLmRhdGEuX19jcmVhdGlvblRyYWNlX187SW4mJkwod3Qsa24se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOklufSl9Zm9yKHZhciB0aT0wO3RpPEJuLmxlbmd0aDspRHIoZXQsQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10pO2lmKDA9PUJuLmxlbmd0aCYmUnQ9PVZ0KXtldFt4aV09MDt2YXIgbmk9d3Q7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uKGV0KXtyZXR1cm4gZXQmJmV0LnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oZXQuY29uc3RydWN0b3ImJmV0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGV0KTpldD9ldC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldCl9KHd0KSsod3QmJnd0LnN0YWNrPyJcbiIrd3Quc3RhY2s6IiIpKX1jYXRjaChzaSl7bmk9c2l9VWUmJihuaS50aHJvd09yaWdpbmFsPSEwKSxuaS5yZWplY3Rpb249d3QsbmkucHJvbWlzZT1ldCxuaS56b25lPXRlLmN1cnJlbnQsbmkudGFzaz10ZS5jdXJyZW50VGFzayxjZS5wdXNoKG5pKSxkZS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIGV0fXZhciBkcj1aKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIHFzKGV0KXtpZigwPT09ZXRbeGldKXt0cnl7dmFyIFJ0PXRlW2RyXTtSdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJ0JiZSdC5jYWxsKHRoaXMse3JlamVjdGlvbjpldFttbl0scHJvbWlzZTpldH0pfWNhdGNoe31ldFt4aV09VnQ7Zm9yKHZhciB3dD0wO3d0PGNlLmxlbmd0aDt3dCsrKWV0PT09Y2Vbd3RdLnByb21pc2UmJmNlLnNwbGljZSh3dCwxKX19ZnVuY3Rpb24gRHIoZXQsUnQsd3QsS2UsWHQpe3FzKGV0KTt2YXIgQm49ZXRbeGldLEluPUJuPyJmdW5jdGlvbiI9PXR5cGVvZiBLZT9LZTpjbjoiZnVuY3Rpb24iPT10eXBlb2YgWHQ/WHQ6Smk7UnQuc2NoZWR1bGVNaWNyb1Rhc2soIlByb21pc2UudGhlbiIsZnVuY3Rpb24oKXt0cnl7dmFyIHRpPWV0W21uXSxuaT0hIXd0JiZSbj09PXd0W1JuXTtuaSYmKHd0W0R0XT10aSx3dFtnaV09Qm4pO3ZhciBzaT1SdC5ydW4oSW4sdm9pZCAwLG5pJiZJbiE9PUppJiZJbiE9PWNuP1tdOlt0aV0pO2dyKHd0LCEwLHNpKX1jYXRjaChDaSl7Z3Iod3QsITEsQ2kpfX0sd3QpfXZhciBidD1mdW5jdGlvbigpe30sX2U9Vi5BZ2dyZWdhdGVFcnJvcixiZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGV0KFJ0KXt2YXIgd3Q9dGhpcztpZighKHd0IGluc3RhbmNlb2YgZXQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7d3RbeGldPVVuLHd0W21uXT1bXTt0cnl7dmFyIEtlPU9uKCk7UnQmJlJ0KEtlKHduKHd0LCEwKSksS2Uod24od3QsVnQpKSl9Y2F0Y2goWHQpe2dyKHd0LCExLFh0KX19cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LGV0LnJlc29sdmU9ZnVuY3Rpb24oUnQpe3JldHVybiBncihuZXcgdGhpcyhudWxsKSwhMCxSdCl9LGV0LnJlamVjdD1mdW5jdGlvbihSdCl7cmV0dXJuIGdyKG5ldyB0aGlzKG51bGwpLFZ0LFJ0KX0sZXQuYW55PWZ1bmN0aW9uKFJ0KXtpZighUnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBSdFtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB3dD1bXSxLZT0wO3RyeXtmb3IodmFyIFh0PTAsQm49UnQ7WHQ8Qm4ubGVuZ3RoO1h0KyspS2UrKyx3dC5wdXNoKGV0LnJlc29sdmUoQm5bWHRdKSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBfZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUtlKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB0aT0hMSxuaT1bXTtyZXR1cm4gbmV3IGV0KGZ1bmN0aW9uKHNpLENpKXtmb3IodmFyIHlyPTA7eXI8d3QubGVuZ3RoO3lyKyspd3RbeXJdLnRoZW4oZnVuY3Rpb24oUW8pe3RpfHwodGk9ITAsc2koUW8pKX0sZnVuY3Rpb24oUW8pe25pLnB1c2goUW8pLDA9PS0tS2UmJih0aT0hMCxDaShuZXcgX2UobmksIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpKX0pfSl9LGV0LnJhY2U9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZSxYdD1uZXcgdGhpcyhmdW5jdGlvbihDaSx5cil7d3Q9Q2ksS2U9eXJ9KTtmdW5jdGlvbiBCbihDaSl7d3QoQ2kpfWZ1bmN0aW9uIEluKENpKXtLZShDaSl9Zm9yKHZhciB0aT0wLG5pPVJ0O3RpPG5pLmxlbmd0aDt0aSsrKXt2YXIgc2k9bmlbdGldO0F0KHNpKXx8KHNpPXRoaXMucmVzb2x2ZShzaSkpLHNpLnRoZW4oQm4sSW4pfXJldHVybiBYdH0sZXQuYWxsPWZ1bmN0aW9uKFJ0KXtyZXR1cm4gZXQuYWxsV2l0aENhbGxiYWNrKFJ0KX0sZXQuYWxsU2V0dGxlZD1mdW5jdGlvbihSdCl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgZXQ/dGhpczpldCkuYWxsV2l0aENhbGxiYWNrKFJ0LHt0aGVuQ2FsbGJhY2s6ZnVuY3Rpb24oS2Upe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6S2V9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKEtlKXtyZXR1cm57c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOktlfX19KX0sZXQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKFJ0LHd0KXtmb3IodmFyIEtlLFh0LEJuPW5ldyB0aGlzKGZ1bmN0aW9uKHNvLFJvKXtLZT1zbyxYdD1Sb30pLEluPTIsdGk9MCxuaT1bXSxzaT1mdW5jdGlvbihzbyl7QXQoc28pfHwoc289Q2kucmVzb2x2ZShzbykpO3ZhciBSbz10aTt0cnl7c28udGhlbihmdW5jdGlvbihacil7bmlbUm9dPXd0P3d0LnRoZW5DYWxsYmFjayhacik6WnIsMD09LS1JbiYmS2UobmkpfSxmdW5jdGlvbihacil7d3Q/KG5pW1JvXT13dC5lcnJvckNhbGxiYWNrKFpyKSwwPT0tLUluJiZLZShuaSkpOlh0KFpyKX0pfWNhdGNoKFpyKXtYdChacil9SW4rKyx0aSsrfSxDaT10aGlzLHlyPTAsUW89UnQ7eXI8UW8ubGVuZ3RoO3lyKyspc2koUW9beXJdKTtyZXR1cm4gMD09KEluLT0yKSYmS2UobmkpLEJufSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiBldH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxldC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihSdCx3dCl7dmFyIEtlLFh0PW51bGw9PT0oS2U9dGhpcy5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PUtlP3ZvaWQgMDpLZVtTeW1ib2wuc3BlY2llc107KCFYdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFh0KSYmKFh0PXRoaXMuY29uc3RydWN0b3J8fGV0KTt2YXIgQm49bmV3IFh0KGJ0KSxJbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChJbixCbixSdCx3dCk6RHIodGhpcyxJbixCbixSdCx3dCksQm59LGV0LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihSdCl7cmV0dXJuIHRoaXMudGhlbihudWxsLFJ0KX0sZXQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZT1udWxsPT09KHd0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT13dD92b2lkIDA6d3RbU3ltYm9sLnNwZWNpZXNdOyghS2V8fCJmdW5jdGlvbiIhPXR5cGVvZiBLZSkmJihLZT1ldCk7dmFyIFh0PW5ldyBLZShidCk7WHRbUm5dPVJuO3ZhciBCbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChCbixYdCxSdCxSdCk6RHIodGhpcyxCbixYdCxSdCxSdCksWHR9LGV0fSgpO2JlLnJlc29sdmU9YmUucmVzb2x2ZSxiZS5yZWplY3Q9YmUucmVqZWN0LGJlLnJhY2U9YmUucmFjZSxiZS5hbGw9YmUuYWxsO3ZhciBEZT1WWyRlXT1WLlByb21pc2U7Vi5Qcm9taXNlPWJlO3ZhciBFbj1aKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHZyKGV0KXt2YXIgUnQ9ZXQucHJvdG90eXBlLHd0PVMoUnQsInRoZW4iKTtpZighd3R8fCExIT09d3Qud3JpdGFibGUmJnd0LmNvbmZpZ3VyYWJsZSl7dmFyIEtlPVJ0LnRoZW47UnRbV2VdPUtlLGV0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFh0LEJuKXt2YXIgSW49dGhpcztyZXR1cm4gbmV3IGJlKGZ1bmN0aW9uKG5pLHNpKXtLZS5jYWxsKEluLG5pLHNpKX0pLnRoZW4oWHQsQm4pfSxldFtFbl09ITB9fXJldHVybiBkZS5wYXRjaFRoZW49dnIsRGUmJih2cihEZSksSihWLCJmZXRjaCIsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihldCl7cmV0dXJuIGZ1bmN0aW9uKFJ0LHd0KXt2YXIgS2U9ZXQuYXBwbHkoUnQsd3QpO2lmKEtlIGluc3RhbmNlb2YgYmUpcmV0dXJuIEtlO3ZhciBYdD1LZS5jb25zdHJ1Y3RvcjtyZXR1cm4gWHRbRW5dfHx2cihYdCksS2V9fShldCl9KSksUHJvbWlzZVt0ZS5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09Y2UsYmV9KSxab25lLl9fbG9hZF9wYXRjaCgidG9TdHJpbmciLGZ1bmN0aW9uKFYpe3ZhciB0ZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsZGU9ZigiT3JpZ2luYWxEZWxlZ2F0ZSIpLFM9ZigiUHJvbWlzZSIpLEw9ZigiRXJyb3IiKSxxPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMpe3ZhciAkZT10aGlzW2RlXTtpZigkZSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgJGU/dGUuY2FsbCgkZSk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCRlKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIFdlPVZbU107aWYoV2UpcmV0dXJuIHRlLmNhbGwoV2UpfWlmKHRoaXM9PT1FcnJvcil7dmFyIHJ0PVZbTF07aWYocnQpcmV0dXJuIHRlLmNhbGwocnQpfX1yZXR1cm4gdGUuY2FsbCh0aGlzKX07cVtkZV09dGUsRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPXE7dmFyIFo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpaLmNhbGwodGhpcyl9fSk7dmFyIFN0PSExO2lmKHR5cGVvZiB3aW5kb3c8InUiKXRyeXt2YXIgZ3Q9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7U3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGd0LGd0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZ3QsZ3QpfWNhdGNoe1N0PSExfXZhciBvaSxVaSx6aSxRLEYsUmU9e3VzZUc6ITB9LEFuPXt9LEV0PXt9LG9uPW5ldyBSZWdFeHAoIl4iK2QrIihcXHcrKSh0cnVlfGZhbHNlKSQiKSxDZT1mKCJwcm9wYWdhdGlvblN0b3BwZWQiKTtmdW5jdGlvbiB2dChWLHRlKXt2YXIgZGU9KHRlP3RlKFYpOlYpK3UsUz0odGU/dGUoVik6VikrYyxMPWQrZGUscT1kK1M7QW5bVl09e30sQW5bVl1bdV09TCxBbltWXVtjXT1xfWZ1bmN0aW9uIF90KFYsdGUsZGUsUyl7dmFyIEw9UyYmUy5hZGR8fG8scT1TJiZTLnJtfHxzLFo9UyYmUy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsY2U9UyYmUy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsVWU9ZihMKSwkZT0iLiIrTCsiOiIsZHQ9ZnVuY3Rpb24oUm4sRHQsZ2kpe2lmKCFSbi5pc1JlbW92ZWQpe3ZhciBVbixlaT1Sbi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIGVpJiZlaS5oYW5kbGVFdmVudCYmKFJuLmNhbGxiYWNrPWZ1bmN0aW9uKGppKXtyZXR1cm4gZWkuaGFuZGxlRXZlbnQoamkpfSxSbi5vcmlnaW5hbERlbGVnYXRlPWVpKTt0cnl7Um4uaW52b2tlKFJuLER0LFtnaV0pfWNhdGNoKGppKXtVbj1qaX12YXIgWG49Um4ub3B0aW9ucztyZXR1cm4gWG4mJiJvYmplY3QiPT10eXBlb2YgWG4mJlhuLm9uY2UmJkR0W3FdLmNhbGwoRHQsZ2kudHlwZSxSbi5vcmlnaW5hbERlbGVnYXRlP1JuLm9yaWdpbmFsRGVsZWdhdGU6Um4uY2FsbGJhY2ssWG4pLFVufX07ZnVuY3Rpb24gVHQoUm4sRHQsZ2kpe2lmKER0PUR0fHxWLmV2ZW50KXt2YXIgZWk9Um58fER0LnRhcmdldHx8VixVbj1laVtBbltEdC50eXBlXVtnaT9jOnVdXTtpZihVbil7dmFyIFhuPVtdO2lmKDE9PT1Vbi5sZW5ndGgpKFZ0PWR0KFVuWzBdLGVpLER0KSkmJlhuLnB1c2goVnQpO2Vsc2UgZm9yKHZhciBqaT1Vbi5zbGljZSgpLHduPTA7d248amkubGVuZ3RoJiYoIUR0fHwhMCE9PUR0W0NlXSk7d24rKyl7dmFyIFZ0OyhWdD1kdChqaVt3bl0sZWksRHQpKSYmWG4ucHVzaChWdCl9aWYoMT09PVhuLmxlbmd0aCl0aHJvdyBYblswXTt2YXIgT249ZnVuY3Rpb24oX2kpe3ZhciBrbj1YbltfaV07dGUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBrbn0pfTtmb3Iod249MDt3bjxYbi5sZW5ndGg7d24rKylPbih3bil9fX12YXIgQXQ9ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCExKX0sY249ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCEwKX07ZnVuY3Rpb24gSmkoUm4sRHQpe2lmKCFSbilyZXR1cm4hMTt2YXIgZ2k9ITA7RHQmJnZvaWQgMCE9PUR0LnVzZUcmJihnaT1EdC51c2VHKTt2YXIgZWk9RHQmJkR0LnZoLFVuPSEwO0R0JiZ2b2lkIDAhPT1EdC5jaGtEdXAmJihVbj1EdC5jaGtEdXApO3ZhciBYbj0hMTtEdCYmdm9pZCAwIT09RHQucnQmJihYbj1EdC5ydCk7Zm9yKHZhciBWdD1SbjtWdCYmIVZ0Lmhhc093blByb3BlcnR5KEwpOylWdD1lKFZ0KTtpZighVnQmJlJuW0xdJiYoVnQ9Um4pLCFWdHx8VnRbVWVdKXJldHVybiExO3ZhciBkcixqaT1EdCYmRHQuZXZlbnROYW1lVG9TdHJpbmcsd249e30sT249VnRbVWVdPVZ0W0xdLF9pPVZ0W2YocSldPVZ0W3FdLGtuPVZ0W2YoWildPVZ0W1pdLGdyPVZ0W2YoY2UpXT1WdFtjZV07ZnVuY3Rpb24gcXMoS2UsWHQpe3JldHVybiFTdCYmIm9iamVjdCI9PXR5cGVvZiBLZSYmS2U/ISFLZS5jYXB0dXJlOlN0JiZYdD8iYm9vbGVhbiI9PXR5cGVvZiBLZT97Y2FwdHVyZTpLZSxwYXNzaXZlOiEwfTpLZT8ib2JqZWN0Ij09dHlwZW9mIEtlJiYhMSE9PUtlLnBhc3NpdmU/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEtlKSx7cGFzc2l2ZTohMH0pOktlOntwYXNzaXZlOiEwfTpLZX1EdCYmRHQucHJlcGVuZCYmKGRyPVZ0W2YoRHQucHJlcGVuZCldPVZ0W0R0LnByZXBlbmRdKTt2YXIgRGU9Z2k/ZnVuY3Rpb24oS2Upe2lmKCF3bi5pc0V4aXN0aW5nKXJldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsd24uY2FwdHVyZT9jbjpBdCx3bi5vcHRpb25zKX06ZnVuY3Rpb24oS2Upe3JldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbj1naT9mdW5jdGlvbihLZSl7aWYoIUtlLmlzUmVtb3ZlZCl7dmFyIFh0PUFuW0tlLmV2ZW50TmFtZV0sQm49dm9pZCAwO1h0JiYoQm49WHRbS2UuY2FwdHVyZT9jOnVdKTt2YXIgSW49Qm4mJktlLnRhcmdldFtCbl07aWYoSW4pZm9yKHZhciB0aT0wO3RpPEluLmxlbmd0aDt0aSsrKWlmKEluW3RpXT09PUtlKXtJbi5zcGxpY2UodGksMSksS2UuaXNSZW1vdmVkPSEwLDA9PT1Jbi5sZW5ndGgmJihLZS5hbGxSZW1vdmVkPSEwLEtlLnRhcmdldFtCbl09bnVsbCk7YnJlYWt9fWlmKEtlLmFsbFJlbW92ZWQpcmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5jYXB0dXJlP2NuOkF0LEtlLm9wdGlvbnMpfTpmdW5jdGlvbihLZSl7cmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5pbnZva2UsS2Uub3B0aW9ucyl9LEhsPUR0JiZEdC5kaWZmP0R0LmRpZmY6ZnVuY3Rpb24oS2UsWHQpe3ZhciBCbj10eXBlb2YgWHQ7cmV0dXJuImZ1bmN0aW9uIj09PUJuJiZLZS5jYWxsYmFjaz09PVh0fHwib2JqZWN0Ij09PUJuJiZLZS5vcmlnaW5hbERlbGVnYXRlPT09WHR9LGV0PVpvbmVbZigiVU5QQVRDSEVEX0VWRU5UUyIpXSxSdD1WW2YoIlBBU1NJVkVfRVZFTlRTIildLHd0PWZ1bmN0aW9uKEtlLFh0LEJuLEluLHRpLG5pKXtyZXR1cm4gdm9pZCAwPT09dGkmJih0aT0hMSksdm9pZCAwPT09bmkmJihuaT0hMSksZnVuY3Rpb24oKXt2YXIgc2k9dGhpc3x8VixDaT1hcmd1bWVudHNbMF07RHQmJkR0LnRyYW5zZmVyRXZlbnROYW1lJiYoQ2k9RHQudHJhbnNmZXJFdmVudE5hbWUoQ2kpKTt2YXIgeXI9YXJndW1lbnRzWzFdO2lmKCF5cilyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKFgmJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT1DaSlyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBRbz0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeXIpe2lmKCF5ci5oYW5kbGVFdmVudClyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO1FvPSEwfWlmKCFlaXx8ZWkoS2UseXIsc2ksYXJndW1lbnRzKSl7dmFyIHF1PVN0JiYhIVJ0JiYtMSE9PVJ0LmluZGV4T2YoQ2kpLHNvPXFzKGFyZ3VtZW50c1syXSxxdSk7aWYoZXQpZm9yKHZhciBSbz0wO1JvPGV0Lmxlbmd0aDtSbysrKWlmKENpPT09ZXRbUm9dKXJldHVybiBxdT9LZS5jYWxsKHNpLENpLHlyLHNvKTpLZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIFpyPSEhc28mJigiYm9vbGVhbiI9PXR5cGVvZiBzb3x8c28uY2FwdHVyZSksYWc9ISghc298fCJvYmplY3QiIT10eXBlb2Ygc28pJiZzby5vbmNlLEh1ZT1ab25lLmN1cnJlbnQsd089QW5bQ2ldO3dPfHwodnQoQ2ksamkpLHdPPUFuW0NpXSk7dmFyIHM4PXdPW1pyP2M6dV0sbGc9c2lbczhdLGE4PSExO2lmKGxnKXtpZihhOD0hMCxVbilmb3IoUm89MDtSbzxsZy5sZW5ndGg7Um8rKylpZihIbChsZ1tSb10seXIpKXJldHVybn1lbHNlIGxnPXNpW3M4XT1bXTt2YXIgaVMsbDg9c2kuY29uc3RydWN0b3IubmFtZSxjOD1FdFtsOF07YzgmJihpUz1jOFtDaV0pLGlTfHwoaVM9bDgrWHQrKGppP2ppKENpKTpDaSkpLHduLm9wdGlvbnM9c28sYWcmJih3bi5vcHRpb25zLm9uY2U9ITEpLHduLnRhcmdldD1zaSx3bi5jYXB0dXJlPVpyLHduLmV2ZW50TmFtZT1DaSx3bi5pc0V4aXN0aW5nPWE4O3ZhciBWeT1naT9SZTp2b2lkIDA7VnkmJihWeS50YXNrRGF0YT13bik7dmFyIFFkPUh1ZS5zY2hlZHVsZUV2ZW50VGFzayhpUyx5cixWeSxCbixJbik7aWYod24udGFyZ2V0PW51bGwsVnkmJihWeS50YXNrRGF0YT1udWxsKSxhZyYmKHNvLm9uY2U9ITApLCFTdCYmImJvb2xlYW4iPT10eXBlb2YgUWQub3B0aW9uc3x8KFFkLm9wdGlvbnM9c28pLFFkLnRhcmdldD1zaSxRZC5jYXB0dXJlPVpyLFFkLmV2ZW50TmFtZT1DaSxRbyYmKFFkLm9yaWdpbmFsRGVsZWdhdGU9eXIpLG5pP2xnLnVuc2hpZnQoUWQpOmxnLnB1c2goUWQpLHRpKXJldHVybiBzaX19fTtyZXR1cm4gVnRbTF09d3QoT24sJGUsRGUsRW4sWG4pLGRyJiYoVnQucHJlcGVuZExpc3RlbmVyPXd0KGRyLCIucHJlcGVuZExpc3RlbmVyOiIsZnVuY3Rpb24oS2Upe3JldHVybiBkci5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbixYbiwhMCkpLFZ0W3FdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7dmFyIEJuPWFyZ3VtZW50c1syXSxJbj0hIUJuJiYoImJvb2xlYW4iPT10eXBlb2YgQm58fEJuLmNhcHR1cmUpLHRpPWFyZ3VtZW50c1sxXTtpZighdGkpcmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighZWl8fGVpKF9pLHRpLEtlLGFyZ3VtZW50cykpe3ZhciBzaSxuaT1BbltYdF07bmkmJihzaT1uaVtJbj9jOnVdKTt2YXIgQ2k9c2kmJktlW3NpXTtpZihDaSlmb3IodmFyIHlyPTA7eXI8Q2kubGVuZ3RoO3lyKyspe3ZhciBRbz1DaVt5cl07aWYoSGwoUW8sdGkpKXtpZihDaS5zcGxpY2UoeXIsMSksUW8uaXNSZW1vdmVkPSEwLDA9PT1DaS5sZW5ndGgmJihRby5hbGxSZW1vdmVkPSEwLEtlW3NpXT1udWxsLCJzdHJpbmciPT10eXBlb2YgWHQpKXt2YXIgcXU9ZCsiT05fUFJPUEVSVFkiK1h0O0tlW3F1XT1udWxsfXJldHVybiBRby56b25lLmNhbmNlbFRhc2soUW8pLFhuP0tlOnZvaWQgMH19cmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFZ0W1pdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7Zm9yKHZhciBCbj1bXSxJbj1pZShLZSxqaT9qaShYdCk6WHQpLHRpPTA7dGk8SW4ubGVuZ3RoO3RpKyspe3ZhciBuaT1Jblt0aV0sc2k9bmkub3JpZ2luYWxEZWxlZ2F0ZT9uaS5vcmlnaW5hbERlbGVnYXRlOm5pLmNhbGxiYWNrO0JuLnB1c2goc2kpfXJldHVybiBCbn0sVnRbY2VdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO2lmKFh0KXtEdCYmRHQudHJhbnNmZXJFdmVudE5hbWUmJihYdD1EdC50cmFuc2ZlckV2ZW50TmFtZShYdCkpO3ZhciBDaT1BbltYdF07aWYoQ2kpe3ZhciB5cj1DaVt1XSxRbz1DaVtjXSxxdT1LZVt5cl0sc289S2VbUW9dO2lmKHF1KWZvcih2YXIgUm89cXUuc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXRoaXNbcV0uY2FsbCh0aGlzLFh0LChacj1Sb1tJbl0pLm9yaWdpbmFsRGVsZWdhdGU/WnIub3JpZ2luYWxEZWxlZ2F0ZTpaci5jYWxsYmFjayxaci5vcHRpb25zKTtpZihzbylmb3IoUm89c28uc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXt2YXIgWnI7dGhpc1txXS5jYWxsKHRoaXMsWHQsKFpyPVJvW0luXSkub3JpZ2luYWxEZWxlZ2F0ZT9aci5vcmlnaW5hbERlbGVnYXRlOlpyLmNhbGxiYWNrLFpyLm9wdGlvbnMpfX19ZWxzZXt2YXIgQm49T2JqZWN0LmtleXMoS2UpO2ZvcihJbj0wO0luPEJuLmxlbmd0aDtJbisrKXt2YXIgdGk9Qm5bSW5dLG5pPW9uLmV4ZWModGkpLHNpPW5pJiZuaVsxXTtzaSYmInJlbW92ZUxpc3RlbmVyIiE9PXNpJiZ0aGlzW2NlXS5jYWxsKHRoaXMsc2kpfXRoaXNbY2VdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihYbilyZXR1cm4gdGhpc30sbWUoVnRbTF0sT24pLG1lKFZ0W3FdLF9pKSxnciYmbWUoVnRbY2VdLGdyKSxrbiYmbWUoVnRbWl0sa24pLCEwfWZvcih2YXIgeGk9W10sbW49MDttbjxkZS5sZW5ndGg7bW4rKyl4aVttbl09SmkoZGVbbW5dLFMpO3JldHVybiB4aX1mdW5jdGlvbiBpZShWLHRlKXtpZighdGUpe3ZhciBkZT1bXTtmb3IodmFyIFMgaW4gVil7dmFyIEw9b24uZXhlYyhTKSxxPUwmJkxbMV07aWYocSYmKCF0ZXx8cT09PXRlKSl7dmFyIFo9VltTXTtpZihaKWZvcih2YXIgY2U9MDtjZTxaLmxlbmd0aDtjZSsrKWRlLnB1c2goWltjZV0pfX1yZXR1cm4gZGV9dmFyIFVlPUFuW3RlXTtVZXx8KHZ0KHRlKSxVZT1Bblt0ZV0pO3ZhciAkZT1WW1VlW3VdXSxXZT1WW1VlW2NdXTtyZXR1cm4gJGU/V2U/JGUuY29uY2F0KFdlKTokZS5zbGljZSgpOldlP1dlLnNsaWNlKCk6W119ZnVuY3Rpb24gY3QoVix0ZSl7dmFyIGRlPVYuRXZlbnQ7ZGUmJmRlLnByb3RvdHlwZSYmdGUucGF0Y2hNZXRob2QoZGUucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLGZ1bmN0aW9uKFMpe3JldHVybiBmdW5jdGlvbihMLHEpe0xbQ2VdPSEwLFMmJlMuYXBwbHkoTCxxKX19KX1mdW5jdGlvbiBZZShWLHRlLGRlLFMsTCl7dmFyIHE9Wm9uZS5fX3N5bWJvbF9fKFMpO2lmKCF0ZVtxXSl7dmFyIFo9dGVbcV09dGVbU107dGVbU109ZnVuY3Rpb24oY2UsVWUsJGUpe3JldHVybiBVZSYmVWUucHJvdG90eXBlJiZMLmZvckVhY2goZnVuY3Rpb24oV2Upe3ZhciBydD0iIi5jb25jYXQoZGUsIi4iKS5jb25jYXQoUywiOjoiKStXZSxkdD1VZS5wcm90b3R5cGU7dHJ5e2lmKGR0Lmhhc093blByb3BlcnR5KFdlKSl7dmFyIFR0PVYuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGR0LFdlKTtUdCYmVHQudmFsdWU/KFR0LnZhbHVlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShUdC52YWx1ZSxydCksVi5fcmVkZWZpbmVQcm9wZXJ0eShVZS5wcm90b3R5cGUsV2UsVHQpKTpkdFtXZV0mJihkdFtXZV09Vi53cmFwV2l0aEN1cnJlbnRab25lKGR0W1dlXSxydCkpfWVsc2UgZHRbV2VdJiYoZHRbV2VdPVYud3JhcFdpdGhDdXJyZW50Wm9uZShkdFtXZV0scnQpKX1jYXRjaHt9fSksWi5jYWxsKHRlLGNlLFVlLCRlKX0sVi5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQodGVbU10sWil9fWZ1bmN0aW9uIHh0KFYsdGUsZGUpe2lmKCFkZXx8MD09PWRlLmxlbmd0aClyZXR1cm4gdGU7dmFyIFM9ZGUuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLnRhcmdldD09PVZ9KTtpZighU3x8MD09PVMubGVuZ3RoKXJldHVybiB0ZTt2YXIgTD1TWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIHRlLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4tMT09PUwuaW5kZXhPZihxKX0pfWZ1bmN0aW9uIGh0KFYsdGUsZGUsUyl7ViYmbGUoVix4dChWLHRlLGRlKSxTKX1mdW5jdGlvbiBzbihWKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoVikuZmlsdGVyKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUuc3RhcnRzV2l0aCgib24iKSYmdGUubGVuZ3RoPjJ9KS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiB0ZS5zdWJzdHJpbmcoMil9KX1mdW5jdGlvbiBDdChWLHRlLGRlKXt2YXIgUz1kZS5jb25maWd1cmFibGU7cmV0dXJuIGduKFYsdGUsZGU9QmUoVix0ZSxkZSksUyl9ZnVuY3Rpb24gdG4oVix0ZSl7cmV0dXJuIFYmJlZbRl0mJlZbRl1bdGVdfWZ1bmN0aW9uIEJlKFYsdGUsZGUpe3JldHVybiBPYmplY3QuaXNGcm96ZW4oZGUpfHwoZGUuY29uZmlndXJhYmxlPSEwKSxkZS5jb25maWd1cmFibGV8fCghVltGXSYmIU9iamVjdC5pc0Zyb3plbihWKSYmVWkoVixGLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLFZbRl0mJihWW0ZdW3RlXT0hMCkpLGRlfWZ1bmN0aW9uIGduKFYsdGUsZGUsUyl7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChaKXtpZighZGUuY29uZmlndXJhYmxlKXRocm93IFo7dHlwZW9mIFM+InUiP2RlbGV0ZSBkZS5jb25maWd1cmFibGU6ZGUuY29uZmlndXJhYmxlPVM7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChjZSl7dmFyIEw9ITE7aWYoKCJjcmVhdGVkQ2FsbGJhY2siPT09dGV8fCJhdHRhY2hlZENhbGxiYWNrIj09PXRlfHwiZGV0YWNoZWRDYWxsYmFjayI9PT10ZXx8ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayI9PT10ZSkmJihMPSEwKSwhTCl0aHJvdyBjZTt2YXIgcT1udWxsO3RyeXtxPUpTT04uc3RyaW5naWZ5KGRlKX1jYXRjaHtxPWRlLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciLmNvbmNhdCh0ZSwiJyB3aXRoIGRlc2NyaXB0b3IgJyIpLmNvbmNhdChxLCInIG9uIG9iamVjdCAnIikuY29uY2F0KFYsIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiKS5jb25jYXQoY2UpKX19fVpvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1zbihWKTtkZS5wYXRjaE9uUHJvcGVydGllcz1sZSxkZS5wYXRjaE1ldGhvZD1KLGRlLmJpbmRBcmd1bWVudHM9SSxkZS5wYXRjaE1hY3JvVGFzaz1hZTt2YXIgTD10ZS5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIikscT10ZS5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7VltxXSYmKFZbTF09VltxXSksVltMXSYmKHRlW0xdPXRlW3FdPVZbTF0pLGRlLnBhdGNoRXZlbnRQcm90b3R5cGU9Y3QsZGUucGF0Y2hFdmVudFRhcmdldD1fdCxkZS5pc0lFT3JFZGdlPXV0LGRlLk9iamVjdERlZmluZVByb3BlcnR5PXQsZGUuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPW4sZGUuT2JqZWN0Q3JlYXRlPWksZGUuQXJyYXlTbGljZT1yLGRlLnBhdGNoQ2xhc3M9eWUsZGUud3JhcFdpdGhDdXJyZW50Wm9uZT1wLGRlLmZpbHRlclByb3BlcnRpZXM9eHQsZGUuYXR0YWNoT3JpZ2luVG9QYXRjaGVkPW1lLGRlLl9yZWRlZmluZVByb3BlcnR5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkZS5wYXRjaENhbGxiYWNrcz1ZZSxkZS5nZXRHbG9iYWxPYmplY3RzPWZ1bmN0aW9uKCl7cmV0dXJue2dsb2JhbFNvdXJjZXM6RXQsem9uZVN5bWJvbEV2ZW50TmFtZXM6QW4sZXZlbnROYW1lczpTLGlzQnJvd3Nlcjp4ZSxpc01peDpmZSxpc05vZGU6WCxUUlVFX1NUUjpjLEZBTFNFX1NUUjp1LFpPTkVfU1lNQk9MX1BSRUZJWDpkLEFERF9FVkVOVF9MSVNURU5FUl9TVFI6byxSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOnN9fX0pO3ZhciBWLG9zPU1wKE1wKE1wKE1wKE1wKE1wKE1wKE1wKFtdLFsiYWJvcnQiLCJhbmltYXRpb25jYW5jZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9yZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5nZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5kIiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIsImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJlIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwib3JpZW50YXRpb25jaGFuZ2UiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJkb3duIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcmxvY2tjaGFuZ2UiLCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIndlYmtpdHBvaW50ZXJsb2NrZXJjaGFuZ2UiLCJwb2ludGVybG9ja2Vycm9yIiwibW96cG9pbnRlcmxvY2tlcnJvciIsIndlYmtpdHBvaW50ZXJsb2NrZXJyb3IiLCJwb2ludGVybW92ZSIsInBvaW50b3V0IiwicG9pbnRlcm92ZXIiLCJwb2ludGVydXAiLCJwcm9ncmVzcyIsInJhdGVjaGFuZ2UiLCJyZXNldCIsInJlc2l6ZSIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzZWxlY3QiLCJzZWxlY3Rpb25jaGFuZ2UiLCJzZWxlY3RzdGFydCIsInNob3ciLCJzb3J0Iiwic3RhbGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1ldXBkYXRlIiwidm9sdW1lY2hhbmdlIiwidG91Y2hjYW5jZWwiLCJ0b3VjaG1vdmUiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiLCJ0cmFuc2l0aW9uY2FuY2VsIiwidHJhbnNpdGlvbmVuZCIsIndhaXRpbmciLCJ3aGVlbCJdLCEwKSxbIndlYmdsY29udGV4dHJlc3RvcmVkIiwid2ViZ2xjb250ZXh0bG9zdCIsIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiXSwhMCksWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLCEwKSxbInRvZ2dsZSJdLCEwKSxbImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlwdGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnJlZXplIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVlbmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIiwidmlzaWJpbGl0eWNoYW5nZSIsInJlc3VtZSJdLCEwKSxbImFic29sdXRlZGV2aWNlb3JpZW50YXRpb24iLCJhZnRlcmlucHV0IiwiYWZ0ZXJwcmludCIsImFwcGluc3RhbGxlZCIsImJlZm9yZWluc3RhbGxwcm9tcHQiLCJiZWZvcmVwcmludCIsImJlZm9yZXVubG9hZCIsImRldmljZWxpZ2h0IiwiZGV2aWNlbW90aW9uIiwiZGV2aWNlb3JpZW50YXRpb24iLCJkZXZpY2VvcmllbnRhdGlvbmFic29sdXRlIiwiZGV2aWNlcHJveGltaXR5IiwiaGFzaGNoYW5nZSIsImxhbmd1YWdlY2hhbmdlIiwibWVzc2FnZSIsIm1vemJlZm9yZXBhaW50Iiwib2ZmbGluZSIsIm9ubGluZSIsInBhaW50IiwicGFnZXNob3ciLCJwYWdlaGlkZSIsInBvcHN0YXRlIiwicmVqZWN0aW9uaGFuZGxlZCIsInN0b3JhZ2UiLCJ1bmhhbmRsZWRyZWplY3Rpb24iLCJ1bmxvYWQiLCJ1c2VycHJveGltaXR5IiwidnJkaXNwbGF5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLCEwKSxbImJlZm9yZWNvcHkiLCJiZWZvcmVjdXQiLCJiZWZvcmVwYXN0ZSIsImNvcHkiLCJjdXQiLCJwYXN0ZSIsImRyYWdzdGFydCIsImxvYWRlbmQiLCJhbmltYXRpb25zdGFydCIsInNlYXJjaCIsInRyYW5zaXRpb25ydW4iLCJ0cmFuc2l0aW9uc3RhcnQiLCJ3ZWJraXRhbmltYXRpb25lbmQiLCJ3ZWJraXRhbmltYXRpb25pdGVyYXRpb24iLCJ3ZWJraXRhbmltYXRpb25zdGFydCIsIndlYmtpdHRyYW5zaXRpb25lbmQiXSwhMCksWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSwhMCk7KFY9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSlbKCJsZWdhY3lQYXRjaCIsKFYuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iKSsibGVnYWN5UGF0Y2giKV09ZnVuY3Rpb24oKXt2YXIgUz1WLlpvbmU7Uy5fX2xvYWRfcGF0Y2goImRlZmluZVByb3BlcnR5IixmdW5jdGlvbihMLHEsWil7Wi5fcmVkZWZpbmVQcm9wZXJ0eT1DdCxvaT1ab25lLl9fc3ltYm9sX18sVWk9T2JqZWN0W29pKCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksemk9T2JqZWN0W29pKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixRPU9iamVjdC5jcmVhdGUsRj1vaSgidW5jb25maWd1cmFibGVzIiksT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKFYsdGUsZGUpe2lmKHRuKFYsdGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3RlKyInIG9mICIrVik7dmFyIFM9ZGUuY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09dGUmJihkZT1CZShWLHRlLGRlKSksZ24oVix0ZSxkZSxTKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24oVix0ZSl7T2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oWil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFYsWix0ZVtaXSl9KTtmb3IodmFyIGRlPTAsUz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRlKTtkZTxTLmxlbmd0aDtkZSsrKXt2YXIgTD1TW2RlXTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlLEwpPy5lbnVtZXJhYmxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVixMLHRlW0xdKX1yZXR1cm4gVn0sT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihWLHRlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRlJiYhT2JqZWN0LmlzRnJvemVuKHRlKSYmT2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oZGUpe3RlW2RlXT1CZShWLGRlLHRlW2RlXSl9KSxRKFYsdGUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT16aShWLHRlKTtyZXR1cm4gZGUmJnRuKFYsdGUpJiYoZGUuY29uZmlndXJhYmxlPSExKSxkZX19KSxTLl9fbG9hZF9wYXRjaCgicmVnaXN0ZXJFbGVtZW50IixmdW5jdGlvbihMLHEsWil7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYicmVnaXN0ZXJFbGVtZW50ImluIFYuZG9jdW1lbnQmJnRlLnBhdGNoQ2FsbGJhY2tzKHRlLGRvY3VtZW50LCJEb2N1bWVudCIsInJlZ2lzdGVyRWxlbWVudCIsWyJjcmVhdGVkQ2FsbGJhY2siLCJhdHRhY2hlZENhbGxiYWNrIiwiZGV0YWNoZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oTCxaKX0pLFMuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldExlZ2FjeSIsZnVuY3Rpb24oTCxxLFopeyhmdW5jdGlvbihWLHRlKXt2YXIgZGU9dGUuZ2V0R2xvYmFsT2JqZWN0cygpLFM9ZGUuZXZlbnROYW1lcyxMPWRlLmdsb2JhbFNvdXJjZXMscT1kZS56b25lU3ltYm9sRXZlbnROYW1lcyxaPWRlLlRSVUVfU1RSLGNlPWRlLkZBTFNFX1NUUixVZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsV2U9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLHJ0PSJFdmVudFRhcmdldCIsZHQ9W10sVHQ9Vi53dGYsQXQ9IkFuY2hvcixBcmVhLEF1ZGlvLEJSLEJhc2UsQmFzZUZvbnQsQm9keSxCdXR0b24sQ2FudmFzLENvbnRlbnQsRExpc3QsRGlyZWN0b3J5LERpdixFbWJlZCxGaWVsZFNldCxGb250LEZvcm0sRnJhbWUsRnJhbWVTZXQsSFIsSGVhZCxIZWFkaW5nLEh0bWwsSUZyYW1lLEltYWdlLElucHV0LEtleWdlbixMSSxMYWJlbCxMZWdlbmQsTGluayxNYXAsTWFycXVlZSxNZWRpYSxNZW51LE1ldGEsTWV0ZXIsTW9kLE9MaXN0LE9iamVjdCxPcHRHcm91cCxPcHRpb24sT3V0cHV0LFBhcmFncmFwaCxQcmUsUHJvZ3Jlc3MsUXVvdGUsU2NyaXB0LFNlbGVjdCxTb3VyY2UsU3BhbixTdHlsZSxUYWJsZUNhcHRpb24sVGFibGVDZWxsLFRhYmxlQ29sLFRhYmxlLFRhYmxlUm93LFRhYmxlU2VjdGlvbixUZXh0QXJlYSxUaXRsZSxUcmFjayxVTGlzdCxVbmtub3duLFZpZGVvIi5zcGxpdCgiLCIpO1R0P2R0PUF0Lm1hcChmdW5jdGlvbihEcil7cmV0dXJuIkhUTUwiK0RyKyJFbGVtZW50In0pLmNvbmNhdChXZSk6VltydF0/ZHQucHVzaChydCk6ZHQ9V2U7Zm9yKHZhciBjbj1WLl9fWm9uZV9kaXNhYmxlX0lFX2NoZWNrfHwhMSxKaT1WLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEseGk9dGUuaXNJRU9yRWRnZSgpLFJuPSJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iLER0PSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLGdpPXtNU1BvaW50ZXJDYW5jZWw6InBvaW50ZXJjYW5jZWwiLE1TUG9pbnRlckRvd246InBvaW50ZXJkb3duIixNU1BvaW50ZXJFbnRlcjoicG9pbnRlcmVudGVyIixNU1BvaW50ZXJIb3ZlcjoicG9pbnRlcmhvdmVyIixNU1BvaW50ZXJMZWF2ZToicG9pbnRlcmxlYXZlIixNU1BvaW50ZXJNb3ZlOiJwb2ludGVybW92ZSIsTVNQb2ludGVyT3V0OiJwb2ludGVyb3V0IixNU1BvaW50ZXJPdmVyOiJwb2ludGVyb3ZlciIsTVNQb2ludGVyVXA6InBvaW50ZXJ1cCJ9LGVpPTA7ZWk8Uy5sZW5ndGg7ZWkrKyl7dmFyIGppPVVlKygoVW49U1tlaV0pK2NlKSx3bj1VZSsoVW4rWik7cVtVbl09e30scVtVbl1bY2VdPWppLHFbVW5dW1pdPXdufWZvcihlaT0wO2VpPEF0Lmxlbmd0aDtlaSsrKWZvcih2YXIgT249QXRbZWldLF9pPUxbT25dPXt9LGtuPTA7a248Uy5sZW5ndGg7a24rKyl7dmFyIFVuO19pW1VuPVNba25dXT1PbisiLmFkZEV2ZW50TGlzdGVuZXI6IitVbn12YXIgZHI9W107Zm9yKGVpPTA7ZWk8ZHQubGVuZ3RoO2VpKyspe3ZhciBxcz1WW2R0W2VpXV07ZHIucHVzaChxcyYmcXMucHJvdG90eXBlKX10ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsZHIse3ZoOmZ1bmN0aW9uKERyLF9yLGJ0LF9lKXtpZighY24mJnhpKWlmKEppKXRyeXtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9Y2F0Y2h7cmV0dXJuIERyLmFwcGx5KGJ0LF9lKSwhMX1lbHNle3ZhciBiZTtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9ZWxzZSBpZihKaSl0cnl7X3IudG9TdHJpbmcoKX1jYXRjaHtyZXR1cm4gRHIuYXBwbHkoYnQsX2UpLCExfXJldHVybiEwfSx0cmFuc2ZlckV2ZW50TmFtZTpmdW5jdGlvbihEcil7cmV0dXJuIGdpW0RyXXx8RHJ9fSksWm9uZVt0ZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISFWW3J0XX0pKEwsWiksZnVuY3Rpb24oVix0ZSl7dmFyIGRlPVYuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKCghZGUuaXNOb2RlfHxkZS5pc01peCkmJiFmdW5jdGlvbihWLHRlKXt2YXIgZGU9Vi5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYhVi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJnR5cGVvZiBFbGVtZW50PCJ1Iil7dmFyIHE9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihxJiYhcS5jb25maWd1cmFibGUpcmV0dXJuITE7aWYocSl7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBjZT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLm9uY2xpY2s7cmV0dXJuIFYuT2JqZWN0RGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siLHEpLGNlfX12YXIgVWU9dGUuWE1MSHR0cFJlcXVlc3Q7aWYoIVVlKXJldHVybiExO3ZhciAkZT0ib25yZWFkeXN0YXRlY2hhbmdlIixXZT1VZS5wcm90b3R5cGUscnQ9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV2UsJGUpO2lmKHJ0KXJldHVybiBWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxjZT0hIShkdD1uZXcgVWUpLm9ucmVhZHlzdGF0ZWNoYW5nZSxWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHJ0fHx7fSksY2U7dmFyIFR0PVYuc3ltYm9sKCJmYWtlIik7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShXZSwkZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVHRdfSxzZXQ6ZnVuY3Rpb24oeGkpe3RoaXNbVHRdPXhpfX0pO3ZhciBkdCxBdD1mdW5jdGlvbigpe307cmV0dXJuKGR0PW5ldyBVZSkub25yZWFkeXN0YXRlY2hhbmdlPUF0LGNlPWR0W1R0XT09PUF0LGR0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGNlfShWLHRlKSl7dmFyIHE9dHlwZW9mIFdlYlNvY2tldDwidSI7KGZ1bmN0aW9uKFYpe2Zvcih2YXIgdGU9Vi5zeW1ib2woInVuYm91bmQiKSxkZT1mdW5jdGlvbihMKXt2YXIgcT1vc1tMXSxaPSJvbiIrcTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIocSxmdW5jdGlvbihjZSl7dmFyICRlLFdlLFVlPWNlLnRhcmdldDtmb3IoV2U9VWU/VWUuY29uc3RydWN0b3IubmFtZSsiLiIrWjoidW5rbm93bi4iK1o7VWU7KVVlW1pdJiYhVWVbWl1bdGVdJiYoKCRlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShVZVtaXSxXZSkpW3RlXT1VZVtaXSxVZVtaXT0kZSksVWU9VWUucGFyZW50RWxlbWVudH0sITApfSxTPTA7Uzxvcy5sZW5ndGg7UysrKWRlKFMpfSkoViksVi5wYXRjaENsYXNzKCJYTUxIdHRwUmVxdWVzdCIpLHEmJmZ1bmN0aW9uKFYsdGUpe3ZhciBkZT1WLmdldEdsb2JhbE9iamVjdHMoKSxTPWRlLkFERF9FVkVOVF9MSVNURU5FUl9TVFIsTD1kZS5SRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSLHE9dGUuV2ViU29ja2V0O3RlLkV2ZW50VGFyZ2V0fHxWLnBhdGNoRXZlbnRUYXJnZXQodGUsVixbcS5wcm90b3R5cGVdKSx0ZS5XZWJTb2NrZXQ9ZnVuY3Rpb24oVWUsJGUpe3ZhciBydCxkdCxXZT1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IHEoVWUsJGUpOm5ldyBxKFVlKSxUdD1WLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXZSwib25tZXNzYWdlIik7cmV0dXJuIFR0JiYhMT09PVR0LmNvbmZpZ3VyYWJsZT8ocnQ9Vi5PYmplY3RDcmVhdGUoV2UpLGR0PVdlLFtTLEwsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oQXQpe3J0W0F0XT1mdW5jdGlvbigpe3ZhciBjbj1WLkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKEF0PT09U3x8QXQ9PT1MKXt2YXIgSmk9Y24ubGVuZ3RoPjA/Y25bMF06dm9pZCAwO2lmKEppKXt2YXIgeGk9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrSmkpO1dlW3hpXT1ydFt4aV19fXJldHVybiBXZVtBdF0uYXBwbHkoV2UsY24pfX0pKTpydD1XZSxWLnBhdGNoT25Qcm9wZXJ0aWVzKHJ0LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0sZHQpLHJ0fTt2YXIgWj10ZS5XZWJTb2NrZXQ7Zm9yKHZhciBjZSBpbiBxKVpbY2VdPXFbY2VdfShWLHRlKSxab25lW1Yuc3ltYm9sKCJwYXRjaEV2ZW50cyIpXT0hMH19KFosTCl9KX07dmFyIFdzPWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gVmwoVix0ZSxkZSxTKXt2YXIgTD1udWxsLHE9bnVsbDtkZSs9Uzt2YXIgWj17fTtmdW5jdGlvbiBjZSgkZSl7dmFyIFdlPSRlLmRhdGE7cmV0dXJuIFdlLmFyZ3NbMF09ZnVuY3Rpb24oKXtyZXR1cm4gJGUuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sV2UuaGFuZGxlSWQ9TC5hcHBseShWLFdlLmFyZ3MpLCRlfWZ1bmN0aW9uIFVlKCRlKXtyZXR1cm4gcS5jYWxsKFYsJGUuZGF0YS5oYW5kbGVJZCl9TD1KKFYsdGUrPVMsZnVuY3Rpb24oJGUpe3JldHVybiBmdW5jdGlvbihXZSxydCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WzBdKXt2YXIgZHQ9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PVMsZGVsYXk6IlRpbWVvdXQiPT09U3x8IkludGVydmFsIj09PVM/cnRbMV18fDA6dm9pZCAwLGFyZ3M6cnR9LFR0PXJ0WzBdO3J0WzBdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBUdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtkdC5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBkdC5oYW5kbGVJZD9kZWxldGUgWltkdC5oYW5kbGVJZF06ZHQuaGFuZGxlSWQmJihkdC5oYW5kbGVJZFtXc109bnVsbCkpfX07dmFyIEF0PWgodGUscnRbMF0sZHQsY2UsVWUpO2lmKCFBdClyZXR1cm4gQXQ7dmFyIGNuPUF0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjbj9aW2NuXT1BdDpjbiYmKGNuW1dzXT1BdCksY24mJmNuLnJlZiYmY24udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi51bnJlZiYmKEF0LnJlZj1jbi5yZWYuYmluZChjbiksQXQudW5yZWY9Y24udW5yZWYuYmluZChjbikpLCJudW1iZXIiPT10eXBlb2YgY258fGNuP2NuOkF0fXJldHVybiAkZS5hcHBseShWLHJ0KX19KSxxPUooVixkZSxmdW5jdGlvbigkZSl7cmV0dXJuIGZ1bmN0aW9uKFdlLHJ0KXt2YXIgVHQsZHQ9cnRbMF07Im51bWJlciI9PXR5cGVvZiBkdD9UdD1aW2R0XTooVHQ9ZHQmJmR0W1dzXSl8fChUdD1kdCksVHQmJiJzdHJpbmciPT10eXBlb2YgVHQudHlwZT8ibm90U2NoZWR1bGVkIiE9PVR0LnN0YXRlJiYoVHQuY2FuY2VsRm4mJlR0LmRhdGEuaXNQZXJpb2RpY3x8MD09PVR0LnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgZHQ/ZGVsZXRlIFpbZHRdOmR0JiYoZHRbV3NdPW51bGwpLFR0LnpvbmUuY2FuY2VsVGFzayhUdCkpOiRlLmFwcGx5KFYscnQpfX0pfVpvbmUuX19sb2FkX3BhdGNoKCJsZWdhY3kiLGZ1bmN0aW9uKFYpe3ZhciB0ZT1WW1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07dGUmJnRlKCl9KSxab25lLl9fbG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLGZ1bmN0aW9uKFYsdGUsZGUpe2RlLnBhdGNoTWV0aG9kKFYsInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbihTKXtyZXR1cm4gZnVuY3Rpb24oTCxxKXt0ZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIscVswXSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihWKXt2YXIgZGU9ImNsZWFyIjtWbChWLCJzZXQiLGRlLCJUaW1lb3V0IiksVmwoViwic2V0IixkZSwiSW50ZXJ2YWwiKSxWbChWLCJzZXQiLGRlLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKFYpe1ZsKFYsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihWLHRlKXtmb3IodmFyIGRlPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sUz0wO1M8ZGUubGVuZ3RoO1MrKylKKFYsZGVbU10sZnVuY3Rpb24ocSxaLGNlKXtyZXR1cm4gZnVuY3Rpb24oVWUsJGUpe3JldHVybiB0ZS5jdXJyZW50LnJ1bihxLFYsJGUsY2UpfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihWLHRlLGRlKXsoZnVuY3Rpb24oVix0ZSl7dGUucGF0Y2hFdmVudFByb3RvdHlwZShWLHRlKX0pKFYsZGUpLGZ1bmN0aW9uKFYsdGUpe2lmKCFab25lW3RlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSl7Zm9yKHZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCksUz1kZS5ldmVudE5hbWVzLEw9ZGUuem9uZVN5bWJvbEV2ZW50TmFtZXMscT1kZS5UUlVFX1NUUixaPWRlLkZBTFNFX1NUUixjZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsVWU9MDtVZTxTLmxlbmd0aDtVZSsrKXt2YXIgJGU9U1tVZV0sZHQ9Y2UrKCRlK1opLFR0PWNlKygkZStxKTtMWyRlXT17fSxMWyRlXVtaXT1kdCxMWyRlXVtxXT1UdH12YXIgQXQ9Vi5FdmVudFRhcmdldDtBdCYmQXQucHJvdG90eXBlJiZ0ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsW0F0JiZBdC5wcm90b3R5cGVdKX19KFYsZGUpO3ZhciBTPVYuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtTJiZTLnByb3RvdHlwZSYmZGUucGF0Y2hFdmVudFRhcmdldChWLGRlLFtTLnByb3RvdHlwZV0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLGZ1bmN0aW9uKFYsdGUsZGUpe3llKCJNdXRhdGlvbk9ic2VydmVyIikseWUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe2lmKCghWHx8ZmUpJiYhWm9uZVtWLnN5bWJvbCgicGF0Y2hFdmVudHMiKV0pe3ZhciBkZT10ZS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXMsUz1bXTtpZih4ZSl7dmFyIEw9d2luZG93O1M9Uy5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1lbnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTt2YXIgcT1mdW5jdGlvbigpe3RyeXt2YXIgVj1DLm5hdmlnYXRvci51c2VyQWdlbnQ7aWYoLTEhPT1WLmluZGV4T2YoIk1TSUUgIil8fC0xIT09Vi5pbmRleE9mKCJUcmlkZW50LyIpKXJldHVybiEwfWNhdGNoe31yZXR1cm4hMX0oKT9be3RhcmdldDpMLGlnbm9yZVByb3BlcnRpZXM6WyJlcnJvciJdfV06W107aHQoTCxzbihMKSxkZSYmZGUuY29uY2F0KHEpLGUoTCkpfVM9Uy5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKyl7dmFyIGNlPXRlW1NbWl1dO2NlJiZjZS5wcm90b3R5cGUmJmh0KGNlLnByb3RvdHlwZSxzbihjZS5wcm90b3R5cGUpLGRlKX19fShkZSxWKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJjdXN0b21FbGVtZW50cyIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiZWLmN1c3RvbUVsZW1lbnRzJiYiY3VzdG9tRWxlbWVudHMiaW4gViYmdGUucGF0Y2hDYWxsYmFja3ModGUsVi5jdXN0b21FbGVtZW50cywiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLFsiY29ubmVjdGVkQ2FsbGJhY2siLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImFkb3B0ZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oVixkZSl9KSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIixmdW5jdGlvbihWLHRlKXshZnVuY3Rpb24oJGUpe3ZhciBXZT0kZS5YTUxIdHRwUmVxdWVzdDtpZihXZSl7dmFyIHJ0PVdlLnByb3RvdHlwZSxUdD1ydFthXSxBdD1ydFtsXTtpZighVHQpe3ZhciBjbj0kZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2lmKGNuKXt2YXIgSmk9Y24ucHJvdG90eXBlO1R0PUppW2FdLEF0PUppW2xdfX12YXIgeGk9InJlYWR5c3RhdGVjaGFuZ2UiLG1uPSJzY2hlZHVsZWQiLGVpPUoocnQsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtyZXR1cm4gT25bU109MD09X2lbMl0sT25bWl09X2lbMV0sZWkuYXBwbHkoT24sX2kpfX0pLFhuPWYoImZldGNoVGFza0Fib3J0aW5nIiksVnQ9ZigiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLGppPUoocnQsInNlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtpZighMD09PXRlLmN1cnJlbnRbVnRdfHxPbltTXSlyZXR1cm4gamkuYXBwbHkoT24sX2kpO3ZhciBrbj17dGFyZ2V0Ok9uLHVybDpPbltaXSxpc1BlcmlvZGljOiExLGFyZ3M6X2ksYWJvcnRlZDohMX0sZ3I9aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsRHQsa24sUm4sZ2kpO09uJiYhMD09PU9uW2NlXSYmIWtuLmFib3J0ZWQmJmdyLnN0YXRlPT09bW4mJmdyLmludm9rZSgpfX0pLHduPUoocnQsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPbixfaSl7dmFyIGtuPWZ1bmN0aW9uKE9uKXtyZXR1cm4gT25bZGVdfShPbik7aWYoa24mJiJzdHJpbmciPT10eXBlb2Yga24udHlwZSl7aWYobnVsbD09a24uY2FuY2VsRm58fGtuLmRhdGEmJmtuLmRhdGEuYWJvcnRlZClyZXR1cm47a24uem9uZS5jYW5jZWxUYXNrKGtuKX1lbHNlIGlmKCEwPT09dGUuY3VycmVudFtYbl0pcmV0dXJuIHduLmFwcGx5KE9uLF9pKX19KX1mdW5jdGlvbiBSbihPbil7dmFyIF9pPU9uLmRhdGEsa249X2kudGFyZ2V0O2tuW3FdPSExLGtuW2NlXT0hMTt2YXIgZ3I9a25bTF07VHR8fChUdD1rblthXSxBdD1rbltsXSksZ3ImJkF0LmNhbGwoa24seGksZ3IpO3ZhciBkcj1rbltMXT1mdW5jdGlvbigpe2lmKGtuLnJlYWR5U3RhdGU9PT1rbi5ET05FKWlmKCFfaS5hYm9ydGVkJiZrbltxXSYmT24uc3RhdGU9PT1tbil7dmFyIERyPWtuW3RlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtpZigwIT09a24uc3RhdHVzJiZEciYmRHIubGVuZ3RoPjApe3ZhciBfcj1Pbi5pbnZva2U7T24uaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBidD1rblt0ZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0sX2U9MDtfZTxidC5sZW5ndGg7X2UrKylidFtfZV09PT1PbiYmYnQuc3BsaWNlKF9lLDEpOyFfaS5hYm9ydGVkJiZPbi5zdGF0ZT09PW1uJiZfci5jYWxsKE9uKX0sRHIucHVzaChPbil9ZWxzZSBPbi5pbnZva2UoKX1lbHNlIV9pLmFib3J0ZWQmJiExPT09a25bcV0mJihrbltjZV09ITApfTtyZXR1cm4gVHQuY2FsbChrbix4aSxkciksa25bZGVdfHwoa25bZGVdPU9uKSxqaS5hcHBseShrbixfaS5hcmdzKSxrbltxXT0hMCxPbn1mdW5jdGlvbiBEdCgpe31mdW5jdGlvbiBnaShPbil7dmFyIF9pPU9uLmRhdGE7cmV0dXJuIF9pLmFib3J0ZWQ9ITAsd24uYXBwbHkoX2kudGFyZ2V0LF9pLmFyZ3MpfX0oVik7dmFyIGRlPWYoInhoclRhc2siKSxTPWYoInhoclN5bmMiKSxMPWYoInhockxpc3RlbmVyIikscT1mKCJ4aHJTY2hlZHVsZWQiKSxaPWYoInhoclVSTCIpLGNlPWYoInhockVycm9yQmVmb3JlU2NoZWR1bGVkIil9KSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLGZ1bmN0aW9uKFYpe1YubmF2aWdhdG9yJiZWLm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24oVix0ZSl7Zm9yKHZhciBkZT1WLmNvbnN0cnVjdG9yLm5hbWUsUz1mdW5jdGlvbihxKXt2YXIgJGUsV2UsWj10ZVtxXSxjZT1WW1pdO2lmKGNlKXtpZighTyhuKFYsWikpKXJldHVybiJjb250aW51ZSI7VltaXT0oV2U9ZnVuY3Rpb24oKXtyZXR1cm4gJGUuYXBwbHkodGhpcyxJKGFyZ3VtZW50cyxkZSsiLiIrWikpfSxtZShXZSwkZT1jZSksV2UpfX0sTD0wO0w8dGUubGVuZ3RoO0wrKylTKEwpfShWLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihWLHRlKXtmdW5jdGlvbiBkZShTKXtyZXR1cm4gZnVuY3Rpb24oTCl7aWUoVixTKS5mb3JFYWNoKGZ1bmN0aW9uKFope3ZhciBjZT1WLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihjZSl7dmFyIFVlPW5ldyBjZShTLHtwcm9taXNlOkwucHJvbWlzZSxyZWFzb246TC5yZWplY3Rpb259KTtaLmludm9rZShVZSl9fSl9fVYuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYodGVbZigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09ZGUoInVuaGFuZGxlZHJlamVjdGlvbiIpLHRlW2YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPWRlKCJyZWplY3Rpb25oYW5kbGVkIikpfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKG4pOm4oKX0pO2Z1bmN0aW9uIGJuKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIGNnKG4pe2xldCBlPW4oaT0+e0Vycm9yLmNhbGwoaSksaS5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfXZhciByUz1jZyhuPT5mdW5jdGlvbihlKXtuKHRoaXMpLHRoaXMubWVzc2FnZT1lP2Ake2UubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuJHtlLm1hcCgoaSxyKT0+YCR7cisxfSkgJHtpLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1lfSk7ZnVuY3Rpb24gQmgobix0KXtpZihuKXtsZXQgZT1uLmluZGV4T2YodCk7MDw9ZSYmbi5zcGxpY2UoZSwxKX19dmFyIHZuPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5pdGlhbFRlYXJkb3duPXQsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IHQ7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtsZXR7X3BhcmVudGFnZTplfT10aGlzO2lmKGUpaWYodGhpcy5fcGFyZW50YWdlPW51bGwsQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IG8gb2YgZSlvLnJlbW92ZSh0aGlzKTtlbHNlIGUucmVtb3ZlKHRoaXMpO2xldHtpbml0aWFsVGVhcmRvd246aX09dGhpcztpZihibihpKSl0cnl7aSgpfWNhdGNoKG8pe3Q9byBpbnN0YW5jZW9mIHJTP28uZXJyb3JzOltvXX1sZXR7X2ZpbmFsaXplcnM6cn09dGhpcztpZihyKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGxldCBvIG9mIHIpdHJ5e3A4KG8pfWNhdGNoKHMpe3Q9dD8/W10scyBpbnN0YW5jZW9mIHJTP3Q9Wy4uLnQsLi4ucy5lcnJvcnNdOnQucHVzaChzKX19aWYodCl0aHJvdyBuZXcgclModCl9fWFkZCh0KXt2YXIgZTtpZih0JiZ0IT09dGhpcylpZih0aGlzLmNsb3NlZClwOCh0KTtlbHNle2lmKHQgaW5zdGFuY2VvZiB2bil7aWYodC5jbG9zZWR8fHQuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47dC5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oZT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09ZT9lOltdKS5wdXNoKHQpfX1faGFzUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7cmV0dXJuIGU9PT10fHxBcnJheS5pc0FycmF5KGUpJiZlLmluY2x1ZGVzKHQpfV9hZGRQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpczt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShlKT8oZS5wdXNoKHQpLGUpOmU/W2UsdF06dH1fcmVtb3ZlUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7ZT09PXQ/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShlKSYmQmgoZSx0KX1yZW1vdmUodCl7bGV0e19maW5hbGl6ZXJzOmV9PXRoaXM7ZSYmQmgoZSx0KSx0IGluc3RhbmNlb2Ygdm4mJnQuX3JlbW92ZVBhcmVudCh0aGlzKX19O3ZuLkVNUFRZPSgoKT0+e2xldCBuPW5ldyB2bjtyZXR1cm4gbi5jbG9zZWQ9ITAsbn0pKCk7dmFyIEVPPXZuLkVNUFRZO2Z1bmN0aW9uIG9TKG4pe3JldHVybiBuIGluc3RhbmNlb2Ygdm58fG4mJiJjbG9zZWQiaW4gbiYmYm4obi5yZW1vdmUpJiZibihuLmFkZCkmJmJuKG4udW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHA4KG4pe2JuKG4pP24oKTpuLnVuc3Vic2NyaWJlKCl9dmFyIFVsPXtvblVuaGFuZGxlZEVycm9yOm51bGwsb25TdG9wcGVkTm90aWZpY2F0aW9uOm51bGwsUHJvbWlzZTp2b2lkIDAsdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzohMSx1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ITF9LHVnPXtzZXRUaW1lb3V0KG4sdCwuLi5lKXtsZXR7ZGVsZWdhdGU6aX09dWc7cmV0dXJuIGk/LnNldFRpbWVvdXQ/aS5zZXRUaW1lb3V0KG4sdCwuLi5lKTpzZXRUaW1lb3V0KG4sdCwuLi5lKX0sY2xlYXJUaW1lb3V0KG4pe2xldHtkZWxlZ2F0ZTp0fT11ZztyZXR1cm4odD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIHNTKG4pe3VnLnNldFRpbWVvdXQoKCk9PntsZXR7b25VbmhhbmRsZWRFcnJvcjp0fT1VbDtpZighdCl0aHJvdyBuO3Qobil9KX1mdW5jdGlvbiB6bCgpe312YXIgaDg9VE8oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIFRPKG4sdCxlKXtyZXR1cm57a2luZDpuLHZhbHVlOnQsZXJyb3I6ZX19dmFyIFZoPW51bGw7ZnVuY3Rpb24gZGcobil7aWYoVWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7bGV0IHQ9IVZoO2lmKHQmJihWaD17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLG4oKSx0KXtsZXR7ZXJyb3JUaHJvd246ZSxlcnJvcjppfT1WaDtpZihWaD1udWxsLGUpdGhyb3cgaX19ZWxzZSBuKCl9dmFyIEhoPWNsYXNzIGV4dGVuZHMgdm57Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSx0Pyh0aGlzLmRlc3RpbmF0aW9uPXQsb1ModCkmJnQuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPVF1ZX1zdGF0aWMgY3JlYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGpsKHQsZSxpKX1uZXh0KHQpe3RoaXMuaXNTdG9wcGVkP0FPKFRPKCJOIix0LHZvaWQgMCksdGhpcyk6dGhpcy5fbmV4dCh0KX1lcnJvcih0KXt0aGlzLmlzU3RvcHBlZD9BTyhUTygiRSIsdm9pZCAwLHQpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcih0KSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9BTyhoOCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dCh0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9X2Vycm9yKHQpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19LFl1ZT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZDtmdW5jdGlvbiBETyhuLHQpe3JldHVybiBZdWUuY2FsbChuLHQpfXZhciBqbD1jbGFzcyBleHRlbmRzIEhoe2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcjtpZihzdXBlcigpLGJuKHQpfHwhdClyPXtuZXh0OnQ/P3ZvaWQgMCxlcnJvcjplPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfTtlbHNle2xldCBvO3RoaXMmJlVsLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8obz1PYmplY3QuY3JlYXRlKHQpLG8udW5zdWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoKSxyPXtuZXh0OnQubmV4dCYmRE8odC5uZXh0LG8pLGVycm9yOnQuZXJyb3ImJkRPKHQuZXJyb3IsbyksY29tcGxldGU6dC5jb21wbGV0ZSYmRE8odC5jb21wbGV0ZSxvKX0pOnI9dH10aGlzLmRlc3RpbmF0aW9uPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBhcnRpYWxPYnNlcnZlcj10fW5leHQodCl7bGV0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUubmV4dCl0cnl7ZS5uZXh0KHQpfWNhdGNoKGkpe2FTKGkpfX1lcnJvcih0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5lcnJvcil0cnl7ZS5lcnJvcih0KX1jYXRjaChpKXthUyhpKX1lbHNlIGFTKHQpfWNvbXBsZXRlKCl7bGV0e3BhcnRpYWxPYnNlcnZlcjp0fT10aGlzO2lmKHQuY29tcGxldGUpdHJ5e3QuY29tcGxldGUoKX1jYXRjaChlKXthUyhlKX19fShyKX19O2Z1bmN0aW9uIGFTKG4pe1VsLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24obil7VWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmVmgmJihWaC5lcnJvclRocm93bj0hMCxWaC5lcnJvcj1uKX0obik6c1Mobil9ZnVuY3Rpb24gQU8obix0KXtsZXR7b25TdG9wcGVkTm90aWZpY2F0aW9uOmV9PVVsO2UmJnVnLnNldFRpbWVvdXQoKCk9PmUobix0KSl9dmFyIFF1ZT17Y2xvc2VkOiEwLG5leHQ6emwsZXJyb3I6ZnVuY3Rpb24obil7dGhyb3cgbn0sY29tcGxldGU6emx9LHBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBNcyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBSTyhuKXtyZXR1cm4gMD09PW4ubGVuZ3RoP01zOjE9PT1uLmxlbmd0aD9uWzBdOmZ1bmN0aW9uKGUpe3JldHVybiBuLnJlZHVjZSgoaSxyKT0+cihpKSxlKX19dmFyIFF0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZSYmKHRoaXMuX3N1YnNjcmliZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfXN1YnNjcmliZShlLGkscil7bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4gaW5zdGFuY2VvZiBIaHx8ZnVuY3Rpb24obil7cmV0dXJuIG4mJmJuKG4ubmV4dCkmJmJuKG4uZXJyb3IpJiZibihuLmNvbXBsZXRlKX0obikmJm9TKG4pfShlKT9lOm5ldyBqbChlLGkscik7cmV0dXJuIGRnKCgpPT57bGV0e29wZXJhdG9yOnMsc291cmNlOmF9PXRoaXM7by5hZGQocz9zLmNhbGwobyxhKTphP3RoaXMuX3N1YnNjcmliZShvKTp0aGlzLl90cnlTdWJzY3JpYmUobykpfSksb31fdHJ5U3Vic2NyaWJlKGUpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGUpfWNhdGNoKGkpe2UuZXJyb3IoaSl9fWZvckVhY2goZSxpKXtyZXR1cm4gbmV3KGk9XzgoaSkpKChyLG8pPT57bGV0IHM9bmV3IGpsKHtuZXh0OmE9Pnt0cnl7ZShhKX1jYXRjaChsKXtvKGwpLHMudW5zdWJzY3JpYmUoKX19LGVycm9yOm8sY29tcGxldGU6cn0pO3RoaXMuc3Vic2NyaWJlKHMpfSl9X3N1YnNjcmliZShlKXt2YXIgaTtyZXR1cm4gbnVsbD09PShpPXRoaXMuc291cmNlKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdWJzY3JpYmUoZSl9W3BnXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uZSl7cmV0dXJuIFJPKGUpKHRoaXMpfXRvUHJvbWlzZShlKXtyZXR1cm4gbmV3KGU9XzgoZSkpKChpLHIpPT57bGV0IG87dGhpcy5zdWJzY3JpYmUocz0+bz1zLHM9PnIocyksKCk9PmkobykpfSl9fXJldHVybiBuLmNyZWF0ZT10PT5uZXcgbih0KSxufSkoKTtmdW5jdGlvbiBfOChuKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PW4/P1VsLlByb21pc2UpJiZ2b2lkIDAhPT10P3Q6UHJvbWlzZX1mdW5jdGlvbiBPTyhuKXtyZXR1cm4gYm4obj8ubGlmdCl9ZnVuY3Rpb24gcXQobil7cmV0dXJuIHQ9PntpZihPTyh0KSlyZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gbihlLHRoaXMpfWNhdGNoKGkpe3RoaXMuZXJyb3IoaSl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTHQobix0LGUsaSxyKXtyZXR1cm4gbmV3IEh5KG4sdCxlLGkscil9dmFyIGtPLEh5PWNsYXNzIGV4dGVuZHMgSGh7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQpLHRoaXMub25GaW5hbGl6ZT1vLHRoaXMuc2hvdWxkVW5zdWJzY3JpYmU9cyx0aGlzLl9uZXh0PWU/ZnVuY3Rpb24oYSl7dHJ5e2UoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX19OnN1cGVyLl9uZXh0LHRoaXMuX2Vycm9yPXI/ZnVuY3Rpb24oYSl7dHJ5e3IoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9lcnJvcix0aGlzLl9jb21wbGV0ZT1pP2Z1bmN0aW9uKCl7dHJ5e2koKX1jYXRjaChhKXt0LmVycm9yKGEpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2NvbXBsZXRlfXVuc3Vic2NyaWJlKCl7dmFyIHQ7aWYoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmV8fHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSl7bGV0e2Nsb3NlZDplfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJlKCksIWUmJihudWxsPT09KHQ9dGhpcy5vbkZpbmFsaXplKXx8dm9pZCAwPT09dHx8dC5jYWxsKHRoaXMpKX19fSxVeT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnNvdXJjZT10LHRoaXMuc3ViamVjdEZhY3Rvcnk9ZSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsT08odCkmJih0aGlzLmxpZnQ9dC5saWZ0KX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9Z2V0U3ViamVjdCgpe2xldCB0PXRoaXMuX3N1YmplY3Q7cmV0dXJuKCF0fHx0LmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2xldHtfY29ubmVjdGlvbjp0fT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLHQ/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nvbm5lY3Rpb247aWYoIXQpe3Q9dGhpcy5fY29ubmVjdGlvbj1uZXcgdm47bGV0IGU9dGhpcy5nZXRTdWJqZWN0KCk7dC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxlLmNvbXBsZXRlKCl9LGk9Pnt0aGlzLl90ZWFyZG93bigpLGUuZXJyb3IoaSl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLHQuY2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9dm4uRU1QVFkpfXJldHVybiB0fXJlZkNvdW50KCl7cmV0dXJuIHF0KChuLHQpPT57bGV0IGU9bnVsbDtuLl9yZWZDb3VudCsrO2xldCBpPUx0KHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKCk9PntpZighbnx8bi5fcmVmQ291bnQ8PTB8fDA8LS1uLl9yZWZDb3VudClyZXR1cm4gdm9pZChlPW51bGwpO2xldCByPW4uX2Nvbm5lY3Rpb24sbz1lO2U9bnVsbCxyJiYoIW98fHI9PT1vKSYmci51bnN1YnNjcmliZSgpLHQudW5zdWJzY3JpYmUoKX0pO24uc3Vic2NyaWJlKGkpLGkuY2xvc2VkfHwoZT1uLmNvbm5lY3QoKSl9KSh0aGlzKX19LGhnPXtzY2hlZHVsZShuKXtsZXQgdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1jYW5jZWxBbmltYXRpb25GcmFtZSx7ZGVsZWdhdGU6aX09aGc7aSYmKHQ9aS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1pLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtsZXQgcj10KG89PntlPXZvaWQgMCxuKG8pfSk7cmV0dXJuIG5ldyB2bigoKT0+ZT8uKHIpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1oZztyZXR1cm4odD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09aGc7cmV0dXJuKHQ/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4ubil9LGRlbGVnYXRlOnZvaWQgMH0seTg9Y2cobj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9KSxUZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoZSl7bGV0IGk9bmV3IGxTKHRoaXMsdGhpcyk7cmV0dXJuIGkub3BlcmF0b3I9ZSxpfV90aHJvd0lmQ2xvc2VkKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHk4fW5leHQoZSl7ZGcoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmN1cnJlbnRPYnNlcnZlcnN8fCh0aGlzLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVycykpO2ZvcihsZXQgaSBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpaS5uZXh0KGUpfX0pfWVycm9yKGUpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93bkVycm9yPWU7bGV0e29ic2VydmVyczppfT10aGlzO2Zvcig7aS5sZW5ndGg7KWkuc2hpZnQoKS5lcnJvcihlKX19KX1jb21wbGV0ZSgpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7bGV0e29ic2VydmVyczplfT10aGlzO2Zvcig7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jb21wbGV0ZSgpfX0pfXVuc3Vic2NyaWJlKCl7dGhpcy5pc1N0b3BwZWQ9dGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGx9Z2V0IG9ic2VydmVkKCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT10aGlzLm9ic2VydmVycyl8fHZvaWQgMD09PWU/dm9pZCAwOmUubGVuZ3RoKT4wfV90cnlTdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxzdXBlci5fdHJ5U3Vic2NyaWJlKGUpfV9zdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpfV9pbm5lclN1YnNjcmliZShlKXtsZXR7aGFzRXJyb3I6aSxpc1N0b3BwZWQ6cixvYnNlcnZlcnM6b309dGhpcztyZXR1cm4gaXx8cj9FTzoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsby5wdXNoKGUpLG5ldyB2bigoKT0+e3RoaXMuY3VycmVudE9ic2VydmVycz1udWxsLEJoKG8sZSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSl7bGV0e2hhc0Vycm9yOmksdGhyb3duRXJyb3I6cixpc1N0b3BwZWQ6b309dGhpcztpP2UuZXJyb3Iocik6byYmZS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2xldCBlPW5ldyBRdDtyZXR1cm4gZS5zb3VyY2U9dGhpcyxlfX1yZXR1cm4gbi5jcmVhdGU9KHQsZSk9Pm5ldyBsUyh0LGUpLG59KSgpLGxTPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZGVzdGluYXRpb249dCx0aGlzLnNvdXJjZT1lfW5leHQodCl7dmFyIGUsaTtudWxsPT09KGk9bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm5leHQpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1lcnJvcih0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1jb21wbGV0ZSgpe3ZhciB0LGU7bnVsbD09PShlPW51bGw9PT0odD10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbCh0KX1fc3Vic2NyaWJlKHQpe3ZhciBlLGk7cmV0dXJuIG51bGwhPT0oaT1udWxsPT09KGU9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN1YnNjcmliZSh0KSkmJnZvaWQgMCE9PWk/aTpFT319LFZyPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl92YWx1ZT10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZSh0KXtsZXQgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiFlLmNsb3NlZCYmdC5uZXh0KHRoaXMuX3ZhbHVlKSxlfWdldFZhbHVlKCl7bGV0e2hhc0Vycm9yOnQsdGhyb3duRXJyb3I6ZSxfdmFsdWU6aX09dGhpcztpZih0KXRocm93IGU7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxpfW5leHQodCl7c3VwZXIubmV4dCh0aGlzLl92YWx1ZT10KX19LHp5PXtub3c6KCk9Pih6eS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfSxVaD1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9MS8wLGU9MS8wLGk9enkpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT10LHRoaXMuX3dpbmRvd1RpbWU9ZSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1pLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5maW5pdGVUaW1lV2luZG93PWU9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLHQpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxlKX1uZXh0KHQpe2xldHtpc1N0b3BwZWQ6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyLF90aW1lc3RhbXBQcm92aWRlcjpvLF93aW5kb3dUaW1lOnN9PXRoaXM7ZXx8KGkucHVzaCh0KSwhciYmaS5wdXNoKG8ubm93KCkrcykpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KHQpfV9zdWJzY3JpYmUodCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtsZXQgZT10aGlzLl9pbm5lclN1YnNjcmliZSh0KSx7X2luZmluaXRlVGltZVdpbmRvdzppLF9idWZmZXI6cn09dGhpcyxvPXIuc2xpY2UoKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoJiYhdC5jbG9zZWQ7cys9aT8xOjIpdC5uZXh0KG9bc10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHQpLGV9X3RyaW1CdWZmZXIoKXtsZXR7X2J1ZmZlclNpemU6dCxfdGltZXN0YW1wUHJvdmlkZXI6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyfT10aGlzLG89KHI/MToyKSp0O2lmKHQ8MS8wJiZvPGkubGVuZ3RoJiZpLnNwbGljZSgwLGkubGVuZ3RoLW8pLCFyKXtsZXQgcz1lLm5vdygpLGE9MDtmb3IobGV0IGw9MTtsPGkubGVuZ3RoJiZpW2xdPD1zO2wrPTIpYT1sO2EmJmkuc3BsaWNlKDAsYSsxKX19fSxjUz1jbGFzcyBleHRlbmRzIHZue2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKX1zY2hlZHVsZSh0LGU9MCl7cmV0dXJuIHRoaXN9fSxqeT17c2V0SW50ZXJ2YWwobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1qeTtyZXR1cm4gaT8uc2V0SW50ZXJ2YWw/aS5zZXRJbnRlcnZhbChuLHQsLi4uZSk6c2V0SW50ZXJ2YWwobix0LC4uLmUpfSxjbGVhckludGVydmFsKG4pe2xldHtkZWxlZ2F0ZTp0fT1qeTtyZXR1cm4odD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkobil9LGRlbGVnYXRlOnZvaWQgMH0sQmM9Y2xhc3MgZXh0ZW5kcyBjU3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUodCxlPTApe3ZhciBpO2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDtsZXQgcj10aGlzLmlkLG89dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPXImJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQobyxyLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9bnVsbCE9PShpPXRoaXMuaWQpJiZ2b2lkIDAhPT1pP2k6dGhpcy5yZXF1ZXN0QXN5bmNJZChvLHRoaXMuaWQsZSksdGhpc31yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gankuc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksaSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7aWYobnVsbCE9aSYmdGhpcy5kZWxheT09PWkmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO251bGwhPWUmJmp5LmNsZWFySW50ZXJ2YWwoZSl9ZXhlY3V0ZSh0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7bGV0IGk9dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKGkpcmV0dXJuIGk7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4ZWN1dGUodCxlKXtsZXQgcixpPSExO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2gobyl7aT0hMCxyPW98fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKGkpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xvc2VkKXtsZXR7aWQ6dCxzY2hlZHVsZXI6ZX09dGhpcyx7YWN0aW9uczppfT1lO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLEJoKGksdGhpcyksbnVsbCE9dCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChlLHQsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19LEp1ZT0xLEZPPXt9O2Z1bmN0aW9uIGI4KG4pe3JldHVybiBuIGluIEZPJiYoZGVsZXRlIEZPW25dLCEwKX12YXIgeDg9e3NldEltbWVkaWF0ZShuKXtsZXQgdD1KdWUrKztyZXR1cm4gRk9bdF09ITAsa098fChrTz1Qcm9taXNlLnJlc29sdmUoKSksa08udGhlbigoKT0+YjgodCkmJm4oKSksdH0sY2xlYXJJbW1lZGlhdGUobil7Yjgobil9fSx7c2V0SW1tZWRpYXRlOiR1ZSxjbGVhckltbWVkaWF0ZTplZGV9PXg4LEd5PXtzZXRJbW1lZGlhdGUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PUd5O3JldHVybih0Py5zZXRJbW1lZGlhdGV8fCR1ZSkoLi4ubil9LGNsZWFySW1tZWRpYXRlKG4pe2xldHtkZWxlZ2F0ZTp0fT1HeTtyZXR1cm4odD8uY2xlYXJJbW1lZGlhdGV8fGVkZSkobil9LGRlbGVnYXRlOnZvaWQgMH0sS2Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlPUtkLm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yPXQsdGhpcy5ub3c9ZX1zY2hlZHVsZSh0LGU9MCxpKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLHQpLnNjaGVkdWxlKGksZSl9fTtLZC5ub3c9enkubm93O3ZhciBWYz1jbGFzcyBleHRlbmRzIEtke2NvbnN0cnVjdG9yKHQsZT1LZC5ub3cpe3N1cGVyKHQsZSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaCh0KXtsZXQgaSx7YWN0aW9uczplfT10aGlzO2lmKHRoaXMuX2FjdGl2ZSllLnB1c2godCk7ZWxzZXt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoaT10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGkpe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBpfX19fSxmZz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1HeS5zZXRJbW1lZGlhdGUodC5mbHVzaC5iaW5kKHQsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKEd5LmNsZWFySW1tZWRpYXRlKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLFl1PW5ldyBWYyhCYyksQzg9WXUsTk89bmV3IGNsYXNzIGV4dGVuZHMgVmN7fShjbGFzcyBleHRlbmRzIEJje2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gZT4wP3N1cGVyLnNjaGVkdWxlKHQsZSk6KHRoaXMuZGVsYXk9ZSx0aGlzLnN0YXRlPXQsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9ZXhlY3V0ZSh0LGUpe3JldHVybiBlPjB8fHRoaXMuY2xvc2VkP3N1cGVyLmV4ZWN1dGUodCxlKTp0aGlzLl9leGVjdXRlKHQsZSl9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPWkmJmk+MHx8bnVsbD09aSYmdGhpcy5kZWxheT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5mbHVzaCh0aGlzKSwwKX19KSxMTz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1oZy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnQuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKGhnLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLGFvPW5ldyBRdChuPT5uLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIGdTKG4pe3JldHVybiBuJiZibihuLnNjaGVkdWxlKX1mdW5jdGlvbiBCTyhuKXtyZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBIYyhuKXtyZXR1cm4gYm4oQk8obikpP24ucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIFVjKG4pe3JldHVybiBnUyhCTyhuKSk/bi5wb3AoKTp2b2lkIDB9dmFyIHE4PWQ4KFc4KCksMSkse19fZGVjb3JhdGU6WTgsX19hd2FpdGVyOlg4LF9fYXdhaXQ6YlMsX19hc3luY0dlbmVyYXRvcjpROCxfX2FzeW5jVmFsdWVzOks4fT1xOC5kZWZhdWx0LGdnPW49Pm4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiBuO2Z1bmN0aW9uIHhTKG4pe3JldHVybiBibihuPy50aGVuKX1mdW5jdGlvbiBDUyhuKXtyZXR1cm4gYm4obltwZ10pfWZ1bmN0aW9uIHdTKG4pe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmYm4obj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9ZnVuY3Rpb24gTVMobil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7bn0nYH0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX12YXIgU1M9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciI7ZnVuY3Rpb24gRVMobil7cmV0dXJuIGJuKG4/LltTU10pfWZ1bmN0aW9uIFRTKG4pe3JldHVybiBROCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgZT1uLmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2xldHt2YWx1ZTppLGRvbmU6cn09eWllbGQgYlMoZS5yZWFkKCkpO2lmKHIpcmV0dXJuIHlpZWxkIGJTKHZvaWQgMCk7eWllbGQgeWllbGQgYlMoaSl9fWZpbmFsbHl7ZS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIERTKG4pe3JldHVybiBibihuPy5nZXRSZWFkZXIpfWZ1bmN0aW9uIGFpKG4pe2lmKG4gaW5zdGFuY2VvZiBRdClyZXR1cm4gbjtpZihudWxsIT1uKXtpZihDUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bGV0IGU9bltwZ10oKTtpZihibihlLnN1YnNjcmliZSkpcmV0dXJuIGUuc3Vic2NyaWJlKHQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0obik7aWYoZ2cobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUXQodD0+e2ZvcihsZXQgZT0wO2U8bi5sZW5ndGgmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0pO3QuY29tcGxldGUoKX0pfShuKTtpZih4UyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bi50aGVuKGU9Pnt0LmNsb3NlZHx8KHQubmV4dChlKSx0LmNvbXBsZXRlKCkpfSxlPT50LmVycm9yKGUpKS50aGVuKG51bGwsc1MpfSl9KG4pO2lmKHdTKG4pKXJldHVybiBaOChuKTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57Zm9yKGxldCBlIG9mIG4paWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KX0obik7aWYoRFMobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBaOChUUyhuKSl9KG4pfXRocm93IE1TKG4pfWZ1bmN0aW9uIFo4KG4pe3JldHVybiBuZXcgUXQodD0+eyhmdW5jdGlvbihuLHQpe3ZhciBlLGkscixvO3JldHVybiBYOCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dHJ5e2ZvcihlPUs4KG4pOyEoaT15aWVsZCBlLm5leHQoKSkuZG9uZTspaWYodC5uZXh0KGkudmFsdWUpLHQuY2xvc2VkKXJldHVybn1jYXRjaChzKXtyPXtlcnJvcjpzfX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobz1lLnJldHVybikmJih5aWVsZCBvLmNhbGwoZSkpfWZpbmFsbHl7aWYocil0aHJvdyByLmVycm9yfX10LmNvbXBsZXRlKCl9KX0pKG4sdCkuY2F0Y2goZT0+dC5lcnJvcihlKSl9KX1mdW5jdGlvbiBZcyhuLHQsZSxpPTAscj0hMSl7bGV0IG89dC5zY2hlZHVsZShmdW5jdGlvbigpe2UoKSxyP24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxpKSk6dGhpcy51bnN1YnNjcmliZSgpfSxpKTtpZihuLmFkZChvKSwhcilyZXR1cm4gb31mdW5jdGlvbiB6aChuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57ZS5zdWJzY3JpYmUoTHQoaSxyPT5ZcyhpLG4sKCk9PmkubmV4dChyKSx0KSwoKT0+WXMoaSxuLCgpPT5pLmNvbXBsZXRlKCksdCkscj0+WXMoaSxuLCgpPT5pLmVycm9yKHIpLHQpKSl9KX1mdW5jdGlvbiBBUyhuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57aS5hZGQobi5zY2hlZHVsZSgoKT0+ZS5zdWJzY3JpYmUoaSksdCkpfSl9ZnVuY3Rpb24gSVMobix0KXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBRdChlPT57WXMoZSx0LCgpPT57bGV0IGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtZcyhlLHQsKCk9PntpLm5leHQoKS50aGVuKHI9PntyLmRvbmU/ZS5jb21wbGV0ZSgpOmUubmV4dChyLnZhbHVlKX0pfSwwLCEwKX0pfSl9ZnVuY3Rpb24gbG8obix0KXtyZXR1cm4gdD9mdW5jdGlvbihuLHQpe2lmKG51bGwhPW4pe2lmKENTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZihnZyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaT0wO3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7aT09PW4ubGVuZ3RoP2UuY29tcGxldGUoKTooZS5uZXh0KG5baSsrXSksZS5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KX0pfShuLHQpO2lmKHhTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZih3UyhuKSlyZXR1cm4gSVMobix0KTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaTtyZXR1cm4gWXMoZSx0LCgpPT57aT1uW1NTXSgpLFlzKGUsdCwoKT0+e2xldCByLG87dHJ5eyh7dmFsdWU6cixkb25lOm99PWkubmV4dCgpKX1jYXRjaChzKXtyZXR1cm4gdm9pZCBlLmVycm9yKHMpfW8/ZS5jb21wbGV0ZSgpOmUubmV4dChyKX0sMCwhMCl9KSwoKT0+Ym4oaT8ucmV0dXJuKSYmaS5yZXR1cm4oKX0pfShuLHQpO2lmKERTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBJUyhUUyhuKSx0KX0obix0KX10aHJvdyBNUyhuKX0obix0KTphaShuKX1mdW5jdGlvbiBqdCguLi5uKXtyZXR1cm4gbG8obixVYyhuKSl9ZnVuY3Rpb24gR2wobix0KXtsZXQgZT1ibihuKT9uOigpPT5uLGk9cj0+ci5lcnJvcihlKCkpO3JldHVybiBuZXcgUXQodD9yPT50LnNjaGVkdWxlKGksMCxyKTppKX12YXIgdGw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPWksdGhpcy5oYXNWYWx1ZT0iTiI9PT10fW9ic2VydmUodCl7cmV0dXJuIEhPKHRoaXMsdCl9ZG8odCxlLGkpe2xldHtraW5kOnIsdmFsdWU6byxlcnJvcjpzfT10aGlzO3JldHVybiJOIj09PXI/dD8uKG8pOiJFIj09PXI/ZT8uKHMpOmk/LigpfWFjY2VwdCh0LGUsaSl7dmFyIHI7cmV0dXJuIGJuKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5uZXh0KT90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsaSl9dG9PYnNlcnZhYmxlKCl7bGV0e2tpbmQ6dCx2YWx1ZTplLGVycm9yOml9PXRoaXMscj0iTiI9PT10P2p0KGUpOiJFIj09PXQ/R2woKCk9PmkpOiJDIj09PXQ/YW86MDtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICR7dH1gKTtyZXR1cm4gcn1zdGF0aWMgY3JlYXRlTmV4dCh0KXtyZXR1cm4gbmV3IHRsKCJOIix0KX1zdGF0aWMgY3JlYXRlRXJyb3IodCl7cmV0dXJuIG5ldyB0bCgiRSIsdm9pZCAwLHQpfXN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpe3JldHVybiB0bC5jb21wbGV0ZU5vdGlmaWNhdGlvbn19O2Z1bmN0aW9uIEhPKG4sdCl7dmFyIGUsaSxyO2xldHtraW5kOm8sdmFsdWU6cyxlcnJvcjphfT1uO2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyAia2luZCInKTsiTiI9PT1vP251bGw9PT0oZT10Lm5leHQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodCxzKToiRSI9PT1vP251bGw9PT0oaT10LmVycm9yKXx8dm9pZCAwPT09aXx8aS5jYWxsKHQsYSk6bnVsbD09PShyPXQuY29tcGxldGUpfHx2b2lkIDA9PT1yfHxyLmNhbGwodCl9ZnVuY3Rpb24gV3kobil7cmV0dXJuISFuJiYobiBpbnN0YW5jZW9mIFF0fHxibihuLmxpZnQpJiZibihuLnN1YnNjcmliZSkpfXRsLmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyB0bCgiQyIpO3ZhciBfZz1jZyhuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIFBTKG4sdCl7bGV0IGU9Im9iamVjdCI9PXR5cGVvZiB0O3JldHVybiBuZXcgUHJvbWlzZSgoaSxyKT0+e2xldCBvPW5ldyBqbCh7bmV4dDpzPT57aShzKSxvLnVuc3Vic2NyaWJlKCl9LGVycm9yOnIsY29tcGxldGU6KCk9PntlP2kodC5kZWZhdWx0VmFsdWUpOnIobmV3IF9nKX19KTtuLnN1YnNjcmliZShvKX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2kubmV4dChuLmNhbGwodCxvLHIrKykpfSkpfSl9dmFye2lzQXJyYXk6bGRlfT1BcnJheTtmdW5jdGlvbiBaZChuKXtyZXR1cm4gQih0PT5mdW5jdGlvbihuLHQpe3JldHVybiBsZGUodCk/biguLi50KTpuKHQpfShuLHQpKX12YXJ7aXNBcnJheTp1ZGV9PUFycmF5LHtnZXRQcm90b3R5cGVPZjpkZGUscHJvdG90eXBlOnBkZSxrZXlzOmhkZX09T2JqZWN0O2Z1bmN0aW9uIFJTKG4pe2lmKDE9PT1uLmxlbmd0aCl7bGV0IHQ9blswXTtpZih1ZGUodCkpcmV0dXJue2FyZ3M6dCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4mJmRkZShuKT09PXBkZX0odCkpe2xldCBlPWhkZSh0KTtyZXR1cm57YXJnczplLm1hcChpPT50W2ldKSxrZXlzOmV9fX1yZXR1cm57YXJnczpuLGtleXM6bnVsbH19ZnVuY3Rpb24gT1Mobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSxyKT0+KGVbaV09dFtyXSxlKSx7fSl9ZnVuY3Rpb24gcG4oLi4ubil7bGV0IHQ9VWMobiksZT1IYyhuKSx7YXJnczppLGtleXM6cn09UlMobik7aWYoMD09PWkubGVuZ3RoKXJldHVybiBsbyhbXSx0KTtsZXQgbz1uZXcgUXQoVU8oaSx0LHI/cz0+T1MocixzKTpNcykpO3JldHVybiBlP28ucGlwZShaZChlKSk6b31mdW5jdGlvbiBVTyhuLHQsZT1Ncyl7cmV0dXJuIGk9Pntvaih0LCgpPT57bGV0e2xlbmd0aDpyfT1uLG89bmV3IEFycmF5KHIpLHM9cixhPXI7Zm9yKGxldCBsPTA7bDxyO2wrKylvaih0LCgpPT57bGV0IGM9bG8obltsXSx0KSx1PSExO2Muc3Vic2NyaWJlKEx0KGksZD0+e29bbF09ZCx1fHwodT0hMCxhLS0pLGF8fGkubmV4dChlKG8uc2xpY2UoKSkpfSwoKT0+ey0tc3x8aS5jb21wbGV0ZSgpfSkpfSxpKX0saSl9fWZ1bmN0aW9uIG9qKG4sdCxlKXtuP1lzKGUsbix0KTp0KCl9ZnVuY3Rpb24gX24obix0LGU9MS8wKXtyZXR1cm4gYm4odCk/X24oKGkscik9PkIoKG8scyk9PnQoaSxvLHIscykpKGFpKG4oaSxyKSkpLGUpOigibnVtYmVyIj09dHlwZW9mIHQmJihlPXQpLHF0KChpLHIpPT5mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsPVtdLGM9MCx1PTAsZD0hMSxwPSgpPT57ZCYmIWwubGVuZ3RoJiYhYyYmdC5jb21wbGV0ZSgpfSxoPW09PmM8aT9mKG0pOmwucHVzaChtKSxmPW09PntjKys7bGV0IEM9ITE7YWkoZShtLHUrKykpLnN1YnNjcmliZShMdCh0LF89Pnt0Lm5leHQoXyl9LCgpPT57Qz0hMH0sdm9pZCAwLCgpPT57aWYoQyl0cnl7Zm9yKGMtLTtsLmxlbmd0aCYmYzxpOyl7bGV0IF89bC5zaGlmdCgpO2YoXyl9cCgpfWNhdGNoKF8pe3QuZXJyb3IoXyl9fSkpfTtyZXR1cm4gbi5zdWJzY3JpYmUoTHQodCxoLCgpPT57ZD0hMCxwKCl9KSksKCk9Pnt9fShpLHIsbixlKSkpfWZ1bmN0aW9uIGtTKG49MS8wKXtyZXR1cm4gX24oTXMsbil9ZnVuY3Rpb24gSmQoLi4ubil7cmV0dXJuIGtTKDEpKGxvKG4sVWMobikpKX1mdW5jdGlvbiBiYShuKXtyZXR1cm4gbmV3IFF0KHQ9PnthaShuKCkpLnN1YnNjcmliZSh0KX0pfWZ1bmN0aW9uIHhvKC4uLm4pe2xldCB0PUhjKG4pLHthcmdzOmUsa2V5czppfT1SUyhuKSxyPW5ldyBRdChvPT57bGV0e2xlbmd0aDpzfT1lO2lmKCFzKXJldHVybiB2b2lkIG8uY29tcGxldGUoKTtsZXQgYT1uZXcgQXJyYXkocyksbD1zLGM9cztmb3IobGV0IHU9MDt1PHM7dSsrKXtsZXQgZD0hMTthaShlW3VdKS5zdWJzY3JpYmUoTHQobyxwPT57ZHx8KGQ9ITAsYy0tKSxhW3VdPXB9LCgpPT5sLS0sdm9pZCAwLCgpPT57KCFsfHwhZCkmJihjfHxvLm5leHQoaT9PUyhpLGEpOmEpLG8uY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIHQ/ci5waXBlKFpkKHQpKTpyfXZhciBtZGU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sZ2RlPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxfZGU9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIGxpKG4sdCxlLGkpe2lmKGJuKGUpJiYoaT1lLGU9dm9pZCAwKSxpKXJldHVybiBsaShuLHQsZSkucGlwZShaZChpKSk7bGV0W3Isb109ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4uYWRkRXZlbnRMaXN0ZW5lcikmJmJuKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KG4pP2dkZS5tYXAocz0+YT0+bltzXSh0LGEsZSkpOmZ1bmN0aW9uKG4pe3JldHVybiBibihuLmFkZExpc3RlbmVyKSYmYm4obi5yZW1vdmVMaXN0ZW5lcil9KG4pP21kZS5tYXAobGoobix0KSk6ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4ub24pJiZibihuLm9mZil9KG4pP19kZS5tYXAobGoobix0KSk6W107aWYoIXImJmdnKG4pKXJldHVybiBfbihzPT5saShzLHQsZSkpKGFpKG4pKTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgUXQocz0+e2xldCBhPSguLi5sKT0+cy5uZXh0KDE8bC5sZW5ndGg/bDpsWzBdKTtyZXR1cm4gcihhKSwoKT0+byhhKX0pfWZ1bmN0aW9uIGxqKG4sdCl7cmV0dXJuIGU9Pmk9Pm5bZV0odCxpKX1mdW5jdGlvbiB4YShuPTAsdCxlPUM4KXtsZXQgaT0tMTtyZXR1cm4gbnVsbCE9dCYmKGdTKHQpP2U9dDppPXQpLG5ldyBRdChyPT57bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obil9KG4pPytuLWUubm93KCk6bjtvPDAmJihvPTApO2xldCBzPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyLmNsb3NlZHx8KHIubmV4dChzKyspLDA8PWk/dGhpcy5zY2hlZHVsZSh2b2lkIDAsaSk6ci5jb21wbGV0ZSgpKX0sbyl9KX1mdW5jdGlvbiB1biguLi5uKXtsZXQgdD1VYyhuKSxlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBCTyhuKT9uLnBvcCgpOjEvMH0obiksaT1uO3JldHVybiBpLmxlbmd0aD8xPT09aS5sZW5ndGg/YWkoaVswXSk6a1MoZSkobG8oaSx0KSk6YW99dmFye2lzQXJyYXk6eGRlfT1BcnJheTtmdW5jdGlvbiBGUyhuKXtyZXR1cm4gMT09PW4ubGVuZ3RoJiZ4ZGUoblswXSk/blswXTpufWZ1bmN0aW9uIEhlKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9MDtlLnN1YnNjcmliZShMdChpLG89Pm4uY2FsbCh0LG8scisrKSYmaS5uZXh0KG8pKSl9KX1mdW5jdGlvbiB6YyhuLHQ9WXUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgaT0hMSxyPW51bGwsbz1udWxsLHM9ITEsYT0oKT0+e2lmKG8/LnVuc3Vic2NyaWJlKCksbz1udWxsLGkpe2k9ITE7bGV0IGM9cjtyPW51bGwsZS5uZXh0KGMpfXMmJmUuY29tcGxldGUoKX0sbD0oKT0+e289bnVsbCxzJiZlLmNvbXBsZXRlKCl9O3Quc3Vic2NyaWJlKEx0KGUsYz0+e2k9ITAscj1jLG98fGFpKG4oKSkuc3Vic2NyaWJlKG89THQoZSxhLGwpKX0sKCk9PntzPSEwLCghaXx8IW98fG8uY2xvc2VkKSYmZS5jb21wbGV0ZSgpfSkpfSl9KCgpPT54YShuLHQpKX1mdW5jdGlvbiBDbyhuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgbyxpPW51bGwscj0hMTtpPXQuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLHZvaWQgMCxzPT57bz1haShuKHMsQ28obikodCkpKSxpPyhpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKTpyPSEwfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKX0pfWZ1bmN0aW9uIHVqKG4sdCxlLGkscil7cmV0dXJuKG8scyk9PntsZXQgYT1lLGw9dCxjPTA7by5zdWJzY3JpYmUoTHQocyx1PT57bGV0IGQ9YysrO2w9YT9uKGwsdSxkKTooYT0hMCx1KSxpJiZzLm5leHQobCl9LHImJigoKT0+e2EmJnMubmV4dChsKSxzLmNvbXBsZXRlKCl9KSkpfX1mdW5jdGlvbiBHTyguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gdD9mdW5jdGlvbiguLi5uKXtyZXR1cm4gUk8obil9KEdPKC4uLm4pLFpkKHQpKTpxdCgoZSxpKT0+e1VPKFtlLC4uLkZTKG4pXSkoaSl9KX1mdW5jdGlvbiBzciguLi5uKXtyZXR1cm4gR08oLi4ubil9ZnVuY3Rpb24gQXIobix0PVl1KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT0oKT0+e2lmKHIpe3IudW5zdWJzY3JpYmUoKSxyPW51bGw7bGV0IGM9bztvPW51bGwsaS5uZXh0KGMpfX07ZnVuY3Rpb24gbCgpe2xldCBjPXMrbix1PXQubm93KCk7aWYodTxjKXJldHVybiByPXRoaXMuc2NoZWR1bGUodm9pZCAwLGMtdSksdm9pZCBpLmFkZChyKTthKCl9ZS5zdWJzY3JpYmUoTHQoaSxjPT57bz1jLHM9dC5ub3coKSxyfHwocj10LnNjaGVkdWxlKGwsbiksaS5hZGQocikpfSwoKT0+e2EoKSxpLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e289cj1udWxsfSkpfSl9ZnVuY3Rpb24gZGoobil7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT57aXx8ZS5uZXh0KG4pLGUuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIEh0KG4pe3JldHVybiBuPD0wPygpPT5hbzpxdCgodCxlKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUoTHQoZSxyPT57KytpPD1uJiYoZS5uZXh0KHIpLG48PWkmJmUuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBxeSgpe3JldHVybiBxdCgobix0KT0+e24uc3Vic2NyaWJlKEx0KHQsemwpKX0pfWZ1bmN0aW9uIHZnKG4sdCl7cmV0dXJuIHQ/ZT0+SmQodC5waXBlKEh0KDEpLHF5KCkpLGUucGlwZSh2ZyhuKSkpOl9uKChlLGkpPT5uKGUsaSkucGlwZShIdCgxKSxmdW5jdGlvbihuKXtyZXR1cm4gQigoKT0+bil9KGUpKSl9ZnVuY3Rpb24gbmwobix0PVl1KXtsZXQgZT14YShuLHQpO3JldHVybiB2ZygoKT0+ZSl9ZnVuY3Rpb24gZGkobix0PU1zKXtyZXR1cm4gbj1uPz9DZGUscXQoKGUsaSk9PntsZXQgcixvPSEwO2Uuc3Vic2NyaWJlKEx0KGkscz0+e2xldCBhPXQocyk7KG98fCFuKHIsYSkpJiYobz0hMSxyPWEsaS5uZXh0KHMpKX0pKX0pfWZ1bmN0aW9uIENkZShuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBoaihuPXdkZSl7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT5pP2UuY29tcGxldGUoKTplLmVycm9yKG4oKSkpKX0pfWZ1bmN0aW9uIHdkZSgpe3JldHVybiBuZXcgX2d9ZnVuY3Rpb24gTFMobix0KXtyZXR1cm4gdD9lPT5lLnBpcGUoTFMoKGkscik9PmFpKG4oaSxyKSkucGlwZShCKChvLHMpPT50KGksbyxyLHMpKSkpKTpxdCgoZSxpKT0+e2xldCByPTAsbz1udWxsLHM9ITE7ZS5zdWJzY3JpYmUoTHQoaSxhPT57b3x8KG89THQoaSx2b2lkIDAsKCk9PntvPW51bGwscyYmaS5jb21wbGV0ZSgpfSksYWkobihhLHIrKykpLnN1YnNjcmliZShvKSl9LCgpPT57cz0hMCwhbyYmaS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gVlMobix0LGUsaSl7cmV0dXJuIHF0KChyLG8pPT57bGV0IHM7dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KHtkdXJhdGlvbjplLGVsZW1lbnQ6cyxjb25uZWN0b3I6aX09dCk6cz10O2xldCBhPW5ldyBNYXAsbD1mPT57YS5mb3JFYWNoKGYpLGYobyl9LGM9Zj0+bChtPT5tLmVycm9yKGYpKSx1PTAsZD0hMSxwPW5ldyBIeShvLGY9Pnt0cnl7bGV0IG09bihmKSxDPWEuZ2V0KG0pO2lmKCFDKXthLnNldChtLEM9aT9pKCk6bmV3IFRlKTtsZXQgXz1mdW5jdGlvbihmLG0pe2xldCBDPW5ldyBRdChfPT57dSsrO2xldCB5PW0uc3Vic2NyaWJlKF8pO3JldHVybigpPT57eS51bnN1YnNjcmliZSgpLDA9PS0tdSYmZCYmcC51bnN1YnNjcmliZSgpfX0pO3JldHVybiBDLmtleT1mLEN9KG0sQyk7aWYoby5uZXh0KF8pLGUpe2xldCB5PUx0KEMsKCk9PntDLmNvbXBsZXRlKCkseT8udW5zdWJzY3JpYmUoKX0sdm9pZCAwLHZvaWQgMCwoKT0+YS5kZWxldGUobSkpO3AuYWRkKGFpKGUoXykpLnN1YnNjcmliZSh5KSl9fUMubmV4dChzP3MoZik6Zil9Y2F0Y2gobSl7YyhtKX19LCgpPT5sKGY9PmYuY29tcGxldGUoKSksYywoKT0+YS5jbGVhcigpLCgpPT4oZD0hMCwwPT09dSkpO3Iuc3Vic2NyaWJlKHApfSl9ZnVuY3Rpb24geWcoKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKEx0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIFhzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBUZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCx1PSExLGQ9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGg9KCk9PntwKCkscz1sPXZvaWQgMCx1PWQ9ITF9LGY9KCk9PntsZXQgbT1zO2goKSxtPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gcXQoKG0sQyk9PntjKyssIWQmJiF1JiZwKCk7bGV0IF89bD1sPz90KCk7Qy5hZGQoKCk9PntjLS0sMD09PWMmJiFkJiYhdSYmKGE9Wk8oZixyKSl9KSxfLnN1YnNjcmliZShDKSwhcyYmYz4wJiYocz1uZXcgamwoe25leHQ6eT0+Xy5uZXh0KHkpLGVycm9yOnk9PntkPSEwLHAoKSxhPVpPKGgsZSx5KSxfLmVycm9yKHkpfSxjb21wbGV0ZTooKT0+e3U9ITAscCgpLGE9Wk8oaCxpKSxfLmNvbXBsZXRlKCl9fSksYWkobSkuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBaTyhuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBqbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIFFzKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsWHMoe2Nvbm5lY3RvcjooKT0+bmV3IFVoKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIENhKG4pe3JldHVybiBIZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gVm4oLi4ubil7bGV0IHQ9VWMobik7cmV0dXJuIHF0KChlLGkpPT57KHQ/SmQobixlLHQpOkpkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIHZpKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKEx0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCx1PW8rKzthaShuKGwsdSkpLnN1YnNjcmliZShyPUx0KGksZD0+aS5uZXh0KHQ/dChsLGQsdSxjKyspOmQpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIG90KG4pe3JldHVybiBxdCgodCxlKT0+e2FpKG4pLnN1YnNjcmliZShMdChlLCgpPT5lLmNvbXBsZXRlKCksemwpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gWXkobix0PSExKXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBOdChuLHQsZSl7bGV0IGk9Ym4obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/cXQoKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoTHQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOk1zfXZhciBKTz17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYmcobix0PVl1LGU9Sk8pe2xldCBpPXhhKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1KTyl7cmV0dXJuIHF0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLHU9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoaCgpLGMmJmkuY29tcGxldGUoKSl9LGQ9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPWY9Pmw9YWkobihmKSkuc3Vic2NyaWJlKEx0KGksdSxkKSksaD0oKT0+e2lmKHMpe3M9ITE7bGV0IGY9YTthPW51bGwsaS5uZXh0KGYpLCFjJiZwKGYpfX07ZS5zdWJzY3JpYmUoTHQoaSxmPT57cz0hMCxhPWYsKCFsfHxsLmNsb3NlZCkmJihyP2goKTpwKGYpKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBHdCguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWFpKG5bbF0pLnN1YnNjcmliZShMdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KE1zKSkmJihzPW51bGwpKX0semwpKTtlLnN1YnNjcmliZShMdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIGFyKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT1hcilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uICRPKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIGNvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChjbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIGJrKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIE1kZT1hcih7X19mb3J3YXJkX3JlZl9fOmFyfSk7ZnVuY3Rpb24gcmkobil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPXJpLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY28odGhpcygpKX0sbn1mdW5jdGlvbiBxaShuKXtyZXR1cm4gbEcobik/bigpOm59ZnVuY3Rpb24gbEcobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoTWRlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1yaX12YXIgTXQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMobil9JHt0PyI6ICIrdC50cmltKCk6IiJ9YH0odCxlKSksdGhpcy5jb2RlPXR9fTtmdW5jdGlvbiBxbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bjpudWxsPT1uPyIiOlN0cmluZyhuKX1mdW5jdGlvbiBNRihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLm5hbWV8fG4udG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLm5hbWV8fG4udHlwZS50b1N0cmluZygpOnFuKG4pfWZ1bmN0aW9uIFNGKG4sdCl7dGhyb3cgbmV3IE10KC0yMDEsITEpfWZ1bmN0aW9uIGNHKG4sdCxlLGkpe3Rocm93IG5ldyBFcnJvcihgQVNTRVJUSU9OIEVSUk9SOiAke259YCsobnVsbD09aT8iIjpgIFtFeHBlY3RlZD0+ICR7ZX0gJHtpfSAke3R9IDw9QWN0dWFsXWApKX1mdW5jdGlvbiBnZShuKXtyZXR1cm57dG9rZW46bi50b2tlbixwcm92aWRlZEluOm4ucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5Om4uZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIFUobil7cmV0dXJue3Byb3ZpZGVyczpuLnByb3ZpZGVyc3x8W10saW1wb3J0czpuLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBFRihuKXtyZXR1cm4gbWoobix0RSl8fG1qKG4sdUcpfWZ1bmN0aW9uIG1qKG4sdCl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsfWZ1bmN0aW9uIGdqKG4pe3JldHVybiBuJiYobi5oYXNPd25Qcm9wZXJ0eSh4ayl8fG4uaGFzT3duUHJvcGVydHkoSWRlKSk/blt4a106bnVsbH12YXIgQ2ssdEU9YXIoeyJcdTAyNzVwcm92Ijphcn0pLHhrPWFyKHsiXHUwMjc1aW5qIjphcn0pLHVHPWFyKHtuZ0luamVjdGFibGVEZWY6YXJ9KSxJZGU9YXIoe25nSW5qZWN0b3JEZWY6YXJ9KSxpaT0oKCk9PntyZXR1cm4obj1paXx8KGlpPXt9KSlbbi5EZWZhdWx0PTBdPSJEZWZhdWx0IixuW24uSG9zdD0xXT0iSG9zdCIsbltuLlNlbGY9Ml09IlNlbGYiLG5bbi5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLG5bbi5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGlpO3ZhciBufSkoKTtmdW5jdGlvbiBpbChuKXtsZXQgdD1DaztyZXR1cm4gQ2s9bix0fWZ1bmN0aW9uIGRHKG4sdCxlKXtsZXQgaT1FRihuKTtyZXR1cm4gaSYmInJvb3QiPT1pLnByb3ZpZGVkSW4/dm9pZCAwPT09aS52YWx1ZT9pLnZhbHVlPWkuZmFjdG9yeSgpOmkudmFsdWU6ZSZpaS5PcHRpb25hbD9udWxsOnZvaWQgMCE9PXQ/dDp2b2lkIFNGKGNvKG4pKX1mdW5jdGlvbiB0ZihuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX12YXIgS3k9KCgpPT57cmV0dXJuKG49S3l8fChLeT17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixLeTt2YXIgbn0pKCksd2E9KCgpPT57cmV0dXJuKG49d2F8fCh3YT17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIix3YTt2YXIgbn0pKCksV3I9KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLEFnPXt9LFdpPVtdLFRFPWFyKHsiXHUwMjc1Y21wIjphcn0pLFRGPWFyKHsiXHUwMjc1ZGlyIjphcn0pLERGPWFyKHsiXHUwMjc1cGlwZSI6YXJ9KSxwRz1hcih7Ilx1MDI3NW1vZCI6YXJ9KSxRdT1hcih7Ilx1MDI3NWZhYyI6YXJ9KSxaeT1hcih7X19OR19FTEVNRU5UX0lEX186YXJ9KSxSZGU9MDtmdW5jdGlvbiBrKG4pe3JldHVybiB0ZigoKT0+e2xldCBlPSEwPT09bi5zdGFuZGFsb25lLGk9e30scj17dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxkZWNsczpuLmRlY2xzLHZhcnM6bi52YXJzLGZhY3Rvcnk6bnVsbCx0ZW1wbGF0ZTpuLnRlbXBsYXRlfHxudWxsLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6aSxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBc3x8bnVsbCxvblB1c2g6bi5jaGFuZ2VEZXRlY3Rpb249PT1LeS5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsc3RhbmRhbG9uZTplLGRlcGVuZGVuY2llczplJiZuLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bnVsbCxzZWxlY3RvcnM6bi5zZWxlY3RvcnN8fFdpLHZpZXdRdWVyeTpuLnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpuLmZlYXR1cmVzfHxudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8d2EuRW11bGF0ZWQsaWQ6ImMiK1JkZSsrLHN0eWxlczpuLnN0eWxlc3x8V2ksXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz1uLmRlcGVuZGVuY2llcyxzPW4uZmVhdHVyZXM7cmV0dXJuIHIuaW5wdXRzPXZqKG4uaW5wdXRzLGkpLHIub3V0cHV0cz12aihuLm91dHB1dHMpLHMmJnMuZm9yRWFjaChhPT5hKHIpKSxyLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoaEcpLmZpbHRlcihfaik6bnVsbCxyLnBpcGVEZWZzPW8/KCk9PigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6bykubWFwKEt1KS5maWx0ZXIoX2opOm51bGwscn0pfWZ1bmN0aW9uIGJiKG4sdCxlKXtsZXQgaT1uLlx1MDI3NWNtcDtpLmRpcmVjdGl2ZURlZnM9KCk9PigiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCkubWFwKGhHKSxpLnBpcGVEZWZzPSgpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUpLm1hcChLdSl9ZnVuY3Rpb24gaEcobil7cmV0dXJuIG9sKG4pfHxYaChuKX1mdW5jdGlvbiBfaihuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24geihuKXtyZXR1cm4gdGYoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxXaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFdpLGltcG9ydHM6bi5pbXBvcnRzfHxXaSxleHBvcnRzOm4uZXhwb3J0c3x8V2ksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIHZqKG4sdCl7aWYobnVsbD09bilyZXR1cm4gQWc7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX12YXIgT2U9aztmdW5jdGlvbiBCZyhuKXtyZXR1cm57dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsZmFjdG9yeTpudWxsLHB1cmU6ITEhPT1uLnB1cmUsc3RhbmRhbG9uZTohMD09PW4uc3RhbmRhbG9uZSxvbkRlc3Ryb3k6bi50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gb2wobil7cmV0dXJuIG5bVEVdfHxudWxsfWZ1bmN0aW9uIFhoKG4pe3JldHVybiBuW1RGXXx8bnVsbH1mdW5jdGlvbiBLdShuKXtyZXR1cm4gbltERl18fG51bGx9ZnVuY3Rpb24gZkcobil7bGV0IHQ9b2wobil8fFhoKG4pfHxLdShuKTtyZXR1cm4gbnVsbCE9PXQmJnQuc3RhbmRhbG9uZX1mdW5jdGlvbiBJZyhuLHQpe2xldCBlPW5bcEddfHxudWxsO2lmKCFlJiYhMD09PXQpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Y28obil9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gcWgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgblsxXX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmITA9PT1uWzFdfWZ1bmN0aW9uIFBGKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX1mdW5jdGlvbiBSRihuKXtyZXR1cm4gMj09KDImbi5mbGFncyl9ZnVuY3Rpb24gQUUobil7cmV0dXJuIDE9PSgxJm4uZmxhZ3MpfWZ1bmN0aW9uIFFsKG4pe3JldHVybiBudWxsIT09bi50ZW1wbGF0ZX1mdW5jdGlvbiBGZGUobil7cmV0dXJuIDAhPSgyNTYmblsyXSl9ZnVuY3Rpb24gUWgobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShRdSk/bltRdV06bnVsbH1mdW5jdGlvbiB6dCgpe3JldHVybiBfR31mdW5jdGlvbiBfRyhuKXtyZXR1cm4gbi50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKG4uc2V0SW5wdXQ9TGRlKSxOZGV9ZnVuY3Rpb24gTmRlKCl7bGV0IG49eUcodGhpcyksdD1uPy5jdXJyZW50O2lmKHQpe2xldCBlPW4ucHJldmlvdXM7aWYoZT09PUFnKW4ucHJldmlvdXM9dDtlbHNlIGZvcihsZXQgaSBpbiB0KWVbaV09dFtpXTtuLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKHQpfX1mdW5jdGlvbiBMZGUobix0LGUsaSl7bGV0IHI9eUcobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bdkddPXR9KG4se3ByZXZpb3VzOkFnLGN1cnJlbnQ6bnVsbH0pLG89ci5jdXJyZW50fHwoci5jdXJyZW50PXt9KSxzPXIucHJldmlvdXMsYT10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLGw9c1thXTtvW2FdPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPWl9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0obCYmbC5jdXJyZW50VmFsdWUsdCxzPT09QWcpLG5baV09dH16dC5uZ0luaGVyaXQ9ITA7dmFyIHZHPSJfX25nU2ltcGxlQ2hhbmdlc19fIjtmdW5jdGlvbiB5RyhuKXtyZXR1cm4gblt2R118fG51bGx9ZnVuY3Rpb24gTWEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bMF07cmV0dXJuIG59ZnVuY3Rpb24gSUUobix0KXtyZXR1cm4gTWEodFtuXSl9ZnVuY3Rpb24gdWwobix0KXtyZXR1cm4gTWEodFtuLmluZGV4XSl9ZnVuY3Rpb24gQ0cobix0KXtyZXR1cm4gbi5kYXRhW3RdfWZ1bmN0aW9uIEhnKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gb3Aobix0KXtsZXQgZT10W25dO3JldHVybiBxaChlKT9lOmVbMF19ZnVuY3Rpb24gb0Uobil7cmV0dXJuIDY0PT0oNjQmblsyXSl9ZnVuY3Rpb24gZXAobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gd0cobil7blsxOF09MH1mdW5jdGlvbiBPRihuLHQpe25bNV0rPXQ7bGV0IGU9bixpPW5bM107Zm9yKDtudWxsIT09aSYmKDE9PT10JiYxPT09ZVs1XXx8LTE9PT10JiYwPT09ZVs1XSk7KWlbNV0rPXQsZT1pLGk9aVszXX12YXIgWW49e2xGcmFtZTpQRyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIE1HKCl7cmV0dXJuIFluLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBaZSgpe3JldHVybiBZbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRGkoKXtyZXR1cm4gWW4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHJlKG4pe3JldHVybiBZbi5sRnJhbWUuY29udGV4dExWaWV3PW4sbls4XX1mdW5jdGlvbiBvZShuKXtyZXR1cm4gWW4ubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLG59ZnVuY3Rpb24gTW8oKXtsZXQgbj1TRygpO2Zvcig7bnVsbCE9PW4mJjY0PT09bi50eXBlOyluPW4ucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFNHKCl7cmV0dXJuIFluLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gbGIoKXtsZXQgbj1Zbi5sRnJhbWUsdD1uLmN1cnJlbnRUTm9kZTtyZXR1cm4gbi5pc1BhcmVudD90OnQucGFyZW50fWZ1bmN0aW9uIFdjKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuY3VycmVudFROb2RlPW4sZS5pc1BhcmVudD10fWZ1bmN0aW9uIGtGKCl7cmV0dXJuIFluLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBGRigpe1luLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBFcygpe2xldCBuPVluLmxGcmFtZSx0PW4uYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PXQmJih0PW4uYmluZGluZ1Jvb3RJbmRleD1uLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSx0fWZ1bmN0aW9uICR1KCl7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gRUcobil7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXg9bn1mdW5jdGlvbiBVZygpe3JldHVybiBZbi5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gZWQobil7bGV0IHQ9WW4ubEZyYW1lLGU9dC5iaW5kaW5nSW5kZXg7cmV0dXJuIHQuYmluZGluZ0luZGV4PXQuYmluZGluZ0luZGV4K24sZX1mdW5jdGlvbiBURyhuKXtZbi5sRnJhbWUuaW5JMThuPW59ZnVuY3Rpb24gUWRlKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuYmluZGluZ0luZGV4PWUuYmluZGluZ1Jvb3RJbmRleD1uLFNrKHQpfWZ1bmN0aW9uIFNrKG4pe1luLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9bn1mdW5jdGlvbiBORihuKXtsZXQgdD1Zbi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09dD9udWxsOm5bdF19ZnVuY3Rpb24gREcoKXtyZXR1cm4gWW4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIExGKG4pe1luLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIFpkZShuKXtsZXQgdD1uWzFdO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bls2XTpudWxsfWZ1bmN0aW9uIEFHKG4sdCxlKXtpZihlJmlpLlNraXBTZWxmKXtsZXQgcj10LG89bjtmb3IoOyEocj1yLnBhcmVudCxudWxsIT09cnx8ZSZpaS5Ib3N0fHwocj1aZGUobyksbnVsbD09PXJ8fChvPW9bMTVdLDEwJnIudHlwZSkpKTspO2lmKG51bGw9PT1yKXJldHVybiExO3Q9cixuPW99bGV0IGk9WW4ubEZyYW1lPUlHKCk7cmV0dXJuIGkuY3VycmVudFROb2RlPXQsaS5sVmlldz1uLCEwfWZ1bmN0aW9uIEJGKG4pe2xldCB0PUlHKCksZT1uWzFdO1luLmxGcmFtZT10LHQuY3VycmVudFROb2RlPWUuZmlyc3RDaGlsZCx0LmxWaWV3PW4sdC50Vmlldz1lLHQuY29udGV4dExWaWV3PW4sdC5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nU3RhcnRJbmRleCx0LmluSTE4bj0hMX1mdW5jdGlvbiBJRygpe2xldCBuPVluLmxGcmFtZSx0PW51bGw9PT1uP251bGw6bi5jaGlsZDtyZXR1cm4gbnVsbD09PXQ/UEcobik6dH1mdW5jdGlvbiBQRyhuKXtsZXQgdD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50Om4sY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09biYmKG4uY2hpbGQ9dCksdH1mdW5jdGlvbiBSRygpe2xldCBuPVluLmxGcmFtZTtyZXR1cm4gWW4ubEZyYW1lPW4ucGFyZW50LG4uY3VycmVudFROb2RlPW51bGwsbi5sVmlldz1udWxsLG59dmFyIE9HPVJHO2Z1bmN0aW9uIFZGKCl7bGV0IG49UkcoKTtuLmlzUGFyZW50PSEwLG4udFZpZXc9bnVsbCxuLnNlbGVjdGVkSW5kZXg9LTEsbi5jb250ZXh0TFZpZXc9bnVsbCxuLmVsZW1lbnREZXB0aENvdW50PTAsbi5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsbi5jdXJyZW50TmFtZXNwYWNlPW51bGwsbi5iaW5kaW5nUm9vdEluZGV4PS0xLG4uYmluZGluZ0luZGV4PS0xLG4uY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBUcygpe3JldHVybiBZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiB0cChuKXtZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleD1ufWZ1bmN0aW9uIHFyKCl7bGV0IG49WW4ubEZyYW1lO3JldHVybiBDRyhuLnRWaWV3LG4uc2VsZWN0ZWRJbmRleCl9ZnVuY3Rpb24gam4oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ic3ZnIn1mdW5jdGlvbiBTYSgpe1luLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPW51bGx9ZnVuY3Rpb24gUEUobix0KXtmb3IobGV0IGU9dC5kaXJlY3RpdmVTdGFydCxpPXQuZGlyZWN0aXZlRW5kO2U8aTtlKyspe2xldCBvPW4uZGF0YVtlXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnMsbmdBZnRlckNvbnRlbnRDaGVja2VkOmEsbmdBZnRlclZpZXdJbml0OmwsbmdBZnRlclZpZXdDaGVja2VkOmMsbmdPbkRlc3Ryb3k6dX09bztzJiYobi5jb250ZW50SG9va3N8fChuLmNvbnRlbnRIb29rcz1bXSkpLnB1c2goLWUscyksYSYmKChuLmNvbnRlbnRIb29rc3x8KG4uY29udGVudEhvb2tzPVtdKSkucHVzaChlLGEpLChuLmNvbnRlbnRDaGVja0hvb2tzfHwobi5jb250ZW50Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxhKSksbCYmKG4udmlld0hvb2tzfHwobi52aWV3SG9va3M9W10pKS5wdXNoKC1lLGwpLGMmJigobi52aWV3SG9va3N8fChuLnZpZXdIb29rcz1bXSkpLnB1c2goZSxjKSwobi52aWV3Q2hlY2tIb29rc3x8KG4udmlld0NoZWNrSG9va3M9W10pKS5wdXNoKGUsYykpLG51bGwhPXUmJihuLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKSkucHVzaChlLHUpfX1mdW5jdGlvbiBxUyhuLHQsZSl7a0cobix0LDMsZSl9ZnVuY3Rpb24gWVMobix0LGUsaSl7KDMmblsyXSk9PT1lJiZrRyhuLHQsZSxpKX1mdW5jdGlvbiBlayhuLHQpe2xldCBlPW5bMl07KDMmZSk9PT10JiYoZSY9MjA0NyxlKz0xLG5bMl09ZSl9ZnVuY3Rpb24ga0cobix0LGUsaSl7bGV0IG89aT8/LTEscz10Lmxlbmd0aC0xLGE9MDtmb3IobGV0IGw9dm9pZCAwIT09aT82NTUzNSZuWzE4XTowO2w8cztsKyspaWYoIm51bWJlciI9PXR5cGVvZiB0W2wrMV0pe2lmKGE9dFtsXSxudWxsIT1pJiZhPj1pKWJyZWFrfWVsc2UgdFtsXTwwJiYoblsxOF0rPTY1NTM2KSwoYTxvfHwtMT09bykmJihycGUobixlLHQsbCksblsxOF09KDQyOTQ5MDE3NjAmblsxOF0pK2wrMiksbCsrfWZ1bmN0aW9uIHJwZShuLHQsZSxpKXtsZXQgcj1lW2ldPDAsbz1lW2krMV0sYT1uW3I/LWVbaV06ZVtpXV07aWYocil7aWYoblsyXT4+MTE8blsxOF0+PjE2JiYoMyZuWzJdKT09PXQpe25bMl0rPTIwNDg7dHJ5e28uY2FsbChhKX1maW5hbGx5e319fWVsc2UgdHJ5e28uY2FsbChhKX1maW5hbGx5e319dmFyIEtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9ZSx0aGlzLmluamVjdEltcGw9aX19O2Z1bmN0aW9uIHNFKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aDspe2xldCByPWVbaV07aWYoIm51bWJlciI9PXR5cGVvZiByKXtpZigwIT09cilicmVhaztpKys7bGV0IG89ZVtpKytdLHM9ZVtpKytdLGE9ZVtpKytdO24uc2V0QXR0cmlidXRlKHQscyxhLG8pfWVsc2V7bGV0IG89cixzPWVbKytpXTtjcGUobyk/bi5zZXRQcm9wZXJ0eSh0LG8scyk6bi5zZXRBdHRyaWJ1dGUodCxvLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gRkcobil7cmV0dXJuIDM9PT1ufHw0PT09bnx8Nj09PW59ZnVuY3Rpb24gY3BlKG4pe3JldHVybiA2ND09PW4uY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBhRShuLHQpe2lmKG51bGwhPT10JiYwIT09dC5sZW5ndGgpaWYobnVsbD09PW58fDA9PT1uLmxlbmd0aCluPXQuc2xpY2UoKTtlbHNle2xldCBlPS0xO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgcj10W2ldOyJudW1iZXIiPT10eXBlb2Ygcj9lPXI6MD09PWV8fHhqKG4sZSxyLG51bGwsLTE9PT1lfHwyPT09ZT90WysraV06bnVsbCl9fXJldHVybiBufWZ1bmN0aW9uIHhqKG4sdCxlLGkscil7bGV0IG89MCxzPW4ubGVuZ3RoO2lmKC0xPT09dClzPS0xO2Vsc2UgZm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvKytdO2lmKCJudW1iZXIiPT10eXBlb2YgYSl7aWYoYT09PXQpe3M9LTE7YnJlYWt9aWYoYT50KXtzPW8tMTticmVha319fWZvcig7bzxuLmxlbmd0aDspe2xldCBhPW5bb107aWYoIm51bWJlciI9PXR5cGVvZiBhKWJyZWFrO2lmKGE9PT1lKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09ciYmKG5bbysxXT1yKSk7aWYoaT09PW5bbysxXSlyZXR1cm4gdm9pZChuW28rMl09cil9bysrLG51bGwhPT1pJiZvKyssbnVsbCE9PXImJm8rK30tMSE9PXMmJihuLnNwbGljZShzLDAsdCksbz1zKzEpLG4uc3BsaWNlKG8rKywwLGUpLG51bGwhPT1pJiZuLnNwbGljZShvKyssMCxpKSxudWxsIT09ciYmbi5zcGxpY2UobysrLDAscil9ZnVuY3Rpb24gTkcobil7cmV0dXJuLTEhPT1ufWZ1bmN0aW9uIGxFKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIGNFKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVsxNV0sZS0tO3JldHVybiBpfXZhciBFaz0hMDtmdW5jdGlvbiB1RShuKXtsZXQgdD1FaztyZXR1cm4gRWs9bix0fXZhciBwcGU9MCxqYz17fTtmdW5jdGlvbiBjYihuLHQpe2xldCBlPVZHKG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbMV07aS5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9dC5sZW5ndGgsdGsoaS5kYXRhLG4pLHRrKHQsbnVsbCksdGsoaS5ibHVlcHJpbnQsbnVsbCkpO2xldCByPVVGKG4sdCksbz1uLmluamVjdG9ySW5kZXg7aWYoTkcocikpe2xldCBzPWxFKHIpLGE9Y0Uocix0KSxsPWFbMV0uZGF0YTtmb3IobGV0IGM9MDtjPDg7YysrKXRbbytjXT1hW3MrY118bFtzK2NdfXJldHVybiB0W28rOF09cixvfWZ1bmN0aW9uIHRrKG4sdCl7bi5wdXNoKDAsMCwwLDAsMCwwLDAsMCx0KX1mdW5jdGlvbiBWRyhuLHQpe3JldHVybi0xPT09bi5pbmplY3RvckluZGV4fHxuLnBhcmVudCYmbi5wYXJlbnQuaW5qZWN0b3JJbmRleD09PW4uaW5qZWN0b3JJbmRleHx8bnVsbD09PXRbbi5pbmplY3RvckluZGV4KzhdPy0xOm4uaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBVRihuLHQpe2lmKG4ucGFyZW50JiYtMSE9PW4ucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIG4ucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGU9MCxpPW51bGwscj10O2Zvcig7bnVsbCE9PXI7KXtpZihpPUdHKHIpLG51bGw9PT1pKXJldHVybi0xO2lmKGUrKyxyPXJbMTVdLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuLTF9ZnVuY3Rpb24gZEUobix0LGUpeyFmdW5jdGlvbihuLHQsZSl7bGV0IGk7InN0cmluZyI9PXR5cGVvZiBlP2k9ZS5jaGFyQ29kZUF0KDApfHwwOmUuaGFzT3duUHJvcGVydHkoWnkpJiYoaT1lW1p5XSksbnVsbD09aSYmKGk9ZVtaeV09cHBlKyspO2xldCByPTI1NSZpO3QuZGF0YVtuKyhyPj41KV18PTE8PHJ9KG4sdCxlKX1mdW5jdGlvbiBIRyhuLHQsZSl7aWYoZSZpaS5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtTRigpfWZ1bmN0aW9uIFVHKG4sdCxlLGkpe2lmKGUmaWkuT3B0aW9uYWwmJnZvaWQgMD09PWkmJihpPW51bGwpLDA9PShlJihpaS5TZWxmfGlpLkhvc3QpKSl7bGV0IHI9bls5XSxvPWlsKHZvaWQgMCk7dHJ5e3JldHVybiByP3IuZ2V0KHQsaSxlJmlpLk9wdGlvbmFsKTpkRyh0LGksZSZpaS5PcHRpb25hbCl9ZmluYWxseXtpbChvKX19cmV0dXJuIEhHKGksMCxlKX1mdW5jdGlvbiB6RyhuLHQsZSxpPWlpLkRlZmF1bHQscil7aWYobnVsbCE9PW4pe2lmKDEwMjQmdFsyXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzWzJdJiYhKDI1NiZzWzJdKTspe2xldCBhPWpHKG8scyxlLGl8aWkuU2VsZixqYyk7aWYoYSE9PWpjKXJldHVybiBhO2xldCBsPW8ucGFyZW50O2lmKCFsKXtsZXQgYz1zWzIxXTtpZihjKXtsZXQgdT1jLmdldChlLGpjLGkpO2lmKHUhPT1qYylyZXR1cm4gdX1sPUdHKHMpLHM9c1sxNV19bz1sfXJldHVybiByfShuLHQsZSxpLGpjKTtpZihzIT09amMpcmV0dXJuIHN9bGV0IG89akcobix0LGUsaSxqYyk7aWYobyE9PWpjKXJldHVybiBvfXJldHVybiBVRyh0LGUsaSxyKX1mdW5jdGlvbiBqRyhuLHQsZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi5jaGFyQ29kZUF0KDApfHwwO2xldCB0PW4uaGFzT3duUHJvcGVydHkoWnkpP25bWnldOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dD49MD8yNTUmdDpfcGU6dH0oZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKCFBRyh0LG4saSkpcmV0dXJuIGkmaWkuSG9zdD9IRyhyLDAsaSk6VUcodCxlLGkscik7dHJ5e2xldCBzPW8oaSk7aWYobnVsbCE9c3x8aSZpaS5PcHRpb25hbClyZXR1cm4gcztTRigpfWZpbmFsbHl7T0coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pe2xldCBzPW51bGwsYT1WRyhuLHQpLGw9LTEsYz1pJmlpLkhvc3Q/dFsxNl1bNl06bnVsbDtmb3IoKC0xPT09YXx8aSZpaS5Ta2lwU2VsZikmJihsPS0xPT09YT9VRihuLHQpOnRbYSs4XSwtMSE9PWwmJndqKGksITEpPyhzPXRbMV0sYT1sRShsKSx0PWNFKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCB1PXRbMV07aWYoQ2oobyxhLHUuZGF0YSkpe2xldCBkPW1wZShhLHQsZSxzLGksYyk7aWYoZCE9PWpjKXJldHVybiBkfWw9dFthKzhdLC0xIT09bCYmd2ooaSx0WzFdLmRhdGFbYSs4XT09PWMpJiZDaihvLGEsdCk/KHM9dSxhPWxFKGwpLHQ9Y0UobCx0KSk6YT0tMX19cmV0dXJuIHJ9ZnVuY3Rpb24gbXBlKG4sdCxlLGkscixvKXtsZXQgcz10WzFdLGE9cy5kYXRhW24rOF0sdT1YUyhhLHMsZSxudWxsPT1pP1JGKGEpJiZFazppIT1zJiYwIT0oMyZhLnR5cGUpLHImaWkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09dT9DYih0LHMsdSxhKTpqY31mdW5jdGlvbiBYUyhuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCx1PW8+PjIwLHA9cj9hK3U6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBoPWk/YTphK3U7aDxwO2grKyl7bGV0IGY9c1toXTtpZihoPGwmJmU9PT1mfHxoPj1sJiZmLnR5cGU9PT1lKXJldHVybiBofWlmKHIpe2xldCBoPXNbbF07aWYoaCYmUWwoaCkmJmgudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2Iobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEtofShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShNRihvW2VdKSk7bGV0IGE9dUUocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/aWwocy5pbmplY3RJbXBsKTpudWxsO0FHKG4saSxpaS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1fRyh0KTsoZS5wcmVPcmRlckhvb2tzfHwoZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rc3x8KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3N8fChlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rc3x8KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3N8fChlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZpbChsKSx1RShhKSxzLnJlc29sdmluZz0hMSxPRygpfX1yZXR1cm4gcn1mdW5jdGlvbiBDaihuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj41KV0mMTw8bil9ZnVuY3Rpb24gd2oobix0KXtyZXR1cm4hKG4maWkuU2VsZnx8biZpaS5Ib3N0JiZ0KX12YXIgWWg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSxpKXtyZXR1cm4gekcodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCxpLGUpfX07ZnVuY3Rpb24gX3BlKCl7cmV0dXJuIG5ldyBZaChNbygpLFplKCkpfWZ1bmN0aW9uIGhpKG4pe3JldHVybiB0ZigoKT0+e2xldCB0PW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGU9dFtRdV18fFRrKHQpLGk9T2JqZWN0LnByb3RvdHlwZSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtyJiZyIT09aTspe2xldCBvPXJbUXVdfHxUayhyKTtpZihvJiZvIT09ZSlyZXR1cm4gbztyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbz0+bmV3IG99KX1mdW5jdGlvbiBUayhuKXtyZXR1cm4gbEcobik/KCk9PntsZXQgdD1UayhxaShuKSk7cmV0dXJuIHQmJnQoKX06UWgobil9ZnVuY3Rpb24gR0cobil7bGV0IHQ9blsxXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bls2XTpudWxsfWZ1bmN0aW9uIEtvKG4pe3JldHVybiBmdW5jdGlvbihuLHQpe2lmKCJjbGFzcyI9PT10KXJldHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2xldCBlPW4uYXR0cnM7aWYoZSl7bGV0IGk9ZS5sZW5ndGgscj0wO2Zvcig7cjxpOyl7bGV0IG89ZVtyXTtpZihGRyhvKSlicmVhaztpZigwPT09bylyKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKWZvcihyKys7cjxpJiYic3RyaW5nIj09dHlwZW9mIGVbcl07KXIrKztlbHNle2lmKG89PT10KXJldHVybiBlW3IrMV07cis9Mn19fXJldHVybiBudWxsfShNbygpLG4pfXZhciB3Zz0iX19hbm5vdGF0aW9uc19fIixNZz0iX19wYXJhbWV0ZXJzX18iLFNnPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIHdiKG4sdCxlLGkscil7cmV0dXJuIHRmKCgpPT57bGV0IG89ekYodCk7ZnVuY3Rpb24gcyguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgcylyZXR1cm4gby5jYWxsKHRoaXMsLi4uYSksdGhpcztsZXQgbD1uZXcgcyguLi5hKTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHImJnIodSwuLi5hKSwodS5oYXNPd25Qcm9wZXJ0eSh3Zyk/dVt3Z106T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsd2cse3ZhbHVlOltdfSlbd2ddKS5wdXNoKGwpLGkmJmkodSksdX19cmV0dXJuIGUmJihzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSkscy5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixzLmFubm90YXRpb25DbHM9cyxzfSl9ZnVuY3Rpb24gekYobil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2lmKG4pe2xldCBpPW4oLi4uZSk7Zm9yKGxldCByIGluIGkpdGhpc1tyXT1pW3JdfX19ZnVuY3Rpb24gemcobix0LGUpe3JldHVybiB0ZigoKT0+e2xldCBpPXpGKHQpO2Z1bmN0aW9uIHIoLi4ubyl7aWYodGhpcyBpbnN0YW5jZW9mIHIpcmV0dXJuIGkuYXBwbHkodGhpcyxvKSx0aGlzO2xldCBzPW5ldyByKC4uLm8pO3JldHVybiBhLmFubm90YXRpb249cyxhO2Z1bmN0aW9uIGEobCxjLHUpe2xldCBkPWwuaGFzT3duUHJvcGVydHkoTWcpP2xbTWddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE1nLHt2YWx1ZTpbXX0pW01nXTtmb3IoO2QubGVuZ3RoPD11OylkLnB1c2gobnVsbCk7cmV0dXJuKGRbdV09ZFt1XXx8W10pLnB1c2gocyksbH19cmV0dXJuIGUmJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixyLmFubm90YXRpb25DbHM9cixyfSl9ZnVuY3Rpb24gc3Aobix0LGUsaSl7cmV0dXJuIHRmKCgpPT57bGV0IHI9ekYodCk7ZnVuY3Rpb24gbyguLi5zKXtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLHMpLHRoaXM7bGV0IGE9bmV3IG8oLi4ucyk7cmV0dXJuIGZ1bmN0aW9uKGMsdSl7bGV0IGQ9Yy5jb25zdHJ1Y3RvcixwPWQuaGFzT3duUHJvcGVydHkoU2cpP2RbU2ddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFNnLHt2YWx1ZTp7fX0pW1NnXTtwW3VdPXAuaGFzT3duUHJvcGVydHkodSkmJnBbdV18fFtdLHBbdV0udW5zaGlmdChhKSxpJiZpKGMsdSwuLi5zKX19cmV0dXJuIGUmJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixvLmFubm90YXRpb25DbHM9byxvfSl9dmFyIHlwZT16ZygiQXR0cmlidXRlIixuPT4oe2F0dHJpYnV0ZU5hbWU6bixfX05HX0VMRU1FTlRfSURfXzooKT0+S28obil9KSksc2U9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX19OR19FTEVNRU5UX0lEX189ZTp2b2lkIDAhPT1lJiYodGhpcy5cdTAyNzVwcm92PWdlKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fSxSZz0obmV3IHNlKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiksY2xhc3N7fSk7ZnVuY3Rpb24gc2wobil7bGV0IHQ9V3Iubmc7aWYodCYmdC5cdTAyNzVjb21waWxlckZhY2FkZSlyZXR1cm4gdC5cdTAyNzVjb21waWxlckZhY2FkZTt0aHJvdyBuZXcgRXJyb3IoIkpJVCBjb21waWxlciB1bmF2YWlsYWJsZSIpfXNwKCJDb250ZW50Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLFJnKSxzcCgiQ29udGVudENoaWxkIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxSZyksc3AoIlZpZXdDaGlsZHJlbiIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMCwuLi50fSksUmcpLHNwKCJWaWV3Q2hpbGQiLChuLHQpPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsLi4udH0pLFJnKTt2YXIgYnBlPUZ1bmN0aW9uO2Z1bmN0aW9uIFh5KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFh1KG4sdCl7dm9pZCAwPT09dCYmKHQ9bik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07QXJyYXkuaXNBcnJheShpKT8odD09PW4mJih0PW4uc2xpY2UoMCxlKSksWHUoaSx0KSk6dCE9PW4mJnQucHVzaChpKX1yZXR1cm4gdH1mdW5jdGlvbiB1YihuLHQpe24uZm9yRWFjaChlPT5BcnJheS5pc0FycmF5KGUpP3ViKGUsdCk6dChlKSl9ZnVuY3Rpb24gcUcobix0LGUpe3Q+PW4ubGVuZ3RoP24ucHVzaChlKTpuLnNwbGljZSh0LDAsZSl9ZnVuY3Rpb24gcEUobix0KXtyZXR1cm4gdD49bi5sZW5ndGgtMT9uLnBvcCgpOm4uc3BsaWNlKHQsMSlbMF19ZnVuY3Rpb24gSnkobix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBFYShuLHQsZSl7bGV0IGk9TWIobix0KTtyZXR1cm4gaT49MD9uWzF8aV09ZTooaT1+aSxmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmxlbmd0aDtpZihyPT10KW4ucHVzaChlLGkpO2Vsc2UgaWYoMT09PXIpbi5wdXNoKGksblswXSksblswXT1lO2Vsc2V7Zm9yKHItLSxuLnB1c2gobltyLTFdLG5bcl0pO3I+dDspbltyXT1uW3ItMl0sci0tO25bdF09ZSxuW3QrMV09aX19KG4saSx0LGUpKSxpfWZ1bmN0aW9uIG5rKG4sdCl7bGV0IGU9TWIobix0KTtpZihlPj0wKXJldHVybiBuWzF8ZV19ZnVuY3Rpb24gTWIobix0KXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPTAscj1uLmxlbmd0aD4+MTtmb3IoO3IhPT1pOyl7bGV0IG89aSsoci1pPj4xKSxzPW5bbzw8MV07aWYodD09PXMpcmV0dXJuIG88PDE7cz50P3I9bzppPW8rMX1yZXR1cm5+KHI8PDEpfShuLHQpfXZhciBNcGU9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpLiopXCkvLFNwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLEVwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sVHBlPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoXClccyp7W159XSpzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2Z1bmN0aW9uIGlrKG4pe3JldHVybiBuP24ubWFwKHQ9Pm5ldygwLHQudHlwZS5hbm5vdGF0aW9uQ2xzKSguLi50LmFyZ3M/dC5hcmdzOltdKSk6W119ZnVuY3Rpb24gSFMobil7bGV0IHQ9bi5wcm90b3R5cGU/T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKTpudWxsO3JldHVybih0P3QuY29uc3RydWN0b3I6bnVsbCl8fE9iamVjdH12YXIgJHksZGI9e30sQWs9Il9fTkdfRElfRkxBR19fIixoRT0ibmdUZW1wVG9rZW5QYXRoIixQcGU9L1xuL2dtLE1qPSJfX3NvdXJjZSI7ZnVuY3Rpb24geGcobil7bGV0IHQ9JHk7cmV0dXJuICR5PW4sdH1mdW5jdGlvbiBPcGUobix0PWlpLkRlZmF1bHQpe2lmKHZvaWQgMD09PSR5KXRocm93IG5ldyBNdCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PSR5P2RHKG4sdm9pZCAwLHQpOiR5LmdldChuLHQmaWkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gUihuLHQ9aWkuRGVmYXVsdCl7cmV0dXJuKENrfHxPcGUpKHFpKG4pLHQpfWZ1bmN0aW9uIFlHKG4pe3Rocm93IG5ldyBNdCgyMDIsITEpfWZ1bmN0aW9uIFNvKG4sdD1paS5EZWZhdWx0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQmJih0PTB8KHQub3B0aW9uYWwmJjgpfCh0Lmhvc3QmJjEpfCh0LnNlbGYmJjIpfCh0LnNraXBTZWxmJiY0KSksUihuLHQpfWZ1bmN0aW9uIElrKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1xaShuW2VdKTtpZihBcnJheS5pc0FycmF5KGkpKXtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDkwMCwhMSk7bGV0IHIsbz1paS5EZWZhdWx0O2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgYT1pW3NdLGw9a3BlKGEpOyJudW1iZXIiPT10eXBlb2YgbD8tMT09PWw/cj1hLnRva2VuOm98PWw6cj1hfXQucHVzaChSKHIsbykpfWVsc2UgdC5wdXNoKFIoaSkpfXJldHVybiB0fWZ1bmN0aW9uIFNiKG4sdCl7cmV0dXJuIG5bQWtdPXQsbi5wcm90b3R5cGVbQWtdPXQsbn1mdW5jdGlvbiBrcGUobil7cmV0dXJuIG5bQWtdfXZhciBqZz1TYih6ZygiSW5qZWN0IixuPT4oe3Rva2VuOm59KSksLTEpLE9vPVNiKHpnKCJPcHRpb25hbCIpLDgpLGpGPVNiKHpnKCJTZWxmIiksMiksVGE9U2IoemcoIlNraXBTZWxmIiksNCksTHBlPVNiKHpnKCJIb3N0IiksMSksU2o9bnVsbDtmdW5jdGlvbiBHRigpe3JldHVybiBTaj1Tanx8bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8V3IuUmVmbGVjdH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgaTtpPUp5KHR5cGVvZiB0PiJ1Ij9lLmxlbmd0aDp0Lmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT10eXBlb2YgdD4idSI/W106dFtyXSYmdFtyXSE9T2JqZWN0P1t0W3JdXTpbXSxlJiZudWxsIT1lW3JdJiYoaVtyXT1pW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJuIGl9X293blBhcmFtZXRlcnModCxlKXtsZXQgaT10LnRvU3RyaW5nKCk7aWYoTXBlLnRlc3Qobj1pKXx8VHBlLnRlc3Qobil8fFNwZS50ZXN0KG4pJiYhRXBlLnRlc3QobikpcmV0dXJuIG51bGw7dmFyIG47aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztsZXQgcj10LmN0b3JQYXJhbWV0ZXJzO2lmKHImJnIhPT1lLmN0b3JQYXJhbWV0ZXJzKXtsZXQgYT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixsPWEubWFwKHU9PnUmJnUudHlwZSksYz1hLm1hcCh1PT51JiZpayh1LmRlY29yYXRvcnMpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhsLGMpfWxldCBvPXQuaGFzT3duUHJvcGVydHkoTWcpJiZ0W01nXSxzPXRoaXMuX3JlZmxlY3QmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJhbXR5cGVzIix0KTtyZXR1cm4gc3x8bz90aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKHMsbyk6SnkodC5sZW5ndGgpfXBhcmFtZXRlcnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duUGFyYW1ldGVycyh0LGUpO3JldHVybiFpJiZlIT09T2JqZWN0JiYoaT10aGlzLnBhcmFtZXRlcnMoZSkpLGl8fFtdfV9vd25Bbm5vdGF0aW9ucyh0LGUpe2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXtsZXQgaT10LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLmFubm90YXRpb25zJiYoaT1pLmFubm90YXRpb25zKSxpfXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUuZGVjb3JhdG9ycz9payh0LmRlY29yYXRvcnMpOnQuaGFzT3duUHJvcGVydHkod2cpP3Rbd2ddOm51bGx9YW5ub3RhdGlvbnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KGkpfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGk9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkucHJvcE1ldGFkYXRhJiYoaT1pLnByb3BNZXRhZGF0YSksaX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7bGV0IGk9dC5wcm9wRGVjb3JhdG9ycyxyPXt9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntyW29dPWlrKGlbb10pfSkscn1yZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShTZyk/dFtTZ106bnVsbH1wcm9wTWV0YWRhdGEodCl7aWYoIVh5KHQpKXJldHVybnt9O2xldCBlPUhTKHQpLGk9e307aWYoZSE9PU9iamVjdCl7bGV0IG89dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMobykuZm9yRWFjaChzPT57aVtzXT1vW3NdfSl9bGV0IHI9dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2gobz0+e2xldCBzPVtdO2kuaGFzT3duUHJvcGVydHkobykmJnMucHVzaCguLi5pW29dKSxzLnB1c2goLi4ucltvXSksaVtvXT1zfSksaX1vd25Qcm9wTWV0YWRhdGEodCl7cmV0dXJuIFh5KHQpJiZ0aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxIUyh0KSl8fHt9fWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJwZSYmZSBpbiB0LnByb3RvdHlwZX19fWZ1bmN0aW9uIFJFKG4pe3JldHVybiBYRyhHRigpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIFhHKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIE9vfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIFRhfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpGfHwiU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2VsZj0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBMcGV8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpdC5ob3N0PSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpnKXQudG9rZW49aS50b2tlbjtlbHNlIGlmKGkgaW5zdGFuY2VvZiB5cGUpe2lmKHZvaWQgMD09PWkuYXR0cmlidXRlTmFtZSl0aHJvdyBuZXcgTXQoMjA0LCExKTt0LmF0dHJpYnV0ZT1pLmF0dHJpYnV0ZU5hbWV9ZWxzZSB0LnRva2VuPWl9ZWxzZSB0LnRva2VuPXZvaWQgMD09PW58fEFycmF5LmlzQXJyYXkobikmJjA9PT1uLmxlbmd0aD9udWxsOm47cmV0dXJuIHR9KHQpKX12YXIgcGI9bmV3IE1hcCxRRz1uZXcgU2V0O2Z1bmN0aW9uIEtHKG4pe3JldHVybiEhKG4udGVtcGxhdGVVcmwmJiFuLmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHxuLnN0eWxlVXJscyYmbi5zdHlsZVVybHMubGVuZ3RoKX12YXIgUGssVVMselMsRWo9bmV3IE1hcDtmdW5jdGlvbiBaRyhuLHQpeyhmdW5jdGlvbihuLHQsZSl7aWYodCYmdCE9PWUpdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIHJlZ2lzdGVyZWQgZm9yICR7bn0gLSAke2NvKHQpfSB2cyAke2NvKHQubmFtZSl9YCl9KSh0LEVqLmdldCh0KXx8bnVsbCxuKSxFai5zZXQodCxuKX1mdW5jdGlvbiAkRygpe3JldHVybiB2b2lkIDAhPT1Qaz9Qazp0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMH1mdW5jdGlvbiBlNigpe2lmKHZvaWQgMD09PVVTJiYoVVM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXtVUz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBVU31mdW5jdGlvbiBPZyhuKXtyZXR1cm4gZTYoKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBXRigpe2lmKHZvaWQgMD09PXpTJiYoelM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXt6Uz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIHpTfWZ1bmN0aW9uIFRqKG4pe3JldHVybiBXRigpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIERqKG4pe3JldHVybiBXRigpPy5jcmVhdGVTY3JpcHQobil8fG59ZnVuY3Rpb24gQWoobil7cmV0dXJuIFdGKCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn12YXIgWnU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgfX0sUms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJIVE1MIn19LE9rPWNsYXNzIGV4dGVuZHMgWnV7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX0sa2s9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJTY3JpcHQifX0sRms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJVUkwifX0sTms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fTtmdW5jdGlvbiAkcyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFp1P24uY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpufWZ1bmN0aW9uIFpsKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBadSYmbi5nZXRUeXBlTmFtZSgpfHxudWxsfShuKTtpZihudWxsIT1lJiZlIT09dCl7aWYoIlJlc291cmNlVVJMIj09PWUmJiJVUkwiPT09dClyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke3R9LCBnb3QgYSAke2V9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gczYobil7bGV0IHQ9bmV3IEJrKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE9nKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBMayh0KTp0fXZhciBMaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhPZyh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSxCaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksbnVsbD09dGhpcy5pbmVydERvY3VtZW50LmJvZHkpe2xldCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7ZS5hcHBlbmRDaGlsZChpKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtpZigiY29udGVudCJpbiBlKXJldHVybiBlLmlubmVySFRNTD1PZyh0KSxlO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7cmV0dXJuIGkuaW5uZXJIVE1MPU9nKHQpLHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGl9c3RyaXBDdXN0b21Oc0F0dHJzKHQpe2xldCBlPXQuYXR0cmlidXRlcztmb3IobGV0IHI9ZS5sZW5ndGgtMTswPHI7ci0tKXtsZXQgcz1lLml0ZW0ocikubmFtZTsoInhtbG5zOm5zMSI9PT1zfHwwPT09cy5pbmRleE9mKCJuczE6IikpJiZ0LnJlbW92ZUF0dHJpYnV0ZShzKX1sZXQgaT10LmZpcnN0Q2hpbGQ7Zm9yKDtpOylpLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGk9aS5uZXh0U2libGluZ319LEtwZT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZGF0YXxmdHB8dGVsfGZpbGV8c21zKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO2Z1bmN0aW9uIEViKG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goS3BlKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIHRkKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuLnNwbGl0KCIsIikpdFtlXT0hMDtyZXR1cm4gdH1mdW5jdGlvbiBUYiguLi5uKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT0hMCk7cmV0dXJuIHR9dmFyIGpTLGE2PXRkKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksbDY9dGQoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxjNj10ZCgicnAscnQiKSxacGU9VGIoYzYsbDYpLEpwZT1UYihsNix0ZCgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksJHBlPVRiKGM2LHRkKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksVms9VGIoYTYsSnBlLCRwZSxacGUpLHFGPXRkKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxlaGU9dGQoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLHRoZT10ZCgiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSx1Nj1UYihxRixlaGUsdGhlKSxuaGU9dGQoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpLGloZT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2cscmhlPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBJaihuKXtyZXR1cm4gbi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShpaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShyaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gWUYobix0KXtsZXQgZT1udWxsO3RyeXtqUz1qU3x8czYobik7bGV0IGk9dD9TdHJpbmcodCk6IiI7ZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpO2xldCByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89ZS5pbm5lckhUTUwsZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTtsZXQgYT0obmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsaT0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9pPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxpJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgcj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHIpe2U9cjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighVmsuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFuaGUuaGFzT3duUHJvcGVydHkoZSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7bGV0IGk9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pLml0ZW0ocikscz1vLm5hbWUsYT1zLnRvTG93ZXJDYXNlKCk7aWYoIXU2Lmhhc093blByb3BlcnR5KGEpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgbD1vLnZhbHVlO3FGW2FdJiYobD1FYihsKSksdGhpcy5idWYucHVzaCgiICIscywnPSInLElqKGwpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtWay5oYXNPd25Qcm9wZXJ0eShlKSYmIWE2Lmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChJaih0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19KS5zYW5pdGl6ZUNoaWxkcmVuKFVrKGUpfHxlKTtyZXR1cm4gT2coYSl9ZmluYWxseXtpZihlKXtsZXQgaT1VayhlKXx8ZTtmb3IoO2kuZmlyc3RDaGlsZDspaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpfX19ZnVuY3Rpb24gVWsobil7cmV0dXJuImNvbnRlbnQiaW4gbiYmZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PW4ubm9kZU5hbWV9KG4pP24uY29udGVudDpudWxsfXZhciBKcj0oKCk9PntyZXR1cm4obj1Kcnx8KEpyPXt9KSlbbi5OT05FPTBdPSJOT05FIixuW24uSFRNTD0xXT0iSFRNTCIsbltuLlNUWUxFPTJdPSJTVFlMRSIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uVVJMPTRdPSJVUkwiLG5bbi5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsSnI7dmFyIG59KSgpO2Z1bmN0aW9uIFhGKG4pe2xldCB0PURiKCk7cmV0dXJuIHQ/VGoodC5zYW5pdGl6ZShKci5IVE1MLG4pfHwiIik6WmwobiwiSFRNTCIpP1RqKCRzKG4pKTpZRigkRygpLHFuKG4pKX1mdW5jdGlvbiBkbChuKXtsZXQgdD1EYigpO3JldHVybiB0P3Quc2FuaXRpemUoSnIuVVJMLG4pfHwiIjpabChuLCJVUkwiKT8kcyhuKTpFYihxbihuKSl9ZnVuY3Rpb24gZDYobil7bGV0IHQ9RGIoKTtpZih0KXJldHVybiBBaih0LnNhbml0aXplKEpyLlJFU09VUkNFX1VSTCxuKXx8IiIpO2lmKFpsKG4sIlJlc291cmNlVVJMIikpcmV0dXJuIEFqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA0LCExKX1mdW5jdGlvbiBEYigpe2xldCBuPVplKCk7cmV0dXJuIG4mJm5bMTJdfXZhciBPRT1uZXcgc2UoIkVOVklST05NRU5UX0lOSVRJQUxJWkVSIikscDY9bmV3IHNlKCJJTkpFQ1RPUiIsLTEpLGg2PW5ldyBzZSgiSU5KRUNUT1JfREVGX1RZUEVTIiksZkU9Y2xhc3N7Z2V0KHQsZT1kYil7aWYoZT09PWRiKXtsZXQgaT1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtjbyh0KX0hYCk7dGhyb3cgaS5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsaX1yZXR1cm4gZX19O2Z1bmN0aW9uIHBoZSguLi5uKXtyZXR1cm57Ilx1MDI3NXByb3ZpZGVycyI6ZjYoMCxuKX19ZnVuY3Rpb24gZjYobiwuLi50KXtsZXQgcixlPVtdLGk9bmV3IFNldDtyZXR1cm4gdWIodCxvPT57bGV0IHM9bzt6ayhzLGUsW10saSkmJihyfHwocj1bXSksci5wdXNoKHMpKX0pLHZvaWQgMCE9PXImJm02KHIsZSksZX1mdW5jdGlvbiBtNihuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXR7cHJvdmlkZXJzOnJ9PW5bZV07dWIocixvPT57dC5wdXNoKG8pfSl9fWZ1bmN0aW9uIHprKG4sdCxlLGkpe2lmKCEobj1xaShuKSkpcmV0dXJuITE7bGV0IHI9bnVsbCxvPWdqKG4pLHM9IW8mJm9sKG4pO2lmKG98fHMpe2lmKHMmJiFzLnN0YW5kYWxvbmUpcmV0dXJuITE7cj1ufWVsc2V7bGV0IGw9bi5uZ01vZHVsZTtpZihvPWdqKGwpLCFvKXJldHVybiExO3I9bH1sZXQgYT1pLmhhcyhyKTtpZihzKXtpZihhKXJldHVybiExO2lmKGkuYWRkKHIpLHMuZGVwZW5kZW5jaWVzKXtsZXQgbD0iZnVuY3Rpb24iPT10eXBlb2Ygcy5kZXBlbmRlbmNpZXM/cy5kZXBlbmRlbmNpZXMoKTpzLmRlcGVuZGVuY2llcztmb3IobGV0IGMgb2YgbCl6ayhjLHQsZSxpKX19ZWxzZXtpZighbylyZXR1cm4hMTt7aWYobnVsbCE9by5pbXBvcnRzJiYhYSl7bGV0IGM7aS5hZGQocik7dHJ5e3ViKG8uaW1wb3J0cyx1PT57emsodSx0LGUsaSkmJihjfHwoYz1bXSksYy5wdXNoKHUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PWMmJm02KGMsdCl9aWYoIWEpe2xldCBjPVFoKHIpfHwoKCk9Pm5ldyByKTt0LnB1c2goe3Byb3ZpZGU6cix1c2VGYWN0b3J5OmMsZGVwczpXaX0se3Byb3ZpZGU6aDYsdXNlVmFsdWU6cixtdWx0aTohMH0se3Byb3ZpZGU6T0UsdXNlVmFsdWU6KCk9PlIociksbXVsdGk6ITB9KX1sZXQgbD1vLnByb3ZpZGVycztudWxsPT1sfHxhfHx1YihsLHU9Pnt0LnB1c2godSl9KX19cmV0dXJuIHIhPT1uJiZ2b2lkIDAhPT1uLnByb3ZpZGVyc312YXIgaGhlPWFyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTphcn0pO2Z1bmN0aW9uIGc2KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZoaGUgaW4gbn1mdW5jdGlvbiBrZyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgcmssa0U9bmV3IHNlKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksUVM9e30sX2hlPXt9O2Z1bmN0aW9uIFFGKCl7cmV0dXJuIHZvaWQgMD09PXJrJiYocms9bmV3IGZFKSxya312YXIgbnA9Y2xhc3N7fSxtRT1jbGFzcyBleHRlbmRzIG5we2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxHayh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KHA2LEVnKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQobnAsRWcodm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KGtFKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChoNi5tdWx0aSxXaSxpaS5TZWxmKSl9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9eGcodGhpcyksaT1pbCh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7eGcoZSksaWwoaSl9fWdldCh0LGU9ZGIsaT1paS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2xldCByPXhnKHRoaXMpLG89aWwodm9pZCAwKTt0cnl7aWYoIShpJmlpLlNraXBTZWxmKSl7bGV0IGE9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1hKXtsZXQgbD0oImZ1bmN0aW9uIj09dHlwZW9mKG49dCl8fCJvYmplY3QiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIHNlKSYmRUYodCk7YT1sJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKGwpP0VnKGprKHQpLFFTKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQodCxhKX1pZihudWxsIT1hKXJldHVybiB0aGlzLmh5ZHJhdGUodCxhKX1yZXR1cm4oaSZpaS5TZWxmP1FGKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9aSZpaS5PcHRpb25hbCYmZT09PWRiP251bGw6ZSl9Y2F0Y2gocyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PXMubmFtZSl7aWYoKHNbaEVdPXNbaEVdfHxbXSkudW5zaGlmdChjbyh0KSkscil0aHJvdyBzO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW2hFXTt0aHJvdyB0W01qXSYmci51bnNoaWZ0KHRbTWpdKSxuLm1lc3NhZ2U9ZnVuY3Rpb24obix0LGUsaT1udWxsKXtuPW4mJiJcbiI9PT1uLmNoYXJBdCgwKSYmIlx1MDI3NSI9PW4uY2hhckF0KDEpP24uc2xpY2UoMik6bjtsZXQgcj1jbyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAoY28pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpjbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZShQcGUsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksbi5uZ1Rva2VuUGF0aD1yLG5baEVdPW51bGwsbn0ocyx0LCJSM0luamVjdG9yRXJyb3IiLHRoaXMuc291cmNlKX10aHJvdyBzfWZpbmFsbHl7aWwobykseGcocil9dmFyIG59cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7bGV0IHQ9eGcodGhpcyksZT1pbCh2b2lkIDApO3RyeXtsZXQgaT10aGlzLmdldChPRS5tdWx0aSxXaSxpaS5TZWxmKTtmb3IobGV0IHIgb2YgaSlyKCl9ZmluYWxseXt4Zyh0KSxpbChlKX19dG9TdHJpbmcoKXtsZXQgdD1bXSxlPXRoaXMucmVjb3Jkcztmb3IobGV0IGkgb2YgZS5rZXlzKCkpdC5wdXNoKGNvKGkpKTtyZXR1cm5gUjNJbmplY3Rvclske3Quam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IE10KDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKHQpe2xldCBlPWtnKHQ9cWkodCkpP3Q6cWkodCYmdC5wcm92aWRlKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBnNihuKT9FZyh2b2lkIDAsbi51c2VWYWx1ZSk6RWcoXzYobiksUVMpfSh0KTtpZihrZyh0KXx8ITAhPT10Lm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoZSk7ZWxzZXtsZXQgcj10aGlzLnJlY29yZHMuZ2V0KGUpO3J8fChyPUVnKHZvaWQgMCxRUywhMCksci5mYWN0b3J5PSgpPT5JayhyLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGUscikpLGU9dCxyLm11bHRpLnB1c2godCl9dGhpcy5yZWNvcmRzLnNldChlLGkpfWh5ZHJhdGUodCxlKXtyZXR1cm4gZS52YWx1ZT09PVFTJiYoZS52YWx1ZT1faGUsZS52YWx1ZT1lLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBlLnZhbHVlJiZlLnZhbHVlJiZudWxsIT09KG49ZS52YWx1ZSkmJiJvYmplY3QiPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3kmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGUudmFsdWUpLGUudmFsdWU7dmFyIG59aW5qZWN0YWJsZURlZkluU2NvcGUodCl7aWYoIXQucHJvdmlkZWRJbilyZXR1cm4hMTtsZXQgZT1xaSh0LnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iYW55Ij09PWV8fHRoaXMuc2NvcGVzLmhhcyhlKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGUpfX07ZnVuY3Rpb24gamsobil7bGV0IHQ9RUYobiksZT1udWxsIT09dD90LmZhY3Rvcnk6UWgobik7aWYobnVsbCE9PWUpcmV0dXJuIGU7aWYobiBpbnN0YW5jZW9mIHNlKXRocm93IG5ldyBNdCgyMDQsITEpO2lmKG4gaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7aWYodD4wKXRocm93IEp5KHQsIj8iKSxuZXcgTXQoMjA0LCExKTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uJiYoblt0RV18fG5bdUddKTtpZih0KXtsZXQgZT1mdW5jdGlvbihuKXtpZihuLmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIG4ubmFtZTtsZXQgdD0oIiIrbikubWF0Y2goL15mdW5jdGlvblxzKihbXlxzKF0rKS8pO3JldHVybiBudWxsPT09dD8iIjp0WzFdfShuKTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7ZX0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7ZX0iIGNsYXNzLmApLHR9cmV0dXJuIG51bGx9KG4pO3JldHVybiBudWxsIT09ZT8oKT0+ZS5mYWN0b3J5KG4pOigpPT5uZXcgbn0obik7dGhyb3cgbmV3IE10KDIwNCwhMSl9ZnVuY3Rpb24gXzYobix0LGUpe2xldCBpO2lmKGtnKG4pKXtsZXQgcj1xaShuKTtyZXR1cm4gUWgocil8fGprKHIpfWlmKGc2KG4pKWk9KCk9PnFpKG4udXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24obil7cmV0dXJuISghbnx8IW4udXNlRmFjdG9yeSl9KG4pKWk9KCk9Pm4udXNlRmFjdG9yeSguLi5JayhuLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VFeGlzdGluZyl9KG4pKWk9KCk9PlIocWkobi51c2VFeGlzdGluZykpO2Vsc2V7bGV0IHI9cWkobiYmKG4udXNlQ2xhc3N8fG4ucHJvdmlkZSkpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hIW4uZGVwc30obikpcmV0dXJuIFFoKHIpfHxqayhyKTtpPSgpPT5uZXcgciguLi5JayhuLmRlcHMpKX1yZXR1cm4gaX1mdW5jdGlvbiBFZyhuLHQsZT0hMSl7cmV0dXJue2ZhY3Rvcnk6bix2YWx1ZTp0LG11bHRpOmU/W106dm9pZCAwfX1mdW5jdGlvbiB3aGUobil7cmV0dXJuISFuLlx1MDI3NXByb3ZpZGVyc31mdW5jdGlvbiBHayhuLHQpe2ZvcihsZXQgZSBvZiBuKUFycmF5LmlzQXJyYXkoZSk/R2soZSx0KTp3aGUoZSk/R2soZS5cdTAyNzVwcm92aWRlcnMsdCk6dChlKX12YXIgV2s9Y2xhc3N7fSxnRT1jbGFzc3t9LHFrPWNsYXNze3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe3Rocm93IGZ1bmN0aW9uKG4pe2xldCB0PUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtjbyhuKX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIHQubmdDb21wb25lbnQ9bix0fSh0KX19LEVvPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5VTEw9bmV3IHFrLG59KSgpO2Z1bmN0aW9uIEVoZSgpe3JldHVybiBHZyhNbygpLFplKCkpfWZ1bmN0aW9uIEdnKG4sdCl7cmV0dXJuIG5ldyBBZSh1bChuLHQpKX12YXIgQWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9ZX19cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189RWhlLG59KSgpO2Z1bmN0aW9uIFRoZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufW5ldyBzZSgiUmVuZGVyZXIySW50ZXJjZXB0b3IiKTt2YXIgcWM9Y2xhc3N7fSxYYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1aZSgpLGU9b3AoTW8oKS5pbmRleCxuKTtyZXR1cm4ocWgoZSk/ZTpuKVsxMV19KCksbn0pKCksQWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLEtsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LEloZT1uZXcgS2woIjE0LjIuMTEiKSxvaz17fTtmdW5jdGlvbiBzayhuKXtyZXR1cm4gbi5uZ09yaWdpbmFsRXJyb3J9dmFyIFNzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2xldCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIix0KSxlJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsZSl9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPXQmJnNrKHQpO2Zvcig7ZSYmc2soZSk7KWU9c2soZSk7cmV0dXJuIGV8fG51bGx9fSxSaGU9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxPaGU9Lyg8fD4pLyx2Nj1uZXcgTWFwLE5oZT0wLFBqPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBZYyhuLHQpe3FoKHQpPyhuW1BqXT10WzIwXSxmdW5jdGlvbihuKXt2Ni5zZXQoblsyMF0sbil9KHQpKTpuW1BqXT10fWZ1bmN0aW9uIEZFKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gS1Mobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdW5jdGlvbj9uKCk6bn12YXIgWWssYWw9KCgpPT57cmV0dXJuKG49YWx8fChhbD17fSkpW24uSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLG5bbi5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLGFsO3ZhciBufSkoKTtmdW5jdGlvbiBLRihuLHQpe3JldHVybiBZayhuLHQpfWZ1bmN0aW9uIFpGKG4pe2xldCB0PW5bM107cmV0dXJuIEp1KHQpP3RbM106dH1mdW5jdGlvbiBKRihuKXtyZXR1cm4gYjYoblsxM10pfWZ1bmN0aW9uICRGKG4pe3JldHVybiBiNihuWzRdKX1mdW5jdGlvbiBiNihuKXtmb3IoO251bGwhPT1uJiYhSnUobik7KW49bls0XTtyZXR1cm4gbn1mdW5jdGlvbiBUZyhuLHQsZSxpLHIpe2lmKG51bGwhPWkpe2xldCBvLHM9ITE7SnUoaSk/bz1pOnFoKGkpJiYocz0hMCxpPWlbMF0pO2xldCBhPU1hKGkpOzA9PT1uJiZudWxsIT09ZT9udWxsPT1yP0U2KHQsZSxhKTpaaCh0LGUsYSxyfHxudWxsLCEwKToxPT09biYmbnVsbCE9PWU/WmgodCxlLGEscnx8bnVsbCwhMCk6Mj09PW4/UjYodCxhLHMpOjM9PT1uJiZ0LmRlc3Ryb3lOb2RlKGEpLG51bGwhPW8mJmZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89ZVs3XTtvIT09TWEoZSkmJlRnKHQsbixpLG8scik7Zm9yKGxldCBhPTEwO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbD1lW2FdO0FiKGxbMV0sbCxuLHQsaSxvKX19KHQsbixvLGUscil9fWZ1bmN0aW9uIGVOKG4sdCl7cmV0dXJuIG4uY3JlYXRlVGV4dCh0KX1mdW5jdGlvbiB4NihuLHQsZSl7bi5zZXRWYWx1ZSh0LGUpfWZ1bmN0aW9uIEdoZShuLHQpe3JldHVybiBuLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShSaGUsdD0+dC5yZXBsYWNlKE9oZSwiXHUyMDBiJDFcdTIwMGIiKSl9KHQpKX1mdW5jdGlvbiB0TihuLHQsZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudCh0LGUpfWZ1bmN0aW9uIEM2KG4sdCl7bGV0IGU9bls5XSxpPWUuaW5kZXhPZih0KSxyPXRbM107NTEyJnRbMl0mJih0WzJdJj0tNTEzLE9GKHIsLTEpKSxlLnNwbGljZShpLDEpfWZ1bmN0aW9uIFhrKG4sdCl7aWYobi5sZW5ndGg8PTEwKXJldHVybjtsZXQgZT0xMCt0LGk9bltlXTtpZihpKXtsZXQgcj1pWzE3XTtudWxsIT09ciYmciE9PW4mJkM2KHIsaSksdD4wJiYobltlLTFdWzRdPWlbNF0pO2xldCBvPXBFKG4sMTArdCk7IWZ1bmN0aW9uKG4sdCl7QWIobix0LHRbMTFdLDIsbnVsbCxudWxsKSx0WzBdPW51bGwsdFs2XT1udWxsfShpWzFdLGkpO2xldCBzPW9bMTldO251bGwhPT1zJiZzLmRldGFjaFZpZXcob1sxXSksaVszXT1udWxsLGlbNF09bnVsbCxpWzJdJj0tNjV9cmV0dXJuIGl9ZnVuY3Rpb24gdzYobix0KXtpZighKDEyOCZ0WzJdKSl7bGV0IGU9dFsxMV07ZS5kZXN0cm95Tm9kZSYmQWIobix0LGUsMyxudWxsLG51bGwpLGZ1bmN0aW9uKG4pe2xldCB0PW5bMTNdO2lmKCF0KXJldHVybiBhayhuWzFdLG4pO2Zvcig7dDspe2xldCBlPW51bGw7aWYocWgodCkpZT10WzEzXTtlbHNle2xldCBpPXRbMTBdO2kmJihlPWkpfWlmKCFlKXtmb3IoO3QmJiF0WzRdJiZ0IT09bjspcWgodCkmJmFrKHRbMV0sdCksdD10WzNdO251bGw9PT10JiYodD1uKSxxaCh0KSYmYWsodFsxXSx0KSxlPXQmJnRbNF19dD1lfX0odCl9fWZ1bmN0aW9uIGFrKG4sdCl7aWYoISgxMjgmdFsyXSkpe3RbMl0mPS02NSx0WzJdfD0xMjgsZnVuY3Rpb24obix0KXtsZXQgZTtpZihudWxsIT1uJiZudWxsIT0oZT1uLmRlc3Ryb3lIb29rcykpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj10W2VbaV1dO2lmKCEociBpbnN0YW5jZW9mIEtoKSl7bGV0IG89ZVtpKzFdO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKz0yKXtsZXQgYT1yW29bc11dLGw9b1tzKzFdO3RyeXtsLmNhbGwoYSl9ZmluYWxseXt9fWVsc2UgdHJ5e28uY2FsbChyKX1maW5hbGx5e319fX0obix0KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY2xlYW51cCxpPXRbN10scj0tMTtpZihudWxsIT09ZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoLTE7bys9MilpZigic3RyaW5nIj09dHlwZW9mIGVbb10pe2xldCBzPWVbbysxXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBzP3ModCk6TWEodFtzXSksbD1pW3I9ZVtvKzJdXSxjPWVbbyszXTsiYm9vbGVhbiI9PXR5cGVvZiBjP2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihlW29dLGwsYyk6Yz49MD9pW3I9Y10oKTppW3I9LWNdLnVuc3Vic2NyaWJlKCksbys9Mn1lbHNle2xldCBzPWlbcj1lW28rMV1dO2Vbb10uY2FsbChzKX1pZihudWxsIT09aSl7Zm9yKGxldCBvPXIrMTtvPGkubGVuZ3RoO28rKykoMCxpW29dKSgpO3RbN109bnVsbH19KG4sdCksMT09PXRbMV0udHlwZSYmdFsxMV0uZGVzdHJveSgpO2xldCBlPXRbMTddO2lmKG51bGwhPT1lJiZKdSh0WzNdKSl7ZSE9PXRbM10mJkM2KGUsdCk7bGV0IGk9dFsxOV07bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX0hZnVuY3Rpb24obil7djYuZGVsZXRlKG5bMjBdKX0odCl9fWZ1bmN0aW9uIE02KG4sdCxlKXtyZXR1cm4gUzYobix0LnBhcmVudCxlKX1mdW5jdGlvbiBTNihuLHQsZSl7bGV0IGk9dDtmb3IoO251bGwhPT1pJiY0MCZpLnR5cGU7KWk9KHQ9aSkucGFyZW50O2lmKG51bGw9PT1pKXJldHVybiBlWzBdO2lmKDImaS5mbGFncyl7bGV0IHI9bi5kYXRhW2kuZGlyZWN0aXZlU3RhcnRdLmVuY2Fwc3VsYXRpb247aWYocj09PXdhLk5vbmV8fHI9PT13YS5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gdWwoaSxlKX1mdW5jdGlvbiBaaChuLHQsZSxpLHIpe24uaW5zZXJ0QmVmb3JlKHQsZSxpLHIpfWZ1bmN0aW9uIEU2KG4sdCxlKXtuLmFwcGVuZENoaWxkKHQsZSl9ZnVuY3Rpb24gUmoobix0LGUsaSxyKXtudWxsIT09aT9aaChuLHQsZSxpLHIpOkU2KG4sdCxlKX1mdW5jdGlvbiBORShuLHQpe3JldHVybiBuLnBhcmVudE5vZGUodCl9ZnVuY3Rpb24gVDYobix0LGUpe3JldHVybiBBNihuLHQsZSl9ZnVuY3Rpb24gRDYobix0LGUpe3JldHVybiA0MCZuLnR5cGU/dWwobixlKTpudWxsfXZhciBRayxBNj1ENjtmdW5jdGlvbiBJNihuLHQpe0E2PW4sUWs9dH1mdW5jdGlvbiBMRShuLHQsZSxpKXtsZXQgcj1NNihuLGksdCksbz10WzExXSxhPVQ2KGkucGFyZW50fHx0WzZdLGksdCk7aWYobnVsbCE9cilpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKVJqKG8scixlW2xdLGEsITEpO2Vsc2UgUmoobyxyLGUsYSwhMSk7dm9pZCAwIT09UWsmJlFrKG8saSx0LGUscil9ZnVuY3Rpb24gWlMobix0KXtpZihudWxsIT09dCl7bGV0IGU9dC50eXBlO2lmKDMmZSlyZXR1cm4gdWwodCxuKTtpZig0JmUpcmV0dXJuIEtrKC0xLG5bdC5pbmRleF0pO2lmKDgmZSl7bGV0IGk9dC5jaGlsZDtpZihudWxsIT09aSlyZXR1cm4gWlMobixpKTt7bGV0IHI9blt0LmluZGV4XTtyZXR1cm4gSnUocik/S2soLTEscik6TWEocil9fWlmKDMyJmUpcmV0dXJuIEtGKHQsbikoKXx8TWEoblt0LmluZGV4XSk7e2xldCBpPVA2KG4sdCk7cmV0dXJuIG51bGwhPT1pP0FycmF5LmlzQXJyYXkoaSk/aVswXTpaUyhaRihuWzE2XSksaSk6WlMobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBQNihuLHQpe3JldHVybiBudWxsIT09dD9uWzE2XVs2XS5wcm9qZWN0aW9uW3QucHJvamVjdGlvbl06bnVsbH1mdW5jdGlvbiBLayhuLHQpe2xldCBlPTEwK24rMTtpZihlPHQubGVuZ3RoKXtsZXQgaT10W2VdLHI9aVsxXS5maXJzdENoaWxkO2lmKG51bGwhPT1yKXJldHVybiBaUyhpLHIpfXJldHVybiB0WzddfWZ1bmN0aW9uIFI2KG4sdCxlKXtsZXQgaT1ORShuLHQpO2kmJmZ1bmN0aW9uKG4sdCxlLGkpe24ucmVtb3ZlQ2hpbGQodCxlLGkpfShuLGksdCxlKX1mdW5jdGlvbiBuTihuLHQsZSxpLHIsbyxzKXtmb3IoO251bGwhPWU7KXtsZXQgYT1pW2UuaW5kZXhdLGw9ZS50eXBlO2lmKHMmJjA9PT10JiYoYSYmWWMoTWEoYSksaSksZS5mbGFnc3w9NCksNjQhPSg2NCZlLmZsYWdzKSlpZig4Jmwpbk4obix0LGUuY2hpbGQsaSxyLG8sITEpLFRnKHQsbixyLGEsbyk7ZWxzZSBpZigzMiZsKXtsZXQgdSxjPUtGKGUsaSk7Zm9yKDt1PWMoKTspVGcodCxuLHIsdSxvKTtUZyh0LG4scixhLG8pfWVsc2UgMTYmbD9PNihuLHQsaSxlLHIsbyk6VGcodCxuLHIsYSxvKTtlPXM/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0aW9uIEFiKG4sdCxlLGkscixvKXtuTihlLGksbi5maXJzdENoaWxkLHQscixvLCExKX1mdW5jdGlvbiBPNihuLHQsZSxpLHIsbyl7bGV0IHM9ZVsxNl0sbD1zWzZdLnByb2plY3Rpb25baS5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKVRnKHQsbixyLGxbY10sbyk7ZWxzZSBuTihuLHQsbCxzWzNdLHIsbywhMCl9ZnVuY3Rpb24gazYobix0LGUpe24uc2V0QXR0cmlidXRlKHQsInN0eWxlIixlKX1mdW5jdGlvbiBpTihuLHQsZSl7IiI9PT1lP24ucmVtb3ZlQXR0cmlidXRlKHQsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfWZ1bmN0aW9uIEY2KG4sdCxlKXtsZXQgaT1uLmxlbmd0aDtmb3IoOzspe2xldCByPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09cilyZXR1cm4gcjtpZigwPT09cnx8bi5jaGFyQ29kZUF0KHItMSk8PTMyKXtsZXQgbz10Lmxlbmd0aDtpZihyK289PT1pfHxuLmNoYXJDb2RlQXQocitvKTw9MzIpcmV0dXJuIHJ9ZT1yKzF9fXZhciBONj0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIHJmZShuLHQsZSl7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGg7KXtsZXQgcj1uW2krK107aWYoZSYmImNsYXNzIj09PXIpe2lmKHI9bltpXSwtMSE9PUY2KHIudG9Mb3dlckNhc2UoKSx0LDApKXJldHVybiEwfWVsc2UgaWYoMT09PXIpe2Zvcig7aTxuLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihyPW5baSsrXSk7KWlmKHIudG9Mb3dlckNhc2UoKT09PXQpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiExfWZ1bmN0aW9uIEw2KG4pe3JldHVybiA0PT09bi50eXBlJiZuLnZhbHVlIT09TjZ9ZnVuY3Rpb24gb2ZlKG4sdCxlKXtyZXR1cm4gdD09PSg0IT09bi50eXBlfHxlP24udmFsdWU6TjYpfWZ1bmN0aW9uIHNmZShuLHQsZSl7bGV0IGk9NCxyPW4uYXR0cnN8fFtdLG89ZnVuY3Rpb24obil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoRkcoblt0XSkpcmV0dXJuIHQ7cmV0dXJuIG4ubGVuZ3RofShyKSxzPSExO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtsZXQgbD10W2FdO2lmKCJudW1iZXIiIT10eXBlb2YgbCl7aWYoIXMpaWYoNCZpKXtpZihpPTJ8MSZpLCIiIT09bCYmIW9mZShuLGwsZSl8fCIiPT09bCYmMT09PXQubGVuZ3RoKXtpZihXbChpKSlyZXR1cm4hMTtzPSEwfX1lbHNle2xldCBjPTgmaT9sOnRbKythXTtpZig4JmkmJm51bGwhPT1uLmF0dHJzKXtpZighcmZlKG4uYXR0cnMsYyxlKSl7aWYoV2woaSkpcmV0dXJuITE7cz0hMH1jb250aW51ZX1sZXQgZD1hZmUoOCZpPyJjbGFzcyI6bCxyLEw2KG4pLGUpO2lmKC0xPT09ZCl7aWYoV2woaSkpcmV0dXJuITE7cz0hMDtjb250aW51ZX1pZigiIiE9PWMpe2xldCBwO3A9ZD5vPyIiOnJbZCsxXS50b0xvd2VyQ2FzZSgpO2xldCBoPTgmaT9wOm51bGw7aWYoaCYmLTEhPT1GNihoLGMsMCl8fDImaSYmYyE9PXApe2lmKFdsKGkpKXJldHVybiExO3M9ITB9fX19ZWxzZXtpZighcyYmIVdsKGkpJiYhV2wobCkpcmV0dXJuITE7aWYocyYmV2wobCkpY29udGludWU7cz0hMSxpPWx8MSZpfX1yZXR1cm4gV2woaSl8fHN9ZnVuY3Rpb24gV2wobil7cmV0dXJuIDA9PSgxJm4pfWZ1bmN0aW9uIGFmZShuLHQsZSxpKXtpZihudWxsPT09dClyZXR1cm4tMTtsZXQgcj0wO2lmKGl8fCFlKXtsZXQgbz0hMTtmb3IoO3I8dC5sZW5ndGg7KXtsZXQgcz10W3JdO2lmKHM9PT1uKXJldHVybiByO2lmKDM9PT1zfHw2PT09cylvPSEwO2Vsc2V7aWYoMT09PXN8fDI9PT1zKXtsZXQgYT10Wysrcl07Zm9yKDsic3RyaW5nIj09dHlwZW9mIGE7KWE9dFsrK3JdO2NvbnRpbnVlfWlmKDQ9PT1zKWJyZWFrO2lmKDA9PT1zKXtyKz00O2NvbnRpbnVlfX1yKz1vPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YoNCk7aWYoZT4tMSlmb3IoZSsrO2U8bi5sZW5ndGg7KXtsZXQgaT1uW2VdO2lmKCJudW1iZXIiPT10eXBlb2YgaSlyZXR1cm4tMTtpZihpPT09dClyZXR1cm4gZTtlKyt9cmV0dXJuLTF9KHQsbil9ZnVuY3Rpb24gQjYobix0LGU9ITEpe2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHNmZShuLHRbaV0sZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZGZlKG4sdCl7ZTpmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXTtpZihuLmxlbmd0aD09PWkubGVuZ3RoKXtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKylpZihuW3JdIT09aVtyXSljb250aW51ZSBlO3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBPaihuLHQpe3JldHVybiBuPyI6bm90KCIrdC50cmltKCkrIikiOnR9ZnVuY3Rpb24gcGZlKG4pe2xldCB0PW5bMF0sZT0xLGk9MixyPSIiLG89ITE7Zm9yKDtlPG4ubGVuZ3RoOyl7bGV0IHM9bltlXTtpZigic3RyaW5nIj09dHlwZW9mIHMpaWYoMiZpKXtsZXQgYT1uWysrZV07cis9IlsiK3MrKGEubGVuZ3RoPjA/Jz0iJythKyciJzoiIikrIl0ifWVsc2UgOCZpP3IrPSIuIitzOjQmaSYmKHIrPSIgIitzKTtlbHNlIiIhPT1yJiYhV2wocykmJih0Kz1PaihvLHIpLHI9IiIpLGk9cyxvPW98fCFXbChpKTtlKyt9cmV0dXJuIiIhPT1yJiYodCs9T2oobyxyKSksdH12YXIgR249e307ZnVuY3Rpb24geChuKXtWNihEaSgpLFplKCksVHMoKStuLCExKX1mdW5jdGlvbiBWNihuLHQsZSxpKXtpZighaSlpZigzPT0oMyZ0WzJdKSl7bGV0IG89bi5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PW8mJnFTKHQsbyxlKX1lbHNle2xldCBvPW4ucHJlT3JkZXJIb29rcztudWxsIT09byYmWVModCxvLDAsZSl9dHAoZSl9dmFyIGtqPXsiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSI6Z2UsIlx1MDI3NVx1MDI3NWRlZmluZUluamVjdG9yIjpVLCJcdTAyNzVcdTAyNzVpbmplY3QiOlIsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRyxyZXNvbHZlRm9yd2FyZFJlZjpxaX07dmFyIGdmZT1hcih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6YXJ9KTtmdW5jdGlvbiBGaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VDbGFzc31mdW5jdGlvbiBOaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VGYWN0b3J5fXZhciBINj13YigiSW5qZWN0YWJsZSIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7bi5oYXNPd25Qcm9wZXJ0eSh0RSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHRFLHtnZXQ6KCk9PihudWxsPT09ZSYmKGU9c2woKS5jb21waWxlSW5qZWN0YWJsZShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NXByb3YuanNgLGZ1bmN0aW9uKG4sdCl7bGV0IGU9dHx8e3Byb3ZpZGVkSW46bnVsbH0saT17bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjplLnByb3ZpZGVkSW59O3JldHVybihGaihlKXx8TmooZSkpJiZ2b2lkIDAhPT1lLmRlcHMmJihpLmRlcHM9WEcoZS5kZXBzKSksRmooZSk/aS51c2VDbGFzcz1lLnVzZUNsYXNzOmZ1bmN0aW9uKG4pe3JldHVybiBnZmUgaW4gbn0oZSk/aS51c2VWYWx1ZT1lLnVzZVZhbHVlOk5qKGUpP2kudXNlRmFjdG9yeT1lLnVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIHZvaWQgMCE9PW4udXNlRXhpc3Rpbmd9KGUpJiYoaS51c2VFeGlzdGluZz1lLnVzZUV4aXN0aW5nKSxpfShuLHQpKSksZSl9KSxuLmhhc093blByb3BlcnR5KFF1KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj1zbCgpO2k9ci5jb21waWxlRmFjdG9yeShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bix0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0OnIuRmFjdG9yeVRhcmdldC5JbmplY3RhYmxlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMH0pfShuLHQpKTtmdW5jdGlvbiBMaihuLHQ9bnVsbCxlPW51bGwsaSl7bGV0IHI9VTYobix0LGUsaSk7cmV0dXJuIHIucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCkscn1mdW5jdGlvbiBVNihuLHQ9bnVsbCxlPW51bGwsaSxyPW5ldyBTZXQpe2xldCBvPVtlfHxXaSxwaGUobildO3JldHVybiBpPWl8fCgib2JqZWN0Ij09dHlwZW9mIG4/dm9pZCAwOmNvKG4pKSxuZXcgbUUobyx0fHxRRigpLGl8fG51bGwscil9dmFyIHpuPSgoKT0+e2NsYXNzIG57c3RhdGljIGNyZWF0ZShlLGkpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIExqKHtuYW1lOiIifSxpLGUsIiIpO3tsZXQgcj1lLm5hbWU/PyIiO3JldHVybiBMaih7bmFtZTpyfSxlLnBhcmVudCxlLnByb3ZpZGVycyxyKX19fXJldHVybiBuLlRIUk9XX0lGX05PVF9GT1VORD1kYixuLk5VTEw9bmV3IGZFLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PlIocDYpfSksbi5fX05HX0VMRU1FTlRfSURfXz0tMSxufSkoKSxlYj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHRoaXMudG9rZW49dCx0aGlzLmlkPWUsIXQpdGhyb3cgbmV3IE10KDIwOCwhMSk7dGhpcy5kaXNwbGF5TmFtZT1jbyh0aGlzLnRva2VuKX1zdGF0aWMgZ2V0KHQpe3JldHVybiBCai5nZXQocWkodCkpfXN0YXRpYyBnZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIEJqLm51bWJlck9mS2V5c319LEJqPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FsbEtleXM9bmV3IE1hcH1nZXQodCl7aWYodCBpbnN0YW5jZW9mIGViKXJldHVybiB0O2lmKHRoaXMuX2FsbEtleXMuaGFzKHQpKXJldHVybiB0aGlzLl9hbGxLZXlzLmdldCh0KTtsZXQgZT1uZXcgZWIodCxlYi5udW1iZXJPZktleXMpO3JldHVybiB0aGlzLl9hbGxLZXlzLnNldCh0LGUpLGV9Z2V0IG51bWJlck9mS2V5cygpe3JldHVybiB0aGlzLl9hbGxLZXlzLnNpemV9fTtmdW5jdGlvbiB3KG4sdD1paS5EZWZhdWx0KXtsZXQgZT1aZSgpO3JldHVybiBudWxsPT09ZT9SKG4sdCk6ekcoTW8oKSxlLHFpKG4pLHQpfWZ1bmN0aW9uIEpsKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9ZnVuY3Rpb24gR1Mobix0KXtyZXR1cm4gbjw8MTd8dDw8Mn1mdW5jdGlvbiBKaChuKXtyZXR1cm4gbj4+MTcmMzI3Njd9ZnVuY3Rpb24gSmsobil7cmV0dXJuIDJ8bn1mdW5jdGlvbiBGZyhuKXtyZXR1cm4oMTMxMDY4Jm4pPj4yfWZ1bmN0aW9uIGxrKG4sdCl7cmV0dXJuLTEzMTA2OSZufHQ8PDJ9ZnVuY3Rpb24gJGsobil7cmV0dXJuIDF8bn1mdW5jdGlvbiB6NihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj1lW2ldLG89ZVtpKzFdO2lmKC0xIT09byl7bGV0IHM9bi5kYXRhW29dO0xGKHIpLHMuY29udGVudFF1ZXJpZXMoMix0W29dLG8pfX19ZnVuY3Rpb24gQkUobix0LGUsaSxyLG8scyxhLGwsYyx1KXtsZXQgZD10LmJsdWVwcmludC5zbGljZSgpO3JldHVybiBkWzBdPXIsZFsyXT03NnxpLChudWxsIT09dXx8biYmMTAyNCZuWzJdKSYmKGRbMl18PTEwMjQpLHdHKGQpLGRbM109ZFsxNV09bixkWzhdPWUsZFsxMF09c3x8biYmblsxMF0sZFsxMV09YXx8biYmblsxMV0sZFsxMl09bHx8biYmblsxMl18fG51bGwsZFs5XT1jfHxuJiZuWzldfHxudWxsLGRbNl09byxkWzIwXT1OaGUrKyxkWzIxXT11LGRbMTZdPTI9PXQudHlwZT9uWzE2XTpkLGR9ZnVuY3Rpb24gV2cobix0LGUsaSxyKXtsZXQgbz1uLmRhdGFbdF07aWYobnVsbD09PW8pbz1yTihuLHQsZSxpLHIpLFluLmxGcmFtZS5pbkkxOG4mJihvLmZsYWdzfD02NCk7ZWxzZSBpZig2NCZvLnR5cGUpe28udHlwZT1lLG8udmFsdWU9aSxvLmF0dHJzPXI7bGV0IHM9bGIoKTtvLmluamVjdG9ySW5kZXg9bnVsbD09PXM/LTE6cy5pbmplY3RvckluZGV4fXJldHVybiBXYyhvLCEwKSxvfWZ1bmN0aW9uIHJOKG4sdCxlLGkscil7bGV0IG89U0coKSxzPWtGKCksbD1uLmRhdGFbdF09ZnVuY3Rpb24obix0LGUsaSxyLG8pe3JldHVybnt0eXBlOmUsaW5kZXg6aSxpbnNlcnRCZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6dD90LmluamVjdG9ySW5kZXg6LTEsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOnIsYXR0cnM6byxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXdzOm51bGwsbmV4dDpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAscz9vOm8mJm8ucGFyZW50LGUsdCxpLHIpO3JldHVybiBudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPWwpLG51bGwhPT1vJiYocz9udWxsPT1vLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihvLmNoaWxkPWwpOm51bGw9PT1vLm5leHQmJihvLm5leHQ9bCkpLGx9ZnVuY3Rpb24gcWcobix0LGUsaSl7aWYoMD09PWUpcmV0dXJuLTE7bGV0IHI9dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxlO28rKyl0LnB1c2goaSksbi5ibHVlcHJpbnQucHVzaChpKSxuLmRhdGEucHVzaChudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBvTihuLHQsZSl7QkYodCk7dHJ5e2xldCBpPW4udmlld1F1ZXJ5O251bGwhPT1pJiZ0RigxLGksZSk7bGV0IHI9bi50ZW1wbGF0ZTtudWxsIT09ciYmajYobix0LHIsMSxlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmKG4uZmlyc3RDcmVhdGVQYXNzPSExKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLG4uc3RhdGljVmlld1F1ZXJpZXMmJnRGKDIsbi52aWV3UXVlcnksZSk7bGV0IG89bi5jb21wb25lbnRzO251bGwhPT1vJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWpmZShuLHRbZV0pfSh0LG8pfWNhdGNoKGkpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxpfWZpbmFsbHl7dFsyXSY9LTUsVkYoKX19ZnVuY3Rpb24gVkUobix0LGUsaSl7bGV0IHI9dFsyXTtpZigxMjghPSgxMjgmcikpe0JGKHQpO3RyeXt3Ryh0KSxFRyhuLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09ZSYmajYobix0LGUsMixpKTtsZXQgcz0zPT0oMyZyKTtpZihzKXtsZXQgYz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09YyYmcVModCxjLG51bGwpfWVsc2V7bGV0IGM9bi5wcmVPcmRlckhvb2tzO251bGwhPT1jJiZZUyh0LGMsMCxudWxsKSxlayh0LDApfWlmKGZ1bmN0aW9uKG4pe2ZvcihsZXQgdD1KRihuKTtudWxsIT09dDt0PSRGKHQpKXtpZighdFsyXSljb250aW51ZTtsZXQgZT10WzldO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLG89clszXTswPT0oNTEyJnJbMl0pJiZPRihvLDEpLHJbMl18PTUxMn19fSh0KSxmdW5jdGlvbihuKXtmb3IobGV0IHQ9SkYobik7bnVsbCE9PXQ7dD0kRih0KSlmb3IobGV0IGU9MTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV0scj1pWzFdO29FKGkpJiZWRShyLGksci50ZW1wbGF0ZSxpWzhdKX19KHQpLG51bGwhPT1uLmNvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLHMpe2xldCBjPW4uY29udGVudENoZWNrSG9va3M7bnVsbCE9PWMmJnFTKHQsYyl9ZWxzZXtsZXQgYz1uLmNvbnRlbnRIb29rcztudWxsIT09YyYmWVModCxjLDEpLGVrKHQsMSl9IWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PWUpdHJ5e2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldO2lmKHI8MCl0cCh+cik7ZWxzZXtsZXQgbz1yLHM9ZVsrK2ldLGE9ZVsrK2ldO1FkZShzLG8pLGEoMix0W29dKX19fWZpbmFsbHl7dHAoLTEpfX0obix0KTtsZXQgYT1uLmNvbXBvbmVudHM7bnVsbCE9PWEmJmZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspemZlKG4sdFtlXSl9KHQsYSk7bGV0IGw9bi52aWV3UXVlcnk7aWYobnVsbCE9PWwmJnRGKDIsbCxpKSxzKXtsZXQgYz1uLnZpZXdDaGVja0hvb2tzO251bGwhPT1jJiZxUyh0LGMpfWVsc2V7bGV0IGM9bi52aWV3SG9va3M7bnVsbCE9PWMmJllTKHQsYywyKSxlayh0LDIpfSEwPT09bi5maXJzdFVwZGF0ZVBhc3MmJihuLmZpcnN0VXBkYXRlUGFzcz0hMSksdFsyXSY9LTQxLDUxMiZ0WzJdJiYodFsyXSY9LTUxMyxPRih0WzNdLC0xKSl9ZmluYWxseXtWRigpfX19ZnVuY3Rpb24gajYobix0LGUsaSxyKXtsZXQgbz1UcygpLHM9MiZpO3RyeXt0cCgtMSkscyYmdC5sZW5ndGg+MjImJlY2KG4sdCwyMiwhMSksZShpLHIpfWZpbmFsbHl7dHAobyl9fWZ1bmN0aW9uIEc2KG4sdCxlKXtpZihQRih0KSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBvPXQuZGlyZWN0aXZlU3RhcnQ7bzxyO28rKyl7bGV0IHM9bi5kYXRhW29dO3MuY29udGVudFF1ZXJpZXMmJnMuY29udGVudFF1ZXJpZXMoMSxlW29dLG8pfX19ZnVuY3Rpb24gc04obix0LGUpeyFNRygpfHwoZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZS5kaXJlY3RpdmVTdGFydCxvPWUuZGlyZWN0aXZlRW5kO24uZmlyc3RDcmVhdGVQYXNzfHxjYihlLHQpLFljKGksdCk7bGV0IHM9ZS5pbml0aWFsSW5wdXRzO2ZvcihsZXQgYT1yO2E8bzthKyspe2xldCBsPW4uZGF0YVthXSxjPVFsKGwpO2MmJkxmZSh0LGUsbCk7bGV0IHU9Q2IodCxuLGEsZSk7WWModSx0KSxudWxsIT09cyYmQmZlKDAsYS1yLHUsbCwwLHMpLGMmJihvcChlLmluZGV4LHQpWzhdPXUpfX0obix0LGUsdWwoZSx0KSksMTI4PT0oMTI4JmUuZmxhZ3MpJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9ZS5kaXJlY3RpdmVTdGFydCxyPWUuZGlyZWN0aXZlRW5kLG89ZS5pbmRleCxzPVluLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7dHJ5e3RwKG8pO2ZvcihsZXQgYT1pO2E8cjthKyspe2xldCBsPW4uZGF0YVthXSxjPXRbYV07U2soYSksKG51bGwhPT1sLmhvc3RCaW5kaW5nc3x8MCE9PWwuaG9zdFZhcnN8fG51bGwhPT1sLmhvc3RBdHRycykmJks2KGwsYyl9fWZpbmFsbHl7dHAoLTEpLFNrKHMpfX0obix0LGUpKX1mdW5jdGlvbiBhTihuLHQsZT11bCl7bGV0IGk9dC5sb2NhbE5hbWVzO2lmKG51bGwhPT1pKXtsZXQgcj10LmluZGV4KzE7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKz0yKXtsZXQgcz1pW28rMV0sYT0tMT09PXM/ZSh0LG4pOm5bc107bltyKytdPWF9fX1mdW5jdGlvbiBXNihuKXtsZXQgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9bE4oMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzKTp0fWZ1bmN0aW9uIGxOKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCB1PTIyK2ksZD11K3IscD1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKGk8bj9udWxsOkduKTtyZXR1cm4gZX0odSxkKSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjO3JldHVybiBwWzFdPXt0eXBlOm4sYmx1ZXByaW50OnAsdGVtcGxhdGU6ZSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OmEsZGVjbFROb2RlOnQsZGF0YTpwLnNsaWNlKCkuZmlsbChudWxsLHUpLGJpbmRpbmdTdGFydEluZGV4OnUsZXhwYW5kb1N0YXJ0SW5kZXg6ZCxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygcz9zKCk6cyxmaXJzdENoaWxkOm51bGwsc2NoZW1hczpsLGNvbnN0czpoLGluY29tcGxldGVGaXJzdFBhc3M6ITF9fWZ1bmN0aW9uIHE2KG4sdCxlLGkpe2xldCByPWlXKHQpO251bGw9PT1lP3IucHVzaChpKTooci5wdXNoKGUpLG4uZmlyc3RDcmVhdGVQYXNzJiZyVyhuKS5wdXNoKGksci5sZW5ndGgtMSkpfWZ1bmN0aW9uIFZqKG4sdCxlKXtmb3IobGV0IGkgaW4gbilpZihuLmhhc093blByb3BlcnR5KGkpKXtsZXQgcj1uW2ldOyhlPW51bGw9PT1lP3t9OmUpLmhhc093blByb3BlcnR5KGkpP2VbaV0ucHVzaCh0LHIpOmVbaV09W3Qscl19cmV0dXJuIGV9ZnVuY3Rpb24gWTYobix0KXtsZXQgaT10LmRpcmVjdGl2ZUVuZCxyPW4uZGF0YSxvPXQuYXR0cnMscz1bXSxhPW51bGwsbD1udWxsO2ZvcihsZXQgYz10LmRpcmVjdGl2ZVN0YXJ0O2M8aTtjKyspe2xldCB1PXJbY10sZD11LmlucHV0cyxwPW51bGw9PT1vfHxMNih0KT9udWxsOlZmZShkLG8pO3MucHVzaChwKSxhPVZqKGQsYyxhKSxsPVZqKHUub3V0cHV0cyxjLGwpfW51bGwhPT1hJiYoYS5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKHQuZmxhZ3N8PTE2KSxhLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYodC5mbGFnc3w9MzIpKSx0LmluaXRpYWxJbnB1dHM9cyx0LmlucHV0cz1hLHQub3V0cHV0cz1sfWZ1bmN0aW9uIERhKG4sdCxlLGkscixvLHMsYSl7bGV0IHUsbD11bCh0LGUpLGM9dC5pbnB1dHM7IWEmJm51bGwhPWMmJih1PWNbaV0pPyhkTihuLGUsdSxpLHIpLFJGKHQpJiZYNihlLHQuaW5kZXgpKTozJnQudHlwZSYmKGk9ZnVuY3Rpb24obil7cmV0dXJuImNsYXNzIj09PW4/ImNsYXNzTmFtZSI6ImZvciI9PT1uPyJodG1sRm9yIjoiZm9ybWFjdGlvbiI9PT1uPyJmb3JtQWN0aW9uIjoiaW5uZXJIdG1sIj09PW4/ImlubmVySFRNTCI6InJlYWRvbmx5Ij09PW4/InJlYWRPbmx5IjoidGFiaW5kZXgiPT09bj8idGFiSW5kZXgiOm59KGkpLHI9bnVsbCE9cz9zKHIsdC52YWx1ZXx8IiIsaSk6cixvLnNldFByb3BlcnR5KGwsaSxyKSl9ZnVuY3Rpb24gWDYobix0KXtsZXQgZT1vcCh0LG4pOzE2JmVbMl18fChlWzJdfD0zMil9ZnVuY3Rpb24gY04obix0LGUsaSl7bGV0IHI9ITE7aWYoTUcoKSl7bGV0IG89ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGlyZWN0aXZlUmVnaXN0cnkscj1udWxsO2lmKGkpZm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBzPWlbb107QjYoZSxzLnNlbGVjdG9ycywhMSkmJihyfHwocj1bXSksZEUoY2IoZSx0KSxuLHMudHlwZSksUWwocyk/KFo2KG4sZSksci51bnNoaWZ0KHMpKTpyLnB1c2gocykpfXJldHVybiByfShuLHQsZSkscz1udWxsPT09aT9udWxsOnsiIjotMX07aWYobnVsbCE9PW8pe3I9ITAsSjYoZSxuLmRhdGEubGVuZ3RoLG8ubGVuZ3RoKTtmb3IobGV0IHU9MDt1PG8ubGVuZ3RoO3UrKyl7bGV0IGQ9b1t1XTtkLnByb3ZpZGVyc1Jlc29sdmVyJiZkLnByb3ZpZGVyc1Jlc29sdmVyKGQpfWxldCBhPSExLGw9ITEsYz1xZyhuLHQsby5sZW5ndGgsbnVsbCk7Zm9yKGxldCB1PTA7dTxvLmxlbmd0aDt1Kyspe2xldCBkPW9bdV07ZS5tZXJnZWRBdHRycz1hRShlLm1lcmdlZEF0dHJzLGQuaG9zdEF0dHJzKSwkNihuLGUsdCxjLGQpLE5mZShjLGQscyksbnVsbCE9PWQuY29udGVudFF1ZXJpZXMmJihlLmZsYWdzfD04KSwobnVsbCE9PWQuaG9zdEJpbmRpbmdzfHxudWxsIT09ZC5ob3N0QXR0cnN8fDAhPT1kLmhvc3RWYXJzKSYmKGUuZmxhZ3N8PTEyOCk7bGV0IHA9ZC50eXBlLnByb3RvdHlwZTshYSYmKHAubmdPbkNoYW5nZXN8fHAubmdPbkluaXR8fHAubmdEb0NoZWNrKSYmKChuLnByZU9yZGVySG9va3N8fChuLnByZU9yZGVySG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGE9ITApLCFsJiYocC5uZ09uQ2hhbmdlc3x8cC5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJDaGVja0hvb2tzfHwobi5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGw9ITApLGMrK31ZNihuLGUpfXMmJmZ1bmN0aW9uKG4sdCxlKXtpZih0KXtsZXQgaT1uLmxvY2FsTmFtZXM9W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKz0yKXtsZXQgbz1lW3RbcisxXV07aWYobnVsbD09byl0aHJvdyBuZXcgTXQoLTMwMSwhMSk7aS5wdXNoKHRbcl0sbyl9fX0oZSxpLHMpfXJldHVybiBlLm1lcmdlZEF0dHJzPWFFKGUubWVyZ2VkQXR0cnMsZS5hdHRycykscn1mdW5jdGlvbiBRNihuLHQsZSxpLHIsbyl7bGV0IHM9by5ob3N0QmluZGluZ3M7aWYocyl7bGV0IGE9bi5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PWEmJihhPW4uaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtsZXQgbD1+dC5pbmRleDsoZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7Zm9yKDt0PjA7KXtsZXQgZT1uWy0tdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiZlPDApcmV0dXJuIGV9cmV0dXJuIDB9KShhKSE9bCYmYS5wdXNoKGwpLGEucHVzaChpLHIscyl9fWZ1bmN0aW9uIEs2KG4sdCl7bnVsbCE9PW4uaG9zdEJpbmRpbmdzJiZuLmhvc3RCaW5kaW5ncygxLHQpfWZ1bmN0aW9uIFo2KG4sdCl7dC5mbGFnc3w9Miwobi5jb21wb25lbnRzfHwobi5jb21wb25lbnRzPVtdKSkucHVzaCh0LmluZGV4KX1mdW5jdGlvbiBOZmUobix0LGUpe2lmKGUpe2lmKHQuZXhwb3J0QXMpZm9yKGxldCBpPTA7aTx0LmV4cG9ydEFzLmxlbmd0aDtpKyspZVt0LmV4cG9ydEFzW2ldXT1uO1FsKHQpJiYoZVsiIl09bil9fWZ1bmN0aW9uIEo2KG4sdCxlKXtuLmZsYWdzfD0xLG4uZGlyZWN0aXZlU3RhcnQ9dCxuLmRpcmVjdGl2ZUVuZD10K2Usbi5wcm92aWRlckluZGV4ZXM9dH1mdW5jdGlvbiAkNihuLHQsZSxpLHIpe24uZGF0YVtpXT1yO2xldCBvPXIuZmFjdG9yeXx8KHIuZmFjdG9yeT1RaChyLnR5cGUpKSxzPW5ldyBLaChvLFFsKHIpLHcpO24uYmx1ZXByaW50W2ldPXMsZVtpXT1zLFE2KG4sdCwwLGkscWcobixlLHIuaG9zdFZhcnMsR24pLHIpfWZ1bmN0aW9uIExmZShuLHQsZSl7bGV0IGk9dWwodCxuKSxyPVc2KGUpLG89blsxMF0scz1IRShuLEJFKG4scixudWxsLGUub25QdXNoPzMyOjE2LGksdCxvLG8uY3JlYXRlUmVuZGVyZXIoaSxlKSxudWxsLG51bGwsbnVsbCkpO25bdC5pbmRleF09c31mdW5jdGlvbiBRYyhuLHQsZSxpLHIsbyl7bGV0IHM9dWwobix0KTt1Tih0WzExXSxzLG8sbi52YWx1ZSxlLGkscil9ZnVuY3Rpb24gdU4obix0LGUsaSxyLG8scyl7aWYobnVsbD09byluLnJlbW92ZUF0dHJpYnV0ZSh0LHIsZSk7ZWxzZXtsZXQgYT1udWxsPT1zP3FuKG8pOnMobyxpfHwiIixyKTtuLnNldEF0dHJpYnV0ZSh0LHIsYSxlKX19ZnVuY3Rpb24gQmZlKG4sdCxlLGkscixvKXtsZXQgcz1vW3RdO2lmKG51bGwhPT1zKXtsZXQgYT1pLnNldElucHV0O2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7KXtsZXQgYz1zW2wrK10sdT1zW2wrK10sZD1zW2wrK107bnVsbCE9PWE/aS5zZXRJbnB1dChlLGQsYyx1KTplW3VdPWR9fX1mdW5jdGlvbiBWZmUobix0KXtsZXQgZT1udWxsLGk9MDtmb3IoO2k8dC5sZW5ndGg7KXtsZXQgcj10W2ldO2lmKDAhPT1yKWlmKDUhPT1yKXtpZigibnVtYmVyIj09dHlwZW9mIHIpYnJlYWs7bi5oYXNPd25Qcm9wZXJ0eShyKSYmKG51bGw9PT1lJiYoZT1bXSksZS5wdXNoKHIsbltyXSx0W2krMV0pKSxpKz0yfWVsc2UgaSs9MjtlbHNlIGkrPTR9cmV0dXJuIGV9ZnVuY3Rpb24gZVcobix0LGUsaSl7cmV0dXJuIG5ldyBBcnJheShuLCEwLCExLHQsbnVsbCwwLGksZSxudWxsLG51bGwpfWZ1bmN0aW9uIHpmZShuLHQpe2xldCBlPW9wKHQsbik7aWYob0UoZSkpe2xldCBpPWVbMV07NDgmZVsyXT9WRShpLGUsaS50ZW1wbGF0ZSxlWzhdKTplWzVdPjAmJmVGKGUpfX1mdW5jdGlvbiBlRihuKXtmb3IobGV0IGk9SkYobik7bnVsbCE9PWk7aT0kRihpKSlmb3IobGV0IHI9MTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07aWYob0UobykpaWYoNTEyJm9bMl0pe2xldCBzPW9bMV07VkUocyxvLHMudGVtcGxhdGUsb1s4XSl9ZWxzZSBvWzVdPjAmJmVGKG8pfWxldCBlPW5bMV0uY29tcG9uZW50cztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9b3AoZVtpXSxuKTtvRShyKSYmcls1XT4wJiZlRihyKX19ZnVuY3Rpb24gamZlKG4sdCl7bGV0IGU9b3AodCxuKSxpPWVbMV07KGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPXQubGVuZ3RoO2U8bi5ibHVlcHJpbnQubGVuZ3RoO2UrKyl0LnB1c2gobi5ibHVlcHJpbnRbZV0pfSkoaSxlKSxvTihpLGUsZVs4XSl9ZnVuY3Rpb24gSEUobix0KXtyZXR1cm4gblsxM10/blsxNF1bNF09dDpuWzEzXT10LG5bMTRdPXQsdH1mdW5jdGlvbiB0VyhuKXtmb3IoO247KXtuWzJdfD0zMjtsZXQgdD1aRihuKTtpZihGZGUobikmJiF0KXJldHVybiBuO249dH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuVyhuLHQsZSxpPSEwKXtsZXQgcj10WzEwXTtyLmJlZ2luJiZyLmJlZ2luKCk7dHJ5e1ZFKG4sdCxuLnRlbXBsYXRlLGUpfWNhdGNoKHMpe3Rocm93IGkmJnNXKHQscyksc31maW5hbGx5e3IuZW5kJiZyLmVuZCgpfX1mdW5jdGlvbiB0RihuLHQsZSl7TEYoMCksdChuLGUpfWZ1bmN0aW9uIGlXKG4pe3JldHVybiBuWzddfHwobls3XT1bXSl9ZnVuY3Rpb24gclcobil7cmV0dXJuIG4uY2xlYW51cHx8KG4uY2xlYW51cD1bXSl9ZnVuY3Rpb24gb1cobix0LGUpe3JldHVybihudWxsPT09bnx8UWwobikpJiYoZT1mdW5jdGlvbihuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bMV0pcmV0dXJuIG47bj1uWzBdfXJldHVybiBudWxsfShlW3QuaW5kZXhdKSksZVsxMV19ZnVuY3Rpb24gc1cobix0KXtsZXQgZT1uWzldLGk9ZT9lLmdldChTcyxudWxsKTpudWxsO2kmJmkuaGFuZGxlRXJyb3IodCl9ZnVuY3Rpb24gZE4obix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoOyl7bGV0IHM9ZVtvKytdLGE9ZVtvKytdLGw9dFtzXSxjPW4uZGF0YVtzXTtudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwscixpLGEpOmxbYV09cn19ZnVuY3Rpb24gbmQobix0LGUpe2xldCBpPUlFKHQsbik7eDYoblsxMV0saSxlKX1mdW5jdGlvbiBfRShuLHQsZSl7bGV0IGk9ZT9uLnN0eWxlczpudWxsLHI9ZT9uLmNsYXNzZXM6bnVsbCxvPTA7aWYobnVsbCE9PXQpZm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBhPXRbc107Im51bWJlciI9PXR5cGVvZiBhP289YToxPT1vP3I9YmsocixhKToyPT1vJiYoaT1iayhpLGErIjogIit0Wysrc10rIjsiKSl9ZT9uLnN0eWxlcz1pOm4uc3R5bGVzV2l0aG91dEhvc3Q9aSxlP24uY2xhc3Nlcz1yOm4uY2xhc3Nlc1dpdGhvdXRIb3N0PXJ9ZnVuY3Rpb24gSlMobix0LGUsaSxyPSExKXtmb3IoO251bGwhPT1lOyl7bGV0IG89dFtlLmluZGV4XTtpZihudWxsIT09byYmaS5wdXNoKE1hKG8pKSxKdShvKSlmb3IobGV0IGE9MTA7YTxvLmxlbmd0aDthKyspe2xldCBsPW9bYV0sYz1sWzFdLmZpcnN0Q2hpbGQ7bnVsbCE9PWMmJkpTKGxbMV0sbCxjLGkpfWxldCBzPWUudHlwZTtpZig4JnMpSlMobix0LGUuY2hpbGQsaSk7ZWxzZSBpZigzMiZzKXtsZXQgbCxhPUtGKGUsdCk7Zm9yKDtsPWEoKTspaS5wdXNoKGwpfWVsc2UgaWYoMTYmcyl7bGV0IGE9UDYodCxlKTtpZihBcnJheS5pc0FycmF5KGEpKWkucHVzaCguLi5hKTtlbHNle2xldCBsPVpGKHRbMTZdKTtKUyhsWzFdLGwsYSxpLCEwKX19ZT1yP2UucHJvamVjdGlvbk5leHQ6ZS5uZXh0fXJldHVybiBpfXZhciAkaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2xWaWV3PXQsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWUsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IHJvb3ROb2Rlcygpe2xldCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gSlMoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19c2V0IGNvbnRleHQodCl7dGhpcy5fbFZpZXdbOF09dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDEyOD09KDEyOCZ0aGlzLl9sVmlld1syXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtsZXQgdD10aGlzLl9sVmlld1szXTtpZihKdSh0KSl7bGV0IGU9dFs4XSxpPWU/ZS5pbmRleE9mKHRoaXMpOi0xO2k+LTEmJihYayh0LGkpLHBFKGUsaSkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfXc2KHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kodCl7cTYodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsbnVsbCx0KX1tYXJrRm9yQ2hlY2soKXt0Vyh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXd8fHRoaXMuX2xWaWV3KX1kZXRhY2goKXt0aGlzLl9sVmlld1syXSY9LTY1fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbMl18PTY0fWRldGVjdENoYW5nZXMoKXtuVyh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgTXQoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dmFyIHQ7dGhpcy5fYXBwUmVmPW51bGwsQWIodGhpcy5fbFZpZXdbMV0sdD10aGlzLl9sVmlldyx0WzExXSwyLG51bGwsbnVsbCl9YXR0YWNoVG9BcHBSZWYodCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IE10KDkwMiwhMSk7dGhpcy5fYXBwUmVmPXR9fSxuRj1jbGFzcyBleHRlbmRzICRoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7bGV0IHQ9dGhpcy5fdmlldztuVyh0WzFdLHQsdFs4XSwhMSl9Y2hlY2tOb0NoYW5nZXMoKXt9Z2V0IGNvbnRleHQoKXtyZXR1cm4gbnVsbH19LGhiPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPXR9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCl7bGV0IGU9b2wodCk7cmV0dXJuIG5ldyB2RShlLHRoaXMubmdNb2R1bGUpfX07ZnVuY3Rpb24gSGoobil7bGV0IHQ9W107Zm9yKGxldCBlIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShlKSYmdC5wdXNoKHtwcm9wTmFtZTpuW2VdLHRlbXBsYXRlTmFtZTplfSk7cmV0dXJuIHR9dmFyIHZFPWNsYXNzIGV4dGVuZHMgZ0V7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj10LnNlbGVjdG9ycy5tYXAocGZlKS5qb2luKCIsIiksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWdldCBpbnB1dHMoKXtyZXR1cm4gSGoodGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX1nZXQgb3V0cHV0cygpe3JldHVybiBIaih0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jcmVhdGUodCxlLGkscil7bGV0IG89KHI9cnx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIG5wP3I6cj8uaW5qZWN0b3I7byYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKG89dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKG8pfHxvKTtsZXQgcz1vP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaW5qZWN0b3I9dCx0aGlzLnBhcmVudEluamVjdG9yPWV9Z2V0KHQsZSxpKXtsZXQgcj10aGlzLmluamVjdG9yLmdldCh0LG9rLGkpO3JldHVybiByIT09b2t8fGU9PT1vaz9yOnRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KHQsZSxpKX19KHQsbyk6dCxhPXMuZ2V0KHFjLG51bGwpO2lmKG51bGw9PT1hKXRocm93IG5ldyBNdCg0MDcsITEpO2xldCBtLEMsbD1zLmdldChBaGUsbnVsbCksYz1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLHU9dGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdWzBdfHwiZGl2IixkPWk/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuLnNlbGVjdFJvb3RFbGVtZW50KHQsZT09PXdhLlNoYWRvd0RvbSl9KGMsaSx0aGlzLmNvbXBvbmVudERlZi5lbmNhcHN1bGF0aW9uKTp0TihjLHUsZnVuY3Rpb24obil7bGV0IHQ9bi50b0xvd2VyQ2FzZSgpO3JldHVybiJzdmciPT09dD8ic3ZnIjoibWF0aCI9PT10PyJtYXRoIjpudWxsfSh1KSkscD10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/Mjg4OjI3MixoPWxOKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLGY9QkUobnVsbCxoLG51bGwscCxudWxsLG51bGwsYSxjLGwscyxudWxsKTtCRihmKTt0cnl7bGV0IF89ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWVbMV07ZVsyMl09bjtsZXQgbD1XZyhzLDIyLDIsIiNob3N0IixudWxsKSxjPWwubWVyZ2VkQXR0cnM9dC5ob3N0QXR0cnM7bnVsbCE9PWMmJihfRShsLGMsITApLG51bGwhPT1uJiYoc0UocixuLGMpLG51bGwhPT1sLmNsYXNzZXMmJmlOKHIsbixsLmNsYXNzZXMpLG51bGwhPT1sLnN0eWxlcyYmazYocixuLGwuc3R5bGVzKSkpO2xldCB1PWkuY3JlYXRlUmVuZGVyZXIobix0KSxkPUJFKGUsVzYodCksbnVsbCx0Lm9uUHVzaD8zMjoxNixlWzIyXSxsLGksdSxudWxsLG51bGwsbnVsbCk7cmV0dXJuIHMuZmlyc3RDcmVhdGVQYXNzJiYoZEUoY2IobCxlKSxzLHQudHlwZSksWjYocyxsKSxKNihsLGUubGVuZ3RoLDEpKSxIRShlLGQpLGVbMjJdPWR9KGQsdGhpcy5jb21wb25lbnREZWYsZixhLGMpO2lmKGQpaWYoaSlzRShjLGQsWyJuZy12ZXJzaW9uIixJaGUuZnVsbF0pO2Vsc2V7bGV0e2F0dHJzOnksY2xhc3NlczpJfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTI7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IG89bltpXTtpZigic3RyaW5nIj09dHlwZW9mIG8pMj09PXI/IiIhPT1vJiZ0LnB1c2gobyxuWysraV0pOjg9PT1yJiZlLnB1c2gobyk7ZWxzZXtpZighV2wocikpYnJlYWs7cj1vfWkrK31yZXR1cm57YXR0cnM6dCxjbGFzc2VzOmV9fSh0aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF0pO3kmJnNFKGMsZCx5KSxJJiZJLmxlbmd0aD4wJiZpTihjLGQsSS5qb2luKCIgIikpfWlmKEM9Q0coaCwyMiksdm9pZCAwIT09ZSl7bGV0IHk9Qy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgST0wO0k8dGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMubGVuZ3RoO0krKyl7bGV0IEE9ZVtJXTt5LnB1c2gobnVsbCE9QT9BcnJheS5mcm9tKEEpOm51bGwpfX1tPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPWVbMV0sbz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9TW8oKTtuLmZpcnN0Q3JlYXRlUGFzcyYmKGUucHJvdmlkZXJzUmVzb2x2ZXImJmUucHJvdmlkZXJzUmVzb2x2ZXIoZSksJDYobixpLHQscWcobix0LDEsbnVsbCksZSksWTYobixpKSk7bGV0IHI9Q2IodCxuLGkuZGlyZWN0aXZlU3RhcnQsaSk7WWMocix0KTtsZXQgbz11bChpLHQpO3JldHVybiBvJiZZYyhvLHQpLHJ9KHIsZSx0KTtpZihuWzhdPWVbOF09byxudWxsIT09aSlmb3IobGV0IGEgb2YgaSlhKG8sdCk7aWYodC5jb250ZW50UXVlcmllcyl7bGV0IGE9TW8oKTt0LmNvbnRlbnRRdWVyaWVzKDEsbyxhLmRpcmVjdGl2ZVN0YXJ0KX1sZXQgcz1NbygpO3JldHVybiFyLmZpcnN0Q3JlYXRlUGFzc3x8bnVsbD09PXQuaG9zdEJpbmRpbmdzJiZudWxsPT09dC5ob3N0QXR0cnN8fCh0cChzLmluZGV4KSxRNihlWzFdLHMsMCxzLmRpcmVjdGl2ZVN0YXJ0LHMuZGlyZWN0aXZlRW5kLHQpLEs2KHQsbykpLG99KF8sdGhpcy5jb21wb25lbnREZWYsZixbWGZlXSksb04oaCxmLG51bGwpfWZpbmFsbHl7VkYoKX1yZXR1cm4gbmV3IHJGKHRoaXMuY29tcG9uZW50VHlwZSxtLEdnKEMsZiksZixDKX19LHJGPShuZXcgaGIsY2xhc3MgZXh0ZW5kcyBXa3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1pLHRoaXMuX3Jvb3RMVmlldz1yLHRoaXMuX3ROb2RlPW8sdGhpcy5pbnN0YW5jZT1lLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgbkYociksdGhpcy5jb21wb25lbnRUeXBlPXR9c2V0SW5wdXQodCxlKXtsZXQgcixpPXRoaXMuX3ROb2RlLmlucHV0cztpZihudWxsIT09aSYmKHI9aVt0XSkpe2xldCBvPXRoaXMuX3Jvb3RMVmlldztkTihvWzFdLG8scix0LGUpLFg2KG8sdGhpcy5fdE5vZGUuaW5kZXgpfX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IFloKHRoaXMuX3ROb2RlLHRoaXMuX3Jvb3RMVmlldyl9ZGVzdHJveSgpe3RoaXMuaG9zdFZpZXcuZGVzdHJveSgpfW9uRGVzdHJveSh0KXt0aGlzLmhvc3RWaWV3Lm9uRGVzdHJveSh0KX19KTtmdW5jdGlvbiBYZmUoKXtsZXQgbj1NbygpO1BFKFplKClbMV0sbil9ZnVuY3Rpb24gYVcobil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3J9ZnVuY3Rpb24gdHQobil7bGV0IHQ9YVcobi50eXBlKSxlPSEwLGk9W25dO2Zvcig7dDspe2xldCByO2lmKFFsKG4pKXI9dC5cdTAyNzVjbXB8fHQuXHUwMjc1ZGlyO2Vsc2V7aWYodC5cdTAyNzVjbXApdGhyb3cgbmV3IE10KDkwMywhMSk7cj10Llx1MDI3NWRpcn1pZihyKXtpZihlKXtpLnB1c2gocik7bGV0IHM9bjtzLmlucHV0cz1jayhuLmlucHV0cykscy5kZWNsYXJlZElucHV0cz1jayhuLmRlY2xhcmVkSW5wdXRzKSxzLm91dHB1dHM9Y2sobi5vdXRwdXRzKTtsZXQgYT1yLmhvc3RCaW5kaW5nczthJiZKZmUobixhKTtsZXQgbD1yLnZpZXdRdWVyeSxjPXIuY29udGVudFF1ZXJpZXM7aWYobCYmS2ZlKG4sbCksYyYmWmZlKG4sYyksJE8obi5pbnB1dHMsci5pbnB1dHMpLCRPKG4uZGVjbGFyZWRJbnB1dHMsci5kZWNsYXJlZElucHV0cyksJE8obi5vdXRwdXRzLHIub3V0cHV0cyksUWwocikmJnIuZGF0YS5hbmltYXRpb24pe2xldCB1PW4uZGF0YTt1LmFuaW1hdGlvbj0odS5hbmltYXRpb258fFtdKS5jb25jYXQoci5kYXRhLmFuaW1hdGlvbil9fWxldCBvPXIuZmVhdHVyZXM7aWYobylmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGE9b1tzXTthJiZhLm5nSW5oZXJpdCYmYShuKSxhPT09dHQmJihlPSExKX19dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9IWZ1bmN0aW9uKG4pe2xldCB0PTAsZT1udWxsO2ZvcihsZXQgaT1uLmxlbmd0aC0xO2k+PTA7aS0tKXtsZXQgcj1uW2ldO3IuaG9zdFZhcnM9dCs9ci5ob3N0VmFycyxyLmhvc3RBdHRycz1hRShyLmhvc3RBdHRycyxlPWFFKGUsci5ob3N0QXR0cnMpKX19KGkpfWZ1bmN0aW9uIGNrKG4pe3JldHVybiBuPT09QWc/e306bj09PVdpP1tdOm59ZnVuY3Rpb24gS2ZlKG4sdCl7bGV0IGU9bi52aWV3UXVlcnk7bi52aWV3UXVlcnk9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9ZnVuY3Rpb24gWmZlKG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllcztuLmNvbnRlbnRRdWVyaWVzPWU/KGkscixvKT0+e3QoaSxyLG8pLGUoaSxyLG8pfTp0fWZ1bmN0aW9uIEpmZShuLHQpe2xldCBlPW4uaG9zdEJpbmRpbmdzO24uaG9zdEJpbmRpbmdzPWU/KGkscik9Pnt0KGksciksZShpLHIpfTp0fXZhciAkZmU9WyJwcm92aWRlcnNSZXNvbHZlciJdLGVtZT1bInRlbXBsYXRlIiwiZGVjbHMiLCJjb25zdHMiLCJ2YXJzIiwib25QdXNoIiwibmdDb250ZW50U2VsZWN0b3JzIiwic3R5bGVzIiwiZW5jYXBzdWxhdGlvbiIsInNjaGVtYXMiXTt2YXIgV1M9bnVsbDtmdW5jdGlvbiBVRSgpe2lmKCFXUyl7bGV0IG49V3IuU3ltYm9sO2lmKG4mJm4uaXRlcmF0b3IpV1M9bi5pdGVyYXRvcjtlbHNle2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXtsZXQgaT10W2VdOyJlbnRyaWVzIiE9PWkmJiJzaXplIiE9PWkmJk1hcC5wcm90b3R5cGVbaV09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJihXUz1pKX19fXJldHVybiBXU31mdW5jdGlvbiB6RShuKXtyZXR1cm4hIXBOKG4pJiYoQXJyYXkuaXNBcnJheShuKXx8IShuIGluc3RhbmNlb2YgTWFwKSYmVUUoKWluIG4pfWZ1bmN0aW9uIHBOKG4pe3JldHVybiBudWxsIT09biYmKCJmdW5jdGlvbiI9PXR5cGVvZiBufHwib2JqZWN0Ij09dHlwZW9mIG4pfWZ1bmN0aW9uIEtjKG4sdCxlKXtyZXR1cm4gblt0XT1lfWZ1bmN0aW9uIEliKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gc3Mobix0LGUpe3JldHVybiFPYmplY3QuaXMoblt0XSxlKSYmKG5bdF09ZSwhMCl9ZnVuY3Rpb24gZWYobix0LGUsaSl7bGV0IHI9c3Mobix0LGUpO3JldHVybiBzcyhuLHQrMSxpKXx8cn1mdW5jdGlvbiBqRShuLHQsZSxpLHIpe2xldCBvPWVmKG4sdCxlLGkpO3JldHVybiBzcyhuLHQrMixyKXx8b31mdW5jdGlvbiBsbChuLHQsZSxpLHIsbyl7bGV0IHM9ZWYobix0LGUsaSk7cmV0dXJuIGVmKG4sdCsyLHIsbyl8fHN9ZnVuY3Rpb24gemUobix0LGUsaSl7bGV0IHI9WmUoKTtyZXR1cm4gc3MocixVZygpLHQpJiYoRGkoKSxRYyhxcigpLHIsbix0LGUsaSkpLHplfWZ1bmN0aW9uIFlnKG4sdCl7bGV0IGU9ITEsaT0kdSgpO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MillPXNzKG4saSsrLHRbb10pfHxlO2lmKEVHKGkpLCFlKXJldHVybiBHbjtsZXQgcj10WzBdO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MilyKz1xbih0W29dKSt0W28rMV07cmV0dXJuIHJ9ZnVuY3Rpb24gWGcobix0LGUsaSl7cmV0dXJuIHNzKG4sVWcoKSxlKT90K3FuKGUpK2k6R259ZnVuY3Rpb24gUWcobix0LGUsaSxyLG8pe2xldCBhPWVmKG4sJHUoKSxlLHIpO3JldHVybiBlZCgyKSxhP3QrcW4oZSkraStxbihyKStvOkdufWZ1bmN0aW9uIEtnKG4sdCxlLGkscixvLHMsYSl7bGV0IGM9akUobiwkdSgpLGUscixzKTtyZXR1cm4gZWQoMyksYz90K3FuKGUpK2krcW4ocikrbytxbihzKSthOkdufWZ1bmN0aW9uIFpnKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPWxsKG4sJHUoKSxlLHIscyxsKTtyZXR1cm4gZWQoNCksZD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2M6R259ZnVuY3Rpb24gSmcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQpe2xldCBwPSR1KCksaD1sbChuLHAsZSxyLHMsbCk7cmV0dXJuIGg9c3MobixwKzQsdSl8fGgsZWQoNSksaD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZDpHbn1mdW5jdGlvbiAkZyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe2xldCBmPSR1KCksbT1sbChuLGYsZSxyLHMsbCk7cmV0dXJuIG09ZWYobixmKzQsdSxwKXx8bSxlZCg2KSxtP3QrcW4oZSkraStxbihyKStvK3FuKHMpK2ErcW4obCkrYytxbih1KStkK3FuKHApK2g6R259ZnVuY3Rpb24gZTAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9JHUoKSxfPWxsKG4sQyxlLHIscyxsKTtyZXR1cm4gXz1qRShuLEMrNCx1LHAsZil8fF8sZWQoNyksXz90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK206R259ZnVuY3Rpb24gdDAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pe2xldCB5PSR1KCksST1sbChuLHksZSxyLHMsbCk7cmV0dXJuIEk9bGwobix5KzQsdSxwLGYsQyl8fEksZWQoOCksST90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK20rcW4oQykrXzpHbn1mdW5jdGlvbiBFKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9WmUoKSxjPURpKCksdT1uKzIyLGQ9Yy5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQuY29uc3RzLHU9V2codCxuLDQsc3x8bnVsbCxlcChjLGEpKTtjTih0LGUsdSxlcChjLGwpKSxQRSh0LHUpO2xldCBkPXUudFZpZXdzPWxOKDIsdSxpLHIsbyx0LmRpcmVjdGl2ZVJlZ2lzdHJ5LHQucGlwZVJlZ2lzdHJ5LG51bGwsdC5zY2hlbWFzLGMpO3JldHVybiBudWxsIT09dC5xdWVyaWVzJiYodC5xdWVyaWVzLnRlbXBsYXRlKHQsdSksZC5xdWVyaWVzPXQucXVlcmllcy5lbWJlZGRlZFRWaWV3KHUpKSx1fSh1LGMsbCx0LGUsaSxyLG8scyk6Yy5kYXRhW3VdO1djKGQsITEpO2xldCBwPWxbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO0xFKGMsbCxwLGQpLFljKHAsbCksSEUobCxsW3VdPWVXKHAsbCxwLGQpKSxBRShkKSYmc04oYyxsLGQpLG51bGwhPXMmJmFOKGwsZCxhKX1mdW5jdGlvbiBzdChuKXtyZXR1cm4gSGcoWW4ubEZyYW1lLmNvbnRleHRMVmlldywyMituKX1mdW5jdGlvbiBiKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCExKSxifWZ1bmN0aW9uIG9GKG4sdCxlLGkscil7bGV0IHM9cj8iY2xhc3MiOiJzdHlsZSI7ZE4obixlLHQuaW5wdXRzW3NdLHMsaSl9ZnVuY3Rpb24gZyhuLHQsZSxpKXtsZXQgcj1aZSgpLG89RGkoKSxzPTIyK24sYT1yWzExXSxsPXJbc109dE4oYSx0LFluLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlKSxjPW8uZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscixvLHMpe2xldCBhPXQuY29uc3RzLGM9V2codCxuLDIscixlcChhLG8pKTtyZXR1cm4gY04odCxlLGMsZXAoYSxzKSksbnVsbCE9PWMuYXR0cnMmJl9FKGMsYy5hdHRycywhMSksbnVsbCE9PWMubWVyZ2VkQXR0cnMmJl9FKGMsYy5tZXJnZWRBdHRycywhMCksbnVsbCE9PXQucXVlcmllcyYmdC5xdWVyaWVzLmVsZW1lbnRTdGFydCh0LGMpLGN9KHMsbyxyLDAsdCxlLGkpOm8uZGF0YVtzXTtXYyhjLCEwKTtsZXQgdT1jLm1lcmdlZEF0dHJzO251bGwhPT11JiZzRShhLGwsdSk7bGV0IGQ9Yy5jbGFzc2VzO251bGwhPT1kJiZpTihhLGwsZCk7bGV0IHA9Yy5zdHlsZXM7cmV0dXJuIG51bGwhPT1wJiZrNihhLGwscCksNjQhPSg2NCZjLmZsYWdzKSYmTEUobyxyLGwsYyksMD09PVluLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCYmWWMobCxyKSxZbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrKyxBRShjKSYmKHNOKG8scixjKSxHNihvLGMscikpLG51bGwhPT1pJiZhTihyLGMpLGd9ZnVuY3Rpb24gdigpe2xldCBuPU1vKCk7a0YoKT9GRigpOihuPW4ucGFyZW50LFdjKG4sITEpKTtsZXQgdD1uO1luLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tO2xldCBlPURpKCk7cmV0dXJuIGUuZmlyc3RDcmVhdGVQYXNzJiYoUEUoZSxuKSxQRihuKSYmZS5xdWVyaWVzLmVsZW1lbnRFbmQobikpLG51bGwhPXQuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbihuKXtyZXR1cm4gMCE9KDE2Jm4uZmxhZ3MpfSh0KSYmb0YoZSx0LFplKCksdC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPXQuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oMzImbi5mbGFncyl9KHQpJiZvRihlLHQsWmUoKSx0LnN0eWxlc1dpdGhvdXRIb3N0LCExKSx2fWZ1bmN0aW9uIE4obix0LGUsaSl7cmV0dXJuIGcobix0LGUsaSksdigpLE59ZnVuY3Rpb24gS3Qobix0LGUpe2xldCBpPVplKCkscj1EaSgpLG89bisyMixzPXIuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89dC5jb25zdHMscz1lcChvLGkpLGE9V2codCxuLDgsIm5nLWNvbnRhaW5lciIscyk7cmV0dXJuIG51bGwhPT1zJiZfRShhLHMsITApLGNOKHQsZSxhLGVwKG8scikpLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxhKSxhfShvLHIsaSx0LGUpOnIuZGF0YVtvXTtXYyhzLCEwKTtsZXQgYT1pW29dPWlbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiBMRShyLGksYSxzKSxZYyhhLGkpLEFFKHMpJiYoc04ocixpLHMpLEc2KHIscyxpKSksbnVsbCE9ZSYmYU4oaSxzKSxLdH1mdW5jdGlvbiBadCgpe2xldCBuPU1vKCksdD1EaSgpO3JldHVybiBrRigpP0ZGKCk6KG49bi5wYXJlbnQsV2MobiwhMSkpLHQuZmlyc3RDcmVhdGVQYXNzJiYoUEUodCxuKSxQRihuKSYmdC5xdWVyaWVzLmVsZW1lbnRFbmQobikpLFp0fWZ1bmN0aW9uIEFpKG4sdCxlKXtyZXR1cm4gS3Qobix0LGUpLFp0KCksQWl9ZnVuY3Rpb24gSWUoKXtyZXR1cm4gWmUoKX1mdW5jdGlvbiBuMChuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW59ZnVuY3Rpb24gaE4obil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zdWJzY3JpYmV9dmFyIGZOPWhOO2Z1bmN0aW9uIFAobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1NbygpO3JldHVybiBfVyhvLHIsclsxMV0scyxuLHQsMCxpKSxQfWZ1bmN0aW9uIGkwKG4sdCl7bGV0IGU9TW8oKSxpPVplKCkscj1EaSgpO3JldHVybiBfVyhyLGksb1coTkYoci5kYXRhKSxlLGkpLGUsbix0KSxpMH1mdW5jdGlvbiBfVyhuLHQsZSxpLHIsbyxzLGEpe2xldCBsPUFFKGkpLHU9bi5maXJzdENyZWF0ZVBhc3MmJnJXKG4pLHA9aVcodCksaD0hMDtpZigzJmkudHlwZXx8YSl7bGV0IEM9dWwoaSx0KSxfPWE/YShDKTpDLHk9cC5sZW5ndGgsST1hP089PmEoTWEoT1tpLmluZGV4XSkpOmkuaW5kZXgsQT1udWxsO2lmKCFhJiZsJiYoQT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmNsZWFudXA7aWYobnVsbCE9cilmb3IobGV0IG89MDtvPHIubGVuZ3RoLTE7bys9Mil7bGV0IHM9cltvXTtpZihzPT09ZSYmcltvKzFdPT09aSl7bGV0IGE9dFs3XSxsPXJbbysyXTtyZXR1cm4gYS5sZW5ndGg+bD9hW2xdOm51bGx9InN0cmluZyI9PXR5cGVvZiBzJiYobys9Mil9cmV0dXJuIG51bGx9KG4sdCxyLGkuaW5kZXgpKSxudWxsIT09QSkoQS5fX25nTGFzdExpc3RlbmVyRm5fX3x8QSkuX19uZ05leHRMaXN0ZW5lckZuX189byxBLl9fbmdMYXN0TGlzdGVuZXJGbl9fPW8saD0hMTtlbHNle289emooaSx0LDAsbywhMSk7bGV0IE89ZS5saXN0ZW4oXyxyLG8pO3AucHVzaChvLE8pLHUmJnUucHVzaChyLEkseSx5KzEpfX1lbHNlIG89emooaSx0LDAsbywhMSk7bGV0IG0sZj1pLm91dHB1dHM7aWYoaCYmbnVsbCE9PWYmJihtPWZbcl0pKXtsZXQgQz1tLmxlbmd0aDtpZihDKWZvcihsZXQgXz0wO188QztfKz0yKXtsZXQgZWU9dFttW19dXVttW18rMV1dLnN1YnNjcmliZShvKSxYPXAubGVuZ3RoO3AucHVzaChvLGVlKSx1JiZ1LnB1c2gocixpLmluZGV4LFgsLShYKzEpKX19fWZ1bmN0aW9uIFVqKG4sdCxlLGkpe3RyeXtyZXR1cm4hMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIHNXKG4sciksITF9fWZ1bmN0aW9uIHpqKG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3RXKDImbi5mbGFncz9vcChuLmluZGV4LHQpOnQpO2xldCBsPVVqKHQsMCxpLHMpLGM9by5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9VWoodCwwLGMscykmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiByJiYhMT09PWwmJihzLnByZXZlbnREZWZhdWx0KCkscy5yZXR1cm5WYWx1ZT0hMSksbH19ZnVuY3Rpb24gTShuPTEpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4oWW4ubEZyYW1lLmNvbnRleHRMVmlldz1mdW5jdGlvbihuLHQpe2Zvcig7bj4wOyl0PXRbMTVdLG4tLTtyZXR1cm4gdH0obixZbi5sRnJhbWUuY29udGV4dExWaWV3KSlbOF19KG4pfWZ1bmN0aW9uIGxtZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT9CNihuLG8sITApOmRmZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIHdpKG4pe2xldCB0PVplKClbMTZdWzZdO2lmKCF0LnByb2plY3Rpb24pe2xldCBpPXQucHJvamVjdGlvbj1KeShuP24ubGVuZ3RoOjEsbnVsbCkscj1pLnNsaWNlKCksbz10LmNoaWxkO2Zvcig7bnVsbCE9PW87KXtsZXQgcz1uP2xtZShvLG4pOjA7bnVsbCE9PXMmJihyW3NdP3Jbc10ucHJvamVjdGlvbk5leHQ9bzppW3NdPW8scltzXT1vKSxvPW8ubmV4dH19fWZ1bmN0aW9uIE5uKG4sdD0wLGUpe2xldCBpPVplKCkscj1EaSgpLG89V2cociwyMituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PW8ucHJvamVjdGlvbiYmKG8ucHJvamVjdGlvbj10KSxGRigpLDY0IT0oNjQmby5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtPNih0WzExXSwwLHQsZSxNNihuLGUsdCksVDYoZS5wYXJlbnR8fHRbNl0sZSx0KSl9KHIsaSxvKX1mdW5jdGlvbiB4cihuLHQsZSl7cmV0dXJuIFBiKG4sIiIsdCwiIixlKSx4cn1mdW5jdGlvbiBQYihuLHQsZSxpLHIpe2xldCBvPVplKCkscz1YZyhvLHQsZSxpKTtyZXR1cm4gcyE9PUduJiZEYShEaSgpLHFyKCksbyxuLHMsb1sxMV0sciwhMSksUGJ9ZnVuY3Rpb24gR0Uobix0LGUsaSxyLG8scyl7bGV0IGE9WmUoKSxsPVFnKGEsdCxlLGkscixvKTtyZXR1cm4gbCE9PUduJiZEYShEaSgpLHFyKCksYSxuLGwsYVsxMV0scywhMSksR0V9ZnVuY3Rpb24gamoobix0LGUsaSxyKXtsZXQgbz1uW2UrMV0scz1udWxsPT09dCxhPWk/Smgobyk6RmcobyksbD0hMTtmb3IoOzAhPT1hJiYoITE9PT1sfHxzKTspe2xldCB1PW5bYSsxXTtkbWUoblthXSx0KSYmKGw9ITAsblthKzFdPWk/JGsodSk6SmsodSkpLGE9aT9KaCh1KTpGZyh1KX1sJiYobltlKzFdPWk/Smsobyk6JGsobykpfWZ1bmN0aW9uIGRtZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJk1iKG4sdCk+PTB9dmFyIHdvPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBTVyhuKXtyZXR1cm4gbi5zdWJzdHJpbmcod28ua2V5LHdvLmtleUVuZCl9ZnVuY3Rpb24gcG1lKG4pe3JldHVybiBuLnN1YnN0cmluZyh3by52YWx1ZSx3by52YWx1ZUVuZCl9ZnVuY3Rpb24gRVcobix0KXtsZXQgZT13by50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD13by5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk+MzI7KXQrKztyZXR1cm4gdH0obix3by5rZXk9dCxlKSxOZyhuLHQsZSkpfWZ1bmN0aW9uIFRXKG4sdCl7bGV0IGU9d28udGV4dEVuZCxpPXdvLmtleT1OZyhuLHQsZSk7cmV0dXJuIGU9PT1pPy0xOihpPXdvLmtleUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk7Zm9yKDt0PGUmJig0NT09PShpPW4uY2hhckNvZGVBdCh0KSl8fDk1PT09aXx8KC0zMyZpKT49NjUmJigtMzMmaSk8PTkwfHxpPj00OCYmaTw9NTcpOyl0Kys7cmV0dXJuIHR9KG4saSxlKSxpPUdqKG4saSxlKSxpPXdvLnZhbHVlPU5nKG4saSxlKSxpPXdvLnZhbHVlRW5kPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0tMSxyPS0xLG89LTEscz10LGE9cztmb3IoO3M8ZTspe2xldCBsPW4uY2hhckNvZGVBdChzKyspO2lmKDU5PT09bClyZXR1cm4gYTszND09PWx8fDM5PT09bD9hPXM9V2oobixsLHMsZSk6dD09PXMtNCYmODU9PT1vJiY4Mj09PXImJjc2PT09aSYmNDA9PT1sP2E9cz1XaihuLDQxLHMsZSk6bD4zMiYmKGE9cyksbz1yLHI9aSxpPS0zMyZsfXJldHVybiBhfShuLGksZSksR2oobixpLGUpKX1mdW5jdGlvbiBEVyhuKXt3by5rZXk9MCx3by5rZXlFbmQ9MCx3by52YWx1ZT0wLHdvLnZhbHVlRW5kPTAsd28udGV4dEVuZD1uLmxlbmd0aH1mdW5jdGlvbiBOZyhuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBHaihuLHQsZSxpKXtyZXR1cm4odD1OZyhuLHQsZSkpPGUmJnQrKyx0fWZ1bmN0aW9uIFdqKG4sdCxlLGkpe2xldCByPS0xLG89ZTtmb3IoO288aTspe2xldCBzPW4uY2hhckNvZGVBdChvKyspO2lmKHM9PXQmJjkyIT09cilyZXR1cm4gbztyPTkyPT1zJiY5Mj09PXI/MDpzfXRocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBPdChuLHQsZSl7cmV0dXJuICRsKG4sdCxlLCExKSxPdH1mdW5jdGlvbiBhdChuLHQpe3JldHVybiAkbChuLHQsbnVsbCwhMCksYXR9ZnVuY3Rpb24gcGwobil7ZWMoUFcsdm1lLG4sITEpfWZ1bmN0aW9uIHZtZShuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gRFcobiksVFcobixOZyhuLDAsd28udGV4dEVuZCkpfSh0KTtlPj0wO2U9VFcodCxlKSlQVyhuLFNXKHQpLHBtZSh0KSl9ZnVuY3Rpb24gZWEobil7ZWMoRWEsWmMsbiwhMCl9ZnVuY3Rpb24gWmMobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIERXKG4pLEVXKG4sTmcobiwwLHdvLnRleHRFbmQpKX0odCk7ZT49MDtlPUVXKHQsZSkpRWEobixTVyh0KSwhMCl9ZnVuY3Rpb24gJGwobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1lZCgyKTtvLmZpcnN0VXBkYXRlUGFzcyYmSVcobyxuLHMsaSksdCE9PUduJiZzcyhyLHMsdCkmJlJXKG8sby5kYXRhW1RzKCldLHIsclsxMV0sbixyW3MrMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49Y28oJHMobikpKSksbn0odCxlKSxpLHMpfWZ1bmN0aW9uIGVjKG4sdCxlLGkpe2xldCByPURpKCksbz1lZCgyKTtyLmZpcnN0VXBkYXRlUGFzcyYmSVcocixudWxsLG8saSk7bGV0IHM9WmUoKTtpZihlIT09R24mJnNzKHMsbyxlKSl7bGV0IGE9ci5kYXRhW1RzKCldO2lmKE9XKGEsaSkmJiFBVyhyLG8pKXtsZXQgbD1pP2EuY2xhc3Nlc1dpdGhvdXRIb3N0OmEuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PWwmJihlPWJrKGwsZXx8IiIpKSxvRihyLGEscyxlLGkpfWVsc2UhZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtyPT09R24mJihyPVdpKTtsZXQgbD0wLGM9MCx1PTA8ci5sZW5ndGg/clswXTpudWxsLGQ9MDxvLmxlbmd0aD9vWzBdOm51bGw7Zm9yKDtudWxsIT09dXx8bnVsbCE9PWQ7KXtsZXQgbSxwPWw8ci5sZW5ndGg/cltsKzFdOnZvaWQgMCxoPWM8by5sZW5ndGg/b1tjKzFdOnZvaWQgMCxmPW51bGw7dT09PWQ/KGwrPTIsYys9MixwIT09aCYmKGY9ZCxtPWgpKTpudWxsPT09ZHx8bnVsbCE9PXUmJnU8ZD8obCs9MixmPXUpOihjKz0yLGY9ZCxtPWgpLG51bGwhPT1mJiZSVyhuLHQsZSxpLGYsbSxzLGEpLHU9bDxyLmxlbmd0aD9yW2xdOm51bGwsZD1jPG8ubGVuZ3RoP29bY106bnVsbH19KHIsYSxzLHNbMTFdLHNbbysxXSxzW28rMV09ZnVuY3Rpb24obix0LGUpe2lmKG51bGw9PWV8fCIiPT09ZSlyZXR1cm4gV2k7bGV0IGk9W10scj0kcyhlKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKW4oaSxyW29dLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Ygcilmb3IobGV0IG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZuKGksbyxyW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiByJiZ0KGkscik7cmV0dXJuIGl9KG4sdCxlKSxpLG8pfX1mdW5jdGlvbiBBVyhuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIElXKG4sdCxlLGkpe2xldCByPW4uZGF0YTtpZihudWxsPT09cltlKzFdKXtsZXQgbz1yW1RzKCldLHM9QVcobixlKTtPVyhvLGkpJiZudWxsPT09dCYmIXMmJih0PSExKSx0PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPU5GKG4pLG89aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1yKTA9PT0oaT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKSYmKGU9ZmIoZT11ayhudWxsLG4sdCxlLGkpLHQuYXR0cnMsaSksbz1udWxsKTtlbHNle2xldCBzPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT1zfHxuW3NdIT09cilpZihlPXVrKHIsbix0LGUsaSksbnVsbD09PW8pe2xldCBsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3M7aWYoMCE9PUZnKGkpKXJldHVybiBuW0poKGkpXX0obix0LGkpO3ZvaWQgMCE9PWwmJkFycmF5LmlzQXJyYXkobCkmJihsPXVrKG51bGwsbix0LGxbMV0saSksbD1mYihsLHQuYXR0cnMsaSksZnVuY3Rpb24obix0LGUsaSl7bltKaChlP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpXT1pfShuLHQsaSxsKSl9ZWxzZSBvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaSxyPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbz0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7bzxyO28rKylpPWZiKGksbltvXS5ob3N0QXR0cnMsZSk7cmV0dXJuIGZiKGksdC5hdHRycyxlKX0obix0LGkpfXJldHVybiB2b2lkIDAhPT1vJiYoaT90LnJlc2lkdWFsQ2xhc3Nlcz1vOnQucmVzaWR1YWxTdHlsZXM9byksZX0ocixvLHQsaSksZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW8/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxhPUpoKHMpLGw9Rmcocyk7bltpXT1lO2xldCB1LGM9ITE7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IGQ9ZTt1PWRbMV0sKG51bGw9PT11fHxNYihkLHUpPjApJiYoYz0hMCl9ZWxzZSB1PWU7aWYocilpZigwIT09bCl7bGV0IHA9SmgoblthKzFdKTtuW2krMV09R1MocCxhKSwwIT09cCYmKG5bcCsxXT1sayhuW3ArMV0saSkpLG5bYSsxXT1mdW5jdGlvbihuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30oblthKzFdLGkpfWVsc2UgbltpKzFdPUdTKGEsMCksMCE9PWEmJihuW2ErMV09bGsoblthKzFdLGkpKSxhPWk7ZWxzZSBuW2krMV09R1MobCwwKSwwPT09YT9hPWk6bltsKzFdPWxrKG5bbCsxXSxpKSxsPWk7YyYmKG5baSsxXT1KayhuW2krMV0pKSxqaihuLHUsaSwhMCksamoobix1LGksITEpLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89cj9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgdCYmTWIobyx0KT49MCYmKGVbaSsxXT0kayhlW2krMV0pKX0odCx1LG4saSxvKSxzPUdTKGEsbCksbz90LmNsYXNzQmluZGluZ3M9czp0LnN0eWxlQmluZGluZ3M9c30ocixvLHQsZSxzLGkpfX1mdW5jdGlvbiB1ayhuLHQsZSxpLHIpe2xldCBvPW51bGwscz1lLmRpcmVjdGl2ZUVuZCxhPWUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09YT9hPWUuZGlyZWN0aXZlU3RhcnQ6YSsrO2E8cyYmKG89dFthXSxpPWZiKGksby5ob3N0QXR0cnMsciksbyE9PW4pOylhKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1hKSxpfWZ1bmN0aW9uIGZiKG4sdCxlKXtsZXQgaT1lPzE6MixyPS0xO2lmKG51bGwhPT10KWZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyJudW1iZXIiPT10eXBlb2Ygcz9yPXM6cj09PWkmJihBcnJheS5pc0FycmF5KG4pfHwobj12b2lkIDA9PT1uP1tdOlsiIixuXSksRWEobixzLCEhZXx8dFsrK29dKSl9cmV0dXJuIHZvaWQgMD09PW4/bnVsbDpufWZ1bmN0aW9uIFBXKG4sdCxlKXtFYShuLHQsJHMoZSkpfWZ1bmN0aW9uIFJXKG4sdCxlLGkscixvLHMsYSl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2xldCBsPW4uZGF0YSxjPWxbYSsxXSx1PWZ1bmN0aW9uKG4pe3JldHVybiAxPT0oMSZuKX0oYyk/cWoobCx0LGUscixGZyhjKSxzKTp2b2lkIDA7eUUodSl8fCh5RShvKXx8ZnVuY3Rpb24obil7cmV0dXJuIDI9PSgyJm4pfShjKSYmKG89cWoobCxudWxsLGUscixhLHMpKSxmdW5jdGlvbihuLHQsZSxpLHIpe2lmKHQpcj9uLmFkZENsYXNzKGUsaSk6bi5yZW1vdmVDbGFzcyhlLGkpO2Vsc2V7bGV0IG89LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6YWwuRGFzaENhc2U7bnVsbD09cj9uLnJlbW92ZVN0eWxlKGUsaSxvKTooInN0cmluZyI9PXR5cGVvZiByJiZyLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihyPXIuc2xpY2UoMCwtMTApLG98PWFsLkltcG9ydGFudCksbi5zZXRTdHlsZShlLGkscixvKSl9fShpLHMsSUUoVHMoKSxlKSxyLG8pKX1mdW5jdGlvbiBxaihuLHQsZSxpLHIsbyl7bGV0IGEscz1udWxsPT09dDtmb3IoO3I+MDspe2xldCBsPW5bcl0sYz1BcnJheS5pc0FycmF5KGwpLHU9Yz9sWzFdOmwsZD1udWxsPT09dSxwPWVbcisxXTtwPT09R24mJihwPWQ/V2k6dm9pZCAwKTtsZXQgaD1kP25rKHAsaSk6dT09PWk/cDp2b2lkIDA7aWYoYyYmIXlFKGgpJiYoaD1uayhsLGkpKSx5RShoKSYmKGE9aCxzKSlyZXR1cm4gYTtsZXQgZj1uW3IrMV07cj1zP0poKGYpOkZnKGYpfWlmKG51bGwhPT10KXtsZXQgbD1vP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9bCYmKGE9bmsobCxpKSl9cmV0dXJuIGF9ZnVuY3Rpb24geUUobil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gT1cobix0KXtyZXR1cm4gMCE9KG4uZmxhZ3MmKHQ/MTY6MzIpKX1mdW5jdGlvbiBEKG4sdD0iIil7bGV0IGU9WmUoKSxpPURpKCkscj1uKzIyLG89aS5maXJzdENyZWF0ZVBhc3M/V2coaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPWVOKGVbMTFdLHQpO0xFKGksZSxzLG8pLFdjKG8sITEpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBxZSgiIixuLCIiKSx5dH1mdW5jdGlvbiBxZShuLHQsZSl7bGV0IGk9WmUoKSxyPVhnKGksbix0LGUpO3JldHVybiByIT09R24mJm5kKGksVHMoKSxyKSxxZX1mdW5jdGlvbiBhcChuLHQsZSxpLHIpe2xldCBvPVplKCkscz1RZyhvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1HbiYmbmQobyxUcygpLHMpLGFwfWZ1bmN0aW9uIFdFKG4sdCxlLGkscixvLHMpe2xldCBhPVplKCksbD1LZyhhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09R24mJm5kKGEsVHMoKSxsKSxXRX1mdW5jdGlvbiBSYihuLHQsZSl7ZWMoRWEsWmMsWGcoWmUoKSxuLHQsZSksITApfWZ1bmN0aW9uIEFhKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCEwKSxBYX1mdW5jdGlvbiByMChuLHQsZSl7bGV0IGk9WmUoKTtpZihzcyhpLFVnKCksdCkpe2xldCBvPURpKCkscz1xcigpO0RhKG8scyxpLG4sdCxvVyhORihvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIHIwfXZhciBqaD12b2lkIDAsR21lPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0samhdLFtbIkFNIiwiUE0iXSxqaCxqaF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0samgsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGpoLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsamgsInsxfSAnYXQnIHswfSIsamhdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0sZGs9e307ZnVuY3Rpb24gdGEobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1Zaih0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPVlqKGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIEdtZTt0aHJvdyBuZXcgTXQoNzAxLCExKX1mdW5jdGlvbiBZaihuKXtyZXR1cm4gbiBpbiBka3x8KGRrW25dPVdyLm5nJiZXci5uZy5jb21tb24mJldyLm5nLmNvbW1vbi5sb2NhbGVzJiZXci5uZy5jb21tb24ubG9jYWxlc1tuXSksZGtbbl19dmFyIGJyPSgoKT0+e3JldHVybihuPWJyfHwoYnI9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixicjt2YXIgbn0pKCkscW1lPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgYkU9ImVuLVVTIixLVz17bWFya2VyOiJlbGVtZW50In0sWlc9e21hcmtlcjoiSUNVIn0scWw9KCgpPT57cmV0dXJuKG49cWx8fChxbD17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIscWw7dmFyIG59KSgpLEpXPWJFO2Z1bmN0aW9uICRXKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP0Q2KG4sMCxlKTpNYShlW3JdKX1mdW5jdGlvbiBlNyhuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmMD09KDImdC5mbGFncykpZm9yKGxldCBsPTE7bDxvLmxlbmd0aDtsKyspWmgobixzLGVbb1tsXV0sYSwhMSl9fWZ1bmN0aW9uIHQ3KG4sdCl7aWYobi5wdXNoKHQpLG4ubGVuZ3RoPjEpZm9yKGxldCBlPW4ubGVuZ3RoLTI7ZT49MDtlLS0pe2xldCBpPW5bZV07bjcoaSl8fFptZShpLHQpJiZudWxsPT09Sm1lKGkpJiYkbWUoaSx0LmluZGV4KX19ZnVuY3Rpb24gbjcobil7cmV0dXJuISg2NCZuLnR5cGUpfWZ1bmN0aW9uIFptZShuLHQpe3JldHVybiBuNyh0KXx8bi5pbmRleD50LmluZGV4fWZ1bmN0aW9uIEptZShuKXtsZXQgdD1uLmluc2VydEJlZm9yZUluZGV4O3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMF06dH1mdW5jdGlvbiAkbWUobix0KXtsZXQgZT1uLmluc2VydEJlZm9yZUluZGV4O0FycmF5LmlzQXJyYXkoZSk/ZVswXT10OihJNigkVyxlNyksbi5pbnNlcnRCZWZvcmVJbmRleD10KX1mdW5jdGlvbiB0YihuLHQpe2xldCBlPW4uZGF0YVt0XTtyZXR1cm4gbnVsbD09PWV8fCJzdHJpbmciPT10eXBlb2YgZT9udWxsOmUuaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP2U6ZS52YWx1ZX1mdW5jdGlvbiBuZ2Uobix0LGUpe2xldCBpPXJOKG4sZSw2NCxudWxsLG51bGwpO3JldHVybiB0Nyh0LGkpLGl9ZnVuY3Rpb24gcUUobix0KXtsZXQgZT10W24uY3VycmVudENhc2VMVmlld0luZGV4XTtyZXR1cm4gbnVsbD09PWU/ZTplPDA/fmU6ZX1mdW5jdGlvbiBpZ2Uobil7cmV0dXJuIG4+Pj4xN31mdW5jdGlvbiByZ2Uobil7cmV0dXJuKDEzMTA3MCZuKT4+PjF9dmFyIG1iPTAsbmI9MDtmdW5jdGlvbiBpNyhuLHQsZSxpKXtsZXQgcyxyPWVbMTFdLG89bnVsbDtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2xldCBjPXRbKythXTtudWxsPT09ZVtjXSYmKGVbY109ZU4ocixsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmxldCB1LGQsYz1pZ2UobCk7aWYobnVsbD09PW8mJihvPWMscz1ORShyLGkpKSxjPT09bz8odT1pLGQ9cyk6KHU9bnVsbCxkPU1hKGVbY10pKSxudWxsIT09ZCl7bGV0IG09cmdlKGwpO1poKHIsZCxlW21dLHUsITEpO2xldCBfPXRiKG4sbSk7aWYobnVsbCE9PV8mJiJvYmplY3QiPT10eXBlb2YgXyl7bGV0IHk9cUUoXyxlKTtudWxsIT09eSYmaTcobixfLmNyZWF0ZVt5XSxlLGVbXy5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmxldCBoPXRbKythXSxmPXRbKythXTt1TihyLElFKGw+Pj4xLGUpLG51bGwsbnVsbCxoLGYsbnVsbCl9ZWxzZSBzd2l0Y2gobCl7Y2FzZSBaVzpsZXQgYz10WysrYV0sdT10WysrYV07bnVsbD09PWVbdV0mJlljKGVbdV09R2hlKHIsYyksZSk7YnJlYWs7Y2FzZSBLVzpsZXQgZD10WysrYV0scD10WysrYV07bnVsbD09PWVbcF0mJlljKGVbcF09dE4ocixkLG51bGwpLGUpfX19ZnVuY3Rpb24gcjcobix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXSxhPWVbKytvXTtpZihzJnIpe2xldCBsPSIiO2ZvcihsZXQgYz1vKzE7Yzw9bythO2MrKyl7bGV0IHU9ZVtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbCs9dTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdSlpZih1PDApbCs9cW4odFtpLXVdKTtlbHNle2xldCBkPXU+Pj4yO3N3aXRjaCgzJnUpe2Nhc2UgMTpsZXQgcD1lWysrY10saD1lWysrY10sZj1uLmRhdGFbZF07InN0cmluZyI9PXR5cGVvZiBmP3VOKHRbMTFdLHRbZF0sbnVsbCxmLHAsbCxoKTpEYShuLGYsdCxwLGwsdFsxMV0saCwhMSk7YnJlYWs7Y2FzZSAwOmxldCBtPXRbZF07bnVsbCE9PW0mJng2KHRbMTFdLG0sbCk7YnJlYWs7Y2FzZSAyOmNnZShuLHRiKG4sZCksdCxsKTticmVhaztjYXNlIDM6WGoobix0YihuLGQpLGksdCl9fX19ZWxzZXtsZXQgbD1lW28rMV07aWYobD4wJiYzPT0oMyZsKSl7bGV0IHU9dGIobixsPj4+Mik7dFt1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF08MCYmWGoobix1LGksdCl9fW8rPWF9fWZ1bmN0aW9uIFhqKG4sdCxlLGkpe2xldCByPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO2lmKG51bGwhPT1yKXtsZXQgbz1tYjtyPDAmJihyPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPX5yLG89LTEpLHI3KG4saSx0LnVwZGF0ZVtyXSxlLG8pfX1mdW5jdGlvbiBjZ2Uobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1uLmNhc2VzLmluZGV4T2YodCk7aWYoLTE9PT1lKXN3aXRjaChuLnR5cGUpe2Nhc2UgMTp7bGV0IGk9ZnVuY3Rpb24obix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gdGEobilbYnIuUGx1cmFsQ2FzZV19KHQpKHBhcnNlSW50KG4sMTApKSxpPXFtZVtlXTtyZXR1cm4gdm9pZCAwIT09aT9pOiJvdGhlciJ9KHQsSlcpO2U9bi5jYXNlcy5pbmRleE9mKGkpLC0xPT09ZSYmIm90aGVyIiE9PWkmJihlPW4uY2FzZXMuaW5kZXhPZigib3RoZXIiKSk7YnJlYWt9Y2FzZSAwOmU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpfXJldHVybi0xPT09ZT9udWxsOmV9KHQsaSk7aWYocUUodCxlKSE9PXImJihvNyhuLHQsZSksZVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09bnVsbD09PXI/bnVsbDp+cixudWxsIT09cikpe2xldCBzPWVbdC5hbmNob3JJZHhdO3MmJmk3KG4sdC5jcmVhdGVbcl0sZSxzKX19ZnVuY3Rpb24gbzcobix0LGUpe2xldCBpPXFFKHQsZSk7aWYobnVsbCE9PWkpe2xldCByPXQucmVtb3ZlW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHM+MCl7bGV0IGE9SUUocyxlKTtudWxsIT09YSYmUjYoZVsxMV0sYSl9ZWxzZSBvNyhuLHRiKG4sfnMpLGUpfX19ZnVuY3Rpb24gZGdlKCl7bGV0IGUsaSxuPVtdLHQ9LTE7ZnVuY3Rpb24gbyhhLGwpe3Q9MDtsZXQgYz1xRShhLGwpO2k9bnVsbCE9PWM/YS5yZW1vdmVbY106V2l9ZnVuY3Rpb24gcygpe2lmKHQ8aS5sZW5ndGgpe2xldCBhPWlbdCsrXTtyZXR1cm4gYT4wP2VbYV06KG4ucHVzaCh0LGkpLG8oZVsxXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgeEU9L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2kscGdlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSxoZ2U9L1x1ZmZmZChcZCspXHVmZmZkLyxzNz0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sZmdlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxtZ2U9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLGdnZT0vXHVFNTAwL2c7ZnVuY3Rpb24gYTcobix0LGUsaSxyLG8scyl7bGV0IGE9cWcobixpLDEsbnVsbCksbD1hPDxxbC5TSElGVCxjPWxiKCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9cWwuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1xbC5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PVlrJiYoWWs9bigpKX0oZGdlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IHU9ck4obixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO3Q3KGUsdSk7bGV0IGQ9dS5pbmRleDtyZXR1cm4gV2ModSwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KEk2KCRXLGU3KSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmY0coIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLGQpLHV9ZnVuY3Rpb24geWdlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goeEUpLGw9YTcobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZyYihyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gcmIobix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoeEUpLHU9MDtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXTtpZigxJmQpe2xldCBoPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWgpLHV8PWw3KGgpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT11LG5bYV09bi5sZW5ndGgtbCx1fWZ1bmN0aW9uIHhnZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24gbDcobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIFFqKG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD1mZ2UuZXhlYyhuKSk7KXI/dFswXT09PWBcdWZmZmQvKiR7b31cdWZmZmRgJiYoaT10LmluZGV4LHI9ITEpOihlKz1uLnN1YnN0cmluZyhpLHQuaW5kZXgrdFswXS5sZW5ndGgpLG89dFsxXSxyPSEwKTtyZXR1cm4gZSs9bi5zbGljZShpKSxlfWZ1bmN0aW9uIGM3KG4sdCxlLGkscixvKXtsZXQgcz0wLGE9e3R5cGU6ci50eXBlLGN1cnJlbnRDYXNlTFZpZXdJbmRleDpxZyhuLHQsMSxudWxsKSxhbmNob3JJZHg6byxjYXNlczpbXSxjcmVhdGU6W10scmVtb3ZlOltdLHVwZGF0ZTpbXX07KGZ1bmN0aW9uKG4sdCxlKXtuLnB1c2gobDcodC5tYWluQmluZGluZyksMiwtMS10Lm1haW5CaW5kaW5nLGU8PDJ8Mil9KShlLHIsbyksZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGF0YVt0XTtudWxsPT09aT9uLmRhdGFbdF09ZTppLnZhbHVlPWV9KG4sbyxhKTtsZXQgbD1yLnZhbHVlcztmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXSxkPVtdO2ZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXtsZXQgaD11W3BdO2lmKCJzdHJpbmciIT10eXBlb2YgaCl7bGV0IGY9ZC5wdXNoKGgpLTE7dVtwXT1gXHgzYyEtLVx1ZmZmZCR7Zn1cdWZmZmQtLVx4M2VgfX1zPVNnZShuLGEsdCxlLGksci5jYXNlc1tjXSx1LmpvaW4oIiIpLGQpfHN9cyYmZnVuY3Rpb24obix0LGUpe24ucHVzaCh0LDEsZTw8MnwzKX0oZSxzLG8pfWZ1bmN0aW9uIE1nZShuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTAsbz1zRihuPW4ucmVwbGFjZShzNyxmdW5jdGlvbihzLGEsbCl7cmV0dXJuIGk9InNlbGVjdCI9PT1sPzA6MSxyPXBhcnNlSW50KGEuc2xpY2UoMSksMTApLCIifSkpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7KXtsZXQgYT1vW3MrK10udHJpbSgpOzE9PT1pJiYoYT1hLnJlcGxhY2UoL1xzKig/Oj0pPyhcdyspXHMqLywiJDEiKSksYS5sZW5ndGgmJnQucHVzaChhKTtsZXQgbD1zRihvW3MrK10pO3QubGVuZ3RoPmUubGVuZ3RoJiZlLnB1c2gobCl9cmV0dXJue3R5cGU6aSxtYWluQmluZGluZzpyLGNhc2VzOnQsdmFsdWVzOmV9fWZ1bmN0aW9uIHNGKG4pe2lmKCFuKXJldHVybltdO2xldCBvLHQ9MCxlPVtdLGk9W10scj0vW3t9XS9nO2ZvcihyLmxhc3RJbmRleD0wO289ci5leGVjKG4pOyl7bGV0IGE9by5pbmRleDtpZigifSI9PW9bMF0pe2lmKGUucG9wKCksMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7czcudGVzdChsKT9pLnB1c2goTWdlKGwpKTppLnB1c2gobCksdD1hKzF9fWVsc2V7aWYoMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7aS5wdXNoKGwpLHQ9YSsxfWUucHVzaCgieyIpfX1sZXQgcz1uLnN1YnN0cmluZyh0KTtyZXR1cm4gaS5wdXNoKHMpLGl9ZnVuY3Rpb24gU2dlKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz1bXSx1PVtdO3QuY2FzZXMucHVzaChvKSx0LmNyZWF0ZS5wdXNoKGwpLHQucmVtb3ZlLnB1c2goYyksdC51cGRhdGUucHVzaCh1KTtsZXQgcD1zNigkRygpKS5nZXRJbmVydEJvZHlFbGVtZW50KHMpLGg9VWsocCl8fHA7cmV0dXJuIGg/dTcobix0LGUsaSxsLGMsdSxoLHIsYSwwKTowfWZ1bmN0aW9uIHU3KG4sdCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9MCxwPWEuZmlyc3RDaGlsZDtmb3IoO3A7KXtsZXQgaD1xZyhuLGUsMSxudWxsKTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpsZXQgZj1wLG09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoVmsuaGFzT3duUHJvcGVydHkobSkpe3BrKHIsS1csbSxsLGgpLG4uZGF0YVtoXT1tO2xldCBJPWYuYXR0cmlidXRlcztmb3IobGV0IEE9MDtBPEkubGVuZ3RoO0ErKyl7bGV0IE89SS5pdGVtKEEpLGVlPU8ubmFtZS50b0xvd2VyQ2FzZSgpO08udmFsdWUubWF0Y2goeEUpP3U2Lmhhc093blByb3BlcnR5KGVlKSYmcmIocyxPLnZhbHVlLGgsTy5uYW1lLDAscUZbZWVdP0ViOm51bGwpOkFnZShyLGgsTyl9ZD11NyhuLHQsZSxpLHIsbyxzLHAsaCxjLHUrMSl8ZCxLaihvLGgsdSl9YnJlYWs7Y2FzZSBOb2RlLlRFWFRfTk9ERTpsZXQgQz1wLnRleHRDb250ZW50fHwiIixfPUMubWF0Y2goeEUpO3BrKHIsbnVsbCxfPyIiOkMsbCxoKSxLaihvLGgsdSksXyYmKGQ9cmIocyxDLGgsbnVsbCwwLG51bGwpfGQpO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6bGV0IHk9aGdlLmV4ZWMocC50ZXh0Q29udGVudHx8IiIpO2lmKHkpe2xldCBBPWNbcGFyc2VJbnQoeVsxXSwxMCldO3BrKHIsWlcsIiIsbCxoKSxjNyhuLGUsaSxsLEEsaCksRWdlKG8saCx1KX19cD1wLm5leHRTaWJsaW5nfXJldHVybiBkfWZ1bmN0aW9uIEtqKG4sdCxlKXswPT09ZSYmbi5wdXNoKHQpfWZ1bmN0aW9uIEVnZShuLHQsZSl7MD09PWUmJihuLnB1c2gofnQpLG4ucHVzaCh0KSl9ZnVuY3Rpb24gcGsobix0LGUsaSxyKXtudWxsIT09dCYmbi5wdXNoKHQpLG4ucHVzaChlLHIsZnVuY3Rpb24obix0LGUpe3JldHVybiAwfHQ8PDE3fGU8PDF9KDAsaSxyKSl9ZnVuY3Rpb24gQWdlKG4sdCxlKXtuLnB1c2godDw8MXwxLGUubmFtZSxlLnZhbHVlKX12YXIgSWdlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxQZ2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyxSZ2U9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxPZ2U9L3soW0EtWjAtOV9dKyl9L2csa2dlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxGZ2U9L1wvXCovLE5nZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gZDcobix0LGU9LTEpe2xldCBpPURpKCkscj1aZSgpLG89MjIrbixzPWVwKGkuY29uc3RzLHQpLGE9bGIoKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWxiKCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4gUWoobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH1cdWZmZmRgKSsyK3QudG9TdHJpbmcoKS5sZW5ndGgsaT1uLnNlYXJjaChuZXcgUmVnRXhwKGBcdWZmZmRcXC9cXCpcXGQrOiR7dH1cdWZmZmRgKSk7cmV0dXJuIFFqKG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgdT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGdnZSwiICIpfShyKS5zcGxpdChtZ2UpO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXtsZXQgcD11W2RdO2lmKDA9PSgxJmQpKXtsZXQgaD1zRihwKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IG09aFtmXTtpZigwPT0oMSZmKSl7bGV0IEM9bTsiIiE9PUMmJnlnZShuLHMsY1swXSxhLGwsZSxDKX1lbHNle2xldCBDPW07aWYoIm9iamVjdCIhPXR5cGVvZiBDKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO2M3KG4sZSxsLHQsQyxhNyhuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGg9NDc9PT1wLmNoYXJDb2RlQXQoMCksbT0ocC5jaGFyQ29kZUF0KGg/MTowKSwyMitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoaD8yOjEpKSk7aWYoaCljLnNoaWZ0KCksV2MobGIoKSwhMSk7ZWxzZXtsZXQgQz1uZ2UobixjWzBdLG0pO2MudW5zaGlmdChbXSksV2MoQywhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLHU9UzYoaSxhPT09cls2XT9udWxsOmEscik7KGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bMTFdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W28rK10sYT10W29dLGw9KHMmcWwuQ09NTUVOVCk9PT1xbC5DT01NRU5ULGM9KHMmcWwuQVBQRU5EX0VBR0VSTFkpPT09cWwuQVBQRU5EX0VBR0VSTFksdT1zPj4+cWwuU0hJRlQsZD1uW3VdO251bGw9PT1kJiYoZD1uW3VdPWw/ci5jcmVhdGVDb21tZW50KGEpOmVOKHIsYSkpLGMmJm51bGwhPT1lJiZaaChyLGUsZCxpLCExKX19KShyLGwuY3JlYXRlLHUsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxURyghMCl9ZnVuY3Rpb24gcDcoKXtURyghMSl9ZnVuY3Rpb24gWUUobix0LGUpe2Q3KG4sdCxlKSxwNygpfWZ1bmN0aW9uIE9iKG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYobWJ8PTE8PE1hdGgubWluKG5iLDMxKSksbmIrK30oc3MoWmUoKSxVZygpLG4pKSxPYn1mdW5jdGlvbiBYRShuKXshZnVuY3Rpb24obix0LGUpe2lmKG5iPjApe2xldCBpPW4uZGF0YVtlXTtyNyhuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLCR1KCktbmItMSxtYil9bWI9MCxuYj0wfShEaSgpLFplKCksbisyMil9ZnVuY3Rpb24gUUUobix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKElnZS50ZXN0KG4pKXtsZXQgaT17fSxyPVswXTtlPWUucmVwbGFjZShQZ2UsKG8scyxhKT0+e2xldCBsPXN8fGEsYz1pW2xdfHxbXTtpZihjLmxlbmd0aHx8KGwuc3BsaXQoInwiKS5mb3JFYWNoKG09PntsZXQgQz1tLm1hdGNoKE5nZSksXz1DP3BhcnNlSW50KENbMV0sMTApOjAseT1GZ2UudGVzdChtKTtjLnB1c2goW18seSxtXSl9KSxpW2xdPWMpLCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7bH1gKTtsZXQgdT1yW3IubGVuZ3RoLTFdLGQ9MDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rKylpZihjW21dWzBdPT09dSl7ZD1tO2JyZWFrfWxldFtwLGgsZl09Y1tkXTtyZXR1cm4gaD9yLnBvcCgpOnUhPT1wJiZyLnB1c2gocCksYy5zcGxpY2UoZCwxKSxmfSl9cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKGU9ZS5yZXBsYWNlKFJnZSwoaSxyLG8scyxhLGwpPT50Lmhhc093blByb3BlcnR5KG8pP2Ake3J9JHt0W29dfSR7bH1gOmkpLGU9ZS5yZXBsYWNlKE9nZSwoaSxyKT0+dC5oYXNPd25Qcm9wZXJ0eShyKT90W3JdOmkpLGU9ZS5yZXBsYWNlKGtnZSwoaSxyKT0+e2lmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIElDVSAtICR7aX0gd2l0aCBrZXk6ICR7cn1gKTtyZXR1cm4gby5zaGlmdCgpfXJldHVybiBpfSkpLGV9KG4sdCl9ZnVuY3Rpb24gYUYobix0LGUsaSxyKXtpZihuPXFpKG4pLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspYUYobltvXSx0LGUsaSxyKTtlbHNle2xldCBvPURpKCkscz1aZSgpLGE9a2cobik/bjpxaShuLnByb3ZpZGUpLGw9XzYobiksYz1NbygpLHU9MTA0ODU3NSZjLnByb3ZpZGVySW5kZXhlcyxkPWMuZGlyZWN0aXZlU3RhcnQscD1jLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoa2cobil8fCFuLm11bHRpKXtsZXQgaD1uZXcgS2gobCxyLHcpLGY9ZmsoYSx0LHI/dTp1K3AsZCk7LTE9PT1mPyhkRShjYihjLHMpLG8sYSksaGsobyxuLHQubGVuZ3RoKSx0LnB1c2goYSksYy5kaXJlY3RpdmVTdGFydCsrLGMuZGlyZWN0aXZlRW5kKyssciYmKGMucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxlLnB1c2goaCkscy5wdXNoKGgpKTooZVtmXT1oLHNbZl09aCl9ZWxzZXtsZXQgaD1mayhhLHQsdStwLGQpLGY9ZmsoYSx0LHUsdStwKSxtPWg+PTAmJmVbaF0sQz1mPj0wJiZlW2ZdO2lmKHImJiFDfHwhciYmIW0pe2RFKGNiKGMscyksbyxhKTtsZXQgXz1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBLaChuLGUsdyk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsaDcobyxyLGkmJiFlKSxvfShyP1VnZTpIZ2UsZS5sZW5ndGgscixpLGwpOyFyJiZDJiYoZVtmXS5wcm92aWRlckZhY3Rvcnk9XyksaGsobyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChfKSxzLnB1c2goXyl9ZWxzZSBoayhvLG4saD4tMT9oOmYsaDcoZVtyP2Y6aF0sbCwhciYmaSkpOyFyJiZpJiZDJiZlW2ZdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gaGsobix0LGUsaSl7bGV0IHI9a2codCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP3FpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IHU9Yy5pbmRleE9mKGUpOy0xPT09dT9jLnB1c2goZSxbaSxsXSk6Y1t1KzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gaDcobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIGZrKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSGdlKG4sdCxlLGkpe3JldHVybiBsRih0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBVZ2Uobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT1DYihlLGVbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7bz1hLnNsaWNlKDAscyksbEYocixvKTtmb3IobGV0IGw9cztsPGEubGVuZ3RoO2wrKylvLnB1c2goYVtsXSl9ZWxzZSBvPVtdLGxGKHIsbyk7cmV0dXJuIG99ZnVuY3Rpb24gbEYobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gJHQobix0PVtdKXtyZXR1cm4gZT0+e2UucHJvdmlkZXJzUmVzb2x2ZXI9KGkscik9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1EaSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtsZXQgcj1RbChuKTthRihlLGkuZGF0YSxpLmJsdWVwcmludCxyLCEwKSxhRih0LGkuZGF0YSxpLmJsdWVwcmludCxyLCExKX19KGkscj9yKG4pOm4sdCl9fXZhciBpcD1jbGFzc3t9LGNGPWNsYXNze30sdUY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGhiKHRoaXMpO2xldCBpPUlnKHQpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9S1MoaS5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9VTYodCxlLFt7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGNvKHQpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtsZXQgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fSxkRj1jbGFzcyBleHRlbmRzIGNGe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXR9Y3JlYXRlKHQpe3JldHVybiBuZXcgdUYodGhpcy5tb2R1bGVUeXBlLHQpfX0scEY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgaGIodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2xldCByPW5ldyBtRShbLi4udCx7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGV8fFFGKCksaSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9cixyLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kodCl9fSxHZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZSl7aWYoIWUuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGUuaWQpKXtsZXQgaT1mNigwLGUudHlwZSkscj1pLmxlbmd0aD4wP2Z1bmN0aW9uKG4sdCxlPW51bGwpe3JldHVybiBuZXcgcEYobix0LGUpLmluamVjdG9yfShbaV0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHtlLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoZS5pZCxyKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGUuaWQpfW5nT25EZXN0cm95KCl7dHJ5e2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09ZSYmZS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IG4oUihucCkpfSksbn0pKCk7ZnVuY3Rpb24gbHAobix0LGUpe2xldCBpPUVzKCkrbixyPVplKCk7cmV0dXJuIHJbaV09PT1Hbj9LYyhyLGksZT90LmNhbGwoZSk6dCgpKTpJYihyLGkpfWZ1bmN0aW9uIEhuKG4sdCxlLGkpe3JldHVybiBmNyhaZSgpLEVzKCksbix0LGUsaSl9ZnVuY3Rpb24gdG8obix0LGUsaSxyKXtyZXR1cm4gbTcoWmUoKSxFcygpLG4sdCxlLGkscil9ZnVuY3Rpb24ga2Iobix0LGUsaSxyLG8pe3JldHVybiBnNyhaZSgpLEVzKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIG1OKG4sdCxlLGkscixvLHMpe3JldHVybiBfNyhaZSgpLEVzKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gZ04obix0LGUsaSxyLG8scyxhKXtsZXQgbD1FcygpK24sYz1aZSgpLHU9bGwoYyxsLGUsaSxyLG8pO3JldHVybiBzcyhjLGwrNCxzKXx8dT9LYyhjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpJYihjLGwrNSl9ZnVuY3Rpb24gRmIobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09R24/dm9pZCAwOmV9ZnVuY3Rpb24gZjcobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gc3MobixzLHIpP0tjKG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6RmIobixzKzEpfWZ1bmN0aW9uIG03KG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gZWYobixhLHIsbyk/S2MobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6RmIobixhKzIpfWZ1bmN0aW9uIGc3KG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBqRShuLGwscixvLHMpP0tjKG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpGYihuLGwrMyl9ZnVuY3Rpb24gXzcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gbGwobixjLHIsbyxzLGEpP0tjKG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6RmIobixjKzQpfWZ1bmN0aW9uIHY3KG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylzcyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP0tjKG4scyxpLmFwcGx5KG8scikpOkZiKG4scyl9ZnVuY3Rpb24gaihuLHQpe2xldCBpLGU9RGkoKSxyPW4rMjI7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzfHwoZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9UWgoaS50eXBlKSkscz1pbCh3KTt0cnl7bGV0IGE9dUUoITEpLGw9bygpO3JldHVybiB1RShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLFplKCkscixsKSxsfWZpbmFsbHl7aWwocyl9fWZ1bmN0aW9uIFcobix0LGUpe2xldCBpPW4rMjIscj1aZSgpLG89SGcocixpKTtyZXR1cm4gTmIocixpKT9mNyhyLEVzKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIG5mKG4sdCxlLGkpe2xldCByPW4rMjIsbz1aZSgpLHM9SGcobyxyKTtyZXR1cm4gTmIobyxyKT9tNyhvLEVzKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBfTihuLHQsZSxpLHIpe2xldCBvPW4rMjIscz1aZSgpLGE9SGcocyxvKTtyZXR1cm4gTmIocyxvKT9nNyhzLEVzKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gTmIobix0KXtyZXR1cm4gblsxXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gbWsobil7cmV0dXJuIHQ9PntzZXRUaW1lb3V0KG4sdm9pZCAwLHQpfX12YXIgRz1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxpKXtsZXQgcj10LG89ZXx8KCgpPT5udWxsKSxzPWk7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbD10O3I9bC5uZXh0Py5iaW5kKGwpLG89bC5lcnJvcj8uYmluZChsKSxzPWwuY29tcGxldGU/LmJpbmQobCl9dGhpcy5fX2lzQXN5bmMmJihvPW1rKG8pLHImJihyPW1rKHIpKSxzJiYocz1tayhzKSkpO2xldCBhPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpyLGVycm9yOm8sY29tcGxldGU6c30pO3JldHVybiB0IGluc3RhbmNlb2Ygdm4mJnQuYWRkKGEpLGF9fTtmdW5jdGlvbiAkZ2UoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tVRSgpXSgpfXZhciBjbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtsZXQgZT1VRSgpLGk9Y2wucHJvdG90eXBlO2lbZV18fChpW2VdPSRnZSl9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEcpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9WHUodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sT2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189bjBlLG59KSgpLGUwZT1PaSx0MGU9Y2xhc3MgZXh0ZW5kcyBlMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Mscj1CRSh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGksdCwxNixudWxsLGkuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwsZXx8bnVsbCk7clsxN109dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO2xldCBzPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09cyYmKHJbMTldPXMuY3JlYXRlRW1iZWRkZWRWaWV3KGkpKSxvTihpLHIsdCksbmV3ICRoKHIpfX07ZnVuY3Rpb24gbjBlKCl7cmV0dXJuIEtFKE1vKCksWmUoKSl9ZnVuY3Rpb24gS0Uobix0KXtyZXR1cm4gNCZuLnR5cGU/bmV3IHQwZSh0LG4sR2cobix0KSk6bnVsbH12YXIgeWk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189aTBlLG59KSgpO2Z1bmN0aW9uIGkwZSgpe3JldHVybiBiNyhNbygpLFplKCkpfXZhciByMGU9eWkseTc9Y2xhc3MgZXh0ZW5kcyByMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fbENvbnRhaW5lcj10LHRoaXMuX2hvc3RUTm9kZT1lLHRoaXMuX2hvc3RMVmlldz1pfWdldCBlbGVtZW50KCl7cmV0dXJuIEdnKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgWWgodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IHBhcmVudEluamVjdG9yKCl7bGV0IHQ9VUYodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoTkcodCkpe2xldCBlPWNFKHQsdGhpcy5faG9zdExWaWV3KSxpPWxFKHQpO3JldHVybiBuZXcgWWgoZVsxXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBZaChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC0xMH1jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiFYeSh0KTtpZihzKWE9ZTtlbHNle2xldCBkPWV8fHt9O2E9ZC5pbmRleCxpPWQuaW5qZWN0b3Iscj1kLnByb2plY3RhYmxlTm9kZXMsbz1kLmVudmlyb25tZW50SW5qZWN0b3J8fGQubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyB2RShvbCh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChucCxudWxsKTtwJiYobz1wKX1sZXQgdT1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydCh1Lmhvc3RWaWV3LGEpLHV9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pWzFdO2lmKEp1KGlbM10pKXtsZXQgdT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT11KXRoaXMuZGV0YWNoKHUpO2Vsc2V7bGV0IGQ9aVszXSxwPW5ldyB5NyhkLGRbNl0sZFszXSk7cC5kZXRhY2gocC5pbmRleE9mKHQpKX19bGV0IG89dGhpcy5fYWRqdXN0SW5kZXgoZSkscz10aGlzLl9sQ29udGFpbmVyOyFmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xMCtpLG89ZS5sZW5ndGg7aT4wJiYoZVtyLTFdWzRdPXQpLGk8by0xMD8odFs0XT1lW3JdLHFHKGUsMTAraSx0KSk6KGUucHVzaCh0KSx0WzRdPW51bGwpLHRbM109ZTtsZXQgcz10WzE3XTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bls5XTt0WzE2XSE9PXRbM11bM11bMTZdJiYoblsyXT0hMCksbnVsbD09PWU/bls5XT1bdF06ZS5wdXNoKHQpfShzLHQpO2xldCBhPXRbMTldO251bGwhPT1hJiZhLmluc2VydFZpZXcobiksdFsyXXw9NjR9KHIsaSxzLG8pO2xldCBhPUtrKG8scyksbD1pWzExXSxjPU5FKGwsc1s3XSk7cmV0dXJuIG51bGwhPT1jJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7aVswXT1yLGlbNl09dCxBYihuLGksZSwxLHIsbyl9KHIsc1s2XSxsLGksYyxhKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHFHKGdrKHMpLG8sdCksdH1tb3ZlKHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7aSYmKHBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpLHc2KGlbMV0saSkpfWRldGFjaCh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7cmV0dXJuIGkmJm51bGwhPXBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpP25ldyAkaChpKTpudWxsfV9hZGp1c3RJbmRleCh0LGU9MCl7cmV0dXJuIHQ/P3RoaXMubGVuZ3RoK2V9fTtmdW5jdGlvbiBKaihuKXtyZXR1cm4gbls4XX1mdW5jdGlvbiBnayhuKXtyZXR1cm4gbls4XXx8KG5bOF09W10pfWZ1bmN0aW9uIGI3KG4sdCl7bGV0IGUsaT10W24uaW5kZXhdO2lmKEp1KGkpKWU9aTtlbHNle2xldCByO2lmKDgmbi50eXBlKXI9TWEoaSk7ZWxzZXtsZXQgbz10WzExXTtyPW8uY3JlYXRlQ29tbWVudCgiIik7bGV0IHM9dWwobix0KTtaaChvLE5FKG8scykscixmdW5jdGlvbihuLHQpe3JldHVybiBuLm5leHRTaWJsaW5nKHQpfShvLHMpLCExKX10W24uaW5kZXhdPWU9ZVcoaSx0LHIsbiksSEUodCxlKX1yZXR1cm4gbmV3IHk3KGUsbix0KX12YXIgZ2I9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeUxpc3Q9dCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgZ2IodGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19LF9iPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtsZXQgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2xldCBpPW51bGwhPT10LmNvbnRlbnRRdWVyaWVzP3QuY29udGVudFF1ZXJpZXNbMF06ZS5sZW5ndGgscj1bXTtmb3IobGV0IG89MDtvPGk7bysrKXtsZXQgcz1lLmdldEJ5SW5kZXgobyk7ci5wdXNoKHRoaXMucXVlcmllc1tzLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgX2Iocil9cmV0dXJuIG51bGx9aW5zZXJ0Vmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRldGFjaFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KXtmb3IobGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKW51bGwhPT1NNyh0LGUpLm1hdGNoZXMmJnRoaXMucXVlcmllc1tlXS5zZXREaXJ0eSgpfX0sQ0U9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPWl9fSx2Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1lbGVtZW50U3RhcnQodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtsZXQgcj1udWxsIT09ZT9lLmxlbmd0aDowLG89dGhpcy5nZXRCeUluZGV4KGkpLmVtYmVkZGVkVFZpZXcodCxyKTtvJiYoby5pbmRleEluRGVjbGFyYXRpb25WaWV3PWksbnVsbCE9PWU/ZS5wdXNoKG8pOmU9W29dKX1yZXR1cm4gbnVsbCE9PWU/bmV3IHZiKGUpOm51bGx9dGVtcGxhdGUodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fSx5Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEpe3RoaXMubWV0YWRhdGE9dCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1lfWVsZW1lbnRTdGFydCh0LGUpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShlKSYmdGhpcy5tYXRjaFROb2RlKHQsZSl9ZWxlbWVudEVuZCh0KXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PXQuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUodCxlKXt0aGlzLmVsZW1lbnRTdGFydCh0LGUpfWVtYmVkZGVkVFZpZXcodCxlKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLXQuaW5kZXgsZSksbmV3IHliKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUodCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEhPSgxJnRoaXMubWV0YWRhdGEuZmxhZ3MpKXtsZXQgZT10aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleCxpPXQucGFyZW50O2Zvcig7bnVsbCE9PWkmJjgmaS50eXBlJiZpLmluZGV4IT09ZTspaT1pLnBhcmVudDtyZXR1cm4gZT09PShudWxsIT09aT9pLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZSh0LGUpe2xldCBpPXRoaXMubWV0YWRhdGEucHJlZGljYXRlO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGEwZShlLG8pKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LG8sITEsITEpKX1lbHNlIGk9PT1PaT80JmUudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LGksITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGkpe2lmKG51bGwhPT1pKXtsZXQgcj10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PXIpaWYocj09PUFlfHxyPT09eWl8fHI9PT1PaSYmNCZlLnR5cGUpdGhpcy5hZGRNYXRjaChlLmluZGV4LC0yKTtlbHNle2xldCBvPVhTKGUsdCxyLCExLCExKTtudWxsIT09byYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG8pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LGkpfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fTtmdW5jdGlvbiBhMGUobix0KXtsZXQgZT1uLmxvY2FsTmFtZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKWlmKGVbaV09PT10KXJldHVybiBlW2krMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gYzBlKG4sdCxlLGkpe3JldHVybi0xPT09ZT9mdW5jdGlvbihuLHQpe3JldHVybiAxMSZuLnR5cGU/R2cobix0KTo0Jm4udHlwZT9LRShuLHQpOm51bGx9KHQsbik6LTI9PT1lP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZT09PUFlP0dnKHQsbik6ZT09PU9pP0tFKHQsbik6ZT09PXlpP2I3KHQsbik6dm9pZCAwfShuLHQsaSk6Q2IobixuWzFdLGUsdCl9ZnVuY3Rpb24geDcobix0LGUsaSl7bGV0IHI9dFsxOV0ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOmMwZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gZkYobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPXg3KG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sdT10Wy1sXTtmb3IobGV0IGQ9MTA7ZDx1Lmxlbmd0aDtkKyspe2xldCBwPXVbZF07cFsxN109PT1wWzNdJiZmRihwWzFdLHAsYyxpKX1pZihudWxsIT09dVs5XSl7bGV0IGQ9dVs5XTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGg9ZFtwXTtmRihoWzFdLGgsYyxpKX19fX19cmV0dXJuIGl9ZnVuY3Rpb24gTmUobil7bGV0IHQ9WmUoKSxlPURpKCksaT1ERygpO0xGKGkrMSk7bGV0IHI9TTcoZSxpKTtpZihuLmRpcnR5JiZmdW5jdGlvbihuKXtyZXR1cm4gND09KDQmblsyXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/ZkYoZSx0LGksW10pOng3KGUsdCxyLGkpO24ucmVzZXQobyxUaGUpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbHQobix0LGUpe2xldCBpPURpKCk7aS5maXJzdENyZWF0ZVBhc3MmJih3NyhpLG5ldyBDRShuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLEM3KGksWmUoKSx0KX1mdW5jdGlvbiBOaShuLHQsZSxpKXtsZXQgcj1EaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz1NbygpO3c3KHIsbmV3IENFKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9QzcocixaZSgpLGUpfWZ1bmN0aW9uIExlKCl7cmV0dXJuIG49WmUoKSx0PURHKCksblsxOV0ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBDNyhuLHQsZSl7bGV0IGk9bmV3IGNsKDQ9PSg0JmUpKTtxNihuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10WzE5XSYmKHRbMTldPW5ldyBfYiksdFsxOV0ucXVlcmllcy5wdXNoKG5ldyBnYihpKSl9ZnVuY3Rpb24gdzcobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IHZiKSxuLnF1ZXJpZXMudHJhY2sobmV3IHliKHQsZSkpfWZ1bmN0aW9uIE03KG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIGVuKG4sdCl7cmV0dXJuIEtFKG4sdCl9dmFyICRkPXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjp6ZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBsVyhuLHQsZSxpLHIsbyl7bGV0IHM9WmUoKSxhPVhnKHMsdCxlLGkpO3JldHVybiBhIT09R24mJlFjKHFyKCkscyxuLGEscixvKSxsV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gY1cobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9UWcobCx0LGUsaSxyLG8pO3JldHVybiBjIT09R24mJlFjKHFyKCksbCxuLGMscyxhKSxjV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdVcobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9WmUoKSxkPUtnKHUsdCxlLGkscixvLHMsYSk7cmV0dXJuIGQhPT1HbiYmUWMocXIoKSx1LG4sZCxsLGMpLHVXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBkVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9WmUoKSxoPVpnKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBoIT09R24mJlFjKHFyKCkscCxuLGgsdSxkKSxkV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gcFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXtsZXQgZj1aZSgpLG09SmcoZix0LGUsaSxyLG8scyxhLGwsYyx1LGQpO3JldHVybiBtIT09R24mJlFjKHFyKCksZixuLG0scCxoKSxwV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gaFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9WmUoKSxfPSRnKEMsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCk7cmV0dXJuIF8hPT1HbiYmUWMocXIoKSxDLG4sXyxmLG0pLGhXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBmVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyl7bGV0IHk9WmUoKSxJPWUwKHksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0pO3JldHVybiBJIT09R24mJlFjKHFyKCkseSxuLEksQyxfKSxmV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gbVcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSxJKXtsZXQgQT1aZSgpLE89dDAoQSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pO3JldHVybiBPIT09R24mJlFjKHFyKCksQSxuLE8seSxJKSxtV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gZ1cobix0LGUsaSl7bGV0IHI9WmUoKSxvPVlnKHIsdCk7cmV0dXJuIG8hPT1HbiYmUWMocXIoKSxyLG4sbyxlLGkpLGdXfSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjprLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOk9lLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjpnZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjp6LCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpCZywiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0Ijp3LCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpoaSwiXHUwMjc1XHUwMjc1aW5qZWN0IjpSLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOktvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6SmwsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRywiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOmVuLCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOm9lLCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOnp0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjokdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PWFXKG4udHlwZSk7ZT1RbChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiAkZmUpaVtyXT1lW3JdO2lmKFFsKGUpKWZvcihsZXQgciBvZiBlbWUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjp0dCwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOmZ1bmN0aW9uKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KEdnZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9LCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6TSwiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6U2EsIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ibWF0aCJ9LCJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciOmpuLCJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtZbi5iaW5kaW5nc0VuYWJsZWQ9ITB9LCJcdTAyNzVcdTAyNzVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uKCl7WW4uYmluZGluZ3NFbmFibGVkPSExfSwiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0IjpnLCJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIjp2LCJcdTAyNzVcdTAyNzVlbGVtZW50IjpOLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiOkt0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIjpadCwiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lciI6QWksIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiOmxwLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIjpIbiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMiI6dG8sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiOmtiLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240IjptTiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNSI6Z04sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1FcygpK24sdT1aZSgpLGQ9bGwodSxjLGUsaSxyLG8pO3JldHVybiBlZih1LGMrNCxzLGEpfHxkP0tjKHUsYys2LGw/dC5jYWxsKGwsZSxpLHIsbyxzLGEpOnQoZSxpLHIsbyxzLGEpKTpJYih1LGMrNil9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjKXtsZXQgdT1FcygpK24sZD1aZSgpLHA9bGwoZCx1LGUsaSxyLG8pO3JldHVybiBqRShkLHUrNCxzLGEsbCl8fHA/S2MoZCx1KzcsYz90LmNhbGwoYyxlLGkscixvLHMsYSxsKTp0KGUsaSxyLG8scyxhLGwpKTpJYihkLHUrNyl9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPUVzKCkrbixwPVplKCksaD1sbChwLGQsZSxpLHIsbyk7cmV0dXJuIGxsKHAsZCs0LHMsYSxsLGMpfHxoP0tjKHAsZCs4LHU/dC5jYWxsKHUsZSxpLHIsbyxzLGEsbCxjKTp0KGUsaSxyLG8scyxhLGwsYykpOkliKHAsZCs4KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiOmZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiB2NyhaZSgpLEVzKCksbix0LGUsaSl9LCJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyI6SWUsIlx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3IjpyZSwiXHUwMjc1XHUwMjc1bGlzdGVuZXIiOlAsIlx1MDI3NVx1MDI3NXByb2plY3Rpb24iOk5uLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiOnIwLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOmkwLCJcdTAyNzVcdTAyNzVwaXBlQmluZDEiOlcsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMiI6bmYsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMyI6X04sIlx1MDI3NVx1MDI3NXBpcGVCaW5kNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW4rMjIsYT1aZSgpLGw9SGcoYSxzKTtyZXR1cm4gTmIoYSxzKT9fNyhhLEVzKCksdCxsLnRyYW5zZm9ybSxlLGkscixvLGwpOmwudHJhbnNmb3JtKGUsaSxyLG8pfSwiXHUwMjc1XHUwMjc1cGlwZUJpbmRWIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bisyMixyPVplKCksbz1IZyhyLGkpO3JldHVybiBOYihyLGkpP3Y3KHIsRXMoKSx0LG8udHJhbnNmb3JtLGUsbyk6by50cmFuc2Zvcm0uYXBwbHkobyxlKX0sIlx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiOndpLCJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiOkFhLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eSI6YiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSI6eHIsIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIjpQYiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTIiOkdFLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdlcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1LZyhjLHQsZSxpLHIsbyxzLGEpO3JldHVybiB1IT09R24mJkRhKERpKCkscXIoKSxjLG4sdSxjWzExXSxsLCExKSx2V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB5VyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1aZyhkLHQsZSxpLHIsbyxzLGEsbCxjKTtyZXR1cm4gcCE9PUduJiZEYShEaSgpLHFyKCksZCxuLHAsZFsxMV0sdSwhMSkseVd9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gYlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPUpnKGgsdCxlLGkscixvLHMsYSxsLGMsdSxkKTtyZXR1cm4gZiE9PUduJiZEYShEaSgpLHFyKCksaCxuLGYsaFsxMV0scCwhMSksYld9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24geFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz0kZyhtLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpO3JldHVybiBDIT09R24mJkRhKERpKCkscXIoKSxtLG4sQyxtWzExXSxmLCExKSx4V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBDVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT1lMChfLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKTtyZXR1cm4geSE9PUduJiZEYShEaSgpLHFyKCksXyxuLHksX1sxMV0sQywhMSksQ1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gd1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSl7bGV0IEk9WmUoKSxBPXQwKEksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKTtyZXR1cm4gQSE9PUduJiZEYShEaSgpLHFyKCksSSxuLEEsSVsxMV0seSwhMSksd1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24gTVcobix0LGUpe2xldCBpPVplKCkscj1ZZyhpLHQpO3JldHVybiByIT09R24mJkRhKERpKCkscXIoKSxpLG4scixpWzExXSxlLCExKSxNV30sIlx1MDI3NVx1MDI3NXBpcGUiOmosIlx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCI6TmUsIlx1MDI3NVx1MDI3NXZpZXdRdWVyeSI6bHQsIlx1MDI3NVx1MDI3NWxvYWRRdWVyeSI6TGUsIlx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSI6TmksIlx1MDI3NVx1MDI3NXJlZmVyZW5jZSI6c3QsIlx1MDI3NVx1MDI3NWNsYXNzTWFwIjplYSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiOlJiLCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtlYyhFYSxaYyxRZyhaZSgpLG4sdCxlLGksciksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe2VjKEVhLFpjLEtnKFplKCksbix0LGUsaSxyLG8scyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtlYyhFYSxaYyxaZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1KXtlYyhFYSxaYyxKZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe2VjKEVhLFpjLCRnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKXtlYyhFYSxaYyxlMChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtlYyhFYSxaYyx0MChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe2VjKEVhLFpjLFlnKFplKCksbiksITApfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXAiOnBsLCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24obix0LGUpe3BsKFhnKFplKCksbix0LGUpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbihuLHQsZSxpLHIpe3BsKFFnKFplKCksbix0LGUsaSxyKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7cGwoS2coWmUoKSxuLHQsZSxpLHIsbyxzKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe3BsKFpnKFplKCksbix0LGUsaSxyLG8scyxhLGwpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe3BsKEpnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cGwoJGcoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3BsKGUwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe3BsKHQwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViI6ZnVuY3Rpb24obil7cGwoWWcoWmUoKSxuKSl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3AiOk90LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIEhXKG4sdCxlLGkscil7cmV0dXJuICRsKG4sWGcoWmUoKSx0LGUsaSksciwhMSksSFd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIFVXKG4sdCxlLGkscixvLHMpe3JldHVybiAkbChuLFFnKFplKCksdCxlLGkscixvKSxzLCExKSxVV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gelcobix0LGUsaSxyLG8scyxhLGwpe3JldHVybiAkbChuLEtnKFplKCksdCxlLGkscixvLHMsYSksbCwhMSkseld9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGpXKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7cmV0dXJuICRsKG4sWmcoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyksdSwhMSksald9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIEdXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3JldHVybiAkbChuLEpnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkKSxwLCExKSxHV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gV1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3JldHVybiAkbChuLCRnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCksZiwhMSksV1d9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHFXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyl7cmV0dXJuICRsKG4sZTAoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSksQywhMSkscVd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIFlXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfLHkpe3JldHVybiAkbChuLHQwKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKSx5LCExKSxZV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gWFcobix0LGUpe3JldHVybiAkbChuLFlnKFplKCksdCksZSwhMSksWFd9LCJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiOmF0LCJcdTAyNzVcdTAyNzVhZHZhbmNlIjp4LCJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSI6RSwiXHUwMjc1XHUwMjc1dGV4dCI6RCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlIjp5dCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSI6cWUsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiOmFwLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUzIjpXRSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCI6ZnVuY3Rpb24ga1cobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1aZyhjLG4sdCxlLGkscixvLHMsYSxsKTtyZXR1cm4gdSE9PUduJiZuZChjLFRzKCksdSksa1d9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBGVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1KZyhkLG4sdCxlLGkscixvLHMsYSxsLGMsdSk7cmV0dXJuIHAhPT1HbiYmbmQoZCxUcygpLHApLEZXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gTlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPSRnKGgsbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCk7cmV0dXJuIGYhPT1HbiYmbmQoaCxUcygpLGYpLE5XfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyI6ZnVuY3Rpb24gTFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz1lMChtLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKTtyZXR1cm4gQyE9PUduJiZuZChtLFRzKCksQyksTFd9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBCVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT10MChfLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyk7cmV0dXJuIHkhPT1HbiYmbmQoXyxUcygpLHkpLEJXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gVlcobil7bGV0IHQ9WmUoKSxlPVlnKHQsbik7cmV0dXJuIGUhPT1HbiYmbmQodCxUcygpLGUpLFZXfSwiXHUwMjc1XHUwMjc1aTE4biI6WUUsIlx1MDI3NVx1MDI3NWkxOG5BdHRyaWJ1dGVzIjpmdW5jdGlvbihuLHQpe2xldCBlPURpKCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1NbygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKHBnZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTtyYihvLGwscixhLHhnZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rMjIsZXAoZS5jb25zdHMsdCkpfSwiXHUwMjc1XHUwMjc1aTE4bkV4cCI6T2IsIlx1MDI3NVx1MDI3NWkxOG5TdGFydCI6ZDcsIlx1MDI3NVx1MDI3NWkxOG5FbmQiOnA3LCJcdTAyNzVcdTAyNzVpMThuQXBwbHkiOlhFLCJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiOlFFLCJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93IjpmdW5jdGlvbihuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSwiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50IjpGRSwiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuYm9keX0sIlx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIjpiYiwiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSI6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGYoKCk9PntsZXQgZT1JZyhuLCEwKTtlLmRlY2xhcmF0aW9ucz10LmRlY2xhcmF0aW9uc3x8V2ksZS5pbXBvcnRzPXQuaW1wb3J0c3x8V2ksZS5leHBvcnRzPXQuZXhwb3J0c3x8V2l9KX0sIlx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIjpaRywiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIjpYRiwiXHUwMjc1XHUwMjc1c2FuaXRpemVTdHlsZSI6ZnVuY3Rpb24obil7bGV0IHQ9RGIoKTtyZXR1cm4gdD90LnNhbml0aXplKEpyLlNUWUxFLG4pfHwiIjpabChuLCJTdHlsZSIpPyRzKG4pOnFuKG4pfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCI6ZDYsIlx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0IjpmdW5jdGlvbihuKXtsZXQgdD1EYigpO2lmKHQpcmV0dXJuIERqKHQuc2FuaXRpemUoSnIuU0NSSVBULG4pfHwiIik7aWYoWmwobiwiU2NyaXB0IikpcmV0dXJuIERqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA1LCExKX0sIlx1MDI3NVx1MDI3NXNhbml0aXplVXJsIjpkbCwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuInNyYyI9PT10JiYoImVtYmVkIj09PW58fCJmcmFtZSI9PT1ufHwiaWZyYW1lIj09PW58fCJtZWRpYSI9PT1ufHwic2NyaXB0Ij09PW4pfHwiaHJlZiI9PT10JiYoImJhc2UiPT09bnx8ImxpbmsiPT09bik/ZDY6ZGx9KHQsZSkobil9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCI6ZnVuY3Rpb24obil7cmV0dXJuIE9nKG5bMF0pfSwiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsIjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGU2KCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn0oblswXSl9LGZvcndhcmRSZWY6cmkscmVzb2x2ZUZvcndhcmRSZWY6cWl9O2Z1bmN0aW9uIFM3KG4pe3JldHVybiEhSWcobil9dmFyICRTPVtdLF9rPSExO2Z1bmN0aW9uIEU3KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZXZlcnkoRTcpOiEhcWkobil9ZnVuY3Rpb24gYjBlKG4sdCl7bGV0IGU9WHUodC5kZWNsYXJhdGlvbnN8fFdpKSxpPUxnKG4pO2UuZm9yRWFjaChyPT57KHI9cWkocikpLmhhc093blByb3BlcnR5KFRFKT9UNyhvbChyKSxpKTohci5oYXNPd25Qcm9wZXJ0eShURikmJiFyLmhhc093blByb3BlcnR5KERGKSYmKHIubmdTZWxlY3RvclNjb3BlPW4pfSl9ZnVuY3Rpb24gVDcobix0KXtuLmRpcmVjdGl2ZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5kaXJlY3RpdmVzKS5tYXAoZT0+ZS5oYXNPd25Qcm9wZXJ0eShURSk/b2woZSk6WGgoZSkpLmZpbHRlcihlPT4hIWUpLG4ucGlwZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5waXBlcykubWFwKGU9Pkt1KGUpKSxuLnNjaGVtYXM9dC5zY2hlbWFzLG4udFZpZXc9bnVsbH1mdW5jdGlvbiBMZyhuKXtpZihTNyhuKSlyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9SWcobiwhMCk7aWYobnVsbCE9PXQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMpcmV0dXJuIHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM7bGV0IGU9e3NjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fX07cmV0dXJuIEtTKHQuaW1wb3J0cykuZm9yRWFjaChpPT57bGV0IHI9TGcoaSk7ci5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChvKSksci5leHBvcnRlZC5waXBlcy5mb3JFYWNoKG89PmUuY29tcGlsYXRpb24ucGlwZXMuYWRkKG8pKX0pLEtTKHQuZGVjbGFyYXRpb25zKS5mb3JFYWNoKGk9PntLdShpKT9lLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpKTplLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGkpfSksS1ModC5leHBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1pO2lmKFM3KHIpKXtsZXQgbz1MZyhyKTtvLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChzPT57ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChzKSxlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHMpfSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChzKSxlLmV4cG9ydGVkLnBpcGVzLmFkZChzKX0pfWVsc2UgS3Uocik/ZS5leHBvcnRlZC5waXBlcy5hZGQocik6ZS5leHBvcnRlZC5kaXJlY3RpdmVzLmFkZChyKX0pLHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9ZSxlfShuKTtpZihmRyhuKSl7aWYobnVsbCE9PShvbChuKXx8WGgobikpKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0KFtuXSkscGlwZXM6bmV3IFNldH19O2lmKG51bGwhPT1LdShuKSlyZXR1cm57c2NoZW1hczpudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0KFtuXSl9fX10aHJvdyBuZXcgRXJyb3IoYCR7bi5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoXHUwMjc1bW9kIHByb3BlcnR5KWApfWZ1bmN0aW9uICRqKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ01vZHVsZX0obik/bi5uZ01vZHVsZTpufXZhciB2az0wO2Z1bmN0aW9uIEQ3KG4sdCl7bGV0IGU9bnVsbDtJNyhuLHR8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixURix7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCBpPUE3KG4sdHx8e30pO2U9c2woKS5jb21waWxlRGlyZWN0aXZlKCRkLGkuc291cmNlTWFwVXJsLGkubWV0YWRhdGEpfXJldHVybiBlfSxjb25maWd1cmFibGU6ITF9KX1mdW5jdGlvbiBBNyhuLHQpe2xldCBlPW4mJm4ubmFtZSxpPWBuZzovLy8ke2V9L1x1MDI3NWRpci5qc2Ascj1zbCgpLG89UDcobix0KTtyZXR1cm4gby50eXBlU291cmNlU3Bhbj1yLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixlLGkpLG8udXNlc0luaGVyaXRhbmNlJiZSNyhuKSx7bWV0YWRhdGE6byxzb3VyY2VNYXBVcmw6aX19ZnVuY3Rpb24gSTcobix0KXtsZXQgZT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFF1LHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9QTcobix0KSxyPXNsKCk7ZT1yLmNvbXBpbGVGYWN0b3J5KCRkLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTppLm1ldGFkYXRhLm5hbWUsdHlwZTppLm1ldGFkYXRhLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOlJFKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIFMwZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gUDcobix0KXtsZXQgZT1HRigpLGk9ZS5vd25Qcm9wTWV0YWRhdGEobik7cmV0dXJue25hbWU6bi5uYW1lLHR5cGU6bixzZWxlY3Rvcjp2b2lkIDAhPT10LnNlbGVjdG9yP3Quc2VsZWN0b3I6bnVsbCxob3N0OnQuaG9zdHx8QWcscHJvcE1ldGFkYXRhOmksaW5wdXRzOnQuaW5wdXRzfHxXaSxvdXRwdXRzOnQub3V0cHV0c3x8V2kscXVlcmllczplRyhuLGksTzcpLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczplLmhhc0xpZmVjeWNsZUhvb2sobiwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IVMwZShuKSxleHBvcnRBczpEMGUodC5leHBvcnRBcykscHJvdmlkZXJzOnQucHJvdmlkZXJzfHxudWxsLHZpZXdRdWVyaWVzOmVHKG4saSxrNyksaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX1mdW5jdGlvbiBSNyhuKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2UmJmUhPT10OykhWGgoZSkmJiFvbChlKSYmSTBlKGUpJiZENyhlLG51bGwpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfWZ1bmN0aW9uIEUwZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/Tjcobik6cWkobil9ZnVuY3Rpb24gVDBlKG4sdCl7cmV0dXJue3Byb3BlcnR5TmFtZTpuLHByZWRpY2F0ZTpFMGUodC5zZWxlY3RvciksZGVzY2VuZGFudHM6dC5kZXNjZW5kYW50cyxmaXJzdDp0LmZpcnN0LHJlYWQ6dC5yZWFkP3QucmVhZDpudWxsLHN0YXRpYzohIXQuc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEhdC5lbWl0RGlzdGluY3RDaGFuZ2VzT25seX19ZnVuY3Rpb24gZUcobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07by5mb3JFYWNoKHM9PntpZihlKHMpKXtpZighcy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7cn0iIG9mICIke01GKG4pfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKG8uc29tZShGNykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtpLnB1c2goVDBlKHIscykpfX0pfXJldHVybiBpfWZ1bmN0aW9uIEQwZShuKXtyZXR1cm4gdm9pZCAwPT09bj9udWxsOk43KG4pfWZ1bmN0aW9uIE83KG4pe2xldCB0PW4ubmdNZXRhZGF0YU5hbWU7cmV0dXJuIkNvbnRlbnRDaGlsZCI9PT10fHwiQ29udGVudENoaWxkcmVuIj09PXR9ZnVuY3Rpb24gazcobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iVmlld0NoaWxkIj09PXR8fCJWaWV3Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiBGNyhuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBONyhuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSl9dmFyIEEwZT1bIm5nT25DaGFuZ2VzIiwibmdPbkluaXQiLCJuZ09uRGVzdHJveSIsIm5nRG9DaGVjayIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCJdO2Z1bmN0aW9uIEkwZShuKXtsZXQgdD1HRigpO2lmKEEwZS5zb21lKGk9PnQuaGFzTGlmZWN5Y2xlSG9vayhuLGkpKSlyZXR1cm4hMDtsZXQgZT10LnByb3BNZXRhZGF0YShuKTtmb3IobGV0IGkgaW4gZSl7bGV0IHI9ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXSxhPXMubmdNZXRhZGF0YU5hbWU7aWYoRjcocyl8fE83KHMpfHxrNyhzKXx8Ik91dHB1dCI9PT1hfHwiSG9zdEJpbmRpbmciPT09YXx8Ikhvc3RMaXN0ZW5lciI9PT1hKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB0RyhuLHQpe3JldHVybnt0eXBlOm4sbmFtZTpuLm5hbWUscGlwZU5hbWU6dC5uYW1lLHB1cmU6dm9pZCAwPT09dC5wdXJlfHx0LnB1cmUsaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX12YXIgUjBlPXdiKCJEaXJlY3RpdmUiLChuPXt9KT0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5ENyhuLHQpKTtmdW5jdGlvbiB3RSguLi5uKXt9d2IoIkNvbXBvbmVudCIsKG49e30pPT4oe2NoYW5nZURldGVjdGlvbjpLeS5EZWZhdWx0LC4uLm59KSxSMGUsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGw7KGZ1bmN0aW9uKG4sdCl7S0codCkmJihwYi5zZXQobix0KSxRRy5hZGQobikpfSkobix0KSxJNyhuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFRFLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9c2woKTtpZihLRyh0KSl7bGV0IGM9W2BDb21wb25lbnQgJyR7bi5uYW1lfScgaXMgbm90IHJlc29sdmVkOmBdO3Rocm93IHQudGVtcGxhdGVVcmwmJmMucHVzaChgIC0gdGVtcGxhdGVVcmw6ICR7dC50ZW1wbGF0ZVVybH1gKSx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoJiZjLnB1c2goYCAtIHN0eWxlVXJsczogJHtKU09OLnN0cmluZ2lmeSh0LnN0eWxlVXJscyl9YCksYy5wdXNoKCJEaWQgeW91IHJ1biBhbmQgd2FpdCBmb3IgJ3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMoKSc/IiksbmV3IEVycm9yKGMuam9pbigiXG4iKSl9bGV0IHI9bnVsbCxvPXQucHJlc2VydmVXaGl0ZXNwYWNlczt2b2lkIDA9PT1vJiYobz1udWxsIT09ciYmdm9pZCAwIT09ci5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZyLnByZXNlcnZlV2hpdGVzcGFjZXMpO2xldCBzPXQuZW5jYXBzdWxhdGlvbjt2b2lkIDA9PT1zJiYocz1udWxsIT09ciYmdm9pZCAwIT09ci5kZWZhdWx0RW5jYXBzdWxhdGlvbj9yLmRlZmF1bHRFbmNhcHN1bGF0aW9uOndhLkVtdWxhdGVkKTtsZXQgYT10LnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHtuLm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9ey4uLlA3KG4sdCksdHlwZVNvdXJjZVNwYW46aS5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsbi5uYW1lLGEpLHRlbXBsYXRlOnQudGVtcGxhdGV8fCIiLHByZXNlcnZlV2hpdGVzcGFjZXM6byxzdHlsZXM6dC5zdHlsZXN8fFdpLGFuaW1hdGlvbnM6dC5hbmltYXRpb25zLGRlY2xhcmF0aW9uczpbXSxjaGFuZ2VEZXRlY3Rpb246dC5jaGFuZ2VEZXRlY3Rpb24sZW5jYXBzdWxhdGlvbjpzLGludGVycG9sYXRpb246dC5pbnRlcnBvbGF0aW9uLHZpZXdQcm92aWRlcnM6dC52aWV3UHJvdmlkZXJzfHxudWxsLGlzU3RhbmRhbG9uZTohIXQuc3RhbmRhbG9uZX07dmsrKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJlI3KG4pLGU9aS5jb21waWxlQ29tcG9uZW50KCRkLGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz1YdSh0LmltcG9ydHN8fFdpKSx7ZGlyZWN0aXZlRGVmczp1LHBpcGVEZWZzOmR9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bb2wobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IGQ9b2wodSl8fFhoKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGUucHVzaChkKSl9fWVsc2V7bGV0IGM9b2wobCl8fFhoKGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCBkPUt1KHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGkucHVzaChkKSl9fWVsc2V7bGV0IGM9S3UobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9dSxlLnBpcGVEZWZzPWQsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKHFpKX19ZmluYWxseXt2ay0tfWlmKDA9PT12ayYmZnVuY3Rpb24oKXtpZighX2spe19rPSEwO3RyeXtmb3IobGV0IG49JFMubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09JFNbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KEU3KSYmKCRTLnNwbGljZShuLDEpLGIwZSh0LGUpKX19ZmluYWxseXtfaz0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPUxnKG4ubmdTZWxlY3RvclNjb3BlKTtUNyhlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7TUYobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHdiKCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj10RyhuLHQpLG89c2woKTtpPW8uY29tcGlsZUZhY3RvcnkoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLERGLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9dEcobix0KTtlPXNsKCkuY29tcGlsZVBpcGUoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHNwKCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxzcCgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksd2IoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT1YdSh0LmRlY2xhcmF0aW9uc3x8V2kpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixwRyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1zbCgpLmNvbXBpbGVOZ01vZHVsZSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6WHUodC5ib290c3RyYXB8fFdpKS5tYXAocWkpLGRlY2xhcmF0aW9uczppLm1hcChxaSksaW1wb3J0czpYdSh0LmltcG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksZXhwb3J0czpYdSh0LmV4cG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksc2NoZW1hczp0LnNjaGVtYXM/WHUodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1zbCgpO289YS5jb21waWxlRmFjdG9yeSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOlJFKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHhrLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFdpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFdpKS5tYXAocWkpLCh0LmV4cG9ydHN8fFdpKS5tYXAocWkpXX07cz1zbCgpLmNvbXBpbGVJbmplY3RvcigkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZaRyhuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7JFMucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyIHZOPW5ldyBzZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxaRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9d0UsdGhpcy5yZWplY3Q9d0UsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYobjAobykpZS5wdXNoKG8pO2Vsc2UgaWYoZk4obykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2Tiw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscmY9bmV3IHNlKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHt5aygpfSR7eWsoKX0ke3lrKCl9YH19KTtmdW5jdGlvbiB5aygpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciB5Tj1uZXcgc2UoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksaWQ9bmV3IHNlKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxrMGU9bmV3IHNlKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLExpPShuZXcgc2UoIkFwcGxpY2F0aW9uIFBhY2thZ2VzIFJvb3QgVVJMIiksbmV3IHNlKCJBbmltYXRpb25Nb2R1bGVUeXBlIikpLHJkPW5ldyBzZSgiTG9jYWxlSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TbyhyZCxpaS5PcHRpb25hbHxpaS5Ta2lwU2VsZil8fHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxiRX0pLEIwZT0obmV3IHNlKCJEZWZhdWx0Q3VycmVuY3lDb2RlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlVTRCJ9KSxuZXcgc2UoIlRyYW5zbGF0aW9ucyIpLG5ldyBzZSgiVHJhbnNsYXRpb25zRm9ybWF0IiksbmV3IHNlKCJjb21waWxlck9wdGlvbnMiKSxQcm9taXNlLnJlc29sdmUoMCkpO2Z1bmN0aW9uIG1GKG4pe3R5cGVvZiBab25lPiJ1Ij9CMGUudGhlbigoKT0+e24mJm4uYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLG4pfXZhciBwdD1jbGFzc3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246aT0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBHKCExKSx0aGlzLm9uU3RhYmxlPW5ldyBHKCExKSx0aGlzLm9uRXJyb3I9bmV3IEcoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgTXQoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7bGV0IHI9dGhpcztpZihyLl9uZXN0aW5nPTAsci5fb3V0ZXI9ci5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuQXN5bmNTdGFja1RhZ2dpbmdab25lU3BlYyl7bGV0IG89Wm9uZS5Bc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjO3IuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IG8oIkFuZ3VsYXIiKSl9Wm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSx0JiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHIuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haSYmZSxyLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWksci5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsci5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtsZXQgbj1Xci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD1Xci5jYW5jZWxBbmltYXRpb25GcmFtZTtpZih0eXBlb2YgWm9uZTwidSImJm4mJnQpe2xldCBlPW5bWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2UmJihuPWUpO2xldCBpPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2kmJih0PWkpfXJldHVybntuYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bixuYXRpdmVDYW5jZWxBbmltYXRpb25GcmFtZTp0fX0oKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZnVuY3Rpb24obil7bGV0IHQ9KCk9PnshZnVuY3Rpb24obil7bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KG4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPW4ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwoV3IsKCk9PntuLmZha2VUb3BFdmVudFRhc2t8fChuLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e24ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGdGKG4pLG4uaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsYk4obiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxuLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxnRihuKSl9KG4pfTtuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGUsaSxyLG8scyxhKT0+e3RyeXtyZXR1cm4gbkcobiksZS5pbnZva2VUYXNrKHIsbyxzLGEpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1vLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCksaUcobil9fSxvbkludm9rZTooZSxpLHIsbyxzLGEsbCk9Pnt0cnl7cmV0dXJuIG5HKG4pLGUuaW52b2tlKHIsbyxzLGEsbCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZ0KCksaUcobil9fSxvbkhhc1Rhc2s6KGUsaSxyLG8pPT57ZS5oYXNUYXNrKHIsbyksaT09PXImJigibWljcm9UYXNrIj09by5jaGFuZ2U/KG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPW8ubWljcm9UYXNrLGdGKG4pLGJOKG4pKToibWFjcm9UYXNrIj09by5jaGFuZ2UmJihuLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPW8ubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGUsaSxyLG8pPT4oZS5oYW5kbGVFcnJvcihyLG8pLG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ub25FcnJvci5lbWl0KG8pKSwhMSl9KX0ocil9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBNdCg5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYocHQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IE10KDkwOSwhMSl9cnVuKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxpKX1ydW5UYXNrKHQsZSxpLHIpe2xldCBvPXRoaXMuX2lubmVyLHM9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LEgwZSx3RSx3RSk7dHJ5e3JldHVybiBvLnJ1blRhc2socyxlLGkpfWZpbmFsbHl7by5jYW5jZWxUYXNrKHMpfX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19LEgwZT17fTtmdW5jdGlvbiBiTihuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBnRihuKXtuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gbkcobil7bi5fbmVzdGluZysrLG4uaXNTdGFibGUmJihuLmlzU3RhYmxlPSExLG4ub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBpRyhuKXtuLl9uZXN0aW5nLS0sYk4obil9dmFyIENOLHhOPW5ldyBzZSgiIiksTGI9bmV3IHNlKCIiKSxKRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLENOfHwoZnVuY3Rpb24obil7Q049bn0ociksci5hZGRUb1dpbmRvdyhpKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntwdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksbUYoKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSltRigoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSk7ZWxzZXtsZXQgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGk9PiFpLnVwZGF0ZUNifHwhaS51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dChpLnRpbWVvdXRJZCksITEpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChlPT4oe3NvdXJjZTplLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmUuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmUuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhlLGkscil7bGV0IG89LTE7aSYmaT4wJiYobz1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIocz0+cy50aW1lb3V0SWQhPT1vKSxlKHRoaXMuX2RpZFdvcmssdGhpcy5nZXRQZW5kaW5nVGFza3MoKSl9LGkpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmUsdGltZW91dElkOm8sdXBkYXRlQ2I6cn0pfXdoZW5TdGFibGUoZSxpLHIpe2lmKHImJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soZSxpLHIpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihlLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKX1maW5kUHJvdmlkZXJzKGUsaSxyKXtyZXR1cm5bXX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihwdCksUigkRSksUihMYikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLCRFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGUsaSl7dGhpcy5fYXBwbGljYXRpb25zLnNldChlLGkpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGUpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShlKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxpPSEwKXtyZXR1cm4gQ04/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGUsaSk/P251bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKSxvYj1udWxsLEw3PW5ldyBzZSgiQWxsb3dNdWx0aXBsZVRva2VuIiksQjc9bmV3IHNlKCJQbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMiKTtmdW5jdGlvbiB3TihuLHQsZT1bXSl7bGV0IGk9YFBsYXRmb3JtOiAke3R9YCxyPW5ldyBzZShpKTtyZXR1cm4obz1bXSk9PntsZXQgcz1WNygpO2lmKCFzfHxzLmluamVjdG9yLmdldChMNywhMSkpe2xldCBhPVsuLi5lLC4uLm8se3Byb3ZpZGU6cix1c2VWYWx1ZTohMH1dO24/bihhKTpmdW5jdGlvbihuKXtpZihvYiYmIW9iLmdldChMNywhMSkpdGhyb3cgbmV3IE10KDQwMCwhMSk7b2I9bjtsZXQgdD1uLmdldChINyk7KGZ1bmN0aW9uKG4pe2xldCB0PW4uZ2V0KHlOLG51bGwpO3QmJnQuZm9yRWFjaChlPT5lKCkpfSkobil9KGZ1bmN0aW9uKG49W10sdCl7cmV0dXJuIHpuLmNyZWF0ZSh7bmFtZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6a0UsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6QjcsdXNlVmFsdWU6bmV3IFNldChbKCk9Pm9iPW51bGxdKX0sLi4ubl19KX0oYSxpKSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PVY3KCk7aWYoIXQpdGhyb3cgbmV3IE10KDQwMSwhMSk7cmV0dXJuIHR9KCl9fWZ1bmN0aW9uIFY3KCl7cmV0dXJuIG9iPy5nZXQoSDcpPz9udWxsfXZhciBINz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2luamVjdG9yPWUsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZTtyZXR1cm4gZT0ibm9vcCI9PT1uP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEcsdGhpcy5vblN0YWJsZT1uZXcgRyx0aGlzLm9uRXJyb3I9bmV3IEd9cnVuKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0LmFwcGx5KGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHQoKX1ydW5UYXNrKHQsZSxpLHIpe3JldHVybiB0LmFwcGx5KGUsaSl9fTooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBwdCh0KSxlfShpPy5uZ1pvbmUsZnVuY3Rpb24obil7cmV0dXJue2VuYWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lRXZlbnRDb2FsZXNjaW5nKXx8ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lUnVuQ29hbGVzY2luZyl8fCExfX0oaSkpLG89W3twcm92aWRlOnB0LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oKCk9PntsZXQgcz16bi5jcmVhdGUoe3Byb3ZpZGVyczpvLHBhcmVudDp0aGlzLmluamVjdG9yLG5hbWU6ZS5tb2R1bGVUeXBlLm5hbWV9KSxhPWUuY3JlYXRlKHMpLGw9YS5pbmplY3Rvci5nZXQoU3MsbnVsbCk7aWYoIWwpdGhyb3cgbmV3IE10KDQwMiwhMSk7cmV0dXJuIHIucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgYz1yLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OnU9PntsLmhhbmRsZUVycm9yKHUpfX0pO2Eub25EZXN0cm95KCgpPT57ZUUodGhpcy5fbW9kdWxlcyxhKSxjLnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uKG4sdCxlKXt0cnl7bGV0IGk9ZSgpO3JldHVybiBuMChpKT9pLmNhdGNoKHI9Pnt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKHIpKSxyfSk6aX1jYXRjaChpKXt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKGkpKSxpfX0obCxyLCgpPT57bGV0IGM9YS5pbmplY3Rvci5nZXQoWkUpO3JldHVybiBjLnJ1bkluaXRpYWxpemVycygpLGMuZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uKG4peyhmdW5jdGlvbihuLHQpe251bGw9PW4mJmNHKCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIixuLG51bGwsIiE9Iil9KShuKSwic3RyaW5nIj09dHlwZW9mIG4mJihKVz1uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfShhLmluamVjdG9yLmdldChyZCxiRSl8fGJFKSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChhKSxhKSl9KX0pfWJvb3RzdHJhcE1vZHVsZShlLGk9W10pe2xldCByPVU3KHt9LGkpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IGRGKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9KDAsMCxlKS50aGVuKG89PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShvLHIpKX1fbW9kdWxlRG9Cb290c3RyYXAoZSl7bGV0IGk9ZS5pbmplY3Rvci5nZXQoSmMpO2lmKGUuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApZS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKHI9PmkuYm9vdHN0cmFwKHIpKTtlbHNle2lmKCFlLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IE10KDQwMywhMSk7ZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGkpfXRoaXMuX21vZHVsZXMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBNdCg0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goaT0+aSgpKTtsZXQgZT10aGlzLl9pbmplY3Rvci5nZXQoQjcsbnVsbCk7ZSYmKGUuZm9yRWFjaChpPT5pKCkpLGUuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHpuKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIFU3KG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2UoVTcsbik6ey4uLm4sLi4udH19dmFyIEpjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgUXQoYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgUXQoYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57cHQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLG1GKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntwdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9dW4obyxzLnBpcGUoWHMoKSkpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoZSxpKXtsZXQgcyxyPWUgaW5zdGFuY2VvZiBnRTtpZighdGhpcy5faW5qZWN0b3IuZ2V0KFpFKS5kb25lKXRocm93IXImJmZHKGUpLG5ldyBNdCg0MDUsZmFsc2UpO3M9cj9lOnRoaXMuX2luamVjdG9yLmdldChFbykucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHMuY29tcG9uZW50VHlwZSk7bGV0IGE9ZnVuY3Rpb24obil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfShzKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KGlwKSxjPXMuY3JlYXRlKHpuLk5VTEwsW10saXx8cy5zZWxlY3RvcixhKSx1PWMubG9jYXRpb24ubmF0aXZlRWxlbWVudCxkPWMuaW5qZWN0b3IuZ2V0KHhOLG51bGwpO3JldHVybiBkPy5yZWdpc3RlckFwcGxpY2F0aW9uKHUpLGMub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KGMuaG9zdFZpZXcpLGVFKHRoaXMuY29tcG9uZW50cyxjKSxkPy51bnJlZ2lzdGVyQXBwbGljYXRpb24odSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KGMpLGN9dGljaygpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBNdCgxMDEsITEpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IGUgb2YgdGhpcy5fdmlld3MpZS5kZXRlY3RDaGFuZ2VzKCl9Y2F0Y2goZSl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcihlKSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMX19YXR0YWNoVmlldyhlKXtsZXQgaT1lO3RoaXMuX3ZpZXdzLnB1c2goaSksaS5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGUpe2xldCBpPWU7ZUUodGhpcy5fdmlld3MsaSksaS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoZSl7dGhpcy5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGUpLHRoaXMuX2luamVjdG9yLmdldChrMGUsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2gocj0+cihlKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZT0+ZSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGUpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSksKCk9PmVFKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsZSl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgTXQoNDA2LCExKTtsZXQgZT10aGlzLl9pbmplY3RvcjtlLmRlc3Ryb3kmJiFlLmRlc3Ryb3llZCYmZS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKG5wKSxSKFNzKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gZUUobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX12YXIgejc9ITAsajc9ITE7ZnVuY3Rpb24gQmIoKXtyZXR1cm4gajc9ITAsejd9dmFyIG5uPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPWVfZSxufSkoKTtmdW5jdGlvbiBlX2Uobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihSRihuKSYmIWUpe2xldCBpPW9wKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyAkaChpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3ICRoKHRbMTZdLHQpOm51bGx9KE1vKCksWmUoKSwxNj09KDE2Jm4pKX12YXIgTUU9Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHpFKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IHZGKHQpfX0sbl9lPShuLHQpPT50LHZGPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxuX2V9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PG9HKGkscixvKT9lOmksYT1vRyhzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcix1PWwtcjtpZihjIT11KXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgaD1wPG8ubGVuZ3RoP29bcF06b1twXT0wLGY9aCtwO3U8PWYmJmY8YyYmKG9bcF09aCsxKX1vW3MucHJldmlvdXNJbmRleF09dS1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIXpFKHQpKXRocm93IG5ldyBNdCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW1VFKCldKCk7Zm9yKDshKGk9ZS5uZXh0KCkpLmRvbmU7KXQoaS52YWx1ZSl9fSh0LGE9PntzPXRoaXMuX3RyYWNrQnlGbihyLGEpLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQscyk/KGkmJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUsYSxzLHIpKSxPYmplY3QuaXMoZS5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLGEpKTooZT10aGlzLl9taXNtYXRjaChlLGEscyxyKSxpPSEwKSxlPWUuX25leHQscisrfSksdGhpcy5sZW5ndGg9cjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLGkscil7bGV0IG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaSxudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGkscikpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IHlGKGUsaSksbyxyKSx0fV92ZXJpZnlSZWluc2VydGlvbih0LGUsaSxyKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpO3JldHVybiBudWxsIT09bz90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9X3RydW5jYXRlKHQpe2Zvcig7bnVsbCE9PXQ7KXtsZXQgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLGkpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7bGV0IHI9dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fbW92ZUFmdGVyKHQsZSxpKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fYWRkQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsaSksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH1faW5zZXJ0QWZ0ZXIodCxlLGkpe2xldCByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9aSx0fV9yZW1vdmUodCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX1fdW5saW5rKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgZT10Ll9wcmV2LGk9dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPWk6ZS5fbmV4dD1pLG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19LHlGPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fSxTRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2xldCBlPXQudHJhY2tCeUlkLGk9dGhpcy5tYXAuZ2V0KGUpO2l8fChpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX1nZXQodCxlKXtsZXQgaTtmb3IoaT10aGlzLl9oZWFkO251bGwhPT1pO2k9aS5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PWkuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGkudHJhY2tCeUlkLHQpKXJldHVybiBpO3JldHVybiBudWxsfXJlbW92ZSh0KXtsZXQgZT10Ll9wcmV2RHVwLGk9dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1pOmUuX25leHREdXA9aSxudWxsPT09aT90aGlzLl90YWlsPWU6aS5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX0sdGhpcy5tYXAuc2V0KGUsaSkpLGkuYWRkKHQpfWdldCh0LGUpe2xldCByPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2xldCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fTtmdW5jdGlvbiBvRyhuLHQsZSl7bGV0IGk9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1pKXJldHVybiBpO2xldCByPTA7cmV0dXJuIGUmJmk8ZS5sZW5ndGgmJihyPWVbaV0pLGkrdCtyfXZhciBFRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8cE4odCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyB4Rn19LHhGPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fHBOKHQpKSl0aHJvdyBuZXcgTXQoOTAwLCExKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGU9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCwoaSxyKT0+e2lmKGUmJmUua2V5PT09cil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLGkpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7bGV0IG89dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocixpKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsbyl9fSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCBpPWU7bnVsbCE9PWk7aT1pLl9uZXh0UmVtb3ZlZClpPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoaS5rZXkpLGkuX25leHRSZW1vdmVkPWkuX25leHQsaS5wcmV2aW91c1ZhbHVlPWkuY3VycmVudFZhbHVlLGkuY3VycmVudFZhbHVlPW51bGwsaS5fcHJldj1udWxsLGkuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7bGV0IGk9dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9aSx0Ll9wcmV2PWUsaSYmKGkuX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkodCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7bGV0IHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMocixlKTtsZXQgbz1yLl9wcmV2LHM9ci5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9cykscyYmKHMuX3ByZXY9byksci5fbmV4dD1udWxsLHIuX3ByZXY9bnVsbCxyfWxldCBpPW5ldyBDRih0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxpKSxpLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKGkpLGl9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PmUodFtpXSxpKSl9fSxDRj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fTtmdW5jdGlvbiBzRygpe3JldHVybiBuZXcgdGMoW25ldyBNRV0pfXZhciB0Yz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKG51bGwhPWkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxzRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihudWxsIT1pKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6c0d9KSxufSkoKTtmdW5jdGlvbiBhRygpe3JldHVybiBuZXcgVmIoW25ldyBFRV0pfXZhciBWYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKGkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxhRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihpKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6YUd9KSxufSkoKSxpX2U9W25ldyBFRV0scl9lPVtuZXcgTUVdLFc3PShuZXcgdGMocl9lKSxuZXcgVmIoaV9lKSx3TihudWxsLCJjb3JlIixbXSkpLHE3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEpjKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGUxKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn12YXIgZmw9KCgpPT57cmV0dXJuKG49Zmx8fChmbD17fSkpW24uUkFXX1RFWFQ9MF09IlJBV19URVhUIixuW24uRVNDQVBBQkxFX1JBV19URVhUPTFdPSJFU0NBUEFCTEVfUkFXX1RFWFQiLG5bbi5QQVJTQUJMRV9EQVRBPTJdPSJQQVJTQUJMRV9EQVRBIixmbDt2YXIgbn0pKCk7ZnVuY3Rpb24gY2Qobil7aWYoIjoiIT1uWzBdKXJldHVybltudWxsLG5dO2xldCB0PW4uaW5kZXhPZigiOiIsMSk7aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0ICIke259IiBleHBlY3RpbmcgIjpuYW1lc3BhY2U6bmFtZSJgKTtyZXR1cm5bbi5zbGljZSgxLHQpLG4uc2xpY2UodCsxKV19ZnVuY3Rpb24gVU4obil7cmV0dXJuIm5nLWNvbnRhaW5lciI9PT1jZChuKVsxXX1mdW5jdGlvbiB6TihuKXtyZXR1cm4ibmctY29udGVudCI9PT1jZChuKVsxXX1mdW5jdGlvbiBZNyhuKXtyZXR1cm4gbnVsbD09PW4/bnVsbDpjZChuKVswXX1mdW5jdGlvbiBqTihuLHQpe3JldHVybiBuP2A6JHtufToke3R9YDp0fXZhciBYNyx0MSxRbj1jbGFzc3tjb25zdHJ1Y3Rvcih7Y2xvc2VkQnlDaGlsZHJlbjp0LGltcGxpY2l0TmFtZXNwYWNlUHJlZml4OmUsY29udGVudFR5cGU6aT1mbC5QQVJTQUJMRV9EQVRBLGNsb3NlZEJ5UGFyZW50OnI9ITEsaXNWb2lkOm89ITEsaWdub3JlRmlyc3RMZjpzPSExLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTphPSExfT17fSl7dGhpcy5jbG9zZWRCeUNoaWxkcmVuPXt9LHRoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITEsdCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGw9PnRoaXMuY2xvc2VkQnlDaGlsZHJlbltsXT0hMCksdGhpcy5pc1ZvaWQ9byx0aGlzLmNsb3NlZEJ5UGFyZW50PXJ8fG8sdGhpcy5pbXBsaWNpdE5hbWVzcGFjZVByZWZpeD1lfHxudWxsLHRoaXMuY29udGVudFR5cGU9aSx0aGlzLmlnbm9yZUZpcnN0TGY9cyx0aGlzLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZT1hfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4gdGhpcy5pc1ZvaWR8fHQudG9Mb3dlckNhc2UoKWluIHRoaXMuY2xvc2VkQnlDaGlsZHJlbn1nZXRDb250ZW50VHlwZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRoaXMuY29udGVudFR5cGU/KHZvaWQgMD09PXQ/dm9pZCAwOnRoaXMuY29udGVudFR5cGVbdF0pPz90aGlzLmNvbnRlbnRUeXBlLmRlZmF1bHQ6dGhpcy5jb250ZW50VHlwZX19O2Z1bmN0aW9uIGUzKG4pe3JldHVybiB0MXx8KFg3PW5ldyBRbix0MT17YmFzZTpuZXcgUW4oe2lzVm9pZDohMH0pLG1ldGE6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxhcmVhOm5ldyBRbih7aXNWb2lkOiEwfSksZW1iZWQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxsaW5rOm5ldyBRbih7aXNWb2lkOiEwfSksaW1nOm5ldyBRbih7aXNWb2lkOiEwfSksaW5wdXQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxwYXJhbTpuZXcgUW4oe2lzVm9pZDohMH0pLGhyOm5ldyBRbih7aXNWb2lkOiEwfSksYnI6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxzb3VyY2U6bmV3IFFuKHtpc1ZvaWQ6ITB9KSx0cmFjazpuZXcgUW4oe2lzVm9pZDohMH0pLHdicjpuZXcgUW4oe2lzVm9pZDohMH0pLHA6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJsb2NrcXVvdGUiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImhyIiwibWFpbiIsIm5hdiIsIm9sIiwicCIsInByZSIsInNlY3Rpb24iLCJ0YWJsZSIsInVsIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0aGVhZDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il19KSx0Ym9keTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0Zm9vdDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksdHI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsidHIiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRkOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRoOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLGNvbDpuZXcgUW4oe2lzVm9pZDohMH0pLHN2ZzpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmcifSksZm9yZWlnbk9iamVjdDpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmciLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTohMH0pLG1hdGg6bmV3IFFuKHtpbXBsaWNpdE5hbWVzcGFjZVByZWZpeDoibWF0aCJ9KSxsaTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJsaSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksZHQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdfSksZGQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdLGNsb3NlZEJ5UGFyZW50OiEwfSkscmI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsicmIiLCJydCIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxydDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHJ0YzpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxycDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLG9wdGdyb3VwOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbIm9wdGdyb3VwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxvcHRpb246bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsib3B0aW9uIiwib3B0Z3JvdXAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHByZTpuZXcgUW4oe2lnbm9yZUZpcnN0TGY6ITB9KSxsaXN0aW5nOm5ldyBRbih7aWdub3JlRmlyc3RMZjohMH0pLHN0eWxlOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuUkFXX1RFWFR9KSxzY3JpcHQ6bmV3IFFuKHtjb250ZW50VHlwZTpmbC5SQVdfVEVYVH0pLHRpdGxlOm5ldyBRbih7Y29udGVudFR5cGU6e2RlZmF1bHQ6ZmwuRVNDQVBBQkxFX1JBV19URVhULHN2ZzpmbC5QQVJTQUJMRV9EQVRBfX0pLHRleHRhcmVhOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuRVNDQVBBQkxFX1JBV19URVhULGlnbm9yZUZpcnN0TGY6ITB9KX0pLHQxW25dPz90MVtuLnRvTG93ZXJDYXNlKCldPz9YN312YXIgUTc9bmV3IFJlZ0V4cCgiKFxcOm5vdFxcKCl8KChbXFwuXFwjXT8pWy1cXHddKyl8KD86XFxbKFstLlxcdypcXFxcJF0rKSg/Oj0oW1wiJ10/KShbXlxcXVwiJ10qKVxcNSk/XFxdKXwoXFwpKXwoXFxzKixcXHMqKSIsImciKSx1ZD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudD1udWxsLHRoaXMuY2xhc3NOYW1lcz1bXSx0aGlzLmF0dHJzPVtdLHRoaXMubm90U2VsZWN0b3JzPVtdfXN0YXRpYyBwYXJzZSh0KXtsZXQgbyxlPVtdLGk9KGwsYyk9PntjLm5vdFNlbGVjdG9ycy5sZW5ndGg+MCYmIWMuZWxlbWVudCYmMD09Yy5jbGFzc05hbWVzLmxlbmd0aCYmMD09Yy5hdHRycy5sZW5ndGgmJihjLmVsZW1lbnQ9IioiKSxsLnB1c2goYyl9LHI9bmV3IHVkLHM9cixhPSExO2ZvcihRNy5sYXN0SW5kZXg9MDtvPVE3LmV4ZWModCk7KXtpZihvWzFdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTmVzdGluZyA6bm90IGluIGEgc2VsZWN0b3IgaXMgbm90IGFsbG93ZWQiKTthPSEwLHM9bmV3IHVkLHIubm90U2VsZWN0b3JzLnB1c2gocyl9bGV0IGw9b1syXTtpZihsKXtsZXQgdT1vWzNdOyIjIj09PXU/cy5hZGRBdHRyaWJ1dGUoImlkIixsLnNsaWNlKDEpKToiLiI9PT11P3MuYWRkQ2xhc3NOYW1lKGwuc2xpY2UoMSkpOnMuc2V0RWxlbWVudChsKX1sZXQgYz1vWzRdO2lmKGMmJnMuYWRkQXR0cmlidXRlKHMudW5lc2NhcGVBdHRyaWJ1dGUoYyksb1s2XSksb1s3XSYmKGE9ITEscz1yKSxvWzhdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgc2VsZWN0b3JzIGluIDpub3QgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpKGUscikscj1zPW5ldyB1ZH19cmV0dXJuIGkoZSxyKSxlfXVuZXNjYXBlQXR0cmlidXRlKHQpe2xldCBlPSIiLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBvPXQuY2hhckF0KHIpO2lmKCJcXCIhPT1vKXtpZigiJCI9PT1vJiYhaSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIGF0dHJpYnV0ZSBzZWxlY3RvciAiJHt0fSIuIFVuZXNjYXBlZCAiJCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGVzY2FwZSB3aXRoICJcXCQiLmApO2k9ITEsZSs9b31lbHNlIGk9ITB9cmV0dXJuIGV9ZXNjYXBlQXR0cmlidXRlKHQpe3JldHVybiB0LnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC9cJC9nLCJcXCQiKX1pc0VsZW1lbnRTZWxlY3Rvcigpe3JldHVybiB0aGlzLmhhc0VsZW1lbnRTZWxlY3RvcigpJiYwPT10aGlzLmNsYXNzTmFtZXMubGVuZ3RoJiYwPT10aGlzLmF0dHJzLmxlbmd0aCYmMD09PXRoaXMubm90U2VsZWN0b3JzLmxlbmd0aH1oYXNFbGVtZW50U2VsZWN0b3IoKXtyZXR1cm4hIXRoaXMuZWxlbWVudH1zZXRFbGVtZW50KHQ9bnVsbCl7dGhpcy5lbGVtZW50PXR9Z2V0TWF0Y2hpbmdFbGVtZW50VGVtcGxhdGUoKXtsZXQgdD10aGlzLmVsZW1lbnR8fCJkaXYiLGU9dGhpcy5jbGFzc05hbWVzLmxlbmd0aD4wP2AgY2xhc3M9IiR7dGhpcy5jbGFzc05hbWVzLmpvaW4oIiAiKX0iYDoiIixpPSIiO2ZvcihsZXQgcj0wO3I8dGhpcy5hdHRycy5sZW5ndGg7cis9MilpKz1gICR7dGhpcy5hdHRyc1tyXX0keyIiIT09dGhpcy5hdHRyc1tyKzFdP2A9IiR7dGhpcy5hdHRyc1tyKzFdfSJgOiIifWA7cmV0dXJuIGUzKHQpLmlzVm9pZD9gPCR7dH0ke2V9JHtpfS8+YDpgPCR7dH0ke2V9JHtpfT48LyR7dH0+YH1nZXRBdHRycygpe2xldCB0PVtdO3JldHVybiB0aGlzLmNsYXNzTmFtZXMubGVuZ3RoPjAmJnQucHVzaCgiY2xhc3MiLHRoaXMuY2xhc3NOYW1lcy5qb2luKCIgIikpLHQuY29uY2F0KHRoaXMuYXR0cnMpfWFkZEF0dHJpYnV0ZSh0LGU9IiIpe3RoaXMuYXR0cnMucHVzaCh0LGUmJmUudG9Mb3dlckNhc2UoKXx8IiIpfWFkZENsYXNzTmFtZSh0KXt0aGlzLmNsYXNzTmFtZXMucHVzaCh0LnRvTG93ZXJDYXNlKCkpfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5lbGVtZW50fHwiIjtpZih0aGlzLmNsYXNzTmFtZXMmJnRoaXMuY2xhc3NOYW1lcy5mb3JFYWNoKGU9PnQrPWAuJHtlfWApLHRoaXMuYXR0cnMpZm9yKGxldCBlPTA7ZTx0aGlzLmF0dHJzLmxlbmd0aDtlKz0yKXtsZXQgaT10aGlzLmVzY2FwZUF0dHJpYnV0ZSh0aGlzLmF0dHJzW2VdKSxyPXRoaXMuYXR0cnNbZSsxXTt0Kz1gWyR7aX0ke3I/Ij0iK3I6IiJ9XWB9cmV0dXJuIHRoaXMubm90U2VsZWN0b3JzLmZvckVhY2goZT0+dCs9YDpub3QoJHtlfSlgKSx0fX0sb2Q9KCgpPT57cmV0dXJuKG49b2R8fChvZD17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixvZDt2YXIgbn0pKCkscWI9KCgpPT57cmV0dXJuKG49cWJ8fChxYj17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixxYjt2YXIgbn0pKCksWXI9KCgpPT57cmV0dXJuKG49WXJ8fChZcj17fSkpW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJMIixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLFlyO3ZhciBufSkoKTtmdW5jdGlvbiBsX2Uobil7bGV0IHQ9ZnVuY3Rpb24obil7bGV0IHQ9bi5jbGFzc05hbWVzJiZuLmNsYXNzTmFtZXMubGVuZ3RoP1s4LC4uLm4uY2xhc3NOYW1lc106W107cmV0dXJuW24uZWxlbWVudCYmIioiIT09bi5lbGVtZW50P24uZWxlbWVudDoiIiwuLi5uLmF0dHJzLC4uLnRdfShuKSxlPW4ubm90U2VsZWN0b3JzJiZuLm5vdFNlbGVjdG9ycy5sZW5ndGg/bi5ub3RTZWxlY3RvcnMubWFwKGk9PmZ1bmN0aW9uKG4pe2xldCB0PW4uY2xhc3NOYW1lcyYmbi5jbGFzc05hbWVzLmxlbmd0aD9bOCwuLi5uLmNsYXNzTmFtZXNdOltdO3JldHVybiBuLmVsZW1lbnQ/WzUsbi5lbGVtZW50LC4uLm4uYXR0cnMsLi4udF06bi5hdHRycy5sZW5ndGg/WzMsLi4ubi5hdHRycywuLi50XTpuLmNsYXNzTmFtZXMmJm4uY2xhc3NOYW1lcy5sZW5ndGg/WzksLi4ubi5jbGFzc05hbWVzXTpbXX0oaSkpOltdO3JldHVybiB0LmNvbmNhdCguLi5lKX1mdW5jdGlvbiB0MyhuKXtyZXR1cm4gbj91ZC5wYXJzZShuKS5tYXAobF9lKTpbXX12YXIgY19lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBtcShuLHQsZSl7bGV0IGk9bi5pbmRleE9mKHQpO3JldHVybi0xPT1pP2U6W24uc2xpY2UoMCxpKS50cmltKCksbi5zbGljZShpKzEpLnRyaW0oKV19ZnVuY3Rpb24gaDEobil7dGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBFcnJvcjogJHtufWApfWZ1bmN0aW9uIG4zKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uLmNoYXJDb2RlQXQoZSk7aWYoaT49NTUyOTYmJmk8PTU2MzE5JiZuLmxlbmd0aD5lKzEpe2xldCByPW4uY2hhckNvZGVBdChlKzEpO3I+PTU2MzIwJiZyPD01NzM0MyYmKGUrKyxpPShpLTU1Mjk2PDwxMCkrci01NjMyMCs2NTUzNil9aTw9MTI3P3QucHVzaChpKTppPD0yMDQ3P3QucHVzaChpPj42JjMxfDE5Miw2MyZpfDEyOCk6aTw9NjU1MzU/dC5wdXNoKGk+PjEyfDIyNCxpPj42JjYzfDEyOCw2MyZpfDEyOCk6aTw9MjA5NzE1MSYmdC5wdXNoKGk+PjE4Jjd8MjQwLGk+PjEyJjYzfDEyOCxpPj42JjYzfDEyOCw2MyZpfDEyOCl9cmV0dXJuIHR9ZnVuY3Rpb24gZ3Eobil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIlsiK24ubWFwKGdxKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1uKXJldHVybiIiK247aWYobi5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtuLm92ZXJyaWRkZW5OYW1lfWA7aWYobi5uYW1lKXJldHVybmAke24ubmFtZX1gO2lmKCFuLnRvU3RyaW5nKXJldHVybiJvYmplY3QiO2xldCB0PW4udG9TdHJpbmcoKTtpZihudWxsPT10KXJldHVybiIiK3Q7bGV0IGU9dC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09ZT90OnQuc3Vic3RyaW5nKDAsZSl9dmFyIHAwPSgoKT0+dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksbXA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1zdGF0aWMgemVybygpe3JldHVybiBuZXcgbXAoWzBdKX1zdGF0aWMgb25lKCl7cmV0dXJuIG5ldyBtcChbMV0pfWNsb25lKCl7cmV0dXJuIG5ldyBtcCh0aGlzLmRpZ2l0cy5zbGljZSgpKX1hZGQodCl7bGV0IGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLmFkZFRvU2VsZih0KSxlfWFkZFRvU2VsZih0KXtsZXQgZT1NYXRoLm1heCh0aGlzLmRpZ2l0cy5sZW5ndGgsdC5kaWdpdHMubGVuZ3RoKSxpPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89aTtyPHRoaXMuZGlnaXRzLmxlbmd0aCYmKG8rPXRoaXMuZGlnaXRzW3JdKSxyPHQuZGlnaXRzLmxlbmd0aCYmKG8rPXQuZGlnaXRzW3JdKSxvPj0xMD8odGhpcy5kaWdpdHNbcl09by0xMCxpPTEpOih0aGlzLmRpZ2l0c1tyXT1vLGk9MCl9aT4wJiYodGhpcy5kaWdpdHNbZV09MSl9dG9TdHJpbmcoKXtsZXQgdD0iIjtmb3IobGV0IGU9dGhpcy5kaWdpdHMubGVuZ3RoLTE7ZT49MDtlLS0pdCs9dGhpcy5kaWdpdHNbZV07cmV0dXJuIHR9fSxmMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvd2VyT2ZUd29zPVt0XX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnBvd2VyT2ZUd29zWzBdfW11bHRpcGx5QnkodCl7bGV0IGU9bXAuemVybygpO3JldHVybiB0aGlzLm11bHRpcGx5QnlBbmRBZGRUbyh0LGUpLGV9bXVsdGlwbHlCeUFuZEFkZFRvKHQsZSl7Zm9yKGxldCBpPTA7MCE9PXQ7dD4+Pj0xLGkrKylpZigxJnQpe2xldCByPXRoaXMuZ2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byhpKTtlLmFkZFRvU2VsZihyKX19Z2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byh0KXtmb3IobGV0IGU9dGhpcy5wb3dlck9mVHdvcy5sZW5ndGg7ZTw9dDtlKyspe2xldCBpPXRoaXMucG93ZXJPZlR3b3NbZS0xXTt0aGlzLnBvd2VyT2ZUd29zW2VdPWkuYWRkKGkpfXJldHVybiB0aGlzLnBvd2VyT2ZUd29zW3RdfX07ZnVuY3Rpb24gbV9lKG4pe3JldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uMyhuKSxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5sZW5ndGgrMz4+PjIsaT1bXTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09b2Yobiw0KnIsdCk7cmV0dXJuIGl9KHQsbmMuQmlnKSxpPTgqdC5sZW5ndGgscj1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8ODA7aSsrKWUucHVzaCh1bmRlZmluZWQpO3JldHVybiBlfSgpLG89MTczMjU4NDE5MyxzPTQwMjMyMzM0MTcsYT0yNTYyMzgzMTAyLGw9MjcxNzMzODc4LGM9MzI4NTM3NzUyMDtlW2k+PjVdfD0xMjg8PDI0LWklMzIsZVsxNSsoaSs2ND4+OTw8NCldPWk7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kz0xNil7bGV0IGQ9byxwPXMsaD1hLGY9bCxtPWM7Zm9yKGxldCBDPTA7Qzw4MDtDKyspe3JbQ109QzwxNj9lW3UrQ106TU4ocltDLTNdXnJbQy04XV5yW0MtMTRdXnJbQy0xNl0sMSk7bGV0IF89Yl9lKEMscyxhLGwpLHk9X1swXSxJPV9bMV0sQT1bTU4obyw1KSx5LGMsSSxyW0NdXS5yZWR1Y2UoQXMpO2M9bCxsPWEsYT1NTihzLDMwKSxzPW8sbz1BfW89QXMobyxkKSxzPUFzKHMscCksYT1BcyhhLGgpLGw9QXMobCxmKSxjPUFzKGMsbSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1ZTihuLGUpO3QrPShpPj4+NCkudG9TdHJpbmcoMTYpKygxNSZpKS50b1N0cmluZygxNil9cmV0dXJuIHQudG9Mb3dlckNhc2UoKX0oZnVuY3Rpb24obil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT50LmNvbmNhdChmdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPDQ7ZSsrKXQucHVzaChuPj4+OCooMy1lKSYyNTUpO3JldHVybiB0fShlKSksW10pfShbbyxzLGEsbCxjXSkpfShmdW5jdGlvbihuKXtyZXR1cm4gbi5tYXAodD0+dC52aXNpdChfX2UsbnVsbCkpfShuLm5vZGVzKS5qb2luKCIiKStgWyR7bi5tZWFuaW5nfV1gKX1mdW5jdGlvbiBfcShuKXtsZXQgdD1uZXcgcU47cmV0dXJuIFkxKG4ubm9kZXMubWFwKGk9PmkudmlzaXQodCxudWxsKSkuam9pbigiIiksbi5tZWFuaW5nKX12YXIgbTE9Y2xhc3N7dmlzaXRUZXh0KHQsZSl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCxlKXtyZXR1cm5gWyR7dC5jaGlsZHJlbi5tYXAoaT0+aS52aXNpdCh0aGlzKSkuam9pbigiLCAiKX1dYH12aXNpdEljdSh0LGUpe2xldCBpPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9ufSwgJHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQuaXNWb2lkP2A8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ii8+YDpgPHBoIHRhZyBuYW1lPSIke3Quc3RhcnROYW1lfSI+JHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfTwvcGggbmFtZT0iJHt0LmNsb3NlTmFtZX0iPmB9dmlzaXRQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0LnZhbHVlP2A8cGggbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWV9PC9waD5gOmA8cGggbmFtZT0iJHt0Lm5hbWV9Ii8+YH12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuYDxwaCBpY3UgbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWUudmlzaXQodGhpcyl9PC9waD5gfX0sX19lPW5ldyBtMSxxTj1jbGFzcyBleHRlbmRzIG0xe3Zpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH19O2Z1bmN0aW9uIGJfZShuLHQsZSxpKXtyZXR1cm4gbjwyMD9bdCZlfH50JmksMTUxODUwMDI0OV06bjw0MD9bdF5lXmksMTg1OTc3NTM5M106bjw2MD9bdCZlfHQmaXxlJmksMjQwMDk1OTcwOF06W3ReZV5pLDMzOTU0Njk3ODJdfWZ1bmN0aW9uIEo3KG4pe2xldCB0PW4zKG4pLGU9JDcodCwwKSxpPSQ3KHQsMTAyMDcyKTtyZXR1cm4gMD09ZSYmKDA9PWl8fDE9PWkpJiYoZV49MzE5NzkwMDYzLGlePS0xODAxNDEwMjY0KSxbZSxpXX1mdW5jdGlvbiBZMShuLHQ9IiIpe2xldCBlPUo3KG4pO2lmKHQpe2xldCBvPUo3KHQpO2U9ZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLHI9dFswXSxzPXZxKG5bMV0sdFsxXSksYT1zWzBdLGw9c1sxXTtyZXR1cm5bQXMoQXMoZSxyKSxhKSxsXX0oZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLGk9blsxXTtyZXR1cm5bZTw8MXxpPj4+MzEsaTw8MXxlPj4+MzFdfShlKSxvKX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT10OS50b1RoZVBvd2VyT2YoMCkubXVsdGlwbHlCeSh0KTtyZXR1cm4gdDkudG9UaGVQb3dlck9mKDQpLm11bHRpcGx5QnlBbmRBZGRUbyhuLGUpLGUudG9TdHJpbmcoKX0oMjE0NzQ4MzY0NyZlWzBdLGVbMV0pfWZ1bmN0aW9uICQ3KG4sdCl7bGV0IHIsZT0yNjU0NDM1NzY5LGk9MjY1NDQzNTc2OSxvPW4ubGVuZ3RoO2ZvcihyPTA7cisxMjw9bztyKz0xMil7ZT1BcyhlLG9mKG4scixuYy5MaXR0bGUpKSxpPUFzKGksb2YobixyKzQsbmMuTGl0dGxlKSk7bGV0IHM9ZTkoZSxpLHQ9QXModCxvZihuLHIrOCxuYy5MaXR0bGUpKSk7ZT1zWzBdLGk9c1sxXSx0PXNbMl19cmV0dXJuIGU9QXMoZSxvZihuLHIsbmMuTGl0dGxlKSksaT1BcyhpLG9mKG4scis0LG5jLkxpdHRsZSkpLHQ9QXModCxvKSxlOShlLGksdD1Bcyh0LG9mKG4scis4LG5jLkxpdHRsZSk8PDgpKVsyXX1mdW5jdGlvbiBlOShuLHQsZSl7cmV0dXJuIG49a28obix0KSxuPWtvKG4sZSksbl49ZT4+PjEzLHQ9a28odCxlKSx0PWtvKHQsbiksdF49bjw8OCxlPWtvKGUsbiksZT1rbyhlLHQpLGVePXQ+Pj4xMyxuPWtvKG4sdCksbj1rbyhuLGUpLG5ePWU+Pj4xMix0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDE2LGU9a28oZSxuKSxlPWtvKGUsdCksZV49dD4+PjUsbj1rbyhuLHQpLG49a28obixlKSxuXj1lPj4+Myx0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDEwLGU9a28oZSxuKSxlPWtvKGUsdCksW24sdCxlXj10Pj4+MTVdfXZhciBuYz0oKCk9PntyZXR1cm4obj1uY3x8KG5jPXt9KSlbbi5MaXR0bGU9MF09IkxpdHRsZSIsbltuLkJpZz0xXT0iQmlnIixuYzt2YXIgbn0pKCk7ZnVuY3Rpb24gQXMobix0KXtyZXR1cm4gdnEobix0KVsxXX1mdW5jdGlvbiB2cShuLHQpe2xldCBlPSg2NTUzNSZuKSsoNjU1MzUmdCksaT0obj4+PjE2KSsodD4+PjE2KSsoZT4+PjE2KTtyZXR1cm5baT4+PjE2LGk8PDE2fDY1NTM1JmVdfWZ1bmN0aW9uIGtvKG4sdCl7bGV0IGU9KDY1NTM1Jm4pLSg2NTUzNSZ0KTtyZXR1cm4obj4+MTYpLSh0Pj4xNikrKGU+PjE2KTw8MTZ8NjU1MzUmZX1mdW5jdGlvbiBNTihuLHQpe3JldHVybiBuPDx0fG4+Pj4zMi10fWZ1bmN0aW9uIFlOKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoPzA6blt0XX1mdW5jdGlvbiBvZihuLHQsZSl7bGV0IGk9MDtpZihlPT09bmMuQmlnKWZvcihsZXQgcj0wO3I8NDtyKyspaSs9WU4obix0K3IpPDwyNC04KnI7ZWxzZSBmb3IobGV0IHI9MDtyPDQ7cisrKWkrPVlOKG4sdCtyKTw8OCpyO3JldHVybiBpfXZhciB0OT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBmMShtcC5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgZjEoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KSxhMT0oKCk9PntyZXR1cm4obj1hMXx8KGExPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uQ29uc3Q9MV09IkNvbnN0IixhMTt2YXIgbn0pKCksZzE9Y2xhc3N7Y29uc3RydWN0b3IodD1hMS5Ob25lKXt0aGlzLm1vZGlmaWVycz10fWhhc01vZGlmaWVyKHQpe3JldHVybiAwIT0odGhpcy5tb2RpZmllcnMmdCl9fSxvYz0oKCk9PntyZXR1cm4obj1vY3x8KG9jPXt9KSlbbi5EeW5hbWljPTBdPSJEeW5hbWljIixuW24uQm9vbD0xXT0iQm9vbCIsbltuLlN0cmluZz0yXT0iU3RyaW5nIixuW24uSW50PTNdPSJJbnQiLG5bbi5OdW1iZXI9NF09Ik51bWJlciIsbltuLkZ1bmN0aW9uPTVdPSJGdW5jdGlvbiIsbltuLkluZmVycmVkPTZdPSJJbmZlcnJlZCIsbltuLk5vbmU9N109Ik5vbmUiLG9jO3ZhciBufSkoKSxzdT1jbGFzcyBleHRlbmRzIGcxe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZSksdGhpcy5uYW1lPXR9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRCdWlsdGluVHlwZSh0aGlzLGUpfX0sc2M9Y2xhc3MgZXh0ZW5kcyBnMXtjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXtzdXBlcihlKSx0aGlzLnZhbHVlPXQsdGhpcy50eXBlUGFyYW1zPWl9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uVHlwZSh0aGlzLGUpfX0sVjA9bmV3IHN1KG9jLkR5bmFtaWMpLGlhPW5ldyBzdShvYy5JbmZlcnJlZCksRF9lPW5ldyBzdShvYy5Cb29sKSxreD0obmV3IHN1KG9jLkludCksbmV3IHN1KG9jLk51bWJlcikpLHlxPW5ldyBzdShvYy5TdHJpbmcpLGRkPShuZXcgc3Uob2MuRnVuY3Rpb24pLG5ldyBzdShvYy5Ob25lKSkscGY9KCgpPT57cmV0dXJuKG49cGZ8fChwZj17fSkpW24uTWludXM9MF09Ik1pbnVzIixuW24uUGx1cz0xXT0iUGx1cyIscGY7dmFyIG59KSgpLGhuPSgoKT0+e3JldHVybihuPWhufHwoaG49e30pKVtuLkVxdWFscz0wXT0iRXF1YWxzIixuW24uTm90RXF1YWxzPTFdPSJOb3RFcXVhbHMiLG5bbi5JZGVudGljYWw9Ml09IklkZW50aWNhbCIsbltuLk5vdElkZW50aWNhbD0zXT0iTm90SWRlbnRpY2FsIixuW24uTWludXM9NF09Ik1pbnVzIixuW24uUGx1cz01XT0iUGx1cyIsbltuLkRpdmlkZT02XT0iRGl2aWRlIixuW24uTXVsdGlwbHk9N109Ik11bHRpcGx5IixuW24uTW9kdWxvPThdPSJNb2R1bG8iLG5bbi5BbmQ9OV09IkFuZCIsbltuLk9yPTEwXT0iT3IiLG5bbi5CaXR3aXNlQW5kPTExXT0iQml0d2lzZUFuZCIsbltuLkxvd2VyPTEyXT0iTG93ZXIiLG5bbi5Mb3dlckVxdWFscz0xM109Ikxvd2VyRXF1YWxzIixuW24uQmlnZ2VyPTE0XT0iQmlnZ2VyIixuW24uQmlnZ2VyRXF1YWxzPTE1XT0iQmlnZ2VyRXF1YWxzIixuW24uTnVsbGlzaENvYWxlc2NlPTE2XT0iTnVsbGlzaENvYWxlc2NlIixobjt2YXIgbn0pKCk7ZnVuY3Rpb24gYnEobix0LGUpe2xldCBpPW4ubGVuZ3RoO2lmKGkhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGk7cisrKWlmKCFlKG5bcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbGMobix0KXtyZXR1cm4gYnEobix0LChlLGkpPT5lLmlzRXF1aXZhbGVudChpKSl9dmFyIENyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50eXBlPXR8fG51bGwsdGhpcy5zb3VyY2VTcGFuPWV8fG51bGx9cHJvcCh0LGUpe3JldHVybiBuZXcgYjAodGhpcyx0LG51bGwsZSl9a2V5KHQsZSxpKXtyZXR1cm4gbmV3IHN4KHRoaXMsdCxlLGkpfWNhbGxGbih0LGUsaSl7cmV0dXJuIG5ldyB2cCh0aGlzLHQsbnVsbCxlLGkpfWluc3RhbnRpYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGdmKHRoaXMsdCxlLGkpfWNvbmRpdGlvbmFsKHQsZT1udWxsLGkpe3JldHVybiBuZXcgaXgodGhpcyx0LGUsbnVsbCxpKX1lcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLkVxdWFscyx0aGlzLHQsbnVsbCxlKX1ub3RFcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdEVxdWFscyx0aGlzLHQsbnVsbCxlKX1pZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLklkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1ub3RJZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdElkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1taW51cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTWludXMsdGhpcyx0LG51bGwsZSl9cGx1cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uUGx1cyx0aGlzLHQsbnVsbCxlKX1kaXZpZGUodCxlKXtyZXR1cm4gbmV3IGxyKGhuLkRpdmlkZSx0aGlzLHQsbnVsbCxlKX1tdWx0aXBseSh0LGUpe3JldHVybiBuZXcgbHIoaG4uTXVsdGlwbHksdGhpcyx0LG51bGwsZSl9bW9kdWxvKHQsZSl7cmV0dXJuIG5ldyBscihobi5Nb2R1bG8sdGhpcyx0LG51bGwsZSl9YW5kKHQsZSl7cmV0dXJuIG5ldyBscihobi5BbmQsdGhpcyx0LG51bGwsZSl9Yml0d2lzZUFuZCh0LGUsaT0hMCl7cmV0dXJuIG5ldyBscihobi5CaXR3aXNlQW5kLHRoaXMsdCxudWxsLGUsaSl9b3IodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk9yLHRoaXMsdCxudWxsLGUpfWxvd2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5Mb3dlcix0aGlzLHQsbnVsbCxlKX1sb3dlckVxdWFscyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTG93ZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9YmlnZ2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXIsdGhpcyx0LG51bGwsZSl9YmlnZ2VyRXF1YWxzKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9aXNCbGFuayh0KXtyZXR1cm4gdGhpcy5lcXVhbHMoYzEsdCl9bnVsbGlzaENvYWxlc2NlKHQsZSl7cmV0dXJuIG5ldyBscihobi5OdWxsaXNoQ29hbGVzY2UsdGhpcyx0LG51bGwsZSl9dG9TdG10KCl7cmV0dXJuIG5ldyBsdSh0aGlzLG51bGwpfX0sbWY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLm5hbWU9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtZiYmdGhpcy5uYW1lPT09dC5uYW1lfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRWYXJFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgJGIodGhpcy5uYW1lLHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdjA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmV4cHI9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFR5cGVvZkV4cHIodGhpcyxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2MCYmdC5leHByLmlzRXF1aXZhbGVudCh0aGlzLmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4gdGhpcy5leHByLmlzQ29uc3RhbnQoKX19LERuPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5ub2RlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG4mJnRoaXMubm9kZT09PXQubm9kZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcmFwcGVkTm9kZUV4cHIodGhpcyxlKX19LCRiPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaXx8ZS50eXBlLHIpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiAkYiYmdGhpcy5uYW1lPT09dC5uYW1lJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZVZhckV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBhdSh0aGlzLm5hbWUsdGhpcy52YWx1ZSx0LGUsdGhpcy5zb3VyY2VTcGFuKX10b0NvbnN0RGVjbCgpe3JldHVybiB0aGlzLnRvRGVjbFN0bXQoaWEsa2EuRmluYWwpfX0sZXg9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHJ8fGkudHlwZSxvKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5pbmRleD1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBleCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZUtleUV4cHIodGhpcyxlKX19LHR4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihyfHxpLnR5cGUsbyksdGhpcy5yZWNlaXZlcj10LHRoaXMubmFtZT1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0eCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMubmFtZT09PXQubmFtZSYmdGhpcy52YWx1ZS5pc0VxdWl2YWxlbnQodC52YWx1ZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0V3JpdGVQcm9wRXhwcih0aGlzLGUpfX0sdnA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3N1cGVyKGksciksdGhpcy5mbj10LHRoaXMuYXJncz1lLHRoaXMucHVyZT1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHZwJiZ0aGlzLmZuLmlzRXF1aXZhbGVudCh0LmZuKSYmbGModGhpcy5hcmdzLHQuYXJncykmJnRoaXMucHVyZT09PXQucHVyZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodGhpcyxlKX19LG54PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnRhZz10LHRoaXMudGVtcGxhdGU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBueCYmdGhpcy50YWcuaXNFcXVpdmFsZW50KHQudGFnKSYmYnEodGhpcy50ZW1wbGF0ZS5lbGVtZW50cyx0LnRlbXBsYXRlLmVsZW1lbnRzLChlLGkpPT5lLnRleHQ9PT1pLnRleHQpJiZsYyh0aGlzLnRlbXBsYXRlLmV4cHJlc3Npb25zLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0aGlzLGUpfX0sZ2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihpLHIpLHRoaXMuY2xhc3NFeHByPXQsdGhpcy5hcmdzPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZ2YmJnRoaXMuY2xhc3NFeHByLmlzRXF1aXZhbGVudCh0LmNsYXNzRXhwcikmJmxjKHRoaXMuYXJncyx0LmFyZ3MpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdEluc3RhbnRpYXRlRXhwcih0aGlzLGUpfX0sRmE9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLnZhbHVlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRmEmJnRoaXMudmFsdWU9PT10LnZhbHVlfWlzQ29uc3RhbnQoKXtyZXR1cm4hMH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExpdGVyYWxFeHByKHRoaXMsZSl9fSxfMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZWxlbWVudHM9dCx0aGlzLmV4cHJlc3Npb25zPWV9fSx2MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5yYXdUZXh0PWk/P2U/LnRvU3RyaW5nKCk/P1FOKGwxKHQpKX19LGhmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWV9fSxoMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5hc3NvY2lhdGVkTWVzc2FnZT1pfX0sWE49Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHlxLG8pLHRoaXMubWV0YUJsb2NrPXQsdGhpcy5tZXNzYWdlUGFydHM9ZSx0aGlzLnBsYWNlSG9sZGVyTmFtZXM9aSx0aGlzLmV4cHJlc3Npb25zPXJ9aXNFcXVpdmFsZW50KHQpe3JldHVybiExfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExvY2FsaXplZFN0cmluZyh0aGlzLGUpfXNlcmlhbGl6ZUkxOG5IZWFkKCl7bGV0IHQ9dGhpcy5tZXRhQmxvY2suZGVzY3JpcHRpb258fCIiO3JldHVybiB0aGlzLm1ldGFCbG9jay5tZWFuaW5nJiYodD1gJHt0aGlzLm1ldGFCbG9jay5tZWFuaW5nfXwke3R9YCksdGhpcy5tZXRhQmxvY2suY3VzdG9tSWQmJih0PWAke3R9QEAke3RoaXMubWV0YUJsb2NrLmN1c3RvbUlkfWApLHRoaXMubWV0YUJsb2NrLmxlZ2FjeUlkcyYmdGhpcy5tZXRhQmxvY2subGVnYWN5SWRzLmZvckVhY2goZT0+e3Q9YCR7dH1cdTI0MWYke2V9YH0pLGk5KHQsdGhpcy5tZXNzYWdlUGFydHNbMF0udGV4dCx0aGlzLmdldE1lc3NhZ2VQYXJ0U291cmNlU3BhbigwKSl9Z2V0TWVzc2FnZVBhcnRTb3VyY2VTcGFuKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VQYXJ0c1t0XT8uc291cmNlU3Bhbj8/dGhpcy5zb3VyY2VTcGFufWdldFBsYWNlaG9sZGVyU291cmNlU3Bhbih0KXtyZXR1cm4gdGhpcy5wbGFjZUhvbGRlck5hbWVzW3RdPy5zb3VyY2VTcGFuPz90aGlzLmV4cHJlc3Npb25zW3RdPy5zb3VyY2VTcGFuPz90aGlzLnNvdXJjZVNwYW59c2VyaWFsaXplSTE4blRlbXBsYXRlUGFydCh0KXtsZXQgZT10aGlzLnBsYWNlSG9sZGVyTmFtZXNbdC0xXSxpPXRoaXMubWVzc2FnZVBhcnRzW3RdLHI9ZS50ZXh0O3JldHVybiAwPT09ZS5hc3NvY2lhdGVkTWVzc2FnZT8ubGVnYWN5SWRzLmxlbmd0aCYmKHIrPWBAQCR7WTEoZS5hc3NvY2lhdGVkTWVzc2FnZS5tZXNzYWdlU3RyaW5nLGUuYXNzb2NpYXRlZE1lc3NhZ2UubWVhbmluZyl9YCksaTkocixpLnRleHQsdGhpcy5nZXRNZXNzYWdlUGFydFNvdXJjZVNwYW4odCkpfX0sbDE9bj0+bi5yZXBsYWNlKC9cXC9nLCJcXFxcIiksUl9lPW49Pm4ucmVwbGFjZSgvXjovLCJcXDoiKSxPX2U9bj0+bi5yZXBsYWNlKC86L2csIlxcOiIpLFFOPW49Pm4ucmVwbGFjZSgvYC9nLCJcXGAiKS5yZXBsYWNlKC9cJHsvZywiJFxceyIpO2Z1bmN0aW9uIGk5KG4sdCxlKXtyZXR1cm4iIj09PW4/e2Nvb2tlZDp0LHJhdzpRTihSX2UobDEodCkpKSxyYW5nZTplfTp7Y29va2VkOmA6JHtufToke3R9YCxyYXc6UU4oYDoke09fZShsMShuKSl9OiR7bDEodCl9YCkscmFuZ2U6ZX19dmFyIHkwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnR5cGVQYXJhbXM9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5MCYmdGhpcy52YWx1ZS5uYW1lPT09dC52YWx1ZS5uYW1lJiZ0aGlzLnZhbHVlLm1vZHVsZU5hbWU9PT10LnZhbHVlLm1vZHVsZU5hbWUmJnRoaXMudmFsdWUucnVudGltZT09PXQudmFsdWUucnVudGltZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRFeHRlcm5hbEV4cHIodGhpcyxlKX19LGl4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyLG8pe3N1cGVyKHJ8fGUudHlwZSxvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMuZmFsc2VDYXNlPWksdGhpcy50cnVlQ2FzZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZ0aGlzLnRydWVDYXNlLmlzRXF1aXZhbGVudCh0LnRydWVDYXNlKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8bnVsbD09dD9uPT10Om4uaXNFcXVpdmFsZW50KHQpfSh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Q29uZGl0aW9uYWxFeHByKHRoaXMsZSl9fSxyeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoRF9lLGUpLHRoaXMuY29uZGl0aW9uPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgcngmJnRoaXMuY29uZGl0aW9uLmlzRXF1aXZhbGVudCh0LmNvbmRpdGlvbil9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Tm90RXhwcih0aGlzLGUpfX0sUnM9Y2xhc3N7Y29uc3RydWN0b3IodCxlPW51bGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdGhpcy5uYW1lPT09dC5uYW1lfX0sX2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGksciksdGhpcy5wYXJhbXM9dCx0aGlzLnN0YXRlbWVudHM9ZSx0aGlzLm5hbWU9b31pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfZiYmbGModGhpcy5wYXJhbXMsdC5wYXJhbXMpJiZsYyh0aGlzLnN0YXRlbWVudHMsdC5zdGF0ZW1lbnRzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRGdW5jdGlvbkV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBheCh0LHRoaXMucGFyYW1zLHRoaXMuc3RhdGVtZW50cyx0aGlzLnR5cGUsZSx0aGlzLnNvdXJjZVNwYW4pfX0sb3g9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITApe3N1cGVyKGl8fGt4LHIpLHRoaXMub3BlcmF0b3I9dCx0aGlzLmV4cHI9ZSx0aGlzLnBhcmVucz1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG94JiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHRoaXMsZSl9fSxscj1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPSEwKXtzdXBlcihyfHxlLnR5cGUsbyksdGhpcy5vcGVyYXRvcj10LHRoaXMucmhzPWksdGhpcy5wYXJlbnM9cyx0aGlzLmxocz1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGxyJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5saHMuaXNFcXVpdmFsZW50KHQubGhzKSYmdGhpcy5yaHMuaXNFcXVpdmFsZW50KHQucmhzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodGhpcyxlKX19LGIwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5uYW1lPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYjAmJnRoaXMucmVjZWl2ZXIuaXNFcXVpdmFsZW50KHQucmVjZWl2ZXIpJiZ0aGlzLm5hbWU9PT10Lm5hbWV9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0UmVhZFByb3BFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgdHgodGhpcy5yZWNlaXZlcix0aGlzLm5hbWUsdCxudWxsLHRoaXMuc291cmNlU3Bhbil9fSxzeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKGksciksdGhpcy5yZWNlaXZlcj10LHRoaXMuaW5kZXg9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBzeCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRLZXlFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgZXgodGhpcy5yZWNlaXZlcix0aGlzLmluZGV4LHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdmY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVudHJpZXM9dH1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LmlzQ29uc3RhbnQoKSl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgdmYmJmxjKHRoaXMuZW50cmllcyx0LmVudHJpZXMpfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5RXhwcih0aGlzLGUpfX0seTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2V5PXQsdGhpcy52YWx1ZT1lLHRoaXMucXVvdGVkPWl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX19LHgwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbnRyaWVzPXQsdGhpcy52YWx1ZVR5cGU9bnVsbCxlJiYodGhpcy52YWx1ZVR5cGU9ZS52YWx1ZVR5cGUpfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHgwJiZsYyh0aGlzLmVudHJpZXMsdC5lbnRyaWVzKX1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LnZhbHVlLmlzQ29uc3RhbnQoKSl9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwRXhwcih0aGlzLGUpfX0sS049bmV3IEZhKG51bGwsbnVsbCxudWxsKSxjMT1uZXcgRmEobnVsbCxpYSxudWxsKSxrYT0oKCk9PntyZXR1cm4obj1rYXx8KGthPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uRmluYWw9MV09IkZpbmFsIixuW24uUHJpdmF0ZT0yXT0iUHJpdmF0ZSIsbltuLkV4cG9ydGVkPTRdPSJFeHBvcnRlZCIsbltuLlN0YXRpYz04XT0iU3RhdGljIixrYTt2YXIgbn0pKCksWk49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudGV4dD10LHRoaXMubXVsdGlsaW5lPWUsdGhpcy50cmFpbGluZ05ld2xpbmU9aX10b1N0cmluZygpe3JldHVybiB0aGlzLm11bHRpbGluZT9gICR7dGhpcy50ZXh0fSBgOnRoaXMudGV4dH19LGIxPWNsYXNzIGV4dGVuZHMgWk57Y29uc3RydWN0b3IodCl7c3VwZXIoIiIsITAsITApLHRoaXMudGFncz10fXRvU3RyaW5nKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4iIjtpZigxPT09bi5sZW5ndGgmJm5bMF0udGFnTmFtZSYmIW5bMF0udGV4dClyZXR1cm5gKiR7bzkoblswXSl9IGA7bGV0IHQ9IipcbiI7Zm9yKGxldCBlIG9mIG4pdCs9IiAqIix0Kz1vOShlKS5yZXBsYWNlKC9cbi9nLCJcbiAqICIpLHQrPSJcbiI7cmV0dXJuIHQrPSIgIix0fSh0aGlzLnRhZ3MpfX0seWY9Y2xhc3N7Y29uc3RydWN0b3IodD1rYS5Ob25lLGU9bnVsbCxpKXt0aGlzLm1vZGlmaWVycz10LHRoaXMuc291cmNlU3Bhbj1lLHRoaXMubGVhZGluZ0NvbW1lbnRzPWl9aGFzTW9kaWZpZXIodCl7cmV0dXJuIDAhPSh0aGlzLm1vZGlmaWVycyZ0KX1hZGRMZWFkaW5nQ29tbWVudCh0KXt0aGlzLmxlYWRpbmdDb21tZW50cz10aGlzLmxlYWRpbmdDb21tZW50cz8/W10sdGhpcy5sZWFkaW5nQ29tbWVudHMucHVzaCh0KX19LGF1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHIsbyxzKSx0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy50eXBlPWl8fGUmJmUudHlwZXx8bnVsbH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhdSYmdGhpcy5uYW1lPT09dC5uYW1lJiYodGhpcy52YWx1ZT8hIXQudmFsdWUmJnRoaXMudmFsdWUuaXNFcXVpdmFsZW50KHQudmFsdWUpOiF0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0RGVjbGFyZVZhclN0bXQodGhpcyxlKX19LGF4PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSl7c3VwZXIobyxzLGEpLHRoaXMubmFtZT10LHRoaXMucGFyYW1zPWUsdGhpcy5zdGF0ZW1lbnRzPWksdGhpcy50eXBlPXJ8fG51bGx9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXgmJmxjKHRoaXMucGFyYW1zLHQucGFyYW1zKSYmbGModGhpcy5zdGF0ZW1lbnRzLHQuc3RhdGVtZW50cyl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodGhpcyxlKX19LGx1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGthLk5vbmUsZSxpKSx0aGlzLmV4cHI9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBsdSYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfXZpc2l0U3RhdGVtZW50KHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uU3RtdCh0aGlzLGUpfX0sdW89Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGU9bnVsbCxpKXtzdXBlcihrYS5Ob25lLGUsaSksdGhpcy52YWx1ZT10fWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHVvJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0UmV0dXJuU3RtdCh0aGlzLGUpfX0sbHg9Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGUsaT1bXSxyLG8pe3N1cGVyKGthLk5vbmUscixvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMudHJ1ZUNhc2U9ZSx0aGlzLmZhbHNlQ2FzZT1pfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGx4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZsYyh0aGlzLnRydWVDYXNlLHQudHJ1ZUNhc2UpJiZsYyh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdElmU3RtdCh0aGlzLGUpfX07ZnVuY3Rpb24gTWkobix0LGUpe3JldHVybiBuZXcgbWYobix0LGUpfWZ1bmN0aW9uIHhuKG4sdD1udWxsLGUpe3JldHVybiBuZXcgeTAobixudWxsLHQsZSl9ZnVuY3Rpb24gTmEobix0LGUpe3JldHVybiBuZXcgc2Mobix0LGUpfWZ1bmN0aW9uIGkzKG4pe3JldHVybiBuZXcgdjAobil9ZnVuY3Rpb24gY3Iobix0LGUpe3JldHVybiBuZXcgdmYobix0LGUpfWZ1bmN0aW9uIG1sKG4sdD1udWxsKXtyZXR1cm4gbmV3IHgwKG4ubWFwKGU9Pm5ldyB5MShlLmtleSxlLnZhbHVlLGUucXVvdGVkKSksdCxudWxsKX1mdW5jdGlvbiBPcyhuLHQsZSxpLHIpe3JldHVybiBuZXcgX2Yobix0LGUsaSxyKX1mdW5jdGlvbiByMyhuLHQsZSxpLHIpe3JldHVybiBuZXcgbHgobix0LGUsaSxyKX1mdW5jdGlvbiByOShuLHQsZSxpKXtyZXR1cm4gbmV3IG54KG4sdCxlLGkpfWZ1bmN0aW9uIG50KG4sdCxlKXtyZXR1cm4gbmV3IEZhKG4sdCxlKX1mdW5jdGlvbiB4cShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiZudWxsPT09bi52YWx1ZX1mdW5jdGlvbiBvOShuKXtsZXQgdD0iIjtpZihuLnRhZ05hbWUmJih0Kz1gIEAke24udGFnTmFtZX1gKSxuLnRleHQpe2lmKG4udGV4dC5tYXRjaCgvXC9cKnxcKlwvLykpdGhyb3cgbmV3IEVycm9yKCdKU0RvYyB0ZXh0IGNhbm5vdCBjb250YWluICIvKiIgYW5kICIqLyInKTt0Kz0iICIrbi50ZXh0LnJlcGxhY2UoL0AvZywiXFxAIil9cmV0dXJuIHR9dmFyIHM5PU1pKCI8dW5rbm93bj4iKSxDcT17fSxDMD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQudHlwZSksdGhpcy5yZXNvbHZlZD10LHRoaXMub3JpZ2luYWw9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gZT09PUNxP3RoaXMub3JpZ2luYWwudmlzaXRFeHByZXNzaW9uKHQsZSk6dGhpcy5yZXNvbHZlZC52aXNpdEV4cHJlc3Npb24odCxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDMCYmdGhpcy5yZXNvbHZlZC5pc0VxdWl2YWxlbnQodC5yZXNvbHZlZCl9aXNDb25zdGFudCgpe3JldHVybiEwfWZpeHVwKHQpe3RoaXMucmVzb2x2ZWQ9dCx0aGlzLnNoYXJlZD0hMH19LHgxPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITEpe3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkPXQsdGhpcy5zdGF0ZW1lbnRzPVtdLHRoaXMubGl0ZXJhbHM9bmV3IE1hcCx0aGlzLmxpdGVyYWxGYWN0b3JpZXM9bmV3IE1hcCx0aGlzLm5leHROYW1lSW5kZXg9MH1nZXRDb25zdExpdGVyYWwodCxlKXtpZih0IGluc3RhbmNlb2YgRmEmJiFhOSh0KXx8dCBpbnN0YW5jZW9mIEMwKXJldHVybiB0O2xldCBpPXRoaXMua2V5T2YodCkscj10aGlzLmxpdGVyYWxzLmdldChpKSxvPSExO2lmKHJ8fChyPW5ldyBDMCh0KSx0aGlzLmxpdGVyYWxzLnNldChpLHIpLG89ITApLCFvJiYhci5zaGFyZWR8fG8mJmUpe2xldCBhLGwscz10aGlzLmZyZXNoTmFtZSgpO3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkJiZhOSh0KT8oYT1NaShzKS5zZXQobmV3IF9mKFtdLFtuZXcgdW8odCldKSksbD1NaShzKS5jYWxsRm4oW10pKTooYT1NaShzKS5zZXQodCksbD1NaShzKSksdGhpcy5zdGF0ZW1lbnRzLnB1c2goYS50b0RlY2xTdG10KGlhLGthLkZpbmFsKSksci5maXh1cChsKX1yZXR1cm4gcn1nZXRMaXRlcmFsRmFjdG9yeSh0KXtpZih0IGluc3RhbmNlb2YgdmYpe2xldCBlPXQuZW50cmllcy5tYXAocj0+ci5pc0NvbnN0YW50KCk/cjpzOSksaT10aGlzLmtleU9mKGNyKGUpKTtyZXR1cm4gdGhpcy5fZ2V0TGl0ZXJhbEZhY3RvcnkoaSx0LmVudHJpZXMscj0+Y3IocikpfXtsZXQgZT1tbCh0LmVudHJpZXMubWFwKHI9Pih7a2V5OnIua2V5LHZhbHVlOnIudmFsdWUuaXNDb25zdGFudCgpP3IudmFsdWU6czkscXVvdGVkOnIucXVvdGVkfSkpKSxpPXRoaXMua2V5T2YoZSk7cmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KGksdC5lbnRyaWVzLm1hcChyPT5yLnZhbHVlKSxyPT5tbChyLm1hcCgobyxzKT0+KHtrZXk6dC5lbnRyaWVzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmVudHJpZXNbc10ucXVvdGVkfSkpKSl9fV9nZXRMaXRlcmFsRmFjdG9yeSh0LGUsaSl7bGV0IHI9dGhpcy5saXRlcmFsRmFjdG9yaWVzLmdldCh0KSxvPWUuZmlsdGVyKHM9PiFzLmlzQ29uc3RhbnQoKSk7aWYoIXIpe2xldCBzPWUubWFwKCh1LGQpPT51LmlzQ29uc3RhbnQoKT90aGlzLmdldENvbnN0TGl0ZXJhbCh1LCEwKTpNaShgYSR7ZH1gKSksbD1PcyhzLmZpbHRlcihIX2UpLm1hcCh1PT5uZXcgUnModS5uYW1lLFYwKSksW25ldyB1byhpKHMpKV0saWEpLGM9dGhpcy5mcmVzaE5hbWUoKTt0aGlzLnN0YXRlbWVudHMucHVzaChNaShjKS5zZXQobCkudG9EZWNsU3RtdChpYSxrYS5GaW5hbCkpLHI9TWkoYyksdGhpcy5saXRlcmFsRmFjdG9yaWVzLnNldCh0LHIpfXJldHVybntsaXRlcmFsRmFjdG9yeTpyLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOm99fXVuaXF1ZU5hbWUodCl7cmV0dXJuYCR7dH0ke3RoaXMubmV4dE5hbWVJbmRleCsrfWB9ZnJlc2hOYW1lKCl7cmV0dXJuIHRoaXMudW5pcXVlTmFtZSgiX2MiKX1rZXlPZih0KXtyZXR1cm4gdC52aXNpdEV4cHJlc3Npb24obmV3IEpOLENxKX19LEpOPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aXNpdFdyYXBwZWROb2RlRXhwcj1Gbyx0aGlzLnZpc2l0V3JpdGVWYXJFeHByPUZvLHRoaXMudmlzaXRXcml0ZUtleUV4cHI9Rm8sdGhpcy52aXNpdFdyaXRlUHJvcEV4cHI9Rm8sdGhpcy52aXNpdEludm9rZUZ1bmN0aW9uRXhwcj1Gbyx0aGlzLnZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByPUZvLHRoaXMudmlzaXRJbnN0YW50aWF0ZUV4cHI9Rm8sdGhpcy52aXNpdENvbmRpdGlvbmFsRXhwcj1Gbyx0aGlzLnZpc2l0Tm90RXhwcj1Gbyx0aGlzLnZpc2l0QXNzZXJ0Tm90TnVsbEV4cHI9Rm8sdGhpcy52aXNpdENhc3RFeHByPUZvLHRoaXMudmlzaXRGdW5jdGlvbkV4cHI9Rm8sdGhpcy52aXNpdFVuYXJ5T3BlcmF0b3JFeHByPUZvLHRoaXMudmlzaXRCaW5hcnlPcGVyYXRvckV4cHI9Rm8sdGhpcy52aXNpdFJlYWRQcm9wRXhwcj1Gbyx0aGlzLnZpc2l0UmVhZEtleUV4cHI9Rm8sdGhpcy52aXNpdENvbW1hRXhwcj1Gbyx0aGlzLnZpc2l0TG9jYWxpemVkU3RyaW5nPUZvfXZpc2l0TGl0ZXJhbEV4cHIodCl7cmV0dXJuYCR7InN0cmluZyI9PXR5cGVvZiB0LnZhbHVlPyciJyt0LnZhbHVlKyciJzp0LnZhbHVlfWB9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuYFske3QuZW50cmllcy5tYXAoaT0+aS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSkuam9pbigiLCIpfV1gfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm5geyR7dC5lbnRyaWVzLm1hcChvPT5gJHsobz0+e2xldCBzPW8ucXVvdGVkPyciJzoiIjtyZXR1cm5gJHtzfSR7by5rZXl9JHtzfWB9KShvKX06JHtvLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfWApLmpvaW4oIiwiKX1gfXZpc2l0RXh0ZXJuYWxFeHByKHQpe3JldHVybiB0LnZhbHVlLm1vZHVsZU5hbWU/YEVYOiR7dC52YWx1ZS5tb2R1bGVOYW1lfToke3QudmFsdWUubmFtZX1gOmBFWDoke3QudmFsdWUucnVudGltZS5uYW1lfWB9dmlzaXRSZWFkVmFyRXhwcih0KXtyZXR1cm5gVkFSOiR7dC5uYW1lfWB9dmlzaXRUeXBlb2ZFeHByKHQsZSl7cmV0dXJuYFRZUEVPRjoke3QuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX1gfX07ZnVuY3Rpb24gRm8obil7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBWaXNpdG9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2Vzbid0IGhhbmRsZSAke24uY29uc3RydWN0b3IubmFtZX1gKX1mdW5jdGlvbiBIX2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBtZn1mdW5jdGlvbiBhOShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiYic3RyaW5nIj09dHlwZW9mIG4udmFsdWUmJm4udmFsdWUubGVuZ3RoPj01MH12YXIgcGU9IkBhbmd1bGFyL2NvcmUiLEs9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uTkVXX01FVEhPRD0iZmFjdG9yeSIsbi5UUkFOU0ZPUk1fTUVUSE9EPSJ0cmFuc2Zvcm0iLG4uUEFUQ0hfREVQUz0icGF0Y2hlZERlcHMiLG4uY29yZT17bmFtZTpudWxsLG1vZHVsZU5hbWU6cGV9LG4ubmFtZXNwYWNlSFRNTD17bmFtZToiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VNYXRoTUw9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VTVkc9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRTdGFydD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRFbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiLG1vZHVsZU5hbWU6cGV9LG4uYWR2YW5jZT17bmFtZToiXHUwMjc1XHUwMjc1YWR2YW5jZSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0TGlzdGVuZXI9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RMaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc1Byb3A9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyU3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyRW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRDb250YWluZXI9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXA9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlMj17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUzIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlNT17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU2Iixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlOD17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGVWIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcCIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3A9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5uZXh0Q29udGV4dD17bmFtZToiXHUwMjc1XHUwMjc1bmV4dENvbnRleHQiLG1vZHVsZU5hbWU6cGV9LG4ucmVzZXRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNldFZpZXciLG1vZHVsZU5hbWU6cGV9LG4udGVtcGxhdGVDcmVhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRlbXBsYXRlIixtb2R1bGVOYW1lOnBlfSxuLnRleHQ9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHQiLG1vZHVsZU5hbWU6cGV9LG4uZW5hYmxlQmluZGluZ3M9e25hbWU6Ilx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmRpc2FibGVCaW5kaW5ncz17bmFtZToiXHUwMjc1XHUwMjc1ZGlzYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmdldEN1cnJlbnRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5yZXN0b3JlVmlldz17bmFtZToiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMD17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb24xPXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjI9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjIiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMz17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb240PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjU9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjUiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uNj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb243PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjg9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uVj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDE9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMSIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDI9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMiIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDM9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMyIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDQ9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kNCIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZFY9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kViIsbW9kdWxlTmFtZTpwZX0sbi5ob3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NWhvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHkiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5pMThuPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5BdHRyaWJ1dGVzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXR0cmlidXRlcyIsbW9kdWxlTmFtZTpwZX0sbi5pMThuRXhwPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuRXhwIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5TdGFydD17bmFtZToiXHUwMjc1XHUwMjc1aTE4blN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmkxOG5FbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWkxOG5FbmQiLG1vZHVsZU5hbWU6cGV9LG4uaTE4bkFwcGx5PXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXBwbHkiLG1vZHVsZU5hbWU6cGV9LG4uaTE4blBvc3Rwcm9jZXNzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiLG1vZHVsZU5hbWU6cGV9LG4ucGlwZT17bmFtZToiXHUwMjc1XHUwMjc1cGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9qZWN0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uIixtb2R1bGVOYW1lOnBlfSxuLnByb2plY3Rpb25EZWY9e25hbWU6Ilx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiLG1vZHVsZU5hbWU6cGV9LG4ucmVmZXJlbmNlPXtuYW1lOiJcdTAyNzVcdTAyNzVyZWZlcmVuY2UiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0QXR0cmlidXRlPXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiLG1vZHVsZU5hbWU6cGV9LG4uZGlyZWN0aXZlSW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVkaXJlY3RpdmVJbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW52YWxpZEZhY3Rvcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLmludmFsaWRGYWN0b3J5RGVwPXtuYW1lOiJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeURlcCIsbW9kdWxlTmFtZTpwZX0sbi50ZW1wbGF0ZVJlZkV4dHJhY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZm9yd2FyZFJlZj17bmFtZToiZm9yd2FyZFJlZiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlRm9yd2FyZFJlZj17bmFtZToicmVzb2x2ZUZvcndhcmRSZWYiLG1vZHVsZU5hbWU6cGV9LG4uXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RhYmxlRGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdGFibGVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlV2luZG93PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVEb2N1bWVudD17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVCb2R5PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlQm9keSIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVDb21wb25lbnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUNvbXBvbmVudCIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ29tcG9uZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVDb21wb25lbnQiLG1vZHVsZU5hbWU6cGV9LG4uc2V0Q29tcG9uZW50U2NvcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIixtb2R1bGVOYW1lOnBlfSxuLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5PXtuYW1lOiJDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSIsbW9kdWxlTmFtZTpwZX0sbi5WaWV3RW5jYXBzdWxhdGlvbj17bmFtZToiVmlld0VuY2Fwc3VsYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uQ29tcG9uZW50RGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUNvbXBvbmVudERlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1RmFjdG9yeURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlUYXJnZXQ9e25hbWU6Ilx1MDI3NVx1MDI3NUZhY3RvcnlUYXJnZXQiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lRGlyZWN0aXZlPXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZURpcmVjdGl2ZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlRGlyZWN0aXZlIixtb2R1bGVOYW1lOnBlfSxuLkRpcmVjdGl2ZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVEaXJlY3RpdmVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RvckRlZj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWYiLG1vZHVsZU5hbWU6cGV9LG4uSW5qZWN0b3JEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVJbmplY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZUluamVjdG9yPXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVJbmplY3RvciIsbW9kdWxlTmFtZTpwZX0sbi5OZ01vZHVsZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVOZ01vZHVsZURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLk1vZHVsZVdpdGhQcm92aWRlcnM9e25hbWU6Ik1vZHVsZVdpdGhQcm92aWRlcnMiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lTmdNb2R1bGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVOZ01vZHVsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlTmdNb2R1bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2V0TmdNb2R1bGVTY29wZT17bmFtZToiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSIsbW9kdWxlTmFtZTpwZX0sbi5yZWdpc3Rlck5nTW9kdWxlVHlwZT17bmFtZToiXHUwMjc1XHUwMjc1cmVnaXN0ZXJOZ01vZHVsZVR5cGUiLG1vZHVsZU5hbWU6cGV9LG4uUGlwZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVQaXBlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ2xhc3NNZXRhZGF0YT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSIsbW9kdWxlTmFtZTpwZX0sbi5zZXRDbGFzc01ldGFkYXRhPXtuYW1lOiJcdTAyNzVzZXRDbGFzc01ldGFkYXRhIixtb2R1bGVOYW1lOnBlfSxuLnF1ZXJ5UmVmcmVzaD17bmFtZToiXHUwMjc1XHUwMjc1cXVlcnlSZWZyZXNoIixtb2R1bGVOYW1lOnBlfSxuLnZpZXdRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1dmlld1F1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmxvYWRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1bG9hZFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmNvbnRlbnRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1Y29udGVudFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLk5nT25DaGFuZ2VzRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1TmdPbkNoYW5nZXNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkluaGVyaXREZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkNvcHlEZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLlN0YW5kYWxvbmVGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVTdGFuZGFsb25lRmVhdHVyZSIsbW9kdWxlTmFtZTpwZX0sbi5Qcm92aWRlcnNGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLmxpc3RlbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVsaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5nZXRJbmhlcml0ZWRGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplSHRtbD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplU3R5bGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplU3R5bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbi5zYW5pdGl6ZVNjcmlwdD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVTY3JpcHQiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplVXJsIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIixtb2R1bGVOYW1lOnBlfSxuLnRydXN0Q29uc3RhbnRIdG1sPXtuYW1lOiJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCIsbW9kdWxlTmFtZTpwZX0sbi50cnVzdENvbnN0YW50UmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbn0pKCk7ZnVuY3Rpb24gbjEobil7bj1uPDA/MSsoLW48PDEpOm48PDE7bGV0IHQ9IiI7ZG97bGV0IGU9MzEmbjsobj4+PTUpPjAmJihlfD0zMiksdCs9amIoZSl9d2hpbGUobj4wKTtyZXR1cm4gdH1mdW5jdGlvbiBqYihuKXtpZihuPDB8fG4+PTY0KXRocm93IG5ldyBFcnJvcigiQ2FuIG9ubHkgZW5jb2RlIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgNjNdIik7cmV0dXJuIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iW25dfXZhciBXX2U9Lyd8XFx8XG58XHJ8XCQvZyxxX2U9L15bJEEtWl9dWzAtOUEtWl8kXSokL2ksQzE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbmRlbnQ9dCx0aGlzLnBhcnRzTGVuZ3RoPTAsdGhpcy5wYXJ0cz1bXSx0aGlzLnNyY1NwYW5zPVtdfX0sY3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faW5kZW50PXQsdGhpcy5fbGluZXM9W25ldyBDMSh0KV19c3RhdGljIGNyZWF0ZVJvb3QoKXtyZXR1cm4gbmV3IGN4KDApfWdldCBfY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5fbGluZXNbdGhpcy5fbGluZXMubGVuZ3RoLTFdfXByaW50bG4odCxlPSIiKXt0aGlzLnByaW50KHR8fG51bGwsZSwhMCl9bGluZUlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLmxlbmd0aH1saW5lTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudCoiICAiLmxlbmd0aCt0aGlzLl9jdXJyZW50TGluZS5wYXJ0c0xlbmd0aH1wcmludCh0LGUsaT0hMSl7ZS5sZW5ndGg+MCYmKHRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLnB1c2goZSksdGhpcy5fY3VycmVudExpbmUucGFydHNMZW5ndGgrPWUubGVuZ3RoLHRoaXMuX2N1cnJlbnRMaW5lLnNyY1NwYW5zLnB1c2godCYmdC5zb3VyY2VTcGFufHxudWxsKSksaSYmdGhpcy5fbGluZXMucHVzaChuZXcgQzEodGhpcy5faW5kZW50KSl9cmVtb3ZlRW1wdHlMYXN0TGluZSgpe3RoaXMubGluZUlzRW1wdHkoKSYmdGhpcy5fbGluZXMucG9wKCl9aW5jSW5kZW50KCl7dGhpcy5faW5kZW50KyssdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9ZGVjSW5kZW50KCl7dGhpcy5faW5kZW50LS0sdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9dG9Tb3VyY2UoKXtyZXR1cm4gdGhpcy5zb3VyY2VMaW5lcy5tYXAodD0+dC5wYXJ0cy5sZW5ndGg+MD9sOSh0LmluZGVudCkrdC5wYXJ0cy5qb2luKCIiKToiIikuam9pbigiXG4iKX10b1NvdXJjZU1hcEdlbmVyYXRvcih0LGU9MCl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQ9bnVsbCl7dGhpcy5maWxlPXQsdGhpcy5zb3VyY2VzQ29udGVudD1uZXcgTWFwLHRoaXMubGluZXM9W10sdGhpcy5sYXN0Q29sMD0wLHRoaXMuaGFzTWFwcGluZ3M9ITF9YWRkU291cmNlKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5oYXModCl8fHRoaXMuc291cmNlc0NvbnRlbnQuc2V0KHQsZSksdGhpc31hZGRMaW5lKCl7cmV0dXJuIHRoaXMubGluZXMucHVzaChbXSksdGhpcy5sYXN0Q29sMD0wLHRoaXN9YWRkTWFwcGluZyh0LGUsaSxyKXtpZighdGhpcy5jdXJyZW50TGluZSl0aHJvdyBuZXcgRXJyb3IoIkEgbGluZSBtdXN0IGJlIGFkZGVkIGJlZm9yZSBtYXBwaW5ncyBjYW4gYmUgYWRkZWQiKTtpZihudWxsIT1lJiYhdGhpcy5zb3VyY2VzQ29udGVudC5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvdXJjZSBmaWxlICIke2V9ImApO2lmKG51bGw9PXQpdGhyb3cgbmV3IEVycm9yKCJUaGUgY29sdW1uIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBtdXN0IGJlIHByb3ZpZGVkIik7aWYodDx0aGlzLmxhc3RDb2wwKXRocm93IG5ldyBFcnJvcigiTWFwcGluZyBzaG91bGQgYmUgYWRkZWQgaW4gb3V0cHV0IG9yZGVyIik7aWYoZSYmKG51bGw9PWl8fG51bGw9PXIpKXRocm93IG5ldyBFcnJvcigiVGhlIHNvdXJjZSBsb2NhdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gYSBzb3VyY2UgdXJsIGlzIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMuaGFzTWFwcGluZ3M9ITAsdGhpcy5sYXN0Q29sMD10LHRoaXMuY3VycmVudExpbmUucHVzaCh7Y29sMDp0LHNvdXJjZVVybDplLHNvdXJjZUxpbmUwOmksc291cmNlQ29sMDpyfSksdGhpc31nZXQgY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSgtMSlbMF19dG9KU09OKCl7aWYoIXRoaXMuaGFzTWFwcGluZ3MpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IE1hcCxlPVtdLGk9W107QXJyYXkuZnJvbSh0aGlzLnNvdXJjZXNDb250ZW50LmtleXMoKSkuZm9yRWFjaCgoYyx1KT0+e3Quc2V0KGMsdSksZS5wdXNoKGMpLGkucHVzaCh0aGlzLnNvdXJjZXNDb250ZW50LmdldChjKXx8bnVsbCl9KTtsZXQgcj0iIixvPTAscz0wLGE9MCxsPTA7cmV0dXJuIHRoaXMubGluZXMuZm9yRWFjaChjPT57bz0wLHIrPWMubWFwKHU9PntsZXQgZD1uMSh1LmNvbDAtbyk7cmV0dXJuIG89dS5jb2wwLG51bGwhPXUuc291cmNlVXJsJiYoZCs9bjEodC5nZXQodS5zb3VyY2VVcmwpLXMpLHM9dC5nZXQodS5zb3VyY2VVcmwpLGQrPW4xKHUuc291cmNlTGluZTAtYSksYT11LnNvdXJjZUxpbmUwLGQrPW4xKHUuc291cmNlQ29sMC1sKSxsPXUuc291cmNlQ29sMCksZH0pLmpvaW4oIiwiKSxyKz0iOyJ9KSxyPXIuc2xpY2UoMCwtMSkse2ZpbGU6dGhpcy5maWxlfHwiIix2ZXJzaW9uOjMsc291cmNlUm9vdDoiIixzb3VyY2VzOmUsc291cmNlc0NvbnRlbnQ6aSxtYXBwaW5nczpyfX10b0pzQ29tbWVudCgpe3JldHVybiB0aGlzLmhhc01hcHBpbmdzPyIvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCIrZnVuY3Rpb24obil7bGV0IHQ9IiIsZT1uMyhuKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpKytdLG89aTxlLmxlbmd0aD9lW2krK106bnVsbCxzPWk8ZS5sZW5ndGg/ZVtpKytdOm51bGw7dCs9amIocj4+MiksdCs9amIoKDMmcik8PDR8KG51bGw9PT1vPzA6bz4+NCkpLHQrPW51bGw9PT1vPyI9IjpqYigoMTUmbyk8PDJ8KG51bGw9PT1zPzA6cz4+NikpLHQrPW51bGw9PT1vfHxudWxsPT09cz8iPSI6amIoNjMmcyl9cmV0dXJuIHR9KEpTT04uc3RyaW5naWZ5KHRoaXMsbnVsbCwwKSk6IiJ9fSh0KSxyPSExLG89KCk9PntyfHwoaS5hZGRTb3VyY2UodCwiICIpLmFkZE1hcHBpbmcoMCx0LDAsMCkscj0hMCl9O2ZvcihsZXQgcz0wO3M8ZTtzKyspaS5hZGRMaW5lKCksbygpO3JldHVybiB0aGlzLnNvdXJjZUxpbmVzLmZvckVhY2goKHMsYSk9PntpLmFkZExpbmUoKTtsZXQgbD1zLnNyY1NwYW5zLGM9cy5wYXJ0cyx1PXMuaW5kZW50KiIgICIubGVuZ3RoLGQ9MDtmb3IoO2Q8bC5sZW5ndGgmJiFsW2RdOyl1Kz1jW2RdLmxlbmd0aCxkKys7Zm9yKGQ8bC5sZW5ndGgmJjA9PT1hJiYwPT09dT9yPSEwOm8oKTtkPGwubGVuZ3RoOyl7bGV0IHA9bFtkXSxoPXAuc3RhcnQuZmlsZSxmPXAuc3RhcnQubGluZSxtPXAuc3RhcnQuY29sO2ZvcihpLmFkZFNvdXJjZShoLnVybCxoLmNvbnRlbnQpLmFkZE1hcHBpbmcodSxoLnVybCxmLG0pLHUrPWNbZF0ubGVuZ3RoLGQrKztkPGwubGVuZ3RoJiYocD09PWxbZF18fCFsW2RdKTspdSs9Y1tkXS5sZW5ndGgsZCsrfX0pLGl9c3Bhbk9mKHQsZSl7bGV0IGk9dGhpcy5fbGluZXNbdF07aWYoaSl7bGV0IHI9ZS1sOShpLmluZGVudCkubGVuZ3RoO2ZvcihsZXQgbz0wO288aS5wYXJ0cy5sZW5ndGg7bysrKXtsZXQgcz1pLnBhcnRzW29dO2lmKHMubGVuZ3RoPnIpcmV0dXJuIGkuc3JjU3BhbnNbb107ci09cy5sZW5ndGh9fXJldHVybiBudWxsfWdldCBzb3VyY2VMaW5lcygpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGgmJjA9PT10aGlzLl9saW5lc1t0aGlzLl9saW5lcy5sZW5ndGgtMV0ucGFydHMubGVuZ3RoP3RoaXMuX2xpbmVzLnNsaWNlKDAsLTEpOnRoaXMuX2xpbmVzfX0sdEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZXNjYXBlRG9sbGFySW5TdHJpbmdzPXR9cHJpbnRMZWFkaW5nQ29tbWVudHModCxlKXtpZih2b2lkIDAhPT10LmxlYWRpbmdDb21tZW50cylmb3IobGV0IGkgb2YgdC5sZWFkaW5nQ29tbWVudHMpaSBpbnN0YW5jZW9mIGIxP2UucHJpbnQodCxgLyoke2kudG9TdHJpbmcoKX0qL2AsaS50cmFpbGluZ05ld2xpbmUpOmkubXVsdGlsaW5lP2UucHJpbnQodCxgLyogJHtpLnRleHR9ICovYCxpLnRyYWlsaW5nTmV3bGluZSk6aS50ZXh0LnNwbGl0KCJcbiIpLmZvckVhY2gocj0+e2UucHJpbnRsbih0LGAvLyAke3J9YCl9KX12aXNpdEV4cHJlc3Npb25TdG10KHQsZSl7cmV0dXJuIHRoaXMucHJpbnRMZWFkaW5nQ29tbWVudHModCxlKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0UmV0dXJuU3RtdCh0LGUpe3JldHVybiB0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJyZXR1cm4gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50bG4odCwiOyIpLG51bGx9dmlzaXRJZlN0bXQodCxlKXt0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJpZiAoIiksdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIpIHsiKTtsZXQgaT1udWxsIT10LmZhbHNlQ2FzZSYmdC5mYWxzZUNhc2UubGVuZ3RoPjA7cmV0dXJuIHQudHJ1ZUNhc2UubGVuZ3RoPD0xJiYhaT8oZS5wcmludCh0LCIgIiksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLnJlbW92ZUVtcHR5TGFzdExpbmUoKSxlLnByaW50KHQsIiAiKSk6KGUucHJpbnRsbigpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLmRlY0luZGVudCgpLGkmJihlLnByaW50bG4odCwifSBlbHNlIHsiKSxlLmluY0luZGVudCgpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQuZmFsc2VDYXNlLGUpLGUuZGVjSW5kZW50KCkpKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRXcml0ZVZhckV4cHIodCxlKXtsZXQgaT1lLmxpbmVJc0VtcHR5KCk7cmV0dXJuIGl8fGUucHJpbnQodCwiKCIpLGUucHJpbnQodCxgJHt0Lm5hbWV9ID0gYCksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVLZXlFeHByKHQsZSl7bGV0IGk9ZS5saW5lSXNFbXB0eSgpO3JldHVybiBpfHxlLnByaW50KHQsIigiKSx0LnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiWyIpLHQuaW5kZXgudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJdID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVQcm9wRXhwcih0LGUpe2xldCBpPWUubGluZUlzRW1wdHkoKTtyZXR1cm4gaXx8ZS5wcmludCh0LCIoIiksdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsYC4ke3QubmFtZX0gPSBgKSx0LnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGl8fGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodCxlKXtyZXR1cm4gdC5mbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5hcmdzLGUsIiwiKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7dC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJgIit0LnRlbXBsYXRlLmVsZW1lbnRzWzBdLnJhd1RleHQpO2ZvcihsZXQgaT0xO2k8dC50ZW1wbGF0ZS5lbGVtZW50cy5sZW5ndGg7aSsrKWUucHJpbnQodCwiJHsiKSx0LnRlbXBsYXRlLmV4cHJlc3Npb25zW2ktMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnRlbXBsYXRlLmVsZW1lbnRzW2ldLnJhd1RleHR9YCk7cmV0dXJuIGUucHJpbnQodCwiYCIpLG51bGx9dmlzaXRXcmFwcGVkTm9kZUV4cHIodCxlKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IGVtaXR0ZXIgY2Fubm90IHZpc2l0IFdyYXBwZWROb2RlRXhwci4iKX12aXNpdFR5cGVvZkV4cHIodCxlKXtlLnByaW50KHQsInR5cGVvZiAiKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9dmlzaXRSZWFkVmFyRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0SW5zdGFudGlhdGVFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwibmV3ICIpLHQuY2xhc3NFeHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiKCIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmFyZ3MsZSwiLCIpLGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRMaXRlcmFsRXhwcih0LGUpe2xldCBpPXQudmFsdWU7cmV0dXJuIGUucHJpbnQodCwic3RyaW5nIj09dHlwZW9mIGk/Y2YoaSx0aGlzLl9lc2NhcGVEb2xsYXJJblN0cmluZ3MpOmAke2l9YCksbnVsbH12aXNpdExvY2FsaXplZFN0cmluZyh0LGUpe2xldCBpPXQuc2VyaWFsaXplSTE4bkhlYWQoKTtlLnByaW50KHQsIiRsb2NhbGl6ZSBgIitpLnJhdyk7Zm9yKGxldCByPTE7cjx0Lm1lc3NhZ2VQYXJ0cy5sZW5ndGg7cisrKWUucHJpbnQodCwiJHsiKSx0LmV4cHJlc3Npb25zW3ItMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnNlcmlhbGl6ZUkxOG5UZW1wbGF0ZVBhcnQocikucmF3fWApO3JldHVybiBlLnByaW50KHQsImAiKSxudWxsfXZpc2l0Q29uZGl0aW9uYWxFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiKCIpLHQuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiPyAiKSx0LnRydWVDYXNlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiOiAiKSx0LmZhbHNlQ2FzZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0Tm90RXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIiEiKSx0LmNvbmRpdGlvbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxudWxsfXZpc2l0VW5hcnlPcGVyYXRvckV4cHIodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRvcil7Y2FzZSBwZi5QbHVzOmk9IisiO2JyZWFrO2Nhc2UgcGYuTWludXM6aT0iLSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiB0LnBhcmVucyYmZS5wcmludCh0LCIoIiksZS5wcmludCh0LGkpLHQuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSx0LnBhcmVucyYmZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEJpbmFyeU9wZXJhdG9yRXhwcih0LGUpe2xldCBpO3N3aXRjaCh0Lm9wZXJhdG9yKXtjYXNlIGhuLkVxdWFsczppPSI9PSI7YnJlYWs7Y2FzZSBobi5JZGVudGljYWw6aT0iPT09IjticmVhaztjYXNlIGhuLk5vdEVxdWFsczppPSIhPSI7YnJlYWs7Y2FzZSBobi5Ob3RJZGVudGljYWw6aT0iIT09IjticmVhaztjYXNlIGhuLkFuZDppPSImJiI7YnJlYWs7Y2FzZSBobi5CaXR3aXNlQW5kOmk9IiYiO2JyZWFrO2Nhc2UgaG4uT3I6aT0ifHwiO2JyZWFrO2Nhc2UgaG4uUGx1czppPSIrIjticmVhaztjYXNlIGhuLk1pbnVzOmk9Ii0iO2JyZWFrO2Nhc2UgaG4uRGl2aWRlOmk9Ii8iO2JyZWFrO2Nhc2UgaG4uTXVsdGlwbHk6aT0iKiI7YnJlYWs7Y2FzZSBobi5Nb2R1bG86aT0iJSI7YnJlYWs7Y2FzZSBobi5Mb3dlcjppPSI8IjticmVhaztjYXNlIGhuLkxvd2VyRXF1YWxzOmk9Ijw9IjticmVhaztjYXNlIGhuLkJpZ2dlcjppPSI+IjticmVhaztjYXNlIGhuLkJpZ2dlckVxdWFsczppPSI+PSI7YnJlYWs7Y2FzZSBobi5OdWxsaXNoQ29hbGVzY2U6aT0iPz8iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdC5wYXJlbnMmJmUucHJpbnQodCwiKCIpLHQubGhzLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgICR7aX0gYCksdC5yaHMudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksdC5wYXJlbnMmJmUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRSZWFkUHJvcEV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIi4iKSxlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0UmVhZEtleUV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIlsiKSx0LmluZGV4LnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiWyIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmVudHJpZXMsZSwiLCIpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsTWFwRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsInsiKSx0aGlzLnZpc2l0QWxsT2JqZWN0cyhpPT57ZS5wcmludCh0LGAke2NmKGkua2V5LHRoaXMuX2VzY2FwZURvbGxhckluU3RyaW5ncyxpLnF1b3RlZCl9OmApLGkudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9LHQuZW50cmllcyxlLCIsIiksZS5wcmludCh0LCJ9IiksbnVsbH12aXNpdENvbW1hRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5wYXJ0cyxlLCIsIiksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEFsbEV4cHJlc3Npb25zKHQsZSxpKXt0aGlzLnZpc2l0QWxsT2JqZWN0cyhyPT5yLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLHQsZSxpKX12aXNpdEFsbE9iamVjdHModCxlLGkscil7bGV0IG89ITE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspcz4wJiYoaS5saW5lTGVuZ3RoKCk+ODA/KGkucHJpbnQobnVsbCxyLCEwKSxvfHwoaS5pbmNJbmRlbnQoKSxpLmluY0luZGVudCgpLG89ITApKTppLnByaW50KG51bGwsciwhMSkpLHQoZVtzXSk7byYmKGkuZGVjSW5kZW50KCksaS5kZWNJbmRlbnQoKSl9dmlzaXRBbGxTdGF0ZW1lbnRzKHQsZSl7dC5mb3JFYWNoKGk9PmkudmlzaXRTdGF0ZW1lbnQodGhpcyxlKSl9fTtmdW5jdGlvbiBjZihuLHQsZT0hMCl7aWYobnVsbD09bilyZXR1cm4gbnVsbDtsZXQgaT1uLnJlcGxhY2UoV19lLCguLi5vKT0+IiQiPT1vWzBdP3Q/IlxcJCI6IiQiOiJcbiI9PW9bMF0/IlxcbiI6IlxyIj09b1swXT8iXFxyIjpgXFwke29bMF19YCk7cmV0dXJuIGV8fCFxX2UudGVzdChpKT9gJyR7aX0nYDppfWZ1bmN0aW9uIGw5KG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bjtlKyspdCs9IiAgIjtyZXR1cm4gdH1mdW5jdGlvbiBYMShuLHQpe2lmKDA9PT10KXJldHVybiBOYShuKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHQ7aSsrKWUucHVzaChWMCk7cmV0dXJuIE5hKG4sdm9pZCAwLGUpfWZ1bmN0aW9uIE1xKG4pe3JldHVybmBAJHtufWB9ZnVuY3Rpb24gWF9lKG4sdCl7bGV0IGU9Y2YodCwhMSwhMSk7cmV0dXJuIGUhPT10P2Ake259WyR7ZX1dYDpgJHtufS4ke3R9YH1mdW5jdGlvbiBTcShuLHQpe3JldHVybmBhbmltYXRpb25fJHtufV8ke3R9YH1mdW5jdGlvbiBhcyhuKXtsZXQgdD1uZXcgRG4obik7cmV0dXJue3ZhbHVlOnQsdHlwZTp0fX1mdW5jdGlvbiB1ZihuLHQpe2xldCBlPWNyKG4ubWFwKGk9PmkudmFsdWUpKTtyZXR1cm4gdD9PcyhbXSxbbmV3IHVvKGUpXSk6ZX1mdW5jdGlvbiBvMyhuLHQpe3JldHVybntleHByZXNzaW9uOm4sZm9yd2FyZFJlZjp0fX12YXIgZjA9KCgpPT57cmV0dXJuKG49ZjB8fChmMD17fSkpW24uQ2xhc3M9MF09IkNsYXNzIixuW24uRnVuY3Rpb249MV09IkZ1bmN0aW9uIixmMDt2YXIgbn0pKCksaWM9KCgpPT57cmV0dXJuKG49aWN8fChpYz17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5Db21wb25lbnQ9MV09IkNvbXBvbmVudCIsbltuLkluamVjdGFibGU9Ml09IkluamVjdGFibGUiLG5bbi5QaXBlPTNdPSJQaXBlIixuW24uTmdNb2R1bGU9NF09Ik5nTW9kdWxlIixpYzt2YXIgbn0pKCk7ZnVuY3Rpb24gYWYobil7bGV0IHQ9TWkoInQiKSxlPW51bGwsaT11OShuKT90Om5ldyBscihobi5Pcix0LG4uaW50ZXJuYWxUeXBlKSxyPW51bGw7bnVsbCE9PW4uZGVwcz8iaW52YWxpZCIhPT1uLmRlcHMmJihyPW5ldyBnZihpLGM5KG4uZGVwcyxuLnRhcmdldCkpKTooZT1NaShgXHUwMjc1JHtuLm5hbWV9X0Jhc2VGYWN0b3J5YCkscj1lLmNhbGxGbihbaV0pKTtsZXQgbz1bXSxzPW51bGw7ZnVuY3Rpb24gYShjKXtsZXQgdT1NaSgiciIpO28ucHVzaCh1LnNldChLTikudG9EZWNsU3RtdCgpKTtsZXQgZD1udWxsIT09cj91LnNldChyKS50b1N0bXQoKTp4bihLLmludmFsaWRGYWN0b3J5KS5jYWxsRm4oW10pLnRvU3RtdCgpO3JldHVybiBvLnB1c2gocjModCxbZF0sW3Uuc2V0KGMpLnRvU3RtdCgpXSkpLHV9aWYodTkobikpe2xldCBjPWM5KG4uZGVsZWdhdGVEZXBzLG4udGFyZ2V0KTtzPWEobmV3KG4uZGVsZWdhdGVUeXBlPT09ZjAuQ2xhc3M/Z2Y6dnApKG4uZGVsZWdhdGUsYykpfWVsc2Ugcz1mdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5leHByZXNzaW9ufShuKT9hKG4uZXhwcmVzc2lvbik6cjtpZihudWxsPT09cylvLnB1c2goeG4oSy5pbnZhbGlkRmFjdG9yeSkuY2FsbEZuKFtdKS50b1N0bXQoKSk7ZWxzZSBpZihudWxsIT09ZSl7bGV0IGM9eG4oSy5nZXRJbmhlcml0ZWRGYWN0b3J5KS5jYWxsRm4oW24uaW50ZXJuYWxUeXBlXSksdT1uZXcgbHIoaG4uT3IsZSxlLnNldChjKSk7by5wdXNoKG5ldyB1byh1LmNhbGxGbihbaV0pKSl9ZWxzZSBvLnB1c2gobmV3IHVvKHMpKTtsZXQgbD1PcyhbbmV3IFJzKCJ0IixWMCldLG8saWEsdm9pZCAwLGAke24ubmFtZX1fRmFjdG9yeWApO3JldHVybiBudWxsIT09ZSYmKGw9T3MoW10sW25ldyBhdShlLm5hbWUpLG5ldyB1byhsKV0pLmNhbGxGbihbXSx2b2lkIDAsITApKSx7ZXhwcmVzc2lvbjpsLHN0YXRlbWVudHM6W10sdHlwZTokX2Uobil9fWZ1bmN0aW9uICRfZShuKXtsZXQgdD1udWxsIT09bi5kZXBzJiYiaW52YWxpZCIhPT1uLmRlcHM/ZnVuY3Rpb24obil7bGV0IHQ9ITEsZT1uLm1hcChpPT57bGV0IHI9ZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIG51bGwhPT1uLmF0dHJpYnV0ZU5hbWVUeXBlJiZ0LnB1c2goe2tleToiYXR0cmlidXRlIix2YWx1ZTpuLmF0dHJpYnV0ZU5hbWVUeXBlLHF1b3RlZDohMX0pLG4ub3B0aW9uYWwmJnQucHVzaCh7a2V5OiJvcHRpb25hbCIsdmFsdWU6bnQoITApLHF1b3RlZDohMX0pLG4uaG9zdCYmdC5wdXNoKHtrZXk6Imhvc3QiLHZhbHVlOm50KCEwKSxxdW90ZWQ6ITF9KSxuLnNlbGYmJnQucHVzaCh7a2V5OiJzZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksbi5za2lwU2VsZiYmdC5wdXNoKHtrZXk6InNraXBTZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksdC5sZW5ndGg+MD9tbCh0KTpudWxsfShpKTtyZXR1cm4gbnVsbCE9PXI/KHQ9ITAscik6bnQobnVsbCl9KTtyZXR1cm4gdD9OYShjcihlKSk6ZGR9KG4uZGVwcyk6ZGQ7cmV0dXJuIE5hKHhuKEsuRmFjdG9yeURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KSx0XSkpfWZ1bmN0aW9uIGM5KG4sdCl7cmV0dXJuIG4ubWFwKChlLGkpPT5mdW5jdGlvbihuLHQsZSl7aWYobnVsbD09PW4udG9rZW4pcmV0dXJuIHhuKEsuaW52YWxpZEZhY3RvcnlEZXApLmNhbGxGbihbbnQoZSldKTtpZihudWxsPT09bi5hdHRyaWJ1dGVOYW1lVHlwZSl7bGV0IGk9MHwobi5zZWxmPzI6MCl8KG4uc2tpcFNlbGY/NDowKXwobi5ob3N0PzE6MCl8KG4ub3B0aW9uYWw/ODowKXwodD09PWljLlBpcGU/MTY6MCkscj0wIT09aXx8bi5vcHRpb25hbD9udChpKTpudWxsLG89W24udG9rZW5dO3ImJm8ucHVzaChyKTtsZXQgcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBpYy5Db21wb25lbnQ6Y2FzZSBpYy5EaXJlY3RpdmU6Y2FzZSBpYy5QaXBlOnJldHVybiBLLmRpcmVjdGl2ZUluamVjdDtkZWZhdWx0OnJldHVybiBLLmluamVjdH19KHQpO3JldHVybiB4bihzKS5jYWxsRm4obyl9cmV0dXJuIHhuKEsuaW5qZWN0QXR0cmlidXRlKS5jYWxsRm4oW24udG9rZW5dKX0oZSx0LGkpKX1mdW5jdGlvbiB1OShuKXtyZXR1cm4gdm9pZCAwIT09bi5kZWxlZ2F0ZVR5cGV9dmFyIHcwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzKX19LHV4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5pMThuPWl9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRCb3VuZFRleHQodGhpcyl9fSxkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy5pMThuPXN9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRUZXh0QXR0cmlidXRlKHRoaXMpfX0sTTA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuc2VjdXJpdHlDb250ZXh0PWksdGhpcy52YWx1ZT1yLHRoaXMudW5pdD1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMua2V5U3Bhbj1hLHRoaXMudmFsdWVTcGFuPWwsdGhpcy5pMThuPWN9c3RhdGljIGZyb21Cb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LGUpe2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBhdHRyaWJ1dGVzIGJ1dCB3YXMgbm90IGZvciAke3QubmFtZX06ICR7dC5zb3VyY2VTcGFufWApO3JldHVybiBuZXcgTTAodC5uYW1lLHQudHlwZSx0LnNlY3VyaXR5Q29udGV4dCx0LnZhbHVlLHQudW5pdCx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLGUpfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRBdHRyaWJ1dGUodGhpcyl9fSxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlcj1pLHRoaXMudGFyZ2V0PXIsdGhpcy5waGFzZT1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMuaGFuZGxlclNwYW49YSx0aGlzLmtleVNwYW49bH1zdGF0aWMgZnJvbVBhcnNlZEV2ZW50KHQpe2xldCBlPTA9PT10LnR5cGU/dC50YXJnZXRPclBoYXNlOm51bGwsaT0xPT09dC50eXBlP3QudGFyZ2V0T3JQaGFzZTpudWxsO2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBldmVudCBidXQgd2FzIG5vdCBmb3IgJHt0Lm5hbWV9OiAke3Quc291cmNlU3Bhbn1gKTtyZXR1cm4gbmV3IFMwKHQubmFtZSx0LnR5cGUsdC5oYW5kbGVyLGUsaSx0LnNvdXJjZVNwYW4sdC5oYW5kbGVyU3Bhbix0LmtleVNwYW4pfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRFdmVudCh0aGlzKX19LEUwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMubmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy5jaGlsZHJlbj1vLHRoaXMucmVmZXJlbmNlcz1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWMsdGhpcy5pMThuPXV9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRFbGVtZW50KHRoaXMpfX0sWWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMudGFnTmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy50ZW1wbGF0ZUF0dHJzPW8sdGhpcy5jaGlsZHJlbj1zLHRoaXMucmVmZXJlbmNlcz1hLHRoaXMudmFyaWFibGVzPWwsdGhpcy5zb3VyY2VTcGFuPWMsdGhpcy5zdGFydFNvdXJjZVNwYW49dSx0aGlzLmVuZFNvdXJjZVNwYW49ZCx0aGlzLmkxOG49cH12aXNpdCh0KXtyZXR1cm4gdC52aXNpdFRlbXBsYXRlKHRoaXMpfX0sdzE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5rZXlTcGFuPXIsdGhpcy52YWx1ZVNwYW49b312aXNpdCh0KXtyZXR1cm4gdC52aXNpdFZhcmlhYmxlKHRoaXMpfX0sTTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy52YXJzPXQsdGhpcy5wbGFjZWhvbGRlcnM9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmkxOG49cn12aXNpdCh0KXtyZXR1cm4gdC52aXNpdEljdSh0aGlzKX19O2Z1bmN0aW9uIGQ5KG4sdCl7bGV0IGU9W107aWYobi52aXNpdClmb3IobGV0IGkgb2YgdCluLnZpc2l0KGkpfHxpLnZpc2l0KG4pO2Vsc2UgZm9yKGxldCBpIG9mIHQpe2xldCByPWkudmlzaXQobik7ciYmZS5wdXNoKHIpfXJldHVybiBlfXZhciBpdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5ub2Rlcz10LHRoaXMucGxhY2Vob2xkZXJzPWUsdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZT1pLHRoaXMubWVhbmluZz1yLHRoaXMuZGVzY3JpcHRpb249byx0aGlzLmN1c3RvbUlkPXMsdGhpcy5pZD10aGlzLmN1c3RvbUlkLHRoaXMubGVnYWN5SWRzPVtdLHRoaXMubWVzc2FnZVN0cmluZz1mdW5jdGlvbihuKXtsZXQgdD1uZXcgc0w7cmV0dXJuIG4ubWFwKGk9PmkudmlzaXQodCkpLmpvaW4oIiIpfSh0aGlzLm5vZGVzKSx0aGlzLnNvdXJjZXM9dC5sZW5ndGg/W3tmaWxlUGF0aDp0WzBdLnNvdXJjZVNwYW4uc3RhcnQuZmlsZS51cmwsc3RhcnRMaW5lOnRbMF0uc291cmNlU3Bhbi5zdGFydC5saW5lKzEsc3RhcnRDb2w6dFswXS5zb3VyY2VTcGFuLnN0YXJ0LmNvbCsxLGVuZExpbmU6dFt0Lmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZC5saW5lKzEsZW5kQ29sOnRbMF0uc291cmNlU3Bhbi5zdGFydC5jb2wrMX1dOltdfX0sbDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRleHQodGhpcyxlKX19LGJmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGlsZHJlbj10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb250YWluZXIodGhpcyxlKX19LFMxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1lLHRoaXMuY2FzZXM9aSx0aGlzLnNvdXJjZVNwYW49cn12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1KHRoaXMsZSl9fSxFMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52YWx1ZT10LHRoaXMubmFtZT1lLHRoaXMuc291cmNlU3Bhbj1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRQbGFjZWhvbGRlcih0aGlzLGUpfX0sVDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnNvdXJjZVNwYW49aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1UGxhY2Vob2xkZXIodGhpcyxlKX19LHNMPWNsYXNze3Zpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7bGV0IGU9T2JqZWN0LmtleXModC5jYXNlcykubWFwKGk9PmAke2l9IHske3QuY2FzZXNbaV0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb25QbGFjZWhvbGRlcn0sICR7dC50eXBlfSwgJHtlLmpvaW4oIiAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe2xldCBlPXQuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiIpO3JldHVybmB7JCR7dC5zdGFydE5hbWV9fSR7ZX17JCR7dC5jbG9zZU5hbWV9fWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm5geyQke3QubmFtZX19YH12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3JldHVybmB7JCR7dC5uYW1lfX1gfX07bmV3IGNsYXNze3Zpc2l0VGFnKHQpe2xldCBlPXRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyk7aWYoMD09dC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuYDwke3QubmFtZX0ke2V9Lz5gO2xldCBpPXQuY2hpbGRyZW4ubWFwKHI9PnIudmlzaXQodGhpcykpO3JldHVybmA8JHt0Lm5hbWV9JHtlfT4ke2kuam9pbigiIil9PC8ke3QubmFtZX0+YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXREZWNsYXJhdGlvbih0KXtyZXR1cm5gPD94bWwke3RoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyl9ID8+YH1fc2VyaWFsaXplQXR0cmlidXRlcyh0KXtsZXQgZT1PYmplY3Qua2V5cyh0KS5tYXAoaT0+YCR7aX09IiR7dFtpXX0iYCkuam9pbigiICIpO3JldHVybiBlLmxlbmd0aD4wPyIgIitlOiIifXZpc2l0RG9jdHlwZSh0KXtyZXR1cm5gPCFET0NUWVBFICR7dC5yb290VGFnfSBbXG4ke3QuZHRkfVxuXT5gfX07dmFyIGxMPSJpMThuLSI7ZnVuY3Rpb24gcHgobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBpdX1mdW5jdGlvbiBpMShuKXtyZXR1cm4gcHgobikmJjE9PT1uLm5vZGVzLmxlbmd0aCYmbi5ub2Rlc1swXWluc3RhbmNlb2YgUzF9ZnVuY3Rpb24gcHZlKG4pe3JldHVybiEhbi5pMThufWZ1bmN0aW9uIFRxKG4pe3JldHVybiBuLm5vZGVzWzBdfWZ1bmN0aW9uIFExKG4sdD0wKXtyZXR1cm5gXHVmZmZkJHtufSR7dD4wP2A6JHt0fWA6IiJ9XHVmZmZkYH1mdW5jdGlvbiBtdmUobj0wKXtsZXQgdD1uO3JldHVybigpPT50Kyt9ZnVuY3Rpb24gaDkobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+e3RbaV09bnQoZS5sZW5ndGg+MT9gWyR7ZS5qb2luKCJ8Iil9XWA6ZVswXSl9KSx0fWZ1bmN0aW9uIHUxKG4sdCwuLi5lKXtsZXQgaT1uLmdldCh0KXx8W107aS5wdXNoKC4uLmUpLG4uc2V0KHQsaSl9ZnVuY3Rpb24gRHEobix0PTAsZT0wKXtsZXQgaT10LHI9bmV3IE1hcCxvPW4gaW5zdGFuY2VvZiBpdT9uLm5vZGVzLmZpbmQocz0+cyBpbnN0YW5jZW9mIGJmKTpuO3JldHVybiBvJiZvLmNoaWxkcmVuLmZpbHRlcihzPT5zIGluc3RhbmNlb2YgRTEpLmZvckVhY2goKHMsYSk9PntsZXQgbD1RMShpK2EsZSk7dTEocixzLm5hbWUsbCl9KSxyfWZ1bmN0aW9uIHMzKG49e30sdCl7bGV0IGU9e307cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmT2JqZWN0LmtleXMobikuZm9yRWFjaChpPT5lW0Z4KGksdCldPW5baV0pLGV9ZnVuY3Rpb24gRngobix0PSEwKXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teQS1aMC05X10vZywiXyIpfShuKTtpZighdClyZXR1cm4gZTtsZXQgcixpPWUuc3BsaXQoIl8iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsvXlxkKyQvLnRlc3QoaVtpLmxlbmd0aC0xXSkmJihyPWkucG9wKCkpO2xldCBvPWkuc2hpZnQoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBpLmxlbmd0aCYmKG8rPWkubWFwKHM9PnMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKS5qb2luKCIiKSkscj9gJHtvfV8ke3J9YDpvfWZ1bmN0aW9uIGY5KG4pe3JldHVybmBNU0dfJHtufWAudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBndmUobil7cmV0dXJuIG5ldyBhdShuLm5hbWUsdm9pZCAwLGlhLHZvaWQgMCxuLnNvdXJjZVNwYW4pfXZhciBfdmU9L1stLl0vLGFjPSJjdHgiLE54PSJyZiIsQXE9InJlc3RvcmVkQ3R4IixDdmU9bmV3IFNldChbSy5lbGVtZW50LEsuZWxlbWVudFN0YXJ0LEsuZWxlbWVudEVuZCxLLmVsZW1lbnRDb250YWluZXIsSy5lbGVtZW50Q29udGFpbmVyU3RhcnQsSy5lbGVtZW50Q29udGFpbmVyRW5kLEsuaTE4bkV4cCxLLmxpc3RlbmVyLEsuY2xhc3NQcm9wLEsuc3ludGhldGljSG9zdExpc3RlbmVyLEsuaG9zdFByb3BlcnR5LEsuc3ludGhldGljSG9zdFByb3BlcnR5LEsucHJvcGVydHksSy5wcm9wZXJ0eUludGVycG9sYXRlMSxLLnByb3BlcnR5SW50ZXJwb2xhdGUyLEsucHJvcGVydHlJbnRlcnBvbGF0ZTMsSy5wcm9wZXJ0eUludGVycG9sYXRlNCxLLnByb3BlcnR5SW50ZXJwb2xhdGU1LEsucHJvcGVydHlJbnRlcnBvbGF0ZTYsSy5wcm9wZXJ0eUludGVycG9sYXRlNyxLLnByb3BlcnR5SW50ZXJwb2xhdGU4LEsucHJvcGVydHlJbnRlcnBvbGF0ZVYsSy5hdHRyaWJ1dGUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTEsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTIsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTMsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTYsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTcsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTgsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVYsSy5zdHlsZVByb3AsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTEsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTIsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTMsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTQsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTUsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTYsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTcsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTgsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZVYsSy50ZXh0SW50ZXJwb2xhdGUsSy50ZXh0SW50ZXJwb2xhdGUxLEsudGV4dEludGVycG9sYXRlMixLLnRleHRJbnRlcnBvbGF0ZTMsSy50ZXh0SW50ZXJwb2xhdGU0LEsudGV4dEludGVycG9sYXRlNSxLLnRleHRJbnRlcnBvbGF0ZTYsSy50ZXh0SW50ZXJwb2xhdGU3LEsudGV4dEludGVycG9sYXRlOCxLLnRleHRJbnRlcnBvbGF0ZVZdKTtmdW5jdGlvbiB4ZihuLHQsZSl7cmV0dXJuIHhuKHQsbnVsbCxuKS5jYWxsRm4oZSxuKX1mdW5jdGlvbiBJcShuLHQpe2xldCBlPW51bGw7cmV0dXJuKCk9PihlfHwobi5wdXNoKG5ldyBhdSgiX3QiLHZvaWQgMCxWMCkpLGU9TWkodCkpLGUpfWZ1bmN0aW9uIEhiKG4pe3Rocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogVmlzaXRvciAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZG9lc24ndCBoYW5kbGUgJHtuLmNvbnN0cnVjdG9yLm5hbWV9YCl9ZnVuY3Rpb24gcnUobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/Y3Iobi5tYXAocnUpKTpudChuLGlhKX1mdW5jdGlvbiBtOShuLHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5sZW5ndGg+MD9mdW5jdGlvbihuLHQpe3JldHVybiBtbChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5tYXAoZT0+e2xldCByLG8scyxhLGk9bltlXTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT8oW28scl09aSxzPWUsYT1vIT09cik6KHM9cj1lLG89aSxhPSExKSx7a2V5OnMscXVvdGVkOl92ZS50ZXN0KHMpLHZhbHVlOnQmJmE/Y3IoW3J1KG8pLHJ1KHIpXSk6cnUobyl9fSkpfShuLHQpOm51bGx9ZnVuY3Rpb24gU04obil7Zm9yKDt4cShuW24ubGVuZ3RoLTFdKTspbi5wb3AoKTtyZXR1cm4gbn1mdW5jdGlvbiBNdmUobix0KXtpZihBcnJheS5pc0FycmF5KG4ucHJlZGljYXRlKSl7bGV0IGU9W107cmV0dXJuIG4ucHJlZGljYXRlLmZvckVhY2goaT0+e2xldCByPWkuc3BsaXQoIiwiKS5tYXAobz0+bnQoby50cmltKCkpKTtlLnB1c2goLi4ucil9KSx0LmdldENvbnN0TGl0ZXJhbChjcihlKSwhMCl9c3dpdGNoKG4ucHJlZGljYXRlLmZvcndhcmRSZWYpe2Nhc2UgMDpjYXNlIDI6cmV0dXJuIG4ucHJlZGljYXRlLmV4cHJlc3Npb247Y2FzZSAxOnJldHVybiB4bihLLnJlc29sdmVGb3J3YXJkUmVmKS5jYWxsRm4oW24ucHJlZGljYXRlLmV4cHJlc3Npb25dKX19dmFyIHlwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZXM9W119c2V0KHQsZSl7ZSYmdGhpcy52YWx1ZXMucHVzaCh7a2V5OnQsdmFsdWU6ZSxxdW90ZWQ6ITF9KX10b0xpdGVyYWxNYXAoKXtyZXR1cm4gbWwodGhpcy52YWx1ZXMpfX07ZnVuY3Rpb24gQWYobil7bGV0e2V4cHJlc3Npb25zOnQsc3RyaW5nczplfT1uO3JldHVybiAxPT09dC5sZW5ndGgmJjI9PT1lLmxlbmd0aCYmIiI9PT1lWzBdJiYiIj09PWVbMV0/MTp0Lmxlbmd0aCtlLmxlbmd0aH1mdW5jdGlvbiBUMShuKXtsZXQgdD1bXSxlPW51bGwsaT1udWxsLHI9MDtmb3IobGV0IG8gb2Ygbil7bGV0IHM9KCJmdW5jdGlvbiI9PXR5cGVvZiBvLnBhcmFtc09yRm4/by5wYXJhbXNPckZuKCk6by5wYXJhbXNPckZuKT8/W10sYT1BcnJheS5pc0FycmF5KHMpP3M6W3NdO3I8NTAwJiZpPT09by5yZWZlcmVuY2UmJkN2ZS5oYXMoaSk/KGU9ZS5jYWxsRm4oYSxlLnNvdXJjZVNwYW4pLHIrKyk6KG51bGwhPT1lJiZ0LnB1c2goZS50b1N0bXQoKSksZT14ZihvLnNwYW4sby5yZWZlcmVuY2UsYSksaT1vLnJlZmVyZW5jZSxyPTApfXJldHVybiBudWxsIT09ZSYmdC5wdXNoKGUudG9TdG10KCkpLHR9ZnVuY3Rpb24gZzkobix0KXtsZXQgZT1udWxsLGk9e25hbWU6bi5uYW1lLHR5cGU6bi50eXBlLGludGVybmFsVHlwZTpuLmludGVybmFsVHlwZSx0eXBlQXJndW1lbnRDb3VudDpuLnR5cGVBcmd1bWVudENvdW50LGRlcHM6W10sdGFyZ2V0OmljLkluamVjdGFibGV9O2lmKHZvaWQgMCE9PW4udXNlQ2xhc3Mpe2xldCBsLGE9bi51c2VDbGFzcy5leHByZXNzaW9uLmlzRXF1aXZhbGVudChuLmludGVybmFsVHlwZSk7dm9pZCAwIT09bi5kZXBzJiYobD1uLmRlcHMpLGU9dm9pZCAwIT09bD9hZih7Li4uaSxkZWxlZ2F0ZTpuLnVzZUNsYXNzLmV4cHJlc3Npb24sZGVsZWdhdGVEZXBzOmwsZGVsZWdhdGVUeXBlOmYwLkNsYXNzfSk6YT9hZihpKTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLnVzZUNsYXNzLmV4cHJlc3Npb24sdCl9fWVsc2UgZT12b2lkIDAhPT1uLnVzZUZhY3Rvcnk/dm9pZCAwIT09bi5kZXBzP2FmKHsuLi5pLGRlbGVnYXRlOm4udXNlRmFjdG9yeSxkZWxlZ2F0ZURlcHM6bi5kZXBzfHxbXSxkZWxlZ2F0ZVR5cGU6ZjAuRnVuY3Rpb259KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOk9zKFtdLFtuZXcgdW8obi51c2VGYWN0b3J5LmNhbGxGbihbXSkpXSl9OnZvaWQgMCE9PW4udXNlVmFsdWU/YWYoey4uLmksZXhwcmVzc2lvbjpuLnVzZVZhbHVlLmV4cHJlc3Npb259KTp2b2lkIDAhPT1uLnVzZUV4aXN0aW5nP2FmKHsuLi5pLGV4cHJlc3Npb246eG4oSy5pbmplY3QpLmNhbGxGbihbbi51c2VFeGlzdGluZy5leHByZXNzaW9uXSl9KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLmludGVybmFsVHlwZSx0KX07bGV0IHI9bi5pbnRlcm5hbFR5cGUsbz1uZXcgeXA7cmV0dXJuIG8uc2V0KCJ0b2tlbiIsciksby5zZXQoImZhY3RvcnkiLGUuZXhwcmVzc2lvbiksbnVsbCE9PW4ucHJvdmlkZWRJbi5leHByZXNzaW9uLnZhbHVlJiZvLnNldCgicHJvdmlkZWRJbiIsZnVuY3Rpb24oe2V4cHJlc3Npb246bixmb3J3YXJkUmVmOnR9KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gbjtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4bihLLmZvcndhcmRSZWYpLmNhbGxGbihbT3MoW10sW25ldyB1byhuKV0pXSl9KG4pfX0obi5wcm92aWRlZEluKSkse2V4cHJlc3Npb246eG4oSy5cdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlKS5jYWxsRm4oW28udG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksdHlwZTpTdmUobiksc3RhdGVtZW50czplLnN0YXRlbWVudHN9fWZ1bmN0aW9uIFN2ZShuKXtyZXR1cm4gbmV3IHNjKHhuKEsuSW5qZWN0YWJsZURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KV0pKX1mdW5jdGlvbiBfOShuLHQsZSl7cmV0dXJuIG4ubm9kZT09PXQubm9kZT90LnByb3AoIlx1MDI3NWZhYyIpOnY5KGU/eG4oSy5yZXNvbHZlRm9yd2FyZFJlZikuY2FsbEZuKFt0XSk6dCl9ZnVuY3Rpb24gdjkobil7cmV0dXJuIE9zKFtuZXcgUnMoInQiLFYwKV0sW25ldyB1byhuLnByb3AoIlx1MDI3NWZhYyIpLmNhbGxGbihbTWkoInQiKV0pKV0pfXZhciBFdmU9Wy9eXHMqJC8sL1s8Pl0vLC9eW3t9XSQvLC8mKCN8W2Etel0pL2ksL15cL1wvL10sRDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX1zdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiB0PyhmdW5jdGlvbihuLHQpe2lmKG51bGwhPXQmJighQXJyYXkuaXNBcnJheSh0KXx8MiE9dC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgJ2ludGVycG9sYXRpb24nIHRvIGJlIGFuIGFycmF5LCBbc3RhcnQsIGVuZF0uIik7aWYobnVsbCE9dCl7bGV0IGU9dFswXSxpPXRbMV07RXZlLmZvckVhY2gocj0+e2lmKHIudGVzdChlKXx8ci50ZXN0KGkpKXRocm93IG5ldyBFcnJvcihgWycke2V9JywgJyR7aX0nXSBjb250YWlucyB1bnVzYWJsZSBpbnRlcnBvbGF0aW9uIHN5bWJvbC5gKX0pfX0oMCx0KSxuZXcgRDAodFswXSx0WzFdKSk6JGN9fSwkYz1uZXcgRDAoInt7IiwifX0iKSxmcD0xMjMsdHU9MTI1O2Z1bmN0aW9uIGYzKG4pe3JldHVybiBuPj05JiZuPD0zMnx8MTYwPT1ufWZ1bmN0aW9uIHBwKG4pe3JldHVybiA0ODw9biYmbjw9NTd9ZnVuY3Rpb24gbTMobil7cmV0dXJuIG4+PTk3JiZuPD0xMjJ8fG4+PTY1JiZuPD05MH1mdW5jdGlvbiBXcShuKXtyZXR1cm4gMTA9PT1ufHwxMz09PW59ZnVuY3Rpb24geDkobil7cmV0dXJuIDQ4PD1uJiZuPD01NX1mdW5jdGlvbiB1TChuKXtyZXR1cm4gMzk9PT1ufHwzND09PW58fDk2PT09bn12YXIgd2Y9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5maWxlPXQsdGhpcy5vZmZzZXQ9ZSx0aGlzLmxpbmU9aSx0aGlzLmNvbD1yfXRvU3RyaW5nKCl7cmV0dXJuIG51bGwhPXRoaXMub2Zmc2V0P2Ake3RoaXMuZmlsZS51cmx9QCR7dGhpcy5saW5lfToke3RoaXMuY29sfWA6dGhpcy5maWxlLnVybH1tb3ZlQnkodCl7bGV0IGU9dGhpcy5maWxlLmNvbnRlbnQsaT1lLmxlbmd0aCxyPXRoaXMub2Zmc2V0LG89dGhpcy5saW5lLHM9dGhpcy5jb2w7Zm9yKDtyPjAmJnQ8MDspaWYoci0tLHQrKywxMD09ZS5jaGFyQ29kZUF0KHIpKXtvLS07bGV0IGw9ZS5zdWJzdHJpbmcoMCxyLTEpLmxhc3RJbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoMTApKTtzPWw+MD9yLWw6cn1lbHNlIHMtLTtmb3IoO3I8aSYmdD4wOyl7bGV0IGE9ZS5jaGFyQ29kZUF0KHIpO3IrKyx0LS0sMTA9PWE/KG8rKyxzPTApOnMrK31yZXR1cm4gbmV3IHdmKHRoaXMuZmlsZSxyLG8scyl9Z2V0Q29udGV4dCh0LGUpe2xldCBpPXRoaXMuZmlsZS5jb250ZW50LHI9dGhpcy5vZmZzZXQ7aWYobnVsbCE9cil7cj5pLmxlbmd0aC0xJiYocj1pLmxlbmd0aC0xKTtsZXQgbz1yLHM9MCxhPTA7Zm9yKDtzPHQmJnI+MCYmKHItLSxzKyssIlxuIiE9aVtyXXx8KythIT1lKTspO2ZvcihzPTAsYT0wO3M8dCYmbzxpLmxlbmd0aC0xJiYobysrLHMrKywiXG4iIT1pW29dfHwrK2EhPWUpOyk7cmV0dXJue2JlZm9yZTppLnN1YnN0cmluZyhyLHRoaXMub2Zmc2V0KSxhZnRlcjppLnN1YnN0cmluZyh0aGlzLm9mZnNldCxvKzEpfX1yZXR1cm4gbnVsbH19LEkxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb250ZW50PXQsdGhpcy51cmw9ZX19LFRvPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPXQscj1udWxsKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZSx0aGlzLmZ1bGxTdGFydD1pLHRoaXMuZGV0YWlscz1yfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc3RhcnQuZmlsZS5jb250ZW50LnN1YnN0cmluZyh0aGlzLnN0YXJ0Lm9mZnNldCx0aGlzLmVuZC5vZmZzZXQpfX0sbnU9KCgpPT57cmV0dXJuKG49bnV8fChudT17fSkpW24uV0FSTklORz0wXT0iV0FSTklORyIsbltuLkVSUk9SPTFdPSJFUlJPUiIsbnU7dmFyIG59KSgpLE1mPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLnNwYW49dCx0aGlzLm1zZz1lLHRoaXMubGV2ZWw9aX1jb250ZXh0dWFsTWVzc2FnZSgpe2xldCB0PXRoaXMuc3Bhbi5zdGFydC5nZXRDb250ZXh0KDEwMCwzKTtyZXR1cm4gdD9gJHt0aGlzLm1zZ30gKCIke3QuYmVmb3JlfVske251W3RoaXMubGV2ZWxdfSAtPl0ke3QuYWZ0ZXJ9IilgOnRoaXMubXNnfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5zcGFuLmRldGFpbHM/YCwgJHt0aGlzLnNwYW4uZGV0YWlsc31gOiIiO3JldHVybmAke3RoaXMuY29udGV4dHVhbE1lc3NhZ2UoKX06ICR7dGhpcy5zcGFuLnN0YXJ0fSR7dH1gfX0sVXZlPTA7ZnVuY3Rpb24gbTAobil7cmV0dXJuIG4ucmVwbGFjZSgvXFcvZywiXyIpfXZhciByMSxDOT0nKHRoaXMmJnRoaXMuX19tYWtlVGVtcGxhdGVPYmplY3R8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0pJyxkTD1jbGFzcyBleHRlbmRzIHRMe2NvbnN0cnVjdG9yKCl7c3VwZXIoITEpfXZpc2l0V3JhcHBlZE5vZGVFeHByKHQsZSl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW1pdCBhIFdyYXBwZWROb2RlRXhwciBpbiBKYXZhc2NyaXB0LiIpfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gZS5wcmludCh0LGB2YXIgJHt0Lm5hbWV9YCksdC52YWx1ZSYmKGUucHJpbnQodCwiID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7bGV0IGk9dC50ZW1wbGF0ZS5lbGVtZW50cztyZXR1cm4gdC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGAoJHtDOX0oYCksZS5wcmludCh0LGBbJHtpLm1hcChyPT5jZihyLnRleHQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXdUZXh0LCExKSkuam9pbigiLCAiKX1dKWApLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMuZm9yRWFjaChyPT57ZS5wcmludCh0LCIsICIpLHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9KSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0RnVuY3Rpb25FeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCxgZnVuY3Rpb24ke3QubmFtZT8iICIrdC5uYW1lOiIifShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50KHQsIn0iKSxudWxsfXZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpe3JldHVybiBlLnByaW50KHQsYGZ1bmN0aW9uICR7dC5uYW1lfShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRMb2NhbGl6ZWRTdHJpbmcodCxlKXtlLnByaW50KHQsYCRsb2NhbGl6ZSgke0M5fShgKTtsZXQgaT1bdC5zZXJpYWxpemVJMThuSGVhZCgpXTtmb3IobGV0IHI9MTtyPHQubWVzc2FnZVBhcnRzLmxlbmd0aDtyKyspaS5wdXNoKHQuc2VyaWFsaXplSTE4blRlbXBsYXRlUGFydChyKSk7cmV0dXJuIGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5jb29rZWQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXcsITEpKS5qb2luKCIsICIpfV0pYCksdC5leHByZXNzaW9ucy5mb3JFYWNoKHI9PntlLnByaW50KHQsIiwgIiksci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX0pLGUucHJpbnQodCwiKSIpLG51bGx9X3Zpc2l0UGFyYW1zKHQsZSl7dGhpcy52aXNpdEFsbE9iamVjdHMoaT0+ZS5wcmludChudWxsLGkubmFtZSksdCxlLCIsIil9fTtmdW5jdGlvbiB3OSguLi5uKXtpZighcDAudHJ1c3RlZFR5cGVzKXJldHVybiBuZXcgRnVuY3Rpb24oLi4ubik7bGV0IGk9YChmdW5jdGlvbiBhbm9ueW1vdXMoJHtuLnNsaWNlKDAsLTEpLmpvaW4oIiwiKX1cbikgeyAke25bbi5sZW5ndGgtMV19XG59KWAscj1wMC5ldmFsKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PXIxJiYocjE9bnVsbCxwMC50cnVzdGVkVHlwZXMpKXRyeXtyMT1wMC50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1qaXQiLHtjcmVhdGVTY3JpcHQ6bj0+bn0pfWNhdGNoe31yZXR1cm4gcjF9KCk/LmNyZWF0ZVNjcmlwdChuKXx8bn0oaSkpO3JldHVybiB2b2lkIDA9PT1yLmJpbmQ/bmV3IEZ1bmN0aW9uKC4uLm4pOihyLnRvU3RyaW5nPSgpPT5pLHIuYmluZChwMCkpfXZhciBoTD1jbGFzcyBleHRlbmRzIGRMe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5yZWZSZXNvbHZlcj10LHRoaXMuX2V2YWxBcmdOYW1lcz1bXSx0aGlzLl9ldmFsQXJnVmFsdWVzPVtdLHRoaXMuX2V2YWxFeHBvcnRlZFZhcnM9W119Y3JlYXRlUmV0dXJuU3RtdCh0KXtuZXcgdW8obmV3IHgwKHRoaXMuX2V2YWxFeHBvcnRlZFZhcnMubWFwKGk9Pm5ldyB5MShpLE1pKGkpLCExKSkpKS52aXNpdFN0YXRlbWVudCh0aGlzLHQpfWdldEFyZ3MoKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPHRoaXMuX2V2YWxBcmdOYW1lcy5sZW5ndGg7ZSsrKXRbdGhpcy5fZXZhbEFyZ05hbWVzW2VdXT10aGlzLl9ldmFsQXJnVmFsdWVzW2VdO3JldHVybiB0fXZpc2l0RXh0ZXJuYWxFeHByKHQsZSl7cmV0dXJuIHRoaXMuX2VtaXRSZWZlcmVuY2VUb0V4dGVybmFsKHQsdGhpcy5yZWZSZXNvbHZlci5yZXNvbHZlRXh0ZXJuYWxSZWZlcmVuY2UodC52YWx1ZSksZSksbnVsbH12aXNpdFdyYXBwZWROb2RlRXhwcih0LGUpe3JldHVybiB0aGlzLl9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LHQubm9kZSxlKSxudWxsfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZVZhclN0bXQodCxlKX12aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpfV9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LGUsaSl7bGV0IHI9dGhpcy5fZXZhbEFyZ1ZhbHVlcy5pbmRleE9mKGUpO2lmKC0xPT09cil7cj10aGlzLl9ldmFsQXJnVmFsdWVzLmxlbmd0aCx0aGlzLl9ldmFsQXJnVmFsdWVzLnB1c2goZSk7bGV0IG89ZnVuY3Rpb24obil7aWYoIW58fCFuLnJlZmVyZW5jZSlyZXR1cm4gbnVsbDtsZXQgdD1uLnJlZmVyZW5jZTtpZih0Ll9fYW5vbnltb3VzVHlwZSlyZXR1cm4gdC5fX2Fub255bW91c1R5cGU7aWYodC5fX2ZvcndhcmRfcmVmX18pcmV0dXJuIl9fZm9yd2FyZF9yZWZfXyI7bGV0IGU9Z3EodCk7cmV0dXJuIGUuaW5kZXhPZigiKCIpPj0wPyhlPSJhbm9ueW1vdXNfIitVdmUrKyx0Ll9fYW5vbnltb3VzVHlwZT1lKTplPW0wKGUpLGV9KHtyZWZlcmVuY2U6ZX0pfHwidmFsIjt0aGlzLl9ldmFsQXJnTmFtZXMucHVzaChgaml0XyR7b31fJHtyfWApfWkucHJpbnQodCx0aGlzLl9ldmFsQXJnTmFtZXNbcl0pfX07ZnVuY3Rpb24gTTkobil7bGV0IHQ9bmV3IHlwO251bGwhPT1uLnByb3ZpZGVycyYmdC5zZXQoInByb3ZpZGVycyIsbi5wcm92aWRlcnMpLG4uaW1wb3J0cy5sZW5ndGg+MCYmdC5zZXQoImltcG9ydHMiLGNyKG4uaW1wb3J0cykpO2xldCBlPXhuKEsuZGVmaW5lSW5qZWN0b3IpLmNhbGxGbihbdC50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgc2MoeG4oSy5JbmplY3RvckRlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlLnR5cGUpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgZzA9KCgpPT57cmV0dXJuKG49ZzB8fChnMD17fSkpW24uSW5saW5lPTBdPSJJbmxpbmUiLG5bbi5TaWRlRWZmZWN0PTFdPSJTaWRlRWZmZWN0IixuW24uT21pdD0yXT0iT21pdCIsZzA7dmFyIG59KSgpO2Z1bmN0aW9uIFl2ZShuKXtsZXR7YWRqYWNlbnRUeXBlOnQsaW50ZXJuYWxUeXBlOmUsYm9vdHN0cmFwOmksZGVjbGFyYXRpb25zOnIsaW1wb3J0czpvLGV4cG9ydHM6cyxzY2hlbWFzOmEsY29udGFpbnNGb3J3YXJkRGVjbHM6bCxzZWxlY3RvclNjb3BlTW9kZTpjLGlkOnV9PW4sZD1bXSxwPW5ldyB5cDtpZihwLnNldCgidHlwZSIsZSksaS5sZW5ndGg+MCYmcC5zZXQoImJvb3RzdHJhcCIsdWYoaSxsKSksYz09PWcwLklubGluZSlyLmxlbmd0aD4wJiZwLnNldCgiZGVjbGFyYXRpb25zIix1ZihyLGwpKSxvLmxlbmd0aD4wJiZwLnNldCgiaW1wb3J0cyIsdWYobyxsKSkscy5sZW5ndGg+MCYmcC5zZXQoImV4cG9ydHMiLHVmKHMsbCkpO2Vsc2UgaWYoYz09PWcwLlNpZGVFZmZlY3Qpe2xldCBtPWZ1bmN0aW9uKG4pe2xldHthZGphY2VudFR5cGU6dCxkZWNsYXJhdGlvbnM6ZSxpbXBvcnRzOmksZXhwb3J0czpyLGNvbnRhaW5zRm9yd2FyZERlY2xzOm99PW4scz1uZXcgeXA7aWYoZS5sZW5ndGg+MCYmcy5zZXQoImRlY2xhcmF0aW9ucyIsdWYoZSxvKSksaS5sZW5ndGg+MCYmcy5zZXQoImltcG9ydHMiLHVmKGksbykpLHIubGVuZ3RoPjAmJnMuc2V0KCJleHBvcnRzIix1ZihyLG8pKSwwPT09T2JqZWN0LmtleXMocy52YWx1ZXMpLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgeTAoe25hbWU6Im5nSml0TW9kZSIsbW9kdWxlTmFtZTpudWxsfSksaT1uZXcgbHIoaG4uSWRlbnRpY2FsLG5ldyB2MChlKSxudCgidW5kZWZpbmVkIikpLHI9bmV3IGxyKGhuLk9yLGksZSx2b2lkIDAsdm9pZCAwLCEwKTtyZXR1cm4gbmV3IGxyKGhuLkFuZCxyLHQpfSgwLG4pfShuZXcgdnAoeG4oSy5zZXROZ01vZHVsZVNjb3BlKSxbdCxzLnRvTGl0ZXJhbE1hcCgpXSkpLGM9bmV3IF9mKFtdLFtsLnRvU3RtdCgpXSk7cmV0dXJuIG5ldyB2cChjLFtdKS50b1N0bXQoKX0obik7bnVsbCE9PW0mJmQucHVzaChtKX1udWxsIT09YSYmYS5sZW5ndGg+MCYmcC5zZXQoInNjaGVtYXMiLGNyKGEubWFwKG09Pm0udmFsdWUpKSksbnVsbCE9PXUmJihwLnNldCgiaWQiLHUpLGQucHVzaCh4bihLLnJlZ2lzdGVyTmdNb2R1bGVUeXBlKS5jYWxsRm4oW3QsdV0pLnRvU3RtdCgpKSk7bGV0IGg9eG4oSy5kZWZpbmVOZ01vZHVsZSkuY2FsbEZuKFtwLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGY9ZnVuY3Rpb24oe3R5cGU6bixkZWNsYXJhdGlvbnM6dCxleHBvcnRzOmUsaW1wb3J0czppLGluY2x1ZGVJbXBvcnRUeXBlczpyLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6b30pe3JldHVybiBuZXcgc2MoeG4oSy5OZ01vZHVsZURlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlKSxudWxsPT09bz9FTih0KTpadmUobykscj9FTihpKTpkZCxFTihlKV0pKX0obik7cmV0dXJue2V4cHJlc3Npb246aCx0eXBlOmYsc3RhdGVtZW50czpkfX1mdW5jdGlvbiBFTihuKXtsZXQgdD1uLm1hcChlPT5pMyhlLnR5cGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gWnZlKG4pe2xldCB0PW4ubWFwKGU9PmkzKGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gUzkobil7bGV0IHQ9W107dC5wdXNoKHtrZXk6Im5hbWUiLHZhbHVlOm50KG4ucGlwZU5hbWUpLHF1b3RlZDohMX0pLHQucHVzaCh7a2V5OiJ0eXBlIix2YWx1ZTpuLnR5cGUudmFsdWUscXVvdGVkOiExfSksdC5wdXNoKHtrZXk6InB1cmUiLHZhbHVlOm50KG4ucHVyZSkscXVvdGVkOiExfSksbi5pc1N0YW5kYWxvbmUmJnQucHVzaCh7a2V5OiJzdGFuZGFsb25lIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSk7bGV0IGU9eG4oSy5kZWZpbmVQaXBlKS5jYWxsRm4oW21sKHQpXSx2b2lkIDAsITApLGk9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBzYyh4bihLLlBpcGVEZWNsYXJhdGlvbixbWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbmV3IHNjKG5ldyBGYShuLnBpcGVOYW1lKSksbmV3IHNjKG5ldyBGYShuLmlzU3RhbmRhbG9uZSkpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgXzA9KCgpPT57cmV0dXJuKG49XzB8fChfMD17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5QaXBlPTFdPSJQaXBlIixuW24uTmdNb2R1bGU9Ml09Ik5nTW9kdWxlIixfMDt2YXIgbn0pKCksbXg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pbnB1dD1lLHRoaXMuZXJyTG9jYXRpb249aSx0aGlzLmN0eExvY2F0aW9uPXIsdGhpcy5tZXNzYWdlPWBQYXJzZXIgRXJyb3I6ICR7dH0gJHtpfSBbJHtlfV0gaW4gJHtyfWB9fSxTZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1lfXRvQWJzb2x1dGUodCl7cmV0dXJuIG5ldyBPYSh0K3RoaXMuc3RhcnQsdCt0aGlzLmVuZCl9fSxwbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3Bhbj10LHRoaXMuc291cmNlU3Bhbj1lfXRvU3RyaW5nKCl7cmV0dXJuIkFTVCJ9fSxBMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMubmFtZVNwYW49aX19LG5hPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe319LEVmPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0SW1wbGljaXRSZWNlaXZlcih0aGlzLGUpfX0sZ3g9Y2xhc3MgZXh0ZW5kcyBFZnt2aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRUaGlzUmVjZWl2ZXI/Lih0aGlzLGUpfX0sX3g9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0Q2hhaW4odGhpcyxlKX19LHZ4PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMuY29uZGl0aW9uPWksdGhpcy50cnVlRXhwPXIsdGhpcy5mYWxzZUV4cD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdENvbmRpdGlvbmFsKHRoaXMsZSl9fSxvdT1jbGFzcyBleHRlbmRzIEEwe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlLGkpLHRoaXMucmVjZWl2ZXI9cix0aGlzLm5hbWU9b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRQcm9wZXJ0eVJlYWQodGhpcyxlKX19LHl4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpKSx0aGlzLnJlY2VpdmVyPXIsdGhpcy5uYW1lPW8sdGhpcy52YWx1ZT1zfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByb3BlcnR5V3JpdGUodGhpcyxlKX19LGJ4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUsaSksdGhpcy5yZWNlaXZlcj1yLHRoaXMubmFtZT1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFNhZmVQcm9wZXJ0eVJlYWQodGhpcyxlKX19LEkwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRLZXllZFJlYWQodGhpcyxlKX19LFAwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlS2V5ZWRSZWFkKHRoaXMsZSl9fSx4eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cix0aGlzLnZhbHVlPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0S2V5ZWRXcml0ZSh0aGlzLGUpfX0sUjA9Y2xhc3MgZXh0ZW5kcyBBMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLHMpLHRoaXMuZXhwPWksdGhpcy5uYW1lPXIsdGhpcy5hcmdzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0UGlwZSh0aGlzLGUpfX0sSXM9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLnZhbHVlPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0aGlzLGUpfX0sTzA9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5KHRoaXMsZSl9fSxDeD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5rZXlzPWksdGhpcy52YWx1ZXM9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwKHRoaXMsZSl9fSxabz1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5zdHJpbmdzPWksdGhpcy5leHByZXNzaW9ucz1yfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEludGVycG9sYXRpb24odGhpcyxlKX19LGhsPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMub3BlcmF0aW9uPWksdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEJpbmFyeSh0aGlzLGUpfX0sY2M9Y2xhc3MgZXh0ZW5kcyBobHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcih0LGUsbyxzLGEpLHRoaXMub3BlcmF0b3I9aSx0aGlzLmV4cHI9cix0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy5vcGVyYXRpb249bnVsbH1zdGF0aWMgY3JlYXRlTWludXModCxlLGkpe3JldHVybiBuZXcgY2ModCxlLCItIixpLCItIixuZXcgSXModCxlLDApLGkpfXN0YXRpYyBjcmVhdGVQbHVzKHQsZSxpKXtyZXR1cm4gbmV3IGNjKHQsZSwiKyIsaSwiLSIsaSxuZXcgSXModCxlLDApKX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHZvaWQgMCE9PXQudmlzaXRVbmFyeT90LnZpc2l0VW5hcnkodGhpcyxlKTp0LnZpc2l0QmluYXJ5KHRoaXMsZSl9fSx3eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuZXhwcmVzc2lvbj1pfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByZWZpeE5vdCh0aGlzLGUpfX0sTXg9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb249aX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXROb25OdWxsQXNzZXJ0KHRoaXMsZSl9fSxicD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRDYWxsKHRoaXMsZSl9fSxrMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlQ2FsbCh0aGlzLGUpfX0sT2E9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX19LGV1PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihuZXcgU2YoMCxudWxsPT09ZT8wOmUubGVuZ3RoKSxuZXcgT2EocixudWxsPT09ZT9yOnIrZS5sZW5ndGgpKSx0aGlzLmFzdD10LHRoaXMuc291cmNlPWUsdGhpcy5sb2NhdGlvbj1pLHRoaXMuZXJyb3JzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0QVNUV2l0aFNvdXJjZT90LnZpc2l0QVNUV2l0aFNvdXJjZSh0aGlzLGUpOnRoaXMuYXN0LnZpc2l0KHQsZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZX0gaW4gJHt0aGlzLmxvY2F0aW9ufWB9fSxTeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fSxnTD1jbGFzc3t2aXNpdCh0LGUpe3QudmlzaXQodGhpcyxlKX12aXNpdFVuYXJ5KHQsZSl7dGhpcy52aXNpdCh0LmV4cHIsZSl9dmlzaXRCaW5hcnkodCxlKXt0aGlzLnZpc2l0KHQubGVmdCxlKSx0aGlzLnZpc2l0KHQucmlnaHQsZSl9dmlzaXRDaGFpbih0LGUpe3RoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7dGhpcy52aXNpdCh0LmNvbmRpdGlvbixlKSx0aGlzLnZpc2l0KHQudHJ1ZUV4cCxlKSx0aGlzLnZpc2l0KHQuZmFsc2VFeHAsZSl9dmlzaXRQaXBlKHQsZSl7dGhpcy52aXNpdCh0LmV4cCxlKSx0aGlzLnZpc2l0QWxsKHQuYXJncyxlKX12aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXt9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXt9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0S2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSksdGhpcy52aXNpdCh0LnZhbHVlLGUpfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0TGl0ZXJhbE1hcCh0LGUpe3RoaXMudmlzaXRBbGwodC52YWx1ZXMsZSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7fXZpc2l0UHJlZml4Tm90KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXROb25OdWxsQXNzZXJ0KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC52YWx1ZSxlKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRDYWxsKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXRBbGwodC5hcmdzLGUpfXZpc2l0U2FmZUNhbGwodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSksdGhpcy52aXNpdEFsbCh0LmFyZ3MsZSl9dmlzaXRBbGwodCxlKXtmb3IobGV0IGkgb2YgdCl0aGlzLnZpc2l0KGksZSl9fSxfTD1jbGFzc3t2aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdFRoaXNSZWNlaXZlcih0LGUpe3JldHVybiB0fXZpc2l0SW50ZXJwb2xhdGlvbih0LGUpe3JldHVybiBuZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7cmV0dXJuIG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQudmFsdWUpfXZpc2l0UHJvcGVydHlSZWFkKHQsZSl7cmV0dXJuIG5ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sdC5yZWNlaXZlci52aXNpdCh0aGlzKSx0Lm5hbWUpfXZpc2l0UHJvcGVydHlXcml0ZSh0LGUpe3JldHVybiBuZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0U2FmZVByb3BlcnR5UmVhZCh0LGUpe3JldHVybiBuZXcgYngodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgTzAodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpKX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IEN4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5rZXlzLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpKX12aXNpdFVuYXJ5KHQsZSl7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHIudmlzaXQodGhpcykpO2Nhc2UiLSI6cmV0dXJuIGNjLmNyZWF0ZU1pbnVzKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5leHByLnZpc2l0KHRoaXMpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biB1bmFyeSBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9fXZpc2l0QmluYXJ5KHQsZSl7cmV0dXJuIG5ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLHQubGVmdC52aXNpdCh0aGlzKSx0LnJpZ2h0LnZpc2l0KHRoaXMpKX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBuZXcgd3godC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBuZXcgTXgodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Q29uZGl0aW9uYWwodCxlKXtyZXR1cm4gbmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5jb25kaXRpb24udmlzaXQodGhpcyksdC50cnVlRXhwLnZpc2l0KHRoaXMpLHQuZmFsc2VFeHAudmlzaXQodGhpcykpfXZpc2l0UGlwZSh0LGUpe3JldHVybiBuZXcgUjAodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cC52aXNpdCh0aGlzKSx0Lm5hbWUsdGhpcy52aXNpdEFsbCh0LmFyZ3MpLHQubmFtZVNwYW4pfXZpc2l0S2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBJMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfXZpc2l0S2V5ZWRXcml0ZSh0LGUpe3JldHVybiBuZXcgeHgodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHQua2V5LnZpc2l0KHRoaXMpLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0Q2FsbCh0LGUpe3JldHVybiBuZXcgYnAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRTYWZlQ2FsbCh0LGUpe3JldHVybiBuZXcgazAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRBbGwodCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT10W2ldLnZpc2l0KHRoaXMpO3JldHVybiBlfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gbmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBQMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfX0sdkw9Y2xhc3N7dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIHR9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdEludGVycG9sYXRpb24odCxlKXtsZXQgaT10aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpO3JldHVybiBpIT09dC5leHByZXNzaW9ucz9uZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsaSk6dH12aXNpdExpdGVyYWxQcmltaXRpdmUodCxlKXtyZXR1cm4gdH12aXNpdFByb3BlcnR5UmVhZCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyP25ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4saSx0Lm5hbWUpOnR9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKSxyPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC52YWx1ZT9uZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLGksdC5uYW1lLHIpOnR9dmlzaXRTYWZlUHJvcGVydHlSZWFkKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQucmVjZWl2ZXI/bmV3IGJ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixpLHQubmFtZSk6dH12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyk7cmV0dXJuIGkhPT10LmV4cHJlc3Npb25zP25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpOnR9dmlzaXRMaXRlcmFsTWFwKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LnZhbHVlcyk7cmV0dXJuIGkhPT10LnZhbHVlcz9uZXcgQ3godC5zcGFuLHQuc291cmNlU3Bhbix0LmtleXMsaSk6dH12aXNpdFVuYXJ5KHQsZSl7bGV0IGk9dC5leHByLnZpc2l0KHRoaXMpO2lmKGkhPT10LmV4cHIpc3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3BhbixpKTtjYXNlIi0iOnJldHVybiBjYy5jcmVhdGVNaW51cyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHVuYXJ5IG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdH12aXNpdEJpbmFyeSh0LGUpe2xldCBpPXQubGVmdC52aXNpdCh0aGlzKSxyPXQucmlnaHQudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmxlZnR8fHIhPT10LnJpZ2h0P25ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLGkscik6dH12aXNpdFByZWZpeE5vdCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgd3godC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgTXgodC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Q29uZGl0aW9uYWwodCxlKXtsZXQgaT10LmNvbmRpdGlvbi52aXNpdCh0aGlzKSxyPXQudHJ1ZUV4cC52aXNpdCh0aGlzKSxvPXQuZmFsc2VFeHAudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmNvbmRpdGlvbnx8ciE9PXQudHJ1ZUV4cHx8byE9PXQuZmFsc2VFeHA/bmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyLG8pOnR9dmlzaXRQaXBlKHQsZSl7bGV0IGk9dC5leHAudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LmV4cHx8ciE9PXQuYXJncz9uZXcgUjAodC5zcGFuLHQuc291cmNlU3BhbixpLHQubmFtZSxyLHQubmFtZVNwYW4pOnR9dmlzaXRLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IEkwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fXZpc2l0S2V5ZWRXcml0ZSh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10LmtleS52aXNpdCh0aGlzKSxvPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXl8fG8hPT10LnZhbHVlP25ldyB4eCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscixvKTp0fXZpc2l0QWxsKHQpe2xldCBlPVtdLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3Ipe2xldCBvPXRbcl0scz1vLnZpc2l0KHRoaXMpO2Vbcl09cyxpPWl8fHMhPT1vfXJldHVybiBpP2U6dH12aXNpdENoYWluKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbnM/bmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4saSk6dH12aXNpdENhbGwodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MpO3JldHVybiBpIT09dC5yZWNlaXZlcnx8ciE9PXQuYXJncz9uZXcgYnAodC5zcGFuLHQuc291cmNlU3BhbixpLHIsdC5hcmd1bWVudFNwYW4pOnR9dmlzaXRTYWZlQ2FsbCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5hcmdzP25ldyBrMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscix0LmFyZ3VtZW50U3Bhbik6dH12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IFAwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fX0sUWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3RoaXMubmFtZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMudHlwZT1pLHRoaXMuc291cmNlU3Bhbj1yLHRoaXMua2V5U3Bhbj1vLHRoaXMudmFsdWVTcGFuPXMsdGhpcy5pc0xpdGVyYWw9dGhpcy50eXBlPT09Z3AuTElURVJBTF9BVFRSLHRoaXMuaXNBbmltYXRpb249dGhpcy50eXBlPT09Z3AuQU5JTUFUSU9OfX0sZ3A9KCgpPT57cmV0dXJuKG49Z3B8fChncD17fSkpW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkxJVEVSQUxfQVRUUj0xXT0iTElURVJBTF9BVFRSIixuW24uQU5JTUFUSU9OPTJdPSJBTklNQVRJT04iLGdwO3ZhciBufSkoKSxQMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLm5hbWU9dCx0aGlzLnRhcmdldE9yUGhhc2U9ZSx0aGlzLnR5cGU9aSx0aGlzLmhhbmRsZXI9cix0aGlzLnNvdXJjZVNwYW49byx0aGlzLmhhbmRsZXJTcGFuPXMsdGhpcy5rZXlTcGFuPWF9fSx5TD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vfX0sUjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlY3VyaXR5Q29udGV4dD1pLHRoaXMudmFsdWU9cix0aGlzLnVuaXQ9byx0aGlzLnNvdXJjZVNwYW49cyx0aGlzLmtleVNwYW49YSx0aGlzLnZhbHVlU3Bhbj1sfX0sRXg9Y2xhc3N7fTtmdW5jdGlvbiAkdmUobix0LGUsaSxyLG8scyl7bnx8KG49bmV3IE8xKHMpKTtsZXQgYT1mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBDTChuKTtyZXR1cm4gdC52aXNpdChlKX0obix0KX0oe2NyZWF0ZUxpdGVyYWxBcnJheUNvbnZlcnRlcjpkPT5wPT5jcihwKSxjcmVhdGVMaXRlcmFsTWFwQ29udmVydGVyOmQ9PnA9Pm1sKGQubWFwKChmLG0pPT4oe2tleTpmLmtleSx2YWx1ZTpwW21dLHF1b3RlZDpmLnF1b3RlZH0pKSksY3JlYXRlUGlwZUNvbnZlcnRlcjpkPT57dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIFN0YXRlOiBBY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBpcGVzLiBQaXBlOiAke2R9YCl9fSxlKSxsPW5ldyBUeChuLHQsaSwhMSxyLG8pLGM9W107UXEoYS52aXNpdChsLEJpLlN0YXRlbWVudCksYyksZnVuY3Rpb24obix0LGUpe2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pZS51bnNoaWZ0KFhxKHQsaSkpfShsLnRlbXBvcmFyeUNvdW50LGksYyksbC51c2VzSW1wbGljaXRSZWNlaXZlciYmbi5ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCk7bGV0IHU9Yy5sZW5ndGgtMTtpZih1Pj0wKXtsZXQgZD1jW3VdO2QgaW5zdGFuY2VvZiBsdSYmKGNbdV09bmV3IHVvKGQuZXhwcikpfXJldHVybiBjfWZ1bmN0aW9uIHFxKG4sdCxlLGkpe258fChuPW5ldyBPMSk7bGV0IHI9bmV3IFR4KG4sdCxpLCExKSxvPWUudmlzaXQocixCaS5FeHByZXNzaW9uKSxzPVlxKHIsaSk7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RtdHM9dCx0aGlzLmN1cnJWYWxFeHByPWV9fShzLG8pfWZ1bmN0aW9uIFlxKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuLnRlbXBvcmFyeUNvdW50O2krKyllLnB1c2goWHEodCxpKSk7cmV0dXJuIGV9ZnVuY3Rpb24geEwobix0KXtyZXR1cm5gdG1wXyR7bn1fJHt0fWB9ZnVuY3Rpb24gWHEobix0KXtyZXR1cm4gbmV3IGF1KHhMKG4sdCkpfUV4LmV2ZW50PU1pKCIkZXZlbnQiKTt2YXIgQmk9KCgpPT57cmV0dXJuKG49Qml8fChCaT17fSkpW24uU3RhdGVtZW50PTBdPSJTdGF0ZW1lbnQiLG5bbi5FeHByZXNzaW9uPTFdPSJFeHByZXNzaW9uIixCaTt2YXIgbn0pKCk7ZnVuY3Rpb24gRTkobix0KXtpZihuIT09QmkuRXhwcmVzc2lvbil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGV4cHJlc3Npb24sIGJ1dCBzYXcgJHt0fWApfWZ1bmN0aW9uIERzKG4sdCl7cmV0dXJuIG49PT1CaS5TdGF0ZW1lbnQ/dC50b1N0bXQoKTp0fXZhciBDTD1jbGFzcyBleHRlbmRzIF9Me2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29udmVydGVyRmFjdG9yeT10fXZpc2l0UGlwZSh0LGUpe2xldCBpPVt0LmV4cCwuLi50LmFyZ3NdLm1hcChyPT5yLnZpc2l0KHRoaXMsZSkpO3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3BhbixpLHRoaXMuX2NvbnZlcnRlckZhY3RvcnkuY3JlYXRlUGlwZUNvbnZlcnRlcih0Lm5hbWUsaS5sZW5ndGgpKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbnMubWFwKHI9PnIudmlzaXQodGhpcyxlKSk7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLGksdGhpcy5fY29udmVydGVyRmFjdG9yeS5jcmVhdGVMaXRlcmFsQXJyYXlDb252ZXJ0ZXIodC5leHByZXNzaW9ucy5sZW5ndGgpKX12aXNpdExpdGVyYWxNYXAodCxlKXtsZXQgaT10LnZhbHVlcy5tYXAocj0+ci52aXNpdCh0aGlzLGUpKTtyZXR1cm4gbmV3IF9wKHQuc3Bhbix0LnNvdXJjZVNwYW4saSx0aGlzLl9jb252ZXJ0ZXJGYWN0b3J5LmNyZWF0ZUxpdGVyYWxNYXBDb252ZXJ0ZXIodC5rZXlzKSl9fSxUeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5fbG9jYWxSZXNvbHZlcj10LHRoaXMuX2ltcGxpY2l0UmVjZWl2ZXI9ZSx0aGlzLmJpbmRpbmdJZD1pLHRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uPXIsdGhpcy5iYXNlU291cmNlU3Bhbj1vLHRoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzPXMsdGhpcy5fbm9kZU1hcD1uZXcgTWFwLHRoaXMuX3Jlc3VsdE1hcD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRUZW1wb3Jhcnk9MCx0aGlzLnRlbXBvcmFyeUNvdW50PTAsdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMX12aXNpdFVuYXJ5KHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6aT1wZi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1wZi5NaW51czticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiBEcyhlLG5ldyBveChpLHRoaXMuX3Zpc2l0KHQuZXhwcixCaS5FeHByZXNzaW9uKSx2b2lkIDAsdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRCaW5hcnkodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRpb24pe2Nhc2UiKyI6aT1obi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1obi5NaW51czticmVhaztjYXNlIioiOmk9aG4uTXVsdGlwbHk7YnJlYWs7Y2FzZSIvIjppPWhuLkRpdmlkZTticmVhaztjYXNlIiUiOmk9aG4uTW9kdWxvO2JyZWFrO2Nhc2UiJiYiOmk9aG4uQW5kO2JyZWFrO2Nhc2UifHwiOmk9aG4uT3I7YnJlYWs7Y2FzZSI9PSI6aT1obi5FcXVhbHM7YnJlYWs7Y2FzZSIhPSI6aT1obi5Ob3RFcXVhbHM7YnJlYWs7Y2FzZSI9PT0iOmk9aG4uSWRlbnRpY2FsO2JyZWFrO2Nhc2UiIT09IjppPWhuLk5vdElkZW50aWNhbDticmVhaztjYXNlIjwiOmk9aG4uTG93ZXI7YnJlYWs7Y2FzZSI+IjppPWhuLkJpZ2dlcjticmVhaztjYXNlIjw9IjppPWhuLkxvd2VyRXF1YWxzO2JyZWFrO2Nhc2UiPj0iOmk9aG4uQmlnZ2VyRXF1YWxzO2JyZWFrO2Nhc2UiPz8iOnJldHVybiB0aGlzLmNvbnZlcnROdWxsaXNoQ29hbGVzY2UodCxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uICR7dC5vcGVyYXRpb259YCl9cmV0dXJuIERzKGUsbmV3IGxyKGksdGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQucmlnaHQsQmkuRXhwcmVzc2lvbiksdm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZihuIT09QmkuU3RhdGVtZW50KXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQsIGJ1dCBzYXcgJHt0fWApfShlLHQpLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7cmV0dXJuIERzKGUsdGhpcy5fdmlzaXQodC5jb25kaXRpb24sQmkuRXhwcmVzc2lvbikuY29uZGl0aW9uYWwodGhpcy5fdmlzaXQodC50cnVlRXhwLEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQuZmFsc2VFeHAsQmkuRXhwcmVzc2lvbiksdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRQaXBlKHQsZSl7dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIHN0YXRlOiBQaXBlcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucy4gUGlwZTogJHt0Lm5hbWV9YCl9dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIEU5KGUsdCksdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyfXZpc2l0VGhpc1JlY2VpdmVyKHQsZSl7cmV0dXJuIHRoaXMudmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7aWYoIXRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIik7RTkoZSx0KTtsZXQgaT1bXTtmb3IobGV0IG89MDtvPHQuc3RyaW5ncy5sZW5ndGgtMTtvKyspaS5wdXNoKG50KHQuc3RyaW5nc1tvXSkpLGkucHVzaCh0aGlzLl92aXNpdCh0LmV4cHJlc3Npb25zW29dLEJpLkV4cHJlc3Npb24pKTtpLnB1c2gobnQodC5zdHJpbmdzW3Quc3RyaW5ncy5sZW5ndGgtMV0pKTtsZXQgcj10LnN0cmluZ3M7cmV0dXJuIDI9PT1yLmxlbmd0aCYmIiI9PT1yWzBdJiYiIj09PXJbMV0/aT1baVsxXV06dC5leHByZXNzaW9ucy5sZW5ndGg+PTkmJihpPVtjcihpKV0pLG5ldyB3TChpKX12aXNpdEtleWVkUmVhZCh0LGUpe2xldCBpPXRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KTtyZXR1cm4gaT90aGlzLmNvbnZlcnRTYWZlQWNjZXNzKHQsaSxlKTpEcyhlLHRoaXMuX3Zpc2l0KHQucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbikua2V5KHRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pKSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKSxyPXRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pLG89dGhpcy5fdmlzaXQodC52YWx1ZSxCaS5FeHByZXNzaW9uKTtyZXR1cm4gaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJnRoaXMuX2xvY2FsUmVzb2x2ZXIubWF5YmVSZXN0b3JlVmlldygpLERzKGUsaS5rZXkocikuc2V0KG8pKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogbGl0ZXJhbCBhcnJheXMgc2hvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBmdW5jdGlvbnMiKX12aXNpdExpdGVyYWxNYXAodCxlKXt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGxpdGVyYWwgbWFwcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucyIpfXZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0LGUpe3JldHVybiBEcyhlLG50KHQudmFsdWUsbnVsbD09dC52YWx1ZXx8ITA9PT10LnZhbHVlfHwhMD09PXQudmFsdWU/aWE6dm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfV9nZXRMb2NhbCh0LGUpe3JldHVybiB0aGlzLl9sb2NhbFJlc29sdmVyLmdsb2JhbHM/Lmhhcyh0KSYmZSBpbnN0YW5jZW9mIGd4P251bGw6dGhpcy5fbG9jYWxSZXNvbHZlci5nZXRMb2NhbCh0KX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBEcyhlLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyByeChuLHZvaWQgMCl9KHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSkpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBEcyhlLHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7e2xldCByPW51bGwsbz10aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyLHM9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKTtyZXR1cm4gcz09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJihyPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKSxyJiYodGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj1vLHRoaXMuYWRkSW1wbGljaXRSZWNlaXZlckFjY2Vzcyh0Lm5hbWUpKSksbnVsbD09ciYmKHI9cy5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLHIpfX12aXNpdFByb3BlcnR5V3JpdGUodCxlKXtsZXQgaT10aGlzLl92aXNpdCh0LnJlY2VpdmVyLEJpLkV4cHJlc3Npb24pLHI9dGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcixvPW51bGw7aWYoaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXIpe2xldCBzPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKTtpZihzKXtpZighKHMgaW5zdGFuY2VvZiBiMCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXNzaWduIHZhbHVlICIke3QudmFsdWUgaW5zdGFuY2VvZiBvdT90LnZhbHVlLm5hbWU6dm9pZCAwfSIgdG8gdGVtcGxhdGUgdmFyaWFibGUgIiR7dC5uYW1lfSIuIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LmApO289cyx0aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyPXIsdGhpcy5hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQubmFtZSl9fXJldHVybiBudWxsPT09byYmKG89aS5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLG8uc2V0KHRoaXMuX3Zpc2l0KHQudmFsdWUsQmkuRXhwcmVzc2lvbikpKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdEFsbCh0LGUpe3JldHVybiB0Lm1hcChpPT50aGlzLl92aXNpdChpLGUpKX12aXNpdENhbGwodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7bGV0IHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MsQmkuRXhwcmVzc2lvbik7aWYodCBpbnN0YW5jZW9mIF9wKXJldHVybiBEcyhlLHQuY29udmVydGVyKHIpKTtsZXQgbz10LnJlY2VpdmVyO2lmKG8gaW5zdGFuY2VvZiBvdSYmby5yZWNlaXZlciBpbnN0YW5jZW9mIEVmJiYhKG8ucmVjZWl2ZXIgaW5zdGFuY2VvZiBneCkmJiIkYW55Ij09PW8ubmFtZSl7aWYoMSE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYWxsIHRvICRhbnksIGV4cGVjdGVkIDEgYXJndW1lbnQgYnV0IHJlY2VpdmVkICR7ci5sZW5ndGh8fCJub25lIn1gKTtyZXR1cm4gRHMoZSxyWzBdKX1yZXR1cm4gRHMoZSx0aGlzLl92aXNpdChvLEJpLkV4cHJlc3Npb24pLmNhbGxGbihyLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0U2FmZUNhbGwodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX1fdmlzaXQodCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0TWFwLmdldCh0KXx8KHRoaXMuX25vZGVNYXAuZ2V0KHQpfHx0KS52aXNpdCh0aGlzLGUpfWNvbnZlcnRTYWZlQWNjZXNzKHQsZSxpKXtsZXQgbyxyPXRoaXMuX3Zpc2l0KGUucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbik7dGhpcy5uZWVkc1RlbXBvcmFyeUluU2FmZUFjY2VzcyhlLnJlY2VpdmVyKSYmKG89dGhpcy5hbGxvY2F0ZVRlbXBvcmFyeSgpLHI9by5zZXQociksdGhpcy5fcmVzdWx0TWFwLnNldChlLnJlY2VpdmVyLG8pKTtsZXQgcz1yLmlzQmxhbmsoKTt0aGlzLl9ub2RlTWFwLnNldChlLGUgaW5zdGFuY2VvZiBrMD9uZXcgYnAoZS5zcGFuLGUuc291cmNlU3BhbixlLnJlY2VpdmVyLGUuYXJncyxlLmFyZ3VtZW50U3Bhbik6ZSBpbnN0YW5jZW9mIFAwP25ldyBJMChlLnNwYW4sZS5zb3VyY2VTcGFuLGUucmVjZWl2ZXIsZS5rZXkpOm5ldyBvdShlLnNwYW4sZS5zb3VyY2VTcGFuLGUubmFtZVNwYW4sZS5yZWNlaXZlcixlLm5hbWUpKTtsZXQgYT10aGlzLl92aXNpdCh0LEJpLkV4cHJlc3Npb24pO3JldHVybiB0aGlzLl9ub2RlTWFwLmRlbGV0ZShlKSxvJiZ0aGlzLnJlbGVhc2VUZW1wb3JhcnkobyksRHMoaSxzLmNvbmRpdGlvbmFsKEtOLGEpKX1jb252ZXJ0TnVsbGlzaENvYWxlc2NlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHI9dGhpcy5fdmlzaXQodC5yaWdodCxCaS5FeHByZXNzaW9uKSxvPXRoaXMuYWxsb2NhdGVUZW1wb3JhcnkoKTtyZXR1cm4gdGhpcy5yZWxlYXNlVGVtcG9yYXJ5KG8pLERzKGUsby5zZXQoaSkubm90SWRlbnRpY2FsKEtOKS5hbmQoby5ub3RJZGVudGljYWwobnQodm9pZCAwKSkpLmNvbmRpdGlvbmFsKG8scikpfWxlZnRNb3N0U2FmZU5vZGUodCl7bGV0IGU9KGkscik9Pih0aGlzLl9ub2RlTWFwLmdldChyKXx8cikudmlzaXQoaSk7cmV0dXJuIHQudmlzaXQoe3Zpc2l0VW5hcnk6aT0+bnVsbCx2aXNpdEJpbmFyeTppPT5udWxsLHZpc2l0Q2hhaW46aT0+bnVsbCx2aXNpdENvbmRpdGlvbmFsOmk9Pm51bGwsdmlzaXRDYWxsKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil9LHZpc2l0U2FmZUNhbGwoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKXx8aX0sdmlzaXRJbXBsaWNpdFJlY2VpdmVyOmk9Pm51bGwsdmlzaXRUaGlzUmVjZWl2ZXI6aT0+bnVsbCx2aXNpdEludGVycG9sYXRpb246aT0+bnVsbCx2aXNpdEtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfSx2aXNpdEtleWVkV3JpdGU6aT0+bnVsbCx2aXNpdExpdGVyYWxBcnJheTppPT5udWxsLHZpc2l0TGl0ZXJhbE1hcDppPT5udWxsLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTppPT5udWxsLHZpc2l0UGlwZTppPT5udWxsLHZpc2l0UHJlZml4Tm90Omk9Pm51bGwsdmlzaXROb25OdWxsQXNzZXJ0Omk9Pm51bGwsdmlzaXRQcm9wZXJ0eVJlYWQoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKX0sdmlzaXRQcm9wZXJ0eVdyaXRlOmk9Pm51bGwsdmlzaXRTYWZlUHJvcGVydHlSZWFkKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil8fGl9LHZpc2l0U2FmZUtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfHxpfX0pfW5lZWRzVGVtcG9yYXJ5SW5TYWZlQWNjZXNzKHQpe2xldCBlPShyLG8pPT5vJiYodGhpcy5fbm9kZU1hcC5nZXQobyl8fG8pLnZpc2l0KHIpO3JldHVybiB0LnZpc2l0KHt2aXNpdFVuYXJ5KHIpe3JldHVybiBlKHRoaXMsci5leHByKX0sdmlzaXRCaW5hcnkocil7cmV0dXJuIGUodGhpcyxyLmxlZnQpfHxlKHRoaXMsci5yaWdodCl9LHZpc2l0Q2hhaW46cj0+ITEsdmlzaXRDb25kaXRpb25hbChyKXtyZXR1cm4gZSh0aGlzLHIuY29uZGl0aW9uKXx8ZSh0aGlzLHIudHJ1ZUV4cCl8fGUodGhpcyxyLmZhbHNlRXhwKX0sdmlzaXRDYWxsOnI9PiEwLHZpc2l0U2FmZUNhbGw6cj0+ITAsdmlzaXRJbXBsaWNpdFJlY2VpdmVyOnI9PiExLHZpc2l0VGhpc1JlY2VpdmVyOnI9PiExLHZpc2l0SW50ZXJwb2xhdGlvbihyKXtyZXR1cm4oKHIsbyk9Pm8uc29tZShzPT5lKHIscykpKSh0aGlzLHIuZXhwcmVzc2lvbnMpfSx2aXNpdEtleWVkUmVhZDpyPT4hMSx2aXNpdEtleWVkV3JpdGU6cj0+ITEsdmlzaXRMaXRlcmFsQXJyYXk6cj0+ITAsdmlzaXRMaXRlcmFsTWFwOnI9PiEwLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTpyPT4hMSx2aXNpdFBpcGU6cj0+ITAsdmlzaXRQcmVmaXhOb3Qocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdE5vbk51bGxBc3NlcnQocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdFByb3BlcnR5UmVhZDpyPT4hMSx2aXNpdFByb3BlcnR5V3JpdGU6cj0+ITEsdmlzaXRTYWZlUHJvcGVydHlSZWFkOnI9PiExLHZpc2l0U2FmZUtleWVkUmVhZDpyPT4hMX0pfWFsbG9jYXRlVGVtcG9yYXJ5KCl7bGV0IHQ9dGhpcy5fY3VycmVudFRlbXBvcmFyeSsrO3JldHVybiB0aGlzLnRlbXBvcmFyeUNvdW50PU1hdGgubWF4KHRoaXMuX2N1cnJlbnRUZW1wb3JhcnksdGhpcy50ZW1wb3JhcnlDb3VudCksbmV3IG1mKHhMKHRoaXMuYmluZGluZ0lkLHQpKX1yZWxlYXNlVGVtcG9yYXJ5KHQpe2lmKHRoaXMuX2N1cnJlbnRUZW1wb3JhcnktLSx0Lm5hbWUhPXhMKHRoaXMuYmluZGluZ0lkLHRoaXMuX2N1cnJlbnRUZW1wb3JhcnkpKXRocm93IG5ldyBFcnJvcihgVGVtcG9yYXJ5ICR7dC5uYW1lfSByZWxlYXNlZCBvdXQgb2Ygb3JkZXJgKX1jb252ZXJ0U291cmNlU3Bhbih0KXtpZih0aGlzLmJhc2VTb3VyY2VTcGFuKXtsZXQgZT10aGlzLmJhc2VTb3VyY2VTcGFuLnN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KSxpPXRoaXMuYmFzZVNvdXJjZVNwYW4uc3RhcnQubW92ZUJ5KHQuZW5kKSxyPXRoaXMuYmFzZVNvdXJjZVNwYW4uZnVsbFN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KTtyZXR1cm4gbmV3IFRvKGUsaSxyKX1yZXR1cm4gbnVsbH1hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQpe3RoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzJiZ0aGlzLmltcGxpY2l0UmVjZWl2ZXJBY2Nlc3Nlcy5hZGQodCl9fTtmdW5jdGlvbiBRcShuLHQpe0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKGU9PlFxKGUsdCkpOnQucHVzaChuKX1mdW5jdGlvbiBUTigpe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uIil9dmFyIHdMPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCl7c3VwZXIobnVsbCxudWxsKSx0aGlzLmFyZ3M9dCx0aGlzLmlzQ29uc3RhbnQ9VE4sdGhpcy5pc0VxdWl2YWxlbnQ9VE4sdGhpcy52aXNpdEV4cHJlc3Npb249VE59fSxPMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbHM9dH1ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCl7fW1heWJlUmVzdG9yZVZpZXcoKXt9Z2V0TG9jYWwodCl7cmV0dXJuIHQ9PT1FeC5ldmVudC5uYW1lP0V4LmV2ZW50Om51bGx9fSxfcD1jbGFzcyBleHRlbmRzIGJwe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxuZXcgbmEodCxlKSxpLG51bGwpLHRoaXMuY29udmVydGVyPXJ9fSxveWU9L3BvbHlmaWxsLW5leHQtc2VsZWN0b3JbXn1dKmNvbnRlbnQ6W1xzXSo/KFsnIl0pKC4qPylcMVs7XHNdKn0oW157XSo/KXsvZ2ltLHN5ZT0vKHBvbHlmaWxsLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxUOT0vKHBvbHlmaWxsLXVuc2NvcGVkLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxrMT0iLXNoYWRvd2Nzc2hvc3QiLGczPSItc2hhZG93Y3NzY29udGV4dCIsXzM9Iig/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSk/KFteLHtdKikiLGF5ZT1uZXcgUmVnRXhwKGsxK18zLCJnaW0iKSxseWU9bmV3IFJlZ0V4cChnMytfMywiZ2ltIiksY3llPW5ldyBSZWdFeHAoZzMrXzMsImltIiksc2Y9azErIi1uby1jb21iaW5hdG9yIixEOT0vLXNoYWRvd2Nzc2hvc3Qtbm8tY29tYmluYXRvcihbXlxzXSopLyx1eWU9Wy86OnNoYWRvdy9nLC86OmNvbnRlbnQvZywvXC9zaGFkb3ctZGVlcFwvL2csL1wvc2hhZG93XC8vZ10sQTk9Lyg/Oj4+Pil8KD86XC9kZWVwXC8pfCg/Ojo6bmctZGVlcCkvZyxkMD0vLXNoYWRvd2Nzc2hvc3QvZ2ltLHB5ZT0vOmhvc3QvZ2ltLGh5ZT0vOmhvc3QtY29udGV4dC9naW0sZnllPS9cL1wqW1xzXFNdKj9cKlwvL2csZ3llPS9cL1wqXHMqI1xzKnNvdXJjZShNYXBwaW5nKT9VUkw9W1xzXFNdKz9cKlwvL2csRE49IiVCTE9DSyUiLHl5ZT0vKFxzKikoW147XHtcfV0rPykoXHMqKSgoPzp7JUJMT0NLJX0/XHMqOz8pfCg/OlxzKjspKS9nLGJ5ZT0vJVFVT1RFRCUvZyx4eWU9bmV3IE1hcChbWyJ7IiwifSJdXSksQ3llPW5ldyBNYXAoW1snIicsJyInXSxbIiciLCInIl1dKSxEeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc2VsZWN0b3I9dCx0aGlzLmNvbnRlbnQ9ZX19O2Z1bmN0aW9uIEk5KG4sdCl7bGV0IGU9UDkobixDeWUsIiVRVU9URUQlIiksaT1QOShlLmVzY2FwZWRTdHJpbmcseHllLEROKSxyPTAsbz0wO3JldHVybiBpLmVzY2FwZWRTdHJpbmcucmVwbGFjZSh5eWUsKC4uLnMpPT57bGV0IGE9c1syXSxsPSIiLGM9c1s0XSx1PSIiO2MmJmMuc3RhcnRzV2l0aCgieyIrRE4pJiYobD1pLmJsb2Nrc1tyKytdLGM9Yy5zdWJzdHJpbmcoRE4ubGVuZ3RoKzEpLHU9InsiKTtsZXQgZD10KG5ldyBEeChhLGwpKTtyZXR1cm5gJHtzWzFdfSR7ZC5zZWxlY3Rvcn0ke3NbM119JHt1fSR7ZC5jb250ZW50fSR7Y31gfSkucmVwbGFjZShieWUsKCk9PmUuYmxvY2tzW28rK10pfWZ1bmN0aW9uIFA5KG4sdCxlKXtsZXQgbCxjLGk9W10scj1bXSxvPTAscz0wLGE9LTE7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kyspe2xldCBkPW5bdV07IlxcIj09PWQ/dSsrOmQ9PT1jPyhvLS0sMD09PW8mJihyLnB1c2gobi5zdWJzdHJpbmcoYSx1KSksaS5wdXNoKGUpLHM9dSxhPS0xLGw9Yz12b2lkIDApKTpkPT09bD9vKys6MD09PW8mJnQuaGFzKGQpJiYobD1kLGM9dC5nZXQoZCksbz0xLGE9dSsxLGkucHVzaChuLnN1YnN0cmluZyhzLGEpKSl9cmV0dXJuLTEhPT1hPyhyLnB1c2gobi5zdWJzdHJpbmcoYSkpLGkucHVzaChlKSk6aS5wdXNoKG4uc3Vic3RyaW5nKHMpKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmVzY2FwZWRTdHJpbmc9dCx0aGlzLmJsb2Nrcz1lfX0oaS5qb2luKCIiKSxyKX1mdW5jdGlvbiBNeWUobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IobGV0IGk9MTtpPHQ7aSsrKWZvcihsZXQgcj0wO3I8ZTtyKyspbltyK2kqZV09bltyXS5zbGljZSgwKX1mdW5jdGlvbiBSOShuKXtsZXQgdD1uLmNoYXJDb2RlQXQoMCk7aWYodD09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoMzk9PXR8fDM0PT10KSl7bGV0IGk9bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKTstMT09aS5pbmRleE9mKCInIikmJi0xPT1pLmluZGV4T2YoJyInKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gS3Eobil7cmV0dXJuIG4ucmVwbGFjZSgvW2Etel1bQS1aXS9nLHQ9PnQuY2hhckF0KDApKyItIit0LmNoYXJBdCgxKSkudG9Mb3dlckNhc2UoKX12YXIgTjE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZGlyZWN0aXZlRXhwcj10LHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITEsdGhpcy5oYXNCaW5kaW5ncz0hMSx0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSExLHRoaXMuX2NsYXNzTWFwSW5wdXQ9bnVsbCx0aGlzLl9zdHlsZU1hcElucHV0PW51bGwsdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9bnVsbCx0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz1udWxsLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9bnVsbCx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD1udWxsLHRoaXMuX3N0eWxlc0luZGV4PW5ldyBNYXAsdGhpcy5fY2xhc3Nlc0luZGV4PW5ldyBNYXAsdGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzPVtdLHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz1bXX1yZWdpc3RlckJvdW5kSW5wdXQodCl7bGV0IGU9bnVsbCxpPXQubmFtZTtzd2l0Y2godC50eXBlKXtjYXNlIDA6ZT10aGlzLnJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZShpLHQudmFsdWUsdC5zb3VyY2VTcGFuKTticmVhaztjYXNlIDM6ZT10aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChpLCExLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudW5pdCk7YnJlYWs7Y2FzZSAyOmU9dGhpcy5yZWdpc3RlckNsYXNzSW5wdXQoaSwhMSx0LnZhbHVlLHQuc291cmNlU3Bhbil9cmV0dXJuISFlfXJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZSh0LGUsaSl7bGV0IHI9bnVsbCxvPXQuc3Vic3RyaW5nKDAsNikscz0ic3R5bGUiPT09dHx8InN0eWxlLiI9PT1vfHwic3R5bGUhIj09PW87aWYoc3x8IXMmJigiY2xhc3MiPT09dHx8ImNsYXNzLiI9PT1vfHwiY2xhc3MhIj09PW8pKXtsZXQgbD0iLiIhPT10LmNoYXJBdCg1KSxjPXQuc2xpY2UobD81OjYpO3I9cz90aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChjLGwsZSxpKTp0aGlzLnJlZ2lzdGVyQ2xhc3NJbnB1dChjLGwsZSxpKX1yZXR1cm4gcn1yZWdpc3RlclN0eWxlSW5wdXQodCxlLGkscixvKXtpZihGOShpKSlyZXR1cm4gbnVsbDt0LnN0YXJ0c1dpdGgoIi0tIil8fCh0PUtxKHQpKTtsZXR7cHJvcGVydHk6cyxoYXNPdmVycmlkZUZsYWc6YSxzdWZmaXg6bH09azkodCksYz17bmFtZTpzLHN1ZmZpeDpvPSJzdHJpbmciPT10eXBlb2YgbyYmMCE9PW8ubGVuZ3RoP286bCx2YWx1ZTppLHNvdXJjZVNwYW46cixoYXNPdmVycmlkZUZsYWc6YX07cmV0dXJuIGU/dGhpcy5fc3R5bGVNYXBJbnB1dD1jOigodGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9dGhpcy5fc2luZ2xlU3R5bGVJbnB1dHN8fFtdKS5wdXNoKGMpLE85KHRoaXMuX3N0eWxlc0luZGV4LHMpKSx0aGlzLl9sYXN0U3R5bGluZ0lucHV0PWMsdGhpcy5fZmlyc3RTdHlsaW5nSW5wdXQ9dGhpcy5fZmlyc3RTdHlsaW5nSW5wdXR8fGMsdGhpcy5fY2hlY2tGb3JQaXBlcyhpKSx0aGlzLmhhc0JpbmRpbmdzPSEwLGN9cmVnaXN0ZXJDbGFzc0lucHV0KHQsZSxpLHIpe2lmKEY5KGkpKXJldHVybiBudWxsO2xldHtwcm9wZXJ0eTpvLGhhc092ZXJyaWRlRmxhZzpzfT1rOSh0KSxhPXtuYW1lOm8sdmFsdWU6aSxzb3VyY2VTcGFuOnIsaGFzT3ZlcnJpZGVGbGFnOnMsc3VmZml4Om51bGx9O3JldHVybiBlP3RoaXMuX2NsYXNzTWFwSW5wdXQ9YTooKHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzPXRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzfHxbXSkucHVzaChhKSxPOSh0aGlzLl9jbGFzc2VzSW5kZXgsbykpLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9YSx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD10aGlzLl9maXJzdFN0eWxpbmdJbnB1dHx8YSx0aGlzLl9jaGVja0ZvclBpcGVzKGkpLHRoaXMuaGFzQmluZGluZ3M9ITAsYX1fY2hlY2tGb3JQaXBlcyh0KXt0IGluc3RhbmNlb2YgZXUmJnQuYXN0IGluc3RhbmNlb2YgUjAmJih0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSEwKX1yZWdpc3RlclN0eWxlQXR0cih0KXt0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXM9ZnVuY3Rpb24obil7bGV0IHQ9W10sZT0wLGk9MCxyPTAsbz0wLHM9MCxhPW51bGwsbD0hMTtmb3IoO2U8bi5sZW5ndGg7KXN3aXRjaChuLmNoYXJDb2RlQXQoZSsrKSl7Y2FzZSA0MDppKys7YnJlYWs7Y2FzZSA0MTppLS07YnJlYWs7Y2FzZSAzOTpsPWx8fG8+MCwwPT09cj9yPTM5OjM5PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSAzNDpsPWx8fG8+MCwwPT09cj9yPTM0OjM0PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSA1ODohYSYmMD09PWkmJjA9PT1yJiYoYT1LcShuLnN1YnN0cmluZyhzLGUtMSkudHJpbSgpKSxvPWUpO2JyZWFrO2Nhc2UgNTk6aWYoYSYmbz4wJiYwPT09aSYmMD09PXIpe2xldCB1PW4uc3Vic3RyaW5nKG8sZS0xKS50cmltKCk7dC5wdXNoKGEsbD9SOSh1KTp1KSxzPWUsbz0wLGE9bnVsbCxsPSExfX1pZihhJiZvKXtsZXQgYz1uLnNsaWNlKG8pLnRyaW0oKTt0LnB1c2goYSxsP1I5KGMpOmMpfXJldHVybiB0fSh0KSx0aGlzLl9oYXNJbml0aWFsVmFsdWVzPSEwfXJlZ2lzdGVyQ2xhc3NBdHRyKHQpe3RoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz10LnRyaW0oKS5zcGxpdCgvXHMrL2cpLHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITB9cG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKHQpe2lmKHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcy5sZW5ndGgpe3QucHVzaChudCgxKSk7Zm9yKGxldCBlPTA7ZTx0aGlzLl9pbml0aWFsQ2xhc3NWYWx1ZXMubGVuZ3RoO2UrKyl0LnB1c2gobnQodGhpcy5faW5pdGlhbENsYXNzVmFsdWVzW2VdKSl9aWYodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzLmxlbmd0aCl7dC5wdXNoKG50KDIpKTtmb3IobGV0IGU9MDtlPHRoaXMuX2luaXRpYWxTdHlsZVZhbHVlcy5sZW5ndGg7ZSs9Mil0LnB1c2gobnQodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzW2VdKSxudCh0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXNbZSsxXSkpfX1hc3NpZ25Ib3N0QXR0cnModCxlKXt0aGlzLl9kaXJlY3RpdmVFeHByJiYodC5sZW5ndGh8fHRoaXMuX2hhc0luaXRpYWxWYWx1ZXMpJiYodGhpcy5wb3B1bGF0ZUluaXRpYWxTdHlsaW5nQXR0cnModCksZS5zZXQoImhvc3RBdHRycyIsY3IodCkpKX1idWlsZENsYXNzTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX2NsYXNzTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITAsdGhpcy5fY2xhc3NNYXBJbnB1dCk6bnVsbH1idWlsZFN0eWxlTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0eWxlTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITEsdGhpcy5fc3R5bGVNYXBJbnB1dCk6bnVsbH1fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsZSxpKXtsZXQgcyxyPTIsbz1pLnZhbHVlLnZpc2l0KHQpO3JldHVybiBvIGluc3RhbmNlb2YgWm8/KHIrPW8uZXhwcmVzc2lvbnMubGVuZ3RoLHM9ZT9mdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5jbGFzc01hcDtjYXNlIDM6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGVWfX0obyk6ZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsuc3R5bGVNYXA7Y2FzZSAzOnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlVn19KG8pKTpzPWU/Sy5jbGFzc01hcDpLLnN0eWxlTWFwLHtyZWZlcmVuY2U6cyxjYWxsczpbe3N1cHBvcnRzSW50ZXJwb2xhdGlvbjohMCxzb3VyY2VTcGFuOmkuc291cmNlU3BhbixhbGxvY2F0ZUJpbmRpbmdTbG90czpyLHBhcmFtczphPT57bGV0IGw9YShvKTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sOltsXX19XX19X2J1aWxkU2luZ2xlSW5wdXRzKHQsZSxpLHIsbyl7bGV0IHM9W107cmV0dXJuIGUuZm9yRWFjaChhPT57bGV0IGw9c1tzLmxlbmd0aC0xXSxjPWEudmFsdWUudmlzaXQoaSksdT10LGQ9MjtjIGluc3RhbmNlb2YgWm8mJihkKz1jLmV4cHJlc3Npb25zLmxlbmd0aCxyJiYodT1yKGMpKSk7bGV0IHA9e3NvdXJjZVNwYW46YS5zb3VyY2VTcGFuLGFsbG9jYXRlQmluZGluZ1Nsb3RzOmQsc3VwcG9ydHNJbnRlcnBvbGF0aW9uOiEhcixwYXJhbXM6aD0+e2xldCBmPVtdO2YucHVzaChudChhLm5hbWUpKTtsZXQgbT1oKGMpO3JldHVybiBBcnJheS5pc0FycmF5KG0pP2YucHVzaCguLi5tKTpmLnB1c2gobSksIW8mJm51bGwhPT1hLnN1ZmZpeCYmZi5wdXNoKG50KGEuc3VmZml4KSksZn19O2wmJmwucmVmZXJlbmNlPT09dT9sLmNhbGxzLnB1c2gocCk6cy5wdXNoKHtyZWZlcmVuY2U6dSxjYWxsczpbcF19KX0pLHN9X2J1aWxkQ2xhc3NJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuY2xhc3NQcm9wLHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzLHQsbnVsbCwhMCk6W119X2J1aWxkU3R5bGVJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuc3R5bGVQcm9wLHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzLHQsQXllLCExKTpbXX1idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKHQpe2xldCBlPVtdO2lmKHRoaXMuaGFzQmluZGluZ3Mpe2xldCBpPXRoaXMuYnVpbGRTdHlsZU1hcEluc3RydWN0aW9uKHQpO2kmJmUucHVzaChpKTtsZXQgcj10aGlzLmJ1aWxkQ2xhc3NNYXBJbnN0cnVjdGlvbih0KTtyJiZlLnB1c2gociksZS5wdXNoKC4uLnRoaXMuX2J1aWxkU3R5bGVJbnB1dHModCkpLGUucHVzaCguLi50aGlzLl9idWlsZENsYXNzSW5wdXRzKHQpKX1yZXR1cm4gZX19O2Z1bmN0aW9uIE85KG4sdCl7bi5oYXModCl8fG4uc2V0KHQsbi5zaXplKX1mdW5jdGlvbiBrOShuKXtsZXQgdD0hMSxlPW4uaW5kZXhPZigiIWltcG9ydGFudCIpOy0xIT09ZSYmKG49ZT4wP24uc3Vic3RyaW5nKDAsZSk6IiIsdD0hMCk7bGV0IGk9bnVsbCxyPW4sbz1uLmxhc3RJbmRleE9mKCIuIik7cmV0dXJuIG8+MCYmKGk9bi5zbGljZShvKzEpLHI9bi5zdWJzdHJpbmcoMCxvKSkse3Byb3BlcnR5OnIsc3VmZml4OmksaGFzT3ZlcnJpZGVGbGFnOnR9fWZ1bmN0aW9uIEF5ZShuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5zdHlsZVByb3A7Y2FzZSAzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlMTtjYXNlIDU6cmV0dXJuIEsuc3R5bGVQcm9wSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNDtjYXNlIDExOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNztjYXNlIDE3OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlVn19ZnVuY3Rpb24gRjkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBldSYmKG49bi5hc3QpLG4gaW5zdGFuY2VvZiBuYX12YXIgSm49KCgpPT57cmV0dXJuKG49Sm58fChKbj17fSkpW24uQ2hhcmFjdGVyPTBdPSJDaGFyYWN0ZXIiLG5bbi5JZGVudGlmaWVyPTFdPSJJZGVudGlmaWVyIixuW24uUHJpdmF0ZUlkZW50aWZpZXI9Ml09IlByaXZhdGVJZGVudGlmaWVyIixuW24uS2V5d29yZD0zXT0iS2V5d29yZCIsbltuLlN0cmluZz00XT0iU3RyaW5nIixuW24uT3BlcmF0b3I9NV09Ik9wZXJhdG9yIixuW24uTnVtYmVyPTZdPSJOdW1iZXIiLG5bbi5FcnJvcj03XT0iRXJyb3IiLEpuO3ZhciBufSkoKSxQeWU9WyJ2YXIiLCJsZXQiLCJhcyIsIm51bGwiLCJ1bmRlZmluZWQiLCJ0cnVlIiwiZmFsc2UiLCJpZiIsImVsc2UiLCJ0aGlzIl0sTDE9Y2xhc3N7dG9rZW5pemUodCl7bGV0IGU9bmV3IFRMKHQpLGk9W10scj1lLnNjYW5Ub2tlbigpO2Zvcig7bnVsbCE9cjspaS5wdXNoKHIpLHI9ZS5zY2FuVG9rZW4oKTtyZXR1cm4gaX19LHVjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5pbmRleD10LHRoaXMuZW5kPWUsdGhpcy50eXBlPWksdGhpcy5udW1WYWx1ZT1yLHRoaXMuc3RyVmFsdWU9b31pc0NoYXJhY3Rlcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5DaGFyYWN0ZXImJnRoaXMubnVtVmFsdWU9PXR9aXNOdW1iZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5OdW1iZXJ9aXNTdHJpbmcoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5TdHJpbmd9aXNPcGVyYXRvcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5PcGVyYXRvciYmdGhpcy5zdHJWYWx1ZT09dH1pc0lkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5JZGVudGlmaWVyfWlzUHJpdmF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5Qcml2YXRlSWRlbnRpZmllcn1pc0tleXdvcmQoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkfWlzS2V5d29yZExldCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJsZXQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmImFzIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmROdWxsKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmIm51bGwiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFVuZGVmaW5lZCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJ1bmRlZmluZWQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRydWUoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidHJ1ZSI9PXRoaXMuc3RyVmFsdWV9aXNLZXl3b3JkRmFsc2UoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYiZmFsc2UiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRoaXMoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidGhpcyI9PXRoaXMuc3RyVmFsdWV9aXNFcnJvcigpe3JldHVybiB0aGlzLnR5cGU9PUpuLkVycm9yfXRvTnVtYmVyKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uTnVtYmVyP3RoaXMubnVtVmFsdWU6LTF9dG9TdHJpbmcoKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlIEpuLkNoYXJhY3RlcjpjYXNlIEpuLklkZW50aWZpZXI6Y2FzZSBKbi5LZXl3b3JkOmNhc2UgSm4uT3BlcmF0b3I6Y2FzZSBKbi5Qcml2YXRlSWRlbnRpZmllcjpjYXNlIEpuLlN0cmluZzpjYXNlIEpuLkVycm9yOnJldHVybiB0aGlzLnN0clZhbHVlO2Nhc2UgSm4uTnVtYmVyOnJldHVybiB0aGlzLm51bVZhbHVlLnRvU3RyaW5nKCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19fTtmdW5jdGlvbiBOOShuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uQ2hhcmFjdGVyLGUsU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZnVuY3Rpb24gQU4obix0LGUpe3JldHVybiBuZXcgdWMobix0LEpuLk9wZXJhdG9yLDAsZSl9dmFyIElOPW5ldyB1YygtMSwtMSxKbi5DaGFyYWN0ZXIsMCwiIiksVEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbnB1dD10LHRoaXMucGVlaz0wLHRoaXMuaW5kZXg9LTEsdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5hZHZhbmNlKCl9YWR2YW5jZSgpe3RoaXMucGVlaz0rK3RoaXMuaW5kZXg+PXRoaXMubGVuZ3RoPzA6dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpfXNjYW5Ub2tlbigpe2xldCB0PXRoaXMuaW5wdXQsZT10aGlzLmxlbmd0aCxpPXRoaXMucGVlayxyPXRoaXMuaW5kZXg7Zm9yKDtpPD0zMjspe2lmKCsrcj49ZSl7aT0wO2JyZWFrfWk9dC5jaGFyQ29kZUF0KHIpfWlmKHRoaXMucGVlaz1pLHRoaXMuaW5kZXg9cixyPj1lKXJldHVybiBudWxsO2lmKEw5KGkpKXJldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCk7aWYocHAoaSkpcmV0dXJuIHRoaXMuc2Nhbk51bWJlcihyKTtsZXQgbz1yO3N3aXRjaChpKXtjYXNlIDQ2OnJldHVybiB0aGlzLmFkdmFuY2UoKSxwcCh0aGlzLnBlZWspP3RoaXMuc2Nhbk51bWJlcihvKTpOOShvLHRoaXMuaW5kZXgsNDYpO2Nhc2UgNDA6Y2FzZSA0MTpjYXNlIGZwOmNhc2UgdHU6Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDQ6Y2FzZSA1ODpjYXNlIDU5OnJldHVybiB0aGlzLnNjYW5DaGFyYWN0ZXIobyxpKTtjYXNlIDM5OmNhc2UgMzQ6cmV0dXJuIHRoaXMuc2NhblN0cmluZygpO2Nhc2UgMzU6cmV0dXJuIHRoaXMuc2NhblByaXZhdGVJZGVudGlmaWVyKCk7Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDI6Y2FzZSA0NzpjYXNlIDM3OmNhc2UgOTQ6cmV0dXJuIHRoaXMuc2Nhbk9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7Y2FzZSA2MzpyZXR1cm4gdGhpcy5zY2FuUXVlc3Rpb24obyk7Y2FzZSA2MDpjYXNlIDYyOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iik7Y2FzZSAzMzpjYXNlIDYxOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iiw2MSwiPSIpO2Nhc2UgMzg6cmV0dXJuIHRoaXMuc2NhbkNvbXBsZXhPcGVyYXRvcihvLCImIiwzOCwiJiIpO2Nhc2UgMTI0OnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobywifCIsMTI0LCJ8Iik7Y2FzZSAxNjA6Zm9yKDtmMyh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtyZXR1cm4gdGhpcy5zY2FuVG9rZW4oKX1yZXR1cm4gdGhpcy5hZHZhbmNlKCksdGhpcy5lcnJvcihgVW5leHBlY3RlZCBjaGFyYWN0ZXIgWyR7U3RyaW5nLmZyb21DaGFyQ29kZShpKX1dYCwwKX1zY2FuQ2hhcmFjdGVyKHQsZSl7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLE45KHQsdGhpcy5pbmRleCxlKX1zY2FuT3BlcmF0b3IodCxlKXtyZXR1cm4gdGhpcy5hZHZhbmNlKCksQU4odCx0aGlzLmluZGV4LGUpfXNjYW5Db21wbGV4T3BlcmF0b3IodCxlLGkscixvLHMpe3RoaXMuYWR2YW5jZSgpO2xldCBhPWU7cmV0dXJuIHRoaXMucGVlaz09aSYmKHRoaXMuYWR2YW5jZSgpLGErPXIpLG51bGwhPW8mJnRoaXMucGVlaz09byYmKHRoaXMuYWR2YW5jZSgpLGErPXMpLEFOKHQsdGhpcy5pbmRleCxhKX1zY2FuSWRlbnRpZmllcigpe2xldCB0PXRoaXMuaW5kZXg7Zm9yKHRoaXMuYWR2YW5jZSgpO0I5KHRoaXMucGVlayk7KXRoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7cmV0dXJuIFB5ZS5pbmRleE9mKGUpPi0xP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5LZXl3b3JkLDAsZSl9KHQsdGhpcy5pbmRleCxlKTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uSWRlbnRpZmllciwwLGUpfSh0LHRoaXMuaW5kZXgsZSl9c2NhblByaXZhdGVJZGVudGlmaWVyKCl7bGV0IHQ9dGhpcy5pbmRleDtpZih0aGlzLmFkdmFuY2UoKSwhTDkodGhpcy5wZWVrKSlyZXR1cm4gdGhpcy5lcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgWyNdIiwtMSk7Zm9yKDtCOSh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uUHJpdmF0ZUlkZW50aWZpZXIsMCxlKX0odCx0aGlzLmluZGV4LGUpfXNjYW5OdW1iZXIodCl7bGV0IGU9dGhpcy5pbmRleD09PXQsaT0hMTtmb3IodGhpcy5hZHZhbmNlKCk7Oyl7aWYoIXBwKHRoaXMucGVlaykpaWYoOTU9PT10aGlzLnBlZWspe2lmKCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleC0xKSl8fCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSkpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgbnVtZXJpYyBzZXBhcmF0b3IiLDApO2k9ITB9ZWxzZSBpZig0Nj09PXRoaXMucGVlayllPSExO2Vsc2V7aWYoMTAxIT0obj10aGlzLnBlZWspJiY2OSE9bilicmVhaztpZih0aGlzLmFkdmFuY2UoKSxWeWUodGhpcy5wZWVrKSYmdGhpcy5hZHZhbmNlKCksIXBwKHRoaXMucGVlaykpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgZXhwb25lbnQiLC0xKTtlPSExfXRoaXMuYWR2YW5jZSgpfXZhciBuO2xldCByPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7aSYmKHI9ci5yZXBsYWNlKC9fL2csIiIpKTtsZXQgbz1lP2Z1bmN0aW9uKG4pe2xldCB0PXBhcnNlSW50KG4pO2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrbik7cmV0dXJuIHR9KHIpOnBhcnNlRmxvYXQocik7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5OdW1iZXIsZSwiIil9KHQsdGhpcy5pbmRleCxvKX1zY2FuU3RyaW5nKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMucGVlazt0aGlzLmFkdmFuY2UoKTtsZXQgaT0iIixyPXRoaXMuaW5kZXgsbz10aGlzLmlucHV0O2Zvcig7dGhpcy5wZWVrIT1lOylpZig5Mj09dGhpcy5wZWVrKXtsZXQgYTtpZihpKz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpLHRoaXMuYWR2YW5jZSgpLHRoaXMucGVlaz10aGlzLnBlZWssMTE3PT10aGlzLnBlZWspe2xldCBsPW8uc3Vic3RyaW5nKHRoaXMuaW5kZXgrMSx0aGlzLmluZGV4KzUpO2lmKCEvXlswLTlhLWZdKyQvaS50ZXN0KGwpKXJldHVybiB0aGlzLmVycm9yKGBJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIFtcXHUke2x9XWAsMCk7YT1wYXJzZUludChsLDE2KTtmb3IobGV0IGM9MDtjPDU7YysrKXRoaXMuYWR2YW5jZSgpfWVsc2UgYT1IeWUodGhpcy5wZWVrKSx0aGlzLmFkdmFuY2UoKTtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpLHI9dGhpcy5pbmRleH1lbHNle2lmKDA9PXRoaXMucGVlaylyZXR1cm4gdGhpcy5lcnJvcigiVW50ZXJtaW5hdGVkIHF1b3RlIiwwKTt0aGlzLmFkdmFuY2UoKX1sZXQgcz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpO3JldHVybiB0aGlzLmFkdmFuY2UoKSxmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uU3RyaW5nLDAsZSl9KHQsdGhpcy5pbmRleCxpK3MpfXNjYW5RdWVzdGlvbih0KXt0aGlzLmFkdmFuY2UoKTtsZXQgZT0iPyI7cmV0dXJuKDYzPT09dGhpcy5wZWVrfHw0Nj09PXRoaXMucGVlaykmJihlKz00Nj09PXRoaXMucGVlaz8iLiI6Ij8iLHRoaXMuYWR2YW5jZSgpKSxBTih0LHRoaXMuaW5kZXgsZSl9ZXJyb3IodCxlKXtsZXQgaT10aGlzLmluZGV4K2U7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5FcnJvciwwLGUpfShpLHRoaXMuaW5kZXgsYExleGVyIEVycm9yOiAke3R9IGF0IGNvbHVtbiAke2l9IGluIGV4cHJlc3Npb24gWyR7dGhpcy5pbnB1dH1dYCl9fTtmdW5jdGlvbiBMOShuKXtyZXR1cm4gOTc8PW4mJm48PTEyMnx8NjU8PW4mJm48PTkwfHw5NT09bnx8MzY9PW59ZnVuY3Rpb24gQjkobil7cmV0dXJuIG0zKG4pfHxwcChuKXx8OTU9PW58fDM2PT1ufWZ1bmN0aW9uIFZ5ZShuKXtyZXR1cm4gNDU9PW58fDQzPT1ufWZ1bmN0aW9uIEh5ZShuKXtzd2l0Y2gobil7Y2FzZSAxMTA6cmV0dXJuIDEwO2Nhc2UgMTAyOnJldHVybiAxMjtjYXNlIDExNDpyZXR1cm4gMTM7Y2FzZSAxMTY6cmV0dXJuIDk7Y2FzZSAxMTg6cmV0dXJuIDExO2RlZmF1bHQ6cmV0dXJuIG59fXZhciBCMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9sZXhlcj10LHRoaXMuZXJyb3JzPVtdfXBhcnNlQWN0aW9uKHQsZSxpLHIsbz0kYyl7dGhpcy5fY2hlY2tOb0ludGVycG9sYXRpb24odCxpLG8pO2xldCBzPXRoaXMuX3N0cmlwQ29tbWVudHModCksYT10aGlzLl9sZXhlci50b2tlbml6ZShzKSxsPTE7ZSYmKGx8PTIpO2xldCBjPW5ldyBsZih0LGkscixhLGwsdGhpcy5lcnJvcnMsMCkucGFyc2VDaGFpbigpO3JldHVybiBuZXcgZXUoYyx0LGkscix0aGlzLmVycm9ycyl9cGFyc2VCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKTtyZXR1cm4gbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfWNoZWNrU2ltcGxlRXhwcmVzc2lvbih0KXtsZXQgZT1uZXcgSUw7cmV0dXJuIHQudmlzaXQoZSksZS5lcnJvcnN9cGFyc2VTaW1wbGVCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKSxzPXRoaXMuY2hlY2tTaW1wbGVFeHByZXNzaW9uKG8pO3JldHVybiBzLmxlbmd0aD4wJiZ0aGlzLl9yZXBvcnRFcnJvcihgSG9zdCBiaW5kaW5nIGV4cHJlc3Npb24gY2Fubm90IGNvbnRhaW4gJHtzLmpvaW4oIiAiKX1gLHQsZSksbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfV9yZXBvcnRFcnJvcih0LGUsaSxyKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBteCh0LGUsaSxyKSl9X3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKXt0aGlzLl9jaGVja05vSW50ZXJwb2xhdGlvbih0LGUscik7bGV0IG89dGhpcy5fc3RyaXBDb21tZW50cyh0KSxzPXRoaXMuX2xleGVyLnRva2VuaXplKG8pO3JldHVybiBuZXcgbGYodCxlLGkscywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKX1wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz10aGlzLl9sZXhlci50b2tlbml6ZShlKTtyZXR1cm4gbmV3IGxmKGUsaSxvLHMsMCx0aGlzLmVycm9ycywwKS5wYXJzZVRlbXBsYXRlQmluZGluZ3Moe3NvdXJjZTp0LHNwYW46bmV3IE9hKHIscit0Lmxlbmd0aCl9KX1wYXJzZUludGVycG9sYXRpb24odCxlLGkscixvPSRjKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmEsb2Zmc2V0czpsfT10aGlzLnNwbGl0SW50ZXJwb2xhdGlvbih0LGUscixvKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDsrK3Upe2xldCBwPXRoaXMuX3N0cmlwQ29tbWVudHMoYVt1XS50ZXh0KSxoPXRoaXMuX2xleGVyLnRva2VuaXplKHApLGY9bmV3IGxmKHQsZSxpLGgsMCx0aGlzLmVycm9ycyxsW3VdKS5wYXJzZUNoYWluKCk7Yy5wdXNoKGYpfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYXRpb25Bc3Qocy5tYXAodT0+dS50ZXh0KSxjLHQsZSxpKX1wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsZSxpKXtsZXQgcj10aGlzLl9zdHJpcENvbW1lbnRzKHQpLG89dGhpcy5fbGV4ZXIudG9rZW5pemUocikscz1uZXcgbGYodCxlLGksbywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKTtyZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KFsiIiwiIl0sW3NdLHQsZSxpKX1jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KHQsZSxpLHIsbyl7bGV0IHM9bmV3IFNmKDAsaS5sZW5ndGgpLGE9bmV3IFpvKHMscy50b0Fic29sdXRlKG8pLHQsZSk7cmV0dXJuIG5ldyBldShhLGkscixvLHRoaXMuZXJyb3JzKX1zcGxpdEludGVycG9sYXRpb24odCxlLGkscj0kYyl7bGV0IG89W10scz1bXSxhPVtdLGw9aT9mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9MCxpPTAscj0wO2Zvcig7cjxuLmxlbmd0aDspe2xldCBvPW5bcl07aWYoOT09PW8udHlwZSl7bGV0W3MsYV09by5wYXJ0cztlKz1hLmxlbmd0aCxpKz1zLmxlbmd0aH1lbHNle2xldCBzPW8ucGFydHMucmVkdWNlKChhLGwpPT5hK2wubGVuZ3RoLDApO2krPXMsZSs9c310LnNldChpLGUpLHIrK31yZXR1cm4gdH0oaSk6bnVsbCxjPTAsdT0hMSxkPSExLHtzdGFydDpwLGVuZDpofT1yO2Zvcig7Yzx0Lmxlbmd0aDspaWYodSl7bGV0IGY9YyxtPWYrcC5sZW5ndGgsQz10aGlzLl9nZXRJbnRlcnBvbGF0aW9uRW5kSW5kZXgodCxoLG0pO2lmKC0xPT09Qyl7dT0hMSxkPSEwO2JyZWFrfWxldCBfPUMraC5sZW5ndGgseT10LnN1YnN0cmluZyhtLEMpOzA9PT15LnRyaW0oKS5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJCbGFuayBleHByZXNzaW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJwb2xhdGVkIHN0cmluZ3MiLHQsYGF0IGNvbHVtbiAke2N9IGluYCxlKSxzLnB1c2goe3RleHQ6eSxzdGFydDpmLGVuZDpffSk7bGV0IEE9KGw/LmdldChmKT8/ZikrcC5sZW5ndGg7YS5wdXNoKEEpLGM9Xyx1PSExfWVsc2V7bGV0IGY9YztjPXQuaW5kZXhPZihwLGMpLC0xPT09YyYmKGM9dC5sZW5ndGgpO2xldCBtPXQuc3Vic3RyaW5nKGYsYyk7by5wdXNoKHt0ZXh0Om0sc3RhcnQ6ZixlbmQ6Y30pLHU9ITB9aWYoIXUpaWYoZCl7bGV0IGY9b1tvLmxlbmd0aC0xXTtmLnRleHQrPXQuc3Vic3RyaW5nKGMpLGYuZW5kPXQubGVuZ3RofWVsc2Ugby5wdXNoKHt0ZXh0OnQuc3Vic3RyaW5nKGMpLHN0YXJ0OmMsZW5kOnQubGVuZ3RofSk7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zdHJpbmdzPXQsdGhpcy5leHByZXNzaW9ucz1lLHRoaXMub2Zmc2V0cz1pfX0obyxzLGEpfXdyYXBMaXRlcmFsUHJpbWl0aXZlKHQsZSxpKXtsZXQgcj1uZXcgU2YoMCxudWxsPT10PzA6dC5sZW5ndGgpO3JldHVybiBuZXcgZXUobmV3IElzKHIsci50b0Fic29sdXRlKGkpLHQpLHQsZSxpLHRoaXMuZXJyb3JzKX1fc3RyaXBDb21tZW50cyh0KXtsZXQgZT10aGlzLl9jb21tZW50U3RhcnQodCk7cmV0dXJuIG51bGwhPWU/dC5zdWJzdHJpbmcoMCxlKTp0fV9jb21tZW50U3RhcnQodCl7bGV0IGU9bnVsbDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoLTE7aSsrKXtsZXQgcj10LmNoYXJDb2RlQXQoaSksbz10LmNoYXJDb2RlQXQoaSsxKTtpZig0Nz09PXImJjQ3PT1vJiZudWxsPT1lKXJldHVybiBpO2U9PT1yP2U9bnVsbDpudWxsPT1lJiZ1TChyKSYmKGU9cil9cmV0dXJuIG51bGx9X2NoZWNrTm9JbnRlcnBvbGF0aW9uKHQsZSx7c3RhcnQ6aSxlbmQ6cn0pe2xldCBvPS0xLHM9LTE7Zm9yKGxldCBhIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCwwKSlpZigtMT09PW8pdC5zdGFydHNXaXRoKGkpJiYobz1hKTtlbHNlIGlmKHM9dGhpcy5fZ2V0SW50ZXJwb2xhdGlvbkVuZEluZGV4KHQscixhKSxzPi0xKWJyZWFrO28+LTEmJnM+LTEmJnRoaXMuX3JlcG9ydEVycm9yKGBHb3QgaW50ZXJwb2xhdGlvbiAoJHtpfSR7cn0pIHdoZXJlIGV4cHJlc3Npb24gd2FzIGV4cGVjdGVkYCx0LGBhdCBjb2x1bW4gJHtvfSBpbmAsZSl9X2dldEludGVycG9sYXRpb25FbmRJbmRleCh0LGUsaSl7Zm9yKGxldCByIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCxpKSl7aWYodC5zdGFydHNXaXRoKGUscikpcmV0dXJuIHI7aWYodC5zdGFydHNXaXRoKCIvLyIscikpcmV0dXJuIHQuaW5kZXhPZihlLHIpfXJldHVybi0xfSpfZm9yRWFjaFVucXVvdGVkQ2hhcih0LGUpe2xldCBpPW51bGwscj0wO2ZvcihsZXQgbz1lO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyF1TCh0LmNoYXJDb2RlQXQobykpfHxudWxsIT09aSYmaSE9PXN8fHIlMiE9MD9udWxsPT09aSYmKHlpZWxkIG8pOmk9bnVsbD09PWk/czpudWxsLHI9IlxcIj09PXM/cisxOjB9fX0sZGY9KCgpPT57cmV0dXJuKG49ZGZ8fChkZj17fSkpW24uTm9uZT0wXT0iTm9uZSIsbltuLldyaXRhYmxlPTFdPSJXcml0YWJsZSIsZGY7dmFyIG59KSgpLGxmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3RoaXMuaW5wdXQ9dCx0aGlzLmxvY2F0aW9uPWUsdGhpcy5hYnNvbHV0ZU9mZnNldD1pLHRoaXMudG9rZW5zPXIsdGhpcy5wYXJzZUZsYWdzPW8sdGhpcy5lcnJvcnM9cyx0aGlzLm9mZnNldD1hLHRoaXMucnBhcmVuc0V4cGVjdGVkPTAsdGhpcy5yYnJhY2tldHNFeHBlY3RlZD0wLHRoaXMucmJyYWNlc0V4cGVjdGVkPTAsdGhpcy5jb250ZXh0PWRmLk5vbmUsdGhpcy5zb3VyY2VTcGFuQ2FjaGU9bmV3IE1hcCx0aGlzLmluZGV4PTB9cGVlayh0KXtsZXQgZT10aGlzLmluZGV4K3Q7cmV0dXJuIGU8dGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zW2VdOklOfWdldCBuZXh0KCl7cmV0dXJuIHRoaXMucGVlaygwKX1nZXQgYXRFT0YoKXtyZXR1cm4gdGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RofWdldCBpbnB1dEluZGV4KCl7cmV0dXJuIHRoaXMuYXRFT0Y/dGhpcy5jdXJyZW50RW5kSW5kZXg6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50RW5kSW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleD4wP3RoaXMucGVlaygtMSkuZW5kK3RoaXMub2Zmc2V0OjA9PT10aGlzLnRva2Vucy5sZW5ndGg/dGhpcy5pbnB1dC5sZW5ndGgrdGhpcy5vZmZzZXQ6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50QWJzb2x1dGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5hYnNvbHV0ZU9mZnNldCt0aGlzLmlucHV0SW5kZXh9c3Bhbih0LGUpe2xldCBpPXRoaXMuY3VycmVudEVuZEluZGV4O2lmKHZvaWQgMCE9PWUmJmU+dGhpcy5jdXJyZW50RW5kSW5kZXgmJihpPWUpLHQ+aSl7bGV0IHI9aTtpPXQsdD1yfXJldHVybiBuZXcgU2YodCxpKX1zb3VyY2VTcGFuKHQsZSl7bGV0IGk9YCR7dH1AJHt0aGlzLmlucHV0SW5kZXh9OiR7ZX1gO3JldHVybiB0aGlzLnNvdXJjZVNwYW5DYWNoZS5oYXMoaSl8fHRoaXMuc291cmNlU3BhbkNhY2hlLnNldChpLHRoaXMuc3Bhbih0LGUpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCkpLHRoaXMuc291cmNlU3BhbkNhY2hlLmdldChpKX1hZHZhbmNlKCl7dGhpcy5pbmRleCsrfXdpdGhDb250ZXh0KHQsZSl7dGhpcy5jb250ZXh0fD10O2xldCBpPWUoKTtyZXR1cm4gdGhpcy5jb250ZXh0Xj10LGl9Y29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKHQpe3JldHVybiEhdGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpJiYodGhpcy5hZHZhbmNlKCksITApfXBlZWtLZXl3b3JkTGV0KCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRMZXQoKX1wZWVrS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRBcygpfWV4cGVjdENoYXJhY3Rlcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0KXx8dGhpcy5lcnJvcihgTWlzc2luZyBleHBlY3RlZCAke1N0cmluZy5mcm9tQ2hhckNvZGUodCl9YCl9Y29uc3VtZU9wdGlvbmFsT3BlcmF0b3IodCl7cmV0dXJuISF0aGlzLm5leHQuaXNPcGVyYXRvcih0KSYmKHRoaXMuYWR2YW5jZSgpLCEwKX1leHBlY3RPcGVyYXRvcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKHQpfHx0aGlzLmVycm9yKGBNaXNzaW5nIGV4cGVjdGVkIG9wZXJhdG9yICR7dH1gKX1wcmV0dHlQcmludFRva2VuKHQpe3JldHVybiB0PT09SU4/ImVuZCBvZiBpbnB1dCI6YHRva2VuICR7dH1gfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKXtsZXQgdD10aGlzLm5leHQ7cmV0dXJuIHQuaXNJZGVudGlmaWVyKCl8fHQuaXNLZXl3b3JkKCk/KHRoaXMuYWR2YW5jZSgpLHQudG9TdHJpbmcoKSk6KHQuaXNQcml2YXRlSWRlbnRpZmllcigpP3RoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodCwiZXhwZWN0ZWQgaWRlbnRpZmllciBvciBrZXl3b3JkIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIgb3Iga2V5d29yZGApLG51bGwpfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpe2xldCB0PXRoaXMubmV4dDtyZXR1cm4gdC5pc0lkZW50aWZpZXIoKXx8dC5pc0tleXdvcmQoKXx8dC5pc1N0cmluZygpPyh0aGlzLmFkdmFuY2UoKSx0LnRvU3RyaW5nKCkpOih0LmlzUHJpdmF0ZUlkZW50aWZpZXIoKT90aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsImV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQgb3Igc3RyaW5nIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQsIG9yIHN0cmluZ2ApLCIiKX1wYXJzZUNoYWluKCl7bGV0IHQ9W10sZT10aGlzLmlucHV0SW5kZXg7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aDspe2xldCBpPXRoaXMucGFyc2VQaXBlKCk7aWYodC5wdXNoKGkpLHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDU5KSlmb3IoMSZ0aGlzLnBhcnNlRmxhZ3N8fHRoaXMuZXJyb3IoIkJpbmRpbmcgZXhwcmVzc2lvbiBjYW5ub3QgY29udGFpbiBjaGFpbmVkIGV4cHJlc3Npb24iKTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OSk7KTtlbHNlIGlmKHRoaXMuaW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoKXtsZXQgcj10aGlzLmluZGV4O2lmKHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW4gJyR7dGhpcy5uZXh0fSdgKSx0aGlzLmluZGV4PT09cilicmVha319aWYoMD09PXQubGVuZ3RoKXtsZXQgaT10aGlzLm9mZnNldCxyPXRoaXMub2Zmc2V0K3RoaXMuaW5wdXQubGVuZ3RoO3JldHVybiBuZXcgbmEodGhpcy5zcGFuKGksciksdGhpcy5zb3VyY2VTcGFuKGkscikpfXJldHVybiAxPT10Lmxlbmd0aD90WzBdOm5ldyBfeCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQpfXBhcnNlUGlwZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKXsxJnRoaXMucGFyc2VGbGFncyYmdGhpcy5lcnJvcigiQ2Fubm90IGhhdmUgYSBwaXBlIGluIGFuIGFjdGlvbiBleHByZXNzaW9uIik7ZG97bGV0IG8scyxpPXRoaXMuaW5wdXRJbmRleCxyPXRoaXMuZXhwZWN0SWRlbnRpZmllck9yS2V5d29yZCgpO251bGwhPT1yP289dGhpcy5zb3VyY2VTcGFuKGkpOihyPSIiLHM9LTEhPT10aGlzLm5leHQuaW5kZXg/dGhpcy5uZXh0LmluZGV4OnRoaXMuaW5wdXQubGVuZ3RoK3RoaXMub2Zmc2V0LG89bmV3IFNmKHMscykudG9BYnNvbHV0ZSh0aGlzLmFic29sdXRlT2Zmc2V0KSk7bGV0IGE9W107Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7KWEucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtlPW5ldyBSMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQscyksZSxyLGEsbyl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKX1yZXR1cm4gZX1wYXJzZUV4cHJlc3Npb24oKXtyZXR1cm4gdGhpcy5wYXJzZUNvbmRpdGlvbmFsKCl9cGFyc2VDb25kaXRpb25hbCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VMb2dpY2FsT3IoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI/Iikpe2xldCByLGk9dGhpcy5wYXJzZVBpcGUoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpcj10aGlzLnBhcnNlUGlwZSgpO2Vsc2V7bGV0IHM9dGhpcy5pbnB1dC5zdWJzdHJpbmcodCx0aGlzLmlucHV0SW5kZXgpO3RoaXMuZXJyb3IoYENvbmRpdGlvbmFsIGV4cHJlc3Npb24gJHtzfSByZXF1aXJlcyBhbGwgMyBleHByZXNzaW9uc2ApLHI9bmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpfXJldHVybiBuZXcgdngodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlLGkscil9cmV0dXJuIGV9cGFyc2VMb2dpY2FsT3IoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlTG9naWNhbEFuZCgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifHwiKTspe2xldCBpPXRoaXMucGFyc2VMb2dpY2FsQW5kKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwifHwiLGUsaSl9cmV0dXJuIGV9cGFyc2VMb2dpY2FsQW5kKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCImJiIpOyl7bGV0IGk9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwiJiYiLGUsaSl9cmV0dXJuIGV9cGFyc2VOdWxsaXNoQ29hbGVzY2luZygpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFcXVhbGl0eSgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPz8iKTspe2xldCBpPXRoaXMucGFyc2VFcXVhbGl0eSgpO2U9bmV3IGhsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksIj8/IixlLGkpfXJldHVybiBlfXBhcnNlRXF1YWxpdHkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlUmVsYXRpb25hbCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIj09IjpjYXNlIj09PSI6Y2FzZSIhPSI6Y2FzZSIhPT0iOnRoaXMuYWR2YW5jZSgpO2xldCByPXRoaXMucGFyc2VSZWxhdGlvbmFsKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VSZWxhdGlvbmFsKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZUFkZGl0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiPCI6Y2FzZSI+IjpjYXNlIjw9IjpjYXNlIj49Ijp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlQWRkaXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZUFkZGl0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU11bHRpcGxpY2F0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiKyI6Y2FzZSItIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlTXVsdGlwbGljYXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZU11bHRpcGxpY2F0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByZWZpeCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIioiOmNhc2UiJSI6Y2FzZSIvIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlUHJlZml4KCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VQcmVmaXgoKXtpZih0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3Ipe2xldCBpLHQ9dGhpcy5pbnB1dEluZGV4O3N3aXRjaCh0aGlzLm5leHQuc3RyVmFsdWUpe2Nhc2UiKyI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLGNjLmNyZWF0ZVBsdXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKTtjYXNlIi0iOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSxjYy5jcmVhdGVNaW51cyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpO2Nhc2UiISI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLG5ldyB3eCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpfX1yZXR1cm4gdGhpcy5wYXJzZUNhbGxDaGFpbigpfXBhcnNlQ2FsbENoYWluKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByaW1hcnkoKTtmb3IoOzspaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDYpKWU9dGhpcy5wYXJzZUFjY2Vzc01lbWJlcihlLHQsITEpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPy4iKSllPXRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQwKT90aGlzLnBhcnNlQ2FsbChlLHQsITApOnRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKT90aGlzLnBhcnNlS2V5ZWRSZWFkT3JXcml0ZShlLHQsITApOnRoaXMucGFyc2VBY2Nlc3NNZW1iZXIoZSx0LCEwKTtlbHNlIGlmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKSllPXRoaXMucGFyc2VLZXllZFJlYWRPcldyaXRlKGUsdCwhMSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0MCkpZT10aGlzLnBhcnNlQ2FsbChlLHQsITEpO2Vsc2V7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIiEiKSlyZXR1cm4gZTtlPW5ldyBNeCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfX1wYXJzZVByaW1hcnkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDApKXt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBlPXRoaXMucGFyc2VQaXBlKCk7cmV0dXJuIHRoaXMucnBhcmVuc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLGV9aWYodGhpcy5uZXh0LmlzS2V5d29yZE51bGwoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksbnVsbCk7aWYodGhpcy5uZXh0LmlzS2V5d29yZFVuZGVmaW5lZCgpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgSXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSx2b2lkIDApO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUcnVlKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCEwKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkRmFsc2UoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksITEpO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUaGlzKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBneCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSkpe3RoaXMucmJyYWNrZXRzRXhwZWN0ZWQrKztsZXQgZT10aGlzLnBhcnNlRXhwcmVzc2lvbkxpc3QoOTMpO3JldHVybiB0aGlzLnJicmFja2V0c0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoOTMpLG5ldyBPMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc0NoYXJhY3RlcihmcCkpcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsTWFwKCk7aWYodGhpcy5uZXh0LmlzSWRlbnRpZmllcigpKXJldHVybiB0aGlzLnBhcnNlQWNjZXNzTWVtYmVyKG5ldyBFZih0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSx0LCExKTtpZih0aGlzLm5leHQuaXNOdW1iZXIoKSl7bGV0IGU9dGhpcy5uZXh0LnRvTnVtYmVyKCk7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc1N0cmluZygpKXtsZXQgZT10aGlzLm5leHQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksZSl9cmV0dXJuIHRoaXMubmV4dC5pc1ByaXZhdGVJZGVudGlmaWVyKCk/KHRoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodGhpcy5uZXh0LG51bGwpLG5ldyBuYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSk6dGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RoPyh0aGlzLmVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uOiAke3RoaXMuaW5wdXR9YCksbmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpKToodGhpcy5lcnJvcihgVW5leHBlY3RlZCB0b2tlbiAke3RoaXMubmV4dH1gKSxuZXcgbmEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSkpfXBhcnNlRXhwcmVzc2lvbkxpc3QodCl7bGV0IGU9W107ZG97aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpKWJyZWFrO2UucHVzaCh0aGlzLnBhcnNlUGlwZSgpKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3JldHVybiBlfXBhcnNlTGl0ZXJhbE1hcCgpe2xldCB0PVtdLGU9W10saT10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5leHBlY3RDaGFyYWN0ZXIoZnApLCF0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0dSkpe3RoaXMucmJyYWNlc0V4cGVjdGVkKys7ZG97bGV0IHI9dGhpcy5pbnB1dEluZGV4LG89dGhpcy5uZXh0LmlzU3RyaW5nKCkscz10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpO2lmKHQucHVzaCh7a2V5OnMscXVvdGVkOm99KSxvKXRoaXMuZXhwZWN0Q2hhcmFjdGVyKDU4KSxlLnB1c2godGhpcy5wYXJzZVBpcGUoKSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpZS5wdXNoKHRoaXMucGFyc2VQaXBlKCkpO2Vsc2V7bGV0IGE9dGhpcy5zcGFuKHIpLGw9dGhpcy5zb3VyY2VTcGFuKHIpO2UucHVzaChuZXcgb3UoYSxsLGwsbmV3IEVmKGEsbCkscykpfX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3RoaXMucmJyYWNlc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIodHUpfXJldHVybiBuZXcgQ3godGhpcy5zcGFuKGkpLHRoaXMuc291cmNlU3BhbihpKSx0LGUpfXBhcnNlQWNjZXNzTWVtYmVyKHQsZSxpKXtsZXQgYSxyPXRoaXMuaW5wdXRJbmRleCxvPXRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9PntsZXQgbD10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKT8/IiI7cmV0dXJuIDA9PT1sLmxlbmd0aCYmdGhpcy5lcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciBmb3IgcHJvcGVydHkgYWNjZXNzIix0LnNwYW4uZW5kKSxsfSkscz10aGlzLnNvdXJjZVNwYW4ocik7aWYoaSl0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKT8odGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxhPW5ldyBuYSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpKSk6YT1uZXcgYngodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSxzLHQsbyk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKSl7aWYoISgxJnRoaXMucGFyc2VGbGFncykpcmV0dXJuIHRoaXMuZXJyb3IoIkJpbmRpbmdzIGNhbm5vdCBjb250YWluIGFzc2lnbm1lbnRzIiksbmV3IG5hKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkpO2xldCBsPXRoaXMucGFyc2VDb25kaXRpb25hbCgpO2E9bmV3IHl4KHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkscyx0LG8sbCl9ZWxzZSBhPW5ldyBvdSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHMsdCxvKTtyZXR1cm4gYX1wYXJzZUNhbGwodCxlLGkpe2xldCByPXRoaXMuaW5wdXRJbmRleDt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBvPXRoaXMucGFyc2VDYWxsQXJndW1lbnRzKCkscz10aGlzLnNwYW4ocix0aGlzLmlucHV0SW5kZXgpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCk7dGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLHRoaXMucnBhcmVuc0V4cGVjdGVkLS07bGV0IGE9dGhpcy5zcGFuKGUpLGw9dGhpcy5zb3VyY2VTcGFuKGUpO3JldHVybiBpP25ldyBrMChhLGwsdCxvLHMpOm5ldyBicChhLGwsdCxvLHMpfWNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKXtyZXR1cm4gMiZ0aGlzLnBhcnNlRmxhZ3MmJnRoaXMubmV4dC5pc09wZXJhdG9yKCIhIikmJnRoaXMucGVlaygxKS5pc09wZXJhdG9yKCI9Iik/KHRoaXMuYWR2YW5jZSgpLHRoaXMuYWR2YW5jZSgpLCEwKTp0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI9Iil9cGFyc2VDYWxsQXJndW1lbnRzKCl7aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKDQxKSlyZXR1cm5bXTtsZXQgdD1bXTtkb3t0LnB1c2godGhpcy5wYXJzZVBpcGUoKSl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTtyZXR1cm4gdH1leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKXtsZXQgdD0iIixlPSExLGk9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7ZG97dCs9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKSxlPXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIi0iKSxlJiYodCs9Ii0iKX13aGlsZShlKTtyZXR1cm57c291cmNlOnQsc3BhbjpuZXcgT2EoaSxpK3QubGVuZ3RoKX19cGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQpe2xldCBlPVtdO2ZvcihlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KSk7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGg7KXtsZXQgaT10aGlzLnBhcnNlTGV0QmluZGluZygpO2lmKGkpZS5wdXNoKGkpO2Vsc2V7bGV0IHI9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxvPXRoaXMucGFyc2VBc0JpbmRpbmcocik7bz9lLnB1c2gobyk6KHIuc291cmNlPXQuc291cmNlK3Iuc291cmNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Iuc291cmNlLnN1YnN0cmluZygxKSxlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyhyKSkpfXRoaXMuY29uc3VtZVN0YXRlbWVudFRlcm1pbmF0b3IoKX1yZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnRlbXBsYXRlQmluZGluZ3M9dCx0aGlzLndhcm5pbmdzPWUsdGhpcy5lcnJvcnM9aX19KGUsW10sdGhpcy5lcnJvcnMpfXBhcnNlS2V5ZWRSZWFkT3JXcml0ZSh0LGUsaSl7cmV0dXJuIHRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9Pnt0aGlzLnJicmFja2V0c0V4cGVjdGVkKys7bGV0IHI9dGhpcy5wYXJzZVBpcGUoKTtpZihyIGluc3RhbmNlb2YgbmEmJnRoaXMuZXJyb3IoIktleSBhY2Nlc3MgY2Fubm90IGJlIGVtcHR5IiksdGhpcy5yYnJhY2tldHNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDkzKSwhdGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpKXJldHVybiBpP25ldyBQMCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscik6bmV3IEkwKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSksdCxyKTtpZighaSl7bGV0IG89dGhpcy5wYXJzZUNvbmRpdGlvbmFsKCk7cmV0dXJuIG5ldyB4eCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscixvKX1yZXR1cm4gdGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxuZXcgbmEodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSl9KX1wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KXtsZXQgZT1bXTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7bGV0IGk9dGhpcy5nZXREaXJlY3RpdmVCb3VuZFRhcmdldCgpLHI9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQsbz10aGlzLnBhcnNlQXNCaW5kaW5nKHQpO298fCh0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCkscj10aGlzLmN1cnJlbnRBYnNvbHV0ZU9mZnNldCk7bGV0IHM9bmV3IE9hKHQuc3Bhbi5zdGFydCxyKTtyZXR1cm4gZS5wdXNoKG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fShzLHQsaSkpLG8mJmUucHVzaChvKSxlfWdldERpcmVjdGl2ZUJvdW5kVGFyZ2V0KCl7aWYodGhpcy5uZXh0PT09SU58fHRoaXMucGVla0tleXdvcmRBcygpfHx0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5wYXJzZVBpcGUoKSx7c3RhcnQ6ZSxlbmQ6aX09dC5zcGFuLHI9dGhpcy5pbnB1dC5zdWJzdHJpbmcoZSxpKTtyZXR1cm4gbmV3IGV1KHQscix0aGlzLmxvY2F0aW9uLHRoaXMuYWJzb2x1dGVPZmZzZXQrZSx0aGlzLmVycm9ycyl9cGFyc2VBc0JpbmRpbmcodCl7aWYoIXRoaXMucGVla0tleXdvcmRBcygpKXJldHVybiBudWxsO3RoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCk7dGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpO2xldCBpPW5ldyBPYSh0LnNwYW4uc3RhcnQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3goaSxlLHQpfXBhcnNlTGV0QmluZGluZygpe2lmKCF0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7dGhpcy5hZHZhbmNlKCk7bGV0IGU9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxpPW51bGw7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpJiYoaT10aGlzLmV4cGVjdFRlbXBsYXRlQmluZGluZ0tleSgpKSx0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCk7bGV0IHI9bmV3IE9hKHQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3gocixlLGkpfWNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCl7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTkpfHx0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCl9ZXJyb3IodCxlPW51bGwpe3RoaXMuZXJyb3JzLnB1c2gobmV3IG14KHQsdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dChlKSx0aGlzLmxvY2F0aW9uKSksdGhpcy5za2lwKCl9bG9jYXRpb25UZXh0KHQ9bnVsbCl7cmV0dXJuIG51bGw9PXQmJih0PXRoaXMuaW5kZXgpLHQ8dGhpcy50b2tlbnMubGVuZ3RoP2BhdCBjb2x1bW4gJHt0aGlzLnRva2Vuc1t0XS5pbmRleCsxfSBpbmA6ImF0IHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24ifV9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsZSl7bGV0IGk9YFByaXZhdGUgaWRlbnRpZmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIFVuZXhwZWN0ZWQgcHJpdmF0ZSBpZGVudGlmaWVyOiAke3R9YDtudWxsIT09ZSYmKGkrPWAsICR7ZX1gKSx0aGlzLmVycm9yKGkpfXNraXAoKXtsZXQgdD10aGlzLm5leHQ7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aCYmIXQuaXNDaGFyYWN0ZXIoNTkpJiYhdC5pc09wZXJhdG9yKCJ8IikmJih0aGlzLnJwYXJlbnNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoNDEpKSYmKHRoaXMucmJyYWNlc0V4cGVjdGVkPD0wfHwhdC5pc0NoYXJhY3Rlcih0dSkpJiYodGhpcy5yYnJhY2tldHNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoOTMpKSYmISh0aGlzLmNvbnRleHQmZGYuV3JpdGFibGUmJnQuaXNPcGVyYXRvcigiPSIpKTspdGhpcy5uZXh0LmlzRXJyb3IoKSYmdGhpcy5lcnJvcnMucHVzaChuZXcgbXgodGhpcy5uZXh0LnRvU3RyaW5nKCksdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dCgpLHRoaXMubG9jYXRpb24pKSx0aGlzLmFkdmFuY2UoKSx0PXRoaXMubmV4dH19LElMPWNsYXNzIGV4dGVuZHMgZ0x7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZXJyb3JzPVtdfXZpc2l0UGlwZSgpe3RoaXMuZXJyb3JzLnB1c2goInBpcGVzIil9fSxUZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlU3Bhbj10LHRoaXMuaTE4bj1lfX0sRjA9Y2xhc3MgZXh0ZW5kcyBUZntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnRva2Vucz1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRUZXh0KHRoaXMsZSl9fSxOMD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcihyLHMpLHRoaXMuc3dpdGNoVmFsdWU9dCx0aGlzLnR5cGU9ZSx0aGlzLmNhc2VzPWksdGhpcy5zd2l0Y2hWYWx1ZVNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uKHRoaXMsZSl9fSxSTD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3N1cGVyKGksYSksdGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy52YWx1ZVRva2Vucz1zfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRBdHRyaWJ1dGUodGhpcyxlKX19LEF4PWNsYXNzIGV4dGVuZHMgVGZ7Y29uc3RydWN0b3IodCxlLGkscixvLHM9bnVsbCxhKXtzdXBlcihyLGEpLHRoaXMubmFtZT10LHRoaXMuYXR0cnM9ZSx0aGlzLmNoaWxkcmVuPWksdGhpcy5zdGFydFNvdXJjZVNwYW49byx0aGlzLmVuZFNvdXJjZVNwYW49c312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RWxlbWVudCh0aGlzLGUpfX0sVjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdENvbW1lbnQodGhpcyxlKX19O2Z1bmN0aW9uIGN1KG4sdCxlPW51bGwpe2xldCBpPVtdLHI9bi52aXNpdD9vPT5uLnZpc2l0KG8sZSl8fG8udmlzaXQobixlKTpvPT5vLnZpc2l0KG4sZSk7cmV0dXJuIHQuZm9yRWFjaChvPT57bGV0IHM9cihvKTtzJiZpLnB1c2gocyl9KSxpfXZhciBIMT17QUVsaWc6Ilx4YzYiLEFNUDoiJiIsYW1wOiImIixBYWN1dGU6Ilx4YzEiLEFicmV2ZToiXHUwMTAyIixBY2lyYzoiXHhjMiIsQWN5OiJcdTA0MTAiLEFmcjoiXHVkODM1XHVkZDA0IixBZ3JhdmU6Ilx4YzAiLEFscGhhOiJcdTAzOTEiLEFtYWNyOiJcdTAxMDAiLEFuZDoiXHUyYTUzIixBb2dvbjoiXHUwMTA0IixBb3BmOiJcdWQ4MzVcdWRkMzgiLEFwcGx5RnVuY3Rpb246Ilx1MjA2MSIsYWY6Ilx1MjA2MSIsQXJpbmc6Ilx4YzUiLGFuZ3N0OiJceGM1IixBc2NyOiJcdWQ4MzVcdWRjOWMiLEFzc2lnbjoiXHUyMjU0Iixjb2xvbmU6Ilx1MjI1NCIsY29sb25lcToiXHUyMjU0IixBdGlsZGU6Ilx4YzMiLEF1bWw6Ilx4YzQiLEJhY2tzbGFzaDoiXHUyMjE2IixzZXRtaW51czoiXHUyMjE2IixzZXRtbjoiXHUyMjE2IixzbWFsbHNldG1pbnVzOiJcdTIyMTYiLHNzZXRtbjoiXHUyMjE2IixCYXJ2OiJcdTJhZTciLEJhcndlZDoiXHUyMzA2Iixkb3VibGViYXJ3ZWRnZToiXHUyMzA2IixCY3k6Ilx1MDQxMSIsQmVjYXVzZToiXHUyMjM1IixiZWNhdXM6Ilx1MjIzNSIsYmVjYXVzZToiXHUyMjM1IixCZXJub3VsbGlzOiJcdTIxMmMiLEJzY3I6Ilx1MjEyYyIsYmVybm91OiJcdTIxMmMiLEJldGE6Ilx1MDM5MiIsQmZyOiJcdWQ4MzVcdWRkMDUiLEJvcGY6Ilx1ZDgzNVx1ZGQzOSIsQnJldmU6Ilx1MDJkOCIsYnJldmU6Ilx1MDJkOCIsQnVtcGVxOiJcdTIyNGUiLEh1bXBEb3duSHVtcDoiXHUyMjRlIixidW1wOiJcdTIyNGUiLENIY3k6Ilx1MDQyNyIsQ09QWToiXHhhOSIsY29weToiXHhhOSIsQ2FjdXRlOiJcdTAxMDYiLENhcDoiXHUyMmQyIixDYXBpdGFsRGlmZmVyZW50aWFsRDoiXHUyMTQ1IixERDoiXHUyMTQ1IixDYXlsZXlzOiJcdTIxMmQiLENmcjoiXHUyMTJkIixDY2Fyb246Ilx1MDEwYyIsQ2NlZGlsOiJceGM3IixDY2lyYzoiXHUwMTA4IixDY29uaW50OiJcdTIyMzAiLENkb3Q6Ilx1MDEwYSIsQ2VkaWxsYToiXHhiOCIsY2VkaWw6Ilx4YjgiLENlbnRlckRvdDoiXHhiNyIsY2VudGVyZG90OiJceGI3IixtaWRkb3Q6Ilx4YjciLENoaToiXHUwM2E3IixDaXJjbGVEb3Q6Ilx1MjI5OSIsb2RvdDoiXHUyMjk5IixDaXJjbGVNaW51czoiXHUyMjk2IixvbWludXM6Ilx1MjI5NiIsQ2lyY2xlUGx1czoiXHUyMjk1IixvcGx1czoiXHUyMjk1IixDaXJjbGVUaW1lczoiXHUyMjk3IixvdGltZXM6Ilx1MjI5NyIsQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzIiLGN3Y29uaW50OiJcdTIyMzIiLENsb3NlQ3VybHlEb3VibGVRdW90ZToiXHUyMDFkIixyZHF1bzoiXHUyMDFkIixyZHF1b3I6Ilx1MjAxZCIsQ2xvc2VDdXJseVF1b3RlOiJcdTIwMTkiLHJzcXVvOiJcdTIwMTkiLHJzcXVvcjoiXHUyMDE5IixDb2xvbjoiXHUyMjM3IixQcm9wb3J0aW9uOiJcdTIyMzciLENvbG9uZToiXHUyYTc0IixDb25ncnVlbnQ6Ilx1MjI2MSIsZXF1aXY6Ilx1MjI2MSIsQ29uaW50OiJcdTIyMmYiLERvdWJsZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjJmIixDb250b3VySW50ZWdyYWw6Ilx1MjIyZSIsY29uaW50OiJcdTIyMmUiLG9pbnQ6Ilx1MjIyZSIsQ29wZjoiXHUyMTAyIixjb21wbGV4ZXM6Ilx1MjEwMiIsQ29wcm9kdWN0OiJcdTIyMTAiLGNvcHJvZDoiXHUyMjEwIixDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzMiLGF3Y29uaW50OiJcdTIyMzMiLENyb3NzOiJcdTJhMmYiLENzY3I6Ilx1ZDgzNVx1ZGM5ZSIsQ3VwOiJcdTIyZDMiLEN1cENhcDoiXHUyMjRkIixhc3ltcGVxOiJcdTIyNGQiLEREb3RyYWhkOiJcdTI5MTEiLERKY3k6Ilx1MDQwMiIsRFNjeToiXHUwNDA1IixEWmN5OiJcdTA0MGYiLERhZ2dlcjoiXHUyMDIxIixkZGFnZ2VyOiJcdTIwMjEiLERhcnI6Ilx1MjFhMSIsRGFzaHY6Ilx1MmFlNCIsRG91YmxlTGVmdFRlZToiXHUyYWU0IixEY2Fyb246Ilx1MDEwZSIsRGN5OiJcdTA0MTQiLERlbDoiXHUyMjA3IixuYWJsYToiXHUyMjA3IixEZWx0YToiXHUwMzk0IixEZnI6Ilx1ZDgzNVx1ZGQwNyIsRGlhY3JpdGljYWxBY3V0ZToiXHhiNCIsYWN1dGU6Ilx4YjQiLERpYWNyaXRpY2FsRG90OiJcdTAyZDkiLGRvdDoiXHUwMmQ5IixEaWFjcml0aWNhbERvdWJsZUFjdXRlOiJcdTAyZGQiLGRibGFjOiJcdTAyZGQiLERpYWNyaXRpY2FsR3JhdmU6ImAiLGdyYXZlOiJgIixEaWFjcml0aWNhbFRpbGRlOiJcdTAyZGMiLHRpbGRlOiJcdTAyZGMiLERpYW1vbmQ6Ilx1MjJjNCIsZGlhbToiXHUyMmM0IixkaWFtb25kOiJcdTIyYzQiLERpZmZlcmVudGlhbEQ6Ilx1MjE0NiIsZGQ6Ilx1MjE0NiIsRG9wZjoiXHVkODM1XHVkZDNiIixEb3Q6Ilx4YTgiLERvdWJsZURvdDoiXHhhOCIsZGllOiJceGE4Iix1bWw6Ilx4YTgiLERvdERvdDoiXHUyMGRjIixEb3RFcXVhbDoiXHUyMjUwIixkb3RlcToiXHUyMjUwIixlc2RvdDoiXHUyMjUwIixEb3VibGVEb3duQXJyb3c6Ilx1MjFkMyIsRG93bmFycm93OiJcdTIxZDMiLGRBcnI6Ilx1MjFkMyIsRG91YmxlTGVmdEFycm93OiJcdTIxZDAiLExlZnRhcnJvdzoiXHUyMWQwIixsQXJyOiJcdTIxZDAiLERvdWJsZUxlZnRSaWdodEFycm93OiJcdTIxZDQiLExlZnRyaWdodGFycm93OiJcdTIxZDQiLGhBcnI6Ilx1MjFkNCIsaWZmOiJcdTIxZDQiLERvdWJsZUxvbmdMZWZ0QXJyb3c6Ilx1MjdmOCIsTG9uZ2xlZnRhcnJvdzoiXHUyN2Y4Iix4bEFycjoiXHUyN2Y4IixEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmYSIsTG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZmEiLHhoQXJyOiJcdTI3ZmEiLERvdWJsZUxvbmdSaWdodEFycm93OiJcdTI3ZjkiLExvbmdyaWdodGFycm93OiJcdTI3ZjkiLHhyQXJyOiJcdTI3ZjkiLERvdWJsZVJpZ2h0QXJyb3c6Ilx1MjFkMiIsSW1wbGllczoiXHUyMWQyIixSaWdodGFycm93OiJcdTIxZDIiLHJBcnI6Ilx1MjFkMiIsRG91YmxlUmlnaHRUZWU6Ilx1MjJhOCIsdkRhc2g6Ilx1MjJhOCIsRG91YmxlVXBBcnJvdzoiXHUyMWQxIixVcGFycm93OiJcdTIxZDEiLHVBcnI6Ilx1MjFkMSIsRG91YmxlVXBEb3duQXJyb3c6Ilx1MjFkNSIsVXBkb3duYXJyb3c6Ilx1MjFkNSIsdkFycjoiXHUyMWQ1IixEb3VibGVWZXJ0aWNhbEJhcjoiXHUyMjI1IixwYXI6Ilx1MjIyNSIscGFyYWxsZWw6Ilx1MjIyNSIsc2hvcnRwYXJhbGxlbDoiXHUyMjI1IixzcGFyOiJcdTIyMjUiLERvd25BcnJvdzoiXHUyMTkzIixTaG9ydERvd25BcnJvdzoiXHUyMTkzIixkYXJyOiJcdTIxOTMiLGRvd25hcnJvdzoiXHUyMTkzIixEb3duQXJyb3dCYXI6Ilx1MjkxMyIsRG93bkFycm93VXBBcnJvdzoiXHUyMWY1IixkdWFycjoiXHUyMWY1IixEb3duQnJldmU6Ilx1MDMxMSIsRG93bkxlZnRSaWdodFZlY3RvcjoiXHUyOTUwIixEb3duTGVmdFRlZVZlY3RvcjoiXHUyOTVlIixEb3duTGVmdFZlY3RvcjoiXHUyMWJkIixsZWZ0aGFycG9vbmRvd246Ilx1MjFiZCIsbGhhcmQ6Ilx1MjFiZCIsRG93bkxlZnRWZWN0b3JCYXI6Ilx1Mjk1NiIsRG93blJpZ2h0VGVlVmVjdG9yOiJcdTI5NWYiLERvd25SaWdodFZlY3RvcjoiXHUyMWMxIixyaGFyZDoiXHUyMWMxIixyaWdodGhhcnBvb25kb3duOiJcdTIxYzEiLERvd25SaWdodFZlY3RvckJhcjoiXHUyOTU3IixEb3duVGVlOiJcdTIyYTQiLHRvcDoiXHUyMmE0IixEb3duVGVlQXJyb3c6Ilx1MjFhNyIsbWFwc3RvZG93bjoiXHUyMWE3IixEc2NyOiJcdWQ4MzVcdWRjOWYiLERzdHJvazoiXHUwMTEwIixFTkc6Ilx1MDE0YSIsRVRIOiJceGQwIixFYWN1dGU6Ilx4YzkiLEVjYXJvbjoiXHUwMTFhIixFY2lyYzoiXHhjYSIsRWN5OiJcdTA0MmQiLEVkb3Q6Ilx1MDExNiIsRWZyOiJcdWQ4MzVcdWRkMDgiLEVncmF2ZToiXHhjOCIsRWxlbWVudDoiXHUyMjA4IixpbjoiXHUyMjA4Iixpc2luOiJcdTIyMDgiLGlzaW52OiJcdTIyMDgiLEVtYWNyOiJcdTAxMTIiLEVtcHR5U21hbGxTcXVhcmU6Ilx1MjVmYiIsRW1wdHlWZXJ5U21hbGxTcXVhcmU6Ilx1MjVhYiIsRW9nb246Ilx1MDExOCIsRW9wZjoiXHVkODM1XHVkZDNjIixFcHNpbG9uOiJcdTAzOTUiLEVxdWFsOiJcdTJhNzUiLEVxdWFsVGlsZGU6Ilx1MjI0MiIsZXFzaW06Ilx1MjI0MiIsZXNpbToiXHUyMjQyIixFcXVpbGlicml1bToiXHUyMWNjIixyaWdodGxlZnRoYXJwb29uczoiXHUyMWNjIixybGhhcjoiXHUyMWNjIixFc2NyOiJcdTIxMzAiLGV4cGVjdGF0aW9uOiJcdTIxMzAiLEVzaW06Ilx1MmE3MyIsRXRhOiJcdTAzOTciLEV1bWw6Ilx4Y2IiLEV4aXN0czoiXHUyMjAzIixleGlzdDoiXHUyMjAzIixFeHBvbmVudGlhbEU6Ilx1MjE0NyIsZWU6Ilx1MjE0NyIsZXhwb25lbnRpYWxlOiJcdTIxNDciLEZjeToiXHUwNDI0IixGZnI6Ilx1ZDgzNVx1ZGQwOSIsRmlsbGVkU21hbGxTcXVhcmU6Ilx1MjVmYyIsRmlsbGVkVmVyeVNtYWxsU3F1YXJlOiJcdTI1YWEiLGJsYWNrc3F1YXJlOiJcdTI1YWEiLHNxdWFyZjoiXHUyNWFhIixzcXVmOiJcdTI1YWEiLEZvcGY6Ilx1ZDgzNVx1ZGQzZCIsRm9yQWxsOiJcdTIyMDAiLGZvcmFsbDoiXHUyMjAwIixGb3VyaWVydHJmOiJcdTIxMzEiLEZzY3I6Ilx1MjEzMSIsR0pjeToiXHUwNDAzIixHVDoiPiIsZ3Q6Ij4iLEdhbW1hOiJcdTAzOTMiLEdhbW1hZDoiXHUwM2RjIixHYnJldmU6Ilx1MDExZSIsR2NlZGlsOiJcdTAxMjIiLEdjaXJjOiJcdTAxMWMiLEdjeToiXHUwNDEzIixHZG90OiJcdTAxMjAiLEdmcjoiXHVkODM1XHVkZDBhIixHZzoiXHUyMmQ5IixnZ2c6Ilx1MjJkOSIsR29wZjoiXHVkODM1XHVkZDNlIixHcmVhdGVyRXF1YWw6Ilx1MjI2NSIsZ2U6Ilx1MjI2NSIsZ2VxOiJcdTIyNjUiLEdyZWF0ZXJFcXVhbExlc3M6Ilx1MjJkYiIsZ2VsOiJcdTIyZGIiLGd0cmVxbGVzczoiXHUyMmRiIixHcmVhdGVyRnVsbEVxdWFsOiJcdTIyNjciLGdFOiJcdTIyNjciLGdlcXE6Ilx1MjI2NyIsR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMiIsR3JlYXRlckxlc3M6Ilx1MjI3NyIsZ2w6Ilx1MjI3NyIsZ3RybGVzczoiXHUyMjc3IixHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlIixnZXFzbGFudDoiXHUyYTdlIixnZXM6Ilx1MmE3ZSIsR3JlYXRlclRpbGRlOiJcdTIyNzMiLGdzaW06Ilx1MjI3MyIsZ3Ryc2ltOiJcdTIyNzMiLEdzY3I6Ilx1ZDgzNVx1ZGNhMiIsR3Q6Ilx1MjI2YiIsTmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MjI2YiIsZ2c6Ilx1MjI2YiIsSEFSRGN5OiJcdTA0MmEiLEhhY2VrOiJcdTAyYzciLGNhcm9uOiJcdTAyYzciLEhhdDoiXiIsSGNpcmM6Ilx1MDEyNCIsSGZyOiJcdTIxMGMiLFBvaW5jYXJlcGxhbmU6Ilx1MjEwYyIsSGlsYmVydFNwYWNlOiJcdTIxMGIiLEhzY3I6Ilx1MjEwYiIsaGFtaWx0OiJcdTIxMGIiLEhvcGY6Ilx1MjEwZCIscXVhdGVybmlvbnM6Ilx1MjEwZCIsSG9yaXpvbnRhbExpbmU6Ilx1MjUwMCIsYm94aDoiXHUyNTAwIixIc3Ryb2s6Ilx1MDEyNiIsSHVtcEVxdWFsOiJcdTIyNGYiLGJ1bXBlOiJcdTIyNGYiLGJ1bXBlcToiXHUyMjRmIixJRWN5OiJcdTA0MTUiLElKbGlnOiJcdTAxMzIiLElPY3k6Ilx1MDQwMSIsSWFjdXRlOiJceGNkIixJY2lyYzoiXHhjZSIsSWN5OiJcdTA0MTgiLElkb3Q6Ilx1MDEzMCIsSWZyOiJcdTIxMTEiLEltOiJcdTIxMTEiLGltYWdlOiJcdTIxMTEiLGltYWdwYXJ0OiJcdTIxMTEiLElncmF2ZToiXHhjYyIsSW1hY3I6Ilx1MDEyYSIsSW1hZ2luYXJ5SToiXHUyMTQ4IixpaToiXHUyMTQ4IixJbnQ6Ilx1MjIyYyIsSW50ZWdyYWw6Ilx1MjIyYiIsaW50OiJcdTIyMmIiLEludGVyc2VjdGlvbjoiXHUyMmMyIixiaWdjYXA6Ilx1MjJjMiIseGNhcDoiXHUyMmMyIixJbnZpc2libGVDb21tYToiXHUyMDYzIixpYzoiXHUyMDYzIixJbnZpc2libGVUaW1lczoiXHUyMDYyIixpdDoiXHUyMDYyIixJb2dvbjoiXHUwMTJlIixJb3BmOiJcdWQ4MzVcdWRkNDAiLElvdGE6Ilx1MDM5OSIsSXNjcjoiXHUyMTEwIixpbWFnbGluZToiXHUyMTEwIixJdGlsZGU6Ilx1MDEyOCIsSXVrY3k6Ilx1MDQwNiIsSXVtbDoiXHhjZiIsSmNpcmM6Ilx1MDEzNCIsSmN5OiJcdTA0MTkiLEpmcjoiXHVkODM1XHVkZDBkIixKb3BmOiJcdWQ4MzVcdWRkNDEiLEpzY3I6Ilx1ZDgzNVx1ZGNhNSIsSnNlcmN5OiJcdTA0MDgiLEp1a2N5OiJcdTA0MDQiLEtIY3k6Ilx1MDQyNSIsS0pjeToiXHUwNDBjIixLYXBwYToiXHUwMzlhIixLY2VkaWw6Ilx1MDEzNiIsS2N5OiJcdTA0MWEiLEtmcjoiXHVkODM1XHVkZDBlIixLb3BmOiJcdWQ4MzVcdWRkNDIiLEtzY3I6Ilx1ZDgzNVx1ZGNhNiIsTEpjeToiXHUwNDA5IixMVDoiPCIsbHQ6IjwiLExhY3V0ZToiXHUwMTM5IixMYW1iZGE6Ilx1MDM5YiIsTGFuZzoiXHUyN2VhIixMYXBsYWNldHJmOiJcdTIxMTIiLExzY3I6Ilx1MjExMiIsbGFncmFuOiJcdTIxMTIiLExhcnI6Ilx1MjE5ZSIsdHdvaGVhZGxlZnRhcnJvdzoiXHUyMTllIixMY2Fyb246Ilx1MDEzZCIsTGNlZGlsOiJcdTAxM2IiLExjeToiXHUwNDFiIixMZWZ0QW5nbGVCcmFja2V0OiJcdTI3ZTgiLGxhbmc6Ilx1MjdlOCIsbGFuZ2xlOiJcdTI3ZTgiLExlZnRBcnJvdzoiXHUyMTkwIixTaG9ydExlZnRBcnJvdzoiXHUyMTkwIixsYXJyOiJcdTIxOTAiLGxlZnRhcnJvdzoiXHUyMTkwIixzbGFycjoiXHUyMTkwIixMZWZ0QXJyb3dCYXI6Ilx1MjFlNCIsbGFycmI6Ilx1MjFlNCIsTGVmdEFycm93UmlnaHRBcnJvdzoiXHUyMWM2IixsZWZ0cmlnaHRhcnJvd3M6Ilx1MjFjNiIsbHJhcnI6Ilx1MjFjNiIsTGVmdENlaWxpbmc6Ilx1MjMwOCIsbGNlaWw6Ilx1MjMwOCIsTGVmdERvdWJsZUJyYWNrZXQ6Ilx1MjdlNiIsbG9icms6Ilx1MjdlNiIsTGVmdERvd25UZWVWZWN0b3I6Ilx1Mjk2MSIsTGVmdERvd25WZWN0b3I6Ilx1MjFjMyIsZGhhcmw6Ilx1MjFjMyIsZG93bmhhcnBvb25sZWZ0OiJcdTIxYzMiLExlZnREb3duVmVjdG9yQmFyOiJcdTI5NTkiLExlZnRGbG9vcjoiXHUyMzBhIixsZmxvb3I6Ilx1MjMwYSIsTGVmdFJpZ2h0QXJyb3c6Ilx1MjE5NCIsaGFycjoiXHUyMTk0IixsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0IixMZWZ0UmlnaHRWZWN0b3I6Ilx1Mjk0ZSIsTGVmdFRlZToiXHUyMmEzIixkYXNodjoiXHUyMmEzIixMZWZ0VGVlQXJyb3c6Ilx1MjFhNCIsbWFwc3RvbGVmdDoiXHUyMWE0IixMZWZ0VGVlVmVjdG9yOiJcdTI5NWEiLExlZnRUcmlhbmdsZToiXHUyMmIyIix2YXJ0cmlhbmdsZWxlZnQ6Ilx1MjJiMiIsdmx0cmk6Ilx1MjJiMiIsTGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2YiLExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyYjQiLGx0cmllOiJcdTIyYjQiLHRyaWFuZ2xlbGVmdGVxOiJcdTIyYjQiLExlZnRVcERvd25WZWN0b3I6Ilx1Mjk1MSIsTGVmdFVwVGVlVmVjdG9yOiJcdTI5NjAiLExlZnRVcFZlY3RvcjoiXHUyMWJmIix1aGFybDoiXHUyMWJmIix1cGhhcnBvb25sZWZ0OiJcdTIxYmYiLExlZnRVcFZlY3RvckJhcjoiXHUyOTU4IixMZWZ0VmVjdG9yOiJcdTIxYmMiLGxlZnRoYXJwb29udXA6Ilx1MjFiYyIsbGhhcnU6Ilx1MjFiYyIsTGVmdFZlY3RvckJhcjoiXHUyOTUyIixMZXNzRXF1YWxHcmVhdGVyOiJcdTIyZGEiLGxlZzoiXHUyMmRhIixsZXNzZXFndHI6Ilx1MjJkYSIsTGVzc0Z1bGxFcXVhbDoiXHUyMjY2IixsRToiXHUyMjY2IixsZXFxOiJcdTIyNjYiLExlc3NHcmVhdGVyOiJcdTIyNzYiLGxlc3NndHI6Ilx1MjI3NiIsbGc6Ilx1MjI3NiIsTGVzc0xlc3M6Ilx1MmFhMSIsTGVzc1NsYW50RXF1YWw6Ilx1MmE3ZCIsbGVxc2xhbnQ6Ilx1MmE3ZCIsbGVzOiJcdTJhN2QiLExlc3NUaWxkZToiXHUyMjcyIixsZXNzc2ltOiJcdTIyNzIiLGxzaW06Ilx1MjI3MiIsTGZyOiJcdWQ4MzVcdWRkMGYiLExsOiJcdTIyZDgiLExsZWZ0YXJyb3c6Ilx1MjFkYSIsbEFhcnI6Ilx1MjFkYSIsTG1pZG90OiJcdTAxM2YiLExvbmdMZWZ0QXJyb3c6Ilx1MjdmNSIsbG9uZ2xlZnRhcnJvdzoiXHUyN2Y1Iix4bGFycjoiXHUyN2Y1IixMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmNyIsbG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZjciLHhoYXJyOiJcdTI3ZjciLExvbmdSaWdodEFycm93OiJcdTI3ZjYiLGxvbmdyaWdodGFycm93OiJcdTI3ZjYiLHhyYXJyOiJcdTI3ZjYiLExvcGY6Ilx1ZDgzNVx1ZGQ0MyIsTG93ZXJMZWZ0QXJyb3c6Ilx1MjE5OSIsc3dhcnI6Ilx1MjE5OSIsc3dhcnJvdzoiXHUyMTk5IixMb3dlclJpZ2h0QXJyb3c6Ilx1MjE5OCIsc2VhcnI6Ilx1MjE5OCIsc2VhcnJvdzoiXHUyMTk4IixMc2g6Ilx1MjFiMCIsbHNoOiJcdTIxYjAiLExzdHJvazoiXHUwMTQxIixMdDoiXHUyMjZhIixOZXN0ZWRMZXNzTGVzczoiXHUyMjZhIixsbDoiXHUyMjZhIixNYXA6Ilx1MjkwNSIsTWN5OiJcdTA0MWMiLE1lZGl1bVNwYWNlOiJcdTIwNWYiLE1lbGxpbnRyZjoiXHUyMTMzIixNc2NyOiJcdTIxMzMiLHBobW1hdDoiXHUyMTMzIixNZnI6Ilx1ZDgzNVx1ZGQxMCIsTWludXNQbHVzOiJcdTIyMTMiLG1ucGx1czoiXHUyMjEzIixtcDoiXHUyMjEzIixNb3BmOiJcdWQ4MzVcdWRkNDQiLE11OiJcdTAzOWMiLE5KY3k6Ilx1MDQwYSIsTmFjdXRlOiJcdTAxNDMiLE5jYXJvbjoiXHUwMTQ3IixOY2VkaWw6Ilx1MDE0NSIsTmN5OiJcdTA0MWQiLE5lZ2F0aXZlTWVkaXVtU3BhY2U6Ilx1MjAwYiIsTmVnYXRpdmVUaGlja1NwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVGhpblNwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVmVyeVRoaW5TcGFjZToiXHUyMDBiIixaZXJvV2lkdGhTcGFjZToiXHUyMDBiIixOZXdMaW5lOiJcbiIsTmZyOiJcdWQ4MzVcdWRkMTEiLE5vQnJlYWs6Ilx1MjA2MCIsTm9uQnJlYWtpbmdTcGFjZToiXHhhMCIsbmJzcDoiXHhhMCIsTm9wZjoiXHUyMTE1IixuYXR1cmFsczoiXHUyMTE1IixOb3Q6Ilx1MmFlYyIsTm90Q29uZ3J1ZW50OiJcdTIyNjIiLG5lcXVpdjoiXHUyMjYyIixOb3RDdXBDYXA6Ilx1MjI2ZCIsTm90RG91YmxlVmVydGljYWxCYXI6Ilx1MjIyNiIsbnBhcjoiXHUyMjI2IixucGFyYWxsZWw6Ilx1MjIyNiIsbnNob3J0cGFyYWxsZWw6Ilx1MjIyNiIsbnNwYXI6Ilx1MjIyNiIsTm90RWxlbWVudDoiXHUyMjA5Iixub3RpbjoiXHUyMjA5Iixub3RpbnZhOiJcdTIyMDkiLE5vdEVxdWFsOiJcdTIyNjAiLG5lOiJcdTIyNjAiLE5vdEVxdWFsVGlsZGU6Ilx1MjI0Mlx1MDMzOCIsbmVzaW06Ilx1MjI0Mlx1MDMzOCIsTm90RXhpc3RzOiJcdTIyMDQiLG5leGlzdDoiXHUyMjA0IixuZXhpc3RzOiJcdTIyMDQiLE5vdEdyZWF0ZXI6Ilx1MjI2ZiIsbmd0OiJcdTIyNmYiLG5ndHI6Ilx1MjI2ZiIsTm90R3JlYXRlckVxdWFsOiJcdTIyNzEiLG5nZToiXHUyMjcxIixuZ2VxOiJcdTIyNzEiLE5vdEdyZWF0ZXJGdWxsRXF1YWw6Ilx1MjI2N1x1MDMzOCIsbmdFOiJcdTIyNjdcdTAzMzgiLG5nZXFxOiJcdTIyNjdcdTAzMzgiLE5vdEdyZWF0ZXJHcmVhdGVyOiJcdTIyNmJcdTAzMzgiLG5HdHY6Ilx1MjI2Ylx1MDMzOCIsTm90R3JlYXRlckxlc3M6Ilx1MjI3OSIsbnRnbDoiXHUyMjc5IixOb3RHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlXHUwMzM4IixuZ2Vxc2xhbnQ6Ilx1MmE3ZVx1MDMzOCIsbmdlczoiXHUyYTdlXHUwMzM4IixOb3RHcmVhdGVyVGlsZGU6Ilx1MjI3NSIsbmdzaW06Ilx1MjI3NSIsTm90SHVtcERvd25IdW1wOiJcdTIyNGVcdTAzMzgiLG5idW1wOiJcdTIyNGVcdTAzMzgiLE5vdEh1bXBFcXVhbDoiXHUyMjRmXHUwMzM4IixuYnVtcGU6Ilx1MjI0Zlx1MDMzOCIsTm90TGVmdFRyaWFuZ2xlOiJcdTIyZWEiLG5sdHJpOiJcdTIyZWEiLG50cmlhbmdsZWxlZnQ6Ilx1MjJlYSIsTm90TGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2ZcdTAzMzgiLE5vdExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyZWMiLG5sdHJpZToiXHUyMmVjIixudHJpYW5nbGVsZWZ0ZXE6Ilx1MjJlYyIsTm90TGVzczoiXHUyMjZlIixubGVzczoiXHUyMjZlIixubHQ6Ilx1MjI2ZSIsTm90TGVzc0VxdWFsOiJcdTIyNzAiLG5sZToiXHUyMjcwIixubGVxOiJcdTIyNzAiLE5vdExlc3NHcmVhdGVyOiJcdTIyNzgiLG50bGc6Ilx1MjI3OCIsTm90TGVzc0xlc3M6Ilx1MjI2YVx1MDMzOCIsbkx0djoiXHUyMjZhXHUwMzM4IixOb3RMZXNzU2xhbnRFcXVhbDoiXHUyYTdkXHUwMzM4IixubGVxc2xhbnQ6Ilx1MmE3ZFx1MDMzOCIsbmxlczoiXHUyYTdkXHUwMzM4IixOb3RMZXNzVGlsZGU6Ilx1MjI3NCIsbmxzaW06Ilx1MjI3NCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMlx1MDMzOCIsTm90TmVzdGVkTGVzc0xlc3M6Ilx1MmFhMVx1MDMzOCIsTm90UHJlY2VkZXM6Ilx1MjI4MCIsbnByOiJcdTIyODAiLG5wcmVjOiJcdTIyODAiLE5vdFByZWNlZGVzRXF1YWw6Ilx1MmFhZlx1MDMzOCIsbnByZToiXHUyYWFmXHUwMzM4IixucHJlY2VxOiJcdTJhYWZcdTAzMzgiLE5vdFByZWNlZGVzU2xhbnRFcXVhbDoiXHUyMmUwIixucHJjdWU6Ilx1MjJlMCIsTm90UmV2ZXJzZUVsZW1lbnQ6Ilx1MjIwYyIsbm90bmk6Ilx1MjIwYyIsbm90bml2YToiXHUyMjBjIixOb3RSaWdodFRyaWFuZ2xlOiJcdTIyZWIiLG5ydHJpOiJcdTIyZWIiLG50cmlhbmdsZXJpZ2h0OiJcdTIyZWIiLE5vdFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMFx1MDMzOCIsTm90UmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyZWQiLG5ydHJpZToiXHUyMmVkIixudHJpYW5nbGVyaWdodGVxOiJcdTIyZWQiLE5vdFNxdWFyZVN1YnNldDoiXHUyMjhmXHUwMzM4IixOb3RTcXVhcmVTdWJzZXRFcXVhbDoiXHUyMmUyIixuc3FzdWJlOiJcdTIyZTIiLE5vdFNxdWFyZVN1cGVyc2V0OiJcdTIyOTBcdTAzMzgiLE5vdFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjJlMyIsbnNxc3VwZToiXHUyMmUzIixOb3RTdWJzZXQ6Ilx1MjI4Mlx1MjBkMiIsbnN1YnNldDoiXHUyMjgyXHUyMGQyIix2bnN1YjoiXHUyMjgyXHUyMGQyIixOb3RTdWJzZXRFcXVhbDoiXHUyMjg4Iixuc3ViZToiXHUyMjg4Iixuc3Vic2V0ZXE6Ilx1MjI4OCIsTm90U3VjY2VlZHM6Ilx1MjI4MSIsbnNjOiJcdTIyODEiLG5zdWNjOiJcdTIyODEiLE5vdFN1Y2NlZWRzRXF1YWw6Ilx1MmFiMFx1MDMzOCIsbnNjZToiXHUyYWIwXHUwMzM4Iixuc3VjY2VxOiJcdTJhYjBcdTAzMzgiLE5vdFN1Y2NlZWRzU2xhbnRFcXVhbDoiXHUyMmUxIixuc2NjdWU6Ilx1MjJlMSIsTm90U3VjY2VlZHNUaWxkZToiXHUyMjdmXHUwMzM4IixOb3RTdXBlcnNldDoiXHUyMjgzXHUyMGQyIixuc3Vwc2V0OiJcdTIyODNcdTIwZDIiLHZuc3VwOiJcdTIyODNcdTIwZDIiLE5vdFN1cGVyc2V0RXF1YWw6Ilx1MjI4OSIsbnN1cGU6Ilx1MjI4OSIsbnN1cHNldGVxOiJcdTIyODkiLE5vdFRpbGRlOiJcdTIyNDEiLG5zaW06Ilx1MjI0MSIsTm90VGlsZGVFcXVhbDoiXHUyMjQ0Iixuc2ltZToiXHUyMjQ0Iixuc2ltZXE6Ilx1MjI0NCIsTm90VGlsZGVGdWxsRXF1YWw6Ilx1MjI0NyIsbmNvbmc6Ilx1MjI0NyIsTm90VGlsZGVUaWxkZToiXHUyMjQ5IixuYXA6Ilx1MjI0OSIsbmFwcHJveDoiXHUyMjQ5IixOb3RWZXJ0aWNhbEJhcjoiXHUyMjI0IixubWlkOiJcdTIyMjQiLG5zaG9ydG1pZDoiXHUyMjI0Iixuc21pZDoiXHUyMjI0IixOc2NyOiJcdWQ4MzVcdWRjYTkiLE50aWxkZToiXHhkMSIsTnU6Ilx1MDM5ZCIsT0VsaWc6Ilx1MDE1MiIsT2FjdXRlOiJceGQzIixPY2lyYzoiXHhkNCIsT2N5OiJcdTA0MWUiLE9kYmxhYzoiXHUwMTUwIixPZnI6Ilx1ZDgzNVx1ZGQxMiIsT2dyYXZlOiJceGQyIixPbWFjcjoiXHUwMTRjIixPbWVnYToiXHUwM2E5IixvaG06Ilx1MDNhOSIsT21pY3JvbjoiXHUwMzlmIixPb3BmOiJcdWQ4MzVcdWRkNDYiLE9wZW5DdXJseURvdWJsZVF1b3RlOiJcdTIwMWMiLGxkcXVvOiJcdTIwMWMiLE9wZW5DdXJseVF1b3RlOiJcdTIwMTgiLGxzcXVvOiJcdTIwMTgiLE9yOiJcdTJhNTQiLE9zY3I6Ilx1ZDgzNVx1ZGNhYSIsT3NsYXNoOiJceGQ4IixPdGlsZGU6Ilx4ZDUiLE90aW1lczoiXHUyYTM3IixPdW1sOiJceGQ2IixPdmVyQmFyOiJcdTIwM2UiLG9saW5lOiJcdTIwM2UiLE92ZXJCcmFjZToiXHUyM2RlIixPdmVyQnJhY2tldDoiXHUyM2I0Iix0YnJrOiJcdTIzYjQiLE92ZXJQYXJlbnRoZXNpczoiXHUyM2RjIixQYXJ0aWFsRDoiXHUyMjAyIixwYXJ0OiJcdTIyMDIiLFBjeToiXHUwNDFmIixQZnI6Ilx1ZDgzNVx1ZGQxMyIsUGhpOiJcdTAzYTYiLFBpOiJcdTAzYTAiLFBsdXNNaW51czoiXHhiMSIscGx1c21uOiJceGIxIixwbToiXHhiMSIsUG9wZjoiXHUyMTE5IixwcmltZXM6Ilx1MjExOSIsUHI6Ilx1MmFiYiIsUHJlY2VkZXM6Ilx1MjI3YSIscHI6Ilx1MjI3YSIscHJlYzoiXHUyMjdhIixQcmVjZWRlc0VxdWFsOiJcdTJhYWYiLHByZToiXHUyYWFmIixwcmVjZXE6Ilx1MmFhZiIsUHJlY2VkZXNTbGFudEVxdWFsOiJcdTIyN2MiLHByY3VlOiJcdTIyN2MiLHByZWNjdXJseWVxOiJcdTIyN2MiLFByZWNlZGVzVGlsZGU6Ilx1MjI3ZSIscHJlY3NpbToiXHUyMjdlIixwcnNpbToiXHUyMjdlIixQcmltZToiXHUyMDMzIixQcm9kdWN0OiJcdTIyMGYiLHByb2Q6Ilx1MjIwZiIsUHJvcG9ydGlvbmFsOiJcdTIyMWQiLHByb3A6Ilx1MjIxZCIscHJvcHRvOiJcdTIyMWQiLHZhcnByb3B0bzoiXHUyMjFkIix2cHJvcDoiXHUyMjFkIixQc2NyOiJcdWQ4MzVcdWRjYWIiLFBzaToiXHUwM2E4IixRVU9UOiciJyxxdW90OiciJyxRZnI6Ilx1ZDgzNVx1ZGQxNCIsUW9wZjoiXHUyMTFhIixyYXRpb25hbHM6Ilx1MjExYSIsUXNjcjoiXHVkODM1XHVkY2FjIixSQmFycjoiXHUyOTEwIixkcmJrYXJvdzoiXHUyOTEwIixSRUc6Ilx4YWUiLGNpcmNsZWRSOiJceGFlIixyZWc6Ilx4YWUiLFJhY3V0ZToiXHUwMTU0IixSYW5nOiJcdTI3ZWIiLFJhcnI6Ilx1MjFhMCIsdHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFhMCIsUmFycnRsOiJcdTI5MTYiLFJjYXJvbjoiXHUwMTU4IixSY2VkaWw6Ilx1MDE1NiIsUmN5OiJcdTA0MjAiLFJlOiJcdTIxMWMiLFJmcjoiXHUyMTFjIixyZWFsOiJcdTIxMWMiLHJlYWxwYXJ0OiJcdTIxMWMiLFJldmVyc2VFbGVtZW50OiJcdTIyMGIiLFN1Y2hUaGF0OiJcdTIyMGIiLG5pOiJcdTIyMGIiLG5pdjoiXHUyMjBiIixSZXZlcnNlRXF1aWxpYnJpdW06Ilx1MjFjYiIsbGVmdHJpZ2h0aGFycG9vbnM6Ilx1MjFjYiIsbHJoYXI6Ilx1MjFjYiIsUmV2ZXJzZVVwRXF1aWxpYnJpdW06Ilx1Mjk2ZiIsZHVoYXI6Ilx1Mjk2ZiIsUmhvOiJcdTAzYTEiLFJpZ2h0QW5nbGVCcmFja2V0OiJcdTI3ZTkiLHJhbmc6Ilx1MjdlOSIscmFuZ2xlOiJcdTI3ZTkiLFJpZ2h0QXJyb3c6Ilx1MjE5MiIsU2hvcnRSaWdodEFycm93OiJcdTIxOTIiLHJhcnI6Ilx1MjE5MiIscmlnaHRhcnJvdzoiXHUyMTkyIixzcmFycjoiXHUyMTkyIixSaWdodEFycm93QmFyOiJcdTIxZTUiLHJhcnJiOiJcdTIxZTUiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6Ilx1MjFjNCIscmlnaHRsZWZ0YXJyb3dzOiJcdTIxYzQiLHJsYXJyOiJcdTIxYzQiLFJpZ2h0Q2VpbGluZzoiXHUyMzA5IixyY2VpbDoiXHUyMzA5IixSaWdodERvdWJsZUJyYWNrZXQ6Ilx1MjdlNyIscm9icms6Ilx1MjdlNyIsUmlnaHREb3duVGVlVmVjdG9yOiJcdTI5NWQiLFJpZ2h0RG93blZlY3RvcjoiXHUyMWMyIixkaGFycjoiXHUyMWMyIixkb3duaGFycG9vbnJpZ2h0OiJcdTIxYzIiLFJpZ2h0RG93blZlY3RvckJhcjoiXHUyOTU1IixSaWdodEZsb29yOiJcdTIzMGIiLHJmbG9vcjoiXHUyMzBiIixSaWdodFRlZToiXHUyMmEyIix2ZGFzaDoiXHUyMmEyIixSaWdodFRlZUFycm93OiJcdTIxYTYiLG1hcDoiXHUyMWE2IixtYXBzdG86Ilx1MjFhNiIsUmlnaHRUZWVWZWN0b3I6Ilx1Mjk1YiIsUmlnaHRUcmlhbmdsZToiXHUyMmIzIix2YXJ0cmlhbmdsZXJpZ2h0OiJcdTIyYjMiLHZydHJpOiJcdTIyYjMiLFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMCIsUmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyYjUiLHJ0cmllOiJcdTIyYjUiLHRyaWFuZ2xlcmlnaHRlcToiXHUyMmI1IixSaWdodFVwRG93blZlY3RvcjoiXHUyOTRmIixSaWdodFVwVGVlVmVjdG9yOiJcdTI5NWMiLFJpZ2h0VXBWZWN0b3I6Ilx1MjFiZSIsdWhhcnI6Ilx1MjFiZSIsdXBoYXJwb29ucmlnaHQ6Ilx1MjFiZSIsUmlnaHRVcFZlY3RvckJhcjoiXHUyOTU0IixSaWdodFZlY3RvcjoiXHUyMWMwIixyaGFydToiXHUyMWMwIixyaWdodGhhcnBvb251cDoiXHUyMWMwIixSaWdodFZlY3RvckJhcjoiXHUyOTUzIixSb3BmOiJcdTIxMWQiLHJlYWxzOiJcdTIxMWQiLFJvdW5kSW1wbGllczoiXHUyOTcwIixScmlnaHRhcnJvdzoiXHUyMWRiIixyQWFycjoiXHUyMWRiIixSc2NyOiJcdTIxMWIiLHJlYWxpbmU6Ilx1MjExYiIsUnNoOiJcdTIxYjEiLHJzaDoiXHUyMWIxIixSdWxlRGVsYXllZDoiXHUyOWY0IixTSENIY3k6Ilx1MDQyOSIsU0hjeToiXHUwNDI4IixTT0ZUY3k6Ilx1MDQyYyIsU2FjdXRlOiJcdTAxNWEiLFNjOiJcdTJhYmMiLFNjYXJvbjoiXHUwMTYwIixTY2VkaWw6Ilx1MDE1ZSIsU2NpcmM6Ilx1MDE1YyIsU2N5OiJcdTA0MjEiLFNmcjoiXHVkODM1XHVkZDE2IixTaG9ydFVwQXJyb3c6Ilx1MjE5MSIsVXBBcnJvdzoiXHUyMTkxIix1YXJyOiJcdTIxOTEiLHVwYXJyb3c6Ilx1MjE5MSIsU2lnbWE6Ilx1MDNhMyIsU21hbGxDaXJjbGU6Ilx1MjIxOCIsY29tcGZuOiJcdTIyMTgiLFNvcGY6Ilx1ZDgzNVx1ZGQ0YSIsU3FydDoiXHUyMjFhIixyYWRpYzoiXHUyMjFhIixTcXVhcmU6Ilx1MjVhMSIsc3F1OiJcdTI1YTEiLHNxdWFyZToiXHUyNWExIixTcXVhcmVJbnRlcnNlY3Rpb246Ilx1MjI5MyIsc3FjYXA6Ilx1MjI5MyIsU3F1YXJlU3Vic2V0OiJcdTIyOGYiLHNxc3ViOiJcdTIyOGYiLHNxc3Vic2V0OiJcdTIyOGYiLFNxdWFyZVN1YnNldEVxdWFsOiJcdTIyOTEiLHNxc3ViZToiXHUyMjkxIixzcXN1YnNldGVxOiJcdTIyOTEiLFNxdWFyZVN1cGVyc2V0OiJcdTIyOTAiLHNxc3VwOiJcdTIyOTAiLHNxc3Vwc2V0OiJcdTIyOTAiLFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjI5MiIsc3FzdXBlOiJcdTIyOTIiLHNxc3Vwc2V0ZXE6Ilx1MjI5MiIsU3F1YXJlVW5pb246Ilx1MjI5NCIsc3FjdXA6Ilx1MjI5NCIsU3NjcjoiXHVkODM1XHVkY2FlIixTdGFyOiJcdTIyYzYiLHNzdGFyZjoiXHUyMmM2IixTdWI6Ilx1MjJkMCIsU3Vic2V0OiJcdTIyZDAiLFN1YnNldEVxdWFsOiJcdTIyODYiLHN1YmU6Ilx1MjI4NiIsc3Vic2V0ZXE6Ilx1MjI4NiIsU3VjY2VlZHM6Ilx1MjI3YiIsc2M6Ilx1MjI3YiIsc3VjYzoiXHUyMjdiIixTdWNjZWVkc0VxdWFsOiJcdTJhYjAiLHNjZToiXHUyYWIwIixzdWNjZXE6Ilx1MmFiMCIsU3VjY2VlZHNTbGFudEVxdWFsOiJcdTIyN2QiLHNjY3VlOiJcdTIyN2QiLHN1Y2NjdXJseWVxOiJcdTIyN2QiLFN1Y2NlZWRzVGlsZGU6Ilx1MjI3ZiIsc2NzaW06Ilx1MjI3ZiIsc3VjY3NpbToiXHUyMjdmIixTdW06Ilx1MjIxMSIsc3VtOiJcdTIyMTEiLFN1cDoiXHUyMmQxIixTdXBzZXQ6Ilx1MjJkMSIsU3VwZXJzZXQ6Ilx1MjI4MyIsc3VwOiJcdTIyODMiLHN1cHNldDoiXHUyMjgzIixTdXBlcnNldEVxdWFsOiJcdTIyODciLHN1cGU6Ilx1MjI4NyIsc3Vwc2V0ZXE6Ilx1MjI4NyIsVEhPUk46Ilx4ZGUiLFRSQURFOiJcdTIxMjIiLHRyYWRlOiJcdTIxMjIiLFRTSGN5OiJcdTA0MGIiLFRTY3k6Ilx1MDQyNiIsVGFiOiJcdCIsVGF1OiJcdTAzYTQiLFRjYXJvbjoiXHUwMTY0IixUY2VkaWw6Ilx1MDE2MiIsVGN5OiJcdTA0MjIiLFRmcjoiXHVkODM1XHVkZDE3IixUaGVyZWZvcmU6Ilx1MjIzNCIsdGhlcmU0OiJcdTIyMzQiLHRoZXJlZm9yZToiXHUyMjM0IixUaGV0YToiXHUwMzk4IixUaGlja1NwYWNlOiJcdTIwNWZcdTIwMGEiLFRoaW5TcGFjZToiXHUyMDA5Iix0aGluc3A6Ilx1MjAwOSIsVGlsZGU6Ilx1MjIzYyIsc2ltOiJcdTIyM2MiLHRoaWNrc2ltOiJcdTIyM2MiLHRoa3NpbToiXHUyMjNjIixUaWxkZUVxdWFsOiJcdTIyNDMiLHNpbWU6Ilx1MjI0MyIsc2ltZXE6Ilx1MjI0MyIsVGlsZGVGdWxsRXF1YWw6Ilx1MjI0NSIsY29uZzoiXHUyMjQ1IixUaWxkZVRpbGRlOiJcdTIyNDgiLGFwOiJcdTIyNDgiLGFwcHJveDoiXHUyMjQ4Iixhc3ltcDoiXHUyMjQ4Iix0aGlja2FwcHJveDoiXHUyMjQ4Iix0aGthcDoiXHUyMjQ4IixUb3BmOiJcdWQ4MzVcdWRkNGIiLFRyaXBsZURvdDoiXHUyMGRiIix0ZG90OiJcdTIwZGIiLFRzY3I6Ilx1ZDgzNVx1ZGNhZiIsVHN0cm9rOiJcdTAxNjYiLFVhY3V0ZToiXHhkYSIsVWFycjoiXHUyMTlmIixVYXJyb2NpcjoiXHUyOTQ5IixVYnJjeToiXHUwNDBlIixVYnJldmU6Ilx1MDE2YyIsVWNpcmM6Ilx4ZGIiLFVjeToiXHUwNDIzIixVZGJsYWM6Ilx1MDE3MCIsVWZyOiJcdWQ4MzVcdWRkMTgiLFVncmF2ZToiXHhkOSIsVW1hY3I6Ilx1MDE2YSIsVW5kZXJCYXI6Il8iLGxvd2JhcjoiXyIsVW5kZXJCcmFjZToiXHUyM2RmIixVbmRlckJyYWNrZXQ6Ilx1MjNiNSIsYmJyazoiXHUyM2I1IixVbmRlclBhcmVudGhlc2lzOiJcdTIzZGQiLFVuaW9uOiJcdTIyYzMiLGJpZ2N1cDoiXHUyMmMzIix4Y3VwOiJcdTIyYzMiLFVuaW9uUGx1czoiXHUyMjhlIix1cGx1czoiXHUyMjhlIixVb2dvbjoiXHUwMTcyIixVb3BmOiJcdWQ4MzVcdWRkNGMiLFVwQXJyb3dCYXI6Ilx1MjkxMiIsVXBBcnJvd0Rvd25BcnJvdzoiXHUyMWM1Iix1ZGFycjoiXHUyMWM1IixVcERvd25BcnJvdzoiXHUyMTk1Iix1cGRvd25hcnJvdzoiXHUyMTk1Iix2YXJyOiJcdTIxOTUiLFVwRXF1aWxpYnJpdW06Ilx1Mjk2ZSIsdWRoYXI6Ilx1Mjk2ZSIsVXBUZWU6Ilx1MjJhNSIsYm90OiJcdTIyYTUiLGJvdHRvbToiXHUyMmE1IixwZXJwOiJcdTIyYTUiLFVwVGVlQXJyb3c6Ilx1MjFhNSIsbWFwc3RvdXA6Ilx1MjFhNSIsVXBwZXJMZWZ0QXJyb3c6Ilx1MjE5NiIsbndhcnI6Ilx1MjE5NiIsbndhcnJvdzoiXHUyMTk2IixVcHBlclJpZ2h0QXJyb3c6Ilx1MjE5NyIsbmVhcnI6Ilx1MjE5NyIsbmVhcnJvdzoiXHUyMTk3IixVcHNpOiJcdTAzZDIiLHVwc2loOiJcdTAzZDIiLFVwc2lsb246Ilx1MDNhNSIsVXJpbmc6Ilx1MDE2ZSIsVXNjcjoiXHVkODM1XHVkY2IwIixVdGlsZGU6Ilx1MDE2OCIsVXVtbDoiXHhkYyIsVkRhc2g6Ilx1MjJhYiIsVmJhcjoiXHUyYWViIixWY3k6Ilx1MDQxMiIsVmRhc2g6Ilx1MjJhOSIsVmRhc2hsOiJcdTJhZTYiLFZlZToiXHUyMmMxIixiaWd2ZWU6Ilx1MjJjMSIseHZlZToiXHUyMmMxIixWZXJiYXI6Ilx1MjAxNiIsVmVydDoiXHUyMDE2IixWZXJ0aWNhbEJhcjoiXHUyMjIzIixtaWQ6Ilx1MjIyMyIsc2hvcnRtaWQ6Ilx1MjIyMyIsc21pZDoiXHUyMjIzIixWZXJ0aWNhbExpbmU6InwiLHZlcmJhcjoifCIsdmVydDoifCIsVmVydGljYWxTZXBhcmF0b3I6Ilx1Mjc1OCIsVmVydGljYWxUaWxkZToiXHUyMjQwIix3cjoiXHUyMjQwIix3cmVhdGg6Ilx1MjI0MCIsVmVyeVRoaW5TcGFjZToiXHUyMDBhIixoYWlyc3A6Ilx1MjAwYSIsVmZyOiJcdWQ4MzVcdWRkMTkiLFZvcGY6Ilx1ZDgzNVx1ZGQ0ZCIsVnNjcjoiXHVkODM1XHVkY2IxIixWdmRhc2g6Ilx1MjJhYSIsV2NpcmM6Ilx1MDE3NCIsV2VkZ2U6Ilx1MjJjMCIsYmlnd2VkZ2U6Ilx1MjJjMCIseHdlZGdlOiJcdTIyYzAiLFdmcjoiXHVkODM1XHVkZDFhIixXb3BmOiJcdWQ4MzVcdWRkNGUiLFdzY3I6Ilx1ZDgzNVx1ZGNiMiIsWGZyOiJcdWQ4MzVcdWRkMWIiLFhpOiJcdTAzOWUiLFhvcGY6Ilx1ZDgzNVx1ZGQ0ZiIsWHNjcjoiXHVkODM1XHVkY2IzIixZQWN5OiJcdTA0MmYiLFlJY3k6Ilx1MDQwNyIsWVVjeToiXHUwNDJlIixZYWN1dGU6Ilx4ZGQiLFljaXJjOiJcdTAxNzYiLFljeToiXHUwNDJiIixZZnI6Ilx1ZDgzNVx1ZGQxYyIsWW9wZjoiXHVkODM1XHVkZDUwIixZc2NyOiJcdWQ4MzVcdWRjYjQiLFl1bWw6Ilx1MDE3OCIsWkhjeToiXHUwNDE2IixaYWN1dGU6Ilx1MDE3OSIsWmNhcm9uOiJcdTAxN2QiLFpjeToiXHUwNDE3IixaZG90OiJcdTAxN2IiLFpldGE6Ilx1MDM5NiIsWmZyOiJcdTIxMjgiLHplZXRyZjoiXHUyMTI4Iixab3BmOiJcdTIxMjQiLGludGVnZXJzOiJcdTIxMjQiLFpzY3I6Ilx1ZDgzNVx1ZGNiNSIsYWFjdXRlOiJceGUxIixhYnJldmU6Ilx1MDEwMyIsYWM6Ilx1MjIzZSIsbXN0cG9zOiJcdTIyM2UiLGFjRToiXHUyMjNlXHUwMzMzIixhY2Q6Ilx1MjIzZiIsYWNpcmM6Ilx4ZTIiLGFjeToiXHUwNDMwIixhZWxpZzoiXHhlNiIsYWZyOiJcdWQ4MzVcdWRkMWUiLGFncmF2ZToiXHhlMCIsYWxlZnN5bToiXHUyMTM1IixhbGVwaDoiXHUyMTM1IixhbHBoYToiXHUwM2IxIixhbWFjcjoiXHUwMTAxIixhbWFsZzoiXHUyYTNmIixhbmQ6Ilx1MjIyNyIsd2VkZ2U6Ilx1MjIyNyIsYW5kYW5kOiJcdTJhNTUiLGFuZGQ6Ilx1MmE1YyIsYW5kc2xvcGU6Ilx1MmE1OCIsYW5kdjoiXHUyYTVhIixhbmc6Ilx1MjIyMCIsYW5nbGU6Ilx1MjIyMCIsYW5nZToiXHUyOWE0Iixhbmdtc2Q6Ilx1MjIyMSIsbWVhc3VyZWRhbmdsZToiXHUyMjIxIixhbmdtc2RhYToiXHUyOWE4Iixhbmdtc2RhYjoiXHUyOWE5Iixhbmdtc2RhYzoiXHUyOWFhIixhbmdtc2RhZDoiXHUyOWFiIixhbmdtc2RhZToiXHUyOWFjIixhbmdtc2RhZjoiXHUyOWFkIixhbmdtc2RhZzoiXHUyOWFlIixhbmdtc2RhaDoiXHUyOWFmIixhbmdydDoiXHUyMjFmIixhbmdydHZiOiJcdTIyYmUiLGFuZ3J0dmJkOiJcdTI5OWQiLGFuZ3NwaDoiXHUyMjIyIixhbmd6YXJyOiJcdTIzN2MiLGFvZ29uOiJcdTAxMDUiLGFvcGY6Ilx1ZDgzNVx1ZGQ1MiIsYXBFOiJcdTJhNzAiLGFwYWNpcjoiXHUyYTZmIixhcGU6Ilx1MjI0YSIsYXBwcm94ZXE6Ilx1MjI0YSIsYXBpZDoiXHUyMjRiIixhcG9zOiInIixhcmluZzoiXHhlNSIsYXNjcjoiXHVkODM1XHVkY2I2Iixhc3Q6IioiLG1pZGFzdDoiKiIsYXRpbGRlOiJceGUzIixhdW1sOiJceGU0Iixhd2ludDoiXHUyYTExIixiTm90OiJcdTJhZWQiLGJhY2tjb25nOiJcdTIyNGMiLGJjb25nOiJcdTIyNGMiLGJhY2tlcHNpbG9uOiJcdTAzZjYiLGJlcHNpOiJcdTAzZjYiLGJhY2twcmltZToiXHUyMDM1IixicHJpbWU6Ilx1MjAzNSIsYmFja3NpbToiXHUyMjNkIixic2ltOiJcdTIyM2QiLGJhY2tzaW1lcToiXHUyMmNkIixic2ltZToiXHUyMmNkIixiYXJ2ZWU6Ilx1MjJiZCIsYmFyd2VkOiJcdTIzMDUiLGJhcndlZGdlOiJcdTIzMDUiLGJicmt0YnJrOiJcdTIzYjYiLGJjeToiXHUwNDMxIixiZHF1bzoiXHUyMDFlIixsZHF1b3I6Ilx1MjAxZSIsYmVtcHR5djoiXHUyOWIwIixiZXRhOiJcdTAzYjIiLGJldGg6Ilx1MjEzNiIsYmV0d2VlbjoiXHUyMjZjIix0d2l4dDoiXHUyMjZjIixiZnI6Ilx1ZDgzNVx1ZGQxZiIsYmlnY2lyYzoiXHUyNWVmIix4Y2lyYzoiXHUyNWVmIixiaWdvZG90OiJcdTJhMDAiLHhvZG90OiJcdTJhMDAiLGJpZ29wbHVzOiJcdTJhMDEiLHhvcGx1czoiXHUyYTAxIixiaWdvdGltZXM6Ilx1MmEwMiIseG90aW1lOiJcdTJhMDIiLGJpZ3NxY3VwOiJcdTJhMDYiLHhzcWN1cDoiXHUyYTA2IixiaWdzdGFyOiJcdTI2MDUiLHN0YXJmOiJcdTI2MDUiLGJpZ3RyaWFuZ2xlZG93bjoiXHUyNWJkIix4ZHRyaToiXHUyNWJkIixiaWd0cmlhbmdsZXVwOiJcdTI1YjMiLHh1dHJpOiJcdTI1YjMiLGJpZ3VwbHVzOiJcdTJhMDQiLHh1cGx1czoiXHUyYTA0Iixia2Fyb3c6Ilx1MjkwZCIscmJhcnI6Ilx1MjkwZCIsYmxhY2tsb3plbmdlOiJcdTI5ZWIiLGxvemY6Ilx1MjllYiIsYmxhY2t0cmlhbmdsZToiXHUyNWI0Iix1dHJpZjoiXHUyNWI0IixibGFja3RyaWFuZ2xlZG93bjoiXHUyNWJlIixkdHJpZjoiXHUyNWJlIixibGFja3RyaWFuZ2xlbGVmdDoiXHUyNWMyIixsdHJpZjoiXHUyNWMyIixibGFja3RyaWFuZ2xlcmlnaHQ6Ilx1MjViOCIscnRyaWY6Ilx1MjViOCIsYmxhbms6Ilx1MjQyMyIsYmxrMTI6Ilx1MjU5MiIsYmxrMTQ6Ilx1MjU5MSIsYmxrMzQ6Ilx1MjU5MyIsYmxvY2s6Ilx1MjU4OCIsYm5lOiI9XHUyMGU1IixibmVxdWl2OiJcdTIyNjFcdTIwZTUiLGJub3Q6Ilx1MjMxMCIsYm9wZjoiXHVkODM1XHVkZDUzIixib3d0aWU6Ilx1MjJjOCIsYm94REw6Ilx1MjU1NyIsYm94RFI6Ilx1MjU1NCIsYm94RGw6Ilx1MjU1NiIsYm94RHI6Ilx1MjU1MyIsYm94SDoiXHUyNTUwIixib3hIRDoiXHUyNTY2Iixib3hIVToiXHUyNTY5Iixib3hIZDoiXHUyNTY0Iixib3hIdToiXHUyNTY3Iixib3hVTDoiXHUyNTVkIixib3hVUjoiXHUyNTVhIixib3hVbDoiXHUyNTVjIixib3hVcjoiXHUyNTU5Iixib3hWOiJcdTI1NTEiLGJveFZIOiJcdTI1NmMiLGJveFZMOiJcdTI1NjMiLGJveFZSOiJcdTI1NjAiLGJveFZoOiJcdTI1NmIiLGJveFZsOiJcdTI1NjIiLGJveFZyOiJcdTI1NWYiLGJveGJveDoiXHUyOWM5Iixib3hkTDoiXHUyNTU1Iixib3hkUjoiXHUyNTUyIixib3hkbDoiXHUyNTEwIixib3hkcjoiXHUyNTBjIixib3hoRDoiXHUyNTY1Iixib3hoVToiXHUyNTY4Iixib3hoZDoiXHUyNTJjIixib3hodToiXHUyNTM0Iixib3htaW51czoiXHUyMjlmIixtaW51c2I6Ilx1MjI5ZiIsYm94cGx1czoiXHUyMjllIixwbHVzYjoiXHUyMjllIixib3h0aW1lczoiXHUyMmEwIix0aW1lc2I6Ilx1MjJhMCIsYm94dUw6Ilx1MjU1YiIsYm94dVI6Ilx1MjU1OCIsYm94dWw6Ilx1MjUxOCIsYm94dXI6Ilx1MjUxNCIsYm94djoiXHUyNTAyIixib3h2SDoiXHUyNTZhIixib3h2TDoiXHUyNTYxIixib3h2UjoiXHUyNTVlIixib3h2aDoiXHUyNTNjIixib3h2bDoiXHUyNTI0Iixib3h2cjoiXHUyNTFjIixicnZiYXI6Ilx4YTYiLGJzY3I6Ilx1ZDgzNVx1ZGNiNyIsYnNlbWk6Ilx1MjA0ZiIsYnNvbDoiXFwiLGJzb2xiOiJcdTI5YzUiLGJzb2xoc3ViOiJcdTI3YzgiLGJ1bGw6Ilx1MjAyMiIsYnVsbGV0OiJcdTIwMjIiLGJ1bXBFOiJcdTJhYWUiLGNhY3V0ZToiXHUwMTA3IixjYXA6Ilx1MjIyOSIsY2FwYW5kOiJcdTJhNDQiLGNhcGJyY3VwOiJcdTJhNDkiLGNhcGNhcDoiXHUyYTRiIixjYXBjdXA6Ilx1MmE0NyIsY2FwZG90OiJcdTJhNDAiLGNhcHM6Ilx1MjIyOVx1ZmUwMCIsY2FyZXQ6Ilx1MjA0MSIsY2NhcHM6Ilx1MmE0ZCIsY2Nhcm9uOiJcdTAxMGQiLGNjZWRpbDoiXHhlNyIsY2NpcmM6Ilx1MDEwOSIsY2N1cHM6Ilx1MmE0YyIsY2N1cHNzbToiXHUyYTUwIixjZG90OiJcdTAxMGIiLGNlbXB0eXY6Ilx1MjliMiIsY2VudDoiXHhhMiIsY2ZyOiJcdWQ4MzVcdWRkMjAiLGNoY3k6Ilx1MDQ0NyIsY2hlY2s6Ilx1MjcxMyIsY2hlY2ttYXJrOiJcdTI3MTMiLGNoaToiXHUwM2M3IixjaXI6Ilx1MjVjYiIsY2lyRToiXHUyOWMzIixjaXJjOiJcdTAyYzYiLGNpcmNlcToiXHUyMjU3IixjaXJlOiJcdTIyNTciLGNpcmNsZWFycm93bGVmdDoiXHUyMWJhIixvbGFycjoiXHUyMWJhIixjaXJjbGVhcnJvd3JpZ2h0OiJcdTIxYmIiLG9yYXJyOiJcdTIxYmIiLGNpcmNsZWRTOiJcdTI0YzgiLG9TOiJcdTI0YzgiLGNpcmNsZWRhc3Q6Ilx1MjI5YiIsb2FzdDoiXHUyMjliIixjaXJjbGVkY2lyYzoiXHUyMjlhIixvY2lyOiJcdTIyOWEiLGNpcmNsZWRkYXNoOiJcdTIyOWQiLG9kYXNoOiJcdTIyOWQiLGNpcmZuaW50OiJcdTJhMTAiLGNpcm1pZDoiXHUyYWVmIixjaXJzY2lyOiJcdTI5YzIiLGNsdWJzOiJcdTI2NjMiLGNsdWJzdWl0OiJcdTI2NjMiLGNvbG9uOiI6Iixjb21tYToiLCIsY29tbWF0OiJAIixjb21wOiJcdTIyMDEiLGNvbXBsZW1lbnQ6Ilx1MjIwMSIsY29uZ2RvdDoiXHUyYTZkIixjb3BmOiJcdWQ4MzVcdWRkNTQiLGNvcHlzcjoiXHUyMTE3IixjcmFycjoiXHUyMWI1Iixjcm9zczoiXHUyNzE3Iixjc2NyOiJcdWQ4MzVcdWRjYjgiLGNzdWI6Ilx1MmFjZiIsY3N1YmU6Ilx1MmFkMSIsY3N1cDoiXHUyYWQwIixjc3VwZToiXHUyYWQyIixjdGRvdDoiXHUyMmVmIixjdWRhcnJsOiJcdTI5MzgiLGN1ZGFycnI6Ilx1MjkzNSIsY3VlcHI6Ilx1MjJkZSIsY3VybHllcXByZWM6Ilx1MjJkZSIsY3Vlc2M6Ilx1MjJkZiIsY3VybHllcXN1Y2M6Ilx1MjJkZiIsY3VsYXJyOiJcdTIxYjYiLGN1cnZlYXJyb3dsZWZ0OiJcdTIxYjYiLGN1bGFycnA6Ilx1MjkzZCIsY3VwOiJcdTIyMmEiLGN1cGJyY2FwOiJcdTJhNDgiLGN1cGNhcDoiXHUyYTQ2IixjdXBjdXA6Ilx1MmE0YSIsY3VwZG90OiJcdTIyOGQiLGN1cG9yOiJcdTJhNDUiLGN1cHM6Ilx1MjIyYVx1ZmUwMCIsY3VyYXJyOiJcdTIxYjciLGN1cnZlYXJyb3dyaWdodDoiXHUyMWI3IixjdXJhcnJtOiJcdTI5M2MiLGN1cmx5dmVlOiJcdTIyY2UiLGN1dmVlOiJcdTIyY2UiLGN1cmx5d2VkZ2U6Ilx1MjJjZiIsY3V3ZWQ6Ilx1MjJjZiIsY3VycmVuOiJceGE0Iixjd2ludDoiXHUyMjMxIixjeWxjdHk6Ilx1MjMyZCIsZEhhcjoiXHUyOTY1IixkYWdnZXI6Ilx1MjAyMCIsZGFsZXRoOiJcdTIxMzgiLGRhc2g6Ilx1MjAxMCIsaHlwaGVuOiJcdTIwMTAiLGRia2Fyb3c6Ilx1MjkwZiIsckJhcnI6Ilx1MjkwZiIsZGNhcm9uOiJcdTAxMGYiLGRjeToiXHUwNDM0IixkZGFycjoiXHUyMWNhIixkb3duZG93bmFycm93czoiXHUyMWNhIixkZG90c2VxOiJcdTJhNzciLGVERG90OiJcdTJhNzciLGRlZzoiXHhiMCIsZGVsdGE6Ilx1MDNiNCIsZGVtcHR5djoiXHUyOWIxIixkZmlzaHQ6Ilx1Mjk3ZiIsZGZyOiJcdWQ4MzVcdWRkMjEiLGRpYW1vbmRzdWl0OiJcdTI2NjYiLGRpYW1zOiJcdTI2NjYiLGRpZ2FtbWE6Ilx1MDNkZCIsZ2FtbWFkOiJcdTAzZGQiLGRpc2luOiJcdTIyZjIiLGRpdjoiXHhmNyIsZGl2aWRlOiJceGY3IixkaXZpZGVvbnRpbWVzOiJcdTIyYzciLGRpdm9ueDoiXHUyMmM3IixkamN5OiJcdTA0NTIiLGRsY29ybjoiXHUyMzFlIixsbGNvcm5lcjoiXHUyMzFlIixkbGNyb3A6Ilx1MjMwZCIsZG9sbGFyOiIkIixkb3BmOiJcdWQ4MzVcdWRkNTUiLGRvdGVxZG90OiJcdTIyNTEiLGVEb3Q6Ilx1MjI1MSIsZG90bWludXM6Ilx1MjIzOCIsbWludXNkOiJcdTIyMzgiLGRvdHBsdXM6Ilx1MjIxNCIscGx1c2RvOiJcdTIyMTQiLGRvdHNxdWFyZToiXHUyMmExIixzZG90YjoiXHUyMmExIixkcmNvcm46Ilx1MjMxZiIsbHJjb3JuZXI6Ilx1MjMxZiIsZHJjcm9wOiJcdTIzMGMiLGRzY3I6Ilx1ZDgzNVx1ZGNiOSIsZHNjeToiXHUwNDU1Iixkc29sOiJcdTI5ZjYiLGRzdHJvazoiXHUwMTExIixkdGRvdDoiXHUyMmYxIixkdHJpOiJcdTI1YmYiLHRyaWFuZ2xlZG93bjoiXHUyNWJmIixkd2FuZ2xlOiJcdTI5YTYiLGR6Y3k6Ilx1MDQ1ZiIsZHppZ3JhcnI6Ilx1MjdmZiIsZWFjdXRlOiJceGU5IixlYXN0ZXI6Ilx1MmE2ZSIsZWNhcm9uOiJcdTAxMWIiLGVjaXI6Ilx1MjI1NiIsZXFjaXJjOiJcdTIyNTYiLGVjaXJjOiJceGVhIixlY29sb246Ilx1MjI1NSIsZXFjb2xvbjoiXHUyMjU1IixlY3k6Ilx1MDQ0ZCIsZWRvdDoiXHUwMTE3IixlZkRvdDoiXHUyMjUyIixmYWxsaW5nZG90c2VxOiJcdTIyNTIiLGVmcjoiXHVkODM1XHVkZDIyIixlZzoiXHUyYTlhIixlZ3JhdmU6Ilx4ZTgiLGVnczoiXHUyYTk2IixlcXNsYW50Z3RyOiJcdTJhOTYiLGVnc2RvdDoiXHUyYTk4IixlbDoiXHUyYTk5IixlbGludGVyczoiXHUyM2U3IixlbGw6Ilx1MjExMyIsZWxzOiJcdTJhOTUiLGVxc2xhbnRsZXNzOiJcdTJhOTUiLGVsc2RvdDoiXHUyYTk3IixlbWFjcjoiXHUwMTEzIixlbXB0eToiXHUyMjA1IixlbXB0eXNldDoiXHUyMjA1IixlbXB0eXY6Ilx1MjIwNSIsdmFybm90aGluZzoiXHUyMjA1IixlbXNwMTM6Ilx1MjAwNCIsZW1zcDE0OiJcdTIwMDUiLGVtc3A6Ilx1MjAwMyIsZW5nOiJcdTAxNGIiLGVuc3A6Ilx1MjAwMiIsZW9nb246Ilx1MDExOSIsZW9wZjoiXHVkODM1XHVkZDU2IixlcGFyOiJcdTIyZDUiLGVwYXJzbDoiXHUyOWUzIixlcGx1czoiXHUyYTcxIixlcHNpOiJcdTAzYjUiLGVwc2lsb246Ilx1MDNiNSIsZXBzaXY6Ilx1MDNmNSIsc3RyYWlnaHRlcHNpbG9uOiJcdTAzZjUiLHZhcmVwc2lsb246Ilx1MDNmNSIsZXF1YWxzOiI9IixlcXVlc3Q6Ilx1MjI1ZiIscXVlc3RlcToiXHUyMjVmIixlcXVpdkREOiJcdTJhNzgiLGVxdnBhcnNsOiJcdTI5ZTUiLGVyRG90OiJcdTIyNTMiLHJpc2luZ2RvdHNlcToiXHUyMjUzIixlcmFycjoiXHUyOTcxIixlc2NyOiJcdTIxMmYiLGV0YToiXHUwM2I3IixldGg6Ilx4ZjAiLGV1bWw6Ilx4ZWIiLGV1cm86Ilx1MjBhYyIsZXhjbDoiISIsZmN5OiJcdTA0NDQiLGZlbWFsZToiXHUyNjQwIixmZmlsaWc6Ilx1ZmIwMyIsZmZsaWc6Ilx1ZmIwMCIsZmZsbGlnOiJcdWZiMDQiLGZmcjoiXHVkODM1XHVkZDIzIixmaWxpZzoiXHVmYjAxIixmamxpZzoiZmoiLGZsYXQ6Ilx1MjY2ZCIsZmxsaWc6Ilx1ZmIwMiIsZmx0bnM6Ilx1MjViMSIsZm5vZjoiXHUwMTkyIixmb3BmOiJcdWQ4MzVcdWRkNTciLGZvcms6Ilx1MjJkNCIscGl0Y2hmb3JrOiJcdTIyZDQiLGZvcmt2OiJcdTJhZDkiLGZwYXJ0aW50OiJcdTJhMGQiLGZyYWMxMjoiXHhiZCIsaGFsZjoiXHhiZCIsZnJhYzEzOiJcdTIxNTMiLGZyYWMxNDoiXHhiYyIsZnJhYzE1OiJcdTIxNTUiLGZyYWMxNjoiXHUyMTU5IixmcmFjMTg6Ilx1MjE1YiIsZnJhYzIzOiJcdTIxNTQiLGZyYWMyNToiXHUyMTU2IixmcmFjMzQ6Ilx4YmUiLGZyYWMzNToiXHUyMTU3IixmcmFjMzg6Ilx1MjE1YyIsZnJhYzQ1OiJcdTIxNTgiLGZyYWM1NjoiXHUyMTVhIixmcmFjNTg6Ilx1MjE1ZCIsZnJhYzc4OiJcdTIxNWUiLGZyYXNsOiJcdTIwNDQiLGZyb3duOiJcdTIzMjIiLHNmcm93bjoiXHUyMzIyIixmc2NyOiJcdWQ4MzVcdWRjYmIiLGdFbDoiXHUyYThjIixndHJlcXFsZXNzOiJcdTJhOGMiLGdhY3V0ZToiXHUwMWY1IixnYW1tYToiXHUwM2IzIixnYXA6Ilx1MmE4NiIsZ3RyYXBwcm94OiJcdTJhODYiLGdicmV2ZToiXHUwMTFmIixnY2lyYzoiXHUwMTFkIixnY3k6Ilx1MDQzMyIsZ2RvdDoiXHUwMTIxIixnZXNjYzoiXHUyYWE5IixnZXNkb3Q6Ilx1MmE4MCIsZ2VzZG90bzoiXHUyYTgyIixnZXNkb3RvbDoiXHUyYTg0IixnZXNsOiJcdTIyZGJcdWZlMDAiLGdlc2xlczoiXHUyYTk0IixnZnI6Ilx1ZDgzNVx1ZGQyNCIsZ2ltZWw6Ilx1MjEzNyIsZ2pjeToiXHUwNDUzIixnbEU6Ilx1MmE5MiIsZ2xhOiJcdTJhYTUiLGdsajoiXHUyYWE0IixnbkU6Ilx1MjI2OSIsZ25lcXE6Ilx1MjI2OSIsZ25hcDoiXHUyYThhIixnbmFwcHJveDoiXHUyYThhIixnbmU6Ilx1MmE4OCIsZ25lcToiXHUyYTg4IixnbnNpbToiXHUyMmU3Iixnb3BmOiJcdWQ4MzVcdWRkNTgiLGdzY3I6Ilx1MjEwYSIsZ3NpbWU6Ilx1MmE4ZSIsZ3NpbWw6Ilx1MmE5MCIsZ3RjYzoiXHUyYWE3IixndGNpcjoiXHUyYTdhIixndGRvdDoiXHUyMmQ3IixndHJkb3Q6Ilx1MjJkNyIsZ3RsUGFyOiJcdTI5OTUiLGd0cXVlc3Q6Ilx1MmE3YyIsZ3RyYXJyOiJcdTI5NzgiLGd2ZXJ0bmVxcToiXHUyMjY5XHVmZTAwIixndm5FOiJcdTIyNjlcdWZlMDAiLGhhcmRjeToiXHUwNDRhIixoYXJyY2lyOiJcdTI5NDgiLGhhcnJ3OiJcdTIxYWQiLGxlZnRyaWdodHNxdWlnYXJyb3c6Ilx1MjFhZCIsaGJhcjoiXHUyMTBmIixoc2xhc2g6Ilx1MjEwZiIscGxhbmNrOiJcdTIxMGYiLHBsYW5rdjoiXHUyMTBmIixoY2lyYzoiXHUwMTI1IixoZWFydHM6Ilx1MjY2NSIsaGVhcnRzdWl0OiJcdTI2NjUiLGhlbGxpcDoiXHUyMDI2IixtbGRyOiJcdTIwMjYiLGhlcmNvbjoiXHUyMmI5IixoZnI6Ilx1ZDgzNVx1ZGQyNSIsaGtzZWFyb3c6Ilx1MjkyNSIsc2VhcmhrOiJcdTI5MjUiLGhrc3dhcm93OiJcdTI5MjYiLHN3YXJoazoiXHUyOTI2Iixob2FycjoiXHUyMWZmIixob210aHQ6Ilx1MjIzYiIsaG9va2xlZnRhcnJvdzoiXHUyMWE5IixsYXJyaGs6Ilx1MjFhOSIsaG9va3JpZ2h0YXJyb3c6Ilx1MjFhYSIscmFycmhrOiJcdTIxYWEiLGhvcGY6Ilx1ZDgzNVx1ZGQ1OSIsaG9yYmFyOiJcdTIwMTUiLGhzY3I6Ilx1ZDgzNVx1ZGNiZCIsaHN0cm9rOiJcdTAxMjciLGh5YnVsbDoiXHUyMDQzIixpYWN1dGU6Ilx4ZWQiLGljaXJjOiJceGVlIixpY3k6Ilx1MDQzOCIsaWVjeToiXHUwNDM1IixpZXhjbDoiXHhhMSIsaWZyOiJcdWQ4MzVcdWRkMjYiLGlncmF2ZToiXHhlYyIsaWlpaW50OiJcdTJhMGMiLHFpbnQ6Ilx1MmEwYyIsaWlpbnQ6Ilx1MjIyZCIsdGludDoiXHUyMjJkIixpaW5maW46Ilx1MjlkYyIsaWlvdGE6Ilx1MjEyOSIsaWpsaWc6Ilx1MDEzMyIsaW1hY3I6Ilx1MDEyYiIsaW1hdGg6Ilx1MDEzMSIsaW5vZG90OiJcdTAxMzEiLGltb2Y6Ilx1MjJiNyIsaW1wZWQ6Ilx1MDFiNSIsaW5jYXJlOiJcdTIxMDUiLGluZmluOiJcdTIyMWUiLGluZmludGllOiJcdTI5ZGQiLGludGNhbDoiXHUyMmJhIixpbnRlcmNhbDoiXHUyMmJhIixpbnRsYXJoazoiXHUyYTE3IixpbnRwcm9kOiJcdTJhM2MiLGlwcm9kOiJcdTJhM2MiLGlvY3k6Ilx1MDQ1MSIsaW9nb246Ilx1MDEyZiIsaW9wZjoiXHVkODM1XHVkZDVhIixpb3RhOiJcdTAzYjkiLGlxdWVzdDoiXHhiZiIsaXNjcjoiXHVkODM1XHVkY2JlIixpc2luRToiXHUyMmY5Iixpc2luZG90OiJcdTIyZjUiLGlzaW5zOiJcdTIyZjQiLGlzaW5zdjoiXHUyMmYzIixpdGlsZGU6Ilx1MDEyOSIsaXVrY3k6Ilx1MDQ1NiIsaXVtbDoiXHhlZiIsamNpcmM6Ilx1MDEzNSIsamN5OiJcdTA0MzkiLGpmcjoiXHVkODM1XHVkZDI3IixqbWF0aDoiXHUwMjM3Iixqb3BmOiJcdWQ4MzVcdWRkNWIiLGpzY3I6Ilx1ZDgzNVx1ZGNiZiIsanNlcmN5OiJcdTA0NTgiLGp1a2N5OiJcdTA0NTQiLGthcHBhOiJcdTAzYmEiLGthcHBhdjoiXHUwM2YwIix2YXJrYXBwYToiXHUwM2YwIixrY2VkaWw6Ilx1MDEzNyIsa2N5OiJcdTA0M2EiLGtmcjoiXHVkODM1XHVkZDI4IixrZ3JlZW46Ilx1MDEzOCIsa2hjeToiXHUwNDQ1IixramN5OiJcdTA0NWMiLGtvcGY6Ilx1ZDgzNVx1ZGQ1YyIsa3NjcjoiXHVkODM1XHVkY2MwIixsQXRhaWw6Ilx1MjkxYiIsbEJhcnI6Ilx1MjkwZSIsbEVnOiJcdTJhOGIiLGxlc3NlcXFndHI6Ilx1MmE4YiIsbEhhcjoiXHUyOTYyIixsYWN1dGU6Ilx1MDEzYSIsbGFlbXB0eXY6Ilx1MjliNCIsbGFtYmRhOiJcdTAzYmIiLGxhbmdkOiJcdTI5OTEiLGxhcDoiXHUyYTg1IixsZXNzYXBwcm94OiJcdTJhODUiLGxhcXVvOiJceGFiIixsYXJyYmZzOiJcdTI5MWYiLGxhcnJmczoiXHUyOTFkIixsYXJybHA6Ilx1MjFhYiIsbG9vcGFycm93bGVmdDoiXHUyMWFiIixsYXJycGw6Ilx1MjkzOSIsbGFycnNpbToiXHUyOTczIixsYXJydGw6Ilx1MjFhMiIsbGVmdGFycm93dGFpbDoiXHUyMWEyIixsYXQ6Ilx1MmFhYiIsbGF0YWlsOiJcdTI5MTkiLGxhdGU6Ilx1MmFhZCIsbGF0ZXM6Ilx1MmFhZFx1ZmUwMCIsbGJhcnI6Ilx1MjkwYyIsbGJicms6Ilx1Mjc3MiIsbGJyYWNlOiJ7IixsY3ViOiJ7IixsYnJhY2s6IlsiLGxzcWI6IlsiLGxicmtlOiJcdTI5OGIiLGxicmtzbGQ6Ilx1Mjk4ZiIsbGJya3NsdToiXHUyOThkIixsY2Fyb246Ilx1MDEzZSIsbGNlZGlsOiJcdTAxM2MiLGxjeToiXHUwNDNiIixsZGNhOiJcdTI5MzYiLGxkcmRoYXI6Ilx1Mjk2NyIsbGRydXNoYXI6Ilx1Mjk0YiIsbGRzaDoiXHUyMWIyIixsZToiXHUyMjY0IixsZXE6Ilx1MjI2NCIsbGVmdGxlZnRhcnJvd3M6Ilx1MjFjNyIsbGxhcnI6Ilx1MjFjNyIsbGVmdHRocmVldGltZXM6Ilx1MjJjYiIsbHRocmVlOiJcdTIyY2IiLGxlc2NjOiJcdTJhYTgiLGxlc2RvdDoiXHUyYTdmIixsZXNkb3RvOiJcdTJhODEiLGxlc2RvdG9yOiJcdTJhODMiLGxlc2c6Ilx1MjJkYVx1ZmUwMCIsbGVzZ2VzOiJcdTJhOTMiLGxlc3Nkb3Q6Ilx1MjJkNiIsbHRkb3Q6Ilx1MjJkNiIsbGZpc2h0OiJcdTI5N2MiLGxmcjoiXHVkODM1XHVkZDI5IixsZ0U6Ilx1MmE5MSIsbGhhcnVsOiJcdTI5NmEiLGxoYmxrOiJcdTI1ODQiLGxqY3k6Ilx1MDQ1OSIsbGxoYXJkOiJcdTI5NmIiLGxsdHJpOiJcdTI1ZmEiLGxtaWRvdDoiXHUwMTQwIixsbW91c3Q6Ilx1MjNiMCIsbG1vdXN0YWNoZToiXHUyM2IwIixsbkU6Ilx1MjI2OCIsbG5lcXE6Ilx1MjI2OCIsbG5hcDoiXHUyYTg5IixsbmFwcHJveDoiXHUyYTg5IixsbmU6Ilx1MmE4NyIsbG5lcToiXHUyYTg3IixsbnNpbToiXHUyMmU2Iixsb2FuZzoiXHUyN2VjIixsb2FycjoiXHUyMWZkIixsb25nbWFwc3RvOiJcdTI3ZmMiLHhtYXA6Ilx1MjdmYyIsbG9vcGFycm93cmlnaHQ6Ilx1MjFhYyIscmFycmxwOiJcdTIxYWMiLGxvcGFyOiJcdTI5ODUiLGxvcGY6Ilx1ZDgzNVx1ZGQ1ZCIsbG9wbHVzOiJcdTJhMmQiLGxvdGltZXM6Ilx1MmEzNCIsbG93YXN0OiJcdTIyMTciLGxvejoiXHUyNWNhIixsb3plbmdlOiJcdTI1Y2EiLGxwYXI6IigiLGxwYXJsdDoiXHUyOTkzIixscmhhcmQ6Ilx1Mjk2ZCIsbHJtOiJcdTIwMGUiLGxydHJpOiJcdTIyYmYiLGxzYXF1bzoiXHUyMDM5Iixsc2NyOiJcdWQ4MzVcdWRjYzEiLGxzaW1lOiJcdTJhOGQiLGxzaW1nOiJcdTJhOGYiLGxzcXVvcjoiXHUyMDFhIixzYnF1bzoiXHUyMDFhIixsc3Ryb2s6Ilx1MDE0MiIsbHRjYzoiXHUyYWE2IixsdGNpcjoiXHUyYTc5IixsdGltZXM6Ilx1MjJjOSIsbHRsYXJyOiJcdTI5NzYiLGx0cXVlc3Q6Ilx1MmE3YiIsbHRyUGFyOiJcdTI5OTYiLGx0cmk6Ilx1MjVjMyIsdHJpYW5nbGVsZWZ0OiJcdTI1YzMiLGx1cmRzaGFyOiJcdTI5NGEiLGx1cnVoYXI6Ilx1Mjk2NiIsbHZlcnRuZXFxOiJcdTIyNjhcdWZlMDAiLGx2bkU6Ilx1MjI2OFx1ZmUwMCIsbUREb3Q6Ilx1MjIzYSIsbWFjcjoiXHhhZiIsc3RybnM6Ilx4YWYiLG1hbGU6Ilx1MjY0MiIsbWFsdDoiXHUyNzIwIixtYWx0ZXNlOiJcdTI3MjAiLG1hcmtlcjoiXHUyNWFlIixtY29tbWE6Ilx1MmEyOSIsbWN5OiJcdTA0M2MiLG1kYXNoOiJcdTIwMTQiLG1mcjoiXHVkODM1XHVkZDJhIixtaG86Ilx1MjEyNyIsbWljcm86Ilx4YjUiLG1pZGNpcjoiXHUyYWYwIixtaW51czoiXHUyMjEyIixtaW51c2R1OiJcdTJhMmEiLG1sY3A6Ilx1MmFkYiIsbW9kZWxzOiJcdTIyYTciLG1vcGY6Ilx1ZDgzNVx1ZGQ1ZSIsbXNjcjoiXHVkODM1XHVkY2MyIixtdToiXHUwM2JjIixtdWx0aW1hcDoiXHUyMmI4IixtdW1hcDoiXHUyMmI4IixuR2c6Ilx1MjJkOVx1MDMzOCIsbkd0OiJcdTIyNmJcdTIwZDIiLG5MZWZ0YXJyb3c6Ilx1MjFjZCIsbmxBcnI6Ilx1MjFjZCIsbkxlZnRyaWdodGFycm93OiJcdTIxY2UiLG5oQXJyOiJcdTIxY2UiLG5MbDoiXHUyMmQ4XHUwMzM4IixuTHQ6Ilx1MjI2YVx1MjBkMiIsblJpZ2h0YXJyb3c6Ilx1MjFjZiIsbnJBcnI6Ilx1MjFjZiIsblZEYXNoOiJcdTIyYWYiLG5WZGFzaDoiXHUyMmFlIixuYWN1dGU6Ilx1MDE0NCIsbmFuZzoiXHUyMjIwXHUyMGQyIixuYXBFOiJcdTJhNzBcdTAzMzgiLG5hcGlkOiJcdTIyNGJcdTAzMzgiLG5hcG9zOiJcdTAxNDkiLG5hdHVyOiJcdTI2NmUiLG5hdHVyYWw6Ilx1MjY2ZSIsbmNhcDoiXHUyYTQzIixuY2Fyb246Ilx1MDE0OCIsbmNlZGlsOiJcdTAxNDYiLG5jb25nZG90OiJcdTJhNmRcdTAzMzgiLG5jdXA6Ilx1MmE0MiIsbmN5OiJcdTA0M2QiLG5kYXNoOiJcdTIwMTMiLG5lQXJyOiJcdTIxZDciLG5lYXJoazoiXHUyOTI0IixuZWRvdDoiXHUyMjUwXHUwMzM4IixuZXNlYXI6Ilx1MjkyOCIsdG9lYToiXHUyOTI4IixuZnI6Ilx1ZDgzNVx1ZGQyYiIsbmhhcnI6Ilx1MjFhZSIsbmxlZnRyaWdodGFycm93OiJcdTIxYWUiLG5ocGFyOiJcdTJhZjIiLG5pczoiXHUyMmZjIixuaXNkOiJcdTIyZmEiLG5qY3k6Ilx1MDQ1YSIsbmxFOiJcdTIyNjZcdTAzMzgiLG5sZXFxOiJcdTIyNjZcdTAzMzgiLG5sYXJyOiJcdTIxOWEiLG5sZWZ0YXJyb3c6Ilx1MjE5YSIsbmxkcjoiXHUyMDI1Iixub3BmOiJcdWQ4MzVcdWRkNWYiLG5vdDoiXHhhYyIsbm90aW5FOiJcdTIyZjlcdTAzMzgiLG5vdGluZG90OiJcdTIyZjVcdTAzMzgiLG5vdGludmI6Ilx1MjJmNyIsbm90aW52YzoiXHUyMmY2Iixub3RuaXZiOiJcdTIyZmUiLG5vdG5pdmM6Ilx1MjJmZCIsbnBhcnNsOiJcdTJhZmRcdTIwZTUiLG5wYXJ0OiJcdTIyMDJcdTAzMzgiLG5wb2xpbnQ6Ilx1MmExNCIsbnJhcnI6Ilx1MjE5YiIsbnJpZ2h0YXJyb3c6Ilx1MjE5YiIsbnJhcnJjOiJcdTI5MzNcdTAzMzgiLG5yYXJydzoiXHUyMTlkXHUwMzM4Iixuc2NyOiJcdWQ4MzVcdWRjYzMiLG5zdWI6Ilx1MjI4NCIsbnN1YkU6Ilx1MmFjNVx1MDMzOCIsbnN1YnNldGVxcToiXHUyYWM1XHUwMzM4Iixuc3VwOiJcdTIyODUiLG5zdXBFOiJcdTJhYzZcdTAzMzgiLG5zdXBzZXRlcXE6Ilx1MmFjNlx1MDMzOCIsbnRpbGRlOiJceGYxIixudToiXHUwM2JkIixudW06IiMiLG51bWVybzoiXHUyMTE2IixudW1zcDoiXHUyMDA3IixudkRhc2g6Ilx1MjJhZCIsbnZIYXJyOiJcdTI5MDQiLG52YXA6Ilx1MjI0ZFx1MjBkMiIsbnZkYXNoOiJcdTIyYWMiLG52Z2U6Ilx1MjI2NVx1MjBkMiIsbnZndDoiPlx1MjBkMiIsbnZpbmZpbjoiXHUyOWRlIixudmxBcnI6Ilx1MjkwMiIsbnZsZToiXHUyMjY0XHUyMGQyIixudmx0OiI8XHUyMGQyIixudmx0cmllOiJcdTIyYjRcdTIwZDIiLG52ckFycjoiXHUyOTAzIixudnJ0cmllOiJcdTIyYjVcdTIwZDIiLG52c2ltOiJcdTIyM2NcdTIwZDIiLG53QXJyOiJcdTIxZDYiLG53YXJoazoiXHUyOTIzIixud25lYXI6Ilx1MjkyNyIsb2FjdXRlOiJceGYzIixvY2lyYzoiXHhmNCIsb2N5OiJcdTA0M2UiLG9kYmxhYzoiXHUwMTUxIixvZGl2OiJcdTJhMzgiLG9kc29sZDoiXHUyOWJjIixvZWxpZzoiXHUwMTUzIixvZmNpcjoiXHUyOWJmIixvZnI6Ilx1ZDgzNVx1ZGQyYyIsb2dvbjoiXHUwMmRiIixvZ3JhdmU6Ilx4ZjIiLG9ndDoiXHUyOWMxIixvaGJhcjoiXHUyOWI1IixvbGNpcjoiXHUyOWJlIixvbGNyb3NzOiJcdTI5YmIiLG9sdDoiXHUyOWMwIixvbWFjcjoiXHUwMTRkIixvbWVnYToiXHUwM2M5IixvbWljcm9uOiJcdTAzYmYiLG9taWQ6Ilx1MjliNiIsb29wZjoiXHVkODM1XHVkZDYwIixvcGFyOiJcdTI5YjciLG9wZXJwOiJcdTI5YjkiLG9yOiJcdTIyMjgiLHZlZToiXHUyMjI4IixvcmQ6Ilx1MmE1ZCIsb3JkZXI6Ilx1MjEzNCIsb3JkZXJvZjoiXHUyMTM0Iixvc2NyOiJcdTIxMzQiLG9yZGY6Ilx4YWEiLG9yZG06Ilx4YmEiLG9yaWdvZjoiXHUyMmI2Iixvcm9yOiJcdTJhNTYiLG9yc2xvcGU6Ilx1MmE1NyIsb3J2OiJcdTJhNWIiLG9zbGFzaDoiXHhmOCIsb3NvbDoiXHUyMjk4IixvdGlsZGU6Ilx4ZjUiLG90aW1lc2FzOiJcdTJhMzYiLG91bWw6Ilx4ZjYiLG92YmFyOiJcdTIzM2QiLHBhcmE6Ilx4YjYiLHBhcnNpbToiXHUyYWYzIixwYXJzbDoiXHUyYWZkIixwY3k6Ilx1MDQzZiIscGVyY250OiIlIixwZXJpb2Q6Ii4iLHBlcm1pbDoiXHUyMDMwIixwZXJ0ZW5rOiJcdTIwMzEiLHBmcjoiXHVkODM1XHVkZDJkIixwaGk6Ilx1MDNjNiIscGhpdjoiXHUwM2Q1IixzdHJhaWdodHBoaToiXHUwM2Q1Iix2YXJwaGk6Ilx1MDNkNSIscGhvbmU6Ilx1MjYwZSIscGk6Ilx1MDNjMCIscGl2OiJcdTAzZDYiLHZhcnBpOiJcdTAzZDYiLHBsYW5ja2g6Ilx1MjEwZSIscGx1czoiKyIscGx1c2FjaXI6Ilx1MmEyMyIscGx1c2NpcjoiXHUyYTIyIixwbHVzZHU6Ilx1MmEyNSIscGx1c2U6Ilx1MmE3MiIscGx1c3NpbToiXHUyYTI2IixwbHVzdHdvOiJcdTJhMjciLHBvaW50aW50OiJcdTJhMTUiLHBvcGY6Ilx1ZDgzNVx1ZGQ2MSIscG91bmQ6Ilx4YTMiLHByRToiXHUyYWIzIixwcmFwOiJcdTJhYjciLHByZWNhcHByb3g6Ilx1MmFiNyIscHJlY25hcHByb3g6Ilx1MmFiOSIscHJuYXA6Ilx1MmFiOSIscHJlY25lcXE6Ilx1MmFiNSIscHJuRToiXHUyYWI1IixwcmVjbnNpbToiXHUyMmU4Iixwcm5zaW06Ilx1MjJlOCIscHJpbWU6Ilx1MjAzMiIscHJvZmFsYXI6Ilx1MjMyZSIscHJvZmxpbmU6Ilx1MjMxMiIscHJvZnN1cmY6Ilx1MjMxMyIscHJ1cmVsOiJcdTIyYjAiLHBzY3I6Ilx1ZDgzNVx1ZGNjNSIscHNpOiJcdTAzYzgiLHB1bmNzcDoiXHUyMDA4IixxZnI6Ilx1ZDgzNVx1ZGQyZSIscW9wZjoiXHVkODM1XHVkZDYyIixxcHJpbWU6Ilx1MjA1NyIscXNjcjoiXHVkODM1XHVkY2M2IixxdWF0aW50OiJcdTJhMTYiLHF1ZXN0OiI/IixyQXRhaWw6Ilx1MjkxYyIsckhhcjoiXHUyOTY0IixyYWNlOiJcdTIyM2RcdTAzMzEiLHJhY3V0ZToiXHUwMTU1IixyYWVtcHR5djoiXHUyOWIzIixyYW5nZDoiXHUyOTkyIixyYW5nZToiXHUyOWE1IixyYXF1bzoiXHhiYiIscmFycmFwOiJcdTI5NzUiLHJhcnJiZnM6Ilx1MjkyMCIscmFycmM6Ilx1MjkzMyIscmFycmZzOiJcdTI5MWUiLHJhcnJwbDoiXHUyOTQ1IixyYXJyc2ltOiJcdTI5NzQiLHJhcnJ0bDoiXHUyMWEzIixyaWdodGFycm93dGFpbDoiXHUyMWEzIixyYXJydzoiXHUyMTlkIixyaWdodHNxdWlnYXJyb3c6Ilx1MjE5ZCIscmF0YWlsOiJcdTI5MWEiLHJhdGlvOiJcdTIyMzYiLHJiYnJrOiJcdTI3NzMiLHJicmFjZToifSIscmN1YjoifSIscmJyYWNrOiJdIixyc3FiOiJdIixyYnJrZToiXHUyOThjIixyYnJrc2xkOiJcdTI5OGUiLHJicmtzbHU6Ilx1Mjk5MCIscmNhcm9uOiJcdTAxNTkiLHJjZWRpbDoiXHUwMTU3IixyY3k6Ilx1MDQ0MCIscmRjYToiXHUyOTM3IixyZGxkaGFyOiJcdTI5NjkiLHJkc2g6Ilx1MjFiMyIscmVjdDoiXHUyNWFkIixyZmlzaHQ6Ilx1Mjk3ZCIscmZyOiJcdWQ4MzVcdWRkMmYiLHJoYXJ1bDoiXHUyOTZjIixyaG86Ilx1MDNjMSIscmhvdjoiXHUwM2YxIix2YXJyaG86Ilx1MDNmMSIscmlnaHRyaWdodGFycm93czoiXHUyMWM5IixycmFycjoiXHUyMWM5IixyaWdodHRocmVldGltZXM6Ilx1MjJjYyIscnRocmVlOiJcdTIyY2MiLHJpbmc6Ilx1MDJkYSIscmxtOiJcdTIwMGYiLHJtb3VzdDoiXHUyM2IxIixybW91c3RhY2hlOiJcdTIzYjEiLHJubWlkOiJcdTJhZWUiLHJvYW5nOiJcdTI3ZWQiLHJvYXJyOiJcdTIxZmUiLHJvcGFyOiJcdTI5ODYiLHJvcGY6Ilx1ZDgzNVx1ZGQ2MyIscm9wbHVzOiJcdTJhMmUiLHJvdGltZXM6Ilx1MmEzNSIscnBhcjoiKSIscnBhcmd0OiJcdTI5OTQiLHJwcG9saW50OiJcdTJhMTIiLHJzYXF1bzoiXHUyMDNhIixyc2NyOiJcdWQ4MzVcdWRjYzciLHJ0aW1lczoiXHUyMmNhIixydHJpOiJcdTI1YjkiLHRyaWFuZ2xlcmlnaHQ6Ilx1MjViOSIscnRyaWx0cmk6Ilx1MjljZSIscnVsdWhhcjoiXHUyOTY4IixyeDoiXHUyMTFlIixzYWN1dGU6Ilx1MDE1YiIsc2NFOiJcdTJhYjQiLHNjYXA6Ilx1MmFiOCIsc3VjY2FwcHJveDoiXHUyYWI4IixzY2Fyb246Ilx1MDE2MSIsc2NlZGlsOiJcdTAxNWYiLHNjaXJjOiJcdTAxNWQiLHNjbkU6Ilx1MmFiNiIsc3VjY25lcXE6Ilx1MmFiNiIsc2NuYXA6Ilx1MmFiYSIsc3VjY25hcHByb3g6Ilx1MmFiYSIsc2Nuc2ltOiJcdTIyZTkiLHN1Y2Nuc2ltOiJcdTIyZTkiLHNjcG9saW50OiJcdTJhMTMiLHNjeToiXHUwNDQxIixzZG90OiJcdTIyYzUiLHNkb3RlOiJcdTJhNjYiLHNlQXJyOiJcdTIxZDgiLHNlY3Q6Ilx4YTciLHNlbWk6IjsiLHNlc3dhcjoiXHUyOTI5Iix0b3NhOiJcdTI5MjkiLHNleHQ6Ilx1MjczNiIsc2ZyOiJcdWQ4MzVcdWRkMzAiLHNoYXJwOiJcdTI2NmYiLHNoY2hjeToiXHUwNDQ5IixzaGN5OiJcdTA0NDgiLHNoeToiXHhhZCIsc2lnbWE6Ilx1MDNjMyIsc2lnbWFmOiJcdTAzYzIiLHNpZ21hdjoiXHUwM2MyIix2YXJzaWdtYToiXHUwM2MyIixzaW1kb3Q6Ilx1MmE2YSIsc2ltZzoiXHUyYTllIixzaW1nRToiXHUyYWEwIixzaW1sOiJcdTJhOWQiLHNpbWxFOiJcdTJhOWYiLHNpbW5lOiJcdTIyNDYiLHNpbXBsdXM6Ilx1MmEyNCIsc2ltcmFycjoiXHUyOTcyIixzbWFzaHA6Ilx1MmEzMyIsc21lcGFyc2w6Ilx1MjllNCIsc21pbGU6Ilx1MjMyMyIsc3NtaWxlOiJcdTIzMjMiLHNtdDoiXHUyYWFhIixzbXRlOiJcdTJhYWMiLHNtdGVzOiJcdTJhYWNcdWZlMDAiLHNvZnRjeToiXHUwNDRjIixzb2w6Ii8iLHNvbGI6Ilx1MjljNCIsc29sYmFyOiJcdTIzM2YiLHNvcGY6Ilx1ZDgzNVx1ZGQ2NCIsc3BhZGVzOiJcdTI2NjAiLHNwYWRlc3VpdDoiXHUyNjYwIixzcWNhcHM6Ilx1MjI5M1x1ZmUwMCIsc3FjdXBzOiJcdTIyOTRcdWZlMDAiLHNzY3I6Ilx1ZDgzNVx1ZGNjOCIsc3RhcjoiXHUyNjA2IixzdWI6Ilx1MjI4MiIsc3Vic2V0OiJcdTIyODIiLHN1YkU6Ilx1MmFjNSIsc3Vic2V0ZXFxOiJcdTJhYzUiLHN1YmRvdDoiXHUyYWJkIixzdWJlZG90OiJcdTJhYzMiLHN1Ym11bHQ6Ilx1MmFjMSIsc3VibkU6Ilx1MmFjYiIsc3Vic2V0bmVxcToiXHUyYWNiIixzdWJuZToiXHUyMjhhIixzdWJzZXRuZXE6Ilx1MjI4YSIsc3VicGx1czoiXHUyYWJmIixzdWJyYXJyOiJcdTI5NzkiLHN1YnNpbToiXHUyYWM3IixzdWJzdWI6Ilx1MmFkNSIsc3Vic3VwOiJcdTJhZDMiLHN1bmc6Ilx1MjY2YSIsc3VwMToiXHhiOSIsc3VwMjoiXHhiMiIsc3VwMzoiXHhiMyIsc3VwRToiXHUyYWM2IixzdXBzZXRlcXE6Ilx1MmFjNiIsc3VwZG90OiJcdTJhYmUiLHN1cGRzdWI6Ilx1MmFkOCIsc3VwZWRvdDoiXHUyYWM0IixzdXBoc29sOiJcdTI3YzkiLHN1cGhzdWI6Ilx1MmFkNyIsc3VwbGFycjoiXHUyOTdiIixzdXBtdWx0OiJcdTJhYzIiLHN1cG5FOiJcdTJhY2MiLHN1cHNldG5lcXE6Ilx1MmFjYyIsc3VwbmU6Ilx1MjI4YiIsc3Vwc2V0bmVxOiJcdTIyOGIiLHN1cHBsdXM6Ilx1MmFjMCIsc3Vwc2ltOiJcdTJhYzgiLHN1cHN1YjoiXHUyYWQ0IixzdXBzdXA6Ilx1MmFkNiIsc3dBcnI6Ilx1MjFkOSIsc3dud2FyOiJcdTI5MmEiLHN6bGlnOiJceGRmIix0YXJnZXQ6Ilx1MjMxNiIsdGF1OiJcdTAzYzQiLHRjYXJvbjoiXHUwMTY1Iix0Y2VkaWw6Ilx1MDE2MyIsdGN5OiJcdTA0NDIiLHRlbHJlYzoiXHUyMzE1Iix0ZnI6Ilx1ZDgzNVx1ZGQzMSIsdGhldGE6Ilx1MDNiOCIsdGhldGFzeW06Ilx1MDNkMSIsdGhldGF2OiJcdTAzZDEiLHZhcnRoZXRhOiJcdTAzZDEiLHRob3JuOiJceGZlIix0aW1lczoiXHhkNyIsdGltZXNiYXI6Ilx1MmEzMSIsdGltZXNkOiJcdTJhMzAiLHRvcGJvdDoiXHUyMzM2Iix0b3BjaXI6Ilx1MmFmMSIsdG9wZjoiXHVkODM1XHVkZDY1Iix0b3Bmb3JrOiJcdTJhZGEiLHRwcmltZToiXHUyMDM0Iix0cmlhbmdsZToiXHUyNWI1Iix1dHJpOiJcdTI1YjUiLHRyaWFuZ2xlcToiXHUyMjVjIix0cmllOiJcdTIyNWMiLHRyaWRvdDoiXHUyNWVjIix0cmltaW51czoiXHUyYTNhIix0cmlwbHVzOiJcdTJhMzkiLHRyaXNiOiJcdTI5Y2QiLHRyaXRpbWU6Ilx1MmEzYiIsdHJwZXppdW06Ilx1MjNlMiIsdHNjcjoiXHVkODM1XHVkY2M5Iix0c2N5OiJcdTA0NDYiLHRzaGN5OiJcdTA0NWIiLHRzdHJvazoiXHUwMTY3Iix1SGFyOiJcdTI5NjMiLHVhY3V0ZToiXHhmYSIsdWJyY3k6Ilx1MDQ1ZSIsdWJyZXZlOiJcdTAxNmQiLHVjaXJjOiJceGZiIix1Y3k6Ilx1MDQ0MyIsdWRibGFjOiJcdTAxNzEiLHVmaXNodDoiXHUyOTdlIix1ZnI6Ilx1ZDgzNVx1ZGQzMiIsdWdyYXZlOiJceGY5Iix1aGJsazoiXHUyNTgwIix1bGNvcm46Ilx1MjMxYyIsdWxjb3JuZXI6Ilx1MjMxYyIsdWxjcm9wOiJcdTIzMGYiLHVsdHJpOiJcdTI1ZjgiLHVtYWNyOiJcdTAxNmIiLHVvZ29uOiJcdTAxNzMiLHVvcGY6Ilx1ZDgzNVx1ZGQ2NiIsdXBzaToiXHUwM2M1Iix1cHNpbG9uOiJcdTAzYzUiLHVwdXBhcnJvd3M6Ilx1MjFjOCIsdXVhcnI6Ilx1MjFjOCIsdXJjb3JuOiJcdTIzMWQiLHVyY29ybmVyOiJcdTIzMWQiLHVyY3JvcDoiXHUyMzBlIix1cmluZzoiXHUwMTZmIix1cnRyaToiXHUyNWY5Iix1c2NyOiJcdWQ4MzVcdWRjY2EiLHV0ZG90OiJcdTIyZjAiLHV0aWxkZToiXHUwMTY5Iix1dW1sOiJceGZjIix1d2FuZ2xlOiJcdTI5YTciLHZCYXI6Ilx1MmFlOCIsdkJhcnY6Ilx1MmFlOSIsdmFuZ3J0OiJcdTI5OWMiLHZhcnN1YnNldG5lcToiXHUyMjhhXHVmZTAwIix2c3VibmU6Ilx1MjI4YVx1ZmUwMCIsdmFyc3Vic2V0bmVxcToiXHUyYWNiXHVmZTAwIix2c3VibkU6Ilx1MmFjYlx1ZmUwMCIsdmFyc3Vwc2V0bmVxOiJcdTIyOGJcdWZlMDAiLHZzdXBuZToiXHUyMjhiXHVmZTAwIix2YXJzdXBzZXRuZXFxOiJcdTJhY2NcdWZlMDAiLHZzdXBuRToiXHUyYWNjXHVmZTAwIix2Y3k6Ilx1MDQzMiIsdmVlYmFyOiJcdTIyYmIiLHZlZWVxOiJcdTIyNWEiLHZlbGxpcDoiXHUyMmVlIix2ZnI6Ilx1ZDgzNVx1ZGQzMyIsdm9wZjoiXHVkODM1XHVkZDY3Iix2c2NyOiJcdWQ4MzVcdWRjY2IiLHZ6aWd6YWc6Ilx1Mjk5YSIsd2NpcmM6Ilx1MDE3NSIsd2VkYmFyOiJcdTJhNWYiLHdlZGdlcToiXHUyMjU5Iix3ZWllcnA6Ilx1MjExOCIsd3A6Ilx1MjExOCIsd2ZyOiJcdWQ4MzVcdWRkMzQiLHdvcGY6Ilx1ZDgzNVx1ZGQ2OCIsd3NjcjoiXHVkODM1XHVkY2NjIix4ZnI6Ilx1ZDgzNVx1ZGQzNSIseGk6Ilx1MDNiZSIseG5pczoiXHUyMmZiIix4b3BmOiJcdWQ4MzVcdWRkNjkiLHhzY3I6Ilx1ZDgzNVx1ZGNjZCIseWFjdXRlOiJceGZkIix5YWN5OiJcdTA0NGYiLHljaXJjOiJcdTAxNzciLHljeToiXHUwNDRiIix5ZW46Ilx4YTUiLHlmcjoiXHVkODM1XHVkZDM2Iix5aWN5OiJcdTA0NTciLHlvcGY6Ilx1ZDgzNVx1ZGQ2YSIseXNjcjoiXHVkODM1XHVkY2NlIix5dWN5OiJcdTA0NGUiLHl1bWw6Ilx4ZmYiLHphY3V0ZToiXHUwMTdhIix6Y2Fyb246Ilx1MDE3ZSIsemN5OiJcdTA0MzciLHpkb3Q6Ilx1MDE3YyIsemV0YToiXHUwM2I2Iix6ZnI6Ilx1ZDgzNVx1ZGQzNyIsemhjeToiXHUwNDM2Iix6aWdyYXJyOiJcdTIxZGQiLHpvcGY6Ilx1ZDgzNVx1ZGQ2YiIsenNjcjoiXHVkODM1XHVkY2NmIix6d2o6Ilx1MjAwZCIsenduajoiXHUyMDBjIixuZ3NwOiJcdWU1MDAifSxLYj1jbGFzcyBleHRlbmRzIE1me2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihpLHQpLHRoaXMudG9rZW5UeXBlPWV9fSxHeWU9L1xyXG4/L2c7ZnVuY3Rpb24gVWIobil7cmV0dXJuYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICIkezA9PT1uPyJFT0YiOlN0cmluZy5mcm9tQ2hhckNvZGUobil9ImB9ZnVuY3Rpb24gVjkobil7cmV0dXJuYFVua25vd24gZW50aXR5ICIke259IiAtIHVzZSB0aGUgIiYjPGRlY2ltYWw+OyIgb3IgICImI3g8aGV4PjsiIHN5bnRheGB9dmFyIFpiPSgoKT0+e3JldHVybihuPVpifHwoWmI9e30pKS5IRVg9ImhleGFkZWNpbWFsIixuLkRFQz0iZGVjaW1hbCIsWmI7dmFyIG59KSgpLEpiPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3I9dH19O2Z1bmN0aW9uIElhKG4pe3JldHVybiFmMyhuKXx8MD09PW59ZnVuY3Rpb24gSDkobil7cmV0dXJuIGYzKG4pfHw2Mj09PW58fDYwPT09bnx8NDc9PT1ufHwzOT09PW58fDM0PT09bnx8NjE9PT1ufHwwPT09bn1mdW5jdGlvbiBZeWUobil7cmV0dXJuIDU5PT09bnx8MD09PW58fCFmdW5jdGlvbihuKXtyZXR1cm4gbj49OTcmJm48PTEwMnx8bj49NjUmJm48PTcwfHxwcChuKX0obil9ZnVuY3Rpb24gWHllKG4pe3JldHVybiA1OT09PW58fDA9PT1ufHwhbTMobil9ZnVuY3Rpb24gVTkobil7cmV0dXJuIG4+PTk3JiZuPD0xMjI/bi05Nys2NTpufXZhciBEZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHQgaW5zdGFuY2VvZiBEZil7dGhpcy5maWxlPXQuZmlsZSx0aGlzLmlucHV0PXQuaW5wdXQsdGhpcy5lbmQ9dC5lbmQ7bGV0IGk9dC5zdGF0ZTt0aGlzLnN0YXRlPXtwZWVrOmkucGVlayxvZmZzZXQ6aS5vZmZzZXQsbGluZTppLmxpbmUsY29sdW1uOmkuY29sdW1ufX1lbHNle2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvZ3JhbW1pbmcgZXJyb3I6IHRoZSByYW5nZSBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggYSBmaWxlIGFyZ3VtZW50LiIpO3RoaXMuZmlsZT10LHRoaXMuaW5wdXQ9dC5jb250ZW50LHRoaXMuZW5kPWUuZW5kUG9zLHRoaXMuc3RhdGU9e3BlZWs6LTEsb2Zmc2V0OmUuc3RhcnRQb3MsbGluZTplLnN0YXJ0TGluZSxjb2x1bW46ZS5zdGFydENvbH19fWNsb25lKCl7cmV0dXJuIG5ldyBEZih0aGlzKX1wZWVrKCl7cmV0dXJuIHRoaXMuc3RhdGUucGVla31jaGFyc0xlZnQoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGF0ZS5vZmZzZXR9ZGlmZih0KXtyZXR1cm4gdGhpcy5zdGF0ZS5vZmZzZXQtdC5zdGF0ZS5vZmZzZXR9YWR2YW5jZSgpe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuc3RhdGUpfWluaXQoKXt0aGlzLnVwZGF0ZVBlZWsodGhpcy5zdGF0ZSl9Z2V0U3Bhbih0LGUpe2xldCBpPXQ9dHx8dGhpcztpZihlKWZvcig7dGhpcy5kaWZmKHQpPjAmJi0xIT09ZS5pbmRleE9mKHQucGVlaygpKTspaT09PXQmJih0PXQuY2xvbmUoKSksdC5hZHZhbmNlKCk7bGV0IHI9dGhpcy5sb2NhdGlvbkZyb21DdXJzb3IodCksbz10aGlzLmxvY2F0aW9uRnJvbUN1cnNvcih0aGlzKSxzPWkhPT10P3RoaXMubG9jYXRpb25Gcm9tQ3Vyc29yKGkpOnI7cmV0dXJuIG5ldyBUbyhyLG8scyl9Z2V0Q2hhcnModCl7cmV0dXJuIHRoaXMuaW5wdXQuc3Vic3RyaW5nKHQuc3RhdGUub2Zmc2V0LHRoaXMuc3RhdGUub2Zmc2V0KX1jaGFyQXQodCl7cmV0dXJuIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0KX1hZHZhbmNlU3RhdGUodCl7aWYodC5vZmZzZXQ+PXRoaXMuZW5kKXRocm93IHRoaXMuc3RhdGU9dCxuZXcgSXgoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyICJFT0YiJyx0aGlzKTtsZXQgZT10aGlzLmNoYXJBdCh0Lm9mZnNldCk7MTA9PT1lPyh0LmxpbmUrKyx0LmNvbHVtbj0wKTpXcShlKXx8dC5jb2x1bW4rKyx0Lm9mZnNldCsrLHRoaXMudXBkYXRlUGVlayh0KX11cGRhdGVQZWVrKHQpe3QucGVlaz10Lm9mZnNldD49dGhpcy5lbmQ/MDp0aGlzLmNoYXJBdCh0Lm9mZnNldCl9bG9jYXRpb25Gcm9tQ3Vyc29yKHQpe3JldHVybiBuZXcgd2YodC5maWxlLHQuc3RhdGUub2Zmc2V0LHQuc3RhdGUubGluZSx0LnN0YXRlLmNvbHVtbil9fSxMMD1jbGFzcyBleHRlbmRzIERme2NvbnN0cnVjdG9yKHQsZSl7dCBpbnN0YW5jZW9mIEwwPyhzdXBlcih0KSx0aGlzLmludGVybmFsU3RhdGU9ey4uLnQuaW50ZXJuYWxTdGF0ZX0pOihzdXBlcih0LGUpLHRoaXMuaW50ZXJuYWxTdGF0ZT10aGlzLnN0YXRlKX1hZHZhbmNlKCl7dGhpcy5zdGF0ZT10aGlzLmludGVybmFsU3RhdGUsc3VwZXIuYWR2YW5jZSgpLHRoaXMucHJvY2Vzc0VzY2FwZVNlcXVlbmNlKCl9aW5pdCgpe3N1cGVyLmluaXQoKSx0aGlzLnByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpfWNsb25lKCl7cmV0dXJuIG5ldyBMMCh0aGlzKX1nZXRDaGFycyh0KXtsZXQgZT10LmNsb25lKCksaT0iIjtmb3IoO2UuaW50ZXJuYWxTdGF0ZS5vZmZzZXQ8dGhpcy5pbnRlcm5hbFN0YXRlLm9mZnNldDspaSs9U3RyaW5nLmZyb21Db2RlUG9pbnQoZS5wZWVrKCkpLGUuYWR2YW5jZSgpO3JldHVybiBpfXByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpe2xldCB0PSgpPT50aGlzLmludGVybmFsU3RhdGUucGVlaztpZig5Mj09PXQoKSlpZih0aGlzLmludGVybmFsU3RhdGU9ey4uLnRoaXMuc3RhdGV9LHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksMTEwPT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMDtlbHNlIGlmKDExND09PXQoKSl0aGlzLnN0YXRlLnBlZWs9MTM7ZWxzZSBpZigxMTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTExO2Vsc2UgaWYoMTE2PT09dCgpKXRoaXMuc3RhdGUucGVlaz05O2Vsc2UgaWYoOTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTg7ZWxzZSBpZigxMDI9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTEyO2Vsc2UgaWYoMTE3PT09dCgpKWlmKHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdCgpPT09ZnApe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSk7bGV0IGU9dGhpcy5jbG9uZSgpLGk9MDtmb3IoO3QoKSE9PXR1Oyl0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSxpKX1lbHNle2xldCBlPXRoaXMuY2xvbmUoKTt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSw0KX1lbHNlIGlmKDEyMD09PXQoKSl7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKTtsZXQgZT10aGlzLmNsb25lKCk7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSwyKX1lbHNlIGlmKHg5KHQoKSkpe2xldCBlPSIiLGk9MCxyPXRoaXMuY2xvbmUoKTtmb3IoO3g5KHQoKSkmJmk8Mzspcj10aGlzLmNsb25lKCksZSs9U3RyaW5nLmZyb21Db2RlUG9pbnQodCgpKSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9cGFyc2VJbnQoZSw4KSx0aGlzLmludGVybmFsU3RhdGU9ci5pbnRlcm5hbFN0YXRlfWVsc2UgV3EodGhpcy5pbnRlcm5hbFN0YXRlLnBlZWspPyh0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuc3RhdGU9dGhpcy5pbnRlcm5hbFN0YXRlKTp0aGlzLnN0YXRlLnBlZWs9dGhpcy5pbnRlcm5hbFN0YXRlLnBlZWt9ZGVjb2RlSGV4RGlnaXRzKHQsZSl7bGV0IGk9dGhpcy5pbnB1dC5zbGljZSh0LmludGVybmFsU3RhdGUub2Zmc2V0LHQuaW50ZXJuYWxTdGF0ZS5vZmZzZXQrZSkscj1wYXJzZUludChpLDE2KTtpZihpc05hTihyKSl0aHJvdyB0LnN0YXRlPXQuaW50ZXJuYWxTdGF0ZSxuZXcgSXgoIkludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIix0KTtyZXR1cm4gcn19LEl4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5tc2c9dCx0aGlzLmN1cnNvcj1lfX0sUGE9Y2xhc3MgZXh0ZW5kcyBNZntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVsZW1lbnROYW1lPXR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIG5ldyBQYSh0LGUsaSl9fSxVMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdE5vZGVzPXQsdGhpcy5lcnJvcnM9ZX19LEZMPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZ2V0VGFnRGVmaW5pdGlvbj10fXBhcnNlKHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQsZSxpPXt9KXtsZXQgcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX2dldFRhZ0RlZmluaXRpb249ZSx0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2s9W10sdGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMudG9rZW5zPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPVtdLHRoaXMuX3Rva2VuaXplSWN1PWkudG9rZW5pemVFeHBhbnNpb25Gb3Jtc3x8ITEsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1pLmludGVycG9sYXRpb25Db25maWd8fCRjLHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzPWkubGVhZGluZ1RyaXZpYUNoYXJzJiZpLmxlYWRpbmdUcml2aWFDaGFycy5tYXAobz0+by5jb2RlUG9pbnRBdCgwKXx8MCk7bGV0IHI9aS5yYW5nZXx8e2VuZFBvczp0LmNvbnRlbnQubGVuZ3RoLHN0YXJ0UG9zOjAsc3RhcnRMaW5lOjAsc3RhcnRDb2w6MH07dGhpcy5fY3Vyc29yPWkuZXNjYXBlZFN0cmluZz9uZXcgTDAodCxyKTpuZXcgRGYodCxyKSx0aGlzLl9wcmVzZXJ2ZUxpbmVFbmRpbmdzPWkucHJlc2VydmVMaW5lRW5kaW5nc3x8ITEsdGhpcy5fZXNjYXBlZFN0cmluZz1pLmVzY2FwZWRTdHJpbmd8fCExLHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcz1pLmkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVc3x8ITE7dHJ5e3RoaXMuX2N1cnNvci5pbml0KCl9Y2F0Y2gobyl7dGhpcy5oYW5kbGVFcnJvcihvKX19X3Byb2Nlc3NDYXJyaWFnZVJldHVybnModCl7cmV0dXJuIHRoaXMuX3ByZXNlcnZlTGluZUVuZGluZ3M/dDp0LnJlcGxhY2UoR3llLCJcbiIpfXRva2VuaXplKCl7Zm9yKDswIT09dGhpcy5fY3Vyc29yLnBlZWsoKTspe2xldCB0PXRoaXMuX2N1cnNvci5jbG9uZSgpO3RyeXt0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjApP3RoaXMuX2F0dGVtcHRDaGFyQ29kZSgzMyk/dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDkxKT90aGlzLl9jb25zdW1lQ2RhdGEodCk6dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ1KT90aGlzLl9jb25zdW1lQ29tbWVudCh0KTp0aGlzLl9jb25zdW1lRG9jVHlwZSh0KTp0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpP3RoaXMuX2NvbnN1bWVUYWdDbG9zZSh0KTp0aGlzLl9jb25zdW1lVGFnT3Blbih0KTp0aGlzLl90b2tlbml6ZUljdSYmdGhpcy5fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl8fHRoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbig1LDgsKCk9PnRoaXMuX2lzVGV4dEVuZCgpLCgpPT50aGlzLl9pc1RhZ1N0YXJ0KCkpfWNhdGNoKGUpe3RoaXMuaGFuZGxlRXJyb3IoZSl9fXRoaXMuX2JlZ2luVG9rZW4oMjQpLHRoaXMuX2VuZFRva2VuKFtdKX1fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl7aWYodGhpcy5pc0V4cGFuc2lvbkZvcm1TdGFydCgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uRm9ybVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKSE9PXR1JiZ0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKT09PXR1KXtpZih0aGlzLl9pc0luRXhwYW5zaW9uQ2FzZSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZUVuZCgpLCEwO2lmKHRoaXMuX2lzSW5FeHBhbnNpb25Gb3JtKCkpcmV0dXJuIHRoaXMuX2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCksITB9cmV0dXJuITF9X2JlZ2luVG9rZW4odCxlPXRoaXMuX2N1cnNvci5jbG9uZSgpKXt0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1lLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9dH1fZW5kVG9rZW4odCxlKXtpZihudWxsPT09dGhpcy5fY3VycmVudFRva2VuU3RhcnQpdGhyb3cgbmV3IEtiKCJQcm9ncmFtbWluZyBlcnJvciAtIGF0dGVtcHRlZCB0byBlbmQgYSB0b2tlbiB3aGVuIHRoZXJlIHdhcyBubyBzdGFydCB0byB0aGUgdG9rZW4iLHRoaXMuX2N1cnJlbnRUb2tlblR5cGUsdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpO2lmKG51bGw9PT10aGlzLl9jdXJyZW50VG9rZW5UeXBlKXRocm93IG5ldyBLYigiUHJvZ3JhbW1pbmcgZXJyb3IgLSBhdHRlbXB0ZWQgdG8gZW5kIGEgdG9rZW4gd2hpY2ggaGFzIG5vIHRva2VuIHR5cGUiLG51bGwsdGhpcy5fY3Vyc29yLmdldFNwYW4odGhpcy5fY3VycmVudFRva2VuU3RhcnQpKTtsZXQgaT17dHlwZTp0aGlzLl9jdXJyZW50VG9rZW5UeXBlLHBhcnRzOnQsc291cmNlU3BhbjooZT8/dGhpcy5fY3Vyc29yKS5nZXRTcGFuKHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0LHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzKX07cmV0dXJuIHRoaXMudG9rZW5zLnB1c2goaSksdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsaX1fY3JlYXRlRXJyb3IodCxlKXt0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpJiYodCs9JyAoRG8geW91IGhhdmUgYW4gdW5lc2NhcGVkICJ7IiBpbiB5b3VyIHRlbXBsYXRlPyBVc2UgInt7IFwne1wnIH19IikgdG8gZXNjYXBlIGl0LiknKTtsZXQgaT1uZXcgS2IodCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlLGUpO3JldHVybiB0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCxuZXcgSmIoaSl9aGFuZGxlRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIEl4JiYodD10aGlzLl9jcmVhdGVFcnJvcih0Lm1zZyx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0LmN1cnNvcikpKSwhKHQgaW5zdGFuY2VvZiBKYikpdGhyb3cgdDt0aGlzLmVycm9ycy5wdXNoKHQuZXJyb3IpfV9hdHRlbXB0Q2hhckNvZGUodCl7cmV0dXJuIHRoaXMuX2N1cnNvci5wZWVrKCk9PT10JiYodGhpcy5fY3Vyc29yLmFkdmFuY2UoKSwhMCl9X2F0dGVtcHRDaGFyQ29kZUNhc2VJbnNlbnNpdGl2ZSh0KXtyZXR1cm4hIWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFU5KG4pPT09VTkodCl9KHRoaXMuX2N1cnNvci5wZWVrKCksdCkmJih0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLCEwKX1fcmVxdWlyZUNoYXJDb2RlKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKCF0aGlzLl9hdHRlbXB0Q2hhckNvZGUodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0U3RyKHQpe2xldCBlPXQubGVuZ3RoO2lmKHRoaXMuX2N1cnNvci5jaGFyc0xlZnQoKTxlKXJldHVybiExO2xldCBpPXRoaXMuX2N1cnNvci5jbG9uZSgpO2ZvcihsZXQgcj0wO3I8ZTtyKyspaWYoIXRoaXMuX2F0dGVtcHRDaGFyQ29kZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiB0aGlzLl9jdXJzb3I9aSwhMTtyZXR1cm4hMH1fYXR0ZW1wdFN0ckNhc2VJbnNlbnNpdGl2ZSh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZighdGhpcy5fYXR0ZW1wdENoYXJDb2RlQ2FzZUluc2Vuc2l0aXZlKHQuY2hhckNvZGVBdChlKSkpcmV0dXJuITE7cmV0dXJuITB9X3JlcXVpcmVTdHIodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYoIXRoaXMuX2F0dGVtcHRTdHIodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpe2Zvcig7IXQodGhpcy5fY3Vyc29yLnBlZWsoKSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlcXVpcmVDaGFyQ29kZVVudGlsRm4odCxlKXtsZXQgaT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpLHRoaXMuX2N1cnNvci5kaWZmKGkpPGUpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oaSkpfV9hdHRlbXB0VW50aWxDaGFyKHQpe2Zvcig7dGhpcy5fY3Vyc29yLnBlZWsoKSE9PXQ7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlYWRDaGFyKCl7bGV0IHQ9U3RyaW5nLmZyb21Db2RlUG9pbnQodGhpcy5fY3Vyc29yLnBlZWsoKSk7cmV0dXJuIHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdH1fY29uc3VtZUVudGl0eSh0KXt0aGlzLl9iZWdpblRva2VuKDkpO2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDM1KSl7bGV0IGk9dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDEyMCl8fHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg4OCkscj10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKFl5ZSksNTkhPXRoaXMuX2N1cnNvci5wZWVrKCkpdGhyb3cgdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSx0aGlzLl9jcmVhdGVFcnJvcihmdW5jdGlvbihuLHQpe3JldHVybmBVbmFibGUgdG8gcGFyc2UgZW50aXR5ICIke3R9IiAtICR7bn0gY2hhcmFjdGVyIHJlZmVyZW5jZSBlbnRpdGllcyBtdXN0IGVuZCB3aXRoICI7ImB9KGk/WmIuSEVYOlpiLkRFQyx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO2xldCBvPXRoaXMuX2N1cnNvci5nZXRDaGFycyhyKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpO3RyeXtsZXQgcz1wYXJzZUludChvLGk/MTY6MTApO3RoaXMuX2VuZFRva2VuKFtTdHJpbmcuZnJvbUNoYXJDb2RlKHMpLHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKV0pfWNhdGNoe3Rocm93IHRoaXMuX2NyZWF0ZUVycm9yKFY5KHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oKSl9fWVsc2V7bGV0IGk9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihYeWUpLDU5IT10aGlzLl9jdXJzb3IucGVlaygpKXRoaXMuX2JlZ2luVG9rZW4odCxlKSx0aGlzLl9jdXJzb3I9aSx0aGlzLl9lbmRUb2tlbihbIiYiXSk7ZWxzZXtsZXQgcj10aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSk7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTtsZXQgbz1IMVtyXTtpZighbyl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihWOShyKSx0aGlzLl9jdXJzb3IuZ2V0U3BhbihlKSk7dGhpcy5fZW5kVG9rZW4oW28sYCYke3J9O2BdKX19fV9jb25zdW1lUmF3VGV4dCh0LGUpe3RoaXMuX2JlZ2luVG9rZW4odD82OjcpO2xldCBpPVtdO2Zvcig7Oyl7bGV0IHI9dGhpcy5fY3Vyc29yLmNsb25lKCksbz1lKCk7aWYodGhpcy5fY3Vyc29yPXIsbylicmVhazt0JiYzOD09PXRoaXMuX2N1cnNvci5wZWVrKCk/KHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKGkuam9pbigiIikpXSksaS5sZW5ndGg9MCx0aGlzLl9jb25zdW1lRW50aXR5KDYpLHRoaXMuX2JlZ2luVG9rZW4oNikpOmkucHVzaCh0aGlzLl9yZWFkQ2hhcigpKX10aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhpLmpvaW4oIiIpKV0pfV9jb25zdW1lQ29tbWVudCh0KXt0aGlzLl9iZWdpblRva2VuKDEwLHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NSksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2NvbnN1bWVSYXdUZXh0KCExLCgpPT50aGlzLl9hdHRlbXB0U3RyKCItLVx4M2UiKSksdGhpcy5fYmVnaW5Ub2tlbigxMSksdGhpcy5fcmVxdWlyZVN0cigiLS1ceDNlIiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lQ2RhdGEodCl7dGhpcy5fYmVnaW5Ub2tlbigxMix0KSx0aGlzLl9yZXF1aXJlU3RyKCJDREFUQVsiKSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fY29uc3VtZVJhd1RleHQoITEsKCk9PnRoaXMuX2F0dGVtcHRTdHIoIl1dPiIpKSx0aGlzLl9iZWdpblRva2VuKDEzKSx0aGlzLl9yZXF1aXJlU3RyKCJdXT4iKSx0aGlzLl9lbmRUb2tlbihbXSl9X2NvbnN1bWVEb2NUeXBlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTgsdCk7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7dGhpcy5fYXR0ZW1wdFVudGlsQ2hhcig2Mik7bGV0IGk9dGhpcy5fY3Vyc29yLmdldENoYXJzKGUpO3RoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW2ldKX1fY29uc3VtZVByZWZpeEFuZE5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPSIiO2Zvcig7NTghPT10aGlzLl9jdXJzb3IucGVlaygpJiYhKCgobj10aGlzLl9jdXJzb3IucGVlaygpKTw5N3x8MTIyPG4pJiYobjw2NXx8OTA8bikmJihuPDQ4fHxuPjU3KSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCk7dmFyIG47bGV0IGk7cmV0dXJuIDU4PT09dGhpcy5fY3Vyc29yLnBlZWsoKT8oZT10aGlzLl9jdXJzb3IuZ2V0Q2hhcnModCksdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSxpPXRoaXMuX2N1cnNvci5jbG9uZSgpKTppPXQsdGhpcy5fcmVxdWlyZUNoYXJDb2RlVW50aWxGbihIOSwiIj09PWU/MDoxKSxbZSx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSldfV9jb25zdW1lVGFnT3Blbih0KXtsZXQgZSxpLHI7dHJ5e2lmKCFtMyh0aGlzLl9jdXJzb3IucGVlaygpKSl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihVYih0aGlzLl9jdXJzb3IucGVlaygpKSx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0KSk7Zm9yKHI9dGhpcy5fY29uc3VtZVRhZ09wZW5TdGFydCh0KSxpPXIucGFydHNbMF0sZT1yLnBhcnRzWzFdLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpOzQ3IT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmNjIhPT10aGlzLl9jdXJzb3IucGVlaygpJiY2MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJjAhPT10aGlzLl9jdXJzb3IucGVlaygpOyl0aGlzLl9jb25zdW1lQXR0cmlidXRlTmFtZSgpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MSkmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9jb25zdW1lQXR0cmlidXRlVmFsdWUoKSksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSk7dGhpcy5fY29uc3VtZVRhZ09wZW5FbmQoKX1jYXRjaChzKXtpZihzIGluc3RhbmNlb2YgSmIpcmV0dXJuIHZvaWQocj9yLnR5cGU9NDoodGhpcy5fYmVnaW5Ub2tlbig1LHQpLHRoaXMuX2VuZFRva2VuKFsiPCJdKSkpO3Rocm93IHN9bGV0IG89dGhpcy5fZ2V0VGFnRGVmaW5pdGlvbihlKS5nZXRDb250ZW50VHlwZShpKTtvPT09ZmwuUkFXX1RFWFQ/dGhpcy5fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UoaSxlLCExKTpvPT09ZmwuRVNDQVBBQkxFX1JBV19URVhUJiZ0aGlzLl9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZShpLGUsITApfV9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZSh0LGUsaSl7dGhpcy5fY29uc3VtZVJhd1RleHQoaSwoKT0+ISEodGhpcy5fYXR0ZW1wdENoYXJDb2RlKDYwKSYmdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRTdHJDYXNlSW5zZW5zaXRpdmUoZSkpKSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MikpKSx0aGlzLl9iZWdpblRva2VuKDMpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZVVudGlsRm4ocj0+NjI9PT1yLDMpLHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW3QsZV0pfV9jb25zdW1lVGFnT3BlblN0YXJ0KHQpe3RoaXMuX2JlZ2luVG9rZW4oMCx0KTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3JldHVybiB0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUF0dHJpYnV0ZU5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IucGVlaygpO2lmKDM5PT09dHx8MzQ9PT10KXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKFViKHQpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO3RoaXMuX2JlZ2luVG9rZW4oMTQpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVBdHRyaWJ1dGVWYWx1ZSgpe2lmKDM5PT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8MzQ9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgZT10aGlzLl9jdXJzb3IucGVlaygpO3RoaXMuX2NvbnN1bWVRdW90ZShlKTtsZXQgaT0oKT0+dGhpcy5fY3Vyc29yLnBlZWsoKT09PWU7dGhpcy5fY29uc3VtZVdpdGhJbnRlcnBvbGF0aW9uKDE2LDE3LGksaSksdGhpcy5fY29uc3VtZVF1b3RlKGUpfWVsc2V7bGV0IGU9KCk9Pkg5KHRoaXMuX2N1cnNvci5wZWVrKCkpO3RoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbigxNiwxNyxlLGUpfX1fY29uc3VtZVF1b3RlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTUpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSh0KSx0aGlzLl9lbmRUb2tlbihbU3RyaW5nLmZyb21Db2RlUG9pbnQodCldKX1fY29uc3VtZVRhZ09wZW5FbmQoKXtsZXQgdD10aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpPzI6MTt0aGlzLl9iZWdpblRva2VuKHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg2MiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lVGFnQ2xvc2UodCl7dGhpcy5fYmVnaW5Ub2tlbigzLHQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKDYyKSx0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUV4cGFuc2lvbkZvcm1TdGFydCgpe3RoaXMuX2JlZ2luVG9rZW4oMTkpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDE5KSx0aGlzLl9iZWdpblRva2VuKDcpO2xldCB0PXRoaXMuX3JlYWRVbnRpbCg0NCksZT10aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKHQpO2lmKHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcyl0aGlzLl9lbmRUb2tlbihbZV0pO2Vsc2V7bGV0IHI9dGhpcy5fZW5kVG9rZW4oW3RdKTtlIT09dCYmdGhpcy5ub25Ob3JtYWxpemVkSWN1RXhwcmVzc2lvbnMucHVzaChyKX10aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oNyk7bGV0IGk9dGhpcy5fcmVhZFVudGlsKDQ0KTt0aGlzLl9lbmRUb2tlbihbaV0pLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSl9X2NvbnN1bWVFeHBhbnNpb25DYXNlU3RhcnQoKXt0aGlzLl9iZWdpblRva2VuKDIwKTtsZXQgdD10aGlzLl9yZWFkVW50aWwoZnApLnRyaW0oKTt0aGlzLl9lbmRUb2tlbihbdF0pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oMjEpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDIxKX1fY29uc3VtZUV4cGFuc2lvbkNhc2VFbmQoKXt0aGlzLl9iZWdpblRva2VuKDIyKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodHUpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucG9wKCl9X2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCl7dGhpcy5fYmVnaW5Ub2tlbigyMyksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKHR1KSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLnBvcCgpfV9jb25zdW1lV2l0aEludGVycG9sYXRpb24odCxlLGkscil7dGhpcy5fYmVnaW5Ub2tlbih0KTtsZXQgbz1bXTtmb3IoOyFpKCk7KXtsZXQgcz10aGlzLl9jdXJzb3IuY2xvbmUoKTt0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnJiZ0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0scyksby5sZW5ndGg9MCx0aGlzLl9jb25zdW1lSW50ZXJwb2xhdGlvbihlLHMsciksdGhpcy5fYmVnaW5Ub2tlbih0KSk6Mzg9PT10aGlzLl9jdXJzb3IucGVlaygpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0pLG8ubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUVudGl0eSh0KSx0aGlzLl9iZWdpblRva2VuKHQpKTpvLnB1c2godGhpcy5fcmVhZENoYXIoKSl9dGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKG8uam9pbigiIikpXSl9X2NvbnN1bWVJbnRlcnBvbGF0aW9uKHQsZSxpKXtsZXQgcj1bXTt0aGlzLl9iZWdpblRva2VuKHQsZSksci5wdXNoKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpO2xldCBvPXRoaXMuX2N1cnNvci5jbG9uZSgpLHM9bnVsbCxhPSExO2Zvcig7MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJihudWxsPT09aXx8IWkoKSk7KXtsZXQgbD10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9pc1RhZ1N0YXJ0KCkpcmV0dXJuIHRoaXMuX2N1cnNvcj1sLHIucHVzaCh0aGlzLl9nZXRQcm9jZXNzZWRDaGFycyhvLGwpKSx2b2lkIHRoaXMuX2VuZFRva2VuKHIpO2lmKG51bGw9PT1zKXtpZih0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuZW5kKSlyZXR1cm4gci5wdXNoKHRoaXMuX2dldFByb2Nlc3NlZENoYXJzKG8sbCkpLHIucHVzaCh0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLmVuZCksdm9pZCB0aGlzLl9lbmRUb2tlbihyKTt0aGlzLl9hdHRlbXB0U3RyKCIvLyIpJiYoYT0hMCl9bGV0IGM9dGhpcy5fY3Vyc29yLnBlZWsoKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLDkyPT09Yz90aGlzLl9jdXJzb3IuYWR2YW5jZSgpOmM9PT1zP3M9bnVsbDohYSYmbnVsbD09PXMmJnVMKGMpJiYocz1jKX1yLnB1c2godGhpcy5fZ2V0UHJvY2Vzc2VkQ2hhcnMobyx0aGlzLl9jdXJzb3IpKSx0aGlzLl9lbmRUb2tlbihyKX1fZ2V0UHJvY2Vzc2VkQ2hhcnModCxlKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhlLmdldENoYXJzKHQpKX1faXNUZXh0RW5kKCl7cmV0dXJuISEodGhpcy5faXNUYWdTdGFydCgpfHwwPT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8dGhpcy5fdG9rZW5pemVJY3UmJiF0aGlzLl9pbkludGVycG9sYXRpb24mJih0aGlzLmlzRXhwYW5zaW9uRm9ybVN0YXJ0KCl8fHRoaXMuX2N1cnNvci5wZWVrKCk9PT10dSYmdGhpcy5faXNJbkV4cGFuc2lvbkNhc2UoKSkpfV9pc1RhZ1N0YXJ0KCl7aWYoNjA9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKTt0LmFkdmFuY2UoKTtsZXQgZT10LnBlZWsoKTtpZig5Nzw9ZSYmZTw9MTIyfHw2NTw9ZSYmZTw9OTB8fDQ3PT09ZXx8MzM9PT1lKXJldHVybiEwfXJldHVybiExfV9yZWFkVW50aWwodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7cmV0dXJuIHRoaXMuX2F0dGVtcHRVbnRpbENoYXIodCksdGhpcy5fY3Vyc29yLmdldENoYXJzKGUpfV9pc0luRXhwYW5zaW9uQ2FzZSgpe3JldHVybiB0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoPjAmJjIxPT09dGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrW3RoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGgtMV19X2lzSW5FeHBhbnNpb25Gb3JtKCl7cmV0dXJuIHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGg+MCYmMTk9PT10aGlzLl9leHBhbnNpb25DYXNlU3RhY2tbdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLmxlbmd0aC0xXX1pc0V4cGFuc2lvbkZvcm1TdGFydCgpe2lmKHRoaXMuX2N1cnNvci5wZWVrKCkhPT1mcClyZXR1cm4hMTtpZih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPXRoaXMuX2F0dGVtcHRTdHIodGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZy5zdGFydCk7cmV0dXJuIHRoaXMuX2N1cnNvcj10LCFlfXJldHVybiEwfX0obmV3IEkxKG4sdCksZSxpKTtyZXR1cm4gci50b2tlbml6ZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50b2tlbnM9dCx0aGlzLmVycm9ycz1lLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPWl9fShmdW5jdGlvbihuKXtsZXQgZSx0PVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO2UmJjU9PT1lLnR5cGUmJjU9PT1yLnR5cGV8fGUmJjE2PT09ZS50eXBlJiYxNj09PXIudHlwZT8oZS5wYXJ0c1swXSs9ci5wYXJ0c1swXSxlLnNvdXJjZVNwYW4uZW5kPXIuc291cmNlU3Bhbi5lbmQpOihlPXIsdC5wdXNoKGUpKX1yZXR1cm4gdH0oci50b2tlbnMpLHIuZXJyb3JzLHIubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zKX0odCxlLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbixpKSxvPW5ldyBQeChyLnRva2Vucyx0aGlzLmdldFRhZ0RlZmluaXRpb24pO3JldHVybiBvLmJ1aWxkKCksbmV3IFUxKG8ucm9vdE5vZGVzLHIuZXJyb3JzLmNvbmNhdChvLmVycm9ycykpfX0sUHg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRva2Vucz10LHRoaXMuZ2V0VGFnRGVmaW5pdGlvbj1lLHRoaXMuX2luZGV4PS0xLHRoaXMuX2VsZW1lbnRTdGFjaz1bXSx0aGlzLnJvb3ROb2Rlcz1bXSx0aGlzLmVycm9ycz1bXSx0aGlzLl9hZHZhbmNlKCl9YnVpbGQoKXtmb3IoOzI0IT09dGhpcy5fcGVlay50eXBlOykwPT09dGhpcy5fcGVlay50eXBlfHw0PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVTdGFydFRhZyh0aGlzLl9hZHZhbmNlKCkpOjM9PT10aGlzLl9wZWVrLnR5cGU/dGhpcy5fY29uc3VtZUVuZFRhZyh0aGlzLl9hZHZhbmNlKCkpOjEyPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNkYXRhKHRoaXMuX2FkdmFuY2UoKSkpOjEwPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNvbW1lbnQodGhpcy5fYWR2YW5jZSgpKSk6NT09PXRoaXMuX3BlZWsudHlwZXx8Nz09PXRoaXMuX3BlZWsudHlwZXx8Nj09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVUZXh0KHRoaXMuX2FkdmFuY2UoKSkpOjE5PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVFeHBhbnNpb24odGhpcy5fYWR2YW5jZSgpKTp0aGlzLl9hZHZhbmNlKCl9X2FkdmFuY2UoKXtsZXQgdD10aGlzLl9wZWVrO3JldHVybiB0aGlzLl9pbmRleDx0aGlzLnRva2Vucy5sZW5ndGgtMSYmdGhpcy5faW5kZXgrKyx0aGlzLl9wZWVrPXRoaXMudG9rZW5zW3RoaXMuX2luZGV4XSx0fV9hZHZhbmNlSWYodCl7cmV0dXJuIHRoaXMuX3BlZWsudHlwZT09PXQ/dGhpcy5fYWR2YW5jZSgpOm51bGx9X2NvbnN1bWVDZGF0YSh0KXt0aGlzLl9jb25zdW1lVGV4dCh0aGlzLl9hZHZhbmNlKCkpLHRoaXMuX2FkdmFuY2VJZigxMyl9X2NvbnN1bWVDb21tZW50KHQpe2xldCBlPXRoaXMuX2FkdmFuY2VJZig3KTt0aGlzLl9hZHZhbmNlSWYoMTEpO2xldCBpPW51bGwhPWU/ZS5wYXJ0c1swXS50cmltKCk6bnVsbDt0aGlzLl9hZGRUb1BhcmVudChuZXcgVjEoaSx0LnNvdXJjZVNwYW4pKX1fY29uc3VtZUV4cGFuc2lvbih0KXtsZXQgZT10aGlzLl9hZHZhbmNlKCksaT10aGlzLl9hZHZhbmNlKCkscj1bXTtmb3IoOzIwPT09dGhpcy5fcGVlay50eXBlOyl7bGV0IHM9dGhpcy5fcGFyc2VFeHBhbnNpb25DYXNlKCk7aWYoIXMpcmV0dXJuO3IucHVzaChzKX1pZigyMyE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdm9pZCB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHRoaXMuX3BlZWsuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpO2xldCBvPW5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsdGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KTt0aGlzLl9hZGRUb1BhcmVudChuZXcgTjAoZS5wYXJ0c1swXSxpLnBhcnRzWzBdLHIsbyxlLnNvdXJjZVNwYW4pKSx0aGlzLl9hZHZhbmNlKCl9X3BhcnNlRXhwYW5zaW9uQ2FzZSgpe2xldCB0PXRoaXMuX2FkdmFuY2UoKTtpZigyMSE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0aGlzLl9wZWVrLnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ3snLiIpKSxudWxsO2xldCBlPXRoaXMuX2FkdmFuY2UoKSxpPXRoaXMuX2NvbGxlY3RFeHBhbnNpb25FeHBUb2tlbnMoZSk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fYWR2YW5jZSgpO2kucHVzaCh7dHlwZToyNCxwYXJ0czpbXSxzb3VyY2VTcGFuOnIuc291cmNlU3Bhbn0pO2xldCBvPW5ldyBQeChpLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbik7aWYoby5idWlsZCgpLG8uZXJyb3JzLmxlbmd0aD4wKXJldHVybiB0aGlzLmVycm9ycz10aGlzLmVycm9ycy5jb25jYXQoby5lcnJvcnMpLG51bGw7bGV0IHM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGE9bmV3IFRvKGUuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLGUuc291cmNlU3Bhbi5mdWxsU3RhcnQpO3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnZhbHVlPXQsdGhpcy5leHByZXNzaW9uPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy52YWx1ZVNvdXJjZVNwYW49cix0aGlzLmV4cFNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uQ2FzZSh0aGlzLGUpfX0odC5wYXJ0c1swXSxvLnJvb3ROb2RlcyxzLHQuc291cmNlU3BhbixhKX1fY29sbGVjdEV4cGFuc2lvbkV4cFRva2Vucyh0KXtsZXQgZT1bXSxpPVsyMV07Zm9yKDs7KXtpZigoMTk9PT10aGlzLl9wZWVrLnR5cGV8fDIxPT09dGhpcy5fcGVlay50eXBlKSYmaS5wdXNoKHRoaXMuX3BlZWsudHlwZSksMjI9PT10aGlzLl9wZWVrLnR5cGUpe2lmKCF6OShpLDIxKSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0LnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKSxudWxsO2lmKGkucG9wKCksMD09PWkubGVuZ3RoKXJldHVybiBlfWlmKDIzPT09dGhpcy5fcGVlay50eXBlKXtpZighejkoaSwxOSkpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG51bGwsdC5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd9Jy4iKSksbnVsbDtpLnBvcCgpfWlmKDI0PT09dGhpcy5fcGVlay50eXBlKXJldHVybiB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHQuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpLG51bGw7ZS5wdXNoKHRoaXMuX2FkdmFuY2UoKSl9fV9jb25zdW1lVGV4dCh0KXtsZXQgZT1bdF0saT10LnNvdXJjZVNwYW4scj10LnBhcnRzWzBdO2lmKHIubGVuZ3RoPjAmJiJcbiI9PT1yWzBdKXtsZXQgbz10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7bnVsbCE9byYmMD09PW8uY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oby5uYW1lKS5pZ25vcmVGaXJzdExmJiYocj1yLnN1YnN0cmluZygxKSxlWzBdPXt0eXBlOnQudHlwZSxzb3VyY2VTcGFuOnQuc291cmNlU3BhbixwYXJ0czpbcl19KX1mb3IoOzg9PT10aGlzLl9wZWVrLnR5cGV8fDU9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXQ9dGhpcy5fYWR2YW5jZSgpLGUucHVzaCh0KSxyKz04PT09dC50eXBlP3QucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT10LnR5cGU/dC5wYXJ0c1swXTp0LnBhcnRzLmpvaW4oIiIpO3IubGVuZ3RoPjAmJnRoaXMuX2FkZFRvUGFyZW50KG5ldyBGMChyLG5ldyBUbyhpLnN0YXJ0LHQuc291cmNlU3Bhbi5lbmQsaS5mdWxsU3RhcnQsaS5kZXRhaWxzKSxlKSl9X2Nsb3NlVm9pZEVsZW1lbnQoKXtsZXQgdD10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7dCYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKHQubmFtZSkuaXNWb2lkJiZ0aGlzLl9lbGVtZW50U3RhY2sucG9wKCl9X2NvbnN1bWVTdGFydFRhZyh0KXtsZXRbZSxpXT10LnBhcnRzLHI9W107Zm9yKDsxND09PXRoaXMuX3BlZWsudHlwZTspci5wdXNoKHRoaXMuX2NvbnN1bWVBdHRyKHRoaXMuX2FkdmFuY2UoKSkpO2xldCBvPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZShlLGksdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKSxzPSExO2lmKDI9PT10aGlzLl9wZWVrLnR5cGUpe3RoaXMuX2FkdmFuY2UoKSxzPSEwO2xldCBkPXRoaXMuZ2V0VGFnRGVmaW5pdGlvbihvKTtkLmNhblNlbGZDbG9zZXx8bnVsbCE9PVk3KG8pfHxkLmlzVm9pZHx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobyx0LnNvdXJjZVNwYW4sYE9ubHkgdm9pZCBhbmQgZm9yZWlnbiBlbGVtZW50cyBjYW4gYmUgc2VsZiBjbG9zZWQgIiR7dC5wYXJ0c1sxXX0iYCkpfWVsc2UgMT09PXRoaXMuX3BlZWsudHlwZSYmKHRoaXMuX2FkdmFuY2UoKSxzPSExKTtsZXQgYT10aGlzLl9wZWVrLnNvdXJjZVNwYW4uZnVsbFN0YXJ0LGw9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLHU9bmV3IEF4KG8scixbXSxsLGMsdm9pZCAwKTt0aGlzLl9wdXNoRWxlbWVudCh1KSxzP3RoaXMuX3BvcEVsZW1lbnQobyxsKTo0PT09dC50eXBlJiYodGhpcy5fcG9wRWxlbWVudChvLG51bGwpLHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG8sbCxgT3BlbmluZyB0YWcgIiR7b30iIG5vdCB0ZXJtaW5hdGVkLmApKSl9X3B1c2hFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtlJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oZS5uYW1lKS5pc0Nsb3NlZEJ5Q2hpbGQodC5uYW1lKSYmdGhpcy5fZWxlbWVudFN0YWNrLnBvcCgpLHRoaXMuX2FkZFRvUGFyZW50KHQpLHRoaXMuX2VsZW1lbnRTdGFjay5wdXNoKHQpfV9jb25zdW1lRW5kVGFnKHQpe2xldCBlPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZSh0LnBhcnRzWzBdLHQucGFydHNbMV0sdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKTt0aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaXNWb2lkP3RoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKGUsdC5zb3VyY2VTcGFuLGBWb2lkIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGVuZCB0YWdzICIke3QucGFydHNbMV19ImApKTp0aGlzLl9wb3BFbGVtZW50KGUsdC5zb3VyY2VTcGFuKXx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUoZSx0LnNvdXJjZVNwYW4sYFVuZXhwZWN0ZWQgY2xvc2luZyB0YWcgIiR7ZX0iLiBJdCBtYXkgaGFwcGVuIHdoZW4gdGhlIHRhZyBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCBieSBhbm90aGVyIHRhZy4gRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2Nsb3NpbmctZWxlbWVudHMtdGhhdC1oYXZlLWltcGxpZWQtZW5kLXRhZ3NgKSl9X3BvcEVsZW1lbnQodCxlKXtsZXQgaT0hMTtmb3IobGV0IHI9dGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC0xO3I+PTA7ci0tKXtsZXQgbz10aGlzLl9lbGVtZW50U3RhY2tbcl07aWYoby5uYW1lPT09dClyZXR1cm4gby5lbmRTb3VyY2VTcGFuPWUsby5zb3VyY2VTcGFuLmVuZD1udWxsIT09ZT9lLmVuZDpvLnNvdXJjZVNwYW4uZW5kLHRoaXMuX2VsZW1lbnRTdGFjay5zcGxpY2Uocix0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLXIpLCFpO3RoaXMuZ2V0VGFnRGVmaW5pdGlvbihvLm5hbWUpLmNsb3NlZEJ5UGFyZW50fHwoaT0hMCl9cmV0dXJuITF9X2NvbnN1bWVBdHRyKHQpe2xldCBlPWpOKHQucGFydHNbMF0sdC5wYXJ0c1sxXSksaT10LnNvdXJjZVNwYW4uZW5kOzE1PT09dGhpcy5fcGVlay50eXBlJiZ0aGlzLl9hZHZhbmNlKCk7bGV0IHMsYSxyPSIiLG89W107aWYoMTY9PT10aGlzLl9wZWVrLnR5cGUpZm9yKHM9dGhpcy5fcGVlay5zb3VyY2VTcGFuLGE9dGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZDsxNj09PXRoaXMuX3BlZWsudHlwZXx8MTc9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXtsZXQgdT10aGlzLl9hZHZhbmNlKCk7by5wdXNoKHUpLHIrPTE3PT09dS50eXBlP3UucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT11LnR5cGU/dS5wYXJ0c1swXTp1LnBhcnRzLmpvaW4oIiIpLGE9aT11LnNvdXJjZVNwYW4uZW5kfTE1PT09dGhpcy5fcGVlay50eXBlJiYoaT10aGlzLl9hZHZhbmNlKCkuc291cmNlU3Bhbi5lbmQpO2xldCBjPXMmJmEmJm5ldyBUbyhzLnN0YXJ0LGEscy5mdWxsU3RhcnQpO3JldHVybiBuZXcgUkwoZSxyLG5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsaSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSx0LnNvdXJjZVNwYW4sYyxvLmxlbmd0aD4wP286dm9pZCAwLHZvaWQgMCl9X2dldFBhcmVudEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aD4wP3RoaXMuX2VsZW1lbnRTdGFja1t0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLTFdOm51bGx9X2FkZFRvUGFyZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtudWxsIT1lP2UuY2hpbGRyZW4ucHVzaCh0KTp0aGlzLnJvb3ROb2Rlcy5wdXNoKHQpfV9nZXRFbGVtZW50RnVsbE5hbWUodCxlLGkpe2lmKCIiPT09dCYmIiI9PT0odD10aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaW1wbGljaXROYW1lc3BhY2VQcmVmaXh8fCIiKSYmbnVsbCE9aSl7bGV0IHI9Y2QoaS5uYW1lKVsxXTt0aGlzLmdldFRhZ0RlZmluaXRpb24ocikucHJldmVudE5hbWVzcGFjZUluaGVyaXRhbmNlfHwodD1ZNyhpLm5hbWUpKX1yZXR1cm4gak4odCxlKX19O2Z1bmN0aW9uIHo5KG4sdCl7cmV0dXJuIG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV09PT10fWZ1bmN0aW9uIGo5KG4sdCl7cmV0dXJuIHZvaWQgMCE9PUgxW3RdP0gxW3RdfHxuOi9eI3hbYS1mMC05XSskL2kudGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDIpLDE2KSk6L14jXGQrJC8udGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDEpLDEwKSk6bn12YXIgcDEsTkw9Y2xhc3MgZXh0ZW5kcyBGTHtjb25zdHJ1Y3Rvcigpe3N1cGVyKGUzKX1wYXJzZSh0LGUsaSl7cmV0dXJuIHN1cGVyLnBhcnNlKHQsZSxpKX19LEpxPSJuZ1ByZXNlcnZlV2hpdGVzcGFjZXMiLEp5ZT1uZXcgU2V0KFsicHJlIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInNjcmlwdCIsInN0eWxlIl0pLCRxPSIgXGZcblxyXHRcdlx1MTY4MFx1MTgwZVx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmYiLCR5ZT1uZXcgUmVnRXhwKGBbXiR7JHF9XWApLGViZT1uZXcgUmVnRXhwKGBbJHskcX1dezIsfWAsImciKTtmdW5jdGlvbiBlWShuKXtyZXR1cm4gbi5yZXBsYWNlKG5ldyBSZWdFeHAoIlx1ZTUwMCIsImciKSwiICIpfWZ1bmN0aW9uIHRZKG4pe3JldHVybiBlWShuKS5yZXBsYWNlKGViZSwiICIpfWZ1bmN0aW9uIHoxKG4sdD0hMSl7cmV0dXJuIG1sKE9iamVjdC5rZXlzKG4pLm1hcChlPT4oe2tleTplLHF1b3RlZDp0LHZhbHVlOm5bZV19KSkpfWZ1bmN0aW9uIEc5KCl7cmV0dXJuIHAxfHwocDE9e30sbzEoWXIuSFRNTCxbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVySFRNTCIsIip8b3V0ZXJIVE1MIl0pLG8xKFlyLlNUWUxFLFsiKnxzdHlsZSJdKSxvMShZci5VUkwsWyIqfGZvcm1BY3Rpb24iLCJhcmVhfGhyZWYiLCJhcmVhfHBpbmciLCJhdWRpb3xzcmMiLCJhfGhyZWYiLCJhfHBpbmciLCJibG9ja3F1b3RlfGNpdGUiLCJib2R5fGJhY2tncm91bmQiLCJkZWx8Y2l0ZSIsImZvcm18YWN0aW9uIiwiaW1nfHNyYyIsImlucHV0fHNyYyIsImluc3xjaXRlIiwicXxjaXRlIiwic291cmNlfHNyYyIsInRyYWNrfHNyYyIsInZpZGVvfHBvc3RlciIsInZpZGVvfHNyYyJdKSxvMShZci5SRVNPVVJDRV9VUkwsWyJhcHBsZXR8Y29kZSIsImFwcGxldHxjb2RlYmFzZSIsImJhc2V8aHJlZiIsImVtYmVkfHNyYyIsImZyYW1lfHNyYyIsImhlYWR8cHJvZmlsZSIsImh0bWx8bWFuaWZlc3QiLCJpZnJhbWV8c3JjIiwibGlua3xocmVmIiwibWVkaWF8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiLCJzY3JpcHR8c3JjIl0pKSxwMX1mdW5jdGlvbiBvMShuLHQpe2ZvcihsZXQgZSBvZiB0KXAxW2UudG9Mb3dlckNhc2UoKV09bn12YXIgQkw9Y2xhc3N7fSxsYmU9WyJbRWxlbWVudF18dGV4dENvbnRlbnQsJWNsYXNzTGlzdCxjbGFzc05hbWUsaWQsaW5uZXJIVE1MLCpiZWZvcmVjb3B5LCpiZWZvcmVjdXQsKmJlZm9yZXBhc3RlLCpjb3B5LCpjdXQsKnBhc3RlLCpzZWFyY2gsKnNlbGVjdHN0YXJ0LCp3ZWJraXRmdWxsc2NyZWVuY2hhbmdlLCp3ZWJraXRmdWxsc2NyZWVuZXJyb3IsKndoZWVsLG91dGVySFRNTCwjc2Nyb2xsTGVmdCwjc2Nyb2xsVG9wLHNsb3QsKm1lc3NhZ2UsKm1vemZ1bGxzY3JlZW5jaGFuZ2UsKm1vemZ1bGxzY3JlZW5lcnJvciwqbW96cG9pbnRlcmxvY2tjaGFuZ2UsKm1venBvaW50ZXJsb2NrZXJyb3IsKndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IsKndlYmdsY29udGV4dGxvc3QsKndlYmdsY29udGV4dHJlc3RvcmVkIiwiW0hUTUxFbGVtZW50XV5bRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJhYmJyLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiLGJkaSxiZG8sY2l0ZSxjb2RlLGRkLGRmbixkdCxlbSxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGksa2JkLG1haW4sbWFyayxuYXYsbm9zY3JpcHQscmIscnAscnQscnRjLHJ1YnkscyxzYW1wLHNlY3Rpb24sc21hbGwsc3Ryb25nLHN1YixzdXAsdSx2YXIsd2JyXltIVE1MRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJtZWRpYV5bSFRNTEVsZW1lbnRdfCFhdXRvcGxheSwhY29udHJvbHMsJWNvbnRyb2xzTGlzdCwlY3Jvc3NPcmlnaW4sI2N1cnJlbnRUaW1lLCFkZWZhdWx0TXV0ZWQsI2RlZmF1bHRQbGF5YmFja1JhdGUsIWRpc2FibGVSZW1vdGVQbGF5YmFjaywhbG9vcCwhbXV0ZWQsKmVuY3J5cHRlZCwqd2FpdGluZ2ZvcmtleSwjcGxheWJhY2tSYXRlLHByZWxvYWQsc3JjLCVzcmNPYmplY3QsI3ZvbHVtZSIsIjpzdmc6XltIVE1MRWxlbWVudF18KmFib3J0LCphdXhjbGljaywqYmx1ciwqY2FuY2VsLCpjYW5wbGF5LCpjYW5wbGF5dGhyb3VnaCwqY2hhbmdlLCpjbGljaywqY2xvc2UsKmNvbnRleHRtZW51LCpjdWVjaGFuZ2UsKmRibGNsaWNrLCpkcmFnLCpkcmFnZW5kLCpkcmFnZW50ZXIsKmRyYWdsZWF2ZSwqZHJhZ292ZXIsKmRyYWdzdGFydCwqZHJvcCwqZHVyYXRpb25jaGFuZ2UsKmVtcHRpZWQsKmVuZGVkLCplcnJvciwqZm9jdXMsKmdvdHBvaW50ZXJjYXB0dXJlLCppbnB1dCwqaW52YWxpZCwqa2V5ZG93biwqa2V5cHJlc3MsKmtleXVwLCpsb2FkLCpsb2FkZWRkYXRhLCpsb2FkZWRtZXRhZGF0YSwqbG9hZHN0YXJ0LCpsb3N0cG9pbnRlcmNhcHR1cmUsKm1vdXNlZG93biwqbW91c2VlbnRlciwqbW91c2VsZWF2ZSwqbW91c2Vtb3ZlLCptb3VzZW91dCwqbW91c2VvdmVyLCptb3VzZXVwLCptb3VzZXdoZWVsLCpwYXVzZSwqcGxheSwqcGxheWluZywqcG9pbnRlcmNhbmNlbCwqcG9pbnRlcmRvd24sKnBvaW50ZXJlbnRlciwqcG9pbnRlcmxlYXZlLCpwb2ludGVybW92ZSwqcG9pbnRlcm91dCwqcG9pbnRlcm92ZXIsKnBvaW50ZXJ1cCwqcHJvZ3Jlc3MsKnJhdGVjaGFuZ2UsKnJlc2V0LCpyZXNpemUsKnNjcm9sbCwqc2Vla2VkLCpzZWVraW5nLCpzZWxlY3QsKnNob3csKnN0YWxsZWQsKnN1Ym1pdCwqc3VzcGVuZCwqdGltZXVwZGF0ZSwqdG9nZ2xlLCp2b2x1bWVjaGFuZ2UsKndhaXRpbmcsJXN0eWxlLCN0YWJJbmRleCIsIjpzdmc6Z3JhcGhpY3NeOnN2Zzp8IiwiOnN2ZzphbmltYXRpb25eOnN2Zzp8KmJlZ2luLCplbmQsKnJlcGVhdCIsIjpzdmc6Z2VvbWV0cnleOnN2Zzp8IiwiOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uXjpzdmc6fCIsIjpzdmc6Z3JhZGllbnReOnN2Zzp8IiwiOnN2Zzp0ZXh0Q29udGVudF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6dGV4dFBvc2l0aW9uaW5nXjpzdmc6dGV4dENvbnRlbnR8IiwiYV5bSFRNTEVsZW1lbnRdfGNoYXJzZXQsY29vcmRzLGRvd25sb2FkLGhhc2gsaG9zdCxob3N0bmFtZSxocmVmLGhyZWZsYW5nLG5hbWUscGFzc3dvcmQscGF0aG5hbWUscGluZyxwb3J0LHByb3RvY29sLHJlZmVycmVyUG9saWN5LHJlbCxyZXYsc2VhcmNoLHNoYXBlLHRhcmdldCx0ZXh0LHR5cGUsdXNlcm5hbWUiLCJhcmVhXltIVE1MRWxlbWVudF18YWx0LGNvb3Jkcyxkb3dubG9hZCxoYXNoLGhvc3QsaG9zdG5hbWUsaHJlZiwhbm9IcmVmLHBhc3N3b3JkLHBhdGhuYW1lLHBpbmcscG9ydCxwcm90b2NvbCxyZWZlcnJlclBvbGljeSxyZWwsc2VhcmNoLHNoYXBlLHRhcmdldCx1c2VybmFtZSIsImF1ZGlvXm1lZGlhfCIsImJyXltIVE1MRWxlbWVudF18Y2xlYXIiLCJiYXNlXltIVE1MRWxlbWVudF18aHJlZix0YXJnZXQiLCJib2R5XltIVE1MRWxlbWVudF18YUxpbmssYmFja2dyb3VuZCxiZ0NvbG9yLGxpbmssKmJlZm9yZXVubG9hZCwqYmx1ciwqZXJyb3IsKmZvY3VzLCpoYXNoY2hhbmdlLCpsYW5ndWFnZWNoYW5nZSwqbG9hZCwqbWVzc2FnZSwqb2ZmbGluZSwqb25saW5lLCpwYWdlaGlkZSwqcGFnZXNob3csKnBvcHN0YXRlLCpyZWplY3Rpb25oYW5kbGVkLCpyZXNpemUsKnNjcm9sbCwqc3RvcmFnZSwqdW5oYW5kbGVkcmVqZWN0aW9uLCp1bmxvYWQsdGV4dCx2TGluayIsImJ1dHRvbl5bSFRNTEVsZW1lbnRdfCFhdXRvZm9jdXMsIWRpc2FibGVkLGZvcm1BY3Rpb24sZm9ybUVuY3R5cGUsZm9ybU1ldGhvZCwhZm9ybU5vVmFsaWRhdGUsZm9ybVRhcmdldCxuYW1lLHR5cGUsdmFsdWUiLCJjYW52YXNeW0hUTUxFbGVtZW50XXwjaGVpZ2h0LCN3aWR0aCIsImNvbnRlbnReW0hUTUxFbGVtZW50XXxzZWxlY3QiLCJkbF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGF0YWxpc3ReW0hUTUxFbGVtZW50XXwiLCJkZXRhaWxzXltIVE1MRWxlbWVudF18IW9wZW4iLCJkaWFsb2deW0hUTUxFbGVtZW50XXwhb3BlbixyZXR1cm5WYWx1ZSIsImRpcl5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGl2XltIVE1MRWxlbWVudF18YWxpZ24iLCJlbWJlZF5bSFRNTEVsZW1lbnRdfGFsaWduLGhlaWdodCxuYW1lLHNyYyx0eXBlLHdpZHRoIiwiZmllbGRzZXReW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbmFtZSIsImZvbnReW0hUTUxFbGVtZW50XXxjb2xvcixmYWNlLHNpemUiLCJmb3JtXltIVE1MRWxlbWVudF18YWNjZXB0Q2hhcnNldCxhY3Rpb24sYXV0b2NvbXBsZXRlLGVuY29kaW5nLGVuY3R5cGUsbWV0aG9kLG5hbWUsIW5vVmFsaWRhdGUsdGFyZ2V0IiwiZnJhbWVeW0hUTUxFbGVtZW50XXxmcmFtZUJvcmRlcixsb25nRGVzYyxtYXJnaW5IZWlnaHQsbWFyZ2luV2lkdGgsbmFtZSwhbm9SZXNpemUsc2Nyb2xsaW5nLHNyYyIsImZyYW1lc2V0XltIVE1MRWxlbWVudF18Y29scywqYmVmb3JldW5sb2FkLCpibHVyLCplcnJvciwqZm9jdXMsKmhhc2hjaGFuZ2UsKmxhbmd1YWdlY2hhbmdlLCpsb2FkLCptZXNzYWdlLCpvZmZsaW5lLCpvbmxpbmUsKnBhZ2VoaWRlLCpwYWdlc2hvdywqcG9wc3RhdGUsKnJlamVjdGlvbmhhbmRsZWQsKnJlc2l6ZSwqc2Nyb2xsLCpzdG9yYWdlLCp1bmhhbmRsZWRyZWplY3Rpb24sKnVubG9hZCxyb3dzIiwiaHJeW0hUTUxFbGVtZW50XXxhbGlnbixjb2xvciwhbm9TaGFkZSxzaXplLHdpZHRoIiwiaGVhZF5bSFRNTEVsZW1lbnRdfCIsImgxLGgyLGgzLGg0LGg1LGg2XltIVE1MRWxlbWVudF18YWxpZ24iLCJodG1sXltIVE1MRWxlbWVudF18dmVyc2lvbiIsImlmcmFtZV5bSFRNTEVsZW1lbnRdfGFsaWduLCFhbGxvd0Z1bGxzY3JlZW4sZnJhbWVCb3JkZXIsaGVpZ2h0LGxvbmdEZXNjLG1hcmdpbkhlaWdodCxtYXJnaW5XaWR0aCxuYW1lLHJlZmVycmVyUG9saWN5LCVzYW5kYm94LHNjcm9sbGluZyxzcmMsc3JjZG9jLHdpZHRoIiwiaW1nXltIVE1MRWxlbWVudF18YWxpZ24sYWx0LGJvcmRlciwlY3Jvc3NPcmlnaW4sI2hlaWdodCwjaHNwYWNlLCFpc01hcCxsb25nRGVzYyxsb3dzcmMsbmFtZSxyZWZlcnJlclBvbGljeSxzaXplcyxzcmMsc3Jjc2V0LHVzZU1hcCwjdnNwYWNlLCN3aWR0aCIsImlucHV0XltIVE1MRWxlbWVudF18YWNjZXB0LGFsaWduLGFsdCxhdXRvY2FwaXRhbGl6ZSxhdXRvY29tcGxldGUsIWF1dG9mb2N1cywhY2hlY2tlZCwhZGVmYXVsdENoZWNrZWQsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCVmaWxlcyxmb3JtQWN0aW9uLGZvcm1FbmN0eXBlLGZvcm1NZXRob2QsIWZvcm1Ob1ZhbGlkYXRlLGZvcm1UYXJnZXQsI2hlaWdodCwhaW5jcmVtZW50YWwsIWluZGV0ZXJtaW5hdGUsbWF4LCNtYXhMZW5ndGgsbWluLCNtaW5MZW5ndGgsIW11bHRpcGxlLG5hbWUscGF0dGVybixwbGFjZWhvbGRlciwhcmVhZE9ubHksIXJlcXVpcmVkLHNlbGVjdGlvbkRpcmVjdGlvbiwjc2VsZWN0aW9uRW5kLCNzZWxlY3Rpb25TdGFydCwjc2l6ZSxzcmMsc3RlcCx0eXBlLHVzZU1hcCx2YWx1ZSwldmFsdWVBc0RhdGUsI3ZhbHVlQXNOdW1iZXIsI3dpZHRoIiwibGleW0hUTUxFbGVtZW50XXx0eXBlLCN2YWx1ZSIsImxhYmVsXltIVE1MRWxlbWVudF18aHRtbEZvciIsImxlZ2VuZF5bSFRNTEVsZW1lbnRdfGFsaWduIiwibGlua15bSFRNTEVsZW1lbnRdfGFzLGNoYXJzZXQsJWNyb3NzT3JpZ2luLCFkaXNhYmxlZCxocmVmLGhyZWZsYW5nLGludGVncml0eSxtZWRpYSxyZWZlcnJlclBvbGljeSxyZWwsJXJlbExpc3QscmV2LCVzaXplcyx0YXJnZXQsdHlwZSIsIm1hcF5bSFRNTEVsZW1lbnRdfG5hbWUiLCJtYXJxdWVlXltIVE1MRWxlbWVudF18YmVoYXZpb3IsYmdDb2xvcixkaXJlY3Rpb24saGVpZ2h0LCNoc3BhY2UsI2xvb3AsI3Njcm9sbEFtb3VudCwjc2Nyb2xsRGVsYXksIXRydWVTcGVlZCwjdnNwYWNlLHdpZHRoIiwibWVudV5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwibWV0YV5bSFRNTEVsZW1lbnRdfGNvbnRlbnQsaHR0cEVxdWl2LG5hbWUsc2NoZW1lIiwibWV0ZXJeW0hUTUxFbGVtZW50XXwjaGlnaCwjbG93LCNtYXgsI21pbiwjb3B0aW11bSwjdmFsdWUiLCJpbnMsZGVsXltIVE1MRWxlbWVudF18Y2l0ZSxkYXRlVGltZSIsIm9sXltIVE1MRWxlbWVudF18IWNvbXBhY3QsIXJldmVyc2VkLCNzdGFydCx0eXBlIiwib2JqZWN0XltIVE1MRWxlbWVudF18YWxpZ24sYXJjaGl2ZSxib3JkZXIsY29kZSxjb2RlQmFzZSxjb2RlVHlwZSxkYXRhLCFkZWNsYXJlLGhlaWdodCwjaHNwYWNlLG5hbWUsc3RhbmRieSx0eXBlLHVzZU1hcCwjdnNwYWNlLHdpZHRoIiwib3B0Z3JvdXBeW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbGFiZWwiLCJvcHRpb25eW0hUTUxFbGVtZW50XXwhZGVmYXVsdFNlbGVjdGVkLCFkaXNhYmxlZCxsYWJlbCwhc2VsZWN0ZWQsdGV4dCx2YWx1ZSIsIm91dHB1dF5bSFRNTEVsZW1lbnRdfGRlZmF1bHRWYWx1ZSwlaHRtbEZvcixuYW1lLHZhbHVlIiwicF5bSFRNTEVsZW1lbnRdfGFsaWduIiwicGFyYW1eW0hUTUxFbGVtZW50XXxuYW1lLHR5cGUsdmFsdWUsdmFsdWVUeXBlIiwicGljdHVyZV5bSFRNTEVsZW1lbnRdfCIsInByZV5bSFRNTEVsZW1lbnRdfCN3aWR0aCIsInByb2dyZXNzXltIVE1MRWxlbWVudF18I21heCwjdmFsdWUiLCJxLGJsb2NrcXVvdGUsY2l0ZV5bSFRNTEVsZW1lbnRdfCIsInNjcmlwdF5bSFRNTEVsZW1lbnRdfCFhc3luYyxjaGFyc2V0LCVjcm9zc09yaWdpbiwhZGVmZXIsZXZlbnQsaHRtbEZvcixpbnRlZ3JpdHksc3JjLHRleHQsdHlwZSIsInNlbGVjdF5bSFRNTEVsZW1lbnRdfGF1dG9jb21wbGV0ZSwhYXV0b2ZvY3VzLCFkaXNhYmxlZCwjbGVuZ3RoLCFtdWx0aXBsZSxuYW1lLCFyZXF1aXJlZCwjc2VsZWN0ZWRJbmRleCwjc2l6ZSx2YWx1ZSIsInNoYWRvd15bSFRNTEVsZW1lbnRdfCIsInNsb3ReW0hUTUxFbGVtZW50XXxuYW1lIiwic291cmNlXltIVE1MRWxlbWVudF18bWVkaWEsc2l6ZXMsc3JjLHNyY3NldCx0eXBlIiwic3Bhbl5bSFRNTEVsZW1lbnRdfCIsInN0eWxlXltIVE1MRWxlbWVudF18IWRpc2FibGVkLG1lZGlhLHR5cGUiLCJjYXB0aW9uXltIVE1MRWxlbWVudF18YWxpZ24iLCJ0aCx0ZF5bSFRNTEVsZW1lbnRdfGFiYnIsYWxpZ24sYXhpcyxiZ0NvbG9yLGNoLGNoT2ZmLCNjb2xTcGFuLGhlYWRlcnMsaGVpZ2h0LCFub1dyYXAsI3Jvd1NwYW4sc2NvcGUsdkFsaWduLHdpZHRoIiwiY29sLGNvbGdyb3VwXltIVE1MRWxlbWVudF18YWxpZ24sY2gsY2hPZmYsI3NwYW4sdkFsaWduLHdpZHRoIiwidGFibGVeW0hUTUxFbGVtZW50XXxhbGlnbixiZ0NvbG9yLGJvcmRlciwlY2FwdGlvbixjZWxsUGFkZGluZyxjZWxsU3BhY2luZyxmcmFtZSxydWxlcyxzdW1tYXJ5LCV0Rm9vdCwldEhlYWQsd2lkdGgiLCJ0cl5bSFRNTEVsZW1lbnRdfGFsaWduLGJnQ29sb3IsY2gsY2hPZmYsdkFsaWduIiwidGZvb3QsdGhlYWQsdGJvZHleW0hUTUxFbGVtZW50XXxhbGlnbixjaCxjaE9mZix2QWxpZ24iLCJ0ZW1wbGF0ZV5bSFRNTEVsZW1lbnRdfCIsInRleHRhcmVhXltIVE1MRWxlbWVudF18YXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLCFhdXRvZm9jdXMsI2NvbHMsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCNtYXhMZW5ndGgsI21pbkxlbmd0aCxuYW1lLHBsYWNlaG9sZGVyLCFyZWFkT25seSwhcmVxdWlyZWQsI3Jvd3Msc2VsZWN0aW9uRGlyZWN0aW9uLCNzZWxlY3Rpb25FbmQsI3NlbGVjdGlvblN0YXJ0LHZhbHVlLHdyYXAiLCJ0aXRsZV5bSFRNTEVsZW1lbnRdfHRleHQiLCJ0cmFja15bSFRNTEVsZW1lbnRdfCFkZWZhdWx0LGtpbmQsbGFiZWwsc3JjLHNyY2xhbmciLCJ1bF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0LHR5cGUiLCJ1bmtub3duXltIVE1MRWxlbWVudF18IiwidmlkZW9ebWVkaWF8I2hlaWdodCxwb3N0ZXIsI3dpZHRoIiwiOnN2ZzphXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzphbmltYXRlXjpzdmc6YW5pbWF0aW9ufCIsIjpzdmc6YW5pbWF0ZU1vdGlvbl46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOmFuaW1hdGVUcmFuc2Zvcm1eOnN2ZzphbmltYXRpb258IiwiOnN2ZzpjaXJjbGVeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmNsaXBQYXRoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZWZzXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZXNjXjpzdmc6fCIsIjpzdmc6ZGlzY2FyZF46c3ZnOnwiLCI6c3ZnOmVsbGlwc2VeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmZlQmxlbmReOnN2Zzp8IiwiOnN2ZzpmZUNvbG9yTWF0cml4Xjpzdmc6fCIsIjpzdmc6ZmVDb21wb25lbnRUcmFuc2Zlcl46c3ZnOnwiLCI6c3ZnOmZlQ29tcG9zaXRlXjpzdmc6fCIsIjpzdmc6ZmVDb252b2x2ZU1hdHJpeF46c3ZnOnwiLCI6c3ZnOmZlRGlmZnVzZUxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVEaXNwbGFjZW1lbnRNYXBeOnN2Zzp8IiwiOnN2ZzpmZURpc3RhbnRMaWdodF46c3ZnOnwiLCI6c3ZnOmZlRHJvcFNoYWRvd146c3ZnOnwiLCI6c3ZnOmZlRmxvb2ReOnN2Zzp8IiwiOnN2ZzpmZUZ1bmNBXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlRnVuY0JeOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9ufCIsIjpzdmc6ZmVGdW5jR146c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUZ1bmNSXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlR2F1c3NpYW5CbHVyXjpzdmc6fCIsIjpzdmc6ZmVJbWFnZV46c3ZnOnwiLCI6c3ZnOmZlTWVyZ2VeOnN2Zzp8IiwiOnN2ZzpmZU1lcmdlTm9kZV46c3ZnOnwiLCI6c3ZnOmZlTW9ycGhvbG9neV46c3ZnOnwiLCI6c3ZnOmZlT2Zmc2V0Xjpzdmc6fCIsIjpzdmc6ZmVQb2ludExpZ2h0Xjpzdmc6fCIsIjpzdmc6ZmVTcGVjdWxhckxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVTcG90TGlnaHReOnN2Zzp8IiwiOnN2ZzpmZVRpbGVeOnN2Zzp8IiwiOnN2ZzpmZVR1cmJ1bGVuY2VeOnN2Zzp8IiwiOnN2ZzpmaWx0ZXJeOnN2Zzp8IiwiOnN2Zzpmb3JlaWduT2JqZWN0Xjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpnXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzppbWFnZV46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6bGluZV46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6bGluZWFyR3JhZGllbnReOnN2ZzpncmFkaWVudHwiLCI6c3ZnOm1wYXRoXjpzdmc6fCIsIjpzdmc6bWFya2VyXjpzdmc6fCIsIjpzdmc6bWFza146c3ZnOnwiLCI6c3ZnOm1ldGFkYXRhXjpzdmc6fCIsIjpzdmc6cGF0aF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6cGF0dGVybl46c3ZnOnwiLCI6c3ZnOnBvbHlnb25eOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnBvbHlsaW5lXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpyYWRpYWxHcmFkaWVudF46c3ZnOmdyYWRpZW50fCIsIjpzdmc6cmVjdF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6c3ZnXjpzdmc6Z3JhcGhpY3N8I2N1cnJlbnRTY2FsZSwjem9vbUFuZFBhbiIsIjpzdmc6c2NyaXB0Xjpzdmc6fHR5cGUiLCI6c3ZnOnNldF46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOnN0b3BeOnN2Zzp8IiwiOnN2ZzpzdHlsZV46c3ZnOnwhZGlzYWJsZWQsbWVkaWEsdGl0bGUsdHlwZSIsIjpzdmc6c3dpdGNoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpzeW1ib2xeOnN2Zzp8IiwiOnN2Zzp0c3Bhbl46c3ZnOnRleHRQb3NpdGlvbmluZ3wiLCI6c3ZnOnRleHReOnN2Zzp0ZXh0UG9zaXRpb25pbmd8IiwiOnN2Zzp0ZXh0UGF0aF46c3ZnOnRleHRDb250ZW50fCIsIjpzdmc6dGl0bGVeOnN2Zzp8IiwiOnN2Zzp1c2VeOnN2ZzpncmFwaGljc3wiLCI6c3ZnOnZpZXdeOnN2Zzp8I3pvb21BbmRQYW4iLCJkYXRhXltIVE1MRWxlbWVudF18dmFsdWUiLCJrZXlnZW5eW0hUTUxFbGVtZW50XXwhYXV0b2ZvY3VzLGNoYWxsZW5nZSwhZGlzYWJsZWQsZm9ybSxrZXl0eXBlLG5hbWUiLCJtZW51aXRlbV5bSFRNTEVsZW1lbnRdfHR5cGUsbGFiZWwsaWNvbiwhZGlzYWJsZWQsIWNoZWNrZWQscmFkaW9ncm91cCwhZGVmYXVsdCIsInN1bW1hcnleW0hUTUxFbGVtZW50XXwiLCJ0aW1lXltIVE1MRWxlbWVudF18ZGF0ZVRpbWUiLCI6c3ZnOmN1cnNvcl46c3ZnOnwiXSxuWT1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKHtjbGFzczoiY2xhc3NOYW1lIixmb3I6Imh0bWxGb3IiLGZvcm1hY3Rpb246ImZvcm1BY3Rpb24iLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9KSksY2JlPUFycmF5LmZyb20oblkpLnJlZHVjZSgobixbdCxlXSk9PihuLnNldCh0LGUpLG4pLG5ldyBNYXApLGoxPWNsYXNzIGV4dGVuZHMgQkx7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3NjaGVtYT1uZXcgTWFwLHRoaXMuX2V2ZW50U2NoZW1hPW5ldyBNYXAsbGJlLmZvckVhY2godD0+e2xldCBlPW5ldyBNYXAsaT1uZXcgU2V0LFtyLG9dPXQuc3BsaXQoInwiKSxzPW8uc3BsaXQoIiwiKSxbYSxsXT1yLnNwbGl0KCJeIik7YS5zcGxpdCgiLCIpLmZvckVhY2godT0+e3RoaXMuX3NjaGVtYS5zZXQodS50b0xvd2VyQ2FzZSgpLGUpLHRoaXMuX2V2ZW50U2NoZW1hLnNldCh1LnRvTG93ZXJDYXNlKCksaSl9KTtsZXQgYz1sJiZ0aGlzLl9zY2hlbWEuZ2V0KGwudG9Mb3dlckNhc2UoKSk7aWYoYyl7Zm9yKGxldFt1LGRdb2YgYyllLnNldCh1LGQpO2ZvcihsZXQgdSBvZiB0aGlzLl9ldmVudFNjaGVtYS5nZXQobC50b0xvd2VyQ2FzZSgpKSlpLmFkZCh1KX1zLmZvckVhY2godT0+e2lmKHUubGVuZ3RoPjApc3dpdGNoKHVbMF0pe2Nhc2UiKiI6aS5hZGQodS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UiISI6ZS5zZXQodS5zdWJzdHJpbmcoMSksImJvb2xlYW4iKTticmVhaztjYXNlIiMiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJudW1iZXIiKTticmVhaztjYXNlIiUiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJvYmplY3QiKTticmVhaztkZWZhdWx0OmUuc2V0KHUsInN0cmluZyIpfX0pfSl9aGFzUHJvcGVydHkodCxlLGkpe2lmKGkuc29tZShvPT4ibm8tZXJyb3JzLXNjaGVtYSI9PT1vLm5hbWUpKXJldHVybiEwO2lmKHQuaW5kZXhPZigiLSIpPi0xKXtpZihVTih0KXx8ek4odCkpcmV0dXJuITE7aWYoaS5zb21lKG89PiJjdXN0b20tZWxlbWVudHMiPT09by5uYW1lKSlyZXR1cm4hMH1yZXR1cm4odGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIikpLmhhcyhlKX1oYXNFbGVtZW50KHQsZSl7cmV0dXJuISEoZS5zb21lKGk9PiJuby1lcnJvcnMtc2NoZW1hIj09PWkubmFtZSl8fHQuaW5kZXhPZigiLSIpPi0xJiYoVU4odCl8fHpOKHQpfHxlLnNvbWUoaT0+ImN1c3RvbS1lbGVtZW50cyI9PT1pLm5hbWUpKSl8fHRoaXMuX3NjaGVtYS5oYXModC50b0xvd2VyQ2FzZSgpKX1zZWN1cml0eUNvbnRleHQodCxlLGkpe2kmJihlPXRoaXMuZ2V0TWFwcGVkUHJvcE5hbWUoZSkpLHQ9dC50b0xvd2VyQ2FzZSgpLGU9ZS50b0xvd2VyQ2FzZSgpO2xldCByPUc5KClbdCsifCIrZV07cmV0dXJuIHJ8fChyPUc5KClbIip8IitlXSxyfHxZci5OT05FKX1nZXRNYXBwZWRQcm9wTmFtZSh0KXtyZXR1cm4gblkuZ2V0KHQpPz90fWdldERlZmF1bHRDb21wb25lbnRFbGVtZW50TmFtZSgpe3JldHVybiJuZy1jb21wb25lbnQifXZhbGlkYXRlUHJvcGVydHkodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJvbiIpP3tlcnJvcjohMCxtc2c6YEJpbmRpbmcgdG8gZXZlbnQgcHJvcGVydHkgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLlxuSWYgJyR7dH0nIGlzIGEgZGlyZWN0aXZlIGlucHV0LCBtYWtlIHN1cmUgdGhlIGRpcmVjdGl2ZSBpcyBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBtb2R1bGUuYH06e2Vycm9yOiExfX12YWxpZGF0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm9uIik/e2Vycm9yOiEwLG1zZzpgQmluZGluZyB0byBldmVudCBhdHRyaWJ1dGUgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLmB9OntlcnJvcjohMX19YWxsS25vd25FbGVtZW50TmFtZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zY2hlbWEua2V5cygpKX1hbGxLbm93bkF0dHJpYnV0ZXNPZkVsZW1lbnQodCl7bGV0IGU9dGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIik7cmV0dXJuIEFycmF5LmZyb20oZS5rZXlzKCkpLm1hcChpPT5jYmUuZ2V0KGkpPz9pKX1hbGxLbm93bkV2ZW50c09mRWxlbWVudCh0KXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9ldmVudFNjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKT8/W10pfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlUHJvcGVydHkodCl7cmV0dXJuIHQucmVwbGFjZShjX2UsKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlVmFsdWUodCxlLGkpe2xldCByPSIiLG89aS50b1N0cmluZygpLnRyaW0oKSxzPW51bGw7aWYoZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2Uid2lkdGgiOmNhc2UiaGVpZ2h0IjpjYXNlIm1pbldpZHRoIjpjYXNlIm1pbkhlaWdodCI6Y2FzZSJtYXhXaWR0aCI6Y2FzZSJtYXhIZWlnaHQiOmNhc2UibGVmdCI6Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpjYXNlImZvbnRTaXplIjpjYXNlIm91dGxpbmVXaWR0aCI6Y2FzZSJvdXRsaW5lT2Zmc2V0IjpjYXNlInBhZGRpbmdUb3AiOmNhc2UicGFkZGluZ0xlZnQiOmNhc2UicGFkZGluZ0JvdHRvbSI6Y2FzZSJwYWRkaW5nUmlnaHQiOmNhc2UibWFyZ2luVG9wIjpjYXNlIm1hcmdpbkxlZnQiOmNhc2UibWFyZ2luQm90dG9tIjpjYXNlIm1hcmdpblJpZ2h0IjpjYXNlImJvcmRlclJhZGl1cyI6Y2FzZSJib3JkZXJXaWR0aCI6Y2FzZSJib3JkZXJUb3BXaWR0aCI6Y2FzZSJib3JkZXJMZWZ0V2lkdGgiOmNhc2UiYm9yZGVyUmlnaHRXaWR0aCI6Y2FzZSJib3JkZXJCb3R0b21XaWR0aCI6Y2FzZSJ0ZXh0SW5kZW50IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0odCkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlyPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJihzPWBQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAke2V9OiR7aX1gKX1yZXR1cm57ZXJyb3I6cyx2YWx1ZTpvK3J9fX0sVzk9bmV3IFNldChbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVyaHRtbCIsIip8b3V0ZXJodG1sIiwiZW1iZWR8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiXSk7ZnVuY3Rpb24gaVkobix0KXtyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksdD10LnRvTG93ZXJDYXNlKCksVzkuaGFzKG4rInwiK3QpfHxXOS5oYXMoIip8Iit0KX12YXIgUE49ImFuaW1hdGUtIjtmdW5jdGlvbiBSTihuKXtyZXR1cm4iQCI9PW5bMF19ZnVuY3Rpb24gT04obix0LGUsaSl7bGV0IHI9W107cmV0dXJuIHVkLnBhcnNlKHQpLmZvckVhY2gobz0+e2xldCBzPW8uZWxlbWVudD9bby5lbGVtZW50XTpuLmFsbEtub3duRWxlbWVudE5hbWVzKCksYT1uZXcgU2V0KG8ubm90U2VsZWN0b3JzLmZpbHRlcihjPT5jLmlzRWxlbWVudFNlbGVjdG9yKCkpLm1hcChjPT5jLmVsZW1lbnQpKSxsPXMuZmlsdGVyKGM9PiFhLmhhcyhjKSk7ci5wdXNoKC4uLmwubWFwKGM9Pm4uc2VjdXJpdHlDb250ZXh0KGMsZSxpKSkpfSksMD09PXIubGVuZ3RoP1tZci5OT05FXTpBcnJheS5mcm9tKG5ldyBTZXQocikpLnNvcnQoKX1mdW5jdGlvbiBjcChuLHQpe2xldCBlPXQuc3RhcnQtbi5zdGFydC5vZmZzZXQsaT10LmVuZC1uLmVuZC5vZmZzZXQ7cmV0dXJuIG5ldyBUbyhuLnN0YXJ0Lm1vdmVCeShlKSxuLmVuZC5tb3ZlQnkoaSksbi5mdWxsU3RhcnQubW92ZUJ5KGUpLG4uZGV0YWlscyl9dmFyIGdiZT0vXihbXjovPyNdKyk6LztmdW5jdGlvbiByWShuKXtsZXQgdD1udWxsLGU9bnVsbCxpPW51bGwscj0hMSxvPSIiO24uYXR0cnMuZm9yRWFjaChsPT57bGV0IGM9bC5uYW1lLnRvTG93ZXJDYXNlKCk7InNlbGVjdCI9PWM/dD1sLnZhbHVlOiJocmVmIj09Yz9lPWwudmFsdWU6InJlbCI9PWM/aT1sLnZhbHVlOiJuZ05vbkJpbmRhYmxlIj09bC5uYW1lP3I9ITA6Im5nUHJvamVjdEFzIj09bC5uYW1lJiZsLnZhbHVlLmxlbmd0aD4wJiYobz1sLnZhbHVlKX0pLHQ9ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PT1ufHwwPT09bi5sZW5ndGg/IioiOm59KHQpO2xldCBzPW4ubmFtZS50b0xvd2VyQ2FzZSgpLGE9UHMuT1RIRVI7cmV0dXJuIHpOKHMpP2E9UHMuTkdfQ09OVEVOVDoic3R5bGUiPT1zP2E9UHMuU1RZTEU6InNjcmlwdCI9PXM/YT1Qcy5TQ1JJUFQ6ImxpbmsiPT1zJiYic3R5bGVzaGVldCI9PWkmJihhPVBzLlNUWUxFU0hFRVQpLG5ldyBITChhLHQsZSxyLG8pfXZhciBQcz0oKCk9PntyZXR1cm4obj1Qc3x8KFBzPXt9KSlbbi5OR19DT05URU5UPTBdPSJOR19DT05URU5UIixuW24uU1RZTEU9MV09IlNUWUxFIixuW24uU1RZTEVTSEVFVD0yXT0iU1RZTEVTSEVFVCIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uT1RIRVI9NF09Ik9USEVSIixQczt2YXIgbn0pKCksSEw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdEF0dHI9ZSx0aGlzLmhyZWZBdHRyPWksdGhpcy5ub25CaW5kYWJsZT1yLHRoaXMucHJvamVjdEFzPW99fSxUYmU9L14oPzooYmluZC0pfChsZXQtKXwocmVmLXwjKXwob24tKXwoYmluZG9uLSl8KEApKSguKikkLyx1cF9CQU5BTkFfQk9YPXtzdGFydDoiWygiLGVuZDoiKV0ifSx1cF9QUk9QRVJUWT17c3RhcnQ6IlsiLGVuZDoiXSJ9LHVwX0VWRU5UPXtzdGFydDoiKCIsZW5kOiIpIn0sSWJlPW5ldyBjbGFzc3t2aXNpdEVsZW1lbnQodCl7bGV0IGU9clkodCk7aWYoZS50eXBlPT09UHMuU0NSSVBUfHxlLnR5cGU9PT1Qcy5TVFlMRXx8ZS50eXBlPT09UHMuU1RZTEVTSEVFVClyZXR1cm4gbnVsbDtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sbnVsbCk7cmV0dXJuIG5ldyBFMCh0Lm5hbWUsY3UodGhpcyx0LmF0dHJzKSxbXSxbXSxpLFtdLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pfXZpc2l0Q29tbWVudCh0KXtyZXR1cm4gbnVsbH12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIG5ldyB3MCh0LnZhbHVlLHQuc291cmNlU3Bhbil9dmlzaXRFeHBhbnNpb24odCl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb25DYXNlKHQpe3JldHVybiBudWxsfX07ZnVuY3Rpb24gJDkobil7cmV0dXJuL15kYXRhLS9pLnRlc3Qobik/bi5zdWJzdHJpbmcoNSk6bn1mdW5jdGlvbiBrTihuLHQpe3QucHVzaCguLi5uLm1hcChlPT5TMC5mcm9tUGFyc2VkRXZlbnQoZSkpKX12YXIgcmM9KCgpPT57cmV0dXJuKG49cmN8fChyYz17fSkpW24uRUxFTUVOVD0wXT0iRUxFTUVOVCIsbltuLlRFTVBMQVRFPTFdPSJURU1QTEFURSIscmM7dmFyIG59KSgpLFJ4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPTAscj1udWxsLG8scyl7dGhpcy5pbmRleD10LHRoaXMucmVmPWUsdGhpcy5sZXZlbD1pLHRoaXMudGVtcGxhdGVJbmRleD1yLHRoaXMubWV0YT1vLHRoaXMucmVnaXN0cnk9cyx0aGlzLmJpbmRpbmdzPW5ldyBTZXQsdGhpcy5wbGFjZWhvbGRlcnM9bmV3IE1hcCx0aGlzLmlzRW1pdHRlZD0hMSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQ9MCx0aGlzLl9yZWdpc3RyeT1zfHx7Z2V0VW5pcXVlSWQ6bXZlKCksaWN1czpuZXcgTWFwfSx0aGlzLmlkPXRoaXMuX3JlZ2lzdHJ5LmdldFVuaXF1ZUlkKCl9YXBwZW5kVGFnKHQsZSxpLHIpe2UuaXNWb2lkJiZyfHx1MSh0aGlzLnBsYWNlaG9sZGVycyxlLmlzVm9pZHx8IXI/ZS5zdGFydE5hbWU6ZS5jbG9zZU5hbWUse3R5cGU6dCxpbmRleDppLGN0eDp0aGlzLmlkLGlzVm9pZDplLmlzVm9pZCxjbG9zZWQ6cn0pfWdldCBpY3VzKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmljdXN9Z2V0IGlzUm9vdCgpe3JldHVybiAwPT09dGhpcy5sZXZlbH1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiAwPT09dGhpcy5fdW5yZXNvbHZlZEN0eENvdW50fWdldFNlcmlhbGl6ZWRQbGFjZWhvbGRlcnMoKXtsZXQgdD1uZXcgTWFwO3JldHVybiB0aGlzLnBsYWNlaG9sZGVycy5mb3JFYWNoKChlLGkpPT50LnNldChpLGUubWFwKEZiZSkpKSx0fWFwcGVuZEJpbmRpbmcodCl7dGhpcy5iaW5kaW5ncy5hZGQodCl9YXBwZW5kSWN1KHQsZSl7dTEodGhpcy5fcmVnaXN0cnkuaWN1cyx0LGUpfWFwcGVuZEJvdW5kVGV4dCh0KXtEcSh0LHRoaXMuYmluZGluZ3Muc2l6ZSx0aGlzLmlkKS5mb3JFYWNoKChpLHIpPT51MSh0aGlzLnBsYWNlaG9sZGVycyxyLC4uLmkpKX1hcHBlbmRUZW1wbGF0ZSh0LGUpe3RoaXMuYXBwZW5kVGFnKHJjLlRFTVBMQVRFLHQsZSwhMSksdGhpcy5hcHBlbmRUYWcocmMuVEVNUExBVEUsdCxlLCEwKSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQrK31hcHBlbmRFbGVtZW50KHQsZSxpKXt0aGlzLmFwcGVuZFRhZyhyYy5FTEVNRU5ULHQsZSxpKX1hcHBlbmRQcm9qZWN0aW9uKHQsZSl7dGhpcy5hcHBlbmRUYWcocmMuRUxFTUVOVCx0LGUsITEpLHRoaXMuYXBwZW5kVGFnKHJjLkVMRU1FTlQsdCxlLCEwKX1mb3JrQ2hpbGRDb250ZXh0KHQsZSxpKXtyZXR1cm4gbmV3IFJ4KHQsdGhpcy5yZWYsdGhpcy5sZXZlbCsxLGUsaSx0aGlzLl9yZWdpc3RyeSl9cmVjb25jaWxlQ2hpbGRDb250ZXh0KHQpe1sic3RhcnQiLCJjbG9zZSJdLmZvckVhY2goaT0+e2xldCBzPSh0aGlzLnBsYWNlaG9sZGVycy5nZXQodC5tZXRhW2Ake2l9TmFtZWBdKXx8W10pLmZpbmQoZXEodGhpcy5pZCx0LnRlbXBsYXRlSW5kZXgpKTtzJiYocy5jdHg9dC5pZCl9KSx0LnBsYWNlaG9sZGVycy5mb3JFYWNoKChpLHIpPT57bGV0IG89dGhpcy5wbGFjZWhvbGRlcnMuZ2V0KHIpO2lmKCFvKXJldHVybiB2b2lkIHRoaXMucGxhY2Vob2xkZXJzLnNldChyLGkpO2xldCBzPW8uZmluZEluZGV4KGVxKHQuaWQsdC50ZW1wbGF0ZUluZGV4KSk7aWYocz49MCl7bGV0IGE9ci5zdGFydHNXaXRoKCJDTE9TRSIpO3IuZW5kc1dpdGgoIk5HLVRFTVBMQVRFIik/by5zcGxpY2UocysoYT8wOjEpLDAsLi4uaSk6KGlbYT9pLmxlbmd0aC0xOjBdLnRtcGw9b1tzXSxvLnNwbGljZShzLDEsLi4uaSkpfWVsc2Ugby5wdXNoKC4uLmkpO3RoaXMucGxhY2Vob2xkZXJzLnNldChyLG8pfSksdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50LS19fTtmdW5jdGlvbiBGTihuLHQsZSxpKXtyZXR1cm4gUTEoYCR7aT8iLyI6IiJ9JHtufSR7dH1gLGUpfWZ1bmN0aW9uIE5OKG4se2luZGV4OnQsY3R4OmUsaXNWb2lkOml9LHIpe3JldHVybiBpP0ZOKG4sdCxlKStGTihuLHQsZSwhMCk6Rk4obix0LGUscil9ZnVuY3Rpb24gZXEobix0KXtyZXR1cm4gZT0+Im9iamVjdCI9PXR5cGVvZiBlJiZlLnR5cGU9PT1yYy5URU1QTEFURSYmZS5pbmRleD09PXQmJmUuY3R4PT09bn1mdW5jdGlvbiBGYmUobil7bGV0IHQ9KHIsbyk9Pk5OKCIjIixyLG8pLGU9KHIsbyk9Pk5OKCIqIixyLG8pO3N3aXRjaChuLnR5cGUpe2Nhc2UgcmMuRUxFTUVOVDpyZXR1cm4gbi5jbG9zZWQ/dChuLCEwKSsobi50bXBsP2Uobi50bXBsLCEwKToiIik6bi50bXBsP2Uobi50bXBsKSt0KG4pKyhuLmlzVm9pZD9lKG4udG1wbCwhMCk6IiIpOnQobik7Y2FzZSByYy5URU1QTEFURTpyZXR1cm4gZShuLG4uY2xvc2VkKTtkZWZhdWx0OnJldHVybiBufX12YXIgTmJlPW5ldyBjbGFzc3t2aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCl7cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfXZpc2l0SWN1KHQpe2xldCBlPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9uUGxhY2Vob2xkZXJ9LCAke3QudHlwZX0sICR7ZS5qb2luKCIgIil9fWB9dmlzaXRUYWdQbGFjZWhvbGRlcih0KXtyZXR1cm4gdC5pc1ZvaWQ/dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSk6YCR7dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSl9JHt0LmNoaWxkcmVuLm1hcChlPT5lLnZpc2l0KHRoaXMpKS5qb2luKCIiKX0ke3RoaXMuZm9ybWF0UGgodC5jbG9zZU5hbWUpfWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCxlKXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfWZvcm1hdFBoKHQpe3JldHVybmB7JHtGeCh0LCExKX19YH19O2Z1bmN0aW9uIG9ZKG4pe3JldHVybiBuLnZpc2l0KE5iZSl9dmFyIHRxPXtBOiJMSU5LIixCOiJCT0xEX1RFWFQiLEJSOiJMSU5FX0JSRUFLIixFTToiRU1QSEFTSVNFRF9URVhUIixIMToiSEVBRElOR19MRVZFTDEiLEgyOiJIRUFESU5HX0xFVkVMMiIsSDM6IkhFQURJTkdfTEVWRUwzIixINDoiSEVBRElOR19MRVZFTDQiLEg1OiJIRUFESU5HX0xFVkVMNSIsSDY6IkhFQURJTkdfTEVWRUw2IixIUjoiSE9SSVpPTlRBTF9SVUxFIixJOiJJVEFMSUNfVEVYVCIsTEk6IkxJU1RfSVRFTSIsTElOSzoiTUVESUFfTElOSyIsT0w6Ik9SREVSRURfTElTVCIsUDoiUEFSQUdSQVBIIixROiJRVU9UQVRJT04iLFM6IlNUUklLRVRIUk9VR0hfVEVYVCIsU01BTEw6IlNNQUxMX1RFWFQiLFNVQjoiU1VCU1RSSVBUIixTVVA6IlNVUEVSU0NSSVBUIixUQk9EWToiVEFCTEVfQk9EWSIsVEQ6IlRBQkxFX0NFTEwiLFRGT09UOiJUQUJMRV9GT09URVIiLFRIOiJUQUJMRV9IRUFERVJfQ0VMTCIsVEhFQUQ6IlRBQkxFX0hFQURFUiIsVFI6IlRBQkxFX1JPVyIsVFQ6Ik1PTk9TUEFDRURfVEVYVCIsVToiVU5ERVJMSU5FRF9URVhUIixVTDoiVU5PUkRFUkVEX0xJU1QifSxHTD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50cz17fSx0aGlzLl9zaWduYXR1cmVUb05hbWU9e319Z2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodCxlLGkpe2xldCByPXRoaXMuX2hhc2hUYWcodCxlLGkpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdO2xldCBvPXQudG9VcHBlckNhc2UoKSxzPXRxW29dfHxgVEFHXyR7b31gLGE9dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGk/czpgU1RBUlRfJHtzfWApO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09YSxhfWdldENsb3NlVGFnUGxhY2Vob2xkZXJOYW1lKHQpe2xldCBlPXRoaXMuX2hhc2hDbG9zaW5nVGFnKHQpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdO2xldCBpPXQudG9VcHBlckNhc2UoKSxvPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShgQ0xPU0VfJHt0cVtpXXx8YFRBR18ke2l9YH1gKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdPW8sb31nZXRQbGFjZWhvbGRlck5hbWUodCxlKXtsZXQgaT10LnRvVXBwZXJDYXNlKCkscj1gUEg6ICR7aX09JHtlfWA7aWYodGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdKXJldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl07bGV0IG89dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGkpO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09byxvfWdldFVuaXF1ZVBsYWNlaG9sZGVyKHQpe3JldHVybiB0aGlzLl9nZW5lcmF0ZVVuaXF1ZU5hbWUodC50b1VwcGVyQ2FzZSgpKX1faGFzaFRhZyh0LGUsaSl7cmV0dXJuYDwke3R9YCtPYmplY3Qua2V5cyhlKS5zb3J0KCkubWFwKGE9PmAgJHthfT0ke2VbYV19YCkuam9pbigiIikrKGk/Ii8+IjpgPjwvJHt0fT5gKX1faGFzaENsb3NpbmdUYWcodCl7cmV0dXJuIHRoaXMuX2hhc2hUYWcoYC8ke3R9YCx7fSwhMSl9X2dlbmVyYXRlVW5pcXVlTmFtZSh0KXtpZighdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHNbdF09MSx0O2xldCBpPXRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50c1t0XTtyZXR1cm4gdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzW3RdPWkrMSxgJHt0fV8ke2l9YH19LExiZT1uZXcgQjEobmV3IEwxKTtmdW5jdGlvbiBWYmUobix0KXtyZXR1cm4gdH12YXIgamJlPS9cL1wvW1xzXFNdKmkxOG5bXHNcU10qXChbXHNcU10qcGhbXHNcU10qPVtcc1xTXSooInwnKShbXHNcU10qPylcMVtcc1xTXSpcKS9nLHFMPWNsYXNzIGV4dGVuZHMgTWZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX0sV2JlPShuLHQpPT4obiBpbnN0YW5jZW9mIFRmJiYodCBpbnN0YW5jZW9mIFQwJiZuLmkxOG4gaW5zdGFuY2VvZiBpdSYmKHQucHJldmlvdXNNZXNzYWdlPW4uaTE4biksbi5pMThuPXQpLHQpLEcxPWNsYXNze2NvbnN0cnVjdG9yKHQ9JGMsZT0hMSxpPSExKXt0aGlzLmludGVycG9sYXRpb25Db25maWc9dCx0aGlzLmtlZXBJMThuQXR0cnM9ZSx0aGlzLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ9aSx0aGlzLmhhc0kxOG5NZXRhPSExLHRoaXMuX2Vycm9ycz1bXSx0aGlzLl9jcmVhdGVJMThuTWVzc2FnZT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9leHByZXNzaW9uUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lfXRvSTE4bk1lc3NhZ2UodCxlPSIiLGk9IiIscj0iIixvKXtsZXQgcz17aXNJY3U6MT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIE4wLGljdURlcHRoOjAscGxhY2Vob2xkZXJSZWdpc3RyeTpuZXcgR0wscGxhY2Vob2xkZXJUb0NvbnRlbnQ6e30scGxhY2Vob2xkZXJUb01lc3NhZ2U6e30sdmlzaXROb2RlRm46b3x8VmJlfSxhPWN1KHRoaXMsdCxzKTtyZXR1cm4gbmV3IGl1KGEscy5wbGFjZWhvbGRlclRvQ29udGVudCxzLnBsYWNlaG9sZGVyVG9NZXNzYWdlLGUsaSxyKX12aXNpdEVsZW1lbnQodCxlKXtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sZSkscj17fTt0LmF0dHJzLmZvckVhY2goYz0+e3JbYy5uYW1lXT1jLnZhbHVlfSk7bGV0IG89ZTModC5uYW1lKS5pc1ZvaWQscz1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodC5uYW1lLHIsbyk7ZS5wbGFjZWhvbGRlclRvQ29udGVudFtzXT17dGV4dDp0LnN0YXJ0U291cmNlU3Bhbi50b1N0cmluZygpLHNvdXJjZVNwYW46dC5zdGFydFNvdXJjZVNwYW59O2xldCBhPSIiO298fChhPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRDbG9zZVRhZ1BsYWNlaG9sZGVyTmFtZSh0Lm5hbWUpLGUucGxhY2Vob2xkZXJUb0NvbnRlbnRbYV09e3RleHQ6YDwvJHt0Lm5hbWV9PmAsc291cmNlU3Bhbjp0LmVuZFNvdXJjZVNwYW4/P3Quc291cmNlU3Bhbn0pO2xldCBsPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7dGhpcy50YWc9dCx0aGlzLmF0dHJzPWUsdGhpcy5zdGFydE5hbWU9aSx0aGlzLmNsb3NlTmFtZT1yLHRoaXMuY2hpbGRyZW49byx0aGlzLmlzVm9pZD1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWN9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRhZ1BsYWNlaG9sZGVyKHRoaXMsZSl9fSh0Lm5hbWUscixzLGEsaSxvLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsbCl9dmlzaXRBdHRyaWJ1dGUodCxlKXtsZXQgaT12b2lkIDA9PT10LnZhbHVlVG9rZW5zfHwxPT09dC52YWx1ZVRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC52YWx1ZVNwYW58fHQuc291cmNlU3Bhbik6dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC52YWx1ZVRva2Vucyx0LnZhbHVlU3Bhbnx8dC5zb3VyY2VTcGFuLGUsdC5pMThuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGkpfXZpc2l0VGV4dCh0LGUpe2xldCBpPTE9PT10LnRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC5zb3VyY2VTcGFuKTp0aGlzLl92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LnRva2Vucyx0LnNvdXJjZVNwYW4sZSx0LmkxOG4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsaSl9dmlzaXRDb21tZW50KHQsZSl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb24odCxlKXtlLmljdURlcHRoKys7bGV0IGk9e30scj1uZXcgUzEodC5zd2l0Y2hWYWx1ZSx0LnR5cGUsaSx0LnNvdXJjZVNwYW4pO2lmKHQuY2FzZXMuZm9yRWFjaChhPT57aVthLnZhbHVlXT1uZXcgYmYoYS5leHByZXNzaW9uLm1hcChsPT5sLnZpc2l0KHRoaXMsZSkpLGEuZXhwU291cmNlU3Bhbil9KSxlLmljdURlcHRoLS0sZS5pc0ljdXx8ZS5pY3VEZXB0aD4wKXtsZXQgYT1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0VW5pcXVlUGxhY2Vob2xkZXIoYFZBUl8ke3QudHlwZX1gKTtyZXR1cm4gci5leHByZXNzaW9uUGxhY2Vob2xkZXI9YSxlLnBsYWNlaG9sZGVyVG9Db250ZW50W2FdPXt0ZXh0OnQuc3dpdGNoVmFsdWUsc291cmNlU3Bhbjp0LnN3aXRjaFZhbHVlU291cmNlU3Bhbn0sZS52aXNpdE5vZGVGbih0LHIpfWxldCBvPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRQbGFjZWhvbGRlck5hbWUoIklDVSIsdC5zb3VyY2VTcGFuLnRvU3RyaW5nKCkpO2UucGxhY2Vob2xkZXJUb01lc3NhZ2Vbb109dGhpcy50b0kxOG5NZXNzYWdlKFt0XSwiIiwiIiwiIix2b2lkIDApO2xldCBzPW5ldyBUMChyLG8sdC5zb3VyY2VTcGFuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LHMpfXZpc2l0RXhwYW5zaW9uQ2FzZSh0LGUpe3Rocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGUgY29kZSIpfV92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LGUsaSxyKXtsZXQgbz1bXSxzPSExO2ZvcihsZXQgYSBvZiB0KXN3aXRjaChhLnR5cGUpe2Nhc2UgODpjYXNlIDE3OnM9ITA7bGV0IGw9YS5wYXJ0c1sxXSxjPWwuc3BsaXQoamJlKVsyXXx8IklOVEVSUE9MQVRJT04iLHU9aS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFBsYWNlaG9sZGVyTmFtZShjLGwpO2kucGxhY2Vob2xkZXJUb0NvbnRlbnRbdV09e3RleHQ6YS5wYXJ0cy5qb2luKCIiKSxzb3VyY2VTcGFuOmEuc291cmNlU3Bhbn0sby5wdXNoKG5ldyBFMShsLHUsYS5zb3VyY2VTcGFuKSk7YnJlYWs7ZGVmYXVsdDppZihhLnBhcnRzWzBdLmxlbmd0aD4wKXtsZXQgZD1vW28ubGVuZ3RoLTFdO2QgaW5zdGFuY2VvZiBsMD8oZC52YWx1ZSs9YS5wYXJ0c1swXSxkLnNvdXJjZVNwYW49bmV3IFRvKGQuc291cmNlU3Bhbi5zdGFydCxhLnNvdXJjZVNwYW4uZW5kLGQuc291cmNlU3Bhbi5mdWxsU3RhcnQsZC5zb3VyY2VTcGFuLmRldGFpbHMpKTpvLnB1c2gobmV3IGwwKGEucGFydHNbMF0sYS5zb3VyY2VTcGFuKSl9fXJldHVybiBzPyhmdW5jdGlvbihuLHQpe2lmKHQgaW5zdGFuY2VvZiBpdSYmKGZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZXM7aWYoMSE9PXQubGVuZ3RofHwhKHRbMF1pbnN0YW5jZW9mIGJmKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcHJldmlvdXMgaTE4biBtZXNzYWdlIC0gZXhwZWN0ZWQgaXQgdG8gY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIGBDb250YWluZXJgIG5vZGUuIil9KHQpLHQ9dC5ub2Rlc1swXSksdCBpbnN0YW5jZW9mIGJmKXshZnVuY3Rpb24obix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIG51bWJlciBvZiBpMThuIG1lc3NhZ2UgY2hpbGRyZW4gY2hhbmdlZCBiZXR3ZWVuIGZpcnN0IGFuZCBzZWNvbmQgcGFzcy4iKTtpZihuLnNvbWUoKGUsaSk9PnRbaV0uY29uc3RydWN0b3IhPT1lLmNvbnN0cnVjdG9yKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlcyBvZiB0aGUgaTE4biBtZXNzYWdlIGNoaWxkcmVuIGNoYW5nZWQgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIHBhc3MuIil9KHQuY2hpbGRyZW4sbik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5zb3VyY2VTcGFuPXQuY2hpbGRyZW5bZV0uc291cmNlU3Bhbn19KG8sciksbmV3IGJmKG8sZSkpOm9bMF19fShMYmUsbik7cmV0dXJuKGUsaSxyLG8scyk9PnQudG9JMThuTWVzc2FnZShlLGkscixvLHMpfSh0aGlzLmludGVycG9sYXRpb25Db25maWcpfV9nZW5lcmF0ZUkxOG5NZXNzYWdlKHQsZT0iIixpKXtsZXR7bWVhbmluZzpyLGRlc2NyaXB0aW9uOm8sY3VzdG9tSWQ6c309dGhpcy5fcGFyc2VNZXRhZGF0YShlKSxhPXRoaXMuX2NyZWF0ZUkxOG5NZXNzYWdlKHQscixvLHMsaSk7cmV0dXJuIHRoaXMuX3NldE1lc3NhZ2VJZChhLGUpLHRoaXMuX3NldExlZ2FjeUlkcyhhLGUpLGF9dmlzaXRBbGxXaXRoRXJyb3JzKHQpe2xldCBlPXQubWFwKGk9PmkudmlzaXQodGhpcyxudWxsKSk7cmV0dXJuIG5ldyBVMShlLHRoaXMuX2Vycm9ycyl9dmlzaXRFbGVtZW50KHQpe2xldCBlO2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuLmF0dHJzLnNvbWUodD0+ZnVuY3Rpb24obil7cmV0dXJuImkxOG4iPT09bnx8bi5zdGFydHNXaXRoKGxMKX0odC5uYW1lKSl9KHQpKXt0aGlzLmhhc0kxOG5NZXRhPSEwO2xldCBpPVtdLHI9e307Zm9yKGxldCBvIG9mIHQuYXR0cnMpaWYoImkxOG4iPT09by5uYW1lKWU9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZSh0LmNoaWxkcmVuLHQuaTE4bnx8by52YWx1ZSxXYmUpLDA9PT1lLm5vZGVzLmxlbmd0aCYmKGU9dm9pZCAwKSx0LmkxOG49ZTtlbHNlIGlmKG8ubmFtZS5zdGFydHNXaXRoKGxMKSl7bGV0IHM9by5uYW1lLnNsaWNlKGxMLmxlbmd0aCk7aVkodC5uYW1lLHMpP3RoaXMuX3JlcG9ydEVycm9yKG8sYFRyYW5zbGF0aW5nIGF0dHJpYnV0ZSAnJHtzfScgaXMgZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucy5gKTpyW3NdPW8udmFsdWV9ZWxzZSBpLnB1c2gobyk7aWYoT2JqZWN0LmtleXMocikubGVuZ3RoKWZvcihsZXQgbyBvZiBpKXtsZXQgcz1yW28ubmFtZV07dm9pZCAwIT09cyYmby52YWx1ZSYmKG8uaTE4bj10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFtvXSxvLmkxOG58fHMpKX10aGlzLmtlZXBJMThuQXR0cnN8fCh0LmF0dHJzPWkpfXJldHVybiBjdSh0aGlzLHQuY2hpbGRyZW4sZSksdH12aXNpdEV4cGFuc2lvbih0LGUpe2xldCBpLHI9dC5pMThuO2lmKHRoaXMuaGFzSTE4bk1ldGE9ITAsciBpbnN0YW5jZW9mIFQwKXtsZXQgbz1yLm5hbWU7aT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxyKSxUcShpKS5uYW1lPW8sbnVsbCE9PWUmJihlLnBsYWNlaG9sZGVyVG9NZXNzYWdlW29dPWkpfWVsc2UgaT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxlfHxyKTtyZXR1cm4gdC5pMThuPWksdH12aXNpdFRleHQodCl7cmV0dXJuIHR9dmlzaXRBdHRyaWJ1dGUodCl7cmV0dXJuIHR9dmlzaXRDb21tZW50KHQpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gdH1fcGFyc2VNZXRhZGF0YSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24obj0iIil7bGV0IHQsZSxpO2lmKG49bi50cmltKCkpe2xldCBzLHI9bi5pbmRleE9mKCJAQCIpLG89bi5pbmRleE9mKCJ8Iik7W3MsdF09cj4tMT9bbi5zbGljZSgwLHIpLG4uc2xpY2UocisyKV06W24sIiJdLFtlLGldPW8+LTE/W3Muc2xpY2UoMCxvKSxzLnNsaWNlKG8rMSldOlsiIixzXX1yZXR1cm57Y3VzdG9tSWQ6dCxtZWFuaW5nOmUsZGVzY3JpcHRpb246aX19KHQpOnQgaW5zdGFuY2VvZiBpdT90Ont9fV9zZXRNZXNzYWdlSWQodCxlKXt2YXIgbjt0LmlkfHwodC5pZD1lIGluc3RhbmNlb2YgaXUmJmUuaWR8fChuPXQpLmlkfHxfcShuKSl9X3NldExlZ2FjeUlkcyh0LGUpe2lmKHRoaXMuZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdCl0LmxlZ2FjeUlkcz1bbV9lKHQpLF9xKHQpXTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZSl7bGV0IGk9ZSBpbnN0YW5jZW9mIGl1P2U6ZSBpbnN0YW5jZW9mIFQwP2UucHJldmlvdXNNZXNzYWdlOnZvaWQgMDt0LmxlZ2FjeUlkcz1pP2kubGVnYWN5SWRzOltdfX1fcmVwb3J0RXJyb3IodCxlKXt0aGlzLl9lcnJvcnMucHVzaChuZXcgcUwodC5zb3VyY2VTcGFuLGUpKX19O2Z1bmN0aW9uIFpiZShuLHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5ub2Rlcy5tYXAodD0+dC52aXNpdChKYmUsbnVsbCkpLmpvaW4oIiIpfSh0KSxvPVtudChyKV07T2JqZWN0LmtleXMoaSkubGVuZ3RoJiYoby5wdXNoKHoxKHMzKGksITApLCEwKSksby5wdXNoKHoxKHtvcmlnaW5hbF9jb2RlOm1sKE9iamVjdC5rZXlzKGkpLm1hcChsPT4oe2tleTpGeChsKSxxdW90ZWQ6ITAsdmFsdWU6bnQodC5wbGFjZWhvbGRlcnNbbF0/dC5wbGFjZWhvbGRlcnNbbF0uc291cmNlU3Bhbi50b1N0cmluZygpOnQucGxhY2Vob2xkZXJUb01lc3NhZ2VbbF0ubm9kZXMubWFwKGM9PmMuc291cmNlU3Bhbi50b1N0cmluZygpKS5qb2luKCIiKSl9KSkpfSkpKTtsZXQgcz1lLnNldChNaSgiZ29vZy5nZXRNc2ciKS5jYWxsRm4obykpLnRvQ29uc3REZWNsKCk7cmV0dXJuIHMuYWRkTGVhZGluZ0NvbW1lbnQoZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIHQucHVzaChuLmRlc2NyaXB0aW9uP3t0YWdOYW1lOiJkZXNjIix0ZXh0Om4uZGVzY3JpcHRpb259Ont0YWdOYW1lOiJzdXBwcmVzcyIsdGV4dDoie21zZ0Rlc2NyaXB0aW9uc30ifSksbi5tZWFuaW5nJiZ0LnB1c2goe3RhZ05hbWU6Im1lYW5pbmciLHRleHQ6bi5tZWFuaW5nfSksZnVuY3Rpb24obj1bXSl7cmV0dXJuIG5ldyBiMShuKX0odCl9KHQpKSxbcyxuZXcgbHUobi5zZXQoZSkpXX12YXIgSmJlPW5ldyBjbGFzc3tmb3JtYXRQaCh0KXtyZXR1cm5geyQke0Z4KHQpfX1gfXZpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7cmV0dXJuIG9ZKHQpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7cmV0dXJuIHQuaXNWb2lkP3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpOmAke3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpfSR7dC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9JHt0aGlzLmZvcm1hdFBoKHQuY2xvc2VOYW1lKX1gfXZpc2l0UGxhY2Vob2xkZXIodCl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX19O2Z1bmN0aW9uIGV4ZShuLHQsZSl7bGV0e21lc3NhZ2VQYXJ0czppLHBsYWNlSG9sZGVyczpyfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucGxhY2Vob2xkZXJUb01lc3NhZ2U9dCx0aGlzLnBpZWNlcz1lfXZpc2l0VGV4dCh0KXtpZih0aGlzLnBpZWNlc1t0aGlzLnBpZWNlcy5sZW5ndGgtMV1pbnN0YW5jZW9mIGhmKXRoaXMucGllY2VzW3RoaXMucGllY2VzLmxlbmd0aC0xXS50ZXh0Kz10LnZhbHVlO2Vsc2V7bGV0IGU9bmV3IFRvKHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5kZXRhaWxzKTt0aGlzLnBpZWNlcy5wdXNoKG5ldyBoZih0LnZhbHVlLGUpKX19dmlzaXRDb250YWluZXIodCl7dC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpfXZpc2l0SWN1KHQpe3RoaXMucGllY2VzLnB1c2gobmV3IGhmKG9ZKHQpLHQuc291cmNlU3BhbikpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5zdGFydE5hbWUsdC5zdGFydFNvdXJjZVNwYW4/P3Quc291cmNlU3BhbikpLHQuaXNWb2lkfHwodC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpLHRoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQuY2xvc2VOYW1lLHQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSkpfXZpc2l0UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3BhbikpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3Bhbix0aGlzLnBsYWNlaG9sZGVyVG9NZXNzYWdlW3QubmFtZV0pKX1jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQsZSxpKXtyZXR1cm4gbmV3IGgwKEZ4KHQsITEpLGUsaSl9fShuLnBsYWNlaG9sZGVyVG9NZXNzYWdlLHQpO3JldHVybiBuLm5vZGVzLmZvckVhY2goaT0+aS52aXNpdChlKSksZnVuY3Rpb24obil7bGV0IHQ9W10sZT1bXTtuWzBdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bMF0uc291cmNlU3Bhbi5zdGFydCkpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO3IgaW5zdGFuY2VvZiBoZj90LnB1c2gocik6KGUucHVzaChyKSxuW2ktMV1pbnN0YW5jZW9mIGgwJiZ0LnB1c2goTE4obltpLTFdLnNvdXJjZVNwYW4uZW5kKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bbi5sZW5ndGgtMV0uc291cmNlU3Bhbi5lbmQpKSx7bWVzc2FnZVBhcnRzOnQscGxhY2VIb2xkZXJzOmV9fSh0KX0odCksbz1mdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVzWzBdO3JldHVybiBuZXcgVG8odC5zb3VyY2VTcGFuLmZ1bGxTdGFydCxuLm5vZGVzW24ubm9kZXMubGVuZ3RoLTFdLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmRldGFpbHMpfSh0KSxzPXIubWFwKGM9PmVbYy50ZXh0XSksYT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuZXcgWE4obix0LGUsaSxyKX0odCxpLHIscyxvKSxsPW4uc2V0KGEpO3JldHVybltuZXcgbHUobCldfWZ1bmN0aW9uIExOKG4pe3JldHVybiBuZXcgaGYoIiIsbmV3IFRvKG4sbikpfXZhciBzWT1uZXcgU2V0KFsiJGV2ZW50Il0pLEJOPW5ldyBNYXAoW1sid2luZG93IixLLnJlc29sdmVXaW5kb3ddLFsiZG9jdW1lbnQiLEsucmVzb2x2ZURvY3VtZW50XSxbImJvZHkiLEsucmVzb2x2ZUJvZHldXSksc3hlPVsiICIsIlxuIiwiXHIiLCJcdCJdO2Z1bmN0aW9uIHhwKG4sdCl7cmV0dXJuIHIzKE1pKE54KS5iaXR3aXNlQW5kKG50KG4pLG51bGwsITEpLHQpfWZ1bmN0aW9uIGFZKG4sdD1udWxsLGU9bnVsbCl7bGV0e3R5cGU6aSxuYW1lOnIsdGFyZ2V0Om8scGhhc2U6cyxoYW5kbGVyOmF9PW47aWYobyYmIUJOLmhhcyhvKSl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZ2xvYmFsIHRhcmdldCAnJHtvfScgZGVmaW5lZCBmb3IgJyR7cn0nIGV2ZW50LlxuICAgICAgICBTdXBwb3J0ZWQgbGlzdCBvZiBnbG9iYWwgdGFyZ2V0czogJHtBcnJheS5mcm9tKEJOLmtleXMoKSl9LmApO2xldCBsPSIkZXZlbnQiLGM9bmV3IFNldCx1PW51bGw9PT1lfHwwPT09ZS5iaW5kaW5nTGV2ZWw/TWkoYWMpOmUuZ2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKDApLGQ9JHZlKGUsdSxhLCJiIixuLmhhbmRsZXJTcGFuLGMsc1kpLHA9W10saD1lPy52YXJpYWJsZURlY2xhcmF0aW9ucygpLGY9ZT8ucmVzdG9yZVZpZXdTdGF0ZW1lbnQoKTtpZihoJiZwLnB1c2goLi4uaCkscC5wdXNoKC4uLmQpLGYpe3AudW5zaGlmdChmKTtsZXQgQT1wW3AubGVuZ3RoLTFdO0EgaW5zdGFuY2VvZiB1bz9wW3AubGVuZ3RoLTFdPW5ldyB1byh4ZihBLnZhbHVlLnNvdXJjZVNwYW4sSy5yZXNldFZpZXcsW0EudmFsdWVdKSk6cC5wdXNoKG5ldyBsdSh4ZihudWxsLEsucmVzZXRWaWV3LFtdKSkpfWxldCBtPTE9PT1pP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYEAke259LiR7dH1gfShyLHMpOnIsQz10JiZtMCh0KSxfPVtdO2MuaGFzKGwpJiZfLnB1c2gobmV3IFJzKGwsVjApKTtsZXQgeT1PcyhfLHAsaWEsbnVsbCxDKSxJPVtudChtKSx5XTtyZXR1cm4gbyYmSS5wdXNoKG50KCExKSx4bihCTi5nZXQobykpKSxJfXZhciBPeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHIsbyxzLGEsbCxjLHUsZD1mdW5jdGlvbigpe3JldHVybntwcmVwYXJlU3RhdGVtZW50czpbXSxjb25zdEV4cHJlc3Npb25zOltdLGkxOG5WYXJSZWZzQ2FjaGU6bmV3IE1hcH19KCkpe3RoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5sZXZlbD1pLHRoaXMuY29udGV4dE5hbWU9cix0aGlzLmkxOG5Db250ZXh0PW8sdGhpcy50ZW1wbGF0ZUluZGV4PXMsdGhpcy50ZW1wbGF0ZU5hbWU9YSx0aGlzLl9uYW1lc3BhY2U9bCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcz11LHRoaXMuX2NvbnN0YW50cz1kLHRoaXMuX2RhdGFJbmRleD0wLHRoaXMuX2JpbmRpbmdDb250ZXh0PTAsdGhpcy5fcHJlZml4Q29kZT1bXSx0aGlzLl9jcmVhdGlvbkNvZGVGbnM9W10sdGhpcy5fdXBkYXRlQ29kZUZucz1bXSx0aGlzLl9jdXJyZW50SW5kZXg9MCx0aGlzLl90ZW1wVmFyaWFibGVzPVtdLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zPVtdLHRoaXMuaTE4bj1udWxsLHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzPTAsdGhpcy5fYmluZGluZ1Nsb3RzPTAsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cz1bXSx0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9MCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj1udWxsLHRoaXMudmlzaXRSZWZlcmVuY2U9SGIsdGhpcy52aXNpdFZhcmlhYmxlPUhiLHRoaXMudmlzaXRUZXh0QXR0cmlidXRlPUhiLHRoaXMudmlzaXRCb3VuZEF0dHJpYnV0ZT1IYix0aGlzLnZpc2l0Qm91bmRFdmVudD1IYix0aGlzLl9iaW5kaW5nU2NvcGU9ZS5uZXN0ZWRTY29wZShpKSx0aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXg9Yy5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpKyJfIix0aGlzLl92YWx1ZUNvbnZlcnRlcj1uZXcgVzEodCwoKT0+dGhpcy5hbGxvY2F0ZURhdGFTbG90KCkscD0+dGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzKHApLChwLGgsZixtKT0+e3RoaXMuX2JpbmRpbmdTY29wZS5zZXQodGhpcy5sZXZlbCxoLG0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLEsucGlwZSxbbnQoZiksbnQocCldKX0pfWJ1aWxkVGVtcGxhdGVGdW5jdGlvbih0LGUsaT0wLHIpe3RoaXMuX25nQ29udGVudFNlbGVjdG9yc09mZnNldD1pLHRoaXMuX25hbWVzcGFjZSE9PUsubmFtZXNwYWNlSFRNTCYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKG51bGwsdGhpcy5fbmFtZXNwYWNlKSxlLmZvckVhY2goaD0+dGhpcy5yZWdpc3RlckNvbnRleHRWYXJpYWJsZXMoaCkpO2xldCBvPXRoaXMuaTE4bkNvbnRleHR8fHB4KHIpJiYhaTEocikmJiEoMT09PShuPXQpLmxlbmd0aCYmblswXWluc3RhbmNlb2YgRTAmJnRbMF0uaTE4bj09PXIpLHM9Vk4odCk7dmFyIG47aWYobyYmdGhpcy5pMThuU3RhcnQobnVsbCxyLHMpLGQ5KHRoaXMsdCksdGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHMrPXRoaXMuX2JpbmRpbmdTbG90cyx0aGlzLl92YWx1ZUNvbnZlcnRlci51cGRhdGVQaXBlU2xvdE9mZnNldHModGhpcy5fYmluZGluZ1Nsb3RzKSx0aGlzLl9uZXN0ZWRUZW1wbGF0ZUZucy5mb3JFYWNoKGg9PmgoKSksMD09PXRoaXMubGV2ZWwmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoKXtsZXQgaD1bXTtpZih0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD4xfHwiKiIhPT10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzWzBdKXtsZXQgZj10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLm1hcChtPT4iKiIhPT1tP3QzKG0pOm0pO2gucHVzaCh0aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUoZiksITApKX10aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24obnVsbCxLLnByb2plY3Rpb25EZWYsaCwhMCl9byYmdGhpcy5pMThuRW5kKG51bGwscyk7bGV0IGE9VDEodGhpcy5fY3JlYXRpb25Db2RlRm5zKSxsPVQxKHRoaXMuX3VwZGF0ZUNvZGVGbnMpLGM9dGhpcy5fYmluZGluZ1Njb3BlLnZpZXdTbmFwc2hvdFN0YXRlbWVudHMoKSx1PXRoaXMuX2JpbmRpbmdTY29wZS52YXJpYWJsZURlY2xhcmF0aW9ucygpLmNvbmNhdCh0aGlzLl90ZW1wVmFyaWFibGVzKSxkPWEubGVuZ3RoPjA/W3hwKDEsYy5jb25jYXQoYSkpXTpbXSxwPWwubGVuZ3RoPjA/W3hwKDIsdS5jb25jYXQobCkpXTpbXTtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbLi4udGhpcy5fcHJlZml4Q29kZSwuLi5kLC4uLnBdLGlhLG51bGwsdGhpcy50ZW1wbGF0ZU5hbWUpfWdldExvY2FsKHQpe3JldHVybiB0aGlzLl9iaW5kaW5nU2NvcGUuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXt0aGlzLl9iaW5kaW5nU2NvcGUubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLl9iaW5kaW5nU2NvcGUubWF5YmVSZXN0b3JlVmlldygpfWkxOG5UcmFuc2xhdGUodCxlPXt9LGkscil7bGV0IG89aXx8dGhpcy5pMThuR2VuZXJhdGVNYWluQmxvY2tWYXIoKSxhPWZ1bmN0aW9uKG4sdCxlLGk9e30scil7bGV0IG89W2d2ZSh0KSxyMyhpMyhNaShvcSkpLm5vdElkZW50aWNhbChudCgidW5kZWZpbmVkIix5cSkpLmFuZChNaShvcSkpLFpiZSh0LG4sZSxpKSxleGUodCxuLHMzKGksITEpKSldO3JldHVybiByJiZvLnB1c2gobmV3IGx1KHQuc2V0KHIodCkpKSksb30odCxvLHRoaXMuaTE4bkdlbmVyYXRlQ2xvc3VyZVZhcih0LmlkKSxlLHIpO3JldHVybiB0aGlzLl9jb25zdGFudHMucHJlcGFyZVN0YXRlbWVudHMucHVzaCguLi5hKSxvfXJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyh0KXtsZXQgZT10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCksaT10aGlzLmxldmVsLHI9TWkodC5uYW1lK2UpO3RoaXMuX2JpbmRpbmdTY29wZS5zZXQoaSx0Lm5hbWUsciwxLChvLHMpPT57bGV0IGE7cmV0dXJuIG8uYmluZGluZ0xldmVsPT09aT9vLmlzTGlzdGVuZXJTY29wZSgpJiZvLmhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKT8oYT1NaShBcSksby5ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCkpOmE9TWkoYWMpOmE9by5nZXRTaGFyZWRDb250ZXh0TmFtZShpKXx8UUwocyksW3Iuc2V0KGEucHJvcCh0LnZhbHVlfHwiJGltcGxpY2l0IikpLnRvQ29uc3REZWNsKCldfSl9aTE4bkFwcGVuZEJpbmRpbmdzKHQpe3QubGVuZ3RoPjAmJnQuZm9yRWFjaChlPT50aGlzLmkxOG4uYXBwZW5kQmluZGluZyhlKSl9aTE4bkJpbmRQcm9wcyh0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dFtpXTtpZihyIGluc3RhbmNlb2YgdzApZVtpXT1udChyLnZhbHVlKTtlbHNle2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMobyksbyBpbnN0YW5jZW9mIFpvKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmF9PW8se2lkOmwsYmluZGluZ3M6Y309dGhpcy5pMThuLHU9ZnVuY3Rpb24obix0PTAsZT0wKXtpZighbi5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9IiIscj1uLmxlbmd0aC0xO2ZvcihsZXQgbz0wO288cjtvKyspaSs9YCR7bltvXX0ke1ExKHQrbyxlKX1gO3JldHVybiBpKz1uW3JdLGl9KHMsYy5zaXplLGwpO3RoaXMuaTE4bkFwcGVuZEJpbmRpbmdzKGEpLGVbaV09bnQodSl9fX0pLGV9aTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCl7cmV0dXJuIE1pKHRoaXMuY29uc3RhbnRQb29sLnVuaXF1ZU5hbWUoImkxOG5fIikpfWkxOG5HZW5lcmF0ZUNsb3N1cmVWYXIodCl7bGV0IGUsaT10aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXgudG9VcHBlckNhc2UoKTtpZih0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyl7bGV0IHI9ZjkoIkVYVEVSTkFMXyIpLG89dGhpcy5jb25zdGFudFBvb2wudW5pcXVlTmFtZShpKTtlPWAke3J9JHttMCh0KX0kJCR7b31gfWVsc2V7bGV0IHI9ZjkoaSk7ZT10aGlzLmNvbnN0YW50UG9vbC51bmlxdWVOYW1lKHIpfXJldHVybiBNaShlKX1pMThuVXBkYXRlUmVmKHQpe2xldHtpY3VzOmUsbWV0YTppLGlzUm9vdDpyLGlzUmVzb2x2ZWQ6byxpc0VtaXR0ZWQ6c309dDtpZihyJiZvJiYhcyYmIWkxKGkpKXt0LmlzRW1pdHRlZD0hMDtsZXQgZCxhPXQuZ2V0U2VyaWFsaXplZFBsYWNlaG9sZGVycygpLGw9e30sYz1hLnNpemU/aDkoYSk6e307ZS5zaXplJiZlLmZvckVhY2goKHAsaCk9PntpZigxPT09cC5sZW5ndGgpY1toXT1wWzBdO2Vsc2V7bGV0IGY9UTEoYEkxOE5fRVhQXyR7aH1gKTtjW2hdPW50KGYpLGxbaF09Y3IocCl9fSksKEFycmF5LmZyb20oYS52YWx1ZXMoKSkuc29tZShwPT5wLmxlbmd0aD4xKXx8T2JqZWN0LmtleXMobCkubGVuZ3RoKSYmKGQ9cD0+e2xldCBoPVtwXTtyZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiZoLnB1c2goejEobCwhMCkpLHhmKG51bGwsSy5pMThuUG9zdHByb2Nlc3MsaCl9KSx0aGlzLmkxOG5UcmFuc2xhdGUoaSxjLHQucmVmLGQpfX1pMThuU3RhcnQodD1udWxsLGUsaSl7bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCk7dGhpcy5pMThuPXRoaXMuaTE4bkNvbnRleHQ/dGhpcy5pMThuQ29udGV4dC5mb3JrQ2hpbGRDb250ZXh0KHIsdGhpcy50ZW1wbGF0ZUluZGV4LGUpOm5ldyBSeChyLHRoaXMuaTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCksMCx0aGlzLnRlbXBsYXRlSW5kZXgsZSk7bGV0e2lkOm8scmVmOnN9PXRoaXMuaTE4bixhPVtudChyKSx0aGlzLmFkZFRvQ29uc3RzKHMpXTtvPjAmJmEucHVzaChudChvKSksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsaT9LLmkxOG46Sy5pMThuU3RhcnQsYSl9aTE4bkVuZCh0PW51bGwsZSl7aWYoIXRoaXMuaTE4bil0aHJvdyBuZXcgRXJyb3IoImkxOG5FbmQgaXMgZXhlY3V0ZWQgd2l0aCBubyBpMThuIGNvbnRleHQgcHJlc2VudCIpO3RoaXMuaTE4bkNvbnRleHQ/KHRoaXMuaTE4bkNvbnRleHQucmVjb25jaWxlQ2hpbGRDb250ZXh0KHRoaXMuaTE4biksdGhpcy5pMThuVXBkYXRlUmVmKHRoaXMuaTE4bkNvbnRleHQpKTp0aGlzLmkxOG5VcGRhdGVSZWYodGhpcy5pMThuKTtsZXR7aW5kZXg6aSxiaW5kaW5nczpyfT10aGlzLmkxOG47aWYoci5zaXplKXtmb3IobGV0IG8gb2Ygcil0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UodGhpcy5nZXRDb25zdENvdW50KCktMSx0LEsuaTE4bkV4cCwoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKG8pKTt0aGlzLnVwZGF0ZUluc3RydWN0aW9uKHQsSy5pMThuQXBwbHksW250KGkpXSl9ZXx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsSy5pMThuRW5kKSx0aGlzLmkxOG49bnVsbH1pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKHQsZSxpKXtsZXQgcj0hMSxvPVtdO2lmKGUuZm9yRWFjaChzPT57bGV0IGE9cy5pMThuLGw9cy52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhsKSxsIGluc3RhbmNlb2YgWm8pe2xldCB1PWg5KERxKGEpKTtvLnB1c2gobnQocy5uYW1lKSx0aGlzLmkxOG5UcmFuc2xhdGUoYSx1KSksbC5leHByZXNzaW9ucy5mb3JFYWNoKGQ9PntyPSEwLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGksSy5pMThuRXhwLCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcoZCkpfSl9fSksby5sZW5ndGg+MCl7bGV0IHM9bnQodGhpcy5hbGxvY2F0ZURhdGFTbG90KCkpLGE9dGhpcy5hZGRUb0NvbnN0cyhjcihvKSk7dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGksSy5pMThuQXR0cmlidXRlcyxbcyxhXSksciYmdGhpcy51cGRhdGVJbnN0cnVjdGlvbihpLEsuaTE4bkFwcGx5LFtzXSl9fWdldE5hbWVzcGFjZUluc3RydWN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIm1hdGgiOnJldHVybiBLLm5hbWVzcGFjZU1hdGhNTDtjYXNlInN2ZyI6cmV0dXJuIEsubmFtZXNwYWNlU1ZHO2RlZmF1bHQ6cmV0dXJuIEsubmFtZXNwYWNlSFRNTH19YWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24odCxlKXt0aGlzLl9uYW1lc3BhY2U9dCx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZS5zdGFydFNvdXJjZVNwYW4sdCl9aW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkscixvLHMpe3RoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHIuc291cmNlU3Bhbix0LCgpPT5bbnQoaSksLi4udGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhvKSwuLi5zXSl9dmlzaXRDb250ZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9dGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0K3RoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoLHI9W250KGUpXTt0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2godC5zZWxlY3Rvcik7bGV0IG89dC5hdHRyaWJ1dGVzLmZpbHRlcihhPT4ic2VsZWN0IiE9PWEubmFtZS50b0xvd2VyQ2FzZSgpKSxzPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLG8sW10sW10pO3MubGVuZ3RoPjA/ci5wdXNoKG50KGkpLGNyKHMpKTowIT09aSYmci5wdXNoKG50KGkpKSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsucHJvamVjdGlvbixyKSx0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRQcm9qZWN0aW9uKHQuaTE4bixlKX12aXNpdEVsZW1lbnQodCl7bGV0IGU9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksaT1uZXcgTjEobnVsbCkscj0hMSxvPXB4KHQuaTE4bikmJiFpMSh0LmkxOG4pLHM9W10sW2EsbF09Y2QodC5uYW1lKSxjPVVOKHQubmFtZSk7Zm9yKGxldCBmZSBvZiB0LmF0dHJpYnV0ZXMpe2xldHtuYW1lOnZlLHZhbHVlOlR9PWZlOyJuZ05vbkJpbmRhYmxlIj09PXZlP3I9ITA6InN0eWxlIj09PXZlP2kucmVnaXN0ZXJTdHlsZUF0dHIoVCk6ImNsYXNzIj09PXZlP2kucmVnaXN0ZXJDbGFzc0F0dHIoVCk6cy5wdXNoKGZlKX1sZXQgdT1bbnQoZSldO2N8fHUucHVzaChudChsKSk7bGV0IGQ9W10scD1bXTt0LmlucHV0cy5mb3JFYWNoKGZlPT57aS5yZWdpc3RlckJvdW5kSW5wdXQoZmUpfHwoMD09PWZlLnR5cGUmJmZlLmkxOG4/cC5wdXNoKGZlKTpkLnB1c2goZmUpKX0pO2xldCBoPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLHMsZCx0Lm91dHB1dHMsaSxbXSxwKTt1LnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGgpKTtsZXQgZj10aGlzLnByZXBhcmVSZWZzQXJyYXkodC5yZWZlcmVuY2VzKTt1LnB1c2godGhpcy5hZGRUb0NvbnN0cyhmKSk7bGV0IG09dGhpcy5fbmFtZXNwYWNlLEM9dGhpcy5nZXROYW1lc3BhY2VJbnN0cnVjdGlvbihhKTtDIT09bSYmdGhpcy5hZGROYW1lc3BhY2VJbnN0cnVjdGlvbihDLHQpLHRoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZEVsZW1lbnQodC5pMThuLGUpO2xldCBfPSFvJiZ0aGlzLmkxOG4/IVZOKHQuY2hpbGRyZW4pOnQuY2hpbGRyZW4ubGVuZ3RoPjAseT0haS5oYXNCaW5kaW5nc1dpdGhQaXBlcyYmMD09PXQub3V0cHV0cy5sZW5ndGgmJjA9PT1wLmxlbmd0aCYmIV8sST0heSYmVk4odC5jaGlsZHJlbik7aWYoeSl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLGM/Sy5lbGVtZW50Q29udGFpbmVyOksuZWxlbWVudCxTTih1KSk7ZWxzZXtpZih0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sYz9LLmVsZW1lbnRDb250YWluZXJTdGFydDpLLmVsZW1lbnRTdGFydCxTTih1KSksciYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc3RhcnRTb3VyY2VTcGFuLEsuZGlzYWJsZUJpbmRpbmdzKSxwLmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oZSxwLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLHQub3V0cHV0cy5sZW5ndGg+MClmb3IobGV0IGZlIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKHQubmFtZSxmZSxlKSk7byYmdGhpcy5pMThuU3RhcnQodC5zdGFydFNvdXJjZVNwYW4sdC5pMThuLEkpfWxldCBBPWkuYnVpbGRVcGRhdGVMZXZlbEluc3RydWN0aW9ucyh0aGlzLl92YWx1ZUNvbnZlcnRlciksTz1BLmxlbmd0aC0xO2ZvcihsZXQgZmU9MDtmZTw9TztmZSsrKXRoaXMuX2JpbmRpbmdTbG90cys9dGhpcy5wcm9jZXNzU3R5bGluZ1VwZGF0ZUluc3RydWN0aW9uKGUsQVtmZV0pO2xldCBlZT1udCh2b2lkIDApLFg9W10seGU9W107ZC5mb3JFYWNoKGZlPT57bGV0IHZlPWZlLnR5cGU7aWYoND09PXZlKXtsZXQgVD1mZS52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlciksbmU9IShUIGluc3RhbmNlb2YgSXMmJiFULnZhbHVlKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLFgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9Pm5lP3RoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKTplZSxNcShmZS5uYW1lKSl9KX1lbHNle2lmKGZlLmkxOG4pcmV0dXJuO2xldCBUPWZlLnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTtpZih2b2lkIDAhPT1UKXtsZXQgbmU9W10sW2xlLGhlXT1jZChmZS5uYW1lKSxKPWNZKGZlLnNlY3VyaXR5Q29udGV4dCwxPT09dmUpO2lmKEomJm5lLnB1c2goSiksbGUpe2xldCBhZT1udChsZSk7Sj9uZS5wdXNoKGFlKTpuZS5wdXNoKG50KG51bGwpLGFlKX1pZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLDA9PT12ZSlUIGluc3RhbmNlb2YgWm8/dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShUKSxlLGhlLGZlLFQsbmUpOlgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSxoZSxuZSl9KTtlbHNlIGlmKDE9PT12ZSlpZihUIGluc3RhbmNlb2YgWm8mJkFmKFQpPjEpdGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihmdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmF0dHJpYnV0ZUludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuYXR0cmlidXRlSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVZ9fShUKSxlLGhlLGZlLFQsbmUpO2Vsc2V7bGV0IGFlPVQgaW5zdGFuY2VvZiBabz9ULmV4cHJlc3Npb25zWzBdOlQ7eGUucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhhZSksaGUsbmUpfSl9ZWxzZSB0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSxmZS5zb3VyY2VTcGFuLEsuY2xhc3NQcm9wLCgpPT5bbnQoZSksbnQoaGUpLHRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSwuLi5uZV0pfX19KTtmb3IobGV0IGZlIG9mIFgpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLnByb3BlcnR5LGZlLnBhcmFtc09yRm4pO2ZvcihsZXQgZmUgb2YgeGUpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLmF0dHJpYnV0ZSxmZS5wYXJhbXNPckZuKTtpZihkOSh0aGlzLHQuY2hpbGRyZW4pLCFvJiZ0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlLCEwKSwheSl7bGV0IGZlPXQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuO28mJnRoaXMuaTE4bkVuZChmZSxJKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUsSy5lbmFibGVCaW5kaW5ncyksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGZlLGM/Sy5lbGVtZW50Q29udGFpbmVyRW5kOksuZWxlbWVudEVuZCl9fXZpc2l0VGVtcGxhdGUodCl7bGV0IGU9Im5nLXRlbXBsYXRlIixpPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZFRlbXBsYXRlKHQuaTE4bixpKTtsZXQgcj10LnRhZ05hbWU/Y2QodC50YWdOYW1lKVsxXTp0LnRhZ05hbWUsbz1gJHt0aGlzLmNvbnRleHROYW1lfSR7dC50YWdOYW1lPyJfIittMCh0LnRhZ05hbWUpOiIifV8ke2l9YCxzPWAke299X1RlbXBsYXRlYCxhPVtudChpKSxNaShzKSxudChyKV0sbD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKGUsdC5hdHRyaWJ1dGVzLHQuaW5wdXRzLHQub3V0cHV0cyx2b2lkIDAsdC50ZW1wbGF0ZUF0dHJzKTtpZihhLnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGwpKSx0LnJlZmVyZW5jZXMmJnQucmVmZXJlbmNlcy5sZW5ndGgpe2xldCB1PXRoaXMucHJlcGFyZVJlZnNBcnJheSh0LnJlZmVyZW5jZXMpO2EucHVzaCh0aGlzLmFkZFRvQ29uc3RzKHUpKSxhLnB1c2goeG4oSy50ZW1wbGF0ZVJlZkV4dHJhY3RvcikpfWxldCBjPW5ldyBPeCh0aGlzLmNvbnN0YW50UG9vbCx0aGlzLl9iaW5kaW5nU2NvcGUsdGhpcy5sZXZlbCsxLG8sdGhpcy5pMThuLGkscyx0aGlzLl9uYW1lc3BhY2UsdGhpcy5maWxlQmFzZWRJMThuU3VmZml4LHRoaXMuaTE4blVzZUV4dGVybmFsSWRzLHRoaXMuX2NvbnN0YW50cyk7aWYodGhpcy5fbmVzdGVkVGVtcGxhdGVGbnMucHVzaCgoKT0+e2xldCB1PWMuYnVpbGRUZW1wbGF0ZUZ1bmN0aW9uKHQuY2hpbGRyZW4sdC52YXJpYWJsZXMsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgrdGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0LHQuaTE4bik7dGhpcy5jb25zdGFudFBvb2wuc3RhdGVtZW50cy5wdXNoKHUudG9EZWNsU3RtdChzKSksYy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMucHVzaCguLi5jLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzKX0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih0LnNvdXJjZVNwYW4sSy50ZW1wbGF0ZUNyZWF0ZSwoKT0+KGEuc3BsaWNlKDIsMCxudChjLmdldENvbnN0Q291bnQoKSksbnQoYy5nZXRWYXJDb3VudCgpKSksU04oYSkpKSx0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLHQudGVtcGxhdGVBdHRycykscj09PWUpe2xldFt1LGRdPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXTtmb3IobGV0IHIgb2YgbikodChyKT9lOmkpLnB1c2gocik7cmV0dXJuW2UsaV19KHQuaW5wdXRzLHB2ZSk7dS5sZW5ndGg+MCYmdGhpcy5pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKGksdSx0LnN0YXJ0U291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSxkLmxlbmd0aD4wJiZ0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLGQpO2ZvcihsZXQgcCBvZiB0Lm91dHB1dHMpdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHAuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKCJuZ190ZW1wbGF0ZSIscCxpKSl9fXZpc2l0Qm91bmRUZXh0KHQpe2lmKHRoaXMuaTE4bil7bGV0IHI9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7cmV0dXJuIHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMociksdm9pZChyIGluc3RhbmNlb2YgWm8mJih0aGlzLmkxOG4uYXBwZW5kQm91bmRUZXh0KHQuaTE4biksdGhpcy5pMThuQXBwZW5kQmluZGluZ3Moci5leHByZXNzaW9ucykpKX1sZXQgZT10aGlzLmFsbG9jYXRlRGF0YVNsb3QoKTt0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsudGV4dCxbbnQoZSldKTtsZXQgaT10LnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKGkpLGkgaW5zdGFuY2VvZiBabz90aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSx0LnNvdXJjZVNwYW4sZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlO2Nhc2UgMzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsudGV4dEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZVZ9fShpKSwoKT0+dGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhpKSk6aDEoIlRleHQgbm9kZXMgc2hvdWxkIGJlIGludGVycG9sYXRlZCBhbmQgbmV2ZXIgYm91bmQgZGlyZWN0bHkuIil9dmlzaXRUZXh0KHQpe3RoaXMuaTE4bnx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc291cmNlU3BhbixLLnRleHQsW250KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxudCh0LnZhbHVlKV0pfXZpc2l0SWN1KHQpe2xldCBlPSExO3RoaXMuaTE4bnx8KGU9ITAsdGhpcy5pMThuU3RhcnQobnVsbCx0LmkxOG4sITApKTtsZXQgaT10aGlzLmkxOG4scj10aGlzLmkxOG5CaW5kUHJvcHModC52YXJzKSxvPXRoaXMuaTE4bkJpbmRQcm9wcyh0LnBsYWNlaG9sZGVycykscz10LmkxOG4sYT1sPT57bGV0IHU9czMoey4uLnIsLi4ub30sITEpO3JldHVybiB4ZihudWxsLEsuaTE4blBvc3Rwcm9jZXNzLFtsLHoxKHUsITApXSl9O2lmKGkxKGkubWV0YSkpdGhpcy5pMThuVHJhbnNsYXRlKHMse30saS5yZWYsYSk7ZWxzZXtsZXQgbD10aGlzLmkxOG5UcmFuc2xhdGUocyx7fSx2b2lkIDAsYSk7aS5hcHBlbmRJY3UoVHEocykubmFtZSxsKX1yZXR1cm4gZSYmdGhpcy5pMThuRW5kKG51bGwsITApLG51bGx9YWxsb2NhdGVEYXRhU2xvdCgpe3JldHVybiB0aGlzLl9kYXRhSW5kZXgrK31nZXRDb25zdENvdW50KCl7cmV0dXJuIHRoaXMuX2RhdGFJbmRleH1nZXRWYXJDb3VudCgpe3JldHVybiB0aGlzLl9wdXJlRnVuY3Rpb25TbG90c31nZXRDb25zdHMoKXtyZXR1cm4gdGhpcy5fY29uc3RhbnRzfWdldE5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiB0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD90aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUodGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cyksITApOm51bGx9YmluZGluZ0NvbnRleHQoKXtyZXR1cm4iIit0aGlzLl9iaW5kaW5nQ29udGV4dCsrfXRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyh0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKXtpZighKHIgaW5zdGFuY2VvZiBNMCkpY29udGludWU7bGV0IG89ci52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodm9pZCAwIT09bylpZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKG8pLG8gaW5zdGFuY2VvZiBabyl7bGV0IHM9W107dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShvKSx0LHIubmFtZSxyLG8scyl9ZWxzZSBpLnB1c2goe3NwYW46ci5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSxyLm5hbWUpfSl9Zm9yKGxldCByIG9mIGkpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsci5zcGFuLEsucHJvcGVydHksci5wYXJhbXNPckZuKX1pbnN0cnVjdGlvbkZuKHQsZSxpLHIsbz0hMSl7dFtvPyJ1bnNoaWZ0IjoicHVzaCJdKHtzcGFuOmUscmVmZXJlbmNlOmkscGFyYW1zT3JGbjpyfSl9cHJvY2Vzc1N0eWxpbmdVcGRhdGVJbnN0cnVjdGlvbih0LGUpe2xldCBpPTA7aWYoZSlmb3IobGV0IHIgb2YgZS5jYWxscylpKz1yLmFsbG9jYXRlQmluZGluZ1Nsb3RzLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LHIuc291cmNlU3BhbixlLnJlZmVyZW5jZSwoKT0+ci5wYXJhbXMobz0+ci5zdXBwb3J0c0ludGVycG9sYXRpb24mJm8gaW5zdGFuY2VvZiBabz90aGlzLmdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKG8pOnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSkpO3JldHVybiBpfWNyZWF0aW9uSW5zdHJ1Y3Rpb24odCxlLGkscil7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX2NyZWF0aW9uQ29kZUZucyx0LGUsaXx8W10scil9dXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGUsaSxyKXt0aGlzLmFkZEFkdmFuY2VJbnN0cnVjdGlvbklmTmVjZXNzYXJ5KHQsZSksdGhpcy51cGRhdGVJbnN0cnVjdGlvbihlLGkscil9dXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkpe3RoaXMuaW5zdHJ1Y3Rpb25Gbih0aGlzLl91cGRhdGVDb2RlRm5zLHQsZSxpfHxbXSl9YWRkQWR2YW5jZUluc3RydWN0aW9uSWZOZWNlc3NhcnkodCxlKXtpZih0IT09dGhpcy5fY3VycmVudEluZGV4KXtsZXQgaT10LXRoaXMuX2N1cnJlbnRJbmRleDtpZihpPDEpdGhyb3cgbmV3IEVycm9yKCJhZHZhbmNlIGluc3RydWN0aW9uIGNhbiBvbmx5IGdvIGZvcndhcmRzIik7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX3VwZGF0ZUNvZGVGbnMsZSxLLmFkdmFuY2UsW250KGkpXSksdGhpcy5fY3VycmVudEluZGV4PXR9fWFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHModCl7bGV0IGU9dGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHM7cmV0dXJuIHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzKz10LGV9YWxsb2NhdGVCaW5kaW5nU2xvdHModCl7dGhpcy5fYmluZGluZ1Nsb3RzKz10IGluc3RhbmNlb2YgWm8/dC5leHByZXNzaW9ucy5sZW5ndGg6MX1nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpe3JldHVybiB0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj90aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcjp0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj0wPT09dGhpcy5sZXZlbD9NaShhYyk6dGhpcy5fYmluZGluZ1Njb3BlLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKX1jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHQpe2xldCBlPXFxKHRoaXMsdGhpcy5nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpLHQsdGhpcy5iaW5kaW5nQ29udGV4dCgpKSxpPWUuY3VyclZhbEV4cHI7cmV0dXJuIHRoaXMuX3RlbXBWYXJpYWJsZXMucHVzaCguLi5lLnN0bXRzKSxpfWdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKHQpe2xldHthcmdzOmUsc3RtdHM6aX09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bmV3IFR4KG4sdCxpLCEwKSxvPXIudmlzaXRJbnRlcnBvbGF0aW9uKGUsQmkuRXhwcmVzc2lvbik7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLHtzdG10czpZcShyLGkpLGFyZ3M6by5hcmdzfX0odGhpcyx0aGlzLmdldEltcGxpY2l0UmVjZWl2ZXJFeHByKCksdCx0aGlzLmJpbmRpbmdDb250ZXh0KCkpO3JldHVybiB0aGlzLl90ZW1wVmFyaWFibGVzLnB1c2goLi4uaSksZX1nZXRBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LGUsaSxyLG8scz1bXSxhPVtdKXtsZXQgdSxsPW5ldyBTZXQsYz1bXTtmb3IobGV0IHAgb2YgZSlpZigibmdQcm9qZWN0QXMiPT09cC5uYW1lJiYodT1wKSxwLmkxOG4pe2xldCBmLHtpMThuVmFyUmVmc0NhY2hlOmh9PXRoaXMuX2NvbnN0YW50cztoLmhhcyhwLmkxOG4pP2Y9aC5nZXQocC5pMThuKTooZj10aGlzLmkxOG5UcmFuc2xhdGUocC5pMThuKSxoLnNldChwLmkxOG4sZikpLGMucHVzaChudChwLm5hbWUpLGYpfWVsc2UgYy5wdXNoKC4uLmlxKHAubmFtZSksZ3hlKHQscCkpO2Z1bmN0aW9uIGQocCxoKXsic3RyaW5nIj09dHlwZW9mIHA/bC5oYXMocCl8fChjLnB1c2goLi4uaXEocCkpLHZvaWQgMCE9PWgmJmMucHVzaChoKSxsLmFkZChwKSk6Yy5wdXNoKG50KHApKX1pZih1JiZjLnB1c2goLi4uZnVuY3Rpb24obil7bGV0IHQ9dDMobi52YWx1ZSlbMF07cmV0dXJuW250KDUpLHJ1KHQpXX0odSkpLG8mJm8ucG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKGMpLGkubGVuZ3RofHxyLmxlbmd0aCl7bGV0IHA9Yy5sZW5ndGg7Zm9yKGxldCBoPTA7aDxpLmxlbmd0aDtoKyspe2xldCBmPWlbaF07NCE9PWYudHlwZSYmMSE9PWYudHlwZSYmZChmLm5hbWUpfWZvcihsZXQgaD0wO2g8ci5sZW5ndGg7aCsrKXtsZXQgZj1yW2hdOzEhPT1mLnR5cGUmJmQoZi5uYW1lKX1jLmxlbmd0aCE9PXAmJmMuc3BsaWNlKHAsMCxudCgzKSl9cmV0dXJuIHMubGVuZ3RoJiYoYy5wdXNoKG50KDQpKSxzLmZvckVhY2gocD0+ZChwLm5hbWUpKSksYS5sZW5ndGgmJihjLnB1c2gobnQoNikpLGEuZm9yRWFjaChwPT5kKHAubmFtZSkpKSxjfWFkZFRvQ29uc3RzKHQpe2lmKHhxKHQpKXJldHVybiBjMTtsZXQgZT10aGlzLl9jb25zdGFudHMuY29uc3RFeHByZXNzaW9ucztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlzRXF1aXZhbGVudCh0KSlyZXR1cm4gbnQoaSk7cmV0dXJuIG50KGUucHVzaCh0KS0xKX1hZGRBdHRyc1RvQ29uc3RzKHQpe3JldHVybiB0Lmxlbmd0aD4wP3RoaXMuYWRkVG9Db25zdHMoY3IodCkpOmMxfXByZXBhcmVSZWZzQXJyYXkodCl7cmV0dXJuIHQmJjAhPT10Lmxlbmd0aD9ydSh1WSh0Lm1hcChpPT57bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksbz10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCkscz10aGlzLmxldmVsLGE9TWkobyk7cmV0dXJuIHRoaXMuX2JpbmRpbmdTY29wZS5zZXQocyxpLm5hbWUsYSwwLChsLGMpPT57bGV0IHU9Yz4wP1tRTChjKS50b1N0bXQoKV06W10sZD1hLnNldCh4bihLLnJlZmVyZW5jZSkuY2FsbEZuKFtudChyKV0pKTtyZXR1cm4gdS5jb25jYXQoZC50b0NvbnN0RGVjbCgpKX0sITApLFtpLm5hbWUsaS52YWx1ZV19KSkpOmMxfXByZXBhcmVMaXN0ZW5lclBhcmFtZXRlcih0LGUsaSl7cmV0dXJuKCk9PntsZXQgcj1lLm5hbWUsbz0xPT09ZS50eXBlP1NxKHIsZS5waGFzZSk6bTAocikscz1gJHt0aGlzLnRlbXBsYXRlTmFtZX1fJHt0fV8ke299XyR7aX1fbGlzdGVuZXJgLGE9dGhpcy5fYmluZGluZ1Njb3BlLm5lc3RlZFNjb3BlKHRoaXMuX2JpbmRpbmdTY29wZS5iaW5kaW5nTGV2ZWwsc1kpO3JldHVybiBhWShlLHMsYSl9fX0sVzE9Y2xhc3MgZXh0ZW5kcyB2THtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5hbGxvY2F0ZVNsb3Q9ZSx0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHM9aSx0aGlzLmRlZmluZVBpcGU9cix0aGlzLl9waXBlQmluZEV4cHJzPVtdfXZpc2l0UGlwZSh0LGUpe2xldCBpPXRoaXMuYWxsb2NhdGVTbG90KCkscj1gUElQRToke2l9YCxvPXRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cygyK3QuYXJncy5sZW5ndGgpLHM9bmV3IG91KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixuZXcgRWYodC5zcGFuLHQuc291cmNlU3Bhbikscikse2lkZW50aWZpZXI6YSxpc1Zhckxlbmd0aDpsfT1mdW5jdGlvbihuKXtsZXQgdD1seGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucGlwZUJpbmRWLGlzVmFyTGVuZ3RoOiF0fX0odC5hcmdzKTt0aGlzLmRlZmluZVBpcGUodC5uYW1lLHIsaSx4bihhKSk7bGV0IGM9W3QuZXhwLC4uLnQuYXJnc10sdT10aGlzLnZpc2l0QWxsKGw/W25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGMpXTpjKSxkPW5ldyBicCh0LnNwYW4sdC5zb3VyY2VTcGFuLHMsW25ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpLG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLG8pLC4uLnVdLG51bGwpO3JldHVybiB0aGlzLl9waXBlQmluZEV4cHJzLnB1c2goZCksZH11cGRhdGVQaXBlU2xvdE9mZnNldHModCl7dGhpcy5fcGlwZUJpbmRFeHBycy5mb3JFYWNoKGU9PntlLmFyZ3NbMV0udmFsdWUrPXR9KX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpLGk9PntsZXQgcj1jcihpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9dmlzaXRMaXRlcmFsTWFwKHQsZSl7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpLGk9PntsZXQgcj1tbChpLm1hcCgobyxzKT0+KHtrZXk6dC5rZXlzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmtleXNbc10ucXVvdGVkfSkpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9fSxseGU9W0sucGlwZUJpbmQxLEsucGlwZUJpbmQyLEsucGlwZUJpbmQzLEsucGlwZUJpbmQ0XSx1eGU9W0sucHVyZUZ1bmN0aW9uMCxLLnB1cmVGdW5jdGlvbjEsSy5wdXJlRnVuY3Rpb24yLEsucHVyZUZ1bmN0aW9uMyxLLnB1cmVGdW5jdGlvbjQsSy5wdXJlRnVuY3Rpb241LEsucHVyZUZ1bmN0aW9uNixLLnB1cmVGdW5jdGlvbjcsSy5wdXJlRnVuY3Rpb244XTtmdW5jdGlvbiBRTChuKXtyZXR1cm4geG4oSy5uZXh0Q29udGV4dCkuY2FsbEZuKG4+MT9bbnQobildOltdKX1mdW5jdGlvbiBucShuLHQsZSl7bGV0e2xpdGVyYWxGYWN0b3J5OmksbGl0ZXJhbEZhY3RvcnlBcmd1bWVudHM6cn09bi5nZXRMaXRlcmFsRmFjdG9yeSh0KSxvPWUoMStyLmxlbmd0aCkse2lkZW50aWZpZXI6cyxpc1Zhckxlbmd0aDphfT1mdW5jdGlvbihuKXtsZXQgdD11eGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucHVyZUZ1bmN0aW9uVixpc1Zhckxlbmd0aDohdH19KHIpLGw9W250KG8pLGldO3JldHVybiBhP2wucHVzaChjcihyKSk6bC5wdXNoKC4uLnIpLHhuKHMpLmNhbGxGbihsKX1mdW5jdGlvbiBpcShuKXtsZXRbdCxlXT1jZChuKSxpPW50KGUpO3JldHVybiB0P1tudCgwKSxudCh0KSxpXTpbaV19dmFyIG8wPSIkJHNoYXJlZF9jdHgkJCIsQjA9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9bnVsbCxpKXtpZih0aGlzLmJpbmRpbmdMZXZlbD10LHRoaXMucGFyZW50PWUsdGhpcy5nbG9iYWxzPWksdGhpcy5tYXA9bmV3IE1hcCx0aGlzLnJlZmVyZW5jZU5hbWVJbmRleD0wLHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZT1udWxsLHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ9ITEsdm9pZCAwIT09aSlmb3IobGV0IHIgb2YgaSl0aGlzLnNldCgwLHIsTWkocikpfXN0YXRpYyBjcmVhdGVSb290U2NvcGUoKXtyZXR1cm4gbmV3IEIwfWdldCh0KXtsZXQgZT10aGlzO2Zvcig7ZTspe2xldCBpPWUubWFwLmdldCh0KTtpZihudWxsIT1pKXJldHVybiBlIT09dGhpcyYmKGk9e3JldHJpZXZhbExldmVsOmkucmV0cmlldmFsTGV2ZWwsbGhzOmkubGhzLGRlY2xhcmVMb2NhbENhbGxiYWNrOmkuZGVjbGFyZUxvY2FsQ2FsbGJhY2ssZGVjbGFyZTohMSxwcmlvcml0eTppLnByaW9yaXR5fSx0aGlzLm1hcC5zZXQodCxpKSx0aGlzLm1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKGkpLHRoaXMubWF5YmVSZXN0b3JlVmlldygpKSxpLmRlY2xhcmVMb2NhbENhbGxiYWNrJiYhaS5kZWNsYXJlJiYoaS5kZWNsYXJlPSEwKSxpLmxocztlPWUucGFyZW50fXJldHVybiAwPT09dGhpcy5iaW5kaW5nTGV2ZWw/bnVsbDp0aGlzLmdldENvbXBvbmVudFByb3BlcnR5KHQpfXNldCh0LGUsaSxyPTAsbyxzKXtpZih0aGlzLm1hcC5oYXMoZSkpe2lmKHMpcmV0dXJuIHRoaXM7aDEoYFRoZSBuYW1lICR7ZX0gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHNjb3BlIHRvIGJlICR7dGhpcy5tYXAuZ2V0KGUpfWApfXJldHVybiB0aGlzLm1hcC5zZXQoZSx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6aSxkZWNsYXJlOiExLGRlY2xhcmVMb2NhbENhbGxiYWNrOm8scHJpb3JpdHk6cn0pLHRoaXN9Z2V0TG9jYWwodCl7cmV0dXJuIHRoaXMuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXswIT09dGhpcy5iaW5kaW5nTGV2ZWwmJih0aGlzLm1hcC5nZXQobzArMCkuZGVjbGFyZT0hMCl9bmVzdGVkU2NvcGUodCxlKXtsZXQgaT1uZXcgQjAodCx0aGlzLGUpO3JldHVybiB0PjAmJmkuZ2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKDApLGl9Z2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2xldCBlPW8wK3Q7cmV0dXJuIHRoaXMubWFwLmhhcyhlKXx8dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodCksdGhpcy5tYXAuZ2V0KGUpLmxoc31nZXRTaGFyZWRDb250ZXh0TmFtZSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArdCk7cmV0dXJuIGUmJmUuZGVjbGFyZT9lLmxoczpudWxsfW1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2lmKDE9PT10LnByaW9yaXR5JiZ0LnJldHJpZXZhbExldmVsPHRoaXMuYmluZGluZ0xldmVsKXtsZXQgZT10aGlzLm1hcC5nZXQobzArdC5yZXRyaWV2YWxMZXZlbCk7ZT9lLmRlY2xhcmU9ITA6dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodC5yZXRyaWV2YWxMZXZlbCl9fWdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0KXtsZXQgZT1NaShhYyt0aGlzLmZyZXNoUmVmZXJlbmNlTmFtZSgpKTt0aGlzLm1hcC5zZXQobzArdCx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6ZSxkZWNsYXJlTG9jYWxDYWxsYmFjazooaSxyKT0+W2Uuc2V0KFFMKHIpKS50b0NvbnN0RGVjbCgpXSxkZWNsYXJlOiExLHByaW9yaXR5OjJ9KX1nZXRDb21wb25lbnRQcm9wZXJ0eSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArMCk7cmV0dXJuIGUuZGVjbGFyZT0hMCx0aGlzLm1heWJlUmVzdG9yZVZpZXcoKSxlLmxocy5wcm9wKHQpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLmlzTGlzdGVuZXJTY29wZSgpJiYodGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZXx8KHRoaXMucGFyZW50LnJlc3RvcmVWaWV3VmFyaWFibGU9TWkodGhpcy5wYXJlbnQuZnJlc2hSZWZlcmVuY2VOYW1lKCkpKSx0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU9dGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZSl9cmVzdG9yZVZpZXdTdGF0ZW1lbnQoKXtpZih0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGUpe2xldCB0PXhmKG51bGwsSy5yZXN0b3JlVmlldyxbdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlXSk7cmV0dXJuIHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ/TWkoQXEpLnNldCh0KS50b0NvbnN0RGVjbCgpOnQudG9TdG10KCl9cmV0dXJuIG51bGx9dmlld1NuYXBzaG90U3RhdGVtZW50cygpe3JldHVybiB0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU/W3RoaXMucmVzdG9yZVZpZXdWYXJpYWJsZS5zZXQoeGYobnVsbCxLLmdldEN1cnJlbnRWaWV3LFtdKSkudG9Db25zdERlY2woKV06W119aXNMaXN0ZW5lclNjb3BlKCl7cmV0dXJuIHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5iaW5kaW5nTGV2ZWw9PT10aGlzLmJpbmRpbmdMZXZlbH12YXJpYWJsZURlY2xhcmF0aW9ucygpe2xldCB0PTA7cmV0dXJuIEFycmF5LmZyb20odGhpcy5tYXAudmFsdWVzKCkpLmZpbHRlcihlPT5lLmRlY2xhcmUpLnNvcnQoKGUsaSk9PmkucmV0cmlldmFsTGV2ZWwtZS5yZXRyaWV2YWxMZXZlbHx8aS5wcmlvcml0eS1lLnByaW9yaXR5KS5yZWR1Y2UoKGUsaSk9PntsZXQgcj10aGlzLmJpbmRpbmdMZXZlbC1pLnJldHJpZXZhbExldmVsLG89aS5kZWNsYXJlTG9jYWxDYWxsYmFjayh0aGlzLHItdCk7cmV0dXJuIHQ9cixlLmNvbmNhdChvKX0sW10pfWZyZXNoUmVmZXJlbmNlTmFtZSgpe2xldCB0PXRoaXM7Zm9yKDt0LnBhcmVudDspdD10LnBhcmVudDtyZXR1cm4iX3IiK3QucmVmZXJlbmNlTmFtZUluZGV4Kyt9aGFzUmVzdG9yZVZpZXdWYXJpYWJsZSgpe3JldHVybiEhdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlfW5vdGlmeVJlc3RvcmVkVmlld0NvbnRleHRVc2UoKXt0aGlzLnVzZXNSZXN0b3JlZFZpZXdDb250ZXh0PSEwfX07ZnVuY3Rpb24gcnEobil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTtjYXNlIDM6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGVWfX1mdW5jdGlvbiBteGUobix0LGU9e30pe2xldHtpbnRlcnBvbGF0aW9uQ29uZmlnOmkscHJlc2VydmVXaGl0ZXNwYWNlczpyLGVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ6b309ZSxzPXExKGkpLGw9KG5ldyBOTCkucGFyc2Uobix0LHtsZWFkaW5nVHJpdmlhQ2hhcnM6c3hlLC4uLmUsdG9rZW5pemVFeHBhbnNpb25Gb3JtczohMH0pO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmwuZXJyb3JzJiZsLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmwuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9bGV0IGM9bC5yb290Tm9kZXMsdT1uZXcgRzEoaSwhcixvKSxkPXUudmlzaXRBbGxXaXRoRXJyb3JzKGMpO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmQuZXJyb3JzJiZkLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmQuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9Yz1kLnJvb3ROb2RlcyxyfHwoYz1jdShuZXcgY2xhc3N7dmlzaXRFbGVtZW50KHQsZSl7cmV0dXJuIEp5ZS5oYXModC5uYW1lKXx8dC5hdHRycy5zb21lKHQ9PnQubmFtZT09PUpxKT9uZXcgQXgodC5uYW1lLGN1KHRoaXMsdC5hdHRycyksdC5jaGlsZHJlbix0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bik6bmV3IEF4KHQubmFtZSx0LmF0dHJzLGZ1bmN0aW9uKG4sdCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaCgoaSxyKT0+e2xldCBzPWkudmlzaXQobix7cHJldjp0W3ItMV0sbmV4dDp0W3IrMV19KTtzJiZlLnB1c2gocyl9KSxlfSh0aGlzLHQuY2hpbGRyZW4pLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKX12aXNpdEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0Lm5hbWUhPT1KcT90Om51bGx9dmlzaXRUZXh0KHQsZSl7aWYodC52YWx1ZS5tYXRjaCgkeWUpfHxlJiYoZS5wcmV2IGluc3RhbmNlb2YgTjB8fGUubmV4dCBpbnN0YW5jZW9mIE4wKSl7bGV0IG89dC50b2tlbnMubWFwKGE9PjU9PT1hLnR5cGU/ZnVuY3Rpb24oe3R5cGU6bixwYXJ0czp0LHNvdXJjZVNwYW46ZX0pe3JldHVybnt0eXBlOm4scGFydHM6W3RZKHRbMF0pXSxzb3VyY2VTcGFuOmV9fShhKTphKSxzPXRZKHQudmFsdWUpO3JldHVybiBuZXcgRjAocyx0LnNvdXJjZVNwYW4sbyx0LmkxOG4pfXJldHVybiBudWxsfXZpc2l0Q29tbWVudCh0LGUpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uKHQsZSl7cmV0dXJuIHR9dmlzaXRFeHBhbnNpb25DYXNlKHQsZSl7cmV0dXJuIHR9fSxjKSx1Lmhhc0kxOG5NZXRhJiYoYz1jdShuZXcgRzEoaSwhMSksYykpKTtsZXR7bm9kZXM6cCxlcnJvcnM6aCxzdHlsZVVybHM6ZixzdHlsZXM6bSxuZ0NvbnRlbnRTZWxlY3RvcnM6Qyxjb21tZW50Tm9kZXM6X309ZnVuY3Rpb24obix0LGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYmluZGluZ1BhcnNlcj10LHRoaXMub3B0aW9ucz1lLHRoaXMuZXJyb3JzPVtdLHRoaXMuc3R5bGVzPVtdLHRoaXMuc3R5bGVVcmxzPVtdLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPVtdLHRoaXMuY29tbWVudE5vZGVzPVtdLHRoaXMuaW5JMThuQmxvY2s9ITF9dmlzaXRFbGVtZW50KHQpe2xldCBlPXB4KHQuaTE4bik7ZSYmKHRoaXMuaW5JMThuQmxvY2smJnRoaXMucmVwb3J0RXJyb3IoIkNhbm5vdCBtYXJrIGFuIGVsZW1lbnQgYXMgdHJhbnNsYXRhYmxlIGluc2lkZSBvZiBhIHRyYW5zbGF0YWJsZSBzZWN0aW9uLiBQbGVhc2UgcmVtb3ZlIHRoZSBuZXN0ZWQgaTE4biBtYXJrZXIuIix0LnNvdXJjZVNwYW4pLHRoaXMuaW5JMThuQmxvY2s9ITApO2xldCBpPXJZKHQpO2lmKGkudHlwZT09PVBzLlNDUklQVClyZXR1cm4gbnVsbDtpZihpLnR5cGU9PT1Qcy5TVFlMRSl7bGV0IEM9MT09PShuPXQpLmNoaWxkcmVuLmxlbmd0aCYmbi5jaGlsZHJlblswXWluc3RhbmNlb2YgRjA/bi5jaGlsZHJlblswXS52YWx1ZTpudWxsO3JldHVybiBudWxsIT09QyYmdGhpcy5zdHlsZXMucHVzaChDKSxudWxsfWlmKGkudHlwZT09PVBzLlNUWUxFU0hFRVQmJmZ1bmN0aW9uKG4pe2lmKG51bGw9PW58fDA9PT1uLmxlbmd0aHx8Ii8iPT1uWzBdKXJldHVybiExO2xldCB0PW4ubWF0Y2goZ2JlKTtyZXR1cm4gbnVsbD09PXR8fCJwYWNrYWdlIj09dFsxXXx8ImFzc2V0Ij09dFsxXX0oaS5ocmVmQXR0cikpcmV0dXJuIHRoaXMuc3R5bGVVcmxzLnB1c2goaS5ocmVmQXR0ciksbnVsbDt2YXIgbjtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4ibmctdGVtcGxhdGUiPT09Y2QobilbMV19KHQubmFtZSksbz1bXSxzPVtdLGE9W10sbD1bXSxjPVtdLHU9e30sZD1bXSxwPVtdLGg9ITE7Zm9yKGxldCBDIG9mIHQuYXR0cnMpe2xldCBfPSExLHk9JDkoQy5uYW1lKSxJPSExO2lmKEMuaTE4biYmKHVbQy5uYW1lXT1DLmkxOG4pLHkuc3RhcnRzV2l0aCgiKiIpKXtoJiZ0aGlzLnJlcG9ydEVycm9yKCJDYW4ndCBoYXZlIG11bHRpcGxlIHRlbXBsYXRlIGJpbmRpbmdzIG9uIG9uZSBlbGVtZW50LiBVc2Ugb25seSBvbmUgYXR0cmlidXRlIHByZWZpeGVkIHdpdGggKiIsQy5zb3VyY2VTcGFuKSxJPSEwLGg9ITA7bGV0IEE9Qy52YWx1ZSxPPXkuc3Vic3RyaW5nKCIqIi5sZW5ndGgpLGVlPVtdO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUlubGluZVRlbXBsYXRlQmluZGluZyhPLEEsQy5zb3VyY2VTcGFuLEMudmFsdWVTcGFuP0MudmFsdWVTcGFuLnN0YXJ0Lm9mZnNldDpDLnNvdXJjZVNwYW4uc3RhcnQub2Zmc2V0K0MubmFtZS5sZW5ndGgsW10sZCxlZSwhMCkscC5wdXNoKC4uLmVlLm1hcCh4ZT0+bmV3IHcxKHhlLm5hbWUseGUudmFsdWUseGUuc291cmNlU3Bhbix4ZS5rZXlTcGFuLHhlLnZhbHVlU3BhbikpKX1lbHNlIF89dGhpcy5wYXJzZUF0dHJpYnV0ZShyLEMsW10sbyxzLGEsbCk7IV8mJiFJJiZjLnB1c2godGhpcy52aXNpdEF0dHJpYnV0ZShDKSl9bGV0IG0sZj1jdShpLm5vbkJpbmRhYmxlP0liZTp0aGlzLHQuY2hpbGRyZW4pO2lmKGkudHlwZT09PVBzLk5HX0NPTlRFTlQpe3QuY2hpbGRyZW4mJiF0LmNoaWxkcmVuLmV2ZXJ5KHk9PmZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRjAmJjA9PW4udmFsdWUudHJpbSgpLmxlbmd0aH0oeSl8fGZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVjF9KHkpKSYmdGhpcy5yZXBvcnRFcnJvcigiPG5nLWNvbnRlbnQ+IGVsZW1lbnQgY2Fubm90IGhhdmUgY29udGVudC4iLHQuc291cmNlU3Bhbik7bGV0IEM9aS5zZWxlY3RBdHRyLF89dC5hdHRycy5tYXAoeT0+dGhpcy52aXNpdEF0dHJpYnV0ZSh5KSk7bT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5zZWxlY3Rvcj10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMuaTE4bj1yLHRoaXMubmFtZT0ibmctY29udGVudCJ9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRDb250ZW50KHRoaXMpfX0oQyxfLHQuc291cmNlU3Bhbix0LmkxOG4pLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLnB1c2goQyl9ZWxzZSBpZihyKXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IFliKHQubmFtZSxjLEMuYm91bmQscyxbXSxmLGwsYSx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bil9ZWxzZXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IEUwKHQubmFtZSxjLEMuYm91bmQscyxmLGwsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3Bhbix0LmkxOG4pfWlmKGgpe2xldCBDPXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXMoIm5nLXRlbXBsYXRlIixkLHUpLF89W107Qy5saXRlcmFsLmZvckVhY2goTz0+Xy5wdXNoKE8pKSxDLmJvdW5kLmZvckVhY2goTz0+Xy5wdXNoKE8pKTtsZXQgeT1tIGluc3RhbmNlb2YgRTA/e2F0dHJpYnV0ZXM6bS5hdHRyaWJ1dGVzLGlucHV0czptLmlucHV0cyxvdXRwdXRzOm0ub3V0cHV0c306e2F0dHJpYnV0ZXM6W10saW5wdXRzOltdLG91dHB1dHM6W119O209bmV3IFliKG0gaW5zdGFuY2VvZiBZYj9udWxsOm0ubmFtZSx5LmF0dHJpYnV0ZXMseS5pbnB1dHMseS5vdXRwdXRzLF8sW21dLFtdLHAsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3BhbixyJiZlP3ZvaWQgMDp0LmkxOG4pfXJldHVybiBlJiYodGhpcy5pbkkxOG5CbG9jaz0hMSksbX12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIHRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudG9rZW5zLHQuaTE4bil9dmlzaXRFeHBhbnNpb24odCl7aWYoIXQuaTE4bilyZXR1cm4gbnVsbDtpZighcHgodC5pMThuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSAiJHt0LmkxOG4uY29uc3RydWN0b3J9IiBmb3IgImkxOG4iIHByb3BlcnR5IG9mICR7dC5zb3VyY2VTcGFuLnRvU3RyaW5nKCl9LiBFeHBlY3RlZCBhICJNZXNzYWdlImApO2xldCBlPXQuaTE4bixpPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKGUucGxhY2Vob2xkZXJzKS5mb3JFYWNoKG89PntsZXQgcz1lLnBsYWNlaG9sZGVyc1tvXTtpZihvLnN0YXJ0c1dpdGgoIlZBUl8iKSl7bGV0IGE9by50cmltKCksbD10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihzLnRleHQscy5zb3VyY2VTcGFuKTtpW2FdPW5ldyB1eChsLHMuc291cmNlU3Bhbil9ZWxzZSByW29dPXRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHMudGV4dCxzLnNvdXJjZVNwYW4sbnVsbCl9KSxuZXcgTTEoaSxyLHQuc291cmNlU3BhbixlKX12aXNpdEV4cGFuc2lvbkNhc2UodCl7cmV0dXJuIG51bGx9dmlzaXRDb21tZW50KHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY29sbGVjdENvbW1lbnROb2RlcyYmdGhpcy5jb21tZW50Tm9kZXMucHVzaChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCl7dGhyb3cgbmV3IEVycm9yKCJ2aXNpdCgpIG5vdCBpbXBsZW1lbnRlZCBmb3IgQ29tbWVudCIpfX0odC52YWx1ZXx8IiIsdC5zb3VyY2VTcGFuKSksbnVsbH1leHRyYWN0QXR0cmlidXRlcyh0LGUsaSl7bGV0IHI9W10sbz1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgYT1pW3MubmFtZV07aWYocy5pc0xpdGVyYWwpby5wdXNoKG5ldyBkeChzLm5hbWUscy5leHByZXNzaW9uLnNvdXJjZXx8IiIscy5zb3VyY2VTcGFuLHMua2V5U3BhbixzLnZhbHVlU3BhbixhKSk7ZWxzZXtsZXQgbD10aGlzLmJpbmRpbmdQYXJzZXIuY3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxzLCEwLCExKTtyLnB1c2goTTAuZnJvbUJvdW5kRWxlbWVudFByb3BlcnR5KGwsYSkpfX0pLHtib3VuZDpyLGxpdGVyYWw6b319cGFyc2VBdHRyaWJ1dGUodCxlLGkscixvLHMsYSl7bGV0IGw9JDkoZS5uYW1lKSxjPWUudmFsdWUsdT1lLnNvdXJjZVNwYW4sZD1lLnZhbHVlU3Bhbj9lLnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQ6dS5zdGFydC5vZmZzZXQ7ZnVuY3Rpb24gcChfLHksSSl7bGV0IE89Xy5zdGFydC5tb3ZlQnkoeS5sZW5ndGgrKGUubmFtZS5sZW5ndGgtbC5sZW5ndGgpKSxlZT1PLm1vdmVCeShJLmxlbmd0aCk7cmV0dXJuIG5ldyBUbyhPLGVlLE8sSSl9bGV0IGg9bC5tYXRjaChUYmUpO2lmKGgpe2lmKG51bGwhPWhbMV0pe2xldCBfPWhbN10seT1wKHUsaFsxXSxfKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSl9ZWxzZSBpZihoWzJdKWlmKHQpe2xldCBfPWhbN10seT1wKHUsaFsyXSxfKTt0aGlzLnBhcnNlVmFyaWFibGUoXyxjLHUseSxlLnZhbHVlU3BhbixzKX1lbHNlIHRoaXMucmVwb3J0RXJyb3IoJyJsZXQtIiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBuZy10ZW1wbGF0ZSBlbGVtZW50cy4nLHUpO2Vsc2UgaWYoaFszXSl7bGV0IF89aFs3XSx5PXAodSxoWzNdLF8pO3RoaXMucGFyc2VSZWZlcmVuY2UoXyxjLHUseSxlLnZhbHVlU3BhbixhKX1lbHNlIGlmKGhbNF0pe2xldCBfPVtdLHk9aFs3XSxJPXAodSxoWzRdLHkpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUV2ZW50KHksYywhMSx1LGUudmFsdWVTcGFufHx1LGksXyxJKSxrTihfLG8pfWVsc2UgaWYoaFs1XSl7bGV0IF89aFs3XSx5PXAodSxoWzVdLF8pO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KX1lbHNlIGlmKGhbNl0pe2xldCBfPXAodSwiIixsKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VMaXRlcmFsQXR0cihsLGMsdSxkLGUudmFsdWVTcGFuLGkscixfKX1yZXR1cm4hMH1sZXQgZj1udWxsO2lmKGwuc3RhcnRzV2l0aCh1cF9CQU5BTkFfQk9YLnN0YXJ0KT9mPXVwX0JBTkFOQV9CT1g6bC5zdGFydHNXaXRoKHVwX1BST1BFUlRZLnN0YXJ0KT9mPXVwX1BST1BFUlRZOmwuc3RhcnRzV2l0aCh1cF9FVkVOVC5zdGFydCkmJihmPXVwX0VWRU5UKSxudWxsIT09ZiYmbC5lbmRzV2l0aChmLmVuZCkmJmwubGVuZ3RoPmYuc3RhcnQubGVuZ3RoK2YuZW5kLmxlbmd0aCl7bGV0IF89bC5zdWJzdHJpbmcoZi5zdGFydC5sZW5ndGgsbC5sZW5ndGgtZi5lbmQubGVuZ3RoKSx5PXAodSxmLnN0YXJ0LF8pO2lmKGYuc3RhcnQ9PT11cF9CQU5BTkFfQk9YLnN0YXJ0KXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KTtlbHNlIGlmKGYuc3RhcnQ9PT11cF9QUk9QRVJUWS5zdGFydCl0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSk7ZWxzZXtsZXQgST1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChfLGMsITEsdSxlLnZhbHVlU3Bhbnx8dSxpLEkseSksa04oSSxvKX1yZXR1cm4hMH1sZXQgbT1wKHUsIiIsbCk7cmV0dXJuIHRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5SW50ZXJwb2xhdGlvbihsLGMsdSxlLnZhbHVlU3BhbixpLHIsbSxlLnZhbHVlVG9rZW5zPz9udWxsKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89ZVkodCkscz10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uKG8sZSxpKTtyZXR1cm4gcz9uZXcgdXgocyxlLHIpOm5ldyB3MChvLGUpfXBhcnNlVmFyaWFibGUodCxlLGkscixvLHMpe3QuaW5kZXhPZigiLSIpPi0xP3RoaXMucmVwb3J0RXJyb3IoJyItIiBpcyBub3QgYWxsb3dlZCBpbiB2YXJpYWJsZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoJiZ0aGlzLnJlcG9ydEVycm9yKCJWYXJpYWJsZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSkscy5wdXNoKG5ldyB3MSh0LGUsaSxyLG8pKX1wYXJzZVJlZmVyZW5jZSh0LGUsaSxyLG8scyl7dC5pbmRleE9mKCItIik+LTE/dGhpcy5yZXBvcnRFcnJvcignIi0iIGlzIG5vdCBhbGxvd2VkIGluIHJlZmVyZW5jZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoP3RoaXMucmVwb3J0RXJyb3IoIlJlZmVyZW5jZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSk6cy5zb21lKGE9PmEubmFtZT09PXQpJiZ0aGlzLnJlcG9ydEVycm9yKGBSZWZlcmVuY2UgIiMke3R9IiBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlYCxpKSxzLnB1c2gobmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW99dmlzaXQodCl7cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UodGhpcyl9fSh0LGUsaSxyLG8pKX1wYXJzZUFzc2lnbm1lbnRFdmVudCh0LGUsaSxyLG8scyxhKXtsZXQgbD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChgJHt0fUNoYW5nZWAsYCR7ZX0gPSRldmVudGAsITAsaSxyfHxpLG8sbCxhKSxrTihsLHMpfXJlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfX0odCxlKSxzPXtub2RlczpjdShpLG4pLGVycm9yczp0LmVycm9ycy5jb25jYXQoaS5lcnJvcnMpLHN0eWxlVXJsczppLnN0eWxlVXJscyxzdHlsZXM6aS5zdHlsZXMsbmdDb250ZW50U2VsZWN0b3JzOmkubmdDb250ZW50U2VsZWN0b3JzfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYocy5jb21tZW50Tm9kZXM9aS5jb21tZW50Tm9kZXMpLHN9KGMscyx7Y29sbGVjdENvbW1lbnROb2RlczohIWUuY29sbGVjdENvbW1lbnROb2Rlc30pO2gucHVzaCguLi5sLmVycm9ycywuLi5kLmVycm9ycyk7bGV0IHk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmgubGVuZ3RoPjA/aDpudWxsLG5vZGVzOnAsc3R5bGVVcmxzOmYsc3R5bGVzOm0sbmdDb250ZW50U2VsZWN0b3JzOkN9O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJih5LmNvbW1lbnROb2Rlcz1fKSx5fXZhciBsWT1uZXcgajE7ZnVuY3Rpb24gcTEobj0kYyl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9leHByUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lLHRoaXMuX3NjaGVtYVJlZ2lzdHJ5PWksdGhpcy5lcnJvcnM9cn1nZXQgaW50ZXJwb2xhdGlvbkNvbmZpZygpe3JldHVybiB0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnfWNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VQcm9wZXJ0eUJpbmRpbmcocixvLCEwLGUsZS5zdGFydC5vZmZzZXQsdm9pZCAwLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IHByb3BlcnR5IGJpbmRpbmcgIiR7cn0iIG5lZWRzIHRvIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIGJ1dCBnb3QgIiR7b30iICgke3R5cGVvZiBvfSlgLGUpfXJldHVybiBpfWNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VFdmVudChyLG8sITEsZSxlLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IGxpc3RlbmVyICIke3J9IiBuZWVkcyB0byBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBidXQgZ290ICIke299IiAoJHt0eXBlb2Ygb30pYCxlKX1yZXR1cm4gaX1wYXJzZUludGVycG9sYXRpb24odCxlLGkpe2xldCByPWUuc3RhcnQudG9TdHJpbmcoKSxvPWUuZnVsbFN0YXJ0Lm9mZnNldDt0cnl7bGV0IHM9dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb24odCxyLG8saSx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxlKSxzfWNhdGNoKHMpe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtzfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbyl9fXBhcnNlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24odCxlKXtsZXQgaT1lLnN0YXJ0LnRvU3RyaW5nKCkscj1lLnN0YXJ0Lm9mZnNldDt0cnl7bGV0IG89dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsaSxyKTtyZXR1cm4gbyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhvLmVycm9ycyxlKSxvfWNhdGNoKG8pe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtvfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLGkscil9fXBhcnNlSW5saW5lVGVtcGxhdGVCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCl7bGV0IHU9dGhpcy5fcGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLGkuc3RhcnQub2Zmc2V0KyIqIi5sZW5ndGgscik7Zm9yKGxldCBkIG9mIHUpe2xldCBwPWNwKGksZC5zb3VyY2VTcGFuKSxoPWQua2V5LnNvdXJjZSxmPWNwKGksZC5rZXkuc3Bhbik7aWYoZCBpbnN0YW5jZW9mIFN4KXtsZXQgbT1kLnZhbHVlP2QudmFsdWUuc291cmNlOiIkaW1wbGljaXQiLEM9ZC52YWx1ZT9jcChpLGQudmFsdWUuc3Bhbik6dm9pZCAwO2EucHVzaChuZXcgeUwoaCxtLHAsZixDKSl9ZWxzZSBpZihkLnZhbHVlKXtsZXQgbT1sP3A6aSxDPWNwKGksZC52YWx1ZS5hc3Quc291cmNlU3Bhbik7dGhpcy5fcGFyc2VQcm9wZXJ0eUFzdChoLGQudmFsdWUsbSxmLEMsbyxzKX1lbHNlIG8ucHVzaChbaCwiIl0pLHRoaXMucGFyc2VMaXRlcmFsQXR0cihoLG51bGwsZixyLHZvaWQgMCxvLHMsZil9fV9wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz1pLnN0YXJ0LnRvU3RyaW5nKCk7dHJ5e2xldCBhPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxzLHIsbyk7cmV0dXJuIHRoaXMuX3JlcG9ydEV4cHJlc3Npb25QYXJzZXJFcnJvcnMoYS5lcnJvcnMsaSksYS53YXJuaW5ncy5mb3JFYWNoKGw9Pnt0aGlzLl9yZXBvcnRFcnJvcihsLGksbnUuV0FSTklORyl9KSxhLnRlbXBsYXRlQmluZGluZ3N9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke2F9YCxpKSxbXX19cGFyc2VMaXRlcmFsQXR0cih0LGUsaSxyLG8scyxhLGwpe1JOKHQpPyh0PXQuc3Vic3RyaW5nKDEpLHZvaWQgMCE9PWwmJihsPWNwKGwsbmV3IE9hKGwuc3RhcnQub2Zmc2V0KzEsbC5lbmQub2Zmc2V0KSkpLGUmJnRoaXMuX3JlcG9ydEVycm9yKCdBc3NpZ25pbmcgYW5pbWF0aW9uIHRyaWdnZXJzIHZpYSBAcHJvcD0iZXhwIiBhdHRyaWJ1dGVzIHdpdGggYW4gZXhwcmVzc2lvbiBpcyBpbnZhbGlkLiBVc2UgcHJvcGVydHkgYmluZGluZ3MgKGUuZy4gW0Bwcm9wXT0iZXhwIikgb3IgdXNlIGFuIGF0dHJpYnV0ZSB3aXRob3V0IGEgdmFsdWUgKGUuZy4gQHByb3ApIGluc3RlYWQuJyxpLG51LkVSUk9SKSx0aGlzLl9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLGwsbyxzLGEpKTphLnB1c2gobmV3IFFiKHQsdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZShlLCIiLHIpLGdwLkxJVEVSQUxfQVRUUixpLGwsbykpfXBhcnNlUHJvcGVydHlCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCxjKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJQcm9wZXJ0eSBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIscik7bGV0IHU9ITE7dC5zdGFydHNXaXRoKFBOKT8odT0hMCx0PXQuc3Vic3RyaW5nKFBOLmxlbmd0aCksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrUE4ubGVuZ3RoLGMuZW5kLm9mZnNldCkpKSk6Uk4odCkmJih1PSEwLHQ9dC5zdWJzdHJpbmcoMSksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrMSxjLmVuZC5vZmZzZXQpKSkpLHU/dGhpcy5fcGFyc2VBbmltYXRpb24odCxlLHIsbyxjLHMsYSxsKTp0aGlzLl9wYXJzZVByb3BlcnR5QXN0KHQsdGhpcy5fcGFyc2VCaW5kaW5nKGUsaSxzfHxyLG8pLHIsYyxzLGEsbCl9cGFyc2VQcm9wZXJ0eUludGVycG9sYXRpb24odCxlLGkscixvLHMsYSxsKXtsZXQgYz10aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihlLHJ8fGksbCk7cmV0dXJuISFjJiYodGhpcy5fcGFyc2VQcm9wZXJ0eUFzdCh0LGMsaSxhLHIsbyxzKSwhMCl9X3BhcnNlUHJvcGVydHlBc3QodCxlLGkscixvLHMsYSl7cy5wdXNoKFt0LGUuc291cmNlXSksYS5wdXNoKG5ldyBRYih0LGUsZ3AuREVGQVVMVCxpLHIsbykpfV9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLG8scyxhLGwpezA9PT10Lmxlbmd0aCYmdGhpcy5fcmVwb3J0RXJyb3IoIkFuaW1hdGlvbiB0cmlnZ2VyIGlzIG1pc3NpbmciLGkpO2xldCBjPXRoaXMuX3BhcnNlQmluZGluZyhlfHwidW5kZWZpbmVkIiwhMSxzfHxpLHIpO2EucHVzaChbdCxjLnNvdXJjZV0pLGwucHVzaChuZXcgUWIodCxjLGdwLkFOSU1BVElPTixpLG8scykpfV9wYXJzZUJpbmRpbmcodCxlLGkscil7bGV0IG89KGkmJmkuc3RhcnR8fCIodW5rbm93bikiKS50b1N0cmluZygpO3RyeXtsZXQgcz1lP3RoaXMuX2V4cHJQYXJzZXIucGFyc2VTaW1wbGVCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpOnRoaXMuX2V4cHJQYXJzZXIucGFyc2VCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpO3JldHVybiBzJiZ0aGlzLl9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHMuZXJyb3JzLGkpLHN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIsbyxyKX19Y3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxlLGk9ITEscj0hMCl7aWYoZS5pc0FuaW1hdGlvbilyZXR1cm4gbmV3IFIxKGUubmFtZSw0LFlyLk5PTkUsZS5leHByZXNzaW9uLG51bGwsZS5zb3VyY2VTcGFuLGUua2V5U3BhbixlLnZhbHVlU3Bhbik7bGV0IHMsYyxvPW51bGwsYT1udWxsLGw9ZS5uYW1lLnNwbGl0KCIuIik7aWYobC5sZW5ndGg+MSlpZigiYXR0ciI9PWxbMF0pe2E9bC5zbGljZSgxKS5qb2luKCIuIiksaXx8dGhpcy5fdmFsaWRhdGVQcm9wZXJ0eU9yQXR0cmlidXRlTmFtZShhLGUuc291cmNlU3BhbiwhMCksYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LGEsITApO2xldCB1PWEuaW5kZXhPZigiOiIpO2lmKHU+LTEpe2xldCBkPWEuc3Vic3RyaW5nKDAsdSkscD1hLnN1YnN0cmluZyh1KzEpO2E9ak4oZCxwKX1zPTF9ZWxzZSJjbGFzcyI9PWxbMF0/KGE9bFsxXSxzPTIsYz1bWXIuTk9ORV0pOiJzdHlsZSI9PWxbMF0mJihvPWwubGVuZ3RoPjI/bFsyXTpudWxsLGE9bFsxXSxzPTMsYz1bWXIuU1RZTEVdKTtpZihudWxsPT09YSl7bGV0IHU9dGhpcy5fc2NoZW1hUmVnaXN0cnkuZ2V0TWFwcGVkUHJvcE5hbWUoZS5uYW1lKTthPXI/dTplLm5hbWUsYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHUsITEpLHM9MCxpfHx0aGlzLl92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHUsZS5zb3VyY2VTcGFuLCExKX1yZXR1cm4gbmV3IFIxKGEscyxjWzBdLGUuZXhwcmVzc2lvbixvLGUuc291cmNlU3BhbixlLmtleVNwYW4sZS52YWx1ZVNwYW4pfXBhcnNlRXZlbnQodCxlLGkscixvLHMsYSxsKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJFdmVudCBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIsciksUk4odCk/KHQ9dC5zbGljZSgxKSx2b2lkIDAhPT1sJiYobD1jcChsLG5ldyBPYShsLnN0YXJ0Lm9mZnNldCsxLGwuZW5kLm9mZnNldCkpKSx0aGlzLl9wYXJzZUFuaW1hdGlvbkV2ZW50KHQsZSxpLHIsbyxhLGwpKTp0aGlzLl9wYXJzZVJlZ3VsYXJFdmVudCh0LGUsaSxyLG8scyxhLGwpfWNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHModCxlLGkpe2xldCByPXRoaXMuX3NjaGVtYVJlZ2lzdHJ5LmdldE1hcHBlZFByb3BOYW1lKGUpO3JldHVybiBPTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHIsaSl9X3BhcnNlQW5pbWF0aW9uRXZlbnQodCxlLGkscixvLHMsYSl7bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiLiIsdCl9KHQsW3QsIiJdKSxjPWxbMF0sdT1sWzFdLnRvTG93ZXJDYXNlKCksZD10aGlzLl9wYXJzZUFjdGlvbihlLGksbyk7cy5wdXNoKG5ldyBQMShjLHUsMSxkLHIsbyxhKSksMD09PWMubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQW5pbWF0aW9uIGV2ZW50IG5hbWUgaXMgbWlzc2luZyBpbiBiaW5kaW5nIixyKSx1PyJzdGFydCIhPT11JiYiZG9uZSIhPT11JiZ0aGlzLl9yZXBvcnRFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiBvdXRwdXQgcGhhc2UgdmFsdWUgIiR7dX0iIGZvciAiQCR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgKHVzZSBzdGFydCBvciBkb25lKWAscik6dGhpcy5fcmVwb3J0RXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciBvdXRwdXQgZXZlbnQgKEAke2N9KSBpcyBtaXNzaW5nIGl0cyBwaGFzZSB2YWx1ZSBuYW1lIChzdGFydCBvciBkb25lIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkKWAscil9X3BhcnNlUmVndWxhckV2ZW50KHQsZSxpLHIsbyxzLGEsbCl7bGV0W2MsdV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiOiIsdCl9KHQsW251bGwsdF0pLGQ9dGhpcy5fcGFyc2VBY3Rpb24oZSxpLG8pO3MucHVzaChbdCxkLnNvdXJjZV0pLGEucHVzaChuZXcgUDEodSxjLDAsZCxyLG8sbCkpfV9wYXJzZUFjdGlvbih0LGUsaSl7bGV0IHI9KGkmJmkuc3RhcnR8fCIodW5rbm93biIpLnRvU3RyaW5nKCksbz1pJiZpLnN0YXJ0P2kuc3RhcnQub2Zmc2V0OjA7dHJ5e2xldCBzPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VBY3Rpb24odCxlLHIsbyx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxpKSwhc3x8cy5hc3QgaW5zdGFuY2VvZiBuYT8odGhpcy5fcmVwb3J0RXJyb3IoIkVtcHR5IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCIsaSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbykpOnN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIscixvKX19X3JlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfV9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHQsZSl7Zm9yKGxldCBpIG9mIHQpdGhpcy5fcmVwb3J0RXJyb3IoaS5tZXNzYWdlLGUpfV92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHQsZSxpKXtsZXQgcj1pP3RoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlQXR0cmlidXRlKHQpOnRoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlUHJvcGVydHkodCk7ci5lcnJvciYmdGhpcy5fcmVwb3J0RXJyb3Ioci5tc2csZSxudS5FUlJPUil9fShuZXcgQjEobmV3IEwxKSxuLGxZLFtdKX1mdW5jdGlvbiBjWShuLHQpe3N3aXRjaChuKXtjYXNlIFlyLkhUTUw6cmV0dXJuIHhuKEsuc2FuaXRpemVIdG1sKTtjYXNlIFlyLlNDUklQVDpyZXR1cm4geG4oSy5zYW5pdGl6ZVNjcmlwdCk7Y2FzZSBZci5TVFlMRTpyZXR1cm4gdD94bihLLnNhbml0aXplU3R5bGUpOm51bGw7Y2FzZSBZci5VUkw6cmV0dXJuIHhuKEsuc2FuaXRpemVVcmwpO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiB4bihLLnNhbml0aXplUmVzb3VyY2VVcmwpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGd4ZShuLHQpe2xldCBlPXJ1KHQudmFsdWUpO2lmKCFpWShuLHQubmFtZSkpcmV0dXJuIGU7c3dpdGNoKGxZLnNlY3VyaXR5Q29udGV4dChuLHQubmFtZSwhMCkpe2Nhc2UgWXIuSFRNTDpyZXR1cm4gcjkoeG4oSy50cnVzdENvbnN0YW50SHRtbCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiByOSh4bihLLnRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIHZ4ZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHcwfHxuIGluc3RhbmNlb2YgdXh8fG4gaW5zdGFuY2VvZiBNMX1mdW5jdGlvbiBWTihuKXtyZXR1cm4gbi5ldmVyeSh2eGUpfWZ1bmN0aW9uIHMxKG4sdCxlKXtyZXR1cm4oKT0+e2xldCBpPW4oKSxyPUFycmF5LmlzQXJyYXkoaSk/aTpbaV07cmV0dXJuIGUmJnIucHVzaCguLi5lKSx0JiZyLnVuc2hpZnQobnQodCkpLHJ9fXZhciBvcT0ibmdJMThuQ2xvc3VyZU1vZGUiO2Z1bmN0aW9uIHVZKG4pe3JldHVybiBuLnJlZHVjZSgodCxlKT0+e2xldCBpPUFycmF5LmlzQXJyYXkoZSk/dVkoZSk6ZTtyZXR1cm4gdC5jb25jYXQoaSl9LFtdKX12YXIgeHhlPS9hdHRyXC4oW15cXV0rKS87ZnVuY3Rpb24gcFkobix0LGUpe2xldCBpPW5ldyB5cCxyPXQzKG4uc2VsZWN0b3IpO3JldHVybiBpLnNldCgidHlwZSIsbi5pbnRlcm5hbFR5cGUpLHIubGVuZ3RoPjAmJmkuc2V0KCJzZWxlY3RvcnMiLHJ1KHIpKSxuLnF1ZXJpZXMubGVuZ3RoPjAmJmkuc2V0KCJjb250ZW50UXVlcmllcyIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO2ZvcihsZXQgYSBvZiBuKXtpLnB1c2goeG4oSy5jb250ZW50UXVlcnkpLmNhbGxGbihbTWkoImRpckluZGV4IiksLi4uZlkoYSx0KV0pLnRvU3RtdCgpKTtsZXQgbD1vKCksYz14bihLLmxvYWRRdWVyeSkuY2FsbEZuKFtdKSx1PXhuKEsucXVlcnlSZWZyZXNoKS5jYWxsRm4oW2wuc2V0KGMpXSksZD1NaShhYykucHJvcChhLnByb3BlcnR5TmFtZSkuc2V0KGEuZmlyc3Q/bC5wcm9wKCJmaXJzdCIpOmwpO3IucHVzaCh1LmFuZChkKS50b1N0bXQoKSl9bGV0IHM9ZT9gJHtlfV9Db250ZW50UXVlcmllc2A6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpLG5ldyBScygiZGlySW5kZXgiLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnF1ZXJpZXMsdCxuLm5hbWUpKSxuLnZpZXdRdWVyaWVzLmxlbmd0aCYmaS5zZXQoInZpZXdRdWVyeSIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO24uZm9yRWFjaChhPT57bGV0IGw9eG4oSy52aWV3UXVlcnkpLmNhbGxGbihmWShhLHQpKTtpLnB1c2gobC50b1N0bXQoKSk7bGV0IGM9bygpLHU9eG4oSy5sb2FkUXVlcnkpLmNhbGxGbihbXSksZD14bihLLnF1ZXJ5UmVmcmVzaCkuY2FsbEZuKFtjLnNldCh1KV0pLHA9TWkoYWMpLnByb3AoYS5wcm9wZXJ0eU5hbWUpLnNldChhLmZpcnN0P2MucHJvcCgiZmlyc3QiKTpjKTtyLnB1c2goZC5hbmQocCkudG9TdG10KCkpfSk7bGV0IHM9ZT9gJHtlfV9RdWVyeWA6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnZpZXdRdWVyaWVzLHQsbi5uYW1lKSksaS5zZXQoImhvc3RCaW5kaW5ncyIsZnVuY3Rpb24obix0LGUsaSxyLG8scyl7bGV0IGE9TWkoYWMpLGw9bmV3IE4xKGEpLHtzdHlsZUF0dHI6YyxjbGFzc0F0dHI6dX09bi5zcGVjaWFsQXR0cmlidXRlczt2b2lkIDAhPT1jJiZsLnJlZ2lzdGVyU3R5bGVBdHRyKGMpLHZvaWQgMCE9PXUmJmwucmVnaXN0ZXJDbGFzc0F0dHIodSk7bGV0IGQ9W10scD1bXSxoPVtdLGY9dCxtPWUuY3JlYXRlRGlyZWN0aXZlSG9zdEV2ZW50QXN0cyhuLmxpc3RlbmVycyxmKTttJiZtLmxlbmd0aCYmZC5wdXNoKC4uLmZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtsZXQgcz1vLm5hbWUmJm0wKG8ubmFtZSksYT0xPT09by50eXBlP1NxKHMsby50YXJnZXRPclBoYXNlKTpzLGw9dCYmcz9gJHt0fV8ke2F9X0hvc3RCaW5kaW5nSGFuZGxlcmA6bnVsbCxjPWFZKFMwLmZyb21QYXJzZWRFdmVudChvKSxsKTsxPT1vLnR5cGU/aS5wdXNoKGMpOmUucHVzaChjKX1mb3IobGV0IG8gb2YgaSlyLnB1c2goe3JlZmVyZW5jZTpLLnN5bnRoZXRpY0hvc3RMaXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7Zm9yKGxldCBvIG9mIGUpci5wdXNoKHtyZWZlcmVuY2U6Sy5saXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7cmV0dXJuIHJ9KG0sbykpO2xldCBDPWUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsZiksXz1bXSx5PTA7QyYmQy5mb3JFYWNoKGZlPT57bC5yZWdpc3RlcklucHV0QmFzZWRPbk5hbWUoZmUubmFtZSxmZS5leHByZXNzaW9uLGYpP3krPTI6KF8ucHVzaChmZSkseSsrKX0pO2xldCBJLEE9KCk9PihJfHwoST1uZXcgVzEoaSwoKT0+aDEoIlVuZXhwZWN0ZWQgbm9kZSIpLHZlPT57bGV0IFQ9eTtyZXR1cm4geSs9dmUsVH0sKCk9PmgxKCJVbmV4cGVjdGVkIHBpcGUiKSkpLEkpLE89W10sZWU9W10sWD1bXTtmb3IobGV0IGZlIG9mIF8pe2xldCB2ZT1mZS5leHByZXNzaW9uLnZpc2l0KEEoKSksVD1hcShhLHZlKSx7YmluZGluZ05hbWU6bmUsaW5zdHJ1Y3Rpb246bGUsaXNBdHRyaWJ1dGU6aGV9PU54ZShmZSkseWU9ZS5jYWxjUG9zc2libGVTZWN1cml0eUNvbnRleHRzKHIsbmUsaGUpLmZpbHRlcihtZT0+bWUhPT1Zci5OT05FKSxKPW51bGw7eWUubGVuZ3RoJiYoSj0yPT09eWUubGVuZ3RoJiZ5ZS5pbmRleE9mKFlyLlVSTCk+LTEmJnllLmluZGV4T2YoWXIuUkVTT1VSQ0VfVVJMKT4tMT94bihLLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybCk6Y1koeWVbMF0saGUpKTtsZXQgYWU9W250KG5lKSxULmN1cnJWYWxFeHByXTtKJiZhZS5wdXNoKEopLGgucHVzaCguLi5ULnN0bXRzKSxsZT09PUsuaG9zdFByb3BlcnR5P08ucHVzaChhZSk6bGU9PT1LLmF0dHJpYnV0ZT9lZS5wdXNoKGFlKTpsZT09PUsuc3ludGhldGljSG9zdFByb3BlcnR5P1gucHVzaChhZSk6cC5wdXNoKHtyZWZlcmVuY2U6bGUscGFyYW1zT3JGbjphZSxzcGFuOm51bGx9KX1mb3IobGV0IGZlIG9mIE8pcC5wdXNoKHtyZWZlcmVuY2U6Sy5ob3N0UHJvcGVydHkscGFyYW1zT3JGbjpmZSxzcGFuOm51bGx9KTtmb3IobGV0IGZlIG9mIGVlKXAucHVzaCh7cmVmZXJlbmNlOksuYXR0cmlidXRlLHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7Zm9yKGxldCBmZSBvZiBYKXAucHVzaCh7cmVmZXJlbmNlOksuc3ludGhldGljSG9zdFByb3BlcnR5LHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7bGV0IHhlPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSl7bGV0IGk9bltlXTt0LnB1c2gobnQoZSksaSl9cmV0dXJuIHR9KG4uYXR0cmlidXRlcyk7aWYobC5hc3NpZ25Ib3N0QXR0cnMoeGUscyksbC5oYXNCaW5kaW5ncyYmbC5idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKEEoKSkuZm9yRWFjaChmZT0+e2ZvcihsZXQgdmUgb2YgZmUuY2FsbHMpeSs9TWF0aC5tYXgodmUuYWxsb2NhdGVCaW5kaW5nU2xvdHMtMiwwKSxwLnB1c2goe3JlZmVyZW5jZTpmZS5yZWZlcmVuY2UscGFyYW1zT3JGbjpGeGUodmUsYSxhcSksc3BhbjpudWxsfSl9KSx5JiZzLnNldCgiaG9zdFZhcnMiLG50KHkpKSxkLmxlbmd0aD4wfHxwLmxlbmd0aD4wKXtsZXQgZmU9bz9gJHtvfV9Ib3N0QmluZGluZ3NgOm51bGwsdmU9W107cmV0dXJuIGQubGVuZ3RoPjAmJnZlLnB1c2goeHAoMSxUMShkKSkpLHAubGVuZ3RoPjAmJnZlLnB1c2goeHAoMixoLmNvbmNhdChUMShwKSkpKSxPcyhbbmV3IFJzKE54LGt4KSxuZXcgUnMoYWMsbnVsbCldLHZlLGlhLG51bGwsZmUpfXJldHVybiBudWxsfShuLmhvc3Qsbi50eXBlU291cmNlU3BhbixlLHQsbi5zZWxlY3Rvcnx8IiIsbi5uYW1lLGkpKSxpLnNldCgiaW5wdXRzIixtOShuLmlucHV0cywhMCkpLGkuc2V0KCJvdXRwdXRzIixtOShuLm91dHB1dHMpKSxudWxsIT09bi5leHBvcnRBcyYmaS5zZXQoImV4cG9ydEFzIixjcihuLmV4cG9ydEFzLm1hcChvPT5udChvKSkpKSxuLmlzU3RhbmRhbG9uZSYmaS5zZXQoInN0YW5kYWxvbmUiLG50KCEwKSksaX1mdW5jdGlvbiBoWShuLHQpe2xldCBlPVtdLGk9dC5wcm92aWRlcnMscj10LnZpZXdQcm92aWRlcnM7aWYoaXx8cil7bGV0IG89W2l8fG5ldyB2ZihbXSldO3ImJm8ucHVzaChyKSxlLnB1c2goeG4oSy5Qcm92aWRlcnNGZWF0dXJlKS5jYWxsRm4obykpfXQudXNlc0luaGVyaXRhbmNlJiZlLnB1c2goeG4oSy5Jbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUpKSx0LmZ1bGxJbmhlcml0YW5jZSYmZS5wdXNoKHhuKEsuQ29weURlZmluaXRpb25GZWF0dXJlKSksdC5saWZlY3ljbGUudXNlc09uQ2hhbmdlcyYmZS5wdXNoKHhuKEsuTmdPbkNoYW5nZXNGZWF0dXJlKSksdC5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKSYmdC5pc1N0YW5kYWxvbmUmJmUucHVzaCh4bihLLlN0YW5kYWxvbmVGZWF0dXJlKSksZS5sZW5ndGgmJm4uc2V0KCJmZWF0dXJlcyIsY3IoZSkpfWZ1bmN0aW9uIGZZKG4sdCl7bGV0IGU9W012ZShuLHQpLG50KER4ZShuKSldO3JldHVybiBuLnJlYWQmJmUucHVzaChuLnJlYWQpLGV9ZnVuY3Rpb24gRHhlKG4pe3JldHVybihuLmRlc2NlbmRhbnRzPzE6MCl8KG4uc3RhdGljPzI6MCl8KG4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk/NDowKX1mdW5jdGlvbiBQeGUobil7cmV0dXJuIE5hKG50KG4pKX1mdW5jdGlvbiBzcShuKXtyZXR1cm4gTmEobWwoT2JqZWN0LmtleXMobikubWFwKGU9Pih7a2V5OmUsdmFsdWU6bnQoQXJyYXkuaXNBcnJheShuW2VdKT9uW2VdWzBdOm5bZV0pLHF1b3RlZDohMH0pKSkpfWZ1bmN0aW9uIEtMKG4pe3JldHVybiBuLmxlbmd0aD4wP05hKGNyKG4ubWFwKHQ9Pm50KHQpKSkpOmRkfWZ1bmN0aW9uIG1ZKG4pe2xldCB0PW51bGwhPT1uLnNlbGVjdG9yP24uc2VsZWN0b3IucmVwbGFjZSgvXG4vZywiIik6bnVsbDtyZXR1cm5bWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbnVsbCE9PXQ/UHhlKHQpOmRkLG51bGwhPT1uLmV4cG9ydEFzP0tMKG4uZXhwb3J0QXMpOmRkLHNxKG4uaW5wdXRzKSxzcShuLm91dHB1dHMpLEtMKG4ucXVlcmllcy5tYXAoZT0+ZS5wcm9wZXJ0eU5hbWUpKV19ZnVuY3Rpb24gYXEobix0KXtyZXR1cm4gcXEobnVsbCxuLHQsImIiKX1mdW5jdGlvbiBGeGUobix0LGUpe3JldHVybiBuLnBhcmFtcyhpPT5lKHQsaSkuY3VyclZhbEV4cHIpfWZ1bmN0aW9uIE54ZShuKXtsZXQgZSx0PW4ubmFtZSxpPXQubWF0Y2goeHhlKTtyZXR1cm4gaT8odD1pWzFdLGU9Sy5hdHRyaWJ1dGUpOm4uaXNBbmltYXRpb24/KHQ9TXEodCksZT1LLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eSk6ZT1LLmhvc3RQcm9wZXJ0eSx7YmluZGluZ05hbWU6dCxpbnN0cnVjdGlvbjplLGlzQXR0cmlidXRlOiEhaX19dmFyIG4sQnhlPS9eKD86XFsoW15cXV0rKVxdKXwoPzpcKChbXlwpXSspXCkpJC8sWkw9Y2xhc3N7fTtmdW5jdGlvbiBscShuKXtyZXR1cm57Li4ubixwcmVkaWNhdGU6Z1kobi5wcmVkaWNhdGUpLHJlYWQ6bi5yZWFkP25ldyBEbihuLnJlYWQpOm51bGwsc3RhdGljOm4uc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5Om4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHl9fWZ1bmN0aW9uIGNxKG4pe3JldHVybntwcm9wZXJ0eU5hbWU6bi5wcm9wZXJ0eU5hbWUsZmlyc3Q6bi5maXJzdD8/ITEscHJlZGljYXRlOmdZKG4ucHJlZGljYXRlKSxkZXNjZW5kYW50czpuLmRlc2NlbmRhbnRzPz8hMSxyZWFkOm4ucmVhZD9uZXcgRG4obi5yZWFkKTpudWxsLHN0YXRpYzpuLnN0YXRpYz8/ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6bi5lbWl0RGlzdGluY3RDaGFuZ2VzT25seT8/ITB9fWZ1bmN0aW9uIGdZKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP246bzMobmV3IERuKG4pLDEpfWZ1bmN0aW9uIHVxKG4pe2xldCB0PWZxKG4uaW5wdXRzfHxbXSksZT1mcShuLm91dHB1dHN8fFtdKSxpPW4ucHJvcE1ldGFkYXRhLHI9e30sbz17fTtmb3IobGV0IHMgaW4gaSlpLmhhc093blByb3BlcnR5KHMpJiZpW3NdLmZvckVhY2goYT0+e0p4ZShhKT9yW3NdPWEuYmluZGluZ1Byb3BlcnR5TmFtZT9bYS5iaW5kaW5nUHJvcGVydHlOYW1lLHNdOnM6JHhlKGEpJiYob1tzXT1hLmJpbmRpbmdQcm9wZXJ0eU5hbWV8fHMpfSk7cmV0dXJuey4uLm4sdHlwZUFyZ3VtZW50Q291bnQ6MCx0eXBlU291cmNlU3BhbjpuLnR5cGVTb3VyY2VTcGFuLHR5cGU6YXMobi50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksZGVwczpudWxsLGhvc3Q6UXhlKG4ucHJvcE1ldGFkYXRhLG4udHlwZVNvdXJjZVNwYW4sbi5ob3N0KSxpbnB1dHM6ey4uLnQsLi4ucn0sb3V0cHV0czp7Li4uZSwuLi5vfSxxdWVyaWVzOm4ucXVlcmllcy5tYXAobHEpLHByb3ZpZGVyczpudWxsIT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsdmlld1F1ZXJpZXM6bi52aWV3UXVlcmllcy5tYXAobHEpLGZ1bGxJbmhlcml0YW5jZTohMX19ZnVuY3Rpb24gX1kobix0KXtyZXR1cm57bmFtZTpuLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksdHlwZVNvdXJjZVNwYW46dCxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksc2VsZWN0b3I6bi5zZWxlY3Rvcj8/bnVsbCxpbnB1dHM6bi5pbnB1dHM/P3t9LG91dHB1dHM6bi5vdXRwdXRzPz97fSxob3N0Onp4ZShuLmhvc3QpLHF1ZXJpZXM6KG4ucXVlcmllcz8/W10pLm1hcChjcSksdmlld1F1ZXJpZXM6KG4udmlld1F1ZXJpZXM/P1tdKS5tYXAoY3EpLHByb3ZpZGVyczp2b2lkIDAhPT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBcz8/bnVsbCx1c2VzSW5oZXJpdGFuY2U6bi51c2VzSW5oZXJpdGFuY2U/PyExLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczpuLnVzZXNPbkNoYW5nZXM/PyExfSxkZXBzOm51bGwsdHlwZUFyZ3VtZW50Q291bnQ6MCxmdWxsSW5oZXJpdGFuY2U6ITEsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX19ZnVuY3Rpb24genhlKG49e30pe3JldHVybnthdHRyaWJ1dGVzOmp4ZShuLmF0dHJpYnV0ZXM/P3t9KSxsaXN0ZW5lcnM6bi5saXN0ZW5lcnM/P3t9LHByb3BlcnRpZXM6bi5wcm9wZXJ0aWVzPz97fSxzcGVjaWFsQXR0cmlidXRlczp7Y2xhc3NBdHRyOm4uY2xhc3NBdHRyaWJ1dGUsc3R5bGVBdHRyOm4uc3R5bGVBdHRyaWJ1dGV9fX1mdW5jdGlvbiBqeGUobil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXRbZV09bmV3IERuKG5bZV0pO3JldHVybiB0fWZ1bmN0aW9uIFd4ZShuKXtyZXR1cm57Li4ubix0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiBITihuLHQ9bnVsbCl7cmV0dXJue2tpbmQ6XzAuRGlyZWN0aXZlLGlzQ29tcG9uZW50OnR8fCJjb21wb25lbnQiPT09bi5raW5kLHNlbGVjdG9yOm4uc2VsZWN0b3IsdHlwZTpuZXcgRG4obi50eXBlKSxpbnB1dHM6bi5pbnB1dHM/P1tdLG91dHB1dHM6bi5vdXRwdXRzPz9bXSxleHBvcnRBczpuLmV4cG9ydEFzPz9udWxsfX1mdW5jdGlvbiBZeGUobil7cmV0dXJue2tpbmQ6XzAuUGlwZSxuYW1lOm4ubmFtZSx0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiB2WShuLHQsZSxpLHIpe2xldCBvPXI/RDAuZnJvbUFycmF5KHIpOiRjLHM9bXhlKG4sZSx7cHJlc2VydmVXaGl0ZXNwYWNlczppLGludGVycG9sYXRpb25Db25maWc6b30pO2lmKG51bGwhPT1zLmVycm9ycyl7bGV0IGE9cy5lcnJvcnMubWFwKGw9PmwudG9TdHJpbmcoKSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uIG9mIHRlbXBsYXRlIGZvciAke3R9OiAke2F9YCl9cmV0dXJue3RlbXBsYXRlOnMsaW50ZXJwb2xhdGlvbjpvfX1mdW5jdGlvbiBzMChuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG8zKG5ldyBEbihuW3RdKSwwKX1mdW5jdGlvbiBkcShuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG5ldyBEbihuW3RdKX1mdW5jdGlvbiBwcShuKXtyZXR1cm4gbzMoImZ1bmN0aW9uIj09dHlwZW9mIG4/bmV3IERuKG4pOm5ldyBGYShuPz9udWxsKSwwKX1mdW5jdGlvbiB5WShuKXtsZXQgdD1udWxsIT1uLmF0dHJpYnV0ZSxlPW51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pO3JldHVybiBiWSh0P25ldyBEbihuLmF0dHJpYnV0ZSk6ZSx0LG4uaG9zdCxuLm9wdGlvbmFsLG4uc2VsZixuLnNraXBTZWxmKX1mdW5jdGlvbiBocShuKXtsZXQgdD1uLmF0dHJpYnV0ZT8/ITE7cmV0dXJuIGJZKG51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pLHQsbi5ob3N0Pz8hMSxuLm9wdGlvbmFsPz8hMSxuLnNlbGY/PyExLG4uc2tpcFNlbGY/PyExKX1mdW5jdGlvbiBiWShuLHQsZSxpLHIsbyl7cmV0dXJue3Rva2VuOm4sYXR0cmlidXRlTmFtZVR5cGU6dD9udCgidW5rbm93biIpOm51bGwsaG9zdDplLG9wdGlvbmFsOmksc2VsZjpyLHNraXBTZWxmOm99fWZ1bmN0aW9uIFF4ZShuLHQsZSl7bGV0IGk9ZnVuY3Rpb24obil7bGV0IHQ9e30sZT17fSxpPXt9LHI9e307Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcz1uW29dLGE9by5tYXRjaChCeGUpO2lmKG51bGw9PT1hKXN3aXRjaChvKXtjYXNlImNsYXNzIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJDbGFzcyBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5jbGFzc0F0dHI9czticmVhaztjYXNlInN0eWxlIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJTdHlsZSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5zdHlsZUF0dHI9czticmVhaztkZWZhdWx0OnRbb109InN0cmluZyI9PXR5cGVvZiBzP250KHMpOnN9ZWxzZSBpZihudWxsIT1hWzFdKXtpZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7aVthWzFdXT1zfWVsc2UgaWYobnVsbCE9YVsyXSl7aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiRXZlbnQgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO2VbYVsyXV09c319cmV0dXJue2F0dHJpYnV0ZXM6dCxsaXN0ZW5lcnM6ZSxwcm9wZXJ0aWVzOmksc3BlY2lhbEF0dHJpYnV0ZXM6cn19KGV8fHt9KSxyPWZ1bmN0aW9uKG4sdCl7bGV0IGU9cTEoKTtyZXR1cm4gZS5jcmVhdGVEaXJlY3RpdmVIb3N0RXZlbnRBc3RzKG4ubGlzdGVuZXJzLHQpLGUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsdCksZS5lcnJvcnN9KGksdCk7aWYoci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIubWFwKG89Pm8ubXNnKS5qb2luKCJcbiIpKTtmb3IobGV0IG8gaW4gbiluLmhhc093blByb3BlcnR5KG8pJiZuW29dLmZvckVhY2gocz0+e0t4ZShzKT9pLnByb3BlcnRpZXNbcy5ob3N0UHJvcGVydHlOYW1lfHxvXT1YX2UoInRoaXMiLG8pOlp4ZShzKSYmKGkubGlzdGVuZXJzW3MuZXZlbnROYW1lfHxvXT1gJHtvfSgkeyhzLmFyZ3N8fFtdKS5qb2luKCIsIil9KWApfSk7cmV0dXJuIGl9ZnVuY3Rpb24gS3hlKG4pe3JldHVybiJIb3N0QmluZGluZyI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIFp4ZShuKXtyZXR1cm4iSG9zdExpc3RlbmVyIj09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gSnhlKG4pe3JldHVybiJJbnB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uICR4ZShuKXtyZXR1cm4iT3V0cHV0Ij09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gZnEobil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT57bGV0W2kscl09ZS5zcGxpdCgiOiIsMikubWFwKG89Pm8udHJpbSgpKTtyZXR1cm4gdFtpXT1yfHxpLHR9LHt9KX1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mdWxsPXQ7bGV0IGU9dC5zcGxpdCgiLiIpO3RoaXMubWFqb3I9ZVswXSx0aGlzLm1pbm9yPWVbMV0sdGhpcy5wYXRjaD1lLnNsaWNlKDIpLmpvaW4oIi4iKX19KCIxNC4yLjExIiksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbG9zZWRCeVBhcmVudD0hMSx0aGlzLmlzVm9pZD0hMSx0aGlzLmlnbm9yZUZpcnN0TGY9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITAsdGhpcy5wcmV2ZW50TmFtZXNwYWNlSW5oZXJpdGFuY2U9ITF9cmVxdWlyZUV4dHJhUGFyZW50KHQpe3JldHVybiExfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4hMX1nZXRDb250ZW50VHlwZSgpe3JldHVybiBmbC5QQVJTQUJMRV9EQVRBfX0sKChuPXAwKS5uZ3x8KG4ubmc9e30pKS5cdTAyNzVjb21waWxlckZhY2FkZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodD1uZXcgY2xhc3N7ZXZhbHVhdGVTdGF0ZW1lbnRzKHQsZSxpLHIpe2xldCBvPW5ldyBoTChpKSxzPWN4LmNyZWF0ZVJvb3QoKTtyZXR1cm4gZS5sZW5ndGg+MCYmIWVbMF0uaXNFcXVpdmFsZW50KG50KCJ1c2Ugc3RyaWN0IikudG9TdG10KCkpJiYoZT1bbnQoInVzZSBzdHJpY3QiKS50b1N0bXQoKSwuLi5lXSksby52aXNpdEFsbFN0YXRlbWVudHMoZSxzKSxvLmNyZWF0ZVJldHVyblN0bXQocyksdGhpcy5ldmFsdWF0ZUNvZGUodCxzLG8uZ2V0QXJncygpLHIpfWV2YWx1YXRlQ29kZSh0LGUsaSxyKXtsZXQgbz1gInVzZSBzdHJpY3QiOyR7ZS50b1NvdXJjZSgpfVxuLy8jIHNvdXJjZVVSTD0ke3R9YCxzPVtdLGE9W107Zm9yKGxldCBjIGluIGkpYS5wdXNoKGlbY10pLHMucHVzaChjKTtpZihyKXtsZXQgYz13OSguLi5zLmNvbmNhdCgicmV0dXJuIG51bGw7IikpLnRvU3RyaW5nKCksdT1jLnNsaWNlKDAsYy5pbmRleE9mKCJyZXR1cm4gbnVsbDsiKSkuc3BsaXQoIlxuIikubGVuZ3RoLTE7bys9YFxuJHtlLnRvU291cmNlTWFwR2VuZXJhdG9yKHQsdSkudG9Kc0NvbW1lbnQoKX1gfWxldCBsPXc5KC4uLnMuY29uY2F0KG8pKTtyZXR1cm4gdGhpcy5leGVjdXRlRnVuY3Rpb24obCxhKX1leGVjdXRlRnVuY3Rpb24odCxlKXtyZXR1cm4gdCguLi5lKX19KXt0aGlzLmppdEV2YWx1YXRvcj10LHRoaXMuRmFjdG9yeVRhcmdldD1pYyx0aGlzLlJlc291cmNlTG9hZGVyPVpMLHRoaXMuZWxlbWVudFNjaGVtYVJlZ2lzdHJ5PW5ldyBqMX1jb21waWxlUGlwZSh0LGUsaSl7bGV0IG89Uzkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOm51bGwscGlwZU5hbWU6aS5waXBlTmFtZSxwdXJlOmkucHVyZSxpc1N0YW5kYWxvbmU6aS5pc1N0YW5kYWxvbmV9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVQaXBlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPVM5KHtuYW1lOihuPWkpLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksaW50ZXJuYWxUeXBlOm5ldyBEbihuLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAscGlwZU5hbWU6bi5uYW1lLGRlcHM6bnVsbCxwdXJlOm4ucHVyZT8/ITAsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZUluamVjdGFibGUodCxlLGkpe2xldHtleHByZXNzaW9uOnIsc3RhdGVtZW50czpvfT1nOSh7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LHByb3ZpZGVkSW46cHEoaS5wcm92aWRlZEluKSx1c2VDbGFzczpzMChpLCJ1c2VDbGFzcyIpLHVzZUZhY3Rvcnk6ZHEoaSwidXNlRmFjdG9yeSIpLHVzZVZhbHVlOnMwKGksInVzZVZhbHVlIiksdXNlRXhpc3Rpbmc6czAoaSwidXNlRXhpc3RpbmciKSxkZXBzOmkuZGVwcz8ubWFwKHlZKX0sITApO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocix0LGUsbyl9Y29tcGlsZUluamVjdGFibGVEZWNsYXJhdGlvbih0LGUsaSl7bGV0e2V4cHJlc3Npb246cixzdGF0ZW1lbnRzOm99PWc5KHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOnBxKGkucHJvdmlkZWRJbiksdXNlQ2xhc3M6czAoaSwidXNlQ2xhc3MiKSx1c2VGYWN0b3J5OmRxKGksInVzZUZhY3RvcnkiKSx1c2VWYWx1ZTpzMChpLCJ1c2VWYWx1ZSIpLHVzZUV4aXN0aW5nOnMwKGksInVzZUV4aXN0aW5nIiksZGVwczppLmRlcHM/Lm1hcChocSl9LCEwKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLG8pfWNvbXBpbGVJbmplY3Rvcih0LGUsaSl7bGV0IG89TTkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSkscHJvdmlkZXJzOmkucHJvdmlkZXJzJiZpLnByb3ZpZGVycy5sZW5ndGg+MD9uZXcgRG4oaS5wcm92aWRlcnMpOm51bGwsaW1wb3J0czppLmltcG9ydHMubWFwKHM9Pm5ldyBEbihzKSl9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVJbmplY3RvckRlY2xhcmF0aW9uKHQsZSxpKXtsZXQgcj17bmFtZToobj1pKS50eXBlLm5hbWUsdHlwZTphcyhuLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4obi50eXBlKSxwcm92aWRlcnM6dm9pZCAwIT09bi5wcm92aWRlcnMmJm4ucHJvdmlkZXJzLmxlbmd0aD4wP25ldyBEbihuLnByb3ZpZGVycyk6bnVsbCxpbXBvcnRzOnZvaWQgMCE9PW4uaW1wb3J0cz9uLmltcG9ydHMubWFwKHQ9Pm5ldyBEbih0KSk6W119LG89TTkocik7dmFyIG47cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlTmdNb2R1bGUodCxlLGkpe2xldCBvPVl2ZSh7dHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSxhZGphY2VudFR5cGU6bmV3IERuKGkudHlwZSksYm9vdHN0cmFwOmkuYm9vdHN0cmFwLm1hcChhcyksZGVjbGFyYXRpb25zOmkuZGVjbGFyYXRpb25zLm1hcChhcykscHVibGljRGVjbGFyYXRpb25UeXBlczpudWxsLGltcG9ydHM6aS5pbXBvcnRzLm1hcChhcyksaW5jbHVkZUltcG9ydFR5cGVzOiEwLGV4cG9ydHM6aS5leHBvcnRzLm1hcChhcyksc2VsZWN0b3JTY29wZU1vZGU6ZzAuSW5saW5lLGNvbnRhaW5zRm9yd2FyZERlY2xzOiExLHNjaGVtYXM6aS5zY2hlbWFzP2kuc2NoZW1hcy5tYXAoYXMpOm51bGwsaWQ6aS5pZD9uZXcgRG4oaS5pZCk6bnVsbH0pO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZU5nTW9kdWxlRGVjbGFyYXRpb24odCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyB5cDtyZXR1cm4gdC5zZXQoInR5cGUiLG5ldyBEbihuLnR5cGUpKSx2b2lkIDAhPT1uLmJvb3RzdHJhcCYmdC5zZXQoImJvb3RzdHJhcCIsbmV3IERuKG4uYm9vdHN0cmFwKSksdm9pZCAwIT09bi5kZWNsYXJhdGlvbnMmJnQuc2V0KCJkZWNsYXJhdGlvbnMiLG5ldyBEbihuLmRlY2xhcmF0aW9ucykpLHZvaWQgMCE9PW4uaW1wb3J0cyYmdC5zZXQoImltcG9ydHMiLG5ldyBEbihuLmltcG9ydHMpKSx2b2lkIDAhPT1uLmV4cG9ydHMmJnQuc2V0KCJleHBvcnRzIixuZXcgRG4obi5leHBvcnRzKSksdm9pZCAwIT09bi5zY2hlbWFzJiZ0LnNldCgic2NoZW1hcyIsbmV3IERuKG4uc2NoZW1hcykpLHZvaWQgMCE9PW4uaWQmJnQuc2V0KCJpZCIsbmV3IERuKG4uaWQpKSx4bihLLmRlZmluZU5nTW9kdWxlKS5jYWxsRm4oW3QudG9MaXRlcmFsTWFwKCldKX0oaSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLHQsZSxbXSl9Y29tcGlsZURpcmVjdGl2ZSh0LGUsaSl7bGV0IHI9dXEoaSk7cmV0dXJuIHRoaXMuY29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxyKX1jb21waWxlRGlyZWN0aXZlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPV9ZKGksdGhpcy5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkRpcmVjdGl2ZSIsaS50eXBlLm5hbWUsZSkpO3JldHVybiB0aGlzLmNvbXBpbGVEaXJlY3RpdmVGcm9tTWV0YSh0LGUsbyl9Y29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxpKXtsZXQgcj1uZXcgeDEscz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9cFkobix0LGUpO2hZKGksbik7bGV0IHI9eG4oSy5kZWZpbmVEaXJlY3RpdmUpLmNhbGxGbihbaS50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxvPWZ1bmN0aW9uKG4pe2xldCB0PW1ZKG4pO3JldHVybiB0LnB1c2goZGQpLHQucHVzaChOYShudChuLmlzU3RhbmRhbG9uZSkpKSxOYSh4bihLLkRpcmVjdGl2ZURlY2xhcmF0aW9uLHQpKX0obik7cmV0dXJue2V4cHJlc3Npb246cix0eXBlOm8sc3RhdGVtZW50czpbXX19KGkscixxMSgpKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHMuZXhwcmVzc2lvbix0LGUsci5zdGF0ZW1lbnRzKX1jb21waWxlQ29tcG9uZW50KHQsZSxpKXtsZXR7dGVtcGxhdGU6cixpbnRlcnBvbGF0aW9uOm99PXZZKGkudGVtcGxhdGUsaS5uYW1lLGUsaS5wcmVzZXJ2ZVdoaXRlc3BhY2VzLGkuaW50ZXJwb2xhdGlvbikscz17Li4uaSwuLi51cShpKSxzZWxlY3RvcjppLnNlbGVjdG9yfHx0aGlzLmVsZW1lbnRTY2hlbWFSZWdpc3RyeS5nZXREZWZhdWx0Q29tcG9uZW50RWxlbWVudE5hbWUoKSx0ZW1wbGF0ZTpyLGRlY2xhcmF0aW9uczppLmRlY2xhcmF0aW9ucy5tYXAoV3hlKSxkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZTowLHN0eWxlczpbLi4uaS5zdHlsZXMsLi4uci5zdHlsZXNdLGVuY2Fwc3VsYXRpb246aS5lbmNhcHN1bGF0aW9uLGludGVycG9sYXRpb246byxjaGFuZ2VEZXRlY3Rpb246aS5jaGFuZ2VEZXRlY3Rpb24sYW5pbWF0aW9uczpudWxsIT1pLmFuaW1hdGlvbnM/bmV3IERuKGkuYW5pbWF0aW9ucyk6bnVsbCx2aWV3UHJvdmlkZXJzOm51bGwhPWkudmlld1Byb3ZpZGVycz9uZXcgRG4oaS52aWV3UHJvdmlkZXJzKTpudWxsLHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiIiLGkxOG5Vc2VFeHRlcm5hbElkczohMH07cmV0dXJuIHRoaXMuY29tcGlsZUNvbXBvbmVudEZyb21NZXRhKHQsYG5nOi8vLyR7aS5uYW1lfS5qc2Ascyl9Y29tcGlsZUNvbXBvbmVudERlY2xhcmF0aW9uKHQsZSxpKXtsZXQgbz1mdW5jdGlvbihuLHQsZSl7bGV0e3RlbXBsYXRlOmksaW50ZXJwb2xhdGlvbjpyfT12WShuLnRlbXBsYXRlLG4udHlwZS5uYW1lLGUsbi5wcmVzZXJ2ZVdoaXRlc3BhY2VzPz8hMSxuLmludGVycG9sYXRpb24pLG89W107aWYobi5kZXBlbmRlbmNpZXMpZm9yKGxldCBzIG9mIG4uZGVwZW5kZW5jaWVzKXN3aXRjaChzLmtpbmQpe2Nhc2UiZGlyZWN0aXZlIjpjYXNlImNvbXBvbmVudCI6by5wdXNoKEhOKHMpKTticmVhaztjYXNlInBpcGUiOm8ucHVzaChZeGUocykpfWVsc2Uobi5jb21wb25lbnRzfHxuLmRpcmVjdGl2ZXN8fG4ucGlwZXMpJiYobi5jb21wb25lbnRzJiZvLnB1c2goLi4ubi5jb21wb25lbnRzLm1hcChzPT5ITihzLCEwKSkpLG4uZGlyZWN0aXZlcyYmby5wdXNoKC4uLm4uZGlyZWN0aXZlcy5tYXAocz0+SE4ocykpKSxuLnBpcGVzJiZvLnB1c2goLi4uZnVuY3Rpb24obil7cmV0dXJuIG4/T2JqZWN0LmtleXMobikubWFwKHQ9Pih7a2luZDpfMC5QaXBlLG5hbWU6dCx0eXBlOm5ldyBEbihuW3RdKX0pKTpbXX0obi5waXBlcykpKTtyZXR1cm57Li4uX1kobix0KSx0ZW1wbGF0ZTppLHN0eWxlczpuLnN0eWxlcz8/W10sZGVjbGFyYXRpb25zOm8sdmlld1Byb3ZpZGVyczp2b2lkIDAhPT1uLnZpZXdQcm92aWRlcnM/bmV3IERuKG4udmlld1Byb3ZpZGVycyk6bnVsbCxhbmltYXRpb25zOnZvaWQgMCE9PW4uYW5pbWF0aW9ucz9uZXcgRG4obi5hbmltYXRpb25zKTpudWxsLGNoYW5nZURldGVjdGlvbjpuLmNoYW5nZURldGVjdGlvbj8/cWIuRGVmYXVsdCxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbj8/b2QuRW11bGF0ZWQsaW50ZXJwb2xhdGlvbjpyLGRlY2xhcmF0aW9uTGlzdEVtaXRNb2RlOjIscmVsYXRpdmVDb250ZXh0RmlsZVBhdGg6IiIsaTE4blVzZUV4dGVybmFsSWRzOiEwfX0oaSx0aGlzLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiQ29tcG9uZW50IixpLnR5cGUubmFtZSxlKSxlKTtyZXR1cm4gdGhpcy5jb21waWxlQ29tcG9uZW50RnJvbU1ldGEodCxlLG8pfWNvbXBpbGVDb21wb25lbnRGcm9tTWV0YSh0LGUsaSl7bGV0IHI9bmV3IHgxLHM9ZnVuY3Rpb24obix0LGUpe2xldCBpPXBZKG4sdCxlKTtoWShpLG4pO2xldCByPW4uc2VsZWN0b3ImJnVkLnBhcnNlKG4uc2VsZWN0b3IpLG89ciYmclswXTtpZihvKXtsZXQgXz1vLmdldEF0dHJzKCk7Xy5sZW5ndGgmJmkuc2V0KCJhdHRycyIsdC5nZXRDb25zdExpdGVyYWwoY3IoXy5tYXAoeT0+bnQobnVsbCE9eT95OnZvaWQgMCkpKSwhMCkpfWxldCBzPW4ubmFtZSxhPXM/YCR7c31fVGVtcGxhdGVgOm51bGwsbD1uLmNoYW5nZURldGVjdGlvbixjPW4udGVtcGxhdGUsdT1uZXcgT3godCxCMC5jcmVhdGVSb290U2NvcGUoKSwwLHMsbnVsbCxudWxsLGEsSy5uYW1lc3BhY2VIVE1MLG4ucmVsYXRpdmVDb250ZXh0RmlsZVBhdGgsbi5pMThuVXNlRXh0ZXJuYWxJZHMpLGQ9dS5idWlsZFRlbXBsYXRlRnVuY3Rpb24oYy5ub2RlcyxbXSkscD11LmdldE5nQ29udGVudFNlbGVjdG9ycygpO3AmJmkuc2V0KCJuZ0NvbnRlbnRTZWxlY3RvcnMiLHApLGkuc2V0KCJkZWNscyIsbnQodS5nZXRDb25zdENvdW50KCkpKSxpLnNldCgidmFycyIsbnQodS5nZXRWYXJDb3VudCgpKSk7bGV0e2NvbnN0RXhwcmVzc2lvbnM6aCxwcmVwYXJlU3RhdGVtZW50czpmfT11LmdldENvbnN0cygpO2lmKGgubGVuZ3RoPjApe2xldCBfPWNyKGgpO2YubGVuZ3RoPjAmJihfPU9zKFtdLFsuLi5mLG5ldyB1byhfKV0pKSxpLnNldCgiY29uc3RzIixfKX1pZihpLnNldCgidGVtcGxhdGUiLGQpLG4uZGVjbGFyYXRpb25zLmxlbmd0aD4wJiZpLnNldCgiZGVwZW5kZW5jaWVzIixmdW5jdGlvbihuLHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIG47Y2FzZSAxOnJldHVybiBPcyhbXSxbbmV3IHVvKG4pXSk7Y2FzZSAyOmxldCBlPW4ucHJvcCgibWFwIikuY2FsbEZuKFt4bihLLnJlc29sdmVGb3J3YXJkUmVmKV0pO3JldHVybiBPcyhbXSxbbmV3IHVvKGUpXSl9fShjcihuLmRlY2xhcmF0aW9ucy5tYXAoXz0+Xy50eXBlKSksbi5kZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSkpLG51bGw9PT1uLmVuY2Fwc3VsYXRpb24mJihuLmVuY2Fwc3VsYXRpb249b2QuRW11bGF0ZWQpLG4uc3R5bGVzJiZuLnN0eWxlcy5sZW5ndGgpe2xldCB5PShuLmVuY2Fwc3VsYXRpb249PW9kLkVtdWxhdGVkP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmljdFN0eWxpbmc9ITB9c2hpbUNzc1RleHQodCxlLGk9IiIpe2xldCByPXQubWF0Y2goZ3llKXx8W107cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShmeWUsIiIpfSh0KSx0PXRoaXMuX2luc2VydERpcmVjdGl2ZXModCksW3RoaXMuX3Njb3BlQ3NzVGV4dCh0LGUsaSksLi4ucl0uam9pbigiXG4iKX1faW5zZXJ0RGlyZWN0aXZlcyh0KXtyZXR1cm4gdD10aGlzLl9pbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQodCksdGhpcy5faW5zZXJ0UG9seWZpbGxSdWxlc0luQ3NzVGV4dCh0KX1faW5zZXJ0UG9seWZpbGxEaXJlY3RpdmVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uob3llLGZ1bmN0aW9uKC4uLmUpe3JldHVybiBlWzJdKyJ7In0pfV9pbnNlcnRQb2x5ZmlsbFJ1bGVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uoc3llLCguLi5lKT0+e2xldCBpPWVbMF0ucmVwbGFjZShlWzFdLCIiKS5yZXBsYWNlKGVbMl0sIiIpO3JldHVybiBlWzRdK2l9KX1fc2NvcGVDc3NUZXh0KHQsZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpO3JldHVybiB0PXRoaXMuX2luc2VydFBvbHlmaWxsSG9zdEluQ3NzVGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRDb2xvbkhvc3QodCksdD10aGlzLl9jb252ZXJ0Q29sb25Ib3N0Q29udGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRTaGFkb3dET01TZWxlY3RvcnModCksZSYmKHQ9dGhpcy5fc2NvcGVTZWxlY3RvcnModCxlLGkpKSwodD10KyJcbiIrcikudHJpbSgpfV9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpe2xldCBpLGU9IiI7Zm9yKFQ5Lmxhc3RJbmRleD0wO251bGwhPT0oaT1UOS5leGVjKHQpKTspZSs9aVswXS5yZXBsYWNlKGlbMl0sIiIpLnJlcGxhY2UoaVsxXSxpWzRdKSsiXG5cbiI7cmV0dXJuIGV9X2NvbnZlcnRDb2xvbkhvc3QodCl7cmV0dXJuIHQucmVwbGFjZShheWUsKGUsaSxyKT0+e2lmKGkpe2xldCBvPVtdLHM9aS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhIG9mIHMpe2lmKCFhKWJyZWFrO2xldCBsPXNmK2EucmVwbGFjZShrMSwiIikrcjtvLnB1c2gobCl9cmV0dXJuIG8uam9pbigiLCIpfXJldHVybiBzZityfSl9X2NvbnZlcnRDb2xvbkhvc3RDb250ZXh0KHQpe3JldHVybiB0LnJlcGxhY2UobHllLGU9PntsZXQgcixpPVtbXV07Zm9yKDtyPWN5ZS5leGVjKGUpOyl7bGV0IG89KHJbMV0/PyIiKS50cmltKCkuc3BsaXQoIiwiKS5tYXAoYT0+YS50cmltKCkpLmZpbHRlcihhPT4iIiE9PWEpLHM9aS5sZW5ndGg7TXllKGksby5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWZvcihsZXQgbD0wO2w8cztsKyspaVtsK2Eqc10ucHVzaChvW2FdKTtlPXJbMl19cmV0dXJuIGkubWFwKG89PmZ1bmN0aW9uKG4sdCl7bGV0IGU9c2Y7ZDAubGFzdEluZGV4PTA7bGV0IGk9ZDAudGVzdCh0KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuIGUrdDtsZXQgcj1bbi5wb3AoKXx8IiJdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBvPXIubGVuZ3RoLHM9bi5wb3AoKTtmb3IobGV0IGE9MDthPG87YSsrKXtsZXQgbD1yW2FdO3JbMipvK2FdPWwrIiAiK3MscltvK2FdPXMrIiAiK2wsclthXT1zK2x9fXJldHVybiByLm1hcChvPT5pP2Ake299JHt0fWA6YCR7b30ke2V9JHt0fSwgJHtvfSAke2V9JHt0fWApLmpvaW4oIiwiKX0obyxlKSkuam9pbigiLCAiKX0pfV9jb252ZXJ0U2hhZG93RE9NU2VsZWN0b3JzKHQpe3JldHVybiB1eWUucmVkdWNlKChlLGkpPT5lLnJlcGxhY2UoaSwiICIpLHQpfV9zY29wZVNlbGVjdG9ycyh0LGUsaSl7cmV0dXJuIEk5KHQscj0+e2xldCBvPXIuc2VsZWN0b3Iscz1yLmNvbnRlbnQ7cmV0dXJuIkAiIT09ci5zZWxlY3RvclswXT9vPXRoaXMuX3Njb3BlU2VsZWN0b3Ioci5zZWxlY3RvcixlLGksdGhpcy5zdHJpY3RTdHlsaW5nKTpyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBtZWRpYSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBzdXBwb3J0cyIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBkb2N1bWVudCIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBsYXllciIpP3M9dGhpcy5fc2NvcGVTZWxlY3RvcnMoci5jb250ZW50LGUsaSk6KHIuc2VsZWN0b3Iuc3RhcnRzV2l0aCgiQGZvbnQtZmFjZSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBwYWdlIikpJiYocz10aGlzLl9zdHJpcFNjb3BpbmdTZWxlY3RvcnMoci5jb250ZW50KSksbmV3IER4KG8scyl9KX1fc3RyaXBTY29waW5nU2VsZWN0b3JzKHQpe3JldHVybiBJOSh0LGU9PntsZXQgaT1lLnNlbGVjdG9yLnJlcGxhY2UoQTksIiAiKS5yZXBsYWNlKEQ5LCIgIik7cmV0dXJuIG5ldyBEeChpLGUuY29udGVudCl9KX1fc2NvcGVTZWxlY3Rvcih0LGUsaSxyKXtyZXR1cm4gdC5zcGxpdCgiLCIpLm1hcChvPT5vLnRyaW0oKS5zcGxpdChBOSkpLm1hcChvPT57bGV0W3MsLi4uYV09bztyZXR1cm5bKGM9PnRoaXMuX3NlbGVjdG9yTmVlZHNTY29waW5nKGMsZSk/cj90aGlzLl9hcHBseVN0cmljdFNlbGVjdG9yU2NvcGUoYyxlLGkpOnRoaXMuX2FwcGx5U2VsZWN0b3JTY29wZShjLGUsaSk6YykocyksLi4uYV0uam9pbigiICIpfSkuam9pbigiLCAiKX1fc2VsZWN0b3JOZWVkc1Njb3BpbmcodCxlKXtyZXR1cm4hdGhpcy5fbWFrZVNjb3BlTWF0Y2hlcihlKS50ZXN0KHQpfV9tYWtlU2NvcGVNYXRjaGVyKHQpe3JldHVybiB0PXQucmVwbGFjZSgvXFsvZywiXFxbIikucmVwbGFjZSgvXF0vZywiXFxdIiksbmV3IFJlZ0V4cCgiXigiK3QrIikoWz5cXHN+K1suLHs6XVtcXHNcXFNdKik/JCIsIm0iKX1fYXBwbHlTZWxlY3RvclNjb3BlKHQsZSxpKXtyZXR1cm4gdGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKX1fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKXtpZihkMC5sYXN0SW5kZXg9MCxkMC50ZXN0KHQpKXtsZXQgcj10aGlzLnN0cmljdFN0eWxpbmc/YFske2l9XWA6ZTtyZXR1cm4gdC5yZXBsYWNlKEQ5LChvLHMpPT5zLnJlcGxhY2UoLyhbXjpdKikoOiopKC4qKS8sKGEsbCxjLHUpPT5sK3IrYyt1KSkucmVwbGFjZShkMCxyKyIgIil9cmV0dXJuIGUrIiAiK3R9X2FwcGx5U3RyaWN0U2VsZWN0b3JTY29wZSh0LGUsaSl7bGV0IHUsbz0iWyIrKGU9ZS5yZXBsYWNlKC9cW2lzPShbXlxdXSopXF0vZywobSwuLi5DKT0+Q1swXSkpKyJdIixzPW09PntsZXQgQz1tLnRyaW0oKTtpZighQylyZXR1cm4iIjtpZihtLmluZGV4T2Yoc2YpPi0xKUM9dGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKG0sZSxpKTtlbHNle2xldCBfPW0ucmVwbGFjZShkMCwiIik7aWYoXy5sZW5ndGg+MCl7bGV0IHk9Xy5tYXRjaCgvKFteOl0qKSg6KikoLiopLyk7eSYmKEM9eVsxXStvK3lbMl0reVszXSl9fXJldHVybiBDfSxhPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYWNlaG9sZGVycz1bXSx0aGlzLmluZGV4PTAsdD10aGlzLl9lc2NhcGVSZWdleE1hdGNoZXModCwvKFxbW15cXV0qXF0pL2cpLHQ9dGhpcy5fZXNjYXBlUmVnZXhNYXRjaGVzKHQsLyhcXC4pL2cpLHRoaXMuX2NvbnRlbnQ9dC5yZXBsYWNlKC8oOm50aC1bLVx3XSspKFwoW14pXStcKSkvZywoZSxpLHIpPT57bGV0IG89YF9fcGgtJHt0aGlzLmluZGV4fV9fYDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMucHVzaChyKSx0aGlzLmluZGV4KyssaStvfSl9cmVzdG9yZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9fX3BoLShcZCspX18vZywoZSxpKT0+dGhpcy5wbGFjZWhvbGRlcnNbK2ldKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9X2VzY2FwZVJlZ2V4TWF0Y2hlcyh0LGUpe3JldHVybiB0LnJlcGxhY2UoZSwoaSxyKT0+e2xldCBvPWBfX3BoLSR7dGhpcy5pbmRleH1fX2A7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLnB1c2gociksdGhpcy5pbmRleCsrLG99KX19KHQpLGw9IiIsYz0wLGQ9LyggfD58XCt8fig/IT0pKVxzKi9nLGg9ISgodD1hLmNvbnRlbnQoKSkuaW5kZXhPZihzZik+LTEpO2Zvcig7bnVsbCE9PSh1PWQuZXhlYyh0KSk7KXtsZXQgbT11WzFdLEM9dC5zbGljZShjLHUuaW5kZXgpLnRyaW0oKTtoPWh8fEMuaW5kZXhPZihzZik+LTEsbCs9YCR7aD9zKEMpOkN9ICR7bX0gYCxjPWQubGFzdEluZGV4fWxldCBmPXQuc3Vic3RyaW5nKGMpO3JldHVybiBoPWh8fGYuaW5kZXhPZihzZik+LTEsbCs9aD9zKGYpOmYsYS5yZXN0b3JlKGwpfV9pbnNlcnRQb2x5ZmlsbEhvc3RJbkNzc1RleHQodCl7cmV0dXJuIHQucmVwbGFjZShoeWUsZzMpLnJlcGxhY2UocHllLGsxKX19O3JldHVybiBuLm1hcChyPT5pLnNoaW1Dc3NUZXh0KHIsIl9uZ2NvbnRlbnQtJUNPTVAlIiwiX25naG9zdC0lQ09NUCUiKSl9KG4uc3R5bGVzKTpuLnN0eWxlcykucmVkdWNlKChJLEEpPT4oQS50cmltKCkubGVuZ3RoPjAmJkkucHVzaCh0LmdldENvbnN0TGl0ZXJhbChudChBKSkpLEkpLFtdKTt5Lmxlbmd0aD4wJiZpLnNldCgic3R5bGVzIixjcih5KSl9ZWxzZSBuLmVuY2Fwc3VsYXRpb249PT1vZC5FbXVsYXRlZCYmKG4uZW5jYXBzdWxhdGlvbj1vZC5Ob25lKTtuLmVuY2Fwc3VsYXRpb24hPT1vZC5FbXVsYXRlZCYmaS5zZXQoImVuY2Fwc3VsYXRpb24iLG50KG4uZW5jYXBzdWxhdGlvbikpLG51bGwhPT1uLmFuaW1hdGlvbnMmJmkuc2V0KCJkYXRhIixtbChbe2tleToiYW5pbWF0aW9uIix2YWx1ZTpuLmFuaW1hdGlvbnMscXVvdGVkOiExfV0pKSxudWxsIT1sJiZsIT09cWIuRGVmYXVsdCYmaS5zZXQoImNoYW5nZURldGVjdGlvbiIsbnQobCkpO2xldCBtPXhuKEsuZGVmaW5lQ29tcG9uZW50KS5jYWxsRm4oW2kudG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksQz1mdW5jdGlvbihuKXtsZXQgdD1tWShuKTtyZXR1cm4gdC5wdXNoKEtMKG4udGVtcGxhdGUubmdDb250ZW50U2VsZWN0b3JzKSksdC5wdXNoKE5hKG50KG4uaXNTdGFuZGFsb25lKSkpLE5hKHhuKEsuQ29tcG9uZW50RGVjbGFyYXRpb24sdCkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjptLHR5cGU6QyxzdGF0ZW1lbnRzOltdfX0oaSxyLHExKGkuaW50ZXJwb2xhdGlvbikpO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocy5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5KHQsZSxpKXtsZXQgcj1hZih7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LGRlcHM6KG49aS5kZXBzLG51bGw9PW4/bnVsbDpuLm1hcCh5WSkpLHRhcmdldDppLnRhcmdldH0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oci5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5RGVjbGFyYXRpb24odCxlLGkpe2xldCByPWFmKHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOkFycmF5LmlzQXJyYXkoaS5kZXBzKT9pLmRlcHMubWFwKGhxKTppLmRlcHMsdGFyZ2V0OmkudGFyZ2V0fSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y3JlYXRlUGFyc2VTb3VyY2VTcGFuKHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCByPW5ldyBJMSgiIixgaW4gJHtufSAke3R9IGluICR7ZX1gKTtyZXR1cm4gbmV3IFRvKG5ldyB3ZihyLC0xLC0xLC0xKSxuZXcgd2YociwtMSwtMSwtMSkpfSh0LGUsaSl9aml0RXhwcmVzc2lvbih0LGUsaSxyKXtsZXQgbz1bLi4ucixuZXcgYXUoIiRkZWYiLHQsdm9pZCAwLGthLkV4cG9ydGVkKV07cmV0dXJuIHRoaXMuaml0RXZhbHVhdG9yLmV2YWx1YXRlU3RhdGVtZW50cyhpLG8sbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY29udGV4dD10fXJlc29sdmVFeHRlcm5hbFJlZmVyZW5jZSh0KXtpZigiQGFuZ3VsYXIvY29yZSIhPT10Lm1vZHVsZU5hbWUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHRlcm5hbCByZWZlcmVuY2UgdG8gJHt0Lm1vZHVsZU5hbWV9LCBvbmx5IHJlZmVyZW5jZXMgdG8gQGFuZ3VsYXIvY29yZSBhcmUgc3VwcG9ydGVkLmApO2lmKCF0aGlzLmNvbnRleHQuaGFzT3duUHJvcGVydHkodC5uYW1lKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHZhbHVlIHByb3ZpZGVkIGZvciBAYW5ndWxhci9jb3JlIHN5bWJvbCAnJHt0Lm5hbWV9Jy5gKTtyZXR1cm4gdGhpcy5jb250ZXh0W3QubmFtZV19fShlKSwhMCkuJGRlZn19O3ZhciBaMT1mdW5jdGlvbihuLC4uLnQpe2lmKFoxLnRyYW5zbGF0ZSl7bGV0IGk9WjEudHJhbnNsYXRlKG4sdCk7bj1pWzBdLHQ9aVsxXX1sZXQgZT14WShuWzBdLG4ucmF3WzBdKTtmb3IobGV0IGk9MTtpPG4ubGVuZ3RoO2krKyllKz10W2ktMV0reFkobltpXSxuLnJhd1tpXSk7cmV0dXJuIGV9O2Z1bmN0aW9uIHhZKG4sdCl7cmV0dXJuIjoiPT09dC5jaGFyQXQoMCk/bi5zdWJzdHJpbmcoZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MSxpPTE7ZTxuLmxlbmd0aDtlKyssaSsrKWlmKCJcXCI9PT10W2ldKWkrKztlbHNlIGlmKCI6Ij09PW5bZV0pcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnRlcm1pbmF0ZWQgJGxvY2FsaXplIG1ldGFkYXRhIGJsb2NrIGluICIke3R9Ii5gKX0obix0KSsxKTpufSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKS4kbG9jYWxpemU9WjE7dmFyIHczPW51bGw7ZnVuY3Rpb24gZ2woKXtyZXR1cm4gdzN9dmFyIHNUPWNsYXNze30sQnQ9bmV3IHNlKCJEb2N1bWVudFRva2VuIiksUlk9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFIoT1kpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtuZXcgc2UoIkxvY2F0aW9uIEluaXRpYWxpemVkIik7dmFyIE9ZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSWXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX2RvYz1lLHRoaXMuX2luaXQoKX1faW5pdCgpe3RoaXMubG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIGdsKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKGUpe2xldCBpPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGUpfW9uSGFzaENoYW5nZShlKXtsZXQgaT1nbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhvc3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoZSl7dGhpcy5sb2NhdGlvbi5wYXRobmFtZT1lfXB1c2hTdGF0ZShlLGkscil7d1koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZShlLGkscik6dGhpcy5sb2NhdGlvbi5oYXNoPXJ9cmVwbGFjZVN0YXRlKGUsaSxyKXt3WSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGUsaSxyKTp0aGlzLmxvY2F0aW9uLmhhc2g9cn1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2hpc3RvcnkuZ28oZSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgT1koUihCdCkpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtmdW5jdGlvbiB3WSgpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfWZ1bmN0aW9uIGtZKG4sdCl7aWYoMD09bi5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09dC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9MDtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpJiZlKyssdC5zdGFydHNXaXRoKCIvIikmJmUrKywyPT1lP24rdC5zdWJzdHJpbmcoMSk6MT09ZT9uK3Q6bisiLyIrdH1mdW5jdGlvbiBNWShuKXtsZXQgdD1uLm1hdGNoKC8jfFw/fCQvKSxlPXQmJnQuaW5kZXh8fG4ubGVuZ3RoO3JldHVybiBuLnNsaWNlKDAsZS0oIi8iPT09bltlLTFdPzE6MCkpK24uc2xpY2UoZSl9ZnVuY3Rpb24gSWYobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/Ij8iK246bn12YXIgRDM9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFNvKGNDZSl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbENlPW5ldyBzZSgiYXBwQmFzZUhyZWYiKSxjQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEQze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9aT8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/U28oQnQpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBrWSh0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2xldCBpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrSWYodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiByJiZlP2Ake2l9JHtyfWA6aX1wdXNoU3RhdGUoZSxpLHIsbyl7bGV0IHM9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitJZihvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoZSxpLHMpfXJlcGxhY2VTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK0lmKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLGkscyl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSWSksUihsQ2UsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEh4PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fc3ViamVjdD1uZXcgRyx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1lO2xldCBpPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj1NWShTWShpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKHI9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpyLnN0YXRlLHR5cGU6ci50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChlPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGUpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oZSxpPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrSWYoaSkpfW5vcm1hbGl6ZShlKXtyZXR1cm4gbi5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmdC5zdGFydHNXaXRoKG4pP3Quc3Vic3RyaW5nKG4ubGVuZ3RoKTp0fSh0aGlzLl9iYXNlSHJlZixTWShlKSkpfXByZXBhcmVFeHRlcm5hbFVybChlKXtyZXR1cm4gZSYmIi8iIT09ZVswXSYmKGU9Ii8iK2UpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGUpfWdvKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9cmVwbGFjZVN0YXRlKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGUpfW9uVXJsQ2hhbmdlKGUpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChlKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb258fCh0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5zdWJzY3JpYmUoaT0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhpLnVybCxpLnN0YXRlKX0pKSwoKT0+e2xldCBpPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGUpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZT0iIixpKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChyPT5yKGUsaSkpfXN1YnNjcmliZShlLGkscil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6aSxjb21wbGV0ZTpyfSl9fXJldHVybiBuLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPUlmLG4uam9pbldpdGhTbGFzaD1rWSxuLnN0cmlwVHJhaWxpbmdTbGFzaD1NWSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoRDMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEh4KFIoRDMpKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBTWShuKXtyZXR1cm4gbi5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIHJUPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EZWNpbWFsPTBdPSJEZWNpbWFsIixuW24uUGVyY2VudD0xXT0iUGVyY2VudCIsbltuLkN1cnJlbmN5PTJdPSJDdXJyZW5jeSIsbltuLlNjaWVudGlmaWM9M109IlNjaWVudGlmaWMifShyVHx8KHJUPXt9KSksclQpKSgpLEpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5Gb3JtYXQ9MF09IkZvcm1hdCIsbltuLlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUifShKb3x8KEpvPXt9KSksSm8pKSgpLCRpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OYXJyb3c9MF09Ik5hcnJvdyIsbltuLkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsbltuLldpZGU9Ml09IldpZGUiLG5bbi5TaG9ydD0zXT0iU2hvcnQifSgkaXx8KCRpPXt9KSksJGkpKSgpLGtzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5NZWRpdW09MV09Ik1lZGl1bSIsbltuLkxvbmc9Ml09IkxvbmciLG5bbi5GdWxsPTNdPSJGdWxsIn0oa3N8fChrcz17fSkpLGtzKSkoKSxscz0oKCk9PihmdW5jdGlvbihuKXtuW24uRGVjaW1hbD0wXT0iRGVjaW1hbCIsbltuLkdyb3VwPTFdPSJHcm91cCIsbltuLkxpc3Q9Ml09Ikxpc3QiLG5bbi5QZXJjZW50U2lnbj0zXT0iUGVyY2VudFNpZ24iLG5bbi5QbHVzU2lnbj00XT0iUGx1c1NpZ24iLG5bbi5NaW51c1NpZ249NV09Ik1pbnVzU2lnbiIsbltuLkV4cG9uZW50aWFsPTZdPSJFeHBvbmVudGlhbCIsbltuLlN1cGVyc2NyaXB0aW5nRXhwb25lbnQ9N109IlN1cGVyc2NyaXB0aW5nRXhwb25lbnQiLG5bbi5QZXJNaWxsZT04XT0iUGVyTWlsbGUiLG5bbi5JbmZpbml0eT05XT0iSW5maW5pdHkiLG5bbi5OYU49MTBdPSJOYU4iLG5bbi5UaW1lU2VwYXJhdG9yPTExXT0iVGltZVNlcGFyYXRvciIsbltuLkN1cnJlbmN5RGVjaW1hbD0xMl09IkN1cnJlbmN5RGVjaW1hbCIsbltuLkN1cnJlbmN5R3JvdXA9MTNdPSJDdXJyZW5jeUdyb3VwIn0obHN8fChscz17fSkpLGxzKSkoKTtmdW5jdGlvbiBKMShuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlRm9ybWF0XSx0KX1mdW5jdGlvbiAkMShuLHQpe3JldHVybiBfbCh0YShuKVtici5UaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlVGltZUZvcm1hdF0sdCl9ZnVuY3Rpb24gaGQobix0KXtsZXQgZT10YShuKSxpPWVbYnIuTnVtYmVyU3ltYm9sc11bdF07aWYodHlwZW9mIGk+InUiKXtpZih0PT09bHMuQ3VycmVuY3lEZWNpbWFsKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkRlY2ltYWxdO2lmKHQ9PT1scy5DdXJyZW5jeUdyb3VwKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkdyb3VwXX1yZXR1cm4gaX1mdW5jdGlvbiBGWShuKXtpZighbltici5FeHRyYURhdGFdKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBleHRyYSBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJHtuW2JyLkxvY2FsZUlkXX0iLiBVc2UgInJlZ2lzdGVyTG9jYWxlRGF0YSIgdG8gbG9hZCBuZXcgZGF0YS4gU2VlIHRoZSAiSTE4biBndWlkZSIgb24gYW5ndWxhci5pbyB0byBrbm93IG1vcmUuYCl9ZnVuY3Rpb24gX2wobix0KXtmb3IobGV0IGU9dDtlPi0xO2UtLSlpZih0eXBlb2YgbltlXTwidSIpcmV0dXJuIG5bZV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIHYzKG4pe2xldFt0LGVdPW4uc3BsaXQoIjoiKTtyZXR1cm57aG91cnM6K3QsbWludXRlczorZX19dmFyIGJDZT0vXihcZHs0LH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86XC4oXGQrKSk/KT8pPyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvLEJ4PXt9LHhDZT0vKCg/OlteQkVHSExNT1NXWVphYmNkaG1zd3l6J10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGN7MSw2fXxhezEsNX18YnsxLDV9fEJ7MSw1fXxoezEsMn18SHsxLDJ9fG17MSwyfXxzezEsMn18U3sxLDN9fHp7MSw0fXxaezEsNX18T3sxLDR9KSkoW1xzXFNdKikvLHBjPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5TaG9ydEdNVD0xXT0iU2hvcnRHTVQiLG5bbi5Mb25nPTJdPSJMb25nIixuW24uRXh0ZW5kZWQ9M109IkV4dGVuZGVkIn0ocGN8fChwYz17fSkpLHBjKSkoKSxGaT0oKCk9PihmdW5jdGlvbihuKXtuW24uRnVsbFllYXI9MF09IkZ1bGxZZWFyIixuW24uTW9udGg9MV09Ik1vbnRoIixuW24uRGF0ZT0yXT0iRGF0ZSIsbltuLkhvdXJzPTNdPSJIb3VycyIsbltuLk1pbnV0ZXM9NF09Ik1pbnV0ZXMiLG5bbi5TZWNvbmRzPTVdPSJTZWNvbmRzIixuW24uRnJhY3Rpb25hbFNlY29uZHM9Nl09IkZyYWN0aW9uYWxTZWNvbmRzIixuW24uRGF5PTddPSJEYXkifShGaXx8KEZpPXt9KSksRmkpKSgpLGtpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EYXlQZXJpb2RzPTBdPSJEYXlQZXJpb2RzIixuW24uRGF5cz0xXT0iRGF5cyIsbltuLk1vbnRocz0yXT0iTW9udGhzIixuW24uRXJhcz0zXT0iRXJhcyJ9KGtpfHwoa2k9e30pKSxraSkpKCk7ZnVuY3Rpb24gQ0NlKG4sdCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2lmKEVZKG4pKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmIWlzTmFOKG4pKXJldHVybiBuZXcgRGF0ZShuKTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2lmKG49bi50cmltKCksL14oXGR7NH0oLVxkezEsMn0oLVxkezEsMn0pPyk/KSQvLnRlc3Qobikpe2xldFtyLG89MSxzPTFdPW4uc3BsaXQoIi0iKS5tYXAoYT0+K2EpO3JldHVybiBhVChyLG8tMSxzKX1sZXQgaSxlPXBhcnNlRmxvYXQobik7aWYoIWlzTmFOKG4tZSkpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKGk9bi5tYXRjaChiQ2UpKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uZXcgRGF0ZSgwKSxlPTAsaT0wLHI9bls4XT90LnNldFVUQ0Z1bGxZZWFyOnQuc2V0RnVsbFllYXIsbz1uWzhdP3Quc2V0VVRDSG91cnM6dC5zZXRIb3VycztuWzldJiYoZT1OdW1iZXIobls5XStuWzEwXSksaT1OdW1iZXIobls5XStuWzExXSkpLHIuY2FsbCh0LE51bWJlcihuWzFdKSxOdW1iZXIoblsyXSktMSxOdW1iZXIoblszXSkpO2xldCBzPU51bWJlcihuWzRdfHwwKS1lLGE9TnVtYmVyKG5bNV18fDApLWksbD1OdW1iZXIobls2XXx8MCksYz1NYXRoLmZsb29yKDFlMypwYXJzZUZsb2F0KCIwLiIrKG5bN118fDApKSk7cmV0dXJuIG8uY2FsbCh0LHMsYSxsLGMpLHR9KGkpfWxldCB0PW5ldyBEYXRlKG4pO2lmKCFFWSh0KSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb252ZXJ0ICIke259IiBpbnRvIGEgZGF0ZWApO3JldHVybiB0fShuKTt0PXBkKGUsdCl8fHQ7bGV0IGEscz1bXTtmb3IoO3Q7KXtpZihhPXhDZS5leGVjKHQpLCFhKXtzLnB1c2godCk7YnJlYWt9e3M9cy5jb25jYXQoYS5zbGljZSgxKSk7bGV0IHU9cy5wb3AoKTtpZighdSlicmVhazt0PXV9fWxldCBsPXIuZ2V0VGltZXpvbmVPZmZzZXQoKTtpJiYobD1MWShpLGwpLHI9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4obj1uZXcgRGF0ZShuLmdldFRpbWUoKSkpLnNldE1pbnV0ZXMobi5nZXRNaW51dGVzKCkrdCksbn0obiwtMSooTFkodCxyKS1yKSl9KHIsaSkpO2xldCBjPSIiO3JldHVybiBzLmZvckVhY2godT0+e2xldCBkPWZ1bmN0aW9uKG4pe2lmKGIzW25dKXJldHVybiBiM1tuXTtsZXQgdDtzd2l0Y2gobil7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6dD1wcihraS5FcmFzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkdHR0ciOnQ9cHIoa2kuRXJhcywkaS5XaWRlKTticmVhaztjYXNlIkdHR0dHIjp0PXByKGtpLkVyYXMsJGkuTmFycm93KTticmVhaztjYXNlInkiOnQ9aG8oRmkuRnVsbFllYXIsMSwwLCExLCEwKTticmVhaztjYXNlInl5Ijp0PWhvKEZpLkZ1bGxZZWFyLDIsMCwhMCwhMCk7YnJlYWs7Y2FzZSJ5eXkiOnQ9aG8oRmkuRnVsbFllYXIsMywwLCExLCEwKTticmVhaztjYXNlInl5eXkiOnQ9aG8oRmkuRnVsbFllYXIsNCwwLCExLCEwKTticmVhaztjYXNlIlkiOnQ9aVQoMSk7YnJlYWs7Y2FzZSJZWSI6dD1pVCgyLCEwKTticmVhaztjYXNlIllZWSI6dD1pVCgzKTticmVhaztjYXNlIllZWVkiOnQ9aVQoNCk7YnJlYWs7Y2FzZSJNIjpjYXNlIkwiOnQ9aG8oRmkuTW9udGgsMSwxKTticmVhaztjYXNlIk1NIjpjYXNlIkxMIjp0PWhvKEZpLk1vbnRoLDIsMSk7YnJlYWs7Y2FzZSJNTU0iOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIk1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLldpZGUpO2JyZWFrO2Nhc2UiTU1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLk5hcnJvdyk7YnJlYWs7Y2FzZSJMTEwiOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkLEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTCI6dD1wcihraS5Nb250aHMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlIkxMTExMIjp0PXByKGtpLk1vbnRocywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJ3Ijp0PXkzKDEpO2JyZWFrO2Nhc2Uid3ciOnQ9eTMoMik7YnJlYWs7Y2FzZSJXIjp0PXkzKDEsITApO2JyZWFrO2Nhc2UiZCI6dD1obyhGaS5EYXRlLDEpO2JyZWFrO2Nhc2UiZGQiOnQ9aG8oRmkuRGF0ZSwyKTticmVhaztjYXNlImMiOmNhc2UiY2MiOnQ9aG8oRmkuRGF5LDEpO2JyZWFrO2Nhc2UiY2NjIjp0PXByKGtpLkRheXMsJGkuQWJicmV2aWF0ZWQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjIjp0PXByKGtpLkRheXMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2NjIjp0PXByKGtpLkRheXMsJGkuTmFycm93LEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2NjIjp0PXByKGtpLkRheXMsJGkuU2hvcnQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6dD1wcihraS5EYXlzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkVFRUUiOnQ9cHIoa2kuRGF5cywkaS5XaWRlKTticmVhaztjYXNlIkVFRUVFIjp0PXByKGtpLkRheXMsJGkuTmFycm93KTticmVhaztjYXNlIkVFRUVFRSI6dD1wcihraS5EYXlzLCRpLlNob3J0KTticmVhaztjYXNlImEiOmNhc2UiYWEiOmNhc2UiYWFhIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiYWFhYSI6dD1wcihraS5EYXlQZXJpb2RzLCRpLldpZGUpO2JyZWFrO2Nhc2UiYWFhYWEiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3cpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJiYiI6Y2FzZSJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5BYmJyZXZpYXRlZCxKby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5XaWRlLEpvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6dD1wcihraS5EYXlQZXJpb2RzLCRpLkFiYnJldmlhdGVkLEpvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuV2lkZSxKby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQkIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uRm9ybWF0LCEwKTticmVhaztjYXNlImgiOnQ9aG8oRmkuSG91cnMsMSwtMTIpO2JyZWFrO2Nhc2UiaGgiOnQ9aG8oRmkuSG91cnMsMiwtMTIpO2JyZWFrO2Nhc2UiSCI6dD1obyhGaS5Ib3VycywxKTticmVhaztjYXNlIkhIIjp0PWhvKEZpLkhvdXJzLDIpO2JyZWFrO2Nhc2UibSI6dD1obyhGaS5NaW51dGVzLDEpO2JyZWFrO2Nhc2UibW0iOnQ9aG8oRmkuTWludXRlcywyKTticmVhaztjYXNlInMiOnQ9aG8oRmkuU2Vjb25kcywxKTticmVhaztjYXNlInNzIjp0PWhvKEZpLlNlY29uZHMsMik7YnJlYWs7Y2FzZSJTIjp0PWhvKEZpLkZyYWN0aW9uYWxTZWNvbmRzLDEpO2JyZWFrO2Nhc2UiU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMik7YnJlYWs7Y2FzZSJTU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMyk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpjYXNlIlpaWiI6dD1uVChwYy5TaG9ydCk7YnJlYWs7Y2FzZSJaWlpaWiI6dD1uVChwYy5FeHRlbmRlZCk7YnJlYWs7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6Y2FzZSJ6IjpjYXNlInp6IjpjYXNlInp6eiI6dD1uVChwYy5TaG9ydEdNVCk7YnJlYWs7Y2FzZSJPT09PIjpjYXNlIlpaWloiOmNhc2Uienp6eiI6dD1uVChwYy5Mb25nKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBiM1tuXT10LHR9KHUpO2MrPWQ/ZChyLGUsbCk6IicnIj09PXU/IiciOnUucmVwbGFjZSgvKF4nfCckKS9nLCIiKS5yZXBsYWNlKC8nJy9nLCInIil9KSxjfWZ1bmN0aW9uIGFUKG4sdCxlKXtsZXQgaT1uZXcgRGF0ZSgwKTtyZXR1cm4gaS5zZXRGdWxsWWVhcihuLHQsZSksaS5zZXRIb3VycygwLDAsMCksaX1mdW5jdGlvbiBwZChuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiB0YShuKVtici5Mb2NhbGVJZF19KG4pO2lmKEJ4W2VdPUJ4W2VdfHx7fSxCeFtlXVt0XSlyZXR1cm4gQnhbZV1bdF07bGV0IGk9IiI7c3dpdGNoKHQpe2Nhc2Uic2hvcnREYXRlIjppPUoxKG4sa3MuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtRGF0ZSI6aT1KMShuLGtzLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nRGF0ZSI6aT1KMShuLGtzLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbERhdGUiOmk9SjEobixrcy5GdWxsKTticmVhaztjYXNlInNob3J0VGltZSI6aT0kMShuLGtzLlNob3J0KTticmVhaztjYXNlIm1lZGl1bVRpbWUiOmk9JDEobixrcy5NZWRpdW0pO2JyZWFrO2Nhc2UibG9uZ1RpbWUiOmk9JDEobixrcy5Mb25nKTticmVhaztjYXNlImZ1bGxUaW1lIjppPSQxKG4sa3MuRnVsbCk7YnJlYWs7Y2FzZSJzaG9ydCI6bGV0IHI9cGQobiwic2hvcnRUaW1lIiksbz1wZChuLCJzaG9ydERhdGUiKTtpPXRUKGVUKG4sa3MuU2hvcnQpLFtyLG9dKTticmVhaztjYXNlIm1lZGl1bSI6bGV0IHM9cGQobiwibWVkaXVtVGltZSIpLGE9cGQobiwibWVkaXVtRGF0ZSIpO2k9dFQoZVQobixrcy5NZWRpdW0pLFtzLGFdKTticmVhaztjYXNlImxvbmciOmxldCBsPXBkKG4sImxvbmdUaW1lIiksYz1wZChuLCJsb25nRGF0ZSIpO2k9dFQoZVQobixrcy5Mb25nKSxbbCxjXSk7YnJlYWs7Y2FzZSJmdWxsIjpsZXQgdT1wZChuLCJmdWxsVGltZSIpLGQ9cGQobiwiZnVsbERhdGUiKTtpPXRUKGVUKG4sa3MuRnVsbCksW3UsZF0pfXJldHVybiBpJiYoQnhbZV1bdF09aSksaX1mdW5jdGlvbiB0VChuLHQpe3JldHVybiB0JiYobj1uLnJlcGxhY2UoL1x7KFtefV0rKX0vZyxmdW5jdGlvbihlLGkpe3JldHVybiBudWxsIT10JiZpIGluIHQ/dFtpXTplfSkpLG59ZnVuY3Rpb24gZGMobix0LGU9Ii0iLGkscil7bGV0IG89IiI7KG48MHx8ciYmbjw9MCkmJihyP249MS1uOihuPS1uLG89ZSkpO2xldCBzPVN0cmluZyhuKTtmb3IoO3MubGVuZ3RoPHQ7KXM9IjAiK3M7cmV0dXJuIGkmJihzPXMuc2xpY2Uocy5sZW5ndGgtdCkpLG8rc31mdW5jdGlvbiBobyhuLHQsZT0wLGk9ITEscj0hMSl7cmV0dXJuIGZ1bmN0aW9uKG8scyl7bGV0IGE9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSBGaS5GdWxsWWVhcjpyZXR1cm4gdC5nZXRGdWxsWWVhcigpO2Nhc2UgRmkuTW9udGg6cmV0dXJuIHQuZ2V0TW9udGgoKTtjYXNlIEZpLkRhdGU6cmV0dXJuIHQuZ2V0RGF0ZSgpO2Nhc2UgRmkuSG91cnM6cmV0dXJuIHQuZ2V0SG91cnMoKTtjYXNlIEZpLk1pbnV0ZXM6cmV0dXJuIHQuZ2V0TWludXRlcygpO2Nhc2UgRmkuU2Vjb25kczpyZXR1cm4gdC5nZXRTZWNvbmRzKCk7Y2FzZSBGaS5GcmFjdGlvbmFsU2Vjb25kczpyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIEZpLkRheTpyZXR1cm4gdC5nZXREYXkoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBEYXRlVHlwZSB2YWx1ZSAiJHtufSIuYCl9fShuLG8pO2lmKChlPjB8fGE+LWUpJiYoYSs9ZSksbj09PUZpLkhvdXJzKTA9PT1hJiYtMTI9PT1lJiYoYT0xMik7ZWxzZSBpZihuPT09RmkuRnJhY3Rpb25hbFNlY29uZHMpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGRjKG4sMykuc3Vic3RyaW5nKDAsdCl9KGEsdCk7bGV0IGw9aGQocyxscy5NaW51c1NpZ24pO3JldHVybiBkYyhhLHQsbCxpLHIpfX1mdW5jdGlvbiBwcihuLHQsZT1Kby5Gb3JtYXQsaT0hMSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvKXtzd2l0Y2goZSl7Y2FzZSBraS5Nb250aHM6cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10YShuKSxvPV9sKFtpW2JyLk1vbnRoc0Zvcm1hdF0saVtici5Nb250aHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtuLmdldE1vbnRoKCldO2Nhc2Uga2kuRGF5czpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPXRhKG4pLG89X2woW2lbYnIuRGF5c0Zvcm1hdF0saVtici5EYXlzU3RhbmRhbG9uZV1dLHQpO3JldHVybiBfbChvLGUpfSh0LHIsaSlbbi5nZXREYXkoKV07Y2FzZSBraS5EYXlQZXJpb2RzOmxldCBzPW4uZ2V0SG91cnMoKSxhPW4uZ2V0TWludXRlcygpO2lmKG8pe2xldCBjPWZ1bmN0aW9uKG4pe2xldCB0PXRhKG4pO3JldHVybiBGWSh0KSwodFtici5FeHRyYURhdGFdWzJdfHxbXSkubWFwKGk9PiJzdHJpbmciPT10eXBlb2YgaT92MyhpKTpbdjMoaVswXSksdjMoaVsxXSldKX0odCksdT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobik7RlkoaSk7bGV0IG89X2woW2lbYnIuRXh0cmFEYXRhXVswXSxpW2JyLkV4dHJhRGF0YV1bMV1dLHQpfHxbXTtyZXR1cm4gX2wobyxlKXx8W119KHQscixpKSxkPWMuZmluZEluZGV4KHA9PntpZihBcnJheS5pc0FycmF5KHApKXtsZXRbaCxmXT1wLG09cz49aC5ob3VycyYmYT49aC5taW51dGVzLEM9czxmLmhvdXJzfHxzPT09Zi5ob3VycyYmYTxmLm1pbnV0ZXM7aWYoaC5ob3VyczxmLmhvdXJzKXtpZihtJiZDKXJldHVybiEwfWVsc2UgaWYobXx8QylyZXR1cm4hMH1lbHNlIGlmKHAuaG91cnM9PT1zJiZwLm1pbnV0ZXM9PT1hKXJldHVybiEwO3JldHVybiExfSk7aWYoLTEhPT1kKXJldHVybiB1W2RdfXJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobiksbz1fbChbaVtici5EYXlQZXJpb2RzRm9ybWF0XSxpW2JyLkRheVBlcmlvZHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtzPDEyPzA6MV07Y2FzZSBraS5FcmFzOnJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBfbCh0YShuKVtici5FcmFzXSx0KX0odCxpKVtuLmdldEZ1bGxZZWFyKCk8PTA/MDoxXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7ZX1gKX19KHIsbyxuLHQsZSxpKX19ZnVuY3Rpb24gblQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxpKXtsZXQgcj0tMSppLG89aGQoZSxscy5NaW51c1NpZ24pLHM9cj4wP01hdGguZmxvb3Ioci82MCk6TWF0aC5jZWlsKHIvNjApO3N3aXRjaChuKXtjYXNlIHBjLlNob3J0OnJldHVybihyPj0wPyIrIjoiIikrZGMocywyLG8pK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5TaG9ydEdNVDpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK2RjKHMsMSxvKTtjYXNlIHBjLkxvbmc6cmV0dXJuIkdNVCIrKHI+PTA/IisiOiIiKStkYyhzLDIsbykrIjoiK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5FeHRlbmRlZDpyZXR1cm4gMD09PWk/IloiOihyPj0wPyIrIjoiIikrZGMocywyLG8pKyI6IitkYyhNYXRoLmFicyhyJTYwKSwyLG8pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHpvbmUgd2lkdGggIiR7bn0iYCl9fX1mdW5jdGlvbiBOWShuKXtyZXR1cm4gYVQobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSsoNC1uLmdldERheSgpKSl9ZnVuY3Rpb24geTMobix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcjtpZih0KXtsZXQgbz1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLmdldERheSgpLTEscz1lLmdldERhdGUoKTtyPTErTWF0aC5mbG9vcigocytvKS83KX1lbHNle2xldCBvPU5ZKGUpLHM9ZnVuY3Rpb24obil7bGV0IHQ9YVQobiwwLDEpLmdldERheSgpO3JldHVybiBhVChuLDAsMSsodDw9ND80OjExKS10KX0oby5nZXRGdWxsWWVhcigpKSxhPW8uZ2V0VGltZSgpLXMuZ2V0VGltZSgpO3I9MStNYXRoLnJvdW5kKGEvNjA0OGU1KX1yZXR1cm4gZGMocixuLGhkKGksbHMuTWludXNTaWduKSl9fWZ1bmN0aW9uIGlUKG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGRjKE5ZKGUpLmdldEZ1bGxZZWFyKCksbixoZChpLGxzLk1pbnVzU2lnbiksdCl9fXZhciBiMz17fTtmdW5jdGlvbiBMWShuLHQpe249bi5yZXBsYWNlKC86L2csIiIpO2xldCBlPURhdGUucGFyc2UoIkphbiAwMSwgMTk3MCAwMDowMDowMCAiK24pLzZlNDtyZXR1cm4gaXNOYU4oZSk/dDplfWZ1bmN0aW9uIEVZKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4udmFsdWVPZigpKX12YXIgT0NlPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvO2Z1bmN0aW9uIEEzKG4sdCxlKXtsZXQgaT1mdW5jdGlvbihuLHQpe3JldHVybiB0YShuKVtici5OdW1iZXJGb3JtYXRzXVt0XX0odCxyVC5EZWNpbWFsKSxyPWZ1bmN0aW9uKG4sdD0iLSIpe2xldCBlPXttaW5JbnQ6MSxtaW5GcmFjOjAsbWF4RnJhYzowLHBvc1ByZToiIixwb3NTdWY6IiIsbmVnUHJlOiIiLG5lZ1N1ZjoiIixnU2l6ZTowLGxnU2l6ZTowfSxpPW4uc3BsaXQoIjsiKSxyPWlbMF0sbz1pWzFdLHM9LTEhPT1yLmluZGV4T2YoIi4iKT9yLnNwbGl0KCIuIik6W3Iuc3Vic3RyaW5nKDAsci5sYXN0SW5kZXhPZigiMCIpKzEpLHIuc3Vic3RyaW5nKHIubGFzdEluZGV4T2YoIjAiKSsxKV0sYT1zWzBdLGw9c1sxXXx8IiI7ZS5wb3NQcmU9YS5zdWJzdHJpbmcoMCxhLmluZGV4T2YoIiMiKSk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBkPWwuY2hhckF0KHUpOyIwIj09PWQ/ZS5taW5GcmFjPWUubWF4RnJhYz11KzE6IiMiPT09ZD9lLm1heEZyYWM9dSsxOmUucG9zU3VmKz1kfWxldCBjPWEuc3BsaXQoIiwiKTtpZihlLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxlLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxvKXtsZXQgdT1yLmxlbmd0aC1lLnBvc1ByZS5sZW5ndGgtZS5wb3NTdWYubGVuZ3RoLGQ9by5pbmRleE9mKCIjIik7ZS5uZWdQcmU9by5zdWJzdHJpbmcoMCxkKS5yZXBsYWNlKC8nL2csIiIpLGUubmVnU3VmPW8uc2xpY2UoZCt1KS5yZXBsYWNlKC8nL2csIiIpfWVsc2UgZS5uZWdQcmU9dCtlLnBvc1ByZSxlLm5lZ1N1Zj1lLnBvc1N1ZjtyZXR1cm4gZX0oaSxoZCh0LGxzLk1pbnVzU2lnbikpO3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIsbyxzPSExKXtsZXQgYT0iIixsPSExO2lmKGlzRmluaXRlKG4pKXtsZXQgYz1mdW5jdGlvbihuKXtsZXQgaSxyLG8scyxhLHQ9TWF0aC5hYnMobikrIiIsZT0wO2Zvcigocj10LmluZGV4T2YoIi4iKSk+LTEmJih0PXQucmVwbGFjZSgiLiIsIiIpKSwobz10LnNlYXJjaCgvZS9pKSk+MD8ocjwwJiYocj1vKSxyKz0rdC5zbGljZShvKzEpLHQ9dC5zdWJzdHJpbmcoMCxvKSk6cjwwJiYocj10Lmxlbmd0aCksbz0wOyIwIj09PXQuY2hhckF0KG8pO28rKyk7aWYobz09PShhPXQubGVuZ3RoKSlpPVswXSxyPTE7ZWxzZXtmb3IoYS0tOyIwIj09PXQuY2hhckF0KGEpOylhLS07Zm9yKHItPW8saT1bXSxzPTA7bzw9YTtvKysscysrKWlbc109TnVtYmVyKHQuY2hhckF0KG8pKX1yZXR1cm4gcj4yMiYmKGk9aS5zcGxpY2UoMCwyMSksZT1yLTEscj0xKSx7ZGlnaXRzOmksZXhwb25lbnQ6ZSxpbnRlZ2VyTGVuOnJ9fShuKTtzJiYoYz1mdW5jdGlvbihuKXtpZigwPT09bi5kaWdpdHNbMF0pcmV0dXJuIG47bGV0IHQ9bi5kaWdpdHMubGVuZ3RoLW4uaW50ZWdlckxlbjtyZXR1cm4gbi5leHBvbmVudD9uLmV4cG9uZW50Kz0yOigwPT09dD9uLmRpZ2l0cy5wdXNoKDAsMCk6MT09PXQmJm4uZGlnaXRzLnB1c2goMCksbi5pbnRlZ2VyTGVuKz0yKSxufShjKSk7bGV0IHU9dC5taW5JbnQsZD10Lm1pbkZyYWMscD10Lm1heEZyYWM7aWYobyl7bGV0IHk9by5tYXRjaChPQ2UpO2lmKG51bGw9PT15KXRocm93IG5ldyBFcnJvcihgJHtvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7bGV0IEk9eVsxXSxBPXlbM10sTz15WzVdO251bGwhPUkmJih1PUMzKEkpKSxudWxsIT1BJiYoZD1DMyhBKSksbnVsbCE9Tz9wPUMzKE8pOm51bGwhPUEmJmQ+cCYmKHA9ZCl9IWZ1bmN0aW9uKG4sdCxlKXtpZih0PmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGZyYWN0aW9uICgke3R9KSBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAoJHtlfSkuYCk7bGV0IGk9bi5kaWdpdHMscj1pLmxlbmd0aC1uLmludGVnZXJMZW4sbz1NYXRoLm1pbihNYXRoLm1heCh0LHIpLGUpLHM9bytuLmludGVnZXJMZW4sYT1pW3NdO2lmKHM+MCl7aS5zcGxpY2UoTWF0aC5tYXgobi5pbnRlZ2VyTGVuLHMpKTtmb3IobGV0IGQ9cztkPGkubGVuZ3RoO2QrKylpW2RdPTB9ZWxzZXtyPU1hdGgubWF4KDAsciksbi5pbnRlZ2VyTGVuPTEsaS5sZW5ndGg9TWF0aC5tYXgoMSxzPW8rMSksaVswXT0wO2ZvcihsZXQgZD0xO2Q8cztkKyspaVtkXT0wfWlmKGE+PTUpaWYocy0xPDApe2ZvcihsZXQgZD0wO2Q+cztkLS0paS51bnNoaWZ0KDApLG4uaW50ZWdlckxlbisrO2kudW5zaGlmdCgxKSxuLmludGVnZXJMZW4rK31lbHNlIGlbcy0xXSsrO2Zvcig7cjxNYXRoLm1heCgwLG8pO3IrKylpLnB1c2goMCk7bGV0IGw9MCE9PW8sYz10K24uaW50ZWdlckxlbix1PWkucmVkdWNlUmlnaHQoZnVuY3Rpb24oZCxwLGgsZil7cmV0dXJuIGZbaF09KHArPWQpPDEwP3A6cC0xMCxsJiYoMD09PWZbaF0mJmg+PWM/Zi5wb3AoKTpsPSExKSxwPj0xMD8xOjB9LDApO3UmJihpLnVuc2hpZnQodSksbi5pbnRlZ2VyTGVuKyspfShjLGQscCk7bGV0IGg9Yy5kaWdpdHMsZj1jLmludGVnZXJMZW4sbT1jLmV4cG9uZW50LEM9W107Zm9yKGw9aC5ldmVyeSh5PT4heSk7Zjx1O2YrKyloLnVuc2hpZnQoMCk7Zm9yKDtmPDA7ZisrKWgudW5zaGlmdCgwKTtmPjA/Qz1oLnNwbGljZShmLGgubGVuZ3RoKTooQz1oLGg9WzBdKTtsZXQgXz1bXTtmb3IoaC5sZW5ndGg+PXQubGdTaXplJiZfLnVuc2hpZnQoaC5zcGxpY2UoLXQubGdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGg+dC5nU2l6ZTspXy51bnNoaWZ0KGguc3BsaWNlKC10LmdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGgmJl8udW5zaGlmdChoLmpvaW4oIiIpKSxhPV8uam9pbihoZChlLGkpKSxDLmxlbmd0aCYmKGErPWhkKGUscikrQy5qb2luKCIiKSksbSYmKGErPWhkKGUsbHMuRXhwb25lbnRpYWwpKyIrIittKX1lbHNlIGE9aGQoZSxscy5JbmZpbml0eSk7cmV0dXJuIGE9bjwwJiYhbD90Lm5lZ1ByZSthK3QubmVnU3VmOnQucG9zUHJlK2ErdC5wb3NTdWYsYX0obixyLHQsbHMuR3JvdXAsbHMuRGVjaW1hbCxlKX1mdW5jdGlvbiBDMyhuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fWZ1bmN0aW9uIHVUKG4sdCl7dD1lbmNvZGVVUklDb21wb25lbnQodCk7Zm9yKGxldCBlIG9mIG4uc3BsaXQoIjsiKSl7bGV0IGk9ZS5pbmRleE9mKCI9IiksW3Isb109LTE9PWk/W2UsIiJdOltlLnNsaWNlKDAsaSksZS5zbGljZShpKzEpXTtpZihyLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKX1yZXR1cm4gbnVsbH12YXIgUG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9ZSx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9aSx0aGlzLl9uZ0VsPXIsdGhpcy5fcmVuZGVyZXI9byx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5faW5pdGlhbENsYXNzZXM9W10sdGhpcy5fcmF3Q2xhc3M9bnVsbH1zZXQga2xhc3MoZSl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiBlP2Uuc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX1zZXQgbmdDbGFzcyhlKXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgvXHMrLyk6ZSx0aGlzLl9yYXdDbGFzcyYmKHpFKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7bGV0IGU9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXMoZSl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7bGV0IGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fV9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaS5rZXksaS5jdXJyZW50VmFsdWUpKSxlLmZvckVhY2hDaGFuZ2VkSXRlbShpPT50aGlzLl90b2dnbGVDbGFzcyhpLmtleSxpLmN1cnJlbnRWYWx1ZSkpLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PntpLnByZXZpb3VzVmFsdWUmJnRoaXMuX3RvZ2dsZUNsYXNzKGkua2V5LCExKX0pfV9hcHBseUl0ZXJhYmxlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+e2lmKCJzdHJpbmciIT10eXBlb2YgaS5pdGVtKXRocm93IG5ldyBFcnJvcihgTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAke2NvKGkuaXRlbSl9YCk7dGhpcy5fdG9nZ2xlQ2xhc3MoaS5pdGVtLCEwKX0pLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGkuaXRlbSwhMSkpfV9hcHBseUNsYXNzZXMoZSl7ZSYmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQ/ZS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITApKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksISFlW2ldKSkpfV9yZW1vdmVDbGFzc2VzKGUpe2UmJihBcnJheS5pc0FycmF5KGUpfHxlIGluc3RhbmNlb2YgU2V0P2UuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSkpfV90b2dnbGVDbGFzcyhlLGkpeyhlPWUudHJpbSgpKSYmZS5zcGxpdCgvXHMrL2cpLmZvckVhY2gocj0+e2k/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHRjKSx3KFZiKSx3KEFlKSx3KFhjKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHluPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0Zvck9mKGUpe3RoaXMuX25nRm9yT2Y9ZSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShlKXt0aGlzLl90cmFja0J5Rm49ZX1nZXQgbmdGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn1zZXQgbmdGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fdGVtcGxhdGU9ZSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7bGV0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X2FwcGx5Q2hhbmdlcyhlKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbigocixvLHMpPT57aWYobnVsbD09ci5wcmV2aW91c0luZGV4KWkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9aSx0aGlzLmNvdW50PXJ9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX0oci5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1zP3ZvaWQgMDpzKTtlbHNlIGlmKG51bGw9PXMpaS5yZW1vdmUobnVsbD09PW8/dm9pZCAwOm8pO2Vsc2UgaWYobnVsbCE9PW8pe2xldCBhPWkuZ2V0KG8pO2kubW92ZShhLHMpLEFZKGEscil9fSk7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKXtsZXQgYT1pLmdldChyKS5jb250ZXh0O2EuaW5kZXg9cixhLmNvdW50PW8sYS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uocj0+e0FZKGkuZ2V0KHIuY3VycmVudEluZGV4KSxyKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCk7ZnVuY3Rpb24gQVkobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX12YXIgWGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl9jb250ZXh0PW5ldyBTMyx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWl9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtJWSgibmdJZlRoZW4iLGUpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShlKXtJWSgibmdJZkVsc2UiLGUpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1lLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFMzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19O2Z1bmN0aW9uIElZKG4sdCl7aWYodCYmIXQuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtjbyh0KX0nLmApfXZhciBjVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19LGhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChlKXt0aGlzLl9uZ1N3aXRjaD1lLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoZSl7dGhpcy5fZGVmYXVsdFZpZXdzfHwodGhpcy5fZGVmYXVsdFZpZXdzPVtdKSx0aGlzLl9kZWZhdWx0Vmlld3MucHVzaChlKX1fbWF0Y2hDYXNlKGUpe2xldCBpPWU9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxpfV91cGRhdGVEZWZhdWx0Q2FzZXMoZSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzJiZlIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWU7Zm9yKGxldCBpPTA7aTx0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoO2krKyl0aGlzLl9kZWZhdWx0Vmlld3NbaV0uZW5mb3JjZVN0YXRlKGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLElyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMubmdTd2l0Y2g9cixyLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgY1QoZSxpKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhPaSksdyhociw5KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLENwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3IuX2FkZERlZmF1bHQobmV3IGNUKGUsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSx3KE9pKSx3KGhyLDkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx3cD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1pLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGUpe3RoaXMuX25nU3R5bGU9ZSwhdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9zZXRTdHlsZShlLGkpe2xldFtyLG9dPWUuc3BsaXQoIi4iKSxzPS0xPT09ci5pbmRleE9mKCItIik/dm9pZCAwOmFsLkRhc2hDYXNlO251bGwhPWk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsbz9gJHtpfSR7b31gOmkscyk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIscyl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhWYiksdyhYYykpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxObz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoZSl7aWYoZS5uZ1RlbXBsYXRlT3V0bGV0fHxlLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZpLnJlbW92ZShpLmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMubmdUZW1wbGF0ZU91dGxldCl7bGV0e25nVGVtcGxhdGVPdXRsZXQ6cixuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpvLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjpzfT10aGlzO3RoaXMuX3ZpZXdSZWY9aS5jcmVhdGVFbWJlZGRlZFZpZXcocixvLHM/e2luamVjdG9yOnN9OnZvaWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZlLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbenRdfSksbn0pKCk7ZnVuY3Rpb24gZFQobix0KXtyZXR1cm4gbmV3IE10KDIxMDAsITEpfXZhciB6Q2U9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxpPT57dGhyb3cgaX0pfWRpc3Bvc2UodCl7fX0sakNlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppPT57dGhyb3cgaX19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX19LGZ0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1lfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLl9vYmo/ZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZTooZSYmdGhpcy5fc3Vic2NyaWJlKGUpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxpPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLGkpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYobjAoZSkpcmV0dXJuIHpDZTtpZihoTihlKSlyZXR1cm4gakNlO3Rocm93IGRUKCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKXtlPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9aSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uLDE2KSl9LG4uXHUwMjc1cGlwZT1CZyh7bmFtZToiYXN5bmMiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxHQ2U9bmV3IHNlKCJEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSIpLFUwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmxvY2FsZT1lLHRoaXMuZGVmYXVsdFRpbWV6b25lPWl9dHJhbnNmb3JtKGUsaT0ibWVkaXVtRGF0ZSIscixvKXtpZihudWxsPT1lfHwiIj09PWV8fGUhPWUpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBDQ2UoZSxpLG98fHRoaXMubG9jYWxlLHI/P3RoaXMuZGVmYXVsdFRpbWV6b25lPz92b2lkIDApfWNhdGNoKHMpe3Rocm93IGRUKCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHJkLDE2KSx3KEdDZSwyNCkpfSxuLlx1MDI3NXBpcGU9Qmcoe25hbWU6ImRhdGUiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx2bD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xvY2FsZT1lfXRyYW5zZm9ybShlLGkscil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiEobnVsbD09bnx8IiI9PT1ufHxuIT1uKX0oZSkpcmV0dXJuIG51bGw7cj1yfHx0aGlzLl9sb2NhbGU7dHJ5e2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWlzTmFOKE51bWJlcihuKS1wYXJzZUZsb2F0KG4pKSlyZXR1cm4gTnVtYmVyKG4pO2lmKCJudW1iZXIiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoYCR7bn0gaXMgbm90IGEgbnVtYmVyYCk7cmV0dXJuIG59KGUpO3JldHVybiBBMyhvLHIsaSl9Y2F0Y2gobyl7dGhyb3cgZFQoKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQsMTYpKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJudW1iZXIiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxCWT0oKCk9PntjbGFzcyBue3RyYW5zZm9ybShlLGkscil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZighdGhpcy5zdXBwb3J0cyhlKSl0aHJvdyBkVCgpO3JldHVybiBlLnNsaWNlKGkscil9c3VwcG9ydHMoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJzbGljZSIsdHlwZTpuLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLG59KSgpLGtlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxJMz0iYnJvd3NlciI7ZnVuY3Rpb24gcFQobil7cmV0dXJuIG49PT1JM31uZXcgS2woIjE0LjIuMTEiKTt2YXIgUGY9Y2xhc3N7fTtmdW5jdGlvbiBLQ2Uobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiLyIpP24uc2xpY2UoMSk6bn1uZXcgc2UoIlBSRUNPTk5FQ1RfQ0hFQ0tfQkxPQ0tMSVNUIik7dmFyIFpDZT1uPT5uLnNyYyxKQ2U9bmV3IHNlKCJJbWFnZUxvYWRlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PlpDZX0pO2Z1bmN0aW9uIGhUKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGkscj17ZW5zdXJlUHJlY29ubmVjdDohMH0pe3JldHVybiBmdW5jdGlvbihuKXtpZigic3RyaW5nIiE9dHlwZW9mIG58fCIiPT09bi50cmltKCkpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgVVJMKG4pLCEwfWNhdGNoe3JldHVybiExfX0oaSl8fGZ1bmN0aW9uKG4sdCl7dGhyb3cgbmV3IE10KDI5NTksITEpfSgpLGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uZW5kc1dpdGgoIi8iKT9uLnNsaWNlKDAsLTEpOm59KGkpLFt7cHJvdmlkZTpKQ2UsdXNlVmFsdWU6YT0+KGZ1bmN0aW9uKG4pe3JldHVybi9eaHR0cHM/OlwvXC8vLnRlc3Qobil9KGEuc3JjKSYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoMjk1OSwhMSl9KCksbihpLHsuLi5hLHNyYzpLQ2UoYS5zcmMpfSkpfV19fWhUKGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZvcm1hdD1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd2lkdGg9JHt0LndpZHRofWApLGAke259L2Nkbi1jZ2kvaW1hZ2UvJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPSJmX2F1dG8scV9hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd18ke3Qud2lkdGh9YCksYCR7bn0vaW1hZ2UvdXBsb2FkLyR7ZX0vJHt0LnNyY31gfSksaFQoZnVuY3Rpb24obix0KXtsZXQgZT0idHI6cS1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsdy0ke3Qud2lkdGh9YCksYCR7bn0vJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBVUkwoYCR7bn0vJHt0LnNyY31gKTtyZXR1cm4gZS5zZWFyY2hQYXJhbXMuc2V0KCJhdXRvIiwiZm9ybWF0IiksdC53aWR0aCYmZS5zZWFyY2hQYXJhbXMuc2V0KCJ3Iix0LndpZHRoLnRvU3RyaW5nKCkpLGUuaHJlZn0pO3ZhciBmVCxSMz1jbGFzcyBleHRlbmRzIHNUe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX0sR3g9Y2xhc3MgZXh0ZW5kcyBSM3tzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24obil7dzN8fCh3Mz1uKX0obmV3IEd4KX1vbkFuZENhbmNlbCh0LGUsaSl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLGksITEpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSwhMSl9fWRpc3BhdGNoRXZlbnQodCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9cmVtb3ZlKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldCh0LGUpe3JldHVybiJ3aW5kb3ciPT09ZT93aW5kb3c6ImRvY3VtZW50Ij09PWU/dDoiYm9keSI9PT1lP3QuYm9keTpudWxsfWdldEJhc2VIcmVmKHQpe2xldCBlPShVeD1VeHx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpKT9VeC5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1lP251bGw6ZnVuY3Rpb24obil7KGZUPWZUfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLnNldEF0dHJpYnV0ZSgiaHJlZiIsbik7bGV0IHQ9ZlQucGF0aG5hbWU7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCk/dDpgLyR7dH1gfShlKX1yZXNldEJhc2VFbGVtZW50KCl7VXg9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKHQpe3JldHVybiB1VChkb2N1bWVudC5jb29raWUsdCl9fSxVeD1udWxsLFdZPW5ldyBzZSgiVFJBTlNJVElPTl9JRCIpLGN3ZT1be3Byb3ZpZGU6dk4sdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuKCk9PntlLmdldChaRSkuZG9uZVByb21pc2UudGhlbigoKT0+e2xldCBpPWdsKCkscj10LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlW25nLXRyYW5zaXRpb249IiR7bn0iXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKWkucmVtb3ZlKHJbb10pfSl9fSxkZXBzOltXWSxCdCx6bl0sbXVsdGk6ITB9XSx1d2U9KCgpPT57Y2xhc3MgbntidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG1UPW5ldyBzZSgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLGdUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl96b25lPWksdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxlLmZvckVhY2gocj0+ci5tYW5hZ2VyPXRoaXMpLHRoaXMuX3BsdWdpbnM9ZS5zbGljZSgpLnJldmVyc2UoKX1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRFdmVudExpc3RlbmVyKGUsaSxyKX1hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQbHVnaW5Gb3IoZSl7bGV0IGk9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KGUpO2lmKGkpcmV0dXJuIGk7bGV0IHI9dGhpcy5fcGx1Z2lucztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXTtpZihzLnN1cHBvcnRzKGUpKXJldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQoZSxzKSxzfXRocm93IG5ldyBFcnJvcihgTm8gZXZlbnQgbWFuYWdlciBwbHVnaW4gZm91bmQgZm9yIGV2ZW50ICR7ZX1gKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihtVCksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9UPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fWFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLGkpe2xldCByPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7cn0gZm9yIGV2ZW50ICR7ZX1gKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxpKX19LHFZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9zdHlsZXNTZXQ9bmV3IFNldH1hZGRTdHlsZXMoZSl7bGV0IGk9bmV3IFNldDtlLmZvckVhY2gocj0+e3RoaXMuX3N0eWxlc1NldC5oYXMocil8fCh0aGlzLl9zdHlsZXNTZXQuYWRkKHIpLGkuYWRkKHIpKX0pLHRoaXMub25TdHlsZXNBZGRlZChpKX1vblN0eWxlc0FkZGVkKGUpe31nZXRBbGxTdHlsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zdHlsZXNTZXQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx6eD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcVl7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZSx0aGlzLl9ob3N0Tm9kZXM9bmV3IE1hcCx0aGlzLl9ob3N0Tm9kZXMuc2V0KGUuaGVhZCxbXSl9X2FkZFN0eWxlc1RvSG9zdChlLGkscil7ZS5mb3JFYWNoKG89PntsZXQgcz10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtzLnRleHRDb250ZW50PW8sci5wdXNoKGkuYXBwZW5kQ2hpbGQocykpfSl9YWRkSG9zdChlKXtsZXQgaT1bXTt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LGUsaSksdGhpcy5faG9zdE5vZGVzLnNldChlLGkpfXJlbW92ZUhvc3QoZSl7bGV0IGk9dGhpcy5faG9zdE5vZGVzLmdldChlKTtpJiZpLmZvckVhY2goVlkpLHRoaXMuX2hvc3ROb2Rlcy5kZWxldGUoZSl9b25TdHlsZXNBZGRlZChlKXt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaCgoaSxyKT0+e3RoaXMuX2FkZFN0eWxlc1RvSG9zdChlLHIsaSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGU9PmUuZm9yRWFjaChWWSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gVlkobil7Z2woKS5yZW1vdmUobil9dmFyIFAzPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LE4zPS8lQ09NUCUvZztmdW5jdGlvbiB2VChuLHQsZSl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT92VChuLHIsZSk6KHI9ci5yZXBsYWNlKE4zLG4pLGUucHVzaChyKSl9cmV0dXJuIGV9ZnVuY3Rpb24gVVkobil7cmV0dXJuIHQ9PntpZigiX19uZ1Vud3JhcF9fIj09PXQpcmV0dXJuIG47ITE9PT1uKHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITEpfX12YXIgang9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5ldmVudE1hbmFnZXI9ZSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9aSx0aGlzLmFwcElkPXIsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IFd4KGUpfWNyZWF0ZVJlbmRlcmVyKGUsaSl7aWYoIWV8fCFpKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goaS5lbmNhcHN1bGF0aW9uKXtjYXNlIHdhLkVtdWxhdGVkOntsZXQgcj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGkuaWQpO3JldHVybiByfHwocj1uZXcgazModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGksdGhpcy5hcHBJZCksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChpLmlkLHIpKSxyLmFwcGx5VG9Ib3N0KGUpLHJ9Y2FzZSAxOmNhc2Ugd2EuU2hhZG93RG9tOnJldHVybiBuZXcgRjModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUsaSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhpLmlkKSl7bGV0IHI9dlQoaS5pZCxpLnN0eWxlcyxbXSk7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyhyKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGkuaWQsdGhpcy5kZWZhdWx0UmVuZGVyZXIpfXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcn19YmVnaW4oKXt9ZW5kKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGdUKSxSKHp4KSxSKHJmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksV3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRlc3Ryb3lOb2RlPW51bGx9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFAzW2VdfHxlLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1hcHBlbmRDaGlsZCh0LGUpeyhqWSh0KT90LmNvbnRlbnQ6dCkuYXBwZW5kQ2hpbGQoZSl9aW5zZXJ0QmVmb3JlKHQsZSxpKXt0JiYoalkodCk/dC5jb250ZW50OnQpLmluc2VydEJlZm9yZShlLGkpfXJlbW92ZUNoaWxkKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCBpPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0b3IgIiR7dH0iIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzYCk7cmV0dXJuIGV8fChpLnRleHRDb250ZW50PSIiKSxpfXBhcmVudE5vZGUodCl7cmV0dXJuIHQucGFyZW50Tm9kZX1uZXh0U2libGluZyh0KXtyZXR1cm4gdC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUodCxlLGkscil7aWYocil7ZT1yKyI6IitlO2xldCBvPVAzW3JdO28/dC5zZXRBdHRyaWJ1dGVOUyhvLGUsaSk6dC5zZXRBdHRyaWJ1dGUoZSxpKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsaSl9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXtpZihpKXtsZXQgcj1QM1tpXTtyP3QucmVtb3ZlQXR0cmlidXRlTlMocixlKTp0LnJlbW92ZUF0dHJpYnV0ZShgJHtpfToke2V9YCl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX1hZGRDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX1yZW1vdmVDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX1zZXRTdHlsZSh0LGUsaSxyKXtyJihhbC5EYXNoQ2FzZXxhbC5JbXBvcnRhbnQpP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxpLHImYWwuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPWl9cmVtb3ZlU3R5bGUodCxlLGkpe2kmYWwuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifXNldFByb3BlcnR5KHQsZSxpKXt0W2VdPWl9c2V0VmFsdWUodCxlKXt0Lm5vZGVWYWx1ZT1lfWxpc3Rlbih0LGUsaSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLFVZKGkpKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxVWShpKSl9fTtmdW5jdGlvbiBqWShuKXtyZXR1cm4iVEVNUExBVEUiPT09bi50YWdOYW1lJiZ2b2lkIDAhPT1uLmNvbnRlbnR9IkAiLmNoYXJDb2RlQXQoMCk7dmFyIGszPWNsYXNzIGV4dGVuZHMgV3h7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCksdGhpcy5jb21wb25lbnQ9aTtsZXQgbz12VChyKyItIitpLmlkLGkuc3R5bGVzLFtdKTtlLmFkZFN0eWxlcyhvKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uKG4pe3JldHVybiJfbmdjb250ZW50LSVDT01QJSIucmVwbGFjZShOMyxuKX0ocisiLSIraS5pZCksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbihuKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UoTjMsbil9KHIrIi0iK2kuaWQpfWFwcGx5VG9Ib3N0KHQpe3N1cGVyLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtsZXQgaT1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9fSxGMz1jbGFzcyBleHRlbmRzIFd4e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9zdEVsPWksdGhpcy5zaGFkb3dSb290PWkuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IG89dlQoci5pZCxyLnN0eWxlcyxbXSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50ZXh0Q29udGVudD1vW3NdLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChhKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSkpfX0sZ3dlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBfVHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1zdXBwb3J0cyhlKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKGksciwhMSksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR1k9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sX3dlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSx2d2U9e2FsdDpuPT5uLmFsdEtleSxjb250cm9sOm49Pm4uY3RybEtleSxtZXRhOm49Pm4ubWV0YUtleSxzaGlmdDpuPT5uLnNoaWZ0S2V5fSx5d2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIF9Ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiBudWxsIT1uLnBhcnNlRXZlbnROYW1lKGUpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe2xldCBvPW4ucGFyc2VFdmVudE5hbWUoaSkscz1uLmV2ZW50Q2FsbGJhY2soby5mdWxsS2V5LHIsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmdsKCkub25BbmRDYW5jZWwoZSxvLmRvbUV2ZW50TmFtZSxzKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGUpe2xldCBpPWUudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9aS5zaGlmdCgpO2lmKDA9PT1pLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7bGV0IG89bi5fbm9ybWFsaXplS2V5KGkucG9wKCkpLHM9IiIsYT1pLmluZGV4T2YoImNvZGUiKTtpZihhPi0xJiYoaS5zcGxpY2UoYSwxKSxzPSJjb2RlLiIpLEdZLmZvckVhY2goYz0+e2xldCB1PWkuaW5kZXhPZihjKTt1Pi0xJiYoaS5zcGxpY2UodSwxKSxzKz1jKyIuIil9KSxzKz1vLDAhPWkubGVuZ3RofHwwPT09by5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGw9e307cmV0dXJuIGwuZG9tRXZlbnROYW1lPXIsbC5mdWxsS2V5PXMsbH1zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGUsaSl7bGV0IHI9X3dlW2Uua2V5XXx8ZS5rZXksbz0iIjtyZXR1cm4gaS5pbmRleE9mKCJjb2RlLiIpPi0xJiYocj1lLmNvZGUsbz0iY29kZS4iKSwhKG51bGw9PXJ8fCFyKSYmKHI9ci50b0xvd2VyQ2FzZSgpLCIgIj09PXI/cj0ic3BhY2UiOiIuIj09PXImJihyPSJkb3QiKSxHWS5mb3JFYWNoKHM9PntzIT09ciYmKDAsdndlW3NdKShlKSYmKG8rPXMrIi4iKX0pLG8rPXIsbz09PWkpfXN0YXRpYyBldmVudENhbGxiYWNrKGUsaSxyKXtyZXR1cm4gbz0+e24ubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKG8sZSkmJnIucnVuR3VhcmRlZCgoKT0+aShvKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGUpe3JldHVybiJlc2MiPT09ZT8iZXNjYXBlIjplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd3dlPVt7cHJvdmlkZTppZCx1c2VWYWx1ZTpJM30se3Byb3ZpZGU6eU4sdXNlVmFsdWU6ZnVuY3Rpb24oKXtHeC5tYWtlQ3VycmVudCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6QnQsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtQaz1ufShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxCMz13TihXNywiYnJvd3NlciIsd3dlKSxYWT1uZXcgc2UoIiIpLE13ZT1be3Byb3ZpZGU6TGIsdXNlQ2xhc3M6Y2xhc3N7YWRkVG9XaW5kb3codCl7V3IuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PShpLHI9ITApPT57bGV0IG89dC5maW5kVGVzdGFiaWxpdHlJblRyZWUoaSxyKTtpZihudWxsPT1vKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuIik7cmV0dXJuIG99LFdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT50LmdldEFsbFRlc3RhYmlsaXRpZXMoKSxXci5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT50LmdldEFsbFJvb3RFbGVtZW50cygpLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoV3IuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goaT0+e2xldCByPVdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbz1yLmxlbmd0aCxzPSExLGE9ZnVuY3Rpb24obCl7cz1zfHxsLG8tLSwwPT1vJiZpKHMpfTtyLmZvckVhY2goZnVuY3Rpb24obCl7bC53aGVuU3RhYmxlKGEpfSl9KX1maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLGkpe3JldHVybiBudWxsPT1lP251bGw6dC5nZXRUZXN0YWJpbGl0eShlKT8/KGk/Z2woKS5pc1NoYWRvd1Jvb3QoZSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5wYXJlbnRFbGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnhOLHVzZUNsYXNzOkpFLGRlcHM6W3B0LCRFLExiXX0se3Byb3ZpZGU6SkUsdXNlQ2xhc3M6SkUsZGVwczpbcHQsJEUsTGJdfV0sU3dlPVt7cHJvdmlkZTprRSx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOlNzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNzfSxkZXBzOltdfSx7cHJvdmlkZTptVCx1c2VDbGFzczpnd2UsbXVsdGk6ITAsZGVwczpbQnQscHQsaWRdfSx7cHJvdmlkZTptVCx1c2VDbGFzczp5d2UsbXVsdGk6ITAsZGVwczpbQnRdfSx7cHJvdmlkZTpqeCx1c2VDbGFzczpqeCxkZXBzOltnVCx6eCxyZl19LHtwcm92aWRlOnFjLHVzZUV4aXN0aW5nOmp4fSx7cHJvdmlkZTpxWSx1c2VFeGlzdGluZzp6eH0se3Byb3ZpZGU6engsdXNlQ2xhc3M6engsZGVwczpbQnRdfSx7cHJvdmlkZTpnVCx1c2VDbGFzczpnVCxkZXBzOlttVCxwdF19LHtwcm92aWRlOlBmLHVzZUNsYXNzOnV3ZSxkZXBzOltdfSxbXV0seVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6cmYsdXNlVmFsdWU6ZS5hcHBJZH0se3Byb3ZpZGU6V1ksdXNlRXhpc3Rpbmc6cmZ9LGN3ZV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFhZLDEyKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbLi4uU3dlLC4uLk13ZV0saW1wb3J0czpba2UscTddfSksbn0pKCksUmY9KG5ldyBzZSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLG5ldyBzZSgiSGFtbWVyTG9hZGVyIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcoZXx8bik6UihRWSksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSksUVk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJme2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWV9c2FuaXRpemUoZSxpKXtpZihudWxsPT1pKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIEpyLk5PTkU6cmV0dXJuIGk7Y2FzZSBKci5IVE1MOnJldHVybiBabChpLCJIVE1MIik/JHMoaSk6WUYodGhpcy5fZG9jLFN0cmluZyhpKSkudG9TdHJpbmcoKTtjYXNlIEpyLlNUWUxFOnJldHVybiBabChpLCJTdHlsZSIpPyRzKGkpOmk7Y2FzZSBKci5TQ1JJUFQ6aWYoWmwoaSwiU2NyaXB0IikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2UgSnIuVVJMOnJldHVybiBabChpLCJVUkwiKT8kcyhpKTpFYihTdHJpbmcoaSkpO2Nhc2UgSnIuUkVTT1VSQ0VfVVJMOmlmKFpsKGksIlJlc291cmNlVVJMIikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7ZX0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWApfX1ieXBhc3NTZWN1cml0eVRydXN0SHRtbChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBSayhuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IE9rKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0KGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGtrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0VXJsKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEZrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgTmsobil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcgZTpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFFZKG4uZ2V0KEJ0KSl9KFIoem4pKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHF4PShuZXcgS2woIjE0LjIuMTEiKSxkOChaWSgpLDEpLGNsYXNze30pLGJUPWNsYXNze30sdXU9IioiO2Z1bmN0aW9uIEhyKG4sdCl7cmV0dXJue3R5cGU6NyxuYW1lOm4sZGVmaW5pdGlvbnM6dCxvcHRpb25zOnt9fX1mdW5jdGlvbiBWaShuLHQ9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6dCx0aW1pbmdzOm59fWZ1bmN0aW9uIEgzKG4sdD1udWxsKXtyZXR1cm57dHlwZTozLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiB4VChuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gcm4obil7cmV0dXJue3R5cGU6NixzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gRWkobix0LGUpe3JldHVybnt0eXBlOjAsbmFtZTpuLHN0eWxlczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gT2Yobil7cmV0dXJue3R5cGU6NSxzdGVwczpufX1mdW5jdGlvbiBJaShuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGtmKG49bnVsbCl7cmV0dXJue3R5cGU6OSxvcHRpb25zOm59fWZ1bmN0aW9uIEZmKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjExLHNlbGVjdG9yOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiBKWShuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4pfXZhciBTcD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7SlkoKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/dCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LFl4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7bGV0IGU9MCxpPTAscj0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP0pZKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaChzPT57cy5vbkRvbmUoKCk9PnsrK2U9PW8mJnRoaXMuX29uRmluaXNoKCl9KSxzLm9uRGVzdHJveSgoKT0+eysraT09byYmdGhpcy5fb25EZXN0cm95KCl9KSxzLm9uU3RhcnQoKCk9PnsrK3I9PW8mJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgocyxhKT0+TWF0aC5tYXgocyxhLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuaW5pdCgpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe2xldCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goaT0+e2xldCByPWkudG90YWxUaW1lP01hdGgubWluKDEsZS9pLnRvdGFsVGltZSk6MTtpLnNldFBvc2l0aW9uKHIpfSl9Z2V0UG9zaXRpb24oKXtsZXQgdD10aGlzLnBsYXllcnMucmVkdWNlKChlLGkpPT5udWxsPT09ZXx8aS50b3RhbFRpbWU+ZS50b3RhbFRpbWU/aTplLG51bGwpO3JldHVybiBudWxsIT10P3QuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fTtmdW5jdGlvbiAkWShuKXtyZXR1cm4gbmV3IE10KDNlMywhMSl9ZnVuY3Rpb24gYUIoKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpfWZ1bmN0aW9uIEVwKG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgU3A7Y2FzZSAxOnJldHVybiBuWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBZeChuKX19ZnVuY3Rpb24gZlgobix0LGUsaSxyPW5ldyBNYXAsbz1uZXcgTWFwKXtsZXQgcz1bXSxhPVtdLGw9LTEsYz1udWxsO2lmKGkuZm9yRWFjaCh1PT57bGV0IGQ9dS5nZXQoIm9mZnNldCIpLHA9ZD09bCxoPXAmJmN8fG5ldyBNYXA7dS5mb3JFYWNoKChmLG0pPT57bGV0IEM9bSxfPWY7aWYoIm9mZnNldCIhPT1tKXN3aXRjaChDPXQubm9ybWFsaXplUHJvcGVydHlOYW1lKEMscyksXyl7Y2FzZSIhIjpfPXIuZ2V0KG0pO2JyZWFrO2Nhc2UgdXU6Xz1vLmdldChtKTticmVhaztkZWZhdWx0Ol89dC5ub3JtYWxpemVTdHlsZVZhbHVlKG0sQyxfLHMpfWguc2V0KEMsXyl9KSxwfHxhLnB1c2goaCksYz1oLGw9ZH0pLHMubGVuZ3RoKXRocm93IG5ldyBNdCgzNTAyLCExKTtyZXR1cm4gYX1mdW5jdGlvbiBsQihuLHQsZSxpKXtzd2l0Y2godCl7Y2FzZSJzdGFydCI6bi5vblN0YXJ0KCgpPT5pKGUmJlUzKGUsInN0YXJ0IixuKSkpO2JyZWFrO2Nhc2UiZG9uZSI6bi5vbkRvbmUoKCk9PmkoZSYmVTMoZSwiZG9uZSIsbikpKTticmVhaztjYXNlImRlc3Ryb3kiOm4ub25EZXN0cm95KCgpPT5pKGUmJlUzKGUsImRlc3Ryb3kiLG4pKSl9fWZ1bmN0aW9uIFUzKG4sdCxlKXtsZXQgbz1jQihuLmVsZW1lbnQsbi50cmlnZ2VyTmFtZSxuLmZyb21TdGF0ZSxuLnRvU3RhdGUsdHx8bi5waGFzZU5hbWUsZS50b3RhbFRpbWU/P24udG90YWxUaW1lLCEhZS5kaXNhYmxlZCkscz1uLl9kYXRhO3JldHVybiBudWxsIT1zJiYoby5fZGF0YT1zKSxvfWZ1bmN0aW9uIGNCKG4sdCxlLGkscj0iIixvPTAscyl7cmV0dXJue2VsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGZyb21TdGF0ZTplLHRvU3RhdGU6aSxwaGFzZU5hbWU6cix0b3RhbFRpbWU6byxkaXNhYmxlZDohIXN9fWZ1bmN0aW9uIEJhKG4sdCxlKXtsZXQgaT1uLmdldCh0KTtyZXR1cm4gaXx8bi5zZXQodCxpPWUpLGl9ZnVuY3Rpb24gZVgobil7bGV0IHQ9bi5pbmRleE9mKCI6Iik7cmV0dXJuW24uc3Vic3RyaW5nKDEsdCksbi5zbGljZSh0KzEpXX12YXIgWTM9KG4sdCk9PiExLG1YPShuLHQsZSk9PltdLGdYPW51bGw7ZnVuY3Rpb24gdUIobil7bGV0IHQ9bi5wYXJlbnROb2RlfHxuLmhvc3Q7cmV0dXJuIHQ9PT1nWD9udWxsOnR9KGFCKCl8fHR5cGVvZiBFbGVtZW50PCJ1IikmJih0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSI/KGdYPSgoKT0+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSgpLFkzPShuLHQpPT57Zm9yKDt0Oyl7aWYodD09PW4pcmV0dXJuITA7dD11Qih0KX1yZXR1cm4hMX0pOlkzPShuLHQpPT5uLmNvbnRhaW5zKHQpLG1YPShuLHQsZSk9PntpZihlKXJldHVybiBBcnJheS5mcm9tKG4ucXVlcnlTZWxlY3RvckFsbCh0KSk7bGV0IGk9bi5xdWVyeVNlbGVjdG9yKHQpO3JldHVybiBpP1tpXTpbXX0pO3ZhciBOZj1udWxsLHRYPSExO3ZhciBfWD1ZMyx2WD1tWCxkQj0oKCk9PntjbGFzcyBue3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShlKXtyZXR1cm4gZnVuY3Rpb24obil7TmZ8fChOZj0odHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSx0WD0hIU5mLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBOZi5zdHlsZSk7bGV0IHQ9ITA7cmV0dXJuIE5mLnN0eWxlJiYhZnVuY3Rpb24obil7cmV0dXJuImVia2l0Ij09bi5zdWJzdHJpbmcoMSw2KX0obikmJih0PW4gaW4gTmYuc3R5bGUsIXQmJnRYJiYodD0iV2Via2l0IituLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK24uc2xpY2UoMSlpbiBOZi5zdHlsZSkpLHR9KGUpfW1hdGNoZXNFbGVtZW50KGUsaSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGUsaSl7cmV0dXJuIF9YKGUsaSl9Z2V0UGFyZW50RWxlbWVudChlKXtyZXR1cm4gdUIoZSl9cXVlcnkoZSxpLHIpe3JldHVybiB2WChlLGkscil9Y29tcHV0ZVN0eWxlKGUsaSxyKXtyZXR1cm4gcnx8IiJ9YW5pbWF0ZShlLGkscixvLHMsYT1bXSxsKXtyZXR1cm4gbmV3IFNwKHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHRDPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5PT1A9bmV3IGRCLG59KSgpLGJYPSJuZy1lbnRlciIsWDM9Im5nLWxlYXZlIix3VD0ibmctdHJpZ2dlciIsVFQ9Ii5uZy10cmlnZ2VyIixuWD0ibmctYW5pbWF0aW5nIixRMz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gZmQobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO2xldCB0PW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIXR8fHQubGVuZ3RoPDI/MDpLMyhwYXJzZUZsb2F0KHRbMV0pLHRbMl0pfWZ1bmN0aW9uIEszKG4sdCl7cmV0dXJuInMiPT09dD8xZTMqbjpufWZ1bmN0aW9uIERUKG4sdCxlKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9uOmZ1bmN0aW9uKG4sdCxlKXtsZXQgcixvPTAscz0iIjtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBhPW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1hKXJldHVybiB0LnB1c2goJFkoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9SzMocGFyc2VGbG9hdChhWzFdKSxhWzJdKTtsZXQgbD1hWzNdO251bGwhPWwmJihvPUszKHBhcnNlRmxvYXQobCksYVs0XSkpO2xldCBjPWFbNV07YyYmKHM9Yyl9ZWxzZSByPW47aWYoIWUpe2xldCBhPSExLGw9dC5sZW5ndGg7cjwwJiYodC5wdXNoKG5ldyBNdCgzMTAwLCExKSksYT0hMCksbzwwJiYodC5wdXNoKG5ldyBNdCgzMTAxLCExKSksYT0hMCksYSYmdC5zcGxpY2UobCwwLCRZKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5Om8sZWFzaW5nOnN9fShuLHQsZSl9ZnVuY3Rpb24gbkMobix0PXt9KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dFtlXT1uW2VdfSksdH1mdW5jdGlvbiB4WChuKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0LnNldChlLG5bZV0pfSksdH1mdW5jdGlvbiBqMChuLHQ9bmV3IE1hcCxlKXtpZihlKWZvcihsZXRbaSxyXW9mIGUpdC5zZXQoaSxyKTtmb3IobGV0W2kscl1vZiBuKXQuc2V0KGkscik7cmV0dXJuIHR9ZnVuY3Rpb24gaVgobix0LGUpe3JldHVybiBlP3QrIjoiK2UrIjsiOiIifWZ1bmN0aW9uIENYKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5zdHlsZS5sZW5ndGg7ZSsrKXtsZXQgaT1uLnN0eWxlLml0ZW0oZSk7dCs9aVgoMCxpLG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpKSl9Zm9yKGxldCBlIGluIG4uc3R5bGUpbi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShlKSYmIWUuc3RhcnRzV2l0aCgiXyIpJiYodCs9aVgoMCxtTWUoZSksbi5zdHlsZVtlXSkpO24uc2V0QXR0cmlidXRlKCJzdHlsZSIsdCl9ZnVuY3Rpb24gZHUobix0LGUpe24uc3R5bGUmJih0LmZvckVhY2goKGkscik9PntsZXQgbz1wQihyKTtlJiYhZS5oYXMocikmJmUuc2V0KHIsbi5zdHlsZVtvXSksbi5zdHlsZVtvXT1pfSksYUIoKSYmQ1gobikpfWZ1bmN0aW9uIEJmKG4sdCl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoZSxpKT0+e2xldCByPXBCKGkpO24uc3R5bGVbcl09IiJ9KSxhQigpJiZDWChuKSl9ZnVuY3Rpb24gWHgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTp4VChuKTpufXZhciBaMz1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB3WChuKXtsZXQgdD1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBlO2Zvcig7ZT1aMy5leGVjKG4pOyl0LnB1c2goZVsxXSk7WjMubGFzdEluZGV4PTB9cmV0dXJuIHR9ZnVuY3Rpb24gS3gobix0LGUpe2xldCBpPW4udG9TdHJpbmcoKSxyPWkucmVwbGFjZShaMywobyxzKT0+e2xldCBhPXRbc107cmV0dXJuIG51bGw9PWEmJihlLnB1c2gobmV3IE10KDMwMDMsITEpKSxhPSIiKSxhLnRvU3RyaW5nKCl9KTtyZXR1cm4gcj09aT9uOnJ9ZnVuY3Rpb24gQVQobil7bGV0IHQ9W10sZT1uLm5leHQoKTtmb3IoOyFlLmRvbmU7KXQucHVzaChlLnZhbHVlKSxlPW4ubmV4dCgpO3JldHVybiB0fXZhciBmTWU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHBCKG4pe3JldHVybiBuLnJlcGxhY2UoZk1lLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBtTWUobil7cmV0dXJuIG4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIExhKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIDc6cmV0dXJuIG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSAwOnJldHVybiBuLnZpc2l0U3RhdGUodCxlKTtjYXNlIDE6cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKHQsZSk7Y2FzZSAyOnJldHVybiBuLnZpc2l0U2VxdWVuY2UodCxlKTtjYXNlIDM6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgNDpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIDU6cmV0dXJuIG4udmlzaXRLZXlmcmFtZXModCxlKTtjYXNlIDY6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgODpyZXR1cm4gbi52aXNpdFJlZmVyZW5jZSh0LGUpO2Nhc2UgOTpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZCh0LGUpO2Nhc2UgMTA6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSAxMTpyZXR1cm4gbi52aXNpdFF1ZXJ5KHQsZSk7Y2FzZSAxMjpyZXR1cm4gbi52aXNpdFN0YWdnZXIodCxlKTtkZWZhdWx0OnRocm93IG5ldyBNdCgzMDA0LCExKX19ZnVuY3Rpb24gTVgobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbdF19ZnVuY3Rpb24gYk1lKG4sdCl7bGV0IGU9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGk9PmZ1bmN0aW9uKG4sdCxlKXtpZigiOiI9PW5bMF0pe2xldCBsPWZ1bmN0aW9uKG4sdCl7c3dpdGNoKG4pe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKT5wYXJzZUZsb2F0KGUpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGUsaSk9PnBhcnNlRmxvYXQoaSk8cGFyc2VGbG9hdChlKTtkZWZhdWx0OnJldHVybiB0LnB1c2gobmV3IE10KDMwMTYsITEpKSwiKiA9PiAqIn19KG4sZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpcmV0dXJuIHZvaWQgdC5wdXNoKGwpO249bH1sZXQgaT1uLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1pfHxpLmxlbmd0aDw0KXJldHVybiBlLnB1c2gobmV3IE10KDMwMTUsITEpKSx0O2xldCByPWlbMV0sbz1pWzJdLHM9aVszXTt0LnB1c2goclgocixzKSksIjwiPT1vWzBdJiYhKCIqIj09ciYmIioiPT1zKSYmdC5wdXNoKHJYKHMscikpfShpLGUsdCkpOmUucHVzaChuKSxlfXZhciBNVD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksU1Q9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiByWChuLHQpe2xldCBlPU1ULmhhcyhuKXx8U1QuaGFzKG4pLGk9TVQuaGFzKHQpfHxTVC5oYXModCk7cmV0dXJuKHIsbyk9PntsZXQgcz0iKiI9PW58fG49PXIsYT0iKiI9PXR8fHQ9PW87cmV0dXJuIXMmJmUmJiJib29sZWFuIj09dHlwZW9mIHImJihzPXI/TVQuaGFzKG4pOlNULmhhcyhuKSksIWEmJmkmJiJib29sZWFuIj09dHlwZW9mIG8mJihhPW8/TVQuaGFzKHQpOlNULmhhcyh0KSkscyYmYX19dmFyIHdNZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBEWChuLHQsZSxpKXtyZXR1cm4gbmV3IEozKG4pLmJ1aWxkKHQsZSxpKX12YXIgSjM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZHJpdmVyPXR9YnVpbGQodCxlLGkpe2xldCByPW5ldyAkMyhlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShyKSxMYSh0aGlzLFh4KHQpLHIpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0LmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksdC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcih0LGUpe2xldCBpPWUucXVlcnlDb3VudD0wLHI9ZS5kZXBDb3VudD0wLG89W10scz1bXTtyZXR1cm4iQCI9PXQubmFtZS5jaGFyQXQoMCkmJmUuZXJyb3JzLnB1c2gobmV3IE10KDMwMDYsITEpKSx0LmRlZmluaXRpb25zLmZvckVhY2goYT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09YS50eXBlKXtsZXQgbD1hLGM9bC5uYW1lO2MudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2godT0+e2wubmFtZT11LG8ucHVzaCh0aGlzLnZpc2l0U3RhdGUobCxlKSl9KSxsLm5hbWU9Y31lbHNlIGlmKDE9PWEudHlwZSl7bGV0IGw9dGhpcy52aXNpdFRyYW5zaXRpb24oYSxlKTtpKz1sLnF1ZXJ5Q291bnQscis9bC5kZXBDb3VudCxzLnB1c2gobCl9ZWxzZSBlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA3LCExKSl9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOnMscXVlcnlDb3VudDppLGRlcENvdW50OnIsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7bGV0IGk9dGhpcy52aXNpdFN0eWxlKHQuc3R5bGVzLGUpLHI9dC5vcHRpb25zJiZ0Lm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGkuY29udGFpbnNEeW5hbWljU3R5bGVzKXtsZXQgbz1uZXcgU2V0LHM9cnx8e307aS5zdHlsZXMuZm9yRWFjaChhPT57YSBpbnN0YW5jZW9mIE1hcCYmYS5mb3JFYWNoKGw9Pnt3WChsKS5mb3JFYWNoKGM9PntzLmhhc093blByb3BlcnR5KGMpfHxvLmFkZChjKX0pfSl9KSxvLnNpemUmJihBVChvLnZhbHVlcygpKSxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA4LCExKSkpfXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6aSxvcHRpb25zOnI/e3BhcmFtczpyfTpudWxsfX12aXNpdFRyYW5zaXRpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7bGV0IGk9TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSk7cmV0dXJue3R5cGU6MSxtYXRjaGVyczpiTWUodC5leHByLGUuZXJyb3JzKSxhbmltYXRpb246aSxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZSh0LGUpe3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoaT0+TGEodGhpcyxpLGUpKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0R3JvdXAodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lLHI9MCxvPXQuc3RlcHMubWFwKHM9PntlLmN1cnJlbnRUaW1lPWk7bGV0IGE9TGEodGhpcyxzLGUpO3JldHVybiByPU1hdGgubWF4KHIsZS5jdXJyZW50VGltZSksYX0pO3JldHVybiBlLmN1cnJlbnRUaW1lPXIse3R5cGU6MyxzdGVwczpvLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlKHQsZSl7bGV0IGk9ZnVuY3Rpb24obix0KXtpZihuLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gejMoRFQobix0KS5kdXJhdGlvbiwwLCIiKTtsZXQgZT1uO2lmKGUuc3BsaXQoL1xzKy8pLnNvbWUobz0+InsiPT1vLmNoYXJBdCgwKSYmInsiPT1vLmNoYXJBdCgxKSkpe2xldCBvPXozKDAsMCwiIik7cmV0dXJuIG8uZHluYW1pYz0hMCxvLnN0clZhbHVlPWUsb31sZXQgcj1EVChlLHQpO3JldHVybiB6MyhyLmR1cmF0aW9uLHIuZGVsYXksci5lYXNpbmcpfSh0LnRpbWluZ3MsZS5lcnJvcnMpO2UuY3VycmVudEFuaW1hdGVUaW1pbmdzPWk7bGV0IHIsbz10LnN0eWxlcz90LnN0eWxlczpybih7fSk7aWYoNT09by50eXBlKXI9dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpO2Vsc2V7bGV0IHM9dC5zdHlsZXMsYT0hMTtpZighcyl7YT0hMDtsZXQgYz17fTtpLmVhc2luZyYmKGMuZWFzaW5nPWkuZWFzaW5nKSxzPXJuKGMpfWUuY3VycmVudFRpbWUrPWkuZHVyYXRpb24raS5kZWxheTtsZXQgbD10aGlzLnZpc2l0U3R5bGUocyxlKTtsLmlzRW1wdHlTdGVwPWEscj1sfXJldHVybiBlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczppLHN0eWxlOnIsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKHQsZSl7bGV0IGk9dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoaSxlKSxpfV9tYWtlU3R5bGVBc3QodCxlKXtsZXQgaT1bXSxyPUFycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzOlt0LnN0eWxlc107Zm9yKGxldCBhIG9mIHIpInN0cmluZyI9PXR5cGVvZiBhP2E9PT11dT9pLnB1c2goYSk6ZS5lcnJvcnMucHVzaChuZXcgTXQoMzAwMiwhMSkpOmkucHVzaCh4WChhKSk7bGV0IG89ITEscz1udWxsO3JldHVybiBpLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJihhLmhhcygiZWFzaW5nIikmJihzPWEuZ2V0KCJlYXNpbmciKSxhLmRlbGV0ZSgiZWFzaW5nIikpLCFvKSlmb3IobGV0IGwgb2YgYS52YWx1ZXMoKSlpZihsLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7bz0hMDticmVha319KSx7dHlwZTo2LHN0eWxlczppLGVhc2luZzpzLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6byxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtpJiZvPjAmJihvLT1pLmR1cmF0aW9uK2kuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2gocz0+eyJzdHJpbmciIT10eXBlb2YgcyYmcy5mb3JFYWNoKChhLGwpPT57bGV0IGM9ZS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHU9Yy5nZXQobCksZD0hMDt1JiYobyE9ciYmbz49dS5zdGFydFRpbWUmJnI8PXUuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTAsITEpKSxkPSExKSxvPXUuc3RhcnRUaW1lKSxkJiZjLnNldChsLHtzdGFydFRpbWU6byxlbmRUaW1lOnJ9KSxlLm9wdGlvbnMmJmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10LnBhcmFtc3x8e30scj13WChuKTtyLmxlbmd0aCYmci5mb3JFYWNoKG89PntpLmhhc093blByb3BlcnR5KG8pfHxlLnB1c2gobmV3IE10KDMwMDEsITEpKX0pfShhLGUub3B0aW9ucyxlLmVycm9ycyl9KX0pfXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTEsITEpKSxpO2xldCBvPTAscz1bXSxhPSExLGw9ITEsYz0wLHU9dC5zdGVwcy5tYXAoXz0+e2xldCB5PXRoaXMuX21ha2VTdHlsZUFzdChfLGUpLEk9bnVsbCE9eS5vZmZzZXQ/eS5vZmZzZXQ6ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBudWxsO2xldCB0PW51bGw7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2goZT0+e2lmKGUgaW5zdGFuY2VvZiBNYXAmJmUuaGFzKCJvZmZzZXQiKSl7bGV0IGk9ZTt0PXBhcnNlRmxvYXQoaS5nZXQoIm9mZnNldCIpKSxpLmRlbGV0ZSgib2Zmc2V0Iil9fSk7ZWxzZSBpZihuIGluc3RhbmNlb2YgTWFwJiZuLmhhcygib2Zmc2V0Iikpe2xldCBlPW47dD1wYXJzZUZsb2F0KGUuZ2V0KCJvZmZzZXQiKSksZS5kZWxldGUoIm9mZnNldCIpfXJldHVybiB0fSh5LnN0eWxlcyksQT0wO3JldHVybiBudWxsIT1JJiYobysrLEE9eS5vZmZzZXQ9SSksbD1sfHxBPDB8fEE+MSxhPWF8fEE8YyxjPUEscy5wdXNoKEEpLHl9KTtsJiZlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEyLCExKSksYSYmZS5lcnJvcnMucHVzaChuZXcgTXQoMzIwMCwhMSkpO2xldCBkPXQuc3RlcHMubGVuZ3RoLHA9MDtvPjAmJm88ZD9lLmVycm9ycy5wdXNoKG5ldyBNdCgzMjAyLCExKSk6MD09byYmKHA9MS8oZC0xKSk7bGV0IGg9ZC0xLGY9ZS5jdXJyZW50VGltZSxtPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLEM9bS5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKChfLHkpPT57bGV0IEk9cD4wP3k9PWg/MTpwKnk6c1t5XSxBPUkqQztlLmN1cnJlbnRUaW1lPWYrbS5kZWxheStBLG0uZHVyYXRpb249QSx0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KF8sZSksXy5vZmZzZXQ9SSxpLnN0eWxlcy5wdXNoKF8pfSksaX12aXNpdFJlZmVyZW5jZSh0LGUpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOkxhKHRoaXMsWHgodC5hbmltYXRpb24pLGUpLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpMZih0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYodCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLHI9dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O2xldFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PSEhbi5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoZT0+IjpzZWxmIj09ZSk7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSh3TWUsIiIpKSxuPW4ucmVwbGFjZSgvQFwqL2csVFQpLnJlcGxhY2UoL0BcdysvZyxlPT5UVCsiLSIrZS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLFEzKSxbbix0XX0odC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1pLmxlbmd0aD9pKyIgIitvOm8sQmEoZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtsZXQgYT1MYSh0aGlzLFh4KHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWkse3R5cGU6MTEsc2VsZWN0b3I6byxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjphLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEzLCExKSk7bGV0IGk9ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06RFQodC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSksdGltaW5nczppLG9wdGlvbnM6bnVsbH19fSwkMz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5kPW5ldyBTZXR9fTtmdW5jdGlvbiBMZihuKXtyZXR1cm4gbj8obj1uQyhuKSkucGFyYW1zJiYobi5wYXJhbXM9ZnVuY3Rpb24obil7cmV0dXJuIG4/bkMobik6bnVsbH0obi5wYXJhbXMpKTpuPXt9LG59ZnVuY3Rpb24gejMobix0LGUpe3JldHVybntkdXJhdGlvbjpuLGRlbGF5OnQsZWFzaW5nOmV9fWZ1bmN0aW9uIGhCKG4sdCxlLGkscixvLHM9bnVsbCxhPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6bixrZXlmcmFtZXM6dCxwcmVTdHlsZVByb3BzOmUscG9zdFN0eWxlUHJvcHM6aSxkdXJhdGlvbjpyLGRlbGF5Om8sdG90YWxUaW1lOnIrbyxlYXNpbmc6cyxzdWJUaW1lbGluZTphfX12YXIgWng9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQodCl7cmV0dXJuIHRoaXMuX21hcC5nZXQodCl8fFtdfWFwcGVuZCh0LGUpe2xldCBpPXRoaXMuX21hcC5nZXQodCk7aXx8dGhpcy5fbWFwLnNldCh0LGk9W10pLGkucHVzaCguLi5lKX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19LElNZT1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksUk1lPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBBWChuLHQsZSxpLHIsbz1uZXcgTWFwLHM9bmV3IE1hcCxhLGwsYz1bXSl7cmV0dXJuKG5ldyBlQikuYnVpbGRLZXlmcmFtZXMobix0LGUsaSxyLG8scyxhLGwsYyl9dmFyIGVCPWNsYXNze2J1aWxkS2V5ZnJhbWVzKHQsZSxpLHIsbyxzLGEsbCxjLHU9W10pe2M9Y3x8bmV3IFp4O2xldCBkPW5ldyBKeCh0LGUsYyxyLG8sdSxbXSk7ZC5vcHRpb25zPWw7bGV0IHA9bC5kZWxheT9mZChsLmRlbGF5KTowO2QuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAocCksZC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtzXSxudWxsLGQuZXJyb3JzLGwpLExhKHRoaXMsaSxkKTtsZXQgaD1kLnRpbWVsaW5lcy5maWx0ZXIoZj0+Zi5jb250YWluc0FuaW1hdGlvbigpKTtpZihoLmxlbmd0aCYmYS5zaXplKXtsZXQgZjtmb3IobGV0IG09aC5sZW5ndGgtMTttPj0wO20tLSl7bGV0IEM9aFttXTtpZihDLmVsZW1lbnQ9PT1lKXtmPUM7YnJlYWt9fWYmJiFmLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJmYuc2V0U3R5bGVzKFthXSxudWxsLGQuZXJyb3JzLGwpfXJldHVybiBoLmxlbmd0aD9oLm1hcChmPT5mLmJ1aWxkS2V5ZnJhbWVzKCkpOltoQihlLFtdLFtdLFtdLDAscCwiIiwhMSldfXZpc2l0VHJpZ2dlcih0LGUpe312aXNpdFN0YXRlKHQsZSl7fXZpc2l0VHJhbnNpdGlvbih0LGUpe312aXNpdEFuaW1hdGVDaGlsZCh0LGUpe2xldCBpPWUuc3ViSW5zdHJ1Y3Rpb25zLmdldChlLmVsZW1lbnQpO2lmKGkpe2xldCByPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscz10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhpLHIsci5vcHRpb25zKTtvIT1zJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShzKX1lLnByZXZpb3VzTm9kZT10fXZpc2l0QW5pbWF0ZVJlZih0LGUpe2xldCBpPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO2kudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW3Qub3B0aW9ucyx0LmFuaW1hdGlvbi5vcHRpb25zXSxlLGkpLHRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24saSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGUucHJldmlvdXNOb2RlPXR9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKHQsZSxpKXtmb3IobGV0IHIgb2YgdCl7bGV0IG89cj8uZGVsYXk7aWYobyl7bGV0IHM9Im51bWJlciI9PXR5cGVvZiBvP286ZmQoS3gobyxyPy5wYXJhbXM/P3t9LGUuZXJyb3JzKSk7aS5kZWxheU5leHRTdGVwKHMpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKHQsZSxpKXtsZXQgbz1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxzPW51bGwhPWkuZHVyYXRpb24/ZmQoaS5kdXJhdGlvbik6bnVsbCxhPW51bGwhPWkuZGVsYXk/ZmQoaS5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PXMmJnQuZm9yRWFjaChsPT57bGV0IGM9ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUobCxzLGEpO289TWF0aC5tYXgobyxjLmR1cmF0aW9uK2MuZGVsYXkpfSksb312aXNpdFJlZmVyZW5jZSh0LGUpe2UudXBkYXRlT3B0aW9ucyh0Lm9wdGlvbnMsITApLExhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH12aXNpdFNlcXVlbmNlKHQsZSl7bGV0IGk9ZS5zdWJDb250ZXh0Q291bnQscj1lLG89dC5vcHRpb25zO2lmKG8mJihvLnBhcmFtc3x8by5kZWxheSkmJihyPWUuY3JlYXRlU3ViQ29udGV4dChvKSxyLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPW8uZGVsYXkpKXs2PT1yLnByZXZpb3VzTm9kZS50eXBlJiYoci5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksci5wcmV2aW91c05vZGU9UFQpO2xldCBzPWZkKG8uZGVsYXkpO3IuZGVsYXlOZXh0U3RlcChzKX10LnN0ZXBzLmxlbmd0aCYmKHQuc3RlcHMuZm9yRWFjaChzPT5MYSh0aGlzLHMscikpLHIuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHIuc3ViQ29udGV4dENvdW50PmkmJnIudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRHcm91cCh0LGUpe2xldCBpPVtdLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9mZCh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKHM9PntsZXQgYT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtvJiZhLmRlbGF5TmV4dFN0ZXAobyksTGEodGhpcyxzLGEpLHI9TWF0aC5tYXgocixhLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksaS5wdXNoKGEuY3VycmVudFRpbWVsaW5lKX0pLGkuZm9yRWFjaChzPT5lLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFRpbWluZyh0LGUpe2lmKHQuZHluYW1pYyl7bGV0IGk9dC5zdHJWYWx1ZTtyZXR1cm4gRFQoZS5wYXJhbXM/S3goaSxlLnBhcmFtcyxlLmVycm9ycyk6aSxlLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOnQuZHVyYXRpb24sZGVsYXk6dC5kZWxheSxlYXNpbmc6dC5lYXNpbmd9fXZpc2l0QW5pbWF0ZSh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO2kuZGVsYXkmJihlLmluY3JlbWVudFRpbWUoaS5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7bGV0IG89dC5zdHlsZTs1PT1vLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpOihlLmluY3JlbWVudFRpbWUoaS5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKG8sZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZSxyPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFyJiZpLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSYmaS5mb3J3YXJkRnJhbWUoKTtsZXQgbz1yJiZyLmVhc2luZ3x8dC5lYXNpbmc7dC5pc0VtcHR5U3RlcD9pLmFwcGx5RW1wdHlTdGVwKG8pOmkuc2V0U3R5bGVzKHQuc3R5bGVzLG8sZS5lcnJvcnMsZS5vcHRpb25zKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixvPWkuZHVyYXRpb24sYT1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7YS5lYXNpbmc9aS5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChsPT57YS5mb3J3YXJkVGltZSgobC5vZmZzZXR8fDApKm8pLGEuc2V0U3R5bGVzKGwuc3R5bGVzLGwuZWFzaW5nLGUuZXJyb3JzLGUub3B0aW9ucyksYS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocitvKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxyPXQub3B0aW9uc3x8e30sbz1yLmRlbGF5P2ZkKHIuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1pJiZlLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9UFQpO2xldCBzPWksYT1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIXIub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9YS5sZW5ndGg7bGV0IGw9bnVsbDthLmZvckVhY2goKGMsdSk9PntlLmN1cnJlbnRRdWVyeUluZGV4PXU7bGV0IGQ9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxjKTtvJiZkLmRlbGF5TmV4dFN0ZXAobyksYz09PWUuZWxlbWVudCYmKGw9ZC5jdXJyZW50VGltZWxpbmUpLExhKHRoaXMsdC5hbmltYXRpb24sZCksZC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkscz1NYXRoLm1heChzLGQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocyksbCYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTdGFnZ2VyKHQsZSl7bGV0IGk9ZS5wYXJlbnRDb250ZXh0LHI9ZS5jdXJyZW50VGltZWxpbmUsbz10LnRpbWluZ3Mscz1NYXRoLmFicyhvLmR1cmF0aW9uKSxhPXMqKGUuY3VycmVudFF1ZXJ5VG90YWwtMSksbD1zKmUuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKG8uZHVyYXRpb248MD8icmV2ZXJzZSI6by5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6bD1hLWw7YnJlYWs7Y2FzZSJmdWxsIjpsPWkuY3VycmVudFN0YWdnZXJUaW1lfWxldCB1PWUuY3VycmVudFRpbWVsaW5lO2wmJnUuZGVsYXlOZXh0U3RlcChsKTtsZXQgZD11LmN1cnJlbnRUaW1lO0xhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxpLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLWQrKHIuc3RhcnRUaW1lLWkuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fSxQVD17fSxKeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWksdGhpcy5fZW50ZXJDbGFzc05hbWU9cix0aGlzLl9sZWF2ZUNsYXNzTmFtZT1vLHRoaXMuZXJyb3JzPXMsdGhpcy50aW1lbGluZXM9YSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVBULHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1sfHxuZXcgRzAodGhpcy5fZHJpdmVyLGUsMCksYS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyh0LGUpe2lmKCF0KXJldHVybjtsZXQgaT10LHI9dGhpcy5vcHRpb25zO251bGwhPWkuZHVyYXRpb24mJihyLmR1cmF0aW9uPWZkKGkuZHVyYXRpb24pKSxudWxsIT1pLmRlbGF5JiYoci5kZWxheT1mZChpLmRlbGF5KSk7bGV0IG89aS5wYXJhbXM7aWYobyl7bGV0IHM9ci5wYXJhbXM7c3x8KHM9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChhPT57KCFlfHwhcy5oYXNPd25Qcm9wZXJ0eShhKSkmJihzW2FdPUt4KG9bYV0scyx0aGlzLmVycm9ycykpfSl9fV9jb3B5T3B0aW9ucygpe2xldCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7bGV0IGU9dGhpcy5vcHRpb25zLnBhcmFtcztpZihlKXtsZXQgaT10LnBhcmFtcz17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntpW3JdPWVbcl19KX19cmV0dXJuIHR9Y3JlYXRlU3ViQ29udGV4dCh0PW51bGwsZSxpKXtsZXQgcj1lfHx0aGlzLmVsZW1lbnQsbz1uZXcgSngodGhpcy5fZHJpdmVyLHIsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhyLGl8fDApKTtyZXR1cm4gby5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsby5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3Msby5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksby51cGRhdGVPcHRpb25zKHQpLG8uY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxvLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsby5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxvfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9UFQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsZSxpKXtsZXQgcj17ZHVyYXRpb246ZT8/dC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoaT8/MCkrdC5kZWxheSxlYXNpbmc6IiJ9LG89bmV3IHRCKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChvKSxyfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLGkscixvLHMpe2xldCBhPVtdO2lmKHImJmEucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKElNZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKFJNZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBjPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsdCwxIT1pKTswIT09aSYmKGM9aTwwP2Muc2xpY2UoYy5sZW5ndGgraSxjLmxlbmd0aCk6Yy5zbGljZSgwLGkpKSxhLnB1c2goLi4uYyl9cmV0dXJuIW8mJjA9PWEubGVuZ3RoJiZzLnB1c2gobmV3IE10KDMwMTQsITEpKSxhfX0sRzA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9aSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9cix0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7bGV0IGU9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fWZvcmsodCxlKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgRzAodGhpcy5fZHJpdmVyLHQsZXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUodCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KHQse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKHQpe3QmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2ZvcihsZXRbZSxpXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChlLGl8fHV1KSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdXUpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKHQsZSxpLHIpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2xldCBvPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKG4sdCl7bGV0IGksZT1uZXcgTWFwO3JldHVybiBuLmZvckVhY2gocj0+e2lmKCIqIj09PXIpe2k9aXx8dC5rZXlzKCk7Zm9yKGxldCBvIG9mIGkpZS5zZXQobyx1dSl9ZWxzZSBqMChyLGUpfSksZX0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFthLGxdb2Ygcyl7bGV0IGM9S3gobCxvLGkpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGEsYyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoYSl8fHRoaXMuX2JhY2tGaWxsLnNldChhLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChhKT8/dXUpLHRoaXMuX3VwZGF0ZVN0eWxlKGEsYyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGUpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFt0LGVdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldCh0LGUpLHRoaXMuX3VwZGF0ZVN0eWxlKHQsZSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7bGV0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxpKT0+e2xldCByPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoaSk7KCFyfHxlLnRpbWU+ci50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoaSxlLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtsZXQgdD1uZXcgU2V0LGU9bmV3IFNldCxpPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24scj1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWowKGEsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7Yy5mb3JFYWNoKCh1LGQpPT57IiEiPT09dT90LmFkZChkKTp1PT09dXUmJmUuYWRkKGQpfSksaXx8Yy5zZXQoIm9mZnNldCIsbC90aGlzLmR1cmF0aW9uKSxyLnB1c2goYyl9KTtsZXQgbz10LnNpemU/QVQodC52YWx1ZXMoKSk6W10scz1lLnNpemU/QVQoZS52YWx1ZXMoKSk6W107aWYoaSl7bGV0IGE9clswXSxsPW5ldyBNYXAoYSk7YS5zZXQoIm9mZnNldCIsMCksbC5zZXQoIm9mZnNldCIsMSkscj1bYSxsXX1yZXR1cm4gaEIodGhpcy5lbGVtZW50LHIsbyxzLHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX0sdEI9Y2xhc3MgZXh0ZW5kcyBHMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhPSExKXtzdXBlcih0LGUscy5kZWxheSksdGhpcy5rZXlmcmFtZXM9aSx0aGlzLnByZVN0eWxlUHJvcHM9cix0aGlzLnBvc3RTdHlsZVByb3BzPW8sdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9YSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnMuZHVyYXRpb24sZGVsYXk6cy5kZWxheSxlYXNpbmc6cy5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246aSxlYXNpbmc6cn09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtsZXQgbz1bXSxzPWkrZSxhPWUvcyxsPWowKHRbMF0pO2wuc2V0KCJvZmZzZXQiLDApLG8ucHVzaChsKTtsZXQgYz1qMCh0WzBdKTtjLnNldCgib2Zmc2V0IixzWChhKSksby5wdXNoKGMpO2xldCB1PXQubGVuZ3RoLTE7Zm9yKGxldCBkPTE7ZDw9dTtkKyspe2xldCBwPWowKHRbZF0pLGg9cC5nZXQoIm9mZnNldCIpO3Auc2V0KCJvZmZzZXQiLHNYKChlK2gqaSkvcykpLG8ucHVzaChwKX1pPXMsZT0wLHI9IiIsdD1vfXJldHVybiBoQih0aGlzLmVsZW1lbnQsdCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxpLGUsciwhMCl9fTtmdW5jdGlvbiBzWChuLHQ9Myl7bGV0IGU9TWF0aC5wb3coMTAsdC0xKTtyZXR1cm4gTWF0aC5yb3VuZChuKmUpL2V9dmFyIFZmPWNsYXNze30sa01lPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKSxSVD1jbGFzcyBleHRlbmRzIFZme25vcm1hbGl6ZVByb3BlcnR5TmFtZSh0LGUpe3JldHVybiBwQih0KX1ub3JtYWxpemVTdHlsZVZhbHVlKHQsZSxpLHIpe2xldCBvPSIiLHM9aS50b1N0cmluZygpLnRyaW0oKTtpZihrTWUuaGFzKGUpJiYwIT09aSYmIjAiIT09aSlpZigibnVtYmVyIj09dHlwZW9mIGkpbz0icHgiO2Vsc2V7bGV0IGE9aS5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2gobmV3IE10KDMwMDUsITEpKX1yZXR1cm4gcytvfX07ZnVuY3Rpb24gYVgobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cmV0dXJue3R5cGU6MCxlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxpc1JlbW92YWxUcmFuc2l0aW9uOnIsZnJvbVN0YXRlOmUsZnJvbVN0eWxlczpvLHRvU3RhdGU6aSx0b1N0eWxlczpzLHRpbWVsaW5lczphLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6Yyxwb3N0U3R5bGVQcm9wczp1LHRvdGFsVGltZTpkLGVycm9yczpwfX12YXIgajM9e30sT1Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3RyaWdnZXJOYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9zdGF0ZVN0eWxlcz1pfW1hdGNoKHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuLnNvbWUobz0+byh0LGUsaSxyKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxpLHIpfWJ1aWxkU3R5bGVzKHQsZSxpKXtsZXQgcj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09dCYmKHI9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KHQ/LnRvU3RyaW5nKCkpfHxyKSxyP3IuYnVpbGRTdHlsZXMoZSxpKTpuZXcgTWFwfWJ1aWxkKHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVtdLHA9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fGozLGY9dGhpcy5idWlsZFN0eWxlcyhpLGEmJmEucGFyYW1zfHxqMyxkKSxtPWwmJmwucGFyYW1zfHxqMyxDPXRoaXMuYnVpbGRTdHlsZXMocixtLGQpLF89bmV3IFNldCx5PW5ldyBNYXAsST1uZXcgTWFwLEE9InZvaWQiPT09cixPPXtwYXJhbXM6Tk1lKG0scCksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LGVlPXU/W106QVgodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLHMsZixDLE8sYyxkKSxYPTA7aWYoZWUuZm9yRWFjaChmZT0+e1g9TWF0aC5tYXgoZmUuZHVyYXRpb24rZmUuZGVsYXksWCl9KSxkLmxlbmd0aClyZXR1cm4gYVgoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsQSxmLEMsW10sW10seSxJLFgsZCk7ZWUuZm9yRWFjaChmZT0+e2xldCB2ZT1mZS5lbGVtZW50LFQ9QmEoeSx2ZSxuZXcgU2V0KTtmZS5wcmVTdHlsZVByb3BzLmZvckVhY2gobGU9PlQuYWRkKGxlKSk7bGV0IG5lPUJhKEksdmUsbmV3IFNldCk7ZmUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChsZT0+bmUuYWRkKGxlKSksdmUhPT1lJiZfLmFkZCh2ZSl9KTtsZXQgeGU9QVQoXy52YWx1ZXMoKSk7cmV0dXJuIGFYKGUsdGhpcy5fdHJpZ2dlck5hbWUsaSxyLEEsZixDLGVlLHhlLHksSSxYKX19O2Z1bmN0aW9uIE5NZShuLHQpe2xldCBlPW5DKHQpO2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJm51bGwhPW5baV0mJihlW2ldPW5baV0pO3JldHVybiBlfWZ1bmN0aW9uIGxYKG4sdCxlKXtuLmhhcyh0KT9uLmhhcyhlKXx8bi5zZXQoZSxuLmdldCh0KSk6bi5oYXMoZSkmJm4uc2V0KHQsbi5nZXQoZSkpfXZhciBWTWU9bmV3IFp4LGNYPSJuZy1hbmltYXRlLXF1ZXVlZCIsRzM9Im5nLWFuaW1hdGUtZGlzYWJsZWQiLEdNZT1bXSxJWD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sV01lPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSx5bD0iX19uZ19yZW1vdmVkIiwkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtsZXQgaT10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIG4/P251bGx9KGk/dC52YWx1ZTp0KSxpKXtsZXQgbz1uQyh0KTtkZWxldGUgby52YWx1ZSx0aGlzLm9wdGlvbnM9b31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWFic29yYk9wdGlvbnModCl7bGV0IGU9dC5wYXJhbXM7aWYoZSl7bGV0IGk9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntudWxsPT1pW3JdJiYoaVtyXT1lW3JdKX0pfX19LFF4PSJ2b2lkIixXMz1uZXcgJHgoUXgpLGVDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1pLHRoaXMuX3BsYXllcj1uZXcgU3AsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcih0KXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9dCx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgoZSxpKT0+e2UuZm9yRWFjaChyPT5sQih0LGksdm9pZCAwLHIpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5jbGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKHQudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUodCl7dGhpcy50b3RhbFRpbWU9dH1zeW5jUGxheWVyRXZlbnRzKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KCgpPT5lLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksdC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLHQub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQodCxlKXtCYSh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX1vbkRvbmUodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9b25TdGFydCh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfW9uRGVzdHJveSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9fTtmdW5jdGlvbiBFVChuKXtyZXR1cm4gbiYmMT09PW4ubm9kZVR5cGV9ZnVuY3Rpb24gdVgobix0KXtsZXQgZT1uLnN0eWxlLmRpc3BsYXk7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT10Pz8ibm9uZSIsZX1mdW5jdGlvbiBkWChuLHQsZSxpLHIpe2xldCBvPVtdO2UuZm9yRWFjaChsPT5vLnB1c2godVgobCkpKTtsZXQgcz1bXTtpLmZvckVhY2goKGwsYyk9PntsZXQgdT1uZXcgTWFwO2wuZm9yRWFjaChkPT57bGV0IHA9dC5jb21wdXRlU3R5bGUoYyxkLHIpO3Uuc2V0KGQscCksKCFwfHwwPT1wLmxlbmd0aCkmJihjW3lsXT1XTWUscy5wdXNoKGMpKX0pLG4uc2V0KGMsdSl9KTtsZXQgYT0wO3JldHVybiBlLmZvckVhY2gobD0+dVgobCxvW2ErK10pKSxzfWZ1bmN0aW9uIHBYKG4sdCl7bGV0IGU9bmV3IE1hcDtpZihuLmZvckVhY2goYT0+ZS5zZXQoYSxbXSkpLDA9PXQubGVuZ3RoKXJldHVybiBlO2xldCByPW5ldyBTZXQodCksbz1uZXcgTWFwO2Z1bmN0aW9uIHMoYSl7aWYoIWEpcmV0dXJuIDE7bGV0IGw9by5nZXQoYSk7aWYobClyZXR1cm4gbDtsZXQgYz1hLnBhcmVudE5vZGU7cmV0dXJuIGw9ZS5oYXMoYyk/YzpyLmhhcyhjKT8xOnMoYyksby5zZXQoYSxsKSxsfXJldHVybiB0LmZvckVhY2goYT0+e2xldCBsPXMoYSk7MSE9PWwmJmUuZ2V0KGwpLnB1c2goYSl9KSxlfWZ1bmN0aW9uIGJsKG4sdCl7bi5jbGFzc0xpc3Q/LmFkZCh0KX1mdW5jdGlvbiB6MChuLHQpe24uY2xhc3NMaXN0Py5yZW1vdmUodCl9ZnVuY3Rpb24gUU1lKG4sdCxlKXtFcChlKS5vbkRvbmUoKCk9Pm4ucHJvY2Vzc0xlYXZlTm9kZSh0KSl9ZnVuY3Rpb24gUFgobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTtpIGluc3RhbmNlb2YgWXg/UFgoaS5wbGF5ZXJzLHQpOnQucHVzaChpKX19ZnVuY3Rpb24gaFgobix0LGUpe2xldCBpPWUuZ2V0KG4pO2lmKCFpKXJldHVybiExO2xldCByPXQuZ2V0KG4pO3JldHVybiByP2kuZm9yRWFjaChvPT5yLmFkZChvKSk6dC5zZXQobixpKSxlLmRlbGV0ZShuKSwhMH12YXIgVHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fX1fb25SZW1vdmFsQ29tcGxldGUodCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9Z2V0IHF1ZXVlZFBsYXllcnMoKXtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGU9PntlLnBsYXllcnMuZm9yRWFjaChpPT57aS5xdWV1ZWQmJnQucHVzaChpKX0pfSksdH1jcmVhdGVOYW1lc3BhY2UodCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsYmwoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4odCxlLGkscil7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhlKSl0aHJvdyBuZXcgTXQoMzMwMiwhMSk7aWYobnVsbD09aXx8MD09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDMzMDMsITEpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4ic3RhcnQiPT1ufHwiZG9uZSI9PW59KGkpKXRocm93IG5ldyBNdCgzNDAwLCExKTtsZXQgbz1CYSh0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTppLGNhbGxiYWNrOnJ9O28ucHVzaChzKTtsZXQgYT1CYSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQsbmV3IE1hcCk7cmV0dXJuIGEuaGFzKGUpfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksYS5zZXQoZSxXMykpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntsZXQgbD1vLmluZGV4T2Yocyk7bD49MCYmby5zcGxpY2UobCwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoZSl8fGEuZGVsZXRlKGUpfSl9fXJlZ2lzdGVyKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyh0KSYmKHRoaXMuX3RyaWdnZXJzLnNldCh0LGUpLCEwKX1fZ2V0VHJpZ2dlcih0KXtsZXQgZT10aGlzLl90cmlnZ2Vycy5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IE10KDM0MDEsITEpO3JldHVybiBlfXRyaWdnZXIodCxlLGkscj0hMCl7bGV0IG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxzPW5ldyBlQyh0aGlzLmlkLGUsdCksYT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTthfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxhPW5ldyBNYXApKTtsZXQgbD1hLmdldChlKSxjPW5ldyAkeChpLHRoaXMuaWQpO2lmKCEoaSYmaS5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJmwmJmMuYWJzb3JiT3B0aW9ucyhsLm9wdGlvbnMpLGEuc2V0KGUsYyksbHx8KGw9VzMpLGMudmFsdWUhPT1ReCYmbC52YWx1ZT09PWMudmFsdWUpe2lmKCFmdW5jdGlvbihuLHQpe2xldCBlPU9iamVjdC5rZXlzKG4pLGk9T2JqZWN0LmtleXModCk7aWYoZS5sZW5ndGghPWkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbz1lW3JdO2lmKCF0Lmhhc093blByb3BlcnR5KG8pfHxuW29dIT09dFtvXSlyZXR1cm4hMX1yZXR1cm4hMH0obC5wYXJhbXMsYy5wYXJhbXMpKXtsZXQgbT1bXSxDPW8ubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxtKSxfPW8ubWF0Y2hTdHlsZXMoYy52YWx1ZSxjLnBhcmFtcyxtKTttLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IobSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntCZih0LEMpLGR1KHQsXyl9KX1yZXR1cm59bGV0IHA9QmEodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsdCxbXSk7cC5mb3JFYWNoKG09PnttLm5hbWVzcGFjZUlkPT10aGlzLmlkJiZtLnRyaWdnZXJOYW1lPT1lJiZtLnF1ZXVlZCYmbS5kZXN0cm95KCl9KTtsZXQgaD1vLm1hdGNoVHJhbnNpdGlvbihsLnZhbHVlLGMudmFsdWUsdCxjLnBhcmFtcyksZj0hMTtpZighaCl7aWYoIXIpcmV0dXJuO2g9by5mYWxsYmFja1RyYW5zaXRpb24sZj0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246aCxmcm9tU3RhdGU6bCx0b1N0YXRlOmMscGxheWVyOnMsaXNGYWxsYmFja1RyYW5zaXRpb246Zn0pLGZ8fChibCh0LGNYKSxzLm9uU3RhcnQoKCk9Pnt6MCh0LGNYKX0pKSxzLm9uRG9uZSgoKT0+e2xldCBtPXRoaXMucGxheWVycy5pbmRleE9mKHMpO20+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobSwxKTtsZXQgQz10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoQyl7bGV0IF89Qy5pbmRleE9mKHMpO18+PTAmJkMuc3BsaWNlKF8sMSl9fSksdGhpcy5wbGF5ZXJzLnB1c2gocykscC5wdXNoKHMpLHN9ZGVyZWdpc3Rlcih0KXt0aGlzLl90cmlnZ2Vycy5kZWxldGUodCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGU9PmUuZGVsZXRlKHQpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGUsaSk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChpLGUuZmlsdGVyKHI9PnIubmFtZSE9dCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUodCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7bGV0IGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goaT0+aS5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZSh0KSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LFRULCEwKTtpLmZvckVhY2gocj0+e2lmKHJbeWxdKXJldHVybjtsZXQgbz10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHIpO28uc2l6ZT9vLmZvckVhY2gocz0+cy50cmlnZ2VyTGVhdmVBbmltYXRpb24ocixlLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmkuZm9yRWFjaChyPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHIpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSxpLHIpe2xldCBvPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpLHM9bmV3IE1hcDtpZihvKXtsZXQgYT1bXTtpZihvLmZvckVhY2goKGwsYyk9PntpZihzLnNldChjLGwudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhjKSl7bGV0IHU9dGhpcy50cmlnZ2VyKHQsYyxReCxyKTt1JiZhLnB1c2godSl9fSksYS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSxzKSxpJiZFcChhKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKHQpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCl7bGV0IGU9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQodCksaT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihlJiZpKXtsZXQgcj1uZXcgU2V0O2UuZm9yRWFjaChvPT57bGV0IHM9by5uYW1lO2lmKHIuaGFzKHMpKXJldHVybjtyLmFkZChzKTtsZXQgbD10aGlzLl90cmlnZ2Vycy5nZXQocykuZmFsbGJhY2tUcmFuc2l0aW9uLGM9aS5nZXQocyl8fFczLHU9bmV3ICR4KFF4KSxkPW5ldyBlQyh0aGlzLmlkLHMsdCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTpzLHRyYW5zaXRpb246bCxmcm9tU3RhdGU6Yyx0b1N0YXRlOnUscGxheWVyOmQsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSlyZXR1cm47bGV0IHI9ITE7aWYoaS50b3RhbEFuaW1hdGlvbnMpe2xldCBvPWkucGxheWVycy5sZW5ndGg/aS5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpcj0hMDtlbHNle2xldCBzPXQ7Zm9yKDtzPXMucGFyZW50Tm9kZTspaWYoaS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHMpKXtyPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCkscilpLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMSxlKTtlbHNle2xldCBvPXRbeWxdOyghb3x8bz09PUlYKSYmKGkuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZSh0KSksaS5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLGkuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX1pbnNlcnROb2RlKHQsZSl7YmwodCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKHQpe2xldCBlPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGk9PntsZXQgcj1pLnBsYXllcjtpZihyLmRlc3Ryb3llZClyZXR1cm47bGV0IG89aS5lbGVtZW50LHM9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7cyYmcy5mb3JFYWNoKGE9PntpZihhLm5hbWU9PWkudHJpZ2dlck5hbWUpe2xldCBsPWNCKG8saS50cmlnZ2VyTmFtZSxpLmZyb21TdGF0ZS52YWx1ZSxpLnRvU3RhdGUudmFsdWUpO2wuX2RhdGE9dCxsQihpLnBsYXllcixhLnBoYXNlLGwsYS5jYWxsYmFjayl9fSksci5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ci5kZXN0cm95KCl9KTplLnB1c2goaSl9KSx0aGlzLl9xdWV1ZT1bXSxlLnNvcnQoKGkscik9PntsZXQgbz1pLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LHM9ci50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09b3x8MD09cz9vLXM6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoaS5lbGVtZW50LHIuZWxlbWVudCk/MTotMX0pfWRlc3Ryb3kodCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9ZWxlbWVudENvbnRhaW5zRGF0YSh0KXtsZXQgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSxlPSEhdGhpcy5fcXVldWUuZmluZChpPT5pLmVsZW1lbnQ9PT10KXx8ZSxlfX0odCxlLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxlKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChpLGUpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoZSxpKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XT1pfV9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LGUpe2xldCBpPXRoaXMuX25hbWVzcGFjZUxpc3Qscj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGkubGVuZ3RoLTE+PTApe2xldCBzPSExLGE9dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChlKTtmb3IoO2E7KXtsZXQgbD1yLmdldChhKTtpZihsKXtsZXQgYz1pLmluZGV4T2YobCk7aS5zcGxpY2UoYysxLDAsdCkscz0hMDticmVha31hPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSl9c3x8aS51bnNoaWZ0KHQpfWVsc2UgaS5wdXNoKHQpO3JldHVybiByLnNldChlLHQpLHR9cmVnaXN0ZXIodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIGl8fChpPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLGl9cmVnaXN0ZXJUcmlnZ2VyKHQsZSxpKXtsZXQgcj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07ciYmci5yZWdpc3RlcihlLGkpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kodCxlKXtpZighdClyZXR1cm47bGV0IGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKCgpPT57dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoaS5ob3N0RWxlbWVudCksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtsZXQgcj10aGlzLl9uYW1lc3BhY2VMaXN0LmluZGV4T2YoaSk7cj49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UociwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmRlc3Ryb3koZSkpfV9mZXRjaE5hbWVzcGFjZSh0KXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KXtsZXQgZT1uZXcgU2V0LGk9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKGkpZm9yKGxldCByIG9mIGkudmFsdWVzKCkpaWYoci5uYW1lc3BhY2VJZCl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2Uoci5uYW1lc3BhY2VJZCk7byYmZS5hZGQobyl9cmV0dXJuIGV9dHJpZ2dlcih0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYobylyZXR1cm4gby50cmlnZ2VyKGUsaSxyKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKHQsZSxpLHIpe2lmKCFFVChlKSlyZXR1cm47bGV0IG89ZVt5bF07aWYobyYmby5zZXRGb3JSZW1vdmFsKXtvLnNldEZvclJlbW92YWw9ITEsby5zZXRGb3JNb3ZlPSEwO2xldCBzPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO3M+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UocywxKX1pZih0KXtsZXQgcz10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtzJiZzLmluc2VydE5vZGUoZSxpKX1yJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9Y29sbGVjdEVudGVyRWxlbWVudCh0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX1tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLGJsKHQsRzMpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZSh0KSx6MCh0LEczKSl9cmVtb3ZlTm9kZSh0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dD90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTpudWxsO2lmKG8/by5yZW1vdmVOb2RlKGUscik6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0LGUsITEsciksaSl7bGV0IHM9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoZSk7cyYmcy5pZCE9PXQmJnMucmVtb3ZlTm9kZShlLHIpfX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUscil9bWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLGkscixvKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChlKSxlW3lsXT17bmFtZXNwYWNlSWQ6dCxzZXRGb3JSZW1vdmFsOnIsaGFzQW5pbWF0aW9uOmkscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpvfX1saXN0ZW4odCxlLGkscixvKXtyZXR1cm4gRVQoZSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkubGlzdGVuKGUsaSxyLG8pOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbih0LGUsaSxyLG8pe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxpLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLG8pfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCl7bGV0IGU9dGhpcy5kcml2ZXIucXVlcnkodCxUVCwhMCk7ZS5mb3JFYWNoKGk9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGkpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUTMsITApLGUuZm9yRWFjaChpPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoaSkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goaT0+e2kucXVldWVkP2kubWFya2VkRm9yRGVzdHJveT0hMDppLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PmkuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntpZih0aGlzLnBsYXllcnMubGVuZ3RoKXJldHVybiBFcCh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+dCgpKTt0KCl9KX1wcm9jZXNzTGVhdmVOb2RlKHQpe2xldCBlPXRbeWxdO2lmKGUmJmUuc2V0Rm9yUmVtb3ZhbCl7aWYodFt5bF09SVgsZS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUubmFtZXNwYWNlSWQpO2kmJmkuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxlLnNldEZvclJlbW92YWwpfXQuY2xhc3NMaXN0Py5jb250YWlucyhHMykmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChpPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQoaSwhMSl9KX1mbHVzaCh0PS0xKXtsZXQgZT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoaSxyKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxyKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2krKylibCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbaV0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7bGV0IGk9W107dHJ5e2U9dGhpcy5fZmx1c2hBbmltYXRpb25zKGksdCl9ZmluYWxseXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdKCl9fWVsc2UgZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2krKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2ldKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChpPT5pKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2xldCBpPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sZS5sZW5ndGg/RXAoZSkub25Eb25lKCgpPT57aS5mb3JFYWNoKHI9PnIoKSl9KTppLmZvckVhY2gocj0+cigpKX19cmVwb3J0RXJyb3IodCl7dGhyb3cgbmV3IE10KDM0MDIsITEpfV9mbHVzaEFuaW1hdGlvbnModCxlKXtsZXQgaT1uZXcgWngscj1bXSxvPW5ldyBNYXAscz1bXSxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx1PW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goSj0+e3UuYWRkKEopO2xldCBhZT10aGlzLmRyaXZlci5xdWVyeShKLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0IG1lPTA7bWU8YWUubGVuZ3RoO21lKyspdS5hZGQoYWVbbWVdKX0pO2xldCBkPXRoaXMuYm9keU5vZGUscD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksaD1wWChwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksZj1uZXcgTWFwLG09MDtoLmZvckVhY2goKEosYWUpPT57bGV0IG1lPWJYK20rKztmLnNldChhZSxtZSksSi5mb3JFYWNoKGplPT5ibChqZSxtZSkpfSk7bGV0IEM9W10sXz1uZXcgU2V0LHk9bmV3IFNldDtmb3IobGV0IEo9MDtKPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7SisrKXtsZXQgYWU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0pdLG1lPWFlW3lsXTttZSYmbWUuc2V0Rm9yUmVtb3ZhbCYmKEMucHVzaChhZSksXy5hZGQoYWUpLG1lLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShhZSwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGplPT5fLmFkZChqZSkpOnkuYWRkKGFlKSl9bGV0IEk9bmV3IE1hcCxBPXBYKHAsQXJyYXkuZnJvbShfKSk7QS5mb3JFYWNoKChKLGFlKT0+e2xldCBtZT1YMyttKys7SS5zZXQoYWUsbWUpLEouZm9yRWFjaChqZT0+YmwoamUsbWUpKX0pLHQucHVzaCgoKT0+e2guZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9Zi5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEEuZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9SS5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEMuZm9yRWFjaChKPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEopfSl9KTtsZXQgTz1bXSxlZT1bXTtmb3IobGV0IEo9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtKPj0wO0otLSl0aGlzLl9uYW1lc3BhY2VMaXN0W0pdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChtZT0+e2xldCBqZT1tZS5wbGF5ZXIsTWU9bWUuZWxlbWVudDtpZihPLnB1c2goamUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2xldCBFdD1NZVt5bF07aWYoRXQmJkV0LnNldEZvck1vdmUpe2lmKEV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJkV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKG1lLnRyaWdnZXJOYW1lKSl7bGV0IG9uPUV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KG1lLnRyaWdnZXJOYW1lKSxDZT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobWUuZWxlbWVudCk7aWYoQ2UmJkNlLmhhcyhtZS50cmlnZ2VyTmFtZSkpe2xldCB2dD1DZS5nZXQobWUudHJpZ2dlck5hbWUpO3Z0LnZhbHVlPW9uLENlLnNldChtZS50cmlnZ2VyTmFtZSx2dCl9fXJldHVybiB2b2lkIGplLmRlc3Ryb3koKX19bGV0IEZlPSFkfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQsTWUpLHV0PUkuZ2V0KE1lKSxTdD1mLmdldChNZSksZ3Q9dGhpcy5fYnVpbGRJbnN0cnVjdGlvbihtZSxpLFN0LHV0LEZlKTtpZihndC5lcnJvcnMmJmd0LmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgZWUucHVzaChndCk7aWYoRmUpcmV0dXJuIGplLm9uU3RhcnQoKCk9PkJmKE1lLGd0LmZyb21TdHlsZXMpKSxqZS5vbkRlc3Ryb3koKCk9PmR1KE1lLGd0LnRvU3R5bGVzKSksdm9pZCByLnB1c2goamUpO2lmKG1lLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBqZS5vblN0YXJ0KCgpPT5CZihNZSxndC5mcm9tU3R5bGVzKSksamUub25EZXN0cm95KCgpPT5kdShNZSxndC50b1N0eWxlcykpLHZvaWQgci5wdXNoKGplKTtsZXQgUmU9W107Z3QudGltZWxpbmVzLmZvckVhY2goRXQ9PntFdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKEV0LmVsZW1lbnQpfHxSZS5wdXNoKEV0KX0pLGd0LnRpbWVsaW5lcz1SZSxpLmFwcGVuZChNZSxndC50aW1lbGluZXMpLHMucHVzaCh7aW5zdHJ1Y3Rpb246Z3QscGxheWVyOmplLGVsZW1lbnQ6TWV9KSxndC5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChFdD0+QmEoYSxFdCxbXSkucHVzaChqZSkpLGd0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoRXQsb24pPT57aWYoRXQuc2l6ZSl7bGV0IENlPWwuZ2V0KG9uKTtDZXx8bC5zZXQob24sQ2U9bmV3IFNldCksRXQuZm9yRWFjaCgodnQsX3QpPT5DZS5hZGQoX3QpKX19KSxndC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKChFdCxvbik9PntsZXQgQ2U9Yy5nZXQob24pO0NlfHxjLnNldChvbixDZT1uZXcgU2V0KSxFdC5mb3JFYWNoKCh2dCxfdCk9PkNlLmFkZChfdCkpfSl9KTtpZihlZS5sZW5ndGgpe2xldCBKPVtdO2VlLmZvckVhY2goYWU9PntKLnB1c2gobmV3IE10KDM1MDUsITEpKX0pLE8uZm9yRWFjaChhZT0+YWUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKEopfWxldCBYPW5ldyBNYXAseGU9bmV3IE1hcDtzLmZvckVhY2goSj0+e2xldCBhZT1KLmVsZW1lbnQ7aS5oYXMoYWUpJiYoeGUuc2V0KGFlLGFlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChKLnBsYXllci5uYW1lc3BhY2VJZCxKLmluc3RydWN0aW9uLFgpKX0pLHIuZm9yRWFjaChKPT57bGV0IGFlPUouZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYWUsITEsSi5uYW1lc3BhY2VJZCxKLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goamU9PntCYShYLGFlLFtdKS5wdXNoKGplKSxqZS5kZXN0cm95KCl9KX0pO2xldCBmZT1DLmZpbHRlcihKPT5oWChKLGwsYykpLHZlPW5ldyBNYXA7ZFgodmUsdGhpcy5kcml2ZXIseSxjLHV1KS5mb3JFYWNoKEo9PntoWChKLGwsYykmJmZlLnB1c2goSil9KTtsZXQgbmU9bmV3IE1hcDtoLmZvckVhY2goKEosYWUpPT57ZFgobmUsdGhpcy5kcml2ZXIsbmV3IFNldChKKSxsLCIhIil9KSxmZS5mb3JFYWNoKEo9PntsZXQgYWU9dmUuZ2V0KEopLG1lPW5lLmdldChKKTt2ZS5zZXQoSixuZXcgTWFwKFsuLi5BcnJheS5mcm9tKGFlPy5lbnRyaWVzKCk/P1tdKSwuLi5BcnJheS5mcm9tKG1lPy5lbnRyaWVzKCk/P1tdKV0pKX0pO2xldCBsZT1bXSxoZT1bXSx5ZT17fTtzLmZvckVhY2goSj0+e2xldHtlbGVtZW50OmFlLHBsYXllcjptZSxpbnN0cnVjdGlvbjpqZX09SjtpZihpLmhhcyhhZSkpe2lmKHUuaGFzKGFlKSlyZXR1cm4gbWUub25EZXN0cm95KCgpPT5kdShhZSxqZS50b1N0eWxlcykpLG1lLmRpc2FibGVkPSEwLG1lLm92ZXJyaWRlVG90YWxUaW1lKGplLnRvdGFsVGltZSksdm9pZCByLnB1c2gobWUpO2xldCBNZT15ZTtpZih4ZS5zaXplPjEpe2xldCB1dD1hZSxTdD1bXTtmb3IoO3V0PXV0LnBhcmVudE5vZGU7KXtsZXQgZ3Q9eGUuZ2V0KHV0KTtpZihndCl7TWU9Z3Q7YnJlYWt9U3QucHVzaCh1dCl9U3QuZm9yRWFjaChndD0+eGUuc2V0KGd0LE1lKSl9bGV0IEZlPXRoaXMuX2J1aWxkQW5pbWF0aW9uKG1lLm5hbWVzcGFjZUlkLGplLFgsbyxuZSx2ZSk7aWYobWUuc2V0UmVhbFBsYXllcihGZSksTWU9PT15ZSlsZS5wdXNoKG1lKTtlbHNle2xldCB1dD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KE1lKTt1dCYmdXQubGVuZ3RoJiYobWUucGFyZW50UGxheWVyPUVwKHV0KSksci5wdXNoKG1lKX19ZWxzZSBCZihhZSxqZS5mcm9tU3R5bGVzKSxtZS5vbkRlc3Ryb3koKCk9PmR1KGFlLGplLnRvU3R5bGVzKSksaGUucHVzaChtZSksdS5oYXMoYWUpJiZyLnB1c2gobWUpfSksaGUuZm9yRWFjaChKPT57bGV0IGFlPW8uZ2V0KEouZWxlbWVudCk7aWYoYWUmJmFlLmxlbmd0aCl7bGV0IG1lPUVwKGFlKTtKLnNldFJlYWxQbGF5ZXIobWUpfX0pLHIuZm9yRWFjaChKPT57Si5wYXJlbnRQbGF5ZXI/Si5zeW5jUGxheWVyRXZlbnRzKEoucGFyZW50UGxheWVyKTpKLmRlc3Ryb3koKX0pO2ZvcihsZXQgSj0wO0o8Qy5sZW5ndGg7SisrKXtsZXQgYWU9Q1tKXSxtZT1hZVt5bF07aWYoejAoYWUsWDMpLG1lJiZtZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGplPVtdO2lmKGEuc2l6ZSl7bGV0IEZlPWEuZ2V0KGFlKTtGZSYmRmUubGVuZ3RoJiZqZS5wdXNoKC4uLkZlKTtsZXQgdXQ9dGhpcy5kcml2ZXIucXVlcnkoYWUsUTMsITApO2ZvcihsZXQgU3Q9MDtTdDx1dC5sZW5ndGg7U3QrKyl7bGV0IGd0PWEuZ2V0KHV0W1N0XSk7Z3QmJmd0Lmxlbmd0aCYmamUucHVzaCguLi5ndCl9fWxldCBNZT1qZS5maWx0ZXIoRmU9PiFGZS5kZXN0cm95ZWQpO01lLmxlbmd0aD9RTWUodGhpcyxhZSxNZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGFlKX1yZXR1cm4gQy5sZW5ndGg9MCxsZS5mb3JFYWNoKEo9Pnt0aGlzLnBsYXllcnMucHVzaChKKSxKLm9uRG9uZSgoKT0+e0ouZGVzdHJveSgpO2xldCBhZT10aGlzLnBsYXllcnMuaW5kZXhPZihKKTt0aGlzLnBsYXllcnMuc3BsaWNlKGFlLDEpfSksSi5wbGF5KCl9KSxsZX1lbGVtZW50Q29udGFpbnNEYXRhKHQsZSl7bGV0IGk9ITEscj1lW3lsXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYoaT0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8aX1hZnRlckZsdXNoKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfV9nZXRQcmV2aW91c1BsYXllcnModCxlLGkscixvKXtsZXQgcz1bXTtpZihlKXtsZXQgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYocz1hKX1lbHNle2xldCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoYSl7bGV0IGw9IW98fG89PVF4O2EuZm9yRWFjaChjPT57Yy5xdWV1ZWR8fCFsJiZjLnRyaWdnZXJOYW1lIT1yfHxzLnB1c2goYyl9KX19cmV0dXJuKGl8fHIpJiYocz1zLmZpbHRlcihhPT4hKGkmJmkhPWEubmFtZXNwYWNlSWR8fHImJnIhPWEudHJpZ2dlck5hbWUpKSksc31fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLGkpe2xldCBvPWUuZWxlbWVudCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IobGV0IGwgb2YgZS50aW1lbGluZXMpe2xldCBjPWwuZWxlbWVudCx1PWMhPT1vLGQ9QmEoaSxjLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYyx1LHMsYSxlLnRvU3RhdGUpLmZvckVhY2goaD0+e2xldCBmPWguZ2V0UmVhbFBsYXllcigpO2YuYmVmb3JlRGVzdHJveSYmZi5iZWZvcmVEZXN0cm95KCksaC5kZXN0cm95KCksZC5wdXNoKGgpfSl9QmYobyxlLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbih0LGUsaSxyLG8scyl7bGV0IGE9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCxjPVtdLHU9bmV3IFNldCxkPW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAoZj0+e2xldCBtPWYuZWxlbWVudDt1LmFkZChtKTtsZXQgQz1tW3lsXTtpZihDJiZDLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgU3AoZi5kdXJhdGlvbixmLmRlbGF5KTtsZXQgXz1tIT09bCx5PWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBQWChuLHQpLHR9KChpLmdldChtKXx8R01lKS5tYXAoWD0+WC5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoWD0+ISFYLmVsZW1lbnQmJlguZWxlbWVudD09PW0pLEk9by5nZXQobSksQT1zLmdldChtKSxPPWZYKDAsdGhpcy5fbm9ybWFsaXplciwwLGYua2V5ZnJhbWVzLEksQSksZWU9dGhpcy5fYnVpbGRQbGF5ZXIoZixPLHkpO2lmKGYuc3ViVGltZWxpbmUmJnImJmQuYWRkKG0pLF8pe2xldCBYPW5ldyBlQyh0LGEsbSk7WC5zZXRSZWFsUGxheWVyKGVlKSxjLnB1c2goWCl9cmV0dXJuIGVlfSk7Yy5mb3JFYWNoKGY9PntCYSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGYuZWxlbWVudCxbXSkucHVzaChmKSxmLm9uRG9uZSgoKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZ2V0KHQpO2lmKGkpe2lmKGkubGVuZ3RoKXtsZXQgcj1pLmluZGV4T2YoZSk7aS5zcGxpY2UociwxKX0wPT1pLmxlbmd0aCYmbi5kZWxldGUodCl9cmV0dXJuIGl9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsZi5lbGVtZW50LGYpKX0pLHUuZm9yRWFjaChmPT5ibChmLG5YKSk7bGV0IGg9RXAocCk7cmV0dXJuIGgub25EZXN0cm95KCgpPT57dS5mb3JFYWNoKGY9PnowKGYsblgpKSxkdShsLGUudG9TdHlsZXMpfSksZC5mb3JFYWNoKGY9PntCYShyLGYsW10pLnB1c2goaCl9KSxofV9idWlsZFBsYXllcih0LGUsaSl7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsaSk6bmV3IFNwKHQuZHVyYXRpb24sdC5kZWxheSl9fSh0LGUsaSksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3Rlcih0LGUpe2xldCBpPVtdLG89RFgodGhpcy5fZHJpdmVyLGUsaSxbXSk7aWYoaS5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDMsITEpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KHQsbyl9X2J1aWxkUGxheWVyKHQsZSxpKXtsZXQgcj10LmVsZW1lbnQsbz1mWCgwLHRoaXMuX25vcm1hbGl6ZXIsMCx0LmtleWZyYW1lcyxlLGkpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShyLG8sdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLFtdLCEwKX1jcmVhdGUodCxlLGk9e30pe2xldCBzLHI9W10sbz10aGlzLl9hbmltYXRpb25zLmdldCh0KSxhPW5ldyBNYXA7aWYobz8ocz1BWCh0aGlzLl9kcml2ZXIsZSxvLGJYLFgzLG5ldyBNYXAsbmV3IE1hcCxpLFZNZSxyKSxzLmZvckVhY2godT0+e2xldCBkPUJhKGEsdS5lbGVtZW50LG5ldyBNYXApO3UucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChwPT5kLnNldChwLG51bGwpKX0pKTooci5wdXNoKG5ldyBNdCgzMzAwLCExKSkscz1bXSksci5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDQsITEpO2EuZm9yRWFjaCgodSxkKT0+e3UuZm9yRWFjaCgocCxoKT0+e3Uuc2V0KGgsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZShkLGgsdXUpKX0pfSk7bGV0IGM9RXAocy5tYXAodT0+e2xldCBkPWEuZ2V0KHUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKHUsbmV3IE1hcCxkKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KHQsYyksYy5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSh0KSksdGhpcy5wbGF5ZXJzLnB1c2goYyksY31kZXN0cm95KHQpe2xldCBlPXRoaXMuX2dldFBsYXllcih0KTtlLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUodCk7bGV0IGk9dGhpcy5wbGF5ZXJzLmluZGV4T2YoZSk7aT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShpLDEpfV9nZXRQbGF5ZXIodCl7bGV0IGU9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBNdCgzMzAxLCExKTtyZXR1cm4gZX1saXN0ZW4odCxlLGkscil7bGV0IG89Y0IoZSwiIiwiIiwiIik7cmV0dXJuIGxCKHRoaXMuX2dldFBsYXllcih0KSxpLG8sciksKCk9Pnt9fWNvbW1hbmQodCxlLGkscil7aWYoInJlZ2lzdGVyIj09aSlyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKHQsclswXSk7aWYoImNyZWF0ZSI9PWkpcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUodCxlLHJbMF18fHt9KTtsZXQgbz10aGlzLl9nZXRQbGF5ZXIodCk7c3dpdGNoKGkpe2Nhc2UicGxheSI6by5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6by5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOm8ucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOm8ucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpvLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6by5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6by5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KHJbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveSh0KX19fSh0LGUsaSksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShyLG8pfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSxyLG8pe2xldCBzPXQrIi0iK3IsYT10aGlzLl90cmlnZ2VyQ2FjaGVbc107aWYoIWEpe2xldCBsPVtdLHU9RFgodGhpcy5fZHJpdmVyLG8sbCxbXSk7aWYobC5sZW5ndGgpdGhyb3cgbmV3IE10KDM0MDQsITEpO2E9ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGUuc3RhdGVzLmZvckVhY2gocj0+e2xldCBvPXIub3B0aW9ucyYmci5vcHRpb25zLnBhcmFtc3x8e307dGhpcy5zdGF0ZXMuc2V0KHIubmFtZSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWUsdGhpcy5ub3JtYWxpemVyPWl9YnVpbGRTdHlsZXModCxlKXtsZXQgaT1uZXcgTWFwLHI9bkModGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChvPT57bGV0IHM9dFtvXTtudWxsIT09cyYmKHJbb109cyl9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChvPT57InN0cmluZyIhPXR5cGVvZiBvJiZvLmZvckVhY2goKHMsYSk9PntzJiYocz1LeChzLHIsZSkpO2xldCBsPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoYSxlKTtzPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKGEsbCxzLGUpLGkuc2V0KGwscyl9KX0pLGl9fShyLnN0eWxlLG8saSkpfSksbFgodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksbFgodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChyPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IE9UKHQscix0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgT1Qobix7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6WyhzLGEpPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0KX0odCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKHQsZSxpLHIpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZChzPT5zLm1hdGNoKHQsZSxpLHIpKXx8bnVsbH1tYXRjaFN0eWxlcyh0LGUsaSl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKHQsZSxpKX19KG4sdCxlKX0ocix1LHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVtzXT1hfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGUscixhKX1yZWdpc3Rlcih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX1kZXN0cm95KHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9b25JbnNlcnQodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKHQsZSxpLHIpfW9uUmVtb3ZlKHQsZSxpLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUscnx8ITEsaSl9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpfXByb2Nlc3ModCxlLGkscil7aWYoIkAiPT1pLmNoYXJBdCgwKSl7bGV0W28sc109ZVgoaSk7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChvLGUscyxyKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsaSxyKX1saXN0ZW4odCxlLGkscixvKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbcyxhXT1lWChpKTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKHMsZSxhLG8pfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3Rlbih0LGUsaSxyLG8pfWZsdXNoKHQ9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9Z2V0IHBsYXllcnMoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLmNvbmNhdCh0aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fSwkTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3N0YXJ0U3R5bGVzPWksdGhpcy5fZW5kU3R5bGVzPXIsdGhpcy5fc3RhdGU9MDtsZXQgbz1uLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGUpO298fG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQoZSxvPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9b31zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxlcyYmZHUodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzJiYoZHUodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYobi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKEJmKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihCZih0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fXJldHVybiBuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXAsbn0pKCk7ZnVuY3Rpb24gcTMobil7bGV0IHQ9bnVsbDtyZXR1cm4gbi5mb3JFYWNoKChlLGkpPT57KGZ1bmN0aW9uKG4pe3JldHVybiJkaXNwbGF5Ij09PW58fCJwb3NpdGlvbiI9PT1ufSkoaSkmJih0PXR8fG5ldyBNYXAsdC5zZXQoaSxlKSl9KSx0fXZhciBrVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1pLHRoaXMuX3NwZWNpYWxTdHlsZXM9cix0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1pLmR1cmF0aW9uLHRoaXMuX2RlbGF5PWkuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtsZXQgdD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCx0LHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT10Lmxlbmd0aD90W3QubGVuZ3RoLTFdOm5ldyBNYXAsdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKT0+dGhpcy5fb25GaW5pc2goKSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QodCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaChpPT57ZS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhpKSl9KSxlfV90cmlnZ2VyV2ViQW5pbWF0aW9uKHQsZSxpKXtyZXR1cm4gdC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChlKSxpKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24odCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtsZXQgdD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGkscik9Pnsib2Zmc2V0IiE9PXImJnQuc2V0KHIsdGhpcy5fZmluaXNoZWQ/aTpNWCh0aGlzLmVsZW1lbnQscikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LG5TZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcXh7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX25leHRBbmltYXRpb25JZD0wLHRoaXMuX3JlbmRlcmVyPWUuY3JlYXRlUmVuZGVyZXIoaS5ib2R5LHtpZDoiMCIsZW5jYXBzdWxhdGlvbjp3YS5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSl9YnVpbGQoZSl7bGV0IGk9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7bGV0IHI9QXJyYXkuaXNBcnJheShlKT94VChlKTplO3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcixudWxsLGksInJlZ2lzdGVyIixbcl0pLG5ldyBmQihpLHRoaXMuX3JlbmRlcmVyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxYyksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGZCPWNsYXNzIGV4dGVuZHMgYlR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2lkPXQsdGhpcy5fcmVuZGVyZXI9ZX1jcmVhdGUodCxlKXtyZXR1cm4gbmV3IG1CKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfX0sbUI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixpKX1fbGlzdGVuKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsYEBAJHt0aGlzLmlkfToke3R9YCxlKX1fY29tbWFuZCh0LC4uLmUpe3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfW9uRG9uZSh0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfW9uU3RhcnQodCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9b25EZXN0cm95KHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9aW5pdCgpe3RoaXMuX2NvbW1hbmQoImluaXQiKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfXBhdXNlKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX1yZXN0YXJ0KCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfWZpbmlzaCgpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfWRlc3Ryb3koKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9cmVzZXQoKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzWyt0aGlzLmlkXT8uZ2V0UG9zaXRpb24oKT8/MH19O2Z1bmN0aW9uIE9YKG4sdCxlLGkscil7cmV0dXJuIG4uc2V0UHJvcGVydHkodCxgQEAke2V9OiR7aX1gLHIpfXZhciBrWD0iQC5kaXNhYmxlZCIsaVNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1pLHRoaXMuX3pvbmU9cix0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsdGhpcy5wcm9taXNlPVByb21pc2UucmVzb2x2ZSgwKSxpLm9uUmVtb3ZhbENvbXBsZXRlPShvLHMpPT57bGV0IGE9cz8ucGFyZW50Tm9kZShvKTthJiZzLnJlbW92ZUNoaWxkKGEsbyl9fWNyZWF0ZVJlbmRlcmVyKGUsaSl7bGV0IG89dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihlLGkpO2lmKCEoZSYmaSYmaS5kYXRhJiZpLmRhdGEuYW5pbWF0aW9uKSl7bGV0IHU9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobyk7cmV0dXJuIHV8fCh1PW5ldyBMVCgiIixvLHRoaXMuZW5naW5lLCgpPT50aGlzLl9yZW5kZXJlckNhY2hlLmRlbGV0ZShvKSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQobyx1KSksdX1sZXQgcz1pLmlkLGE9aS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsZSk7bGV0IGw9dT0+e0FycmF5LmlzQXJyYXkodSk/dS5mb3JFYWNoKGwpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihzLGEsZSx1Lm5hbWUsdSl9O3JldHVybiBpLmRhdGEuYW5pbWF0aW9uLmZvckVhY2gobCksbmV3IGdCKHRoaXMsYSxvLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soZSxpLHIpe2U+PTAmJmU8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oKCk9PmkocikpOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2gobz0+e2xldFtzLGFdPW87cyhhKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2kscl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocWMpLFIoVHApLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxMVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fb25EZXN0cm95PXIsdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP289PmUuZGVzdHJveU5vZGUobyk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX1hcHBlbmRDaGlsZCh0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9aW5zZXJ0QmVmb3JlKHQsZSxpLHI9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxpKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCxyKX1yZW1vdmVDaGlsZCh0LGUsaSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUsaSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0LGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX1uZXh0U2libGluZyh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX1zZXRBdHRyaWJ1dGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLGkscil9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl9YWRkQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9cmVtb3ZlQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9c2V0U3R5bGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsaSxyKX1yZW1vdmVTdHlsZSh0LGUsaSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsaSl9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIWkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsaSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fSxnQj1jbGFzcyBleHRlbmRzIExUe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5mYWN0b3J5PXQsdGhpcy5uYW1lc3BhY2VJZD1lfXNldFByb3BlcnR5KHQsZSxpKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxpPXZvaWQgMD09PWl8fCEhaSk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zbGljZSgxKSxpKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxpKX1saXN0ZW4odCxlLGkpe2lmKCJAIj09ZS5jaGFyQXQoMCkpe2xldCByPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBufX0odCksbz1lLnNsaWNlKDEpLHM9IiI7cmV0dXJuIkAiIT1vLmNoYXJBdCgwKSYmKFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PW4uaW5kZXhPZigiLiIpO3JldHVybltuLnN1YnN0cmluZygwLHQpLG4uc2xpY2UodCsxKV19KG8pKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxyLG8scyxhPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhhLl9kYXRhfHwtMSxpLGEpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX19LHNTZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVHB7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZS5ib2R5LGkscil9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodEMpLFIoVmYpLFIoSmMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxGWD1be3Byb3ZpZGU6cXgsdXNlQ2xhc3M6blNlfSx7cHJvdmlkZTpWZix1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSVH19LHtwcm92aWRlOlRwLHVzZUNsYXNzOnNTZX0se3Byb3ZpZGU6cWMsdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBpU2Uobix0LGUpfSxkZXBzOltqeCxUcCxwdF19XSxSWD1be3Byb3ZpZGU6dEMsdXNlRmFjdG9yeTooKT0+bmV3IGNsYXNze3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KHQsZSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KHQsZSl7cmV0dXJuIF9YKHQsZSl9Z2V0UGFyZW50RWxlbWVudCh0KXtyZXR1cm4gdUIodCl9cXVlcnkodCxlLGkpe3JldHVybiB2WCh0LGUsaSl9Y29tcHV0ZVN0eWxlKHQsZSxpKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19YW5pbWF0ZSh0LGUsaSxyLG8scz1bXSl7bGV0IGw9e2R1cmF0aW9uOmksZGVsYXk6cixmaWxsOjA9PXI/ImJvdGgiOiJmb3J3YXJkcyJ9O28mJihsLmVhc2luZz1vKTtsZXQgYz1uZXcgTWFwLHU9cy5maWx0ZXIoaD0+aCBpbnN0YW5jZW9mIGtUKTsoZnVuY3Rpb24obix0KXtyZXR1cm4gMD09PW58fDA9PT10fSkoaSxyKSYmdS5mb3JFYWNoKGg9PntoLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChmLG0pPT5jLnNldChtLGYpKX0pO2xldCBkPWZ1bmN0aW9uKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdaW5zdGFuY2VvZiBNYXA/bjpuLm1hcCh0PT54WCh0KSk6W119KGUpLm1hcChoPT5qMChoKSk7ZD1mdW5jdGlvbihuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IGk9dFswXSxyPVtdO2lmKGUuZm9yRWFjaCgobyxzKT0+e2kuaGFzKHMpfHxyLnB1c2gocyksaS5zZXQocyxvKX0pLHIubGVuZ3RoKWZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3IuZm9yRWFjaChhPT5zLnNldChhLE1YKG4sYSkpKX19cmV0dXJuIHR9KHQsZCxjKTtsZXQgcD1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD8oZT1xMyh0WzBdKSx0Lmxlbmd0aD4xJiYoaT1xMyh0W3QubGVuZ3RoLTFdKSkpOnQgaW5zdGFuY2VvZiBNYXAmJihlPXEzKHQpKSxlfHxpP25ldyAkTWUobixlLGkpOm51bGx9KHQsZCk7cmV0dXJuIG5ldyBrVCh0LGQsbCxwKX19fSx7cHJvdmlkZTpMaSx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5GWF0sY1NlPVt7cHJvdmlkZTp0Qyx1c2VDbGFzczpkQn0se3Byb3ZpZGU6TGksdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uRlhdLE5YPSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOmUuZGlzYWJsZUFuaW1hdGlvbnM/Y1NlOlJYfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpSWCxpbXBvcnRzOlt5VF19KSxufSkoKSxiQj17fTtmdW5jdGlvbiB3ZShuLHQpe2lmKGJCW25dPShiQltuXXx8MCkrMSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gX0IobiwoLi4uaSk9Pih7Li4udCguLi5pKSx0eXBlOm59KSk7c3dpdGNoKHQ/dC5fYXM6ImVtcHR5Iil7Y2FzZSJlbXB0eSI6cmV0dXJuIF9CKG4sKCk9Pih7dHlwZTpufSkpO2Nhc2UicHJvcHMiOnJldHVybiBfQihuLGk9Pih7Li4uaSx0eXBlOm59KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY29uZmlnLiIpfX1mdW5jdGlvbiBfQihuLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZSIse3ZhbHVlOm4sd3JpdGFibGU6ITF9KX12YXIgSlg9IkBuZ3J4L3N0b3JlL2luaXQiLHEwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBWcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOkpYfSl9bmV4dChlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih0eXBlb2YgZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGJlIG9iamVjdHMiKTtpZih0eXBlb2YgZS50eXBlPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJBY3Rpb25zIG11c3QgaGF2ZSBhIHR5cGUgcHJvcGVydHkiKTtzdXBlci5uZXh0KGUpfWNvbXBsZXRlKCl7fW5nT25EZXN0cm95KCl7c3VwZXIuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdVNlPVtxMF0sJFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksTFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksTUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksZVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSxCWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLHRRPW5ldyBzZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLHZCPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLFZYPW5ldyBzZSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxIWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIikseUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksVVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxuUT1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIikselg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksaVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksalg9bmV3IHNlKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxXMD1uZXcgc2UoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxHWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxXWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIikscVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGlDPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxTQj1uZXcgc2UoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gSGYobix0PXt9KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dOyJmdW5jdGlvbiI9PXR5cGVvZiBuW3NdJiYoaVtzXT1uW3NdKX1sZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gZnVuY3Rpb24ocyxhKXtzPXZvaWQgMD09PXM/dDpzO2xldCBsPSExLGM9e307Zm9yKGxldCB1PTA7dTxyLmxlbmd0aDt1Kyspe2xldCBkPXJbdV0saD1zW2RdLGY9KDAsaVtkXSkoaCxhKTtjW2RdPWYsbD1sfHxmIT09aH1yZXR1cm4gbD9jOnN9fWZ1bmN0aW9uIFVUKC4uLm4pe3JldHVybiBmdW5jdGlvbih0KXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgocixvKT0+byhyKSxlKHQpKX19ZnVuY3Rpb24gclEobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmKG49VVQuYXBwbHkobnVsbCxbLi4udCxuXSkpLChlLGkpPT57bGV0IHI9bihlKTtyZXR1cm4obyxzKT0+cihvPXZvaWQgMD09PW8/aTpvLHMpfX1uZXcgc2UoIkBuZ3J4L3N0b3JlIFJvb3QgU3RvcmUgUHJvdmlkZXIiKSxuZXcgc2UoIkBuZ3J4L3N0b3JlIEZlYXR1cmUgU3RhdGUgUHJvdmlkZXIiKTt2YXIgckM9Y2xhc3MgZXh0ZW5kcyBRdHt9LEJUPWNsYXNzIGV4dGVuZHMgcTB7fSxWVD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyhyLGkpKSx0aGlzLmRpc3BhdGNoZXI9ZSx0aGlzLmluaXRpYWxTdGF0ZT1pLHRoaXMucmVkdWNlcnM9cix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUoZSl7dGhpcy5hZGRGZWF0dXJlcyhbZV0pfWFkZEZlYXR1cmVzKGUpe2xldCBpPWUucmVkdWNlKChyLHtyZWR1Y2VyczpvLHJlZHVjZXJGYWN0b3J5OnMsbWV0YVJlZHVjZXJzOmEsaW5pdGlhbFN0YXRlOmwsa2V5OmN9KT0+e2xldCB1PSJmdW5jdGlvbiI9PXR5cGVvZiBvP2Z1bmN0aW9uKG4pe2xldCB0PUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjA/VVQoLi4ubik6ZT0+ZTtyZXR1cm4oZSxpKT0+KGU9dChlKSwocixvKT0+ZShyPXZvaWQgMD09PXI/aTpyLG8pKX0oYSkobyxsKTpyUShzLGEpKG8sbCk7cmV0dXJuIHJbY109dSxyfSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhpKX1yZW1vdmVGZWF0dXJlKGUpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW2VdKX1yZW1vdmVGZWF0dXJlcyhlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKGUubWFwKGk9Pmkua2V5KSl9YWRkUmVkdWNlcihlLGkpe3RoaXMuYWRkUmVkdWNlcnMoe1tlXTppfSl9YWRkUmVkdWNlcnMoZSl7dGhpcy5yZWR1Y2Vycz17Li4udGhpcy5yZWR1Y2VycywuLi5lfSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKGUpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW2VdKX1yZW1vdmVSZWR1Y2VycyhlKXtlLmZvckVhY2goaT0+e3RoaXMucmVkdWNlcnM9ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PmUhPT10KS5yZWR1Y2UoKGUsaSk9Pk9iamVjdC5hc3NpZ24oZSx7W2ldOm5baV19KSx7fSl9KHRoaXMucmVkdWNlcnMsaSl9KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKGUpfXVwZGF0ZVJlZHVjZXJzKGUpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczplfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQlQpLFIoTUIpLFIodFEpLFIoZVEpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxnU2U9W1ZULHtwcm92aWRlOnJDLHVzZUV4aXN0aW5nOlZUfSx7cHJvdmlkZTpCVCx1c2VFeGlzdGluZzpxMH1dLG9DPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9TZT1bb0NdLEhUPWNsYXNzIGV4dGVuZHMgUXR7fSxZWD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyk7bGV0IGM9ZS5waXBlKHpoKE5PKSkucGlwZShHdChpKSkucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBxdCh1aihuLHQsYXJndW1lbnRzLmxlbmd0aD49MiwhMCkpfSh2U2Use3N0YXRlOm99KSk7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1jLnN1YnNjcmliZSgoe3N0YXRlOnUsYWN0aW9uOmR9KT0+e3RoaXMubmV4dCh1KSxyLm5leHQoZCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLklOSVQ9Slgsbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHEwKSxSKHJDKSxSKG9DKSxSKE1CKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gdlNlKG49e3N0YXRlOnZvaWQgMH0sW3QsZV0pe2xldHtzdGF0ZTppfT1uO3JldHVybntzdGF0ZTplKGksdCksYWN0aW9uOnR9fXZhciB5U2U9W1lYLHtwcm92aWRlOkhULHVzZUV4aXN0aW5nOllYfV0sUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuYWN0aW9uc09ic2VydmVyPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yLHRoaXMuc291cmNlPWV9c2VsZWN0KGUsLi4uaSl7cmV0dXJuIGZuLmNhbGwobnVsbCxlLC4uLmkpKHRoaXMpfWxpZnQoZSl7bGV0IGk9bmV3IG4odGhpcyx0aGlzLmFjdGlvbnNPYnNlcnZlcix0aGlzLnJlZHVjZXJNYW5hZ2VyKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9ZGlzcGF0Y2goZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1uZXh0KGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLm5leHQoZSl9ZXJyb3IoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIuZXJyb3IoZSl9Y29tcGxldGUoKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5jb21wbGV0ZSgpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLmFkZFJlZHVjZXIoZSxpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlUmVkdWNlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihIVCksUihxMCksUihWVCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGJTZT1bUGVdO2Z1bmN0aW9uIGZuKG4sdCwuLi5lKXtyZXR1cm4gZnVuY3Rpb24ocil7bGV0IG87aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgcz1bdCwuLi5lXS5maWx0ZXIoQm9vbGVhbik7bz1yLnBpcGUoZnVuY3Rpb24oLi4ubil7bGV0IHQ9bi5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LiIpO3JldHVybiBCKGU9PntsZXQgaT1lO2ZvcihsZXQgcj0wO3I8dDtyKyspe2xldCBvPWk/LltuW3JdXTtpZighKHR5cGVvZiBvPCJ1IikpcmV0dXJuO2k9b31yZXR1cm4gaX0pfShuLC4uLnMpKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2Ygbn0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO289ci5waXBlKEIocz0+bihzLHQpKSl9cmV0dXJuIG8ucGlwZShkaSgpKX19dmFyIEVCPSJodHRwczovL25ncnguaW8vZ3VpZGUvc3RvcmUvY29uZmlndXJhdGlvbi9ydW50aW1lLWNoZWNrcyI7ZnVuY3Rpb24gWFgobil7cmV0dXJuIHZvaWQgMD09PW59ZnVuY3Rpb24gUVgobil7cmV0dXJuIG51bGw9PT1ufWZ1bmN0aW9uIG9RKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pfWZ1bmN0aW9uIHNRKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW59ZnVuY3Rpb24geEIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gS1gobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gSVNlKG4sdCxlKXtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZighZShuW2ldLHRbaV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGFRKG4sdD1LWCxlPUtYKXtsZXQgbyxpPW51bGwscj1udWxsO3JldHVybnttZW1vaXplZDpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8ucmVzdWx0O2lmKCFpKXJldHVybiByPW4uYXBwbHkobnVsbCxhcmd1bWVudHMpLGk9YXJndW1lbnRzLHI7aWYoIUlTZShhcmd1bWVudHMsaSx0KSlyZXR1cm4gcjtsZXQgdT1uLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gaT1hcmd1bWVudHMsZShyLHUpP3I6KHI9dSx1KX0scmVzZXQ6ZnVuY3Rpb24oKXtpPW51bGwscj1udWxsfSxzZXRSZXN1bHQ6ZnVuY3Rpb24odSl7bz17cmVzdWx0OnV9fSxjbGVhclJlc3VsdDpmdW5jdGlvbigpe289dm9pZCAwfX19ZnVuY3Rpb24gWSguLi5uKXtyZXR1cm4gZnVuY3Rpb24obix0PXtzdGF0ZUZuOlBTZX0pe3JldHVybiBmdW5jdGlvbiguLi5lKXtsZXQgaT1lO2lmKEFycmF5LmlzQXJyYXkoaVswXSkpe2xldFt1LC4uLmRdPWk7aT1bLi4udSwuLi5kXX1sZXQgcj1pLnNsaWNlKDAsaS5sZW5ndGgtMSksbz1pW2kubGVuZ3RoLTFdLHM9ci5maWx0ZXIodT0+dS5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdS5yZWxlYXNlKSxhPW4oZnVuY3Rpb24oLi4udSl7cmV0dXJuIG8uYXBwbHkobnVsbCx1KX0pLGw9YVEoZnVuY3Rpb24odSxkKXtyZXR1cm4gdC5zdGF0ZUZuLmFwcGx5KG51bGwsW3UscixkLGFdKX0pO3JldHVybiBPYmplY3QuYXNzaWduKGwubWVtb2l6ZWQse3JlbGVhc2U6ZnVuY3Rpb24oKXtsLnJlc2V0KCksYS5yZXNldCgpLHMuZm9yRWFjaCh1PT51LnJlbGVhc2UoKSl9LHByb2plY3RvcjphLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fShhUSkoLi4ubil9ZnVuY3Rpb24gUFNlKG4sdCxlLGkpe2lmKHZvaWQgMD09PWUpe2xldCBvPXQubWFwKHM9PnMobikpO3JldHVybiBpLm1lbW9pemVkLmFwcGx5KG51bGwsbyl9bGV0IHI9dC5tYXAobz0+byhuLGUpKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLFsuLi5yLGVdKX1mdW5jdGlvbiBQcihuKXtyZXR1cm4gWSh0PT57bGV0IGU9dFtuXTtyZXR1cm4gQmIoKSYmIShuIGluIHQpJiZjb25zb2xlLndhcm4oYEBuZ3J4L3N0b3JlOiBUaGUgZmVhdHVyZSBuYW1lICIke259IiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUsIHRoZXJlZm9yZSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IgY2Fubm90IGFjY2VzcyBpdC4gIEJlIHN1cmUgaXQgaXMgaW1wb3J0ZWQgaW4gYSBsb2FkZWQgbW9kdWxlIHVzaW5nIFN0b3JlTW9kdWxlLmZvclJvb3QoJyR7bn0nLCAuLi4pIG9yIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoJyR7bn0nLCAuLi4pLiAgSWYgdGhlIGRlZmF1bHQgc3RhdGUgaXMgaW50ZW5kZWQgdG8gYmUgdW5kZWZpbmVkLCBhcyBpcyB0aGUgY2FzZSB3aXRoIHJvdXRlciBzdGF0ZSwgdGhpcyBkZXZlbG9wbWVudC1vbmx5IHdhcm5pbmcgbWVzc2FnZSBjYW4gYmUgaWdub3JlZC5gKSxlfSx0PT50KX1mdW5jdGlvbiBPU2Uobix0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHNlP24uZ2V0KHQpOnR9ZnVuY3Rpb24ga1NlKG4sdCxlKXtyZXR1cm4gZS5tYXAoKGkscik9PntpZih0W3JdaW5zdGFuY2VvZiBzZSl7bGV0IG89bi5nZXQodFtyXSk7cmV0dXJue2tleTppLmtleSxyZWR1Y2VyRmFjdG9yeTpvLnJlZHVjZXJGYWN0b3J5P28ucmVkdWNlckZhY3Rvcnk6SGYsbWV0YVJlZHVjZXJzOm8ubWV0YVJlZHVjZXJzP28ubWV0YVJlZHVjZXJzOltdLGluaXRpYWxTdGF0ZTpvLmluaXRpYWxTdGF0ZX19cmV0dXJuIGl9KX1mdW5jdGlvbiBGU2Uobix0KXtyZXR1cm4gdC5tYXAoaT0+aSBpbnN0YW5jZW9mIHNlP24uZ2V0KGkpOmkpfWZ1bmN0aW9uIGxRKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24oKTpufWZ1bmN0aW9uIE5TZShuLHQpe3JldHVybiBuLmNvbmNhdCh0KX1mdW5jdGlvbiBMU2Uobil7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcm9vdCBTdG9yZSBoYXMgYmVlbiBwcm92aWRlZCBtb3JlIHRoYW4gb25jZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCBwcm92aWRlIGZlYXR1cmUgc3RhdGVzIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIENCKG4pe09iamVjdC5mcmVlemUobik7bGV0IHQ9eEIobik7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZvckVhY2goZT0+e2lmKCFlLnN0YXJ0c1dpdGgoIlx1MDI3NSIpJiZmdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobix0KX0obixlKSYmKCF0fHwiY2FsbGVyIiE9PWUmJiJjYWxsZWUiIT09ZSYmImFyZ3VtZW50cyIhPT1lKSl7bGV0IGk9bltlXTsoc1EoaSl8fHhCKGkpKSYmIU9iamVjdC5pc0Zyb3plbihpKSYmQ0IoaSl9fSksbn1mdW5jdGlvbiB3QihuLHQ9W10pe3JldHVybihYWChuKXx8UVgobikpJiYwPT09dC5sZW5ndGg/e3BhdGg6WyJyb290Il0sdmFsdWU6bn06T2JqZWN0LmtleXMobikucmVkdWNlKChpLHIpPT57aWYoaSlyZXR1cm4gaTtsZXQgbz1uW3JdO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geEIobikmJm4uaGFzT3duUHJvcGVydHkoIlx1MDI3NWNtcCIpfShvKT9pOiEoWFgobyl8fFFYKG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBufShvKXx8ZnVuY3Rpb24obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBufShvKXx8b1EobykpJiYoZnVuY3Rpb24obil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiBzUShuKSYmIW9RKG4pfShuKSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIHQ9PT1PYmplY3QucHJvdG90eXBlfHxudWxsPT09dH0obyk/d0IobyxbLi4udCxyXSk6e3BhdGg6Wy4uLnQscl0sdmFsdWU6b30pfSwhMSl9ZnVuY3Rpb24gWlgobix0KXtpZighMT09PW4pcmV0dXJuO2xldCBlPW4ucGF0aC5qb2luKCIuIiksaT1uZXcgRXJyb3IoYERldGVjdGVkIHVuc2VyaWFsaXphYmxlICR7dH0gYXQgIiR7ZX0iLiAke0VCfSNzdHJpY3Qke3R9c2VyaWFsaXphYmlsaXR5YCk7dGhyb3cgaS52YWx1ZT1uLnZhbHVlLGkudW5zZXJpYWxpemFibGVQYXRoPWUsaX1mdW5jdGlvbiBVU2Uobil7cmV0dXJuIEJiKCk/e3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExLC4uLm59OntzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbldpdGhpbk5nWm9uZTohMSxzdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzczohMX19ZnVuY3Rpb24gelNlKHtzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6bixzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXt0LmFjdGlvbihpKSYmWlgod0IoaSksImFjdGlvbiIpO2xldCByPW4oZSxpKTtyZXR1cm4gdC5zdGF0ZSgpJiZaWCh3QihyKSwic3RhdGUiKSxyfX0oZSx7YWN0aW9uOmk9Pm4mJiFUQihpKSxzdGF0ZTooKT0+dH0pOmV9ZnVuY3Rpb24galNlKHtzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6bixzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcj10LmFjdGlvbihpKT9DQihpKTppLG89bihlLHIpO3JldHVybiB0LnN0YXRlKCk/Q0Iobyk6b319KGUse2FjdGlvbjppPT5uJiYhVEIoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uIFRCKG4pe3JldHVybiBuLnR5cGUuc3RhcnRzV2l0aCgiQG5ncngiKX1mdW5jdGlvbiBHU2Uoe3N0cmljdEFjdGlvbldpdGhpbk5nWm9uZTpufSl7cmV0dXJuIHQ9Pm4/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtpZih0LmFjdGlvbihpKSYmIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcihgQWN0aW9uICcke2kudHlwZX0nIHJ1bm5pbmcgb3V0c2lkZSBOZ1pvbmUuICR7RUJ9I3N0cmljdGFjdGlvbndpdGhpbm5nem9uZWApO3JldHVybiBuKGUsaSl9fSh0LHthY3Rpb246ZT0+biYmIVRCKGUpfSk6dH1mdW5jdGlvbiBXU2Uobil7cmV0dXJuW3twcm92aWRlOnFYLHVzZVZhbHVlOm59LHtwcm92aWRlOldYLHVzZUZhY3Rvcnk6cVNlLGRlcHM6W3FYXX0se3Byb3ZpZGU6aUMsZGVwczpbV1hdLHVzZUZhY3Rvcnk6VVNlfSx7cHJvdmlkZTpXMCxtdWx0aTohMCxkZXBzOltpQ10sdXNlRmFjdG9yeTpqU2V9LHtwcm92aWRlOlcwLG11bHRpOiEwLGRlcHM6W2lDXSx1c2VGYWN0b3J5OnpTZX0se3Byb3ZpZGU6VzAsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6R1NlfV19ZnVuY3Rpb24gY1EoKXtyZXR1cm5be3Byb3ZpZGU6U0IsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6WVNlfV19ZnVuY3Rpb24gcVNlKG4pe3JldHVybiBufWZ1bmN0aW9uIFlTZShuKXtpZighbi5zdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzcylyZXR1cm47bGV0IHQ9T2JqZWN0LmVudHJpZXMoYkIpLmZpbHRlcigoWyxlXSk9PmU+MSkubWFwKChbZV0pPT5lKTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiB0eXBlcyBhcmUgcmVnaXN0ZXJlZCBtb3JlIHRoYW4gb25jZSwgJHt0Lm1hcChlPT5gIiR7ZX0iYCkuam9pbigiLCAiKX0uICR7RUJ9I3N0cmljdGFjdGlvbnR5cGV1bmlxdWVuZXNzYCl9ZnVuY3Rpb24gWFNlKG4sdCl7cmV0dXJuW3twcm92aWRlOiRYLHVzZUZhY3Rvcnk6TFNlLGRlcHM6W1tQZSxuZXcgT28sbmV3IFRhXV19LHtwcm92aWRlOkxYLHVzZVZhbHVlOnQuaW5pdGlhbFN0YXRlfSx7cHJvdmlkZTpNQix1c2VGYWN0b3J5OmxRLGRlcHM6W0xYXX0se3Byb3ZpZGU6dkIsdXNlVmFsdWU6bn0se3Byb3ZpZGU6SFgsdXNlRXhpc3Rpbmc6biBpbnN0YW5jZW9mIHNlP246dkJ9LHtwcm92aWRlOnRRLGRlcHM6W3puLHZCLFtuZXcgamcoSFgpXV0sdXNlRmFjdG9yeTpPU2V9LHtwcm92aWRlOmpYLHVzZVZhbHVlOnQubWV0YVJlZHVjZXJzP3QubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTpHWCxkZXBzOltXMCxqWF0sdXNlRmFjdG9yeTpOU2V9LHtwcm92aWRlOkJYLHVzZVZhbHVlOnQucmVkdWNlckZhY3Rvcnk/dC5yZWR1Y2VyRmFjdG9yeTpIZn0se3Byb3ZpZGU6ZVEsZGVwczpbQlgsR1hdLHVzZUZhY3Rvcnk6clF9LHVTZSxnU2UsX1NlLHlTZSxiU2UsV1NlKHQucnVudGltZUNoZWNrcyksY1EoKV19ZnVuY3Rpb24gUVNlKG4sdCxlPXt9KXtyZXR1cm5be3Byb3ZpZGU6VVgsbXVsdGk6ITAsdXNlVmFsdWU6biBpbnN0YW5jZW9mIE9iamVjdD97fTplfSx7cHJvdmlkZTpWWCxtdWx0aTohMCx1c2VWYWx1ZTp7a2V5Om4gaW5zdGFuY2VvZiBPYmplY3Q/bi5uYW1lOm4scmVkdWNlckZhY3Rvcnk6ZSBpbnN0YW5jZW9mIHNlfHwhZS5yZWR1Y2VyRmFjdG9yeT9IZjplLnJlZHVjZXJGYWN0b3J5LG1ldGFSZWR1Y2VyczplIGluc3RhbmNlb2Ygc2V8fCFlLm1ldGFSZWR1Y2Vycz9bXTplLm1ldGFSZWR1Y2Vycyxpbml0aWFsU3RhdGU6ZSBpbnN0YW5jZW9mIHNlfHwhZS5pbml0aWFsU3RhdGU/dm9pZCAwOmUuaW5pdGlhbFN0YXRlfX0se3Byb3ZpZGU6blEsZGVwczpbem4sVVgsVlhdLHVzZUZhY3Rvcnk6a1NlfSx7cHJvdmlkZTp5QixtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P24ucmVkdWNlcjp0fSx7cHJvdmlkZTp6WCxtdWx0aTohMCx1c2VFeGlzdGluZzp0IGluc3RhbmNlb2Ygc2U/dDp5Qn0se3Byb3ZpZGU6aVEsbXVsdGk6ITAsZGVwczpbem4seUIsW25ldyBqZyh6WCldXSx1c2VGYWN0b3J5OkZTZX0sY1EoKV19dmFyIHNDPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxMCksUihyQyksUihvQyksUihQZSksUigkWCw4KSxSKFNCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCkselQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuZmVhdHVyZXM9ZSx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1pLHRoaXMucmVkdWNlck1hbmFnZXI9cjtsZXQgYT1lLm1hcCgobCxjKT0+e2xldCBkPWkuc2hpZnQoKVtjXTtyZXR1cm57Li4ubCxyZWR1Y2VyczpkLGluaXRpYWxTdGF0ZTpsUShsLmluaXRpYWxTdGF0ZSl9fSk7ci5hZGRGZWF0dXJlcyhhKX1uZ09uRGVzdHJveSgpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlRmVhdHVyZXModGhpcy5mZWF0dXJlcyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoblEpLFIoaVEpLFIoVlQpLFIoc0MpLFIoU0IsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxScj0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JSb290KGUsaT17fSl7cmV0dXJue25nTW9kdWxlOnNDLHByb3ZpZGVyczpbLi4uWFNlKGUsaSldfX1zdGF0aWMgZm9yRmVhdHVyZShlLGkscj17fSl7cmV0dXJue25nTW9kdWxlOnpULHByb3ZpZGVyczpbLi4uUVNlKGUsaSxyKV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gU2UoLi4ubil7cmV0dXJue3JlZHVjZXI6bi5wb3AoKSx0eXBlczpuLm1hcChpPT5pLnR5cGUpfX1mdW5jdGlvbiB3cihuLC4uLnQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZm9yKGxldCByIG9mIGkudHlwZXMpe2xldCBvPWUuZ2V0KHIpO2Uuc2V0KHIsbz8oYSxsKT0+aS5yZWR1Y2VyKG8oYSxsKSxsKTppLnJlZHVjZXIpfXJldHVybiBmdW5jdGlvbihpPW4scil7bGV0IG89ZS5nZXQoci50eXBlKTtyZXR1cm4gbz9vKGkscik6aX19dmFyIEtTZT17ZGlzcGF0Y2g6ITAsdXNlRWZmZWN0c0Vycm9ySGFuZGxlcjohMH0sR1Q9Il9fQG5ncngvZWZmZWN0c19jcmVhdGVfXyI7ZnVuY3Rpb24gVXIobix0KXtsZXQgZT1uKCksaT17Li4uS1NlLC4uLnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxHVCx7dmFsdWU6aX0pLGV9ZnVuY3Rpb24gWlNlKG4pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5maWx0ZXIoaT0+ISghbltpXXx8IW5baV0uaGFzT3duUHJvcGVydHkoR1QpKSYmbltpXVtHVF0uaGFzT3duUHJvcGVydHkoImRpc3BhdGNoIikpLm1hcChpPT4oe3Byb3BlcnR5TmFtZTppLC4uLm5baV1bR1RdfSkpfWZ1bmN0aW9uIEFCKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9dmFyIHBRPSJfX0BuZ3J4L2VmZmVjdHNfXyI7ZnVuY3Rpb24gSlNlKG4pe3JldHVybiBVVChlRWUsQUIpKG4pfWZ1bmN0aW9uIGVFZShuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4uY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkocFEpfShuKT9uLmNvbnN0cnVjdG9yW3BRXTpbXX1mdW5jdGlvbiBoUShuLHQsZT0xMCl7cmV0dXJuIG4ucGlwZShDbyhpPT4odCYmdC5oYW5kbGVFcnJvcihpKSxlPD0xP246aFEobix0LGUtMSkpKSl9dmFyIGNzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBRdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLGUmJih0aGlzLnNvdXJjZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKG9DKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gVGkoLi4ubil7cmV0dXJuIEhlKHQ9Pm4uc29tZShlPT4ic3RyaW5nIj09dHlwZW9mIGU/ZT09PXQudHlwZTplLnR5cGU9PT10LnR5cGUpKX12YXIgZlE9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgR3VhcmQiKSxqVD1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgVXNlciBQcm92aWRlZCBFZmZlY3RzIiksREI9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgRWZmZWN0cyIpLG1RPW5ldyBzZSgiQG5ncngvZWZmZWN0cyBSb290IEVmZmVjdHMiKSx1UT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIiksZ1E9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEZlYXR1cmUgRWZmZWN0cyIpLHJFZT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+aFF9KSxfUT0iQG5ncngvZWZmZWN0cy9pbml0IjtmdW5jdGlvbiBmRWUobil7cmV0dXJuIElCKG4sIm5ncnhPbkluaXRFZmZlY3RzIil9ZnVuY3Rpb24gSUIobix0KXtyZXR1cm4gbiYmdCBpbiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygblt0XX13ZShfUSk7dmFyIHZRPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5lcnJvckhhbmRsZXI9ZSx0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXI9aX1hZGRFZmZlY3RzKGUpe3RoaXMubmV4dChlKX10b0FjdGlvbnMoKXtyZXR1cm4gdGhpcy5waXBlKFZTKEFCKSxfbihlPT5lLnBpcGUoVlMobUVlKSkpLF9uKGU9PntsZXQgaT1lLnBpcGUoTFMobz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gZT0+e2xldCBpPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BQihuKS5jb25zdHJ1Y3Rvci5uYW1lLHI9ZnVuY3Rpb24obil7cmV0dXJuW0pTZSxaU2VdLnJlZHVjZSgoZSxpKT0+ZS5jb25jYXQoaShuKSksW10pfShuKS5tYXAoKHtwcm9wZXJ0eU5hbWU6byxkaXNwYXRjaDpzLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6YX0pPT57bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIG5bb10/bltvXSgpOm5bb10sYz1hP2UobCx0KTpsO3JldHVybiExPT09cz9jLnBpcGUocXkoKSk6Yy5waXBlKHF0KChuLHQpPT57bi5zdWJzY3JpYmUoTHQodCxlPT57dC5uZXh0KHRsLmNyZWF0ZU5leHQoZSkpfSwoKT0+e3QubmV4dCh0bC5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9LGU9Pnt0Lm5leHQodGwuY3JlYXRlRXJyb3IoZSkpLHQuY29tcGxldGUoKX0pKX0pKS5waXBlKEIoZD0+KHtlZmZlY3Q6bltvXSxub3RpZmljYXRpb246ZCxwcm9wZXJ0eU5hbWU6byxzb3VyY2VOYW1lOmksc291cmNlSW5zdGFuY2U6bn0pKSl9KTtyZXR1cm4gdW4oLi4ucil9KGUsbix0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIElCKG4sIm5ncnhPblJ1bkVmZmVjdHMiKX0oZSk/ZS5uZ3J4T25SdW5FZmZlY3RzKGkpOml9fSh0aGlzLmVycm9ySGFuZGxlcix0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXIpKG8pKSxCKG89PihmdW5jdGlvbihuLHQpe2lmKCJOIj09PW4ubm90aWZpY2F0aW9uLmtpbmQpe2xldCBlPW4ubm90aWZpY2F0aW9uLnZhbHVlOyFmdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmbiYmbi50eXBlJiYic3RyaW5nIj09dHlwZW9mIG4udHlwZX0oZSkmJnQuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFZmZlY3QgJHtmdW5jdGlvbih7cHJvcGVydHlOYW1lOm4sc291cmNlSW5zdGFuY2U6dCxzb3VyY2VOYW1lOmV9KXtsZXQgaT0iZnVuY3Rpb24iPT10eXBlb2YgdFtuXTtyZXR1cm5gIiR7ZX0uJHtTdHJpbmcobil9JHtpPyIoKSI6IiJ9ImB9KG4pfSBkaXNwYXRjaGVkIGFuIGludmFsaWQgYWN0aW9uOiAke2Z1bmN0aW9uKG4pe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9Y2F0Y2h7cmV0dXJuIG59fShlKX1gKSl9fShvLHRoaXMuZXJyb3JIYW5kbGVyKSxvLm5vdGlmaWNhdGlvbikpLEhlKG89PiJOIj09PW8ua2luZCYmbnVsbCE9by52YWx1ZSkscXQoKG4sdCk9PntuLnN1YnNjcmliZShMdCh0LGU9PkhPKGUsdCkpKX0pKTtyZXR1cm4gdW4oaSxlLnBpcGUoSHQoMSksSGUoZkVlKSxCKG89Pm8ubmdyeE9uSW5pdEVmZmVjdHMoKSkpKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihTcyksUihyRWUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBtRWUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBJQihuLCJuZ3J4T25JZGVudGlmeUVmZmVjdHMiKX0obik/bi5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn12YXIgeVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZWZmZWN0U291cmNlcz1lLHRoaXMuc3RvcmU9aSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1nZXQgaXNTdGFydGVkKCl7cmV0dXJuISF0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb259c3RhcnQoKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb258fCh0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249dGhpcy5lZmZlY3RTb3VyY2VzLnRvQWN0aW9ucygpLnN1YnNjcmliZSh0aGlzLnN0b3JlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24mJih0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodlEpLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuc291cmNlcz1lLGkuc3RhcnQoKSxvLmZvckVhY2goYz0+ZS5hZGRFZmZlY3RzKGMpKSxyLmRpc3BhdGNoKHt0eXBlOl9RfSl9YWRkRWZmZWN0cyhlKXt0aGlzLnNvdXJjZXMuYWRkRWZmZWN0cyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2USksUih5USksUihQZSksUihtUSksUihzQyw4KSxSKHpULDgpLFIoZlEsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxfRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXtpLmZvckVhY2gocz0+cy5mb3JFYWNoKGE9PmUuYWRkRWZmZWN0cyhhKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGJRKSxSKGdRKSxSKHNDLDgpLFIoelQsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxMbz0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JGZWF0dXJlKGU9W10pe3JldHVybntuZ01vZHVsZTpfRWUscHJvdmlkZXJzOltlLHtwcm92aWRlOnVRLG11bHRpOiEwLHVzZVZhbHVlOmV9LHtwcm92aWRlOmpULG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTpnUSxtdWx0aTohMCx1c2VGYWN0b3J5OmRRLGRlcHM6W3puLHVRLGpUXX1dfX1zdGF0aWMgZm9yUm9vdChlPVtdKXtyZXR1cm57bmdNb2R1bGU6YlEscHJvdmlkZXJzOltlLHtwcm92aWRlOkRCLHVzZVZhbHVlOltlXX0se3Byb3ZpZGU6ZlEsdXNlRmFjdG9yeTp5RWUsZGVwczpbW3lRLG5ldyBPbyxuZXcgVGFdLFtEQixuZXcgakZdXX0se3Byb3ZpZGU6alQsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOm1RLHVzZUZhY3Rvcnk6ZFEsZGVwczpbem4sREIsalRdfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gZFEobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiB0KWkucHVzaCguLi5yKTtmb3IobGV0IHIgb2YgZSlpLnB1c2goLi4ucik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQubWFwKGU9Pm4uZ2V0KGUpKX0obixpKX1mdW5jdGlvbiB5RWUobix0KXtpZigoMSE9PXQubGVuZ3RofHwwIT09dFswXS5sZW5ndGgpJiZuKXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIGZpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTktOT1dOPTBdPSJVTktOT1dOIixuW24uRVhQRVJJTUVOVFM9MV09IkVYUEVSSU1FTlRTIixuW24uRVhQRVJJTUVOVD0yXT0iRVhQRVJJTUVOVCIsbltuLkNPTVBBUkVfRVhQRVJJTUVOVD0zXT0iQ09NUEFSRV9FWFBFUklNRU5UIixuW24uTk9UX1NFVD00XT0iTk9UX1NFVCJ9KGZpfHwoZmk9e30pKSxmaSkpKCksV1Q9ImRlZmF1bHRFeHBlcmltZW50SWQiLFkwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UUz0wXT0iRVhQRVJJTUVOVFMiLG5bbi5EQVNIQk9BUkQ9MV09IkRBU0hCT0FSRCJ9KFkwfHwoWTA9e30pKSxZMCkpKCk7ZnVuY3Rpb24gbEMobil7cmV0dXJuIG4uc3BsaXQoIiwiKS5tYXAodD0+e2xldCBlPXQuaW5kZXhPZigiOiIpO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBjb2xvbiBkZWxpbWl0aW5nIG5hbWUgYW5kIElEOiAke3R9YCk7bGV0IGk9dC5zbGljZSgwLGUpLHI9dC5zbGljZShlKzEpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgRXhwZWN0IGlkIHRvIGJlIG5vbi1mYWxzeTogJHt0fWApO3JldHVybntuYW1lOmksaWQ6cn19KX1mdW5jdGlvbiB4UShuKXtyZXR1cm4gbi5tYXAoKHthbGlhczp0LGlkOmV9KT0+YCR7dH06JHtlfWApLmpvaW4oIiwiKX1mdW5jdGlvbiBhQyhuLHQpe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlQ6cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJleHBlcmltZW50SWQiKT9bdC5leHBlcmltZW50SWRdOltXVF07Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIGxDKHQuZXhwZXJpbWVudElkcykubWFwKCh7aWQ6aX0pPT5pKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiB1cyhuLHQpe2lmKCFufHwhdClyZXR1cm4gbj09PXQ7aWYobi5yb3V0ZUtpbmQhPT10LnJvdXRlS2luZClyZXR1cm4hMTtsZXQgZT1hQyhuLnJvdXRlS2luZCxuLnBhcmFtcyksaT1hQyh0LnJvdXRlS2luZCx0LnBhcmFtcyk7aWYobnVsbD09PWV8fG51bGw9PT1pKXJldHVybiBlPT09aTtpZihlLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2xldCByPWkuc29ydCgpO3JldHVybiBlLnNvcnQoKS5ldmVyeSgobyxzKT0+cltzXT09PW8pfWZ1bmN0aW9uIFBCKG4pe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlRTOnJldHVybiBZMC5FWFBFUklNRU5UUztjYXNlIGZpLkVYUEVSSU1FTlQ6Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIFkwLkRBU0hCT0FSRDtjYXNlIGZpLlVOS05PV046Y2FzZSBmaS5OT1RfU0VUOnJldHVybiBudWxsfX1mdW5jdGlvbiBxVChuLHQsZSl7bGV0IGk9UEIobik7cmV0dXJuIG51bGwhPT1pJiYhZS5zb21lKHI9PnIuZGVlcExpbmtHcm91cD09PWkmJnIubmFtZXNwYWNlSWQ9PT10KX12YXIgU1FfZ2V0SHJlZj0oKT0+d2luZG93LmxvY2F0aW9uLmhyZWYsVWY9KCgpPT57Y2xhc3MgbntnZXRIcmVmKCl7cmV0dXJuIFNRX2dldEhyZWYoKX1nZXRTZWFyY2goKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGk9W107cmV0dXJuIGUuZm9yRWFjaCgocixvKT0+e2kucHVzaCh7a2V5Om8sdmFsdWU6cn0pfSksaX1nZXRIYXNoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNofWdldFBhdGgoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWdldEhpc3RvcnlTdGF0ZSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZX1yZXBsYWNlU3RhdGVVcmwoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfXB1c2hTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIixlKX1yZXBsYWNlU3RhdGVEYXRhKGUpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLCIiKX1vblBvcFN0YXRlKCl7cmV0dXJuIGxpKHdpbmRvdywicG9wc3RhdGUiKS5waXBlKEIoZT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxzdGF0ZTplLnN0YXRlfSkpKX1nZXRSZXNvbHZlZFBhdGgoZSl7cmV0dXJuIG5ldyBVUkwoZSxTUV9nZXRIcmVmKCkpLnBhdGhuYW1lfWdldEZ1bGxQYXRoKGUsaSxyKXtsZXQgbz10aGlzLmdldFJlc29sdmVkUGF0aChlKSxzPSIiO3JldHVybiBpLmxlbmd0aCYmKHM9Ij8iK2Z1bmN0aW9uKG4pe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldHtrZXk6ZSx2YWx1ZTppfW9mIG4pdC5hcHBlbmQoZSxpKTtyZXR1cm4gdH0oaSkudG9TdHJpbmcoKSksYCR7b30ke3N9JHtyP3RoaXMuZ2V0SGFzaCgpOiIifWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHpmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudChlKX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpe2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighaSlyZXR1cm4iLyI7bGV0e3BhdGhuYW1lOnJ9PW5ldyBVUkwoaS5jb250ZW50LGUuZ2V0SHJlZigpKTtyZXR1cm4gci5yZXBsYWNlKC9cLyokLywiLyIpfWdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSl7cmV0dXJuIHRoaXMuYXBwUm9vdC5zbGljZSgwLC0xKStlfWdldEFwcFJvb3RsZXNzUGF0aG5hbWUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCh0aGlzLmFwcFJvb3QpPyIvIitlLnNsaWNlKHRoaXMuYXBwUm9vdC5sZW5ndGgpOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVWYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltVZl19KSxufSkoKSxRMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6Zl0saW1wb3J0czpbWDBdfSksbn0pKCksa0I9bmV3IHNlKCJbQXBwIFJvdXRpbmddIERpcnR5IFVwZGF0ZXMiKSxZVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHlVcGRhdGVzU2VsZWN0b3JGYWN0b3JpZXM9ZX1nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz8/W119c3RhdGljIHJlZ2lzdGVyRGlydHlVcGRhdGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6a0IsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGtCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksRVE9d2UoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxLMD13ZSgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWFQ9d2UoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZCPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFowPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseGw9d2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLExCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIiksUVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGkuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7aS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChpLmFjdGlvbkNyZWF0b3IudHlwZSxpLmxhbWJkYSl9fWdldE5hdmlnYXRpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOkxCLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihMQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGNDKG4pe3JldHVybiBudWxsIT1uLnJvdXRlS2luZH1mdW5jdGlvbiBIQihuKXtyZXR1cm4gQVEobikubWFwKGU9PntsZXQgaT1lLnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gaT97cGF0aFBhcnQ6ZSxpc1BhcmFtOiEwLHBhcmFtTmFtZTplLnNsaWNlKDEpfTp7cGF0aFBhcnQ6ZSxpc1BhcmFtOml9fSl9dmFyIEowPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPUhCKHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX1zdGF0aWMgZ2V0TWF0Y2hlcih0KXtyZXR1cm4gY0ModCk/bmV3IHVDKHQpOmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLnJlZGlyZWN0aW9uUGF0aH0odCk/bmV3IEJCKHQpOm5ldyBWQih0KX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sdUM9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LEJCPWNsYXNzIGV4dGVuZHMgSjB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1IQih0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0sVkI9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LGRDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPUowLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiB1QyYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKGNDKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oSEIobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPUFRKHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czp1LGlzUmVkaXJlY3Rpb246ZH09bDtpZihkKXtlPXUscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiB1QykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGg9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpEUSh1KSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLHUpfTtyZXR1cm4gcj97Li4uaCxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmgsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6RFEoci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gQVEobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBEUShuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIFVCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxoYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBkQyhbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgZEMoaSksaS5mb3JFYWNoKHI9PntjQyhyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VUIsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksS1Q9ImFwcF9yb3V0aW5nIixwQz1QcihLVCkscmE9WShwQyxuPT5uLmFjdGl2ZVJvdXRlKSxSUT1ZKHBDLG49Pm4ubmV4dFJvdXRlKSxPUT1ZKHBDLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLGtRPVkocEMsbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxGUT1ZKHBDLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cykscHU9WShyYSxuPT5uP24ucm91dGVLaW5kOmZpLk5PVF9TRVQpLGpCPVkocmEsbj0+bj9uLnBhcmFtczp7fSksJG89WShwdSxqQiwobix0KT0+YUMobix0KSksaHU9KFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpLGk9MDtmb3IobGV0e2lkOnIsbmFtZTpvfW9mIGUpaSsrLCF0LmhhcyhyKSYmdC5zZXQocix7YWxpYXNUZXh0Om8sYWxpYXNOdW1iZXI6aX0pO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pKSxHQj13ZSgiW0FwcCBSb3V0aW5nXSBFZmZlY3RzIEluaXQiKSxGcz0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIn0oRnN8fChGcz17fSkpLEZzKSkoKSxOUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5sb2NhdGlvbj1yLHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnk9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZT1hLHRoaXMuYXBwUm9vdFByb3ZpZGVyPWwsdGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShGQiksQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoYy5wYXRobmFtZSk6dGhpcy5sb2NhdGlvbi5nZXRSZXNvbHZlZFBhdGgoYy5wYXRobmFtZSksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMSxyZXBsYWNlU3RhdGU6Yy5yZXBsYWNlU3RhdGU/PyExLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmMucmVzZXROYW1lc3BhY2VkU3RhdGU/RnMuTkVXOkZzLlVOQ0hBTkdFRH19fSkpKSx0aGlzLmJvb3RzdHJhcFJlZHVjZXJzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSxCKCgpPT5YVCh7cm91dGVLaW5kczpuZXcgU2V0KHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJvdXRlS2luZHMoKSl9KSkpKSx0aGlzLm9uSW5pdCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSkucGlwZShubCgwKSxCKCgpPT57bGV0IGM9dGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKT8ubmFtZXNwYWNlSWQsdT12b2lkIDA9PT1jP3tvcHRpb246RnMuTkVXfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjfTtyZXR1cm57cGF0aG5hbWU6dGhpcy5sb2NhdGlvbi5nZXRQYXRoKCksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnV9fX0pKSx0aGlzLm9uUG9wU3RhdGUkPXRoaXMubG9jYXRpb24ub25Qb3BTdGF0ZSgpLnBpcGUoQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUsb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnZvaWQgMD09PWMuc3RhdGU/Lm5hbWVzcGFjZUlkP3tvcHRpb246RnMuVU5DSEFOR0VEfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjLnN0YXRlLm5hbWVzcGFjZUlkfX19KSkpLHRoaXMudXNlckluaXROYXZSb3V0ZSQ9dW4odGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkLHRoaXMub25Jbml0JCx0aGlzLm9uUG9wU3RhdGUkKS5waXBlKEIoYz0+e2lmKCFjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoYFtBcHAgcm91dGluZ10gcGF0aG5hbWUgbXVzdCBzdGFydCB3aXRoICcvJy4gR290OiAke2MucGF0aG5hbWV9YCk7cmV0dXJuey4uLmMscGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZShjLnBhdGhuYW1lKX19KSxCKGM9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncy5tYXRjaChjKSxvcHRpb25zOmMub3B0aW9uc30pKSksdGhpcy5wcm9ncmFtbWF0aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoQihjPT50aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlLmdldE5hdmlnYXRpb24oYykpLEhlKGM9Pm51bGwhPT1jKSxCKGM9PntsZXQgZix1PWMse3JlcGxhY2VTdGF0ZTpkPSExLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnAscm91dGVLaW5kOmh9PXU7cmV0dXJuIGY9dS5yb3V0ZUtpbmQ9PT1maS5DT01QQVJFX0VYUEVSSU1FTlQ/e2V4cGVyaW1lbnRJZHM6eFEodS5yb3V0ZVBhcmFtcy5hbGlhc0FuZEV4cGVyaW1lbnRJZHMpfTp1LnJvdXRlUGFyYW1zLHtyZXBsYWNlU3RhdGU6ZCxyb3V0ZUtpbmQ6aCxyb3V0ZVBhcmFtczpmLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9fSksQigoe3JlcGxhY2VTdGF0ZTpjLHJvdXRlS2luZDp1LHJvdXRlUGFyYW1zOmQscmVzZXROYW1lc3BhY2VkU3RhdGU6cH0pPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3M/dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2hCeVJvdXRlS2luZCh1LGQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOmMsYnJvd3NlckluaXRpYXRlZDohMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpwP0ZzLk5FVzpGcy5VTkNIQU5HRUR9fX0pKSksdGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJD11bih0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQpLnBpcGUoSGUoKHtyb3V0ZU1hdGNoOmN9KT0+Qm9vbGVhbihjKSksQigoe3JvdXRlTWF0Y2g6YyxvcHRpb25zOnV9KT0+KHtyb3V0ZU1hdGNoOmMsb3B0aW9uczp1fSkpKSx0aGlzLm5hdmlnYXRlJD1VcigoKT0+dGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJC5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHJhKSksX24oKFtkLHBdKT0+e2xldCBoPW51bGwhPT1wJiZ1cyhwLGQucm91dGVNYXRjaCksZj10aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpO3JldHVybiBofHwhZi5sZW5ndGg/anQoZCk6eG8odGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKS5tYXAobT0+dGhpcy5zdG9yZS5zZWxlY3QobSkucGlwZShIdCgxKSkpKS5waXBlKEIobT0+dm9pZCAwIT09bVswXS5leHBlcmltZW50SWRzJiZtWzBdLmV4cGVyaW1lbnRJZHMubGVuZ3RoPjApLEhlKG09PntpZihtKXtsZXQgQz13aW5kb3cuY29uZmlybSgiWW91IGhhdmUgdW5zYXZlZCBlZGl0cywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlbT8iKTtyZXR1cm4gQyYmdGhpcy5zdG9yZS5kaXNwYXRjaChFUSgpKSxDfXJldHVybiEwfSksQigoKT0+ZCkpfSksR3QodGhpcy5zdG9yZS5zZWxlY3Qoa1EpKSxOdCgoW3tyb3V0ZU1hdGNoOmQsb3B0aW9uczpwfSxoXSk9PntpZighcC5icm93c2VySW5pdGlhdGVkfHwhZC5kZWVwTGlua1Byb3ZpZGVyfHxwLm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5GUk9NX0hJU1RPUlkmJiFxVChkLnJvdXRlS2luZCxwLm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZCxoKSlyZXR1cm47bGV0IGY9ZC5vcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb24mJmQucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM/ZC5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLG09ZC5kZWVwTGlua1Byb3ZpZGVyLmRlc2VyaWFsaXplUXVlcnlQYXJhbXMoZik7dGhpcy5zdG9yZS5kaXNwYXRjaChLMCh7cm91dGVLaW5kOmQucm91dGVLaW5kLHBhcnRpYWxTdGF0ZTptfSkpfSksTnQoKFt7cm91dGVNYXRjaDpkfV0pPT57ZC5hY3Rpb24mJnRoaXMuc3RvcmUuZGlzcGF0Y2goZC5hY3Rpb24pfSksdmkoKFt7cm91dGVNYXRjaDpkLG9wdGlvbnM6cH1dKT0+bnVsbD09PWQuZGVlcExpbmtQcm92aWRlcj9qdCh7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6W10sb3B0aW9uczpwfSk6ZC5kZWVwTGlua1Byb3ZpZGVyLnNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0aGlzLnN0b3JlKS5waXBlKEIoKGgsZik9Pih7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6aCxvcHRpb25zOjA9PT1mP3A6ey4uLnAsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246RnMuVU5DSEFOR0VEfSxyZXBsYWNlU3RhdGU6ITB9fSkpKSksTnQoKHtyb3V0ZTpkfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFowKHthZnRlcjpkfSkpfSksQXIoMCkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpKSxCKChbZCxwXSk9PntsZXQgaD1udWxsPT09cHx8bnVsbD09PWQucm91dGV8fHVzKHAsZC5yb3V0ZSk7cmV0dXJuey4uLmQscHJlc2VydmVIYXNoOmh9fSksTnQoKHtwcmVzZXJ2ZUhhc2g6ZCxwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmgsb3B0aW9uczpmfSk9PnsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5wYXRobmFtZT09PXQucGF0aG5hbWUmJm4ucXVlcnlQYXJhbXMubGVuZ3RoPT09dC5xdWVyeVBhcmFtcy5sZW5ndGgmJm4ucXVlcnlQYXJhbXMuZXZlcnkoKGUsaSk9PntsZXQgcj10LnF1ZXJ5UGFyYW1zW2ldO3JldHVybiBlLmtleT09PXIua2V5JiZlLnZhbHVlPT09ci52YWx1ZX0pfSkoe3BhdGhuYW1lOnAscXVlcnlQYXJhbXM6aH0se3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodGhpcy5sb2NhdGlvbi5nZXRQYXRoKCkpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCl9KXx8KGYucmVwbGFjZVN0YXRlP3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlVXJsKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aChwLGgsZCkpKTp0aGlzLmxvY2F0aW9uLnB1c2hTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxoLGQpKSkpfSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KE9RKSksQigoW3tyb3V0ZTpkLG9wdGlvbnM6cH0saCxmXSk9PntsZXQgbT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIHQubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PUZzLkZST01fSElTVE9SWT90Lm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZDpudWxsPT1lfHx0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5ORVc/YCR7RGF0ZS5ub3coKS50b1N0cmluZygpfToke2Z1bmN0aW9uKCl7bGV0IG49bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMobik7bGV0IHQ9IiI7Zm9yKGxldCBlIG9mIG4pdCs9KGU+PjQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gdH0oKX1gOmV9KDAscCxmKTtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGVEYXRhKHsuLi50aGlzLmxvY2F0aW9uLmdldEhpc3RvcnlTdGF0ZSgpLG5hbWVzcGFjZUlkOm19KSx4bCh7YmVmb3JlOmgsYWZ0ZXI6ZCxiZWZvcmVOYW1lc3BhY2VJZDpmLGFmdGVyTmFtZXNwYWNlSWQ6bX0pfSkpKSx0aGlzLnJvdXRlQ29uZmlncz1zLmdldFJvdXRlQ29uZmlncygpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIEdCKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoVWYpLFIoWVQpLFIoaGMpLFIoUVQpLFIoemYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNRWU9d3Ioe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6bnVsbCxyZWh5ZHJhdGVkRGVlcExpbmtzOltdLHJlZ2lzdGVyZWRSb3V0ZUtleXM6bmV3IFNldH0sU2UoWjAsKG4se2FmdGVyOnR9KT0+KHsuLi5uLG5leHRSb3V0ZTp0fSkpLFNlKHhsLChuLHthZnRlcjp0LGFmdGVyTmFtZXNwYWNlSWQ6ZX0pPT57bGV0IGk9bi5yZWh5ZHJhdGVkRGVlcExpbmtzO3JldHVybiBxVCh0LnJvdXRlS2luZCxlLGkpJiYoaT1bLi4uaV0saS5wdXNoKHtkZWVwTGlua0dyb3VwOlBCKHQucm91dGVLaW5kKSxuYW1lc3BhY2VJZDplfSkpLHsuLi5uLGFjdGl2ZVJvdXRlOnQsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6ZSxyZWh5ZHJhdGVkRGVlcExpbmtzOml9fSksU2UoWFQsKG4se3JvdXRlS2luZHM6dH0pPT4oey4uLm4scmVnaXN0ZXJlZFJvdXRlS2V5czp0fSkpKTtmdW5jdGlvbiBMUShuLHQpe3JldHVybiBNRWUobix0KX12YXIgJDA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbWVQsUVRdLGltcG9ydHM6W2hjLFJyLmZvckZlYXR1cmUoS1QsTFEpLExvLmZvckZlYXR1cmUoW05RXSksUTAsWDBdfSksbn0pKCksQlE9Il9fdGFiX18iLFZRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRmU3RvcmFnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIiksZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZ2xvYmFscyIpLnRmX2dsb2JhbHMuc2V0VXNlSGFzaCghMCksdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5taWdyYXRlTGVnYWN5VVJMU2NoZW1lKCl9Z2V0U3RyaW5nKGUpe3JldHVybiB0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLmdldFN0cmluZyhlKX1zZXRTdHJpbmcoZSxpLHIpe3RoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2Uuc2V0U3RyaW5nKGUsaSxyKX1nZXRQbHVnaW5JZCgpe3JldHVybiB0aGlzLmdldFN0cmluZyhCUSl9c2V0UGx1Z2luSWQoZSxpKXt0aGlzLnNldFN0cmluZyhCUSxlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxBcD1jbGFzc3t9LFdCPW5ldyBzZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyIpLG5yPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPVtdLGUmJih0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9ZS5tYXAoaT0+aSgpKSl9Z2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM/P1tdfXN0YXRpYyBkZWZpbmVHbG9iYWxTZXR0aW5nKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6V0IsbXVsdGk6ITAsdXNlVmFsdWU6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihXQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLG9hPSgoKT0+KGZ1bmN0aW9uKG4pe24uQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsifShvYXx8KG9hPXt9KSksb2EpKSgpLEhRPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLFVRPSJfdGJfZ2xvYmFsX3NldHRpbmdzIix6UT0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiLFpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHFCPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKVHt1aVRvQmFja2VuZChlKXtsZXQgaT17fTtyZXR1cm4gdm9pZCAwIT09ZS5pZ25vcmVPdXRsaWVycyYmKGkuaWdub3JlT3V0bGllcnM9ZS5pZ25vcmVPdXRsaWVycyksdm9pZCAwIT09ZS5zY2FsYXJTbW9vdGhpbmcmJihpLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksdm9pZCAwIT09ZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyYmKGkuYXV0b1JlbG9hZFBlcmlvZEluTXM9ZS5hdXRvUmVsb2FkUGVyaW9kSW5Ncyksdm9pZCAwIT09ZS5wYWdlU2l6ZSYmKGkucGFnaW5hdGlvblNpemU9ZS5wYWdlU2l6ZSksdm9pZCAwIT09ZS50aGVtZU92ZXJyaWRlJiYoaS50aGVtZT1lLnRoZW1lT3ZlcnJpZGUpLHZvaWQgMCE9PWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLHZvaWQgMCE9PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLHZvaWQgMCE9PWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLHZvaWQgMCE9PWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLHZvaWQgMCE9PWUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLHZvaWQgMCE9PWUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLHZvaWQgMCE9PWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyYmKGkuc2luZ2xlU2VsZWN0aW9uSGVhZGVycz1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzJiYoaS5yYW5nZVNlbGVjdGlvbkhlYWRlcnM9ZS5yYW5nZVNlbGVjdGlvbkhlYWRlcnMpLGl9YmFja2VuZFRvVWkoZSl7bGV0IGk9e307cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLGUuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLGUuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmF1dG9SZWxvYWQmJihpLmF1dG9SZWxvYWQ9ZS5hdXRvUmVsb2FkKSxlLmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLGUuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgZS5wYWdpbmF0aW9uU2l6ZSYmKGkucGFnZVNpemU9ZS5wYWdpbmF0aW9uU2l6ZSksZS5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiBlLnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMob2EpKS5oYXMoZS50aGVtZSkmJihpLnRoZW1lT3ZlcnJpZGU9ZS50aGVtZSksZS5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGUuaGFzT3duUHJvcGVydHkoInNpZGVCYXJXaWR0aEluUGVyY2VudCIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkJiYoaS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCksZS5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc0NhcmRNaW5XaWR0aCIpJiYibnVtYmVyIj09dHlwZW9mIGUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLGUuaGFzT3duUHJvcGVydHkoInN0ZXBTZWxlY3RvckVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5zdGVwU2VsZWN0b3JFbmFibGVkJiYoaS5zdGVwU2VsZWN0b3JFbmFibGVkPWUuc3RlcFNlbGVjdG9yRW5hYmxlZCksZS5oYXNPd25Qcm9wZXJ0eSgicmFuZ2VTZWxlY3Rpb25FbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoImxpbmtlZFRpbWVFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoInNpbmdsZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMmJihpLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnM9ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxlLmhhc093blByb3BlcnR5KCJyYW5nZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnJhbmdlU2VsZWN0aW9uSGVhZGVycyYmKGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksalE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKT90aGlzLmdldFNldHRpbmdzKCkucGlwZShOdChpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFVRLEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKHsuLi5pLC4uLmV9KSkpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShIUSksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHpRKX0pLEIoKCk9Pnt9KSk6YW99ZGVzZXJpYWxpemUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh6USk7cmV0dXJuIGp0KHsuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGU/SlNPTi5zdHJpbmdpZnkoe25vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM6TnVtYmVyKGUpfSk6Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEhRKT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFVRKT8/Int9IikpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoSlQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxHUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpaVCx1c2VDbGFzczpqUX0scUIse3Byb3ZpZGU6SlQsdXNlRXhpc3Rpbmc6cUJ9XX0pLG59KSgpLGZjPXdlKCJbUGVyc2lzdGVudCBTZXR0aW5nc10gR2xvYmFsIFNldHRpbmdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLCRUPSJwZXJzaXN0ZW50X3NldHRpbmdzIixXUT1ZKFByKCRUKSxuPT5uLnNob3VsZFBlcnNpc3RTZXR0aW5ncykscVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuY29uZmlnTW9kdWxlPXIsdGhpcy5kYXRhU291cmNlPW8sdGhpcy5pbml0aWFsaXplQW5kVXBkYXRlU2V0dGluZ3MkPVVyKCgpPT57bGV0IHM9dGhpcy5hY3Rpb25zJC5waXBlKFRpKFowKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChXUSkpLEhlKChbLGFdKT0+YSksX24oKCk9PnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSxOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChmYyh7cGFydGlhbFNldHRpbmdzOmF9KSl9KSxubCgwKSxfbigoKT0+dW4oLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcChsPT50aGlzLnN0b3JlLnNlbGVjdChsKS5waXBlKGRpKChjLHUpPT57bGV0IGQ9T2JqZWN0LnZhbHVlcyhjKSxwPU9iamVjdC52YWx1ZXModSk7cmV0dXJuIGQubGVuZ3RoPT09cC5sZW5ndGgmJmQuZXZlcnkoKGgsZik9Pmg9PT1wW2ZdKX0pLENhKDEpKSkpKSxYcygpKTtyZXR1cm4gcy5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPVtdO3JldHVybiB0LnN1YnNjcmliZShMdChlLHI9PmkucHVzaChyKSwoKT0+e2UubmV4dChpKSxlLmNvbXBsZXRlKCl9KSksbi5zdWJzY3JpYmUoTHQoZSwoKT0+e2xldCByPWk7aT1bXSxlLm5leHQocil9LHpsKSksKCk9PntpPW51bGx9fSl9KHMucGlwZShBcig1MDApKSksX24oYT0+e2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gYW87bGV0IGw9e307Zm9yKGxldCBjIG9mIGEpT2JqZWN0LmFzc2lnbihsLGMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MobCl9KSl9LHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKG5yKSxSKFpUKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSUVlPXdyKHtzaG91bGRQZXJzaXN0U2V0dGluZ3M6ITB9KTtmdW5jdGlvbiBZUShuLHQpe3JldHVybiBJRWUobix0KX12YXIgWUI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbbnJdLGltcG9ydHM6W1JyLmZvckZlYXR1cmUoJFQsWVEpLExvLmZvckZlYXR1cmUoW3FRXSksR1FdfSksbn0pKCksdEQ9Y2xhc3N7fSxuRD1jbGFzc3t9LFZhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57bGV0IGk9ZS5pbmRleE9mKCI6Iik7aWYoaT4wKXtsZXQgcj1lLnNsaWNlKDAsaSksbz1yLnRvTG93ZXJDYXNlKCkscz1lLnNsaWNlKGkrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLG8pLHRoaXMuaGVhZGVycy5oYXMobyk/dGhpcy5oZWFkZXJzLmdldChvKS5wdXNoKHMpOnRoaXMuaGVhZGVycy5zZXQobyxbc10pfX0pfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZT0+e2xldCBpPXRbZV0scj1lLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLGkubGVuZ3RoPjAmJih0aGlzLmhlYWRlcnMuc2V0KHIsaSksdGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGUscikpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZVswXTpudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJhIn0pfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX1kZWxldGUodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9bWF5YmVTZXROb3JtYWxpemVkTmFtZSh0LGUpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyhlKXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdCl9aW5pdCgpe3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKHQ9PnRoaXMuYXBwbHlVcGRhdGUodCkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20odCl7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGU9Pnt0aGlzLmhlYWRlcnMuc2V0KGUsdC5oZWFkZXJzLmdldChlKSksdGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdC5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpKX0pfWNsb25lKHQpe2xldCBlPW5ldyBWYTtyZXR1cm4gZS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5sYXp5SW5pdDp0aGlzLGUubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFt0XSksZX1hcHBseVVwZGF0ZSh0KXtsZXQgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBpPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLDA9PT1pLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTtsZXQgcj0oImEiPT09dC5vcD90aGlzLmhlYWRlcnMuZ2V0KGUpOnZvaWQgMCl8fFtdO3IucHVzaCguLi5pKSx0aGlzLmhlYWRlcnMuc2V0KGUscik7YnJlYWs7Y2FzZSJkIjpsZXQgbz10LnZhbHVlO2lmKG8pe2xldCBzPXRoaXMuaGVhZGVycy5nZXQoZSk7aWYoIXMpcmV0dXJuO3M9cy5maWx0ZXIoYT0+LTE9PT1vLmluZGV4T2YoYSkpLDA9PT1zLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSxzKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1mb3JFYWNoKHQpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGU9PnQodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpLHRoaXMuaGVhZGVycy5nZXQoZSkpKX19LFJFZT0vJShcZFthLWYwLTldKS9naSxPRWU9ezQwOiJAIiwiM0EiOiI6IiwyNDoiJCIsIjJDIjoiLCIsIjNCIjoiOyIsIjNEIjoiPSIsIjNGIjoiPyIsIjJGIjoiLyJ9O2Z1bmN0aW9uIFhRKG4pe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZShSRWUsKHQsZSk9Pk9FZVtlXT8/dCl9ZnVuY3Rpb24gZUQobil7cmV0dXJuYCR7bn1gfXZhciBmdT1jbGFzc3tjb25zdHJ1Y3Rvcih0PXt9KXtpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBjbGFzc3tlbmNvZGVLZXkodCl7cmV0dXJuIFhRKHQpfWVuY29kZVZhbHVlKHQpe3JldHVybiBYUSh0KX1kZWNvZGVLZXkodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1kZWNvZGVWYWx1ZSh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfX0sdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgTWFwO3JldHVybiBuLmxlbmd0aD4wJiZuLnJlcGxhY2UoL15cPy8sIiIpLnNwbGl0KCImIikuZm9yRWFjaChyPT57bGV0IG89ci5pbmRleE9mKCI9IiksW3MsYV09LTE9PW8/W3QuZGVjb2RlS2V5KHIpLCIiXTpbdC5kZWNvZGVLZXkoci5zbGljZSgwLG8pKSx0LmRlY29kZVZhbHVlKHIuc2xpY2UobysxKSldLGw9ZS5nZXQocyl8fFtdO2wucHVzaChhKSxlLnNldChzLGwpfSksZX0odC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKGU9PntsZXQgaT10LmZyb21PYmplY3RbZV0scj1BcnJheS5pc0FycmF5KGkpP2kubWFwKGVEKTpbZUQoaSldO3RoaXMubWFwLnNldChlLHIpfSkpOnRoaXMubWFwPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9Z2V0KHQpe3RoaXMuaW5pdCgpO2xldCBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX1hcHBlbmRBbGwodCl7bGV0IGU9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2gobz0+e2UucHVzaCh7cGFyYW06aSx2YWx1ZTpvLG9wOiJhIn0pfSk6ZS5wdXNoKHtwYXJhbTppLHZhbHVlOnIsb3A6ImEifSl9KSx0aGlzLmNsb25lKGUpfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAodD0+e2xldCBlPXRoaXMuZW5jb2Rlci5lbmNvZGVLZXkodCk7cmV0dXJuIHRoaXMubWFwLmdldCh0KS5tYXAoaT0+ZSsiPSIrdGhpcy5lbmNvZGVyLmVuY29kZVZhbHVlKGkpKS5qb2luKCImIil9KS5maWx0ZXIodD0+IiIhPT10KS5qb2luKCImIil9Y2xvbmUodCl7bGV0IGU9bmV3IGZ1KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBlLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxlLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdCh0KSxlfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2godD0+dGhpcy5tYXAuc2V0KHQsdGhpcy5jbG9uZUZyb20ubWFwLmdldCh0KSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKHQ9Pntzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBlPSgiYSI9PT10Lm9wP3RoaXMubWFwLmdldCh0LnBhcmFtKTp2b2lkIDApfHxbXTtlLnB1c2goZUQodC52YWx1ZSkpLHRoaXMubWFwLnNldCh0LnBhcmFtLGUpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09dC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pO2JyZWFrfXtsZXQgaT10aGlzLm1hcC5nZXQodC5wYXJhbSl8fFtdLHI9aS5pbmRleE9mKGVEKHQudmFsdWUpKTstMSE9PXImJmkuc3BsaWNlKHIsMSksaS5sZW5ndGg+MD90aGlzLm1hcC5zZXQodC5wYXJhbSxpKTp0aGlzLm1hcC5kZWxldGUodC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19O2Z1bmN0aW9uIFFRKG4pe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZuIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gS1Eobil7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmbiBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gWlEobil7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJm4gaW5zdGFuY2VvZiBGb3JtRGF0YX12YXIgamY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7bGV0IG87aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fHI/KHRoaXMuYm9keT12b2lkIDAhPT1pP2k6bnVsbCxvPXIpOm89aSxvJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIW8ucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFvLndpdGhDcmVkZW50aWFscyxvLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPW8ucmVzcG9uc2VUeXBlKSxvLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9by5oZWFkZXJzKSxvLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9by5jb250ZXh0KSxvLnBhcmFtcyYmKHRoaXMucGFyYW1zPW8ucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBWYSksdGhpcy5jb250ZXh0fHwodGhpcy5jb250ZXh0PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWFwLnNldCh0LGUpLHRoaXN9Z2V0KHQpe3JldHVybiB0aGlzLm1hcC5oYXModCl8fHRoaXMubWFwLnNldCh0LHQuZGVmYXVsdFZhbHVlKCkpLHRoaXMubWFwLmdldCh0KX1kZWxldGUodCl7cmV0dXJuIHRoaXMubWFwLmRlbGV0ZSh0KSx0aGlzfWhhcyh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfWtleXMoKXtyZXR1cm4gdGhpcy5tYXAua2V5cygpfX0pLHRoaXMucGFyYW1zKXtsZXQgcz10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT1zLmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9ZTtlbHNle2xldCBhPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PWE/Ij8iOmE8ZS5sZW5ndGgtMT8iJiI6IiIpK3N9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IGZ1LHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlFRKHRoaXMuYm9keSl8fEtRKHRoaXMuYm9keSl8fFpRKHRoaXMuYm9keSl8fGZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmbiBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30odGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIGZ1P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fFpRKHRoaXMuYm9keSk/bnVsbDpLUSh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOlFRKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgZnU/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZSh0PXt9KXtsZXQgZT10Lm1ldGhvZHx8dGhpcy5tZXRob2QsaT10LnVybHx8dGhpcy51cmwscj10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsbz12b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxzPXZvaWQgMCE9PXQud2l0aENyZWRlbnRpYWxzP3Qud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLGE9dm9pZCAwIT09dC5yZXBvcnRQcm9ncmVzcz90LnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3MsbD10LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxjPXQucGFyYW1zfHx0aGlzLnBhcmFtcyx1PXQuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT10LnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKHQuc2V0SGVhZGVycykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0SGVhZGVyc1twXSksbCkpLHQuc2V0UGFyYW1zJiYoYz1PYmplY3Qua2V5cyh0LnNldFBhcmFtcykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0UGFyYW1zW3BdKSxjKSksbmV3IGpmKGUsaSxvLHtwYXJhbXM6YyxoZWFkZXJzOmwsY29udGV4dDp1LHJlcG9ydFByb2dyZXNzOmEscmVzcG9uc2VUeXBlOnIsd2l0aENyZWRlbnRpYWxzOnN9KX19LElwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TZW50PTBdPSJTZW50IixuW24uVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixuW24uUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIixuW24uRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsbltuLlVzZXI9NV09IlVzZXIifShJcHx8KElwPXt9KSksSXApKSgpLGZDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDAsaT0iT0siKXt0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgVmEsdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxpLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0sbUM9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9SXAuUmVzcG9uc2VIZWFkZXJ9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBtQyh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19LGVfPWNsYXNzIGV4dGVuZHMgZkN7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPUlwLlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT10LmJvZHk/dC5ib2R5Om51bGx9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBlXyh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0sbWQ9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifTogJHt0LnN0YXR1c30gJHt0LnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPXQuZXJyb3J8fG51bGx9fTtmdW5jdGlvbiBYQihuLHQpe3JldHVybntib2R5OnQsaGVhZGVyczpuLmhlYWRlcnMsY29udGV4dDpuLmNvbnRleHQsb2JzZXJ2ZTpuLm9ic2VydmUscGFyYW1zOm4ucGFyYW1zLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc319dmFyIEdmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5oYW5kbGVyPWV9cmVxdWVzdChlLGkscj17fSl7bGV0IG87aWYoZSBpbnN0YW5jZW9mIGpmKW89ZTtlbHNle2xldCBsLGM7bD1yLmhlYWRlcnMgaW5zdGFuY2VvZiBWYT9yLmhlYWRlcnM6bmV3IFZhKHIuaGVhZGVycyksci5wYXJhbXMmJihjPXIucGFyYW1zIGluc3RhbmNlb2YgZnU/ci5wYXJhbXM6bmV3IGZ1KHtmcm9tT2JqZWN0OnIucGFyYW1zfSkpLG89bmV3IGpmKGUsaSx2b2lkIDAhPT1yLmJvZHk/ci5ib2R5Om51bGwse2hlYWRlcnM6bCxjb250ZXh0OnIuY29udGV4dCxwYXJhbXM6YyxyZXBvcnRQcm9ncmVzczpyLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpyLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpyLndpdGhDcmVkZW50aWFsc30pfWxldCBzPWp0KG8pLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gYm4odCk/X24obix0LDEpOl9uKG4sMSl9KGw9PnRoaXMuaGFuZGxlci5oYW5kbGUobCkpKTtpZihlIGluc3RhbmNlb2YgamZ8fCJldmVudHMiPT09ci5vYnNlcnZlKXJldHVybiBzO2xldCBhPXMucGlwZShIZShsPT5sIGluc3RhbmNlb2YgZV8pKTtzd2l0Y2goci5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiJzdHJpbmciIT10eXBlb2YgbC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiBsLmJvZHl9KSk7ZGVmYXVsdDpyZXR1cm4gYS5waXBlKEIobD0+bC5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICR7ci5vYnNlcnZlfX1gKX19ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixlLGkpfWdldChlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsZSxpKX1oZWFkKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSEVBRCIsZSxpKX1qc29ucChlLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIixlLHtwYXJhbXM6KG5ldyBmdSkuYXBwZW5kKGksIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJPUFRJT05TIixlLGkpfXBhdGNoKGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsZSxYQihyLGkpKX1wb3N0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixlLFhCKHIsaSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIixlLFhCKHIsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHREKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksckQ9bmV3IHNlKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLE5FZT0oKCk9PntjbGFzcyBue2ludGVyY2VwdChlLGkpe3JldHVybiBpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTEVlPS9eXClcXVx9Jyw/XG4vLEpRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy54aHJGYWN0b3J5PWV9aGFuZGxlKGUpe2lmKCJKU09OUCI9PT1lLm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEh0dHBDbGllbnRKc29ucE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBRdChpPT57bGV0IHI9dGhpcy54aHJGYWN0b3J5LmJ1aWxkKCk7aWYoci5vcGVuKGUubWV0aG9kLGUudXJsV2l0aFBhcmFtcyksZS53aXRoQ3JlZGVudGlhbHMmJihyLndpdGhDcmVkZW50aWFscz0hMCksZS5oZWFkZXJzLmZvckVhY2goKGgsZik9PnIuc2V0UmVxdWVzdEhlYWRlcihoLGYuam9pbigiLCIpKSksZS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWUuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtsZXQgaD1lLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWgmJnIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixoKX1pZihlLnJlc3BvbnNlVHlwZSl7bGV0IGg9ZS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtyLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1oP2g6InRleHQifWxldCBvPWUuc2VyaWFsaXplQm9keSgpLHM9bnVsbCxhPSgpPT57aWYobnVsbCE9PXMpcmV0dXJuIHM7bGV0IGg9ci5zdGF0dXNUZXh0fHwiT0siLGY9bmV3IFZhKHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG09ZnVuY3Rpb24obil7cmV0dXJuInJlc3BvbnNlVVJMImluIG4mJm4ucmVzcG9uc2VVUkw/bi5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdChuLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT9uLmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0ocil8fGUudXJsO3JldHVybiBzPW5ldyBtQyh7aGVhZGVyczpmLHN0YXR1czpyLnN0YXR1cyxzdGF0dXNUZXh0OmgsdXJsOm19KSxzfSxsPSgpPT57bGV0e2hlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOkN9PWEoKSxfPW51bGw7MjA0IT09ZiYmKF89dHlwZW9mIHIucmVzcG9uc2U+InUiP3IucmVzcG9uc2VUZXh0OnIucmVzcG9uc2UpLDA9PT1mJiYoZj1fPzIwMDowKTtsZXQgeT1mPj0yMDAmJmY8MzAwO2lmKCJqc29uIj09PWUucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIF8pe2xldCBJPV87Xz1fLnJlcGxhY2UoTEVlLCIiKTt0cnl7Xz0iIiE9PV8/SlNPTi5wYXJzZShfKTpudWxsfWNhdGNoKEEpe189SSx5JiYoeT0hMSxfPXtlcnJvcjpBLHRleHQ6X30pfX15PyhpLm5leHQobmV3IGVfKHtib2R5Ol8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpLGkuY29tcGxldGUoKSk6aS5lcnJvcihuZXcgbWQoe2Vycm9yOl8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpfSxjPWg9PntsZXR7dXJsOmZ9PWEoKSxtPW5ldyBtZCh7ZXJyb3I6aCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6Znx8dm9pZCAwfSk7aS5lcnJvcihtKX0sdT0hMSxkPWg9Pnt1fHwoaS5uZXh0KGEoKSksdT0hMCk7bGV0IGY9e3R5cGU6SXAuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6aC5sb2FkZWR9O2gubGVuZ3RoQ29tcHV0YWJsZSYmKGYudG90YWw9aC50b3RhbCksInRleHQiPT09ZS5yZXNwb25zZVR5cGUmJiEhci5yZXNwb25zZVRleHQmJihmLnBhcnRpYWxUZXh0PXIucmVzcG9uc2VUZXh0KSxpLm5leHQoZil9LHA9aD0+e2xldCBmPXt0eXBlOklwLlVwbG9hZFByb2dyZXNzLGxvYWRlZDpoLmxvYWRlZH07aC5sZW5ndGhDb21wdXRhYmxlJiYoZi50b3RhbD1oLnRvdGFsKSxpLm5leHQoZil9O3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksci5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnNlbmQobyksaS5uZXh0KHt0eXBlOklwLlNlbnR9KSwoKT0+e3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCksci5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjKSxlLnJlcG9ydFByb2dyZXNzJiYoci5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZCksbnVsbCE9PW8mJnIudXBsb2FkJiZyLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIucmVhZHlTdGF0ZSE9PXIuRE9ORSYmci5hYm9ydCgpfX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJEI9bmV3IHNlKCJYU1JGX0NPT0tJRV9OQU1FIiksZVY9bmV3IHNlKCJYU1JGX0hFQURFUl9OQU1FIiksaUQ9Y2xhc3N7fSxWRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kb2M9ZSx0aGlzLnBsYXRmb3JtPWksdGhpcy5jb29raWVOYW1lPXIsdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gZSE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPXVUKGUsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9ZSksdGhpcy5sYXN0VG9rZW59fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIoaWQpLFIoJEIpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRQj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy50b2tlblNlcnZpY2U9ZSx0aGlzLmhlYWRlck5hbWU9aX1pbnRlcmNlcHQoZSxpKXtsZXQgcj1lLnVybC50b0xvd2VyQ2FzZSgpO2lmKCJHRVQiPT09ZS5tZXRob2R8fCJIRUFEIj09PWUubWV0aG9kfHxyLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8ci5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBpLmhhbmRsZShlKTtsZXQgbz10aGlzLnRva2VuU2VydmljZS5nZXRUb2tlbigpO3JldHVybiBudWxsIT09byYmIWUuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKSYmKGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxvKX0pKSxpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihpRCksUihlVikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhFZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5iYWNrZW5kPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY2hhaW49bnVsbH1oYW5kbGUoZSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2xldCBpPXRoaXMuaW5qZWN0b3IuZ2V0KHJELFtdKTt0aGlzLmNoYWluPWkucmVkdWNlUmlnaHQoKHIsbyk9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubmV4dD10LHRoaXMuaW50ZXJjZXB0b3I9ZX1oYW5kbGUodCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX19KHIsbyksdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIobkQpLFIoem4pKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVRWU9KCgpPT57Y2xhc3MgbntzdGF0aWMgZGlzYWJsZSgpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UUIsdXNlQ2xhc3M6TkVlfV19fXN0YXRpYyB3aXRoT3B0aW9ucyhlPXt9KXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTokQix1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTplVix1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1FCLHtwcm92aWRlOnJELHVzZUV4aXN0aW5nOlFCLG11bHRpOiEwfSx7cHJvdmlkZTppRCx1c2VDbGFzczpWRWV9LHtwcm92aWRlOiRCLHVzZVZhbHVlOiJYU1JGLVRPS0VOIn0se3Byb3ZpZGU6ZVYsdXNlVmFsdWU6IlgtWFNSRi1UT0tFTiJ9XX0pLG59KSgpLCRRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0dmLHtwcm92aWRlOnRELHVzZUNsYXNzOkhFZX0sSlEse3Byb3ZpZGU6bkQsdXNlRXhpc3Rpbmc6SlF9XSxpbXBvcnRzOltVRWUud2l0aE9wdGlvbnMoe2Nvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLGhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiJ9KV19KSxufSkoKSxvRD0iZmVhdHVyZSIsdF89UHIob0QpLFBwPVkodF8sbj0+bi5pc0ZlYXR1cmVGbGFnc0xvYWRlZCksQm89WSh0XyxuPT4oey4uLm4uZGVmYXVsdEZsYWdzLC4uLm4uZmxhZ092ZXJyaWRlc30pKSx0Sz1ZKHRfLG49Pm4uZGVmYXVsdEZsYWdzKSxnQz1ZKHRfLG49Pm4uZmxhZ092ZXJyaWRlc3x8e30pLFdmPVkodF8sbj0+bi5tZXRhZGF0YSksbl89WSh0XyxuPT57bGV0IHQ9e307Zm9yKGxldCBlIGluIG4uZmxhZ092ZXJyaWRlcyl7bGV0IGk9bi5tZXRhZGF0YVtlXTtpJiZpLnF1ZXJ5UGFyYW1PdmVycmlkZSYmaS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbiYmKHRbZV09bi5mbGFnT3ZlcnJpZGVzW2VdKX1yZXR1cm4gdH0pLG5LPVkoQm8sbj0+bi5pc0F1dG9EYXJrTW9kZUFsbG93ZWQpLG11PVkoQm8sbj0+bnVsbCE9PW4uZW5hYmxlRGFya01vZGVPdmVycmlkZT9uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6bi5kZWZhdWx0RW5hYmxlRGFya01vZGUpLHNEPVkoQm8sbj0+bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlKSxpSz1ZKEJvLG49Pm4uZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnMpLHJLPVkoQm8sbj0+bi5pbkNvbGFiKSxhRD1ZKEJvLG49Pm4ubWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQpLG9LPVkoQm8sbj0+bi5lbmFibGVkTGlua2VkVGltZSksc0s9WShCbyxuPT5uLmZvcmNlU3ZnKSxhSz1ZKEJvLG49Pm4uZW5hYmxlZFNjYWxhckRhdGFUYWJsZSksbEs9WShCbyxuPT52b2lkIDAhPT1uLnNob3dGbGFncyksY0s9WShCbyxuPT5uLmFsbG93UmFuZ2VTZWxlY3Rpb24pLHVLPVkoQm8sbj0+bi5lbmFibGVkUHJvc3BlY3RpdmVGb2IpLGxEPVkoQm8sbj0+bi5lbmFibGVTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uKSxkSz1ZKEJvLG49Pm4uZW5hYmxlSHBhcmFtc0luVGltZVNlcmllcyk7ZnVuY3Rpb24gakVlKG4sdCl7aWYoIW4pcmV0dXJuO2xldCBlPW4gaW5zdGFuY2VvZiBGb3JtRGF0YT9mdW5jdGlvbihuKXtsZXQgdD17fTtmb3IobGV0W2UsaV1vZiBuLmVudHJpZXMoKSl0W2VdPWk7cmV0dXJuIHR9KG4pOm47cmV0dXJuIHQ/e1t0XTpKU09OLnN0cmluZ2lmeShlKX06ZX1mdW5jdGlvbiB0VihuKXtsZXQgdD1uLmhlYWRlcnN8fG5ldyBWYTtyZXR1cm4gdD10LmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSx7Li4ubixoZWFkZXJzOnR9fXZhciBndT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFwcFJvb3RQcm92aWRlcj1lLHRoaXMuaHR0cD1pLHRoaXMuc3RvcmU9cn1yZXNvbHZlQXBwUm9vdChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCIvIik/dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKTplfWdldChlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSl9cG9zdChlLGkscj17fSxvKXtyZXR1cm4gcj10VihyKSx0aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShzPT5Cb29sZWFuKHMpKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChySykpLF9uKChbLHNdKT0+e2xldCBhPXRoaXMucmVzb2x2ZUFwcFJvb3QoZSk7cmV0dXJuIHM/dGhpcy5odHRwLmdldChhLHtoZWFkZXJzOnIuaGVhZGVycz8/e30scGFyYW1zOmpFZShpLG8pfSk6dGhpcy5odHRwLnBvc3QoYSxpLHIpfSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5yZXNvbHZlQXBwUm9vdChlKSxpLHRWKHIpKX1kZWxldGUoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLnJlc29sdmVBcHBSb290KGUpLHRWKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih6ZiksUihHZiksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGlfPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2d1XSxpbXBvcnRzOlskUSxRMF19KSxufSkoKSxDbD0oKCk9PihmdW5jdGlvbihuKXtuLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIn0oQ2x8fChDbD17fSkpLENsKSkoKSxwSz1uZXcgc2UoIlRlbnNvckJvYXJkIGJyYW5kIG5hbWUiKSxmbz0oKCk9PihmdW5jdGlvbihuKXtuLlNURVA9InN0ZXAiLG4uV0FMTF9USU1FPSJ3YWxsX3RpbWUiLG4uUkVMQVRJVkU9InJlbGF0aXZlIn0oZm98fChmbz17fSkpLGZvKSkoKSxPcj0oKCk9PihmdW5jdGlvbihuKXtuLk9GRlNFVD0ib2Zmc2V0IixuLk9WRVJMQVk9Im92ZXJsYXkifShPcnx8KE9yPXt9KSksT3IpKSgpO2Z1bmN0aW9uIGhLKG4pe2xldCB0PUNsLlVOS05PV047cmV0dXJuIG4gaW5zdGFuY2VvZiBtZCYmKDQwND09PW4uc3RhdHVzJiYodD1DbC5OT1RfRk9VTkQpLDQwMz09PW4uc3RhdHVzJiYodD1DbC5QRVJNSVNTSU9OX0RFTklFRCkpLEdsKG5ldyBfQyh0KSl9dmFyIF9DPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFpbHVyZUNvZGU9dH19LHVEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5odHRwPWUsdGhpcy50ZkJhY2tlbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9ZmV0Y2hQbHVnaW5zTGlzdGluZyhlKXtsZXQgaT1mdW5jdGlvbihuKXtpZighbi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0IGUgb2Ygbil0LmFwcGVuZCgiZXhwZXJpbWVudGFsUGx1Z2luIixlKTtyZXR1cm4gdH0oZSkscj1pP2BkYXRhL3BsdWdpbnNfbGlzdGluZz8ke2kudG9TdHJpbmcoKX1gOiJkYXRhL3BsdWdpbnNfbGlzdGluZyI7cmV0dXJuIHRoaXMuaHR0cC5nZXQocikucGlwZShDbyhoSykpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4geG8oW3RoaXMuaHR0cC5nZXQoImRhdGEvZW52aXJvbm1lbnQiKSxsbyh0aGlzLnRmQmFja2VuZC5lbnZpcm9ubWVudFN0b3JlLnJlZnJlc2goKSldKS5waXBlKEIoKFtyXSk9PnIpLENvKGhLKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoZ3UpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmSz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt1RF0saW1wb3J0czpbaV9dfSksbn0pKCksRWU9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLG5bbi5MT0FERUQ9MV09IkxPQURFRCIsbltuLkxPQURJTkc9Ml09IkxPQURJTkciLG5bbi5GQUlMRUQ9M109IkZBSUxFRCJ9KEVlfHwoRWU9e30pKSxFZSkpKCksX3U9d2UoIltDb3JlXSBQbHVnaW4gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGREPXdlKCJbQ29yZV0gUGx1Z2luIFVybCBIYXNoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtSz13ZSgiW0NvcmVdIExvYWRlZCIpLHdsPXdlKCJbQ29yZV0gVXNlciBUcmlnZ2VyZWQgUmVsb2FkIiksSGE9d2UoIltDb3JlXSBBdXRvIFJlbG9hZCIpLHBEPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBSZXF1ZXN0ZWQiKSxxZj13ZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZDPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggUmVxdWVzdGVkIiksZkQ9d2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFN1Y2Nlc3NmdWwiKSxtRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggRmFpbGVkIiksZ0Q9d2UoIltDb3JlXSBFbnZpcm9ubWVudCBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ0s9d2UoIltDb3JlXSBSdW4gU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfSz13ZSgiW0NvcmVdIFJ1biBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscl89d2UoIltDb3JlXSBTaWRlIEJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gWWYobix0LGUpe2xldCBpPU9iamVjdC5rZXlzKG4pLHI9ey4uLm4sLi4udCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnt9fTtyZXR1cm57aW5pdGlhbFN0YXRlOnIscmVkdWNlcnM6d3IocixTZSh4bCwoYSx7YmVmb3JlOmwsYWZ0ZXI6YyxiZWZvcmVOYW1lc3BhY2VJZDp1LGFmdGVyTmFtZXNwYWNlSWQ6ZH0pPT57bGV0IHA9YTtyZXR1cm4gdSE9PWQmJihwPWZ1bmN0aW9uKGEsbCxjKXtsZXQgdT17Li4uYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlfTtpZihsKXtsZXQgcD17fTtmb3IobGV0IGggb2YgaSlwW2hdPWFbaF07dT17Li4udSxbbF06cH19bGV0IGQ9e307cmV0dXJuIGEucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZT8uW2NdP2Q9YS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlW2NdOmwmJihkPW4pLHsuLi5hLC4uLmQscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTp1fX0oYSx1LGQpKSxlJiYocD1lKHAsbCxjKSkscH0pKX19ZnVuY3Rpb24gWGYoLi4ubil7cmV0dXJuKHQsZSk9PntsZXQgaT10O2ZvcihsZXQgciBvZiBuKWk9cihpLGUpO3JldHVybiBpfX12YXIgeUM9e2FjdGl2ZVBsdWdpbjpudWxsLHBsdWdpbnM6e30sY29yZURhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsLGZhaWx1cmVDb2RlOm51bGx9LGVudmlyb25tZW50OntkYXRhX2xvY2F0aW9uOiIiLHdpbmRvd190aXRsZToiIn0scG9seW1lclJ1bnNMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBvbHltZXJJbnRlcm9wUnVuczpbXSxwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0LHNpZGVCYXJXaWR0aEluUGVyY2VudDoyMH0sWUVlPXdyKHlDLFNlKF91LGRELChuLHtwbHVnaW46dH0pPT4oey4uLm4sYWN0aXZlUGx1Z2luOnR9KSksU2UocEQsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOkVlLkxPQURJTkd9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHZDLChuLHtmYWlsdXJlQ29kZTp0fSk9Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkZBSUxFRCxmYWlsdXJlQ29kZTp0fX0pKSxTZShxZiwobix7cGx1Z2luczp0fSk9PntsZXQgZT1PYmplY3Qua2V5cyh0KS5maW5kKHM9PnRbc10uZW5hYmxlZCl8fG51bGwsaT1uLmFjdGl2ZVBsdWdpbnx8ZSxyPURhdGUubm93KCksbz1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBvbHltZXJSdW5zTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BREVEJiYobz17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyfSksey4uLm4sYWN0aXZlUGx1Z2luOmksY29yZURhdGFMb2FkU3RhdGU6byxwbHVnaW5zOnQscGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6cixmYWlsdXJlQ29kZTpudWxsfX19KSxTZShoRCxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR30scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR319KSksU2UoZkQsbj0+e2xldCB0PURhdGUubm93KCksZT1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBsdWdpbnNMaXN0TG9hZGVkLnN0YXRlPT09RWUuTE9BREVEJiYoZT17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5Nczp0fSksey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ZSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9fX0pLFNlKG1ELG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoZ0QsKG4se2Vudmlyb25tZW50OnR9KT0+KHsuLi5uLGVudmlyb25tZW50OnR9KSksU2UoX0ssKG4se3J1bnM6dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5zOnR9KSksU2UoZ0ssKG4se25leHRTZWxlY3Rpb246dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldCh0KX0pKSxTZShyXywobix7d2lkdGhJblBlcmNlbnQ6dH0pPT4oey4uLm4sc2lkZUJhcldpZHRoSW5QZXJjZW50Ok1hdGgubWluKE1hdGgubWF4KDAsdCksMTAwKX0pKSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXsuLi5ufSxpPXQuc2lkZUJhcldpZHRoSW5QZXJjZW50O3JldHVybiJudW1iZXIiPT10eXBlb2YgaSYmaT49MCYmaTw9MTAwJiYoZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9aSksZX0pKSx7cmVkdWNlcnM6WEVlfT1ZZih5Qyx7fSk7ZnVuY3Rpb24gdksobix0KXtyZXR1cm4gWGYoWUVlLFhFZSkobix0KX12YXIgUnA9UHIoImNvcmUiKSx5RD1ZKFJwLG49Pm4ucGx1Z2luc0xpc3RMb2FkZWQpLHlLPVkoUnAsbj0+bi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSksYks9WShScCxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLnN0YXRlKSxvXz1ZKFJwLG49Pm4uY29yZURhdGFMb2FkU3RhdGUubGFzdExvYWRlZFRpbWVJbk1zKSxkcz1ZKFJwLG49Pm4uYWN0aXZlUGx1Z2luKSxzXz1ZKFJwLG49Pm4ucGx1Z2lucyksYkQ9WShScCxuPT5uLmVudmlyb25tZW50KSx4RD1ZKFJwLG49Pm4uc2lkZUJhcldpZHRoSW5QZXJjZW50KSx4Sz1uZXcgU2V0KFtmaS5DT01QQVJFX0VYUEVSSU1FTlQsZmkuRVhQRVJJTUVOVCxmaS5OT1RfU0VUXSksQ0s9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLndlYmFwcERhdGFTb3VyY2U9cix0aGlzLnRmQmFja2VuZD17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfSx0aGlzLm9uRGFzaGJvYXJkTG9hZCQ9dW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKG1LLHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKEhhLHdsKSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpKSxIZSgoWyxvXSk9PnhLLmhhcyhvKSksYmcoMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPVVyKCgpPT57bGV0IG89dGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoeUQpLHRoaXMuc3RvcmUuc2VsZWN0KGlLKSksSGUoKFsse3N0YXRlOmF9XSk9PmEhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChwRCgpKSksX24oKFssLGFdKT0+ZnVuY3Rpb24oLi4ubil7bGV0IHQ9SGMobiksZT1GUyhuKTtyZXR1cm4gZS5sZW5ndGg/bmV3IFF0KGk9PntsZXQgcj1lLm1hcCgoKT0+W10pLG89ZS5tYXAoKCk9PiExKTtpLmFkZCgoKT0+e3I9bz1udWxsfSk7Zm9yKGxldCBzPTA7IWkuY2xvc2VkJiZzPGUubGVuZ3RoO3MrKylhaShlW3NdKS5zdWJzY3JpYmUoTHQoaSxhPT57aWYocltzXS5wdXNoKGEpLHIuZXZlcnkobD0+bC5sZW5ndGgpKXtsZXQgbD1yLm1hcChjPT5jLnNoaWZ0KCkpO2kubmV4dCh0P3QoLi4ubCk6bCksci5zb21lKChjLHUpPT4hYy5sZW5ndGgmJm9bdV0pJiZpLmNvbXBsZXRlKCl9fSwoKT0+e29bc109ITAsIXJbc10ubGVuZ3RoJiZpLmNvbXBsZXRlKCl9KSk7cmV0dXJuKCk9PntyPW89bnVsbH19KTphb30odGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoUGx1Z2luc0xpc3RpbmcoYSksdGhpcy5mZXRjaEVudmlyb25tZW50KCkpLnBpcGUoQigoW2xdKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gocWYoe3BsdWdpbnM6bH0pKX0pLENvKGw9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHZDKGwgaW5zdGFuY2VvZiBfQz97ZmFpbHVyZUNvZGU6bC5mYWlsdXJlQ29kZX06e2ZhaWx1cmVDb2RlOkNsLlVOS05PV059KSksYW8pKSkpKTtyZXR1cm4gdW4obyx0aGlzLm9uRGFzaGJvYXJkTG9hZCQucGlwZShCKChbLGFdKT0+YSksdmkoYT0+YSE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9qdChbXSk6dGhpcy5zdG9yZS5zZWxlY3QoaHUpLnBpcGUoZGkoKGwsYyk9PntsZXQgdT1PYmplY3QuZW50cmllcyhsKSxkPW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoYykpO2lmKHUubGVuZ3RoIT09ZC5zaXplKXJldHVybiExO2ZvcihsZXRbcCxoXW9mIHUpaWYoIWQuZ2V0KHApfHxkLmdldChwKS5hbGlhc1RleHQhPT1oLmFsaWFzVGV4dHx8ZC5nZXQocCkuYWxpYXNOdW1iZXIhPT1oLmFsaWFzTnVtYmVyKXJldHVybiExO3JldHVybiEwfSksbmwoMCksYmcoNTAwLHZvaWQgMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pKSksR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuc3RvcmUuc2VsZWN0KHlLKSksSGUoKFssYSxsXSk9PnhLLmhhcyhhKSYmbC5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChoRCgpKX0pLHZpKCgpPT50aGlzLnJlZnJlc2hQb2x5bWVyUnVucygpKSxOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goZkQoKSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2gobUQoKSksYW8pKSkpfSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmRpc3BhdGNoQ2hhbmdlUGx1Z2luJD1VcigoKT0+dW4odGhpcy5vbkRhc2hib2FyZExvYWQkLHRoaXMuYWN0aW9ucyQucGlwZShUaShxZikpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksQigoWyxvXSk9Pm8pLGRpKCksSGUobz0+bnVsbCE9PW8pLEh0KDEpLE50KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKF91KHtwbHVnaW46b30pKX0pKSx7ZGlzcGF0Y2g6ITF9KX1yZWZyZXNoUG9seW1lclJ1bnMoKXtyZXR1cm4gbG8odGhpcy50ZkJhY2tlbmQucmVmLnJ1bnNTdG9yZS5yZWZyZXNoKCkpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoRW52aXJvbm1lbnQoKS5waXBlKE50KGU9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGdEKHtlbnZpcm9ubWVudDplfSkpfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksblY9bmV3IHNlKCJDb3JlIEZlYXR1cmUgQ29uZmlnIik7ZnVuY3Rpb24gd0sobil7cmV0dXJue2luaXRpYWxTdGF0ZTp7Li4ueUMsYWN0aXZlUGx1Z2luOm4uZ2V0UGx1Z2luSWQoKXx8bnVsbH19fWZ1bmN0aW9uIFpFZSgpe3JldHVybiBZKHhELG49Pih7c2lkZUJhcldpZHRoSW5QZXJjZW50Om59KSl9dmFyIE1sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOm5WLGRlcHM6W0FwXSx1c2VGYWN0b3J5OndLfV0saW1wb3J0czpbTG8uZm9yRmVhdHVyZShbQ0tdKSxSci5mb3JGZWF0dXJlKCJjb3JlIix2SyxuViksZkssbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhaRWUpXX0pLG59KSgpLE1LPW5ldyBzZSgiW0FsZXJ0XSBBY3Rpb24tVG8tQWxlcnQgUHJvdmlkZXIiKSx2dT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGxldCBpIG9mIGV8fFtdKWZvcihsZXQgciBvZiBpKXtpZih0aGlzLnByb3ZpZGVycy5oYXMoci5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHtyLmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgYWxlcnRzLiBNdWx0aXBsZSBhbGVydHMgZm9yIHRoZSBzYW1lIGFjdGlvbiBpcyBub3QgYWxsb3dlZC5gKTt0aGlzLnByb3ZpZGVycy5zZXQoci5hY3Rpb25DcmVhdG9yLnR5cGUsci5hbGVydEZyb21BY3Rpb24pfX1nZXRBbGVydEZyb21BY3Rpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlckFsZXJ0QWN0aW9ucyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOk1LLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihNSyw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLENEPXdlKCJbUnVuc10gRmV0Y2ggUnVucyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPcD13ZSgiW1J1bnNdIEZldGNoIFJ1bnMgU3VjY2VlZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYV89d2UoIltSdW5zXSBGZXRjaCBSdW5zIEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHdEPXdlKCJbUnVuc10gUnVuIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTUQ9d2UoIltSdW5zXSBTaW5nbGUgUnVuIFNlbGVjdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU0Q9d2UoIltSdW5zXSBSdW4gUGFnZSBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVEPXdlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFBhZ2luYXRpb24gT3B0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxURD13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBTb3J0IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxiQz13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBSZWdleCBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEREPXdlKCJbUnVuc10gUnVuIENvbG9yIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRD13ZSgiW1J1bnNdIFJ1biBUYWJsZSBTaG93biIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGxfPXdlKCJbUnVuc10gUnVuIEdyb3VwIEJ5IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrcD0oKCk9PihmdW5jdGlvbihuKXtuLlNUQVRVU19VTktOT1dOPSJTVEFUVVNfVU5LTk9XTiIsbi5TVEFUVVNfU1VDQ0VTUz0iU1RBVFVTX1NVQ0NFU1MiLG4uU1RBVFVTX0ZBSUxVUkU9IlNUQVRVU19GQUlMVVJFIixuLlNUQVRVU19SVU5OSU5HPSJTVEFUVVNfUlVOTklORyJ9KGtwfHwoa3A9e30pKSxrcCkpKCksS249KCgpPT4oZnVuY3Rpb24obil7bltuLkRJU0NSRVRFPTBdPSJESVNDUkVURSIsbltuLklOVEVSVkFMPTFdPSJJTlRFUlZBTCJ9KEtufHwoS249e30pKSxLbikpKCksSUQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUWY9e307U08oUWYse2hwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9Pm9WLGhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9PnNWLGhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkOigpPT5hVn0pO3ZhciBvVj13ZSgiW0hwYXJhbXNdIEhwYXJhbXMgRGlzY3JldGUgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1Y9d2UoIltIcGFyYW1zXSBIcGFyYW1zIEludGVydmFsIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFWPXdlKCJbSHBhcmFtc10gSHBhcmFtcyBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBLZihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLm5dLnNvcnQoKSl9ZnVuY3Rpb24geEMobil7bGV0IHQ9bmV3IE1hcCxlPW5ldyBNYXAsaT1uZXcgTWFwO2ZvcihsZXQgciBvZiBuKWZvcihsZXRbbyxzXW9mIHIpaWYocy50eXBlPT09S24uRElTQ1JFVEUpe2xldHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfT1lLmdldChvKXx8e3Bvc3NpYmxlVmFsdWVzOm5ldyBTZXQsdmFsdWVzOm5ldyBTZXR9O2ZvcihsZXQgYyBvZiBzLmZpbHRlclZhbHVlcylsLmFkZChjKTtmb3IobGV0IGMgb2Ygcy5wb3NzaWJsZVZhbHVlcylhLmFkZChjKTtlLnNldChvLHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfSl9ZWxzZXtsZXQgYT1pLmdldChvKTtpLnNldChvLHtmaWx0ZXJMb3dlclZhbHVlOk1hdGgubWluKHMuZmlsdGVyTG93ZXJWYWx1ZSxhPy5maWx0ZXJMb3dlclZhbHVlPz8xLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgocy5maWx0ZXJVcHBlclZhbHVlLGE/LmZpbHRlclVwcGVyVmFsdWU/Py0xLzApLG1pblZhbHVlOk1hdGgubWluKHMubWluVmFsdWUsYT8ubWluVmFsdWU/PzEvMCksbWF4VmFsdWU6TWF0aC5tYXgocy5tYXhWYWx1ZSxhPy5tYXhWYWx1ZT8/LTEvMCl9KX1mb3IobGV0W3Ise3ZhbHVlczpvLHBvc3NpYmxlVmFsdWVzOnN9XW9mIGUpdC5zZXQocix7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5zXSxmaWx0ZXJWYWx1ZXM6Wy4uLm9dfSk7Zm9yKGxldFtyLHttaW5WYWx1ZTpvLG1heFZhbHVlOnMsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6bH1db2YgaSl7aWYodC5oYXMocikpe2xldCBjPXQuZ2V0KHIpO2lmKGMudHlwZT09PUtuLkRJU0NSRVRFJiZjLnBvc3NpYmxlVmFsdWVzLnNvbWUodT0+dSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENhbm5vdCBjb21iaW5lIGhwYXJhbSwgJHtyfSwgYXMgaXQgaXMgb2YgbWl4ZWQgdHlwZXMuYCl9dC5zZXQocix7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOm8sbWF4VmFsdWU6cyxmaWx0ZXJMb3dlclZhbHVlOmEsZmlsdGVyVXBwZXJWYWx1ZTpsfSl9cmV0dXJuIHR9ZnVuY3Rpb24gUEQobil7bGV0IHQ9bmV3IE1hcDtmb3IobGV0IGUgb2Ygbilmb3IobGV0W2kscl1vZiBlKXtsZXQgbz10LmdldChpKTt0LnNldChpLHt0eXBlOktuLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsLi4ubyxtaW5WYWx1ZTpNYXRoLm1pbihyLm1pblZhbHVlLG8/Lm1pblZhbHVlPz8xLzApLG1heFZhbHVlOk1hdGgubWF4KHIubWF4VmFsdWUsbz8ubWF4VmFsdWU/Py0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4oci5maWx0ZXJMb3dlclZhbHVlLG8/LmZpbHRlckxvd2VyVmFsdWU/PzEvMCksZmlsdGVyVXBwZXJWYWx1ZTpNYXRoLm1heChyLmZpbHRlclVwcGVyVmFsdWUsbz8uZmlsdGVyVXBwZXJWYWx1ZT8/LTEvMCl9KX1yZXR1cm4gdH12YXIgaTFlPXdyKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxTZShvViwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309dCxzPUtmKGUpLGE9bi5maWx0ZXJzW3NdPz97aHBhcmFtczpuZXcgTWFwfSxsPWEuaHBhcmFtcy5nZXQoaSk7aWYobCYmbC50eXBlIT09S24uRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArS25bbC50eXBlXSk7bGV0IGM9eEMoZS5maWx0ZXIoaD0+Qm9vbGVhbihuLnNwZWNzW2hdKSkubWFwKGg9Pm4uc3BlY3NbaF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtpZihjLnR5cGUhPT1Lbi5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2xldCB1PW5ldyBTZXQoYy5wb3NzaWJsZVZhbHVlcyksZD1bLi4ucl0uZmlsdGVyKGg9PiF1LmhhcyhoKSk7aWYoZC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBOZXcgZmlsdGVyIGZvciAke2l9IGhhcyBtb3JlIHRoYW4gb25lIHZhbHVlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHNwZWMuIEJhZCB2YWx1ZXM6ICR7ZC5qb2luKCIsICIpfWApO2xldCBwPW5ldyBNYXAoYS5ocGFyYW1zKTtyZXR1cm4gcC5zZXQoaSx7Li4ubCx0eXBlOktuLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6byxwb3NzaWJsZVZhbHVlczpbLi4udV0sZmlsdGVyVmFsdWVzOnJ9KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW3NdOnsuLi5hLGhwYXJhbXM6cH19fX0pLFNlKHNWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxocGFyYW1OYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1LZihlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9bC5ocGFyYW1zLmdldChpKTtpZihjJiZjLnR5cGUhPT1Lbi5JTlRFUlZBTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTmV3IGludGVydmFsIGZpbHRlciBvZiAke2l9IGNvbmZsaWN0cyBleGlzdGluZyBmaWx0ZXIgb2YgYCtLbltjLnR5cGVdKTtsZXQgdT14QyhlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGhwYXJhLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYodS50eXBlIT09S24uSU5URVJWQUwpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgaW50ZXJ2YWwgdHlwZS5gKTtsZXQgZD1uZXcgTWFwKGwuaHBhcmFtcyk7cmV0dXJuIGQuc2V0KGksey4uLmMsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6dS5taW5WYWx1ZSxtYXhWYWx1ZTp1Lm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLGhwYXJhbXM6ZH19fX0pLFNlKGFWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxtZXRyaWNUYWc6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309dCxhPUtmKGUpLGw9bi5maWx0ZXJzW2FdPz97bWV0cmljczpuZXcgTWFwLGhwYXJhbXM6bmV3IE1hcH0sYz1QRChlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIWMpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IG1ldHJpYywgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2xldCB1PWwubWV0cmljcy5nZXQoaSksZD1uZXcgTWFwKGwubWV0cmljcyk7cmV0dXJuIGQuc2V0KGksey4uLnUsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6Yy5taW5WYWx1ZSxtYXhWYWx1ZTpjLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLG1ldHJpY3M6ZH19fX0pLFNlKE9wLChuLHQpPT57aWYoMD09PU9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4uc3BlY3N9LGk9bmV3IE1hcCxyPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0IHM9bmV3IE1hcCxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx7cnVuczp1LG1ldGFkYXRhOmR9PXQubmV3UnVuc0FuZE1ldGFkYXRhW29dO2ZvcihsZXQgcCBvZiB1KXtsZXQgaD1kLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbcC5pZF07aWYoaClmb3IobGV0IGYgb2YgaC5tZXRyaWNzKXtsZXQgbT1pLmdldChmLnRhZyk7aS5zZXQoZi50YWcse21pbjptP01hdGgubWluKG0ubWluLGYudmFsdWUpOmYudmFsdWUsbWF4Om0/TWF0aC5tYXgobS5tYXgsZi52YWx1ZSk6Zi52YWx1ZX0pfX1mb3IobGV0e25hbWU6cCxkb21haW46aH1vZiBkLmhwYXJhbVNwZWNzKWlmKGgudHlwZT09PUtuLkRJU0NSRVRFKXtsZXQgZj1sLmdldChwKXx8bmV3IFNldDtmb3IobGV0IG0gb2YgaC52YWx1ZXMpZi5hZGQobSk7bC5zZXQocCxmKX1lbHNle2xldCBmPWMuZ2V0KHApO2Muc2V0KHAse21pblZhbHVlOmY/TWF0aC5taW4oaC5taW5WYWx1ZSxmLm1pblZhbHVlKTpoLm1pblZhbHVlLG1heFZhbHVlOmY/TWF0aC5tYXgoaC5tYXhWYWx1ZSxmLm1heFZhbHVlKTpoLm1heFZhbHVlfSl9Zm9yKGxldCBwIG9mIGQubWV0cmljU3BlY3Mpci5hZGQocC50YWcpO2ZvcihsZXRbcCxoXW9mIGwpcy5zZXQocCx7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5oXSxmaWx0ZXJWYWx1ZXM6Wy4uLmhdfSk7Zm9yKGxldFtwLHttaW5WYWx1ZTpoLG1heFZhbHVlOmZ9XW9mIGMpcy5zZXQocCx7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOmgsbWF4VmFsdWU6ZixmaWx0ZXJMb3dlclZhbHVlOmgsZmlsdGVyVXBwZXJWYWx1ZTpmfSk7Zm9yKGxldCBwIG9mIHIpe2xldCBoPWkuZ2V0KHApLGY9aD8ubWluPz8wLG09aD8ubWF4Pz8wO2Euc2V0KHAse3R5cGU6S24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpmLG1heFZhbHVlOm0sZmlsdGVyTG93ZXJWYWx1ZTpmLGZpbHRlclVwcGVyVmFsdWU6bX0pfWVbb109e2hwYXJhbTp7Li4uZVtvXT8uaHBhcmFtLHNwZWNzOmQuaHBhcmFtU3BlY3MsZGVmYXVsdEZpbHRlcnM6c30sbWV0cmljOnsuLi5lW29dPy5tZXRyaWMsc3BlY3M6ZC5tZXRyaWNTcGVjcyxkZWZhdWx0RmlsdGVyczphfX19cmV0dXJuey4uLm4sc3BlY3M6ZX19KSk7ZnVuY3Rpb24gVEsobix0KXtyZXR1cm4gaTFlKG4sdCl9dmFyIFJEPSJocGFyYW1zIixESz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShSRCxUSyldfSksbn0pKCksT0Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0RLXX0pLG59KSgpLEFLPSJkYXRhL3BsdWdpbi9ocGFyYW1zIjtmdW5jdGlvbiByMWUobix0KXtyZXR1cm5gJHt0fS8ke259YH1mdW5jdGlvbiBvMWUobil7bGV0IHQ7cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIil9KG4pP3t0eXBlOktuLkRJU0NSRVRFLHZhbHVlczpuLmRvbWFpbkRpc2NyZXRlfTpmdW5jdGlvbihuKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluSW50ZXJ2YWwiKX0obik/ey4uLm4uZG9tYWluSW50ZXJ2YWwsdHlwZTpLbi5JTlRFUlZBTH06e3R5cGU6S24uSU5URVJWQUwsbWluVmFsdWU6LTEvMCxtYXhWYWx1ZToxLzB9LHtkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGRpc3BsYXlOYW1lOm4uZGlzcGxheU5hbWUsbmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsZG9tYWluOnR9fWZ1bmN0aW9uIHMxZShuKXtsZXR7bmFtZTp0LC4uLmV9PW47cmV0dXJuey4uLmUsdGFnOnQudGFnfX12YXIgSUs9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoImRhdGEvcnVucyIpLnBpcGUoQihpPT5pLm1hcChyPT4oe2lkOnIxZShyLGUpLG5hbWU6cixzdGFydFRpbWU6MH0pKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKGUpe3JldHVybiB0aGlzLmh0dHAucG9zdChgL2V4cGVyaW1lbnQvJHtlfS8ke0FLfS9leHBlcmltZW50YCx7ZXhwZXJpbWVudE5hbWU6ZX0se30sInJlcXVlc3QiKS5waXBlKEIocj0+e2xldCBvPVtdO2ZvcihsZXQgYSBvZiByLmhwYXJhbUluZm9zKW8ucHVzaCh7aHBhcmFtOmEubmFtZX0pO2ZvcihsZXQgYSBvZiByLm1ldHJpY0luZm9zKW8ucHVzaCh7bWV0cmljOmEubmFtZX0pO3JldHVybntleHBlcmltZW50SHBhcmFtc0luZm86cixsaXN0U2Vzc2lvblJlcXVlc3RQYXJhbXM6e2V4cGVyaW1lbnROYW1lOmUsYWxsb3dlZFN0YXR1c2VzOltrcC5TVEFUVVNfRkFJTFVSRSxrcC5TVEFUVVNfUlVOTklORyxrcC5TVEFUVVNfU1VDQ0VTUyxrcC5TVEFUVVNfVU5LTk9XTl0sY29sUGFyYW1zOm8sc3RhcnRJbmRleDowLHNsaWNlU2l6ZToxZTZ9fX0pLF9uKCh7ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsbGlzdFNlc3Npb25SZXF1ZXN0UGFyYW1zOm99KT0+dGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHtBS30vc2Vzc2lvbl9ncm91cHNgLG8se30sInJlcXVlc3QiKS5waXBlKEIocz0+KHtleHBlcmltZW50SHBhcmFtc0luZm86cixzZXNzaW9uR3JvdXBzTGlzdDpzfSkpKSksQigoe2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLHNlc3Npb25Hcm91cHNMaXN0Om99KT0+e2xldCBzPXt9O2ZvcihsZXQgYSBvZiBvLnNlc3Npb25Hcm91cHMpe2xldCBsPU9iamVjdC5lbnRyaWVzKGEuaHBhcmFtcykubWFwKGM9PntsZXRbdSxkXT1jO3JldHVybntuYW1lOnUsdmFsdWU6ZH19KTtmb3IobGV0IGMgb2YgYS5zZXNzaW9ucylmb3IobGV0IHUgb2YgYy5tZXRyaWNWYWx1ZXMpe2xldCBwPWAke2V9LyR7dS5uYW1lLmdyb3VwP2Ake2MubmFtZX0vJHt1Lm5hbWUuZ3JvdXB9YDpjLm5hbWV9YCxoPXNbcF18fHttZXRyaWNzOltdLGhwYXJhbXM6bH07aC5tZXRyaWNzLnB1c2goe3RhZzp1Lm5hbWUudGFnLHRyYWluaW5nU3RlcDp1LnRyYWluaW5nU3RlcCx2YWx1ZTp1LnZhbHVlfSksc1twXT1ofX1yZXR1cm57aHBhcmFtU3BlY3M6ci5ocGFyYW1JbmZvcy5tYXAobzFlKSxtZXRyaWNTcGVjczpyLm1ldHJpY0luZm9zLm1hcChzMWUpLHJ1blRvSHBhcmFtc0FuZE1ldHJpY3M6c319KSxDbyhyPT5yIGluc3RhbmNlb2YgbWQmJjQwMD09PXIuc3RhdHVzP2p0KHtocGFyYW1TcGVjczpbXSxtZXRyaWNTcGVjczpbXSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnt9fSk6R2wocikpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFBLPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOklELHVzZUNsYXNzOklLfV19KSxufSkoKSxSSz1ZKFByKCJhbGVydHMiKSxuPT5uLmxhdGVzdEFsZXJ0KSxGRD0iZXhwZXJpbWVudHMiLGMxZT1ZKFByKEZEKSxuPT5uLmRhdGEpLE5EPVkoYzFlLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZDplfT10O3JldHVybiBuLmV4cGVyaW1lbnRNYXBbZV18fG51bGx9KTtmdW5jdGlvbiBMRChuLHQsZSl7cmV0dXJuIG48dD90Om4+ZT9lOm59ZnVuY3Rpb24gY18obix0LGUpe2xldCBpPUxEKG4uc3RhcnQuc3RlcCx0LGUpLHI9bi5lbmQ/TEQobi5lbmQuc3RlcCx0LGUpOm51bGw7cmV0dXJue3N0YXJ0U3RlcDppLGVuZFN0ZXA6cixjbGlwcGVkOmkhPT1uLnN0YXJ0LnN0ZXB8fHIhPT0obi5lbmQ/LnN0ZXA/P251bGwpfX1mdW5jdGlvbiBCRChuLHQpe2xldCBlPXRbbi5pZF07cmV0dXJuIGUmJmUudmlzaWJsZSYmIUJvb2xlYW4oZS5hdXgpfWZ1bmN0aW9uIGxWKG4sdCl7cmV0dXJuIHQ/bjp7c3RhcnQ6bi5zdGFydCxlbmQ6bnVsbH19ZnVuY3Rpb24gY1Yobix0LGUpe3JldHVybiBsVihmdW5jdGlvbihuLHttaW5TdGVwOnQsbWF4U3RlcDplfSl7cmV0dXJue3N0YXJ0OntzdGVwOkxEKG4uc3RhcnQuc3RlcCx0LGUpfSxlbmQ6bi5lbmQ/e3N0ZXA6TEQobi5lbmQuc3RlcCx0LGUpfTpudWxsfX0obix0KSxlKX12YXIgV249KCgpPT4oZnVuY3Rpb24obil7bi5TQ0FMQVJTPSJzY2FsYXJzIixuLkhJU1RPR1JBTVM9Imhpc3RvZ3JhbXMiLG4uSU1BR0VTPSJpbWFnZXMifShXbnx8KFduPXt9KSksV24pKSgpLFlpPSgoKT0+KGZ1bmN0aW9uKG4pe24uU1RFUD0ic3RlcCIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG4uV0FMTF9USU1FPSJ3YWxsdGltZSJ9KFlpfHwoWWk9e30pKSxZaSkpKCksQ0M9InRpbWVzZXJpZXMiO2Z1bmN0aW9uIExLKG4pe3JldHVybiBuPT09V24uU0NBTEFSU3x8bj09PVduLkhJU1RPR1JBTVN8fG49PT1Xbi5JTUFHRVN9dmFyIHAxZT1bV24uSU1BR0VTXTtmdW5jdGlvbiBVYShuKXtyZXR1cm4gcDFlLmluY2x1ZGVzKG4pfXZhciBoMWU9W1duLkhJU1RPR1JBTVMsV24uSU1BR0VTXTtmdW5jdGlvbiB6YShuKXtyZXR1cm4gaDFlLmluY2x1ZGVzKG4pfWZ1bmN0aW9uIHVWKG4pe3JldHVybiB6YShuLnBsdWdpbil9dmFyIHl1PWNsYXNze307ZnVuY3Rpb24gSEQobil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImVycm9yIil9dmFyIGRWPSJkYXRhL3BsdWdpbi90aW1lc2VyaWVzIjtmdW5jdGlvbiBCSyhuKXtsZXQgdD1uLmluZGV4T2YoIi8iKTtyZXR1cm57cnVuOm4uc3Vic3RyaW5nKHQrMSksZXhwZXJpbWVudElkOm4uc3Vic3RyaW5nKDAsdCl9fWZ1bmN0aW9uIEhLKG4sdCl7cmV0dXJuYCR7dH0vJHtufWB9ZnVuY3Rpb24gVksobix0KXtsZXR7cnVuVG9TZXJpZXM6ZSxydW46aSwuLi5yfT1uLG89ey4uLnJ9O3JldHVybiBlJiYoby5ydW5Ub1Nlcmllcz1wVihlLHQpKSxpJiYoby5ydW5JZD1ISyhpLHQpKSxvfWZ1bmN0aW9uIHBWKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbSEsoaSx0KV09bltpXSk7cmV0dXJuIGV9dmFyIFVLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmh0dHA9ZSx0aGlzLnN0b3JlPWl9ZmV0Y2hUYWdNZXRhZGF0YShlKXtsZXQgaT1lLm1hcChvPT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke299LyR7ZFZ9L3RhZ3NgKS5waXBlKEIoYT0+ZnVuY3Rpb24obix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpe2xldCByPWk7aWYoVWEocikpe2xldHt0YWdSdW5TYW1wbGVkSW5mbzpvLC4uLnN9PW5bcl0sYT17fTtmb3IobGV0IGwgaW4gbylvLmhhc093blByb3BlcnR5KGwpJiYoYVtsXT1wVihvW2xdLHQpKTtlW3JdPXsuLi5zLHRhZ1J1blNhbXBsZWRJbmZvOmF9fWVsc2V7bGV0e3J1blRhZ0luZm86bywuLi5zfT1uW3JdO2Vbcl09ey4uLnMscnVuVGFnSW5mbzpwVihvLHQpfX19cmV0dXJuIGV9KGEsbykpKSkscj10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssb10pPT5vKSk7cmV0dXJuIHhvKGkpLnBpcGUoR3QociksQigoW28sc10pPT57bGV0IGE9ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIG9mIE9iamVjdC52YWx1ZXMoV24pKWlmKFVhKGkpKXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319O2xldHt0YWdEZXNjcmlwdGlvbnM6cix0YWdSdW5TYW1wbGVkSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfTtsZXQgcz10W2ldLnRhZ1J1blNhbXBsZWRJbmZvO2ZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvKSl7c1thXT1zW2FdfHx7fTtmb3IobGV0IGwgb2YgT2JqZWN0LmtleXMob1thXSkpc1thXVtsXT1vW2FdW2xdfX1lbHNle3RbaV09dFtpXXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSxydW5UYWdJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIscnVuVGFnSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfSx0W2ldLnJ1blRhZ0luZm89ey4uLnRbaV0ucnVuVGFnSW5mbywuLi5vfX1yZXR1cm4gdH0obyk7cmV0dXJuIHN8fChhW1duLklNQUdFU109e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX0pLGF9KSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe2xldCBpPWUubWFwKHI9PntpZih6YShyLnBsdWdpbikpe2xldHtydW5JZDpsLC4uLmN9PXIse3J1bjp1LGV4cGVyaW1lbnRJZDpkfT1CSyhsKSxwPXsuLi5jLHJ1bjp1fTtyZXR1cm4gdGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChwLGQpLnBpcGUoQigoe3Jlc3BvbnNlOmgsZXhwZXJpbWVudElkOmZ9KT0+VksoaCxmKSkpfWxldHtleHBlcmltZW50SWRzOm8sLi4uc309cjtyZXR1cm4geG8oby5tYXAobD0+dGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChzLGwpKSkucGlwZShCKGw9PntsZXR7cnVuVG9TZXJpZXM6YyxlcnJvcjp1LC4uLmR9PWxbMF0ucmVzcG9uc2UscD1kO2ZvcihsZXR7cmVzcG9uc2U6aCxleHBlcmltZW50SWQ6Zn1vZiBsKXtsZXQgbT1WSyhoLGYpO2lmKHAuZXJyb3IpY29udGludWU7bGV0e3J1blRvU2VyaWVzOkMsZXJyb3I6X309bTtpZihfKXAuZXJyb3I9XyxwLnJ1blRvU2VyaWVzPXZvaWQgMDtlbHNle3AucnVuVG9TZXJpZXM9cC5ydW5Ub1Nlcmllc3x8e307Zm9yKGxldCB5IG9mIE9iamVjdC5rZXlzKEMpKXAucnVuVG9TZXJpZXNbeV09Q1t5XX19cmV0dXJuIHB9KSl9KTtyZXR1cm4geG8oaSl9ZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QoZSxpKXtsZXQgcj1uZXcgRm9ybURhdGE7cmV0dXJuIHIuYXBwZW5kKCJyZXF1ZXN0cyIsSlNPTi5zdHJpbmdpZnkoW2VdKSksdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7aX0vJHtkVn0vdGltZVNlcmllc2AscikucGlwZShCKG89Pih7cmVzcG9uc2U6b1swXSxleHBlcmltZW50SWQ6aX0pKSl9aW1hZ2VVcmwoZSl7cmV0dXJuYCR7ZFZ9L2ltYWdlRGF0YT9pbWFnZUlkPSR7ZX1gfWRvd25sb2FkVXJsKGUsaSxyLG8pe2xldCBsLHtydW46cyxleHBlcmltZW50SWQ6YX09Qksocik7aWYoZSE9PVduLlNDQUxBUlMpdGhyb3cgbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQ6IGRvd25sb2FkVXJsIGZvciAke2V9IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtpZihsPSJzY2FsYXJzL3NjYWxhcnMiLCFhKXRocm93IG5ldyBFcnJvcigiZXhwZXJpbWVudElkIGlzIGVtcHR5OyBpdCBpcyByZXF1aXJlZCB0byBmb3JtIGRvd25sb2FkVXJsLiIpO3JldHVybmAvZXhwZXJpbWVudC8ke2F9L2RhdGEvcGx1Z2luL3NjYWxhcnMvc2NhbGFycz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzppLHJ1bjpzLGZvcm1hdDpvfSl9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF8xZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLFVEPSgoKT0+e2NsYXNzIG57Z2V0UGFyYW1zKCl7cmV0dXJuIF8xZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd0M9InRiX2ZlYXR1cmVfZmxhZ19zdG9yYWdlX2tleSIsaFY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXJ5UGFyYW1zPWV9Z2V0RmVhdHVyZXMoZSxpKXtsZXQgcj1lP3RoaXMuZ2V0UGFydGlhbEZlYXR1cmVzRnJvbU1lZGlhUXVlcnkoKTp7fSxvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoZSxbaSxyXSk9PntsZXQgbz1mdW5jdGlvbihuLHQpe2xldCBlPW4ucXVlcnlQYXJhbU92ZXJyaWRlO2lmKCFlfHwhdC5oYXMoZSkpcmV0dXJuIG51bGw7bGV0IGk9dC5nZXQoZSk7cmV0dXJuIG51bGw9PWk/bnVsbDpuLnBhcnNlVmFsdWUoaSl9KHIsdCk7cmV0dXJuIG51bGwhPT1vJiYoZVtpXT1vKSxlfSx7fSl9KGksdGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSk7cmV0dXJuey4uLnIsLi4uT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpKS5maWx0ZXIoKFthXSk9PmlbYV0pKSwuLi5vfX1wZXJzaXN0RmVhdHVyZUZsYWdzKGUpe2xldCByPXsuLi50aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSwuLi5lfTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0od0MsSlNPTi5zdHJpbmdpZnkocikpfXJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoZSl7bGV0IGk9dGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCk7aWYobnVsbCE9aVtlXSl7aWYoZGVsZXRlIGlbZV0sMD09PU9iamVjdC5rZXlzKGkpLmxlbmd0aClyZXR1cm4gdm9pZCB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0od0MpO3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh3QyxKU09OLnN0cmluZ2lmeShpKSl9fXJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl7d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHdDKX1nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCl7bGV0IGU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHdDKTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksekQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR0s9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaFYsVUQse3Byb3ZpZGU6ekQsdXNlQ2xhc3M6aFZ9XX0pLG59KSgpLE1DPXdlKCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksakQ9d2UoIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFpmPXdlKCJbRkVBVFVSRSBGTEFHXSBTdG9yZSB0aGUgZmVhdHVyZSBmbGFncyBpbiBwZXJzaXN0ZW50IGxvY2FsU3RvcmFnZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZwPXdlKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdV89d2UoIltGRUFUVVJFIEZMQUddIFJlc2V0IGFsbCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIiksV0s9d2UoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLHFLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy50ZkZlYXR1cmVGbGFncz17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWZlYXR1cmUtZmxhZ3MiKS50Zl9mZWF0dXJlX2ZsYWdzfSx0aGlzLmdldEZlYXR1cmVGbGFncyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShXSyksc3IodGhpcy5zdG9yZS5zZWxlY3QobkspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSksQigoWyxvLHNdKT0+e2xldCBhPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhvLHMpO3JldHVybiBNQyh7ZmVhdHVyZXM6YX0pfSkpKSx0aGlzLnVwZGF0ZVBvbHltZXJGZWF0dXJlRmxhZ3MkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoTUMpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KEJvKSx0aGlzLnN0b3JlLnNlbGVjdChuXykpLE50KChbLG8sc10pPT57dGhpcy50ZkZlYXR1cmVGbGFncy5yZWYuc2V0RmVhdHVyZUZsYWdzKG8scyl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5zdG9yZUZlYXR1cmVGbGFnJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKFpmKSxOdCgoe2ZsYWdzOm99KT0+e3RoaXMuZGF0YVNvdXJjZS5wZXJzaXN0RmVhdHVyZUZsYWdzKG8pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShGcCksTnQoKHtmbGFnczpvfSk9PntvLmZvckVhY2gocz0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKHMpfSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEFsbEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKHVfKSxOdCgoKT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpfSkpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIFdLKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoekQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRSz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX1pbnRlcmNlcHQoZSxpKXtyZXR1cm4gdGhpcy5zdG9yZS5waXBlKGZuKG5fKSxmdW5jdGlvbihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGk9PmkucGlwZShuP0hlKChyLG8pPT5uKHIsbyxpKSk6TXMsSHQoMSksZT9kaih0KTpoaigoKT0+bmV3IF9nKSl9KCksdmkocj0+KGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KCJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiLEpTT04uc3RyaW5naWZ5KHIpKX0pLGkuaGFuZGxlKGUpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBlKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gZ2Qobil7cmV0dXJuImZhbHNlIiE9PW59dmFyIGZWPXtzY2FsYXJzQmF0Y2hTaXplOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2NhbGFyc0JhdGNoU2l6ZSIscGFyc2VWYWx1ZTpwYXJzZUludH0sZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnM6e2RlZmF1bHRWYWx1ZTpbXSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImV4cGVyaW1lbnRhbFBsdWdpbiIscGFyc2VWYWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4gbj9uLnNwbGl0KCIsIik6W119fSxlbmFibGVkTGlua2VkVGltZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlTGlua2VkVGltZSIscGFyc2VWYWx1ZTpnZH0sZW5hYmxlZFNjYWxhckRhdGFUYWJsZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlRGF0YVRhYmxlIixwYXJzZVZhbHVlOmdkfSxmb3JjZVN2Zzp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZm9yY2VTVkciLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6e2RlZmF1bHRWYWx1ZTpudWxsLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxkZWZhdWx0RW5hYmxlRGFya01vZGU6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImRhcmtNb2RlIixwYXJzZVZhbHVlOmdkfSxpc0F1dG9EYXJrTW9kZUFsbG93ZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0saW5Db2xhYjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToidGVuc29yYm9hcmRDb2xhYiIscGFyc2VWYWx1ZTpnZH0sbWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0sc2hvd0ZsYWdzOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2hvd0ZsYWdzIixwYXJzZVZhbHVlOm49Pm59LGFsbG93UmFuZ2VTZWxlY3Rpb246e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6ImFsbG93UmFuZ2VTZWxlY3Rpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZWRQcm9zcGVjdGl2ZUZvYjp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlUHJvc3BlY3RpdmVGb2IiLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb246e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXM6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXMiLHBhcnNlVmFsdWU6Z2R9fSxtVj17aXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITEsZGVmYXVsdEZsYWdzOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKHQsW2UsaV0pPT4odFtlXT1pLmRlZmF1bHRWYWx1ZSx0KSx7fSl9KGZWKSxtZXRhZGF0YTpmVixmbGFnT3ZlcnJpZGVzOnt9fSxnVj1uZXcgc2UoIltGZWF0dXJlIEZsYWddIFN0b3JlIENvbmZpZyIpO2Z1bmN0aW9uIFpLKCl7cmV0dXJue2luaXRpYWxTdGF0ZTptVn19dmFyIE0xZT13cihtVixTZShNQywobix7ZmVhdHVyZXM6dH0pPT4oey4uLm4saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITAsZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnR9fSkpLFNlKGpELChuLHtlbmFibGVEYXJrTW9kZTp0fSk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTp0fX0pKSxTZShaZiwobix0KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50LmZsYWdzfX0pKSxTZShGcCwobix0KT0+e2lmKCF0fHwhdC5mbGFnc3x8IXQuZmxhZ3MubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLmZsYWdPdmVycmlkZXN9O3JldHVybiB0LmZsYWdzLmZvckVhY2goaT0+e2RlbGV0ZSBlW2ldfSksey4uLm4sZmxhZ092ZXJyaWRlczplfX0pLFNlKHVfLG49Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnt9fSkpLFNlKGZjLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57aWYoIXQudGhlbWVPdmVycmlkZSlyZXR1cm4gbjtsZXQgZTtzd2l0Y2godC50aGVtZU92ZXJyaWRlKXtjYXNlIG9hLkJST1dTRVJfREVGQVVMVDplPW51bGw7YnJlYWs7Y2FzZSBvYS5EQVJLOmU9ITA7YnJlYWs7Y2FzZSBvYS5MSUdIVDplPSExfXJldHVybnsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOmV9fX0pKTtmdW5jdGlvbiBKSyhuLHQpe3JldHVybiBNMWUobix0KX1mdW5jdGlvbiBTMWUoKXtyZXR1cm4gWShzRCxuPT5udWxsPT09bj97dGhlbWVPdmVycmlkZTpvYS5CUk9XU0VSX0RFRkFVTFR9Ont0aGVtZU92ZXJyaWRlOm4/b2EuREFSSzpvYS5MSUdIVH0pfXZhciBkXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpnVix1c2VGYWN0b3J5OlpLfSx7cHJvdmlkZTpyRCx1c2VDbGFzczpRSyxtdWx0aTohMH1dLGltcG9ydHM6W0dLLFJyLmZvckZlYXR1cmUob0QsSkssZ1YpLExvLmZvckZlYXR1cmUoW3FLXSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhTMWUpXX0pLG59KSgpLEdEPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOnl1LHVzZUNsYXNzOlVLfV0saW1wb3J0czpbZF8saV9dfSksbn0pKCksbW89KCgpPT4oZnVuY3Rpb24obil7bi5ERUZBVUxUPSJkZWZhdWx0IixuLkFMUEhBQkVUSUNBTD0iYWxwaGFiZXRpY2FsIixuLkFTQ0VORElORz0iYXNjZW5kaW5nIixuLkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLG4uTkVBUkVTVD0ibmVhcmVzdCIsbi5ORUFSRVNUX1k9Im5lYXJlc3RfWSJ9KG1vfHwobW89e30pKSxtbykpKCksV0Q9Im1ldHJpY3MiLHNhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uT1ZFUlJJREVfQVNfRU5BQkxFRD0xXT0iT1ZFUlJJREVfQVNfRU5BQkxFRCIsbltuLk9WRVJSSURFX0FTX0RJU0FCTEVEPTJdPSJPVkVSUklERV9BU19ESVNBQkxFRCJ9KHNhfHwoc2E9e30pKSxzYSkpKCkscUQ9e2NhcmRNaW5XaWR0aDpudWxsLHRvb2x0aXBTb3J0Om1vLkFMUEhBQkVUSUNBTCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6WWkuU1RFUCxoaWRlRW1wdHlDYXJkczohMCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOk9yLk9GRlNFVH07ZnVuY3Rpb24gX2Qobix0LGUsaSl7cmV0dXJuIG5bdF0uaGFzT3duUHJvcGVydHkoZSk/VWEodCk/blt0XVtlXS5oYXNPd25Qcm9wZXJ0eShpKT9uW3RdW2VdW2ldOm51bGw6blt0XVtlXTpudWxsfWZ1bmN0aW9uIFlEKG4sdCxlLGkpe2lmKFVhKHQpKXtsZXQgcz17Li4ublt0XX0sYT1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5oYXNPd25Qcm9wZXJ0eSh0KT97Li4ublt0XX06e30sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn0ocyxlLGkpO3JldHVybiBzW2VdPWEsc31sZXQgcj17Li4ublt0XX0sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn1mdW5jdGlvbiBfVihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9ZnVuY3Rpb24gWEQobix0LGUpe2xldCBpPXsuLi5lfTtmb3IobGV0IHIgb2YgdClpW3JdPW47cmV0dXJuIGl9ZnVuY3Rpb24gcF8obix0LGUsaSl7aWYoVWEodCkpe2xldCBvPW5bdF0udGFnUnVuU2FtcGxlZEluZm87cmV0dXJuIG8uaGFzT3duUHJvcGVydHkoZSk/T2JqZWN0LmtleXMob1tlXSkuZmlsdGVyKGE9Pmk8b1tlXVthXS5tYXhTYW1wbGVzUGVyU3RlcCk6W119bGV0IHI9blt0XS50YWdUb1J1bnM7cmV0dXJuIHIuaGFzT3duUHJvcGVydHkoZSk/cltlXTpbXX1mdW5jdGlvbiBBMWUobix0KXtyZXR1cm4gbi5wbHVnaW49PT10LnBsdWdpbiYmbi50YWc9PT10LnRhZyYmbi5zYW1wbGU9PT10LnNhbXBsZSYmKG4ucnVuSWQ9PT10LnJ1bklkfHwhbi5ydW5JZCYmIXQucnVuSWQpfWZ1bmN0aW9uIHZWKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9bmV3IFNldChuKSxjPVtdO2ZvcihsZXQgZCBvZiBuKWZvcihsZXQgcCBvZiB0KWlmKEExZShlW3BdLGQpKXtjLnB1c2gocCksbC5kZWxldGUoZCk7YnJlYWt9aWYoIWMubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkU3RhdGVNYXA6YX07bGV0IHU9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZSxjYXJkU3RhdGVNYXA6YX07Zm9yKGxldCBkIG9mIGMpdT15VihkLHUuY2FyZFRvUGlubmVkQ29weSx1LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSx1LnBpbm5lZENhcmRUb09yaWdpbmFsLHUuY2FyZFN0ZXBJbmRleCx1LmNhcmRNZXRhZGF0YU1hcCxhKTtyZXR1cm57Li4udSx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbLi4ubF19fWZ1bmN0aW9uIHlWKG4sdCxlLGkscixvLHMpe2lmKHQuaGFzKG4pKXJldHVybntjYXJkVG9QaW5uZWRDb3B5OnQsY2FyZFRvUGlubmVkQ29weUNhY2hlOmUscGlubmVkQ2FyZFRvT3JpZ2luYWw6aSxjYXJkU3RlcEluZGV4OnIsY2FyZE1ldGFkYXRhTWFwOm8sY2FyZFN0YXRlTWFwOnN9O2xldCBhPW5ldyBNYXAodCksbD1uZXcgTWFwKGUpLGM9bmV3IE1hcChpKSx1PXsuLi5yfSxkPXsuLi5vfSxwPXsuLi5zfSxoPWZ1bmN0aW9uKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7YmFzZUNhcmRJZDpufSl9KG4pO2Euc2V0KG4saCksbC5zZXQobixoKSxjLnNldChoLG4pLHIuaGFzT3duUHJvcGVydHkobikmJih1W2hdPXJbbl0pO2xldCBmPW9bbl07aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIGRbaF09ZixwW25dJiYocFtoXT1wW25dKSx7Y2FyZFRvUGlubmVkQ29weTphLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpsLHBpbm5lZENhcmRUb09yaWdpbmFsOmMsY2FyZFN0ZXBJbmRleDp1LGNhcmRNZXRhZGF0YU1hcDpkLGNhcmRTdGF0ZU1hcDpwfX1mdW5jdGlvbiBRRChuKXtyZXR1cm4gbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK24udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPDEwfWZ1bmN0aW9uIGJWKG4sdCxlLGkpe2xldCByPXsuLi5ufTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChvPT57aWYoIW8uaW5jbHVkZXMoJyJwbHVnaW4iOiJpbWFnZXMiJykpcmV0dXJuO2xldCBzPXhWKG8sdCxlKSxhPW51bGw7aWYobnVsbD09PWkuZW5kKWE9ZnVuY3Rpb24obix0KXtsZXQgZT10LmluZGV4T2Yobik7aWYoLTEhPT1lKXJldHVybntpbmRleDplLGlzQ2xvc2VzdDohMX07Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dFtpXSxvPXRbaSsxXSxzPS4xKihvLXIpO2lmKG48cilyZXR1cm4gbnVsbDtpZighKG4+bykpe2lmKG4tcjw9cylyZXR1cm57aW5kZXg6aSxpc0Nsb3Nlc3Q6ITB9O2lmKG8tbjw9cylyZXR1cm57aW5kZXg6aSsxLGlzQ2xvc2VzdDohMH19fXJldHVybiBudWxsfShpLnN0YXJ0LnN0ZXAscyk7ZWxzZXtsZXQgYz1zW25bb10uaW5kZXhdLHU9ZnVuY3Rpb24obix0KXtpZighbilyZXR1cm5bXTtpZihudWxsPT09bi5lbmQpcmV0dXJuLTEhPT10LmluZGV4T2Yobi5zdGFydC5zdGVwKT9bbi5zdGFydC5zdGVwXTpbXTtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdClpPj1uLnN0YXJ0LnN0ZXAmJmk8PW4uZW5kLnN0ZXAmJmUucHVzaChpKTtyZXR1cm4gZX0oaSxzKTthPWZ1bmN0aW9uKG4sdCxlKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGk9blswXSxyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU+cj97aW5kZXg6dC5pbmRleE9mKHIpLGlzQ2xvc2VzdDohMX06ZTxpP3tpbmRleDp0LmluZGV4T2YoaSksaXNDbG9zZXN0OiExfTpudWxsfSh1LHMsYyl9bnVsbCE9PWEmJihyW29dPWEpfSkscn1mdW5jdGlvbiB4VihuLHQsZSl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuW107bGV0e3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvLHJ1bklkOnN9PXRbbl07aWYobnVsbD09PXMpcmV0dXJuW107bGV0IGE9X2QoZSxpLHIsbyk7cmV0dXJuIG51bGwhPT1hJiZhLnJ1blRvU2VyaWVzLmhhc093blByb3BlcnR5KHMpP2EucnVuVG9TZXJpZXNbc10ubWFwKGw9Pmwuc3RlcCk6W119ZnVuY3Rpb24gQ1Yobil7bGV0e2RhdGFNaW5NYXg6dCx1c2VyVmlld0JveDplfT1uLGk9ZT8ueDtpZighaSlyZXR1cm4gdDtsZXQgcj1pWzBdPGlbMV0/aVswXTppWzFdLG89cj09PWlbMF0/aVsxXTppWzBdO3JldHVybnttaW5TdGVwOk1hdGguY2VpbChyKSxtYXhTdGVwOk1hdGguZmxvb3Iobyl9fWZ1bmN0aW9uIEtEKG4sdCl7c3dpdGNoKG4pe2Nhc2Ugc2EuT1ZFUlJJREVfQVNfRU5BQkxFRDpyZXR1cm4hMDtjYXNlIHNhLk9WRVJSSURFX0FTX0RJU0FCTEVEOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuIHR9fXZhciBYaT1QcihXRCksU0M9WShYaSxuPT5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlKSxyWj1ZKFhpLG49Pm4udGFnTWV0YWRhdGEpLEYxZT1ZKFhpLG49Pm4uY2FyZExpc3QpLE5wPVkoWGksKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0e3BsdWdpbjplLHRhZzppLHJ1bklkOnIsc2FtcGxlOm99PW4uY2FyZE1ldGFkYXRhTWFwW3RdLHM9X2Qobi50aW1lU2VyaWVzRGF0YSxlLGksbyk7aWYoIXMpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0IGE9cy5ydW5Ub0xvYWRTdGF0ZTtpZihyKXJldHVybiBhLmhhc093blByb3BlcnR5KHIpP2Fbcl06RWUuTk9UX0xPQURFRDtsZXQgbD1wXyhuLnRhZ01ldGFkYXRhLGUsaSxvKTtpZighbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCBhIGNhcmQgd2hvc2UgdGFnIGhhcyBubyBydW5zIik7cmV0dXJuIGwuZXZlcnkoYz0+YVtjXT09PUVlLkxPQURFRCk/RWUuTE9BREVEOmwuc29tZShjPT5hW2NdPT09RWUuTE9BRElORyk/RWUuTE9BRElORzpFZS5OT1RfTE9BREVEfSksTHA9WShYaSwobix0KT0+e2lmKCFuLmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gbnVsbDtsZXR7cGx1Z2luOmUsdGFnOmksc2FtcGxlOnJ9PW4uY2FyZE1ldGFkYXRhTWFwW3RdLG89X2Qobi50aW1lU2VyaWVzRGF0YSxlLGkscik7cmV0dXJuIG8/by5ydW5Ub1NlcmllczpudWxsfSksd1Y9WShYaSxuPT5uLmNhcmRNZXRhZGF0YU1hcCksU2w9WSh3Viwobix0KT0+bi5oYXNPd25Qcm9wZXJ0eSh0KT9uW3RdOm51bGwpLG1jPVkoWGksbj0+bi5jYXJkU3RhdGVNYXApLE4xZT1ZKFhpLG49Pm4udmlzaWJsZUNhcmRNYXApLG9aPVkoTjFlLG49Pm5ldyBTZXQobi52YWx1ZXMoKSkpLFpEPVkoRjFlLHdWLChuLHQpPT5uLmZpbHRlcihlPT50Lmhhc093blByb3BlcnR5KGUpKS5tYXAoZT0+KHtjYXJkSWQ6ZSwuLi50W2VdfSkpKSxNVj1ZKFhpLChuLHQpPT5uLmNhcmRTdGVwSW5kZXguaGFzT3duUHJvcGVydHkodCk/bi5jYXJkU3RlcEluZGV4W3RdOm51bGwpLHNaPVkoWGksKG4sdCk9PnhWKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLGFaPVkoWGksbj0+bi5jYXJkVG9QaW5uZWRDb3B5KSxMMWU9WShYaSxuPT5uLnBpbm5lZENhcmRUb09yaWdpbmFsKSxFQz1ZKGFaLHdWLChuLHQpPT5bLi4ubi52YWx1ZXMoKV0uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLEJwPVkoYVosTDFlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSksbFo9WShYaSxuPT5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzKSxjWj1ZKFhpLG49PlFEKG4pKSxnYz1ZKFhpLG49Pih7Li4ubi5zZXR0aW5ncywuLi5uLnNldHRpbmdPdmVycmlkZXN9KSksdVo9WShYaSxuPT5uLnNldHRpbmdPdmVycmlkZXMpLGhfPVkoZ2Msbj0+bi5jYXJkTWluV2lkdGgpLGZfPVkoZ2Msbj0+bi50b29sdGlwU29ydCksbV89WShnYyxuPT5uLmlnbm9yZU91dGxpZXJzKSxidT1ZKGdjLG49Pm4ueEF4aXNUeXBlKSxKRD1ZKGdjLG49Pm4uaGlzdG9ncmFtTW9kZSksZFo9WShnYyxuPT5uLmhpZGVFbXB0eUNhcmRzKSx2ZD1ZKGdjLG49Pm4uc2NhbGFyU21vb3RoaW5nKSwkRD1ZKGdjLG49Pm4uc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCksZUE9WShnYyxuPT5uLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpLHRBPVkoZ2Msbj0+bi5pbWFnZUNvbnRyYXN0SW5NaWxsaSksbkE9WShnYyxuPT5uLmltYWdlU2hvd0FjdHVhbFNpemUpLF9jPVkoWGksbj0+bi50YWdGaWx0ZXIpLGlBPVkoWGksKG4sdCk9PkJvb2xlYW4obi50YWdHcm91cEV4cGFuZGVkLmdldCh0KSkpLFZwPVkoWGksbj0+bi5saW5rZWRUaW1lRW5hYmxlZCksVEM9WShYaSxuPT5uLnN0ZXBTZWxlY3RvckVuYWJsZWQpLEhwPVkoWGksbj0+bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLFNWPVkoWGksbj0+e2xldHttaW46dCxtYXg6ZX09bi5zdGVwTWluTWF4O3JldHVybnttaW46dD09PTEvMD8wOnQsbWF4OmU9PT0tMS8wPzFlMzplfX0pLGdfPVkoWGksbj0+bi5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxfXz1ZKFhpLG49Pm4ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxFVj1ZKFhpLFNWLChuLHQpPT5uLmxpbmtlZFRpbWVTZWxlY3Rpb24/bi5saW5rZWRUaW1lU2VsZWN0aW9uOntzdGFydDp7c3RlcDp0Lm1pbn0sZW5kOm51bGx9KSxVcD1ZKFhpLEVWLChuLHQpPT5uLmxpbmtlZFRpbWVFbmFibGVkP3Q6bnVsbCkseHU9WShYaSxuPT5uLmZpbHRlcmVkUGx1Z2luVHlwZXMpLHJBPVkoWGksbj0+bi5pc1NldHRpbmdzUGFuZU9wZW4pLG9BPVkoWGksbj0+bi5pc1NsaWRlb3V0TWVudU9wZW4pLHBaPVkoWGksbj0+bi50YWJsZUVkaXRvclNlbGVjdGVkVGFiKSxoWj1ZKEhwLFZwLG1jLChuLHQsZSxpKT0+dD9uOktEKGVbaV0/LnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsbikpLGZaPVkobWMsKG4sdCk9PntpZihuW3RdKXJldHVybiBDVihuW3RdKX0pLG1aPVkobWMsKG4sdCk9Pm5bdF0/LmRhdGFNaW5NYXgpLGdaPVkobWMsVEMsSHAsVnAsVXAsKG4sdCxlLGkscixvKT0+e2xldCBzPW5bb107aWYoIXMpcmV0dXJuO2xldCBhPUNWKHMpO2lmKCFhKXJldHVybjtpZihpJiZyKXJldHVybiBjVihyLGEsZSk7aWYoIUtEKHMuc3RlcFNlbGVjdGlvbk92ZXJyaWRlLHQpKXJldHVybjtsZXQgbD1LRChzLnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsZSk7cmV0dXJuIGNWKHtzdGFydDp7c3RlcDpzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA/P2EubWluU3RlcH0sZW5kOntzdGVwOnMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwPz9hLm1heFN0ZXB9fSxhLGwpfSksdlo9UHIoIm5vdGlmaWNhdGlvbiIpLEN1PShZKHZaLG49Pm4ubm90aWZpY2F0aW9ucyksWSh2WixuPT5uLmxhc3RSZWFkVGltZXN0YW1wSW5Ncz8/LTEpLCgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UX05BTUU9MF09IkVYUEVSSU1FTlRfTkFNRSIsbltuLkhQQVJBTT0xXT0iSFBBUkFNIixuW24uTUVUUklDPTJdPSJNRVRSSUMiLG5bbi5SVU5fTkFNRT0zXT0iUlVOX05BTUUifShDdXx8KEN1PXt9KSksQ3UpKSgpKSxlcj0oKCk9PihmdW5jdGlvbihuKXtuW24uUlVOPTBdPSJSVU4iLG5bbi5FWFBFUklNRU5UPTFdPSJFWFBFUklNRU5UIixuW24uUkVHRVg9Ml09IlJFR0VYIn0oZXJ8fChlcj17fSkpLGVyKSkoKTtmdW5jdGlvbiBBQyhuLHQsZSl7bGV0IGk9e30scj1bXSxvPXttYXRjaGVzOmksbm9uTWF0Y2hlczpyfTtzd2l0Y2gobi5rZXkpe2Nhc2UgZXIuUlVOOmZvcihsZXQgYSBvZiB0KWlbYS5pZF09W2FdO2JyZWFrO2Nhc2UgZXIuRVhQRVJJTUVOVDpmb3IobGV0IGEgb2YgdCl7bGV0IGw9ZVthLmlkXSxjPWlbbF18fFtdO2MucHVzaChhKSxpW2xdPWN9YnJlYWs7Y2FzZSBlci5SRUdFWDppZighbi5yZWdleFN0cmluZylicmVhaztsZXQgczt0cnl7cz1uZXcgUmVnRXhwKG4ucmVnZXhTdHJpbmcpfWNhdGNoe2JyZWFrfWZvcihsZXQgYSBvZiB0KXtsZXQgbD1hLm5hbWUubWF0Y2gocyk7aWYobCl7bGV0IHU9bC5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShsLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIixkPWlbdV18fFtdO2QucHVzaChhKSxpW3VdPWR9ZWxzZSByLnB1c2goYSl9fXJldHVybiBvfWZ1bmN0aW9uIGFBKG4sdCl7cmV0dXJuIG49PT1lci5SRUdFWD97a2V5Om4scmVnZXhTdHJpbmc6dD8/IiJ9OntrZXk6bn19dmFyIHlaPVByKCJydW5zIiksamE9WSh5WixuPT5uLmRhdGEpLGJaPVkoamEsbj0+bi5ydW5JZFRvRXhwSWQpLGxBPVkoamEsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSxjQT1ZKGphLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSx3dT1ZKGphLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSkseFo9WShqYSwobix0KT0+bi5ydW5JZHNbdC5leHBlcmltZW50SWRdPz9bXSksQ1o9WShqYSxuPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKG4ucnVuTWV0YWRhdGEpKSksSUM9WShqYSwobix0KT0+bi5ydW5zTG9hZFN0YXRlW3QuZXhwZXJpbWVudElkXXx8e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOkVlLk5PVF9MT0FERUR9KSxUVj1ZKGphLG49Pm51bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5P2FBKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpLHdaPVkoVFYsamEsKG4sdCk9Pm4/P3QuaW5pdGlhbEdyb3VwQnkpLEpmPVkoamEsbj0+bi5yZWdleEZpbHRlciksRFY9WSh5WixuPT5uLnVpKSxBVj1ZKERWLG49Pm4ucGFnaW5hdGlvbk9wdGlvbiksSVY9WShEVixuPT5uLnNvcnQpLE1aPVkoRFYsbj0+bi5zZWxlY3Rpb25TdGF0ZSksU1o9WShqYSxuPT5uLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KSxFWj1ZKGphLG49Pm4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSx1QT1ZKGphLG49Pm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSxkQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSxwQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGhBPXdlKCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhYT17fTtTTyhhYSx7Z2V0Q29sb3JQYWxldHRlOigpPT5CMWUsZ2V0UGFnZVNpemU6KCk9PiRmLGdldFJlbG9hZEVuYWJsZWQ6KCk9PlJDLGdldFJlbG9hZFBlcmlvZEluTXM6KCk9Pk9DLGdldFNldHRpbmdzTG9hZFN0YXRlOigpPT5QVn0pO3ZhciBmQT0ic2V0dGluZ3MiLEFaPXtzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LFBDPVByKGZBKSxQVj1ZKFBDLG49Pm4uc3RhdGUpLFJDPVkoUEMsbj0+bi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkKSxPQz1ZKFBDLG49Pm4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcyksJGY9WShQQyxuPT5uLnNldHRpbmdzLnBhZ2VTaXplKSxCMWU9WShQQyxuPT5uLnNldHRpbmdzLmNvbG9yUGFsZXR0ZSk7ZnVuY3Rpb24gbUEobix0LGUpe2lmKCF0KXJldHVybiEwO2xldCBpO3RyeXtpPW5ldyBSZWdFeHAodCwiaSIpfWNhdGNoe3JldHVybiExfWxldCByPVtuLnJ1bk5hbWVdO3JldHVybiBlJiZyLnB1c2gobi5leHBlcmltZW50QWxpYXMuYWxpYXNUZXh0LGAke24uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dH0vJHtuLnJ1bk5hbWV9YCksci5zb21lKG89PmkudGVzdChvKSl9dmFyIFYxZT1ZKCRvLE1aLGJaLChuLHQsZSk9PntpZighbilyZXR1cm4gbmV3IE1hcDtsZXQgaT1uZXcgTWFwO2ZvcihsZXRbcixvXW9mIHQuZW50cmllcygpKXtsZXQgcz1lW3JdO3MmJm4uaW5kZXhPZihzKT49MCYmaS5zZXQocixvKX1yZXR1cm4gaX0pLGVtPVkoJG8sVjFlLEpmLG49PntsZXQgdD0kbyhuKT8/W10sZT1odShuKSxpPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBvPXd1KG4se2V4cGVyaW1lbnRJZDpyfSk7Zm9yKGxldCBzIG9mIG8paS5zZXQocy5pZCx7cnVuTmFtZTpzLm5hbWUsZXhwZXJpbWVudEFsaWFzOmVbcl19KX1yZXR1cm4gaX0scHUsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09ZmkuQ09NUEFSRV9FWFBFUklNRU5ULHM9bmV3IE1hcDtmb3IobGV0W2EsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQoYSk7cy5zZXQoYSxtQShjLGUsbykmJmwpfXJldHVybiBzfSksdl89WShhYS5nZXRDb2xvclBhbGV0dGUsRVosU1osbXUsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxzKT0+e2xldCBhPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMocykpYT1lLmdldChzKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTthPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9cltzXT1hfSkscn0pLElaPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoQUQpLF9uKCh7ZXhwZXJpbWVudElkczpvfSk9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YT09PUVlLkZBSUxFRHx8YT09PUVlLk5PVF9MT0FERUQpLnBpcGUoSGUoYT0+ISFhLmxlbmd0aCksX24oYT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8sYSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG9dKT0+ISFvKSxCKChbLG9dKT0+byksX24obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zPT09RWUuRkFJTEVEfHxzPT09RWUuTk9UX0xPQURFRCkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShIYSx3bCksR3QodGhpcy5zdG9yZS5zZWxlY3QoJG8pKSxIZSgoWyxvXSk9PiEhbyksQigoWyxvXSk9Pm8pLF9uKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8scz0+cyE9PUVlLkxPQURJTkcpLnBpcGUoQihzPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6c30pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPVVyKCgpPT51bih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKF9uKCh7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLHMpKSkse2Rpc3BhdGNoOiExfSl9Z2V0UnVuc0xpc3RMb2FkU3RhdGUoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KElDLHtleHBlcmltZW50SWQ6ZX0pLnBpcGUoSHQoMSkpfWdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZShlLGkpe3JldHVybiB4byhlLm1hcChyPT50aGlzLmdldFJ1bnNMaXN0TG9hZFN0YXRlKHIpKSkucGlwZShCKHI9PmUuZmlsdGVyKChvLHMpPT5pKHJbc10uc3RhdGUpKSkpfWZldGNoQWxsUnVuc0xpc3QoZSxpKXtyZXR1cm4ganQoe2V4cGVyaW1lbnRJZHM6ZSxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6aX0pLnBpcGUoTnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENEKHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpfSksX24oKCk9PntsZXQgcj1uZXcgU2V0KGkpO3JldHVybiB4byhlLm1hcChzPT5yLmhhcyhzKT90aGlzLmZldGNoUnVuc0ZvckV4cGVyaW1lbnQocyk6dGhpcy5tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhzKSkpfSksQihyPT57bGV0IG89e30scz1bXTtmb3IobGV0IGEgb2YgcilzLnB1c2goLi4uYS5ydW5zKSxhLmZyb21SZW1vdGUmJihvW2EuZXhwZXJpbWVudElkXT17cnVuczphLnJ1bnMsbWV0YWRhdGE6YS5tZXRhZGF0YX0pO3JldHVybntuZXdSdW5zQW5kTWV0YWRhdGE6byxydW5zRm9yQWxsRXhwZXJpbWVudHM6c319KSxOdCgoe25ld1J1bnNBbmRNZXRhZGF0YTpyLHJ1bnNGb3JBbGxFeHBlcmltZW50czpvfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE9wKHtleHBlcmltZW50SWRzOmUsbmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KSl9KSxDbyhyPT4odGhpcy5zdG9yZS5kaXNwYXRjaChhXyh7ZXhwZXJpbWVudElkczplLHJlcXVlc3RlZEV4cGVyaW1lbnRJZHM6aX0pKSxqdChudWxsKSkpLEIoKCk9Pm51bGwpKX1tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoSUMse2V4cGVyaW1lbnRJZDplfSkucGlwZShIZShpPT5pLnN0YXRlIT09RWUuTE9BRElORyksSHQoMSksX24oaT0+aS5zdGF0ZT09PUVlLkZBSUxFRD9HbChuZXcgRXJyb3IoIlBlbmRpbmcgcmVxdWVzdCBmYWlsZWQiKSk6anQoaSkpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KHd1LHtleHBlcmltZW50SWQ6ZX0pKSxCKChbLGldKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDplLHJ1bnM6aX0pKSl9ZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChlKXtyZXR1cm4geG8oW3RoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hSdW5zKGUpLHRoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hIcGFyYW1zTWV0YWRhdGEoZSldKS5waXBlKEIoKFtpLHJdKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDplLHJ1bnM6aSxtZXRhZGF0YTpyfSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihJRCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEVsPSgoKT0+KGZ1bmN0aW9uKG4pe24uQVNDPSJhc2MiLG4uREVTQz0iZGVzYyIsbi5VTlNFVD0iIn0oRWx8fChFbD17fSkpLEVsKSkoKSx7aW5pdGlhbFN0YXRlOkgxZSxyZWR1Y2VyczpVMWV9PVlmKHtydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTpuZXcgTWFwLGdyb3VwS2V5VG9Db2xvcklkOm5ldyBNYXAsaW5pdGlhbEdyb3VwQnk6e2tleTplci5SVU59LHVzZXJTZXRHcm91cEJ5S2V5Om51bGwsY29sb3JHcm91cFJlZ2V4U3RyaW5nOiIiLHJlZ2V4RmlsdGVyOiIifSx7cnVuSWRzOnt9LHJ1bklkVG9FeHBJZDp7fSxydW5NZXRhZGF0YTp7fSxydW5zTG9hZFN0YXRlOnt9fSwobix0LGUpPT51cyh0LGUpP246ey4uLm4saW5pdGlhbEdyb3VwQnk6e2tleTplLnJvdXRlS2luZD09PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9lci5FWFBFUklNRU5UOmVyLlJVTn19KSx6MWU9d3IoSDFlLFNlKEswLChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVCYmdCE9PWZpLkVYUEVSSU1FTlQpcmV0dXJuIG47bGV0IHI9ZS5ydW5zLmdyb3VwQnksbz1lLnJ1bnMucmVnZXhGaWx0ZXI/PyIiO2lmKCFyJiYhbylyZXR1cm4gbjtsZXR7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOnMsdXNlclNldEdyb3VwQnlLZXk6YX09bjtyZXR1cm4gciYmKHM9ci5rZXk9PT1lci5SRUdFWD9yLnJlZ2V4U3RyaW5nOm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nLGE9ci5rZXk/P251bGwpLHsuLi5uLGNvbG9yR3JvdXBSZWdleFN0cmluZzpzLHJlZ2V4RmlsdGVyOm8sdXNlclNldEdyb3VwQnlLZXk6YX19KSxTZShDRCwobix0KT0+e2xldCBlPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgaSBvZiB0LnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpZVtpXT1lW2ldP3suLi5lW2ldLHN0YXRlOkVlLkxPQURJTkd9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpFZS5MT0FESU5HfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5JZHN9LGk9ey4uLm4ucnVuTWV0YWRhdGF9LHI9ey4uLm4ucnVuSWRUb0V4cElkfSxvPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldHtydW5zOmEsbWV0YWRhdGE6bH09dC5uZXdSdW5zQW5kTWV0YWRhdGFbc107ZVtzXT1hLm1hcCgoe2lkOmN9KT0+Yyksb1tzXT17Li4ub1tzXSxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKSxzdGF0ZTpFZS5MT0FERUR9O2ZvcihsZXQgYyBvZiBhKXtsZXQgdT1sLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbYy5pZF07aVtjLmlkXT17Li4uYyxocGFyYW1zOnU/dS5ocGFyYW1zOm51bGwsbWV0cmljczp1P3UubWV0cmljczpudWxsfSxyW2MuaWRdPXN9fXJldHVybnsuLi5uLHJ1bklkczplLHJ1bklkVG9FeHBJZDpyLHJ1bk1ldGFkYXRhOmkscnVuc0xvYWRTdGF0ZTpvfX0pLFNlKGFfLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6RWUuRkFJTEVEfTp7bGFzdExvYWRlZFRpbWVJbk1zOm51bGwsc3RhdGU6RWUuRkFJTEVEfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4se3J1bnNGb3JBbGxFeHBlcmltZW50czp0fSk9PntsZXQgZT1uZXcgTWFwKG4uZ3JvdXBLZXlUb0NvbG9ySWQpLGk9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscj1uLmluaXRpYWxHcm91cEJ5O251bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5JiYocj1hQShuLnVzZXJTZXRHcm91cEJ5S2V5LG4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSk7bGV0IG89QUMocix0LG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhvLm1hdGNoZXMpLmZvckVhY2goKFtzLGFdKT0+e2xldCBsPWUuZ2V0KHMpPz9lLnNpemU7ZS5zZXQocyxsKTtmb3IobGV0IGMgb2YgYSlpLnNldChjLmlkLGwpfSk7Zm9yKGxldCBzIG9mIG8ubm9uTWF0Y2hlcylpLnNldChzLmlkLC0xKTtyZXR1cm57Li4ubixkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6aSxncm91cEtleVRvQ29sb3JJZDplfX0pLFNlKGxfLChuLHtleHBlcmltZW50SWRzOnQsZ3JvdXBCeTplfSk9PntsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscz1BQyhlLHQuZmxhdE1hcChsPT5uLnJ1bklkc1tsXSkubWFwKGw9Pm4ucnVuTWV0YWRhdGFbbF0pLG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhzLm1hdGNoZXMpLmZvckVhY2goKFtsLGNdKT0+e2xldCB1PWkuZ2V0KGwpPz9pLnNpemU7aS5zZXQobCx1KTtmb3IobGV0IGQgb2YgYylyLnNldChkLmlkLHUpfSk7Zm9yKGxldCBsIG9mIHMubm9uTWF0Y2hlcylyLnNldChsLmlkLC0xKTtsZXQgYT1lLmtleT09PWVyLlJFR0VYP2UucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOmEsdXNlclNldEdyb3VwQnlLZXk6ZS5rZXksZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5OnIsZ3JvdXBLZXlUb0NvbG9ySWQ6aSxydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwfX0pLFNlKERELChuLHtydW5JZDp0LG5ld0NvbG9yOmV9KT0+e2xldCBpPW5ldyBNYXAobi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSk7cmV0dXJuIGkuc2V0KHQsZSksey4uLm4scnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6aX19KSxTZShiQywobix0KT0+KHsuLi5uLHJlZ2V4RmlsdGVyOnQucmVnZXhTdHJpbmd9KSkpLGoxZT1YZih6MWUsVTFlKSxHMWU9e2tleTpudWxsLGRpcmVjdGlvbjpFbC5VTlNFVH0se2luaXRpYWxTdGF0ZTpXMWUscmVkdWNlcnM6cTFlfT1ZZih7cGFnaW5hdGlvbk9wdGlvbjp7cGFnZUluZGV4OjAscGFnZVNpemU6MTB9LHNvcnQ6RzFlLHNlbGVjdGlvblN0YXRlOm5ldyBNYXB9LHt9KSxZMWU9d3IoVzFlLFNlKEVELChuLHtwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfSk9Pih7Li4ubixwYWdpbmF0aW9uT3B0aW9uOntwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfX0pKSxTZShiQywobix0KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246ey4uLm4ucGFnaW5hdGlvbk9wdGlvbixwYWdlSW5kZXg6MH19KSksU2UoVEQsKG4sdCk9Pih7Li4ubixzb3J0OntrZXk6dC5rZXksZGlyZWN0aW9uOnQuZGlyZWN0aW9ufX0pKSxTZShPcCwobix0KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT10LnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IobGV0IHIgb2YgdC5ydW5zRm9yQWxsRXhwZXJpbWVudHMpZS5oYXMoci5pZCl8fGUuc2V0KHIuaWQsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZSh3RCwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKTtyZXR1cm4gZS5zZXQodCwhQm9vbGVhbihlLmdldCh0KSkpLHsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoTUQsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIG4uc2VsZWN0aW9uU3RhdGUua2V5cygpKWUuc2V0KGksdD09PWkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoU0QsKG4se3J1bklkczp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9IXQuZXZlcnkocj0+Qm9vbGVhbihlLmdldChyKSkpO2ZvcihsZXQgciBvZiB0KWUuc2V0KHIsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSksWDFlPVhmKFkxZSxxMWUpO2Z1bmN0aW9uIFBaKG4sdCl7cmV0dXJuIEhmKHtkYXRhOmoxZSx1aTpYMWV9KShuLHQpfWZ1bmN0aW9uIFExZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjphXyxhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgZ0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JyLmZvckZlYXR1cmUoInJ1bnMiLFBaKSxMby5mb3JGZWF0dXJlKFtJWl0pLFBLLHZ1LnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFExZSksT0RdfSksbn0pKCkseWQ9KCgpPT4oZnVuY3Rpb24obil7bi5SVU5TX0NIQU5HRUQ9ImV4cGVyaW1lbnRhbC5SdW5zQ2hhbmdlZCIsbi5HRVRfUlVOUz0iZXhwZXJpbWVudGFsLkdldFJ1bnMiLG4uR0VUX1VSTF9EQVRBPSJleHBlcmltZW50YWwuR2V0VVJMUGx1Z2luRGF0YSIsbi5EQVRBX1JFTE9BREVEPSJleHBlcmltZW50YWwuRGF0YVJlbG9hZGVkIn0oeWR8fCh5ZD17fSkpLHlkKSkoKSxPWj1uZXcgV2Vha01hcCx5Xz1uZXcgU2V0LFJWPW5ldyBNYXAsdkE9bmV3IE1hcDtmdW5jdGlvbiBrWihuLHQpe3JldHVybiBlPT57bGV0IGk9dkEuZ2V0KHQpLHI9T1ouZ2V0KGkpfHxudWxsO3JldHVybiBuKHIsZSl9fXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57aWYoImV4cGVyaW1lbnRhbC5ib290c3RyYXAiIT09bi5kYXRhKXJldHVybjtsZXQgdD1uLnBvcnRzWzBdO2lmKCF0KXJldHVybjtsZXQgZT1uLnNvdXJjZT9uLnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDshZXx8ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3J0PXQsdGhpcy5pZD0wLHRoaXMucmVzcG9uc2VXYWl0cz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGU9PnRoaXMub25NZXNzYWdlKGUpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9YXN5bmMgb25NZXNzYWdlKHQpe2xldCBlPUpTT04ucGFyc2UodC5kYXRhKSxpPWUudHlwZSxyPWUuaWQsbz1lLnBheWxvYWQscz1lLmVycm9yO2lmKGUuaXNSZXBseSl7aWYoIXRoaXMucmVzcG9uc2VXYWl0cy5oYXMocikpcmV0dXJuO2xldHtyZXNvbHZlOmQscmVqZWN0OnB9PXRoaXMucmVzcG9uc2VXYWl0cy5nZXQocik7cmV0dXJuIHRoaXMucmVzcG9uc2VXYWl0cy5kZWxldGUociksdm9pZChzP3AobmV3IEVycm9yKHMpKTpkKG8pKX1sZXQgbD1udWxsLGM9bnVsbDtpZih0aGlzLmxpc3RlbmVycy5oYXMoaSkpe2xldCBkPXRoaXMubGlzdGVuZXJzLmdldChpKTt0cnl7bD1hd2FpdCBkKG8pfWNhdGNoKHApe2M9cH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTppLGlkOnIscGF5bG9hZDpsLGVycm9yOmMsaXNSZXBseTohMH0pfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtsZXQgaT10aGlzLmlkKys7cmV0dXJuIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDppLHBheWxvYWQ6ZSxlcnJvcjpudWxsLGlzUmVwbHk6ITF9KSxuZXcgUHJvbWlzZSgobyxzKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQoaSx7cmVzb2x2ZTpvLHJlamVjdDpzfSl9KX19KG4pO3lfLmFkZChlKSx2QS5zZXQoZSx0KSxuLnN0YXJ0KCk7Zm9yKGxldFtpLHJdb2YgUlYpe2xldCBvPWtaKHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIga1YsYl89KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgeV8pdkEuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoeV8uZGVsZXRlKGkpLHZBLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLnlfXS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7UlYuc2V0KG4sdCk7Zm9yKGxldCBlIG9mIHlfKXtsZXQgaT1rWih0LGUpO2UubGlzdGVuKG4saSl9fShlLGkpfXVubGlzdGVuKGUpeyFmdW5jdGlvbihuKXtSVi5kZWxldGUobik7Zm9yKGxldCB0IG9mIHlfKXQudW5saXN0ZW4obil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx5QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKTt0aGlzLmlwYy5saXN0ZW4oeWQuR0VUX1VSTF9EQVRBLGk9PntpZighaSlyZXR1cm47bGV0IHI9YHAuJHtpLnBsdWdpbk5hbWV9LmAsbz17fSxzPWUudGZfc3RvcmFnZS5nZXRVcmxIYXNoRGljdCgpO2ZvcihsZXQgYSBpbiBzKWEuc3RhcnRzV2l0aChyKSYmKG9bYS5zdWJzdHJpbmcoci5sZW5ndGgpXT1zW2FdKTtyZXR1cm4gb30pLHRoaXMuc3RvcmUuc2VsZWN0KG9fKS5waXBlKEhlKGk9Pm51bGwhPT1pKSxkaSgpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoeWQuREFUQV9SRUxPQURFRCx2b2lkIDApfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKF9uKGk9Pmk/cG4oaS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3Qod3Use2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKEIobz0+by5mbGF0KCkpLGRpKChvLHMpPT5vLmxlbmd0aD09PXMubGVuZ3RoJiZvLmV2ZXJ5KChhLGwpPT5zW2xdLmlkPT09YS5pZCkpLEIobz0+by5tYXAoKHtuYW1lOnN9KT0+cykpKTpqdChbXSkpKTtlLnN1YnNjcmliZShpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHlkLlJVTlNfQ0hBTkdFRCxpKX0pLHRoaXMuaXBjLmxpc3Rlbih5ZC5HRVRfUlVOUywoKT0+ZS5waXBlKEh0KDEpKS50b1Byb21pc2UoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx4QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7aS5pbml0KCksZS5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUoZSxpKXshZnVuY3Rpb24obix0KXtPWi5zZXQobix7cGx1Z2luTmFtZTp0fSl9KGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYkEpLFIoeUEpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltiXyx5QSxiQV0saW1wb3J0czpbJDAsTWwsZ0FdfSksbn0pKCkseF89d2UoIltBbGVydF0gQWxlcnQgUmVwb3J0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuYWxlcnRBY3Rpb25Nb2R1bGU9cix0aGlzLnJlcG9ydFJlZ2lzdGVyZWRBY3Rpb25BbGVydHMkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoTnQobz0+e2xldCBzPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKG8pO3MmJnRoaXMuc3RvcmUuZGlzcGF0Y2goeF8ocykpfSkpLHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHZ1KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksb1RlPXdyKHtsYXRlc3RBbGVydDpudWxsfSxTZSh4Xywobix7bG9jYWxpemVkTWVzc2FnZTp0LGZvbGxvd3VwQWN0aW9uOmV9KT0+e2xldCBpPXtsb2NhbGl6ZWRNZXNzYWdlOnQsY3JlYXRlZDpEYXRlLm5vdygpfTtyZXR1cm4gZSYmKGkuZm9sbG93dXBBY3Rpb249ZSksey4uLm4sbGF0ZXN0QWxlcnQ6aX19KSk7ZnVuY3Rpb24gQloobix0KXtyZXR1cm4gb1RlKG4sdCl9dHJ5e2tWPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7a1Y9ITF9dmFyIENfLEZDLENBLHRtLE9WLHVpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/cFQodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYha1YpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaWQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxWWj1bImNvbG9yIiwiYnV0dG9uIiwiY2hlY2tib3giLCJkYXRlIiwiZGF0ZXRpbWUtbG9jYWwiLCJlbWFpbCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsIm1vbnRoIiwibnVtYmVyIiwicGFzc3dvcmQiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzZWFyY2giLCJzdWJtaXQiLCJ0ZWwiLCJ0ZXh0IiwidGltZSIsInVybCIsIndlZWsiXTtmdW5jdGlvbiBGVigpe2lmKENfKXJldHVybiBDXztpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIENfPW5ldyBTZXQoVlopO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIENfPW5ldyBTZXQoVlouZmlsdGVyKHQ9PihuLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbi50eXBlPT09dCkpKX1mdW5jdGlvbiBOcyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihudWxsPT1GQyYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+RkM9ITB9KSl9ZmluYWxseXtGQz1GQ3x8ITF9cmV0dXJuIEZDfSgpP246ISFuLmNhcHR1cmV9ZnVuY3Rpb24gd0EoKXtpZihudWxsPT10bSl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIHRtPSExO2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpdG09ITA7ZWxzZXtsZXQgbj1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbzt0bT0hIW4mJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChuLnRvU3RyaW5nKCkpfX1yZXR1cm4gdG19ZnVuY3Rpb24gd18oKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIDA7aWYobnVsbD09Q0Epe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9bi5zdHlsZTtuLmRpcj0icnRsIix0LndpZHRoPSIxcHgiLHQub3ZlcmZsb3c9ImF1dG8iLHQudmlzaWJpbGl0eT0iaGlkZGVuIix0LnBvaW50ZXJFdmVudHM9Im5vbmUiLHQucG9zaXRpb249ImFic29sdXRlIjtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPWUuc3R5bGU7aS53aWR0aD0iMnB4IixpLmhlaWdodD0iMXB4IixuLmFwcGVuZENoaWxkKGUpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksQ0E9MCwwPT09bi5zY3JvbGxMZWZ0JiYobi5zY3JvbGxMZWZ0PTEsQ0E9MD09PW4uc2Nyb2xsTGVmdD8xOjIpLG4ucmVtb3ZlKCl9cmV0dXJuIENBfWZ1bmN0aW9uIE1BKG4pe2lmKGZ1bmN0aW9uKCl7aWYobnVsbD09T1Ype2xldCBuPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO09WPSEoIW58fCFuLmNyZWF0ZVNoYWRvd1Jvb3QmJiFuLmF0dGFjaFNoYWRvdyl9cmV0dXJuIE9WfSgpKXtsZXQgdD1uLmdldFJvb3ROb2RlP24uZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hhZG93Um9vdCYmdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTkMoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtsZXQgdD1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZih0PT09bilicmVhaztuPXR9cmV0dXJuIG59ZnVuY3Rpb24gdmMobil7cmV0dXJuIG4uY29tcG9zZWRQYXRoP24uY29tcG9zZWRQYXRoKClbMF06bi50YXJnZXR9ZnVuY3Rpb24gTEMoKXtyZXR1cm4gdHlwZW9mIF9fa2FybWFfXzwidSImJiEhX19rYXJtYV9ffHx0eXBlb2YgamFzbWluZTwidSImJiEhamFzbWluZXx8dHlwZW9mIGplc3Q8InUiJiYhIWplc3R8fHR5cGVvZiBNb2NoYTwidSImJiEhTW9jaGF9ZnVuY3Rpb24gTXIobiwuLi50KXtyZXR1cm4gdC5sZW5ndGg/dC5zb21lKGU9Pm5bZV0pOm4uYWx0S2V5fHxuLnNoaWZ0S2V5fHxuLmN0cmxLZXl8fG4ubWV0YUtleX1mdW5jdGlvbiBXdChuKXtyZXR1cm4gbnVsbCE9biYmImZhbHNlIiE9YCR7bn1gfWZ1bmN0aW9uIFBpKG4sdD0wKXtyZXR1cm4gTlYobik/TnVtYmVyKG4pOnR9ZnVuY3Rpb24gTlYobil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQobikpJiYhaXNOYU4oTnVtYmVyKG4pKX1mdW5jdGlvbiBNXyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBubyhuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBjYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufXZhciBFXyxVWj0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGxUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9Y2EoZSk7cmV0dXJuIG5ldyBRdChyPT57bGV0IHM9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57cy51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgVGUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVaKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksU189KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEcsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5fdW5zdWJzY3JpYmUoKTp0aGlzLl9zdWJzY3JpYmUoKX1nZXQgZGVib3VuY2UoKXtyZXR1cm4gdGhpcy5fZGVib3VuY2V9c2V0IGRlYm91bmNlKGUpe3RoaXMuX2RlYm91bmNlPVBpKGUpLHRoaXMuX3N1YnNjcmliZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKEFyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGxUZSksdyhBZSksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksenA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbVVpdfSksbn0pKCkselo9bmV3IFNldCxjVGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6ZFRlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighelouaGFzKG4pKXRyeXtFX3x8KChFXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRV8pKSxFXy5zaGVldCYmKEVfLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCkselouYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGRUZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBubT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgVGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIGpaKE1fKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89cG4oalooTV8oZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1KZChvLnBpcGUoSHQoMSkpLG8ucGlwZShDYSgxKSxBcigwKSkpLG8ucGlwZShCKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IFF0KHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZShWbihpKSxCKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksb3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjVGUpLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBqWihuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIERBKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIEtaPSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsRUE9ImNkay1kZXNjcmliZWRieS1ob3N0IixIVj0wLElBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrSFYrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPVNvKHJmKSsiLSIrSFYrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPUJWKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyhXWihpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89QlYoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7RUF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoRUEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1daKHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KEJWKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9REEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoS1opKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPURBKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKEVBLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9REEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShFQSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPURBKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSkscz1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhcyYmLTEhPXIuaW5kZXhPZihzKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gQlYobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24gV1oobix0KXtuLmlkfHwobi5pZD1gJHtLWn0tJHt0fS0ke0hWKyt9YCl9dmFyIEFBPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgVGUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgVGUsdGhpcy5jaGFuZ2U9bmV3IFRlLHQgaW5zdGFuY2VvZiBjbCYmdC5jaGFuZ2VzLnN1YnNjcmliZShlPT57aWYodGhpcy5fYWN0aXZlSXRlbSl7bGV0IHI9ZS50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9hY3RpdmVJdGVtKTtyPi0xJiZyIT09dGhpcy5fYWN0aXZlSXRlbUluZGV4JiYodGhpcy5fYWN0aXZlSXRlbUluZGV4PXIpfX0pfXNraXBQcmVkaWNhdGUodCl7cmV0dXJuIHRoaXMuX3NraXBQcmVkaWNhdGVGbj10LHRoaXN9d2l0aFdyYXAodD0hMCl7cmV0dXJuIHRoaXMuX3dyYXA9dCx0aGlzfXdpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKHQ9ITApe3JldHVybiB0aGlzLl92ZXJ0aWNhbD10LHRoaXN9d2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0KXtyZXR1cm4gdGhpcy5faG9yaXpvbnRhbD10LHRoaXN9d2l0aEFsbG93ZWRNb2RpZmllcktleXModCl7cmV0dXJuIHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9dCx0aGlzfXdpdGhUeXBlQWhlYWQodD0yMDApe3JldHVybiB0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249dGhpcy5fbGV0dGVyS2V5U3RyZWFtLnBpcGUoTnQoZT0+dGhpcy5fcHJlc3NlZExldHRlcnMucHVzaChlKSksQXIodCksSGUoKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wKSxCKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgcj0xO3I8aS5sZW5ndGgrMTtyKyspe2xldCBvPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrciklaS5sZW5ndGgscz1pW29dO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4ocykmJjA9PT1zLmdldExhYmVsKCkudG9VcHBlckNhc2UoKS50cmltKCkuaW5kZXhPZihlKSl7dGhpcy5zZXRBY3RpdmVJdGVtKG8pO2JyZWFrfX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXX0pLHRoaXN9d2l0aEhvbWVBbmRFbmQodD0hMCl7cmV0dXJuIHRoaXMuX2hvbWVBbmRFbmQ9dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fYWN0aXZlSXRlbTt0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0odCksdGhpcy5fYWN0aXZlSXRlbSE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX1vbktleWRvd24odCl7bGV0IGU9dC5rZXlDb2RlLHI9WyJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Il0uZXZlcnkobz0+IXRbb118fHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXMuaW5kZXhPZihvKT4tMSk7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4gdm9pZCB0aGlzLnRhYk91dC5uZXh0KCk7Y2FzZSA0MDppZih0aGlzLl92ZXJ0aWNhbCYmcil7dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM4OmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM5OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOnRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNzppZih0aGlzLl9ob3Jpem9udGFsJiZyKXsicnRsIj09PXRoaXMuX2hvcml6b250YWw/dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpOnRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzY6aWYodGhpcy5faG9tZUFuZEVuZCYmcil7dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNTppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldExhc3RJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2RlZmF1bHQ6cmV0dXJuIHZvaWQoKHJ8fE1yKHQsInNoaWZ0S2V5IikpJiYodC5rZXkmJjE9PT10LmtleS5sZW5ndGg/dGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQodC5rZXkudG9Mb2NhbGVVcHBlckNhc2UoKSk6KGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3KSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpKX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0LnByZXZlbnREZWZhdWx0KCl9Z2V0IGFjdGl2ZUl0ZW1JbmRleCgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtSW5kZXh9Z2V0IGFjdGl2ZUl0ZW0oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbX1pc1R5cGluZygpe3JldHVybiB0aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MH1zZXRGaXJzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLDEpfXNldExhc3RJdGVtQWN0aXZlKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfXNldE5leHRJdGVtQWN0aXZlKCl7dGhpcy5fYWN0aXZlSXRlbUluZGV4PDA/dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgxKX1zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MCYmdGhpcy5fd3JhcD90aGlzLnNldExhc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoLTEpfXVwZGF0ZUFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLGk9Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW09ZVtpXT8/bnVsbCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9aX1fc2V0QWN0aXZlSXRlbUJ5RGVsdGEodCl7dGhpcy5fd3JhcD90aGlzLl9zZXRBY3RpdmVJbldyYXBNb2RlKHQpOnRoaXMuX3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl9X3NldEFjdGl2ZUluV3JhcE1vZGUodCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgaT0xO2k8PWUubGVuZ3RoO2krKyl7bGV0IHI9KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0KmkrZS5sZW5ndGgpJWUubGVuZ3RoO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4oZVtyXSkpcmV0dXJuIHZvaWQgdGhpcy5zZXRBY3RpdmVJdGVtKHIpfX1fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZSh0KXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCx0KX1fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodCxlKXtsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoaVt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oaVt0XSk7KWlmKCFpW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fV9nZXRJdGVtc0FycmF5KCl7cmV0dXJuIHRoaXMuX2l0ZW1zIGluc3RhbmNlb2YgY2w/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfX0sRF89Y2xhc3MgZXh0ZW5kcyBBQXtzZXRBY3RpdmVJdGVtKHQpe3RoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLnNldEluYWN0aXZlU3R5bGVzKCksc3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRBY3RpdmVTdHlsZXMoKX19LEFfPWNsYXNzIGV4dGVuZHMgQUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29yaWdpbj0icHJvZ3JhbSJ9c2V0Rm9jdXNPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtzdXBlci5zZXRBY3RpdmVJdGVtKHQpLHRoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLmZvY3VzKHRoaXMuX29yaWdpbil9fSxJXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtPWV9aXNEaXNhYmxlZChlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hIShuLm9mZnNldFdpZHRofHxuLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0Q2xpZW50UmVjdHMmJm4uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShlKSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZShlKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtsZXQgaT1mdW5jdGlvbihuKXt0cnl7cmV0dXJuIG4uZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24obil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGUpKTtpZihpJiYoLTE9PT1xWihpKXx8IXRoaXMuaXNWaXNpYmxlKGkpKSlyZXR1cm4hMTtsZXQgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz1xWihlKTtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09bzohKCJpZnJhbWUiPT09cnx8Im9iamVjdCI9PT1yfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlPSJpbnB1dCI9PT10JiZuLnR5cGU7cmV0dXJuInRleHQiPT09ZXx8InBhc3N3b3JkIj09PWV8fCJzZWxlY3QiPT09dHx8InRleHRhcmVhIj09PXR9KGUpKSYmKCJhdWRpbyI9PT1yPyEhZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09bzoidmlkZW8iPT09cj8tMSE9PW8mJihudWxsIT09b3x8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8ZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmUudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiFmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXR8fCJzZWxlY3QiPT09dHx8ImJ1dHRvbiI9PT10fHwidGV4dGFyZWEiPT09dH0obil8fGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fFpaKG4pKX0oZSkmJiF0aGlzLmlzRGlzYWJsZWQoZSkmJihpPy5pZ25vcmVWaXNpYmlsaXR5fHx0aGlzLmlzVmlzaWJsZShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBaWihuKXtpZighbi5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PW4udGFiSW5kZXgpcmV0dXJuITE7bGV0IHQ9bi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghdHx8aXNOYU4ocGFyc2VJbnQodCwxMCkpKX1mdW5jdGlvbiBxWihuKXtpZighWloobikpcmV0dXJuIG51bGw7bGV0IHQ9cGFyc2VJbnQobi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4odCk/LTE6dH12YXIgQkM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXJ9Y3JlYXRlKGUsaT0hMSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9oYXNBdHRhY2hlZD0hMSx0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5lbmRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5fZW5hYmxlZD0hMCxvfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1kZXN0cm95KCl7bGV0IHQ9dGhpcy5fc3RhcnRBbmNob3IsZT10aGlzLl9lbmRBbmNob3I7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksdC5yZW1vdmUoKSksZSYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpLGUucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5nKSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkodCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmUodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KHQpKSl9KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke3R9XSwgW2Nka0ZvY3VzUmVnaW9uJHt0fV0sIFtjZGstZm9jdXMtJHt0fV1gKTtyZXR1cm4ic3RhcnQiPT10P2UubGVuZ3RoP2VbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKGUpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGUpKXtsZXQgaT10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlKTtyZXR1cm4gaT8uZm9jdXModCksISFpfXJldHVybiBlLmZvY3VzKHQpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtsZXQgZT10LmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsdCksdC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCxlKXt0P2Uuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTplLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKHQpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUodCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKHQpfX0oZSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihJXyksUihwdCksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIFZDKG4pe3JldHVybiAwPT09bi5idXR0b25zfHwwPT09bi5vZmZzZXRYJiYwPT09bi5vZmZzZXRZfWZ1bmN0aW9uIEhDKG4pe2xldCB0PW4udG91Y2hlcyYmbi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzJiZuLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIXR8fC0xIT09dC5pZGVudGlmaWVyfHxudWxsIT10LnJhZGl1c1gmJjEhPT10LnJhZGl1c1h8fG51bGwhPXQucmFkaXVzWSYmMSE9PXQucmFkaXVzWSl9bmV3IHNlKCJGT0NVU19UUkFQX0lORVJUX1NUUkFURUdZIik7dmFyIFJUZT1uZXcgc2UoImNkay1pbnB1dC1tb2RhbGl0eS1kZXRlY3Rvci1vcHRpb25zIiksT1RlPXtpZ25vcmVLZXlzOlsxOCwxNywyMjQsOTEsMTZdfSxUXz1Ocyh7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksa1RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IFZyKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPXM9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKGE9PmE9PT1zLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb25Nb3VzZWRvd249cz0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChWQyhzKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9dmMocykpfSx0aGlzLl9vblRvdWNoc3RhcnQ9cz0+e0hDKHMpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb3B0aW9ucz17Li4uT1RlLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKENhKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShkaSgpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLFRfKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sVF8pLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKX0pfWdldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RhbGl0eS5jb21wbGV0ZSgpLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5ZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQpLFIoUlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxGVGU9bmV3IHNlKCJsaXZlQW5ub3VuY2VyRWxlbWVudCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxMVGU9bmV3IHNlKCJMSVZFX0FOTk9VTkNFUl9ERUZBVUxUX09QVElPTlMiKSxVQz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX25nWm9uZT1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPW8sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9saXZlRWxlbWVudD1lfHx0aGlzLl9jcmVhdGVMaXZlRWxlbWVudCgpfWFubm91bmNlKGUsLi4uaSl7bGV0IG8scyxyPXRoaXMuX2RlZmF1bHRPcHRpb25zO3JldHVybiAxPT09aS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgaVswXT9zPWlbMF06W28sc109aSx0aGlzLmNsZWFyKCksY2xlYXJUaW1lb3V0KHRoaXMuX3ByZXZpb3VzVGltZW91dCksb3x8KG89ciYmci5wb2xpdGVuZXNzP3IucG9saXRlbmVzczoicG9saXRlIiksbnVsbD09cyYmciYmKHM9ci5kdXJhdGlvbiksdGhpcy5fbGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLG8pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2UoYT0+dGhpcy5fY3VycmVudFJlc29sdmU9YSkpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIHMmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLHMpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEZUZSw4KSxSKHB0KSxSKEJ0KSxSKExUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQlRlPW5ldyBzZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksVEE9TnMoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHpyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgVGUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1hPT57Zm9yKGxldCBjPXZjKGEpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PWEudHlwZT90aGlzLl9vbkZvY3VzKGEsYyk6dGhpcy5fb25CbHVyKGEsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1zPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1jYShlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4ganQobnVsbCk7bGV0IG89TUEocil8fHRoaXMuX2dldERvY3VtZW50KCkscz10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYocylyZXR1cm4gaSYmKHMuY2hlY2tDaGlsZHJlbj0hMCkscy5zdWJqZWN0O2xldCBhPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgVGUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1jYShlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89Y2EoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFthLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChhLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPXZjKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsVEEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUob3QodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixUQSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocHQpLFIodWkpLFIoa1RlKSxSKEJ0LDgpLFIoQlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSwkWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgR31nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh6cikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxZWj0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLFhaPSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsVlY9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIscVY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPVNvKG5tKS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShWVixZWixYWiksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQoVlYsWVopOjI9PT1pJiZlLmFkZChWVixYWil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHVpKSxSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUF89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHFWKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3pwXX0pLG59KSgpLFZUZT1uZXcgc2UoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhCdCl9fSksVVRlPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLGlyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRyxlKXtsZXQgcj1lLmRvY3VtZW50RWxlbWVudD9lLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbDt0aGlzLnZhbHVlPWZ1bmN0aW9uKG4pe2xldCB0PW4/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PXQmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP1VUZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT10PyJydGwiOiJsdHIifSgoZS5ib2R5P2UuYm9keS5kaXI6bnVsbCl8fHJ8fCJsdHIiKX19bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFZUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksV3A9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGpUZShuLHQpe2lmKDEmbiYmTigwLCJtYXQtcHNldWRvLWNoZWNrYm94Iiw0KSwyJm4pe2xldCBlPU0oKTtiKCJzdGF0ZSIsZS5zZWxlY3RlZD8iY2hlY2tlZCI6InVuY2hlY2tlZCIpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCl9fWZ1bmN0aW9uIEdUZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNSksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIigiLGUuZ3JvdXAubGFiZWwsIikiKX19dmFyIFdUZT1bIioiXSxpSj0obmV3IEtsKCIxNC4yLjciKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5TVEFOREFSRF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIixuLkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixuLkFDQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMSwxKSIsbi5TSEFSUF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC42LDEpIixufSkoKSkscko9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uQ09NUExFWD0iMzc1bXMiLG4uRU5URVJJTkc9IjIyNW1zIixuLkVYSVRJTkc9IjE5NW1zIixufSkoKSxZVGU9bmV3IHNlKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxkbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9zYW5pdHlDaGVja3M9aSx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsZS5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2NoZWNrSXNFbmFibGVkKGUpe3JldHVybiFMQygpJiYoImJvb2xlYW4iPT10eXBlb2YgdGhpcy5fc2FuaXR5Q2hlY2tzP3RoaXMuX3Nhbml0eUNoZWNrczohIXRoaXMuX3Nhbml0eUNoZWNrc1tlXSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocVYpLFIoWVRlLDgpLFIoQnQpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbV3AsV3BdfSksbn0pKCk7ZnVuY3Rpb24gZ28obil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPVd0KHQpfX19ZnVuY3Rpb24gcHMobix0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fWdldCBjb2xvcigpe3JldHVybiB0aGlzLl9jb2xvcn1zZXQgY29sb3IoZSl7bGV0IGk9ZXx8dGhpcy5kZWZhdWx0Q29sb3I7aSE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtJHt0aGlzLl9jb2xvcn1gKSxpJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LSR7aX1gKSx0aGlzLl9jb2xvcj1pKX19fWZ1bmN0aW9uIExzKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QodCl9fX1mdW5jdGlvbiBxcChuLHQ9MCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLl90YWJJbmRleD10LHRoaXMuZGVmYXVsdFRhYkluZGV4PXR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/LTE6dGhpcy5fdGFiSW5kZXh9c2V0IHRhYkluZGV4KGUpe3RoaXMuX3RhYkluZGV4PW51bGwhPWU/UGkoZSk6dGhpcy5kZWZhdWx0VGFiSW5kZXh9fX1mdW5jdGlvbiBSQShuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuZXJyb3JTdGF0ZT0hMX11cGRhdGVFcnJvclN0YXRlKCl7bGV0IHQ9dGhpcy5lcnJvclN0YXRlLG89KHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXJ8fHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcikuaXNFcnJvclN0YXRlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLmNvbnRyb2w6bnVsbCx0aGlzLl9wYXJlbnRGb3JtR3JvdXB8fHRoaXMuX3BhcmVudEZvcm0pO28hPT10JiYodGhpcy5lcnJvclN0YXRlPW8sdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX19fWZ1bmN0aW9uIE9BKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9W10sdGhpcy5pbml0aWFsaXplZD1uZXcgUXQoZT0+e3RoaXMuX2lzSW5pdGlhbGl6ZWQ/dGhpcy5fbm90aWZ5U3Vic2NyaWJlcihlKTp0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMucHVzaChlKX0pfV9tYXJrSW5pdGlhbGl6ZWQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5mb3JFYWNoKHRoaXMuX25vdGlmeVN1YnNjcmliZXIpLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1udWxsfV9ub3RpZnlTdWJzY3JpYmVyKHQpe3QubmV4dCgpLHQuY29tcGxldGUoKX19fW5ldyBzZSgiTUFUX0RBVEVfTE9DQUxFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhyZCl9fSksbmV3IHNlKCJtYXQtZGF0ZS1mb3JtYXRzIik7dmFyIFJfPSgoKT0+e2NsYXNzIG57aXNFcnJvclN0YXRlKGUsaSl7cmV0dXJuISEoZSYmZS5pbnZhbGlkJiYoZS50b3VjaGVkfHxpJiZpLnN1Ym1pdHRlZCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxlSj17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sWVY9TnMoe3Bhc3NpdmU6ITB9KSx0Sj1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxuSj1bIm1vdXNldXAiLCJtb3VzZWxlYXZlIiwidG91Y2hlbmQiLCJ0b3VjaGNhbmNlbCJdLG9KPW5ldyBzZSgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLGVzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1jYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uZUosLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgcz1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUsciksYT10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLHUuc3R5bGUubGVmdD1hLXMrInB4Iix1LnN0eWxlLnRvcD1sLXMrInB4Iix1LnN0eWxlLmhlaWdodD0yKnMrInB4Iix1LnN0eWxlLndpZHRoPTIqcysicHgiLG51bGwhPWkuY29sb3ImJih1LnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSx1LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHUpO2xldCBkPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHUpLGg9ZC50cmFuc2l0aW9uRHVyYXRpb24sZj0ibm9uZSI9PT1kLnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWh8fCIwcywgMHMiPT09aCxtPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLHUsaSxmKTt1LnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIsbS5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bSk7bGV0IEM9bnVsbDtyZXR1cm4hZiYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IF89KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24obSkseT0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZShtKTt1LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLF8pLHUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseSksQz17b25UcmFuc2l0aW9uRW5kOl8sb25UcmFuc2l0aW9uQ2FuY2VsOnl9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQobSxDKSwoZnx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKG0pLG19ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi5lSiwuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1jYSh0KTshZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdGhpcy5fcmVnaXN0ZXJFdmVudHModEopKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKG5KKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSEwKX1fZmluaXNoUmlwcGxlVHJhbnNpdGlvbih0KXswPT09dC5zdGF0ZT90aGlzLl9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpOjI9PT10LnN0YXRlJiZ0aGlzLl9kZXN0cm95UmlwcGxlKHQpfV9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpe2xldCBlPXQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlLHtwZXJzaXN0ZW50Oml9PXQuY29uZmlnO3Quc3RhdGU9MSwhaSYmKCFlfHwhdGhpcy5faXNQb2ludGVyRG93bikmJnQuZmFkZU91dCgpfV9kZXN0cm95UmlwcGxlKHQpe2xldCBlPXRoaXMuX2FjdGl2ZVJpcHBsZXMuZ2V0KHQpPz9udWxsO3RoaXMuX2FjdGl2ZVJpcHBsZXMuZGVsZXRlKHQpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksdD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHQuc3RhdGU9MyxudWxsIT09ZSYmKHQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixlLm9uVHJhbnNpdGlvbkVuZCksdC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25jYW5jZWwiLGUub25UcmFuc2l0aW9uQ2FuY2VsKSksdC5lbGVtZW50LnJlbW92ZSgpfV9vbk1vdXNlZG93bih0KXtsZXQgZT1WQyh0KSxpPXRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCs4MDA7IXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIWUmJiFpJiYodGhpcy5faXNQb2ludGVyRG93bj0hMCx0aGlzLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpKX1fb25Ub3VjaFN0YXJ0KHQpe2lmKCF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFIQyh0KSl7dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHRoaXMuX2lzUG9pbnRlckRvd249ITA7bGV0IGU9dC5jaGFuZ2VkVG91Y2hlcztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0aGlzLmZhZGVJblJpcHBsZShlW2ldLmNsaWVudFgsZVtpXS5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpfX1fb25Qb2ludGVyVXAoKXshdGhpcy5faXNQb2ludGVyRG93bnx8KHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+eyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYoMT09PXQuc3RhdGV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiYwPT09dC5zdGF0ZSkmJnQuZmFkZU91dCgpfSkpfV9yZWdpc3RlckV2ZW50cyh0KXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0LmZvckVhY2goZT0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLFlWKX0pfSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXt0aGlzLl90cmlnZ2VyRWxlbWVudCYmKHRKLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQmJm5KLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pKX19KHRoaXMsaSxlLHIpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfWZhZGVPdXRBbGwoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsKCl9ZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpfWdldCByaXBwbGVDb25maWcoKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246ey4uLnRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uLC4uLiJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlP3tlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9Ont9LC4uLnRoaXMuYW5pbWF0aW9ufSx0ZXJtaW5hdGVPblBvaW50ZXJVcDp0aGlzLl9nbG9iYWxPcHRpb25zLnRlcm1pbmF0ZU9uUG9pbnRlclVwfX1nZXQgcmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfV9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9bGF1bmNoKGUsaT0wLHIpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoZSxpLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5yfSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCx7Li4udGhpcy5yaXBwbGVDb25maWcsLi4uZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHB0KSx3KHVpKSx3KG9KLDgpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtcmlwcGxlIiwiIl0sWyIiLCJtYXRSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtcmlwcGxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsaS51bmJvdW5kZWQpfSxpbnB1dHM6e2NvbG9yOlsibWF0UmlwcGxlQ29sb3IiLCJjb2xvciJdLHVuYm91bmRlZDpbIm1hdFJpcHBsZVVuYm91bmRlZCIsInVuYm91bmRlZCJdLGNlbnRlcmVkOlsibWF0UmlwcGxlQ2VudGVyZWQiLCJjZW50ZXJlZCJdLHJhZGl1czpbIm1hdFJpcHBsZVJhZGl1cyIsInJhZGl1cyJdLGFuaW1hdGlvbjpbIm1hdFJpcHBsZUFuaW1hdGlvbiIsImFuaW1hdGlvbiJdLGRpc2FibGVkOlsibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHRyaWdnZXI6WyJtYXRSaXBwbGVUcmlnZ2VyIiwidHJpZ2dlciJdfSxleHBvcnRBczpbIm1hdFJpcHBsZSJdfSksbn0pKCkseGM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLFpUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2FuaW1hdGlvbk1vZGU9ZSx0aGlzLnN0YXRlPSJ1bmNoZWNrZWQiLHRoaXMuZGlzYWJsZWQ9ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wc2V1ZG8tY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtcHNldWRvLWNoZWNrYm94Il0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLCJpbmRldGVybWluYXRlIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQiLCJjaGVja2VkIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIixpLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WycubWF0LXBzZXVkby1jaGVja2JveHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JvcmRlcjoycHggc29saWQ7Ym9yZGVyLXJhZGl1czoycHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSxiYWNrZ3JvdW5kLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO2NvbnRlbnQ6IiI7Ym9yZGVyLWJvdHRvbToycHggc29saWQgY3VycmVudENvbG9yO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3gubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjVweDtsZWZ0OjFweDt3aWR0aDoxMHB4O29wYWNpdHk6MTtib3JkZXItcmFkaXVzOjJweH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt0b3A6Mi40cHg7bGVmdDoxcHg7d2lkdGg6OHB4O2hlaWdodDozcHg7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7b3BhY2l0eToxO2JveC1zaXppbmc6Y29udGVudC1ib3h9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSlRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbl19KSxufSkoKSxqQz1uZXcgc2UoIk1BVF9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCIpLEdDPShnbyhjbGFzc3t9KSxuZXcgc2UoIk1hdE9wdGdyb3VwIikpLCRUZT0wLHpDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0hMSl7dGhpcy5zb3VyY2U9dCx0aGlzLmlzVXNlcklucHV0PWV9fSxlRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYXJlbnQ9cix0aGlzLmdyb3VwPW8sdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5pZD0ibWF0LW9wdGlvbi0iKyRUZSsrLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZX1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQubXVsdGlwbGV9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmRpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSl9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4hKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlzYWJsZVJpcHBsZSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9Z2V0IHZpZXdWYWx1ZSgpe3JldHVybih0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnRleHRDb250ZW50fHwiIikudHJpbSgpfXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWRlc2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKSl9Zm9jdXMoZSxpKXtsZXQgcj10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiByLmZvY3VzJiZyLmZvY3VzKGkpfXNldEFjdGl2ZVN0eWxlcygpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2V0SW5hY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldExhYmVsKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfV9oYW5kbGVLZXlkb3duKGUpeygxMz09PWUua2V5Q29kZXx8MzI9PT1lLmtleUNvZGUpJiYhTXIoZSkmJih0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9X3NlbGVjdFZpYUludGVyYWN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkfHwhdGhpcy5tdWx0aXBsZSYmbnVsbH1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHRoaXMuX3NlbGVjdGVkKXtsZXQgZT10aGlzLnZpZXdWYWx1ZTtlIT09dGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmKHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9ZSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KGU9ITEpe3RoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgekModGhpcyxlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCksdWE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGVEZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhqQyw4KSx3KEdDLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1vcHRpb24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pLDImZSYmKEFhKCJpZCIsaS5pZCksemUoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1zZWxlY3RlZCIsaS5fZ2V0QXJpYVNlbGVjdGVkKCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJtYXQtc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtb3B0aW9uLW11bHRpcGxlIixpLm11bHRpcGxlKSgibWF0LWFjdGl2ZSIsaS5hY3RpdmUpKCJtYXQtb3B0aW9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGV4cG9ydEFzOlsibWF0T3B0aW9uIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6V1RlLGRlY2xzOjUsdmFyczo0LGNvbnN0czpbWyJjbGFzcyIsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIiw0LCJuZ0lmIl0sWzEsIm1hdC1vcHRpb24tdGV4dCJdLFsiY2xhc3MiLCJjZGstdmlzdWFsbHktaGlkZGVuIiw0LCJuZ0lmIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtb3B0aW9uLXJpcHBsZSIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIl0sWzEsImNkay12aXN1YWxseS1oaWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxqVGUsMSwyLCJtYXQtcHNldWRvLWNoZWNrYm94IiwwKSxnKDEsInNwYW4iLDEpLE5uKDIpLHYoKSxFKDMsR1RlLDIsMSwic3BhbiIsMiksTig0LCJkaXYiLDMpKSwyJmUmJihiKCJuZ0lmIixpLm11bHRpcGxlKSx4KDMpLGIoIm5nSWYiLGkuZ3JvdXAmJmkuZ3JvdXAuX2luZXJ0KSx4KDEpLGIoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlZHx8aS5kaXNhYmxlUmlwcGxlKSl9LGRlcGVuZGVuY2llczpbZXMsWGUsWlRlXSxzdHlsZXM6WycubWF0LW9wdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtb3B0aW9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0aW9uIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVdey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MzJweH0ubWF0LW9wdGlvbi5tYXQtYWN0aXZlOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17b3BhY2l0eTouNX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMHB4O2hlaWdodDowO2JvcmRlci1ib3R0b206c29saWQgMTBweDtib3JkZXItcmFkaXVzOjEwcHh9W2Rpcj1ydGxdIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6OmFmdGVye3JpZ2h0OmF1dG87bGVmdDoxNnB4fS5tYXQtb3B0aW9uLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1vcHRpb24gLm1hdC1vcHRpb24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gV0Mobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IHM9MDtzPG4rMTtzKyspaVtzXS5ncm91cCYmaVtzXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiBrQShuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBPXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsa2UsZG4sSlRlXX0pLG59KSgpLHNKPVsibWF0LWJ1dHRvbiIsIiJdLGFKPVsiKiJdLGlEZT1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxyRGU9cHMoZ28oTHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksJG49KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJEZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuaXNSb3VuZEJ1dHRvbj10aGlzLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHRoaXMuaXNJY29uQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IobGV0IG8gb2YgaURlKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKG8pJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQobyk7ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLmUpe3JldHVybiBlLnNvbWUoaT0+dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHpyKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoZXMsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yaXBwbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRkE9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGksZSxyKSx0aGlzLl9uZ1pvbmU9byx0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHM9cz0+e3RoaXMuZGlzYWJsZWQmJihzLnByZXZlbnREZWZhdWx0KCkscy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9KTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6ciksdyhBZSksdyhMaSw4KSx3KHB0LDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhIiwibWF0LWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJhIiwibWF0LWZhYiIsIiJdLFsiYSIsIm1hdC1taW5pLWZhYiIsIiJdLFsiYSIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mbGF0LWJ1dHRvbiIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUmk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3hjLGRuLGRuXX0pLG59KSgpLGtfPWNsYXNze30sTkE9Y2xhc3MgZXh0ZW5kcyBrX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIFd5KHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6anQodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319LExBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXModCxlLGkscixvKXt0LmZvckVhY2hPcGVyYXRpb24oKHMsYSxsKT0+e2xldCBjLHU7bnVsbD09cy5wcmV2aW91c0luZGV4PyhjPXRoaXMuX2luc2VydFZpZXcoKCk9PmkocyxhLGwpLGwsZSxyKHMpKSx1PWM/MTowKTpudWxsPT1sPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoYSxlKSx1PTMpOihjPXRoaXMuX21vdmVWaWV3KGEsbCxlLHIocykpLHU9MiksbyYmbyh7Y29udGV4dDpjPy5jb250ZXh0LG9wZXJhdGlvbjp1LHJlY29yZDpzfSl9KX1kZXRhY2goKXtmb3IobGV0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsaSxyKXtsZXQgbz10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsaSk7aWYobylyZXR1cm4gdm9pZChvLmNvbnRleHQuJGltcGxpY2l0PXIpO2xldCBzPXQoKTtyZXR1cm4gaS5jcmVhdGVFbWJlZGRlZFZpZXcocy50ZW1wbGF0ZVJlZixzLmNvbnRleHQscy5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyh0LGUpe2xldCBpPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGksZSl9X21vdmVWaWV3KHQsZSxpLHIpe2xldCBvPWkuZ2V0KHQpO3JldHVybiBpLm1vdmUobyxlKSxvLmNvbnRleHQuJGltcGxpY2l0PXIsb31fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2xldCBpPWUuaW5kZXhPZih0KTstMT09PWk/dC5kZXN0cm95KCk6ZS5yZW1vdmUoaSl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKHQsZSl7bGV0IGk9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBpJiZlLmluc2VydChpLHQpLGl8fG51bGx9fSxGXz1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExLGUsaT0hMCxyKXt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPWksdGhpcy5jb21wYXJlV2l0aD1yLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5jaGFuZ2VkPW5ldyBUZSxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKG89PnRoaXMuX21hcmtTZWxlY3RlZChvKSk6dGhpcy5fbWFya1NlbGVjdGVkKGVbMF0pLHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aD0wKX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD1BcnJheS5mcm9tKHRoaXMuX3NlbGVjdGlvbi52YWx1ZXMoKSkpLHRoaXMuX3NlbGVjdGVkfXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX21hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1zZXRTZWxlY3Rpb24oLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpO2xldCBlPXRoaXMuc2VsZWN0ZWQsaT1uZXcgU2V0KHQpO3QuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpLGUuZmlsdGVyKG89PiFpLmhhcyhvKSkuZm9yRWFjaChvPT50aGlzLl91bm1hcmtTZWxlY3RlZChvKSk7bGV0IHI9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxyfXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIodD0hMCl7dGhpcy5fdW5tYXJrQWxsKCk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0JiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWlzU2VsZWN0ZWQodCl7aWYodGhpcy5jb21wYXJlV2l0aCl7Zm9yKGxldCBlIG9mIHRoaXMuX3NlbGVjdGlvbilpZih0aGlzLmNvbXBhcmVXaXRoKGUsdCkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5oYXModCl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9aGFzVmFsdWUoKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9c29ydCh0KXt0aGlzLl9tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX1pc011bHRpcGxlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMuY2hhbmdlZC5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX1fbWFya1NlbGVjdGVkKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLmlzU2VsZWN0ZWQodCl8fHRoaXMuX3NlbGVjdGlvbi5hZGQodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX3NlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCkmJih0aGlzLl9zZWxlY3Rpb24uZGVsZXRlKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9kZXNlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtBbGwoKXt0aGlzLmlzRW1wdHkoKXx8dGhpcy5fc2VsZWN0aW9uLmZvckVhY2godD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpfV92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCl7fV9oYXNRdWV1ZWRDaGFuZ2VzKCl7cmV0dXJuISghdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgmJiF0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGgpfX0sUVY9bmV3IHNlKCJfVmlld1JlcGVhdGVyIiksb0RlPVsiY29udGVudFdyYXBwZXIiXSxzRGU9WyIqIl0sZEo9bmV3IHNlKCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpO2Z1bmN0aW9uIGFEZShuKXtyZXR1cm4gbi5fc2Nyb2xsU3RyYXRlZ3l9dmFyIHBKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtU2l6ZT0yMCx0aGlzLl9taW5CdWZmZXJQeD0xMDAsdGhpcy5fbWF4QnVmZmVyUHg9MjAwLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgVGUsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShkaSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pfWF0dGFjaCh0KXt0aGlzLl92aWV3cG9ydD10LHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodCxlLGkpe3RoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRhTGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJlZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleCh0LGUpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zY3JvbGxUb09mZnNldCh0KnRoaXMuX2l0ZW1TaXplLGUpfV91cGRhdGVUb3RhbENvbnRlbnRTaXplKCl7IXRoaXMuX3ZpZXdwb3J0fHx0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2xldCB0PXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxlPXtzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZH0saT10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxyPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSxvPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSxzPXRoaXMuX2l0ZW1TaXplPjA/by90aGlzLl9pdGVtU2l6ZTowO2lmKGUuZW5kPnIpe2xldCBsPU1hdGguY2VpbChpL3RoaXMuX2l0ZW1TaXplKSxjPU1hdGgubWF4KDAsTWF0aC5taW4ocyxyLWwpKTtzIT1jJiYocz1jLG89Yyp0aGlzLl9pdGVtU2l6ZSxlLnN0YXJ0PU1hdGguZmxvb3IocykpLGUuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4ocixlLnN0YXJ0K2wpKX1sZXQgYT1vLWUuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYoYTx0aGlzLl9taW5CdWZmZXJQeCYmMCE9ZS5zdGFydCl7bGV0IGw9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1hKS90aGlzLl9pdGVtU2l6ZSk7ZS5zdGFydD1NYXRoLm1heCgwLGUuc3RhcnQtbCksZS5lbmQ9TWF0aC5taW4ocixNYXRoLmNlaWwocysoaSt0aGlzLl9taW5CdWZmZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2xldCBsPWUuZW5kKnRoaXMuX2l0ZW1TaXplLShvK2kpO2lmKGw8dGhpcy5fbWluQnVmZmVyUHgmJmUuZW5kIT1yKXtsZXQgYz1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWwpL3RoaXMuX2l0ZW1TaXplKTtjPjAmJihlLmVuZD1NYXRoLm1pbihyLGUuZW5kK2MpLGUuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHMtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNpemUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoZSksdGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmUuc3RhcnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKHMpKX19KHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5faXRlbVNpemV9c2V0IGl0ZW1TaXplKGUpe3RoaXMuX2l0ZW1TaXplPVBpKGUpfWdldCBtaW5CdWZmZXJQeCgpe3JldHVybiB0aGlzLl9taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoZSl7dGhpcy5fbWluQnVmZmVyUHg9UGkoZSl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21heEJ1ZmZlclB4fXNldCBtYXhCdWZmZXJQeChlKXt0aGlzLl9tYXhCdWZmZXJQeD1QaShlKX1uZ09uQ2hhbmdlcygpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsIml0ZW1TaXplIiwiIl1dLGlucHV0czp7aXRlbVNpemU6Iml0ZW1TaXplIixtaW5CdWZmZXJQeDoibWluQnVmZmVyUHgiLG1heEJ1ZmZlclB4OiJtYXhCdWZmZXJQeCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6ZEosdXNlRmFjdG9yeTphRGUsZGVwczpbcmkoKCk9Pm4pXX1dKSx6dF19KSxufSkoKSxpbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX3Njcm9sbGVkPW5ldyBUZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9cn1yZWdpc3RlcihlKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGUpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGUsZS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoZSkpKX1kZXJlZ2lzdGVyKGUpe2xldCBpPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoZSk7aSYmKGkudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGUpKX1zY3JvbGxlZChlPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBRdChpPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2xldCByPWU+MD90aGlzLl9zY3JvbGxlZC5waXBlKHpjKGUpKS5zdWJzY3JpYmUoaSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGkpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntyLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6anQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGUsaSk9PnRoaXMuZGVyZWdpc3RlcihpKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGUsaSl7bGV0IHI9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoaSkucGlwZShIZShvPT4hb3x8ci5pbmRleE9mKG8pPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgocixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyxlKSYmaS5wdXNoKG8pfSksaX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZSxpKXtsZXQgcj1jYShpKSxvPWUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYocj09bylyZXR1cm4hMH13aGlsZShyPXIucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bGkodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKHVpKSxSKEJ0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxZcD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuZWxlbWVudFJlZj1lLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1pLHRoaXMubmdab25lPXIsdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgUXQocz0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmxpKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShzKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1lLmxlZnQmJihlLmxlZnQ9cj9lLmVuZDplLnN0YXJ0KSxudWxsPT1lLnJpZ2h0JiYoZS5yaWdodD1yP2Uuc3RhcnQ6ZS5lbmQpLG51bGwhPWUuYm90dG9tJiYoZS50b3A9aS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQtZS5ib3R0b20pLHImJjAhPXdfKCk/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUubGVmdCksMj09d18oKT9lLmxlZnQ9ZS5yaWdodDoxPT13XygpJiYoZS5sZWZ0PWUucmlnaHQ/LWUucmlnaHQ6ZS5yaWdodCkpOm51bGwhPWUucmlnaHQmJihlLmxlZnQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGUpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt3QSgpP2kuc2Nyb2xsVG8oZSk6KG51bGwhPWUudG9wJiYoaS5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKGkuc2Nyb2xsTGVmdD1lLmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpPSJsZWZ0IixyPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09ZSlyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWUpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2xldCBzPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPXM/cjppOiJlbmQiPT1lJiYoZT1zP2k6cikscyYmMj09d18oKT9lPT1pP28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnQ6by5zY3JvbGxMZWZ0OnMmJjE9PXdfKCk/ZT09aT9vLnNjcm9sbExlZnQrby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoOi1vLnNjcm9sbExlZnQ6ZT09aT9vLnNjcm9sbExlZnQ6by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksbn0pKCksZGE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IFRlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZSh6YyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGNKPW5ldyBzZSgiVklSVFVBTF9TQ1JPTExBQkxFIiksdURlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZcHtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX1tZWFzdXJlVmlld3BvcnRTaXplKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWU/aS5jbGllbnRXaWR0aDppLmNsaWVudEhlaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHBEZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9MTzpmZyxxQz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxhLHIscyksdGhpcy5lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuc2Nyb2xsYWJsZT1jLHRoaXMuX3BsYXRmb3JtPVNvKHVpKSx0aGlzLl9kZXRhY2hlZFN1YmplY3Q9bmV3IFRlLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyBUZSx0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX2FwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBRdCh1PT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShkPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PnUubmV4dChkKSkpKSksdGhpcy5yZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LHRoaXMuX3RvdGFsQ29udGVudFNpemU9MCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iIix0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9IiIsdGhpcy5fcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH0sdGhpcy5fZGF0YUxlbmd0aD0wLHRoaXMuX3ZpZXdwb3J0U2l6ZT0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W10sdGhpcy5fdmlld3BvcnRDaGFuZ2VzPXZuLkVNUFRZLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1sLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihlKXt0aGlzLl9vcmllbnRhdGlvbiE9PWUmJih0aGlzLl9vcmllbnRhdGlvbj1lLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Z2V0IGFwcGVuZE9ubHkoKXtyZXR1cm4gdGhpcy5fYXBwZW5kT25seX1zZXQgYXBwZW5kT25seShlKXt0aGlzLl9hcHBlbmRPbmx5PVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKFZuKG51bGwpLHpjKDAscERlKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGUpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9ZSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUob3QodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGk9PntsZXQgcj1pLmxlbmd0aDtyIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9cix0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnN0YXJ0PT10LnN0YXJ0JiZuLmVuZD09dC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGUpfHwodGhpcy5hcHBlbmRPbmx5JiYoZT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsZS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWUpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoZSxpPSJ0by1zdGFydCIpe2U9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09aT8wOmU7bGV0IG89Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHM9bz8iWCI6IlkiLGw9YHRyYW5zbGF0ZSR7c30oJHtOdW1iZXIoKG8mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqZSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9ZSwidG8tZW5kIj09PWkmJihsKz1gIHRyYW5zbGF0ZSR7c30oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9bCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1sLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGUsaT0iYXV0byIpe2xldCByPXtiZWhhdmlvcjppfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3Iuc3RhcnQ9ZTpyLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhyKX1zY3JvbGxUb0luZGV4KGUsaT0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpO3JldHVybiBpPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9yPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpOnI9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpLE1hdGgubWF4KDAsaShlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCBpLHI9ImxlZnQiLG89InJpZ2h0IixzPSJydGwiPT10aGlzLmRpcj8udmFsdWU7aT0ic3RhcnQiPT1lP3M/bzpyOiJlbmQiPT1lP3M/cjpvOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7bGV0IGE9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGkpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtpXS1hfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7bGV0IGU9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShlKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShlLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGUpe2UmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goZSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtsZXQgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IobGV0IGkgb2YgZSlpKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHB0KSx3KGRKLDgpLHcoaXIsOCksdyhpbSksdyhkYSksdyhjSiw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQob0RlLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpZcCx1c2VGYWN0b3J5Oih0LGUpPT50fHxlLGRlcHM6W1tuZXcgT28sbmV3IGpnKGNKKV0sbl19XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpzRGUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsiY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDAsMSksTm4oMiksdigpLE4oMywiZGl2IiwyKSksMiZlJiYoeCgzKSxPdCgid2lkdGgiLGkuX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixpLl90b3RhbENvbnRlbnRIZWlnaHQpKX0sc3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpzdHJpY3Q7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdUoobix0LGUpe2lmKCFlLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtsZXQgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PW4/InN0YXJ0Ij09PXQ/ci5sZWZ0OnIucmlnaHQ6InN0YXJ0Ij09PXQ/ci50b3A6ci5ib3R0b219dmFyIGhKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl92aWV3UmVwZWF0ZXI9byx0aGlzLl92aWV3cG9ydD1zLHRoaXMudmlld0NoYW5nZT1uZXcgVGUsdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXM9bmV3IFRlLHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKFZuKG51bGwpLHlnKCksdmkoKFtsLGNdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShsLGMpKSxRcygxKSksdGhpcy5fZGlmZmVyPW51bGwsdGhpcy5fbmVlZHNVcGRhdGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBUZSx0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGw9Pnt0aGlzLl9kYXRhPWwsdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUobD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9bCx0aGlzLnZpZXdDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmYS5ydW4oKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQuYXR0YWNoKHRoaXMpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoZSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWUsZnVuY3Rpb24obil7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbm5lY3QmJiEobiBpbnN0YW5jZW9mIFV5KX0oZSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChlKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBOQShXeShlKT9lOkFycmF5LmZyb20oZXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShlKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1lPyhpLHIpPT5lKGkrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxyKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9ZSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPVBpKGUpfW1lYXN1cmVSYW5nZVNpemUoZSxpKXtpZihlLnN0YXJ0Pj1lLmVuZClyZXR1cm4gMDtsZXQgcyxhLHI9ZS5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LG89ZS5lbmQtZS5zdGFydDtmb3IobGV0IGw9MDtsPG87bCsrKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7cz1hPWMucm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IGw9by0xO2w+LTE7bC0tKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7YT1jLnJvb3ROb2Rlc1tjLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBzJiZhP3VKKGksImVuZCIsYSktdUooaSwic3RhcnQiLHMpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7bGV0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7ZT90aGlzLl9hcHBseUNoYW5nZXMoZSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMudmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpeyF0aGlzLl9yZW5kZXJlZFJhbmdlfHwodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChlLGkpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoZSxpKTppKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGUsaSl7cmV0dXJuIGUmJmUuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxpP2kuY29ubmVjdCh0aGlzKTpqdCgpfV91cGRhdGVDb250ZXh0KCl7bGV0IGU9dGhpcy5fZGF0YS5sZW5ndGgsaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2ktLTspe2xldCByPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGkpO3IuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2ksci5jb250ZXh0LmNvdW50PWUsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhyLmNvbnRleHQpLHIuZGV0ZWN0Q2hhbmdlcygpfX1fYXBwbHlDaGFuZ2VzKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci5hcHBseUNoYW5nZXMoZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLChvLHMsYSk9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3MobyxhKSxvPT5vLml0ZW0pLGUuZm9yRWFjaElkZW50aXR5Q2hhbmdlKG89Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChvLmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9by5pdGVtfSk7bGV0IGk9dGhpcy5fZGF0YS5sZW5ndGgscj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO3ItLTspe2xldCBvPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KHIpO28uY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K3Isby5jb250ZXh0LmNvdW50PWksdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhvLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhlKXtlLmZpcnN0PTA9PT1lLmluZGV4LGUubGFzdD1lLmluZGV4PT09ZS5jb3VudC0xLGUuZXZlbj1lLmluZGV4JTI9PTAsZS5vZGQ9IWUuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyhlLGkpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6ZS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6aX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpLHcoUVYpLHcocUMsNCksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpRVix1c2VDbGFzczpMQX1dKV19KSxufSkoKSxTdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksQ2Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1dwLFN1LFdwLFN1XX0pLG59KSgpLFlDPWNsYXNze2F0dGFjaCh0KXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9ZGV0YWNoKCl7bGV0IHQ9dGhpcy5fYXR0YWNoZWRIb3N0O251bGwhPXQmJih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9c2V0QXR0YWNoZWRIb3N0KHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fX0sQ2M9Y2xhc3MgZXh0ZW5kcyBZQ3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29tcG9uZW50PXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXJ9fSxocz1jbGFzcyBleHRlbmRzIFlDe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy50ZW1wbGF0ZVJlZj10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuY29udGV4dD1pLHRoaXMuaW5qZWN0b3I9cn1nZXQgb3JpZ2luKCl7cmV0dXJuIHRoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZn1hdHRhY2godCxlPXRoaXMuY29udGV4dCl7cmV0dXJuIHRoaXMuY29udGV4dD1lLHN1cGVyLmF0dGFjaCh0KX1kZXRhY2goKXtyZXR1cm4gdGhpcy5jb250ZXh0PXZvaWQgMCxzdXBlci5kZXRhY2goKX19LFpWPWNsYXNzIGV4dGVuZHMgWUN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmVsZW1lbnQ9dCBpbnN0YW5jZW9mIEFlP3QubmF0aXZlRWxlbWVudDp0fX0sWHA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW51bGx9aGFzQXR0YWNoZWQoKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfWF0dGFjaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENjPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgaHM/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dGhpcy5hdHRhY2hEb21Qb3J0YWwmJnQgaW5zdGFuY2VvZiBaVj8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaERvbVBvcnRhbCh0KSk6dm9pZCAwfWRldGFjaCgpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfWRpc3Bvc2UoKXt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuZGV0YWNoKCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCksdGhpcy5faXNEaXNwb3NlZD0hMH1zZXREaXNwb3NlRm4odCl7dGhpcy5fZGlzcG9zZUZuPXR9X2ludm9rZURpc3Bvc2VGbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX19LFhDPWNsYXNzIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcigpLHRoaXMub3V0bGV0RWxlbWVudD10LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX2FwcFJlZj1pLHRoaXMuX2RlZmF1bHRJbmplY3Rvcj1yLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXM9PntsZXQgYT1zLmVsZW1lbnQsbD10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLGEpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1zLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+e2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhLGwpfSl9LHRoaXMuX2RvY3VtZW50PW99YXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpe2xldCByLGk9KHQuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfHx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhyPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoaSx0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5pbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oKCk9PnIuZGVzdHJveSgpKSk6KHI9aS5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yfHx6bi5OVUxMKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhyLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e3RoaXMuX2FwcFJlZi52aWV3Q291bnQ+MCYmdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoci5ob3N0Vmlldyksci5kZXN0cm95KCl9KSksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2dldENvbXBvbmVudFJvb3ROb2RlKHIpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHJ9YXR0YWNoVGVtcGxhdGVQb3J0YWwodCl7bGV0IGU9dC52aWV3Q29udGFpbmVyUmVmLGk9ZS5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQse2luamVjdG9yOnQuaW5qZWN0b3J9KTtyZXR1cm4gaS5yb290Tm9kZXMuZm9yRWFjaChyPT50aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQocikpLGkuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT57bGV0IHI9ZS5pbmRleE9mKGkpOy0xIT09ciYmZS5yZW1vdmUocil9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LGl9ZGlzcG9zZSgpe3N1cGVyLmRpc3Bvc2UoKSx0aGlzLm91dGxldEVsZW1lbnQucmVtb3ZlKCl9X2dldENvbXBvbmVudFJvb3ROb2RlKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX19LGZKPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoc3tjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcoeWkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsIiwiIl1dLGV4cG9ydEFzOlsiY2RrUG9ydGFsIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYcHtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLmF0dGFjaGVkPW5ldyBHLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW89PntsZXQgcz1vLmVsZW1lbnQsYT10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7by5zZXRBdHRhY2hlZEhvc3QodGhpcykscy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHMpLHRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9byxzdXBlci5zZXREaXNwb3NlRm4oKCk9PnthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocyxhKX0pfSx0aGlzLl9kb2N1bWVudD1yfWdldCBwb3J0YWwoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9c2V0IHBvcnRhbChlKXt0aGlzLmhhc0F0dGFjaGVkKCkmJiFlJiYhdGhpcy5faXNJbml0aWFsaXplZHx8KHRoaXMuaGFzQXR0YWNoZWQoKSYmc3VwZXIuZGV0YWNoKCksZSYmc3VwZXIuYXR0YWNoKGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWV8fG51bGwpfWdldCBhdHRhY2hlZFJlZigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXtzdXBlci5kaXNwb3NlKCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT1udWxsIT1lLnZpZXdDb250YWluZXJSZWY/ZS52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsbz0oZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jb21wb25lbnQpLHM9aS5jcmVhdGVDb21wb25lbnQobyxpLmxlbmd0aCxlLmluamVjdG9yfHxpLmluamVjdG9yKTtyZXR1cm4gaSE9PXRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocy5ob3N0Vmlldy5yb290Tm9kZXNbMF0pLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+cy5kZXN0cm95KCkpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cyx0aGlzLmF0dGFjaGVkLmVtaXQocyksc31hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlLnRlbXBsYXRlUmVmLGUuY29udGV4dCx7aW5qZWN0b3I6ZS5pbmplY3Rvcn0pO3JldHVybiBzdXBlci5zZXREaXNwb3NlRm4oKCk9PnRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfV9nZXRSb290Tm9kZSgpe2xldCBlPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiBlLm5vZGVUeXBlPT09ZS5FTEVNRU5UX05PREU/ZTplLnBhcmVudE5vZGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pLHcoeWkpLHcoQnQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLGlucHV0czp7cG9ydGFsOlsiY2RrUG9ydGFsT3V0bGV0IiwicG9ydGFsIl19LG91dHB1dHM6e2F0dGFjaGVkOiJhdHRhY2hlZCJ9LGV4cG9ydEFzOlsiY2RrUG9ydGFsT3V0bGV0Il0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHdjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxtSj13QSgpLFZBPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIGU1KG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gZ0oobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4udG9wPGUudG9wfHxuLmJvdHRvbT5lLmJvdHRvbXx8bi5sZWZ0PGUubGVmdHx8bi5yaWdodD5lLnJpZ2h0KX12YXIgb209Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLmF1dG9DbG9zZSl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtlNShlLFt7d2lkdGg6aSxoZWlnaHQ6cixib3R0b206cixyaWdodDppLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpKX19KSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSxoRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX25nWm9uZT1yLHRoaXMubm9vcD0oKT0+bmV3IFZBLHRoaXMuY2xvc2U9cz0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKX19YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXtpZih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pcmV0dXJuO2xldCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXQuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50aGlzLl9jb25maWcudGhyZXNob2xkP3RoaXMuX2RldGFjaCgpOnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dC5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX1kaXNhYmxlKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfWRldGFjaCgpe3RoaXMuZGlzYWJsZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH19KHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIscyksdGhpcy5ibG9jaz0oKT0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfWF0dGFjaCgpe31lbmFibGUoKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fWRpc2FibGUoKXtpZih0aGlzLl9pc0VuYWJsZWQpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPXQuc3R5bGUscj10aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLG89aS5zY3JvbGxCZWhhdmlvcnx8IiIscz1yLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsaS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LGkudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksbUomJihpLnNjcm9sbEJlaGF2aW9yPXIuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iKSx3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksbUomJihpLnNjcm9sbEJlaGF2aW9yPW8sci5zY3JvbGxCZWhhdmlvcj1zKX19X2NhbkJlRW5hYmxlZCgpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiBlLnNjcm9sbEhlaWdodD5pLmhlaWdodHx8ZS5zY3JvbGxXaWR0aD5pLndpZHRofX0odGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCksdGhpcy5yZXBvc2l0aW9uPXM9Pm5ldyBvbSh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fbmdab25lLHMpLHRoaXMuX2RvY3VtZW50PW99fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaW0pLFIoZGEpLFIocHQpLFIoQnQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxEbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyBWQSx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtsZXQgZT1PYmplY3Qua2V5cyh0KTtmb3IobGV0IGkgb2YgZSl2b2lkIDAhPT10W2ldJiYodGhpc1tpXT10W2ldKX19fSx4Sj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fZG9jdW1lbnQ9ZX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCl9YWRkKGUpe3RoaXMucmVtb3ZlKGUpLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaChlKX1yZW1vdmUoZSl7bGV0IGk9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5pbmRleE9mKGUpO2k+LTEmJnRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc3BsaWNlKGksMSksMD09PXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZ0aGlzLmRldGFjaCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZkRlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB4Sntjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUpLHRoaXMuX25nWm9uZT1pLHRoaXMuX2tleWRvd25MaXN0ZW5lcj1yPT57bGV0IG89dGhpcy5fYXR0YWNoZWRPdmVybGF5cztmb3IobGV0IHM9by5sZW5ndGgtMTtzPi0xO3MtLSlpZihvW3NdLl9rZXlkb3duRXZlbnRzLm9ic2VydmVycy5sZW5ndGg+MCl7bGV0IGE9b1tzXS5fa2V5ZG93bkV2ZW50czt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bigoKT0+YS5uZXh0KHIpKTphLm5leHQocik7YnJlYWt9fX1hZGQoZSl7c3VwZXIuYWRkKGUpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lcikpOnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSEwKX1kZXRhY2goKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxtRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcj1vPT57dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD12YyhvKX0sdGhpcy5fY2xpY2tMaXN0ZW5lcj1vPT57bGV0IHM9dmMobyksYT0iY2xpY2siPT09by50eXBlJiZ0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0P3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ6czt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW51bGw7bGV0IGw9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zbGljZSgpO2ZvcihsZXQgYz1sLmxlbmd0aC0xO2M+LTE7Yy0tKXtsZXQgdT1sW2NdO2lmKHUuX291dHNpZGVQb2ludGVyRXZlbnRzLm9ic2VydmVycy5sZW5ndGg8MXx8IXUuaGFzQXR0YWNoZWQoKSljb250aW51ZTtpZih1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHMpfHx1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGEpKWJyZWFrO2xldCBkPXUuX291dHNpZGVQb2ludGVyRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5kLm5leHQobykpOmQubmV4dChvKX19fWFkZChlKXtpZihzdXBlci5hZGQoZSksIXRoaXMuX2lzQXR0YWNoZWQpe2xldCBpPXRoaXMuX2RvY3VtZW50LmJvZHk7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSkpOnRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKGkpLHRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlPWkuc3R5bGUuY3Vyc29yLGkuc3R5bGUuY3Vyc29yPSJwb2ludGVyIix0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSEwKSx0aGlzLl9pc0F0dGFjaGVkPSEwfX1kZXRhY2goKXtpZih0aGlzLl9pc0F0dGFjaGVkKXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKGUuc3R5bGUuY3Vyc29yPXRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSksdGhpcy5faXNBdHRhY2hlZD0hMX19X2FkZEV2ZW50TGlzdGVuZXJzKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxOXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5fY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCl9Z2V0Q29udGFpbmVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fV9jcmVhdGVDb250YWluZXIoKXtsZXQgZT0iY2RrLW92ZXJsYXktY29udGFpbmVyIjtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fExDKCkpe2xldCByPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2V9W3BsYXRmb3JtPSJzZXJ2ZXIiXSwgLiR7ZX1bcGxhdGZvcm09InRlc3QiXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb10ucmVtb3ZlKCl9bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc0xpc3QuYWRkKGUpLExDKCk/aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxUdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1PSExKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fbG9jYXRpb249bCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXUsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgVGUsdGhpcy5fYXR0YWNobWVudHM9bmV3IFRlLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBUZSx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXI9ZD0+dGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KGQpLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXI9ZD0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcChkLnRhcmdldCl9LHRoaXMuX2tleWRvd25FdmVudHM9bmV3IFRlLHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzPW5ldyBUZSxyLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ci5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ci5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXshdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KTtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSx0aGlzLl9jb25maWcuZGlzcG9zZU9uTmF2aWdhdGlvbiYmKHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz10aGlzLl9sb2NhdGlvbi5zdWJzY3JpYmUoKCk9PnRoaXMuZGlzcG9zZSgpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksImZ1bmN0aW9uIj09dHlwZW9mIGU/Lm9uRGVzdHJveSYmZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5kZXRhY2goKSkpfSksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtsZXQgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH1kaXNwb3NlKCl7bGV0IHQ9dGhpcy5oYXNBdHRhY2hlZCgpO3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9ob3N0Py5yZW1vdmUoKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT10aGlzLl9ob3N0PW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZywuLi50fSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfXNldERpcmVjdGlvbih0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZyxkaXJlY3Rpb246dH0sdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpfWFkZFBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITApfXJlbW92ZVBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITEpfWdldERpcmVjdGlvbigpe2xldCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtsZXQgdD10aGlzLl9wYW5lLnN0eWxlO3Qud2lkdGg9bm8odGhpcy5fY29uZmlnLndpZHRoKSx0LmhlaWdodD1ubyh0aGlzLl9jb25maWcuaGVpZ2h0KSx0Lm1pbldpZHRoPW5vKHRoaXMuX2NvbmZpZy5taW5XaWR0aCksdC5taW5IZWlnaHQ9bm8odGhpcy5fY29uZmlnLm1pbkhlaWdodCksdC5tYXhXaWR0aD1ubyh0aGlzLl9jb25maWcubWF4V2lkdGgpLHQubWF4SGVpZ2h0PW5vKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpfV90b2dnbGVQb2ludGVyRXZlbnRzKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyIiOiJub25lIn1fYXR0YWNoQmFja2Ryb3AoKXtsZXQgdD0iY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyI7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9uIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSwhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9iYWNrZHJvcEVsZW1lbnQmJnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0PXRoaXMuX2JhY2tkcm9wRWxlbWVudDtpZih0KXtpZih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHQpO3QuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcil9KSx0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuX2JhY2tkcm9wVGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCl9LDUwMCkpfX1fdG9nZ2xlQ2xhc3Nlcyh0LGUsaSl7bGV0IHI9TV8oZXx8W10pLmZpbHRlcihvPT4hIW8pO3IubGVuZ3RoJiYoaT90LmNsYXNzTGlzdC5hZGQoLi4ucik6dC5jbGFzc0xpc3QucmVtb3ZlKC4uLnIpKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh1bih0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCk9PnsoIXRoaXMuX3BhbmV8fCF0aGlzLl9ob3N0fHwwPT09dGhpcy5fcGFuZS5jaGlsZHJlbi5sZW5ndGgpJiYodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9ob3N0LnJlbW92ZSgpKSx0LnVuc3Vic2NyaWJlKCkpfSl9KX1fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCl7bGV0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX1fZGlzcG9zZUJhY2tkcm9wKHQpe3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKSx0LnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wRWxlbWVudD09PXQmJih0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCkpLHRoaXMuX2JhY2tkcm9wVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9iYWNrZHJvcFRpbWVvdXQpLHRoaXMuX2JhY2tkcm9wVGltZW91dD12b2lkIDApfX0sX0o9ImNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3giLGdEZT0vKFtBLVphLXolXSspJC87ZnVuY3Rpb24gcm0obix0KXtmb3IobGV0IGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYobltlXT10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiB2SihuKXtpZigibnVtYmVyIiE9dHlwZW9mIG4mJm51bGwhPW4pe2xldFt0LGVdPW4uc3BsaXQoZ0RlKTtyZXR1cm4gZSYmInB4IiE9PWU/bnVsbDpwYXJzZUZsb2F0KHQpfXJldHVybiBufHxudWxsfWZ1bmN0aW9uIHlKKG4pe3JldHVybnt0b3A6TWF0aC5mbG9vcihuLnRvcCkscmlnaHQ6TWF0aC5mbG9vcihuLnJpZ2h0KSxib3R0b206TWF0aC5mbG9vcihuLmJvdHRvbSksbGVmdDpNYXRoLmZsb29yKG4ubGVmdCksd2lkdGg6TWF0aC5mbG9vcihuLndpZHRoKSxoZWlnaHQ6TWF0aC5mbG9vcihuLmhlaWdodCl9fXZhciBiSj0iY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiLF9EZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1vfWdsb2JhbCgpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9jc3NQb3NpdGlvbj0ic3RhdGljIix0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5feFBvc2l0aW9uPSIiLHRoaXMuX3hPZmZzZXQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIiLHRoaXMuX2lzRGlzcG9zZWQ9ITF9YXR0YWNoKHQpe2xldCBlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3dpZHRoJiYhZS53aWR0aCYmdC51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl93aWR0aH0pLHRoaXMuX2hlaWdodCYmIWUuaGVpZ2h0JiZ0LnVwZGF0ZVNpemUoe2hlaWdodDp0aGlzLl9oZWlnaHR9KSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoYkopLHRoaXMuX2lzRGlzcG9zZWQ9ITF9dG9wKHQ9IiIpe3JldHVybiB0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fdG9wT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1zdGFydCIsdGhpc31sZWZ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJsZWZ0Iix0aGlzfWJvdHRvbSh0PSIiKXtyZXR1cm4gdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtZW5kIix0aGlzfXJpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJyaWdodCIsdGhpc31zdGFydCh0PSIiKXtyZXR1cm4gdGhpcy5feE9mZnNldD10LHRoaXMuX3hQb3NpdGlvbj0ic3RhcnQiLHRoaXN9ZW5kKHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJlbmQiLHRoaXN9d2lkdGgodD0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfWhlaWdodCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe2hlaWdodDp0fSk6dGhpcy5faGVpZ2h0PXQsdGhpc31jZW50ZXJIb3Jpem9udGFsbHkodD0iIil7cmV0dXJuIHRoaXMubGVmdCh0KSx0aGlzLl94UG9zaXRpb249ImNlbnRlciIsdGhpc31jZW50ZXJWZXJ0aWNhbGx5KHQ9IiIpe3JldHVybiB0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9YXBwbHkoKXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuc3R5bGUsaT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLHt3aWR0aDpyLGhlaWdodDpvLG1heFdpZHRoOnMsbWF4SGVpZ2h0OmF9PWksbD0hKCIxMDAlIiE9PXImJiIxMDB2dyIhPT1yfHxzJiYiMTAwJSIhPT1zJiYiMTAwdnciIT09cyksYz0hKCIxMDAlIiE9PW8mJiIxMDB2aCIhPT1vfHxhJiYiMTAwJSIhPT1hJiYiMTAwdmgiIT09YSksdT10aGlzLl94UG9zaXRpb24sZD10aGlzLl94T2Zmc2V0LHA9InJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmRpcmVjdGlvbixoPSIiLGY9IiIsbT0iIjtsP209ImZsZXgtc3RhcnQiOiJjZW50ZXIiPT09dT8obT0iY2VudGVyIixwP2Y9ZDpoPWQpOnA/ImxlZnQiPT09dXx8ImVuZCI9PT11PyhtPSJmbGV4LWVuZCIsaD1kKTooInJpZ2h0Ij09PXV8fCJzdGFydCI9PT11KSYmKG09ImZsZXgtc3RhcnQiLGY9ZCk6ImxlZnQiPT09dXx8InN0YXJ0Ij09PXU/KG09ImZsZXgtc3RhcnQiLGg9ZCk6KCJyaWdodCI9PT11fHwiZW5kIj09PXUpJiYobT0iZmxleC1lbmQiLGY9ZCksdC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9bD8iMCI6aCx0Lm1hcmdpblRvcD1jPyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9bD8iMCI6ZixlLmp1c3RpZnlDb250ZW50PW0sZS5hbGlnbkl0ZW1zPWM/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9ZGlzcG9zZSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9vdmVybGF5UmVmKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudCxpPWUuc3R5bGU7ZS5jbGFzc0xpc3QucmVtb3ZlKGJKKSxpLmp1c3RpZnlDb250ZW50PWkuYWxpZ25JdGVtcz10Lm1hcmdpblRvcD10Lm1hcmdpbkJvdHRvbT10Lm1hcmdpbkxlZnQ9dC5tYXJnaW5SaWdodD10LnBvc2l0aW9uPSIiLHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwfX19ZmxleGlibGVDb25uZWN0ZWRUbyhlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW8sdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuX3Njcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IFRlLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChfSiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLmFwcGx5KCl9KX1hcHBseSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2lmKCF0aGlzLl9pc0luaXRpYWxSZW5kZXImJnRoaXMuX3Bvc2l0aW9uTG9ja2VkJiZ0aGlzLl9sYXN0UG9zaXRpb24pcmV0dXJuIHZvaWQgdGhpcy5yZWFwcGx5TGFzdFBvc2l0aW9uKCk7dGhpcy5fY2xlYXJQYW5lbENsYXNzZXMoKSx0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX29yaWdpblJlY3Q9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgcyx0PXRoaXMuX29yaWdpblJlY3QsZT10aGlzLl9vdmVybGF5UmVjdCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2NvbnRhaW5lclJlY3Qsbz1bXTtmb3IobGV0IGEgb2YgdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKXtsZXQgbD10aGlzLl9nZXRPcmlnaW5Qb2ludCh0LHIsYSksYz10aGlzLl9nZXRPdmVybGF5UG9pbnQobCxlLGEpLHU9dGhpcy5fZ2V0T3ZlcmxheUZpdChjLGUsaSxhKTtpZih1LmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYSxsKTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHUsYyxpKT9vLnB1c2goe3Bvc2l0aW9uOmEsb3JpZ2luOmwsb3ZlcmxheVJlY3Q6ZSxib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KGwsYSl9KTooIXN8fHMub3ZlcmxheUZpdC52aXNpYmxlQXJlYTx1LnZpc2libGVBcmVhKSYmKHM9e292ZXJsYXlGaXQ6dSxvdmVybGF5UG9pbnQ6YyxvcmlnaW5Qb2ludDpsLHBvc2l0aW9uOmEsb3ZlcmxheVJlY3Q6ZX0pfWlmKG8ubGVuZ3RoKXtsZXQgYT1udWxsLGw9LTE7Zm9yKGxldCBjIG9mIG8pe2xldCB1PWMuYm91bmRpbmdCb3hSZWN0LndpZHRoKmMuYm91bmRpbmdCb3hSZWN0LmhlaWdodCooYy5wb3NpdGlvbi53ZWlnaHR8fDEpO3U+bCYmKGw9dSxhPWMpfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYS5wb3NpdGlvbixhLm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMucG9zaXRpb24scy5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbihzLnBvc2l0aW9uLHMub3JpZ2luUG9pbnQpfWRldGFjaCgpe3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9ib3VuZGluZ0JveCYmcm0odGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiIixsZWZ0OiIiLHJpZ2h0OiIiLGJvdHRvbToiIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pLHRoaXMuX3BhbmUmJnRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoX0opLHRoaXMuZGV0YWNoKCksdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITApfXJlYXBwbHlMYXN0UG9zaXRpb24oKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtsZXQgdD10aGlzLl9sYXN0UG9zaXRpb247aWYodCl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdGhpcy5fY29udGFpbmVyUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9ZWxzZSB0aGlzLmFwcGx5KCl9d2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlcz10LHRoaXN9d2l0aFBvc2l0aW9ucyh0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9d2l0aFZpZXdwb3J0TWFyZ2luKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9d2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0PSEwKXtyZXR1cm4gdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc313aXRoR3Jvd0FmdGVyT3Blbih0PSEwKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbj10LHRoaXN9d2l0aFB1c2godD0hMCl7cmV0dXJuIHRoaXMuX2NhblB1c2g9dCx0aGlzfXdpdGhMb2NrZWRQb3NpdGlvbih0PSEwKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfXNldE9yaWdpbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQsdGhpc313aXRoRGVmYXVsdE9mZnNldFgodCl7cmV0dXJuIHRoaXMuX29mZnNldFg9dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WSh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9d2l0aFRyYW5zZm9ybU9yaWdpbk9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9X2dldE9yaWdpblBvaW50KHQsZSxpKXtsZXQgcixvO2lmKCJjZW50ZXIiPT1pLm9yaWdpblgpcj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7bGV0IHM9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxhPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7cj0ic3RhcnQiPT1pLm9yaWdpblg/czphfXJldHVybiBlLmxlZnQ8MCYmKHItPWUubGVmdCksbz0iY2VudGVyIj09aS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWkub3JpZ2luWT90LnRvcDp0LmJvdHRvbSxlLnRvcDwwJiYoby09ZS50b3ApLHt4OnIseTpvfX1fZ2V0T3ZlcmxheVBvaW50KHQsZSxpKXtsZXQgcixvO3JldHVybiByPSJjZW50ZXIiPT1pLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PWkub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCxvPSJjZW50ZXIiPT1pLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1pLm92ZXJsYXlZPzA6LWUuaGVpZ2h0LHt4OnQueCtyLHk6dC55K299fV9nZXRPdmVybGF5Rml0KHQsZSxpLHIpe2xldCBvPXlKKGUpLHt4OnMseTphfT10LGw9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxjPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7bCYmKHMrPWwpLGMmJihhKz1jKTtsZXQgcD0wLWEsaD1hK28uaGVpZ2h0LWkuaGVpZ2h0LGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby53aWR0aCwwLXMscytvLndpZHRoLWkud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby5oZWlnaHQscCxoKSxDPWYqbTtyZXR1cm57dmlzaWJsZUFyZWE6Qyxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDpvLndpZHRoKm8uaGVpZ2h0PT09QyxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PW8uaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmY9PW8ud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxpKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2xldCByPWkuYm90dG9tLWUueSxvPWkucmlnaHQtZS54LHM9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5IZWlnaHQpLGE9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aCksYz10LmZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5fHxudWxsIT1hJiZhPD1vO3JldHVybih0LmZpdHNJblZpZXdwb3J0VmVydGljYWxseXx8bnVsbCE9cyYmczw9cikmJmN9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLGkpe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtsZXQgcj15SihlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSx1PTAsZD0wO3JldHVybiB1PXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsZD1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDp1LHk6ZH0se3g6dC54K3UseTp0LnkrZH19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSx1LGQscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBoPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmgscz10LnktaCxvPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHU9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpZD10LngsdT1pLnJpZ2h0LXQueDtlbHNle2xldCBoPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDt1PTIqaCxkPXQueC1oLHU+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihkPXQueC1mLzIpfXJldHVybnt0b3A6cyxsZWZ0OmQsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDp1LGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1ubyhpLmhlaWdodCksci50b3A9bm8oaS50b3ApLHIuYm90dG9tPW5vKGkuYm90dG9tKSxyLndpZHRoPW5vKGkud2lkdGgpLHIubGVmdD1ubyhpLmxlZnQpLHIucmlnaHQ9bm8oaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1ubyhvKSkscyYmKHIubWF4V2lkdGg9bm8ocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSxybSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3JtKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXtybSh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCB1PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsdSkpLHJtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsdSkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PW5vKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPW5vKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSkscm0odGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPW5vKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9bm8oby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOmdKKHQsaSksaXNPcmlnaW5PdXRzaWRlVmlldzplNSh0LGkpLGlzT3ZlcmxheUNsaXBwZWQ6Z0ooZSxpKSxpc092ZXJsYXlPdXRzaWRlVmlldzplNShlLGkpfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKGkscik9PmktTWF0aC5tYXgociwwKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDppLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0OmkubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDppLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206aS50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19X2lzUnRsKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfV9oYXNFeGFjdFBvc2l0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9X2dldE9mZnNldCh0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX1fdmFsaWRhdGVQb3NpdGlvbnMoKXt9X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZNXyh0KS5mb3JFYWNoKGU9PnsiIiE9PWUmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKGUpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKGUpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZChlKSl9KX1fY2xlYXJQYW5lbENsYXNzZXMoKXt0aGlzLl9wYW5lJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5mb3JFYWNoKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2xldCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgQWUpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10LndpZHRofHwwLGk9dC5oZWlnaHR8fDA7cmV0dXJue3RvcDp0LnksYm90dG9tOnQueStpLGxlZnQ6dC54LHJpZ2h0OnQueCtlLGhlaWdodDppLHdpZHRoOmV9fX0oZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGRhKSxSKEJ0KSxSKHVpKSxSKE5fKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksdkRlPTAsUWk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPWUsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9kaXJlY3Rpb25hbGl0eT11LHRoaXMuX2xvY2F0aW9uPWQsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1wLHRoaXMuX2FuaW1hdGlvbnNNb2R1bGVUeXBlPWh9Y3JlYXRlKGUpe2xldCBpPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCkscj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChpKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChyKSxzPW5ldyBEbChlKTtyZXR1cm4gcy5kaXJlY3Rpb249cy5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBUdShvLGkscixzLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlciwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGUpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkuaWQ9ImNkay1vdmVybGF5LSIrdkRlKyssaS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksZS5hcHBlbmRDaGlsZChpKSxpfV9jcmVhdGVIb3N0RWxlbWVudCgpe2xldCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVQb3J0YWxPdXRsZXQoZSl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoSmMpKSxuZXcgWEMoZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihoRGUpLFIoTl8pLFIoRW8pLFIoX0RlKSxSKGZEZSksUih6biksUihwdCksUihCdCksUihpciksUihIeCksUihtRGUpLFIoTGksOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHlEZT1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sQ0o9bmV3IHNlKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iiksc209KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdfSksbn0pKCksUXA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kaXI9cyx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMudmlld3BvcnRNYXJnaW49MCx0aGlzLm9wZW49ITEsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy5iYWNrZHJvcENsaWNrPW5ldyBHLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5hdHRhY2g9bmV3IEcsdGhpcy5kZXRhY2g9bmV3IEcsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgRyx0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2s9bmV3IEcsdGhpcy5fdGVtcGxhdGVQb3J0YWw9bmV3IGhzKGksciksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PW8sdGhpcy5zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKX1nZXQgb2Zmc2V0WCgpe3JldHVybiB0aGlzLl9vZmZzZXRYfXNldCBvZmZzZXRYKGUpe3RoaXMuX29mZnNldFg9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IG9mZnNldFkoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WX1zZXQgb2Zmc2V0WShlKXt0aGlzLl9vZmZzZXRZPWUsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9Z2V0IGxvY2tQb3NpdGlvbigpe3JldHVybiB0aGlzLl9sb2NrUG9zaXRpb259c2V0IGxvY2tQb3NpdGlvbihlKXt0aGlzLl9sb2NrUG9zaXRpb249V3QoZSl9Z2V0IGZsZXhpYmxlRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnN9c2V0IGZsZXhpYmxlRGltZW5zaW9ucyhlKXt0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9V3QoZSl9Z2V0IGdyb3dBZnRlck9wZW4oKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbn1zZXQgZ3Jvd0FmdGVyT3BlbihlKXt0aGlzLl9ncm93QWZ0ZXJPcGVuPVd0KGUpfWdldCBwdXNoKCl7cmV0dXJuIHRoaXMuX3B1c2h9c2V0IHB1c2goZSl7dGhpcy5fcHVzaD1XdChlKX1nZXQgb3ZlcmxheVJlZigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIn1uZ09uRGVzdHJveSgpe3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxtaW5XaWR0aDp0aGlzLm1pbldpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxtaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSxlLm9yaWdpbiYmdGhpcy5vcGVuJiZ0aGlzLl9wb3NpdGlvbi5hcHBseSgpKSxlLm9wZW4mJih0aGlzLm9wZW4/dGhpcy5fYXR0YWNoT3ZlcmxheSgpOnRoaXMuX2RldGFjaE92ZXJsYXkoKSl9X2NyZWF0ZU92ZXJsYXkoKXsoIXRoaXMucG9zaXRpb25zfHwhdGhpcy5wb3NpdGlvbnMubGVuZ3RoKSYmKHRoaXMucG9zaXRpb25zPXlEZSk7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9idWlsZENvbmZpZygpKTt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249ZS5hdHRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249ZS5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5kZXRhY2guZW1pdCgpKSxlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheUtleWRvd24ubmV4dChpKSwyNz09PWkua2V5Q29kZSYmIXRoaXMuZGlzYWJsZUNsb3NlJiYhTXIoaSkmJihpLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGV0YWNoT3ZlcmxheSgpKX0pLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheU91dHNpZGVDbGljay5uZXh0KGkpfSl9X2J1aWxkQ29uZmlnKCl7bGV0IGU9dGhpcy5fcG9zaXRpb249dGhpcy5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCksaT1uZXcgRGwoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTplLHNjcm9sbFN0cmF0ZWd5OnRoaXMuc2Nyb2xsU3RyYXRlZ3ksaGFzQmFja2Ryb3A6dGhpcy5oYXNCYWNrZHJvcH0pO3JldHVybih0aGlzLndpZHRofHwwPT09dGhpcy53aWR0aCkmJihpLndpZHRoPXRoaXMud2lkdGgpLCh0aGlzLmhlaWdodHx8MD09PXRoaXMuaGVpZ2h0KSYmKGkuaGVpZ2h0PXRoaXMuaGVpZ2h0KSwodGhpcy5taW5XaWR0aHx8MD09PXRoaXMubWluV2lkdGgpJiYoaS5taW5XaWR0aD10aGlzLm1pbldpZHRoKSwodGhpcy5taW5IZWlnaHR8fDA9PT10aGlzLm1pbkhlaWdodCkmJihpLm1pbkhlaWdodD10aGlzLm1pbkhlaWdodCksdGhpcy5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPXRoaXMuYmFja2Ryb3BDbGFzcyksdGhpcy5wYW5lbENsYXNzJiYoaS5wYW5lbENsYXNzPXRoaXMucGFuZWxDbGFzcyksaX1fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKXtsZXQgaT10aGlzLnBvc2l0aW9ucy5tYXAocj0+KHtvcmlnaW5YOnIub3JpZ2luWCxvcmlnaW5ZOnIub3JpZ2luWSxvdmVybGF5WDpyLm92ZXJsYXlYLG92ZXJsYXlZOnIub3ZlcmxheVksb2Zmc2V0WDpyLm9mZnNldFh8fHRoaXMub2Zmc2V0WCxvZmZzZXRZOnIub2Zmc2V0WXx8dGhpcy5vZmZzZXRZLHBhbmVsQ2xhc3M6ci5wYW5lbENsYXNzfHx2b2lkIDB9KSk7cmV0dXJuIGUuc2V0T3JpZ2luKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKS53aXRoUG9zaXRpb25zKGkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnModGhpcy5mbGV4aWJsZURpbWVuc2lvbnMpLndpdGhQdXNoKHRoaXMucHVzaCkud2l0aEdyb3dBZnRlck9wZW4odGhpcy5ncm93QWZ0ZXJPcGVuKS53aXRoVmlld3BvcnRNYXJnaW4odGhpcy52aWV3cG9ydE1hcmdpbikud2l0aExvY2tlZFBvc2l0aW9uKHRoaXMubG9ja1Bvc2l0aW9uKS53aXRoVHJhbnNmb3JtT3JpZ2luT24odGhpcy50cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil9X2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKSk7cmV0dXJuIHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koZSksZX1fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luIGluc3RhbmNlb2Ygc20/dGhpcy5vcmlnaW4uZWxlbWVudFJlZjp0aGlzLm9yaWdpbn1fYXR0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5oYXNCYWNrZHJvcD10aGlzLmhhc0JhY2tkcm9wOnRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCl8fHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3RlbXBsYXRlUG9ydGFsKSx0aGlzLmhhc0JhY2tkcm9wP3RoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShlPT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoZSl9KTp0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjAmJih0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj10aGlzLl9wb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZShZeSgoKT0+dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjApKS5zdWJzY3JpYmUoZT0+e3RoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChlKSwwPT09dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSkpfV9kZXRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUWkpLHcoT2kpLHcoeWkpLHcoQ0opLHcoaXIsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIl1dLGlucHV0czp7b3JpZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsIm9yaWdpbiJdLHBvc2l0aW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJwb3NpdGlvbnMiXSxwb3NpdGlvblN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kiLCJwb3NpdGlvblN0cmF0ZWd5Il0sb2Zmc2V0WDpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIiwib2Zmc2V0WCJdLG9mZnNldFk6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsIm9mZnNldFkiXSx3aWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsIndpZHRoIl0saGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodCIsImhlaWdodCJdLG1pbldpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwibWluV2lkdGgiXSxtaW5IZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluSGVpZ2h0IiwibWluSGVpZ2h0Il0sYmFja2Ryb3BDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIiwiYmFja2Ryb3BDbGFzcyJdLHBhbmVsQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsInBhbmVsQ2xhc3MiXSx2aWV3cG9ydE1hcmdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiIsInZpZXdwb3J0TWFyZ2luIl0sc2Nyb2xsU3RyYXRlZ3k6WyJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJzY3JvbGxTdHJhdGVneSJdLG9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsIm9wZW4iXSxkaXNhYmxlQ2xvc2U6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIiwiZGlzYWJsZUNsb3NlIl0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iLCJ0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvciJdLGhhc0JhY2tkcm9wOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiaGFzQmFja2Ryb3AiXSxsb2NrUG9zaXRpb246WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwibG9ja1Bvc2l0aW9uIl0sZmxleGlibGVEaW1lbnNpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImZsZXhpYmxlRGltZW5zaW9ucyJdLGdyb3dBZnRlck9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImdyb3dBZnRlck9wZW4iXSxwdXNoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2giLCJwdXNoIl19LG91dHB1dHM6e2JhY2tkcm9wQ2xpY2s6ImJhY2tkcm9wQ2xpY2siLHBvc2l0aW9uQ2hhbmdlOiJwb3NpdGlvbkNoYW5nZSIsYXR0YWNoOiJhdHRhY2giLGRldGFjaDoiZGV0YWNoIixvdmVybGF5S2V5ZG93bjoib3ZlcmxheUtleWRvd24iLG92ZXJsYXlPdXRzaWRlQ2xpY2s6Im92ZXJsYXlPdXRzaWRlQ2xpY2sifSxleHBvcnRBczpbImNka0Nvbm5lY3RlZE92ZXJsYXkiXSxmZWF0dXJlczpbenRdfSksbn0pKCkseERlPXtwcm92aWRlOkNKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sVm89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUWkseERlXSxpbXBvcnRzOltXcCx3YyxDZCxDZF19KSxufSkoKTtmdW5jdGlvbiBDRGUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIpKDEsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5hY3Rpb24oKSl9KSxEKDIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMikseXQoZS5kYXRhLmFjdGlvbil9fWZ1bmN0aW9uIHdEZShuLHQpe312YXIgSEE9bmV3IHNlKCJNYXRTbmFja0JhckRhdGEiKSxMXz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19LE1EZT1NYXRoLnBvdygyLDMxKS0xLGFtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBUZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgVGUsdGhpcy5fb25BY3Rpb249bmV3IFRlLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0Ll9vbkV4aXQuc3Vic2NyaWJlKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpfWRpc21pc3MoKXt0aGlzLl9hZnRlckRpc21pc3NlZC5jbG9zZWR8fHRoaXMuY29udGFpbmVySW5zdGFuY2UuZXhpdCgpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9ZGlzbWlzc1dpdGhBY3Rpb24oKXt0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fCh0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMCx0aGlzLl9vbkFjdGlvbi5uZXh0KCksdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLmRpc21pc3MoKSksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1jbG9zZVdpdGhBY3Rpb24oKXt0aGlzLmRpc21pc3NXaXRoQWN0aW9uKCl9X2Rpc21pc3NBZnRlcih0KXt0aGlzLl9kdXJhdGlvblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLmRpc21pc3MoKSxNYXRoLm1pbih0LE1EZSkpfV9vcGVuKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfV9maW5pc2hEaXNtaXNzKCl7dGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb25BY3Rpb24uY2xvc2VkfHx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoe2Rpc21pc3NlZEJ5QWN0aW9uOnRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9ufSksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMX1hZnRlckRpc21pc3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZH1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfW9uQWN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQWN0aW9ufX0sU0RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnNuYWNrQmFyUmVmPWUsdGhpcy5kYXRhPWl9YWN0aW9uKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzV2l0aEFjdGlvbigpfWdldCBoYXNBY3Rpb24oKXtyZXR1cm4hIXRoaXMuZGF0YS5hY3Rpb259fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzaW1wbGUtc25hY2stYmFyIl1dLGhvc3RBdHRyczpbMSwibWF0LXNpbXBsZS1zbmFja2JhciJdLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsIm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnQiXSxbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iLDQsIm5nSWYiXSxbMSwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsQ0RlLDMsMSwiZGl2IiwxKSksMiZlJiYoeCgxKSx5dChpLmRhdGEubWVzc2FnZSkseCgxKSxiKCJuZ0lmIixpLmhhc0FjdGlvbikpfSxkZXBlbmRlbmNpZXM6W1hlLCRuXSxzdHlsZXM6WyIubWF0LXNpbXBsZS1zbmFja2JhcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntmbGV4LXNocmluazowO21hcmdpbjotOHB4IC04cHggLThweCA4cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIGJ1dHRvbnttYXgtaGVpZ2h0OjM2cHg7bWluLXdpZHRoOjB9W2Rpcj1ydGxdIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbnttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDo4cHh9Lm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRURlPXtzbmFja0JhclN0YXRlOkhyKCJzdGF0ZSIsW0VpKCJ2b2lkLCBoaWRkZW4iLHJuKHt0cmFuc2Zvcm06InNjYWxlKDAuOCkiLG9wYWNpdHk6MH0pKSxFaSgidmlzaWJsZSIscm4oe3RyYW5zZm9ybToic2NhbGUoMSkiLG9wYWNpdHk6MX0pKSxJaSgiKiA9PiB2aXNpYmxlIixWaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksSWkoIiogPT4gdm9pZCwgKiA9PiBoaWRkZW4iLFZpKCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LFREZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nWm9uZT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1zLHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyBUZSx0aGlzLl9vbkV4aXQ9bmV3IFRlLHRoaXMuX29uRW50ZXI9bmV3IFRlLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLmF0dGFjaERvbVBvcnRhbD1hPT57dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgbD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKGEpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksbH0sdGhpcy5fbGl2ZT0iYXNzZXJ0aXZlIiE9PXMucG9saXRlbmVzc3x8cy5hbm5vdW5jZW1lbnRNZXNzYWdlPyJvZmYiPT09cy5wb2xpdGVuZXNzPyJvZmYiOiJwb2xpdGUiOiJhc3NlcnRpdmUiLHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gmJigicG9saXRlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJzdGF0dXMiKSwiYXNzZXJ0aXZlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJhbGVydCIpKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9b25BbmltYXRpb25FbmQoZSl7bGV0e2Zyb21TdGF0ZTppLHRvU3RhdGU6cn09ZTtpZigoInZvaWQiPT09ciYmInZvaWQiIT09aXx8ImhpZGRlbiI9PT1yKSYmdGhpcy5fY29tcGxldGVFeGl0KCksInZpc2libGUiPT09cil7bGV0IG89dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgpPT57by5uZXh0KCksby5jb21wbGV0ZSgpfSl9fWVudGVyKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZpc2libGUiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpKX1leGl0KCl7cmV0dXJuIHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25TdGF0ZT0iaGlkZGVuIix0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXQtZXhpdCIsIiIpLGNsZWFyVGltZW91dCh0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCl9KSx0aGlzLl9vbkV4aXR9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY29tcGxldGVFeGl0KCl9X2NvbXBsZXRlRXhpdCgpe3RoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9vbkV4aXQubmV4dCgpLHRoaXMuX29uRXhpdC5jb21wbGV0ZSgpfSl9KX1fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuc25hY2tCYXJDb25maWcucGFuZWxDbGFzcztpJiYoQXJyYXkuaXNBcnJheShpKT9pLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKTplLmNsYXNzTGlzdC5hZGQoaSkpfV9hc3NlcnROb3RBdHRhY2hlZCgpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWhpZGRlbl0iKSxpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1saXZlXSIpO2lmKGUmJmkpe2xldCByPW51bGw7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJihyPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGkuYXBwZW5kQ2hpbGQoZSkscj8uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSx0aGlzLl9hbm5vdW5jZURlbGF5KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KHVpKSx3KExfKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxmZWF0dXJlczpbdHRdfSksbn0pKCksRERlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBURGV7X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtzdXBlci5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLWNlbnRlciIpLCJ0b3AiPT09dGhpcy5zbmFja0JhckNvbmZpZy52ZXJ0aWNhbFBvc2l0aW9uJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNuYWNrLWJhci1jb250YWluZXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZpMCgiQHN0YXRlLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQW5pbWF0aW9uRW5kKG8pfSksMiZlJiZyMCgiQHN0YXRlIixpLl9hbmltYXRpb25TdGF0ZSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSx3RGUsMCwwLCJuZy10ZW1wbGF0ZSIsMSksdigpLE4oMiwiZGl2IikpLDImZSYmKHgoMiksemUoImFyaWEtbGl2ZSIsaS5fbGl2ZSkoInJvbGUiLGkuX3JvbGUpKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjoyNHB4O21heC13aWR0aDozM3Z3O21pbi13aWR0aDozNDRweDtwYWRkaW5nOjE0cHggMTZweDttaW4taGVpZ2h0OjQ4cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH0ubWF0LXNuYWNrLWJhci1oYW5kc2V0e3dpZHRoOjEwMCV9Lm1hdC1zbmFjay1iYXItaGFuZHNldCAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7bWFyZ2luOjhweDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W0VEZS5zbmFja0JhclN0YXRlXX19KSxufSkoKSxyNT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVm8sd2Msa2UsUmksZG4sZG5dfSksbn0pKCksd0o9bmV3IHNlKCJtYXQtc25hY2stYmFyLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExffX0pLElEZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fbGl2ZT1pLHRoaXMuX2luamVjdG9yPXIsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPW8sdGhpcy5fcGFyZW50U25hY2tCYXI9cyx0aGlzLl9kZWZhdWx0Q29uZmlnPWEsdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfWdldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtsZXQgZT10aGlzLl9wYXJlbnRTbmFja0JhcjtyZXR1cm4gZT9lLl9vcGVuZWRTbmFja0JhclJlZjp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsfXNldCBfb3BlbmVkU25hY2tCYXJSZWYoZSl7dGhpcy5fcGFyZW50U25hY2tCYXI/dGhpcy5fcGFyZW50U25hY2tCYXIuX29wZW5lZFNuYWNrQmFyUmVmPWU6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1lfW9wZW5Gcm9tQ29tcG9uZW50KGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW5Gcm9tVGVtcGxhdGUoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbihlLGk9IiIscil7bGV0IG89ey4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4ucn07cmV0dXJuIG8uZGF0YT17bWVzc2FnZTplLGFjdGlvbjppfSxvLmFubm91bmNlbWVudE1lc3NhZ2U9PT1lJiYoby5hbm5vdW5jZW1lbnRNZXNzYWdlPXZvaWQgMCksdGhpcy5vcGVuRnJvbUNvbXBvbmVudCh0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50LG8pfWRpc21pc3MoKXt0aGlzLl9vcGVuZWRTbmFja0JhclJlZiYmdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpfW5nT25EZXN0cm95KCl7dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCYmdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCl9X2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKGUsaSl7bGV0IG89em4uY3JlYXRlKHtwYXJlbnQ6aSYmaS52aWV3Q29udGFpbmVyUmVmJiZpLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6TF8sdXNlVmFsdWU6aX1dfSkscz1uZXcgQ2ModGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxpLnZpZXdDb250YWluZXJSZWYsbyksYT1lLmF0dGFjaChzKTtyZXR1cm4gYS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1pLGEuaW5zdGFuY2V9X2F0dGFjaChlLGkpe2xldCByPXsuLi5uZXcgTF8sLi4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5pfSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkocikscz10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLHIpLGE9bmV3IGFtKHMsbyk7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgbD1uZXcgaHMoZSxudWxsLHskaW1wbGljaXQ6ci5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwobCl9ZWxzZXtsZXQgbD10aGlzLl9jcmVhdGVJbmplY3RvcihyLGEpLGM9bmV3IENjKGUsdm9pZCAwLGwpLHU9cy5hdHRhY2hDb21wb25lbnRQb3J0YWwoYyk7YS5pbnN0YW5jZT11Lmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLnBpcGUob3Qoby5kZXRhY2htZW50cygpKSkuc3Vic2NyaWJlKGw9PntvLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MsbC5tYXRjaGVzKX0pLHIuYW5ub3VuY2VtZW50TWVzc2FnZSYmcy5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKHIuYW5ub3VuY2VtZW50TWVzc2FnZSxyLnBvbGl0ZW5lc3MpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKGEsciksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9YSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn1fYW5pbWF0ZVNuYWNrQmFyKGUsaSl7ZS5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT1lJiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksaS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9PntlLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOmUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxpLmR1cmF0aW9uJiZpLmR1cmF0aW9uPjAmJmUuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCk9PmUuX2Rpc21pc3NBZnRlcihpLmR1cmF0aW9uKSl9X2NyZWF0ZU92ZXJsYXkoZSl7bGV0IGk9bmV3IERsO2kuZGlyZWN0aW9uPWUuZGlyZWN0aW9uO2xldCByPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxvPSJydGwiPT09ZS5kaXJlY3Rpb24scz0ibGVmdCI9PT1lLmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFzJiYiY2VudGVyIiE9PWUuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBzP3IubGVmdCgiMCIpOmE/ci5yaWdodCgiMCIpOnIuY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT1lLnZlcnRpY2FsUG9zaXRpb24/ci50b3AoIjAiKTpyLmJvdHRvbSgiMCIpLGkucG9zaXRpb25TdHJhdGVneT1yLHRoaXMuX292ZXJsYXkuY3JlYXRlKGkpfV9jcmVhdGVJbmplY3RvcihlLGkpe3JldHVybiB6bi5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTphbSx1c2VWYWx1ZTppfSx7cHJvdmlkZTpIQSx1c2VWYWx1ZTplLmRhdGF9XX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKFVDKSxSKHpuKSxSKG5tKSxSKG4sMTIpLFIod0opKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNSj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlLGkscixvLHMsYSksdGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudD1TRGUsdGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudD1ERGUsdGhpcy5oYW5kc2V0Q3NzQ2xhc3M9Im1hdC1zbmFjay1iYXItaGFuZHNldCJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoVUMpLFIoem4pLFIobm0pLFIobiwxMiksUih3SikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOnI1fSksbn0pKCksUERlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxFSj0iXFx1MDAwMC1cXHUwMDIwXFx1MDA3Zi1cXHUwMDlmIixPRGU9bmV3IFJlZ0V4cCgiKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06XFwvXFwvfGRhdGE6fHd3d1xcLilbXlxccyIrRUorJyJdezIsfVteXFxzJytFSisiXCInKX1cXF0sOjsuIT9dIiwiZ3UiKTtmdW5jdGlvbiBESihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXt0LmZsYWdzLmluY2x1ZGVzKCJnIil8fCh0PW5ldyBSZWdFeHAodCx0LmZsYWdzKyJnIikpO2xldCBlPVtdLGk9MDtmb3IobGV0IHIgb2Ygbi5tYXRjaEFsbCh0KSl7bGV0IG89ci5pbmRleCxzPXJbMF07bz5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG8pLG1hdGNoZXNSZWdleDohMX0pLGUucHVzaCh7aW5kZXg6byx0ZXh0OnMsbWF0Y2hlc1JlZ2V4OiEwfSksaT1vK3MubGVuZ3RofXJldHVybiBuLmxlbmd0aD5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG4ubGVuZ3RoKSxtYXRjaGVzUmVnZXg6ITF9KSxlfShuLE9EZSkubWFwKCh7bWF0Y2hlc1JlZ2V4OnQsdGV4dDplfSk9Pih7aXNVUkw6dCx0ZXh0OmV9KSl9ZnVuY3Rpb24ga0RlKG4sdCl7aWYoMSZuJiYoS3QoMCksRCgxKSxadCgpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7eCgxKSxxZSgiICIsZS50ZXh0LCIgIil9fWZ1bmN0aW9uIEZEZShuLHQpe2lmKDEmbiYmKGcoMCwiYSIsNyksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4cigiaHJlZiIsZS50ZXh0LGRsKSx4KDEpLHl0KGUudGV4dCl9fWZ1bmN0aW9uIE5EZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxrRGUsMiwxLCJuZy1jb250YWluZXIiLDUpLEUoMixGRGUsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoMyk7eCgxKSxiKCJuZ0lmIiwhZS5pc1VSTCkoIm5nSWZFbHNlIixpKX19ZnVuY3Rpb24gTERlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO3goMSkscWUoIiAiLGUuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19dmFyIEFKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLnVua25vd25EYXRhPWksdGhpcy5zdG9yZT1yLHRoaXMuc3BsaXRCeVVSTD1ESix0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbih0aGlzLnN0b3JlKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGUpfW9uQ2xvc2VCdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpLHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydC1kaXNwbGF5LXNuYWNrYmFyIl1dLGRlY2xzOjYsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gY2xvc2UgdGhlIHNuYWNrYmFyIG1lc3NhZ2XikJ9lYTRkOWZlNjE0MjBhM2ZjZTgxY2Y1NGM0YzYxNWUzYzE5YzY0NmE24pCfMTUzNjA4NzUxOTc0MzcwNzM2MjpEaXNtaXNzYCxbWzEsIm1lc3NhZ2UiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJkaXNtaXNzLWJ1dHRvbiIsMywiY2xpY2siXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsaW5rUGllY2UiLCIiXSxbInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLDMsImhyZWYiXSxbIm1hdC1idXR0b24iLCIiLDEsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSxORGUsNCwyLCJuZy1jb250YWluZXIiLDEpLHYoKSxnKDIsImRpdiIsMiksRSgzLExEZSwyLDEsImJ1dHRvbiIsMyksZyg0LCJidXR0b24iLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VCdXR0b25DbGlja2VkKCl9KSxEKDUsIiBEaXNtaXNzICIpLHYoKSgpKSwyJmUmJih4KDEpLGIoIm5nRm9yT2YiLGkuc3BsaXRCeVVSTChpLmFsZXJ0LmxvY2FsaXplZE1lc3NhZ2UpKSx4KDIpLGIoIm5nSWYiLGkuYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbjo1cHggMDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tbGVmdDphdXRvfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSUo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLnNuYWNrQmFyPWksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuc2VsZWN0KFJLKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoZT0+Qm9vbGVhbihlKSkpLnN1YnNjcmliZShlPT57dGhpcy5zaG93QWxlcnQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvd0FsZXJ0KGUpe3RoaXMuc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoQUose2R1cmF0aW9uOjVlMyxob3Jpem9udGFsUG9zaXRpb246InN0YXJ0Iix2ZXJ0aWNhbFBvc2l0aW9uOiJib3R0b20iLGRhdGE6ZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1KKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnQtc25hY2tiYXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFVBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxSaSxyNV19KSxufSkoKSx6QT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbdnUsVUEsUnIuZm9yRmVhdHVyZSgiYWxlcnRzIixCWiksTG8uZm9yRmVhdHVyZShbTFpdKV19KSxufSkoKTtmdW5jdGlvbiBWRGUobix0KXt9dmFyIGxtPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yb2xlPSJkaWFsb2ciLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuYmFja2Ryb3BDbGFzcz0iIix0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLndpZHRoPSIiLHRoaXMuaGVpZ2h0PSIiLHRoaXMuZGF0YT1udWxsLHRoaXMuYXJpYURlc2NyaWJlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWxsZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5hcmlhTW9kYWw9ITAsdGhpcy5hdXRvRm9jdXM9ImZpcnN0LXRhYmJhYmxlIix0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmNsb3NlT25OYXZpZ2F0aW9uPSEwLHRoaXMuY2xvc2VPbkRlc3Ryb3k9ITB9fSxzNT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWksdGhpcy5fY29uZmlnPW8sdGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXI9cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdmVybGF5UmVmPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9bnVsbCx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXU9Pnt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgZD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKHUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxkfSx0aGlzLl9hcmlhTGFiZWxsZWRCeT10aGlzLl9jb25maWcuYXJpYUxhYmVsbGVkQnl8fG51bGwsdGhpcy5fZG9jdW1lbnQ9cn1fY29udGVudEF0dGFjaGVkKCl7dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCksdGhpcy5fY2FwdHVyZUluaXRpYWxGb2N1cygpfV9jYXB0dXJlSW5pdGlhbEZvY3VzKCl7dGhpcy5fdHJhcEZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXN0b3JlRm9jdXMoKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLGl9X3JlY2FwdHVyZUZvY3VzKCl7dGhpcy5fY29udGFpbnNGb2N1cygpfHx0aGlzLl90cmFwRm9jdXMoKX1fZm9yY2VGb2N1cyhlLGkpe3RoaXMuX2ludGVyYWN0aXZpdHlDaGVja2VyLmlzRm9jdXNhYmxlKGUpfHwoZS50YWJJbmRleD0tMSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgcj0oKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfTtlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixyKX0pKSxlLmZvY3VzKGkpfV9mb2N1c0J5Q3NzU2VsZWN0b3IoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlKTtyJiZ0aGlzLl9mb3JjZUZvY3VzKHIsaSl9X3RyYXBGb2N1cygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtzd2l0Y2godGhpcy5fY29uZmlnLmF1dG9Gb2N1cyl7Y2FzZSExOmNhc2UiZGlhbG9nIjp0aGlzLl9jb250YWluc0ZvY3VzKCl8fGUuZm9jdXMoKTticmVhaztjYXNlITA6Y2FzZSJmaXJzdC10YWJiYWJsZSI6dGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGk9PntpfHx0aGlzLl9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpfSk7YnJlYWs7Y2FzZSJmaXJzdC1oZWFkaW5nIjp0aGlzLl9mb2N1c0J5Q3NzU2VsZWN0b3IoJ2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIFtyb2xlPSJoZWFkaW5nIl0nKTticmVhaztkZWZhdWx0OnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3Rvcih0aGlzLl9jb25maWcuYXV0b0ZvY3VzKX19X3Jlc3RvcmVGb2N1cygpe2xldCBlPXRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMsaT1udWxsO2lmKCJzdHJpbmciPT10eXBlb2YgZT9pPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ImJvb2xlYW4iPT10eXBlb2YgZT9pPWU/dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ6bnVsbDplJiYoaT1lKSx0aGlzLl9jb25maWcucmVzdG9yZUZvY3VzJiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5mb2N1cyl7bGV0IHI9TkMoKSxvPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsoIXJ8fHI9PT10aGlzLl9kb2N1bWVudC5ib2R5fHxyPT09b3x8by5jb250YWlucyhyKSkmJih0aGlzLl9mb2N1c01vbml0b3I/KHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYShpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlKSx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsKTppLmZvY3VzKCkpfXRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9TkMoKTtyZXR1cm4gZT09PWl8fGUuY29udGFpbnMoaSl9X2luaXRpYWxpemVGb2N1c1RyYXAoKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9kb2N1bWVudCYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkPU5DKCkpfV9oYW5kbGVCYWNrZHJvcENsaWNrcygpe3RoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NvbmZpZy5kaXNhYmxlQ2xvc2UmJnRoaXMuX3JlY2FwdHVyZUZvY3VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCQyksdyhCdCw4KSx3KGxtKSx3KElfKSx3KHB0KSx3KFR1KSx3KHpyKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLWRpYWxvZy1jb250YWluZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIi0xIiwxLCJjZGstZGlhbG9nLWNvbnRhaW5lciJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuX2NvbmZpZy5pZHx8bnVsbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpfSxmZWF0dXJlczpbdHRdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkUoMCxWRGUsMCwwLCJuZy10ZW1wbGF0ZSIsMCl9LGRlcGVuZGVuY2llczpbQnNdLHN0eWxlczpbIi5jZGstZGlhbG9nLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDppbmhlcml0O21heC1oZWlnaHQ6aW5oZXJpdH0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMub3ZlcmxheVJlZj10LHRoaXMuY29uZmlnPWUsdGhpcy5jbG9zZWQ9bmV3IFRlLHRoaXMuZGlzYWJsZUNsb3NlPWUuZGlzYWJsZUNsb3NlLHRoaXMuYmFja2Ryb3BDbGljaz10LmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHM9dC5rZXlkb3duRXZlbnRzKCksdGhpcy5vdXRzaWRlUG9pbnRlckV2ZW50cz10Lm91dHNpZGVQb2ludGVyRXZlbnRzKCksdGhpcy5pZD1lLmlkLHRoaXMua2V5ZG93bkV2ZW50cy5zdWJzY3JpYmUoaT0+ezI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46ImtleWJvYXJkIn0pKX0pLHRoaXMuYmFja2Ryb3BDbGljay5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRpc2FibGVDbG9zZXx8dGhpcy5jbG9zZSh2b2lkIDAse2ZvY3VzT3JpZ2luOiJtb3VzZSJ9KX0pfWNsb3NlKHQsZSl7aWYodGhpcy5jb250YWluZXJJbnN0YW5jZSl7bGV0IGk9dGhpcy5jbG9zZWQ7dGhpcy5jb250YWluZXJJbnN0YW5jZS5fY2xvc2VJbnRlcmFjdGlvblR5cGU9ZT8uZm9jdXNPcmlnaW58fCJwcm9ncmFtIix0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpLGkubmV4dCh0KSxpLmNvbXBsZXRlKCksdGhpcy5jb21wb25lbnRJbnN0YW5jZT10aGlzLmNvbnRhaW5lckluc3RhbmNlPW51bGx9fXVwZGF0ZVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXN9dXBkYXRlU2l6ZSh0PSIiLGU9IiIpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXN9YWRkUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3ModCksdGhpc31yZW1vdmVQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcyh0KSx0aGlzfX0sUEo9bmV3IHNlKCJEaWFsb2dTY3JvbGxTdHJhdGVneSIpLEhEZT1uZXcgc2UoIkRpYWxvZ0RhdGEiKSxVRGU9bmV3IHNlKCJEZWZhdWx0RGlhbG9nQ29uZmlnIiksakRlPXtwcm92aWRlOlBKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LEdEZT0wLGE1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1zLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWF9Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfW9wZW4oZSxpKXsoaT17Li4udGhpcy5fZGVmYXVsdE9wdGlvbnN8fG5ldyBsbSwuLi5pfSkuaWQ9aS5pZHx8ImNkay1kaWFsb2ctIitHRGUrKyxpLmlkJiZ0aGlzLmdldERpYWxvZ0J5SWQoaS5pZCk7bGV0IG89dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhpKSxzPXRoaXMuX292ZXJsYXkuY3JlYXRlKG8pLGE9bmV3IFFDKHMsaSksbD10aGlzLl9hdHRhY2hDb250YWluZXIocyxhLGkpO3JldHVybiBhLmNvbnRhaW5lckluc3RhbmNlPWwsdGhpcy5fYXR0YWNoRGlhbG9nQ29udGVudChlLGEsbCxpKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpLHRoaXMub3BlbkRpYWxvZ3MucHVzaChhKSxhLmNsb3NlZC5zdWJzY3JpYmUoKCk9PnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coYSwhMCkpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChhKSxhfWNsb3NlQWxsKCl7bzUodGhpcy5vcGVuRGlhbG9ncyxlPT5lLmNsb3NlKCkpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXtvNSh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PnshMT09PWUuY29uZmlnLmNsb3NlT25EZXN0cm95JiZ0aGlzLl9yZW1vdmVPcGVuRGlhbG9nKGUsITEpfSksbzUodGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCxlPT5lLmNsb3NlKCkpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXX1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtsZXQgaT1uZXcgRGwoe3Bvc2l0aW9uU3RyYXRlZ3k6ZS5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLHNjcm9sbFN0cmF0ZWd5OmUuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCkscGFuZWxDbGFzczplLnBhbmVsQ2xhc3MsaGFzQmFja2Ryb3A6ZS5oYXNCYWNrZHJvcCxkaXJlY3Rpb246ZS5kaXJlY3Rpb24sbWluV2lkdGg6ZS5taW5XaWR0aCxtaW5IZWlnaHQ6ZS5taW5IZWlnaHQsbWF4V2lkdGg6ZS5tYXhXaWR0aCxtYXhIZWlnaHQ6ZS5tYXhIZWlnaHQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGlzcG9zZU9uTmF2aWdhdGlvbjplLmNsb3NlT25OYXZpZ2F0aW9ufSk7cmV0dXJuIGUuYmFja2Ryb3BDbGFzcyYmKGkuYmFja2Ryb3BDbGFzcz1lLmJhY2tkcm9wQ2xhc3MpLGl9X2F0dGFjaENvbnRhaW5lcihlLGkscil7bGV0IGEsbz1yLmluamVjdG9yfHxyLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLHM9W3twcm92aWRlOmxtLHVzZVZhbHVlOnJ9LHtwcm92aWRlOlFDLHVzZVZhbHVlOml9LHtwcm92aWRlOlR1LHVzZVZhbHVlOmV9XTtyLmNvbnRhaW5lcj8iZnVuY3Rpb24iPT10eXBlb2Ygci5jb250YWluZXI/YT1yLmNvbnRhaW5lcjooYT1yLmNvbnRhaW5lci50eXBlLHMucHVzaCguLi5yLmNvbnRhaW5lci5wcm92aWRlcnMocikpKTphPXM1O2xldCBsPW5ldyBDYyhhLHIudmlld0NvbnRhaW5lclJlZix6bi5jcmVhdGUoe3BhcmVudDpvfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6c30pLHIuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtyZXR1cm4gZS5hdHRhY2gobCkuaW5zdGFuY2V9X2F0dGFjaERpYWxvZ0NvbnRlbnQoZSxpLHIsbyl7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgcz10aGlzLl9jcmVhdGVJbmplY3RvcihvLGkscix2b2lkIDApLGE9eyRpbXBsaWNpdDpvLmRhdGEsZGlhbG9nUmVmOml9O28udGVtcGxhdGVDb250ZXh0JiYoYT17Li4uYSwuLi4iZnVuY3Rpb24iPT10eXBlb2Ygby50ZW1wbGF0ZUNvbnRleHQ/by50ZW1wbGF0ZUNvbnRleHQoKTpvLnRlbXBsYXRlQ29udGV4dH0pLHIuYXR0YWNoVGVtcGxhdGVQb3J0YWwobmV3IGhzKGUsbnVsbCxhLHMpKX1lbHNle2xldCBzPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHRoaXMuX2luamVjdG9yKSxhPXIuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG5ldyBDYyhlLG8udmlld0NvbnRhaW5lclJlZixzLG8uY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSk7aS5jb21wb25lbnRJbnN0YW5jZT1hLmluc3RhbmNlfX1fY3JlYXRlSW5qZWN0b3IoZSxpLHIsbyl7bGV0IHM9ZS5pbmplY3Rvcnx8ZS52aWV3Q29udGFpbmVyUmVmPy5pbmplY3RvcixhPVt7cHJvdmlkZTpIRGUsdXNlVmFsdWU6ZS5kYXRhfSx7cHJvdmlkZTpRQyx1c2VWYWx1ZTppfV07cmV0dXJuIGUucHJvdmlkZXJzJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUucHJvdmlkZXJzP2EucHVzaCguLi5lLnByb3ZpZGVycyhpLGUscikpOmEucHVzaCguLi5lLnByb3ZpZGVycykpLGUuZGlyZWN0aW9uJiYoIXN8fCFzLmdldChpcixudWxsLGlpLk9wdGlvbmFsKSkmJmEucHVzaCh7cHJvdmlkZTppcix1c2VWYWx1ZTp7dmFsdWU6ZS5kaXJlY3Rpb24sY2hhbmdlOmp0KCl9fSksem4uY3JlYXRlKHtwYXJlbnQ6c3x8byxwcm92aWRlcnM6YX0pfV9yZW1vdmVPcGVuRGlhbG9nKGUsaSl7bGV0IHI9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKGUpO3I+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShyLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHwodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmZvckVhY2goKG8scyk9PntvP3Muc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsbyk6cy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIil9KSx0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuY2xlYXIoKSxpJiZ0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSkpfV9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCk7aWYoZS5wYXJlbnRFbGVtZW50KXtsZXQgaT1lLnBhcmVudEVsZW1lbnQuY2hpbGRyZW47Zm9yKGxldCByPWkubGVuZ3RoLTE7cj4tMTtyLS0pe2xldCBvPWlbcl07byE9PWUmJiJTQ1JJUFQiIT09by5ub2RlTmFtZSYmIlNUWUxFIiE9PW8ubm9kZU5hbWUmJiFvLmhhc0F0dHJpYnV0ZSgiYXJpYS1saXZlIikmJih0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuc2V0KG8sby5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpLG8uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSl9fX1fZ2V0QWZ0ZXJBbGxDbG9zZWQoKXtsZXQgZT10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIGU/ZS5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKHpuKSxSKFVEZSw4KSxSKG4sMTIpLFIoTl8pLFIoUEopKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBvNShuLHQpe2xldCBlPW4ubGVuZ3RoO2Zvcig7ZS0tOyl0KG5bZV0pfXZhciBSSj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthNSxqRGVdLGltcG9ydHM6W1ZvLHdjLFBfLHdjXX0pLG59KSgpO2Z1bmN0aW9uIFdEZShuLHQpe312YXIgQl89e3BhcmFtczp7ZW50ZXJBbmltYXRpb25EdXJhdGlvbjoiMTUwbXMiLGV4aXRBbmltYXRpb25EdXJhdGlvbjoiNzVtcyJ9fSxxRGU9e2RpYWxvZ0NvbnRhaW5lcjpIcigiZGlhbG9nQ29udGFpbmVyIixbRWkoInZvaWQsIGV4aXQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxFaSgiZW50ZXIiLHJuKHt0cmFuc2Zvcm06Im5vbmUifSkpLElpKCIqID0+IGVudGVyIixIMyhbVmkoInt7ZW50ZXJBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7dHJhbnNmb3JtOiJub25lIixvcGFjaXR5OjF9KSksRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSksQl8pLElpKCIqID0+IHZvaWQsICogPT4gZXhpdCIsSDMoW1ZpKCJ7e2V4aXRBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIscm4oe29wYWNpdHk6MH0pKSxGZigiQCoiLGtmKCkse29wdGlvbmFsOiEwfSldKSxCXyldKX0sVl89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuZGVsYXlGb2N1c1RyYXA9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmVudGVyQW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmVudGVyQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5leGl0QW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmV4aXRBbmltYXRpb25EdXJhdGlvbn19LFlEZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgczV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGkscixvLHMsYSxsLGMpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgR31fY2FwdHVyZUluaXRpYWxGb2N1cygpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcHx8dGhpcy5fdHJhcEZvY3VzKCl9X29wZW5BbmltYXRpb25Eb25lKGUpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcCYmdGhpcy5fdHJhcEZvY3VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuZWQiLHRvdGFsVGltZTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxmZWF0dXJlczpbdHRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxYRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFlEZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIoZSxpLHIsbyxzLGEsbCx1KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1jLHRoaXMuX3N0YXRlPSJlbnRlciJ9X29uQW5pbWF0aW9uRG9uZSh7dG9TdGF0ZTplLHRvdGFsVGltZTppfSl7ImVudGVyIj09PWU/dGhpcy5fb3BlbkFuaW1hdGlvbkRvbmUoaSk6ImV4aXQiPT09ZSYmdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTppfSl9X29uQW5pbWF0aW9uU3RhcnQoe3RvU3RhdGU6ZSx0b3RhbFRpbWU6aX0peyJlbnRlciI9PT1lP3RoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmluZyIsdG90YWxUaW1lOml9KTooImV4aXQiPT09ZXx8InZvaWQiPT09ZSkmJnRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOml9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRBbmltYXRpb25TdGF0ZSgpe3JldHVybnt2YWx1ZTp0aGlzLl9zdGF0ZSxwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246dGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb258fEJfLnBhcmFtcy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uLGV4aXRBbmltYXRpb25EdXJhdGlvbjp0aGlzLl9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufHxCXy5wYXJhbXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyhubiksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmkwKCJAZGlhbG9nQ29udGFpbmVyLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25BbmltYXRpb25TdGFydChvKX0pKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkFuaW1hdGlvbkRvbmUobyl9KSwyJmUmJihBYSgiaWQiLGkuX2NvbmZpZy5pZCksemUoImFyaWEtbW9kYWwiLGkuX2NvbmZpZy5hcmlhTW9kYWwpKCJyb2xlIixpLl9jb25maWcucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpLHIwKCJAZGlhbG9nQ29udGFpbmVyIixpLl9nZXRBbmltYXRpb25TdGF0ZSgpKSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFdEZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9ucy5tYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyLC5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMubWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCwubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbcURlLmRpYWxvZ0NvbnRhaW5lcl19fSksbn0pKCksTWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IFRlLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcgVGUsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoSGUocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxIdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShIZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx1bih0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKEhlKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLE9KKHRoaXMsImtleWRvd24iPT09ci50eXBlPyJrZXlib2FyZCI6Im1vdXNlIikpfSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEhlKGU9PiJjbG9zaW5nIj09PWUuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX3JlZi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSxlLnRvdGFsVGltZSsxMDApfSksdGhpcy5fc3RhdGU9MSx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCl9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWR9YWZ0ZXJDbG9zZWQoKXtyZXR1cm4gdGhpcy5fcmVmLmNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fcmVmLmJhY2tkcm9wQ2xpY2t9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9yZWYua2V5ZG93bkV2ZW50c311cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9yZWYuY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3k7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9yZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fcmVmLnVwZGF0ZVNpemUodCxlKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fcmVmLnJlbW92ZVBhbmVsQ2xhc3ModCksdGhpc31nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1fZmluaXNoRGlhbG9nQ2xvc2UoKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3JlZi5jbG9zZSh0aGlzLl9yZXN1bHQse2ZvY3VzT3JpZ2luOnRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlfSksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsfX07ZnVuY3Rpb24gT0oobix0LGUpe3JldHVybiBuLl9jbG9zZUludGVyYWN0aW9uVHlwZT10LG4uY2xvc2UoZSl9dmFyIEtDPW5ldyBzZSgiTWF0RGlhbG9nRGF0YSIpLFFEZT1uZXcgc2UoIm1hdC1kaWFsb2ctZGVmYXVsdC1vcHRpb25zIiksa0o9bmV3IHNlKCJtYXQtZGlhbG9nLXNjcm9sbC1zdHJhdGVneSIpLFpEZT17cHJvdmlkZTprSixkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fSxKRGU9MCwkRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9wYXJlbnREaWFsb2c9byx0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcj1sLHRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGU9Yyx0aGlzLl9kaWFsb2dEYXRhVG9rZW49dSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2lkUHJlZml4PSJtYXQtZGlhbG9nLSIsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWEsdGhpcy5fZGlhbG9nPWkuZ2V0KGE1KX1nZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH1vcGVuKGUsaSl7bGV0IHI7KGk9ey4uLnRoaXMuX2RlZmF1bHRPcHRpb25zfHxuZXcgVl8sLi4uaX0pLmlkPWkuaWR8fGAke3RoaXMuX2lkUHJlZml4fSR7SkRlKyt9YCxpLnNjcm9sbFN0cmF0ZWd5PWkuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCk7bGV0IG89dGhpcy5fZGlhbG9nLm9wZW4oZSx7Li4uaSxwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksZGlzYWJsZUNsb3NlOiEwLGNsb3NlT25EZXN0cm95OiExLGNvbnRhaW5lcjp7dHlwZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHByb3ZpZGVyczooKT0+W3twcm92aWRlOlZfLHVzZVZhbHVlOml9LHtwcm92aWRlOmxtLHVzZVZhbHVlOml9XX0sdGVtcGxhdGVDb250ZXh0OigpPT4oe2RpYWxvZ1JlZjpyfSkscHJvdmlkZXJzOihzLGEsbCk9PihyPW5ldyB0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3RvcihzLGksbCksci51cGRhdGVQb3NpdGlvbihpPy5wb3NpdGlvbiksW3twcm92aWRlOnRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGUsdXNlVmFsdWU6bH0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nRGF0YVRva2VuLHVzZVZhbHVlOmEuZGF0YX0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IsdXNlVmFsdWU6cn1dKX0pO3JldHVybiByLmNvbXBvbmVudEluc3RhbmNlPW8uY29tcG9uZW50SW5zdGFuY2UsdGhpcy5vcGVuRGlhbG9ncy5wdXNoKHIpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChyKSxyLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpPT57bGV0IHM9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKHIpO3M+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShzLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSl9KSxyfWNsb3NlQWxsKCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMub3BlbkRpYWxvZ3MpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKX1fY2xvc2VEaWFsb2dzKGUpe2xldCBpPWUubGVuZ3RoO2Zvcig7aS0tOyllW2ldLmNsb3NlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE1jPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyAkRGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGksbyxhLGwscyxNZCxYRGUsS0MsYyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoem4pLFIoSHgsOCksUihRRGUsOCksUihrSiksUihuLDEyKSxSKE5fKSxSKExpLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxlQWU9MCxqQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmRpYWxvZ1JlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9kaWFsb2c9cix0aGlzLnR5cGU9ImJ1dHRvbiJ9bmdPbkluaXQoKXt0aGlzLmRpYWxvZ1JlZnx8KHRoaXMuZGlhbG9nUmVmPU5KKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5fbWF0RGlhbG9nQ2xvc2V8fGUuX21hdERpYWxvZ0Nsb3NlUmVzdWx0O2kmJih0aGlzLmRpYWxvZ1Jlc3VsdD1pLmN1cnJlbnRWYWx1ZSl9X29uQnV0dG9uQ2xpY2soZSl7T0oodGhpcy5kaWFsb2dSZWYsMD09PWUuc2NyZWVuWCYmMD09PWUuc2NyZWVuWT8ia2V5Ym9hcmQiOiJtb3VzZSIsdGhpcy5kaWFsb2dSZXN1bHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1kLDgpLHcoQWUpLHcoTWMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1jbG9zZSIsIiJdLFsiIiwibWF0RGlhbG9nQ2xvc2UiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25CdXR0b25DbGljayhvKX0pLDImZSYmemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgidHlwZSIsaS50eXBlKX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sdHlwZToidHlwZSIsZGlhbG9nUmVzdWx0OlsibWF0LWRpYWxvZy1jbG9zZSIsImRpYWxvZ1Jlc3VsdCJdLF9tYXREaWFsb2dDbG9zZTpbIm1hdERpYWxvZ0Nsb3NlIiwiX21hdERpYWxvZ0Nsb3NlIl19LGV4cG9ydEFzOlsibWF0RGlhbG9nQ2xvc2UiXSxmZWF0dXJlczpbenRdfSksbn0pKCksRko9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMuaWQ9Im1hdC1kaWFsb2ctdGl0bGUtIitlQWUrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1OSih0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhNZCw4KSx3KEFlKSx3KE1jKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy10aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZBYSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEdBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctY29udGVudCJdfSksbn0pKCksV0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWxpZ249InN0YXJ0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyIiwiY2VudGVyIj09PWkuYWxpZ24pKCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gTkoobix0KXtsZXQgZT1uLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2UmJiFlLmNsYXNzTGlzdC5jb250YWlucygibWF0LWRpYWxvZy1jb250YWluZXIiKTspZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGU/dC5maW5kKGk9PmkuaWQ9PT1lLmlkKTpudWxsfXZhciBIXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltNYyxaRGVdLGltcG9ydHM6W1JKLFZvLHdjLGRuLGRuXX0pLG59KSgpLHRBZT1bImNvbm5lY3Rpb25Db250YWluZXIiXSxuQWU9WyJpbnB1dENvbnRhaW5lciJdLGlBZT1bImxhYmVsIl07ZnVuY3Rpb24gckFlKG4sdCl7MSZuJiYoS3QoMCksZygxLCJkaXYiLDE0KSxOKDIsImRpdiIsMTUpKDMsImRpdiIsMTYpKDQsImRpdiIsMTcpLHYoKSxnKDUsImRpdiIsMTgpLE4oNiwiZGl2IiwxNSkoNywiZGl2IiwxNikoOCwiZGl2IiwxNyksdigpLFp0KCkpfWZ1bmN0aW9uIG9BZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTkpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLE5uKDEsMSksdigpfTImbiYmYigiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIm91dGxpbmUiIT1NKCkuYXBwZWFyYW5jZSl9ZnVuY3Rpb24gc0FlKG4sdCl7aWYoMSZuJiYoS3QoMCksTm4oMSwyKSxnKDIsInNwYW4iKSxEKDMpLHYoKSxadCgpKSwyJm4pe2xldCBlPU0oMik7eCgzKSx5dChlLl9jb250cm9sLnBsYWNlaG9sZGVyKX19ZnVuY3Rpb24gYUFlKG4sdCl7MSZuJiZObigwLDMsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBsQWUobix0KXsxJm4mJihnKDAsInNwYW4iLDIzKSxEKDEsIiAqIiksdigpKX1mdW5jdGlvbiBjQWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJsYWJlbCIsMjAsMjEpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLEUoMixzQWUsNCwxLCJuZy1jb250YWluZXIiLDEyKSxFKDMsYUFlLDEsMCwibmctY29udGVudCIsMTIpLEUoNCxsQWUsMiwwLCJzcGFuIiwyMiksdigpfWlmKDImbil7bGV0IGU9TSgpO2F0KCJtYXQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWZvcm0tZmllbGQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKSxiKCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwib3V0bGluZSIhPWUuYXBwZWFyYW5jZSkoImlkIixlLl9sYWJlbElkKSgibmdTd2l0Y2giLGUuX2hhc0xhYmVsKCkpLHplKCJmb3IiLGUuX2NvbnRyb2wuaWQpKCJhcmlhLW93bnMiLGUuX2NvbnRyb2wuaWQpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nSWYiLCFlLmhpZGVSZXF1aXJlZE1hcmtlciYmZS5fY29udHJvbC5yZXF1aXJlZCYmIWUuX2NvbnRyb2wuZGlzYWJsZWQpfX1mdW5jdGlvbiB1QWUobix0KXsxJm4mJihnKDAsImRpdiIsMjQpLE5uKDEsNCksdigpKX1mdW5jdGlvbiBkQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLE4oMSwic3BhbiIsMjYpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxhdCgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKX19ZnVuY3Rpb24gcEFlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxObigxLDUpLHYoKSksMiZuJiZiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixNKCkuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX1mdW5jdGlvbiBoQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMzApLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7YigiaWQiLGUuX2hpbnRMYWJlbElkKSx4KDEpLHl0KGUuaGludExhYmVsKX19ZnVuY3Rpb24gZkFlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI3KSxFKDEsaEFlLDIsMiwiZGl2IiwyOCksTm4oMiw2KSxOKDMsImRpdiIsMjkpLE5uKDQsNyksdigpKSwyJm4pe2xldCBlPU0oKTtiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixlLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSkseCgxKSxiKCJuZ0lmIixlLmhpbnRMYWJlbCl9fXZhciBtQWU9WyIqIixbWyIiLCJtYXRQcmVmaXgiLCIiXV0sW1sibWF0LXBsYWNlaG9sZGVyIl1dLFtbIm1hdC1sYWJlbCJdXSxbWyIiLCJtYXRTdWZmaXgiLCIiXV0sW1sibWF0LWVycm9yIl1dLFtbIm1hdC1oaW50IiwzLCJhbGlnbiIsImVuZCJdXSxbWyJtYXQtaGludCIsImFsaWduIiwiZW5kIl1dXSxnQWU9WyIqIiwiW21hdFByZWZpeF0iLCJtYXQtcGxhY2Vob2xkZXIiLCJtYXQtbGFiZWwiLCJbbWF0U3VmZml4XSIsIm1hdC1lcnJvciIsIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKSIsIm1hdC1oaW50W2FsaWduPSdlbmQnXSJdLF9BZT0wLFZKPW5ldyBzZSgiTWF0RXJyb3IiKSxISj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pZD0ibWF0LWVycm9yLSIrX0FlKyssZXx8aS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEtvKCJhcmlhLWxpdmUiKSx3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdXSxob3N0QXR0cnM6WyJhcmlhLWF0b21pYyIsInRydWUiLDEsIm1hdC1lcnJvciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VkosdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSx2QWU9e3RyYW5zaXRpb25NZXNzYWdlczpIcigidHJhbnNpdGlvbk1lc3NhZ2VzIixbRWkoImVudGVyIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwJSkifSkpLElpKCJ2b2lkID0+IGVudGVyIixbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTVweCkifSksVmkoIjMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfSxVXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHlBZT1uZXcgc2UoIk1hdEhpbnQiKSx6Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksbn0pKCksYkFlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcGxhY2Vob2xkZXIiXV19KSxufSkoKSx4QWU9bmV3IHNlKCJNYXRQcmVmaXgiKSxDQWU9bmV3IHNlKCJNYXRTdWZmaXgiKSxMSj0wLE1BZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSwicHJpbWFyeSIpLFNBZT1uZXcgc2UoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHVtPW5ldyBzZSgiTWF0Rm9ybUZpZWxkIiksRHU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE1BZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2RlZmF1bHRzPW8sdGhpcy5fcGxhdGZvcm09cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hMSx0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMSx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGludExhYmVsSWQ9Im1hdC1oaW50LSIrTEorKyx0aGlzLl9sYWJlbElkPSJtYXQtZm9ybS1maWVsZC1sYWJlbC0iK0xKKyssdGhpcy5mbG9hdExhYmVsPXRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9hbmltYXRpb25zRW5hYmxlZD0iTm9vcEFuaW1hdGlvbnMiIT09bCx0aGlzLmFwcGVhcmFuY2U9bz8uYXBwZWFyYW5jZXx8ImxlZ2FjeSIsbyYmKHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1Cb29sZWFuKG8uaGlkZVJlcXVpcmVkTWFya2VyKSxvLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1vLmNvbG9yKSl9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXtsZXQgaT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9ZXx8dGhpcy5fZGVmYXVsdHM/LmFwcGVhcmFuY2V8fCJsZWdhY3kiLCJvdXRsaW5lIj09PXRoaXMuX2FwcGVhcmFuY2UmJmkhPT1lJiYodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITApfWdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKXtyZXR1cm4gdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyfXNldCBoaWRlUmVxdWlyZWRNYXJrZXIoZSl7dGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPVd0KGUpfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9X2NhbkxhYmVsRmxvYXQoKXtyZXR1cm4ibmV2ZXIiIT09dGhpcy5mbG9hdExhYmVsfWdldCBoaW50TGFiZWwoKXtyZXR1cm4gdGhpcy5faGludExhYmVsfXNldCBoaW50TGFiZWwoZSl7dGhpcy5faGludExhYmVsPWUsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4ibGVnYWN5IiE9PXRoaXMuYXBwZWFyYW5jZSYmIm5ldmVyIj09PXRoaXMuX2Zsb2F0TGFiZWw/ImF1dG8iOnRoaXMuX2Zsb2F0TGFiZWx9c2V0IGZsb2F0TGFiZWwoZSl7ZSE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPWV8fHRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IF9jb250cm9sKCl7cmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbHx8dGhpcy5fY29udHJvbE5vblN0YXRpY3x8dGhpcy5fY29udHJvbFN0YXRpY31zZXQgX2NvbnRyb2woZSl7dGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sPWV9Z2V0TGFiZWxJZCgpe3JldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCk/dGhpcy5fbGFiZWxJZDpudWxsfWdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZnx8dGhpcy5fZWxlbWVudFJlZn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpO2xldCBlPXRoaXMuX2NvbnRyb2w7ZS5jb250cm9sVHlwZSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC1mb3JtLWZpZWxkLXR5cGUtJHtlLmNvbnRyb2xUeXBlfWApLGUuc3RhdGVDaGFuZ2VzLnBpcGUoVm4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxlLm5nQ29udHJvbCYmZS5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9KX0pLHVuKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsdGhpcy5fc3VmZml4Q2hpbGRyZW4uY2hhbmdlcykuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSx0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9wcm9jZXNzSGludHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZU91dGxpbmVHYXAoKSl9KTp0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCksdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHkmJnRoaXMudXBkYXRlT3V0bGluZUdhcCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2hvdWxkRm9yd2FyZChlKXtsZXQgaT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGkmJmlbZV19X2hhc1BsYWNlaG9sZGVyKCl7cmV0dXJuISEodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5wbGFjZWhvbGRlcnx8dGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl9X2hhc0xhYmVsKCl7cmV0dXJuISghdGhpcy5fbGFiZWxDaGlsZE5vblN0YXRpYyYmIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWMpfV9zaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQoKSYmKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdHx8dGhpcy5fc2hvdWxkQWx3YXlzRmxvYXQoKSl9X2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9X2hhc0Zsb2F0aW5nTGFiZWwoKXtyZXR1cm4gdGhpcy5faGFzTGFiZWwoKXx8ImxlZ2FjeSI9PT10aGlzLmFwcGVhcmFuY2UmJnRoaXMuX2hhc1BsYWNlaG9sZGVyKCl9X2dldERpc3BsYXllZE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJnRoaXMuX2Vycm9yQ2hpbGRyZW4ubGVuZ3RoPjAmJnRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZT8iZXJyb3IiOiJoaW50In1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJnRoaXMuX2xhYmVsJiYodGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITAsbGkodGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudCwidHJhbnNpdGlvbmVuZCIpLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Nob3dBbHdheXNBbmltYXRlPSExfSkpLHRoaXMuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCl7fV9wcm9jZXNzSGludHMoKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9X3ZhbGlkYXRlSGludHMoKXt9X2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmZsb2F0TGFiZWx8fCJhdXRvIn1fc3luY0Rlc2NyaWJlZEJ5SWRzKCl7aWYodGhpcy5fY29udHJvbCl7bGV0IGU9W107aWYodGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmZS5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgiICIpKSwiaGludCI9PT10aGlzLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKXtsZXQgaT10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+InN0YXJ0Ij09PW8uYWxpZ24pOm51bGwscj10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+ImVuZCI9PT1vLmFsaWduKTpudWxsO2k/ZS5wdXNoKGkuaWQpOnRoaXMuX2hpbnRMYWJlbCYmZS5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxyJiZlLnB1c2goci5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiZlLnB1c2goLi4udGhpcy5fZXJyb3JDaGlsZHJlbi5tYXAoaT0+aS5pZCkpO3RoaXMuX2NvbnRyb2wuc2V0RGVzY3JpYmVkQnlJZHMoZSl9fV92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpe311cGRhdGVPdXRsaW5lR2FwKCl7bGV0IGU9dGhpcy5fbGFiZWw/dGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudDpudWxsLGk9dGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LHI9Ii5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IixvPSIubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiO2lmKCJvdXRsaW5lIiE9PXRoaXMuYXBwZWFyYW5jZXx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIWV8fCFlLmNoaWxkcmVuLmxlbmd0aHx8IWUudGV4dENvbnRlbnQudHJpbSgpKXtsZXQgdT1pLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7cn0sICR7b31gKTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKyl1W2RdLnN0eWxlLndpZHRoPSIwIjtyZXR1cm59aWYoIXRoaXMuX2lzQXR0YWNoZWRUb0RPTSgpKXJldHVybiB2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSEwKTtsZXQgcz0wLGE9MCxsPWkucXVlcnlTZWxlY3RvckFsbChyKSxjPWkucXVlcnlTZWxlY3RvckFsbChvKTtpZih0aGlzLl9sYWJlbCYmdGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpe2xldCB1PWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PXUud2lkdGgmJjA9PT11LmhlaWdodClyZXR1cm4gdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdm9pZCh0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSk7bGV0IGQ9dGhpcy5fZ2V0U3RhcnRFbmQodSkscD1lLmNoaWxkcmVuLGg9dGhpcy5fZ2V0U3RhcnRFbmQocFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksZj0wO2ZvcihsZXQgbT0wO208cC5sZW5ndGg7bSsrKWYrPXBbbV0ub2Zmc2V0V2lkdGg7cz1NYXRoLmFicyhoLWQpLTUsYT1mPjA/Ljc1KmYrMTA6MH1mb3IobGV0IHU9MDt1PGwubGVuZ3RoO3UrKylsW3VdLnN0eWxlLndpZHRoPWAke3N9cHhgO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKWNbdV0uc3R5bGUud2lkdGg9YCR7YX1weGA7dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITF9X2dldFN0YXJ0RW5kKGUpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlP2UucmlnaHQ6ZS5sZWZ0fV9pc0F0dGFjaGVkVG9ET00oKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoZS5nZXRSb290Tm9kZSl7bGV0IGk9ZS5nZXRSb290Tm9kZSgpO3JldHVybiBpJiZpIT09ZX1yZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGlyLDgpLHcoU0FlLDgpLHcodWkpLHcocHQpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1mb3JtLWZpZWxkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLFVfLDUpLE5pKHIsVV8sNyksTmkocix6Xyw1KSxOaShyLHpfLDcpLE5pKHIsYkFlLDUpLE5pKHIsVkosNSksTmkocix5QWUsNSksTmkocix4QWUsNSksTmkocixDQWUsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2NvbnRyb2xOb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2NvbnRyb2xTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX3BsYWNlaG9sZGVyQ2hpbGQ9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKSxOZShvPUxlKCkpJiYoaS5fcHJlZml4Q2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX3N1ZmZpeENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodEFlLDcpLGx0KG5BZSw1KSxsdChpQWUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX2lucHV0Q29udGFpbmVyUmVmPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IiwibGVnYWN5Ij09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSgibWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IixpLl9jYW5MYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLGkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCIsaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciIsaS5faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpKSgibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixpLl9jb250cm9sLmF1dG9maWxsZWQpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsaGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGhpbnRMYWJlbDoiaGludExhYmVsIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOnVtLHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpnQWUsZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4IiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm5nU3dpdGNoIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsIiwiIl0sWyJjbGFzcyIsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIiwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2kobUFlKSxnKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxFKDMsckFlLDksMCwibmctY29udGFpbmVyIiwzKSxFKDQsb0FlLDIsMSwiZGl2Iiw0KSxnKDUsImRpdiIsNSw2KSxObig3KSxnKDgsInNwYW4iLDcpLEUoOSxjQWUsNSwxNiwibGFiZWwiLDgpLHYoKSgpLEUoMTAsdUFlLDIsMCwiZGl2Iiw5KSx2KCksRSgxMSxkQWUsMiw0LCJkaXYiLDEwKSxnKDEyLCJkaXYiLDExKSxFKDEzLHBBZSwyLDEsImRpdiIsMTIpLEUoMTQsZkFlLDUsMiwiZGl2IiwxMyksdigpKCkpLDImZSYmKHgoMyksYigibmdJZiIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdJZiIsaS5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSx4KDUpLGIoIm5nSWYiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSkseCgxKSxiKCJuZ0lmIixpLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLHgoMSksYigibmdJZiIsIm91dGxpbmUiIT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdTd2l0Y2giLGkuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsU19dLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwnLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO3BhZGRpbmc6Ljc1ZW0gLjc1ZW0gMCAuNzVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmUtY29sb3I6R3JheVRleHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6ZGFzaGVkIDNweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjFweDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGw6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye3BhZGRpbmc6MCAxZW19JywnLm1hdC1pbnB1dC1lbGVtZW50e2ZvbnQ6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207dGV4dC1hbGlnbjppbmhlcml0O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY29udGFjdHMtYXV0by1maWxsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2Fwcy1sb2NrLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6bm90KFt0eXBlPXBhc3N3b3JkXSk6Oi13ZWJraXQtY3JlZGVudGlhbHMtYXV0by1maWxsLWJ1dHRvbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV06OmFmdGVye2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jbGVhci1idXR0b257Zm9udC1zaXplOi43NWVtfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6MWVtO3RvcDotMWVtO21hcmdpbi1ib3R0b206LTFlbX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yaWdodDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItdG9wOjVweCBzb2xpZDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotMi41cHg7cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntyaWdodDphdXRvO2xlZnQ6MH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDoxNXB4fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxMHB4KX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcnttYXJnaW4tdG9wOi01cHh9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotMTBweH0nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbnt3aWR0aDoxZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2ZvbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntmb250LXNpemU6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dG9wOjA7aGVpZ2h0OjJweDtvdmVyZmxvdzpoaWRkZW59LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym9yZGVyLXRvcC1jb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcnttYXJnaW46LjI1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmc6MCAuNzVlbSAwIC43NWVtO21hcmdpbi10b3A6LTAuMjVlbTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3VmZml4e3RvcDouMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjI1ZW07bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO21pbi13aWR0aDo1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4O2JvcmRlci1yaWdodC1zdHlsZTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6MCA1cHggNXB4IDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMDtib3JkZXItbGVmdC1zdHlsZTpub25lO2ZsZXgtZ3JvdzoxfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6bm9uZTtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci1yYWRpdXM6LjAwMDAwMXB4O2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6R3JheVRleHR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvcmRlci10b3Atc3R5bGU6ZG90dGVkO2JvcmRlci10b3Atd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDYwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbdkFlLnRyYW5zaXRpb25NZXNzYWdlc119LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZG09KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGRuLHpwLGRuXX0pLG59KSgpLEtKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9yZW5kZXJlcj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLm9uQ2hhbmdlPXI9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShlLGkpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLGkpfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoWGMpLHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHBtPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLSnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxIbz1uZXcgc2UoIk5nVmFsdWVBY2Nlc3NvciIpLEVBZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+VEFlKSxtdWx0aTohMH0sVEFlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFtFQWVdKSx0dF19KSxufSkoKSxEQWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PnRJKSxtdWx0aTohMH0sSUFlPW5ldyBzZSgiQ29tcG9zaXRpb25FdmVudE1vZGUiKSx0ST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS0p7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY29tcG9zaXRpb25Nb2RlPXIsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24oKXtsZXQgbj1nbCgpP2dsKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3Qobi50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfV9oYW5kbGVJbnB1dChlKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShlKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoZSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhYYyksdyhBZSksdyhJQWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9jb21wb3NpdGlvbkVuZChvLnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6WyR0KFtEQWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBLcChuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBaSihuKXtyZXR1cm4gbnVsbCE9biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aH12YXIgVW89bmV3IHNlKCJOZ1ZhbGlkYXRvcnMiKSxacD1uZXcgc2UoIk5nQXN5bmNWYWxpZGF0b3JzIiksUkFlPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sU2M9Y2xhc3N7c3RhdGljIG1pbih0KXtyZXR1cm4gSkoodCl9c3RhdGljIG1heCh0KXtyZXR1cm4gJEoodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBlJCh0KX1zdGF0aWMgcmVxdWlyZWRUcnVlKHQpe3JldHVybiB0JCh0KX1zdGF0aWMgZW1haWwodCl7cmV0dXJuIG4kKHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIGkkKHQpfXN0YXRpYyBtYXhMZW5ndGgodCl7cmV0dXJuIHIkKHQpfXN0YXRpYyBwYXR0ZXJuKHQpe3JldHVybiBvJCh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gZCQodCl9c3RhdGljIGNvbXBvc2VBc3luYyh0KXtyZXR1cm4gcCQodCl9fTtmdW5jdGlvbiBKSihuKXtyZXR1cm4gdD0+e2lmKEtwKHQudmFsdWUpfHxLcChuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gJEoobil7cmV0dXJuIHQ9PntpZihLcCh0LnZhbHVlKXx8S3AobikpcmV0dXJuIG51bGw7bGV0IGU9cGFyc2VGbG9hdCh0LnZhbHVlKTtyZXR1cm4haXNOYU4oZSkmJmU+bj97bWF4OnttYXg6bixhY3R1YWw6dC52YWx1ZX19Om51bGx9fWZ1bmN0aW9uIGUkKG4pe3JldHVybiBLcChuLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gdCQobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBuJChuKXtyZXR1cm4gS3Aobi52YWx1ZSl8fFJBZS50ZXN0KG4udmFsdWUpP251bGw6e2VtYWlsOiEwfX1mdW5jdGlvbiBpJChuKXtyZXR1cm4gdD0+S3AodC52YWx1ZSl8fCFaSih0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHIkKG4pe3JldHVybiB0PT5aSih0LnZhbHVlKSYmdC52YWx1ZS5sZW5ndGg+bj97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gbyQobil7aWYoIW4pcmV0dXJuIFlBO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihLcChpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiBZQShuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzJChuKXtyZXR1cm4gbnVsbCE9bn1mdW5jdGlvbiBhJChuKXtyZXR1cm4gbjAobik/bG8obik6bn1mdW5jdGlvbiBsJChuKXtsZXQgdD17fTtyZXR1cm4gbi5mb3JFYWNoKGU9Pnt0PW51bGwhPWU/ey4uLnQsLi4uZX06dH0pLDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/bnVsbDp0fWZ1bmN0aW9uIGMkKG4sdCl7cmV0dXJuIHQubWFwKGU9PmUobikpfWZ1bmN0aW9uIHUkKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtyZXR1cm4hbi52YWxpZGF0ZX0odCk/dDplPT50LnZhbGlkYXRlKGUpKX1mdW5jdGlvbiBkJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGwkKGMkKGUsdCkpfX1mdW5jdGlvbiBkNShuKXtyZXR1cm4gbnVsbCE9bj9kJCh1JChuKSk6bnVsbH1mdW5jdGlvbiBwJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHhvKGMkKGUsdCkubWFwKGEkKSkucGlwZShCKGwkKSl9fWZ1bmN0aW9uIHA1KG4pe3JldHVybiBudWxsIT1uP3AkKHUkKG4pKTpudWxsfWZ1bmN0aW9uIFVKKG4sdCl7cmV0dXJuIG51bGw9PT1uP1t0XTpBcnJheS5pc0FycmF5KG4pP1suLi5uLHRdOltuLHRdfWZ1bmN0aW9uIGgkKG4pe3JldHVybiBuLl9yYXdWYWxpZGF0b3JzfWZ1bmN0aW9uIGYkKG4pe3JldHVybiBuLl9yYXdBc3luY1ZhbGlkYXRvcnN9ZnVuY3Rpb24gbDUobil7cmV0dXJuIG4/QXJyYXkuaXNBcnJheShuKT9uOltuXTpbXX1mdW5jdGlvbiBYQShuLHQpe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uaW5jbHVkZXModCk6bj09PXR9ZnVuY3Rpb24gekoobix0KXtsZXQgZT1sNSh0KTtyZXR1cm4gbDUobikuZm9yRWFjaChyPT57WEEoZSxyKXx8ZS5wdXNoKHIpfSksZX1mdW5jdGlvbiBqSihuLHQpe3JldHVybiBsNSh0KS5maWx0ZXIoZT0+IVhBKG4sZSkpfXZhciBRQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWQ1KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1wNSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119cmVzZXQodCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9aGFzRXJyb3IodCxlKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKHQsZSl9Z2V0RXJyb3IodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcih0LGUpOm51bGx9fSxmcz1jbGFzcyBleHRlbmRzIFFBe2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19LHBhPWNsYXNzIGV4dGVuZHMgUUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX0sYzU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2Q9dH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlzUGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX0sbSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGM1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHBhLDIpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJuZy11bnRvdWNoZWQiLGkuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixpLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixpLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaS5pc0RpcnR5KSgibmctdmFsaWQiLGkuaXNWYWxpZCkoIm5nLWludmFsaWQiLGkuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaS5pc1BlbmRpbmcpfSxmZWF0dXJlczpbdHRdfSksbn0pKCksSkM9IlZBTElEIixxQT0iSU5WQUxJRCIsal89IlBFTkRJTkciLCRDPSJESVNBQkxFRCI7ZnVuY3Rpb24gXyQobil7cmV0dXJuKG5JKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBHSihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9kNShuKTpufHxudWxsfWZ1bmN0aW9uIHYkKG4sdCl7cmV0dXJuKG5JKHQpP3QuYXN5bmNWYWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIFdKKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP3A1KG4pOm58fG51bGx9ZnVuY3Rpb24gbkkobil7cmV0dXJuIG51bGwhPW4mJiFBcnJheS5pc0FycmF5KG4pJiYib2JqZWN0Ij09dHlwZW9mIG59dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1lLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodGhpcy5fcmF3VmFsaWRhdG9ycyksdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVdKKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IodCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXR9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IodCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj10fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PUpDfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09cUF9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PWpffWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PSRDfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09JEN9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XSih0KX1hZGRWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyh6Sih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoekoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhqSih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoakoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsdCl9aGFzQXN5bmNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyx0KX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKHQ9PnQubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9bWFya0FzRGlydHkodD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9bWFya0FzUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1tYXJrQXNQZW5kaW5nKHQ9e30pe3RoaXMuc3RhdHVzPWpfLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX1kaXNhYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPSRDLHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmRpc2FibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCEwKSl9ZW5hYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPUpDLHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5lbmFibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMSkpfV91cGRhdGVBbmNlc3RvcnModCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHQuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0PXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PUpDfHx0aGlzLnN0YXR1cz09PWpfKSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8kQzpKQ31fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKHQpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPWpfLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtsZXQgZT1hJCh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEcsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBHfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpPyRDOnRoaXMuZXJyb3JzP3FBOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGpfKT9qXzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMocUEpP3FBOkpDfV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7bkkodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH19LFpBPWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKF8kKGUpLHYkKGksZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUsaT17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDppLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbCh0LGUsaT17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH1zZXRWYWx1ZSh0LGU9e30peyhmdW5jdGlvbihuLHQsZSl7bi5fZm9yRWFjaENoaWxkKChpLHIpPT57aWYodm9pZCAwPT09ZVtyXSl0aHJvdyBuZXcgTXQoMTAwMiwiIil9KX0pKHRoaXMsMCx0KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PnsoZnVuY3Rpb24obix0LGUpe2xldCBpPW4uY29udHJvbHM7aWYoISh0P09iamVjdC5rZXlzKGkpOmkpLmxlbmd0aCl0aHJvdyBuZXcgTXQoMWUzLCIiKTtpZighaVtlXSl0aHJvdyBuZXcgTXQoMTAwMSwiIil9KSh0aGlzLCEwLGkpLHRoaXMuY29udHJvbHNbaV0uc2V0VmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10aGlzLmNvbnRyb2xzW2ldO3ImJnIucGF0Y2hWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKHQsZSxpKT0+KHRbaV09ZS5nZXRSYXdWYWx1ZSgpLHQpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLChlLGkpPT4hIWkuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8ZSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV9mb3JFYWNoQ2hpbGQodCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChlPT57bGV0IGk9dGhpcy5jb250cm9sc1tlXTtpJiZ0KGksZSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHModCl7Zm9yKGxldFtlLGldb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhlKSYmdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGUsaSxyKT0+KChpLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoZVtyXT1pLnZhbHVlKSxlKSl9X3JlZHVjZUNoaWxkcmVuKHQsZSl7bGV0IGk9dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChyLG8pPT57aT1lKGkscixvKX0pLGl9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZCh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmNvbnRyb2xzW3RdOm51bGx9fTtmdW5jdGlvbiBpSShuLHQpe3JldHVyblsuLi50LnBhdGgsbl19ZnVuY3Rpb24gdHcobix0KXtoNShuLHQpLHQudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKG4udmFsdWUpLG4uZGlzYWJsZWQmJnQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oITApLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZT0+e24uX3BlbmRpbmdWYWx1ZT1lLG4uX3BlbmRpbmdDaGFuZ2U9ITAsbi5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09bi51cGRhdGVPbiYmeSQobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnkkKG4sdCksInN1Ym1pdCIhPT1uLnVwZGF0ZU9uJiZuLm1hcmtBc1RvdWNoZWQoKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7aWYodC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2xldCBlPWk9Pnt0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShpKX07bi5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKX0pfX0obix0KX1mdW5jdGlvbiBKQShuLHQsZT0hMCl7bGV0IGk9KCk9Pnt9O3QudmFsdWVBY2Nlc3NvciYmKHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGkpLHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChpKSksZUkobix0KSxuJiYodC5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksbi5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9ZnVuY3Rpb24gJEEobix0KXtuLmZvckVhY2goZT0+e2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpfSl9ZnVuY3Rpb24gaDUobix0KXtsZXQgZT1oJChuKTtudWxsIT09dC52YWxpZGF0b3I/bi5zZXRWYWxpZGF0b3JzKFVKKGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9ZiQobik7bnVsbCE9PXQuYXN5bmNWYWxpZGF0b3I/bi5zZXRBc3luY1ZhbGlkYXRvcnMoVUooaSx0LmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4uc2V0QXN5bmNWYWxpZGF0b3JzKFtpXSk7bGV0IHI9KCk9Pm4udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOyRBKHQuX3Jhd1ZhbGlkYXRvcnMsciksJEEodC5fcmF3QXN5bmNWYWxpZGF0b3JzLHIpfWZ1bmN0aW9uIGVJKG4sdCl7bGV0IGU9ITE7aWYobnVsbCE9PW4pe2lmKG51bGwhPT10LnZhbGlkYXRvcil7bGV0IHI9aCQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9ZiQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQuYXN5bmNWYWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0QXN5bmNWYWxpZGF0b3JzKG8pKX19fWxldCBpPSgpPT57fTtyZXR1cm4gJEEodC5fcmF3VmFsaWRhdG9ycyxpKSwkQSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMsaSksZX1mdW5jdGlvbiB5JChuLHQpe24uX3BlbmRpbmdEaXJ0eSYmbi5tYXJrQXNEaXJ0eSgpLG4uc2V0VmFsdWUobi5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSx0LnZpZXdUb01vZGVsVXBkYXRlKG4uX3BlbmRpbmdWYWx1ZSksbi5fcGVuZGluZ0NoYW5nZT0hMX1mdW5jdGlvbiBiJChuLHQpe2g1KG4sdCl9ZnVuY3Rpb24gZjUobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24geCQobix0KXtuLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksdC5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2w7InN1Ym1pdCI9PT1pLnVwZGF0ZU9uJiZpLl9wZW5kaW5nQ2hhbmdlJiYoZS52aWV3VG9Nb2RlbFVwZGF0ZShpLl9wZW5kaW5nVmFsdWUpLGkuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9ZnVuY3Rpb24gbTUobix0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZSxpLHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCksdC5mb3JFYWNoKG89PntvLmNvbnN0cnVjdG9yPT09dEk/ZT1vOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5jb25zdHJ1Y3Rvcik9PT1wbX0obyk/aT1vOnI9b30pLHJ8fGl8fGV8fG51bGx9dmFyIFlBZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+R18pfSxldz1Qcm9taXNlLnJlc29sdmUoKSxHXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBHLHRoaXMuZm9ybT1uZXcgWkEoe30sZDUoZSkscDUoaSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtlLmNvbnRyb2w9aS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLGUuY29udHJvbCksdHcoZS5jb250cm9sLGUpLGUuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChlKX0pfWdldENvbnRyb2woZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX1yZW1vdmVDb250cm9sKGUpe2V3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSksdGhpcy5fZGlyZWN0aXZlcy5kZWxldGUoZSl9KX1hZGRGb3JtR3JvdXAoZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKSxyPW5ldyBaQSh7fSk7YiQocixlKSxpLnJlZ2lzdGVyQ29udHJvbChlLm5hbWUsciksci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChlKXtldy50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpfSl9Z2V0Rm9ybUdyb3VwKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9dXBkYXRlTW9kZWwoZSxpKXtldy50aGVuKCgpPT57dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfSl9c2V0VmFsdWUoZSl7dGhpcy5jb250cm9sLnNldFZhbHVlKGUpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihlKXtyZXR1cm4gZS5wb3AoKSxlLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGUpOnRoaXMuZm9ybX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhVbywxMCksdyhacCwxMCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbWUFlXSksdHRdfSksbn0pKCk7ZnVuY3Rpb24gcUoobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBZSihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYyPT09T2JqZWN0LmtleXMobikubGVuZ3RoJiYidmFsdWUiaW4gbiYmImRpc2FibGVkImluIG59dmFyIG53PWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodD1udWxsLGUsaSl7c3VwZXIoXyQoZSksdiQoaSxlKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVsbCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLG5JKGUpJiYoZS5ub25OdWxsYWJsZXx8ZS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9WUoodCk/dC52YWx1ZTp0KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGk9PmkodGhpcy52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXt0aGlzLnNldFZhbHVlKHQsZSl9cmVzZXQodD10aGlzLmRlZmF1bHRWYWx1ZSxlPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLm1hcmtBc1ByaXN0aW5lKGUpLHRoaXMubWFya0FzVW50b3VjaGVkKGUpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxlKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHModCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9X3VucmVnaXN0ZXJPbkNoYW5nZSh0KXtxSih0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtxSih0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLHQpfV9mb3JFYWNoQ2hpbGQodCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUodCl7WUoodCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQudmFsdWUsdC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dH19LEMkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmc3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBpSShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxRQWU9e3Byb3ZpZGU6ZnMsdXNlRXhpc3Rpbmc6cmkoKCk9PktBZSl9LEtBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcyw1KSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6WyR0KFtRQWVdKSx0dF19KSxufSkoKSxaQWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PkpBZSl9LFhKPVByb21pc2UucmVzb2x2ZSgpLEpBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5jb250cm9sPW5ldyBudyx0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMudXBkYXRlPW5ldyBHLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGUpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUpKXtsZXQgaT1lLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh7bmFtZTppLHBhdGg6dGhpcy5fZ2V0UGF0aChpKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGUmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGUpLGY1KGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShlKXt0aGlzLnZpZXdNb2RlbD1lLHRoaXMudXBkYXRlLmVtaXQoZSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFsb25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXt0dyh0aGlzLmNvbnRyb2wsdGhpcyksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoZSl7WEoudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZlMShpKTtYSi50aGVuKCgpPT57ciYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fZ2V0UGF0aChlKXtyZXR1cm4gdGhpcy5fcGFyZW50P2lJKGUsdGhpcy5fcGFyZW50KTpbZV19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsOSksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhubiw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlsibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOlskdChbWkFlXSksdHQsenRdfSksbn0pKCksJEFlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5nNSksbXVsdGk6ITB9LGc1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntlKCIiPT1pP251bGw6cGFyc2VGbG9hdChpKSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFskQWVdKSx0dF19KSxufSkoKSxlSWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9Pm5JZSksbXVsdGk6ITB9LHckPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx0SWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoZSxpKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbZSxpXSl9cmVtb3ZlKGUpe2ZvcihsZXQgaT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7aT49MDstLWkpaWYodGhpcy5fYWNjZXNzb3JzW2ldWzFdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGksMSl9c2VsZWN0KGUpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGk9Pnt0aGlzLl9pc1NhbWVHcm91cChpLGUpJiZpWzFdIT09ZSYmaVsxXS5maXJlVW5jaGVjayhlLnZhbHVlKX0pfV9pc1NhbWVHcm91cChlLGkpe3JldHVybiEhZVswXS5jb250cm9sJiZlWzBdLl9wYXJlbnQ9PT1pLl9jb250cm9sLl9wYXJlbnQmJmVbMV0ubmFtZT09PWkubmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46dyR9KSxufSkoKSxuSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMub25DaGFuZ2U9KCk9Pnt9fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQocGEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFhjKSx3KEFlKSx3KHRJZSksdyh6bikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbJHQoW2VJZV0pLHR0XX0pLG59KSgpLGlJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ckllKSxtdWx0aTohMH0sckllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW2lJZV0pLHR0XX0pLG59KSgpLF81PW5ldyBzZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxvSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnY1KX0sdjU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBhe2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLnVwZGF0ZT1uZXcgRyx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPW01KDAscil9c2V0IGlzRGlzYWJsZWQoZSl7fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJkpBKGksdGhpcywhMSksdHcodGhpcy5mb3JtLHRoaXMpLHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1mNShlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuZm9ybS5zZXRWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmSkEodGhpcy5mb3JtLHRoaXMsITEpfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1faXNDb250cm9sQ2hhbmdlZChlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoVW8sMTApLHcoWnAsMTApLHcoSG8sMTApLHcoXzUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW29JZV0pLHR0LHp0XX0pLG59KSgpLHNJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+V18pfSxXXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKGVJKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiB0dyhpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtKQShlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2wscj10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSE9PXImJihKQShpfHxudWxsLGUpLChuPT5uIGluc3RhbmNlb2YgbncpKHIpJiYodHcocixlKSxlLmNvbnRyb2w9cikpfSksdGhpcy5mb3JtLl91cGRhdGVUcmVlVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9zZXRVcEZvcm1Db250YWluZXIoZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO2IkKGksZSksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2xlYW5VcEZvcm1Db250YWluZXIoZSl7aWYodGhpcy5mb3JtKXtsZXQgaT10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSYmZnVuY3Rpb24obix0KXtyZXR1cm4gZUkobix0KX0oaSxlKSYmaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX19X3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKXt0aGlzLmZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksdGhpcy5fb2xkRm9ybSYmdGhpcy5fb2xkRm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KX1fdXBkYXRlVmFsaWRhdG9ycygpe2g1KHRoaXMuZm9ybSx0aGlzKSx0aGlzLl9vbGRGb3JtJiZlSSh0aGlzLl9vbGRGb3JtLHRoaXMpfV9jaGVja0Zvcm1QcmVzZW50KCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoInN1Ym1pdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdWJtaXQobyl9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNldCgpfSl9LGlucHV0czp7Zm9ybTpbImZvcm1Hcm91cCIsImZvcm0iXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW3NJZV0pLHR0LHp0XX0pLG59KSgpLGFJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+TSQpfSxNJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe0UkKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsMTMpLHcoVW8sMTApLHcoWnAsMTApKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbJHQoW2FJZV0pLHR0XX0pLG59KSgpLGxJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+UyQpfSxTJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUFycmF5KHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtQXJyYXkodGhpcyl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gaUkobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfV9jaGVja1BhcmVudFR5cGUoKXtFJCh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGZzLDEzKSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6WyR0KFtsSWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBFJChuKXtyZXR1cm4hKG4gaW5zdGFuY2VvZiBNJHx8biBpbnN0YW5jZW9mIFdffHxuIGluc3RhbmNlb2YgUyQpfXZhciBjSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnVJZSl9LHVJZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPXMsdGhpcy5fYWRkZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfXNldCBpc0Rpc2FibGVkKGUpe31uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksZjUoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIGlJKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcywxMyksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhfNSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOlskdChbY0llXSksdHQsenRdfSksbn0pKCksZEllPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5EJCksbXVsdGk6ITB9O2Z1bmN0aW9uIFQkKG4sdCl7cmV0dXJuIG51bGw9PW4/YCR7dH1gOih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0PSJPYmplY3QiKSxgJHtufTogJHt0fWAuc2xpY2UoMCw1MCkpfXZhciBEJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj1UJCh0aGlzLl9nZXRPcHRpb25JZChlKSxlKTt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIscil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGkpLGUodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKTplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6WyR0KFtkSWVdKSx0dF19KSxufSkoKSxBJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsZSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKFQkKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoRCQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpLGhJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+SSQpLG11bHRpOiEwfTtmdW5jdGlvbiBRSihuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgSSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXtsZXQgaTtpZih0aGlzLnZhbHVlPWUsQXJyYXkuaXNBcnJheShlKSl7bGV0IHI9ZS5tYXAobz0+dGhpcy5fZ2V0T3B0aW9uSWQobykpO2k9KG8scyk9PntvLl9zZXRTZWxlY3RlZChyLmluZGV4T2Yocy50b1N0cmluZygpKT4tMSl9fWVsc2UgaT0ocixvKT0+e3IuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goaSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntsZXQgcj1bXSxvPWkuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PW8pe2xldCBzPW87Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKHNbYV0udmFsdWUpO3IucHVzaChjKX19ZWxzZXtsZXQgcz1pLm9wdGlvbnM7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBsPXNbYV07aWYobC5zZWxlY3RlZCl7bGV0IGM9dGhpcy5fZ2V0T3B0aW9uVmFsdWUobC52YWx1ZSk7ci5wdXNoKGMpfX19dGhpcy52YWx1ZT1yLGUocil9fV9yZWdpc3Rlck9wdGlvbihlKXtsZXQgaT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoaSxlKSxpfV9nZXRPcHRpb25JZChlKXtmb3IobGV0IGkgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGkpLl92YWx1ZSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWU6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOlskdChbaEllXSksdHRdfSksbn0pKCksUCQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSl9X3NldEVsZW1lbnRWYWx1ZShlKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixlKX1fc2V0U2VsZWN0ZWQoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoSSQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpO2Z1bmN0aW9uIFIkKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIE8kKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlRmxvYXQobil9dmFyIGhtPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9WUF9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gZSl7bGV0IGk9dGhpcy5ub3JtYWxpemVJbnB1dChlW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKGkpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGkpOllBLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGUpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1lbmFibGVkKGUpe3JldHVybiBudWxsIT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCksbUllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5nSWUpLG11bHRpOiEwfSxnSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4Iix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9Pk8kKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PiRKKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbJHQoW21JZV0pLHR0XX0pLG59KSgpLF9JZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+dkllKSxtdWx0aTohMH0sdkllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5PJChlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5KSihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgibWluIixpLl9lbmFibGVkP2kubWluOm51bGwpfSxpbnB1dHM6e21pbjoibWluIn0sZmVhdHVyZXM6WyR0KFtfSWVdKSx0dF19KSxufSkoKSx5SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9PmskKSxtdWx0aTohMH0sYkllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT55NSksbXVsdGk6ITB9LGskPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PWUxLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PmUkfWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOlskdChbeUllXSksdHRdfSksbn0pKCkseTU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGske2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT50JH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOlskdChbYkllXSksdHRdfSksbn0pKCkseEllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5DSWUpLG11bHRpOiEwfSxDSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0iZW1haWwiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZTEsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+biR9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwiZW1haWwiLCIiLCJuZ01vZGVsIiwiIl1dLGlucHV0czp7ZW1haWw6ImVtYWlsIn0sZmVhdHVyZXM6WyR0KFt4SWVdKSx0dF19KSxufSkoKSx3SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9Pk1JZSksbXVsdGk6ITB9LE1JZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW5sZW5ndGgiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+UiQoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+aSQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoIm1pbmxlbmd0aCIsaS5fZW5hYmxlZD9pLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOlskdChbd0llXSksdHRdfSksbn0pKCksU0llPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5FSWUpLG11bHRpOiEwfSxFSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4bGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PlIkKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PnIkKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbJHQoW1NJZV0pLHR0XX0pLG59KSgpLFRJZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+REllKSxtdWx0aTohMH0sREllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5vJChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicGF0dGVybiIsaS5fZW5hYmxlZD9pLnBhdHRlcm46bnVsbCl9LGlucHV0czp7cGF0dGVybjoicGF0dGVybiJ9LGZlYXR1cmVzOlskdChbVEllXSksdHRdfSksbn0pKCksRiQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3ckXX0pLG59KSgpLHJJPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltGJF19KSxufSkoKSxOJD0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6XzUsdXNlVmFsdWU6ZS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbRiRdfSksbn0pKCksQUllPShuZXcgS2woIjE0LjIuMTEiKSxbInRyaWdnZXIiXSksSUllPVsicGFuZWwiXTtmdW5jdGlvbiBQSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHl0KGUucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBSSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkseXQoZS50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBPSWUobix0KXsxJm4mJk5uKDAsMCxbIipuZ1N3aXRjaENhc2UiLCJ0cnVlIl0pfWZ1bmN0aW9uIGtJZShuLHQpezEmbiYmKGcoMCwic3BhbiIsOSksRSgxLFJJZSwyLDEsInNwYW4iLDEwKSxFKDIsT0llLDEsMCwibmctY29udGVudCIsMTEpLHYoKSksMiZuJiYoYigibmdTd2l0Y2giLCEhTSgpLmN1c3RvbVRyaWdnZXIpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMCkpfWZ1bmN0aW9uIEZJZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTMpKDEsImRpdiIsMTQsMTUpLFAoIkB0cmFuc2Zvcm1QYW5lbC5kb25lIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dChyLnRvU3RhdGUpKX0pKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pLE5uKDMsMSksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQHRyYW5zZm9ybVBhbmVsV3JhcCIsdm9pZCAwKSx4KDEpLFJiKCJtYXQtc2VsZWN0LXBhbmVsICIsZS5fZ2V0UGFuZWxUaGVtZSgpLCIiKSxPdCgidHJhbnNmb3JtLW9yaWdpbiIsZS5fdHJhbnNmb3JtT3JpZ2luKSgiZm9udC1zaXplIixlLl90cmlnZ2VyRm9udFNpemUsInB4IiksYigibmdDbGFzcyIsZS5wYW5lbENsYXNzKSgiQHRyYW5zZm9ybVBhbmVsIixlLm11bHRpcGxlPyJzaG93aW5nLW11bHRpcGxlIjoic2hvd2luZyIpLHplKCJpZCIsZS5pZCsiLXBhbmVsIikoImFyaWEtbXVsdGlzZWxlY3RhYmxlIixlLm11bHRpcGxlKSgiYXJpYS1sYWJlbCIsZS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGUuX2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoKSl9fXZhciBOSWU9W1tbIm1hdC1zZWxlY3QtdHJpZ2dlciJdXSwiKiJdLExJZT1bIm1hdC1zZWxlY3QtdHJpZ2dlciIsIioiXSxMJD17dHJhbnNmb3JtUGFuZWxXcmFwOkhyKCJ0cmFuc2Zvcm1QYW5lbFdyYXAiLFtJaSgiKiA9PiB2b2lkIixGZigiQHRyYW5zZm9ybVBhbmVsIixba2YoKV0se29wdGlvbmFsOiEwfSkpXSksdHJhbnNmb3JtUGFuZWw6SHIoInRyYW5zZm9ybVBhbmVsIixbRWkoInZvaWQiLHJuKHt0cmFuc2Zvcm06InNjYWxlWSgwLjgpIixtaW5XaWR0aDoiMTAwJSIsb3BhY2l0eTowfSkpLEVpKCJzaG93aW5nIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyAzMnB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLEVpKCJzaG93aW5nLW11bHRpcGxlIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyA2NHB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLElpKCJ2b2lkID0+ICoiLFZpKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LEIkPTAsSCQ9bmV3IHNlKCJtYXQtc2VsZWN0LXNjcm9sbC1zdHJhdGVneSIpLFVJZT1uZXcgc2UoIk1BVF9TRUxFQ1RfQ09ORklHIiksekllPXtwcm92aWRlOkgkLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sakllPUxzKHFwKGdvKFJBKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBUZX19KSkpKSxHSWU9bmV3IHNlKCJNYXRTZWxlY3RUcmlnZ2VyIiksV0llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqSWV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtzdXBlcihzLG8sbCxjLGQpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD11LHRoaXMuX2xpdmVBbm5vdW5jZXI9Zix0aGlzLl9kZWZhdWx0T3B0aW9ucz1tLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oQyxfKT0+Qz09PV8sdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrQiQrKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBUZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrQiQrKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IFRlLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9YmEoKCk9PntsZXQgQz10aGlzLm9wdGlvbnM7cmV0dXJuIEM/Qy5jaGFuZ2VzLnBpcGUoVm4oQyksdmkoKCk9PnVuKC4uLkMubWFwKF89Pl8ub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpLHZpKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBHLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKEhlKEM9PkMpLEIoKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoSGUoQz0+IUMpLEIoKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9bT8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9bS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9aCx0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoU2MucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9V3QoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPVd0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1QaShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgRl8odGhpcy5tdWx0aXBsZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5waXBlKGRpKCksb3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+dGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nKHRoaXMucGFuZWxPcGVuKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faW5pdEtleU1hbmFnZXIoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShlPT57ZS5hZGRlZC5mb3JFYWNoKGk9Pmkuc2VsZWN0KCkpLGUucmVtb3ZlZC5mb3JFYWNoKGk9PmkuZGVzZWxlY3QoKSl9KSx0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKFZuKG51bGwpLG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9yZXNldE9wdGlvbnMoKSx0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9KX1uZ0RvQ2hlY2soKXtsZXQgZT10aGlzLl9nZXRUcmlnZ2VyQXJpYUxhYmVsbGVkYnkoKSxpPXRoaXMubmdDb250cm9sO2lmKGUhPT10aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9ZSxlP3Iuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpOnIucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiKX1pJiYodGhpcy5fcHJldmlvdXNDb250cm9sIT09aS5jb250cm9sJiYodm9pZCAwIT09dGhpcy5fcHJldmlvdXNDb250cm9sJiZudWxsIT09aS5kaXNhYmxlZCYmaS5kaXNhYmxlZCE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLmRpc2FibGVkPWkuZGlzYWJsZWQpLHRoaXMuX3ByZXZpb3VzQ29udHJvbD1pLmNvbnRyb2wpLHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpKX1uZ09uQ2hhbmdlcyhlKXsoZS5kaXNhYmxlZHx8ZS51c2VyQXJpYURlc2NyaWJlZEJ5KSYmdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLGUudHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWkscz10aGlzLl9rZXlNYW5hZ2VyO2lmKCFzLmlzVHlwaW5nKCkmJm8mJiFNcihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IGE9dGhpcy5zZWxlY3RlZDtzLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJmEhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIscz1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKHN8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHxNcihlKSlpZighcyYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGE9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KGE/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgYT1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PWEmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goaT0+aS5zZXRJbmFjdGl2ZVN0eWxlcygpKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMubXVsdGlwbGUmJmUpQXJyYXkuaXNBcnJheShlKSxlLmZvckVhY2goaT0+dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShpKSksdGhpcy5fc29ydFZhbHVlcygpO2Vsc2V7bGV0IGk9dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKTtpP3RoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShpKTp0aGlzLnBhbmVsT3Blbnx8dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKC0xKX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKXtsZXQgaT10aGlzLm9wdGlvbnMuZmluZChyPT57aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG51bGwhPXIudmFsdWUmJnRoaXMuX2NvbXBhcmVXaXRoKHIudmFsdWUsZSl9Y2F0Y2h7cmV0dXJuITF9fSk7cmV0dXJuIGkmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSxpfV9hc3NpZ25WYWx1ZShlKXtyZXR1cm4hIShlIT09dGhpcy5fdmFsdWV8fHRoaXMuX211bHRpcGxlJiZBcnJheS5pc0FycmF5KGUpKSYmKHRoaXMub3B0aW9ucyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKSx0aGlzLl92YWx1ZT1lLCEwKX1faW5pdEtleU1hbmFnZXIoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBEXyh0aGlzLm9wdGlvbnMpLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLndpdGhIb21lQW5kRW5kKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPXVuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKG90KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLHVuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShvdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9X29uU2VsZWN0KGUsaSl7bGV0IHI9dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKTtudWxsIT1lLnZhbHVlfHx0aGlzLl9tdWx0aXBsZT8ociE9PWUuc2VsZWN0ZWQmJihlLnNlbGVjdGVkP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKSksaSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpLHRoaXMubXVsdGlwbGUmJih0aGlzLl9zb3J0VmFsdWVzKCksaSYmdGhpcy5mb2N1cygpKSk6KGUuZGVzZWxlY3QoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLG51bGwhPXRoaXMudmFsdWUmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoZS52YWx1ZSkpLHIhPT10aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zb3J0VmFsdWVzKCl7aWYodGhpcy5tdWx0aXBsZSl7bGV0IGU9dGhpcy5vcHRpb25zLnRvQXJyYXkoKTt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zb3J0KChpLHIpPT50aGlzLnNvcnRDb21wYXJhdG9yP3RoaXMuc29ydENvbXBhcmF0b3IoaSxyLGUpOmUuaW5kZXhPZihpKS1lLmluZGV4T2YocikpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX19X3Byb3BhZ2F0ZUNoYW5nZXMoZSl7bGV0IGk9bnVsbDtpPXRoaXMubXVsdGlwbGU/dGhpcy5zZWxlY3RlZC5tYXAocj0+ci52YWx1ZSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOmUsdGhpcy5fdmFsdWU9aSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaSksdGhpcy5fb25DaGFuZ2UoaSksdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLl9nZXRDaGFuZ2VFdmVudChpKSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKXt0aGlzLl9rZXlNYW5hZ2VyJiYodGhpcy5lbXB0eT90aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSkpfV9jYW5PcGVuKCl7cmV0dXJuIXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMuZGlzYWJsZWQmJnRoaXMub3B0aW9ucz8ubGVuZ3RoPjB9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCk7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnk/KGU/ZSsiICI6IiIpK3RoaXMuYXJpYUxhYmVsbGVkYnk6ZX1fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKXtyZXR1cm4gdGhpcy5wYW5lbE9wZW4mJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbT90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaWQ6bnVsbH1fZ2V0VHJpZ2dlckFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCksaT0oZT9lKyIgIjoiIikrdGhpcy5fdmFsdWVJZDtyZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRieSYmKGkrPSIgIit0aGlzLmFyaWFMYWJlbGxlZGJ5KSxpfV9wYW5lbERvbmVBbmltYXRpbmcoZSl7dGhpcy5vcGVuZWRDaGFuZ2UuZW1pdChlKX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzKCksdGhpcy5vcGVuKCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fcGFuZWxPcGVufHwhdGhpcy5lbXB0eXx8dGhpcy5fZm9jdXNlZCYmISF0aGlzLl9wbGFjZWhvbGRlcn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhkYSksdyhubiksdyhwdCksdyhSXyksdyhBZSksdyhpciw4KSx3KEdfLDgpLHcoV18sOCksdyh1bSw4KSx3KHBhLDEwKSxLbygidGFiaW5kZXgiKSx3KEgkKSx3KFVDKSx3KFVJZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQUllLDUpLGx0KElJZSw1KSxsdChRcCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50cmlnZ2VyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9vdmVybGF5RGlyPXIuZmlyc3QpfX0saW5wdXRzOnt1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxwYW5lbENsYXNzOiJwYW5lbENsYXNzIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw6InR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLHNvcnRDb21wYXJhdG9yOiJzb3J0Q29tcGFyYXRvciIsaWQ6ImlkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLEpwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX3RyaWdnZXJGb250U2l6ZT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0idG9wIix0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25zPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9XX1fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChlLGkscil7bGV0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qZS1pK28vMikscil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZShvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJih0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1vcGVuKCl7c3VwZXIuX2Nhbk9wZW4oKSYmKHN1cGVyLm9wZW4oKSx0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl90cmlnZ2VyRm9udFNpemU9cGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCkuZm9udFNpemV8fCIwIiksdGhpcy5fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQmJih0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSl9X3Njcm9sbE9wdGlvbkludG9WaWV3KGUpe2xldCBpPVdDKGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxyPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPTA9PT1lJiYxPT09aT8wOmtBKChlK2kpKnIscix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLDI1Nil9X3Bvc2l0aW9uaW5nU2V0dGxlZCgpe3RoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCksdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10aGlzLl9zY3JvbGxUb3B9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLnBhbmVsT3Blbj90aGlzLl9zY3JvbGxUb3A9MDoodGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPTAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHN1cGVyLl9wYW5lbERvbmVBbmltYXRpbmcoZSl9X2dldENoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsZSl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7bGV0IHMsZT10aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5faXNSdGwoKSxvPXRoaXMubXVsdGlwbGU/NTY6MzI7aWYodGhpcy5tdWx0aXBsZSlzPTQwO2Vsc2UgaWYodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKXM9MTY7ZWxzZXtsZXQgYz10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXXx8dGhpcy5vcHRpb25zLmZpcnN0O3M9YyYmYy5ncm91cD8zMjoxNn1yfHwocyo9LTEpO2xldCBhPTAtKGUubGVmdCtzLShyP286MCkpLGw9ZS5yaWdodCtzLWkud2lkdGgrKHI/MDpvKTthPjA/cys9YSs4Omw+MCYmKHMtPWwrOCksdGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQocyksdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGUsaSxyKXtsZXQgbCxvPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxzPShvLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMixhPU1hdGguZmxvb3IoMjU2L28pO3JldHVybiB0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmc/MDoobD0wPT09dGhpcy5fc2Nyb2xsVG9wP2Uqbzp0aGlzLl9zY3JvbGxUb3A9PT1yPyhlLSh0aGlzLl9nZXRJdGVtQ291bnQoKS1hKSkqbysoby0odGhpcy5fZ2V0SXRlbUNvdW50KCkqby0yNTYpJW8pOmktby8yLE1hdGgucm91bmQoLTEqbC1zKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KGUpe2xldCBpPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxyPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbz10aGlzLl90cmlnZ2VyUmVjdC50b3AtOCxzPXIuaGVpZ2h0LXRoaXMuX3RyaWdnZXJSZWN0LmJvdHRvbS04LGE9TWF0aC5hYnModGhpcy5fb2Zmc2V0WSksYz1NYXRoLm1pbih0aGlzLl9nZXRJdGVtQ291bnQoKSppLDI1NiktYS10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQ7Yz5zP3RoaXMuX2FkanVzdFBhbmVsVXAoYyxzKTphPm8/dGhpcy5fYWRqdXN0UGFuZWxEb3duKGEsbyxlKTp0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpfV9hZGp1c3RQYW5lbFVwKGUsaSl7bGV0IHI9TWF0aC5yb3VuZChlLWkpO3RoaXMuX3Njcm9sbFRvcC09cix0aGlzLl9vZmZzZXRZLT1yLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKGUsaSxyKXtsZXQgbz1NYXRoLnJvdW5kKGUtaSk7aWYodGhpcy5fc2Nyb2xsVG9wKz1vLHRoaXMuX29mZnNldFkrPW8sdGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKSx0aGlzLl9zY3JvbGxUb3A+PXIpcmV0dXJuIHRoaXMuX3Njcm9sbFRvcD1yLHRoaXMuX29mZnNldFk9MCx2b2lkKHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIHRvcCAwcHgiKX1fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCl7bGV0IGEsZT10aGlzLl9nZXRJdGVtSGVpZ2h0KCksaT10aGlzLl9nZXRJdGVtQ291bnQoKSxyPU1hdGgubWluKGkqZSwyNTYpLHM9aSplLXI7YT10aGlzLmVtcHR5PzA6TWF0aC5tYXgodGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSwwKSxhKz1XQyhhLHRoaXMub3B0aW9ucyx0aGlzLm9wdGlvbkdyb3Vwcyk7bGV0IGw9ci8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGEsbCxzKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGEsbCxzKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChzKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2xldCBlPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxpPShlLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMjtyZXR1cm5gNTAlICR7TWF0aC5hYnModGhpcy5fb2Zmc2V0WSktaStlLzJ9cHggMHB4YH1fZ2V0SXRlbUhlaWdodCgpe3JldHVybiAzKnRoaXMuX3RyaWdnZXJGb250U2l6ZX1fZ2V0SXRlbUNvdW50KCl7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGgrdGhpcy5vcHRpb25Hcm91cHMubGVuZ3RofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixHSWUsNSksTmkocix1YSw1KSxOaShyLEdDLDUpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksTmUobz1MZSgpKSYmKGkub3B0aW9ucz1vKSxOZShvPUxlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwibWF0LXNlbGVjdCJdLGhvc3RWYXJzOjE5LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJsdXIoKX0pLDImZSYmKHplKCJpZCIsaS5pZCkoInRhYmluZGV4IixpLnRhYkluZGV4KSgiYXJpYS1jb250cm9scyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5wYW5lbE9wZW4pKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQudG9TdHJpbmcoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLl9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpKSxhdCgibWF0LXNlbGVjdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LXNlbGVjdC1yZXF1aXJlZCIsaS5yZXF1aXJlZCkoIm1hdC1zZWxlY3QtZW1wdHkiLGkuZW1wdHkpKCJtYXQtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VV8sdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOkxJZSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih3aShOSWUpLGcoMCwiZGl2IiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksZygzLCJkaXYiLDIpLEUoNCxQSWUsMiwxLCJzcGFuIiwzKSxFKDUsa0llLDMsMiwic3BhbiIsNCksdigpLGcoNiwiZGl2Iiw1KSxOKDcsImRpdiIsNiksdigpKCksRSg4LEZJZSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksUCgiYmFja2Ryb3BDbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkoImF0dGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25BdHRhY2hlZCgpfSkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkpLDImZSl7bGV0IHI9c3QoMSk7emUoImFyaWEtb3ducyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSx4KDMpLGIoIm5nU3dpdGNoIixpLmVtcHR5KSx6ZSgiaWQiLGkuX3ZhbHVlSWQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwhMCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCExKSx4KDMpLGIoImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIixpLl9vdmVybGF5UGFuZWxDbGFzcykoImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsaS5fc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixyKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkucGFuZWxPcGVuKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS5fcG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIixudWxsPT1pLl90cmlnZ2VyUmVjdD9udWxsOmkuX3RyaWdnZXJSZWN0LndpZHRoKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLGkuX29mZnNldFkpfX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxRcCxzbV0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtc2VsZWN0LXZhbHVle3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo1cHggc29saWQ7bWFyZ2luOjAgNHB4fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmlzaWJpbGl0eTpoaWRkZW59J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbTCQudHJhbnNmb3JtUGFuZWxXcmFwLEwkLnRyYW5zZm9ybVBhbmVsXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJbD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6SWVdLGltcG9ydHM6W2tlLFZvLE9fLGRuLFN1LGRtLE9fLGRuXX0pLG59KSgpO2Z1bmN0aW9uIHFJZShuLHQpezEmbiYmKEt0KDApLGcoMSwiZGl2IiwxKSxEKDIsIiBUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBEZWZhdWx0IC0gKEVuYWJsZWQvRGlzYWJsZWQpIGFuZCAoRW5hYmxlZC9EaXNhYmxlZCkgIiksdigpLGcoMywiZGl2IiwxKSxEKDQsIiBPbmx5IGZsYWdzIHdpdGggbm9uIGRlZmF1bHQgdmFsdWVzIGFyZSBzZW50IHRvIHRoZSBiYWNrZW5kLiAiKSx2KCksWnQoKSl9ZnVuY3Rpb24gWUllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJkaXYiLDEpLEQoMiksdigpLFp0KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoJyBGZWF0dXJlIEZsYWdzIGFyZSBmaWx0ZXJlZCB0byBvbmx5IHNob3cgZmVhdHVyZXMgY29udGFpbmluZyAiJyxlLnNob3dGbGFnc0ZpbHRlciwnIiAnKX19ZnVuY3Rpb24gWEllKG4sdCl7MSZuJiYoZygwLCJzdXAiLDExKSxEKDEsIjEiKSx2KCkpfWZ1bmN0aW9uIFFJZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24gS0llKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNlbGVjdCIsMTIpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLmZsYWdDaGFuZ2VkLmVtaXQoe2ZsYWc6by5mbGFnLHN0YXR1czpyLnZhbHVlfSkpfSksZygxLCJtYXQtb3B0aW9uIiwxMyksRCgyKSx2KCksZygzLCJtYXQtb3B0aW9uIiwxNCksRCg0LCJFbmFibGVkIiksdigpLGcoNSwibWF0LW9wdGlvbiIsMTUpLEQoNiwiRGlzYWJsZWQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7YigidmFsdWUiLGUuc3RhdHVzKSx4KDIpLHFlKCIgRGVmYXVsdCAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUuZGVmYXVsdFZhbHVlKSwiICIpfX1mdW5jdGlvbiBaSWUobix0KXtpZigxJm4mJihnKDAsInRkIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLHFlKCJVbnN1cHBvcnRlZCBCeSBVSSAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUudmFsdWUpLCIiKX19ZnVuY3Rpb24gSkllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIpKDIsInRkIikoMywiZGl2IiksRCg0KSxFKDUsWEllLDIsMCwic3VwIiw3KSx2KCkoKSxFKDYsUUllLDEsMCwibmctY29udGFpbmVyIiw4KSxFKDcsS0llLDcsMiwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksRSg5LFpJZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSx2KCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXN0KDgpLHI9c3QoMTApLG89TSgpO3goNCkscWUoIiAiLGUuZmxhZywiICIpLHgoMSksYigibmdJZiIsZS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikseCgxKSxiKCJuZ0lmIixvLmlzRWRpdGFibGUoZSkpKCJuZ0lmVGhlbiIsaSkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gJEllKG4sdCl7MSZuJiYoZygwLCJkaXYiLDExKSxEKDEsIiAxLiBTZW50IHRvIHNlcnZlciB3aGVuIG92ZXJyaWRkZW4gIiksdigpKX12YXIgbEksVSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXI9ITEsdGhpcy5mbGFnQ2hhbmdlZD1uZXcgRyx0aGlzLmFsbEZsYWdzUmVzZXQ9bmV3IEd9c2VyaWFsaXplRmxhZ1ZhbHVlKGUpe3JldHVybiEwPT09ZT8iRW5hYmxlZCI6ITE9PT1lPyJEaXNhYmxlZCI6bnVsbD09ZT8ibnVsbCI6QXJyYXkuaXNBcnJheShlKT9KU09OLnN0cmluZ2lmeShlKTplLnRvU3RyaW5nKCl9aXNFZGl0YWJsZShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmRlZmF1bHRWYWx1ZX1mb3JtYXRGbGFnVmFsdWUoZSl7bGV0IGk9dGhpcy5zZXJpYWxpemVGbGFnVmFsdWUoZSk7cmV0dXJuIDA9PT1pLmxlbmd0aD8iIjpgLSAke2l9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntmZWF0dXJlRmxhZ1N0YXR1c2VzOiJmZWF0dXJlRmxhZ1N0YXR1c2VzIixoYXNGbGFnc1NlbnRUb1NlcnZlcjoiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLHNob3dGbGFnc0ZpbHRlcjoic2hvd0ZsYWdzRmlsdGVyIn0sb3V0cHV0czp7ZmxhZ0NoYW5nZWQ6ImZsYWdDaGFuZ2VkIixhbGxGbGFnc1Jlc2V0OiJhbGxGbGFnc1Jlc2V0In0sZGVjbHM6MTIsdmFyczo0LGNvbnN0czpbWzEsInNjcm9sbGluZy1wYWdlIl0sWzEsIm1lc3NhZ2UiXSxbMSwid2FybmluZyJdLFs0LCJuZ0lmIl0sWzEsImZlYXR1cmUtZmxhZy10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl0sWyJjbGFzcyIsIm5vdGUtMSIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdLFsic2VsZWN0QmxvY2siLCIiXSxbInVuc3VwcG9ydGVkQmxvY2siLCIiXSxbMSwibm90ZS0xIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWyJ2YWx1ZSIsImRlZmF1bHQiXSxbInZhbHVlIiwiZW5hYmxlZCJdLFsidmFsdWUiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgyIiwyKSxEKDMsIldBUk5JTkc6IEVYUEVSSU1FTlRBTCBGRUFUVVJFUyBBSEVBRCEiKSx2KCksRCg0LCIgQnkgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIHlvdSBjb3VsZCBwdXQgdGhlIGFwcGxpY2F0aW9uIGluIGFuIHVudXNhYmxlIHN0YXRlIG9yIGV4cG9zZSB5b3Vyc2VsZiB0byB1bnRlc3RlZCBmZWF0dXJlcyBvciBwb3RlbnRpYWwgYnVncy4gIiksdigpLEUoNSxxSWUsNSwwLCJuZy1jb250YWluZXIiLDMpLEUoNixZSWUsMywxLCJuZy1jb250YWluZXIiLDMpLGcoNywidGFibGUiLDQpLEUoOCxKSWUsMTEsNSwibmctY29udGFpbmVyIiw1KSx2KCksZyg5LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmFsbEZsYWdzUmVzZXQuZW1pdCgpfSksRCgxMCwiUmVzZXQgQWxsIiksdigpLEUoMTEsJEllLDIsMCwiZGl2Iiw3KSx2KCkpLDImZSYmKHgoNSksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikseCgxKSxiKCJuZ0lmIixpLnNob3dGbGFnc0ZpbHRlcikseCgyKSxiKCJuZ0Zvck9mIixpLmZlYXR1cmVGbGFnU3RhdHVzZXMpLHgoMyksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikpfSxkZXBlbmRlbmNpZXM6W3luLFhlLCRuLEpwLHVhXSxzdHlsZXM6WyIubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxNnB4fS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjQ0MzM2fS5ub3RlLTFbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZjk4MDB9LnNjcm9sbGluZy1wYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0Ojkwdmh9LmZlYXR1cmUtZmxhZy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0iXX0pLG59KSgpLHokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0ZsYWdzRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChnQykucGlwZShCKGk9Pmkuc2hvd0ZsYWdzPy50b0xvd2VyQ2FzZSgpKSksdGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlciQ9dGhpcy5zdG9yZS5zZWxlY3QoV2YpLnBpcGUoQihpPT5PYmplY3QudmFsdWVzKGkpLnNvbWUocj0+ci5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikpKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ0MpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QodEspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSx0aGlzLnNob3dGbGFnc0ZpbHRlciQpLEIoKFtpLHIsbyxzXSk9Pk9iamVjdC5lbnRyaWVzKHIpLmZpbHRlcigoW2FdKT0+IXN8fGEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzKSkubWFwKChbYSxsXSk9PntsZXQgYz1mdW5jdGlvbihuLHQpe3JldHVybiB2b2lkIDA9PT10W25dPyJkZWZhdWx0Ijp0W25dPyJlbmFibGVkIjoiZGlzYWJsZWQifShhLGkpO3JldHVybntmbGFnOmEsZGVmYXVsdFZhbHVlOmwsc3RhdHVzOmMsc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW46b1thXS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbn19KSkpfW9uRmxhZ0NoYW5nZWQoe2ZsYWc6ZSxzdGF0dXM6aX0pe3N3aXRjaChpKXtjYXNlImRlZmF1bHQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goRnAoe2ZsYWdzOltlXX0pKTticmVhaztjYXNlImVuYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITB9fSkpO2JyZWFrO2Nhc2UiZGlzYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITF9fSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGbGFnIGNoYW5nZWQgdG8gaW52YWxpZCBzdGF0dXMiKX19b25BbGxGbGFnc1Jlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1XygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1kaWFsb2ciXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZmVhdHVyZUZsYWdTdGF0dXNlcyIsImhhc0ZsYWdzU2VudFRvU2VydmVyIiwic2hvd0ZsYWdzRmlsdGVyIiwiZmxhZ0NoYW5nZWQiLCJhbGxGbGFnc1Jlc2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJmZWF0dXJlLWZsYWctZGlhbG9nLWNvbXBvbmVudCIsMCksUCgiZmxhZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmxhZ0NoYW5nZWQobyl9KSgiYWxsRmxhZ3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFsbEZsYWdzUmVzZXQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJmZWF0dXJlRmxhZ1N0YXR1c2VzIixXKDEsMyxpLmZlYXR1cmVGbGFncyQpKSgiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLFcoMiw1LGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIkKSkoInNob3dGbGFnc0ZpbHRlciIsVygzLDcsaS5zaG93RmxhZ3NGaWx0ZXIkKSl9LGRlcGVuZGVuY2llczpbVSQsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kaWFsb2c9aSx0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZT16JCx0aGlzLnNob3dGZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KGxLKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfW5nT25Jbml0KCl7dGhpcy5zaG93RmVhdHVyZUZsYWdzJC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57aWYoZSlyZXR1cm4gdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2c9dGhpcy5kaWFsb2cub3Blbih0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZSksdm9pZCB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZy5hZnRlckNsb3NlZCgpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChGcCh7ZmxhZ3M6WyJzaG93RmxhZ3MiXX0pKSxzZXRUaW1lb3V0KCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwxKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLW1vZGFsLXRyaWdnZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJQZT1bInJvdXRlQ29udGFpbmVyIl0sRyQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lfW5nT25DaGFuZ2VzKGUpe2xldCBpPWUuYWN0aXZlTmdDb21wb25lbnQ7aWYoaSYmKHRoaXMucm91dGVDb250YWluZXIuY2xlYXIoKSxpLmN1cnJlbnRWYWx1ZSkpe2xldCByPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGkuY3VycmVudFZhbHVlKTt0aGlzLnJvdXRlQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChyKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJQZSw3LHlpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnJvdXRlQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVOZ0NvbXBvbmVudDoiYWN0aXZlTmdDb21wb25lbnQifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3V0ZUNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmQWkoMCxudWxsLDApfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMucmVnaXN0cnk9aSx0aGlzLmFjdGl2ZU5nQ29tcG9uZW50JD1wbihbdGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KFJRKV0pLnBpcGUoQigoW3Isb10pPT5yJiYobnVsbD09PW98fHVzKHIsbykpP3RoaXMucmVnaXN0cnkuZ2V0TmdDb21wb25lbnRCeVJvdXRlS2luZChyLnJvdXRlS2luZCk6bnVsbCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KGhjKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVOZ0NvbXBvbmVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicm91dGVyLW91dGxldC1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZiKCJhY3RpdmVOZ0NvbXBvbmVudCIsVygxLDEsaS5hY3RpdmVOZ0NvbXBvbmVudCQpKX0sZGVwZW5kZW5jaWVzOltHJCxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLnNlbGVjdChtdSkuc3Vic2NyaWJlKGk9Pntkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsaSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhcmstbW9kZS1zdXBwb3J0ZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWV89KCgpPT4oZnVuY3Rpb24obil7bltuLkFDVElWRV9QTFVHSU49MF09IkFDVElWRV9QTFVHSU4ifShZX3x8KFlfPXt9KSksWV8pKSgpLFkkPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kZWVwTGlua2VyPWUsdGhpcy5vblZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGUsdGhpcy5vbkhhc2hDaGFuZ2U9bGkod2luZG93LCJwb3BzdGF0ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpfW5nT25Jbml0KCl7dGhpcy5vbkhhc2hDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5kZWVwTGlua2VyLmdldFBsdWdpbklkKCk7ZSE9PXRoaXMuYWN0aXZlUGx1Z2luSWQmJnRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtwcm9wOllfLkFDVElWRV9QTFVHSU4sdmFsdWU6ZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUuYWN0aXZlUGx1Z2luSWQpe2xldCBpPWUuYWN0aXZlUGx1Z2luSWQ7dGhpcy5kZWVwTGlua2VyLnNldFBsdWdpbklkKG51bGw9PT1pLmN1cnJlbnRWYWx1ZT8iIjppLmN1cnJlbnRWYWx1ZSx7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2F0aW9uUmVwbGFjZTpudWxsPT09aS5wcmV2aW91c1ZhbHVlfHxpLmZpcnN0Q2hhbmdlfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFwKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCJ9LG91dHB1dHM6e29uVmFsdWVDaGFuZ2U6Im9uVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbenRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKX1vblZhbHVlQ2hhbmdlZChlKXtlLnByb3A9PT1ZXy5BQ1RJVkVfUExVR0lOJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKGREKHtwbHVnaW46ZS52YWx1ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5JZCIsIm9uVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhhc2gtc3RvcmFnZS1jb21wb25lbnQiLDApLFAoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5JZCIsVygxLDEsaS5hY3RpdmVQbHVnaW5JZCQpKX0sZGVwZW5kZW5jaWVzOltZJCxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1UGU9WyIqIl07ZnVuY3Rpb24gcncobil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09bEkmJihsST1udWxsLHR5cGVvZiB3aW5kb3c8InUiKSl7bGV0IG49d2luZG93O3ZvaWQgMCE9PW4udHJ1c3RlZFR5cGVzJiYobEk9bi50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2NvbXBvbmVudHMiLHtjcmVhdGVIVE1MOnQ9PnR9KSl9cmV0dXJuIGxJfSgpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIFEkKG4pe3JldHVybiBFcnJvcihgVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICIke259ImApfWZ1bmN0aW9uIEskKG4pe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHtufSIuYCl9ZnVuY3Rpb24gWiQobil7cmV0dXJuIEVycm9yKGBUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgIiR7bn0iLmApfXZhciBTZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy51cmw9dCx0aGlzLnN2Z1RleHQ9ZSx0aGlzLm9wdGlvbnM9aX19LFhfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5faHR0cENsaWVudD1lLHRoaXMuX3Nhbml0aXplcj1pLHRoaXMuX2Vycm9ySGFuZGxlcj1vLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1bIm1hdGVyaWFsLWljb25zIiwibWF0LWxpZ2F0dXJlLWZvbnQiXSx0aGlzLl9kb2N1bWVudD1yfWFkZFN2Z0ljb24oZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIixlLGkscil9YWRkU3ZnSWNvbkxpdGVyYWwoZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25Jbk5hbWVzcGFjZShlLGkscixvKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IFNkKHIsbnVsbCxvKSl9YWRkU3ZnSWNvblJlc29sdmVyKGUpe3JldHVybiB0aGlzLl9yZXNvbHZlcnMucHVzaChlKSx0aGlzfWFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIsbyl7bGV0IHM9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKEpyLkhUTUwscik7aWYoIXMpdGhyb3cgWiQocik7bGV0IGE9cncocyk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBTZCgiIixhLG8pKX1hZGRTdmdJY29uU2V0KGUsaSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldExpdGVyYWwoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKGUsaSxyKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyhlLG5ldyBTZChpLG51bGwscikpfWFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIpe2xldCBvPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5IVE1MLGkpO2lmKCFvKXRocm93IFokKGkpO2xldCBzPXJ3KG8pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IFNkKCIiLHMscikpfXJlZ2lzdGVyRm9udENsYXNzQWxpYXMoZSxpPWUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KGUsaSksdGhpc31jbGFzc05hbWVGb3JGb250QWxpYXMoZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQoZSl8fGV9c2V0RGVmYXVsdEZvbnRTZXRDbGFzcyguLi5lKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1lLHRoaXN9Z2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfWdldFN2Z0ljb25Gcm9tVXJsKGUpe2xldCBpPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsZSk7aWYoIWkpdGhyb3cgSyQoZSk7bGV0IHI9dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5nZXQoaSk7cmV0dXJuIHI/anQoY0kocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgU2QoZSxudWxsKSkucGlwZShOdChvPT50aGlzLl9jYWNoZWRJY29uc0J5VXJsLnNldChpLG8pKSxCKG89PmNJKG8pKSl9Z2V0TmFtZWRTdmdJY29uKGUsaT0iIil7bGV0IHI9SiQoaSxlKSxvPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChyKTtpZihvKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2lmKG89dGhpcy5fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoaSxlKSxvKXJldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQocixvKSx0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2xldCBzPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChpKTtyZXR1cm4gcz90aGlzLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxzKTpHbChRJChyKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fc3ZnSWNvbkNvbmZpZ3MuY2xlYXIoKSx0aGlzLl9pY29uU2V0Q29uZmlncy5jbGVhcigpLHRoaXMuX2NhY2hlZEljb25zQnlVcmwuY2xlYXIoKX1fZ2V0U3ZnRnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P2p0KGNJKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpLnBpcGUoQihpPT5jSShpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO3JldHVybiByP2p0KHIpOnhvKGkuZmlsdGVyKHM9PiFzLnN2Z1RleHQpLm1hcChzPT50aGlzLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcocykucGlwZShDbyhhPT57bGV0IGM9YExvYWRpbmcgaWNvbiBzZXQgVVJMOiAke3RoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwscy51cmwpfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWA7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYykpLGp0KG51bGwpfSkpKSkucGlwZShCKCgpPT57bGV0IHM9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtpZighcyl0aHJvdyBRJChlKTtyZXR1cm4gc30pKX1fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKXtmb3IobGV0IHI9aS5sZW5ndGgtMTtyPj0wO3ItLSl7bGV0IG89aVtyXTtpZihvLnN2Z1RleHQmJm8uc3ZnVGV4dC50b1N0cmluZygpLmluZGV4T2YoZSk+LTEpe2xldCBzPXRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKG8pLGE9dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KHMsZSxvLm9wdGlvbnMpO2lmKGEpcmV0dXJuIGF9fXJldHVybiBudWxsfV9sb2FkU3ZnSWNvbkZyb21Db25maWcoZSl7cmV0dXJuIHRoaXMuX2ZldGNoSWNvbihlKS5waXBlKE50KGk9PmUuc3ZnVGV4dD1pKSxCKCgpPT50aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKSkpfV9sb2FkU3ZnSWNvblNldEZyb21Db25maWcoZSl7cmV0dXJuIGUuc3ZnVGV4dD9qdChudWxsKTp0aGlzLl9mZXRjaEljb24oZSkucGlwZShOdChpPT5lLnN2Z1RleHQ9aSkpfV9leHRyYWN0U3ZnSWNvbkZyb21TZXQoZSxpLHIpe2xldCBvPWUucXVlcnlTZWxlY3RvcihgW2lkPSIke2l9Il1gKTtpZighbylyZXR1cm4gbnVsbDtsZXQgcz1vLmNsb25lTm9kZSghMCk7aWYocy5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMocyxyKTtpZigic3ltYm9sIj09PXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocykscik7bGV0IGE9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcocncoIjxzdmc+PC9zdmc+IikpO3JldHVybiBhLmFwcGVuZENoaWxkKHMpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoYSxyKX1fc3ZnRWxlbWVudEZyb21TdHJpbmcoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7aS5pbm5lckhUTUw9ZTtsZXQgcj1pLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFyKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIHJ9X3RvU3ZnRWxlbWVudChlKXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhydygiPHN2Zz48L3N2Zz4iKSkscj1lLmF0dHJpYnV0ZXM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldHtuYW1lOnMsdmFsdWU6YX09cltvXTsiaWQiIT09cyYmaS5zZXRBdHRyaWJ1dGUocyxhKX1mb3IobGV0IG89MDtvPGUuY2hpbGROb2Rlcy5sZW5ndGg7bysrKWUuY2hpbGROb2Rlc1tvXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmaS5hcHBlbmRDaGlsZChlLmNoaWxkTm9kZXNbb10uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGl9X3NldFN2Z0F0dHJpYnV0ZXMoZSxpKXtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLGUuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGkmJmkudmlld0JveCYmZS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGkudmlld0JveCksZX1fZmV0Y2hJY29uKGUpe2xldHt1cmw6aSxvcHRpb25zOnJ9PWUsbz1yPy53aXRoQ3JlZGVudGlhbHM/PyExO2lmKCF0aGlzLl9odHRwQ2xpZW50KXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBIdHRwQ2xpZW50IHByb3ZpZGVyIGZvciB1c2Ugd2l0aCBBbmd1bGFyIE1hdGVyaWFsIGljb25zLiBQbGVhc2UgaW5jbHVkZSB0aGUgSHR0cENsaWVudE1vZHVsZSBmcm9tIEBhbmd1bGFyL2NvbW1vbi9odHRwIGluIHlvdXIgYXBwIGltcG9ydHMuIik7aWYobnVsbD09aSl0aHJvdyBFcnJvcihgQ2Fubm90IGZldGNoIGljb24gZnJvbSBVUkwgIiR7aX0iLmApO2xldCBzPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsaSk7aWYoIXMpdGhyb3cgSyQoaSk7bGV0IGE9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KHMpO2lmKGEpcmV0dXJuIGE7bGV0IGw9dGhpcy5faHR0cENsaWVudC5nZXQocyx7cmVzcG9uc2VUeXBlOiJ0ZXh0Iix3aXRoQ3JlZGVudGlhbHM6b30pLnBpcGUoQihjPT5ydyhjKSksZnVuY3Rpb24obil7cmV0dXJuIHF0KCh0LGUpPT57dHJ5e3Quc3Vic2NyaWJlKGUpfWZpbmFsbHl7ZS5hZGQobil9fSl9KCgpPT50aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUocykpLFhzKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQocyxsKSxsfV9hZGRTdmdJY29uQ29uZmlnKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KEokKGUsaSksciksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyhlLGkpe2xldCByPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gcj9yLnB1c2goaSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KGUsW2ldKSx0aGlzfV9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKXtpZighZS5zdmdFbGVtZW50KXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhlLnN2Z1RleHQpO3RoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSxlLm9wdGlvbnMpLGUuc3ZnRWxlbWVudD1pfXJldHVybiBlLnN2Z0VsZW1lbnR9X2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGUsaSl7Zm9yKGxldCByPTA7cjx0aGlzLl9yZXNvbHZlcnMubGVuZ3RoO3IrKyl7bGV0IG89dGhpcy5fcmVzb2x2ZXJzW3JdKGksZSk7aWYobylyZXR1cm4gZlBlKG8pP25ldyBTZChvLnVybCxudWxsLG8ub3B0aW9ucyk6bmV3IFNkKG8sbnVsbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEdmLDgpLFIoUmYpLFIoQnQsOCksUihTcykpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGNJKG4pe3JldHVybiBuLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gSiQobix0KXtyZXR1cm4gbisiOiIrdH1mdW5jdGlvbiBmUGUobil7cmV0dXJuISghbi51cmx8fCFuLm9wdGlvbnMpfW5ldyBPbyxuZXcgVGEsbmV3IE9vLG5ldyBPbzt2YXIgbVBlPXBzKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSxnUGU9bmV3IHNlKCJNQVRfSUNPTl9ERUZBVUxUX09QVElPTlMiKSxfUGU9bmV3IHNlKCJtYXQtaWNvbi1sb2NhdGlvbiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtsZXQgbj1TbyhCdCksdD1uP24ubG9jYXRpb246bnVsbDtyZXR1cm57Z2V0UGF0aG5hbWU6KCk9PnQ/dC5wYXRobmFtZSt0LnNlYXJjaDoiIn19fSksJCQ9WyJjbGlwLXBhdGgiLCJjb2xvci1wcm9maWxlIiwic3JjIiwiY3Vyc29yIiwiZmlsbCIsImZpbHRlciIsIm1hcmtlciIsIm1hcmtlci1zdGFydCIsIm1hcmtlci1taWQiLCJtYXJrZXItZW5kIiwibWFzayIsInN0cm9rZSJdLHlQZT0kJC5tYXAobj0+YFske259XWApLmpvaW4oIiwgIiksYlBlPS9edXJsXChbJyJdPyMoLio/KVsnIl0/XCkkLyxabj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbVBle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXZuLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9V3QoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfV9zcGxpdEljb25OYW1lKGUpe2lmKCFlKXJldHVyblsiIiwiIl07bGV0IGk9ZS5zcGxpdCgiOiIpO3N3aXRjaChpLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixpWzBdXTtjYXNlIDI6cmV0dXJuIGk7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke2V9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpZihlJiZlLnNpemUpe2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7aSE9PXRoaXMuX3ByZXZpb3VzUGF0aCYmKHRoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKX1fdXNpbmdGb250SWNvbigpe3JldHVybiF0aGlzLnN2Z0ljb259X3NldFN2Z0VsZW1lbnQoZSl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTt0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9X2NsZWFyU3ZnRWxlbWVudCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUuY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCk7aS0tOyl7bGV0IHI9ZS5jaGlsZE5vZGVzW2ldOygxIT09ci5ub2RlVHlwZXx8InN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZyLnJlbW92ZSgpfX1fdXBkYXRlRm9udEljb25DbGFzc2VzKCl7aWYoIXRoaXMuX3VzaW5nRm9udEljb24oKSlyZXR1cm47bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9KHRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCkuc3BsaXQoLyArLyk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKSkuZmlsdGVyKHI9PnIubGVuZ3RoPjApO3RoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QucmVtb3ZlKHIpKSxpLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1pLHRoaXMuZm9udEljb24hPT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJiFpLmluY2x1ZGVzKCJtYXQtbGlnYXR1cmUtZm9udCIpJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZlLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZlLmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfV9jbGVhbnVwRm9udFZhbHVlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdCgiICIpWzBdOmV9X3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGUpe2xldCBpPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpJiZpLmZvckVhY2goKHIsbyk9PntyLmZvckVhY2gocz0+e28uc2V0QXR0cmlidXRlKHMubmFtZSxgdXJsKCcke2V9IyR7cy52YWx1ZX0nKWApfSl9KX1fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yQWxsKHlQZSkscj10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzfHxuZXcgTWFwO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKSQkLmZvckVhY2gocz0+e2xldCBhPWlbb10sbD1hLmdldEF0dHJpYnV0ZShzKSxjPWw/bC5tYXRjaChiUGUpOm51bGw7aWYoYyl7bGV0IHU9ci5nZXQoYSk7dXx8KHU9W10sci5zZXQoYSx1KSksdS5wdXNoKHtuYW1lOnMsdmFsdWU6Y1sxXX0pfX0pfV91cGRhdGVTdmdJY29uKGUpe2lmKHRoaXMuX3N2Z05hbWVzcGFjZT1udWxsLHRoaXMuX3N2Z05hbWU9bnVsbCx0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksZSl7bGV0W2kscl09dGhpcy5fc3BsaXRJY29uTmFtZShlKTtpJiYodGhpcy5fc3ZnTmFtZXNwYWNlPWkpLHImJih0aGlzLl9zdmdOYW1lPXIpLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9dGhpcy5faWNvblJlZ2lzdHJ5LmdldE5hbWVkU3ZnSWNvbihyLGkpLnBpcGUoSHQoMSkpLnN1YnNjcmliZShvPT50aGlzLl9zZXRTdmdFbGVtZW50KG8pLG89Pnt0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFcnJvciByZXRyaWV2aW5nIGljb24gJHtpfToke3J9ISAke28ubWVzc2FnZX1gKSl9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWF8pLEtvKCJhcmlhLWhpZGRlbiIpLHcoX1BlKSx3KFNzKSx3KGdQZSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWljb24iXV0saG9zdEF0dHJzOlsicm9sZSIsImltZyIsMSwibWF0LWljb24iLCJub3RyYW5zbGF0ZSJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoemUoImRhdGEtbWF0LWljb24tdHlwZSIsaS5fdXNpbmdGb250SWNvbigpPyJmb250Ijoic3ZnIikoImRhdGEtbWF0LWljb24tbmFtZSIsaS5fc3ZnTmFtZXx8aS5mb250SWNvbikoImRhdGEtbWF0LWljb24tbmFtZXNwYWNlIixpLl9zdmdOYW1lc3BhY2V8fGkuZm9udFNldCkoImZvbnRJY29uIixpLl91c2luZ0ZvbnRJY29uKCk/aS5mb250SWNvbjpudWxsKSxhdCgibWF0LWljb24taW5saW5lIixpLmlubGluZSkoIm1hdC1pY29uLW5vLWNvbG9yIiwicHJpbWFyeSIhPT1pLmNvbG9yJiYiYWNjZW50IiE9PWkuY29sb3ImJiJ3YXJuIiE9PWkuY29sb3IpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGlubGluZToiaW5saW5lIixzdmdJY29uOiJzdmdJY29uIixmb250U2V0OiJmb250U2V0Iixmb250SWNvbjoiZm9udEljb24ifSxleHBvcnRBczpbIm1hdEljb24iXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczp1UGUsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLE5uKDApKX0sc3R5bGVzOlsiLm1hdC1pY29uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O292ZXJmbG93OmhpZGRlbn0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH0ubWF0LWljb24ubWF0LWxpZ2F0dXJlLWZvbnRbZm9udEljb25dOjpiZWZvcmV7Y29udGVudDphdHRyKGZvbnRJY29uKX1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLCAxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLHhQZT1bIioiLFtbIm1hdC10b29sYmFyLXJvdyJdXV0sQ1BlPVsiKiIsIm1hdC10b29sYmFyLXJvdyJdLHdQZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksTVBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhci1yb3ciXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhci1yb3ciXSxleHBvcnRBczpbIm1hdFRvb2xiYXJSb3ciXX0pLG59KSgpLGVlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd1Ble2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh1aSksdyhCdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsTVBlLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX3Rvb2xiYXJSb3dzPW8pfX0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsaS5fdG9vbGJhclJvd3MubGVuZ3RoPjApKCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IiwwPT09aS5fdG9vbGJhclJvd3MubGVuZ3RoKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpDUGUsZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSh4UGUpLE5uKDApLE5uKDEsMSkpfSxzdHlsZXM6WyIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbGJhcntvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHRlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZG4sZG5dfSksbn0pKCk7ZnVuY3Rpb24geDUobil7cmV0dXJuIG4uc3RhdGUhPT1FZS5OT1RfTE9BREVEJiZuLnN0YXRlIT09RWUuTE9BRElOR312YXIgRVBlPXdyKEFaLFNlKGRBLG49Png1KG4pP3suLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZEVuYWJsZWQ6IW4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZH19Om4pLFNlKHBBLChuLHtwZXJpb2RJbk1zOnR9KT0+e2lmKCF4NShuKSlyZXR1cm4gbjtsZXQgZT10Pj0zZTQ/dDpuLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXM7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkUGVyaW9kSW5NczplfX19KSxTZShoQSwobix7c2l6ZTp0fSk9PntpZigheDUobikpcmV0dXJuIG47bGV0IGU9dD4wP3Q6bi5zZXR0aW5ncy5wYWdlU2l6ZTtyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxwYWdlU2l6ZTplfX19KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUodC5wYWdlU2l6ZSkmJnQucGFnZVNpemU+MCYmKGUucGFnZVNpemU9TnVtYmVyKHQucGFnZVNpemUpKSwiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLnJlbG9hZEVuYWJsZWQ9dC5hdXRvUmVsb2FkKSxOdW1iZXIuaXNGaW5pdGUodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykmJnQuYXV0b1JlbG9hZFBlcmlvZEluTXM+M2U0JiYoZS5yZWxvYWRQZXJpb2RJbk1zPU51bWJlcih0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSksey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MsLi4uZX19fSkpO2Z1bmN0aW9uIG5lZShuLHQpe3JldHVybiBFUGUobix0KX12YXIgVFBlPVsiaW5wdXQiXSxEUGU9WyJsYWJlbCJdLEFQZT1mdW5jdGlvbihuKXtyZXR1cm57ZW50ZXJEdXJhdGlvbjpufX0sSVBlPVsiKiJdLFBQZT1uZXcgc2UoIm1hdC1jaGVja2JveC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn19fSk7dmFyIFJQZT0wLGllZT17Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifSxPUGU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PkVkKSxtdWx0aTohMH0sa1BlPXFwKHBzKExzKGdvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSxGUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vcHRpb25zPWwsdGhpcy5hcmlhTGFiZWw9IiIsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMubGFiZWxQb3NpdGlvbj0iYWZ0ZXIiLHRoaXMubmFtZT1udWxsLHRoaXMuY2hhbmdlPW5ldyBHLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZT1uZXcgRyx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fGllZSx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXRoaXMuX29wdGlvbnMuY29sb3J8fGllZS5jb2xvcix0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQ9YCR7ZX0keysrUlBlfWB9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3luY0luZGV0ZXJtaW5hdGUodGhpcy5faW5kZXRlcm1pbmF0ZSl9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT1XdChlKTtpIT10aGlzLmNoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgaW5kZXRlcm1pbmF0ZSgpe3JldHVybiB0aGlzLl9pbmRldGVybWluYXRlfXNldCBpbmRldGVybWluYXRlKGUpe2xldCBpPWUhPXRoaXMuX2luZGV0ZXJtaW5hdGU7dGhpcy5faW5kZXRlcm1pbmF0ZT1XdChlKSxpJiYodGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5faW5kZXRlcm1pbmF0ZT8zOnRoaXMuY2hlY2tlZD8xOjIpLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpKSx0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfXdyaXRlVmFsdWUoZSl7dGhpcy5jaGVja2VkPSEhZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZX1fZ2V0QXJpYUNoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2VkPyJ0cnVlIjp0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjoiZmFsc2UifV90cmFuc2l0aW9uQ2hlY2tTdGF0ZShlKXtsZXQgaT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxyPXRoaXMuX2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKTtpZihpIT09ZSYmciYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyYmci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oaSxlKSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT1lLHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe3IuY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2xldCBvPXRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57ci5jbGFzc0xpc3QucmVtb3ZlKG8pfSwxZTMpfSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0aGlzLmNoZWNrZWQpKSx0aGlzLl9pbnB1dEVsZW1lbnQmJih0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCl9dG9nZ2xlKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpfV9oYW5kbGVJbnB1dENsaWNrKCl7bGV0IGU9dGhpcy5fb3B0aW9ucz8uY2xpY2tBY3Rpb247dGhpcy5kaXNhYmxlZHx8Im5vb3AiPT09ZT8hdGhpcy5kaXNhYmxlZCYmIm5vb3AiPT09ZSYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dGhpcy5pbmRldGVybWluYXRlKToodGhpcy5pbmRldGVybWluYXRlJiYiY2hlY2siIT09ZSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSl9KSx0aGlzLl9jaGVja2VkPSF0aGlzLl9jaGVja2VkLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9X29uSW50ZXJhY3Rpb25FdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpfV9vbkJsdXIoKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihlLGkpe2lmKCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlKXJldHVybiIiO3N3aXRjaChlKXtjYXNlIDA6aWYoMT09PWkpcmV0dXJuIHRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9DaGVja2VkO2lmKDM9PWkpcmV0dXJuIHRoaXMuX2NoZWNrZWQ/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5jaGVja2VkVG9JbmRldGVybWluYXRlOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9JbmRldGVybWluYXRlO2JyZWFrO2Nhc2UgMjpyZXR1cm4gMT09PWk/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAxOnJldHVybiAyPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb1VuY2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAzOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5pbmRldGVybWluYXRlVG9VbmNoZWNrZWR9cmV0dXJuIiJ9X3N5bmNJbmRldGVybWluYXRlKGUpe2xldCBpPXRoaXMuX2lucHV0RWxlbWVudDtpJiYoaS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFRQZSw1KSxsdChEUGUsNSksbHQoZXMsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lucHV0RWxlbWVudD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fbGFiZWxFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0saWQ6ImlkIixyZXF1aXJlZDoicmVxdWlyZWQiLGxhYmVsUG9zaXRpb246ImxhYmVsUG9zaXRpb24iLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpbmRldGVybWluYXRlOiJpbmRldGVybWluYXRlIn0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGluZGV0ZXJtaW5hdGVDaGFuZ2U6ImluZGV0ZXJtaW5hdGVDaGFuZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksRWQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcigibWF0LWNoZWNrYm94LSIsZSxpLG8scyxhLGwpLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX2FuaW1hdGlvbkNsYXNzZXM9e3VuY2hlY2tlZFRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQiLHVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUiLGNoZWNrZWRUb1VuY2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQiLGNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6Im1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIixpbmRldGVybWluYXRlVG9VbmNoZWNrZWQ6Im1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIn19X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkuY2hlY2tlZD1lLGl9X2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57ZXx8dGhpcy5fb25CbHVyKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX1fb25JbnB1dENsaWNrKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksc3VwZXIuX2hhbmRsZUlucHV0Q2xpY2soKX1mb2N1cyhlLGkpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxlLGkpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHpyKSx3KHB0KSxLbygidGFiaW5kZXgiKSx3KExpLDgpLHcoUFBlLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hlY2tib3giXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihBYSgiaWQiLGkuaWQpLHplKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLGF0KCJtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgibWF0LWNoZWNrYm94LWNoZWNrZWQiLGkuY2hlY2tlZCkoIm1hdC1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0Q2hlY2tib3giXSxmZWF0dXJlczpbJHQoW09QZV0pLHR0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6SVBlLGRlY2xzOjE3LHZhcnM6MjEsY29uc3RzOltbMSwibWF0LWNoZWNrYm94LWxheW91dCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtYXQtY2hlY2tib3gtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWNoZWNrYm94LXJpcHBsZSIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlQW5pbWF0aW9uIl0sWzEsIm1hdC1yaXBwbGUtZWxlbWVudCIsIm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtY2hlY2tib3gtZnJhbWUiXSxbMSwibWF0LWNoZWNrYm94LWJhY2tncm91bmQiXSxbInZlcnNpb24iLCIxLjEiLCJmb2N1c2FibGUiLCJmYWxzZSIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwic3Ryb2tlIiwid2hpdGUiLCJkIiwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuMyIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIl0sWzEsIm1hdC1jaGVja2JveC1taXhlZG1hcmsiXSxbMSwibWF0LWNoZWNrYm94LWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiY2hlY2tib3hMYWJlbCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJsYWJlbCIsMCwxKSgyLCJzcGFuIiwyKSgzLCJpbnB1dCIsMyw0KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbklucHV0Q2xpY2sobyl9KSx2KCksZyg1LCJzcGFuIiw1KSxOKDYsInNwYW4iLDYpLHYoKSxOKDcsInNwYW4iLDcpLGcoOCwic3BhbiIsOCksam4oKSxnKDksInN2ZyIsOSksTigxMCwicGF0aCIsMTApLHYoKSxTYSgpLE4oMTEsInNwYW4iLDExKSx2KCkoKSxnKDEyLCJzcGFuIiwxMiwxMyksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTGFiZWxUZXh0Q2hhbmdlKCl9KSxnKDE0LCJzcGFuIiwxNCksRCgxNSwiXHhhMCIpLHYoKSxObigxNiksdigpKCkpLDImZSl7bGV0IHI9c3QoMSksbz1zdCgxMyk7emUoImZvciIsaS5pbnB1dElkKSx4KDIpLGF0KCJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luIiwhby50ZXh0Q29udGVudHx8IW8udGV4dENvbnRlbnQudHJpbSgpKSx4KDEpLGIoImlkIixpLmlucHV0SWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCkoImNoZWNrZWQiLGkuY2hlY2tlZCkoImRpc2FibGVkIixpLmRpc2FibGVkKSgidGFiSW5kZXgiLGkudGFiSW5kZXgpLHplKCJ2YWx1ZSIsaS52YWx1ZSkoIm5hbWUiLGkubmFtZSkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1jaGVja2VkIixpLl9nZXRBcmlhQ2hlY2tlZCgpKSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpLHgoMiksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQ2VudGVyZWQiLCEwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixIbigxOSxBUGUsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGU/MDoxNTApKX19LGRlcGVuZGVuY2llczpbZXMsU19dLHN0eWxlczpbJ0BrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZHswJSw1MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtY2hlY2tlZC1jaGVja21hcmstcGF0aHswJSw1MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7MCUsNjguMiV7dHJhbnNmb3JtOnNjYWxlWCgwKX02OC4yJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLCAxKX0xMDAle3RyYW5zZm9ybTpzY2FsZVgoMSl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtdW5jaGVja2VkLWNoZWNrbWFyay1wYXRoe2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtzdHJva2UtZGFzaG9mZnNldDowfXRve3N0cm9rZS1kYXNob2Zmc2V0Oi0yMi45MTAyNTl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya3swJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX0zMi44JSwxMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApfX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1mcmFtZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTZ9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94LWxheW91dHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87dXNlci1zZWxlY3Q6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDowO21hcmdpbjphdXRvO21hcmdpbi1yaWdodDo4cHg7b3JkZXI6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1jaGVja2JveC1mcmFtZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWZyYW1le3RyYW5zaXRpb246bm9uZX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLG9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpOy13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6bm9uZX0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06bm9uZX0ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTowfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCV9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTk7c3Ryb2tlLWRhc2hhcnJheToyMi45MTAyNTk7c3Ryb2tlLXdpZHRoOjIuMTMzMzMzMzMzM3B4fS5jZGstaGlnaC1jb250cmFzdC1ibGFjay1vbi13aGl0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7d2lkdGg6Y2FsYygxMDAlIC0gNnB4KTtoZWlnaHQ6MnB4O29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApIHJvdGF0ZSgwZGVnKTtib3JkZXItcmFkaXVzOjJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O21hcmdpbi10b3A6MnB4fS5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye29yZGVyOjE7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4cHh9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MX0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3t0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKDBkZWcpfS5tYXQtY2hlY2tib3gtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfS5tYXQtY2hlY2tib3gtaW5wdXQ6Zm9jdXN+Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE5QZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+TFBlKSxtdWx0aTohMH0sTFBlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5NXt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOlskdChbTlBlXSksdHRdfSksbn0pKCkscmVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSwkcD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsZG4senAscmVlLGRuLHJlZV19KSxufSkoKSxzZWU9TnMoe3Bhc3NpdmU6ITB9KSxhZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbmdab25lPWksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHM9bmV3IE1hcH1tb25pdG9yKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGFvO2xldCBpPWNhKGUpLHI9dGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZ2V0KGkpO2lmKHIpcmV0dXJuIHIuc3ViamVjdDtsZXQgbz1uZXcgVGUscz0iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIsYT1sPT57ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IiE9PWwuYW5pbWF0aW9uTmFtZXx8aS5jbGFzc0xpc3QuY29udGFpbnMocyk/ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1sLmFuaW1hdGlvbk5hbWUmJmkuY2xhc3NMaXN0LmNvbnRhaW5zKHMpJiYoaS5jbGFzc0xpc3QucmVtb3ZlKHMpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pm8ubmV4dCh7dGFyZ2V0OmwudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMX0pKSk6KGkuY2xhc3NMaXN0LmFkZChzKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITB9KSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aS5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpfX0pLG99c3RvcE1vbml0b3JpbmcoZSl7bGV0IGk9Y2EoZSkscj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoaSk7ciYmKHIudW5saXN0ZW4oKSxyLnN1YmplY3QuY29tcGxldGUoKSxpLmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmRlbGV0ZShpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLnN0b3BNb25pdG9yaW5nKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHc1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxWUGU9bmV3IHNlKCJNQVRfSU5QVVRfVkFMVUVfQUNDRVNTT1IiKSxIUGU9WyJidXR0b24iLCJjaGVja2JveCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInN1Ym1pdCJdLFVQZT0wLHpQZT1SQShjbGFzc3tjb25zdHJ1Y3RvcihuLHQsZSxpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9bix0aGlzLl9wYXJlbnRGb3JtPXQsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWUsdGhpcy5uZ0NvbnRyb2w9aSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGV9fSksUV89KCgpPT57Y2xhc3MgbiBleHRlbmRzIHpQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXtzdXBlcihhLG8scyxyKSx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9hdXRvZmlsbE1vbml0b3I9Yyx0aGlzLl9mb3JtRmllbGQ9ZCx0aGlzLl91aWQ9Im1hdC1pbnB1dC0iK1VQZSsrLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGUsdGhpcy5jb250cm9sVHlwZT0ibWF0LWlucHV0Iix0aGlzLmF1dG9maWxsZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdHlwZT0idGV4dCIsdGhpcy5fcmVhZG9ubHk9ITEsdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXM9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiXS5maWx0ZXIoZj0+RlYoKS5oYXMoZikpLHRoaXMuX2lPU0tleXVwTGlzdGVuZXI9Zj0+e2xldCBtPWYudGFyZ2V0OyFtLnZhbHVlJiYwPT09bS5zZWxlY3Rpb25TdGFydCYmMD09PW0uc2VsZWN0aW9uRW5kJiYobS5zZXRTZWxlY3Rpb25SYW5nZSgxLDEpLG0uc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKSl9O2xldCBwPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxoPXAubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3I9bHx8cCx0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXRoaXMudmFsdWUsdGhpcy5pZD10aGlzLmlkLGkuSU9TJiZ1LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57ZS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX0pLHRoaXMuX2lzU2VydmVyPSF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsdGhpcy5faXNOYXRpdmVTZWxlY3Q9InNlbGVjdCI9PT1oLHRoaXMuX2lzVGV4dGFyZWE9InRleHRhcmVhIj09PWgsdGhpcy5faXNJbkZvcm1GaWVsZD0hIWQsdGhpcy5faXNOYXRpdmVTZWxlY3QmJih0aGlzLmNvbnRyb2xUeXBlPXAubXVsdGlwbGU/Im1hdC1uYXRpdmUtc2VsZWN0LW11bHRpcGxlIjoibWF0LW5hdGl2ZS1zZWxlY3QiKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFNjLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPVd0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJkZWKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5fZGlydHlDaGVja05hdGl2ZVZhbHVlKCksdGhpcy5fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9mb2N1c0NoYW5nZWQoZSl7ZSE9PXRoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uSW5wdXQoKXt9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2Zvcm1GaWVsZCxpPWUmJiJsZWdhY3kiPT09ZS5hcHBlYXJhbmNlJiYhZS5faGFzTGFiZWw/LigpP251bGw6dGhpcy5wbGFjZWhvbGRlcjtpZihpIT09dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcil7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXI9aSxpP3Iuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsaSk6ci5yZW1vdmVBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIil9fV9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7dGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZSE9PWUmJih0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fdmFsaWRhdGVUeXBlKCl7SFBlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHVpKSx3KHBhLDEwKSx3KEdfLDgpLHcoV18sOCksdyhSXyksdyhWUGUsMTApLHcoYWVlKSx3KHB0KSx3KHVtLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJtYXRJbnB1dCIsIiJdLFsidGV4dGFyZWEiLCJtYXRJbnB1dCIsIiJdLFsic2VsZWN0IiwibWF0TmF0aXZlQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5wdXQtZWxlbWVudCIsIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2wiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9mb2N1c0NoYW5nZWQoITApfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMSl9KSgiaW5wdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uSW5wdXQoKX0pLDImZSYmKEFhKCJkaXNhYmxlZCIsaS5kaXNhYmxlZCkoInJlcXVpcmVkIixpLnJlcXVpcmVkKSx6ZSgiaWQiLGkuaWQpKCJkYXRhLXBsYWNlaG9sZGVyIixpLnBsYWNlaG9sZGVyKSgibmFtZSIsaS5uYW1lfHxudWxsKSgicmVhZG9ubHkiLGkucmVhZG9ubHkmJiFpLl9pc05hdGl2ZVNlbGVjdHx8bnVsbCkoImFyaWEtaW52YWxpZCIsaS5lbXB0eSYmaS5yZXF1aXJlZD9udWxsOmkuZXJyb3JTdGF0ZSkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQpLGF0KCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1uYXRpdmUtc2VsZWN0LWlubGluZSIsaS5faXNJbmxpbmVTZWxlY3QoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsaWQ6ImlkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLG5hbWU6Im5hbWUiLHJlcXVpcmVkOiJyZXF1aXJlZCIsdHlwZToidHlwZSIsZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSx2YWx1ZToidmFsdWUiLHJlYWRvbmx5OiJyZWFkb25seSJ9LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlVfLHVzZUV4aXN0aW5nOm59XSksdHQsenRdfSksbn0pKCksQXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUl9dLGltcG9ydHM6W3c1LGRtLGRuLHc1LGRtXX0pLG59KSgpO2Z1bmN0aW9uIGpQZShuLHQpe2lmKDEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIiBSZWxvYWQgcGVyaW9kIGhhcyB0byBiZSBtaW5pbXVtIG9mICIsZS5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLCIgc2Vjb25kcy4gIil9fWZ1bmN0aW9uIEdQZShuLHQpezEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxLCIgUGFnZSBzaXplIGhhcyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXIuICIpLHYoKSl9dmFyIGxlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5yZWxvYWRUb2dnbGVkPW5ldyBHLHRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ9bmV3IEcsdGhpcy5wYWdlU2l6ZUNoYW5nZWQ9bmV3IEcsdGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TPTMwLHRoaXMucmVsb2FkUGVyaW9kQ29udHJvbD1uZXcgbncodGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLFtTYy5yZXF1aXJlZCxTYy5taW4odGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TKV0pLHRoaXMucGFnaW5hdGlvbkNvbnRyb2w9bmV3IG53KDEsW1NjLnJlcXVpcmVkLFNjLm1pbigxKSxuPT57bGV0IHQ9TnVtYmVyKG4udmFsdWUpO3JldHVybiBNYXRoLnJvdW5kKHQpPT09bi52YWx1ZT9udWxsOntpbnRlZ2VyOnt2YWx1ZTpuLnZhbHVlfX19XSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCYmdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZC5lbWl0KDFlMyp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWUpfSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsaWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUucmVsb2FkUGVyaW9kSW5Ncyl7bGV0IGk9ZS5yZWxvYWRQZXJpb2RJbk1zO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuc2V0VmFsdWUoaS5jdXJyZW50VmFsdWUvMWUzKX1pZihlLnJlbG9hZEVuYWJsZWQmJihlLnJlbG9hZEVuYWJsZWQuY3VycmVudFZhbHVlP3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5lbmFibGUoKTp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZGlzYWJsZSgpKSxlLnBhZ2VTaXplKXtsZXQgaT1lLnBhZ2VTaXplO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnBhZ2luYXRpb25Db250cm9sLnNldFZhbHVlKGkuY3VycmVudFZhbHVlKX19b25SZWxvYWRUb2dnbGUoKXt0aGlzLnJlbG9hZFRvZ2dsZWQuZW1pdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7cmVsb2FkRW5hYmxlZDoicmVsb2FkRW5hYmxlZCIscmVsb2FkUGVyaW9kSW5NczoicmVsb2FkUGVyaW9kSW5NcyIscGFnZVNpemU6InBhZ2VTaXplIn0sb3V0cHV0czp7cmVsb2FkVG9nZ2xlZDoicmVsb2FkVG9nZ2xlZCIscmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6InJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixwYWdlU2l6ZUNoYW5nZWQ6InBhZ2VTaXplQ2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTQsdmFyczo1LGNvbnN0czpbWzEsInJlbG9hZC10b2dnbGUiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJSZWxvYWQgUGVyaW9kIChzZWNvbmRzKSIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJQYWdpbmF0aW9uIExpbWl0IiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJoMyIpLEQoMSwiU2V0dGluZ3MiKSx2KCksZygyLCJkaXYiKSgzLCJkaXYiLDApKDQsIm1hdC1jaGVja2JveCIsMSksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlKCl9KSxEKDUsIlJlbG9hZCBkYXRhIiksdigpKCksZyg2LCJkaXYiKSg3LCJtYXQtZm9ybS1maWVsZCIpLE4oOCwiaW5wdXQiLDIpLHYoKSxFKDksalBlLDIsMSwibWF0LWVycm9yIiwzKSx2KCkoKSxnKDEwLCJkaXYiKSgxMSwibWF0LWZvcm0tZmllbGQiKSxOKDEyLCJpbnB1dCIsNCksdigpLEUoMTMsR1BlLDIsMCwibWF0LWVycm9yIiwzKSx2KCkpLDImZSYmKHgoNCksYigiY2hlY2tlZCIsaS5yZWxvYWRFbmFibGVkKSx4KDQpLGIoImZvcm1Db250cm9sIixpLnJlbG9hZFBlcmlvZENvbnRyb2wpLHgoMSksYigibmdJZiIsaS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJtaW4iKXx8aS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJyZXF1aXJlZCIpKSx4KDMpLGIoImZvcm1Db250cm9sIixpLnBhZ2luYXRpb25Db250cm9sKSx4KDEpLGIoIm5nSWYiLGkucGFnaW5hdGlvbkNvbnRyb2wuaW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W1hlLHRJLGc1LG0kLHY1LEVkLEhKLER1LFFfXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5oM1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDIwcHg7XG59XG5cbi5yZWxvYWQtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59Il19KSxufSkoKSxjZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChSQyksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChPQyksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoJGYpfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZEEoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHBBKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChoQSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLFAoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWxvYWRFbmFibGVkIixXKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFcoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFcoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbbGVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx1ZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lfWlzQnV0dG9uRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1FZS5MT0FESU5HfW9wZW5EaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKGNlZSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLE4oMSwibWF0LWljb24iLDEpLHYoKSksMiZlJiZiKCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6WyRuLFpuXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxkZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUFYpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmYigic2V0dGluZ3NMb2FkU3RhdGUiLFcoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbdWVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRUGU9WyJtYXQtbWVudS1pdGVtIiwiIl07ZnVuY3Rpb24gS1BlKG4sdCl7MSZuJiYoam4oKSxnKDAsInN2ZyIsMiksTigxLCJwb2x5Z29uIiwzKSx2KCkpfXZhciBoZWU9WyIqIl07ZnVuY3Rpb24gWlBlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwwKSxQKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmNsb3NlZC5lbWl0KCJjbGljayIpKX0pKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25TdGFydChyKSl9KSgiQHRyYW5zZm9ybU1lbnUuZG9uZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25Eb25lKHIpKX0pLGcoMSwiZGl2IiwxKSxObigyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJpZCIsZS5wYW5lbElkKSgibmdDbGFzcyIsZS5fY2xhc3NMaXN0KSgiQHRyYW5zZm9ybU1lbnUiLGUuX3BhbmVsQW5pbWF0aW9uU3RhdGUpLHplKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsZS5hcmlhTGFiZWxsZWRieXx8bnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLGUuYXJpYURlc2NyaWJlZGJ5fHxudWxsKX19dmFyIHBJPXt0cmFuc2Zvcm1NZW51OkhyKCJ0cmFuc2Zvcm1NZW51IixbRWkoInZvaWQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjgpIn0pKSxJaSgidm9pZCA9PiBlbnRlciIsVmkoIjEyMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToic2NhbGUoMSkifSkpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSksZmFkZUluSXRlbXM6SHIoImZhZGVJbkl0ZW1zIixbRWkoInNob3dpbmciLHJuKHtvcGFjaXR5OjF9KSksSWkoInZvaWQgPT4gKiIsW3JuKHtvcGFjaXR5OjB9KSxWaSgiNDAwbXMgMTAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LEpQZT1uZXcgc2UoIk1hdE1lbnVDb250ZW50IiksUzU9bmV3IHNlKCJNQVRfTUVOVV9QQU5FTCIpLCRQZT1McyhnbyhjbGFzc3t9KSksRWM9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fZm9jdXNNb25pdG9yPXIsdGhpcy5fcGFyZW50TWVudT1vLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5yb2xlPSJtZW51aXRlbSIsdGhpcy5faG92ZXJlZD1uZXcgVGUsdGhpcy5fZm9jdXNlZD1uZXcgVGUsdGhpcy5faGlnaGxpZ2h0ZWQ9ITEsdGhpcy5fdHJpZ2dlcnNTdWJtZW51PSExLG8/LmFkZEl0ZW0/Lih0aGlzKX1mb2N1cyhlLGkpe3RoaXMuX2ZvY3VzTW9uaXRvciYmZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSksdGhpcy5fZm9jdXNlZC5uZXh0KHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9wYXJlbnRNZW51JiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0mJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSh0aGlzKSx0aGlzLl9ob3ZlcmVkLmNvbXBsZXRlKCksdGhpcy5fZm9jdXNlZC5jb21wbGV0ZSgpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9X2NoZWNrRGlzYWJsZWQoZSl7dGhpcy5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX1faGFuZGxlTW91c2VFbnRlcigpe3RoaXMuX2hvdmVyZWQubmV4dCh0aGlzKX1nZXRMYWJlbCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUoITApLGk9ZS5xdWVyeVNlbGVjdG9yQWxsKCJtYXQtaWNvbiwgLm1hdGVyaWFsLWljb25zIik7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXS5yZW1vdmUoKTtyZXR1cm4gZS50ZXh0Q29udGVudD8udHJpbSgpfHwiIn1fc2V0SGlnaGxpZ2h0ZWQoZSl7dGhpcy5faGlnaGxpZ2h0ZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X2hhc0ZvY3VzKCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCdCksdyh6ciksdyhTNSw4KSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtaXRlbSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY2hlY2tEaXNhYmxlZChvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVNb3VzZUVudGVyKCl9KSwyJmUmJih6ZSgicm9sZSIsaS5yb2xlKSgidGFiaW5kZXgiLGkuX2dldFRhYkluZGV4KCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIm1hdC1tZW51LWl0ZW0iLCEwKSgibWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCIsaS5faGlnaGxpZ2h0ZWQpKCJtYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlciIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixyb2xlOiJyb2xlIn0sZXhwb3J0QXM6WyJtYXRNZW51SXRlbSJdLGZlYXR1cmVzOlt0dF0sYXR0cnM6UVBlLG5nQ29udGVudFNlbGVjdG9yczpoZWUsZGVjbHM6Myx2YXJzOjMsY29uc3RzOltbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1lbnUtcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbImNsYXNzIiwibWF0LW1lbnUtc3VibWVudS1pY29uIiwidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDQsIm5nSWYiXSxbInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtbWVudS1zdWJtZW51LWljb24iXSxbInBvaW50cyIsIjAsMCA1LDUgMCwxMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksTm4oMCksTigxLCJkaXYiLDApLEUoMixLUGUsMiwwLCJzdmciLDEpKSwyJmUmJih4KDEpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSx4KDEpLGIoIm5nSWYiLGkuX3RyaWdnZXJzU3VibWVudSkpfSxkZXBlbmRlbmNpZXM6W1hlLGVzXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmZWU9bmV3IHNlKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSksdFJlPTAsb3c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1vLHRoaXMuX3hQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy54UG9zaXRpb24sdGhpcy5feVBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnlQb3NpdGlvbix0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXM9bmV3IGNsLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5fYW5pbWF0aW9uRG9uZT1uZXcgVGUsdGhpcy5vdmVybGF5UGFuZWxDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5iYWNrZHJvcENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zLmJhY2tkcm9wQ2xhc3MsdGhpcy5fb3ZlcmxhcFRyaWdnZXI9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxhcFRyaWdnZXIsdGhpcy5faGFzQmFja2Ryb3A9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGFzQmFja2Ryb3AsdGhpcy5jbG9zZWQ9bmV3IEcsdGhpcy5jbG9zZT10aGlzLmNsb3NlZCx0aGlzLnBhbmVsSWQ9Im1hdC1tZW51LXBhbmVsLSIrdFJlKyt9Z2V0IHhQb3NpdGlvbigpe3JldHVybiB0aGlzLl94UG9zaXRpb259c2V0IHhQb3NpdGlvbihlKXt0aGlzLl94UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCB5UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feVBvc2l0aW9ufXNldCB5UG9zaXRpb24oZSl7dGhpcy5feVBvc2l0aW9uPWUsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgb3ZlcmxhcFRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fb3ZlcmxhcFRyaWdnZXJ9c2V0IG92ZXJsYXBUcmlnZ2VyKGUpe3RoaXMuX292ZXJsYXBUcmlnZ2VyPVd0KGUpfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9c2V0IHBhbmVsQ2xhc3MoZSl7bGV0IGk9dGhpcy5fcHJldmlvdXNQYW5lbENsYXNzO2kmJmkubGVuZ3RoJiZpLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSExfSksdGhpcy5fcHJldmlvdXNQYW5lbENsYXNzPWUsZSYmZS5sZW5ndGgmJihlLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSEwfSksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIil9Z2V0IGNsYXNzTGlzdCgpe3JldHVybiB0aGlzLnBhbmVsQ2xhc3N9c2V0IGNsYXNzTGlzdChlKXt0aGlzLnBhbmVsQ2xhc3M9ZX1uZ09uSW5pdCgpe3RoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKSx0aGlzLl9rZXlNYW5hZ2VyPW5ldyBBXyh0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLndpdGhXcmFwKCkud2l0aFR5cGVBaGVhZCgpLndpdGhIb21lQW5kRW5kKCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uPXRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZSgoKT0+dGhpcy5jbG9zZWQuZW1pdCgidGFiIikpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSx2aShlPT51biguLi5lLm1hcChpPT5pLl9mb2N1c2VkKSkpKS5zdWJzY3JpYmUoZT0+dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuX2tleU1hbmFnZXI7aWYoImVudGVyIj09PXRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUmJmkuYWN0aXZlSXRlbT8uX2hhc0ZvY3VzKCkpe2xldCByPWUudG9BcnJheSgpLG89TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0xLGkuYWN0aXZlSXRlbUluZGV4fHwwKSk7cltvXSYmIXJbb10uZGlzYWJsZWQ/aS5zZXRBY3RpdmVJdGVtKG8pOmkuc2V0TmV4dEl0ZW1BY3RpdmUoKX19KX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5kZXN0cm95KCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKX1faG92ZXJlZCgpe3JldHVybiB0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksdmkoaT0+dW4oLi4uaS5tYXAocj0+ci5faG92ZXJlZCkpKSl9YWRkSXRlbShlKXt9cmVtb3ZlSXRlbShlKXt9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9dGhpcy5fa2V5TWFuYWdlcjtzd2l0Y2goaSl7Y2FzZSAyNzpNcihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIikpO2JyZWFrO2Nhc2UgMzc6dGhpcy5wYXJlbnRNZW51JiYibHRyIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7Y2FzZSAzOTp0aGlzLnBhcmVudE1lbnUmJiJydGwiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztkZWZhdWx0OnJldHVybigzOD09PWl8fDQwPT09aSkmJnIuc2V0Rm9jdXNPcmlnaW4oImtleWJvYXJkIiksdm9pZCByLm9uS2V5ZG93bihlKX1lLnN0b3BQcm9wYWdhdGlvbigpfWZvY3VzRmlyc3RJdGVtKGU9InByb2dyYW0iKXt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKCgpPT57bGV0IGk9bnVsbDtpZih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubGVuZ3RoJiYoaT10aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZmlyc3QuX2dldEhvc3RFbGVtZW50KCkuY2xvc2VzdCgnW3JvbGU9Im1lbnUiXScpKSwhaXx8IWkuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpe2xldCByPXRoaXMuX2tleU1hbmFnZXI7ci5zZXRGb2N1c09yaWdpbihlKS5zZXRGaXJzdEl0ZW1BY3RpdmUoKSwhci5hY3RpdmVJdGVtJiZpJiZpLmZvY3VzKCl9fSl9cmVzZXRBY3RpdmVJdGVtKCl7dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKX1zZXRFbGV2YXRpb24oZSl7bGV0IGk9TWF0aC5taW4odGhpcy5fYmFzZUVsZXZhdGlvbitlLDI0KSxyPWAke3RoaXMuX2VsZXZhdGlvblByZWZpeH0ke2l9YCxvPU9iamVjdC5rZXlzKHRoaXMuX2NsYXNzTGlzdCkuZmluZChzPT5zLnN0YXJ0c1dpdGgodGhpcy5fZWxldmF0aW9uUHJlZml4KSk7KCFvfHxvPT09dGhpcy5fcHJldmlvdXNFbGV2YXRpb24pJiYodGhpcy5fcHJldmlvdXNFbGV2YXRpb24mJih0aGlzLl9jbGFzc0xpc3RbdGhpcy5fcHJldmlvdXNFbGV2YXRpb25dPSExKSx0aGlzLl9jbGFzc0xpc3Rbcl09ITAsdGhpcy5fcHJldmlvdXNFbGV2YXRpb249cil9c2V0UG9zaXRpb25DbGFzc2VzKGU9dGhpcy54UG9zaXRpb24saT10aGlzLnlQb3NpdGlvbil7bGV0IHI9dGhpcy5fY2xhc3NMaXN0O3JbIm1hdC1tZW51LWJlZm9yZSJdPSJiZWZvcmUiPT09ZSxyWyJtYXQtbWVudS1hZnRlciJdPSJhZnRlciI9PT1lLHJbIm1hdC1tZW51LWFib3ZlIl09ImFib3ZlIj09PWksclsibWF0LW1lbnUtYmVsb3ciXT0iYmVsb3ciPT09aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X3N0YXJ0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0iZW50ZXIifV9yZXNldEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQifV9vbkFuaW1hdGlvbkRvbmUoZSl7dGhpcy5fYW5pbWF0aW9uRG9uZS5uZXh0KGUpLHRoaXMuX2lzQW5pbWF0aW5nPSExfV9vbkFuaW1hdGlvblN0YXJ0KGUpe3RoaXMuX2lzQW5pbWF0aW5nPSEwLCJlbnRlciI9PT1lLnRvU3RhdGUmJjA9PT10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCYmKGUuZWxlbWVudC5zY3JvbGxUb3A9MCl9X3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCl7dGhpcy5fYWxsSXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2FsbEl0ZW1zKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMucmVzZXQoZS5maWx0ZXIoaT0+aS5fcGFyZW50TWVudT09PXRoaXMpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubm90aWZ5T25DaGFuZ2VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhmZWUpLHcobm4pKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixKUGUsNSksTmkocixFYyw1KSxOaShyLEVjLDQpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmxhenlDb250ZW50PW8uZmlyc3QpLE5lKG89TGUoKSkmJihpLl9hbGxJdGVtcz1vKSxOZShvPUxlKCkpJiYoaS5pdGVtcz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50ZW1wbGF0ZVJlZj1yLmZpcnN0KX19LGlucHV0czp7YmFja2Ryb3BDbGFzczoiYmFja2Ryb3BDbGFzcyIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0seFBvc2l0aW9uOiJ4UG9zaXRpb24iLHlQb3NpdGlvbjoieVBvc2l0aW9uIixvdmVybGFwVHJpZ2dlcjoib3ZlcmxhcFRyaWdnZXIiLGhhc0JhY2tkcm9wOiJoYXNCYWNrZHJvcCIscGFuZWxDbGFzczpbImNsYXNzIiwicGFuZWxDbGFzcyJdLGNsYXNzTGlzdDoiY2xhc3NMaXN0In0sb3V0cHV0czp7Y2xvc2VkOiJjbG9zZWQiLGNsb3NlOiJjbG9zZSJ9fSksbn0pKCksSXU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIG93e2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuX2VsZXZhdGlvblByZWZpeD0ibWF0LWVsZXZhdGlvbi16Iix0aGlzLl9iYXNlRWxldmF0aW9uPTR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcocHQpLHcoZmVlKSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsbnVsbCl9LGV4cG9ydEFzOlsibWF0TWVudSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6UzUsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOmhlZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sidGFiaW5kZXgiLCItMSIsInJvbGUiLCJtZW51IiwxLCJtYXQtbWVudS1wYW5lbCIsMywiaWQiLCJuZ0NsYXNzIiwia2V5ZG93biIsImNsaWNrIl0sWzEsIm1hdC1tZW51LWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxaUGUsMyw2LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsnbWF0LW1lbnV7ZGlzcGxheTpub25lfS5tYXQtbWVudS1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDhweCk7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowO21pbi1oZWlnaHQ6NjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1tZW51LWNvbnRlbnQ6bm90KDplbXB0eSl7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1lbnUtaXRlbXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW17bWFyZ2luLXRvcDoxcHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0ubWF0LW1lbnUtc3VibWVudS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDo1cHg7aGVpZ2h0OjEwcHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtbWVudS1zdWJtZW51LWljb257cmlnaHQ6YXV0bztsZWZ0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgc2NhbGVYKC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fWJ1dHRvbi5tYXQtbWVudS1pdGVte3dpZHRoOjEwMCV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3BJLnRyYW5zZm9ybU1lbnUscEkuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG1lZT1uZXcgc2UoIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpLGlSZT17cHJvdmlkZTptZWUsZGVwczpbUWldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxwZWU9TnMoe3Bhc3NpdmU6ITB9KSxyUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2VsZW1lbnQ9aSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPXIsdGhpcy5fbWVudUl0ZW1JbnN0YW5jZT1hLHRoaXMuX2Rpcj1sLHRoaXMuX2ZvY3VzTW9uaXRvcj1jLHRoaXMuX25nWm9uZT11LHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9tZW51T3Blbj0hMSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5faGFuZGxlVG91Y2hTdGFydD1kPT57SEMoZCl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgRyx0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgRyx0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1zIGluc3RhbmNlb2Ygb3c/czp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQscGVlKSxhJiYoYS5fdHJpZ2dlcnNTdWJtZW51PXRoaXMudHJpZ2dlcnNTdWJtZW51KCkpfWdldCBfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yKCl7cmV0dXJuIHRoaXMubWVudX1zZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcihlKXt0aGlzLm1lbnU9ZX1nZXQgbWVudSgpe3JldHVybiB0aGlzLl9tZW51fXNldCBtZW51KGUpe2UhPT10aGlzLl9tZW51JiYodGhpcy5fbWVudT1lLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGUmJih0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249ZS5jbG9zZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2Rlc3Ryb3lNZW51KGkpLCgiY2xpY2siPT09aXx8InRhYiI9PT1pKSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkLmVtaXQoaSl9KSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxwZWUpLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faG92ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgbWVudU9wZW4oKXtyZXR1cm4gdGhpcy5fbWVudU9wZW59Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifXRyaWdnZXJzU3VibWVudSgpe3JldHVybiEoIXRoaXMuX21lbnVJdGVtSW5zdGFuY2V8fCF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2Ygb3cmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUob3QoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2Ygb3c/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoSGUocj0+InZvaWQiPT09ci50b1N0YXRlKSxIdCgxKSxvdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXt0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKX1fY3JlYXRlT3ZlcmxheShlKXtpZighdGhpcy5fb3ZlcmxheVJlZil7bGV0IGk9dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhlKTt0aGlzLl9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkucG9zaXRpb25TdHJhdGVneSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZShpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKX1yZXR1cm4gdGhpcy5fb3ZlcmxheVJlZn1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnQpLndpdGhMb2NrZWRQb3NpdGlvbigpLndpdGhHcm93QWZ0ZXJPcGVuKCkud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCIubWF0LW1lbnUtcGFuZWwsIC5tYXQtbWRjLW1lbnUtcGFuZWwiKSxiYWNrZHJvcENsYXNzOmUuYmFja2Ryb3BDbGFzc3x8ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIixwYW5lbENsYXNzOmUub3ZlcmxheVBhbmVsQ2xhc3Msc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxkaXJlY3Rpb246dGhpcy5fZGlyfSl9X3N1YnNjcmliZVRvUG9zaXRpb25zKGUsaSl7ZS5zZXRQb3NpdGlvbkNsYXNzZXMmJmkucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZShyPT57bGV0IG89InN0YXJ0Ij09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVg/ImFmdGVyIjoiYmVmb3JlIixzPSJ0b3AiPT09ci5jb25uZWN0aW9uUGFpci5vdmVybGF5WT8iYmVsb3ciOiJhYm92ZSI7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scykpOmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scyl9KX1fc2V0UG9zaXRpb24oZSxpKXtsZXRbcixvXT0iYmVmb3JlIj09PWUueFBvc2l0aW9uP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl0sW3MsYV09ImFib3ZlIj09PWUueVBvc2l0aW9uP1siYm90dG9tIiwidG9wIl06WyJ0b3AiLCJib3R0b20iXSxbbCxjXT1bcyxhXSxbdSxkXT1bcixvXSxwPTA7aWYodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSl7aWYoZD1yPSJiZWZvcmUiPT09ZS54UG9zaXRpb24/InN0YXJ0IjoiZW5kIixvPXU9ImVuZCI9PT1yPyJzdGFydCI6ImVuZCIsdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51KXtpZihudWxsPT10aGlzLl9wYXJlbnRJbm5lclBhZGRpbmcpe2xldCBoPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5pdGVtcy5maXJzdDt0aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc9aD9oLl9nZXRIb3N0RWxlbWVudCgpLm9mZnNldFRvcDowfXA9ImJvdHRvbSI9PT1zP3RoaXMuX3BhcmVudElubmVyUGFkZGluZzotdGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nfX1lbHNlIGUub3ZlcmxhcFRyaWdnZXJ8fChsPSJ0b3AiPT09cz8iYm90dG9tIjoidG9wIixjPSJ0b3AiPT09YT8iYm90dG9tIjoidG9wIik7aS53aXRoUG9zaXRpb25zKFt7b3JpZ2luWDpyLG9yaWdpblk6bCxvdmVybGF5WDp1LG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpvLG9yaWdpblk6bCxvdmVybGF5WDpkLG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpyLG9yaWdpblk6YyxvdmVybGF5WDp1LG92ZXJsYXlZOmEsb2Zmc2V0WTotcH0se29yaWdpblg6byxvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6LXB9XSl9X21lbnVDbG9zaW5nQWN0aW9ucygpe2xldCBlPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLGk9dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpO3JldHVybiB1bihlLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkOmp0KCksdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51P3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoSGUocz0+cyE9PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UpLEhlKCgpPT50aGlzLl9tZW51T3BlbikpOmp0KCksaSl9X2hhbmRsZU1vdXNlZG93bihlKXtWQyhlKXx8KHRoaXMuX29wZW5lZEJ5PTA9PT1lLmJ1dHRvbj8ibW91c2UiOnZvaWQgMCx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZlLnByZXZlbnREZWZhdWx0KCkpfV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZTsoMTM9PT1pfHwzMj09PWkpJiYodGhpcy5fb3BlbmVkQnk9ImtleWJvYXJkIiksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmKDM5PT09aSYmImx0ciI9PT10aGlzLmRpcnx8Mzc9PT1pJiYicnRsIj09PXRoaXMuZGlyKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIsdGhpcy5vcGVuTWVudSgpKX1faGFuZGxlQ2xpY2soZSl7dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKT8oZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9wZW5NZW51KCkpOnRoaXMudG9nZ2xlTWVudSgpfV9oYW5kbGVIb3ZlcigpeyF0aGlzLnRyaWdnZXJzU3VibWVudSgpfHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51fHwodGhpcy5faG92ZXJTdWJzY3JpcHRpb249dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShIZShlPT5lPT09dGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmIWUuZGlzYWJsZWQpLG5sKDAsZmcpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vcGVuZWRCeT0ibW91c2UiLHRoaXMubWVudSBpbnN0YW5jZW9mIG93JiZ0aGlzLm1lbnUuX2lzQW5pbWF0aW5nP3RoaXMubWVudS5fYW5pbWF0aW9uRG9uZS5waXBlKEh0KDEpLG5sKDAsZmcpLG90KHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLm9wZW5NZW51KCkpOnRoaXMub3Blbk1lbnUoKX0pKX1fZ2V0UG9ydGFsKGUpe3JldHVybighdGhpcy5fcG9ydGFsfHx0aGlzLl9wb3J0YWwudGVtcGxhdGVSZWYhPT1lLnRlbXBsYXRlUmVmKSYmKHRoaXMuX3BvcnRhbD1uZXcgaHMoZS50ZW1wbGF0ZVJlZix0aGlzLl92aWV3Q29udGFpbmVyUmVmKSksdGhpcy5fcG9ydGFsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KHlpKSx3KG1lZSksdyhTNSw4KSx3KEVjLDEwKSx3KGlyLDgpLHcoenIpLHcocHQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJnplKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVufHxudWxsKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpLFB1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyByUmV7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCIiXSxbIiIsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1lbnUtdHJpZ2dlciJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZWg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaVJlXSxpbXBvcnRzOltrZSxkbix4YyxWbyxTdSxkbl19KSxufSkoKTtmdW5jdGlvbiBvUmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDgpfWZ1bmN0aW9uIHNSZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gYVJlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwxMCl9dmFyIGhhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5ERUZBVUxUPTBdPSJERUZBVUxUIixuW24uREFSS19NT0RFX09OPTFdPSJEQVJLX01PREVfT04iLG5bbi5EQVJLX01PREVfT0ZGPTJdPSJEQVJLX01PREVfT0ZGIn0oaGF8fChoYT17fSkpLGhhKSkoKSxnZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGFya01vZGVPdmVycmlkZT1oYSx0aGlzLm9uT3ZlcnJpZGVDaGFuZ2VkPW5ldyBHfWdldEJ1dHRvblRpdGxlKCl7bGV0IGU7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBoYS5ERUZBVUxUOmU9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046ZT0iRGFyayBtb2RlIjticmVhaztjYXNlIGhhLkRBUktfTU9ERV9PRkY6ZT0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7ZX1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiXV0saW5wdXRzOntkYXJrTW9kZU92ZXJyaWRlOiJkYXJrTW9kZU92ZXJyaWRlIn0sb3V0cHV0czp7b25PdmVycmlkZUNoYW5nZWQ6Im9uT3ZlcnJpZGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIiwiTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJuZ1N3aXRjaCIsInRpdGxlIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIlNldCB0aGUgdGhlbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgbW9kZSBpbiB0aGUgYnJvd3Nlci4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBsaWdodCBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBkYXJrIFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLEUoMSxvUmUsMSwwLCJtYXQtaWNvbiIsMSksRSgyLHNSZSwxLDAsIm1hdC1pY29uIiwyKSxFKDMsYVJlLDEsMCwibWF0LWljb24iLDMpLHYoKSxnKDQsIm1hdC1tZW51IixudWxsLDQpKDYsImJ1dHRvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCl9KSxnKDcsImxhYmVsIiksRCg4LCJCcm93c2VyIGRlZmF1bHQiKSx2KCkoKSxnKDksImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRil9KSxnKDEwLCJsYWJlbCIpLEQoMTEsIkxpZ2h0IiksdigpKCksZygxMiwiYnV0dG9uIiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pfSksZygxMywibGFiZWwiKSxEKDE0LCJEYXJrIiksdigpKCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDUpKSgibmdTd2l0Y2giLGkuZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixpLmdldEJ1dHRvblRpdGxlKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkZXBlbmRlbmNpZXM6WyRuLFpuLEl1LEVjLFB1LGhyLElyXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxfZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXJrTW9kZU92ZXJyaWRlJD10aGlzLnN0b3JlLnNlbGVjdChzRCkucGlwZShCKGk9Pm51bGw9PT1pP2hhLkRFRkFVTFQ6aT9oYS5EQVJLX01PREVfT046aGEuREFSS19NT0RFX09GRikpfWNoYW5nZURhcmtNb2RlKGUpe2xldCBpPW51bGw7c3dpdGNoKGUpe2Nhc2UgaGEuREVGQVVMVDppPW51bGw7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT0ZGOmk9ITE7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046aT0hMH10aGlzLnN0b3JlLmRpc3BhdGNoKGpEKHtlbmFibGVEYXJrTW9kZTppfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImRhcmtNb2RlT3ZlcnJpZGUiLCJvbk92ZXJyaWRlQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlLWNvbXBvbmVudCIsMCksUCgib25PdmVycmlkZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmNoYW5nZURhcmtNb2RlKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJkYXJrTW9kZU92ZXJyaWRlIixXKDEsMSxpLmRhcmtNb2RlT3ZlcnJpZGUkKSl9LGRlcGVuZGVuY2llczpbZ2VlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiB1UmUobix0KXsxJm4mJk5uKDApfXZhciB4ZWU9WyIqIl07ZnVuY3Rpb24gZFJlKG4sdCl7fXZhciBwUmU9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxoUmU9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19LGZSZT1bInRhYkxpc3RDb250YWluZXIiXSxtUmU9WyJ0YWJMaXN0Il0sZ1JlPVsidGFiTGlzdElubmVyIl0sX1JlPVsibmV4dFBhZ2luYXRvciJdLHZSZT1bInByZXZpb3VzUGFnaW5hdG9yIl0seVJlPVsidGFiQm9keVdyYXBwZXIiXSxiUmU9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiB4UmUobix0KXt9ZnVuY3Rpb24gQ1JlKG4sdCl7MSZuJiZFKDAseFJlLDAsMCwibmctdGVtcGxhdGUiLDEwKSwyJm4mJmIoImNka1BvcnRhbE91dGxldCIsTSgpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiB3UmUobix0KXsxJm4mJkQoMCksMiZuJiZ5dChNKCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gTVJlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgcj1yZShlKSxvPXIuJGltcGxpY2l0LHM9ci5pbmRleCxhPU0oKSxsPXN0KDEpO3JldHVybiBvZShhLl9oYW5kbGVDbGljayhvLGwscykpfSkoImNka0ZvY3VzQ2hhbmdlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgpLl90YWJGb2N1c0NoYW5nZWQocixzKSl9KSxnKDEsImRpdiIsNyksRSgyLENSZSwxLDEsIm5nLXRlbXBsYXRlIiw4KSxFKDMsd1JlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1zdCg0KSxvPU0oKTthdCgibWF0LXRhYi1sYWJlbC1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixvLl9nZXRUYWJMYWJlbElkKGkpKSgibmdDbGFzcyIsZS5sYWJlbENsYXNzKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsZS5kaXNhYmxlZHx8by5kaXNhYmxlUmlwcGxlKSx6ZSgidGFiSW5kZXgiLG8uX2dldFRhYkluZGV4KGUsaSkpKCJhcmlhLXBvc2luc2V0IixpKzEpKCJhcmlhLXNldHNpemUiLG8uX3RhYnMubGVuZ3RoKSgiYXJpYS1jb250cm9scyIsby5fZ2V0VGFiQ29udGVudElkKGkpKSgiYXJpYS1zZWxlY3RlZCIsby5zZWxlY3RlZEluZGV4PT09aSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IiwhZS5hcmlhTGFiZWwmJmUuYXJpYUxhYmVsbGVkYnk/ZS5hcmlhTGFiZWxsZWRieTpudWxsKSx4KDIpLGIoIm5nSWYiLGUudGVtcGxhdGVMYWJlbCkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gU1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXRhYi1ib2R5IiwxMSksUCgiX29uQ2VudGVyZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fcmVtb3ZlVGFiQm9keVdyYXBwZXJIZWlnaHQoKSl9KSgiX29uQ2VudGVyaW5nIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKCk7YXQoIm1hdC10YWItYm9keS1hY3RpdmUiLHIuc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixyLl9nZXRUYWJDb250ZW50SWQoaSkpKCJuZ0NsYXNzIixlLmJvZHlDbGFzcykoImNvbnRlbnQiLGUuY29udGVudCkoInBvc2l0aW9uIixlLnBvc2l0aW9uKSgib3JpZ2luIixlLm9yaWdpbikoImFuaW1hdGlvbkR1cmF0aW9uIixyLmFuaW1hdGlvbkR1cmF0aW9uKSgicHJlc2VydmVDb250ZW50IixyLnByZXNlcnZlQ29udGVudCksemUoInRhYmluZGV4IixudWxsIT1yLmNvbnRlbnRUYWJJbmRleCYmci5zZWxlY3RlZEluZGV4PT09aT9yLmNvbnRlbnRUYWJJbmRleDpudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixyLl9nZXRUYWJMYWJlbElkKGkpKX19dmFyIEVSZT1uZXcgc2UoIk1hdElua0JhclBvc2l0aW9uZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHQ9Pih7bGVmdDp0Pyh0Lm9mZnNldExlZnR8fDApKyJweCI6IjAiLHdpZHRoOnQ/KHQub2Zmc2V0V2lkdGh8fDApKyJweCI6IjAifSl9fSksdmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2lua0JhclBvc2l0aW9uZXI9cix0aGlzLl9hbmltYXRpb25Nb2RlPW99YWxpZ25Ub0VsZW1lbnQoZSl7dGhpcy5zaG93KCksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT10aGlzLl9pbmtCYXJQb3NpdGlvbmVyKGUpLHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubGVmdD1pLmxlZnQsci5zdHlsZS53aWR0aD1pLndpZHRofSl9KX1zaG93KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifWhpZGUoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhFUmUpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaW5rLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbmstYmFyIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpfX0pLG59KSgpLERSZT1uZXcgc2UoIk1hdFRhYkNvbnRlbnQiKSxDZWU9bmV3IHNlKCJNYXRUYWJMYWJlbCIpLHdlZT1uZXcgc2UoIk1BVF9UQUIiKSxNZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGZKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX2Nsb3Nlc3RUYWI9cn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPaSksdyh5aSksdyh3ZWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLWxhYmVsIiwiIl0sWyIiLCJtYXRUYWJMYWJlbCIsIiJdXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOkNlZSx1c2VFeGlzdGluZzpufV0pLHR0XX0pLG59KSgpLEFSZT1nbyhjbGFzc3t9KSxTZWU9bmV3IHNlKCJNQVRfVEFCX0dST1VQIiksYXc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEFSZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX2Nsb3Nlc3RUYWJHcm91cD1pLHRoaXMudGV4dExhYmVsPSIiLHRoaXMuX2NvbnRlbnRQb3J0YWw9bnVsbCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFRlLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLm9yaWdpbj1udWxsLHRoaXMuaXNBY3RpdmU9ITF9Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbChlKXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fY29udGVudFBvcnRhbH1uZ09uQ2hhbmdlcyhlKXsoZS5oYXNPd25Qcm9wZXJ0eSgidGV4dExhYmVsIil8fGUuaGFzT3duUHJvcGVydHkoImRpc2FibGVkIikpJiZ0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9bmdPbkluaXQoKXt0aGlzLl9jb250ZW50UG9ydGFsPW5ldyBocyh0aGlzLl9leHBsaWNpdENvbnRlbnR8fHRoaXMuX2ltcGxpY2l0Q29udGVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKX1fc2V0VGVtcGxhdGVMYWJlbElucHV0KGUpe2UmJmUuX2Nsb3Nlc3RUYWI9PT10aGlzJiYodGhpcy5fdGVtcGxhdGVMYWJlbD1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhTZWUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKE5pKHIsQ2VlLDUpLE5pKHIsRFJlLDcsT2kpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLnRlbXBsYXRlTGFiZWw9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2V4cGxpY2l0Q29udGVudD1vLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW1wbGljaXRDb250ZW50PXIuZmlyc3QpfX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLHRleHRMYWJlbDpbImxhYmVsIiwidGV4dExhYmVsIl0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxsYWJlbENsYXNzOiJsYWJlbENsYXNzIixib2R5Q2xhc3M6ImJvZHlDbGFzcyJ9LGV4cG9ydEFzOlsibWF0VGFiIl0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTp3ZWUsdXNlRXhpc3Rpbmc6bn1dKSx0dCx6dF0sbmdDb250ZW50U2VsZWN0b3JzOnhlZSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLHVSZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxJUmU9e3RyYW5zbGF0ZVRhYjpIcigidHJhbnNsYXRlVGFiIixbRWkoImNlbnRlciwgdm9pZCwgbGVmdC1vcmlnaW4tY2VudGVyLCByaWdodC1vcmlnaW4tY2VudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSxFaSgibGVmdCIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxFaSgicmlnaHQiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxJaSgiKiA9PiBsZWZ0LCAqID0+IHJpZ2h0LCBsZWZ0ID0+IGNlbnRlciwgcmlnaHQgPT4gY2VudGVyIixWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpKSxJaSgidm9pZCA9PiBsZWZ0LW9yaWdpbi1jZW50ZXIiLFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSksSWkoInZvaWQgPT4gcmlnaHQtb3JpZ2luLWNlbnRlciIsW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksVmkoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9LFBSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQnN7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLG8pLHRoaXMuX2hvc3Q9cix0aGlzLl9jZW50ZXJpbmdTdWI9dm4uRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj12bi5FTVBUWX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5fY2VudGVyaW5nU3ViPXRoaXMuX2hvc3QuX2JlZm9yZUNlbnRlcmluZy5waXBlKFZuKHRoaXMuX2hvc3QuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5faG9zdC5fcG9zaXRpb24pKSkuc3Vic2NyaWJlKGU9PntlJiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pLHRoaXMuX2xlYXZpbmdTdWI9dGhpcy5faG9zdC5fYWZ0ZXJMZWF2aW5nQ2VudGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hvc3QucHJlc2VydmVDb250ZW50fHx0aGlzLmRldGFjaCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2NlbnRlcmluZ1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX2xlYXZpbmdTdWIudW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhFbyksdyh5aSksdyhyaSgoKT0+RWVlKSksdyhCdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJCb2R5SG9zdCIsIiJdXSxmZWF0dXJlczpbdHRdfSksbn0pKCksUlJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaXI9aSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGU9bmV3IFRlLHRoaXMuX29uQ2VudGVyaW5nPW5ldyBHLHRoaXMuX2JlZm9yZUNlbnRlcmluZz1uZXcgRyx0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXI9bmV3IEcsdGhpcy5fb25DZW50ZXJlZD1uZXcgRyghMCksdGhpcy5hbmltYXRpb25EdXJhdGlvbj0iNTAwbXMiLHRoaXMucHJlc2VydmVDb250ZW50PSExLGkmJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249aS5jaGFuZ2Uuc3Vic2NyaWJlKG89Pnt0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShvKSxyLm1hcmtGb3JDaGVjaygpfSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoZGkoKG8scyk9Pm8uZnJvbVN0YXRlPT09cy5mcm9tU3RhdGUmJm8udG9TdGF0ZT09PXMudG9TdGF0ZSkpLnN1YnNjcmliZShvPT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pfXNldCBwb3NpdGlvbihlKXt0aGlzLl9wb3NpdGlvbkluZGV4PWUsdGhpcy5fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoKX1uZ09uSW5pdCgpeyJjZW50ZXIiPT10aGlzLl9wb3NpdGlvbiYmbnVsbCE9dGhpcy5vcmlnaW4mJih0aGlzLl9wb3NpdGlvbj10aGlzLl9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKHRoaXMub3JpZ2luKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZS5jb21wbGV0ZSgpfV9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoZSl7bGV0IGk9dGhpcy5faXNDZW50ZXJQb3NpdGlvbihlLnRvU3RhdGUpO3RoaXMuX2JlZm9yZUNlbnRlcmluZy5lbWl0KGkpLGkmJnRoaXMuX29uQ2VudGVyaW5nLmVtaXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCl9X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV9pc0NlbnRlclBvc2l0aW9uKGUpe3JldHVybiJjZW50ZXIiPT1lfHwibGVmdC1vcmlnaW4tY2VudGVyIj09ZXx8InJpZ2h0LW9yaWdpbi1jZW50ZXIiPT1lfV9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShlPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpKXt0aGlzLl9wb3NpdGlvbj10aGlzLl9wb3NpdGlvbkluZGV4PDA/Imx0ciI9PWU/ImxlZnQiOiJyaWdodCI6dGhpcy5fcG9zaXRpb25JbmRleD4wPyJsdHIiPT1lPyJyaWdodCI6ImxlZnQiOiJjZW50ZXIifV9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKGUpe2xldCBpPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpO3JldHVybiJsdHIiPT1pJiZlPD0wfHwicnRsIj09aSYmZT4wPyJsZWZ0LW9yaWdpbi1jZW50ZXIiOiJyaWdodC1vcmlnaW4tY2VudGVyIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpciw4KSx3KG5uKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntfY29udGVudDpbImNvbnRlbnQiLCJfY29udGVudCJdLG9yaWdpbjoib3JpZ2luIixhbmltYXRpb25EdXJhdGlvbjoiYW5pbWF0aW9uRHVyYXRpb24iLHByZXNlcnZlQ29udGVudDoicHJlc2VydmVDb250ZW50Iixwb3NpdGlvbjoicG9zaXRpb24ifSxvdXRwdXRzOntfb25DZW50ZXJpbmc6Il9vbkNlbnRlcmluZyIsX2JlZm9yZUNlbnRlcmluZzoiX2JlZm9yZUNlbnRlcmluZyIsX2FmdGVyTGVhdmluZ0NlbnRlcjoiX2FmdGVyTGVhdmluZ0NlbnRlciIsX29uQ2VudGVyZWQ6Il9vbkNlbnRlcmVkIn19KSxufSkoKSxFZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJSZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KGlyLDgpLHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWJvZHkiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxIb3N0PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWJvZHkiXSxmZWF0dXJlczpbdHRdLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWyJjZGtTY3JvbGxhYmxlIiwiIiwxLCJtYXQtdGFiLWJvZHktY29udGVudCJdLFsiY29udGVudCIsIiJdLFsibWF0VGFiQm9keUhvc3QiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJAdHJhbnNsYXRlVGFiLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25UcmFuc2xhdGVUYWJTdGFydGVkKG8pfSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQobyl9KSxFKDIsZFJlLDAsMCwibmctdGVtcGxhdGUiLDIpLHYoKSksMiZlJiZiKCJAdHJhbnNsYXRlVGFiIix0bygzLGhSZSxpLl9wb3NpdGlvbixIbigxLHBSZSxpLmFuaW1hdGlvbkR1cmF0aW9uKSkpfSxkZXBlbmRlbmNpZXM6W1BSZV0sc3R5bGVzOlsnLm1hdC10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn0ubWF0LXRhYi1ib2R5LWNvbnRlbnRbc3R5bGUqPSJ2aXNpYmlsaXR5OiBoaWRkZW4iXXtkaXNwbGF5Om5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbSVJlLnRyYW5zbGF0ZVRhYl19fSksbn0pKCksVGVlPW5ldyBzZSgiTUFUX1RBQlNfQ09ORklHIiksT1JlPWdvKGNsYXNze30pLERlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT1Jle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPWV9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih6ZSgiYXJpYS1kaXNhYmxlZCIsISFpLmRpc2FibGVkKSxhdCgibWF0LXRhYi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx5ZWU9TnMoe3Bhc3NpdmU6ITB9KSxOUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl92aWV3cG9ydFJ1bGVyPXIsdGhpcy5fZGlyPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hbmltYXRpb25Nb2RlPWwsdGhpcy5fc2Nyb2xsRGlzdGFuY2U9MCx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITEsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPSEwLHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITAsdGhpcy5fc3RvcFNjcm9sbGluZz1uZXcgVGUsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD0wLHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4PW5ldyBHLHRoaXMuaW5kZXhGb2N1c2VkPW5ldyBHLHMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsaShlLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbGVhdmUiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N0b3BJbnRlcnZhbCgpfSl9KX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBzZWxlY3RlZEluZGV4KCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXh9c2V0IHNlbGVjdGVkSW5kZXgoZSl7ZT1QaShlKSx0aGlzLl9zZWxlY3RlZEluZGV4IT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITAsdGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSl9bmdBZnRlclZpZXdJbml0KCl7bGkodGhpcy5fcHJldmlvdXNQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiKX0pLGxpKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7bGV0IGU9dGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6anQoImx0ciIpLGk9dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTUwKSxyPSgpPT57dGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl9O3RoaXMuX2tleU1hbmFnZXI9bmV3IEFfKHRoaXMuX2l0ZW1zKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKS53aXRoSG9tZUFuZEVuZCgpLndpdGhXcmFwKCksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUociksdW4oZSxpLHRoaXMuX2l0ZW1zLmNoYW5nZXMsdGhpcy5faXRlbXNSZXNpemVkKCkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKSxyKCl9KX0pLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShvPT57dGhpcy5pbmRleEZvY3VzZWQuZW1pdChvKSx0aGlzLl9zZXRUYWJGb2N1cyhvKX0pfV9pdGVtc1Jlc2l6ZWQoKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/YW86dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2l0ZW1zKSx2aShlPT5uZXcgUXQoaT0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHI9bmV3IFJlc2l6ZU9ic2VydmVyKG89PmkubmV4dChvKSk7cmV0dXJuIGUuZm9yRWFjaChvPT5yLm9ic2VydmUoby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKSwoKT0+e3IuZGlzY29ubmVjdCgpfX0pKSksQ2EoMSksSGUoZT0+ZS5zb21lKGk9PmkuY29udGVudFJlY3Qud2lkdGg+MCYmaS5jb250ZW50UmVjdC5oZWlnaHQ+MCkpKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl90YWJMYWJlbENvdW50IT10aGlzLl9pdGVtcy5sZW5ndGgmJih0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl90YWJMYWJlbENvdW50PXRoaXMuX2l0ZW1zLmxlbmd0aCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQmJih0aGlzLl9zY3JvbGxUb0xhYmVsKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkJiYodGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nLmNvbXBsZXRlKCl9X2hhbmRsZUtleWRvd24oZSl7aWYoIU1yKGUpKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAzMjp0aGlzLmZvY3VzSW5kZXghPT10aGlzLnNlbGVjdGVkSW5kZXgmJih0aGlzLnNlbGVjdEZvY3VzZWRJbmRleC5lbWl0KHRoaXMuZm9jdXNJbmRleCksdGhpcy5faXRlbVNlbGVjdGVkKGUpKTticmVhaztkZWZhdWx0OnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfX1fb25Db250ZW50Q2hhbmdlcygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtlIT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PWV8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleChlKXshdGhpcy5faXNWYWxpZEluZGV4KGUpfHx0aGlzLmZvY3VzSW5kZXg9PT1lfHwhdGhpcy5fa2V5TWFuYWdlcnx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpfV9pc1ZhbGlkSW5kZXgoZSl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybiEwO2xldCBpPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXTpudWxsO3JldHVybiEhaSYmIWkuZGlzYWJsZWR9X3NldFRhYkZvY3VzKGUpe2lmKHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX3Njcm9sbFRvTGFiZWwoZSksdGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aCl7dGhpcy5faXRlbXMudG9BcnJheSgpW2VdLmZvY3VzKCk7bGV0IGk9dGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O2kuc2Nyb2xsTGVmdD0ibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/MDppLnNjcm9sbFdpZHRoLWkub2Zmc2V0V2lkdGh9fV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgZT10aGlzLnNjcm9sbERpc3RhbmNlLGk9Imx0ciI9PT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8tZTplO3RoaXMuX3RhYkxpc3QubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGkpfXB4KWAsKHRoaXMuX3BsYXRmb3JtLlRSSURFTlR8fHRoaXMuX3BsYXRmb3JtLkVER0UpJiYodGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ9MCl9Z2V0IHNjcm9sbERpc3RhbmNlKCl7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlfXNldCBzY3JvbGxEaXN0YW5jZShlKXt0aGlzLl9zY3JvbGxUbyhlKX1fc2Nyb2xsSGVhZGVyKGUpe3JldHVybiB0aGlzLl9zY3JvbGxUbyh0aGlzLl9zY3JvbGxEaXN0YW5jZSsoImJlZm9yZSI9PWU/LTE6MSkqdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLzMpfV9oYW5kbGVQYWdpbmF0b3JDbGljayhlKXt0aGlzLl9zdG9wSW50ZXJ2YWwoKSx0aGlzLl9zY3JvbGxIZWFkZXIoZSl9X3Njcm9sbFRvTGFiZWwoZSl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm47bGV0IGk9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW2VdOm51bGw7aWYoIWkpcmV0dXJuO2xldCBhLGwscj10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgse29mZnNldExlZnQ6byxvZmZzZXRXaWR0aDpzfT1pLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/KGE9byxsPWErcyk6KGw9dGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgtbyxhPWwtcyk7bGV0IGM9dGhpcy5zY3JvbGxEaXN0YW5jZSx1PXRoaXMuc2Nyb2xsRGlzdGFuY2UrcjthPGM/dGhpcy5zY3JvbGxEaXN0YW5jZS09Yy1hKzYwOmw+dSYmKHRoaXMuc2Nyb2xsRGlzdGFuY2UrPWwtdSs2MCl9X2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITE7ZWxzZXtsZXQgZT10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7ZXx8KHRoaXMuc2Nyb2xsRGlzdGFuY2U9MCksZSE9PXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ZX19X2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKXt0aGlzLmRpc2FibGVQYWdpbmF0aW9uP3RoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPSEwOih0aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPTA9PXRoaXMuc2Nyb2xsRGlzdGFuY2UsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuc2Nyb2xsRGlzdGFuY2U9PXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aC10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9X2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpe2xldCBlPXRoaXMuX2l0ZW1zJiZ0aGlzLl9pdGVtcy5sZW5ndGg/dGhpcy5faXRlbXMudG9BcnJheSgpW3RoaXMuc2VsZWN0ZWRJbmRleF06bnVsbCxpPWU/ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtpP3RoaXMuX2lua0Jhci5hbGlnblRvRWxlbWVudChpKTp0aGlzLl9pbmtCYXIuaGlkZSgpfV9zdG9wSW50ZXJ2YWwoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nLm5leHQoKX1faGFuZGxlUGFnaW5hdG9yUHJlc3MoZSxpKXtpJiZudWxsIT1pLmJ1dHRvbiYmMCE9PWkuYnV0dG9ufHwodGhpcy5fc3RvcEludGVydmFsKCkseGEoNjUwLDEwMCkucGlwZShvdCh1bih0aGlzLl9zdG9wU2Nyb2xsaW5nLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoKCk9PntsZXR7bWF4U2Nyb2xsRGlzdGFuY2U6cixkaXN0YW5jZTpvfT10aGlzLl9zY3JvbGxIZWFkZXIoZSk7KDA9PT1vfHxvPj1yKSYmdGhpcy5fc3RvcEludGVydmFsKCl9KSl9X3Njcm9sbFRvKGUpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJue21heFNjcm9sbERpc3RhbmNlOjAsZGlzdGFuY2U6MH07bGV0IGk9dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U9TWF0aC5tYXgoMCxNYXRoLm1pbihpLGUpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITAsdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHttYXhTY3JvbGxEaXN0YW5jZTppLGRpc3RhbmNlOnRoaXMuX3Njcm9sbERpc3RhbmNlfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhkYSksdyhpciw4KSx3KHB0KSx3KHVpKSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiJ9fSksbn0pKCksTFJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOUmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoZSxpLHIsbyxzLGEsbCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKGUpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QoZSl9X2l0ZW1TZWxlY3RlZChlKXtlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcobm4pLHcoZGEpLHcoaXIsOCksdyhwdCksdyh1aSksdyhMaSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTFJle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGRhKSx3KGlyLDgpLHcocHQpLHcodWkpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItaGVhZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsRGVlLDQpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2l0ZW1zPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodmVlLDcpLGx0KGZSZSw3KSxsdChtUmUsNyksbHQoZ1JlLDcpLGx0KF9SZSw1KSxsdCh2UmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lua0Jhcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdENvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdElubmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9uZXh0UGFnaW5hdG9yPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9wcmV2aW91c1BhZ2luYXRvcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1oZWFkZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsaS5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PWkuX2dldExheW91dERpcmVjdGlvbigpKX0saW5wdXRzOntzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4In0sb3V0cHV0czp7c2VsZWN0Rm9jdXNlZEluZGV4OiJzZWxlY3RGb2N1c2VkSW5kZXgiLGluZGV4Rm9jdXNlZDoiaW5kZXhGb2N1c2VkIn0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6eGVlLGRlY2xzOjE0LHZhcnM6MTAsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1sYWJlbHMiXSxbInRhYkxpc3RJbm5lciIsIiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koKSxnKDAsImJ1dHRvbiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLG8pfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLE4oMiwiZGl2IiwyKSx2KCksZygzLCJkaXYiLDMsNCksUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSxnKDUsImRpdiIsNSw2KSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Db250ZW50Q2hhbmdlcygpfSksZyg3LCJkaXYiLDcsOCksTm4oOSksdigpLE4oMTAsIm1hdC1pbmstYmFyIiksdigpKCksZygxMSwiYnV0dG9uIiw5LDEwKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYWZ0ZXIiLG8pfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYWZ0ZXIiKX0pKCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc3RvcEludGVydmFsKCl9KSxOKDEzLCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmUpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bnVsbCkseCg1KSxhdCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSx4KDYpLGF0KCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXIpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG51bGwpKX0sZGVwZW5kZW5jaWVzOltlcyxTXyx2ZWVdLHN0eWxlczpbIi5tYXQtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTt0b3VjaC1hY3Rpb246bm9uZTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctbGVmdDo0cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2hlaWdodDoycHg7dHJhbnNpdGlvbjo1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1sYWJlbHN7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC10YWItbGlzdC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1sYWJlbCAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWx7b3BhY2l0eToxfS5tYXQtdGFiLWxhYmVsOjpiZWZvcmV7bWFyZ2luOjVweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjcycHh9fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFZSZT0wLEhSZT1wcyhMcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksInByaW1hcnkiKSxVUmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhSZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl90YWJzPW5ldyBjbCx0aGlzLl9pbmRleFRvU2VsZWN0PTAsdGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1udWxsLHRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0PTAsdGhpcy5fdGFic1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9keW5hbWljSGVpZ2h0PSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9bnVsbCx0aGlzLmhlYWRlclBvc2l0aW9uPSJhYm92ZSIsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fcHJlc2VydmVDb250ZW50PSExLHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZT1uZXcgRyx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBHLHRoaXMuYW5pbWF0aW9uRG9uZT1uZXcgRyx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLl9ncm91cElkPVZSZSsrLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249ciYmci5hbmltYXRpb25EdXJhdGlvbj9yLmFuaW1hdGlvbkR1cmF0aW9uOiI1MDBtcyIsdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hKCFyfHxudWxsPT1yLmRpc2FibGVQYWdpbmF0aW9uKSYmci5kaXNhYmxlUGFnaW5hdGlvbix0aGlzLmR5bmFtaWNIZWlnaHQ9ISghcnx8bnVsbD09ci5keW5hbWljSGVpZ2h0KSYmci5keW5hbWljSGVpZ2h0LHRoaXMuY29udGVudFRhYkluZGV4PXI/LmNvbnRlbnRUYWJJbmRleD8/bnVsbCx0aGlzLnByZXNlcnZlQ29udGVudD0hIXI/LnByZXNlcnZlQ29udGVudH1nZXQgZHluYW1pY0hlaWdodCgpe3JldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0fXNldCBkeW5hbWljSGVpZ2h0KGUpe3RoaXMuX2R5bmFtaWNIZWlnaHQ9V3QoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXt0aGlzLl9pbmRleFRvU2VsZWN0PVBpKGUsbnVsbCl9Z2V0IGFuaW1hdGlvbkR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9ufXNldCBhbmltYXRpb25EdXJhdGlvbihlKXt0aGlzLl9hbmltYXRpb25EdXJhdGlvbj0vXlxkKyQvLnRlc3QoZSsiIik/ZSsibXMiOmV9Z2V0IGNvbnRlbnRUYWJJbmRleCgpe3JldHVybiB0aGlzLl9jb250ZW50VGFiSW5kZXh9c2V0IGNvbnRlbnRUYWJJbmRleChlKXt0aGlzLl9jb250ZW50VGFiSW5kZXg9UGkoZSxudWxsKX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBwcmVzZXJ2ZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcHJlc2VydmVDb250ZW50fXNldCBwcmVzZXJ2ZUNvbnRlbnQoZSl7dGhpcy5fcHJlc2VydmVDb250ZW50PVd0KGUpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2kuY2xhc3NMaXN0LnJlbW92ZShgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmNsYXNzTGlzdC5hZGQoYG1hdC1iYWNrZ3JvdW5kLSR7ZX1gKSx0aGlzLl9iYWNrZ3JvdW5kQ29sb3I9ZX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtsZXQgZT10aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX2NsYW1wVGFiSW5kZXgodGhpcy5faW5kZXhUb1NlbGVjdCk7aWYodGhpcy5fc2VsZWN0ZWRJbmRleCE9ZSl7bGV0IGk9bnVsbD09dGhpcy5fc2VsZWN0ZWRJbmRleDtpZighaSl7dGhpcy5zZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKTtsZXQgcj10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubWluSGVpZ2h0PXIuY2xpZW50SGVpZ2h0KyJweCJ9UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX3RhYnMuZm9yRWFjaCgocixvKT0+ci5pc0FjdGl2ZT1vPT09ZSksaXx8KHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KGUpLHRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSIiKX0pfXRoaXMuX3RhYnMuZm9yRWFjaCgoaSxyKT0+e2kucG9zaXRpb249ci1lLG51bGwhPXRoaXMuX3NlbGVjdGVkSW5kZXgmJjA9PWkucG9zaXRpb24mJiFpLm9yaWdpbiYmKGkub3JpZ2luPWUtdGhpcy5fc2VsZWN0ZWRJbmRleCl9KSx0aGlzLl9zZWxlY3RlZEluZGV4IT09ZSYmKHRoaXMuX3NlbGVjdGVkSW5kZXg9ZSx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpLHRoaXMuX3N1YnNjcmliZVRvVGFiTGFiZWxzKCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbj10aGlzLl90YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZihlPT09dGhpcy5fc2VsZWN0ZWRJbmRleCl7bGV0IHIsaT10aGlzLl90YWJzLnRvQXJyYXkoKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpZihpW29dLmlzQWN0aXZlKXt0aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX3NlbGVjdGVkSW5kZXg9byx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwscj1pW29dO2JyZWFrfSFyJiZpW2VdJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aVtlXS5pc0FjdGl2ZT0hMCx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpfSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCl7dGhpcy5fYWxsVGFicy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fYWxsVGFicykpLnN1YnNjcmliZShlPT57dGhpcy5fdGFicy5yZXNldChlLmZpbHRlcihpPT5pLl9jbG9zZXN0VGFiR3JvdXA9PT10aGlzfHwhaS5fY2xvc2VzdFRhYkdyb3VwKSksdGhpcy5fdGFicy5ub3RpZnlPbkNoYW5nZXMoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdGFicy5kZXN0cm95KCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cmVhbGlnbklua0Jhcigpe3RoaXMuX3RhYkhlYWRlciYmdGhpcy5fdGFiSGVhZGVyLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIudXBkYXRlUGFnaW5hdGlvbigpfWZvY3VzVGFiKGUpe2xldCBpPXRoaXMuX3RhYkhlYWRlcjtpJiYoaS5mb2N1c0luZGV4PWUpfV9mb2N1c0NoYW5nZWQoZSl7dGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1lLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLmluZGV4PWUsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihpLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVtlXSksaX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj11biguLi50aGlzLl90YWJzLm1hcChlPT5lLl9zdGF0ZUNoYW5nZXMpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fY2xhbXBUYWJJbmRleChlKXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heChlfHwwLDApKX1fZ2V0VGFiTGFiZWxJZChlKXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9nZXRUYWJDb250ZW50SWQoZSl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChlKXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtsZXQgaT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2kuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihpLnN0eWxlLmhlaWdodD1lKyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2xldCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9ZS5jbGllbnRIZWlnaHQsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKX1faGFuZGxlQ2xpY2soZSxpLHIpe2UuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVkSW5kZXg9aS5mb2N1c0luZGV4PXIpfV9nZXRUYWJJbmRleChlLGkpe3JldHVybiBlLmRpc2FibGVkP251bGw6aT09PSh0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4Pz90aGlzLnNlbGVjdGVkSW5kZXgpPzA6LTF9X3RhYkZvY3VzQ2hhbmdlZChlLGkpe2UmJiJtb3VzZSIhPT1lJiYidG91Y2giIT09ZSYmKHRoaXMuX3RhYkhlYWRlci5mb2N1c0luZGV4PWkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2R5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLHNlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgiLGhlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixjb250ZW50VGFiSW5kZXg6ImNvbnRlbnRUYWJJbmRleCIsZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIixwcmVzZXJ2ZUNvbnRlbnQ6InByZXNlcnZlQ29udGVudCIsYmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IifSxvdXRwdXRzOntzZWxlY3RlZEluZGV4Q2hhbmdlOiJzZWxlY3RlZEluZGV4Q2hhbmdlIixmb2N1c0NoYW5nZToiZm9jdXNDaGFuZ2UiLGFuaW1hdGlvbkRvbmU6ImFuaW1hdGlvbkRvbmUiLHNlbGVjdGVkVGFiQ2hhbmdlOiJzZWxlY3RlZFRhYkNoYW5nZSJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSxoST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVVJle2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsYXcsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYWxsVGFicz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHlSZSw1KSxsdChiUmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3RhYkJvZHlXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJIZWFkZXI9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItZ3JvdXAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLGkuZHluYW1pY0hlaWdodCkoIm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIiwiYmVsb3ciPT09aS5oZWFkZXJQb3NpdGlvbil9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6U2VlLHVzZUV4aXN0aW5nOm59XSksdHRdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWF0LXRhYi1sYWJlbC1hY3RpdmUiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtYXQtdGFiLWJvZHktd3JhcHBlciJdLFsidGFiQm9keVdyYXBwZXIiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJtYXQtdGFiLWJvZHktYWN0aXZlIiwibmdDbGFzcyIsImNvbnRlbnQiLCJwb3NpdGlvbiIsIm9yaWdpbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwicHJlc2VydmVDb250ZW50IiwiX29uQ2VudGVyZWQiLCJfb25DZW50ZXJpbmciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsInRhYiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiIsIm1hdC1yaXBwbGUiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwxLCJtYXQtdGFiLWxhYmVsIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywiaWQiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiXSxbMSwibWF0LXRhYi1sYWJlbC1jb250ZW50Il0sWzMsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidGFiVGV4dExhYmVsIiwiIl0sWzMsImNka1BvcnRhbE91dGxldCJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsInByZXNlcnZlQ29udGVudCIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtYXQtdGFiLWhlYWRlciIsMCwxKSxQKCJpbmRleEZvY3VzZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9mb2N1c0NoYW5nZWQobyl9KSgic2VsZWN0Rm9jdXNlZEluZGV4IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3RlZEluZGV4PW99KSxFKDIsTVJlLDUsMTUsImRpdiIsMiksdigpLGcoMywiZGl2IiwzLDQpLEUoNSxTUmUsMSwxMSwibWF0LXRhYi1ib2R5Iiw1KSx2KCkpLDImZSYmKGIoInNlbGVjdGVkSW5kZXgiLGkuc2VsZWN0ZWRJbmRleHx8MCkoImRpc2FibGVSaXBwbGUiLGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVQYWdpbmF0aW9uIixpLmRpc2FibGVQYWdpbmF0aW9uKSx4KDIpLGIoIm5nRm9yT2YiLGkuX3RhYnMpLHgoMSksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkseCgyKSxiKCJuZ0Zvck9mIixpLl90YWJzKSl9LGRlcGVuZGVuY2llczpbUG4seW4sWGUsQnMsZXMsJFosRGVlLEVlZSxCUmVdLHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCV9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWJvZHktd3JhcHBlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxmST0ocXAoTHMoZ28oY2xhc3N7fSkpKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZG4sd2MseGMsenAsUF8sZG5dfSksbn0pKCkpO2Z1bmN0aW9uIHpSZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25BY3RpdmVQbHVnaW5TZWxlY3Rpb24ocixvLmlkKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7emUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSx4KDEpLHFlKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIGpSZShuLHQpezEmbiYmKGcoMCwibWF0LXRhYiIsMyksRSgxLHpSZSwyLDIsIm5nLXRlbXBsYXRlIiw0KSx2KCkpLDImbiYmYigiZGlzYWJsZWQiLCF0LiRpbXBsaWNpdC5lbmFibGVkKX1mdW5jdGlvbiBHUmUobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDkpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx6ZSgiZGF0YS1wbHVnaW4taWQiLGUuaWQpLHgoMSkscWUoIiAiLGUudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gV1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDYpKDEsIm1hdC1sYWJlbCIpLEQoMiwiSW5hY3RpdmUiKSx2KCksZygzLCJtYXQtc2VsZWN0Iiw3KSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQocikpfSksRSg0LEdSZSwyLDMsIm1hdC1vcHRpb24iLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksYigidmFsdWUiLGUuc2VsZWN0ZWRQbHVnaW4pLHgoMSksYigibmdGb3JPZiIsZS5kaXNhYmxlZFBsdWdpbnMpfX12YXIgSWVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgR31nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiw0LCJuZ0lmIl0sWzMsImRpc2FibGVkIl0sWyJtYXQtdGFiLWxhYmVsIiwiIl0sWzEsInBsdWdpbi1uYW1lIiwzLCJjbGljayJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC10YWItZ3JvdXAiLDApLEUoMSxqUmUsMiwxLCJtYXQtdGFiIiwxKSx2KCksRSgyLFdSZSw1LDIsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoYigic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSx4KDEpLGIoIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucykseCgxKSxiKCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2hJLE1lZSxhdyxEdSx6XyxKcCx1YSx5bixYZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMDttYXJnaW4tdG9wOjVweDt3aWR0aDoxMzBweH1tYXQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYWN0aXZlLXBsdWdpbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59LnBsdWdpbi1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCAxMnB4O3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saXN0IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmt7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWwubWF0LXRhYi1sYWJlbC1hY3RpdmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGluay5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtvcGFjaXR5OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWRpc2FibGVke2Rpc3BsYXk6bm9uZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItbGlzdCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0iXX0pLG59KSgpLFBlZT1ZKHNfLG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLFlSZT1ZKFBlZSxuPT5uLmZpbHRlcih0PT4hdC5lbmFibGVkKSksUmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKSx0aGlzLnBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZShmbihQZWUpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKGZuKFlSZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX3Uoe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksUCgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5zIixXKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVygyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixXKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltJZWUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFFSZT1ZKHNfLGRzLChuLHQpPT4hKCF0fHwhblt0XSkmJm5bdF0uZGlzYWJsZV9yZWxvYWQpLE9lZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlbG9hZERpc2FibGVkJD10aGlzLnN0b3JlLnNlbGVjdChRUmUpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KGJLKS5waXBlKHNyKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxCKChbaSxyXSk9PiFyJiZpPT09RWUuTE9BRElORykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyl9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2woKSl9Z2V0UmVsb2FkVGl0bGUoZSl7cmV0dXJuIGU/YExhc3QgVXBkYXRlZDogJHtlfWA6IkxvYWRpbmcuLi4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1yZWxvYWQiXV0sZGVjbHM6Nix2YXJzOjEzLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDEsInJlbG9hZC1idXR0b24iLDMsInRpdGxlIiwiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInJlZnJlc2hfMjRweCIsMSwicmVmcmVzaC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRyaWdnZXJSZWxvYWQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImRhdGUiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLE4oNSwibWF0LWljb24iLDEpLHYoKSksMiZlJiYoYXQoImxvYWRpbmciLFcoMSw0LGkuaXNSZWxvYWRpbmckKSksYigidGl0bGUiLGkuZ2V0UmVsb2FkVGl0bGUobmYoMiw2LFcoMyw5LGkubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixXKDQsMTEsaS5yZWxvYWREaXNhYmxlZCQpKSl9LGRlcGVuZGVuY2llczpbJG4sWm4sZnQsVTBdLHN0eWxlczpbIi5yZWxvYWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlZnJlc2gtaWNvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnJlbG9hZC1idXR0b24ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9Il19KSxufSkoKSxrZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczo5LHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWF0LXRvb2xiYXIiKSgxLCJzcGFuIiwwKSxEKDIsIlRlbnNvckJvYXJkIiksdigpLE4oMywicGx1Z2luLXNlbGVjdG9yIiwxKSg0LCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiKSg1LCJhcHAtaGVhZGVyLXJlbG9hZCIpKDYsInNldHRpbmdzLWJ1dHRvbiIpLGcoNywiYSIsMiksTig4LCJtYXQtaWNvbiIsMyksdigpKCkpfSxkZXBlbmRlbmNpZXM6W0ZBLFpuLGVlZSxkZWUsX2VlLFJlZSxPZWVdLHN0eWxlczpbIm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlYWRtZVtfbmdjb250ZW50LSVDT01QJV0sIGFwcC1oZWFkZXItcmVsb2FkW19uZ2NvbnRlbnQtJUNPTVAlXSwgc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMCBhdXRvfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV17bGV0dGVyLXNwYWNpbmc6LTAuMDI1ZW07bWFyZ2luLWxlZnQ6MTBweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Il19KSxufSkoKSwkUmVfc2V0RG9jdW1lbnRUaXRsZT1mdW5jdGlvbihuKXtkb2N1bWVudC50aXRsZT1ufSxGZWU9KCgpPT57Y2xhc3MgbntuZ09uQ2hhbmdlcyhlKXtlLnRpdGxlJiYkUmVfc2V0RG9jdW1lbnRUaXRsZShlLnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUtY29tcG9uZW50Il1dLGlucHV0czp7dGl0bGU6InRpdGxlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTmVlPSJUZW5zb3JCb2FyZCIsTGVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jdXN0b21CcmFuZE5hbWU9aSx0aGlzLmdldEV4cGVyaW1lbnRJZCQ9dGhpcy5zdG9yZS5zZWxlY3QoJG8pLnBpcGUoQihyPT5yPy5bMF0pKSx0aGlzLmV4cGVyaW1lbnROYW1lJD10aGlzLmdldEV4cGVyaW1lbnRJZCQucGlwZShIZShCb29sZWFuKSxfbihyPT50aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOnJ9KSksQihyPT5yP3IubmFtZTpudWxsKSksdGhpcy50aXRsZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYkQpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuZXhwZXJpbWVudE5hbWUkKSxCKChbcixvLHNdKT0+e2xldCBhPXRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWU7cmV0dXJuIHIud2luZG93X3RpdGxlP3Iud2luZG93X3RpdGxlOm89PT1maS5FWFBFUklNRU5UJiZzP2Ake3N9IC0gJHthfWA6YX0pLFZuKHRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWUpLGRpKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KHBLLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwYWdlLXRpdGxlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJwYWdlLXRpdGxlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoInRpdGxlIixXKDEsMSxpLnRpdGxlJCkpfSxkZXBlbmRlbmNpZXM6W0ZlZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmdldFBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUoZm4oJGYpKSx0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpLnRmX3BhZ2luYXRlZF92aWV3fW5nT25Jbml0KCl7dGhpcy5nZXRQYWdlU2l6ZSQucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGRpKCkpLnN1YnNjcmliZShlPT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFZlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudmNSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXdlYmFwcCJdXSxkZWNsczo5LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiYXBwLWhlYWRlciIpLGcoMSwibWFpbiIpLE4oMiwicm91dGVyLW91dGxldCIpLHYoKSxOKDMsImFsZXJ0LXNuYWNrYmFyIikoNCwiaGFzaC1zdG9yYWdlIikoNSwicGFnZS10aXRsZSIpKDYsInNldHRpbmdzLXBvbHltZXItaW50ZXJvcCIpKDcsImRhcmstbW9kZS1zdXBwb3J0ZXIiKSg4LCJmZWF0dXJlLWZsYWctbW9kYWwtdHJpZ2dlciIpKX0sZGVwZW5kZW5jaWVzOltqJCxXJCxJSixxJCxYJCxrZWUsTGVlLEJlZV0sc3R5bGVzOlsiaHRtbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1ZjVmNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfWFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDAsMCwwLC4yNSk7ZmxleDowIDA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuMSl9bWFpbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30iXX0pLG59KSgpLEhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUTAsWDAsaGNdfSksbn0pKCksVWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx6ZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6QXAsdXNlQ2xhc3M6VlF9XX0pLG59KSgpLGplZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsemVlXX0pLG59KSgpLEdlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksV2VlPXtpZDpXVCxuYW1lOiIiLHN0YXJ0X3RpbWU6MH0scjJlPXdyKHtleHBlcmltZW50TWFwOntbV2VlLmlkXTpXZWV9fSk7ZnVuY3Rpb24gcWVlKG4sdCl7cmV0dXJuIEhmKHtkYXRhOnIyZX0pKG4sdCl9dmFyIFllZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShGRCxxZWUpXX0pLG59KSgpLFhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUmksSWxdfSksbn0pKCksUWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxYZWVdfSksbn0pKCksS2VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxySSxOJCxSaSwkcCxIXyxTaSxBdV19KSxufSkoKTtmdW5jdGlvbiBvMmUoKXtyZXR1cm4gWShSQyxuPT4oe2F1dG9SZWxvYWQ6bn0pKX1mdW5jdGlvbiBzMmUoKXtyZXR1cm4gWShPQyxuPT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOm59KSl9ZnVuY3Rpb24gYTJlKCl7cmV0dXJuIFkoJGYsbj0+KHtwYWdlU2l6ZTpufSkpfXZhciBtST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShmQSxuZWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcobzJlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKHMyZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhhMmUpLEtlZV19KSxufSkoKSxaZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JpLFNpLGZJLHRlZSxJbCxlaCxrZSxNbCxtSV19KSxufSkoKSxKZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe2xldCByPWUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCIuL2ljb25fYnVuZGxlLnN2ZyIpO2kuYWRkU3ZnSWNvblNldChyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSZiksUihYXykpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltTaV19KSxufSkoKSxUNT1uZXcgc2UoIltwbHVnaW5zXSBQbHVnaW4gcmVnaXN0cnkgY29uZmlnIiksJGVlPW5ldyBNYXAsUnU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZighZSlyZXR1cm47bGV0IGk9bmV3IFNldChlLm1hcChyPT5yLnBsdWdpbk5hbWUpKTtjb25zb2xlLmFzc2VydChpLnNpemU9PT1lLmxlbmd0aCwiQ2Fubm90IHJlZ2lzdGVyIHRoZSBzYW1lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcy4iKTtmb3IobGV0IHIgb2YgZSl7bGV0e3BsdWdpbk5hbWU6byxjb21wb25lbnRDbGFzczpzfT1yOyRlZS5zZXQobyxzKX19c3RhdGljIGZvclBsdWdpbihlLGkpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VDUsbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6ZSxjb21wb25lbnRDbGFzczppfX1dfX1nZXRDb21wb25lbnQoZSl7cmV0dXJuICRlZS5nZXQoZSl8fG51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVDUsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxnST0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL2RlYnVnZ2VyLXYyIn1mZXRjaFJ1bnMoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvcnVucyIpfWZldGNoRXhlY3V0aW9uRGlnZXN0cyhlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEV4ZWN1dGlvbkRhdGEoZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoZSxpLHIsbyl7aWYodm9pZCAwIT09byl0aHJvdyBuZXcgRXJyb3IoInRyYWNlX2lkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoKSB5ZXQiKTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhfZXhlY3V0aW9uL2RpZ2VzdHMiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EYXRhKGUsaSxyLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EYXRhKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kYXRhIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoT3BJbmZvKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhzL29wX2luZm8iLHtwYXJhbXM6e3J1bjplLGdyYXBoX2lkOmksb3BfbmFtZTpyfX0pfWZldGNoU291cmNlRmlsZUxpc3QoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9saXN0Iix7cGFyYW1zOntydW46ZX19KX1mZXRjaFNvdXJjZUZpbGUoZSxpKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc291cmNlX2ZpbGVzL2ZpbGUiLHtwYXJhbXM6e3J1bjplLGluZGV4OlN0cmluZyhpKX19KX1mZXRjaFN0YWNrRnJhbWVzKGUsaSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3N0YWNrX2ZyYW1lcy9zdGFja19mcmFtZXMiLHtwYXJhbXM6e3J1bjplLHN0YWNrX2ZyYW1lX2lkczppLmpvaW4oIiwiKX19KS5waXBlKEIocj0+KHtzdGFja19mcmFtZXM6ci5zdGFja19mcmFtZXMubWFwKG89PmZ1bmN0aW9uKG4pe3JldHVybntob3N0X25hbWU6blswXSxmaWxlX3BhdGg6blsxXSxsaW5lbm86blsyXSxmdW5jdGlvbl9uYW1lOm5bM119fShvKSl9KSkpfWZldGNoQWxlcnRzKGUsaSxyLG8pe2xldCBzPXtydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX07cmV0dXJuIHZvaWQgMCE9PW8mJihzLmFsZXJ0X3R5cGU9byksdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvYWxlcnRzIix7cGFyYW1zOnN9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGV0ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltnSV0saW1wb3J0czpbaV9dfSksbn0pKCksX0k9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIiksdkk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxsdz13ZSgiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIikseUk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSxiST13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHR0ZT13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIFJlcXVlc3QgRmFpbGVkIiksY3c9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIFJlcXVlc3RlZCIpLHhJPXdlKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDST13ZSgiW0RlYnVnZ2VyXSBBbGVydHMgRGF0YSBvZiBhbiBBbGVydFR5cGUgSXMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS189d2UoIltEZWJ1Z2dlcl0gQWxlcnQgVHlwZSBGb2N1cyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksd0k9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLE1JPXdlKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxTST13ZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWl89d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIExlZnR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxKXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgUmlnaHR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSwkXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGV2PXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgQmVpbmcgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksREk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksQUk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUEk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdHY9d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBMaXN0IHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbnY9d2UoIltEZWJ1Z2dlcl0gR3JhcGggRXhlY3V0aW9uIGlzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxpdj13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUkk9d2UoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPST13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgUmVxdWVzdGVkLiIpLEZJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscnY9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGluZSBJcyBGb2N1c2VkIG9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdXc9d2UoIltEZWJ1Z2dlcl0gQSBTZXQgb2YgU3RhY2sgRnJhbWVzIEhhdmUgQmVlbiBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdz0iZGVidWdnZXIiLHpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLG5bbi5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsbltuLkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsbltuLkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsbltuLkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsbltuLlNIQVBFPTVdPSJTSEFQRSIsbltuLkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLG5bbi5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLG5bbi5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifSh6b3x8KHpvPXt9KSksem8pKSgpLE91PSgoKT0+KGZ1bmN0aW9uKG4pe24uRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUPSJGdW5jdGlvblJlY29tcGlsZXNBbGVydCIsbi5JTkZfTkFOX0FMRVJUPSJJbmZOYW5BbGVydCIsbi5URU5TT1JfU0hBUEVfQUxFUlQ9IlRlbnNvclNoYXBlQWxlcnQifShPdXx8KE91PXt9KSksT3UpKSgpLHRzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWEVDVVRJT049MF09IkVYRUNVVElPTiIsbltuLkdSQVBIX09QX0NSRUFUSU9OPTFdPSJHUkFQSF9PUF9DUkVBVElPTiJ9KHRzfHwodHM9e30pKSx0cykpKCk7ZnVuY3Rpb24gb3Yobil7aWYobnVsbD09PW4uY29kZUxvY2F0aW9uRm9jdXNUeXBlKXJldHVybiBudWxsO2xldCB0PVtdO2lmKG4uY29kZUxvY2F0aW9uRm9jdXNUeXBlPT09dHMuRVhFQ1VUSU9OKXtsZXR7Zm9jdXNJbmRleDppLGV4ZWN1dGlvbkRhdGE6cn09bi5leGVjdXRpb25zO2lmKG51bGw9PT1pfHx2b2lkIDA9PT1yW2ldKXJldHVybiBudWxsO3Q9cltpXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09bi5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2xldHtncmFwaElkOmksb3BOYW1lOnJ9PW4uZ3JhcGhzLmZvY3VzZWRPcDtpZih2b2lkIDA9PT1uLmdyYXBocy5vcHNbaV18fCFuLmdyYXBocy5vcHNbaV0uaGFzKHIpKXJldHVybiBudWxsO3Q9bi5ncmFwaHMub3BzW2ldLmdldChyKS5zdGFja19mcmFtZV9pZHN9bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2lmKG51bGw9PW4uc3RhY2tGcmFtZXNbaV0pcmV0dXJuIG51bGw7ZS5wdXNoKG4uc3RhY2tGcmFtZXNbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHB3KG4sdCl7cmV0dXJuIG4uZmluZEluZGV4KGU9PmUuaG9zdF9uYW1lPT09dC5ob3N0X25hbWUmJmUuZmlsZV9wYXRoPT09dC5maWxlX3BhdGgpfWZ1bmN0aW9uIEE1KG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybiBuLmZpbmRJbmRleChpPT5pLmJlZ2luPT09dCYmaS5lbmQ9PT1lKX1mdW5jdGlvbiBCSShuKXtsZXQgdD1uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gdDtsZXQgZT1vdihuKTtpZihudWxsPT09ZSlyZXR1cm4gdDtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2ZvcihsZXQgZT1uLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgaT1uW2VdLHtob3N0X25hbWU6cixmaWxlX3BhdGg6b309aTtpZihyPT09dC5ob3N0X25hbWUmJm89PT10LmZpbGVfcGF0aClyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSx0KTtyZXR1cm4gbnVsbD09PWk/dDppfXZhciB5MmU9d3Ioe3J1bnM6e30scnVuc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYWN0aXZlUnVuSWQ6bnVsbCxsYXN0RGF0YVBvbGxPbnNldFRpbWVNczotMSxsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczoxLGFsZXJ0czp7YWxlcnRzTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxudW1BbGVydHM6MCxhbGVydHNCcmVha2Rvd246e30sYWxlcnRzOnt9LGV4ZWN1dGlvbkluZGljZXM6e30sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnt9LGZvY3VzVHlwZTpudWxsfSxleGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDo1MCxwYWdlU2l6ZToxMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxleGVjdXRpb25EaWdlc3RzOnt9LGV4ZWN1dGlvbkRhdGE6e319LGdyYXBoRXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhzOntvcHM6e30sbG9hZGluZ09wczp7fSxmb2N1c2VkT3A6bnVsbH0sc3RhY2tGcmFtZXM6e30sY29kZUxvY2F0aW9uRm9jdXNUeXBlOm51bGwsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6ITEsc291cmNlQ29kZTp7c291cmNlRmlsZUxpc3RMb2FkZWQ6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHNvdXJjZUZpbGVMaXN0OltdLGZpbGVDb250ZW50czpbXSxmb2N1c0xpbmVTcGVjOm51bGx9fSxTZSh5SSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHR0ZSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoYkksKG4se3J1bnM6dH0pPT57bGV0IGU9T2JqZWN0LmtleXModCksaT1lLmxlbmd0aD4wJiZudWxsPT09bi5hY3RpdmVSdW5JZDtyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczppP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxydW5zOnQscnVuc0xvYWRlZDp7c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxhY3RpdmVSdW5JZDplLmxlbmd0aD4wP2VbMF06bnVsbH19KSxTZShsdyxuPT4oey4uLm4sbGFzdERhdGFQb2xsT25zZXRUaW1lTXM6RGF0ZS5ub3coKX0pKSxTZShjdyxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoeEksKG4se251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgcj10Pm4uYWxlcnRzLm51bUFsZXJ0cztyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczpyP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sbnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmV9fX0pLFNlKENJLChuLHtudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZSxhbGVydFR5cGU6aSxiZWdpbjpyLGFsZXJ0czpvfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgYT17fSxsPW4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV0/bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdLGM9bi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW2ldP24uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdO2ZvcihsZXQgcD0wO3A8by5sZW5ndGg7KytwKXtsZXQgaD1yK3AsZj1vW3BdO2lmKGFbaF09ZixmLmFsZXJ0X3R5cGU9PT1PdS5JTkZfTkFOX0FMRVJUKXtsZXQgbT1mO2xbaF09bS5leGVjdXRpb25faW5kZXgsbnVsbCE9PW0uZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4JiYoY1toXT1tLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCl9fXZvaWQgMCE9PW4uYWxlcnRzLmFsZXJ0c1tpXSYmT2JqZWN0LmFzc2lnbihhLG4uYWxlcnRzLmFsZXJ0c1tpXSk7bGV0IHU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZD1uLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4O2lmKGk9PT1PdS5JTkZfTkFOX0FMRVJUJiYwPT09cil7bGV0IHA9b1swXTt1PU1hdGgubWF4KDAscC5leGVjdXRpb25faW5kZXgtTWF0aC5mbG9vcihuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKSxudWxsIT09cC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihkPXAuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX1yZXR1cm57Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp1fSxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGZvY3VzSW5kZXg6ZH0sYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LG51bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0czp7Li4ubi5hbGVydHMuYWxlcnRzLFtpXTphfSxleGVjdXRpb25JbmRpY2VzOnsuLi5uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzLFtpXTpsfSxncmFwaEV4ZWN1dGlvbkluZGljZXM6ey4uLm4uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyxbaV06Y319fX0pLFNlKEtfLChuLHthbGVydFR5cGU6dH0pPT57bGV0IGU9ey4uLm4sYWxlcnRzOnsuLi5uLmFsZXJ0cyxmb2N1c1R5cGU6bi5hbGVydHMuZm9jdXNUeXBlPT09dD9udWxsOnR9fSxpPWUuYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsIT09aSl7bGV0IHI9ZS5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXXx8W107dm9pZCAwIT09clswXSYmKGUuZXhlY3V0aW9ucz17Li4uZS5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6TWF0aC5tYXgoMCxOdW1iZXIoclswXSktTWF0aC5mbG9vcihlLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKX0pfXJldHVybiBlfSksU2Uod0ksbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoTUksKG4se251bUV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9dD5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zLHI9ey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6aT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0fX19O3JldHVybiB0PjAmJm51bGw9PT1uLmV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKHIuZXhlY3V0aW9ucy5mb2N1c0luZGV4PTApLHJ9KSxTZShTSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPVsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5sb2FkaW5nUmFuZ2VzXTtyZXR1cm4tMT09PUE1KGksdC5iZWdpbix0LmVuZCkmJmkucHVzaCh7YmVnaW46dC5iZWdpbixlbmQ6dC5lbmR9KSx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbG9hZGluZ1JhbmdlczppfX19fSksU2UoRUksKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT1bLi4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc10scj1BNShpLHQuYmVnaW4sdC5lbmQpOy0xIT09ciYmaS5zcGxpY2UociwxKTtsZXQgbz17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0Lm51bV9kaWdlc3RzLGxvYWRpbmdSYW5nZXM6aX0sZXhlY3V0aW9uRGlnZXN0czp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHN9fX07Zm9yKGxldCBzPXQuYmVnaW47czx0LmVuZDsrK3Mpby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNbc109dC5leGVjdXRpb25fZGlnZXN0c1tzLXQuYmVnaW5dO3JldHVybiB0LmVuZD50LmJlZ2luJiYoby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzPXsuLi5vLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXMsW3QuYmVnaW4vbi5leGVjdXRpb25zLnBhZ2VTaXplXTp0LmVuZC10LmJlZ2lufSksb30pLFNlKFpfLG49PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleDtyZXR1cm4gZT4wJiZlLS0sey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZX19fSksU2UoSl8sbj0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlK24uZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQrMTw9bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyYmZSsrLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmV9fX0pLFNlKCRfLChuLHQpPT57aWYodC5pbmRleDwwfHwhTnVtYmVyLmlzSW50ZWdlcih0LmluZGV4KSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIG5lZ2F0aXZlIG9yIG5vbi1pbnRlZ2VyIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSlgKTtsZXR7ZGlzcGxheUNvdW50OmV9PW4uZXhlY3V0aW9ucyx7bnVtRXhlY3V0aW9uczppfT1uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDtpZih0LmluZGV4Pk1hdGgubWF4KDAsaS1lKSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSksIHdoaWNoIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGluZGV4IChudW1FeGVjdXRpb25zPSR7aX07IGRpc3BsYXlDb3VudD0ke2V9KWApO3JldHVybnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OnQuaW5kZXh9fX0pLFNlKGV2LChuLHQpPT57bGV0IGU9ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGZvY3VzSW5kZXg6bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrdC5kaXNwbGF5SW5kZXh9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5FWEVDVVRJT04sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIGUuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUJJKGUpLGV9KSxTZShUSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EYXRhOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YX19fTtmb3IobGV0IHI9dC5iZWdpbjtyPHQuZW5kOysrcilpLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YVtyXT10LmV4ZWN1dGlvbnNbci10LmJlZ2luXTtyZXR1cm4gaX0pLFNlKERJLG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fX0pLFNlKEFJLChuLHtudW1HcmFwaEV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9dD5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMsaT17Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczplP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dH19fTtyZXR1cm4gdD4wJiZudWxsPT09bi5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKGkuZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg9MCksaX0pLFNlKElJLChuLHtwYWdlSW5kZXg6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCk7cmV0dXJuLTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KSx7Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczplfX19KSxTZShQSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldHtwYWdlU2l6ZTplfT1uLmdyYXBoRXhlY3V0aW9ucyxpPW4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpLHI9ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplc30sbz17Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhfTtmb3IobGV0IHM9dC5iZWdpbjtzPHQuZW5kOysrcyl7bGV0IGE9TWF0aC5mbG9vcihzL2UpOy0xIT09aS5pbmRleE9mKGEpJiZpLnNwbGljZShpLmluZGV4T2YoYSksMSksdm9pZCAwPT09clthXSYmKHJbYV09MCksdm9pZCAwPT09b1tzXSYmclthXSsrLG9bc109dC5ncmFwaF9leGVjdXRpb25zW3MtdC5iZWdpbl19cmV0dXJuey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6aSxncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXM6cixncmFwaEV4ZWN1dGlvbkRhdGE6b319fSksU2UodHYsKG4sdCk9PntpZih0LmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZ3JhcGgtZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KWApO3JldHVybnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp0LmluZGV4fX19KSxTZShudiwobix0KT0+cnRlKG4sdC5ncmFwaF9pZCx0Lm9wX25hbWUsdC5pbmRleCkpLFNlKGl2LChuLHQpPT5ydGUobix0LmdyYXBoX2lkLHQub3BfbmFtZSkpLFNlKFJJLChuLHQpPT57bGV0e2dyYXBoX2lkOmUsb3BfbmFtZTppfT10LHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzfX19O3JldHVybiB2b2lkIDA9PT1yLmdyYXBocy5sb2FkaW5nT3BzW2VdJiYoci5ncmFwaHMubG9hZGluZ09wc1tlXT1uZXcgTWFwKSxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLmhhcyhpKXx8ci5ncmFwaHMubG9hZGluZ09wc1tlXS5zZXQoaSxFZS5MT0FESU5HKSxyfSksU2UoT0ksKG4sdCk9PntsZXR7Z3JhcGhPcEluZm9SZXNwb25zZTplfT10LHtncmFwaF9pZHM6aX09ZSxyPWlbaS5sZW5ndGgtMV0sbz17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLG9wczp7Li4ubi5ncmFwaHMub3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLm9wc1tyXSl9LGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMubG9hZGluZ09wc1tyXSl9fX07Zm9yKGxldCBzIG9mIGUuaW5wdXRzKSFzLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQocy5vcF9uYW1lLHMuZGF0YSk7Zm9yKGxldCBzPTA7czxlLmNvbnN1bWVycy5sZW5ndGg7KytzKWZvcihsZXQgYSBvZiBlLmNvbnN1bWVyc1tzXSkhYS5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KGEub3BfbmFtZSxhLmRhdGEpO3JldHVybiBvLmdyYXBocy5vcHNbcl0uc2V0KGUub3BfbmFtZSx7Li4uZSxpbnB1dHM6ZS5pbnB1dHMubWFwKHM9Pih7b3BfbmFtZTpzLm9wX25hbWUsb3V0cHV0X3Nsb3Q6cy5vdXRwdXRfc2xvdH0pKSxjb25zdW1lcnM6ZS5jb25zdW1lcnMubWFwKHM9PnMubWFwKGE9Pih7b3BfbmFtZTphLm9wX25hbWUsaW5wdXRfc2xvdDphLmlucHV0X3Nsb3R9KSkpfSksby5ncmFwaHMubG9hZGluZ09wc1tyXS5zZXQoZS5vcF9uYW1lLEVlLkxPQURFRCksb30pLFNlKGtJLG49Pih7Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FESU5HfX19KSksU2UoRkksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHNvdXJjZUZpbGVMaXN0OnQuc291cmNlRmlsZXMsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dC5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czpyfT1lLnNvdXJjZUNvZGU7Zm9yKGxldCBvPTA7bzxpOysrbylyW29dPW4uc291cmNlQ29kZS5maWxlQ29udGVudHNbb10/P3tsb2FkU3RhdGU6RWUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gZX0pLFNlKHJ2LChuLHQpPT57bGV0IGU9b3YobiksaT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZm9jdXNMaW5lU3BlYzp0LnN0YWNrRnJhbWV9fTtyZXR1cm4gbnVsbCE9PWUmJihpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9LTEsaT0tMTtpZihuLmZvckVhY2goKHtmaWxlX3BhdGg6cixsaW5lbm86b30scyk9PntyPT09dC5maWxlX3BhdGgmJihpPXMsbz09PXQubGluZW5vJiYoZT1zKSl9KSwtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KHQpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIGU9PT1pfShlLHQuc3RhY2tGcmFtZSkpLGl9KSxTZShOSSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT1wdyhlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEsey4uLmUuc291cmNlQ29kZS5maWxlQ29udGVudHNbaV0sbG9hZFN0YXRlOkVlLkxPQURJTkd9KSxlfSksU2UoTEksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9cHcoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHtsb2FkU3RhdGU6RWUuTE9BREVELGxpbmVzOnQubGluZXN9KSxlfSksU2UodXcsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixzdGFja0ZyYW1lczp7Li4ubi5zdGFja0ZyYW1lcywuLi50LnN0YWNrRnJhbWVzfSxzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9QkkoaSksaX0pKTtmdW5jdGlvbiBydGUobix0LGUsaSl7bGV0IHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxmb2N1c2VkT3A6e2dyYXBoSWQ6dCxvcE5hbWU6ZX19LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5HUkFQSF9PUF9DUkVBVElPTixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gci5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Qkkociksdm9pZCAwIT09aSYmKHIuZ3JhcGhFeGVjdXRpb25zPXsuLi5uLmdyYXBoRXhlY3V0aW9ucyxmb2N1c0luZGV4Oml9KSxyfWZ1bmN0aW9uIG90ZShuLHQpe3JldHVybiB5MmUobix0KX12YXIgam89UHIoZHcpLGZtPVkoam8sbj0+bi5ydW5zKSxJNT1ZKGpvLG49Pm4ucnVuc0xvYWRlZCksbXM9WShqbyxuPT5uLmFjdGl2ZVJ1bklkKSxzdGU9WShqbyxuPT5uLmxhc3REYXRhUG9sbE9uc2V0VGltZU1zLW4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMpLHN2PVkoam8sbj0+bi5hbGVydHMpLFA1PVkoc3Ysbj0+bi5hbGVydHNMb2FkZWQpLGF0ZT1ZKHN2LG49Pm4ubnVtQWxlcnRzKSxWST1ZKHN2LG49Pm4uZm9jdXNUeXBlKSxsdGU9WShzdixuPT5udWxsPT09bi5mb2N1c1R5cGU/MDpuLmFsZXJ0c0JyZWFrZG93bltuLmZvY3VzVHlwZV18fDApLGN0ZT1ZKHN2LG49Pm51bGw9PT1uLmZvY3VzVHlwZXx8dm9pZCAwPT09bi5hbGVydHNbbi5mb2N1c1R5cGVdP251bGw6bi5hbGVydHNbbi5mb2N1c1R5cGVdKSx1dGU9WShzdixuPT5uLmFsZXJ0c0JyZWFrZG93biksbW09WShqbyxuPT5uLmV4ZWN1dGlvbnMpLEhJPVkobW0sbj0+bi5udW1FeGVjdXRpb25zTG9hZGVkKSxodz1ZKG1tLG49Pm4uZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCksdGg9WShtbSxuPT5uLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyksZnc9WShtbSxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGF2PVkobW0sbj0+bi5wYWdlU2l6ZSksbHY9WShtbSxuPT5uLmRpc3BsYXlDb3VudCksZHRlPVkobW0sbj0+e2xldCB0PVtdO2ZvcihsZXQgZT1uLnNjcm9sbEJlZ2luSW5kZXg7ZTxuLnNjcm9sbEJlZ2luSW5kZXgrbi5kaXNwbGF5Q291bnQ7KytlKXQucHVzaChlIGluIG4uZXhlY3V0aW9uRGlnZXN0cz9uLmV4ZWN1dGlvbkRpZ2VzdHNbZV06bnVsbCk7cmV0dXJuIHR9KSxuaD1ZKGpvLG49Pm4uZ3JhcGhFeGVjdXRpb25zKSxwdGU9WShuaCxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLG13PVkoam8sbj0+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxodGU9WShuaCxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGZ0ZT1ZKG5oLG49Pm4uZGlzcGxheUNvdW50KSxtdGU9WShuaCxuPT5uLnBhZ2VTaXplKSxndGU9WShuaCxuPT5uLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcyksX3RlPVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXMpLFI1PVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGEpLE81PVkobmgsbj0+bi5mb2N1c0luZGV4KSxrNT1ZKGpvLG49Pm4uZ3JhcGhzKSxGNT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF0/bnVsbDplW3QuZ3JhcGhJZF0uZ2V0KHQub3BOYW1lKXx8bnVsbH0pLE41PVkoazUsbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7aW5wdXRzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+e2xldCBzPXsuLi5vfTtyZXR1cm4gaS5oYXMoby5vcF9uYW1lKSYmKHMuZGF0YT1pLmdldChvLm9wX25hbWUpKSxzfSl9fSksdnRlPVkoTzUsUjUsTjUsKG4sdCxlKT0+e2lmKG51bGw9PT1ufHxudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgaT1lLm1hcChhPT4hMSkscj1bXTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHI7bGV0IG89dFtuXS5ncmFwaF9pZCxzPU1hdGgubWF4KDAsbi0yMDApO2ZvcihsZXQgYT1uLTE7YT49czstLWEpaWYodm9pZCAwIT09dFthXSlmb3IobGV0IGw9MDtsPGUubGVuZ3RoJiYoaVtsXXx8dFthXS5ncmFwaF9pZCE9PW98fHRbYV0ub3BfbmFtZSE9PWVbbF0ub3BfbmFtZXx8dFthXS5vdXRwdXRfc2xvdCE9PWVbbF0ub3V0cHV0X3Nsb3R8fChyLnB1c2goYSksaVtsXT0hMCxyLmxlbmd0aCE9PWUubGVuZ3RoKSk7KytsKTtyZXR1cm4gcn0pLHl0ZT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2NvbnN1bWVyczpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89Pm8ubWFwKHM9PntsZXQgYT17Li4uc307cmV0dXJuIGkuaGFzKHMub3BfbmFtZSkmJihhLmRhdGE9aS5nZXQocy5vcF9uYW1lKSksYX0pKX19KSxidGU9WShqbyxuPT57bGV0IHQ9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCtuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LGk9bmV3IEFycmF5KGUtdCkuZmlsbChudWxsKSxyPW4uYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09cilyZXR1cm4gaTtsZXQgbz1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW3JdO2lmKHZvaWQgMD09PW8pcmV0dXJuIGk7Zm9yKGxldCBzPXQ7czxlOysrcylvLmluY2x1ZGVzKHMpJiYoaVtzLXRdPW4uYWxlcnRzLmZvY3VzVHlwZSk7cmV0dXJuIGl9KSxVST1ZKGpvLG49Pm4uZXhlY3V0aW9ucyksTDU9WShVSSxuPT5uLmZvY3VzSW5kZXgpLHh0ZT1ZKFVJLG49PntpZihudWxsPT09bi5mb2N1c0luZGV4KXJldHVybiBudWxsO2xldHtmb2N1c0luZGV4OnQsc2Nyb2xsQmVnaW5JbmRleDplLGRpc3BsYXlDb3VudDppfT1uO3JldHVybiB0PGV8fHQ+PWUraT9udWxsOnQtZX0pLEI1PVkoVUksbj0+bi5leGVjdXRpb25EYXRhKSxDdGU9WShqbyxuPT5uLmdyYXBocy5sb2FkaW5nT3BzKSxWNT1ZKGpvLG49Pm4uc3RhY2tGcmFtZXMpLGdtPVkoVUksbj0+e2xldHtmb2N1c0luZGV4OnQsZXhlY3V0aW9uRGF0YTplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0XT9udWxsOmVbdF19KSxndz1ZKGpvLEw1LGdtLEY1LChuLHQsZSxpKT0+e2xldHtjb2RlTG9jYXRpb25Gb2N1c1R5cGU6cn09bjtyZXR1cm4gbnVsbD09PXI/bnVsbDpyPT09dHMuRVhFQ1VUSU9OP251bGw9PT10fHxudWxsPT09ZT9udWxsOntjb2RlTG9jYXRpb25UeXBlOnRzLkVYRUNVVElPTixvcFR5cGU6ZS5vcF90eXBlLGV4ZWN1dGlvbkluZGV4OnR9Om51bGw9PT1pP251bGw6e2NvZGVMb2NhdGlvblR5cGU6dHMuR1JBUEhfT1BfQ1JFQVRJT04sb3BUeXBlOmkub3BfdHlwZSxvcE5hbWU6aS5vcF9uYW1lfX0pLHd0ZT1ZKGpvLG92KSx6ST1ZKGpvLG49Pm4uc291cmNlQ29kZSksTXRlPVkoekksbj0+bi5zb3VyY2VGaWxlTGlzdExvYWRlZCksSDU9KFkoekksbj0+bi5zb3VyY2VGaWxlTGlzdCksWSh6SSxuPT57bGV0e3NvdXJjZUZpbGVMaXN0OnQsZm9jdXNMaW5lU3BlYzplfT1uO3JldHVybiBudWxsPT09ZT8tMTpwdyh0LGUpfSkpLGpJPVkoekksSDUsKG4sdCk9Pi0xPT09dD9udWxsOm4uZmlsZUNvbnRlbnRzW3RdfHxudWxsKSxHST1ZKGpvLG49Pm4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjKSxTdGU9WShqbyxuPT5uLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlKSxFdGU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiB4MmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLm9uVG9nZ2xlRm9jdXNUeXBlLmVtaXQoby50eXBlKSl9KSxnKDEsImRpdiIsOCksRCgyKSx2KCksZygzLCJkaXYiLDkpLEQoNCksdigpLE4oNSwiZGl2IiksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7YigibmdDbGFzcyIsSG4oNCxFdGUsZS50eXBlPT09aS5mb2N1c1R5cGU/ImZvY3VzIjoiIikpLHgoMikseXQoZS5kaXNwbGF5TmFtZSkseCgyKSxhcCgiICIsZS5kaXNwbGF5U3ltYm9sLCI6ICIsZS5jb3VudCwiICIpfX12YXIgVHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnRzLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFsZXJ0czoibnVtQWxlcnRzIixhbGVydHNCcmVha2Rvd246ImFsZXJ0c0JyZWFrZG93biIsZm9jdXNUeXBlOiJmb2N1c1R5cGUifSxvdXRwdXRzOntvblRvZ2dsZUZvY3VzVHlwZToib25Ub2dnbGVGb2N1c1R5cGUifSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMSwiYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJkZWJ1Z2dpbmctdGl0bGUiXSxbMSwibnVtLWFsZXJ0cy1jb250YWluZXIiXSxbMSwibnVtLWFsZXJ0cy1sYWJlbCJdLFsxLCJudW0tYWxlcnRzLXZhbHVlIiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyIl0sWyJjbGFzcyIsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYWxlcnQtdHlwZS1uYW1lIl0sWzEsImFsZXJ0LXR5cGUtY291bnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxEKDIsIkRlYnVnZ2luZyIpLHYoKSxnKDMsImRpdiIsMikoNCwiZGl2IiwzKSxEKDUsIkFsZXJ0cyIpLHYoKSxnKDYsImRpdiIsNCksRCg3KSx2KCkoKSxnKDgsImRpdiIsNSksRSg5LHgyZSw2LDYsImRpdiIsNiksdigpKCkpLDImZSYmKHgoNiksYigibmdDbGFzcyIsSG4oMyxFdGUsaS5udW1BbGVydHM+MD8ibm9uLXplcm8iOiIiKSkseCgxKSxxZSgiICIsaS5udW1BbGVydHMsIiAiKSx4KDIpLGIoIm5nRm9yT2YiLGkuYWxlcnRzQnJlYWtkb3duKSl9LGRlcGVuZGVuY2llczpbUG4seW5dLHN0eWxlczpbIi5hbGVydHMtYnJlYWtkb3duLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMCAxMHB4IDEwcHggMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiA2cHggMCA2cHggNTBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZS5mb2N1c1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWUwO1xufVxuXG4uYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90bycsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG59XG5cbi5hbGVydC10eXBlLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0LXR5cGUtbmFtZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRlYnVnZ2luZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDE4cHg7XG59XG5cbi5udW0tYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHggMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubnVtLWFsZXJ0cy1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAyNHB4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZS5ub24temVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiNzgwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn0iXX0pLG59KSgpLHcyZT17W091LkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJGdW5jdGlvbiByZWNvbXBpbGVzIixkaXNwbGF5U3ltYm9sOiJDIn0sW091LklORl9OQU5fQUxFUlRdOntkaXNwbGF5TmFtZToiTmFOL1x1MjIxZSIsZGlzcGxheVN5bWJvbDoiXHUyMjFlIn0sW091LlRFTlNPUl9TSEFQRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJUZW5zb3Igc2hhcGUiLGRpc3BsYXlTeW1ib2w6Ilx1MjVhMCJ9fSxEdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZShmbihhdGUpKSx0aGlzLmFsZXJ0c0JyZWFrZG93biQ9dGhpcy5zdG9yZS5waXBlKGZuKFkodXRlLGk9PntsZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gci5zb3J0KCksci5tYXAobz0+KHt0eXBlOm8sLi4udzJlW29dLGNvdW50Omlbb119KSl9KSkpLHRoaXMuZm9jdXNUeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oVkkpKX1vblRvZ2dsZUZvY3VzVHlwZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEtfKHthbGVydFR5cGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJudW1BbGVydHMiLCJhbGVydHNCcmVha2Rvd24iLCJmb2N1c1R5cGUiLCJvblRvZ2dsZUZvY3VzVHlwZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYWxlcnRzLWNvbXBvbmVudCIsMCksUCgib25Ub2dnbGVGb2N1c1R5cGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVG9nZ2xlRm9jdXNUeXBlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUFsZXJ0cyIsVygxLDMsaS5udW1BbGVydHMkKSkoImFsZXJ0c0JyZWFrZG93biIsVygyLDUsaS5hbGVydHNCcmVha2Rvd24kKSkoImZvY3VzVHlwZSIsVygzLDcsaS5mb2N1c1R5cGUkKSl9LGRlcGVuZGVuY2llczpbVHRlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxfdz17MTk6ImZsb2F0MTYiLDE6ImZsb2F0MzIiLDI6ImZsb2F0NjQiLDM6ImludDMyIiw0OiJ1aW50OCIsMTc6InVpbnQxNiIsMjI6InVpbnQzMiIsMjM6InVpbnQ2NCIsNToiaW50MTYiLDY6ImludDgiLDc6InN0cmluZyIsODoiY29tcGxleDY0IiwxODoiY29tcGxleDEyOCIsOToiaW50NjQiLDEwOiJib29sIiwxMToicWludDgiLDEyOiJxdWludDgiLDE1OiJxaW50MTYiLDE2OiJxdWludDE2IiwxMzoicWludDMyIiwxNDoiYmZsb2F0MTYiLDIwOiJyZXNvdXJjZSIsMjE6InZhcmlhbnQiLDExOToiZmxvYXQxNl9yZWYiLDEwMToiZmxvYXQzMl9yZWYiLDEwMjoiZmxvYXQ2NF9yZWYiLDEwMzoiaW50MzJfcmVmIiwxMjI6InVpbnQzMl9yZWYiLDEwNDoidWludDhfcmVmIiwxMTc6InVpbnQxNl9yZWYiLDEwNToiaW50MTZfcmVmIiwxMDY6ImludDhfcmVmIiwxMDc6InN0cmluZ19yZWYiLDEwODoiY29tcGxleDY0X3JlZiIsMTE4OiJjb21wbGV4MTI4X3JlZiIsMTA5OiJpbnQ2NF9yZWYiLDEyMzoidWludDY0X3JlZiIsMTEwOiJib29sX3JlZiIsMTExOiJxaW50OF9yZWYiLDExMjoicXVpbnQ4X3JlZiIsMTE1OiJxaW50MTZfcmVmIiwxMTY6InF1aW50MTZfcmVmIiwxMTM6InFpbnQzMl9yZWYiLDExNDoiYmZsb2F0MTZfcmVmIiwxMjA6InJlc291cmNlX3JlZiIsMTIxOiJ2YXJpYW50X3JlZiJ9O2Z1bmN0aW9uIFdJKG4pe2xldHt0ZW5zb3JEZWJ1Z01vZGU6dCxhcnJheTplfT1uO3N3aXRjaCh0KXtjYXNlIHpvLk5PX1RFTlNPUjppZihudWxsIT09ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIHpvLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1lfHwyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKGVbMV0pfTtjYXNlIHpvLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09ZXx8NSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT17c2l6ZTplWzFdfTtyZXR1cm4gZVsyXT4wJiYoaS5udW1OZWdhdGl2ZUluZnM9ZVsyXSksZVszXT4wJiYoaS5udW1Qb3NpdGl2ZUluZnM9ZVszXSksZVs0XT4wJiYoaS5udW1OYU5zPWVbNF0pLGl9Y2FzZSB6by5TSEFQRTp7aWYobnVsbD09PWV8fDEwIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBTSEFQRSBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTAsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT1lWzJdLHI9ZS5zbGljZSg0LE1hdGgubWluKDQraSxlLmxlbmd0aCkpO3JldHVybiByLmxlbmd0aDxpJiYocj1uZXcgQXJyYXkoaS1yLmxlbmd0aCkuY29uY2F0KHIpKSx7ZHR5cGU6X3dbZVsxXV0scmFuazppLHNpemU6ZVszXSxzaGFwZTpyfX1jYXNlIHpvLkZVTExfSEVBTFRIOntpZihudWxsPT09ZXx8MTEhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIEZVTExfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMSwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO2xldCByPXtkdHlwZTpfd1tlWzJdXSxyYW5rOmVbM10sc2l6ZTplWzRdfTtyZXR1cm4gZVs1XT4wJiYoci5udW1OZWdhdGl2ZUluZnM9ZVs1XSksZVs2XT4wJiYoci5udW1Qb3NpdGl2ZUluZnM9ZVs2XSksZVs3XT4wJiYoci5udW1OYU5zPWVbN10pLGVbOF0+MCYmKHIubnVtTmVnYXRpdmVGaW5pdGVzPWVbOF0pLGVbOV0+MCYmKHIubnVtWmVyb3M9ZVs5XSksZVsxMF0+MCYmKHIubnVtUG9zaXRpdmVGaW5pdGVzPWVbMTBdKSxyfWNhc2Ugem8uRlVMTF9URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIEZVTExfVEVOU09SIG1vZGUiKTtyZXR1cm57fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHRlbnNvckRlYnVnTW9kZTogJHt0fWApfX12YXIgVTU9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gUzJlKG4sdCl7MSZuJiZOKDAsImRpdiIsNCl9ZnVuY3Rpb24gRTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDgpLEQoMiwiTmFOIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtTmFOcywiIil9fWZ1bmN0aW9uIFQyZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxEKDIsIi1cdTIyMWUiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUluZnMsIiIpfX1mdW5jdGlvbiBEMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsOCksRCgyLCIrXHUyMjFlIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gQTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIi0iKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBJMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsMTApLEQoMiwiMCIpLHYoKSxnKDMsInNwYW4iLDkpLEQoNCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDQpLHFlKCJceGQ3IixlLm51bVplcm9zLCIiKX19ZnVuY3Rpb24gUDJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIisiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBSMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSksRSgxLEUyZSw1LDEsImRpdiIsNiksRSgyLFQyZSw1LDEsImRpdiIsNiksRSgzLEQyZSw1LDEsImRpdiIsNiksRSg0LEEyZSw1LDEsImRpdiIsNiksRSg1LEkyZSw1LDEsImRpdiIsNiksRSg2LFAyZSw1LDEsImRpdiIsNiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmFOcyYmZS5udW1OYU5zPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUluZnMmJmUubnVtTmVnYXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1Qb3NpdGl2ZUluZnMmJmUubnVtUG9zaXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUZpbml0ZXMmJmUubnVtTmVnYXRpdmVGaW5pdGVzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1aZXJvcyYmZS5udW1aZXJvcz4wKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVGaW5pdGVzJiZlLm51bVBvc2l0aXZlRmluaXRlcz4wKX19dmFyIE8yZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbnRhaW5lciIsbl19O2Z1bmN0aW9uIGsyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDUpLDImbiYmYigiZHR5cGUiLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmR0eXBlKX1mdW5jdGlvbiBGMmUobix0KXsxJm4mJk4oMCwiZGVidWctdGVuc29yLXJhbmsiLDYpLDImbiYmYigicmFuayIsTSgpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gTjJlKG4sdCl7MSZuJiZOKDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZuJiZiKCJzaGFwZSIsTSgpLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpfWZ1bmN0aW9uIEwyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDgpLDImbiYmYigiaGFzSW5mT3JOYU4iLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKX1mdW5jdGlvbiBCMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw5KSwyJm4pe2xldCBlPU0oKTt4cigic2l6ZSIsZS5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpLGIoIm51bU5lZ2F0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcykoIm51bVBvc2l0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcykoIm51bU5hTnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zKSgibnVtTmVnYXRpdmVGaW5pdGVzIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzKSgibnVtWmVyb3MiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcykoIm51bVBvc2l0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyl9fXZhciBWMmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiICIsaS5kdHlwZSwiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLEgyZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRCgwKSwyJmUmJnFlKCIgIixpLnJhbmssIkQgIil9LHN0eWxlczpbVTVdfSksbn0pKCksVTJlPSgoKT0+e2NsYXNzIG57Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKGU9PnZvaWQgMD09PWU/Ij8iOlN0cmluZyhlKSkuam9pbigiLCIpKyJdIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiIHNoYXBlOiIsaS5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLHoyZT0oKCk9PntjbGFzcyBue2dldCBicmVha2Rvd25FeGlzdHMoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5udW1OYU5zfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVGaW5pdGVzfHx2b2lkIDAhPT10aGlzLm51bVplcm9zfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlRmluaXRlc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJzcGFuIiksRCgyLCJzaXplOiIpLHYoKSxnKDMsInNwYW4iLDEpLEQoNCksdigpKCksRSg1LFMyZSwxLDAsImRpdiIsMiksRSg2LFIyZSw3LDYsImRpdiIsMykpLDImZSYmKHgoNCkseXQoaS5zaXplKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSl9LGRlcGVuZGVuY2llczpbWGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnNpemVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIG1hcmdpbjogMCAzcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuYnJlYWtkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnlbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIGhlaWd0aDogMTAwJTtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5LXRhZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgICAgfVxuICAgICAgLmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH0iXX0pLG59KSgpLGoyZT0oKCk9PntjbGFzcyBue2dldCBpbmZvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaGFzSW5mT3JOYU4/IkhhcyBcdTIyMWUvTmFOIjoiTm8gXHUyMjFlL05hTiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRCgxKSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLEhuKDIsTzJlLGkuaGFzSW5mT3JOYU4/Imhhcy1pbmYtb3ItbmFuIjoiIikpLHgoMSkscWUoIiAiLGkuaW5mb1N0cmluZywiICIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuaGFzLWluZi1vci1uYW5bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxxST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxrMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDApLEUoMSxGMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItcmFuayIsMSksRSgyLE4yZSwxLDEsImRlYnVnLXRlbnNvci1zaGFwZSIsMiksRSgzLEwyZSwxLDEsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsMyksRSg0LEIyZSwxLDcsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsNCkpLDImZSYmKGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUucmFuaykseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpLHgoMSksYigibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSl9LGRlcGVuZGVuY2llczpbWGUsVjJlLGoyZSx6MmUsSDJlLFUyZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBHMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTIpLEQoMSwiXHUyNWI2IiksdigpKX12YXIgVzJlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBxMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oMik7YigiZGVidWdUZW5zb3JWYWx1ZSIsaS5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMSxXMmUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0udGVuc29yX2RlYnVnX21vZGUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKSkpfX1mdW5jdGlvbiBZMmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSgxLCJkaXYiLDEzKSgyLCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0LG89TSgyKTtyZXR1cm4gb2Uoby5vblRlbnNvck5hbWVDbGljay5lbWl0KHtpbmRleDpyLGdyYXBoX2lkOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLmdyYXBoX2lkLG9wX25hbWU6by5ncmFwaEV4ZWN1dGlvbkRhdGFbcl0ub3BfbmFtZX0pKX0pLEQoMyksdigpLGcoNCwiZGl2IiwxNSksRCg1KSx2KCkoKSxFKDYscTJlLDEsNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNiksdigpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7eCgyKSx4cigidGl0bGUiLGkuZ2V0VGVuc29yTmFtZShlKSkseCgxKSxxZSgiICIsaS5nZXRUZW5zb3JOYW1lKGUpLCIgIikseCgyKSx5dChpLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF90eXBlKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5kZWJ1Z190ZW5zb3JfdmFsdWUpfX1mdW5jdGlvbiBYMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTgpLEQoMSwiIExvYWRpbmcuLi4gIiksdigpKX12YXIgUTJlPWZ1bmN0aW9uKG4pe3JldHVybnsiaW5wdXQtb2YtZm9jdXMiOm59fTtmdW5jdGlvbiBLMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSgyLCJkaXYiLDcpLEUoMyxHMmUsMiwwLCJkaXYiLDgpLEQoNCksdigpLEUoNSxZMmUsNyw0LCJkaXYiLDkpLEUoNixYMmUsMiwwLCJuZy10ZW1wbGF0ZSIsMTAsMTEsZW4pLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoNykscj1NKDIpO3goMSksYigibmdDbGFzcyIsSG4oNSxRMmUsci5pc0lucHV0T2ZGb2N1cyhlKSkpLHgoMiksYigibmdJZiIsZT09PXIuZm9jdXNJbmRleCkseCgxKSxxZSgiICIsZSwiICIpLHgoMSksYigibmdJZiIsci5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0pKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIFoyZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMyksUCgic2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChyKSl9KSxFKDEsSzJlLDgsNywiZGl2Iiw0KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJjZGtWaXJ0dWFsRm9yT2YiLGUuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19dmFyIEl0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblNjcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IEcsdGhpcy5vblRlbnNvck5hbWVDbGljaz1uZXcgRyx0aGlzLnBhcnNlRGVidWdUZW5zb3JWYWx1ZT1XSSx0aGlzLlRFU1RfT05MWT17Z2V0Vmlld1BvcnQ6KCk9PnRoaXMudmlld1BvcnR9fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMudmlld1BvcnQmJmUuZm9jdXNJbmRleCYmbnVsbCE9PWUuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUpe2xldCBpPXRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLHI9ZS5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSxvPU1hdGgucm91bmQoKGkuZW5kLWkuc3RhcnQpLzMpLHM9TWF0aC5tYXgoci1vLDApO3RoaXMudmlld1BvcnQuc2Nyb2xsVG9JbmRleChzLHI+PWkuc3RhcnQmJnI8aS5lbmQ/InNtb290aCI6dm9pZCAwKX19Z2V0VGVuc29yTmFtZShlKXtyZXR1cm5gJHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF9uYW1lfToke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm91dHB1dF9zbG90fWB9aXNJbnB1dE9mRm9jdXMoZSl7cmV0dXJuIG51bGwhPT10aGlzLmZvY3VzSW5wdXRJbmRpY2VzJiZ0aGlzLmZvY3VzSW5wdXRJbmRpY2VzLmluY2x1ZGVzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHFDLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkudmlld1BvcnQ9ci5maXJzdCl9fSxpbnB1dHM6e251bUdyYXBoRXhlY3V0aW9uczoibnVtR3JhcGhFeGVjdXRpb25zIixncmFwaEV4ZWN1dGlvbkRhdGE6ImdyYXBoRXhlY3V0aW9uRGF0YSIsZ3JhcGhFeGVjdXRpb25JbmRpY2VzOiJncmFwaEV4ZWN1dGlvbkluZGljZXMiLGZvY3VzSW5kZXg6ImZvY3VzSW5kZXgiLGZvY3VzSW5wdXRJbmRpY2VzOiJmb2N1c0lucHV0SW5kaWNlcyJ9LG91dHB1dHM6e29uU2Nyb2xsZWRJbmRleENoYW5nZToib25TY3JvbGxlZEluZGV4Q2hhbmdlIixvblRlbnNvck5hbWVDbGljazoib25UZW5zb3JOYW1lQ2xpY2sifSxmZWF0dXJlczpbenRdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyIl0sWzEsImdyYXBoLWV4ZWN1dGlvbnMtdGl0bGUiXSxbIml0ZW1TaXplIiwiMzgiLCJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiLDQsIm5nSWYiXSxbIml0ZW1TaXplIiwiMzgiLDEsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiXSxbImNsYXNzIiwidGVuc29yLWNvbnRhaW5lciIsNCwiY2RrVmlydHVhbEZvciIsImNka1ZpcnR1YWxGb3JPZiJdLFsxLCJ0ZW5zb3ItY29udGFpbmVyIl0sWzEsInRlbnNvci1pdGVtIiwzLCJuZ0NsYXNzIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1pbmRleCJdLFsiY2xhc3MiLCJncmFwaC1leGVjdXRpb24tZm9jdXMiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJjbGFzcyIsInRlbnNvci1pdGVtIl0sWyJkYXRhTG9hZGluZyIsIiJdLFsxLCJncmFwaC1leGVjdXRpb24tZm9jdXMiXSxbMSwidGVuc29yLW5hbWUtYW5kLW9wLXR5cGUiXSxbMSwidGVuc29yLW5hbWUiLDMsInRpdGxlIiwiY2xpY2siXSxbMSwib3AtdHlwZSJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIiw0LCJuZ0lmIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXSxbMSwibG9hZGluZy1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRCgyKSx2KCksRSgzLFoyZSwyLDEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMiksdigpKSwyJmUmJih4KDIpLHFlKCIgR3JhcGggRXhlY3V0aW9ucyAoIixpLm51bUdyYXBoRXhlY3V0aW9ucywiKSAiKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLm51bUdyYXBoRXhlY3V0aW9ucyYmaS5udW1HcmFwaEV4ZWN1dGlvbnM+MCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLHFJLHBKLGhKLHFDXSxzdHlsZXM6WycuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmctbGVmdDoxMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LmdyYXBoLWV4ZWN1dGlvbi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXJpZ2h0OjRweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncmFwaC1leGVjdXRpb25zLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206NXB4fS5ncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtmb250LXNpemU6MTJweDt3aWR0aDoxMDAlO292ZXJmbG93LXg6aGlkZGVufS5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5sb2FkaW5nLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlY2VmZjE7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7cGFkZGluZzoxcHggM3B4O3dpZHRoOm1heC1jb250ZW50O2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS50ZW5zb3ItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MzhweDtsaW5lLWhlaWdodDozOHB4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjpub25lO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O21hcmdpbjoycHggMCAxcHg7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDJweCk7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAycHg7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZToxcHggc29saWQgI2M2Y2FkMX0udGVuc29yLW5hbWUtYW5kLW9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2RpcmVjdGlvbjpydGw7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctcmlnaHQ6OHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjQwcHh9ZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxQdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1HcmFwaEV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihtdykpLHRoaXMuZ3JhcGhFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oUjUpKSx0aGlzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkobXcsaT0+MD09PWk/bnVsbDpBcnJheS5mcm9tKHtsZW5ndGg6aX0pLm1hcCgocixvKT0+bykpKSksdGhpcy5mb2N1c0luZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oTzUpKSx0aGlzLmZvY3VzSW5wdXRJbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUoZm4odnRlKSl9b25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godHYoe2luZGV4OmV9KSl9b25UZW5zb3JOYW1lQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChudihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJudW1HcmFwaEV4ZWN1dGlvbnMiLCJncmFwaEV4ZWN1dGlvbkRhdGEiLCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLCJmb2N1c0luZGV4IiwiZm9jdXNJbnB1dEluZGljZXMiLCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLCJvblRlbnNvck5hbWVDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLDApLFAoIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY3JvbGxlZEluZGV4Q2hhbmdlKG8pfSkoIm9uVGVuc29yTmFtZUNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRlbnNvck5hbWVDbGljayhvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUdyYXBoRXhlY3V0aW9ucyIsVygxLDUsaS5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsVygyLDcsaS5ncmFwaEV4ZWN1dGlvbkRhdGEkKSkoImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsVygzLDksaS5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLFcoNCwxMSxpLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixXKDUsMTMsaS5mb2N1c0lucHV0SW5kaWNlcyQpKX0sZGVwZW5kZW5jaWVzOltJdGUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIGVPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIE91dHB1dCAiKSx2KCkpfWZ1bmN0aW9uIHRPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIElucHV0ICIpLHYoKSl9ZnVuY3Rpb24gbk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpKDEsInNwYW4iLDcpLEUoMixlT2UsMiwwLCJzcGFuIiw4KSxFKDMsdE9lLDIsMCwic3BhbiIsOCksdigpLEQoNCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nU3dpdGNoIixlLmtpbmQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiaW5wdXQiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImNvbnN1bWVyIikseCgxKSxxZSgiIHNsb3Q6ICIsZS5zbG90LCIgIil9fWZ1bmN0aW9uIGlPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiICIsZS5vcERhdGEub3BfdHlwZSwiICIpfX1mdW5jdGlvbiByT2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDEwKSxEKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLHYoKSl9dmFyIG9PZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LFJ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbk9wTmFtZUNsaWNrPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1vcCJdXSxpbnB1dHM6e2tpbmQ6ImtpbmQiLG9wTmFtZToib3BOYW1lIixzbG90OiJzbG90IixvcERhdGE6Im9wRGF0YSJ9LG91dHB1dHM6e29uT3BOYW1lQ2xpY2s6Im9uT3BOYW1lQ2xpY2sifSxkZWNsczo5LHZhcnM6Nyxjb25zdHM6W1sxLCJvcC1jb250YWluZXIiXSxbMSwiaW5wdXQtdGVuc29yLW5hbWUiXSxbMSwib3AtbmFtZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInNsb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWzEsInNsb3QiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm9wLXR5cGUiXSxbMSwib3AtaW5mby1taXNzaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJidXR0b24iLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk9wTmFtZUNsaWNrLmVtaXQoe29wX25hbWU6aS5vcE5hbWV9KX0pLGcoMywic3BhbiIpLEQoNCksdigpKCksRSg1LG5PZSw1LDQsImRpdiIsMyksdigpLEUoNixpT2UsMiwxLCJkaXYiLDQpLEUoNyxyT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSxiKCJuZ0NsYXNzIixIbig1LG9PZSwic2VsZiI9PT1pLmtpbmQ/InNlbGYtb3AtbmFtZSI6IiIpKSx4KDIpLHl0KGkub3BOYW1lKSx4KDEpLGIoIm5nSWYiLCJzZWxmIiE9PWkua2luZCkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLm9wRGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbUG4sWGUsaHIsSXJdLHN0eWxlczpbJy5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjJweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MXB4IDNweCAjZWVlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweCAwIDA7cGFkZGluZzoycHggNnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjAwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzoxcHggM3B4ICM3NTc1NzV9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTowfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlcjoycHggc29saWQgI2ZmZDNiMn0ub3AtaW5mby1taXNzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdy13cmFwOmFueXdoZXJlO3BhZGRpbmc6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zZWxmLW9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xvdFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J119KSxufSkoKTtmdW5jdGlvbiBhT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxEKDIpLHYoKSxnKDMsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgzKTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleDt4KDIpLHFlKCJJbnB1dCBzbG90ICIsaSwiOiIpLHgoMSksYigia2luZCIsImlucHV0IikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5vdXRwdXRfc2xvdCkoIm9wRGF0YSIsZS5kYXRhKX19ZnVuY3Rpb24gbE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDExKSgxLCJkaXYiKSxFKDIsYU9lLDQsNSwiZGl2IiwxMiksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nRm9yT2YiLGUuaW5wdXRPcHMpfX1mdW5jdGlvbiBjT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMTYpLEQoMSwiIChUaGlzIG9wIGhhcyBubyBpbnB1dCB0ZW5zb3IuKSAiKSx2KCkpfWZ1bmN0aW9uIHVPZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjMpKDEsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSg0KTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5pbnB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBkT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTkpKDEsImRpdiIsMjApLEQoMiksZygzLCJzcGFuIiksWUUoNCwyMSksdigpLEQoNSwiKSAiKSx2KCksRSg2LHVPZSwyLDQsImRpdiIsMjIpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7eCgyKSxhcCgiIE91dHB1dCBzbG90ICIsaSwiOiAoIixlLmxlbmd0aCwiICIpLHgoMiksT2IoZS5sZW5ndGgpLFhFKDQpLHgoMiksYigibmdGb3JPZiIsZSl9fWZ1bmN0aW9uIHBPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNykoMSwiZGl2IiksRSgyLGRPZSw3LDQsImRpdiIsMTgpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCgyKSxiKCJuZ0Zvck9mIixlLmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gaE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI0KSxEKDEpLGcoMiwic3BhbiIpLFlFKDMsMjUpLHYoKSxEKDQsIiBhbmQgbm8gY29uc3VtZXIuKSAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHFlKCIgKFRoaXMgb3AgaGFzICIsZS5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSx4KDIpLE9iKGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgpLFhFKDMpfX1mdW5jdGlvbiBmT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSxFKDEsbE9lLDMsMSwiZGl2Iiw0KSxFKDIsY09lLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxlbiksZyg0LCJkaXYiLDYpKDUsImRpdiIsNyksRCg2LCJPcDoiKSx2KCksZyg3LCJncmFwaC1vcCIsOCksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLHYoKSgpLEUoOCxwT2UsMywxLCJkaXYiLDkpLEUoOSxoT2UsNSwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxlbiksdigpfWlmKDImbil7bGV0IGU9c3QoMyksaT1zdCgxMCkscj1NKCk7eCgxKSxiKCJuZ0lmIixyLmlucHV0T3BzLmxlbmd0aD4wKSgibmdJZkVsc2UiLGUpLHgoNiksYigia2luZCIsInNlbGYiKSgib3BOYW1lIixyLm9wSW5mby5vcF9uYW1lKSgib3BEYXRhIixyLm9wSW5mbykseCgxKSxiKCJuZ0lmIixyLnRvdGFsTnVtQ29uc3VtZXJzPjApKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIG1PZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMjYpLEQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksdigpKX1mdW5jdGlvbiBnT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMjcpLEQoMSwiIE5vIGdyYXBoIG9wIHNlbGVjdGVkLiBDbGljayBhIHRlbnNvciBuYW1lIGluIHRoZSBHcmFwaCBFeGVjdXRpb25zIHRhYmxlIHRvIHZpZXcgdGhlIG5laWdoYm9yaG9vZCBvZiB0aGUgdGVuc29yJ3Mgb3AgaW4gaXRzIGdyYXBoLiAiKSx2KCkpfXZhciBPdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25HcmFwaE9wTmF2aWdhdGU9bmV3IEd9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKChlLGkpPT5lK2kubGVuZ3RoLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscjtyZXR1cm4gdD0kbG9jYWxpemVgOuKQn2ZlNTVmOWIxOTNlYTIwYWFlNWI1NjM1ZTY4ZDkzODY1MDM4NDc3NDbikJ80OTU1MTMzNzQwODQxMjk5ODUxOntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHtjb25zdW1lcn0gPTEge2NvbnN1bWVyfSBvdGhlciB7Y29uc3VtZXJzfX1gLHQ9UUUodCx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxlPSRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsaT0kbG9jYWxpemVgOuKQnzZhYTc1ZjYyN2UwZGMxNjE1MGVmNDQ4NDY0ZTBjODU3YWFhMGRjMTjikJ81MTU2NzEyOTM1MTUwNTg2ODc4OntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHt0ZW5zb3J9ID0xIHt0ZW5zb3J9IG90aGVyIHt0ZW5zb3JzfX1gLGk9UUUoaSx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxyPSRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtpfTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLHIsWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IikoMSwiZGl2IiksRCgyLCJHcmFwaCBTdHJ1Y3R1cmUiKSx2KCksZygzLCJkaXYiLDApLEUoNCxmT2UsMTEsNywiZGl2IiwxKSx2KCksRSg1LG1PZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLEUoNyxnT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCg0KSxiKCJuZ0lmIixudWxsIT1pLm9wSW5mbykoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbeW4sWGUsUnRlXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde292ZXJmbG93LXk6YXV0b30uY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206NXB4O292ZXJmbG93LXg6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmNvbnN1bWVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjVweCAwfS5ncmFwaC1zdHJ1Y3R1cmUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtvdmVyZmxvdy15OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7bWFyZ2luLXRvcDo1cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmctYm90dG9tOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1vcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctYm90dG9tOjVweH0uaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OTttYXJnaW4tYm90dG9tOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0uaW5wdXQtdGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5uby1vcC1mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5O2ZvbnQtZmFtaWx5OiJSb2JvdG8iLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3doaXRlLXNwYWNlOm5vcm1hbH0uc2VsZi1vcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbTo1cHh9LnNlbGYtb3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZy1ib3R0b206NXB4fS5zbG90LWNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy10b3A6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH0uc2xvdC1jb25zdW1lcnMtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxrdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5vcEluZm8kPXRoaXMuc3RvcmUucGlwZShmbihGNSkpLHRoaXMuaW5wdXRPcHMkPXRoaXMuc3RvcmUucGlwZShmbihONSkpLHRoaXMuY29uc3VtZXJPcHMkPXRoaXMuc3RvcmUucGlwZShmbih5dGUpKX1vbkdyYXBoT3BOYXZpZ2F0ZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGl2KGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm9wSW5mbyIsImlucHV0T3BzIiwiY29uc3VtZXJPcHMiLCJvbkdyYXBoT3BOYXZpZ2F0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtY29tcG9uZW50IiwwKSxQKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25HcmFwaE9wTmF2aWdhdGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigib3BJbmZvIixXKDEsMyxpLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFcoMiw1LGkuaW5wdXRPcHMkKSkoImNvbnN1bWVyT3BzIixXKDMsNyxpLmNvbnN1bWVyT3BzJCkpfSxkZXBlbmRlbmNpZXM6W090ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRnRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEQoMiwiRGVidWdnZXIgVjIgaXMgaW5hY3RpdmUgYmVjYXVzZSBubyBkYXRhIGlzIGF2YWlsYWJsZS4iKSx2KCksZygzLCJkaXYiKSxEKDQsIlRvIHVzZSB0aGUgZGVidWdnZXIsIiksdigpLGcoNSwiZGl2IikoNiwib2wiKSg3LCJsaSIpLEQoOCwiIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB5b3VyIHByb2dyYW06ICIpLGcoOSwiZGl2IiwyKSgxMCwic3BhbiIpLEQoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSx2KCksZygxMiwic3BhbiIsMyksRCgxMywibG9nZGlyIiksdigpLEQoMTQsIiwgIiksZygxNSwic3BhbiIsMyksRCgxNiwndGVuc29yX2RlYnVnX21vZGU9IkZVTExfSEVBTFRIIicpLHYoKSxEKDE3LCIsICIpLGcoMTgsInNwYW4iLDMpLEQoMTksImNpcmN1bGFyX2J1ZmZlcl9zaXplPS0xIiksdigpLGcoMjAsInNwYW4iKSxEKDIxLCIpIiksdigpKCkoKSxnKDIyLCJsaSIpLEQoMjMsIlJlLXJ1biB0aGUgcHJvZ3JhbS4iKSx2KCkoKSgpLGcoMjQsImRpdiIsNCkoMjUsImRpdiIsNSkoMjYsImRpdiIsNiksTigyNywiaW1nIiw3KSx2KCksZygyOCwiZGl2Iiw4KSxEKDI5LCJBdXRvLWFsZXJ0cyBmb3IgcHJvYmxlbXMgZm91bmQiKSx2KCkoKSxnKDMwLCJkaXYiLDUpKDMxLCJkaXYiLDYpLE4oMzIsImltZyIsOSksdigpLGcoMzMsImRpdiIsOCksRCgzNCwiIEludGVncmF0ZWQgZGVidWdnaW5nIHRvIHRyYWNlIHByb2JsZW1zIHRvIHRoZWlyIGNhdXNlcyAiKSx2KCkoKSxnKDM1LCJkaXYiLDUpKDM2LCJkaXYiLDYpLE4oMzcsImltZyIsMTApLHYoKSxnKDM4LCJkaXYiLDgpLEQoMzksIkxpbmsgbG9nIHRvIGNvZGUiKSx2KCkoKSgpLGcoNDAsImRpdiIsMTEpKDQxLCJkaXYiLDEyKSxEKDQyLCIgVGhlIGxvZyBkaXJlY3RvcnkgbXVzdCBjb250YWluIFRlbnNvckZsb3cgRGVidWdnZXIgKFYyKSBkYXRhLiB0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oKSB3aWxsIGNvbGxlY3QgdGVuc29yIGRhdGEsIGdyYXBoIHN0cnVjdHVyZXMsIHRoZSBhc3NvY2lhdGVkIHN0YWNrIHRyYWNlcywgYW5kIHNvdXJjZSBjb2RlIHRvIHRoZSBzcGVjaWZpY2VkIGRpcmVjdG9yeSBsb2dkaXIgYXMgdGhlIGluc3RydW1lbnRlZCBUZW5zb3JGbG93IHByb2dyYW0gZXhlY3V0ZXMuICIpLHYoKSxnKDQzLCJkaXYiLDEyKSg0NCwiZGl2IiksRCg0NSwiIFNlZSAiKSxnKDQ2LCJhIiwxMyksRCg0NywiIGRvY3VtZW50YXRpb24gIiksdigpLEQoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksdigpLGcoNDksImRpdiIpLEQoNTAsIiBTZWUgIiksZyg1MSwiYSIsMTQpLEQoNTIsIiBoZXJlICIpLHYoKSxEKDUzLCIgZm9yIG90aGVyIFRlbnNvckZsb3cgZGVidWdnaW5nIEFQSXMuICIpLHYoKSgpKCkoKSl9LHN0eWxlczpbIi5hcmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgY29sb3I6IGxpZ2h0Ymx1ZTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBtYXJnaW46IDJweDtcbn1cblxuLmNvZGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IFJvYm90bztcbiAgZm9udC1zaXplOiAxNXB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiA1MHB4O1xufVxuXG4uZGV0YWlscy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB3aWR0aDogNTAlO1xufVxuXG4uZXhoaWJpdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuZGVzY3JpcHRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuc2NyZWVuc2hvdFtfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAyMDBweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksbn0pKCksTnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk4oMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRlcGVuZGVuY2llczpbRnRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxCdGVfZ2V0V2luZG93PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd307ZnVuY3Rpb24gTHRlKG4pe2xldCB0PUJ0ZV9nZXRXaW5kb3coKS5yZXF1aXJlO3JldHVybiBuZXcgUHJvbWlzZShlPT57dChuLGUpfSl9dmFyIGo1X2xvYWRNb25hY289YXN5bmMgZnVuY3Rpb24oKXtsZXQgbj1CdGVfZ2V0V2luZG93KCk7aWYodm9pZCAwPT09bi5tb25hY28pe2lmKCFuLnJlcXVpcmUpdGhyb3cgbmV3IEVycm9yKCJsb2FkTW9uYWNvKCkgZmFpbGVkIGJlY2F1c2UgZnVuY3Rpb24gcmVxdWlyZSgpIGlzIHVuYXZhaWxhYmxlIik7bi5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOiIvdGYtaW1wb3J0cy92cyJ9fSksYXdhaXQgTHRlKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0pLGF3YWl0IEx0ZShbInZzL3B5dGhvbi9weXRob24uY29udHJpYnV0aW9uIl0pfX07ZnVuY3Rpb24gWUkobil7cmV0dXJuIG4/InZzLWRhcmsiOiJ2cyJ9dmFyIF9tPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5yZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5Ncz0xMDAsdGhpcy5vblJlc2l6ZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uUmVzaXplJD1uZXcgVGU7bGV0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5vblJlc2l6ZSQubmV4dCgpfSk7aS5vYnNlcnZlKGUubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCk9PntpLnVub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpfSl9bmdPbkluaXQoKXt0aGlzLm9uUmVzaXplJC5waXBlKENhKDEpLEFyKHRoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMpLG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm9uUmVzaXplLmVtaXQoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlJC5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImRldGVjdFJlc2l6ZSIsIiJdXSxpbnB1dHM6e3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOiJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyJ9LG91dHB1dHM6e29uUmVzaXplOiJvblJlc2l6ZSJ9fSksbn0pKCksTU9lPVsiY29kZVZpZXdlckNvbnRhaW5lciJdLHp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKGUpe2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47bGV0IGk9ZS5tb25hY28mJm51bGw9PT10aGlzLmVkaXRvcjtudWxsPT09dGhpcy5lZGl0b3ImJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHt2YWx1ZToodGhpcy5saW5lcz8/W10pLmpvaW4oIlxuIiksbGFuZ3VhZ2U6InB5dGhvbiIscmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0sdGhlbWU6WUkodGhpcy51c2VEYXJrTW9kZSl9KSksZS5saW5lcyYmdGhpcy5saW5lcyYmdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5saW5lcy5qb2luKCJcbiIpKTtsZXQgcj1pfHxlLmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYociYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKHIsdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtsZXQgbz10aGlzLmxpbmVzW3ItMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEscixvKzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX1lLnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUoWUkodGhpcy51c2VEYXJrTW9kZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChNT2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5jb2RlVmlld2VyQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLG1vbmFjbzoibW9uYWNvIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLDEsImNvZGUtdmlld2VyLWNvbnRhaW5lciIsMywicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY29kZVZpZXdlckNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSx2KCkpLDImZSYmYigicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLGkuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGVwZW5kZW5jaWVzOltfbV0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksanRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLm1vbmFjbyQ9bnVsbH1uZ09uSW5pdCgpe3RoaXMubW9uYWNvJD1sbyhqNV9sb2FkTW9uYWNvKCkpLnBpcGUoQigoKT0+d2luZG93Lm1vbmFjbykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZSJdXSxpbnB1dHM6e2xpbmVzOiJsaW5lcyIsZm9jdXNlZExpbmVubzoiZm9jdXNlZExpbmVubyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6Mix2YXJzOjYsY29uc3RzOltbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwibW9uYWNvIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsInNvdXJjZS1jb2RlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImxpbmVzIixpLmxpbmVzKSgiZm9jdXNlZExpbmVubyIsaS5mb2N1c2VkTGluZW5vKSgibW9uYWNvIixXKDEsNCxpLm1vbmFjbyQpKSgidXNlRGFya01vZGUiLGkudXNlRGFya01vZGUpfSxkZXBlbmRlbmNpZXM6W3p0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gVE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIgIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5maWxlX3BhdGgsIiAiKX19ZnVuY3Rpb24gRE9lKG4sdCl7MSZuJiYoZygwLCJkaXYiLDcpLEQoMSwiIE5vIGZpbGUgc2VsZWN0ZWQuIENsaWNrIGEgbGluZSBudW1iZXIgaW4gdGhlIFN0YWNrIFRyYWNlIHNlY3Rpb24gdG8gc2hvdyB0aGUgc291cmNlIGNvZGUuICIpLHYoKSl9ZnVuY3Rpb24gQU9lKG4sdCl7aWYoMSZuJiZOKDAsInNvdXJjZS1jb2RlIiw4KSwyJm4pe2xldCBlPU0oKTtiKCJsaW5lcyIsZS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpKCJmb2N1c2VkTGluZW5vIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5saW5lbm8pKCJ1c2VEYXJrTW9kZSIsZS51c2VEYXJrTW9kZSl9fXZhciBHdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJkaXYiLDIpLEQoMywiU291cmNlIENvZGUiKSx2KCksRSg0LFRPZSwyLDEsImRpdiIsMyksRSg1LERPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsQU9lLDEsMywic291cmNlLWNvZGUiLDUpLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDQpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIixyKSx4KDMpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJiZudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpfX0sZGVwZW5kZW5jaWVzOltYZSxqdGVdLHN0eWxlczpbJy5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI0cHg7cGFkZGluZy1ib3R0b206NnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtvdmVyZmxvdy15OmF1dG87cGFkZGluZzowIDIwcHh9Lm5vLWZpbGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiM2NjY7cGFkZGluZzowIDIwcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zb3VyY2UtZmlsZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxMDAlfS50aXRsZS10YWdbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjEwMCU7cGFkZGluZy1sZWZ0OjZweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9c291cmNlLWNvZGVbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3dpZHRoOjEwMCV9J119KSxufSkoKSxXdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkPXRoaXMuc3RvcmUuc2VsZWN0KGpJKSx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQ9dGhpcy5zdG9yZS5zZWxlY3QoR0kpLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLCJmb2N1c2VkU291cmNlTGluZVNwZWMiLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwic291cmNlLWZpbGVzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IixXKDEsMyxpLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQpKSgiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIixXKDIsNSxpLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQpKSgidXNlRGFya01vZGUiLFcoMyw3LGkudXNlRGFya01vZGUkKSl9LGRlcGVuZGVuY2llczpbR3RlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxST2U9WyJzdGFja0ZyYW1lQXJyYXkiXTtmdW5jdGlvbiBPT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEzKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAjIixlLmV4ZWN1dGlvbkluZGV4LCI6ICIpfX1mdW5jdGlvbiBrT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE0KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIEZPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRCgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLEUoMixPT2UsMiwxLCJzcGFuIiwxMSksRSgzLGtPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wVHlwZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBOT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE2KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoJyAiJyxlLm9wTmFtZSwnIiAnKX19ZnVuY3Rpb24gTE9lKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwxNCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgzKTt4KDEpLHFlKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBCT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLEUoMixOT2UsMiwxLCJzcGFuIiwxNSksRSgzLExPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wTmFtZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBWT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkscWUoIiAoSG9zdCBuYW1lOiAiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5WzBdLmhvc3RfbmFtZSwiKSAiKX19ZnVuY3Rpb24gSE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iKSgyLCJzcGFuIiw4KSxFKDMsRk9lLDQsMiwiZGl2Iiw5KSxFKDQsQk9lLDQsMiwiZGl2Iiw5KSx2KCkoKSxnKDUsImRpdiIpLEUoNixWT2UsMiwxLCJzcGFuIiwxMCksdigpKCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdTd2l0Y2giLGUuY29kZUxvY2F0aW9uVHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuR1JBUEhfT1BfQ1JFQVRJT04pLHgoMiksYigibmdJZiIsbnVsbCE9PWUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZlLnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFVPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxOCksRCgxLCIgQ2xpY2sgYW4gZWFnZXIgZXhlY3V0aW9uIG9yIGdyYXBoIG9wIHRvIHNob3cgaXRzIG9yaWdpbmFsIHN0YWNrIHRyYWNlLiAiKSx2KCkpfWZ1bmN0aW9uIHpPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwyOCksRCgxLCIgXHUyOTEzICIpLHYoKSl9dmFyIGpPZT1mdW5jdGlvbihuLHQpe3JldHVybltuLHRdfTtmdW5jdGlvbiBHT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIyKSgxLCJkaXYiLDIzKSxEKDIpLHYoKSxnKDMsImRpdiIsMjQpLEUoNCx6T2UsMiwwLCJkaXYiLDI1KSxnKDUsImRpdiIsMjYpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5vblNvdXJjZUxpbmVDbGlja2VkLmVtaXQobykpfSksRCg2KSx2KCksZyg3LCJkaXYiLDI3KSxEKDgpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixqT2UsZS5iZWxvbmdzVG9Gb2N1c2VkRmlsZT8iZm9jdXNlZC1maWxlIjoiIixlLmZvY3VzZWQ/ImZvY3VzZWQtc3RhY2stZnJhbWUiOiIiKSkseCgxKSx4cigidGl0bGUiLGUuZmlsZV9wYXRoKSx4KDEpLHFlKCIgIixlLmNvbmNpc2VfZmlsZV9wYXRoLCIgIikseCgyKSxiKCJuZ0lmIixpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJiZlLmZvY3VzZWQpLHgoMikscWUoIiBMaW5lICIsZS5saW5lbm8sIiAiKSx4KDIpLHFlKCIgIixlLmZ1bmN0aW9uX25hbWUsIiAiKX19ZnVuY3Rpb24gV09lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5LDIwKSxFKDIsR09lLDksOSwiZGl2IiwyMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDIpLGIoIm5nRm9yT2YiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KX19ZnVuY3Rpb24gcU9lKG4sdCl7fXZhciBxdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5PW51bGwsdGhpcy5vblNvdXJjZUxpbmVDbGlja2VkPW5ldyBHLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT10c31uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47bGV0IGU9dGhpcy5zdGFja0ZyYW1lQXJyYXkubmF0aXZlRWxlbWVudCxpPWUucXVlcnlTZWxlY3RvcigiLmZvY3VzZWQtc3RhY2stZnJhbWUiKTtpZihudWxsIT09aSlyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChlLGkpO2xldCByPWUucXVlcnlTZWxlY3RvcigiLnN0YWNrLWZyYW1lLWNvbnRhaW5lcjpsYXN0LWNoaWxkIik7bnVsbCE9PXImJnRoaXMuc2Nyb2xsVG9FbGVtZW50KGUscil9c2Nyb2xsVG9FbGVtZW50KGUsaSl7ZS5zY3JvbGxUb3A9aS5vZmZzZXRUb3B9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInN0YWNrLXRyYWNlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KFJPZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YWNrRnJhbWVBcnJheT1yLmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxEKDMsIiBTdGFjayBUcmFjZSAiKSx2KCksRSg0LEhPZSw3LDQsImRpdiIsMyksRSg1LFVPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsV09lLDMsMSwiZGl2Iiw1KSxFKDgscU9lLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKSwyJmUpe2xldCByPXN0KDYpLG89c3QoOSk7eCg0KSxiKCJuZ0lmIixudWxsIT09aS5jb2RlTG9jYXRpb25UeXBlKSgibmdJZkVsc2UiLHIpLHgoMyksYigibmdJZiIsbnVsbCE9PWkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KSgibmdJZkVsc2UiLG8pfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxocixJcl0sc3R5bGVzOlsnLmZvY3VzZWQtZmlsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uZm9jdXNlZC1zdGFjay1mcmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTEsMCwuMyl9Lm5vLXN0YWNrLXRyYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YW55d2hlcmV9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc3RhY2stZnJhbWUtYXJyYXlbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpfS5zdGFjay1mcmFtZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNhMGEwYTB9LnN0YWNrLWZyYW1lLWZpbGUtcGF0aFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjE4MHB4O3dpZHRoOjE4MHB4fS5zdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGFjay1mcmFtZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmctbGVmdDoxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6MjAwcHg7d29yZC13cmFwOmFueXdoZXJlfS5zdGFjay1mcmFtZS1saW5lbm9bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDo4MHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3dpZHRoOjgwcHh9LnN0YWNrLXRyYWNlLWF1eC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE1cHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDttYXgtaGVpZ2h0OjM2MHB4O292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuO3BhZGRpbmctbGVmdDo4cHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnN0YWNrLXRyYWNlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjNweH0uc3RhY2stdHJhY2UtaG9zdC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5zdGFjay10cmFjZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uc3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEycHg7cGFkZGluZy1yaWdodDozcHh9J119KSxufSkoKSxZdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jb2RlTG9jYXRpb25UeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oWShndyxpPT5udWxsPT09aT9udWxsOmkuY29kZUxvY2F0aW9uVHlwZSkpKSx0aGlzLm9wVHlwZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWk/bnVsbDppLm9wVHlwZSkpKSx0aGlzLm9wTmFtZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkdSQVBIX09QX0NSRUFUSU9OP251bGw6aS5vcE5hbWUpKSksdGhpcy5leGVjdXRpb25JbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkVYRUNVVElPTj9udWxsOmkuZXhlY3V0aW9uSW5kZXgpKSksdGhpcy5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFN0ZSkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh3dGUsR0ksKGkscik9PntpZihudWxsPT09aSlyZXR1cm4gbnVsbDtsZXQgbz1bXTtmb3IobGV0IHMgb2YgaSl7bGV0e2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6dX09cyxkPWwuc3BsaXQoIi8iKSxoPW51bGwhPT1yJiZhPT09ci5ob3N0X25hbWUmJmw9PT1yLmZpbGVfcGF0aDtvLnB1c2goe2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGNvbmNpc2VfZmlsZV9wYXRoOmRbZC5sZW5ndGgtMV0sbGluZW5vOmMsZnVuY3Rpb25fbmFtZTp1LGJlbG9uZ3NUb0ZvY3VzZWRGaWxlOmgsZm9jdXNlZDpoJiZjPT09ci5saW5lbm99KX1yZXR1cm4gb30pKSl9b25Tb3VyY2VMaW5lQ2xpY2tlZChlKXtsZXR7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTpzfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2gocnYoe3N0YWNrRnJhbWU6e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c319KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSJdXSxkZWNsczo3LHZhcnM6MTgsY29uc3RzOltbMywiY29kZUxvY2F0aW9uVHlwZSIsIm9wVHlwZSIsIm9wTmFtZSIsImV4ZWN1dGlvbkluZGV4Iiwic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLCJvblNvdXJjZUxpbmVDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzdGFjay10cmFjZS1jb21wb25lbnQiLDApLFAoIm9uU291cmNlTGluZUNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU291cmNlTGluZUNsaWNrZWQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY29kZUxvY2F0aW9uVHlwZSIsVygxLDYsaS5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFcoMiw4LGkub3BUeXBlJCkpKCJvcE5hbWUiLFcoMywxMCxpLm9wTmFtZSQpKSgiZXhlY3V0aW9uSW5kZXgiLFcoNCwxMixpLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsVyg1LDE0LGkuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkKSkoInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsVyg2LDE2LGkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JCkpfSxkZXBlbmRlbmNpZXM6W3F0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUU9lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBLT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLGcoMywiZGl2IiwxNCksTig0LCJkZWJ1Zy10ZW5zb3ItdmFsdWUiLDE1KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDMpO3goMikscWUoIk91dHB1dCBzbG90ICIsaSwiOiIpLHgoMiksYigiZGVidWdUZW5zb3JWYWx1ZSIsci5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMixRT2Usci50ZW5zb3JEZWJ1Z01vZGUsZSkpKX19ZnVuY3Rpb24gWk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEwKSxFKDEsS09lLDUsNSwiZGl2IiwxMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmRlYnVnVGVuc29yVmFsdWVzKX19ZnVuY3Rpb24gSk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSgxLCJkaXYiKSgyLCJkaXYiLDMpKDMsInNwYW4iLDQpLEQoNCwiIE9wOiAiKSx2KCksZyg1LCJzcGFuIiw1KSxEKDYpLHYoKSgpLGcoNywiZGl2IiwzKSg4LCJzcGFuIiw0KSxEKDksIiAjIG9mIGlucHV0IHRlbnNvcnM6ICIpLHYoKSxnKDEwLCJzcGFuIiw2KSxEKDExKSx2KCkoKSxnKDEyLCJkaXYiLDMpKDEzLCJzcGFuIiw0KSxEKDE0LCIgIyBvZiBvdXRwdXQgdGVuc29yczogIiksdigpLGcoMTUsInNwYW4iLDcpLEQoMTYpLHYoKSxnKDE3LCJzcGFuIiw4KSxEKDE4KSx2KCkoKSxFKDE5LFpPZSwyLDEsImRpdiIsOSksdigpKCkpLDImbil7bGV0IGU9TSgpO3goNikscWUoIiAiLGUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3BfdHlwZSwiICIpLHgoNSkscWUoIiAiLG51bGw9PWUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDUpLHFlKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLm91dHB1dF90ZW5zb3JfaWRzPzA6ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDIpLHFlKCIgKGRlYnVnIG1vZGU6ICIsZS5UZW5zb3JEZWJ1Z01vZGVbZS50ZW5zb3JEZWJ1Z01vZGVdLCIpICIpLHgoMSksYigibmdJZiIsZS5oYXNEZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uICRPZShuLHQpe312YXIgWHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRlbnNvckRlYnVnTW9kZT16by5VTlNQRUNJRklFRCx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzPSExLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXM9bnVsbCx0aGlzLmRlYnVnVGVuc29yRHR5cGVzPW51bGwsdGhpcy5UZW5zb3JEZWJ1Z01vZGU9em8sdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9V0l9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiKSgyLCJzcGFuIiksRCgzKSx2KCkoKSxFKDQsSk9lLDIwLDUsImRpdiIsMSksRSg1LCRPZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDMpLHFlKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLHFJXSxzdHlsZXM6WycuZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSxufSkoKSxRdGU9IlVua25vd24gZHR5cGUiLEt0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oZ20pKSx0aGlzLnRlbnNvckRlYnVnTW9kZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/em8uVU5TUEVDSUZJRUQ6aS50ZW5zb3JfZGVidWdfbW9kZSkpKSx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShnbSxpPT57aWYobnVsbD09PWl8fG51bGw9PT1pLmRlYnVnX3RlbnNvcl92YWx1ZXMpcmV0dXJuITE7Zm9yKGxldCByIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsIT09ciYmci5sZW5ndGg+MClyZXR1cm4hMDtyZXR1cm4hMX0pKSksdGhpcy5kZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/bnVsbDppLmRlYnVnX3RlbnNvcl92YWx1ZXMpKSksdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzfHxpLnRlbnNvcl9kZWJ1Z19tb2RlIT09em8uRlVMTF9IRUFMVEgmJmkudGVuc29yX2RlYnVnX21vZGUhPT16by5TSEFQRSlyZXR1cm4gbnVsbDtsZXQgcj1bXTtmb3IobGV0IG8gb2YgaS5kZWJ1Z190ZW5zb3JfdmFsdWVzKWlmKG51bGw9PT1vKXIucHVzaChRdGUpO2Vsc2V7bGV0IHM9U3RyaW5nKGkudGVuc29yX2RlYnVnX21vZGU9PT16by5GVUxMX0hFQUxUSD9vWzJdOm9bMV0pO3IucHVzaChfd1tzXXx8UXRlKX1yZXR1cm4gcn0pKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4In0sZGVjbHM6Nix2YXJzOjE2LGNvbnN0czpbWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EYXRhIiwidGVuc29yRGVidWdNb2RlIiwiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yRHR5cGVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCkoImZvY3VzZWRFeGVjdXRpb25EYXRhIixXKDEsNixpLmZvY3VzZWRFeGVjdXRpb25EYXRhJCkpKCJ0ZW5zb3JEZWJ1Z01vZGUiLFcoMiw4LGkudGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsVygzLDEwLGkuaGFzRGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yVmFsdWVzIixXKDQsMTIsaS5kZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JEdHlwZXMiLFcoNSwxNCxpLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkZXBlbmRlbmNpZXM6W1h0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkscmtlPVsic2xpZGVyV3JhcHBlciJdLFBsPU5zKHtwYXNzaXZlOiExfSksY2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5UZCksbXVsdGk6ITB9LHVrZT1xcChwcyhnbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksImFjY2VudCIpKSxUZD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdWtle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWMsdGhpcy5faW52ZXJ0PSExLHRoaXMuX21heD0xMDAsdGhpcy5fbWluPTAsdGhpcy5fc3RlcD0xLHRoaXMuX3RodW1iTGFiZWw9ITEsdGhpcy5fdGlja0ludGVydmFsPTAsdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmlucHV0PW5ldyBHLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3BlcmNlbnQ9MCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9wb2ludGVyRG93bj11PT57dGhpcy5kaXNhYmxlZHx8dGhpcy5faXNTbGlkaW5nfHwhdncodSkmJjAhPT11LmJ1dHRvbnx8dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX3RvdWNoSWQ9dncodSk/ZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4udG91Y2hlcy5sZW5ndGg7ZSsrKXtsZXQgaT1uLnRvdWNoZXNbZV0udGFyZ2V0O2lmKHQ9PT1pfHx0LmNvbnRhaW5zKGkpKXJldHVybiBuLnRvdWNoZXNbZV0uaWRlbnRpZmllcn19KHUsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTp2b2lkIDA7bGV0IGQ9SnRlKHUsdGhpcy5fdG91Y2hJZCk7aWYoZCl7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9pc1NsaWRpbmc9InBvaW50ZXIiLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fb25Nb3VzZWVudGVyKCksdGhpcy5fYmluZEdsb2JhbEV2ZW50cyh1KSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9cCx1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX0pfSx0aGlzLl9wb2ludGVyTW92ZT11PT57aWYoInBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nKXtsZXQgZD1KdGUodSx0aGlzLl90b3VjaElkKTtpZihkKXt1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKTtsZXQgcD10aGlzLnZhbHVlO3RoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihkKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX19LHRoaXMuX3BvaW50ZXJVcD11PT57InBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nJiYoIXZ3KHUpfHwibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3RvdWNoSWR8fFc1KHUuY2hhbmdlZFRvdWNoZXMsdGhpcy5fdG91Y2hJZCkpJiYodS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5fdG91Y2hJZD12b2lkIDAsdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQhPXRoaXMudmFsdWUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpfSx0aGlzLl93aW5kb3dCbHVyPSgpPT57dGhpcy5fbGFzdFBvaW50ZXJFdmVudCYmdGhpcy5fcG9pbnRlclVwKHRoaXMuX2xhc3RQb2ludGVyRXZlbnQpfSx0aGlzLl9kb2N1bWVudD1sLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocyl8fDAsYS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCB1PWUubmF0aXZlRWxlbWVudDt1LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpfSl9Z2V0IGludmVydCgpe3JldHVybiB0aGlzLl9pbnZlcnR9c2V0IGludmVydChlKXt0aGlzLl9pbnZlcnQ9V3QoZSl9Z2V0IG1heCgpe3JldHVybiB0aGlzLl9tYXh9c2V0IG1heChlKXt0aGlzLl9tYXg9UGkoZSx0aGlzLl9tYXgpLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IG1pbigpe3JldHVybiB0aGlzLl9taW59c2V0IG1pbihlKXt0aGlzLl9taW49UGkoZSx0aGlzLl9taW4pLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcH1zZXQgc3RlcChlKXt0aGlzLl9zdGVwPVBpKGUsdGhpcy5fc3RlcCksdGhpcy5fc3RlcCUxIT0wJiYodGhpcy5fcm91bmRUb0RlY2ltYWw9dGhpcy5fc3RlcC50b1N0cmluZygpLnNwbGl0KCIuIikucG9wKCkubGVuZ3RoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgdGh1bWJMYWJlbCgpe3JldHVybiB0aGlzLl90aHVtYkxhYmVsfXNldCB0aHVtYkxhYmVsKGUpe3RoaXMuX3RodW1iTGFiZWw9V3QoZSl9Z2V0IHRpY2tJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90aWNrSW50ZXJ2YWx9c2V0IHRpY2tJbnRlcnZhbChlKXt0aGlzLl90aWNrSW50ZXJ2YWw9ImF1dG8iPT09ZT8iYXV0byI6Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGU/UGkoZSx0aGlzLl90aWNrSW50ZXJ2YWwpOjB9Z2V0IHZhbHVlKCl7cmV0dXJuIG51bGw9PT10aGlzLl92YWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5fbWluKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7aWYoZSE9PXRoaXMuX3ZhbHVlKXtsZXQgaT1QaShlLDApO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZpIT09dGhpcy5taW4mJmkhPT10aGlzLm1heCYmKGk9cGFyc2VGbG9hdChpLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9aSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKGUpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoZSl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtsZXQgaT10aGlzLnZlcnRpY2FsP2AxLCAkezEtdGhpcy5wZXJjZW50fSwgMWA6MS10aGlzLnBlcmNlbnQrIiwgMSwgMSI7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iLSI6IiJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7aX0pYH19X2dldFRyYWNrRmlsbFN0eWxlcygpe2xldCBlPXRoaXMucGVyY2VudCxyPXRoaXMudmVydGljYWw/YDEsICR7ZX0sIDFgOmAke2V9LCAxLCAxYDtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyIiOiItIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtyfSlgLGRpc3BsYXk6MD09PWU/Im5vbmUiOiIifX1fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKXtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/Ii0iOiIifSR7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudC8yKjEwMH0lKWB9fV9nZXRUaWNrc1N0eWxlcygpe2xldCBlPTEwMCp0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LGE9e2JhY2tncm91bmRTaXplOnRoaXMudmVydGljYWw/YDJweCAke2V9JWA6YCR7ZX0lIDJweGAsdHJhbnNmb3JtOmB0cmFuc2xhdGVaKDApIHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiLSJ9JHtlLzJ9JSkke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiIHJvdGF0ZSgxODBkZWcpIn1gfTtpZih0aGlzLl9pc01pblZhbHVlKCkmJnRoaXMuX2dldFRodW1iR2FwKCkpe2xldCBjLGw9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO2M9dGhpcy52ZXJ0aWNhbD9sPyJCb3R0b20iOiJUb3AiOmw/IlJpZ2h0IjoiTGVmdCIsYVtgcGFkZGluZyR7Y31gXT1gJHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4YH1yZXR1cm4gYX1fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKXtsZXQgZT10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlKT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybiJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlfV9nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57dGhpcy5faXNBY3RpdmU9ISFlJiYia2V5Ym9hcmQiIT09ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9kaXImJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5fZGlyLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9bnVsbCx0aGlzLl9yZW1vdmVHbG9iYWxFdmVudHMoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X29uTW91c2VlbnRlcigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCkpfV9vbkZvY3VzKCl7dGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpfV9vbkJsdXIoKXt0aGlzLm9uVG91Y2hlZCgpfV9vbktleWRvd24oZSl7aWYodGhpcy5kaXNhYmxlZHx8TXIoZSl8fHRoaXMuX2lzU2xpZGluZyYmImtleWJvYXJkIiE9PXRoaXMuX2lzU2xpZGluZylyZXR1cm47bGV0IGk9dGhpcy52YWx1ZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDMzOnRoaXMuX2luY3JlbWVudCgxMCk7YnJlYWs7Y2FzZSAzNDp0aGlzLl9pbmNyZW1lbnQoLTEwKTticmVhaztjYXNlIDM1OnRoaXMudmFsdWU9dGhpcy5tYXg7YnJlYWs7Y2FzZSAzNjp0aGlzLnZhbHVlPXRoaXMubWluO2JyZWFrO2Nhc2UgMzc6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8xOi0xKTticmVhaztjYXNlIDM4OnRoaXMuX2luY3JlbWVudCgxKTticmVhaztjYXNlIDM5OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/LTE6MSk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9pbmNyZW1lbnQoLTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWkhPXRoaXMudmFsdWUmJih0aGlzLl9lbWl0SW5wdXRFdmVudCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKSx0aGlzLl9pc1NsaWRpbmc9ImtleWJvYXJkIixlLnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXsia2V5Ym9hcmQiPT09dGhpcy5faXNTbGlkaW5nJiYodGhpcy5faXNTbGlkaW5nPW51bGwpfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fYmluZEdsb2JhbEV2ZW50cyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudCxyPXZ3KGUpLHM9cj8idG91Y2hlbmQiOiJtb3VzZXVwIjtpLmFkZEV2ZW50TGlzdGVuZXIocj8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxQbCksaS5hZGRFdmVudExpc3RlbmVyKHMsdGhpcy5fcG9pbnRlclVwLFBsKSxyJiZpLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsUGwpO2xldCBhPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBhPCJ1IiYmYSYmYS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1fcmVtb3ZlR2xvYmFsRXZlbnRzKCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCxQbCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAsUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxQbCk7bGV0IGk9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGk8InUiJiZpJiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQoZSl7bGV0IGk9dGhpcy5fY2xhbXAodGhpcy52YWx1ZXx8MCx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy52YWx1ZT10aGlzLl9jbGFtcChpK3RoaXMuc3RlcCplLHRoaXMubWluLHRoaXMubWF4KX1fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZSl7aWYoIXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBzPXRoaXMuX2NsYW1wKCgodGhpcy52ZXJ0aWNhbD9lLnk6ZS54KS0odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLnRvcDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLmxlZnQpKS8odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoKSk7aWYodGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSYmKHM9MS1zKSwwPT09cyl0aGlzLnZhbHVlPXRoaXMubWluO2Vsc2UgaWYoMT09PXMpdGhpcy52YWx1ZT10aGlzLm1heDtlbHNle2xldCBhPXRoaXMuX2NhbGN1bGF0ZVZhbHVlKHMpLGw9TWF0aC5yb3VuZCgoYS10aGlzLm1pbikvdGhpcy5zdGVwKSp0aGlzLnN0ZXArdGhpcy5taW47dGhpcy52YWx1ZT10aGlzLl9jbGFtcChsLHRoaXMubWluLHRoaXMubWF4KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy52YWx1ZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X2VtaXRJbnB1dEV2ZW50KCl7dGhpcy5pbnB1dC5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl7aWYoIXRoaXMudGlja0ludGVydmFsfHwhdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU7aWYoImF1dG8iPT10aGlzLnRpY2tJbnRlcnZhbCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoO2U9TWF0aC5jZWlsKDMwLyhpKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pKSkqdGhpcy5zdGVwL2l9ZWxzZSBlPXRoaXMudGlja0ludGVydmFsKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9WnRlKGUpP2U6MH1fY3JlYXRlQ2hhbmdlRXZlbnQoZT10aGlzLnZhbHVlKXtsZXQgaT1uZXcgY2xhc3N7fTtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLnZhbHVlPWUsaX1fY2FsY3VsYXRlUGVyY2VudGFnZShlKXtsZXQgaT0oKGV8fDApLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pO3JldHVybiBadGUoaSk/aTowfV9jYWxjdWxhdGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5taW4rZSoodGhpcy5tYXgtdGhpcy5taW4pfV9jbGFtcChlLGk9MCxyPTEpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKGUscikpfV9nZXRTbGlkZXJEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX3NsaWRlcldyYXBwZXI/dGhpcy5fc2xpZGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGx9X2ZvY3VzSG9zdEVsZW1lbnQoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9ibHVySG9zdEVsZW1lbnQoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoenIpLHcobm4pLHcoaXIsOCksS28oInRhYmluZGV4IiksdyhwdCksdyhCdCksdyhMaSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNsaWRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJrZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9zbGlkZXJXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInNsaWRlciIsMSwibWF0LXNsaWRlciIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoyOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uS2V5ZG93bihvKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25LZXl1cCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTW91c2VlbnRlcigpfSkoInNlbGVjdHN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksMiZlJiYoQWEoInRhYkluZGV4IixpLnRhYkluZGV4KSx6ZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImFyaWEtdmFsdWVtYXgiLGkubWF4KSgiYXJpYS12YWx1ZW1pbiIsaS5taW4pKCJhcmlhLXZhbHVlbm93IixpLnZhbHVlKSgiYXJpYS12YWx1ZXRleHQiLG51bGw9PWkudmFsdWVUZXh0P2kuZGlzcGxheVZhbHVlOmkudmFsdWVUZXh0KSgiYXJpYS1vcmllbnRhdGlvbiIsaS52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIiksYXQoIm1hdC1zbGlkZXItZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtc2xpZGVyLWhhcy10aWNrcyIsaS50aWNrSW50ZXJ2YWwpKCJtYXQtc2xpZGVyLWhvcml6b250YWwiLCFpLnZlcnRpY2FsKSgibWF0LXNsaWRlci1heGlzLWludmVydGVkIixpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJtYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHMiLGkuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkpKCJtYXQtc2xpZGVyLXNsaWRpbmciLGkuX2lzU2xpZGluZykoIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyIsaS50aHVtYkxhYmVsKSgibWF0LXNsaWRlci12ZXJ0aWNhbCIsaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItbWluLXZhbHVlIixpLl9pc01pblZhbHVlKCkpKCJtYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrIixpLmRpc2FibGVkfHxpLl9pc01pblZhbHVlKCkmJmkuX2dldFRodW1iR2FwKCkmJmkuX3Nob3VsZEludmVydEF4aXMoKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLGludmVydDoiaW52ZXJ0IixtYXg6Im1heCIsbWluOiJtaW4iLHN0ZXA6InN0ZXAiLHRodW1iTGFiZWw6InRodW1iTGFiZWwiLHRpY2tJbnRlcnZhbDoidGlja0ludGVydmFsIix2YWx1ZToidmFsdWUiLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsdmFsdWVUZXh0OiJ2YWx1ZVRleHQiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIixpbnB1dDoiaW5wdXQiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U2xpZGVyIl0sZmVhdHVyZXM6WyR0KFtja2VdKSx0dF0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsIm1hdC1zbGlkZXItd3JhcHBlciJdLFsic2xpZGVyV3JhcHBlciIsIiJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXIiXSxbMSwibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stZmlsbCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItZm9jdXMtcmluZyJdLFsxLCJtYXQtc2xpZGVyLXRodW1iIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwiXSxbMSwibWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSkoMiwiZGl2IiwyKSxOKDMsImRpdiIsMykoNCwiZGl2Iiw0KSx2KCksZyg1LCJkaXYiLDUpLE4oNiwiZGl2Iiw2KSx2KCksZyg3LCJkaXYiLDcpLE4oOCwiZGl2Iiw4KSg5LCJkaXYiLDkpLGcoMTAsImRpdiIsMTApKDExLCJzcGFuIiwxMSksRCgxMiksdigpKCkoKSgpKSwyJmUmJih4KDMpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrQmFja2dyb3VuZFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrRmlsbFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCkpLHgoMSksYigibmdTdHlsZSIsaS5fZ2V0VGlja3NTdHlsZXMoKSkseCgxKSxiKCJuZ1N0eWxlIixpLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSx4KDUpLHl0KGkuZGlzcGxheVZhbHVlKSl9LGRlcGVuZGVuY2llczpbd3BdLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVyey13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3std2Via2l0LWJhY2tncm91bmQtY2xpcDpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOmdyYWJ9Lm1hdC1zbGlkZXItdGh1bWJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7Ym90dG9tOi0xMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlcjozcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gWnRlKG4pe3JldHVybiFpc05hTihuKSYmaXNGaW5pdGUobil9ZnVuY3Rpb24gdncobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIEp0ZShuLHQpe2xldCBlO3JldHVybiBlPXZ3KG4pPyJudW1iZXIiPT10eXBlb2YgdD9XNShuLnRvdWNoZXMsdCl8fFc1KG4uY2hhbmdlZFRvdWNoZXMsdCk6bi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzWzBdOm4sZT97eDplLmNsaWVudFgseTplLmNsaWVudFl9OnZvaWQgMH1mdW5jdGlvbiBXNShuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0uaWRlbnRpZmllcj09PXQpcmV0dXJuIG5bZV19dmFyIGloPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkbixkbl19KSxufSkoKTtmdW5jdGlvbiBwa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtc2xpZGVyIiwxMSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVyQ2hhbmdlLmVtaXQoci52YWx1ZSkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJtaW4iLDApKCJtYXgiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQpKCJ2YWx1ZSIsZS5zY3JvbGxCZWdpbkluZGV4KX19ZnVuY3Rpb24gaGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSgxLCJidXR0b24iLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25OYXZpZ2F0ZUxlZnQuZW1pdCgpKX0pLEQoMiwiIDwgIiksdigpLGcoMywiZGl2Iiw4KSxEKDQpLHYoKSxnKDUsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk5hdmlnYXRlUmlnaHQuZW1pdCgpKX0pLEQoNiwiID4gIiksdigpLEUoNyxwa2UsMSwzLCJtYXQtc2xpZGVyIiwxMCksdigpfWlmKDImbil7bGV0IGU9TSgpO3goNCksV0UoIiAiLGUuc2Nyb2xsQmVnaW5JbmRleCwiIH4gIixlLnNjcm9sbEJlZ2luSW5kZXgrZS5kaXNwbGF5Q291bnQtMSwiIG9mICIsZS5udW1FeGVjdXRpb25zLCIgIikseCgzKSxiKCJuZ0lmIixlLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PjApfX12YXIgZmtlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm5bbix0LGVdfTtmdW5jdGlvbiBta2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChvKSl9KSxnKDEsImRpdiIsMTUpLEQoMiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDIpO3goMSkseHIoInRpdGxlIixlLm9wX3R5cGUpLGIoIm5nQ2xhc3MiLGtiKDMsZmtlLGUuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixpPT09ci5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixyLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tpXXx8IiIpKSx4KDEpLHFlKCIgIixlLnNob3J0X29wX3R5cGUsIiAiKX19ZnVuY3Rpb24gZ2tlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEyKSxFKDEsbWtlLDMsNywiZGl2IiwxMyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nRm9yT2YiLGUuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMpfX1mdW5jdGlvbiBfa2Uobix0KXtpZigxJm4mJihLdCgwKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIiwxNiksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGUuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19dmFyICR0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmVSdW5JZD1udWxsLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnM9ITEsdGhpcy5udW1FeGVjdXRpb25zPTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4PTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD0wLHRoaXMucGFnZVNpemU9MCx0aGlzLmRpc3BsYXlDb3VudD0wLHRoaXMuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM9W10sdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM9W10sdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhPW51bGwsdGhpcy5vbk5hdmlnYXRlTGVmdD1uZXcgRyx0aGlzLm9uTmF2aWdhdGVSaWdodD1uZXcgRyx0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZD1uZXcgRyx0aGlzLm9uU2xpZGVyQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0aW1lbGluZS1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVSdW5JZDoiYWN0aXZlUnVuSWQiLGxvYWRpbmdOdW1FeGVjdXRpb25zOiJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsbnVtRXhlY3V0aW9uczoibnVtRXhlY3V0aW9ucyIsc2Nyb2xsQmVnaW5JbmRleDoic2Nyb2xsQmVnaW5JbmRleCIsc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ6InNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixwYWdlU2l6ZToicGFnZVNpemUiLGRpc3BsYXlDb3VudDoiZGlzcGxheUNvdW50IixkaXNwbGF5RXhlY3V0aW9uRGlnZXN0czoiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLGRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlczoiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIn0sb3V0cHV0czp7b25OYXZpZ2F0ZUxlZnQ6Im9uTmF2aWdhdGVMZWZ0Iixvbk5hdmlnYXRlUmlnaHQ6Im9uTmF2aWdhdGVSaWdodCIsb25FeGVjdXRpb25EaWdlc3RDbGlja2VkOiJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLG9uU2xpZGVyQ2hhbmdlOiJvblNsaWRlckNoYW5nZSJ9LGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzEsInRpbWVsaW5lLXRpdGxlIl0sWzEsImV4ZWN1dGlvbi1jb3VudCJdLFsxLCJ0b3AtbGV2ZWwtZXhlY3V0aW9ucyJdLFsiY2xhc3MiLCJuYXZpZ2F0aW9uLXNlY3Rpb24iLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhlY3V0aW9uLXRpbWVsaW5lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibmF2aWdhdGlvbi1zZWN0aW9uIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1sZWZ0IiwzLCJjbGljayJdLFsxLCJuYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm8iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLXJpZ2h0IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ0aW1lbGluZS1zbGlkZXIiLCJzdGVwIiwiMSIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiJdLFsic3RlcCIsIjEiLDEsInRpbWVsaW5lLXNsaWRlciIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCJdLFsxLCJleGVjdXRpb24tdGltZWxpbmUiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJleGVjdXRpb24tZGlnZXN0IiwzLCJuZ0NsYXNzIiwidGl0bGUiXSxbMywiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSgxLCJkaXYiLDApLEQoMiwiIFB5dGhvbiBFeGVjdXRpb24gVGltZWxpbmUgIiksZygzLCJzcGFuIiwxKSxEKDQpLHYoKSgpLGcoNSwiZGl2IiwyKSxFKDYsaGtlLDgsNCwiZGl2IiwzKSxFKDcsZ2tlLDIsMSwiZGl2Iiw0KSxFKDgsX2tlLDIsMSwibmctY29udGFpbmVyIiw1KSx2KCkoKSksMiZlJiYoeCg0KSxxZSgiICgiLGkubnVtRXhlY3V0aW9ucywiKSAiKSx4KDIpLGIoIm5nSWYiLGkubnVtRXhlY3V0aW9ucykseCgxKSxiKCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuYWN0aXZlUnVuSWQmJm51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25JbmRleCkpfSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLEt0ZSwkbixUZF0sc3R5bGVzOlsiLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgY29sb3I6ICM0MjUwNjY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMHB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZnVuYy1ncmFwaC1leGVjdXRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZGJmNTtcbiAgY29sb3I6ICM0ZTU2NjQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ0YjM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5JbmZOYW5BbGVydFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuXG4uZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV06aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnRpbWVsaW5lLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogNDhweDtcbiAgbGVmdDogMzQwcHg7IFxuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA0MHB4O1xufVxuXG4gIC50aW1lbGluZS1zbGlkZXIgLm1hdC1zbGlkZXItdGh1bWIge1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHJpZ2h0OiAtNDBweDtcbiAgd2lkdGg6IDgwcHg7XG59XG5cblxuLm5hdmlnYXRpb24tcG9zaXRpb24taW5mb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm5hdmlnYXRpb24tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseWtlPVsiX19mb3J3YXJkXyIsIl9fYmFja3dhcmRfIiwiX19pbmZlcmVuY2VfIl0sZW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZShmbihtcykpLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihZKEhJLGk9Pmkuc3RhdGU9PUVlLkxPQURJTkcpKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oZncpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh0aCxsdiwoaSxyKT0+TWF0aC5tYXgoMCxpLXIpKSkpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShmbihhdikpLHRoaXMuZGlzcGxheUNvdW50JD10aGlzLnN0b3JlLnBpcGUoZm4obHYpKSx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShkdGUsaT0+aS5tYXAocj0+ZnVuY3Rpb24obix0PTEpe2lmKCFuKXJldHVybntvcF90eXBlOiIoTi9BKSIsc2hvcnRfb3BfdHlwZToiLi4iLGlzX2dyYXBoOiExfTtsZXQgZT15a2UuZmlsdGVyKGk9Pm4ub3BfdHlwZS5zdGFydHNXaXRoKGkpKTtpZihlLmxlbmd0aCl7bGV0IGk9bi5vcF90eXBlLnNsaWNlKGVbMF0ubGVuZ3RoKTtyZXR1cm57b3BfdHlwZTpuLm9wX3R5cGUsc2hvcnRfb3BfdHlwZTppLnNsaWNlKDAsdCksaXNfZ3JhcGg6ITB9fXJldHVybntvcF90eXBlOm4ub3BfdHlwZSxzaG9ydF9vcF90eXBlOm4ub3BfdHlwZS5zbGljZSgwLHQpLGlzX2dyYXBoOiExfX0ocikpKSkpLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJD10aGlzLnN0b3JlLnBpcGUoZm4oYnRlKSksdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShmbihMNSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKHh0ZSkpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKGZuKHRoKSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFpfKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSl8oKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZXYoe2Rpc3BsYXlJbmRleDplfSkpfW9uU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJF8oe2luZGV4OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLFAoIm9uTmF2aWdhdGVMZWZ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVMZWZ0KCl9KSgib25OYXZpZ2F0ZVJpZ2h0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVSaWdodCgpfSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKG8pfSkoIm9uU2xpZGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNsaWRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiYWN0aXZlUnVuSWQiLFcoMSwxMSxpLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsVygyLDEzLGkubG9hZGluZ051bUV4ZWN1dGlvbnMkKSkoIm51bUV4ZWN1dGlvbnMiLFcoMywxNSxpLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLFcoNCwxNyxpLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixXKDUsMTksaS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQpKSgicGFnZVNpemUiLFcoNiwyMSxpLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLFcoNywyMyxpLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFcoOCwyNSxpLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJCkpKCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLFcoOSwyNyxpLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixXKDEwLDI5LGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixXKDExLDMxLGkuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQpKX0sZGVwZW5kZW5jaWVzOlskdGUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIENrZShuLHQpezEmbiYmTigwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIpfWZ1bmN0aW9uIHdrZShuLHQpezEmbiYmKGcoMCwiZGl2IiwzKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyIpLGcoMiwiZGl2Iiw0KSxOKDMsInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIikoNCwidGYtZGVidWdnZXItdjItZ3JhcGgiKSx2KCksTig1LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIiksdigpLGcoNiwiZGl2Iiw1KSxOKDcsInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyIpKDgsInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIiksdigpKX12YXIgdG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJ1bnM9e30sdGhpcy5ydW5JZHM9W10sdGhpcy5hY3RpdmVSdW5JZD1udWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Z2dlci1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixydW5JZHM6InJ1bklkcyIsYWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIn0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZGVidWdnZXItY29udGFpbmVyIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZGF0YUF2YWlsYWJsZSIsIiJdLFsxLCJ0b3Atc2VjdGlvbiJdLFsxLCJ0b3AtY2VudGVyLXNlY3Rpb24iXSxbMSwiYm90dG9tLXNlY3Rpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCksRSgxLENrZSwxLDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIiwxKSxFKDIsd2tlLDksMCwibmctdGVtcGxhdGUiLG51bGwsMixlbiksdigpKSwyJmUpe2xldCByPXN0KDMpO3goMSksYigibmdJZiIsMD09PWkucnVuSWRzLmxlbmd0aCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRHRlLFhlLFB0ZSxrdGUsTnRlLFd0ZSxZdGUsZW5lXSxzdHlsZXM6WyIuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG5uZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJ1bnMkPXRoaXMuc3RvcmUucGlwZShmbihmbSkpLHRoaXMucnVuc0lkcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZm0saT0+T2JqZWN0LmtleXMoaSkpKSksdGhpcy5hY3RpdmVSdW5JZCQ9dGhpcy5zdG9yZS5waXBlKGZuKG1zKSl9bmdPbkluaXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF9JKCkpfW5nT25EZXN0cm95KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh2SSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bnMiLCJydW5JZHMiLCJhY3RpdmVSdW5JZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiZGVidWdnZXItY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSksMiZlJiZiKCJydW5zIixXKDEsMyxpLnJ1bnMkKSkoInJ1bklkcyIsVygyLDUsaS5ydW5zSWRzJCkpKCJhY3RpdmVSdW5JZCIsVygzLDcsaS5hY3RpdmVSdW5JZCQpKX0sZGVwZW5kZW5jaWVzOlt0bmUsZnRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdfSksbn0pKCksS0k9ImRlYnVnZ2VyLXYyIjtmdW5jdGlvbiBxNShuLHQsZSxpLHIpe2lmKGU8PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYWdlU2l6ZTogJHtlfWApO2lmKHQ+aSl0aHJvdyBuZXcgRXJyb3IoYGVuZCBpbmRleCAoJHt0fSkgZXhjZWVkcyB0b3RhbCBudW1iZXIgb2YgaXRlbXMgKCR7aX0pYCk7aWYodC1uPmUpdGhyb3cgbmV3IEVycm9yKCJiZWdpbi1lbmQgc3BhbiBleGNlZWRzIHBhZ2Ugc2l6ZSwgd2hpY2ggaXMgbm90IGFsbG93ZWQiKTtsZXQgbz1bXSxzPU1hdGguZmxvb3Iobi9lKTsoIShzIGluIHIpfHxyW3NdPGUmJnMqZStyW3NdPGkpJiZvLnB1c2gocyk7bGV0IGE9TWF0aC5mbG9vcigodC0xKS9lKTtyZXR1cm4gYSE9PXMmJighKGEgaW4gcil8fGEqZStyW2FdPHQmJnQ8aSkmJm8ucHVzaChhKSxvfXZhciBvbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmxvYWREYXRhJD1VcigoKT0+e2xldCBvPXRoaXMubG9hZERlYnVnZ2VyUnVucyh1bih0aGlzLm9uRGVidWdnZXJEYXRhUG9sbCgpLHRoaXMub25Db3JlUmVsb2FkKCkpKS5waXBlKFhzKCkpLHM9dGhpcy5sb2FkU291cmNlRmlsZUxpc3QobyksYT10aGlzLmNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihvKSxsPXRoaXMuY3JlYXRlTnVtQWxlcnRzQW5kQnJlYWtkb3duTG9hZGVyKG8pLGM9dGhpcy5vbkFsZXJ0VHlwZUZvY3VzZWQoKSx1PXRoaXMuZmV0Y2hFeGVjdXRpb25EaWdlc3RzRm9yQWxlcnRUeXBlRm9jdXMoYyksZD10aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihhKS5waXBlKFhzKCkpLHA9dGhpcy5jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIodW4odGhpcy5vbkV4ZWN1dGlvblNjcm9sbCgpLHRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRpZ2VzdChkKSx1KSksaD10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcih1bih0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpLGQucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QoQjUpKSxCKChbLHksSV0pPT4oe2FjdGl2ZVJ1bklkOnksbG9hZGVkRXhlY3V0aW9uRGF0YTpJLGZvY3VzSW5kZXg6MH0pKSkpKTtyZXR1cm4gdW4obCxwLGgsdGhpcy5jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihvKSxzLHRoaXMub25Tb3VyY2VGaWxlRm9jdXNlZCgpLHRoaXMubG9hZEdyYXBoRXhlY3V0aW9uUGFnZXModGhpcy5vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCkpLHRoaXMubG9hZEdyYXBoT3BTdGFja0ZyYW1lcyh0aGlzLmxvYWRHcmFwaE9wSW5mbygpKSkucGlwZShCKCgpPT4oe30pKSl9LHtkaXNwYXRjaDohMX0pfW9uRGVidWdnZXJEYXRhUG9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoX0kpLHZpKGU9PmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpLG8scj0hMSxzPSExLGE9ITEsbD0oKT0+YSYmcyYmKGUuY29tcGxldGUoKSwhMCksdT0oKT0+e2E9ITEsaT10LnN1YnNjcmliZShMdChlLHZvaWQgMCwoKT0+e2E9ITAsIWwoKSYmKG98fChvPW5ldyBUZSxuKG8pLnN1YnNjcmliZShMdChlLCgpPT57aT91KCk6cj0hMH0sKCk9PntzPSEwLGwoKX0pKSksbykubmV4dCgpfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLHI9ITEsdSgpKX07dSgpfSl9KGk9PmkucGlwZShHdCh0KSx2ZygoWyxyXSk9PnhhKHIpKSkpLG90KGUpLEIoKCk9Pnt9KSl9KGp0KGUpLHRoaXMuc3RvcmUuc2VsZWN0KHN0ZSkucGlwZShCKGk9PmZ1bmN0aW9uKG4pe3JldHVybiBuPjZlND82ZTQ6bj40ZTM/bjoyZTN9KGkpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKHZJKSkpKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChsdygpKSksQigoKT0+e30pKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gdW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKHdsLEhhKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKF91KSkucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLGVdKT0+ZS5zdGF0ZT09PUVlLk5PVF9MT0FERUR8fGUuc3RhdGU9PT1FZS5GQUlMRUQmJm51bGw9PT1lLmxhc3RMb2FkZWRUaW1lSW5NcykpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssZV0pPT5lPT09S0kpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGx3KCkpKSxCKCgpPT57fSkpfWxvYWREZWJ1Z2dlclJ1bnMoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLHtzdGF0ZTppfV0pPT5pIT09RWUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goeUkoKSkpLF9uKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShOdChpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChiSSh7cnVuczppfSkpfSksQigoKT0+e30pKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChISSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHdJKCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChNSSh7bnVtRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksQigoKT0+e30pKX0pKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChwdGUpKSxIZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChESSgpKSksX24oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChBSSh7bnVtR3JhcGhFeGVjdXRpb25zOmEubnVtX2RpZ2VzdHN9KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChQNSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKHIsMCwwKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhJKHtudW1BbGVydHM6YS5udW1fYWxlcnRzLGFsZXJ0c0JyZWFrZG93bjphLmFsZXJ0c19icmVha2Rvd259KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHRoKSx0aGlzLnN0b3JlLnNlbGVjdChodykpLEhlKChbLGkscl0pPT5pPjAmJjA9PT1PYmplY3Qua2V5cyhyLnBhZ2VMb2FkZWRTaXplcykubGVuZ3RoKSxCKCgpPT57fSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFssLGldKT0+bnVsbCE9PWkpLEIoKFssaSxyLG9dKT0+KHtiZWdpbjowLGVuZDpNYXRoLm1pbihpLG8pLHJ1bklkOnJ9KSkpfW9uRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaShaXyxKXywkXyksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGZ3KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobHYpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFtlXSk9Pm51bGwhPT1lKSxCKChbLGUsaSxyLG8sc10pPT4oe3J1bklkOmUsYmVnaW46aSxlbmQ6TWF0aC5taW4ocixpK28pLHBhZ2VTaXplOnN9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxCKChbZSxpXSk9Pih7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cTUoZS5iZWdpbixlLmVuZCxlLnBhZ2VTaXplLGkubnVtRXhlY3V0aW9ucyxpLnBhZ2VMb2FkZWRTaXplcyl9KSksSGUoKHttaXNzaW5nUGFnZXM6ZX0pPT5lLmxlbmd0aD4wKSxCKCh7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cn0pPT57bGV0e3J1bklkOm8scGFnZVNpemU6c309ZTtyZXR1cm57YmVnaW46clswXSpzLGVuZDpNYXRoLm1pbihpLm51bUV4ZWN1dGlvbnMsKHJbci5sZW5ndGgtMV0rMSkqcykscnVuSWQ6b319KSl9Y3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxIZSgoW3tiZWdpbjppLGVuZDpyfSxvXSk9PnI+aSYmIWZ1bmN0aW9uKG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybi0xIT09bi5maW5kSW5kZXgoaT0+aS5iZWdpbj49dCYmaS5lbmQ8PWUpfShvLmxvYWRpbmdSYW5nZXMsaSxyKSksTnQoKFt7YmVnaW46aSxlbmQ6cn1dKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goU0koe2JlZ2luOmksZW5kOnJ9KSl9KSxfbigoW3tydW5JZDppLGJlZ2luOnIsZW5kOm99XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoaSxyLG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRUkocykpfSksQigoKT0+e30pKSkpfW9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoZXYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChCNSksdGhpcy5zdG9yZS5zZWxlY3QoZncpKSxCKChbZSxpLHIsb10pPT4oe2FjdGl2ZVJ1bklkOmksbG9hZGVkRXhlY3V0aW9uRGF0YTpyLGZvY3VzSW5kZXg6bytlLmRpc3BsYXlJbmRleH0pKSl9Y3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoSGUoKHthY3RpdmVSdW5JZDppLGxvYWRlZEV4ZWN1dGlvbkRhdGE6cixmb2N1c0luZGV4Om99KT0+bnVsbCE9PWkmJm51bGwhPT1vJiZ2b2lkIDA9PT1yW29dKSxfbigoe2FjdGl2ZVJ1bklkOmksZm9jdXNJbmRleDpyfSk9PntsZXQgbz1yLHM9bysxO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EYXRhKGksbyxzKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRJKGEpKX0pLEIoYT0+KHtleGVjdXRpb25EYXRhOmEsYmVnaW46byxlbmQ6c30pKSl9KSxCKCh7ZXhlY3V0aW9uRGF0YTppfSk9PmkuZXhlY3V0aW9uc1swXSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksSGUoKFtpLHIsb10pPT57aWYobnVsbD09PXIpcmV0dXJuITE7Zm9yKGxldCBzIG9mIGkuc3RhY2tfZnJhbWVfaWRzKWlmKHZvaWQgMD09PW9bc10pcmV0dXJuITA7cmV0dXJuITF9KSxfbigoW2kscl0pPT57bGV0IG89aS5zdGFja19mcmFtZV9pZHM7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKHIsbykucGlwZShOdChzPT57bGV0IGE9e307Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDsrK2wpYVtvW2xdXT1zLnN0YWNrX2ZyYW1lc1tsXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczphfSkpfSksQigoKT0+e30pKX0pKX1vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaSh0diksQXIoMTAwKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QobXcpLHRoaXMuc3RvcmUuc2VsZWN0KGh0ZSkpLEhlKChbLGUsaV0pPT5udWxsIT09ZSYmaT4wKSxCKChbLGUsaSxyXSk9Pih7cnVuSWQ6ZSxudW1HcmFwaEV4ZWN1dGlvbnM6aSxzY3JvbGxCZWdpbkluZGV4OnJ9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXRlKSx0aGlzLnN0b3JlLnNlbGVjdChmdGUpLHRoaXMuc3RvcmUuc2VsZWN0KGd0ZSksdGhpcy5zdG9yZS5zZWxlY3QoX3RlKSksQigoW3tydW5JZDplLG51bUdyYXBoRXhlY3V0aW9uczppLHNjcm9sbEJlZ2luSW5kZXg6cn0sbyxzLGEsbF0pPT57bGV0IGM9cTUocixNYXRoLm1pbihyK3MsaSksbyxpLGwpO3JldHVybiBjPWMuZmlsdGVyKHU9Pi0xPT09YS5pbmRleE9mKHUpKSx7cnVuSWQ6ZSxtaXNzaW5nUGFnZXM6YyxwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczppfX0pKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyhlKXtyZXR1cm4gZS5waXBlKEhlKCh7bWlzc2luZ1BhZ2VzOml9KT0+aS5sZW5ndGg+MCksTnQoKHttaXNzaW5nUGFnZXM6aX0pPT57aS5mb3JFYWNoKHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKElJKHtwYWdlSW5kZXg6cn0pKX0pfSksX24oKHtydW5JZDppLG1pc3NpbmdQYWdlczpyLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOnN9KT0+e2xldCBhPXJbMF0qbyxsPU1hdGgubWluKChyW3IubGVuZ3RoLTFdKzEpKm8scyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShpLGEsbCkucGlwZShOdChjPT57dGhpcy5zdG9yZS5kaXNwYXRjaChQSShjKSl9KSxCKCgpPT57fSkpfSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoaXYsbnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChDdGUpKSxIZSgoW2UsaSxyXSk9PntsZXR7Z3JhcGhfaWQ6byxvcF9uYW1lOnN9PWU7cmV0dXJuIShudWxsPT09aXx8dm9pZCAwIT09cltvXSYmcltvXS5oYXMocykmJihyW29dLmdldChzKT09PUVlLkxPQURJTkd8fHJbb10uZ2V0KHMpPT09RWUuTE9BREVEKSl9KSxOdCgoW3tncmFwaF9pZDplLG9wX25hbWU6aX1dKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChSSSh7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9KSkpLF9uKChbZSxpXSk9PntsZXR7Z3JhcGhfaWQ6cixvcF9uYW1lOm99PWU7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoT3BJbmZvKGkscixvKS5waXBlKE50KHM9PnRoaXMuc3RvcmUuZGlzcGF0Y2goT0koe2dyYXBoT3BJbmZvUmVzcG9uc2U6c30pKSksQihzPT4oe3J1bklkOmksc3RhY2tGcmFtZUlkczpzLnN0YWNrX2ZyYW1lX2lkc30pKSl9KSl9bG9hZEdyYXBoT3BTdGFja0ZyYW1lcyhlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksQigoW3tydW5JZDppLHN0YWNrRnJhbWVJZHM6cn0sb10pPT4oe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6ci5maWx0ZXIoYT0+dm9pZCAwPT09b1thXSl9KSksSGUoKHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnJ9KT0+bnVsbCE9PWkmJnIubGVuZ3RoPjApLF9uKCh7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKGkscikucGlwZShOdChvPT57bGV0IHM9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDsrK2Epc1tyW2FdXT1vLnN0YWNrX2ZyYW1lc1thXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczpzfSkpfSksQigoKT0+e30pKSkpfW9uQWxlcnRUeXBlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoS18pLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChWSSksdGhpcy5zdG9yZS5zZWxlY3QobHRlKSx0aGlzLnN0b3JlLnNlbGVjdChjdGUpLHRoaXMuc3RvcmUuc2VsZWN0KFA1KSksSGUoKFssZSxpLHIsbyxzXSk9Pm51bGwhPT1lJiZudWxsIT09aSYmcj4wJiYobnVsbD09PW98fE9iamVjdC5rZXlzKG8pLmxlbmd0aDxyKSYmcy5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxlLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKGUsMCwtMSxpKSksTnQoKHtudW1fYWxlcnRzOmUsYWxlcnRzX2JyZWFrZG93bjppLGFsZXJ0X3R5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENJKHtudW1BbGVydHM6ZSxhbGVydHNCcmVha2Rvd246aSxhbGVydFR5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSkpfSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoYXYpLHRoaXMuc3RvcmUuc2VsZWN0KGx2KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QoaHcpLHRoaXMuc3RvcmUuc2VsZWN0KG1zKSksQigoW2kscixvLHMsYSxsXSk9PntsZXQgdT1pLmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgsZD1xNShNYXRoLm1heCgwLHUtTWF0aC5mbG9vcihvLzIpKSxNYXRoLm1pbih1K01hdGguZmxvb3Ioby8yKSxzKSxyLHMsYS5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09ZC5sZW5ndGg/e3J1bklkOmwsYmVnaW46MCxlbmQ6MH06e3J1bklkOmwsYmVnaW46ZFswXSpyLGVuZDpNYXRoLm1pbihhLm51bUV4ZWN1dGlvbnMsKGRbZC5sZW5ndGgtMV0rMSkqcil9fSkpfWxvYWRTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChNdGUpKSxIZSgoWyxpLHJdKT0+bnVsbCE9PWkmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChrSSgpKSksX24oKFssaV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlTGlzdChpKS5waXBlKE50KHI9PntsZXQgbz1bXTtyLmZvckVhY2goKFtzLGFdKT0+e28ucHVzaCh7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmF9KX0pLHRoaXMuc3RvcmUuZGlzcGF0Y2goRkkoe3NvdXJjZUZpbGVzOm99KSl9KSxCKCgpPT57fSkpKSl9b25Tb3VyY2VGaWxlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkocnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChINSksdGhpcy5zdG9yZS5zZWxlY3QoakkpKSxCKChbZSxpLHIsb10pPT4oe3J1bklkOmksc3RhY2tGcmFtZTplLnN0YWNrRnJhbWUsZmlsZUluZGV4OnIsZmlsZUNvbnRlbnQ6b30pKSxIZSgoe3J1bklkOmUsZmlsZUNvbnRlbnQ6aX0pPT5udWxsIT09ZSYmbnVsbCE9PWkmJmkubG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRCksTnQoKHtzdGFja0ZyYW1lOmV9KT0+dGhpcy5zdG9yZS5kaXNwYXRjaChOSSh7aG9zdF9uYW1lOmUuaG9zdF9uYW1lLGZpbGVfcGF0aDplLmZpbGVfcGF0aH0pKSksX24oKHtmaWxlSW5kZXg6ZSxydW5JZDppfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGUoaSxlKS5waXBlKE50KHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKExJKHIpKX0pLEIoKCk9Pnt9KSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihnSSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHNuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksYW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZV19KSxufSkoKSxaST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksbG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxaSSxDZF19KSxufSkoKSxjbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHJoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxKST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UscmhdfSksbn0pKCksdW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxKSV19KSxufSkoKSxkbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLEpJXX0pLG59KSgpLHBuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsWkldfSksbn0pKCksaG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxwbmUsUmksaWhdfSksbn0pKCksZm5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltzbmUsa2UsTWwsbG5lLGFuZSxjbmUsdW5lLGRuZSxldGUsaG5lLFJyLmZvckZlYXR1cmUoZHcsb3RlKSxMby5mb3JGZWF0dXJlKFtvbmVdKSxSdS5mb3JQbHVnaW4oS0ksbm5lKV19KSxufSkoKSwkST13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBDbG9zZWQiKSxlUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBUb2dnbGVkIiksdFA9d2UoIltNZXRyaWNzXSBTbGlkZSBvdXQgc2V0dGluZ3MgbWVudSB0b2dnbGVkIiksblA9d2UoIltNZXRyaWNzXSBVc2VyIHJlcXVlc3RlZCB0byBvcGVuIHRoZSBzbGlkZSBvdXQgbWVudSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlQPXdlKCJbTWV0cmljc10gVXNlciBjaGFuZ2VkIHRoZSB0YWIgaW4gdGhlIHRhYmxlIGVkaXRvciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHJQPXdlKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgY2xvc2VkIiksb1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBSZXF1ZXN0ZWQiKSxzUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgRmFpbGVkIiksbFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIENhcmQgU3RhdGUgVXBkYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGN2PXdlKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIEZ1bGwgU2l6ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIENoYW5nZSBUb29sdGlwIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdVA9KHdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBUb2dnbGUgU2hvdyBEYXRhIERvd25sb2FkIiksd2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgVG9nZ2xlIElnbm9yZSBPdXRsaWVyIikpLGRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBDYXJkIFdpZHRoIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUmVzZXQgQ2FyZCBXaWR0aCIpLGZQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbVA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksZ1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2UD13ZSgiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLHlQPXdlKCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLGJQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIikseFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ1A9d2UoIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3UD13ZSgiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTVA9d2UoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx1dj13ZSgiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1A9d2UoIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxFUD13ZSgiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdj13ZSgiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxEUD13ZSgiW01ldHJpY3NdIFRvZ2dsZSBWaXNpYmxlIFBsdWdpbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEFQPXdlKCJbTWV0cmljc10gVG9nZ2xlIFNob3cgQWxsIFBsdWdpbnMiKSxvaD13ZSgiW01ldHJpY3NdIFRpbWUgU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUD13ZSgiW01ldHJpY3NdIENhcmQgVmlldyBCb3ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1uZT13ZSgiW01ldHJpY3NdIExpbmtlZCBUaW1lIFNlbGVjdGlvbiBDbGVhcmVkIiksUFA9d2UoIltNZXRyaWNzXSBMaW5rZWQgVGltZSBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ25lPXdlKCJbTWV0cmljc10gU29ydGluZyBEYXRhIFRhYmxlIEJ5IEhlYWRlciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHB2PXdlKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSUD13ZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc2g9d2UoIltNZXRyaWNzXSBUaW1lIFNlbGVjdG9yIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPUD13ZSgiW01ldHJpY3NdIFJhbmdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX25lPXdlKCJbTWV0cmljc10gSGlkZSBFbXB0eSBDYXJkcyBDaGFuZ2VkIik7ZnVuY3Rpb24geXcobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIEdvPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uU0VUVElOR1NfVEVYVD0ic2V0dGluZ3NUZXh0IixuLlNFVFRJTkdTX1NMSURFUj0ic2V0dGluZ3NTbGlkZXIiLG4uQ0hBTkdFX1RPX1NJTkdMRT0iY2hhbmdlVG9TaW5nbGUiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KEdvfHwoR289e30pKSxHbykpKCksV2E9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShXYXx8KFdhPXt9KSksV2EpKSgpLFZzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0oVnN8fChWcz17fSkpLFZzKSkoKTtmdW5jdGlvbiBrUChuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9PmJ3KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUFrZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gQWtlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiBidyhuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYodm0obltlXSkmJnZtKHRbaV0pKXtsZXQgcj1lLG89aTtlPXZuZShuLGUrMSksaT12bmUodCxpKzEpO2xldCBzPU51bWJlcihuLnNsaWNlKHIsZSkpLGE9TnVtYmVyKHQuc2xpY2UobyxpKSk7aWYoczxhKXJldHVybi0xO2lmKHM+YSlyZXR1cm4gMX1lbHNle2lmKFk1KG5bZV0pKXtpZighWTUodFtpXSkpcmV0dXJuLTF9ZWxzZXtpZihZNSh0W2ldKSlyZXR1cm4gMTtpZihuW2VdPHRbaV0pcmV0dXJuLTE7aWYobltlXT50W2ldKXJldHVybiAxfWUrKyxpKyt9fX1mdW5jdGlvbiB2bmUobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighdm0obltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIXZtKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIXZtKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhdm0obltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gdm0obil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gWTUobil7cmV0dXJuIi8iPT09bnx8dm0obil9dmFyIGZ2PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oZnZ8fChmdj17fSkpLGZ2KSkoKSxtdD0oKCk9PihmdW5jdGlvbihuKXtuLkNPTE9SPSJDT0xPUiIsbi5SRUxBVElWRV9USU1FPSJSRUxBVElWRV9USU1FIixuLlJVTj0iUlVOIixuLlNURVA9IlNURVAiLG4uVElNRT0iVElNRSIsbi5WQUxVRT0iVkFMVUUiLG4uU01PT1RIRUQ9IlNNT09USEVEIixuLlZBTFVFX0NIQU5HRT0iVkFMVUVfQ0hBTkdFIixuLlNUQVJUX1NURVA9IlNUQVJUX1NURVAiLG4uRU5EX1NURVA9IkVORF9TVEVQIixuLlNUQVJUX1ZBTFVFPSJTVEFSVF9WQUxVRSIsbi5FTkRfVkFMVUU9IkVORF9WQUxVRSIsbi5NSU5fVkFMVUU9Ik1JTl9WQUxVRSIsbi5NQVhfVkFMVUU9Ik1BWF9WQUxVRSIsbi5QRVJDRU5UQUdFX0NIQU5HRT0iUEVSQ0VOVEFHRV9DSEFOR0UiLG4uU1RFUF9BVF9NQVg9IlNURVBfQVRfTUFYIixuLlNURVBfQVRfTUlOPSJTVEVQX0FUX01JTiIsbi5NRUFOPSJNRUFOIixuLlJBV19DSEFOR0U9IlJBV19DSEFOR0UifShtdHx8KG10PXt9KSksbXQpKSgpLF9vPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TSU5HTEU9MF09IlNJTkdMRSIsbltuLlJBTkdFPTFdPSJSQU5HRSJ9KF9vfHwoX289e30pKSxfbykpKCkscWE9KCgpPT4oZnVuY3Rpb24obil7bltuLkFTQ0VORElORz0wXT0iQVNDRU5ESU5HIixuW24uREVTQ0VORElORz0xXT0iREVTQ0VORElORyJ9KHFhfHwocWE9e30pKSxxYSkpKCk7ZnVuY3Rpb24gWDUobix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9X2QoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIFBrZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPVg1KG8sbixlKTtpZihudWxsPT09cyljb250aW51ZTtsZXQgYT10Lmhhc093blByb3BlcnR5KG8pP3Rbb10uaW5kZXg6bnVsbCxsPVg1KG8sbixpKSxjPW51bGwhPT1hJiZhPT09bDsobnVsbCE9PWEmJmE+c3x8bnVsbD09PWF8fGMpJiYocltvXT17aW5kZXg6cyxpc0Nsb3Nlc3Q6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiB5bmUobil7bGV0IHQ9eXcobi5ydW5Ub0xvYWRTdGF0ZSxlPT5lPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQpO3JldHVybnsuLi5uLHJ1blRvTG9hZFN0YXRlOnR9fWZ1bmN0aW9uIGJuZShuLHQsZSxpKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW24sdCxlfHwiIixpXSl9dmFye2luaXRpYWxTdGF0ZTpDbmUscmVkdWNlcnM6UmtlfT1ZZih7dGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRUb1Bpbm5lZENvcHk6bmV3IE1hcCxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6bmV3IE1hcCxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuZXcgTWFwLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOltdLGNhcmRNZXRhZGF0YU1hcDp7fSxjYXJkU3RhdGVNYXA6e30sY2FyZFN0ZXBJbmRleDp7fSx0YWdGaWx0ZXI6IiIsdGFnR3JvdXBFeHBhbmRlZDpuZXcgTWFwLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbCxsaW5rZWRUaW1lRW5hYmxlZDohMSxzdGVwU2VsZWN0b3JFbmFibGVkOiExLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDohMSxzaW5nbGVTZWxlY3Rpb25IZWFkZXJzOlt7dHlwZTptdC5SVU4sbmFtZToicnVuIixkaXNwbGF5TmFtZToiUnVuIixlbmFibGVkOiEwfSx7dHlwZTptdC5TTU9PVEhFRCxuYW1lOiJzbW9vdGhlZCIsZGlzcGxheU5hbWU6IlNtb290aGVkIixlbmFibGVkOiEwfSx7dHlwZTptdC5WQUxVRSxuYW1lOiJ2YWx1ZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5TVEVQLG5hbWU6InN0ZXAiLGRpc3BsYXlOYW1lOiJTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5SRUxBVElWRV9USU1FLG5hbWU6InJlbGF0aXZlIixkaXNwbGF5TmFtZToiUmVsYXRpdmUiLGVuYWJsZWQ6ITB9XSxyYW5nZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOm10LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1JTl9WQUxVRSxuYW1lOiJtaW4iLGRpc3BsYXlOYW1lOiJNaW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1BWF9WQUxVRSxuYW1lOiJtYXgiLGRpc3BsYXlOYW1lOiJNYXgiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNUQVJUX1ZBTFVFLG5hbWU6InN0YXJ0IixkaXNwbGF5TmFtZToiU3RhcnQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LkVORF9WQUxVRSxuYW1lOiJlbmQiLGRpc3BsYXlOYW1lOiJFbmQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlZBTFVFX0NIQU5HRSxuYW1lOiJ2YWx1ZUNoYW5nZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5QRVJDRU5UQUdFX0NIQU5HRSxuYW1lOiJwZXJjZW50YWdlQ2hhbmdlIixkaXNwbGF5TmFtZToiJSIsZW5hYmxlZDohMH0se3R5cGU6bXQuU1RBUlRfU1RFUCxuYW1lOiJzdGFydFN0ZXAiLGRpc3BsYXlOYW1lOiJTdGFydCBTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5FTkRfU1RFUCxuYW1lOiJlbmRTdGVwIixkaXNwbGF5TmFtZToiRW5kIFN0ZXAiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNURVBfQVRfTUFYLG5hbWU6InN0ZXBBdE1heCIsZGlzcGxheU5hbWU6IlN0ZXAgQXQgTWF4IixlbmFibGVkOiExfSx7dHlwZTptdC5TVEVQX0FUX01JTixuYW1lOiJzdGVwQXRNaW4iLGRpc3BsYXlOYW1lOiJTdGVwIEF0IE1pbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuTUVBTixuYW1lOiJtZWFuIixkaXNwbGF5TmFtZToiTWVhbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuUkFXX0NIQU5HRSxuYW1lOiJyYXdDaGFuZ2UiLGRpc3BsYXlOYW1lOiJSYXciLGVuYWJsZWQ6ITF9XSxmaWx0ZXJlZFBsdWdpblR5cGVzOm5ldyBTZXQsc3RlcE1pbk1heDp7bWluOjEvMCxtYXg6LTEvMH19LHtpc1NldHRpbmdzUGFuZU9wZW46ITAsaXNTbGlkZW91dE1lbnVPcGVuOiExLHRhYmxlRWRpdG9yU2VsZWN0ZWRUYWI6X28uU0lOR0xFLHRpbWVTZXJpZXNEYXRhOntzY2FsYXJzOnt9LGhpc3RvZ3JhbXM6e30saW1hZ2VzOnt9fSxzZXR0aW5nczpxRCxzZXR0aW5nT3ZlcnJpZGVzOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9LChuLHQsZSk9PnVzKHQsZSk/bjp7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZE1ldGFkYXRhTWFwOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9KSxRNT1DbmUsT2tlPXdyKENuZSxTZShLMCwobix7cm91dGVLaW5kOnQscGFydGlhbFN0YXRlOmV9KT0+e2lmKHQhPT1maS5FWFBFUklNRU5UJiZ0IT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybiBuO2xldCBpPW5ldyBTZXQ7Zm9yKGxldCB1IG9mIG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwua2V5cygpKXtsZXR7cGx1Z2luOmQsdGFnOnAscnVuSWQ6aCxzYW1wbGU6Zn09bi5jYXJkTWV0YWRhdGFNYXBbdV07aS5hZGQoYm5lKGQscCxoLGYpKX1sZXQgcj1lLG89W107Zm9yKGxldCB1IG9mWy4uLm4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsLi4uci5tZXRyaWNzLnBpbm5lZENhcmRzXSl7bGV0IGQ9Ym5lKHUucGx1Z2luLHUudGFnLHUucnVuSWQsdS5zYW1wbGUpO2kuaGFzKGQpfHwoaS5hZGQoZCksby5wdXNoKHUpKX1sZXQgcz12VihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxhPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKGEpJiZudWxsIT09YSl7bGV0IHU9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihhLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dX19bGV0IGM9ey4uLm4sLi4ucyxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMobW8pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQscz10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLGE9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOnMsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczphLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLFNlKEhhLHdsLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQsZT15dyhuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT55dyhpLG89PlVhKHIpP3l3KG8scz0+eW5lKHMpKTp5bmUobykpKTtyZXR1cm57Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTp0fSx0aW1lU2VyaWVzRGF0YTplfX0pLFNlKG9QLG49Pih7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FESU5HfX0pKSxTZShhUCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6RWUuRkFJTEVEfX0pKSxTZShzUCwobix7dGFnTWV0YWRhdGE6dH0pPT57bGV0IGU9e3NjYWxhcnM6eG5lKHQsV24uU0NBTEFSUyksaGlzdG9ncmFtczp4bmUodCxXbi5ISVNUT0dSQU1TKSxpbWFnZXM6dFtXbi5JTUFHRVNdfSxpPXt9LHI9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcixpPWU7aWYoVWEoaSkpe2lmKCF6YShpKSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXJ1biwgc2FtcGxlZCBwbHVnaW4gc3VwcG9ydCBub3QgeWV0IGltcGxlbWVudGVkIik7e2xldCBvPW5baV0udGFnUnVuU2FtcGxlZEluZm87Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKG8pKWZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvW3NdKSl7bGV0e21heFNhbXBsZXNQZXJTdGVwOmx9PW9bc11bYV07Zm9yKGxldCBjPTA7YzxsO2MrKyl0LnB1c2goe3BsdWdpbjppLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmMsbnVtU2FtcGxlOmx9KX19fWVsc2UgaWYoemEoaSkpe3I9bltpXS50YWdUb1J1bnM7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHIpKWZvcihsZXQgcyBvZiByW29dKXQucHVzaCh7cGx1Z2luOmksdGFnOm8scnVuSWQ6c30pfWVsc2V7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDpudWxsfSl9fXJldHVybiB0fShlKSxvPVtdO2ZvcihsZXQgaCBvZiByKXtsZXQgZj1fVihoKTtpW2ZdPWgsby5wdXNoKGYpfWxldCBzPW4udGFnR3JvdXBFeHBhbmRlZDtpZigwPT09bi50YWdHcm91cEV4cGFuZGVkLnNpemUpe2xldCBmPWtQKG8ubWFwKG09Pih7Li4uaVttXSxjYXJkSWQ6bX0pKS5maWx0ZXIoQm9vbGVhbikpO3M9bmV3IE1hcChuLnRhZ0dyb3VwRXhwYW5kZWQpO2ZvcihsZXQgbSBvZiBmLnNsaWNlKDAsMikpcy5zZXQobS5ncm91cE5hbWUsITApfWxldHtuZXh0Q2FyZFRvUGlubmVkQ29weTphLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpsLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpjfT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IE1hcCxyPW5ldyBNYXAsbz17fTtyZXR1cm4gbi5mb3JFYWNoKChzLGEpPT57LTEhPT1lLmluZGV4T2YoYSkmJihpLnNldChhLHMpLHIuc2V0KHMsYSksb1tzXT10W2FdKX0pLHtuZXh0Q2FyZFRvUGlubmVkQ29weTppLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpyLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpvfX0obi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsaSxvKSx1PXsuLi5pLC4uLmN9LGQ9ZnVuY3Rpb24obix0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW2kscl0pPT57dFtpXSYmKGVbaV09cil9KSxlfShuLmNhcmRTdGVwSW5kZXgsdSkscD12VihuLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLG8sdSxhLG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLGwsZCxuLmNhcmRTdGF0ZU1hcCk7cmV0dXJuey4uLm4sLi4ucCx0YWdHcm91cEV4cGFuZGVkOnMsdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sdGFnTWV0YWRhdGE6ZSxjYXJkTGlzdDpvfX0pLFNlKGxQLChuLHtjYXJkSWQ6dCxzZXR0aW5nczplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLC4uLmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKGN2LChuLHtjYXJkSWQ6dH0pPT57bGV0IGU9ey4uLm4uY2FyZFN0YXRlTWFwfTtyZXR1cm4gZVt0XT17Li4uZVt0XSxmdWxsV2lkdGg6IWVbdF0/LmZ1bGxXaWR0aCx0YWJsZUV4cGFuZGVkOiFlW3RdPy5mdWxsV2lkdGh9LHsuLi5uLGNhcmRTdGF0ZU1hcDplfX0pLFNlKEVQLChuLHt0YWdGaWx0ZXI6dH0pPT4oey4uLm4sdGFnRmlsdGVyOnR9KSksU2UoY1AsKG4se3NvcnQ6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHRvb2x0aXBTb3J0OnR9fSkpLFNlKHVQLG49PntsZXQgdD0hKG4uc2V0dGluZ092ZXJyaWRlcy5pZ25vcmVPdXRsaWVycz8/bi5zZXR0aW5ncy5pZ25vcmVPdXRsaWVycyk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGlnbm9yZU91dGxpZXJzOnR9fX0pLFNlKGRQLChuLHt4QXhpc1R5cGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHhBeGlzVHlwZTp0fX0pKSxTZShmUCwobix7c21vb3RoaW5nOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dH19KSksU2UobVAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g/P24uc2V0dGluZ3Muc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6dH19fSksU2UoZ1AsKG4se2JyaWdodG5lc3NJbk1pbGxpOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnR9fSkpLFNlKF9QLChuLHtjb250cmFzdEluTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQ29udHJhc3RJbk1pbGxpOnR9fSkpLFNlKHZQLG49PntsZXR7aW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoeVAsbj0+e2xldHtpbWFnZUNvbnRyYXN0SW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoYlAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmltYWdlU2hvd0FjdHVhbFNpemU/P24uc2V0dGluZ3MuaW1hZ2VTaG93QWN0dWFsU2l6ZSk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlU2hvd0FjdHVhbFNpemU6dH19fSksU2UoeFAsKG4se2hpc3RvZ3JhbU1vZGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpc3RvZ3JhbU1vZGU6dH19KSksU2UocFAsKG4se2NhcmRNaW5XaWR0aDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOnR9fSkpLFNlKGhQLG49Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOm51bGx9fSkpLFNlKF9uZSxuPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpZGVFbXB0eUNhcmRzOiFuLnNldHRpbmdPdmVycmlkZXMuaGlkZUVtcHR5Q2FyZHN9fSkpLFNlKENQLChuLHtyZXF1ZXN0czp0fSk9PntpZighdC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4udGltZVNlcmllc0RhdGF9O2ZvcihsZXQgaSBvZiB0KXtsZXR7cGx1Z2luOnIsdGFnOm8sc2FtcGxlOnN9PWk7ZVtyXT1ZRChlLHIsbyxzKTtsZXQgYT1fZChlLHIsbyxzKSxsPXVWKGkpP1tpLnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLHIsbyxzKTthLnJ1blRvTG9hZFN0YXRlPVhEKEVlLkxPQURJTkcsbCxhLnJ1blRvTG9hZFN0YXRlKX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKHdQLChuLHtyZXF1ZXN0OnR9KT0+e2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfSx7cGx1Z2luOmksdGFnOnIsc2FtcGxlOm99PXQ7ZVtpXT1ZRChlLGkscixvKTtsZXQgcz1fZChlLGkscixvKSxhPXVWKHQpP1t0LnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLGkscixvKTtyZXR1cm4gcy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsYSxzLnJ1blRvTG9hZFN0YXRlKSx7Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKE1QLChuLHtyZXNwb25zZTp0fSk9PntsZXQgZT17Li4ubi5zdGVwTWluTWF4fSxpPXsuLi5uLmNhcmRTdGF0ZU1hcH0scj17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjpvLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmx9PXQ7cltvXT1ZRChyLG8scyxsKTtsZXQgYz1fZChyLG8scyxsKTtpZihIRCh0KSl7bGV0IGQ9YT9bYV06cF8obi50YWdNZXRhZGF0YSxvLHMsbCk7Yy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsZCxjLnJ1blRvTG9hZFN0YXRlKX1lbHNle2xldCBkPXQucnVuVG9TZXJpZXM7Yy5ydW5Ub1Nlcmllcz17Li4uYy5ydW5Ub1Nlcmllc30sYy5ydW5Ub0xvYWRTdGF0ZT17Li4uYy5ydW5Ub0xvYWRTdGF0ZX07Zm9yKGxldCBwIGluIGQpaWYoZC5oYXNPd25Qcm9wZXJ0eShwKSl7Yy5ydW5Ub1Nlcmllc1twXT1kW3BdLGMucnVuVG9Mb2FkU3RhdGVbcF09RWUuTE9BREVEO2ZvcihsZXQgaCBvZiBkW3BdKWUubWluPU1hdGgubWluKGUubWluLGguc3RlcCksZS5tYXg9TWF0aC5tYXgoZS5tYXgsaC5zdGVwKX19aWYodC5ydW5Ub1NlcmllcyYmdC5wbHVnaW49PT1Xbi5TQ0FMQVJTKXtsZXQgZD1fVih7cGx1Z2luOm8sdGFnOnMscnVuSWQ6bnVsbH0pLHA9ZnVuY3Rpb24obil7bGV0IHQ9T2JqZWN0LnZhbHVlcyhuKS5mbGF0KCkubWFwKGU9PmUuc3RlcCk7cmV0dXJue21pblN0ZXA6TWF0aC5taW4oLi4udCksbWF4U3RlcDpNYXRoLm1heCguLi50KX19KGMucnVuVG9TZXJpZXMpO2lbZF09ey4uLmlbZF0sZGF0YU1pbk1heDpwfTtsZXQgaD1uLmNhcmRUb1Bpbm5lZENvcHkuZ2V0KGQpO2gmJihpW2hdPXsuLi5pW2hdLGRhdGFNaW5NYXg6cH0pfXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOnIsY2FyZFN0ZXBJbmRleDpQa2Uobi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkU3RlcEluZGV4LHIsbi50aW1lU2VyaWVzRGF0YSksc3RlcE1pbk1heDplLGNhcmRTdGF0ZU1hcDppfX0pLFNlKFNQLChuLHtjYXJkSWQ6dCxzdGVwSW5kZXg6ZX0pPT57bGV0IGk9WDUodCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhKSxyPWU7cmV0dXJuIG51bGw9PT1pP3I9bnVsbDplPmkmJihyPWkpLHsuLi5uLGNhcmRTdGVwSW5kZXg6ey4uLm4uY2FyZFN0ZXBJbmRleCxbdF06e2luZGV4OnIsaXNDbG9zZXN0OiExfX19fSksU2UoVFAsKG4se3RhZ0dyb3VwOnR9KT0+e2xldCBlPW5ldyBNYXAobi50YWdHcm91cEV4cGFuZGVkKTtyZXR1cm4gZS5zZXQodCwhZS5nZXQodCkpLHsuLi5uLHRhZ0dyb3VwRXhwYW5kZWQ6ZX19KSxTZSh1diwobix7ZW50ZXJlZENhcmRzOnQsZXhpdGVkQ2FyZHM6ZX0pPT57aWYoIXQubGVuZ3RoJiYhZS5sZW5ndGgpcmV0dXJuIG47bGV0IGk9bmV3IE1hcChuLnZpc2libGVDYXJkTWFwKTtyZXR1cm4gdC5mb3JFYWNoKCh7ZWxlbWVudElkOnIsY2FyZElkOm99KT0+e2xldCBzPWkuZ2V0KHIpPz9udWxsO2lmKG51bGwhPT1zJiZzIT09byl0aHJvdyBuZXcgRXJyb3IoIkEgRE9NIGVsZW1lbnQgY2Fubm90IGJlIHJldXNlZCBmb3IgbW9yZSB0aGFuIDEgdW5pcXVlIGNhcmQgbWV0YWRhdGEiKTtpLnNldChyLG8pfSksZS5mb3JFYWNoKCh7ZWxlbWVudElkOnJ9KT0+e2kuZGVsZXRlKHIpfSksey4uLm4sdmlzaWJsZUNhcmRNYXA6aX19KSxTZShkdiwobix7Y2FyZElkOnR9KT0+e2xldCBlPW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKHQpLGk9IWUmJiFuLmNhcmRUb1Bpbm5lZENvcHkuaGFzKHQpO2lmKGkmJiFRRChuKSlyZXR1cm4gbjtsZXQgcj1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weSksbz1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weUNhY2hlKSxzPW5ldyBNYXAobi5waW5uZWRDYXJkVG9PcmlnaW5hbCksYT17Li4ubi5jYXJkTWV0YWRhdGFNYXB9LGw9ey4uLm4uY2FyZFN0ZXBJbmRleH0sYz17Li4ubi5jYXJkU3RhdGVNYXB9O2lmKGUpe2xldCB1PW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuZ2V0KHQpO3IuZGVsZXRlKHUpLG8uZGVsZXRlKHUpLHMuZGVsZXRlKHQpLGRlbGV0ZSBhW3RdLGRlbGV0ZSBsW3RdLGRlbGV0ZSBjW3RdfWVsc2UgaWYoaSl7bGV0IHU9eVYodCxyLG8scyxsLGEsYyk7cj11LmNhcmRUb1Bpbm5lZENvcHksbz11LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxzPXUucGlubmVkQ2FyZFRvT3JpZ2luYWwsYT11LmNhcmRNZXRhZGF0YU1hcCxsPXUuY2FyZFN0ZXBJbmRleCxjPXUuY2FyZFN0YXRlTWFwfWVsc2V7bGV0IHU9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh0KTtyLmRlbGV0ZSh0KSxvLmRlbGV0ZSh0KSxzLmRlbGV0ZSh1KSxkZWxldGUgYVt1XSxkZWxldGUgbFt1XSxkZWxldGUgY1t0XX1yZXR1cm57Li4ubixjYXJkTWV0YWRhdGFNYXA6YSxjYXJkU3RhdGVNYXA6YyxjYXJkU3RlcEluZGV4OmwsY2FyZFRvUGlubmVkQ29weTpyLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOnN9fSksU2UoUFAsbj0+e2xldCB0PSFuLmxpbmtlZFRpbWVFbmFibGVkLGU9ey4uLm4uY2FyZFN0ZXBJbmRleH0saT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24scj1uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtpZih0KXtsZXR7bWluOnN9PW4uc3RlcE1pbk1heCxhPXM9PT0xLzA/MDpzO2k9bi5saW5rZWRUaW1lU2VsZWN0aW9uPz97c3RhcnQ6e3N0ZXA6YX0sZW5kOm51bGx9LGU9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsaSkscj10LG89Qm9vbGVhbihpLmVuZCl9cmV0dXJuey4uLm4sY2FyZFN0ZXBJbmRleDplLGxpbmtlZFRpbWVFbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6cixyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6b319KSxTZShPUCxuPT57bGV0IHQ9IW4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLGU9bi5zdGVwU2VsZWN0b3JFbmFibGVkLGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9T2JqZWN0LmVudHJpZXMobi5jYXJkU3RhdGVNYXApLnJlZHVjZSgobyxbcyxhXSk9PihvW3NdPXsuLi5hLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FLHJhbmdlU2VsZWN0aW9uT3ZlcnJpZGU6c2EuTk9ORX0sbykse30pO3JldHVybiB0PyhlPXQsaXx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDp7c3RlcDpuLnN0ZXBNaW5NYXgubWF4fX0pLGkuZW5kfHwoaT17Li4uaSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSk6aSYmKGk9ey4uLmksZW5kOm51bGx9KSx7Li4ubixzdGVwU2VsZWN0b3JFbmFibGVkOmUscmFuZ2VTZWxlY3Rpb25FbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLGNhcmRTdGF0ZU1hcDpyfX0pLFNlKG9oLChuLHQpPT57bGV0e2NhcmRJZDplLHRpbWVTZWxlY3Rpb246aX09dCxyPWkuc3RhcnQuc3RlcCxvPWkuZW5kPy5zdGVwLGE9bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7bi5saW5rZWRUaW1lRW5hYmxlZCYmKGE9dm9pZCAwIT09byk7bGV0IGw9e3N0YXJ0OntzdGVwOnJ9LGVuZDp2b2lkIDA9PT1vP251bGw6e3N0ZXA6cj5vP3I6b319LGM9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsbCksdT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlJiYodVtlXT17Li4udVtlXSx0aW1lU2VsZWN0aW9uOmwsc3RlcFNlbGVjdGlvbk92ZXJyaWRlOnNhLk9WRVJSSURFX0FTX0VOQUJMRUQscmFuZ2VTZWxlY3Rpb25PdmVycmlkZTp2b2lkIDA9PT1sLmVuZD8uc3RlcD9zYS5PVkVSUklERV9BU19ESVNBQkxFRDpzYS5PVkVSUklERV9BU19FTkFCTEVEfSksey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpsLGNhcmRTdGVwSW5kZXg6YyxjYXJkU3RhdGVNYXA6dSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6YX19KSxTZShJUCwobix7Y2FyZElkOnQsdmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKHNoLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246YSwuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9PntpW2FdPXsuLi5pW2FdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09V2EuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxzPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzLGNhcmRTdGF0ZU1hcDppfX0pLFNlKG1uZSxuPT4oey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpudWxsfSkpLFNlKGlQLChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLFNlKHB2LChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PV9vLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSxTZShSUCwobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlclR5cGU6ZX0pPT57bGV0IGk9dD09PV9vLlJBTkdFP24ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyxyPWkuZmluZEluZGV4KGE9PmEudHlwZT09PWUpLG89ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGkpO2lbcl0uZW5hYmxlZCYmby0tO2xldCBzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KHIsbyxpKTtyZXR1cm4gc1tvXT17Li4uc1tvXSxlbmFibGVkOiFzW29dLmVuYWJsZWR9LHQ9PT1fby5SQU5HRT97Li4ubixyYW5nZVNlbGVjdGlvbkhlYWRlcnM6c306ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczpzfX0pLFNlKERQLChuLHtwbHVnaW46dH0pPT57bGV0IGU9bmV3IFNldChuLmZpbHRlcmVkUGx1Z2luVHlwZXMpO3JldHVybiBlLmhhcyh0KT9lLmRlbGV0ZSh0KTplLmFkZCh0KSxPYmplY3QudmFsdWVzKFduKS5ldmVyeShpPT5lLmhhcyhpKSkmJihlPW5ldyBTZXQpLHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6ZX19KSxTZShBUCxuPT4oey4uLm4sZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0fSkpLFNlKGVQLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46IW4uaXNTZXR0aW5nc1BhbmVPcGVufSkpLFNlKCRJLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46ITF9KSksU2UodFAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3Blbjohbi5pc1NsaWRlb3V0TWVudU9wZW59KSksU2UoblAsKG4se21vZGU6dH0pPT4oey4uLm4saXNTbGlkZW91dE1lbnVPcGVuOiEwLGlzU2V0dGluZ3NQYW5lT3BlbjohMCx0YWJsZUVkaXRvclNlbGVjdGVkVGFiOnR9KSksU2UoclAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMX0pKSk7ZnVuY3Rpb24gd25lKG4sdCl7cmV0dXJuIFhmKE9rZSxSa2UpKG4sdCl9ZnVuY3Rpb24geG5lKG4sdCl7cmV0dXJue3RhZ0Rlc2NyaXB0aW9uczpuW3RdLnRhZ0Rlc2NyaXB0aW9ucyx0YWdUb1J1bnM6a2tlKG5bdF0ucnVuVGFnSW5mbyl9fWZ1bmN0aW9uIGtrZShuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbilmb3IobGV0IGkgb2YgbltlXSl0W2ldPVsuLi50W2ldfHxbXSxlXTtyZXR1cm4gdH12YXIgTGtlPVkoTnAsU2wsKG4sdCxlKT0+dD97Li4udCxsb2FkU3RhdGU6bixpZDplfTpudWxsKSxNbmU9d2UoIltNZXRyaWNzIEVmZmVjdHNdIEluaXQiKSxTbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZShUaShNbmUsX3UscWYseGwpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSx0aGlzLnN0b3JlLnNlbGVjdChTQykpLEhlKChbLG8sc10pPT5vPT09Q0MmJnMuc3RhdGU9PT1FZS5OT1RfTE9BREVEKSksdGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJD10aGlzLmFjdGlvbnMkLnBpcGUoVGkoSGEsd2wpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssb10pPT5vPT09Q0MpKSx0aGlzLmxvYWRUYWdNZXRhZGF0YSQ9dW4odGhpcy5kYXNoYm9hcmRTaG93bldpdGhvdXREYXRhJCx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFNDKSx0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG8sc10pPT5vLnN0YXRlIT09RWUuTE9BRElORyYmbnVsbCE9PXMpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChvUCgpKX0pLHZpKChbLCxvXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goc1Aoe3RhZ01ldGFkYXRhOnN9KSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goYVAoKSksanQobnVsbCkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHV2KSxHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGU9PT1FZS5OT1RfTE9BREVEKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZShHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGUhPT1FZS5MT0FESU5HKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPXVuKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShIZShvPT5vLmxlbmd0aD4wKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykucGlwZShIZShvPT5udWxsIT09bykpKSxfbigoW28sc10pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKG8scykpKSx0aGlzLmRhdGFFZmZlY3RzJD1VcigoKT0+dW4odGhpcy5sb2FkVGFnTWV0YWRhdGEkLHRoaXMubG9hZFRpbWVTZXJpZXMkKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBNbmUoKX1nZXRWaXNpYmxlQ2FyZEZldGNoSW5mb3MoKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3Qob1opLnBpcGUodmkoaT0+aS5zaXplP3hvKFsuLi5pXS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoTGtlLG8pLnBpcGUoSHQoMSkpKSk6anQoW10pKSxCKGk9PmkuZmlsdGVyKEJvb2xlYW4pKSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hUaW1lU2VyaWVzKFtlXSkucGlwZShOdChpPT57bGV0IHI9aS5maWx0ZXIoSEQpO3IubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUaW1lIHNlcmllcyByZXNwb25zZSBjb250YWluZWQgZXJyb3JzOiIsciksdGhpcy5zdG9yZS5kaXNwYXRjaChNUCh7cmVzcG9uc2U6aVswXX0pKX0pLENvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaCh3UCh7cmVxdWVzdDplfSkpLGp0KG51bGwpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKGUsaSl7cmV0dXJuIGp0KGUubWFwKG89PntsZXR7cGx1Z2luOnMsdGFnOmEscnVuSWQ6bCxzYW1wbGU6Y309byx1PXphKHMpP3twbHVnaW46cyx0YWc6YSxydW5JZDpsfTp7cGx1Z2luOnMsdGFnOmEsZXhwZXJpbWVudElkczppfTtyZXR1cm4gdm9pZCAwIT09YyYmKHUuc2FtcGxlPWMpLHV9KSkucGlwZShOdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaChDUCh7cmVxdWVzdHM6b30pKX0pLF9uKG89PnVuKC4uLm8ubWFwKGE9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzKGEpKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUih5dSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEs1PW5ldyBzZSgiTWV0cmljcyBTdG9yZSBDb25maWciKSxaNT1uZXcgc2UoIk1ldHJpY3MgSW5pdGlhbCBTZXR0aW5ncyBDb25maWciKTtmdW5jdGlvbiBFbmUobil7cmV0dXJuIG4/e2luaXRpYWxTdGF0ZTp7Li4uUTUsc2V0dGluZ3M6bn19Ontpbml0aWFsU3RhdGU6UTV9fXZhciBZYT0oKCk9PihmdW5jdGlvbihuKXtuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCIsbltuLk1JRERMRT00XT0iTUlERExFIixuW24uRk9VUlRIPThdPSJGT1VSVEgiLG5bbi5GSUZUSD0zMl09IkZJRlRIIn0oWWF8fChZYT17fSkpLFlhKSkoKSxUbmU9MDtmdW5jdGlvbiBCa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuZXhwYW5kU2lkZWJhcigpKX0pLE4oMSwibWF0LWljb24iLDQpLHYoKX19ZnVuY3Rpb24gVmtlKG4sdCl7aWYoMSZuJiYoZygwLCJuYXYiLDUpLGooMSwiYXN5bmMiKSxObigyLDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7T3QoIndpZHRoIixXKDEsNCxlLndpZHRoJCksIiUiKSgibWluLXdpZHRoIixlLk1JTklNVU1fU0lERUJBUl9XSURUSF9JTl9QWCwicHgiKX19ZnVuY3Rpb24gSGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5yZXNpemVHcmFiYmVkKCkpfSksdigpfX12YXIgVWtlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLHprZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLEFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMud2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHhEKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMucmVzaXppbmc9ITEsdGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg9NzUsbGkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoKCk9PnRoaXMucmVzaXppbmcpKS5zdWJzY3JpYmUocj0+e2lmKChyLmJ1dHRvbnMmWWEuTEVGVCkhPT1ZYS5MRUZUKXJldHVybiB2b2lkKHRoaXMucmVzaXppbmc9ITEpO3IucHJldmVudERlZmF1bHQoKTtsZXR7d2lkdGg6b309aS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RvcmUuZGlzcGF0Y2gocl8oe3dpZHRoSW5QZXJjZW50OnIuY2xpZW50WDw9dGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg/MDpyLmNsaWVudFgvbyoxMDB9KSl9KSxsaShpLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlc2l6aW5nPSExfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfWV4cGFuZFNpZGViYXIoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJfKHt3aWR0aEluUGVyY2VudDoyMH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhc2hib2FyZC1sYXlvdXQiXV0sbmdDb250ZW50U2VsZWN0b3JzOnprZSxkZWNsczo3LHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJleHBhbmQiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDMsIndpZHRoIiwibWluV2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koVWtlKSxFKDAsQmtlLDIsMCwiYnV0dG9uIiwwKSxqKDEsImFzeW5jIiksRSgyLFZrZSwzLDYsIm5hdiIsMSksaigzLCJhc3luYyIpLEUoNCxIa2UsMSwwLCJkaXYiLDIpLGooNSwiYXN5bmMiKSxObig2KSksMiZlJiYoYigibmdJZiIsMD09PVcoMSwzLGkud2lkdGgkKSkseCgyKSxiKCJuZ0lmIixXKDMsNSxpLndpZHRoJCk+MCkseCgyKSxiKCJuZ0lmIixXKDUsNyxpLndpZHRoJCk+MCkpfSxkZXBlbmRlbmNpZXM6W1hlLFpuLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjgwdnd9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleDowIDA7anVzdGlmeS1zZWxmOnN0cmV0Y2h9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4O2N1cnNvcjpldy1yZXNpemU7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNofS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjY2M7b3V0bGluZTozcHggc29saWQgI2NjYzt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3V0bGluZS1jb2xvcjojNzc3O2JvcmRlci1jb2xvcjojNzc3fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDFweCAwIDA7Y29sb3I6aW5oZXJpdDtjb250YWluOmNvbnRlbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKNT1uZXcgV2Vha01hcCx4dz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBXZWFrU2V0fWluaXRpYWxpemUodCl7aWYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcilyZXR1cm47dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10O2xldCBlPXt0aHJlc2hvbGQ6MCxyb290OnRoaXMucm9vdD8/bnVsbH07dGhpcy5idWZmZXImJihlLnJvb3RNYXJnaW49dGhpcy5idWZmZXIpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksZSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKHIsbyk9PnIudGltZS1vLnRpbWUpO2xldCBlPW5ldyBTZXQsaT1uZXcgU2V0O2ZvcihsZXR7aXNJbnRlcnNlY3Rpbmc6cix0YXJnZXQ6b31vZiB0KXI/KGUuYWRkKG8pLGkuZGVsZXRlKG8pKTooZS5kZWxldGUobyksaS5hZGQobykpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXMobykmJiFyJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZShvKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShvKSk7dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLGkpfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fSxJbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaCh1dih7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O0o1LnNldChlLHtlbGVtZW50SWQ6KFRuZSsrLFN5bWJvbChUbmUpKSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSx0aGlzLmNhcmRPYnNlcnZlcnx8KHRoaXMuY2FyZE9ic2VydmVyPW5ldyB4dyksdGhpcy5jYXJkT2JzZXJ2ZXIuaW5pdGlhbGl6ZSh0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpKSx0aGlzLmNhcmRPYnNlcnZlci5hZGQoZSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjYXJkTGF6eUxvYWRlciIsIiJdXSxpbnB1dHM6e2NhcmRJZDpbImNhcmRMYXp5TG9hZGVyIiwiY2FyZElkIl0sY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifX0pLG59KSgpO2Z1bmN0aW9uIFdrZShuLHQpezEmbiYmKEt0KDApLE5uKDEpLFp0KCkpfXZhciBxa2U9WyIqIl0sUG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhFbykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpxa2UsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLFdrZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmYigibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltYZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWGtlPVsiYnV0dG9uIl0sUWtlPVsiKiJdLFJuZT1uZXcgc2UoIk1BVF9CVVRUT05fVE9HR0xFX0RFRkFVTFRfT1BUSU9OUyIpLE9uZT1uZXcgc2UoIk1hdEJ1dHRvblRvZ2dsZUdyb3VwIiksS2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT4kNSksbXVsdGk6ITB9LGtuZT0wLEZQPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSwkNT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX25hbWU9Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLSIra25lKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBGXyh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuX2J1dHRvblRvZ2dsZXMuZmlsdGVyKGU9PmUuY2hlY2tlZCkpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV9lbWl0Q2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IEZQKGUsdGhpcy52YWx1ZSk7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbihpLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KGkpfV9zeW5jQnV0dG9uVG9nZ2xlKGUsaSxyPSExLG89ITEpeyF0aGlzLm11bHRpcGxlJiZ0aGlzLnNlbGVjdGVkJiYhZS5jaGVja2VkJiYodGhpcy5zZWxlY3RlZC5jaGVja2VkPSExKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbD9pP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKTpvPSEwLG8/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5fdXBkYXRlTW9kZWxWYWx1ZShlLHIpKTp0aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscil9X2lzU2VsZWN0ZWQoZSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpfV9pc1ByZWNoZWNrZWQoZSl7cmV0dXJuISh0eXBlb2YgdGhpcy5fcmF3VmFsdWU+InUiKSYmKHRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpP3RoaXMuX3Jhd1ZhbHVlLnNvbWUoaT0+bnVsbCE9ZS52YWx1ZSYmaT09PWUudmFsdWUpOmUudmFsdWU9PT10aGlzLl9yYXdWYWx1ZSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSl7dGhpcy5fcmF3VmFsdWU9ZSx0aGlzLl9idXR0b25Ub2dnbGVzJiYodGhpcy5tdWx0aXBsZSYmZT8oQXJyYXkuaXNBcnJheShlKSx0aGlzLl9jbGVhclNlbGVjdGlvbigpLGUuZm9yRWFjaChpPT50aGlzLl9zZWxlY3RWYWx1ZShpKSkpOih0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuX3NlbGVjdFZhbHVlKGUpKSl9X2NsZWFyU2VsZWN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLl9idXR0b25Ub2dnbGVzLmZvckVhY2goZT0+ZS5jaGVja2VkPSExKX1fc2VsZWN0VmFsdWUoZSl7bGV0IGk9dGhpcy5fYnV0dG9uVG9nZ2xlcy5maW5kKHI9Pm51bGwhPXIudmFsdWUmJnIudmFsdWU9PT1lKTtpJiYoaS5jaGVja2VkPSEwLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSl9X3VwZGF0ZU1vZGVsVmFsdWUoZSxpKXtpJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfV9tYXJrQnV0dG9uc0ZvckNoZWNrKCl7dGhpcy5fYnV0dG9uVG9nZ2xlcz8uZm9yRWFjaChlPT5lLl9tYXJrRm9yQ2hlY2soKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoUm5lLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmTmkocixKa2UsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYnV0dG9uVG9nZ2xlcz1vKX19LGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09aS5hcHBlYXJhbmNlKSl9LGlucHV0czp7YXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsbmFtZToibmFtZSIsdmVydGljYWw6InZlcnRpY2FsIix2YWx1ZToidmFsdWUiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlR3JvdXAiXSxmZWF0dXJlczpbJHQoW0trZSx7cHJvdmlkZTpPbmUsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxaa2U9THMoY2xhc3N7fSksSmtlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaa2V7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEc7bGV0IGw9TnVtYmVyKHMpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9YSYmYS5hcHBlYXJhbmNlP2EuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBidXR0b25JZCgpe3JldHVybmAke3RoaXMuaWR9LWJ1dHRvbmB9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmFwcGVhcmFuY2U6dGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXt0aGlzLl9hcHBlYXJhbmNlPWV9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9pc1NlbGVjdGVkKHRoaXMpOnRoaXMuX2NoZWNrZWR9c2V0IGNoZWNrZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpfW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK2tuZSsrLGUmJihlLl9pc1ByZWNoZWNrZWQodGhpcyk/dGhpcy5jaGVja2VkPSEwOmUuX2lzU2VsZWN0ZWQodGhpcykhPT10aGlzLl9jaGVja2VkJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksZSYmZS5faXNTZWxlY3RlZCh0aGlzKSYmZS5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLCExLCExLCEwKX1mb2N1cyhlKXt0aGlzLl9idXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X29uQnV0dG9uQ2xpY2soKXtsZXQgZT0hIXRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKXx8IXRoaXMuX2NoZWNrZWQ7ZSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWUsdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmKHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkLCEwKSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9vblRvdWNoZWQoKSkpLHRoaXMuY2hhbmdlLmVtaXQobmV3IEZQKHRoaXMsdGhpcy52YWx1ZSkpfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fZ2V0QnV0dG9uTmFtZSgpe3JldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdG9yKCk/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5uYW1lOnRoaXMubmFtZXx8bnVsbH1faXNTaW5nbGVTZWxlY3Rvcigpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYhdGhpcy5idXR0b25Ub2dnbGVHcm91cC5tdWx0aXBsZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPbmUsOCksdyhubiksdyhBZSksdyh6ciksS28oInRhYmluZGV4IiksdyhSbmUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoWGtlLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKHplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpRa2UsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJidXR0b24iLDAsMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGcoMiwic3BhbiIsMiksTm4oMyksdigpKCksTig0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj1zdCgxKTtiKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSx6ZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLHgoNSksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOltlc10sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLHhjLGRuXX0pLG59KSgpO2Z1bmN0aW9uIGVGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJhbmltYXRpb24tbmFtZSIsIm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtIitlLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIHRGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fXZhciBpRmU9cHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxyRmU9bmV3IHNlKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RpYW1ldGVyOjEwMH19fSksdm89Y2xhc3MgZXh0ZW5kcyBpRmV7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXtzdXBlcih0KSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2RpYW1ldGVyPTEwMCx0aGlzLl92YWx1ZT0wLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLm1vZGU9ImRldGVybWluYXRlIjtsZXQgYz12by5fZGlhbWV0ZXJzO3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSxjLmhhcyhpLmhlYWQpfHxjLnNldChpLmhlYWQsbmV3IFNldChbMTAwXSkpLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1yJiYhIW8mJiFvLl9mb3JjZUFuaW1hdGlvbnMsIm1hdC1zcGlubmVyIj09PXQubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYodGhpcy5tb2RlPSJpbmRldGVybWluYXRlIiksbyYmKG8uY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPW8uY29sb3IpLG8uZGlhbWV0ZXImJih0aGlzLmRpYW1ldGVyPW8uZGlhbWV0ZXIpLG8uc3Ryb2tlV2lkdGgmJih0aGlzLnN0cm9rZVdpZHRoPW8uc3Ryb2tlV2lkdGgpKSxlLmlzQnJvd3NlciYmZS5TQUZBUkkmJmEmJnMmJmwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249YS5jaGFuZ2UoMTUwKS5zdWJzY3JpYmUoKCk9PnsiaW5kZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGUmJmwucnVuKCgpPT5zLm1hcmtGb3JDaGVjaygpKX0pKX1nZXQgZGlhbWV0ZXIoKXtyZXR1cm4gdGhpcy5fZGlhbWV0ZXJ9c2V0IGRpYW1ldGVyKHQpe3RoaXMuX2RpYW1ldGVyPVBpKHQpLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSx0aGlzLl9zdHlsZVJvb3QmJnRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpfWdldCBzdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLl9zdHJva2VXaWR0aHx8dGhpcy5kaWFtZXRlci8xMH1zZXQgc3Ryb2tlV2lkdGgodCl7dGhpcy5fc3Ryb2tlV2lkdGg9UGkodCl9Z2V0IHZhbHVlKCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl92YWx1ZTowfXNldCB2YWx1ZSh0KXt0aGlzLl92YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCxQaSh0KSkpfW5nT25Jbml0KCl7bGV0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3N0eWxlUm9vdD1NQSh0KXx8dGhpcy5fZG9jdW1lbnQuaGVhZCx0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKSx0LmNsYXNzTGlzdC5hZGQoIm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uIil9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fZ2V0Q2lyY2xlUmFkaXVzKCl7cmV0dXJuKHRoaXMuZGlhbWV0ZXItMTApLzJ9X2dldFZpZXdCb3goKXtsZXQgdD0yKnRoaXMuX2dldENpcmNsZVJhZGl1cygpK3RoaXMuc3Ryb2tlV2lkdGg7cmV0dXJuYDAgMCAke3R9ICR7dH1gfV9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCl7cmV0dXJuIDIqTWF0aC5QSSp0aGlzLl9nZXRDaXJjbGVSYWRpdXMoKX1fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpKigxMDAtdGhpcy5fdmFsdWUpLzEwMDpudWxsfV9nZXRDaXJjbGVTdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLnN0cm9rZVdpZHRoL3RoaXMuZGlhbWV0ZXIqMTAwfV9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4odCl7bGV0IGU9NTAqKHQuY3VycmVudFNjYWxlPz8xKTtyZXR1cm5gJHtlfSUgJHtlfSVgfV9hdHRhY2hTdHlsZU5vZGUoKXtsZXQgdD10aGlzLl9zdHlsZVJvb3QsZT10aGlzLl9kaWFtZXRlcixpPXZvLl9kaWFtZXRlcnMscj1pLmdldCh0KTtpZighcnx8IXIuaGFzKGUpKXtsZXQgbz10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO28uc2V0QXR0cmlidXRlKCJtYXQtc3Bpbm5lci1hbmltYXRpb24iLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbCksby50ZXh0Q29udGVudD10aGlzLl9nZXRBbmltYXRpb25UZXh0KCksdC5hcHBlbmRDaGlsZChvKSxyfHwocj1uZXcgU2V0LGkuc2V0KHQscikpLHIuYWRkKGUpfX1fZ2V0QW5pbWF0aW9uVGV4dCgpe2xldCB0PXRoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKTtyZXR1cm4iXG4gQGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLURJQU1FVEVSIHtcbiAgICAwJSAgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cbiAgICAyNSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG5cbiAgICAyNS4wMDAxJSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuICAgIDUwJSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG5cbiAgICA1MC4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG4gICAgNzUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cblxuICAgIDc1LjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gICAgMTAwJSAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgfVxuIi5yZXBsYWNlKC9TVEFSVF9WQUxVRS9nLCIiKy45NSp0KS5yZXBsYWNlKC9FTkRfVkFMVUUvZywiIisuMip0KS5yZXBsYWNlKC9ESUFNRVRFUi9nLGAke3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbH1gKX1fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuZGlhbWV0ZXIudG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiXyIpfX07dm8uX2RpYW1ldGVycz1uZXcgV2Vha01hcCx2by5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHx2bykodyhBZSksdyh1aSksdyhCdCw4KSx3KExpLDgpLHcockZlKSx3KG5uKSx3KGRhKSx3KHB0KSl9LHZvLlx1MDI3NWNtcD1rKHt0eXBlOnZvLHNlbGVjdG9yczpbWyJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLFsibWF0LXNwaW5uZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsInByb2dyZXNzYmFyIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXByb2dyZXNzLXNwaW5uZXIiLCJtYXQtc3Bpbm5lciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LGUpezImdCYmKHplKCJhcmlhLXZhbHVlbWluIiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlPzA6bnVsbCkoImFyaWEtdmFsdWVtYXgiLCJkZXRlcm1pbmF0ZSI9PT1lLm1vZGU/MTAwOm51bGwpKCJhcmlhLXZhbHVlbm93IiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlP2UudmFsdWU6bnVsbCkoIm1vZGUiLGUubW9kZSksT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixlLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgiLG1vZGU6Im1vZGUiLHZhbHVlOiJ2YWx1ZSJ9LGV4cG9ydEFzOlsibWF0UHJvZ3Jlc3NTcGlubmVyIl0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6OCxjb25zdHM6W1sicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiLCJmb2N1c2FibGUiLCJmYWxzZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywibmdTd2l0Y2giXSxbInN2ZyIsIiJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMywiYW5pbWF0aW9uLW5hbWUiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLCJ0cmFuc2Zvcm0tb3JpZ2luIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsInRyYW5zZm9ybS1vcmlnaW4iLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LGUpezEmdCYmKGpuKCksZygwLCJzdmciLDAsMSksRSgyLGVGZSwxLDExLCJjaXJjbGUiLDIpLEUoMyx0RmUsMSw5LCJjaXJjbGUiLDMpLHYoKSksMiZ0JiYoT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYigibmdTd2l0Y2giLCJpbmRldGVybWluYXRlIj09PWUubW9kZSksemUoInZpZXdCb3giLGUuX2dldFZpZXdCb3goKSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsITEpKX0sZGVwZW5kZW5jaWVzOltocixJcl0sc3R5bGVzOlsiLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgMjI1bXMgbGluZWFyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzdmcsLm1hdC1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIGNpcmNsZXthbmltYXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSk7dmFyIGt1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbixrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBhRmUobix0KXtpZigxJm4mJihnKDAsImIiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCkuJGltcGxpY2l0O3goMSkscWUoIiIsZS5kaXNwbGF5QWxpYXMsIjoiKX19ZnVuY3Rpb24gbEZlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwyKSgxLCJzcGFuIiwzKSxFKDIsYUZlLDIsMSwiYiIsNCksRCgzKSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJ2YWx1ZSIsZS52YWx1ZSkoImRpc2FibGVkIixlLmRpc2FibGVkKSx4KDEpLEdFKCJ0aXRsZSIsIiIsZS5kaXNwbGF5QWxpYXMsIjogIixlLmRpc3BsYXlUZXh0LCIiKSx4KDEpLGIoIm5nSWYiLGUuZGlzcGxheUFsaWFzKSx4KDEpLHFlKCIgIixlLmRpc3BsYXlUZXh0LCIgIil9fXZhciBGbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXSxbMSwib3B0aW9uLWNvbnRlbnQiLDMsInRpdGxlIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC1zZWxlY3QiLDApLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoby52YWx1ZSl9KSxFKDEsbEZlLDQsNiwibWF0LW9wdGlvbiIsMSksdigpKSwyJmUmJihiKCJ2YWx1ZSIsaS52YWx1ZSkseCgxKSxiKCJuZ0Zvck9mIixpLm9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSxKcCx1YV0sc3R5bGVzOlsibWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweH1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG99ICAubWF0LXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW9wdGlvbntoZWlnaHQ6YXV0b30gIC5tYXQtb3B0aW9uLXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5vcHRpb24tY29udGVudFtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSJdfSksbn0pKCk7ZnVuY3Rpb24gdUZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzMikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLnJhbmdlU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgUmFuZ2UgU2VsZWN0aW9uICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKTt4KDEpLGIoImNoZWNrZWQiLGUuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSl9fWZ1bmN0aW9uIGRGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzMpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5saW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksRCgyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJjaGVja2VkIixlLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSkseCgxKSxxZSgiTGluayBieSBzdGVwICIsZS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKX19dmFyIHBGZT1mdW5jdGlvbihuKXtyZXR1cm57ImNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlIjohMCwidG9nZ2xlLW9wZW5lZCI6bn19O2Z1bmN0aW9uIGhGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMzQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVPdXRUb2dnbGVkLmVtaXQoKSl9KSxOKDEsIm1hdC1pY29uIiwzNSksRCgyLCIgRWRpdCBUYWJsZSBDb2x1bW5zICIpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigibmdDbGFzcyIsSG4oMSxwRmUsZS5pc1NsaWRlT3V0TWVudU9wZW4pKX19ZnVuY3Rpb24gZkZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwyNikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuc3RlcFNlbGVjdG9yVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgc3RlcCBzZWxlY3Rpb24gYW5kIGRhdGEgdGFibGUgIiksdigpLGcoMywic3BhbiIsMjgpLEQoNCwiKFNjYWxhcnMgb25seSkiKSx2KCksRSg1LHVGZSwzLDIsImRpdiIsMjkpLEUoNixkRmUsMywzLCJkaXYiLDMwKSxFKDcsaEZlLDMsMywiYnV0dG9uIiwzMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoInRpdGxlIixlLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIikseCgxKSxiKCJjaGVja2VkIixlLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhZS5pc0F4aXNUeXBlU3RlcCgpKSx4KDQpLGIoIm5nSWYiLGUuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQpLHgoMSksYigibmdJZiIsZS5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCkseCgxKSxiKCJuZ0lmIixlLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpfX1mdW5jdGlvbiBtRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzZWN0aW9uIiwzNikoMSwiaDMiLDEpLEQoMiwiSW1hZ2VzIiksdigpLGcoMywiZGl2IiwzNykoNCwiZGl2IiwzOCksRCg1LCJCcmlnaHRuZXNzIiksdigpLGcoNiwiZGl2Iiw4KSg3LCJtYXQtc2xpZGVyIiwzOSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSx2KCksZyg4LCJidXR0b24iLDQwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQnJpZ2h0bmVzc1Jlc2V0LmVtaXQoKSl9KSxOKDksIm1hdC1pY29uIiwxMSksdigpKCkoKSxnKDEwLCJkaXYiLDQxKSgxMSwiZGl2Iiw0MiksRCgxMiwiQ29udHJhc3QiKSx2KCksZygxMywiZGl2Iiw4KSgxNCwibWF0LXNsaWRlciIsNDMpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5lbWl0KHIudmFsdWUpKX0pLHYoKSxnKDE1LCJidXR0b24iLDQ0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RSZXNldC5lbWl0KCkpfSksTigxNiwibWF0LWljb24iLDExKSx2KCkoKSgpLGcoMTcsImRpdiIsNDUpKDE4LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLEQoMTksIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goNyksYigibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpKCJ0aHVtYkxhYmVsIiwhMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLHgoNyksYigibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSx4KDQpLGIoImNoZWNrZWQiLGUuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fXZhciBMbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmxvY2FsZT1lLHRoaXMubGlua2VkVGltZVRvZ2dsZWQ9bmV3IEcsdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLnN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEcsdGhpcy5yYW5nZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5vblNsaWRlT3V0VG9nZ2xlZD1uZXcgRyx0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6bW8uQUxQSEFCRVRJQ0FMLGRpc3BsYXlUZXh0OiJBbHBoYWJldGljYWwifSx7dmFsdWU6bW8uQVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJBc2NlbmRpbmcifSx7dmFsdWU6bW8uREVTQ0VORElORyxkaXNwbGF5VGV4dDoiRGVzY2VuZGluZyJ9LHt2YWx1ZTptby5ORUFSRVNULGRpc3BsYXlUZXh0OiJOZWFyZXN0IFBpeGVsIn0se3ZhbHVlOm1vLk5FQVJFU1RfWSxkaXNwbGF5VGV4dDoiTmVhcmVzdCBZIn1dLHRoaXMudG9vbHRpcFNvcnRDaGFuZ2VkPW5ldyBHLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBHLHRoaXMuWEF4aXNUeXBlPVlpLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6WWkuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpZaS5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6WWkuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT03MzUsdGhpcy5NSU5fQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9MzM1LHRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5jYXJkV2lkdGhDaGFuZ2VkPXRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLmNhcmRXaWR0aFJlc2V0PW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOk9yLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOk9yLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgRyx0aGlzLnNjYWxhclNtb290aGluZ0NoYW5nZWQ9dGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkPW5ldyBHLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUoemMoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKHpjKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBHLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEd9b25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKXtsZXQgaT1lLnRhcmdldDtpZighaS52YWx1ZSlyZXR1cm47bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGkudmFsdWUpKSwuOTk5KTtyIT09cGFyc2VGbG9hdChpLnZhbHVlKSYmKGkudmFsdWU9U3RyaW5nKHIpKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KHIpfWZvcm1hdE1pbGxpVG9aZXJvdGgoZSl7cmV0dXJuIEEzKGUvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfWdldExpbmtlZFRpbWVTZWxlY3Rpb25TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkfHxudWxsPT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHxudWxsIT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8iIjp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcH1pc0F4aXNUeXBlU3RlcCgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVlpLlNURVB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZDoiaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQiLGlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkOiJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsaXNMaW5rZWRUaW1lRW5hYmxlZDoiaXNMaW5rZWRUaW1lRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsc3RlcE1pbk1heDoic3RlcE1pbk1heCIsaXNTbGlkZU91dE1lbnVPcGVuOiJpc1NsaWRlT3V0TWVudU9wZW4iLGlzSW1hZ2VTdXBwb3J0RW5hYmxlZDoiaXNJbWFnZVN1cHBvcnRFbmFibGVkIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLGNhcmRNaW5XaWR0aDoiY2FyZE1pbldpZHRoIixoaXN0b2dyYW1Nb2RlOiJoaXN0b2dyYW1Nb2RlIixzY2FsYXJTbW9vdGhpbmc6InNjYWxhclNtb290aGluZyIsc2NhbGFyUGFydGl0aW9uWDoic2NhbGFyUGFydGl0aW9uWCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsaW1hZ2VDb250cmFzdEluTWlsbGk6ImltYWdlQ29udHJhc3RJbk1pbGxpIixpbWFnZVNob3dBY3R1YWxTaXplOiJpbWFnZVNob3dBY3R1YWxTaXplIn0sb3V0cHV0czp7bGlua2VkVGltZVRvZ2dsZWQ6ImxpbmtlZFRpbWVUb2dnbGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZDoibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NDMsdmFyczoyMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGNhcmQgd2lkdGgiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsInNjYWxhcnMiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXNtb290aGluZyJdLFsiaWQiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIwIiwic3RlcCIsIjAuMDAxIiwxLCJzbGlkZXItaW5wdXQiLDMsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udHJvbC1yb3ciLCJ0b29sdGlwLXNvcnQiXSxbMSwiY29udHJvbC1uYW1lIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1pZ25vcmUtb3V0bGllcnMiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtcGFydGl0aW9uLXgiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCIsInRpdGxlIiwiTm9uLW1vbm90b25pYyBzdGVwcyBjYW4gb2NjdXIgd2hlbiByZXVzaW5nIGEgbG9nZGlyIHdpdGggbXVsdGlwbGUgc3VtbWFyeSB3cml0ZXJzIGFuZCBvdmVybGFwcGluZyBzdGVwcy4gTGluZSBjaGFydHMsIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCwgY2FuIGFwcGVhciB6aWcgemFnZ2VkLiBUaGlzIGlzIGNvbW1vbiB3aGVuIHJlc3RhcnRpbmcgZnJvbSBhIGNoZWNrcG9pbnQuXG5cbldoZW4gZW5hYmxlZCwgYSBub24tbW9ub3RvbmljIHRpbWUgc2VyaWVzIGNvbXBvc2VkIG9mIE4gbW9ub3RvbmljIHBpZWNlcyB3aWxsIGJlIHNob3duIGFzIE4gbW9ub3RvbmljIGxpbmVzLiIsMSwiaW5mbyJdLFsxLCJIaXN0b2dyYW1zIl0sWzEsImNvbnRyb2wtcm93IiwiaGlzdG9ncmFtLW1vZGUiXSxbImNsYXNzIiwiaW1hZ2UiLDQsIm5nSWYiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIl0sWzMsImNoZWNrZWQiLCJkaXNhYmxlZCIsImNoYW5nZSJdLFsxLCJpbmRlbnQiXSxbImNsYXNzIiwiaW5kZW50IHJhbmdlLXNlbGVjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBsaW5rZWQtdGltZSBpbmRlbnQiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1jb250cmFzdCJdLFsiaWQiLCJpbWFnZS1jb25zdHJhc3QtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZXNldCBjb250cmFzdCIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLXNob3ctYWN0dWFsLXNpemUiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzZWN0aW9uIiwwKSgxLCJoMyIsMSksRCgyLCJHZW5lcmFsIiksdigpLGcoMywiZGl2IiwyKSg0LCJkaXYiLDMpLEQoNSwiSG9yaXpvbnRhbCBBeGlzIiksdigpLGcoNiwidGItZHJvcGRvd24iLDQpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkueEF4aXNUeXBlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCksRSg3LGZGZSw4LDYsImRpdiIsNSksZyg4LCJkaXYiLDYpKDksImRpdiIsNyksRCgxMCwiQ2FyZCBXaWR0aCIpLHYoKSxnKDExLCJkaXYiLDgpKDEyLCJtYXQtc2xpZGVyIiw5KSxQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDEzLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jYXJkV2lkdGhSZXNldC5lbWl0KCl9KSxOKDE0LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCkoKSxnKDE1LCJzZWN0aW9uIiwxMikoMTYsImgzIiwxKSxEKDE3LCJTY2FsYXJzIiksdigpLGcoMTgsImRpdiIsMTMpKDE5LCJkaXYiLDE0KSxEKDIwLCJTbW9vdGhpbmciKSx2KCksZygyMSwiZGl2Iiw4KSgyMiwibWF0LXNsaWRlciIsMTUpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDIzLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksdigpKCkoKSxnKDI0LCJkaXYiLDE3KSgyNSwiZGl2IiwxOCksRCgyNiwiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLHYoKSxnKDI3LCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLHYoKSgpLGcoMjgsImRpdiIsMTkpKDI5LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxEKDMwLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLHYoKSgpLGcoMzEsImRpdiIsMjEpKDMyLCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksRCgzMywiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksdigpLE4oMzQsIm1hdC1pY29uIiwyMiksdigpKCksZygzNSwic2VjdGlvbiIsMjMpKDM2LCJoMyIsMSksRCgzNywiSGlzdG9ncmFtcyIpLHYoKSxnKDM4LCJkaXYiLDI0KSgzOSwiZGl2IiwxOCksRCg0MCwiTW9kZSIpLHYoKSxnKDQxLCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCkoKSxFKDQyLG1GZSwyMCwxMywic2VjdGlvbiIsMjUpKSwyJmUmJih4KDYpLGIoInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCkseCg1KSxiKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLHgoMTApLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSx4KDEpLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx4KDQpLGIoInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucykseCgyKSxiKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSx4KDMpLGIoImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCkseCg5KSxiKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsRm5lLCRuLEVkLFpuLFRkXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowIDAgMTJweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbToxMnB4fS5jb250cm9sLW5hbWVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyOHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNldC1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjZweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjEycHg7cGFkZGluZzowIDRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM0MjUwNjZ9LnNjYWxhcnMtc21vb3RoaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTt3aWR0aDo1ZW19LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVdICAgLmluZm9bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O21hcmdpbi1sZWZ0OjVweDt3aWR0aDoxNXB4O21pbi13aWR0aDoxNXB4fW1hdC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDotOHB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MjhweDtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6MTJweH0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUubWF0LWJ1dHRvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE1cHg7bWFyZ2luLXJpZ2h0OjZweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30ubGlua2VkLXRpbWVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NXB4IDB9LmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmRlbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjI1cHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxiRmU9T2JqZWN0LmZyZWV6ZSh7U0xJREVSOkdvLlNFVFRJTkdTX1NMSURFUixURVhUOkdvLlNFVFRJTkdTX1RFWFQsVEVYVF9ERUxFVEVEOkdvLkNIQU5HRV9UT19TSU5HTEV9KSxCbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3Qob0spLHRoaXMuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGNLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGFLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVEMpLHRoaXMuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEhwKSx0aGlzLmlzTGlua2VkVGltZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KFZwKSx0aGlzLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEVWKSx0aGlzLnN0ZXBNaW5NYXgkPXRoaXMuc3RvcmUuc2VsZWN0KFNWKSx0aGlzLmlzU2xpZGVPdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3Qob0EpLHRoaXMuaXNJbWFnZVN1cHBvcnRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssaV0pPT5pKSksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KG1fKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYnUpLHRoaXMuY2FyZE1pbldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChoXyksdGhpcy5oaXN0b2dyYW1Nb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy5zY2FsYXJTbW9vdGhpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHZkKSx0aGlzLnNjYWxhclBhcnRpdGlvblgkPXRoaXMuc3RvcmUuc2VsZWN0KCREKSx0aGlzLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdCh0QSksdGhpcy5pbWFnZVNob3dBY3R1YWxTaXplJD10aGlzLnN0b3JlLnNlbGVjdChuQSl9b25Ub29sdGlwU29ydENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChjUCh7c29ydDplfSkpfW9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1UCgpKX1vblhBeGlzVHlwZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChkUCh7eEF4aXNUeXBlOmV9KSl9b25DYXJkV2lkdGhDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocFAoe2NhcmRNaW5XaWR0aDplfSkpfW9uQ2FyZFdpZHRoUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGhQKCkpfW9uSGlzdG9ncmFtTW9kZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh4UCh7aGlzdG9ncmFtTW9kZTplfSkpfW9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGZQKHtzbW9vdGhpbmc6ZX0pKX1vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChtUCgpKX1vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1Aoe2JyaWdodG5lc3NJbk1pbGxpOmV9KSl9b25JbWFnZUJyaWdodG5lc3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godlAoKSl9b25JbWFnZUNvbnRyYXN0UmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHlQKCkpfW9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX1Aoe2NvbnRyYXN0SW5NaWxsaTplfSkpfW9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJQKCkpfW9uTGlua2VkVGltZVRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFBQKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblJhbmdlU2VsZWN0aW9uVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT1Aoe2FmZm9yZGFuY2U6V2EuQ0hFQ0tfQk9YfSkpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoe3RpbWVTZWxlY3Rpb246ZSxzb3VyY2U6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goe3RpbWVTZWxlY3Rpb246ZSxhZmZvcmRhbmNlOmJGZVtpXX0pKX1vblNsaWRlT3V0VG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFAoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoyMix2YXJzOjYzLGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJjYXJkTWluV2lkdGgiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIiwiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIiwiaXNMaW5rZWRUaW1lRW5hYmxlZCIsImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE1pbk1heCIsImlzU2xpZGVPdXRNZW51T3BlbiIsInRvb2x0aXBTb3J0Q2hhbmdlZCIsImlnbm9yZU91dGxpZXJzQ2hhbmdlZCIsInhBeGlzVHlwZUNoYW5nZWQiLCJjYXJkV2lkdGhDaGFuZ2VkIiwiY2FyZFdpZHRoUmVzZXQiLCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsInNjYWxhclNtb290aGluZ0NoYW5nZWQiLCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLCJpbWFnZUNvbnRyYXN0UmVzZXQiLCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsImxpbmtlZFRpbWVUb2dnbGVkIiwibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJzdGVwU2VsZWN0b3JUb2dnbGVkIiwicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIiwib25TbGlkZU91dFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCIsMCksUCgidG9vbHRpcFNvcnRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvb2x0aXBTb3J0Q2hhbmdlZChvKX0pKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKCJ4QXhpc1R5cGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblhBeGlzVHlwZUNoYW5nZWQobyl9KSgiY2FyZFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DYXJkV2lkdGhDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2FyZFdpZHRoUmVzZXQoKX0pKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChvKX0pKCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0NoYW5nZWQobyl9KSgic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpfSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQnJpZ2h0bmVzc1Jlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKX0pKCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQ29udHJhc3RSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkoImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKX0pKCJsaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSgibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgic3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKX0pKCJyYW5nZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKX0pKCJvblNsaWRlT3V0VG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNsaWRlT3V0VG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksdigpKSwyJmUmJmIoImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsVygxLDIxLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsVygyLDIzLGkudG9vbHRpcFNvcnQkKSkoImlnbm9yZU91dGxpZXJzIixXKDMsMjUsaS5pZ25vcmVPdXRsaWVycyQpKSgieEF4aXNUeXBlIixXKDQsMjcsaS54QXhpc1R5cGUkKSkoImNhcmRNaW5XaWR0aCIsVyg1LDI5LGkuY2FyZE1pbldpZHRoJCkpKCJoaXN0b2dyYW1Nb2RlIixXKDYsMzEsaS5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFcoNywzMyxpLnNjYWxhclNtb290aGluZyQpKSgic2NhbGFyUGFydGl0aW9uWCIsVyg4LDM1LGkuc2NhbGFyUGFydGl0aW9uWCQpKSgiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsVyg5LDM3LGkuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFcoMTAsMzksaS5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsVygxMSw0MSxpLmltYWdlU2hvd0FjdHVhbFNpemUkKSkoImlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkIixXKDEyLDQzLGkuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQkKSkoImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIixXKDEzLDQ1LGkuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLFcoMTQsNDcsaS5pc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLFcoMTUsNDksaS5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixXKDE2LDUxLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkKSkoImlzTGlua2VkVGltZUVuYWJsZWQiLFcoMTcsNTMsaS5pc0xpbmtlZFRpbWVFbmFibGVkJCkpKCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixXKDE4LDU1LGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxOSw1NyxpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInN0ZXBNaW5NYXgiLFcoMjAsNTksaS5zdGVwTWluTWF4JCkpKCJpc1NsaWRlT3V0TWVudU9wZW4iLFcoMjEsNjEsaS5pc1NsaWRlT3V0TWVudU9wZW4kKSl9LGRlcGVuZGVuY2llczpbTG5lLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxWbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTigwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkZXBlbmRlbmNpZXM6W0JuZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gd0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBNRmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIFNGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gRUZlKG4sdCl7MSZuJiZOKDAsImRpdiIsNSl9dmFyIEJQPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkNvbHVtbkhlYWRlclR5cGU9bXR9Z2V0SGVhZGVyVGV4dENvbHVtbihlKXtzd2l0Y2goZSl7Y2FzZSBtdC5SVU46cmV0dXJuIlJ1biI7Y2FzZSBtdC5WQUxVRTpyZXR1cm4iVmFsdWUiO2Nhc2UgbXQuU1RFUDpyZXR1cm4iU3RlcCI7Y2FzZSBtdC5USU1FOnJldHVybiJUaW1lIjtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIlJlbGF0aXZlIjtjYXNlIG10LlNNT09USEVEOnJldHVybiJTbW9vdGhlZCI7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIlZhbHVlIjtjYXNlIG10LlNUQVJUX1NURVA6cmV0dXJuIlN0YXJ0IFN0ZXAiO2Nhc2UgbXQuRU5EX1NURVA6cmV0dXJuIkVuZCBTdGVwIjtjYXNlIG10LlNUQVJUX1ZBTFVFOnJldHVybiJTdGFydCBWYWx1ZSI7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIkVuZCBWYWx1ZSI7Y2FzZSBtdC5NSU5fVkFMVUU6cmV0dXJuIk1pbiI7Y2FzZSBtdC5NQVhfVkFMVUU6cmV0dXJuIk1heCI7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4iJSI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4iU3RlcCBhdCBNYXgiO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIlN0ZXAgYXQgTWluIjtjYXNlIG10Lk1FQU46cmV0dXJuIk1lYW4iO2Nhc2UgbXQuUkFXX0NIQU5HRTpyZXR1cm4iUmVhbCBWYWx1ZSI7ZGVmYXVsdDpyZXR1cm4iIn19Z2V0U3BlY2lhbFR5cGVDbGFzc2VzKGUpe3N3aXRjaChlKXtjYXNlIG10LlNURVBfQVRfTUlOOnJldHVybiJzdGVwLWF0LW1pbiI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4ic3RlcC1hdC1tYXgiO2RlZmF1bHQ6cmV0dXJuIiJ9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXRhLXRhYmxlLWhlYWRlciJdXSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIn0sZGVjbHM6Nyx2YXJzOjYsY29uc3RzOltbMSwiaGVhZGVyLWNvbnRhaW5lciIsMywibmdTd2l0Y2giXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZXh0cmEtcmlnaHQtcGFkZGluZyIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Il0sWzEsImV4dHJhLXJpZ2h0LXBhZGRpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRSgxLHdGZSwxLDAsIm1hdC1pY29uIiwxKSxFKDIsTUZlLDEsMCwibWF0LWljb24iLDEpLEUoMyxTRmUsMSwwLCJtYXQtaWNvbiIsMSksRSg0LEVGZSwxLDAsImRpdiIsMiksZyg1LCJzcGFuIiwzKSxEKDYpLHYoKSgpKSwyJmUmJihiKCJuZ1N3aXRjaCIsaS5oZWFkZXIudHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5WQUxVRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUEVSQ0VOVEFHRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUkFXX0NIQU5HRSkseCgyKSxiKCJuZ0NsYXNzIixpLmdldFNwZWNpYWxUeXBlQ2xhc3NlcyhpLmhlYWRlci50eXBlKSkseCgxKSx5dChpLmdldEhlYWRlclRleHRDb2x1bW4oaS5oZWFkZXIudHlwZSkpKX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxabl0sc3R5bGVzOlsiLmhlYWRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjEycHh9LnN0ZXAtYXQtbWluW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MzdweH0uc3RlcC1hdC1tYXhbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo0MHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gVEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw5KSxQKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmRyYWdTdGFydChvKSl9KSgiZHJhZ2VuZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbmQocikpfSkoImRyYWdlbnRlciIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQscz1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbnRlcihvLHMpKX0pLGcoMSwibWF0LWNoZWNrYm94IiwxMCksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oKS5kYXRhVGFibGVNb2RlO3JldHVybiBvZShNKCkudG9nZ2xlSGVhZGVyKG8scykpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMTEpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigibmdDbGFzcyIsTSgyKS5nZXRIaWdobGlnaHRDbGFzc2VzKGUpKSx4KDEpLGIoImNoZWNrZWQiLGUuZW5hYmxlZCkseCgxKSxiKCJoZWFkZXIiLGUpfX1mdW5jdGlvbiBERmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNyksRSgxLFRGZSwzLDMsImRpdiIsOCksdigpKSwyJm4pe2xldCBlPXQuaGVhZGVyczt4KDEpLGIoIm5nRm9yT2YiLGUpfX12YXIgVW5lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue2hlYWRlcnM6bixkYXRhVGFibGVNb2RlOnR9fSx0SD1uPT57bi5wcmV2ZW50RGVmYXVsdCgpfSxBRmU9KG4sdCxlKT0+e2xldCBpPVsuLi5lXTtyZXR1cm4gaS5zcGxpY2UobiwxKSxpLnNwbGljZSh0LDAsZVtuXSksaX0sVlA9KG4sdCk9PnQuZmluZEluZGV4KGU9PmUudHlwZT09PW4pLGFoPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5UT1A9MF09IlRPUCIsbltuLkJPVFRPTT0xXT0iQk9UVE9NIn0oYWh8fChhaD17fSkpLGFoKSkoKSx6bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5EYXRhVGFibGVNb2RlPV9vLHRoaXMuaGlnaGxpZ2h0RWRnZT1haC5UT1AsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdD1uZXcgRyx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBHLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZD1uZXcgRyx0aGlzLm9uVGFiQ2hhbmdlPW5ldyBHfW5nT25EZXN0cm95KCl7dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9dGFiQ2hhbmdlKGUpe3RoaXMub25UYWJDaGFuZ2UuZW1pdCgwPT09ZS5pbmRleD9fby5TSU5HTEU6X28uUkFOR0UpfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VuZChlKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGV8fCF0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSlyZXR1cm47bGV0IGk9dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShlKTt0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0LmVtaXQoe2RhdGFUYWJsZU1vZGU6ZSxoZWFkZXJzOkFGZShWUCh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSxpKSxWUCh0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSxpKSxpKX0pLHRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlPXZvaWQgMCx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT12b2lkIDAsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VudGVyKGUsaSl7aWYoIXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlKXJldHVybjtsZXQgcj10aGlzLmdldEhlYWRlcnNGb3JNb2RlKGkpO3RoaXMuaGlnaGxpZ2h0RWRnZT1WUChlLnR5cGUscik8VlAodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUscik/YWguVE9QOmFoLkJPVFRPTSx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT1lLnR5cGV9dG9nZ2xlSGVhZGVyKGUsaSl7dGhpcy5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZC5lbWl0KHtkYXRhVGFibGVNb2RlOmksaGVhZGVyVHlwZTplLnR5cGV9KX1nZXRIaWdobGlnaHRDbGFzc2VzKGUpe3JldHVybiBlLnR5cGUhPT10aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT97fTp7aGlnaGxpZ2h0ZWQ6ITAsImhpZ2hsaWdodC10b3AiOnRoaXMuaGlnaGxpZ2h0RWRnZT09PWFoLlRPUCwiaGlnaGxpZ2h0LWJvdHRvbSI6dGhpcy5oaWdobGlnaHRFZGdlPT09YWguQk9UVE9NfX1nZXRTZWxlY3RlZFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWI9PT1fby5TSU5HTEU/MDoxfWdldEhlYWRlcnNGb3JNb2RlKGUpe3JldHVybiBlPT09X28uU0lOR0xFP3RoaXMuc2luZ2xlSGVhZGVyczp0aGlzLnJhbmdlSGVhZGVyc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMiLHNlbGVjdGVkVGFiOiJzZWxlY3RlZFRhYiJ9LG91dHB1dHM6e29uU2NhbGFyVGFibGVDb2x1bW5FZGl0OiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsb25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ6Im9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkOiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixvblRhYkNoYW5nZToib25UYWJDaGFuZ2UifSxkZWNsczoxMSx2YXJzOjEzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIGNvbHVtbiBlZGl0b3Iu4pCfY2I2MTZjZTliNDMyN2I0MWU2YmRiOTM0NDY2OWJhN2M3MmUyYzcwZeKQnzcyMDU2MzU3NjQ3MTMwMzQ4NDI6Q2xvc2UgY29sdW1uIGVkaXRvcmAsW1sxLCJlZGl0b3ItY29udHJvbHMiXSxbMSwidGFiLWdyb3VwIiwzLCJzZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxbMywibGFiZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImZvb3RlciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsiaGVhZGVyTGlzdCIsIiJdLFsxLCJoZWFkZXItbGlzdCJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiwiZHJhZ2dhYmxlIiwidHJ1ZSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZHJhZ2dhYmxlIiwidHJ1ZSIsMSwiaGVhZGVyLWxpc3QtaXRlbSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFszLCJoZWFkZXIiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsIm1hdC10YWItZ3JvdXAiLDEpLFAoInNlbGVjdGVkVGFiQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50YWJDaGFuZ2Uobyl9KSxnKDIsIm1hdC10YWIiLDIpLE4oMywibmdDb250ZXh0IiwzKSx2KCksZyg0LCJtYXQtdGFiIiwyKSxOKDUsIm5nQ29udGV4dCIsMyksdigpKCkoKSxnKDYsImRpdiIsNCkoNywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkLmVtaXQoKX0pLEQoOCwiIENsb3NlICIpLHYoKSgpLEUoOSxERmUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSksMiZlKXtsZXQgcj1zdCgxMCk7eCgxKSxiKCJzZWxlY3RlZEluZGV4IixpLmdldFNlbGVjdGVkVGFiSW5kZXgoKSkseCgxKSxiKCJsYWJlbCIsIlNpbmdsZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0byg3LFVuZSxpLnNpbmdsZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlNJTkdMRSkpLHgoMSksYigibGFiZWwiLCJSYW5nZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0bygxMCxVbmUsaS5yYW5nZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlJBTkdFKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLE5vLEJQLEVkLGhJLGF3LCRuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgICAubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6MDtwYWRkaW5nOjAgMzBweH0uZWRpdG9yLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gNDVweCl9LnRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowO2hlaWdodDoxMDAlfS5oZWFkZXItbGlzdFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1JTttYXJnaW4tbGVmdDo1JX0uaGVhZGVyLWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9LmhpZ2hsaWdodGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LmhpZ2hsaWdodC1ib3R0b21bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNmZjk4MDB9LmhpZ2hsaWdodC10b3BbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MnB4IHNvbGlkICNmZjk4MDB9LmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6NHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5mb290ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2lkdGg6ODRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9ICAubWF0LXRhYi1ib2R5LXdyYXBwZXJ7ZmxleDoxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksam5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2luZ2xlSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMucmFuZ2VIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChfXyksdGhpcy5zZWxlY3RlZFRhYiQ9dGhpcy5zdG9yZS5zZWxlY3QocFopfW9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUlAoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0KGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJQKCkpfW9uVGFiQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaVAoe3RhYjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJzaW5nbGVIZWFkZXJzIiwicmFuZ2VIZWFkZXJzIiwic2VsZWN0ZWRUYWIiLCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0Iiwib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsIm9uVGFiQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yLWNvbXBvbmVudCIsMCksUCgib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKG8pfSkoIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdChvKX0pKCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKX0pKCJvblRhYkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UYWJDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigic2luZ2xlSGVhZGVycyIsVygxLDMsaS5zaW5nbGVIZWFkZXJzJCkpKCJyYW5nZUhlYWRlcnMiLFcoMiw1LGkucmFuZ2VIZWFkZXJzJCkpKCJzZWxlY3RlZFRhYiIsVygzLDcsaS5zZWxlY3RlZFRhYiQpKX0sZGVwZW5kZW5jaWVzOlt6bmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJGZT1ZKHJaLGVtLChuLHQpPT5uZXcgU2V0KE9iamVjdC5lbnRyaWVzKG4uc2NhbGFycy50YWdUb1J1bnMpLmZpbHRlcigoWyxlXSk9PiF0fHwhdC5zaXplfHxlLnNvbWUoaT0+dD8uZ2V0KGkpKSkubWFwKChbZV0pPT5lKSkpLE9GZT1ZKFpELGVtLGRaLFJGZSwobix0LGUsaSk9PntsZXQgcj1BcnJheS5mcm9tKHQ/LnZhbHVlcygpfHxbXSkuc29tZShCb29sZWFuKTtyZXR1cm4gbi5maWx0ZXIobz0+emEoby5wbHVnaW4pP0Jvb2xlYW4odCYmdC5nZXQoby5ydW5JZCkpOiFlfHwhcnx8by5wbHVnaW4hPT1Xbi5TQ0FMQVJTfHxpLmhhcyhvLnRhZykpfSkseW09WShPRmUsbj0+bi5zb3J0KCh0LGUpPT5idyh0LnRhZyxlLnRhZykpKSxtdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5yZWY9ZSx0aGlzLmNka1Njcm9sbGFibGU9aSx0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uRXZlbnQkPW5ldyBUZX1uZ09uSW5pdCgpe2xldCBlPXtyb290OnRoaXMuY2RrU2Nyb2xsYWJsZT90aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ6bnVsbH07dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiYmKGUucm9vdE1hcmdpbj10aGlzLmludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luKTtsZXQgaT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocj0+e3RoaXMub25FdmVudCQubmV4dChyKX0sZSk7aS5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUodGhpcy5yZWYubmF0aXZlRWxlbWVudCl9KSx0aGlzLm9uRXZlbnQkLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShyPT57bGV0IG89ci5zbGljZSgtMSlbMF07dGhpcy5vblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7dmlzaWJsZTpvLmlzSW50ZXJzZWN0aW5nfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX13YWl0Rm9yRXZlbnRGb3JUZXN0T25seSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT50aGlzLm9uRXZlbnQkLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e2UoKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhZcCw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiXV0saW5wdXRzOntpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbjoiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4ifSxvdXRwdXRzOntvblZpc2liaWxpdHlDaGFuZ2U6Im9uVmlzaWJpbGl0eUNoYW5nZSJ9fSksbn0pKCksR25lPSIvc2NhbGFyX3N1bW1hcnkiO2Z1bmN0aW9uIGd2KG4sdCl7bGV0IGU9bjtyZXR1cm4gdCYmbi5zdGFydHNXaXRoKHQrIi8iKSYmKGU9bi5zbGljZSh0Lmxlbmd0aCsxKSksZS5lbmRzV2l0aChHbmUpJiYoZT1lLnNsaWNlKDAsLUduZS5sZW5ndGgpKSxlfHxufXZhciBIUD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmhyZWZBdHRyPXZvaWQgMCx0aGlzLnNyY0F0dHI9dm9pZCAwLHRoaXMuaW5jbHVkZUZlYXR1cmVGbGFncz0hMH1nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChuXykucGlwZShCKGk9PntpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyIsSlNPTi5zdHJpbmdpZnkoaSldXSksbz1lLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm4gZStvK1N0cmluZyhyKX1yZXR1cm4gZX0pKX1zZXQgaHJlZihlKXtlJiZQUyh0aGlzLmdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSkpLnRoZW4oaT0+e3RoaXMuaHJlZkF0dHI9aX0pfXNldCBzcmMoZSl7ZSYmUFModGhpcy5nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpKS50aGVuKGk9Pnt0aGlzLnNyY0F0dHI9aX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl0sWyJpbWciLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaHJlZiIsaS5ocmVmQXR0cixkbCkoInNyYyIsaS5zcmNBdHRyLGRsKX0saW5wdXRzOntpbmNsdWRlRmVhdHVyZUZsYWdzOiJpbmNsdWRlRmVhdHVyZUZsYWdzIixocmVmOiJocmVmIixzcmM6InNyYyJ9fSksbn0pKCksa0ZlPVsibWVhc3VyZXIiXSxGRmU9WyJpbnB1dCJdLHFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuc3R5bGU9ImRlZmF1bHQiLHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAoIi4qIiksdGhpcy5pc1ZhbGlkPSEwLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmJsdXI9bmV3IEcsdGhpcy5mb2N1cz1uZXcgRyx0aGlzLmtleWRvd249bmV3IEcsdGhpcy5rZXl1cD1uZXcgRyx0aGlzLmludGVybmFsVmFsdWU9IiIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXI9dGhpcy51cGRhdGVJbnB1dFdpZHRoLmJpbmQodGhpcyl9bmdPbkluaXQoKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uRGVzdHJveSgpe2RvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkaW5nZG9uZSIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXIpfW5nT25DaGFuZ2VzKGUpe2UucGF0dGVybiYmKHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuPz8iIikpLGUudmFsdWUmJih0aGlzLmludGVybmFsVmFsdWU9dGhpcy52YWx1ZSksdGhpcy5pc1ZhbGlkPXRoaXMucGF0dGVyblJlZ2V4LnRlc3QodGhpcy5pbnRlcm5hbFZhbHVlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX1vbklucHV0KGUpe2xldCBpPXRoaXMuaW50ZXJuYWxWYWx1ZTt0aGlzLmludGVybmFsVmFsdWU9dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5pbnRlcm5hbFZhbHVlIT09aSYmKHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSksdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3ZhbHVlOnRoaXMuaW50ZXJuYWxWYWx1ZX0pfXVwZGF0ZUlucHV0V2lkdGgoKXtsZXR7d2lkdGg6ZX09dGhpcy5tZWFzdXJlckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjb250ZW50LXdyYXBwaW5nLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGtGZSw3LEFlKSxsdChGRmUsNyxBZSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWVhc3VyZXJFbFJlZj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5pbnB1dEVsUmVmPXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmVhKGkuc3R5bGUpfSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixzdHlsZToic3R5bGUiLHBhdHRlcm46InBhdHRlcm4ifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIixibHVyOiJibHVyIixmb2N1czoiZm9jdXMiLGtleWRvd246ImtleWRvd24iLGtleXVwOiJrZXl1cCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWVhc3VyZXIiXSxbIm1lYXN1cmVyIiwiIl0sWyJhdXRvY29tcGxldGUiLCJvZmYiLCJzcGVsbGNoZWNrIiwiZmFsc2UiLCJ0eXBlIiwidGV4dCIsMywidmFsdWUiLCJwbGFjZWhvbGRlciIsImJsdXIiLCJmb2N1cyIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwic3BhbiIpKDEsInNwYW4iLDAsMSksRCgzKSx2KCksZyg0LCJpbnB1dCIsMiwzKSxQKCJibHVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5ibHVyLmVtaXQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZvY3VzLmVtaXQobyl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5ZG93bi5lbWl0KG8pfSkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5rZXl1cC5lbWl0KG8pfSksdigpKCkpLDImZSYmKGF0KCJjb250YWluZXIiLCEwKSgiaXMtdmFsaWQiLGkuaXNWYWxpZCkseCgzKSx5dChpLmludGVybmFsVmFsdWV8fGkucGxhY2Vob2xkZXIpLHgoMSksYigidmFsdWUiLGkudmFsdWUpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6bWF4LWNvbnRlbnR9W19uZ2hvc3QtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2Y1N2MwMH0uZGVmYXVsdFtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYn0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKXtib3JkZXItY29sb3I6I2VmOWE5YX0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIC5lcnJvcltfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpob3ZlciwgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOm5vdCguaXMtdmFsaWQpOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6I2VmOWE5YX0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2JkYmRiZH0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItY29sb3I6Izc1NzU3NX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7cGFkZGluZzoxcHggMnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZWFzdXJlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbn0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdLCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzowO3doaXRlLXNwYWNlOnByZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5LCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7d2lkdGg6MmNofWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdDtvdXRsaW5lOjB9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze3BhZGRpbmctcmlnaHQ6MWNofSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiY29udGVudC13cmFwcGluZy1pbnB1dCIsMyksUCgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5hbGlhc0NoYW5nZWQuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7cGwoZS5pc0FsaWFzTmFtZUxlZ2FsPyJoaWdoLWNvbnRyYXN0IjoiZXJyb3IiKSxiKCJ2YWx1ZSIsZS5hbGlhcy5hbGlhc1RleHQpfX1mdW5jdGlvbiBCRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTthdCgiaWxsZWdhbCIsIWUuaXNBbGlhc05hbWVMZWdhbCksYigidGl0bGUiLGUudGl0bGUpLHgoMSkseXQoZS5hbGlhcy5hbGlhc1RleHQpfX12YXIgX3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNBbGlhc05hbWVMZWdhbD0hMCx0aGlzLmFsaWFzQ2hhbmdlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZXhwZXJpbWVudC1hbGlhcyJdXSxpbnB1dHM6e2FsaWFzOiJhbGlhcyIsYWxpYXNFZGl0YWJsZToiYWxpYXNFZGl0YWJsZSIsdGl0bGU6InRpdGxlIixpc0FsaWFzTmFtZUxlZ2FsOiJpc0FsaWFzTmFtZUxlZ2FsIn0sb3V0cHV0czp7YWxpYXNDaGFuZ2VkOiJhbGlhc0NoYW5nZWQifSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJhbGlhcy1udW1iZXIiXSxbInBsYWNlaG9sZGVyIiwiQWxpYXMgZm9yIGV4cGVyaW1lbnQiLDMsInN0eWxlIiwidmFsdWUiLCJvblZhbHVlQ2hhbmdlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRWRpdEFsaWFzTmFtZSIsIiJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywidmFsdWUiLCJvblZhbHVlQ2hhbmdlIl0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsTEZlLDEsMywiY29udGVudC13cmFwcGluZy1pbnB1dCIsMSksRSgzLEJGZSwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUpe2xldCByPXN0KDQpO3goMSkseXQoaS5hbGlhcy5hbGlhc051bWJlcikseCgxKSxiKCJuZ0lmIixpLmFsaWFzRWRpdGFibGUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLHFuZV0sc3R5bGVzOlsiLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojMjEyMTIxO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoycHg7cGFkZGluZzowIDJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfSJdfSksbn0pKCk7ZnVuY3Rpb24gVkZlKG4sdCl7MSZuJiZOKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDIpLDImbiYmYigiYWxpYXMiLE0oKS5leHBlcmltZW50QWxpYXMpfWZ1bmN0aW9uIEhGZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiLyIpLHYoKSl9dmFyIFluZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxWRmUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxFKDEsSEZlLDIsMCwic3BhbiIsMSksZygyLCJzcGFuIiksRCgzKSx2KCkpLDImZSYmKGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDEpLGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDIpLHl0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W1hlLF92XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVVA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChjQSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShCKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpXSkucGlwZShCKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJihiKCJuYW1lIixXKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVygzLDcsaS5leHBlcmltZW50QWxpYXMkKSksemUoInRpdGxlIixXKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6W1luZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gekZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLmZpcnN0VGV4dFBhcnQoKSl9fXZhciB2dj0oKCk9PntjbGFzcyBue3BhcnNlVmFsdWUoKXtsZXQgZT10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lP3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCxlKSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZShlKX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXRydW5jYXRlZC1wYXRoIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiZmlyc3QtdGV4dC1wYXJ0Iiw0LCJuZ0lmIl0sWzEsInNlY29uZC10ZXh0LXBhcnQiXSxbMSwiZmlyc3QtdGV4dC1wYXJ0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLHpGZSwyLDEsInNwYW4iLDApLGcoMSwic3BhbiIsMSksRCgyKSx2KCkpLDImZSYmKGIoIm5nSWYiLGkuZmlyc3RUZXh0UGFydCgpLmxlbmd0aD4wKSx4KDIpLHl0KGkuc2Vjb25kVGV4dFBhcnQoKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLG59KSgpO2Z1bmN0aW9uIGpGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMil9ZnVuY3Rpb24gR0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwzKX12YXIgeXY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNDbGlwcGVkPSExLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciXV0saW5wdXRzOntpc0NsaXBwZWQ6ImlzQ2xpcHBlZCIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siZGF0YS12YWx1ZSIsImNsaXBwZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJEYXRhIGlzIG5vdCBmb3VuZCBvbiBzZWxlY3RlZCBzdGVwLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIiw0LCJuZ0lmIl0sWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsakZlLDEsMCwibWF0LWljb24iLDApLEUoMSxHRmUsMSwwLCJtYXQtaWNvbiIsMSkpLDImZSYmKGIoIm5nSWYiLGkuaXNDbGlwcGVkKSx4KDEpLGIoIm5nSWYiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSl9LGRlcGVuZGVuY2llczpbWGUsWm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZjtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjA7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZn1bX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBXRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE5KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJTdGVwICIsVygyLDEsZS5zdGVwc1tlLnN0ZXBJbmRleF0pLCIiKX19ZnVuY3Rpb24gcUZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMCksRCgxKSxqKDIsIm51bWJlciIpLGooMywibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGFwKCJTYW1wbGUgIixXKDIsMixlLnNhbXBsZSsxKSwiLyIsVygzLDQsZS5udW1TYW1wbGUpLCIiKX19ZnVuY3Rpb24gWUZlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyMSl9ZnVuY3Rpb24gWEZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJzcGFuIiwzMCkoMiwic3BhbiIsMzEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMiksT3QoImxlZnQiLGUuc2xpZGVyU3RhcnRQb3NpdGlvbikoIndpZHRoIixlLnNsaWRlclRyYWNrV2lkdGgpfX1mdW5jdGlvbiBRRmUobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzMiksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMyk7T3QoImxlZnQiLGkuZ2V0TGlua2VkVGltZVRpY2tMZWZ0U3R5bGUoZSkpKCJtYXJnaW4tbGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja01hcmdpbkxlZnRTdHlsZShlKSl9fWZ1bmN0aW9uIEtGZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyNyksRSgxLFhGZSwzLDQsInNwYW4iLDI4KSxFKDIsUUZlLDEsNCwiZGl2IiwyOSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0lmIixudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApLHgoMSksYigibmdGb3JPZiIsZS5zZWxlY3RlZFN0ZXBzKX19dmFyIFpGZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LEpGZT1mdW5jdGlvbihuKXtyZXR1cm57ZmlsdGVyOm59fTtmdW5jdGlvbiAkRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDIyKSgyLCJtYXQtc2xpZGVyIiwyMyksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25TbGlkZXJJbnB1dChyKSl9KSx2KCksRSgzLEtGZSwzLDIsImRpdiIsMjQpLHYoKSxnKDQsImRpdiIsMjUpLE4oNSwiaW1nIiwyNiksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgyKSxiKCJuZ0NsYXNzIixIbigxMSxaRmUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSx4KDEpLGIoIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbikseCgyKSxQYigiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSx4cigic3JjIixlLmltYWdlVXJsLGRsKSxiKCJuZ1N0eWxlIixIbigxMyxKRmUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBlTmUobix0KXsxJm4mJihnKDAsImRpdiIsMzQpLEQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24gdE5lKG4sdCl7aWYoMSZuJiZFKDAsZU5lLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT1NKCk7YigibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIG5OZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxRbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1FZSx0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249IiIsdGhpcy5zbGlkZXJUcmFja1dpZHRoPSIiLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbj1udWxsLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBHLHRoaXMuc3RlcEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHfWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KGUpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQoZS52YWx1ZSl9Y2hhbmdlRGlzdGluY3QoZSl7cmV0dXJuIGUuY3VycmVudFZhbHVlIT09ZS5wcmV2aW91c1ZhbHVlfW5nT25DaGFuZ2VzKGUpeyhlLnNlbGVjdGVkU3RlcHMmJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5zZWxlY3RlZFN0ZXBzKXx8ZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZ0aGlzLmNoYW5nZURpc3RpbmN0KGUubGlua2VkVGltZVNlbGVjdGlvbikpJiZ0aGlzLnJlbmRlclJhbmdlU2xpZGVyKCl9cmVuZGVyUmFuZ2VTbGlkZXIoKXtpZighdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHwhdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApcmV0dXJuO2xldCBlPXRoaXMuc3RlcHMubGVuZ3RoLTEsaT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwPHRoaXMuc3RlcHNbMF0/dGhpcy5zdGVwc1swXTp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwLHI9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA+dGhpcy5zdGVwc1tlXT90aGlzLnN0ZXBzW2VdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwLHtzdGFydFBvc2l0aW9uOm8sd2lkdGg6c309dGhpcy5nZXRUcmFja1N0YXJ0UG9zaXRpb25BbmRXaWR0aChpLHIsZSk7dGhpcy5zbGlkZXJTdGFydFBvc2l0aW9uPTEwMCpvKyIlIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9MTAwKnMrIiUifWdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGUsaSxyKXtsZXQgbz0xL3Iscz0wLGE9MCxsPTA7Zm9yKDtsPHRoaXMuc3RlcHMubGVuZ3RoLTE7bCsrKXtsZXQgYz10aGlzLnN0ZXBzW2xdLHU9dGhpcy5zdGVwc1tsKzFdO2lmKGM8PWUmJmU8PXUpe3MrPShlLWMpLyh1LWMpO2JyZWFrfX1mb3Iocz0ocytsKSpvO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sdT10aGlzLnN0ZXBzW2wrMV07aWYoZT49YyYmaTw9dSl7YT0oaS1lKS8odS1jKTticmVha31pZihlPj1jJiZpPj11KWErPSh1LWUpLyh1LWMpO2Vsc2V7aWYoIShpPj11KSl7YSs9KGktYykvKHUtYyk7YnJlYWt9YSs9MX19cmV0dXJuIGEqPW8sKHM+MXx8czwwKSYmKHM9MCkse3N0YXJ0UG9zaXRpb246cyx3aWR0aDphfX1nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKXtpZigtMT09dGhpcy5zdGVwcy5pbmRleE9mKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGVwSW5kZXg6IHN0ZXBJbmRleCB2YWx1ZSBpcyBub3QgaW5jbHVkZWQgaW4gc3RlcHMiKTtyZXR1cm4gdGhpcy5zdGVwcy5pbmRleE9mKGUpLyh0aGlzLnN0ZXBzLmxlbmd0aC0xKSoxMDArIiUifWdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybmAtJHt0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjE0fXB4YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZC1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJhY3R1YWwtc2l6ZSIsaS5zaG93QWN0dWFsU2l6ZSl9LGlucHV0czp7bG9hZFN0YXRlOiJsb2FkU3RhdGUiLHRpdGxlOiJ0aXRsZSIsdGFnOiJ0YWciLHJ1bklkOiJydW5JZCIsc2FtcGxlOiJzYW1wbGUiLG51bVNhbXBsZToibnVtU2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwczoic3RlcHMiLGJyaWdodG5lc3NJbk1pbGxpOiJicmlnaHRuZXNzSW5NaWxsaSIsY29udHJhc3RJbk1pbGxpOiJjb250cmFzdEluTWlsbGkiLHNob3dBY3R1YWxTaXplOiJzaG93QWN0dWFsU2l6ZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsYWxsb3dUb2dnbGVBY3R1YWxTaXplOiJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsc2VsZWN0ZWRTdGVwczoic2VsZWN0ZWRTdGVwcyIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMSx2YXJzOjE2LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYW4gaW1hZ2UgY2FyZCB0aGF0IHRvZ2dsZXMgYWN0dWFsIGltYWdlIHNpemUu4pCfM2NhMDVlZjNhNmUzYTM3MDY1ZjVlMGY2OWM1ZDVhMjE3OGQ5MDc5MeKQnzc2MzUxMDE5MzY2NjQ3ODkxNDA6VG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplYCxbWzEsImhlYWRpbmciXSxbMSwibGluZSJdLFsxLCJ0YWciXSxbMSwidGFnLXBhdGgiLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwiaW1hZ2Vfc2VhcmNoXzI0cHgiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwibWV0YWRhdGEiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYW1wbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ltYWdlRGF0YSIsIiJdLFsxLCJzdGVwIl0sWzEsInNhbXBsZSJdLFsiZGlhbWV0ZXIiLCIxOCIsMSwibG9hZGluZyJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidGlja0ludGVydmFsIiwidmFsdWUiLCJpbnB1dCJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiXSxbMSwibGlua2VkLXRpbWUtd3JhcHBlciJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImxpbmtlZC10aW1lLXRpY2siLDMsImxlZnQiLCJtYXJnaW4tbGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJsaW5rZWQtdGltZS10aWNrIl0sWyJjbGFzcyIsImVtcHR5LW1lc3NhZ2UiLDQsIm5nSWYiXSxbMSwiZW1wdHktbWVzc2FnZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTig3LCJtYXQtaWNvbiIsNyksdigpLGcoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFjdHVhbFNpemVUb2dnbGUuZW1pdCgpfSksTig5LCJtYXQtaWNvbiIsOSksdigpKCkoKSxnKDEwLCJkaXYiLDEpKDExLCJzcGFuIiwxMCksTigxMiwic3BhbiIsMTEpKDEzLCJjYXJkLXJ1bi1uYW1lIiwxMiksdigpLGcoMTQsImRpdiIsMTMpLEUoMTUsV0ZlLDMsMywic3BhbiIsMTQpLEUoMTYscUZlLDQsNiwic3BhbiIsMTUpLEUoMTcsWUZlLDEsMCwibWF0LXNwaW5uZXIiLDE2KSx2KCkoKSgpLEUoMTgsJEZlLDYsMTUsIm5nLWNvbnRhaW5lciIsMTcpLEUoMTksdE5lLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTgsZW4pKSwyJmUpe2xldCByPXN0KDIwKTt4KDMpLHhyKCJ0aXRsZSIsaS50YWcpLHhyKCJ2YWx1ZSIsaS50aXRsZSkseCgxKSxiKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSx4KDIpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMSksYigiZGlzYWJsZWQiLCFpLmFsbG93VG9nZ2xlQWN0dWFsU2l6ZSkseCg0KSxiKCJuZ1N0eWxlIixIbigxNCxuTmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLGkubnVtU2FtcGxlPjEpLHgoMSksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSx3cCxIUCwkbixabix2byxUZCxVUCx2dix5dix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVde2hlaWdodDphdXRvfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHg7cG9zaXRpb246cmVsYXRpdmV9LmxpbmVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBtYXgtY29udGVudH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDo1cHh9Lm1ldGFkYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LXdpZHRoOjE3NXB4O3RleHQtYWxpZ246ZW5kfS50YWctcGF0aFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOmJhc2VsaW5lO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdLCAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RlcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdy15OmF1dG87cG9zaXRpb246cmVsYXRpdmV9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtpbWFnZS1yZW5kZXJpbmc6LW1vei1jcmlzcC1lZGdlcztpbWFnZS1yZW5kZXJpbmc6cGl4ZWxhdGVkfS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV0gICAuaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bztmbGV4Om5vbmV9W19uZ2hvc3QtJUNPTVAlXTpub3QoLmFjdHVhbC1zaXplKSAgIGltZ1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWF4LWhlaWdodDoxMDAlO21heC13aWR0aDoxMDAlO3dpZHRoOmF1dG87aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb250YWlufS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGVwLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfVtfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDowfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0ubGlua2VkLXRpbWUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDt3aWR0aDoxMDAlfS5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjE0cHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjF9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjJweDt0b3A6NnB4O3Bvc2l0aW9uOmFic29sdXRlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2xlZnQ6N3B4O3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksS25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPWksdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QodEEpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KG5BKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IFZyKHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1vblN0ZXBJbmRleENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChTUCh7Y2FyZElkOnRoaXMuY2FyZElkLHN0ZXBJbmRleDplfSkpfWlzSW1hZ2VDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09V24uSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtwbihbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbbCxjXSk9Pnt0aGlzLnNob3dBY3R1YWxTaXplPWx8fGMsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93QWN0dWFsU2l6ZSl9KSkuc3Vic2NyaWJlKCgpPT57fSk7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoU2wsdGhpcy5jYXJkSWQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxIZShsPT4hIWwmJnRoaXMuaXNJbWFnZUNhcmRNZXRhZGF0YShsKSksQihsPT5sKSxRcygxKSksbz1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksQigoW2wsY10pPT57bGV0IHU9bC5ydW5JZDtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eSh1KT9jW3VdOltdfSksZGkoKGwsYyk9PmwubGVuZ3RoPT09Yy5sZW5ndGgmJjA9PT1sLmxlbmd0aHx8bD09PWMpLFFzKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QoTVYsdGhpcy5jYXJkSWQpLnBpcGUoQihsPT5sP2wuaW5kZXg6bnVsbCkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD10aGlzLnN0b3JlLnNlbGVjdChNVix0aGlzLmNhcmRJZCkucGlwZShCKGw9PiEhbCYmbC5pc0Nsb3Nlc3QpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihsPT5sLnJ1bklkKSksdGhpcy5zYW1wbGUkPWkucGlwZShCKGw9Pmwuc2FtcGxlKSksdGhpcy5udW1TYW1wbGUkPWkucGlwZShCKGw9PmwubnVtU2FtcGxlKSksdGhpcy5zdGVwcyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc1osdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KFVwKS5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/Y18obCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcih1PT51Pj1sLnN0YXJ0U3RlcCYmdTw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPXBuKFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoQigoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoQihsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpLHcoeXUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksUCgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFcoMywyMixpLnRhZyQpKSgicnVuSWQiLFcoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFcoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixXKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixXKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixXKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixXKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixXKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVygxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFcoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVcoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFcoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFcoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W1FuZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHJyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KHJyfHwocnI9e30pKSxycikpKCksU3I9KCgpPT4oZnVuY3Rpb24obil7bltuLkxJTkVBUj0wXT0iTElORUFSIixuW24uTE9HMTA9MV09IkxPRzEwIixuW24uVElNRT0yXT0iVElNRSJ9KFNyfHwoU3I9e30pKSxTcikpKCksa3I9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJOT05FIixuLkRSQUdfWk9PTUlORz0iRFJBR19aT09NSU5HIixuLlNDUk9MTF9aT09NSU5HPSJTQ1JPTExfWk9PTUlORyIsbi5QQU5OSU5HPSJQQU5OSU5HIn0oa3J8fChrcj17fSkpLGtyKSkoKTtmdW5jdGlvbiBzTmUobix0KXsxJm4mJihnKDAsInNwYW4iKSxEKDEsInNjYWxhciIpLHYoKSl9ZnVuY3Rpb24gYU5lKG4sdCl7MSZuJiYoZygwLCJzcGFuIiksRCgxLCJoaXN0b2dyYW0iKSx2KCkpfWZ1bmN0aW9uIGxOZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwidW5rbm93biIpLHYoKSl9ZnVuY3Rpb24gY05lKG4sdCl7aWYoMSZuJiYoS3QoMCwxMyksRSgxLHNOZSwyLDAsInNwYW4iLDE0KSxFKDIsYU5lLDIsMCwic3BhbiIsMTQpLEUoMyxsTmUsMiwwLCJzcGFuIiwxNSksWnQoKSksMiZuKXtsZXQgZT1NKDIpO2IoIm5nU3dpdGNoIixlLmNhcmRNZXRhZGF0YS5wbHVnaW4pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUykseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gdU5lKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBkTmUobix0KXtpZigxJm4mJihnKDAsIm9wdGlvbiIsMTYpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx4KDEpLHl0KGUubmFtZSl9fWZ1bmN0aW9uIHBOZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImgyIiksRSgyLGNOZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLGcoNCwic3BhbiIpLEQoNSwiRG93bmxvYWRceGEwIiksdigpLEUoNix1TmUsMSwwLCJuZy1jb250YWluZXIiLDMpLGcoNywic3BhbiIpLEQoOCwiXHhhMGRhdGEgZm9yXHhhMCIpLHYoKSxnKDksImNvZGUiLDQpLEQoMTApLHYoKSgpLGcoMTEsIm1hdC1kaWFsb2ctY29udGVudCIpKDEyLCJtYXQtZm9ybS1maWVsZCIsNSkoMTMsIm1hdC1sYWJlbCIpLEQoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksdigpLGcoMTUsInNlbGVjdCIsNiksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLGcoMTYsIm9wdGlvbiIsNyksRCgxNywiLSIpLHYoKSxFKDE4LGROZSwyLDIsIm9wdGlvbiIsOCksdigpKCksZygxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLEQoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksdigpLEQoMjIsIlx4YTAiKSxnKDIzLCJhIiwxMCksRCgyNCwiSlNPTiIpLHYoKSxnKDI1LCJhIiwxMCksRCgyNiwiQ1NWIiksdigpKCkoKSxnKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksRCgyOSwiQ2xvc2UiKSx2KCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoMyksaT1NKCk7eCg2KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlKSx4KDMpLGIoInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLHgoMSkseXQoaS5jYXJkTWV0YWRhdGEudGFnKSx4KDUpLGIoInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSx4KDEpLGIoInZhbHVlIiwiIikseCgyKSxiKCJuZ0Zvck9mIixpLnJ1bnMpLHgoNSksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24sZGwpLHgoMiksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSkoImhyZWYiLGkuZG93bmxvYWRVcmxDc3YsZGwpfX1mdW5jdGlvbiBoTmUobix0KXsxJm4mJkQoMCwiTG9hZGluZy4uLiIpfXZhciBKbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEcsdGhpcy5QbHVnaW5UeXBlPVdufWdldERvd25sb2FkTmFtZShlKXtsZXQgaT10aGlzLnJ1bnMuZmluZChyPT5yLmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKTtyZXR1cm4gaT9gJHtpLm5hbWV9LiR7ZX1gOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCIsImhyZWYiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIl0sWyJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIk5nU3dpdGNoRGVmYXVsdCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEUoMCxwTmUsMzAsMTIsIm5nLWNvbnRhaW5lciIsMCksRSgxLGhOZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDEsZW4pKSwyJmUpe2xldCByPXN0KDIpO2IoIm5nSWYiLGkuY2FyZE1ldGFkYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxObyxocixJcixIUCxBJCxQJCwkbixGQSxqQSxHQSxXQSxEdSx6XyxRX10sc3R5bGVzOlsiaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksJG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IFZyKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD1lLnNlbGVjdChTbCxyLmNhcmRJZCkucGlwZShIZShvPT5Cb29sZWFuKG8pKSksdGhpcy5kb3dubG9hZFVybENzdiQ9cG4oW2Uuc2VsZWN0KFNsLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShCKChbbyxzXSk9Pm8mJnM/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxzLCJjc3YiKTpudWxsKSxWbihudWxsKSksdGhpcy5kb3dubG9hZFVybEpzb24kPXBuKFtlLnNlbGVjdChTbCxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoQigoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywianNvbiIpOm51bGwpLFZuKG51bGwpKSx0aGlzLnJ1bnMkPXBuKFtlLnNlbGVjdChDWiksZS5zZWxlY3QoTHAsci5jYXJkSWQpXSkucGlwZShCKChbbyxzXSk9PnM/T2JqZWN0LmtleXMocykubWFwKGE9Pm8uZ2V0KGEpKS5maWx0ZXIoQm9vbGVhbik6W10pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyh5dSksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksUCgicnVuU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkUnVuSWQkLm5leHQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLHYoKSksMiZlJiZiKCJjYXJkTWV0YWRhdGEiLFcoMSw1LGkuY2FyZE1ldGFkYXRhJCkpKCJydW5zIixXKDIsNyxpLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFcoMyw5LGkuc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLFcoNCwxMSxpLmRvd25sb2FkVXJsQ3N2JCkpKCJkb3dubG9hZFVybEpzb24iLFcoNSwxMyxpLmRvd25sb2FkVXJsSnNvbiQpKX0sZGVwZW5kZW5jaWVzOltKbmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJsKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIHd3KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBSbChuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgRnU9d3coUmwpLnJpZ2h0LHNIPU1hdGguc3FydCg1MCksYUg9TWF0aC5zcXJ0KDEwKSxsSD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gTXcobix0LGUpe3ZhciBpLG8scyxhLHI9LTE7aWYoZT0rZSwobj0rbik9PSh0PSt0KSYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYobz1uLG49dCx0PW8pLDA9PT0oYT1idihuLHQsZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtbisxKSk7KytyPG87KXNbcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKG4tdCsxKSk7KytyPG87KXNbcl09KG4tcikvYTtyZXR1cm4gaSYmcy5yZXZlcnNlKCksc31mdW5jdGlvbiBidihuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PXNIPzEwOm8+PWFIPzU6bz49bEg/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj1zSD8xMDpvPj1hSD81Om8+PWxIPzI6MSl9ZnVuY3Rpb24gRGQobix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PXNIP3IqPTEwOm8+PWFIP3IqPTU6bz49bEgmJihyKj0yKSx0PG4/LXI6cn12YXIgalA9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIG9pZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNTmUobil7cmV0dXJuInRyYW5zbGF0ZSgiKyhuKy41KSsiLDApIn1mdW5jdGlvbiBTTmUobil7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKG4rLjUpKyIpIn1mdW5jdGlvbiBFTmUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybituKHQpfX1mdW5jdGlvbiBUTmUobil7dmFyIHQ9TWF0aC5tYXgoMCxuLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIG4ucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24oZSl7cmV0dXJuK24oZSkrdH19ZnVuY3Rpb24gRE5lKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGFpZShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD0xPT09bnx8ND09PW4/LTE6MSxjPTQ9PT1ufHwyPT09bj8ieCI6InkiLHU9MT09PW58fDM9PT1uP01OZTpTTmU7ZnVuY3Rpb24gZChwKXt2YXIgaD1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksZj1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOm9pZSksbT1NYXRoLm1heChvLDApK2EsQz10LnJhbmdlKCksXz0rQ1swXSsuNSx5PStDW0MubGVuZ3RoLTFdKy41LEk9KHQuYmFuZHdpZHRoP1ROZTpFTmUpKHQuY29weSgpKSxBPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxPPUEuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLGVlPUEuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCx0KS5vcmRlcigpLFg9ZWUuZXhpdCgpLHhlPWVlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksZmU9ZWUuc2VsZWN0KCJsaW5lIiksdmU9ZWUuc2VsZWN0KCJ0ZXh0Iik7Tz1PLm1lcmdlKE8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLGVlPWVlLm1lcmdlKHhlKSxmZT1mZS5tZXJnZSh4ZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLHZlPXZlLm1lcmdlKHhlLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCptKS5hdHRyKCJkeSIsMT09PW4/IjBlbSI6Mz09PW4/IjAuNzFlbSI6IjAuMzJlbSIpKSxwIT09QSYmKE89Ty50cmFuc2l0aW9uKHApLGVlPWVlLnRyYW5zaXRpb24ocCksZmU9ZmUudHJhbnNpdGlvbihwKSx2ZT12ZS50cmFuc2l0aW9uKHApLFg9WC50cmFuc2l0aW9uKHApLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVCl7cmV0dXJuIGlzRmluaXRlKFQ9SShUKSk/dShUKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSx4ZS5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFQpe3ZhciBuZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KG5lJiZpc0Zpbml0ZShuZT1uZShUKSk/bmU6SShUKSl9KSksWC5yZW1vdmUoKSxPLmF0dHIoImQiLDQ9PT1ufHwyPT1uP3M/Ik0iK2wqcysiLCIrXysiSDAuNVYiK3krIkgiK2wqczoiTTAuNSwiK18rIlYiK3k6cz8iTSIrXysiLCIrbCpzKyJWMC41SCIreSsiViIrbCpzOiJNIitfKyIsMC41SCIreSksZWUuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihUKXtyZXR1cm4gdShJKFQpKX0pLGZlLmF0dHIoYysiMiIsbCpvKSx2ZS5hdHRyKGMsbCptKS50ZXh0KGYpLEEuZmlsdGVyKEROZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PW4/InN0YXJ0Ijo0PT09bj8iZW5kIjoibWlkZGxlIiksQS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9SX0pfXJldHVybiBkLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXAsZCk6dH0sZC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPWpQLmNhbGwoYXJndW1lbnRzKSxkfSxkLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09cD9bXTpqUC5jYWxsKHApLGQpOmUuc2xpY2UoKX0sZC50aWNrVmFsdWVzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXA/bnVsbDpqUC5jYWxsKHApLGQpOmkmJmkuc2xpY2UoKX0sZC50aWNrRm9ybWF0PWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZCk6cn0sZC50aWNrU2l6ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPStwLGQpOm99LGQudGlja1NpemVJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rcCxkKTpvfSxkLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3AsZCk6c30sZC50aWNrUGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rcCxkKTphfSxkfXZhciBBTmU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gY2llKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IHFQKGUpfWZ1bmN0aW9uIHFQKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIElOZShuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfWZ1bmN0aW9uIFBOZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGxpZShuLHQsZSl7Zm9yKHZhciBpPTAscj1uLmxlbmd0aDtpPHI7KytpKWlmKG5baV0ubmFtZT09PXQpe25baV09QU5lLG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn1xUC5wcm90b3R5cGU9Y2llLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cVAsb246ZnVuY3Rpb24obix0KXt2YXIgcixlPXRoaXMuXyxpPUlOZShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZihudWxsPT10KWZvcihyIGluIGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288czspaWYoKHI9KG49aVtvXSkudHlwZSkmJihyPVBOZShlW3JdLG4ubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sdD10aGlzLl87Zm9yKHZhciBlIGluIHQpbltlXT10W2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBxUChuKX0sY2FsbDpmdW5jdGlvbihuLHQpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbyxlPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSllW2ldPWFyZ3VtZW50c1tpKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKGk9MCxyPShvPXRoaXMuX1tuXSkubGVuZ3RoO2k8cjsrK2kpb1tpXS52YWx1ZS5hcHBseSh0LGUpfSxhcHBseTpmdW5jdGlvbihuLHQsZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IodmFyIGk9dGhpcy5fW25dLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseSh0LGUpfX07dmFyIGZIPWNpZSxZUD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbUg9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOllQLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gQWQobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksbUguaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOm1IW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gUk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09WVAmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVlQP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBPTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gWFAobil7dmFyIHQ9QWQobik7cmV0dXJuKHQubG9jYWw/T05lOlJOZSkodCl9ZnVuY3Rpb24ga05lKCl7fWZ1bmN0aW9uIGJtKG4pe3JldHVybiBudWxsPT1uP2tOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIEZOZSgpe3JldHVybltdfWZ1bmN0aW9uIEV3KG4pe3JldHVybiBudWxsPT1uP0ZOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIFR3KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIFFQKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIER3KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWZ1bmN0aW9uIE5OZShuLHQsZSxpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPXQubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT10W3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6ZVtzXT1uZXcgRHcobixvW3NdKTtmb3IoO3M8bDsrK3MpKGE9dFtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIExOZShuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGgsYz17fSx1PXQubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkodSk7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYocFthXT1oPSIkIitzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksaCBpbiBjP3JbYV09bDpjW2hdPWwpO2ZvcihhPTA7YTxkOysrYSkobD1jW2g9IiQiK3MuY2FsbChuLG9bYV0sYSxvKV0pPyhpW2FdPWwsbC5fX2RhdGFfXz1vW2FdLGNbaF09bnVsbCk6ZVthXT1uZXcgRHcobixvW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbcFthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBCTmUobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gVk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBITmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBVTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiB6TmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX19ZnVuY3Rpb24gak5lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0dHJpYnV0ZShuLGUpfX1mdW5jdGlvbiBHTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gS1Aobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFdOZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBxTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBZTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4saSxlKX19ZnVuY3Rpb24gbGgobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxLUChuKS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBYTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uIFFOZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gS05lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9fWZ1bmN0aW9uIFBpZShuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZ0gobil7cmV0dXJuIG4uY2xhc3NMaXN0fHxuZXcgUmllKG4pfWZ1bmN0aW9uIFJpZShuKXt0aGlzLl9ub2RlPW4sdGhpcy5fbmFtZXM9UGllKG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gT2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24ga2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gWk5lKG4pe3JldHVybiBmdW5jdGlvbigpe09pZSh0aGlzLG4pfX1mdW5jdGlvbiBKTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7a2llKHRoaXMsbil9fWZ1bmN0aW9uICROZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9PaWU6a2llKSh0aGlzLG4pfX1mdW5jdGlvbiBlTGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHRMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIG5MZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX1mdW5jdGlvbiBpTGUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiByTGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gb0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ/PyIifX1mdW5jdGlvbiBzTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gYUxlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY0xlKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdUxlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBkTGUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufUR3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RHcsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX0sUmllLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRoaXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIHFpZT17fSxfSD1udWxsO2Z1bmN0aW9uIHBMZShuLHQsZSl7cmV0dXJuIG49WWllKG4sdCxlKSxmdW5jdGlvbihpKXt2YXIgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHxyIT09dGhpcyYmISg4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpKSYmbi5jYWxsKHRoaXMsaSl9fWZ1bmN0aW9uIFlpZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPV9IO19IPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e19IPXJ9fX1mdW5jdGlvbiBoTGUobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixpPXQuaW5kZXhPZigiLiIpO3JldHVybiBpPj0wJiYoZT10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHt0eXBlOnQsbmFtZTplfX0pfWZ1bmN0aW9uIGZMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBvLGU9MCxpPS0xLHI9dC5sZW5ndGg7ZTxyOysrZSlvPXRbZV0sbi50eXBlJiZvLnR5cGUhPT1uLnR5cGV8fG8ubmFtZSE9PW4ubmFtZT90WysraV09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gbUxlKG4sdCxlKXt2YXIgaT1xaWUuaGFzT3duUHJvcGVydHkobi50eXBlKT9wTGU6WWllO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgdT0wLGQ9YS5sZW5ndGg7dTxkOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFpZShuLHQsZSl7dmFyIGk9S1Aobikscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gZ0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFpZSh0aGlzLG4sdCl9fWZ1bmN0aW9uIF9MZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRaWUodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwocWllPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdkg9W251bGxdO2Z1bmN0aW9uIFFyKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFppZSgpe3JldHVybiBuZXcgUXIoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx2SCl9UXIucHJvdG90eXBlPVppZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFyLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Ym0obikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KShsPW9bdV0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbdV09Yyk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPUV3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBRcihpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVR3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGg9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihlZSl7aFsrK2NdPWVlfSksaDt2YXIgZT10P0xOZTpOTmUsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KG4pKTtmb3IodmFyIG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PWlbY10sZD1yW2NdLHA9ZC5sZW5ndGgsaD1uLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsaSksZj1oLmxlbmd0aCxtPWFbY109bmV3IEFycmF5KGYpLEM9c1tjXT1uZXcgQXJyYXkoZik7ZSh1LGQsbSxDLGxbY109bmV3IEFycmF5KHApLGgsdCk7Zm9yKHZhciBBLE8seT0wLEk9MDt5PGY7Kyt5KWlmKEE9bVt5XSl7Zm9yKHk+PUkmJihJPXkrMSk7IShPPUNbSV0pJiYrK0k8ZjspO0EuX25leHQ9T3x8bnVsbH19cmV0dXJuKHM9bmV3IFFyKHMsaSkpLl9lbnRlcj1hLHMuX2V4aXQ9bCxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgUXIodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoUVApLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRcih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFFQKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24oaSk6aS5hcHBlbmQobisiIiksbnVsbCE9dCYmKHI9dChyKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgUXIocyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9LTEsZT1uLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciBzLGk9blt0XSxyPWkubGVuZ3RoLTEsbz1pW3JdOy0tcj49MDspKHM9aVtyXSkmJihvJiY0XnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxvKSxvPXMpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQoZCxwKXtyZXR1cm4gZCYmcD9uKGQuX19kYXRhX18scC5fX2RhdGFfXyk6IWQtIXB9bnx8KG49Qk5lKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYyxzPWVbb10sYT1zLmxlbmd0aCxsPXJbb109bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KShjPXNbdV0pJiYobFt1XT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBRcihyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIHM9aVtyXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsaT10Lmxlbmd0aDtlPGk7KytlKWZvcih2YXIgYSxyPXRbZV0sbz0wLHM9ci5sZW5ndGg7bzxzOysrbykoYT1yW29dKSYmbi5jYWxsKGEsYS5fX2RhdGFfXyxvLHIpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9QWQobik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9lLmxvY2FsP0hOZTpWTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZS5sb2NhbD9HTmU6ak5lOmUubG9jYWw/ek5lOlVOZSkoZSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9XTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/WU5lOnFOZSkobix0LGU/PyIiKSk6bGgodGhpcy5ub2RlKCksbil9LHByb3BlcnR5OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/WE5lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P0tOZTpRTmUpKG4sdCkpOnRoaXMubm9kZSgpW25dfSxjbGFzc2VkOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UGllKG4rIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPWdIKHRoaXMubm9kZSgpKSxyPS0xLG89ZS5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKGVbcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyROZTp0P1pOZTpKTmUpKGUsdCkpfSx0ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2VMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/bkxlOnRMZSkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2lMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/b0xlOnJMZSkobikpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHNMZSl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChhTGUpfSxhcHBlbmQ6ZnVuY3Rpb24obil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKSxpPW51bGw9PXQ/bExlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Ym0odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGNMZSl9LGNsb25lOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNlbGVjdChuP2RMZTp1TGUpfSxkYXR1bTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbik6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKG4sdCxlKXt2YXIgcixzLGk9aExlKG4rIiIpLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT10P21MZTpmTGUsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChhKGlbcl0sdCxlKSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKWZvcih2YXIgdSxsPTAsYz1hLmxlbmd0aDtsPGM7KytsKWZvcihyPTAsdT1hW2xdO3I8bzsrK3IpaWYoKHM9aVtyXSkudHlwZT09PXUudHlwZSYmcy5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P19MZTpnTGUpKG4sdCkpfX07dmFyIElkPVppZTtmdW5jdGlvbiBaUChuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bmV3IFFyKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUXIoW1tuXV0sdkgpfWZ1bmN0aW9uIHhtKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiB4dihuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBjaCgpe312YXIgJFA9MS8uNyxDdj0iXFxzKihbKy1dP1xcZCspXFxzKiIsSXc9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTHU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHZMZT0vXiMoWzAtOWEtZl17Myw4fSkkLyx5TGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0N2LEN2LEN2XSsiXFwpJCIpLGJMZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTHUsTHUsTHVdKyJcXCkkIikseExlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQ3YsQ3YsQ3YsSXddKyJcXCkkIiksQ0xlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTHUsTHUsTHUsSXddKyJcXCkkIiksd0xlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tJdyxMdSxMdV0rIlxcKSQiKSxNTGU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tJdyxMdSxMdSxJd10rIlxcKSQiKSxKaWU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gJGllKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gZXJlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVGMobil7dmFyIHQsZTtyZXR1cm4gbj0obisiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dkxlLmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksNj09PWU/dHJlKHQpOjM9PT1lP25ldyBncyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKDE1JnQpPDw0fDE1JnQsMSk6OD09PWU/SlAodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwoMjU1JnQpLzI1NSk6ND09PWU/SlAodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgoMTUmdCk8PDR8MTUmdCkvMjU1KTpudWxsKToodD15TGUuZXhlYyhuKSk/bmV3IGdzKHRbMV0sdFsyXSx0WzNdLDEpOih0PWJMZS5leGVjKG4pKT9uZXcgZ3MoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFszXS8xMDAsMSk6KHQ9eExlLmV4ZWMobikpP0pQKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PUNMZS5leGVjKG4pKT9KUCgyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCx0WzRdKToodD13TGUuZXhlYyhuKSk/cnJlKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9TUxlLmV4ZWMobikpP3JyZSh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkppZS5oYXNPd25Qcm9wZXJ0eShuKT90cmUoSmllW25dKToidHJhbnNwYXJlbnQiPT09bj9uZXcgZ3MoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB0cmUobil7cmV0dXJuIG5ldyBncyhuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm4sMSl9ZnVuY3Rpb24gSlAobix0LGUsaSl7cmV0dXJuIGk8PTAmJihuPXQ9ZT1OYU4pLG5ldyBncyhuLHQsZSxpKX1mdW5jdGlvbiB4SChuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNofHwobj1UYyhuKSksbj9uZXcgZ3MoKG49bi5yZ2IoKSkucixuLmcsbi5iLG4ub3BhY2l0eSk6bmV3IGdzfWZ1bmN0aW9uIHd2KG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94SChuKTpuZXcgZ3Mobix0LGUsaT8/MSl9ZnVuY3Rpb24gZ3Mobix0LGUsaSl7dGhpcy5yPStuLHRoaXMuZz0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIG5yZSgpe3JldHVybiIjIit5SCh0aGlzLnIpK3lIKHRoaXMuZykreUgodGhpcy5iKX1mdW5jdGlvbiBpcmUoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT1uPyIpIjoiLCAiK24rIikiKX1mdW5jdGlvbiB5SChuKXtyZXR1cm4oKG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpKTwxNj8iMCI6IiIpK24udG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHJyZShuLHQsZSxpKXtyZXR1cm4gaTw9MD9uPXQ9ZT1OYU46ZTw9MHx8ZT49MT9uPXQ9TmFOOnQ8PTAmJihuPU5hTiksbmV3IE51KG4sdCxlLGkpfWZ1bmN0aW9uIG9yZShuKXtpZihuIGluc3RhbmNlb2YgTnUpcmV0dXJuIG5ldyBOdShuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBjaHx8KG49VGMobikpLCFuKXJldHVybiBuZXcgTnU7aWYobiBpbnN0YW5jZW9mIE51KXJldHVybiBuO3ZhciB0PShuPW4ucmdiKCkpLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSksbz1NYXRoLm1heCh0LGUsaSkscz1OYU4sYT1vLXIsbD0obytyKS8yO3JldHVybiBhPyhzPXQ9PT1vPyhlLWkpL2ErNiooZTxpKTplPT09bz8oaS10KS9hKzI6KHQtZSkvYSs0LGEvPWw8LjU/bytyOjItby1yLHMqPTYwKTphPWw+MCYmbDwxPzA6cyxuZXcgTnUocyxhLGwsbi5vcGFjaXR5KX1mdW5jdGlvbiBDbShuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/b3JlKG4pOm5ldyBOdShuLHQsZSxpPz8xKX1mdW5jdGlvbiBOdShuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5zPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gYkgobix0LGUpe3JldHVybiAyNTUqKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpfXhtKGNoLFRjLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiRpZSxmb3JtYXRIZXg6JGllLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBvcmUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjplcmUsdG9TdHJpbmc6ZXJlfSkseG0oZ3Msd3YseHYoY2gse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/JFA6TWF0aC5wb3coJFAsbiksbmV3IGdzKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBncyh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Om5yZSxmb3JtYXRIZXg6bnJlLGZvcm1hdFJnYjppcmUsdG9TdHJpbmc6aXJlfSkpLHhtKE51LENtLHh2KGNoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPyRQOk1hdGgucG93KCRQLG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IGdzKGJIKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLGJIKG4scixpKSxiSChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09bj8iKSI6IiwgIituKyIpIil9fSkpO3ZhciBzcmU9TWF0aC5QSS8xODAsYXJlPTE4MC9NYXRoLlBJLGRyZT00LzI5LE12PTYvMjkscHJlPTMqTXYqTXY7ZnVuY3Rpb24gaHJlKG4pe2lmKG4gaW5zdGFuY2VvZiBCdSlyZXR1cm4gbmV3IEJ1KG4ubCxuLmEsbi5iLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIFBkKXJldHVybiBmcmUobik7biBpbnN0YW5jZW9mIGdzfHwobj14SChuKSk7dmFyIG8scyx0PVNIKG4uciksZT1TSChuLmcpLGk9U0gobi5iKSxyPUNIKCguMjIyNTA0NSp0Ky43MTY4Nzg2KmUrLjA2MDYxNjkqaSkvMSk7cmV0dXJuIHQ9PT1lJiZlPT09aT9vPXM9cjoobz1DSCgoLjQzNjA3NDcqdCsuMzg1MDY0OSplKy4xNDMwODA0KmkpLy45NjQyMikscz1DSCgoLjAxMzkzMjIqdCsuMDk3MTA0NSplKy43MTQxNzMzKmkpLy44MjUyMSkpLG5ldyBCdSgxMTYqci0xNiw1MDAqKG8tciksMjAwKihyLXMpLG4ub3BhY2l0eSl9ZnVuY3Rpb24gQnUobix0LGUsaSl7dGhpcy5sPStuLHRoaXMuYT0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIENIKG4pe3JldHVybiBuPi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3cobiwxLzMpOm4vcHJlK2RyZX1mdW5jdGlvbiB3SChuKXtyZXR1cm4gbj5Ndj9uKm4qbjpwcmUqKG4tZHJlKX1mdW5jdGlvbiBNSChuKXtyZXR1cm4gMjU1KihuPD0uMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFNIKG4pe3JldHVybihuLz0yNTUpPD0uMDQwNDU/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFRMZShuKXtpZihuIGluc3RhbmNlb2YgUGQpcmV0dXJuIG5ldyBQZChuLmgsbi5jLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBCdXx8KG49aHJlKG4pKSwwPT09bi5hJiYwPT09bi5iKXJldHVybiBuZXcgUGQoTmFOLDA8bi5sJiZuLmw8MTAwPzA6TmFOLG4ubCxuLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIobi5iLG4uYSkqYXJlO3JldHVybiBuZXcgUGQodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KG4uYSpuLmErbi5iKm4uYiksbi5sLG4ub3BhY2l0eSl9ZnVuY3Rpb24gd20obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1RMZShuKTpuZXcgUGQobix0LGUsaT8/MSl9ZnVuY3Rpb24gUGQobix0LGUsaSl7dGhpcy5oPStuLHRoaXMuYz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGZyZShuKXtpZihpc05hTihuLmgpKXJldHVybiBuZXcgQnUobi5sLDAsMCxuLm9wYWNpdHkpO3ZhciB0PW4uaCpzcmU7cmV0dXJuIG5ldyBCdShuLmwsTWF0aC5jb3ModCkqbi5jLE1hdGguc2luKHQpKm4uYyxuLm9wYWNpdHkpfWZ1bmN0aW9uIFRIKG4sdCxlLGkscil7dmFyIG89bipuLHM9bypuO3JldHVybigoMS0zKm4rMypvLXMpKnQrKDQtNipvKzMqcykqZSsoMSszKm4rMypvLTMqcykqaStzKnIpLzZ9ZnVuY3Rpb24gU3Yobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIF9yZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbitlKnR9fWZ1bmN0aW9uIHRSKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP19yZShuLGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6U3YoaXNOYU4obik/dDpuKX1mdW5jdGlvbiBmYShuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9fcmUobixlKTpTdihpc05hTihuKT90Om4pfXhtKEJ1LGZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ocmUobik6bmV3IEJ1KG4sdCxlLGk/PzEpfSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBCdSh0aGlzLmwrMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgQnUodGhpcy5sLTE4KihuPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPSh0aGlzLmwrMTYpLzExNix0PWlzTmFOKHRoaXMuYSk/bjpuK3RoaXMuYS81MDAsZT1pc05hTih0aGlzLmIpP246bi10aGlzLmIvMjAwO3JldHVybiBuZXcgZ3MoTUgoMy4xMzM4NTYxKih0PS45NjQyMip3SCh0KSktMS42MTY4NjY3KihuPTEqd0gobikpLS40OTA2MTQ2KihlPS44MjUyMSp3SChlKSkpLE1IKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSpuKy4wMzM0NTQqZSksTUgoLjA3MTk0NTMqdC0uMjI4OTkxNCpuKzEuNDA1MjQyNyplKSx0aGlzLm9wYWNpdHkpfX0pKSx4bShQZCx3bSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQZCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobj8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUGQodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG4/PzEpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBmcmUodGhpcykucmdiKCl9fSkpO3ZhciBNbT1mdW5jdGlvbiBuKHQpe3ZhciBlPWZ1bmN0aW9uKG4pe3JldHVybiAxPT0obj0rbik/ZmE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10P2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbj1NYXRoLnBvdyhuLGUpLHQ9TWF0aC5wb3codCxlKS1uLGU9MS9lLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyhuK2kqdCxlKX19KHQsZSxuKTpTdihpc05hTih0KT9lOnQpfX0odCk7ZnVuY3Rpb24gaShyLG8pe3ZhciBzPWUoKHI9d3YocikpLnIsKG89d3YobykpLnIpLGE9ZShyLmcsby5nKSxsPWUoci5iLG8uYiksYz1mYShyLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHIucj1zKHUpLHIuZz1hKHUpLHIuYj1sKHUpLHIub3BhY2l0eT1jKHUpLHIrIiJ9fXJldHVybiBpLmdhbW1hPW4saX0oMSk7ZnVuY3Rpb24geXJlKG4pe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcyxhLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSk7Zm9yKHM9MDtzPGU7KytzKWE9d3YodFtzXSksaVtzXT1hLnJ8fDAscltzXT1hLmd8fDAsb1tzXT1hLmJ8fDA7cmV0dXJuIGk9bihpKSxyPW4ociksbz1uKG8pLGEub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBhLnI9aShsKSxhLmc9cihsKSxhLmI9byhsKSxhKyIifX19ZnVuY3Rpb24gYnJlKG4sdCl7dHx8KHQ9W10pO3ZhciByLGU9bj9NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCk6MCxpPXQuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1vKSt0W3JdKm87cmV0dXJuIGl9fWZ1bmN0aW9uIENyZShuLHQpe3ZhciBzLGU9dD90Lmxlbmd0aDowLGk9bj9NYXRoLm1pbihlLG4ubGVuZ3RoKTowLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGUpO2ZvcihzPTA7czxpOysrcylyW3NdPVNtKG5bc10sdFtzXSk7Zm9yKDtzPGU7KytzKW9bc109dFtzXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHM9MDtzPGk7KytzKW9bc109cltzXShhKTtyZXR1cm4gb319ZnVuY3Rpb24gd3JlKG4sdCl7dmFyIGU9bmV3IERhdGU7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gZS5zZXRUaW1lKG4qKDEtaSkrdCppKSxlfX1mdW5jdGlvbiBucyhuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIG4qKDEtZSkrdCplfX1mdW5jdGlvbiBNcmUobix0KXt2YXIgcixlPXt9LGk9e307Zm9yKHIgaW4obnVsbD09PW58fCJvYmplY3QiIT10eXBlb2YgbikmJihuPXt9KSwobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJih0PXt9KSx0KXIgaW4gbj9lW3JdPVNtKG5bcl0sdFtyXSk6aVtyXT10W3JdO3JldHVybiBmdW5jdGlvbihvKXtmb3IociBpbiBlKWlbcl09ZVtyXShvKTtyZXR1cm4gaX19eXJlKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0sbz1uW2krMV07cmV0dXJuIFRIKChlLWkvdCkqdCxpPjA/bltpLTFdOjIqci1vLHIsbyxpPHQtMT9uW2krMl06MipvLXIpfX0pLHlyZShmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBUSCgoZS1pL3QpKnQsblsoaSt0LTEpJXRdLG5baSV0XSxuWyhpKzEpJXRdLG5bKGkrMikldF0pfX0pO3ZhciBBSD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csREg9bmV3IFJlZ0V4cChBSC5zb3VyY2UsImciKTtmdW5jdGlvbiBQdyhuLHQpe3ZhciBpLHIsbyxlPUFILmxhc3RJbmRleD1ESC5sYXN0SW5kZXg9MCxzPS0xLGE9W10sbD1bXTtmb3Iobis9IiIsdCs9IiI7KGk9QUguZXhlYyhuKSkmJihyPURILmV4ZWModCkpOykobz1yLmluZGV4KT5lJiYobz10LnNsaWNlKGUsbyksYVtzXT9hW3NdKz1vOmFbKytzXT1vKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbc10/YVtzXSs9cjphWysrc109cjooYVsrK3NdPW51bGwsbC5wdXNoKHtpOnMseDpucyhpLHIpfSkpLGU9REgubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYobz10LnNsaWNlKGUpLGFbc10/YVtzXSs9bzphWysrc109byksYS5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIGQsdT0wO3U8dDsrK3UpYVsoZD1sW3VdKS5pXT1kLngoYyk7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlvbiBTbShuLHQpe3ZhciBpLGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWU/U3YodCk6KCJudW1iZXIiPT09ZT9uczoic3RyaW5nIj09PWU/KGk9VGModCkpPyh0PWksTW0pOlB3OnQgaW5zdGFuY2VvZiBUYz9NbTp0IGluc3RhbmNlb2YgRGF0ZT93cmU6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT9icmU6QXJyYXkuaXNBcnJheSh0KT9DcmU6ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmd8fGlzTmFOKHQpP01yZTpucykobix0KX1mdW5jdGlvbiBJSChuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgUncsUkgsRXJlLGlSLFNyZT0xODAvTWF0aC5QSSxuUj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBQSChuLHQsZSxpLHIsbyl7dmFyIHMsYSxsO3JldHVybihzPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1zLHQvPXMpLChsPW4qZSt0KmkpJiYoZS09bipsLGktPXQqbCksKGE9TWF0aC5zcXJ0KGUqZStpKmkpKSYmKGUvPWEsaS89YSxsLz1hKSxuKmk8dCplJiYobj0tbix0PS10LGw9LWwscz0tcykse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxuKSpTcmUsc2tld1g6TWF0aC5hdGFuKGwpKlNyZSxzY2FsZVg6cyxzY2FsZVk6YX19ZnVuY3Rpb24gQXJlKG4sdCxlLGkpe2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBkPVtdLHA9W107cmV0dXJuIGM9bihjKSx1PW4odSksZnVuY3Rpb24oYyx1LGQscCxoLGYpe2lmKGMhPT1kfHx1IT09cCl7dmFyIG09aC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTtmLnB1c2goe2k6bS00LHg6bnMoYyxkKX0se2k6bS0yLHg6bnModSxwKX0pfWVsc2UoZHx8cCkmJmgucHVzaCgidHJhbnNsYXRlKCIrZCt0K3ArZSl9KGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxkLHApLGZ1bmN0aW9uKGMsdSxkLHApe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKHIoZCkrInJvdGF0ZSgiLG51bGwsaSktMix4Om5zKGMsdSl9KSk6dSYmZC5wdXNoKHIoZCkrInJvdGF0ZSgiK3UraSl9KGMucm90YXRlLHUucm90YXRlLGQscCksZnVuY3Rpb24oYyx1LGQscCl7YyE9PXU/cC5wdXNoKHtpOmQucHVzaChyKGQpKyJza2V3WCgiLG51bGwsaSktMix4Om5zKGMsdSl9KTp1JiZkLnB1c2gocihkKSsic2tld1goIit1K2kpfShjLnNrZXdYLHUuc2tld1gsZCxwKSxmdW5jdGlvbihjLHUsZCxwLGgsZil7aWYoYyE9PWR8fHUhPT1wKXt2YXIgbT1oLnB1c2gocihoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zi5wdXNoKHtpOm0tNCx4Om5zKGMsZCl9LHtpOm0tMix4Om5zKHUscCl9KX1lbHNlKDEhPT1kfHwxIT09cCkmJmgucHVzaChyKGgpKyJzY2FsZSgiK2QrIiwiK3ArIikiKX0oYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksZCxwKSxjPXU9bnVsbCxmdW5jdGlvbihoKXtmb3IodmFyIEMsZj0tMSxtPXAubGVuZ3RoOysrZjxtOylkWyhDPXBbZl0pLmldPUMueChoKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBPSD1BcmUoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9uUjooUnd8fChSdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxSSD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRXJlPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxSdy5zdHlsZS50cmFuc2Zvcm09bixuPUVyZS5nZXRDb21wdXRlZFN0eWxlKFJILmFwcGVuZENoaWxkKFJ3KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxSSC5yZW1vdmVDaGlsZChSdyksUEgoKyhuPW4uc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksa0g9QXJlKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP25SOihpUnx8KGlSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGlSLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1pUi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9QSCgobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTpuUil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gSXJlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9Q20odCkpLmgsKGU9Q20oZSkpLmgpLHI9ZmEodC5zLGUucyksbz1mYSh0LmwsZS5sKSxzPWZhKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gdC5oPWkoYSksdC5zPXIoYSksdC5sPW8oYSksdC5vcGFjaXR5PXMoYSksdCsiIn19fXZhciBGSD1JcmUodFIpO2Z1bmN0aW9uIFByZShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PXdtKHQpKS5oLChlPXdtKGUpKS5oKSxyPWZhKHQuYyxlLmMpLG89ZmEodC5sLGUubCkscz1mYSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX1JcmUoZmEpO3ZhciByUixGdyxOSD1QcmUodFIpLEV2PShQcmUoZmEpLDApLGt3PTAsT3c9MCxvUj0wLEVtPTAsc1I9MCxOdz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxrcmU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24gVHYoKXtyZXR1cm4gRW18fChrcmUoRkxlKSxFbT1Ody5ub3coKStzUil9ZnVuY3Rpb24gRkxlKCl7RW09MH1mdW5jdGlvbiBMdygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gYVIobix0LGUpe3ZhciBpPW5ldyBMdztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIFJyZSgpe0VtPShvUj1Ody5ub3coKSkrc1IsRXY9a3c9MDt0cnl7IWZ1bmN0aW9uKCl7VHYoKSwrK0V2O2Zvcih2YXIgdCxuPXJSO247KSh0PUVtLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1Fdn0oKX1maW5hbGx5e0V2PTAsZnVuY3Rpb24oKXtmb3IodmFyIG4sZSx0PXJSLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpyUj1lKTtGdz1uLExIKGkpfSgpLEVtPTB9fWZ1bmN0aW9uIE5MZSgpe3ZhciBuPU53Lm5vdygpLHQ9bi1vUjt0PjFlMyYmKHNSLT10LG9SPW4pfWZ1bmN0aW9uIExIKG4pe0V2fHwoa3cmJihrdz1jbGVhclRpbWVvdXQoa3cpKSxuLUVtPjI0PyhuPDEvMCYmKGt3PXNldFRpbWVvdXQoUnJlLG4tTncubm93KCktc1IpKSxPdyYmKE93PWNsZWFySW50ZXJ2YWwoT3cpKSk6KE93fHwob1I9Tncubm93KCksT3c9c2V0SW50ZXJ2YWwoTkxlLDFlMykpLEV2PTEsa3JlKFJyZSkpKX1mdW5jdGlvbiBsUihuLHQsZSl7dmFyIGk9bmV3IEx3O3JldHVybiBpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0PW51bGw9PXQ/MDordCxlKSxpfUx3LnByb3RvdHlwZT1hUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkx3LHJlc3RhcnQ6ZnVuY3Rpb24obix0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT9UdigpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmRnchPT10aGlzJiYoRnc/RncuX25leHQ9dGhpczpyUj10aGlzLEZ3PXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsTEgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsTEgoKSl9fTt2YXIgQkxlPWZIKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFZMZT1bXTtmdW5jdGlvbiB1aChuLHQsZSxpLHIsbyl7dmFyIHM9bi5fX3RyYW5zaXRpb247aWYocyl7aWYoZSBpbiBzKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbihuLHQsZSl7dmFyIHIsaT1uLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBzKGMpe3ZhciB1LGQscCxoO2lmKDEhPT1lLnN0YXRlKXJldHVybiBsKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09ZS5uYW1lKXtpZigzPT09aC5zdGF0ZSlyZXR1cm4gbFIocyk7ND09PWguc3RhdGU/KGguc3RhdGU9NixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PHQmJihoLnN0YXRlPTYsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihsUihmdW5jdGlvbigpezM9PT1lLnN0YXRlJiYoZS5zdGF0ZT00LGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxhKGMpKX0pLGUuc3RhdGU9MixlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSwyPT09ZS5zdGF0ZSl7Zm9yKGUuc3RhdGU9MyxyPW5ldyBBcnJheShwPWUudHdlZW4ubGVuZ3RoKSx1PTAsZD0tMTt1PHA7Kyt1KShoPWUudHdlZW5bdV0udmFsdWUuY2FsbChuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrZF09aCk7ci5sZW5ndGg9ZCsxfX1mdW5jdGlvbiBhKGMpe2Zvcih2YXIgdT1jPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxjL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobCksZS5zdGF0ZT01LDEpLGQ9LTEscD1yLmxlbmd0aDsrK2Q8cDspcltkXS5jYWxsKG4sdSk7NT09PWUuc3RhdGUmJihlLm9uLmNhbGwoImVuZCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBjIGluIGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVt0XSxpKXJldHVybjtkZWxldGUgbi5fX3RyYW5zaXRpb259aVt0XT1lLGUudGltZXI9YVIoZnVuY3Rpb24oYyl7ZS5zdGF0ZT0xLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOkJMZSx0d2VlbjpWTGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIFZ3KG4sdCl7dmFyIGU9RG8obix0KTtpZihlLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBIcyhuLHQpe3ZhciBlPURvKG4sdCk7aWYoZS5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIERvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gVUxlKG4sdCl7dmFyIGUsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLG4pLG89ci50d2VlbjtpZihvIT09ZSlmb3IodmFyIHM9MCxhPShpPWU9bykubGVuZ3RoO3M8YTsrK3MpaWYoaVtzXS5uYW1lPT09dCl7KGk9aS5zbGljZSgpKS5zcGxpY2UocywxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIHpMZShuLHQsZSl7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SHModGhpcyxuKSxzPW8udHdlZW47aWYocyE9PWkpe3I9KGk9cykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfW8udHdlZW49cn19ZnVuY3Rpb24gRHYobix0LGUpe3ZhciBpPW4uX2lkO3JldHVybiBuLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLGkpOyhyLnZhbHVlfHwoci52YWx1ZT17fSkpW3RdPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24ocil7cmV0dXJuIERvKHIsaSkudmFsdWVbdF19fWZ1bmN0aW9uIHBSKG4sdCl7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgdD9uczp0IGluc3RhbmNlb2YgVGM/TW06KGU9VGModCkpPyh0PWUsTW0pOlB3KShuLHQpfWZ1bmN0aW9uIGpMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gR0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gV0xlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZShuKTtyZXR1cm4gcz09PXI/bnVsbDpzPT09aT9vOm89dChpPXMsZSl9fWZ1bmN0aW9uIHFMZShuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gWUxlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToocz10aGlzLmdldEF0dHJpYnV0ZShuKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFhMZShuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGwsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOihzPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFFMZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gS0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gWkxlKG4sdCl7dmFyIGUsaTtmdW5jdGlvbiByKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1pJiYoZT0oaT1vKSYmS0xlKG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBKTGUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiZRTGUobixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uICRMZShuLHQpe3JldHVybiBmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBlM2Uobix0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9dH19ZnVuY3Rpb24gdDNlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4zZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBpM2Uobix0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5lYXNlPXR9fWZ1bmN0aW9uIG8zZShuLHQsZSl7dmFyIGkscixvPWZ1bmN0aW9uKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KHQpP1Z3OkhzO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPW8odGhpcyxuKSxhPXMub247YSE9PWkmJihyPShpPWEpLmNvcHkoKSkub24odCxlKSxzLm9uPXJ9fXZhciBhM2U9SWQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEpyZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBwM2Uobix0LGUpe3JldHVybiBmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdC5jYWxsKHRoaXMsaSksZSl9fWZ1bmN0aW9uIGgzZShuLHQsZSl7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMhPT1yJiYoaT0ocj1zKSYmcDNlKG4scyxlKSksaX1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIGczZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1uLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gXzNlKG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJmczZShyKSksdH1yZXR1cm4gaS5fdmFsdWU9bixpfXZhciB2M2U9MDtmdW5jdGlvbiBfcyhuLHQsZSxpKXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1lLHRoaXMuX2lkPWl9ZnVuY3Rpb24gaFIoKXtyZXR1cm4rK3YzZX12YXIgQXY9SWQucHJvdG90eXBlO19zLnByb3RvdHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gSWQoKS50cmFuc2l0aW9uKG4pfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9zLHNlbGVjdDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWJtKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkocikscz0wO3M8cjsrK3MpZm9yKHZhciB1LGQsYT1pW3NdLGw9YS5sZW5ndGgsYz1vW3NdPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCkodT1hW3BdKSYmKGQ9bi5jYWxsKHUsdS5fX2RhdGFfXyxwLGEpKSYmKCJfX2RhdGFfXyJpbiB1JiYoZC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW3BdPWQsdWgoY1twXSx0LGUscCxjLERvKHUsZSkpKTtyZXR1cm4gbmV3IF9zKG8sdGhpcy5fcGFyZW50cyx0LGUpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1FdyhuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10scz1bXSxhPTA7YTxyOysrYSlmb3IodmFyIHUsbD1pW2FdLGM9bC5sZW5ndGgsZD0wO2Q8YzsrK2QpaWYodT1sW2RdKXtmb3IodmFyIGgscD1uLmNhbGwodSx1Ll9fZGF0YV9fLGQsbCksZj1Ebyh1LGUpLG09MCxDPXAubGVuZ3RoO208QzsrK20pKGg9cFttXSkmJnVoKGgsdCxlLG0scCxmKTtvLnB1c2gocCkscy5wdXNoKHUpfXJldHVybiBuZXcgX3MobyxzLHQsZSl9LGZpbHRlcjpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49VHcobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsbz10W3JdLHM9by5sZW5ndGgsYT1pW3JdPVtdLGM9MDtjPHM7KytjKShsPW9bY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJmEucHVzaChsKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24obil7aWYobi5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgX3Mocyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEzZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fbmFtZSx0PXRoaXMuX2lkLGU9aFIoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYylpZihsPXNbY10pe3ZhciB1PURvKGwsdCk7dWgobCxuLGUsYyxzLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBfcyhpLHRoaXMuX3BhcmVudHMsbixlKX0sY2FsbDpBdi5jYWxsLG5vZGVzOkF2Lm5vZGVzLG5vZGU6QXYubm9kZSxzaXplOkF2LnNpemUsZW1wdHk6QXYuZW1wdHksZWFjaDpBdi5lYWNoLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9Ebyh0aGlzLm5vZGUoKSxlKS5vbi5vbihuKTp0aGlzLmVhY2gobzNlKGUsbix0KSl9LGF0dHI6ZnVuY3Rpb24obix0KXt2YXIgZT1BZChuKSxpPSJ0cmFuc2Zvcm0iPT09ZT9rSDpwUjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4obiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZS5sb2NhbD9YTGU6WUxlKShlLGksRHYodGhpcywiYXR0ci4iK24sdCkpOm51bGw9PXQ/KGUubG9jYWw/R0xlOmpMZSkoZSk6KGUubG9jYWw/cUxlOldMZSkoZSxpLHQpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImF0dHIuIituO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjt2YXIgaT1BZChuKTtyZXR1cm4gdGhpcy50d2VlbihlLChpLmxvY2FsP1pMZTpKTGUpKGksdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InRyYW5zZm9ybSI9PShuKz0iIik/T0g6cFI7cmV0dXJuIG51bGw9PXQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bGgodGhpcyxuKSxzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGxoKHRoaXMsbikpO3JldHVybiBvPT09cz9udWxsOm89PT1lJiZzPT09aT9yOnI9dChlPW8saT1zKX19KG4saSkpLm9uKCJlbmQuc3R5bGUuIituLEpyZShuKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pLGE9ZSh0aGlzKSxsPWErIiI7cmV0dXJuIG51bGw9PWEmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGw9YT1saCh0aGlzLG4pKSxzPT09bD9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fShuLGksRHYodGhpcywic3R5bGUuIituLHQpKSkuZWFjaChmdW5jdGlvbihuLHQpe3ZhciBlLGkscixhLG89InN0eWxlLiIrdCxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUhzKHRoaXMsbiksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVtvXT9hfHwoYT1KcmUodCkpOnZvaWQgMDsoYyE9PWV8fHIhPT11KSYmKGk9KGU9YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0odGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InN0eWxlLiIrKG4rPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxoM2Uobix0LGU/PyIiKSl9LHRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19KER2KHRoaXMsInRleHQiLG4pKTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fShudWxsPT1uPyIiOm4rIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKG4pe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxfM2UobikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuX2lkO2lmKG4rPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBzLGk9RG8odGhpcy5ub2RlKCksZSkudHdlZW4scj0wLG89aS5sZW5ndGg7cjxvOysrcilpZigocz1pW3JdKS5uYW1lPT09bilyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P1VMZTp6TGUpKGUsbix0KSl9LGRlbGF5OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/JExlOmUzZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/dDNlOm4zZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGkzZSh0LG4pKTpEbyh0aGlzLm5vZGUoKSx0KS5lYXNlfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgbix0LGU9dGhpcyxpPWUuX2lkLHI9ZS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scyl7dmFyIGE9e3ZhbHVlOnN9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1yJiZvKCl9fTtlLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1Icyh0aGlzLGkpLHU9Yy5vbjt1IT09biYmKCh0PShuPXUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChhKSx0Ll8uaW50ZXJydXB0LnB1c2goYSksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfX07dmFyIEhIPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbihuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn19O2Z1bmN0aW9uIHkzZShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBISC50aW1lPVR2KCksSEg7cmV0dXJuIGV9ZnVuY3Rpb24gVUgobil7cmV0dXJue3R5cGU6bn19SWQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG4sdCl7dmFyIGkscixzLGU9bi5fX3RyYW5zaXRpb24sbz0hMDtpZihlKXtmb3IocyBpbiB0PW51bGw9PXQ/bnVsbDp0KyIiLGUpKGk9ZVtzXSkubmFtZT09PXQ/KHI9aS5zdGF0ZT4yJiZpLnN0YXRlPDUsaS5zdGF0ZT02LGkudGltZXIuc3RvcCgpLGkub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLG4sbi5fX2RhdGFfXyxpLmluZGV4LGkuZ3JvdXApLGRlbGV0ZSBlW3NdKTpvPSExO28mJmRlbGV0ZSBuLl9fdHJhbnNpdGlvbn19KHRoaXMsbil9KX0sSWQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24obil7dmFyIHQsZTtuIGluc3RhbmNlb2YgX3M/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1oUigpLChlPUhIKS50aW1lPVR2KCksbj1udWxsPT1uP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmdWgobCxuLHQsYyxzLGV8fHkzZShsLHQpKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyxuLHQpfSxbInciLCJlIl0ubWFwKFVIKSxbIm4iLCJzIl0ubWFwKFVIKSxbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChVSCksTWF0aDt2YXIgWGE9IiQiO2Z1bmN0aW9uIG1SKCl7fWZ1bmN0aW9uIGxvZShuLHQpe3ZhciBlPW5ldyBtUjtpZihuIGluc3RhbmNlb2YgbVIpbi5lYWNoKGZ1bmN0aW9uKGEsbCl7ZS5zZXQobCxhKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIG8saT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5zZXQoaSxuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuc2V0KHQobz1uW2ldLGksbiksbyl9ZWxzZSBpZihuKWZvcih2YXIgcyBpbiBuKWUuc2V0KHMsbltzXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZ1IoKXt9bVIucHJvdG90eXBlPWxvZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1SLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gWGErbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbWGErbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW1hhK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PVhhK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PVhhJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1YYSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07dmFyIERtPWxvZS5wcm90b3R5cGU7ZnVuY3Rpb24gQW0obix0KXtpZigoZT0obj10P24udG9FeHBvbmVudGlhbCh0LTEpOm4udG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGUsaT1uLnNsaWNlKDAsZSk7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK24uc2xpY2UoZSsxKV19ZnVuY3Rpb24gVnUobil7cmV0dXJuKG49QW0oTWF0aC5hYnMobikpKT9uWzFdOk5hTn1nUi5wcm90b3R5cGU9ZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgZ1I7aWYobiBpbnN0YW5jZW9mIGdSKW4uZWFjaChmdW5jdGlvbihvKXtlLmFkZChvKX0pO2Vsc2UgaWYobil7dmFyIGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuYWRkKG5baV0pO2Vsc2UgZm9yKDsrK2k8cjspZS5hZGQodChuW2ldLGksbikpfXJldHVybiBlfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdSLGhhczpEbS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW1hhKyhuKz0iIildPW4sdGhpc30scmVtb3ZlOkRtLnJlbW92ZSxjbGVhcjpEbS5jbGVhcix2YWx1ZXM6RG0ua2V5cyxzaXplOkRtLnNpemUsZW1wdHk6RG0uZW1wdHksZWFjaDpEbS5lYWNofSxNYXRoLE1hdGguc3FydCg1KTt2YXIgekgsRDNlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGRoKG4pe2lmKCEodD1EM2UuZXhlYyhuKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIituKTt2YXIgdDtyZXR1cm4gbmV3IF9SKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIF9SKG4pe3RoaXMuZmlsbD12b2lkIDA9PT1uLmZpbGw/IiAiOm4uZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PW4uYWxpZ24/Ij4iOm4uYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PW4uc2lnbj8iLSI6bi5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PW4uc3ltYm9sPyIiOm4uc3ltYm9sKyIiLHRoaXMuemVybz0hIW4uemVybyx0aGlzLndpZHRoPXZvaWQgMD09PW4ud2lkdGg/dm9pZCAwOituLndpZHRoLHRoaXMuY29tbWE9ISFuLmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PW4ucHJlY2lzaW9uP3ZvaWQgMDorbi5wcmVjaXNpb24sdGhpcy50cmltPSEhbi50cmltLHRoaXMudHlwZT12b2lkIDA9PT1uLnR5cGU/IiI6bi50eXBlKyIifWZ1bmN0aW9uIGpIKG4sdCl7dmFyIGU9QW0obix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1kaC5wcm90b3R5cGU9X1IucHJvdG90eXBlLF9SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBHSD17IiUiOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKDEwMCpuKS50b0ZpeGVkKHQpfSxiOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKG4pe3JldHVybiBuKyIifSxkOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gakgoMTAwKm4sdCl9LHI6akgsczpmdW5jdGlvbihuLHQpe3ZhciBlPUFtKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV0sbz1yLSh6SD0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyLzMpKSkpKzEscz1pLmxlbmd0aDtyZXR1cm4gbz09PXM/aTpvPnM/aStuZXcgQXJyYXkoby1zKzEpLmpvaW4oIjAiKTpvPjA/aS5zbGljZSgwLG8pKyIuIitpLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK0FtKG4sTWF0aC5tYXgoMCx0K28tMSkpWzBdfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIFdIKG4pe3JldHVybiBufXZhciB2Uixybyx5Uixnb2U9QXJyYXkucHJvdG90eXBlLm1hcCxfb2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gT2woKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12Uj1mdW5jdGlvbihuKXt2YXIgdD12b2lkIDA9PT1uLmdyb3VwaW5nfHx2b2lkIDA9PT1uLnRob3VzYW5kcz9XSDpmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxvPVtdLHM9MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW3M9KHMrMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX0oZ29lLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVsxXSsiIixyPXZvaWQgMD09PW4uZGVjaW1hbD8iLiI6bi5kZWNpbWFsKyIiLG89dm9pZCAwPT09bi5udW1lcmFscz9XSDpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19KGdvZS5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSkscz12b2lkIDA9PT1uLnBlcmNlbnQ/IiUiOm4ucGVyY2VudCsiIixhPXZvaWQgMD09PW4ubWludXM/Ii0iOm4ubWludXMrIiIsbD12b2lkIDA9PT1uLm5hbj8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGQpe3ZhciBwPShkPWRoKGQpKS5maWxsLGg9ZC5hbGlnbixmPWQuc2lnbixtPWQuc3ltYm9sLEM9ZC56ZXJvLF89ZC53aWR0aCx5PWQuY29tbWEsST1kLnByZWNpc2lvbixBPWQudHJpbSxPPWQudHlwZTsibiI9PT1PPyh5PSEwLE89ImciKTpHSFtPXXx8KHZvaWQgMD09PUkmJihJPTEyKSxBPSEwLE89ImciKSwoQ3x8IjAiPT09cCYmIj0iPT09aCkmJihDPSEwLHA9IjAiLGg9Ij0iKTt2YXIgZWU9IiQiPT09bT9lOiIjIj09PW0mJi9bYm94WF0vLnRlc3QoTyk/IjAiK08udG9Mb3dlckNhc2UoKToiIixYPSIkIj09PW0/aTovWyVwXS8udGVzdChPKT9zOiIiLHhlPUdIW09dLGZlPS9bZGVmZ3BycyVdLy50ZXN0KE8pO2Z1bmN0aW9uIHZlKFQpe3ZhciBoZSx5ZSxKLG5lPWVlLGxlPVg7aWYoImMiPT09TylsZT14ZShUKStsZSxUPSIiO2Vsc2V7dmFyIGFlPShUPStUKTwwfHwxL1Q8MDtpZihUPWlzTmFOKFQpP2w6eGUoTWF0aC5hYnMoVCksSSksQSYmKFQ9ZnVuY3Rpb24obil7ZTpmb3IodmFyIHIsdD1uLmxlbmd0aCxlPTEsaT0tMTtlPHQ7KytlKXN3aXRjaChuW2VdKXtjYXNlIi4iOmk9cj1lO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPWUpLHI9ZTticmVhaztkZWZhdWx0OmlmKCErbltlXSlicmVhayBlO2k+MCYmKGk9MCl9cmV0dXJuIGk+MD9uLnNsaWNlKDAsaSkrbi5zbGljZShyKzEpOm59KFQpKSxhZSYmMD09K1QmJiIrIiE9PWYmJihhZT0hMSksbmU9KGFlPyIoIj09PWY/ZjphOiItIj09PWZ8fCIoIj09PWY/IiI6ZikrbmUsbGU9KCJzIj09PU8/X29lWzgrekgvM106IiIpK2xlKyhhZSYmIigiPT09Zj8iKSI6IiIpLGZlKWZvcihoZT0tMSx5ZT1ULmxlbmd0aDsrK2hlPHllOylpZig0OD4oSj1ULmNoYXJDb2RlQXQoaGUpKXx8Sj41Nyl7bGU9KDQ2PT09Sj9yK1Quc2xpY2UoaGUrMSk6VC5zbGljZShoZSkpK2xlLFQ9VC5zbGljZSgwLGhlKTticmVha319eSYmIUMmJihUPXQoVCwxLzApKTt2YXIgbWU9bmUubGVuZ3RoK1QubGVuZ3RoK2xlLmxlbmd0aCxqZT1tZTxfP25ldyBBcnJheShfLW1lKzEpLmpvaW4ocCk6IiI7c3dpdGNoKHkmJkMmJihUPXQoamUrVCxqZS5sZW5ndGg/Xy1sZS5sZW5ndGg6MS8wKSxqZT0iIiksaCl7Y2FzZSI8IjpUPW5lK1QrbGUramU7YnJlYWs7Y2FzZSI9IjpUPW5lK2plK1QrbGU7YnJlYWs7Y2FzZSJeIjpUPWplLnNsaWNlKDAsbWU9amUubGVuZ3RoPj4xKStuZStUK2xlK2plLnNsaWNlKG1lKTticmVhaztkZWZhdWx0OlQ9amUrbmUrVCtsZX1yZXR1cm4gbyhUKX1yZXR1cm4gST12b2lkIDA9PT1JPzY6L1tncHJzXS8udGVzdChPKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLEkpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEkpKSx2ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBkKyIifSx2ZX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKGQscCl7dmFyIGg9YygoKGQ9ZGgoZCkpLnR5cGU9ImYiLGQpKSxmPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFZ1KHApLzMpKSksbT1NYXRoLnBvdygxMCwtZiksQz1fb2VbOCtmLzNdO3JldHVybiBmdW5jdGlvbihfKXtyZXR1cm4gaChtKl8pK0N9fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxybz12Ui5mb3JtYXQseVI9dlIuZm9ybWF0UHJlZml4LGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpPW51bGw9PWk/MDoraSxyPW51bGw9PXI/MTorciwxPT09YXJndW1lbnRzLmxlbmd0aD8ocj1pLGk9MCk6ci09aSxmdW5jdGlvbigpe3JldHVybiB0KCkqcitpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCk7dmFyIEtIPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3ZhciBvLHM7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9bylhPW8sbz1udWxsO2Vsc2UgZG97bz0yKnQoKS0xLGE9Mip0KCktMSxzPW8qbythKmF9d2hpbGUoIXN8fHM+MSk7cmV0dXJuIGkrciphKk1hdGguc3FydCgtMipNYXRoLmxvZyhzKS9zKX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpLFpIPShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXt2YXIgaT1LSC5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChpKCkpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj0wLG89MDtvPGk7KytvKXIrPXQoKTtyZXR1cm4gcn19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpKTtmdW5jdGlvbiBtYShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKX1yZXR1cm4gdGhpc30oZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPVpILnNvdXJjZSh0KShpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpO3ZhciB5b2U9QXJyYXkucHJvdG90eXBlLHp3PXlvZS5tYXAsSW09eW9lLnNsaWNlO2Z1bmN0aW9uIEpIKG4pe3JldHVybitufXZhciB4b2U9WzAsMV07ZnVuY3Rpb24gZ2Eobil7cmV0dXJuIG59ZnVuY3Rpb24gJEgobix0KXtyZXR1cm4odC09bj0rbik/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH06ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIENvZShuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIGszZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPSRIKHIsaSksbz1lKHMsbykpOihpPSRIKGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBGM2Uobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPSRIKG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1GdShuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBwaChuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiBqdygpe3ZhciBpLHIsbyxhLGwsYyxuPXhvZSx0PXhvZSxlPVNtLHM9Z2E7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP0YzZTprM2UsbD1jPW51bGwsZH1mdW5jdGlvbiBkKHApe3JldHVybiBpc05hTihwPStwKT9vOihsfHwobD1hKG4ubWFwKGkpLHQsZSkpKShpKHMocCkpKX1yZXR1cm4gZC5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHMocigoY3x8KGM9YSh0LG4ubWFwKGkpLG5zKSkpKHApKSl9LGQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXp3LmNhbGwocCxKSCkscz09PWdhfHwocz1Db2UobikpLHUoKSk6bi5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUltLmNhbGwocCksdSgpKTp0LnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD1JbS5jYWxsKHApLGU9SUgsdSgpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/Q29lKG4pOmdhLGQpOnMhPT1nYX0sZC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLHUoKSk6ZX0sZC51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsZCk6b30sZnVuY3Rpb24ocCxoKXtyZXR1cm4gaT1wLHI9aCx1KCl9fWZ1bmN0aW9uIEd3KG4sdCl7cmV0dXJuIGp3KCkobix0KX1mdW5jdGlvbiBQbShuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIE13KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj1EZChuLHQsZSk7c3dpdGNoKChpPWRoKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoVnUodCkvMykpKS1WdShNYXRoLmFicyhuKSkpfShyLHMpKSYmKGkucHJlY2lzaW9uPW8pLHlSKGkscyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsVnUodCktVnUobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC1WdShNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiBybyhpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEscz1pW3JdLGE9aVtvXTtyZXR1cm4gYTxzJiYobD1zLHM9YSxhPWwsbD1yLHI9byxvPWwpLChsPWJ2KHMsYSxlKSk+MD9sPWJ2KHM9TWF0aC5mbG9vcihzL2wpKmwsYT1NYXRoLmNlaWwoYS9sKSpsLGUpOmw8MCYmKGw9YnYocz1NYXRoLmNlaWwocypsKS9sLGE9TWF0aC5mbG9vcihhKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKHMvbCkqbCxpW29dPU1hdGguY2VpbChhL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwocypsKS9sLGlbb109TWF0aC5mbG9vcihhKmwpL2wsdChpKSksbn0sbn1mdW5jdGlvbiBEYygpe3ZhciBuPUd3KGdhLGdhKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKG4sRGMoKSl9LG1hLmFwcGx5KG4sYXJndW1lbnRzKSxQbShuKX1mdW5jdGlvbiBiUihuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIHdvZShuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gTW9lKG4pe3JldHVybiBNYXRoLmV4cChuKX1mdW5jdGlvbiBOM2Uobil7cmV0dXJuLU1hdGgubG9nKC1uKX1mdW5jdGlvbiBMM2Uobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiBCM2Uobil7cmV0dXJuIGlzRmluaXRlKG4pPysoIjFlIituKTpuPDA/MDpufWZ1bmN0aW9uIFNvZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiB0NChuKXt2YXIgcixvLHQ9bih3b2UsTW9lKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP0IzZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9U29lKHIpLG89U29lKG8pLG4oTjNlLEwzZSkpOm4od29lLE1vZSksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSthLHMoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUoYSkscygpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24oYSl7dmFyIGQsbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXTsoZD11PGMpJiYocD1jLGM9dSx1PXApO3ZhciBmLG0sQyxwPXIoYyksaD1yKHUpLF89bnVsbD09YT8xMDorYSx5PVtdO2lmKCEoaSUxKSYmaC1wPF8pe2lmKHA9TWF0aC5yb3VuZChwKS0xLGg9TWF0aC5yb3VuZChoKSsxLGM+MCl7Zm9yKDtwPGg7KytwKWZvcihtPTEsZj1vKHApO208aTsrK20paWYoISgoQz1mKm0pPGMpKXtpZihDPnUpYnJlYWs7eS5wdXNoKEMpfX1lbHNlIGZvcig7cDxoOysrcClmb3IobT1pLTEsZj1vKHApO20+PTE7LS1tKWlmKCEoKEM9ZiptKTxjKSl7aWYoQz51KWJyZWFrO3kucHVzaChDKX19ZWxzZSB5PU13KHAsaCxNYXRoLm1pbihoLXAsXykpLm1hcChvKTtyZXR1cm4gZD95LnJldmVyc2UoKTp5fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9cm8obCkpLGE9PT0xLzApcmV0dXJuIGw7bnVsbD09YSYmKGE9MTApO3ZhciBjPU1hdGgubWF4KDEsaSphL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgZD11L28oTWF0aC5yb3VuZChyKHUpKSk7cmV0dXJuIGQqaTxpLS41JiYoZCo9aSksZDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUoYlIoZSgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIoYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmNlaWwocihhKSkpfX0pKX0sdH1mdW5jdGlvbiBXdygpe3ZhciBuPXQ0KGp3KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcGgobixXdygpKS5iYXNlKG4uYmFzZSgpKX0sbWEuYXBwbHkobixhcmd1bWVudHMpLG59dmFyIG40PW5ldyBEYXRlLGk0PW5ldyBEYXRlO2Z1bmN0aW9uIHVyKG4sdCxlLGkpe2Z1bmN0aW9uIHIobyl7cmV0dXJuIG4obz0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZSgrbykpLG99LHIuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxuKG8pLG99LHIucm91bmQ9ZnVuY3Rpb24obyl7dmFyIHM9cihvKSxhPXIuY2VpbChvKTtyZXR1cm4gby1zPGEtbz9zOmF9LHIub2Zmc2V0PWZ1bmN0aW9uKG8scyl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksbnVsbD09cz8xOk1hdGguZmxvb3IocykpLG99LHIucmFuZ2U9ZnVuY3Rpb24obyxzLGEpe3ZhciBjLGw9W107aWYobz1yLmNlaWwobyksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG88cyYmYT4wKSlyZXR1cm4gbDtkb3tsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxhKSxuKG8pfXdoaWxlKGM8byYmbzxzKTtyZXR1cm4gbH0sci5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHVyKGZ1bmN0aW9uKHMpe2lmKHM+PXMpZm9yKDtuKHMpLCFvKHMpOylzLnNldFRpbWUocy0xKX0sZnVuY3Rpb24ocyxhKXtpZihzPj1zKWlmKGE8MClmb3IoOysrYTw9MDspZm9yKDt0KHMsLTEpLCFvKHMpOyk7ZWxzZSBmb3IoOy0tYT49MDspZm9yKDt0KHMsMSksIW8ocyk7KTt9KX0sZSYmKHIuY291bnQ9ZnVuY3Rpb24obyxzKXtyZXR1cm4gbjQuc2V0VGltZSgrbyksaTQuc2V0VGltZSgrcyksbihuNCksbihpNCksTWF0aC5mbG9vcihlKG40LGk0KSl9LHIuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSxpc0Zpbml0ZShvKSYmbz4wP28+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKHMpe3JldHVybiBpKHMpJW89PTB9OmZ1bmN0aW9uKHMpe3JldHVybiByLmNvdW50KDAscyklbz09MH0pOnI6bnVsbH0pLHJ9dmFyIHhSPXVyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC1ufSk7eFIuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5mbG9vcihuKSxpc0Zpbml0ZShuKSYmbj4wP24+MT91cihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L24pKm4pfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKm4pfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL259KTp4UjpudWxsfTt2YXIgQ1I9eFIsUmQ9NmU0LE1SPTYwNDhlNSxUb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLFNSPVRvZSxBb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKS0xZTMqbi5nZXRTZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlJkKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9SZH0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksbzQ9QW9lLElvZT11cihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSpSZCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLHM0PUlvZSxQb2U9dXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqUmQpLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLEl2PVBvZTtmdW5jdGlvbiBPbShuKXtyZXR1cm4gdXIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpSZCkvTVJ9KX12YXIga209T20oMCksUHY9T20oMSksaGg9KE9tKDIpLE9tKDMpLE9tKDQpKSxMb2U9KE9tKDUpLE9tKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0RGF0ZSgxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldE1vbnRoKCktbi5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pKSxhND1Mb2UsbDQ9dXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtsNC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP3VyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciBPZD1sNCxCb2U9dXIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksRVI9Qm9lO2Z1bmN0aW9uIEZtKG4pe3JldHVybiB1cihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1uKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL01SfSl9dmFyIHF3PUZtKDApLFJ2PUZtKDEpLGZoPShGbSgyKSxGbSgzKSxGbSg0KSksYzQ9KEZtKDUpLEZtKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSkpO2M0LmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBpc0Zpbml0ZShuPU1hdGguZmxvb3IobikpJiZuPjA/dXIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9uKSpuKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKm4pfSk6bnVsbH07dmFyIE5tPWM0O2Z1bmN0aW9uIHU0KG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKX1mdW5jdGlvbiBkNChuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKX1mdW5jdGlvbiBZdyhuLHQsZSl7cmV0dXJue3k6bixtOnQsZDplLEg6MCxNOjAsUzowLEw6MH19dmFyIE92LGt2LEdvZT17Ii0iOiIiLF86IiAiLDA6IjAifSxXbz0vXlxzKlxkKy8sc0JlPS9eJS8sYUJlPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBIaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBsQmUobil7cmV0dXJuIG4ucmVwbGFjZShhQmUsIlxcJCYiKX1mdW5jdGlvbiBYdyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAobEJlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUXcobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gY0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZkJlKG4sdCxlKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPTMqaVswXS0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ubT1pWzBdLTEsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9CZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdkJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENCZShuLHQsZSl7dmFyIGk9c0JlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gd0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUW9lKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gU0JlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIEVCZShuLHQpe3JldHVybiBIaShuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gVEJlKG4sdCl7cmV0dXJuIEhpKDErSXYuY291bnQoT2QobiksbiksdCwzKX1mdW5jdGlvbiBlc2Uobix0KXtyZXR1cm4gSGkobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIERCZShuLHQpe3JldHVybiBlc2Uobix0KSsiMDAwIn1mdW5jdGlvbiBBQmUobix0KXtyZXR1cm4gSGkobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBJQmUobix0KXtyZXR1cm4gSGkobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBQQmUobix0KXtyZXR1cm4gSGkobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBSQmUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIE9CZShuLHQpe3JldHVybiBIaShrbS5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gdHNlKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P2hoKG4pOmhoLmNlaWwobil9ZnVuY3Rpb24ga0JlKG4sdCl7cmV0dXJuIG49dHNlKG4pLEhpKGhoLmNvdW50KE9kKG4pLG4pKyg0PT09T2QobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gRkJlKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIE5CZShuLHQpe3JldHVybiBIaShQdi5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gTEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBCQmUobix0KXtyZXR1cm4gSGkoKG49dHNlKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFZCZShuLHQpe3JldHVybiBIaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSEJlKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gSGkoKG49ZT49NHx8MD09PWU/aGgobik6aGguY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBVQmUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStIaSh0LzYwfDAsIjAiLDIpK0hpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIEtvZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHpCZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiBqQmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIEdCZShuLHQpe3JldHVybiBIaSgxK0VSLmNvdW50KE5tKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbnNlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBXQmUobix0KXtyZXR1cm4gbnNlKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gcUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gWEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gUUJlKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBLQmUobix0KXtyZXR1cm4gSGkocXcuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGlzZShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHwwPT09dD9maChuKTpmaC5jZWlsKG4pfWZ1bmN0aW9uIFpCZShuLHQpe3JldHVybiBuPWlzZShuKSxIaShmaC5jb3VudChObShuKSxuKSsoND09PU5tKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIEpCZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiAkQmUobix0KXtyZXR1cm4gSGkoUnYuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGVWZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdFZlKG4sdCl7cmV0dXJuIEhpKChuPWlzZShuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBuVmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGlWZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEhpKChuPWU+PTR8fDA9PT1lP2ZoKG4pOmZoLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gclZlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBab2UoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gSm9lKG4pe3JldHVybitufWZ1bmN0aW9uICRvZShuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfU92PWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMscz1uLnNob3J0RGF5cyxhPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPVh3KHIpLHU9UXcociksZD1YdyhvKSxwPVF3KG8pLGg9WHcocyksZj1RdyhzKSxtPVh3KGEpLEM9UXcoYSksXz1YdyhsKSx5PVF3KGwpLEk9e2E6ZnVuY3Rpb24oQ2Upe3JldHVybiBzW0NlLmdldERheSgpXX0sQTpmdW5jdGlvbihDZSl7cmV0dXJuIG9bQ2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKENlKXtyZXR1cm4gbFtDZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihDZSl7cmV0dXJuIGFbQ2UuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlFvZSxlOlFvZSxmOkRCZSxnOkJCZSxHOkhCZSxIOlNCZSxJOkVCZSxqOlRCZSxMOmVzZSxtOkFCZSxNOklCZSxwOmZ1bmN0aW9uKENlKXtyZXR1cm4gclsrKENlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24oQ2Upe3JldHVybiAxK35+KENlLmdldE1vbnRoKCkvMyl9LFE6Sm9lLHM6JG9lLFM6UEJlLHU6UkJlLFU6T0JlLFY6a0JlLHc6RkJlLFc6TkJlLHg6bnVsbCxYOm51bGwseTpMQmUsWTpWQmUsWjpVQmUsIiUiOlpvZX0sQT17YTpmdW5jdGlvbihDZSl7cmV0dXJuIHNbQ2UuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKENlKXtyZXR1cm4gb1tDZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24oQ2Upe3JldHVybiBsW0NlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKENlKXtyZXR1cm4gYVtDZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6S29lLGU6S29lLGY6V0JlLGc6dFZlLEc6aVZlLEg6ekJlLEk6akJlLGo6R0JlLEw6bnNlLG06cUJlLE06WUJlLHA6ZnVuY3Rpb24oQ2Upe3JldHVybiByWysoQ2UuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihDZSl7cmV0dXJuIDErfn4oQ2UuZ2V0VVRDTW9udGgoKS8zKX0sUTpKb2Usczokb2UsUzpYQmUsdTpRQmUsVTpLQmUsVjpaQmUsdzpKQmUsVzokQmUseDpudWxsLFg6bnVsbCx5OmVWZSxZOm5WZSxaOnJWZSwiJSI6Wm9lfSxPPXthOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9aC5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS53PWZbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbihDZSx2dCxfdCl7dmFyIGllPWQuZXhlYyh2dC5zbGljZShfdCkpO3JldHVybiBpZT8oQ2Uudz1wW2llWzBdLnRvTG93ZXJDYXNlKCldLF90K2llWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oQ2UsdnQsX3Qpe3ZhciBpZT1fLmV4ZWModnQuc2xpY2UoX3QpKTtyZXR1cm4gaWU/KENlLm09eVtpZVswXS50b0xvd2VyQ2FzZSgpXSxfdCtpZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9bS5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5tPUNbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLHQsdnQsX3QpfSxkOllvZSxlOllvZSxmOnhCZSxnOnFvZSxHOldvZSxIOlhvZSxJOlhvZSxqOl9CZSxMOmJCZSxtOmdCZSxNOnZCZSxwOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9Yy5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5wPXVbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0scTptQmUsUTp3QmUsczpNQmUsUzp5QmUsdTp1QmUsVTpkQmUsVjpwQmUsdzpjQmUsVzpoQmUseDpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLGUsdnQsX3QpfSxYOmZ1bmN0aW9uKENlLHZ0LF90KXtyZXR1cm4geGUoQ2UsaSx2dCxfdCl9LHk6cW9lLFk6V29lLFo6ZkJlLCIlIjpDQmV9O2Z1bmN0aW9uIGVlKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBodCxzbixTbixpZT1bXSxjdD0tMSxZZT0wLHh0PUNlLmxlbmd0aDtmb3IoX3QgaW5zdGFuY2VvZiBEYXRlfHwoX3Q9bmV3IERhdGUoK190KSk7KytjdDx4dDspMzc9PT1DZS5jaGFyQ29kZUF0KGN0KSYmKGllLnB1c2goQ2Uuc2xpY2UoWWUsY3QpKSxudWxsIT0oc249R29lW2h0PUNlLmNoYXJBdCgrK2N0KV0pP2h0PUNlLmNoYXJBdCgrK2N0KTpzbj0iZSI9PT1odD8iICI6IjAiLChTbj12dFtodF0pJiYoaHQ9U24oX3Qsc24pKSxpZS5wdXNoKGh0KSxZZT1jdCsxKTtyZXR1cm4gaWUucHVzaChDZS5zbGljZShZZSxjdCkpLGllLmpvaW4oIiIpfX1mdW5jdGlvbiBYKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBZZSx4dCxpZT1ZdygxOTAwLHZvaWQgMCwxKTtpZih4ZShpZSxDZSxfdCs9IiIsMCkhPV90Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBpZSlyZXR1cm4gbmV3IERhdGUoaWUuUSk7aWYoInMiaW4gaWUpcmV0dXJuIG5ldyBEYXRlKDFlMyppZS5zKygiTCJpbiBpZT9pZS5MOjApKTtpZih2dCYmISgiWiJpbiBpZSkmJihpZS5aPTApLCJwImluIGllJiYoaWUuSD1pZS5IJTEyKzEyKmllLnApLHZvaWQgMD09PWllLm0mJihpZS5tPSJxImluIGllP2llLnE6MCksIlYiaW4gaWUpe2lmKGllLlY8MXx8aWUuVj41MylyZXR1cm4gbnVsbDsidyJpbiBpZXx8KGllLnc9MSksIloiaW4gaWU/KHh0PShZZT1kNChZdyhpZS55LDAsMSkpKS5nZXRVVENEYXkoKSxZZT14dD40fHwwPT09eHQ/UnYuY2VpbChZZSk6UnYoWWUpLFllPUVSLm9mZnNldChZZSw3KihpZS5WLTEpKSxpZS55PVllLmdldFVUQ0Z1bGxZZWFyKCksaWUubT1ZZS5nZXRVVENNb250aCgpLGllLmQ9WWUuZ2V0VVRDRGF0ZSgpKyhpZS53KzYpJTcpOih4dD0oWWU9dTQoWXcoaWUueSwwLDEpKSkuZ2V0RGF5KCksWWU9eHQ+NHx8MD09PXh0P1B2LmNlaWwoWWUpOlB2KFllKSxZZT1Jdi5vZmZzZXQoWWUsNyooaWUuVi0xKSksaWUueT1ZZS5nZXRGdWxsWWVhcigpLGllLm09WWUuZ2V0TW9udGgoKSxpZS5kPVllLmdldERhdGUoKSsoaWUudys2KSU3KX1lbHNlKCJXImluIGllfHwiVSJpbiBpZSkmJigidyJpbiBpZXx8KGllLnc9InUiaW4gaWU/aWUudSU3OiJXImluIGllPzE6MCkseHQ9IloiaW4gaWU/ZDQoWXcoaWUueSwwLDEpKS5nZXRVVENEYXkoKTp1NChZdyhpZS55LDAsMSkpLmdldERheSgpLGllLm09MCxpZS5kPSJXImluIGllPyhpZS53KzYpJTcrNyppZS5XLSh4dCs1KSU3OmllLncrNyppZS5VLSh4dCs2KSU3KTtyZXR1cm4iWiJpbiBpZT8oaWUuSCs9aWUuWi8xMDB8MCxpZS5NKz1pZS5aJTEwMCxkNChpZSkpOnU0KGllKX19ZnVuY3Rpb24geGUoQ2UsdnQsX3QsaWUpe2Zvcih2YXIgaHQsc24sY3Q9MCxZZT12dC5sZW5ndGgseHQ9X3QubGVuZ3RoO2N0PFllOyl7aWYoaWU+PXh0KXJldHVybi0xO2lmKDM3PT09KGh0PXZ0LmNoYXJDb2RlQXQoY3QrKykpKXtpZihodD12dC5jaGFyQXQoY3QrKyksIShzbj1PW2h0IGluIEdvZT92dC5jaGFyQXQoY3QrKyk6aHRdKXx8KGllPXNuKENlLF90LGllKSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1fdC5jaGFyQ29kZUF0KGllKyspKXJldHVybi0xfXJldHVybiBpZX1yZXR1cm4gSS54PWVlKGUsSSksSS5YPWVlKGksSSksSS5jPWVlKHQsSSksQS54PWVlKGUsQSksQS5YPWVlKGksQSksQS5jPWVlKHQsQSkse2Zvcm1hdDpmdW5jdGlvbihDZSl7dmFyIHZ0PWVlKENlKz0iIixJKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSxwYXJzZTpmdW5jdGlvbihDZSl7dmFyIHZ0PVgoQ2UrPSIiLCExKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1lZShDZSs9IiIsQSk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH0sdXRjUGFyc2U6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1YKENlKz0iIiwhMCk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLGt2PU92LmZvcm1hdDt2YXIgWnc9NmU0LEp3PTYwKlp3LCR3PTI0Kkp3LGY0PTM2NSokdztmdW5jdGlvbiBzVmUobil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIGFWZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGU/K246K25ldyBEYXRlKCtuKX1mdW5jdGlvbiBtNChuLHQsZSxpLHIsbyxzLGEsbCl7dmFyIGM9R3coZ2EsZ2EpLHU9Yy5pbnZlcnQsZD1jLmRvbWFpbixwPWwoIi4lTCIpLGg9bCgiOiVTIiksZj1sKCIlSTolTSIpLG09bCgiJUkgJXAiKSxDPWwoIiVhICVkIiksXz1sKCIlYiAlZCIpLHk9bCgiJUIiKSxJPWwoIiVZIiksQT1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsWnddLFtvLDUsNSpad10sW28sMTUsMTUqWnddLFtvLDMwLDMwKlp3XSxbciwxLEp3XSxbciwzLDMqSnddLFtyLDYsNipKd10sW3IsMTIsMTIqSnddLFtpLDEsJHddLFtpLDIsMiokd10sW2UsMSw2MDQ4ZTVdLFt0LDEsMjU5MmU2XSxbdCwzLDc3NzZlNl0sW24sMSxmNF1dO2Z1bmN0aW9uIE8oWCl7cmV0dXJuKHMoWCk8WD9wOm8oWCk8WD9oOnIoWCk8WD9mOmkoWCk8WD9tOnQoWCk8WD9lKFgpPFg/QzpfOm4oWCk8WD95OkkpKFgpfWZ1bmN0aW9uIGVlKFgseGUsZmUsdmUpe2lmKG51bGw9PVgmJihYPTEwKSwibnVtYmVyIj09dHlwZW9mIFgpe3ZhciBUPU1hdGguYWJzKGZlLXhlKS9YLG5lPXd3KGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGVbMl19KS5yaWdodChBLFQpO25lPT09QS5sZW5ndGg/KHZlPURkKHhlL2Y0LGZlL2Y0LFgpLFg9bik6bmU/KHZlPShuZT1BW1QvQVtuZS0xXVsyXTxBW25lXVsyXS9UP25lLTE6bmVdKVsxXSxYPW5lWzBdKToodmU9TWF0aC5tYXgoRGQoeGUsZmUsWCksMSksWD1hKX1yZXR1cm4gbnVsbD09dmU/WDpYLmV2ZXJ5KHZlKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBEYXRlKHUoWCkpfSxjLmRvbWFpbj1mdW5jdGlvbihYKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9kKHp3LmNhbGwoWCxhVmUpKTpkKCkubWFwKHNWZSl9LGMudGlja3M9ZnVuY3Rpb24oWCx4ZSl7dmFyIGxlLGZlPWQoKSx2ZT1mZVswXSxUPWZlW2ZlLmxlbmd0aC0xXSxuZT1UPHZlO3JldHVybiBuZSYmKGxlPXZlLHZlPVQsVD1sZSksbGU9KGxlPWVlKFgsdmUsVCx4ZSkpP2xlLnJhbmdlKHZlLFQrMSk6W10sbmU/bGUucmV2ZXJzZSgpOmxlfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oWCx4ZSl7cmV0dXJuIG51bGw9PXhlP086bCh4ZSl9LGMubmljZT1mdW5jdGlvbihYLHhlKXt2YXIgZmU9ZCgpO3JldHVybihYPWVlKFgsZmVbMF0sZmVbZmUubGVuZ3RoLTFdLHhlKSk/ZChiUihmZSxYKSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKGMsbTQobix0LGUsaSxyLG8scyxhLGwpKX0sY31mdW5jdGlvbiBMbSgpe3JldHVybiBtYS5hcHBseShtNChPZCxhNCxrbSxJdixzNCxvNCxTUixDUixrdikuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZzQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBGdihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIGVNKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiB0TShuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY3NlKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1nNC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmc0LGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y3NlKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoZU0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsdE0odGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYodE0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsZU0odGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8scyx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9jc2Uocik6aTpyLHQ/dC5MPT09bj90Lkw9bzp0LlI9bzp0aGlzLl89byxpJiZyPyhzPW8uQyxvLkM9bi5DLG8uTD1pLGkuVT1vLG8hPT1yPyh0PW8uVSxvLlU9bi5VLHQuTD1uPW8uUixvLlI9cixyLlU9byk6KG8uVT10LHQ9byxuPW8uUikpOihzPW4uQyxuPW8pLG4mJihuLlU9dCksIXMpe2lmKG4mJm4uQylyZXR1cm4gdm9pZChuLkM9ITEpO2Rve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoKGU9dC5SKS5DJiYoZS5DPSExLHQuQz0hMCxlTSh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCx0TSh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSxlTSh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPXQuTCkuQyYmKGUuQz0hMSx0LkM9ITAsdE0odGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsZU0odGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsdE0odGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O3ZhciBfND1nNDtmdW5jdGlvbiBOdihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxvPXFvLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJm5NKHIsbix0LGUpLGkmJm5NKHIsdCxuLGkpLFVzW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFVzW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLHJ9ZnVuY3Rpb24gTHYobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIG5NKG4sdCxlLGkpe25bMF18fG5bMV0/bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pOihuWzBdPWksbi5sZWZ0PXQsbi5yaWdodD1lKX1mdW5jdGlvbiB1VmUobix0LGUsaSxyKXt2YXIgbSxvPW5bMF0scz1uWzFdLGE9b1swXSxsPW9bMV0sZD0wLHA9MSxoPXNbMF0tYSxmPXNbMV0tbDtpZihtPXQtYSxofHwhKG0+MCkpe2lmKG0vPWgsaDwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihoPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPWktYSxofHwhKG08MCkpe2lmKG0vPWgsaDwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihoPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1pZihtPWUtbCxmfHwhKG0+MCkpe2lmKG0vPWYsZjwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihmPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPXItbCxmfHwhKG08MCkpe2lmKG0vPWYsZjwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihmPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1yZXR1cm4hKGQ+MCkmJiEocDwxKXx8KGQ+MCYmKG5bMF09W2ErZCpoLGwrZCpmXSkscDwxJiYoblsxXT1bYStwKmgsbCtwKmZdKSksITB9fX19fWZ1bmN0aW9uIGRWZShuLHQsZSxpLHIpe3ZhciBvPW5bMV07aWYobylyZXR1cm4hMDt2YXIgbSxDLHM9blswXSxhPW4ubGVmdCxsPW4ucmlnaHQsYz1hWzBdLHU9YVsxXSxkPWxbMF0scD1sWzFdLGg9KGMrZCkvMjtpZihwPT09dSl7aWYoaDx0fHxoPj1pKXJldHVybjtpZihjPmQpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1baCxlXTtvPVtoLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9W2gscl07bz1baCxlXX19ZWxzZSBpZihDPSh1K3ApLzItKG09KGMtZCkvKHAtdSkpKmgsbTwtMXx8bT4xKWlmKGM+ZCl7aWYocyl7aWYoc1sxXT49cilyZXR1cm59ZWxzZSBzPVsoZS1DKS9tLGVdO289WyhyLUMpL20scl19ZWxzZXtpZihzKXtpZihzWzFdPGUpcmV0dXJufWVsc2Ugcz1bKHItQykvbSxyXTtvPVsoZS1DKS9tLGVdfWVsc2UgaWYodTxwKXtpZihzKXtpZihzWzBdPj1pKXJldHVybn1lbHNlIHM9W3QsbSp0K0NdO289W2ksbSppK0NdfWVsc2V7aWYocyl7aWYoc1swXTx0KXJldHVybn1lbHNlIHM9W2ksbSppK0NdO289W3QsbSp0K0NdfXJldHVybiBuWzBdPXMsblsxXT1vLCEwfWZ1bmN0aW9uIHBWZShuLHQpe3ZhciBlPW4uc2l0ZSxpPXQubGVmdCxyPXQucmlnaHQ7cmV0dXJuIGU9PT1yJiYocj1pLGk9ZSkscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihlPT09aT8oaT10WzFdLHI9dFswXSk6KGk9dFswXSxyPXRbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uIHY0KG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQhPT1uLnNpdGUpXX1mdW5jdGlvbiBoVmUobix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfXZhciBUUixmc2U9W107ZnVuY3Rpb24gZlZlKCl7RnYodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEJtKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLHU9b1swXS1zLGQ9b1sxXS1hLHA9MioobCpkLWMqdSk7aWYoIShwPj0tbXNlKSl7dmFyIGg9bCpsK2MqYyxmPXUqdStkKmQsbT0oZCpoLWMqZikvcCxDPShsKmYtdSpoKS9wLF89ZnNlLnBvcCgpfHxuZXcgZlZlO18uYXJjPW4sXy5zaXRlPXIsXy54PW0rcyxfLnk9KF8uY3k9QythKStNYXRoLnNxcnQobSptK0MqQyksbi5jaXJjbGU9Xztmb3IodmFyIHk9bnVsbCxJPUJ2Ll87STspaWYoXy55PEkueXx8Xy55PT09SS55JiZfLng8PUkueCl7aWYoIUkuTCl7eT1JLlA7YnJlYWt9ST1JLkx9ZWxzZXtpZighSS5SKXt5PUk7YnJlYWt9ST1JLlJ9QnYuaW5zZXJ0KHksXykseXx8KFRSPV8pfX19fWZ1bmN0aW9uIFZtKG4pe3ZhciB0PW4uY2lyY2xlO3QmJih0LlB8fChUUj10Lk4pLEJ2LnJlbW92ZSh0KSxmc2UucHVzaCh0KSxGdih0KSxuLmNpcmNsZT1udWxsKX12YXIgX3NlPVtdO2Z1bmN0aW9uIG1WZSgpe0Z2KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBnc2Uobil7dmFyIHQ9X3NlLnBvcCgpfHxuZXcgbVZlO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIHk0KG4pe1ZtKG4pLEhtLnJlbW92ZShuKSxfc2UucHVzaChuKSxGdihuKX1mdW5jdGlvbiB2c2Uobil7dmFyIHQ9bi5jaXJjbGUsZT10LngsaT10LmN5LHI9W2UsaV0sbz1uLlAscz1uLk4sYT1bbl07eTQobik7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKGUtbC5jaXJjbGUueCk8b3ImJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPG9yOylvPWwuUCxhLnVuc2hpZnQobCkseTQobCksbD1vO2EudW5zaGlmdChsKSxWbShsKTtmb3IodmFyIGM9cztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxvciYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8b3I7KXM9Yy5OLGEucHVzaChjKSx5NChjKSxjPXM7YS5wdXNoKGMpLFZtKGMpO3ZhciBkLHU9YS5sZW5ndGg7Zm9yKGQ9MTtkPHU7KytkKW5NKChjPWFbZF0pLmVkZ2UsKGw9YVtkLTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1hW3UtMV0pLmVkZ2U9TnYoKGw9YVswXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxCbShsKSxCbShjKX1mdW5jdGlvbiB5c2Uobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1IbS5fO2E7KWlmKChvPWJzZShhLGUpLXQpPm9yKWE9YS5MO2Vsc2V7aWYoISgocz10LWdWZShhLGUpKT5vcikpe28+LW9yPyhpPWEuUCxyPWEpOnM+LW9yPyhpPWEscj1hLk4pOmk9cj1hO2JyZWFrfWlmKCFhLlIpe2k9YTticmVha31hPWEuUn0hZnVuY3Rpb24obil7VXNbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1nc2Uobik7aWYoSG0uaW5zZXJ0KGksbCksaXx8cil7aWYoaT09PXIpcmV0dXJuIFZtKGkpLHI9Z3NlKGkuc2l0ZSksSG0uaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSxCbShpKSx2b2lkIEJtKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSk7Vm0oaSksVm0ocik7dmFyIGM9aS5zaXRlLHU9Y1swXSxkPWNbMV0scD1uWzBdLXUsaD1uWzFdLWQsZj1yLnNpdGUsbT1mWzBdLXUsQz1mWzFdLWQsXz0yKihwKkMtaCptKSx5PXAqcCtoKmgsST1tKm0rQypDLEE9WyhDKnktaCpJKS9fK3UsKHAqSS1tKnkpL18rZF07bk0oci5lZGdlLGMsZixBKSxsLmVkZ2U9TnYoYyxuLG51bGwsQSksci5lZGdlPU52KG4sZixudWxsLEEpLEJtKGkpLEJtKHIpfX1mdW5jdGlvbiBic2Uobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgcz1uLlA7aWYoIXMpcmV0dXJuLTEvMDt2YXIgYT0oZT1zLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksZD0xL28tMS9jLHA9dS9jO3JldHVybiBkPygtcCtNYXRoLnNxcnQocCpwLTIqZCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9kK2k6KGkrYSkvMn1mdW5jdGlvbiBnVmUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gYnNlKGUsdCk7dmFyIGk9bi5zaXRlO3JldHVybiBpWzFdPT09dD9pWzBdOjEvMH12YXIgSG0sVXMsQnYscW8sb3I9MWUtNixtc2U9MWUtMTI7ZnVuY3Rpb24gX1ZlKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiB2VmUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gRFIobix0KXt2YXIgaSxyLG8sZT1uLnNvcnQodlZlKS5wb3AoKTtmb3IocW89W10sVXM9bmV3IEFycmF5KG4ubGVuZ3RoKSxIbT1uZXcgXzQsQnY9bmV3IF80OzspaWYobz1UUixlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih5c2UoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7dnNlKG8uYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgZSxpLHIsbyxuPTAsdD1Vcy5sZW5ndGg7bjx0OysrbilpZigoZT1Vc1tuXSkmJihvPShpPWUuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgcz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPG87KytyKXNbcl09cixhW3JdPXBWZShlLHFvW2lbcl1dKTtmb3Iocy5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGFbY10tYVtsXX0pLHI9MDtyPG87KytyKWFbcl09aVtzW3JdXTtmb3Iocj0wO3I8bzsrK3IpaVtyXT1hW3JdfX0oKSx0KXt2YXIgcz0rdFswXVswXSxhPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTsoZnVuY3Rpb24obix0LGUsaSl7Zm9yKHZhciBvLHI9cW8ubGVuZ3RoO3ItLTspZFZlKG89cW9bcl0sbix0LGUsaSkmJnVWZShvLG4sdCxlLGkpJiYoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5vcnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5vcil8fGRlbGV0ZSBxb1tyXX0pKHMsYSxsLGMpLGZ1bmN0aW9uKG4sdCxlLGkpe3ZhciBvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxyPVVzLmxlbmd0aCxfPSEwO2ZvcihvPTA7bzxyOysrbylpZihzPVVzW29dKXtmb3IoYT1zLnNpdGUsbD0oYz1zLmhhbGZlZGdlcykubGVuZ3RoO2wtLTspcW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspbT0oZj1oVmUocyxxb1tjW2xdXSkpWzBdLEM9ZlsxXSxwPShkPXY0KHMscW9bY1srK2wldV1dKSlbMF0saD1kWzFdLChNYXRoLmFicyhtLXApPm9yfHxNYXRoLmFicyhDLWgpPm9yKSYmKGMuc3BsaWNlKGwsMCxxby5wdXNoKEx2KGEsZixNYXRoLmFicyhtLW4pPG9yJiZpLUM+b3I/W24sTWF0aC5hYnMocC1uKTxvcj9oOmldOk1hdGguYWJzKEMtaSk8b3ImJmUtbT5vcj9bTWF0aC5hYnMoaC1pKTxvcj9wOmUsaV06TWF0aC5hYnMobS1lKTxvciYmQy10Pm9yP1tlLE1hdGguYWJzKHAtZSk8b3I/aDp0XTpNYXRoLmFicyhDLXQpPG9yJiZtLW4+b3I/W01hdGguYWJzKGgtdCk8b3I/cDpuLHRdOm51bGwpKS0xKSwrK3UpO3UmJihfPSExKX1pZihfKXt2YXIgeSxJLEEsTz0xLzA7Zm9yKG89MCxfPW51bGw7bzxyOysrbykocz1Vc1tvXSkmJihBPSh5PShhPXMuc2l0ZSlbMF0tbikqeSsoST1hWzFdLXQpKkkpPE8mJihPPUEsXz1zKTtpZihfKXt2YXIgZWU9W24sdF0sWD1bbixpXSx4ZT1bZSxpXSxmZT1bZSx0XTtfLmhhbGZlZGdlcy5wdXNoKHFvLnB1c2goTHYoYT1fLnNpdGUsZWUsWCkpLTEscW8ucHVzaChMdihhLFgseGUpKS0xLHFvLnB1c2goTHYoYSx4ZSxmZSkpLTEscW8ucHVzaChMdihhLGZlLGVlKSktMSl9fWZvcihvPTA7bzxyOysrbykocz1Vc1tvXSkmJihzLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBVc1tvXSl9KHMsYSxsLGMpfXRoaXMuZWRnZXM9cW8sdGhpcy5jZWxscz1VcyxIbT1Cdj1xbz1Vcz1udWxsfWZ1bmN0aW9uIFVtKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1EUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRSLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB2NCh0LG5baV0pfSk7cmV0dXJuIGUuZGF0YT10LnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBuPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7aWYoYT0obz1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgbyxhLGwscj1lLnNpdGUscz0tMSxjPXRbb1thLTFdXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQ7KytzPGE7KWw9dSx1PShjPXRbb1tzXV0pLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJmk8bC5pbmRleCYmaTx1LmluZGV4JiZfVmUocixsLHUpPDAmJm4ucHVzaChbci5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLG59LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybntzb3VyY2U6bi5sZWZ0LmRhdGEsdGFyZ2V0Om4ucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihuLHQsZSl7Zm9yKHZhciByLGEsaT10aGlzLG89aS5fZm91bmR8fDAscz1pLmNlbGxzLmxlbmd0aDshKGE9aS5jZWxsc1tvXSk7KWlmKCsrbz49cylyZXR1cm4gbnVsbDt2YXIgbD1uLWEuc2l0ZVswXSxjPXQtYS5zaXRlWzFdLHU9bCpsK2MqYztkb3thPWkuY2VsbHNbcj1vXSxvPW51bGwsYS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2VzW2RdLGg9cC5sZWZ0O2lmKGghPT1hLnNpdGUmJmh8fChoPXAucmlnaHQpKXt2YXIgZj1uLWhbMF0sbT10LWhbMV0sQz1mKmYrbSptO0M8dSYmKHU9QyxvPWguaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gaS5fZm91bmQ9cixudWxsPT1lfHx1PD1lKmU/YS5zaXRlOm51bGx9fSxVbS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVtLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiAxPT09bj90aGlzOm5ldyBVbSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1uJjA9PT10P3RoaXM6bmV3IFVtKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IFVtKDEsMCwwKTt2YXIgTXNlPXJvKCIuMn5lIikseVZlPXJvKCIuNH5yIikseHNlPXJvKCIsfiIpO2Z1bmN0aW9uIENzZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp5VmUobil9dmFyIHptPXtmb3JtYXRUaWNrOkNzZSxmb3JtYXRTaG9ydDpDc2UsZm9ybWF0UmVhZGFibGUobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp4c2Uobil9LGZvcm1hdExvbmc6eHNlfSxiVmU9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTtmdW5jdGlvbiBBUihuKXtyZXR1cm4gYlZlLmZvcm1hdChuKX12YXIgdnM9e2Zvcm1hdFRpY2s6QVIsZm9ybWF0U2hvcnQ6QVIsZm9ybWF0UmVhZGFibGU6QVIsZm9ybWF0TG9uZzpBUn0seFZlPXJvKCIwLjN+cyIpLENWZT1ybygiLC4zfmYiKTtmdW5jdGlvbiBJUihuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49MWU0fHx0PC4wMDE/eFZlKG4pOkNWZShuKX12YXIgU3NlPXtmb3JtYXRUaWNrOklSLGZvcm1hdFNob3J0OklSLGZvcm1hdFJlYWRhYmxlOklSLGZvcm1hdExvbmc6SVJ9LEU0PTM2ZTUsVnY9cm8oIi40fiIpO2Z1bmN0aW9uIFBSKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTwxZTM/YCR7VnYoZSl9IG1zYDplPDZlND9gJHtWdihlLzFlMyl9IHNlY2A6ZTxFND9gJHtWdihlLzZlNCl9IG1pbmA6ZTw4NjRlNT9gJHtWdihlL0U0KX0gaHJgOmU8MzE1MzZlNj9gJHtWdihlLzg2NGU1KX0gZGF5YDpgJHtWdihlLzMxNTM2ZTYpfSB5cmAsdH12YXIgdzQsaU09e2Zvcm1hdFRpY2s6UFIsZm9ybWF0U2hvcnQ6UFIsZm9ybWF0UmVhZGFibGU6UFIsZm9ybWF0TG9uZzpQUn0sd1ZlPUxtKCkudGlja0Zvcm1hdCgpLEVzZT17Zm9ybWF0VGljazpuPT53VmUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcodzQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIEFjKG4pe3N3aXRjaChuKXtjYXNlIFNyLkxJTkVBUjpyZXR1cm4gbmV3IHJNO2Nhc2UgU3IuTE9HMTA6cmV0dXJuIG5ldyBJNDtjYXNlIFNyLlRJTUU6cmV0dXJuIG5ldyBvTTtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgck09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1EYygpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIERjKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSTQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbCxkPWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSxkLyh1K051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybSh1LyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1XdygpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sb009Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPUxtKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUVzZX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sUDQ9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57UDQ9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO1A0PUJvb2xlYW4odCl9dmFyIEljX2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxJY19pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiBQNH0sSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtpZighc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIikpcmV0dXJuITE7bGV0IG49bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIpO3JldHVybiBCb29sZWFuKG4pfSxJY19hcmVQb2x5bGluZXNFcXVhbD1mdW5jdGlvbihuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9LEh2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy54U2NhbGU9QWMoU3IuTElORUFSKSx0aGlzLnlTY2FsZT1BYyhTci5MSU5FQVIpLHRoaXMuZG9tQ29udGFpbmVyUmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX19Z2V0VXBkYXRlSWRlbnRpZmllcigpe3JldHVybiB0aGlzLmxhc3RVcGRhdGVkfXVwZGF0ZUlkZW50aWZpZXIoKXt0aGlzLmxhc3RVcGRhdGVkKyt9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITB9c2V0WFNjYWxlKHQpe3RoaXMueFNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0WVNjYWxlKHQpe3RoaXMueVNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9Z2V0Q3VycmVudFZpZXdCb3hSZWN0KCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXdCb3hSZWN0fXNldFZpZXdCb3hSZWN0KHQpe3RoaXMuY3VycmVudFZpZXdCb3hSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXt0aGlzLmRvbUNvbnRhaW5lclJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX10cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsZSl7bGV0IGk9dCxyPUljX2NvbnZlcnRSZWN0VG9FeHRlbnQodGhpcy5jdXJyZW50Vmlld0JveFJlY3QpO3JldHVyblt0aGlzLnhTY2FsZS5mb3J3YXJkKHIueCxbaS54LGkueCtpLndpZHRoXSxlWzBdKSx0aGlzLnlTY2FsZS5mb3J3YXJkKHIueSx0aGlzLmlzWUF4aXNQb2ludGVkRG93bigpP1tpLnkraS5oZWlnaHQsaS55XTpbaS55LGkueStpLmhlaWdodF0sZVsxXSldfX07ZnVuY3Rpb24gUlIobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpvLG9wYWNpdHk6c309aSxhPW47cmV0dXJuIGF8fG8/KGE9YT8/dCgpLGE9ZShhKSxhLnN0eWxlLmRpc3BsYXk9bz8iIjoibm9uZSIsYS5zdHlsZS5zdHJva2U9cixhLnN0eWxlLm9wYWNpdHk9U3RyaW5nKHM/PzEpLGEpOm51bGx9dmFyIFphPTEwMDEsSW89MTAwMyxicz0xMDA2LFNoPTEwMDksd009MTAxMixZbT0xMDE1LHV5PTEwMTYsZHk9MTAyMCx6cz0xMDIzLFFtPTEwMjYsbXk9MTAyNyxheT0yNDAwLGx5PTI0MDEsRGg9M2UzLEZyPTMwMDEsTU09MzUwNDQsZzI9MzUwNDgsSGQ9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PWlbdF0mJihpW3RdPVtdKSwtMT09PWlbdF0uaW5kZXhPZihlKSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1pW3RdJiYtMSE9PWlbdF0uaW5kZXhPZihlKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnNbdF07aWYodm9pZCAwIT09cil7bGV0IG89ci5pbmRleE9mKGUpOy0xIT09byYmci5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKHZvaWQgMCE9PWkpe3QudGFyZ2V0PXRoaXM7bGV0IHI9aS5zbGljZSgwKTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxpcz1bXTtmb3IobGV0IG49MDtuPDI1NjtuKyspaXNbbl09KG48MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KTt2YXIgQjQ9TWF0aC5QSS8xODAsd1U9MTgwL01hdGguUEk7ZnVuY3Rpb24gRmMoKXtsZXQgbj00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCx0PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsaT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oaXNbMjU1Jm5dK2lzW24+PjgmMjU1XStpc1tuPj4xNiYyNTVdK2lzW24+PjI0JjI1NV0rIi0iK2lzWzI1NSZ0XStpc1t0Pj44JjI1NV0rIi0iK2lzW3Q+PjE2JjE1fDY0XStpc1t0Pj4yNCYyNTVdKyItIitpc1s2MyZlfDEyOF0raXNbZT4+OCYyNTVdKyItIitpc1tlPj4xNiYyNTVdK2lzW2U+PjI0JjI1NV0raXNbMjU1JmldK2lzW2k+PjgmMjU1XStpc1tpPj4xNiYyNTVdK2lzW2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gX2Eobix0LGUpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfWZ1bmN0aW9uIFY0KG4sdCxlKXtyZXR1cm4oMS1lKSpuK2UqdH1mdW5jdGlvbiBpYWUobil7cmV0dXJuIDA9PShuJm4tMSkmJjAhPT1ufWZ1bmN0aW9uIEE1ZShuKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4yKSl9dmFyIEplPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPXRoaXMueC10Lngscz10aGlzLnktdC55O3JldHVybiB0aGlzLng9byppLXMqcit0LngsdGhpcy55PW8qcitzKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0plLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIFBvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPW8sdVs1XT1sLHVbNl09aSx1WzddPXMsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxkPWlbN10scD1pWzJdLGg9aVs1XSxmPWlbOF0sbT1yWzBdLEM9clszXSxfPXJbNl0seT1yWzFdLEk9cls0XSxBPXJbN10sTz1yWzJdLGVlPXJbNV0sWD1yWzhdO3JldHVybiBvWzBdPXMqbSthKnkrbCpPLG9bM109cypDK2EqSStsKmVlLG9bNl09cypfK2EqQStsKlgsb1sxXT1jKm0rdSp5K2QqTyxvWzRdPWMqQyt1KkkrZCplZSxvWzddPWMqXyt1KkErZCpYLG9bMl09cCptK2gqeStmKk8sb1s1XT1wKkMraCpJK2YqZWUsb1s4XT1wKl8raCpBK2YqWCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVszXSo9dCxlWzZdKj10LGVbMV0qPXQsZVs0XSo9dCxlWzddKj10LGVbMl0qPXQsZVs1XSo9dCxlWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdO3JldHVybiBlKnMqdS1lKmEqYy1pKm8qdStpKmEqbCtyKm8qYy1yKnMqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGQ9dSpzLWEqYyxwPWEqbC11Km8saD1jKm8tcypsLGY9ZSpkK2kqcCtyKmg7aWYoMD09PWYpcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgbT0xL2Y7cmV0dXJuIHRbMF09ZCptLHRbMV09KHIqYy11KmkpKm0sdFsyXT0oYSppLXIqcykqbSx0WzNdPXAqbSx0WzRdPSh1KmUtcipsKSptLHRbNV09KHIqby1hKmUpKm0sdFs2XT1oKm0sdFs3XT0oaSpsLWMqZSkqbSx0WzhdPShzKmUtaSpvKSptLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQsZT10aGlzLmVsZW1lbnRzO3JldHVybiB0PWVbMV0sZVsxXT1lWzNdLGVbM109dCx0PWVbMl0sZVsyXT1lWzZdLGVbNl09dCx0PWVbNV0sZVs1XT1lWzddLGVbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxyLG8scyxhKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChpKmwsaSpjLC1pKihsKnMrYyphKStzK3QsLXIqYyxyKmwsLXIqKC1jKnMrbCphKSthK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKj10LGlbM10qPXQsaVs2XSo9dCxpWzFdKj1lLGlbNF0qPWUsaVs3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLHI9dGhpcy5lbGVtZW50cyxvPXJbMF0scz1yWzNdLGE9cls2XSxsPXJbMV0sYz1yWzRdLHU9cls3XTtyZXR1cm4gclswXT1lKm8raSpsLHJbM109ZSpzK2kqYyxyWzZdPWUqYStpKnUsclsxXT0taSpvK2UqbCxyWzRdPS1pKnMrZSpjLHJbN109LWkqYStlKnUsdGhpc310cmFuc2xhdGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKz10KmlbMl0saVszXSs9dCppWzVdLGlbNl0rPXQqaVs4XSxpWzFdKz1lKmlbMl0saVs0XSs9ZSppWzVdLGlbN10rPWUqaVs4XSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZnVuY3Rpb24gbWxlKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gU00obil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9UG8ucHJvdG90eXBlLmlzTWF0cml4Mz0hMDt2YXIgcmFlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LFBjPXtoOjAsczowLGw6MH0sT1I9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBINChuLHQsZSl7cmV0dXJuIGU8MCYmKGUrPTEpLGU+MSYmKGUtPTEpLGU8MS82P24rNioodC1uKSplOmU8LjU/dDplPDIvMz9uKzYqKHQtbikqKDIvMy1lKTpufWZ1bmN0aW9uIHB5KG4pe3JldHVybiBuPC4wNDA0NT8uMDc3Mzk5MzgwOCpuOk1hdGgucG93KC45NDc4NjcyOTg2Km4rLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBVNChuKXtyZXR1cm4gbjwuMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sLjQxNjY2KS0uMDU1fXZhciBhbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXtyZXR1cm4gdm9pZCAwPT09aSYmdm9pZCAwPT09cj90aGlzLnNldChlKTp0aGlzLnNldFJHQihlLGkscil9c2V0KGUpe3JldHVybiBlJiZlLmlzQ29sb3I/dGhpcy5jb3B5KGUpOiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnNldEhleChlKToic3RyaW5nIj09dHlwZW9mIGUmJnRoaXMuc2V0U3R5bGUoZSksdGhpc31zZXRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1lLHRoaXMuYj1lLHRoaXN9c2V0SGV4KGUpe3JldHVybiBlPU1hdGguZmxvb3IoZSksdGhpcy5yPShlPj4xNiYyNTUpLzI1NSx0aGlzLmc9KGU+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmZSkvMjU1LHRoaXN9c2V0UkdCKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUsdGhpcy5nPWksdGhpcy5iPXIsdGhpc31zZXRIU0woZSxpLHIpe2lmKGU9ZnVuY3Rpb24obix0KXtyZXR1cm4obiUxKzEpJTF9KGUpLGk9X2EoaSwwLDEpLHI9X2EociwwLDEpLDA9PT1pKXRoaXMucj10aGlzLmc9dGhpcy5iPXI7ZWxzZXtsZXQgbz1yPD0uNT9yKigxK2kpOnIraS1yKmkscz0yKnItbzt0aGlzLnI9SDQocyxvLGUrMS8zKSx0aGlzLmc9SDQocyxvLGUpLHRoaXMuYj1INChzLG8sZS0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKGUpe2Z1bmN0aW9uIGkobyl7dm9pZCAwIT09byYmcGFyc2VGbG9hdChvKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIitlKyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCByO2lmKHI9L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWMoZSkpe2xldCBvLGE9clsyXTtzd2l0Y2goclsxXSl7Y2FzZSJyZ2IiOmNhc2UicmdiYSI6aWYobz0vXlxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChvWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQob1szXSwxMCkpLzI1NSxpKG9bNF0pLHRoaXM7aWYobz0vXlxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bMV0sMTApKS8xMDAsdGhpcy5nPU1hdGgubWluKDEwMCxwYXJzZUludChvWzJdLDEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQob1szXSwxMCkpLzEwMCxpKG9bNF0pLHRoaXM7YnJlYWs7Y2FzZSJoc2wiOmNhc2UiaHNsYSI6aWYobz0vXlxzKihcZCpcLj9cZCspXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSl7bGV0IGw9cGFyc2VGbG9hdChvWzFdKS8zNjAsYz1wYXJzZUludChvWzJdLDEwKS8xMDAsdT1wYXJzZUludChvWzNdLDEwKS8xMDA7cmV0dXJuIGkob1s0XSksdGhpcy5zZXRIU0wobCxjLHUpfX19ZWxzZSBpZihyPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyhlKSl7bGV0IG89clsxXSxzPW8ubGVuZ3RoO2lmKDM9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMSkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoNCkrby5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiBlJiZlLmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKGUpOnRoaXN9c2V0Q29sb3JOYW1lKGUpe2xldCBpPXJhZVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB2b2lkIDAhPT1pP3RoaXMuc2V0SGV4KGkpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIitlKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KGUpe3JldHVybiB0aGlzLnI9ZS5yLHRoaXMuZz1lLmcsdGhpcy5iPWUuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIoZSl7cmV0dXJuIHRoaXMucj1weShlLnIpLHRoaXMuZz1weShlLmcpLHRoaXMuYj1weShlLmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQihlKXtyZXR1cm4gdGhpcy5yPVU0KGUuciksdGhpcy5nPVU0KGUuZyksdGhpcy5iPVU0KGUuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0woZSl7bGV0IGwsYyxpPXRoaXMucixyPXRoaXMuZyxvPXRoaXMuYixzPU1hdGgubWF4KGkscixvKSxhPU1hdGgubWluKGkscixvKSx1PShhK3MpLzI7aWYoYT09PXMpbD0wLGM9MDtlbHNle2xldCBkPXMtYTtzd2l0Y2goYz11PD0uNT9kLyhzK2EpOmQvKDItcy1hKSxzKXtjYXNlIGk6bD0oci1vKS9kKyhyPG8/NjowKTticmVhaztjYXNlIHI6bD0oby1pKS9kKzI7YnJlYWs7Y2FzZSBvOmw9KGktcikvZCs0fWwvPTZ9cmV0dXJuIGUuaD1sLGUucz1jLGUubD11LGV9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9b2Zmc2V0SFNMKGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRIU0woUGMpLFBjLmgrPWUsUGMucys9aSxQYy5sKz1yLHRoaXMuc2V0SFNMKFBjLmgsUGMucyxQYy5sKSx0aGlzfWFkZChlKXtyZXR1cm4gdGhpcy5yKz1lLnIsdGhpcy5nKz1lLmcsdGhpcy5iKz1lLmIsdGhpc31hZGRDb2xvcnMoZSxpKXtyZXR1cm4gdGhpcy5yPWUucitpLnIsdGhpcy5nPWUuZytpLmcsdGhpcy5iPWUuYitpLmIsdGhpc31hZGRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucis9ZSx0aGlzLmcrPWUsdGhpcy5iKz1lLHRoaXN9c3ViKGUpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItZS5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctZS5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItZS5iKSx0aGlzfW11bHRpcGx5KGUpe3JldHVybiB0aGlzLnIqPWUucix0aGlzLmcqPWUuZyx0aGlzLmIqPWUuYix0aGlzfW11bHRpcGx5U2NhbGFyKGUpe3JldHVybiB0aGlzLnIqPWUsdGhpcy5nKj1lLHRoaXMuYio9ZSx0aGlzfWxlcnAoZSxpKXtyZXR1cm4gdGhpcy5yKz0oZS5yLXRoaXMucikqaSx0aGlzLmcrPShlLmctdGhpcy5nKSppLHRoaXMuYis9KGUuYi10aGlzLmIpKmksdGhpc31sZXJwQ29sb3JzKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUucisoaS5yLWUucikqcix0aGlzLmc9ZS5nKyhpLmctZS5nKSpyLHRoaXMuYj1lLmIrKGkuYi1lLmIpKnIsdGhpc31sZXJwSFNMKGUsaSl7dGhpcy5nZXRIU0woUGMpLGUuZ2V0SFNMKE9SKTtsZXQgcj1WNChQYy5oLE9SLmgsaSksbz1WNChQYy5zLE9SLnMsaSkscz1WNChQYy5sLE9SLmwsaSk7cmV0dXJuIHRoaXMuc2V0SFNMKHIsbyxzKSx0aGlzfWVxdWFscyhlKXtyZXR1cm4gZS5yPT09dGhpcy5yJiZlLmc9PT10aGlzLmcmJmUuYj09PXRoaXMuYn1mcm9tQXJyYXkoZSxpPTApe3JldHVybiB0aGlzLnI9ZVtpXSx0aGlzLmc9ZVtpKzFdLHRoaXMuYj1lW2krMl0sdGhpc310b0FycmF5KGU9W10saT0wKXtyZXR1cm4gZVtpXT10aGlzLnIsZVtpKzFdPXRoaXMuZyxlW2krMl09dGhpcy5iLGV9ZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGkpe3JldHVybiB0aGlzLnI9ZS5nZXRYKGkpLHRoaXMuZz1lLmdldFkoaSksdGhpcy5iPWUuZ2V0WihpKSwhMD09PWUubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1yZXR1cm4gbi5OQU1FUz1yYWUsbn0pKCk7YW4ucHJvdG90eXBlLmlzQ29sb3I9ITAsYW4ucHJvdG90eXBlLnI9MSxhbi5wcm90b3R5cGUuZz0xLGFuLnByb3RvdHlwZS5iPTE7dmFyIFV2LFVkPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PiJ1IilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ZvaWQgMD09PVV2JiYoVXY9U00oImNhbnZhcyIpKSxVdi53aWR0aD10LndpZHRoLFV2LmhlaWdodD10LmhlaWdodDtsZXQgaT1Vdi5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9VXZ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1TTSgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCksbz1yLmRhdGE7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspb1tzXT0yNTUqcHkob1tzXS8yNTUpO3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1pZih0LmRhdGEpe2xldCBlPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyllW2ldPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/TWF0aC5mbG9vcigyNTUqcHkoZVtpXS8yNTUpKTpweShlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LEk1ZT0wLGJvPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodD1iby5ERUZBVUxUX0lNQUdFLGU9Ym8uREVGQVVMVF9NQVBQSU5HLGk9WmEscj1aYSxvPWJzLHM9MTAwOCxhPXpzLGw9U2gsYz0xLHU9RGgpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6STVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9ZSx0aGlzLndyYXBTPWksdGhpcy53cmFwVD1yLHRoaXMubWFnRmlsdGVyPW8sdGhpcy5taW5GaWx0ZXI9cyx0aGlzLmFuaXNvdHJvcHk9Yyx0aGlzLmZvcm1hdD1hLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9bCx0aGlzLm9mZnNldD1uZXcgSmUoMCwwKSx0aGlzLnJlcGVhdD1uZXcgSmUoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSmUoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBQbyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMCx0aGlzLnByZW11bHRpcGx5QWxwaGE9ITEsdGhpcy5mbGlwWT0hMCx0aGlzLnVucGFja0FsaWdubWVudD00LHRoaXMuZW5jb2Rpbmc9dSx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMSx0aGlzLm5lZWRzUE1SRU1VcGRhdGU9ITF9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7aWYoIWUmJnZvaWQgMCE9PXQudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih2b2lkIDAhPT10aGlzLmltYWdlKXtsZXQgcj10aGlzLmltYWdlO2lmKHZvaWQgMD09PXIudXVpZCYmKHIudXVpZD1GYygpKSwhZSYmdm9pZCAwPT09dC5pbWFnZXNbci51dWlkXSl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShyKSl7bz1bXTtmb3IobGV0IHM9MCxhPXIubGVuZ3RoO3M8YTtzKyspby5wdXNoKHo0KHJbc10uaXNEYXRhVGV4dHVyZT9yW3NdLmltYWdlOnJbc10pKX1lbHNlIG89ejQocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOm99fWkuaW1hZ2U9ci51dWlkfXJldHVybiJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1pKSxpfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9dHJhbnNmb3JtVXYodCl7aWYoMzAwIT09dGhpcy5tYXBwaW5nKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgMWUzOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgWmE6dC54PXQueDwwPzA6MTticmVhaztjYXNlIDEwMDI6dC54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik/TWF0aC5jZWlsKHQueCktdC54OnQueC1NYXRoLmZsb29yKHQueCl9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIDFlMzp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFphOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAxMDAyOnQueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpP01hdGguY2VpbCh0LnkpLXQueTp0LnktTWF0aC5mbG9vcih0LnkpfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07ZnVuY3Rpb24gejQobil7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmbiBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmbiBpbnN0YW5jZW9mIEltYWdlQml0bWFwP1VkLmdldERhdGFVUkwobik6bi5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4uZGF0YSksd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsdHlwZTpuLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX1iby5ERUZBVUxUX0lNQUdFPXZvaWQgMCxiby5ERUZBVUxUX01BUFBJTkc9MzAwLGJvLnByb3RvdHlwZS5pc1RleHR1cmU9ITA7dmFyIHRyPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9MSl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpcy53PXJ9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dm9pZCAwIT09dC53P3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXRoaXMudyxzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1s0XSppK3NbOF0qcitzWzEyXSpvLHRoaXMueT1zWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSpvLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIrc1sxNF0qbyx0aGlzLnc9c1szXSplK3NbN10qaStzWzExXSpyK3NbMTVdKm8sdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgZT1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gZTwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10LngvZSx0aGlzLnk9dC55L2UsdGhpcy56PXQuei9lKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZSxpLHIsbyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxkPWxbOF0scD1sWzFdLGg9bFs1XSxmPWxbOV0sbT1sWzJdLEM9bFs2XSxfPWxbMTBdO2lmKE1hdGguYWJzKHUtcCk8LjAxJiZNYXRoLmFicyhkLW0pPC4wMSYmTWF0aC5hYnMoZi1DKTwuMDEpe2lmKE1hdGguYWJzKHUrcCk8LjEmJk1hdGguYWJzKGQrbSk8LjEmJk1hdGguYWJzKGYrQyk8LjEmJk1hdGguYWJzKGMraCtfLTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtsZXQgST0oYysxKS8yLEE9KGgrMSkvMixPPShfKzEpLzIsZWU9KHUrcCkvNCxYPShkK20pLzQseGU9KGYrQykvNDtyZXR1cm4gST5BJiZJPk8/STwuMDE/KGk9MCxyPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoSSkscj1lZS9pLG89WC9pKTpBPk8/QTwuMDE/KGk9LjcwNzEwNjc4MSxyPTAsbz0uNzA3MTA2NzgxKToocj1NYXRoLnNxcnQoQSksaT1lZS9yLG89eGUvcik6TzwuMDE/KGk9LjcwNzEwNjc4MSxyPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoTyksaT1YL28scj14ZS9vKSx0aGlzLnNldChpLHIsbyxlKSx0aGlzfWxldCB5PU1hdGguc3FydCgoQy1mKSooQy1mKSsoZC1tKSooZC1tKSsocC11KSoocC11KSk7cmV0dXJuIE1hdGguYWJzKHkpPC4wMDEmJih5PTEpLHRoaXMueD0oQy1mKS95LHRoaXMueT0oZC1tKS95LHRoaXMuej0ocC11KS95LHRoaXMudz1NYXRoLmFjb3MoKGMraCtfLTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oZS53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzLnc9dC53KyhlLnctdC53KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O3RyLnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIHZhPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgdHIoMCwwLHQsZSksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyB0cigwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IGJvKHZvaWQgMCxpLm1hcHBpbmcsaS53cmFwUyxpLndyYXBULGkubWFnRmlsdGVyLGkubWluRmlsdGVyLGkuZm9ybWF0LGkudHlwZSxpLmFuaXNvdHJvcHksaS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1pLmdlbmVyYXRlTWlwbWFwcyYmaS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PXZvaWQgMCE9PWkuaW50ZXJuYWxGb3JtYXQ/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09aS5taW5GaWx0ZXI/aS5taW5GaWx0ZXI6YnMsdGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDA9PT1pLmRlcHRoQnVmZmVyfHxpLmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj12b2lkIDAhPT1pLnN0ZW5jaWxCdWZmZXImJmkuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT12b2lkIDAhPT1pLmRlcHRoVGV4dHVyZT9pLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LGUsaT0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9aSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt2YS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMCxjbGFzcyBleHRlbmRzIHZhe2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBvPTA7bzxpO28rKyl0aGlzLnRleHR1cmVbb109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxvPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxvO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgRU09Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9dm9pZCAwPT09aS5pZ25vcmVEZXB0aHx8aS5pZ25vcmVEZXB0aCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT12b2lkIDAhPT1pLnVzZVJlbmRlclRvVGV4dHVyZSYmaS51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9ITE9PT10aGlzLnVzZVJlbmRlclRvVGV4dHVyZX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtFTS5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciBDcz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cn1zdGF0aWMgc2xlcnAodCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLGkuc2xlcnBRdWF0ZXJuaW9ucyh0LGUscil9c3RhdGljIHNsZXJwRmxhdCh0LGUsaSxyLG8scyxhKXtsZXQgbD1pW3IrMF0sYz1pW3IrMV0sdT1pW3IrMl0sZD1pW3IrM10scD1vW3MrMF0saD1vW3MrMV0sZj1vW3MrMl0sbT1vW3MrM107aWYoMD09PWEpcmV0dXJuIHRbZSswXT1sLHRbZSsxXT1jLHRbZSsyXT11LHZvaWQodFtlKzNdPWQpO2lmKDE9PT1hKXJldHVybiB0W2UrMF09cCx0W2UrMV09aCx0W2UrMl09Zix2b2lkKHRbZSszXT1tKTtpZihkIT09bXx8bCE9PXB8fGMhPT1ofHx1IT09Zil7bGV0IEM9MS1hLF89bCpwK2MqaCt1KmYrZCptLHk9Xz49MD8xOi0xLEk9MS1fKl87aWYoST5OdW1iZXIuRVBTSUxPTil7bGV0IE89TWF0aC5zcXJ0KEkpLGVlPU1hdGguYXRhbjIoTyxfKnkpO0M9TWF0aC5zaW4oQyplZSkvTyxhPU1hdGguc2luKGEqZWUpL099bGV0IEE9YSp5O2lmKGw9bCpDK3AqQSxjPWMqQytoKkEsdT11KkMrZipBLGQ9ZCpDK20qQSxDPT09MS1hKXtsZXQgTz0xL01hdGguc3FydChsKmwrYypjK3UqdStkKmQpO2wqPU8sYyo9Tyx1Kj1PLGQqPU99fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109ZH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixvLHMpe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10sZD1vW3NdLHA9b1tzKzFdLGg9b1tzKzJdLGY9b1tzKzNdO3JldHVybiB0W2VdPWEqZit1KmQrbCpoLWMqcCx0W2UrMV09bCpmK3UqcCtjKmQtYSpoLHRbZSsyXT1jKmYrdSpoK2EqcC1sKmQsdFtlKzNdPXUqZi1hKmQtbCpwLWMqaCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighdHx8IXQuaXNFdWxlcil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX29yZGVyLGE9TWF0aC5jb3MsbD1NYXRoLnNpbixjPWEoaS8yKSx1PWEoci8yKSxkPWEoby8yKSxwPWwoaS8yKSxoPWwoci8yKSxmPWwoby8yKTtzd2l0Y2gocyl7Y2FzZSJYWVoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK3MpfXJldHVybiExIT09ZSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LGUpe2xldCBpPWUvMixyPU1hdGguc2luKGkpO3JldHVybiB0aGlzLl94PXQueCpyLHRoaXMuX3k9dC55KnIsdGhpcy5fej10Lnoqcix0aGlzLl93PU1hdGguY29zKGkpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZT10LmVsZW1lbnRzLGk9ZVswXSxyPWVbNF0sbz1lWzhdLHM9ZVsxXSxhPWVbNV0sbD1lWzldLGM9ZVsyXSx1PWVbNl0sZD1lWzEwXSxwPWkrYStkO2lmKHA+MCl7bGV0IGg9LjUvTWF0aC5zcXJ0KHArMSk7dGhpcy5fdz0uMjUvaCx0aGlzLl94PSh1LWwpKmgsdGhpcy5feT0oby1jKSpoLHRoaXMuX3o9KHMtcikqaH1lbHNlIGlmKGk+YSYmaT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2ktYS1kKTt0aGlzLl93PSh1LWwpL2gsdGhpcy5feD0uMjUqaCx0aGlzLl95PShyK3MpL2gsdGhpcy5fej0obytjKS9ofWVsc2UgaWYoYT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2EtaS1kKTt0aGlzLl93PShvLWMpL2gsdGhpcy5feD0ocitzKS9oLHRoaXMuX3k9LjI1KmgsdGhpcy5fej0obCt1KS9ofWVsc2V7bGV0IGg9MipNYXRoLnNxcnQoMStkLWktYSk7dGhpcy5fdz0ocy1yKS9oLHRoaXMuX3g9KG8rYykvaCx0aGlzLl95PShsK3UpL2gsdGhpcy5fej0uMjUqaH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQsZSl7bGV0IGk9dC5kb3QoZSkrMTtyZXR1cm4gaTxOdW1iZXIuRVBTSUxPTj8oaT0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PWkpOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9aSkpOih0aGlzLl94PXQueSplLnotdC56KmUueSx0aGlzLl95PXQueiplLngtdC54KmUueix0aGlzLl96PXQueCplLnktdC55KmUueCx0aGlzLl93PWkpLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoX2EodGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQsZSl7bGV0IGk9dGhpcy5hbmdsZVRvKHQpO2lmKDA9PT1pKXJldHVybiB0aGlzO2xldCByPU1hdGgubWluKDEsZS9pKTtyZXR1cm4gdGhpcy5zbGVycCh0LHIpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gMD09PXQ/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpe2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX3csYT1lLl94LGw9ZS5feSxjPWUuX3osdT1lLl93O3JldHVybiB0aGlzLl94PWkqdStzKmErcipjLW8qbCx0aGlzLl95PXIqdStzKmwrbyphLWkqYyx0aGlzLl96PW8qdStzKmMraSpsLXIqYSx0aGlzLl93PXMqdS1pKmEtcipsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IGk9dGhpcy5feCxyPXRoaXMuX3ksbz10aGlzLl96LHM9dGhpcy5fdyxhPXMqdC5fdytpKnQuX3grcip0Ll95K28qdC5fejtpZihhPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3osYT0tYSk6dGhpcy5jb3B5KHQpLGE+PTEpcmV0dXJuIHRoaXMuX3c9cyx0aGlzLl94PWksdGhpcy5feT1yLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtYSphO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgaD0xLWU7cmV0dXJuIHRoaXMuX3c9aCpzK2UqdGhpcy5fdyx0aGlzLl94PWgqaStlKnRoaXMuX3gsdGhpcy5feT1oKnIrZSp0aGlzLl95LHRoaXMuX3o9aCpvK2UqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxhKSxkPU1hdGguc2luKCgxLWUpKnUpL2MscD1NYXRoLnNpbihlKnUpL2M7cmV0dXJuIHRoaXMuX3c9cypkK3RoaXMuX3cqcCx0aGlzLl94PWkqZCt0aGlzLl94KnAsdGhpcy5feT1yKmQrdGhpcy5feSpwLHRoaXMuX3o9bypkK3RoaXMuX3oqcCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQsZSxpKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKGUsaSl9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxlPU1hdGguc3FydCgxLXQpLGk9TWF0aC5zcXJ0KHQpLHI9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQoZSpNYXRoLmNvcyhyKSxpKk1hdGguc2luKG8pLGkqTWF0aC5jb3MobyksZSpNYXRoLnNpbihyKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLl94PXRbZV0sdGhpcy5feT10W2UrMV0sdGhpcy5fej10W2UrMl0sdGhpcy5fdz10W2UrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5feD10LmdldFgoZSksdGhpcy5feT10LmdldFkoZSksdGhpcy5fej10LmdldFooZSksdGhpcy5fdz10LmdldFcoZSksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07Q3MucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgJD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWl9c2V0KHQsZSxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxlKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54KmUueCx0aGlzLnk9dC55KmUueSx0aGlzLno9dC56KmUueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bM10qaStvWzZdKnIsdGhpcy55PW9bMV0qZStvWzRdKmkrb1s3XSpyLHRoaXMuej1vWzJdKmUrb1s1XSppK29bOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dC5lbGVtZW50cyxzPTEvKG9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0pKnMsdGhpcy55PShvWzFdKmUrb1s1XSppK29bOV0qcitvWzEzXSkqcyx0aGlzLno9KG9bMl0qZStvWzZdKmkrb1sxMF0qcitvWzE0XSkqcyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10Lngscz10LnksYT10LnosbD10LncsYz1sKmUrcypyLWEqaSx1PWwqaSthKmUtbypyLGQ9bCpyK28qaS1zKmUscD0tbyplLXMqaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrcCotbyt1Ki1hLWQqLXMsdGhpcy55PXUqbCtwKi1zK2QqLW8tYyotYSx0aGlzLno9ZCpsK3AqLWErYyotcy11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIsdGhpcy55PW9bMV0qZStvWzVdKmkrb1s5XSpyLHRoaXMuej1vWzJdKmUrb1s2XSppK29bMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1vKmEsdGhpcy55PW8qcy1pKmwsdGhpcy56PWkqYS1yKnMsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKDA9PT1lKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqNC5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihqNCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoajQuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoMD09PWUpcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoX2EoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyw0KmUpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsMyplKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiB2b2lkIDAhPT1pJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PTIqKE1hdGgucmFuZG9tKCktLjUpLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS10KioyKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19OyQucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgajQ9bmV3ICQsb2FlPW5ldyBDcyxKYT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkKDEvMCwxLzAsMS8wKSxlPW5ldyAkKC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5sZW5ndGg7bDxjO2wrPTMpe2xldCB1PXRbbF0sZD10W2wrMV0scD10W2wrMl07dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5jb3VudDtsPGM7bCsrKXtsZXQgdT10LmdldFgobCksZD10LmdldFkobCkscD10LmdldFoobCk7dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9am0uY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9c2V0RnJvbU9iamVjdCh0LGU9ITEpe3JldHVybiB0aGlzLm1ha2VFbXB0eSgpLHRoaXMuZXhwYW5kQnlPYmplY3QodCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYodm9pZCAwIT09aSlpZihlJiZudWxsIT1pLmF0dHJpYnV0ZXMmJnZvaWQgMCE9PWkuYXR0cmlidXRlcy5wb3NpdGlvbil7bGV0IG89aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGE9by5jb3VudDtzPGE7cysrKWptLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KGptKX1lbHNlIG51bGw9PT1pLmJvdW5kaW5nQm94JiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLEc0LmNvcHkoaS5ib3VuZGluZ0JveCksRzQuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oRzQpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltvXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLGptKSxqbS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoYU0pLGtSLnN1YlZlY3RvcnModGhpcy5tYXgsYU0pLHp2LnN1YlZlY3RvcnModC5hLGFNKSxqdi5zdWJWZWN0b3JzKHQuYixhTSksR3Yuc3ViVmVjdG9ycyh0LmMsYU0pLG1oLnN1YlZlY3RvcnMoanYsenYpLGdoLnN1YlZlY3RvcnMoR3YsanYpLEdtLnN1YlZlY3RvcnMoenYsR3YpO2xldCBlPVswLC1taC56LG1oLnksMCwtZ2gueixnaC55LDAsLUdtLnosR20ueSxtaC56LDAsLW1oLngsZ2gueiwwLC1naC54LEdtLnosMCwtR20ueCwtbWgueSxtaC54LDAsLWdoLnksZ2gueCwwLC1HbS55LEdtLngsMF07cmV0dXJuISghVzQoZSx6dixqdixHdixrUil8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIVc0KGUsenYsanYsR3Ysa1IpKSkmJihGUi5jcm9zc1ZlY3RvcnMobWgsZ2gpLGU9W0ZSLngsRlIueSxGUi56XSxXNChlLHp2LGp2LEd2LGtSKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gam0uY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGptKS5sZW5ndGgoKSx0fWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCl8fChrZFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoa2QpKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0phLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIGtkPVtuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJF0sam09bmV3ICQsRzQ9bmV3IEphLHp2PW5ldyAkLGp2PW5ldyAkLEd2PW5ldyAkLG1oPW5ldyAkLGdoPW5ldyAkLEdtPW5ldyAkLGFNPW5ldyAkLGtSPW5ldyAkLEZSPW5ldyAkLFdtPW5ldyAkO2Z1bmN0aW9uIFc0KG4sdCxlLGkscil7Zm9yKGxldCBvPTAscz1uLmxlbmd0aC0zO288PXM7bys9Myl7V20uZnJvbUFycmF5KG4sbyk7bGV0IGE9ci54Kk1hdGguYWJzKFdtLngpK3IueSpNYXRoLmFicyhXbS55KStyLnoqTWF0aC5hYnMoV20ueiksbD10LmRvdChXbSksYz1lLmRvdChXbSksdT1pLmRvdChXbSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIFA1ZT1uZXcgSmEsc2FlPW5ldyAkLE5SPW5ldyAkLHE0PW5ldyAkLEFoPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7dm9pZCAwIT09ZT9pLmNvcHkoZSk6UDVlLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10Lmxlbmd0aDtvPHM7bysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7cTQuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1xNC5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPS41KihpLXRoaXMucmFkaXVzKTt0aGlzLmNlbnRlci5hZGQocTQubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuITA9PT10aGlzLmNlbnRlci5lcXVhbHModC5jZW50ZXIpP05SLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOk5SLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoc2FlLmNvcHkodC5jZW50ZXIpLmFkZChOUikpLHRoaXMuZXhwYW5kQnlQb2ludChzYWUuY29weSh0LmNlbnRlcikuc3ViKE5SKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSxGZD1uZXcgJCxZND1uZXcgJCxMUj1uZXcgJCxfaD1uZXcgJCxYND1uZXcgJCxCUj1uZXcgJCxRND1uZXcgJCxJaD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsRmQpKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9RmQuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KEZkLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksRmQuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7WTQuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLExSLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLF9oLmNvcHkodGhpcy5vcmlnaW4pLnN1YihZNCk7bGV0IGQscCxoLGYsbz0uNSp0LmRpc3RhbmNlVG8oZSkscz0tdGhpcy5kaXJlY3Rpb24uZG90KExSKSxhPV9oLmRvdCh0aGlzLmRpcmVjdGlvbiksbD0tX2guZG90KExSKSxjPV9oLmxlbmd0aFNxKCksdT1NYXRoLmFicygxLXMqcyk7aWYodT4wKWlmKGQ9cypsLWEscD1zKmEtbCxmPW8qdSxkPj0wKWlmKHA+PS1mKWlmKHA8PWYpe2xldCBtPTEvdTtkKj1tLHAqPW0saD1kKihkK3MqcCsyKmEpK3AqKHMqZCtwKzIqbCkrY31lbHNlIHA9byxkPU1hdGgubWF4KDAsLShzKnArYSkpLGg9LWQqZCtwKihwKzIqbCkrYztlbHNlIHA9LW8sZD1NYXRoLm1heCgwLC0ocypwK2EpKSxoPS1kKmQrcCoocCsyKmwpK2M7ZWxzZSBwPD0tZj8oZD1NYXRoLm1heCgwLC0oLXMqbythKSkscD1kPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk6cDw9Zj8oZD0wLHA9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9cCoocCsyKmwpK2MpOihkPU1hdGgubWF4KDAsLShzKm8rYSkpLHA9ZD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk7ZWxzZSBwPXM+MD8tbzpvLGQ9TWF0aC5tYXgoMCwtKHMqcCthKSksaD0tZCpkK3AqKHArMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KExSKS5tdWx0aXBseVNjYWxhcihwKS5hZGQoWTQpLGh9aW50ZXJzZWN0U3BoZXJlKHQsZSl7RmQuc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9RmQuZG90KHRoaXMuZGlyZWN0aW9uKSxyPUZkLmRvdChGZCktaSppLG89dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5vKXJldHVybiBudWxsO2xldCBzPU1hdGguc3FydChvLXIpLGE9aS1zLGw9aStzO3JldHVybiBhPDAmJmw8MD9udWxsOnRoaXMuYXQoYTwwP2w6YSxlKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCBlPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWUpcmV0dXJuIDA9PT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2xldCBpPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9lO3JldHVybiBpPj0wP2k6bnVsbH1pbnRlcnNlY3RQbGFuZSh0LGUpe2xldCBpPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBudWxsPT09aT9udWxsOnRoaXMuYXQoaSxlKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGU9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiAwPT09ZXx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSplPDB9aW50ZXJzZWN0Qm94KHQsZSl7bGV0IGkscixvLHMsYSxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGQ9MS90aGlzLmRpcmVjdGlvbi56LHA9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KGk9KHQubWluLngtcC54KSpjLHI9KHQubWF4LngtcC54KSpjKTooaT0odC5tYXgueC1wLngpKmMscj0odC5taW4ueC1wLngpKmMpLHU+PTA/KG89KHQubWluLnktcC55KSp1LHM9KHQubWF4LnktcC55KSp1KToobz0odC5tYXgueS1wLnkpKnUscz0odC5taW4ueS1wLnkpKnUpLGk+c3x8bz5yfHwoKG8+aXx8aSE9aSkmJihpPW8pLChzPHJ8fHIhPXIpJiYocj1zKSxkPj0wPyhhPSh0Lm1pbi56LXAueikqZCxsPSh0Lm1heC56LXAueikqZCk6KGE9KHQubWF4LnotcC56KSpkLGw9KHQubWluLnotcC56KSpkKSxpPmx8fGE+cil8fCgoYT5pfHxpIT1pKSYmKGk9YSksKGw8cnx8ciE9cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveCh0LEZkKX1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLG8pe1g0LnN1YlZlY3RvcnMoZSx0KSxCUi5zdWJWZWN0b3JzKGksdCksUTQuY3Jvc3NWZWN0b3JzKFg0LEJSKTtsZXQgYSxzPXRoaXMuZGlyZWN0aW9uLmRvdChRNCk7aWYocz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNle2lmKCEoczwwKSlyZXR1cm4gbnVsbDthPS0xLHM9LXN9X2guc3ViVmVjdG9ycyh0aGlzLm9yaWdpbix0KTtsZXQgbD1hKnRoaXMuZGlyZWN0aW9uLmRvdChCUi5jcm9zc1ZlY3RvcnMoX2gsQlIpKTtpZihsPDApcmV0dXJuIG51bGw7bGV0IGM9YSp0aGlzLmRpcmVjdGlvbi5kb3QoWDQuY3Jvc3MoX2gpKTtpZihjPDB8fGwrYz5zKXJldHVybiBudWxsO2xldCB1PS1hKl9oLmRvdChRNCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9zLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19LE1uPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtsZXQgXz10aGlzLmVsZW1lbnRzO3JldHVybiBfWzBdPXQsX1s0XT1lLF9bOF09aSxfWzEyXT1yLF9bMV09byxfWzVdPXMsX1s5XT1hLF9bMTNdPWwsX1syXT1jLF9bNl09dSxfWzEwXT1kLF9bMTRdPXAsX1szXT1oLF9bN109ZixfWzExXT1tLF9bMTVdPUMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyBNbikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLGVbOV09aVs5XSxlWzEwXT1pWzEwXSxlWzExXT1pWzExXSxlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSxlWzE1XT1pWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxpLngsMCx0LnksZS55LGkueSwwLHQueixlLnosaS56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHMscj0xL1d2LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxvPTEvV3Yuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHM9MS9Xdi5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIGVbMF09aVswXSpyLGVbMV09aVsxXSpyLGVbMl09aVsyXSpyLGVbM109MCxlWzRdPWlbNF0qbyxlWzVdPWlbNV0qbyxlWzZdPWlbNl0qbyxlWzddPTAsZVs4XT1pWzhdKnMsZVs5XT1pWzldKnMsZVsxMF09aVsxMF0qcyxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lnoscz1NYXRoLmNvcyhpKSxhPU1hdGguc2luKGkpLGw9TWF0aC5jb3MociksYz1NYXRoLnNpbihyKSx1PU1hdGguY29zKG8pLGQ9TWF0aC5zaW4obyk7aWYoIlhZWiI9PT10Lm9yZGVyKXtsZXQgcD1zKnUsaD1zKmQsZj1hKnUsbT1hKmQ7ZVswXT1sKnUsZVs0XT0tbCpkLGVbOF09YyxlWzFdPWgrZipjLGVbNV09cC1tKmMsZVs5XT0tYSpsLGVbMl09bS1wKmMsZVs2XT1mK2gqYyxlWzEwXT1zKmx9ZWxzZSBpZigiWVhaIj09PXQub3JkZXIpe2xldCBwPWwqdSxoPWwqZCxmPWMqdSxtPWMqZDtlWzBdPXArbSphLGVbNF09ZiphLWgsZVs4XT1zKmMsZVsxXT1zKmQsZVs1XT1zKnUsZVs5XT0tYSxlWzJdPWgqYS1mLGVbNl09bStwKmEsZVsxMF09cypsfWVsc2UgaWYoIlpYWSI9PT10Lm9yZGVyKXtsZXQgcD1sKnUsaD1sKmQsZj1jKnUsbT1jKmQ7ZVswXT1wLW0qYSxlWzRdPS1zKmQsZVs4XT1mK2gqYSxlWzFdPWgrZiphLGVbNV09cyp1LGVbOV09bS1wKmEsZVsyXT0tcypjLGVbNl09YSxlWzEwXT1zKmx9ZWxzZSBpZigiWllYIj09PXQub3JkZXIpe2xldCBwPXMqdSxoPXMqZCxmPWEqdSxtPWEqZDtlWzBdPWwqdSxlWzRdPWYqYy1oLGVbOF09cCpjK20sZVsxXT1sKmQsZVs1XT1tKmMrcCxlWzldPWgqYy1mLGVbMl09LWMsZVs2XT1hKmwsZVsxMF09cypsfWVsc2UgaWYoIllaWCI9PT10Lm9yZGVyKXtsZXQgcD1zKmwsaD1zKmMsZj1hKmwsbT1hKmM7ZVswXT1sKnUsZVs0XT1tLXAqZCxlWzhdPWYqZCtoLGVbMV09ZCxlWzVdPXMqdSxlWzldPS1hKnUsZVsyXT0tYyp1LGVbNl09aCpkK2YsZVsxMF09cC1tKmR9ZWxzZSBpZigiWFpZIj09PXQub3JkZXIpe2xldCBwPXMqbCxoPXMqYyxmPWEqbCxtPWEqYztlWzBdPWwqdSxlWzRdPS1kLGVbOF09Yyp1LGVbMV09cCpkK20sZVs1XT1zKnUsZVs5XT1oKmQtZixlWzJdPWYqZC1oLGVbNl09YSp1LGVbMTBdPW0qZCtwfXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UoUjVlLHQsTzVlKX1sb29rQXQodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIFFhLnN1YlZlY3RvcnModCxlKSwwPT09UWEubGVuZ3RoU3EoKSYmKFFhLno9MSksUWEubm9ybWFsaXplKCksdmguY3Jvc3NWZWN0b3JzKGksUWEpLDA9PT12aC5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKGkueik/UWEueCs9MWUtNDpRYS56Kz0xZS00LFFhLm5vcm1hbGl6ZSgpLHZoLmNyb3NzVmVjdG9ycyhpLFFhKSksdmgubm9ybWFsaXplKCksVlIuY3Jvc3NWZWN0b3JzKFFhLHZoKSxyWzBdPXZoLngscls0XT1WUi54LHJbOF09UWEueCxyWzFdPXZoLnkscls1XT1WUi55LHJbOV09UWEueSxyWzJdPXZoLnoscls2XT1WUi56LHJbMTBdPVFhLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LGUpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxzPWlbMF0sYT1pWzRdLGw9aVs4XSxjPWlbMTJdLHU9aVsxXSxkPWlbNV0scD1pWzldLGg9aVsxM10sZj1pWzJdLG09aVs2XSxDPWlbMTBdLF89aVsxNF0seT1pWzNdLEk9aVs3XSxBPWlbMTFdLE89aVsxNV0sZWU9clswXSxYPXJbNF0seGU9cls4XSxmZT1yWzEyXSx2ZT1yWzFdLFQ9cls1XSxuZT1yWzldLGxlPXJbMTNdLGhlPXJbMl0seWU9cls2XSxKPXJbMTBdLGFlPXJbMTRdLG1lPXJbM10samU9cls3XSxNZT1yWzExXSxGZT1yWzE1XTtyZXR1cm4gb1swXT1zKmVlK2EqdmUrbCpoZStjKm1lLG9bNF09cypYK2EqVCtsKnllK2MqamUsb1s4XT1zKnhlK2EqbmUrbCpKK2MqTWUsb1sxMl09cypmZSthKmxlK2wqYWUrYypGZSxvWzFdPXUqZWUrZCp2ZStwKmhlK2gqbWUsb1s1XT11KlgrZCpUK3AqeWUraCpqZSxvWzldPXUqeGUrZCpuZStwKkoraCpNZSxvWzEzXT11KmZlK2QqbGUrcCphZStoKkZlLG9bMl09ZiplZSttKnZlK0MqaGUrXyptZSxvWzZdPWYqWCttKlQrQyp5ZStfKmplLG9bMTBdPWYqeGUrbSpuZStDKkorXypNZSxvWzE0XT1mKmZlK20qbGUrQyphZStfKkZlLG9bM109eSplZStJKnZlK0EqaGUrTyptZSxvWzddPXkqWCtJKlQrQSp5ZStPKmplLG9bMTFdPXkqeGUrSSpuZStBKkorTypNZSxvWzE1XT15KmZlK0kqbGUrQSphZStPKkZlLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGQ9dFs2XSxwPXRbMTBdLGg9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqZC1yKmMqZC1vKmEqcCtpKmMqcCtyKmEqaC1pKmwqaCkrdFs3XSooK2UqbCpoLWUqYypwK28qcypwLXIqcypoK3IqYyp1LW8qbCp1KSt0WzExXSooK2UqYypkLWUqYSpoLW8qcypkK2kqcypoK28qYSp1LWkqYyp1KSt0WzE1XSooLXIqYSp1LWUqbCpkK2UqYSpwK3IqcypkLWkqcypwK2kqbCp1KX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGY9dFsxMl0sbT10WzEzXSxDPXRbMTRdLF89dFsxNV0seT1kKkMqYy1tKnAqYyttKmwqaC1hKkMqaC1kKmwqXythKnAqXyxJPWYqcCpjLXUqQypjLWYqbCpoK3MqQypoK3UqbCpfLXMqcCpfLEE9dSptKmMtZipkKmMrZiphKmgtcyptKmgtdSphKl8rcypkKl8sTz1mKmQqbC11Km0qbC1mKmEqcCtzKm0qcCt1KmEqQy1zKmQqQyxlZT1lKnkraSpJK3IqQStvKk87aWYoMD09PWVlKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgWD0xL2VlO3JldHVybiB0WzBdPXkqWCx0WzFdPShtKnAqby1kKkMqby1tKnIqaCtpKkMqaCtkKnIqXy1pKnAqXykqWCx0WzJdPShhKkMqby1tKmwqbyttKnIqYy1pKkMqYy1hKnIqXytpKmwqXykqWCx0WzNdPShkKmwqby1hKnAqby1kKnIqYytpKnAqYythKnIqaC1pKmwqaCkqWCx0WzRdPUkqWCx0WzVdPSh1KkMqby1mKnAqbytmKnIqaC1lKkMqaC11KnIqXytlKnAqXykqWCx0WzZdPShmKmwqby1zKkMqby1mKnIqYytlKkMqYytzKnIqXy1lKmwqXykqWCx0WzddPShzKnAqby11Kmwqbyt1KnIqYy1lKnAqYy1zKnIqaCtlKmwqaCkqWCx0WzhdPUEqWCx0WzldPShmKmQqby11Km0qby1mKmkqaCtlKm0qaCt1KmkqXy1lKmQqXykqWCx0WzEwXT0ocyptKm8tZiphKm8rZippKmMtZSptKmMtcyppKl8rZSphKl8pKlgsdFsxMV09KHUqYSpvLXMqZCpvLXUqaSpjK2UqZCpjK3MqaSpoLWUqYSpoKSpYLHRbMTJdPU8qWCx0WzEzXT0odSptKnItZipkKnIrZippKnAtZSptKnAtdSppKkMrZSpkKkMpKlgsdFsxNF09KGYqYSpyLXMqbSpyLWYqaSpsK2UqbSpsK3MqaSpDLWUqYSpDKSpYLHRbMTVdPShzKmQqci11KmEqcit1KmkqbC1lKmQqbC1zKmkqcCtlKmEqcCkqWCx0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyx1PW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCx1KmEraSx1KmwtcipzLDAsYypsLXIqYSx1KmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyx1PXMrcyxkPWErYSxwPW8qYyxoPW8qdSxmPW8qZCxtPXMqdSxDPXMqZCxfPWEqZCx5PWwqYyxJPWwqdSxBPWwqZCxPPWkueCxlZT1pLnksWD1pLno7cmV0dXJuIHJbMF09KDEtKG0rXykpKk8sclsxXT0oaCtBKSpPLHJbMl09KGYtSSkqTyxyWzNdPTAscls0XT0oaC1BKSplZSxyWzVdPSgxLShwK18pKSplZSxyWzZdPShDK3kpKmVlLHJbN109MCxyWzhdPShmK0kpKlgscls5XT0oQy15KSpYLHJbMTBdPSgxLShwK20pKSpYLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPVd2LnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCkscz1Xdi5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9V3Yuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxSYy5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvcyxkPTEvYTtyZXR1cm4gUmMuZWxlbWVudHNbMF0qPWMsUmMuZWxlbWVudHNbMV0qPWMsUmMuZWxlbWVudHNbMl0qPWMsUmMuZWxlbWVudHNbNF0qPXUsUmMuZWxlbWVudHNbNV0qPXUsUmMuZWxlbWVudHNbNl0qPXUsUmMuZWxlbWVudHNbOF0qPWQsUmMuZWxlbWVudHNbOV0qPWQsUmMuZWxlbWVudHNbMTBdKj1kLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJjKSxpLng9byxpLnk9cyxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLG8scyl7dm9pZCAwPT09cyYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxjPTIqby8oaS1yKSx1PShlK3QpLyhlLXQpLGQ9KGkrcikvKGktcikscD0tKHMrbykvKHMtbyksaD0tMipzKm8vKHMtbyk7cmV0dXJuIGFbMF09MipvLyhlLXQpLGFbNF09MCxhWzhdPXUsYVsxMl09MCxhWzFdPTAsYVs1XT1jLGFbOV09ZCxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09cCxhWzE0XT1oLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLGkscixvLHMpe2xldCBhPXRoaXMuZWxlbWVudHMsbD0xLyhlLXQpLGM9MS8oaS1yKSx1PTEvKHMtbyksZD0oZSt0KSpsLHA9KGkrcikqYyxoPShzK28pKnU7cmV0dXJuIGFbMF09MipsLGFbNF09MCxhWzhdPTAsYVsxMl09LWQsYVsxXT0wLGFbNV09MipjLGFbOV09MCxhWzEzXT0tcCxhWzJdPTAsYVs2XT0wLGFbMTBdPS0yKnUsYVsxNF09LWgsYVszXT0wLGFbN109MCxhWzExXT0wLGFbMTVdPTEsdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjwxNjtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDE2O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdFtlKzldPWlbOV0sdFtlKzEwXT1pWzEwXSx0W2UrMTFdPWlbMTFdLHRbZSsxMl09aVsxMl0sdFtlKzEzXT1pWzEzXSx0W2UrMTRdPWlbMTRdLHRbZSsxNV09aVsxNV0sdH19O01uLnByb3RvdHlwZS5pc01hdHJpeDQ9ITA7dmFyIFd2PW5ldyAkLFJjPW5ldyBNbixSNWU9bmV3ICQoMCwwLDApLE81ZT1uZXcgJCgxLDEsMSksdmg9bmV3ICQsVlI9bmV3ICQsUWE9bmV3ICQsYWFlPW5ldyBNbixsYWU9bmV3IENzLFBoPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9UGguRGVmYXVsdE9yZGVyKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX29yZGVyKX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQuX3gsdGhpcy5feT10Ll95LHRoaXMuX3o9dC5feix0aGlzLl9vcmRlcj10Ll9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCxlPXRoaXMuX29yZGVyLGk9ITApe2xldCByPXQuZWxlbWVudHMsbz1yWzBdLHM9cls0XSxhPXJbOF0sbD1yWzFdLGM9cls1XSx1PXJbOV0sZD1yWzJdLHA9cls2XSxoPXJbMTBdO3N3aXRjaChlKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4oX2EoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxoKSx0aGlzLl96PU1hdGguYXRhbjIoLXMsbykpOih0aGlzLl94PU1hdGguYXRhbjIocCxjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtX2EodSwtMSwxKSksTWF0aC5hYnModSk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMihhLGgpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGMpKToodGhpcy5feT1NYXRoLmF0YW4yKC1kLG8pLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9TWF0aC5hc2luKF9hKHAsLTEsMSkpLE1hdGguYWJzKHApPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLWQsaCksdGhpcy5fej1NYXRoLmF0YW4yKC1zLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLV9hKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxoKSx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLXMsYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihfYShsLC0xLDEpKSxNYXRoLmFicyhsKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGMpLHRoaXMuX3k9TWF0aC5hdGFuMigtZCxvKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoYSxoKSk7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3o9TWF0aC5hc2luKC1fYShzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5feT1NYXRoLmF0YW4yKGEsbykpOih0aGlzLl94PU1hdGguYXRhbjIoLXUsaCksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLCEwPT09aSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLGkpe3JldHVybiBhYWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoYWFlLGUsaSl9c2V0RnJvbVZlY3RvcjModCxlPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5zZXQodC54LHQueSx0LnosZSl9cmVvcmRlcih0KXtyZXR1cm4gbGFlLnNldEZyb21FdWxlcih0aGlzKSx0aGlzLnNldEZyb21RdWF0ZXJuaW9uKGxhZSx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx2b2lkIDAhPT10WzNdJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyAkKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07UGgucHJvdG90eXBlLmlzRXVsZXI9ITAsUGguRGVmYXVsdE9yZGVyPSJYWVoiLFBoLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIF8yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxrNWU9MCxjYWU9bmV3ICQscXY9bmV3IENzLE5kPW5ldyBNbixIUj1uZXcgJCxsTT1uZXcgJCxGNWU9bmV3ICQsTjVlPW5ldyBDcyx1YWU9bmV3ICQoMSwwLDApLGRhZT1uZXcgJCgwLDEsMCkscGFlPW5ldyAkKDAsMCwxKSxMNWU9e3R5cGU6ImFkZGVkIn0saGFlPXt0eXBlOiJyZW1vdmVkIn0sR2k9Y2xhc3MgZXh0ZW5kcyBIZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6azVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJPYmplY3QzRCIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMudXA9R2kuRGVmYXVsdFVwLmNsb25lKCk7bGV0IHQ9bmV3ICQsZT1uZXcgUGgsaT1uZXcgQ3Mscj1uZXcgJCgxLDEsMSk7ZS5fb25DaGFuZ2UoZnVuY3Rpb24oKXtpLnNldEZyb21FdWxlcihlLCExKX0pLGkuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBNbn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgUG99fSksdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMubWF0cml4V29ybGQ9bmV3IE1uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT1HaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IF8yLHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319b25CZWZvcmVSZW5kZXIoKXt9b25BZnRlclJlbmRlcigpe31hcHBseU1hdHJpeDQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX1hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0KSx0aGlzfXNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZSh0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9c2V0Um90YXRpb25Gcm9tRXVsZXIodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX1zZXRSb3RhdGlvbkZyb21NYXRyaXgodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KX1zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfXJvdGF0ZU9uQXhpcyh0LGUpe3JldHVybiBxdi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KHF2KSx0aGlzfXJvdGF0ZU9uV29ybGRBeGlzKHQsZSl7cmV0dXJuIHF2LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXModWFlLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGRhZSx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhwYWUsdCl9dHJhbnNsYXRlT25BeGlzKHQsZSl7cmV0dXJuIGNhZS5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGNhZS5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1YWUsdCl9dHJhbnNsYXRlWSh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoZGFlLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHBhZSx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9IUi5jb3B5KHQpOkhSLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksbE0uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9OZC5sb29rQXQobE0sSFIsdGhpcy51cCk6TmQubG9va0F0KEhSLGxNLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoTmQpLHImJihOZC5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCkscXYuc2V0RnJvbVJvdGF0aW9uTWF0cml4KE5kKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChMNWUpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7cmV0dXJuIHRoaXN9bGV0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoaGFlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIG51bGwhPT10JiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCBlPXRoaXMuY2hpbGRyZW5bdF07ZS5wYXJlbnQ9bnVsbCxlLmRpc3BhdGNoRXZlbnQoaGFlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChOZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSx0LEY1ZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSxONWUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksdT1zKHQuaW1hZ2VzKSxkPXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksaD1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGQubGVuZ3RoPjAmJihpLnNoYXBlcz1kKSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksaC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1oKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07R2kuRGVmYXVsdFVwPW5ldyAkKDAsMSwwKSxHaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMCxHaS5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgT2M9bmV3ICQsTGQ9bmV3ICQsSzQ9bmV3ICQsQmQ9bmV3ICQsWXY9bmV3ICQsWHY9bmV3ICQsZmFlPW5ldyAkLFo0PW5ldyAkLEo0PW5ldyAkLCQ0PW5ldyAkLEtyPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLE9jLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKE9jKTtsZXQgbz1yLmxlbmd0aFNxKCk7cmV0dXJuIG8+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KG8pKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLG8pe09jLnN1YlZlY3RvcnMocixlKSxMZC5zdWJWZWN0b3JzKGksZSksSzQuc3ViVmVjdG9ycyh0LGUpO2xldCBzPU9jLmRvdChPYyksYT1PYy5kb3QoTGQpLGw9T2MuZG90KEs0KSxjPUxkLmRvdChMZCksdT1MZC5kb3QoSzQpLGQ9cypjLWEqYTtpZigwPT09ZClyZXR1cm4gby5zZXQoLTIsLTEsLTEpO2xldCBwPTEvZCxoPShjKmwtYSp1KSpwLGY9KHMqdS1hKmwpKnA7cmV0dXJuIG8uc2V0KDEtaC1mLGYsaCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsQmQpLEJkLng+PTAmJkJkLnk+PTAmJkJkLngrQmQueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixCZCksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihvLEJkLngpLGwuYWRkU2NhbGVkVmVjdG9yKHMsQmQueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxCZC56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBPYy5zdWJWZWN0b3JzKGksZSksTGQuc3ViVmVjdG9ycyh0LGUpLE9jLmNyb3NzKExkKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBPYy5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLExkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksLjUqT2MuY3Jvc3MoTGQpLmxlbmd0aCgpfWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIEtyLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiBLci5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlKX1nZXRVVih0LGUsaSxyLG8pe3JldHVybiBLci5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsaSxyLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIEtyLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gS3IuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7bGV0IHMsYSxpPXRoaXMuYSxyPXRoaXMuYixvPXRoaXMuYztZdi5zdWJWZWN0b3JzKHIsaSksWHYuc3ViVmVjdG9ycyhvLGkpLFo0LnN1YlZlY3RvcnModCxpKTtsZXQgbD1Zdi5kb3QoWjQpLGM9WHYuZG90KFo0KTtpZihsPD0wJiZjPD0wKXJldHVybiBlLmNvcHkoaSk7SjQuc3ViVmVjdG9ycyh0LHIpO2xldCB1PVl2LmRvdChKNCksZD1Ydi5kb3QoSjQpO2lmKHU+PTAmJmQ8PXUpcmV0dXJuIGUuY29weShyKTtsZXQgcD1sKmQtdSpjO2lmKHA8PTAmJmw+PTAmJnU8PTApcmV0dXJuIHM9bC8obC11KSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpOyQ0LnN1YlZlY3RvcnModCxvKTtsZXQgaD1Zdi5kb3QoJDQpLGY9WHYuZG90KCQ0KTtpZihmPj0wJiZoPD1mKXJldHVybiBlLmNvcHkobyk7bGV0IG09aCpjLWwqZjtpZihtPD0wJiZjPj0wJiZmPD0wKXJldHVybiBhPWMvKGMtZiksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihYdixhKTtsZXQgQz11KmYtaCpkO2lmKEM8PTAmJmQtdT49MCYmaC1mPj0wKXJldHVybiBmYWUuc3ViVmVjdG9ycyhvLHIpLGE9KGQtdSkvKGQtdSsoaC1mKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihmYWUsYSk7bGV0IF89MS8oQyttK3ApO3JldHVybiBzPW0qXyxhPXAqXyxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpLmFkZFNjYWxlZFZlY3RvcihYdixhKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxCNWU9MCxYbz1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpCNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPTEsdGhpcy5zaWRlPTAsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPTIwNCx0aGlzLmJsZW5kRHN0PTIwNSx0aGlzLmJsZW5kRXF1YXRpb249MTAwLHRoaXMuYmxlbmRTcmNBbHBoYT1udWxsLHRoaXMuYmxlbmREc3RBbHBoYT1udWxsLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPW51bGwsdGhpcy5kZXB0aEZ1bmM9Myx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD03NjgwLHRoaXMuc3RlbmNpbFpGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWlBhc3M9NzY4MCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih2b2lkIDAhPT10KWZvcihsZXQgZSBpbiB0KXtsZXQgaT10W2VdO2lmKHZvaWQgMD09PWkpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1pO2NvbnRpbnVlfWxldCByPXRoaXNbZV07dm9pZCAwIT09cj9yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWk6Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2Z1bmN0aW9uIHIobyl7bGV0IHM9W107Zm9yKGxldCBhIGluIG8pe2xldCBsPW9bYV07ZGVsZXRlIGwubWV0YWRhdGEscy5wdXNoKGwpfXJldHVybiBzfWlmKGkudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdm9pZCAwIT09dGhpcy5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdm9pZCAwIT09dGhpcy5zaGVlbiYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hlZW5Sb3VnaG5lc3MmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zcGVjdWxhckludGVuc2l0eSYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0JiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx2b2lkIDAhPT10aGlzLmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10aGlzLnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10aGlzLnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy50cmFuc21pc3Npb24mJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRoaWNrbmVzcyYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25Db2xvciYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2l6ZSYmKGkuc2l6ZT10aGlzLnNpemUpLG51bGwhPT10aGlzLnNoYWRvd1NpZGUmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSwxIT09dGhpcy5ibGVuZGluZyYmKGkuYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksMCE9PXRoaXMuc2lkZSYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksITA9PT10aGlzLnRyYW5zcGFyZW50JiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiYwIT09dGhpcy5yb3RhdGlvbiYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJihpLnBvbHlnb25PZmZzZXQ9ITApLDAhPT10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3ImJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJjEhPT10aGlzLmxpbmV3aWR0aCYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx2b2lkIDAhPT10aGlzLmRhc2hTaXplJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx2b2lkIDAhPT10aGlzLmdhcFNpemUmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx2b2lkIDAhPT10aGlzLnNjYWxlJiYoaS5zY2FsZT10aGlzLnNjYWxlKSwhMD09PXRoaXMuZGl0aGVyaW5nJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksITA9PT10aGlzLmFscGhhVG9Db3ZlcmFnZSYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSwhMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLCEwPT09dGhpcy53aXJlZnJhbWUmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLCEwPT09dGhpcy5mbGF0U2hhZGluZyYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksITE9PT10aGlzLnZpc2libGUmJihpLnZpc2libGU9ITEpLCExPT09dGhpcy50b25lTWFwcGVkJiYoaS50b25lTWFwcGVkPSExKSwie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGUpe2xldCBvPXIodC50ZXh0dXJlcykscz1yKHQuaW1hZ2VzKTtvLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1vKSxzLmxlbmd0aD4wJiYoaS5pbWFnZXM9cyl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgZT10LmNsaXBwaW5nUGxhbmVzLGk9bnVsbDtpZihudWxsIT09ZSl7bGV0IHI9ZS5sZW5ndGg7aT1uZXcgQXJyYXkocik7Zm9yKGxldCBvPTA7byE9PXI7KytvKWlbb109ZVtvXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPWksdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O1hvLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBLbT1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtLbS5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgZnI9bmV3ICQsVVI9bmV3IEplLExyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9TU0sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgYW4pLGVbaSsrXT1zLnIsZVtpKytdPXMuZyxlW2krK109cy5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgSmUpLGVbaSsrXT1zLngsZVtpKytdPXMueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3ICQpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgdHIpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56LGVbaSsrXT1zLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKDI9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKVVSLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxVUi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLFVSLngsVVIueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksZnIuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsZnIueCxmci55LGZyLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci54PXRoaXMuZ2V0WChlKSxmci55PXRoaXMuZ2V0WShlKSxmci56PXRoaXMuZ2V0WihlKSxmci5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspZnIueD10aGlzLmdldFgoZSksZnIueT10aGlzLmdldFkoZSksZnIuej10aGlzLmdldFooZSksZnIuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWZyLng9dGhpcy5nZXRYKGUpLGZyLnk9dGhpcy5nZXRZKGUpLGZyLno9dGhpcy5nZXRaKGUpLGZyLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLGZyLngsZnIueSxmci56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIsbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PU1NJiYodC51c2FnZT10aGlzLnVzYWdlKSwoMCE9PXRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0fHwtMSE9PXRoaXMudXBkYXRlUmFuZ2UuY291bnQpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07THIucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciB2Mj1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19LHkyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxlLGkpfX07KGNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0pLnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19LFY1ZT0wLGtsPW5ldyBNbixlVT1uZXcgR2ksUXY9bmV3ICQsS2E9bmV3IEphLGNNPW5ldyBKYSxZbz1uZXcgJCxLaT1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpWNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhtbGUodCk/eTI6djIpKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgUG8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31yb3RhdGVZKHQpe3JldHVybiBrbC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGtsKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIGtsLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4ga2wubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIGtsLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9bG9va0F0KHQpe3JldHVybiBlVS5sb29rQXQodCksZVUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoZVUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKFF2KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShRdi54LFF2LnksUXYueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgSmEpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3ICQoLTEvMCwtMS8wLC0xLzApLG5ldyAkKDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKUthLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtpXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixLYS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbyksWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxLYS5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgQWgpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3ICQsMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihLYS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAscz1lLmxlbmd0aDtvPHM7bysrKWNNLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyhLYS5taW4sY00ubWluKSxLYS5leHBhbmRCeVBvaW50KFlvKSxZby5hZGRWZWN0b3JzKEthLm1heCxjTS5tYXgpLEthLmV4cGFuZEJ5UG9pbnQoWW8pKTooS2EuZXhwYW5kQnlQb2ludChjTS5taW4pLEthLmV4cGFuZEJ5UG9pbnQoY00ubWF4KSk7S2EuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10LmNvdW50O288cztvKyspWW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSk7aWYoZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspe2xldCBhPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9YS5jb3VudDtjPHU7YysrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxsJiYoUXYuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLFlvLmFkZChRdikpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXkscz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgTHIobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgdmU9MDt2ZTxhO3ZlKyspY1t2ZV09bmV3ICQsdVt2ZV09bmV3ICQ7bGV0IGQ9bmV3ICQscD1uZXcgJCxoPW5ldyAkLGY9bmV3IEplLG09bmV3IEplLEM9bmV3IEplLF89bmV3ICQseT1uZXcgJDtmdW5jdGlvbiBJKHZlLFQsbmUpe2QuZnJvbUFycmF5KHIsMyp2ZSkscC5mcm9tQXJyYXkociwzKlQpLGguZnJvbUFycmF5KHIsMypuZSksZi5mcm9tQXJyYXkocywyKnZlKSxtLmZyb21BcnJheShzLDIqVCksQy5mcm9tQXJyYXkocywyKm5lKSxwLnN1YihkKSxoLnN1YihkKSxtLnN1YihmKSxDLnN1YihmKTtsZXQgbGU9MS8obS54KkMueS1DLngqbS55KTshaXNGaW5pdGUobGUpfHwoXy5jb3B5KHApLm11bHRpcGx5U2NhbGFyKEMueSkuYWRkU2NhbGVkVmVjdG9yKGgsLW0ueSkubXVsdGlwbHlTY2FsYXIobGUpLHkuY29weShoKS5tdWx0aXBseVNjYWxhcihtLngpLmFkZFNjYWxlZFZlY3RvcihwLC1DLngpLm11bHRpcGx5U2NhbGFyKGxlKSxjW3ZlXS5hZGQoXyksY1tUXS5hZGQoXyksY1tuZV0uYWRkKF8pLHVbdmVdLmFkZCh5KSx1W1RdLmFkZCh5KSx1W25lXS5hZGQoeSkpfWxldCBBPXRoaXMuZ3JvdXBzOzA9PT1BLmxlbmd0aCYmKEE9W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgdmU9MCxUPUEubGVuZ3RoO3ZlPFQ7Kyt2ZSl7bGV0IG5lPUFbdmVdLGxlPW5lLnN0YXJ0O2ZvcihsZXQgeWU9bGUsSj1sZStuZS5jb3VudDt5ZTxKO3llKz0zKUkoaVt5ZSswXSxpW3llKzFdLGlbeWUrMl0pfWxldCBPPW5ldyAkLGVlPW5ldyAkLFg9bmV3ICQseGU9bmV3ICQ7ZnVuY3Rpb24gZmUodmUpe1guZnJvbUFycmF5KG8sMyp2ZSkseGUuY29weShYKTtsZXQgVD1jW3ZlXTtPLmNvcHkoVCksTy5zdWIoWC5tdWx0aXBseVNjYWxhcihYLmRvdChUKSkpLm5vcm1hbGl6ZSgpLGVlLmNyb3NzVmVjdG9ycyh4ZSxUKTtsZXQgbGU9ZWUuZG90KHVbdmVdKTwwPy0xOjE7bFs0KnZlXT1PLngsbFs0KnZlKzFdPU8ueSxsWzQqdmUrMl09Ty56LGxbNCp2ZSszXT1sZX1mb3IobGV0IHZlPTAsVD1BLmxlbmd0aDt2ZTxUOysrdmUpe2xldCBuZT1BW3ZlXSxsZT1uZS5zdGFydDtmb3IobGV0IHllPWxlLEo9bGUrbmUuY291bnQ7eWU8Sjt5ZSs9MylmZShpW3llKzBdKSxmZShpW3llKzFdKSxmZShpW3llKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgTHIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsaD1pLmNvdW50O3A8aDtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3ICQsbz1uZXcgJCxzPW5ldyAkLGE9bmV3ICQsbD1uZXcgJCxjPW5ldyAkLHU9bmV3ICQsZD1uZXcgJDtpZih0KWZvcihsZXQgcD0wLGg9dC5jb3VudDtwPGg7cCs9Myl7bGV0IGY9dC5nZXRYKHArMCksbT10LmdldFgocCsxKSxDPXQuZ2V0WChwKzIpO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLEMpLHUuc3ViVmVjdG9ycyhzLG8pLGQuc3ViVmVjdG9ycyhyLG8pLHUuY3Jvc3MoZCksYS5mcm9tQnVmZmVyQXR0cmlidXRlKGksZiksbC5mcm9tQnVmZmVyQXR0cmlidXRlKGksbSksYy5mcm9tQnVmZmVyQXR0cmlidXRlKGksQyksYS5hZGQodSksbC5hZGQodSksYy5hZGQodSksaS5zZXRYWVooZixhLngsYS55LGEueiksaS5zZXRYWVoobSxsLngsbC55LGwueiksaS5zZXRYWVooQyxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IHA9MCxoPWUuY291bnQ7cDxoO3ArPTMpci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzEpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMiksdS5zdWJWZWN0b3JzKHMsbyksZC5zdWJWZWN0b3JzKHIsbyksdS5jcm9zcyhkKSxpLnNldFhZWihwKzAsdS54LHUueSx1LnopLGkuc2V0WFlaKHArMSx1LngsdS55LHUueiksaS5zZXRYWVoocCsyLHUueCx1LnksdS56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxpLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgciBpbiBpKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbcl0pY29udGludWU7bGV0IHM9aVtyXS5hcnJheSxhPXQuYXR0cmlidXRlc1tyXSxsPWEuYXJyYXksYz1hLml0ZW1TaXplKmUsdT1NYXRoLm1pbihsLmxlbmd0aCxzLmxlbmd0aC1jKTtmb3IobGV0IGQ9MCxwPWM7ZDx1O2QrKyxwKyspc1twXT1sW2RdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLGk9dC5jb3VudDtlPGk7ZSsrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxZby5ub3JtYWxpemUoKSx0LnNldFhZWihlLFlvLngsWW8ueSxZby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KGEsbCl7bGV0IGM9YS5hcnJheSx1PWEuaXRlbVNpemUsZD1hLm5vcm1hbGl6ZWQscD1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCp1KSxoPTAsZj0wO2ZvcihsZXQgbT0wLEM9bC5sZW5ndGg7bTxDO20rKyl7aD1hLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bFttXSphLmRhdGEuc3RyaWRlK2Eub2Zmc2V0OmxbbV0qdTtmb3IobGV0IF89MDtfPHU7XysrKXBbZisrXT1jW2grK119cmV0dXJuIG5ldyBMcihwLHUsZCl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgS2ksaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgYz10KHJbYV0saSk7ZS5zZXRBdHRyaWJ1dGUoYSxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGEgaW4gbyl7bGV0IGw9W10sYz1vW2FdO2ZvcihsZXQgdT0wLGQ9Yy5sZW5ndGg7dTxkO3UrKyl7bGV0IGg9dChjW3VdLGkpO2wucHVzaChoKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgcz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2E8bDthKyspe2xldCBjPXNbYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpdm9pZCAwIT09bFtjXSYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl0LmRhdGEuYXR0cmlidXRlc1tsXT1pW2xdLnRvSlNPTih0LmRhdGEpO2xldCByPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgZD0wLHA9Yy5sZW5ndGg7ZDxwO2QrKyl1LnB1c2goY1tkXS50b0pTT04odC5kYXRhKSk7dS5sZW5ndGg+MCYmKHJbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgcz10aGlzLmdyb3VwcztzLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMpKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWEmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7bnVsbCE9PWkmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXRoaXMuc2V0QXR0cmlidXRlKGMscltjXS5jbG9uZShlKSk7bGV0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIG8pe2xldCB1PVtdLGQ9b1tjXTtmb3IobGV0IHA9MCxoPWQubGVuZ3RoO3A8aDtwKyspdS5wdXNoKGRbcF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPXV9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrKyl7bGV0IGQ9c1tjXTt0aGlzLmFkZEdyb3VwKGQuc3RhcnQsZC5jb3VudCxkLm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7bnVsbCE9PWEmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHZvaWQgMCE9PXQucGFyYW1ldGVycyYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O0tpLnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBtYWU9bmV3IE1uLEt2PW5ldyBJaCx0VT1uZXcgQWgseWg9bmV3ICQsYmg9bmV3ICQseGg9bmV3ICQsblU9bmV3ICQsaVU9bmV3ICQsclU9bmV3ICQselI9bmV3ICQsalI9bmV3ICQsR1I9bmV3ICQsV1I9bmV3IEplLHFSPW5ldyBKZSxZUj1uZXcgSmUsb1U9bmV3ICQsWFI9bmV3ICQseW89Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBLbSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgcyxpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdGVyaWFsLG89dGhpcy5tYXRyaXhXb3JsZDtpZih2b2lkIDAhPT1yJiYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdFUuY29weShpLmJvdW5kaW5nU3BoZXJlKSx0VS5hcHBseU1hdHJpeDQobyksITEhPT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKHRVKSkmJihtYWUuY29weShvKS5pbnZlcnQoKSxLdi5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQobWFlKSxudWxsPT09aS5ib3VuZGluZ0JveHx8ITEhPT1Ldi5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpKSlpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsZD1pLmF0dHJpYnV0ZXMudXYscD1pLmF0dHJpYnV0ZXMudXYyLGg9aS5ncm91cHMsZj1pLmRyYXdSYW5nZTtpZihudWxsIT09YSlpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbT0wLEM9aC5sZW5ndGg7bTxDO20rKyl7bGV0IF89aFttXSx5PXJbXy5tYXRlcmlhbEluZGV4XTtmb3IobGV0IE89TWF0aC5tYXgoXy5zdGFydCxmLnN0YXJ0KSxlZT1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKF8uc3RhcnQrXy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtPPGVlO08rPTMpe2xldCBYPWEuZ2V0WChPKSx4ZT1hLmdldFgoTysxKSxmZT1hLmdldFgoTysyKTtzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxYLHhlLGZlKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihPLzMpLHMuZmFjZS5tYXRlcmlhbEluZGV4PV8ubWF0ZXJpYWxJbmRleCxlLnB1c2gocykpfX1lbHNlIGZvcihsZXQgXz1NYXRoLm1heCgwLGYuc3RhcnQpLHk9TWF0aC5taW4oYS5jb3VudCxmLnN0YXJ0K2YuY291bnQpO188eTtfKz0zKXtsZXQgST1hLmdldFgoXyksQT1hLmdldFgoXysxKSxPPWEuZ2V0WChfKzIpO3M9UVIodGhpcyxyLHQsS3YsbCxjLHUsZCxwLEksQSxPKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihfLzMpLGUucHVzaChzKSl9ZWxzZSBpZih2b2lkIDAhPT1sKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBtPTAsQz1oLmxlbmd0aDttPEM7bSsrKXtsZXQgXz1oW21dLHk9cltfLm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgTz1NYXRoLm1heChfLnN0YXJ0LGYuc3RhcnQpLGVlPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oXy5zdGFydCtfLmNvdW50LGYuc3RhcnQrZi5jb3VudCkpO088ZWU7Tys9MylzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxPLE8rMSxPKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKE8vMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Xy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IF89TWF0aC5tYXgoMCxmLnN0YXJ0KSx5PU1hdGgubWluKGwuY291bnQsZi5zdGFydCtmLmNvdW50KTtfPHk7Xys9MylzPVFSKHRoaXMscix0LEt2LGwsYyx1LGQscCxfLF8rMSxfKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKF8vMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIFFSKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkKXt5aC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksYmguZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLHhoLmZyb21CdWZmZXJBdHRyaWJ1dGUocixkKTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXt6Ui5zZXQoMCwwLDApLGpSLnNldCgwLDAsMCksR1Iuc2V0KDAsMCwwKTtmb3IobGV0IGY9MCxtPW8ubGVuZ3RoO2Y8bTtmKyspe2xldCBDPXBbZl0sXz1vW2ZdOzAhPT1DJiYoblUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGMpLGlVLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyx1KSxyVS5mcm9tQnVmZmVyQXR0cmlidXRlKF8sZCkscz8oelIuYWRkU2NhbGVkVmVjdG9yKG5VLEMpLGpSLmFkZFNjYWxlZFZlY3RvcihpVSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUsQykpOih6Ui5hZGRTY2FsZWRWZWN0b3IoblUuc3ViKHloKSxDKSxqUi5hZGRTY2FsZWRWZWN0b3IoaVUuc3ViKGJoKSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUuc3ViKHhoKSxDKSkpfXloLmFkZCh6UiksYmguYWRkKGpSKSx4aC5hZGQoR1IpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLHloKSxuLmJvbmVUcmFuc2Zvcm0odSxiaCksbi5ib25lVHJhbnNmb3JtKGQseGgpKTtsZXQgaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9MT09PXQuc2lkZT9pLmludGVyc2VjdFRyaWFuZ2xlKHMsbyxyLCEwLGEpOmkuaW50ZXJzZWN0VHJpYW5nbGUocixvLHMsMiE9PXQuc2lkZSxhKSxudWxsPT09bClyZXR1cm4gbnVsbDtYUi5jb3B5KGEpLFhSLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhYUik7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6WFIuY2xvbmUoKSxvYmplY3Q6bn19KG4sdCxlLGkseWgsYmgseGgsb1UpO2lmKGgpe2EmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxkKSxoLnV2PUtyLmdldFVWKG9VLHloLGJoLHhoLFdSLHFSLFlSLG5ldyBKZSkpLGwmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxkKSxoLnV2Mj1Lci5nZXRVVihvVSx5aCxiaCx4aCxXUixxUixZUixuZXcgSmUpKTtsZXQgZj17YTpjLGI6dSxjOmQsbm9ybWFsOm5ldyAkLG1hdGVyaWFsSW5kZXg6MH07S3IuZ2V0Tm9ybWFsKHloLGJoLHhoLGYubm9ybWFsKSxoLmZhY2U9Zn1yZXR1cm4gaH15by5wcm90b3R5cGUuaXNNZXNoPSEwO3ZhciBabT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxvPTEscz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6c307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iociksbz1NYXRoLmZsb29yKG8pLHM9TWF0aC5mbG9vcihzKTtsZXQgbD1bXSxjPVtdLHU9W10sZD1bXSxwPTAsaD0wO2Z1bmN0aW9uIGYobSxDLF8seSxJLEEsTyxlZSxYLHhlLGZlKXtsZXQgdmU9QS9YLFQ9Ty94ZSxuZT1BLzIsbGU9Ty8yLGhlPWVlLzIseWU9WCsxLEo9eGUrMSxhZT0wLG1lPTAsamU9bmV3ICQ7Zm9yKGxldCBNZT0wO01lPEo7TWUrKyl7bGV0IEZlPU1lKlQtbGU7Zm9yKGxldCB1dD0wO3V0PHllO3V0KyspamVbbV09KHV0KnZlLW5lKSp5LGplW0NdPUZlKkksamVbX109aGUsYy5wdXNoKGplLngsamUueSxqZS56KSxqZVttXT0wLGplW0NdPTAsamVbX109ZWU+MD8xOi0xLHUucHVzaChqZS54LGplLnksamUueiksZC5wdXNoKHV0L1gpLGQucHVzaCgxLU1lL3hlKSxhZSs9MX1mb3IobGV0IE1lPTA7TWU8eGU7TWUrKylmb3IobGV0IEZlPTA7RmU8WDtGZSsrKXtsZXQgU3Q9cCtGZSt5ZSooTWUrMSksZ3Q9cCsoRmUrMSkreWUqKE1lKzEpLFJlPXArKEZlKzEpK3llKk1lO2wucHVzaChwK0ZlK3llKk1lLFN0LFJlKSxsLnB1c2goU3QsZ3QsUmUpLG1lKz02fWEuYWRkR3JvdXAoaCxtZSxmZSksaCs9bWUscCs9YWV9ZigieiIsInkiLCJ4IiwtMSwtMSxpLGUsdCxzLG8sMCksZigieiIsInkiLCJ4IiwxLC0xLGksZSwtdCxzLG8sMSksZigieCIsInoiLCJ5IiwxLDEsdCxpLGUscixzLDIpLGYoIngiLCJ6IiwieSIsMSwtMSx0LGksLWUscixzLDMpLGYoIngiLCJ5IiwieiIsMSwtMSx0LGUsaSxyLG8sNCksZigieCIsInkiLCJ6IiwtMSwtMSx0LGUsLWkscixvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKGQsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFptKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gZ3kobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07dFtlXVtpXT1yJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlfHxyLmlzUXVhdGVybmlvbik/ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOnJ9fXJldHVybiB0fWZ1bmN0aW9uIHlzKG4pe2xldCB0PXt9O2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1neShuW2VdKTtmb3IobGV0IHIgaW4gaSl0W3JdPWlbcl19cmV0dXJuIHR9dmFyIFU1ZT17Y2xvbmU6Z3ksbWVyZ2U6eXN9LHpkPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59Iix0aGlzLmZyYWdtZW50U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApO1xufSIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdm9pZCAwIT09dCYmKHZvaWQgMCE9PXQuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9Z3kodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgcz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO2UudW5pZm9ybXNbcl09cyYmcy5pc1RleHR1cmU/e3R5cGU6InQiLHZhbHVlOnMudG9KU09OKHQpLnV1aWR9OnMmJnMuaXNDb2xvcj97dHlwZToiYyIsdmFsdWU6cy5nZXRIZXgoKX06cyYmcy5pc1ZlY3RvcjI/e3R5cGU6InYyIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjM/e3R5cGU6InYzIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjQ/e3R5cGU6InY0Iix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTpzLnRvQXJyYXkoKX06e3ZhbHVlOnN9fU9iamVjdC5rZXlzKHRoaXMuZGVmaW5lcykubGVuZ3RoPjAmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKSxlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcixlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7bGV0IGk9e307Zm9yKGxldCByIGluIHRoaXMuZXh0ZW5zaW9ucykhMD09PXRoaXMuZXh0ZW5zaW9uc1tyXSYmKGlbcl09ITApO3JldHVybiBPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmKGUuZXh0ZW5zaW9ucz1pKSxlfX07emQucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWw9ITA7dmFyIFRNPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ2FtZXJhIix0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgTW4sdGhpcy5wcm9qZWN0aW9uTWF0cml4PW5ldyBNbix0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlPW5ldyBNbn1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHQubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLnByb2plY3Rpb25NYXRyaXguY29weSh0LnByb2plY3Rpb25NYXRyaXgpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSx0aGlzfWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KC1lWzhdLC1lWzldLC1lWzEwXSkubm9ybWFsaXplKCl9dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe3N1cGVyLnVwZGF0ZVdvcmxkTWF0cml4KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O1RNLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgeHM9Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj0yKndVKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKC41KkI0KnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiAyKndVKk1hdGguYXRhbihNYXRoLnRhbiguNSpCNCp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQsZSxpLHIsbyxzKXt0aGlzLmFzcGVjdD10L2UsbnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIsZT10Kk1hdGgudGFuKC41KkI0KnRoaXMuZm92KS90aGlzLnpvb20saT0yKmUscj10aGlzLmFzcGVjdCppLG89LS41KnIscz10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPXMuZnVsbFdpZHRoLGM9cy5mdWxsSGVpZ2h0O28rPXMub2Zmc2V0WCpyL2wsZS09cy5vZmZzZXRZKmkvYyxyKj1zLndpZHRoL2wsaSo9cy5oZWlnaHQvY31sZXQgYT10aGlzLmZpbG1PZmZzZXQ7MCE9PWEmJihvKz10KmEvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8rcixlLGUtaSx0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5mb3Y9dGhpcy5mb3YsZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLGUub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsZS5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZS5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLGUub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LGV9fTt4cy5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgRE09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLCEwIT09aS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTt0aGlzLnJlbmRlclRhcmdldD1pO2xldCByPW5ldyB4cyg5MCwxLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgJCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBvPW5ldyB4cyg5MCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgJCgtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgcz1uZXcgeHMoOTAsMSx0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsMCwxKSxzLmxvb2tBdChuZXcgJCgwLDEsMCkpLHRoaXMuYWRkKHMpO2xldCBhPW5ldyB4cyg5MCwxLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgJCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgeHMoOTAsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3ICQoMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgeHMoOTAsMSx0LGUpO2MubGF5ZXJzPXRoaXMubGF5ZXJzLGMudXAuc2V0KDAsLTEsMCksYy5sb29rQXQobmV3ICQoMCwwLC0xKSksdGhpcy5hZGQoYyl9dXBkYXRlKHQsZSl7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IGk9dGhpcy5yZW5kZXJUYXJnZXQsW3IsbyxzLGEsbCxjXT10aGlzLmNoaWxkcmVuLHU9dC54ci5lbmFibGVkLGQ9dC5nZXRSZW5kZXJUYXJnZXQoKTt0LnhyLmVuYWJsZWQ9ITE7bGV0IHA9aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExLHQuc2V0UmVuZGVyVGFyZ2V0KGksMCksdC5yZW5kZXIoZSxyKSx0LnNldFJlbmRlclRhcmdldChpLDEpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwyKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMyksdC5yZW5kZXIoZSxhKSx0LnNldFJlbmRlclRhcmdldChpLDQpLHQucmVuZGVyKGUsbCksaS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1wLHQuc2V0UmVuZGVyVGFyZ2V0KGksNSksdC5yZW5kZXIoZSxjKSx0LnNldFJlbmRlclRhcmdldChkKSx0LnhyLmVuYWJsZWQ9dSxpLnRleHR1cmUubmVlZHNQTVJFTVVwZGF0ZT0hMH19LF95PWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIodD12b2lkIDAhPT10P3Q6W10sZT12b2lkIDAhPT1lP2U6MzAxLGkscixvLHMsYSxsLGMsdSksdGhpcy5mbGlwWT0hMX1nZXQgaW1hZ2VzKCl7cmV0dXJuIHRoaXMuaW1hZ2V9c2V0IGltYWdlcyh0KXt0aGlzLmltYWdlPXR9fTtfeS5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMDt2YXIgYjI9Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApIiksZT1pKSxzdXBlcih0LHQsZSksdGhpcy50ZXh0dXJlPW5ldyBfeSh2b2lkIDAsKGU9ZXx8e30pLm1hcHBpbmcsZS53cmFwUyxlLndyYXBULGUubWFnRmlsdGVyLGUubWluRmlsdGVyLGUuZm9ybWF0LGUudHlwZSxlLmFuaXNvdHJvcHksZS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PWUuZ2VuZXJhdGVNaXBtYXBzJiZlLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWUubWluRmlsdGVyP2UubWluRmlsdGVyOmJzfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9enMsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGlfdW5pZm9ybXM9e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LGlfdmVydGV4U2hhZGVyPSJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsaV9mcmFnbWVudFNoYWRlcj0iXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHI9bmV3IFptKDUsNSw1KSxvPW5ldyB6ZCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6Z3koaV91bmlmb3JtcyksdmVydGV4U2hhZGVyOmlfdmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmlfZnJhZ21lbnRTaGFkZXIsc2lkZToxLGJsZW5kaW5nOjB9KTtvLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZT1lO2xldCBzPW5ldyB5byhyLG8pLGE9ZS5taW5GaWx0ZXI7cmV0dXJuIDEwMDg9PT1lLm1pbkZpbHRlciYmKGUubWluRmlsdGVyPWJzKSxuZXcgRE0oMSwxMCx0aGlzKS51cGRhdGUodCxzKSxlLm1pbkZpbHRlcj1hLHMuZ2VvbWV0cnkuZGlzcG9zZSgpLHMubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IHM9MDtzPDY7cysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMscyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtiMi5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIHNVPW5ldyAkLEc1ZT1uZXcgJCxXNWU9bmV3IFBvLGtjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9c1Uuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKEc1ZS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoc1UpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKDA9PT1yKXJldHVybiAwPT09dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCk/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gbzwwfHxvPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8VzVlLmdldE5vcm1hbE1hdHJpeCh0KSxyPXRoaXMuY29wbGFuYXJQb2ludChzVSkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1yLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O2tjLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciAkdj1uZXcgQWgsS1I9bmV3ICQsdnk9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcga2MsZT1uZXcga2MsaT1uZXcga2Mscj1uZXcga2Msbz1uZXcga2Mscz1uZXcga2Mpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGQ9aVs3XSxwPWlbOF0saD1pWzldLGY9aVsxMF0sbT1pWzExXSxDPWlbMTJdLF89aVsxM10seT1pWzE0XSxJPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGQtbCxtLXAsSS1DKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGQrbCxtK3AsSStDKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLGQrYyxtK2gsSStfKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLGQtYyxtLWgsSS1fKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLGQtdSxtLWYsSS15KS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLGQrdSxtK2YsSSt5KS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksJHYuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCR2KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiAkdi5jZW50ZXIuc2V0KDAsMCwwKSwkdi5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsJHYuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSgkdil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoS1IueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LEtSLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxLUi56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoS1IpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBnbGUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIHE1ZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgZD1pLmdldChjKTt2b2lkIDA9PT1kP2kuc2V0KGMsZnVuY3Rpb24oYyx1KXtsZXQgZD1jLmFycmF5LHA9Yy51c2FnZSxoPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsaCksbi5idWZmZXJEYXRhKHUsZCxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZj01MTI2O3JldHVybiBkIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Y9NTEyNjpkIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpkIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9mPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmY9NTEyMzpkIGluc3RhbmNlb2YgSW50MTZBcnJheT9mPTUxMjI6ZCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Y9NTEyNTpkIGluc3RhbmNlb2YgSW50MzJBcnJheT9mPTUxMjQ6ZCBpbnN0YW5jZW9mIEludDhBcnJheT9mPTUxMjA6KGQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxkIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZj01MTIxKSx7YnVmZmVyOmgsdHlwZTpmLGJ5dGVzUGVyRWxlbWVudDpkLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyx1KSk6ZC52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsdSxkKXtsZXQgcD11LmFycmF5LGg9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoZCxjKSwtMT09PWguY291bnQ/bi5idWZmZXJTdWJEYXRhKGQsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEoZCxoLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsaC5vZmZzZXQsaC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGQsaC5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K2guY291bnQpKSxoLmNvdW50PS0xKX0oZC5idWZmZXIsYyx1KSxkLnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBBTT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsdT1sKzEsZD10L2EscD1lL2wsaD1bXSxmPVtdLG09W10sQz1bXTtmb3IobGV0IF89MDtfPHU7XysrKXtsZXQgeT1fKnAtcztmb3IobGV0IEk9MDtJPGM7SSsrKWYucHVzaChJKmQtbywteSwwKSxtLnB1c2goMCwwLDEpLEMucHVzaChJL2EpLEMucHVzaCgxLV8vbCl9Zm9yKGxldCBfPTA7XzxsO18rKylmb3IobGV0IHk9MDt5PGE7eSsrKXtsZXQgQT15K2MqKF8rMSksTz15KzErYyooXysxKSxlZT15KzErYypfO2gucHVzaCh5K2MqXyxBLGVlKSxoLnB1c2goQSxPLGVlKX10aGlzLnNldEluZGV4KGgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBHcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBHcihDLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBBTSh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LGJpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sUHQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBQb30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEplKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBKZSguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99fX0sVXU9e2Jhc2ljOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuc3BlY3VsYXJtYXAsUHQuZW52bWFwLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmZvZyxQdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5lbWlzc2l2ZW1hcCxQdC5idW1wbWFwLFB0Lm5vcm1hbG1hcCxQdC5kaXNwbGFjZW1lbnRtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBhbigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5lbnZtYXAsUHQuYW9tYXAsUHQubGlnaHRtYXAsUHQuZW1pc3NpdmVtYXAsUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LnJvdWdobmVzc21hcCxQdC5tZXRhbG5lc3NtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmJ1bXBtYXAsUHQubm9ybWFsbWFwLFB0LmRpc3BsYWNlbWVudG1hcCxQdC5ncmFkaWVudG1hcCxQdC5mb2csUHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGFuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3Jtczp5cyhbUHQucG9pbnRzLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpiaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6YmkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3Jtczp5cyhbUHQuc3ByaXRlLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpiaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3Jtczp5cyhbUHQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YmkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3ICR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOnlzKFtQdC5saWdodHMsUHQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IGFuKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6Ymkuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6Ymkuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiB5VWUobix0LGUsaSxyLG8pe2xldCBsLGMscz1uZXcgYW4oMCksYT0hMD09PXI/MDoxLHU9bnVsbCxkPTAscD1udWxsO2Z1bmN0aW9uIGYobSxDKXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIobS5yLG0uZyxtLmIsQyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKG0sQz0xKXtzLnNldChtKSxhPUMsZihzLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24obSl7YT1tLGYocyxhKX0scmVuZGVyOmZ1bmN0aW9uKG0sQyl7bGV0IF89ITEseT0hMD09PUMuaXNTY2VuZT9DLmJhY2tncm91bmQ6bnVsbDt5JiZ5LmlzVGV4dHVyZSYmKHk9dC5nZXQoeSkpO2xldCBJPW4ueHIsQT1JLmdldFNlc3Npb24mJkkuZ2V0U2Vzc2lvbigpO0EmJiJhZGRpdGl2ZSI9PT1BLmVudmlyb25tZW50QmxlbmRNb2RlJiYoeT1udWxsKSxudWxsPT09eT9mKHMsYSk6eSYmeS5pc0NvbG9yJiYoZih5LDEpLF89ITApLChuLmF1dG9DbGVhcnx8XykmJm4uY2xlYXIobi5hdXRvQ2xlYXJDb2xvcixuLmF1dG9DbGVhckRlcHRoLG4uYXV0b0NsZWFyU3RlbmNpbCkseSYmKHkuaXNDdWJlVGV4dHVyZXx8MzA2PT09eS5tYXBwaW5nKT8odm9pZCAwPT09YyYmKGM9bmV3IHlvKG5ldyBabSgxLDEsMSksbmV3IHpkKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpneShVdS5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6VXUuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6VXUuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKE8sZWUsWCl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oWC5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXksYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXkuaXNDdWJlVGV4dHVyZSYmITE9PT15LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTp5JiZ5LmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyB5byhuZXcgQU0oMiwyKSxuZXcgemQoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6Z3koVXUuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOlV1LmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlV1LmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxpLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9eSwhMD09PXkubWF0cml4QXV0b1VwZGF0ZSYmeS51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoeS5tYXRyaXgpLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIGJVZShuLHQsZSxpKXtsZXQgcj1uLmdldFBhcmFtZXRlcigzNDkyMSksbz1pLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikscz1pLmlzV2ViR0wyfHxudWxsIT09byxhPXt9LGw9bShudWxsKSxjPWw7ZnVuY3Rpb24gcChsZSl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkobGUpOm8uYmluZFZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBoKGxlKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KGxlKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBtKGxlKXtsZXQgaGU9W10seWU9W10sSj1bXTtmb3IobGV0IGFlPTA7YWU8cjthZSsrKWhlW2FlXT0wLHllW2FlXT0wLEpbYWVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmhlLGVuYWJsZWRBdHRyaWJ1dGVzOnllLGF0dHJpYnV0ZURpdmlzb3JzOkosb2JqZWN0OmxlLGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24geSgpe2xldCBsZT1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKWxlW2hlXT0wfWZ1bmN0aW9uIEkobGUpe0EobGUsMCl9ZnVuY3Rpb24gQShsZSxoZSl7bGV0IEo9Yy5lbmFibGVkQXR0cmlidXRlcyxhZT1jLmF0dHJpYnV0ZURpdmlzb3JzO2MubmV3QXR0cmlidXRlc1tsZV09MSwwPT09SltsZV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxlKSxKW2xlXT0xKSxhZVtsZV0hPT1oZSYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKGxlLGhlKSxhZVtsZV09aGUpfWZ1bmN0aW9uIE8oKXtsZXQgbGU9Yy5uZXdBdHRyaWJ1dGVzLGhlPWMuZW5hYmxlZEF0dHJpYnV0ZXM7Zm9yKGxldCB5ZT0wLEo9aGUubGVuZ3RoO3llPEo7eWUrKyloZVt5ZV0hPT1sZVt5ZV0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh5ZSksaGVbeWVdPTApfWZ1bmN0aW9uIGVlKGxlLGhlLHllLEosYWUsbWUpeyEwIT09aS5pc1dlYkdMMnx8NTEyNCE9PXllJiY1MTI1IT09eWU/bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxlLGhlLHllLEosYWUsbWUpOm4udmVydGV4QXR0cmliSVBvaW50ZXIobGUsaGUseWUsYWUsbWUpfWZ1bmN0aW9uIFQoKXtuZSgpLGMhPT1sJiYoYz1sLHAoYy5vYmplY3QpKX1mdW5jdGlvbiBuZSgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24obGUsaGUseWUsSixhZSl7bGV0IG1lPSExO2lmKHMpe2xldCBqZT1mdW5jdGlvbihsZSxoZSx5ZSl7bGV0IEo9ITA9PT15ZS53aXJlZnJhbWUsYWU9YVtsZS5pZF07dm9pZCAwPT09YWUmJihhZT17fSxhW2xlLmlkXT1hZSk7bGV0IG1lPWFlW2hlLmlkXTt2b2lkIDA9PT1tZSYmKG1lPXt9LGFlW2hlLmlkXT1tZSk7bGV0IGplPW1lW0pdO3JldHVybiB2b2lkIDA9PT1qZSYmKGplPW0oaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6by5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKSxtZVtKXT1qZSksamV9KEoseWUsaGUpO2MhPT1qZSYmKGM9amUscChjLm9iamVjdCkpLG1lPWZ1bmN0aW9uKGxlLGhlKXtsZXQgeWU9Yy5hdHRyaWJ1dGVzLEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPXllW21lXSxNZT1KW21lXTtpZih2b2lkIDA9PT1qZXx8amUuYXR0cmlidXRlIT09TWV8fGplLmRhdGEhPT1NZS5kYXRhKXJldHVybiEwO2FlKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PWFlfHxjLmluZGV4IT09aGV9KEosYWUpLG1lJiZmdW5jdGlvbihsZSxoZSl7bGV0IHllPXt9LEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPUpbbWVdLE1lPXt9O01lLmF0dHJpYnV0ZT1qZSxqZS5kYXRhJiYoTWUuZGF0YT1qZS5kYXRhKSx5ZVttZV09TWUsYWUrK31jLmF0dHJpYnV0ZXM9eWUsYy5hdHRyaWJ1dGVzTnVtPWFlLGMuaW5kZXg9aGV9KEosYWUpfWVsc2V7bGV0IGplPSEwPT09aGUud2lyZWZyYW1lOyhjLmdlb21ldHJ5IT09Si5pZHx8Yy5wcm9ncmFtIT09eWUuaWR8fGMud2lyZWZyYW1lIT09amUpJiYoYy5nZW9tZXRyeT1KLmlkLGMucHJvZ3JhbT15ZS5pZCxjLndpcmVmcmFtZT1qZSxtZT0hMCl9ITA9PT1sZS5pc0luc3RhbmNlZE1lc2gmJihtZT0hMCksbnVsbCE9PWFlJiZlLnVwZGF0ZShhZSwzNDk2MyksbWUmJihmdW5jdGlvbihsZSxoZSx5ZSxKKXtpZighMT09PWkuaXNXZWJHTDImJihsZS5pc0luc3RhbmNlZE1lc2h8fEouaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjt5KCk7bGV0IGFlPUouYXR0cmlidXRlcyxtZT15ZS5nZXRBdHRyaWJ1dGVzKCksamU9aGUuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IE1lIGluIG1lKXtsZXQgRmU9bWVbTWVdO2lmKEZlLmxvY2F0aW9uPj0wKXtsZXQgdXQ9YWVbTWVdO2lmKHZvaWQgMD09PXV0JiYoImluc3RhbmNlTWF0cml4Ij09PU1lJiZsZS5pbnN0YW5jZU1hdHJpeCYmKHV0PWxlLmluc3RhbmNlTWF0cml4KSwiaW5zdGFuY2VDb2xvciI9PT1NZSYmbGUuaW5zdGFuY2VDb2xvciYmKHV0PWxlLmluc3RhbmNlQ29sb3IpKSx2b2lkIDAhPT11dCl7bGV0IFN0PXV0Lm5vcm1hbGl6ZWQsZ3Q9dXQuaXRlbVNpemUsUmU9ZS5nZXQodXQpO2lmKHZvaWQgMD09PVJlKWNvbnRpbnVlO2xldCBBbj1SZS5idWZmZXIsRXQ9UmUudHlwZSxvbj1SZS5ieXRlc1BlckVsZW1lbnQ7aWYodXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IENlPXV0LmRhdGEsdnQ9Q2Uuc3RyaWRlLF90PXV0Lm9mZnNldDtpZihDZSYmQ2UuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcil7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUEoRmUubG9jYXRpb24raWUsQ2UubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PUNlLm1lc2hQZXJBdHRyaWJ1dGUqQ2UuY291bnQpfWVsc2UgZm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUkoRmUubG9jYXRpb24raWUpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKWVlKEZlLmxvY2F0aW9uK2llLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCx2dCpvbiwoX3QrZ3QvRmUubG9jYXRpb25TaXplKmllKSpvbil9ZWxzZXtpZih1dC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUEoRmUubG9jYXRpb24rQ2UsdXQubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PXV0Lm1lc2hQZXJBdHRyaWJ1dGUqdXQuY291bnQpfWVsc2UgZm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUkoRmUubG9jYXRpb24rQ2UpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKWVlKEZlLmxvY2F0aW9uK0NlLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCxndCpvbixndC9GZS5sb2NhdGlvblNpemUqQ2Uqb24pfX1lbHNlIGlmKHZvaWQgMCE9PWplKXtsZXQgU3Q9amVbTWVdO2lmKHZvaWQgMCE9PVN0KXN3aXRjaChTdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihGZS5sb2NhdGlvbixTdCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KEZlLmxvY2F0aW9uLFN0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoRmUubG9jYXRpb24sU3QpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoRmUubG9jYXRpb24sU3QpfX19fU8oKX0obGUsaGUseWUsSiksbnVsbCE9PWFlJiZuLmJpbmRCdWZmZXIoMzQ5NjMsZS5nZXQoYWUpLmJ1ZmZlcikpfSxyZXNldDpULHJlc2V0RGVmYXVsdFN0YXRlOm5lLGRpc3Bvc2U6ZnVuY3Rpb24oKXtUKCk7Zm9yKGxldCBsZSBpbiBhKXtsZXQgaGU9YVtsZV07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGVdfX0scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6ZnVuY3Rpb24obGUpe2lmKHZvaWQgMD09PWFbbGUuaWRdKXJldHVybjtsZXQgaGU9YVtsZS5pZF07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGUuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKGxlKXtmb3IobGV0IGhlIGluIGEpe2xldCB5ZT1hW2hlXTtpZih2b2lkIDA9PT15ZVtsZS5pZF0pY29udGludWU7bGV0IEo9eWVbbGUuaWRdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSB5ZVtsZS5pZF19fSxpbml0QXR0cmlidXRlczp5LGVuYWJsZUF0dHJpYnV0ZTpJLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOk99fWZ1bmN0aW9uIHhVZShuLHQsZSxpKXtsZXQgbyxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGMpe289Y30sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oYyx1KXtuLmRyYXdBcnJheXMobyxjLHUpLGUudXBkYXRlKHUsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oYyx1LGQpe2lmKDA9PT1kKXJldHVybjtsZXQgcCxoO2lmKHIpcD1uLGg9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYocD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGg9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXApcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cFtoXShvLGMsdSxkKSxlLnVwZGF0ZSh1LG8sZCl9fWZ1bmN0aW9uIENVZShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gbyhYKXtpZigiaGlnaHAiPT09WCl7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtYPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1YJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBzPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPXZvaWQgMCE9PWUucHJlY2lzaW9uP2UucHJlY2lzaW9uOiJoaWdocCIsbD1vKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1zfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT0hMD09PWUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixkPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxwPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGY9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLG09bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLEM9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLF89bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLHk9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLEk9cD4wLEE9c3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cmV0dXJue2lzV2ViR0wyOnMsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09aSlyZXR1cm4gaTtpZighMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IFg9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2k9bi5nZXRQYXJhbWV0ZXIoWC5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpfWVsc2UgaT0wO3JldHVybiBpfSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6ZCxtYXhWZXJ0ZXhUZXh0dXJlczpwLG1heFRleHR1cmVTaXplOmgsbWF4Q3ViZW1hcFNpemU6ZixtYXhBdHRyaWJ1dGVzOm0sbWF4VmVydGV4VW5pZm9ybXM6QyxtYXhWYXJ5aW5nczpfLG1heEZyYWdtZW50VW5pZm9ybXM6eSx2ZXJ0ZXhUZXh0dXJlczpJLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpBLGZsb2F0VmVydGV4VGV4dHVyZXM6SSYmQSxtYXhTYW1wbGVzOnM/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjB9fWZ1bmN0aW9uIHdVZShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxvPSExLHM9bmV3IGtjLGE9bmV3IFBvLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoZCxwLGgsZil7bGV0IG09bnVsbCE9PWQ/ZC5sZW5ndGg6MCxDPW51bGw7aWYoMCE9PW0pe2lmKEM9bC52YWx1ZSwhMCE9PWZ8fG51bGw9PT1DKXtsZXQgXz1oKzQqbSx5PXAubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHkpLChudWxsPT09Q3x8Qy5sZW5ndGg8XykmJihDPW5ldyBGbG9hdDMyQXJyYXkoXykpO2ZvcihsZXQgST0wLEE9aDtJIT09bTsrK0ksQSs9NClzLmNvcHkoZFtJXSkuYXBwbHlNYXRyaXg0KHksYSkscy5ub3JtYWwudG9BcnJheShDLEEpLENbQSszXT1zLmNvbnN0YW50fWwudmFsdWU9QyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1tLHQubnVtSW50ZXJzZWN0aW9uPTAsQ310aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGQscCxoKXtsZXQgZj0wIT09ZC5sZW5ndGh8fHB8fDAhPT1pfHxyO3JldHVybiByPXAsZT11KGQsaCwwKSxpPWQubGVuZ3RoLGZ9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihkLHAsaCl7bGV0IGY9ZC5jbGlwcGluZ1BsYW5lcyxtPWQuY2xpcEludGVyc2VjdGlvbixDPWQuY2xpcFNoYWRvd3MsXz1uLmdldChkKTtpZighcnx8bnVsbD09PWZ8fDA9PT1mLmxlbmd0aHx8byYmIUMpbz91KG51bGwpOmMoKTtlbHNle2xldCB5PW8/MDppLEk9NCp5LEE9Xy5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9QSxBPXUoZixwLEksaCk7Zm9yKGxldCBPPTA7TyE9PUk7KytPKUFbT109ZVtPXTtfLmNsaXBwaW5nU3RhdGU9QSx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXl9fX1mdW5jdGlvbiBNVWUobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShzLGEpe3JldHVybiAzMDM9PT1hP3MubWFwcGluZz0zMDE6MzA0PT09YSYmKHMubWFwcGluZz0zMDIpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKDMwMz09PWF8fDMwND09PWEpe2lmKHQuaGFzKHMpKXJldHVybiBlKHQuZ2V0KHMpLnRleHR1cmUscy5tYXBwaW5nKTt7bGV0IGw9cy5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgYjIobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixzKSx0LnNldChzLGMpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUscy5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcH19fVV1LnBoeXNpY2FsPXt1bmlmb3Jtczp5cyhbVXUuc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBKZSgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgSmV9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IGFuKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfTt2YXIgSm09Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxvPS4xLHM9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1vLHRoaXMuZmFyPXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsbz1pLXQscz1pK3QsYT1yK2UsbD1yLWU7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtvKz1jKnRoaXMudmlldy5vZmZzZXRYLHM9bytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMobyxzLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07Sm0ucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciB5eT1jbGFzcyBleHRlbmRzIHpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07eXkucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIEh1PU1hdGgucG93KDIsOCksX2xlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSx2bGU9NStfbGUubGVuZ3RoLGFVPW5ldyBKbSx7X2xvZFBsYW5lczp1TSxfc2l6ZUxvZHM6Z2FlLF9zaWdtYXM6WlJ9PVNVZSgpLF9hZT1uZXcgYW4sbFU9bnVsbCxxbT0oMStNYXRoLnNxcnQoNSkpLzIsdHk9MS9xbSx2YWU9W25ldyAkKDEsMSwxKSxuZXcgJCgtMSwxLDEpLG5ldyAkKDEsMSwtMSksbmV3ICQoLTEsMSwtMSksbmV3ICQoMCxxbSx0eSksbmV3ICQoMCxxbSwtdHkpLG5ldyAkKHR5LDAscW0pLG5ldyAkKC10eSwwLHFtKSxuZXcgJChxbSx0eSwwKSxuZXcgJCgtcW0sdHksMCldLHgyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IEZsb2F0MzJBcnJheSgyMCksZT1uZXcgJCgwLDEsMCk7cmV0dXJuIG5ldyB5eSh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOjIwfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSBpbnQgc2FtcGxlcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdO1xuXHRcdFx0dW5pZm9ybSBib29sIGxhdGl0dWRpbmFsO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBkVGhldGE7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1pcEludDtcblx0XHRcdHVuaWZvcm0gdmVjMyBwb2xlQXhpcztcblxuXHRcdFx0I2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0XHQjaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuXG5cdFx0XHR2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHtcblxuXHRcdFx0XHRmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTtcblx0XHRcdFx0Ly8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uXG5cdFx0XHRcdHZlYzMgc2FtcGxlRGlyZWN0aW9uID0gdk91dHB1dERpcmVjdGlvbiAqIGNvc1RoZXRhXG5cdFx0XHRcdFx0KyBjcm9zcyggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogc2luKCB0aGV0YSApXG5cdFx0XHRcdFx0KyBheGlzICogZG90KCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiAoIDEuMCAtIGNvc1RoZXRhICk7XG5cblx0XHRcdFx0cmV0dXJuIGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpcmVjdGlvbiwgbWlwSW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdHZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHtcblxuXHRcdFx0XHRcdGF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7XG5cblx0XHRcdFx0Zm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBpID49IHNhbXBsZXMgKSB7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmxvYXQgdGhldGEgPSBkVGhldGEgKiBmbG9hdCggaSApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCAtMS4wICogdGhldGEsIGF4aXMgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggdGhldGEsIGF4aXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX0oKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIsbyksZT4wJiZ0aGlzLl9ibHVyKG8sMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe251bGw9PT10aGlzLl9jdWJlbWFwU2hhZGVyJiYodGhpcy5fY3ViZW1hcFNoYWRlcj14YWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXtudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fY3ViZW1hcFNoYWRlciYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDx1TS5sZW5ndGg7dCsrKXVNW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQobFUpLHQuc2Npc3NvclRlc3Q9ITEsSlIodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQsZSl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IGk9ZXx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxpKSx0aGlzLl9hcHBseVBNUkVNKGkpLHRoaXMuX2NsZWFudXAoaSksaX1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCBlPXttYWdGaWx0ZXI6YnMsbWluRmlsdGVyOmJzLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOnV5LGZvcm1hdDp6cyxlbmNvZGluZzpEaCxkZXB0aEJ1ZmZlcjohMX0saT15YWUoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsbnVsbD09PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWFlKGUpKSxpfV9jb21waWxlTWF0ZXJpYWwodCl7bGV0IGU9bmV3IHlvKHVNWzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUoZSxhVSl9X3NjZW5lVG9DdWJlVVYodCxlLGkscil7bGV0IGE9bmV3IHhzKDkwLDEsZSxpKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGQ9dS5hdXRvQ2xlYXIscD11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihfYWUpLHUudG9uZU1hcHBpbmc9MCx1LmF1dG9DbGVhcj0hMTtsZXQgaD1uZXcgS20oe25hbWU6IlBNUkVNLkJhY2tncm91bmQiLHNpZGU6MSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGY9bmV3IHlvKG5ldyBabSxoKSxtPSExLEM9dC5iYWNrZ3JvdW5kO0M/Qy5pc0NvbG9yJiYoaC5jb2xvci5jb3B5KEMpLHQuYmFja2dyb3VuZD1udWxsLG09ITApOihoLmNvbG9yLmNvcHkoX2FlKSxtPSEwKTtmb3IobGV0IF89MDtfPDY7XysrKXtsZXQgeT1fJTM7MD09PXk/KGEudXAuc2V0KDAsbFtfXSwwKSxhLmxvb2tBdChjW19dLDAsMCkpOjE9PT15PyhhLnVwLnNldCgwLDAsbFtfXSksYS5sb29rQXQoMCxjW19dLDApKTooYS51cC5zZXQoMCxsW19dLDApLGEubG9va0F0KDAsMCxjW19dKSksSlIocix5Kkh1LF8+Mj9IdTowLEh1LEh1KSx1LnNldFJlbmRlclRhcmdldChyKSxtJiZ1LnJlbmRlcihmLGEpLHUucmVuZGVyKHQsYSl9Zi5nZW9tZXRyeS5kaXNwb3NlKCksZi5tYXRlcmlhbC5kaXNwb3NlKCksdS50b25lTWFwcGluZz1wLHUuYXV0b0NsZWFyPWQsdC5iYWNrZ3JvdW5kPUN9X3RleHR1cmVUb0N1YmVVVih0LGUpe2xldCBpPXRoaXMuX3JlbmRlcmVyLHI9MzAxPT09dC5tYXBwaW5nfHwzMDI9PT10Lm1hcHBpbmc7cj8obnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXhhZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9ITE9PT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxKTpudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSk7bGV0IG89cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLHM9bmV3IHlvKHVNWzBdLG8pLGE9by51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSlIoZSwwLDAsMypIdSwyKkh1KSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihzLGFVKX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8dmxlO3IrKyl7bGV0IG89TWF0aC5zcXJ0KFpSW3JdKlpSW3JdLVpSW3ItMV0qWlJbci0xXSk7dGhpcy5fYmx1cih0LHItMSxyLG8sdmFlWyhyLTEpJXZhZS5sZW5ndGhdKX1lLmF1dG9DbGVhcj1pfV9ibHVyKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxzLGUsaSxyLCJsYXRpdHVkaW5hbCIsbyksdGhpcy5faGFsZkJsdXIocyx0LGksaSxyLCJsb25naXR1ZGluYWwiLG8pfV9oYWxmQmx1cih0LGUsaSxyLG8scyxhKXtsZXQgbD10aGlzLl9yZW5kZXJlcixjPXRoaXMuX2JsdXJNYXRlcmlhbDsibGF0aXR1ZGluYWwiIT09cyYmImxvbmdpdHVkaW5hbCIhPT1zJiZjb25zb2xlLmVycm9yKCJibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhIik7bGV0IGQ9bmV3IHlvKHVNW3JdLGMpLHA9Yy51bmlmb3JtcyxoPWdhZVtpXS0xLGY9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipoKToyKk1hdGguUEkvMzksbT1vL2YsQz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IoMyptKToyMDtDPjIwJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke0N9IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gMjBgKTtsZXQgXz1bXSx5PTA7Zm9yKGxldCBlZT0wO2VlPDIwOysrZWUpe2xldCBYPWVlL20seGU9TWF0aC5leHAoLVgqWC8yKTtfLnB1c2goeGUpLDA9PT1lZT95Kz14ZTplZTxDJiYoeSs9Mip4ZSl9Zm9yKGxldCBlZT0wO2VlPF8ubGVuZ3RoO2VlKyspX1tlZV09X1tlZV0veTtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPUMscC53ZWlnaHRzLnZhbHVlPV8scC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1mLHAubWlwSW50LnZhbHVlPTgtaTtsZXQgST1nYWVbcl07SlIoZSwzKk1hdGgubWF4KDAsSHUtMipJKSwoMD09PXI/MDoyKkh1KSsyKkkqKHI+ND9yLTgrNDowKSwzKkksMipJKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihkLGFVKX19O2Z1bmN0aW9uIFNVZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPTg7Zm9yKGxldCByPTA7cjx2bGU7cisrKXtsZXQgbz1NYXRoLnBvdygyLGkpO3QucHVzaChvKTtsZXQgcz0xL287cj40P3M9X2xlW3ItOCs0LTFdOjA9PT1yJiYocz0wKSxlLnB1c2gocyk7bGV0IGE9MS8oby0xKSxsPS1hLzIsYz0xK2EvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10sZD02LHA9NixoPTMsZj0yLG09MSxDPW5ldyBGbG9hdDMyQXJyYXkoaCpwKmQpLF89bmV3IEZsb2F0MzJBcnJheShmKnAqZCkseT1uZXcgRmxvYXQzMkFycmF5KG0qcCpkKTtmb3IobGV0IEE9MDtBPGQ7QSsrKXtsZXQgTz1BJTMqMi8zLTEsZWU9QT4yPzA6LTE7Qy5zZXQoW08sZWUsMCxPKzIvMyxlZSwwLE8rMi8zLGVlKzEsMCxPLGVlLDAsTysyLzMsZWUrMSwwLE8sZWUrMSwwXSxoKnAqQSksXy5zZXQodSxmKnAqQSkseS5zZXQoW0EsQSxBLEEsQSxBXSxtKnAqQSl9bGV0IEk9bmV3IEtpO0kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKEMsaCkpLEkuc2V0QXR0cmlidXRlKCJ1diIsbmV3IExyKF8sZikpLEkuc2V0QXR0cmlidXRlKCJmYWNlSW5kZXgiLG5ldyBMcih5LG0pKSxuLnB1c2goSSksaT40JiZpLS19cmV0dXJue19sb2RQbGFuZXM6bixfc2l6ZUxvZHM6dCxfc2lnbWFzOmV9fWZ1bmN0aW9uIHlhZShuKXtsZXQgdD1uZXcgdmEoMypIdSwzKkh1LG4pO3JldHVybiB0LnRleHR1cmUubWFwcGluZz0zMDYsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEpSKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBiYWUoKXtsZXQgbj1uZXcgSmUoMSwxKTtyZXR1cm4gbmV3IHl5KHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpufX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuXG5cdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cblx0XHRcdFx0dmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTtcblx0XHRcdFx0dmVjMiB1diA9IGVxdWlyZWN0VXYoIG91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAvIHRleGVsU2l6ZSAtIDAuNSApO1xuXHRcdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0XHR2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCArPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54IC09IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblxuXHRcdFx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdFx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24geGFlKCl7cmV0dXJuIG5ldyB5eSh7bmFtZToiQ3ViZW1hcFRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gVFVlKG4pe2xldCB0PW5ldyBXZWFrTWFwLGU9bnVsbDtmdW5jdGlvbiBvKGEpe2xldCBsPWEudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7dm9pZCAwIT09YyYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2lmKGEmJmEuaXNUZXh0dXJlKXtsZXQgbD1hLm1hcHBpbmcsYz0zMDM9PT1sfHwzMDQ9PT1sLHU9MzAxPT09bHx8MzAyPT09bDtpZihjfHx1KXtpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmITA9PT1hLm5lZWRzUE1SRU1VcGRhdGUpe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgZD10LmdldChhKTtyZXR1cm4gbnVsbD09PWUmJihlPW5ldyB4MihuKSksZD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGQpOmUuZnJvbUN1YmVtYXAoYSxkKSx0LnNldChhLGQpLGQudGV4dHVyZX1pZih0LmhhcyhhKSlyZXR1cm4gdC5nZXQoYSkudGV4dHVyZTt7bGV0IGQ9YS5pbWFnZTtpZihjJiZkJiZkLmhlaWdodD4wfHx1JiZkJiZmdW5jdGlvbihhKXtsZXQgbD0wO2ZvcihsZXQgdT0wO3U8Njt1Kyspdm9pZCAwIT09YVt1XSYmbCsrO3JldHVybiA2PT09bH0oZCkpe251bGw9PT1lJiYoZT1uZXcgeDIobikpO2xldCBwPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEscCksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxwLnRleHR1cmV9cmV0dXJuIG51bGx9fX1yZXR1cm4gYX0sZGlzcG9zZTpmdW5jdGlvbigpe3Q9bmV3IFdlYWtNYXAsbnVsbCE9PWUmJihlLmRpc3Bvc2UoKSxlPW51bGwpfX19ZnVuY3Rpb24gRFVlKG4pe2xldCB0PXt9O2Z1bmN0aW9uIGUoaSl7aWYodm9pZCAwIT09dFtpXSlyZXR1cm4gdFtpXTtsZXQgcjtzd2l0Y2goaSl7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6cj1uLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6cj1uLmdldEV4dGVuc2lvbihpKX1yZXR1cm4gdFtpXT1yLHJ9cmV0dXJue2hhczpmdW5jdGlvbihpKXtyZXR1cm4gbnVsbCE9PWUoaSl9LGluaXQ6ZnVuY3Rpb24oaSl7aS5pc1dlYkdMMj9lKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KGUoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxlKCJPRVNfdGV4dHVyZV9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLGUoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLGUoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxlKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGUoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSksZSgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiksZSgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiksZSgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihpKXtsZXQgcj1lKGkpO3JldHVybiBudWxsPT09ciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2krIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxyfX19ZnVuY3Rpb24gQVVlKG4sdCxlLGkpe2xldCByPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcyhkKXtsZXQgcD1kLnRhcmdldDtudWxsIT09cC5pbmRleCYmdC5yZW1vdmUocC5pbmRleCk7Zm9yKGxldCBmIGluIHAuYXR0cmlidXRlcyl0LnJlbW92ZShwLmF0dHJpYnV0ZXNbZl0pO3AucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZGVsZXRlIHJbcC5pZF07bGV0IGg9by5nZXQocCk7aCYmKHQucmVtb3ZlKGgpLG8uZGVsZXRlKHApKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KHApLCEwPT09cC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiZkZWxldGUgcC5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYyhkKXtsZXQgcD1bXSxoPWQuaW5kZXgsZj1kLmF0dHJpYnV0ZXMucG9zaXRpb24sbT0wO2lmKG51bGwhPT1oKXtsZXQgeT1oLmFycmF5O209aC52ZXJzaW9uO2ZvcihsZXQgST0wLEE9eS5sZW5ndGg7STxBO0krPTMpe2xldCBPPXlbSSswXSxlZT15W0krMV0sWD15W0krMl07cC5wdXNoKE8sZWUsZWUsWCxYLE8pfX1lbHNle209Zi52ZXJzaW9uO2ZvcihsZXQgST0wLEE9Zi5hcnJheS5sZW5ndGgvMy0xO0k8QTtJKz0zKXtsZXQgTz1JKzAsZWU9SSsxLFg9SSsyO3AucHVzaChPLGVlLGVlLFgsWCxPKX19bGV0IEM9bmV3KG1sZShwKT95Mjp2MikocCwxKTtDLnZlcnNpb249bTtsZXQgXz1vLmdldChkKTtfJiZ0LnJlbW92ZShfKSxvLnNldChkLEMpfXJldHVybntnZXQ6ZnVuY3Rpb24oZCxwKXtyZXR1cm4hMD09PXJbcC5pZF18fChwLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHJbcC5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxwfSx1cGRhdGU6ZnVuY3Rpb24oZCl7bGV0IHA9ZC5hdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBwKXQudXBkYXRlKHBbZl0sMzQ5NjIpO2xldCBoPWQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBoKXtsZXQgbT1oW2ZdO2ZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl0LnVwZGF0ZShtW0NdLDM0OTYyKX19LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihkKXtsZXQgcD1vLmdldChkKTtpZihwKXtsZXQgaD1kLmluZGV4O251bGwhPT1oJiZwLnZlcnNpb248aC52ZXJzaW9uJiZjKGQpfWVsc2UgYyhkKTtyZXR1cm4gby5nZXQoZCl9fX1mdW5jdGlvbiBJVWUobix0LGUsaSl7bGV0IG8sYSxsLHI9aS5pc1dlYkdMMjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24ocCl7bz1wfSx0aGlzLnNldEluZGV4PWZ1bmN0aW9uKHApe2E9cC50eXBlLGw9cC5ieXRlc1BlckVsZW1lbnR9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKHAsaCl7bi5kcmF3RWxlbWVudHMobyxoLGEscCpsKSxlLnVwZGF0ZShoLG8sMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKHAsaCxmKXtpZigwPT09ZilyZXR1cm47bGV0IG0sQztpZihyKW09bixDPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYobT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLEM9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixudWxsPT09bSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7bVtDXShvLGgsYSxwKmwsZiksZS51cGRhdGUoaCxvLGYpfX1mdW5jdGlvbiBQVWUobil7bGV0IGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24oKXtlLmZyYW1lKyssZS5jYWxscz0wLGUudHJpYW5nbGVzPTAsZS5wb2ludHM9MCxlLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7c3dpdGNoKGUuY2FsbHMrKyxzKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKG8vMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKG8vMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKG8tMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqbzticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqbzticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixzKX19fX12YXIgSU09Y2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPUlvLHRoaXMubWluRmlsdGVyPUlvLHRoaXMud3JhcFI9WmEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07ZnVuY3Rpb24gUlVlKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBPVWUobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gQ2FlKG4sdCl7bGV0IGU9MSxpPXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT90LmRhdGEuYXJyYXk6dC5hcnJheTtpIGluc3RhbmNlb2YgSW50OEFycmF5P2U9MTI3OmkgaW5zdGFuY2VvZiBJbnQxNkFycmF5P2U9MzI3Njc6aSBpbnN0YW5jZW9mIEludDMyQXJyYXk/ZT0yMTQ3NDgzNjQ3OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMTW9ycGh0YXJnZXRzOiBVbnN1cHBvcnRlZCBtb3JwaCBhdHRyaWJ1dGUgZGF0YSB0eXBlOiAiLGkpLG4uZGl2aWRlU2NhbGFyKGUpfWZ1bmN0aW9uIGtVZShuLHQsZSl7bGV0IGk9e30scj1uZXcgRmxvYXQzMkFycmF5KDgpLG89bmV3IFdlYWtNYXAscz1uZXcgJCxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGMsdSxkLHApe2xldCBoPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKCEwPT09dC5pc1dlYkdMMil7bGV0IGY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLG09by5nZXQodSk7aWYodm9pZCAwPT09bXx8bS5jb3VudCE9PWYpe2xldCBuZT1mdW5jdGlvbigpe3ZlLmRpc3Bvc2UoKSxvLmRlbGV0ZSh1KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX07dm9pZCAwIT09bSYmbS50ZXh0dXJlLmRpc3Bvc2UoKTtsZXQgeT12b2lkIDAhPT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsST11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixBPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbHx8W10sZWU9ITA9PT15PzI6MSxYPXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCplZSx4ZT0xO1g+dC5tYXhUZXh0dXJlU2l6ZSYmKHhlPU1hdGguY2VpbChYL3QubWF4VGV4dHVyZVNpemUpLFg9dC5tYXhUZXh0dXJlU2l6ZSk7bGV0IGZlPW5ldyBGbG9hdDMyQXJyYXkoWCp4ZSo0KmYpLHZlPW5ldyBJTShmZSxYLHhlLGYpO3ZlLmZvcm1hdD16cyx2ZS50eXBlPVltLHZlLm5lZWRzVXBkYXRlPSEwO2xldCBUPTQqZWU7Zm9yKGxldCBsZT0wO2xlPGY7bGUrKyl7bGV0IGhlPUlbbGVdLHllPUFbbGVdLEo9WCp4ZSo0KmxlO2ZvcihsZXQgYWU9MDthZTxoZS5jb3VudDthZSsrKXtzLmZyb21CdWZmZXJBdHRyaWJ1dGUoaGUsYWUpLCEwPT09aGUubm9ybWFsaXplZCYmQ2FlKHMsaGUpO2xldCBtZT1hZSpUO2ZlW0orbWUrMF09cy54LGZlW0orbWUrMV09cy55LGZlW0orbWUrMl09cy56LGZlW0orbWUrM109MCwhMD09PXkmJihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoeWUsYWUpLCEwPT09eWUubm9ybWFsaXplZCYmQ2FlKHMseWUpLGZlW0orbWUrNF09cy54LGZlW0orbWUrNV09cy55LGZlW0orbWUrNl09cy56LGZlW0orbWUrN109MCl9fW09e2NvdW50OmYsdGV4dHVyZTp2ZSxzaXplOm5ldyBKZShYLHhlKX0sby5zZXQodSxtKSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX1sZXQgQz0wO2ZvcihsZXQgeT0wO3k8aC5sZW5ndGg7eSsrKUMrPWhbeV07bGV0IF89dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtQztwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixfKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixoKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZSIsbS50ZXh0dXJlLGUpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZSIsbS5zaXplKX1lbHNle2xldCBmPXZvaWQgMD09PWg/MDpoLmxlbmd0aCxtPWlbdS5pZF07aWYodm9pZCAwPT09bXx8bS5sZW5ndGghPT1mKXttPVtdO2ZvcihsZXQgQT0wO0E8ZjtBKyspbVtBXT1bQSwwXTtpW3UuaWRdPW19Zm9yKGxldCBBPTA7QTxmO0ErKyl7bGV0IE89bVtBXTtPWzBdPUEsT1sxXT1oW0FdfW0uc29ydChPVWUpO2ZvcihsZXQgQT0wO0E8ODtBKyspQTxmJiZtW0FdWzFdPyhhW0FdWzBdPW1bQV1bMF0sYVtBXVsxXT1tW0FdWzFdKTooYVtBXVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixhW0FdWzFdPTApO2Euc29ydChSVWUpO2xldCBDPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLF89dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHk9MDtmb3IobGV0IEE9MDtBPDg7QSsrKXtsZXQgTz1hW0FdLGVlPU9bMF0sWD1PWzFdO2VlIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJlg/KEMmJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkhPT1DW2VlXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitBLENbZWVdKSxfJiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpIT09X1tlZV0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrQSxfW2VlXSkscltBXT1YLHkrPVgpOihDJiYhMD09PXUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSksXyYmITA9PT11Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpLHJbQV09MCl9bGV0IEk9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEteTtwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixJKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19fX1mdW5jdGlvbiBGVWUobix0LGUsaSl7bGV0IHI9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT1jLmluc3RhbmNlQ29sb3ImJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihsKXtsZXQgYz1pLnJlbmRlci5mcmFtZSxkPXQuZ2V0KGwsbC5nZW9tZXRyeSk7cmV0dXJuIHIuZ2V0KGQpIT09YyYmKHQudXBkYXRlKGQpLHIuc2V0KGQsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYoITE9PT1sLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLG51bGwhPT1sLmluc3RhbmNlQ29sb3ImJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGR9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtyPW5ldyBXZWFrTWFwfX19SU0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO3ZhciBDMj1jbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy53cmFwUj1aYSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtDMi5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEPSEwO3ZhciB5bGU9bmV3IGJvLGJsZT1uZXcgSU0seGxlPW5ldyBDMixDbGU9bmV3IF95LHdhZT1bXSxNYWU9W10sU2FlPW5ldyBGbG9hdDMyQXJyYXkoMTYpLEVhZT1uZXcgRmxvYXQzMkFycmF5KDkpLFRhZT1uZXcgRmxvYXQzMkFycmF5KDQpO2Z1bmN0aW9uIER5KG4sdCxlKXtsZXQgaT1uWzBdO2lmKGk8PTB8fGk+MClyZXR1cm4gbjtsZXQgcj10KmUsbz13YWVbcl07aWYodm9pZCAwPT09byYmKG89bmV3IEZsb2F0MzJBcnJheShyKSx3YWVbcl09byksMCE9PXQpe2kudG9BcnJheShvLDApO2ZvcihsZXQgcz0xLGE9MDtzIT09dDsrK3MpYSs9ZSxuW3NdLnRvQXJyYXkobyxhKX1yZXR1cm4gb31mdW5jdGlvbiBqcyhuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHdzKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBXMihuLHQpe2xldCBlPU1hZVt0XTt2b2lkIDA9PT1lJiYoZT1uZXcgSW50MzJBcnJheSh0KSxNYWVbdF09ZSk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKWVbaV09bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIGV9ZnVuY3Rpb24gTlVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIExVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55KSYmKG4udW5pZm9ybTJmKHRoaXMuYWRkcix0LngsdC55KSxlWzBdPXQueCxlWzFdPXQueSk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm0yZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEJVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56KSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LngsdC55LHQueiksZVswXT10LngsZVsxXT10LnksZVsyXT10LnopO2Vsc2UgaWYodm9pZCAwIT09dC5yKShlWzBdIT09dC5yfHxlWzFdIT09dC5nfHxlWzJdIT09dC5iKSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LnIsdC5nLHQuYiksZVswXT10LnIsZVsxXT10LmcsZVsyXT10LmIpO2Vsc2V7aWYoanMoZSx0KSlyZXR1cm47bi51bmlmb3JtM2Z2KHRoaXMuYWRkcix0KSx3cyhlLHQpfX1mdW5jdGlvbiBWVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1RhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxUYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIFVVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO0VhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxFYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIHpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1NhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxTYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIGpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBHVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2pzKGUsdCl8fChuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFdVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksd3MoZSx0KSl9ZnVuY3Rpb24gcVVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtqcyhlLHQpfHwobi51bmlmb3JtNGl2KHRoaXMuYWRkcix0KSx3cyhlLHQpKX1mdW5jdGlvbiBZVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMXVpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIFhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFFVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIEtVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFpVZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHlsZSxyKX1mdW5jdGlvbiBKVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTNEKHR8fHhsZSxyKX1mdW5jdGlvbiAkVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmVDdWJlKHR8fENsZSxyKX1mdW5jdGlvbiBlemUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8YmxlLHIpfWZ1bmN0aW9uIG56ZShuLHQpe24udW5pZm9ybTFmdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaXplKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsMik7bi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiByemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIG96ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDQpO24udW5pZm9ybTRmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gc3plKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsNCk7bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBhemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGx6ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDE2KTtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGN6ZShuLHQpe24udW5pZm9ybTFpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gdXplKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBkemUobix0KXtuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHB6ZShuLHQpe24udW5pZm9ybTRpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaHplKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZnplKG4sdCl7bi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gbXplKG4sdCl7bi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZ3plKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gX3plKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZTJEKHRbb118fHlsZSxyW29dKX1mdW5jdGlvbiB2emUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9VzIoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUzRCh0W29dfHx4bGUscltvXSl9ZnVuY3Rpb24geXplKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZUN1YmUodFtvXXx8Q2xlLHJbb10pfWZ1bmN0aW9uIGJ6ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1XMihlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2V0VGV4dHVyZTJEQXJyYXkodFtvXXx8YmxlLHJbb10pfWZ1bmN0aW9uIEN6ZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBOVWU7Y2FzZSAzNTY2NDpyZXR1cm4gTFVlO2Nhc2UgMzU2NjU6cmV0dXJuIEJVZTtjYXNlIDM1NjY2OnJldHVybiBWVWU7Y2FzZSAzNTY3NDpyZXR1cm4gSFVlO2Nhc2UgMzU2NzU6cmV0dXJuIFVVZTtjYXNlIDM1Njc2OnJldHVybiB6VWU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGpVZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEdVZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIFdVZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHFVZTtjYXNlIDUxMjU6cmV0dXJuIFlVZTtjYXNlIDM2Mjk0OnJldHVybiBYVWU7Y2FzZSAzNjI5NTpyZXR1cm4gUVVlO2Nhc2UgMzYyOTY6cmV0dXJuIEtVZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFpVZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gSlVlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuICRVZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBlemV9fSh0LnR5cGUpfWZ1bmN0aW9uIHdsZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIG56ZTtjYXNlIDM1NjY0OnJldHVybiBpemU7Y2FzZSAzNTY2NTpyZXR1cm4gcnplO2Nhc2UgMzU2NjY6cmV0dXJuIG96ZTtjYXNlIDM1Njc0OnJldHVybiBzemU7Y2FzZSAzNTY3NTpyZXR1cm4gYXplO2Nhc2UgMzU2NzY6cmV0dXJuIGx6ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gY3plO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gdXplO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gZHplO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gcHplO2Nhc2UgNTEyNTpyZXR1cm4gaHplO2Nhc2UgMzYyOTQ6cmV0dXJuIGZ6ZTtjYXNlIDM2Mjk1OnJldHVybiBtemU7Y2FzZSAzNjI5NjpyZXR1cm4gZ3plO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gX3plO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB2emU7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4geXplO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIGJ6ZX19KHQudHlwZSl9ZnVuY3Rpb24gTWxlKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX13bGUucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLHdzKHQsbil9LE1sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLG89aS5sZW5ndGg7ciE9PW87KytyKXtsZXQgcz1pW3JdO3Muc2V0VmFsdWUobix0W3MuaWRdLGUpfX07dmFyIGNVPS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBEYWUobix0KXtuLnNlcS5wdXNoKHQpLG4ubWFwW3QuaWRdPXR9ZnVuY3Rpb24gd3plKG4sdCxlKXtsZXQgaT1uLm5hbWUscj1pLmxlbmd0aDtmb3IoY1UubGFzdEluZGV4PTA7Oyl7bGV0IG89Y1UuZXhlYyhpKSxzPWNVLmxhc3RJbmRleCxhPW9bMV0sYz1vWzNdO2lmKCJdIj09PW9bMl0mJihhfD0wKSx2b2lkIDA9PT1jfHwiWyI9PT1jJiZzKzI9PT1yKXtEYWUoZSx2b2lkIDA9PT1jP25ldyBDemUoYSxuLHQpOm5ldyB3bGUoYSxuLHQpKTticmVha317bGV0IGQ9ZS5tYXBbYV07dm9pZCAwPT09ZCYmKGQ9bmV3IE1sZShhKSxEYWUoZSxkKSksZT1kfX19ZnVuY3Rpb24gVGgobix0KXt0aGlzLnNlcT1bXSx0aGlzLm1hcD17fTtsZXQgZT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcxOCk7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHI9bi5nZXRBY3RpdmVVbmlmb3JtKHQsaSk7d3plKHIsbi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBBYWUobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfVRoLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTt2b2lkIDAhPT1yJiZyLnNldFZhbHVlKG4sZSxpKX0sVGgucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO3ZvaWQgMCE9PWkmJnRoaXMuc2V0VmFsdWUobixlLGkpfSxUaC51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyIT09bzsrK3Ipe2xldCBzPXRbcl0sYT1lW3MuaWRdOyExIT09YS5uZWVkc1VwZGF0ZSYmcy5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fSxUaC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IG89bltpXTtvLmlkIGluIHQmJmUucHVzaChvKX1yZXR1cm4gZX07dmFyIE16ZT0wO2Z1bmN0aW9uIElhZShuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiYiIj09PXI/IiI6ZS50b1VwcGVyQ2FzZSgpKyJcblxuIityKyJcblxuIitmdW5jdGlvbihuKXtsZXQgdD1uLnNwbGl0KCJcbiIpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKCJcbiIpfShuLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24gVHplKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgRGg6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIEZyOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fSh0KTtyZXR1cm4idmVjNCAiK24rIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitlWzBdK2VbMV0rIjsgfSJ9ZnVuY3Rpb24gRHplKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMTplPSJMaW5lYXIiO2JyZWFrO2Nhc2UgMjplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSAzOmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA0OmU9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgNTplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIF9NKG4pe3JldHVybiIiIT09bn1mdW5jdGlvbiBQYWUobix0KXtyZXR1cm4gbi5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLHQubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyx0Lm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csdC5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLHQubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLHQubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csdC5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csdC5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gUmFlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgUnplPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gRVUobil7cmV0dXJuIG4ucmVwbGFjZShSemUsT3plKX1mdW5jdGlvbiBPemUobix0KXtsZXQgZT1iaVt0XTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gRVUoZSl9dmFyIGt6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSBcPSAoXGQrKVw7IGkgPCAoXGQrKVw7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLEZ6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIE9hZShuKXtyZXR1cm4gbi5yZXBsYWNlKEZ6ZSxTbGUpLnJlcGxhY2Uoa3plLE56ZSl9ZnVuY3Rpb24gTnplKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxTbGUoMCx0LGUsaSl9ZnVuY3Rpb24gU2xlKG4sdCxlLGkpe2xldCByPSIiO2ZvcihsZXQgbz1wYXJzZUludCh0KTtvPHBhcnNlSW50KGUpO28rKylyKz1pLnJlcGxhY2UoL1xbXHMqaVxzKlxdL2csIlsgIitvKyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyxvKTtyZXR1cm4gcn1mdW5jdGlvbiBrYWUobil7bGV0IHQ9InByZWNpc2lvbiAiK24ucHJlY2lzaW9uKyIgZmxvYXQ7XG5wcmVjaXNpb24gIituLnByZWNpc2lvbisiIGludDsiO3JldHVybiJoaWdocCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoibWVkaXVtcCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04iOiJsb3dwIj09PW4ucHJlY2lzaW9uJiYodCs9IlxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OIiksdH1mdW5jdGlvbiBVemUobix0LGUsaSl7bGV0IG0sQyxyPW4uZ2V0Q29udGV4dCgpLG89ZS5kZWZpbmVzLHM9ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9ZnVuY3Rpb24obil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gMT09PW4uc2hhZG93TWFwVHlwZT90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT1uLnNoYWRvd01hcFR5cGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOjM9PT1uLnNoYWRvd01hcFR5cGUmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fShlKSxjPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIDMwMTpjYXNlIDMwMjp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gdH0oZSksdT1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX01PREVfUkVGTEVDVElPTiI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSAzMDI6Y2FzZSAzMDc6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiJ9cmV0dXJuIHR9KGUpLGQ9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIDA6dD0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOnQ9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiB0fShlKSxwPWUuaXNXZWJHTDI/IiI6ZnVuY3Rpb24obil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8InBoeXNpY2FsIj09PW4uc2hhZGVySUQ/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihfTSkuam9pbigiXG4iKX0oZSksaD1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTshMSE9PWkmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oIlxuIil9KG8pLGY9ci5jcmVhdGVQcm9ncmFtKCksXz1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rIlxuIjoiIjtlLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KG09W2hdLmZpbHRlcihfTSkuam9pbigiXG4iKSxtLmxlbmd0aD4wJiYobSs9IlxuIiksQz1bcCxoXS5maWx0ZXIoX00pLmpvaW4oIlxuIiksQy5sZW5ndGg+MCYmKEMrPSJcbiIpKToobT1ba2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiYhMT09PWUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIlx0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCJcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIlx0YXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpLEM9W3Asa2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsMCE9PWUudG9uZU1hcHBpbmc/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIiwwIT09ZS50b25lTWFwcGluZz9iaS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1lLnRvbmVNYXBwaW5nP0R6ZSgidG9uZU1hcHBpbmciLGUudG9uZU1hcHBpbmcpOiIiLGUuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsZS5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsYmkuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsVHplKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpKSxzPUVVKHMpLHM9UGFlKHMsZSkscz1SYWUocyxlKSxhPUVVKGEpLGE9UGFlKGEsZSksYT1SYWUoYSxlKSxzPU9hZShzKSxhPU9hZShhKSxlLmlzV2ViR0wyJiYhMCE9PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKF89IiN2ZXJzaW9uIDMwMCBlc1xuIixtPVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIittLEM9WyIjZGVmaW5lIHZhcnlpbmcgaW4iLCIzMDAgZXMiPT09ZS5nbHNsVmVyc2lvbj8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsIjMwMCBlcyI9PT1lLmdsc2xWZXJzaW9uPyIiOiIjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3IiLCIjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qIiwiI2RlZmluZSB0ZXh0dXJlMkRMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJER3JhZEVYVCB0ZXh0dXJlR3JhZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQiXS5qb2luKCJcbiIpKyJcbiIrQyk7bGV0IGVlLFgsST1fK0MrYSxBPUFhZShyLDM1NjMzLF8rbStzKSxPPUFhZShyLDM1NjMyLEkpO2lmKHIuYXR0YWNoU2hhZGVyKGYsQSksci5hdHRhY2hTaGFkZXIoZixPKSx2b2lkIDAhPT1lLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1lLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZiksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IHhlPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZikudHJpbSgpLGZlPXIuZ2V0U2hhZGVySW5mb0xvZyhBKS50cmltKCksdmU9ci5nZXRTaGFkZXJJbmZvTG9nKE8pLnRyaW0oKSxUPSEwLG5lPSEwO2lmKCExPT09ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGYsMzU3MTQpKXtUPSExO2xldCBsZT1JYWUocixBLCJ2ZXJ0ZXgiKSxoZT1JYWUocixPLCJmcmFnbWVudCIpO2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICIrci5nZXRFcnJvcigpKyIgLSBWQUxJREFURV9TVEFUVVMgIityLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNSkrIlxuXG5Qcm9ncmFtIEluZm8gTG9nOiAiK3hlKyJcbiIrbGUrIlxuIitoZSl9ZWxzZSIiIT09eGU/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6Iix4ZSk6KCIiPT09ZmV8fCIiPT09dmUpJiYobmU9ITEpO25lJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6VCxwcm9ncmFtTG9nOnhlLHZlcnRleFNoYWRlcjp7bG9nOmZlLHByZWZpeDptfSxmcmFnbWVudFNoYWRlcjp7bG9nOnZlLHByZWZpeDpDfX0pfXJldHVybiByLmRlbGV0ZVNoYWRlcihBKSxyLmRlbGV0ZVNoYWRlcihPKSx0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWVlJiYoZWU9bmV3IFRoKHIsZikpLGVlfSx0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9ZnVuY3Rpb24obix0KXtsZXQgZT17fSxpPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzIxKTtmb3IobGV0IHI9MDtyPGk7cisrKXtsZXQgbz1uLmdldEFjdGl2ZUF0dHJpYih0LHIpLHM9by5uYW1lLGE9MTszNTY3ND09PW8udHlwZSYmKGE9MiksMzU2NzU9PT1vLnR5cGUmJihhPTMpLDM1Njc2PT09by50eXBlJiYoYT00KSxlW3NdPXt0eXBlOm8udHlwZSxsb2NhdGlvbjpuLmdldEF0dHJpYkxvY2F0aW9uKHQscyksbG9jYXRpb25TaXplOmF9fXJldHVybiBlfShyLGYpKSxYfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksci5kZWxldGVQcm9ncmFtKGYpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1lLnNoYWRlck5hbWUsdGhpcy5pZD1NemUrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09Zix0aGlzLnZlcnRleFNoYWRlcj1BLHRoaXMuZnJhZ21lbnRTaGFkZXI9Tyx0aGlzfXZhciB6emU9MDtmdW5jdGlvbiBqemUobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IF8yLGw9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSkscz10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09cy5oYXMocikmJihzLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PXMuaGFzKG8pJiYocy5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD16emUrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZS5zZXQodCxpKX1yZXR1cm4gZS5nZXQodCl9fSxjPVtdLHU9ci5pc1dlYkdMMixkPXIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixwPXIuZmxvYXRWZXJ0ZXhUZXh0dXJlcyxoPXIubWF4VmVydGV4VW5pZm9ybXMsZj1yLnZlcnRleFRleHR1cmVzLG09ci5wcmVjaXNpb24sQz17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9O3JldHVybntnZXRQYXJhbWV0ZXJzOmZ1bmN0aW9uKFQsbmUsbGUsaGUseWUpe2xldCBGZSx1dCxTdCxndCxKPWhlLmZvZyxtZT0oVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KFQuZW52TWFwfHwoVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2hlLmVudmlyb25tZW50Om51bGwpKSxqZT1DW1QudHlwZV0sTWU9eWUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbihUKXtsZXQgbGU9VC5za2VsZXRvbi5ib25lcztpZihwKXJldHVybiAxMDI0O3tsZXQgeWU9TWF0aC5mbG9vcigoaC0yMCkvNCksSj1NYXRoLm1pbih5ZSxsZS5sZW5ndGgpO3JldHVybiBKPGxlLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitsZS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitKKyIuIiksMCk6Sn19KHllKTowO2lmKG51bGwhPT1ULnByZWNpc2lvbiYmKG09ci5nZXRNYXhQcmVjaXNpb24oVC5wcmVjaXNpb24pLG0hPT1ULnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLFQucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsbSwiaW5zdGVhZC4iKSksamUpe2xldCBDZT1VdVtqZV07RmU9Q2UudmVydGV4U2hhZGVyLHV0PUNlLmZyYWdtZW50U2hhZGVyfWVsc2UgRmU9VC52ZXJ0ZXhTaGFkZXIsdXQ9VC5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShUKSxTdD1sLmdldFZlcnRleFNoYWRlcklEKFQpLGd0PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChUKTtsZXQgUmU9bi5nZXRSZW5kZXJUYXJnZXQoKSxFdD1ULmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmplLHNoYWRlck5hbWU6VC50eXBlLHZlcnRleFNoYWRlcjpGZSxmcmFnbWVudFNoYWRlcjp1dCxkZWZpbmVzOlQuZGVmaW5lcyxjdXN0b21WZXJ0ZXhTaGFkZXJJRDpTdCxjdXN0b21GcmFnbWVudFNoYWRlcklEOmd0LGlzUmF3U2hhZGVyTWF0ZXJpYWw6ITA9PT1ULmlzUmF3U2hhZGVyTWF0ZXJpYWwsZ2xzbFZlcnNpb246VC5nbHNsVmVyc2lvbixwcmVjaXNpb246bSxpbnN0YW5jaW5nOiEwPT09eWUuaXNJbnN0YW5jZWRNZXNoLGluc3RhbmNpbmdDb2xvcjohMD09PXllLmlzSW5zdGFuY2VkTWVzaCYmbnVsbCE9PXllLmluc3RhbmNlQ29sb3Isc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczpmLG91dHB1dEVuY29kaW5nOm51bGw9PT1SZT9uLm91dHB1dEVuY29kaW5nOiEwPT09UmUuaXNYUlJlbmRlclRhcmdldD9SZS50ZXh0dXJlLmVuY29kaW5nOkRoLG1hcDohIVQubWFwLG1hdGNhcDohIVQubWF0Y2FwLGVudk1hcDohIW1lLGVudk1hcE1vZGU6bWUmJm1lLm1hcHBpbmcsZW52TWFwQ3ViZVVWOiEhbWUmJigzMDY9PT1tZS5tYXBwaW5nfHwzMDc9PT1tZS5tYXBwaW5nKSxsaWdodE1hcDohIVQubGlnaHRNYXAsYW9NYXA6ISFULmFvTWFwLGVtaXNzaXZlTWFwOiEhVC5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhVC5idW1wTWFwLG5vcm1hbE1hcDohIVQubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOjE9PT1ULm5vcm1hbE1hcFR5cGUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOjA9PT1ULm5vcm1hbE1hcFR5cGUsZGVjb2RlVmlkZW9UZXh0dXJlOiEhVC5tYXAmJiEwPT09VC5tYXAuaXNWaWRlb1RleHR1cmUmJlQubWFwLmVuY29kaW5nPT09RnIsY2xlYXJjb2F0OkV0LGNsZWFyY29hdE1hcDpFdCYmISFULmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6RXQmJiEhVC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOkV0JiYhIVQuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIVQuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIVQucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIVQubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhVC5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIVQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIVQuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIVQuYWxwaGFNYXAsYWxwaGFUZXN0OlQuYWxwaGFUZXN0PjAsYWxwaGFXcml0ZTpULmFscGhhV3JpdGV8fFQudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISFULmdyYWRpZW50TWFwLHNoZWVuOlQuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEhVC5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEhVC5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246VC50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISFULnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISFULnRoaWNrbmVzc01hcCxjb21iaW5lOlQuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIVQubm9ybWFsTWFwJiYhIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6VC52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOiEwPT09VC52ZXJ0ZXhDb2xvcnMmJiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmND09PXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUsdmVydGV4VXZzOiEhKFQubWFwfHxULmJ1bXBNYXB8fFQubm9ybWFsTWFwfHxULnNwZWN1bGFyTWFwfHxULmFscGhhTWFwfHxULmVtaXNzaXZlTWFwfHxULnJvdWdobmVzc01hcHx8VC5tZXRhbG5lc3NNYXB8fFQuY2xlYXJjb2F0TWFwfHxULmNsZWFyY29hdFJvdWdobmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQuZGlzcGxhY2VtZW50TWFwfHxULnRyYW5zbWlzc2lvbk1hcHx8VC50aGlja25lc3NNYXB8fFQuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fFQuc3BlY3VsYXJDb2xvck1hcHx8VC5zaGVlbkNvbG9yTWFwfHxULnNoZWVuUm91Z2huZXNzTWFwKSx1dnNWZXJ0ZXhPbmx5OiEoVC5tYXB8fFQuYnVtcE1hcHx8VC5ub3JtYWxNYXB8fFQuc3BlY3VsYXJNYXB8fFQuYWxwaGFNYXB8fFQuZW1pc3NpdmVNYXB8fFQucm91Z2huZXNzTWFwfHxULm1ldGFsbmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQudHJhbnNtaXNzaW9uPjB8fFQudHJhbnNtaXNzaW9uTWFwfHxULnRoaWNrbmVzc01hcHx8VC5zcGVjdWxhckludGVuc2l0eU1hcHx8VC5zcGVjdWxhckNvbG9yTWFwfHxULnNoZWVuPjB8fFQuc2hlZW5Db2xvck1hcHx8VC5zaGVlblJvdWdobmVzc01hcHx8IVQuZGlzcGxhY2VtZW50TWFwKSxmb2c6ISFKLHVzZUZvZzpULmZvZyxmb2dFeHAyOkomJkouaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhVC5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246VC5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpkLHNraW5uaW5nOiEwPT09eWUuaXNTa2lubmVkTWVzaCYmTWU+MCxtYXhCb25lczpNZSx1c2VWZXJ0ZXhUZXh0dXJlOnAsbW9ycGhUYXJnZXRzOiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6eWUuZ2VvbWV0cnkmJnllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj95ZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsbnVtRGlyTGlnaHRzOm5lLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpuZS5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpuZS5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpuZS5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpuZS5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6bmUuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOm5lLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOm5lLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOnMubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246cy5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOlQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6bi5zaGFkb3dNYXAuZW5hYmxlZCYmbGUubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTpuLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOlQudG9uZU1hcHBlZD9uLnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6bi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6VC5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6Mj09PVQuc2lkZSxmbGlwU2lkZWQ6MT09PVQuc2lkZSxkZXB0aFBhY2tpbmc6dm9pZCAwIT09VC5kZXB0aFBhY2tpbmcmJlQuZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6VC5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOlQuZXh0ZW5zaW9ucyYmVC5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6VC5leHRlbnNpb25zJiZULmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpULmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uKFQpe2xldCBuZT1bXTtpZihULnNoYWRlcklEP25lLnB1c2goVC5zaGFkZXJJRCk6KG5lLnB1c2goVC5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksbmUucHVzaChULmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSx2b2lkIDAhPT1ULmRlZmluZXMpZm9yKGxldCBsZSBpbiBULmRlZmluZXMpbmUucHVzaChsZSksbmUucHVzaChULmRlZmluZXNbbGVdKTtyZXR1cm4hMT09PVQuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKGZ1bmN0aW9uKFQsbmUpe1QucHVzaChuZS5wcmVjaXNpb24pLFQucHVzaChuZS5vdXRwdXRFbmNvZGluZyksVC5wdXNoKG5lLmVudk1hcE1vZGUpLFQucHVzaChuZS5jb21iaW5lKSxULnB1c2gobmUudmVydGV4VXZzKSxULnB1c2gobmUuZm9nRXhwMiksVC5wdXNoKG5lLnNpemVBdHRlbnVhdGlvbiksVC5wdXNoKG5lLm1heEJvbmVzKSxULnB1c2gobmUubW9ycGhUYXJnZXRzQ291bnQpLFQucHVzaChuZS5udW1EaXJMaWdodHMpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodHMpLFQucHVzaChuZS5udW1IZW1pTGlnaHRzKSxULnB1c2gobmUubnVtUmVjdEFyZWFMaWdodHMpLFQucHVzaChuZS5udW1EaXJMaWdodFNoYWRvd3MpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0U2hhZG93cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodFNoYWRvd3MpLFQucHVzaChuZS5zaGFkb3dNYXBUeXBlKSxULnB1c2gobmUudG9uZU1hcHBpbmcpLFQucHVzaChuZS5udW1DbGlwcGluZ1BsYW5lcyksVC5wdXNoKG5lLm51bUNsaXBJbnRlcnNlY3Rpb24pLFQucHVzaChuZS5hbHBoYVdyaXRlKX0obmUsVCksZnVuY3Rpb24oVCxuZSl7YS5kaXNhYmxlQWxsKCksbmUuaXNXZWJHTDImJmEuZW5hYmxlKDApLG5lLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJmEuZW5hYmxlKDEpLG5lLmluc3RhbmNpbmcmJmEuZW5hYmxlKDIpLG5lLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksbmUubWFwJiZhLmVuYWJsZSg0KSxuZS5tYXRjYXAmJmEuZW5hYmxlKDUpLG5lLmVudk1hcCYmYS5lbmFibGUoNiksbmUuZW52TWFwQ3ViZVVWJiZhLmVuYWJsZSg3KSxuZS5saWdodE1hcCYmYS5lbmFibGUoOCksbmUuYW9NYXAmJmEuZW5hYmxlKDkpLG5lLmVtaXNzaXZlTWFwJiZhLmVuYWJsZSgxMCksbmUuYnVtcE1hcCYmYS5lbmFibGUoMTEpLG5lLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLG5lLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxMyksbmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxNCksbmUuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksbmUuY2xlYXJjb2F0TWFwJiZhLmVuYWJsZSgxNiksbmUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZhLmVuYWJsZSgxNyksbmUuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksbmUuZGlzcGxhY2VtZW50TWFwJiZhLmVuYWJsZSgxOSksbmUuc3BlY3VsYXJNYXAmJmEuZW5hYmxlKDIwKSxuZS5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxuZS5tZXRhbG5lc3NNYXAmJmEuZW5hYmxlKDIyKSxuZS5ncmFkaWVudE1hcCYmYS5lbmFibGUoMjMpLG5lLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksbmUuYWxwaGFUZXN0JiZhLmVuYWJsZSgyNSksbmUudmVydGV4Q29sb3JzJiZhLmVuYWJsZSgyNiksbmUudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksbmUudmVydGV4VXZzJiZhLmVuYWJsZSgyOCksbmUudmVydGV4VGFuZ2VudHMmJmEuZW5hYmxlKDI5KSxuZS51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksbmUuZm9nJiZhLmVuYWJsZSgzMSksVC5wdXNoKGEubWFzayksYS5kaXNhYmxlQWxsKCksbmUudXNlRm9nJiZhLmVuYWJsZSgwKSxuZS5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksbmUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5lbmFibGUoMiksbmUuc2tpbm5pbmcmJmEuZW5hYmxlKDMpLG5lLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLG5lLm1vcnBoVGFyZ2V0cyYmYS5lbmFibGUoNSksbmUubW9ycGhOb3JtYWxzJiZhLmVuYWJsZSg2KSxuZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLG5lLnNoYWRvd01hcEVuYWJsZWQmJmEuZW5hYmxlKDgpLG5lLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzJiZhLmVuYWJsZSg5KSxuZS5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLG5lLmZsaXBTaWRlZCYmYS5lbmFibGUoMTEpLG5lLmRlcHRoUGFja2luZyYmYS5lbmFibGUoMTIpLG5lLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLG5lLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZhLmVuYWJsZSgxNCksbmUuc3BlY3VsYXJDb2xvck1hcCYmYS5lbmFibGUoMTUpLG5lLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLG5lLnRyYW5zbWlzc2lvbk1hcCYmYS5lbmFibGUoMTcpLG5lLnRoaWNrbmVzc01hcCYmYS5lbmFibGUoMTgpLG5lLnNoZWVuJiZhLmVuYWJsZSgxOSksbmUuc2hlZW5Db2xvck1hcCYmYS5lbmFibGUoMjApLG5lLnNoZWVuUm91Z2huZXNzTWFwJiZhLmVuYWJsZSgyMSksbmUuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMiksVC5wdXNoKGEubWFzayl9KG5lLFQpLG5lLnB1c2gobi5vdXRwdXRFbmNvZGluZykpLG5lLnB1c2goVC5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLG5lLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24oVCl7bGV0IGxlLG5lPUNbVC50eXBlXTtyZXR1cm4gbGU9bmU/VTVlLmNsb25lKFV1W25lXS51bmlmb3Jtcyk6VC51bmlmb3JtcyxsZX0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24oVCxuZSl7bGV0IGxlO2ZvcihsZXQgaGU9MCx5ZT1jLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1jW2hlXTtpZihKLmNhY2hlS2V5PT09bmUpe2xlPUosKytsZS51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1sZSYmKGxlPW5ldyBVemUobixuZSxULG8pLGMucHVzaChsZSkpLGxlfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbihUKXtpZigwPT0tLVQudXNlZFRpbWVzKXtsZXQgbmU9Yy5pbmRleE9mKFQpO2NbbmVdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxULmRlc3Ryb3koKX19LHJlbGVhc2VTaGFkZXJDYWNoZTpmdW5jdGlvbihUKXtsLnJlbW92ZShUKX0scHJvZ3JhbXM6YyxkaXNwb3NlOmZ1bmN0aW9uKCl7bC5kaXNwb3NlKCl9fX1mdW5jdGlvbiBHemUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8pe2xldCBzPW4uZ2V0KG8pO3JldHVybiB2b2lkIDA9PT1zJiYocz17fSxuLnNldChvLHMpKSxzfSxyZW1vdmU6ZnVuY3Rpb24obyl7bi5kZWxldGUobyl9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7bi5nZXQobylbc109YX0sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBXemUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ubWF0ZXJpYWwuaWQhPT10Lm1hdGVyaWFsLmlkP24ubWF0ZXJpYWwuaWQtdC5tYXRlcmlhbC5pZDpuLnohPT10Lno/bi56LXQuejpuLmlkLXQuaWR9ZnVuY3Rpb24gRmFlKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLnohPT10Lno/dC56LW4uejpuLmlkLXQuaWR9ZnVuY3Rpb24gTmFlKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoZCxwLGgsZixtLEMpe2xldCBfPW5bdF07cmV0dXJuIHZvaWQgMD09PV8/KF89e2lkOmQuaWQsb2JqZWN0OmQsZ2VvbWV0cnk6cCxtYXRlcmlhbDpoLGdyb3VwT3JkZXI6ZixyZW5kZXJPcmRlcjpkLnJlbmRlck9yZGVyLHo6bSxncm91cDpDfSxuW3RdPV8pOihfLmlkPWQuaWQsXy5vYmplY3Q9ZCxfLmdlb21ldHJ5PXAsXy5tYXRlcmlhbD1oLF8uZ3JvdXBPcmRlcj1mLF8ucmVuZGVyT3JkZXI9ZC5yZW5kZXJPcmRlcixfLno9bSxfLmdyb3VwPUMpLHQrKyxffXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6ZnVuY3Rpb24oKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24oZCxwLGgsZixtLEMpe2xldCBfPXMoZCxwLGgsZixtLEMpO2gudHJhbnNtaXNzaW9uPjA/aS5wdXNoKF8pOiEwPT09aC50cmFuc3BhcmVudD9yLnB1c2goXyk6ZS5wdXNoKF8pfSx1bnNoaWZ0OmZ1bmN0aW9uKGQscCxoLGYsbSxDKXtsZXQgXz1zKGQscCxoLGYsbSxDKTtoLnRyYW5zbWlzc2lvbj4wP2kudW5zaGlmdChfKTohMD09PWgudHJhbnNwYXJlbnQ/ci51bnNoaWZ0KF8pOmUudW5zaGlmdChfKX0sZmluaXNoOmZ1bmN0aW9uKCl7Zm9yKGxldCBkPXQscD1uLmxlbmd0aDtkPHA7ZCsrKXtsZXQgaD1uW2RdO2lmKG51bGw9PT1oLmlkKWJyZWFrO2guaWQ9bnVsbCxoLm9iamVjdD1udWxsLGguZ2VvbWV0cnk9bnVsbCxoLm1hdGVyaWFsPW51bGwsaC5ncm91cD1udWxsfX0sc29ydDpmdW5jdGlvbihkLHApe2UubGVuZ3RoPjEmJmUuc29ydChkfHxXemUpLGkubGVuZ3RoPjEmJmkuc29ydChwfHxGYWUpLHIubGVuZ3RoPjEmJnIuc29ydChwfHxGYWUpfX19ZnVuY3Rpb24gcXplKCl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihpLHIpe2xldCBvO3JldHVybiExPT09bi5oYXMoaSk/KG89bmV3IE5hZSxuLnNldChpLFtvXSkpOnI+PW4uZ2V0KGkpLmxlbmd0aD8obz1uZXcgTmFlLG4uZ2V0KGkpLnB1c2gobykpOm89bi5nZXQoaSlbcl0sb30sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBZemUoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3ICQsY29sb3I6bmV3IGFufTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsZGlyZWN0aW9uOm5ldyAkLGNvbG9yOm5ldyBhbixkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsY29sb3I6bmV3IGFuLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgJCxza3lDb2xvcjpuZXcgYW4sZ3JvdW5kQ29sb3I6bmV3IGFufTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBhbixwb3NpdGlvbjpuZXcgJCxoYWxmV2lkdGg6bmV3ICQsaGFsZkhlaWdodDpuZXcgJH19cmV0dXJuIG5bdC5pZF09ZSxlfX19dmFyIFF6ZT0wO2Z1bmN0aW9uIEt6ZShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gWnplKG4sdCl7bGV0IGU9bmV3IFl6ZSxpPWZ1bmN0aW9uKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgSmV9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBKZSxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIG5bdC5pZF09ZSxlfX19KCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgJCk7bGV0IG89bmV3ICQscz1uZXcgTW4sYT1uZXcgTW47cmV0dXJue3NldHVwOmZ1bmN0aW9uKHUsZCl7bGV0IHA9MCxoPTAsZj0wO2ZvcihsZXQgZmU9MDtmZTw5O2ZlKyspci5wcm9iZVtmZV0uc2V0KDAsMCwwKTtsZXQgbT0wLEM9MCxfPTAseT0wLEk9MCxBPTAsTz0wLGVlPTA7dS5zb3J0KEt6ZSk7bGV0IFg9ITAhPT1kP01hdGguUEk6MTtmb3IobGV0IGZlPTAsdmU9dS5sZW5ndGg7ZmU8dmU7ZmUrKyl7bGV0IFQ9dVtmZV0sbmU9VC5jb2xvcixsZT1ULmludGVuc2l0eSxoZT1ULmRpc3RhbmNlLHllPVQuc2hhZG93JiZULnNoYWRvdy5tYXA/VC5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihULmlzQW1iaWVudExpZ2h0KXArPW5lLnIqbGUqWCxoKz1uZS5nKmxlKlgsZis9bmUuYipsZSpYO2Vsc2UgaWYoVC5pc0xpZ2h0UHJvYmUpZm9yKGxldCBKPTA7Sjw5O0orKylyLnByb2JlW0pdLmFkZFNjYWxlZFZlY3RvcihULnNoLmNvZWZmaWNpZW50c1tKXSxsZSk7ZWxzZSBpZihULmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5jb2xvci5jb3B5KFQuY29sb3IpLm11bHRpcGx5U2NhbGFyKFQuaW50ZW5zaXR5KlgpLFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1ttXT1tZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW21dPXllLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbbV09VC5zaGFkb3cubWF0cml4LEErK31yLmRpcmVjdGlvbmFsW21dPUosbSsrfWVsc2UgaWYoVC5pc1Nwb3RMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksSi5jb2xvci5jb3B5KG5lKS5tdWx0aXBseVNjYWxhcihsZSpYKSxKLmRpc3RhbmNlPWhlLEouY29uZUNvcz1NYXRoLmNvcyhULmFuZ2xlKSxKLnBlbnVtYnJhQ29zPU1hdGguY29zKFQuYW5nbGUqKDEtVC5wZW51bWJyYSkpLEouZGVjYXk9VC5kZWNheSxULmNhc3RTaGFkb3cpe2xldCBhZT1ULnNoYWRvdyxtZT1pLmdldChUKTttZS5zaGFkb3dCaWFzPWFlLmJpYXMsbWUuc2hhZG93Tm9ybWFsQmlhcz1hZS5ub3JtYWxCaWFzLG1lLnNoYWRvd1JhZGl1cz1hZS5yYWRpdXMsbWUuc2hhZG93TWFwU2l6ZT1hZS5tYXBTaXplLHIuc3BvdFNoYWRvd1tfXT1tZSxyLnNwb3RTaGFkb3dNYXBbX109eWUsci5zcG90U2hhZG93TWF0cml4W19dPVQuc2hhZG93Lm1hdHJpeCxlZSsrfXIuc3BvdFtfXT1KLF8rK31lbHNlIGlmKFQuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLmNvbG9yLmNvcHkobmUpLm11bHRpcGx5U2NhbGFyKGxlKSxKLmhhbGZXaWR0aC5zZXQoLjUqVC53aWR0aCwwLDApLEouaGFsZkhlaWdodC5zZXQoMCwuNSpULmhlaWdodCwwKSxyLnJlY3RBcmVhW3ldPUoseSsrfWVsc2UgaWYoVC5pc1BvaW50TGlnaHQpe2xldCBKPWUuZ2V0KFQpO2lmKEouY29sb3IuY29weShULmNvbG9yKS5tdWx0aXBseVNjYWxhcihULmludGVuc2l0eSpYKSxKLmRpc3RhbmNlPVQuZGlzdGFuY2UsSi5kZWNheT1ULmRlY2F5LFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsbWUuc2hhZG93Q2FtZXJhTmVhcj1hZS5jYW1lcmEubmVhcixtZS5zaGFkb3dDYW1lcmFGYXI9YWUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W0NdPW1lLHIucG9pbnRTaGFkb3dNYXBbQ109eWUsci5wb2ludFNoYWRvd01hdHJpeFtDXT1ULnNoYWRvdy5tYXRyaXgsTysrfXIucG9pbnRbQ109SixDKyt9ZWxzZSBpZihULmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLnNreUNvbG9yLmNvcHkoVC5jb2xvcikubXVsdGlwbHlTY2FsYXIobGUqWCksSi5ncm91bmRDb2xvci5jb3B5KFQuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKGxlKlgpLHIuaGVtaVtJXT1KLEkrK319eT4wJiYodC5pc1dlYkdMMnx8ITA9PT1uLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPVB0LkxUQ19GTE9BVF8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19GTE9BVF8yKTohMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPyhyLnJlY3RBcmVhTFRDMT1QdC5MVENfSEFMRl8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxyLmFtYmllbnRbMF09cCxyLmFtYmllbnRbMV09aCxyLmFtYmllbnRbMl09ZjtsZXQgeGU9ci5oYXNoOyh4ZS5kaXJlY3Rpb25hbExlbmd0aCE9PW18fHhlLnBvaW50TGVuZ3RoIT09Q3x8eGUuc3BvdExlbmd0aCE9PV98fHhlLnJlY3RBcmVhTGVuZ3RoIT09eXx8eGUuaGVtaUxlbmd0aCE9PUl8fHhlLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PUF8fHhlLm51bVBvaW50U2hhZG93cyE9PU98fHhlLm51bVNwb3RTaGFkb3dzIT09ZWUpJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9bSxyLnNwb3QubGVuZ3RoPV8sci5yZWN0QXJlYS5sZW5ndGg9eSxyLnBvaW50Lmxlbmd0aD1DLHIuaGVtaS5sZW5ndGg9SSxyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1BLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPUEsci5wb2ludFNoYWRvdy5sZW5ndGg9TyxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1PLHIuc3BvdFNoYWRvdy5sZW5ndGg9ZWUsci5zcG90U2hhZG93TWFwLmxlbmd0aD1lZSxyLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1BLHIucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPU8sci5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1lZSx4ZS5kaXJlY3Rpb25hbExlbmd0aD1tLHhlLnBvaW50TGVuZ3RoPUMseGUuc3BvdExlbmd0aD1fLHhlLnJlY3RBcmVhTGVuZ3RoPXkseGUuaGVtaUxlbmd0aD1JLHhlLm51bURpcmVjdGlvbmFsU2hhZG93cz1BLHhlLm51bVBvaW50U2hhZG93cz1PLHhlLm51bVNwb3RTaGFkb3dzPWVlLHIudmVyc2lvbj1RemUrKyl9LHNldHVwVmlldzpmdW5jdGlvbih1LGQpe2xldCBwPTAsaD0wLGY9MCxtPTAsQz0wLF89ZC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB5PTAsST11Lmxlbmd0aDt5PEk7eSsrKXtsZXQgQT11W3ldO2lmKEEuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTz1yLmRpcmVjdGlvbmFsW3BdO08uZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLnRhcmdldC5tYXRyaXhXb3JsZCksTy5kaXJlY3Rpb24uc3ViKG8pLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxwKyt9ZWxzZSBpZihBLmlzU3BvdExpZ2h0KXtsZXQgTz1yLnNwb3RbZl07Ty5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksTy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoXyksTy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmRpcmVjdGlvbi5zdWIobyksTy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKF8pLGYrK31lbHNlIGlmKEEuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgTz1yLnJlY3RBcmVhW21dO08ucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8ucG9zaXRpb24uYXBwbHlNYXRyaXg0KF8pLGEuaWRlbnRpdHkoKSxzLmNvcHkoQS5tYXRyaXhXb3JsZCkscy5wcmVtdWx0aXBseShfKSxhLmV4dHJhY3RSb3RhdGlvbihzKSxPLmhhbGZXaWR0aC5zZXQoLjUqQS53aWR0aCwwLDApLE8uaGFsZkhlaWdodC5zZXQoMCwuNSpBLmhlaWdodCwwKSxPLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksTy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSxtKyt9ZWxzZSBpZihBLmlzUG9pbnRMaWdodCl7bGV0IE89ci5wb2ludFtoXTtPLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxPLnBvc2l0aW9uLmFwcGx5TWF0cml4NChfKSxoKyt9ZWxzZSBpZihBLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgTz1yLmhlbWlbQ107Ty5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxPLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxDKyt9fX0sc3RhdGU6cn19ZnVuY3Rpb24gTGFlKG4sdCl7bGV0IGU9bmV3IFp6ZShuLHQpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbigpe2kubGVuZ3RoPTAsci5sZW5ndGg9MH0sc3RhdGU6e2xpZ2h0c0FycmF5Omksc2hhZG93c0FycmF5OnIsbGlnaHRzOmV9LHNldHVwTGlnaHRzOmZ1bmN0aW9uKGQpe2Uuc2V0dXAoaSxkKX0sc2V0dXBMaWdodHNWaWV3OmZ1bmN0aW9uKGQpe2Uuc2V0dXBWaWV3KGksZCl9LHB1c2hMaWdodDpmdW5jdGlvbihkKXtpLnB1c2goZCl9LHB1c2hTaGFkb3c6ZnVuY3Rpb24oZCl7ci5wdXNoKGQpfX19ZnVuY3Rpb24gSnplKG4sdCl7bGV0IGU9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihvLHM9MCl7bGV0IGE7cmV0dXJuITE9PT1lLmhhcyhvKT8oYT1uZXcgTGFlKG4sdCksZS5zZXQobyxbYV0pKTpzPj1lLmdldChvKS5sZW5ndGg/KGE9bmV3IExhZShuLHQpLGUuZ2V0KG8pLnB1c2goYSkpOmE9ZS5nZXQobylbc10sYX0sZGlzcG9zZTpmdW5jdGlvbigpe2U9bmV3IFdlYWtNYXB9fX12YXIgdzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPTMyMDAsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVwdGhQYWNraW5nPXQuZGVwdGhQYWNraW5nLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfX07dzIucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7dmFyIE0yPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEaXN0YW5jZU1hdGVyaWFsIix0aGlzLnJlZmVyZW5jZVBvc2l0aW9uPW5ldyAkLHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX07ZnVuY3Rpb24gRWxlKG4sdCxlKXtsZXQgaT1uZXcgdnkscj1uZXcgSmUsbz1uZXcgSmUscz1uZXcgdHIsYT1uZXcgdzIoe2RlcHRoUGFja2luZzozMjAxfSksbD1uZXcgTTIsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsZD17MDoxLDE6MCwyOjJ9LHA9bmV3IHpkKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBKZX0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6InVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG51bmlmb3JtIGZsb2F0IHJhZGl1cztcbiNpbmNsdWRlIDxwYWNraW5nPlxudm9pZCBtYWluKCkge1xuXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xuXHRmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDtcblx0Zm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7XG5cdFx0ZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlO1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGVwdGg7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcblx0XHQjZW5kaWZcblx0fVxuXHRtZWFuID0gbWVhbiAvIHNhbXBsZXM7XG5cdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7XG5cdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xufSJ9KSxoPXAuY2xvbmUoKTtoLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGY9bmV3IEtpO2Yuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgbT1uZXcgeW8oZixwKSxDPXRoaXM7ZnVuY3Rpb24gXyhBLE8pe2xldCBlZT10LnVwZGF0ZShtKTtwLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1BLmJsdXJTYW1wbGVzJiYocC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMsaC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMscC5uZWVkc1VwZGF0ZT0hMCxoLm5lZWRzVXBkYXRlPSEwKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUEubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcFBhc3MpLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChPLG51bGwsZWUscCxtLG51bGwpLGgudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9QS5tYXBQYXNzLnRleHR1cmUsaC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxoLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KE8sbnVsbCxlZSxoLG0sbnVsbCl9ZnVuY3Rpb24geShBLE8sZWUsWCx4ZSxmZSx2ZSl7bGV0IFQ9bnVsbCxuZT0hMD09PVguaXNQb2ludExpZ2h0P0EuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpBLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoVD12b2lkIDAhPT1uZT9uZTohMD09PVguaXNQb2ludExpZ2h0P2w6YSxuLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PWVlLmNsaXBTaGFkb3dzJiYwIT09ZWUuY2xpcHBpbmdQbGFuZXMubGVuZ3RofHxlZS5kaXNwbGFjZW1lbnRNYXAmJjAhPT1lZS5kaXNwbGFjZW1lbnRTY2FsZXx8ZWUuYWxwaGFNYXAmJmVlLmFscGhhVGVzdD4wKXtsZXQgbGU9VC51dWlkLGhlPWVlLnV1aWQseWU9Y1tsZV07dm9pZCAwPT09eWUmJih5ZT17fSxjW2xlXT15ZSk7bGV0IEo9eWVbaGVdO3ZvaWQgMD09PUomJihKPVQuY2xvbmUoKSx5ZVtoZV09SiksVD1KfXJldHVybiBULnZpc2libGU9ZWUudmlzaWJsZSxULndpcmVmcmFtZT1lZS53aXJlZnJhbWUsVC5zaWRlPTM9PT12ZT9udWxsIT09ZWUuc2hhZG93U2lkZT9lZS5zaGFkb3dTaWRlOmVlLnNpZGU6bnVsbCE9PWVlLnNoYWRvd1NpZGU/ZWUuc2hhZG93U2lkZTpkW2VlLnNpZGVdLFQuYWxwaGFNYXA9ZWUuYWxwaGFNYXAsVC5hbHBoYVRlc3Q9ZWUuYWxwaGFUZXN0LFQuY2xpcFNoYWRvd3M9ZWUuY2xpcFNoYWRvd3MsVC5jbGlwcGluZ1BsYW5lcz1lZS5jbGlwcGluZ1BsYW5lcyxULmNsaXBJbnRlcnNlY3Rpb249ZWUuY2xpcEludGVyc2VjdGlvbixULmRpc3BsYWNlbWVudE1hcD1lZS5kaXNwbGFjZW1lbnRNYXAsVC5kaXNwbGFjZW1lbnRTY2FsZT1lZS5kaXNwbGFjZW1lbnRTY2FsZSxULmRpc3BsYWNlbWVudEJpYXM9ZWUuZGlzcGxhY2VtZW50QmlhcyxULndpcmVmcmFtZUxpbmV3aWR0aD1lZS53aXJlZnJhbWVMaW5ld2lkdGgsVC5saW5ld2lkdGg9ZWUubGluZXdpZHRoLCEwPT09WC5pc1BvaW50TGlnaHQmJiEwPT09VC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoVC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oWC5tYXRyaXhXb3JsZCksVC5uZWFyRGlzdGFuY2U9eGUsVC5mYXJEaXN0YW5jZT1mZSksVH1mdW5jdGlvbiBJKEEsTyxlZSxYLHhlKXtpZighMT09PUEudmlzaWJsZSlyZXR1cm47aWYoQS5sYXllcnMudGVzdChPLmxheWVycykmJihBLmlzTWVzaHx8QS5pc0xpbmV8fEEuaXNQb2ludHMpJiYoQS5jYXN0U2hhZG93fHxBLnJlY2VpdmVTaGFkb3cmJjM9PT14ZSkmJighQS5mcnVzdHVtQ3VsbGVkfHxpLmludGVyc2VjdHNPYmplY3QoQSkpKXtBLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGVlLm1hdHJpeFdvcmxkSW52ZXJzZSxBLm1hdHJpeFdvcmxkKTtsZXQgVD10LnVwZGF0ZShBKSxuZT1BLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobmUpKXtsZXQgbGU9VC5ncm91cHM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1sZVtoZV0sYWU9bmVbSi5tYXRlcmlhbEluZGV4XTtpZihhZSYmYWUudmlzaWJsZSl7bGV0IG1lPXkoQSwwLGFlLFgsZWUubmVhcixlZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KGVlLG51bGwsVCxtZSxBLEopfX19ZWxzZSBpZihuZS52aXNpYmxlKXtsZXQgbGU9eShBLDAsbmUsWCxlZS5uZWFyLGVlLmZhcix4ZSk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoZWUsbnVsbCxULGxlLEEsbnVsbCl9fWxldCB2ZT1BLmNoaWxkcmVuO2ZvcihsZXQgVD0wLG5lPXZlLmxlbmd0aDtUPG5lO1QrKylJKHZlW1RdLE8sZWUsWCx4ZSl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT0xLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEEsTyxlZSl7aWYoITE9PT1DLmVuYWJsZWR8fCExPT09Qy5hdXRvVXBkYXRlJiYhMT09PUMubmVlZHNVcGRhdGV8fDA9PT1BLmxlbmd0aClyZXR1cm47bGV0IFg9bi5nZXRSZW5kZXJUYXJnZXQoKSx4ZT1uLmdldEFjdGl2ZUN1YmVGYWNlKCksZmU9bi5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLHZlPW4uc3RhdGU7dmUuc2V0QmxlbmRpbmcoMCksdmUuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSx2ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLHZlLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IFQ9MCxuZT1BLmxlbmd0aDtUPG5lO1QrKyl7bGV0IGxlPUFbVF0saGU9bGUuc2hhZG93O2lmKHZvaWQgMD09PWhlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsbGUsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oZS5hdXRvVXBkYXRlJiYhMT09PWhlLm5lZWRzVXBkYXRlKWNvbnRpbnVlO3IuY29weShoZS5tYXBTaXplKTtsZXQgeWU9aGUuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseSh5ZSksby5jb3B5KGhlLm1hcFNpemUpLChyLng+dXx8ci55PnUpJiYoci54PnUmJihvLng9TWF0aC5mbG9vcih1L3llLngpLHIueD1vLngqeWUueCxoZS5tYXBTaXplLng9by54KSxyLnk+dSYmKG8ueT1NYXRoLmZsb29yKHUveWUueSksci55PW8ueSp5ZS55LGhlLm1hcFNpemUueT1vLnkpKSxudWxsPT09aGUubWFwJiYhaGUuaXNQb2ludExpZ2h0U2hhZG93JiYzPT09dGhpcy50eXBlKXtsZXQgYWU9e21pbkZpbHRlcjpicyxtYWdGaWx0ZXI6YnMsZm9ybWF0OnpzfTtoZS5tYXA9bmV3IHZhKHIueCxyLnksYWUpLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUubWFwUGFzcz1uZXcgdmEoci54LHIueSxhZSksaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1udWxsPT09aGUubWFwJiYoaGUubWFwPW5ldyB2YShyLngsci55LHttaW5GaWx0ZXI6SW8sbWFnRmlsdGVyOklvLGZvcm1hdDp6c30pLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksbi5zZXRSZW5kZXJUYXJnZXQoaGUubWFwKSxuLmNsZWFyKCk7bGV0IEo9aGUuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgYWU9MDthZTxKO2FlKyspe2xldCBtZT1oZS5nZXRWaWV3cG9ydChhZSk7cy5zZXQoby54Km1lLngsby55Km1lLnksby54Km1lLnosby55Km1lLncpLHZlLnZpZXdwb3J0KHMpLGhlLnVwZGF0ZU1hdHJpY2VzKGxlLGFlKSxpPWhlLmdldEZydXN0dW0oKSxJKE8sZWUsaGUuY2FtZXJhLGxlLHRoaXMudHlwZSl9IWhlLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSYmXyhoZSxlZSksaGUubmVlZHNVcGRhdGU9ITF9Qy5uZWVkc1VwZGF0ZT0hMSxuLnNldFJlbmRlclRhcmdldChYLHhlLGZlKX19ZnVuY3Rpb24gdDhlKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyLGE9bmV3IGZ1bmN0aW9uKCl7bGV0IHVlPSExLEp0PW5ldyB0cixVdD1udWxsLFRuPW5ldyB0cigwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihHZSl7VXQhPT1HZSYmIXVlJiYobi5jb2xvck1hc2soR2UsR2UsR2UsR2UpLFV0PUdlKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2UsQ24sbWksbXIsb3MpeyEwPT09b3MmJihHZSo9bXIsQ24qPW1yLG1pKj1tciksSnQuc2V0KEdlLENuLG1pLG1yKSwhMT09PVRuLmVxdWFscyhKdCkmJihuLmNsZWFyQ29sb3IoR2UsQ24sbWksbXIpLFRuLmNvcHkoSnQpKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxVdD1udWxsLFRuLnNldCgtMSwwLDAsMCl9fX0sbD1uZXcgZnVuY3Rpb24oKXtsZXQgdWU9ITEsSnQ9bnVsbCxVdD1udWxsLFRuPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oR2Upe0dlP1JlKDI5MjkpOkFuKDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKEdlKXtKdCE9PUdlJiYhdWUmJihuLmRlcHRoTWFzayhHZSksSnQ9R2UpfSxzZXRGdW5jOmZ1bmN0aW9uKEdlKXtpZihVdCE9PUdlKXtpZihHZSlzd2l0Y2goR2Upe2Nhc2UgMDpuLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgMTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgMjpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgMzpkZWZhdWx0Om4uZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSA0Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSA1Om4uZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSA2Om4uZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSA3Om4uZGVwdGhGdW5jKDUxNyl9ZWxzZSBuLmRlcHRoRnVuYyg1MTUpO1V0PUdlfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2Upe1RuIT09R2UmJihuLmNsZWFyRGVwdGgoR2UpLFRuPUdlKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbH19fSxjPW5ldyBmdW5jdGlvbigpe2xldCB1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oVHIpe3VlfHwoVHI/UmUoMjk2MCk6QW4oMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKFRyKXtKdCE9PVRyJiYhdWUmJihuLnN0ZW5jaWxNYXNrKFRyKSxKdD1Ucil9LHNldEZ1bmM6ZnVuY3Rpb24oVHIsZWwsV3MpeyhVdCE9PVRyfHxUbiE9PWVsfHxHZSE9PVdzKSYmKG4uc3RlbmNpbEZ1bmMoVHIsZWwsV3MpLFV0PVRyLFRuPWVsLEdlPVdzKX0sc2V0T3A6ZnVuY3Rpb24oVHIsZWwsV3MpeyhDbiE9PVRyfHxtaSE9PWVsfHxtciE9PVdzKSYmKG4uc3RlbmNpbE9wKFRyLGVsLFdzKSxDbj1UcixtaT1lbCxtcj1Xcyl9LHNldExvY2tlZDpmdW5jdGlvbihUcil7dWU9VHJ9LHNldENsZWFyOmZ1bmN0aW9uKFRyKXtvcyE9PVRyJiYobi5jbGVhclN0ZW5jaWwoVHIpLG9zPVRyKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGx9fX0sdT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsbGU9bi5nZXRQYXJhbWV0ZXIoMzU2NjEpLGhlPSExLHllPTAsSj1uLmdldFBhcmFtZXRlcig3OTM4KTstMSE9PUouaW5kZXhPZigiV2ViR0wiKT8oeWU9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0xKTotMSE9PUouaW5kZXhPZigiT3BlbkdMIEVTIikmJih5ZT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0yKTtsZXQgYWU9bnVsbCxtZT17fSxqZT1uLmdldFBhcmFtZXRlcigzMDg4KSxNZT1uLmdldFBhcmFtZXRlcigyOTc4KSxGZT0obmV3IHRyKS5mcm9tQXJyYXkoamUpLHV0PShuZXcgdHIpLmZyb21BcnJheShNZSk7ZnVuY3Rpb24gU3QodWUsSnQsVXQpe2xldCBUbj1uZXcgVWludDhBcnJheSg0KSxHZT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKHVlLEdlKSxuLnRleFBhcmFtZXRlcmkodWUsMTAyNDEsOTcyOCksbi50ZXhQYXJhbWV0ZXJpKHVlLDEwMjQwLDk3MjgpO2ZvcihsZXQgQ249MDtDbjxVdDtDbisrKW4udGV4SW1hZ2UyRChKdCtDbiwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLFRuKTtyZXR1cm4gR2V9bGV0IGd0PXt9O2Z1bmN0aW9uIFJlKHVlKXshMCE9PXVbdWVdJiYobi5lbmFibGUodWUpLHVbdWVdPSEwKX1mdW5jdGlvbiBBbih1ZSl7ITEhPT11W3VlXSYmKG4uZGlzYWJsZSh1ZSksdVt1ZV09ITEpfWd0WzM1NTNdPVN0KDM1NTMsMzU1MywxKSxndFszNDA2N109U3QoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksUmUoMjkyOSksbC5zZXRGdW5jKDMpLFllKCExKSx4dCgxKSxSZSgyODg0KSxpZSgwKTtsZXQgdnQ9ezEwMDozMjc3NCwxMDE6MzI3NzgsMTAyOjMyNzc5fTtpZihpKXZ0WzEwM109MzI3NzUsdnRbMTA0XT0zMjc3NjtlbHNle2xldCB1ZT10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT11ZSYmKHZ0WzEwM109dWUuTUlOX0VYVCx2dFsxMDRdPXVlLk1BWF9FWFQpfWxldCBfdD17MjAwOjAsMjAxOjEsMjAyOjc2OCwyMDQ6NzcwLDIxMDo3NzYsMjA4Ojc3NCwyMDY6NzcyLDIwMzo3NjksMjA1Ojc3MSwyMDk6Nzc1LDIwNzo3NzN9O2Z1bmN0aW9uIGllKHVlLEp0LFV0LFRuLEdlLENuLG1pLG1yKXtpZigwIT09dWUpe2lmKCExPT09bSYmKFJlKDMwNDIpLG09ITApLDU9PT11ZSlHZT1HZXx8SnQsQ249Q258fFV0LG1pPW1pfHxUbiwoSnQhPT1ffHxHZSE9PUEpJiYobi5ibGVuZEVxdWF0aW9uU2VwYXJhdGUodnRbSnRdLHZ0W0dlXSksXz1KdCxBPUdlKSwoVXQhPT15fHxUbiE9PUl8fENuIT09T3x8bWkhPT1lZSkmJihuLmJsZW5kRnVuY1NlcGFyYXRlKF90W1V0XSxfdFtUbl0sX3RbQ25dLF90W21pXSkseT1VdCxJPVRuLE89Q24sZWU9bWkpLEM9dWUsWD1udWxsO2Vsc2UgaWYodWUhPT1DfHxtciE9PVgpe2lmKCgxMDAhPT1ffHwxMDAhPT1BKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksXz0xMDAsQT0xMDApLG1yKXN3aXRjaCh1ZSl7Y2FzZSAxOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSA0Om4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9ZWxzZSBzd2l0Y2godWUpe2Nhc2UgMTpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIDQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9eT1udWxsLEk9bnVsbCxPPW51bGwsZWU9bnVsbCxDPXVlLFg9bXJ9fWVsc2UhMD09PW0mJihBbigzMDQyKSxtPSExKX1mdW5jdGlvbiBZZSh1ZSl7eGUhPT11ZSYmKG4uZnJvbnRGYWNlKHVlPzIzMDQ6MjMwNSkseGU9dWUpfWZ1bmN0aW9uIHh0KHVlKXswIT09dWU/KFJlKDI4ODQpLHVlIT09ZmUmJm4uY3VsbEZhY2UoMT09PXVlPzEwMjk6Mj09PXVlPzEwMjg6MTAzMikpOkFuKDI4ODQpLGZlPXVlfWZ1bmN0aW9uIHNuKHVlLEp0LFV0KXt1ZT8oUmUoMzI4MjMpLChUIT09SnR8fG5lIT09VXQpJiYobi5wb2x5Z29uT2Zmc2V0KEp0LFV0KSxUPUp0LG5lPVV0KSk6QW4oMzI4MjMpfWZ1bmN0aW9uIG9pKHVlKXt2b2lkIDA9PT11ZSYmKHVlPTMzOTg0K2xlLTEpLGFlIT09dWUmJihuLmFjdGl2ZVRleHR1cmUodWUpLGFlPXVlKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOlJlLGRpc2FibGU6QW4sYmluZEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHVlLEp0KXtyZXR1cm4gZFt1ZV0hPT1KdCYmKG4uYmluZEZyYW1lYnVmZmVyKHVlLEp0KSxkW3VlXT1KdCxpJiYoMzYwMDk9PT11ZSYmKGRbMzYxNjBdPUp0KSwzNjE2MD09PXVlJiYoZFszNjAwOV09SnQpKSwhMCl9LGRyYXdCdWZmZXJzOmZ1bmN0aW9uKHVlLEp0KXtsZXQgVXQ9aCxUbj0hMTtpZih1ZSlpZihVdD1wLmdldChKdCksdm9pZCAwPT09VXQmJihVdD1bXSxwLnNldChKdCxVdCkpLHVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpe2xldCBHZT11ZS50ZXh0dXJlO2lmKFV0Lmxlbmd0aCE9PUdlLmxlbmd0aHx8MzYwNjQhPT1VdFswXSl7Zm9yKGxldCBDbj0wLG1pPUdlLmxlbmd0aDtDbjxtaTtDbisrKVV0W0NuXT0zNjA2NCtDbjtVdC5sZW5ndGg9R2UubGVuZ3RoLFRuPSEwfX1lbHNlIDM2MDY0IT09VXRbMF0mJihVdFswXT0zNjA2NCxUbj0hMCk7ZWxzZSAxMDI5IT09VXRbMF0mJihVdFswXT0xMDI5LFRuPSEwKTtUbiYmKGUuaXNXZWJHTDI/bi5kcmF3QnVmZmVycyhVdCk6dC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpLmRyYXdCdWZmZXJzV0VCR0woVXQpKX0sdXNlUHJvZ3JhbTpmdW5jdGlvbih1ZSl7cmV0dXJuIGYhPT11ZSYmKG4udXNlUHJvZ3JhbSh1ZSksZj11ZSwhMCl9LHNldEJsZW5kaW5nOmllLHNldE1hdGVyaWFsOmZ1bmN0aW9uKHVlLEp0KXsyPT09dWUuc2lkZT9BbigyODg0KTpSZSgyODg0KTtsZXQgVXQ9MT09PXVlLnNpZGU7SnQmJihVdD0hVXQpLFllKFV0KSwxPT09dWUuYmxlbmRpbmcmJiExPT09dWUudHJhbnNwYXJlbnQ/aWUoMCk6aWUodWUuYmxlbmRpbmcsdWUuYmxlbmRFcXVhdGlvbix1ZS5ibGVuZFNyYyx1ZS5ibGVuZERzdCx1ZS5ibGVuZEVxdWF0aW9uQWxwaGEsdWUuYmxlbmRTcmNBbHBoYSx1ZS5ibGVuZERzdEFscGhhLHVlLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKHVlLmRlcHRoRnVuYyksbC5zZXRUZXN0KHVlLmRlcHRoVGVzdCksbC5zZXRNYXNrKHVlLmRlcHRoV3JpdGUpLGEuc2V0TWFzayh1ZS5jb2xvcldyaXRlKTtsZXQgVG49dWUuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChUbiksVG4mJihjLnNldE1hc2sodWUuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKHVlLnN0ZW5jaWxGdW5jLHVlLnN0ZW5jaWxSZWYsdWUuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKHVlLnN0ZW5jaWxGYWlsLHVlLnN0ZW5jaWxaRmFpbCx1ZS5zdGVuY2lsWlBhc3MpKSxzbih1ZS5wb2x5Z29uT2Zmc2V0LHVlLnBvbHlnb25PZmZzZXRGYWN0b3IsdWUucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PXVlLmFscGhhVG9Db3ZlcmFnZT9SZSgzMjkyNik6QW4oMzI5MjYpfSxzZXRGbGlwU2lkZWQ6WWUsc2V0Q3VsbEZhY2U6eHQsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKHVlKXt1ZSE9PXZlJiYoaGUmJm4ubGluZVdpZHRoKHVlKSx2ZT11ZSl9LHNldFBvbHlnb25PZmZzZXQ6c24sc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24odWUpe3VlP1JlKDMwODkpOkFuKDMwODkpfSxhY3RpdmVUZXh0dXJlOm9pLGJpbmRUZXh0dXJlOmZ1bmN0aW9uKHVlLEp0KXtudWxsPT09YWUmJm9pKCk7bGV0IFV0PW1lW2FlXTt2b2lkIDA9PT1VdCYmKFV0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sbWVbYWVdPVV0KSwoVXQudHlwZSE9PXVlfHxVdC50ZXh0dXJlIT09SnQpJiYobi5iaW5kVGV4dHVyZSh1ZSxKdHx8Z3RbdWVdKSxVdC50eXBlPXVlLFV0LnRleHR1cmU9SnQpfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uKCl7bGV0IHVlPW1lW2FlXTt2b2lkIDAhPT11ZSYmdm9pZCAwIT09dWUudHlwZSYmKG4uYmluZFRleHR1cmUodWUudHlwZSxudWxsKSx1ZS50eXBlPXZvaWQgMCx1ZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4U3RvcmFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3RvcmFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHRleFN0b3JhZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTNEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHNjaXNzb3I6ZnVuY3Rpb24odWUpeyExPT09RmUuZXF1YWxzKHVlKSYmKG4uc2Npc3Nvcih1ZS54LHVlLnksdWUueix1ZS53KSxGZS5jb3B5KHVlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKHVlKXshMT09PXV0LmVxdWFscyh1ZSkmJihuLnZpZXdwb3J0KHVlLngsdWUueSx1ZS56LHVlLncpLHV0LmNvcHkodWUpKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PWkmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHU9e30sYWU9bnVsbCxtZT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsRmUuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHV0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX19fWZ1bmN0aW9uIG44ZShuLHQsZSxpLHIsbyxzKXtsZXQgbSxhPXIuaXNXZWJHTDIsbD1yLm1heFRleHR1cmVzLGM9ci5tYXhDdWJlbWFwU2l6ZSx1PXIubWF4VGV4dHVyZVNpemUsZD1yLm1heFNhbXBsZXMsaD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxmPW5ldyBXZWFrTWFwLEM9ITE7dHJ5e0M9dHlwZW9mIE9mZnNjcmVlbkNhbnZhczwidSImJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaHt9ZnVuY3Rpb24gXyhRLEYpe3JldHVybiBDP25ldyBPZmZzY3JlZW5DYW52YXMoUSxGKTpTTSgiY2FudmFzIil9ZnVuY3Rpb24geShRLEYsVmUsQ3Qpe2xldCB0bj0xO2lmKChRLndpZHRoPkN0fHxRLmhlaWdodD5DdCkmJih0bj1DdC9NYXRoLm1heChRLndpZHRoLFEuaGVpZ2h0KSksdG48MXx8ITA9PT1GKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJlEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZRIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJlEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IEJlPUY/QTVlOk1hdGguZmxvb3IsZ249QmUodG4qUS53aWR0aCksbG49QmUodG4qUS5oZWlnaHQpO3ZvaWQgMD09PW0mJihtPV8oZ24sbG4pKTtsZXQgRnQ9VmU/Xyhnbixsbik6bTtyZXR1cm4gRnQud2lkdGg9Z24sRnQuaGVpZ2h0PWxuLEZ0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKFEsMCwwLGduLGxuKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK1Eud2lkdGgrIngiK1EuaGVpZ2h0KyIpIHRvICgiK2duKyJ4IitsbisiKS4iKSxGdH1yZXR1cm4iZGF0YSJpbiBRJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrUS53aWR0aCsieCIrUS5oZWlnaHQrIikuIiksUX1yZXR1cm4gUX1mdW5jdGlvbiBJKFEpe3JldHVybiBpYWUoUS53aWR0aCkmJmlhZShRLmhlaWdodCl9ZnVuY3Rpb24gTyhRLEYpe3JldHVybiBRLmdlbmVyYXRlTWlwbWFwcyYmRiYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1ic31mdW5jdGlvbiBlZShRKXtuLmdlbmVyYXRlTWlwbWFwKFEpfWZ1bmN0aW9uIFgoUSxGLFZlLEN0LHRuPSExKXtpZighMT09PWEpcmV0dXJuIEY7aWYobnVsbCE9PVEpe2lmKHZvaWQgMCE9PW5bUV0pcmV0dXJuIG5bUV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK1ErIiciKX1sZXQgQmU9RjtyZXR1cm4gNjQwMz09PUYmJig1MTI2PT09VmUmJihCZT0zMzMyNiksNTEzMT09PVZlJiYoQmU9MzMzMjUpLDUxMjE9PT1WZSYmKEJlPTMzMzIxKSksMzMzMTk9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzMzMjgpLDUxMzE9PT1WZSYmKEJlPTMzMzI3KSw1MTIxPT09VmUmJihCZT0zMzMyMykpLDY0MDg9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzQ4MzYpLDUxMzE9PT1WZSYmKEJlPTM0ODQyKSw1MTIxPT09VmUmJihCZT1DdD09PUZyJiYhMT09PXRuPzM1OTA3OjMyODU2KSwzMjgxOT09PVZlJiYoQmU9MzI4NTQpLDMyODIwPT09VmUmJihCZT0zMjg1NSkpLCgzMzMyNT09PUJlfHwzMzMyNj09PUJlfHwzMzMyNz09PUJlfHwzMzMyOD09PUJlfHwzNDg0Mj09PUJlfHwzNDgzNj09PUJlKSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxCZX1mdW5jdGlvbiB4ZShRLEYsVmUpe3JldHVybiEwPT09TyhRLFZlKXx8US5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icz9NYXRoLmxvZzIoTWF0aC5tYXgoRi53aWR0aCxGLmhlaWdodCkpKzE6dm9pZCAwIT09US5taXBtYXBzJiZRLm1pcG1hcHMubGVuZ3RoPjA/US5taXBtYXBzLmxlbmd0aDpRLmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkoUS5pbWFnZSk/Ri5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIGZlKFEpe3JldHVybiBRPT09SW98fDEwMDQ9PT1RfHwxMDA1PT09UT85NzI4Ojk3Mjl9ZnVuY3Rpb24gdmUoUSl7bGV0IEY9US50YXJnZXQ7Ri5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix2ZSksZnVuY3Rpb24oUSl7bGV0IEY9aS5nZXQoUSk7dm9pZCAwIT09Ri5fX3dlYmdsSW5pdCYmKG4uZGVsZXRlVGV4dHVyZShGLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShRKSl9KEYpLEYuaXNWaWRlb1RleHR1cmUmJmYuZGVsZXRlKEYpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gVChRKXtsZXQgRj1RLnRhcmdldDtGLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFQpLGZ1bmN0aW9uKFEpe2xldCBGPVEudGV4dHVyZSxWZT1pLmdldChRKSxDdD1pLmdldChGKTtpZihRKXtpZih2b2lkIDAhPT1DdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShDdC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksUS5kZXB0aFRleHR1cmUmJlEuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgdG49MDt0bjw2O3RuKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXJbdG5dKSxWZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlclt0bl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXIpLFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoVmUuX193ZWJnbERlcHRoYnVmZmVyKSxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoVmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihWZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKFEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IHRuPTAsQmU9Ri5sZW5ndGg7dG48QmU7dG4rKyl7bGV0IGduPWkuZ2V0KEZbdG5dKTtnbi5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShnbi5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUoRlt0bl0pfWkucmVtb3ZlKEYpLGkucmVtb3ZlKFEpfX0oRil9bGV0IGhlPTA7ZnVuY3Rpb24gYWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7aWYoUS5pc1ZpZGVvVGV4dHVyZSYmZnVuY3Rpb24oUSl7bGV0IEY9cy5yZW5kZXIuZnJhbWU7Zi5nZXQoUSkhPT1GJiYoZi5zZXQoUSxGKSxRLnVwZGF0ZSgpKX0oUSksUS52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbil7bGV0IEN0PVEuaW1hZ2U7aWYodm9pZCAwPT09Q3QpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09Q3QuY29tcGxldGUpcmV0dXJuIHZvaWQgUmUoVmUsUSxGKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU1MyxWZS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gTWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9mdW5jdGlvbihRLEYsVmUpe2lmKDYhPT1GLmltYWdlLmxlbmd0aClyZXR1cm47Z3QoUSxGKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUoMzQwNjcsUS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxGLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEYucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEYudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBDdD1GJiYoRi5pc0NvbXByZXNzZWRUZXh0dXJlfHxGLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLHRuPUYuaW1hZ2VbMF0mJkYuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxCZT1bXTtmb3IobGV0IEdlPTA7R2U8NjtHZSsrKUJlW0dlXT1DdHx8dG4/dG4/Ri5pbWFnZVtHZV0uaW1hZ2U6Ri5pbWFnZVtHZV06eShGLmltYWdlW0dlXSwhMSwhMCxjKSxCZVtHZV09c24oRixCZVtHZV0pO2xldCBUbixnbj1CZVswXSxsbj1JKGduKXx8YSxGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPWEmJiEwIT09Ri5pc1ZpZGVvVGV4dHVyZSxKdD12b2lkIDA9PT1RLl9fdmVyc2lvbixVdD14ZShGLGduLGxuKTtpZihTdCgzNDA2NyxGLGxuKSxDdCl7dWUmJkp0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxVdCxMbixnbi53aWR0aCxnbi5oZWlnaHQpO2ZvcihsZXQgR2U9MDtHZTw2O0dlKyspe1RuPUJlW0dlXS5taXBtYXBzO2ZvcihsZXQgQ249MDtDbjxUbi5sZW5ndGg7Q24rKyl7bGV0IG1pPVRuW0NuXTtGLmZvcm1hdCE9PXpzP251bGwhPT1GdD91ZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsbWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStHZSxDbixMbixtaS53aWR0aCxtaS5oZWlnaHQsMCxtaS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsa3QsbWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuLExuLG1pLndpZHRoLG1pLmhlaWdodCwwLEZ0LGt0LG1pLmRhdGEpfX19ZWxzZXtUbj1GLm1pcG1hcHMsdWUmJkp0JiYoVG4ubGVuZ3RoPjAmJlV0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsVXQsTG4sQmVbMF0ud2lkdGgsQmVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBHZT0wO0dlPDY7R2UrKylpZih0bil7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEJlW0dlXS53aWR0aCxCZVtHZV0uaGVpZ2h0LEZ0LGt0LEJlW0dlXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrR2UsMCxMbixCZVtHZV0ud2lkdGgsQmVbR2VdLmhlaWdodCwwLEZ0LGt0LEJlW0dlXS5kYXRhKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtcj1UbltDbl0uaW1hZ2VbR2VdLmltYWdlO3VlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStHZSxDbisxLDAsMCxtci53aWR0aCxtci5oZWlnaHQsRnQsa3QsbXIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sbXIud2lkdGgsbXIuaGVpZ2h0LDAsRnQsa3QsbXIuZGF0YSl9fWVsc2V7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEZ0LGt0LEJlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLDAsTG4sRnQsa3QsQmVbR2VdKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtaT1UbltDbl07dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuKzEsMCwwLEZ0LGt0LG1pLmltYWdlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sRnQsa3QsbWkuaW1hZ2VbR2VdKX19fU8oRixsbikmJmVlKDM0MDY3KSxRLl9fdmVyc2lvbj1GLnZlcnNpb24sRi5vblVwZGF0ZSYmRi5vblVwZGF0ZShGKX0oVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzQwNjcsVmUuX193ZWJnbFRleHR1cmUpKX1sZXQgRmU9ezFlMzoxMDQ5NyxbWmFdOjMzMDcxLDEwMDI6MzM2NDh9LHV0PXtbSW9dOjk3MjgsMTAwNDo5OTg0LDEwMDU6OTk4NixbYnNdOjk3MjksMTAwNzo5OTg1LDEwMDg6OTk4N307ZnVuY3Rpb24gU3QoUSxGLFZlKXtpZihWZT8obi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsRmVbRi53cmFwU10pLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLEZlW0Yud3JhcFRdKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MixGZVtGLndyYXBSXSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDAsdXRbRi5tYWdGaWx0ZXJdKSxuLnRleFBhcmFtZXRlcmkoUSwxMDI0MSx1dFtGLm1pbkZpbHRlcl0pKToobi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsMzMwNzEpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLDMzMDcxKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MiwzMzA3MSksKEYud3JhcFMhPT1aYXx8Ri53cmFwVCE9PVphKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQwLGZlKEYubWFnRmlsdGVyKSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDEsZmUoRi5taW5GaWx0ZXIpKSxGLm1pbkZpbHRlciE9PUlvJiZGLm1pbkZpbHRlciE9PWJzJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksITA9PT10LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2xldCBDdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoRi50eXBlPT09WW0mJiExPT09dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwhMT09PWEmJkYudHlwZT09PXV5JiYhMT09PXQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXJldHVybjsoRi5hbmlzb3Ryb3B5PjF8fGkuZ2V0KEYpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYobi50ZXhQYXJhbWV0ZXJmKFEsQ3QuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsTWF0aC5taW4oRi5hbmlzb3Ryb3B5LHIuZ2V0TWF4QW5pc290cm9weSgpKSksaS5nZXQoRikuX19jdXJyZW50QW5pc290cm9weT1GLmFuaXNvdHJvcHkpfX1mdW5jdGlvbiBndChRLEYpe3ZvaWQgMD09PVEuX193ZWJnbEluaXQmJihRLl9fd2ViZ2xJbml0PSEwLEYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdmUpLFEuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gUmUoUSxGLFZlKXtsZXQgQ3Q9MzU1MztGLmlzRGF0YVRleHR1cmUyREFycmF5JiYoQ3Q9MzU4NjYpLEYuaXNEYXRhVGV4dHVyZTNEJiYoQ3Q9MzI4NzkpLGd0KFEsRiksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1ZlKSxlLmJpbmRUZXh0dXJlKEN0LFEuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsRi5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSxGLnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyxGLnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgdG49ZnVuY3Rpb24oUSl7cmV0dXJuIWEmJihRLndyYXBTIT09WmF8fFEud3JhcFQhPT1aYXx8US5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icyl9KEYpJiYhMT09PUkoRi5pbWFnZSksQmU9eShGLmltYWdlLHRuLCExLHUpO0JlPXNuKEYsQmUpO2xldCBnbj1JKEJlKXx8YSxsbj1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksRnQ9by5jb252ZXJ0KEYudHlwZSksa3Q9WChGLmludGVybmFsRm9ybWF0LGxuLEZ0LEYuZW5jb2RpbmcsRi5pc1ZpZGVvVGV4dHVyZSk7U3QoQ3QsRixnbik7bGV0IExuLHVlPUYubWlwbWFwcyxKdD1hJiYhMCE9PUYuaXNWaWRlb1RleHR1cmUsVXQ9dm9pZCAwPT09US5fX3ZlcnNpb24sVG49eGUoRixCZSxnbik7aWYoRi5pc0RlcHRoVGV4dHVyZSlrdD02NDAyLGE/a3Q9Ri50eXBlPT09WW0/MzYwMTI6MTAxND09PUYudHlwZT8zMzE5MDpGLnR5cGU9PT1keT8zNTA1NjozMzE4OTpGLnR5cGU9PT1ZbSYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksRi5mb3JtYXQ9PT1RbSYmNjQwMj09PWt0JiZGLnR5cGUhPT13TSYmMTAxNCE9PUYudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLEYudHlwZT13TSxGdD1vLmNvbnZlcnQoRi50eXBlKSksRi5mb3JtYXQ9PT1teSYmNjQwMj09PWt0JiYoa3Q9MzQwNDEsRi50eXBlIT09ZHkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksRi50eXBlPWR5LEZ0PW8uY29udmVydChGLnR5cGUpKSksSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxrdCxCZS53aWR0aCxCZS5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LDAsbG4sRnQsbnVsbCk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUpaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKTtGLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIEp0PyhVdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNDb21wcmVzc2VkVGV4dHVyZSl7SnQmJlV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LHVlWzBdLndpZHRoLHVlWzBdLmhlaWdodCk7Zm9yKGxldCBHZT0wLENuPXVlLmxlbmd0aDtHZTxDbjtHZSsrKUxuPXVlW0dlXSxGLmZvcm1hdCE9PXpzP251bGwhPT1sbj9KdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixMbi5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM1NTMsR2Usa3QsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsTG4uZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6SnQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKX1lbHNlIGlmKEYuaXNEYXRhVGV4dHVyZTJEQXJyYXkpSnQ/KFV0JiZlLnRleFN0b3JhZ2UzRCgzNTg2NixUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzNTg2NiwwLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLDAsbG4sRnQsQmUuZGF0YSk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUzRClKdD8oVXQmJmUudGV4U3RvcmFnZTNEKDMyODc5LFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLGxuLEZ0LEJlLmRhdGEpKTplLnRleEltYWdlM0QoMzI4NzksMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNGcmFtZWJ1ZmZlclRleHR1cmUpSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsQmUud2lkdGgsQmUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGt0LEJlLndpZHRoLEJlLmhlaWdodCwwLGxuLEZ0LG51bGwpO2Vsc2UgaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLEdlLDAsMCxsbixGdCxMbik6ZS50ZXhJbWFnZTJEKDM1NTMsR2Usa3QsbG4sRnQsTG4pO0YuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgSnQ/KFV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsbG4sRnQsQmUpKTplLnRleEltYWdlMkQoMzU1MywwLGt0LGxuLEZ0LEJlKTtPKEYsZ24pJiZlZShDdCksUS5fX3ZlcnNpb249Ri52ZXJzaW9uLEYub25VcGRhdGUmJkYub25VcGRhdGUoRil9ZnVuY3Rpb24gRXQoUSxGLFZlLEN0LHRuKXtsZXQgQmU9by5jb252ZXJ0KFZlLmZvcm1hdCxWZS5lbmNvZGluZyksZ249by5jb252ZXJ0KFZlLnR5cGUpLGxuPVgoVmUuaW50ZXJuYWxGb3JtYXQsQmUsZ24sVmUuZW5jb2RpbmcpO2kuZ2V0KEYpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KDMyODc5PT09dG58fDM1ODY2PT09dG4/ZS50ZXhJbWFnZTNEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCxGLmRlcHRoLDAsQmUsZ24sbnVsbCk6ZS50ZXhJbWFnZTJEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCwwLEJlLGduLG51bGwpKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxRKSxGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDAseHQoRikpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDApLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIG9uKFEsRixWZSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLFEpLEYuZGVwdGhCdWZmZXImJiFGLnN0ZW5jaWxCdWZmZXIpe2xldCBDdD0zMzE4OTtpZihWZXx8Ri51c2VSZW5kZXJUb1RleHR1cmUpe2xldCB0bj1GLmRlcHRoVGV4dHVyZTt0biYmdG4uaXNEZXB0aFRleHR1cmUmJih0bi50eXBlPT09WW0/Q3Q9MzYwMTI6MTAxND09PXRuLnR5cGUmJihDdD0zMzE5MCkpO2xldCBCZT14dChGKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KX1lbHNlIG4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxDdCxGLndpZHRoLEYuaGVpZ2h0KTtuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLFEpfWVsc2UgaWYoRi5kZXB0aEJ1ZmZlciYmRi5zdGVuY2lsQnVmZmVyKXtsZXQgQ3Q9eHQoRik7VmUmJkYudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOkYudXNlUmVuZGVyVG9UZXh0dXJlP2gucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSxGLndpZHRoLEYuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLFEpfWVsc2V7bGV0IEN0PSEwPT09Ri5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP0YudGV4dHVyZVswXTpGLnRleHR1cmUsdG49by5jb252ZXJ0KEN0LmZvcm1hdCxDdC5lbmNvZGluZyksQmU9by5jb252ZXJ0KEN0LnR5cGUpLGduPVgoQ3QuaW50ZXJuYWxGb3JtYXQsdG4sQmUsQ3QuZW5jb2RpbmcpLGxuPXh0KEYpO1ZlJiZGLnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZ24sRi53aWR0aCxGLmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIHZ0KFEpe2xldCBGPWkuZ2V0KFEpLFZlPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihRLmRlcHRoVGV4dHVyZSYmIUYuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYoVmUpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpOyFmdW5jdGlvbihRLEYpe2lmKEYmJkYuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUSksIUYuZGVwdGhUZXh0dXJlfHwhRi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7KCFpLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmV8fEYuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoIT09Ri53aWR0aHx8Ri5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0IT09Ri5oZWlnaHQpJiYoRi5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9Ri53aWR0aCxGLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9Ri5oZWlnaHQsRi5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLGFlKEYuZGVwdGhUZXh0dXJlLDApO2xldCBDdD1pLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsdG49eHQoRik7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0PT09UW0pRi51c2VSZW5kZXJUb1RleHR1cmU/aC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsQ3QsMCx0bik6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLEN0LDApO2Vsc2V7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0IT09bXkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzMzMDYsMzU1MyxDdCwwLHRuKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsQ3QsMCl9fShGLl9fd2ViZ2xGcmFtZWJ1ZmZlcixRKX1lbHNlIGlmKFZlKXtGLl9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IEN0PTA7Q3Q8NjtDdCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEYuX193ZWJnbEZyYW1lYnVmZmVyW0N0XSksRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdLFEsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRi5fX3dlYmdsRnJhbWVidWZmZXIpLEYuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXIsUSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24geHQoUSl7cmV0dXJuIGEmJihRLnVzZVJlbmRlcmJ1ZmZlcnx8US51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGQsUS5zYW1wbGVzKTowfWZ1bmN0aW9uIHNuKFEsRil7bGV0IFZlPVEuZW5jb2RpbmcsQ3Q9US5mb3JtYXQsdG49US50eXBlO3JldHVybiEwPT09US5pc0NvbXByZXNzZWRUZXh0dXJlfHwhMD09PVEuaXNWaWRlb1RleHR1cmV8fDEwMzU9PT1RLmZvcm1hdHx8VmUhPT1EaCYmKFZlPT09RnI/ITE9PT1hPyEwPT09dC5oYXMoIkVYVF9zUkdCIikmJkN0PT09enM/KFEuZm9ybWF0PTEwMzUsUS5taW5GaWx0ZXI9YnMsUS5nZW5lcmF0ZU1pcG1hcHM9ITEpOkY9VWQuc1JHQlRvTGluZWFyKEYpOihDdCE9PXpzfHx0biE9PVNoKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsVmUpKSxGfWxldCBTbj0hMSxvaT0hMTt0aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtsZXQgUT1oZTtyZXR1cm4gUT49bCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICIrUSsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLGhlKz0xLFF9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24oKXtoZT0wfSx0aGlzLnNldFRleHR1cmUyRD1hZSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKFEsRil7bGV0IFZlPWkuZ2V0KFEpO1EudmVyc2lvbj4wJiZWZS5fX3ZlcnNpb24hPT1RLnZlcnNpb24/UmUoVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU4NjYsVmUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlM0Q9ZnVuY3Rpb24oUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9SZShWZSxRLEYpOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrRiksZS5iaW5kVGV4dHVyZSgzMjg3OSxWZS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmVDdWJlPU1lLHRoaXMucmViaW5kVGV4dHVyZXM9ZnVuY3Rpb24oUSxGLFZlKXtsZXQgQ3Q9aS5nZXQoUSk7dm9pZCAwIT09RiYmRXQoQ3QuX193ZWJnbEZyYW1lYnVmZmVyLFEsUS50ZXh0dXJlLDM2MDY0LDM1NTMpLHZvaWQgMCE9PVZlJiZ2dChRKX0sdGhpcy5zZXR1cFJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtsZXQgRj1RLnRleHR1cmUsVmU9aS5nZXQoUSksQ3Q9aS5nZXQoRik7US5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixUKSwhMCE9PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyYmKHZvaWQgMD09PUN0Ll9fd2ViZ2xUZXh0dXJlJiYoQ3QuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkpLEN0Ll9fdmVyc2lvbj1GLnZlcnNpb24scy5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IHRuPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCxCZT0hMD09PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyxnbj1GLmlzRGF0YVRleHR1cmUzRHx8Ri5pc0RhdGFUZXh0dXJlMkRBcnJheSxsbj1JKFEpfHxhO2lmKHRuKXtWZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBGdD0wO0Z0PDY7RnQrKylWZS5fX3dlYmdsRnJhbWVidWZmZXJbRnRdPW4uY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCksQmUpaWYoci5kcmF3QnVmZmVycyl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1pLmdldChGdFtrdF0pO3ZvaWQgMD09PXVlLl9fd2ViZ2xUZXh0dXJlJiYodWUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPXh0KFEpO24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHVlLExuLFEud2lkdGgsUS5oZWlnaHQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLFZlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSxRLmRlcHRoQnVmZmVyJiYoVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLFEsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKHRuKXtlLmJpbmRUZXh0dXJlKDM0MDY3LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdCgzNDA2NyxGLGxuKTtmb3IobGV0IEZ0PTA7RnQ8NjtGdCsrKUV0KFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltGdF0sUSxGLDM2MDY0LDM0MDY5K0Z0KTtPKEYsbG4pJiZlZSgzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihCZSl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1GdFtrdF0sSnQ9aS5nZXQodWUpO2UuYmluZFRleHR1cmUoMzU1MyxKdC5fX3dlYmdsVGV4dHVyZSksU3QoMzU1Myx1ZSxsbiksRXQoVmUuX193ZWJnbEZyYW1lYnVmZmVyLFEsdWUsMzYwNjQra3QsMzU1MyksTyh1ZSxsbikmJmVlKDM1NTMpfWUudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IEZ0PTM1NTM7Z24mJihhP0Z0PUYuaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxlLmJpbmRUZXh0dXJlKEZ0LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdChGdCxGLGxuKSxFdChWZS5fX3dlYmdsRnJhbWVidWZmZXIsUSxGLDM2MDY0LEZ0KSxPKEYsbG4pJiZlZShGdCksZS51bmJpbmRUZXh0dXJlKCl9US5kZXB0aEJ1ZmZlciYmdnQoUSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKFEpe2xldCBGPUkoUSl8fGEsVmU9ITA9PT1RLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/US50ZXh0dXJlOltRLnRleHR1cmVdO2ZvcihsZXQgQ3Q9MCx0bj1WZS5sZW5ndGg7Q3Q8dG47Q3QrKyl7bGV0IEJlPVZlW0N0XTtpZihPKEJlLEYpKXtsZXQgZ249US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLGxuPWkuZ2V0KEJlKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKGduLGxuKSxlZShnbiksZS51bmJpbmRUZXh0dXJlKCl9fX0sdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtsZXQgRj1RLndpZHRoLFZlPVEuaGVpZ2h0LEN0PTE2Mzg0LHRuPVszNjA2NF0sQmU9US5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O1EuZGVwdGhCdWZmZXImJnRuLnB1c2goQmUpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fChRLmRlcHRoQnVmZmVyJiYoQ3R8PTI1NiksUS5zdGVuY2lsQnVmZmVyJiYoQ3R8PTEwMjQpKTtsZXQgZ249aS5nZXQoUSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsZ24uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxnbi5fX3dlYmdsRnJhbWVidWZmZXIpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkmJihuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxbQmVdKSxuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOSxbQmVdKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLEYsVmUsMCwwLEYsVmUsQ3QsOTcyOCksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsdG4pLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LGduLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX0sdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPXZ0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9RXQsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWZ1bmN0aW9uKFEsRil7USYmUS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1TbiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLFNuPSEwKSxRPVEudGV4dHVyZSksYWUoUSxGKX0sdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oUSxGKXtRJiZRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoITE9PT1vaSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxvaT0hMCksUT1RLnRleHR1cmUpLE1lKFEsRil9fWZ1bmN0aW9uIGk4ZShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtyZXR1cm57Y29udmVydDpmdW5jdGlvbihvLHM9bnVsbCl7bGV0IGE7aWYobz09PVNoKXJldHVybiA1MTIxO2lmKDEwMTc9PT1vKXJldHVybiAzMjgxOTtpZigxMDE4PT09bylyZXR1cm4gMzI4MjA7aWYoMTAxMD09PW8pcmV0dXJuIDUxMjA7aWYoMTAxMT09PW8pcmV0dXJuIDUxMjI7aWYobz09PXdNKXJldHVybiA1MTIzO2lmKDEwMTM9PT1vKXJldHVybiA1MTI0O2lmKDEwMTQ9PT1vKXJldHVybiA1MTI1O2lmKG89PT1ZbSlyZXR1cm4gNTEyNjtpZihvPT09dXkpcmV0dXJuIGk/NTEzMTooYT10LmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1hP2EuSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYoMTAyMT09PW8pcmV0dXJuIDY0MDY7aWYobz09PXpzKXJldHVybiA2NDA4O2lmKDEwMjQ9PT1vKXJldHVybiA2NDA5O2lmKDEwMjU9PT1vKXJldHVybiA2NDEwO2lmKG89PT1RbSlyZXR1cm4gNjQwMjtpZihvPT09bXkpcmV0dXJuIDM0MDQxO2lmKDEwMjg9PT1vKXJldHVybiA2NDAzO2lmKDEwMzU9PT1vKXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLG51bGwhPT1hP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZigxMDI5PT09bylyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PW8pcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT1vKXJldHVybiAzMzMyMDtpZigxMDMzPT09bylyZXR1cm4gMzYyNDk7aWYoMzM3NzY9PT1vfHwzMzc3Nz09PW98fDMzNzc4PT09b3x8MzM3Nzk9PT1vKWlmKHM9PT1Gcil7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDMzNzc2PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNle2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzM3NzY9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzc9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKDMzNzc4PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigzMzc3OT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9aWYoMzU4NDA9PT1vfHwzNTg0MT09PW98fDM1ODQyPT09b3x8MzU4NDM9PT1vKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNTg0MD09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0MT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZigzNTg0Mj09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDM9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWlmKDM2MTk2PT09bylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YT9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZigzNzQ5Mj09PW98fDM3NDk2PT09byl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDM3NDkyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYoMzc0OTY9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9aWYoMzc4MDg9PT1vfHwzNzgwOT09PW98fDM3ODEwPT09b3x8Mzc4MTE9PT1vfHwzNzgxMj09PW98fDM3ODEzPT09b3x8Mzc4MTQ9PT1vfHwzNzgxNT09PW98fDM3ODE2PT09b3x8Mzc4MTc9PT1vfHwzNzgxOD09PW98fDM3ODE5PT09b3x8Mzc4MjA9PT1vfHwzNzgyMT09PW8pe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzc4MDg9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO2lmKDM3ODA5PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZigzNzgxMD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYoMzc4MTE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO2lmKDM3ODEyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZigzNzgxMz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYoMzc4MTQ9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO2lmKDM3ODE1PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZigzNzgxNj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZigzNzgxNz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtpZigzNzgxOD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZigzNzgxOT09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKDM3ODIwPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7aWYoMzc4MjE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1pZigzNjQ5Mj09PW8pe2lmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNjQ5Mj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1yZXR1cm4gbz09PWR5P2k/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09YT9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fU0yLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTMj1jbGFzcyBleHRlbmRzIHhze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtTMi5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgWG09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtYbS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgcjhlPXt0eXBlOiJtb3ZlIn0seU09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IFhtLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgWG0sdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3ICQpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBYbSx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgJCksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxpKXtsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PWEmJihyPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLGkpLG51bGwhPT1yJiYoYS5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCksYS5tYXRyaXguZGVjb21wb3NlKGEucG9zaXRpb24sYS5yb3RhdGlvbixhLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhhLmhhc0xpbmVhclZlbG9jaXR5PSEwLGEubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6YS5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8oYS5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsYS5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOmEuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChyOGUpKSksYyYmdC5oYW5kKXtzPSEwO2ZvcihsZXQgbSBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBDPWUuZ2V0Sm9pbnRQb3NlKG0saSk7aWYodm9pZCAwPT09Yy5qb2ludHNbbS5qb2ludE5hbWVdKXtsZXQgeT1uZXcgWG07eS5tYXRyaXhBdXRvVXBkYXRlPSExLHkudmlzaWJsZT0hMSxjLmpvaW50c1ttLmpvaW50TmFtZV09eSxjLmFkZCh5KX1sZXQgXz1jLmpvaW50c1ttLmpvaW50TmFtZV07bnVsbCE9PUMmJihfLm1hdHJpeC5mcm9tQXJyYXkoQy50cmFuc2Zvcm0ubWF0cml4KSxfLm1hdHJpeC5kZWNvbXBvc2UoXy5wb3NpdGlvbixfLnJvdGF0aW9uLF8uc2NhbGUpLF8uam9pbnRSYWRpdXM9Qy5yYWRpdXMpLF8udmlzaWJsZT1udWxsIT09Q31sZXQgcD1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLnBvc2l0aW9uLmRpc3RhbmNlVG8oYy5qb2ludHNbInRodW1iLXRpcCJdLnBvc2l0aW9uKSxoPS4wMixmPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPmgrZj8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJnA8PWgtZiYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbnVsbCE9PWwmJnQuZ3JpcFNwYWNlJiYobz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSksbnVsbCE9PW8mJihsLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLG8ubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KG8ubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLG8uYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KG8uYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PXIpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09YyYmKGMudmlzaWJsZT1udWxsIT09cyksdGhpc319LFBNPWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7aWYoKHU9dm9pZCAwIT09dT91OlFtKSE9PVFtJiZ1IT09bXkpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWkmJnU9PT1RbSYmKGk9d00pLHZvaWQgMD09PWkmJnU9PT1teSYmKGk9ZHkpLHN1cGVyKG51bGwscixvLHMsYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1hP2E6SW8sdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bD9sOklvLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtQTS5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIEFVPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLG89MSxzPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxkPW51bGwscD1udWxsLGg9ITEsZj1udWxsLG09ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLEM9bnVsbCxfPW51bGwseT1bXSxJPW5ldyBNYXAsQT1uZXcgeHM7QS5sYXllcnMuZW5hYmxlKDEpLEEudmlld3BvcnQ9bmV3IHRyO2xldCBPPW5ldyB4cztPLmxheWVycy5lbmFibGUoMiksTy52aWV3cG9ydD1uZXcgdHI7bGV0IGVlPVtBLE9dLFg9bmV3IFMyO1gubGF5ZXJzLmVuYWJsZSgxKSxYLmxheWVycy5lbmFibGUoMik7bGV0IHhlPW51bGwsZmU9bnVsbDtmdW5jdGlvbiB2ZShNZSl7bGV0IEZlPUkuZ2V0KE1lLmlucHV0U291cmNlKTtGZSYmRmUuZGlzcGF0Y2hFdmVudCh7dHlwZTpNZS50eXBlLGRhdGE6TWUuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBUKCl7SS5mb3JFYWNoKGZ1bmN0aW9uKE1lLEZlKXtNZS5kaXNjb25uZWN0KEZlKX0pLEkuY2xlYXIoKSx4ZT1udWxsLGZlPW51bGwsdC5zZXRSZW5kZXJUYXJnZXQoQykscD1udWxsLGQ9bnVsbCx1PW51bGwscj1udWxsLF89bnVsbCxqZS5zdG9wKCksaS5pc1ByZXNlbnRpbmc9ITEsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uZW5kIn0pfWZ1bmN0aW9uIG5lKE1lKXtsZXQgRmU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCB1dD0wO3V0PHkubGVuZ3RoO3V0KyspSS5zZXQoRmVbdXRdLHlbdXRdKTtmb3IobGV0IHV0PTA7dXQ8TWUucmVtb3ZlZC5sZW5ndGg7dXQrKyl7bGV0IFN0PU1lLnJlbW92ZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmKGd0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpTdH0pLEkuZGVsZXRlKFN0KSl9Zm9yKGxldCB1dD0wO3V0PE1lLmFkZGVkLmxlbmd0aDt1dCsrKXtsZXQgU3Q9TWUuYWRkZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmZ3QuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOlN0fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKE1lKXtvPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKE1lKXthPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZDpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKE1lKXtpZihyPU1lLG51bGwhPT1yKXtpZihDPXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0Iix2ZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIixUKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIsbmUpLCEwIT09bS54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PXIucmVuZGVyU3RhdGUubGF5ZXJzfHwhMT09PXQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKXA9bmV3IFhSV2ViR0xMYXllcihyLGUse2FudGlhbGlhczp2b2lkIDAhPT1yLnJlbmRlclN0YXRlLmxheWVyc3x8bS5hbnRpYWxpYXMsYWxwaGE6bS5hbHBoYSxkZXB0aDptLmRlcHRoLHN0ZW5jaWw6bS5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpwfSksXz1uZXcgdmEocC5mcmFtZWJ1ZmZlcldpZHRoLHAuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTtlbHNle2g9bS5hbnRpYWxpYXM7bGV0IEZlPW51bGwsdXQ9bnVsbCxTdD1udWxsO20uZGVwdGgmJihTdD1tLnN0ZW5jaWw/MzUwNTY6MzMxOTAsRmU9bS5zdGVuY2lsP215OlFtLHV0PW0uc3RlbmNpbD9keTp3TSk7bGV0IGd0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09RnI/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6U3Qsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxkPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKGd0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2RdfSksXz1oP25ldyBFTShkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGRlcHRoVGV4dHVyZTpuZXcgUE0oZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHV0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEZlKSxzdGVuY2lsQnVmZmVyOm0uc3RlbmNpbCxpZ25vcmVEZXB0aDpkLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTpuZXcgdmEoZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6enMsdHlwZTpTaCxkZXB0aFRleHR1cmU6bmV3IFBNKGQudGV4dHVyZVdpZHRoLGQudGV4dHVyZUhlaWdodCx1dCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZSksc3RlbmNpbEJ1ZmZlcjptLnN0ZW5jaWwsaWdub3JlRGVwdGg6ZC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9Xy5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLHM9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksamUuc2V0Q29udGV4dChyKSxqZS5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07bGV0IGxlPW5ldyAkLGhlPW5ldyAkO2Z1bmN0aW9uIEooTWUsRmUpe251bGw9PT1GZT9NZS5tYXRyaXhXb3JsZC5jb3B5KE1lLm1hdHJpeCk6TWUubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhGZS5tYXRyaXhXb3JsZCxNZS5tYXRyaXgpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihNZSl7aWYobnVsbD09PXIpcmV0dXJuO1gubmVhcj1PLm5lYXI9QS5uZWFyPU1lLm5lYXIsWC5mYXI9Ty5mYXI9QS5mYXI9TWUuZmFyLCh4ZSE9PVgubmVhcnx8ZmUhPT1YLmZhcikmJihyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6WC5uZWFyLGRlcHRoRmFyOlguZmFyfSkseGU9WC5uZWFyLGZlPVguZmFyKTtsZXQgRmU9TWUucGFyZW50LHV0PVguY2FtZXJhcztKKFgsRmUpO2ZvcihsZXQgZ3Q9MDtndDx1dC5sZW5ndGg7Z3QrKylKKHV0W2d0XSxGZSk7WC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoWC5wb3NpdGlvbixYLnF1YXRlcm5pb24sWC5zY2FsZSksTWUucG9zaXRpb24uY29weShYLnBvc2l0aW9uKSxNZS5xdWF0ZXJuaW9uLmNvcHkoWC5xdWF0ZXJuaW9uKSxNZS5zY2FsZS5jb3B5KFguc2NhbGUpLE1lLm1hdHJpeC5jb3B5KFgubWF0cml4KSxNZS5tYXRyaXhXb3JsZC5jb3B5KFgubWF0cml4V29ybGQpO2xldCBTdD1NZS5jaGlsZHJlbjtmb3IobGV0IGd0PTAsUmU9U3QubGVuZ3RoO2d0PFJlO2d0KyspU3RbZ3RdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09dXQubGVuZ3RoP2Z1bmN0aW9uKE1lLEZlLHV0KXtsZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oRmUubWF0cml4V29ybGQpLGhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih1dC5tYXRyaXhXb3JsZCk7bGV0IFN0PWxlLmRpc3RhbmNlVG8oaGUpLGd0PUZlLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsUmU9dXQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxBbj1ndFsxNF0vKGd0WzEwXS0xKSxFdD1ndFsxNF0vKGd0WzEwXSsxKSxvbj0oZ3RbOV0rMSkvZ3RbNV0sQ2U9KGd0WzldLTEpL2d0WzVdLHZ0PShndFs4XS0xKS9ndFswXSxfdD0oUmVbOF0rMSkvUmVbMF0saWU9QW4qdnQsY3Q9QW4qX3QsWWU9U3QvKC12dCtfdCkseHQ9WWUqLXZ0O0ZlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShNZS5wb3NpdGlvbixNZS5xdWF0ZXJuaW9uLE1lLnNjYWxlKSxNZS50cmFuc2xhdGVYKHh0KSxNZS50cmFuc2xhdGVaKFllKSxNZS5tYXRyaXhXb3JsZC5jb21wb3NlKE1lLnBvc2l0aW9uLE1lLnF1YXRlcm5pb24sTWUuc2NhbGUpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgaHQ9QW4rWWUsc249RXQrWWU7TWUucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoaWUteHQsY3QrKFN0LXh0KSxvbipFdC9zbipodCxDZSpFdC9zbipodCxodCxzbil9KFgsQSxPKTpYLnByb2plY3Rpb25NYXRyaXguY29weShBLnByb2plY3Rpb25NYXRyaXgpfSx0aGlzLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiBYfSx0aGlzLmdldEZvdmVhdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT09ZD9kLmZpeGVkRm92ZWF0aW9uOm51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246dm9pZCAwfSx0aGlzLnNldEZvdmVhdGlvbj1mdW5jdGlvbihNZSl7bnVsbCE9PWQmJihkLmZpeGVkRm92ZWF0aW9uPU1lKSxudWxsIT09cCYmdm9pZCAwIT09cC5maXhlZEZvdmVhdGlvbiYmKHAuZml4ZWRGb3ZlYXRpb249TWUpfTtsZXQgYWU9bnVsbCxqZT1uZXcgZ2xlO2plLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oTWUsRmUpe2lmKGM9RmUuZ2V0Vmlld2VyUG9zZShzKSxmPUZlLG51bGwhPT1jKXtsZXQgU3Q9Yy52aWV3cztudWxsIT09cCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIoXyxwLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldChfKSk7bGV0IGd0PSExO1N0Lmxlbmd0aCE9PVguY2FtZXJhcy5sZW5ndGgmJihYLmNhbWVyYXMubGVuZ3RoPTAsZ3Q9ITApO2ZvcihsZXQgUmU9MDtSZTxTdC5sZW5ndGg7UmUrKyl7bGV0IEFuPVN0W1JlXSxFdD1udWxsO2lmKG51bGwhPT1wKUV0PXAuZ2V0Vmlld3BvcnQoQW4pO2Vsc2V7bGV0IENlPXUuZ2V0Vmlld1N1YkltYWdlKGQsQW4pO0V0PUNlLnZpZXdwb3J0LDA9PT1SZSYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoXyxDZS5jb2xvclRleHR1cmUsZC5pZ25vcmVEZXB0aFZhbHVlcz92b2lkIDA6Q2UuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoXykpfWxldCBvbj1lZVtSZV07b24ubWF0cml4LmZyb21BcnJheShBbi50cmFuc2Zvcm0ubWF0cml4KSxvbi5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShBbi5wcm9qZWN0aW9uTWF0cml4KSxvbi52aWV3cG9ydC5zZXQoRXQueCxFdC55LEV0LndpZHRoLEV0LmhlaWdodCksMD09PVJlJiZYLm1hdHJpeC5jb3B5KG9uLm1hdHJpeCksITA9PT1ndCYmWC5jYW1lcmFzLnB1c2gob24pfX1sZXQgdXQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBTdD0wO1N0PHkubGVuZ3RoO1N0KyspeVtTdF0udXBkYXRlKHV0W1N0XSxGZSxzKTthZSYmYWUoTWUsRmUpLGY9bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihNZSl7YWU9TWV9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBvOGUobil7ZnVuY3Rpb24gaShfLHkpe18ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHkseS5jb2xvciYmXy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvcikseS5lbWlzc2l2ZSYmXy5lbWlzc2l2ZS52YWx1ZS5jb3B5KHkuZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHkuZW1pc3NpdmVJbnRlbnNpdHkpLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuc3BlY3VsYXJNYXAmJihfLnNwZWN1bGFyTWFwLnZhbHVlPXkuc3BlY3VsYXJNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCk7bGV0IEEsTyxJPW4uZ2V0KHkpLmVudk1hcDtJJiYoXy5lbnZNYXAudmFsdWU9SSxfLmZsaXBFbnZNYXAudmFsdWU9SS5pc0N1YmVUZXh0dXJlJiYhMT09PUkuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsXy5yZWZsZWN0aXZpdHkudmFsdWU9eS5yZWZsZWN0aXZpdHksXy5pb3IudmFsdWU9eS5pb3IsXy5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eS5yZWZyYWN0aW9uUmF0aW8pLHkubGlnaHRNYXAmJihfLmxpZ2h0TWFwLnZhbHVlPXkubGlnaHRNYXAsXy5saWdodE1hcEludGVuc2l0eS52YWx1ZT15LmxpZ2h0TWFwSW50ZW5zaXR5KSx5LmFvTWFwJiYoXy5hb01hcC52YWx1ZT15LmFvTWFwLF8uYW9NYXBJbnRlbnNpdHkudmFsdWU9eS5hb01hcEludGVuc2l0eSkseS5tYXA/QT15Lm1hcDp5LnNwZWN1bGFyTWFwP0E9eS5zcGVjdWxhck1hcDp5LmRpc3BsYWNlbWVudE1hcD9BPXkuZGlzcGxhY2VtZW50TWFwOnkubm9ybWFsTWFwP0E9eS5ub3JtYWxNYXA6eS5idW1wTWFwP0E9eS5idW1wTWFwOnkucm91Z2huZXNzTWFwP0E9eS5yb3VnaG5lc3NNYXA6eS5tZXRhbG5lc3NNYXA/QT15Lm1ldGFsbmVzc01hcDp5LmFscGhhTWFwP0E9eS5hbHBoYU1hcDp5LmVtaXNzaXZlTWFwP0E9eS5lbWlzc2l2ZU1hcDp5LmNsZWFyY29hdE1hcD9BPXkuY2xlYXJjb2F0TWFwOnkuY2xlYXJjb2F0Tm9ybWFsTWFwP0E9eS5jbGVhcmNvYXROb3JtYWxNYXA6eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/QT15LmNsZWFyY29hdFJvdWdobmVzc01hcDp5LnNwZWN1bGFySW50ZW5zaXR5TWFwP0E9eS5zcGVjdWxhckludGVuc2l0eU1hcDp5LnNwZWN1bGFyQ29sb3JNYXA/QT15LnNwZWN1bGFyQ29sb3JNYXA6eS50cmFuc21pc3Npb25NYXA/QT15LnRyYW5zbWlzc2lvbk1hcDp5LnRoaWNrbmVzc01hcD9BPXkudGhpY2tuZXNzTWFwOnkuc2hlZW5Db2xvck1hcD9BPXkuc2hlZW5Db2xvck1hcDp5LnNoZWVuUm91Z2huZXNzTWFwJiYoQT15LnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1BJiYoQS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoQT1BLnRleHR1cmUpLCEwPT09QS5tYXRyaXhBdXRvVXBkYXRlJiZBLnVwZGF0ZU1hdHJpeCgpLF8udXZUcmFuc2Zvcm0udmFsdWUuY29weShBLm1hdHJpeCkpLHkuYW9NYXA/Tz15LmFvTWFwOnkubGlnaHRNYXAmJihPPXkubGlnaHRNYXApLHZvaWQgMCE9PU8mJihPLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihPPU8udGV4dHVyZSksITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51djJUcmFuc2Zvcm0udmFsdWUuY29weShPLm1hdHJpeCkpfWZ1bmN0aW9uIGQoXyx5KXtfLnJvdWdobmVzcy52YWx1ZT15LnJvdWdobmVzcyxfLm1ldGFsbmVzcy52YWx1ZT15Lm1ldGFsbmVzcyx5LnJvdWdobmVzc01hcCYmKF8ucm91Z2huZXNzTWFwLnZhbHVlPXkucm91Z2huZXNzTWFwKSx5Lm1ldGFsbmVzc01hcCYmKF8ubWV0YWxuZXNzTWFwLnZhbHVlPXkubWV0YWxuZXNzTWFwKSx5LmVtaXNzaXZlTWFwJiYoXy5lbWlzc2l2ZU1hcC52YWx1ZT15LmVtaXNzaXZlTWFwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldCh5KS5lbnZNYXAmJihfLmVudk1hcEludGVuc2l0eS52YWx1ZT15LmVudk1hcEludGVuc2l0eSl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3JtczpmdW5jdGlvbihfLHkpe18uZm9nQ29sb3IudmFsdWUuY29weSh5LmNvbG9yKSx5LmlzRm9nPyhfLmZvZ05lYXIudmFsdWU9eS5uZWFyLF8uZm9nRmFyLnZhbHVlPXkuZmFyKTp5LmlzRm9nRXhwMiYmKF8uZm9nRGVuc2l0eS52YWx1ZT15LmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbihfLHksSSxBLE8pe3kuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKF8seSk6eS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkoXyx5KSxmdW5jdGlvbihfLHkpe3kuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApfShfLHkpKTp5LmlzTWVzaFRvb25NYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7eS5ncmFkaWVudE1hcCYmKF8uZ3JhZGllbnRNYXAudmFsdWU9eS5ncmFkaWVudE1hcCkseS5lbWlzc2l2ZU1hcCYmKF8uZW1pc3NpdmVNYXAudmFsdWU9eS5lbWlzc2l2ZU1hcCkseS5idW1wTWFwJiYoXy5idW1wTWFwLnZhbHVlPXkuYnVtcE1hcCxfLmJ1bXBTY2FsZS52YWx1ZT15LmJ1bXBTY2FsZSwxPT09eS5zaWRlJiYoXy5idW1wU2NhbGUudmFsdWUqPS0xKSkseS5ub3JtYWxNYXAmJihfLm5vcm1hbE1hcC52YWx1ZT15Lm5vcm1hbE1hcCxfLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeS5ub3JtYWxTY2FsZSksMT09PXkuc2lkZSYmXy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseS5kaXNwbGFjZW1lbnRNYXAmJihfLmRpc3BsYWNlbWVudE1hcC52YWx1ZT15LmRpc3BsYWNlbWVudE1hcCxfLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXkuZGlzcGxhY2VtZW50U2NhbGUsXy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXkuZGlzcGxhY2VtZW50Qmlhcyl9KF8seSkpOnkuaXNNZXNoUGhvbmdNYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7Xy5zcGVjdWxhci52YWx1ZS5jb3B5KHkuc3BlY3VsYXIpLF8uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHkuc2hpbmluZXNzLDFlLTQpLHkuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApLHkuYnVtcE1hcCYmKF8uYnVtcE1hcC52YWx1ZT15LmJ1bXBNYXAsXy5idW1wU2NhbGUudmFsdWU9eS5idW1wU2NhbGUsMT09PXkuc2lkZSYmKF8uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHkubm9ybWFsTWFwJiYoXy5ub3JtYWxNYXAudmFsdWU9eS5ub3JtYWxNYXAsXy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkubm9ybWFsU2NhbGUpLDE9PT15LnNpZGUmJl8ubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHkuZGlzcGxhY2VtZW50TWFwJiYoXy5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eS5kaXNwbGFjZW1lbnRNYXAsXy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT15LmRpc3BsYWNlbWVudFNjYWxlLF8uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT15LmRpc3BsYWNlbWVudEJpYXMpfShfLHkpKTp5LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoXyx5KSx5LmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEkpe2QoXyx5KSxfLmlvci52YWx1ZT15Lmlvcix5LnNoZWVuPjAmJihfLnNoZWVuQ29sb3IudmFsdWUuY29weSh5LnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHkuc2hlZW4pLF8uc2hlZW5Sb3VnaG5lc3MudmFsdWU9eS5zaGVlblJvdWdobmVzcyx5LnNoZWVuQ29sb3JNYXAmJihfLnNoZWVuQ29sb3JNYXAudmFsdWU9eS5zaGVlbkNvbG9yTWFwKSx5LnNoZWVuUm91Z2huZXNzTWFwJiYoXy5zaGVlblJvdWdobmVzc01hcC52YWx1ZT15LnNoZWVuUm91Z2huZXNzTWFwKSkseS5jbGVhcmNvYXQ+MCYmKF8uY2xlYXJjb2F0LnZhbHVlPXkuY2xlYXJjb2F0LF8uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXkuY2xlYXJjb2F0Um91Z2huZXNzLHkuY2xlYXJjb2F0TWFwJiYoXy5jbGVhcmNvYXRNYXAudmFsdWU9eS5jbGVhcmNvYXRNYXApLHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoXy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHkuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoXy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLF8uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXkuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT15LnNpZGUmJl8uY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSx5LnRyYW5zbWlzc2lvbj4wJiYoXy50cmFuc21pc3Npb24udmFsdWU9eS50cmFuc21pc3Npb24sXy50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPUkudGV4dHVyZSxfLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChJLndpZHRoLEkuaGVpZ2h0KSx5LnRyYW5zbWlzc2lvbk1hcCYmKF8udHJhbnNtaXNzaW9uTWFwLnZhbHVlPXkudHJhbnNtaXNzaW9uTWFwKSxfLnRoaWNrbmVzcy52YWx1ZT15LnRoaWNrbmVzcyx5LnRoaWNrbmVzc01hcCYmKF8udGhpY2tuZXNzTWFwLnZhbHVlPXkudGhpY2tuZXNzTWFwKSxfLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9eS5hdHRlbnVhdGlvbkRpc3RhbmNlLF8uYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHkuYXR0ZW51YXRpb25Db2xvcikpLF8uc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9eS5zcGVjdWxhckludGVuc2l0eSxfLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSh5LnNwZWN1bGFyQ29sb3IpLHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihfLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXkuc3BlY3VsYXJJbnRlbnNpdHlNYXApLHkuc3BlY3VsYXJDb2xvck1hcCYmKF8uc3BlY3VsYXJDb2xvck1hcC52YWx1ZT15LnNwZWN1bGFyQ29sb3JNYXApfShfLHksTyk6ZChfLHkpKTp5LmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5Lm1hdGNhcCYmKF8ubWF0Y2FwLnZhbHVlPXkubWF0Y2FwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxfLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeS5yZWZlcmVuY2VQb3NpdGlvbiksXy5uZWFyRGlzdGFuY2UudmFsdWU9eS5uZWFyRGlzdGFuY2UsXy5mYXJEaXN0YW5jZS52YWx1ZT15LmZhckRpc3RhbmNlfShfLHkpKTp5LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc0xpbmVCYXNpY01hdGVyaWFsPyhmdW5jdGlvbihfLHkpe18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHl9KF8seSkseS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmZnVuY3Rpb24oXyx5KXtfLmRhc2hTaXplLnZhbHVlPXkuZGFzaFNpemUsXy50b3RhbFNpemUudmFsdWU9eS5kYXNoU2l6ZSt5LmdhcFNpemUsXy5zY2FsZS52YWx1ZT15LnNjYWxlfShfLHkpKTp5LmlzUG9pbnRzTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEksQSl7bGV0IE87Xy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSxfLnNpemUudmFsdWU9eS5zaXplKkksXy5zY2FsZS52YWx1ZT0uNSpBLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/Tz15Lm1hcDp5LmFscGhhTWFwJiYoTz15LmFscGhhTWFwKSx2b2lkIDAhPT1PJiYoITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KE8ubWF0cml4KSl9KF8seSxJLEEpOnkuaXNTcHJpdGVNYXRlcmlhbD9mdW5jdGlvbihfLHkpe2xldCBJO18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHksXy5yb3RhdGlvbi52YWx1ZT15LnJvdGF0aW9uLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/ST15Lm1hcDp5LmFscGhhTWFwJiYoST15LmFscGhhTWFwKSx2b2lkIDAhPT1JJiYoITA9PT1JLm1hdHJpeEF1dG9VcGRhdGUmJkkudXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEkubWF0cml4KSl9KF8seSk6eS5pc1NoYWRvd01hdGVyaWFsPyhfLmNvbG9yLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSk6eS5pc1NoYWRlck1hdGVyaWFsJiYoeS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gWmkobj17fSl7bGV0IHQ9dm9pZCAwIT09bi5jYW52YXM/bi5jYW52YXM6ZnVuY3Rpb24oKXtsZXQgbj1TTSgiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59KCksZT12b2lkIDAhPT1uLmNvbnRleHQ/bi5jb250ZXh0Om51bGwsaT12b2lkIDAhPT1uLmFscGhhJiZuLmFscGhhLHI9dm9pZCAwPT09bi5kZXB0aHx8bi5kZXB0aCxvPXZvaWQgMD09PW4uc3RlbmNpbHx8bi5zdGVuY2lsLHM9dm9pZCAwIT09bi5hbnRpYWxpYXMmJm4uYW50aWFsaWFzLGE9dm9pZCAwPT09bi5wcmVtdWx0aXBsaWVkQWxwaGF8fG4ucHJlbXVsdGlwbGllZEFscGhhLGw9dm9pZCAwIT09bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJm4ucHJlc2VydmVEcmF3aW5nQnVmZmVyLGM9dm9pZCAwIT09bi5wb3dlclByZWZlcmVuY2U/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9dm9pZCAwIT09bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsZD1udWxsLHA9bnVsbCxoPVtdLGY9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1EaCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9MCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgbT10aGlzLEM9ITEsXz0wLHk9MCxJPW51bGwsQT0tMSxPPW51bGwsZWU9bmV3IHRyLFg9bmV3IHRyLHhlPW51bGwsZmU9dC53aWR0aCx2ZT10LmhlaWdodCxUPTEsbmU9bnVsbCxsZT1udWxsLGhlPW5ldyB0cigwLDAsZmUsdmUpLHllPW5ldyB0cigwLDAsZmUsdmUpLEo9ITEsYWU9bmV3IHZ5LG1lPSExLGplPSExLE1lPW51bGwsRmU9bmV3IE1uLHV0PW5ldyAkLFN0PXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gZ3QoKXtyZXR1cm4gbnVsbD09PUk/VDoxfWxldCBFdCxvbixDZSx2dCxfdCxpZSxjdCxZZSx4dCxodCxzbixTbixvaSxVaSx6aSxRLEYsVmUsQ3QsdG4sQmUsZ24sbG4sUmU9ZTtmdW5jdGlvbiBBbihTLEwpe2ZvcihsZXQgcT0wO3E8Uy5sZW5ndGg7cSsrKXtsZXQgY2U9dC5nZXRDb250ZXh0KFNbcV0sTCk7aWYobnVsbCE9PWNlKXJldHVybiBjZX1yZXR1cm4gbnVsbH10cnl7bGV0IFM9e2FscGhhOiEwLGRlcHRoOnIsc3RlbmNpbDpvLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTphLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLCJ0aHJlZS5qcyByMTM3IiksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdWUsITEpLG51bGw9PT1SZSl7bGV0IEw9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKCEwPT09bS5pc1dlYkdMMVJlbmRlcmVyJiZMLnNoaWZ0KCksUmU9QW4oTCxTKSxudWxsPT09UmUpdGhyb3cgQW4oTCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX12b2lkIDA9PT1SZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQmJihSZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKFMpe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrUy5tZXNzYWdlKSxTfWZ1bmN0aW9uIEZ0KCl7RXQ9bmV3IERVZShSZSksb249bmV3IENVZShSZSxFdCxuKSxFdC5pbml0KG9uKSxnbj1uZXcgaThlKFJlLEV0LG9uKSxDZT1uZXcgdDhlKFJlLEV0LG9uKSx2dD1uZXcgUFVlKFJlKSxfdD1uZXcgR3plLGllPW5ldyBuOGUoUmUsRXQsQ2UsX3Qsb24sZ24sdnQpLGN0PW5ldyBNVWUobSksWWU9bmV3IFRVZShtKSx4dD1uZXcgcTVlKFJlLG9uKSxsbj1uZXcgYlVlKFJlLEV0LHh0LG9uKSxodD1uZXcgQVVlKFJlLHh0LHZ0LGxuKSxzbj1uZXcgRlVlKFJlLGh0LHh0LHZ0KSxDdD1uZXcga1VlKFJlLG9uLGllKSxRPW5ldyB3VWUoX3QpLFNuPW5ldyBqemUobSxjdCxZZSxFdCxvbixsbixRKSxvaT1uZXcgbzhlKF90KSxVaT1uZXcgcXplLHppPW5ldyBKemUoRXQsb24pLFZlPW5ldyB5VWUobSxjdCxDZSxzbixpLGEpLEY9bmV3IEVsZShtLHNuLG9uKSx0bj1uZXcgeFVlKFJlLEV0LHZ0LG9uKSxCZT1uZXcgSVVlKFJlLEV0LHZ0LG9uKSx2dC5wcm9ncmFtcz1Tbi5wcm9ncmFtcyxtLmNhcGFiaWxpdGllcz1vbixtLmV4dGVuc2lvbnM9RXQsbS5wcm9wZXJ0aWVzPV90LG0ucmVuZGVyTGlzdHM9VWksbS5zaGFkb3dNYXA9RixtLnN0YXRlPUNlLG0uaW5mbz12dH1GdCgpO2xldCBrdD1uZXcgQVUobSxSZSk7ZnVuY3Rpb24gTG4oUyl7Uy5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksQz0hMH1mdW5jdGlvbiB1ZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLEM9ITE7bGV0IFM9dnQuYXV0b1Jlc2V0LEw9Ri5lbmFibGVkLHE9Ri5hdXRvVXBkYXRlLFo9Ri5uZWVkc1VwZGF0ZSxjZT1GLnR5cGU7RnQoKSx2dC5hdXRvUmVzZXQ9UyxGLmVuYWJsZWQ9TCxGLmF1dG9VcGRhdGU9cSxGLm5lZWRzVXBkYXRlPVosRi50eXBlPWNlfWZ1bmN0aW9uIEp0KFMpe2xldCBMPVMudGFyZ2V0O0wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSnQpLGZ1bmN0aW9uKFMpeyhmdW5jdGlvbihTKXtsZXQgTD1fdC5nZXQoUykucHJvZ3JhbXM7dm9pZCAwIT09TCYmKEwuZm9yRWFjaChmdW5jdGlvbihxKXtTbi5yZWxlYXNlUHJvZ3JhbShxKX0pLFMuaXNTaGFkZXJNYXRlcmlhbCYmU24ucmVsZWFzZVNoYWRlckNhY2hlKFMpKX0pKFMpLF90LnJlbW92ZShTKX0oTCl9dGhpcy54cj1rdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUmV9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gUmUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IFM9RXQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtTJiZTLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBTPUV0LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7UyYmUy5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gVH0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKFMpe3ZvaWQgMCE9PVMmJihUPVMsdGhpcy5zZXRTaXplKGZlLHZlLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihTKXtyZXR1cm4gUy5zZXQoZmUsdmUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oUyxMLHEpe2t0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihmZT1TLHZlPUwsdC53aWR0aD1NYXRoLmZsb29yKFMqVCksdC5oZWlnaHQ9TWF0aC5mbG9vcihMKlQpLCExIT09cSYmKHQuc3R5bGUud2lkdGg9UysicHgiLHQuc3R5bGUuaGVpZ2h0PUwrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuc2V0KGZlKlQsdmUqVCkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihTLEwscSl7ZmU9Uyx2ZT1MLFQ9cSx0LndpZHRoPU1hdGguZmxvb3IoUypxKSx0LmhlaWdodD1NYXRoLmZsb29yKEwqcSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShlZSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShoZSl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyxMLHEsWil7Uy5pc1ZlY3RvcjQ/aGUuc2V0KFMueCxTLnksUy56LFMudyk6aGUuc2V0KFMsTCxxLFopLENlLnZpZXdwb3J0KGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weSh5ZSl9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihTLEwscSxaKXtTLmlzVmVjdG9yND95ZS5zZXQoUy54LFMueSxTLnosUy53KTp5ZS5zZXQoUyxMLHEsWiksQ2Uuc2Npc3NvcihYLmNvcHkoeWUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIEp9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oUyl7Q2Uuc2V0U2Npc3NvclRlc3QoSj1TKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKFMpe25lPVN9LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKFMpe2xlPVN9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihTKXtyZXR1cm4gUy5jb3B5KFZlLmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe1ZlLnNldENsZWFyQ29sb3IuYXBwbHkoVmUsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIFZlLmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7VmUuc2V0Q2xlYXJBbHBoYS5hcHBseShWZSxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKFMsTCxxKXtsZXQgWj0wOyh2b2lkIDA9PT1TfHxTKSYmKFp8PTE2Mzg0KSwodm9pZCAwPT09THx8TCkmJihafD0yNTYpLCh2b2lkIDA9PT1xfHxxKSYmKFp8PTEwMjQpLFJlLmNsZWFyKFopfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsTG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHVlLCExKSxVaS5kaXNwb3NlKCksemkuZGlzcG9zZSgpLF90LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksWWUuZGlzcG9zZSgpLHNuLmRpc3Bvc2UoKSxsbi5kaXNwb3NlKCksU24uZGlzcG9zZSgpLGt0LmRpc3Bvc2UoKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLG1pKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixtciksTWUmJihNZS5kaXNwb3NlKCksTWU9bnVsbCksb3Muc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihTLEwscSxaLGNlLFVlKXtudWxsPT09TCYmKEw9U3QpO2xldCAkZT1jZS5pc01lc2gmJmNlLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxXZT1mdW5jdGlvbihTLEwscSxaLGNlKXshMCE9PUwuaXNTY2VuZSYmKEw9U3QpLGllLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFVlPUwuZm9nLFdlPW51bGw9PT1JP20ub3V0cHV0RW5jb2Rpbmc6ITA9PT1JLmlzWFJSZW5kZXJUYXJnZXQ/SS50ZXh0dXJlLmVuY29kaW5nOkRoLHJ0PShaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/WWU6Y3QpLmdldChaLmVudk1hcHx8KFouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9MLmVudmlyb25tZW50Om51bGwpKSxkdD0hMD09PVoudmVydGV4Q29sb3JzJiYhIXEuYXR0cmlidXRlcy5jb2xvciYmND09PXEuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxUdD0hIVoubm9ybWFsTWFwJiYhIXEuYXR0cmlidXRlcy50YW5nZW50LEF0PSEhcS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sY249ISFxLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsSmk9cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAseGk9Wi50b25lTWFwcGVkP20udG9uZU1hcHBpbmc6MCxtbj1fdC5nZXQoWiksUm49cC5zdGF0ZS5saWdodHM7ITAhPT1tZXx8ITAhPT1qZSYmUz09PU98fFEuc2V0U3RhdGUoWixTLFM9PT1PJiZaLmlkPT09QSk7bGV0IER0PSExO1oudmVyc2lvbj09PW1uLl9fdmVyc2lvbj8obW4ubmVlZHNMaWdodHMmJm1uLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PVJuLnN0YXRlLnZlcnNpb258fG1uLm91dHB1dEVuY29kaW5nIT09V2V8fGNlLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1tbi5pbnN0YW5jaW5nfHwhY2UuaXNJbnN0YW5jZWRNZXNoJiYhMD09PW1uLmluc3RhbmNpbmd8fGNlLmlzU2tpbm5lZE1lc2gmJiExPT09bW4uc2tpbm5pbmd8fCFjZS5pc1NraW5uZWRNZXNoJiYhMD09PW1uLnNraW5uaW5nfHxtbi5lbnZNYXAhPT1ydHx8Wi5mb2cmJm1uLmZvZyE9PVVlfHx2b2lkIDAhPT1tbi5udW1DbGlwcGluZ1BsYW5lcyYmKG1uLm51bUNsaXBwaW5nUGxhbmVzIT09US5udW1QbGFuZXN8fG1uLm51bUludGVyc2VjdGlvbiE9PVEubnVtSW50ZXJzZWN0aW9uKXx8bW4udmVydGV4QWxwaGFzIT09ZHR8fG1uLnZlcnRleFRhbmdlbnRzIT09VHR8fG1uLm1vcnBoVGFyZ2V0cyE9PUF0fHxtbi5tb3JwaE5vcm1hbHMhPT1jbnx8bW4udG9uZU1hcHBpbmchPT14aXx8ITA9PT1vbi5pc1dlYkdMMiYmbW4ubW9ycGhUYXJnZXRzQ291bnQhPT1KaSkmJihEdD0hMCk6KER0PSEwLG1uLl9fdmVyc2lvbj1aLnZlcnNpb24pO2xldCBnaT1tbi5jdXJyZW50UHJvZ3JhbTshMD09PUR0JiYoZ2k9QnkoWixMLGNlKSk7bGV0IGVpPSExLFVuPSExLFhuPSExLFZ0PWdpLmdldFVuaWZvcm1zKCksamk9bW4udW5pZm9ybXM7aWYoQ2UudXNlUHJvZ3JhbShnaS5wcm9ncmFtKSYmKGVpPSEwLFVuPSEwLFhuPSEwKSxaLmlkIT09QSYmKEE9Wi5pZCxVbj0hMCksZWl8fE8hPT1TKXtpZihWdC5zZXRWYWx1ZShSZSwicHJvamVjdGlvbk1hdHJpeCIsUy5wcm9qZWN0aW9uTWF0cml4KSxvbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZWdC5zZXRWYWx1ZShSZSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coUy5mYXIrMSkvTWF0aC5MTjIpKSxPIT09UyYmKE89UyxVbj0hMCxYbj0hMCksWi5pc1NoYWRlck1hdGVyaWFsfHxaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouZW52TWFwKXtsZXQgd249VnQubWFwLmNhbWVyYVBvc2l0aW9uO3ZvaWQgMCE9PXduJiZ3bi5zZXRWYWx1ZShSZSx1dC5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCkpfShaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Wi5pc01lc2hCYXNpY01hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouaXNTaGFkZXJNYXRlcmlhbCkmJlZ0LnNldFZhbHVlKFJlLCJpc09ydGhvZ3JhcGhpYyIsITA9PT1TLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwoWi5pc01lc2hQaG9uZ01hdGVyaWFsfHxaLmlzTWVzaFRvb25NYXRlcmlhbHx8Wi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fFouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Wi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxaLmlzU2hhZGVyTWF0ZXJpYWx8fFouaXNTaGFkb3dNYXRlcmlhbHx8Y2UuaXNTa2lubmVkTWVzaCkmJlZ0LnNldFZhbHVlKFJlLCJ2aWV3TWF0cml4IixTLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoY2UuaXNTa2lubmVkTWVzaCl7VnQuc2V0T3B0aW9uYWwoUmUsY2UsImJpbmRNYXRyaXgiKSxWdC5zZXRPcHRpb25hbChSZSxjZSwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgd249Y2Uuc2tlbGV0b247d24mJihvbi5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09d24uYm9uZVRleHR1cmUmJnduLmNvbXB1dGVCb25lVGV4dHVyZSgpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZSIsd24uYm9uZVRleHR1cmUsaWUpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZVNpemUiLHduLmJvbmVUZXh0dXJlU2l6ZSkpOlZ0LnNldE9wdGlvbmFsKFJlLHduLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFxJiYodm9pZCAwIT09cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb258fHZvaWQgMCE9PXEubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCkmJkN0LnVwZGF0ZShjZSxxLFosZ2kpLChVbnx8bW4ucmVjZWl2ZVNoYWRvdyE9PWNlLnJlY2VpdmVTaGFkb3cpJiYobW4ucmVjZWl2ZVNoYWRvdz1jZS5yZWNlaXZlU2hhZG93LFZ0LnNldFZhbHVlKFJlLCJyZWNlaXZlU2hhZG93IixjZS5yZWNlaXZlU2hhZG93KSksVW4mJihWdC5zZXRWYWx1ZShSZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxtbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oUyxMKXtTLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPUwsUy5saWdodFByb2JlLm5lZWRzVXBkYXRlPUwsUy5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9TCxTLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPUwsUy5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9TCxTLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9TH0oamksWG4pLFVlJiZaLmZvZyYmb2kucmVmcmVzaEZvZ1VuaWZvcm1zKGppLFVlKSxvaS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhqaSxaLFQsdmUsTWUpLFRoLnVwbG9hZChSZSxtbi51bmlmb3Jtc0xpc3QsamksaWUpKSxaLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09Wi51bmlmb3Jtc05lZWRVcGRhdGUmJihUaC51cGxvYWQoUmUsbW4udW5pZm9ybXNMaXN0LGppLGllKSxaLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksWi5pc1Nwcml0ZU1hdGVyaWFsJiZWdC5zZXRWYWx1ZShSZSwiY2VudGVyIixjZS5jZW50ZXIpLFZ0LnNldFZhbHVlKFJlLCJtb2RlbFZpZXdNYXRyaXgiLGNlLm1vZGVsVmlld01hdHJpeCksVnQuc2V0VmFsdWUoUmUsIm5vcm1hbE1hdHJpeCIsY2Uubm9ybWFsTWF0cml4KSxWdC5zZXRWYWx1ZShSZSwibW9kZWxNYXRyaXgiLGNlLm1hdHJpeFdvcmxkKSxnaX0oUyxMLHEsWixjZSk7Q2Uuc2V0TWF0ZXJpYWwoWiwkZSk7bGV0IHJ0PXEuaW5kZXgsZHQ9cS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1ydCl7aWYodm9pZCAwPT09ZHR8fDA9PT1kdC5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09cnQuY291bnQpcmV0dXJuO2xldCBUdD0xOyEwPT09Wi53aXJlZnJhbWUmJihydD1odC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUocSksVHQ9MiksbG4uc2V0dXAoY2UsWixXZSxxLHJ0KTtsZXQgQXQsY249dG47bnVsbCE9PXJ0JiYoQXQ9eHQuZ2V0KHJ0KSxjbj1CZSxjbi5zZXRJbmRleChBdCkpO2xldCBKaT1udWxsIT09cnQ/cnQuY291bnQ6ZHQuY291bnQseGk9cS5kcmF3UmFuZ2Uuc3RhcnQqVHQsbW49cS5kcmF3UmFuZ2UuY291bnQqVHQsUm49bnVsbCE9PVVlP1VlLnN0YXJ0KlR0OjAsRHQ9bnVsbCE9PVVlP1VlLmNvdW50KlR0OjEvMCxnaT1NYXRoLm1heCh4aSxSbiksZWk9TWF0aC5taW4oSmkseGkrbW4sUm4rRHQpLTEsVW49TWF0aC5tYXgoMCxlaS1naSsxKTtpZigwIT09VW4pe2lmKGNlLmlzTWVzaCkhMD09PVoud2lyZWZyYW1lPyhDZS5zZXRMaW5lV2lkdGgoWi53aXJlZnJhbWVMaW5ld2lkdGgqZ3QoKSksY24uc2V0TW9kZSgxKSk6Y24uc2V0TW9kZSg0KTtlbHNlIGlmKGNlLmlzTGluZSl7bGV0IFhuPVoubGluZXdpZHRoO3ZvaWQgMD09PVhuJiYoWG49MSksQ2Uuc2V0TGluZVdpZHRoKFhuKmd0KCkpLGNuLnNldE1vZGUoY2UuaXNMaW5lU2VnbWVudHM/MTpjZS5pc0xpbmVMb29wPzI6Myl9ZWxzZSBjZS5pc1BvaW50cz9jbi5zZXRNb2RlKDApOmNlLmlzU3ByaXRlJiZjbi5zZXRNb2RlKDQpO2lmKGNlLmlzSW5zdGFuY2VkTWVzaCljbi5yZW5kZXJJbnN0YW5jZXMoZ2ksVW4sY2UuY291bnQpO2Vsc2UgaWYocS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgWG49TWF0aC5taW4ocS5pbnN0YW5jZUNvdW50LHEuX21heEluc3RhbmNlQ291bnQpO2NuLnJlbmRlckluc3RhbmNlcyhnaSxVbixYbil9ZWxzZSBjbi5yZW5kZXIoZ2ksVW4pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKFMsTCl7cD16aS5nZXQoUykscC5pbml0KCksZi5wdXNoKHApLFMudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKHEpe3EuaXNMaWdodCYmcS5sYXllcnMudGVzdChMLmxheWVycykmJihwLnB1c2hMaWdodChxKSxxLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhxKSl9KSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLFMudHJhdmVyc2UoZnVuY3Rpb24ocSl7bGV0IFo9cS5tYXRlcmlhbDtpZihaKWlmKEFycmF5LmlzQXJyYXkoWikpZm9yKGxldCBjZT0wO2NlPFoubGVuZ3RoO2NlKyspQnkoWltjZV0sUyxxKTtlbHNlIEJ5KFosUyxxKX0pLGYucG9wKCkscD1udWxsfTtsZXQgR2U9bnVsbDtmdW5jdGlvbiBtaSgpe29zLnN0b3AoKX1mdW5jdGlvbiBtcigpe29zLnN0YXJ0KCl9bGV0IG9zPW5ldyBnbGU7ZnVuY3Rpb24gVHIoUyxMLHEsWil7aWYoITE9PT1TLnZpc2libGUpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoTC5sYXllcnMpKWlmKFMuaXNHcm91cClxPVMucmVuZGVyT3JkZXI7ZWxzZSBpZihTLmlzTE9EKSEwPT09Uy5hdXRvVXBkYXRlJiZTLnVwZGF0ZShMKTtlbHNlIGlmKFMuaXNMaWdodClwLnB1c2hMaWdodChTKSxTLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhTKTtlbHNlIGlmKFMuaXNTcHJpdGUpe2lmKCFTLmZydXN0dW1DdWxsZWR8fGFlLmludGVyc2VjdHNTcHJpdGUoUykpe1omJnV0LnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRmUpO2xldCAkZT1zbi51cGRhdGUoUyksV2U9Uy5tYXRlcmlhbDtXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9fWVsc2UgaWYoKFMuaXNNZXNofHxTLmlzTGluZXx8Uy5pc1BvaW50cykmJihTLmlzU2tpbm5lZE1lc2gmJlMuc2tlbGV0b24uZnJhbWUhPT12dC5yZW5kZXIuZnJhbWUmJihTLnNrZWxldG9uLnVwZGF0ZSgpLFMuc2tlbGV0b24uZnJhbWU9dnQucmVuZGVyLmZyYW1lKSwhUy5mcnVzdHVtQ3VsbGVkfHxhZS5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7WiYmdXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChGZSk7bGV0ICRlPXNuLnVwZGF0ZShTKSxXZT1TLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoV2UpKXtsZXQgcnQ9JGUuZ3JvdXBzO2ZvcihsZXQgZHQ9MCxUdD1ydC5sZW5ndGg7ZHQ8VHQ7ZHQrKyl7bGV0IEF0PXJ0W2R0XSxjbj1XZVtBdC5tYXRlcmlhbEluZGV4XTtjbiYmY24udmlzaWJsZSYmZC5wdXNoKFMsJGUsY24scSx1dC56LEF0KX19ZWxzZSBXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9bGV0IFVlPVMuY2hpbGRyZW47Zm9yKGxldCAkZT0wLFdlPVVlLmxlbmd0aDskZTxXZTskZSsrKVRyKFVlWyRlXSxMLHEsWil9ZnVuY3Rpb24gZWwoUyxMLHEsWil7bGV0IGNlPVMub3BhcXVlLFVlPVMudHJhbnNtaXNzaXZlLCRlPVMudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcocSksVWUubGVuZ3RoPjAmJmZ1bmN0aW9uKFMsTCxxKXtudWxsPT09TWUmJihNZT1uZXcoITA9PT1zJiYhMD09PW9uLmlzV2ViR0wyP0VNOnZhKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT1nbi5jb252ZXJ0KHV5KT91eTpTaCxtaW5GaWx0ZXI6MTAwOCxtYWdGaWx0ZXI6SW8sd3JhcFM6WmEsd3JhcFQ6WmEsdXNlUmVuZGVyVG9UZXh0dXJlOkV0LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KSk7bGV0IFo9bS5nZXRSZW5kZXJUYXJnZXQoKTttLnNldFJlbmRlclRhcmdldChNZSksbS5jbGVhcigpO2xldCBjZT1tLnRvbmVNYXBwaW5nO20udG9uZU1hcHBpbmc9MCxWbChTLEwscSksbS50b25lTWFwcGluZz1jZSxpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChNZSksaWUudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKE1lKSxtLnNldFJlbmRlclRhcmdldChaKX0oY2UsTCxxKSxaJiZDZS52aWV3cG9ydChlZS5jb3B5KFopKSxjZS5sZW5ndGg+MCYmVmwoY2UsTCxxKSxVZS5sZW5ndGg+MCYmVmwoVWUsTCxxKSwkZS5sZW5ndGg+MCYmVmwoJGUsTCxxKX1mdW5jdGlvbiBWbChTLEwscSl7bGV0IFo9ITA9PT1MLmlzU2NlbmU/TC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBjZT0wLFVlPVMubGVuZ3RoO2NlPFVlO2NlKyspe2xldCAkZT1TW2NlXSxXZT0kZS5vYmplY3QscnQ9JGUuZ2VvbWV0cnksZHQ9bnVsbD09PVo/JGUubWF0ZXJpYWw6WixUdD0kZS5ncm91cDtXZS5sYXllcnMudGVzdChxLmxheWVycykmJkNPKFdlLEwscSxydCxkdCxUdCl9fWZ1bmN0aW9uIENPKFMsTCxxLFosY2UsVWUpe1Mub25CZWZvcmVSZW5kZXIobSxMLHEsWixjZSxVZSksUy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhxLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKSxTLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoUy5tb2RlbFZpZXdNYXRyaXgpLGNlLm9uQmVmb3JlUmVuZGVyKG0sTCxxLFosUyxVZSksITA9PT1jZS50cmFuc3BhcmVudCYmMj09PWNlLnNpZGU/KGNlLnNpZGU9MSxjZS5uZWVkc1VwZGF0ZT0hMCxtLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxjZS5zaWRlPTAsY2UubmVlZHNVcGRhdGU9ITAsbS5yZW5kZXJCdWZmZXJEaXJlY3QocSxMLFosY2UsUyxVZSksY2Uuc2lkZT0yKTptLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxTLm9uQWZ0ZXJSZW5kZXIobSxMLHEsWixjZSxVZSl9ZnVuY3Rpb24gQnkoUyxMLHEpeyEwIT09TC5pc1NjZW5lJiYoTD1TdCk7bGV0IFo9X3QuZ2V0KFMpLGNlPXAuc3RhdGUubGlnaHRzLCRlPWNlLnN0YXRlLnZlcnNpb24sV2U9U24uZ2V0UGFyYW1ldGVycyhTLGNlLnN0YXRlLHAuc3RhdGUuc2hhZG93c0FycmF5LEwscSkscnQ9U24uZ2V0UHJvZ3JhbUNhY2hlS2V5KFdlKSxkdD1aLnByb2dyYW1zO1ouZW52aXJvbm1lbnQ9Uy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0wuZW52aXJvbm1lbnQ6bnVsbCxaLmZvZz1MLmZvZyxaLmVudk1hcD0oUy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1llOmN0KS5nZXQoUy5lbnZNYXB8fFouZW52aXJvbm1lbnQpLHZvaWQgMD09PWR0JiYoUy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZHQ9bmV3IE1hcCxaLnByb2dyYW1zPWR0KTtsZXQgVHQ9ZHQuZ2V0KHJ0KTtpZih2b2lkIDAhPT1UdCl7aWYoWi5jdXJyZW50UHJvZ3JhbT09PVR0JiZaLmxpZ2h0c1N0YXRlVmVyc2lvbj09PSRlKXJldHVybiBuUyhTLFdlKSxUdH1lbHNlIFdlLnVuaWZvcm1zPVNuLmdldFVuaWZvcm1zKFMpLFMub25CdWlsZChxLFdlLG0pLFMub25CZWZvcmVDb21waWxlKFdlLG0pLFR0PVNuLmFjcXVpcmVQcm9ncmFtKFdlLHJ0KSxkdC5zZXQocnQsVHQpLFoudW5pZm9ybXM9V2UudW5pZm9ybXM7bGV0IEF0PVoudW5pZm9ybXM7KCFTLmlzU2hhZGVyTWF0ZXJpYWwmJiFTLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09Uy5jbGlwcGluZykmJihBdC5jbGlwcGluZ1BsYW5lcz1RLnVuaWZvcm0pLG5TKFMsV2UpLFoubmVlZHNMaWdodHM9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxTLmlzTWVzaFRvb25NYXRlcmlhbHx8Uy5pc01lc2hQaG9uZ01hdGVyaWFsfHxTLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFMuaXNTaGFkb3dNYXRlcmlhbHx8Uy5pc1NoYWRlck1hdGVyaWFsJiYhMD09PVMubGlnaHRzfShTKSxaLmxpZ2h0c1N0YXRlVmVyc2lvbj0kZSxaLm5lZWRzTGlnaHRzJiYoQXQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9Y2Uuc3RhdGUuYW1iaWVudCxBdC5saWdodFByb2JlLnZhbHVlPWNlLnN0YXRlLnByb2JlLEF0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsLEF0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LEF0LnNwb3RMaWdodHMudmFsdWU9Y2Uuc3RhdGUuc3BvdCxBdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLnNwb3RTaGFkb3csQXQucmVjdEFyZWFMaWdodHMudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWEsQXQubHRjXzEudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWFMVEMxLEF0Lmx0Y18yLnZhbHVlPWNlLnN0YXRlLnJlY3RBcmVhTFRDMixBdC5wb2ludExpZ2h0cy52YWx1ZT1jZS5zdGF0ZS5wb2ludCxBdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvdyxBdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmhlbWksQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsQXQuc3BvdFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5zcG90U2hhZG93TWFwLEF0LnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxBdC5wb2ludFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hcCxBdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IGNuPVR0LmdldFVuaWZvcm1zKCksSmk9VGguc2VxV2l0aFZhbHVlKGNuLnNlcSxBdCk7cmV0dXJuIFouY3VycmVudFByb2dyYW09VHQsWi51bmlmb3Jtc0xpc3Q9SmksVHR9ZnVuY3Rpb24gblMoUyxMKXtsZXQgcT1fdC5nZXQoUyk7cS5vdXRwdXRFbmNvZGluZz1MLm91dHB1dEVuY29kaW5nLHEuaW5zdGFuY2luZz1MLmluc3RhbmNpbmcscS5za2lubmluZz1MLnNraW5uaW5nLHEubW9ycGhUYXJnZXRzPUwubW9ycGhUYXJnZXRzLHEubW9ycGhOb3JtYWxzPUwubW9ycGhOb3JtYWxzLHEubW9ycGhUYXJnZXRzQ291bnQ9TC5tb3JwaFRhcmdldHNDb3VudCxxLm51bUNsaXBwaW5nUGxhbmVzPUwubnVtQ2xpcHBpbmdQbGFuZXMscS5udW1JbnRlcnNlY3Rpb249TC5udW1DbGlwSW50ZXJzZWN0aW9uLHEudmVydGV4QWxwaGFzPUwudmVydGV4QWxwaGFzLHEudmVydGV4VGFuZ2VudHM9TC52ZXJ0ZXhUYW5nZW50cyxxLnRvbmVNYXBwaW5nPUwudG9uZU1hcHBpbmd9b3Muc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihTKXtHZSYmR2UoUyl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmb3Muc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihTKXtHZT1TLGt0LnNldEFuaW1hdGlvbkxvb3AoUyksbnVsbD09PVM/b3Muc3RvcCgpOm9zLnN0YXJ0KCl9LGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsbWkpLGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLG1yKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEwpe2lmKHZvaWQgMD09PUx8fCEwPT09TC5pc0NhbWVyYSl7aWYoITAhPT1DKXtpZighMD09PVMuYXV0b1VwZGF0ZSYmUy51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1MLnBhcmVudCYmTC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09a3QuZW5hYmxlZCYmITA9PT1rdC5pc1ByZXNlbnRpbmcmJighMD09PWt0LmNhbWVyYUF1dG9VcGRhdGUmJmt0LnVwZGF0ZUNhbWVyYShMKSxMPWt0LmdldENhbWVyYSgpKSwhMD09PVMuaXNTY2VuZSYmUy5vbkJlZm9yZVJlbmRlcihtLFMsTCxJKSxwPXppLmdldChTLGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksRmUubXVsdGlwbHlNYXRyaWNlcyhMLnByb2plY3Rpb25NYXRyaXgsTC5tYXRyaXhXb3JsZEludmVyc2UpLGFlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KEZlKSxqZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLG1lPVEuaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLGplLEwpLGQ9VWkuZ2V0KFMsaC5sZW5ndGgpLGQuaW5pdCgpLGgucHVzaChkKSxUcihTLEwsMCxtLnNvcnRPYmplY3RzKSxkLmZpbmlzaCgpLCEwPT09bS5zb3J0T2JqZWN0cyYmZC5zb3J0KG5lLGxlKSwhMD09PW1lJiZRLmJlZ2luU2hhZG93cygpLEYucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LFMsTCksITA9PT1tZSYmUS5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSxWZS5yZW5kZXIoZCxTKSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEwuaXNBcnJheUNhbWVyYSl7bGV0IFo9TC5jYW1lcmFzO2ZvcihsZXQgY2U9MCxVZT1aLmxlbmd0aDtjZTxVZTtjZSsrKXtsZXQgJGU9WltjZV07ZWwoZCxTLCRlLCRlLnZpZXdwb3J0KX19ZWxzZSBlbChkLFMsTCk7bnVsbCE9PUkmJihpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChJKSxpZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoSSkpLCEwPT09Uy5pc1NjZW5lJiZTLm9uQWZ0ZXJSZW5kZXIobSxTLEwpLENlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQ2UuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxDZS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLENlLnNldFBvbHlnb25PZmZzZXQoITEpLGxuLnJlc2V0RGVmYXVsdFN0YXRlKCksQT0tMSxPPW51bGwsZi5wb3AoKSxwPWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLGgucG9wKCksZD1oLmxlbmd0aD4wP2hbaC5sZW5ndGgtMV06bnVsbH19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gX30sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKFMsTCxxKXtfdC5nZXQoUy50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1MLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9cTtsZXQgWj1fdC5nZXQoUyk7Wi5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsWi5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9dm9pZCAwPT09cSxaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fFMudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxTLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxTLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKFMsTCl7bGV0IHE9X3QuZ2V0KFMpO3EuX193ZWJnbEZyYW1lYnVmZmVyPUwscS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1MfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihTLEw9MCxxPTApe0k9UyxfPUwseT1xO2xldCBaPSEwO2lmKFMpe2xldCBydD1fdC5nZXQoUyk7dm9pZCAwIT09cnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXI/KENlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxaPSExKTp2b2lkIDA9PT1ydC5fX3dlYmdsRnJhbWVidWZmZXI/aWUuc2V0dXBSZW5kZXJUYXJnZXQoUyk6cnQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiZpZS5yZWJpbmRUZXh0dXJlcyhTLF90LmdldChTLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBjZT1udWxsLFVlPSExLCRlPSExO2lmKFMpe2xldCBydD1TLnRleHR1cmU7KHJ0LmlzRGF0YVRleHR1cmUzRHx8cnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoJGU9ITApO2xldCBkdD1fdC5nZXQoUykuX193ZWJnbEZyYW1lYnVmZmVyO1MuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGNlPWR0W0xdLFVlPSEwKTpjZT1TLnVzZVJlbmRlcmJ1ZmZlcj9fdC5nZXQoUykuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOmR0LGVlLmNvcHkoUy52aWV3cG9ydCksWC5jb3B5KFMuc2Npc3NvcikseGU9Uy5zY2lzc29yVGVzdH1lbHNlIGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCksWC5jb3B5KHllKS5tdWx0aXBseVNjYWxhcihUKS5mbG9vcigpLHhlPUo7aWYoQ2UuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGNlKSYmb24uZHJhd0J1ZmZlcnMmJlomJkNlLmRyYXdCdWZmZXJzKFMsY2UpLENlLnZpZXdwb3J0KGVlKSxDZS5zY2lzc29yKFgpLENlLnNldFNjaXNzb3JUZXN0KHhlKSxVZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5K0wscnQuX193ZWJnbFRleHR1cmUscSl9ZWxzZSBpZigkZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LHJ0Ll9fd2ViZ2xUZXh0dXJlLHF8fDAsTHx8MCl9QT0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKFMsTCxxLFosY2UsVWUsJGUpe2lmKCFTfHwhUy5pc1dlYkdMUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4iKTtsZXQgV2U9X3QuZ2V0KFMpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihTLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT0kZSYmKFdlPVdlWyRlXSksV2Upe0NlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXZSk7dHJ5e2xldCBydD1TLnRleHR1cmUsZHQ9cnQuZm9ybWF0LFR0PXJ0LnR5cGU7aWYoZHQhPT16cyYmZ24uY29udmVydChkdCkhPT1SZS5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2xldCBBdD1UdD09PXV5JiYoRXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8b24uaXNXZWJHTDImJkV0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZighKFR0PT09U2h8fGduLmNvbnZlcnQoVHQpPT09UmUuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8VHQ9PT1ZbSYmKG9uLmlzV2ViR0wyfHxFdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fEV0LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxBdCkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09UmUuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/TD49MCYmTDw9Uy53aWR0aC1aJiZxPj0wJiZxPD1TLmhlaWdodC1jZSYmUmUucmVhZFBpeGVscyhMLHEsWixjZSxnbi5jb252ZXJ0KGR0KSxnbi5jb252ZXJ0KFR0KSxVZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IHJ0PW51bGwhPT1JP190LmdldChJKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtDZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAscnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxPTApe2lmKCEwIT09TC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO2xldCBaPU1hdGgucG93KDIsLXEpLGNlPU1hdGguZmxvb3IoTC5pbWFnZS53aWR0aCpaKSxVZT1NYXRoLmZsb29yKEwuaW1hZ2UuaGVpZ2h0KlopO2llLnNldFRleHR1cmUyRChMLDApLFJlLmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMscSwwLDAsUy54LFMueSxjZSxVZSksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxLFo9MCl7bGV0IGNlPUwuaW1hZ2Uud2lkdGgsVWU9TC5pbWFnZS5oZWlnaHQsJGU9Z24uY29udmVydChxLmZvcm1hdCksV2U9Z24uY29udmVydChxLnR5cGUpO2llLnNldFRleHR1cmUyRChxLDApLFJlLnBpeGVsU3RvcmVpKDM3NDQwLHEuZmxpcFkpLFJlLnBpeGVsU3RvcmVpKDM3NDQxLHEucHJlbXVsdGlwbHlBbHBoYSksUmUucGl4ZWxTdG9yZWkoMzMxNyxxLnVucGFja0FsaWdubWVudCksTC5pc0RhdGFUZXh0dXJlP1JlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksY2UsVWUsJGUsV2UsTC5pbWFnZS5kYXRhKTpMLmlzQ29tcHJlc3NlZFRleHR1cmU/UmUuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksTC5taXBtYXBzWzBdLndpZHRoLEwubWlwbWFwc1swXS5oZWlnaHQsJGUsTC5taXBtYXBzWzBdLmRhdGEpOlJlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksJGUsV2UsTC5pbWFnZSksMD09PVomJnEuZ2VuZXJhdGVNaXBtYXBzJiZSZS5nZW5lcmF0ZU1pcG1hcCgzNTUzKSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihTLEwscSxaLGNlPTApe2lmKG0uaXNXZWJHTDFSZW5kZXJlcilyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtsZXQgVHQsVWU9Uy5tYXgueC1TLm1pbi54KzEsJGU9Uy5tYXgueS1TLm1pbi55KzEsV2U9Uy5tYXguei1TLm1pbi56KzEscnQ9Z24uY29udmVydChaLmZvcm1hdCksZHQ9Z24uY29udmVydChaLnR5cGUpO2lmKFouaXNEYXRhVGV4dHVyZTNEKWllLnNldFRleHR1cmUzRChaLDApLFR0PTMyODc5O2Vsc2V7aWYoIVouaXNEYXRhVGV4dHVyZTJEQXJyYXkpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO2llLnNldFRleHR1cmUyREFycmF5KFosMCksVHQ9MzU4NjZ9UmUucGl4ZWxTdG9yZWkoMzc0NDAsWi5mbGlwWSksUmUucGl4ZWxTdG9yZWkoMzc0NDEsWi5wcmVtdWx0aXBseUFscGhhKSxSZS5waXhlbFN0b3JlaSgzMzE3LFoudW5wYWNrQWxpZ25tZW50KTtsZXQgQXQ9UmUuZ2V0UGFyYW1ldGVyKDMzMTQpLGNuPVJlLmdldFBhcmFtZXRlcigzMjg3OCksSmk9UmUuZ2V0UGFyYW1ldGVyKDMzMTYpLHhpPVJlLmdldFBhcmFtZXRlcigzMzE1KSxtbj1SZS5nZXRQYXJhbWV0ZXIoMzI4NzcpLFJuPXEuaXNDb21wcmVzc2VkVGV4dHVyZT9xLm1pcG1hcHNbMF06cS5pbWFnZTtSZS5waXhlbFN0b3JlaSgzMzE0LFJuLndpZHRoKSxSZS5waXhlbFN0b3JlaSgzMjg3OCxSbi5oZWlnaHQpLFJlLnBpeGVsU3RvcmVpKDMzMTYsUy5taW4ueCksUmUucGl4ZWxTdG9yZWkoMzMxNSxTLm1pbi55KSxSZS5waXhlbFN0b3JlaSgzMjg3NyxTLm1pbi56KSxxLmlzRGF0YVRleHR1cmV8fHEuaXNEYXRhVGV4dHVyZTNEP1JlLnRleFN1YkltYWdlM0QoVHQsY2UsTC54LEwueSxMLnosVWUsJGUsV2UscnQsZHQsUm4uZGF0YSk6cS5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLFJlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LFJuLmRhdGEpKTpSZS50ZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LGR0LFJuKSxSZS5waXhlbFN0b3JlaSgzMzE0LEF0KSxSZS5waXhlbFN0b3JlaSgzMjg3OCxjbiksUmUucGl4ZWxTdG9yZWkoMzMxNixKaSksUmUucGl4ZWxTdG9yZWkoMzMxNSx4aSksUmUucGl4ZWxTdG9yZWkoMzI4NzcsbW4pLDA9PT1jZSYmWi5nZW5lcmF0ZU1pcG1hcHMmJlJlLmdlbmVyYXRlTWlwbWFwKFR0KSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oUyl7aWUuc2V0VGV4dHVyZTJEKFMsMCksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXtfPTAseT0wLEk9bnVsbCxDZS5yZXNldCgpLGxuLnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1aaS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwLGNsYXNzIGV4dGVuZHMgWml7fS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgUk09Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IFJNKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtSTS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBPTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGFuKHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IE9NKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtPTS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIGJ5PWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07YnkucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyICRtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPU1NLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9RmMoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLG89dGhpcy5zdHJpZGU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07JG0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIG9vPW5ldyAkLGVnPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1yfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspb28ueD10aGlzLmdldFgoZSksb28ueT10aGlzLmdldFkoZSksb28uej10aGlzLmdldFooZSksb28uYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKW9vLng9dGhpcy5nZXRYKGUpLG9vLnk9dGhpcy5nZXRZKGUpLG9vLno9dGhpcy5nZXRaKGUpLG9vLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylvby54PXRoaXMuZ2V0WChlKSxvby55PXRoaXMuZ2V0WShlKSxvby56PXRoaXMuZ2V0WihlKSxvby50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxvby54LG9vLnksb28ueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLG8pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitvXSl9cmV0dXJuIG5ldyBMcihuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBlZyh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmUsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fTtlZy5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgRTI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnJvdGF0aW9uPTAsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtFMi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDt2YXIgbnksZE09bmV3ICQsaXk9bmV3ICQscnk9bmV3ICQsb3k9bmV3IEplLHBNPW5ldyBKZSxUbGU9bmV3IE1uLCRSPW5ldyAkLGhNPW5ldyAkLGUyPW5ldyAkLEJhZT1uZXcgSmUsdVU9bmV3IEplLFZhZT1uZXcgSmU7ZnVuY3Rpb24gdDIobix0LGUsaSxyLG8pe295LnN1YlZlY3RvcnMobixlKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KGkpLHZvaWQgMCE9PXI/KHBNLng9bypveS54LXIqb3kueSxwTS55PXIqb3kueCtvKm95LnkpOnBNLmNvcHkob3kpLG4uY29weSh0KSxuLngrPXBNLngsbi55Kz1wTS55LG4uYXBwbHlNYXRyaXg0KFRsZSl9KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZSIsdm9pZCAwPT09bnkpe255PW5ldyBLaTtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxpPW5ldyAkbShlLDUpO255LnNldEluZGV4KFswLDEsMiwwLDIsM10pLG55LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZyhpLDMsMCwhMSkpLG55LnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZyhpLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9bnksdGhpcy5tYXRlcmlhbD12b2lkIDAhPT10P3Q6bmV3IEUyLHRoaXMuY2VudGVyPW5ldyBKZSguNSwuNSl9cmF5Y2FzdCh0LGUpe251bGw9PT10LmNhbWVyYSYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLGl5LnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxUbGUuY29weSh0LmNhbWVyYS5tYXRyaXhXb3JsZCksdGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsdGhpcy5tYXRyaXhXb3JsZCkscnkuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubW9kZWxWaWV3TWF0cml4KSx0LmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhJiYhMT09PXRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uJiZpeS5tdWx0aXBseVNjYWxhcigtcnkueik7bGV0IHIsbyxpPXRoaXMubWF0ZXJpYWwucm90YXRpb247MCE9PWkmJihvPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkpO2xldCBzPXRoaXMuY2VudGVyO3QyKCRSLnNldCgtLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihoTS5zZXQoLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihlMi5zZXQoLjUsLjUsMCkscnkscyxpeSxyLG8pLEJhZS5zZXQoMCwwKSx1VS5zZXQoMSwwKSxWYWUuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoJFIsaE0sZTIsITEsZE0pO2lmKG51bGw9PT1hJiYodDIoaE0uc2V0KC0uNSwuNSwwKSxyeSxzLGl5LHIsbyksdVUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZSgkUixlMixoTSwhMSxkTSksbnVsbD09PWEpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhkTSk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpkTS5jbG9uZSgpLHV2OktyLmdldFVWKGRNLCRSLGhNLGUyLEJhZSx1VSxWYWUsbmV3IEplKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQuY2VudGVyJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319KS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7dmFyIEhhZT1uZXcgJCxVYWU9bmV3IHRyLHphZT1uZXcgdHIsYThlPW5ldyAkLGphZT1uZXcgTW4sVDI9Y2xhc3MgZXh0ZW5kcyB5b3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgTW4sdGhpcy5iaW5kTWF0cml4SW52ZXJzZT1uZXcgTW59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2xldCB0PW5ldyB0cixlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgaT0wLHI9ZS5jb3VudDtpPHI7aSsrKXt0Lng9ZS5nZXRYKGkpLHQueT1lLmdldFkoaSksdC56PWUuZ2V0WihpKSx0Lnc9ZS5nZXRXKGkpO2xldCBvPTEvdC5tYW5oYXR0YW5MZW5ndGgoKTtvIT09MS8wP3QubXVsdGlwbHlTY2FsYXIobyk6dC5zZXQoMSwwLDAsMCksZS5zZXRYWVpXKGksdC54LHQueSx0LnosdC53KX19dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX1ib25lVHJhbnNmb3JtKHQsZSl7bGV0IGk9dGhpcy5za2VsZXRvbixyPXRoaXMuZ2VvbWV0cnk7VWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSx6YWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxIYWUuY29weShlKS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCBvPTA7bzw0O28rKyl7bGV0IHM9emFlLmdldENvbXBvbmVudChvKTtpZigwIT09cyl7bGV0IGE9VWFlLmdldENvbXBvbmVudChvKTtqYWUubXVsdGlwbHlNYXRyaWNlcyhpLmJvbmVzW2FdLm1hdHJpeFdvcmxkLGkuYm9uZUludmVyc2VzW2FdKSxlLmFkZFNjYWxlZFZlY3RvcihhOGUuY29weShIYWUpLmFwcGx5TWF0cml4NChqYWUpLHMpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fTtUMi5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMCxjbGFzcyBleHRlbmRzIEdpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIsbyxzLGEsbCxjPUlvLHU9SW8sZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBrTT1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7Im51bWJlciI9PXR5cGVvZiBpJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtrTS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdhZT1uZXcgTW4sV2FlPW5ldyBNbixuMj1bXSxmTT1uZXcgeW87KGNsYXNzIGV4dGVuZHMgeW97Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcga00obmV3IEZsb2F0MzJBcnJheSgxNippKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihmTS5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LGZNLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09Zk0ubWF0ZXJpYWwpZm9yKGxldCBvPTA7bzxyO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLEdhZSksV2FlLm11bHRpcGx5TWF0cmljZXMoaSxHYWUpLGZNLm1hdHJpeFdvcmxkPVdhZSxmTS5yYXljYXN0KHQsbjIpO2ZvcihsZXQgcz0wLGE9bjIubGVuZ3RoO3M8YTtzKyspe2xldCBsPW4yW3NdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfW4yLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcga00obmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBqZD1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtqZC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgcWFlPW5ldyAkLFlhZT1uZXcgJCxYYWU9bmV3IE1uLGRVPW5ldyBJaCxpMj1uZXcgQWgsRk09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBqZCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bMF07Zm9yKGxldCByPTEsbz1lLmNvdW50O3I8bztyKyspcWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyLTEpLFlhZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWFlLmRpc3RhbmNlVG8oWWFlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgR3IoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGkyLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksaTIuYXBwbHlNYXRyaXg0KHIpLGkyLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoaTIpKXJldHVybjtYYWUuY29weShyKS5pbnZlcnQoKSxkVS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWGFlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphLGM9bmV3ICQsdT1uZXcgJCxkPW5ldyAkLHA9bmV3ICQsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBmPWkuaW5kZXgsQz1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWYpZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihmLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7bGV0IE89Zi5nZXRYKEkpLGVlPWYuZ2V0WChJKzEpO2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLE8pLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLGVlKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IHhlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO3hlPHQubmVhcnx8eGU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6eGUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfWVsc2UgZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihDLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSksdS5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSsxKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IGVlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO2VlPHQubmVhcnx8ZWU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6ZWUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtGTS5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBRYWU9bmV3ICQsS2FlPW5ldyAkLE5NPWNsYXNzIGV4dGVuZHMgRk17Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bXTtmb3IobGV0IHI9MCxvPWUuY291bnQ7cjxvO3IrPTIpUWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxLYWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT0wPT09cj8wOmlbci0xXSxpW3IrMV09aVtyXStRYWUuZGlzdGFuY2VUbyhLYWUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBHcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O05NLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMCxjbGFzcyBleHRlbmRzIEZNe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBEMj1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtEMi5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgWmFlPW5ldyBNbixOVT1uZXcgSWgscjI9bmV3IEFoLG8yPW5ldyAkO2Z1bmN0aW9uIEphZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1OVS5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyAkO05VLmNsb3Nlc3RQb2ludFRvUG9pbnQobixsKSxsLmFwcGx5TWF0cml4NChpKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPHIubmVhcnx8Yz5yLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KGEpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OnN9KX19KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodD1uZXcgS2ksZT1uZXcgRDIpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkLHM9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCkscjIuY29weShpLmJvdW5kaW5nU3BoZXJlKSxyMi5hcHBseU1hdHJpeDQocikscjIucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShyMikpcmV0dXJuO1phZS5jb3B5KHIpLmludmVydCgpLE5VLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChaYWUpO2xldCBhPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1pLmluZGV4LGQ9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1jKWZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oYy5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspe2xldCBDPWMuZ2V0WChmKTtvMi5mcm9tQnVmZmVyQXR0cmlidXRlKGQsQyksSmFlKG8yLEMsbCxyLHQsZSx0aGlzKX1lbHNlIGZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oZC5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspbzIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShkLGYpLEphZShvMixmLGwscix0LGUsdGhpcyl9ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSkucHJvdG90eXBlLmlzUG9pbnRzPSEwLGNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1zP3M6YnMsdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09bz9vOmJzLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGZ1bmN0aW9uIGQoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhkKX0pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuaW1hZ2UpLmNvcHkodGhpcyl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5pbWFnZTsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0PT0wJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19LnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXMuZm9ybWF0PWksdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH19LnByb3RvdHlwZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX0ucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7c3VwZXIodCxlLGkscixvLHMsYSxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciB4eT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTgsaT0wLHI9MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmksdGhldGFMZW5ndGg6cn0sZT1NYXRoLm1heCgzLGUpO2xldCBvPVtdLHM9W10sYT1bXSxsPVtdLGM9bmV3ICQsdT1uZXcgSmU7cy5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBkPTAscD0zO2Q8PWU7ZCsrLHArPTMpe2xldCBoPWkrZC9lKnI7Yy54PXQqTWF0aC5jb3MoaCksYy55PXQqTWF0aC5zaW4oaCkscy5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0oc1twXS90KzEpLzIsdS55PShzW3ArMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGQ9MTtkPD1lO2QrKylvLnB1c2goZCxkKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgR3IoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgR3IobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgeHkodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSx5YT0obmV3ICQsbmV3ICQsbmV3ICQsbmV3IEtyLGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KGksZSl9Z2V0UG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIGV9Z2V0U3BhY2VkUG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChpL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1nZXRMZW5ndGhzKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpe2lmKHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2xldCBpLGU9W10scj10aGlzLmdldFBvaW50KDApLG89MDtlLnB1c2goMCk7Zm9yKGxldCBzPTE7czw9dDtzKyspaT10aGlzLmdldFBvaW50KHMvdCksbys9aS5kaXN0YW5jZVRvKHIpLGUucHVzaChvKSxyPWk7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX1nZXRVdG9UbWFwcGluZyh0LGUpe2xldCBzLGk9dGhpcy5nZXRMZW5ndGhzKCkscj0wLG89aS5sZW5ndGg7cz1lfHx0Kmlbby0xXTtsZXQgYyxhPTAsbD1vLTE7Zm9yKDthPD1sOylpZihyPU1hdGguZmxvb3IoYSsobC1hKS8yKSxjPWlbcl0tcyxjPDApYT1yKzE7ZWxzZXtpZighKGM+MCkpe2w9cjticmVha31sPXItMX1pZihyPWwsaVtyXT09PXMpcmV0dXJuIHIvKG8tMSk7bGV0IHU9aVtyXTtyZXR1cm4ocisocy11KS8oaVtyKzFdLXUpKS8oby0xKX1nZXRUYW5nZW50KHQsZSl7bGV0IHI9dC0xZS00LG89dCsxZS00O3I8MCYmKHI9MCksbz4xJiYobz0xKTtsZXQgcz10aGlzLmdldFBvaW50KHIpLGE9dGhpcy5nZXRQb2ludChvKSxsPWV8fChzLmlzVmVjdG9yMj9uZXcgSmU6bmV3ICQpO3JldHVybiBsLmNvcHkoYSkuc3ViKHMpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyAkLHI9W10sbz1bXSxzPVtdLGE9bmV3ICQsbD1uZXcgTW47Zm9yKGxldCBoPTA7aDw9dDtoKyspcltoXT10aGlzLmdldFRhbmdlbnRBdChoL3QsbmV3ICQpO29bMF09bmV3ICQsc1swXT1uZXcgJDtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoclswXS54KSxkPU1hdGguYWJzKHJbMF0ueSkscD1NYXRoLmFicyhyWzBdLnopO3U8PWMmJihjPXUsaS5zZXQoMSwwLDApKSxkPD1jJiYoYz1kLGkuc2V0KDAsMSwwKSkscDw9YyYmaS5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKHJbMF0saSkubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxhKSxzWzBdLmNyb3NzVmVjdG9ycyhyWzBdLG9bMF0pO2ZvcihsZXQgaD0xO2g8PXQ7aCsrKXtpZihvW2hdPW9baC0xXS5jbG9uZSgpLHNbaF09c1toLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMocltoLTFdLHJbaF0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7bGV0IGY9TWF0aC5hY29zKF9hKHJbaC0xXS5kb3QocltoXSksLTEsMSkpO29baF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhhLGYpKX1zW2hdLmNyb3NzVmVjdG9ycyhyW2hdLG9baF0pfWlmKCEwPT09ZSl7bGV0IGg9TWF0aC5hY29zKF9hKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtoLz10LHJbMF0uZG90KGEuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihoPS1oKTtmb3IobGV0IGY9MTtmPD10O2YrKylvW2ZdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMocltmXSxoKmYpKSxzW2ZdLmNyb3NzVmVjdG9ycyhyW2ZdLG9bZl0pfXJldHVybnt0YW5nZW50czpyLG5vcm1hbHM6byxiaW5vcm1hbHM6c319Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0pLEN5PWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD0wLGU9MCxpPTEscj0xLG89MCxzPTIqTWF0aC5QSSxhPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9ZSx0aGlzLnhSYWRpdXM9aSx0aGlzLnlSYWRpdXM9cix0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9cyx0aGlzLmFDbG9ja3dpc2U9YSx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplLHI9MipNYXRoLlBJLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxzPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1yO2Zvcig7bz5yOylvLT1yO288TnVtYmVyLkVQU0lMT04mJihvPXM/MDpyKSwhMD09PXRoaXMuYUNsb2Nrd2lzZSYmIXMmJihvPT09cj9vPS1yOm8tPXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZigwIT09dGhpcy5hUm90YXRpb24pe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxkPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxwPWwtdGhpcy5hWCxoPWMtdGhpcy5hWTtsPXAqdS1oKmQrdGhpcy5hWCxjPXAqZCtoKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtDeS5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIEEyPWNsYXNzIGV4dGVuZHMgQ3l7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpLGkscixvLHMpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07ZnVuY3Rpb24gRnooKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIobyxzLGEsbCl7bj1vLHQ9YSxlPS0zKm8rMypzLTIqYS1sLGk9MipvLTIqcythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyl7cihzLGEsYyooYS1vKSxjKihsLXMpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyx1LGQpe2xldCBwPShzLW8pL2MtKGEtbykvKGMrdSkrKGEtcykvdSxoPShhLXMpL3UtKGwtcykvKHUrZCkrKGwtYSkvZDtwKj11LGgqPXUscihzLGEscCxoKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgcz1vKm87cmV0dXJuIG4rdCpvK2UqcytpKihzKm8pfX19QTIucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7dmFyIHMyPW5ldyAkLHBVPW5ldyBGeixoVT1uZXcgRnosZlU9bmV3IEZ6LEkyPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD1bXSxlPSExLGk9ImNlbnRyaXBldGFsIixyPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPWksdGhpcy50ZW5zaW9uPXJ9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgYyx1LGk9ZSxyPXRoaXMucG9pbnRzLG89ci5sZW5ndGgscz0oby0odGhpcy5jbG9zZWQ/MDoxKSkqdCxhPU1hdGguZmxvb3IocyksbD1zLWE7dGhpcy5jbG9zZWQ/YSs9YT4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMoYSkvbykrMSkqbzowPT09bCYmYT09PW8tMSYmKGE9by0yLGw9MSksdGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklb106KHMyLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1zMik7bGV0IGQ9clthJW9dLHA9clsoYSsxKSVvXTtpZih0aGlzLmNsb3NlZHx8YSsyPG8/dT1yWyhhKzIpJW9dOihzMi5zdWJWZWN0b3JzKHJbby0xXSxyW28tMl0pLmFkZChyW28tMV0pLHU9czIpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2xldCBoPSJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlPy41Oi4yNSxmPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoZCksaCksbT1NYXRoLnBvdyhkLmRpc3RhbmNlVG9TcXVhcmVkKHApLGgpLEM9TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZCh1KSxoKTttPDFlLTQmJihtPTEpLGY8MWUtNCYmKGY9bSksQzwxZS00JiYoQz1tKSxwVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGQueCxwLngsdS54LGYsbSxDKSxoVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGQueSxwLnksdS55LGYsbSxDKSxmVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGQueixwLnosdS56LGYsbSxDKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihwVS5pbml0Q2F0bXVsbFJvbShjLngsZC54LHAueCx1LngsdGhpcy50ZW5zaW9uKSxoVS5pbml0Q2F0bXVsbFJvbShjLnksZC55LHAueSx1LnksdGhpcy50ZW5zaW9uKSxmVS5pbml0Q2F0bXVsbFJvbShjLnosZC56LHAueix1LnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIGkuc2V0KHBVLmNhbGMobCksaFUuY2FsYyhsKSxmVS5jYWxjKGwpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyAkKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fTtmdW5jdGlvbiAkYWUobix0LGUsaSxyKXtsZXQgbz0uNSooaS10KSxzPS41KihyLWUpLGE9bipuO3JldHVybigyKmUtMippK28rcykqKG4qYSkrKC0zKmUrMyppLTIqby1zKSphK28qbitlfWZ1bmN0aW9uIGJNKG4sdCxlLGkpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtyZXR1cm4gMiooMS1uKSpuKnR9KG4sZSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKnR9KG4saSl9ZnVuY3Rpb24geE0obix0LGUsaSxyKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIDMqZSplKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiAzKigxLW4pKm4qbip0fShuLGkpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIG4qbipuKnR9KG4scil9STIucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDt2YXIgTE09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyBKZSxlPW5ldyBKZSxpPW5ldyBKZSxyPW5ldyBKZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEplKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQoeE0odCxyLngsby54LHMueCxhLngpLHhNKHQsci55LG8ueSxzLnksYS55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtMTS5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwO3ZhciBQMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkLHI9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHhNKHQsci54LG8ueCxzLngsYS54KSx4TSh0LHIueSxvLnkscy55LGEueSkseE0odCxyLnosby56LHMueixhLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O1AyLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwO3ZhciB3eT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWU7cmV0dXJuIDE9PT10P2kuY29weSh0aGlzLnYyKTooaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksaX1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1nZXRUYW5nZW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplO3JldHVybiBpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07d3kucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwO3ZhciBCTT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplLGk9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O0JNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciBSMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpLGJNKHQsci56LG8ueixzLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1IyLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgVk09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBKZSl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLG89KHIubGVuZ3RoLTEpKnQscz1NYXRoLmZsb29yKG8pLGE9by1zLGw9clswPT09cz9zOnMtMV0sYz1yW3NdLHU9cltzPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpzKzFdLGQ9cltzPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpzKzJdO3JldHVybiBpLnNldCgkYWUoYSxsLngsYy54LHUueCxkLngpLCRhZShhLGwueSxjLnksdS55LGQueSkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgSmUpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTtWTS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgRGxlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOkEyLENhdG11bGxSb21DdXJ2ZTM6STIsQ3ViaWNCZXppZXJDdXJ2ZTpMTSxDdWJpY0JlemllckN1cnZlMzpQMixFbGxpcHNlQ3VydmU6Q3ksTGluZUN1cnZlOnd5LExpbmVDdXJ2ZTM6Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZTtyZXR1cm4gMT09PXQ/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LFF1YWRyYXRpY0JlemllckN1cnZlOkJNLFF1YWRyYXRpY0JlemllckN1cnZlMzpSMixTcGxpbmVDdXJ2ZTpWTX0pLGpVPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtsZXQgdD10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTt0LmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgd3koZSx0KSl9Z2V0UG9pbnQodCxlKXtsZXQgaT10KnRoaXMuZ2V0TGVuZ3RoKCkscj10aGlzLmdldEN1cnZlTGVuZ3RocygpLG89MDtmb3IoO288ci5sZW5ndGg7KXtpZihyW29dPj1pKXtsZXQgcz1yW29dLWksYT10aGlzLmN1cnZlc1tvXSxsPWEuZ2V0TGVuZ3RoKCk7cmV0dXJuIGEuZ2V0UG9pbnRBdCgwPT09bD8wOjEtcy9sLGUpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxlPTA7Zm9yKGxldCBpPTAscj10aGlzLmN1cnZlcy5sZW5ndGg7aTxyO2krKyllKz10aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLnB1c2goZVswXSksZX1nZXRQb2ludHModD0xMil7bGV0IGksZT1bXTtmb3IobGV0IHI9MCxvPXRoaXMuY3VydmVzO3I8by5sZW5ndGg7cisrKXtsZXQgcz1vW3JdLGw9cy5nZXRQb2ludHMocyYmcy5pc0VsbGlwc2VDdXJ2ZT8yKnQ6cyYmKHMuaXNMaW5lQ3VydmV8fHMuaXNMaW5lQ3VydmUzKT8xOnMmJnMuaXNTcGxpbmVDdXJ2ZT90KnMucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXQuY3VydmVzLnB1c2godGhpcy5jdXJ2ZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sSE09Y2xhc3MgZXh0ZW5kcyBqVXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEplLHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtsZXQgaT1uZXcgd3kodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSmUodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBvPW5ldyBCTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQoaSxyKSx0aGlzfWJlemllckN1cnZlVG8odCxlLGkscixvLHMpe2xldCBhPW5ldyBMTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpLG5ldyBKZShvLHMpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChhKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxzKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxpPW5ldyBWTShlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxzKSx0aGlzfWFic2FyYyh0LGUsaSxyLG8scyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsaSxpLHIsbyxzKSx0aGlzfWVsbGlwc2UodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaSxyLG8scyxhLGwpLHRoaXN9YWJzZWxsaXBzZSh0LGUsaSxyLG8scyxhLGwpe2xldCBjPW5ldyBDeSh0LGUsaSxyLG8scyxhLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgZD1jLmdldFBvaW50KDApO2QuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oZC54LGQueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sR2Q9Y2xhc3MgZXh0ZW5kcyBITXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dGhpcy5ob2xlcy5sZW5ndGg7aTxyO2krKyllW2ldPXRoaXMuaG9sZXNbaV0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmhvbGVzLnB1c2godC5ob2xlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IEhNKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBBbGUobix0LGUsaSxyKXtsZXQgbyxzO2lmKHI9PT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0wO2ZvcihsZXQgbz10LHM9ZS1pO288ZTtvKz1pKXIrPShuW3NdLW5bb10pKihuW28rMV0rbltzKzFdKSxzPW87cmV0dXJuIHJ9KG4sdCxlLGkpPjApZm9yKG89dDtvPGU7bys9aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO2Vsc2UgZm9yKG89ZS1pO28+PXQ7by09aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO3JldHVybiBzJiZxMihzLHMubmV4dCkmJihqTShzKSxzPXMubmV4dCksc31mdW5jdGlvbiBSaChuLHQpe2lmKCFuKXJldHVybiBuO3R8fCh0PW4pO2xldCBpLGU9bjtkb3tpZihpPSExLGUuc3RlaW5lcnx8IXEyKGUsZS5uZXh0KSYmMCE9PWpyKGUucHJldixlLGUubmV4dCkpZT1lLm5leHQ7ZWxzZXtpZihqTShlKSxlPXQ9ZS5wcmV2LGU9PT1lLm5leHQpYnJlYWs7aT0hMH19d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIFVNKG4sdCxlLGkscixvLHMpe2lmKCFuKXJldHVybjshcyYmbyYmZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bjtkb3tudWxsPT09ci56JiYoci56PUdVKHIueCxyLnksdCxlLGkpKSxyLnByZXZaPXIucHJldixyLm5leHRaPXIubmV4dCxyPXIubmV4dH13aGlsZShyIT09bik7ci5wcmV2Wi5uZXh0Wj1udWxsLHIucHJldlo9bnVsbCxmdW5jdGlvbihuKXtsZXQgdCxlLGkscixvLHMsYSxsLGM9MTtkb3tmb3IoZT1uLG49bnVsbCxvPW51bGwscz0wO2U7KXtmb3IocysrLGk9ZSxhPTAsdD0wO3Q8YyYmKGErKyxpPWkubmV4dFosaSk7dCsrKTtmb3IobD1jO2E+MHx8bD4wJiZpOykwIT09YSYmKDA9PT1sfHwhaXx8ZS56PD1pLnopPyhyPWUsZT1lLm5leHRaLGEtLSk6KHI9aSxpPWkubmV4dFosbC0tKSxvP28ubmV4dFo9cjpuPXIsci5wcmV2Wj1vLG89cjtlPWl9by5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUocz4xKX0ocil9KG4saSxyLG8pO2xldCBsLGMsYT1uO2Zvcig7bi5wcmV2IT09bi5uZXh0OylpZihsPW4ucHJldixjPW4ubmV4dCxvP184ZShuLGkscixvKTpnOGUobikpdC5wdXNoKGwuaS9lKSx0LnB1c2gobi5pL2UpLHQucHVzaChjLmkvZSksak0obiksbj1jLm5leHQsYT1jLm5leHQ7ZWxzZSBpZigobj1jKT09PWEpe3M/MT09PXM/VU0obj12OGUoUmgobiksdCxlKSx0LGUsaSxyLG8sMik6Mj09PXMmJnk4ZShuLHQsZSxpLHIsbyk6VU0oUmgobiksdCxlLGkscixvLDEpO2JyZWFrfX1mdW5jdGlvbiBnOGUobil7bGV0IHQ9bi5wcmV2LGU9bixpPW4ubmV4dDtpZihqcih0LGUsaSk+PTApcmV0dXJuITE7bGV0IHI9bi5uZXh0Lm5leHQ7Zm9yKDtyIT09bi5wcmV2Oyl7aWYoY3kodC54LHQueSxlLngsZS55LGkueCxpLnksci54LHIueSkmJmpyKHIucHJldixyLHIubmV4dCk+PTApcmV0dXJuITE7cj1yLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gXzhlKG4sdCxlLGkpe2xldCByPW4ucHJldixvPW4scz1uLm5leHQ7aWYoanIocixvLHMpPj0wKXJldHVybiExO2xldCBjPXIueD5vLng/ci54PnMueD9yLng6cy54Om8ueD5zLng/by54OnMueCx1PXIueT5vLnk/ci55PnMueT9yLnk6cy55Om8ueT5zLnk/by55OnMueSxkPUdVKHIueDxvLng/ci54PHMueD9yLng6cy54Om8ueDxzLng/by54OnMueCxyLnk8by55P3IueTxzLnk/ci55OnMueTpvLnk8cy55P28ueTpzLnksdCxlLGkpLHA9R1UoYyx1LHQsZSxpKSxoPW4ucHJldlosZj1uLm5leHRaO2Zvcig7aCYmaC56Pj1kJiZmJiZmLno8PXA7KXtpZihoIT09bi5wcmV2JiZoIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxoLngsaC55KSYmanIoaC5wcmV2LGgsaC5uZXh0KT49MHx8KGg9aC5wcmV2WixmIT09bi5wcmV2JiZmIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxmLngsZi55KSYmanIoZi5wcmV2LGYsZi5uZXh0KT49MCkpcmV0dXJuITE7Zj1mLm5leHRafWZvcig7aCYmaC56Pj1kOyl7aWYoaCE9PW4ucHJldiYmaCE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksaC54LGgueSkmJmpyKGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7ZiYmZi56PD1wOyl7aWYoZiE9PW4ucHJldiYmZiE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksZi54LGYueSkmJmpyKGYucHJldixmLGYubmV4dCk+PTApcmV0dXJuITE7Zj1mLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHY4ZShuLHQsZSl7bGV0IGk9bjtkb3tsZXQgcj1pLnByZXYsbz1pLm5leHQubmV4dDshcTIocixvKSYmSWxlKHIsaSxpLm5leHQsbykmJnpNKHIsbykmJnpNKG8scikmJih0LnB1c2goci5pL2UpLHQucHVzaChpLmkvZSksdC5wdXNoKG8uaS9lKSxqTShpKSxqTShpLm5leHQpLGk9bj1vKSxpPWkubmV4dH13aGlsZShpIT09bik7cmV0dXJuIFJoKGkpfWZ1bmN0aW9uIHk4ZShuLHQsZSxpLHIsbyl7bGV0IHM9bjtkb3tsZXQgYT1zLm5leHQubmV4dDtmb3IoO2EhPT1zLnByZXY7KXtpZihzLmkhPT1hLmkmJkQ4ZShzLGEpKXtsZXQgbD1QbGUocyxhKTtyZXR1cm4gcz1SaChzLHMubmV4dCksbD1SaChsLGwubmV4dCksVU0ocyx0LGUsaSxyLG8pLHZvaWQgVU0obCx0LGUsaSxyLG8pfWE9YS5uZXh0fXM9cy5uZXh0fXdoaWxlKHMhPT1uKX1mdW5jdGlvbiB4OGUobix0KXtyZXR1cm4gbi54LXQueH1mdW5jdGlvbiBDOGUobix0KXtpZih0PWZ1bmN0aW9uKG4sdCl7bGV0IHMsZT10LGk9bi54LHI9bi55LG89LTEvMDtkb3tpZihyPD1lLnkmJnI+PWUubmV4dC55JiZlLm5leHQueSE9PWUueSl7bGV0IHA9ZS54KyhyLWUueSkqKGUubmV4dC54LWUueCkvKGUubmV4dC55LWUueSk7aWYocDw9aSYmcD5vKXtpZihvPXAscD09PWkpe2lmKHI9PT1lLnkpcmV0dXJuIGU7aWYocj09PWUubmV4dC55KXJldHVybiBlLm5leHR9cz1lLng8ZS5uZXh0Lng/ZTplLm5leHR9fWU9ZS5uZXh0fXdoaWxlKGUhPT10KTtpZighcylyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcztsZXQgZCxhPXMsbD1zLngsYz1zLnksdT0xLzA7ZT1zO2Rve2k+PWUueCYmZS54Pj1sJiZpIT09ZS54JiZjeShyPGM/aTpvLHIsbCxjLHI8Yz9vOmkscixlLngsZS55KSYmKGQ9TWF0aC5hYnMoci1lLnkpLyhpLWUueCksek0oZSxuKSYmKGQ8dXx8ZD09PXUmJihlLng+cy54fHxlLng9PT1zLngmJk04ZShzLGUpKSkmJihzPWUsdT1kKSksZT1lLm5leHR9d2hpbGUoZSE9PWEpO3JldHVybiBzfShuLHQpLHQpe2xldCBlPVBsZSh0LG4pO1JoKHQsdC5uZXh0KSxSaChlLGUubmV4dCl9fWZ1bmN0aW9uIE04ZShuLHQpe3JldHVybiBqcihuLnByZXYsbix0LnByZXYpPDAmJmpyKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBHVShuLHQsZSxpLHIpe3JldHVybihuPTE0MzE2NTU3NjUmKChuPTg1ODk5MzQ1OSYoKG49MjUyNjQ1MTM1Jigobj0xNjcxMTkzNSYoKG49MzI3NjcqKG4tZSkqcil8bjw8OCkpfG48PDQpKXxuPDwyKSl8bjw8MSkpfCh0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtaSkqcil8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpPDwxfWZ1bmN0aW9uIFQ4ZShuKXtsZXQgdD1uLGU9bjtkb3sodC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHR9d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIGN5KG4sdCxlLGkscixvLHMsYSl7cmV0dXJuKHItcykqKHQtYSktKG4tcykqKG8tYSk+PTAmJihuLXMpKihpLWEpLShlLXMpKih0LWEpPj0wJiYoZS1zKSooby1hKS0oci1zKSooaS1hKT49MH1mdW5jdGlvbiBEOGUobix0KXtyZXR1cm4gbi5uZXh0LmkhPT10LmkmJm4ucHJldi5pIT09dC5pJiYhZnVuY3Rpb24obix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJklsZShlLGUubmV4dCxuLHQpKXJldHVybiEwO2U9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4hMX0obix0KSYmKHpNKG4sdCkmJnpNKHQsbikmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bixpPSExLHI9KG4ueCt0LngpLzIsbz0obi55K3QueSkvMjtkb3tlLnk+byE9ZS5uZXh0Lnk+byYmZS5uZXh0LnkhPT1lLnkmJnI8KGUubmV4dC54LWUueCkqKG8tZS55KS8oZS5uZXh0LnktZS55KStlLngmJihpPSFpKSxlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuIGl9KG4sdCkmJihqcihuLnByZXYsbix0LnByZXYpfHxqcihuLHQucHJldix0KSl8fHEyKG4sdCkmJmpyKG4ucHJldixuLG4ubmV4dCk+MCYmanIodC5wcmV2LHQsdC5uZXh0KT4wKX1mdW5jdGlvbiBqcihuLHQsZSl7cmV0dXJuKHQueS1uLnkpKihlLngtdC54KS0odC54LW4ueCkqKGUueS10LnkpfWZ1bmN0aW9uIHEyKG4sdCl7cmV0dXJuIG4ueD09PXQueCYmbi55PT09dC55fWZ1bmN0aW9uIElsZShuLHQsZSxpKXtsZXQgcj1sMihqcihuLHQsZSkpLG89bDIoanIobix0LGkpKSxzPWwyKGpyKGUsaSxuKSksYT1sMihqcihlLGksdCkpO3JldHVybiEhKHIhPT1vJiZzIT09YXx8MD09PXImJmEyKG4sZSx0KXx8MD09PW8mJmEyKG4saSx0KXx8MD09PXMmJmEyKGUsbixpKXx8MD09PWEmJmEyKGUsdCxpKSl9ZnVuY3Rpb24gYTIobix0LGUpe3JldHVybiB0Lng8PU1hdGgubWF4KG4ueCxlLngpJiZ0Lng+PU1hdGgubWluKG4ueCxlLngpJiZ0Lnk8PU1hdGgubWF4KG4ueSxlLnkpJiZ0Lnk+PU1hdGgubWluKG4ueSxlLnkpfWZ1bmN0aW9uIGwyKG4pe3JldHVybiBuPjA/MTpuPDA/LTE6MH1mdW5jdGlvbiB6TShuLHQpe3JldHVybiBqcihuLnByZXYsbixuLm5leHQpPDA/anIobix0LG4ubmV4dCk+PTAmJmpyKG4sbi5wcmV2LHQpPj0wOmpyKG4sdCxuLnByZXYpPDB8fGpyKG4sbi5uZXh0LHQpPDB9ZnVuY3Rpb24gUGxlKG4sdCl7bGV0IGU9bmV3IFdVKG4uaSxuLngsbi55KSxpPW5ldyBXVSh0LmksdC54LHQueSkscj1uLm5leHQsbz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLG8ubmV4dD1pLGkucHJldj1vLGl9ZnVuY3Rpb24gZWxlKG4sdCxlLGkpe2xldCByPW5ldyBXVShuLHQsZSk7cmV0dXJuIGk/KHIubmV4dD1pLm5leHQsci5wcmV2PWksaS5uZXh0LnByZXY9cixpLm5leHQ9cik6KHIucHJldj1yLHIubmV4dD1yKSxyfWZ1bmN0aW9uIGpNKG4pe24ubmV4dC5wcmV2PW4ucHJldixuLnByZXYubmV4dD1uLm5leHQsbi5wcmV2WiYmKG4ucHJldloubmV4dFo9bi5uZXh0Wiksbi5uZXh0WiYmKG4ubmV4dFoucHJldlo9bi5wcmV2Wil9ZnVuY3Rpb24gV1Uobix0LGUpe3RoaXMuaT1uLHRoaXMueD10LHRoaXMueT1lLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfXZhciB6dT1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxvPTA7bzxlO3I9bysrKWkrPXRbcl0ueCp0W29dLnktdFtvXS54KnRbcl0ueTtyZXR1cm4uNSppfXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4genUuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7bGV0IGk9W10scj1bXSxvPVtdO3RsZSh0KSxubGUoaSx0KTtsZXQgcz10Lmxlbmd0aDtlLmZvckVhY2godGxlKTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrKylyLnB1c2gocykscys9ZVtsXS5sZW5ndGgsbmxlKGksZVtsXSk7bGV0IGE9ZnVuY3Rpb24obix0LGU9Mil7bGV0IGEsbCxjLHUsZCxwLGgsaT10JiZ0Lmxlbmd0aCxyPWk/dFswXSplOm4ubGVuZ3RoLG89QWxlKG4sMCxyLGUsITApLHM9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gcztpZihpJiYobz1mdW5jdGlvbihuLHQsZSxpKXtsZXQgbyxzLGEsbCxjLHI9W107Zm9yKG89MCxzPXQubGVuZ3RoO288cztvKyspYT10W29dKmksbD1vPHMtMT90W28rMV0qaTpuLmxlbmd0aCxjPUFsZShuLGEsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2goVDhlKGMpKTtmb3Ioci5zb3J0KHg4ZSksbz0wO288ci5sZW5ndGg7bysrKUM4ZShyW29dLGUpLGU9UmgoZSxlLm5leHQpO3JldHVybiBlfShuLHQsbyxlKSksbi5sZW5ndGg+ODAqZSl7YT1jPW5bMF0sbD11PW5bMV07Zm9yKGxldCBmPWU7ZjxyO2YrPWUpZD1uW2ZdLHA9bltmKzFdLGQ8YSYmKGE9ZCkscDxsJiYobD1wKSxkPmMmJihjPWQpLHA+dSYmKHU9cCk7aD1NYXRoLm1heChjLWEsdS1sKSxoPTAhPT1oPzEvaDowfXJldHVybiBVTShvLHMsZSxhLGwsaCksc30oaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpby5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIHRsZShuKXtsZXQgdD1uLmxlbmd0aDt0PjImJm5bdC0xXS5lcXVhbHMoblswXSkmJm4ucG9wKCl9ZnVuY3Rpb24gbmxlKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKHRbZV0ueCksbi5wdXNoKHRbZV0ueSl9dmFyIE9oPWNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IodD1uZXcgR2QoW25ldyBKZSguNSwuNSksbmV3IEplKC0uNSwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10sbz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspcyh0W2FdKTtmdW5jdGlvbiBzKGEpe2xldCBsPVtdLGM9dm9pZCAwIT09ZS5jdXJ2ZVNlZ21lbnRzP2UuY3VydmVTZWdtZW50czoxMix1PXZvaWQgMCE9PWUuc3RlcHM/ZS5zdGVwczoxLGQ9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEscD12b2lkIDA9PT1lLmJldmVsRW5hYmxlZHx8ZS5iZXZlbEVuYWJsZWQsaD12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6LjIsZj12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTpoLS4xLG09dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsQz12b2lkIDAhPT1lLmJldmVsU2VnbWVudHM/ZS5iZXZlbFNlZ21lbnRzOjMsXz1lLmV4dHJ1ZGVQYXRoLHk9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOlI4ZTt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxkPWUuYW1vdW50KTtsZXQgSSxPLGVlLFgseGUsQT0hMTtfJiYoST1fLmdldFNwYWNlZFBvaW50cyh1KSxBPSEwLHA9ITEsTz1fLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksZWU9bmV3ICQsWD1uZXcgJCx4ZT1uZXcgJCkscHx8KEM9MCxoPTAsZj0wLG09MCk7bGV0IGZlPWEuZXh0cmFjdFBvaW50cyhjKSx2ZT1mZS5zaGFwZSxUPWZlLmhvbGVzO2lmKCF6dS5pc0Nsb2NrV2lzZSh2ZSkpe3ZlPXZlLnJldmVyc2UoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO3p1LmlzQ2xvY2tXaXNlKFllKSYmKFRbaWVdPVllLnJldmVyc2UoKSl9fWxldCBsZT16dS50cmlhbmd1bGF0ZVNoYXBlKHZlLFQpLGhlPXZlO2ZvcihsZXQgaWU9MCxjdD1ULmxlbmd0aDtpZTxjdDtpZSsrKXZlPXZlLmNvbmNhdChUW2llXSk7ZnVuY3Rpb24geWUoaWUsY3QsWWUpe3JldHVybiBjdHx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxjdC5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKFllKS5hZGQoaWUpfWxldCBKPXZlLmxlbmd0aCxhZT1sZS5sZW5ndGg7ZnVuY3Rpb24gbWUoaWUsY3QsWWUpe2xldCB4dCxodCxzbixTbj1pZS54LWN0Lngsb2k9aWUueS1jdC55LFVpPVllLngtaWUueCx6aT1ZZS55LWllLnksUT1TbipTbitvaSpvaTtpZihNYXRoLmFicyhTbip6aS1vaSpVaSk+TnVtYmVyLkVQU0lMT04pe2xldCBWZT1NYXRoLnNxcnQoUSksQ3Q9TWF0aC5zcXJ0KFVpKlVpK3ppKnppKSx0bj1jdC54LW9pL1ZlLEJlPWN0LnkrU24vVmUsRnQ9KChZZS54LXppL0N0LXRuKSp6aS0oWWUueStVaS9DdC1CZSkqVWkpLyhTbip6aS1vaSpVaSk7eHQ9dG4rU24qRnQtaWUueCxodD1CZStvaSpGdC1pZS55O2xldCBrdD14dCp4dCtodCpodDtpZihrdDw9MilyZXR1cm4gbmV3IEplKHh0LGh0KTtzbj1NYXRoLnNxcnQoa3QvMil9ZWxzZXtsZXQgVmU9ITE7U24+TnVtYmVyLkVQU0lMT04/VWk+TnVtYmVyLkVQU0lMT04mJihWZT0hMCk6U248LU51bWJlci5FUFNJTE9OP1VpPC1OdW1iZXIuRVBTSUxPTiYmKFZlPSEwKTpNYXRoLnNpZ24ob2kpPT09TWF0aC5zaWduKHppKSYmKFZlPSEwKSxWZT8oeHQ9LW9pLGh0PVNuLHNuPU1hdGguc3FydChRKSk6KHh0PVNuLGh0PW9pLHNuPU1hdGguc3FydChRLzIpKX1yZXR1cm4gbmV3IEplKHh0L3NuLGh0L3NuKX1sZXQgamU9W107Zm9yKGxldCBpZT0wLGN0PWhlLmxlbmd0aCxZZT1jdC0xLHh0PWllKzE7aWU8Y3Q7aWUrKyxZZSsrLHh0KyspWWU9PT1jdCYmKFllPTApLHh0PT09Y3QmJih4dD0wKSxqZVtpZV09bWUoaGVbaWVdLGhlW1llXSxoZVt4dF0pO2xldCBGZSxNZT1bXSx1dD1qZS5jb25jYXQoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO0ZlPVtdO2ZvcihsZXQgeHQ9MCxodD1ZZS5sZW5ndGgsc249aHQtMSxTbj14dCsxO3h0PGh0O3h0Kyssc24rKyxTbisrKXNuPT09aHQmJihzbj0wKSxTbj09PWh0JiYoU249MCksRmVbeHRdPW1lKFllW3h0XSxZZVtzbl0sWWVbU25dKTtNZS5wdXNoKEZlKSx1dD11dC5jb25jYXQoRmUpfWZvcihsZXQgaWU9MDtpZTxDO2llKyspe2xldCBjdD1pZS9DLFllPWgqTWF0aC5jb3MoY3QqTWF0aC5QSS8yKSx4dD1mKk1hdGguc2luKGN0Kk1hdGguUEkvMikrbTtmb3IobGV0IGh0PTAsc249aGUubGVuZ3RoO2h0PHNuO2h0Kyspe2xldCBTbj15ZShoZVtodF0samVbaHRdLHh0KTtFdChTbi54LFNuLnksLVllKX1mb3IobGV0IGh0PTAsc249VC5sZW5ndGg7aHQ8c247aHQrKyl7bGV0IFNuPVRbaHRdO0ZlPU1lW2h0XTtmb3IobGV0IG9pPTAsVWk9U24ubGVuZ3RoO29pPFVpO29pKyspe2xldCB6aT15ZShTbltvaV0sRmVbb2ldLHh0KTtFdCh6aS54LHppLnksLVllKX19fWxldCBTdD1mK207Zm9yKGxldCBpZT0wO2llPEo7aWUrKyl7bGV0IGN0PXA/eWUodmVbaWVdLHV0W2llXSxTdCk6dmVbaWVdO0E/KFguY29weShPLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LngpLGVlLmNvcHkoTy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LnkpLHhlLmNvcHkoSVswXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChjdC54LGN0LnksMCl9Zm9yKGxldCBpZT0xO2llPD11O2llKyspZm9yKGxldCBjdD0wO2N0PEo7Y3QrKyl7bGV0IFllPXA/eWUodmVbY3RdLHV0W2N0XSxTdCk6dmVbY3RdO0E/KFguY29weShPLm5vcm1hbHNbaWVdKS5tdWx0aXBseVNjYWxhcihZZS54KSxlZS5jb3B5KE8uYmlub3JtYWxzW2llXSkubXVsdGlwbHlTY2FsYXIoWWUueSkseGUuY29weShJW2llXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChZZS54LFllLnksZC91KmllKX1mb3IobGV0IGllPUMtMTtpZT49MDtpZS0tKXtsZXQgY3Q9aWUvQyxZZT1oKk1hdGguY29zKGN0Kk1hdGguUEkvMikseHQ9ZipNYXRoLnNpbihjdCpNYXRoLlBJLzIpK207Zm9yKGxldCBodD0wLHNuPWhlLmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249eWUoaGVbaHRdLGplW2h0XSx4dCk7RXQoU24ueCxTbi55LGQrWWUpfWZvcihsZXQgaHQ9MCxzbj1ULmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249VFtodF07RmU9TWVbaHRdO2ZvcihsZXQgb2k9MCxVaT1Tbi5sZW5ndGg7b2k8VWk7b2krKyl7bGV0IHppPXllKFNuW29pXSxGZVtvaV0seHQpO0E/RXQoemkueCx6aS55K0lbdS0xXS55LElbdS0xXS54K1llKTpFdCh6aS54LHppLnksZCtZZSl9fX1mdW5jdGlvbiBBbihpZSxjdCl7bGV0IFllPWllLmxlbmd0aDtmb3IoOy0tWWU+PTA7KXtsZXQgeHQ9WWUsaHQ9WWUtMTtodDwwJiYoaHQ9aWUubGVuZ3RoLTEpO2ZvcihsZXQgc249MCxTbj11KzIqQztzbjxTbjtzbisrKXtsZXQgb2k9SipzbixVaT1KKihzbisxKTtDZShjdCt4dCtvaSxjdCtodCtvaSxjdCtodCtVaSxjdCt4dCtVaSl9fX1mdW5jdGlvbiBFdChpZSxjdCxZZSl7bC5wdXNoKGllKSxsLnB1c2goY3QpLGwucHVzaChZZSl9ZnVuY3Rpb24gb24oaWUsY3QsWWUpe3Z0KGllKSx2dChjdCksdnQoWWUpO2xldCB4dD1yLmxlbmd0aC8zLGh0PXkuZ2VuZXJhdGVUb3BVVihpLHIseHQtMyx4dC0yLHh0LTEpO190KGh0WzBdKSxfdChodFsxXSksX3QoaHRbMl0pfWZ1bmN0aW9uIENlKGllLGN0LFllLHh0KXt2dChpZSksdnQoY3QpLHZ0KHh0KSx2dChjdCksdnQoWWUpLHZ0KHh0KTtsZXQgaHQ9ci5sZW5ndGgvMyxzbj15LmdlbmVyYXRlU2lkZVdhbGxVVihpLHIsaHQtNixodC0zLGh0LTIsaHQtMSk7X3Qoc25bMF0pLF90KHNuWzFdKSxfdChzblszXSksX3Qoc25bMV0pLF90KHNuWzJdKSxfdChzblszXSl9ZnVuY3Rpb24gdnQoaWUpe3IucHVzaChsWzMqaWUrMF0pLHIucHVzaChsWzMqaWUrMV0pLHIucHVzaChsWzMqaWUrMl0pfWZ1bmN0aW9uIF90KGllKXtvLnB1c2goaWUueCksby5wdXNoKGllLnkpfShmdW5jdGlvbigpe2xldCBpZT1yLmxlbmd0aC8zO2lmKHApe2xldCBjdD0wLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMl0rWWUsaHRbMV0rWWUsaHRbMF0rWWUpfWN0PXUrMipDLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMF0rWWUsaHRbMV0rWWUsaHRbMl0rWWUpfX1lbHNle2ZvcihsZXQgY3Q9MDtjdDxhZTtjdCsrKXtsZXQgWWU9bGVbY3RdO29uKFllWzJdLFllWzFdLFllWzBdKX1mb3IobGV0IGN0PTA7Y3Q8YWU7Y3QrKyl7bGV0IFllPWxlW2N0XTtvbihZZVswXStKKnUsWWVbMV0rSip1LFllWzJdK0oqdSl9fWkuYWRkR3JvdXAoaWUsci5sZW5ndGgvMy1pZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgaWU9ci5sZW5ndGgvMyxjdD0wO0FuKGhlLGN0KSxjdCs9aGUubGVuZ3RoO2ZvcihsZXQgWWU9MCx4dD1ULmxlbmd0aDtZZTx4dDtZZSsrKXtsZXQgaHQ9VFtZZV07QW4oaHQsY3QpLGN0Kz1odC5sZW5ndGh9aS5hZGRHcm91cChpZSxyLmxlbmd0aC8zLWllLDEpfSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKG8sMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2lmKGUuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBpPTAscj1uLmxlbmd0aDtpPHI7aSsrKWUuc2hhcGVzLnB1c2gobltpXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdm9pZCAwIT09dC5leHRydWRlUGF0aCYmKGUub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxlfSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgbz0wLHM9dC5zaGFwZXMubGVuZ3RoO288cztvKyspaS5wdXNoKGVbdC5zaGFwZXNbb11dKTtsZXQgcj10Lm9wdGlvbnMuZXh0cnVkZVBhdGg7cmV0dXJuIHZvaWQgMCE9PXImJih0Lm9wdGlvbnMuZXh0cnVkZVBhdGg9KG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpLG5ldyBPaChpLHQub3B0aW9ucyl9fSxSOGU9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgYT10WzMqaV0sbD10WzMqaSsxXSxjPXRbMypyXSx1PXRbMypyKzFdO3JldHVybltuZXcgSmUodFszKmVdLHRbMyplKzFdKSxuZXcgSmUoYSxsKSxuZXcgSmUoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9dFszKmVdLGE9dFszKmUrMV0sbD10WzMqZSsyXSxjPXRbMyppXSx1PXRbMyppKzFdLGQ9dFszKmkrMl0scD10WzMqcl0saD10WzMqcisxXSxmPXRbMypyKzJdLG09dFszKm9dLEM9dFszKm8rMV0sXz10WzMqbysyXTtyZXR1cm4gTWF0aC5hYnMoYS11KTxNYXRoLmFicyhzLWMpP1tuZXcgSmUocywxLWwpLG5ldyBKZShjLDEtZCksbmV3IEplKHAsMS1mKSxuZXcgSmUobSwxLV8pXTpbbmV3IEplKGEsMS1sKSxuZXcgSmUodSwxLWQpLG5ldyBKZShoLDEtZiksbmV3IEplKEMsMS1fKV19fSx0Zz1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9bmV3IEdkKFtuZXcgSmUoMCwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtsZXQgaT1bXSxyPVtdLG89W10scz1bXSxhPTAsbD0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSljKHQpO2Vsc2UgZm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspYyh0W3VdKSx0aGlzLmFkZEdyb3VwKGEsbCx1KSxhKz1sLGw9MDtmdW5jdGlvbiBjKHUpe2xldCBkPXIubGVuZ3RoLzMscD11LmV4dHJhY3RQb2ludHMoZSksaD1wLnNoYXBlLGY9cC5ob2xlczshMT09PXp1LmlzQ2xvY2tXaXNlKGgpJiYoaD1oLnJldmVyc2UoKSk7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKXtsZXQgeT1mW0NdOyEwPT09enUuaXNDbG9ja1dpc2UoeSkmJihmW0NdPXkucmV2ZXJzZSgpKX1sZXQgbT16dS50cmlhbmd1bGF0ZVNoYXBlKGgsZik7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKWg9aC5jb25jYXQoZltDXSk7Zm9yKGxldCBDPTAsXz1oLmxlbmd0aDtDPF87QysrKXtsZXQgeT1oW0NdO3IucHVzaCh5LngseS55LDApLG8ucHVzaCgwLDAsMSkscy5wdXNoKHkueCx5LnkpfWZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl7bGV0IHk9bVtDXTtpLnB1c2goeVswXStkLHlbMV0rZCx5WzJdK2QpLGwrPTN9fXRoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKHMsMikpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXQuc2hhcGVzLnB1c2gobltlXS51dWlkKTtlbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxvPXQuc2hhcGVzLmxlbmd0aDtyPG87cisrKWkucHVzaChlW3Quc2hhcGVzW3JdXSk7cmV0dXJuIG5ldyB0ZyhpLHQuY3VydmVTZWdtZW50cyl9fTsoY2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319KS5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgTzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtPMi5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIE8ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMuaW9yPTEuNSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmVmbGVjdGl2aXR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9hKDIuNSoodGhpcy5pb3ItMSkvKHRoaXMuaW9yKzEpLDAsMSl9LHNldDpmdW5jdGlvbihlKXt0aGlzLmlvcj0oMSsuNCplKS8oMS0uNCplKX19KSx0aGlzLnNoZWVuQ29sb3I9bmV3IGFuKDApLHRoaXMuc2hlZW5Db2xvck1hcD1udWxsLHRoaXMuc2hlZW5Sb3VnaG5lc3M9MSx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPW51bGwsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnRoaWNrbmVzcz0wLHRoaXMudGhpY2tuZXNzTWFwPW51bGwsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPTAsdGhpcy5hdHRlbnVhdGlvbkNvbG9yPW5ldyBhbigxLDEsMSksdGhpcy5zcGVjdWxhckludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bnVsbCx0aGlzLnNwZWN1bGFyQ29sb3I9bmV3IGFuKDEsMSwxKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9bnVsbCx0aGlzLl9zaGVlbj0wLHRoaXMuX2NsZWFyY29hdD0wLHRoaXMuX3RyYW5zbWlzc2lvbj0wLHRoaXMuc2V0VmFsdWVzKHQpfWdldCBzaGVlbigpe3JldHVybiB0aGlzLl9zaGVlbn1zZXQgc2hlZW4odCl7dGhpcy5fc2hlZW4+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9zaGVlbj10fWdldCBjbGVhcmNvYXQoKXtyZXR1cm4gdGhpcy5fY2xlYXJjb2F0fXNldCBjbGVhcmNvYXQodCl7dGhpcy5fY2xlYXJjb2F0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fY2xlYXJjb2F0PXR9Z2V0IHRyYW5zbWlzc2lvbigpe3JldHVybiB0aGlzLl90cmFuc21pc3Npb259c2V0IHRyYW5zbWlzc2lvbih0KXt0aGlzLl90cmFuc21pc3Npb24+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl90cmFuc21pc3Npb249dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLmlvcj10Lmlvcix0aGlzLnNoZWVuPXQuc2hlZW4sdGhpcy5zaGVlbkNvbG9yLmNvcHkodC5zaGVlbkNvbG9yKSx0aGlzLnNoZWVuQ29sb3JNYXA9dC5zaGVlbkNvbG9yTWFwLHRoaXMuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPXQuc2hlZW5Sb3VnaG5lc3NNYXAsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpcy50aGlja25lc3M9dC50aGlja25lc3MsdGhpcy50aGlja25lc3NNYXA9dC50aGlja25lc3NNYXAsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPXQuYXR0ZW51YXRpb25EaXN0YW5jZSx0aGlzLmF0dGVudWF0aW9uQ29sb3IuY29weSh0LmF0dGVudWF0aW9uQ29sb3IpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPXQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsdGhpcy5zcGVjdWxhckNvbG9yLmNvcHkodC5zcGVjdWxhckNvbG9yKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9dC5zcGVjdWxhckNvbG9yTWFwLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGFuKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgTnI9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBOci5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LHZvaWQgMCE9PWU/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246Im51bWJlciI9PXR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2xldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydChmdW5jdGlvbihyLG8pe3JldHVybiBuW3JdLW5bb119KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IG89MCxzPTA7cyE9PWk7KytvKXtsZXQgYT1lW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbcysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEsbz1uWzBdO2Zvcig7dm9pZCAwIT09byYmdm9pZCAwPT09b1tpXTspbz1uW3IrK107aWYodm9pZCAwPT09bylyZXR1cm47bGV0IHM9b1tpXTtpZih2b2lkIDAhPT1zKWlmKEFycmF5LmlzQXJyYXkocykpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2guYXBwbHkoZSxzKSksbz1uW3IrK119d2hpbGUodm9pZCAwIT09byk7ZWxzZSBpZih2b2lkIDAhPT1zLnRvQXJyYXkpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxzLnRvQXJyYXkoZSxlLmxlbmd0aCkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2gocykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IG89bi5jbG9uZSgpO28ubmFtZT10O2xldCBzPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGQ9W10scD1bXTtmb3IobGV0IGg9MDtoPGMudGltZXMubGVuZ3RoOysraCl7bGV0IGY9Yy50aW1lc1toXSpyO2lmKCEoZjxlfHxmPj1pKSl7ZC5wdXNoKGMudGltZXNbaF0pO2ZvcihsZXQgbT0wO208dTsrK20pcC5wdXNoKGMudmFsdWVzW2gqdSttXSl9fTAhPT1kLmxlbmd0aCYmKGMudGltZXM9TnIuY29udmVydEFycmF5KGQsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9TnIuY29udmVydEFycmF5KHAsYy52YWx1ZXMuY29uc3RydWN0b3IpLHMucHVzaChjKSl9by50cmFja3M9cztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKWE+by50cmFja3NbbF0udGltZXNbMF0mJihhPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgsbz10L2k7Zm9yKGxldCBzPTA7czxyOysrcyl7bGV0IGE9ZS50cmFja3Nbc10sbD1hLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09bHx8InN0cmluZyI9PT1sKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24oXyl7cmV0dXJuIF8ubmFtZT09PWEubmFtZSYmXy5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKHZvaWQgMD09PWMpY29udGludWU7bGV0IHU9MCxkPWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9ZC8zKTtsZXQgcD0wLGg9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYocD1oLzMpO2xldCBtLGY9YS50aW1lcy5sZW5ndGgtMTtpZihvPD1hLnRpbWVzWzBdKW09TnIuYXJyYXlTbGljZShhLnZhbHVlcyx1LGQtdSk7ZWxzZSBpZihvPj1hLnRpbWVzW2ZdKXtsZXQgXz1mKmQrdTttPU5yLmFycmF5U2xpY2UoYS52YWx1ZXMsXyxfK2QtdSl9ZWxzZXtsZXQgXz1hLmNyZWF0ZUludGVycG9sYW50KCkseT11LEk9ZC11O18uZXZhbHVhdGUobyksbT1Oci5hcnJheVNsaWNlKF8ucmVzdWx0QnVmZmVyLHksSSl9InF1YXRlcm5pb24iPT09bCYmKG5ldyBDcykuZnJvbUFycmF5KG0pLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkobSk7bGV0IEM9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBfPTA7XzxDOysrXyl7bGV0IHk9XypoK3A7aWYoInF1YXRlcm5pb24iPT09bClDcy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyx5LG0sMCxjLnZhbHVlcyx5KTtlbHNle2xldCBJPWgtMipwO2ZvcihsZXQgQT0wO0E8STsrK0EpYy52YWx1ZXNbeStBXS09bVtBXX19fXJldHVybiBuLmJsZW5kTW9kZT0yNTAxLG59fSxqdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9dm9pZCAwIT09cj9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLG89ZVtpLTFdO2U6e3Q6e2xldCBzO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHZvaWQgMD09PXIpe2lmKHQ8bylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQsbyl9aWYoaT09PWEpYnJlYWs7aWYobz1yLHI9ZVsrK2ldLHQ8cilicmVhayB0fXM9ZS5sZW5ndGg7YnJlYWsgbn1pZih0Pj1vKWJyZWFrIGU7e2xldCBhPWVbMV07dDxhJiYoaT0yLG89YSk7Zm9yKGxldCBsPWktMjs7KXtpZih2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihpPT09bClicmVhaztpZihyPW8sbz1lWy0taS0xXSx0Pj1vKWJyZWFrIHR9cz1pLGk9MH19Zm9yKDtpPHM7KXtsZXQgYT1pK3M+Pj4xO3Q8ZVthXT9zPWE6aT1hKzF9aWYocj1lW2ldLG89ZVtpLTFdLHZvaWQgMD09PW8pcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKHZvaWQgMD09PXIpcmV0dXJuIGk9ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmFmdGVyRW5kXyhpLTEsbyx0KX10aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhpLG8scil9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKGksbyx0LHIpfWdldFNldHRpbmdzXygpe3JldHVybiB0aGlzLnNldHRpbmdzfHx0aGlzLkRlZmF1bHRTZXR0aW5nc199Y29weVNhbXBsZVZhbHVlXyh0KXtsZXQgZT10aGlzLnJlc3VsdEJ1ZmZlcixpPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUsbz10KnI7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWVbc109aVtvK3NdO3JldHVybiBlfWludGVycG9sYXRlXygpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX1pbnRlcnZhbENoYW5nZWRfKCl7fX07anUucHJvdG90eXBlLmJlZm9yZVN0YXJ0Xz1qdS5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXyxqdS5wcm90b3R5cGUuYWZ0ZXJFbmRfPWp1LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3ZhciBlej1jbGFzcyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpLHRoaXMuX3dlaWdodFByZXY9LTAsdGhpcy5fb2Zmc2V0UHJldj0tMCx0aGlzLl93ZWlnaHROZXh0PS0wLHRoaXMuX29mZnNldE5leHQ9LTAsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXtlbmRpbmdTdGFydDpheSxlbmRpbmdFbmQ6YXl9fWludGVydmFsQ2hhbmdlZF8odCxlLGkpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG89dC0yLHM9dCsxLGE9cltvXSxsPXJbc107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBseTpvPXQsYT0yKmUtaTticmVhaztjYXNlIDI0MDI6bz1yLmxlbmd0aC0yLGE9ZStyW29dLXJbbysxXTticmVhaztkZWZhdWx0Om89dCxhPWl9aWYodm9pZCAwPT09bClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgbHk6cz10LGw9MippLWU7YnJlYWs7Y2FzZSAyNDAyOnM9MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6cz10LTEsbD1lfWxldCBjPS41KihpLWUpLHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PXMqdX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIscz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLHU9dGhpcy5fb2Zmc2V0UHJldixkPXRoaXMuX29mZnNldE5leHQscD10aGlzLl93ZWlnaHRQcmV2LGg9dGhpcy5fd2VpZ2h0TmV4dCxmPShpLWUpLyhyLWUpLG09ZipmLEM9bSpmLF89LXAqQysyKnAqbS1wKmYseT0oMStwKSpDKygtMS41LTIqcCkqbSsoLS41K3ApKmYrMSxJPSgtMS1oKSpDKygxLjUraCkqbSsuNSpmLEE9aCpDLWgqbTtmb3IobGV0IE89MDtPIT09YTsrK08pb1tPXT1fKnNbdStPXSt5KnNbYytPXStJKnNbbCtPXStBKnNbZCtPXTtyZXR1cm4gb319LGsyPWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PShpLWUpLyhyLWUpLGQ9MS11O2ZvcihsZXQgcD0wO3AhPT1hOysrcClvW3BdPXNbYytwXSpkK3NbbCtwXSp1O3JldHVybiBvfX0sdHo9Y2xhc3MgZXh0ZW5kcyBqdXtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Oci5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Oci5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGksZT10LmNvbnN0cnVjdG9yO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOk5yLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6TnIuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IHR6KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBrMih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgZXoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMjMwMDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7aWYodD09PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiIsaSksdGhpc31yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGFudD1lLHRoaXN9Z2V0SW50ZXJwb2xhdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIDIzMDA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gMjMwMTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiAyMzAyfX1nZXRWYWx1ZVNpemUoKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoL3RoaXMudGltZXMubGVuZ3RofXNoaWZ0KHQpe2lmKDAhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0rPXR9cmV0dXJuIHRoaXN9c2NhbGUodCl7aWYoMSE9PXQpe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7bGV0IGk9dGhpcy50aW1lcyxyPWkubGVuZ3RoLG89MCxzPXItMTtmb3IoO28hPT1yJiZpW29dPHQ7KSsrbztmb3IoOy0xIT09cyYmaVtzXT5lOyktLXM7aWYoKytzLDAhPT1vfHxzIT09cil7bz49cyYmKHM9TWF0aC5tYXgocywxKSxvPXMtMSk7bGV0IGE9dGhpcy5nZXRWYWx1ZVNpemUoKTt0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UoaSxvLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsbyphLHMqYSl9cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMCxlPXRoaXMuZ2V0VmFsdWVTaXplKCk7ZS1NYXRoLmZsb29yKGUpIT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLG89aS5sZW5ndGg7MD09PW8mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBzPW51bGw7Zm9yKGxldCBhPTA7YSE9PW87YSsrKXtsZXQgbD1pW2FdO2lmKCJudW1iZXIiPT10eXBlb2YgbCYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobnVsbCE9PXMmJnM+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxzKSx0PSExO2JyZWFrfXM9bH1pZih2b2lkIDAhPT1yJiZOci5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1Oci5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj0yMzAyPT09dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCksbz10Lmxlbmd0aC0xLHM9MTtmb3IobGV0IGE9MTthPG87KythKXtsZXQgbD0hMSxjPXRbYV07aWYoYyE9PXRbYSsxXSYmKDEhPT1hfHxjIT09dFswXSkpaWYocilsPSEwO2Vsc2V7bGV0IGQ9YSppLHA9ZC1pLGg9ZCtpO2ZvcihsZXQgZj0wO2YhPT1pOysrZil7bGV0IG09ZVtkK2ZdO2lmKG0hPT1lW3ArZl18fG0hPT1lW2grZl0pe2w9ITA7YnJlYWt9fX1pZihsKXtpZihhIT09cyl7dFtzXT10W2FdO2xldCBkPWEqaSxwPXMqaTtmb3IobGV0IGg9MDtoIT09aTsrK2gpZVtwK2hdPWVbZCtoXX0rK3N9fWlmKG8+MCl7dFtzXT10W29dO2ZvcihsZXQgYT1vKmksbD1zKmksYz0wO2MhPT1pOysrYyllW2wrY109ZVthK2NdOysrc31yZXR1cm4gcyE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UodCwwLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UoZSwwLHMqaSkpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc31jbG9uZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcywwKSxlPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCkscj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtGbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxO3ZhciBraD1jbGFzcyBleHRlbmRzIEZse307a2gucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiLGtoLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksa2gucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEYyPWNsYXNzIGV4dGVuZHMgRmx7fTtGMi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO3ZhciBNeT1jbGFzcyBleHRlbmRzIEZse307TXkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9Im51bWJlciI7dmFyIG56PWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPShpLWUpLyhyLWUpLGM9dCphO2ZvcihsZXQgdT1jK2E7YyE9PXU7Yys9NClDcy5zbGVycEZsYXQobywwLHMsYy1hLHMsYyxsKTtyZXR1cm4gb319LG5nPWNsYXNzIGV4dGVuZHMgRmx7SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgbnoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfX07bmcucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InF1YXRlcm5pb24iLG5nLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxLG5nLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBGaD1jbGFzcyBleHRlbmRzIEZse307RmgucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyIsRmgucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheSxGaC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgU3k9Y2xhc3MgZXh0ZW5kcyBGbHt9O1N5LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBOMj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPTI1MDApe3RoaXMubmFtZT10LHRoaXMudHJhY2tzPWksdGhpcy5kdXJhdGlvbj1lLHRoaXMuYmxlbmRNb2RlPXIsdGhpcy51dWlkPUZjKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7bGV0IGU9W10saT10LnRyYWNrcyxyPTEvKHQuZnBzfHwxKTtmb3IobGV0IHM9MCxhPWkubGVuZ3RoO3MhPT1hOysrcyllLnB1c2goTjhlKGlbc10pLnNjYWxlKHIpKTtsZXQgbz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gby51dWlkPXQudXVpZCxvfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBvPTAscz1pLmxlbmd0aDtvIT09czsrK28pZS5wdXNoKEZsLnRvSlNPTihpW29dKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBvPWUubGVuZ3RoLHM9W107Zm9yKGxldCBhPTA7YTxvO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErby0xKSVvLGEsKGErMSklbyksYy5wdXNoKDAsMSwwKTtsZXQgdT1Oci5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9TnIuc29ydGVkQXJyYXkobCwxLHUpLGM9TnIuc29ydGVkQXJyYXkoYywxLHUpLCFyJiYwPT09bFswXSYmKGwucHVzaChvKSxjLnB1c2goY1swXSkpLHMucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEscyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtsZXQgcj10O2k9ci5nZW9tZXRyeSYmci5nZW9tZXRyeS5hbmltYXRpb25zfHxyLmFuaW1hdGlvbnN9Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LG89L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXtsZXQgYz10W2FdLHU9Yy5uYW1lLm1hdGNoKG8pO2lmKHUmJnUubGVuZ3RoPjEpe2xldCBkPXVbMV0scD1yW2RdO3B8fChyW2RdPXA9W10pLHAucHVzaChjKX19bGV0IHM9W107Zm9yKGxldCBhIGluIHIpcy5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoYSxyW2FdLGUsaSkpO3JldHVybiBzfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24oZCxwLGgsZixtKXtpZigwIT09aC5sZW5ndGgpe2xldCBDPVtdLF89W107TnIuZmxhdHRlbkpTT04oaCxDLF8sZiksMCE9PUMubGVuZ3RoJiZtLnB1c2gobmV3IGQocCxDLF8pKX19LHI9W10sbz10Lm5hbWV8fCJkZWZhdWx0IixzPXQuZnBzfHwzMCxhPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgcD1jW2RdLmtleXM7aWYocCYmMCE9PXAubGVuZ3RoKWlmKHBbMF0ubW9ycGhUYXJnZXRzKXtsZXQgZixoPXt9O2ZvcihmPTA7ZjxwLmxlbmd0aDtmKyspaWYocFtmXS5tb3JwaFRhcmdldHMpZm9yKGxldCBtPTA7bTxwW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7bSsrKWhbcFtmXS5tb3JwaFRhcmdldHNbbV1dPS0xO2ZvcihsZXQgbSBpbiBoKXtsZXQgQz1bXSxfPVtdO2ZvcihsZXQgeT0wO3khPT1wW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt5KXtsZXQgST1wW2ZdO0MucHVzaChJLnRpbWUpLF8ucHVzaChJLm1vcnBoVGFyZ2V0PT09bT8xOjApfXIucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK20rIl0iLEMsXykpfWw9aC5sZW5ndGgqKHN8fDEpfWVsc2V7bGV0IGg9Ii5ib25lc1siK2VbZF0ubmFtZSsiXSI7aShTeSxoKyIucG9zaXRpb24iLHAsInBvcyIsciksaShuZyxoKyIucXVhdGVybmlvbiIscCwicm90IixyKSxpKFN5LGgrIi5zY2FsZSIscCwic2NsIixyKX19cmV0dXJuIDA9PT1yLmxlbmd0aD9udWxsOm5ldyB0aGlzKG8sbCxyLGEpfXJlc2V0RHVyYXRpb24oKXtsZXQgZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy50cmFja3MubGVuZ3RoO2khPT1yOysraSl7bGV0IG89dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIE44ZShuKXtpZih2b2lkIDA9PT1uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO2xldCB0PWZ1bmN0aW9uKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIE15O2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gU3k7Y2FzZSJjb2xvciI6cmV0dXJuIEYyO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIG5nO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4ga2g7Y2FzZSJzdHJpbmciOnJldHVybiBGaH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfShuLnR5cGUpO2lmKHZvaWQgMD09PW4udGltZXMpe2xldCBlPVtdLGk9W107TnIuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdm9pZCAwIT09dC5wYXJzZT90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIEV5PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEw4ZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCBsLHI9dGhpcyxvPSExLHM9MCxhPTAsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPWUsdGhpcy5vbkVycm9yPWksdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24odSl7YSsrLCExPT09byYmdm9pZCAwIT09ci5vblN0YXJ0JiZyLm9uU3RhcnQodSxzLGEpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbih1KXtzKyssdm9pZCAwIT09ci5vblByb2dyZXNzJiZyLm9uUHJvZ3Jlc3ModSxzLGEpLHM9PT1hJiYobz0hMSx2b2lkIDAhPT1yLm9uTG9hZCYmci5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKHUpe3ZvaWQgMCE9PXIub25FcnJvciYmci5vbkVycm9yKHUpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24odSl7cmV0dXJuIGw/bCh1KTp1fSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKHUpe3JldHVybiBsPXUsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKHUsZCl7cmV0dXJuIGMucHVzaCh1LGQpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbih1KXtsZXQgZD1jLmluZGV4T2YodSk7cmV0dXJuLTEhPT1kJiZjLnNwbGljZShkLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGQ9MCxwPWMubGVuZ3RoO2Q8cDtkKz0yKXtsZXQgaD1jW2RdLGY9Y1tkKzFdO2lmKGguZ2xvYmFsJiYoaC5sYXN0SW5kZXg9MCksaC50ZXN0KHUpKXJldHVybiBmfXJldHVybiBudWxsfX19LEd1PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6TDhlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7aS5sb2FkKHQscixlLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LFZkPXt9LHJ6PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz1FeS5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZih2b2lkIDAhPT1WZFt0XSlyZXR1cm4gdm9pZCBWZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7VmRbdF09W10sVmRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO2xldCBzPW5ldyBSZXF1ZXN0KHQse2hlYWRlcnM6bmV3IEhlYWRlcnModGhpcy5yZXF1ZXN0SGVhZGVyKSxjcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscz8iaW5jbHVkZSI6InNhbWUtb3JpZ2luIn0pLGE9dGhpcy5taW1lVHlwZSxsPXRoaXMucmVzcG9uc2VUeXBlO2ZldGNoKHMpLnRoZW4oYz0+e2lmKDIwMD09PWMuc3RhdHVzfHwwPT09Yy5zdGF0dXMpe2lmKDA9PT1jLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHR5cGVvZiBSZWFkYWJsZVN0cmVhbT4idSJ8fHZvaWQgMD09PWMuYm9keS5nZXRSZWFkZXIpcmV0dXJuIGM7bGV0IHU9VmRbdF0sZD1jLmJvZHkuZ2V0UmVhZGVyKCkscD1jLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpLGg9cD9wYXJzZUludChwKTowLGY9MCE9PWgsbT0wLEM9bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydChfKXshZnVuY3Rpb24geSgpe2QucmVhZCgpLnRoZW4oKHtkb25lOkksdmFsdWU6QX0pPT57aWYoSSlfLmNsb3NlKCk7ZWxzZXttKz1BLmJ5dGVMZW5ndGg7bGV0IE89bmV3IFByb2dyZXNzRXZlbnQoInByb2dyZXNzIix7bGVuZ3RoQ29tcHV0YWJsZTpmLGxvYWRlZDptLHRvdGFsOmh9KTtmb3IobGV0IGVlPTAsWD11Lmxlbmd0aDtlZTxYO2VlKyspe2xldCB4ZT11W2VlXTt4ZS5vblByb2dyZXNzJiZ4ZS5vblByb2dyZXNzKE8pfV8uZW5xdWV1ZShBKSx5KCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZShDKX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PWEpcmV0dXJuIGMudGV4dCgpO3tsZXQgZD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSkscD1kJiZkWzFdP2RbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsaD1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGY9PmguZGVjb2RlKGYpKX19fSkudGhlbihjPT57RXkuYWRkKHQsYyk7bGV0IHU9VmRbdF07ZGVsZXRlIFZkW3RdO2ZvcihsZXQgZD0wLHA9dS5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9dVtkXTtoLm9uTG9hZCYmaC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVZkW3RdO2lmKHZvaWQgMD09PXUpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBWZFt0XTtmb3IobGV0IGQ9MCxwPXUubGVuZ3RoO2Q8cDtkKyspe2xldCBoPXVbZF07aC5vbkVycm9yJiZoLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sTDI9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPVNNKCJpbWciKTtmdW5jdGlvbiBsKCl7dSgpLEV5LmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyhkKXt1KCksciYmcihkKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIHUoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoYS5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLGEuc3JjPXQsYX19LG96PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgX3kscz1uZXcgTDIodGhpcy5tYW5hZ2VyKTtzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBhPTA7ZnVuY3Rpb24gbChjKXtzLmxvYWQodFtjXSxmdW5jdGlvbih1KXtvLmltYWdlc1tjXT11LGErKyw2PT09YSYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sc3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBibyxzPW5ldyBMMih0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMubG9hZCh0LGZ1bmN0aW9uKGEpe28uaW1hZ2U9YSxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LE5sPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O05sLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgYW4oZSl9Y29weSh0KXtyZXR1cm4gTmwucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBpbGU9bmV3IE1uLHJsZT1uZXcgJCxvbGU9bmV3ICQsR009Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEplKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHZ5LHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSmUoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgdHIoMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeDtybGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShybGUpLG9sZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLGUubG9va0F0KG9sZSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLGlsZS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChpbGUpLGkuc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLGkubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KSxpLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIDAhPT10aGlzLmJpYXMmJih0LmJpYXM9dGhpcy5iaWFzKSwwIT09dGhpcy5ub3JtYWxCaWFzJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksMSE9PXRoaXMucmFkaXVzJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCg1MTIhPT10aGlzLm1hcFNpemUueHx8NTEyIT09dGhpcy5tYXBTaXplLnkpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LEIyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT0yKndVKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LG89dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxvIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPW8sZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtCMi5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBObHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLG89MCxzPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9cyx0aGlzLnNoYWRvdz1uZXcgQjJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBzbGU9bmV3IE1uLG1NPW5ldyAkLG1VPW5ldyAkLFYyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEplKDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IHRyKDIsMSwxLDEpLG5ldyB0cigwLDEsMSwxKSxuZXcgdHIoMywxLDEsMSksbmV3IHRyKDEsMSwxLDEpLG5ldyB0cigzLDAsMSwxKSxuZXcgdHIoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgJCgxLDAsMCksbmV3ICQoLTEsMCwwKSxuZXcgJCgwLDAsMSksbmV3ICQoMCwwLC0xKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3ICQoMCwxLDApLG5ldyAkKDAsMSwwKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwxLDApLG5ldyAkKDAsMCwxKSxuZXcgJCgwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7bGV0IGk9dGhpcy5jYW1lcmEscj10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fGkuZmFyO28hPT1pLmZhciYmKGkuZmFyPW8saS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLG1NLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxpLnBvc2l0aW9uLmNvcHkobU0pLG1VLmNvcHkoaS5wb3NpdGlvbiksbVUuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxpLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksaS5sb29rQXQobVUpLGkudXBkYXRlTWF0cml4V29ybGQoKSxyLm1ha2VUcmFuc2xhdGlvbigtbU0ueCwtbU0ueSwtbU0ueiksc2xlLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHNsZSl9fTtWMi5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBWMn1nZXQgcG93ZXIoKXtyZXR1cm4gNCp0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIEgyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgSm0oLTUsNSw1LC01LC41LDUwMCkpfX07SDIucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuc2hhZG93PW5ldyBIMn1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIFUyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyAkKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzJdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0saSpyKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLHIqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s2XSwuMzE1MzkyKigzKm8qby0xKSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSxpKm8qMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShzWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihzWzFdLDEuMDIzMzI4KnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sMS4wMjMzMjgqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwxLjAyMzMyOCppKSxlLmFkZFNjYWxlZFZlY3RvcihzWzRdLC44NTgwODYqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLC44NTgwODYqcipvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbN10sLjg1ODA4NippKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0uZnJvbUFycmF5KHQsZSszKnIpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS50b0FycmF5KHQsZSszKnIpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqcixlWzJdPS40ODg2MDMqbyxlWzNdPS40ODg2MDMqaSxlWzRdPTEuMDkyNTQ4KmkqcixlWzVdPTEuMDkyNTQ4KnIqbyxlWzZdPS4zMTUzOTIqKDMqbypvLTEpLGVbN109MS4wOTI1NDgqaSpvLGVbOF09LjU0NjI3NCooaSppLXIqcil9fTtVMi5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciBXTT1jbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQ9bmV3IFUyLGU9MSl7c3VwZXIodm9pZCAwLGUpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLGV9fTtXTS5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBoej1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8IiI9PT10PyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChlKSYmL15cLy8udGVzdCh0KSYmKGU9ZS5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDplK3QpfX07KGNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLGNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD4idSImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPXt9O2EuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLGEuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxhKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7RXkuYWRkKHQsbCksZSYmZShsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe3ImJnIobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgYzIsZ3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPXRoaXMscz1uZXcgcnoodGhpcy5tYW5hZ2VyKTtzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscykscy5sb2FkKHQsZnVuY3Rpb24oYSl7dHJ5e2xldCBsPWEuc2xpY2UoMCk7KHZvaWQgMD09PWMyJiYoYzI9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxjMikuZGVjb2RlQXVkaW9EYXRhKGwsZnVuY3Rpb24odSl7ZSh1KX0pfWNhdGNoKGwpe3I/cihsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxpLHIpfX07KGNsYXNzIGV4dGVuZHMgV017Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPShuZXcgYW4pLnNldCh0KSxvPShuZXcgYW4pLnNldChlKSxzPW5ldyAkKHIucixyLmcsci5iKSxhPW5ldyAkKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShzKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShzKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIoYyl9fSkucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITAsY2xhc3MgZXh0ZW5kcyBXTXtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPShuZXcgYW4pLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB4ej1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHIsbyxzO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pLGUpe2Nhc2UicXVhdGVybmlvbiI6cj10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqaSksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6cj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3Qscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqaSk7YnJlYWs7ZGVmYXVsdDpyPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqaSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPXIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1zLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxlKXtsZXQgaT10aGlzLmJ1ZmZlcixyPXRoaXMudmFsdWVTaXplLG89dCpyK3Iscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PXMpe2ZvcihsZXQgYT0wO2EhPT1yOysrYSlpW28rYV09aVthXTtzPWV9ZWxzZSBzKz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLG8sMCxlL3Mscik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PXN9YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4OzA9PT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLGE9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsbzwxJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGUqdGhpcy5fb3JpZ0luZGV4LDEtbyxlKSxzPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGUscik7Zm9yKGxldCBvPWkscz1yO28hPT1zOysrbyllW29dPWVbcitvJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixvKXtpZihyPj0uNSlmb3IobGV0IHM9MDtzIT09bzsrK3MpdFtlK3NdPXRbaStzXX1fc2xlcnAodCxlLGkscil7Q3Muc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fd29ya0luZGV4Km87Q3MubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxzLHQsZSx0LGkpLENzLnNsZXJwRmxhdCh0LGUsdCxlLHQscyxyKX1fbGVycCh0LGUsaSxyLG8pe2xldCBzPTEtcjtmb3IobGV0IGE9MDthIT09bzsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qcyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2ZvcihsZXQgcz0wO3MhPT1vOysrcyl7bGV0IGE9ZStzO3RbYV09dFthXSt0W2krc10qcn19fSxOej0iXFxbXFxdXFwuOlxcLyIsVjhlPW5ldyBSZWdFeHAoIlsiK056KyJdIiwiZyIpLEx6PSJbXiIrTnorIl0iLEg4ZT0iW14iK056LnJlcGxhY2UoIlxcLiIsIiIpKyJdIixVOGU9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixMeiksejhlPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLEg4ZSksajhlPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxHOGU9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxXOGU9bmV3IFJlZ0V4cCgiXiIrVThlK3o4ZStqOGUrRzhlKyIkIikscThlPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLEN6PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj1pfHxFci5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLHIpfWdldFZhbHVlKHQsZSl7dGhpcy5iaW5kKCk7bGV0IHI9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1yJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG89aS5sZW5ndGg7ciE9PW87KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxFcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnBhdGg9aSx0aGlzLnBhcnNlZFBhdGg9cnx8bi5wYXJzZVRyYWNrTmFtZShpKSx0aGlzLm5vZGU9bi5maW5kTm9kZShlLHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fGUsdGhpcy5yb290Tm9kZT1lLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZShlLGkscil7cmV0dXJuIGUmJmUuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgbi5Db21wb3NpdGUoZSxpLHIpOm5ldyBuKGUsaSxyKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShWOGUsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZShlKXtsZXQgaT1XOGUuZXhlYyhlKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitlKTtsZXQgcj17bm9kZU5hbWU6aVsyXSxvYmplY3ROYW1lOmlbM10sb2JqZWN0SW5kZXg6aVs0XSxwcm9wZXJ0eU5hbWU6aVs1XSxwcm9wZXJ0eUluZGV4OmlbNl19LG89ci5ub2RlTmFtZSYmci5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PW8mJi0xIT09byl7bGV0IHM9ci5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PXE4ZS5pbmRleE9mKHMpJiYoci5ub2RlTmFtZT1yLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLHIub2JqZWN0TmFtZT1zKX1pZihudWxsPT09ci5wcm9wZXJ0eU5hbWV8fDA9PT1yLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2UpO3JldHVybiByfXN0YXRpYyBmaW5kTm9kZShlLGkpe2lmKCFpfHwiIj09PWl8fCIuIj09PWl8fC0xPT09aXx8aT09PWUubmFtZXx8aT09PWUudXVpZClyZXR1cm4gZTtpZihlLnNrZWxldG9uKXtsZXQgcj1lLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoaSk7aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihlLmNoaWxkcmVuKXtsZXQgcj1mdW5jdGlvbihzKXtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErKyl7bGV0IGw9c1thXTtpZihsLm5hbWU9PT1pfHxsLnV1aWQ9PT1pKXJldHVybiBsO2xldCBjPXIobC5jaGlsZHJlbik7aWYoYylyZXR1cm4gY31yZXR1cm4gbnVsbH0sbz1yKGUuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KGUsaSl7ZVtpXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKWVbaSsrXT1yW29dfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXtlW2ldPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkoZSxpKX1fc2V0VmFsdWVfZGlyZWN0KGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKGUsaSl9X3NldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKGUsaSl9YmluZCgpe2xldCBlPXRoaXMubm9kZSxpPXRoaXMucGFyc2VkUGF0aCxyPWkub2JqZWN0TmFtZSxvPWkucHJvcGVydHlOYW1lLHM9aS5wcm9wZXJ0eUluZGV4O2lmKGV8fChlPW4uZmluZE5vZGUodGhpcy5yb290Tm9kZSxpLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9ZSksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCFlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKHIpe2xldCB1PWkub2JqZWN0SW5kZXg7c3dpdGNoKHIpe2Nhc2UibWF0ZXJpYWxzIjppZighZS5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCFlLm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7ZT1lLm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighZS5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO2U9ZS5za2VsZXRvbi5ib25lcztmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylpZihlW2RdLm5hbWU9PT11KXt1PWQ7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1lW3JdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtlPWVbcl19aWYodm9pZCAwIT09dSl7aWYodm9pZCAwPT09ZVt1XSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLGUpO2U9ZVt1XX19bGV0IGE9ZVtvXTtpZih2b2lkIDA9PT1hKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIraS5ub2RlTmFtZSsiLiIrbysiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIixlKTtsZXQgbD10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD1lLHZvaWQgMCE9PWUubmVlZHNVcGRhdGU/bD10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dm9pZCAwIT09ZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlJiYobD10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGM9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYodm9pZCAwIT09cyl7aWYoIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyI9PT1vKXtpZighZS5nZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTt2b2lkIDAhPT1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSYmKHM9ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10pfWM9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEsdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSB2b2lkIDAhPT1hLmZyb21BcnJheSYmdm9pZCAwIT09YS50b0FycmF5PyhjPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOkFycmF5LmlzQXJyYXkoYSk/KGM9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6dGhpcy5wcm9wZXJ0eU5hbWU9bzt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtjXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbY11bbF19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19cmV0dXJuIG4uQ29tcG9zaXRlPUN6LG59KSgpO0VyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxFci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxFci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxFci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxFci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldLEVyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtFci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXSxjbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLG89ci5sZW5ndGgscz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt2b2lkIDA9PT11JiYodT17fSxjW2xdPXUpO2ZvcihsZXQgZD0wO2QhPT1vOysrZCl7bGV0IHA9cltkXSxoPXAubmFtZSxmPXVbaF07aWYodm9pZCAwIT09ZikrK2YucmVmZXJlbmNlQ291bnQsc1tkXT1mO2Vsc2V7aWYoZj1zW2RdLHZvaWQgMCE9PWYpe251bGw9PT1mLl9jYWNoZUluZGV4JiYoKytmLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhmLGwsaCkpO2NvbnRpbnVlfWY9bmV3IHh6KEVyLmNyZWF0ZShpLGgsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1tkXS5iaW5kaW5nLnBhcnNlZFBhdGgpLHAuVmFsdWVUeXBlTmFtZSxwLmdldFZhbHVlU2l6ZSgpKSwrK2YucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGYsbCxoKSxzW2RdPWZ9YVtkXS5yZXN1bHRCdWZmZXI9Zi5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PW8udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnVzZUNvdW50JiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1vW2VdO2lmKHZvaWQgMD09PXMpcz17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW2VdPXM7ZWxzZXtsZXQgYT1zLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PWEubGVuZ3RoLGEucHVzaCh0KX10Ll9jYWNoZUluZGV4PXIubGVuZ3RoLHIucHVzaCh0KSxzLmFjdGlvbkJ5Um9vdFtpXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9ZVtlLmxlbmd0aC0xXSxyPXQuX2NhY2hlSW5kZXg7aS5fY2FjaGVJbmRleD1yLGVbcl09aSxlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQscz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9c1tvXSxsPWEua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgYS5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PWwubGVuZ3RoJiZkZWxldGUgc1tvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz10aGlzLl9iaW5kaW5ncyxzPXJbZV07dm9pZCAwPT09cyYmKHM9e30scltlXT1zKSxzW2ldPXQsdC5fY2FjaGVJbmRleD1vLmxlbmd0aCxvLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxvPWkucGF0aCxzPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPXNbcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbb10sMD09PU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmZGVsZXRlIHNbcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgazIobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsbz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LG8uX19jYWNoZUluZGV4PWksZVtpXT1vfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qsbz1yLnV1aWQscz0ic3RyaW5nIj09dHlwZW9mIHQ/TjIuZmluZEJ5TmFtZShyLHQpOnQsYT1udWxsIT09cz9zLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKHZvaWQgMD09PWkmJihpPW51bGwhPT1zP3MuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PWwpe2xldCBkPWwuYWN0aW9uQnlSb290W29dO2lmKHZvaWQgMCE9PWQmJmQuYmxlbmRNb2RlPT09aSlyZXR1cm4gZDtjPWwua25vd25BY3Rpb25zWzBdLG51bGw9PT1zJiYocz1jLl9jbGlwKX1pZihudWxsPT09cylyZXR1cm4gbnVsbDtsZXQgdT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBvPWUudHJhY2tzLHM9by5sZW5ndGgsYT1uZXcgQXJyYXkocyksbD17ZW5kaW5nU3RhcnQ6YXksZW5kaW5nRW5kOmF5fTtmb3IobGV0IGM9MDtjIT09czsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkocyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPTIyMDEsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJjAhPT10aGlzLnRpbWVTY2FsZSYmbnVsbD09PXRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixhPXIvbzt0LndhcnAoMSxvL3IsZSksdGhpcy53YXJwKGEsMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsaSl7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaSl9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUscz10aGlzLnRpbWVTY2FsZSxhPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1hJiYoYT1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9YSk7bGV0IGw9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1hLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytpLGNbMF09dC9zLGNbMV09ZS9zLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLGkscil7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1vKXtsZXQgbD0odC1vKSppO2lmKGw8MHx8MD09PWkpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgcz10aGlzLl91cGRhdGVUaW1lKGUpLGE9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKGE+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztpZigyNTAxPT09dGhpcy5ibGVuZE1vZGUpZm9yKGxldCB1PTAsZD1sLmxlbmd0aDt1IT09ZDsrK3UpbFt1XS5ldmFsdWF0ZShzKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShhKTtlbHNlIGZvcihsZXQgdT0wLGQ9bC5sZW5ndGg7dSE9PWQ7Kyt1KWxbdV0uZXZhbHVhdGUocyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWkpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PXImJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09aSYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LHM9MjIwMj09PWk7aWYoMD09PXQpcmV0dXJuLTE9PT1vP3I6cyYmMT09KDEmbyk/ZS1yOnI7aWYoMjIwMD09PWkpey0xPT09byYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTtlOntpZihyPj1lKXI9ZTtlbHNle2lmKCEocjwwKSl7dGhpcy50aW1lPXI7YnJlYWsgZX1yPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09byYmKHQ+PTA/KG89MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLHMpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLHMpKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEsbys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1vO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1sKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLHMpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxzKTt0aGlzLl9sb29wQ291bnQ9byx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKHMmJjE9PSgxJm8pKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD1seSxyLmVuZGluZ0VuZD1seSk6KHIuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/bHk6YXk6MjQwMixyLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/bHk6YXk6MjQwMil9X3NjaGVkdWxlRmFkaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxzPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1zJiYocz1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9cyk7bGV0IGE9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1zLnNhbXBsZVZhbHVlcztyZXR1cm4gYVswXT1vLGxbMF09ZSxhWzFdPW8rdCxsWzFdPWksdGhpc319KHRoaXMscyxlLGkpO3JldHVybiB0aGlzLl9iaW5kQWN0aW9uKHUsYyksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odSxhLG8pLHV9ZXhpc3RpbmdBY3Rpb24odCxlKXtsZXQgaT1lfHx0aGlzLl9yb290LHI9aS51dWlkLG89InN0cmluZyI9PXR5cGVvZiB0P04yLmZpbmRCeU5hbWUoaSx0KTp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvP28udXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09YSYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBpPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUsbz1NYXRoLnNpZ24odCkscz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQsbyxzKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShzKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1yW2ldO2lmKHZvaWQgMCE9PW8pe2xldCBzPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9cy5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1zW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxkPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkLl9jYWNoZUluZGV4PXUsZVt1XT1kLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXS5hY3Rpb25CeVJvb3RbZV07dm9pZCAwIT09bCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihsZXQgcyBpbiBvKXtsZXQgYT1vW3NdO2EucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9fXVuY2FjaGVBY3Rpb24odCxlKXtsZXQgaT10aGlzLmV4aXN0aW5nQWN0aW9uKHQsZSk7bnVsbCE9PWkmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGkpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGkpKX19LnByb3RvdHlwZS5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcj1uZXcgRmxvYXQzMkFycmF5KDEpO3ZhciBxTT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgcU0odm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fTsoY2xhc3MgZXh0ZW5kcyAkbXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgYWxlPW5ldyBKZSxpZz1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBKZSgxLzAsMS8wKSxlPW5ldyBKZSgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9YWxlLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBhbGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O2lnLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIENoPW5ldyAkLGQyPW5ldyBNbixnVT1uZXcgTW47ZnVuY3Rpb24gUmxlKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsUmxlKG4uY2hpbGRyZW5bZV0pKTtyZXR1cm4gdH12YXIgWThlPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gQnoobix0LGUpe2lmKDE9PT1lKXJldHVybiBuZXcgYW4odCk7bGV0IGk9Q20odCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHt0fWApO3JldHVybiBuZXcgYW4oRkgoaSxuKSgxLWUpKX1uZXcgSW50MzJBcnJheShZOGUuYnVmZmVyKSx5YS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHlhLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59LEhNLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX0sY2xhc3MgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsaT00NDczOTI0LHI9ODk0Nzg0OCl7aT1uZXcgYW4oaSkscj1uZXcgYW4ocik7bGV0IG89ZS8yLHM9dC9lLGE9dC8yLGw9W10sYz1bXTtmb3IobGV0IHA9MCxoPTAsZj0tYTtwPD1lO3ArKyxmKz1zKXtsLnB1c2goLWEsMCxmLGEsMCxmKSxsLnB1c2goZiwwLC1hLGYsMCxhKTtsZXQgbT1wPT09bz9pOnI7bS50b0FycmF5KGMsaCksaCs9MyxtLnRvQXJyYXkoYyxoKSxoKz0zLG0udG9BcnJheShjLGgpLGgrPTMsbS50b0FycmF5KGMsaCksaCs9M31sZXQgdT1uZXcgS2k7dS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IobCwzKSksdS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IoYywzKSksc3VwZXIodSxuZXcgamQoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfSxjbGFzcyBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKHQpe2xldCBlPVJsZSh0KSxpPW5ldyBLaSxyPVtdLG89W10scz1uZXcgYW4oMCwwLDEpLGE9bmV3IGFuKDAsMSwwKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7bGV0IHU9ZVtjXTt1LnBhcmVudCYmdS5wYXJlbnQuaXNCb25lJiYoci5wdXNoKDAsMCwwKSxyLnB1c2goMCwwLDApLG8ucHVzaChzLnIscy5nLHMuYiksby5wdXNoKGEucixhLmcsYS5iKSl9aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IobywzKSksc3VwZXIoaSxuZXcgamQoe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSkpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtnVS5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAscz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dO2EucGFyZW50JiZhLnBhcmVudC5pc0JvbmUmJihkMi5tdWx0aXBseU1hdHJpY2VzKGdVLGEubWF0cml4V29ybGQpLENoLnNldEZyb21NYXRyaXhQb3NpdGlvbihkMiksci5zZXRYWVoocyxDaC54LENoLnksQ2gueiksZDIubXVsdGlwbHlNYXRyaWNlcyhnVSxhLnBhcmVudC5tYXRyaXhXb3JsZCksQ2guc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQyKSxyLnNldFhZWihzKzEsQ2gueCxDaC55LENoLnopLHMrPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfSxHdS5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLGh6LmV4dHJhY3RVcmxCYXNlKG4pfSxHdS5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX0saWcucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LGlnLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0saWcucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LGlnLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sSmEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LEphLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sSmEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEphLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxKYS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9LEFoLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx2eS5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX0sUG8ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sUG8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFBvLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxQby5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfSxNbi5wcm90b3R5cGUuZXh0cmFjdFBvc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKSx0aGlzLmNvcHlQb3NpdGlvbihuKX0sTW4ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sTW4ucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgJCkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxNbi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sTW4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxNbi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LE1uLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LGtjLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LENzLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LENzLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sSWgucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sS3IucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LEtyLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LEtyLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxLci5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sS3IucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LEtyLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksS3IuZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LEtyLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLEtyLmdldE5vcm1hbChuLHQsZSxpKX0sR2QucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LEdkLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBPaCh0aGlzLG4pfSxHZC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyB0Zyh0aGlzLG4pfSxKZS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sSmUucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSxKZS5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LCQucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUobil9LCQucHJvdG90eXBlLmdldENvbHVtbkZyb21NYXRyaXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCxuKX0sJC5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LCQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LCQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSwkLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sdHIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LHRyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sR2kucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0sR2kucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LEdpLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0sR2kucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxHaS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHaS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLHlvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHlvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksVDIucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4cy5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTmwucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTHIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09ZzJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShnMil9fX0pLExyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9nMjpNTSksdGhpc30sTHIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTHIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sS2kucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sS2kucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBMcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxLaS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxLaS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxLaS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxLaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LEtpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEtpLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksJG0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/ZzI6TU0pLHRoaXN9LCRtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sT2gucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE9oLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGJ5LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scU0ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWG8ucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBhbn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoemQucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxaaS5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxaaS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxaaS5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxaaS5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0sWmkucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxaaS5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LFppLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxaaS5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LFppLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxaaS5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sWmkucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFppLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP0ZyOkRofX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRWxlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2YS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IGd6KS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxETS5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxETS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0sVWQuY3Jvc3NPcmlnaW49dm9pZCAwLFVkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IHN6O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30sVWQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgb3o7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxVZC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFVkLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246IjEzNyJ9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSIxMzciKTt2YXIgTmM9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0oTmN8fChOYz17fSkpLE5jKSkoKTtmdW5jdGlvbiBrbGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBMcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBGbGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLHM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghc3x8cy5jb3VudCE9PXIpJiYocz1uZXcgTHIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLHMpKTtsZXQgYT1zLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsZCxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxoPW5ldyBKZShjLHUpLGY9bmV3IEplKGQscCksbT1uZXcgSmUoZC1jLHAtdSksQz1uZXcgSmUoLW0ueSxtLngpLnNldExlbmd0aChlLzIpLF89aC5jbG9uZSgpLmFkZChDKSx5PWguY2xvbmUoKS5zdWIoQyksST1mLmNsb25lKCkuYWRkKEMpLEE9Zi5jbG9uZSgpLnN1YihDKSxPPVtfLngsXy55LDAseS54LHkueSwwLEkueCxJLnksMCxJLngsSS55LDAseS54LHkueSwwLEEueCxBLnksMF07YS5zZXQoTyxsKk8ubGVuZ3RoKX1zLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBZMihuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTpzfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1CeihuLG8scz8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgUTI9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sc109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09c319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LEF5PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0oQXl8fChBeT17fSkpLEF5KSkoKSxLMj1jbGFzcyBleHRlbmRzIFEye3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6QXkuTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkF5Lk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxzPXt4Om9bMF0seTpvWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGQ9aXNOYU4oYyl8fGlzTmFOKHUpO2QhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PWE/e3g6Yyx5OnV9OmEpKSxpPWwpLGR8fChhPXt4OmMseTp1fSkscj1kfXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYT8/cykpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6cyxwb2x5bGluZTphfV1vZiByLmVudHJpZXMoKSlpZihzPT09QXkuTlVNQkVSKTI9PT1hLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDphWzBdLHk6YVsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLGEse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsYVtsXSxhW2wrMV1dKSx7eDphW2xdLHk6YVtsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sWjI9Y2xhc3MgZXh0ZW5kcyBIdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IEptKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxKMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIHJyLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBIdix0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9UlIodD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixzKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFJY19hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgcz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixzKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWkscz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrcy8zLGUueCtyLzIsZS55K3MvMyxlLngsZS55LTIqcy8zXSksbD1SUih0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWkscz1SUih0Py5kb20sKCk9PntsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGEpLGF9LGE9PihhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxhKSxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDp7ZG9tOnMsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOnN9PXIsYT0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LWEvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCthLzIsaS55K28vMl0pLGM9UlIodD8uZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx1fSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPXMse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSByci5XRUJHTDp7bGV0IGU9bmV3IFoyO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgYnksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLEljX2lzV2ViR2wyT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IFppKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2YgeW8pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IHU9QnoodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLGQ9bmV3IEtpLHA9bmV3IGpkKHtjb2xvcjp1fSksaD1uZXcgeW8oZCxwKTtyZXR1cm4gcC52aXNpYmxlPXIsRmxlKGQsZSxvKSx0aGlzLnNjZW5lLmFkZChoKSx7dHlwZTpOYy5MSU5FLGRhdGE6ZSxvYmozZDpoLHdpZHRoOm99fWxldHtkYXRhOnMsb2JqM2Q6YSx3aWR0aDpsfT10O3JldHVybiBZMih0aGlzLmJhY2tncm91bmRDb2xvcixhLHU9PigobyE9PWx8fCFzfHwhSWNfYXJlUG9seWxpbmVzRXF1YWwocyxlKSkmJkZsZSh1LGUsbyksdSksaSk/e3R5cGU6TmMuTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUscz1Ceih0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLGE9bmV3IEttKHtjb2xvcjpzLHZpc2libGU6aX0pO3JldHVybiBuZXcgeW8odCxhKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixzPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgS2k7a2xlKGwscyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KGtsZShsLHMpLGwpLGkpP3t0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgeHkoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gWTIodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIscz0yL01hdGguc3FydCgzKSpvLGE9bmV3IEdkKFtuZXcgSmUoZS54LXMvMixlLnktby8yKSxuZXcgSmUoZS54LGUueStvLzIpLG5ldyBKZShpLngsaS55K28vMiksbmV3IEplKGkueCtzLzIsaS55LW8vMildKTthLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgdGcoYSk7aWYoIXQpe2xldCB1PXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09dT9udWxsOih0aGlzLnNjZW5lLmFkZCh1KSx7dHlwZTpOYy5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp1fSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6TmMuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgSzIoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoQWModCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShBYyh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSwkYT0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KCRhfHwoJGE9e30pKSwkYSkpKCksSXk9KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KEl5fHwoSXk9e30pKSxJeSkpKCk7ZnVuY3Rpb24gTGxlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciByZz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1yci5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtyclt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9cmcud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6JGEuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTokYS5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8scyk9Pm8rcy5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgcz0wO3M8by5wb2ludHMubGVuZ3RoO3MrKylpW2UrK109by5wb2ludHNbc10ueCxpW2UrK109by5wb2ludHNbc10ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBJeS5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgSXkuT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBXdShuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uIEtNKG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBlTyhuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fXJnLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPUxsZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9MmMxZTcxYzUiKTt2YXIgSHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtmdW5jdGlvbiBVbGUobil7Zm9yKGxldCB0IG9mIG4paWYoU3RyaW5nKHQpLmluY2x1ZGVzKCJlIikpcmV0dXJuITA7cmV0dXJuITF9dmFyIFpNPXtnZXRTdGFuZGFyZFRpY2tzOmVPLGdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLHM9bi50aWNrcyhpLDIpO2lmKG8tcj49ODY0ZTV8fHMubGVuZ3RoPjIpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBhPW4udGlja3MoaSxlKTtyZXR1cm57bWFqb3I6cy5tYXAobD0+KHtzdGFydDpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRTaG9ydChsKX0pKSxtaW5vcjphLm1hcChsPT4oe3ZhbHVlOmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobCl9KSl9fSxnZXRUaWNrc0ZvckxpbmVhclNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWkscz1NYXRoLmFicyhvLXIpO2lmKHM+LjAwMSlyZXR1cm4gZU8obix0LGUsaSk7bGV0IGE9bi50aWNrcyhbcixvXSxlKSxsPW4udGlja3MoW3Isb10sMik7aWYoVWxlKGEpfHxVbGUobCkpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBjPVtdLHU9ZnVuY3Rpb24obil7bGV0IHQ9bi50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PXQubGVuZ3RoP051bWJlcih0WzFdKS0xOjB9KHMpO3M8MSYmbC5ldmVyeShoPT57bGV0IGY9TWF0aC5hYnMoaCk7cmV0dXJuIGY+PTAmJmY8MX0pJiYodSs9MSk7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGggb2YgbCl7bGV0W2YsbT0iIl09U3RyaW5nKGgpLnNwbGl0KCIuIiwyKSxDPU51bWJlcihmKyIuIittLnNsaWNlKDAsdSkpO2Quc2V0KEMse3N0YXJ0OkMsdGlja0Zvcm1hdHRlZFN0cmluZzowPT09Qz8iXHUyMDE0Ijp0LmZvcm1hdFJlYWRhYmxlKEMpfSl9bGV0IHA9MTAqTWF0aC5wb3coMTAsLXUpO2ZvcihsZXQgaCBvZiBhKWZvcihsZXQgZiBvZlsuLi5kLmtleXMoKV0ucmV2ZXJzZSgpKXtsZXQgbT1oLWY7aWYobT49MCYmbTxwKXtpZigwPT09ZiljLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2soaCl9KTtlbHNle2xldCBDPVN0cmluZyhoKS5zbGljZShTdHJpbmcoZikubGVuZ3RoKTtjLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzpgXHUyMDI2JHtDfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbShkLnZhbHVlcygpKSxtaW5vcjpjfX0sZmlsdGVyVGlja3NCeVZpc2liaWxpdHk6ZnVuY3Rpb24obix0LGUsaSxyPTUpe2lmKCFuLmxlbmd0aHx8IUh6KXJldHVybiBuO2xldCBvPSJ4Ij09PWU/MTotMSxzPW51bGw7cmV0dXJuIG4uZmlsdGVyKGE9PntsZXQgbD10KGEpO0h6LmZvbnQ9aTtsZXQgYz1Iei5tZWFzdXJlVGV4dChhLnRpY2tGb3JtYXR0ZWRTdHJpbmcpLHU9IngiPT09ZT9jLndpZHRoOmMuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQtYy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7cmV0dXJuIG51bGw9PT1zPyEobCtvKnU8MHx8KHM9bCtvKnUsMCkpOiEobyoocytvKnItbCk+MHx8KHM9bCtvKnUsMCkpfSl9fTtmdW5jdGlvbiBlamUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsMTcpKDEsInRleHQiKSxEKDIpLHYoKSxnKDMsInRpdGxlIiksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLE90KCJmb250IixpLmF4aXNGb250KSx6ZSgieCIsaS50ZXh0WFBvc2l0aW9uKGUudmFsdWUpKSgieSIsaS50ZXh0WVBvc2l0aW9uKGUudmFsdWUpKSx4KDEpLHFlKCIgIixlLnRpY2tGb3JtYXR0ZWRTdHJpbmcsIiAiKSx4KDIpLHl0KGkuZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnZhbHVlKSl9fWZ1bmN0aW9uIHRqZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjApKDEsInNwYW4iKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXQubGFzdCxvPU0oMik7T3QoImxlZnQiLG8uZ2V0TWFqb3JYUG9zaXRpb24oZSksInB4IikoIndpZHRoIixvLmdldE1ham9yV2lkdGhTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImJvdHRvbSIsby5nZXRNYWpvcllQb3NpdGlvbihlKSwicHgiKSgiaGVpZ2h0IixvLmdldE1ham9ySGVpZ2h0U3RyaW5nKGUscixvLm1ham9yVGlja3NbaSsxXSkpKCJmb250IixvLmF4aXNGb250KSxhdCgibWFqb3ItbGFiZWwiLCEwKSgibGFzdCIsciksYigidGl0bGUiLG8uZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnN0YXJ0KSkseCgyKSx5dChlLnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiBuamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSx0amUsMywxNiwic3BhbiIsMTkpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLm1ham9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ham9yVGljayl9fXZhciB6bGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBHLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCBlPW51bGwscj1LTSgieCI9PT10aGlzLmF4aXM/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMuZ3JpZENvdW50KTtlPXRoaXMuc2NhbGUgaW5zdGFuY2VvZiByTT9aTS5nZXRUaWNrc0ZvckxpbmVhclNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIG9NP1pNLmdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZSh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpOlpNLmdldFN0YW5kYXJkVGlja3ModGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KSx0aGlzLm1ham9yVGlja3M9ZS5tYWpvcix0aGlzLm1pbm9yVGlja3M9Wk0uZmlsdGVyVGlja3NCeVZpc2liaWxpdHkoZS5taW5vcixvPT50aGlzLmdldERvbVBvcyhvLnZhbHVlKSx0aGlzLmF4aXMsIjExcHggUm9ib3RvLCBzYW5zLXNlcmlmIil9Z2V0Rm9ybWF0dGVyKCl7cmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyPz90aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayhlKXtyZXR1cm4gZS52YWx1ZX10cmFja0J5TWFqb3JUaWNrKGUpe3JldHVybiBlLnN0YXJ0fWdldERvbVBvcyhlKXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxXdSh0aGlzLmRvbURpbSx0aGlzLmF4aXMpLGUpfXRleHRYUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzP1N0cmluZyh0aGlzLmdldERvbVBvcyhlKSk6IjEwMCUifXRleHRZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOlN0cmluZyh0aGlzLmdldERvbVBvcyhlKSl9Z2V0TWFqb3JYUG9zaXRpb24oZSl7cmV0dXJuInkiPT09dGhpcy5heGlzPzA6TWF0aC5taW4odGhpcy5kb21EaW0ud2lkdGgsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9yV2lkdGhTdHJpbmcoZSxpLHIpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5nZXRNYWpvclhQb3NpdGlvbihyKSktdGhpcy5nZXRNYWpvclhQb3NpdGlvbihlKSsicHgifWdldE1ham9yWVBvc2l0aW9uKGUpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8wOnRoaXMuZG9tRGltLmhlaWdodC1NYXRoLm1pbih0aGlzLmRvbURpbS5oZWlnaHQsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9ySGVpZ2h0U3RyaW5nKGUsaSxyKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6KGl8fCFyP3RoaXMuZG9tRGltLmhlaWdodDp0aGlzLmdldE1ham9yWVBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWVBvc2l0aW9uKGUpKyJweCJ9a2V5ZG93blByZXZlbnRDbG9zZShlKXsiRXNjYXBlIiE9PWUua2V5JiZlLnN0b3BQcm9wYWdhdGlvbigpfWV4dGVudENoYW5nZWQoZSxpKXtsZXQgcj1OdW1iZXIoZSksbz1OdW1iZXIoaSk7aWYobzxyKXtsZXQgcz1yO3I9byxvPXN9IU51bWJlci5pc0Zpbml0ZShyKXx8IU51bWJlci5pc0Zpbml0ZShvKXx8dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdChbcixvXSl9b25BeGlzVXBkYXRlTWVudU9wZW4oZSxpLHIpe2UudmFsdWU9U3RyaW5nKHJbMF0pLGkudmFsdWU9U3RyaW5nKHJbMV0pLGUuZm9jdXMoKX1zZXRFZGl0TWVudU9wZW5lZChlKXt0aGlzLmVkaXRNZW51T3BlbmVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyNix2YXJzOjEzLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnVPcGVuZWQiLCJtZW51Q2xvc2VkIl0sWyJtYXRNZW51VHJpZ2dlciIsIm1hdE1lbnVUcmlnZ2VyIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm1ham9yIHRpY2tzIiw0LCJuZ0lmIl0sWyJ4UG9zaXRpb24iLCJiZWZvcmUiLDMsInlQb3NpdGlvbiJdLFsibWFudWFsQ29udHJvbCIsIm1hdE1lbnUiXSxbMSwiZXh0ZW50LWVkaXQtaW5wdXQiLDMsImNsaWNrIiwia2V5ZG93biJdLFsidHlwZSIsIm51bWJlciIsMywidmFsdWUiXSxbIm1pbklucHV0IiwiIl0sWyJtYXhJbnB1dCIsIiJdLFsxLCJleHRlbnQtZWRpdC1jb250cm9sIiwzLCJrZXlkb3duIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsMSwiZXh0ZW50LWVkaXQtY2hhbmdlIiwzLCJjbGljayJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwxLCJleHRlbnQtZWRpdC1jYW5jZWwiLDMsImNsaWNrIl0sWzEsIm1pbm9yLXRpY2stbGFiZWwiXSxbMSwibWFqb3IiLCJ0aWNrcyJdLFszLCJtYWpvci1sYWJlbCIsImxhc3QiLCJsZWZ0Iiwid2lkdGgiLCJib3R0b20iLCJoZWlnaHQiLCJmb250IiwidGl0bGUiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFszLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIpLE4oMSwiZGl2IiwwKSxnKDIsImRpdiIsMSksam4oKSxnKDMsInN2ZyIsMiksRSg0LGVqZSw1LDYsImciLDMpLHYoKSxTYSgpLGcoNSwiYnV0dG9uIiw0LDUpLFAoIm1lbnVPcGVuZWQiLGZ1bmN0aW9uKCl7cmUocik7bGV0IHM9c3QoMTUpLGE9c3QoMjApO3JldHVybiBpLm9uQXhpc1VwZGF0ZU1lbnVPcGVuKHMsYSxpLmF4aXNFeHRlbnQpLG9lKGkuc2V0RWRpdE1lbnVPcGVuZWQoITApKX0pKCJtZW51Q2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLnNldEVkaXRNZW51T3BlbmVkKCExKX0pLE4oNywibWF0LWljb24iLDYpLHYoKSgpLEUoOCxuamUsMiwyLCJkaXYiLDcpLHYoKSxnKDksIm1hdC1tZW51Iiw4LDkpKDExLCJkaXYiLDEwKSxQKCJjbGljayIsZnVuY3Rpb24ocyl7cmV0dXJuIHMuc3RvcFByb3BhZ2F0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMTIsImxhYmVsIiksRCgxMywibWluIiksdigpLE4oMTQsImlucHV0IiwxMSwxMiksdigpLGcoMTYsImRpdiIsMTApLFAoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksZygxNywibGFiZWwiKSxEKDE4LCJtYXgiKSx2KCksTigxOSwiaW5wdXQiLDExLDEzKSx2KCksZygyMSwiZGl2IiwxNCksUCgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMjIsImJ1dHRvbiIsMTUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDE1KSxhPXN0KDIwKSxsPXN0KDYpO3JldHVybiBpLmV4dGVudENoYW5nZWQocy52YWx1ZSxhLnZhbHVlKSxvZShsLmNsb3NlTWVudSgpKX0pLEQoMjMsIiBDaGFuZ2UgIiksdigpLGcoMjQsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShyKSxvZShzdCg2KS5jbG9zZU1lbnUoKSl9KSxEKDI1LCIgQ2FuY2VsICIpLHYoKSgpKCl9aWYoMiZlKXtsZXQgcj1zdCgxMCk7ZWEoaS5heGlzKyItYXhpcyBheGlzIikseCg0KSxiKCJuZ0Zvck9mIixpLm1pbm9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeU1pbm9yVGljaykseCgxKSxhdCgiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixpLmVkaXRNZW51T3BlbmVkKSxiKCJtYXRNZW51VHJpZ2dlckZvciIscikseCgzKSxiKCJuZ0lmIixpLm1ham9yVGlja3MubGVuZ3RoKSx4KDEpLGIoInlQb3NpdGlvbiIsInkiPT09aS5heGlzPyJhYm92ZSI6ImJlbG93IikseCg1KSxiKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzBdKSx4KDUpLGIoInZhbHVlIixpLmF4aXNFeHRlbnRbMV0pfX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixabixJdSxQdV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZToxMXB4O3VzZXItc2VsZWN0Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0sIC5taW5vcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDA7b3ZlcmZsb3c6aGlkZGVufS5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7ZmxleDowIDAgMXB4O2p1c3RpZnktY29udGVudDpzdHJldGNofS50aWNrc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTozcHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTp0ZXh0LWJlZm9yZS1lZGdlO3RleHQtYW5jaG9yOm1pZGRsZX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NXB4fS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDt0ZXh0LWFuY2hvcjplbmR9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2ZvbnQtc2l6ZTowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDo1cHg7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjRweH0uZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDo1cHg7ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxMnB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczozMHB4IG1pbm1heChhdXRvLCAxMDBweCk7aGVpZ2h0OjMwcHg7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItc3R5bGU6c29saWQ7Y29sb3I6aW5oZXJpdH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjEuNDttYXJnaW4tbGVmdDo1cHg7cGFkZGluZzowIDEwcHh9LmF4aXNbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4dGVudC1lZGl0LW1lbnUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OnZpc2libGV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Y29udGFpbjpzdHJpY3R9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzllOWU5ZTtwYWRkaW5nOjAgNXB4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzllOWU5ZTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjVweCAwO3dpZHRoOjEwMCV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBKTShuLHQpe2xldCBlPU1hdGgubWluKEZ1KG4ubWFwKCh7eDpvfSk9Pm8pLHQpLG4ubGVuZ3RoLTEpLGk9TWF0aC5tYXgoMCxlLTEpO3JldHVybiBNYXRoLmFicyhuW2ldLngtdCktTWF0aC5hYnMobltlXS54LXQpPD0wP2k6ZX1mdW5jdGlvbiBqbGUobix0LGUsaSxyLG8pe2xldCBzO3N3aXRjaChuLmRlbHRhTW9kZSl7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTDpzPTE7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FOnM9ODticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0U6cz0yMDticmVhaztkZWZhdWx0OnM9MSxjb25zb2xlLndhcm4oYFVua25vd24gV2hlZWxFdmVudCBkZWx0YU1vZGU6ICR7bi5kZWx0YU1vZGV9LmApfWxldCBhPW4uZGVsdGFZKnMsbD1hPDA/TWF0aC5tYXgoYSppLC0uOTUpOmEqaSx7d2lkdGg6YyxoZWlnaHQ6dX09ZSxkPVtyLnJldmVyc2UodC54LFswLGNdLC1uLm9mZnNldFgqbCksci5yZXZlcnNlKHQueCxbMCxjXSxjKyhjLW4ub2Zmc2V0WCkqbCldLHA9W28ucmV2ZXJzZSh0LnksW3UsMF0sLW4ub2Zmc2V0WSpsKSxvLnJldmVyc2UodC55LFt1LDBdLHUrKHUtbi5vZmZzZXRZKSpsKV07cmV0dXJue3g6ZFsxXTxkWzBdP1tkWzFdLGRbMF1dOmQseTpwWzFdPHBbMF0/W3BbMV0scFswXV06cH19dmFyIG9qZT1bImRvdHMiXTtmdW5jdGlvbiBzamUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwxMikpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7emUoImN4IixpLmdldERvbVgoZS5kYXRhUG9pbnQueCkpKCJjeSIsaS5nZXREb21ZKGUuZGF0YVBvaW50LnkpKSgiZmlsbCIsZS5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIGFqZShuLHQpe2lmKDEmbiYmKGpuKCksS3QoMCksRSgxLHNqZSwxLDMsImNpcmNsZSIsMTEpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO3goMSksYigibmdJZiIsaS5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQoZS5kYXRhUG9pbnQpKX19ZnVuY3Rpb24gbGplKG4sdCl7aWYoMSZuJiYoam4oKSxLdCgwKSxFKDEsYWplLDIsMSwibmctY29udGFpbmVyIiwxMCksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLmN1cnNvcmVkRGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5U2VyaWVzTmFtZSl9fWZ1bmN0aW9uIGNqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJyZWN0IiwxMykpLDImbil7bGV0IGU9TSgpO3plKCJ4IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS54KSgid2lkdGgiLGUuem9vbUJveEluVWlDb29yZGluYXRlLndpZHRoKSgieSIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUueSkoImhlaWdodCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUuaGVpZ2h0KX19dmFyIHVqZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJue2RhdGE6bixjdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkOnQsY3Vyc29yTG9jYXRpb246ZX19O2Z1bmN0aW9uIGRqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNCksQWkoMSwxNSksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDExKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUudG9vbHRpcFRlbXBsYXRlP2UudG9vbHRpcFRlbXBsYXRlOmkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsa2IoMix1amUsZS5jdXJzb3JlZERhdGEsZS5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLGUuY3Vyc29yTG9jYXRpb24pKX19ZnVuY3Rpb24gcGplKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMTcpKDIsInRkIiwxOCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDE5KSxEKDUpLHYoKSxnKDYsInRkIiksRCg3KSx2KCksZyg4LCJ0ZCIpLEQoOSksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt4KDMpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLHl0KGUubWV0YWRhdGEuZGlzcGxheU5hbWUpLHgoMikseXQoZS5kYXRhUG9pbnQueSkseCgyKSx5dChlLmRhdGFQb2ludC54KX19ZnVuY3Rpb24gaGplKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIpKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwxNiksZyg0LCJ0aCIpLEQoNSwiTmFtZSIpLHYoKSxnKDYsInRoIiksRCg3LCJZIiksdigpLGcoOCwidGgiKSxEKDksIlgiKSx2KCkoKSgpLGcoMTAsInRib2R5IiksRSgxMSxwamUsMTAsNSwibmctY29udGFpbmVyIiwxMCksdigpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9TSgpO3goMTEpLGIoIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBtamUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIEdsZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgRyx0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBHLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBHLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1rcix0aGlzLnN0YXRlPW5ldyBWcihrci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUoQigoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9rci5QQU5OSU5HOmtyLkRSQUdfWk9PTUlORztpPT09a3IuTk9ORSYmcj09PWtyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09a3IuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxzPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLGE9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sc10seTpbYSxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChrci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBrci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoa3IuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBrci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2Uga3IuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDpzfT10aGlzLmRvbURpbSxhPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKHMrciksdT10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W2EsbF0seTpbYyx1XX19KTticmVha31jYXNlIGtyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLGxpKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksdmkoZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLGp0KGUpKTp4YSgzZTMpLnBpcGUoTnQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLEIoKCk9Pm51bGwpKX0pLEhlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6amxlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChrci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZULG89KGUuYnV0dG9ucyZZYS5NSURETEUpPT09WWEuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsV3UodGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxXdSh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksV3UodGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89Sk0oaS5wb2ludHMsZS54KSxzPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OnMsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKHMueCkseTp0aGlzLmdldERvbVkocy55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhubiksdyhvbSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChvamUsNyxBZSksbHQoUXAsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUifSxvdXRwdXRzOntvblZpZXdFeHRlbnRDaGFuZ2U6Im9uVmlld0V4dGVudENoYW5nZSIsb25WaWV3RXh0ZW50UmVzZXQ6Im9uVmlld0V4dGVudFJlc2V0IixvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2U6Im9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6b20sdXNlRmFjdG9yeTptamUsZGVwczpbUWldfV0pLHp0XSxkZWNsczoxMix2YXJzOjE1LGNvbnN0czpbWzEsImRvdHMiXSxbImRvdHMiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJ6b29tLWJveCIsNCwibmdJZiJdLFsxLCJ6b29tLWluc3RydWN0aW9uIl0sWzEsImluc3RydWN0aW9uLWNvbnRlbnQiXSxbImNka092ZXJsYXlPcmlnaW4iLCIiLDEsInRvb2x0aXAtb3JpZ2luIl0sWyJ0b29sdGlwT3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJkZXRhY2giXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWzEsInRvb2x0aXAtY29udGFpbmVyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzEsInRvb2x0aXAtcm93Il0sWzEsInRvb2x0aXAtcm93LWNpcmNsZSJdLFsxLCJuYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoam4oKSxnKDAsInN2ZyIsMCwxKSxFKDIsbGplLDIsMiwibmctY29udGFpbmVyIiwyKSxFKDMsY2plLDEsNCwicmVjdCIsMyksdigpLFNhKCksZyg0LCJkaXYiLDQpKDUsInNwYW4iLDUpLEQoNiwiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSx2KCkoKSxOKDcsImRpdiIsNiw3KSxFKDksZGplLDIsNiwibmctdGVtcGxhdGUiLDgpLFAoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKX0pLEUoMTAsaGplLDEyLDIsIm5nLXRlbXBsYXRlIixudWxsLDksZW4pKSwyJmUmJihhdCgicGFubmFibGUiLGkuc3BlY2lhbEtleVByZXNzZWQpKCJkcmFnZ2FibGUiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FfHxpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuRFJBR19aT09NSU5HKSgicGFubmluZyIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLlBBTk5JTkcpLHgoMiksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkUpLHgoMSksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykseCg2KSxiKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixpLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixpLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixpLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCkpfSxkZXBlbmRlbmNpZXM6W3luLFhlLE5vLFFwLHNtXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTt1c2VyLXNlbGVjdDpub25lfS5kb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5kb3RzLmRyYWdnYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmNyb3NzaGFpcn0uZG90cy5wYW5uYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJ9LmRvdHMucGFubmluZ1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJiaW5nfS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjYpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXAtb3JpZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udG9vbHRpcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuODUpO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Y29udGFpbjpwYWludCBzdHlsZSBsYXlvdXQ7Zm9udC1zaXplOi45ZW07b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjVweDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCV9dGhbX25nY29udGVudC0lQ09NUCVdLCB0ZFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggNXB4O3RleHQtYWxpZ246bGVmdH10aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmctYm90dG9tOjVweH0uem9vbS1ib3hbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTouMDM7ZmlsbDojMDAwO3N0cm9rZTojY2NjfS56b29tLWluc3RydWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDowO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEwcHg7dHJhbnNpdGlvbjpvcGFjaXR5IC41czt6LWluZGV4OjF9Lmluc3RydWN0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNob3ctem9vbS1pbnN0cnVjdGlvbltfbmdob3N0LSVDT01QJV0gICAuem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gX2plKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImxpbmUiLDIpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO2F0KCJ6ZXJvIiwwPT09ZSksemUoIngxIixpLmdldERvbVgoZSkpKCJ4MiIsaS5nZXREb21YKGUpKSgieTIiLGkuZG9tRGltLmhlaWdodCl9fWZ1bmN0aW9uIHZqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJsaW5lIiwzKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTthdCgiemVybyIsMD09PWUpLHplKCJ5MSIsaS5nZXREb21ZKGUpKSgieDIiLGkuZG9tRGltLndpZHRoKSgieTIiLGkuZ2V0RG9tWShlKSl9fXZhciBXbGU9KCgpPT57Y2xhc3MgbntnZXREb21YKGUpe3JldHVybiB0aGlzLnhTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC54LFd1KHRoaXMuZG9tRGltLCJ4IiksZSl9Z2V0RG9tWShlKXtyZXR1cm4gdGhpcy55U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfWdldFhUaWNrcygpe3JldHVybiB0aGlzLnhTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueCxLTSh0aGlzLmRvbURpbS53aWR0aCx0aGlzLnhHcmlkQ291bnQpKX1nZXRZVGlja3MoKXtyZXR1cm4gdGhpcy55U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LnksS00odGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMueUdyaWRDb3VudCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0LWdyaWQtdmlldyJdXSxpbnB1dHM6e3ZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix4R3JpZENvdW50OiJ4R3JpZENvdW50Iix5U2NhbGU6InlTY2FsZSIseUdyaWRDb3VudDoieUdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0ifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sieTEiLCIwIiwzLCJ6ZXJvIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIngxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ5MSIsIjAiXSxbIngxIiwiMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGpuKCksZygwLCJzdmciKSxFKDEsX2plLDEsNSwibGluZSIsMCksRSgyLHZqZSwxLDUsImxpbmUiLDEpLHYoKSksMiZlJiYoeCgxKSxiKCJuZ0Zvck9mIixpLmdldFhUaWNrcygpKSx4KDEpLGIoIm5nRm9yT2YiLGkuZ2V0WVRpY2tzKCkpKX0sZGVwZW5kZW5jaWVzOlt5bl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2NjYztcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC56ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGJqZT1bInNlcmllc1ZpZXciXSx4amU9WyJ4QXhpcyJdLENqZT1bInlBeGlzIl0sd2plPVsiY2hhcnRFbCJdO2Z1bmN0aW9uIE1qZShuLHQpe2lmKDEmbiYmTigwLCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsMTYpLDImbil7bGV0IGU9TSgpO2IoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgieEdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJ5R3JpZENvdW50IixlLllfR1JJRF9DT1VOVCkoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLm1haW4pfX1mdW5jdGlvbiBTamUobix0KXsxJm4mJihqbigpLE4oMCwic3ZnIixudWxsLDE3KSl9ZnVuY3Rpb24gRWplKG4sdCl7MSZuJiZOKDAsImNhbnZhcyIsbnVsbCwxNyl9ZnVuY3Rpb24gVGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFNqZSwyLDAsInN2ZyIsNSksRSgyLEVqZSwyLDAsImNhbnZhcyIsNSksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuU1ZHKSx4KDEpLGIoIm5nSWYiLGUuZ2V0UmVuZGVyZXJUeXBlKCk9PT1lLlJlbmRlcmVyVHlwZS5XRUJHTCl9fWZ1bmN0aW9uIERqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsMTgpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkKHIpKX0pKCJvblZpZXdFeHRlbnRSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLnZpZXdCb3hSZXNldCgpKX0pKCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKSxpPXN0KDEpO2IoInNlcmllc0RhdGEiLGUuc2VyaWVzRGF0YSkoInNlcmllc01ldGFkYXRhTWFwIixlLnNlcmllc01ldGFkYXRhTWFwKSgidmlld0V4dGVudCIsZS52aWV3Qm94KSgieFNjYWxlIixlLnhTY2FsZSkoInlTY2FsZSIsZS55U2NhbGUpKCJ0b29sdGlwT3JpZ2luRWwiLGkpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKSgidG9vbHRpcFRlbXBsYXRlIixlLnRvb2x0aXBUZW1wbGF0ZSl9fXZhciBBamU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIElqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOSksQWkoMSwyMCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbU4oMixBamUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIFBqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMociwieSIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJheGlzRXh0ZW50IixlLnZpZXdCb3gueSkoImN1c3RvbUZvcm1hdHRlciIsZS5jdXN0b21ZRm9ybWF0dGVyKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMueUF4aXMpKCJncmlkQ291bnQiLGUuWV9HUklEX0NPVU5UKSgic2NhbGUiLGUueVNjYWxlKX19ZnVuY3Rpb24gUmplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibGluZS1jaGFydC1heGlzIiwyMiksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhyLCJ4IikpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImF4aXNFeHRlbnQiLGUudmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIixlLmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJzY2FsZSIsZS54U2NhbGUpfX1mdW5jdGlvbiBPamUobix0KXsxJm4mJihnKDAsImRpdiIsMjMpLE4oMSwic3BhbiIsMjQpLHYoKSl9dmFyIGtqZT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybnt4U2NhbGU6bix5U2NhbGU6dCxkb21EaW1lbnNpb246ZSx2aWV3RXh0ZW50OmksaW50ZXJhY3Rpb25TdGF0ZTpyfX07ZnVuY3Rpb24gRmplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI1LDI2KSxBaSgyLDIwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixnTigyLGtqZSxlLnhTY2FsZSxlLnlTY2FsZSxlLmRvbURpbWVuc2lvbnMubWFpbixlLnZpZXdCb3gsZS5pbnRlcmFjdGlvblN0YXRlKSl9fXZhciBOamU9ZnVuY3Rpb24obix0KXtyZXR1cm57Y29udGFpbmVyOiEwLCJkYXJrLW1vZGUiOm4sImxpbmUtb25seS1tb2RlIjp0LCJsaW5lLWNoYXJ0IjohMH19LFV6PXt4OlswLDFdLHk6WzAsMV19LHRPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuUmVuZGVyZXJUeXBlPXJyLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGU9cnIuV0VCR0wsdGhpcy54U2NhbGVUeXBlPVNyLkxJTkVBUix0aGlzLnlTY2FsZVR5cGU9U3IuTElORUFSLHRoaXMubGluZU9ubHk9ITEsdGhpcy52aWV3Qm94Q2hhbmdlZD1uZXcgRyx0aGlzLm9uVmlld0JveE92ZXJyaWRkZW49bmV3IFVoKDEpLHRoaXMuaWdub3JlWU91dGxpZXJzPSExLHRoaXMuWV9HUklEX0NPVU5UPTYsdGhpcy5YX0dSSURfQ09VTlQ9MTAsdGhpcy54U2NhbGU9QWModGhpcy54U2NhbGVUeXBlKSx0aGlzLnlTY2FsZT1BYyh0aGlzLnhTY2FsZVR5cGUpLHRoaXMudmlld0JveD1Veix0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOjAsaGVpZ2h0OjB9LHhBeGlzOnt3aWR0aDowLGhlaWdodDowfSx5QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH19LHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuaW50ZXJhY3Rpb25TdGF0ZT1rci5OT05FLHRoaXMubGluZUNoYXJ0PW51bGwsdGhpcy5pc0RhdGFVcGRhdGVkPSExLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnNjYWxlVXBkYXRlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITF9bmdPbkluaXQoKXt0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dCh0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4pfW5nT25DaGFuZ2VzKGUpe2UueFNjYWxlVHlwZSYmKHRoaXMueFNjYWxlPUFjKHRoaXMueFNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUueVNjYWxlVHlwZSYmKHRoaXMueVNjYWxlPUFjKHRoaXMueVNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUuc2VyaWVzRGF0YSYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMCksZS5maXhlZFZpZXdCb3gmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMCksZS5zZXJpZXNNZXRhZGF0YU1hcCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITApLGUudXNlRGFya01vZGUmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMCksdGhpcy5zY2FsZVVwZGF0ZWQmJnRoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPXRoaXMuaXNWaWV3Qm94Q2hhbmdlZHx8dGhpcy5zY2FsZVVwZGF0ZWR8fCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuc2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3goZSksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMudXBkYXRlTGluZUNoYXJ0KCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9cmVjb3ZlclJlbmRlcmVySWZOZWVkZWQoKXshdGhpcy5pc1JlbmRlcmluZ0NvbnRleHRMb3N0fHx0aGlzLmRpc2FibGVVcGRhdGV8fCh0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMCx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITAsdGhpcy5pc0RhdGFVcGRhdGVkPSEwLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwLHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITEpfW9uVmlld1Jlc2l6ZSgpeyF0aGlzLmxpbmVDaGFydHx8KHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSx0aGlzLmxpbmVDaGFydC5yZXNpemUodGhpcy5kb21EaW1lbnNpb25zLm1haW4pLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKXtpZihlLnhTY2FsZVR5cGV8fGUueVNjYWxlVHlwZXx8ZS5pZ25vcmVZT3V0bGllcnN8fGUuc2VyaWVzRGF0YSlyZXR1cm4hMDtsZXQgcj1lLnNlcmllc01ldGFkYXRhTWFwO2lmKHIpe2xldCBvPXIucHJldmlvdXNWYWx1ZTtpZihPYmplY3Qua2V5cyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKS5sZW5ndGghPT1PYmplY3Qua2V5cyhvPz97fSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXRbcyxhXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKXtsZXQgbD1vJiZvW3NdO2lmKCFsfHxhLnZpc2libGUhPT1sLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfW9uQ29udGV4dExvc3QoKXt0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITAsdGhpcy5saW5lQ2hhcnQmJih0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCksdGhpcy5saW5lQ2hhcnQ9bnVsbCl9dHJpZ2dlckNvbnRleHRMb3N0Rm9yVGVzdCgpe3RoaXMub25Db250ZXh0TG9zdCgpfWdldExpbmVDaGFydEZvclRlc3QoKXtyZXR1cm4gdGhpcy5saW5lQ2hhcnR9aW5pdGlhbGl6ZUNoYXJ0KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKTtsZXQgZT10aGlzLmdldFJlbmRlcmVyVHlwZSgpLGk9e29uRHJhd0VuZDooKT0+e30sb25Db250ZXh0TG9zdDp0aGlzLm9uQ29udGV4dExvc3QuYmluZCh0aGlzKX0scj1udWxsO3N3aXRjaCh0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksZSl7Y2FzZSByci5TVkc6cj17dHlwZTpyci5TVkcsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGNhbGxiYWNrczppLGRvbURpbWVuc2lvbjp0aGlzLmRvbURpbWVuc2lvbnMubWFpbix1c2VEYXJrTW9kZTp0aGlzLnVzZURhcmtNb2RlfTticmVhaztjYXNlIHJyLldFQkdMOnI9e3R5cGU6cnIuV0VCR0wsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGA8bGluZS1jaGFydD4gZG9lcyBub3QgeWV0IHN1cHBvcnQgcmVuZGVyZXJUeXBlOiAke2V9YCl9bGV0IHM9ZSE9PXJyLlNWRyYmSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKT9yZzpKMjt0aGlzLmxpbmVDaGFydD1uZXcgcyhyKX1uZ09uRGVzdHJveSgpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCl9Z2V0UmVuZGVyZXJUeXBlKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIHJyLlNWRzpyZXR1cm4gcnIuU1ZHO2Nhc2UgcnIuV0VCR0w6cmV0dXJuIEljX2lzV2ViR2wyU3VwcG9ydGVkKCk/cnIuV0VCR0w6cnIuU1ZHO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbmRlcmVyVHlwZTogJHtufWApfX0odGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGUpfXJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCl7dGhpcy5kb21EaW1lbnNpb25zPXttYWluOnt3aWR0aDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy5zZXJpZXNWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx4QXhpczp7d2lkdGg6dGhpcy54QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx5QXhpczp7d2lkdGg6dGhpcy55QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fX19dXBkYXRlTGluZUNoYXJ0KCl7aWYodGhpcy5yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpLHRoaXMubGluZUNoYXJ0JiYhdGhpcy5kaXNhYmxlVXBkYXRlKXtpZih0aGlzLnNjYWxlVXBkYXRlZCYmKHRoaXMuc2NhbGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFhTY2FsZVR5cGUodGhpcy54U2NhbGVUeXBlKSx0aGlzLmxpbmVDaGFydC5zZXRZU2NhbGVUeXBlKHRoaXMueVNjYWxlVHlwZSkpLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQmJih0aGlzLmlzTWV0YWRhdGFVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldE1ldGFkYXRhKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKSx0aGlzLmlzRGF0YVVwZGF0ZWQmJih0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0RGF0YSh0aGlzLnNlcmllc0RhdGEpKSx0aGlzLnVzZURhcmtNb2RlVXBkYXRlZCYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFVzZURhcmtNb2RlKHRoaXMudXNlRGFya01vZGUpKSwhdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmZpeGVkVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy5maXhlZFZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmlzVmlld0JveENoYW5nZWQpe2xldCBpPWZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89bnVsbCxzPW51bGwsYT1bXTtmb3IobGV0e2lkOmQscG9pbnRzOnB9b2Ygbil7bGV0IGg9dFtkXTtpZihoJiYhaC5hdXgmJmgudmlzaWJsZSlmb3IobGV0IGY9MDtmPHAubGVuZ3RoO2YrKyl7bGV0e3g6bSx5OkN9PXBbZl07aShtKSYmKG89bnVsbD09PW98fG08bz9tOm8scz1udWxsPT09c3x8bT5zP206cykscihDKSYmYS5wdXNoKEMpfX1hLnNvcnQoUmwpO2xldCBjPWFbMF0sdT1hW2EubGVuZ3RoLTFdO3JldHVybiBlJiZhLmxlbmd0aD4yJiYoYz1hW01hdGguY2VpbCguMDUqKGEubGVuZ3RoLTEpKV0sdT1hW01hdGguZmxvb3IoLjk1KihhLmxlbmd0aC0xKSldKSx7eDpudWxsIT09byYmbnVsbCE9PXM/W28sc106dm9pZCAwLHk6dm9pZCAwIT09YyYmdm9pZCAwIT09dT9bYyx1XTp2b2lkIDB9fSh0aGlzLnNlcmllc0RhdGEsdGhpcy5zZXJpZXNNZXRhZGF0YU1hcCx0aGlzLmlnbm9yZVlPdXRsaWVycyx0aGlzLnhTY2FsZS5pc1NhZmVOdW1iZXIsdGhpcy55U2NhbGUuaXNTYWZlTnVtYmVyKTt0aGlzLnZpZXdCb3g9e3g6dGhpcy54U2NhbGUubmljZURvbWFpbihpLng/P1V6LngpLHk6dGhpcy55U2NhbGUubmljZURvbWFpbihpLnk/P1V6LnkpfX0odGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWR8fHRoaXMuaXNWaWV3Qm94Q2hhbmdlZCkmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0Vmlld0JveCh0aGlzLnZpZXdCb3gpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX19b25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDplfSl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCEwKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy52aWV3Qm94PWUsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQoZSl9dmlld0JveFJlc2V0KCl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQodGhpcy52aWV3Qm94KX1zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKGUpe2xldCBpPXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbjt0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ZSxpIT09ZSYmdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQoZSl9b25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKGUpe3RoaXMuaW50ZXJhY3Rpb25TdGF0ZT1lfWdldElzVmlld0JveE92ZXJyaWRkZW4oKXtyZXR1cm4gdGhpcy5vblZpZXdCb3hPdmVycmlkZGVufW9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhlLGkpe2xldCByPXsuLi50aGlzLnZpZXdCb3gsW2ldOmV9O3RoaXMub25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDpyfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGJqZSw3LEFlKSxsdCh4amUsNyxBZSksbHQoQ2plLDcsQWUpLGx0KHdqZSw1LEFlKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zZXJpZXNWaWV3PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNoYXJ0RWw9ci5maXJzdCl9fSxpbnB1dHM6e2N1c3RvbVZpc1RlbXBsYXRlOiJjdXN0b21WaXNUZW1wbGF0ZSIsY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGU6ImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLHByZWZlcnJlZFJlbmRlcmVyVHlwZToicHJlZmVycmVkUmVuZGVyZXJUeXBlIixzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixmaXhlZFZpZXdCb3g6ImZpeGVkVmlld0JveCIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix5U2NhbGVUeXBlOiJ5U2NhbGVUeXBlIixjdXN0b21YRm9ybWF0dGVyOiJjdXN0b21YRm9ybWF0dGVyIixjdXN0b21ZRm9ybWF0dGVyOiJjdXN0b21ZRm9ybWF0dGVyIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSIsbGluZU9ubHk6ImxpbmVPbmx5IixkaXNhYmxlVXBkYXRlOiJkaXNhYmxlVXBkYXRlIixpZ25vcmVZT3V0bGllcnM6Imlnbm9yZVlPdXRsaWVycyJ9LG91dHB1dHM6e3ZpZXdCb3hDaGFuZ2VkOiJ2aWV3Qm94Q2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTYsdmFyczoxMyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMywibmdDbGFzcyIsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbIm92ZXJsYXlUYXJnZXQiLCJjZGtPdmVybGF5T3JpZ2luIl0sWzEsInNlcmllcy12aWV3Il0sWyJzZXJpZXNWaWV3IiwiIl0sWzMsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4R3JpZENvdW50IiwieUdyaWRDb3VudCIsImRvbURpbSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIiw0LCJuZ0lmIl0sWzEsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLDQsIm5nSWYiXSxbMSwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwiY3VzdG9tLXZpcyBjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiLDQsIm5nSWYiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIl0sWyJjaGFydEVsIiwiIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJdLFsxLCJjdXN0b20tdmlzIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsxLCJkb3QiXSxbMSwicmVjdCJdLFsxLCJjdXN0b20tdmlzIiwiY3VzdG9tLWNoYXJ0LW92ZXJsYXktdmlzIl0sWyJjdXN0b21DaGFydE92ZXJsYXkiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblZpZXdSZXNpemUoKX0pLGcoMiwiZGl2IiwyLDMpLEUoNCxNamUsMSw2LCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsNCksRSg1LFRqZSwzLDIsIm5nLWNvbnRhaW5lciIsNSksRSg2LERqZSwxLDgsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsNiksRSg3LElqZSwyLDcsImRpdiIsNyksdigpLGcoOCwiZGl2Iiw4LDkpLEUoMTAsUGplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMCksdigpLGcoMTEsImRpdiIsMTEsMTIpLEUoMTMsUmplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMyksdigpLEUoMTQsT2plLDIsMCwiZGl2IiwxNCksRSgxNSxGamUsMyw4LCJkaXYiLDE1KSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLHRvKDEwLE5qZSxpLnVzZURhcmtNb2RlLGkubGluZU9ubHkpKSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLDApLHgoNCksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQpLHgoMSksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5jdXN0b21WaXNUZW1wbGF0ZSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIixpLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsTm8sc20semxlLEdsZSxXbGUsX21dLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1bX25naG9zdC0lQ09NUCVdICAgICAubGluZS1jaGFydDpoYXMoLmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYTpob3ZlcikgLngtYXhpcyAuZXh0ZW50LWVkaXQtYnV0dG9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bX25naG9zdC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtmbGV4LWdyb3c6MTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiICIuIGN1c3RvbUNoYXJ0T3ZlcmxheSI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjUwcHggMWZyO2dyaWQtYXV0by1yb3dzOjFmciAzMHB4IDBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uY29udGFpbmVyLmxpbmUtb25seS1tb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDB9LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2VyaWVzO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWdyaWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzO3Bvc2l0aW9uOnJlbGF0aXZlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9LmN1c3RvbS1jaGFydC1vdmVybGF5LXZpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmN1c3RvbUNoYXJ0T3ZlcmxheTtncmlkLXJvdy1lbmQ6MjtncmlkLXJvdy1zdGFydDoxfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gQmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMCksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gVmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gSGplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwidGgiLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5oZWFkZXJDbGlja2VkKHIudHlwZSkpfSksZygxLCJkaXYiLDUpLFAoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkuZHJhZ1N0YXJ0KHIpKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLmRyYWdFbmQoKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5kcmFnRW50ZXIocikpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsNiksZygzLCJkaXYiLDcpLEUoNCxCamUsMSwxLCJtYXQtaWNvbiIsOCksRSg1LFZqZSwxLDEsIm1hdC1pY29uIiw5KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoImRyYWdnYWJsZSIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoIm5nQ2xhc3MiLGkuZ2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZS50eXBlKSkseCgxKSxiKCJoZWFkZXIiLGUpLHgoMiksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS50eXBlIT09aS5zb3J0aW5nSW5mby5oZWFkZXIpLHgoMSksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkRFU0NFTkRJTkcmJmUudHlwZT09PWkuc29ydGluZ0luZm8uaGVhZGVyKX19ZnVuY3Rpb24gVWplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEhqZSw2LDUsInRoIiwzKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO3goMSksYigibmdJZiIsaS5zaG93Q29sdW1uKGUpKX19ZnVuY3Rpb24gemplKG4sdCl7MSZuJiZBaSgwKX12YXIgcWxlPWZ1bmN0aW9uKG4pe3JldHVybnskaW1wbGljaXQ6bn19O2Z1bmN0aW9uIGpqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOCksRSgxLHpqZSwxLDAsIm5nLWNvbnRhaW5lciIsMTkpLEQoMiksdigpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0LGk9TSgpLiRpbXBsaWNpdCxyPU0oKSxvPXN0KDkpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsbykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixIbigzLHFsZSxpLlZBTFVFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gR2plKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBXamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSxHamUsMSwwLCJuZy1jb250YWluZXIiLDE5KSxEKDIpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCksbz1zdCg5KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMyxxbGUsaS5QRVJDRU5UQUdFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gcWplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDIwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCk7eCgxKSxxZSgiICIsci5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKGUudHlwZSxpKSwiICIpfX1mdW5jdGlvbiBZamUobix0KXtpZigxJm4mJihnKDAsInRkIiwxNSksRSgxLGpqZSwzLDUsImRpdiIsMTYpLEUoMixXamUsMyw1LCJkaXYiLDE2KSxFKDMscWplLDIsMSwiZGl2IiwxNyksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO2IoIm5nU3dpdGNoIixlLnR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlcnMuVkFMVUVfQ0hBTkdFKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJzLlBFUkNFTlRBR0VfQ0hBTkdFKX19ZnVuY3Rpb24gWGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFlqZSw0LDMsInRkIiwxNCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxiKCJuZ0lmIixpLnNob3dDb2x1bW4oZSkpfX1mdW5jdGlvbiBRamUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsInRyIiwxMikoMiwidGQiLDEzKSxOKDMsInNwYW4iKSx2KCksRSg0LFhqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7eCgzKSxPdCgiYmFja2dyb3VuZC1jb2xvciIsZS5DT0xPUikseCgxKSxiKCJuZ0Zvck9mIixpLmhlYWRlcnMpfX1mdW5jdGlvbiBLamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDIzKX1mdW5jdGlvbiBaamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDI0KX1mdW5jdGlvbiBKamUobix0KXtpZigxJm4mJihFKDAsS2plLDEsMCwibWF0LWljb24iLDIxKSxFKDEsWmplLDEsMCwibWF0LWljb24iLDIyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ0lmIixlPj0wKSx4KDEpLGIoIm5nSWYiLGU8MCl9fXZhciBXZD0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KFdkfHwoV2Q9e30pKSxXZCkpKCkseno9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSxZbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRyx0aGlzLkNvbHVtbkhlYWRlcnM9bXQsdGhpcy5Tb3J0aW5nT3JkZXI9cWEsdGhpcy5TaWRlPVdkLHRoaXMuaGlnaGxpZ2h0U2lkZT1XZC5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix6eil9Z2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLGkpe3N3aXRjaChlKXtjYXNlIG10LlJVTjpyZXR1cm4gdm9pZCAwPT09aS5SVU4/IiI6aS5SVU47Y2FzZSBtdC5WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLlZBTFVFKTtjYXNlIG10LlNURVA6cmV0dXJuIHZvaWQgMD09PWkuU1RFUD8iIjp2cy5mb3JtYXRTaG9ydChpLlNURVApO2Nhc2UgbXQuVElNRTpyZXR1cm4gdm9pZCAwPT09aS5USU1FPyIiOm5ldyBEYXRlKGkuVElNRSkudG9JU09TdHJpbmcoKTtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIHZvaWQgMD09PWkuUkVMQVRJVkVfVElNRT8iIjppTS5mb3JtYXRSZWFkYWJsZShpLlJFTEFUSVZFX1RJTUUpO2Nhc2UgbXQuU01PT1RIRUQ6cmV0dXJuIHZvaWQgMD09PWkuU01PT1RIRUQ/IiI6dnMuZm9ybWF0U2hvcnQoaS5TTU9PVEhFRCk7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuVkFMVUVfQ0hBTkdFPyIiOnZzLmZvcm1hdFNob3J0KE1hdGguYWJzKGkuVkFMVUVfQ0hBTkdFKSk7Y2FzZSBtdC5TVEFSVF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLlNUQVJUX1NURVA/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9TVEVQKTtjYXNlIG10LkVORF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLkVORF9TVEVQPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1NURVApO2Nhc2UgbXQuU1RBUlRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuU1RBUlRfVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9WQUxVRSk7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuRU5EX1ZBTFVFPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1ZBTFVFKTtjYXNlIG10Lk1JTl9WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5NSU5fVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5NSU5fVkFMVUUpO2Nhc2UgbXQuTUFYX1ZBTFVFOnJldHVybiB2b2lkIDA9PT1pLk1BWF9WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLk1BWF9WQUxVRSk7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4gdm9pZCAwPT09aS5QRVJDRU5UQUdFX0NIQU5HRT8iIjpNYXRoLnJvdW5kKDEwMCppLlBFUkNFTlRBR0VfQ0hBTkdFKS50b1N0cmluZygpKyIlIjtjYXNlIG10LlNURVBfQVRfTUFYOnJldHVybiB2b2lkIDA9PT1pLlNURVBfQVRfTUFYPyIiOnZzLmZvcm1hdFNob3J0KGkuU1RFUF9BVF9NQVgpO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIHZvaWQgMD09PWkuU1RFUF9BVF9NSU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEVQX0FUX01JTik7Y2FzZSBtdC5NRUFOOnJldHVybiB2b2lkIDA9PT1pLk1FQU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5NRUFOKTtjYXNlIG10LlJBV19DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuUkFXX0NIQU5HRT8iIjp6bS5mb3JtYXRTaG9ydChNYXRoLmFicyhpLlJBV19DSEFOR0UpKTtkZWZhdWx0OnJldHVybiIifX1oZWFkZXJDbGlja2VkKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8uaGVhZGVyIT09ZXx8dGhpcy5zb3J0aW5nSW5mby5vcmRlciE9PXFhLkFTQ0VORElORz97aGVhZGVyOmUsb3JkZXI6cWEuQVNDRU5ESU5HfTp7aGVhZGVyOmUsb3JkZXI6cWEuREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHp6KX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZSh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsenopKX1kcmFnRW50ZXIoZSl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwodGhpcy5oaWdobGlnaHRTaWRlPXRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhUeXBlKGUudHlwZSk8dGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUpP1dkLkxFRlQ6V2QuUklHSFQsdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGU9ZS50eXBlKX1tb3ZlSGVhZGVyKGUsaSl7bGV0IHI9Wy4uLnRoaXMuaGVhZGVyc107cmV0dXJuIHIuc3BsaWNlKGUsMSksci5zcGxpY2UoaSwwLHRoaXMuaGVhZGVyc1tlXSkscn1nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShlKXtyZXR1cm4gZSE9PXRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlP3t9OntoaWdobGlnaHQ6ITAsImhpZ2hsaWdodC1ib3JkZXItcmlnaHQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLlJJR0hULCJoaWdobGlnaHQtYm9yZGVyLWxlZnQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLkxFRlR9fXNob3dDb2x1bW4oZSl7cmV0dXJuIGUuZW5hYmxlZCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8ZS50eXBlIT09bXQuU01PT1RIRUQpfWdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZShlKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmZpbmRJbmRleChpPT5lPT09aS50eXBlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMifSxkZWNsczoxMCx2YXJzOjIsY29uc3RzOltbMSwiZGF0YS10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFycm93IiwiIl0sWzMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImNlbGwiLDMsImRyYWdnYWJsZSIsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImhlYWRlciJdLFsxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWzEsInJvdyJdLFsxLCJyb3ctY2lyY2xlIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsxLCJjZWxsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjZWxsIiwiZXh0cmEtcmlnaHQtcGFkZGluZyJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Iiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IikoMSwidGFibGUiLDApKDIsInRoZWFkIikoMywidHIiKSxOKDQsInRoIiksRSg1LFVqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpKCksZyg2LCJ0Ym9keSIpLEUoNyxRamUsNSwzLCJuZy1jb250YWluZXIiLDEpLHYoKSgpKCksRSg4LEpqZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUmJih4KDUpLGIoIm5nRm9yT2YiLGkuaGVhZGVycykseCgyKSxiKCJuZ0Zvck9mIixpLmRhdGEpKX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxObyxocixJcixDcCxabixCUF0sc3R5bGVzOlsiLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweDt3aWR0aDoxMDAlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246c3RpY2t5O3RleHQtYWxpZ246bGVmdDt0b3A6MDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc29ydGluZy1pY29uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTJweDtoZWlnaHQ6MTJweDtib3JkZXItcmFkaXVzOjVweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc2hvd1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjN9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHQtYm9yZGVyLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZjk4MDB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodC1ib3JkZXItbGVmdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmZjk4MDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxRbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHfWdldE1pblBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LHM9ZVtpXTtmb3IobGV0IGE9aTthPD1yO2ErKylvPmVbYV0ueSYmKG89ZVthXS55LHM9ZVthXSk7cmV0dXJuIHN9Z2V0TWF4UG9pbnRJblJhbmdlKGUsaSxyKXtsZXQgbz1lW2ldLnkscz1lW2ldO2ZvcihsZXQgYT1pO2E8PXI7YSsrKW88ZVthXS55JiYobz1lW2FdLnkscz1lW2FdKTtyZXR1cm4gc31nZXRNZWFuKGUsaSxyKXtsZXQgbz0wO2ZvcihsZXQgcz1pO3M8PXI7cysrKW8rPWVbc10udmFsdWU7cmV0dXJuIG8vKHItaSsxKX1nZXRUaW1lU2VsZWN0aW9uVGFibGVEYXRhKCl7aWYoIXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbilyZXR1cm5bXTtsZXQgZT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxpPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAscj10aGlzLmRhdGFTZXJpZXMuZmlsdGVyKG89PkJEKG8sdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubWFwKG89PntsZXQgcz10aGlzLmNoYXJ0TWV0YWRhdGFNYXBbby5pZF0sYT1KTShvLnBvaW50cyxlKSxsPW8ucG9pbnRzW2FdLGM9bnVsbCx1PW51bGw7bnVsbCE9aSYmKHU9Sk0oby5wb2ludHMsaSksYz1vLnBvaW50c1t1XSk7bGV0IGQ9e2lkOm8uaWR9O2QuQ09MT1I9cy5jb2xvcjtmb3IobGV0IHAgb2YgdGhpcy5jb2x1bW5IZWFkZXJzKXN3aXRjaChwLnR5cGUpe2Nhc2UgbXQuUlVOOmxldCBoPSIiO3MuYWxpYXMmJihoPWAke3MuYWxpYXMuYWxpYXNOdW1iZXJ9ICR7cy5hbGlhcy5hbGlhc1RleHR9L2ApLGQuUlVOPWAke2h9JHtzLmRpc3BsYXlOYW1lfWA7Y29udGludWU7Y2FzZSBtdC5TVEVQOmQuU1RFUD1sLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5WQUxVRTpkLlZBTFVFPWwudmFsdWU7Y29udGludWU7Y2FzZSBtdC5SRUxBVElWRV9USU1FOmQuUkVMQVRJVkVfVElNRT1sLnJlbGF0aXZlVGltZUluTXM7Y29udGludWU7Y2FzZSBtdC5TTU9PVEhFRDpkLlNNT09USEVEPWwueTtjb250aW51ZTtjYXNlIG10LlZBTFVFX0NIQU5HRTppZighYyljb250aW51ZTtkLlZBTFVFX0NIQU5HRT1jLnktbC55O2NvbnRpbnVlO2Nhc2UgbXQuU1RBUlRfU1RFUDpkLlNUQVJUX1NURVA9bC5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuRU5EX1NURVA6aWYoIWMpY29udGludWU7ZC5FTkRfU1RFUD1jLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5TVEFSVF9WQUxVRTpkLlNUQVJUX1ZBTFVFPWwueTtjb250aW51ZTtjYXNlIG10LkVORF9WQUxVRTppZighYyljb250aW51ZTtkLkVORF9WQUxVRT1jLnk7Y29udGludWU7Y2FzZSBtdC5NSU5fVkFMVUU6aWYoIXUpY29udGludWU7ZC5NSU5fVkFMVUU9dGhpcy5nZXRNaW5Qb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS55O2NvbnRpbnVlO2Nhc2UgbXQuTUFYX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO2QuTUFYX1ZBTFVFPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKG8ucG9pbnRzLGEsdSkueTtjb250aW51ZTtjYXNlIG10LlBFUkNFTlRBR0VfQ0hBTkdFOmlmKCFjKWNvbnRpbnVlO2QuUEVSQ0VOVEFHRV9DSEFOR0U9KGMueS1sLnkpL2wueTtjb250aW51ZTtjYXNlIG10LlNURVBfQVRfTUFYOmlmKCF1KWNvbnRpbnVlO2QuU1RFUF9BVF9NQVg9dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuU1RFUF9BVF9NSU46aWYoIXUpY29udGludWU7ZC5TVEVQX0FUX01JTj10aGlzLmdldE1pblBvaW50SW5SYW5nZShvLnBvaW50cyxhLHUpLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5NRUFOOmlmKCF1KWNvbnRpbnVlO2QuTUVBTj10aGlzLmdldE1lYW4oby5wb2ludHMsYSx1KTtjb250aW51ZTtjYXNlIG10LlJBV19DSEFOR0U6aWYoIWMpY29udGludWU7ZC5SQVdfQ0hBTkdFPWMudmFsdWUtbC52YWx1ZTtjb250aW51ZTtkZWZhdWx0OmNvbnRpbnVlfXJldHVybiBkfSk7cmV0dXJuIHIuc29ydCgobyxzKT0+e2xldCBhPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShvLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKSxsPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKTtyZXR1cm4gYTxsP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT1xYS5BU0NFTkRJTkc/LTE6MTphPmw/dGhpcy5zb3J0aW5nSW5mby5vcmRlcj09PXFhLkFTQ0VORElORz8xOi0xOjB9KSxyfWdldFNvcnRhYmxlVmFsdWUoZSxpKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIE51bWJlci5pc05hTihuKXx8Ik5hTiI9PT1ufHxudWxsPT1uPy0xLzA6bn0oaT09PW10LlJVTj90aGlzLmNoYXJ0TWV0YWRhdGFNYXBbZS5pZF0uZGlzcGxheU5hbWU6ZVtpXSl9b3JkZXJDb2x1bW5zKGUpe3RoaXMuZWRpdENvbHVtbkhlYWRlcnMuZW1pdCh7aGVhZGVyczplLGRhdGFUYWJsZU1vZGU6dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9fby5SQU5HRTpfby5TSU5HTEV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2NoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLHN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb246InN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGNvbHVtbkhlYWRlcnM6ImNvbHVtbkhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIn0sZGVjbHM6MSx2YXJzOjUsY29uc3RzOltbMywiaGVhZGVycyIsImRhdGEiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInRiLWRhdGEtdGFibGUiLDApLFAoInNvcnREYXRhQnkiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNvcnREYXRhQnkuZW1pdChvKX0pKCJvcmRlckNvbHVtbnMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9yZGVyQ29sdW1ucyhvKX0pLHYoKSksMiZlJiZiKCJoZWFkZXJzIixpLmNvbHVtbkhlYWRlcnMpKCJkYXRhIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixpLnNtb290aGluZ0VuYWJsZWQpfSxkZXBlbmRlbmNpZXM6W1lsZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7dmFyIHRHZT1bInN0ZXBTcGFuIl07ZnVuY3Rpb24gbkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDUpLHYoKX19ZnVuY3Rpb24gaUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDYpLHYoKX19dmFyIHJHZT1mdW5jdGlvbihuLHQpe3JldHVybntmb2I6ITAsdW5yZW1vdmFibGU6bixwcm9zcGVjdGl2ZTp0fX0sS2xlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsbG93UmVtb3ZhbD0hMCx0aGlzLmlzUHJvc3BlY3RpdmU9ITEsdGhpcy5zdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmZvYlJlbW92ZWQ9bmV3IEd9bmdPbkNoYW5nZXMoZSl7ZS5zdGVwJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50JiZ0aGlzLnN0ZXBTcGFuLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXZhbGlkYXRlU3RlcChlKXtsZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpOygiICI9PT1lLmtleXx8aXNOYU4oTnVtYmVyKGkpKSkmJmUucHJldmVudERlZmF1bHQoKX1zdGVwVHlwZWQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPWUudGFyZ2V0LmlubmVyVGV4dDt0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoIiIhPT1pP051bWJlcihpKTpudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh0R2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGVwU3Bhbj1yLmZpcnN0KX19LGlucHV0czp7c3RlcDoic3RlcCIsYWxsb3dSZW1vdmFsOiJhbGxvd1JlbW92YWwiLGlzUHJvc3BlY3RpdmU6ImlzUHJvc3BlY3RpdmUifSxvdXRwdXRzOntzdGVwQ2hhbmdlZDoic3RlcENoYW5nZWQiLGZvYlJlbW92ZWQ6ImZvYlJlbW92ZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjUsdmFyczo3LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbImNvbnRlbnRlZGl0YWJsZSIsIiIsInJvbGUiLCJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCIsIkVkaXQgc3RlcCIsMywiaW5uZXJIVE1MIiwiYmx1ciIsImtleXByZXNzIiwia2V5ZG93bi5lbnRlciIsImtleWRvd24uc2hpZnQuZW50ZXIiXSxbInN0ZXBTcGFuIiwiIl0sWyJhcmlhLWxhYmVsIiwiRGVzZWxlY3QgZm9iIiwzLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEsMiksUCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleXByZXNzIixmdW5jdGlvbihvKXtyZXR1cm4gaS52YWxpZGF0ZVN0ZXAobyl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleWRvd24uc2hpZnQuZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBvLnByZXZlbnREZWZhdWx0KCl9KSx2KCksRSgzLG5HZSwyLDAsImJ1dHRvbiIsMyksRSg0LGlHZSwyLDAsImJ1dHRvbiIsMyksdigpKSwyJmUmJihiKCJuZ0NsYXNzIix0byg0LHJHZSwhaS5hbGxvd1JlbW92YWwsaS5pc1Byb3NwZWN0aXZlKSkseCgxKSxiKCJpbm5lckhUTUwiLGkuc3RlcCxYRikseCgyKSxiKCJuZ0lmIixpLmFsbG93UmVtb3ZhbCkseCgxKSxiKCJuZ0lmIixpLmlzUHJvc3BlY3RpdmUpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7cGFkZGluZzoycHggMnB4IDJweCA0cHg7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6bWluLWNvbnRlbnR9LmZvYltfbmdjb250ZW50LSVDT01QJV0gPiAucHJvc3BlY3RpdmVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctdG9wOjFweH0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6Z3JhYn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlci5wcm9zcGVjdGl2ZXtjdXJzb3I6cG9pbnRlcn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS5mb2IudW5yZW1vdmFibGVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDRweH0uZm9iLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggZGFzaGVkICM5ZTllOWU7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTdweH1zcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtmb250LXNpemU6MTFweDt3aWR0aDoxMXB4O2hlaWdodDoxMXB4O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjb2xvcjppbmhlcml0fWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjExMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOWU5ZTllO2NvbG9yOiNlZWU7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2UwZTBlMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHNHZT1bInN0YXJ0Rm9iV3JhcHBlciJdLGFHZT1bImVuZEZvYldyYXBwZXIiXSxsR2U9WyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiXTtmdW5jdGlvbiBjR2Uobix0KXsxJm4mJk4oMCwiZGl2Iiw3KX1mdW5jdGlvbiB1R2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMyw0KSxFKDIsY0dlLDEsMCwiZGl2Iiw1KSxOKDMsImNhcmQtZm9iIiw2KSx2KCkpLDImbil7bGV0IGU9TSgyKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gZEdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLEUoMSx1R2UsNCw3LCJkaXYiLDEpLGcoMiwiZGl2IiwyKSxQKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkubW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKHIpKX0pKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5wcm9zcGVjdGl2ZUZvYkNsaWNrZWQocikpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKSl9KSx2KCksWnQoKX1pZigyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLG51bGwhPT1lLnByb3NwZWN0aXZlU3RlcCkseCgxKSxiKCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpfX1mdW5jdGlvbiBwR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMik7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRVhURU5ERURfTElORSxyKSl9KSx2KCl9fWZ1bmN0aW9uIGhHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMyw4KSxFKDIscEdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMCksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gZkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxMSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDIpO3JldHVybiBvZShvLnN0YXJ0RHJhZyhvLkZvYi5FTkQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLHYoKX19ZnVuY3Rpb24gbUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzLDEyKSxFKDIsZkdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMyksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKTtyZXR1cm4gb2Uoci5vbkZvYlJlbW92ZWQoci5Gb2IuRU5EKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCkpLHgoMiksYigibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSx4KDEpLGIoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX12YXIgQnI9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5TVEFSVD0xXT0iU1RBUlQiLG5bbi5FTkQ9Ml09IkVORCJ9KEJyfHwoQnI9e30pKSxCcikpKCksZ0dlPXtzdGFydDpCci5TVEFSVCxlbmQ6QnIuRU5EfSxuTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lLHRoaXMuc2hvd0V4dGVuZGVkTGluZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZD0hMSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsLHRoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uPW51bGwsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRyx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmhhc0ZvYk1vdmVkPSExLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPUJyLk5PTkUsdGhpcy5hZmZvcmRhbmNlPUdvLk5PTkUsdGhpcy5tb3VzZUxpc3RlbmVyPXRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksdGhpcy5zdG9wTGlzdGVuZXI9dGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpLHRoaXMuRm9iPUJyLHRoaXMuVGltZVNlbGVjdGlvbkFmZm9yZGFuY2U9R299Z2V0Q3NzVHJhbnNsYXRlUHhGb3JTdGFydEZvYigpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbj8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvclByb3NwZWN0aXZlRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9c3RvcEV2ZW50UHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9c3RhcnREcmFnKGUsaSxyKXtpIT09R28uRk9CJiZ0aGlzLnN0b3BFdmVudFByb3BhZ2F0aW9uKHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9ZSx0aGlzLmFmZm9yZGFuY2U9aX1zdG9wRHJhZygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9QnIuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkJiZ0aGlzLnRpbWVTZWxlY3Rpb24mJnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnRoaXMudGltZVNlbGVjdGlvbixhZmZvcmRhbmNlOnRoaXMuYWZmb3JkYW5jZX0pLHRoaXMuYWZmb3JkYW5jZT1Hby5OT05FLHRoaXMuaGFzRm9iTW92ZWQ9ITF9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTH1zaG91bGRTd2FwRm9icyhlKXtyZXR1cm4hKCF0aGlzLnRpbWVTZWxlY3Rpb258fCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKSYmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP2U8dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA6dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5TVEFSVCYmZT50aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldE5ld1RpbWVTZWxlY3Rpb24oZSxpKXtsZXQgcj17Li4uaX07aWYoIXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm4gcjtpZighdGhpcy50aW1lU2VsZWN0aW9uLmVuZClyZXR1cm4gci5zdGFydD17c3RlcDplfSxyO2lmKHRoaXMuc2hvdWxkU3dhcEZvYnMoZSkpe2xldFtvLHNdPXRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl07cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPWdHZVtzXSxyW29dPXRoaXMudGltZVNlbGVjdGlvbltzXSxyW3NdPXtzdGVwOmV9LHJ9cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EPyhyLmVuZD17c3RlcDplfSxyKTooci5zdGFydD17c3RlcDplfSxyKX1nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSl7bGV0IGk9bnVsbCxyPXRoaXMuZ2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKSxvPXRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2UubW92ZW1lbnRZOmUubW92ZW1lbnRYO3JldHVybiB0aGlzLmlzTW92aW5nSGlnaGVyKHIsbyk/aT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24ocik6dGhpcy5pc01vdmluZ0xvd2VyKHIsbykmJihpPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKHIpKSxudWxsPT09aT9udWxsOml9bW91c2VNb3ZlKGUpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSlyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7aWYobnVsbD09PWl8fCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuO2xldCByPXRoaXMuZ2V0TmV3VGltZVNlbGVjdGlvbihpLHRoaXMudGltZVNlbGVjdGlvbik7dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cn0pLHRoaXMuaGFzRm9iTW92ZWQ9ITB9bW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKGUpe2lmKG51bGwhPXRoaXMudGltZVNlbGVjdGlvbj8uZW5kKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtudWxsIT09aSYmdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChpKX1pc01vdmluZ0xvd2VyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPHRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaTwwJiZyPnRoaXMubG93ZXN0U3RlcH1pc01vdmluZ0hpZ2hlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZT50aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk+MCYmcjx0aGlzLmhpZ2hlc3RTdGVwfWdldERyYWdnaW5nRm9iQ2VudGVyKCl7bGV0IGU9dGhpcy5nZXRDdXJyZW50Rm9iKCk/Lm5hdGl2ZUVsZW1lbnQ7aWYoIWUpcmV0dXJuIDA7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ascj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2ktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnItdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1nZXRDdXJyZW50Rm9iKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnN0YXJ0Rm9iV3JhcHBlcjtjYXNlIEJyLkVORDpyZXR1cm4gdGhpcy5lbmRGb2JXcmFwcGVyO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZUZvYldyYXBwZXJ9fWdldEN1cnJlbnRGb2JTdGVwKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA7Y2FzZSBCci5FTkQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZVN0ZXA/P3ZvaWQgMH19Z2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09VnMuVkVSVElDQUw/ZS5jbGllbnRZLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLmNsaWVudFgtdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1zdGVwVHlwZWQoZSxpKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZCYmdGhpcy5vbkZvYlJlbW92ZWQoZSkpO2xldCByPXsuLi50aGlzLnRpbWVTZWxlY3Rpb259O2U9PT1Cci5TVEFSVD9yLnN0YXJ0PXtzdGVwOml9OmU9PT1Cci5FTkQmJihyLmVuZD17c3RlcDppfSksbnVsbCE9PXIuZW5kJiZyLnN0YXJ0LnN0ZXA+ci5lbmQuc3RlcCYmKHI9e3N0YXJ0OnIuZW5kLGVuZDpyLnN0YXJ0fSksdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cixhZmZvcmRhbmNlOkdvLkZPQl9URVhUfSl9cHJvc3BlY3RpdmVGb2JDbGlja2VkKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGk9dGhpcy5nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKTshaXx8KHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9BRERFRCx0aW1lU2VsZWN0aW9uOml9KSx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpKX1nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKXtpZih0aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3tzdGFydDp7c3RlcDpNYXRoLm1pbih0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9LGVuZDp7c3RlcDpNYXRoLm1heCh0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9fTp7c3RhcnQ6e3N0ZXA6dGhpcy5wcm9zcGVjdGl2ZVN0ZXB9LGVuZDpudWxsfX1vbkZvYlJlbW92ZWQoZSl7ZSE9PUJyLkVORD9udWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246e3N0YXJ0OnRoaXMudGltZVNlbGVjdGlvbi5lbmQsZW5kOm51bGx9fSk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6R28uRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7Li4udGhpcy50aW1lU2VsZWN0aW9uLGVuZDpudWxsfX0pfW9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpe3RoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLWZvYi1jb250cm9sbGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHNHZSw1KSxsdChhR2UsNSksbHQobEdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YXJ0Rm9iV3JhcHBlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5lbmRGb2JXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnByb3NwZWN0aXZlRm9iV3JhcHBlcj1yLmZpcnN0KX19LGlucHV0czp7YXhpc0RpcmVjdGlvbjoiYXhpc0RpcmVjdGlvbiIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsY2FyZEZvYkhlbHBlcjoiY2FyZEZvYkhlbHBlciIsc3RhcnRTdGVwQXhpc1Bvc2l0aW9uOiJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGVuZFN0ZXBBeGlzUG9zaXRpb246ImVuZFN0ZXBBeGlzUG9zaXRpb24iLGhpZ2hlc3RTdGVwOiJoaWdoZXN0U3RlcCIsbG93ZXN0U3RlcDoibG93ZXN0U3RlcCIsc2hvd0V4dGVuZGVkTGluZToic2hvd0V4dGVuZGVkTGluZSIsaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkOiJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLHByb3NwZWN0aXZlU3RlcDoicHJvc3BlY3RpdmVTdGVwIixwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb246InByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLG9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZDoib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSxFKDEsZEdlLDMsMiwibmctY29udGFpbmVyIiwwKSxFKDIsaEdlLDQsNSwiZGl2IiwxKSxFKDMsbUdlLDQsNSwiZGl2IiwxKSx2KCkpLDImZSYmKHgoMSksYigibmdJZiIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpLHgoMSksYigibmdJZiIsaS50aW1lU2VsZWN0aW9uKSx4KDEpLGIoIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLEtsZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkPSExLHRoaXMuZGlzYWJsZUludGVyYWN0aW9uPSExLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLkhPUklaT05UQUwsdGhpcy5jYXJkRm9iSGVscGVyPXtnZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyksZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKX0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCk6IiJ9Z2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQuc3RlcD8/dGhpcy5taW5NYXhTdGVwLm1heFN0ZXApOm51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/bnVsbDp0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnByb3NwZWN0aXZlU3RlcCl9b25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKGUpe3RoaXMucHJvc3BlY3RpdmVTdGVwPWV9Z2V0SGlnaGVzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1heFN0ZXB9Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWluU3RlcH1nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpe2xldCBpPU1hdGgucm91bmQodGhpcy5zY2FsZS5yZXZlcnNlKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sZSkpO3JldHVybiBpPnRoaXMuZ2V0SGlnaGVzdFN0ZXAoKT90aGlzLmdldEhpZ2hlc3RTdGVwKCk6aTx0aGlzLmdldExvd2VzdFN0ZXAoKT90aGlzLmdldExvd2VzdFN0ZXAoKTppfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3RpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLHNjYWxlOiJzY2FsZSIsbWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQ6Im1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIixheGlzU2l6ZToiYXhpc1NpemUiLGlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZDoiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixkaXNhYmxlSW50ZXJhY3Rpb246ImRpc2FibGVJbnRlcmFjdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6MTMsY29uc3RzOltbMywiYXhpc0RpcmVjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLCJlbmRTdGVwQXhpc1Bvc2l0aW9uIiwicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIiwiaGlnaGVzdFN0ZXAiLCJsb3dlc3RTdGVwIiwicHJvc3BlY3RpdmVTdGVwIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiY2FyZEZvYkhlbHBlciIsInNob3dFeHRlbmRlZExpbmUiLCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiY2FyZC1mb2ItY29udHJvbGxlciIsMCksUCgib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdChvKX0pLHYoKSksMiZlJiYoT3QoInBvaW50ZXItZXZlbnRzIixpLmRpc2FibGVJbnRlcmFjdGlvbj8ibm9uZSI6ImFsbCIpLGIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpKSgiaGlnaGVzdFN0ZXAiLGkuZ2V0SGlnaGVzdFN0ZXAoKSkoImxvd2VzdFN0ZXAiLGkuZ2V0TG93ZXN0U3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwIixpLnByb3NwZWN0aXZlU3RlcCkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpKCJzaG93RXh0ZW5kZWRMaW5lIiwhMCkpfSxkZXBlbmRlbmNpZXM6W25PXSxzdHlsZXM6WyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciAudGltZS1mb2Itd3JhcHBlcntoZWlnaHQ6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHZHZT1bImRhdGFUYWJsZUNvbnRhaW5lciJdO2Z1bmN0aW9uIHlHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMjcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub3BlblRhYmxlRWRpdE1lbnUoKSl9KSxOKDEsIm1hdC1pY29uIiwyOCksZygyLCJzcGFuIiksRCgzLCJFZGl0IFRhYmxlIENvbHVtbnMiKSx2KCkoKX19ZnVuY3Rpb24gYkdlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyOSl9ZnVuY3Rpb24geEdlKG4sdCl7MSZuJiYoZygwLCJ0aCIpLEQoMSwiU21vb3RoZWQiKSx2KCkpfWZ1bmN0aW9uIENHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMzUpLEQoMiwiLyIpLFp0KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDEpLGIoImFsaWFzIixlLm1ldGFkYXRhLmFsaWFzKX19ZnVuY3Rpb24gd0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0ZCIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO3goMSkscWUoIiAiLGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQueSksIiAiKX19ZnVuY3Rpb24gTUdlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMzMpKDIsInRkIiwzNCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDIpLEUoNSxDR2UsMywxLCJuZy1jb250YWluZXIiLDI0KSxEKDYpLHYoKSxFKDcsd0dlLDIsMSwidGQiLDI0KSxnKDgsInRkIiksRCg5KSx2KCksZygxMCwidGQiKSxEKDExKSx2KCksZygxMiwidGQiKSxEKDEzKSxqKDE0LCJkYXRlIiksdigpLGcoMTUsInRkIiksRCgxNiksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxhdCgiY2xvc2VzdCIsZS5tZXRhZGF0YS5jbG9zZXN0KSx4KDIpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLGIoIm5nSWYiLGUubWV0YWRhdGEuYWxpYXMpLHgoMSkscWUoIiIsZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSwiICIpLHgoMSksYigibmdJZiIsaS5zbW9vdGhpbmdFbmFibGVkKSx4KDIpLHl0KGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQudmFsdWUpKSx4KDIpLHl0KGkuc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC5zdGVwKSkseCgyKSx5dChuZigxNCwxMSxlLmRhdGFQb2ludC53YWxsVGltZSwic2hvcnQiKSkseCgzKSxxZSgiICIsaS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUoZS5kYXRhUG9pbnQucmVsYXRpdmVUaW1lSW5NcyksIiAiKX19ZnVuY3Rpb24gU0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwzMSksZyg0LCJ0aCIpLEQoNSwiUnVuIiksdigpLEUoNix4R2UsMiwwLCJ0aCIsMjQpLGcoNywidGgiKSxEKDgsIlZhbHVlIiksdigpLGcoOSwidGgiKSxEKDEwLCJTdGVwIiksdigpLGcoMTEsInRoIiksRCgxMiwiVGltZSIpLHYoKSxnKDEzLCJ0aCIpLEQoMTQsIlJlbGF0aXZlIiksdigpKCkoKSxnKDE1LCJ0Ym9keSIpLEUoMTYsTUdlLDE3LDE0LCJuZy1jb250YWluZXIiLDMyKSx2KCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT10LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQscj10LmN1cnNvckxvY2F0aW9uLG89TSgpO3goNiksYigibmdJZiIsby5zbW9vdGhpbmdFbmFibGVkKSx4KDEwKSxiKCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpKSgibmdGb3JUcmFja0J5IixvLnRyYWNrQnlUb29sdGlwRGF0dW0pfX1mdW5jdGlvbiBFR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDQxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS50b2dnbGVUYWJsZUV4cGFuZGVkKCkpfSksTigxLCJtYXQtaWNvbiIsOSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJ0aXRsZSIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJFeHBhbmQgVGFibGUiOiJDb2xsYXBzZSBUYWJsZSIpLHgoMSksYigic3ZnSWNvbiIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJleHBhbmRfbW9yZV8yNHB4IjoiZXhwYW5kX2xlc3NfMjRweCIpfX12YXIgVEdlPWZ1bmN0aW9uKG4pe3JldHVybnsiZGF0YS10YWJsZS1jb250YWluZXIiOiEwLGV4cGFuZGVkOm59fTtmdW5jdGlvbiBER2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDM2LDM3KSgzLCJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIiwzOCksUCgic29ydERhdGFCeSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5zb3J0RGF0YUJ5KHIpKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHIpKX0pLHYoKSgpLGcoNCwiZGl2IiwzOSksRSg1LEVHZSwyLDIsImJ1dHRvbiIsNDApLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibmdDbGFzcyIsSG4oOSxUR2UsZS5jYXJkU3RhdGUudGFibGVFeHBhbmRlZCkpLHgoMiksYigiY2hhcnRNZXRhZGF0YU1hcCIsZS5jaGFydE1ldGFkYXRhTWFwKSgiZGF0YVNlcmllcyIsZS5kYXRhU2VyaWVzKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsZS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgiY29sdW1uSGVhZGVycyIsZS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGUuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsZS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoInNtb290aGluZ0VuYWJsZWQiLGUuc21vb3RoaW5nRW5hYmxlZCkseCgyKSxiKCJuZ0lmIixlLmNhbkV4cGFuZFRhYmxlKCkpfX12YXIgQUdlPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSxJR2U9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBQR2Uobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzNiksMiZuKXtsZXQgZT1NKDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTtPdCgibGVmdCIsby5mb3J3YXJkKGkueCxIbigzLEFHZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSxiKCJuZ0NsYXNzIixscCg1LElHZSkpfX12YXIgUkdlPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSxPR2U9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIGtHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwiZGl2IiwzNiksRSgyLFBHZSwxLDYsImRpdiIsNDIpLFp0KCkpLDImbil7bGV0IGU9TSgpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTt4KDEpLE90KCJyaWdodCIsby5mb3J3YXJkKGkueCxIbig0LFJHZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IiksYigibmdDbGFzcyIsSG4oNixPR2UsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLHgoMSksYigibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIEZHZShuLHQpezEmbiYmRSgwLGtHZSwzLDgsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIE5HZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiw0MyksUCgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uRm9iUmVtb3ZlZCgpKX0pLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpLGk9ZS5pbnRlcmFjdGlvblN0YXRlLHI9ZS54U2NhbGUsbz1lLnZpZXdFeHRlbnQscz1lLmRvbURpbWVuc2lvbixhPU0oKTt4KDEpLGIoImRpc2FibGVJbnRlcmFjdGlvbiIsIk5PTkUiIT09aSkoInRpbWVTZWxlY3Rpb24iLGEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoInNjYWxlIixyKSgibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG8ueCkoIm1pbk1heFN0ZXAiLGEubWluTWF4U3RlcCkoImF4aXNTaXplIixzLndpZHRoKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixhLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fWZ1bmN0aW9uIExHZShuLHQpezEmbiYmRSgwLE5HZSwyLDcsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciAkbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5SZW5kZXJlclR5cGU9cnIsdGhpcy5TY2FsZVR5cGU9U3IsdGhpcy5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ9ITEsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgRyx0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHLHRoaXMub3BlblRhYmxlRWRpdE1lbnVUb01vZGU9bmV3IEcsdGhpcy5vbkxpbmVDaGFydFpvb209bmV3IEcsdGhpcy5vbkNhcmRTdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5zb3J0aW5nSW5mbz17aGVhZGVyOm10LlJVTixvcmRlcjpxYS5BU0NFTkRJTkd9LHRoaXMueVNjYWxlVHlwZT1Tci5MSU5FQVIsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMucmVsYXRpdmVYRm9ybWF0dGVyPWlNLHRoaXMudmFsdWVGb3JtYXR0ZXI9em0sdGhpcy5zdGVwRm9ybWF0dGVyPXZzfXRvZ2dsZVlTY2FsZVR5cGUoKXt0aGlzLnlTY2FsZVR5cGU9dGhpcy55U2NhbGVUeXBlPT09U3IuTElORUFSP1NyLkxPRzEwOlNyLkxJTkVBUn1zb3J0RGF0YUJ5KGUpe3RoaXMuc29ydGluZ0luZm89ZSx0aGlzLm9uRGF0YVRhYmxlU29ydGluZy5lbWl0KGUpfXJlc2V0RG9tYWluKCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LnZpZXdCb3hSZXNldCgpfXRyYWNrQnlUb29sdGlwRGF0dW0oZSxpKXtyZXR1cm4gaS5pZH1nZXRDdXN0b21YRm9ybWF0dGVyKCl7c3dpdGNoKHRoaXMueEF4aXNUeXBlKXtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBpTTtjYXNlIFlpLlNURVA6cmV0dXJuIFNzZTtkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YShlLGkscil7bGV0IG89ZS5tYXAobD0+KHsuLi5sLG1ldGFkYXRhOnsuLi5sLm1ldGFkYXRhLGNsb3Nlc3Q6ITEsZGlzdFRvQ3Vyc29yUGl4ZWxzOk1hdGguaHlwb3QobC5kb21Qb2ludC54LXIueCxsLmRvbVBvaW50Lnktci55KSxkaXN0VG9DdXJzb3JYOmwuZGF0YVBvaW50LngtaS54LGRpc3RUb0N1cnNvclk6bC5kYXRhUG9pbnQueS1pLnl9fSkpLHM9MS8wLGE9MDtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoO2wrKylzPm9bbF0ubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzJiYocz1vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyxhPWwpO3N3aXRjaChvLmxlbmd0aCYmKG9bYV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBtby5BU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5kYXRhUG9pbnQueS1jLmRhdGFQb2ludC55KTtjYXNlIG1vLkRFU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+Yy5kYXRhUG9pbnQueS1sLmRhdGFQb2ludC55KTtjYXNlIG1vLk5FQVJFU1Q6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMtYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMpO2Nhc2UgbW8uTkVBUkVTVF9ZOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yWS1jLm1ldGFkYXRhLmRpc3RUb0N1cnNvclkpO2Nhc2UgbW8uREVGQVVMVDpjYXNlIG1vLkFMUEhBQkVUSUNBTDpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3BsYXlOYW1lPGMubWV0YWRhdGEuZGlzcGxheU5hbWU/LTE6bC5tZXRhZGF0YS5kaXNwbGF5TmFtZT5jLm1ldGFkYXRhLmRpc3BsYXlOYW1lPzE6MCl9fW9wZW5EYXRhRG93bmxvYWREaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50LHtkYXRhOntjYXJkSWQ6dGhpcy5jYXJkSWR9fSl9b25Gb2JSZW1vdmVkKCl7dGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdChXYS5GT0JfREVTRUxFQ1QpfXNob3dEYXRhVGFibGUoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb259c2hvd0ZvYkNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLm1pbk1heFN0ZXAmJih0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb258fHRoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkKX1jYW5FeHBhbmRUYWJsZSgpe3JldHVybiB0aGlzLmRhdGFTZXJpZXMuZmlsdGVyKGk9PkJEKGksdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubGVuZ3RoPjN9c2hvdWxkRXhwYW5kVGFibGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHR8fCF0aGlzLmNhcmRTdGF0ZT8udGFibGVFeHBhbmRlZCl9dG9nZ2xlVGFibGVFeHBhbmRlZCgpe3RoaXMub25DYXJkU3RhdGVDaGFuZ2VkLmVtaXQoey4uLnRoaXMuY2FyZFN0YXRlLHRhYmxlRXhwYW5kZWQ6dGhpcy5zaG91bGRFeHBhbmRUYWJsZSgpfSksdGhpcy5kYXRhVGFibGVDb250YWluZXImJih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodD0iIil9b3BlblRhYmxlRWRpdE1lbnUoKXt0aGlzLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlLmVtaXQodGhpcy5yYW5nZUVuYWJsZWQ/X28uUkFOR0U6X28uU0lOR0xFKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhNYykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdCh0Tyw1KSxsdCh2R2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubGluZUNoYXJ0PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmRhdGFUYWJsZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGNoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGNhcmRTdGF0ZToiY2FyZFN0YXRlIixEYXRhRG93bmxvYWRDb21wb25lbnQ6IkRhdGFEb3dubG9hZENvbXBvbmVudCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIixpc0NhcmRWaXNpYmxlOiJpc0NhcmRWaXNpYmxlIixpc1Bpbm5lZDoiaXNQaW5uZWQiLGxvYWRTdGF0ZToibG9hZFN0YXRlIixzaG93RnVsbFdpZHRoOiJzaG93RnVsbFdpZHRoIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIix0YWc6InRhZyIsdGl0bGU6InRpdGxlIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLHhBeGlzVHlwZToieEF4aXNUeXBlIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLGZvcmNlU3ZnOiJmb3JjZVN2ZyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ6ImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIscmFuZ2VFbmFibGVkOiJyYW5nZUVuYWJsZWQifSxvdXRwdXRzOntvbkZ1bGxTaXplVG9nZ2xlOiJvbkZ1bGxTaXplVG9nZ2xlIixvblBpbkNsaWNrZWQ6Im9uUGluQ2xpY2tlZCIsb25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25TdGVwU2VsZWN0b3JUb2dnbGVkOiJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLG9uRGF0YVRhYmxlU29ydGluZzoib25EYXRhVGFibGVTb3J0aW5nIixlZGl0Q29sdW1uSGVhZGVyczoiZWRpdENvbHVtbkhlYWRlcnMiLG9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlOiJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsb25MaW5lQ2hhcnRab29tOiJvbkxpbmVDaGFydFpvb20iLG9uQ2FyZFN0YXRlQ2hhbmdlZDoib25DYXJkU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MzgsdmFyczoyOCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscixvLHM7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGk9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAscj0kbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxvPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAscz0kbG9jYWxpemVgOkV4cGFuZCBUYWJsZeKQnzllNTlmZjUwYmZjYjQ3OTI3MmUyYjEwM2UxZTliMTE1MThlMmU0Y2XikJ82Mzc0ODgwMzQxMzkzMDIwNjEwOkV4cGFuZCBUYWJsZWAsW1sxLCJhbHdheXMtdmlzaWJsZSJdLFsxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsInRpdGxlIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsciwidGl0bGUiLCJNb3JlIGxpbmUgY2hhcnQgb3B0aW9ucyIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIixvLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibGluZV93ZWlnaHRfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIGRpYWxvZyB0byBkb3dubG9hZCBkYXRhIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImdldF9hcHBfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUgdG8gZWRpdCBkYXRhIHRhYmxlIGNvbHVtbnMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsiY2hhcnRDb250YWluZXIiLCIiXSxbImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbMywiZGlzYWJsZVVwZGF0ZSIsInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInhTY2FsZVR5cGUiLCJ5U2NhbGVUeXBlIiwiY3VzdG9tWEZvcm1hdHRlciIsImlnbm9yZVlPdXRsaWVycyIsInRvb2x0aXBUZW1wbGF0ZSIsInVzZURhcmtNb2RlIiwiY3VzdG9tVmlzVGVtcGxhdGUiLCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iLCJ2aWV3Qm94Q2hhbmdlZCJdLFsidG9vbHRpcCIsIiJdLFs0LCJuZ0lmIl0sWyJsaW5lQ2hhcnRDdXN0b21WaXMiLCIiXSxbImxpbmVDaGFydEN1c3RvbVhBeGlzVmlzIiwiIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSB0byBlZGl0IGRhdGEgdGFibGUgY29sdW1ucyIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImRpYW1ldGVyIiwiMTgiXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMywiYWxpYXMiXSxbMywibmdDbGFzcyJdLFsiZGF0YVRhYmxlQ29udGFpbmVyIiwiIl0sWzMsImNoYXJ0TWV0YWRhdGFNYXAiLCJkYXRhU2VyaWVzIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImNvbHVtbkhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJlZGl0Q29sdW1uSGVhZGVycyJdLFsxLCJib3R0b20tYXJlYSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiY2xhc3MiLCJleHBhbmQtYnV0dG9uIiwiYXJpYS1sYWJlbCIscywzLCJ0aXRsZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixzLDEsImV4cGFuZC1idXR0b24iLDMsInRpdGxlIiwiY2xpY2siXSxbMywibmdDbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMywiZGlzYWJsZUludGVyYWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInNjYWxlIiwibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLCJtaW5NYXhTdGVwIiwiYXhpc1NpemUiLCJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzZXREb21haW4oKX0pLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksTig5LCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTigxMSwibWF0LWljb24iLDkpLHYoKSxnKDEyLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLE4oMTMsIm1hdC1pY29uIiw5KSx2KCksZygxNCwiYnV0dG9uIiwxMSksTigxNSwibWF0LWljb24iLDEyKSx2KCksZygxNiwibWF0LW1lbnUiLG51bGwsMTMpKDE4LCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVZU2NhbGVUeXBlKCl9KSxOKDE5LCJtYXQtaWNvbiIsMTUpLGcoMjAsInNwYW4iKSxEKDIxLCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSIpLHYoKSgpLGcoMjIsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EYXRhRG93bmxvYWREaWFsb2coKX0pLE4oMjMsIm1hdC1pY29uIiwxNyksZygyNCwic3BhbiIpLEQoMjUsIkRvd25sb2FkIGRhdGEiKSx2KCkoKSxFKDI2LHlHZSw0LDAsImJ1dHRvbiIsMTgpLHYoKSgpKCksZygyNywiZGl2IiwxOSwyMCksRSgyOSxiR2UsMSwwLCJtYXQtc3Bpbm5lciIsMjEpLGcoMzAsImxpbmUtY2hhcnQiLDIyKSxQKCJvblZpZXdCb3hPdmVycmlkZGVuIixmdW5jdGlvbihvKXtyZXR1cm4gaS5pc1ZpZXdCb3hPdmVycmlkZGVuPW99KSgidmlld0JveENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbS5lbWl0KG8pfSksdigpLEUoMzEsU0dlLDE3LDMsIm5nLXRlbXBsYXRlIixudWxsLDIzLGVuKSx2KCkoKSxFKDMzLERHZSw2LDExLCJuZy1jb250YWluZXIiLDI0KSxFKDM0LEZHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI1LGVuKSxFKDM2LExHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI2LGVuKSksMiZlKXtsZXQgcj1zdCgxNyksbz1zdCgzMikscz1zdCgzNSksYT1zdCgzNyk7eCgzKSx4cigidGl0bGUiLGkudGFnKSx4cigidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSx4KDIpLGIoImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFXKDcsMjQsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVyg4LDI2LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSx4KDQpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMiksYigic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLHgoMSksYigibWF0TWVudVRyaWdnZXJGb3IiLHIpLHgoMTIpLGIoIm5nSWYiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpLHgoMyksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgiY3VzdG9tVmlzVGVtcGxhdGUiLHMpKCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsYSkseCgzKSxiKCJuZ0lmIixpLnNob3dEYXRhVGFibGUoKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLF92LHRPLCRuLFpuLEl1LEVjLFB1LHZvLHZ2LHl2LFFsZSxKbGUsZnQsVTBdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH1bX25naG9zdC0lQ09NUCVdOmhhcyguZXhwYW5kLWJ1dHRvbil7cGFkZGluZzo0cHggMTZweCAwfS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWJhc2lzOjI5OHB4fS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoLmV4cGFuZC1idXR0b24pKXtmbGV4LWdyb3c6MX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6NXB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIGF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEuMmVtO2xpbmUtaGVpZ2h0OjB9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOnZlcnRpY2FsfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjExcHg7dG9wOjExcHh9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMHB4O21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDo1MGVtO292ZXJmbG93OmF1dG87cmVzaXplOnZlcnRpY2FsfS5kYXRhLXRhYmxlLWNvbnRhaW5lci5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uYm90dG9tLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBWR2Uobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxpKT0+e2xldCByPXRbaV0sbz1lLnBvaW50cyxzPXIucG9pbnRzO3JldHVybiBlLnJ1bklkPT09ci5ydW5JZCYmby5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+e2xldCBjPXNbbF07cmV0dXJuIGEueD09PWMueCYmYS55PT09Yy55fSl9KX12YXIgZWNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PSRuZSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRyx0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodUspLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChtXyksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChidSksdGhpcy5mb3JjZVN2ZyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc0spLHRoaXMuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLnhTY2FsZVR5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KS5waXBlKEIoaT0+e3N3aXRjaChpKXtjYXNlIFlpLlNURVA6Y2FzZSBZaS5SRUxBVElWRTpyZXR1cm4gU3IuTElORUFSO2Nhc2UgWWkuV0FMTF9USU1FOnJldHVybiBTci5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHtpfWApfX0pKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLnBpcGUoQihpPT5pPjApKSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksQihsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KExwLHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUobD0+Qm9vbGVhbihsKSksQihsPT5sKSxRcygxKSkucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLGRpKFZHZSkpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoJEQpKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEIoKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcCh1PT4oey4uLnUsc2VyaWVzSWQ6dS5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksQihsPT5sLm1hcChjPT57bGV0IHU9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAoZD0+KHsuLi5kLHJlbGF0aXZlVGltZUluTXM6ZC53YWxsVGltZS11fSkpfX0pKSxzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+bC5tYXAodT0+KHsuLi51LHBvaW50czp1LnBvaW50cy5tYXAoZD0+e2xldCBwO3N3aXRjaChjKXtjYXNlIFlpLlJFTEFUSVZFOnA9ZC5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgWWkuV0FMTF9USU1FOnA9ZC53YWxsVGltZTticmVhaztkZWZhdWx0OnA9ZC5zdGVwfXJldHVybnsuLi5kLHg6cH19KX0pKSksUXMoMSkpO3RoaXMubWluTWF4U3RlcHMkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChmWix0aGlzLmNhcmRJZCksdGhpcy5zdG9yZS5zZWxlY3QobVosdGhpcy5jYXJkSWQpXSkucGlwZShCKChbbCxjXSk9PntpZihsJiZjKXJldHVybnttaW5TdGVwOk1hdGgubWF4KGw/Lm1pblN0ZXAsYz8ubWluU3RlcCksbWF4U3RlcDpNYXRoLm1pbihsPy5tYXhTdGVwLGM/Lm1heFN0ZXApfX0pKSx0aGlzLmRhdGFTZXJpZXMkPWEucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdCh2ZCkpLHZpKChbbCxjXSk9PntsZXQgdT1sLm1hcCgoe3Nlcmllc0lkOmQscG9pbnRzOnB9KT0+KHtpZDpkLHBvaW50czpwfSkpO3JldHVybiBjPD0wP2p0KHUpOmxvKGFzeW5jIGZ1bmN0aW9uKG4sdCl7TnVtYmVyLmlzRmluaXRlKHQpfHwodD0wKSx0PU1hdGgubWF4KDAsTWF0aC5taW4odCwxKSk7bGV0IGU9W107Zm9yKGxldCBpIG9mIG4pe2xldCByPWkucG9pbnRzWzBdPy55O2lmKGkucG9pbnRzLmV2ZXJ5KGM9PmMueT09cikpe2UucHVzaChpKTtjb250aW51ZX1sZXQgcz1pLnBvaW50cy5sZW5ndGg+MD8wOk5hTixhPTAsbD1pLnBvaW50cy5tYXAoYz0+e2xldCB1PWMueTtpZihOdW1iZXIuaXNGaW5pdGUodSkpe3M9cyp0KygxLXQpKnUsYSsrO2xldCBkPTE9PT10PzE6MS1NYXRoLnBvdyh0LGEpO3JldHVybnt4OmMueCx5OnMvZH19cmV0dXJue3g6Yy54LHk6dX19KTtlLnB1c2goe2lkOmkuaWQscG9pbnRzOmx9KX1yZXR1cm4gZX0odSxjKSkucGlwZShCKGQ9PntsZXQgcD11Lm1hcCgoaCxmKT0+KHtpZDpzKGguaWQpLHBvaW50czpkW2ZdLnBvaW50cy5tYXAoKHt5Om19LEMpPT4oey4uLmgucG9pbnRzW0NdLHk6bX0pKX0pKTtyZXR1cm5bLi4udSwuLi5wXX0pKX0pLFZuKFtdKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1wbihbdGhpcy5taW5NYXhTdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoVnApLHRoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0b3JlLnNlbGVjdChidSldKS5waXBlKEIoKFtsLGMsdSxkXSk9PmwmJmMmJmQ9PT1ZaS5TVEVQJiZ1P2NfKHUsbC5taW5TdGVwLGwubWF4U3RlcCk6bnVsbCkpLHRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoZ1osdGhpcy5jYXJkSWQpLHRoaXMuY29sdW1uSGVhZGVycyQ9cG4oW3RoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMuc3RvcmUuc2VsZWN0KF9fKV0pLnBpcGUoQigoW2wsYyx1XSk9PmwmJm51bGwhPT1sLmVuZD91OmMpKSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXAkPWEucGlwZSh2aShsPT5wbihsLm1hcChjPT50aGlzLmdldFJ1bkRpc3BsYXlOYW1lQW5kQWxpYXMoYy5ydW5JZCkucGlwZShCKHU9Pih7Li4uYywuLi51fSkpKSkpKSxzcih0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KHZkKSksQXIoMCksQigoW2wsYyx1LGRdKT0+e2xldCBwPXt9LGg9ZD4wO2ZvcihsZXQgZiBvZiBsKXtsZXR7c2VyaWVzSWQ6bSxydW5JZDpDLGRpc3BsYXlOYW1lOl8sYWxpYXM6eSxwYXJ0aXRpb25JbmRleDpJLHBhcnRpdGlvblNpemU6QX09ZjtwW21dPXt0eXBlOmZ2Lk9SSUdJTkFMLGlkOm0sYWxpYXM6eSxkaXNwbGF5TmFtZTpBPjE/YCR7X306ICR7SX1gOl8sdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KEMpKSxjb2xvcjp1W0NdPz8iI2ZmZiIsYXV4OiExLG9wYWNpdHk6MX19aWYoIWgpcmV0dXJuIHA7Zm9yKGxldFtmLG1db2YgT2JqZWN0LmVudHJpZXMocCkpe2xldCBDPXMoZik7cFtDXT17Li4ubSxpZDpDLHR5cGU6ZnYuREVSSVZFRCxhdXg6ITEsb3JpZ2luYWxTZXJpZXNJZDpmfSxtLmF1eD0hMCxtLm9wYWNpdHk9LjI1fXJldHVybiBwfSksVm4oe30pKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMuY2FyZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChtYykucGlwZShCKGw9PmxbdGhpcy5jYXJkSWRdfHx7fSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChCcCx0aGlzLmNhcmRJZCksdGhpcy5yYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGhaLHRoaXMuY2FyZElkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0UnVuRGlzcGxheU5hbWVBbmRBbGlhcyhlKXtyZXR1cm4gcG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpLHRoaXMuc3RvcmUuc2VsZWN0KGNBLHtydW5JZDplfSldKS5waXBlKEIoKFtpLHIsb10pPT57bGV0IHM9bnVsbCE9PWk/cltpXT8/bnVsbDpudWxsO3JldHVybntkaXNwbGF5TmFtZTpvfHxzP28/Lm5hbWU/PyIuLi4iOmUsYWxpYXM6c319KSl9c3RlcFNlcmllc1RvTGluZVNlcmllcyhlLGkpe2xldCByPWk9PT1ZaS5TVEVQO3JldHVybiBlLm1hcChvPT57bGV0IHM9MWUzKm8ud2FsbFRpbWU7cmV0dXJuey4uLm8seDpyP28uc3RlcDpzLHk6by52YWx1ZSx3YWxsVGltZTpzLHJlbGF0aXZlVGltZUluTXM6MH19KX1vbkRhdGFUYWJsZVNvcnRpbmcoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChnbmUoZSkpfW9uQ2FyZFN0YXRlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxQKHtjYXJkSWQ6dGhpcy5jYXJkSWQsc2V0dGluZ3M6ZX0pKX1vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goey4uLmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uU3RlcFNlbGVjdG9yVG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uTGluZUNoYXJ0Wm9vbShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElQKHt2aWV3Qm94OmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfWVkaXRDb2x1bW5IZWFkZXJzKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goblAoe21vZGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MjMsdmFyczo2OSxjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywiY2FyZElkIiwiY2hhcnRNZXRhZGF0YU1hcCIsIkRhdGFEb3dubG9hZENvbXBvbmVudCIsImRhdGFTZXJpZXMiLCJpZ25vcmVPdXRsaWVycyIsImlzQ2FyZFZpc2libGUiLCJpc1Bpbm5lZCIsImxvYWRTdGF0ZSIsInNob3dGdWxsV2lkdGgiLCJzbW9vdGhpbmdFbmFibGVkIiwidGFnIiwidGl0bGUiLCJjYXJkU3RhdGUiLCJ0b29sdGlwU29ydCIsInhBeGlzVHlwZSIsInhTY2FsZVR5cGUiLCJ1c2VEYXJrTW9kZSIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiZm9yY2VTdmciLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsIm1pbk1heFN0ZXAiLCJjb2x1bW5IZWFkZXJzIiwicmFuZ2VFbmFibGVkIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLCJvbkRhdGFUYWJsZVNvcnRpbmciLCJvbkxpbmVDaGFydFpvb20iLCJlZGl0Q29sdW1uSGVhZGVycyIsIm9uQ2FyZFN0YXRlQ2hhbmdlZCIsIm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzY2FsYXItY2FyZC1jb21wb25lbnQiLDApLFAoIm9uRnVsbFNpemVUb2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSgib25WaXNpYmlsaXR5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZpc2liaWxpdHlDaGFuZ2Uobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZChvKX0pKCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZChvKX0pKCJvbkRhdGFUYWJsZVNvcnRpbmciLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRGF0YVRhYmxlU29ydGluZyhvKX0pKCJvbkxpbmVDaGFydFpvb20iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbShvKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24obyl7cmV0dXJuIGkuZWRpdENvbHVtbkhlYWRlcnMobyl9KSgib25DYXJkU3RhdGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNhcmRTdGF0ZUNoYW5nZWQobyl9KSgib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksaigyMiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY2FyZElkIixpLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFcoMSwyNSxpLmNoYXJ0TWV0YWRhdGFNYXAkKSkoIkRhdGFEb3dubG9hZENvbXBvbmVudCIsaS5EYXRhRG93bmxvYWRDb21wb25lbnQpKCJkYXRhU2VyaWVzIixXKDIsMjcsaS5kYXRhU2VyaWVzJCkpKCJpZ25vcmVPdXRsaWVycyIsVygzLDI5LGkuaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLGkuaXNWaXNpYmxlKSgiaXNQaW5uZWQiLFcoNCwzMSxpLmlzUGlubmVkJCkpKCJsb2FkU3RhdGUiLFcoNSwzMyxpLmxvYWRTdGF0ZSQpKSgic2hvd0Z1bGxXaWR0aCIsVyg2LDM1LGkuc2hvd0Z1bGxXaWR0aCQpKSgic21vb3RoaW5nRW5hYmxlZCIsVyg3LDM3LGkuc21vb3RoaW5nRW5hYmxlZCQpKSgidGFnIixXKDgsMzksaS50YWckKSkoInRpdGxlIixXKDksNDEsaS50aXRsZSQpKSgiY2FyZFN0YXRlIixXKDEwLDQzLGkuY2FyZFN0YXRlJCkpKCJ0b29sdGlwU29ydCIsVygxMSw0NSxpLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFcoMTIsNDcsaS54QXhpc1R5cGUkKSkoInhTY2FsZVR5cGUiLFcoMTMsNDksaS54U2NhbGVUeXBlJCkpKCJ1c2VEYXJrTW9kZSIsVygxNCw1MSxpLnVzZURhcmtNb2RlJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE1LDUzLGkubGlua2VkVGltZVNlbGVjdGlvbiQpKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsVygxNiw1NSxpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsVygxNyw1NyxpLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQpKSgiZm9yY2VTdmciLFcoMTgsNTksaS5mb3JjZVN2ZyQpKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLFcoMTksNjEsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibWluTWF4U3RlcCIsVygyMCw2MyxpLm1pbk1heFN0ZXBzJCkpKCJjb2x1bW5IZWFkZXJzIixXKDIxLDY1LGkuY29sdW1uSGVhZGVycyQpKSgicmFuZ2VFbmFibGVkIixXKDIyLDY3LGkucmFuZ2VFbmFibGVkJCkpfSxkZXBlbmRlbmNpZXM6W212LCRsZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB6R2Uobix0LGUpe2xldCBpPVtdLHtsZWZ0OnIscmlnaHQ6b309dCxzPShvLXIpL2UsYT0wLGw9MDtmb3IobGV0IGM9MDtjPGU7YysrKXtsZXQgdT1yK2MqcyxkPXUrcyxwPWM9PT1lLTEsaD1sO2ZvcihsPTA7YTxuLmxlbmd0aDspe2xldCBmPW5bYV0sbT1qR2UoZix1LGQsIXApO2lmKGgrPW0uY3VycixsKz1tLm5leHQsZi54K2YuZHg+ZClicmVhazthKyt9aS5wdXNoKHt4OnUsZHg6cyx5Omh9KX1yZXR1cm4gaX1mdW5jdGlvbiBqR2Uobix0LGUsaSl7bGV0IHI9bi54LG89bi54K24uZHg7aWYocj5lfHxvPHQpcmV0dXJue2N1cnI6MCxuZXh0OjB9O2lmKDA9PT1uLmR4KXJldHVybiBpJiZvPj1lP3tjdXJyOjAsbmV4dDpuLnl9OntjdXJyOm4ueSxuZXh0OjB9O2xldCBzPU1hdGgubWluKG8sZSktTWF0aC5tYXgocix0KTtyZXR1cm57Y3VycjpuLnkqcy9uLmR4LG5leHQ6MH19dmFyIHFHZT1ybygiLjJ+cyIpLFlHZT1ybygiLjR+ciIpLFhHZT1ybygiLjJ+ZSIpO2Z1bmN0aW9uIG5jZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlND9xR2Uobik6dDwuMDAxP1hHZShuKTpZR2Uobil9dmFyIFFHZT1bIm1haW4iXSxLR2U9WyJ4QXhpcyJdLFpHZT1bInlBeGlzIl0sSkdlPVsiY29udGVudCJdLCRHZT1bImhpc3RvZ3JhbXMiXTtmdW5jdGlvbiBlNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIpKDEsInRleHQiKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLHgoMikseXQoZS50b29sdGlwRGF0YS54QXhpcy5sYWJlbCl9fWZ1bmN0aW9uIHQ2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIikoMSwidGV4dCIpLEQoMiksdigpKCkpLDImbil7bGV0IGU9TSgpO090KCJ0cmFuc2Zvcm0iLGUuZ2V0R3JvdXBUcmFuc2Zvcm0oZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSx4KDEpLHplKCJ5IixlLnRvb2x0aXBEYXRhLnlBeGlzLnBvc2l0aW9uKSx4KDEpLHFlKCIgIixlLnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIG42ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLFNhKCksS3QoMCksZygxLCJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciIsMTYpLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJ0aW1lU2VsZWN0aW9uIixlLnRpbWVTZWxlY3Rpb24pKCJzdGVwcyIsZS5nZXRTdGVwcygpKSgidGVtcG9yYWxTY2FsZSIsZS5zY2FsZXMudGVtcG9yYWxTY2FsZSl9fWZ1bmN0aW9uIGk2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIiksTigxLCJsaW5lIiwxNyksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O090KCJ0cmFuc2Zvcm0iLE0oKS5nZXRDc3NUcmFuc2xhdGVQeCgwLGUpKX19ZnVuY3Rpb24gcjZlKG4sdCl7MSZuJiYoam4oKSxOKDAsImxpbmUiLDIxKSl9ZnVuY3Rpb24gbzZlKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7T3QoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeChpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLngsaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS55KSl9fWZ1bmN0aW9uIHM2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLGcoMCwiZyIsMTgpLFAoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHIpe2xldCBzPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLHMsITApKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKG8pKX0pLEUoMSxyNmUsMSwwLCJsaW5lIiwxOSksTigyLCJwYXRoIiksRSgzLG82ZSwxLDIsImNpcmNsZSIsMjApLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO090KCJ0cmFuc2Zvcm0iLGkuZ2V0R3JvdXBUcmFuc2Zvcm0oZSkpKCJjb2xvciIsaS5nZXRIaXN0b2dyYW1GaWxsKGUpKSxhdCgiaGlzdG9ncmFtIiwhMCkoIm5vLWNvbG9yIiwhaS5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSkpLHgoMSksYigibmdJZiIsaS5tb2RlPT09aS5IaXN0b2dyYW1Nb2RlLk9GRlNFVCkseCgxKSx6ZSgiZCIsaS5nZXRIaXN0b2dyYW1QYXRoKGUpKSx4KDEpLGIoIm5nSWYiLGkudG9vbHRpcERhdGEpfX1mdW5jdGlvbiBhNmUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9TSgyKTt6ZSgiY3giLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBsNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsNCkoMSwiZyIpLE4oMiwicGF0aCIpLEUoMyxhNmUsMSwyLCJjaXJjbGUiLDIzKSx2KCksZyg0LCJnIiwyNCkoNSwidGV4dCIsMjUpLEQoNiksdigpKCkoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxPdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSx6ZSgiZCIsZS5nZXRIaXN0b2dyYW1QYXRoKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSxiKCJuZ0lmIixlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLHgoMSksT3QoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLngsZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi55KSkseCgyKSx5dChlLnRvb2x0aXBEYXRhLnZhbHVlLmxhYmVsKX19dmFyIGlPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMubW9kZT1Pci5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9Zm8uU1RFUCx0aGlzLnRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZT1Pcix0aGlzLlRpbWVQcm9wZXJ0eT1mbyx0aGlzLnRvb2x0aXBEYXRhPW51bGwsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOm5jZSxjb3VudDpybygiLjNuIiksd2FsbFRpbWU6a3YoIiVtLyVkICVYIiksc3RlcDpybygiLjBmIikscmVsYXRpdmU6aT0+cm8oIi4xciIpKGkvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe2xpKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+dGhpcy5vbk1vdXNlTW92ZShlKSl9Z2V0Q3NzVHJhbnNsYXRlUHgoZSxpKXtyZXR1cm5gdHJhbnNsYXRlKCR7ZX1weCwgJHtpfXB4KWB9Z2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaSl7aWYoIWUuYmlucy5sZW5ndGgpcmV0dXJue3g6MCxkeDowLHk6MH07bGV0IHI9ZS5iaW5zWzBdLG89ZS5iaW5zLnNsaWNlKC0xKVswXTtyZXR1cm4gaTxyLng/cjppPj1vLngrby5keD9vOmUuYmlucy5maW5kKGE9PmEueDw9aSYmaTxhLngrYS5keCl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZSgkTShlKSkseTp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKGUueSl9Ont4OjAseTowfX1nZXRIaXN0b2dyYW1QYXRoKGUpe2lmKCF0aGlzLnNjYWxlc3x8IWUuYmlucy5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUscj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89ZS5iaW5zWzBdLHM9ZS5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7aSgkTShvKSl9LCR7cigwKX1gXTtmb3IobGV0IGwgb2YgZS5iaW5zKWEucHVzaChgTCR7aSgkTShsKSl9LCR7cihsLnkpfWApO3JldHVybiBhLnB1c2goYEwke2koJE0ocykpfSwke3IoMCl9YCksYS5qb2luKCIiKX10cmFja0J5V2FsbFRpbWUoZSl7cmV0dXJuIGUud2FsbFRpbWV9Z2V0R3JvdXBUcmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuc2NhbGVzJiZ0aGlzLm1vZGUhPT1Pci5PVkVSTEFZP3RoaXMuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKSk6IiJ9Z2V0U3RlcHMoKXtyZXR1cm4gdGhpcy5kYXRhLm1hcChlPT5lLnN0ZXApfWlzVGltZVNlbGVjdGlvbkVuYWJsZWQoZSl7cmV0dXJuIEJvb2xlYW4odGhpcy5tb2RlPT09T3IuT0ZGU0VUJiZ0aGlzLnRpbWVQcm9wZXJ0eT09PWZvLlNURVAmJnRoaXMuc2NhbGVzJiZlKX1pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSl7cmV0dXJuIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHwobnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA9PT1lLnN0ZXA6dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA8PWUuc3RlcCYmdGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwPj1lLnN0ZXApfWdldEhpc3RvZ3JhbUZpbGwoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSk6IiJ9dXBkYXRlQ29sb3JPbkhvdmVyKGUsaSxyKXshdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fHRoaXMuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGkpfHwocj9lLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJuby1jb2xvciIpOmUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm5vLWNvbG9yIikpfWdldEdyaWRUaWNrWUxvY3MoKXtpZighdGhpcy5zY2FsZXN8fHRoaXMubW9kZT09PU9yLk9GRlNFVClyZXR1cm5bXTtsZXQgZT10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiBlLnRpY2tzKCkubWFwKGk9PmUoaSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuZG9tVmlzaWJsZT1lLGUmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQoZSl7aWYoIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pKXJldHVybjtsZXQgaT10aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxyPXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAsbz1lLnN0ZXA8aT9lLnN0ZXA6aSxzPXI7cz12b2lkIDA9PT1zP2Uuc3RlcD5pP2Uuc3RlcDppOmUuc3RlcD5zP2Uuc3RlcDpzLChvIT09aXx8cyE9PXIpJiZvIT09cyYmdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOm99LGVuZDp7c3RlcDpzfX0sYWZmb3JkYW5jZTpHby5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0V9KX1nZXRUaW1lVmFsdWUoZSl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIGZvLldBTExfVElNRTpyZXR1cm4gZS53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIGUuc3RlcDtjYXNlIGZvLlJFTEFUSVZFOnJldHVybiBlLndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXshdGhpcy5kb21WaXNpYmxlfHwodGhpcy5zY2FsZXM9dGhpcy5jb21wdXRlU2NhbGVzKHRoaXMuZGF0YSksdGhpcy5yZW5kZXJYQXhpcygpLHRoaXMucmVuZGVyWUF4aXMoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9Y29tcHV0ZVNjYWxlcyhlKXtsZXR7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDpzfT1pY2UoZSxfPT5mdW5jdGlvbihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5taW4oZSxpLngpLDEvMCl9KF8uYmlucyksXz0+anooXy5iaW5zLCh7eDp5LGR4Okl9KT0+eStJKSksYT1qeihlLF89Pmp6KF8uYmlucywoe3k6eX0pPT55KSksbD1EYygpLmRvbWFpbihbbyxzXSkubmljZSgpLGM9dGhpcy5tb2RlIT09T3IuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PWZvLldBTExfVElNRT9MbSgpOkRjKCksdT1lLm1hcChfPT50aGlzLmdldFRpbWVWYWx1ZShfKSkse21pbjpkLG1heDpwfT1pY2UodSxfPT5fKSxoPVtkLHBdO2MuZG9tYWluKGgpO2xldCBmPURjKCk7Zi5kb21haW4oWzAsYV0pO2xldCBtPXdtKHRoaXMuY29sb3J8fCIjMDAwIiksQz1EYygpO3JldHVybiBDLmRvbWFpbihoKSxsLnJhbmdlKFswLGldKSxDLnJhbmdlKFttLmJyaWdodGVyKCksbS5kYXJrZXIoKV0pLEMuaW50ZXJwb2xhdGUoTkgpLHRoaXMubW9kZT09PU9yLk9WRVJMQVk/KGMucmFuZ2UoW3Iscl0pLGYucmFuZ2UoW3IsMF0pKTooYy5yYW5nZShbci0odGhpcy5tb2RlPT09T3IuT0ZGU0VUP3ItdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLHJdKSxmLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOmwsZDNDb2xvclNjYWxlOkMsY291bnRTY2FsZTpmLHRlbXBvcmFsU2NhbGU6Y319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldHt3aWR0aDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxpPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMyxuKX0odGhpcy5zY2FsZXMuYmluU2NhbGUpLnRpY2tzKE1hdGgubWF4KDIsZS8yMCkpO2kudGlja0Zvcm1hdCh0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKSxpKFpQKHRoaXMueEF4aXMubmF0aXZlRWxlbWVudCkpfWdldFlBeGlzRm9ybWF0dGVyKCl7aWYodGhpcy5tb2RlPT09T3IuT1ZFUkxBWSlyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLmNvdW50O3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBmby5XQUxMX1RJTUU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5zdGVwO2Nhc2UgZm8uUkVMQVRJVkU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5yZWxhdGl2ZTtkZWZhdWx0OnRocm93IFJhbmdlRXJyb3IoYFkgYXhpcyBmb3JtYXR0ZXIgZm9yICR7dGhpcy50aW1lUHJvcGVydHl9IG11c3QgYmUgaW1wbGVtZW50ZWRgKX19Z2V0TWF4VGlja3MoZSl7bGV0e2hlaWdodDppfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxyPWkvMTU7aWYodGhpcy50aW1lUHJvcGVydHk9PT1mby5TVEVQKXtsZXRbbyxzXT1lLmRvbWFpbigpLGE9TWF0aC5tYXgocy1vKzEsMSk7cmV0dXJuIE1hdGgubWluKGEscil9cmV0dXJuIHJ9cmVuZGVyWUF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBlPXRoaXMubW9kZT09PU9yLk9WRVJMQVk/dGhpcy5zY2FsZXMuY291bnRTY2FsZTp0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlLGk9dGhpcy5nZXRNYXhUaWNrcyhlKSxyPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMixuKX0oZSkudGlja3MoTWF0aC5tYXgoMixpKSk7ci50aWNrRm9ybWF0KHRoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSkscihaUCh0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQpKX1maW5kQ2xvc2VzdERhdHVtSW5kZXgoZSl7bGV0IGk9ZS50YXJnZXQscj1pO2Zvcig7aSYmaSE9PXRoaXMuaGlzdG9ncmFtcy5uYXRpdmVFbGVtZW50OylyPWksaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGk/QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpOi0xfW9uTW91c2VNb3ZlRm9yVGVzdE9ubHkoZSl7cmV0dXJuIHRoaXMub25Nb3VzZU1vdmUoZSl9b25Nb3VzZU1vdmUoZSl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgaT1lLm9mZnNldFgscj1lLm9mZnNldFksbz10aGlzLmZpbmRDbG9zZXN0RGF0dW1JbmRleChlKTtpZihvPDApcmV0dXJuO2xldCBzPXRoaXMuc2NhbGVzLmJpblNjYWxlLmludmVydChpKSxhPXRoaXMuZGF0YVtvXSxsPXRoaXMuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGEscyk7dGhpcy50b29sdGlwRGF0YT17dmFsdWU6e3Bvc2l0aW9uOnt4OmkseTpyfSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5mb3JtYXR0ZXJzLmNvdW50KGwueSk6YFN0ZXA6ICR7dGhpcy5mb3JtYXR0ZXJzLnN0ZXAoYS5zdGVwKX1gfSx4QXhpczp7cG9zaXRpb246dGhpcy5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQobCkueCxsYWJlbDp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKCRNKGwpKX0seUF4aXM6e3Bvc2l0aW9uOnRoaXMuc2NhbGVzLmNvdW50U2NhbGUodGhpcy5tb2RlPT09T3IuT0ZGU0VUPzA6bC55KSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKHRoaXMuZ2V0VGltZVZhbHVlKGEpKTp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKGwueSl9LHhQb3NpdGlvbkluQmluQ29vcmQ6cyxjbG9zZXN0RGF0dW06YSxjbG9zZXN0QmluOmx9LHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFFHZSw1KSxsdChLR2UsNSksbHQoWkdlLDUpLGx0KEpHZSw1KSxsdCgkR2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWFpbj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS54QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS55QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5jb250ZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmhpc3RvZ3JhbXM9ci5maXJzdCl9fSxpbnB1dHM6e21vZGU6Im1vZGUiLHRpbWVQcm9wZXJ0eToidGltZVByb3BlcnR5Iixjb2xvcjoiY29sb3IiLGRhdGE6ImRhdGEiLHRpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24ifSxvdXRwdXRzOntvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMix2YXJzOjE1LGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJvblJlc2l6ZSIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdLFsibWFpbiIsIiJdLFsxLCJheGlzIiwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsxLCJ0b29sdGlwIl0sWzMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsxLCJheGlzIiwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbMSwiZ3JpZCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiaGlzdG9ncmFtcyIsIiJdLFszLCJ0cmFuc2Zvcm0iLCJoaXN0b2dyYW0iLCJuby1jb2xvciIsImNvbG9yIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsInRvb2x0aXAiLDQsIm5nSWYiXSxbMSwiaGlzdG9ncmFtLWNhcmQtZm9iIiwzLCJ0aW1lU2VsZWN0aW9uIiwic3RlcHMiLCJ0ZW1wb3JhbFNjYWxlIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXSxbIngyIiwiMTAwJSIsMSwidGljayJdLFszLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIl0sWyJjbGFzcyIsImJhc2VsaW5lIiwieDIiLCIxMDAlIiw0LCJuZ0lmIl0sWyJyIiwiMiIsMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWyJ4MiIsIjEwMCUiLDEsImJhc2VsaW5lIl0sWyJyIiwiMiJdLFsiciIsIjIiLDQsIm5nSWYiXSxbMSwidmFsdWUtbGFiZWwiXSxbIngiLCIzIiwieSIsIi0zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSksUCgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGpuKCksZygyLCJzdmciLDIpLE4oMywiZyIsbnVsbCwzKSxnKDUsImciLDQpLEUoNixlNmUsMywzLCJnIiw1KSx2KCkoKSxTYSgpLGcoNywiZGl2Iiw2KSxqbigpLGcoOCwic3ZnIiksTig5LCJnIixudWxsLDcpLGcoMTEsImciLDQpLEUoMTIsdDZlLDMsNCwiZyIsNSksdigpKCksRSgxMyxuNmUsMiwzLCJuZy1jb250YWluZXIiLDgpLHYoKSxnKDE0LCJzdmciLDksMTApKDE2LCJnIiwxMSksRSgxNyxpNmUsMiwyLCJnIiwxMiksdigpLGcoMTgsImciLG51bGwsMTMpLEUoMjAsczZlLDQsMTEsImciLDE0KSx2KCksRSgyMSxsNmUsNyw3LCJnIiwxNSksdigpKCkpLDImZSYmKGVhKCJtYWluICIraS5tb2RlKyIgIitpLnRpbWVQcm9wZXJ0eSkseCg2KSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDUpLE90KCJ0cmFuc2Zvcm0iLGkuZ2V0Q3NzVHJhbnNsYXRlUHgoOSwwKSkseCgxKSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDEpLGIoIm5nSWYiLGkuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZChpLnRpbWVTZWxlY3Rpb24pKSx4KDQpLGIoIm5nRm9yT2YiLGkuZ2V0R3JpZFRpY2tZTG9jcygpKSx4KDEpLGF0KCJoaXN0b2dyYW1zIiwhMCkoImxpbmtlZC10aW1lLXNpbmdsZS1zdGVwIixpLnRpbWVTZWxlY3Rpb24mJiFpLnRpbWVTZWxlY3Rpb24uZW5kKSx4KDIpLGIoIm5nRm9yT2YiLGkuZGF0YSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5V2FsbFRpbWUpLHgoMSksYigibmdJZiIsaS50b29sdGlwRGF0YSkpfSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX1bX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjEwcHh9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJjb250ZW50IHktYXhpcyIgIngtYXhpcyAuIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDUwcHg7Z3JpZC10ZW1wbGF0ZS1yb3dzOjFmciAzMHB4fS5tYWluLndhbGxfdGltZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA3NXB4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEwcHh9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aWRlb2dyYXBoaWM7dGV4dC1hbmNob3I6c3RhcnR9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjojNjE2MTYxO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBnW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOngtYXhpc30ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpoYW5naW5nO3RleHQtYW5jaG9yOm1pZGRsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eS1heGlzO292ZXJmbG93OmNsaXAgdmlzaWJsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTptaWRkbGU7dGV4dC1hbmNob3I6c3RhcnR9Lmhpc3RvZ3JhbS1jYXJkLWZvYltfbmdjb250ZW50LSVDT01QJV17bGVmdDo5cHg7cG9zaXRpb246YWJzb2x1dGV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiNkZGR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5lLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiM1NTV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjb250ZW50O292ZXJmbG93OnZpc2libGU7ei1pbmRleDoxfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1kYXNoYXJyYXk6Mn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utb3BhY2l0eTouNjtzdHJva2Utd2lkdGg6MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjYpKTtzdHJva2U6I2ZmZjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZTpjdXJyZW50Q29sb3I7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eToxO3N0cm9rZTpjdXJyZW50Q29sb3I7ZmlsbDpyZ2JhKDAsMCwwLDApfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyMjEsMjIxLDIyMSwuNCkgIWltcG9ydGFudH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDUxLDUxLDUxLC40KSAhaW1wb3J0YW50fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGp6KG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkpPT5NYXRoLm1heChlLHQoaSkpLC0xLzApfWZ1bmN0aW9uIGljZShuLHQsZSl7ZXx8KGU9dCk7bGV0IGk9MS8wLHI9LTEvMDtmb3IobGV0IG8gb2YgbilpPU1hdGgubWluKGksdChvKSkscj1NYXRoLm1heChyLGUobykpO3JldHVybnttaW46aSxtYXg6cn19ZnVuY3Rpb24gJE0obil7cmV0dXJuIG4ueCsuNSpuLmR4fWZ1bmN0aW9uIGQ2ZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMTQpLE4oMSwibWF0LXNwaW5uZXIiLDE1KSx2KCkpfWZ1bmN0aW9uIHA2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInRiLWhpc3RvZ3JhbSIsMTYpLFAoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvbkxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImRhdGEiLGUuZGF0YSkoIm1vZGUiLGUubW9kZSkoInRpbWVQcm9wZXJ0eSIsZS50aW1lUHJvcGVydHkoZS54QXhpc1R5cGUpKSgiY29sb3IiLGUucnVuQ29sb3JTY2FsZShlLnJ1bklkKSkoInRpbWVTZWxlY3Rpb24iLGUuY29udmVydFRvVGltZVNlbGVjdGlvbihlLmxpbmtlZFRpbWVTZWxlY3Rpb24pKX19ZnVuY3Rpb24gaDZlKG4sdCl7MSZuJiYoZygwLCJkaXYiLDE4KSxEKDEsIiBEYXRhIGZhaWxlZCB0byBsb2FkLiAiKSx2KCkpfWZ1bmN0aW9uIGY2ZShuLHQpe2lmKDEmbiYmRSgwLGg2ZSwyLDAsImRpdiIsMTcpLDImbil7bGV0IGU9TSgpO2IoIm5nSWYiLGUubG9hZFN0YXRlPT09ZS5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fXZhciBtNmU9ZnVuY3Rpb24obil7cmV0dXJue2JhY2tncm91bmRDb2xvcjpufX0scmNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uTGlua2VkVGltZVRvZ2dsZWQ9bmV3IEd9dGltZVByb3BlcnR5KGUpe3N3aXRjaChlKXtjYXNlIFlpLlNURVA6cmV0dXJuIGZvLlNURVA7Y2FzZSBZaS5XQUxMX1RJTUU6cmV0dXJuIGZvLldBTExfVElNRTtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBmby5SRUxBVElWRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCB4QXhpc1R5cGUgZm9yIGhpc3RvZ3JhbSB0aW1lIHByb3BlcnR5LiIpfX1jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9udWxsOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcH0sZW5kOmUuZW5kU3RlcD97c3RlcDplLmVuZFN0ZXB9Om51bGx9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiXV0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksTigyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSx2KCksZyg0LCJkaXYiLDQpLE4oNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksdigpLGcoNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxOKDksIm1hdC1pY29uIiw5KSx2KCksZygxMCwiYnV0dG9uIiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxOKDExLCJtYXQtaWNvbiIsOSksdigpKCksRSgxMixkNmUsMiwwLCJzcGFuIiwxMSksdigpLEUoMTMscDZlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksRSgxNCxmNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxlbikpLDImZSl7bGV0IHI9c3QoMTUpO3goMiksYigidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCkseCgyKSxiKCJuZ1N0eWxlIixIbigxMixtNmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSx6ZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLHgoMSksYigic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSx4KDIpLGIoInN2Z0ljb24iLGkuc2hvd0Z1bGxXaWR0aD8iZnVsbHNjcmVlbl9leGl0XzI0cHgiOiJmdWxsc2NyZWVuXzI0cHgiKSx4KDEpLGIoIm5nSWYiLGkubG9hZFN0YXRlPT09aS5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHgoMSksYigibmdJZiIsaS5kYXRhJiZpLmRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSx3cCxpTywkbixabix2byxVUCx2dix5dl0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJ0YWcgY29udHJvbHMiICJydW4gc3Bpbm5lciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweDtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjB9LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpydW47ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2dyaWQtYXJlYTpjb250cm9scztqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpzcGlubmVyO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9bWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3RvcDowO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9dGItaGlzdG9ncmFtW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxvY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5tb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpfWlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLkhJU1RPR1JBTVN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKG89PiEhbyYmdGhpcy5pc0hpc3RvZ3JhbUNhcmRNZXRhZGF0YShvKSksQihvPT5vKSkscj1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKTt0aGlzLmRhdGEkPXIucGlwZShCKChbbyxzXSk9PntsZXQgYT1vLnJ1bklkO3JldHVybiBzJiZzLmhhc093blByb3BlcnR5KGEpP2Z1bmN0aW9uKG4sdD0zMCl7aWYoIW4ubGVuZ3RofHx0PDEpcmV0dXJuW107bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bnVsbCxlPW51bGw7Zm9yKGxldHtiaW5zOml9b2Ygbil7aWYoIWkubGVuZ3RoKWNvbnRpbnVlO2xldCByPWlbaS5sZW5ndGgtMV0sbz1pWzBdLngscz1yLngrci5keDsobnVsbD09PXR8fG88dCkmJih0PW8pLChudWxsPT09ZXx8cz5lKSYmKGU9cyl9cmV0dXJuIG51bGw9PT10fHxudWxsPT09ZT9udWxsOntsZWZ0OnQscmlnaHQ6ZX19KG4pO3JldHVybiBlJiZlLmxlZnQ9PT1lLnJpZ2h0JiYoZS5yaWdodD0xLjEqZS5yaWdodCsxLGUubGVmdD1lLmxlZnQvMS4xLTEpLG4ubWFwKGk9Pih7c3RlcDppLnN0ZXAsd2FsbFRpbWU6aS53YWxsVGltZSxiaW5zOmU/ekdlKGkuYmlucyxlLHQpOltdfSkpfShzW2FdLm1hcCh1PT57bGV0e3dhbGxUaW1lOmQsc3RlcDpwfT11O3JldHVybnt3YWxsVGltZTpkLHN0ZXA6cCxiaW5zOnUuYmlucy5tYXAoZj0+KHt4OmYubWluLGR4OmYubWF4LWYubWluLHk6Zi5jb3VudH0pKX19KSk6W119KSksdGhpcy5zdGVwcyQ9dGhpcy5kYXRhJC5waXBlKEIobz0+by5tYXAocz0+cy5zdGVwKSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0ZXBzJCx0aGlzLnN0b3JlLnNlbGVjdChIcCldKS5waXBlKEIoKFtvLHMsYV0pPT57aWYoIW8pcmV0dXJuIG51bGw7bGV0IGw9MS8wLGM9LTEvMDtmb3IobGV0IHAgb2YgcylsPU1hdGgubWluKHAsbCksYz1NYXRoLm1heChwLGMpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKG51bGwhPT1uLmVuZFN0ZXApcmV0dXJuIG47bGV0IGU9ZnVuY3Rpb24obix0KXtsZXQgZT0xLzAsaT1udWxsO2ZvcihsZXQgciBvZiB0KXtsZXQgbz1NYXRoLmFicyhuLXIpO288ZSYmKGU9byxpPXIpfXJldHVybiBpfShuLnN0YXJ0U3RlcCx0KTtyZXR1cm4gbnVsbCE9PWU/ey4uLm4sc3RhcnRTdGVwOmV9Om59KGNfKGxWKG8sYSksbCxjKSxzKX0pKSx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kXSkucGlwZShCKChbbyxzXSk9Pm8mJnMmJiFzLmNsaXBwZWQmJm51bGw9PT1vLmVuZCYmby5zdGFydC5zdGVwIT09cy5zdGFydFN0ZXApKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihvPT5vLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobz0+Z3Yobyx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihvPT5vLnJ1bklkKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQnAsdGhpcy5jYXJkSWQpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChvaChlKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goc2goe2FmZm9yZGFuY2U6V2EuRk9CX0RFU0VMRUNUfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGlzdG9ncmFtLWNhcmQiXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjEyLHZhcnM6MzQsY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsImRhdGEiLCJtb2RlIiwieEF4aXNUeXBlIiwicnVuQ29sb3JTY2FsZSIsInNob3dGdWxsV2lkdGgiLCJpc1Bpbm5lZCIsImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJvbkZ1bGxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCIsMCksUCgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25MaW5rZWRUaW1lVG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxMixpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwxNCxpLnRpdGxlJCkpKCJ0YWciLFcoMywxNixpLnRhZyQpKSgicnVuSWQiLFcoNCwxOCxpLnJ1bklkJCkpKCJkYXRhIixXKDUsMjAsaS5kYXRhJCkpKCJtb2RlIixXKDYsMjIsaS5tb2RlJCkpKCJ4QXhpc1R5cGUiLFcoNywyNCxpLnhBeGlzVHlwZSQpKSgicnVuQ29sb3JTY2FsZSIsaS5ydW5Db2xvclNjYWxlKSgic2hvd0Z1bGxXaWR0aCIsVyg4LDI2LGkuc2hvd0Z1bGxXaWR0aCQpKSgiaXNQaW5uZWQiLFcoOSwyOCxpLmlzUGlubmVkJCkpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLFcoMTAsMzAsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTEsMzIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpfSxkZXBlbmRlbmNpZXM6W3JjZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImltYWdlLWNhcmQiLDYpLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uUGluU3RhdGVDaGFuZ2VkKCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLGUucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIHk2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNjYWxhci1jYXJkIiw3KSxQKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMikub25QaW5TdGF0ZUNoYW5nZWQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19ZnVuY3Rpb24gYjZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaGlzdG9ncmFtLWNhcmQiLDgpLFAoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiB4NmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxxZSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLGUuY2FyZElkLCIiKX19ZnVuY3Rpb24gQzZlKG4sdCl7aWYoMSZuJiYoS3QoMCwxKSxFKDEsdjZlLDEsMywiaW1hZ2UtY2FyZCIsMiksRSgyLHk2ZSwxLDIsInNjYWxhci1jYXJkIiwzKSxFKDMsYjZlLDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLEUoNCx4NmUsMiwxLCJkaXYiLDUpLFp0KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpblR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSU1BR0VTKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLlNDQUxBUlMpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fXZhciBzY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgR31vbkZ1bGxXaWR0aENoYW5nZWQoZSl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlKXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQoZSl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0V2ZXJWaXNpYmxlOiJpc0V2ZXJWaXNpYmxlIixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAsQzZlLDUsNCwibmctY29udGFpbmVyIiwwKSwyJmUmJmIoIm5nSWYiLGkuaXNFdmVyVmlzaWJsZSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsQ3AsS25lLGVjZSxvY2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGFjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzRXZlclZpc2libGU9ITEsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEcsdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdCh2XykucGlwZShiZygzNTAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSksQihpPT5yPT5pLmhhc093blByb3BlcnR5KHIpP2lbcl06IiNmZmYiKSl9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzRXZlclZpc2libGU9dGhpcy5pc0V2ZXJWaXNpYmxlfHxlfW9uRnVsbFdpZHRoQ2hhbmdlZChlKXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdChlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdChlKX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKS5waXBlKEh0KDEpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGNaKSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkdih7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6aSx3YXNQaW5uZWQ6ZX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRnVsbFdpZHRoQ2hhbmdlZChvKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsSGVpZ2h0Q2hhbmdlZChvKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiaXNFdmVyVmlzaWJsZSIsaS5pc0V2ZXJWaXNpYmxlKSgiY2FyZElkIixpLmNhcmRJZCkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIixpLnBsdWdpblR5cGUpKCJydW5Db2xvclNjYWxlIixXKDEsNSxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbbXYsc2NlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gRTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgVDZlPWZ1bmN0aW9uKG4sdCl7cmV0dXJueyJmdWxsLXdpZHRoIjpuLCJmdWxsLWhlaWdodCI6dH19O2Z1bmN0aW9uIEQ2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNSkoMSwiY2FyZC12aWV3Iiw2KSxQKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocy5jYXJkSWQscikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixUNmUsaS5jYXJkc0F0RnVsbFdpZHRoLmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0uZnVsbFdpZHRoKSxpLmNhcmRzQXRGdWxsSGVpZ2h0LmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0udGFibGVFeHBhbmRlZCkpKSx4KDEpLGIoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGkuZ3JvdXBOYW1lKSgicGx1Z2luVHlwZSIsZS5wbHVnaW4pKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZExhenlMb2FkZXIiLGUuY2FyZElkKX19ZnVuY3Rpb24gQTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgSTZlPWZ1bmN0aW9uKCl7cmV0dXJue2lzQm90dG9tQ29udHJvbDohMX19LFA2ZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITB9fTtmdW5jdGlvbiBSNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEUoMSxFNmUsMSwwLCJuZy1jb250YWluZXIiLDIpLGcoMiwiZGl2IiwzKSxFKDMsRDZlLDIsOSwiZGl2Iiw0KSx2KCksRSg0LEE2ZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDIpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCg4LEk2ZSkpLHgoMSksT3QoImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsZS5ncmlkVGVtcGxhdGVDb2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlDYXJkcykseCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDksUDZlKSl9fWZ1bmN0aW9uIE82ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMTIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDMpO3JldHVybiBvZShvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgtMSxyLnRhcmdldCkpfSksRCgxLCIgUHJldmlvdXMgIiksdigpfTImbiYmYigiZGlzYWJsZWQiLDA9PT1NKDMpLnBhZ2VJbmRleCl9ZnVuY3Rpb24gazZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwic3BhbiIsMTUpKDEsImlucHV0IiwxNiksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pLHYoKSxEKDIpLHYoKX1pZigyJm4pe2xldCBlPU0oNCk7eCgxKSxiKCJ2YWx1ZSIsZS5wYWdlSW5kZXgrMSkoIm1heCIsZS5udW1QYWdlcykseCgxKSxxZSgiIG9mICIsZS5udW1QYWdlcywiIil9fWZ1bmN0aW9uIEY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iKSxFKDEsazZlLDMsMywic3BhbiIsMTMpLGcoMiwiYnV0dG9uIiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMyk7cmV0dXJuIG9lKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleCsxLHIudGFyZ2V0KSl9KSxEKDMsIiBOZXh0ICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pc0JvdHRvbUNvbnRyb2wsaT1NKCk7eCgxKSxiKCJuZ0lmIixpLnNob3dQYWdpbmF0aW9uSW5wdXQoZSkpLHgoMSksYigiZGlzYWJsZWQiLGkucGFnZUluZGV4KzE+PWkubnVtUGFnZXMpfX1mdW5jdGlvbiBONmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsOCkoMSwic3BhbiIsOSksRSgyLE82ZSwyLDEsImJ1dHRvbiIsMTApLHYoKSxnKDMsInNwYW4iLDExKSxFKDQsRjZlLDQsMiwic3BhbiIsMCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scykseCgyKSxiKCJuZ0lmIixlLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfX1mdW5jdGlvbiBMNmUobix0KXsxJm4mJkUoMCxONmUsNSwyLCJkaXYiLDcpLDImbiYmYigibmdJZiIsTSgpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfXZhciBsY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNka1Njcm9sbGFibGU9ZSx0aGlzLlBsdWdpblR5cGU9V24sdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiIsdGhpcy5jYXJkc0F0RnVsbFdpZHRoPW5ldyBTZXQsdGhpcy5jYXJkc0F0RnVsbEhlaWdodD1uZXcgU2V0LHRoaXMucGFnZUluZGV4Q2hhbmdlZD1uZXcgR31uZ09uSW5pdCgpe3RoaXMuaXNDYXJkV2lkdGhWYWxpZCh0aGlzLmNhcmRNaW5XaWR0aCkmJih0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5jYXJkTWluV2lkdGgpe2xldCBpPWUuY2FyZE1pbldpZHRoLmN1cnJlbnRWYWx1ZTt0aGlzLmlzQ2FyZFdpZHRoVmFsaWQoaSk/KHRoaXMuY2FyZE1pbldpZHRoPWksdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49YHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgke3RoaXMuY2FyZE1pbldpZHRofXB4LCAxZnIpKWApOnRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPSIifX1pc0NhcmRXaWR0aFZhbGlkKGUpe3JldHVybiBlJiZlPj0zMzUmJmU8PTczNX1zaG93UGFnaW5hdGlvbklucHV0KGUpe3JldHVybiBlfWhhbmRsZVBhZ2VDaGFuZ2UoZSxpKXtsZXQgcj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtzZXRUaW1lb3V0KCgpPT57dGhpcy5zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihpLHIpfSwwKSx0aGlzLnBhZ2VJbmRleENoYW5nZWQuZW1pdChlKX1zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihlLGkpe2xldCByPXRoaXMuY2RrU2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ciYmci5zY3JvbGxUbygwLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWkrci5zY3JvbGxUb3ApfXRyYWNrQnlDYXJkcyhlLGkpe3JldHVybiBpLmNhcmRJZH1vblBhZ2luYXRpb25JbnB1dENoYW5nZShlKXtsZXQgaT1lLnRhcmdldDtpZigiaW5wdXQiPT09ZS50eXBlJiYiIj09PWkudmFsdWUpcmV0dXJuO2xldCByPU51bWJlcihpLnZhbHVlKS0xLG89TWF0aC5taW4oTWF0aC5tYXgoMCxyKSx0aGlzLm51bVBhZ2VzLTEpO2kudmFsdWUhPT1TdHJpbmcobysxKSYmKGkudmFsdWU9U3RyaW5nKG8rMSkpLHRoaXMuaGFuZGxlUGFnZUNoYW5nZShvLGkpfW9uRnVsbFdpZHRoQ2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbFdpZHRoLmFkZChlKTp0aGlzLmNhcmRzQXRGdWxsV2lkdGguZGVsZXRlKGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSxpKXtpP3RoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuZGVsZXRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFlwLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiXV0saW5wdXRzOntpc0dyb3VwRXhwYW5kZWQ6ImlzR3JvdXBFeHBhbmRlZCIscGFnZUluZGV4OiJwYWdlSW5kZXgiLG51bVBhZ2VzOiJudW1QYWdlcyIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixzaG93UGFnaW5hdGlvbkNvbnRyb2xzOiJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixjYXJkU3RhdGVNYXA6ImNhcmRTdGF0ZU1hcCJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjMsdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdJZiJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWyJjbGFzcyIsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLXNwYWNlIiwzLCJuZ0NsYXNzIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInByZXYiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFI2ZSw1LDEwLCJkaXYiLDApLEUoMSxMNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGVuKSksMiZlJiZiKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCl9LGRlcGVuZGVuY2llczpbSW5lLGFjZSxQbix5bixYZSxObywkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOmNvbnRlbnR9LmNhcmQtZ3JpZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzM1cHgsIDFmcikpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH0uY2FyZC1zcGFjZS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWNvbHVtbi1zdGFydDoxO2dyaWQtY29sdW1uLWVuZDotMX0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo0ODBweH0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfWNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250YWluOmxheW91dCBwYWludDtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MzIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpjZW50ZXI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0fS5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNjE2MTYxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmdyb3VwTmFtZSQ9bmV3IFZyKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgVnIoMCksdGhpcy5pdGVtcyQ9bmV3IFZyKFtdKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMuY2FyZFN0YXRlTWFwJD10aGlzLnN0b3JlLnNlbGVjdChtYyksdGhpcy5udW1QYWdlcyQ9cG4oW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KGFhLmdldFBhZ2VTaXplKV0pLnBpcGUoQigoW2kscl0pPT5NYXRoLmNlaWwoaS5sZW5ndGgvcikpKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9dGhpcy5ncm91cE5hbWUkLnBpcGUodmkoaT0+bnVsbCE9PWk/dGhpcy5zdG9yZS5zZWxlY3QoaUEsaSk6anQoITApKSksdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJD10aGlzLm51bVBhZ2VzJC5waXBlKEIoaT0+aT4xKSksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JD1wbihbdGhpcy5wYWdlSW5kZXgkLHRoaXMubnVtUGFnZXMkXSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbaSxyXSk9PnswIT09ciYmKGk+PXI/dGhpcy5wYWdlSW5kZXgkLm5leHQoci0xKTppPDAmJnRoaXMucGFnZUluZGV4JC5uZXh0KDApKX0pLEIoKFtpLHJdKT0+TWF0aC5taW4oTWF0aC5tYXgoaSwwKSxyLTEpKSxRcygxKSksdGhpcy5wYWdlZEl0ZW1zJD1wbihbdGhpcy5pdGVtcyQsdGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0UGFnZVNpemUpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQsdGhpcy5pc0dyb3VwRXhwYW5kZWQkXSkucGlwZShCKChbaSxyLG8sc10pPT5pLnNsaWNlKHIqbyxyKm8rKHM/cjowKSkpKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoaF8pfW5nT25DaGFuZ2VzKGUpe2UuY2FyZElkc1dpdGhNZXRhZGF0YSYmdGhpcy5pdGVtcyQubmV4dCh0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEpLGUuZ3JvdXBOYW1lJiZ0aGlzLmdyb3VwTmFtZSQubmV4dCh0aGlzLmdyb3VwTmFtZSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW9uUGFnZUluZGV4Q2hhbmdlZChlKXt0aGlzLnBhZ2VJbmRleCQubmV4dChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkIl1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZmVhdHVyZXM6W3p0XSxkZWNsczo4LHZhcnM6MjIsY29uc3RzOltbMywiaXNHcm91cEV4cGFuZGVkIiwicGFnZUluZGV4IiwibnVtUGFnZXMiLCJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRNaW5XaWR0aCIsImNhcmRPYnNlcnZlciIsImNhcmRTdGF0ZU1hcCIsInBhZ2VJbmRleENoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCIsMCksUCgicGFnZUluZGV4Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlSW5kZXhDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLHYoKSksMiZlJiZiKCJpc0dyb3VwRXhwYW5kZWQiLFcoMSw4LGkuaXNHcm91cEV4cGFuZGVkJCkpKCJwYWdlSW5kZXgiLFcoMiwxMCxpLm5vcm1hbGl6ZWRQYWdlSW5kZXgkKSkoIm51bVBhZ2VzIixXKDMsMTIsaS5udW1QYWdlcyQpKSgic2hvd1BhZ2luYXRpb25Db250cm9scyIsVyg0LDE0LGkuc2hvd1BhZ2luYXRpb25Db250cm9scyQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVyg1LDE2LGkucGFnZWRJdGVtcyQpKSgiY2FyZE1pbldpZHRoIixXKDYsMTgsaS5jYXJkTWluV2lkdGgkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJjYXJkU3RhdGVNYXAiLFcoNywyMCxpLmNhcmRTdGF0ZU1hcCQpKX0sZGVwZW5kZW5jaWVzOltsY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFU2ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNyksRCgxKSxqKDIsIm51bWJlciIpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIixXKDIsMSxlLm51bWJlck9mQ2FyZHMpLCIgY2FyZHMiKX19ZnVuY3Rpb24gejZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBqNmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDkpfXZhciBjY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhci1jb21wb25lbnQiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyIsaXNHcm91cEV4cGFuZGVkOiJpc0dyb3VwRXhwYW5kZWQifSxvdXRwdXRzOntncm91cEV4cGFuc2lvblRvZ2dsZWQ6Imdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJ9LGRlY2xzOjksdmFyczo1LGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBhbGxvd3MgdXNlciB0byBleHBhbmQgYSB0YWcgZ3JvdXAu4pCfZmZhYTExNDcxYjg3OGE2ZGZmZTJlNjhjNmYzNzA2NGE5ZTA3NDg1M+KQnzUzODYwNTQzMjUyNzQ3NzkyNTg6RXhwYW5kIGdyb3VwYCxbWyJhcmlhLWxhYmVsIix0LDEsImdyb3VwLXRvb2xiYXIiLDMsImNsaWNrIl0sWzEsImdyb3VwLXRpdGxlLXdyYXBwZXIiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiLDMsInRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbMSwiZXhwYW5kLWdyb3VwLWljb24iXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImV4cGFuZE1vcmUiLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsic3ZnSWNvbiIsImV4cGFuZF9sZXNzXzI0cHgiXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiYnV0dG9uIiwwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5ncm91cEV4cGFuc2lvblRvZ2dsZWQuZW1pdCgpfSksZygxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxEKDMpLHYoKSxFKDQsVTZlLDMsMywic3BhbiIsMyksdigpLGcoNSwic3BhbiIsNCksRSg2LHo2ZSwxLDAsIm1hdC1pY29uIiw1KSxFKDcsajZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSx4cigidGl0bGUiLGkuZ3JvdXBOYW1lKSx4KDEpLHl0KGkuZ3JvdXBOYW1lKSx4KDEpLGIoIm5nSWYiLGkubnVtYmVyT2ZDYXJkcz4xKSx4KDIpLGIoIm5nSWYiLGkuaXNHcm91cEV4cGFuZGVkKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSxabix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7Y29sb3I6IzIxMjEyMTt0b3A6LTFweDtkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtmb250OmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNhcmQtZ3JvdXA6Zmlyc3Qtb2YtdHlwZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDowfVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNzU3NTc1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX0uZ3JvdXAtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7dGV4dC1hbGlnbjpsZWZ0fS5ncm91cC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYxNjE2MTttYXJnaW4tbGVmdDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1Y2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9anQoITEpfW5nT25Jbml0KCl7dGhpcy5pc0dyb3VwRXhwYW5kZWQkPW51bGwhPT10aGlzLmdyb3VwTmFtZT90aGlzLnN0b3JlLnNlbGVjdChpQSx0aGlzLmdyb3VwTmFtZSk6anQoITEpfW9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl7aWYobnVsbD09PXRoaXMuZ3JvdXBOYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IGV4cGFuc2lvbiBjYW5ub3QgYmUgdG9nZ2xlZCB3aGVuIGdyb3VwTmFtZSBpcyBudWxsIik7dGhpcy5zdG9yZS5kaXNwYXRjaChUUCh7dGFnR3JvdXA6dGhpcy5ncm91cE5hbWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixudW1iZXJPZkNhcmRzOiJudW1iZXJPZkNhcmRzIn0sZGVjbHM6Mix2YXJzOjUsY29uc3RzOltbMywibnVtYmVyT2ZDYXJkcyIsImlzR3JvdXBFeHBhbmRlZCIsImdyb3VwTmFtZSIsImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50IiwwKSxQKCJncm91cEV4cGFuc2lvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEV4cGFuc2lvblRvZ2dsZWQoKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigibnVtYmVyT2ZDYXJkcyIsaS5udW1iZXJPZkNhcmRzKSgiaXNHcm91cEV4cGFuZGVkIixXKDEsMyxpLmlzR3JvdXBFeHBhbmRlZCQpKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSl9LGRlcGVuZGVuY2llczpbY2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBxNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMSksTigxLCJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciIsMikoMiwibWV0cmljcy1jYXJkLWdyaWQiLDMpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoIm51bWJlck9mQ2FyZHMiLGUuaXRlbXMubGVuZ3RoKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkseCgxKSxiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixlLml0ZW1zKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX12YXIgZGNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9V259dHJhY2tCeUdyb3VwKGUsaSl7cmV0dXJuIGkuZ3JvdXBOYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRHcm91cHM6ImNhcmRHcm91cHMiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6MSx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiY2FyZC1ncm91cCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNhcmQtZ3JvdXAiXSxbMywibnVtYmVyT2ZDYXJkcyIsImdyb3VwTmFtZSJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIiwiZ3JvdXBOYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAscTZlLDMsNSwiZGl2IiwwKSwyJmUmJmIoIm5nRm9yT2YiLGkuY2FyZEdyb3VwcykoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5R3JvdXApfSxkZXBlbmRlbmNpZXM6W3luLFB5LHVjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRHcm91cHMkPXRoaXMuc3RvcmUuc2VsZWN0KHltKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxCKGk9PmtQKGkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzIl1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJjYXJkR3JvdXBzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImNhcmRHcm91cHMiLFcoMSwyLGkuY2FyZEdyb3VwcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbZGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBRNmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIGFuZCAiLGUuZ2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlLnBsdWdpblR5cGVzKSwiIHZpc3VhbGl6YXRpb24gZmlsdGVyIil9fXZhciBoY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmxpc3RGb3JtYXR0ZXI9bmV3IEludGwuTGlzdEZvcm1hdCh2b2lkIDAse3N0eWxlOiJsb25nIix0eXBlOiJkaXNqdW5jdGlvbiJ9KX1nZXRQbHVnaW5UeXBlRmlsdGVyU3RyaW5nKGUpe2xldCBpPVsuLi5lXS5tYXAocj0+e3N3aXRjaChyKXtjYXNlIFduLlNDQUxBUlM6cmV0dXJuInNjYWxhciI7Y2FzZSBXbi5JTUFHRVM6cmV0dXJuImltYWdlIjtjYXNlIFduLkhJU1RPR1JBTVM6cmV0dXJuImhpc3RvZ3JhbSI7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUGxlYXNlIGltcGxlbWVudCBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBwbHVnaW4gdHlwZTogJHtyfWApfX0pO3JldHVybiB0aGlzLmxpc3RGb3JtYXR0ZXIuZm9ybWF0KGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiXV0saW5wdXRzOntwbHVnaW5UeXBlczoicGx1Z2luVHlwZXMiLHRhZ0ZpbHRlclJlZ2V4OiJ0YWdGaWx0ZXJSZWdleCIsdGFnQ291bnRzOiJ0YWdDb3VudHMifSxkZWNsczo2LHZhcnM6NSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRCgwLCJObyBtYXRjaGVzIGZvciB0YWcgZmlsdGVyICIpLGcoMSwiY29kZSIpLEQoMiksdigpLEUoMyxRNmUsMiwxLCJzcGFuIiwwKSxEKDQpLGooNSwibnVtYmVyIikpLDImZSYmKHgoMikscWUoIi8iLGkudGFnRmlsdGVyUmVnZXgsIi8iKSx4KDEpLGIoIm5nSWYiLGkucGx1Z2luVHlwZXMuc2l6ZSkseCgxKSxxZSgiIG91dCBvZiAiLFcoNSwzLGkudGFnQ291bnRzKSwiIHRhZ3MuIikpfSxkZXBlbmRlbmNpZXM6W1hlLHZsXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5wbHVnaW5UeXBlcyQ9dGhpcy5zdG9yZS5zZWxlY3QoeHUpLHRoaXMudGFnRmlsdGVyUmVnZXgkPXRoaXMuc3RvcmUuc2VsZWN0KF9jKSx0aGlzLnRhZ0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoQihpPT5uZXcgU2V0KGkubWFwKCh7dGFnOnJ9KT0+cikpLnNpemUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInBsdWdpblR5cGVzIiwidGFnRmlsdGVyUmVnZXgiLCJ0YWdDb3VudHMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigicGx1Z2luVHlwZXMiLFcoMSwzLGkucGx1Z2luVHlwZXMkKSkoInRhZ0ZpbHRlclJlZ2V4IixXKDIsNSxpLnRhZ0ZpbHRlclJlZ2V4JCkpKCJ0YWdDb3VudHMiLFcoMyw3LGkudGFnQ291bnRzJCkpfSxkZXBlbmRlbmNpZXM6W2hjZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gSjZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiw2KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLFcoMiwxLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpLCIgY2FyZHMiKX19ZnVuY3Rpb24gJDZlKG4sdCl7MSZuJiZOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIiw3KX12YXIgbWNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0VtcHR5TWF0Y2g6ImlzRW1wdHlNYXRjaCIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEifSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJncm91cC10b29sYmFyIl0sWzEsImdyb3VwLXRleHQiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiXSxbImNsYXNzIiwiZ3JvdXAtY2FyZC1jb3VudCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ3YXJuIiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsxLCJ3YXJuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEpKDIsInNwYW4iLDIpLEQoMywiVGFncyBtYXRjaGluZyBmaWx0ZXIiKSx2KCksRSg0LEo2ZSwzLDMsInNwYW4iLDMpLHYoKSgpLEUoNSwkNmUsMSwwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNCksTig2LCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSkpLDImZSYmKHgoNCksYigibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSx4KDEpLGIoIm5nSWYiLGkuaXNFbXB0eU1hdGNoKSx4KDEpLGIoImNhcmRJZHNXaXRoTWV0YWRhdGEiLGkuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKX0sZGVwZW5kZW5jaWVzOltYZSxQeSxmY2UsdmxdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfW1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWV0cmljcy1lbXB0eS10YWctbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeHUpKSxCKChbaSxyXSk9PnIuc2l6ZT9pLmZpbHRlcihvPT5yLmhhcyhvLnBsdWdpbikpOmkpLHNyKHRoaXMuc3RvcmUuc2VsZWN0KF9jKSksQXIoMjAwKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJue2NhcmRMaXN0OmkscmVnZXg6bmV3IFJlZ0V4cChyLCJpIil9fWNhdGNoe3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om51bGx9fX0pLEhlKCh7cmVnZXg6aX0pPT5udWxsIT09aSksQigoe2NhcmRMaXN0OmkscmVnZXg6cn0pPT5pLmZpbHRlcigoe3RhZzpvfSk9PnIudGVzdChvKSkpLGRpKChpLHIpPT5pLmxlbmd0aD09PXIubGVuZ3RoJiZpLmV2ZXJ5KChvLHMpPT5vLmNhcmRJZD09PXJbc10uY2FyZElkKSksWHMoKSxWbihbXSkpLHRoaXMuaXNFbXB0eU1hdGNoJD10aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeW0pKSxCKChbaSxyXSk9PkJvb2xlYW4oci5sZW5ndGgpJiYwPT09aS5sZW5ndGgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiaXNFbXB0eU1hdGNoIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJpc0VtcHR5TWF0Y2giLFcoMSwzLGkuaXNFbXB0eU1hdGNoJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDIsNSxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W21jZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaVdlPVsicGFuZWwiXTtmdW5jdGlvbiByV2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMCwxKSxObigyKSx2KCkpLDImbil7bGV0IGU9dC5pZCxpPU0oKTtiKCJpZCIsaS5pZCkoIm5nQ2xhc3MiLGkuX2NsYXNzTGlzdCksemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGUpKX19dmFyIG9XZT1bIioiXSxzV2U9MCxhV2U9THMoY2xhc3N7fSksX2NlPW5ldyBzZSgibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMSxhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiExfX19KSxjV2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGFXZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5zaG93UGFuZWw9ITEsdGhpcy5faXNPcGVuPSExLHRoaXMuZGlzcGxheVdpdGg9bnVsbCx0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBHLHRoaXMub3BlbmVkPW5ldyBHLHRoaXMuY2xvc2VkPW5ldyBHLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBHLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrc1dlKyssdGhpcy5pbmVydEdyb3Vwcz1vPy5TQUZBUkl8fCExLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIXIuYXV0b0FjdGl2ZUZpcnN0T3B0aW9uLHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249ISFyLmF1dG9TZWxlY3RBY3RpdmVPcHRpb259Z2V0IGlzT3Blbigpe3JldHVybiB0aGlzLl9pc09wZW4mJnRoaXMuc2hvd1BhbmVsfWdldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9ufXNldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oZSl7dGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9uPVd0KGUpfWdldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb259c2V0IGF1dG9TZWxlY3RBY3RpdmVPcHRpb24oZSl7dGhpcy5fYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbj1XdChlKX1zZXQgY2xhc3NMaXN0KGUpe3RoaXMuX2NsYXNzTGlzdD1lJiZlLmxlbmd0aD9mdW5jdGlvbihuLHQ9L1xzKy8pe2xldCBlPVtdO2lmKG51bGwhPW4pe2xldCBpPUFycmF5LmlzQXJyYXkobik/bjpgJHtufWAuc3BsaXQodCk7Zm9yKGxldCByIG9mIGkpe2xldCBvPWAke3J9YC50cmltKCk7byYmZS5wdXNoKG8pfX1yZXR1cm4gZX0oZSkucmVkdWNlKChpLHIpPT4oaVtyXT0hMCxpKSx7fSk6e30sdGhpcy5fc2V0VmlzaWJpbGl0eUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IERfKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pc09wZW4mJnRoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdfHxudWxsfSl9KSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCl9X3NldFNjcm9sbFRvcChlKXt0aGlzLnBhbmVsJiYodGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD1lKX1fZ2V0U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMucGFuZWw/dGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDowfV9zZXRWaXNpYmlsaXR5KCl7dGhpcy5zaG93UGFuZWw9ISF0aGlzLm9wdGlvbnMubGVuZ3RoLHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2VtaXRTZWxlY3RFdmVudChlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9fSh0aGlzLGUpO3RoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChpKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShlKXtyZXR1cm4gdGhpcy5hcmlhTGFiZWw/bnVsbDp0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X3NldFZpc2liaWxpdHlDbGFzc2VzKGUpe2VbdGhpcy5fdmlzaWJsZUNsYXNzXT10aGlzLnNob3dQYW5lbCxlW3RoaXMuX2hpZGRlbkNsYXNzXT0hdGhpcy5zaG93UGFuZWx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoQWUpLHcoX2NlKSx3KHVpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoT2ksNyksbHQoaVdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnRlbXBsYXRlPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsYXV0b0FjdGl2ZUZpcnN0T3B0aW9uOiJhdXRvQWN0aXZlRmlyc3RPcHRpb24iLGF1dG9TZWxlY3RBY3RpdmVPcHRpb246ImF1dG9TZWxlY3RBY3RpdmVPcHRpb24iLHBhbmVsV2lkdGg6InBhbmVsV2lkdGgiLGNsYXNzTGlzdDpbImNsYXNzIiwiY2xhc3NMaXN0Il19LG91dHB1dHM6e29wdGlvblNlbGVjdGVkOiJvcHRpb25TZWxlY3RlZCIsb3BlbmVkOiJvcGVuZWQiLGNsb3NlZDoiY2xvc2VkIixvcHRpb25BY3RpdmF0ZWQ6Im9wdGlvbkFjdGl2YXRlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx2Y2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNXZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLEdDLDUpLE5pKHIsdWEsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLE5lKG89TGUoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOm9XZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1hdXRvY29tcGxldGUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxyV2UsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHljZT1uZXcgc2UoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksZFdlPXtwcm92aWRlOnljZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LHBXZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ZVMpLG11bHRpOiEwfSxoV2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PXUsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcgVGUsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9YmEoKCk9PntsZXQgaD10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGg/aC5jaGFuZ2VzLnBpcGUoVm4oaCksdmkoKCk9PnVuKC4uLmgubWFwKGY9PmYub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShIdCgxKSx2aSgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5lLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSl9bmdPbkNoYW5nZXMoZSl7ZS5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKX0pLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSExLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJih0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZHx8dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfWdldCBwYW5lbENsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIHVuKHRoaXMub3B0aW9uU2VsZWN0aW9ucyx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci50YWJPdXQucGlwZShIZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKEhlKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKTpqdCgpKS5waXBlKEIoZT0+ZSBpbnN0YW5jZW9mIHpDP2U6bnVsbCkpfWdldCBhY3RpdmVPcHRpb24oKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW06bnVsbH1fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCl7cmV0dXJuIHVuKGxpKHRoaXMuX2RvY3VtZW50LCJjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJhdXhjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJ0b3VjaGVuZCIpKS5waXBlKEhlKGU9PntsZXQgaT12YyhlKSxyPXRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsLG89dGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJmkhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJighcnx8IXIuY29udGFpbnMoaSkpJiYoIW98fCFvLmNvbnRhaW5zKGkpKSYmISF0aGlzLl9vdmVybGF5UmVmJiYhdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhpKX0pKX13cml0ZVZhbHVlKGUpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT50aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShlKSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPWV9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9TXIoZSk7aWYoMjc9PT1pJiYhciYmZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiYxMz09PWkmJnRoaXMucGFuZWxPcGVuJiYhcil0aGlzLmFjdGl2ZU9wdGlvbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih0aGlzLmF1dG9jb21wbGV0ZSl7bGV0IG89dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSxzPTM4PT09aXx8NDA9PT1pOzk9PT1pfHxzJiYhciYmdGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKGUpOnMmJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwoc3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW8pJiYodGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKSx0aGlzLmF1dG9jb21wbGV0ZS5hdXRvU2VsZWN0QWN0aXZlT3B0aW9uJiZ0aGlzLmFjdGl2ZU9wdGlvbiYmKHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb258fCh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb249dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPXRoaXMuYWN0aXZlT3B0aW9uLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlKSkpfX1faGFuZGxlSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQscj1pLnZhbHVlOyJudW1iZXIiPT09aS50eXBlJiYocj0iIj09cj9udWxsOnBhcnNlRmxvYXQocikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1yJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1yLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vbkNoYW5nZShyKSx0aGlzLl9jYW5PcGVuKCkmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lLnRhcmdldCYmdGhpcy5vcGVuUGFuZWwoKSl9X2hhbmRsZUZvY3VzKCl7dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzP3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCEwKSk6dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwfV9oYW5kbGVDbGljaygpe3RoaXMuX2Nhbk9wZW4oKSYmIXRoaXMucGFuZWxPcGVuJiZ0aGlzLm9wZW5QYW5lbCgpfV9mbG9hdExhYmVsKGU9ITEpe3RoaXMuX2Zvcm1GaWVsZCYmImF1dG8iPT09dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWwmJihlP3RoaXMuX2Zvcm1GaWVsZC5fYW5pbWF0ZUFuZExvY2tMYWJlbCgpOnRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMCl9X3Jlc2V0TGFiZWwoKXt0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWwmJih0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYXV0byIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiB1bih0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKE50KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSksbmwoMCkpKS5waXBlKHZpKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSxIdCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGhzKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgcyxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07cz0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKHMpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9V0MoZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBzPW8uX2dldEhvc3RFbGVtZW50KCksYT1rQShzLm9mZnNldFRvcCxzLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3AoYSl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIU1yKGkpfHwzOD09PWkua2V5Q29kZSYmTXIoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoUWkpLHcoeWkpLHcocHQpLHcobm4pLHcoeWNlKSx3KGlyLDgpLHcodW0sOSksdyhCdCw4KSx3KGRhKSx3KF9jZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLGVTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoV2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1c2luIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uVG91Y2hlZCgpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSwyJmUmJnplKCJhdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5wYW5lbE9wZW4mJmkuYWN0aXZlT3B0aW9uP2kuYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6aS5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsaS5hdXRvY29tcGxldGVEaXNhYmxlZHx8IWkucGFuZWxPcGVufHxudWxsPT1pLmF1dG9jb21wbGV0ZT9udWxsOmkuYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0Ym94Iil9LGV4cG9ydEFzOlsibWF0QXV0b2NvbXBsZXRlVHJpZ2dlciJdLGZlYXR1cmVzOlskdChbcFdlXSksdHRdfSksbn0pKCksck89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbZFdlXSxpbXBvcnRzOltWbyxPXyxkbixrZSxTdSxPXyxkbl19KSxufSkoKSxvTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLnBsYWNlaG9sZGVyPSIifW9uSW5wdXRLZXlVcChlKXsiRW50ZXIiPT09ZS5rZXkmJnRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGVTLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuYXV0b2NvbXBsZXRlVHJpZ2dlcj1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixtYXRBdXRvY29tcGxldGU6Im1hdEF1dG9jb21wbGV0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsInBsYWNlaG9sZGVyIiwibWF0QXV0b2NvbXBsZXRlIiwibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJ2YWx1ZSIsImtleXVwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtYXQtaWNvbiIsMCksZygxLCJpbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXRLZXlVcChvKX0pLHYoKSksMiZlJiYoeCgxKSxiKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikoIm1hdEF1dG9jb21wbGV0ZSIsaS5tYXRBdXRvY29tcGxldGUpKCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsIWkubWF0QXV0b2NvbXBsZXRlKSgidmFsdWUiLGkudmFsdWUpKX0sZGVwZW5kZW5jaWVzOltlUyxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCk7ZnVuY3Rpb24gZldlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBtV2Uobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlKSx6ZSgidGl0bGUiLGUpLHgoMSkseXQoZSl9fWZ1bmN0aW9uIGdXZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSgxLCJlbSIpLEQoMiksaigzLCJudW1iZXIiKSx2KCkoKSksMiZuKXtsZXQgZT1NKCk7eCgyKSxxZSgiYW5kICIsVygzLDEsZS5jb21wbGV0aW9ucy5sZW5ndGgtMjUpLCIgbW9yZSB0YWdzIG1hdGNoZWQiKX19dmFyIENjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9b25Db21wbGV0aW9uQWNjZXB0ZWQoZSl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKFBEZSwiXFwkJiIpfShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJ2YWxpZCIsaS5pc1JlZ2V4RmlsdGVyVmFsaWQpfSxpbnB1dHM6e3JlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIixjb21wbGV0aW9uczoiY29tcGxldGlvbnMifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjcsdmFyczo1LGNvbnN0czpbWzEsInRhZy1maWx0ZXIiXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHRhZ3MgKHJlZ2V4KSIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJjbGFzcyIsImVycm9yLWljb24iLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbMSwidGFnLW9wdGlvbnMiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWyJjbGFzcyIsIm9wdGlvbiIsMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJhbmQtbW9yZSIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMSwib3B0aW9uIiwzLCJ2YWx1ZSJdLFsxLCJhbmQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChvLnRhcmdldC52YWx1ZSl9KSx2KCksRSgyLGZXZSwxLDAsIm1hdC1pY29uIiwyKSx2KCksZygzLCJtYXQtYXV0b2NvbXBsZXRlIiwzLDQpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbXBsZXRpb25BY2NlcHRlZChvLm9wdGlvbi52YWx1ZSl9KSxFKDUsbVdlLDIsMywibWF0LW9wdGlvbiIsNSksRSg2LGdXZSw0LDMsImRpdiIsNiksdigpKSwyJmUpe2xldCByPXN0KDQpO3goMSksYigidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIscikseCgxKSxiKCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLHgoMyksYigibmdGb3JPZiIsbnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLHgoMSksYigibmdJZiIsKG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLmxlbmd0aCk+MjUpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxvTyx2Y2UsdWEsWm4sdmxdLHN0eWxlczpbIi50YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9dGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX1bX25naG9zdC0lQ09NUCVde2NvbG9yOiMyMTIxMjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICAuZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2M2MjgyODtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfSAgLnRhZy1vcHRpb25zIC5vcHRpb24sICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjM7ZGlzcGxheTotd2Via2l0LWJveDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzo4cHggMTZweH0gIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHdjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShCKGk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoaSksITB9Y2F0Y2h7cmV0dXJuITF9fSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpEKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5pLmZpbHRlcigoe3BsdWdpbjpvfSk9PiFyLnNpemV8fHIuaGFzKG8pKS5tYXAoKHt0YWc6b30pPT5vKSksQihpPT5bLi4ubmV3IFNldChpKV0pLEIoaT0+aS5zb3J0KGJ3KSksc3IodGhpcy5zdG9yZS5zZWxlY3QoX2MpKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJuW2ksbmV3IFJlZ0V4cChyLCJpIildfWNhdGNoe3JldHVybltpLG51bGxdfX0pLEhlKChbLGldKT0+bnVsbCE9PWkpLEIoKFtpLHJdKT0+aS5maWx0ZXIobz0+ci50ZXN0KG8pKSkpfW9uVGFnRmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRVAoe3RhZ0ZpbHRlcjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJjb21wbGV0aW9ucyIsIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCIsMCksUCgib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRhZ0ZpbHRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWdleEZpbHRlclZhbHVlIixXKDEsMyxpLnRhZ0ZpbHRlciQpKSgiaXNSZWdleEZpbHRlclZhbGlkIixXKDIsNSxpLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQpKSgiY29tcGxldGlvbnMiLFcoMyw3LGkuY29tcGxldGlvbnMkKSl9LGRlcGVuZGVuY2llczpbQ2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB5V2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgsIiBjYXJkcyIpfX1mdW5jdGlvbiBiV2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDkpLEQoMSwiTmV3IGNhcmQgcGlubmVkIiksdigpKSwyJm4mJnplKCJkYXRhLWlkIix0LiRpbXBsaWNpdCl9ZnVuY3Rpb24geFdlKG4sdCl7aWYoMSZuJiZOKDAsIm1ldHJpY3MtY2FyZC1ncmlkIiwxMCksMiZuKXtsZXQgZT1NKCk7YigiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixlLmNhcmRPYnNlcnZlcil9fWZ1bmN0aW9uIENXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxMSksRCgxLCJQaW4gY2FyZHMgZm9yIGEgcXVpY2sgdmlldyBhbmQgY29tcGFyaXNvbiIpLHYoKSl9dmFyIE1jZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixuZXdDYXJkUGlubmVkSWRzOiJuZXdDYXJkUGlubmVkSWRzIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbInN2Z0ljb24iLCJrZWVwXzI0cHgiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5ldy1jYXJkLXBpbm5lZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZW1wdHlQaW5uZWRWaWV3IiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwibmV3LWNhcmQtcGlubmVkIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZW1wdHktbWVzc2FnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSxOKDEsIm1hdC1pY29uIiwxKSxnKDIsInNwYW4iLDIpKDMsInNwYW4iLDMpLEQoNCwiUGlubmVkIiksdigpLEUoNSx5V2UsMiwxLCJzcGFuIiw0KSxFKDYsYldlLDIsMSwic3BhbiIsNSksdigpKCksRSg3LHhXZSwxLDIsIm1ldHJpY3MtY2FyZC1ncmlkIiw2KSxFKDgsQ1dlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNyxlbikpLDImZSl7bGV0IHI9c3QoOSk7eCg1KSxiKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLHgoMSksYigibmdGb3JPZiIsaS5uZXdDYXJkUGlubmVkSWRzKSx4KDEpLGIoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLFpuLFB5XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Z2FwOjZweH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5uZXctY2FyZC1waW5uZWRbX25nY29udGVudC0lQ09NUCVde2FuaW1hdGlvbjpwaW5uZWQtdmlldy1mYWRlLW91dCAzcyBsaW5lYXI7YmFja2dyb3VuZDojZjQ0MzM2O2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTowO3BhZGRpbmc6M3B4IDVweH1Aa2V5ZnJhbWVzIHBpbm5lZC12aWV3LWZhZGUtb3V0e2Zyb217b3BhY2l0eToxfTY2JXtvcGFjaXR5Oi45OX10b3tvcGFjaXR5OjB9fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoRUMpLnBpcGUoVm4oW10pKSx0aGlzLm5ld0NhcmRQaW5uZWRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KEVDKS5waXBlKENhKDEpLEIoaT0+aS5tYXAocj0+ci5jYXJkSWQpKSx5ZygpLEIoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQoaSkscz1uZXcgU2V0KHIpO2ZvcihsZXQgYSBvZiBzKWlmKCFvLmhhcyhhKSlyZXR1cm4gRGF0ZS5ub3coKTtyZXR1cm4gbnVsbH0pLFZuKG51bGwpLHlnKCksQigoW2kscl0pPT5udWxsPT09aSYmbnVsbD09PXI/bnVsbDpudWxsPT09cj9baV06W3JdKSxIZShpPT5udWxsIT09aSksQihpPT5baVswXV0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJuZXdDYXJkUGlubmVkSWRzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDEsMyxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoIm5ld0NhcmRQaW5uZWRJZHMiLFcoMiw1LGkubmV3Q2FyZFBpbm5lZElkcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbTWNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBTV2Uobix0KXsxJm4mJk4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMyksMiZuJiZiKCJjYXJkT2JzZXJ2ZXIiLE0oKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIEVXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNyksTigxLCJtYXQtc3Bpbm5lciIsMTgpLHYoKSl9dmFyIFRXZT1mdW5jdGlvbihuKXtyZXR1cm57InNsaWRlLW91dC1tZW51LWV4cGFuZGVkIjpufX07ZnVuY3Rpb24gRFdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5KSxOKDEsIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiKSx2KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nQ2xhc3MiLEhuKDEsVFdlLGUuc2xpZGVPdXRNZW51T3BlbikpfX1mdW5jdGlvbiBBV2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIwKSgxLCJkaXYiLDIxKSgyLCJoMiIsMjIpLEQoMywiU2V0dGluZ3MiKSx2KCksZyg0LCJidXR0b24iLDIzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQuZW1pdCgpKX0pLE4oNSwibWF0LWljb24iLDI0KSx2KCkoKSxOKDYsIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiKSx2KCl9fXZhciBJV2U9ZnVuY3Rpb24obil7cmV0dXJue2NoZWNrZWQ6biwic2V0dGluZ3MtYnV0dG9uIjohMH19LFBXZT1uZXcgc2UoIkN1c3RvbWl6YWJsZSBTaGFyZSBCdXR0b24iKSxFY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuY3VzdG9tU2hhcmVCdXR0b249aSx0aGlzLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkPW5ldyBHLHRoaXMub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZD1uZXcgRyx0aGlzLm9uUGx1Z2luVHlwZVRvZ2dsZWQ9bmV3IEcsdGhpcy5vblBsdWdpblR5cGVBbGxUb2dnbGVkPW5ldyBHLHRoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeHcodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIjYwMHB4IDBweCA2MDBweCAwcHgiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQV2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e3Nob3dGaWx0ZXJlZFZpZXc6InNob3dGaWx0ZXJlZFZpZXciLGlzU2lkZXBhbmVPcGVuOiJpc1NpZGVwYW5lT3BlbiIsZmlsdGVyZWRQbHVnaW5UeXBlczoiZmlsdGVyZWRQbHVnaW5UeXBlcyIsaW5pdGlhbFRhZ3NMb2FkaW5nOiJpbml0aWFsVGFnc0xvYWRpbmciLHNsaWRlT3V0TWVudU9wZW46InNsaWRlT3V0TWVudU9wZW4ifSxvdXRwdXRzOntvblNldHRpbmdzQnV0dG9uQ2xpY2tlZDoib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ6Im9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLG9uUGx1Z2luVHlwZVRvZ2dsZWQ6Im9uUGx1Z2luVHlwZVRvZ2dsZWQiLG9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQ6Im9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQifSxkZWNsczoyNCx2YXJzOjIzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBvbiBhIHRvb2xiYXIgYnV0dG9uIHRvIHRvZ2dsZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQn2QzNTE2ZGI2YmJlNjg2MGE1NWJlYWI2NmU0OTY5ZGFjNjI1YjhkNzLikJ83NjU5Mjg1NDQ1NTgwODM4OTI1OlRvZ2dsZSBzZXR0aW5ncyBzaWRlIHBhbmVgLGU9JGxvY2FsaXplYDpMYWJlbCBvbiBhIGJ1dHRvbiB0byBjbG9zZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQnzA0NTIxZGMwYjZhNjVjZjVjMzgyOTQ0YzlhOGI0Yjg0NGEzZTk1OTjikJ84MTU2NzY2OTk3NzQ3MTY1ODcxOkNsb3NlIHNpZGUgcGFuZWAsW1sxLCJ0b29sYmFyIl0sWyJtdWx0aXBsZSIsIiIsImFwcGVhcmFuY2UiLCJzdGFuZGFyZCIsMSwiZmlsdGVyLXZpZXciXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiYWxsIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsInNjYWxhcnMiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaW1hZ2UiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaGlzdG9ncmFtIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWzMsImN1c3RvbWl6YWJsZUNvbXBvbmVudCJdLFsxLCJyaWdodC1pdGVtcyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il0sWzEsInNwbGl0LWNvbnRlbnQiXSxbImNka1Njcm9sbGFibGUiLCIiXSxbMywiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIl0sWzMsImNhcmRPYnNlcnZlciJdLFsiY2xhc3MiLCJsb2FkaW5nLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiw0LCJuZ0lmIl0sWzEsImxvYWRpbmctY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjM2Il0sWzEsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIl0sWzEsInNpZGViYXIiXSxbMSwiaGVhZGVyIl0sWzEsInRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksTigxLCJtZXRyaWNzLXRhZy1maWx0ZXIiKSxnKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSgzLCJidXR0b24iLDIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSksRCg0LCIgQWxsICIpLHYoKSxnKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5TQ0FMQVJTKX0pLEQoNiwiIFNjYWxhcnMgIiksdigpLGcoNywiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLklNQUdFUyl9KSxEKDgsIiBJbWFnZSAiKSx2KCksZyg5LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSxEKDEwLCIgSGlzdG9ncmFtICIpLHYoKSgpLE4oMTEsInRiLWN1c3RvbWl6YXRpb24iLDYpLGcoMTIsImRpdiIsNykoMTMsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSksTigxNCwibWF0LWljb24iLDkpLEQoMTUsIiBTZXR0aW5ncyAiKSx2KCkoKSgpLGcoMTYsImRpdiIsMTApKDE3LCJkaXYiLDExKSxFKDE4LFNXZSwxLDEsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsMTIpLE4oMTksIm1ldHJpY3MtcGlubmVkLXZpZXciLDEzKSxFKDIwLEVXZSwyLDAsImRpdiIsMTQpLE4oMjEsIm1ldHJpY3MtY2FyZC1ncm91cHMiLDEzKSx2KCksRSgyMixEV2UsMiwzLCJkaXYiLDE1KSxFKDIzLEFXZSw3LDAsImRpdiIsMTYpLHYoKSksMiZlJiYoeCgzKSx6ZSgiYXJpYS1jaGVja2VkIiwwPT09aS5maWx0ZXJlZFBsdWdpblR5cGVzLnNpemUpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuU0NBTEFSUykpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuSU1BR0VTKSkseCgyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKSkseCgyKSxiKCJjdXN0b21pemFibGVDb21wb25lbnQiLGkuY3VzdG9tU2hhcmVCdXR0b24pLHgoMiksYigibmdDbGFzcyIsSG4oMjEsSVdlLGkuaXNTaWRlcGFuZU9wZW4pKSx6ZSgiYXJpYS1wcmVzc2VkIixpLmlzU2lkZXBhbmVPcGVuKSx4KDQpLGF0KCJtYWluIiwhMCkoImZpbHRlci12aWV3IixpLnNob3dGaWx0ZXJlZFZpZXcpLHgoMSksYigibmdJZiIsaS5zaG93RmlsdGVyZWRWaWV3KSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaW5pdGlhbFRhZ3NMb2FkaW5nKSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pLHgoMSksYigibmdJZiIsaS5pc1NpZGVwYW5lT3BlbikpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLFBuZSxZcCwkbiwkNSxabix2byxWbmUsam5lLHBjZSxnY2Usd2NlLFNjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy10YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAxMDBweH0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO21hcmdpbi1sZWZ0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweDttaW4td2lkdGg6dW5zZXQ7cGFkZGluZzowIDEycHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9LnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OmNhbGMoMTAwJSAtIDQ5cHgpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjUwcHg7dG9wOjQ5cHg7dHJhbnNpdGlvbjphbGwgLjc1cyBlYXNlO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjIwMHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LnNsaWRlLW91dC1tZW51LWV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtyaWdodDoyNTBweDt2aXNpYmlsaXR5OnZpc2libGV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxUY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc1NpZGVwYW5lT3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QockEpLHRoaXMuaW5pdGlhbFRhZ3NMb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdChTQykucGlwZShZeShpPT5udWxsPT09aS5sYXN0TG9hZGVkVGltZUluTXMsITApLEIoaT0+aS5zdGF0ZT09PUVlLkxPQURJTkcmJm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcykpLHRoaXMuc2hvd0ZpbHRlcmVkVmlldyQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLnBpcGUoQihpPT5pLmxlbmd0aD4wKSksdGhpcy5maWx0ZXJlZFBsdWdpblR5cGVzJD10aGlzLnN0b3JlLnNlbGVjdCh4dSksdGhpcy5pc1NsaWRlb3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KG9BKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZVAoKSl9b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJEkoKSl9b25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKERQKHtwbHVnaW46ZX0pKX1vblNob3dBbGxQbHVnaW5zKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChBUCgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3Il1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJpbml0aWFsVGFnc0xvYWRpbmciLCJmaWx0ZXJlZFBsdWdpblR5cGVzIiwic2xpZGVPdXRNZW51T3BlbiIsIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsIm9uUGx1Z2luVHlwZVRvZ2dsZWQiLCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiLDApLFAoIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSgib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl9KSgib25QbHVnaW5UeXBlVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChvKX0pKCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2hvd0FsbFBsdWdpbnMoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoInNob3dGaWx0ZXJlZFZpZXciLFcoMSw1LGkuc2hvd0ZpbHRlcmVkVmlldyQpKSgiaXNTaWRlcGFuZU9wZW4iLFcoMiw3LGkuaXNTaWRlcGFuZU9wZW4kKSkoImluaXRpYWxUYWdzTG9hZGluZyIsVygzLDksaS5pbml0aWFsVGFnc0xvYWRpbmckKSkoImZpbHRlcmVkUGx1Z2luVHlwZXMiLFcoNCwxMSxpLmZpbHRlcmVkUGx1Z2luVHlwZXMkKSkoInNsaWRlT3V0TWVudU9wZW4iLFcoNSwxMyxpLmlzU2xpZGVvdXRNZW51T3BlbiQpKX0sZGVwZW5kZW5jaWVzOltFY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEdzPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ0hFQ0tCT1g9ImNoZWNrYm94IixuLlJVTl9OQU1FPSJydW5fbmFtZSIsbi5FWFBFUklNRU5UX05BTUU9ImV4cGVyaW1lbnRfbmFtZSIsbi5SVU5fQ09MT1I9InJ1bl9jb2xvciJ9KEdzfHwoR3M9e30pKSxHcykpKCksTmg9e307U08oTmgse2dldEV4cGVyaW1lbnRzSHBhcmFtc0FuZE1ldHJpY3NTcGVjczooKT0+eldlLGdldEhwYXJhbUZpbHRlck1hcDooKT0+TldlLGdldEhwYXJhbUZpbHRlck1hcEZyb21FeHBlcmltZW50SWRzOigpPT5MV2UsZ2V0TWV0cmljRmlsdGVyTWFwOigpPT5IV2UsZ2V0TWV0cmljRmlsdGVyTWFwRnJvbUV4cGVyaW1lbnRJZHM6KCk9PlVXZX0pO3ZhciBxZD1QcihSRCk7ZnVuY3Rpb24gQWNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLmhwYXJhbS5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIHhDKGUpfXZhciBrV2U9WShxZCxBY2UpO2Z1bmN0aW9uIEljZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5ocGFyYW1zPz9bXV0pfXZhciBOV2U9WShxZCxrV2UsSWNlKTtmdW5jdGlvbiBMV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+QWNlKHQsbikpfShuKSwodCxlKT0+SWNlKHQsZSxuKSl9ZnVuY3Rpb24gUGNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLm1ldHJpYy5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIFBEKGUpfXZhciBCV2U9WShxZCxQY2UpO2Z1bmN0aW9uIFJjZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5tZXRyaWNzPz9bXV0pfXZhciBIV2U9WShxZCxCV2UsUmNlKTtmdW5jdGlvbiBVV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+UGNlKHQsbikpfShuKSwodCxlKT0+UmNlKHQsZSxuKSl9dmFyIHpXZT1ZKHFkLChuLHQpPT5mdW5jdGlvbiguLi5uKXtsZXQgdD1uZXcgTWFwLGU9bmV3IE1hcCxpPW5ldyBNYXAscj1uZXcgTWFwLG89W107Zm9yKGxldCBzIG9mIG4pe2ZvcihsZXQgYSBvZiBzLmhwYXJhbXMpaWYoZS5oYXMoYS5uYW1lKXx8ZS5zZXQoYS5uYW1lLG5ldyBTZXQpLGUuZ2V0KGEubmFtZSkuYWRkKGEuZGlzcGxheU5hbWUpLHQuaGFzKGEubmFtZSkpe2xldCBsPXQuZ2V0KGEubmFtZSksYz1hO2lmKGwudHlwZSE9PWMudHlwZSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgdHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wudHlwZX0gdnMuICR7Yy50eXBlfWApLGwuZG9tYWluLnR5cGU9PT1Lbi5JTlRFUlZBTCYmYy5kb21haW4udHlwZT09PUtuLklOVEVSVkFMKShsLmRvbWFpbi5taW5WYWx1ZSE9PWMuZG9tYWluLm1pblZhbHVlfHxsLmRvbWFpbi5tYXhWYWx1ZSE9PWMuZG9tYWluLm1heFZhbHVlKSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC5kb21haW59IHZzLiAke2MuZG9tYWlufWApO2Vsc2UgaWYobC5kb21haW4udHlwZT09PUtuLkRJU0NSRVRFJiZjLmRvbWFpbi50eXBlPT09S24uRElTQ1JFVEUpe2xldCB1PW5ldyBTZXQoWy4uLmwuZG9tYWluLnZhbHVlcywuLi5jLmRvbWFpbi52YWx1ZXNdKTsobC5kb21haW4udmFsdWVzLmxlbmd0aCE9PWMuZG9tYWluLnZhbHVlcy5sZW5ndGh8fGwuZG9tYWluLnZhbHVlcy5sZW5ndGghPT11LnNpemUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSBvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSB0LnNldChhLm5hbWUsey4uLmF9KTtmb3IobGV0IGEgb2Ygcy5tZXRyaWNzKWlmKHIuaGFzKGEudGFnKXx8ci5zZXQoYS50YWcsbmV3IFNldCksci5nZXQoYS50YWcpLmFkZChhLmRpc3BsYXlOYW1lKSxpLmhhcyhhLnRhZykpe2xldCBsPWkuZ2V0KGEudGFnKSxjPWE7bC5kYXRhc2V0VHlwZSE9PWMuZGF0YXNldFR5cGUmJm8ucHVzaChgTWV0cmljLCAke2MudGFnfSwgZGF0YXNldFR5cGVzIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRhdGFzZXRUeXBlfSB2cy4gJHtjLmRhdGFzZXRUeXBlfWApfWVsc2UgaS5zZXQoYS50YWcsey4uLmF9KX1pZihvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZXJyb3I6XG4ke28uam9pbigiXG4iKX1gKTtyZXR1cm57aHBhcmFtczpbLi4udF0ubWFwKChbcyxhXSk9Pih7Li4uYSxkaXNwbGF5TmFtZTpbLi4uZS5nZXQocyldLmpvaW4oIiBvciAiKX0pKSxtZXRyaWNzOlsuLi5pXS5tYXAoKFtzLGFdKT0+KHsuLi5hLGRpc3BsYXlOYW1lOlsuLi5yLmdldChzKV0uam9pbigiIG9yICIpfSkpfX0oLi4udC5leHBlcmltZW50SWRzLm1hcChlPT57bGV0IGk9bi5zcGVjc1tlXTtyZXR1cm4gaT97aHBhcmFtczppLmhwYXJhbS5zcGVjcyxtZXRyaWNzOmkubWV0cmljLnNwZWNzfTpudWxsfSkuZmlsdGVyKEJvb2xlYW4pKSksaldlPVsidG9vbHRpcCJdLE9jZT0idG9vbHRpcC1wYW5lbCIsa2NlPU5zKHtwYXNzaXZlOiEwfSksRmNlPW5ldyBzZSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksWVdlPXtwcm92aWRlOkZjZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oe3Njcm9sbFRocm90dGxlOjIwfSl9fSxYV2U9bmV3IHNlKCJtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dEZWxheTowLGhpZGVEZWxheTowLHRvdWNoZW5kSGlkZURlbGF5OjE1MDB9fX0pLEtXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX3Njcm9sbERpc3BhdGNoZXI9cix0aGlzLl92aWV3Q29udGFpbmVyUmVmPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZGlyPWQsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cCx0aGlzLl9wb3NpdGlvbj0iYmVsb3ciLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5fc2hvd0RlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLnNob3dEZWxheSx0aGlzLl9oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgVGUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9dSx0aGlzLl9kb2N1bWVudD1oLHAmJihwLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1wLnBvc2l0aW9uKSxwLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9cC50b3VjaEdlc3R1cmVzKSksZC5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKX0pfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7ZSE9PXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249ZSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZiksdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5zaG93KDApLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5oaWRlKDApOnRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKX1nZXQgc2hvd0RlbGF5KCl7cmV0dXJuIHRoaXMuX3Nob3dEZWxheX1zZXQgc2hvd0RlbGF5KGUpe3RoaXMuX3Nob3dEZWxheT1QaShlKX1nZXQgaGlkZURlbGF5KCl7cmV0dXJuIHRoaXMuX2hpZGVEZWxheX1zZXQgaGlkZURlbGF5KGUpe3RoaXMuX2hpZGVEZWxheT1QaShlKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5KX1nZXQgbWVzc2FnZSgpe3JldHVybiB0aGlzLl9tZXNzYWdlfXNldCBtZXNzYWdlKGUpe3RoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMuX21lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9tZXNzYWdlPW51bGwhPWU/U3RyaW5nKGUpLnRyaW0oKToiIiwhdGhpcy5fbWVzc2FnZSYmdGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgwKToodGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2FyaWFEZXNjcmliZXIuZGVzY3JpYmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMubWVzc2FnZSwidG9vbHRpcCIpfSl9KSl9Z2V0IHRvb2x0aXBDbGFzcygpe3JldHVybiB0aGlzLl90b29sdGlwQ2xhc3N9c2V0IHRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwQ2xhc3M9ZSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2U/ImtleWJvYXJkIj09PWUmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuc2hvdygpKTp0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMuZm9yRWFjaCgoW2kscl0pPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscixrY2UpfSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGg9MCx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oZSx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcoZSl9c2hvdyhlPXRoaXMuc2hvd0RlbGF5KXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHx0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKTtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KCk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IENjKHRoaXMuX3Rvb2x0aXBDb21wb25lbnQsdGhpcy5fdmlld0NvbnRhaW5lclJlZik7bGV0IHI9dGhpcy5fdG9vbHRpcEluc3RhbmNlPWkuYXR0YWNoKHRoaXMuX3BvcnRhbCkuaW5zdGFuY2U7ci5fdHJpZ2dlckVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHIuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5LHIuYWZ0ZXJIaWRkZW4oKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksci5zaG93KGUpfWhpZGUoZT10aGlzLmhpZGVEZWxheSl7bGV0IGk9dGhpcy5fdG9vbHRpcEluc3RhbmNlO2kmJihpLmlzVmlzaWJsZSgpP2kuaGlkZShlKTooaS5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9kZXRhY2goKSkpfXRvZ2dsZSgpe3RoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX1faXNUb29sdGlwVmlzaWJsZSgpe3JldHVybiEhdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCl9X2NyZWF0ZU92ZXJsYXkoKXtpZih0aGlzLl9vdmVybGF5UmVmKXJldHVybiB0aGlzLl9vdmVybGF5UmVmO2xldCBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLGk9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKGAuJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcGApLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLl92aWV3cG9ydE1hcmdpbikud2l0aFNjcm9sbGFibGVDb250YWluZXJzKGUpO3JldHVybiBpLnBvc2l0aW9uQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5fdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3Moci5jb25uZWN0aW9uUGFpciksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZyLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCkmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuaGlkZSgwKSl9KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6aSxwYW5lbENsYXNzOmAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX1gLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2RldGFjaCgpKSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpJiYyNz09PXIua2V5Q29kZSYmIU1yKHIpJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKSl9KSx0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZVRvb2x0aXBJbnRlcmFjdGl2aXR5JiZ0aGlzLl9vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXAtcGFuZWwtbm9uLWludGVyYWN0aXZlYCksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbihlKXtsZXQgaT1lLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kscj10aGlzLl9nZXRPcmlnaW4oKSxvPXRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpO2kud2l0aFBvc2l0aW9ucyhbdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLm1haW4sLi4uby5tYWlufSksdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLmZhbGxiYWNrLC4uLm8uZmFsbGJhY2t9KV0pfV9hZGRPZmZzZXQoZSl7cmV0dXJuIGV9X2dldE9yaWdpbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aXx8ImJlbG93Ij09aT9yPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09aT8idG9wIjoiYm90dG9tIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm9yaWdpblgsci5vcmlnaW5ZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvcmlnaW5YOm8sb3JpZ2luWTpzfX19X2dldE92ZXJsYXlQb3NpdGlvbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToiYm90dG9tIn06ImJlbG93Ij09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToidG9wIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e292ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImNlbnRlciJ9KTtsZXR7eDpvLHk6c309dGhpcy5faW52ZXJ0UG9zaXRpb24oci5vdmVybGF5WCxyLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOnN9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKEh0KDEpLG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpfV9zZXRUb29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCkpfV9pbnZlcnRQb3NpdGlvbihlLGkpe3JldHVybiJhYm92ZSI9PT10aGlzLnBvc2l0aW9ufHwiYmVsb3ciPT09dGhpcy5wb3NpdGlvbj8idG9wIj09PWk/aT0iYm90dG9tIjoiYm90dG9tIj09PWkmJihpPSJ0b3AiKToiZW5kIj09PWU/ZT0ic3RhcnQiOiJzdGFydCI9PT1lJiYoZT0iZW5kIikse3g6ZSx5Oml9fV91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhlKXtsZXQgcyx7b3ZlcmxheVk6aSxvcmlnaW5YOnIsb3JpZ2luWTpvfT1lO2lmKHM9ImNlbnRlciI9PT1pP3RoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ImVuZCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJzdGFydCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJib3R0b20iPT09aSYmInRvcCI9PT1vPyJhYm92ZSI6ImJlbG93IixzIT09dGhpcy5fY3VycmVudFBvc2l0aW9uKXtsZXQgYT10aGlzLl9vdmVybGF5UmVmO2lmKGEpe2xldCBsPWAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX0tYDthLnJlbW92ZVBhbmVsQ2xhc3MobCt0aGlzLl9jdXJyZW50UG9zaXRpb24pLGEuYWRkUGFuZWxDbGFzcyhsK3MpfXRoaXMuX2N1cnJlbnRQb3NpdGlvbj1zfX1fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpe3RoaXMuX2Rpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHwhdGhpcy5fdmlld0luaXRpYWxpemVkfHx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aHx8KHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpP3RoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbIm1vdXNlZW50ZXIiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksdGhpcy5zaG93KCl9XSk6Im9mZiIhPT10aGlzLnRvdWNoR2VzdHVyZXMmJih0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbInRvdWNoc3RhcnQiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl90b3VjaHN0YXJ0VGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLnNob3coKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2xldCBlPVtdO2lmKHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpKWUucHVzaChbIm1vdXNlbGVhdmUiLGk9PntsZXQgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHwhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocikpJiZ0aGlzLmhpZGUoKX1dLFsid2hlZWwiLGk9PnRoaXMuX3doZWVsTGlzdGVuZXIoaSldKTtlbHNlIGlmKCJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzKXt0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO2xldCBpPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTtlLnB1c2goWyJ0b3VjaGVuZCIsaV0sWyJ0b3VjaGNhbmNlbCIsaV0pfXRoaXMuX2FkZExpc3RlbmVycyhlKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZSl9X2FkZExpc3RlbmVycyhlKXtlLmZvckVhY2goKFtpLHJdKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGkscixrY2UpfSl9X3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpe3JldHVybiF0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9wbGF0Zm9ybS5BTkRST0lEfV93aGVlbExpc3RlbmVyKGUpe2lmKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpIT09ciYmIXIuY29udGFpbnMoaSkmJnRoaXMuaGlkZSgpfX1fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKXtsZXQgZT10aGlzLnRvdWNoR2VzdHVyZXM7aWYoIm9mZiIhPT1lKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQscj1pLnN0eWxlOygib24iPT09ZXx8IklOUFVUIiE9PWkubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1pLm5vZGVOYW1lKSYmKHIudXNlclNlbGVjdD1yLm1zVXNlclNlbGVjdD1yLndlYmtpdFVzZXJTZWxlY3Q9ci5Nb3pVc2VyU2VsZWN0PSJub25lIiksKCJvbiI9PT1lfHwhaS5kcmFnZ2FibGUpJiYoci53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLHIudG91Y2hBY3Rpb249Im5vbmUiLHIud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7cG9zaXRpb246WyJtYXRUb29sdGlwUG9zaXRpb24iLCJwb3NpdGlvbiJdLGRpc2FibGVkOlsibWF0VG9vbHRpcERpc2FibGVkIiwiZGlzYWJsZWQiXSxzaG93RGVsYXk6WyJtYXRUb29sdGlwU2hvd0RlbGF5Iiwic2hvd0RlbGF5Il0saGlkZURlbGF5OlsibWF0VG9vbHRpcEhpZGVEZWxheSIsImhpZGVEZWxheSJdLHRvdWNoR2VzdHVyZXM6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsInRvdWNoR2VzdHVyZXMiXSxtZXNzYWdlOlsibWF0VG9vbHRpcCIsIm1lc3NhZ2UiXSx0b29sdGlwQ2xhc3M6WyJtYXRUb29sdGlwQ2xhc3MiLCJ0b29sdGlwQ2xhc3MiXX19KSxufSkoKSxOY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEtXZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7c3VwZXIoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpLHRoaXMuX3Rvb2x0aXBDb21wb25lbnQ9SldlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KGltKSx3KHlpKSx3KHB0KSx3KHVpKSx3KElBKSx3KHpyKSx3KEZjZSksdyhpciw4KSx3KFhXZSw4KSx3KEJ0KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRvb2x0aXAiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLFpXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgVGUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IHM9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpufSksbn0pKCksSldlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaV2V7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWksdGhpcy5faXNIYW5kc2V0PXRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKCIobWF4LXdpZHRoOiA1OTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIpLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC10b29sdGlwLXNob3ciLHRoaXMuX2hpZGVBbmltYXRpb249Im1hdC10b29sdGlwLWhpZGUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSx3KG5tKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbHRpcC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChqV2UsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fdG9vbHRpcD1yLmZpcnN0KX19LGhvc3RBdHRyczpbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJtb3VzZWxlYXZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlTW91c2VMZWF2ZShvKX0pLDImZSYmT3QoInpvb20iLGkuaXNWaXNpYmxlKCk/MTpudWxsKX0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtdG9vbHRpcCIsMywibmdDbGFzcyIsImFuaW1hdGlvbmVuZCJdLFsidG9vbHRpcCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoImFuaW1hdGlvbmVuZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUFuaW1hdGlvbkVuZChvKX0pLGooMiwiYXN5bmMiKSxEKDMpLHYoKSksMiZlKXtsZXQgcjthdCgibWF0LXRvb2x0aXAtaGFuZHNldCIsbnVsbD09KHI9VygyLDQsaS5faXNIYW5kc2V0KSk/bnVsbDpyLm1hdGNoZXMpLGIoIm5nQ2xhc3MiLGkudG9vbHRpcENsYXNzKSx4KDMpLHl0KGkubWVzc2FnZSl9fSxkZXBlbmRlbmNpZXM6W1BuLGZ0XSxzdHlsZXM6WyIubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC10b29sdGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle2FuaW1hdGlvbjpub25lO3RyYW5zZm9ybTpzY2FsZSgxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbHRpcHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2x0aXAtaGFuZHNldHttYXJnaW46MjRweDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9Lm1hdC10b29sdGlwLXBhbmVsLW5vbi1pbnRlcmFjdGl2ZXtwb2ludGVyLWV2ZW50czpub25lfUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDApfTUwJXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpzY2FsZSgwLjk5KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtaGlkZXswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm1hdC10b29sdGlwLXNob3d7YW5pbWF0aW9uOm1hdC10b29sdGlwLXNob3cgMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Lm1hdC10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC10b29sdGlwLWhpZGUgMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTGNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1lXZV0saW1wb3J0czpbUF8sa2UsVm8sZG4sZG4sU3VdfSksbn0pKCk7ZnVuY3Rpb24gZTdlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwxOSksRCgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigidmFsdWUiLGUpLHgoMSkscWUoIiAiLGUsIiAiKX19ZnVuY3Rpb24gdDdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDE2KSgxLCJtYXQtc2VsZWN0IiwxNyksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5fY2hhbmdlUGFnZVNpemUoci52YWx1ZSkpfSksRSgyLGU3ZSwyLDIsIm1hdC1vcHRpb24iLDE4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7YigiYXBwZWFyYW5jZSIsZS5fZm9ybUZpZWxkQXBwZWFyYW5jZSkoImNvbG9yIixlLmNvbG9yKSx4KDEpLGIoInZhbHVlIixlLnBhZ2VTaXplKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJwYW5lbENsYXNzIixlLnNlbGVjdENvbmZpZy5wYW5lbENsYXNzfHwiIikoImRpc2FibGVPcHRpb25DZW50ZXJpbmciLGUuc2VsZWN0Q29uZmlnLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpKCJhcmlhLWxhYmVsIixlLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsKSx4KDEpLGIoIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIG43ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHl0KGUucGFnZVNpemUpfX1mdW5jdGlvbiBpN2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLEUoMyx0N2UsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLEUoNCxuN2UsMiwxLCJkaXYiLDE1KSx2KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSx4KDEpLGIoIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSkseCgxKSxiKCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gcjdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiwyMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5maXJzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDIyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKX19ZnVuY3Rpb24gbzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2puKCksU2EoKSxnKDAsImJ1dHRvbiIsMjMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkubGFzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDI0KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpfX1Icigic3RhdGUiLFtFaSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkifSkpLEVpKCJ2aXNpYmxlIixybih7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSksSWkoIiogPT4gdmlzaWJsZSIsVmkoIjIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixPZihbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIixvZmZzZXQ6MH0pLHJuKHtvcGFjaXR5Oi41LHRyYW5zZm9ybToic2NhbGUoMC45OSkiLG9mZnNldDouNX0pLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSIsb2Zmc2V0OjF9KV0pKSksSWkoIiogPT4gaGlkZGVuIixWaSgiMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSk7dmFyIG9nPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IFRlLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9KGUsaSxyKT0+e2lmKDA9PXJ8fDA9PWkpcmV0dXJuYDAgb2YgJHtyfWA7bGV0IG89ZSppO3JldHVybmAke28rMX0gXHUyMDEzICR7bzwocj1NYXRoLm1heChyLDApKT9NYXRoLm1pbihvK2kscik6bytpfSBvZiAke3J9YH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGE3ZT17cHJvdmlkZTpvZyxkZXBzOltbbmV3IE9vLG5ldyBUYSxvZ11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBvZ319LGM3ZT1uZXcgc2UoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksdTdlPWdvKE9BKGNsYXNze30pKSxkN2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHU3ZXtjb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRyx0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoUGkoZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9UGkoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChQaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5QaShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9V3QoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1XdChlKX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4KzEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1wcmV2aW91c1BhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5wYWdlSW5kZXgtMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWZpcnN0UGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLmdldE51bWJlck9mUGFnZXMoKS0xLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4Pj0xJiYwIT10aGlzLnBhZ2VTaXplfWhhc05leHRQYWdlKCl7bGV0IGU9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMTtyZXR1cm4gdGhpcy5wYWdlSW5kZXg8ZSYmMCE9dGhpcy5wYWdlU2l6ZX1nZXROdW1iZXJPZlBhZ2VzKCl7cmV0dXJuIHRoaXMucGFnZVNpemU/TWF0aC5jZWlsKHRoaXMubGVuZ3RoL3RoaXMucGFnZVNpemUpOjB9X2NoYW5nZVBhZ2VTaXplKGUpe2xldCByPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS9lKXx8MCx0aGlzLnBhZ2VTaXplPWUsdGhpcy5fZW1pdFBhZ2VFdmVudChyKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7IXRoaXMuX2luaXRpYWxpemVkfHwodGhpcy5wYWdlU2l6ZXx8KHRoaXMuX3BhZ2VTaXplPTAhPXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aD90aGlzLnBhZ2VTaXplT3B0aW9uc1swXTo1MCksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zPXRoaXMucGFnZVNpemVPcHRpb25zLnNsaWNlKCksLTE9PT10aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuaW5kZXhPZih0aGlzLnBhZ2VTaXplKSYmdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5wYWdlU2l6ZSksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGUsaSk9PmUtaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9lbWl0UGFnZUV2ZW50KGUpe3RoaXMucGFnZS5lbWl0KHtwcmV2aW91c1BhZ2VJbmRleDplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLGxlbmd0aDp0aGlzLmxlbmd0aH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7SmwoKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2NvbG9yOiJjb2xvciIscGFnZUluZGV4OiJwYWdlSW5kZXgiLGxlbmd0aDoibGVuZ3RoIixwYWdlU2l6ZToicGFnZVNpemUiLHBhZ2VTaXplT3B0aW9uczoicGFnZVNpemVPcHRpb25zIixoaWRlUGFnZVNpemU6ImhpZGVQYWdlU2l6ZSIsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6InNob3dGaXJzdExhc3RCdXR0b25zIixzZWxlY3RDb25maWc6InNlbGVjdENvbmZpZyJ9LG91dHB1dHM6e3BhZ2U6InBhZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksc089KCgpPT57Y2xhc3MgbiBleHRlbmRzIGQ3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpLHImJm51bGwhPXIuZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9ci5mb3JtRmllbGRBcHBlYXJhbmNlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhvZyksdyhubiksdyhjN2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwicGFuZWxDbGFzcyIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJhcmlhLWxhYmVsIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRSgyLGk3ZSw1LDMsImRpdiIsMiksZygzLCJkaXYiLDMpKDQsImRpdiIsNCksRCg1KSx2KCksRSg2LHI3ZSwzLDUsImJ1dHRvbiIsNSksZyg3LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksam4oKSxnKDgsInN2ZyIsNyksTig5LCJwYXRoIiw4KSx2KCkoKSxTYSgpLGcoMTAsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLGpuKCksZygxMSwic3ZnIiw3KSxOKDEyLCJwYXRoIiwxMCksdigpKCksRSgxMyxvN2UsMyw1LCJidXR0b24iLDExKSx2KCkoKSgpKSwyJmUmJih4KDIpLGIoIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSkseCgzKSxxZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIikseCgxKSxiKCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSx4KDEpLGIoIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksemUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLHgoMyksYigibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSx6ZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSx4KDMpLGIoIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixEdSxKcCx1YSxOY2VdLHN0eWxlczpbIi5tYXQtcGFnaW5hdG9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzowIDhweDtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlO3dpZHRoOjEwMCV9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbHttYXJnaW46MCA0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdHttYXJnaW46NnB4IDRweCAwIDRweDt3aWR0aDo1NnB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5le3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGx7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25ze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1wYWdpbmF0b3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyOHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcGFnaW5hdG9yLWljb257ZmlsbDpDYW52YXNUZXh0fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEJjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthN2VdLGltcG9ydHM6W2tlLFJpLElsLExjZSxkbl19KSxufSkoKSxoN2U9WyJtYXQtc29ydC1oZWFkZXIiLCIiXTtmdW5jdGlvbiBmN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDMpLFAoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfSkoIkBhcnJvd1Bvc2l0aW9uLmRvbmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSl9KSxOKDEsImRpdiIsNCksZygyLCJkaXYiLDUpLE4oMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsImRpdiIsOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQGFycm93T3BhY2l0eSIsZS5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhcnJvd1Bvc2l0aW9uIixlLl9nZXRBcnJvd1ZpZXdTdGF0ZSgpKSgiQGFsbG93Q2hpbGRyZW4iLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSkseCgyKSxiKCJAaW5kaWNhdG9yIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQGxlZnRQb2ludGVyIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQHJpZ2h0UG9pbnRlciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKX19dmFyIG03ZT1bIioiXSxWY2U9bmV3IHNlKCJNQVRfU09SVF9ERUZBVUxUX09QVElPTlMiKSxnN2U9T0EoZ28oY2xhc3N7fSkpLHRTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBnN2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1lLHRoaXMuc29ydGFibGVzPW5ldyBNYXAsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZSx0aGlzLnN0YXJ0PSJhc2MiLHRoaXMuX2RpcmVjdGlvbj0iIix0aGlzLnNvcnRDaGFuZ2U9bmV3IEd9Z2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259c2V0IGRpcmVjdGlvbihlKXt0aGlzLl9kaXJlY3Rpb249ZX1nZXQgZGlzYWJsZUNsZWFyKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbGVhcn1zZXQgZGlzYWJsZUNsZWFyKGUpe3RoaXMuX2Rpc2FibGVDbGVhcj1XdChlKX1yZWdpc3RlcihlKXt0aGlzLnNvcnRhYmxlcy5zZXQoZS5pZCxlKX1kZXJlZ2lzdGVyKGUpe3RoaXMuc29ydGFibGVzLmRlbGV0ZShlLmlkKX1zb3J0KGUpe3RoaXMuYWN0aXZlIT1lLmlkPyh0aGlzLmFjdGl2ZT1lLmlkLHRoaXMuZGlyZWN0aW9uPWUuc3RhcnQ/ZS5zdGFydDp0aGlzLnN0YXJ0KTp0aGlzLmRpcmVjdGlvbj10aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKGUpLHRoaXMuc29ydENoYW5nZS5lbWl0KHthY3RpdmU6dGhpcy5hY3RpdmUsZGlyZWN0aW9uOnRoaXMuZGlyZWN0aW9ufSl9Z2V0TmV4dFNvcnREaXJlY3Rpb24oZSl7aWYoIWUpcmV0dXJuIiI7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1bImFzYyIsImRlc2MiXTtyZXR1cm4iZGVzYyI9PW4mJmUucmV2ZXJzZSgpLHR8fGUucHVzaCgiIiksZX0oZS5zdGFydHx8dGhpcy5zdGFydCxlPy5kaXNhYmxlQ2xlYXI/P3RoaXMuZGlzYWJsZUNsZWFyPz8hIXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlQ2xlYXIpLG89ci5pbmRleE9mKHRoaXMuZGlyZWN0aW9uKSsxO3JldHVybiBvPj1yLmxlbmd0aCYmKG89MCkscltvXX1uZ09uSW5pdCgpe3RoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFZjZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFNvcnQiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc29ydCJdLGlucHV0czp7ZGlzYWJsZWQ6WyJtYXRTb3J0RGlzYWJsZWQiLCJkaXNhYmxlZCJdLGFjdGl2ZTpbIm1hdFNvcnRBY3RpdmUiLCJhY3RpdmUiXSxzdGFydDpbIm1hdFNvcnRTdGFydCIsInN0YXJ0Il0sZGlyZWN0aW9uOlsibWF0U29ydERpcmVjdGlvbiIsImRpcmVjdGlvbiJdLGRpc2FibGVDbGVhcjpbIm1hdFNvcnREaXNhYmxlQ2xlYXIiLCJkaXNhYmxlQ2xlYXIiXX0sb3V0cHV0czp7c29ydENoYW5nZToibWF0U29ydENoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U29ydCJdLGZlYXR1cmVzOlt0dCx6dF19KSxufSkoKSxMaD1ySi5FTlRFUklORysiICIraUouU1RBTkRBUkRfQ1VSVkUsUnk9e2luZGljYXRvcjpIcigiaW5kaWNhdG9yIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwcHgpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTBweCkifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLGxlZnRQb2ludGVyOkhyKCJsZWZ0UG9pbnRlciIsW0VpKCJhY3RpdmUtYXNjLCBhc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLHJpZ2h0UG9pbnRlcjpIcigicmlnaHRQb2ludGVyIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksRWkoImFjdGl2ZS1kZXNjLCBkZXNjIixybih7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksSWkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixWaShMaCkpXSksYXJyb3dPcGFjaXR5OkhyKCJhcnJvd09wYWNpdHkiLFtFaSgiZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe29wYWNpdHk6MX0pKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCIscm4oe29wYWNpdHk6LjU0fSkpLEVpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjLCBoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjLCB2b2lkIixybih7b3BhY2l0eTowfSkpLElpKCIqID0+IGFzYywgKiA9PiBkZXNjLCAqID0+IGFjdGl2ZSwgKiA9PiBoaW50LCAqID0+IHZvaWQiLFZpKCIwbXMiKSksSWkoIiogPD0+ICoiLFZpKExoKSldKSxhcnJvd1Bvc2l0aW9uOkhyKCJhcnJvd1Bvc2l0aW9uIixbSWkoIiogPT4gZGVzYy10by1oaW50LCAqID0+IGRlc2MtdG8tYWN0aXZlIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWRlc2MsICogPT4gYWN0aXZlLXRvLWRlc2MiLFZpKExoLE9mKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KV0pKSksSWkoIiogPT4gYXNjLXRvLWhpbnQsICogPT4gYXNjLXRvLWFjdGl2ZSIsVmkoTGgsT2YoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWFzYywgKiA9PiBhY3RpdmUtdG8tYXNjIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pXSkpKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCwgZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSksRWkoImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSkpLEVpKCJoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSkpXSksYWxsb3dDaGlsZHJlbjpIcigiYWxsb3dDaGlsZHJlbiIsW0lpKCIqIDw9PiAqIixbRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSldKX0sYU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcgVGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHk3ZT17cHJvdmlkZTphTyxkZXBzOltbbmV3IE9vLG5ldyBUYSxhT11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBhT319LGI3ZT1nbyhjbGFzc3t9KSxIY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGI3ZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5faW50bD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc29ydD1yLHRoaXMuX2NvbHVtbkRlZj1vLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEsdGhpcy5fdmlld1N0YXRlPXt9LHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPSJTb3J0IixjPy5hcnJvd1Bvc2l0aW9uJiYodGhpcy5hcnJvd1Bvc2l0aW9uPWM/LmFycm93UG9zaXRpb24pLHRoaXMuX2hhbmRsZVN0YXRlQ2hhbmdlcygpfWdldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuaWQmJnRoaXMuX2NvbHVtbkRlZiYmKHRoaXMuaWQ9dGhpcy5fY29sdW1uRGVmLm5hbWUpLHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHt0b1N0YXRlOnRoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZSI6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSx0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpLHRoaXMuX3NvcnRCdXR0b249dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiksdGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntsZXQgaT0hIWU7aSE9PXRoaXMuX3Nob3dJbmRpY2F0b3JIaW50JiYodGhpcy5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKGUpe3RoaXMuX2lzRGlzYWJsZWQoKSYmZXx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PWUsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoZSl7dGhpcy5fdmlld1N0YXRlPWV8fHt9LHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24mJih0aGlzLl92aWV3U3RhdGU9e3RvU3RhdGU6ZS50b1N0YXRlfSl9X3RvZ2dsZU9uSW50ZXJhY3Rpb24oKXt0aGlzLl9zb3J0LnNvcnQodGhpcyksKCJoaW50Ij09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlKSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKGUpeyF0aGlzLl9pc0Rpc2FibGVkKCkmJigzMj09PWUua2V5Q29kZXx8MTM9PT1lLmtleUNvZGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2xldCBlPXRoaXMuX3ZpZXdTdGF0ZS5mcm9tU3RhdGU7cmV0dXJuKGU/YCR7ZX0tdG8tYDoiIikrdGhpcy5fdmlld1N0YXRlLnRvU3RhdGV9X3VwZGF0ZUFycm93RGlyZWN0aW9uKCl7dGhpcy5fYXJyb3dEaXJlY3Rpb249dGhpcy5faXNTb3J0ZWQoKT90aGlzLl9zb3J0LmRpcmVjdGlvbjp0aGlzLnN0YXJ0fHx0aGlzLl9zb3J0LnN0YXJ0fV9pc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZWR9X2dldEFyaWFTb3J0QXR0cmlidXRlKCl7cmV0dXJuIHRoaXMuX2lzU29ydGVkKCk/ImFzYyI9PXRoaXMuX3NvcnQuZGlyZWN0aW9uPyJhc2NlbmRpbmciOiJkZXNjZW5kaW5nIjoibm9uZSJ9X3JlbmRlckFycm93KCl7cmV0dXJuIXRoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5faXNTb3J0ZWQoKX1fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpe3RoaXMuX3NvcnRCdXR0b24mJih0aGlzLl9hcmlhRGVzY3JpYmVyPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9zb3J0QnV0dG9uLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbiksdGhpcy5fYXJpYURlc2NyaWJlcj8uZGVzY3JpYmUodGhpcy5fc29ydEJ1dHRvbixlKSksdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPWV9X2hhbmRsZVN0YXRlQ2hhbmdlcygpe3RoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uPXVuKHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0Ll9zdGF0ZUNoYW5nZXMsdGhpcy5faW50bC5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc1NvcnRlZCgpJiYodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYU8pLHcobm4pLHcodFMsOCksdygiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLDgpLHcoenIpLHcoQWUpLHcoSUEsOCksdyhWY2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSksMiZlJiYoemUoImFyaWEtc29ydCIsaS5fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSksYXQoIm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCIsaS5faXNEaXNhYmxlZCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDpbIm1hdC1zb3J0LWhlYWRlciIsImlkIl0sYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsc3RhcnQ6InN0YXJ0Iixzb3J0QWN0aW9uRGVzY3JpcHRpb246InNvcnRBY3Rpb25EZXNjcmlwdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmg3ZSxuZ0NvbnRlbnRTZWxlY3RvcnM6bTdlLGRlY2xzOjQsdmFyczo3LGNvbnN0czpbWzEsIm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1jb250ZW50Il0sWyJjbGFzcyIsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyIsNCwibmdJZiJdLFsxLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciXSxbMSwibWF0LXNvcnQtaGVhZGVyLXN0ZW0iXSxbMSwibWF0LXNvcnQtaGVhZGVyLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDApKDEsImRpdiIsMSksTm4oMiksdigpLEUoMyxmN2UsNiw2LCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLGkuX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09PWkuYXJyb3dQb3NpdGlvbiksemUoInRhYmluZGV4IixpLl9pc0Rpc2FibGVkKCk/bnVsbDowKSgicm9sZSIsaS5faXNEaXNhYmxlZCgpP251bGw6ImJ1dHRvbiIpLHgoMyksYigibmdJZiIsaS5fcmVuZGVyQXJyb3coKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc29ydC1oZWFkZXItY29udGVudHt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3Jle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7b3BhY2l0eTowfS5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgMCAwIDZweH0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDZweCAwIDB9Lm1hdC1zb3J0LWhlYWRlci1zdGVte2JhY2tncm91bmQ6Y3VycmVudENvbG9yO2hlaWdodDoxMHB4O3dpZHRoOjJweDttYXJnaW46YXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1zdGVte3dpZHRoOjA7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItaW5kaWNhdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle21hcmdpbjphdXRvO2hlaWdodDoycHg7d2lkdGg6MnB4O2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXt3aWR0aDowO2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7d2lkdGg6NnB4O2hlaWdodDoycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OnNvbGlkIDZweDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0O2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0O3JpZ2h0OjB9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUnkuaW5kaWNhdG9yLFJ5LmxlZnRQb2ludGVyLFJ5LnJpZ2h0UG9pbnRlcixSeS5hcnJvd09wYWNpdHksUnkuYXJyb3dQb3NpdGlvbixSeS5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxVY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbeTdlXSxpbXBvcnRzOltrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBReihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3N0aWNreT0hMSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfWdldCBzdGlja3koKXtyZXR1cm4gdGhpcy5fc3RpY2t5fXNldCBzdGlja3kodCl7bGV0IGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1XdCh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9aGFzU3RpY2t5Q2hhbmdlZCgpe2xldCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19dmFyIEt6PW5ldyBzZSgiQ0RLX1RBQkxFIiksemNlPShuZXcgc2UoInRleHQtY29sdW1uLW9wdGlvbnMiKSxReihjbGFzc3t9KSxuZXcgc2UoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIiksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPWl9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuX2NvbHVtbnNEaWZmZXIpe2xldCBpPWUuY29sdW1ucyYmZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoaSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGkpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgamNlP2UuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgR2NlP2UuZm9vdGVyQ2VsbC50ZW1wbGF0ZTplLmNlbGwudGVtcGxhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCkpLHc3ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxqY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHc3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLE03ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxHY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE03ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLFdjZT0obmV3IHNlKCJDREtfU1BMIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0NkXX0pLG59KSgpKSxxY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1djZSxkbixkbl19KSxufSkoKSxaej1jbGFzcyBleHRlbmRzIGtfe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgVnIoW10pLHRoaXMuX2ZpbHRlcj1uZXcgVnIoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IFRlLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKE5WKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLHU9dHlwZW9mIGwsZD10eXBlb2YgYzt1IT09ZCYmKCJudW1iZXIiPT09dSYmKGwrPSIiKSwibnVtYmVyIj09PWQmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBWcih0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfXNldCBkYXRhKHQpe3Q9QXJyYXkuaXNBcnJheSh0KT90OltdLHRoaXMuX2RhdGEubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHQpfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5fZmlsdGVyLnZhbHVlfXNldCBmaWx0ZXIodCl7dGhpcy5fZmlsdGVyLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0aGlzLmRhdGEpfWdldCBzb3J0KCl7cmV0dXJuIHRoaXMuX3NvcnR9c2V0IHNvcnQodCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBwYWdpbmF0b3IoKXtyZXR1cm4gdGhpcy5fcGFnaW5hdG9yfXNldCBwYWdpbmF0b3IodCl7dGhpcy5fcGFnaW5hdG9yPXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9X3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpe2xldCB0PXRoaXMuX3NvcnQ/dW4odGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOmp0KG51bGwpLGU9dGhpcy5fcGFnaW5hdG9yP3VuKHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpqdChudWxsKSxyPXBuKFt0aGlzLl9kYXRhLHRoaXMuX2ZpbHRlcl0pLnBpcGUoQigoW2FdKT0+dGhpcy5fZmlsdGVyRGF0YShhKSkpLG89cG4oW3IsdF0pLnBpcGUoQigoW2FdKT0+dGhpcy5fb3JkZXJEYXRhKGEpKSkscz1wbihbbyxlXSkucGlwZShCKChbYV0pPT50aGlzLl9wYWdlRGF0YShhKSkpO3RoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1zLnN1YnNjcmliZShhPT50aGlzLl9yZW5kZXJEYXRhLm5leHQoYSkpfV9maWx0ZXJEYXRhKHQpe3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT1udWxsPT10aGlzLmZpbHRlcnx8IiI9PT10aGlzLmZpbHRlcj90OnQuZmlsdGVyKGU9PnRoaXMuZmlsdGVyUHJlZGljYXRlKGUsdGhpcy5maWx0ZXIpKSx0aGlzLnBhZ2luYXRvciYmdGhpcy5fdXBkYXRlUGFnaW5hdG9yKHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCksdGhpcy5maWx0ZXJlZERhdGF9X29yZGVyRGF0YSh0KXtyZXR1cm4gdGhpcy5zb3J0P3RoaXMuc29ydERhdGEodC5zbGljZSgpLHRoaXMuc29ydCk6dH1fcGFnZURhdGEodCl7aWYoIXRoaXMucGFnaW5hdG9yKXJldHVybiB0O2xldCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtsZXQgaT1NYXRoLmNlaWwoZS5sZW5ndGgvZS5wYWdlU2l6ZSktMXx8MCxyPU1hdGgubWluKGUucGFnZUluZGV4LGkpO3IhPT1lLnBhZ2VJbmRleCYmKGUucGFnZUluZGV4PXIsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcy5uZXh0KCkpfX0pfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPW51bGx9fSxsTz1jbGFzcyBleHRlbmRzIFp6e30sVDdlPVsiZGlhbG9nUG9wdXAiXSxEN2U9WyJodWVTbGlkZXIiXSxBN2U9WyJhbHBoYVNsaWRlciJdO2Z1bmN0aW9uIEk3ZShuLHQpe2lmKDEmbiYmTigwLCJkaXYiKSwyJm4pe2xldCBlPU0oKTtSYigiYXJyb3cgYXJyb3ctIixlLmNwVXNlUG9zaXRpb24sIiIpLE90KCJ0b3AiLGUuYXJyb3dUb3AsInB4Iil9fWZ1bmN0aW9uIFA3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25EcmFnRW5kKCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pLE4oMSwiZGl2IiwxNCksdigpfWlmKDImbil7bGV0IGU9TSgpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmh1ZVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpKCJyZ1kiLDEpLHgoMSksT3QoInRvcCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIFI3ZShuLHQpezEmbiYmKGpuKCksZygwLCJzdmciLDI5KSxOKDEsInBhdGgiLDMwKSgyLCJwYXRoIiwzMSksdigpKX1mdW5jdGlvbiBPN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2VhKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSxiKCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLHgoMSkscWUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gazdlKG4sdCl7MSZuJiZOKDAsImRpdiIsMzMpfWZ1bmN0aW9uIEY3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gTjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEw3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzQpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25DeWFuSW5wdXQocikpfSksdigpLGcoMywiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk1hZ2VudGFJbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uWWVsbG93SW5wdXQocikpfSksdigpLGcoNSwiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkJsYWNrSW5wdXQocikpfSksdigpLEUoNixGN2UsMSwyLCJpbnB1dCIsMzcpLHYoKSxnKDcsImRpdiIsMzUpKDgsImRpdiIpLEQoOSwiQyIpLHYoKSxnKDEwLCJkaXYiKSxEKDExLCJNIiksdigpLGcoMTIsImRpdiIpLEQoMTMsIlkiKSx2KCksZygxNCwiZGl2IiksRCgxNSwiSyIpLHYoKSxFKDE2LE43ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLHgoMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSkseCgxKSxiKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDEwKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIEI3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gVjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IdWVJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLHYoKSxnKDQsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaWdodG5lc3NJbnB1dChyKSl9KSx2KCksRSg1LEI3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNiwiZGl2IiwzNSkoNywiZGl2IiksRCg4LCJIIiksdigpLGcoOSwiZGl2IiksRCgxMCwiUyIpLHYoKSxnKDExLCJkaXYiKSxEKDEyLCJMIiksdigpLEUoMTMsVjdlLDIsMCwiZGl2IiwzOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7T3QoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIikseCgyKSxiKCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCkseCgxKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCkseCg4KSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFU3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gejdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIGo3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDIpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MyksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25SZWRJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uR3JlZW5JbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQmx1ZUlucHV0KHIpKX0pLHYoKSxFKDUsVTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg2LCJkaXYiLDM1KSg3LCJkaXYiKSxEKDgsIlIiKSx2KCksZyg5LCJkaXYiKSxEKDEwLCJHIiksdigpLGcoMTEsImRpdiIpLEQoMTIsIkIiKSx2KCksRSgxMyx6N2UsMiwwLCJkaXYiLDM4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgiZGlzcGxheSIsMSE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSx4KDIpLGIoInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQucikseCgxKSxiKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmcpLHgoMSksYigicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5iKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDgpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gRzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaW5wdXQiLDM5KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWxwaGFJbnB1dChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBXN2Uobix0KXsxJm4mJihnKDAsImRpdiIpLEQoMSwiQSIpLHYoKSl9ZnVuY3Rpb24gcTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxQKCJibHVyIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChudWxsKSl9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChyKSl9KSx2KCksRSgzLEc3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNCwiZGl2IiwzNSkoNSwiZGl2IiksRCg2LCJIZXgiKSx2KCksRSg3LFc3ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGF0KCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCgyKSxiKCJ2YWx1ZSIsZS5oZXhUZXh0KSx4KDEpLGIoIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCg0KSxiKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBZN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJpbnB1dCIsMzkpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BbHBoYUlucHV0KHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIFg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25WYWx1ZUlucHV0KHIpKX0pLHYoKSxFKDMsWTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg0LCJkaXYiLDM1KSg1LCJkaXYiKSxEKDYsIlYiKSx2KCksZyg3LCJkaXYiKSxEKDgsIkEiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gUTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NykoMSwic3BhbiIsNDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLHYoKSxnKDIsInNwYW4iLDQ4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLHYoKSgpfX1mdW5jdGlvbiBLN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1NSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykub25SZW1vdmVQcmVzZXRDb2xvcihyLG8pKX0pLHYoKX0yJm4mJmVhKE0oNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBaN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDUzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLEUoMSxLN2UsMSwzLCJzcGFuIiw1NCksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDMpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIEo3ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRSgxLFo3ZSwyLDMsImRpdiIsNTIpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRDb2xvcnNDbGFzcykseCgxKSxiKCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gJDdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcykseCgxKSx5dChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gZTllKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDQ5KSxOKDEsImhyIiksZygyLCJkaXYiLDUwKSxEKDMpLHYoKSxFKDQsSjdlLDIsNCwiZGl2Iiw1MSksRSg1LCQ3ZSwyLDQsImRpdiIsNTEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgzKSx5dChlLmNwUHJlc2V0TGFiZWwpLHgoMSksYigibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiB0OWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDU4KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25DYW5jZWxDb2xvcihyKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7ZWEoZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gbjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw1OCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSksRCgxKSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BPS0J1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BPS0J1dHRvblRleHQpfX1mdW5jdGlvbiBpOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTYpLEUoMSx0OWUsMiw0LCJidXR0b24iLDU3KSxFKDIsbjllLDIsNCwiYnV0dG9uIiw1NyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLGUuY3BDYW5jZWxCdXR0b24pLHgoMSksYigibmdJZiIsZS5jcE9LQnV0dG9uKX19ZnVuY3Rpb24gcjllKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBvOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTkpLEUoMSxyOWUsMSwwLCJuZy1jb250YWluZXIiLDYwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jcEV4dHJhVGVtcGxhdGUpfX12YXIgcnM9KCgpPT4oZnVuY3Rpb24obil7bltuLkhFWD0wXT0iSEVYIixuW24uUkdCQT0xXT0iUkdCQSIsbltuLkhTTEE9Ml09IkhTTEEiLG5bbi5DTVlLPTNdPSJDTVlLIn0ocnN8fChycz17fSkpLHJzKSkoKSxMYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzLmE9cn19LE95PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sWWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy5sPWksdGhpcy5hPXJ9fSxzZz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PWksdGhpcy5rPXIsdGhpcy5hPW99fSxsOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEd9aW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoaSk7ZWxzZXtsZXQgcj1wYXJzZUZsb2F0KGkpO3RoaXMubmV3VmFsdWUuZW1pdCh7djpyLHJnOnRoaXMucmd9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJ0ZXh0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlucHV0Q2hhbmdlKG8pfSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsUmVmPWUsdGhpcy5kcmFnRW5kPW5ldyBHLHRoaXMuZHJhZ1N0YXJ0PW5ldyBHLHRoaXMubmV3VmFsdWU9bmV3IEcsdGhpcy5saXN0ZW5lck1vdmU9aT0+dGhpcy5tb3ZlKGkpLHRoaXMubGlzdGVuZXJTdG9wPSgpPT50aGlzLnN0b3AoKX1tb3VzZURvd24oZSl7dGhpcy5zdGFydChlKX10b3VjaFN0YXJ0KGUpe3RoaXMuc3RhcnQoZSl9bW92ZShlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDdXJzb3IoZSl9c3RhcnQoZSl7dGhpcy5zZXRDdXJzb3IoZSksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdTdGFydC5lbWl0KCl9c3RvcCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ0VuZC5lbWl0KCl9Z2V0WChlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVg/ZS5wYWdlWDplLnRvdWNoZXNbMF0ucGFnZVgpLWkubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WShlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVk/ZS5wYWdlWTplLnRvdWNoZXNbMF0ucGFnZVkpLWkudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHI9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxvPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRYKGUpLGkpKSxzPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRZKGUpLHIpKTt2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHtzOm8vaSx2OjEtcy9yLHJnWDp0aGlzLnJnWCxyZ1k6dGhpcy5yZ1l9KTp2b2lkIDA9PT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnMvcixyZ1k6dGhpcy5yZ1l9KTp2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwPT09dGhpcy5yZ1kmJnRoaXMubmV3VmFsdWUuZW1pdCh7djpvL2kscmdYOnRoaXMucmdYfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZURvd24obyl9KSgidG91Y2hzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIGkudG91Y2hTdGFydChvKX0pfSxpbnB1dHM6e3JnWDoicmdYIixyZ1k6InJnWSIsc2xpZGVyOiJzbGlkZXIifSxvdXRwdXRzOntkcmFnRW5kOiJkcmFnRW5kIixkcmFnU3RhcnQ6ImRyYWdTdGFydCIsbmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjTz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LHVPPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sSno9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKGUpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PWUmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPWV9aHN2YTJoc2xhKGUpe2xldCBpPWUuaCxyPWUucyxvPWUudixzPWUuYTtpZigwPT09bylyZXR1cm4gbmV3IFlkKGksMCwwLHMpO2lmKDA9PT1yJiYxPT09bylyZXR1cm4gbmV3IFlkKGksMSwxLHMpO3tsZXQgYT1vKigyLXIpLzI7cmV0dXJuIG5ldyBZZChpLG8qci8oMS1NYXRoLmFicygyKmEtMSkpLGEscyl9fWhzbGEyaHN2YShlKXtsZXQgaT1NYXRoLm1pbihlLmgsMSkscj1NYXRoLm1pbihlLnMsMSksbz1NYXRoLm1pbihlLmwsMSkscz1NYXRoLm1pbihlLmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyBPeShpLDAsMCxzKTt7bGV0IGE9bytyKigxLU1hdGguYWJzKDIqby0xKSkvMjtyZXR1cm4gbmV3IE95KGksMiooYS1vKS9hLGEscyl9fWhzdmFUb1JnYmEoZSl7bGV0IGkscixvLHM9ZS5oLGE9ZS5zLGw9ZS52LGM9ZS5hLHU9TWF0aC5mbG9vcig2KnMpLGQ9NipzLXUscD1sKigxLWEpLGg9bCooMS1kKmEpLGY9bCooMS0oMS1kKSphKTtzd2l0Y2godSU2KXtjYXNlIDA6aT1sLHI9ZixvPXA7YnJlYWs7Y2FzZSAxOmk9aCxyPWwsbz1wO2JyZWFrO2Nhc2UgMjppPXAscj1sLG89ZjticmVhaztjYXNlIDM6aT1wLHI9aCxvPWw7YnJlYWs7Y2FzZSA0Omk9ZixyPXAsbz1sO2JyZWFrO2Nhc2UgNTppPWwscj1wLG89aDticmVhaztkZWZhdWx0Omk9MCxyPTAsbz0wfXJldHVybiBuZXcgTGMoaSxyLG8sYyl9Y215a1RvUmdiKGUpe3JldHVybiBuZXcgTGMoKDEtZS5jKSooMS1lLmspLCgxLWUubSkqKDEtZS5rKSwoMS1lLnkpKigxLWUuayksZS5hKX1yZ2JhVG9DbXlrKGUpe2xldCBpPTEtTWF0aC5tYXgoZS5yLGUuZyxlLmIpO3JldHVybiAxPT09aT9uZXcgc2coMCwwLDAsMSxlLmEpOm5ldyBzZygoMS1lLnItaSkvKDEtaSksKDEtZS5nLWkpLygxLWkpLCgxLWUuYi1pKS8oMS1pKSxpLGUuYSl9cmdiYVRvSHN2YShlKXtsZXQgaSxyLG89TWF0aC5taW4oZS5yLDEpLHM9TWF0aC5taW4oZS5nLDEpLGE9TWF0aC5taW4oZS5iLDEpLGw9TWF0aC5taW4oZS5hLDEpLGM9TWF0aC5tYXgobyxzLGEpLHU9TWF0aC5taW4obyxzLGEpLGQ9YyxwPWMtdTtpZihyPTA9PT1jPzA6cC9jLGM9PT11KWk9MDtlbHNle3N3aXRjaChjKXtjYXNlIG86aT0ocy1hKS9wKyhzPGE/NjowKTticmVhaztjYXNlIHM6aT0oYS1vKS9wKzI7YnJlYWs7Y2FzZSBhOmk9KG8tcykvcCs0O2JyZWFrO2RlZmF1bHQ6aT0wfWkvPTZ9cmV0dXJuIG5ldyBPeShpLHIsZCxsKX1yZ2JhVG9IZXgoZSxpKXtsZXQgcj0iIyIrKDE2Nzc3MjE2fGUucjw8MTZ8ZS5nPDw4fGUuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gaSYmKHIrPSgyNTZ8TWF0aC5yb3VuZCgyNTUqZS5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkscn1ub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgc2coZS5jLzEwMCxlLm0vMTAwLGUueS8xMDAsZS5rLzEwMCxlLmEpfWRlbm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IHNnKE1hdGguZmxvb3IoMTAwKmUuYyksTWF0aC5mbG9vcigxMDAqZS5tKSxNYXRoLmZsb29yKDEwMCplLnkpLE1hdGguZmxvb3IoMTAwKmUuayksZS5hKX1kZW5vcm1hbGl6ZVJHQkEoZSl7cmV0dXJuIG5ldyBMYyhNYXRoLnJvdW5kKDI1NSplLnIpLE1hdGgucm91bmQoMjU1KmUuZyksTWF0aC5yb3VuZCgyNTUqZS5iKSxlLmEpfXN0cmluZ1RvSHN2YShlPSIiLGk9ITEpe2xldCByPW51bGw7ZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCk7bGV0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgTGMocGFyc2VJbnQoc1syXSwxMCkvMjU1LHBhcnNlSW50KHNbM10sMTApLzI1NSxwYXJzZUludChzWzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IFlkKHBhcnNlSW50KHNbMl0sMTApLzM2MCxwYXJzZUludChzWzNdLDEwKS8xMDAscGFyc2VJbnQoc1s0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQoc1s1XSkpPzE6cGFyc2VGbG9hdChzWzVdKSl9fV07by5wdXNoKGk/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LHBhcnNlSW50KHNbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0rc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0rc1syXSwxNikvMjU1LHBhcnNlSW50KHNbM10rc1szXSwxNikvMjU1LDEpfX0pO2ZvcihsZXQgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykpe2xldCBhPW9bc10sbD1hLnJlLmV4ZWMoZSksYz1sJiZhLnBhcnNlKGwpO2lmKGMpcmV0dXJuIGMgaW5zdGFuY2VvZiBMYz9yPXRoaXMucmdiYVRvSHN2YShjKTpjIGluc3RhbmNlb2YgWWQmJihyPXRoaXMuaHNsYTJoc3ZhKGMpKSxyfXJldHVybiByfW91dHB1dEZvcm1hdChlLGkscil7c3dpdGNoKCJhdXRvIj09PWkmJihpPWUuYTwxPyJyZ2JhIjoiaGV4IiksaSl7Y2FzZSJoc2xhIjpsZXQgbz10aGlzLmhzdmEyaHNsYShlKSxzPW5ldyBZZChNYXRoLnJvdW5kKDM2MCpvLmgpLE1hdGgucm91bmQoMTAwKm8ucyksTWF0aC5yb3VuZCgxMDAqby5sKSxNYXRoLnJvdW5kKDEwMCpvLmEpLzEwMCk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/ImhzbGEoIitzLmgrIiwiK3MucysiJSwiK3MubCsiJSwiK3MuYSsiKSI6ImhzbCgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlKSI7Y2FzZSJyZ2JhIjpsZXQgYT10aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIrTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDArIikiOiJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIjtkZWZhdWx0OmxldCBsPSJhbHdheXMiPT09cnx8ImZvcmNlZCI9PT1yO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpLGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWWNlPXR5cGVvZiB3aW5kb3c8InUiJiYib250b3VjaHN0YXJ0ImluIHdpbmRvdyx1OWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5uZ1pvbmU9ZSx0aGlzLmVsUmVmPWksdGhpcy5jZFJlZj1yLHRoaXMuZG9jdW1lbnQ9byx0aGlzLnBsYXRmb3JtSWQ9cyx0aGlzLnNlcnZpY2U9YSx0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W3JzLkhFWCxycy5SR0JBLHJzLkhTTEEscnMuQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmV5ZURyb3BwZXJTdXBwb3J0ZWQ9cFQodGhpcy5wbGF0Zm9ybUlkKSYmIkV5ZURyb3BwZXIiaW4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld31oYW5kbGVFc2MoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcihlKX1oYW5kbGVFbnRlcihlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKGUpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3IGNPKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyB1Tyh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP3JzLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9ycy5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/cnMuSFNMQTpycy5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj1yPT57dGhpcy5vbk1vdXNlRG93bihyKX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgdU8odGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKGUsaT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IoZSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSxpKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2coZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyx5LEksQSxPLGVlLFgseGUsZmUsdmUsVCxuZSxsZSxoZSx5ZSxKLGFlLG1lLGplLE1lLEZlLHV0LFN0KXt0aGlzLnNldEluaXRpYWxDb2xvcihyKSx0aGlzLnNldENvbG9yTW9kZShjKSx0aGlzLmlzSUUxMD0xMD09PWZ1bmN0aW9uKCl7bGV0IG49IiI7dHlwZW9mIG5hdmlnYXRvcjwidSImJihuPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7bGV0IHQ9bi5pbmRleE9mKCJtc2llICIpO3JldHVybiB0PjAmJnBhcnNlSW50KG4uc3Vic3RyaW5nKHQrNSxuLmluZGV4T2YoIi4iLHQpKSwxMCl9KCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZT1lLHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZj1pLHRoaXMuY3BEaXNhYmxlSW5wdXQ9aCx0aGlzLmNwQ215a0VuYWJsZWQ9dSx0aGlzLmNwQWxwaGFDaGFubmVsPWQsdGhpcy5jcE91dHB1dEZvcm1hdD1wLHRoaXMuY3BEaWFsb2dEaXNwbGF5PWEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1mLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPW0sdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPUMsdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj1fLHRoaXMud2lkdGg9dGhpcy5jcFdpZHRoPXBhcnNlSW50KG8sMTApLHRoaXMuaGVpZ2h0PXRoaXMuY3BIZWlnaHQ9cGFyc2VJbnQocywxMCksdGhpcy5jcFBvc2l0aW9uPXksdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PXBhcnNlSW50KEksMTApLHRoaXMuY3BPS0J1dHRvbj1ULHRoaXMuY3BPS0J1dHRvblRleHQ9bGUsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9bmUsdGhpcy5jcENhbmNlbEJ1dHRvbj1oZSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD1KLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz15ZSx0aGlzLmNwRXllRHJvcHBlcj1GZSx0aGlzLmZhbGxiYWNrQ29sb3I9bHx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKE8sZWUpLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz1YLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9eGUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT1mZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9dmUsdGhpcy5jcEFkZENvbG9yQnV0dG9uPWFlLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQ9amUsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9bWUsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9TWUsdGhpcy5jcFRyaWdnZXJFbGVtZW50PXV0LHRoaXMuY3BFeHRyYVRlbXBsYXRlPVN0LEF8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09YSYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PXAmJiJhbHdheXMiIT09ZCYmImZvcmNlZCIhPT1kJiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUoZSl7c3dpdGNoKGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6ZGVmYXVsdDp0aGlzLmNwQ29sb3JNb2RlPTE7YnJlYWs7Y2FzZSIyIjpjYXNlIkciOmNhc2UiR1JBWVNDQUxFIjp0aGlzLmNwQ29sb3JNb2RlPTI7YnJlYWs7Y2FzZSIzIjpjYXNlIlAiOmNhc2UiUFJFU0VUUyI6dGhpcy5jcENvbG9yTW9kZT0zfX1zZXRJbml0aWFsQ29sb3IoZSl7dGhpcy5pbml0aWFsQ29sb3I9ZX1zZXRQcmVzZXRDb25maWcoZSxpKXt0aGlzLmNwUHJlc2V0TGFiZWw9ZSx0aGlzLmNwUHJlc2V0Q29sb3JzPWl9c2V0Q29sb3JGcm9tU3RyaW5nKGUsaT0hMCxyPSEwKXtsZXQgbzsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbD8obz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITApLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpKSk6bz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoaSxyKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6ZSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24oZSl7dGhpcy5zaG93JiYhdGhpcy5pc0lFMTAmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmZS50YXJnZXQhPT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCYmIXRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJjA9PT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcihpPT5pPT09ZS50YXJnZXQpLmxlbmd0aCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jcFNhdmVDbGlja091dHNpZGU/dGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpOih0aGlzLmhzdmE9bnVsbCx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMSksdGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNhbmNlbGVkKCkpLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9KX1vbkFjY2VwdENvbG9yKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcihlKXt0aGlzLmhzdmE9bnVsbCxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25FeWVEcm9wcGVyKCl7dGhpcy5leWVEcm9wcGVyU3VwcG9ydGVkJiYobmV3IHdpbmRvdy5FeWVEcm9wcGVyKS5vcGVuKCkudGhlbihpPT57dGhpcy5zZXRDb2xvckZyb21TdHJpbmcoaS5zUkdCSGV4LCEwKX0pfW9uRm9ybWF0VG9nZ2xlKGUpe2xldCBpPXRoaXMuZGlhbG9nSW5wdXRGaWVsZHMubGVuZ3RoLSh0aGlzLmNwQ215a0VuYWJsZWQ/MDoxKSxyPSgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KStlKSVpK2kpJWk7dGhpcy5mb3JtYXQ9dGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tyXX1vbkNvbG9yQ2hhbmdlKGUpe3RoaXMuaHN2YS5zPWUucy9lLnJnWCx0aGlzLmhzdmEudj1lLnYvZS5yZ1ksdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJsaWdodG5lc3MiLHZhbHVlOnRoaXMuaHN2YS52LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoic2F0dXJhdGlvbiIsdmFsdWU6dGhpcy5oc3ZhLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS5oPWUudi9lLnJnWCx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJodWUiLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS52PWUudi9lLnJnWCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InZhbHVlIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUNoYW5nZShlKXt0aGlzLmhzdmEuYT1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJhbHBoYSIsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSGV4SW5wdXQoZSl7aWYobnVsbD09PWUpdGhpcy51cGRhdGVDb2xvclBpY2tlcigpO2Vsc2V7ZSYmIiMiIT09ZVswXSYmKGU9IiMiK2UpO2xldCBpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fSkkL2dpOyJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGk9L14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2kpO2xldCByPWkudGVzdChlKTtyJiYoZS5sZW5ndGg8NSYmKGU9IiMiK2Uuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAobz0+bytvKS5qb2luKCIiKSksImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYoZSs9TWF0aC5yb3VuZCgyNTUqdGhpcy5oc3ZhLmEpLnRvU3RyaW5nKDE2KSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSwhMCwhMSkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaGV4Iix2YWxpZDpyLHZhbHVlOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfX1vblJlZElucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkucj1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJyZWQiLHZhbGlkOnIsdmFsdWU6aS5yLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsdWVJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6cix2YWx1ZTppLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmc9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiZ3JlZW4iLHZhbGlkOnIsdmFsdWU6aS5nLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmg9ZS52L2UucmcsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJodWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLmgsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uVmFsdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS52PWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmE9ZS52L2UucmcsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImFscGhhIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkxpZ2h0bmVzc0lucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5sPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibGlnaHRuZXNzIix2YWxpZDpyLHZhbHVlOmkubCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25TYXR1cmF0aW9uSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnM9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpyLHZhbHVlOmkucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLmM9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsubT1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLnk9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsuaz1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcihyPT5yPT09aSkubGVuZ3RofHwodGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmNvbmNhdChpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycykpfW9uUmVtb3ZlUHJlc2V0Q29sb3IoZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+ciE9PWkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuQ29sb3JQaWNrZXIoKXt0aGlzLnNob3d8fCh0aGlzLnNob3c9ITAsdGhpcy5oaWRkZW49ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaGlkZGVuPSExLHRoaXMuc2V0RGlhbG9nUG9zaXRpb24oKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKX0sMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1ljZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoWWNlP2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMubGlzdGVuZXJNb3VzZURvd24pOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpLHRoaXMuY2RSZWYuZGVzdHJveWVkfHx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlQ29sb3JQaWNrZXIoZT0hMCxpPSEwLHI9ITEpe2lmKHRoaXMuc2xpZGVyRGltTWF4KXsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2xldCBvLHMsYSxsPXRoaXMub3V0cHV0Q29sb3I7aWYocz10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksdGhpcy5jcENteWtFbmFibGVkPyhyPyhhPXRoaXMuc2VydmljZS5jbXlrVG9SZ2IodGhpcy5zZXJ2aWNlLm5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSksdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGEpKTooYT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHRoaXMuY215az10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVDTVlLKHRoaXMuc2VydmljZS5yZ2JhVG9DbXlrKGEpKSksYT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKGEpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCk6YT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpLG89dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYShuZXcgT3kodGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCwxLDEsMSkpKSxpJiYodGhpcy5oc2xhVGV4dD1uZXcgWWQoTWF0aC5yb3VuZCgzNjAqcy5oKSxNYXRoLnJvdW5kKDEwMCpzLnMpLE1hdGgucm91bmQoMTAwKnMubCksTWF0aC5yb3VuZCgxMDAqcy5hKS8xMDApLHRoaXMucmdiYVRleHQ9bmV3IExjKGEucixhLmcsYS5iLE1hdGgucm91bmQoMTAwKmEuYSkvMTAwKSx0aGlzLmNwQ215a0VuYWJsZWQmJih0aGlzLmNteWtUZXh0PW5ldyBzZyh0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuayxNYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwKSksdGhpcy5oZXhUZXh0PXRoaXMuc2VydmljZS5yZ2JhVG9IZXgoYSwiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuaGV4QWxwaGE9dGhpcy5yZ2JhVGV4dC5hKSwiYXV0byI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiZ0aGlzLmZvcm1hdCE9PXJzLlJHQkEmJnRoaXMuZm9ybWF0IT09cnMuQ01ZSyYmdGhpcy5mb3JtYXQhPT1ycy5IU0xBJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT9ycy5SR0JBOnJzLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PXJzLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7bGV0IGM9TWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMDt0aGlzLmNteWtDb2xvcj1gY215a2EoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30sJHtjfSlgfWVsc2UgdGhpcy5jbXlrQ29sb3I9YGNteWsoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30pYDt0aGlzLnNsaWRlcj1uZXcgY08oKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgpKnRoaXMuc2xpZGVyRGltTWF4LmgtOCx0aGlzLmhzdmEucyp0aGlzLnNsaWRlckRpbU1heC5zLTgsKDEtdGhpcy5oc3ZhLnYpKnRoaXMuc2xpZGVyRGltTWF4LnYtOCx0aGlzLmhzdmEuYSp0aGlzLnNsaWRlckRpbU1heC5hLTgpLGUmJmwhPT10aGlzLm91dHB1dENvbG9yJiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKSl9fXNldERpYWxvZ1Bvc2l0aW9uKCl7aWYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSl0aGlzLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZWxzZXtsZXQgcixlPSJzdGF0aWMiLGk9IiIsbz1udWxsLHM9bnVsbCxhPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsbD10aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7Zm9yKDtudWxsIT09YSYmIkhUTUwiIT09YS50YWdOYW1lOyl7aWYocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKSxlPXIuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSxpPXIuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksInN0YXRpYyIhPT1lJiZudWxsPT09byYmKG89YSksaSYmIm5vbmUiIT09aSYmbnVsbD09PXMmJihzPWEpLCJmaXhlZCI9PT1lKXtvPXM7YnJlYWt9YT1hLnBhcmVudE5vZGV9bGV0IGM9dGhpcy5jcmVhdGVEaWFsb2dCb3godGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImZpeGVkIiE9PWUpO2lmKHRoaXMudXNlUm9vdFZpZXdDb250YWluZXJ8fCJmaXhlZCI9PT1lJiYoIW98fG8gaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpKXRoaXMudG9wPWMudG9wLHRoaXMubGVmdD1jLmxlZnQ7ZWxzZXtudWxsPT09byYmKG89YSk7bGV0IGQ9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9Yy50b3AtZC50b3AsdGhpcy5sZWZ0PWMubGVmdC1kLmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCB1PXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJih1PWZ1bmN0aW9uKG4sdCl7bGV0IGU9InJpZ2h0IixpPSJib3R0b20iLHtoZWlnaHQ6cix3aWR0aDpvfT1uLHt0b3A6cyxsZWZ0OmF9PXQsbD1zK3QuaGVpZ2h0LGM9YSt0LndpZHRoLHU9cy1yPDAsZD1sK3I+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkscD1hLW88MCxoPWMrbz4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIGQmJihpPSJ0b3AiKSx1JiYoaT0iYm90dG9tIikscCYmKGU9InJpZ2h0IiksaCYmKGU9ImxlZnQiKSx1JiZkJiZwJiZoP1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKChDLF8pPT5uW0NdPm5bX10/QzpfKTpwJiZoP3U/ImJvdHRvbSI6ZHx8cz5sPyJ0b3AiOiJib3R0b20iOnUmJmQ/cD8icmlnaHQiOmh8fGE+Yz8ibGVmdCI6InJpZ2h0IjpgJHtpfS0ke2V9YH0odGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jcFRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PXU/KHRoaXMuYXJyb3dUb3A9bC0xLHRoaXMudG9wLT1sK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT11fHwibGVmdC10b3AiPT09dT8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09dXx8InJpZ2h0LXRvcCI9PT11Pyh0aGlzLnRvcC09bC1jLmhlaWdodCtjLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9Yy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PXV8fCJib3R0b20tbGVmdCI9PT11fHwibGVmdC1ib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMiksdGhpcy5jcFVzZVBvc2l0aW9uPXV9fWlzRGVzY2VuZGFudChlLGkpe2xldCByPWkucGFyZW50Tm9kZTtmb3IoO251bGwhPT1yOyl7aWYocj09PWUpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KGUsaSl7bGV0e3RvcDpyLGxlZnQ6b309ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnIrKGk/d2luZG93LnBhZ2VZT2Zmc2V0OjApLGxlZnQ6bysoaT93aW5kb3cucGFnZVhPZmZzZXQ6MCksd2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KEJ0KSx3KGlkKSx3KEp6KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY29sb3ItcGlja2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFQ3ZSw3KSxsdChEN2UsNyksbHQoQTdlLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmRpYWxvZ0VsZW1lbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuaHVlU2xpZGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmFscGhhU2xpZGVyPXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJrZXl1cC5lc2MiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUVzYyhvKX0sMCxGRSkoImtleXVwLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFbnRlcihvKX0sITEsRkUpfSxkZWNsczozMCx2YXJzOjUxLGNvbnN0czpbWzEsImNvbG9yLXBpY2tlciIsMywiY2xpY2siXSxbImRpYWxvZ1BvcHVwIiwiIl0sWzMsImNsYXNzIiwidG9wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJiYWNrZ3JvdW5kLWNvbG9yIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIiw0LCJuZ0lmIl0sWzEsImh1ZS1hbHBoYSIsImJveCJdLFsxLCJsZWZ0Il0sWzEsInNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmQiXSxbMSwic2VsZWN0ZWQtY29sb3IiLDMsImNsaWNrIl0sWyJjbGFzcyIsImV5ZWRyb3BwZXItaWNvbiIsInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4dHJhLXRlbXBsYXRlIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiwxLCJleWVkcm9wcGVyLWljb24iXSxbImQiLCJNMCAwaDI0djI0SDBWMHoiLCJmaWxsIiwibm9uZSJdLFsiZCIsIk0xNy42NiA1LjQxbC45Mi45Mi0yLjY5IDIuNjktLjkyLS45MiAyLjY5LTIuNjlNMTcuNjcgM2MtLjI2IDAtLjUxLjEtLjcxLjI5bC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJsLTIuMzQtMi4zNGMtLjItLjE5LS40NS0uMjktLjctLjI5ek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiJdLFsidHlwZSIsImJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsyLCJoZWlnaHQiLCIxNnB4Il0sWzEsImNteWstdGV4dCJdLFsxLCJib3giXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjEwMCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJoc2xhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjM2MCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInJnYmEtdGV4dCJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSoiLCJtaW4iLCIwIiwibWF4IiwiMjU1IiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaGV4LXRleHQiXSxbMywidGV4dCIsInZhbHVlIiwiYmx1ciIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwidmFsdWUtdGV4dCJdLFsxLCJ0eXBlLXBvbGljeSJdLFsxLCJ0eXBlLXBvbGljeS1hcnJvdyIsMywiY2xpY2siXSxbMSwicHJlc2V0LWFyZWEiXSxbMSwicHJlc2V0LWxhYmVsIl0sWzMsImNsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1jb2xvciIsMywiYmFja2dyb3VuZENvbG9yIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJwcmVzZXQtY29sb3IiLDMsImNsaWNrIl0sWzMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwiYnV0dG9uLWFyZWEiXSxbInR5cGUiLCJidXR0b24iLDMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDMsImNsaWNrIl0sWzEsImV4dHJhLXRlbXBsYXRlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RvcFByb3BhZ2F0aW9uKCl9KSxFKDIsSTdlLDEsNSwiZGl2IiwyKSxFKDMsUDdlLDIsOCwiZGl2IiwzKSxnKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxOKDYsImRpdiIsNiksZyg3LCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyJiZpLm9uRXllRHJvcHBlcigpfSksRSg4LFI3ZSwzLDAsInN2ZyIsOCksdigpLEUoOSxPN2UsMiw1LCJidXR0b24iLDkpLHYoKSxnKDEwLCJkaXYiLDEwKSxFKDExLGs3ZSwxLDAsImRpdiIsMTEpLGcoMTIsImRpdiIsMTIsMTMpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkh1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoImh1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJodWUiKX0pLE4oMTQsImRpdiIsMTQpLHYoKSxnKDE1LCJkaXYiLDE1LDE2KSxQKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoInZhbHVlIil9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdFbmQoInZhbHVlIil9KSxOKDE3LCJkaXYiLDE0KSx2KCksZygxOCwiZGl2IiwxNywxOCksUCgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxwaGFDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJhbHBoYSIpfSksTigyMCwiZGl2IiwxNCksdigpKCkoKSxFKDIxLEw3ZSwxNywxMiwiZGl2IiwxOSksRSgyMixIN2UsMTQsMTAsImRpdiIsMjApLEUoMjMsajdlLDE0LDEwLCJkaXYiLDIxKSxFKDI0LHE3ZSw4LDcsImRpdiIsMjIpLEUoMjUsWDdlLDksMywiZGl2IiwyMyksRSgyNixRN2UsMywwLCJkaXYiLDI0KSxFKDI3LGU5ZSw2LDMsImRpdiIsMjUpLEUoMjgsaTllLDMsMiwiZGl2IiwyNiksRSgyOSxvOWUsMiwxLCJkaXYiLDI3KSx2KCkpLDImZSYmKE90KCJkaXNwbGF5IixpLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixpLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLGkudG9wLCJweCIpKCJsZWZ0IixpLmxlZnQsInB4IikoInBvc2l0aW9uIixpLnBvc2l0aW9uKSgiaGVpZ2h0IixpLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsaS5jcFdpZHRoLCJweCIpLGF0KCJvcGVuIixpLnNob3cpLHgoMiksYigibmdJZiIsInBvcHVwIj09PWkuY3BEaWFsb2dEaXNwbGF5KSx4KDEpLGIoIm5nSWYiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSkpLHgoNCksT3QoImJhY2tncm91bmQtY29sb3IiLGkuc2VsZWN0ZWRDb2xvcikoImN1cnNvciIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlcj8icG9pbnRlciI6bnVsbCkseCgxKSxiKCJuZ0lmIixpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbikseCgyKSxiKCJuZ0lmIiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbCkseCgxKSxPdCgiZGlzcGxheSIsMT09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmgsInB4IikseCgxKSxPdCgiZGlzcGxheSIsMj09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJyaWdodCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci52LCJweCIpLHgoMSksT3QoImRpc3BsYXkiLCJkaXNhYmxlZCI9PT1pLmNwQWxwaGFDaGFubmVsPyJub25lIjoiYmxvY2siKSgiYmFja2dyb3VuZC1jb2xvciIsaS5hbHBoYVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpLHgoMiksT3QoImxlZnQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIuYSwicHgiKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYyPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLChudWxsPT1pLmNwUHJlc2V0Q29sb3JzP251bGw6aS5jcFByZXNldENvbG9ycy5sZW5ndGgpfHxpLmNwQWRkQ29sb3JCdXR0b24pLHgoMSksYigibmdJZiIsaS5jcE9LQnV0dG9ufHxpLmNwQ2FuY2VsQnV0dG9uKSx4KDEpLGIoIm5nSWYiLGkuY3BFeHRyYVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbeW4sWGUsTm8sbDllLGM5ZV0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7d2lkdGg6MjMwcHg7aGVpZ2h0OmF1dG87Ym9yZGVyOiM3Nzcgc29saWQgMXB4O2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgaW5wdXR7d2lkdGg6MDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAwfS5jb2xvci1waWNrZXIgaW5wdXQ6aW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnttYXJnaW46MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY29sb3ItcGlja2VyIC5hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTk5OTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjojNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXt0b3A6LTIwcHg7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9we3JpZ2h0Oi0yMXB4O2JvdHRvbTo4cHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3B7Ym90dG9tOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9tLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1sZWZ0e3RvcDo4cHg7cmlnaHQ6LTIxcHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHR7dG9wOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5jdXJzb3J7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6IzIyMiBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOmRlZmF1bHR9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE2cHggOHB4fS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7cGFkZGluZzo0cHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtib3JkZXI6I2E5YTlhOSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXJ9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjhweDtmb250LXN0eWxlOml0YWxpYzt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4IDhweDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7ZmxvYXQ6bGVmdDtmbGV4OjEgMSBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7Y2xlYXI6bGVmdH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxcHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzU1NX0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2Zsb2F0OmxlZnQ7ZmxleDoxO3BhZGRpbmc6MXB4O21hcmdpbjowIDhweCAwIDA7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC52YWx1ZXtkaXJlY3Rpb246cnRsO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSl9LmNvbG9yLXBpY2tlciAuYWxwaGF7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd1lRbFpNYTNnQUFBV1ZKUkVGVWFON3RtRUdPNmpBUVJDc09BckhnQnB5QUpZR2pjR29jeEFtNEEySUhwbW9XRTBlQkgrZXptRmxOdlUwNnNoSjNXNlZFZWxXTVVRQUlJRjlmNnFacGltc0ExTFl0UzJ1RjUxL3UyN1lWQUZaVlJVa0VvR0hkUFYvc0ljYklFSUlrVWRJLzlYYTduZXl2NjErU1dGVVZBVkNTY3QwMFRXbjJmdjZ1MytFY2ZkM3RYenkvMCtuRVV1K1NQam8va3F6cm1pUXBTY042djk4WGV3ZkE4L2xNa2lMSjJXeEdTVW9wY1Q2Zk02VTBOWDkvZnJmYmpldjFXdGZybFpmTGhZZkRRUUhHL0FJT2xuR3dqSU5sSEN4akhDempZSm0vVEpXZEN3cXVKWHNlRkZ6R3dETk5laUtNT0pUTzh4UWREUWFlQjI5K0s5ZWZlTGFCbzlKN3ZkdnRKajFSakZGamZpdjdxdjk1dGp4LzdsZVNRZ2g5M2UxZmZNZUlwNk8rWVFqaG8vTjc5MXQxWFZPU1NJN04vL0srNC9Hb3hXTEJ4K1BCNS9PcDVYTEorLzNPbEpKV3F4VTNtODNvdnY1aUdmOEtqWU5sSEN4akhDempZQmtIeTVnZjVndXN2UVU3VTM3alRBQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjE4cHg7cmlnaHQ6MTJweDt3aWR0aDoxNnB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcn0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeSAudHlwZS1wb2xpY3ktYXJyb3d7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7bGVmdDo4cHg7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3ItYmFja2dyb3VuZHt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjEzMHB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU9ZQUFBQ0NDQVlBQUFCU0Q3VDNBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a3NQV1I2bGdBQUlBQkpSRUZVZU5ydG5WdVQ0N2dSckFITitQLy9Pci82MVk1d09OWjdtWjF1M1hBZUxNakpaR1pWZ2RLc2ZjNXhSM1MwUklJVVcrQ0h6Q3BjMk1jWW83WEd2M2V4N1VpWmQ1N3JqeXp6dit2KzMzWC9SLyszci9mN3ZSMzg2WStUdktOY2Yvd2RoVExQY3Y5cVUyd1pkNzR1dGgwdDE4MjFqa0laTFBjc0kvNm5XYTRYdnV0cXVVMFo4NW1ueDgwUy9aemdwbkxuT3RITnQ3L29meDFUS1hjU056Ti83cWJNUTNqdTdyTlFtTVlZZC80czJqOWFhK1ArZ0dhTWNacmIxTS90ZHJ2ZjcvZDJ2OTlQOS90OTNPLzNjYnZkeHUxMkc5ZnJkVnd1bDNFK244Yy8vL25QKzIrLy9YYjY2YWVmeGwvLyt0Zng1ei8vMllLNUFsMnJndmY0VXNicGRHckI1MmJBdkFyWHB1emptaXFBVlNHejVlRG1HWVh6aGJBWm1Dcm5temRkcFVVKzhZMWRBT1llWEN0RFV3VndWN1lDR0g2dUFteU1jWjlsNXZrVWFCUEdNVVo3L0o1dy83OTIvZnZ2OVhxOTMyNjNkci9mVHhQRUNlTUU4bks1ak0vUHovSFRUei9kdjMzN2R2cmxsMS9HUC83eGovRzN2LzF0L09VdmZ3a1Zzd29uZ2pkT3A5UHpIM1UzRDN6bVdHblpWWG40akNxczd3QzJCS1A0Lzh0QXprWnNvV3g2WHJxZUhaeW12cDRBQkNCSmhUUXdLZkRUOGd6clpDSXFpNUFoaUFDakJmRUIyclA4L1g2M01NN2Y2L1Y2djkvdjdYYTdiWUM4M1c3amNybHNWSElxNWZmdjMwKy8vZmJiK09XWFg4WlBQLzAwL3Y3M3Y0K2ZmLzc1SlN2YmV1K2JMMldNTWFGYkFscEJOTTg1UVgrY3Q2cW9TcWtQQXd1UWxCVktxR05GU1VPQUEzQm11N2dDNWhOT2QxNW5Td3ZBT1VXN0M0Z2lVQ1Y4U2duNUw5aE5GSXFUc3AwR3hJMHlzaW95akFqa1kvdEdKVkVweitmeitPV1hYKzdmdjM4Ly9mNzc3K1BidDIvajExOS9IVC8vL1BQNDlkZGZ4OGZIUndybVRqVjc3OUVYdTJweDJ4aGp3dGRKWlFjQVdRSVBMUElTc01KYVN3aUQ4Z3pJS3J3U3lBVEU1ajVuQWJSNWMxZEJVd0Jsc0VXVzBoNkxxaVlzcUZQQVF4Q3lSWjN3T1NBUnhtbFhNWDVrNjRwUWZ2djI3Zjc1K2RrK1BqNU9IeDhmNC92MzcrUGJ0Mi9qdDk5K0c5KytmUnNmSHgvamNybVVGTE8zMWdZRFdibHhSSXMvVHFmVDdvdXN4SnNBeFhBMkdjN1RBOVhkZ2Zkb0hiRnNqNzZYMisxV0FyZ0kxYWdlR3dBM3F1cHFvSHNtY2JJNkZ1OTNxdWdnRmE5ZDdMZUR0Z0tmQUZIQkorTkVCeUlrY0o1S2VydmRUbWhoR2NnSkpTWjV2bi8vZmorZnorMThQcDgrUHovSDUrZm5tR0QrL3Z2djQvdjM3K1BqNDJOOGZuNk8yKzFXczdKampQNndyYU1JNUU0Ulo4eDJ2VjVUU3drcXVvdFY3L2Q3VHo2SEZXc0QvcU5jZHcwQ1EzcS8zMjFjNjg2VHdEVklkYnV5NzN6TmxkaFNIYjhJMmtsWnpubStJbkJTNFU2bjAzMDJhQkZzTGhIREFLSlZKVmdsZkk5amh2dTUzVzUzc0xBTllOeEFpREE2TUNlVUh4OGY5K3YxMmk2WFM3dGNMcWNaVzU3UDV5ZVk4L2Z6ODNPY3orZm5zU21ZVXlrbldFRzg1V0JzdDlzdHpTTHlNZGZyOVFpMDhpWTE1VVowTGxER0xoUjNvNXpLMmo3T1BVVEQwRStuVTN0azdYYi8xNk5GYmhsb0FNdVkxempMVU9PM0JLZUlEZStaOHMzL0o0Z0ZvNFRNNWpQbXVSZzI4Zm9VS0tWU3dvMTZUZ0E1bnB5d2NXTEhnWWwvUHo4LzczLzYwNS9hYjcvOTFtNjNXN3RjTGllMHNaajRtYW81Z1R5Zno4OEUwZjErajhFY1l6d1RQRUcyY3FqeWZITkYwTThmdXFFaWFPVm5SelpaUU5oNWZ3UXlIZy9IREdmSm84OVExemIvcXV1NVhDNjc3M0kyWEtmVHFkL3Y5K2Qzd3VxV3ZhL1lUZFVkRVYzZmhJdi9WaXlwczZZRTN4M3I0M0s1YkpRUzY2emF4VkdGc3ZkKy8vajRhRisvZm0zZnYzOXZ0OXV0ZmYzNnRmMysrKy90ZHJ1ZHZuMzdadU5MQmFhQ01nVXpDK3JaUmlGb3d4VXVKSThZTXFjQ3A5T3BxNXZhZ2FZVTZsR0pBMVhRcWVqY2h3NkNqMEd3NW5ZQnJHdzAxQTJPMjA2bjA0QkdvdU5OeVRmcC9Gd0VsaFVleTZuWHJJS3c3UVFXZGR4dU4ybGRMNWZMODM5Z1NQRjhhaHUvSnZCTzQ4Q1BTdXFNZjhWcDkvUDUzTDU4K2RMdTkzczduOC90ZnI4LzM5L3Y5L2I1K1RraFBKM1A1Nm1RNDM2L2orL2Z2Ky9pU2diemVyMCtBWngvNSs4OGJ2Nk9NZGE2UzV6NmtkMjFmWUM5ZHh2N2NJSkoyZDlBT1MzMGZQTXp5SGlUTThCNERGNlhVbFlIcDRLUVczVysxdDc3TU5CMXZHSHhXcTdYYTd2Zjc4K3k1L041QStIMWV0Mjl4dVA1ZGJZdHlhUnU0QWtzYlBxNjkzNmZqUnpYUnhCYlByL2IrYjE4K2ZLbGpUSGFCQkJmbjgvbjAvMStIMSsrZkJubjh6bTBzQjhmSDV1NGNyNUd1QmhNVmswRUVuOVJzY3RnVmhNK2l4bEp0TUEyM1I4QjZ5eXNBc3RCT2dGWElLS0NNSWdUb01xTkV1MmZZTUg3enRjNzMyZFFLa0NqMXl0QVp0WTBLeDhwSXI4R0dKK0FUM1YrMkhpcmhsKytmQm1YeTJXejczdytiMTdQOHArZm44L3RVd0dWbGVWa1R5VWI2OERrZmF5V1k0enhOUmloVTRFcExKUFpWcksrdTdKNC9tZ2ZLcWVMVzlYMlJFV2xJdEwxZGl5bmJERGIzK2pYZ1lqUXFuMHJyeFdjK05rSUxQN0Y3eEliTXZ4N3ZWNTN4NDB4bmxiV0pGMTJaU2FnL04wcFc2dCtaem1PTXpIamFqS3dEZm9uZDc4ellUZGZxMTh1cDk3enIycTh2M0lpb0JwclJ0QmwwRVo5b2c1V0JSR09kT0hqSWpYRjdVb3RGYmdPV25YeklKeXpZdmpHNUlZZ3NtTU94SGt6OE9zTVNyVk5XZXE1VDhEYU9jYkV2MU9kNXJiczlhTzdZdk1ldDYzRWtGKytmTUV4cStNUmw0L0w1YkxaTi8rZXorZm5aNkthenVNcVhTUVZPNXNwSlhmbEhBSXplcy94SnNlY2tSSmlETW9nOWQ2VmZScnFYTXI2S3BWVjI3alJ3SmFjR292T0FNMXpNZFFNbndLMUF1Yks2M2tkQ0NodkkxQzdnMHo5bmYvRCtYemUyVmo4SDdHeDRQOWR1UWxzWUNycXlOOFhxRzNIbS8xME9qM2p3L24rY3Jsc3R1TStqUG1teFQyZFR1UHo4M1B6dDJwbjFYc0VIWC9iblBhVnFWbWgweHdPdDBvNlhMTEFIZVBVVTIwM3dIZmNyc3BDd21WM1RyeUI1czBNc2VlZzk3eC9Cd3pDakJsYkIrcFJBUGxhMEJWUXVUNlY2UUhkQmxqM2QwS0cxNDdiK0RxeFFlVXltRE80M1c0ZFFhcitUSWp3bUFkMHo4L2g2NXZmMC95THYzUGI1WExwcnUveWREbzlzN0VUMEkrUGo2ZEtLOVZVRUllS1dRV1BBT3JKOExLZDR2RSt0OTFZM2U3VUZsV2F0ZzJWd0puYitIUG10dm0vc2ZLNTkvT2FXRjN4L2VQMVVQSHZBNUREWURwWVhmYjBkcnYxVjJEa0JreHR3L3RFV1ZWbFhXZEM5cEZZczUvamZoOWRTLzE2dlc3czZsVEcrVGZxc3hTSkh4a1hYcS9YZHIxZXU0THNmRDZQM3ZzVDNONzdEa0wrelBtNWpTZEtMNHpSM0F4UWQ2ckhrTGtZbFNvd3NycTd6bnp1NndTd2RzTUpPWG1BNWZCY2p4dGdNR0JZSGxyNXpva2h0c01DVGdYTFFPVzRYQzZkRXlFTXByTDhtQVF6WFJnZHVpeDJ5WnpvcnhrWXNEbjNoQjFWZU1MR3NYc1Z0Z2wycFc4UzNzdmswdnc3UjRoTmFIdnY0Y0FDbDVIRnp3SUgwS2M2enU0WGpEUFIvanBBVnhXek8xWGsyRERiM3ZUY3hlR1UxaVdaSGttSURXemlXS3ZpckNKNERyYXZzNklKL0dHNmNUcVdkWER5K2ZBclFEVlZrTHFrVmpBb1pJSVRkbW1JcVh3cWE5NU4zK01HWW9aUWRSVk5PNTNZMXhSa2hPMTZ2WTdldTUwN0NhOWxKbmJHcHhPZW1RaFN3L0FRc21tcDV6VTlCaVU4RzZ3dlg3Nk02L1U2UGo0K2RvMEJ6NENwZ2lrblRVZURxd2xLQm1nM3U0T1ZqcloxQStyQWNnYWVqV3E2ZUpDdkNZRkRPTlN3T2dIWDRFUVJ3OGx4YnpET2RFSzZnWjNIazFiKzhnMm8xSkZ0S1h5di9mRWRUWHVXaldYZEFaaUJwNkFEZURyQ0ZpaW03QjZaRm5lZUk3R3ZtL1BNa1VEWDY3Vzd4SThiMEQ3L3Y4ZEE5cWZONW9hQ2Y3NFdaakgwbWYxY21mWTFZMEpVRm1WclRXdTh1emtOY0x0RWo3dTVGWEJUa2ZDNkdPQTVxOFlNeE84S1Z2RjZzQVZHZGNyVWJzS09EY1FLa0xNT01kbWx4dW02NDJZclBtMjZBbGhaVzFZQjFSK3JyR3N3RThUYVlBV2VVTXhkZitXandTdloyRWYzeXRPeWZuNStQcFZQQWFxT240M010TkJxdm1qanhiak00bFpqWlk0Z3FOTUk1a3RhVy9zWUtOd1MrOWxGUXpHaWhtTUNLUGE3K1owVjZFYjBHUm1vYnRwWDhKbGpXdTVGTUxONWphNmhHOWt3UWdacWY1KzFOSDVVeHprRlJlQ2RXaEo4WGRsR1VreE83SFJsWVJtNG1WTzQzVzd0ZXIxMlRQSkV3L3JtRU4zTDVTS0hJV1pnOW16K3BVb0tPWXE1YkpUSmRYMmdtZTFVY3hNWlFGYUVRSWxIY3QzMk0rWTFCekdrR3V6Zml5QU45eit1Z3BsWjFzeW1DckRDWVlrR3hEVHBJOVJ6Qnkwckh5ZURVQzFuV2FlVWFEOW40eGtOeVlNQkRadHpaM0IrK2ZKbFkyMVhGRE9jQVJKbGFiT3lpUzN1Q3BMSTlqclpqQ0RrYVZ2Y0NDandvZ25LU2hXZHpYWldsWk12VlRnRDhMcHFsQ0xycWdiY0IrcVl3cmdLWXBUMGNjQ3FiS3lDVmFsa0VhYm4vRnlub2dDclBLZnFmNTF4SjdzR0IyWlhjWm14b1NPenRqeDMwMERaaTdhMC8yQUlSMFVsQmFnOVN1RHc2S2NBemxhQjd2SFp2V3BqSzkwZHlycTZiS3lEVVpRYlIwQjA1YmlMUWtISWNTVW1nSUsrU3d1cWdIQ25vaW8yUlFVMXlqK0JuQnk5cHBoVktMR3lDN1p6RksxcHhXSytFOEloVkNXTE4vdUx0blVVNGF5b1lMb2FBTno4RmR0YVN2WTRwVjBCRVcybHM2MWN6cWxsQktwVHlLZ01BaHJaMWNkYzFSUk90UG12V05rZGNLWjdaS3hhV2ppUExKTXBwN09aS3hBK3JxRy9vSkxqeGYwcG5KbHFMb0RabzNneVUwbUtHeXMydGFLZWNqL2QxQytySlNwbEJxbFR5QXFnUitEOEtqS2xtUkwyZ3RVY0FkQ3RzTCtpakNOVDFvcXFxa0gyT0hFYkc1c0RGblVnNUFhK3lMb3UyVlUxcHRqMVMyWlFxdjFPUlpOOUlXelJmZ2FSQnhLb0JFOFVXeXFsSkZ0ckljMEF4TmpTamVkOTlDVFkvWERmU3pDejVNMElab1ZFc1duUEZOVHNsOG9vVkMxVHpiR2dxRlpORFNnVndLSysxc0dETUtxeFpDV0dWTUR5c2lFcjFqVlNRSlVZd2o1aUhPbFRoZEh0NDRTUWc5Q04rbmw4RDkwTk1JZ0FkZ3I0NkpxUmlSOUk4dlJkRnZicjE3bS95eFVNS2pOTE1pVlVBRHd1MkNXR2hoaStGNTVUV005TTljb2d6bXMxZG5NNHVPRi9MQUVZV2RjcW5NN3lGbXlxM0lmd21PUk9kN1kxaUZXdE9qb1k4VG80MW1UVjVJeXNnRkZ1UnpzYldGR2JOSUlKQ0R2MWRPbzRsWkc3aldCd1JGdFZUS3VXeWVDQnlKS09hbjhvWjNlcDlYZGRObDB0RHVheXdMejljWFBZZURBQTBTcGtCTzlzYlZjVE9WV2xkUHY0dXl6RWt6eEh0anZvbkhvU2tGRVdOb28xZDhEaGNRcHV0ZDJwcE5vbjRCem9BaUoxaEJGUWcwZFZ0ZGJHSEhEUVd1c2htTkVRdWtMTTJRTzFHMlk4YmdUWHFGaGNCSmo3RWpQZ2NQdHM4VVM4cVBwUEIvZFh6bk9oNVo0Mzh0ekg1ZWM2UWdyT0tyUlJmS215c0JtVURCK1BoWWFiTWxWUEVSK0dDU0lUVHpyN2FtMnRBckgzYmdjRXpQSm0rY3I1ako0Tm5ITkZEVnJGWGNJNUxlOWs1Sm53K2JlZGJWK0ZmUnpaSUhhT09hT3NMWTAvN1VHczU4RGpyR3dLTUlNRklHek9FVzEvakdzZEF0Q042aEVBSTRoQmU5WVhlUlJPQlNWUEFWUEFxdklNNWJ4NWhWS1dBTVA2ekJSeTNpZXNjcmlkVmRGQmluQnhYRG5HMkdSWTJYYkN2cDFsaHZHdE85Qnh1NWg5MDhYUXU0MmxuU0FyTUZkaXpNaW04dXdSQ3hQR25uT1M4bHdwbmJPaURxVEFqc3JSTi9QY29BU2NDYmFBQ3FWTTQweWxuampUQnMrYndXbEFHMjMvVUtiZGtpd0tXSVFQR3pXYWN6cG9TbHhQRWo4MjJjTldrcFM3Rnl6c0RycXBmZ3BHM2phaHcydmdiYVNRQXh1TFdaWXQ3Snp5TmU4Sm9acE5BY3ZERk9kdzB3cVlUOUFLMXJaei9EZGJTbExQcDByeUl4Z1FKbEs5QVpsRXE3SU9YcG9oZzlQSWhyQ25nODhKc094aVY0WldBWWZnNHNpa3gvOGt5Mlo5bDg2MnVxd3Jmc2NJSDgrdWdUbVZHeWlkZGVWWVVnRU1uNEdaemcxNEV3SXNoOXN4MmNLS2lXWFJldU9FNWd6R09RZ2RsUktWVmRsZXZxYjI3OVhxMFFuc3RzMlZEYUJPMGNvZXpzcnVXdEhBcHU2c0tHNElCaE4wYUdVMmtMck1LR1JUTjNIbWJDRHdLVjE0enZrTUVERzRRZlpWc3BWbGFOVTJtaGM1VEVaM04xaC96cVRoZXVMcFcwNVpXVEdWamIzZGJuTm14S1pCbk44SnFpZGFWTEtBT3lBUk5MUytNQjU0WjIrVmFxb01MS3JvVkJsbmdlZm5UUEFjb0hOV0NTdmxmQThDSTBIRW1CTkJuQmxYeU1yelU3QTdXVm05NFBQcVEyZ21xS3grV0RHc252aWxtY1NPQkpxT0sxbll5QUl6dUF5ZXNxM1VkU0szS2ZXY1lLRDk1SG1mWU9VM3FzZXIyQ3RZRVVBK0ZwZnFkTnZnUEJaVUJoRHJHT05SVmxRc2g4ckxjYVVDeWtIRzBPT1V3VGxMQnJzaDVzb0VNR2V6aTFFNEhSVnQxaWNwNXdaRUZYZGliQ2tHOFk4dlg3NXNiTzRFMGlvbTl6K2hqU2lPZnkzRGhwWEl0cFZoRStVR1Fkdm9XanRDaG1yR0hmNFlBektnQk5uR3R1SnhGQ2VHZGhVQWZRTExLOGtCWUFQNmd2RkpaYWpNRzNYa3ljeThLdUMwcTRFeXltd3R3ZHhkdjJNMG1JQnRLMExLbmY2NDBqMDBBdXE0Z1VrZFdHbGhzMjJxSmM2ZFpDc0wxOW94bmxUSkc0U1lWUklHcEQ4VFBGQnVNNk9FbGJTMXBsZGlkNG1HQXlONlpJdXBiQzViWEpOOWZkcGJUaFN4TFVhSThJRzFYSVlCeFczVGpzNktRb3NLY3hmeGNRbWRud1JHTTEwR25GY0N5MlhZdW5MTXlBa2RnazRtZVBpY3pzTHlndGhjQnV0NmdvT3FTN1lWRlhBRExqYW9zQjZzNm9mY1pXQVpTSVJZcVNVa2l6WXd0dFlhYjN2VU9ROXcySFJ4SUlnOFd3UlZlRTY4eGk0VXRMM3pScGh4cGx6d3VacmNxWUNxMUkzalBJNWRuSkl5Z0VvaE1iUHFWSlN6cnd6eEJKVHM1ek4rUmVVU2d4aWtQUVZGM0pWQmVOUXhiSEVOckVNTnZFZEZaVlY5bEg5K09SR0VzTlpRcHlUTmM0QzNBRzdYRjRuZ3pxK0RyTzJ6YnVhYU9YZ2RhRmNka0VvdG9TRkJWWDJxSjBDOE9XWmVHNEtHbHBnaEEwWGZUT1BDcVYycXF3UTI2UVdmRjJQTUxoSTJ3MWxWQWEyYVBzWWQwemEyNU1RUndnY1pONnVRRENpK1p4aUQ0WEVNMmtaeE9UNDFGblpuYVJsY3Bab3V6bFJxcWRiUVZXb3BRb1NCNThSVjUwbEJOckhpL0F3WFM1THJ3RFZscFkzRmMzQnlpWUdjNTJUcmlzdDZrT1hkd0luQVF0SnBwNVFjaHlhcXVZT1Y3U3UrZnhWTWFWM2RjMFJFMlM2bVVZMGdMdDJwTWNZcXJLSVE5dzJsMWdwUVVNdFFZY21tYnQ1RFROeGRoblVDalFxdGJLOVNVU3p2ckMwbW1oaEUxZTJGUzIrb3h5cHkvWkFTdXRrbXRqeDN2Y0JDMjRQWDY1bmJxa0JDUmhmalM5a0lZUG5lZThjTWFnVk9oSS8zVDFmQW1kdEFXWnNDc3dUSkNrUVZOYTBxV0tTS1BPcEhBVWhEOURyYlZjeW9Za3dxaHZoMTd2WUFheVhMUXlLR1lkeGxVREZwNDk0ckJYUmpZZ08xN0REWWV0TklVai9lenA2UzBsbmxwRXdzV21KTWtPd3NLWGVaS0VBaklIbjBFUUpJU2FSQmNPNlVNSU56N3AvYkVqam53NGZ0K3htRHZrc3hYNEcycklyaXM3cWFlS3dBRk1QMk9pN240Y3JpdVp3dHBTVXdwZkx4U25PUlNySXF1c2M1WkZhWHlzcVJXamlaMkR5QVdFSUwzNXRWU29RRWxGQUNqT2VHR1NFN0FIRVFnZG8vTFN2Q09nR0J2a3hzbURidmxTM0ZwNXZoYUIyVEFHcVJLcktLTXJoTFZwYUd6RVZqWjBPUXhEaGFDVEErUXlSUjFkMTVhUXpySm50TDNSaWJzaXBqRzZqbGdMNHlxYlMwc05ZZzFlODR2aGJCVnJFbEs2NENVY1dZWERmS3hocEl1eGlWSlpVeHNiTXkvdVJCS1ROUlE0a1EzTGRSWUxTMHJKalJQbFRQcVk2Z2RKc0VEYythUVhBbitIZ3NOVUNiUnVGME9qMHp3bkE3YldEa2JoTzVFbnMwMHFlUWhTMWxhQk1sNU0vY0FheHNMRjhyS3lxbCtUZjdFTExFR3UvaXhpaW1kQ3ZvMFRqZnBqS3dhZ2dlbjRlaDV2N0xva0xLYkx1eXZIaGNaRzhkaEdyRUR4N0hnOTNacHBKRjdxQnFPM2lWdmVYRURRTkluemVvZThZcTZlUGFaQloySnZpTTNXMlVBR290ZWtSQ0FHcTRFa0YxWDNET25SMTF5UnNCTDF0UmEwUFZjWmlORlhaMmMzNEZza3ZvbUluUVE2bHpwSm9aYkp4azQzTndLSkZCcXVKU3NyQnlIeWR4S09uVHhRQVNCbVMzaitKTW5zSFNsYTNFYzZLOVZXb0pWbjl6Zmp3T003aHFZQUFxSlF3RTJhM25BNDhKMlFHZWdSa3BaTml2U1kreXMzRWtLZDRvSkl3c3ZJSGwzY1dnTHQ1azROSDZPbXRMV2RwdXJPa3dFTXVwWWM3ZU10RFJoT2NJMnVpNUpoVkl6WHpMeXRvL0dBUHVab3lvOHdrb2R1VmdKZ2xDdDdPaEdiZ0lENE1xNHNpKzYzelVTMUZ1RkZYRmxxeWFqMmVtSGxMTWNCcVl1MEZNdVIyOEJiQjdsT3hSTVNpQ1FYRmhDS3V3a2haK3BZRGlHU2dic0tLVjhNaVNSc3VIU0lXTTlya2xSaUlsWlp1cVhqc1FLOG9vWUpNZ3EzSktXVmtoSGJoc1Z4RlV6dGhPV1BrWWlqY2J4NTRJS3NTZFQrdUxyM2NyR0t5b1lnRmlHUjlpQms0a2Zsb1VYK0pJbFFSUXFhYm1wZ25ocXRwUXBiNlJWUTFXSDVEbnJTNGhFb0dacWFlclEyZGhGYno4WGVQeFNobURibzcwZUlTam9vck8ydks4U0pYSTRTVW1FVTR6V0tEelVEdFdUWXc3eFhsYlNURWo0RlJnN3pLbktvR1JBTHYwR3M5VGdjMUJwQ3l3R1pSUUF0cVZ6MnhyQmNBTXpFcGZad0ZTYTJHNVcwUUJGalNNYXBXQUVGYTNIY0dON0N4RHpFQ3lJa0o5N3F3cnFXTlRXVm84NzZQUHNqUGtqMnd2Z3JvTTVsTFpLTUVUS1ZxbC9Ddm5XVkZpRmEvU3pKVVF3a29ac3I2N1k2dmxTUlYzLzJ0bU5UT1kzdm5heFl3TXVvUEtxZHpSMXc3SXFIeW1sUHhhQVRoZlU3S28yWlhZajRBWUpITCtrTmRLd1JRWUVTVFJhNWZzVVovclZDMVRNVHlXVnlZb3FOdHV6YUhzTXl2MnR2b2FyeGRmcXdZZ1UxYXhGby9jbnFsMUZHc3FLK3VBUk9WOEJYNEdVOFdjWlRBVGkycTdRY3lpME8wVitHaFdCTU5SVWtuOEgxU3NXVkU1QnkzR2kwRUNxVWVKb0JmQXREYTRhbWtkWEczN0FHUDVHZ2ViODRwN1VhenBvS1J6ZEZ6ZVE4SGtvSEd4cHJLeS9IcG01dDEycDQ3SjZ4VFlERXo3dUlORVhTdXhZWHZGc2tZQWMreVN4SDlzZjVmdEt6VTZJYndWQmNVR2c1ZTVGTUNFWFNFclpSMHdHYXlWMTl3b005Z3VQalRxSmRWVHFSNHVFNG5KbkxsZFdWa0VDQ1pMZDJWTEYreHRhbWV4N0lwaXJpU0RVcHZycG45bHJ3R01DSHlwcE1IK3BzNkxJTHN1RkdVajFYRU9YaXFicVNIUFVLbkNscFdWNjhrcXRVUlZORFk0VE5hb2N5a29ZZVRVNW5nR0VRYS9TMURubkU0QWVYTWNLakhQQW1GVmpDQkVOYWV5TFZOSGZyM3B4OHhVc3RKOTRoSXBmSDRIS0UvZURhQXJLNmxTeVZWRmJkdDFneFRJVmszcHBwVmxGWGk0cEVoVkJUT2JxdW9oVTg1TUxYbjFpYWh2VWtISmpTQ01jMDF0TEZ2ZVZWQngwRG9kTTZqZnRDdTdET3RJell4cmMwcXAxSkdQMmF5WUZ6MkdiNkh2TXJPOGNuR3RWNkdqbTN1SW1TZkQyR3BXSzZ1b3diWkdNeEZLUUNvMXBPTXRjTVhGcFJzdCtoWEdvQW9tRjNzU1RCR2dUZ2xiQktXd3NRM3RacWFZU3AwWjFDaW1SRFdGY0NKVVBZSjAwQkk1RmtLWU5vaWZ1UXhtTjg4U1dWWFdMTWFVcXFxZ0MwQm1RSlI2c2szdTlOQ2Y2allMWHhBZnFzWUVnVkxBaFJZMkF0Z3RmbFpORm1GeWh4ZHJMa0FkV2xrNEQ4OE0yaXhIeWVwSWRoTUhyRy9pUjFaR3RxME1HcGJEYlJQWU9YZVNZMU02Tnk0WnN0dkdTa3RLK1hiRlBBVGoyRDM3MXNhUEVzQU1YaFhyc1owa20vWFN0a2hoTXlCZnNhNnVYRlplMlZDZStZTXIxK0dLZ3dyUXlOWXExVlJyQitFaXpBb3c2TnNkTktjeVZFa1llTTczeXM2cTRrQUhwNkJpRmtsVGtJclZDNW9ZVjd1endPR0N6NFVKMFN0cTJsV01KeTR3dGIrUmV0TDZ0WkZpY25KbUJ3NVVqQ3ZYWE1aVkpYMk1Ra2JmK1hONUVXZDc4Vno4L0pFc01aVEJpS056c20xaW5MUlVRNzRINE5pZGFxSTY4ajVzQUZneGNSdmVDN2llTEpYZlFZeGpaWjJDc2lXRmV3WlhKbUJJbFoxdGR0clg0aFN1YXRlS3NvL1JaT3RPS1cybm1xMW9UemVLNmRSV0FXdTJOUlZiNGhxMFNYbTFHdnR1Z0hyYnI1SVhxbVNrdGc1Q3VERTJNU2xQd3NZNWtORTJXcDNBcWlaYldWTEF4aUJGKzJpQlpidU5qNk1CNnJzTUxDN0Z5YXNhWUR5bzdLa29QeUV0dzNwRU1YZlB2eEFKaTJqQVFRZ2pyejByTElaU1dabElvTmh3ZDV4SzRBUjltWU5qV0FhTHJudUltSmVCVk45ekJPUk9iVnZicittVFRmRlNFSkxTUm5IbzdoRUpvSWk4TUZxanhtdmdtRjVVUlp6NHpMRmdaWjhDdHUyWDdnZ1ZjY0ttOWdWeElzT0hxeFhnTk1LbkZXWlluZjFkQm5PaGF5WHExN1F3RmxXVzA5ZU5LeVZKRm1YcWFPTkdBNWFDZWdNYkozVVVrR1kxaWMzbktXZ2pxOHFmVllHUUcxZ1J0NnJzNjJhNkhpcXFVT3FkZXNLNU5tWDRuR29mSm9pRTFkMGRGOWxWVmt2VDEva0VFYWFDb1lPd0ZwY1Zjb0xNKzc2NjlQeEM5cldxa3RIMHNXVVlsZDBWQ3B1Qlovc3RWUmNHZ3k5V1gyK1UxUXRoaTlTekFxU3h6WnN5K09pRnpCWW55U0dWNkdrdTQ0ckQ4QkNPWkJWM0J2RDUrQUtSSE53TUVzQjZFekhuSnBrVEFlaVVsRUdrY0VDZUI2R0RaVHA1WUVKVGx2ZHJrbnhZalRsbE1rZk50WHdEak03dVZqSzVKWFVVbjQzcnJxcEsyanl0YXhIVzBNNUc4REM4cnRITVlzN0tTZ2R1VlFNR1RZRnFGdlZTNnJrRDNzREo0NmFmZFlGd29xMTFBT0tDQkxodndvVWdjOElHQU55Y1I2a25acmRKUGRzdXhueWpmZDNGb3ZUbFJNZEVkdE9sNUNNVjVFSHNYUUJpczdUT3d2SURaYUdqMlZucGJoN2NwSzYzVndZRU1Md3Fianp5bDY5OXNhd0ZGa0YxeXFqVVUzMUhmQzZzVzFaRlZGdVhWWFZnejlrZUVhdzB5czFsV2ZtK2F6UUFRU1dBK2hLWVZmc1pqUG5jQWNVQjlvSWF5eS9VWlhSTmNrREdqaTc3R3NXYnZCbzZ0UHJXUHFPeVZrQlVxK0lOZXFwek5kWXMvdTBpZmg1cW1wcUlXKzMzSlZTVWN3WTcwS0w0VTlsWWRVNmxqdFNsczdsbWZpOWczWXplUWZWa2FHRmFWM09EQ25hRDJOOHdzRURGa2xFM1J6TTNaZ2hkWWtXSHNzenE3MEZJZWNuS2tWa3Q4ZXpNelJxOWJrR3VLb2pSTEJWU29kM1kxeVBxS2dZVzdKUlFUUFZ5eTV4SVlMak9neGdUNTJSS0pVWTFkT3JJaVJkNGZ1dFF4L0E1QWNTbUVqejB2Rldya0x6dmJXQXU5SE9XYkdneEZrMVZOVHBuQktrNlRnd2lzSS9IY3hZWFAxdUFXTzcyVUxGbEJUcSthU3UyVlRVczZocnhNMkNGK2hFb3IxVklBOVptRlVhYWIxbFNTZ1pzVnM0c3h6SGxWTG9KSHI5SDREaE9OVGtJMVhDMC93aVkyTm9XQUc1UmxuSEZucTZvTGNjcFFkZE11Si9PMTdKVkE1T0hMaTBCcUN6dHE3WTErK3VjQ2Q5OHFMSThNSUhCVi9jS2p4UVRtZTNoRkJTM015Q3FuRHN1eW0ybzgwSGp2RkZUdHJVUm1OYUdKc21WYWhJbWpUc1VYS3RRWlRBVnM3TXZ2OC8rZnpVclpBWGNMSjZNNGtvZTZYUDBiNlNtV1dORHp5VXBROGJsK0x0V3g0dHVxWjM2Y1JZVjN5dVZ4UE53dklpcWlRQ1NtdTdzcmdUelI2bmt5aHBDYXJYd0Z5MXZHZDVpUDJjWTA2bEZyNU5qaGhnMVk2K05CMjhmdGJLODNzOHJmN2tMSmJLd0RGUGJMZzI1YTBBZFpKRWlxcjVwaGl4S01EbFJVdGNzc3ExaHJpTHFHb0gremVOZ1ZtOU9lbWpzRVRWOEpkRjBOSG5rSUZ4V1kxT0I0WXJwN3J0V0o3TmdBQUFQWGtsRVFWUTNvTnM1bnBseVZmOHUyRm9MdTFKckh2ZWFaV1FqcUFrc2h0RmEyZ3pzU0czWnBrYnZnM0hhZkY5c2xQUGxsZGpGbEs4MEd5c204TXI0TVBobmVOV0VOUEdqQUlwbWlsVFBBVGRUUlRYbENCWUhZQVF1UHdBMzZ4SXBXdEdONHEzWTJNaGlHc1VwdVNTbmxFSlJEOFBvckM3Q0ZZVncrRjUxcVRoZ2FieHNUeFd6Q0dZMFpTc2IzbGZxQXkwT1BOak55OHhpUVFLc0hZRlEySEJaVnZWYkJ1cTNtMW9XS2FqcWFvbnNNNnVaVXI2Q2pYV05aMGw1RTNoM2pVUm1hNmtQM01KSWl5MUxtK2thaFFxNDFOMmlaamE1c2p0bExZTlpIWnJINnFVR200dk1iRHA2UncyQ0ZtdnV5RmtyQmNDeU10RnFCYUVDbXNIb0s5QloyTEEvbEpjUnFTYURxbmFXYnJaZEdhejNETGdJdkJsbjR3b0d6dGJ5Skdxc2x3eGtoaEhyVGpUWUZYQ3RPb0tTOHVMZG9mVmRBYk95bEdVNm5sWXBYV1p0czRuWEJxNld4Sml0TU5va0hVSm5ibkpwbFFtK2FHcFkyYTVHTVYyUUQxaFJ1YkJQRktkdW1mNU9Ia0xIejBGOWx1RTVrakJqUmEwbkZFNUNVR3FIdzMyTW1qWjZ4a2dJTlZuU25aMVZaU3RLMnFLbFJhTGxRZ0s3dVRxN0pGWEp3TSszU09FS3loWk5JK3RKMEk1cU1ZeTlrMnFKRDdkVldkcUtYYTBDS05SMENjamcrQjJJWXUyZmNCWkpaa01GZ00xMXIwWDkyd2lsZ2hGR2d6Vm5leGxxQjd4TDltUzI5U2lZVVZZMm5YT1pqTkJSc3lEc1FQUldXNWhyWjRYY2RDNEhWV1JiamdKcjRzRm9mSzVTempRN3JoSTFVZWJkUGRFYmo2c3FJdlRaUVo1dmEwOHJBQnNBVzBVeGVXeXRBazdBMktKOVpweHpDaW9CMjRYRnRZQWVYWXhyNmFuU3FoTGdwcEVxV2JHd0x1blRnclYrSWpXbEwyOWxqYUFsNEVRTUdzRXJwNGFwZVppcXV3UlhMWEFxT0NlcnUzMm1teWRjNm9XVFNXcEZBR2R6ZVRCOFJUSFZNRXRsTTkwQ2JiUUNZaFBqcTNlZ1lyMUZHZFlJUWppdURHWjV6Wi9Bem9iS0dPeUx4dGk2YzRSd3R2MmFueVdsTElDbmxMaHhKUlh0NkE1ZWJEQldGTk9OYnhXWjJkMDJtbnU0UzlZRUNwZXBwVjF6U1dSQld4SFl6Vkl2MUNYU291d3FxWDNqQkJCRFpkWVFicFRRVzRaUWxTOHI1a0g0c3VTUm1nMisrM0pOMTB4MVBhQW1Fa210WWxFZGVHcEpFTTZrT3VDcUNSMjJvU3VqajVJVjJIZFQwemo1cHJMS1RqWEZBUGpkUWx5cTd4SUJ4QVFQNXlNY3pHNFZ4QUt3MG42aWxaMlFCY2UycEx1bGt1eHhxbm9JekZmZ3F5cWppbDlTMVZOd0JyRm1leWVvcHM4eU9qWlV5YlpkZlM4Q3VhVElKdW16czV0T0RhTnRMcEZEUS9QY0pHd2VMaG1lTDFuQjBLcWlVRFNjc2lVVkQ4OURpM0h0ckt0U1VMdzNSTGl5Z1pEKzdzRjhKVE9iZ1lzckd2RE5VRlJHbDFpeTBMbDFZa1VjMmFKWU1vZzkyMEk4cVc2WURDZzFNcWswSkhKRktYa2JnYlJyZUkrcXBZTk9aSHJWY0RVYmE3cGpzcGhTSk50SzZ1cGdSTkFWb09TMG11Z0JlTjRiSVpnSGh1UFovczFFTmFYNktzVnIrWU5yaDFOYjdpcFIwUEU1emJOUmVnQ2JySFJVdzZZZjA3ZExCSmwxZjhLQjlhczJWMW5OcUFzbDYyTEJCaGVod2FsZXJrSG1CMUpGSUVaS1NFdXNkbDVKUWoxbkpsSFhTQ0YzNDJnSjlDWUdyWGVsa25KSVhxVlA4c0QrcXRwbENSM1hIMnFmS3EweWdNcCtLblZrS3hObFo4bTJZa0lsVk1pQ25YVXdsN3F6bkJLU3ZRejNtM1B0Nm9RYlhPNWI1Rml4Q2gvZkh4VVFXL0FFY0s2ekNOcUtRbkw5c3l3cW1LdXd2cVNZelQvYVBWTk5wVnlodlJXMjFhcWNpQ3NqZFd2QndJTFV2aDVWeUN6YldvQzFwSmpKNjgwQ1dzbCt1ZEtCNlQ1UndHMW1sb2hubHBiZzQ3aXo1VTloYTBGR3RtUkxGWUJ0Tzk5eTk3QXAweitaRFRBb2c2a1NMWnNNSGcvSUZra2dwNkNwdlUyVTBjWVZTZG5ta2p3QmRPbVhieFRXTld6dUliaXBNaW9WeEVja1pFb2FoU09peTJNM0swamNDMUxoVkR3YXFHMFp2a2NXcUNuckc0R0l4eWtycWxiV2R3NkxReUJhWlI4SG1MUkloUVdzSHN3RDQyWlhWTE5rZjlsK0ZsVzBIVlEybHdGc0MvWjFGZHpsUVIwS2FQZm8rRmRmdSsvZHdWUklDdTFDR1I3QUVJaUFoYytBWlVGMGtPQmFQeG1VcWc0aTY0dlFuVTRuRkRZSjlOeisxZlZYdmVIOXFtcitrUElMeDhvS2NSVi9CRmJ4YkUwSk1UMGtTRDR3NkwvbE5ZOG9jc3FhZ1ZkVTNBM01qeGh4Y0d1cXpzUEg0aXJwYW93MXE2T3lyVmp2cDlOcGM1OUU5MUxsZGJvWVZ6SldkaW1XZkFXMlNORUtjRGFYMkZtQkxMQS91S3hsbWhoNjEzSXMxVVJRQXBiS2Z0dHd4TDAycTZPbng1cFF4U2JQb2pBZyt2NWhBbk42TEhWUkRYSXN2S3RSamlTMHFKVXlaVEFYVmJBSzgyRWxGSldhUWRWb3FVQzFVbnQ3QlZhVFF1ZE02U3VxZXhqUUpONCswaWNheHYvdXRiS3Y4M0VUYlQ4SDhnamNPS3hPSm1iVWE2T09WWGh0M2RGWTZySHY5WG9OekZMY2VFQTFvOCtwS20wTEFIUEhaMnJZS2pGcTBoZlpGaXhzcUhKZ0QzZUQ1bitVMGtiMW1GalhrbjJsdk1TU09zTkUvQ2RJQUtGMFN5dHE2dXJPSFVONWd3ZzRHWm9zZ2JtZ2dNNXVjcmEycXJTMklnMWNiaUJCY3hZemd6VUROTEN2TDhHYlpYTnA2T1J5M0xtUytLazgzelJJQUs2QTFpb0thMkk5TmFwSXVpVUZkZkM5NzY2UEZaVXRxVXI2S2JXayt6WlUxYS9acklYRXp0cmpUT2Z6N2h3S3ppQ2VYSWFyYUh0YlpJTXorMnBHZ2F6Q213NHFXQUZ2RWRob2RZcDBYcTBwVjdHMVlXWVdiTzRxaEdxNDIrWjhCWXRyTFd2bHVOUHBaQWVhRkZTMXZ1YlBnYmd4c3FjcG5BYXN6Qm92S2FGb0RROEJHdGpmVU9sNE5BRzJubVFWMDRmZUpndW12WDJmc3JRRVdaZ2hMMEpuVmRZa24zRE9aSWVSTjg2UnFQV0Ntc3ZHVnFFTVJud3hRQXh3UzhFTVlvM0l6bVkyK0JDY0xwNE1LaXV5dWhJbWFtbGJaRmNOb05sN3RwK1JIZDE4WmpRSVJLeVhkRlJoTjk4L2h5S3F3WFdObzdPMXdpYVhvSE4xMDhSRVpaV0VxNmdybklmanplZzhqZFJmMVhFTDRra1hhNWJCakt4b0thbGpCamVIbFZ4UTRHYXljcFc0bERPQUt0blR4SEF0T2Z6T3Rad0hBTTdzcVZYa1Y2eXU2a2FwMW5Ia1hLcVdGLzRYSHFqZW5OS3FCanBSM2wxY2gzRWpnMStFc2dkUWhzZEcwQjRGTTlzV0FWV3B1QXlpd1RQbGVaeHQ5VnlaVlMycVhmUmVXcVRBaWxwcjlBcG9XVGp4eW1pdDdOd1Y0SlRyaVp5T0E5QjBrN0hGZlVMb3VybUtZSFZuUlF2cUdMNUhNSGRxRmNSMnFXcG1jSzZlVHd4MmRpcFdydmlEaWxyK2ZLV3EzT1dSV2RIS3dBNGV1OHdqY2hiZVJ6RmlscWpqWk4zdWZDcGZrSjAvc2NWcG5ZazZMMFBJNzdseGRXQ1o4N1dpV203Qi9BR3F1UVNudWpHS3NCOENKbWlKcThxMXBLSVZXeXFPaVRLNjZyMThCTjhyNzQvQUU3MWZkQzN5UFMyTXhkT3BuRTF0bFZ4RDlKbVZPb2dnTityNFBqQVhWRlBhM0VnNWpWSkdGVlVHTm9sSDIwR1ZyVUI3Qk95U1dxNldxWVFkV1I5MnBjRk1ZTXdja2JTZ0NLQ3FENjdEaWlXdTFnOE1RQzlCeWZjRnFXMUwrakw3MTRxTkN1em5vU3h0MGRhMmd0V04xRzhGMEJLME5OMG51aW1lbFVGOWRJZEFmak80NFVUM0NqUUxvVWVMSEpGVE8zZ21wUnVJSU92d0JRQ2JxTmVvM3F0WjlpRjZ4VksxM0dSbG80enFpbXErQ0dkVGlSMXVSWThvcWdFMDJoWkJhNzlrWlhQTXF1eFJIS2xhMnNhWldONG1ScVpVajB2TENLaGtqS25xT1FITnVTWlZKb0t2QXFTMXdwRXF1dldEQzFCMnlwd3JDUHNSTUVQVlRPRE1MSk1EdjZxZUtYd2kySllWNVNxNHFLeXZnR3NIQ0xpdWoyalI1OVY4Z01xU0oyRkpaUlhFSFZSSGozc0ZQcmN0Nk9wcWxXMUdwYXRRZHQwR3Z3Zk02bjYzSW5zR1ZGaEpHYUJxZ3FxSVY2SXNYbGxaZ3lTUHE0UjNibnQzd2k1Y3YrY04yeXFRTFcxVDk1S1lWc1dXdEtrNGNCOVc1M1dRUWZsUVlSNldsNEhhSlpqdlZFMEQ1eXZxK1JLZ1pDczVxZEJFUDVzRDk0Y0F2UUxsU2dOYVNNQXRIeDg4QnVOUTQxemRGc1gzMHpLYmNzME1MRC9paGtwUXpsMHdpVHFLTFRmYkttQ215WUlDbkswSWJhaWVDNENHOWlTeUxRN2NJTUdRd2F1NlRLb3E2MEFwbDNXTjQwTFpwY2ExQ0tLSzlWUXl5SUVuOHcwRjhGNkNMMmg4bzNpeEd3QzdzN0VXekNPcW1jQXBZeFlENGpzQXpWUzBzbDJ0OThwQTd2cktvcGhDVlNvbmJZcGdINm12U24yNHBUQlY0c2R0VjNCdE1xNWs4MnkrSUFEdlVKMHVBbGtDVlR4SWFQbStVTnUvcWtWNEYxVHpIWENHclhJQXFJdEJLeXBxSzk5VnRBT1ZzNjRPNE9iWDdwSExWQ3BZSGNSbXd2TFI3VHZZQUtCQk41OExHVnpEdUZ6K2hRYldnbmNReUNaQWsrVmJzUFNvdWY5MzI2MWlaZ21mQ3B3UmJBdnFtU3FyaVUyUHdoamFvT3lZcXRJZWdWWFZpVHNteXRhNmJHeVNwWTNneVJycEl5QWVhV0REeHRwc1h3S3lhbE1ES05QN1lCWE1xRXNrVXNpMnVDOEZOQVB4QUtUVmZUMW82VnpNMEUwakYrMXJXY1V1SHZkeWc3dmdvRnBsWDhIcHZIcE1DT01SVVBIelprSW5zcWxGS05YL0VJTzUyRTBTeFN6T3dvYjJWbVJMVzVEMVhJVTByYmdNMUF6V2d5QzdmZThHN3hVQUsvdGFFQmF0N2x1cXR5UDdFbXNhSlFPajVGK21yblpmQ3VZQ2ZCVUFXd1NoeWQ2cE1ZL3ZBSEcxVXFPWXBiSS9neTVUMENNS20rVU8zZ0Z1Qzg1ZGdmRFZlZ3VQRGZJVHJJQkxzTHJjZ2RoM0NGZ0ZaamFLSjRJdjNGOEFORXF2dXhSMXRWS09nTG9DYTFqeGJvQkFrajZ2N2ovaWNGYkE3ZjRyZlJuUURMUlZpRzEzaTB2cUJRcllWcUJiQURaVDBacGlIb1N6dlFwb3BLSUZTM3NFMUhmQldsSFhkMEg3TG5BcnF2b3VnTXRsakhCZ1puaDNFb3ovQktqTE1MNFoyQXEwK2hFSnI5amFWVUJidk56Q0lVaXJvQzdBV21tRnc0bzVBSzNNdEI1VnlwWk1TRmdzMDVKeUdWd2x3QnFzRUdBQWEyWlUxQ2pVZXhYR3NFNHJLcmlpbEJ2RnpPS0tvM0F1QXJvRTZRRlFVM3U4WXBOWHdTNWsrMVRadDVVcndvdU40S2lVRXcrazNaV0RwMVJYSE5ScVhiMjFUczM5OTQ1eVpTZzNWblpGTlE5Q0YzWGVaeXI1RGdCWEtpd0NNYTJNeGVURFlYZ1AxRnNmOVFOS1pjMGs4MVJKazNyNkVRM3JDbUJWeUxMNzVFaloxcElWREhvRnRpT0FIb0IwQmRUVnlscUJzS0tLUytBZUJYSlZMWStDWEFTdUd2Ty9BdXE3R3VFakRmR0tnMW9LYTF6L2RtbWk5STlTVUdOaGwwQXRmdWxIQWF3b1lyblNrbU5YQVZ1R0VockVWWHZVRitBNUN0MlBxTk9qRGV0eW5hNENtZVVvbG1lWExONEFxN0M1U2oxMFE3eWpnbCt0NkNOeFNSSG1JNVgrQ3B3cmVZQjNRZmRxbmE0cTIxS2RCdWM0R29ac240OVpPT2lWaW53SHFLOVd6anZnZXdlRWgyQVU1K3Z0eFo5Q2Q5V3FraDQ5VjE4RTVvajZ2VnluMFJTdEF5R0lPNWVkWFJLZDVCMFZHVlhxMnlyM3hZcCs1VXQrQzRRSjRQMU4zMzlwUU1qUmVqajR2Yi9EY3I2clFjM08vMHJqbXRacGVZQ0JpQ0hmQ2VtUmJOaGJLL3BOVVBjM3dmS3k1ZjJEN09sTDMvdVBodmUvb1U0VDBGOGYrVk5NMnZ5b2l2MGpLK0tIUWZkSHErMGJuY3o0b3o3My8rWTZMYkt3MW8vNUI3ZU9mMVJsLzBkdTlCOXRuLzlidnJmL2ordjBoNnR0bjJ0cC9yLzQ4MTl5NC96djUzOTF1dnp6ZndEaWZ6NnBoVDFNUGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmU7cGFkZGluZzowO21hcmdpbjozcHggLTNweDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojOTk5fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTVweDtyaWdodDotNXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2NvbnRlbnQ6IngiO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozLjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweH0uY29sb3ItcGlja2VyIC5leWVkcm9wcGVyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7ZmlsbDojZmZmO21peC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn1cbiddLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFhjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLmluamVjdG9yPWUsdGhpcy5jZnI9aSx0aGlzLmFwcFJlZj1yLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPXMsdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcEV5ZURyb3BwZXI9ITEsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwVG9nZ2xlQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgRyghMCksdGhpcy5jcFNsaWRlckRyYWdTdGFydD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlck9wZW49bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNhbmNlbD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlclNlbGVjdD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgRyghMSksdGhpcy5jcENteWtDb2xvckNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFByZXNldENvbG9yc0NoYW5nZT1uZXcgRyghMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KGUpe3RoaXMuaW5wdXRDaGFuZ2UoZSl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKGUpe2UuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJihlLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTplLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSxlLmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKGUuY3BQcmVzZXRMYWJlbHx8ZS5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgZT10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7bGV0IG89dGhpcy5pbmplY3Rvci5nZXQodGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0sem4uTlVMTCk7byE9PXpuLk5VTEw/ZT1vLnZjUmVmfHxvLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWY6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1sZXQgaT10aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh1OWUpO2lmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYpdGhpcy5jbXBSZWY9aS5jcmVhdGUodGhpcy5pbmplY3RvciksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNtcFJlZi5ob3N0Vmlldy5yb290Tm9kZXNbMF0pO2Vsc2V7bGV0IHI9em4uY3JlYXRlKHtwcm92aWRlcnM6W10scGFyZW50OmUuaW5qZWN0b3J9KTt0aGlzLmNtcFJlZj1lLmNyZWF0ZUNvbXBvbmVudChpLDAscixbXSl9dGhpcy5jbXBSZWYuaW5zdGFuY2Uuc2V0dXBEaWFsb2codGhpcyx0aGlzLmVsUmVmLHRoaXMuY29sb3JQaWNrZXIsdGhpcy5jcFdpZHRoLHRoaXMuY3BIZWlnaHQsdGhpcy5jcERpYWxvZ0Rpc3BsYXksdGhpcy5jcEZhbGxiYWNrQ29sb3IsdGhpcy5jcENvbG9yTW9kZSx0aGlzLmNwQ215a0VuYWJsZWQsdGhpcy5jcEFscGhhQ2hhbm5lbCx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BEaXNhYmxlSW5wdXQsdGhpcy5jcElnbm9yZWRFbGVtZW50cyx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyLHRoaXMuY3BQb3NpdGlvbix0aGlzLmNwUG9zaXRpb25PZmZzZXQsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93LHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcyx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzLHRoaXMuY3BPS0J1dHRvbix0aGlzLmNwT0tCdXR0b25DbGFzcyx0aGlzLmNwT0tCdXR0b25UZXh0LHRoaXMuY3BDYW5jZWxCdXR0b24sdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0LHRoaXMuY3BBZGRDb2xvckJ1dHRvbix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0LHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BFeWVEcm9wcGVyLHRoaXMuZWxSZWYsdGhpcy5jcEV4dHJhVGVtcGxhdGUpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT1lJiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZChlKXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQoZSl9c3RhdGVDaGFuZ2VkKGUpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdChlKSxlP3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKGUsaT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWksdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KGUpfWNvbG9yU2VsZWN0ZWQoZSl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KGUpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7bGV0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIocj0+cj09PWUpOyF0aGlzLmNwRGlzYWJsZWQmJiFpLmxlbmd0aCYmKHR5cGVvZiBkb2N1bWVudDwidSImJmU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50P3RoaXMub3BlbkRpYWxvZygpOnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zaG93P3RoaXMuY2xvc2VEaWFsb2coKTp0aGlzLm9wZW5EaWFsb2coKSl9aW5wdXRDaGFuZ2UoZSl7dGhpcy5kaWFsb2c/dGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUudGFyZ2V0LnZhbHVlLCEwKToodGhpcy5jb2xvclBpY2tlcj1lLnRhcmdldC52YWx1ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodGhpcy5jb2xvclBpY2tlcikpfWlucHV0Q2hhbmdlZChlKXt0aGlzLmNwSW5wdXRDaGFuZ2UuZW1pdChlKX1zbGlkZXJDaGFuZ2VkKGUpe3RoaXMuY3BTbGlkZXJDaGFuZ2UuZW1pdChlKX1zbGlkZXJEcmFnRW5kKGUpe3RoaXMuY3BTbGlkZXJEcmFnRW5kLmVtaXQoZSl9c2xpZGVyRHJhZ1N0YXJ0KGUpe3RoaXMuY3BTbGlkZXJEcmFnU3RhcnQuZW1pdChlKX1wcmVzZXRDb2xvcnNDaGFuZ2VkKGUpe3RoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2UuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6biksdyhFbyksdyhKYyksdyh5aSksdyhBZSksdyhKeikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjb2xvclBpY2tlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUNsaWNrKCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXMoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXQobyl9KX0saW5wdXRzOntjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BFeWVEcm9wcGVyOiJjcEV5ZURyb3BwZXIiLGNwUHJlc2V0TGFiZWw6ImNwUHJlc2V0TGFiZWwiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjcEV4dHJhVGVtcGxhdGU6ImNwRXh0cmFUZW1wbGF0ZSJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLFFjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltKel0saW1wb3J0czpba2VdfSksbn0pKCksaDllPVsiY29udGFpbmVyIl07ZnVuY3Rpb24gZjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNsaWRlciIsNCksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKHIudmFsdWUpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJkaXNhYmxlZCIsIWUuZW5hYmxlZCkoIm1pbiIsZS5taW4pKCJtYXgiLGUubWF4KSgic3RlcCIsMSkoInZhbHVlIixlLmxvd2VyVmFsdWUpfX1mdW5jdGlvbiBtOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1LDYpLE4oMiwic3BhbiIsNykoMywic3BhbiIsOCksZyg0LCJzcGFuIiw5KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLkxFRlQpKX0pLHYoKSxnKDUsInNwYW4iLDkpLFAoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLmhhbmRsZU1vdXNlRG93bihyLG8uUG9zaXRpb24uUklHSFQpKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLmxvd2VyVmFsdWUpKSgid2lkdGgiLGUuZ2V0VHJhY2tXaWR0aCgpKSx4KDEpLE90KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSksYXQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uTEVGVCkpLHgoMSksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLnVwcGVyVmFsdWUpKSxhdCgiYWN0aXZlIixlLmlzVGh1bWJBY3RpdmUoZS5Qb3NpdGlvbi5SSUdIVCkpfX12YXIgTGw9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5MRUZUPTFdPSJMRUZUIixuW24uUklHSFQ9Ml09IlJJR0hUIn0oTGx8fChMbD17fSkpLExsKSkoKSxLY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy50aWNrQ291bnQ9MjAsdGhpcy5lbmFibGVkPSEwLHRoaXMucmV0dXJuSW50ZWdlcnM9ITEsdGhpcy5yYW5nZVZhbHVlc0NoYW5nZWQ9bmV3IEcsdGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQ9bmV3IEcsdGhpcy5Qb3NpdGlvbj1MbCx0aGlzLmFjdGl2ZVRodW1iPUxsLk5PTkUsdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9MCx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfWdldFRodW1iUG9zaXRpb24oZSl7bGV0IGk9dGhpcy5nZXRDbGlwcGVkVmFsdWUoZSkscj10aGlzLm1heC10aGlzLm1pbjtyZXR1cm4gcjw9MD8iNTAlIjooaS10aGlzLm1pbikvcioxMDArIiUifWdldFRyYWNrV2lkdGgoKXtpZihudWxsPT09dGhpcy51cHBlclZhbHVlKXJldHVybiIwJSI7bGV0IGU9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIGU8PTA/IjAlIjoodGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy51cHBlclZhbHVlKS10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLmxvd2VyVmFsdWUpKS9lKjEwMCsiJSJ9Z2V0Q2xpcHBlZFZhbHVlKGUpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLHRoaXMubWluKSx0aGlzLm1heCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25Jbml0KCl7bGkoZG9jdW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU1vdmUoZSl9KSxsaShkb2N1bWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU91dChlKX0pfWhhbmRsZU1vdXNlRG93bihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlVGh1bWI9aSx0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYj02LWUub2Zmc2V0WH1jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpe2xldCBhLHtsZWZ0OmkscmlnaHQ6cn09dGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWUuY2xpZW50WC1pK3RoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iO2lmKG51bGwhPT10aGlzLnRpY2tDb3VudCYmdGhpcy50aWNrQ291bnQ+MCl7bGV0IGM9KHItaSkvdGhpcy50aWNrQ291bnQ7YT1NYXRoLnJvdW5kKHMvYykqYy8oci1pKX1lbHNlIGE9cy8oci1pKTtsZXQgbD10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLm1pbisodGhpcy5tYXgtdGhpcy5taW4pKmEpO3JldHVybiB0aGlzLnJldHVybkludGVnZXJzP01hdGgucm91bmQobCk6TnVtYmVyKGwudG9GaXhlZCgxMCkpfWhhbmRsZU1vdXNlTW92ZShlKXtpZih0aGlzLmFjdGl2ZVRodW1iPT09TGwuTk9ORXx8bnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm47bGV0IGk9dGhpcy5jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpLHI9W3RoaXMubG93ZXJWYWx1ZSx0aGlzLnVwcGVyVmFsdWVdO3RoaXMuYWN0aXZlVGh1bWI9PT1MbC5MRUZUPyhpPnRoaXMudXBwZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuUklHSFQpLHI9W2ksdGhpcy51cHBlclZhbHVlXSk6KGk8dGhpcy5sb3dlclZhbHVlJiYodGhpcy5hY3RpdmVUaHVtYj1MbC5MRUZUKSxyPVt0aGlzLmxvd2VyVmFsdWUsaV0pLHRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMociwiU0xJREVSIiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX1tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhlLGkpe2xldFtyLG9dPWUuc29ydCgocyxhKT0+cy1hKTsodGhpcy5sb3dlclZhbHVlIT09cnx8dGhpcy51cHBlclZhbHVlIT09bykmJnRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkLmVtaXQoe2xvd2VyVmFsdWU6cix1cHBlclZhbHVlOm8sc291cmNlOml9KX1oYW5kbGVNb3VzZU91dChlKXt0aGlzLmFjdGl2ZVRodW1iIT09TGwuTk9ORSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX1oYW5kbGVTaW5nbGVTbGlkZXJDaGFuZ2UoZSl7dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6ZSxzb3VyY2U6IlNMSURFUiJ9KX1oYW5kbGVJbnB1dENoYW5nZShlLGkpe2xldCByPWUudGFyZ2V0LG89dGhpcy5nZXRDbGlwcGVkVmFsdWUoTnVtYmVyKHIudmFsdWUpKTtpc05hTihvKXx8KGk9PT1MbC5MRUZUP251bGw9PT10aGlzLnVwcGVyVmFsdWU/dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6byxzb3VyY2U6IlRFWFQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbbyx0aGlzLnVwcGVyVmFsdWVdLCJURVhUIik6IiI9PT1yLnZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOnRoaXMubG93ZXJWYWx1ZSxzb3VyY2U6IlRFWFRfREVMRVRFRCJ9KTp0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKFt0aGlzLmxvd2VyVmFsdWUsb10sIlRFWFQiKSl9aXNUaHVtYkFjdGl2ZShlKXtyZXR1cm4gdGhpcy5hY3RpdmVUaHVtYj09PWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1yYW5nZS1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGg5ZSw1LEFlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7bWluOiJtaW4iLG1heDoibWF4Iixsb3dlclZhbHVlOiJsb3dlclZhbHVlIix1cHBlclZhbHVlOiJ1cHBlclZhbHVlIix0aWNrQ291bnQ6InRpY2tDb3VudCIsZW5hYmxlZDoiZW5hYmxlZCIscmV0dXJuSW50ZWdlcnM6InJldHVybkludGVnZXJzIn0sb3V0cHV0czp7cmFuZ2VWYWx1ZXNDaGFuZ2VkOiJyYW5nZVZhbHVlc0NoYW5nZWQiLHNpbmdsZVZhbHVlQ2hhbmdlZDoic2luZ2xlVmFsdWVDaGFuZ2VkIn0sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbInR5cGUiLCJudW1iZXIiLDEsImxvd2VyLWlucHV0IiwzLCJkaXNhYmxlZCIsInZhbHVlIiwiY2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwxLCJ1cHBlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsiY2xhc3MiLCJzaW5nbGUtc2xpZGVyIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbInJhbmdlIiwiIl0sWyJjb2xvciIsInByaW1hcnkiLDEsInNpbmdsZS1zbGlkZXIiLDMsImRpc2FibGVkIiwibWluIiwibWF4Iiwic3RlcCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udGFpbmVyIl0sWyJjb250YWluZXIiLCIiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsInRodW1iIiwzLCJtb3VzZWRvd24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImlucHV0IiwwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5MRUZUKX0pLHYoKSxnKDEsImlucHV0IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5SSUdIVCl9KSx2KCksRSgyLGY5ZSwxLDUsIm1hdC1zbGlkZXIiLDIpLEUoMyxtOWUsNiwxMiwibmctdGVtcGxhdGUiLG51bGwsMyxlbikpLDImZSl7bGV0IHI9c3QoNCk7YigiZGlzYWJsZWQiLCFpLmVuYWJsZWQpKCJ2YWx1ZSIsaS5sb3dlclZhbHVlKSx4KDEpLGIoImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLG51bGwhPT1pLnVwcGVyVmFsdWU/aS51cHBlclZhbHVlOiIiKSx4KDEpLGIoIm5nSWYiLG51bGw9PT1pLnVwcGVyVmFsdWUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLFRkXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ncmlkO2dyaWQtZ2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1hcmVhczoibG93ZXItaW5wdXQgdXBwZXItaW5wdXQiICJzbGlkZXIgc2xpZGVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtmb250LXNpemU6MDttaW4td2lkdGg6MTAwcHg7cGFkZGluZzo2cHh9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9Lmxvd2VyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6bG93ZXItaW5wdXR9LnVwcGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dXBwZXItaW5wdXQ7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO3BhZGRpbmc6MHB4fS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItd3JhcHBlcnt0b3A6NXB4O2xlZnQ6MHB4O3JpZ2h0OjBweH0gIC5zaW5nbGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6MTJweH0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjJweH0udGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMCwwLDAsLjI2KTtib3JkZXItcmFkaXVzOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZTt3aWR0aDoxMnB4O3dpbGwtY2hhbmdlOnRyYW5zZm9ybX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjMpfS50aHVtYltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOmdyYWJ9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS50aHVtYi5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpzY2FsZSgxLjIpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdjllPVsicmVnZXhTdHJpbmdJbnB1dCJdO2Z1bmN0aW9uIHk5ZShuLHQpe2lmKDEmbiYmKEt0KDApLGcoMSwibGkiLDIyKSxEKDIpLHYoKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigidGl0bGUiLGUubmFtZSkseCgxKSx5dChlLm5hbWUpfX1mdW5jdGlvbiBiOWUobix0KXtpZigxJm4mJihnKDAsImxpIiwyMykoMSwiZW0iKSxEKDIpLGooMywibnVtYmVyIiksdigpKCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDIpLHFlKCJhbmQgIixXKDMsMSxlLnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiB4OWUobix0KXsxJm4mJihnKDAsImxpIiwyNCkoMSwiZW0iKSxEKDIsIk5vIHJ1bnMgYXJlIGluIHRoZSBncm91cCIpLHYoKSgpKX12YXIgQzllPWZ1bmN0aW9uKG4pe3JldHVybntib3JkZXJDb2xvcjpufX0sdzllPWZ1bmN0aW9uKG4pe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6bn19O2Z1bmN0aW9uIE05ZShuLHQpe2lmKDEmbiYmKGcoMCwidWwiLDE2KSgxLCJsaSIpKDIsImxhYmVsIiksTigzLCJzcGFuIiwxNyksZyg0LCJjb2RlIiwxOCksRCg1KSx2KCkoKSxnKDYsInVsIiksRSg3LHk5ZSwzLDIsIm5nLWNvbnRhaW5lciIsMTkpLGooOCwic2xpY2UiKSxFKDksYjllLDQsMywibGkiLDIwKSxFKDEwLHg5ZSwzLDAsImxpIiwyMSksdigpKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ1N0eWxlIixIbigxMSxDOWUsZS5jb2xvcikpLHgoMyksYigibmdTdHlsZSIsSG4oMTMsdzllLGUuY29sb3IpKSx4KDEpLGIoInRpdGxlIixlLmdyb3VwSWQpLHgoMSkseXQoZS5ncm91cElkKSx4KDIpLGIoIm5nRm9yT2YiLF9OKDgsNyxlLnJ1bnMsMCw1KSkseCgyKSxiKCJuZ0lmIixlLnJ1bnMubGVuZ3RoPjUpLHgoMSksYigibmdJZiIsMD09PWUucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBTOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTQpLEUoMSxNOWUsMTEsMTUsInVsIiwxNSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmNvbG9yUnVuUGFpckxpc3QpfX1mdW5jdGlvbiBFOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLEQoMSwiIFRoZXJlIGFyZSBubyBydW5zIG1hdGNoaW5nIHRoZSByZWdleCwgIiksZygyLCJjb2RlIiksRCgzKSx2KCksRCg0LCIuIFBsZWFzZSBjaGVjayBpZiB5b3VyIHJlZ2V4IHN0cmluZyBpcyBjb3JyZWN0LiAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDMpLHFlKCIvIixlLnJlZ2V4U3RyaW5nLCIvIil9fWZ1bmN0aW9uIFQ5ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxMCkoMSwiaDQiKSxEKDIsIkNvbG9yIGdyb3VwIHByZXZpZXciKSx2KCksZygzLCJkaXYiLDExKSxFKDQsUzllLDIsMSwiZGl2IiwxMiksRSg1LEU5ZSw1LDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLGVuKSx2KCkoKSksMiZuKXtsZXQgZT1zdCg2KSxpPU0oKTt4KDQpLGIoIm5nSWYiLGkuY29sb3JSdW5QYWlyTGlzdC5sZW5ndGgpKCJuZ0lmRWxzZSIsZSl9fXZhciBaY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5ob3N0RWxSZWY9aSx0aGlzLm9uU2F2ZT1uZXcgRyx0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZT1uZXcgRyx0aGlzLnRpbWVPdXRJZD0wfXJlc2V0Rm9jdXMoKXt0aGlzLmhvc3RFbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlZ2V4U3RyaW5nSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRW50ZXIoZSl7dGhpcy5vblNhdmVDbGljayhlKSx0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfW9uU2F2ZUNsaWNrKGUpe3RoaXMub25TYXZlLmVtaXQoZSl9ZmlsbEV4YW1wbGUoZSl7dGhpcy5yZWdleFN0cmluZz1lLHRoaXMucmVnZXhJbnB1dENoYW5nZShlKX1yZWdleElucHV0Q2hhbmdlKGUpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQoZSl9aGFuZGxlRm9jdXNPdXQoKXtjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpLHRoaXMudGltZU91dElkPXNldFRpbWVvdXQodGhpcy5yZXNldEZvY3VzLmJpbmQodGhpcyksMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTWQpLHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh2OWUsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yZWdleFN0cmluZ0lucHV0PXIuZmlyc3QpfX0saW5wdXRzOntyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLGNvbG9yUnVuUGFpckxpc3Q6ImNvbG9yUnVuUGFpckxpc3QifSxvdXRwdXRzOntvblNhdmU6Im9uU2F2ZSIscmVnZXhJbnB1dE9uQ2hhbmdlOiJyZWdleElucHV0T25DaGFuZ2UifSxkZWNsczozMCx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpDb2xvciBSdW5zIGJ5IFJlZ2V4IFF1ZXJ54pCfMTVlZDlmNmZkMmQ0OTA2YTQ4MDNmYzEyNTVkZTNjNWRiMmM1NjUzMOKQnzkwODg5ODUxMTM5NjAzMTI4MDg6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeWAsW1sxLCJyZWdleC1lZGl0LWRpYWxvZyIsMywiZm9jdXNvdXQiXSxbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMywiY2xpY2siXSxbMSwiZ3JvdXAtY29udGFpbmVyIl0sWzEsImdyb3VwaW5nLXByZXZpZXciXSxbImNsYXNzIiwibWF0Y2gtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImVtcHR5IiwiIl0sWzEsIm1hdGNoLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJncm91cCIsMywibmdTdHlsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImdyb3VwIiwzLCJuZ1N0eWxlIl0sWzEsImNvbG9yLXN3YXRjaCIsMywibmdTdHlsZSJdLFsxLCJncm91cC1pZCIsMywidGl0bGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vcmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2giLDQsIm5nSWYiXSxbMywidGl0bGUiXSxbMSwibW9yZSJdLFsxLCJuby1tYXRjaCJdLFsxLCJ3YXJuaW5nIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIsMCksUCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXNPdXQoKX0pLGcoMSwiaDEiLDEpLEQoMiwiQ29sb3IgcnVucyBieSByZWdleCIpLHYoKSxnKDMsIm1hdC1kaWFsb2ctY29udGVudCIpKDQsInAiKSxEKDUsIkVudGVyIGEgcmVnZXggd2l0aCBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFnYWluc3QgcnVuIG5hbWVzOiIpLHYoKSxnKDYsIm1hdC1mb3JtLWZpZWxkIikoNywiaW5wdXQiLDIsMyksUCgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24ocyl7cmV0dXJuIGkub25FbnRlcihzLnRhcmdldC52YWx1ZSl9KSgiaW5wdXQiLGZ1bmN0aW9uKHMpe3JldHVybiBpLnJlZ2V4SW5wdXRDaGFuZ2Uocy50YXJnZXQudmFsdWUpfSksdigpKCkoKSxnKDksImRpdiIsNCkoMTAsInAiKSxEKDExLCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLE4oMTIsImJyIiksZygxMywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSxEKDE0LCIgVHJ5ICIpLGcoMTUsImNvZGUiKSxEKDE2LCIodHJhaW58ZXZhbCkiKSx2KCkoKSxEKDE3LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygxOCwiY29kZSIpLEQoMTksInRyYWluIiksdigpLEQoMjAsIiB0byBvbmUgY29sb3IgYW5kIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygyMSwiY29kZSIpLEQoMjIsImV2YWwiKSx2KCksRCgyMywiIHRvIGFub3RoZXIgY29sb3IuICIpLHYoKSgpLEUoMjQsVDllLDcsMiwiZGl2Iiw2KSxnKDI1LCJkaXYiLDcpKDI2LCJidXR0b24iLDgpLEQoMjcsIkNhbmNlbCIpLHYoKSxnKDI4LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDgpO3JldHVybiBvZShpLm9uU2F2ZUNsaWNrKHMudmFsdWUpKX0pLEQoMjksIiBTYXZlICIpLHYoKSgpKCl9MiZlJiYoeCg3KSx4cigidmFsdWUiLGkucmVnZXhTdHJpbmcpLHgoMTcpLGIoIm5nSWYiLGkucmVnZXhTdHJpbmcpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSx3cCxEdSwkbixqQSxGSixHQSxXQSxRXyxCWSx2bF0sc3R5bGVzOlsiLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwfS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTBweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO21heC1oZWlnaHQ6NTB2aDtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0ubWF0Y2gtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6Z3JpZDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsIG1pbm1heCg1MCUsIDFmcikpfS5jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6MCAwIDJweCAjMDAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNXB4O3dpZHRoOjE1cHh9dWxbX25nY29udGVudC0lQ09NUCVde2xpc3Qtc3R5bGUtdHlwZTpub25lO3BhZGRpbmc6MH1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDttYXJnaW46MDtwYWRkaW5nOjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1heC1jb250ZW50IGF1dG87cGFkZGluZzo1cHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ncm91cC1pZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45NWVtO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgdWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV0gICBsaVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubW9yZVtfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nUmVmPWksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQ9bmV3IFRlLHRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJD1iYSgoKT0+dW4odGhpcy5zdG9yZS5zZWxlY3QodUEpLnBpcGUoSHQoMSkpLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckKSkucGlwZShWbigiIikpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9YmEoKCk9PnRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJC5waXBlKEFyKDUwMCksSGUobz0+e3RyeXtsZXQgcz1uZXcgUmVnRXhwKG8pO3JldHVybiBCb29sZWFuKHMpfWNhdGNoe3JldHVybiExfX0pLHNyKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCx0aGlzLnN0b3JlLnNlbGVjdChhYS5nZXRDb2xvclBhbGV0dGUpLHRoaXMuc3RvcmUuc2VsZWN0KG11KSksQigoW28scyxhLGwsY10pPT57bGV0IGQ9QUMoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzpvfSxzLGEpLHA9bmV3IE1hcCxoPVtdO2ZvcihsZXRbZixtXW9mIE9iamVjdC5lbnRyaWVzKGQubWF0Y2hlcykpe2xldCBDPXAuZ2V0KGYpO2lmKCFDKXtsZXQgXz1sLmNvbG9yc1twLnNpemUlbC5jb2xvcnMubGVuZ3RoXTtDPWM/Xy5kYXJrSGV4Ol8ubGlnaHRIZXgscC5zZXQoZixDKX1oLnB1c2goe2dyb3VwSWQ6Zixjb2xvcjpDLHJ1bnM6bX0pfXJldHVybiBofSkpKS5waXBlKFZuKFtdKSksdGhpcy5leHBlcmltZW50SWRzPXIuZXhwZXJpbWVudElkcyx0aGlzLnJ1bklkVG9FaWQkPXBuKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoeFose2V4cGVyaW1lbnRJZDpvfSkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkOm8scnVuSWRzOnN9KSkpKSkucGlwZShCKG89PntsZXQgcz17fTtmb3IobGV0e3J1bklkczphLGV4cGVyaW1lbnRJZDpsfW9mIG8pZm9yKGxldCBjIG9mIGEpc1tjXT1sO3JldHVybiBzfSkpLHRoaXMuYWxsUnVucyQ9cG4odGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoQihvPT5vLmZsYXQoKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQoZSl9b25TYXZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobF8oe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTplci5SRUdFWCxyZWdleFN0cmluZzplfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhNZCksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwiY29sb3JSdW5QYWlyTGlzdCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IiwwKSxQKCJvblNhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2F2ZShvKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSwyLGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixXKDIsNCxpLmNvbG9yUnVuUGFpckxpc3QkKSl9LGRlcGVuZGVuY2llczpbWmNlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBJOWUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBQOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDEzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpyLkdyb3VwQnlLZXkuRVhQRVJJTUVOVH0pKX0pLGcoMSwic3BhbiIpLEUoMixJOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMywibGFiZWwiKSxEKDQsIkV4cGVyaW1lbnQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTt6ZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCkseCgyKSxiKCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIFI5ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIE85ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGs5ZShuLHQpe2lmKDEmbiYmKGcoMCwibGFiZWwiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24gRjllKG4sdCl7MSZuJiYoZygwLCJsYWJlbCIsMTUpLEQoMSwiKG5vbmUgc2V0KSIpLHYoKSl9dmFyICRjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWUsdGhpcy5Hcm91cEJ5S2V5PWVyLHRoaXMub25Hcm91cEJ5Q2hhbmdlPW5ldyBHfW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihKY2Use21heEhlaWdodDoiOTV2aCIsbWF4V2lkdGg6IjgwdnciLGRhdGE6e2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfX0pfW9uR3JvdXBCeVJlZ2V4Q2xpY2soKXt0aGlzLnJlZ2V4U3RyaW5nP3RoaXMub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzp0aGlzLnJlZ2V4U3RyaW5nfSk6dGhpcy5vblJlZ2V4U3RyaW5nRWRpdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RXhwZXJpbWVudHNHcm91cEJ5OiJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoyMix2YXJzOjgsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ29sb3IgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJleHBlcmltZW50IiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsInJ1biIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJyZWdleCIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJkYXRhLXZhbHVlIiwicmVnZXgtZWRpdCIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiXSxbMSwibm9uZS1zZXQtc3RyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLE4oMSwibWF0LWljb24iLDEpLHYoKSxnKDIsIm1hdC1tZW51IiwyLDMpKDQsImRpdiIsNCksRCg1LCJDb2xvciBydW5zIGJ5IiksdigpLEUoNixQOWUsNSwyLCJidXR0b24iLDUpLGcoNywiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OmkuR3JvdXBCeUtleS5SVU59KX0pLGcoOCwic3BhbiIpLEUoOSxSOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImxhYmVsIiksRCgxMSwiUnVuIiksdigpKCksZygxMiwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSxnKDEzLCJzcGFuIiksRSgxNCxPOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTUsImxhYmVsIiksRCgxNiwiUmVnZXgiKSx2KCkoKSxnKDE3LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVnZXhTdHJpbmdFZGl0KCl9KSxnKDE4LCJzcGFuIiksTigxOSwibWF0LWljb24iLDEwKSx2KCksRSgyMCxrOWUsMiwxLCJsYWJlbCIsMTEpLEUoMjEsRjllLDIsMCwibGFiZWwiLDEyKSx2KCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDMpKSx4KDYpLGIoIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSkseCgxKSx6ZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLHgoMyksemUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCkseCg2KSxiKCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSx4KDEpLGIoIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbWGUsJG4sWm4sSXUsRWMsUHVdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgYnV0dG9ue2Rpc3BsYXk6Z3JpZDtnYXA6MnB4IDEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjIwcHggYXV0b30gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoRlEpLnBpcGUoQihpPT5pLmhhcyhmaS5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KHdaKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodUEpfW9uR3JvdXBCeUNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxfKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIl1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJyZWdleFN0cmluZyIsInNlbGVjdGVkR3JvdXBCeSIsInNob3dFeHBlcmltZW50c0dyb3VwQnkiLCJleHBlcmltZW50SWRzIiwib25Hcm91cEJ5Q2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudCIsMCksUCgib25Hcm91cEJ5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSw0LGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJzZWxlY3RlZEdyb3VwQnkiLFcoMiw2LGkuc2VsZWN0ZWRHcm91cEJ5JCkpKCJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixXKDMsOCxpLnNob3dFeHBlcmltZW50c0dyb3VwQnkkKSkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcyl9LGRlcGVuZGVuY2llczpbJGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCOWU9WyJmaWx0ZXIiXTtmdW5jdGlvbiBWOWUobix0KXsxJm4mJkFpKDApfWZ1bmN0aW9uIEg5ZShuLHQpezEmbiYmQWkoMCl9dmFyIFU5ZT1mdW5jdGlvbihuKXtyZXR1cm57aXRlbTpufX07ZnVuY3Rpb24gejllKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEg5ZSwxLDAsIm5nLWNvbnRhaW5lciIsMTIpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7TSgpO2xldCBpPXN0KDE0KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMixVOWUsZSkpfX1mdW5jdGlvbiBqOWUobix0KXsxJm4mJihnKDAsImRpdiIsMTMpLE4oMSwibWF0LXNwaW5uZXIiLDE0KSx2KCkpfWZ1bmN0aW9uIEc5ZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNSksRCgxLCJObyBSdW5zIiksdigpKX1mdW5jdGlvbiBXOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTUpKDEsInNwYW4iKSxEKDIsJ05vIHJ1bnMgbWF0Y2ggIicpLGcoMywiY29kZSIpLEQoNCksdigpLEQoNSwnIicpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTt4KDQpLHl0KGUucmVnZXhGaWx0ZXIpfX12YXIgcTllPWZ1bmN0aW9uKCl7cmV0dXJuWzUsMTAsMjBdfTtmdW5jdGlvbiBZOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtcGFnaW5hdG9yIiwxNiksUCgicGFnZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblBhZ2luYXRpb25DaGFuZ2UuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7YigicGFnZVNpemVPcHRpb25zIixscCg0LHE5ZSkpKCJwYWdlSW5kZXgiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlSW5kZXgpKCJwYWdlU2l6ZSIsZS5wYWdpbmF0aW9uT3B0aW9uLnBhZ2VTaXplKSgibGVuZ3RoIixlLmZpbHRlcmVkSXRlbXNMZW5ndGgpfX1mdW5jdGlvbiBYOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtY2hlY2tib3giLDI2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMykuaGFuZGxlUGFnZVRvZ2dsZSgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMyk7YigiY2hlY2tlZCIsZS5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpKSgiaW5kZXRlcm1pbmF0ZSIsIWUuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSYmZS5zb21lUGFnZUl0ZW1zU2VsZWN0ZWQoKSl9fXZhciB0dWU9ZnVuY3Rpb24obil7cmV0dXJue3R5cGU6bn19O2Z1bmN0aW9uIFE5ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjcpLEQoMSwiRXhwZXJpbWVudCIpLHYoKSksMiZuKXtsZXQgZT1NKDMpO2IoIm1hdC1zb3J0LWhlYWRlciIsSG4oMSx0dWUsZS5Tb3J0VHlwZS5FWFBFUklNRU5UX05BTUUpKX19ZnVuY3Rpb24gSzllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyNyksRCgxLCJSdW4iKSx2KCkpLDImbil7bGV0IGU9TSgzKTtiKCJtYXQtc29ydC1oZWFkZXIiLEhuKDEsdHVlLGUuU29ydFR5cGUuUlVOX05BTUUpKX19ZnVuY3Rpb24gWjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwyOCksdigpKSwyJm4pe2xldCBlPU0oMyk7eCgxKSxiKCJleHBlcmltZW50SWRzIixlLmV4cGVyaW1lbnRJZHMpfX12YXIgbnVlPWZ1bmN0aW9uKG4pe3JldHVyblsiY29sdW1uIixuXX07ZnVuY3Rpb24gSjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMSksS3QoMSwyMiksRSgyLFg5ZSwxLDIsIm1hdC1jaGVja2JveCIsMjMpLEUoMyxROWUsMiwzLCJzcGFuIiwyNCksRSg0LEs5ZSwyLDMsInNwYW4iLDI0KSxFKDUsWjllLDIsMSwic3BhbiIsMjUpLFp0KCksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgyKTtiKCJuZ0NsYXNzIixIbig2LG51ZSwidGItY29sdW1uLSIrZSkpLHgoMSksYigibmdTd2l0Y2giLGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5DSEVDS0JPWCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkVYUEVSSU1FTlRfTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX0NPTE9SKX19ZnVuY3Rpb24gJDllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLGcoMSwiZGl2IiwzNyksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZygyLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgyKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKG8scikpfSksdigpKCksWnQoKX1pZigyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMiksYigibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fWZ1bmN0aW9uIGVxZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoMSwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oMykuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChzLG8pKX0pLGcoMiwic3BhbiIpLEQoMyksdigpKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgzKS4kaW1wbGljaXQ7eCgxKSxiKCJjaGVja2VkIixpLmZpbHRlci5maWx0ZXJWYWx1ZXMuaW5jbHVkZXMoZSkpLHgoMikseXQoZSl9fWZ1bmN0aW9uIHRxZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxlcWUsNCwyLCJkaXYiLDM5KSxadCgpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMSksYigibmdGb3JPZiIsZS5maWx0ZXIucG9zc2libGVWYWx1ZXMpfX1mdW5jdGlvbiBucWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxOKDIsIm1hdC1pY29uIiwzMyksdigpLGcoMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoNiwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQocikpfSksZyg3LCJzcGFuIiksRCg4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSx2KCkoKSgpLEUoOSwkOWUsMyw0LCJuZy1jb250YWluZXIiLDMxKSxFKDEwLHRxZSwyLDEsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0LHI9TSgyKTt4KDEpLGIoIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSx6ZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBocGFyYW0gIisoaS5kaXNwbGF5TmFtZXx8aS5uYW1lKSkseCg1KSxiKCJjaGVja2VkIixpLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkKSx4KDMpLGIoIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1yLkRvbWFpblR5cGUuSU5URVJWQUwpLHgoMSksYigibmdJZiIsaS5maWx0ZXIudHlwZT09PXIuRG9tYWluVHlwZS5ESVNDUkVURSl9fXZhciBpcWU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLG5hbWU6dH19O2Z1bmN0aW9uIHJxZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjkpKDEsInNwYW4iLDMwKSxEKDIpLHYoKSxFKDMsbnFlLDExLDUsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibWF0LXNvcnQtaGVhZGVyIix0bygzLGlxZSxpLlNvcnRUeXBlLkhQQVJBTSxlLm5hbWUpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUubmFtZSkseCgxKSxiKCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIG9xZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImJ1dHRvbiIsMzIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLE4oMiwibWF0LWljb24iLDMzKSx2KCksZygzLCJtYXQtbWVudSIsbnVsbCwzNCkoNSwiZGl2IiwzNSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZyg2LCJtYXQtY2hlY2tib3giLDM2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmUoZSk7bGV0IHI9TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChyKSl9KSxnKDcsInNwYW4iKSxEKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLHYoKSgpKCksZyg5LCJkaXYiLDM3KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxnKDEwLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKG8scikpfSksdigpKCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0O3goMSksYigibWF0TWVudVRyaWdnZXJGb3IiLGUpLHplKCJhcmlhLWxhYmVsIiwiRmlsdGVyIG1ldHJpYyAiKyhpLmRpc3BsYXlOYW1lfHxpLnRhZykpLHgoNSksYigiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCkseCg0KSxiKCJtaW4iLGkuZmlsdGVyLm1pblZhbHVlKSgibWF4IixpLmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLGkuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIixpLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19dmFyIHNxZT1mdW5jdGlvbihuLHQpe3JldHVybnt0eXBlOm4sdGFnOnR9fTtmdW5jdGlvbiBhcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksRCgyKSx2KCksRSgzLG9xZSwxMSw3LCJuZy1jb250YWluZXIiLDMxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO2IoIm1hdC1zb3J0LWhlYWRlciIsdG8oMyxzcWUsaS5Tb3J0VHlwZS5NRVRSSUMsZS50YWcpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUudGFnKSx4KDEpLGIoIm5nSWYiLGUuZmlsdGVyKX19ZnVuY3Rpb24gbHFlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxNykoMSwiZGl2IiwxOCksUCgibWF0U29ydENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5oYW5kbGVTb3J0Q2hhbmdlKHIpKX0pLEUoMixKOWUsNiw4LCJzcGFuIiwxOSksRSgzLHJxZSw0LDYsInNwYW4iLDIwKSxFKDQsYXFlLDQsNiwic3BhbiIsMjApLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibWF0U29ydEFjdGl2ZSIsZS5zb3J0T3B0aW9uLmNvbHVtbikseCgxKSxiKCJuZ0Zvck9mIixlLmNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsZS5ocGFyYW1Db2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlIcGFyYW1Db2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5tZXRyaWNDb2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlNZXRyaWNDb2x1bW4pfX1mdW5jdGlvbiBjcWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwibWF0LWNoZWNrYm94Iiw0NyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQocikpfSkoImRibGNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChyKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMikuaXRlbTt4KDEpLGIoImNoZWNrZWQiLGUuc2VsZWN0ZWQpfX1mdW5jdGlvbiB1cWUobix0KXtpZigxJm4mJk4oMCwidGItZXhwZXJpbWVudC1hbGlhcyIsNDgpLDImbil7bGV0IGU9TSgyKS5pdGVtO2IoImFsaWFzIixlLmV4cGVyaW1lbnRBbGlhcykoInRpdGxlIixlLmV4cGVyaW1lbnROYW1lKX19ZnVuY3Rpb24gZHFlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwzMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSkseXQoZS5ydW4ubmFtZSl9fXZhciBwcWU9ZnVuY3Rpb24obil7cmV0dXJueyJydW4tY29sb3Itc3dhdGNoIjohMCwibm8tY29sb3IiOm59fTtmdW5jdGlvbiBocWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwiYnV0dG9uIiw0OSksUCgiY29sb3JQaWNrZXJDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5ydW4uaWQsbmV3Q29sb3I6cn0pKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSksT3QoImJhY2tncm91bmQiLGUucnVuQ29sb3IpLGIoIm5nQ2xhc3MiLEhuKDgscHFlLCFlLnJ1bkNvbG9yKSkoImNvbG9yUGlja2VyIixlLnJ1bkNvbG9yKSgiY3BEaWFsb2dEaXNwbGF5IiwicG9wdXAiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBmcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQ0KSxLdCgxLDIyKSxFKDIsY3FlLDIsMSwic3BhbiIsMjUpLEUoMyx1cWUsMSwyLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0NSksRSg0LGRxZSwyLDEsInNwYW4iLDQ2KSxFKDUsaHFlLDIsMTAsInNwYW4iLDI1KSxadCgpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsSG4oNixudWUsInRiLWNvbHVtbi0iK2UpKSx4KDEpLGIoIm5nU3dpdGNoIixlKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIG1xZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNTApLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpLml0ZW07eCgxKSx5dChpLmhwYXJhbXMuZ2V0KGUubmFtZSkpfX1mdW5jdGlvbiBncWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDUwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKS5pdGVtO3goMSkseXQoaS5tZXRyaWNzLmdldChlLnRhZykpfX1mdW5jdGlvbiBfcWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNDEpLEUoMSxmcWUsNiw4LCJzcGFuIiw0MiksRSgyLG1xZSwyLDEsInNwYW4iLDQzKSxFKDMsZ3FlLDIsMSwic3BhbiIsNDMpLHYoKSksMiZuKXtsZXQgZT10Lml0ZW0saT1NKCk7emUoImRhdGEtaWQiLGUucnVuLmlkKSx4KDEpLGIoIm5nRm9yT2YiLGkuY29sdW1ucykseCgxKSxiKCJuZ0Zvck9mIixpLmhwYXJhbUNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsaS5tZXRyaWNDb2x1bW5zKX19dmFyIHZxZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgb2d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9IlNob3cgcnVuczoifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRhdGFTb3VyY2U9bmV3IGxPLHRoaXMuRG9tYWluVHlwZT1Lbix0aGlzLlJ1bnNUYWJsZUNvbHVtbj1Hcyx0aGlzLlNvcnRUeXBlPUN1LHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRyx0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBHLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRyx0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgRyx0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgRyx0aGlzLm9uU29ydENoYW5nZT1uZXcgRyx0aGlzLm9uUnVuQ29sb3JDaGFuZ2U9bmV3IEcsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgRyx0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkPW5ldyBHLHRoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkPW5ldyBHfW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQoZSl7cmV0dXJuYGg6JHtlLm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZChlKXtyZXR1cm5gbToke2UudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoZT0+ZS5zZWxlY3RlZCl9c29tZVBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMucGFnZUl0ZW1zLnNvbWUoZT0+ZS5zZWxlY3RlZCl9aGFuZGxlUGFnZVRvZ2dsZSgpe3RoaXMub25QYWdlU2VsZWN0aW9uVG9nZ2xlLmVtaXQoe2l0ZW1zOnRoaXMucGFnZUl0ZW1zfSl9aGFuZGxlU29ydENoYW5nZShlKXtsZXQgaTtzd2l0Y2goZS5kaXJlY3Rpb24pe2Nhc2UiYXNjIjppPUVsLkFTQzticmVhaztjYXNlImRlc2MiOmk9RWwuREVTQzticmVhaztkZWZhdWx0Omk9RWwuVU5TRVR9dGhpcy5vblNvcnRDaGFuZ2UuZW1pdCh7a2V5OmUuYWN0aXZlLGRpcmVjdGlvbjppfSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9dGFibGVUcmFja0J5KGUsaSl7cmV0dXJuIGkucnVuLmlkfWhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKGUpe2xldHtuYW1lOmksZmlsdGVyOnJ9PWU7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3IudHlwZT09PUtuLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6IXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6ci5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6cixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChlLGkpe2xldHtuYW1lOnIsZmlsdGVyOm99PWU7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO2lmKG8udHlwZSE9PUtuLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGV4cGVjdGVkIGRpc2NyZXRlIGRvbWFpbiBmb3IgJHtyfWApO2xldCBzPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7cy5oYXMoaSk/cy5kZWxldGUoaSk6cy5hZGQoaSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5zXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKGUpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOiFlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKGUsaSl7aWYoIWUuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUudGFnLGluY2x1ZGVVbmRlZmluZWQ6ZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4oZSl7cmV0dXJuIGUubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKGUpe3JldHVybiBlLnRhZ319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy10YWJsZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQjllLDcsQWUpLGx0KHNPLDcpLGx0KHRTLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmZpbHRlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5wYWdpbmF0b3I9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuc29ydD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dFeHBlcmltZW50TmFtZToic2hvd0V4cGVyaW1lbnROYW1lIixjb2x1bW5zOiJjb2x1bW5zIixocGFyYW1Db2x1bW5zOiJocGFyYW1Db2x1bW5zIixtZXRyaWNDb2x1bW5zOiJtZXRyaWNDb2x1bW5zIixhbGxJdGVtc0xlbmd0aDoiYWxsSXRlbXNMZW5ndGgiLGZpbHRlcmVkSXRlbXNMZW5ndGg6ImZpbHRlcmVkSXRlbXNMZW5ndGgiLHVzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIscGFnZUl0ZW1zOiJwYWdlSXRlbXMiLGxvYWRpbmc6ImxvYWRpbmciLG51bVNlbGVjdGVkSXRlbXM6Im51bVNlbGVjdGVkSXRlbXMiLHNvcnRPcHRpb246InNvcnRPcHRpb24iLHBhZ2luYXRpb25PcHRpb246InBhZ2luYXRpb25PcHRpb24iLHJlZ2V4RmlsdGVyOiJyZWdleEZpbHRlciJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJDaGFuZ2UiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25TZWxlY3Rpb25EYmxDbGljazoib25TZWxlY3Rpb25EYmxDbGljayIsb25QYWdlU2VsZWN0aW9uVG9nZ2xlOiJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLG9uUGFnaW5hdGlvbkNoYW5nZToib25QYWdpbmF0aW9uQ2hhbmdlIixvblNvcnRDaGFuZ2U6Im9uU29ydENoYW5nZSIsb25SdW5Db2xvckNoYW5nZToib25SdW5Db2xvckNoYW5nZSIsb25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDoib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpvZyx1c2VDbGFzczp2cWV9XSksenRdLGRlY2xzOjE1LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJyb2xlIiwidGFibGUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJyb3dzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJsb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXJ1bnMiLDQsIm5nSWYiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiLDQsIm5nSWYiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJoZWFkZXIiXSxbIm1hdFNvcnQiLCIiLCJyb2xlIiwicm93IiwzLCJtYXRTb3J0QWN0aXZlIiwibWF0U29ydENoYW5nZSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJjbGFzcyIsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbInJvbGUiLCJyb3ciXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwiY2xhc3MiLCJjb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiXSxbMywiYWxpYXMiLCJ0aXRsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm5hbWUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsidGl0bGUiLCJDbGljayB0byB0b2dnbGUgcnVuIHNlbGVjdGlvbiBvciBkb3VibGUgY2xpY2sgdG8gc2VsZWN0IG9ubHkgdGhpcyBydW4uIiwzLCJjaGVja2VkIiwiY2hhbmdlIiwiZGJsY2xpY2siXSxbMywiYWxpYXMiLCJ0aXRsZSJdLFszLCJuZ0NsYXNzIiwiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbInJvbGUiLCJjZWxsIiwxLCJjb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxQKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GaWx0ZXJLZXlVcChvKX0pLHYoKSgpLGcoMiwiZGl2IiwyKSgzLCJkaXYiLDMpLEUoNCxWOWUsMSwwLCJuZy1jb250YWluZXIiLDQpLGcoNSwiZGl2Iiw1KSxFKDYsejllLDIsNCwibmctY29udGFpbmVyIiw2KSx2KCkoKSxFKDcsajllLDIsMCwiZGl2Iiw3KSxFKDgsRzllLDIsMCwiZGl2Iiw4KSxFKDksVzllLDYsMSwiZGl2Iiw4KSx2KCksRSgxMCxZOWUsMSw1LCJtYXQtcGFnaW5hdG9yIiw5KSxFKDExLGxxZSw1LDYsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSxFKDEzLF9xZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDExLGVuKSksMiZlKXtsZXQgcj1zdCgxMik7eCgxKSx4cigidmFsdWUiLGkucmVnZXhGaWx0ZXIpLHgoMyksYigibmdUZW1wbGF0ZU91dGxldCIscikseCgyKSxiKCJuZ0Zvck9mIixpLnBhZ2VJdGVtcykoIm5nRm9yVHJhY2tCeSIsaS50YWJsZVRyYWNrQnkpLHgoMSksYigibmdJZiIsaS5sb2FkaW5nKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJjA9PT1pLmFsbEl0ZW1zTGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJmkuYWxsSXRlbXNMZW5ndGg+MCYmMD09PWkuZmlsdGVyZWRJdGVtc0xlbmd0aCkseCgxKSxiKCJuZ0lmIixpLnVzZVBhZ2luYXRpb24pfX0sZGVwZW5kZW5jaWVzOltYY2UsUG4seW4sWGUsTm8saHIsSXIsX3Ysb08sJG4sRWQsWm4sSXUsRWMsUHUsc08sdm8sdFMsSGNlLEtjZSxldWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmctYm90dG9tOjEycHh9Ym9keS5kYXJrLW1vZGUgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6dGFibGUtcm93O2hlaWdodDo0M3B4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bcm9sZT1yb3dncm91cF1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfVtyb2xlPXJvd2dyb3VwXS5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNlbGVjdC1hbGxbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEycHg7cGFkZGluZy10b3A6MTJweH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpsZWZ0fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDRweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4IDAgMjFweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRiLWNvbHVtbi1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0sIC50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0ucnVuLWNvbG9yLXN3YXRjaC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNjNmNhZDE7Ym9yZGVyLXdpZHRoOjJweH0ucmFuZ2UtaW5wdXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6YXV0b31bX25naG9zdC0lQ09NUCVdICAgICBtYXQtcGFnaW5hdG9yIG1hdC1mb3JtLWZpZWxke21hcmdpbjowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcn0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWxhYmVse292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxicWU9WShJQyxuPT5uLnN0YXRlPT09RWUuTE9BRElORyk7ZnVuY3Rpb24gcnVlKG4sdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBDdS5FWFBFUklNRU5UX05BTUU6cmV0dXJuW24uZXhwZXJpbWVudEFsaWFzLG4ucnVuLm5hbWUsbi5ydW4uaWRdO2Nhc2UgQ3UuUlVOX05BTUU6cmV0dXJuW24ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgQ3UuSFBBUkFNOnJldHVybltuLmhwYXJhbXMuZ2V0KHQubmFtZSksbi5ydW4ubmFtZSxuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5pZF07Y2FzZSBDdS5NRVRSSUM6cmV0dXJuW24ubWV0cmljcy5nZXQodC50YWcpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke3R9YCl9fWZ1bmN0aW9uIG91ZShuLHQpe3JldHVybiB2b2lkIDA9PT10P24uaW5jbHVkZVVuZGVmaW5lZDpuLnR5cGU9PT1Lbi5ESVNDUkVURT9uLmZpbHRlclZhbHVlcy5pbmNsdWRlcyh0KTpuLnR5cGU9PT1Lbi5JTlRFUlZBTCYmbi5maWx0ZXJMb3dlclZhbHVlPD10JiZ0PD1uLmZpbHRlclVwcGVyVmFsdWV9dmFyIHN1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmxvYWRpbmckPW51bGwsdGhpcy5ocGFyYW1Db2x1bW5zJD1qdChbXSksdGhpcy5tZXRyaWNDb2x1bW5zJD1qdChbXSksdGhpcy51c2VGbGV4aWJsZUxheW91dD0hMSx0aGlzLnVzZVBhZ2luYXRpb249ITEsdGhpcy5jb2x1bW5zPVtHcy5SVU5fTkFNRV0sdGhpcy5zaG93SHBhcmFtc0FuZE1ldHJpY3M9ITEsdGhpcy5zb3J0T3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChJViksdGhpcy5wYWdpbmF0aW9uT3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChBViksdGhpcy5yZWdleEZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmYpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9aXNFeHBlcmltZW50TmFtZVZpc2libGUoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLnNvbWUoZT0+ZT09PUdzLkVYUEVSSU1FTlRfTkFNRSl9bmdPbkluaXQoKXtsZXQgaT1wbih0aGlzLmV4cGVyaW1lbnRJZHMubWFwKHM9PnRoaXMuZ2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQocykpKS5waXBlKEIocz0+W10uY29uY2F0KC4uLnMpKSk7dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkPWkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFFzKDEpKSx0aGlzLmFsbEl0ZW1zTGVuZ3RoJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShCKHM9PnMubGVuZ3RoKSk7bGV0IHI9dGhpcy5nZXRGaWx0ZXJlZEl0ZW1zJCh0aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxRcygxKSk7dGhpcy5maWx0ZXJlZEl0ZW1zTGVuZ3RoJD1yLnBpcGUoQihzPT5zLmxlbmd0aCkpLHRoaXMucGFnZUl0ZW1zJD10aGlzLnNvcnRlZEFuZFNsaWNlZEl0ZW1zJChyKSx0aGlzLm51bVNlbGVjdGVkSXRlbXMkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKEIocz0+cy5yZWR1Y2UoKGEsbCk9PmErTnVtYmVyKGwuc2VsZWN0ZWQpLDApKSk7bGV0IG89dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLnN0b3JlLnNlbGVjdChicWUse2V4cGVyaW1lbnRJZDpzfSkpO2lmKHRoaXMubG9hZGluZyQ9cG4obykucGlwZShCKHM9PnMuc29tZShhPT5hKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtsZXQgcz10aGlzLnN0b3JlLnNlbGVjdChOaC5nZXRFeHBlcmltZW50c0hwYXJhbXNBbmRNZXRyaWNzU3BlY3Mse2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSk7dGhpcy5ocGFyYW1Db2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0SHBhcmFtRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese2hwYXJhbXM6bH1dKT0+bC5tYXAoKHtuYW1lOmMsZGlzcGxheU5hbWU6dX0pPT57bGV0IHA9YS5nZXQoYyk7aWYoIXApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBocGFyYW0gZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOnUsbmFtZTpjLGZpbHRlcjpwfX0pKSksdGhpcy5tZXRyaWNDb2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0TWV0cmljRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese21ldHJpY3M6bH1dKT0+bC5tYXAoKHt0YWc6YyxkaXNwbGF5TmFtZTp1fSk9PntsZXQgZD1hLmdldChjKTtpZighZCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtjfSBtdXN0IGV4aXN0IHdoZW4gdGhlIG1ldHJpYyBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6dSx0YWc6YyxmaWx0ZXI6ZH19KSkpfXRoaXMuY29sdW1ucy5pbmNsdWRlcyhHcy5DSEVDS0JPWCkmJnRoaXMuc3RvcmUuc2VsZWN0KHJhKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksZGkoKGEsbCk9PnVzKGEsbCkpLHZpKCgpPT5pLnBpcGUoSGUoYT0+YS5sZW5ndGg+NTAwKSxIdCgxKSkpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhfKHtsb2NhbGl6ZWRNZXNzYWdlOiJUaGUgbnVtYmVyIG9mIHJ1bnMgZXhjZWVkcyA1MDAuIE5ldyBydW5zIGFyZSB1bnNlbGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiJ9KSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKEFEKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQoZSl7cmV0dXJuIHBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KEpmKV0pLnBpcGUoQigoW2kscl0pPT57aWYoIXIpcmV0dXJuIGk7bGV0IG89dGhpcy5jb2x1bW5zLmluY2x1ZGVzKEdzLkVYUEVSSU1FTlRfTkFNRSk7cmV0dXJuIGkuZmlsdGVyKHM9Pm1BKHtydW5OYW1lOnMucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOnMuZXhwZXJpbWVudEFsaWFzfSxyLG8pKX0pLHZpKGk9PnRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzP3BuKHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpKS5waXBlKEIoKFtyLG9dKT0+aS5maWx0ZXIoKHtocGFyYW1zOnMsbWV0cmljczphfSk9PlsuLi5yLmVudHJpZXMoKV0uZXZlcnkoKFtjLHVdKT0+b3VlKHUscy5nZXQoYykpKSYmWy4uLm8uZW50cmllcygpXS5ldmVyeSgoW2MsdV0pPT5vdWUodSxhLmdldChjKSkpKSkpOmp0KGkpKSl9c29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpe2xldCBpPXBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KElWKV0pLnBpcGUoQigoW28sc10pPT5mdW5jdGlvbihuLHQpe2xldCBlPXQua2V5LGk9Wy4uLm5dO3JldHVybiBudWxsPT09ZXx8dC5kaXJlY3Rpb249PT1FbC5VTlNFVHx8aS5zb3J0KChyLG8pPT57bGV0IHM9cnVlKHIsZSksYT1ydWUobyxlKTtpZihzLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGdpdmVuIHNvcnQgc2hvdWxkIHJlc3VsdCBpbiBzYW1lIG51bWJlciBvZiBpdGVtczogJHt0fWApO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdLHU9YVtsXTtpZihjIT09dSl7aWYodm9pZCAwPT09Y3x8dm9pZCAwPT09dSlyZXR1cm4gdm9pZCAwPT09dT8tMToxO2lmKHR5cGVvZiBjIT10eXBlb2YgdSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21wYXJlIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXM6ICR7dHlwZW9mIGN9IHZzLiAke3R5cGVvZiB1fWApO3JldHVybiBjPHU9PSh0LmRpcmVjdGlvbj09PUVsLkFTQyk/LTE6MX19cmV0dXJuIDB9KSxpfShvLHMpKSk7cmV0dXJuIHBuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KEFWKV0pLnBpcGUoQigoW28sc10pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gby5zbGljZSgpO2xldHtwYWdlU2l6ZTphLHBhZ2VJbmRleDpsfT1zO3JldHVybiBvLnNsaWNlKGwqYSwobCsxKSphKX0pLFZuKFtdKSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQoZSl7cmV0dXJuIHBuKFt0aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KGh1KV0pLnBpcGUoQigoW2kscixvLHMsYV0pPT5pLm1hcChsPT57bGV0IGM9bmV3IE1hcDsobC5ocGFyYW1zfHxbXSkuZm9yRWFjaChkPT57Yy5zZXQoZC5uYW1lLGQudmFsdWUpfSk7bGV0IHU9bmV3IE1hcDtyZXR1cm4obC5tZXRyaWNzfHxbXSkuZm9yRWFjaChkPT57dS5zZXQoZC50YWcsZC52YWx1ZSl9KSx7cnVuOmwsZXhwZXJpbWVudE5hbWU6cj8ubmFtZXx8IiIsZXhwZXJpbWVudEFsaWFzOmFbZV0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChsLmlkKSkscnVuQ29sb3I6c1tsLmlkXSxocGFyYW1zOmMsbWV0cmljczp1fX0pKSl9b25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3RCh7cnVuSWQ6ZS5ydW4uaWR9KSl9b25SdW5TZWxlY3Rpb25EYmxDbGljayhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1EKHtydW5JZDplLnJ1bi5pZH0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUoZSl7bGV0e2l0ZW1zOml9PWUscj1pLm1hcCgoe3J1bjpvfSk9Pm8uaWQpO3RoaXMuc3RvcmUuZGlzcGF0Y2goU0Qoe3J1bklkczpyfSkpfW9uUGFnaW5hdGlvbkNoYW5nZShlKXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7bGV0e3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChFRCh7cGFnZUluZGV4OmkscGFnZVNpemU6cn0pKX1vblNvcnRDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChURChlKSl9b25SZWdleEZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJDKHtyZWdleFN0cmluZzplfSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOmUsbmV3Q29sb3I6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goREQoe3J1bklkOmUsbmV3Q29sb3I6aX0pKX1vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtsZXR7aHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99KSl9b25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c30pKX1vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxtZXRyaWNUYWc6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c30pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtdGFibGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJmbGV4LWxheW91dCIsaS51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7dXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixjb2x1bW5zOiJjb2x1bW5zIixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93SHBhcmFtc0FuZE1ldHJpY3M6InNob3dIcGFyYW1zQW5kTWV0cmljcyJ9LGRlY2xzOjExLHZhcnM6MzUsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsInVzZUZsZXhpYmxlTGF5b3V0IiwibnVtU2VsZWN0ZWRJdGVtcyIsImNvbHVtbnMiLCJocGFyYW1Db2x1bW5zIiwibWV0cmljQ29sdW1ucyIsInNob3dFeHBlcmltZW50TmFtZSIsInBhZ2VJdGVtcyIsImZpbHRlcmVkSXRlbXNMZW5ndGgiLCJhbGxJdGVtc0xlbmd0aCIsImxvYWRpbmciLCJwYWdpbmF0aW9uT3B0aW9uIiwicmVnZXhGaWx0ZXIiLCJzb3J0T3B0aW9uIiwidXNlUGFnaW5hdGlvbiIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25TZWxlY3Rpb25EYmxDbGljayIsIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNvcnRDaGFuZ2UiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicnVucy10YWJsZS1jb21wb25lbnQiLDApLFAoIm9uU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvblRvZ2dsZShvKX0pKCJvblNlbGVjdGlvbkRibENsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvbkRibENsaWNrKG8pfSkoIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlU2VsZWN0aW9uVG9nZ2xlKG8pfSkoIm9uUGFnaW5hdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdpbmF0aW9uQ2hhbmdlKG8pfSkoIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhGaWx0ZXJDaGFuZ2Uobyl9KSgib25Tb3J0Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNvcnRDaGFuZ2Uobyl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5Db2xvckNoYW5nZShvKX0pKCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQobyl9KSgib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKG8pfSkoIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25NZXRyaWNGaWx0ZXJDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSx2KCkpLDImZSYmYigiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgidXNlRmxleGlibGVMYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpKCJudW1TZWxlY3RlZEl0ZW1zIixXKDEsMTUsaS5udW1TZWxlY3RlZEl0ZW1zJCkpKCJjb2x1bW5zIixpLmNvbHVtbnMpKCJocGFyYW1Db2x1bW5zIixXKDIsMTcsaS5ocGFyYW1Db2x1bW5zJCkpKCJtZXRyaWNDb2x1bW5zIixXKDMsMTksaS5tZXRyaWNDb2x1bW5zJCkpKCJzaG93RXhwZXJpbWVudE5hbWUiLGkuaXNFeHBlcmltZW50TmFtZVZpc2libGUoKSkoInBhZ2VJdGVtcyIsVyg0LDIxLGkucGFnZUl0ZW1zJCkpKCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIixXKDUsMjMsaS5maWx0ZXJlZEl0ZW1zTGVuZ3RoJCkpKCJhbGxJdGVtc0xlbmd0aCIsVyg2LDI1LGkuYWxsSXRlbXNMZW5ndGgkKSkoImxvYWRpbmciLFcoNywyNyxpLmxvYWRpbmckKSkoInBhZ2luYXRpb25PcHRpb24iLFcoOCwyOSxpLnBhZ2luYXRpb25PcHRpb24kKSkoInJlZ2V4RmlsdGVyIixXKDksMzEsaS5yZWdleEZpbHRlciQpKSgic29ydE9wdGlvbiIsVygxMCwzMyxpLnNvcnRPcHRpb24kKSkoInVzZVBhZ2luYXRpb24iLGkudXNlUGFnaW5hdGlvbil9LGRlcGVuZGVuY2llczpbaXVlLGZ0XSxzdHlsZXM6WyIuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgICA+IHJ1bnMtdGFibGUtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Il1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGNvbHVtbnM6ImNvbHVtbnMifSxkZWNsczoxLHZhcnM6NCxjb25zdHM6W1szLCJ1c2VGbGV4aWJsZUxheW91dCIsImNvbHVtbnMiLCJleHBlcmltZW50SWRzIiwic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInJ1bnMtdGFibGUiLDApLDImZSYmYigidXNlRmxleGlibGVMYXlvdXQiLCEwKSgiY29sdW1ucyIsaS5jb2x1bW5zKSgiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixpLnNob3dIcGFyYW1zQW5kTWV0cmljcyl9LGRlcGVuZGVuY2llczpbc3VlXSxzdHlsZXM6WyJydW5zLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGx1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmV4cGVyaW1lbnRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+aT8/W10pKSx0aGlzLmNvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+W0dzLkNIRUNLQk9YLEdzLlJVTl9OQU1FLGkmJmkubGVuZ3RoPjE/R3MuRVhQRVJJTUVOVF9OQU1FOm51bGwsR3MuUlVOX0NPTE9SXS5maWx0ZXIocj0+bnVsbCE9PXIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmYigiZXhwZXJpbWVudElkcyIsVygxLDMsaS5leHBlcmltZW50SWRzJCkpKCJjb2x1bW5zIixXKDIsNSxpLmNvbHVtbnMkKSkoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W2F1ZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksY3VlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzJD10aGlzLnN0b3JlLnNlbGVjdChkSyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZCJdXSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sic2lkZWJhciIsIiIsMywic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl0sWyJtYWluIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0Yi1kYXNoYm9hcmQtbGF5b3V0IiksTigxLCJydW5zLXNlbGVjdG9yIiwwKSxqKDIsImFzeW5jIiksTigzLCJtZXRyaWNzLW1haW4tdmlldyIsMSksdigpKSwyJmUmJih4KDEpLGIoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsVygyLDEsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MkKSkpfSxkZXBlbmRlbmNpZXM6W0FuZSxUY2UsbHVlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7b3ZlcmZsb3c6aGlkZGVufS5ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjQ1LDE1NywuODUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmViM2I7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwfXRiLWRhc2hib2FyZC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxO292ZXJmbG93OmhpZGRlbn1uYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO3dpZHRoOjM0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2JvcmRlci1yaWdodC1jb2xvcjojNTU1fW1ldHJpY3MtbWFpbi12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCR6PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaSxSaV19KSxufSkoKSxkTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksdXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxreT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsdXVlXX0pLG59KSgpLHBPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxyTyxTaV19KSxufSkoKSxoTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsaWhdfSksbn0pKCksZHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltRY2Usa2Usa3kscE8sZG0sUmksJHAsSF8sQXUsU2ksZWgsQmNlLGt1LFVjZSxxY2UsaE8sekFdfSksbn0pKCkscHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkdWVdfSksbn0pKCksRnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaV19KSxufSkoKSxodWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksdigpKSwyJmUmJmIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W25PXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZPLGtlLHJoLEZ5XX0pLG59KSgpO2JiKGlPLFt5bixYZSxfbSxtdixodWVdLFtdKTt2YXIgTnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlXX0pLG59KSgpLG1PPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxreV19KSxufSkoKSxMeT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ldfSksbn0pKCksbXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxmdWUsUmksU2ksa3UsbU8sTnksTHldfSksbn0pKCksZ089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGd1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZ08sUmksU2ksa3UsaWgsbU8sTnksTHldfSksbn0pKCksX089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFNpXX0pLG59KSgpLF91ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ksX09dfSksbn0pKCksdnVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxWbyxSaSxTaSxBdSxlaF19KSxufSkoKSx5dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFZvLHZ1ZSxyaF19KSxufSkoKSxidWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGdPLHJJLFJpLEhfLEF1LElsLEdEXX0pLG59KSgpLHh1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZk8sa2UsYnVlLF91ZSxreSxGeSx5dWUsUmksU2ksZWgsa3UscmgsTnksTHldfSksbn0pKCksQ3VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxndWUseHVlLG11ZSxGeV19KSxufSkoKSx3dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLElsXX0pLG59KSgpLHZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSx3dWUsUmksTlAsJHAsU2ksSWwsaWgsZF8saE9dfSksbn0pKCksTXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxfTywkcCxmSSxTaSxSaV19KSxufSkoKSxTdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0N1ZSxrZSxkTyxwTyxyTyxSaSxOUCxTaSxBdSxrdSx2TyxNdWUsQ2RdfSksbn0pKCksRXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkTywkeixTdWUsU2ksdk8scHVlXX0pLG59KSgpO2Z1bmN0aW9uIEVxZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpkdixhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZToiTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIifX19XX1mdW5jdGlvbiBUcWUoKXtyZXR1cm4gWSh2ZCxuPT4oe3NjYWxhclNtb290aGluZzpufSkpfWZ1bmN0aW9uIERxZSgpe3JldHVybiBZKG1fLG49Pih7aWdub3JlT3V0bGllcnM6bn0pKX1mdW5jdGlvbiBBcWUoKXtyZXR1cm4gWShmXyxuPT4oe3Rvb2x0aXBTb3J0OlN0cmluZyhuKX0pKX1mdW5jdGlvbiBJcWUoKXtyZXR1cm4gWShyQSxuPT4oe3RpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ6bn0pKX1mdW5jdGlvbiBQcWUoKXtyZXR1cm4gWShoXyxuPT4oe3RpbWVTZXJpZXNDYXJkTWluV2lkdGg6bn0pKX1mdW5jdGlvbiBScWUoKXtyZXR1cm4gWShUQyxuPT4oe3N0ZXBTZWxlY3RvckVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBPcWUoKXtyZXR1cm4gWShIcCxuPT4oe3JhbmdlU2VsZWN0aW9uRW5hYmxlZDpufSkpfWZ1bmN0aW9uIGtxZSgpe3JldHVybiBZKFZwLG49Pih7bGlua2VkVGltZUVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBGcWUoKXtyZXR1cm4gWShnXyxuPT4oe3NpbmdsZVNlbGVjdGlvbkhlYWRlcnM6bn0pKX1mdW5jdGlvbiBOcWUoKXtyZXR1cm4gWShfXyxuPT4oe3JhbmdlU2VsZWN0aW9uSGVhZGVyczpufSkpfXZhciBUdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6SzUsdXNlRmFjdG9yeTpFbmUsZGVwczpbWjVdfSx7cHJvdmlkZTpaNSx1c2VWYWx1ZTpxRH1dLGltcG9ydHM6W2tlLCQwLE1sLFJ1LmZvclBsdWdpbihDQyxjdWUpLEdELEV1ZSxSci5mb3JGZWF0dXJlKFdELHduZSxLNSksTG8uZm9yRmVhdHVyZShbU25lXSksdnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoRXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKFRxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhEcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoQXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKElxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhQcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoUnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE9xZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhrcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoRnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE5xZSldfSksbn0pKCksRHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltmbmUsVHVlXX0pLG59KSgpLFhkPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ1VTVE9NX0VMRU1FTlQ9IkNVU1RPTV9FTEVNRU5UIixuLklGUkFNRT0iSUZSQU1FIixuLk5HX0NPTVBPTkVOVD0iTkdfQ09NUE9ORU5UIixuLk5PTkU9Ik5PTkUifShYZHx8KFhkPXt9KSksWGQpKSgpLExxZT1bInBsdWdpbkNvbnRhaW5lciJdLEJxZT1bIm5nUGx1Z2luQ29udGFpbmVyIl07ZnVuY3Rpb24gVnFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBIcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsVnFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIFVxZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24genFlKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFVxZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksWnQoKSksMiZuKXtsZXQgZT1NKDIpLGk9c3QoNik7eCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZTppKX19ZnVuY3Rpb24ganFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBHcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsanFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlP2UuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOmkpfX1mdW5jdGlvbiBXcWUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsImgzIiwxMCksRCgyLCIgVGhlcmVcdTIwMTlzIG5vIGRhc2hib2FyZCBieSB0aGUgbmFtZSBvZiBcdTIwMWMiKSxnKDMsImNvZGUiKSxEKDQpLHYoKSxEKDUsIlx1MjAxZC4gIiksdigpLGcoNiwicCIpLEQoNywiWW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS4iKSx2KCksZyg4LCJwIiksQWkoOSwxMSksdigpLFp0KCkpLDImbil7bGV0IGU9TSgyKSxpPXN0KDgpO3goNCkseXQoZS5hY3RpdmVQbHVnaW5JZCkseCg1KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKX19ZnVuY3Rpb24gcXFlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJoMyIsMTIpLEQoMiwiIE5vIGRhc2hib2FyZHMgYXJlIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZGF0YSBzZXQuICIpLHYoKSxnKDMsInAiKSxEKDQsIlByb2JhYmxlIGNhdXNlczoiKSx2KCksZyg1LCJ1bCIpKDYsImxpIiksRCg3LCJZb3UgaGF2ZW5cdTIwMTl0IHdyaXR0ZW4gYW55IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4iKSx2KCksZyg4LCJsaSIpLEQoOSwiVGVuc29yQm9hcmQgY2FuXHUyMDE5dCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuIiksdigpKCksRCgxMCwiIElmIHlvdVx1MjAxOXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZSAiKSxnKDExLCJhIiwxMyksRCgxMiwiUkVBRE1FIiksdigpLEQoMTMsIiBhbmQgcGVyaGFwcyB0aGUgIiksZygxNCwiYSIsMTQpLEQoMTUsIlRlbnNvckJvYXJkIHR1dG9yaWFsIiksdigpLEQoMTYsIi4gIiksZygxNywicCIpLEQoMTgsIiBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZSAiKSxnKDE5LCJhIiwxNSksRCgyMCwidGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtcyIpLHYoKSxEKDIxLCIgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuICIpLHYoKSxnKDIyLCJwIiksQWkoMjMsMTEpLHYoKSxadCgpKSwyJm4pe00oMik7bGV0IGU9c3QoOCk7eCgyMyksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFlxZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw2KSgxLCJkaXYiLDcpLEUoMixIcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoMyx6cWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNCxHcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNSxXcWUsMTAsMiwibmctY29udGFpbmVyIiw4KSxFKDYscXFlLDI0LDEsIm5nLWNvbnRhaW5lciIsOCksdigpKCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpbkxvYWRTdGF0ZSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTikseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLlVOS05PV05fUExVR0lOX0lEKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuTk9fRU5BQkxFRF9QTFVHSU5TKX19ZnVuY3Rpb24gWHFlKG4sdCl7aWYoMSZuJiYoZygwLCJoMyIsMTYpLEQoMSwiRGF0YSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpLHYoKSxnKDIsInAiKSxEKDMsIlRoZSBUZW5zb3JCb2FyZCBzZXJ2ZXIgbWF5IGJlIGRvd24gb3IgaW5hY2Nlc3NpYmxlLiIpLHYoKSxnKDQsInAiKSxBaSg1LDExKSx2KCkpLDImbil7TSgpO2xldCBlPXN0KDgpO3goNSksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFFxZShuLHQpe2lmKDEmbiYmKGcoMCwicCIsMTkpKDEsImkiKSxEKDIsIkxvZyBkaXJlY3Rvcnk6ICIpLGcoMywic3BhbiIpLEQoNCksdigpKCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkseXQoZS5kYXRhTG9jYXRpb24pfX1mdW5jdGlvbiBLcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLGooMiwiZGF0ZSIpLHYoKSxFKDMsUXFlLDUsMSwicCIsMTgpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJMYXN0IHJlbG9hZDogIixuZigyLDIsZS5sYXN0VXBkYXRlZCwibWVkaXVtIiksIiIpLHgoMiksYigibmdJZiIsZS5kYXRhTG9jYXRpb24pfX12YXIgWnFlPWZ1bmN0aW9uKG4pe3JldHVybntwbHVnaW5zOiEwLCJpcy1maXJzdC1wYXJ0eS1wbHVnaW4iOm59fSxCbD0oKCk9PihmdW5jdGlvbihuKXtuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ9MF09IkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EIixuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRD0xXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTj0yXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOIixuW24uTk9fRU5BQkxFRF9QTFVHSU5TPTNdPSJOT19FTkFCTEVEX1BMVUdJTlMiLG5bbi5VTktOT1dOX1BMVUdJTl9JRD00XT0iVU5LTk9XTl9QTFVHSU5fSUQiLG5bbi5MT0FERUQ9NV09IkxPQURFRCIsbltuLkxPQURJTkc9Nl09IkxPQURJTkcifShCbHx8KEJsPXt9KSksQmwpKSgpLEF1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMucGx1Z2luUmVnaXN0cnk9aSx0aGlzLnBsdWdpbkFwaUhvc3Q9cix0aGlzLlBsdWdpbkxvYWRTdGF0ZT1CbCx0aGlzLkxvYWRpbmdNZWNoYW5pc21UeXBlPVhkLHRoaXMucGx1Z2luSW5zdGFuY2VzPW5ldyBNYXB9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fCF0aGlzLmFjdGl2ZUtub3duUGx1Z2lufHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRHx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLkxPQURJTkcpcmV0dXJuO2xldCBpPUJvb2xlYW4odGhpcy5hY3RpdmVLbm93blBsdWdpbiYmIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkKSk7aWYoZS5hY3RpdmVLbm93blBsdWdpbnx8ZS5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8ZS5zZXR0aW5nc0xvYWRTdGF0ZSl7bGV0IHI9ZS5hY3RpdmVLbm93blBsdWdpbj8ucHJldmlvdXNWYWx1ZTtpZihyJiZyLmlkIT09dGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCYmdGhpcy5oaWRlUGx1Z2luKHIpLGkpe2xldCBvPXRoaXMuY3JlYXRlUGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pO28mJnRoaXMucGx1Z2luSW5zdGFuY2VzLnNldCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkLG8pfWVsc2UgdGhpcy5zaG93UGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pfShpfHxlLmxhc3RVcGRhdGVkKSYmdGhpcy5yZWxvYWQodGhpcy5hY3RpdmVLbm93blBsdWdpbixpKX1oaWRlUGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDowLG92ZXJmbG93OiJoaWRkZW4iLHZpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pfXNob3dQbHVnaW4oZSl7aWYoIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyhlLmlkKSlyZXR1cm47bGV0IGk9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO09iamVjdC5hc3NpZ24oaS5zdHlsZSx7bWF4SGVpZ2h0Om51bGwsb3ZlcmZsb3c6bnVsbCx2aXNpYmlsaXR5Om51bGwscG9zaXRpb246bnVsbH0pfWNyZWF0ZVBsdWdpbihlKXtsZXQgaT1udWxsO3N3aXRjaChlLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgWGQuQ1VTVE9NX0VMRU1FTlQ6aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUubG9hZGluZ19tZWNoYW5pc20uZWxlbWVudF9uYW1lKSxpLnJlbG9hZE9uUmVhZHk9ITEsaS5mZWF0dXJlRmxhZ3M9dGhpcy5mZWF0dXJlRmxhZ3MsdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5JRlJBTUU6aWYoIXRoaXMucGx1Z2luQXBpSG9zdCl0aHJvdyBFcnJvcihgSUZSQU1FLWJhc2VkIHBsdWdpbnMgbm90IHN1cHBvcnRlZDogJHtlLmlkfWApO2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksaS5zZXRBdHRyaWJ1dGUoInNyYyIsYGRhdGEvcGx1Z2luX2VudHJ5Lmh0bWw/bmFtZT0ke2UuaWR9YCksdGhpcy5wbHVnaW5BcGlIb3N0LnJlZ2lzdGVyUGx1Z2luSWZyYW1lKGksZS5pZCksdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5OR19DT01QT05FTlQ6bGV0IHI9dGhpcy5wbHVnaW5SZWdpc3RyeS5nZXRDb21wb25lbnQoZS5pZCk7aWYocil7bGV0IG89dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkocik7aT10aGlzLm5nUGx1Z2luQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChvKS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50fWVsc2UgY29uc29sZS5lcnJvcihgTm8gcmVnaXN0ZXJlZCBBbmd1bGFyIGNvbXBvbmVudCBmb3IgcGx1Z2luOiAke2UuaWR9YCk7YnJlYWs7Y2FzZSBYZC5OT05FOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBwbHVnaW4iKX1yZXR1cm4gaX1yZWxvYWQoZSxpKXtpZighaSYmZS5kaXNhYmxlX3JlbG9hZClyZXR1cm47bGV0IHI9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO3ImJnIucmVsb2FkJiZyLnJlbG9hZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEVvKSx3KFJ1KSx3KHhBLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwbHVnaW5zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChMcWUsNyxBZSksbHQoQnFlLDcseWkpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnBsdWdpbnNDb250YWluZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkubmdQbHVnaW5Db250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCIsYWN0aXZlS25vd25QbHVnaW46ImFjdGl2ZUtub3duUGx1Z2luIixwbHVnaW5Mb2FkU3RhdGU6InBsdWdpbkxvYWRTdGF0ZSIsZGF0YUxvY2F0aW9uOiJkYXRhTG9jYXRpb24iLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsc2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIixmZWF0dXJlRmxhZ3M6ImZlYXR1cmVGbGFncyIsbGFzdFVwZGF0ZWQ6Imxhc3RVcGRhdGVkIixlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbInBsdWdpbkNvbnRhaW5lciIsIiJdLFsibmdQbHVnaW5Db250YWluZXIiLCIiXSxbImNsYXNzIiwid2FybmluZyIsMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImVudmlyb25tZW50RmFpbHVyZURlZmF1bHRUZW1wbGF0ZSIsIiJdLFsiZGF0ZUFuZERhdGFMb2NhdGlvbiIsIiJdLFsxLCJ3YXJuaW5nIiwzLCJuZ1N3aXRjaCJdLFsxLCJ3YXJuaW5nLW1lc3NhZ2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidW5rbm93bi1wbHVnaW4iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJuby1hY3RpdmUtcGx1Z2luIl0sWyJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciXSxbMSwiZW52aXJvbm1lbnQtbm90LWxvYWRlZCJdLFsxLCJsYXN0LXJlbG9hZC10aW1lIl0sWyJjbGFzcyIsImRhdGEtbG9jYXRpb24iLDQsIm5nSWYiXSxbMSwiZGF0YS1sb2NhdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLEFpKDIsbnVsbCwyKSx2KCksRSg0LFlxZSw3LDYsImRpdiIsMyksRSg1LFhxZSw2LDEsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLEUoNyxLcWUsNCw1LCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSksMiZlJiYoYigibmdDbGFzcyIsSG4oMixacWUsKG51bGw9PWkuYWN0aXZlS25vd25QbHVnaW4/bnVsbDppLmFjdGl2ZUtub3duUGx1Z2luLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpIT09aS5Mb2FkaW5nTWVjaGFuaXNtVHlwZS5JRlJBTUUpKSx4KDQpLGIoIm5nSWYiLGkucGx1Z2luTG9hZFN0YXRlIT09aS5QbHVnaW5Mb2FkU3RhdGUuTE9BREVEJiZpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURJTkcpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxObyxocixJcixVMF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wbHVnaW5zLmlzLWZpcnN0LXBhcnR5LXBsdWdpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmZmY7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzAzMDMwfS53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7bWFyZ2luOjgwcHggYXV0byAwO21heC13aWR0aDo1NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGFzdC1yZWxvYWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zdHlsZTppdGFsaWN9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdICAgICBpZnJhbWV7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSnFlPVkoc18sZHMsKG4sdCk9PnQmJm5bdF0/T2JqZWN0LmFzc2lnbih7aWQ6dH0sblt0XSk6bnVsbCkseU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVLbm93blBsdWdpbiQ9dGhpcy5zdG9yZS5zZWxlY3QoSnFlKSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnNlbGVjdChkcyksdGhpcy5wbHVnaW5Mb2FkU3RhdGUkPXBuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4kLHRoaXMuYWN0aXZlUGx1Z2luSWQkLHRoaXMuc3RvcmUuc2VsZWN0KHlEKSkucGlwZShCKChbaSxyLG9dKT0+bnVsbCE9PW8uZmFpbHVyZUNvZGU/by5mYWlsdXJlQ29kZT09PUNsLk5PVF9GT1VORD9CbC5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORDpvLmZhaWx1cmVDb2RlPT09Q2wuUEVSTUlTU0lPTl9ERU5JRUQ/QmwuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRDpCbC5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV046bnVsbCE9PWk/QmwuTE9BREVEOm51bGw9PT1vLmxhc3RMb2FkZWRUaW1lSW5NcyYmby5zdGF0ZT09PUVlLkxPQURJTkc/QmwuTE9BRElORzpyP0JsLlVOS05PV05fUExVR0lOX0lEOkJsLk5PX0VOQUJMRURfUExVR0lOUykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyksdGhpcy5kYXRhTG9jYXRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KGJEKS5waXBlKEIoaT0+aS5kYXRhX2xvY2F0aW9uKSksdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoUHApLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChCbyksdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0U2V0dGluZ3NMb2FkU3RhdGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucyJdXSxpbnB1dHM6e2Vudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJ9LGRlY2xzOjksdmFyczoyNyxjb25zdHM6W1szLCJhY3RpdmVLbm93blBsdWdpbiIsImFjdGl2ZVBsdWdpbklkIiwiZGF0YUxvY2F0aW9uIiwibGFzdFVwZGF0ZWQiLCJwbHVnaW5Mb2FkU3RhdGUiLCJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsInNldHRpbmdzTG9hZFN0YXRlIiwiZmVhdHVyZUZsYWdzIiwiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicGx1Z2lucy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIikpLDImZSYmYigiYWN0aXZlS25vd25QbHVnaW4iLFcoMSwxMSxpLmFjdGl2ZUtub3duUGx1Z2luJCkpKCJhY3RpdmVQbHVnaW5JZCIsVygyLDEzLGkuYWN0aXZlUGx1Z2luSWQkKSkoImRhdGFMb2NhdGlvbiIsVygzLDE1LGkuZGF0YUxvY2F0aW9uJCkpKCJsYXN0VXBkYXRlZCIsVyg0LDE3LGkubGFzdExvYWRlZFRpbWVJbk1zJCkpKCJwbHVnaW5Mb2FkU3RhdGUiLFcoNSwxOSxpLnBsdWdpbkxvYWRTdGF0ZSQpKSgiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLFcoNiwyMSxpLmlzRmVhdHVyZUZsYWdzTG9hZGVkJCkpKCJzZXR0aW5nc0xvYWRTdGF0ZSIsVyg3LDIzLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSkoImZlYXR1cmVGbGFncyIsVyg4LDI1LGkuZmVhdHVyZUZsYWdzJCkpKCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUpKCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGkuZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSl9LHN0eWxlczpbInBsdWdpbnMtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7IGhlaWdodDogMTAwJTsgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYk89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W01sLGtlLFJ1XX0pLG59KSgpO2JiKHlPLFtBdWVdLFtmdF0pO3ZhciBJdWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRvY3VtZW50PWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9dGhpcy5vblZpc2liaWxpdHlDaGFuZ2VJbXBsLmJpbmQodGhpcyksdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnBpcGUoZm4oYWEuZ2V0UmVsb2FkRW5hYmxlZCkpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5waXBlKGZuKGFhLmdldFJlbG9hZFBlcmlvZEluTXMpKSx0aGlzLnJlbG9hZFRpbWVySWQ9bnVsbCx0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UpLHBuKHRoaXMucmVsb2FkRW5hYmxlZCQucGlwZShkaSgpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkLnBpcGUoZGkoKSkpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLmNhbmNlbExvYWQoKSxlJiZ0aGlzLmxvYWQoaSl9KX1vblZpc2liaWxpdHlDaGFuZ2VJbXBsKCl7InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJnRoaXMubWlzc2VkQXV0b1JlbG9hZCYmKHRoaXMubWlzc2VkQXV0b1JlbG9hZD0hMSx0aGlzLnN0b3JlLmRpc3BhdGNoKEhhKCkpKX1sb2FkKGUpe3RoaXMucmVsb2FkVGltZXJJZD1zZXRUaW1lb3V0KCgpPT57InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5zdG9yZS5kaXNwYXRjaChIYSgpKTp0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITAsdGhpcy5sb2FkKGUpfSxlKX1jYW5jZWxMb2FkKCl7bnVsbCE9PXRoaXMucmVsb2FkVGltZXJJZCYmY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXJJZCksdGhpcy5yZWxvYWRUaW1lcklkPW51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLmNhbmNlbExvYWQoKSx0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSx0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KEJ0KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicmVsb2FkZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFB1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCJdXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJwbHVnaW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInBsdWdpbnMiLDApKDEsInJlbG9hZGVyIil9LGRlcGVuZGVuY2llczpbeU8sSXVlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksZTg9InNtb290aGluZyIsdDg9InJ1bkNvbG9yR3JvdXAiLG44PSJ0YWdGaWx0ZXIiLGk4PSJydW5GaWx0ZXIiLHI4PSJyZWdleDoiLHhPPWNsYXNzIGV4dGVuZHMgUnVle2dldE1ldHJpY3NQaW5uZWRDYXJkcyh0KXtyZXR1cm4gcG4oW3Quc2VsZWN0KEVDKSx0LnNlbGVjdChsWildKS5waXBlKEIoKFtlLGldKT0+e2lmKCFlLmxlbmd0aCYmIWkubGVuZ3RoKXJldHVybltdO2xldCBvPVsuLi5lLm1hcCgoe3BsdWdpbjpzLHRhZzphLHNhbXBsZTpsLHJ1bklkOmN9KT0+e2xldCB1PXtwbHVnaW46cyx0YWc6YX07cmV0dXJuIHphKHMpJiYodS5ydW5JZD1jKSxVYShzKSYmKHUuc2FtcGxlPWwpLHV9KSwuLi5pXTtyZXR1cm5be2tleToicGlubmVkQ2FyZHMiLHZhbHVlOkpTT04uc3RyaW5naWZ5KG8pfV19KSl9c2VyaWFsaXplU3RhdGVUb1F1ZXJ5UGFyYW1zKHQpe3JldHVybiBwbihbdGhpcy5nZXRNZXRyaWNzUGlubmVkQ2FyZHModCksdC5zZWxlY3QoX2MpLnBpcGUoQihlPT5lP1t7a2V5Om44LHZhbHVlOmV9XTpbXSkpLHBuKFt0LnNlbGVjdChnQyksdC5zZWxlY3QoV2YpXSkucGlwZShCKChbZSxpXSk9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT57aWYodm9pZCAwPT09aSlyZXR1cm57fTtsZXQgcj10W2VdO3JldHVybiByJiZyLnF1ZXJ5UGFyYW1PdmVycmlkZT97a2V5OnIucXVlcnlQYXJhbU92ZXJyaWRlLHZhbHVlOmk/LnRvU3RyaW5nKCl9Ont9fSkuZmlsdGVyKCh7a2V5OmUsdmFsdWU6aX0pPT5lJiZ2b2lkIDAhPT1pKX0oZSxpKSkpLHQuc2VsZWN0KHVaKS5waXBlKEIoZT0+TnVtYmVyLmlzRmluaXRlKGUuc2NhbGFyU21vb3RoaW5nKT9be2tleTplOCx2YWx1ZTpTdHJpbmcoZS5zY2FsYXJTbW9vdGhpbmcpfV06W10pKSx0LnNlbGVjdChUVikucGlwZShCKGU9PntpZighZSlyZXR1cm5bXTtsZXQgaTtzd2l0Y2goZS5rZXkpe2Nhc2UgZXIuRVhQRVJJTUVOVDppPSJleHBlcmltZW50IjticmVhaztjYXNlIGVyLlJVTjppPSJydW4iO2JyZWFrO2Nhc2UgZXIuUkVHRVg6aT1gJHtyOH0ke2UucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5OnQ4LHZhbHVlOml9XX0pKSx0LnNlbGVjdChKZikucGlwZShCKGU9PmU/W3trZXk6aTgsdmFsdWU6ZX1dOltdKSldKS5waXBlKEIoZT0+ZS5mbGF0KCkpKX1kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHQpe2xldCBlPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwscz1udWxsO2ZvcihsZXR7a2V5OmEsdmFsdWU6bH1vZiB0KXN3aXRjaChhKXtjYXNlInBpbm5lZENhcmRzIjplPXRZZShsKTticmVhaztjYXNlIGU4Omk9TnVtYmVyKGwpO2JyZWFrO2Nhc2UgdDg6c3dpdGNoKGwpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OmVyLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6ZXIuUlVOfX1pZihsLnN0YXJ0c1dpdGgocjgpKXtsZXQgYz1sLnNsaWNlKHI4Lmxlbmd0aCk7bz17a2V5OmVyLlJFR0VYLHJlZ2V4U3RyaW5nOmN9fWJyZWFrO2Nhc2Ugbjg6cj1sO2JyZWFrO2Nhc2UgaTg6cz1sfXJldHVybnttZXRyaWNzOntwaW5uZWRDYXJkczplfHxbXSxzbW9vdGhpbmc6aSx0YWdGaWx0ZXI6cn0scnVuczp7Z3JvdXBCeTpvLHJlZ2V4RmlsdGVyOnN9fX19O2Z1bmN0aW9uIHRZZShuKXtsZXQgdDt0cnl7dD1KU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBudWxsO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIGkucnVuSWQscz0ibnVtYmVyIj09dHlwZW9mIGkuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiBpLnRhZyxsPW98fHR5cGVvZiBpLnJ1bklkPiJ1IixjPXN8fHR5cGVvZiBpLnNhbXBsZT4idSI7aWYoISgic3RyaW5nIj09dHlwZW9mIGkucGx1Z2luJiZhJiZsJiZjJiZMSyhpLnBsdWdpbikmJmkudGFnKSljb250aW51ZTtpZih6YShpLnBsdWdpbikpe2lmKCFpLnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYoaS5ydW5JZCljb250aW51ZTtpZihzJiYoIVVhKGkucGx1Z2luKXx8IU51bWJlci5pc0ludGVnZXIoaS5zYW1wbGUpfHxpLnNhbXBsZTwwKSljb250aW51ZTtsZXQgdT17cGx1Z2luOmkucGx1Z2luLHRhZzppLnRhZ307byYmKHUucnVuSWQ9aS5ydW5JZCkscyYmKHUuc2FtcGxlPWkuc2FtcGxlKSxlLnB1c2godSl9cmV0dXJuIGV9ZnVuY3Rpb24ga3VlKCl7cmV0dXJuW3tyb3V0ZUtpbmQ6ZmkuRVhQRVJJTUVOVCxwYXRoOiIvIixuZ0NvbXBvbmVudDpQdWUsZGVmYXVsdFJvdXRlOiEwLGRlZXBMaW5rUHJvdmlkZXI6bmV3IHhPfV19ZnVuY3Rpb24gblllKG4pe3JldHVybih0LGUpPT57bGV0IGk9bih0LGUpO3JldHVybiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGUudHlwZSksY29uc29sZS5sb2coInByZXYgc3RhdGUiLHQpLGNvbnNvbGUubG9nKCJhY3Rpb24iLGUpLGNvbnNvbGUubG9nKCJuZXh0IHN0YXRlIixpKSxjb25zb2xlLmdyb3VwRW5kKCksaX19ZnVuY3Rpb24gRnVlKCl7cmV0dXJuIEJiKCk/blllOm49Pih0LGUpPT5uKHQsZSl9eE89WTgoW0g2KCldLHhPKTt2YXIgTnVlPW5ldyBzZSgiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KSxMdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VzAsdXNlRmFjdG9yeTpGdWUsbXVsdGk6ITB9XSxpbXBvcnRzOltSci5mb3JSb290KE51ZSx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxMby5mb3JSb290KFtdKV19KSxufSkoKSxCdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFZ1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsYk8sQnVlXX0pLG59KSgpLG84PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm4sYm9vdHN0cmFwOltWZWVdfSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZF8sUWVlLHlULE5YLCQwLEhlZSxoYy5yZWdpc3RlclJvdXRlcyhrdWUpLHpBLFVBLFVlZSxWdWUsTWwsWWVlLGplZSxaZWUsT0QsSmVlLEdlZSxZQix4QSxiTyxnQSxtSSxMdWUsRHVlXX0pLG59KSgpOyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/QjMoKS5ib290c3RyYXBNb2R1bGUobzgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKT0+e0IzKCkuYm9vdHN0cmFwTW9kdWxlKG84KX0pLGZ1bmN0aW9uKCl7aWYoajcpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTt6Nz0hMX0oKX0pKCk7Ci8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAogKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4zLjYgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuCiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9ibG9iL21hc3Rlci9MSUNFTlNFCiAqLwovL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5MiwgYW5kIGNhdXNlcwovL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4KLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCi8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KCnZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKGZ1bmN0aW9uIChnbG9iYWwsIHNldFRpbWVvdXQpIHsKICAgIHZhciByZXEsIHMsIGhlYWQsIGJhc2VFbGVtZW50LCBkYXRhTWFpbiwgc3JjLAogICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCiAgICAgICAgdmVyc2lvbiA9ICcyLjMuNicsCiAgICAgICAgY29tbWVudFJlZ0V4cCA9IC9cL1wqW1xzXFNdKj9cKlwvfChbXjoiJz1dfF4pXC9cLy4qJC9tZywKICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAogICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKICAgICAgICBjdXJyRGlyUmVnRXhwID0gL15cLlwvLywKICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCiAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAogICAgICAgIGhhc093biA9IG9wLmhhc093blByb3BlcnR5LAogICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGUKICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAogICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRlLCBidXQgbm90IHN1cmUgaG93CiAgICAgICAgLy90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCiAgICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwogICAgICAgICAgICAgICAgICAgICAgL15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAogICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAogICAgICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCiAgICAgICAgaXNPcGVyYSA9IHR5cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT3BlcmFdJywKICAgICAgICBjb250ZXh0cyA9IHt9LAogICAgICAgIGNmZyA9IHt9LAogICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCiAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKCiAgICAvL0NvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlICcpLy9jb21tZW50JywgZG8gbm90IGxvc2UgdGhlIHByZWZpeCB0byBjb21tZW50LgogICAgZnVuY3Rpb24gY29tbWVudFJlcGxhY2UobWF0Y2gsIHNpbmdsZVByZWZpeCkgewogICAgICAgIHJldHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKICAgICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCiAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOwogICAgfQoKICAgIC8qKgogICAgICogQ3ljbGVzIG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gKICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKICAgICAgICB2YXIgcHJvcDsKICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7CiAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKICAgICAgICAgICAgICAgIGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgewogICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFpc0FycmF5KHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZhbHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAogICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgogICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihlcnIpIHsKICAgICAgICB0aHJvdyBlcnI7CiAgICB9CgogICAgLy9BbGxvdyBnZXR0aW5nIGEgZ2xvYmFsIHRoYXQgaXMgZXhwcmVzc2VkIGluCiAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgogICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHZhciBnID0gZ2xvYmFsOwogICAgICAgIGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKICAgICAgICAgICAgZyA9IGdbcGFydF07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGVycm9yIElEIHRoYXQgbWFwcyB0byBhbiBJRCBvbiBhIHdlYiBwYWdlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KICAgICAqCiAgICAgKiBAcmV0dXJucyB7RXJyb3J9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihpZCwgbXNnLCBlcnIsIHJlcXVpcmVNb2R1bGVzKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0cHM6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjJyArIGlkKTsKICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7CiAgICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZTsKICAgIH0KCiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAogICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVvZiByZXF1aXJlanMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkgewogICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3RhbmNlLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNmZyA9IHJlcXVpcmVqczsKICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKICAgICAgICAvL2Fzc3VtZSBpdCBpcyBhIGNvbmZpZyBvYmplY3QuCiAgICAgICAgY2ZnID0gcmVxdWlyZTsKICAgICAgICByZXF1aXJlID0gdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKICAgICAgICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0LCBoYW5kbGVycywKICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCiAgICAgICAgICAgIGNvbmZpZyA9IHsKICAgICAgICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBkZWZhdWx0IGZvciBtYXAKICAgICAgICAgICAgICAgIC8vY29uZmlnIHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAogICAgICAgICAgICAgICAgLy93aWxsIHJ1biBmYXN0ZXIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KICAgICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAogICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHt9LAogICAgICAgICAgICAgICAgcGtnczoge30sCiAgICAgICAgICAgICAgICBzaGltOiB7fSwKICAgICAgICAgICAgICAgIGNvbmZpZzoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgLy9yZWdpc3RyeSBvZiBqdXN0IGVuYWJsZWQgbW9kdWxlcywgdG8gc3BlZWQKICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCiAgICAgICAgICAgIC8vYXJlIHJlZ2lzdGVyZWQsIGJ1dCBub3QgYWN0aXZhdGVkLgogICAgICAgICAgICBlbmFibGVkUmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKICAgICAgICAgICAgZGVmUXVldWUgPSBbXSwKICAgICAgICAgICAgZGVmaW5lZCA9IHt9LAogICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCiAgICAgICAgICAgIGJ1bmRsZXNNYXAgPSB7fSwKICAgICAgICAgICAgcmVxdWlyZUNvdW50ZXIgPSAxLAogICAgICAgICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lCiAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCiAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKICAgICAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgogICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS4KICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpLCBwYXJ0OwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwogICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgewogICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLiwKICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CiAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgd29yayB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGgsIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnQKICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgogICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChpID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCiAgICAgICAgICogdG8uCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcCBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgdmFsdWUuIFNob3VsZAogICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciBwa2dNYWluLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwgbGFzdEluZGV4LAogICAgICAgICAgICAgICAgZm91bmRNYXAsIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgbm9ybWFsaXplZEJhc2VQYXJ0cywKICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpKSwKICAgICAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsCiAgICAgICAgICAgICAgICBzdGFyTWFwID0gbWFwICYmIG1hcFsnKiddOwoKICAgICAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKCiAgICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQgY29tcGF0aWJpbGl0eSwgc3RyaXAgLmpzIGZyb20gZW5kCiAgICAgICAgICAgICAgICAvLyBvZiBJRHMuIEhhdmUgdG8gZG8gdGhpcyBoZXJlLCBhbmQgbm90IGluIG5hbWVUb1VybAogICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBub2RlIGFsbG93cyBlaXRoZXIgLmpzIG9yIG5vbiAuanMgdG8gbWFwCiAgICAgICAgICAgICAgICAvLyB0byBzYW1lIGZpbGUuCiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm5vZGVJZENvbXBhdCAmJiBqc1N1ZmZpeFJlZ0V4cC50ZXN0KG5hbWVbbGFzdEluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lW2xhc3RJbmRleF0gPSBuYW1lW2xhc3RJbmRleF0ucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lCiAgICAgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCiAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwogICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bwogICAgICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yCiAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuam9pbignLycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgogICAgICAgICAgICBpZiAoYXBwbHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1hcCkpIHsKICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKCiAgICAgICAgICAgICAgICBvdXRlckxvb3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lU2VnbWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24gdGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJMb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBmb3IgYSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCwKICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rhck1hcCAmJiBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3VuZFN0YXJNYXApIHsKICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmFtZSBwb2ludHMgdG8gYSBwYWNrYWdlJ3MgbmFtZSwgdXNlCiAgICAgICAgICAgIC8vIHRoZSBwYWNrYWdlIG1haW4gaW5zdGVhZC4KICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbmFtZSk7CgogICAgICAgICAgICByZXR1cm4gcGtnTWFpbiA/IHBrZ01haW4gOiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KG5hbWUpIHsKICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKSA9PT0gbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYXNQYXRoRmFsbGJhY2soaWQpIHsKICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CiAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJyYXkocGF0aENvbmZpZykgJiYgcGF0aENvbmZpZy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvL1BvcCBvZmYgdGhlIGZpcnN0IGFycmF5IHZhbHVlLCBzaW5jZSBpdCBmYWlsZWQsIGFuZAogICAgICAgICAgICAgICAgLy9yZXRyeQogICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOwogICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlLnVuZGVmKGlkKTsKCiAgICAgICAgICAgICAgICAvL0N1c3RvbSByZXF1aXJlIHRoYXQgZG9lcyBub3QgZG8gbWFwIHRyYW5zbGF0aW9uLCBzaW5jZQogICAgICAgICAgICAgICAgLy9JRCBpcyAiYWJzb2x1dGUiLCBhbHJlYWR5IG1hcHBlZC9yZXNvbHZlZC4KICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUobnVsbCwgewogICAgICAgICAgICAgICAgICAgIHNraXBNYXA6IHRydWUKICAgICAgICAgICAgICAgIH0pKFtpZF0pOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL1R1cm5zIGEgcGx1Z2luIXJlc291cmNlIHRvIFtwbHVnaW4sIHJlc291cmNlXQogICAgICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQogICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KICAgICAgICBmdW5jdGlvbiBzcGxpdFByZWZpeChuYW1lKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXgsCiAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVmaXgsIG1vZHVsZQogICAgICAgICAqIG5hbWUsIGFuZCBwYXRoLiBJZiBwYXJlbnRNb2R1bGVNYXAgaXMgcHJvdmlkZWQgaXQgd2lsbAogICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbW9kdWxlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKICAgICAgICAgKiBmb3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc05vcm1hbGl6ZWQ6IGlzIHRoZSBJRCBhbHJlYWR5IG5vcm1hbGl6ZWQuCiAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCiAgICAgICAgICogU2hvdWxkIG9ubHkgYmUgdHJ1ZSBpZiB0aGlzIG1hcCBpcyBmb3IgYSBkZXBlbmRlbmN5LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRzLAogICAgICAgICAgICAgICAgcHJlZml4ID0gbnVsbCwKICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSB0cnVlLAogICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKCiAgICAgICAgICAgIC8vSWYgbm8gbmFtZSwgdGhlbiBpdCBtZWFucyBpdCBpcyBhIHJlcXVpcmUgY2FsbCwgZ2VuZXJhdGUgYW4KICAgICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgogICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOwogICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHNbMV07CgogICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBub3JtYWxpemUocHJlZml4LCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbk1vZHVsZSAmJiBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXN0ZWQgcGx1Z2luIHJlZmVyZW5jZXMsIHRoZW4gZG8gbm90IHRyeSB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFzIGl0IHdpbGwgbm90IG5vcm1hbGl6ZSBjb3JyZWN0bHkuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGxhY2VzIGEgcmVzdHJpY3Rpb24gb24gcmVzb3VyY2VJZHMsIGFuZCB0aGUgbG9uZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm0gc29sdXRpb24gaXMgbm90IHRvIG5vcm1hbGl6ZSB1bnRpbCBwbHVnaW5zIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgYW5kIGFsbCBub3JtYWxpemF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGluZyBvZiBhIGxvYWRlciBwbHVnaW4uIEJ1dCBmb3Igbm93LCBmaXhlcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIHVzZXMuIERldGFpbHMgaW4gIzExMzEKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lLmluZGV4T2YoJyEnKSA9PT0gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgcmVndWxhciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwoKICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZWQgbmFtZSBtYXkgYmUgYSBwbHVnaW4gSUQgZHVlIHRvIG1hcCBjb25maWcKICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QKICAgICAgICAgICAgICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQuCiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKICAgICAgICAgICAgICAgICAgICBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgdGhlIGlkIGlzIGEgcGx1Z2luIGlkIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgaXQgbmVlZHMKICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQogICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUuCiAgICAgICAgICAgIHN1ZmZpeCA9IHByZWZpeCAmJiAhcGx1Z2luTW9kdWxlICYmICFpc05vcm1hbGl6ZWQgPwogICAgICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CiAgICAgICAgICAgICAgICAgICAgICcnOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAogICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsCiAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgsCiAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAogICAgICAgICAgICAgICAgaWQ6IChwcmVmaXggPwogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0TW9kdWxlKGRlcE1hcCkgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1vZDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwgbmFtZSwgZm4pIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoaGFzUHJvcChkZWZpbmVkLCBpZCkgJiYKICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgewogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgIGZuKGRlZmluZWRbaWRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1vZCA9IGdldE1vZHVsZShkZXBNYXApOwogICAgICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIsIGVycmJhY2spIHsKICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRoaXMgY29udGV4dCdzCiAgICAgICAgICogZGVmUXVldWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgewogICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZRdWV1ZSBpdGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgZWFjaChnbG9iYWxEZWZRdWV1ZSwgZnVuY3Rpb24ocXVldWVJdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gcXVldWVJdGVtWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBoYW5kbGVycyA9IHsKICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLnJlcXVpcmUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1vZC5tYXApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2V4cG9ydHMnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5leHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFttb2QubWFwLmlkXSA9IG1vZC5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5leHBvcnRzID0gZGVmaW5lZFttb2QubWFwLmlkXSA9IHt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QubW9kdWxlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtb2QubWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCkgfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1vZC5leHBvcnRzIHx8IChtb2QuZXhwb3J0cyA9IHt9KQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgewogICAgICAgICAgICAvL0NsZWFuIHVwIG1hY2hpbmVyeSB1c2VkIGZvciB3YWl0aW5nIG1vZHVsZXMuCiAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CiAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7CiAgICAgICAgICAgIHZhciBpZCA9IG1vZC5tYXAuaWQ7CgogICAgICAgICAgICBpZiAobW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICBlYWNoKG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7CiAgICAgICAgICAgIHZhciBlcnIsIHVzaW5nUGF0aEZhbGxiYWNrLAogICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwKICAgICAgICAgICAgICAgIC8vSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0U2Vjb25kcyBvZiAwLgogICAgICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCiAgICAgICAgICAgICAgICByZXFDYWxscyA9IFtdLAogICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7CgogICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgogICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgogICAgICAgICAgICBlYWNoUHJvcChlbmFibGVkUmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtb2QubWFwLAogICAgICAgICAgICAgICAgICAgIG1vZElkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNob3VsZCBiZSBleGVjdXRlZCwgYW5kIGl0IGhhcyBub3QKICAgICAgICAgICAgICAgICAgICAvL2JlZW4gaW5pdGVkIGFuZCB0aW1lIGlzIHVwLCByZW1lbWJlciBpdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQYXRoRmFsbGJhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTG9hZHMucHVzaChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW9kLmluaXRlZCAmJiBtb2QuZmV0Y2hlZCAmJiBtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAucHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vIHJlYXNvbiB0byBrZWVwIGxvb2tpbmcgZm9yIHVuZmluaXNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmVjYXVzZSBpdCBtYXkgYmUgdGhhdCBhIHBsdWdpbiByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5Y2xlQ2hlY2sgPSBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGV4cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vSWYgd2FpdCB0aW1lIGV4cGlyZWQsIHRocm93IGVycm9yIG9mIHVubG9hZGVkIG1vZHVsZXMuCiAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CiAgICAgICAgICAgICAgICBlcnIuY29udGV4dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Ob3QgZXhwaXJlZCwgY2hlY2sgZm9yIGEgY3ljbGUuCiAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgewogICAgICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUobW9kLCB7fSwge30pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCiAgICAgICAgICAgIC8vb3RoZXIgdGhhbiBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5kaW5nCiAgICAgICAgICAgIC8vc2NyaXB0cywgdGhlbiBqdXN0IHRyeSBiYWNrIGxhdGVyLgogICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcgdG8gbG9hZC4gV2FpdCBmb3IgaXQsIGJ1dCBvbmx5CiAgICAgICAgICAgICAgICAvL2lmIGEgdGltZW91dCBpcyBub3QgYWxyZWFkeSBpbiBlZmZlY3QuCiAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTW9kdWxlID0gZnVuY3Rpb24gKG1hcCkgewogICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7CiAgICAgICAgICAgIHRoaXMuc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbWFwLmlkKTsKICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWQgPSBbXTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CiAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOwoKICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQogICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXSwKICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkLCB0aGlzLmZldGNoZWQKICAgICAgICAgICAgKi8KICAgICAgICB9OwoKICAgICAgICBNb2R1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENhbiBoYXBwZW4gaWYgdGhlcmUKICAgICAgICAgICAgICAgIC8vYXJlIG11bHRpcGxlIGRlZmluZSBjYWxscyBmb3IgdGhlIHNhbWUgbW9kdWxlLiBUaGF0IGlzIG5vdAogICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ2lzdGVyIGZvciBlcnJvcnMgb24gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG5vIGVycmJhY2sgYWxyZWFkeSwgYnV0IHRoZXJlIGFyZSBlcnJvciBsaXN0ZW5lcnMKICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgogICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKICAgICAgICAgICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3IgZXhhbXBsZQogICAgICAgICAgICAgICAgLy8ic2hpbSIgZGVwcyBhcmUgcGFzc2VkIGluIGhlcmUgZGlyZWN0bHksIGFuZAogICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0IHRoYXQgY29uZmlnLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gZGVwTWFwcyAmJiBkZXBNYXBzLnNsaWNlKDApOwoKICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJhY2s7CgogICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwoKICAgICAgICAgICAgICAgIC8vQ291bGQgaGF2ZSBvcHRpb24gdG8gaW5pdCB0aGlzIG1vZHVsZSBpbiBlbmFibGVkIG1vZGUsCiAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAogICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCiAgICAgICAgICAgICAgICAvL2lmIGVuYWJsZWQgcHJldmlvdXNseSwgbm93IHRyaWdnZXIgZGVwZW5kZW5jaWVzIGFzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgLy9XaWxsIGNhbGwgdGhpcy5jaGVjaygpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxsYmFjayBmb3IgYSBnaXZlbgogICAgICAgICAgICAgICAgLy9leHBvcnQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50IC09IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5mZXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5mZXRjaGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOwoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1hbmFnZXIgaXMgZm9yIGEgcGx1Z2luIG1hbmFnZWQgcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUodGhpcy5tYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8IFtdLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMubWFwLnVybDsKCiAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgIGlmICghdXJsRmV0Y2hlZFt1cmxdKSB7CiAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAogICAgICAgICAgICAgKiBkZWZpbmUgaXQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgdGhpcy5lbmFibGluZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZXJyLCBjanNNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICBkZXBFeHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCBpZiBub3QgYWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGNvbnRleHQuZGVmUXVldWVNYXAsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykgewogICAgICAgICAgICAgICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2FsbAogICAgICAgICAgICAgICAgICAgIC8vdGhhdCB3b3VsZCByZXN1bHQgaW4gY2hlY2tpbmcgdGhpcyBtb2R1bGUgdG8KICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5nIHRoYXQsIHNraXAgdGhpcyB3b3JrLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYgIXRoaXMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmYWN0b3J5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29ubHkgZG8gaXQgZm9yIGRlZmluZSgpJ2QgIG1vZHVsZXMuIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25FcnJvciBpcyBzZXQsIHVzZSB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvciAhPT0gZGVmYXVsdE9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF2b3IgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cy4gSWYgbm9kZS9janMgaW4gcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIEZhdm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBhc3NpZ25tZW50IG92ZXIgZXhwb3J0cyBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgZXhwb3J0cyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzaW5nRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IHRoaXMubWFwLmlzRGVmaW5lID8gW3RoaXMubWFwLmlkXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIGxpdGVyYWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmICF0aGlzLmlnbm9yZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEub25SZXNvdXJjZUxvYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1hcHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNMb2FkTWFwcy5wdXNoKGRlcE1hcC5ub3JtYWxpemVkTWFwIHx8IGRlcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCByZXNMb2FkTWFwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBjYWxsaW5nIGNoZWNrIGFnYWluCiAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBhCiAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCwKICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXgpOwoKICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CgogICAgICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCB0aGlzLm1hcC5pZCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLm1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vSWYgY3VycmVudCBtYXAgaXMgbm90IG5vcm1hbGl6ZWQsIHdhaXQgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBpZiB0aGUgcGx1Z2luIGFsbG93cyBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4ICsgJyEnICsgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5ub3JtYWxpemVkTWFwID0gbm9ybWFsaXplZE1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZCA9IGdldE93bihyZWdpc3RyeSwgbm9ybWFsaXplZE1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0lmIGEgcGF0aHMgY29uZmlnLCB0aGVuIGp1c3QgbG9hZCB0aGF0IGZpbGUgaW5zdGVhZCB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVzb2x2ZSB0aGUgcGx1Z2luLCBhcyBpdCBpcyBidWlsdCBpbnRvIHRoYXQgcGF0aHMgbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnVybCA9IGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRlbXAgdW5ub3JtYWxpemVkIG1vZHVsZXMgZm9yIHRoaXMgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaWQuaW5kZXhPZihpZCArICdfdW5ub3JtYWxpemVkJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQogICAgICAgICAgICAgICAgICAgIC8vY29udGV4dCBvciBob3cgdG8gJ2NvbXBsZXRlJyB0aGUgbG9hZC4KICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byByZWluZm9yY2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zdXBwb3J0IG9sZCBzdHlsZSBvZiBwYXNzaW5nIG1vZHVsZU5hbWUgYnV0IGRpc2NhcmQKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGludGVybmFsIHJlZi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QWx0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb2ZmIGludGVyYWN0aXZlIHNjcmlwdCBtYXRjaGluZyBmb3IgSUUgZm9yIGFueSBkZWZpbmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1ByaW1lIHRoZSBzeXN0ZW0gYnkgY3JlYXRpbmcgYSBtb2R1bGUgaW5zdGFuY2UgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jb25maWdbbW9kdWxlTmFtZV0gPSBjb25maWcuY29uZmlnW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ2Zyb210ZXh0ZXZhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBldmFsIGZvciAnICsgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2luCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3VwcG9ydCBhbm9ueW1vdXMgbW9kdWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIHZhbHVlIG9mIHRoYXQgbW9kdWxlIHRvIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKICAgICAgICAgICAgICAgICAgICAvL2NvdWxkIGJlIHNvbWUgd2VpcmQgc3RyaW5nIHdpdGggbm8gcGF0aCB0aGF0IGFjdHVhbGx5IHdhbnRzIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwc1twbHVnaW5NYXAuaWRdID0gcGx1Z2luTWFwOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBlbmFibGVkUmVnaXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhlIG1vZHVsZSBpcyBlbmFibGluZywKICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAvL2ZvciBkZXBlbmRlbmNpZXMgZG8gbm90IHRyaWdnZXIgaW5hZHZlcnRlbnQgbG9hZAogICAgICAgICAgICAgICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtb2QsIGhhbmRsZXI7CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0RlcGVuZGVuY3kgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgZGVwTWFwCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdpcmVkIHVwIHRvIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXAuaXNEZWZpbmUgPyB0aGlzLm1hcCA6IHRoaXMubWFwLnBhcmVudE1hcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwc1tpXSA9IGRlcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCArPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuZGVmZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIHRoaXMuZXJyYmFjaykpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkaXJlY3QgZXJyYmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpcyBsaXN0ZW5pbmcgZm9yIGVycm9ycywgc28gYmUgc3VyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvciBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOwogICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9kdWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJwogICAgICAgICAgICAgICAgICAgIC8vQWxzbywgZG9uJ3QgY2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAogICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYgbW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShkZXBNYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoUHJvcCh0aGlzLnBsdWdpbk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsKICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIGlmICghY2JzKSB7CiAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNbbmFtZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNicy5wdXNoKGNiKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHsKICAgICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9uIChjYikgewogICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMgYnJva2VuIE1vZHVsZSBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZvciBhIHdoaWxlIGluIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgogICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKGFyZ3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsKICAgICAgICAgICAgLy9GYXZvciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQogICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZlbnQvYWRkRXZlbnRMaXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQogICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCB3aGljaCB3aWxsIGJlCiAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgogICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5vZGUuZGV0YWNoRXZlbnQoaWVOYW1lLCBmdW5jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAogICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgbm9kZS4KICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7CiAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQ7CgogICAgICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOwogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGludGFrZURlZmluZXMoKSB7CiAgICAgICAgICAgIHZhciBhcmdzOwoKICAgICAgICAgICAgLy9BbnkgZGVmaW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCiAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogJyArCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXplZCBieSB0aGUKICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgY29uZmlnOiBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSwKICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAogICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVkLAogICAgICAgICAgICB1cmxGZXRjaGVkOiB1cmxGZXRjaGVkLAogICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCiAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKICAgICAgICAgICAgTW9kdWxlOiBNb2R1bGUsCiAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCiAgICAgICAgICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCiAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogU2V0IGEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb25maWd1cmU6IGZ1bmN0aW9uIChjZmcpIHsKICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybC5jaGFyQXQoY2ZnLmJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgb2xkIHN0eWxlIHVybEFyZ3Mgc3RyaW5nIHRvIGEgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNmZy51cmxBcmdzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHZhciB1cmxBcmdzID0gY2ZnLnVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgY2ZnLnVybEFyZ3MgPSBmdW5jdGlvbihpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJnczsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcsCiAgICAgICAgICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgogICAgICAgICAgICAgICAgdmFyIHNoaW0gPSBjb25maWcuc2hpbSwKICAgICAgICAgICAgICAgICAgICBvYmpzID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9ianNbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhlIGJ1bmRsZXMKICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5idW5kbGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlc01hcFt2XSA9IHByb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQogICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLnNoaW0sIGZ1bmN0aW9uICh2YWx1ZSwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hpbSA9IHNoaW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9BZGp1c3QgcGFja2FnZXMgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiwgbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBwa2dPYmo7CgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGtnT2JqLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1tuYW1lXSA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TYXZlIHBvaW50ZXIgdG8gbWFpbiBtb2R1bGUgSUQgZm9yIHBrZyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWluIHBhdGhzIGFyZSBub3JtYWxpemVkLAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmlsZSBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGtnc1tuYW1lXSA9IHBrZ09iai5uYW1lICsgJy8nICsgKHBrZ09iai5tYWluIHx8ICdtYWluJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAvL3VwZGF0ZSB0aGUgbWFwcyBmb3IgdGhlbSwgc2luY2UgdGhlaXIgaW5mbywgbGlrZSBVUkxzIHRvIGxvYWQsCiAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG1vZHVsZSBhbHJlYWR5IGhhcyBpbml0IGNhbGxlZCwgc2luY2UgaXQgaXMgdG9vCiAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCiAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmICFtb2QubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKICAgICAgICAgICAgICAgIC8vcmVxdWlyZSB3aXRoIHRob3NlIGFyZ3MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmVxdWlyZSBpcyBkZWZpbmVkIGFzIGEKICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlKGNmZy5kZXBzIHx8IFtdLCBjZmcuY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmbjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VSZXF1aXJlOiBmdW5jdGlvbiAocmVsTWFwLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2NhbFJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQnVpbGRDYWxsYmFjayAmJiBjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ludmFsaWQgY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZlYXQ6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBvbmx5IHdvcmtzIHdoaWxlIG1vZHVsZSBpcyBiZWluZyBkZWZpbmVkLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYXZhaWxhYmxlIChhcyBpbiB0aGUgTm9kZSBhZGFwdGVyKSwgcHJlZmVyIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxNYXAsIGxvY2FsUmVxdWlyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVsZSBuYW1lLCBpZiBpdCBjb250YWlucyAuIG9yIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwcywgcmVsTWFwLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQgZm9yIGNvbnRleHQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbE1hcCA/ICcnIDogJy4gVXNlIHJlcXVpcmUoW10pJykpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCiAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU29tZSBkZWZpbmVzIGNvdWxkIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KICAgICAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdG9yZSBpZiBtYXAgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9ucy5za2lwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBtaXhpbihsb2NhbFJlcXVpcmUsIHsKICAgICAgICAgICAgICAgICAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlciwKCiAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSArIC5leHRlbnNpb24gaW50byBhbiBVUkwgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIHBsYWluIFVSTHMgbGlrZSBuYW1lVG9VcmwuCiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtb2R1bGVOYW1lUGx1c0V4dC5sYXN0SW5kZXhPZignLicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQgPT09ICcuLic7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBleHQsICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIGlkKSB8fCBoYXNQcm9wKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCiAgICAgICAgICAgICAgICBpZiAoIXJlbE1hcCkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZS51bmRlZiA9IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZpeCBmb3IgIzQwOAogICAgICAgICAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIHRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBtb2QudW5kZWZlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cmxGZXRjaGVkW21hcC51cmxdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiBxdWV1ZWQgZGVmaW5lcyB0b28uIEdvIGJhY2t3YXJkcwogICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWVzcyB1cCB0aGUgaXRlcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUmV2ZXJzZShkZWZRdWV1ZSwgZnVuY3Rpb24oYXJncywgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gYmUgcmVsb2FkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmRXZlbnRzW2lkXSA9IG1vZC5ldmVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGVkIHRvIGVuYWJsZSBhIG1vZHVsZSBpZiBpdCBpcyBzdGlsbCBpbiB0aGUgcmVnaXN0cnkKICAgICAgICAgICAgICogYXdhaXRpbmcgZW5hYmxlbWVudC4gQSBzZWNvbmQgYXJnLCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAogICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieQogICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qgc2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCiAgICAgICAgICAgICAqIEEgbG9hZCBldmVudCBjb3VsZCBiZSBhIHNjcmlwdCBsb2FkIG9yIGp1c3QgYSBsb2FkIHBhc3MgZnJvbSBhIHN5bmNocm9ub3VzCiAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAogICAgICAgICAgICAgICAgICAgIHNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1vZHVsZU5hbWUpIHx8IHt9LAogICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKCiAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYWxyZWFkeSBmb3VuZCBhbiBhbm9ueW1vdXMgbW9kdWxlIGFuZCBib3VuZCBpdAogICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIHRoaXMgYWZ0ZXIgdGhlIGN5Y2xlIG9mIGNhbGxHZXRNb2R1bGUgaW4gY2FzZSB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub2RlZmluZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9BIHNjcmlwdCB0aGF0IGRvZXMgbm90IGNhbGwgZGVmaW5lKCksIHNvIGp1c3Qgc2ltdWxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCiAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgogICAgICAgICAgICAgKiBOb3RlIHRoYXQgaXQgKipkb2VzIG5vdCoqIGNhbGwgbm9ybWFsaXplIG9uIHRoZSBtb2R1bGVOYW1lLAogICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CiAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAogICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGgsIGJ1bmRsZUlkLAogICAgICAgICAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChwa2dNYWluKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBrZ01haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkLCBleHQsIHNraXBFeHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgYSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMgYSBwcm90b2NvbCBpcyB1c2VkIGFuZCBpdCBpcyBqdXN0CiAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCiAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMsIHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4KICAgICAgICAgICAgICAgIC8vVGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wtbGVzcyBVUkxzIGFzIHdlbGwgYXMgZnVsbCBwYXRocy4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0LgogICAgICAgICAgICAgICAgICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRlZC4gVGhpcyBpcyBhIGJpdCB3b25reSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCiAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0IHx8ICcnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7CgogICAgICAgICAgICAgICAgICAgIHN5bXMgPSBtb2R1bGVOYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKICAgICAgICAgICAgICAgICAgICAvL2FuZCB3b3JrIHVwIGZyb20gaXQuCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbiBhcnJheSwgaXQgbWVhbnMgdGhlcmUgYXJlIGEgZmV3IGNob2ljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gcGFyZW50UGF0aFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSm9pbiB0aGUgcGF0aCBwYXJ0cyB0b2dldGhlciwgdGhlbiBmaWd1cmUgb3V0IGlmIGJhc2VVcmwgaXMgbmVlZGVkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwogICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDogJy5qcycpKTsKICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVybCkgKyB1cmw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdzICYmICEvXmJsb2JcOi8udGVzdCh1cmwpID8KICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJncyhtb2R1bGVOYW1lLCB1cmwpIDogdXJsOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bwogICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4KICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxiYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAogICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgYXJncywgZXhwb3J0cykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIGNhbGxiYWNrIGZvciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAogICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2FkZWQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19AcicpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBNYXAuaWQgPT09IGRhdGEuaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdzY3JpcHRlcnJvcicsICdTY3JpcHQgZXJyb3IgZm9yICInICsgZGF0YS5pZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciLCBuZWVkZWQgYnk6ICcgKyBwYXJlbnRzLmpvaW4oJywgJykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIicpLCBldnQsIFtkYXRhLmlkXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOwogICAgICAgIHJldHVybiBjb250ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogTWFpbiBlbnRyeSBwb2ludC4KICAgICAqCiAgICAgKiBJZiB0aGUgb25seSBhcmd1bWVudCB0byByZXF1aXJlIGlzIGEgc3RyaW5nLCB0aGVuIHRoZSBtb2R1bGUgdGhhdAogICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGVuIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBhcnJheQogICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgogICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCiAgICAgKgogICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAogICAgICogbmFtZSBmb3IgbWluaWZpY2F0aW9uL2xvY2FsIHNjb3BlIHVzZS4KICAgICAqLwogICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgewoKICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CiAgICAgICAgdmFyIGNvbnRleHQsIGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBkZWZDb250ZXh0TmFtZTsKCiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykgJiYgdHlwZW9mIGRlcHMgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0CiAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJiYWNrOwogICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CiAgICAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcpIHsKICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spOwogICAgfTsKCiAgICAvKioKICAgICAqIFN1cHBvcnQgcmVxdWlyZS5jb25maWcoKSB0byBtYWtlIGl0IGVhc2llciB0byBjb29wZXJhdGUgd2l0aCBvdGhlcgogICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgogICAgICovCiAgICByZXEuY29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykgewogICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNrCiAgICAgKiBvZiB0aGUgZXZlbnQgbG9vcC4gT3ZlcnJpZGUgZm9yIG90aGVyIGVudnMKICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KICAgICAqLwogICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CiAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CiAgICB9IDogZnVuY3Rpb24gKGZuKSB7IGZuKCk7IH07CgogICAgLyoqCiAgICAgKiBFeHBvcnQgcmVxdWlyZSBhcyBhIGdsb2JhbCwgYnV0IG9ubHkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAqLwogICAgaWYgKCFyZXF1aXJlKSB7CiAgICAgICAgcmVxdWlyZSA9IHJlcTsKICAgIH0KCiAgICByZXEudmVyc2lvbiA9IHZlcnNpb247CgogICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCiAgICByZXEuanNFeHRSZWdFeHAgPSAvXlwvfDp8XD98XC5qcyQvOwogICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKICAgIHMgPSByZXEucyA9IHsKICAgICAgICBjb250ZXh0czogY29udGV4dHMsCiAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAogICAgfTsKCiAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCiAgICByZXEoe30pOwoKICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCiAgICBlYWNoKFsKICAgICAgICAndG9VcmwnLAogICAgICAgICd1bmRlZicsCiAgICAgICAgJ2RlZmluZWQnLAogICAgICAgICdzcGVjaWZpZWQnCiAgICBdLCBmdW5jdGlvbiAocHJvcCkgewogICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKICAgICAgICAvL3NvIHRoYXQgZHVyaW5nIGJ1aWxkcywgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBjb250ZXh0CiAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgogICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IGNvbnRleHRzW2RlZkNvbnRleHROYW1lXTsKICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfSk7CgogICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgIGhlYWQgPSBzLmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwogICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCiAgICAgICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1ZXJ5IGJ1ZzoKICAgICAgICAvL2h0dHA6Ly9kZXYuanF1ZXJ5LmNvbS90aWNrZXQvMjcwOQogICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGJhc2VFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcwogICAgICogZnVuY3Rpb24uIEludGVyY2VwdC9vdmVycmlkZSBpdCBpZiB5b3Ugd2FudCBjdXN0b20gZXJyb3IgaGFuZGxpbmcuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KICAgICAqLwogICAgcmVxLm9uRXJyb3IgPSBkZWZhdWx0T25FcnJvcjsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIG5vZGUgZm9yIHRoZSBsb2FkIGNvbW1hbmQuIE9ubHkgdXNlZCBpbiBicm93c2VyIGVudnMuCiAgICAgKi8KICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIG5vZGUgPSBjb25maWcueGh0bWwgPwogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgbm9kZS50eXBlID0gY29uZmlnLnNjcmlwdFR5cGUgfHwgJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKICAgICAgICBub2RlLmFzeW5jID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCiAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBlbnZpcm9ubWVudHMKICAgICAqIHRvIG92ZXJyaWRlIGl0LgogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KICAgICAqLwogICAgcmVxLmxvYWQgPSBmdW5jdGlvbiAoY29udGV4dCwgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwogICAgICAgICAgICBub2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwoKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKICAgICAgICAgICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBmaXJpbmdzCiAgICAgICAgICAgIC8vdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGFsbCBvdGhlciBicm93c2VycyB3aXRoCiAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKICAgICAgICAgICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKICAgICAgICAgICAgLy9odHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzY0ODA1Ny9zY3JpcHQtb25sb2FkLWV2ZW50LWlzLW5vdC1maXJlZC1pbW1lZGlhdGVseS1hZnRlci1zY3JpcHQtZXhlY3V0aW9uCiAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAogICAgICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNoRXZlbnQgJiYKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKICAgICAgICAgICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCiAgICAgICAgICAgICAgICAgICAgLy9yZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8xODcKICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgICAgICAgIC8vaW4gSUU4LCBub2RlLmF0dGFjaEV2ZW50IGRvZXMgbm90IGhhdmUgdG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6CiAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMjczCiAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCiAgICAgICAgICAgICAgICAgICAgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJlCiAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCiAgICAgICAgICAgICAgICAvL3dlIGNhbm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCiAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElFIHJlcG9ydHMgdGhlIHNjcmlwdCBhcyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCiAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgogICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAogICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2ZXIsIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aWxsIGZpcmUgYmVmb3JlCiAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJRSB3aWxsIGZpcmUgZXJyb3IgYmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCiAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3JpcHQgbG9hZCBldmVudCBsaXN0ZW5lciBiZWZvcmUgZXhlY3V0ZQogICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4KICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCiAgICAgICAgICAgICAgICAvL2FuZCB0aGVuIGRlc3Ryb3lzIGFsbCBpbnN0YWxscyBvZiBJRSA2LTkuCiAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29udGV4dC5vblNjcmlwdExvYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKCiAgICAgICAgICAgIC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlIGhhdmUgYmVlbgogICAgICAgICAgICAvL3NldCwgYnV0IGJlZm9yZSBpdCBpcyBwbGFjZWQgaW4gdGhlIERPTS4KICAgICAgICAgICAgaWYgKGNvbmZpZy5vbk5vZGVDcmVhdGVkKSB7CiAgICAgICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCiAgICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlvbiwgc28gdG8gdGllIGFuIGFub255bW91cyBkZWZpbmUKICAgICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgogICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBub2RlOwogICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VFbGVtZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CiAgICAgICAgICAgICAgICAvL2VmZmljaWVudCB1c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2NrIHVudGlsCiAgICAgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVhdGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycwogICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25lIHNvCiAgICAgICAgICAgICAgICAvL3RoYXQgb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMgbWF5IG5lZWQKICAgICAgICAgICAgICAgIC8vdG8gYmUgcmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNhc2VzIGJlY29tZSBjb21tb24uCgogICAgICAgICAgICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGV2ZW50IGxvb3AgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2ViS2l0CiAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMgZ2FyYmFnZS1jb2xsZWN0ZWQgYWZ0ZXIgY2FsbGluZwogICAgICAgICAgICAgICAgLy8gaW1wb3J0U2NyaXB0cygpOiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTMzMTcKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgMCk7CiAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CgogICAgICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihtYWtlRXJyb3IoJ2ltcG9ydHNjcmlwdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKSB7CiAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgICAgIH0KCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICB9CgogICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KICAgIGlmIChpc0Jyb3dzZXIgJiYgIWNmZy5za2lwRGF0YU1haW4pIHsKICAgICAgICAvL0ZpZ3VyZSBvdXQgYmFzZVVybC4gR2V0IGl0IGZyb20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0LgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKICAgICAgICAgICAgLy91c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgogICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgIGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQogICAgICAgICAgICAvL3RvIGxvYWQuIElmIGl0IGlzIHRoZXJlLCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYWluJyk7CiAgICAgICAgICAgIGlmIChkYXRhTWFpbikgewogICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CgogICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCiAgICAgICAgICAgICAgICAvL2J1dCBvbmx5IGRvIHNvIGlmIHRoZSBkYXRhLW1haW4gdmFsdWUgaXMgbm90IGEgbG9hZGVyIHBsdWdpbgogICAgICAgICAgICAgICAgLy9tb2R1bGUgSUQuCiAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9yIHVzZSBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2Jhc2VVcmwuCiAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IHNyYy5sZW5ndGggPyBzcmMuam9pbignLycpICArICcvJyA6ICcuLyc7CgogICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3JpcHQgaXMgbm93CiAgICAgICAgICAgICAgICAvL2xpa2UgYSBtb2R1bGUgbmFtZS4KICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKCiAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkgewogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4KICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcuZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCiAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAogICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAogICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRoZSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncwogICAgICogbmFtZS4KICAgICAqLwogICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7CgogICAgICAgIC8vQWxsb3cgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbmFtZTsKICAgICAgICAgICAgbmFtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBhCiAgICAgICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVuY2llcy4KICAgICAgICBpZiAoIWRlcHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICAvL1JlbW92ZSBjb21tZW50cyBmcm9tIHRoZSBjYWxsYmFjayBzdHJpbmcsCiAgICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCiAgICAgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UmVnRXhwLCBjb21tZW50UmVwbGFjZSkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKICAgICAgICAgICAgICAgIC8vY291bGQgdXNlIGV4cG9ydHMsIGFuZCBtb2R1bGUuIEF2b2lkIGRvaW5nIGV4cG9ydHMgYW5kIG1vZHVsZQogICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUuCiAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKICAgICAgICAgICAgICAgIC8vb3JkZXIgbGlzdGVkIGJlbG93LgogICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBbJ3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVwcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQogICAgICAgIC8vd29yay4KICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOwogICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KICAgICAgICAvL1RoaXMgYWxsb3dzIG11bHRpcGxlIG1vZHVsZXMgdG8gYmUgaW4gYSBmaWxlIHdpdGhvdXQgcHJlbWF0dXJlbHkKICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZvciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCiAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CiAgICAgICAgLy9vY2N1cnMuIElmIG5vIGNvbnRleHQsIHVzZSB0aGUgZ2xvYmFsIHF1ZXVlLCBhbmQgZ2V0IGl0IHByb2Nlc3NlZAogICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCiAgICAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW25hbWVdID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgIH0KICAgIH07CgogICAgZGVmaW5lLmFtZCA9IHsKICAgICAgICBqUXVlcnk6IHRydWUKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyB0aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1lbnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwogICAgICogbG9hZGVyIHBsdWdpbnMsIG5vdCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZhbHVhdGUuCiAgICAgKi8KICAgIHJlcS5leGVjID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7CiAgICB9OwoKICAgIC8vU2V0IHVwIHdpdGggY29uZmlnIGluZm8uCiAgICByZXEoY2ZnKTsKfSh0aGlzLCAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogc2V0VGltZW91dCkpKTsKCg==", + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + } + } + }, + "executionInfo": { + "elapsed": 6821, + "status": "ok", + "timestamp": 1695200600705, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "uXrjvSYXtqwO", + "outputId": "71d9eb10-985a-4c01-df99-a75e0e0cc656" + }, + "outputs": [], + "source": [ + "%load_ext tensorboard\n", + "%tensorboard --logdir logs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 12, + "status": "ok", + "timestamp": 1695296793570, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "BlVJ4lGccok6", + "outputId": "9c8d4618-8011-4a1f-90b1-68b767ceb0d0" + }, + "outputs": [], + "source": [ + "if torch.cuda.is_available():\n", + " device = torch.device('cuda')\n", + "elif hasattr(torch.backends, 'mps') and torch.backends.mps.is_available():\n", + " # MPS is currently slower than CPU due to missing int64 min/max ops\n", + " device = torch.device('cpu')\n", + "else:\n", + " device = torch.device('cpu')\n", + "\n", + "print(device)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 1161, + "status": "ok", + "timestamp": 1695296794721, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "m1P1_BmBcpkT", + "outputId": "30cc328b-ea3f-4084-abac-d41619e6cb49" + }, + "outputs": [], + "source": [ + "init_wandb(name=f'GIN-{args.dataset}', batch_size=args.batch_size, lr=args.lr,\n", + " epochs=args.epochs, hidden_channels=args.hidden_channels,\n", + " num_layers=args.num_layers, device=device)\n", + "\n", + "path = osp.join(osp.dirname(osp.realpath( \"__file__\")), '..', 'data', 'TU')\n", + "dataset = TUDataset(path, name=args.dataset).shuffle()\n", + "\n", + "train_dataset = dataset[len(dataset) // 10:]\n", + "train_loader = DataLoader(train_dataset, args.batch_size, shuffle=True)\n", + "\n", + "test_dataset = dataset[:len(dataset) // 10]\n", + "test_loader = DataLoader(test_dataset, args.batch_size)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 7, + "status": "ok", + "timestamp": 1695296794721, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "0EgN4Ta6jUV8", + "outputId": "3e07f34b-25e2-4683-97c1-e4b2f2bb10bf" + }, + "outputs": [], + "source": [ + "dataset.num_classes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 4, + "status": "ok", + "timestamp": 1695206338471, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "WPFyTI1zdRqb" + }, + "outputs": [], + "source": [ + "class Net(torch.nn.Module):\n", + " def __init__(self, in_channels, hidden_channels, out_channels, num_layers):\n", + " super().__init__()\n", + "\n", + " self.convs = torch.nn.ModuleList()\n", + " for _ in range(num_layers):\n", + " mlp = MLP([in_channels, hidden_channels, hidden_channels])\n", + " self.convs.append(GINConv(nn=mlp, train_eps=False))\n", + " in_channels = hidden_channels\n", + "\n", + " self.mlp = MLP([hidden_channels, hidden_channels, out_channels],\n", + " norm=None, dropout=0.5)\n", + "\n", + " def forward(self, x, edge_index, batch):\n", + " for conv in self.convs:\n", + " x = conv(x, edge_index).relu()\n", + " x = global_add_pool(x, batch)\n", + " return self.mlp(x)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 437, + "status": "ok", + "timestamp": 1695206343793, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "sW1VRcm_dWsk" + }, + "outputs": [], + "source": [ + "model = Net(dataset.num_features, args.hidden_channels, dataset.num_classes,\n", + " args.num_layers).to(device)\n", + "#optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)\n", + "optimizer = torch.optim.SGD(model.parameters(), lr=args.lr,momentum=args.momentum)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 1, + "status": "ok", + "timestamp": 1695206344211, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "G3ghLRrGdynw" + }, + "outputs": [], + "source": [ + "def train(model, loader):\n", + " model.train()\n", + "\n", + " total_loss = 0\n", + " for data in train_loader:\n", + " data = data.to(device)\n", + " optimizer.zero_grad()\n", + " out = model(data.x, data.edge_index, data.batch)\n", + " loss = F.cross_entropy(out, data.y)\n", + " loss.backward()\n", + " optimizer.step()\n", + " total_loss += float(loss) * data.num_graphs\n", + " return total_loss / len(train_loader.dataset)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NgSQuSDdZjyu" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1695206345756, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "TNtiySFiZevA" + }, + "outputs": [], + "source": [ + "@torch.no_grad()\n", + "def test(model, loader):\n", + " model.eval()\n", + "\n", + " total_correct = 0\n", + " for data in loader:\n", + " data = data.to(device)\n", + " pred = model(data.x, data.edge_index, data.batch).argmax(dim=-1)\n", + " total_correct += int((pred == data.y).sum())\n", + " accuracy = total_correct / len(loader.dataset)\n", + " # print(\"Accuracy on the passed data is: \", accuracy)\n", + " return accuracy\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 10798, + "status": "ok", + "timestamp": 1695206357361, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "SNAyXlb-d1qP", + "outputId": "46719e4d-4c5e-4988-d23d-6936379ba069" + }, + "outputs": [], + "source": [ + "identity = \"Original\"\n", + "for epoch in range(1, args.epochs + 1):\n", + " loss = train(model, train_loader)\n", + " train_acc = test(model, train_loader)\n", + " test_acc = test(model, test_loader)\n", + " write_metric(identity, \"train\", \"loss\", loss, epoch)\n", + " write_metric(identity, \"train\", \"accuracy\", train_acc, epoch)\n", + " write_metric(identity, \"test\", \"accuracy\", test_acc, epoch)\n", + " log(Epoch=epoch, Loss=loss, Train=train_acc, Test=test_acc)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "qBgYFzY0tKqm" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "U_GMUXIwZfQc" + }, + "source": [ + "## OpenFL" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 304, + "status": "ok", + "timestamp": 1695206400795, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "6VORCce2k7ZV", + "outputId": "e52a9df7-46a1-41e7-f3f4-a81f60677a95" + }, + "outputs": [], + "source": [ + "log_interval = 100\n", + "BS = args.batch_size\n", + "unique_id_openfl = random.randint(10,200000)\n", + "# tensorboard\n", + "# from torch.utils.tensorboard import SummaryWriter\n", + "writer = SummaryWriter('./logs/pyg_and_openFL_reusing_PYG_Example_OPENFL_{}_BS{}'.format(unique_id_openfl, BS), flush_secs=5)\n", + "print(unique_id_openfl)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 284, + "status": "ok", + "timestamp": 1695206402022, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "vvGFb1HFZhQY" + }, + "outputs": [], + "source": [ + "#openFL imports\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 513, + "status": "ok", + "timestamp": 1695206403638, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "H5WukI0Yjjng" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import random\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "from copy import deepcopy" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 335, + "status": "ok", + "timestamp": 1695206404820, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "NpIyNFalim_X" + }, + "outputs": [], + "source": [ + "# OpenFL: Averaging all parameter vectors\n", + "def FedAvg(models): \n", + " new_model = models[0]\n", + " state_dict_keys = new_model.state_dict().keys()\n", + " model_dict_list = [mdl.state_dict() for mdl in models]\n", + " state_dict = new_model.state_dict()\n", + " num_models = len(models)\n", + " for key in state_dict_keys:\n", + " state_dict[key] = torch.sum(\n", + " torch.stack(\n", + " [mdldict[key]/num_models for mdldict in model_dict_list]), dim=0)\n", + " new_model.load_state_dict(state_dict)\n", + " return new_model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 374, + "status": "ok", + "timestamp": 1695206409587, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "R8uDtwZvexOA", + "outputId": "8f566d57-ade0-427d-8182-0f4dcd4d9bc9" + }, + "outputs": [], + "source": [ + "#OpenFL: definition of compute flow\n", + "class FederatedFlow(FLSpec):\n", + " def __init__(self, model = None, optimizer = None, rounds=3, **kwargs):\n", + " super().__init__(**kwargs)\n", + " if model is not None:\n", + " self.model = model\n", + " self.optimizer = optimizer #optimizer(params=self.model.parameters()) #\n", + " else:\n", + " raise Exception(\"Sorry, model must be defined\")\n", + " self.rounds = rounds\n", + " self.aggr_training_value_list = []\n", + "\n", + " @aggregator\n", + " def start(self):\n", + " print(f'Performing initialization for model')\n", + " self.collaborators = self.runtime.collaborators\n", + " self.private = 10\n", + " self.current_round = 0\n", + " self.next(self.aggregated_model_validation,foreach='collaborators',exclude=['private'])\n", + "\n", + " @collaborator\n", + " def aggregated_model_validation(self):\n", + " print(f'########################## Performing aggregated model validation for collaborator {self.input}')\n", + " self.agg_validation_score = test(self.model, self.test_loader)\n", + " self.next(self.train)\n", + "\n", + " @collaborator\n", + " def train(self):\n", + " self.model.train()\n", + " self.optimizer = torch.optim.Adam(self.model.parameters(), lr=args.lr)\n", + " self.optimizer = torch.optim.SGD(self.model.parameters(), lr=args.lr, momentum=args.momentum)\n", + " # NOTE: it seems that we need to define here the opt fot it to be able to act on collaborator parameters\n", + " total_loss = 0\n", + " # print(\"Collaborator self.model params example BEFORE a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n", + " ll = len(self.train_loader)\n", + " for batch_idx, data in enumerate(self.train_loader):\n", + " data = data.to(device)\n", + " self.optimizer.zero_grad()\n", + " out = self.model(data.x, data.edge_index, data.batch)\n", + " loss = F.cross_entropy(out, data.y)\n", + " loss.backward()\n", + " self.optimizer.step()\n", + " total_loss += loss.item() * data.num_graphs\n", + " self.loss = loss.item()\n", + " # print(\"Collaborator self.model params example AFTER a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n", + " write_metric(self.input, \"train\", \"loss\", loss.item(), self.current_round)\n", + " self.training_completed = True\n", + " self.next(self.local_model_validation)\n", + "\n", + " @collaborator\n", + " def local_model_validation(self):\n", + " self.local_validation_score = test(self.model, self.test_loader)\n", + " write_metric(self.input, \"test\", \"accuracy\", self.local_validation_score, self.current_round)\n", + " self.next(self.join, exclude=['training_completed'])\n", + "\n", + " @aggregator\n", + " def join(self, inputs):\n", + " print(f'############## AGGREGATOR NOW: time to join!! for Epoch {self.current_round}')\n", + " self.average_loss = sum(input.loss for input in inputs)/len(inputs)\n", + " self.aggr_training_value_list.append(self.average_loss)\n", + " self.aggregated_model_accuracy = sum(input.agg_validation_score for input in inputs)/len(inputs)\n", + " self.local_model_accuracy = sum(input.local_validation_score for input in inputs)/len(inputs)\n", + " print(f'Average aggregated model validation values = {self.aggregated_model_accuracy}')\n", + " print(f'Average training loss = {self.average_loss}')\n", + " print(f'Average local model validation values = {self.local_model_accuracy}')\n", + "\n", + " self.model = FedAvg([input.model for input in inputs])\n", + " self.optimizer = [input.optimizer for input in inputs][0]\n", + "\n", + " write_metric(\"Aggregator\", \"train\", \"avg_loss\", self.average_loss, self.current_round)\n", + " write_metric(\"Aggregator\", \"test\", \"accuracy\", self.aggregated_model_accuracy, self.current_round)\n", + " print(\"Wrote TensorBoard information for Aggregator \")\n", + "\n", + " self.current_round += 1\n", + " if self.current_round < self.rounds:\n", + " self.next(self.aggregated_model_validation, foreach='collaborators', exclude=['private'])\n", + " else:\n", + " self.next(self.end)\n", + "\n", + " @aggregator\n", + " def end(self):\n", + " print(\"List of averaged training losses :\\n\", self.aggr_training_value_list)\n", + " print(f'This is the end of the flow')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 295, + "status": "ok", + "timestamp": 1695206414815, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "38RpwbrrkP8s" + }, + "outputs": [], + "source": [ + "# for the data we have already these object from the stand alone part:\n", + "# train_dataset = dataset[len(dataset) // 10:]\n", + "# train_loader = DataLoader(train_dataset, args.batch_size, shuffle=True)\n", + "\n", + "# test_dataset = dataset[:len(dataset) // 10]\n", + "# test_loader = DataLoader(test_dataset, args.batch_size)\n", + "\n", + "#also we can reuse the model definition, instantiating a new object (model) that will be trained\n", + "model_OpenFL = Net(dataset.num_features, args.hidden_channels, dataset.num_classes,\n", + " args.num_layers)\n", + "model = model_OpenFL.to(device)\n", + "\n", + "#optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)\n", + "optimizer = torch.optim.SGD(model.parameters(), lr=args.lr,momentum=args.momentum)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 297, + "status": "ok", + "timestamp": 1695206416814, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "HVwS7gMZjaag", + "outputId": "a002f21d-7fb3-4296-a889-075922325829" + }, + "outputs": [], + "source": [ + "# Setup participants\n", + "aggregator = Aggregator()\n", + "aggregator.private_attributes = {}\n", + "\n", + "# Setup collaborators with private attributes\n", + "collaborator_names = ['Coll_1', 'Coll_2']\n", + "collaborators = [Collaborator(name=name) for name in collaborator_names]\n", + "\n", + "for idx, collaborator in enumerate(collaborators):\n", + " local_train = deepcopy(train_dataset)\n", + " local_test = deepcopy(test_dataset)\n", + " test_l = len(local_test)\n", + " train_l = len(local_train)\n", + " local_train = train_dataset[idx*train_l//2: (idx+1)*train_l//2] # this is ok only for 2 collaborators....\n", + " local_test = test_dataset[idx*test_l//2: (idx+1)*test_l//2]\n", + " collaborator.private_attributes = {\n", + " 'train_loader': DataLoader(local_train, batch_size=BS, shuffle=True),\n", + " 'test_loader': DataLoader(local_test, batch_size=BS)\n", + " }\n", + "\n", + "local_runtime = LocalRuntime(aggregator=aggregator, collaborators=collaborators, backend='single_process')\n", + "print(f'Local runtime collaborators = {local_runtime.collaborators}')\n", + "\n", + "best_model = None\n", + "optimizer = None\n", + "flflow = FederatedFlow(model, optimizer, rounds=args.epochs)\n", + "flflow.runtime = local_runtime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 656029, + "status": "ok", + "timestamp": 1695207079112, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "Ff7vW6EcklM2", + "outputId": "ec583adb-37e5-4aa9-8d46-ce3f0f455bbe" + }, + "outputs": [], + "source": [ + "print(\"NOW CALLING .run -----------------------------------------------------------------------------------------------------\")\n", + "flflow.run()\n", + "print(\".run has finished-----------------------------------------------------------------------------------------------------\")\n", + "\n", + "print(f'\\nFinal aggregated model accuracy for {flflow.rounds} rounds of training: {flflow.aggregated_model_accuracy}')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "E3Xl1PxxkxK-" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "authorship_tag": "ABX9TyNjf2YgchOtBqsa1N9JW3vB", + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "openfl_env", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.8.20" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/openfl-tutorials/experimental/PyG_support/openFL_PyG_on_HIV_model.ipynb b/openfl-tutorials/experimental/workflow/PyG_support/openFL_PyG_on_HIV_model.ipynb similarity index 87% rename from openfl-tutorials/experimental/PyG_support/openFL_PyG_on_HIV_model.ipynb rename to openfl-tutorials/experimental/workflow/PyG_support/openFL_PyG_on_HIV_model.ipynb index 1346d017ce..d1140ab608 100644 --- a/openfl-tutorials/experimental/PyG_support/openFL_PyG_on_HIV_model.ipynb +++ b/openfl-tutorials/experimental/workflow/PyG_support/openFL_PyG_on_HIV_model.ipynb @@ -1 +1,1405 @@ -{"cells":[{"cell_type":"code","execution_count":49,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2486,"status":"ok","timestamp":1695283908103,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"XCdkfSUzgZlp","outputId":"bc1b164b-6936-4bb2-cea2-e88cb1ea365f"},"outputs":[{"name":"stdout","output_type":"stream","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')"]},{"cell_type":"markdown","metadata":{"id":"Ejy9Lzq5n0Ho"},"source":["#OpenFL & PyG on HIV dataset"]},{"cell_type":"markdown","metadata":{"id":"1ZZU_mAtgRIL"},"source":[]},{"cell_type":"code","execution_count":3,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"elapsed":33027,"status":"ok","timestamp":1695281467810,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"K8_d3Z6jgjZf","outputId":"28458b27-879b-449b-9ab2-40c60c08825a"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting git+https://github.com/securefederatedai/openfl.git\n"," Cloning https://github.com/securefederatedai/openfl.git to /tmp/pip-req-build-uyziz2ou\n"," Running command git clone --filter=blob:none --quiet https://github.com/securefederatedai/openfl.git /tmp/pip-req-build-uyziz2ou\n"," Resolved https://github.com/securefederatedai/openfl.git to commit 3bd32d183beee7afd677504e6feb00bf7cb3ccf3\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Collecting Click==8.0.1 (from openfl==1.5)\n"," Downloading click-8.0.1-py3-none-any.whl (97 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m97.4/97.4 kB\u001b[0m \u001b[31m2.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: PyYAML>=5.4.1 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (6.0.1)\n","Requirement already satisfied: cloudpickle in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (2.2.1)\n","Requirement already satisfied: cryptography>=3.4.6 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (41.0.3)\n","Collecting docker (from openfl==1.5)\n"," Downloading docker-6.1.3-py3-none-any.whl (148 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m148.1/148.1 kB\u001b[0m \u001b[31m9.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting dynaconf==3.1.7 (from openfl==1.5)\n"," Downloading dynaconf-3.1.7-py2.py3-none-any.whl (200 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m200.6/200.6 kB\u001b[0m \u001b[31m16.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting flatten_json (from openfl==1.5)\n"," Downloading flatten_json-0.1.13.tar.gz (11 kB)\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Requirement already satisfied: grpcio>=1.56.2 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.57.0)\n","Requirement already satisfied: ipykernel in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (5.5.6)\n","Collecting jupyterlab (from openfl==1.5)\n"," Downloading jupyterlab-4.0.6-py3-none-any.whl (9.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m9.2/9.2 MB\u001b[0m \u001b[31m58.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.23.5)\n","Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.5.3)\n","Requirement already satisfied: protobuf>=3.20.3 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (3.20.3)\n","Requirement already satisfied: pyzmq<=24.0.1 in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (23.2.1)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (2.31.0)\n","Requirement already satisfied: rich in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (13.5.2)\n","Requirement already satisfied: scikit-learn in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (1.2.2)\n","Requirement already satisfied: tensorboard in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (2.12.0)\n","Collecting tensorboardX<=2.6 (from openfl==1.5)\n"," Downloading tensorboardX-2.6-py2.py3-none-any.whl (114 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.5/114.5 kB\u001b[0m \u001b[31m12.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from openfl==1.5) (4.66.1)\n","Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.10/dist-packages (from cryptography>=3.4.6->openfl==1.5) (1.15.1)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from tensorboardX<=2.6->openfl==1.5) (23.1)\n","Requirement already satisfied: urllib3>=1.26.0 in /usr/local/lib/python3.10/dist-packages (from docker->openfl==1.5) (2.0.4)\n","Requirement already satisfied: websocket-client>=0.32.0 in /usr/local/lib/python3.10/dist-packages (from docker->openfl==1.5) (1.6.2)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->openfl==1.5) (3.2.0)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->openfl==1.5) (3.4)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->openfl==1.5) (2023.7.22)\n","Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from flatten_json->openfl==1.5) (1.16.0)\n","Requirement already satisfied: ipython-genutils in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (0.2.0)\n","Requirement already satisfied: ipython>=5.0.0 in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (7.34.0)\n","Requirement already satisfied: traitlets>=4.1.0 in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (5.7.1)\n","Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (6.1.12)\n","Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel->openfl==1.5) (6.3.2)\n","Collecting async-lru>=1.0.0 (from jupyterlab->openfl==1.5)\n"," Downloading async_lru-2.0.4-py3-none-any.whl (6.1 kB)\n","Requirement already satisfied: jinja2>=3.0.3 in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (3.1.2)\n","Requirement already satisfied: jupyter-core in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (5.3.1)\n","Collecting jupyter-lsp>=2.0.0 (from jupyterlab->openfl==1.5)\n"," Downloading jupyter_lsp-2.2.0-py3-none-any.whl (65 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.0/66.0 kB\u001b[0m \u001b[31m7.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jupyter-server<3,>=2.4.0 (from jupyterlab->openfl==1.5)\n"," Downloading jupyter_server-2.7.3-py3-none-any.whl (375 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m375.6/375.6 kB\u001b[0m \u001b[31m30.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jupyterlab-server<3,>=2.19.0 (from jupyterlab->openfl==1.5)\n"," Downloading jupyterlab_server-2.25.0-py3-none-any.whl (57 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.2/57.2 kB\u001b[0m \u001b[31m6.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: notebook-shim>=0.2 in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (0.2.3)\n","Requirement already satisfied: tomli in /usr/local/lib/python3.10/dist-packages (from jupyterlab->openfl==1.5) (2.0.1)\n","Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->openfl==1.5) (2.8.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->openfl==1.5) (2023.3.post1)\n","Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich->openfl==1.5) (3.0.0)\n","Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich->openfl==1.5) (2.16.1)\n","Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->openfl==1.5) (1.11.2)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->openfl==1.5) (1.3.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->openfl==1.5) (3.2.0)\n","Requirement already satisfied: absl-py>=0.4 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (1.4.0)\n","Requirement already satisfied: google-auth<3,>=1.6.3 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (2.17.3)\n","Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (0.4.6)\n","Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (3.4.4)\n","Requirement already satisfied: setuptools>=41.0.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (67.7.2)\n","Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (0.7.1)\n","Requirement already satisfied: tensorboard-plugin-wit>=1.6.0 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (1.8.1)\n","Requirement already satisfied: werkzeug>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (2.3.7)\n","Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.10/dist-packages (from tensorboard->openfl==1.5) (0.41.2)\n","Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from async-lru>=1.0.0->jupyterlab->openfl==1.5) (4.5.0)\n","Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.12->cryptography>=3.4.6->openfl==1.5) (2.21)\n","Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (5.3.1)\n","Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (0.3.0)\n","Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (4.9)\n","Requirement already satisfied: requests-oauthlib>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard->openfl==1.5) (1.3.1)\n","Requirement already satisfied: jedi>=0.16 in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (0.19.0)\n","Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (4.4.2)\n","Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (0.7.5)\n","Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (3.0.39)\n","Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (0.2.0)\n","Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (0.1.6)\n","Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython>=5.0.0->ipykernel->openfl==1.5) (4.8.0)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2>=3.0.3->jupyterlab->openfl==1.5) (2.1.3)\n","Requirement already satisfied: anyio>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (3.7.1)\n","Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (23.1.0)\n","Collecting jupyter-client (from ipykernel->openfl==1.5)\n"," Downloading jupyter_client-8.3.1-py3-none-any.whl (104 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m104.1/104.1 kB\u001b[0m \u001b[31m10.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jupyter-events>=0.6.0 (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading jupyter_events-0.7.0-py3-none-any.whl (18 kB)\n","Collecting jupyter-server-terminals (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading jupyter_server_terminals-0.4.4-py3-none-any.whl (13 kB)\n","Requirement already satisfied: nbconvert>=6.4.4 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (6.5.4)\n","Requirement already satisfied: nbformat>=5.3.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (5.9.2)\n","Collecting overrides (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading overrides-7.4.0-py3-none-any.whl (17 kB)\n","Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.17.1)\n","Collecting pyzmq<=24.0.1 (from openfl==1.5)\n"," Downloading pyzmq-24.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m50.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: send2trash>=1.8.2 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.8.2)\n","Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.17.1)\n","Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core->jupyterlab->openfl==1.5) (3.10.0)\n","Requirement already satisfied: babel>=2.10 in /usr/local/lib/python3.10/dist-packages (from jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (2.12.1)\n","Collecting json5>=0.9.0 (from jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading json5-0.9.14-py2.py3-none-any.whl (19 kB)\n","Requirement already satisfied: jsonschema>=4.18.0 in /usr/local/lib/python3.10/dist-packages (from jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (4.19.0)\n","Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich->openfl==1.5) (0.1.2)\n","Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.3.0)\n","Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio>=3.1.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.1.3)\n","Requirement already satisfied: parso<0.9.0,>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython>=5.0.0->ipykernel->openfl==1.5) (0.8.3)\n","Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (23.1.0)\n","Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (2023.7.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (0.30.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (0.10.2)\n","Collecting python-json-logger>=2.0.4 (from jupyter-events>=0.6.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading python_json_logger-2.0.7-py3-none-any.whl (8.1 kB)\n","Collecting rfc3339-validator (from jupyter-events>=0.6.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading rfc3339_validator-0.1.4-py2.py3-none-any.whl (3.5 kB)\n","Collecting rfc3986-validator>=0.1.1 (from jupyter-events>=0.6.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5)\n"," Downloading rfc3986_validator-0.1.1-py2.py3-none-any.whl (4.2 kB)\n","Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (4.9.3)\n","Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (4.11.2)\n","Requirement already satisfied: bleach in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (6.0.0)\n","Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.7.1)\n","Requirement already satisfied: entrypoints>=0.2.2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.4)\n","Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.2.2)\n","Requirement already satisfied: mistune<2,>=0.8.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.8.4)\n","Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.8.0)\n","Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.5.0)\n","Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (1.2.1)\n","Requirement already satisfied: fastjsonschema in /usr/local/lib/python3.10/dist-packages (from nbformat>=5.3.0->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (2.18.0)\n","Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython>=5.0.0->ipykernel->openfl==1.5) (0.7.0)\n","Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=5.0.0->ipykernel->openfl==1.5) (0.2.6)\n","Requirement already satisfied: pyasn1<0.6.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard->openfl==1.5) (0.5.0)\n","Requirement already satisfied: oauthlib>=3.0.0 in /usr/local/lib/python3.10/dist-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard->openfl==1.5) (3.2.2)\n","Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (21.2.0)\n","Collecting fqdn (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading fqdn-1.5.1-py3-none-any.whl (9.1 kB)\n","Collecting isoduration (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading isoduration-20.11.0-py3-none-any.whl (11 kB)\n","Collecting jsonpointer>1.13 (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading jsonpointer-2.4-py2.py3-none-any.whl (7.8 kB)\n","Collecting uri-template (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading uri_template-1.3.0-py3-none-any.whl (11 kB)\n","Requirement already satisfied: webcolors>=1.11 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5) (1.13)\n","Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (2.5)\n","Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach->nbconvert>=6.4.4->jupyter-server<3,>=2.4.0->jupyterlab->openfl==1.5) (0.5.1)\n","Collecting arrow>=0.15.0 (from isoduration->jsonschema>=4.18.0->jupyterlab-server<3,>=2.19.0->jupyterlab->openfl==1.5)\n"," Downloading arrow-1.2.3-py3-none-any.whl (66 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m66.4/66.4 kB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hBuilding wheels for collected packages: openfl, flatten_json\n"," Building wheel for openfl (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for openfl: filename=openfl-1.5-py3-none-any.whl size=4553910 sha256=3754ffc23d0ff0cdd36e93b9787c5237279bb40ec750eb60009cde79e978519b\n"," Stored in directory: /tmp/pip-ephem-wheel-cache-5nzym3_5/wheels/f6/3c/d9/737f4ac0c34a1d61b6dfd70a66b90438754779ab630cc73420\n"," Building wheel for flatten_json (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for flatten_json: filename=flatten_json-0.1.13-py3-none-any.whl size=7964 sha256=ef3fe3d3d1fab80f73c5a1d68e502030f063a33c6156ba146c0b6d377f6dccdd\n"," Stored in directory: /root/.cache/pip/wheels/c7/55/89/0dbf87571194b7ed4228b018280a8312e5af2d8f5954504672\n","Successfully built openfl flatten_json\n","Installing collected packages: json5, uri-template, tensorboardX, rfc3986-validator, rfc3339-validator, pyzmq, python-json-logger, overrides, jsonpointer, fqdn, flatten_json, dynaconf, Click, async-lru, jupyter-server-terminals, jupyter-client, docker, arrow, isoduration, jupyter-events, jupyter-server, jupyterlab-server, jupyter-lsp, jupyterlab, openfl\n"," Attempting uninstall: pyzmq\n"," Found existing installation: pyzmq 23.2.1\n"," Uninstalling pyzmq-23.2.1:\n"," Successfully uninstalled pyzmq-23.2.1\n"," Attempting uninstall: Click\n"," Found existing installation: click 8.1.7\n"," Uninstalling click-8.1.7:\n"," Successfully uninstalled click-8.1.7\n"," Attempting uninstall: jupyter-client\n"," Found existing installation: jupyter-client 6.1.12\n"," Uninstalling jupyter-client-6.1.12:\n"," Successfully uninstalled jupyter-client-6.1.12\n"," Attempting uninstall: jupyter-server\n"," Found existing installation: jupyter-server 1.24.0\n"," Uninstalling jupyter-server-1.24.0:\n"," Successfully uninstalled jupyter-server-1.24.0\n","\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n","notebook 6.5.5 requires jupyter-client<8,>=5.3.4, but you have jupyter-client 8.3.1 which is incompatible.\u001b[0m\u001b[31m\n","\u001b[0mSuccessfully installed Click-8.0.1 arrow-1.2.3 async-lru-2.0.4 docker-6.1.3 dynaconf-3.1.7 flatten_json-0.1.13 fqdn-1.5.1 isoduration-20.11.0 json5-0.9.14 jsonpointer-2.4 jupyter-client-8.3.1 jupyter-events-0.7.0 jupyter-lsp-2.2.0 jupyter-server-2.7.3 jupyter-server-terminals-0.4.4 jupyterlab-4.0.6 jupyterlab-server-2.25.0 openfl-1.5 overrides-7.4.0 python-json-logger-2.0.7 pyzmq-24.0.1 rfc3339-validator-0.1.4 rfc3986-validator-0.1.1 tensorboardX-2.6 uri-template-1.3.0\n"]},{"data":{"application/vnd.colab-display-data+json":{"pip_warning":{"packages":["zmq"]}}},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["\u001b[31mERROR: Could not open requirements file: [Errno 2] No such file or directory: 'workflow_interface_requirements.txt'\u001b[0m\u001b[31m\n","\u001b[0m"]}],"source":["!pip install git+https://github.com/securefederatedai/openfl.git\n","!pip install -r workflow_interface_requirements.txt"]},{"cell_type":"code","execution_count":4,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":31851,"status":"ok","timestamp":1695281500648,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"mkjef0pMgjsA","outputId":"504c2bd2-3541-4bfd-b24d-dc6b19686eca"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting dill==0.3.6 (from -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 1))\n"," Downloading dill-0.3.6-py3-none-any.whl (110 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m110.5/110.5 kB\u001b[0m \u001b[31m1.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting metaflow==2.7.15 (from -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading metaflow-2.7.15-py2.py3-none-any.whl (863 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m864.0/864.0 kB\u001b[0m \u001b[31m18.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting ray==2.2.0 (from -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3))\n"," Downloading ray-2.2.0-cp310-cp310-manylinux2014_x86_64.whl (57.4 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.4/57.4 MB\u001b[0m \u001b[31m5.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.31.0)\n","Collecting boto3 (from metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading boto3-1.28.52-py3-none-any.whl (135 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m135.8/135.8 kB\u001b[0m \u001b[31m13.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting pylint (from metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading pylint-2.17.5-py3-none-any.whl (536 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m536.7/536.7 kB\u001b[0m \u001b[31m39.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: attrs in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (23.1.0)\n","Requirement already satisfied: click>=7.0 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (8.0.1)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (3.12.2)\n","Requirement already satisfied: jsonschema in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (4.19.0)\n","Requirement already satisfied: msgpack<2.0.0,>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.0.5)\n","Requirement already satisfied: protobuf!=3.19.5,>=3.15.3 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (3.20.3)\n","Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (6.0.1)\n","Requirement already satisfied: aiosignal in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.3.1)\n","Requirement already satisfied: frozenlist in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.4.0)\n","Collecting virtualenv>=20.0.24 (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3))\n"," Downloading virtualenv-20.24.5-py3-none-any.whl (3.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.7/3.7 MB\u001b[0m \u001b[31m66.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: grpcio>=1.42.0 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.57.0)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (23.1)\n","Requirement already satisfied: numpy>=1.19.3 in /usr/local/lib/python3.10/dist-packages (from ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (1.23.5)\n","Collecting distlib<1,>=0.3.7 (from virtualenv>=20.0.24->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3))\n"," Downloading distlib-0.3.7-py2.py3-none-any.whl (468 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m468.9/468.9 kB\u001b[0m \u001b[31m31.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: platformdirs<4,>=3.9.1 in /usr/local/lib/python3.10/dist-packages (from virtualenv>=20.0.24->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (3.10.0)\n","Collecting botocore<1.32.0,>=1.31.52 (from boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading botocore-1.31.52-py3-none-any.whl (11.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.2/11.2 MB\u001b[0m \u001b[31m41.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting jmespath<2.0.0,>=0.7.1 (from boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)\n","Collecting s3transfer<0.7.0,>=0.6.0 (from boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading s3transfer-0.6.2-py3-none-any.whl (79 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.8/79.8 kB\u001b[0m \u001b[31m7.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (2023.7.1)\n","Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (0.30.2)\n","Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema->ray==2.2.0->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 3)) (0.10.2)\n","Collecting astroid<=2.17.0-dev0,>=2.15.6 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading astroid-2.15.6-py3-none-any.whl (278 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m278.3/278.3 kB\u001b[0m \u001b[31m19.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting isort<6,>=4.2.5 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading isort-5.12.0-py3-none-any.whl (91 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m91.2/91.2 kB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting mccabe<0.8,>=0.6 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading mccabe-0.7.0-py2.py3-none-any.whl (7.3 kB)\n","Collecting tomlkit>=0.10.1 (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading tomlkit-0.12.1-py3-none-any.whl (37 kB)\n","Requirement already satisfied: tomli>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.0.1)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (3.2.0)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (3.4)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.0.4)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2023.7.22)\n","Collecting lazy-object-proxy>=1.4.0 (from astroid<=2.17.0-dev0,>=2.15.6->pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (63 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m63.3/63.3 kB\u001b[0m \u001b[31m6.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: wrapt<2,>=1.11 in /usr/local/lib/python3.10/dist-packages (from astroid<=2.17.0-dev0,>=2.15.6->pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (1.14.1)\n","Requirement already satisfied: typing-extensions>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from astroid<=2.17.0-dev0,>=2.15.6->pylint->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (4.5.0)\n","Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.10/dist-packages (from botocore<1.32.0,>=1.31.52->boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (2.8.2)\n","Collecting urllib3<3,>=1.21.1 (from requests->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2))\n"," Downloading urllib3-1.26.16-py2.py3-none-any.whl (143 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m143.1/143.1 kB\u001b[0m \u001b[31m15.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.32.0,>=1.31.52->boto3->metaflow==2.7.15->-r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt (line 2)) (1.16.0)\n","Installing collected packages: distlib, virtualenv, urllib3, tomlkit, mccabe, lazy-object-proxy, jmespath, isort, dill, botocore, astroid, s3transfer, pylint, ray, boto3, metaflow\n"," Attempting uninstall: urllib3\n"," Found existing installation: urllib3 2.0.4\n"," Uninstalling urllib3-2.0.4:\n"," Successfully uninstalled urllib3-2.0.4\n","Successfully installed astroid-2.15.6 boto3-1.28.52 botocore-1.31.52 dill-0.3.6 distlib-0.3.7 isort-5.12.0 jmespath-1.0.1 lazy-object-proxy-1.9.0 mccabe-0.7.0 metaflow-2.7.15 pylint-2.17.5 ray-2.2.0 s3transfer-0.6.2 tomlkit-0.12.1 urllib3-1.26.16 virtualenv-20.24.5\n"]}],"source":["!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n","import os\n","os.environ[\"USERNAME\"] = \"colab\""]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":788,"status":"ok","timestamp":1695281508580,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"29G877N2gjvD","outputId":"aaacd16e-cdf4-4f58-ebaa-7c3dd9743843"},"outputs":[{"name":"stdout","output_type":"stream","text":[" % Total % Received % Xferd Average Speed Time Time Time Current\n"," Dload Upload Total Spent Left Speed\n","100 4082 100 4082 0 0 8194 0 --:--:-- --:--:-- --:--:-- 8196\n"]}],"source":["!curl https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python/google/protobuf/internal/builder.py > /usr/local/lib/python3.10/dist-packages/google/protobuf/internal/builder.py\n"]},{"cell_type":"code","execution_count":6,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":13011,"status":"ok","timestamp":1695281524369,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"ncC0JVBHgjxY","outputId":"a490bcbe-647b-4af0-a0a6-515b401e82ce"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting rdkit\n"," Downloading rdkit-2023.3.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (29.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m29.7/29.7 MB\u001b[0m \u001b[31m14.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from rdkit) (1.23.5)\n","Requirement already satisfied: Pillow in /usr/local/lib/python3.10/dist-packages (from rdkit) (9.4.0)\n","Installing collected packages: rdkit\n","Successfully installed rdkit-2023.3.3\n"]}],"source":["!pip install rdkit"]},{"cell_type":"code","execution_count":7,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":26944,"status":"ok","timestamp":1695281553610,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"Tgk-_h_thmq3","outputId":"e2868c0b-57eb-48c1-b470-814a2ddf8a02"},"outputs":[{"name":"stdout","output_type":"stream","text":["Collecting torch_geometric\n"," Downloading torch_geometric-2.3.1.tar.gz (661 kB)\n","\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/661.6 kB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m143.4/661.6 kB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m661.6/661.6 kB\u001b[0m \u001b[31m9.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n"," Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n"," Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n","Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (4.66.1)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (1.23.5)\n","Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (1.11.2)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (3.1.2)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (2.31.0)\n","Requirement already satisfied: pyparsing in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (3.1.1)\n","Requirement already satisfied: scikit-learn in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (1.2.2)\n","Requirement already satisfied: psutil>=5.8.0 in /usr/local/lib/python3.10/dist-packages (from torch_geometric) (5.9.5)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch_geometric) (2.1.3)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (3.2.0)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (3.4)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (1.26.16)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->torch_geometric) (2023.7.22)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->torch_geometric) (1.3.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn->torch_geometric) (3.2.0)\n","Building wheels for collected packages: torch_geometric\n"," Building wheel for torch_geometric (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for torch_geometric: filename=torch_geometric-2.3.1-py3-none-any.whl size=910454 sha256=cdf75a4718efe17106dd782205f6f68b404843097f9ccd6c5947046cff724619\n"," Stored in directory: /root/.cache/pip/wheels/ac/dc/30/e2874821ff308ee67dcd7a66dbde912411e19e35a1addda028\n","Successfully built torch_geometric\n","Installing collected packages: torch_geometric\n","Successfully installed torch_geometric-2.3.1\n"]}],"source":["!pip install torch_geometric"]},{"cell_type":"code","execution_count":50,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1695283923508,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"dwfp5aycttNI"},"outputs":[],"source":["import torch.nn as nn\n","import torch.nn.functional as F\n","import torch.optim as optim\n","import torch\n","import numpy as np\n","import random\n","import warnings\n","warnings.filterwarnings('ignore')\n","from copy import deepcopy\n","\n","# GNN imports\n","from torch_geometric.nn import GCNConv\n","from torch_geometric.nn import global_mean_pool as gap\n","from torch_geometric.nn import global_max_pool as gmp\n","from torch_geometric.nn import LayerNorm\n","from torch_geometric.datasets import MoleculeNet\n","from torch_geometric.loader import DataLoader"]},{"cell_type":"code","execution_count":51,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":288,"status":"ok","timestamp":1695283930495,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"mIPTAGD1tsgq","outputId":"d2bfbfc4-d10c-49b4-ef3d-70894a25bb82"},"outputs":[{"name":"stdout","output_type":"stream","text":["cpu\n"]}],"source":["device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n","print(device)\n","# device='cpu'"]},{"cell_type":"code","execution_count":114,"metadata":{"executionInfo":{"elapsed":372,"status":"ok","timestamp":1695286686406,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"JdovcCFkw5CK"},"outputs":[],"source":["# hyperparams\n","BS = 128 # 32 # 128\n","n_epochs = 5 # 15\n","momentum = 0.9\n","log_interval = 50\n","lr = 0.001\n","hidden = 32"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ui_eXWj54FpD"},"outputs":[],"source":["# reproducibility...\n","# torch.backends.cudnn.enabled = False\n","def set_seed(seed):\n"," torch.manual_seed(seed)\n"," # torch.cuda.manual_seed_all(seed)\n"," # torch.backends.cudnn.deterministic = True\n"," # torch.backends.cudnn.benchmark = False\n"," np.random.seed(seed)\n"," random.seed(seed)\n","set_seed(10)"]},{"cell_type":"markdown","metadata":{"id":"E6DVhokKhtMI"},"source":["#Stand-alone"]},{"cell_type":"code","execution_count":115,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":272,"status":"ok","timestamp":1695286691577,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"_HOw-uiHgj4U","outputId":"8cc9e4ef-0e90-4501-88c9-605a4f302f4f"},"outputs":[{"name":"stdout","output_type":"stream","text":["970111\n"]}],"source":["import random\n","unique_id_stand_alone = random.randint(10,2000000) # random 'unique' id for tensorboard clarity\n","print(unique_id_stand_alone)"]},{"cell_type":"code","execution_count":116,"metadata":{"executionInfo":{"elapsed":276,"status":"ok","timestamp":1695286695369,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"HcWF8c4Sgj9p"},"outputs":[],"source":["# device and data path\n","path = './data/'\n","dataset = MoleculeNet(path, name='HIV').shuffle() #MoleculeNet(path, name='PCBA').shuffle()\n","ldata = len(dataset)\n","dataset = dataset[:ldata] # reducing for test and local execution\n"]},{"cell_type":"code","execution_count":117,"metadata":{"executionInfo":{"elapsed":7002,"status":"ok","timestamp":1695286705565,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"L29NhC3ylgjd"},"outputs":[],"source":["# Dataset definitions\n","N = len(dataset) // 10\n","val_dataset = dataset[:N]\n","test_dataset = dataset[N:2 * N]\n","train_dataset = dataset[2 * N:]\n","\n","train_labels = train_dataset.y\n","valid_labels = val_dataset.y\n","train_loader = DataLoader(train_dataset, batch_size=BS, shuffle=True)\n","val_loader = DataLoader(val_dataset, batch_size=1) #BS\n","test_loader = DataLoader(test_dataset, batch_size=1) #BS\n"]},{"cell_type":"code","execution_count":141,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1431,"status":"ok","timestamp":1695288085090,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"Q-NrY9cxChCW","outputId":"24796247-2128-48ae-da14-ad1097cf4d31"},"outputs":[{"data":{"text/plain":["(tensor([1174]), tensor([31729]))"]},"execution_count":141,"metadata":{},"output_type":"execute_result"}],"source":["sum(train_labels ==1), sum(train_labels==0)"]},{"cell_type":"code","execution_count":118,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":266,"status":"ok","timestamp":1695286710728,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"qyAnaFEuxL2a","outputId":"067751c9-ddd1-40c7-f06d-8687f67081cb"},"outputs":[{"name":"stdout","output_type":"stream","text":["41127\n"]}],"source":["print(len(dataset))"]},{"cell_type":"code","execution_count":101,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":839,"output_embedded_package_id":"1RxgRU5v8s1RAuZsHvFQe52LsW8sJackl","resources":{"https://localhost:6006/?tensorboardColab=true":{"data":"PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMiwubWF0LXR5cG9ncmFwaHkgLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNCwubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IGg0e2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSBoNXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgaDZ7Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmcsLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS1zdHJvbmcsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5IHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IHB7bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGwsLm1hdC1jYXB0aW9uLC5tYXQtdHlwb2dyYXBoeSAubWF0LXNtYWxsLC5tYXQtdHlwb2dyYXBoeSAubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCByZ2JhKDAsMCwwLDApfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2Vye2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwNnB4KTt3aWR0aDoxMzMuMzMzMzkzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTA3cHgpO3dpZHRoOjEzMy4zMzM0MDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwOHB4KTt3aWR0aDoxMzMuMzMzNDEzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE2ZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMTVlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE0ZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS5tYXQtYmFkZ2V7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYmRiZGJkO2NvbG9yOiM3NTc1NzV9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggI2UwZTBlMH1bZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiNmZmZ9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6I2ZmZiAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciwubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzIxMjEyMTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgwLDAsMCwuMjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNzU3NTc1fS5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fS5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWhpbnR7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjojNjE2MTYxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM3NTc1NzV9Lm1hdC1saXN0LW9wdGlvbjpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiMyMTIxMjF9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fS5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmRkZWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZlNWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmNkMGNkfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmY5ODAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojMjEyMTIxfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNzU3NTc1fS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM3NTc1NzV9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6IzYxNjE2MX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYxNjE2MTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keS5kYXJrLW1vZGV7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiM0MmE1ZjV9Ym9keS5kYXJrLW1vZGUgYTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojYmE2OGM4fWJvZHkuZGFyay1tb2RlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtYXBwLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MHB4IDZweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MHB4IDlweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowcHggMTBweCAxNHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzIxMjEyMTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJke2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMzMDMwMzAgIWltcG9ydGFudH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGhlYWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Ym9keSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRmb290LGJvZHkuZGFyay1tb2RlIG1hdC1oZWFkZXItcm93LGJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgW21hdC1oZWFkZXItcm93XSxib2R5LmRhcmstbW9kZSBbbWF0LXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1mb290ZXItcm93XSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgbWF0LXJvdyxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtZm9vdGVyLXJvdyxib2R5LmRhcmstbW9kZSB0aC5tYXQtaGVhZGVyLWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjE1KX1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6bm90KC5tYXQtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb246ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcixib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgxODksMTg5LDE4OSwuNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiNjNmM2YzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1ib3R0b206bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZDojZmFmYWZhO2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6aW5oZXJpdH0KPC9zdHlsZT4KCjxzdHlsZT4KICBodG1sLAogIGJvZHkgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKTsKCiAgICAvKiBMZWdhY3kgbWVjaGFuaXNtIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHN1YnBpeGVsIGFudGktYWxpYXNpbmcgb24gbWFjT1MuCiAgICAgKgogICAgICogSW4gdGhlIHBhc3QgWzFdLCBtYWNPUyBzdWJwaXhlbCBBQSBjYXVzZWQgZXhjZXNzaXZlIGJvbGRpbmcgZm9yIGxpZ2h0LW9uLWRhcmsgdGV4dDsgdGhpcyBydWxlCiAgICAgKiBhdm9pZHMgdGhhdCBieSByZXF1ZXN0aW5nIG5vbi1zdWJwaXhlbCBBQSBhbHdheXMsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGljaCBpcwogICAgICogdG8gdXNlIHN1YnBpeGVsIEFBIHdoZW4gYXZhaWxhYmxlLiBUaGUgb3JpZ2luYWwgaXNzdWUgd2FzICJmaXhlZCIgYnkgcmVtb3Zpbmcgc3VicGl4ZWwgQUEgaW4KICAgICAqIG1hY09TIDE0IChNb2phdmUpLCBidXQgZm9yIGxlZ2FjeSByZWFzb25zIHRoZXkgcHJlc2VydmVkIHRoZSBib2xkaW5nIGVmZmVjdCBhcyBhbiBvcHRpb24uCiAgICAgKiBDaHJvbWUgdGhlbiBpbiB0dXJuIHVwZGF0ZWQgaXRzIGZvbnQgcmVuZGVyaW5nIHRvIGFwcGx5IHRoYXQgYm9sZGluZyBlZmZlY3QgWzJdLCB3aGljaCBtZWFucwogICAgICogdGhhdCBldmVuIHRob3VnaCB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGRvY3MgWzNdIHN1Z2dlc3QgdGhhdCBzZXR0aW5nIGBhbnRpYWxpYXNlZGAKICAgICAqIHdvdWxkIGhhdmUgbm8gZWZmZWN0IGZvciByZWNlbnQgdmVyc2lvbnMgb2YgbWFjT1MsIGl0IHN0aWxsIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgYm9sZGluZy4KICAgICAqCiAgICAgKiBbMV06IGh0dHA6Ly93d3cubGlnaHRlcnJhLmNvbS9hcnRpY2xlcy9tYWNvc3h0ZXh0YWFidWcvCiAgICAgKiBbMl06IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg1ODg2MQogICAgICogWzNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udC1zbW9vdGgKICAgICAqCiAgICAgKi8KCiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICB9CiAgbm9zY3JpcHQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBwYWRkaW5nOiAxMHB4OwogIH0KPC9zdHlsZT4KCjwvaGVhZD48Ym9keT48bm9zY3JpcHQ+CiAgICA8aDE+VGVuc29yQm9hcmQgcmVxdWlyZXMgSmF2YVNjcmlwdDwvaDE+CiAgICA8cD5QbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQgYW5kIHJlbG9hZCB0aGlzIHBhZ2UuPC9wPgogIDwvbm9zY3JpcHQ+PHRiLXdlYmFwcD48L3RiLXdlYmFwcD48c2NyaXB0IHNyYz0iaW5kZXguanM/X2ZpbGVfaGFzaD1jOWMyMGFkOSI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4=","headers":[["content-type","text/html; charset=utf-8"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/chart_worker.js?_file_hash=2c1e71c5":{"data":"KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9ZnVuY3Rpb24gZXcobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG53KG4sdCl7cmV0dXJuIG4ueFswXT09PXQueFswXSYmbi54WzFdPT09dC54WzFdJiZuLnlbMF09PT10LnlbMF0mJm4ueVsxXT09PXQueVsxXX12YXIgRGk9e2NvbnZlcnRSZWN0VG9FeHRlbnQ6UV8saXNXZWJHbDJTdXBwb3J0ZWQ6al8saXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dHcsYXJlUG9seWxpbmVzRXF1YWw6ZXcsYXJlRXh0ZW50c0VxdWFsOm53fTt2YXIgZHI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1mcihvbi5MSU5FQVIpLHRoaXMueVNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9RGkuY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTt2YXIgVG47KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KShUbnx8KFRuPXt9KSk7ZnVuY3Rpb24geWEobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpzLG9wYWNpdHk6b309aSxhPW47cmV0dXJuIWEmJiFzP251bGw6KGE9YSE9bnVsbD9hOnQoKSxhPWUoYSksYS5zdHlsZS5kaXNwbGF5PXM/IiI6Im5vbmUiLGEuc3R5bGUuc3Ryb2tlPXIsYS5zdHlsZS5vcGFjaXR5PVN0cmluZyhvIT1udWxsP286MSksYSl9dmFyIE9zPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFtpKjJdfSwke3RbaSoyKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7cy5zdHlsZS5maWxsPSJub25lIjtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3JldHVybiBzLnNldEF0dHJpYnV0ZSgiZCIsbyksdGhpcy5zdmcuYXBwZW5kQ2hpbGQocyksc30scz0+e2lmKCEodCE9bnVsbCYmdC5kYXRhKXx8IURpLmFyZVBvbHlsaW5lc0VxdWFsKGUsdD09bnVsbD92b2lkIDA6dC5kYXRhKSl7bGV0IG89dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtzLnNldEF0dHJpYnV0ZSgiZCIsbyl9cmV0dXJuIHN9LGkpO3JldHVybiByPT09bnVsbD9udWxsOihyLnN0eWxlLnN0cm9rZVdpZHRoPVN0cmluZyhpLndpZHRoKSx7ZG9tOnIsZGF0YTplfSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cixjb2xvcjpzfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55K28vMyxlLngrci8yLGUueStvLzMsZS54LGUueS1vKjIvM10pLGw9eWEodD09bnVsbD92b2lkIDA6dC5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIGw9PT1udWxsP251bGw6KGwuc3R5bGUuZmlsbD1zLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOnN9PWksbz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcocykpLGEpLGkpO3JldHVybiBvPT09bnVsbD9udWxsOntkb206byxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnMsY29sb3I6b309cixhPTIvTWF0aC5zcXJ0KDMpKnMsbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStzLzIsZS54LGUueS1zLzIsaS54LGkueS1zLzIsaS54K2EvMixpLnkrcy8yXSksYz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dS5jbGFzc0xpc3QuYWRkKCJ0cmFwZXpvaWQiKSx1LnN0eWxlLmZpbGw9Im5vbmUiO2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodSksdX0sdT0+e2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdX0scik7cmV0dXJuIGM9PT1udWxsP251bGw6KGMuc3R5bGUuZmlsbD1vLHtkb206YyxkYXRhOmx9KX1kaXNwb3NlKCl7fX07dmFyICRoPSIxMzciO3ZhciBpdz0wLEFtPTEscnc9Mjt2YXIgbDA9MSxzdz0yLEpzPTMsZW89MCxoZT0xLEhyPTIsYzA9MTt2YXIgam49MCxLcz0xLENtPTIsUm09MyxMbT00LG93PTUsSXI9MTAwLGF3PTEwMSxsdz0xMDIsUG09MTAzLERtPTEwNCxjdz0yMDAsdXc9MjAxLGh3PTIwMixmdz0yMDMsdTA9MjA0LGgwPTIwNSxkdz0yMDYscHc9MjA3LG13PTIwOCxndz0yMDkseHc9MjEwLHl3PTAsdnc9MSxfdz0yLHp1PTMsd3c9NCxNdz01LGJ3PTYsU3c9NyxDbD0wLEV3PTEsVHc9Mix0aT0wLEF3PTEsQ3c9MixSdz0zLEx3PTQsUHc9NSxmMD0zMDAsQW89MzAxLENvPTMwMixVdT0zMDMsQnU9MzA0LFJsPTMwNixLaD0zMDcsT3U9MWUzLFZlPTEwMDEsa3U9MTAwMixmZT0xMDAzLEltPTEwMDQ7dmFyIE5tPTEwMDU7dmFyIGJlPTEwMDYsRHc9MTAwNzt2YXIgTGw9MTAwODt2YXIgZWk9MTAwOSxJdz0xMDEwLE53PTEwMTEsbm89MTAxMixGdz0xMDEzLFFhPTEwMTQsVWk9MTAxNSxVcj0xMDE2LHp3PTEwMTcsVXc9MTAxOCxCcj0xMDIwLEJ3PTEwMjEsUmU9MTAyMyxPdz0xMDI0LGt3PTEwMjUsT2k9MTAyNixWcj0xMDI3LEh3PTEwMjgsVnc9MTAyOSxHdz0xMDMwLFd3PTEwMzEscXc9MTAzMyxLYz0zMzc3NixRYz0zMzc3NyxqYz0zMzc3OCx0dT0zMzc3OSxGbT0zNTg0MCx6bT0zNTg0MSxVbT0zNTg0MixCbT0zNTg0MyxYdz0zNjE5NixPbT0zNzQ5MixrbT0zNzQ5NixIbT0zNzgwOCxWbT0zNzgwOSxHbT0zNzgxMCxXbT0zNzgxMSxxbT0zNzgxMixYbT0zNzgxMyxZbT0zNzgxNCxabT0zNzgxNSxKbT0zNzgxNiwkbT0zNzgxNyxLbT0zNzgxOCxRbT0zNzgxOSxqbT0zNzgyMCx0Zz0zNzgyMSxlZz0zNjQ5MixZdz0yMjAwLFp3PTIyMDEsSnc9MjIwMixqYT0yMzAwLHRsPTIzMDEsZXU9MjMwMixOcj0yNDAwLEZyPTI0MDEsZWw9MjQwMixRaD0yNTAwLGQwPTI1MDEsJHc9MDt2YXIgcmk9M2UzLCR0PTMwMDEsS3c9MzIwMCxRdz0zMjAxLHRzPTAsanc9MTt2YXIgbnU9NzY4MDt2YXIgdE09NTE5LGlvPTM1MDQ0LG5sPTM1MDQ4O3ZhciBuZz0iMzAwIGVzIixIdT0xMDM1LEluPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDAmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVycztpW3RdPT09dm9pZCAwJiYoaVt0XT1bXSksaVt0XS5pbmRleE9mKGUpPT09LTEmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gaVt0XSE9PXZvaWQgMCYmaVt0XS5pbmRleE9mKGUpIT09LTF9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHIhPT12b2lkIDApe2xldCBzPXIuaW5kZXhPZihlKTtzIT09LTEmJnIuc3BsaWNlKHMsMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZihpIT09dm9pZCAwKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sdmU9W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKXZlW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIGl1PU1hdGguUEkvMTgwLFZ1PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHRuKCl7bGV0IG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGk9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKHZlW24mMjU1XSt2ZVtuPj44JjI1NV0rdmVbbj4+MTYmMjU1XSt2ZVtuPj4yNCYyNTVdKyItIit2ZVt0JjI1NV0rdmVbdD4+OCYyNTVdKyItIit2ZVt0Pj4xNiYxNXw2NF0rdmVbdD4+MjQmMjU1XSsiLSIrdmVbZSY2M3wxMjhdK3ZlW2U+PjgmMjU1XSsiLSIrdmVbZT4+MTYmMjU1XSt2ZVtlPj4yNCYyNTVdK3ZlW2kmMjU1XSt2ZVtpPj44JjI1NV0rdmVbaT4+MTYmMjU1XSt2ZVtpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEllKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBlTShuLHQpe3JldHVybihuJXQrdCkldH1mdW5jdGlvbiBydShuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gaWcobil7cmV0dXJuKG4mbi0xKT09PTAmJm4hPT0wfWZ1bmN0aW9uIG5NKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgSz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qaStyWzZdLHRoaXMueT1yWzFdKmUrcls0XSppK3JbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PXMqaS1vKnIrdC54LHRoaXMueT1zKnIrbyppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtLLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGRlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixzLG8sYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPXMsdVs1XT1sLHVbNl09aSx1WzddPW8sdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxoPWlbN10sZj1pWzJdLGQ9aVs1XSxnPWlbOF0seD1yWzBdLHY9clszXSxtPXJbNl0scD1yWzFdLGI9cls0XSxfPXJbN10sUz1yWzJdLEw9cls1XSxBPXJbOF07cmV0dXJuIHNbMF09byp4K2EqcCtsKlMsc1szXT1vKnYrYSpiK2wqTCxzWzZdPW8qbSthKl8rbCpBLHNbMV09Yyp4K3UqcCtoKlMsc1s0XT1jKnYrdSpiK2gqTCxzWzddPWMqbSt1Kl8raCpBLHNbMl09Zip4K2QqcCtnKlMsc1s1XT1mKnYrZCpiK2cqTCxzWzhdPWYqbStkKl8rZypBLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIGUqbyp1LWUqYSpjLWkqcyp1K2kqYSpsK3IqcypjLXIqbypsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11Km8tYSpjLGY9YSpsLXUqcyxkPWMqcy1vKmwsZz1lKmgraSpmK3IqZDtpZihnPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCB4PTEvZztyZXR1cm4gdFswXT1oKngsdFsxXT0ocipjLXUqaSkqeCx0WzJdPShhKmktcipvKSp4LHRbM109Zip4LHRbNF09KHUqZS1yKmwpKngsdFs1XT0ocipzLWEqZSkqeCx0WzZdPWQqeCx0WzddPShpKmwtYyplKSp4LHRbOF09KG8qZS1pKnMpKngsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxpLHIscyxvLGEpe2xldCBsPU1hdGguY29zKHMpLGM9TWF0aC5zaW4ocyk7cmV0dXJuIHRoaXMuc2V0KGkqbCxpKmMsLWkqKGwqbytjKmEpK28rdCwtcipjLHIqbCwtciooLWMqbytsKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0qPXQsaVszXSo9dCxpWzZdKj10LGlbMV0qPWUsaVs0XSo9ZSxpWzddKj1lLHRoaXN9cm90YXRlKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCkscj10aGlzLmVsZW1lbnRzLHM9clswXSxvPXJbM10sYT1yWzZdLGw9clsxXSxjPXJbNF0sdT1yWzddO3JldHVybiByWzBdPWUqcytpKmwsclszXT1lKm8raSpjLHJbNl09ZSphK2kqdSxyWzFdPS1pKnMrZSpsLHJbNF09LWkqbytlKmMscls3XT0taSphK2UqdSx0aGlzfXRyYW5zbGF0ZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0rPXQqaVsyXSxpWzNdKz10KmlbNV0saVs2XSs9dCppWzhdLGlbMV0rPWUqaVsyXSxpWzRdKz1lKmlbNV0saVs3XSs9ZSppWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZGUucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBwMChuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJvKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfXZhciBtMD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSwkZT17aDowLHM6MCxsOjB9LHZhPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gc3Uobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKyh0LW4pKjYqZTplPDEvMj90OmU8Mi8zP24rKHQtbikqNiooMi8zLWUpOm59ZnVuY3Rpb24gT3Iobil7cmV0dXJuIG48LjA0MDQ1P24qLjA3NzM5OTM4MDg6TWF0aC5wb3cobiouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIG91KG4pe3JldHVybiBuPC4wMDMxMzA4P24qMTIuOTI6MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGZ0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtyZXR1cm4gZT09PXZvaWQgMCYmaT09PXZvaWQgMD90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsaSl9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOnR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLnNldEhleCh0KTp0eXBlb2YgdD09InN0cmluZyImJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSh0JjI1NSkvMjU1LHRoaXN9c2V0UkdCKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPWksdGhpc31zZXRIU0wodCxlLGkpe2lmKHQ9ZU0odCwxKSxlPUllKGUsMCwxKSxpPUllKGksMCwxKSxlPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1pO2Vsc2V7bGV0IHI9aTw9LjU/aSooMStlKTppK2UtaSplLHM9MippLXI7dGhpcy5yPXN1KHMscix0KzEvMyksdGhpcy5nPXN1KHMscix0KSx0aGlzLmI9c3UocyxyLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKHIpe3IhPT12b2lkIDAmJnBhcnNlRmxvYXQocik8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgaTtpZihpPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgcixzPWlbMV0sbz1pWzJdO3N3aXRjaChzKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihyPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChyWzNdLDEwKSkvMjU1LGUocls0XSksdGhpcztpZihyPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChyWzNdLDEwKSkvMTAwLGUocls0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihyPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXtsZXQgYT1wYXJzZUZsb2F0KHJbMV0pLzM2MCxsPXBhcnNlSW50KHJbMl0sMTApLzEwMCxjPXBhcnNlSW50KHJbM10sMTApLzEwMDtyZXR1cm4gZShyWzRdKSx0aGlzLnNldEhTTChhLGwsYyl9YnJlYWt9fWVsc2UgaWYoaT0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCByPWlbMV0scz1yLmxlbmd0aDtpZihzPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDEpK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihzPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDQpK3IuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgZT1tMFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBlIT09dm9pZCAwP3RoaXMuc2V0SGV4KGUpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1Pcih0LnIpLHRoaXMuZz1Pcih0LmcpLHRoaXMuYj1Pcih0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPW91KHQuciksdGhpcy5nPW91KHQuZyksdGhpcy5iPW91KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IGU9dGhpcy5yLGk9dGhpcy5nLHI9dGhpcy5iLHM9TWF0aC5tYXgoZSxpLHIpLG89TWF0aC5taW4oZSxpLHIpLGEsbCxjPShvK3MpLzI7aWYobz09PXMpYT0wLGw9MDtlbHNle2xldCB1PXMtbztzd2l0Y2gobD1jPD0uNT91LyhzK28pOnUvKDItcy1vKSxzKXtjYXNlIGU6YT0oaS1yKS91KyhpPHI/NjowKTticmVhaztjYXNlIGk6YT0oci1lKS91KzI7YnJlYWs7Y2FzZSByOmE9KGUtaSkvdSs0O2JyZWFrfWEvPTZ9cmV0dXJuIHQuaD1hLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxpKXtyZXR1cm4gdGhpcy5nZXRIU0woJGUpLCRlLmgrPXQsJGUucys9ZSwkZS5sKz1pLHRoaXMuc2V0SFNMKCRlLmgsJGUucywkZS5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxlKXtyZXR1cm4gdGhpcy5yPXQucitlLnIsdGhpcy5nPXQuZytlLmcsdGhpcy5iPXQuYitlLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxlKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqZSx0aGlzLmcrPSh0LmctdGhpcy5nKSplLHRoaXMuYis9KHQuYi10aGlzLmIpKmUsdGhpc31sZXJwQ29sb3JzKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQucisoZS5yLXQucikqaSx0aGlzLmc9dC5nKyhlLmctdC5nKSppLHRoaXMuYj10LmIrKGUuYi10LmIpKmksdGhpc31sZXJwSFNMKHQsZSl7dGhpcy5nZXRIU0woJGUpLHQuZ2V0SFNMKHZhKTtsZXQgaT1ydSgkZS5oLHZhLmgsZSkscj1ydSgkZS5zLHZhLnMsZSkscz1ydSgkZS5sLHZhLmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKGkscixzKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07ZnQuTkFNRVM9bTA7ZnQucHJvdG90eXBlLmlzQ29sb3I9ITA7ZnQucHJvdG90eXBlLnI9MTtmdC5wcm90b3R5cGUuZz0xO2Z0LnByb3RvdHlwZS5iPTE7dmFyIHByLE5uPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PT0idW5kZWZpbmVkIilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ByPT09dm9pZCAwJiYocHI9cm8oImNhbnZhcyIpKSxwci53aWR0aD10LndpZHRoLHByLmhlaWdodD10LmhlaWdodDtsZXQgaT1wci5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9cHJ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1ybygiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCkscz1yLmRhdGE7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXT1PcihzW29dLzI1NSkqMjU1O3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1lbHNlIGlmKHQuZGF0YSl7bGV0IGU9dC5kYXRhLnNsaWNlKDApO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/ZVtpXT1NYXRoLmZsb29yKE9yKGVbaV0vMjU1KSoyNTUpOmVbaV09T3IoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LGlNPTAsYWU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0PWFlLkRFRkFVTFRfSU1BR0UsZT1hZS5ERUZBVUxUX01BUFBJTkcsaT1WZSxyPVZlLHM9YmUsbz1MbCxhPVJlLGw9ZWksYz0xLHU9cmkpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXIsdGhpcy5tYWdGaWx0ZXI9cyx0aGlzLm1pbkZpbHRlcj1vLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PWEsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBLKDAsMCksdGhpcy5yZXBlYXQ9bmV3IEsoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSygwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGRlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIWUmJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgcj10aGlzLmltYWdlO2lmKHIudXVpZD09PXZvaWQgMCYmKHIudXVpZD10bigpKSwhZSYmdC5pbWFnZXNbci51dWlkXT09PXZvaWQgMCl7bGV0IHM7aWYoQXJyYXkuaXNBcnJheShyKSl7cz1bXTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspcltvXS5pc0RhdGFUZXh0dXJlP3MucHVzaChhdShyW29dLmltYWdlKSk6cy5wdXNoKGF1KHJbb10pKX1lbHNlIHM9YXUocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOnN9fWkuaW1hZ2U9ci51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PWYwKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgT3U6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBWZTp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2Uga3U6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBPdTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFZlOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTthZS5ERUZBVUxUX0lNQUdFPXZvaWQgMDthZS5ERUZBVUxUX01BUFBJTkc9ZjA7YWUucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBhdShuKXtyZXR1cm4gdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/Tm4uZ2V0RGF0YVVSTChuKTpuLmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kYXRhKSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4uZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfXZhciBXdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXQudyE9PXZvaWQgMD90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10aGlzLncsbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0qcyx0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIrb1sxM10qcyx0aGlzLno9b1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKnMsdGhpcy53PW9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSpzLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLHMsbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0saD1sWzhdLGY9bFsxXSxkPWxbNV0sZz1sWzldLHg9bFsyXSx2PWxbNl0sbT1sWzEwXTtpZihNYXRoLmFicyh1LWYpPC4wMSYmTWF0aC5hYnMoaC14KTwuMDEmJk1hdGguYWJzKGctdik8LjAxKXtpZihNYXRoLmFicyh1K2YpPC4xJiZNYXRoLmFicyhoK3gpPC4xJiZNYXRoLmFicyhnK3YpPC4xJiZNYXRoLmFicyhjK2QrbS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IGI9KGMrMSkvMixfPShkKzEpLzIsUz0obSsxKS8yLEw9KHUrZikvNCxBPShoK3gpLzQsSD0oZyt2KS80O3JldHVybiBiPl8mJmI+Uz9iPC4wMT8oaT0wLHI9LjcwNzEwNjc4MSxzPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChiKSxyPUwvaSxzPUEvaSk6Xz5TP188LjAxPyhpPS43MDcxMDY3ODEscj0wLHM9LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KF8pLGk9TC9yLHM9SC9yKTpTPC4wMT8oaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSxzPTApOihzPU1hdGguc3FydChTKSxpPUEvcyxyPUgvcyksdGhpcy5zZXQoaSxyLHMsZSksdGhpc31sZXQgcD1NYXRoLnNxcnQoKHYtZykqKHYtZykrKGgteCkqKGgteCkrKGYtdSkqKGYtdSkpO3JldHVybiBNYXRoLmFicyhwKTwuMDAxJiYocD0xKSx0aGlzLng9KHYtZykvcCx0aGlzLnk9KGgteCkvcCx0aGlzLno9KGYtdSkvcCx0aGlzLnc9TWF0aC5hY29zKChjK2QrbS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtXdC5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBOZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFd0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgV3QoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBhZSh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9aS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/aS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PWkuaW50ZXJuYWxGb3JtYXQhPT12b2lkIDA/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9aS5taW5GaWx0ZXIhPT12b2lkIDA/aS5taW5GaWx0ZXI6YmUsdGhpcy5kZXB0aEJ1ZmZlcj1pLmRlcHRoQnVmZmVyIT09dm9pZCAwP2kuZGVwdGhCdWZmZXI6ITAsdGhpcy5zdGVuY2lsQnVmZmVyPWkuc3RlbmNpbEJ1ZmZlciE9PXZvaWQgMD9pLnN0ZW5jaWxCdWZmZXI6ITEsdGhpcy5kZXB0aFRleHR1cmU9aS5kZXB0aFRleHR1cmUhPT12b2lkIDA/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9T2JqZWN0LmFzc2lnbih7fSx0LnRleHR1cmUuaW1hZ2UpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O05lLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwO3ZhciBHdT1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBzPTA7czxpO3MrKyl0aGlzLnRleHR1cmVbc109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxzPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxzO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fTtHdS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgc289Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9aS5pZ25vcmVEZXB0aCE9PXZvaWQgMD9pLmlnbm9yZURlcHRoOiEwLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPWkudXNlUmVuZGVyVG9UZXh0dXJlIT09dm9pZCAwP2kudXNlUmVuZGVyVG9UZXh0dXJlOiExLHRoaXMudXNlUmVuZGVyYnVmZmVyPXRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPT09ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07c28ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgRWU9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixzLG8sYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGg9aVtyKzNdLGY9c1tvKzBdLGQ9c1tvKzFdLGc9c1tvKzJdLHg9c1tvKzNdO2lmKGE9PT0wKXt0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aDtyZXR1cm59aWYoYT09PTEpe3RbZSswXT1mLHRbZSsxXT1kLHRbZSsyXT1nLHRbZSszXT14O3JldHVybn1pZihoIT09eHx8bCE9PWZ8fGMhPT1kfHx1IT09Zyl7bGV0IHY9MS1hLG09bCpmK2MqZCt1KmcraCp4LHA9bT49MD8xOi0xLGI9MS1tKm07aWYoYj5OdW1iZXIuRVBTSUxPTil7bGV0IFM9TWF0aC5zcXJ0KGIpLEw9TWF0aC5hdGFuMihTLG0qcCk7dj1NYXRoLnNpbih2KkwpL1MsYT1NYXRoLnNpbihhKkwpL1N9bGV0IF89YSpwO2lmKGw9bCp2K2YqXyxjPWMqditkKl8sdT11KnYrZypfLGg9aCp2K3gqXyx2PT09MS1hKXtsZXQgUz0xL01hdGguc3FydChsKmwrYypjK3UqdStoKmgpO2wqPVMsYyo9Uyx1Kj1TLGgqPVN9fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixzLG8pe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10saD1zW29dLGY9c1tvKzFdLGQ9c1tvKzJdLGc9c1tvKzNdO3JldHVybiB0W2VdPWEqZyt1KmgrbCpkLWMqZix0W2UrMV09bCpnK3UqZitjKmgtYSpkLHRbZSsyXT1jKmcrdSpkK2EqZi1sKmgsdFtlKzNdPXUqZy1hKmgtbCpmLWMqZCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighKHQmJnQuaXNFdWxlcikpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksaD1hKHMvMiksZj1sKGkvMiksZD1sKHIvMiksZz1sKHMvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4gZSE9PSExJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7bGV0IGk9ZS8yLHI9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnIsdGhpcy5feT10Lnkqcix0aGlzLl96PXQueipyLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlPXQuZWxlbWVudHMsaT1lWzBdLHI9ZVs0XSxzPWVbOF0sbz1lWzFdLGE9ZVs1XSxsPWVbOV0sYz1lWzJdLHU9ZVs2XSxoPWVbMTBdLGY9aSthK2g7aWYoZj4wKXtsZXQgZD0uNS9NYXRoLnNxcnQoZisxKTt0aGlzLl93PS4yNS9kLHRoaXMuX3g9KHUtbCkqZCx0aGlzLl95PShzLWMpKmQsdGhpcy5fej0oby1yKSpkfWVsc2UgaWYoaT5hJiZpPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDEraS1hLWgpO3RoaXMuX3c9KHUtbCkvZCx0aGlzLl94PS4yNSpkLHRoaXMuX3k9KHIrbykvZCx0aGlzLl96PShzK2MpL2R9ZWxzZSBpZihhPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDErYS1pLWgpO3RoaXMuX3c9KHMtYykvZCx0aGlzLl94PShyK28pL2QsdGhpcy5feT0uMjUqZCx0aGlzLl96PShsK3UpL2R9ZWxzZXtsZXQgZD0yKk1hdGguc3FydCgxK2gtaS1hKTt0aGlzLl93PShvLXIpL2QsdGhpcy5feD0ocytjKS9kLHRoaXMuX3k9KGwrdSkvZCx0aGlzLl96PS4yNSpkfXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgaT10LmRvdChlKSsxO3JldHVybiBpPE51bWJlci5FUFNJTE9OPyhpPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9aSk6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1pKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9aSksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhJZSh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtsZXQgaT10aGlzLmFuZ2xlVG8odCk7aWYoaT09PTApcmV0dXJuIHRoaXM7bGV0IHI9TWF0aC5taW4oMSxlL2kpO3JldHVybiB0aGlzLnNsZXJwKHQsciksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiB0PT09MD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7bGV0IGk9dC5feCxyPXQuX3kscz10Ll96LG89dC5fdyxhPWUuX3gsbD1lLl95LGM9ZS5feix1PWUuX3c7cmV0dXJuIHRoaXMuX3g9aSp1K28qYStyKmMtcypsLHRoaXMuX3k9cip1K28qbCtzKmEtaSpjLHRoaXMuX3o9cyp1K28qYytpKmwtciphLHRoaXMuX3c9byp1LWkqYS1yKmwtcypjLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoZT09PTApcmV0dXJuIHRoaXM7aWYoZT09PTEpcmV0dXJuIHRoaXMuY29weSh0KTtsZXQgaT10aGlzLl94LHI9dGhpcy5feSxzPXRoaXMuX3osbz10aGlzLl93LGE9byp0Ll93K2kqdC5feCtyKnQuX3krcyp0Ll96O2lmKGE8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixhPS1hKTp0aGlzLmNvcHkodCksYT49MSlyZXR1cm4gdGhpcy5fdz1vLHRoaXMuX3g9aSx0aGlzLl95PXIsdGhpcy5fej1zLHRoaXM7bGV0IGw9MS1hKmE7aWYobDw9TnVtYmVyLkVQU0lMT04pe2xldCBkPTEtZTtyZXR1cm4gdGhpcy5fdz1kKm8rZSp0aGlzLl93LHRoaXMuX3g9ZCppK2UqdGhpcy5feCx0aGlzLl95PWQqcitlKnRoaXMuX3ksdGhpcy5fej1kKnMrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bGV0IGM9TWF0aC5zcXJ0KGwpLHU9TWF0aC5hdGFuMihjLGEpLGg9TWF0aC5zaW4oKDEtZSkqdSkvYyxmPU1hdGguc2luKGUqdSkvYztyZXR1cm4gdGhpcy5fdz1vKmgrdGhpcy5fdypmLHRoaXMuX3g9aSpoK3RoaXMuX3gqZix0aGlzLl95PXIqaCt0aGlzLl95KmYsdGhpcy5fej1zKmgrdGhpcy5feipmLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtsZXQgdD1NYXRoLnJhbmRvbSgpLGU9TWF0aC5zcXJ0KDEtdCksaT1NYXRoLnNxcnQodCkscj0yKk1hdGguUEkqTWF0aC5yYW5kb20oKSxzPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpO3JldHVybiB0aGlzLnNldChlKk1hdGguY29zKHIpLGkqTWF0aC5zaW4ocyksaSpNYXRoLmNvcyhzKSxlKk1hdGguc2luKHIpKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTtFZS5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO3ZhciBUPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24ocmcuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbM10qaStzWzZdKnIsdGhpcy55PXNbMV0qZStzWzRdKmkrc1s3XSpyLHRoaXMuej1zWzJdKmUrc1s1XSppK3NbOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LHM9dC5lbGVtZW50cyxvPTEvKHNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSk7cmV0dXJuIHRoaXMueD0oc1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0pKm8sdGhpcy55PShzWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSkqbyx0aGlzLno9KHNbMl0qZStzWzZdKmkrc1sxMF0qcitzWzE0XSkqbyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10Lngsbz10LnksYT10LnosbD10LncsYz1sKmUrbypyLWEqaSx1PWwqaSthKmUtcypyLGg9bCpyK3MqaS1vKmUsZj0tcyplLW8qaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrZiotcyt1Ki1hLWgqLW8sdGhpcy55PXUqbCtmKi1vK2gqLXMtYyotYSx0aGlzLno9aCpsK2YqLWErYyotby11Ki1zLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIsdGhpcy55PXNbMV0qZStzWzVdKmkrc1s5XSpyLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1zKmEsdGhpcy55PXMqby1pKmwsdGhpcy56PWkqYS1yKm8sdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKGU9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBsdS5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihsdSl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIobHUuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoZT09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoSWUoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsZSozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiBpIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS1jZih0LDIpKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O1QucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgbHU9bmV3IFQscmc9bmV3IEVlLEdlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMS8wLDEvMCwxLzApLGU9bmV3IFQoLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT1JaS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYoaSE9PXZvaWQgMClpZihlJiZpLmF0dHJpYnV0ZXMhPW51bGwmJmkuYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IHM9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgbz0wLGE9cy5jb3VudDtvPGE7bysrKUlpLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxvKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KElpKX1lbHNlIGkuYm91bmRpbmdCb3g9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGN1LmNvcHkoaS5ib3VuZGluZ0JveCksY3UuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oY3UpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltzXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLElpKSxJaS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoa3MpLF9hLnN1YlZlY3RvcnModGhpcy5tYXgsa3MpLG1yLnN1YlZlY3RvcnModC5hLGtzKSxnci5zdWJWZWN0b3JzKHQuYixrcykseHIuc3ViVmVjdG9ycyh0LmMsa3MpLHFuLnN1YlZlY3RvcnMoZ3IsbXIpLFhuLnN1YlZlY3RvcnMoeHIsZ3IpLE5pLnN1YlZlY3RvcnMobXIseHIpO2xldCBlPVswLC1xbi56LHFuLnksMCwtWG4ueixYbi55LDAsLU5pLnosTmkueSxxbi56LDAsLXFuLngsWG4ueiwwLC1Ybi54LE5pLnosMCwtTmkueCwtcW4ueSxxbi54LDAsLVhuLnksWG4ueCwwLC1OaS55LE5pLngsMF07cmV0dXJuIXV1KGUsbXIsZ3IseHIsX2EpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF1dShlLG1yLGdyLHhyLF9hKSk/ITE6KHdhLmNyb3NzVmVjdG9ycyhxbixYbiksZT1bd2EueCx3YS55LHdhLnpdLHV1KGUsbXIsZ3IseHIsX2EpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBJaS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoSWkpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihBblswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBblsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoQW4pLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0dlLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIEFuPVtuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVF0sSWk9bmV3IFQsY3U9bmV3IEdlLG1yPW5ldyBULGdyPW5ldyBULHhyPW5ldyBULHFuPW5ldyBULFhuPW5ldyBULE5pPW5ldyBULGtzPW5ldyBULF9hPW5ldyBULHdhPW5ldyBULEZpPW5ldyBUO2Z1bmN0aW9uIHV1KG4sdCxlLGkscil7Zm9yKGxldCBzPTAsbz1uLmxlbmd0aC0zO3M8PW87cys9Myl7RmkuZnJvbUFycmF5KG4scyk7bGV0IGE9ci54Kk1hdGguYWJzKEZpLngpK3IueSpNYXRoLmFicyhGaS55KStyLnoqTWF0aC5hYnMoRmkueiksbD10LmRvdChGaSksYz1lLmRvdChGaSksdT1pLmRvdChGaSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIHJNPW5ldyBHZSxzZz1uZXcgVCxNYT1uZXcgVCxodT1uZXcgVCxzaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2xldCBpPXRoaXMuY2VudGVyO2UhPT12b2lkIDA/aS5jb3B5KGUpOnJNLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtzPG87cysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbc10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7aHUuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1odS5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPShpLXRoaXMucmFkaXVzKSouNTt0aGlzLmNlbnRlci5hZGQoaHUubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9NYS5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpNYS5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLmFkZChNYSkpLHRoaXMuZXhwYW5kQnlQb2ludChzZy5jb3B5KHQuY2VudGVyKS5zdWIoTWEpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxDbj1uZXcgVCxmdT1uZXcgVCxiYT1uZXcgVCxZbj1uZXcgVCxkdT1uZXcgVCxTYT1uZXcgVCxwdT1uZXcgVCxvaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsQ24pKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9Q24uc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KENuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksQ24uZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7ZnUuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLGJhLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLFluLmNvcHkodGhpcy5vcmlnaW4pLnN1YihmdSk7bGV0IHM9dC5kaXN0YW5jZVRvKGUpKi41LG89LXRoaXMuZGlyZWN0aW9uLmRvdChiYSksYT1Zbi5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LVluLmRvdChiYSksYz1Zbi5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1vKm8pLGgsZixkLGc7aWYodT4wKWlmKGg9bypsLWEsZj1vKmEtbCxnPXMqdSxoPj0wKWlmKGY+PS1nKWlmKGY8PWcpe2xldCB4PTEvdTtoKj14LGYqPXgsZD1oKihoK28qZisyKmEpK2YqKG8qaCtmKzIqbCkrY31lbHNlIGY9cyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LXMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZz8oaD1NYXRoLm1heCgwLC0oLW8qcythKSksZj1oPjA/LXM6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk6Zjw9Zz8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShvKnMrYSkpLGY9aD4wP3M6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPW8+MD8tczpzLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KGJhKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoZnUpLGR9aW50ZXJzZWN0U3BoZXJlKHQsZSl7Q24uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9Q24uZG90KHRoaXMuZGlyZWN0aW9uKSxyPUNuLmRvdChDbiktaSppLHM9dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5zKXJldHVybiBudWxsO2xldCBvPU1hdGguc3FydChzLXIpLGE9aS1vLGw9aStvO3JldHVybiBhPDAmJmw8MD9udWxsOmE8MD90aGlzLmF0KGwsZSk6dGhpcy5hdChhLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZihlPT09MClyZXR1cm4gdC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPT09MD8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIGk9PT1udWxsP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIGU9PT0wfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLHMsbyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksaD0xL3RoaXMuZGlyZWN0aW9uLnosZj10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1mLngpKmMscj0odC5tYXgueC1mLngpKmMpOihpPSh0Lm1heC54LWYueCkqYyxyPSh0Lm1pbi54LWYueCkqYyksdT49MD8ocz0odC5taW4ueS1mLnkpKnUsbz0odC5tYXgueS1mLnkpKnUpOihzPSh0Lm1heC55LWYueSkqdSxvPSh0Lm1pbi55LWYueSkqdSksaT5vfHxzPnJ8fCgocz5pfHxpIT09aSkmJihpPXMpLChvPHJ8fHIhPT1yKSYmKHI9byksaD49MD8oYT0odC5taW4uei1mLnopKmgsbD0odC5tYXguei1mLnopKmgpOihhPSh0Lm1heC56LWYueikqaCxsPSh0Lm1pbi56LWYueikqaCksaT5sfHxhPnIpfHwoKGE+aXx8aSE9PWkpJiYoaT1hKSwobDxyfHxyIT09cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KHQsQ24pIT09bnVsbH1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLHMpe2R1LnN1YlZlY3RvcnMoZSx0KSxTYS5zdWJWZWN0b3JzKGksdCkscHUuY3Jvc3NWZWN0b3JzKGR1LFNhKTtsZXQgbz10aGlzLmRpcmVjdGlvbi5kb3QocHUpLGE7aWYobz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNlIGlmKG88MClhPS0xLG89LW87ZWxzZSByZXR1cm4gbnVsbDtZbi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFNhLmNyb3NzVmVjdG9ycyhZbixTYSkpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChkdS5jcm9zcyhZbikpO2lmKGM8MHx8bCtjPm8pcmV0dXJuIG51bGw7bGV0IHU9LWEqWW4uZG90KHB1KTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L28scyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LHd0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2KXtsZXQgbT10aGlzLmVsZW1lbnRzO3JldHVybiBtWzBdPXQsbVs0XT1lLG1bOF09aSxtWzEyXT1yLG1bMV09cyxtWzVdPW8sbVs5XT1hLG1bMTNdPWwsbVsyXT1jLG1bNl09dSxtWzEwXT1oLG1bMTRdPWYsbVszXT1kLG1bN109ZyxtWzExXT14LG1bMTVdPXYsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB3dCgpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCkscz0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKnMsZVs1XT1pWzVdKnMsZVs2XT1pWzZdKnMsZVs3XT0wLGVbOF09aVs4XSpvLGVbOV09aVs5XSpvLGVbMTBdPWlbMTBdKm8sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56LG89TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksdT1NYXRoLmNvcyhzKSxoPU1hdGguc2luKHMpO2lmKHQub3JkZXI9PT0iWFlaIil7bGV0IGY9byp1LGQ9bypoLGc9YSp1LHg9YSpoO2VbMF09bCp1LGVbNF09LWwqaCxlWzhdPWMsZVsxXT1kK2cqYyxlWzVdPWYteCpjLGVbOV09LWEqbCxlWzJdPXgtZipjLGVbNl09ZytkKmMsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWFoiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mK3gqYSxlWzRdPWcqYS1kLGVbOF09bypjLGVbMV09bypoLGVbNV09byp1LGVbOV09LWEsZVsyXT1kKmEtZyxlWzZdPXgrZiphLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWlhZIil7bGV0IGY9bCp1LGQ9bCpoLGc9Yyp1LHg9YypoO2VbMF09Zi14KmEsZVs0XT0tbypoLGVbOF09ZytkKmEsZVsxXT1kK2cqYSxlWzVdPW8qdSxlWzldPXgtZiphLGVbMl09LW8qYyxlWzZdPWEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWVgiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT1nKmMtZCxlWzhdPWYqYyt4LGVbMV09bCpoLGVbNV09eCpjK2YsZVs5XT1kKmMtZyxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWVpYIil7bGV0IGY9bypsLGQ9bypjLGc9YSpsLHg9YSpjO2VbMF09bCp1LGVbNF09eC1mKmgsZVs4XT1nKmgrZCxlWzFdPWgsZVs1XT1vKnUsZVs5XT0tYSp1LGVbMl09LWMqdSxlWzZdPWQqaCtnLGVbMTBdPWYteCpofWVsc2UgaWYodC5vcmRlcj09PSJYWlkiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT0taCxlWzhdPWMqdSxlWzFdPWYqaCt4LGVbNV09byp1LGVbOV09ZCpoLWcsZVsyXT1nKmgtZCxlWzZdPWEqdSxlWzEwXT14KmgrZn1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKHNNLHQsb00pfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4ga2Uuc3ViVmVjdG9ycyh0LGUpLGtlLmxlbmd0aFNxKCk9PT0wJiYoa2Uuej0xKSxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSksWm4ubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhpLnopPT09MT9rZS54Kz0xZS00OmtlLnorPTFlLTQsa2Uubm9ybWFsaXplKCksWm4uY3Jvc3NWZWN0b3JzKGksa2UpKSxabi5ub3JtYWxpemUoKSxFYS5jcm9zc1ZlY3RvcnMoa2UsWm4pLHJbMF09Wm4ueCxyWzRdPUVhLngscls4XT1rZS54LHJbMV09Wm4ueSxyWzVdPUVhLnkscls5XT1rZS55LHJbMl09Wm4ueixyWzZdPUVhLnosclsxMF09a2Uueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMscz10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGg9aVs1XSxmPWlbOV0sZD1pWzEzXSxnPWlbMl0seD1pWzZdLHY9aVsxMF0sbT1pWzE0XSxwPWlbM10sYj1pWzddLF89aVsxMV0sUz1pWzE1XSxMPXJbMF0sQT1yWzRdLEg9cls4XSx0dD1yWzEyXSxYPXJbMV0seT1yWzVdLFI9cls5XSxEPXJbMTNdLEY9clsyXSx6PXJbNl0sTj1yWzEwXSxWPXJbMTRdLFE9clszXSxhdD1yWzddLEc9clsxMV0sJD1yWzE1XTtyZXR1cm4gc1swXT1vKkwrYSpYK2wqRitjKlEsc1s0XT1vKkErYSp5K2wqeitjKmF0LHNbOF09bypIK2EqUitsKk4rYypHLHNbMTJdPW8qdHQrYSpEK2wqVitjKiQsc1sxXT11KkwraCpYK2YqRitkKlEsc1s1XT11KkEraCp5K2YqeitkKmF0LHNbOV09dSpIK2gqUitmKk4rZCpHLHNbMTNdPXUqdHQraCpEK2YqVitkKiQsc1syXT1nKkwreCpYK3YqRittKlEsc1s2XT1nKkEreCp5K3YqeittKmF0LHNbMTBdPWcqSCt4KlIrdipOK20qRyxzWzE0XT1nKnR0K3gqRCt2KlYrbSokLHNbM109cCpMK2IqWCtfKkYrUypRLHNbN109cCpBK2IqeStfKnorUyphdCxzWzExXT1wKkgrYipSK18qTitTKkcsc1sxNV09cCp0dCtiKkQrXypWK1MqJCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0scz10WzEyXSxvPXRbMV0sYT10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxkPXRbMTRdLGc9dFszXSx4PXRbN10sdj10WzExXSxtPXRbMTVdO3JldHVybiBnKigrcypsKmgtcipjKmgtcyphKmYraSpjKmYrciphKmQtaSpsKmQpK3gqKCtlKmwqZC1lKmMqZitzKm8qZi1yKm8qZCtyKmMqdS1zKmwqdSkrdiooK2UqYypoLWUqYSpkLXMqbypoK2kqbypkK3MqYSp1LWkqYyp1KSttKigtciphKnUtZSpsKmgrZSphKmYrcipvKmgtaSpvKmYraSpsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMsZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnopOihyWzEyXT10LHJbMTNdPWUsclsxNF09aSksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLHM9dFszXSxvPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLGQ9dFsxMV0sZz10WzEyXSx4PXRbMTNdLHY9dFsxNF0sbT10WzE1XSxwPWgqdipjLXgqZipjK3gqbCpkLWEqdipkLWgqbCptK2EqZiptLGI9ZypmKmMtdSp2KmMtZypsKmQrbyp2KmQrdSpsKm0tbypmKm0sXz11KngqYy1nKmgqYytnKmEqZC1vKngqZC11KmEqbStvKmgqbSxTPWcqaCpsLXUqeCpsLWcqYSpmK28qeCpmK3UqYSp2LW8qaCp2LEw9ZSpwK2kqYityKl8rcypTO2lmKEw9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgQT0xL0w7cmV0dXJuIHRbMF09cCpBLHRbMV09KHgqZipzLWgqdipzLXgqcipkK2kqdipkK2gqciptLWkqZiptKSpBLHRbMl09KGEqdipzLXgqbCpzK3gqcipjLWkqdipjLWEqciptK2kqbCptKSpBLHRbM109KGgqbCpzLWEqZipzLWgqcipjK2kqZipjK2EqcipkLWkqbCpkKSpBLHRbNF09YipBLHRbNV09KHUqdipzLWcqZipzK2cqcipkLWUqdipkLXUqciptK2UqZiptKSpBLHRbNl09KGcqbCpzLW8qdipzLWcqcipjK2UqdipjK28qciptLWUqbCptKSpBLHRbN109KG8qZipzLXUqbCpzK3UqcipjLWUqZipjLW8qcipkK2UqbCpkKSpBLHRbOF09XypBLHRbOV09KGcqaCpzLXUqeCpzLWcqaSpkK2UqeCpkK3UqaSptLWUqaCptKSpBLHRbMTBdPShvKngqcy1nKmEqcytnKmkqYy1lKngqYy1vKmkqbStlKmEqbSkqQSx0WzExXT0odSphKnMtbypoKnMtdSppKmMrZSpoKmMrbyppKmQtZSphKmQpKkEsdFsxMl09UypBLHRbMTNdPSh1Kngqci1nKmgqcitnKmkqZi1lKngqZi11KmkqditlKmgqdikqQSx0WzE0XT0oZyphKnItbyp4KnItZyppKmwrZSp4KmwrbyppKnYtZSphKnYpKkEsdFsxNV09KG8qaCpyLXUqYSpyK3UqaSpsLWUqaCpsLW8qaSpmK2UqYSpmKSpBLHRoaXN9c2NhbGUodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxzPXQuejtyZXR1cm4gZVswXSo9aSxlWzRdKj1yLGVbOF0qPXMsZVsxXSo9aSxlWzVdKj1yLGVbOV0qPXMsZVsyXSo9aSxlWzZdKj1yLGVbMTBdKj1zLGVbM10qPWksZVs3XSo9cixlWzExXSo9cyx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLGk9dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0scj10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoZSxpLHIpKX1tYWtlVHJhbnNsYXRpb24odCxlLGkpe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsaSwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLWksMCwwLGksZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLDAsaSwwLDAsMSwwLDAsLWksMCxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLWksMCwwLGksZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLHM9MS1pLG89dC54LGE9dC55LGw9dC56LGM9cypvLHU9cyphO3JldHVybiB0aGlzLnNldChjKm8raSxjKmEtcipsLGMqbCtyKmEsMCxjKmErcipsLHUqYStpLHUqbC1yKm8sMCxjKmwtciphLHUqbCtyKm8scypsKmwraSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxpLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLGkscixzLG8pe3JldHVybiB0aGlzLnNldCgxLGkscywwLHQsMSxvLDAsZSxyLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz1lLl94LG89ZS5feSxhPWUuX3osbD1lLl93LGM9cytzLHU9bytvLGg9YSthLGY9cypjLGQ9cyp1LGc9cypoLHg9byp1LHY9bypoLG09YSpoLHA9bCpjLGI9bCp1LF89bCpoLFM9aS54LEw9aS55LEE9aS56O3JldHVybiByWzBdPSgxLSh4K20pKSpTLHJbMV09KGQrXykqUyxyWzJdPShnLWIpKlMsclszXT0wLHJbNF09KGQtXykqTCxyWzVdPSgxLShmK20pKSpMLHJbNl09KHYrcCkqTCxyWzddPTAscls4XT0oZytiKSpBLHJbOV09KHYtcCkqQSxyWzEwXT0oMS0oZit4KSkqQSxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz15ci5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLG89eXIuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxhPXlyLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYocz0tcyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0sS2UuY29weSh0aGlzKTtsZXQgYz0xL3MsdT0xL28saD0xL2E7cmV0dXJuIEtlLmVsZW1lbnRzWzBdKj1jLEtlLmVsZW1lbnRzWzFdKj1jLEtlLmVsZW1lbnRzWzJdKj1jLEtlLmVsZW1lbnRzWzRdKj11LEtlLmVsZW1lbnRzWzVdKj11LEtlLmVsZW1lbnRzWzZdKj11LEtlLmVsZW1lbnRzWzhdKj1oLEtlLmVsZW1lbnRzWzldKj1oLEtlLmVsZW1lbnRzWzEwXSo9aCxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChLZSksaS54PXMsaS55PW8saS56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixzLG8pe289PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBhPXRoaXMuZWxlbWVudHMsbD0yKnMvKGUtdCksYz0yKnMvKGktciksdT0oZSt0KS8oZS10KSxoPShpK3IpLyhpLXIpLGY9LShvK3MpLyhvLXMpLGQ9LTIqbypzLyhvLXMpO3JldHVybiBhWzBdPWwsYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1oLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1mLGFbMTRdPWQsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8oby1zKSxoPShlK3QpKmwsZj0oaStyKSpjLGQ9KG8rcykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0taCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1mLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07d3QucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgeXI9bmV3IFQsS2U9bmV3IHd0LHNNPW5ldyBUKDAsMCwwKSxvTT1uZXcgVCgxLDEsMSksWm49bmV3IFQsRWE9bmV3IFQsa2U9bmV3IFQsb2c9bmV3IHd0LGFnPW5ldyBFZSxhaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPWFpLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLHM9clswXSxvPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxmPXJbNl0sZD1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEllKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUllKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxkKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihJZShmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1JZShoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsZCksdGhpcy5fej1NYXRoLmF0YW4yKGwscykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oSWUobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgscykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtSWUobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKC11LGQpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSxpPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gb2cubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgob2csZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBhZy5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhZyx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx0WzNdIT09dm9pZCAwJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBUKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07YWkucHJvdG90eXBlLmlzRXVsZXI9ITA7YWkuRGVmYXVsdE9yZGVyPSJYWVoiO2FpLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIGlsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4odGhpcy5tYXNrJnQubWFzaykhPT0wfWlzRW5hYmxlZCh0KXtyZXR1cm4odGhpcy5tYXNrJigxPDx0fDApKSE9PTB9fSxhTT0wLGxnPW5ldyBULHZyPW5ldyBFZSxSbj1uZXcgd3QsVGE9bmV3IFQsSHM9bmV3IFQsbE09bmV3IFQsY009bmV3IEVlLGNnPW5ldyBUKDEsMCwwKSx1Zz1uZXcgVCgwLDEsMCksaGc9bmV3IFQoMCwwLDEpLHVNPXt0eXBlOiJhZGRlZCJ9LGZnPXt0eXBlOiJyZW1vdmVkIn0sa3Q9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6YU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1rdC5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgVCxlPW5ldyBhaSxpPW5ldyBFZSxyPW5ldyBUKDEsMSwxKTtmdW5jdGlvbiBzKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9ZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfWUuX29uQ2hhbmdlKHMpLGkuX29uQ2hhbmdlKG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IHd0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBkZX19KSx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5tYXRyaXhXb3JsZD1uZXcgd3QsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPWt0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgaWwsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQsZSl7cmV0dXJuIHZyLnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkodnIpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ciksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhjZyx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh1Zyx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhoZyx0KX10cmFuc2xhdGVPbkF4aXModCxlKXtyZXR1cm4gbGcuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChsZy5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhjZyx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1Zyx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhoZyx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9UYS5jb3B5KHQpOlRhLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9Sbi5sb29rQXQoSHMsVGEsdGhpcy51cCk6Um4ubG9va0F0KFRhLEhzLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHImJihSbi5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksdnIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJuKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodnIuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KHQucGFyZW50IT09bnVsbCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudCh1TSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIGUhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoZmcpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChmZyl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdC5wYXJlbnQhPT1udWxsJiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoUm4pLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBvPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG99fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSHMsdCxsTSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyxjTSx0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCBlPXRoaXMucGFyZW50O2UhPT1udWxsJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7bGV0IGk9dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZpIT09bnVsbCYmaS51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksZT09PSEwKXtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKylyW3NdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixpPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxpLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCByPXt9O3IudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHIubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoci5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKHIucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihyLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoci5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBzKGEsbCl7cmV0dXJuIGFbbC51dWlkXT09PXZvaWQgMCYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9yLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihyLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihyLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtyLmdlb21ldHJ5PXModC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBhPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihhIT09dm9pZCAwJiZhLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9YS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107cyh0LnNoYXBlcyxoKX1lbHNlIHModC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKHIuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxyLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYocyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxyLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IGE9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKWEucHVzaChzKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtyLm1hdGVyaWFsPWF9ZWxzZSByLm1hdGVyaWFsPXModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7ci5jaGlsZHJlbj1bXTtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlblthXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe3IuYW5pbWF0aW9ucz1bXTtmb3IobGV0IGE9MDthPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7YSsrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbYV07ci5hbmltYXRpb25zLnB1c2gocyh0LmFuaW1hdGlvbnMsbCkpfX1pZihlKXtsZXQgYT1vKHQuZ2VvbWV0cmllcyksbD1vKHQubWF0ZXJpYWxzKSxjPW8odC50ZXh0dXJlcyksdT1vKHQuaW1hZ2VzKSxoPW8odC5zaGFwZXMpLGY9byh0LnNrZWxldG9ucyksZD1vKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihpLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9ZiksZC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1kKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIG8oYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxlPT09ITApZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCByPXQuY2hpbGRyZW5baV07dGhpcy5hZGQoci5jbG9uZSgpKX1yZXR1cm4gdGhpc319O2t0LkRlZmF1bHRVcD1uZXcgVCgwLDEsMCk7a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7a3QucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIFFlPW5ldyBULExuPW5ldyBULG11PW5ldyBULFBuPW5ldyBULF9yPW5ldyBULHdyPW5ldyBULGRnPW5ldyBULGd1PW5ldyBULHh1PW5ldyBULHl1PW5ldyBULHJlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLFFlLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKFFlKTtsZXQgcz1yLmxlbmd0aFNxKCk7cmV0dXJuIHM+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KHMpKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLHMpe1FlLnN1YlZlY3RvcnMocixlKSxMbi5zdWJWZWN0b3JzKGksZSksbXUuc3ViVmVjdG9ycyh0LGUpO2xldCBvPVFlLmRvdChRZSksYT1RZS5kb3QoTG4pLGw9UWUuZG90KG11KSxjPUxuLmRvdChMbiksdT1Mbi5kb3QobXUpLGg9bypjLWEqYTtpZihoPT09MClyZXR1cm4gcy5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxkPShjKmwtYSp1KSpmLGc9KG8qdS1hKmwpKmY7cmV0dXJuIHMuc2V0KDEtZC1nLGcsZCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsUG4pLFBuLng+PTAmJlBuLnk+PTAmJlBuLngrUG4ueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixzLG8sYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihzLFBuLngpLGwuYWRkU2NhbGVkVmVjdG9yKG8sUG4ueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxQbi56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBRZS5zdWJWZWN0b3JzKGksZSksTG4uc3ViVmVjdG9ycyh0LGUpLFFlLmNyb3NzKExuKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gUWUuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxMbi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLFFlLmNyb3NzKExuKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiByZS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gcmUuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixzKXtyZXR1cm4gcmUuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixzKX1jb250YWluc1BvaW50KHQpe3JldHVybiByZS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIHJlLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBpPXRoaXMuYSxyPXRoaXMuYixzPXRoaXMuYyxvLGE7X3Iuc3ViVmVjdG9ycyhyLGkpLHdyLnN1YlZlY3RvcnMocyxpKSxndS5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9X3IuZG90KGd1KSxjPXdyLmRvdChndSk7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO3h1LnN1YlZlY3RvcnModCxyKTtsZXQgdT1fci5kb3QoeHUpLGg9d3IuZG90KHh1KTtpZih1Pj0wJiZoPD11KXJldHVybiBlLmNvcHkocik7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBvPWwvKGwtdSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKTt5dS5zdWJWZWN0b3JzKHQscyk7bGV0IGQ9X3IuZG90KHl1KSxnPXdyLmRvdCh5dSk7aWYoZz49MCYmZDw9ZylyZXR1cm4gZS5jb3B5KHMpO2xldCB4PWQqYy1sKmc7aWYoeDw9MCYmYz49MCYmZzw9MClyZXR1cm4gYT1jLyhjLWcpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSk7bGV0IHY9dSpnLWQqaDtpZih2PD0wJiZoLXU+PTAmJmQtZz49MClyZXR1cm4gZGcuc3ViVmVjdG9ycyhzLHIpLGE9KGgtdSkvKGgtdSsoZC1nKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihkZyxhKTtsZXQgbT0xLyh2K3grZik7cmV0dXJuIG89eCptLGE9ZiptLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoX3IsbykuYWRkU2NhbGVkVmVjdG9yKHdyLGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LGhNPTAseGU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aE0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPUtzLHRoaXMuc2lkZT1lbyx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9dTAsdGhpcy5ibGVuZERzdD1oMCx0aGlzLmJsZW5kRXF1YXRpb249SXIsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz16dSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPXRNLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW51LHRoaXMuc3RlbmNpbFpGYWlsPW51LHRoaXMuc3RlbmNpbFpQYXNzPW51LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYoaT09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKGU9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9aT09PWMwO2NvbnRpbnVlfWxldCByPXRoaXNbZV07aWYocj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIik7Y29udGludWV9ciYmci5pc0NvbG9yP3Iuc2V0KGkpOnImJnIuaXNWZWN0b3IzJiZpJiZpLmlzVmVjdG9yMz9yLmNvcHkoaSk6dGhpc1tlXT1pfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2UmJih0PXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihpLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHRoaXMucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHRoaXMubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXRoaXMuc2hlZW4pLHRoaXMuc2hlZW5Db2xvciYmdGhpcy5zaGVlbkNvbG9yLmlzQ29sb3ImJihpLnNoZWVuQ29sb3I9dGhpcy5zaGVlbkNvbG9yLmdldEhleCgpKSx0aGlzLnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10aGlzLnNoZWVuUm91Z2huZXNzKSx0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihpLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJnRoaXMuZW1pc3NpdmVJbnRlbnNpdHkhPT0xJiYoaS5lbWlzc2l2ZUludGVuc2l0eT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihpLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXJDb2xvciYmdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3ImJihpLnNwZWN1bGFyQ29sb3I9dGhpcy5zcGVjdWxhckNvbG9yLmdldEhleCgpKSx0aGlzLnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx0aGlzLmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx0aGlzLmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihpLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKGkubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKGkuYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihpLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQsaS5saWdodE1hcEludGVuc2l0eT10aGlzLmxpZ2h0TWFwSW50ZW5zaXR5KSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKGkuYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxpLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKGkuYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsaS5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihpLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLGkubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihpLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxpLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsaS5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoaS5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCYmdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPXRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJDb2xvck1hcCYmdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJDb2xvck1hcD10aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihpLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04odCkudXVpZCx0aGlzLmNvbWJpbmUhPT12b2lkIDAmJihpLmNvbWJpbmU9dGhpcy5jb21iaW5lKSksdGhpcy5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSksdGhpcy5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSksdGhpcy5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10aGlzLnJlZnJhY3Rpb25SYXRpbyksdGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihpLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dGhpcy50cmFuc21pc3Npb24pLHRoaXMudHJhbnNtaXNzaW9uTWFwJiZ0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUmJihpLnRyYW5zbWlzc2lvbk1hcD10aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04odCkudXVpZCksdGhpcy50aGlja25lc3MhPT12b2lkIDAmJihpLnRoaWNrbmVzcz10aGlzLnRoaWNrbmVzcyksdGhpcy50aGlja25lc3NNYXAmJnRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSYmKGkudGhpY2tuZXNzTWFwPXRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0aGlzLmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uQ29sb3I9dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmdldEhleCgpKSx0aGlzLnNpemUhPT12b2lkIDAmJihpLnNpemU9dGhpcy5zaXplKSx0aGlzLnNoYWRvd1NpZGUhPT1udWxsJiYoaS5zaGFkb3dTaWRlPXRoaXMuc2hhZG93U2lkZSksdGhpcy5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksdGhpcy5ibGVuZGluZyE9PUtzJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSx0aGlzLnNpZGUhPT1lbyYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksdGhpcy50cmFuc3BhcmVudD09PSEwJiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiZ0aGlzLnJvdGF0aW9uIT09MCYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksdGhpcy5wb2x5Z29uT2Zmc2V0PT09ITAmJihpLnBvbHlnb25PZmZzZXQ9ITApLHRoaXMucG9seWdvbk9mZnNldEZhY3RvciE9PTAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0aGlzLnBvbHlnb25PZmZzZXRVbml0cyE9PTAmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJnRoaXMubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx0aGlzLmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx0aGlzLmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx0aGlzLnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10aGlzLnNjYWxlKSx0aGlzLmRpdGhlcmluZz09PSEwJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksdGhpcy5hbHBoYVRvQ292ZXJhZ2U9PT0hMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT09PSEwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLHRoaXMud2lyZWZyYW1lPT09ITAmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSx0aGlzLndpcmVmcmFtZUxpbmVjYXAhPT0icm91bmQiJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksdGhpcy53aXJlZnJhbWVMaW5lam9pbiE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLHRoaXMuZmxhdFNoYWRpbmc9PT0hMCYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMudG9uZU1hcHBlZD09PSExJiYoaS50b25lTWFwcGVkPSExKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO2Z1bmN0aW9uIHIocyl7bGV0IG89W107Zm9yKGxldCBhIGluIHMpe2xldCBsPXNbYV07ZGVsZXRlIGwubWV0YWRhdGEsby5wdXNoKGwpfXJldHVybiBvfWlmKGUpe2xldCBzPXIodC50ZXh0dXJlcyksbz1yKHQuaW1hZ2VzKTtzLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1zKSxvLmxlbmd0aD4wJiYoaS5pbWFnZXM9byl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYoZSE9PW51bGwpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW3NdPWVbc10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt4ZS5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIga2k9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2tpLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBKdD1uZXcgVCxBYT1uZXcgSyxRdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPWk9PT0hMCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5pdGVtU2l6ZSxpKj1lLml0ZW1TaXplO2ZvcihsZXQgcj0wLHM9dGhpcy5pdGVtU2l6ZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IGZ0KSxlW2krK109by5yLGVbaSsrXT1vLmcsZVtpKytdPW8uYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IEspLGVbaSsrXT1vLngsZVtpKytdPW8ueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IFQpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgV3QpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56LGVbaSsrXT1vLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUFhLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxBYS5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLEFhLngsQWEueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSnQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPXMsdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1pbyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1F0LnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgcmw9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fTt2YXIgc2w9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fSxXdT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O1d1LnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGVlPWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19O3ZhciBmTT0wLHFlPW5ldyB3dCx2dT1uZXcga3QsTXI9bmV3IFQsSGU9bmV3IEdlLFZzPW5ldyBHZSxnZT1uZXcgVCxIdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpmTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KHAwKHQpP3NsOnJsKSh0LDEpOnRoaXMuaW5kZXg9dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdIT09dm9pZCAwfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO2UhPT12b2lkIDAmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKGkhPT12b2lkIDApe2xldCBzPW5ldyBkZSgpLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KHMpLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHIhPT12b2lkIDAmJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSx0aGlzLmJvdW5kaW5nQm94IT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nU3BoZXJlIT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVZKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHFlLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9bG9va0F0KHQpe3JldHVybiB2dS5sb29rQXQodCksdnUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQodnUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKE1yKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShNci54LE1yLnksTXIueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dFtpXTtlLnB1c2gocy54LHMueSxzLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe3RoaXMuYm91bmRpbmdCb3g9PT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1uZXcgR2UpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyBUKC0xLzAsLTEvMCwtMS8wKSxuZXcgVCgxLzAsMS8wLDEvMCkpO3JldHVybn1pZih0IT09dm9pZCAwKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2xldCBzPWVbaV07SGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShzKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSxnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEhlLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5tYXgpKX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe3RoaXMuYm91bmRpbmdTcGhlcmU9PT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgc2kpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBULDEvMCk7cmV0dXJufWlmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEhlLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2xldCBhPWVbc107VnMuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShhKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKEhlLm1pbixWcy5taW4pLEhlLmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnMoSGUubWF4LFZzLm1heCksSGUuZXhwYW5kQnlQb2ludChnZSkpOihIZS5leHBhbmRCeVBvaW50KFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChWcy5tYXgpKX1IZS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQuY291bnQ7czxvO3MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQscykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKTtpZihlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsdT1hLmNvdW50O2M8dTtjKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihNci5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksZ2UuYWRkKE1yKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZih0PT09bnVsbHx8ZS5wb3NpdGlvbj09PXZvaWQgMHx8ZS5ub3JtYWw9PT12b2lkIDB8fGUudXY9PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO3JldHVybn1sZXQgaT10LmFycmF5LHI9ZS5wb3NpdGlvbi5hcnJheSxzPWUubm9ybWFsLmFycmF5LG89ZS51di5hcnJheSxhPXIubGVuZ3RoLzM7ZS50YW5nZW50PT09dm9pZCAwJiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoNCphKSw0KSk7bGV0IGw9ZS50YW5nZW50LmFycmF5LGM9W10sdT1bXTtmb3IobGV0IFg9MDtYPGE7WCsrKWNbWF09bmV3IFQsdVtYXT1uZXcgVDtsZXQgaD1uZXcgVCxmPW5ldyBULGQ9bmV3IFQsZz1uZXcgSyx4PW5ldyBLLHY9bmV3IEssbT1uZXcgVCxwPW5ldyBUO2Z1bmN0aW9uIGIoWCx5LFIpe2guZnJvbUFycmF5KHIsWCozKSxmLmZyb21BcnJheShyLHkqMyksZC5mcm9tQXJyYXkocixSKjMpLGcuZnJvbUFycmF5KG8sWCoyKSx4LmZyb21BcnJheShvLHkqMiksdi5mcm9tQXJyYXkobyxSKjIpLGYuc3ViKGgpLGQuc3ViKGgpLHguc3ViKGcpLHYuc3ViKGcpO2xldCBEPTEvKHgueCp2Lnktdi54KngueSk7IWlzRmluaXRlKEQpfHwobS5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKHYueSkuYWRkU2NhbGVkVmVjdG9yKGQsLXgueSkubXVsdGlwbHlTY2FsYXIoRCkscC5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKHgueCkuYWRkU2NhbGVkVmVjdG9yKGYsLXYueCkubXVsdGlwbHlTY2FsYXIoRCksY1tYXS5hZGQobSksY1t5XS5hZGQobSksY1tSXS5hZGQobSksdVtYXS5hZGQocCksdVt5XS5hZGQocCksdVtSXS5hZGQocCkpfWxldCBfPXRoaXMuZ3JvdXBzO18ubGVuZ3RoPT09MCYmKF89W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKWIoaVt6KzBdLGlbeisxXSxpW3orMl0pfWxldCBTPW5ldyBULEw9bmV3IFQsQT1uZXcgVCxIPW5ldyBUO2Z1bmN0aW9uIHR0KFgpe0EuZnJvbUFycmF5KHMsWCozKSxILmNvcHkoQSk7bGV0IHk9Y1tYXTtTLmNvcHkoeSksUy5zdWIoQS5tdWx0aXBseVNjYWxhcihBLmRvdCh5KSkpLm5vcm1hbGl6ZSgpLEwuY3Jvc3NWZWN0b3JzKEgseSk7bGV0IEQ9TC5kb3QodVtYXSk8MD8tMToxO2xbWCo0XT1TLngsbFtYKjQrMV09Uy55LGxbWCo0KzJdPVMueixsW1gqNCszXT1EfWZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKXR0KGlbeiswXSksdHQoaVt6KzFdKSx0dChpW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihlIT09dm9pZCAwKXtsZXQgaT10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYoaT09PXZvaWQgMClpPW5ldyBRdChuZXcgRmxvYXQzMkFycmF5KGUuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsaSk7ZWxzZSBmb3IobGV0IGY9MCxkPWkuY291bnQ7ZjxkO2YrKylpLnNldFhZWihmLDAsMCwwKTtsZXQgcj1uZXcgVCxzPW5ldyBULG89bmV3IFQsYT1uZXcgVCxsPW5ldyBULGM9bmV3IFQsdT1uZXcgVCxoPW5ldyBUO2lmKHQpZm9yKGxldCBmPTAsZD10LmNvdW50O2Y8ZDtmKz0zKXtsZXQgZz10LmdldFgoZiswKSx4PXQuZ2V0WChmKzEpLHY9dC5nZXRYKGYrMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZykscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdiksdS5zdWJWZWN0b3JzKG8scyksaC5zdWJWZWN0b3JzKHIscyksdS5jcm9zcyhoKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxnKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx2KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihnLGEueCxhLnksYS56KSxpLnNldFhZWih4LGwueCxsLnksbC56KSxpLnNldFhZWih2LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLGQ9ZS5jb3VudDtmPGQ7Zis9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzApLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisyKSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGkuc2V0WFlaKGYrMCx1LngsdS55LHUueiksaS5zZXRYWVooZisxLHUueCx1LnksdS56KSxpLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59ZT09PXZvaWQgMCYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHQuYXR0cmlidXRlc1tyXT09PXZvaWQgMCljb250aW51ZTtsZXQgbz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLG8ubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylvW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLGdlLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsZ2UueCxnZS55LGdlLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxoPWEubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGQ9MCxnPTA7Zm9yKGxldCB4PTAsdj1sLmxlbmd0aDt4PHY7eCsrKXthLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ZD1sW3hdKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6ZD1sW3hdKnU7Zm9yKGxldCBtPTA7bTx1O20rKylmW2crK109Y1tkKytdfXJldHVybiBuZXcgUXQoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IGU9bmV3IEh0LGk9dGhpcy5pbmRleC5hcnJheSxyPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGEgaW4gcil7bGV0IGw9clthXSxjPXQobCxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBzPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBzKXtsZXQgbD1bXSxjPXNbYV07Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLGQ9dChmLGkpO2wucHVzaChkKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPW8ubGVuZ3RoO2E8bDthKyspe2xldCBjPW9bYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O2UhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl7bGV0IGM9aVtsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCByPXt9LHM9ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9Y1toXTt1LnB1c2goZC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKHJbbF09dSxzPSEwKX1zJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgbz10aGlzLmdyb3VwcztvLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gYSE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IGU9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgaT10LmluZGV4O2khPT1udWxsJiZ0aGlzLnNldEluZGV4KGkuY2xvbmUoZSkpO2xldCByPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gcil7bGV0IHU9cltjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUoZSkpfWxldCBzPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1bXSxoPXNbY107Zm9yKGxldCBmPTAsZD1oLmxlbmd0aDtmPGQ7ZisrKXUucHVzaChoW2ZdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PW8ubGVuZ3RoO2M8dTtjKyspe2xldCBoPW9bY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgYT10LmJvdW5kaW5nQm94O2EhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtIdC5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgcGc9bmV3IHd0LGJyPW5ldyBvaSxfdT1uZXcgc2ksSm49bmV3IFQsJG49bmV3IFQsS249bmV3IFQsd3U9bmV3IFQsTXU9bmV3IFQsYnU9bmV3IFQsQ2E9bmV3IFQsUmE9bmV3IFQsTGE9bmV3IFQsUGE9bmV3IEssRGE9bmV3IEssSWE9bmV3IEssU3U9bmV3IFQsTmE9bmV3IFQsb2U9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0PW5ldyBIdCxlPW5ldyBraSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYociE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXtsZXQgYT1yW3NdLm5hbWV8fFN0cmluZyhzKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPXN9fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0cztlIT09dm9pZCAwJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxzPXRoaXMubWF0cml4V29ybGQ7aWYocj09PXZvaWQgMHx8KGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLF91LmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksX3UuYXBwbHlNYXRyaXg0KHMpLHQucmF5LmludGVyc2VjdHNTcGhlcmUoX3UpPT09ITEpfHwocGcuY29weShzKS5pbnZlcnQoKSxici5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQocGcpLGkuYm91bmRpbmdCb3ghPT1udWxsJiZici5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgbztpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1pLmF0dHJpYnV0ZXMudXYsZj1pLmF0dHJpYnV0ZXMudXYyLGQ9aS5ncm91cHMsZz1pLmRyYXdSYW5nZTtpZihhIT09bnVsbClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPWEuZ2V0WChTKSxIPWEuZ2V0WChTKzEpLHR0PWEuZ2V0WChTKzIpO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4oYS5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9YS5nZXRYKG0pLF89YS5nZXRYKG0rMSksUz1hLmdldFgobSsyKTtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHg9MCx2PWQubGVuZ3RoO3g8djt4Kyspe2xldCBtPWRbeF0scD1yW20ubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heChtLnN0YXJ0LGcuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbihtLnN0YXJ0K20uY291bnQsZy5zdGFydCtnLmNvdW50KSk7Zm9yKGxldCBTPWIsTD1fO1M8TDtTKz0zKXtsZXQgQT1TLEg9UysxLHR0PVMrMjtvPUZhKHRoaXMscCx0LGJyLGwsYyx1LGgsZixBLEgsdHQpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKFMvMyksby5mYWNlLm1hdGVyaWFsSW5kZXg9bS5tYXRlcmlhbEluZGV4LGUucHVzaChvKSl9fWVsc2V7bGV0IHg9TWF0aC5tYXgoMCxnLnN0YXJ0KSx2PU1hdGgubWluKGwuY291bnQsZy5zdGFydCtnLmNvdW50KTtmb3IobGV0IG09eCxwPXY7bTxwO20rPTMpe2xldCBiPW0sXz1tKzEsUz1tKzI7bz1GYSh0aGlzLHIsdCxicixsLGMsdSxoLGYsYixfLFMpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG0vMyksZS5wdXNoKG8pKX19fWVsc2UgaS5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX07b2UucHJvdG90eXBlLmlzTWVzaD0hMDtmdW5jdGlvbiBkTShuLHQsZSxpLHIscyxvLGEpe2xldCBsO2lmKHQuc2lkZT09PWhlP2w9aS5pbnRlcnNlY3RUcmlhbmdsZShvLHMsciwhMCxhKTpsPWkuaW50ZXJzZWN0VHJpYW5nbGUocixzLG8sdC5zaWRlIT09SHIsYSksbD09PW51bGwpcmV0dXJuIG51bGw7TmEuY29weShhKSxOYS5hcHBseU1hdHJpeDQobi5tYXRyaXhXb3JsZCk7bGV0IGM9ZS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTmEpO3JldHVybiBjPGUubmVhcnx8Yz5lLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50Ok5hLmNsb25lKCksb2JqZWN0Om59fWZ1bmN0aW9uIEZhKG4sdCxlLGkscixzLG8sYSxsLGMsdSxoKXtKbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksJG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLEtuLmZyb21CdWZmZXJBdHRyaWJ1dGUocixoKTtsZXQgZj1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihzJiZmKXtDYS5zZXQoMCwwLDApLFJhLnNldCgwLDAsMCksTGEuc2V0KDAsMCwwKTtmb3IobGV0IGc9MCx4PXMubGVuZ3RoO2c8eDtnKyspe2xldCB2PWZbZ10sbT1zW2ddO3YhPT0wJiYod3UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGMpLE11LmZyb21CdWZmZXJBdHRyaWJ1dGUobSx1KSxidS5mcm9tQnVmZmVyQXR0cmlidXRlKG0saCksbz8oQ2EuYWRkU2NhbGVkVmVjdG9yKHd1LHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUsdikpOihDYS5hZGRTY2FsZWRWZWN0b3Iod3Uuc3ViKEpuKSx2KSxSYS5hZGRTY2FsZWRWZWN0b3IoTXUuc3ViKCRuKSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUuc3ViKEtuKSx2KSkpfUpuLmFkZChDYSksJG4uYWRkKFJhKSxLbi5hZGQoTGEpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLEpuKSxuLmJvbmVUcmFuc2Zvcm0odSwkbiksbi5ib25lVHJhbnNmb3JtKGgsS24pKTtsZXQgZD1kTShuLHQsZSxpLEpuLCRuLEtuLFN1KTtpZihkKXthJiYoUGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLERhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxJYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCksZC51dj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpLGwmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxkLnV2Mj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpO2xldCBnPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IFQsbWF0ZXJpYWxJbmRleDowfTtyZS5nZXROb3JtYWwoSm4sJG4sS24sZy5ub3JtYWwpLGQuZmFjZT1nfXJldHVybiBkfXZhciBIaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxzPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpzLGRlcHRoU2VnbWVudHM6b307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iocikscz1NYXRoLmZsb29yKHMpLG89TWF0aC5mbG9vcihvKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAsZD0wO2coInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQsbyxzLDApLGcoInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQsbyxzLDEpLGcoIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIsbywyKSxnKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIsbywzKSxnKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixzLDQpLGcoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIscyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShoLDIpKTtmdW5jdGlvbiBnKHgsdixtLHAsYixfLFMsTCxBLEgsdHQpe2xldCBYPV8vQSx5PVMvSCxSPV8vMixEPVMvMixGPUwvMix6PUErMSxOPUgrMSxWPTAsUT0wLGF0PW5ldyBUO2ZvcihsZXQgRz0wO0c8TjtHKyspe2xldCAkPUcqeS1EO2ZvcihsZXQgbHQ9MDtsdDx6O2x0Kyspe2xldCBkdD1sdCpYLVI7YXRbeF09ZHQqcCxhdFt2XT0kKmIsYXRbbV09RixjLnB1c2goYXQueCxhdC55LGF0LnopLGF0W3hdPTAsYXRbdl09MCxhdFttXT1MPjA/MTotMSx1LnB1c2goYXQueCxhdC55LGF0LnopLGgucHVzaChsdC9BKSxoLnB1c2goMS1HL0gpLFYrPTF9fWZvcihsZXQgRz0wO0c8SDtHKyspZm9yKGxldCAkPTA7JDxBOyQrKyl7bGV0IGx0PWYrJCt6KkcsZHQ9ZiskK3oqKEcrMSkseHQ9ZisoJCsxKSt6KihHKzEpLGs9ZisoJCsxKSt6Kkc7bC5wdXNoKGx0LGR0LGspLGwucHVzaChkdCx4dCxrKSxRKz02fWEuYWRkR3JvdXAoZCxRLHR0KSxkKz1RLGYrPVZ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEhpKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gR3Iobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3RbZV1baV09ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/dFtlXVtpXT1yLnNsaWNlKCk6dFtlXVtpXT1yfX1yZXR1cm4gdH1mdW5jdGlvbiBNZShuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9R3IobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBwTT17Y2xvbmU6R3IsbWVyZ2U6TWV9LG1NPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLGdNPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsRm49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPW1NLHRoaXMuZnJhZ21lbnRTaGFkZXI9Z00sdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9R3IodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgbz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO28mJm8uaXNUZXh0dXJlP2UudW5pZm9ybXNbcl09e3R5cGU6InQiLHZhbHVlOm8udG9KU09OKHQpLnV1aWR9Om8mJm8uaXNDb2xvcj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJjIix2YWx1ZTpvLmdldEhleCgpfTpvJiZvLmlzVmVjdG9yMj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP2UudW5pZm9ybXNbcl09e3R5cGU6InYzIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjQ/ZS51bmlmb3Jtc1tyXT17dHlwZToidjQiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzTWF0cml4Mz9lLnVuaWZvcm1zW3JdPXt0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P2UudW5pZm9ybXNbcl09e3R5cGU6Im00Iix2YWx1ZTpvLnRvQXJyYXkoKX06ZS51bmlmb3Jtc1tyXT17dmFsdWU6b319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tyXT09PSEwJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtGbi5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgb289Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyB3dCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O29vLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgU2U9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1WdSoyKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKGl1Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gVnUqMipNYXRoLmF0YW4oTWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy5hc3BlY3Q9dC9lLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9cyx0aGlzLnZpZXcuaGVpZ2h0PW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxzPS0uNSpyLG89dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1vLmZ1bGxXaWR0aCxjPW8uZnVsbEhlaWdodDtzKz1vLm9mZnNldFgqci9sLGUtPW8ub2Zmc2V0WSppL2Mscio9by53aWR0aC9sLGkqPW8uaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0O2EhPT0wJiYocys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUocyxzK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07U2UucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFNyPTkwLEVyPTEsYW89Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLGkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFNlKFNyLEVyLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgVCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBzPW5ldyBTZShTcixFcix0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3IFQoLTEsMCwwKSksdGhpcy5hZGQocyk7bGV0IG89bmV3IFNlKFNyLEVyLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwwLDEpLG8ubG9va0F0KG5ldyBUKDAsMSwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFNlKFNyLEVyLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgVCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgU2UoU3IsRXIsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBUKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFNlKFNyLEVyLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgVCgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixzLG8sYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sV3I9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxlPWUhPT12b2lkIDA/ZTpBbyxzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O1dyLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBvbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSxlPWV8fHt9LHRoaXMudGV4dHVyZT1uZXcgV3Iodm9pZCAwLGUubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ZS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlciE9PXZvaWQgMD9lLm1pbkZpbHRlcjpiZX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVJlLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LHI9bmV3IEhpKDUsNSw1KSxzPW5ldyBGbih7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6R3IoaS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmkudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmkuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxibGVuZGluZzpqbn0pO3MudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IG89bmV3IG9lKHIscyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1MbCYmKGUubWluRmlsdGVyPWJlKSxuZXcgYW8oMSwxMCx0aGlzKS51cGRhdGUodCxvKSxlLm1pbkZpbHRlcj1hLG8uZ2VvbWV0cnkuZGlzcG9zZSgpLG8ubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IHM9dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IG89MDtvPDY7bysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsbyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQocyl9fTtvbC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIEV1PW5ldyBULHhNPW5ldyBULHlNPW5ldyBkZSxqZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBUKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPUV1LnN1YlZlY3RvcnMoaSxlKS5jcm9zcyh4TS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoRXUpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKHI9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IHM9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gczwwfHxzPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIocykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8eU0uZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEV1KS5hcHBseU1hdHJpeDQodCkscz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KHMpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2plLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBUcj1uZXcgc2ksemE9bmV3IFQscXI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgamUsZT1uZXcgamUsaT1uZXcgamUscj1uZXcgamUscz1uZXcgamUsbz1uZXcgamUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLHMsb119c2V0KHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShzKSxhWzVdLmNvcHkobyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLHM9aVsxXSxvPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGg9aVs3XSxmPWlbOF0sZD1pWzldLGc9aVsxMF0seD1pWzExXSx2PWlbMTJdLG09aVsxM10scD1pWzE0XSxiPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGgtbCx4LWYsYi12KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGgrbCx4K2YsYit2KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStzLGgrYyx4K2QsYittKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1zLGgtYyx4LWQsYi1tKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLGgtdSx4LWcsYi1wKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLGgrdSx4K2csYitwKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gZS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksVHIuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBUci5jZW50ZXIuc2V0KDAsMCwwKSxUci5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsVHIuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShUcil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgcz0wO3M8NjtzKyspaWYoZVtzXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoemEueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHphLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx6YS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoemEpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gZzAoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKHMsbyl7ZShzLG8pLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZlIT09bnVsbCYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24ocyl7ZT1zfSxzZXRDb250ZXh0OmZ1bmN0aW9uKHMpe249c319fWZ1bmN0aW9uIHZNKG4sdCl7bGV0IGU9dC5pc1dlYkdMMixpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxkPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsZCksbi5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZz01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2c9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9nPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmc9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9nPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2c9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9nPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9nPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZz01MTIxKSx7YnVmZmVyOmQsdHlwZTpnLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBzKGMsdSxoKXtsZXQgZj11LmFycmF5LGQ9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoaCxjKSxkLmNvdW50PT09LTE/bi5idWZmZXJTdWJEYXRhKGgsMCxmKTooZT9uLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYsZC5vZmZzZXQsZC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGgsZC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KGQub2Zmc2V0LGQub2Zmc2V0K2QuY291bnQpKSxkLmNvdW50PS0xKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9ZnVuY3Rpb24gYShjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9aS5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1pLmdldChjKTtoPT09dm9pZCAwP2kuc2V0KGMscihjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYocyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6byxyZW1vdmU6YSx1cGRhdGU6bH19dmFyIGxvPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpyfTtsZXQgcz10LzIsbz1lLzIsYT1NYXRoLmZsb29yKGkpLGw9TWF0aC5mbG9vcihyKSxjPWErMSx1PWwrMSxoPXQvYSxmPWUvbCxkPVtdLGc9W10seD1bXSx2PVtdO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBwPW0qZi1vO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBfPWIqaC1zO2cucHVzaChfLC1wLDApLHgucHVzaCgwLDAsMSksdi5wdXNoKGIvYSksdi5wdXNoKDEtbS9sKX19Zm9yKGxldCBtPTA7bTxsO20rKylmb3IobGV0IHA9MDtwPGE7cCsrKXtsZXQgYj1wK2MqbSxfPXArYyoobSsxKSxTPXArMStjKihtKzEpLEw9cCsxK2MqbTtkLnB1c2goYixfLEwpLGQucHVzaChfLFMsTCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShnLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoeCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUodiwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgbG8odC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfTT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZzsKI2VuZGlmYCx3TT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsTU09YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxiTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCXVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0OwojZW5kaWZgLFNNPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsRU09YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxUTT0idmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixBTT1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLENNPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxSTT1gI2lmZGVmIFVTRV9CVU1QTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwOwoJdW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7Cgl2ZWMyIGRIZHh5X2Z3ZCgpIHsKCQl2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7CgkJdmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApOwoJCWZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDsKCQlmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDsKCQlmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDsKCQlyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTsKCX0KCXZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZOID0gc3VyZl9ub3JtOwoJCXZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTsKCQl2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7CgkJZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247CgkJdmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApOwoJfQojZW5kaWZgLExNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsUE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxETT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKI2VuZGlmYCxJTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxOTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsRk09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCXZhcnlpbmcgdmVjMyB2Q29sb3I7CiNlbmRpZmAsek09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxVTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsQk09YCNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMKI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODYKI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NgojZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3CiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNQojZGVmaW5lIEVQU0lMT04gMWUtNgojaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKQpmbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9CmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfQpmbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9CmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfQpmbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfQpoaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkgewoJY29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzOwoJaGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7CglyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTsKfQojaWZkZWYgSElHSF9QUkVDSVNJT04KCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9CiNlbHNlCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7CgkJZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTsKCQlyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7Cgl9CiNlbmRpZgpzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7Cgl2ZWMzIGNvbG9yOwoJdmVjMyBkaXJlY3Rpb247Cglib29sIHZpc2libGU7Cn07CnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7Cgl2ZWMzIGRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGRpcmVjdFNwZWN1bGFyOwoJdmVjMyBpbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGluZGlyZWN0U3BlY3VsYXI7Cn07CnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHsKCXZlYzMgcG9zaXRpb247Cgl2ZWMzIG5vcm1hbDsKCXZlYzMgdmlld0RpcjsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXZlYzMgY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKfTsKdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwp9CnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7Cn0KbWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7CgltYXQzIHRtcDsKCXRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApOwoJdG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7Cgl0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTsKCXJldHVybiB0bXA7Cn0KZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsKCXZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTsKCXJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApOwp9CmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkgewoJcmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wOwp9CnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7CglmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTsKCWZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTsKCXJldHVybiB2ZWMyKCB1LCB2ICk7Cn1gLE9NPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLGtNPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxITT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7CiNlbmRpZmAsVk09YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxXTT1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7CiNlbmRpZmAscU09ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsWE09YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLFlNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZlYzMgY2FtZXJhVG9GcmFnOwoJCWlmICggaXNPcnRob2dyYXBoaWMgKSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZWxzZQoJCXZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0OwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApOwoJI2Vsc2UKCQl2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYICkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKQoJCW91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTsKCSNlbmRpZgojZW5kaWZgLFpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLEpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLCRNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQkKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgojZW5kaWZgLEtNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUU09YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxqTT1gI2lmZGVmIFVTRV9GT0cKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwojZW5kaWZgLHRiPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxlYj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxuYj1gI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7CiNlbmRpZgp2ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7CglmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApOwoJdmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTsKCSNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCQlyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7CgkjZWxzZQoJCXJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7CgkjZW5kaWYKfWAsaWI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxyYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNiPWB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTsKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTsKR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7CmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwpiYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDsKYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwp2TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApOwp2SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7Cgl2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwpmbG9hdCBkb3ROTDsKdmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJdkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwojZW5kaWYKI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJdkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWZgLG9iPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGFiPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLGxiPWBUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7YCxjYj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCx1Yj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGhiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyU2hpbmluZXNzOwoJZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKfTsKdm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9CbGlublBob25nCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZwojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxmYj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsZGI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxwYj1gCkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uOwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCWdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVBvaW50TGlnaHQgcG9pbnRMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKQoJCXBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVNwb3RMaWdodCBzcG90TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdOwoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTICkKCQlzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCURpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKQoJCWRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhICkKCVJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkgewoJCXJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdOwoJCVJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJdmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CgkjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwICkKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCQlpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJfQoJCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmYCxtYj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLGdiPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAseGI9YCNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUICkKCWdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTsKI2VuZGlmYCx5Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCx2Yj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX2I9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7CgkJdklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7CgkjZWxzZQoJCWlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkgewoJCQlnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7CgkJCWdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udzsKCQl9CgkjZW5kaWYKI2VuZGlmYCx3Yj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCxNYj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxiYj1gI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKQoJdmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nOwojZW5kaWZgLFNiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsRWI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxUYj1gI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDsKI2VuZGlmYCxBYj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxDYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUmI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDEgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZWxzZQoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZW5kaWYKCQl9CgkjZWxzZQoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdOwoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLExiPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsUGI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsRGI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsSWI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTmI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLEZiPWAjaWZkZWYgVVNFX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlOwojZW5kaWYKI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJdW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsKI2VuZGlmCiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApCgl2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTsKCQl2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApOwoJCXZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7CgkJdmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTsKCQl2ZWMzIE4gPSBzdXJmX25vcm07CgkJdmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTsKCQl2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApOwoJCXZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7CgkJdmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTsKCQlmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApOwoJCWZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApOwoJCXJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApOwoJfQojZW5kaWZgLHpiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxVYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxCYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CiNlbmRpZmAsT2I9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCxrYj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxIYj1gI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEEKCWdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7CiNlbmRpZmAsVmI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxHYj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFdiPWAjaWZkZWYgRElUSEVSSU5HCgl2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHsKCQlmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7CgkJdmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTsKCQlkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApOwoJCXJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7Cgl9CiNlbmRpZmAscWI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxYYj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxZYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCWZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7CgkJcmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7Cgl9Cgl2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHsKCQlyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7Cgl9CglmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXsKCQlmbG9hdCBvY2NsdXNpb24gPSAxLjA7CgkJdmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTsKCQlmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApOwoJCWlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7CgkJCWZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDsKCQkJZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTsKCQkJZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTsJCQlzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTsJCQlvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTsKCQl9CgkJcmV0dXJuIG9jY2x1c2lvbjsKCX0KCWZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7CgkJZmxvYXQgc2hhZG93ID0gMS4wOwoJCXNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53OwoJCXNoYWRvd0Nvb3JkLnogKz0gc2hhZG93QmlhczsKCQlidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7CgkJYm9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApOwoJCWJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTsKCQlib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApOwoJCWlmICggZnJ1c3R1bVRlc3QgKSB7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDIgPSBkeDAgLyAyLjA7CgkJCWZsb2F0IGR5MiA9IGR5MCAvIDIuMDsKCQkJZmxvYXQgZHgzID0gZHgxIC8gMi4wOwoJCQlmbG9hdCBkeTMgPSBkeTEgLyAyLjA7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApCgkJCSkgKiAoIDEuMCAvIDE3LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeCA9IHRleGVsU2l6ZS54OwoJCQlmbG9hdCBkeSA9IHRleGVsU2l6ZS55OwoJCQl2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7CgkJCXZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTsKCQkJdXYgLT0gZiAqIHRleGVsU2l6ZTsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIGYueSApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbHNlCgkJCXNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZW5kaWYKCQl9CgkJcmV0dXJuIHNoYWRvdzsKCX0KCXZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHsKCQl2ZWMzIGFic1YgPSBhYnMoIHYgKTsKCQlmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTsKCQlhYnNWICo9IHNjYWxlVG9DdWJlOwoJCXYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTsKCQl2ZWMyIHBsYW5hciA9IHYueHk7CgkJZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTsKCQlmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7CgkJaWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkgewoJCQlpZiAoIHYueiA+IDAuMCApCgkJCQlwbGFuYXIueCA9IDQuMCAtIHYueDsKCQl9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApOwoJCQlwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7CgkJfSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTsKCQkJcGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDsKCQkJcGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDsKCQl9CgkJcmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApOwoJfQoJZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7CgkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTsKCQl2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejsKCQlmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApOwkJZHAgKz0gc2hhZG93QmlhczsKCQl2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApOwoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTsKCQkJcmV0dXJuICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsWmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsSmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCwkYj1gZmxvYXQgZ2V0U2hhZG93TWFzaygpIHsKCWZsb2F0IHNoYWRvdyA9IDEuMDsKCSNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNlbmRpZgoJcmV0dXJuIHNoYWRvdzsKfWAsS2I9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLFFiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxqYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCXZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApOwoJc2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7Cglza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTsKCXNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56OwoJc2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7Cgl0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6OwojZW5kaWZgLHQxPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLGUxPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLG4xPWAjaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDsKI2VuZGlmYCxpMT1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxyMT1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHMxPWAjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7CglmbG9hdCB0cmFuc21pc3Npb25GYWN0b3IgPSB0cmFuc21pc3Npb247CglmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7CgkjZW5kaWYKCXZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247Cgl2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7Cgl2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzQgdHJhbnNtaXNzaW9uID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbigKCQluLCB2LCByb3VnaG5lc3NGYWN0b3IsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsCgkJcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsCgkJYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApOwoJdHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7CiNlbmRpZmAsbzE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsYTE9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxsMT1gI2lmZGVmIFVTRV9VVgoJI2lmZGVmIFVWU19WRVJURVhfT05MWQoJCXZlYzIgdlV2OwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJI2VuZGlmCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZmAsYzE9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsdTE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsaDE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJYXR0cmlidXRlIHZlYzIgdXYyOwoJdmFyeWluZyB2ZWMyIHZVdjI7Cgl1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtOwojZW5kaWZgLGYxPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsZDE9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAscDE9YHZhcnlpbmcgdmVjMiB2VXY7CnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKdm9pZCBtYWluKCkgewoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7Cn1gLG0xPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGcxPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx4MT1gI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7Cgl2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCWdsX0ZyYWdDb2xvciA9IGVudkNvbG9yOwoJZ2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHkxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLHYxPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfMT1gI2RlZmluZSBESVNUQU5DRQp2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7Cn1gLHcxPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCxNMT1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLGIxPWB1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCXZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsUzE9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEUxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxUMT1gI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HICkKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQzE9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxSMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTsKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsTDE9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsUDE9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxEMT1gI2RlZmluZSBOT1JNQUwKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWYKfWAsSTE9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLE4xPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEYxPWAjZGVmaW5lIFBIT05HCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gdmVjMyBzcGVjdWxhcjsKdW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsejE9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLFUxPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQjE9YCNkZWZpbmUgVE9PTgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsTzE9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxrMT1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEgxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFYxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEcxPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVzE9YHVuaWZvcm0gZmxvYXQgcm90YXRpb247CnVuaWZvcm0gdmVjMiBjZW50ZXI7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7Cgl2ZWMyIHNjYWxlOwoJc2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7CglzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTsKCSNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejsKCSNlbmRpZgoJdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTsKCXZlYzIgcm90YXRlZFBvc2l0aW9uOwoJcm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJbXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHExPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsUHQ9e2FscGhhbWFwX2ZyYWdtZW50Ol9NLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6d00sYWxwaGF0ZXN0X2ZyYWdtZW50Ok1NLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OmJNLGFvbWFwX2ZyYWdtZW50OlNNLGFvbWFwX3BhcnNfZnJhZ21lbnQ6RU0sYmVnaW5fdmVydGV4OlRNLGJlZ2lubm9ybWFsX3ZlcnRleDpBTSxic2RmczpDTSxidW1wbWFwX3BhcnNfZnJhZ21lbnQ6Uk0sY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkxNLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OlBNLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpETSxjbGlwcGluZ19wbGFuZXNfdmVydGV4OklNLGNvbG9yX2ZyYWdtZW50Ok5NLGNvbG9yX3BhcnNfZnJhZ21lbnQ6Rk0sY29sb3JfcGFyc192ZXJ0ZXg6ek0sY29sb3JfdmVydGV4OlVNLGNvbW1vbjpCTSxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T00sZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6a00sZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkhNLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6Vk0sZW1pc3NpdmVtYXBfZnJhZ21lbnQ6R00sZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpXTSxlbmNvZGluZ3NfZnJhZ21lbnQ6cU0sZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6WE0sZW52bWFwX2ZyYWdtZW50OllNLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpaTSxlbnZtYXBfcGFyc19mcmFnbWVudDpKTSxlbnZtYXBfcGFyc192ZXJ0ZXg6JE0sZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6YWIsZW52bWFwX3ZlcnRleDpLTSxmb2dfdmVydGV4OlFNLGZvZ19wYXJzX3ZlcnRleDpqTSxmb2dfZnJhZ21lbnQ6dGIsZm9nX3BhcnNfZnJhZ21lbnQ6ZWIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpuYixsaWdodG1hcF9mcmFnbWVudDppYixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OnJiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzYixsaWdodHNfcGFyc19iZWdpbjpvYixsaWdodHNfdG9vbl9mcmFnbWVudDpsYixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmNiLGxpZ2h0c19waG9uZ19mcmFnbWVudDp1YixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpoYixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZmIsbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6ZGIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOnBiLGxpZ2h0c19mcmFnbWVudF9tYXBzOm1iLGxpZ2h0c19mcmFnbWVudF9lbmQ6Z2IsbG9nZGVwdGhidWZfZnJhZ21lbnQ6eGIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp5Yixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDp2Yixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X2IsbWFwX2ZyYWdtZW50OndiLG1hcF9wYXJzX2ZyYWdtZW50Ok1iLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDpiYixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpTYixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6RWIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6VGIsbW9ycGhub3JtYWxfdmVydGV4OkFiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OkNiLG1vcnBodGFyZ2V0X3ZlcnRleDpSYixub3JtYWxfZnJhZ21lbnRfYmVnaW46TGIsbm9ybWFsX2ZyYWdtZW50X21hcHM6UGIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6RGIsbm9ybWFsX3BhcnNfdmVydGV4OkliLG5vcm1hbF92ZXJ0ZXg6TmIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6RmIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjp6YixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6VWIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6QmIsb3V0cHV0X2ZyYWdtZW50Ok9iLHBhY2tpbmc6a2IscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpIYixwcm9qZWN0X3ZlcnRleDpWYixkaXRoZXJpbmdfZnJhZ21lbnQ6R2IsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6V2Iscm91Z2huZXNzbWFwX2ZyYWdtZW50OnFiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OlhiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OlliLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpaYixzaGFkb3dtYXBfdmVydGV4OkpiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDokYixza2luYmFzZV92ZXJ0ZXg6S2Isc2tpbm5pbmdfcGFyc192ZXJ0ZXg6UWIsc2tpbm5pbmdfdmVydGV4OmpiLHNraW5ub3JtYWxfdmVydGV4OnQxLHNwZWN1bGFybWFwX2ZyYWdtZW50OmUxLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6bjEsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6aTEsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDpyMSx0cmFuc21pc3Npb25fZnJhZ21lbnQ6czEsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bzEsdXZfcGFyc19mcmFnbWVudDphMSx1dl9wYXJzX3ZlcnRleDpsMSx1dl92ZXJ0ZXg6YzEsdXYyX3BhcnNfZnJhZ21lbnQ6dTEsdXYyX3BhcnNfdmVydGV4OmgxLHV2Ml92ZXJ0ZXg6ZjEsd29ybGRwb3NfdmVydGV4OmQxLGJhY2tncm91bmRfdmVydDpwMSxiYWNrZ3JvdW5kX2ZyYWc6bTEsY3ViZV92ZXJ0OmcxLGN1YmVfZnJhZzp4MSxkZXB0aF92ZXJ0OnkxLGRlcHRoX2ZyYWc6djEsZGlzdGFuY2VSR0JBX3ZlcnQ6XzEsZGlzdGFuY2VSR0JBX2ZyYWc6dzEsZXF1aXJlY3RfdmVydDpNMSxlcXVpcmVjdF9mcmFnOmIxLGxpbmVkYXNoZWRfdmVydDpTMSxsaW5lZGFzaGVkX2ZyYWc6RTEsbWVzaGJhc2ljX3ZlcnQ6VDEsbWVzaGJhc2ljX2ZyYWc6QTEsbWVzaGxhbWJlcnRfdmVydDpDMSxtZXNobGFtYmVydF9mcmFnOlIxLG1lc2htYXRjYXBfdmVydDpMMSxtZXNobWF0Y2FwX2ZyYWc6UDEsbWVzaG5vcm1hbF92ZXJ0OkQxLG1lc2hub3JtYWxfZnJhZzpJMSxtZXNocGhvbmdfdmVydDpOMSxtZXNocGhvbmdfZnJhZzpGMSxtZXNocGh5c2ljYWxfdmVydDp6MSxtZXNocGh5c2ljYWxfZnJhZzpVMSxtZXNodG9vbl92ZXJ0OkIxLG1lc2h0b29uX2ZyYWc6TzEscG9pbnRzX3ZlcnQ6azEscG9pbnRzX2ZyYWc6SDEsc2hhZG93X3ZlcnQ6VjEsc2hhZG93X2ZyYWc6RzEsc3ByaXRlX3ZlcnQ6VzEsc3ByaXRlX2ZyYWc6cTF9LG90PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBLKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX19fSxmbj17YmFzaWM6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmZvZ10pLHZlcnRleFNoYWRlcjpQdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IGZ0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3Qucm91Z2huZXNzbWFwLG90Lm1ldGFsbmVzc21hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmdyYWRpZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOk1lKFtvdC5wb2ludHMsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlB0LmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpQdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOk1lKFtvdC5zcHJpdGUsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOk1lKFtvdC5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpQdC5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgVH0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6TWUoW290LmxpZ2h0cyxvdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5zaGFkb3dfZnJhZ319O2ZuLnBoeXNpY2FsPXt1bmlmb3JtczpNZShbZm4uc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyBLfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBmdCgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gWDEobix0LGUsaSxyLHMpe2xldCBvPW5ldyBmdCgwKSxhPXI9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIGQoeCx2KXtsZXQgbT0hMSxwPXYuaXNTY2VuZT09PSEwP3YuYmFja2dyb3VuZDpudWxsO3AmJnAuaXNUZXh0dXJlJiYocD10LmdldChwKSk7bGV0IGI9bi54cixfPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7XyYmXy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJihwPW51bGwpLHA9PT1udWxsP2cobyxhKTpwJiZwLmlzQ29sb3ImJihnKHAsMSksbT0hMCksKG4uYXV0b0NsZWFyfHxtKSYmbi5jbGVhcihuLmF1dG9DbGVhckNvbG9yLG4uYXV0b0NsZWFyRGVwdGgsbi5hdXRvQ2xlYXJTdGVuY2lsKSxwJiYocC5pc0N1YmVUZXh0dXJlfHxwLm1hcHBpbmc9PT1SbCk/KGM9PT12b2lkIDAmJihjPW5ldyBvZShuZXcgSGkoMSwxLDEpLG5ldyBGbih7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oUyxMLEEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKEEubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1wLGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1wLmlzQ3ViZVRleHR1cmUmJnAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6cCYmcC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgb2UobmV3IGxvKDIsMiksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOkdyKGZuLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpmbi5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpmbi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6ZW8sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1wLHAubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZwLnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShwLm1hdHJpeCksKHUhPT1wfHxoIT09cC52ZXJzaW9ufHxmIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9cCxoPXAudmVyc2lvbixmPW4udG9uZU1hcHBpbmcpLHgudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGcoeCx2KXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoeC5yLHguZyx4LmIsdixzKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBvfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHgsdj0xKXtvLnNldCh4KSxhPXYsZyhvLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oeCl7YT14LGcobyxhKX0scmVuZGVyOmR9fWZ1bmN0aW9uIFkxKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxzPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxvPWkuaXNXZWJHTDJ8fHMhPT1udWxsLGE9e30sbD14KG51bGwpLGM9bDtmdW5jdGlvbiB1KEQsRix6LE4sVil7bGV0IFE9ITE7aWYobyl7bGV0IGF0PWcoTix6LEYpO2MhPT1hdCYmKGM9YXQsZihjLm9iamVjdCkpLFE9dihOLFYpLFEmJm0oTixWKX1lbHNle2xldCBhdD1GLndpcmVmcmFtZT09PSEwOyhjLmdlb21ldHJ5IT09Ti5pZHx8Yy5wcm9ncmFtIT09ei5pZHx8Yy53aXJlZnJhbWUhPT1hdCkmJihjLmdlb21ldHJ5PU4uaWQsYy5wcm9ncmFtPXouaWQsYy53aXJlZnJhbWU9YXQsUT0hMCl9RC5pc0luc3RhbmNlZE1lc2g9PT0hMCYmKFE9ITApLFYhPT1udWxsJiZlLnVwZGF0ZShWLDM0OTYzKSxRJiYoQShELEYseixOKSxWIT09bnVsbCYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KFYpLmJ1ZmZlcikpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6cy5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfWZ1bmN0aW9uIGYoRCl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkoRCk6cy5iaW5kVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KEQpOnMuZGVsZXRlVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZyhELEYseil7bGV0IE49ei53aXJlZnJhbWU9PT0hMCxWPWFbRC5pZF07Vj09PXZvaWQgMCYmKFY9e30sYVtELmlkXT1WKTtsZXQgUT1WW0YuaWRdO1E9PT12b2lkIDAmJihRPXt9LFZbRi5pZF09USk7bGV0IGF0PVFbTl07cmV0dXJuIGF0PT09dm9pZCAwJiYoYXQ9eChoKCkpLFFbTl09YXQpLGF0fWZ1bmN0aW9uIHgoRCl7bGV0IEY9W10sej1bXSxOPVtdO2ZvcihsZXQgVj0wO1Y8cjtWKyspRltWXT0wLHpbVl09MCxOW1ZdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkYsZW5hYmxlZEF0dHJpYnV0ZXM6eixhdHRyaWJ1dGVEaXZpc29yczpOLG9iamVjdDpELGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gdihELEYpe2xldCB6PWMuYXR0cmlidXRlcyxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD16W1FdLEc9TltRXTtpZihhdD09PXZvaWQgMHx8YXQuYXR0cmlidXRlIT09R3x8YXQuZGF0YSE9PUcuZGF0YSlyZXR1cm4hMDtWKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PVZ8fGMuaW5kZXghPT1GfWZ1bmN0aW9uIG0oRCxGKXtsZXQgej17fSxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD1OW1FdLEc9e307Ry5hdHRyaWJ1dGU9YXQsYXQuZGF0YSYmKEcuZGF0YT1hdC5kYXRhKSx6W1FdPUcsVisrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1WLGMuaW5kZXg9Rn1mdW5jdGlvbiBwKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKylEW0ZdPTB9ZnVuY3Rpb24gYihEKXtfKEQsMCl9ZnVuY3Rpb24gXyhELEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxOPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVj1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbRF09MSxOW0RdPT09MCYmKG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoRCksTltEXT0xKSxWW0RdIT09RiYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKEQsRiksVltEXT1GKX1mdW5jdGlvbiBTKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxOPUYubGVuZ3RoO3o8Tjt6KyspRlt6XSE9PURbel0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIEwoRCxGLHosTixWLFEpe2kuaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihELEYseixWLFEpOm4udmVydGV4QXR0cmliUG9pbnRlcihELEYseixOLFYsUSl9ZnVuY3Rpb24gQShELEYseixOKXtpZihpLmlzV2ViR0wyPT09ITEmJihELmlzSW5zdGFuY2VkTWVzaHx8Ti5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3AoKTtsZXQgVj1OLmF0dHJpYnV0ZXMsUT16LmdldEF0dHJpYnV0ZXMoKSxhdD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBHIGluIFEpe2xldCAkPVFbR107aWYoJC5sb2NhdGlvbj49MCl7bGV0IGx0PVZbR107aWYobHQ9PT12b2lkIDAmJihHPT09Imluc3RhbmNlTWF0cml4IiYmRC5pbnN0YW5jZU1hdHJpeCYmKGx0PUQuaW5zdGFuY2VNYXRyaXgpLEc9PT0iaW5zdGFuY2VDb2xvciImJkQuaW5zdGFuY2VDb2xvciYmKGx0PUQuaW5zdGFuY2VDb2xvcikpLGx0IT09dm9pZCAwKXtsZXQgZHQ9bHQubm9ybWFsaXplZCx4dD1sdC5pdGVtU2l6ZSxrPWUuZ2V0KGx0KTtpZihrPT09dm9pZCAwKWNvbnRpbnVlO2xldCBGdD1rLmJ1ZmZlcixtdD1rLnR5cGUsU3Q9ay5ieXRlc1BlckVsZW1lbnQ7aWYobHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IEI9bHQuZGF0YSxzdD1CLnN0cmlkZSxudD1sdC5vZmZzZXQ7aWYoQiYmQi5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IEM9MDtDPCQubG9jYXRpb25TaXplO0MrKylfKCQubG9jYXRpb24rQyxCLm1lc2hQZXJBdHRyaWJ1dGUpO0QuaXNJbnN0YW5jZWRNZXNoIT09ITAmJk4uX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihOLl9tYXhJbnN0YW5jZUNvdW50PUIubWVzaFBlckF0dHJpYnV0ZSpCLmNvdW50KX1lbHNlIGZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKWIoJC5sb2NhdGlvbitDKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKUwoJC5sb2NhdGlvbitDLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHN0KlN0LChudCt4dC8kLmxvY2F0aW9uU2l6ZSpDKSpTdCl9ZWxzZXtpZihsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBCPTA7QjwkLmxvY2F0aW9uU2l6ZTtCKyspXygkLmxvY2F0aW9uK0IsbHQubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9bHQubWVzaFBlckF0dHJpYnV0ZSpsdC5jb3VudCl9ZWxzZSBmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKyliKCQubG9jYXRpb24rQik7bi5iaW5kQnVmZmVyKDM0OTYyLEZ0KTtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylMKCQubG9jYXRpb24rQix4dC8kLmxvY2F0aW9uU2l6ZSxtdCxkdCx4dCpTdCx4dC8kLmxvY2F0aW9uU2l6ZSpCKlN0KX19ZWxzZSBpZihhdCE9PXZvaWQgMCl7bGV0IGR0PWF0W0ddO2lmKGR0IT09dm9pZCAwKXN3aXRjaChkdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDM6bi52ZXJ0ZXhBdHRyaWIzZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7Y2FzZSA0Om4udmVydGV4QXR0cmliNGZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoJC5sb2NhdGlvbixkdCl9fX19UygpfWZ1bmN0aW9uIEgoKXt5KCk7Zm9yKGxldCBEIGluIGEpe2xldCBGPWFbRF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRF19fWZ1bmN0aW9uIHR0KEQpe2lmKGFbRC5pZF09PT12b2lkIDApcmV0dXJuO2xldCBGPWFbRC5pZF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRC5pZF19ZnVuY3Rpb24gWChEKXtmb3IobGV0IEYgaW4gYSl7bGV0IHo9YVtGXTtpZih6W0QuaWRdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBOPXpbRC5pZF07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIHpbRC5pZF19fWZ1bmN0aW9uIHkoKXtSKCksYyE9PWwmJihjPWwsZihjLm9iamVjdCkpfWZ1bmN0aW9uIFIoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOnUscmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTpSLGRpc3Bvc2U6SCxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTp0dCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOlgsaW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpTfX1mdW5jdGlvbiBaMShuLHQsZSxpKXtsZXQgcj1pLmlzV2ViR0wyLHM7ZnVuY3Rpb24gbyhjKXtzPWN9ZnVuY3Rpb24gYShjLHUpe24uZHJhd0FycmF5cyhzLGMsdSksZS51cGRhdGUodSxzLDEpfWZ1bmN0aW9uIGwoYyx1LGgpe2lmKGg9PT0wKXJldHVybjtsZXQgZixkO2lmKHIpZj1uLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYoZj10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsZj09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1mW2RdKHMsYyx1LGgpLGUudXBkYXRlKHUscyxoKX10aGlzLnNldE1vZGU9byx0aGlzLnJlbmRlcj1hLHRoaXMucmVuZGVySW5zdGFuY2VzPWx9ZnVuY3Rpb24gSjEobix0LGUpe2xldCBpO2Z1bmN0aW9uIHIoKXtpZihpIT09dm9pZCAwKXJldHVybiBpO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgQT10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihBLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9ZnVuY3Rpb24gcyhBKXtpZihBPT09ImhpZ2hwIil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtBPSJtZWRpdW1wIn1yZXR1cm4gQT09PSJtZWRpdW1wIiYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgbz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT1lLnByZWNpc2lvbiE9PXZvaWQgMD9lLnByZWNpc2lvbjoiaGlnaHAiLGw9cyhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9b3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1uLmdldFBhcmFtZXRlcigzNDkzMCksZj1uLmdldFBhcmFtZXRlcigzNTY2MCksZD1uLmdldFBhcmFtZXRlcigzMzc5KSxnPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSx4PW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSx2PW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtPW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSxwPW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxfPW98fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLFM9YiYmXyxMPW8/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOm8sZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OnIsZ2V0TWF4UHJlY2lzaW9uOnMscHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpkLG1heEN1YmVtYXBTaXplOmcsbWF4QXR0cmlidXRlczp4LG1heFZlcnRleFVuaWZvcm1zOnYsbWF4VmFyeWluZ3M6bSxtYXhGcmFnbWVudFVuaWZvcm1zOnAsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6XyxmbG9hdFZlcnRleFRleHR1cmVzOlMsbWF4U2FtcGxlczpMfX1mdW5jdGlvbiAkMShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxzPSExLG89bmV3IGplLGE9bmV3IGRlLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWgubGVuZ3RoIT09MHx8Znx8aSE9PTB8fHI7cmV0dXJuIHI9ZixlPXUoaCxkLDApLGk9aC5sZW5ndGgsZ30sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtzPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe3M9ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixkKXtsZXQgZz1oLmNsaXBwaW5nUGxhbmVzLHg9aC5jbGlwSW50ZXJzZWN0aW9uLHY9aC5jbGlwU2hhZG93cyxtPW4uZ2V0KGgpO2lmKCFyfHxnPT09bnVsbHx8Zy5sZW5ndGg9PT0wfHxzJiYhdilzP3UobnVsbCk6YygpO2Vsc2V7bGV0IHA9cz8wOmksYj1wKjQsXz1tLmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1fLF89dShnLGYsYixkKTtmb3IobGV0IFM9MDtTIT09YjsrK1MpX1tTXT1lW1NdO20uY2xpcHBpbmdTdGF0ZT1fLHRoaXMubnVtSW50ZXJzZWN0aW9uPXg/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9cH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLGQsZyl7bGV0IHg9aCE9PW51bGw/aC5sZW5ndGg6MCx2PW51bGw7aWYoeCE9PTApe2lmKHY9bC52YWx1ZSxnIT09ITB8fHY9PT1udWxsKXtsZXQgbT1kK3gqNCxwPWYubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHApLCh2PT09bnVsbHx8di5sZW5ndGg8bSkmJih2PW5ldyBGbG9hdDMyQXJyYXkobSkpO2ZvcihsZXQgYj0wLF89ZDtiIT09eDsrK2IsXys9NClvLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHAsYSksby5ub3JtYWwudG9BcnJheSh2LF8pLHZbXyszXT1vLmNvbnN0YW50fWwudmFsdWU9dixsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz14LHQubnVtSW50ZXJzZWN0aW9uPTAsdn19ZnVuY3Rpb24gSzEobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShvLGEpe3JldHVybiBhPT09VXU/by5tYXBwaW5nPUFvOmE9PT1CdSYmKG8ubWFwcGluZz1Dbyksb31mdW5jdGlvbiBpKG8pe2lmKG8mJm8uaXNUZXh0dXJlJiZvLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExKXtsZXQgYT1vLm1hcHBpbmc7aWYoYT09PVV1fHxhPT09QnUpaWYodC5oYXMobykpe2xldCBsPXQuZ2V0KG8pLnRleHR1cmU7cmV0dXJuIGUobCxvLm1hcHBpbmcpfWVsc2V7bGV0IGw9by5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgb2wobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixvKSx0LnNldChvLGMpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUsby5tYXBwaW5nKX1lbHNlIHJldHVybiBudWxsfX1yZXR1cm4gb31mdW5jdGlvbiByKG8pe2xldCBhPW8udGFyZ2V0O2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscik7bGV0IGw9dC5nZXQoYSk7bCE9PXZvaWQgMCYmKHQuZGVsZXRlKGEpLGwuZGlzcG9zZSgpKX1mdW5jdGlvbiBzKCl7dD1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpzfX12YXIgVmk9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxzPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1zLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIscz1pLXQsbz1pK3QsYT1yK2UsbD1yLWU7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtzKz1jKnRoaXMudmlldy5vZmZzZXRYLG89cytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocyxvLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsdGhpcy52aWV3IT09bnVsbCYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07VmkucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBYcj1jbGFzcyBleHRlbmRzIEZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07WHIucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIGtyPTQsbmk9OCxobj1NYXRoLnBvdygyLG5pKSx4MD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0seTA9bmkta3IrMSt4MC5sZW5ndGgsQXI9MjAsVHU9bmV3IFZpLHtfbG9kUGxhbmVzOkdzLF9zaXplTG9kczptZyxfc2lnbWFzOlVhfT1RMSgpLGdnPW5ldyBmdCxBdT1udWxsLHppPSgxK01hdGguc3FydCg1KSkvMixDcj0xL3ppLHhnPVtuZXcgVCgxLDEsMSksbmV3IFQoLTEsMSwxKSxuZXcgVCgxLDEsLTEpLG5ldyBUKC0xLDEsLTEpLG5ldyBUKDAsemksQ3IpLG5ldyBUKDAsemksLUNyKSxuZXcgVChDciwwLHppKSxuZXcgVCgtQ3IsMCx6aSksbmV3IFQoemksQ3IsMCksbmV3IFQoLXppLENyLDApXSxhbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWoxKEFyKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IHM9dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIscyksZT4wJiZ0aGlzLl9ibHVyKHMsMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0ocyksdGhpcy5fY2xlYW51cChzKSxzfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1fZygpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe3RoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8R3MubGVuZ3RoO3QrKylHc1t0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KEF1KSx0LnNjaXNzb3JUZXN0PSExLEJhKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe0F1PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOmJlLG1pbkZpbHRlcjpiZSxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVcixmb3JtYXQ6UmUsZW5jb2Rpbmc6cmksZGVwdGhCdWZmZXI6ITF9LGk9eWcoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWcoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgb2UoR3NbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFR1KX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgU2UoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsaD11LmF1dG9DbGVhcixmPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKGdnKSx1LnRvbmVNYXBwaW5nPXRpLHUuYXV0b0NsZWFyPSExO2xldCBkPW5ldyBraSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpoZSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGc9bmV3IG9lKG5ldyBIaSxkKSx4PSExLHY9dC5iYWNrZ3JvdW5kO3Y/di5pc0NvbG9yJiYoZC5jb2xvci5jb3B5KHYpLHQuYmFja2dyb3VuZD1udWxsLHg9ITApOihkLmNvbG9yLmNvcHkoZ2cpLHg9ITApO2ZvcihsZXQgbT0wO208NjttKyspe2xldCBwPW0lMztwPT09MD8oYS51cC5zZXQoMCxsW21dLDApLGEubG9va0F0KGNbbV0sMCwwKSk6cD09PTE/KGEudXAuc2V0KDAsMCxsW21dKSxhLmxvb2tBdCgwLGNbbV0sMCkpOihhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoMCwwLGNbbV0pKSxCYShyLHAqaG4sbT4yP2huOjAsaG4saG4pLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLHgmJnUucmVuZGVyKGcsYSksdS5yZW5kZXIodCxhKX1nLmdlb21ldHJ5LmRpc3Bvc2UoKSxnLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9dn1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1Bb3x8dC5tYXBwaW5nPT09Q287cj8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEpOnRoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCkpO2xldCBzPXI/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixvPW5ldyBvZShHc1swXSxzKSxhPXMudW5pZm9ybXM7YS5lbnZNYXAudmFsdWU9dCxyfHxhLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLEJhKGUsMCwwLDMqaG4sMipobiksaS5zZXRSZW5kZXJUYXJnZXQoZSksaS5yZW5kZXIobyxUdSl9X2FwcGx5UE1SRU0odCl7bGV0IGU9dGhpcy5fcmVuZGVyZXIsaT1lLmF1dG9DbGVhcjtlLmF1dG9DbGVhcj0hMTtmb3IobGV0IHI9MTtyPHkwO3IrKyl7bGV0IHM9TWF0aC5zcXJ0KFVhW3JdKlVhW3JdLVVhW3ItMV0qVWFbci0xXSksbz14Z1soci0xKSV4Zy5sZW5ndGhdO3RoaXMuX2JsdXIodCxyLTEscixzLG8pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixzKXtsZXQgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxpLHIsImxhdGl0dWRpbmFsIixzKSx0aGlzLl9oYWxmQmx1cihvLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIscyl9X2hhbGZCbHVyKHQsZSxpLHIscyxvLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO28hPT0ibGF0aXR1ZGluYWwiJiZvIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IG9lKEdzW3JdLGMpLGY9Yy51bmlmb3JtcyxkPW1nW2ldLTEsZz1pc0Zpbml0ZShzKT9NYXRoLlBJLygyKmQpOjIqTWF0aC5QSS8oMipBci0xKSx4PXMvZyx2PWlzRmluaXRlKHMpPzErTWF0aC5mbG9vcih1KngpOkFyO3Y+QXImJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3N9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7dn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAke0FyfWApO2xldCBtPVtdLHA9MDtmb3IobGV0IEw9MDtMPEFyOysrTCl7bGV0IEE9TC94LEg9TWF0aC5leHAoLUEqQS8yKTttLnB1c2goSCksTD09PTA/cCs9SDpMPHYmJihwKz0yKkgpfWZvcihsZXQgTD0wO0w8bS5sZW5ndGg7TCsrKW1bTF09bVtMXS9wO2YuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxmLnNhbXBsZXMudmFsdWU9dixmLndlaWdodHMudmFsdWU9bSxmLmxhdGl0dWRpbmFsLnZhbHVlPW89PT0ibGF0aXR1ZGluYWwiLGEmJihmLnBvbGVBeGlzLnZhbHVlPWEpLGYuZFRoZXRhLnZhbHVlPWcsZi5taXBJbnQudmFsdWU9bmktaTtsZXQgYj1tZ1tyXSxfPTMqTWF0aC5tYXgoMCxobi0yKmIpLFM9KHI9PT0wPzA6MipobikrMipiKihyPm5pLWtyP3Itbmkra3I6MCk7QmEoZSxfLFMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQoZSksbC5yZW5kZXIoaCxUdSl9fTtmdW5jdGlvbiBRMSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPW5pO2ZvcihsZXQgcj0wO3I8eTA7cisrKXtsZXQgcz1NYXRoLnBvdygyLGkpO3QucHVzaChzKTtsZXQgbz0xL3M7cj5uaS1rcj9vPXgwW3Itbmkra3ItMV06cj09PTAmJihvPTApLGUucHVzaChvKTtsZXQgYT0xLyhzLTEpLGw9LWEvMixjPTErYS8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LGQ9MyxnPTIseD0xLHY9bmV3IEZsb2F0MzJBcnJheShkKmYqaCksbT1uZXcgRmxvYXQzMkFycmF5KGcqZipoKSxwPW5ldyBGbG9hdDMyQXJyYXkoeCpmKmgpO2ZvcihsZXQgXz0wO188aDtfKyspe2xldCBTPV8lMyoyLzMtMSxMPV8+Mj8wOi0xLEE9W1MsTCwwLFMrMi8zLEwsMCxTKzIvMyxMKzEsMCxTLEwsMCxTKzIvMyxMKzEsMCxTLEwrMSwwXTt2LnNldChBLGQqZipfKSxtLnNldCh1LGcqZipfKTtsZXQgSD1bXyxfLF8sXyxfLF9dO3Auc2V0KEgseCpmKl8pfWxldCBiPW5ldyBIdDtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBRdCh2LGQpKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBRdChtLGcpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUXQocCx4KSksbi5wdXNoKGIpLGk+a3ImJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24geWcobil7bGV0IHQ9bmV3IE5lKDMqaG4sMypobixuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9UmwsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEJhKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBqMShuKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KG4pLGU9bmV3IFQoMCwxLDApO3JldHVybiBuZXcgWHIoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bn0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gdmcoKXtsZXQgbj1uZXcgSygxLDEpO3JldHVybiBuZXcgWHIoe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBfZygpe3JldHVybiBuZXcgWHIoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwOwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDsKCgkJCXZvaWQgbWFpbigpIHsKCgkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTsKCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gamgoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gdFMobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIGkoYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1VdXx8bD09PUJ1LHU9bD09PUFvfHxsPT09Q287aWYoY3x8dSlpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmYS5uZWVkc1BNUkVNVXBkYXRlPT09ITApe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChhKTtyZXR1cm4gZT09PW51bGwmJihlPW5ldyBhbChuKSksaD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGgpOmUuZnJvbUN1YmVtYXAoYSxoKSx0LnNldChhLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgaD1hLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJnIoaCkpe2U9PT1udWxsJiYoZT1uZXcgYWwobikpO2xldCBmPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEsZiksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBhfWZ1bmN0aW9uIHIoYSl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylhW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIHMoYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwLGUhPT1udWxsJiYoZS5kaXNwb3NlKCksZT1udWxsKX1yZXR1cm57Z2V0OmksZGlzcG9zZTpvfX1mdW5jdGlvbiBlUyhuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHRbaV0hPT12b2lkIDApcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSkhPT1udWxsfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gcj09PW51bGwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIG5TKG4sdCxlLGkpe2xldCByPXt9LHM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbyhoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBnIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZ10pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZGVsZXRlIHJbZi5pZF07bGV0IGQ9cy5nZXQoZik7ZCYmKHQucmVtb3ZlKGQpLHMuZGVsZXRlKGYpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYShoLGYpe3JldHVybiByW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHJbZi5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBmKXQudXBkYXRlKGZbZ10sMzQ5NjIpO2xldCBkPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBkKXtsZXQgeD1kW2ddO2ZvcihsZXQgdj0wLG09eC5sZW5ndGg7djxtO3YrKyl0LnVwZGF0ZSh4W3ZdLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxkPWguaW5kZXgsZz1oLmF0dHJpYnV0ZXMucG9zaXRpb24seD0wO2lmKGQhPT1udWxsKXtsZXQgcD1kLmFycmF5O3g9ZC52ZXJzaW9uO2ZvcihsZXQgYj0wLF89cC5sZW5ndGg7YjxfO2IrPTMpe2xldCBTPXBbYiswXSxMPXBbYisxXSxBPXBbYisyXTtmLnB1c2goUyxMLEwsQSxBLFMpfX1lbHNle2xldCBwPWcuYXJyYXk7eD1nLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aC8zLTE7YjxfO2IrPTMpe2xldCBTPWIrMCxMPWIrMSxBPWIrMjtmLnB1c2goUyxMLEwsQSxBLFMpfX1sZXQgdj1uZXcocDAoZik/c2w6cmwpKGYsMSk7di52ZXJzaW9uPXg7bGV0IG09cy5nZXQoaCk7bSYmdC5yZW1vdmUobSkscy5zZXQoaCx2KX1mdW5jdGlvbiB1KGgpe2xldCBmPXMuZ2V0KGgpO2lmKGYpe2xldCBkPWguaW5kZXg7ZCE9PW51bGwmJmYudmVyc2lvbjxkLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBzLmdldChoKX1yZXR1cm57Z2V0OmEsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIGlTKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGYpe3M9Zn1sZXQgYSxsO2Z1bmN0aW9uIGMoZil7YT1mLnR5cGUsbD1mLmJ5dGVzUGVyRWxlbWVudH1mdW5jdGlvbiB1KGYsZCl7bi5kcmF3RWxlbWVudHMocyxkLGEsZipsKSxlLnVwZGF0ZShkLHMsMSl9ZnVuY3Rpb24gaChmLGQsZyl7aWYoZz09PTApcmV0dXJuO2xldCB4LHY7aWYocil4PW4sdj0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHg9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSx2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIseD09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59eFt2XShzLGQsYSxmKmwsZyksZS51cGRhdGUoZCxzLGcpfXRoaXMuc2V0TW9kZT1vLHRoaXMuc2V0SW5kZXg9Yyx0aGlzLnJlbmRlcj11LHRoaXMucmVuZGVySW5zdGFuY2VzPWh9ZnVuY3Rpb24gclMobil7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gaShzLG8sYSl7c3dpdGNoKGUuY2FsbHMrKyxvKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKHMvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKHMvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKHMtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqczticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqczticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixvKTticmVha319ZnVuY3Rpb24gcigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6cix1cGRhdGU6aX19dmFyIGNvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2NvLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBzUyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gb1Mobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gd2cobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gYVMobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxzPW5ldyBXZWFrTWFwLG89bmV3IFQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgZD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBnPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCx4PXMuZ2V0KHUpO2lmKHg9PT12b2lkIDB8fHguY291bnQhPT1nKXtsZXQgUj1mdW5jdGlvbigpe1guZGlzcG9zZSgpLHMuZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9O3ghPT12b2lkIDAmJngudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHA9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sXz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LEw9cD09PSEwPzI6MSxBPVMqTCxIPTE7QT50Lm1heFRleHR1cmVTaXplJiYoSD1NYXRoLmNlaWwoQS90Lm1heFRleHR1cmVTaXplKSxBPXQubWF4VGV4dHVyZVNpemUpO2xldCB0dD1uZXcgRmxvYXQzMkFycmF5KEEqSCo0KmcpLFg9bmV3IGNvKHR0LEEsSCxnKTtYLmZvcm1hdD1SZSxYLnR5cGU9VWksWC5uZWVkc1VwZGF0ZT0hMDtsZXQgeT1MKjQ7Zm9yKGxldCBEPTA7RDxnO0QrKyl7bGV0IEY9YltEXSx6PV9bRF0sTj1BKkgqNCpEO2ZvcihsZXQgVj0wO1Y8Ri5jb3VudDtWKyspe28uZnJvbUJ1ZmZlckF0dHJpYnV0ZShGLFYpLEYubm9ybWFsaXplZD09PSEwJiZ3ZyhvLEYpO2xldCBRPVYqeTt0dFtOK1ErMF09by54LHR0W04rUSsxXT1vLnksdHRbTitRKzJdPW8ueix0dFtOK1ErM109MCxwPT09ITAmJihvLmZyb21CdWZmZXJBdHRyaWJ1dGUoeixWKSx6Lm5vcm1hbGl6ZWQ9PT0hMCYmd2cobyx6KSx0dFtOK1ErNF09by54LHR0W04rUSs1XT1vLnksdHRbTitRKzZdPW8ueix0dFtOK1ErN109MCl9fXg9e2NvdW50OmcsdGV4dHVyZTpYLHNpemU6bmV3IEsoQSxIKX0scy5zZXQodSx4KSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFIpfWxldCB2PTA7Zm9yKGxldCBwPTA7cDxkLmxlbmd0aDtwKyspdis9ZFtwXTtsZXQgbT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS12O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLG0pLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGQpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIix4LnRleHR1cmUsZSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIix4LnNpemUpfWVsc2V7bGV0IGc9ZD09PXZvaWQgMD8wOmQubGVuZ3RoLHg9aVt1LmlkXTtpZih4PT09dm9pZCAwfHx4Lmxlbmd0aCE9PWcpe3g9W107Zm9yKGxldCBfPTA7XzxnO18rKyl4W19dPVtfLDBdO2lbdS5pZF09eH1mb3IobGV0IF89MDtfPGc7XysrKXtsZXQgUz14W19dO1NbMF09XyxTWzFdPWRbX119eC5zb3J0KG9TKTtmb3IobGV0IF89MDtfPDg7XysrKV88ZyYmeFtfXVsxXT8oYVtfXVswXT14W19dWzBdLGFbX11bMV09eFtfXVsxXSk6KGFbX11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtfXVsxXT0wKTthLnNvcnQoc1MpO2xldCB2PXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHA9MDtmb3IobGV0IF89MDtfPDg7XysrKXtsZXQgUz1hW19dLEw9U1swXSxBPVNbMV07TCE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZBPyh2JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pIT09dltMXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfLHZbTF0pLG0mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykhPT1tW0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18sbVtMXSkscltfXT1BLHArPUEpOih2JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyksbSYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pLHJbX109MCl9bGV0IGI9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtcDtmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixiKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19cmV0dXJue3VwZGF0ZTpsfX1mdW5jdGlvbiBsUyhuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIHIuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLHIuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gbygpe3I9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpzLGRpc3Bvc2U6b319dmFyIGxsPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2xsLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIHYwPW5ldyBhZSxfMD1uZXcgY28sdzA9bmV3IGxsLE0wPW5ldyBXcixNZz1bXSxiZz1bXSxTZz1uZXcgRmxvYXQzMkFycmF5KDE2KSxFZz1uZXcgRmxvYXQzMkFycmF5KDkpLFRnPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gZXMobix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxzPU1nW3JdO2lmKHM9PT12b2lkIDAmJihzPW5ldyBGbG9hdDMyQXJyYXkociksTWdbcl09cyksdCE9PTApe2kudG9BcnJheShzLDApO2ZvcihsZXQgbz0xLGE9MDtvIT09dDsrK28pYSs9ZSxuW29dLnRvQXJyYXkocyxhKX1yZXR1cm4gc31mdW5jdGlvbiBMZShuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFRlKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBQbChuLHQpe2xldCBlPWJnW3RdO2U9PT12b2lkIDAmJihlPW5ldyBJbnQzMkFycmF5KHQpLGJnW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIGNTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHVTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gaFMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZlMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLFRlKGUsdCl9fWZ1bmN0aW9uIGRTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47VGcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsVGcpLFRlKGUsaSl9fWZ1bmN0aW9uIHBTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47RWcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRWcpLFRlKGUsaSl9fWZ1bmN0aW9uIG1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47U2cuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsU2cpLFRlKGUsaSl9fWZ1bmN0aW9uIGdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHhTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB5UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gdlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIF9TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB3UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIE1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gYlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBTUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHYwLHIpfWZ1bmN0aW9uIEVTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx3MCxyKX1mdW5jdGlvbiBUUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8TTAscil9ZnVuY3Rpb24gQVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8XzAscil9ZnVuY3Rpb24gQ1Mobil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gY1M7Y2FzZSAzNTY2NDpyZXR1cm4gdVM7Y2FzZSAzNTY2NTpyZXR1cm4gaFM7Y2FzZSAzNTY2NjpyZXR1cm4gZlM7Y2FzZSAzNTY3NDpyZXR1cm4gZFM7Y2FzZSAzNTY3NTpyZXR1cm4gcFM7Y2FzZSAzNTY3NjpyZXR1cm4gbVM7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGdTO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geFM7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB5UztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHZTO2Nhc2UgNTEyNTpyZXR1cm4gX1M7Y2FzZSAzNjI5NDpyZXR1cm4gd1M7Y2FzZSAzNjI5NTpyZXR1cm4gTVM7Y2FzZSAzNjI5NjpyZXR1cm4gYlM7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBTUztjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gRVM7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gVFM7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gQVN9fWZ1bmN0aW9uIFJTKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBMUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gUFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIERTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBJUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gTlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIEZTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gelMobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVTKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCUyhuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT1Mobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGtTKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSFMobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWUyhuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdTKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gV1Mobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNhZmVTZXRUZXh0dXJlMkQodFtzXXx8djAscltzXSl9ZnVuY3Rpb24gcVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUzRCh0W3NdfHx3MCxyW3NdKX1mdW5jdGlvbiBYUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbc118fE0wLHJbc10pfWZ1bmN0aW9uIFlTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zZXRUZXh0dXJlMkRBcnJheSh0W3NdfHxfMCxyW3NdKX1mdW5jdGlvbiBaUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBSUztjYXNlIDM1NjY0OnJldHVybiBMUztjYXNlIDM1NjY1OnJldHVybiBQUztjYXNlIDM1NjY2OnJldHVybiBEUztjYXNlIDM1Njc0OnJldHVybiBJUztjYXNlIDM1Njc1OnJldHVybiBOUztjYXNlIDM1Njc2OnJldHVybiBGUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gelM7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBVUztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEJTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT1M7Y2FzZSA1MTI1OnJldHVybiBrUztjYXNlIDM2Mjk0OnJldHVybiBIUztjYXNlIDM2Mjk1OnJldHVybiBWUztjYXNlIDM2Mjk2OnJldHVybiBHUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFdTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBxUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBZU319ZnVuY3Rpb24gSlMobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9Q1ModC50eXBlKX1mdW5jdGlvbiBiMChuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVpTKHQudHlwZSl9YjAucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLFRlKHQsbil9O2Z1bmN0aW9uIFMwKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1TMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKXtsZXQgbz1pW3JdO28uc2V0VmFsdWUobix0W28uaWRdLGUpfX07dmFyIEN1PS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBBZyhuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiAkUyhuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKEN1Lmxhc3RJbmRleD0wOzspe2xldCBzPUN1LmV4ZWMoaSksbz1DdS5sYXN0SW5kZXgsYT1zWzFdLGw9c1syXT09PSJdIixjPXNbM107aWYobCYmKGE9YXwwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZvKzI9PT1yKXtBZyhlLGM9PT12b2lkIDA/bmV3IEpTKGEsbix0KTpuZXcgYjAoYSxuLHQpKTticmVha31lbHNle2xldCBoPWUubWFwW2FdO2g9PT12b2lkIDAmJihoPW5ldyBTMChhKSxBZyhlLGgpKSxlPWh9fX1mdW5jdGlvbiBpaShuLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCBlPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcj1uLmdldEFjdGl2ZVVuaWZvcm0odCxpKSxzPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKTskUyhyLHMsdGhpcyl9fWlpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTtyIT09dm9pZCAwJiZyLnNldFZhbHVlKG4sZSxpKX07aWkucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO2khPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUobixlLGkpfTtpaS51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPXRbcl0sYT1lW28uaWRdO2EubmVlZHNVcGRhdGUhPT0hMSYmby5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fTtpaS5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9bltpXTtzLmlkIGluIHQmJmUucHVzaChzKX1yZXR1cm4gZX07ZnVuY3Rpb24gQ2cobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfXZhciBLUz0wO2Z1bmN0aW9uIFFTKG4pe2xldCB0PW4uc3BsaXQoYApgKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGpTKG4pe3N3aXRjaChuKXtjYXNlIHJpOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAkdDpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBSZyhuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiZyPT09IiI/IiI6ZS50b1VwcGVyQ2FzZSgpK2AKCmArcitgCgpgK1FTKG4uZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiB0RShuLHQpe2xldCBlPWpTKHQpO3JldHVybiJ2ZWM0ICIrbisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiBlRShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIEF3OmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBDdzplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBSdzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgTHc6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBQdzplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIG5FKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fG4uc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoJHMpLmpvaW4oYApgKX1mdW5jdGlvbiBpRShuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTtpIT09ITEmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiByRShuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBzPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksbz1zLm5hbWUsYT0xO3MudHlwZT09PTM1Njc0JiYoYT0yKSxzLnR5cGU9PT0zNTY3NSYmKGE9Mykscy50eXBlPT09MzU2NzYmJihhPTQpLGVbb109e3R5cGU6cy50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxvKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9ZnVuY3Rpb24gJHMobil7cmV0dXJuIG4hPT0iIn1mdW5jdGlvbiBMZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBQZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIHNFPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gcXUobil7cmV0dXJuIG4ucmVwbGFjZShzRSxvRSl9ZnVuY3Rpb24gb0Uobix0KXtsZXQgZT1QdFt0XTtpZihlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gcXUoZSl9dmFyIGFFPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csbEU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBEZyhuKXtyZXR1cm4gbi5yZXBsYWNlKGxFLEUwKS5yZXBsYWNlKGFFLGNFKX1mdW5jdGlvbiBjRShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksRTAobix0LGUsaSl9ZnVuY3Rpb24gRTAobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBzPXBhcnNlSW50KHQpO3M8cGFyc2VJbnQoZSk7cysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK3MrIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLHMpO3JldHVybiByfWZ1bmN0aW9uIElnKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtuLnByZWNpc2lvbisiIGludDsiO3JldHVybiBuLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6bi5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gdUUobil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gbi5zaGFkb3dNYXBUeXBlPT09bDA/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT1zdz90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09SnMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGhFKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIEFvOmNhc2UgQ286dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBSbDpjYXNlIEtoOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGZFKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIENvOmNhc2UgS2g6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZEUobil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIENsOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBFdzp0PSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIFR3OnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHBFKG4sdCxlLGkpe2xldCByPW4uZ2V0Q29udGV4dCgpLHM9ZS5kZWZpbmVzLG89ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9dUUoZSksYz1oRShlKSx1PWZFKGUpLGg9ZEUoZSksZj1lLmlzV2ViR0wyPyIiOm5FKGUpLGQ9aUUocyksZz1yLmNyZWF0ZVByb2dyYW0oKSx4LHYsbT1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rYApgOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oeD1bZF0uZmlsdGVyKCRzKS5qb2luKGAKYCkseC5sZW5ndGg+MCYmKHgrPWAKYCksdj1bZixkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2Lmxlbmd0aD4wJiYodis9YApgKSk6KHg9W0lnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiZlLmZsYXRTaGFkaW5nPT09ITE/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIglhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCIJYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiCWF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiCWF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiCWF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiCSNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiCSNlbHNlIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiCSNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCIJYXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIglhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2PVtmLElnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PXRpPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PXRpP1B0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PXRpP2VFKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixQdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx0RSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLGAKYF0uZmlsdGVyKCRzKS5qb2luKGAKYCkpLG89cXUobyksbz1MZyhvLGUpLG89UGcobyxlKSxhPXF1KGEpLGE9TGcoYSxlKSxhPVBnKGEsZSksbz1EZyhvKSxhPURnKGEpLGUuaXNXZWJHTDImJmUuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYobT1gI3ZlcnNpb24gMzAwIGVzCmAseD1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK3gsdj1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PW5nPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09bmc/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArdik7bGV0IHA9bSt4K28sYj1tK3YrYSxfPUNnKHIsMzU2MzMscCksUz1DZyhyLDM1NjMyLGIpO2lmKHIuYXR0YWNoU2hhZGVyKGcsXyksci5hdHRhY2hTaGFkZXIoZyxTKSxlLmluZGV4MEF0dHJpYnV0ZU5hbWUhPT12b2lkIDA/ci5iaW5kQXR0cmliTG9jYXRpb24oZywwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ZS5tb3JwaFRhcmdldHM9PT0hMCYmci5iaW5kQXR0cmliTG9jYXRpb24oZywwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZyksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IEg9ci5nZXRQcm9ncmFtSW5mb0xvZyhnKS50cmltKCksdHQ9ci5nZXRTaGFkZXJJbmZvTG9nKF8pLnRyaW0oKSxYPXIuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCkseT0hMCxSPSEwO2lmKHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE0KT09PSExKXt5PSExO2xldCBEPVJnKHIsXywidmVydGV4IiksRj1SZyhyLFMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK0grYApgK0QrYApgK0YpfWVsc2UgSCE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsSCk6KHR0PT09IiJ8fFg9PT0iIikmJihSPSExKTtSJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6eSxwcm9ncmFtTG9nOkgsdmVydGV4U2hhZGVyOntsb2c6dHQscHJlZml4Onh9LGZyYWdtZW50U2hhZGVyOntsb2c6WCxwcmVmaXg6dn19KX1yLmRlbGV0ZVNoYWRlcihfKSxyLmRlbGV0ZVNoYWRlcihTKTtsZXQgTDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIEw9PT12b2lkIDAmJihMPW5ldyBpaShyLGcpKSxMfTtsZXQgQTtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEE9PT12b2lkIDAmJihBPXJFKHIsZykpLEF9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZyksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUtTKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWcsdGhpcy52ZXJ0ZXhTaGFkZXI9Xyx0aGlzLmZyYWdtZW50U2hhZGVyPVMsdGhpc312YXIgbUU9MCxYdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hhZGVyQ2FjaGU9bmV3IE1hcCx0aGlzLm1hdGVyaWFsQ2FjaGU9bmV3IE1hcH11cGRhdGUodCl7bGV0IGU9dC52ZXJ0ZXhTaGFkZXIsaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoZSkscz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxvPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuIG8uaGFzKHIpPT09ITEmJihvLmFkZChyKSxyLnVzZWRUaW1lcysrKSxvLmhhcyhzKT09PSExJiYoby5hZGQocykscy51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLGkudXNlZFRpbWVzPT09MCYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiBlLmhhcyh0KT09PSExJiZlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpfV9nZXRTaGFkZXJTdGFnZSh0KXtsZXQgZT10aGlzLnNoYWRlckNhY2hlO2lmKGUuaGFzKHQpPT09ITEpe2xldCBpPW5ldyBZdTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LFl1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1tRSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBnRShuLHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgaWwsbD1uZXcgWHUsYz1bXSx1PXIuaXNXZWJHTDIsaD1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1yLmZsb2F0VmVydGV4VGV4dHVyZXMsZD1yLm1heFZlcnRleFVuaWZvcm1zLGc9ci52ZXJ0ZXhUZXh0dXJlcyx4PXIucHJlY2lzaW9uLHY9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiBtKHkpe2xldCBEPXkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigoZC0yMCkvNCksTj1NYXRoLm1pbih6LEQubGVuZ3RoKTtyZXR1cm4gTjxELmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitELmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK04rIi4iKSwwKTpOfX1mdW5jdGlvbiBwKHksUixELEYseil7bGV0IE49Ri5mb2csVj15LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFE9KHkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh5LmVudk1hcHx8ViksYXQ9dlt5LnR5cGVdLEc9ei5pc1NraW5uZWRNZXNoP20oeik6MDt5LnByZWNpc2lvbiE9PW51bGwmJih4PXIuZ2V0TWF4UHJlY2lzaW9uKHkucHJlY2lzaW9uKSx4IT09eS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6Iix5LnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHgsImluc3RlYWQuIikpO2xldCAkLGx0LGR0LHh0O2lmKGF0KXtsZXQgQj1mblthdF07JD1CLnZlcnRleFNoYWRlcixsdD1CLmZyYWdtZW50U2hhZGVyfWVsc2UgJD15LnZlcnRleFNoYWRlcixsdD15LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHkpLGR0PWwuZ2V0VmVydGV4U2hhZGVySUQoeSkseHQ9bC5nZXRGcmFnbWVudFNoYWRlcklEKHkpO2xldCBrPW4uZ2V0UmVuZGVyVGFyZ2V0KCksRnQ9eS5hbHBoYVRlc3Q+MCxtdD15LmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmF0LHNoYWRlck5hbWU6eS50eXBlLHZlcnRleFNoYWRlcjokLGZyYWdtZW50U2hhZGVyOmx0LGRlZmluZXM6eS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmR0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6eHQsaXNSYXdTaGFkZXJNYXRlcmlhbDp5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjp5Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjp4LGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmcsb3V0cHV0RW5jb2Rpbmc6az09PW51bGw/bi5vdXRwdXRFbmNvZGluZzprLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9rLnRleHR1cmUuZW5jb2Rpbmc6cmksbWFwOiEheS5tYXAsbWF0Y2FwOiEheS5tYXRjYXAsZW52TWFwOiEhUSxlbnZNYXBNb2RlOlEmJlEubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFRJiYoUS5tYXBwaW5nPT09Umx8fFEubWFwcGluZz09PUtoKSxsaWdodE1hcDohIXkubGlnaHRNYXAsYW9NYXA6ISF5LmFvTWFwLGVtaXNzaXZlTWFwOiEheS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEheS5idW1wTWFwLG5vcm1hbE1hcDohIXkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PWp3LHRhbmdlbnRTcGFjZU5vcm1hbE1hcDp5Lm5vcm1hbE1hcFR5cGU9PT10cyxkZWNvZGVWaWRlb1RleHR1cmU6ISF5Lm1hcCYmeS5tYXAuaXNWaWRlb1RleHR1cmU9PT0hMCYmeS5tYXAuZW5jb2Rpbmc9PT0kdCxjbGVhcmNvYXQ6bXQsY2xlYXJjb2F0TWFwOm10JiYhIXkuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDptdCYmISF5LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6bXQmJiEheS5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEheS5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEheS5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEheS5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF5LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEheS5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEheS5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEheS5hbHBoYU1hcCxhbHBoYVRlc3Q6RnQsYWxwaGFXcml0ZTp5LmFscGhhV3JpdGV8fHkudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISF5LmdyYWRpZW50TWFwLHNoZWVuOnkuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEheS5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEheS5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246eS50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISF5LnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISF5LnRoaWNrbmVzc01hcCxjb21iaW5lOnkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIXkubm9ybWFsTWFwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsdmVydGV4Q29sb3JzOnkudmVydGV4Q29sb3JzLHZlcnRleEFscGhhczp5LnZlcnRleENvbG9ycz09PSEwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiZ6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHZlcnRleFV2czohIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE1hcHx8ISF5LmNsZWFyY29hdFJvdWdobmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8ISF5LmRpc3BsYWNlbWVudE1hcHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCx1dnNWZXJ0ZXhPbmx5OiEoISF5Lm1hcHx8ISF5LmJ1bXBNYXB8fCEheS5ub3JtYWxNYXB8fCEheS5zcGVjdWxhck1hcHx8ISF5LmFscGhhTWFwfHwhIXkuZW1pc3NpdmVNYXB8fCEheS5yb3VnaG5lc3NNYXB8fCEheS5tZXRhbG5lc3NNYXB8fCEheS5jbGVhcmNvYXROb3JtYWxNYXB8fHkudHJhbnNtaXNzaW9uPjB8fCEheS50cmFuc21pc3Npb25NYXB8fCEheS50aGlja25lc3NNYXB8fCEheS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISF5LnNwZWN1bGFyQ29sb3JNYXB8fHkuc2hlZW4+MHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCkmJiEheS5kaXNwbGFjZW1lbnRNYXAsZm9nOiEhTix1c2VGb2c6eS5mb2csZm9nRXhwMjpOJiZOLmlzRm9nRXhwMixmbGF0U2hhZGluZzohIXkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOnkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aCxza2lubmluZzp6LmlzU2tpbm5lZE1lc2g9PT0hMCYmRz4wLG1heEJvbmVzOkcsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpSLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpSLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOlIuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6Ui5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpSLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpSLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpSLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOlIuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6by5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpvLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6eS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZELmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6bi5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzp5LnRvbmVNYXBwZWQ/bi50b25lTWFwcGluZzp0aSxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp5LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDp5LnNpZGU9PT1IcixmbGlwU2lkZWQ6eS5zaWRlPT09aGUsZGVwdGhQYWNraW5nOnkuZGVwdGhQYWNraW5nIT09dm9pZCAwP3kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6eS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTp5LmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKHkpe2xldCBSPVtdO2lmKHkuc2hhZGVySUQ/Ui5wdXNoKHkuc2hhZGVySUQpOihSLnB1c2goeS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksUi5wdXNoKHkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IEQgaW4geS5kZWZpbmVzKVIucHVzaChEKSxSLnB1c2goeS5kZWZpbmVzW0RdKTtyZXR1cm4geS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihfKFIseSksUyhSLHkpLFIucHVzaChuLm91dHB1dEVuY29kaW5nKSksUi5wdXNoKHkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxSLmpvaW4oKX1mdW5jdGlvbiBfKHksUil7eS5wdXNoKFIucHJlY2lzaW9uKSx5LnB1c2goUi5vdXRwdXRFbmNvZGluZykseS5wdXNoKFIuZW52TWFwTW9kZSkseS5wdXNoKFIuY29tYmluZSkseS5wdXNoKFIudmVydGV4VXZzKSx5LnB1c2goUi5mb2dFeHAyKSx5LnB1c2goUi5zaXplQXR0ZW51YXRpb24pLHkucHVzaChSLm1heEJvbmVzKSx5LnB1c2goUi5tb3JwaFRhcmdldHNDb3VudCkseS5wdXNoKFIubnVtRGlyTGlnaHRzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0cykseS5wdXNoKFIubnVtU3BvdExpZ2h0cykseS5wdXNoKFIubnVtSGVtaUxpZ2h0cykseS5wdXNoKFIubnVtUmVjdEFyZWFMaWdodHMpLHkucHVzaChSLm51bURpckxpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtUG9pbnRMaWdodFNoYWRvd3MpLHkucHVzaChSLm51bVNwb3RMaWdodFNoYWRvd3MpLHkucHVzaChSLnNoYWRvd01hcFR5cGUpLHkucHVzaChSLnRvbmVNYXBwaW5nKSx5LnB1c2goUi5udW1DbGlwcGluZ1BsYW5lcykseS5wdXNoKFIubnVtQ2xpcEludGVyc2VjdGlvbikseS5wdXNoKFIuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gUyh5LFIpe2EuZGlzYWJsZUFsbCgpLFIuaXNXZWJHTDImJmEuZW5hYmxlKDApLFIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksUi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxSLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksUi5tYXAmJmEuZW5hYmxlKDQpLFIubWF0Y2FwJiZhLmVuYWJsZSg1KSxSLmVudk1hcCYmYS5lbmFibGUoNiksUi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLFIubGlnaHRNYXAmJmEuZW5hYmxlKDgpLFIuYW9NYXAmJmEuZW5hYmxlKDkpLFIuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxSLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxSLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLFIub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxSLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLFIuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksUi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxSLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLFIuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksUi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxSLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksUi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxSLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLFIuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxSLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksUi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxSLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLFIudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksUi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxSLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksUi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksUi5mb2cmJmEuZW5hYmxlKDMxKSx5LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxSLnVzZUZvZyYmYS5lbmFibGUoMCksUi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksUi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxSLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxSLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLFIubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxSLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksUi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLFIuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksUi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksUi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLFIuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksUi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxSLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLFIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxSLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxSLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLFIudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksUi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxSLnNoZWVuJiZhLmVuYWJsZSgxOSksUi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksUi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMikseS5wdXNoKGEubWFzayl9ZnVuY3Rpb24gTCh5KXtsZXQgUj12W3kudHlwZV0sRDtpZihSKXtsZXQgRj1mbltSXTtEPXBNLmNsb25lKEYudW5pZm9ybXMpfWVsc2UgRD15LnVuaWZvcm1zO3JldHVybiBEfWZ1bmN0aW9uIEEoeSxSKXtsZXQgRDtmb3IobGV0IEY9MCx6PWMubGVuZ3RoO0Y8ejtGKyspe2xldCBOPWNbRl07aWYoTi5jYWNoZUtleT09PVIpe0Q9TiwrK0QudXNlZFRpbWVzO2JyZWFrfX1yZXR1cm4gRD09PXZvaWQgMCYmKEQ9bmV3IHBFKG4sUix5LHMpLGMucHVzaChEKSksRH1mdW5jdGlvbiBIKHkpe2lmKC0teS51c2VkVGltZXM9PT0wKXtsZXQgUj1jLmluZGV4T2YoeSk7Y1tSXT1jW2MubGVuZ3RoLTFdLGMucG9wKCkseS5kZXN0cm95KCl9fWZ1bmN0aW9uIHR0KHkpe2wucmVtb3ZlKHkpfWZ1bmN0aW9uIFgoKXtsLmRpc3Bvc2UoKX1yZXR1cm57Z2V0UGFyYW1ldGVyczpwLGdldFByb2dyYW1DYWNoZUtleTpiLGdldFVuaWZvcm1zOkwsYWNxdWlyZVByb2dyYW06QSxyZWxlYXNlUHJvZ3JhbTpILHJlbGVhc2VTaGFkZXJDYWNoZTp0dCxwcm9ncmFtczpjLGRpc3Bvc2U6WH19ZnVuY3Rpb24geEUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KHMpe2xldCBvPW4uZ2V0KHMpO3JldHVybiBvPT09dm9pZCAwJiYobz17fSxuLnNldChzLG8pKSxvfWZ1bmN0aW9uIGUocyl7bi5kZWxldGUocyl9ZnVuY3Rpb24gaShzLG8sYSl7bi5nZXQocylbb109YX1mdW5jdGlvbiByKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQscmVtb3ZlOmUsdXBkYXRlOmksZGlzcG9zZTpyfX1mdW5jdGlvbiB5RShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBOZyhuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIEZnKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoLGYsZCxnLHgsdil7bGV0IG09blt0XTtyZXR1cm4gbT09PXZvaWQgMD8obT17aWQ6aC5pZCxvYmplY3Q6aCxnZW9tZXRyeTpmLG1hdGVyaWFsOmQsZ3JvdXBPcmRlcjpnLHJlbmRlck9yZGVyOmgucmVuZGVyT3JkZXIsejp4LGdyb3VwOnZ9LG5bdF09bSk6KG0uaWQ9aC5pZCxtLm9iamVjdD1oLG0uZ2VvbWV0cnk9ZixtLm1hdGVyaWFsPWQsbS5ncm91cE9yZGVyPWcsbS5yZW5kZXJPcmRlcj1oLnJlbmRlck9yZGVyLG0uej14LG0uZ3JvdXA9diksdCsrLG19ZnVuY3Rpb24gYShoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnB1c2gobSk6ZC50cmFuc3BhcmVudD09PSEwP3IucHVzaChtKTplLnB1c2gobSl9ZnVuY3Rpb24gbChoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQobSk6ZC50cmFuc3BhcmVudD09PSEwP3IudW5zaGlmdChtKTplLnVuc2hpZnQobSl9ZnVuY3Rpb24gYyhoLGYpe2UubGVuZ3RoPjEmJmUuc29ydChofHx5RSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fE5nKSxyLmxlbmd0aD4xJiZyLnNvcnQoZnx8TmcpfWZ1bmN0aW9uIHUoKXtmb3IobGV0IGg9dCxmPW4ubGVuZ3RoO2g8ZjtoKyspe2xldCBkPW5baF07aWYoZC5pZD09PW51bGwpYnJlYWs7ZC5pZD1udWxsLGQub2JqZWN0PW51bGwsZC5nZW9tZXRyeT1udWxsLGQubWF0ZXJpYWw9bnVsbCxkLmdyb3VwPW51bGx9fXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6cyxwdXNoOmEsdW5zaGlmdDpsLGZpbmlzaDp1LHNvcnQ6Y319ZnVuY3Rpb24gdkUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KGkscil7bGV0IHM7cmV0dXJuIG4uaGFzKGkpPT09ITE/KHM9bmV3IEZnLG4uc2V0KGksW3NdKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhzPW5ldyBGZyxuLmdldChpKS5wdXNoKHMpKTpzPW4uZ2V0KGkpW3JdLHN9ZnVuY3Rpb24gZSgpe249bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LGRpc3Bvc2U6ZX19ZnVuY3Rpb24gX0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsZGlyZWN0aW9uOm5ldyBULGNvbG9yOm5ldyBmdCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxza3lDb2xvcjpuZXcgZnQsZ3JvdW5kQ29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBmdCxwb3NpdGlvbjpuZXcgVCxoYWxmV2lkdGg6bmV3IFQsaGFsZkhlaWdodDpuZXcgVH07YnJlYWt9cmV0dXJuIG5bdC5pZF09ZSxlfX19ZnVuY3Rpb24gd0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBLLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgTUU9MDtmdW5jdGlvbiBiRShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gU0Uobix0KXtsZXQgZT1uZXcgX0UsaT13RSgpLHI9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylyLnByb2JlLnB1c2gobmV3IFQpO2xldCBzPW5ldyBULG89bmV3IHd0LGE9bmV3IHd0O2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLGQ9MCxnPTA7Zm9yKGxldCB0dD0wO3R0PDk7dHQrKylyLnByb2JlW3R0XS5zZXQoMCwwLDApO2xldCB4PTAsdj0wLG09MCxwPTAsYj0wLF89MCxTPTAsTD0wO3Uuc29ydChiRSk7bGV0IEE9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IHR0PTAsWD11Lmxlbmd0aDt0dDxYO3R0Kyspe2xldCB5PXVbdHRdLFI9eS5jb2xvcixEPXkuaW50ZW5zaXR5LEY9eS5kaXN0YW5jZSx6PXkuc2hhZG93JiZ5LnNoYWRvdy5tYXA/eS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZih5LmlzQW1iaWVudExpZ2h0KWYrPVIucipEKkEsZCs9Ui5nKkQqQSxnKz1SLmIqRCpBO2Vsc2UgaWYoeS5pc0xpZ2h0UHJvYmUpZm9yKGxldCBOPTA7Tjw5O04rKylyLnByb2JlW05dLmFkZFNjYWxlZFZlY3Rvcih5LnNoLmNvZWZmaWNpZW50c1tOXSxEKTtlbHNlIGlmKHkuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuZGlyZWN0aW9uYWxTaGFkb3dbeF09USxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW3hdPXosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeFt4XT15LnNoYWRvdy5tYXRyaXgsXysrfXIuZGlyZWN0aW9uYWxbeF09Tix4Kyt9ZWxzZSBpZih5LmlzU3BvdExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbih5Lm1hdHJpeFdvcmxkKSxOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmRpc3RhbmNlPUYsTi5jb25lQ29zPU1hdGguY29zKHkuYW5nbGUpLE4ucGVudW1icmFDb3M9TWF0aC5jb3MoeS5hbmdsZSooMS15LnBlbnVtYnJhKSksTi5kZWNheT15LmRlY2F5LHkuY2FzdFNoYWRvdyl7bGV0IFY9eS5zaGFkb3csUT1pLmdldCh5KTtRLnNoYWRvd0JpYXM9Vi5iaWFzLFEuc2hhZG93Tm9ybWFsQmlhcz1WLm5vcm1hbEJpYXMsUS5zaGFkb3dSYWRpdXM9Vi5yYWRpdXMsUS5zaGFkb3dNYXBTaXplPVYubWFwU2l6ZSxyLnNwb3RTaGFkb3dbbV09USxyLnNwb3RTaGFkb3dNYXBbbV09eixyLnNwb3RTaGFkb3dNYXRyaXhbbV09eS5zaGFkb3cubWF0cml4LEwrK31yLnNwb3RbbV09TixtKyt9ZWxzZSBpZih5LmlzUmVjdEFyZWFMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5jb2xvci5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLE4uaGFsZldpZHRoLnNldCh5LndpZHRoKi41LDAsMCksTi5oYWxmSGVpZ2h0LnNldCgwLHkuaGVpZ2h0Ki41LDApLHIucmVjdEFyZWFbcF09TixwKyt9ZWxzZSBpZih5LmlzUG9pbnRMaWdodCl7bGV0IE49ZS5nZXQoeSk7aWYoTi5jb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkuaW50ZW5zaXR5KkEpLE4uZGlzdGFuY2U9eS5kaXN0YW5jZSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLFEuc2hhZG93Q2FtZXJhTmVhcj1WLmNhbWVyYS5uZWFyLFEuc2hhZG93Q2FtZXJhRmFyPVYuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3ZdPVEsci5wb2ludFNoYWRvd01hcFt2XT16LHIucG9pbnRTaGFkb3dNYXRyaXhbdl09eS5zaGFkb3cubWF0cml4LFMrK31yLnBvaW50W3ZdPU4sdisrfWVsc2UgaWYoeS5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5za3lDb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksTi5ncm91bmRDb2xvci5jb3B5KHkuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksci5oZW1pW2JdPU4sYisrfX1wPjAmJih0LmlzV2ViR0wyfHxuLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0ZMT0FUXzIpOm4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITA/KHIucmVjdEFyZWFMVEMxPW90LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1mLHIuYW1iaWVudFsxXT1kLHIuYW1iaWVudFsyXT1nO2xldCBIPXIuaGFzaDsoSC5kaXJlY3Rpb25hbExlbmd0aCE9PXh8fEgucG9pbnRMZW5ndGghPT12fHxILnNwb3RMZW5ndGghPT1tfHxILnJlY3RBcmVhTGVuZ3RoIT09cHx8SC5oZW1pTGVuZ3RoIT09Ynx8SC5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1ffHxILm51bVBvaW50U2hhZG93cyE9PVN8fEgubnVtU3BvdFNoYWRvd3MhPT1MKSYmKHIuZGlyZWN0aW9uYWwubGVuZ3RoPXgsci5zcG90Lmxlbmd0aD1tLHIucmVjdEFyZWEubGVuZ3RoPXAsci5wb2ludC5sZW5ndGg9dixyLmhlbWkubGVuZ3RoPWIsci5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9XyxyLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1fLHIucG9pbnRTaGFkb3cubGVuZ3RoPVMsci5wb2ludFNoYWRvd01hcC5sZW5ndGg9UyxyLnNwb3RTaGFkb3cubGVuZ3RoPUwsci5zcG90U2hhZG93TWFwLmxlbmd0aD1MLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPV8sci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9UyxyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPUwsSC5kaXJlY3Rpb25hbExlbmd0aD14LEgucG9pbnRMZW5ndGg9dixILnNwb3RMZW5ndGg9bSxILnJlY3RBcmVhTGVuZ3RoPXAsSC5oZW1pTGVuZ3RoPWIsSC5udW1EaXJlY3Rpb25hbFNoYWRvd3M9XyxILm51bVBvaW50U2hhZG93cz1TLEgubnVtU3BvdFNoYWRvd3M9TCxyLnZlcnNpb249TUUrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAsZD0wLGc9MCx4PTAsdj0wLG09aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBwPTAsYj11Lmxlbmd0aDtwPGI7cCsrKXtsZXQgXz11W3BdO2lmKF8uaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgUz1yLmRpcmVjdGlvbmFsW2ZdO1MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxzLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLnRhcmdldC5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24uc3ViKHMpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxmKyt9ZWxzZSBpZihfLmlzU3BvdExpZ2h0KXtsZXQgUz1yLnNwb3RbZ107Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksUy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGcrK31lbHNlIGlmKF8uaXNSZWN0QXJlYUxpZ2h0KXtsZXQgUz1yLnJlY3RBcmVhW3hdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGEuaWRlbnRpdHkoKSxvLmNvcHkoXy5tYXRyaXhXb3JsZCksby5wcmVtdWx0aXBseShtKSxhLmV4dHJhY3RSb3RhdGlvbihvKSxTLmhhbGZXaWR0aC5zZXQoXy53aWR0aCouNSwwLDApLFMuaGFsZkhlaWdodC5zZXQoMCxfLmhlaWdodCouNSwwKSxTLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksUy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSx4Kyt9ZWxzZSBpZihfLmlzUG9pbnRMaWdodCl7bGV0IFM9ci5wb2ludFtkXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxkKyt9ZWxzZSBpZihfLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgUz1yLmhlbWlbdl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxTLmRpcmVjdGlvbi5ub3JtYWxpemUoKSx2Kyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTpyfX1mdW5jdGlvbiB6ZyhuLHQpe2xldCBlPW5ldyBTRShuLHQpLGk9W10scj1bXTtmdW5jdGlvbiBzKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfWZ1bmN0aW9uIG8oaCl7aS5wdXNoKGgpfWZ1bmN0aW9uIGEoaCl7ci5wdXNoKGgpfWZ1bmN0aW9uIGwoaCl7ZS5zZXR1cChpLGgpfWZ1bmN0aW9uIGMoaCl7ZS5zZXR1cFZpZXcoaSxoKX1yZXR1cm57aW5pdDpzLHN0YXRlOntsaWdodHNBcnJheTppLHNoYWRvd3NBcnJheTpyLGxpZ2h0czplfSxzZXR1cExpZ2h0czpsLHNldHVwTGlnaHRzVmlldzpjLHB1c2hMaWdodDpvLHB1c2hTaGFkb3c6YX19ZnVuY3Rpb24gRUUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKHMsbz0wKXtsZXQgYTtyZXR1cm4gZS5oYXMocyk9PT0hMT8oYT1uZXcgemcobix0KSxlLnNldChzLFthXSkpOm8+PWUuZ2V0KHMpLmxlbmd0aD8oYT1uZXcgemcobix0KSxlLmdldChzKS5wdXNoKGEpKTphPWUuZ2V0KHMpW29dLGF9ZnVuY3Rpb24gcigpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDppLGRpc3Bvc2U6cn19dmFyIGNsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz1Ldyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtjbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgdWw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IFQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTt1bC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgVEU9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxBRT1gdW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7CnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKI2luY2x1ZGUgPHBhY2tpbmc+CnZvaWQgbWFpbigpIHsKCWNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTsKCWZsb2F0IG1lYW4gPSAwLjA7CglmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7CglmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7CglmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDsKCWZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkgewoJCWZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTsKCQkjaWZkZWYgSE9SSVpPTlRBTF9QQVNTCgkJCXZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkaXN0cmlidXRpb24ueDsKCQkJc3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54OwoJCSNlbHNlCgkJCWZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkZXB0aDsKCQkJc3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7CgkJI2VuZGlmCgl9CgltZWFuID0gbWVhbiAvIHNhbXBsZXM7CglzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzOwoJZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7CglnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApOwp9YDtmdW5jdGlvbiBUMChuLHQsZSl7bGV0IGk9bmV3IHFyLHI9bmV3IEsscz1uZXcgSyxvPW5ldyBXdCxhPW5ldyBjbCh7ZGVwdGhQYWNraW5nOlF3fSksbD1uZXcgdWwsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsaD17MDpoZSwxOmVvLDI6SHJ9LGY9bmV3IEZuKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBLfSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6VEUsZnJhZ21lbnRTaGFkZXI6QUV9KSxkPWYuY2xvbmUoKTtkLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGc9bmV3IEh0O2cuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgeD1uZXcgb2UoZyxmKSx2PXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1sMCx0aGlzLnJlbmRlcj1mdW5jdGlvbihfLFMsTCl7aWYodi5lbmFibGVkPT09ITF8fHYuYXV0b1VwZGF0ZT09PSExJiZ2Lm5lZWRzVXBkYXRlPT09ITF8fF8ubGVuZ3RoPT09MClyZXR1cm47bGV0IEE9bi5nZXRSZW5kZXJUYXJnZXQoKSxIPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx0dD1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksWD1uLnN0YXRlO1guc2V0QmxlbmRpbmcoam4pLFguYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxYLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksWC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCB5PTAsUj1fLmxlbmd0aDt5PFI7eSsrKXtsZXQgRD1fW3ldLEY9RC5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLEQsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtyLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoeikscy5jb3B5KEYubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKHMueD1NYXRoLmZsb29yKHUvei54KSxyLng9cy54KnoueCxGLm1hcFNpemUueD1zLngpLHIueT51JiYocy55PU1hdGguZmxvb3IodS96LnkpLHIueT1zLnkqei55LEYubWFwU2l6ZS55PXMueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1Kcyl7bGV0IFY9e21pbkZpbHRlcjpiZSxtYWdGaWx0ZXI6YmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IE5lKHIueCxyLnksViksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFY9e21pbkZpbHRlcjpmZSxtYWdGaWx0ZXI6ZmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bi5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLG4uY2xlYXIoKTtsZXQgTj1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFY9MDtWPE47VisrKXtsZXQgUT1GLmdldFZpZXdwb3J0KFYpO28uc2V0KHMueCpRLngscy55KlEueSxzLngqUS56LHMueSpRLncpLFgudmlld3BvcnQobyksRi51cGRhdGVNYXRyaWNlcyhELFYpLGk9Ri5nZXRGcnVzdHVtKCksYihTLEwsRi5jYW1lcmEsRCx0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09SnMmJm0oRixMKSxGLm5lZWRzVXBkYXRlPSExfXYubmVlZHNVcGRhdGU9ITEsbi5zZXRSZW5kZXJUYXJnZXQoQSxILHR0KX07ZnVuY3Rpb24gbShfLFMpe2xldCBMPXQudXBkYXRlKHgpO2YuZGVmaW5lcy5WU01fU0FNUExFUyE9PV8uYmx1clNhbXBsZXMmJihmLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxkLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxmLm5lZWRzVXBkYXRlPSEwLGQubmVlZHNVcGRhdGU9ITApLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXAudGV4dHVyZSxmLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Xy5tYXBTaXplLGYudW5pZm9ybXMucmFkaXVzLnZhbHVlPV8ucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KF8ubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGYseCxudWxsKSxkLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPV8ubWFwUGFzcy50ZXh0dXJlLGQudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChTLG51bGwsTCxkLHgsbnVsbCl9ZnVuY3Rpb24gcChfLFMsTCxBLEgsdHQsWCl7bGV0IHk9bnVsbCxSPUEuaXNQb2ludExpZ2h0PT09ITA/Xy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOl8uY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihSIT09dm9pZCAwP3k9Ujp5PUEuaXNQb2ludExpZ2h0PT09ITA/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJkwuY2xpcFNoYWRvd3M9PT0hMCYmTC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxMLmRpc3BsYWNlbWVudE1hcCYmTC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fEwuYWxwaGFNYXAmJkwuYWxwaGFUZXN0PjApe2xldCBEPXkudXVpZCxGPUwudXVpZCx6PWNbRF07ej09PXZvaWQgMCYmKHo9e30sY1tEXT16KTtsZXQgTj16W0ZdO049PT12b2lkIDAmJihOPXkuY2xvbmUoKSx6W0ZdPU4pLHk9Tn1yZXR1cm4geS52aXNpYmxlPUwudmlzaWJsZSx5LndpcmVmcmFtZT1MLndpcmVmcmFtZSxYPT09SnM/eS5zaWRlPUwuc2hhZG93U2lkZSE9PW51bGw/TC5zaGFkb3dTaWRlOkwuc2lkZTp5LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6aFtMLnNpZGVdLHkuYWxwaGFNYXA9TC5hbHBoYU1hcCx5LmFscGhhVGVzdD1MLmFscGhhVGVzdCx5LmNsaXBTaGFkb3dzPUwuY2xpcFNoYWRvd3MseS5jbGlwcGluZ1BsYW5lcz1MLmNsaXBwaW5nUGxhbmVzLHkuY2xpcEludGVyc2VjdGlvbj1MLmNsaXBJbnRlcnNlY3Rpb24seS5kaXNwbGFjZW1lbnRNYXA9TC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZT1MLmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcz1MLmRpc3BsYWNlbWVudEJpYXMseS53aXJlZnJhbWVMaW5ld2lkdGg9TC53aXJlZnJhbWVMaW5ld2lkdGgseS5saW5ld2lkdGg9TC5saW5ld2lkdGgsQS5pc1BvaW50TGlnaHQ9PT0hMCYmeS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJih5LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSx5Lm5lYXJEaXN0YW5jZT1ILHkuZmFyRGlzdGFuY2U9dHQpLHl9ZnVuY3Rpb24gYihfLFMsTCxBLEgpe2lmKF8udmlzaWJsZT09PSExKXJldHVybjtpZihfLmxheWVycy50ZXN0KFMubGF5ZXJzKSYmKF8uaXNNZXNofHxfLmlzTGluZXx8Xy5pc1BvaW50cykmJihfLmNhc3RTaGFkb3d8fF8ucmVjZWl2ZVNoYWRvdyYmSD09PUpzKSYmKCFfLmZydXN0dW1DdWxsZWR8fGkuaW50ZXJzZWN0c09iamVjdChfKSkpe18ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTC5tYXRyaXhXb3JsZEludmVyc2UsXy5tYXRyaXhXb3JsZCk7bGV0IHk9dC51cGRhdGUoXyksUj1fLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoUikpe2xldCBEPXkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49RFtGXSxWPVJbTi5tYXRlcmlhbEluZGV4XTtpZihWJiZWLnZpc2libGUpe2xldCBRPXAoXyx5LFYsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksUSxfLE4pfX19ZWxzZSBpZihSLnZpc2libGUpe2xldCBEPXAoXyx5LFIsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksRCxfLG51bGwpfX1sZXQgWD1fLmNoaWxkcmVuO2ZvcihsZXQgeT0wLFI9WC5sZW5ndGg7eTxSO3krKyliKFhbeV0sUyxMLEEsSCl9fWZ1bmN0aW9uIENFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIoKXtsZXQgUD0hMSxwdD1uZXcgV3QsaHQ9bnVsbCxFdD1uZXcgV3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oWSl7aHQhPT1ZJiYhUCYmKG4uY29sb3JNYXNrKFksWSxZLFkpLGh0PVkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZLE10LER0LGp0LHplKXt6ZT09PSEwJiYoWSo9anQsTXQqPWp0LER0Kj1qdCkscHQuc2V0KFksTXQsRHQsanQpLEV0LmVxdWFscyhwdCk9PT0hMSYmKG4uY2xlYXJDb2xvcihZLE10LER0LGp0KSxFdC5jb3B5KHB0KSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxodD1udWxsLEV0LnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBzKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oWSl7WT9rKDI5MjkpOkZ0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFkpe3B0IT09WSYmIVAmJihuLmRlcHRoTWFzayhZKSxwdD1ZKX0sc2V0RnVuYzpmdW5jdGlvbihZKXtpZihodCE9PVkpe2lmKFkpc3dpdGNoKFkpe2Nhc2UgeXc6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIHZ3Om4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBfdzpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgenU6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHd3Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBNdzpuLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgYnc6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIFN3Om4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtodD1ZfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFkpe1A9WX0sc2V0Q2xlYXI6ZnVuY3Rpb24oWSl7RXQhPT1ZJiYobi5jbGVhckRlcHRoKFkpLEV0PVkpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGx9fX1mdW5jdGlvbiBvKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24obmUpe1B8fChuZT9rKDI5NjApOkZ0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihuZSl7cHQhPT1uZSYmIVAmJihuLnN0ZW5jaWxNYXNrKG5lKSxwdD1uZSl9LHNldEZ1bmM6ZnVuY3Rpb24obmUsZW4seW4peyhodCE9PW5lfHxFdCE9PWVufHxZIT09eW4pJiYobi5zdGVuY2lsRnVuYyhuZSxlbix5biksaHQ9bmUsRXQ9ZW4sWT15bil9LHNldE9wOmZ1bmN0aW9uKG5lLGVuLHluKXsoTXQhPT1uZXx8RHQhPT1lbnx8anQhPT15bikmJihuLnN0ZW5jaWxPcChuZSxlbix5biksTXQ9bmUsRHQ9ZW4sanQ9eW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24obmUpe1A9bmV9LHNldENsZWFyOmZ1bmN0aW9uKG5lKXt6ZSE9PW5lJiYobi5jbGVhclN0ZW5jaWwobmUpLHplPW5lKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLHB0PW51bGwsaHQ9bnVsbCxFdD1udWxsLFk9bnVsbCxNdD1udWxsLER0PW51bGwsanQ9bnVsbCx6ZT1udWxsfX19bGV0IGE9bmV3IHIsbD1uZXcgcyxjPW5ldyBvLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsRD1uLmdldFBhcmFtZXRlcigzNTY2MSksRj0hMSx6PTAsTj1uLmdldFBhcmFtZXRlcig3OTM4KTtOLmluZGV4T2YoIldlYkdMIikhPT0tMT8oej1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0xKTpOLmluZGV4T2YoIk9wZW5HTCBFUyIpIT09LTEmJih6PXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0yKTtsZXQgVj1udWxsLFE9e30sYXQ9bi5nZXRQYXJhbWV0ZXIoMzA4OCksRz1uLmdldFBhcmFtZXRlcigyOTc4KSwkPW5ldyBXdCgpLmZyb21BcnJheShhdCksbHQ9bmV3IFd0KCkuZnJvbUFycmF5KEcpO2Z1bmN0aW9uIGR0KFAscHQsaHQpe2xldCBFdD1uZXcgVWludDhBcnJheSg0KSxZPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoUCxZKSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MCw5NzI4KTtmb3IobGV0IE10PTA7TXQ8aHQ7TXQrKyluLnRleEltYWdlMkQocHQrTXQsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxFdCk7cmV0dXJuIFl9bGV0IHh0PXt9O3h0WzM1NTNdPWR0KDM1NTMsMzU1MywxKSx4dFszNDA2N109ZHQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksaygyOTI5KSxsLnNldEZ1bmMoenUpLEooITEpLGl0KEFtKSxrKDI4ODQpLEMoam4pO2Z1bmN0aW9uIGsoUCl7dVtQXSE9PSEwJiYobi5lbmFibGUoUCksdVtQXT0hMCl9ZnVuY3Rpb24gRnQoUCl7dVtQXSE9PSExJiYobi5kaXNhYmxlKFApLHVbUF09ITEpfWZ1bmN0aW9uIG10KFAscHQpe3JldHVybiBoW1BdIT09cHQ/KG4uYmluZEZyYW1lYnVmZmVyKFAscHQpLGhbUF09cHQsaSYmKFA9PT0zNjAwOSYmKGhbMzYxNjBdPXB0KSxQPT09MzYxNjAmJihoWzM2MDA5XT1wdCkpLCEwKTohMX1mdW5jdGlvbiBTdChQLHB0KXtsZXQgaHQ9ZCxFdD0hMTtpZihQKWlmKGh0PWYuZ2V0KHB0KSxodD09PXZvaWQgMCYmKGh0PVtdLGYuc2V0KHB0LGh0KSksUC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgWT1QLnRleHR1cmU7aWYoaHQubGVuZ3RoIT09WS5sZW5ndGh8fGh0WzBdIT09MzYwNjQpe2ZvcihsZXQgTXQ9MCxEdD1ZLmxlbmd0aDtNdDxEdDtNdCsrKWh0W010XT0zNjA2NCtNdDtodC5sZW5ndGg9WS5sZW5ndGgsRXQ9ITB9fWVsc2UgaHRbMF0hPT0zNjA2NCYmKGh0WzBdPTM2MDY0LEV0PSEwKTtlbHNlIGh0WzBdIT09MTAyOSYmKGh0WzBdPTEwMjksRXQ9ITApO0V0JiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGh0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChodCkpfWZ1bmN0aW9uIEIoUCl7cmV0dXJuIGchPT1QPyhuLnVzZVByb2dyYW0oUCksZz1QLCEwKTohMX1sZXQgc3Q9e1tJcl06MzI3NzQsW2F3XTozMjc3OCxbbHddOjMyNzc5fTtpZihpKXN0W1BtXT0zMjc3NSxzdFtEbV09MzI3NzY7ZWxzZXtsZXQgUD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO1AhPT1udWxsJiYoc3RbUG1dPVAuTUlOX0VYVCxzdFtEbV09UC5NQVhfRVhUKX1sZXQgbnQ9e1tjd106MCxbdXddOjEsW2h3XTo3NjgsW3UwXTo3NzAsW3h3XTo3NzYsW213XTo3NzQsW2R3XTo3NzIsW2Z3XTo3NjksW2gwXTo3NzEsW2d3XTo3NzUsW3B3XTo3NzN9O2Z1bmN0aW9uIEMoUCxwdCxodCxFdCxZLE10LER0LGp0KXtpZihQPT09am4pe3g9PT0hMCYmKEZ0KDMwNDIpLHg9ITEpO3JldHVybn1pZih4PT09ITEmJihrKDMwNDIpLHg9ITApLFAhPT1vdyl7aWYoUCE9PXZ8fGp0IT09QSl7aWYoKG0hPT1Jcnx8XyE9PUlyKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksbT1JcixfPUlyKSxqdClzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIENtOm4uYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsUCk7YnJlYWt9ZWxzZSBzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgUm06bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgTG06bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31wPW51bGwsYj1udWxsLFM9bnVsbCxMPW51bGwsdj1QLEE9anR9cmV0dXJufVk9WXx8cHQsTXQ9TXR8fGh0LER0PUR0fHxFdCwocHQhPT1tfHxZIT09XykmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShzdFtwdF0sc3RbWV0pLG09cHQsXz1ZKSwoaHQhPT1wfHxFdCE9PWJ8fE10IT09U3x8RHQhPT1MKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUobnRbaHRdLG50W0V0XSxudFtNdF0sbnRbRHRdKSxwPWh0LGI9RXQsUz1NdCxMPUR0KSx2PVAsQT1udWxsfWZ1bmN0aW9uIGooUCxwdCl7UC5zaWRlPT09SHI/RnQoMjg4NCk6aygyODg0KTtsZXQgaHQ9UC5zaWRlPT09aGU7cHQmJihodD0haHQpLEooaHQpLFAuYmxlbmRpbmc9PT1LcyYmUC50cmFuc3BhcmVudD09PSExP0Moam4pOkMoUC5ibGVuZGluZyxQLmJsZW5kRXF1YXRpb24sUC5ibGVuZFNyYyxQLmJsZW5kRHN0LFAuYmxlbmRFcXVhdGlvbkFscGhhLFAuYmxlbmRTcmNBbHBoYSxQLmJsZW5kRHN0QWxwaGEsUC5wcmVtdWx0aXBsaWVkQWxwaGEpLGwuc2V0RnVuYyhQLmRlcHRoRnVuYyksbC5zZXRUZXN0KFAuZGVwdGhUZXN0KSxsLnNldE1hc2soUC5kZXB0aFdyaXRlKSxhLnNldE1hc2soUC5jb2xvcldyaXRlKTtsZXQgRXQ9UC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KEV0KSxFdCYmKGMuc2V0TWFzayhQLnN0ZW5jaWxXcml0ZU1hc2spLGMuc2V0RnVuYyhQLnN0ZW5jaWxGdW5jLFAuc3RlbmNpbFJlZixQLnN0ZW5jaWxGdW5jTWFzayksYy5zZXRPcChQLnN0ZW5jaWxGYWlsLFAuc3RlbmNpbFpGYWlsLFAuc3RlbmNpbFpQYXNzKSksdnQoUC5wb2x5Z29uT2Zmc2V0LFAucG9seWdvbk9mZnNldEZhY3RvcixQLnBvbHlnb25PZmZzZXRVbml0cyksUC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9rKDMyOTI2KTpGdCgzMjkyNil9ZnVuY3Rpb24gSihQKXtIIT09UCYmKFA/bi5mcm9udEZhY2UoMjMwNCk6bi5mcm9udEZhY2UoMjMwNSksSD1QKX1mdW5jdGlvbiBpdChQKXtQIT09aXc/KGsoMjg4NCksUCE9PXR0JiYoUD09PUFtP24uY3VsbEZhY2UoMTAyOSk6UD09PXJ3P24uY3VsbEZhY2UoMTAyOCk6bi5jdWxsRmFjZSgxMDMyKSkpOkZ0KDI4ODQpLHR0PVB9ZnVuY3Rpb24gZXQoUCl7UCE9PVgmJihGJiZuLmxpbmVXaWR0aChQKSxYPVApfWZ1bmN0aW9uIHZ0KFAscHQsaHQpe1A/KGsoMzI4MjMpLCh5IT09cHR8fFIhPT1odCkmJihuLnBvbHlnb25PZmZzZXQocHQsaHQpLHk9cHQsUj1odCkpOkZ0KDMyODIzKX1mdW5jdGlvbiBidChQKXtQP2soMzA4OSk6RnQoMzA4OSl9ZnVuY3Rpb24gSXQoUCl7UD09PXZvaWQgMCYmKFA9MzM5ODQrRC0xKSxWIT09UCYmKG4uYWN0aXZlVGV4dHVyZShQKSxWPVApfWZ1bmN0aW9uIFp0KFAscHQpe1Y9PT1udWxsJiZJdCgpO2xldCBodD1RW1ZdO2h0PT09dm9pZCAwJiYoaHQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxRW1ZdPWh0KSwoaHQudHlwZSE9PVB8fGh0LnRleHR1cmUhPT1wdCkmJihuLmJpbmRUZXh0dXJlKFAscHR8fHh0W1BdKSxodC50eXBlPVAsaHQudGV4dHVyZT1wdCl9ZnVuY3Rpb24gcXQoKXtsZXQgUD1RW1ZdO1AhPT12b2lkIDAmJlAudHlwZSE9PXZvaWQgMCYmKG4uYmluZFRleHR1cmUoUC50eXBlLG51bGwpLFAudHlwZT12b2lkIDAsUC50ZXh0dXJlPXZvaWQgMCl9ZnVuY3Rpb24gRSgpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHcoKXt0cnl7bi50ZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHEoKXt0cnl7bi50ZXhTdWJJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHJ0KCl7dHJ5e24uY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gZ3QoKXt0cnl7bi50ZXhTdG9yYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gVygpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBfdCgpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24geXQoKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHV0KFApeyQuZXF1YWxzKFApPT09ITEmJihuLnNjaXNzb3IoUC54LFAueSxQLnosUC53KSwkLmNvcHkoUCkpfWZ1bmN0aW9uIGN0KFApe2x0LmVxdWFscyhQKT09PSExJiYobi52aWV3cG9ydChQLngsUC55LFAueixQLncpLGx0LmNvcHkoUCkpfWZ1bmN0aW9uIEF0KCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksaT09PSEwJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LFY9bnVsbCxRPXt9LGg9e30sZj1uZXcgV2Vha01hcCxkPVtdLGc9bnVsbCx4PSExLHY9bnVsbCxtPW51bGwscD1udWxsLGI9bnVsbCxfPW51bGwsUz1udWxsLEw9bnVsbCxBPSExLEg9bnVsbCx0dD1udWxsLFg9bnVsbCx5PW51bGwsUj1udWxsLCQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmssZGlzYWJsZTpGdCxiaW5kRnJhbWVidWZmZXI6bXQsZHJhd0J1ZmZlcnM6U3QsdXNlUHJvZ3JhbTpCLHNldEJsZW5kaW5nOkMsc2V0TWF0ZXJpYWw6aixzZXRGbGlwU2lkZWQ6SixzZXRDdWxsRmFjZTppdCxzZXRMaW5lV2lkdGg6ZXQsc2V0UG9seWdvbk9mZnNldDp2dCxzZXRTY2lzc29yVGVzdDpidCxhY3RpdmVUZXh0dXJlOkl0LGJpbmRUZXh0dXJlOlp0LHVuYmluZFRleHR1cmU6cXQsY29tcHJlc3NlZFRleEltYWdlMkQ6RSx0ZXhJbWFnZTJEOl90LHRleEltYWdlM0Q6eXQsdGV4U3RvcmFnZTJEOmd0LHRleFN0b3JhZ2UzRDpXLHRleFN1YkltYWdlMkQ6dyx0ZXhTdWJJbWFnZTNEOnEsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6cnQsc2Npc3Nvcjp1dCx2aWV3cG9ydDpjdCxyZXNldDpBdH19ZnVuY3Rpb24gUkUobix0LGUsaSxyLHMsbyl7bGV0IGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXIubWF4U2FtcGxlcyxkPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGc9bmV3IFdlYWtNYXAseCx2PSExO3RyeXt2PXR5cGVvZiBPZmZzY3JlZW5DYW52YXMhPSJ1bmRlZmluZWQiJiZuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSE9PW51bGx9Y2F0Y2goRSl7fWZ1bmN0aW9uIG0oRSx3KXtyZXR1cm4gdj9uZXcgT2Zmc2NyZWVuQ2FudmFzKEUsdyk6cm8oImNhbnZhcyIpfWZ1bmN0aW9uIHAoRSx3LHEscnQpe2xldCBndD0xO2lmKChFLndpZHRoPnJ0fHxFLmhlaWdodD5ydCkmJihndD1ydC9NYXRoLm1heChFLndpZHRoLEUuaGVpZ2h0KSksZ3Q8MXx8dz09PSEwKWlmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJkUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgVz13P25NOk1hdGguZmxvb3IsX3Q9VyhndCpFLndpZHRoKSx5dD1XKGd0KkUuaGVpZ2h0KTt4PT09dm9pZCAwJiYoeD1tKF90LHl0KSk7bGV0IHV0PXE/bShfdCx5dCk6eDtyZXR1cm4gdXQud2lkdGg9X3QsdXQuaGVpZ2h0PXl0LHV0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwLF90LHl0KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpIHRvICgiK190KyJ4Iit5dCsiKS4iKSx1dH1lbHNlIHJldHVybiJkYXRhImluIEUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIitFLndpZHRoKyJ4IitFLmhlaWdodCsiKS4iKSxFO3JldHVybiBFfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGlnKEUud2lkdGgpJiZpZyhFLmhlaWdodCl9ZnVuY3Rpb24gXyhFKXtyZXR1cm4gYT8hMTpFLndyYXBTIT09VmV8fEUud3JhcFQhPT1WZXx8RS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZX1mdW5jdGlvbiBTKEUsdyl7cmV0dXJuIEUuZ2VuZXJhdGVNaXBtYXBzJiZ3JiZFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIEwoRSl7bi5nZW5lcmF0ZU1pcG1hcChFKX1mdW5jdGlvbiBBKEUsdyxxLHJ0LGd0PSExKXtpZihhPT09ITEpcmV0dXJuIHc7aWYoRSE9PW51bGwpe2lmKG5bRV0hPT12b2lkIDApcmV0dXJuIG5bRV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK0UrIiciKX1sZXQgVz13O3JldHVybiB3PT09NjQwMyYmKHE9PT01MTI2JiYoVz0zMzMyNikscT09PTUxMzEmJihXPTMzMzI1KSxxPT09NTEyMSYmKFc9MzMzMjEpKSx3PT09MzMzMTkmJihxPT09NTEyNiYmKFc9MzMzMjgpLHE9PT01MTMxJiYoVz0zMzMyNykscT09PTUxMjEmJihXPTMzMzIzKSksdz09PTY0MDgmJihxPT09NTEyNiYmKFc9MzQ4MzYpLHE9PT01MTMxJiYoVz0zNDg0MikscT09PTUxMjEmJihXPXJ0PT09JHQmJmd0PT09ITE/MzU5MDc6MzI4NTYpLHE9PT0zMjgxOSYmKFc9MzI4NTQpLHE9PT0zMjgyMCYmKFc9MzI4NTUpKSwoVz09PTMzMzI1fHxXPT09MzMzMjZ8fFc9PT0zMzMyN3x8Vz09PTMzMzI4fHxXPT09MzQ4NDJ8fFc9PT0zNDgzNikmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksV31mdW5jdGlvbiBIKEUsdyxxKXtyZXR1cm4gUyhFLHEpPT09ITB8fEUuaXNGcmFtZWJ1ZmZlclRleHR1cmUmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmU/TWF0aC5sb2cyKE1hdGgubWF4KHcud2lkdGgsdy5oZWlnaHQpKSsxOkUubWlwbWFwcyE9PXZvaWQgMCYmRS5taXBtYXBzLmxlbmd0aD4wP0UubWlwbWFwcy5sZW5ndGg6RS5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KEUuaW1hZ2UpP3cubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiB0dChFKXtyZXR1cm4gRT09PWZlfHxFPT09SW18fEU9PT1ObT85NzI4Ojk3Mjl9ZnVuY3Rpb24gWChFKXtsZXQgdz1FLnRhcmdldDt3LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLFIodyksdy5pc1ZpZGVvVGV4dHVyZSYmZy5kZWxldGUodyksby5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB5KEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRCh3KX1mdW5jdGlvbiBSKEUpe2xldCB3PWkuZ2V0KEUpO3cuX193ZWJnbEluaXQhPT12b2lkIDAmJihuLmRlbGV0ZVRleHR1cmUody5fX3dlYmdsVGV4dHVyZSksaS5yZW1vdmUoRSkpfWZ1bmN0aW9uIEQoRSl7bGV0IHc9RS50ZXh0dXJlLHE9aS5nZXQoRSkscnQ9aS5nZXQodyk7aWYoISFFKXtpZihydC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZShydC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksRS5kZXB0aFRleHR1cmUmJkUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZ3Q9MDtndDw2O2d0Kyspbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcltndF0pLHEuX193ZWJnbERlcHRoYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aGJ1ZmZlcltndF0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcikscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyKSxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcikscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGd0PTAsVz13Lmxlbmd0aDtndDxXO2d0Kyspe2xldCBfdD1pLmdldCh3W2d0XSk7X3QuX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUoX3QuX193ZWJnbFRleHR1cmUpLG8ubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKHdbZ3RdKX1pLnJlbW92ZSh3KSxpLnJlbW92ZShFKX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIE4oKXtsZXQgRT1GO3JldHVybiBFPj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitFKyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSxFfWZ1bmN0aW9uIFYoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLmlzVmlkZW9UZXh0dXJlJiZldChFKSxFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2xldCBydD1FLmltYWdlO2lmKHJ0PT09dm9pZCAwKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZSBpZihydC5jb21wbGV0ZT09PSExKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpO2Vsc2V7ayhxLEUsdyk7cmV0dXJufX1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTUzLHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFEoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2socSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTg2NixxLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBhdChFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDMyODc5LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIEcoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe0Z0KHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzQwNjcscS5fX3dlYmdsVGV4dHVyZSl9bGV0ICQ9e1tPdV06MTA0OTcsW1ZlXTozMzA3MSxba3VdOjMzNjQ4fSxsdD17W2ZlXTo5NzI4LFtJbV06OTk4NCxbTm1dOjk5ODYsW2JlXTo5NzI5LFtEd106OTk4NSxbTGxdOjk5ODd9O2Z1bmN0aW9uIGR0KEUsdyxxKXtpZihxPyhuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwkW3cud3JhcFNdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywkW3cud3JhcFRdKSwoRT09PTMyODc5fHxFPT09MzU4NjYpJiZuLnRleFBhcmFtZXRlcmkoRSwzMjg4MiwkW3cud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCxsdFt3Lm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLGx0W3cubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDMsMzMwNzEpLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLDMzMDcxKSwody53cmFwUyE9PVZlfHx3LndyYXBUIT09VmUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDAsdHQody5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MSx0dCh3Lm1pbkZpbHRlcikpLHcubWluRmlsdGVyIT09ZmUmJncubWluRmlsdGVyIT09YmUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSx0LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik9PT0hMCl7bGV0IHJ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZih3LnR5cGU9PT1VaSYmdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITF8fGE9PT0hMSYmdy50eXBlPT09VXImJnQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITEpcmV0dXJuOyh3LmFuaXNvdHJvcHk+MXx8aS5nZXQodykuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoRSxydC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbih3LmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5PXcuYW5pc290cm9weSl9fWZ1bmN0aW9uIHh0KEUsdyl7RS5fX3dlYmdsSW5pdD09PXZvaWQgMCYmKEUuX193ZWJnbEluaXQ9ITAsdy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixYKSxFLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLG8ubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGsoRSx3LHEpe2xldCBydD0zNTUzO3cuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihydD0zNTg2Niksdy5pc0RhdGFUZXh0dXJlM0QmJihydD0zMjg3OSkseHQoRSx3KSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrcSksZS5iaW5kVGV4dHVyZShydCxFLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLHcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsdy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsdy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGd0PV8odykmJmIody5pbWFnZSk9PT0hMSxXPXAody5pbWFnZSxndCwhMSx1KTtXPXZ0KHcsVyk7bGV0IF90PWIoVyl8fGEseXQ9cy5jb252ZXJ0KHcuZm9ybWF0LHcuZW5jb2RpbmcpLHV0PXMuY29udmVydCh3LnR5cGUpLGN0PUEody5pbnRlcm5hbEZvcm1hdCx5dCx1dCx3LmVuY29kaW5nLHcuaXNWaWRlb1RleHR1cmUpO2R0KHJ0LHcsX3QpO2xldCBBdCxQPXcubWlwbWFwcyxwdD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAsaHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsRXQ9SCh3LFcsX3QpO2lmKHcuaXNEZXB0aFRleHR1cmUpY3Q9NjQwMixhP3cudHlwZT09PVVpP2N0PTM2MDEyOncudHlwZT09PVFhP2N0PTMzMTkwOncudHlwZT09PUJyP2N0PTM1MDU2OmN0PTMzMTg5OncudHlwZT09PVVpJiZjb25zb2xlLmVycm9yKCJXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4iKSx3LmZvcm1hdD09PU9pJiZjdD09PTY0MDImJncudHlwZSE9PW5vJiZ3LnR5cGUhPT1RYSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLHcudHlwZT1ubyx1dD1zLmNvbnZlcnQody50eXBlKSksdy5mb3JtYXQ9PT1WciYmY3Q9PT02NDAyJiYoY3Q9MzQwNDEsdy50eXBlIT09QnImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPUJyLHV0PXMuY29udmVydCh3LnR5cGUpKSkscHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxjdCxXLndpZHRoLFcuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxudWxsKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZSlpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSk7dy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBwdD8oaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVy53aWR0aCxXLmhlaWdodCx5dCx1dCxXLmRhdGEpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxXLmRhdGEpO2Vsc2UgaWYody5pc0NvbXByZXNzZWRUZXh0dXJlKXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSx3LmZvcm1hdCE9PVJlP3l0IT09bnVsbD9wdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LEF0LmRhdGEpOmUuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLEF0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEF0LndpZHRoLEF0LmhlaWdodCx5dCx1dCxBdC5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLHl0LHV0LEF0LmRhdGEpfWVsc2UgaWYody5pc0RhdGFUZXh0dXJlMkRBcnJheSlwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDM1ODY2LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUzRClwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDMyODc5LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzMjg3OSwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRnJhbWVidWZmZXJUZXh0dXJlKXB0JiZodD9lLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYoUC5sZW5ndGg+MCYmX3Qpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLHl0LHV0LEF0KTplLnRleEltYWdlMkQoMzU1MyxZLGN0LHl0LHV0LEF0KTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCx5dCx1dCxXKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCx5dCx1dCxXKTtTKHcsX3QpJiZMKHJ0KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBGdChFLHcscSl7aWYody5pbWFnZS5sZW5ndGghPT02KXJldHVybjt4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKDM0MDY3LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgcnQ9dyYmKHcuaXNDb21wcmVzc2VkVGV4dHVyZXx8dy5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxndD13LmltYWdlWzBdJiZ3LmltYWdlWzBdLmlzRGF0YVRleHR1cmUsVz1bXTtmb3IobGV0IFk9MDtZPDY7WSsrKSFydCYmIWd0P1dbWV09cCh3LmltYWdlW1ldLCExLCEwLGMpOldbWV09Z3Q/dy5pbWFnZVtZXS5pbWFnZTp3LmltYWdlW1ldLFdbWV09dnQodyxXW1ldKTtsZXQgX3Q9V1swXSx5dD1iKF90KXx8YSx1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9YSYmdy5pc1ZpZGVvVGV4dHVyZSE9PSEwLHB0PUUuX192ZXJzaW9uPT09dm9pZCAwLGh0PUgodyxfdCx5dCk7ZHQoMzQwNjcsdyx5dCk7bGV0IEV0O2lmKHJ0KXtQJiZwdCYmZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsX3Qud2lkdGgsX3QuaGVpZ2h0KTtmb3IobGV0IFk9MDtZPDY7WSsrKXtFdD1XW1ldLm1pcG1hcHM7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQgRHQ9RXRbTXRdO3cuZm9ybWF0IT09UmU/dXQhPT1udWxsP1A/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsRHQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStZLE10LEF0LER0LndpZHRoLER0LmhlaWdodCwwLER0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCkiKTpQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsY3QsRHQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsdXQsY3QsRHQuZGF0YSl9fX1lbHNle0V0PXcubWlwbWFwcyxQJiZwdCYmKEV0Lmxlbmd0aD4wJiZodCsrLGUudGV4U3RvcmFnZTJEKDM0MDY3LGh0LEF0LFdbMF0ud2lkdGgsV1swXS5oZWlnaHQpKTtmb3IobGV0IFk9MDtZPDY7WSsrKWlmKGd0KXtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLDAsMCwwLFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsdXQsY3QsV1tZXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsMCx1dCxjdCxXW1ldLmRhdGEpO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IGp0PUV0W010XS5pbWFnZVtZXS5pbWFnZTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLGp0LndpZHRoLGp0LmhlaWdodCx1dCxjdCxqdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LGp0LndpZHRoLGp0LmhlaWdodCwwLHV0LGN0LGp0LmRhdGEpfX1lbHNle1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsdXQsY3QsV1tZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksMCxBdCx1dCxjdCxXW1ldKTtmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSxNdCsxLDAsMCx1dCxjdCxEdC5pbWFnZVtZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQrMSxBdCx1dCxjdCxEdC5pbWFnZVtZXSl9fX1TKHcseXQpJiZMKDM0MDY3KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBtdChFLHcscSxydCxndCl7bGV0IFc9cy5jb252ZXJ0KHEuZm9ybWF0LHEuZW5jb2RpbmcpLF90PXMuY29udmVydChxLnR5cGUpLHl0PUEocS5pbnRlcm5hbEZvcm1hdCxXLF90LHEuZW5jb2RpbmcpO2kuZ2V0KHcpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGd0PT09MzI4Nzl8fGd0PT09MzU4NjY/ZS50ZXhJbWFnZTNEKGd0LDAseXQsdy53aWR0aCx3LmhlaWdodCx3LmRlcHRoLDAsVyxfdCxudWxsKTplLnRleEltYWdlMkQoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LDAsVyxfdCxudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHJ0LGd0LGkuZ2V0KHEpLl9fd2ViZ2xUZXh0dXJlLDAsaXQodykpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gU3QoRSx3LHEpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxFKSx3LmRlcHRoQnVmZmVyJiYhdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9MzMxODk7aWYocXx8dy51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBndD13LmRlcHRoVGV4dHVyZTtndCYmZ3QuaXNEZXB0aFRleHR1cmUmJihndC50eXBlPT09VWk/cnQ9MzYwMTI6Z3QudHlwZT09PVFhJiYocnQ9MzMxOTApKTtsZXQgVz1pdCh3KTt3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxXLHJ0LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscnQsdy53aWR0aCx3LmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxFKX1lbHNlIGlmKHcuZGVwdGhCdWZmZXImJncuc3RlbmNpbEJ1ZmZlcil7bGV0IHJ0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSx3LndpZHRoLHcuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLEUpfWVsc2V7bGV0IHJ0PXcuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3cudGV4dHVyZVswXTp3LnRleHR1cmUsZ3Q9cy5jb252ZXJ0KHJ0LmZvcm1hdCxydC5lbmNvZGluZyksVz1zLmNvbnZlcnQocnQudHlwZSksX3Q9QShydC5pbnRlcm5hbEZvcm1hdCxndCxXLHJ0LmVuY29kaW5nKSx5dD1pdCh3KTtxJiZ3LnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTp3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsX3Qsdy53aWR0aCx3LmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIEIoRSx3KXtpZih3JiZ3LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXRocm93IG5ldyBFcnJvcigiRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEUpLCEody5kZXB0aFRleHR1cmUmJncuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KHcuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8dy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT13LndpZHRofHx3LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT13LmhlaWdodCkmJih3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD13LndpZHRoLHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD13LmhlaWdodCx3LmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVih3LmRlcHRoVGV4dHVyZSwwKTtsZXQgcnQ9aS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGd0PWl0KHcpO2lmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PU9pKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxydCwwKTtlbHNlIGlmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PVZyKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxydCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gc3QoRSl7bGV0IHc9aS5nZXQoRSkscT1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYoRS5kZXB0aFRleHR1cmUmJiF3Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKHEpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO0Iody5fX3dlYmdsRnJhbWVidWZmZXIsRSl9ZWxzZSBpZihxKXt3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IHJ0PTA7cnQ8NjtydCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHcuX193ZWJnbEZyYW1lYnVmZmVyW3J0XSksdy5fX3dlYmdsRGVwdGhidWZmZXJbcnRdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXJbcnRdLEUsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXIpLHcuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXIsRSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gbnQoRSx3LHEpe2xldCBydD1pLmdldChFKTt3IT09dm9pZCAwJiZtdChydC5fX3dlYmdsRnJhbWVidWZmZXIsRSxFLnRleHR1cmUsMzYwNjQsMzU1MykscSE9PXZvaWQgMCYmc3QoRSl9ZnVuY3Rpb24gQyhFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHkpLEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyE9PSEwJiYocnQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihydC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSkscnQuX192ZXJzaW9uPXcudmVyc2lvbixvLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgZ3Q9RS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFc9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITAsX3Q9dy5pc0RhdGFUZXh0dXJlM0R8fHcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseXQ9YihFKXx8YTtpZihndCl7cS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCB1dD0wO3V0PDY7dXQrKylxLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYocS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFcpaWYoci5kcmF3QnVmZmVycyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPWkuZ2V0KHV0W2N0XSk7UC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKFAuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihFLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCkscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCB1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9aXQoRSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsUCxBdCxFLndpZHRoLEUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLEUuZGVwdGhCdWZmZXImJihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFN0KHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLEUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGd0KXtlLmJpbmRUZXh0dXJlKDM0MDY3LHJ0Ll9fd2ViZ2xUZXh0dXJlKSxkdCgzNDA2Nyx3LHl0KTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKW10KHEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XSxFLHcsMzYwNjQsMzQwNjkrdXQpO1Modyx5dCkmJkwoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPXV0W2N0XSxwdD1pLmdldChQKTtlLmJpbmRUZXh0dXJlKDM1NTMscHQuX193ZWJnbFRleHR1cmUpLGR0KDM1NTMsUCx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSxQLDM2MDY0K2N0LDM1NTMpLFMoUCx5dCkmJkwoMzU1Myl9ZS51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgdXQ9MzU1MztfdCYmKGE/dXQ9dy5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLGUuYmluZFRleHR1cmUodXQscnQuX193ZWJnbFRleHR1cmUpLGR0KHV0LHcseXQpLG10KHEuX193ZWJnbEZyYW1lYnVmZmVyLEUsdywzNjA2NCx1dCksUyh3LHl0KSYmTCh1dCksZS51bmJpbmRUZXh0dXJlKCl9RS5kZXB0aEJ1ZmZlciYmc3QoRSl9ZnVuY3Rpb24gaihFKXtsZXQgdz1iKEUpfHxhLHE9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/RS50ZXh0dXJlOltFLnRleHR1cmVdO2ZvcihsZXQgcnQ9MCxndD1xLmxlbmd0aDtydDxndDtydCsrKXtsZXQgVz1xW3J0XTtpZihTKFcsdykpe2xldCBfdD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PzM0MDY3OjM1NTMseXQ9aS5nZXQoVykuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShfdCx5dCksTChfdCksZS51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBKKEUpe2lmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe2xldCB3PUUud2lkdGgscT1FLmhlaWdodCxydD0xNjM4NCxndD1bMzYwNjRdLFc9RS5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O0UuZGVwdGhCdWZmZXImJmd0LnB1c2goVyksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weXx8KEUuZGVwdGhCdWZmZXImJihydHw9MjU2KSxFLnN0ZW5jaWxCdWZmZXImJihydHw9MTAyNCkpO2xldCBfdD1pLmdldChFKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtXXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1ddKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHcscSwwLDAsdyxxLHJ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGd0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gaXQoRSl7cmV0dXJuIGEmJihFLnVzZVJlbmRlcmJ1ZmZlcnx8RS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsRS5zYW1wbGVzKTowfWZ1bmN0aW9uIGV0KEUpe2xldCB3PW8ucmVuZGVyLmZyYW1lO2cuZ2V0KEUpIT09dyYmKGcuc2V0KEUsdyksRS51cGRhdGUoKSl9ZnVuY3Rpb24gdnQoRSx3KXtsZXQgcT1FLmVuY29kaW5nLHJ0PUUuZm9ybWF0LGd0PUUudHlwZTtyZXR1cm4gRS5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fEUuaXNWaWRlb1RleHR1cmU9PT0hMHx8RS5mb3JtYXQ9PT1IdXx8cSE9PXJpJiYocT09PSR0P2E9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiZydD09PVJlPyhFLmZvcm1hdD1IdSxFLm1pbkZpbHRlcj1iZSxFLmdlbmVyYXRlTWlwbWFwcz0hMSk6dz1Obi5zUkdCVG9MaW5lYXIodyk6KHJ0IT09UmV8fGd0IT09ZWkpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixxKSksd31sZXQgYnQ9ITEsSXQ9ITE7ZnVuY3Rpb24gWnQoRSx3KXtFJiZFLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihidD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYnQ9ITApLEU9RS50ZXh0dXJlKSxWKEUsdyl9ZnVuY3Rpb24gcXQoRSx3KXtFJiZFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoSXQ9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxJdD0hMCksRT1FLnRleHR1cmUpLEcoRSx3KX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9Tix0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vix0aGlzLnNldFRleHR1cmUyREFycmF5PVEsdGhpcy5zZXRUZXh0dXJlM0Q9YXQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1HLHRoaXMucmViaW5kVGV4dHVyZXM9bnQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1DLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWosdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1KLHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1zdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPW10LHRoaXMuc2FmZVNldFRleHR1cmUyRD1adCx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1xdH1mdW5jdGlvbiBMRShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtmdW5jdGlvbiByKHMsbz1udWxsKXtsZXQgYTtpZihzPT09ZWkpcmV0dXJuIDUxMjE7aWYocz09PXp3KXJldHVybiAzMjgxOTtpZihzPT09VXcpcmV0dXJuIDMyODIwO2lmKHM9PT1JdylyZXR1cm4gNTEyMDtpZihzPT09TncpcmV0dXJuIDUxMjI7aWYocz09PW5vKXJldHVybiA1MTIzO2lmKHM9PT1GdylyZXR1cm4gNTEyNDtpZihzPT09UWEpcmV0dXJuIDUxMjU7aWYocz09PVVpKXJldHVybiA1MTI2O2lmKHM9PT1VcilyZXR1cm4gaT81MTMxOihhPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksYSE9PW51bGw/YS5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihzPT09QncpcmV0dXJuIDY0MDY7aWYocz09PVJlKXJldHVybiA2NDA4O2lmKHM9PT1PdylyZXR1cm4gNjQwOTtpZihzPT09a3cpcmV0dXJuIDY0MTA7aWYocz09PU9pKXJldHVybiA2NDAyO2lmKHM9PT1WcilyZXR1cm4gMzQwNDE7aWYocz09PUh3KXJldHVybiA2NDAzO2lmKHM9PT1IdSlyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxhIT09bnVsbD9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYocz09PVZ3KXJldHVybiAzNjI0NDtpZihzPT09R3cpcmV0dXJuIDMzMzE5O2lmKHM9PT1XdylyZXR1cm4gMzMzMjA7aWYocz09PXF3KXJldHVybiAzNjI0OTtpZihzPT09S2N8fHM9PT1RY3x8cz09PWpjfHxzPT09dHUpaWYobz09PSR0KWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxhIT09bnVsbCl7aWYocz09PUtjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7ZWxzZSBpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihzPT09UWMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYocz09PWpjKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKHM9PT10dSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1GbXx8cz09PXptfHxzPT09VW18fHM9PT1CbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxhIT09bnVsbCl7aWYocz09PUZtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PXptKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYocz09PVVtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKHM9PT1CbSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1YdylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxhIT09bnVsbD9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihzPT09T218fHM9PT1rbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksYSE9PW51bGwpe2lmKHM9PT1PbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYocz09PWttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09SG18fHM9PT1WbXx8cz09PUdtfHxzPT09V218fHM9PT1xbXx8cz09PVhtfHxzPT09WW18fHM9PT1abXx8cz09PUptfHxzPT09JG18fHM9PT1LbXx8cz09PVFtfHxzPT09am18fHM9PT10ZylpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLGEhPT1udWxsKXtpZihzPT09SG0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYocz09PVZtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKHM9PT1HbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtpZihzPT09V20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYocz09PXFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKHM9PT1YbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtpZihzPT09WW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYocz09PVptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKHM9PT1KbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO2lmKHM9PT0kbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKHM9PT1LbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKHM9PT1RbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7aWYocz09PWptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihzPT09dGcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PWVnKWlmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxhIT09bnVsbCl7aWYocz09PWVnKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09QnIpcmV0dXJuIGk/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxhIT09bnVsbD9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0OnJ9fXZhciBobD1jbGFzcyBleHRlbmRzIFNle2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtobC5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgQmk9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtCaS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgUEU9e3R5cGU6Im1vdmUifSxRcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgQmksdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBCaSx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgVCksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IEJpLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwscz1udWxsLG89bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJmUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihhIT09bnVsbCYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksciE9PW51bGwmJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KFBFKSkpLGMmJnQuaGFuZCl7bz0hMDtmb3IobGV0IHggb2YgdC5oYW5kLnZhbHVlcygpKXtsZXQgdj1lLmdldEpvaW50UG9zZSh4LGkpO2lmKGMuam9pbnRzW3guam9pbnROYW1lXT09PXZvaWQgMCl7bGV0IHA9bmV3IEJpO3AubWF0cml4QXV0b1VwZGF0ZT0hMSxwLnZpc2libGU9ITEsYy5qb2ludHNbeC5qb2ludE5hbWVdPXAsYy5hZGQocCl9bGV0IG09Yy5qb2ludHNbeC5qb2ludE5hbWVdO3YhPT1udWxsJiYobS5tYXRyaXguZnJvbUFycmF5KHYudHJhbnNmb3JtLm1hdHJpeCksbS5tYXRyaXguZGVjb21wb3NlKG0ucG9zaXRpb24sbS5yb3RhdGlvbixtLnNjYWxlKSxtLmpvaW50UmFkaXVzPXYucmFkaXVzKSxtLnZpc2libGU9diE9PW51bGx9bGV0IHU9Yy5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXSxoPWMuam9pbnRzWyJ0aHVtYi10aXAiXSxmPXUucG9zaXRpb24uZGlzdGFuY2VUbyhoLnBvc2l0aW9uKSxkPS4wMixnPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPmQrZz8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJmY8PWQtZyYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbCE9PW51bGwmJnQuZ3JpcFNwYWNlJiYocz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSkscyE9PW51bGwmJihsLm1hdHJpeC5mcm9tQXJyYXkocy50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLHMubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KHMubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLHMuYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHMuYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gYSE9PW51bGwmJihhLnZpc2libGU9ciE9PW51bGwpLGwhPT1udWxsJiYobC52aXNpYmxlPXMhPT1udWxsKSxjIT09bnVsbCYmKGMudmlzaWJsZT1vIT09bnVsbCksdGhpc319LHVvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSl7aWYodT11IT09dm9pZCAwP3U6T2ksdSE9PU9pJiZ1IT09VnIpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO2k9PT12b2lkIDAmJnU9PT1PaSYmKGk9bm8pLGk9PT12b2lkIDAmJnU9PT1WciYmKGk9QnIpLHN1cGVyKG51bGwscixzLG8sYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj1hIT09dm9pZCAwP2E6ZmUsdGhpcy5taW5GaWx0ZXI9bCE9PXZvaWQgMD9sOmZlLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTt1by5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIFp1PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLHM9MSxvPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLGQ9ITEsZz1udWxsLHg9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLHY9bnVsbCxtPW51bGwscD1bXSxiPW5ldyBNYXAsXz1uZXcgU2U7Xy5sYXllcnMuZW5hYmxlKDEpLF8udmlld3BvcnQ9bmV3IFd0O2xldCBTPW5ldyBTZTtTLmxheWVycy5lbmFibGUoMiksUy52aWV3cG9ydD1uZXcgV3Q7bGV0IEw9W18sU10sQT1uZXcgaGw7QS5sYXllcnMuZW5hYmxlKDEpLEEubGF5ZXJzLmVuYWJsZSgyKTtsZXQgSD1udWxsLHR0PW51bGw7dGhpcy5jYW1lcmFBdXRvVXBkYXRlPSEwLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldEhhbmRTcGFjZSgpfTtmdW5jdGlvbiBYKEcpe2xldCAkPWIuZ2V0KEcuaW5wdXRTb3VyY2UpOyQmJiQuZGlzcGF0Y2hFdmVudCh7dHlwZTpHLnR5cGUsZGF0YTpHLmlucHV0U291cmNlfSl9ZnVuY3Rpb24geSgpe2IuZm9yRWFjaChmdW5jdGlvbihHLCQpe0cuZGlzY29ubmVjdCgkKX0pLGIuY2xlYXIoKSxIPW51bGwsdHQ9bnVsbCx0LnNldFJlbmRlclRhcmdldCh2KSxmPW51bGwsaD1udWxsLHU9bnVsbCxyPW51bGwsbT1udWxsLGF0LnN0b3AoKSxpLmlzUHJlc2VudGluZz0hMSxpLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKEcpe3M9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbihHKXthPUcsaS5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oRyl7cmV0dXJuIGhmKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihyPUcsciE9PW51bGwpe2lmKHY9dC5nZXRSZW5kZXJUYXJnZXQoKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJlbmQiLHkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixSKSx4LnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgZS5tYWtlWFJDb21wYXRpYmxlKCkpLHIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgJD17YW50aWFsaWFzOnIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP3guYW50aWFsaWFzOiEwLGFscGhhOnguYWxwaGEsZGVwdGg6eC5kZXB0aCxzdGVuY2lsOnguc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOnN9O2Y9bmV3IFhSV2ViR0xMYXllcihyLGUsJCksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOmZ9KSxtPW5ldyBOZShmLmZyYW1lYnVmZmVyV2lkdGgsZi5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pfWVsc2V7ZD14LmFudGlhbGlhcztsZXQgJD1udWxsLGx0PW51bGwsZHQ9bnVsbDt4LmRlcHRoJiYoZHQ9eC5zdGVuY2lsPzM1MDU2OjMzMTkwLCQ9eC5zdGVuY2lsP1ZyOk9pLGx0PXguc3RlbmNpbD9Ccjpubyk7bGV0IHh0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09JHQ/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6ZHQsc2NhbGVGYWN0b3I6c307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKHh0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSksZD9tPW5ldyBzbyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpSZSx0eXBlOmVpLGRlcHRoVGV4dHVyZTpuZXcgdW8oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCQpLHN0ZW5jaWxCdWZmZXI6eC5zdGVuY2lsLGlnbm9yZURlcHRoOmguaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm09bmV3IE5lKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9bS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLG89eWllbGQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksYXQuc2V0Q29udGV4dChyKSxhdC5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBSKEcpe2xldCAkPXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgbHQ9MDtsdDxwLmxlbmd0aDtsdCsrKWIuc2V0KCRbbHRdLHBbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Ry5yZW1vdmVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5yZW1vdmVkW2x0XSx4dD1iLmdldChkdCk7eHQmJih4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6ZHR9KSxiLmRlbGV0ZShkdCkpfWZvcihsZXQgbHQ9MDtsdDxHLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5hZGRlZFtsdF0seHQ9Yi5nZXQoZHQpO3h0JiZ4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6ZHR9KX19bGV0IEQ9bmV3IFQsRj1uZXcgVDtmdW5jdGlvbiB6KEcsJCxsdCl7RC5zZXRGcm9tTWF0cml4UG9zaXRpb24oJC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24obHQubWF0cml4V29ybGQpO2xldCBkdD1ELmRpc3RhbmNlVG8oRikseHQ9JC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLGs9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxGdD14dFsxNF0vKHh0WzEwXS0xKSxtdD14dFsxNF0vKHh0WzEwXSsxKSxTdD0oeHRbOV0rMSkveHRbNV0sQj0oeHRbOV0tMSkveHRbNV0sc3Q9KHh0WzhdLTEpL3h0WzBdLG50PShrWzhdKzEpL2tbMF0sQz1GdCpzdCxqPUZ0Km50LEo9ZHQvKC1zdCtudCksaXQ9Siotc3Q7JC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy50cmFuc2xhdGVYKGl0KSxHLnRyYW5zbGF0ZVooSiksRy5tYXRyaXhXb3JsZC5jb21wb3NlKEcucG9zaXRpb24sRy5xdWF0ZXJuaW9uLEcuc2NhbGUpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGV0PUZ0K0osdnQ9bXQrSixidD1DLWl0LEl0PWorKGR0LWl0KSxadD1TdCptdC92dCpldCxxdD1CKm10L3Z0KmV0O0cucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoYnQsSXQsWnQscXQsZXQsdnQpfWZ1bmN0aW9uIE4oRywkKXskPT09bnVsbD9HLm1hdHJpeFdvcmxkLmNvcHkoRy5tYXRyaXgpOkcubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcygkLm1hdHJpeFdvcmxkLEcubWF0cml4KSxHLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KEcubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKEcpe2lmKHI9PT1udWxsKXJldHVybjtBLm5lYXI9Uy5uZWFyPV8ubmVhcj1HLm5lYXIsQS5mYXI9Uy5mYXI9Xy5mYXI9Ry5mYXIsKEghPT1BLm5lYXJ8fHR0IT09QS5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOkEubmVhcixkZXB0aEZhcjpBLmZhcn0pLEg9QS5uZWFyLHR0PUEuZmFyKTtsZXQgJD1HLnBhcmVudCxsdD1BLmNhbWVyYXM7TihBLCQpO2ZvcihsZXQgeHQ9MDt4dDxsdC5sZW5ndGg7eHQrKylOKGx0W3h0XSwkKTtBLm1hdHJpeFdvcmxkLmRlY29tcG9zZShBLnBvc2l0aW9uLEEucXVhdGVybmlvbixBLnNjYWxlKSxHLnBvc2l0aW9uLmNvcHkoQS5wb3NpdGlvbiksRy5xdWF0ZXJuaW9uLmNvcHkoQS5xdWF0ZXJuaW9uKSxHLnNjYWxlLmNvcHkoQS5zY2FsZSksRy5tYXRyaXguY29weShBLm1hdHJpeCksRy5tYXRyaXhXb3JsZC5jb3B5KEEubWF0cml4V29ybGQpO2xldCBkdD1HLmNoaWxkcmVuO2ZvcihsZXQgeHQ9MCxrPWR0Lmxlbmd0aDt4dDxrO3h0KyspZHRbeHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtsdC5sZW5ndGg9PT0yP3ooQSxfLFMpOkEucHJvamVjdGlvbk1hdHJpeC5jb3B5KF8ucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKEcpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1HKSxmIT09bnVsbCYmZi5maXhlZEZvdmVhdGlvbiE9PXZvaWQgMCYmKGYuZml4ZWRGb3ZlYXRpb249Ryl9O2xldCBWPW51bGw7ZnVuY3Rpb24gUShHLCQpe2lmKGM9JC5nZXRWaWV3ZXJQb3NlKG8pLGc9JCxjIT09bnVsbCl7bGV0IGR0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKG0sZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQobSkpO2xldCB4dD0hMTtkdC5sZW5ndGghPT1BLmNhbWVyYXMubGVuZ3RoJiYoQS5jYW1lcmFzLmxlbmd0aD0wLHh0PSEwKTtmb3IobGV0IGs9MDtrPGR0Lmxlbmd0aDtrKyspe2xldCBGdD1kdFtrXSxtdD1udWxsO2lmKGYhPT1udWxsKW10PWYuZ2V0Vmlld3BvcnQoRnQpO2Vsc2V7bGV0IEI9dS5nZXRWaWV3U3ViSW1hZ2UoaCxGdCk7bXQ9Qi52aWV3cG9ydCxrPT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMobSxCLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpCLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KG0pKX1sZXQgU3Q9TFtrXTtTdC5tYXRyaXguZnJvbUFycmF5KEZ0LnRyYW5zZm9ybS5tYXRyaXgpLFN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEZ0LnByb2plY3Rpb25NYXRyaXgpLFN0LnZpZXdwb3J0LnNldChtdC54LG10LnksbXQud2lkdGgsbXQuaGVpZ2h0KSxrPT09MCYmQS5tYXRyaXguY29weShTdC5tYXRyaXgpLHh0PT09ITAmJkEuY2FtZXJhcy5wdXNoKFN0KX19bGV0IGx0PXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgZHQ9MDtkdDxwLmxlbmd0aDtkdCsrKXtsZXQgeHQ9cFtkdF0saz1sdFtkdF07eHQudXBkYXRlKGssJCxvKX1WJiZWKEcsJCksZz1udWxsfWxldCBhdD1uZXcgZzA7YXQuc2V0QW5pbWF0aW9uTG9vcChRKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oRyl7Vj1HfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gREUobil7ZnVuY3Rpb24gdChtLHApe20uZm9nQ29sb3IudmFsdWUuY29weShwLmNvbG9yKSxwLmlzRm9nPyhtLmZvZ05lYXIudmFsdWU9cC5uZWFyLG0uZm9nRmFyLnZhbHVlPXAuZmFyKTpwLmlzRm9nRXhwMiYmKG0uZm9nRGVuc2l0eS52YWx1ZT1wLmRlbnNpdHkpfWZ1bmN0aW9uIGUobSxwLGIsXyxTKXtwLmlzTWVzaEJhc2ljTWF0ZXJpYWw/aShtLHApOnAuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhpKG0scCksbChtLHApKTpwLmlzTWVzaFRvb25NYXRlcmlhbD8oaShtLHApLHUobSxwKSk6cC5pc01lc2hQaG9uZ01hdGVyaWFsPyhpKG0scCksYyhtLHApKTpwLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkobSxwKSxwLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZihtLHAsUyk6aChtLHApKTpwLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKG0scCksZChtLHApKTpwLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGkobSxwKSxnKG0scCkpOnAuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oaShtLHApLHgobSxwKSk6cC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaShtLHApLHYobSxwKSk6cC5pc0xpbmVCYXNpY01hdGVyaWFsPyhyKG0scCkscC5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcyhtLHApKTpwLmlzUG9pbnRzTWF0ZXJpYWw/byhtLHAsYixfKTpwLmlzU3ByaXRlTWF0ZXJpYWw/YShtLHApOnAuaXNTaGFkb3dNYXRlcmlhbD8obS5jb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHkpOnAuaXNTaGFkZXJNYXRlcmlhbCYmKHAudW5pZm9ybXNOZWVkVXBkYXRlPSExKX1mdW5jdGlvbiBpKG0scCl7bS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxwLmNvbG9yJiZtLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxwLmVtaXNzaXZlJiZtLmVtaXNzaXZlLnZhbHVlLmNvcHkocC5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIocC5lbWlzc2l2ZUludGVuc2l0eSkscC5tYXAmJihtLm1hcC52YWx1ZT1wLm1hcCkscC5hbHBoYU1hcCYmKG0uYWxwaGFNYXAudmFsdWU9cC5hbHBoYU1hcCkscC5zcGVjdWxhck1hcCYmKG0uc3BlY3VsYXJNYXAudmFsdWU9cC5zcGVjdWxhck1hcCkscC5hbHBoYVRlc3Q+MCYmKG0uYWxwaGFUZXN0LnZhbHVlPXAuYWxwaGFUZXN0KTtsZXQgYj1uLmdldChwKS5lbnZNYXA7YiYmKG0uZW52TWFwLnZhbHVlPWIsbS5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmYi5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLG0ucmVmbGVjdGl2aXR5LnZhbHVlPXAucmVmbGVjdGl2aXR5LG0uaW9yLnZhbHVlPXAuaW9yLG0ucmVmcmFjdGlvblJhdGlvLnZhbHVlPXAucmVmcmFjdGlvblJhdGlvKSxwLmxpZ2h0TWFwJiYobS5saWdodE1hcC52YWx1ZT1wLmxpZ2h0TWFwLG0ubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9cC5saWdodE1hcEludGVuc2l0eSkscC5hb01hcCYmKG0uYW9NYXAudmFsdWU9cC5hb01hcCxtLmFvTWFwSW50ZW5zaXR5LnZhbHVlPXAuYW9NYXBJbnRlbnNpdHkpO2xldCBfO3AubWFwP189cC5tYXA6cC5zcGVjdWxhck1hcD9fPXAuc3BlY3VsYXJNYXA6cC5kaXNwbGFjZW1lbnRNYXA/Xz1wLmRpc3BsYWNlbWVudE1hcDpwLm5vcm1hbE1hcD9fPXAubm9ybWFsTWFwOnAuYnVtcE1hcD9fPXAuYnVtcE1hcDpwLnJvdWdobmVzc01hcD9fPXAucm91Z2huZXNzTWFwOnAubWV0YWxuZXNzTWFwP189cC5tZXRhbG5lc3NNYXA6cC5hbHBoYU1hcD9fPXAuYWxwaGFNYXA6cC5lbWlzc2l2ZU1hcD9fPXAuZW1pc3NpdmVNYXA6cC5jbGVhcmNvYXRNYXA/Xz1wLmNsZWFyY29hdE1hcDpwLmNsZWFyY29hdE5vcm1hbE1hcD9fPXAuY2xlYXJjb2F0Tm9ybWFsTWFwOnAuY2xlYXJjb2F0Um91Z2huZXNzTWFwP189cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA6cC5zcGVjdWxhckludGVuc2l0eU1hcD9fPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXA6cC5zcGVjdWxhckNvbG9yTWFwP189cC5zcGVjdWxhckNvbG9yTWFwOnAudHJhbnNtaXNzaW9uTWFwP189cC50cmFuc21pc3Npb25NYXA6cC50aGlja25lc3NNYXA/Xz1wLnRoaWNrbmVzc01hcDpwLnNoZWVuQ29sb3JNYXA/Xz1wLnNoZWVuQ29sb3JNYXA6cC5zaGVlblJvdWdobmVzc01hcCYmKF89cC5zaGVlblJvdWdobmVzc01hcCksXyE9PXZvaWQgMCYmKF8uaXNXZWJHTFJlbmRlclRhcmdldCYmKF89Xy50ZXh0dXJlKSxfLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmXy51cGRhdGVNYXRyaXgoKSxtLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoXy5tYXRyaXgpKTtsZXQgUztwLmFvTWFwP1M9cC5hb01hcDpwLmxpZ2h0TWFwJiYoUz1wLmxpZ2h0TWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoUy5tYXRyaXgpKX1mdW5jdGlvbiByKG0scCl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eX1mdW5jdGlvbiBzKG0scCl7bS5kYXNoU2l6ZS52YWx1ZT1wLmRhc2hTaXplLG0udG90YWxTaXplLnZhbHVlPXAuZGFzaFNpemUrcC5nYXBTaXplLG0uc2NhbGUudmFsdWU9cC5zY2FsZX1mdW5jdGlvbiBvKG0scCxiLF8pe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5zaXplLnZhbHVlPXAuc2l6ZSpiLG0uc2NhbGUudmFsdWU9XyouNSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBTO3AubWFwP1M9cC5tYXA6cC5hbHBoYU1hcCYmKFM9cC5hbHBoYU1hcCksUyE9PXZvaWQgMCYmKFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIGEobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LG0ucm90YXRpb24udmFsdWU9cC5yb3RhdGlvbixwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiO3AubWFwP2I9cC5tYXA6cC5hbHBoYU1hcCYmKGI9cC5hbHBoYU1hcCksYiE9PXZvaWQgMCYmKGIubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZiLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShiLm1hdHJpeCkpfWZ1bmN0aW9uIGwobSxwKXtwLmVtaXNzaXZlTWFwJiYobS5lbWlzc2l2ZU1hcC52YWx1ZT1wLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBjKG0scCl7bS5zcGVjdWxhci52YWx1ZS5jb3B5KHAuc3BlY3VsYXIpLG0uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHAuc2hpbmluZXNzLDFlLTQpLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gdShtLHApe3AuZ3JhZGllbnRNYXAmJihtLmdyYWRpZW50TWFwLnZhbHVlPXAuZ3JhZGllbnRNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gaChtLHApe20ucm91Z2huZXNzLnZhbHVlPXAucm91Z2huZXNzLG0ubWV0YWxuZXNzLnZhbHVlPXAubWV0YWxuZXNzLHAucm91Z2huZXNzTWFwJiYobS5yb3VnaG5lc3NNYXAudmFsdWU9cC5yb3VnaG5lc3NNYXApLHAubWV0YWxuZXNzTWFwJiYobS5tZXRhbG5lc3NNYXAudmFsdWU9cC5tZXRhbG5lc3NNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyksbi5nZXQocCkuZW52TWFwJiYobS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9cC5lbnZNYXBJbnRlbnNpdHkpfWZ1bmN0aW9uIGYobSxwLGIpe2gobSxwKSxtLmlvci52YWx1ZT1wLmlvcixwLnNoZWVuPjAmJihtLnNoZWVuQ29sb3IudmFsdWUuY29weShwLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHAuc2hlZW4pLG0uc2hlZW5Sb3VnaG5lc3MudmFsdWU9cC5zaGVlblJvdWdobmVzcyxwLnNoZWVuQ29sb3JNYXAmJihtLnNoZWVuQ29sb3JNYXAudmFsdWU9cC5zaGVlbkNvbG9yTWFwKSxwLnNoZWVuUm91Z2huZXNzTWFwJiYobS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1wLnNoZWVuUm91Z2huZXNzTWFwKSkscC5jbGVhcmNvYXQ+MCYmKG0uY2xlYXJjb2F0LnZhbHVlPXAuY2xlYXJjb2F0LG0uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXAuY2xlYXJjb2F0Um91Z2huZXNzLHAuY2xlYXJjb2F0TWFwJiYobS5jbGVhcmNvYXRNYXAudmFsdWU9cC5jbGVhcmNvYXRNYXApLHAuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYobS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHAuY2xlYXJjb2F0Tm9ybWFsTWFwJiYobS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLG0uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXAuY2xlYXJjb2F0Tm9ybWFsTWFwLHAuc2lkZT09PWhlJiZtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkscC50cmFuc21pc3Npb24+MCYmKG0udHJhbnNtaXNzaW9uLnZhbHVlPXAudHJhbnNtaXNzaW9uLG0udHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1iLnRleHR1cmUsbS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoYi53aWR0aCxiLmhlaWdodCkscC50cmFuc21pc3Npb25NYXAmJihtLnRyYW5zbWlzc2lvbk1hcC52YWx1ZT1wLnRyYW5zbWlzc2lvbk1hcCksbS50aGlja25lc3MudmFsdWU9cC50aGlja25lc3MscC50aGlja25lc3NNYXAmJihtLnRoaWNrbmVzc01hcC52YWx1ZT1wLnRoaWNrbmVzc01hcCksbS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXAuYXR0ZW51YXRpb25EaXN0YW5jZSxtLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weShwLmF0dGVudWF0aW9uQ29sb3IpKSxtLnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHksbS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkocC5zcGVjdWxhckNvbG9yKSxwLnNwZWN1bGFySW50ZW5zaXR5TWFwJiYobS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT1wLnNwZWN1bGFySW50ZW5zaXR5TWFwKSxwLnNwZWN1bGFyQ29sb3JNYXAmJihtLnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9cC5zcGVjdWxhckNvbG9yTWFwKX1mdW5jdGlvbiBkKG0scCl7cC5tYXRjYXAmJihtLm1hdGNhcC52YWx1ZT1wLm1hdGNhcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24geChtLHApe3AuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpLG0ucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShwLnJlZmVyZW5jZVBvc2l0aW9uKSxtLm5lYXJEaXN0YW5jZS52YWx1ZT1wLm5lYXJEaXN0YW5jZSxtLmZhckRpc3RhbmNlLnZhbHVlPXAuZmFyRGlzdGFuY2V9ZnVuY3Rpb24gdihtLHApe3AuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3Jtczp0LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmV9fWZ1bmN0aW9uIElFKCl7bGV0IG49cm8oImNhbnZhcyIpO3JldHVybiBuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixufWZ1bmN0aW9uIFZ0KG49e30pe2xldCB0PW4uY2FudmFzIT09dm9pZCAwP24uY2FudmFzOklFKCksZT1uLmNvbnRleHQhPT12b2lkIDA/bi5jb250ZXh0Om51bGwsaT1uLmFscGhhIT09dm9pZCAwP24uYWxwaGE6ITEscj1uLmRlcHRoIT09dm9pZCAwP24uZGVwdGg6ITAscz1uLnN0ZW5jaWwhPT12b2lkIDA/bi5zdGVuY2lsOiEwLG89bi5hbnRpYWxpYXMhPT12b2lkIDA/bi5hbnRpYWxpYXM6ITEsYT1uLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9uLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPW4ucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP24ucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9bi5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP24uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLGQ9W10sZz1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPXJpLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz10aSx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgeD10aGlzLHY9ITEsbT0wLHA9MCxiPW51bGwsXz0tMSxTPW51bGwsTD1uZXcgV3QsQT1uZXcgV3QsSD1udWxsLHR0PXQud2lkdGgsWD10LmhlaWdodCx5PTEsUj1udWxsLEQ9bnVsbCxGPW5ldyBXdCgwLDAsdHQsWCksej1uZXcgV3QoMCwwLHR0LFgpLE49ITEsVj1uZXcgcXIsUT0hMSxhdD0hMSxHPW51bGwsJD1uZXcgd3QsbHQ9bmV3IFQsZHQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiB4dCgpe3JldHVybiBiPT09bnVsbD95OjF9bGV0IGs9ZTtmdW5jdGlvbiBGdChNLEkpe2ZvcihsZXQgTz0wO088TS5sZW5ndGg7TysrKXtsZXQgVT1NW09dLFo9dC5nZXRDb250ZXh0KFUsSSk7aWYoWiE9PW51bGwpcmV0dXJuIFp9cmV0dXJuIG51bGx9dHJ5e2xldCBNPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6cyxhbnRpYWxpYXM6byxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7JGh9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixBdCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsUCwhMSksaz09PW51bGwpe2xldCBJPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZih4LmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmSS5zaGlmdCgpLGs9RnQoSSxNKSxrPT09bnVsbCl0aHJvdyBGdChJKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfWsuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYoay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKE0pe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrTS5tZXNzYWdlKSxNfWxldCBtdCxTdCxCLHN0LG50LEMsaixKLGl0LGV0LHZ0LGJ0LEl0LFp0LHF0LEUsdyxxLHJ0LGd0LFcsX3QseXQ7ZnVuY3Rpb24gdXQoKXttdD1uZXcgZVMoayksU3Q9bmV3IEoxKGssbXQsbiksbXQuaW5pdChTdCksX3Q9bmV3IExFKGssbXQsU3QpLEI9bmV3IENFKGssbXQsU3QpLHN0PW5ldyByUyhrKSxudD1uZXcgeEUsQz1uZXcgUkUoayxtdCxCLG50LFN0LF90LHN0KSxqPW5ldyBLMSh4KSxKPW5ldyB0Uyh4KSxpdD1uZXcgdk0oayxTdCkseXQ9bmV3IFkxKGssbXQsaXQsU3QpLGV0PW5ldyBuUyhrLGl0LHN0LHl0KSx2dD1uZXcgbFMoayxldCxpdCxzdCkscnQ9bmV3IGFTKGssU3QsQyksRT1uZXcgJDEobnQpLGJ0PW5ldyBnRSh4LGosSixtdCxTdCx5dCxFKSxJdD1uZXcgREUobnQpLFp0PW5ldyB2RSxxdD1uZXcgRUUobXQsU3QpLHE9bmV3IFgxKHgsaixCLHZ0LGksYSksdz1uZXcgVDAoeCx2dCxTdCksZ3Q9bmV3IFoxKGssbXQsc3QsU3QpLFc9bmV3IGlTKGssbXQsc3QsU3QpLHN0LnByb2dyYW1zPWJ0LnByb2dyYW1zLHguY2FwYWJpbGl0aWVzPVN0LHguZXh0ZW5zaW9ucz1tdCx4LnByb3BlcnRpZXM9bnQseC5yZW5kZXJMaXN0cz1adCx4LnNoYWRvd01hcD13LHguc3RhdGU9Qix4LmluZm89c3R9dXQoKTtsZXQgY3Q9bmV3IFp1KHgsayk7dGhpcy54cj1jdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgTT1tdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO00mJk0ucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihNKXtNIT09dm9pZCAwJiYoeT1NLHRoaXMuc2V0U2l6ZSh0dCxYLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihNKXtyZXR1cm4gTS5zZXQodHQsWCl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihNLEksTyl7aWYoY3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn10dD1NLFg9SSx0LndpZHRoPU1hdGguZmxvb3IoTSp5KSx0LmhlaWdodD1NYXRoLmZsb29yKEkqeSksTyE9PSExJiYodC5zdHlsZS53aWR0aD1NKyJweCIsdC5zdHlsZS5oZWlnaHQ9SSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCp5LFgqeSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihNLEksTyl7dHQ9TSxYPUkseT1PLHQud2lkdGg9TWF0aC5mbG9vcihNKk8pLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSpPKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihNKXtyZXR1cm4gTS5jb3B5KEwpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoRil9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSxJLE8sVSl7TS5pc1ZlY3RvcjQ/Ri5zZXQoTS54LE0ueSxNLnosTS53KTpGLnNldChNLEksTyxVKSxCLnZpZXdwb3J0KEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoeil9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND96LnNldChNLngsTS55LE0ueixNLncpOnouc2V0KE0sSSxPLFUpLEIuc2Npc3NvcihBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTn0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihNKXtCLnNldFNjaXNzb3JUZXN0KE49TSl9LHRoaXMuc2V0T3BhcXVlU29ydD1mdW5jdGlvbihNKXtSPU19LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKE0pe0Q9TX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkocS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtxLnNldENsZWFyQ29sb3IuYXBwbHkocSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gcS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3Euc2V0Q2xlYXJBbHBoYS5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oTSxJLE8pe2xldCBVPTA7KE09PT12b2lkIDB8fE0pJiYoVXw9MTYzODQpLChJPT09dm9pZCAwfHxJKSYmKFV8PTI1NiksKE89PT12b2lkIDB8fE8pJiYoVXw9MTAyNCksay5jbGVhcihVKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxadC5kaXNwb3NlKCkscXQuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxqLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSx2dC5kaXNwb3NlKCkseXQuZGlzcG9zZSgpLGJ0LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0IixEdCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIsanQpLEcmJihHLmRpc3Bvc2UoKSxHPW51bGwpLHplLnN0b3AoKX07ZnVuY3Rpb24gQXQoTSl7TS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksdj0hMH1mdW5jdGlvbiBQKCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksdj0hMTtsZXQgTT1zdC5hdXRvUmVzZXQsST13LmVuYWJsZWQsTz13LmF1dG9VcGRhdGUsVT13Lm5lZWRzVXBkYXRlLFo9dy50eXBlO3V0KCksc3QuYXV0b1Jlc2V0PU0sdy5lbmFibGVkPUksdy5hdXRvVXBkYXRlPU8sdy5uZWVkc1VwZGF0ZT1VLHcudHlwZT1afWZ1bmN0aW9uIHB0KE0pe2xldCBJPU0udGFyZ2V0O0kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLGh0KEkpfWZ1bmN0aW9uIGh0KE0pe0V0KE0pLG50LnJlbW92ZShNKX1mdW5jdGlvbiBFdChNKXtsZXQgST1udC5nZXQoTSkucHJvZ3JhbXM7SSE9PXZvaWQgMCYmKEkuZm9yRWFjaChmdW5jdGlvbihPKXtidC5yZWxlYXNlUHJvZ3JhbShPKX0pLE0uaXNTaGFkZXJNYXRlcmlhbCYmYnQucmVsZWFzZVNoYWRlckNhY2hlKE0pKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihNLEksTyxVLFosVHQpe0k9PT1udWxsJiYoST1kdCk7bGV0IEN0PVouaXNNZXNoJiZaLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxMdD1CMChNLEksTyxVLFopO0Iuc2V0TWF0ZXJpYWwoVSxDdCk7bGV0IFJ0PU8uaW5kZXgsR3Q9Ty5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKFJ0PT09bnVsbCl7aWYoR3Q9PT12b2lkIDB8fEd0LmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihSdC5jb3VudD09PTApcmV0dXJuO2xldCB6dD0xO1Uud2lyZWZyYW1lPT09ITAmJihSdD1ldC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoTyksenQ9MikseXQuc2V0dXAoWixVLEx0LE8sUnQpO2xldCBVdCxpZT1ndDtSdCE9PW51bGwmJihVdD1pdC5nZXQoUnQpLGllPVcsaWUuc2V0SW5kZXgoVXQpKTtsZXQgZmk9UnQhPT1udWxsP1J0LmNvdW50Okd0LmNvdW50LFppPU8uZHJhd1JhbmdlLnN0YXJ0Knp0LE90PU8uZHJhd1JhbmdlLmNvdW50Knp0LG5uPVR0IT09bnVsbD9UdC5zdGFydCp6dDowLGxlPVR0IT09bnVsbD9UdC5jb3VudCp6dDoxLzAscm49TWF0aC5tYXgoWmksbm4pLElvPU1hdGgubWluKGZpLFppK090LG5uK2xlKS0xLHNuPU1hdGgubWF4KDAsSW8tcm4rMSk7aWYoc24hPT0wKXtpZihaLmlzTWVzaClVLndpcmVmcmFtZT09PSEwPyhCLnNldExpbmVXaWR0aChVLndpcmVmcmFtZUxpbmV3aWR0aCp4dCgpKSxpZS5zZXRNb2RlKDEpKTppZS5zZXRNb2RlKDQpO2Vsc2UgaWYoWi5pc0xpbmUpe2xldCB2bj1VLmxpbmV3aWR0aDt2bj09PXZvaWQgMCYmKHZuPTEpLEIuc2V0TGluZVdpZHRoKHZuKnh0KCkpLFouaXNMaW5lU2VnbWVudHM/aWUuc2V0TW9kZSgxKTpaLmlzTGluZUxvb3A/aWUuc2V0TW9kZSgyKTppZS5zZXRNb2RlKDMpfWVsc2UgWi5pc1BvaW50cz9pZS5zZXRNb2RlKDApOlouaXNTcHJpdGUmJmllLnNldE1vZGUoNCk7aWYoWi5pc0luc3RhbmNlZE1lc2gpaWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLFouY291bnQpO2Vsc2UgaWYoTy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgdm49TWF0aC5taW4oTy5pbnN0YW5jZUNvdW50LE8uX21heEluc3RhbmNlQ291bnQpO2llLnJlbmRlckluc3RhbmNlcyhybixzbix2bil9ZWxzZSBpZS5yZW5kZXIocm4sc24pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKE0sSSl7Zj1xdC5nZXQoTSksZi5pbml0KCksZy5wdXNoKGYpLE0udHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKE8pe08uaXNMaWdodCYmTy5sYXllcnMudGVzdChJLmxheWVycykmJihmLnB1c2hMaWdodChPKSxPLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhPKSl9KSxmLnNldHVwTGlnaHRzKHgucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLE0udHJhdmVyc2UoZnVuY3Rpb24oTyl7bGV0IFU9Ty5tYXRlcmlhbDtpZihVKWlmKEFycmF5LmlzQXJyYXkoVSkpZm9yKGxldCBaPTA7WjxVLmxlbmd0aDtaKyspe2xldCBUdD1VW1pdO09sKFR0LE0sTyl9ZWxzZSBPbChVLE0sTyl9KSxnLnBvcCgpLGY9bnVsbH07bGV0IFk9bnVsbDtmdW5jdGlvbiBNdChNKXtZJiZZKE0pfWZ1bmN0aW9uIER0KCl7emUuc3RvcCgpfWZ1bmN0aW9uIGp0KCl7emUuc3RhcnQoKX1sZXQgemU9bmV3IGcwO3plLnNldEFuaW1hdGlvbkxvb3AoTXQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ6ZS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKE0pe1k9TSxjdC5zZXRBbmltYXRpb25Mb29wKE0pLE09PT1udWxsP3plLnN0b3AoKTp6ZS5zdGFydCgpfSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oTSxJKXtpZihJIT09dm9pZCAwJiZJLmlzQ2FtZXJhIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4iKTtyZXR1cm59aWYodj09PSEwKXJldHVybjtNLmF1dG9VcGRhdGU9PT0hMCYmTS51cGRhdGVNYXRyaXhXb3JsZCgpLEkucGFyZW50PT09bnVsbCYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLGN0LmVuYWJsZWQ9PT0hMCYmY3QuaXNQcmVzZW50aW5nPT09ITAmJihjdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJmN0LnVwZGF0ZUNhbWVyYShJKSxJPWN0LmdldENhbWVyYSgpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkJlZm9yZVJlbmRlcih4LE0sSSxiKSxmPXF0LmdldChNLGcubGVuZ3RoKSxmLmluaXQoKSxnLnB1c2goZiksJC5tdWx0aXBseU1hdHJpY2VzKEkucHJvamVjdGlvbk1hdHJpeCxJLm1hdHJpeFdvcmxkSW52ZXJzZSksVi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgkKSxhdD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLFE9RS5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsYXQsSSksaD1adC5nZXQoTSxkLmxlbmd0aCksaC5pbml0KCksZC5wdXNoKGgpLG5lKE0sSSwwLHguc29ydE9iamVjdHMpLGguZmluaXNoKCkseC5zb3J0T2JqZWN0cz09PSEwJiZoLnNvcnQoUixEKSxRPT09ITAmJkUuYmVnaW5TaGFkb3dzKCk7bGV0IE89Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYody5yZW5kZXIoTyxNLEkpLFE9PT0hMCYmRS5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxxLnJlbmRlcihoLE0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksSS5pc0FycmF5Q2FtZXJhKXtsZXQgVT1JLmNhbWVyYXM7Zm9yKGxldCBaPTAsVHQ9VS5sZW5ndGg7WjxUdDtaKyspe2xldCBDdD1VW1pdO2VuKGgsTSxDdCxDdC52aWV3cG9ydCl9fWVsc2UgZW4oaCxNLEkpO2IhPT1udWxsJiYoQy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxDLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksTS5pc1NjZW5lPT09ITAmJk0ub25BZnRlclJlbmRlcih4LE0sSSksQi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEIuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxCLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksQi5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5dC5yZXNldERlZmF1bHRTdGF0ZSgpLF89LTEsUz1udWxsLGcucG9wKCksZy5sZW5ndGg+MD9mPWdbZy5sZW5ndGgtMV06Zj1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9oPWRbZC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBuZShNLEksTyxVKXtpZihNLnZpc2libGU9PT0hMSlyZXR1cm47aWYoTS5sYXllcnMudGVzdChJLmxheWVycykpe2lmKE0uaXNHcm91cClPPU0ucmVuZGVyT3JkZXI7ZWxzZSBpZihNLmlzTE9EKU0uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZShJKTtlbHNlIGlmKE0uaXNMaWdodClmLnB1c2hMaWdodChNKSxNLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhNKTtlbHNlIGlmKE0uaXNTcHJpdGUpe2lmKCFNLmZydXN0dW1DdWxsZWR8fFYuaW50ZXJzZWN0c1Nwcml0ZShNKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7THQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1lbHNlIGlmKChNLmlzTWVzaHx8TS5pc0xpbmV8fE0uaXNQb2ludHMpJiYoTS5pc1NraW5uZWRNZXNoJiZNLnNrZWxldG9uLmZyYW1lIT09c3QucmVuZGVyLmZyYW1lJiYoTS5za2VsZXRvbi51cGRhdGUoKSxNLnNrZWxldG9uLmZyYW1lPXN0LnJlbmRlci5mcmFtZSksIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzT2JqZWN0KE0pKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMdCkpe2xldCBSdD1DdC5ncm91cHM7Zm9yKGxldCBHdD0wLHp0PVJ0Lmxlbmd0aDtHdDx6dDtHdCsrKXtsZXQgVXQ9UnRbR3RdLGllPUx0W1V0Lm1hdGVyaWFsSW5kZXhdO2llJiZpZS52aXNpYmxlJiZoLnB1c2goTSxDdCxpZSxPLGx0LnosVXQpfX1lbHNlIEx0LnZpc2libGUmJmgucHVzaChNLEN0LEx0LE8sbHQueixudWxsKX19bGV0IFR0PU0uY2hpbGRyZW47Zm9yKGxldCBDdD0wLEx0PVR0Lmxlbmd0aDtDdDxMdDtDdCsrKW5lKFR0W0N0XSxJLE8sVSl9ZnVuY3Rpb24gZW4oTSxJLE8sVSl7bGV0IFo9TS5vcGFxdWUsVHQ9TS50cmFuc21pc3NpdmUsQ3Q9TS50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhPKSxUdC5sZW5ndGg+MCYmeW4oWixJLE8pLFUmJkIudmlld3BvcnQoTC5jb3B5KFUpKSxaLmxlbmd0aD4wJiZEbyhaLEksTyksVHQubGVuZ3RoPjAmJkRvKFR0LEksTyksQ3QubGVuZ3RoPjAmJkRvKEN0LEksTyl9ZnVuY3Rpb24geW4oTSxJLE8pe2lmKEc9PT1udWxsKXtsZXQgQ3Q9bz09PSEwJiZTdC5pc1dlYkdMMj09PSEwP3NvOk5lO0c9bmV3IEN0KDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6X3QuY29udmVydChVcikhPT1udWxsP1VyOmVpLG1pbkZpbHRlcjpMbCxtYWdGaWx0ZXI6ZmUsd3JhcFM6VmUsd3JhcFQ6VmUsdXNlUmVuZGVyVG9UZXh0dXJlOm10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgVT14LmdldFJlbmRlclRhcmdldCgpO3guc2V0UmVuZGVyVGFyZ2V0KEcpLHguY2xlYXIoKTtsZXQgWj14LnRvbmVNYXBwaW5nO3gudG9uZU1hcHBpbmc9dGksRG8oTSxJLE8pLHgudG9uZU1hcHBpbmc9WixDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEcpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEcpLHguc2V0UmVuZGVyVGFyZ2V0KFUpfWZ1bmN0aW9uIERvKE0sSSxPKXtsZXQgVT1JLmlzU2NlbmU9PT0hMD9JLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IFo9MCxUdD1NLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PU1bWl0sTHQ9Q3Qub2JqZWN0LFJ0PUN0Lmdlb21ldHJ5LEd0PVU9PT1udWxsP0N0Lm1hdGVyaWFsOlUsenQ9Q3QuZ3JvdXA7THQubGF5ZXJzLnRlc3QoTy5sYXllcnMpJiZVMChMdCxJLE8sUnQsR3QsenQpfX1mdW5jdGlvbiBVMChNLEksTyxVLFosVHQpe00ub25CZWZvcmVSZW5kZXIoeCxJLE8sVSxaLFR0KSxNLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKE8ubWF0cml4V29ybGRJbnZlcnNlLE0ubWF0cml4V29ybGQpLE0ubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChNLm1vZGVsVmlld01hdHJpeCksWi5vbkJlZm9yZVJlbmRlcih4LEksTyxVLE0sVHQpLFoudHJhbnNwYXJlbnQ9PT0hMCYmWi5zaWRlPT09SHI/KFouc2lkZT1oZSxaLm5lZWRzVXBkYXRlPSEwLHgucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksWi5zaWRlPWVvLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9SHIpOngucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksTS5vbkFmdGVyUmVuZGVyKHgsSSxPLFUsWixUdCl9ZnVuY3Rpb24gT2woTSxJLE8pe0kuaXNTY2VuZSE9PSEwJiYoST1kdCk7bGV0IFU9bnQuZ2V0KE0pLFo9Zi5zdGF0ZS5saWdodHMsVHQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXksQ3Q9Wi5zdGF0ZS52ZXJzaW9uLEx0PWJ0LmdldFBhcmFtZXRlcnMoTSxaLnN0YXRlLFR0LEksTyksUnQ9YnQuZ2V0UHJvZ3JhbUNhY2hlS2V5KEx0KSxHdD1VLnByb2dyYW1zO1UuZW52aXJvbm1lbnQ9TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0kuZW52aXJvbm1lbnQ6bnVsbCxVLmZvZz1JLmZvZyxVLmVudk1hcD0oTS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0o6aikuZ2V0KE0uZW52TWFwfHxVLmVudmlyb25tZW50KSxHdD09PXZvaWQgMCYmKE0uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLEd0PW5ldyBNYXAsVS5wcm9ncmFtcz1HdCk7bGV0IHp0PUd0LmdldChSdCk7aWYoenQhPT12b2lkIDApe2lmKFUuY3VycmVudFByb2dyYW09PT16dCYmVS5saWdodHNTdGF0ZVZlcnNpb249PT1DdClyZXR1cm4gb2YoTSxMdCksenR9ZWxzZSBMdC51bmlmb3Jtcz1idC5nZXRVbmlmb3JtcyhNKSxNLm9uQnVpbGQoTyxMdCx4KSxNLm9uQmVmb3JlQ29tcGlsZShMdCx4KSx6dD1idC5hY3F1aXJlUHJvZ3JhbShMdCxSdCksR3Quc2V0KFJ0LHp0KSxVLnVuaWZvcm1zPUx0LnVuaWZvcm1zO2xldCBVdD1VLnVuaWZvcm1zOyghTS5pc1NoYWRlck1hdGVyaWFsJiYhTS5pc1Jhd1NoYWRlck1hdGVyaWFsfHxNLmNsaXBwaW5nPT09ITApJiYoVXQuY2xpcHBpbmdQbGFuZXM9RS51bmlmb3JtKSxvZihNLEx0KSxVLm5lZWRzTGlnaHRzPWswKE0pLFUubGlnaHRzU3RhdGVWZXJzaW9uPUN0LFUubmVlZHNMaWdodHMmJihVdC5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1aLnN0YXRlLmFtYmllbnQsVXQubGlnaHRQcm9iZS52YWx1ZT1aLnN0YXRlLnByb2JlLFV0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWwsVXQuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxVdC5zcG90TGlnaHRzLnZhbHVlPVouc3RhdGUuc3BvdCxVdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvdyxVdC5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1aLnN0YXRlLnJlY3RBcmVhLFV0Lmx0Y18xLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMxLFV0Lmx0Y18yLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMyLFV0LnBvaW50TGlnaHRzLnZhbHVlPVouc3RhdGUucG9pbnQsVXQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvdyxVdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPVouc3RhdGUuaGVtaSxVdC5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLFV0LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsVXQuc3BvdFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXAsVXQuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsVXQucG9pbnRTaGFkb3dNYXAudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvd01hcCxVdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgaWU9enQuZ2V0VW5pZm9ybXMoKSxmaT1paS5zZXFXaXRoVmFsdWUoaWUuc2VxLFV0KTtyZXR1cm4gVS5jdXJyZW50UHJvZ3JhbT16dCxVLnVuaWZvcm1zTGlzdD1maSx6dH1mdW5jdGlvbiBvZihNLEkpe2xldCBPPW50LmdldChNKTtPLm91dHB1dEVuY29kaW5nPUkub3V0cHV0RW5jb2RpbmcsTy5pbnN0YW5jaW5nPUkuaW5zdGFuY2luZyxPLnNraW5uaW5nPUkuc2tpbm5pbmcsTy5tb3JwaFRhcmdldHM9SS5tb3JwaFRhcmdldHMsTy5tb3JwaE5vcm1hbHM9SS5tb3JwaE5vcm1hbHMsTy5tb3JwaFRhcmdldHNDb3VudD1JLm1vcnBoVGFyZ2V0c0NvdW50LE8ubnVtQ2xpcHBpbmdQbGFuZXM9SS5udW1DbGlwcGluZ1BsYW5lcyxPLm51bUludGVyc2VjdGlvbj1JLm51bUNsaXBJbnRlcnNlY3Rpb24sTy52ZXJ0ZXhBbHBoYXM9SS52ZXJ0ZXhBbHBoYXMsTy52ZXJ0ZXhUYW5nZW50cz1JLnZlcnRleFRhbmdlbnRzLE8udG9uZU1hcHBpbmc9SS50b25lTWFwcGluZ31mdW5jdGlvbiBCMChNLEksTyxVLFope0kuaXNTY2VuZSE9PSEwJiYoST1kdCksQy5yZXNldFRleHR1cmVVbml0cygpO2xldCBUdD1JLmZvZyxDdD1VLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLEx0PWI9PT1udWxsP3gub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOnJpLFJ0PShVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoVS5lbnZNYXB8fEN0KSxHdD1VLnZlcnRleENvbG9ycz09PSEwJiYhIU8uYXR0cmlidXRlcy5jb2xvciYmTy5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx6dD0hIVUubm9ybWFsTWFwJiYhIU8uYXR0cmlidXRlcy50YW5nZW50LFV0PSEhTy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24saWU9ISFPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsZmk9Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsWmk9VS50b25lTWFwcGVkP3gudG9uZU1hcHBpbmc6dGksT3Q9bnQuZ2V0KFUpLG5uPWYuc3RhdGUubGlnaHRzO2lmKFE9PT0hMCYmKGF0PT09ITB8fE0hPT1TKSl7bGV0IFplPU09PT1TJiZVLmlkPT09XztFLnNldFN0YXRlKFUsTSxaZSl9bGV0IGxlPSExO1UudmVyc2lvbj09PU90Ll9fdmVyc2lvbj8oT3QubmVlZHNMaWdodHMmJk90LmxpZ2h0c1N0YXRlVmVyc2lvbiE9PW5uLnN0YXRlLnZlcnNpb258fE90Lm91dHB1dEVuY29kaW5nIT09THR8fFouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITF8fCFaLmlzSW5zdGFuY2VkTWVzaCYmT3QuaW5zdGFuY2luZz09PSEwfHxaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITF8fCFaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITB8fE90LmVudk1hcCE9PVJ0fHxVLmZvZyYmT3QuZm9nIT09VHR8fE90Lm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYoT3QubnVtQ2xpcHBpbmdQbGFuZXMhPT1FLm51bVBsYW5lc3x8T3QubnVtSW50ZXJzZWN0aW9uIT09RS5udW1JbnRlcnNlY3Rpb24pfHxPdC52ZXJ0ZXhBbHBoYXMhPT1HdHx8T3QudmVydGV4VGFuZ2VudHMhPT16dHx8T3QubW9ycGhUYXJnZXRzIT09VXR8fE90Lm1vcnBoTm9ybWFscyE9PWllfHxPdC50b25lTWFwcGluZyE9PVppfHxTdC5pc1dlYkdMMj09PSEwJiZPdC5tb3JwaFRhcmdldHNDb3VudCE9PWZpKSYmKGxlPSEwKToobGU9ITAsT3QuX192ZXJzaW9uPVUudmVyc2lvbik7bGV0IHJuPU90LmN1cnJlbnRQcm9ncmFtO2xlPT09ITAmJihybj1PbChVLEksWikpO2xldCBJbz0hMSxzbj0hMSx2bj0hMSxfZT1ybi5nZXRVbmlmb3JtcygpLG5zPU90LnVuaWZvcm1zO2lmKEIudXNlUHJvZ3JhbShybi5wcm9ncmFtKSYmKElvPSEwLHNuPSEwLHZuPSEwKSxVLmlkIT09XyYmKF89VS5pZCxzbj0hMCksSW98fFMhPT1NKXtpZihfZS5zZXRWYWx1ZShrLCJwcm9qZWN0aW9uTWF0cml4IixNLnByb2plY3Rpb25NYXRyaXgpLFN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJl9lLnNldFZhbHVlKGssImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKE0uZmFyKzEpL01hdGguTE4yKSksUyE9PU0mJihTPU0sc249ITAsdm49ITApLFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc01lc2hQaG9uZ01hdGVyaWFsfHxVLmlzTWVzaFRvb25NYXRlcmlhbHx8VS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxVLmVudk1hcCl7bGV0IFplPV9lLm1hcC5jYW1lcmFQb3NpdGlvbjtaZSE9PXZvaWQgMCYmWmUuc2V0VmFsdWUoayxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkpfShVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbCkmJl9lLnNldFZhbHVlKGssImlzT3J0aG9ncmFwaGljIixNLmlzT3J0aG9ncmFwaGljQ2FtZXJhPT09ITApLChVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc1NoYWRvd01hdGVyaWFsfHxaLmlzU2tpbm5lZE1lc2gpJiZfZS5zZXRWYWx1ZShrLCJ2aWV3TWF0cml4IixNLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoWi5pc1NraW5uZWRNZXNoKXtfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXgiKSxfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IFplPVouc2tlbGV0b247WmUmJihTdC5mbG9hdFZlcnRleFRleHR1cmVzPyhaZS5ib25lVGV4dHVyZT09PW51bGwmJlplLmNvbXB1dGVCb25lVGV4dHVyZSgpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlIixaZS5ib25lVGV4dHVyZSxDKSxfZS5zZXRWYWx1ZShrLCJib25lVGV4dHVyZVNpemUiLFplLmJvbmVUZXh0dXJlU2l6ZSkpOl9lLnNldE9wdGlvbmFsKGssWmUsImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hIU8mJihPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8Ty5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwKSYmcnQudXBkYXRlKFosTyxVLHJuKSwoc258fE90LnJlY2VpdmVTaGFkb3chPT1aLnJlY2VpdmVTaGFkb3cpJiYoT3QucmVjZWl2ZVNoYWRvdz1aLnJlY2VpdmVTaGFkb3csX2Uuc2V0VmFsdWUoaywicmVjZWl2ZVNoYWRvdyIsWi5yZWNlaXZlU2hhZG93KSksc24mJihfZS5zZXRWYWx1ZShrLCJ0b25lTWFwcGluZ0V4cG9zdXJlIix4LnRvbmVNYXBwaW5nRXhwb3N1cmUpLE90Lm5lZWRzTGlnaHRzJiZPMChucyx2biksVHQmJlUuZm9nJiZJdC5yZWZyZXNoRm9nVW5pZm9ybXMobnMsVHQpLEl0LnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKG5zLFUseSxYLEcpLGlpLnVwbG9hZChrLE90LnVuaWZvcm1zTGlzdCxucyxDKSksVS5pc1NoYWRlck1hdGVyaWFsJiZVLnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpLFUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxVLmlzU3ByaXRlTWF0ZXJpYWwmJl9lLnNldFZhbHVlKGssImNlbnRlciIsWi5jZW50ZXIpLF9lLnNldFZhbHVlKGssIm1vZGVsVmlld01hdHJpeCIsWi5tb2RlbFZpZXdNYXRyaXgpLF9lLnNldFZhbHVlKGssIm5vcm1hbE1hdHJpeCIsWi5ub3JtYWxNYXRyaXgpLF9lLnNldFZhbHVlKGssIm1vZGVsTWF0cml4IixaLm1hdHJpeFdvcmxkKSxybn1mdW5jdGlvbiBPMChNLEkpe00uYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9SSxNLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9SSxNLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1JfWZ1bmN0aW9uIGswKE0pe3JldHVybiBNLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8TS5pc01lc2hUb29uTWF0ZXJpYWx8fE0uaXNNZXNoUGhvbmdNYXRlcmlhbHx8TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxNLmlzU2hhZG93TWF0ZXJpYWx8fE0uaXNTaGFkZXJNYXRlcmlhbCYmTS5saWdodHM9PT0hMH10aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG19LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihNLEksTyl7bnQuZ2V0KE0udGV4dHVyZSkuX193ZWJnbFRleHR1cmU9SSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPU87bGV0IFU9bnQuZ2V0KE0pO1UuX19oYXNFeHRlcm5hbFRleHR1cmVzPSEwLFUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPU89PT12b2lkIDAsVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxNLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksTS51c2VSZW5kZXJUb1RleHR1cmU9ITEsTS51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihNLEkpe2xldCBPPW50LmdldChNKTtPLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1JLE8uX191c2VEZWZhdWx0RnJhbWVidWZmZXI9ST09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oTSxJPTAsTz0wKXtiPU0sbT1JLHA9TztsZXQgVT0hMDtpZihNKXtsZXQgUnQ9bnQuZ2V0KE0pO1J0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyIT09dm9pZCAwPyhCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxVPSExKTpSdC5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/Qy5zZXR1cFJlbmRlclRhcmdldChNKTpSdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJkMucmViaW5kVGV4dHVyZXMoTSxudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgWj1udWxsLFR0PSExLEN0PSExO2lmKE0pe2xldCBSdD1NLnRleHR1cmU7KFJ0LmlzRGF0YVRleHR1cmUzRHx8UnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoQ3Q9ITApO2xldCBHdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO00uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KFo9R3RbSV0sVHQ9ITApOk0udXNlUmVuZGVyYnVmZmVyP1o9bnQuZ2V0KE0pLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpaPUd0LEwuY29weShNLnZpZXdwb3J0KSxBLmNvcHkoTS5zY2lzc29yKSxIPU0uc2Npc3NvclRlc3R9ZWxzZSBMLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxIPU47aWYoQi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWikmJlN0LmRyYXdCdWZmZXJzJiZVJiZCLmRyYXdCdWZmZXJzKE0sWiksQi52aWV3cG9ydChMKSxCLnNjaXNzb3IoQSksQi5zZXRTY2lzc29yVGVzdChIKSxUdCl7bGV0IFJ0PW50LmdldChNLnRleHR1cmUpO2suZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrSSxSdC5fX3dlYmdsVGV4dHVyZSxPKX1lbHNlIGlmKEN0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSksR3Q9SXx8MDtrLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LFJ0Ll9fd2ViZ2xUZXh0dXJlLE98fDAsR3QpfV89LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihNLEksTyxVLFosVHQsQ3Qpe2lmKCEoTSYmTS5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgTHQ9bnQuZ2V0KE0pLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihNLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZDdCE9PXZvaWQgMCYmKEx0PUx0W0N0XSksTHQpe0IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEx0KTt0cnl7bGV0IFJ0PU0udGV4dHVyZSxHdD1SdC5mb3JtYXQsenQ9UnQudHlwZTtpZihHdCE9PVJlJiZfdC5jb252ZXJ0KEd0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBVdD16dD09PVVyJiYobXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8U3QuaXNXZWJHTDImJm10LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZih6dCE9PWVpJiZfdC5jb252ZXJ0KHp0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM4KSYmISh6dD09PVVpJiYoU3QuaXNXZWJHTDJ8fG10LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8bXQuaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSkpJiYhVXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTtyZXR1cm59ay5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP0k+PTAmJkk8PU0ud2lkdGgtVSYmTz49MCYmTzw9TS5oZWlnaHQtWiYmay5yZWFkUGl4ZWxzKEksTyxVLFosX3QuY29udmVydChHdCksX3QuY29udmVydCh6dCksVHQpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBSdD1iIT09bnVsbD9udC5nZXQoYikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPPTApe2lmKEkuaXNGcmFtZWJ1ZmZlclRleHR1cmUhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtyZXR1cm59bGV0IFU9TWF0aC5wb3coMiwtTyksWj1NYXRoLmZsb29yKEkuaW1hZ2Uud2lkdGgqVSksVHQ9TWF0aC5mbG9vcihJLmltYWdlLmhlaWdodCpVKTtDLnNldFRleHR1cmUyRChJLDApLGsuY29weVRleFN1YkltYWdlMkQoMzU1MyxPLDAsMCxNLngsTS55LFosVHQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPLFU9MCl7bGV0IFo9SS5pbWFnZS53aWR0aCxUdD1JLmltYWdlLmhlaWdodCxDdD1fdC5jb252ZXJ0KE8uZm9ybWF0KSxMdD1fdC5jb252ZXJ0KE8udHlwZSk7Qy5zZXRUZXh0dXJlMkQoTywwKSxrLnBpeGVsU3RvcmVpKDM3NDQwLE8uZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsTy5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsTy51bnBhY2tBbGlnbm1lbnQpLEkuaXNEYXRhVGV4dHVyZT9rLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksWixUdCxDdCxMdCxJLmltYWdlLmRhdGEpOkkuaXNDb21wcmVzc2VkVGV4dHVyZT9rLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsVSxNLngsTS55LEkubWlwbWFwc1swXS53aWR0aCxJLm1pcG1hcHNbMF0uaGVpZ2h0LEN0LEkubWlwbWFwc1swXS5kYXRhKTprLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksQ3QsTHQsSS5pbWFnZSksVT09PTAmJk8uZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKDM1NTMpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oTSxJLE8sVSxaPTApe2lmKHguaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBUdD1NLm1heC54LU0ubWluLngrMSxDdD1NLm1heC55LU0ubWluLnkrMSxMdD1NLm1heC56LU0ubWluLnorMSxSdD1fdC5jb252ZXJ0KFUuZm9ybWF0KSxHdD1fdC5jb252ZXJ0KFUudHlwZSksenQ7aWYoVS5pc0RhdGFUZXh0dXJlM0QpQy5zZXRUZXh0dXJlM0QoVSwwKSx6dD0zMjg3OTtlbHNlIGlmKFUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpQy5zZXRUZXh0dXJlMkRBcnJheShVLDApLHp0PTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1rLnBpeGVsU3RvcmVpKDM3NDQwLFUuZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsVS5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsVS51bnBhY2tBbGlnbm1lbnQpO2xldCBVdD1rLmdldFBhcmFtZXRlcigzMzE0KSxpZT1rLmdldFBhcmFtZXRlcigzMjg3OCksZmk9ay5nZXRQYXJhbWV0ZXIoMzMxNiksWmk9ay5nZXRQYXJhbWV0ZXIoMzMxNSksT3Q9ay5nZXRQYXJhbWV0ZXIoMzI4NzcpLG5uPU8uaXNDb21wcmVzc2VkVGV4dHVyZT9PLm1pcG1hcHNbMF06Ty5pbWFnZTtrLnBpeGVsU3RvcmVpKDMzMTQsbm4ud2lkdGgpLGsucGl4ZWxTdG9yZWkoMzI4Nzgsbm4uaGVpZ2h0KSxrLnBpeGVsU3RvcmVpKDMzMTYsTS5taW4ueCksay5waXhlbFN0b3JlaSgzMzE1LE0ubWluLnkpLGsucGl4ZWxTdG9yZWkoMzI4NzcsTS5taW4ueiksTy5pc0RhdGFUZXh0dXJlfHxPLmlzRGF0YVRleHR1cmUzRD9rLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubi5kYXRhKTpPLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksay5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LG5uLmRhdGEpKTprLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubiksay5waXhlbFN0b3JlaSgzMzE0LFV0KSxrLnBpeGVsU3RvcmVpKDMyODc4LGllKSxrLnBpeGVsU3RvcmVpKDMzMTYsZmkpLGsucGl4ZWxTdG9yZWkoMzMxNSxaaSksay5waXhlbFN0b3JlaSgzMjg3NyxPdCksWj09PTAmJlUuZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKHp0KSxCLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihNKXtDLnNldFRleHR1cmUyRChNLDApLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXttPTAscD0wLGI9bnVsbCxCLnJlc2V0KCkseXQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfVZ0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIEp1PWNsYXNzIGV4dGVuZHMgVnR7fTtKdS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgaG89Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGhvKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtoby5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBmbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGZ0KHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IGZvKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtmby5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIFlyPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07WXIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIEdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9dG4oKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLHM9dGhpcy5zdHJpZGU7cjxzO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07R2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIHNlPW5ldyBULFdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9cj09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLHMpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1zLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJuIG5ldyBRdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IFdpKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6ZSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07V2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07ZmwucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIFJyLFdzPW5ldyBULExyPW5ldyBULFByPW5ldyBULERyPW5ldyBLLHFzPW5ldyBLLEEwPW5ldyB3dCxPYT1uZXcgVCxYcz1uZXcgVCxrYT1uZXcgVCxVZz1uZXcgSyxSdT1uZXcgSyxCZz1uZXcgSywkdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLFJyPT09dm9pZCAwKXtScj1uZXcgSHQ7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgR2koZSw1KTtSci5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxSci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgV2koaSwzLDAsITEpKSxSci5zZXRBdHRyaWJ1dGUoInV2IixuZXcgV2koaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVJyLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBmbCx0aGlzLmNlbnRlcj1uZXcgSyguNSwuNSl9cmF5Y2FzdCh0LGUpe3QuY2FtZXJhPT09bnVsbCYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLExyLnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxBMC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxQci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkxyLm11bHRpcGx5U2NhbGFyKC1Qci56KTtsZXQgaT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLHIscztpIT09MCYmKHM9TWF0aC5jb3MoaSkscj1NYXRoLnNpbihpKSk7bGV0IG89dGhpcy5jZW50ZXI7SGEoT2Euc2V0KC0uNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKFhzLnNldCguNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKGthLnNldCguNSwuNSwwKSxQcixvLExyLHIscyksVWcuc2V0KDAsMCksUnUuc2V0KDEsMCksQmcuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoT2EsWHMsa2EsITEsV3MpO2lmKGE9PT1udWxsJiYoSGEoWHMuc2V0KC0uNSwuNSwwKSxQcixvLExyLHIscyksUnUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxrYSxYcywhMSxXcyksYT09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhXcyk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpXcy5jbG9uZSgpLHV2OnJlLmdldFVWKFdzLE9hLFhzLGthLFVnLFJ1LEJnLG5ldyBLKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQuY2VudGVyIT09dm9pZCAwJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319OyR1LnByb3RvdHlwZS5pc1Nwcml0ZT0hMDtmdW5jdGlvbiBIYShuLHQsZSxpLHIscyl7RHIuc3ViVmVjdG9ycyhuLGUpLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksciE9PXZvaWQgMD8ocXMueD1zKkRyLngtcipEci55LHFzLnk9cipEci54K3MqRHIueSk6cXMuY29weShEciksbi5jb3B5KHQpLG4ueCs9cXMueCxuLnkrPXFzLnksbi5hcHBseU1hdHJpeDQoQTApfXZhciBPZz1uZXcgVCxrZz1uZXcgV3QsSGc9bmV3IFd0LE5FPW5ldyBULFZnPW5ldyB3dCxkbD1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyB3dCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyB3dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LGU9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IFd0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBpPTAscj1lLmNvdW50O2k8cjtpKyspe3QueD1lLmdldFgoaSksdC55PWUuZ2V0WShpKSx0Lno9ZS5nZXRaKGkpLHQudz1lLmdldFcoaSk7bGV0IHM9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO3MhPT0xLzA/dC5tdWx0aXBseVNjYWxhcihzKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcoaSx0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtsZXQgaT10aGlzLnNrZWxldG9uLHI9dGhpcy5nZW9tZXRyeTtrZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSGcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxPZy5jb3B5KGUpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IHM9MDtzPDQ7cysrKXtsZXQgbz1IZy5nZXRDb21wb25lbnQocyk7aWYobyE9PTApe2xldCBhPWtnLmdldENvbXBvbmVudChzKTtWZy5tdWx0aXBseU1hdHJpY2VzKGkuYm9uZXNbYV0ubWF0cml4V29ybGQsaS5ib25lSW52ZXJzZXNbYV0pLGUuYWRkU2NhbGVkVmVjdG9yKE5FLmNvcHkoT2cpLmFwcGx5TWF0cml4NChWZyksbyl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2RsLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBLdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07S3UucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgUXU9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLHMsbyxhLGwsYz1mZSx1PWZlLGgsZil7c3VwZXIobnVsbCxvLGEsbCxjLHUscixzLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtRdS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgcG89Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpe3R5cGVvZiBpPT0ibnVtYmVyIiYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cG8ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBHZz1uZXcgd3QsV2c9bmV3IHd0LFZhPVtdLFlzPW5ldyBvZSxqdT1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHBvKG5ldyBGbG9hdDMyQXJyYXkoaSoxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYoWXMuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxZcy5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLFlzLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgcz0wO3M8cjtzKyspe3RoaXMuZ2V0TWF0cml4QXQocyxHZyksV2cubXVsdGlwbHlNYXRyaWNlcyhpLEdnKSxZcy5tYXRyaXhXb3JsZD1XZyxZcy5yYXljYXN0KHQsVmEpO2ZvcihsZXQgbz0wLGE9VmEubGVuZ3RoO288YTtvKyspe2xldCBsPVZhW29dO2wuaW5zdGFuY2VJZD1zLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVZhLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcG8obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2p1LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIHpuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O3puLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBxZz1uZXcgVCxYZz1uZXcgVCxZZz1uZXcgd3QsTHU9bmV3IG9pLEdhPW5ldyBzaSxtbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHpuKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxzPWUuY291bnQ7cjxzO3IrKylxZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxYZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWcuZGlzdGFuY2VUbyhYZyk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGVlKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsbz1pLmRyYXdSYW5nZTtpZihpLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHYS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLEdhLmFwcGx5TWF0cml4NChyKSxHYS5yYWRpdXMrPXMsdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHYSk9PT0hMSlyZXR1cm47WWcuY29weShyKS5pbnZlcnQoKSxMdS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWWcpO2xldCBhPXMvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQsZj1uZXcgVCxkPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGc9aS5pbmRleCx2PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihnIT09bnVsbCl7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKGcuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7bGV0IFM9Zy5nZXRYKGIpLEw9Zy5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsUyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsTCksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBIPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0g8dC5uZWFyfHxIPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkgscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCBtPU1hdGgubWF4KDAsby5zdGFydCkscD1NYXRoLm1pbih2LmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBiPW0sXz1wLTE7YjxfO2IrPWQpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIrMSksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBMPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0w8dC5uZWFyfHxMPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkwscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07bW8ucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgWmc9bmV3IFQsSmc9bmV3IFQsZ289Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLHM9ZS5jb3VudDtyPHM7cis9MilaZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksSmcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT1yPT09MD8wOmlbci0xXSxpW3IrMV09aVtyXStaZy5kaXN0YW5jZVRvKEpnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtnby5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITA7dmFyIHRoPWNsYXNzIGV4dGVuZHMgbW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX07dGgucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIHBsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O3BsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciAkZz1uZXcgd3QsZWg9bmV3IG9pLFdhPW5ldyBzaSxxYT1uZXcgVCxuaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHBsKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2EuYXBwbHlNYXRyaXg0KHIpLFdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKFdhKT09PSExKXJldHVybjskZy5jb3B5KHIpLmludmVydCgpLGVoLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCgkZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPWkuaW5kZXgsaD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihjLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspe2xldCB2PWMuZ2V0WChnKTtxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsdiksS2cocWEsdixsLHIsdCxlLHRoaXMpfX1lbHNle2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihoLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspcWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLGcpLEtnKHFhLGcsbCxyLHQsZSx0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtuaC5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gS2cobix0LGUsaSxyLHMsbyl7bGV0IGE9ZWguZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgVDtlaC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO3MucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpvfSl9fXZhciBpaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjKXtzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9byE9PXZvaWQgMD9vOmJlLHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpiZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtpaC5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHJoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5mb3JtYXQ9aSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07cmgucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07c2gucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIG9oPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07b2gucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgWnI9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgcz1bXSxvPVtdLGE9W10sbD1bXSxjPW5ldyBULHU9bmV3IEs7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PWU7aCsrLGYrPTMpe2xldCBkPWkraC9lKnI7Yy54PXQqTWF0aC5jb3MoZCksYy55PXQqTWF0aC5zaW4oZCksby5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0ob1tmXS90KzEpLzIsdS55PShvW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1lO2grKylzLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWnIodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fTt2YXIgU2s9bmV3IFQsRWs9bmV3IFQsVGs9bmV3IFQsQWs9bmV3IHJlO3ZhciBGZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgZT1bXSxpLHI9dGhpcy5nZXRQb2ludCgwKSxzPTA7ZS5wdXNoKDApO2ZvcihsZXQgbz0xO288PXQ7bysrKWk9dGhpcy5nZXRQb2ludChvL3QpLHMrPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gocykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgaT10aGlzLmdldExlbmd0aHMoKSxyPTAscz1pLmxlbmd0aCxvO2U/bz1lOm89dCppW3MtMV07bGV0IGE9MCxsPXMtMSxjO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLW8sYzwwKWE9cisxO2Vsc2UgaWYoYz4wKWw9ci0xO2Vsc2V7bD1yO2JyZWFrfWlmKHI9bCxpW3JdPT09bylyZXR1cm4gci8ocy0xKTtsZXQgdT1pW3JdLGY9aVtyKzFdLXUsZD0oby11KS9mO3JldHVybihyK2QpLyhzLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQscz10KzFlLTQ7cjwwJiYocj0wKSxzPjEmJihzPTEpO2xldCBvPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KHMpLGw9ZXx8KG8uaXNWZWN0b3IyP25ldyBLOm5ldyBUKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihvKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgVCxyPVtdLHM9W10sbz1bXSxhPW5ldyBULGw9bmV3IHd0O2ZvcihsZXQgZD0wO2Q8PXQ7ZCsrKXtsZXQgZz1kL3Q7cltkXT10aGlzLmdldFRhbmdlbnRBdChnLG5ldyBUKX1zWzBdPW5ldyBULG9bMF09bmV3IFQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSx1PU1hdGguYWJzKHJbMF0ueCksaD1NYXRoLmFicyhyWzBdLnkpLGY9TWF0aC5hYnMoclswXS56KTt1PD1jJiYoYz11LGkuc2V0KDEsMCwwKSksaDw9YyYmKGM9aCxpLnNldCgwLDEsMCkpLGY8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxzWzBdKTtmb3IobGV0IGQ9MTtkPD10O2QrKyl7aWYoc1tkXT1zW2QtMV0uY2xvbmUoKSxvW2RdPW9bZC0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZC0xXSxyW2RdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBnPU1hdGguYWNvcyhJZShyW2QtMV0uZG90KHJbZF0pLC0xLDEpKTtzW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxnKSl9b1tkXS5jcm9zc1ZlY3RvcnMocltkXSxzW2RdKX1pZihlPT09ITApe2xldCBkPU1hdGguYWNvcyhJZShzWzBdLmRvdChzW3RdKSwtMSwxKSk7ZC89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhzWzBdLHNbdF0pKT4wJiYoZD0tZCk7Zm9yKGxldCBnPTE7Zzw9dDtnKyspc1tnXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbZ10sZCpnKSksb1tnXS5jcm9zc1ZlY3RvcnMocltnXSxzW2ddKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOnMsYmlub3JtYWxzOm99fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSxKcj1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxzPTAsbz1NYXRoLlBJKjIsYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1zLHRoaXMuYUVuZEFuZ2xlPW8sdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyBLLHI9TWF0aC5QSSoyLHM9dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxvPU1hdGguYWJzKHMpPE51bWJlci5FUFNJTE9OO2Zvcig7czwwOylzKz1yO2Zvcig7cz5yOylzLT1yO3M8TnVtYmVyLkVQU0lMT04mJihvP3M9MDpzPXIpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhbyYmKHM9PT1yP3M9LXI6cz1zLXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpzLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxkPWMtdGhpcy5hWTtsPWYqdS1kKmgrdGhpcy5hWCxjPWYqaCtkKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtKci5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIG1sPWNsYXNzIGV4dGVuZHMgSnJ7Y29uc3RydWN0b3IodCxlLGkscixzLG8pe3N1cGVyKHQsZSxpLGkscixzLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifX07bWwucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gdGYoKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIocyxvLGEsbCl7bj1zLHQ9YSxlPS0zKnMrMypvLTIqYS1sLGk9MipzLTIqbythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyl7cihvLGEsYyooYS1zKSxjKihsLW8pKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyx1LGgpe2xldCBmPShvLXMpL2MtKGEtcykvKGMrdSkrKGEtbykvdSxkPShhLW8pL3UtKGwtbykvKHUraCkrKGwtYSkvaDtmKj11LGQqPXUscihvLGEsZixkKX0sY2FsYzpmdW5jdGlvbihzKXtsZXQgbz1zKnMsYT1vKnM7cmV0dXJuIG4rdCpzK2UqbytpKmF9fX12YXIgWGE9bmV3IFQsUHU9bmV3IHRmLER1PW5ldyB0ZixJdT1uZXcgdGYsZ2w9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdLGU9ITEsaT0iY2VudHJpcGV0YWwiLHI9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9aSx0aGlzLnRlbnNpb249cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnBvaW50cyxzPXIubGVuZ3RoLG89KHMtKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKG8pLGw9by1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL3MpKzEpKnM6bD09PTAmJmE9PT1zLTEmJihhPXMtMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklc106KFhhLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1YYSk7bGV0IGg9clthJXNdLGY9clsoYSsxKSVzXTtpZih0aGlzLmNsb3NlZHx8YSsyPHM/dT1yWyhhKzIpJXNdOihYYS5zdWJWZWN0b3JzKHJbcy0xXSxyW3MtMl0pLmFkZChyW3MtMV0pLHU9WGEpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBkPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxnPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCksZCkseD1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLGQpLHY9TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxkKTt4PDFlLTQmJih4PTEpLGc8MWUtNCYmKGc9eCksdjwxZS00JiYodj14KSxQdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGgueCxmLngsdS54LGcseCx2KSxEdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGcseCx2KSxJdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGcseCx2KX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoUHUuaW5pdENhdG11bGxSb20oYy54LGgueCxmLngsdS54LHRoaXMudGVuc2lvbiksRHUuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbiksSXUuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChQdS5jYWxjKGwpLER1LmNhbGMobCksSXUuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBUKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07Z2wucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBRZyhuLHQsZSxpLHIpe2xldCBzPShpLXQpKi41LG89KHItZSkqLjUsYT1uKm4sbD1uKmE7cmV0dXJuKDIqZS0yKmkrcytvKSpsKygtMyplKzMqaS0yKnMtbykqYStzKm4rZX1mdW5jdGlvbiBGRShuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9ZnVuY3Rpb24gekUobix0KXtyZXR1cm4gMiooMS1uKSpuKnR9ZnVuY3Rpb24gVUUobix0KXtyZXR1cm4gbipuKnR9ZnVuY3Rpb24ganMobix0LGUsaSl7cmV0dXJuIEZFKG4sdCkrekUobixlKStVRShuLGkpfWZ1bmN0aW9uIEJFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIE9FKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9ZnVuY3Rpb24ga0Uobix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH1mdW5jdGlvbiBIRShuLHQpe3JldHVybiBuKm4qbip0fWZ1bmN0aW9uIHRvKG4sdCxlLGkscil7cmV0dXJuIEJFKG4sdCkrT0UobixlKStrRShuLGkpK0hFKG4scil9dmFyIHhvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEsscj1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O3hvLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHhsPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQscj1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQodG8odCxyLngscy54LG8ueCxhLngpLHRvKHQsci55LHMueSxvLnksYS55KSx0byh0LHIueixzLnosby56LGEueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eGwucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyICRyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWdldFRhbmdlbnQodCxlKXtsZXQgaT1lfHxuZXcgSztyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319OyRyLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYWg9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHlvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5by5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeWw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSxqcyh0LHIueixzLnosby56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5bC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIHZvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9KHIubGVuZ3RoLTEpKnQsbz1NYXRoLmZsb29yKHMpLGE9cy1vLGw9cltvPT09MD9vOm8tMV0sYz1yW29dLHU9cltvPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpvKzFdLGg9cltvPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpvKzJdO3JldHVybiBpLnNldChRZyhhLGwueCxjLngsdS54LGgueCksUWcoYSxsLnksYy55LHUueSxoLnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChuZXcgSygpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTt2by5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgQzA9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bWwsQ2F0bXVsbFJvbUN1cnZlMzpnbCxDdWJpY0JlemllckN1cnZlOnhvLEN1YmljQmV6aWVyQ3VydmUzOnhsLEVsbGlwc2VDdXJ2ZTpKcixMaW5lQ3VydmU6JHIsTGluZUN1cnZlMzphaCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp5byxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6eWwsU3BsaW5lQ3VydmU6dm99KSxsaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3ICRyKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxzPTA7Zm9yKDtzPHIubGVuZ3RoOyl7aWYocltzXT49aSl7bGV0IG89cltzXS1pLGE9dGhpcy5jdXJ2ZXNbc10sbD1hLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLW8vbDtyZXR1cm4gYS5nZXRQb2ludEF0KGMsZSl9cysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgZT1bXSxpO2ZvcihsZXQgcj0wLHM9dGhpcy5jdXJ2ZXM7cjxzLmxlbmd0aDtyKyspe2xldCBvPXNbcl0sYT1vJiZvLmlzRWxsaXBzZUN1cnZlP3QqMjpvJiYoby5pc0xpbmVDdXJ2ZXx8by5pc0xpbmVDdXJ2ZTMpPzE6byYmby5pc1NwbGluZUN1cnZlP3Qqby5wb2ludHMubGVuZ3RoOnQsbD1vLmdldFBvaW50cyhhKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmN1cnZlc1tlXTt0LmN1cnZlcy5wdXNoKHIudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2gobmV3IEMwW3IudHlwZV0oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxfbz1jbGFzcyBleHRlbmRzIGxoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgSyx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3ICRyKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBzPW5ldyB5byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgeG8odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpLG5ldyBLKGksciksbmV3IEsocyxvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHMsbyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgdm8oZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrYSxlK2wsaSxyLHMsbyksdGhpc31hYnNhcmModCxlLGkscixzLG8pe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLHMsbyksdGhpc31lbGxpcHNlKHQsZSxpLHIscyxvLGEsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2MsZSt1LGkscixzLG8sYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz1uZXcgSnIodCxlLGkscixzLG8sYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LFVuPWNsYXNzIGV4dGVuZHMgX297Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPXRuKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5ob2xlc1tlXTt0LmhvbGVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2gobmV3IF9vKCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sVkU9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKG4sdCxlPTIpe2xldCBpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgscz1SMChuLDAscixlLCEwKSxvPVtdO2lmKCFzfHxzLm5leHQ9PT1zLnByZXYpcmV0dXJuIG87bGV0IGEsbCxjLHUsaCxmLGQ7aWYoaSYmKHM9WUUobix0LHMsZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9dT1uWzFdO2ZvcihsZXQgZz1lO2c8cjtnKz1lKWg9bltnXSxmPW5bZysxXSxoPGEmJihhPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO2Q9TWF0aC5tYXgoYy1hLHUtbCksZD1kIT09MD8xL2Q6MH1yZXR1cm4gd28ocyxvLGUsYSxsLGQpLG99fTtmdW5jdGlvbiBSMChuLHQsZSxpLHIpe2xldCBzLG87aWYocj09PXJUKG4sdCxlLGkpPjApZm9yKHM9dDtzPGU7cys9aSlvPWpnKHMsbltzXSxuW3MrMV0sbyk7ZWxzZSBmb3Iocz1lLWk7cz49dDtzLT1pKW89amcocyxuW3NdLG5bcysxXSxvKTtyZXR1cm4gbyYmRGwobyxvLm5leHQpJiYoYm8obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gbGkobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgZT1uLGk7ZG8gaWYoaT0hMSwhZS5zdGVpbmVyJiYoRGwoZSxlLm5leHQpfHx0ZShlLnByZXYsZSxlLm5leHQpPT09MCkpe2lmKGJvKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfWVsc2UgZT1lLm5leHQ7d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIHdvKG4sdCxlLGkscixzLG8pe2lmKCFuKXJldHVybjshbyYmcyYmUUUobixpLHIscyk7bGV0IGE9bixsLGM7Zm9yKDtuLnByZXYhPT1uLm5leHQ7KXtpZihsPW4ucHJldixjPW4ubmV4dCxzP1dFKG4saSxyLHMpOkdFKG4pKXt0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxibyhuKSxuPWMubmV4dCxhPWMubmV4dDtjb250aW51ZX1pZihuPWMsbj09PWEpe28/bz09PTE/KG49cUUobGkobiksdCxlKSx3byhuLHQsZSxpLHIscywyKSk6bz09PTImJlhFKG4sdCxlLGkscixzKTp3byhsaShuKSx0LGUsaSxyLHMsMSk7YnJlYWt9fX1mdW5jdGlvbiBHRShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKHRlKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZih6cih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmdGUoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBXRShuLHQsZSxpKXtsZXQgcj1uLnByZXYscz1uLG89bi5uZXh0O2lmKHRlKHIscyxvKT49MClyZXR1cm4hMTtsZXQgYT1yLng8cy54P3IueDxvLng/ci54Om8ueDpzLng8by54P3MueDpvLngsbD1yLnk8cy55P3IueTxvLnk/ci55Om8ueTpzLnk8by55P3MueTpvLnksYz1yLng+cy54P3IueD5vLng/ci54Om8ueDpzLng+by54P3MueDpvLngsdT1yLnk+cy55P3IueT5vLnk/ci55Om8ueTpzLnk+by55P3MueTpvLnksaD1jaChhLGwsdCxlLGkpLGY9Y2goYyx1LHQsZSxpKSxkPW4ucHJldlosZz1uLm5leHRaO2Zvcig7ZCYmZC56Pj1oJiZnJiZnLno8PWY7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MHx8KGQ9ZC5wcmV2WixnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MCkpcmV0dXJuITE7Zz1nLm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PW4ucHJldiYmZCE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZC54LGQueSkmJnRlKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7ZyYmZy56PD1mOyl7aWYoZyE9PW4ucHJldiYmZyE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZy54LGcueSkmJnRlKGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHFFKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixzPWkubmV4dC5uZXh0OyFEbChyLHMpJiZMMChyLGksaS5uZXh0LHMpJiZNbyhyLHMpJiZNbyhzLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChzLmkvZSksYm8oaSksYm8oaS5uZXh0KSxpPW49cyksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiBsaShpKX1mdW5jdGlvbiBYRShuLHQsZSxpLHIscyl7bGV0IG89bjtkb3tsZXQgYT1vLm5leHQubmV4dDtmb3IoO2EhPT1vLnByZXY7KXtpZihvLmkhPT1hLmkmJmVUKG8sYSkpe2xldCBsPVAwKG8sYSk7bz1saShvLG8ubmV4dCksbD1saShsLGwubmV4dCksd28obyx0LGUsaSxyLHMpLHdvKGwsdCxlLGkscixzKTtyZXR1cm59YT1hLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PW4pfWZ1bmN0aW9uIFlFKG4sdCxlLGkpe2xldCByPVtdLHMsbyxhLGwsYztmb3Iocz0wLG89dC5sZW5ndGg7czxvO3MrKylhPXRbc10qaSxsPXM8by0xP3RbcysxXSppOm4ubGVuZ3RoLGM9UjAobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHRUKGMpKTtmb3Ioci5zb3J0KFpFKSxzPTA7czxyLmxlbmd0aDtzKyspSkUocltzXSxlKSxlPWxpKGUsZS5uZXh0KTtyZXR1cm4gZX1mdW5jdGlvbiBaRShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIEpFKG4sdCl7aWYodD0kRShuLHQpLHQpe2xldCBlPVAwKHQsbik7bGkodCx0Lm5leHQpLGxpKGUsZS5uZXh0KX19ZnVuY3Rpb24gJEUobix0KXtsZXQgZT10LGk9bi54LHI9bi55LHM9LTEvMCxvO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgZj1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihmPD1pJiZmPnMpe2lmKHM9ZixmPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1vPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1zKXJldHVybiBvO2xldCBhPW8sbD1vLngsYz1vLnksdT0xLzAsaDtlPW87ZG8gaT49ZS54JiZlLng+PWwmJmkhPT1lLngmJnpyKHI8Yz9pOnMscixsLGMscjxjP3M6aSxyLGUueCxlLnkpJiYoaD1NYXRoLmFicyhyLWUueSkvKGktZS54KSxNbyhlLG4pJiYoaDx1fHxoPT09dSYmKGUueD5vLnh8fGUueD09PW8ueCYmS0UobyxlKSkpJiYobz1lLHU9aCkpLGU9ZS5uZXh0O3doaWxlKGUhPT1hKTtyZXR1cm4gb31mdW5jdGlvbiBLRShuLHQpe3JldHVybiB0ZShuLnByZXYsbix0LnByZXYpPDAmJnRlKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBRRShuLHQsZSxpKXtsZXQgcj1uO2RvIHIuej09PW51bGwmJihyLno9Y2goci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0O3doaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGpFKHIpfWZ1bmN0aW9uIGpFKG4pe2xldCB0LGUsaSxyLHMsbyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLHM9bnVsbCxvPTA7ZTspe2ZvcihvKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WiwhIWkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspYSE9PTAmJihsPT09MHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSkscz9zLm5leHRaPXI6bj1yLHIucHJldlo9cyxzPXI7ZT1pfXMubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSk7cmV0dXJuIG59ZnVuY3Rpb24gY2gobix0LGUsaSxyKXtyZXR1cm4gbj0zMjc2Nyoobi1lKSpyLHQ9MzI3NjcqKHQtaSkqcixuPShufG48PDgpJjE2NzExOTM1LG49KG58bjw8NCkmMjUyNjQ1MTM1LG49KG58bjw8MikmODU4OTkzNDU5LG49KG58bjw8MSkmMTQzMTY1NTc2NSx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxufHQ8PDF9ZnVuY3Rpb24gdFQobil7bGV0IHQ9bixlPW47ZG8odC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHQ7d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIHpyKG4sdCxlLGkscixzLG8sYSl7cmV0dXJuKHItbykqKHQtYSktKG4tbykqKHMtYSk+PTAmJihuLW8pKihpLWEpLShlLW8pKih0LWEpPj0wJiYoZS1vKSoocy1hKS0oci1vKSooaS1hKT49MH1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFuVChuLHQpJiYoTW8obix0KSYmTW8odCxuKSYmaVQobix0KSYmKHRlKG4ucHJldixuLHQucHJldil8fHRlKG4sdC5wcmV2LHQpKXx8RGwobix0KSYmdGUobi5wcmV2LG4sbi5uZXh0KT4wJiZ0ZSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHRlKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRGwobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gTDAobix0LGUsaSl7bGV0IHI9WmEodGUobix0LGUpKSxzPVphKHRlKG4sdCxpKSksbz1aYSh0ZShlLGksbikpLGE9WmEodGUoZSxpLHQpKTtyZXR1cm4hIShyIT09cyYmbyE9PWF8fHI9PT0wJiZZYShuLGUsdCl8fHM9PT0wJiZZYShuLGksdCl8fG89PT0wJiZZYShlLG4saSl8fGE9PT0wJiZZYShlLHQsaSkpfWZ1bmN0aW9uIFlhKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gblQobix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJkwwKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfWZ1bmN0aW9uIE1vKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLG4ubmV4dCk8MD90ZShuLHQsbi5uZXh0KT49MCYmdGUobixuLnByZXYsdCk+PTA6dGUobix0LG4ucHJldik8MHx8dGUobixuLm5leHQsdCk8MH1mdW5jdGlvbiBpVChuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLHM9KG4ueSt0LnkpLzI7ZG8gZS55PnMhPWUubmV4dC55PnMmJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihzLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHQ7d2hpbGUoZSE9PW4pO3JldHVybiBpfWZ1bmN0aW9uIFAwKG4sdCl7bGV0IGU9bmV3IHVoKG4uaSxuLngsbi55KSxpPW5ldyB1aCh0LmksdC54LHQueSkscj1uLm5leHQscz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLHMubmV4dD1pLGkucHJldj1zLGl9ZnVuY3Rpb24gamcobix0LGUsaSl7bGV0IHI9bmV3IHVoKG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gYm8obil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiB1aChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gclQobix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IHM9dCxvPWUtaTtzPGU7cys9aSlyKz0obltvXS1uW3NdKSoobltzKzFdK25bbysxXSksbz1zO3JldHVybiByfXZhciBkbj1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxzPTA7czxlO3I9cysrKWkrPXRbcl0ueCp0W3NdLnktdFtzXS54KnRbcl0ueTtyZXR1cm4gaSouNX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIGRuLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10scz1bXTt0MCh0KSxlMChpLHQpO2xldCBvPXQubGVuZ3RoO2UuZm9yRWFjaCh0MCk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKG8pLG8rPWVbbF0ubGVuZ3RoLGUwKGksZVtsXSk7bGV0IGE9VkUudHJpYW5ndWxhdGUoaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpcy5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gc319O2Z1bmN0aW9uIHQwKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBlMChuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBjaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9bmV3IFVuKFtuZXcgSyguNSwuNSksbmV3IEsoLS41LC41KSxuZXcgSygtLjUsLS41KSxuZXcgSyguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10scz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV07byhjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShzLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXSxjPWUuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9lLmN1cnZlU2VnbWVudHM6MTIsdT1lLnN0ZXBzIT09dm9pZCAwP2Uuc3RlcHM6MSxoPWUuZGVwdGghPT12b2lkIDA/ZS5kZXB0aDoxLGY9ZS5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ZS5iZXZlbEVuYWJsZWQ6ITAsZD1lLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP2UuYmV2ZWxUaGlja25lc3M6LjIsZz1lLmJldmVsU2l6ZSE9PXZvaWQgMD9lLmJldmVsU2l6ZTpkLS4xLHg9ZS5iZXZlbE9mZnNldCE9PXZvaWQgMD9lLmJldmVsT2Zmc2V0OjAsdj1lLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ZS5iZXZlbFNlZ21lbnRzOjMsbT1lLmV4dHJ1ZGVQYXRoLHA9ZS5VVkdlbmVyYXRvciE9PXZvaWQgMD9lLlVWR2VuZXJhdG9yOnNUO2UuYW1vdW50IT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGg9ZS5hbW91bnQpO2xldCBiLF89ITEsUyxMLEEsSDttJiYoYj1tLmdldFNwYWNlZFBvaW50cyh1KSxfPSEwLGY9ITEsUz1tLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQpLGZ8fCh2PTAsZD0wLGc9MCx4PTApO2xldCB0dD1hLmV4dHJhY3RQb2ludHMoYyksWD10dC5zaGFwZSx5PXR0LmhvbGVzO2lmKCFkbi5pc0Nsb2NrV2lzZShYKSl7WD1YLnJldmVyc2UoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107ZG4uaXNDbG9ja1dpc2UoSikmJih5W0NdPUoucmV2ZXJzZSgpKX19bGV0IEQ9ZG4udHJpYW5ndWxhdGVTaGFwZShYLHkpLEY9WDtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107WD1YLmNvbmNhdChKKX1mdW5jdGlvbiB6KEMsaixKKXtyZXR1cm4ganx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxqLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoSikuYWRkKEMpfWxldCBOPVgubGVuZ3RoLFY9RC5sZW5ndGg7ZnVuY3Rpb24gUShDLGosSil7bGV0IGl0LGV0LHZ0LGJ0PUMueC1qLngsSXQ9Qy55LWoueSxadD1KLngtQy54LHF0PUoueS1DLnksRT1idCpidCtJdCpJdCx3PWJ0KnF0LUl0Klp0O2lmKE1hdGguYWJzKHcpPk51bWJlci5FUFNJTE9OKXtsZXQgcT1NYXRoLnNxcnQoRSkscnQ9TWF0aC5zcXJ0KFp0Klp0K3F0KnF0KSxndD1qLngtSXQvcSxXPWoueStidC9xLF90PUoueC1xdC9ydCx5dD1KLnkrWnQvcnQsdXQ9KChfdC1ndCkqcXQtKHl0LVcpKlp0KS8oYnQqcXQtSXQqWnQpO2l0PWd0K2J0KnV0LUMueCxldD1XK0l0KnV0LUMueTtsZXQgY3Q9aXQqaXQrZXQqZXQ7aWYoY3Q8PTIpcmV0dXJuIG5ldyBLKGl0LGV0KTt2dD1NYXRoLnNxcnQoY3QvMil9ZWxzZXtsZXQgcT0hMTtidD5OdW1iZXIuRVBTSUxPTj9adD5OdW1iZXIuRVBTSUxPTiYmKHE9ITApOmJ0PC1OdW1iZXIuRVBTSUxPTj9adDwtTnVtYmVyLkVQU0lMT04mJihxPSEwKTpNYXRoLnNpZ24oSXQpPT09TWF0aC5zaWduKHF0KSYmKHE9ITApLHE/KGl0PS1JdCxldD1idCx2dD1NYXRoLnNxcnQoRSkpOihpdD1idCxldD1JdCx2dD1NYXRoLnNxcnQoRS8yKSl9cmV0dXJuIG5ldyBLKGl0L3Z0LGV0L3Z0KX1sZXQgYXQ9W107Zm9yKGxldCBDPTAsaj1GLmxlbmd0aCxKPWotMSxpdD1DKzE7QzxqO0MrKyxKKyssaXQrKylKPT09aiYmKEo9MCksaXQ9PT1qJiYoaXQ9MCksYXRbQ109UShGW0NdLEZbSl0sRltpdF0pO2xldCBHPVtdLCQsbHQ9YXQuY29uY2F0KCk7Zm9yKGxldCBDPTAsaj15Lmxlbmd0aDtDPGo7QysrKXtsZXQgSj15W0NdOyQ9W107Zm9yKGxldCBpdD0wLGV0PUoubGVuZ3RoLHZ0PWV0LTEsYnQ9aXQrMTtpdDxldDtpdCsrLHZ0KyssYnQrKyl2dD09PWV0JiYodnQ9MCksYnQ9PT1ldCYmKGJ0PTApLCRbaXRdPVEoSltpdF0sSlt2dF0sSltidF0pO0cucHVzaCgkKSxsdD1sdC5jb25jYXQoJCl9Zm9yKGxldCBDPTA7Qzx2O0MrKyl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksLUopfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7bXQocXQueCxxdC55LC1KKX19fWxldCBkdD1nK3g7Zm9yKGxldCBDPTA7QzxOO0MrKyl7bGV0IGo9Zj96KFhbQ10sbHRbQ10sZHQpOlhbQ107Xz8oQS5jb3B5KFMubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai54KSxMLmNvcHkoUy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGoueSksSC5jb3B5KGJbMF0pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChqLngsai55LDApfWZvcihsZXQgQz0xO0M8PXU7QysrKWZvcihsZXQgaj0wO2o8TjtqKyspe2xldCBKPWY/eihYW2pdLGx0W2pdLGR0KTpYW2pdO18/KEEuY29weShTLm5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueCksTC5jb3B5KFMuYmlub3JtYWxzW0NdKS5tdWx0aXBseVNjYWxhcihKLnkpLEguY29weShiW0NdKS5hZGQoQSkuYWRkKEwpLG10KEgueCxILnksSC56KSk6bXQoSi54LEoueSxoL3UqQyl9Zm9yKGxldCBDPXYtMTtDPj0wO0MtLSl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksaCtKKX1mb3IobGV0IGV0PTAsdnQ9eS5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXlbZXRdOyQ9R1tldF07Zm9yKGxldCBJdD0wLFp0PWJ0Lmxlbmd0aDtJdDxadDtJdCsrKXtsZXQgcXQ9eihidFtJdF0sJFtJdF0saXQpO18/bXQocXQueCxxdC55K2JbdS0xXS55LGJbdS0xXS54K0opOm10KHF0LngscXQueSxoK0opfX19eHQoKSxrKCk7ZnVuY3Rpb24geHQoKXtsZXQgQz1yLmxlbmd0aC8zO2lmKGYpe2xldCBqPTAsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzJdK0osZXRbMV0rSixldFswXStKKX1qPXUrdioyLEo9TipqO2ZvcihsZXQgaXQ9MDtpdDxWO2l0Kyspe2xldCBldD1EW2l0XTtTdChldFswXStKLGV0WzFdK0osZXRbMl0rSil9fWVsc2V7Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzJdLEpbMV0sSlswXSl9Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzBdK04qdSxKWzFdK04qdSxKWzJdK04qdSl9fWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMCl9ZnVuY3Rpb24gaygpe2xldCBDPXIubGVuZ3RoLzMsaj0wO0Z0KEYsaiksais9Ri5sZW5ndGg7Zm9yKGxldCBKPTAsaXQ9eS5sZW5ndGg7SjxpdDtKKyspe2xldCBldD15W0pdO0Z0KGV0LGopLGorPWV0Lmxlbmd0aH1pLmFkZEdyb3VwKEMsci5sZW5ndGgvMy1DLDEpfWZ1bmN0aW9uIEZ0KEMsail7bGV0IEo9Qy5sZW5ndGg7Zm9yKDstLUo+PTA7KXtsZXQgaXQ9SixldD1KLTE7ZXQ8MCYmKGV0PUMubGVuZ3RoLTEpO2ZvcihsZXQgdnQ9MCxidD11K3YqMjt2dDxidDt2dCsrKXtsZXQgSXQ9Tip2dCxadD1OKih2dCsxKSxxdD1qK2l0K0l0LEU9aitldCtJdCx3PWorZXQrWnQscT1qK2l0K1p0O0IocXQsRSx3LHEpfX19ZnVuY3Rpb24gbXQoQyxqLEope2wucHVzaChDKSxsLnB1c2goaiksbC5wdXNoKEopfWZ1bmN0aW9uIFN0KEMsaixKKXtzdChDKSxzdChqKSxzdChKKTtsZXQgaXQ9ci5sZW5ndGgvMyxldD1wLmdlbmVyYXRlVG9wVVYoaSxyLGl0LTMsaXQtMixpdC0xKTtudChldFswXSksbnQoZXRbMV0pLG50KGV0WzJdKX1mdW5jdGlvbiBCKEMsaixKLGl0KXtzdChDKSxzdChqKSxzdChpdCksc3Qoaiksc3QoSiksc3QoaXQpO2xldCBldD1yLmxlbmd0aC8zLHZ0PXAuZ2VuZXJhdGVTaWRlV2FsbFVWKGkscixldC02LGV0LTMsZXQtMixldC0xKTtudCh2dFswXSksbnQodnRbMV0pLG50KHZ0WzNdKSxudCh2dFsxXSksbnQodnRbMl0pLG50KHZ0WzNdKX1mdW5jdGlvbiBzdChDKXtyLnB1c2gobFtDKjMrMF0pLHIucHVzaChsW0MqMysxXSksci5wdXNoKGxbQyozKzJdKX1mdW5jdGlvbiBudChDKXtzLnB1c2goQy54KSxzLnB1c2goQy55KX19fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxpPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO3JldHVybiBvVChlLGksdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBzPTAsbz10LnNoYXBlcy5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVt0LnNoYXBlc1tzXV07aS5wdXNoKGEpfWxldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gciE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKSxuZXcgY2koaSx0Lm9wdGlvbnMpfX0sc1Q9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10W2UqM10sbz10W2UqMysxXSxhPXRbaSozXSxsPXRbaSozKzFdLGM9dFtyKjNdLHU9dFtyKjMrMV07cmV0dXJuW25ldyBLKHMsbyksbmV3IEsoYSxsKSxuZXcgSyhjLHUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixzKXtsZXQgbz10W2UqM10sYT10W2UqMysxXSxsPXRbZSozKzJdLGM9dFtpKjNdLHU9dFtpKjMrMV0saD10W2kqMysyXSxmPXRbciozXSxkPXRbciozKzFdLGc9dFtyKjMrMl0seD10W3MqM10sdj10W3MqMysxXSxtPXRbcyozKzJdO3JldHVybiBNYXRoLmFicyhhLXUpPE1hdGguYWJzKG8tYyk/W25ldyBLKG8sMS1sKSxuZXcgSyhjLDEtaCksbmV3IEsoZiwxLWcpLG5ldyBLKHgsMS1tKV06W25ldyBLKGEsMS1sKSxuZXcgSyh1LDEtaCksbmV3IEsoZCwxLWcpLG5ldyBLKHYsMS1tKV19fTtmdW5jdGlvbiBvVChuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe2xldCBzPW5baV07ZS5zaGFwZXMucHVzaChzLnV1aWQpfWVsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0LmV4dHJ1ZGVQYXRoIT09dm9pZCAwJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9dmFyIHFpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKDAsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10scz1bXSxvPVtdLGE9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAoYSxsLHUpLGErPWwsbD0wO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKG8sMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9ci5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhlKSxkPWYuc2hhcGUsZz1mLmhvbGVzO2RuLmlzQ2xvY2tXaXNlKGQpPT09ITEmJihkPWQucmV2ZXJzZSgpKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZG4uaXNDbG9ja1dpc2UocCk9PT0hMCYmKGdbdl09cC5yZXZlcnNlKCkpfWxldCB4PWRuLnRyaWFuZ3VsYXRlU2hhcGUoZCxnKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZD1kLmNvbmNhdChwKX1mb3IobGV0IHY9MCxtPWQubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWRbdl07ci5wdXNoKHAueCxwLnksMCkscy5wdXNoKDAsMCwxKSxvLnB1c2gocC54LHAueSl9Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXtsZXQgcD14W3ZdLGI9cFswXStoLF89cFsxXStoLFM9cFsyXStoO2kucHVzaChiLF8sUyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYVQoZSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxzPXQuc2hhcGVzLmxlbmd0aDtyPHM7cisrKXtsZXQgbz1lW3Quc2hhcGVzW3JdXTtpLnB1c2gobyl9cmV0dXJuIG5ldyBxaShpLHQuY3VydmVTZWdtZW50cyl9fTtmdW5jdGlvbiBhVChuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj1uW2VdO3Quc2hhcGVzLnB1c2goci51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH12YXIgaGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O2hoLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciB2bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBmdCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMucm91Z2huZXNzTWFwPW51bGwsdGhpcy5tZXRhbG5lc3NNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmVudk1hcEludGVuc2l0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3ZsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPSEwO3ZhciBmaD1jbGFzcyBleHRlbmRzIHZse2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWUoMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaW9yPSgxKy40KmUpLygxLS40KmUpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgZnQoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IGZ0KDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O2ZoLnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBkaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGZ0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtkaC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgcGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BoLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7dmFyIG1oPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O21oLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgZ2g9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtnaC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4aD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3hoLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgeWg9Y2xhc3MgZXh0ZW5kcyB6bntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt5aC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIEt0PXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gS3QuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCxlIT09dm9pZCAwP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOnR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UPT0ibnVtYmVyIj9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHIscyl7cmV0dXJuIG5bcl0tbltzXX1sZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQodCksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBzPTAsbz0wO28hPT1pOysrcyl7bGV0IGE9ZVtzXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW28rK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLHM9blswXTtmb3IoO3MhPT12b2lkIDAmJnNbaV09PT12b2lkIDA7KXM9bltyKytdO2lmKHM9PT12b2lkIDApcmV0dXJuO2xldCBvPXNbaV07aWYobyE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KG8pKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoLmFwcGx5KGUsbykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgaWYoby50b0FycmF5IT09dm9pZCAwKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksby50b0FycmF5KGUsZS5sZW5ndGgpKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKTtlbHNlIGRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoKG8pKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBzPW4uY2xvbmUoKTtzLm5hbWU9dDtsZXQgbz1bXTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPXMudHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxoPVtdLGY9W107Zm9yKGxldCBkPTA7ZDxjLnRpbWVzLmxlbmd0aDsrK2Qpe2xldCBnPWMudGltZXNbZF0qcjtpZighKGc8ZXx8Zz49aSkpe2gucHVzaChjLnRpbWVzW2RdKTtmb3IobGV0IHg9MDt4PHU7Kyt4KWYucHVzaChjLnZhbHVlc1tkKnUreF0pfX1oLmxlbmd0aCE9PTAmJihjLnRpbWVzPUt0LmNvbnZlcnRBcnJheShoLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUt0LmNvbnZlcnRBcnJheShmLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxvLnB1c2goYykpfXMudHJhY2tzPW87bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbClhPnMudHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1zLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKXMudHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBzLnJlc2V0RHVyYXRpb24oKSxzfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLHM9dC9pO2ZvcihsZXQgbz0wO288cjsrK28pe2xldCBhPWUudHJhY2tzW29dLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKGw9PT0iYm9vbCJ8fGw9PT0ic3RyaW5nIiljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT1hLm5hbWUmJm0uVmFsdWVUeXBlTmFtZT09PWx9KTtpZihjPT09dm9pZCAwKWNvbnRpbnVlO2xldCB1PTAsaD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWgvMyk7bGV0IGY9MCxkPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGY9ZC8zKTtsZXQgZz1hLnRpbWVzLmxlbmd0aC0xLHg7aWYoczw9YS50aW1lc1swXSl7bGV0IG09dSxwPWgtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNlIGlmKHM+PWEudGltZXNbZ10pe2xldCBtPWcqaCt1LHA9bStoLXU7eD1LdC5hcnJheVNsaWNlKGEudmFsdWVzLG0scCl9ZWxzZXtsZXQgbT1hLmNyZWF0ZUludGVycG9sYW50KCkscD11LGI9aC11O20uZXZhbHVhdGUocykseD1LdC5hcnJheVNsaWNlKG0ucmVzdWx0QnVmZmVyLHAsYil9bD09PSJxdWF0ZXJuaW9uIiYmbmV3IEVlKCkuZnJvbUFycmF5KHgpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoeCk7bGV0IHY9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBtPTA7bTx2OysrbSl7bGV0IHA9bSpkK2Y7aWYobD09PSJxdWF0ZXJuaW9uIilFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyxwLHgsMCxjLnZhbHVlcyxwKTtlbHNle2xldCBiPWQtZioyO2ZvcihsZXQgXz0wO188YjsrK18pYy52YWx1ZXNbcCtfXS09eFtfXX19fXJldHVybiBuLmJsZW5kTW9kZT1kMCxufX0scG49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXIhPT12b2lkIDA/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxzPWVbaS0xXTt0OntlOntsZXQgbztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZihyPT09dm9pZCAwKXtpZih0PHMpYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LHMpfWlmKGk9PT1hKWJyZWFrO2lmKHM9cixyPWVbKytpXSx0PHIpYnJlYWsgZX1vPWUubGVuZ3RoO2JyZWFrIG59aWYoISh0Pj1zKSl7bGV0IGE9ZVsxXTt0PGEmJihpPTIscz1hKTtmb3IobGV0IGw9aS0yOzspe2lmKHM9PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKGk9PT1sKWJyZWFrO2lmKHI9cyxzPWVbLS1pLTFdLHQ+PXMpYnJlYWsgZX1vPWksaT0wO2JyZWFrIG59YnJlYWsgdH1mb3IoO2k8bzspe2xldCBhPWkrbz4+PjE7dDxlW2FdP289YTppPWErMX1pZihyPWVbaV0scz1lW2ktMV0scz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYocj09PXZvaWQgMClyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSxzLHQpfXRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5pbnRlcnZhbENoYW5nZWRfKGkscyxyKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaSxzLHQscil9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCBlPXRoaXMucmVzdWx0QnVmZmVyLGk9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPXQqcjtmb3IobGV0IG89MDtvIT09cjsrK28pZVtvXT1pW3Mrb107cmV0dXJuIGV9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtwbi5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPXBuLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3BuLnByb3RvdHlwZS5hZnRlckVuZF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHZoPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGksciksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0Ok5yLGVuZGluZ0VuZDpOcn19aW50ZXJ2YWxDaGFuZ2VkXyh0LGUsaSl7bGV0IHI9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMscz10LTIsbz10KzEsYT1yW3NdLGw9cltvXTtpZihhPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIEZyOnM9dCxhPTIqZS1pO2JyZWFrO2Nhc2UgZWw6cz1yLmxlbmd0aC0yLGE9ZStyW3NdLXJbcysxXTticmVhaztkZWZhdWx0OnM9dCxhPWl9aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgRnI6bz10LGw9MippLWU7YnJlYWs7Y2FzZSBlbDpvPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0Om89dC0xLGw9ZX1sZXQgYz0oaS1lKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1zKnUsdGhpcy5fb2Zmc2V0TmV4dD1vKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixkPXRoaXMuX3dlaWdodE5leHQsZz0oaS1lKS8oci1lKSx4PWcqZyx2PXgqZyxtPS1mKnYrMipmKngtZipnLHA9KDErZikqdisoLTEuNS0yKmYpKngrKC0uNStmKSpnKzEsYj0oLTEtZCkqdisoMS41K2QpKngrLjUqZyxfPWQqdi1kKng7Zm9yKGxldCBTPTA7UyE9PWE7KytTKXNbU109bSpvW3UrU10rcCpvW2MrU10rYipvW2wrU10rXypvW2grU107cmV0dXJuIHN9fSxfbD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09YTsrK2Ypc1tmXT1vW2MrZl0qaCtvW2wrZl0qdTtyZXR1cm4gc319LF9oPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LFhlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9S3QuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9S3QuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBlPXQuY29uc3RydWN0b3IsaTtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpLdC5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOkt0LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBfaCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgX2wodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHZoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIGphOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIHRsOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBldTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKGU9PT12b2lkIDApe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGkpO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixpKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gamE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gdGw7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZXV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKj10fXJldHVybiB0aGlzfXRyaW0odCxlKXtsZXQgaT10aGlzLnRpbWVzLHI9aS5sZW5ndGgscz0wLG89ci0xO2Zvcig7cyE9PXImJmlbc108dDspKytzO2Zvcig7byE9PS0xJiZpW29dPmU7KS0tbztpZigrK28scyE9PTB8fG8hPT1yKXtzPj1vJiYobz1NYXRoLm1heChvLDEpLHM9by0xKTtsZXQgYT10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9S3QuYXJyYXlTbGljZShpLHMsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxzKmEsbyphKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLGU9dGhpcy5nZXRWYWx1ZVNpemUoKTtlLU1hdGguZmxvb3IoZSkhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLHM9aS5sZW5ndGg7cz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBhPTA7YSE9PXM7YSsrKXtsZXQgbD1pW2FdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobyE9PW51bGwmJm8+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxvKSx0PSExO2JyZWFrfW89bH1pZihyIT09dm9pZCAwJiZLdC5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PUt0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj10aGlzLmdldEludGVycG9sYXRpb24oKT09PWV1LHM9dC5sZW5ndGgtMSxvPTE7Zm9yKGxldCBhPTE7YTxzOysrYSl7bGV0IGw9ITEsYz10W2FdLHU9dFthKzFdO2lmKGMhPT11JiYoYSE9PTF8fGMhPT10WzBdKSlpZihyKWw9ITA7ZWxzZXtsZXQgaD1hKmksZj1oLWksZD1oK2k7Zm9yKGxldCBnPTA7ZyE9PWk7KytnKXtsZXQgeD1lW2grZ107aWYoeCE9PWVbZitnXXx8eCE9PWVbZCtnXSl7bD0hMDticmVha319fWlmKGwpe2lmKGEhPT1vKXt0W29dPXRbYV07bGV0IGg9YSppLGY9byppO2ZvcihsZXQgZD0wO2QhPT1pOysrZCllW2YrZF09ZVtoK2RdfSsrb319aWYocz4wKXt0W29dPXRbc107Zm9yKGxldCBhPXMqaSxsPW8qaSxjPTA7YyE9PWk7KytjKWVbbCtjXT1lW2ErY107KytvfXJldHVybiBvIT09dC5sZW5ndGg/KHRoaXMudGltZXM9S3QuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZShlLDAsbyppKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxpPXRoaXMuY29uc3RydWN0b3Iscj1uZXcgaSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtYZS5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj10bDt2YXIgdWk9Y2xhc3MgZXh0ZW5kcyBYZXt9O3VpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjt1aS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3VpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgd2w9Y2xhc3MgZXh0ZW5kcyBYZXt9O3dsLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIEtyPWNsYXNzIGV4dGVuZHMgWGV7fTtLci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgd2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9KGktZSkvKHItZSksYz10KmE7Zm9yKGxldCB1PWMrYTtjIT09dTtjKz00KUVlLnNsZXJwRmxhdChzLDAsbyxjLWEsbyxjLGwpO3JldHVybiBzfX0sWGk9Y2xhc3MgZXh0ZW5kcyBYZXtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyB3aCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WGkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO1hpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBoaT1jbGFzcyBleHRlbmRzIFhle307aGkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7aGkucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtoaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249amE7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIFFyPWNsYXNzIGV4dGVuZHMgWGV7fTtRci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgTWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj1RaCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9aSx0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9cix0aGlzLnV1aWQ9dG4oKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgZT1bXSxpPXQudHJhY2tzLHI9MS8odC5mcHN8fDEpO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChjVChpW29dKS5zY2FsZShyKSk7bGV0IHM9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIHMudXVpZD10LnV1aWQsc31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgcz0wLG89aS5sZW5ndGg7cyE9PW87KytzKWUucHVzaChYZS50b0pTT04oaVtzXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgcz1lLmxlbmd0aCxvPVtdO2ZvcihsZXQgYT0wO2E8czthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK3MtMSklcyxhLChhKzEpJXMpLGMucHVzaCgwLDEsMCk7bGV0IHU9S3QuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUt0LnNvcnRlZEFycmF5KGwsMSx1KSxjPUt0LnNvcnRlZEFycmF5KGMsMSx1KSwhciYmbFswXT09PTAmJihsLnB1c2gocyksYy5wdXNoKGNbMF0pKSxvLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLG8pfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxzPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChzKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9cltoXTtmfHwocltoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBvPVtdO2ZvcihsZXQgYSBpbiByKW8ucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gb31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGgsZixkLGcseCl7aWYoZC5sZW5ndGghPT0wKXtsZXQgdj1bXSxtPVtdO0t0LmZsYXR0ZW5KU09OKGQsdixtLGcpLHYubGVuZ3RoIT09MCYmeC5wdXNoKG5ldyBoKGYsdixtKSl9fSxyPVtdLHM9dC5uYW1lfHwiZGVmYXVsdCIsbz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBkPXt9LGc7Zm9yKGc9MDtnPGYubGVuZ3RoO2crKylpZihmW2ddLm1vcnBoVGFyZ2V0cylmb3IobGV0IHg9MDt4PGZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDt4KyspZFtmW2ddLm1vcnBoVGFyZ2V0c1t4XV09LTE7Zm9yKGxldCB4IGluIGQpe2xldCB2PVtdLG09W107Zm9yKGxldCBwPTA7cCE9PWZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3Ape2xldCBiPWZbZ107di5wdXNoKGIudGltZSksbS5wdXNoKGIubW9ycGhUYXJnZXQ9PT14PzE6MCl9ci5wdXNoKG5ldyBLcigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIreCsiXSIsdixtKSl9bD1kLmxlbmd0aCoob3x8MSl9ZWxzZXtsZXQgZD0iLmJvbmVzWyIrZVtoXS5uYW1lKyJdIjtpKFFyLGQrIi5wb3NpdGlvbiIsZiwicG9zIixyKSxpKFhpLGQrIi5xdWF0ZXJuaW9uIixmLCJyb3QiLHIpLGkoUXIsZCsiLnNjYWxlIixmLCJzY2wiLHIpfX1yZXR1cm4gci5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMocyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLGU9MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLHMudGltZXNbcy50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGxUKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEtyO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gUXI7Y2FzZSJjb2xvciI6cmV0dXJuIHdsO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFhpO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdWk7Y2FzZSJzdHJpbmciOnJldHVybiBoaX10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfWZ1bmN0aW9uIGNUKG4pe2lmKG4udHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9bFQobi50eXBlKTtpZihuLnRpbWVzPT09dm9pZCAwKXtsZXQgZT1bXSxpPVtdO0t0LmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciBqcj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxNaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9dGhpcyxzPSExLG89MCxhPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXthKysscz09PSExJiZyLm9uU3RhcnQhPT12b2lkIDAmJnIub25TdGFydCh1LG8sYSkscz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe28rKyxyLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJnIub25Qcm9ncmVzcyh1LG8sYSksbz09PWEmJihzPSExLHIub25Mb2FkIT09dm9pZCAwJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7ci5vbkVycm9yIT09dm9pZCAwJiZyLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgZD1jW2hdLGc9Y1toKzFdO2lmKGQuZ2xvYmFsJiYoZC5sYXN0SW5kZXg9MCksZC50ZXN0KHUpKXJldHVybiBnfXJldHVybiBudWxsfX19LHVUPW5ldyBNaCxtbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dCE9PXZvaWQgMD90OnVULHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIscyl7aS5sb2FkKHQscixlLHMpfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LERuPXt9LGJoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz1qci5nZXQodCk7aWYocyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShzKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCkscztpZihEblt0XSE9PXZvaWQgMCl7RG5bdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO3JldHVybn1Eblt0XT1bXSxEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IG89bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gobykudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1Eblt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mP3BhcnNlSW50KGYpOjAsZz1kIT09MCx4PTAsdj1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KG0pe3AoKTtmdW5jdGlvbiBwKCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpffSk9PntpZihiKW0uY2xvc2UoKTtlbHNle3grPV8uYnl0ZUxlbmd0aDtsZXQgUz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmcsbG9hZGVkOngsdG90YWw6ZH0pO2ZvcihsZXQgTD0wLEE9dS5sZW5ndGg7TDxBO0wrKyl7bGV0IEg9dVtMXTtILm9uUHJvZ3Jlc3MmJkgub25Qcm9ncmVzcyhTKX1tLmVucXVldWUoXykscCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKHYpfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxhKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihhPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKGEpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLGQ9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihnPT5kLmRlY29kZShnKSl9fX0pLnRoZW4oYz0+e2pyLmFkZCh0LGMpO2xldCB1PURuW3RdO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkxvYWQmJmQub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1Eblt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgRG5bdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgZD11W2hdO2Qub25FcnJvciYmZC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319O3ZhciBibD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9cm8oImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksanIuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxyJiZyKGgpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHMubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sU2g9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBXcixvPW5ldyBibCh0aGlzLm1hbmFnZXIpO28uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe28ubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe3MuaW1hZ2VzW2NdPXUsYSsrLGE9PT02JiYocy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHMpKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIHN9fTt2YXIgRWg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBhZSxvPW5ldyBibCh0aGlzLm1hbmFnZXIpO3JldHVybiBvLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLG8uc2V0UGF0aCh0aGlzLnBhdGgpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3MuaW1hZ2U9YSxzLm5lZWRzVXBkYXRlPSEwLGUhPT12b2lkIDAmJmUocyl9LGksciksc319LFllPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O1llLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBUaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGkpLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IGZ0KGUpfWNvcHkodCl7cmV0dXJuIFllLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O1RoLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbjA9bmV3IHd0LGkwPW5ldyBULHIwPW5ldyBULFNvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBLKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHd0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHFyLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSygxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O2kwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxlLnBvc2l0aW9uLmNvcHkoaTApLHIwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQocjApLGUudXBkYXRlTWF0cml4V29ybGQoKSxuMC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuMCksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIHRoaXMuYmlhcyE9PTAmJih0LmJpYXM9dGhpcy5iaWFzKSx0aGlzLm5vcm1hbEJpYXMhPT0wJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksdGhpcy5yYWRpdXMhPT0xJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCh0aGlzLm1hcFNpemUueCE9PTUxMnx8dGhpcy5tYXBTaXplLnkhPT01MTIpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFNsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT1WdSoyKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LHM9dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxzIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPXMsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtTbC5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITA7dmFyIEFoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPU1hdGguUEkvMyxzPTAsbz0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLmRpc3RhbmNlPWksdGhpcy5hbmdsZT1yLHRoaXMucGVudW1icmE9cyx0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IFNsfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10L01hdGguUEl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmFuZ2xlPXQuYW5nbGUsdGhpcy5wZW51bWJyYT10LnBlbnVtYnJhLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0FoLnByb3RvdHlwZS5pc1Nwb3RMaWdodD0hMDt2YXIgczA9bmV3IHd0LFpzPW5ldyBULE51PW5ldyBULEVsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEsoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgV3QoMiwxLDEsMSksbmV3IFd0KDAsMSwxLDEpLG5ldyBXdCgzLDEsMSwxKSxuZXcgV3QoMSwxLDEsMSksbmV3IFd0KDMsMCwxLDEpLG5ldyBXdCgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyBUKDEsMCwwKSxuZXcgVCgtMSwwLDApLG5ldyBUKDAsMCwxKSxuZXcgVCgwLDAsLTEpLG5ldyBUKDAsMSwwKSxuZXcgVCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LHM9dC5kaXN0YW5jZXx8aS5mYXI7cyE9PWkuZmFyJiYoaS5mYXI9cyxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksWnMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShacyksTnUuY29weShpLnBvc2l0aW9uKSxOdS5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChOdSksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1acy54LC1acy55LC1acy56KSxzMC5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzMCl9fTtFbC5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBDaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRWx9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtDaC5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBUbD1jbGFzcyBleHRlbmRzIFNve2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFZpKC01LDUsNSwtNSwuNSw1MDApKX19O1RsLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIFJoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGt0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcga3QsdGhpcy5zaGFkb3c9bmV3IFRsfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O1JoLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIExoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0xoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgUGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fTtQaC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBBbD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgVCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwuNDg4NjAzKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bM10sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDEuMDkyNTQ4KihpKnIpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDEuMDkyNTQ4KihyKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzZdLC4zMTUzOTIqKDMqcypzLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDEuMDkyNTQ4KihpKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC41NDYyNzQqKGkqaS1yKnIpKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkob1swXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksZS5hZGRTY2FsZWRWZWN0b3Iob1sxXSwyKi41MTE2NjQqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwyKi41MTE2NjQqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwyKi41MTE2NjQqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1s0XSwyKi40MjkwNDMqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDIqLjQyOTA0MypyKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpzKnMtLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwyKi40MjkwNDMqaSpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC40MjkwNDMqKGkqaS1yKnIpKSxlfWFkZCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmFkZCh0LmNvZWZmaWNpZW50c1tlXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmxlcnAodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW2VdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tlXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlK3IqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlK3IqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypzLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipzLGVbNl09LjMxNTM5MiooMypzKnMtMSksZVs3XT0xLjA5MjU0OCppKnMsZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0FsLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIEVvPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodD1uZXcgQWwsZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O0VvLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIERoPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoKGkpe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBlPT09LTE/Ii4vIjp0LnN1YnN0cigwLGUrMSl9c3RhdGljIHJlc29sdmVVUkwodCxlKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fSxJaD1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtJaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9e307YS5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKHMub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtqci5hZGQodCxsKSxlJiZlKGwpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkscy5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05oLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKYSxoVD17Z2V0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBKYT09PXZvaWQgMCYmKEphPW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksSmF9LHNldENvbnRleHQ6ZnVuY3Rpb24obil7SmE9bn19LEZoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgcz10aGlzLG89bmV3IGJoKHRoaXMubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3RyeXtsZXQgbD1hLnNsaWNlKDApO2hULmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fSx6aD1jbGFzcyBleHRlbmRzIEVve2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHZvaWQgMCxpKTtsZXQgcj1uZXcgZnQoKS5zZXQodCkscz1uZXcgZnQoKS5zZXQoZSksbz1uZXcgVChyLnIsci5nLHIuYiksYT1uZXcgVChzLnIscy5nLHMuYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkobykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkobykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX07emgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIFVoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT1uZXcgZnQoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtVaC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCBlPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gZS5idWZmZXI9dGhpcy5idWZmZXIsZS5sb29wPXRoaXMubG9vcCxlLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxlLmxvb3BFbmQ9dGhpcy5sb29wRW5kLGUub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxlLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1lLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX07dmFyIE9oPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1lLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdCs9ZVtpXTtyZXR1cm4gdC9lLmxlbmd0aH19LGtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pO2xldCByLHMsbztzd2l0Y2goZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLHM9dGhpcy5fc2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoaSo1KTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxzPXRoaXMuX2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo1KX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1zLHRoaXMuX3NldElkZW50aXR5PW8sdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUscz10KnIrcixvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihvPT09MCl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbcythXT1pW2FdO289ZX1lbHNle28rPWU7bGV0IGE9ZS9vO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHMsMCxhLHIpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1vfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Uscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsbz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHM8MSl7bGV0IGw9ZSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixsLDEtcyxlKX1vPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcsZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgcz1pLG89cjtzIT09bzsrK3MpZVtzXT1lW3IrcyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixzKXtpZihyPj0uNSlmb3IobGV0IG89MDtvIT09czsrK28pdFtlK29dPXRbaStvXX1fc2xlcnAodCxlLGkscil7RWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7bGV0IG89dGhpcy5fd29ya0luZGV4KnM7RWUubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxvLHQsZSx0LGkpLEVlLnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxyKX1fbGVycCh0LGUsaSxyLHMpe2xldCBvPTEtcjtmb3IobGV0IGE9MDthIT09czsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qbyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLHMpe2ZvcihsZXQgbz0wO28hPT1zOysrbyl7bGV0IGE9ZStvO3RbYV09dFthXSt0W2krb10qcn19fSxlZj0iXFxbXFxdXFwuOlxcLyIsZlQ9bmV3IFJlZ0V4cCgiWyIrZWYrIl0iLCJnIiksbmY9IlteIitlZisiXSIsZFQ9IlteIitlZi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIscFQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixuZiksbVQ9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsZFQpLGdUPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSx4VD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHlUPW5ldyBSZWdFeHAoIl4iK3BUK21UK2dUK3hUKyIkIiksdlQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sSGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj10aGlzLl9iaW5kaW5nc1tpXTtyIT09dm9pZCAwJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxOdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpLHRoaXMubm9kZT1OdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10LHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIHQmJnQuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgTnQuQ29tcG9zaXRlKHQsZSxpKTpuZXcgTnQodCxlLGkpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKGZULCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IGU9eVQuZXhlYyh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgaT17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LHI9aS5ub2RlTmFtZSYmaS5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHIhPT12b2lkIDAmJnIhPT0tMSl7bGV0IHM9aS5ub2RlTmFtZS5zdWJzdHJpbmcocisxKTt2VC5pbmRleE9mKHMpIT09LTEmJihpLm5vZGVOYW1lPWkubm9kZU5hbWUuc3Vic3RyaW5nKDAsciksaS5vYmplY3ROYW1lPXMpfWlmKGkucHJvcGVydHlOYW1lPT09bnVsbHx8aS5wcm9wZXJ0eU5hbWUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIGl9c3RhdGljIGZpbmROb2RlKHQsZSl7aWYoIWV8fGU9PT0iInx8ZT09PSIuInx8ZT09PS0xfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2xldCBpPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZihpIT09dm9pZCAwKXJldHVybiBpfWlmKHQuY2hpbGRyZW4pe2xldCBpPWZ1bmN0aW9uKHMpe2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtsZXQgYT1zW29dO2lmKGEubmFtZT09PWV8fGEudXVpZD09PWUpcmV0dXJuIGE7bGV0IGw9aShhLmNoaWxkcmVuKTtpZihsKXJldHVybiBsfXJldHVybiBudWxsfSxyPWkodC5jaGlsZHJlbik7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QodCxlKXt0W2VdPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpdFtlKytdPWlbcl19X2dldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RbZV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheSh0LGUpfV9zZXRWYWx1ZV9kaXJlY3QodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUodCxlKX1fc2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGk9ZS5vYmplY3ROYW1lLHI9ZS5wcm9wZXJ0eU5hbWUscz1lLnByb3BlcnR5SW5kZXg7aWYodHx8KHQ9TnQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtyZXR1cm59aWYoaSl7bGV0IGM9ZS5vYmplY3RJbmRleDtzd2l0Y2goaSl7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO3JldHVybn1pZighdC5tYXRlcmlhbC5tYXRlcmlhbHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtyZXR1cm59dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtyZXR1cm59dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0ubmFtZT09PWMpe2M9dTticmVha31icmVhaztkZWZhdWx0OmlmKHRbaV09PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtyZXR1cm59dD10W2ldfWlmKGMhPT12b2lkIDApe2lmKHRbY109PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7cmV0dXJufXQ9dFtjXX19bGV0IG89dFtyXTtpZihvPT09dm9pZCAwKXtsZXQgYz1lLm5vZGVOYW1lO2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrYysiLiIrcisiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIix0KTtyZXR1cm59bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx0Lm5lZWRzVXBkYXRlIT09dm9pZCAwP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnQubWF0cml4V29ybGROZWVkc1VwZGF0ZSE9PXZvaWQgMCYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBsPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHMhPT12b2lkIDApe2lmKHI9PT0ibW9ycGhUYXJnZXRJbmZsdWVuY2VzIil7aWYoIXQuZ2VvbWV0cnkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7cmV0dXJufWlmKHQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTtyZXR1cm59dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10hPT12b2lkIDAmJihzPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1lbHNle2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtyZXR1cm59fWw9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8sdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSBvLmZyb21BcnJheSE9PXZvaWQgMCYmby50b0FycmF5IT09dm9pZCAwPyhsPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOkFycmF5LmlzQXJyYXkobyk/KGw9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6dGhpcy5wcm9wZXJ0eU5hbWU9cjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtsXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbbF1bYV19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19O050LkNvbXBvc2l0ZT1IaDtOdC5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307TnQucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07TnQucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W050LnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtOdC5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIFZoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPXRuKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgaT0wLHI9YXJndW1lbnRzLmxlbmd0aDtpIT09cjsrK2kpdFthcmd1bWVudHNbaV0udXVpZF09aTt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX2JpbmRpbmdzLG89cy5sZW5ndGgsYSxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLGQ9Zi51dWlkLGc9ZVtkXTtpZihnPT09dm9pZCAwKXtnPWwrKyxlW2RdPWcsdC5wdXNoKGYpO2ZvcihsZXQgeD0wLHY9bzt4IT09djsrK3gpc1t4XS5wdXNoKG5ldyBOdChmLGlbeF0sclt4XSkpfWVsc2UgaWYoZzxjKXthPXRbZ107bGV0IHg9LS1jLHY9dFt4XTtlW3YudXVpZF09Zyx0W2ddPXYsZVtkXT14LHRbeF09Zjtmb3IobGV0IG09MCxwPW87bSE9PXA7KyttKXtsZXQgYj1zW21dLF89Ylt4XSxTPWJbZ107YltnXT1fLFM9PT12b2lkIDAmJihTPW5ldyBOdChmLGlbbV0sclttXSkpLGJbeF09U319ZWxzZSB0W2ddIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgbz0wLGE9YXJndW1lbnRzLmxlbmd0aDtvIT09YTsrK28pe2xldCBsPWFyZ3VtZW50c1tvXSxjPWwudXVpZCx1PWVbY107aWYodSE9PXZvaWQgMCYmdT49cyl7bGV0IGg9cysrLGY9dFtoXTtlW2YudXVpZF09dSx0W3VdPWYsZVtjXT1oLHRbaF09bDtmb3IobGV0IGQ9MCxnPXI7ZCE9PWc7KytkKXtsZXQgeD1pW2RdLHY9eFtoXSxtPXhbdV07eFt1XT12LHhbaF09bX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfLG89dC5sZW5ndGg7Zm9yKGxldCBhPTAsbD1hcmd1bWVudHMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9YXJndW1lbnRzW2FdLHU9Yy51dWlkLGg9ZVt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSBlW3VdLGg8cyl7bGV0IGY9LS1zLGQ9dFtmXSxnPS0tbyx4PXRbZ107ZVtkLnV1aWRdPWgsdFtoXT1kLGVbeC51dWlkXT1mLHRbZl09eCx0LnBvcCgpO2ZvcihsZXQgdj0wLG09cjt2IT09bTsrK3Ype2xldCBwPWlbdl0sYj1wW2ZdLF89cFtnXTtwW2hdPWIscFtmXT1fLHAucG9wKCl9fWVsc2V7bGV0IGY9LS1vLGQ9dFtmXTtmPjAmJihlW2QudXVpZF09aCksdFtoXT1kLHQucG9wKCk7Zm9yKGxldCBnPTAseD1yO2chPT14OysrZyl7bGV0IHY9aVtnXTt2W2hdPXZbZl0sdi5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9c3Vic2NyaWJlXyh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxyPWlbdF0scz10aGlzLl9iaW5kaW5ncztpZihyIT09dm9pZCAwKXJldHVybiBzW3JdO2xldCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtyPXMubGVuZ3RoLGlbdF09cixvLnB1c2godCksYS5wdXNoKGUpLHMucHVzaChoKTtmb3IobGV0IGY9dSxkPWwubGVuZ3RoO2YhPT1kOysrZil7bGV0IGc9bFtmXTtoW2ZdPW5ldyBOdChnLHQsZSl9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPWVbdF07aWYoaSE9PXZvaWQgMCl7bGV0IHI9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgtMSxsPW9bYV0sYz10W2FdO2VbY109aSxvW2ldPWwsby5wb3AoKSxzW2ldPXNbYV0scy5wb3AoKSxyW2ldPXJbYV0sci5wb3AoKX19fTtWaC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgR2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBzPWUudHJhY2tzLG89cy5sZW5ndGgsYT1uZXcgQXJyYXkobyksbD17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfTtmb3IobGV0IGM9MDtjIT09bzsrK2Mpe2xldCB1PXNbY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkobyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVp3LHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiZ0aGlzLnRpbWVTY2FsZSE9PTAmJnRoaXMuX3N0YXJ0VGltZT09PW51bGwmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixzPXQuX2NsaXAuZHVyYXRpb24sbz1zL3IsYT1yL3M7dC53YXJwKDEsbyxlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixzPXIudGltZSxvPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7YT09PW51bGwmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPXMsbFsxXT1zK2ksY1swXT10L28sY1sxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXt0aGlzLl91cGRhdGVXZWlnaHQodCk7cmV0dXJufWxldCBzPXRoaXMuX3N0YXJ0VGltZTtpZihzIT09bnVsbCl7bGV0IGw9KHQtcykqaTtpZihsPDB8fGk9PT0wKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7c3dpdGNoKHRoaXMuYmxlbmRNb2RlKXtjYXNlIGQwOmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSBRaDpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKGkhPT1udWxsKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLHI9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aSE9PW51bGwmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksZT09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxzPXRoaXMuX2xvb3BDb3VudCxvPWk9PT1KdztpZih0PT09MClyZXR1cm4gcz09PS0xP3I6byYmKHMmMSk9PT0xP2UtcjpyO2lmKGk9PT1Zdyl7cz09PS0xJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKHI+PWUpcj1lO2Vsc2UgaWYocjwwKXI9MDtlbHNle3RoaXMudGltZT1yO2JyZWFrIHR9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKHM9PT0tMSYmKHQ+PTA/KHM9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLHRoaXMucmVwZXRpdGlvbnM9PT0wLG8pKTp0aGlzLl9zZXRFbmRpbmdzKHRoaXMucmVwZXRpdGlvbnM9PT0wLCEwLG8pKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEscys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1zO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKGw9PT0xKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLG8pfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxvKTt0aGlzLl9sb29wQ291bnQ9cyx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKG8mJihzJjEpPT09MSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9RnIsci5lbmRpbmdFbmQ9RnIpOih0P3IuZW5kaW5nU3RhcnQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P0ZyOk5yOnIuZW5kaW5nU3RhcnQ9ZWwsZT9yLmVuZGluZ0VuZD10aGlzLnplcm9TbG9wZUF0RW5kP0ZyOk5yOnIuZW5kaW5nRW5kPWVsKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bz09PW51bGwmJihvPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtsZXQgYT1vLnBhcmFtZXRlclBvc2l0aW9ucyxsPW8uc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPXMsbFswXT1lLGFbMV09cyt0LGxbMV09aSx0aGlzfX0sV2g9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxzPXIubGVuZ3RoLG89dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dT09PXZvaWQgMCYmKHU9e30sY1tsXT11KTtmb3IobGV0IGg9MDtoIT09czsrK2gpe2xldCBmPXJbaF0sZD1mLm5hbWUsZz11W2RdO2lmKGchPT12b2lkIDApKytnLnJlZmVyZW5jZUNvdW50LG9baF09ZztlbHNle2lmKGc9b1toXSxnIT09dm9pZCAwKXtnLl9jYWNoZUluZGV4PT09bnVsbCYmKCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpKTtjb250aW51ZX1sZXQgeD1lJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW2hdLmJpbmRpbmcucGFyc2VkUGF0aDtnPW5ldyBraChOdC5jcmVhdGUoaSxkLHgpLGYuVmFsdWVUeXBlTmFtZSxmLmdldFZhbHVlU2l6ZSgpKSwrK2cucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGcsbCxkKSxvW2hdPWd9YVtoXS5yZXN1bHRCdWZmZXI9Zy5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKHQuX2NhY2hlSW5kZXg9PT1udWxsKXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQscyYmcy5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldO3MudXNlQ291bnQrKz09PTAmJih0aGlzLl9sZW5kQmluZGluZyhzKSxzLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy51c2VDb3VudD09PTAmJihzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKHMpKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gZSE9PW51bGwmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXNbZV07aWYobz09PXZvaWQgMClvPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLHNbZV09bztlbHNle2xldCBhPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLG8uYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBzPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3NdLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLHU9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PXUsbFt1XT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2xldCBoPWEuYWN0aW9uQnlSb290LGY9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZDtkZWxldGUgaFtmXSxsLmxlbmd0aD09PTAmJmRlbGV0ZSBvW3NdLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9ZVtpXTstLXMucmVmZXJlbmNlQ291bnQ9PT0wJiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz10aGlzLl9iaW5kaW5ncyxvPXJbZV07bz09PXZvaWQgMCYmKG89e30scltlXT1vKSxvW2ldPXQsdC5fY2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxzPWkucGF0aCxvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPW9bcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbc10sT2JqZWN0LmtleXMoYSkubGVuZ3RoPT09MCYmZGVsZXRlIG9bcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiBpPT09dm9pZCAwJiYoaT1uZXcgX2wobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LHMuX19jYWNoZUluZGV4PWksZVtpXT1zfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qscz1yLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShyLHQpOnQsYT1vIT09bnVsbD9vLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKGk9PT12b2lkIDAmJihvIT09bnVsbD9pPW8uYmxlbmRNb2RlOmk9UWgpLGwhPT12b2lkIDApe2xldCBoPWwuYWN0aW9uQnlSb290W3NdO2lmKGghPT12b2lkIDAmJmguYmxlbmRNb2RlPT09aSlyZXR1cm4gaDtjPWwua25vd25BY3Rpb25zWzBdLG89PT1udWxsJiYobz1jLl9jbGlwKX1pZihvPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdT1uZXcgR2godGhpcyxvLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LGEscyksdX1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQscz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShpLHQpOnQsbz1zP3MudXVpZDp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvXTtyZXR1cm4gYSE9PXZvaWQgMCYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMsZT10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IGk9ZS0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQscz1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQscyxvKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShvKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1yW2ldO2lmKHMhPT12b2lkIDApe2xldCBvPXMua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1vW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsZVt1XT1oLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IG8gaW4gaSl7bGV0IGE9aVtvXS5hY3Rpb25CeVJvb3QsbD1hW2VdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1yW2VdO2lmKHMhPT12b2lkIDApZm9yKGxldCBvIGluIHMpe2xldCBhPXNbb107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtpIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX07V2gucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIFRvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBUbyh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LHFoPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fTtxaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgWGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixzKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9aSx0aGlzLmVsZW1lbnRTaXplPXIsdGhpcy5jb3VudD1zLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1hoLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvMD1uZXcgSyxZaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLKDEvMCwxLzApLGU9bmV3IEsoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW8wLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gbzAuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1lpLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIGEwPW5ldyBULCRhPW5ldyBULFloPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5zdGFydCx0aGlzLmVuZCkubXVsdGlwbHlTY2FsYXIoLjUpfWRlbHRhKHQpe3JldHVybiB0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHRoaXMuZGVsdGEoZSkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpfWNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKXthMC5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksJGEuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgaT0kYS5kb3QoJGEpLHM9JGEuZG90KGEwKS9pO3JldHVybiBlJiYocz1JZShzLDAsMSkpLHN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUsaSl7bGV0IHI9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSk7cmV0dXJuIHRoaXMuZGVsdGEoaSkubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTt2YXIgUW49bmV3IFQsS2E9bmV3IHd0LEZ1PW5ldyB3dCxaaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQpe2xldCBlPUQwKHQpLGk9bmV3IEh0LHI9W10scz1bXSxvPW5ldyBmdCgwLDAsMSksYT1uZXcgZnQoMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCkscy5wdXNoKG8ucixvLmcsby5iKSxzLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShzLDMpKTtsZXQgbD1uZXcgem4oe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIoaSxsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1lLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCBlPXRoaXMuYm9uZXMsaT10aGlzLmdlb21ldHJ5LHI9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7RnUuY29weSh0aGlzLnJvb3QubWF0cml4V29ybGQpLmludmVydCgpO2ZvcihsZXQgcz0wLG89MDtzPGUubGVuZ3RoO3MrKyl7bGV0IGE9ZVtzXTthLnBhcmVudCYmYS5wYXJlbnQuaXNCb25lJiYoS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLm1hdHJpeFdvcmxkKSxRbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oS2EpLHIuc2V0WFlaKG8sUW4ueCxRbi55LFFuLnopLEthLm11bHRpcGx5TWF0cmljZXMoRnUsYS5wYXJlbnQubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobysxLFFuLngsUW4ueSxRbi56KSxvKz0yKX1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIEQwKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsRDAobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBKaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBmdChpKSxyPW5ldyBmdChyKTtsZXQgcz1lLzIsbz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLGQ9MCxnPS1hO2Y8PWU7ZisrLGcrPW8pe2wucHVzaCgtYSwwLGcsYSwwLGcpLGwucHVzaChnLDAsLWEsZywwLGEpO2xldCB4PWY9PT1zP2k6cjt4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zfWxldCB1PW5ldyBIdDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShjLDMpKTtsZXQgaD1uZXcgem4oe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX07dmFyIF9UPW5ldyBGbG9hdDMyQXJyYXkoMSksQ2s9bmV3IEludDMyQXJyYXkoX1QuYnVmZmVyKTtGZS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59O19vLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX07SmgucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07WmgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfTttbi5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLERoLmV4dHJhY3RVcmxCYXNlKG4pfTttbi5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX07WWkucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O1lpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07WWkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O1lpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07R2UucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O0dlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O0dlLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtHZS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9O3NpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtxci5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX07WWgucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKG4pfTtkZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2RlLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9O3d0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfTt3dC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTt3dC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IFQoKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O3d0LnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfTt3dC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTt3dC5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixzKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixzKX07d3QucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07amUucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX07RWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX07RWUucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtyZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07cmUucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX07cmUucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9O3JlLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfTtyZS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX07cmUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxyZS5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX07cmUubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIikscmUuZ2V0Tm9ybWFsKG4sdCxlLGkpfTtVbi5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX07VW4ucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGNpKHRoaXMsbil9O1VuLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IHFpKHRoaXMsbil9O0sucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9O0sucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfTtLLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX07VC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX07VC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfTtULnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07VC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07VC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O1QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtXdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07V3QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtrdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfTtrdC5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfTtrdC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O2t0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7b2UucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2UucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLCR3fSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7ZGwucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtTZS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWWUucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUXQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09bmx9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShubCl9fX0pO1F0LnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307UXQucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUXQucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07SHQucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX07SHQucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBRdChhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOm49PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpfTtIdC5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe2UhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfTtIdC5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtIdC5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtIdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9O0h0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7R2kucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShuPT09ITA/bmw6aW8pLHRoaXN9O0dpLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07Y2kucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtjaS5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1lyLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VG8ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBmdH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PWMwfX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz1ufX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZuLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9bn19fSk7VnQucHJvdG90eXBlLmNsZWFyVGFyZ2V0PWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldChuKSx0aGlzLmNsZWFyKHQsZSxpKX07VnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcChuKX07VnQucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIiksdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX07VnQucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9O1Z0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn07VnQucHJvdG90eXBlLnJlc2V0R0xTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuIiksdGhpcy5zdGF0ZS5yZXNldCgpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc307VnQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfTtWdC5wcm90b3R5cGUuZW5hYmxlU2Npc3NvclRlc3Q9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZW5hYmxlU2Npc3NvclRlc3QoKSBpcyBub3cgLnNldFNjaXNzb3JUZXN0KCkuIiksdGhpcy5zZXRTY2lzc29yVGVzdChuKX07VnQucHJvdG90eXBlLmluaXRNYXRlcmlhbD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUudXBkYXRlU2hhZG93TWFwPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZUN1YmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuZ2V0QWN0aXZlTWlwTWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9bn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9bn19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPW49PT0hMD8kdDpyaX19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sZ2FtbWFGYWN0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpLDJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQwLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOZS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSk7QmgucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IEZoKCkubG9hZChuLGZ1bmN0aW9uKGkpe3Quc2V0QnVmZmVyKGkpfSksdGhpc307T2gucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTthby5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfTthby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX07Tm4uY3Jvc3NPcmlnaW49dm9pZCAwO05uLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEVoO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IHM9ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihzLm1hcHBpbmc9dCksc307Tm4ubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgU2g7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTt0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246JGh9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSRoKTtmdW5jdGlvbiByZihuLHQsZSl7aWYoZT09PTEpcmV0dXJuIG5ldyBmdCh0KTtsZXQgaT1waSh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBmdChzYyhpLG4pKDEtZSkpfXZhciBnbjsoZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBOMChuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09ZSozKSYmKGk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZSozKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgcz0wO3M8ZTtzKyspcltzKjNdPXRbcyoyXSxyW3MqMysxXT10W3MqMisxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsZSozKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEYwKG4sdCxlKXtsZXQgaT1NYXRoLm1heCh0Lmxlbmd0aC8yLTEsMCkscj1pKjIqMyxzPXIqMyxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIW98fG8uY291bnQhPT1yKSYmKG89bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkocyksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixvKSk7bGV0IGE9by5hcnJheTtmb3IobGV0IGw9MDtsPGk7bCsrKXtsZXRbYyx1LGgsZl09W3RbMipsXSx0WzIqbCsxXSx0WzIqbCsyXSx0WzIqbCszXV0sZD1uZXcgSyhjLHUpLGc9bmV3IEsoaCxmKSx4PW5ldyBLKGgtYyxmLXUpLHY9bmV3IEsoLXgueSx4LngpLnNldExlbmd0aChlLzIpLG09ZC5jbG9uZSgpLmFkZCh2KSxwPWQuY2xvbmUoKS5zdWIodiksYj1nLmNsb25lKCkuYWRkKHYpLF89Zy5jbG9uZSgpLnN1Yih2KSxTPVttLngsbS55LDAscC54LHAueSwwLGIueCxiLnksMCxiLngsYi55LDAscC54LHAueSwwLF8ueCxfLnksMF07YS5zZXQoUyxsKlMubGVuZ3RoKX1vLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAscyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBJbChuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOnMsb3BhY2l0eTpvfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1yZihuLHMsbyE9bnVsbD9vOjEpLGM9ZSh0Lmdlb21ldHJ5KTtyZXR1cm4gdC5nZW9tZXRyeSE9PWMmJih0Lmdlb21ldHJ5PWMpLGEuY29sb3IuZXF1YWxzKGwpfHwoYS5jb2xvci5zZXQobCksYS5uZWVkc1VwZGF0ZT0hMCksITB9dmFyIHdUPXtjcmVhdGVTY2VuZTooKT0+bmV3IFlyfSxSbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT13VC5jcmVhdGVTY2VuZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSIjZmZmIixEaS5pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksciYmdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixyKSx0aGlzLnJlbmRlcmVyPW5ldyBWdCh7Y2FudmFzOnQsYW50aWFsaWFzOiEwLGFscGhhOiEwfSksdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKGkpfW9uUmVzaXplKHQpe3RoaXMucmVuZGVyZXIuc2V0U2l6ZSh0LndpZHRoLHQuaGVpZ2h0KX1kZXN0cm95T2JqZWN0KHQpe2xldCBlPXQub2JqM2Q7aWYodGhpcy5zY2VuZS5yZW1vdmUoZSksZSBpbnN0YW5jZW9mIG9lKXtlLmdlb21ldHJ5LmRpc3Bvc2UoKTtsZXQgaT1BcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpP2UubWF0ZXJpYWw6W2UubWF0ZXJpYWxdO2ZvcihsZXQgciBvZiBpKXIuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXt2YXIgdTtpZighdCYmIWkudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTpyLHdpZHRoOnN9PWk7aWYoIXQpe2xldCBoPXJmKHRoaXMuYmFja2dyb3VuZENvbG9yLGkuY29sb3IsKHU9aS5vcGFjaXR5KSE9bnVsbD91OjEpLGY9bmV3IEh0LGQ9bmV3IHpuKHtjb2xvcjpofSksZz1uZXcgb2UoZixkKTtyZXR1cm4gZC52aXNpYmxlPXIsRjAoZixlLHMpLHRoaXMuc2NlbmUuYWRkKGcpLHt0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmcsd2lkdGg6c319bGV0e2RhdGE6byxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsaD0+KChzIT09bHx8IW98fCFEaS5hcmVQb2x5bGluZXNFcXVhbChvLGUpKSYmRjAoaCxlLHMpLGgpLGkpP3t0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmEsd2lkdGg6c306dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTppLGNvbG9yOnIsb3BhY2l0eTpzfT1lLG89cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IscixzIT1udWxsP3M6MSksYT1uZXcga2koe2NvbG9yOm8sdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBvZSh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWkscz1yKk1hdGguc3FydCgzKS8yLG89bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktcy8zLGUueCtyLzIsZS55LXMvMyxlLngsZS55K3MqMi8zXSk7aWYoIXQpe2xldCBsPW5ldyBIdDtOMChsLG8pO2xldCBjPXRoaXMuY3JlYXRlTWVzaChsLGkpO3JldHVybiBjPT09bnVsbD9udWxsOih0aGlzLnNjZW5lLmFkZChjKSx7dHlwZTpnbi5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6Y30pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLGw9PihOMChsLG8pLGwpLGkpP3t0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWkscz1uZXcgWnIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gocyxpKTtyZXR1cm4gYT09PW51bGw/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+cyxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnN9PXIsbz0yL01hdGguc3FydCgzKSpzLGE9bmV3IFVuKFtuZXcgSyhlLngtby8yLGUueS1zLzIpLG5ldyBLKGUueCxlLnkrcy8yKSxuZXcgSyhpLngsaS55K3MvMiksbmV3IEsoaS54K28vMixpLnktcy8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBxaShhKTtpZighdCl7bGV0IHU9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIHU9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKHUpLHt0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnV9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTpnbi5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fTt2YXIgTmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlbmRlckNhY2hlPXQsdGhpcy5yZW5kZXJlcj1lfXNldExpbmUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJpYW5nbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldENpcmNsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyYXBlem9pZCh0LGUsaSxyKXtsZXQgcz10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpLHIpO3MmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxzKX19O3ZhciBzZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7bGV0IGU9dGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk7cmV0dXJuIGUhPW51bGw/ZTpudWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LEZsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgc2YsdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IE5sKHRoaXMucmVuZGVyQ2FjaGUsdGhpcy5yZW5kZXJlcil9c2V0TGF5b3V0UmVjdCh0KXsodGhpcy5sYXlvdXQueCE9PXQueHx8dGhpcy5sYXlvdXQud2lkdGghPT10LndpZHRofHx0aGlzLmxheW91dC55IT09dC55fHx0aGlzLmxheW91dC5oZWlnaHQhPT10LmhlaWdodCkmJih0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSwhIXRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheShpLnBvaW50cy5sZW5ndGgqMil9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W3Msb109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMl09cyx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVtyKjIrMV09b319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19O3ZhciBMbzsoZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifSkoTG98fChMbz17fSkpO3ZhciB6bD1jbGFzcyBleHRlbmRzIEZse3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6TG8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkxvLk5BTixwb2x5bGluZTplLm1hcCgocixzKT0+aXNOYU4ocik/cyUyPT09MD9pLng6aS55OnIpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtsZXQgZT1bXSxpPTAscj0hMSxzPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksbz17eDpzWzBdLHk6c1sxXX0sYT1udWxsO2ZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCs9Mil7bGV0IGM9dFtsXSx1PXRbbCsxXSxoPWlzTmFOKGMpfHxpc05hTih1KTtoIT09ciYmaSE9PWwmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLGwpLGE9PT1udWxsP3t4OmMseTp1fTphKSksaT1sKSxofHwoYT17eDpjLHk6dX0pLHI9aH1yZXR1cm4gaSE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksdC5sZW5ndGgpLGEhPW51bGw/YTpvKSksZX1yZWRyYXcoKXt2YXIgdCxlLGk7Zm9yKGxldCByIG9mIHRoaXMuc2VyaWVzKXtsZXQgbz10aGlzLmdldE1ldGFkYXRhTWFwKClbci5pZF07aWYoIW8pY29udGludWU7aWYoci5wb2x5bGluZS5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke3IucG9seWxpbmUubGVuZ3RofWApO2xldCBhPXRoaXMucGFydGl0aW9uUG9seWxpbmUoci5wb2x5bGluZSk7Zm9yKGxldFtsLHt0eXBlOmMscG9seWxpbmU6dX1db2YgYS5lbnRyaWVzKCkpaWYoYz09PUxvLk5VTUJFUil1Lmxlbmd0aD09PTI/dGhpcy5wYWludEJydXNoLnNldENpcmNsZShKU09OLnN0cmluZ2lmeShbImNpcmNsZSIsci5pZCxsXSkse3g6dVswXSx5OnVbMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KHQ9by5vcGFjaXR5KSE9bnVsbD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHIuaWQsbF0pLHUse2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooZT1vLm9wYWNpdHkpIT1udWxsP2U6MSx3aWR0aDoyfSk7ZWxzZSBpZighby5hdXgpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsci5pZCx1W2hdLHVbaCsxXV0pLHt4OnVbaF0seTp1W2grMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KGk9by5vcGFjaXR5KSE9bnVsbD9pOjEsc2l6ZToxMn0pfX19O3ZhciBVbD1jbGFzcyBleHRlbmRzIGRye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgVmkoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19O3ZhciBNVD17cmVxdWVzdEFuaW1hdGlvbkZyYW1lOm49PnNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxCbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFRuLlNWRzp7dGhpcy5jb29yZGluYXRvcj1uZXcgZHIsdGhpcy5yZW5kZXJlcj1uZXcgT3ModC5jb250YWluZXIpO2JyZWFrfWNhc2UgVG4uV0VCR0w6e2xldCBlPW5ldyBVbDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgUm8odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgemwoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoZnIodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KE5vKHt4OjAseTowfSx0KSksdGhpcy5yZW5kZXJlci5vblJlc2l6ZShObyh7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh1ZihObyh7fSx0KSx7eDowLHk6MH0pKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldE1ldGFkYXRhKHQpe2xldCBlPSExO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtpLHJdKT0+e2xldCBzPXRoaXMubWV0YWRhdGFNYXBbaV07KCFzfHxyLmNvbG9yIT09cy5jb2xvcnx8ci52aXNpYmxlIT09cy52aXNpYmxlfHxyLm9wYWNpdHkhPT1zLm9wYWNpdHkpJiYoZT0hMCksdGhpcy5tZXRhZGF0YU1hcFtpXT1yfSksZSYmdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRWaWV3Qm94KHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0Vmlld0JveFJlY3Qoe3g6dC54WzBdLHdpZHRoOnQueFsxXS10LnhbMF0seTp0LnlbMF0saGVpZ2h0OnQueVsxXS10LnlbMF19KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldERhdGEodCl7dGhpcy5zZXJpZXNMaW5lVmlldy5zZXREYXRhKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0KSx0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNjaGVkdWxlUmVwYWludCgpe3RoaXMuc2hvdWxkUmVwYWludHx8KHRoaXMuc2hvdWxkUmVwYWludD0hMCxNVC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnJlcGFpbnQoKSx0aGlzLnNob3VsZFJlcGFpbnQ9ITF9KSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX07ZnVuY3Rpb24gejAobil7bGV0e2ZsYXR0ZW5lZFNlcmllczp0LGlkc0FuZExlbmd0aHM6ZX09bixpPW5ldyBGbG9hdDY0QXJyYXkodCkscj1bXTtpZihpLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoImBmbGF0dGVuZWRTZXJpZXNgIG11c3QgaGF2ZSBldmVuIG51bWJlciBvZiBlbGVtZW50cyIpO2xldCBzPTA7Zm9yKGxldHtpZDpvLGxlbmd0aDphfW9mIGUpe2xldCBsPVtdO2ZvcihsZXQgYz0wO2M8YTtjKyspbC5wdXNoKHt4OmlbcysrXSx5OmlbcysrXX0pO3IucHVzaCh7aWQ6byxwb2ludHM6bH0pfXJldHVybiByfXZhciB4bjsoZnVuY3Rpb24obil7bltuLlNFUklFU19EQVRBX1VQREFURUQ9MF09IlNFUklFU19EQVRBX1VQREFURUQiLG5bbi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRD0xXT0iU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQiLG5bbi5TQ0FMRV9VUERBVEVEPTJdPSJTQ0FMRV9VUERBVEVEIixuW24uVklFV19CT1hfVVBEQVRFRD0zXT0iVklFV19CT1hfVVBEQVRFRCIsbltuLklOSVQ9NF09IklOSVQiLG5bbi5ET01fUkVTSVpFRD01XT0iRE9NX1JFU0laRUQiLG5bbi5EQVJLX01PREVfVVBEQVRFRD02XT0iREFSS19NT0RFX1VQREFURUQiLG5bbi5ESVNQT1NFRD03XT0iRElTUE9TRUQifSkoeG58fCh4bj17fSkpO3ZhciBQbzsoZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KShQb3x8KFBvPXt9KSk7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57YlQobi5wb3J0c1swXSxuLmRhdGEpfSk7ZnVuY3Rpb24gYlQobix0KXtsZXR7Y2FudmFzOmUsZGV2aWNlUGl4ZWxSYXRpbzppLGRpbTpyLHJlbmRlcmVyVHlwZTpzLHVzZURhcmtNb2RlOm99PXQsYT17b25EcmF3RW5kOigpPT57bi5wb3N0TWVzc2FnZSh7dHlwZTpQby5PTl9SRURSQVdfRU5EfSl9LG9uQ29udGV4dExvc3Q6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX0NPTlRFWFRfTE9TVH0pfX0sbDtzd2l0Y2gocyl7Y2FzZSBUbi5XRUJHTDpsPXt0eXBlOlRuLldFQkdMLGRvbURpbWVuc2lvbjpyLGNhbGxiYWNrczphLGNvbnRhaW5lcjplLGRldmljZVBpeGVsUmF0aW86aSx1c2VEYXJrTW9kZTpvfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGNhbm5vdCBoYXZlIE9mZnNjcmVlbiBjaGFydCBmb3IgcmVuZGVyZXIgdHlwZTogJHtzfWApfWxldCBjPW5ldyBCbChsKTtuLm9ubWVzc2FnZT1mdW5jdGlvbih1KXtsZXQgaD11LmRhdGE7c3dpdGNoKGgudHlwZSl7Y2FzZSB4bi5TRVJJRVNfREFUQV9VUERBVEVEOntsZXQgZj16MChoLmNvbXBhY3REYXRhU2VyaWVzKTtjLnNldERhdGEoZik7YnJlYWt9Y2FzZSB4bi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRDp7Yy5zZXRNZXRhZGF0YShoLm1ldGFkYXRhKTticmVha31jYXNlIHhuLlZJRVdfQk9YX1VQREFURUQ6e2Muc2V0Vmlld0JveChoLmV4dGVudCk7YnJlYWt9Y2FzZSB4bi5ET01fUkVTSVpFRDp7Yy5yZXNpemUoaC5kaW0pO2JyZWFrfWNhc2UgeG4uREFSS19NT0RFX1VQREFURUQ6e2Muc2V0VXNlRGFya01vZGUoaC51c2VEYXJrTW9kZSk7YnJlYWt9Y2FzZSB4bi5TQ0FMRV9VUERBVEVEOntzd2l0Y2goaC5heGlzKXtjYXNlIngiOmMuc2V0WFNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7Y2FzZSJ5IjpjLnNldFlTY2FsZVR5cGUoaC5zY2FsZVR5cGUpO2JyZWFrO2RlZmF1bHQ6bGV0IGY9aC5heGlzO3Rocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIGF4aXM6ICR7Zn1gKX1icmVha31jYXNlIHhuLkRJU1BPU0VEOntjLmRpc3Bvc2UoKTticmVha319fX19KSgpOwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYXJ0X3dvcmtlci5qcy5tYXAK","headers":[["content-type","text/javascript; charset=utf-8"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/data/environment":{"data":"eyJ2ZXJzaW9uIjogIjIuMTMuMCIsICJkYXRhX2xvY2F0aW9uIjogImxvZ3MiLCAid2luZG93X3RpdGxlIjogIiIsICJleHBlcmltZW50X25hbWUiOiAiIiwgImV4cGVyaW1lbnRfZGVzY3JpcHRpb24iOiAiIiwgImNyZWF0aW9uX3RpbWUiOiAwLjAsICJkZWJ1ZyI6IHsiZGF0YV9wcm92aWRlciI6ICJHcnBjRGF0YVByb3ZpZGVyKGFkZHI9J2xvY2FsaG9zdDozNzUzMScpIiwgImZsYWdzIjogeyJsb2dkaXIiOiAibG9ncyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IG51bGwsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImRldGVjdF9maWxlX3JlcGxhY2VtZW50IjogbnVsbCwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/data/plugins_listing":{"data":"eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkaXN0cmlidXRpb25zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIn19LCAiaGlzdG9ncmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhpc3RvZ3JhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQifX0sICJ0ZXh0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAidGV4dCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtdGV4dC1kYXNoYm9hcmQifX0sICJwcl9jdXJ2ZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQUiBDdXJ2ZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByLWN1cnZlLWRhc2hib2FyZCJ9fSwgInByb2ZpbGVfcmVkaXJlY3QiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQcm9maWxlIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgImhwYXJhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJocGFyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ocGFyYW1zLWRhc2hib2FyZCJ9fSwgIm1lc2giOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJtZXNoIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJtZXNoLWRhc2hib2FyZCJ9fSwgIndpdF9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIldoYXQtSWYgVG9vbCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtd2l0LXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgInByb2plY3RvciI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAicHJvamVjdG9yIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIklGUkFNRSIsICJtb2R1bGVfcGF0aCI6ICIvZGF0YS9wbHVnaW4vcHJvamVjdG9yL2luZGV4LmpzIn19fQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/data/runs":{"data":"WyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF83MzU4NDNfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfNzM1ODQzX0JTMzJfbGRhdGE0MTEyNyIsICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzExOTgzMjhfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfNjgzNDVfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzY4MzQ1X0JTMzJfbGRhdGE0MTEyNyIsICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF84OTk0NTVfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfMTIxMjM1NV9CUzE2X2xkYXRhNDExMjciLCAiZXhwZXJpbWVudGFsX2ludGVyZmFjZV9vcGVuRkxfNDMyMjI5X0JTMTZfbGRhdGE0MTEyNyIsICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzk3MDExMV9CUzEyOF9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzE3MDU2NjhfQlMxMjhfbGRhdGE0MTEyNyJd","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22%7D":{"data":"ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000%7D":{"data":"ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags":{"data":"eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzk3MDExMV9CUzEyOF9sZGF0YTQxMTI3IjogWyJPcmlnaW5hbC90cmFpbi9sb3NzIl0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF8xNzA1NjY4X0JTMTI4X2xkYXRhNDExMjciOiBbIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAiQ29sbF8xL3RyYWluL2xvc3MiLCAiQ29sbF8yL3RyYWluL2xvc3MiXSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAiQ29sbF8xL3RyYWluL2xvc3MiLCAiQ29sbF8yL3RyYWluL2xvc3MiXSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfMTE5ODMyOF9CUzMyX2xkYXRhNDExMjciOiBbIk9yaWdpbmFsL3RyYWluL2xvc3MiXSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfNjgzNDVfQlMzMl9sZGF0YTQxMTI3IjogWyJPcmlnaW5hbC90cmFpbi9sb3NzIl0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzEyMTIzNTVfQlMxNl9sZGF0YTQxMTI3IjogWyJPcmlnaW5hbC90cmFpbi9sb3NzIl0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF80MzIyMjlfQlMxNl9sZGF0YTQxMTI3IjogWyJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90cmFpbi9sb3NzIl19LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaGlzdG9ncmFtcyI6IHsicnVuVGFnSW5mbyI6IHt9LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaW1hZ2VzIjogeyJ0YWdEZXNjcmlwdGlvbnMiOiB7fSwgInRhZ1J1blNhbXBsZWRJbmZvIjoge319fQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Aggregator/train/avg_loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7ImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODQ3MTYuOTI1OTc3NywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjA3ODEyOTE4NzIyNjI5NTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NjAuOTY1MTI3NywgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjAxNTYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODAzLjk3MTk3ODcsICJzdGVwIjogMiwgInZhbHVlIjogMS40NDc4MDgwMDU3NTMzNThlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NDUuOTgxNDY5MiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjA0Njg3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODg4LjcwNzg1NzgsICJzdGVwIjogNCwgInZhbHVlIjogMC4wMTU2MjV9XX19XQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_1/train/loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMS90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF8xNzA1NjY4X0JTMTI4X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODczNjYuNjI3MDI1NCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjUyOTQzOTIxMDg5MTcyMzZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NzM3MS4wMzk3MDU1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjAzMTI3MzYxMDg4OTkxMTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODczNzMuODAxMjk0MywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDIzNDUwMDA1Nzk5NTMxOTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODczOTcuMTQ2MDUxNCwgInN0ZXAiOiAxMjksICJ2YWx1ZSI6IDAuMDM5MDY4Mjg5MTAxMTIzODF9LCB7IndhbGxUaW1lIjogMTY5NTI4NzM5OS43MjExOTc2LCAic3RlcCI6IDE3OSwgInZhbHVlIjogMC4wNTQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MDMuMzMyOTU4MiwgInN0ZXAiOiAyMjksICJ2YWx1ZSI6IDAuMDE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MzQuNDk3MzgwMywgInN0ZXAiOiAyNTgsICJ2YWx1ZSI6IDAuMDQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MzcuMjcxMTUwOCwgInN0ZXAiOiAzMDgsICJ2YWx1ZSI6IDAuMDQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MzkuODg4MzUsICJzdGVwIjogMzU4LCAidmFsdWUiOiAwLjAzOTA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ2My43ODM1NDc0LCAic3RlcCI6IDM4NywgInZhbHVlIjogMC4wMTU2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ2Ny44MTkzODI0LCAic3RlcCI6IDQzNywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NDcxLjYxMzE2NjMsICJzdGVwIjogNDg3LCAidmFsdWUiOiAwLjA1NDY4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ5Ny4yMDA3MTUzLCAic3RlcCI6IDUxNiwgInZhbHVlIjogMC4wNzAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0OTkuNzc0MTI1MywgInN0ZXAiOiA1NjYsICJ2YWx1ZSI6IDAuMDM5MDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NTAzLjM0OTgwODcsICJzdGVwIjogNjE2LCAidmFsdWUiOiAwLjAzOTA2MjV9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODQ2ODUuODM3Njc5NiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjU0Mzk3MTAwMjEwMTg5ODJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDY4Ni45MDQ1NzY4LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA2MjU1NjI0NDQzMjkyNjE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2ODcuOTEwNTI0OCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDMxMjczNTIxNDgyOTQ0NDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDY4OC45MzgwNjkzLCAic3RlcCI6IDE1MCwgInZhbHVlIjogMC4wMzEyNTg2MDU0MjA1ODk0NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Njg5Ljk0NTE3MTYsICJzdGVwIjogMjAwLCAidmFsdWUiOiA0LjQxNDcxNjM4NjIzNjI1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NjkwLjk3NjY1OTgsICJzdGVwIjogMjUwLCAidmFsdWUiOiAwLjAzMTI3MDQ4OTA5NjY0MTU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2OTIuMTM3MTgzNCwgInN0ZXAiOiAzMDAsICJ2YWx1ZSI6IDguNTk2NDc3NTI4MDQ0NDg4ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NjkzLjYwOTAxMzgsICJzdGVwIjogMzUwLCAidmFsdWUiOiAwLjAzMTI2NTAwMTc0NDAzMTkwNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Njk1LjE0OTkwMTksICJzdGVwIjogNDAwLCAidmFsdWUiOiAzLjUxNDA4MTA3MjM1MzI5MjNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2OTYuNzIzMjg0NSwgInN0ZXAiOiA0NTAsICJ2YWx1ZSI6IDAuMDMxMjUyMjE2NTQ3NzI3NTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2OTguNDU3MzQzMywgInN0ZXAiOiA1MDAsICJ2YWx1ZSI6IDAuMDkzNzU3NzkzMzA3MzA0Mzh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcyNi41MzMzNzAzLCAic3RlcCI6IDUxNSwgInZhbHVlIjogMC4wMzEyNjI2MzYxODQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzI3LjcxMjIxOTcsICJzdGVwIjogNTY1LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MjguNjg1MzksICJzdGVwIjogNjE1LCAidmFsdWUiOiA0LjY4NzMyMTA4NjgyNzAxMmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcyOS42ODM2ODcsICJzdGVwIjogNjY1LCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MzAuODUzNDM3LCAic3RlcCI6IDcxNSwgInZhbHVlIjogMy40NzkzNDI2ODIwMjIzMjRlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MzMuMDExOTAyNiwgInN0ZXAiOiA3NjUsICJ2YWx1ZSI6IDQuMzQzNzQ2NDczNjIyOTAwM2UtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NDczNS44OTIyODIsICJzdGVwIjogODE1LCAidmFsdWUiOiA4LjUwOTQ2ODY4NTI0NzE1N2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDczNy41OTU1NjU2LCAic3RlcCI6IDg2NSwgInZhbHVlIjogMC4wMzEyNTAwNTk2MDQ2NDQ3NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDczOS4zMDYyMDk4LCAic3RlcCI6IDkxNSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzQwLjk3MjIxNDIsICJzdGVwIjogOTY1LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0Mi4yNDc4NTE2LCAic3RlcCI6IDEwMTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc2OS4yMTE4NTA2LCAic3RlcCI6IDEwMzAsICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3MC4yNDAyMjk4LCAic3RlcCI6IDEwODAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3MS4zNzUyODkyLCAic3RlcCI6IDExMzAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3My4xNjE2MTc1LCAic3RlcCI6IDExODAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Nzc0Ljg3MzY2OTksICJzdGVwIjogMTIzMCwgInZhbHVlIjogOC40MTk1NDk3Nzk1OTI0NzJlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NzYuNTIxNzMyLCAic3RlcCI6IDEyODAsICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3OC4zNTY4MzgyLCAic3RlcCI6IDEzMzAsICJ2YWx1ZSI6IDkuNDg5ODg0NzM1MjQxMzQ0ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzgwLjE5NTc3MywgInN0ZXAiOiAxMzgwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODEuNzgwNjcxNiwgInN0ZXAiOiAxNDMwLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc4Mi45MzY0NTA1LCAic3RlcCI6IDE0ODAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc4My45NDg4NDA0LCAic3RlcCI6IDE1MzAsICJ2YWx1ZSI6IDEuNDYzOTE0MDE5NjA4MDQzMmUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxMC43NzUxNTM0LCAic3RlcCI6IDE1NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxMi4xNTA0NjM4LCAic3RlcCI6IDE1OTUsICJ2YWx1ZSI6IDIuNjk0MjU4MjgwNDk0MjM5NWUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxMy43Mzg2NTMyLCAic3RlcCI6IDE2NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxNS4zODAxMjU1LCAic3RlcCI6IDE2OTUsICJ2YWx1ZSI6IDUuNTUzMzA1OTczODQzODU2ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODE3LjA0NzI4MywgInN0ZXAiOiAxNzQ1LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4MTguODc4NDQ3MywgInN0ZXAiOiAxNzk1LCAidmFsdWUiOiAyLjEwNzU5ODgxNDMwMjkzOGUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgyMC42OTYyMTU2LCAic3RlcCI6IDE4NDUsICJ2YWx1ZSI6IDEuNzAzMjYwMDk4MzM3ODY3MmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgyMi4yMDMxOTY1LCAic3RlcCI6IDE4OTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgyMy4zNjM1MjU0LCAic3RlcCI6IDE5NDUsICJ2YWx1ZSI6IDIuMjc5NDEzNzMwMTgxMDc5ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODI0LjU0NDk5ODIsICJzdGVwIjogMTk5NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODI1LjY5MTExMDEsICJzdGVwIjogMjA0NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODUzLjQ0Mjk4OTYsICJzdGVwIjogMjA2MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODU1LjEyNDMxOTgsICJzdGVwIjogMjExMCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODU2LjcxNTU4ODgsICJzdGVwIjogMjE2MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NTguMzM0NDMyNiwgInN0ZXAiOiAyMjEwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NjAuMDAzNDQ5NywgInN0ZXAiOiAyMjYwLCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NjEuNzEyOTQyMSwgInN0ZXAiOiAyMzEwLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg2Mi45NzM4NDEsICJzdGVwIjogMjM2MCwgInZhbHVlIjogMi4zNzM2OTgzOTY5MDgwNTM2ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODY0LjAzMjIzMzUsICJzdGVwIjogMjQxMCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODY1LjE3MjQzNSwgInN0ZXAiOiAyNDYwLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg2Ni4yNDQyMjgxLCAic3RlcCI6IDI1MTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg2Ny40MDE5ODczLCAic3RlcCI6IDI1NjAsICJ2YWx1ZSI6IDAuMDMxMjV9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzQzMjIyOV9CUzE2X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODYzMTcuMjE2ODg1OCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQyMjY2OTU1OTcxNzE3ODM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMTcuOTg2MjAyNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMi42NjMwNjIzMzI0MzA4NTQ0ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzE4Ljc2MDQwNTgsICJzdGVwIjogMTAwLCAidmFsdWUiOiAzLjYyMzM1NTU4NzQ3ODcyN2UtMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMxOS41ODEyOTkzLCAic3RlcCI6IDE1MCwgInZhbHVlIjogMS45NzQ0MDgyMjM3NTkzODNlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjAuMzkwMDE1OCwgInN0ZXAiOiAyMDAsICJ2YWx1ZSI6IDAuMDYyNTEyMTM2OTk1NzkyMzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMyMS4xNzY1MTU4LCAic3RlcCI6IDI1MCwgInZhbHVlIjogNS40MDQzNTc5MjExNzkzMjZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjEuOTY5MTk5NCwgInN0ZXAiOiAzMDAsICJ2YWx1ZSI6IDMuNjM2MDEyMDI0Nzk5MTI5ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzIyLjgyMzAyNjIsICJzdGVwIjogMzUwLCAidmFsdWUiOiAwLjEyNTAwMTI5NjQwMTAyMzg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjMuNjMxNzYyMywgInN0ZXAiOiA0MDAsICJ2YWx1ZSI6IDAuMTI1MDEzODEzMzc2NDI2N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzI0LjUwMTg1MjgsICJzdGVwIjogNDUwLCAidmFsdWUiOiAyLjAzOTA5NDg1MjA3OTg3ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzI1LjQ2MzYzNzgsICJzdGVwIjogNTAwLCAidmFsdWUiOiAxLjE1NjEzNzM4NjcxNTI3MjRlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjYuNTgxOTMyOCwgInN0ZXAiOiA1NTAsICJ2YWx1ZSI6IDQuOTMwMzA0Mzg1MTk3ODE0NmUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMyNy43Njk3NTU2LCAic3RlcCI6IDYwMCwgInZhbHVlIjogMS4yMjA0MTIyODY3ODQyNjdlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjkuMDg4MzU3NCwgInN0ZXAiOiA2NTAsICJ2YWx1ZSI6IDEuMDM0NjE4MDk0MzA4ODI1N2UtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMzMC40MzYzMjY1LCAic3RlcCI6IDcwMCwgInZhbHVlIjogMC4wNjI1MDI2MDc3MDMyMDg5Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzMxLjgxMjg5MzYsICJzdGVwIjogNzUwLCAidmFsdWUiOiAwLjA2MjUwMTY4MzgzMTIxNDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMzMy4yMDYwNzE5LCAic3RlcCI6IDgwMCwgInZhbHVlIjogOC4yNjg1MTc2MDM5Mzc2NTNlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMzQuNDYyMjk5NiwgInN0ZXAiOiA4NTAsICJ2YWx1ZSI6IDEuNjE4MDM5OTU5Nzk0MjU5NmUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMzNS41MjAxNzgzLCAic3RlcCI6IDkwMCwgInZhbHVlIjogOC40Mjc4ODgzNjA1MjkzMjNlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMzYuNDcwMzQzLCAic3RlcCI6IDk1MCwgInZhbHVlIjogMC4wNjI1MDAxNTY0NjIxOTI1NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzM3LjI5MDEwOSwgInN0ZXAiOiAxMDAwLCAidmFsdWUiOiAwLjA2MjUwMDI5MDU3MjY0MzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNzYuMTIzMjMsICJzdGVwIjogMTAyOSwgInZhbHVlIjogNC41MzczOTI2Njk1OTAxOWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM3Ni45NTY3MDQ5LCAic3RlcCI6IDEwNzksICJ2YWx1ZSI6IDUuOTY4NzA3NDcyNzE0Mzg1ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzc3Ljg0NDc4ODgsICJzdGVwIjogMTEyOSwgInZhbHVlIjogMS43NDUzODc2ODg1NDUzNzQ1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzc4LjcwOTE4NjMsICJzdGVwIjogMTE3OSwgInZhbHVlIjogMi40ODE2MTQzOTMxNDYwOTJlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNzkuNTM5Njk5OCwgInN0ZXAiOiAxMjI5LCAidmFsdWUiOiAxLjAyMjM0NzAyOTA4MjM4MjJlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODAuMjgzODc2NywgInN0ZXAiOiAxMjc5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM4MS4wMTY1NTQ4LCAic3RlcCI6IDEzMjksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzgxLjc2NjY5NDMsICJzdGVwIjogMTM3OSwgInZhbHVlIjogNi41MDAxOTg4MTY3MDU3MTZlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODIuNTE2MTM5MywgInN0ZXAiOiAxNDI5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM4My4yNTIyNDI4LCAic3RlcCI6IDE0NzksICJ2YWx1ZSI6IDcuODA0ODA0MDM5MTgyMjc1ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzg0LjAxNTIwOSwgInN0ZXAiOiAxNTI5LCAidmFsdWUiOiAwLjE4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM4NC43OTY1NTQzLCAic3RlcCI6IDE1NzksICJ2YWx1ZSI6IDEuNTcyMTQyNjk4MTQzMjY0ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzg1Ljg2NDE5NTgsICJzdGVwIjogMTYyOSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODcuMDM2NTU1OCwgInN0ZXAiOiAxNjc5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzg4LjMwMzA3NTYsICJzdGVwIjogMTcyOSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODkuNDY5NjQ5LCAic3RlcCI6IDE3NzksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzkwLjY2ODgzOSwgInN0ZXAiOiAxODI5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM5Mi4wMTAxNzY0LCAic3RlcCI6IDE4NzksICJ2YWx1ZSI6IDIuMzI2NjIzODY1MzU1NjIwNGUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM5My41OTYwNzEsICJzdGVwIjogMTkyOSwgInZhbHVlIjogMS4wNjIzNTQyNzg5ODI0Nzc1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzk1LjUzOTMyMDUsICJzdGVwIjogMTk3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzOTYuOTg5MjM5LCAic3RlcCI6IDIwMjksICJ2YWx1ZSI6IDMuMTc4NDg5Nzc5MzE5MDQ2NGUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0MC4yNDMzMjcsICJzdGVwIjogMjA1OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDEuMDA0MTI0OSwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiAzLjI1NDc2NDUxMzQ2MDYyODVlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDEuNzc3MzU2OSwgInN0ZXAiOiAyMTU4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0Mi41MzExNzMyLCAic3RlcCI6IDIyMDgsICJ2YWx1ZSI6IDEuMjE3NDc2MDMwNDcyMzkwNmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0My4zMzg5OTY0LCAic3RlcCI6IDIyNTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDQ0LjE3NjMxMDUsICJzdGVwIjogMjMwOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDQuOTM0NTYxNSwgInN0ZXAiOiAyMzU4LCAidmFsdWUiOiAyLjczMzAzMTA4NjU5OTg2M2UtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0NS44NjMwMzczLCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDQ3LjEwNDQ1NzQsICJzdGVwIjogMjQ1OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDguMzQ5MTU5LCAic3RlcCI6IDI1MDgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDkuNjQ0OTY0NywgInN0ZXAiOiAyNTU4LCAidmFsdWUiOiAyLjU3NDQ5OTA0NDkzOTAzMjZlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTAuOTQyODQ3LCAic3RlcCI6IDI2MDgsICJ2YWx1ZSI6IDEuOTg1OTQ2OTk3MTI5NTA2M2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ1Mi4xNzg0MDA4LCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDUzLjU5Mjk0NjUsICJzdGVwIjogMjcwOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTUuMDAxMzY0NywgInN0ZXAiOiAyNzU4LCAidmFsdWUiOiA3LjI3MjA4MDc1MTE2MDEwN2UtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ1Ni4zNzIzNDcsICJzdGVwIjogMjgwOCwgInZhbHVlIjogMy43OTg4ODc3MTEyOTM5NjU1ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDU3LjI2MTIzMzMsICJzdGVwIjogMjg1OCwgInZhbHVlIjogMy4xNzQ0Njk5NjQyMzkyODVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTguMjg0MTA2LCAic3RlcCI6IDI5MDgsICJ2YWx1ZSI6IDMuMDQxMDQ2MTQ3NTM5NDE3ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDU5LjA0NzIzNDgsICJzdGVwIjogMjk1OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTkuNzgxMTM4MiwgInN0ZXAiOiAzMDA4LCAidmFsdWUiOiA0LjMxMDg5MjQ2MzMxMjAxMDVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NjAuNTU5MjI3LCAic3RlcCI6IDMwNTgsICJ2YWx1ZSI6IDIuODEwMzA0NjE0ODg3NzkzZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDk4LjYyMjU4NDMsICJzdGVwIjogMzA4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0OTkuNDQxOTY5NiwgInN0ZXAiOiAzMTM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwMC4zNDA5Njc0LCAic3RlcCI6IDMxODcsICJ2YWx1ZSI6IDUuOTAyMTU4MDAxOTQ3OTc3ZS0xN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTAxLjI2OTA0OTIsICJzdGVwIjogMzIzNywgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwMi4xNjc0MywgInN0ZXAiOiAzMjg3LCAidmFsdWUiOiAwLjE4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwMy4xMTQzNjQ0LCAic3RlcCI6IDMzMzcsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MDMuOTIyMTkxOSwgInN0ZXAiOiAzMzg3LCAidmFsdWUiOiA5Ljk2MjM3OTA2NzkyMjYzOGUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwNC43ODI1OTc4LCAic3RlcCI6IDM0MzcsICJ2YWx1ZSI6IDIuMTAxMDQ0MjE5MjQ3MmUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwNS42NTE5MjIsICJzdGVwIjogMzQ4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MDYuODI1OTk2NCwgInN0ZXAiOiAzNTM3LCAidmFsdWUiOiA3Ljg0OTQ2MDY3NDk1MjcwNmUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwOC4wMzQ5NDE0LCAic3RlcCI6IDM1ODcsICJ2YWx1ZSI6IDIuNTk2NjQyMzQ5NjUyNzQ0ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTA5LjI1ODIwOTIsICJzdGVwIjogMzYzNywgInZhbHVlIjogNS4wMjA0NTgxMjk2MjY3OTRlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MTAuNDI4NDk4NSwgInN0ZXAiOiAzNjg3LCAidmFsdWUiOiAxLjIwNDAyMjA3Njc3NTU1ODVlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MTEuNjMyOTgyNywgInN0ZXAiOiAzNzM3LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTEyLjkxMDkwNjgsICJzdGVwIjogMzc4NywgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUxNC4zODYwMTQ1LCAic3RlcCI6IDM4MzcsICJ2YWx1ZSI6IDguMTA1NDY0MjA3MTYxNzAxZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTE1Ljc0MDgxNiwgInN0ZXAiOiAzODg3LCAidmFsdWUiOiAzLjU4MjA5NTE4NzA5Nzk0MzdlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MTYuNzM1MzQzNywgInN0ZXAiOiAzOTM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUxNy41MzMyMjc3LCAic3RlcCI6IDM5ODcsICJ2YWx1ZSI6IDEuMTk3NDkyMjk5Nzg1MTc1ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTE4LjM4NTU2NCwgInN0ZXAiOiA0MDM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUxOS4xNjY1ODQzLCAic3RlcCI6IDQwODcsICJ2YWx1ZSI6IDEuNTA2MTkyMzk4NjIwODIwOGUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU1OC43MDMwMjA4LCAic3RlcCI6IDQxMTYsICJ2YWx1ZSI6IDIuNzE4MTQyNDU4OTM3MjE4MmUtMTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU1OS41MDM1MDI0LCAic3RlcCI6IDQxNjYsICJ2YWx1ZSI6IDQuNjE1NTcxNDY4MDQ4MTQ0ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTYwLjM4NTY0NTksICJzdGVwIjogNDIxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjEuMjYwOTI0LCAic3RlcCI6IDQyNjYsICJ2YWx1ZSI6IDEuMTI4Mjg5NzA3OTk0NDk4N2UtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2Mi4xMDM0NSwgInN0ZXAiOiA0MzE2LCAidmFsdWUiOiAyLjUwODg5OTc1NDYxNjMyM2UtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2Mi44NjkxNjIzLCAic3RlcCI6IDQzNjYsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjMuNzU3NjUwNCwgInN0ZXAiOiA0NDE2LCAidmFsdWUiOiAxLjM5NjQzNjcyODA1MTgwNTVlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjQuNTMxMTM1LCAic3RlcCI6IDQ0NjYsICJ2YWx1ZSI6IDIuNjg1MzQxMzUyOTAwMjU2N2UtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2NS4zODkyOTkyLCAic3RlcCI6IDQ1MTYsICJ2YWx1ZSI6IDguNTIwNTk5ODYxNTIzMDFlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjYuNTk3MDcxNiwgInN0ZXAiOiA0NTY2LCAidmFsdWUiOiA4LjA3MDk2MTcwOTcxODcyNmUtMTh9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2Ny43NjI0NjE3LCAic3RlcCI6IDQ2MTYsICJ2YWx1ZSI6IDguMDI1MDcyNzA3MTg0NDllLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjkuMDk2MDU1MywgInN0ZXAiOiA0NjY2LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTcwLjI1MzM2NzcsICJzdGVwIjogNDcxNiwgInZhbHVlIjogMi4wMTIxNjIyMDU3MjE5NTk1ZS0xOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTcxLjUzMzA3OTksICJzdGVwIjogNDc2NiwgInZhbHVlIjogNi44NjQwNTEzNTE3MTU4NmUtMjB9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU3Mi43NzA3MDIsICJzdGVwIjogNDgxNiwgInZhbHVlIjogMS4zNTE4NDQ0MjQ0MzM3MTg3ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTc0LjE1NzYyMTYsICJzdGVwIjogNDg2NiwgInZhbHVlIjogMy4xMzE3ODE4OTk3NDIxMTc3ZS0xN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTc1LjY1NDE5NTUsICJzdGVwIjogNDkxNiwgInZhbHVlIjogMS4xODA4Mjk3MDU4NzQ4MDVlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NzYuNTM3MTM3NywgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAyLjAwMjk5NTE4ODU0ODM3MjZlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NzcuMzYwMTg1OSwgInN0ZXAiOiA1MDE2LCAidmFsdWUiOiA3LjU3ODk5NjcwMjE0NzMwM2UtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU3OC4yMzcxODIsICJzdGVwIjogNTA2NiwgInZhbHVlIjogMi40MDQ4MzE4ODY5Nzc3NzM0ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTc4Ljk5NDAxODMsICJzdGVwIjogNTExNiwgInZhbHVlIjogMy40NjI2NzcwNDExMjI2ODRlLTE1fV19fV0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_2/train/loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMi90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF8xNzA1NjY4X0JTMTI4X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODczNzYuOTQ2MDk3MSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjUwNzc0NzA1NDEwMDAzNjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NzM3OS43OTI5MzkyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjAyMzQ1MTI3Nzk4NjE2ODg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODczODMuNTE5OTQ5NywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDIzNDQzNDc1MzY1NjM4NzMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MDguMDYzMjUyMiwgInN0ZXAiOiAxMjksICJ2YWx1ZSI6IDAuMDMxMjY4OTk1MjU1MjMxODZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQxMS41ODU0OTM4LCAic3RlcCI6IDE3OSwgInZhbHVlIjogMC4wMjM0Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MTUuMTU0MzcwMywgInN0ZXAiOiAyMjksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ0My45MDE3NDAzLCAic3RlcCI6IDI1OCwgInZhbHVlIjogMC4wMzkwNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0NDguMDE2ODQwNywgInN0ZXAiOiAzMDgsICJ2YWx1ZSI6IDAuMDE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0NTIuMDc5MTMsICJzdGVwIjogMzU4LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0NzQuOTAyNDI4NCwgInN0ZXAiOiAzODcsICJ2YWx1ZSI6IDAuMDU0Njg3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NDc5LjkwNjE0NywgInN0ZXAiOiA0MzcsICJ2YWx1ZSI6IDAuMDE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0ODMuMzU3ODAzMywgInN0ZXAiOiA0ODcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NTA3LjkzMzQ2MTIsICJzdGVwIjogNTE2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc1MTEuNjc1MTExNSwgInN0ZXAiOiA1NjYsICJ2YWx1ZSI6IDAuMDM5MDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NTE0LjQ5MzMwNzYsICJzdGVwIjogNjE2LCAidmFsdWUiOiAwLjAwNzgxMjV9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDEuNzcwNDMxMywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjUwNTYzNTM4MDc0NDkzNDF9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcwMi45NTAzNDk4LCAic3RlcCI6IDUwLCAidmFsdWUiOiAyLjg5ODk4NjUzMTM2MzMzNDVlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDQuMTMyODE5NCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDMxMjUxMzAwMTI2MzE0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcwNS4zMTUwMTgyLCAic3RlcCI6IDE1MCwgInZhbHVlIjogMi4xMTg5MDgzNzgxNzkxODVlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDYuMzE4MjQxOCwgInN0ZXAiOiAyMDAsICJ2YWx1ZSI6IDAuMTI0OTg3NjE3MTM1MDQ3OTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcwNy4zNDQzOTU5LCAic3RlcCI6IDI1MCwgInZhbHVlIjogMC4wOTM3NjA2OTE1ODMxNTY1OX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzA4LjQ5OTA3NjYsICJzdGVwIjogMzAwLCAidmFsdWUiOiAwLjA2MjUwMTYwOTMyNTQwODk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDkuNTEyNTA4LCAic3RlcCI6IDM1MCwgInZhbHVlIjogMi44NjE4NjU1OTYwNTk5NDI2ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzEwLjUxNzE1MjgsICJzdGVwIjogNDAwLCAidmFsdWUiOiAwLjA2MjUxNDE0ODY1MjU1MzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MTEuNTgwNjQ1LCAic3RlcCI6IDQ1MCwgInZhbHVlIjogMC4wNjI1MDg4NjYxOTA5MTAzNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzEzLjMzMjk1NywgInN0ZXAiOiA1MDAsICJ2YWx1ZSI6IDAuMDYyNTAwNTg4NTk1ODY3MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0NC41Njg0MDQyLCAic3RlcCI6IDUxNSwgInZhbHVlIjogMC4wNjI1MDY3NTc2NzY2MDE0MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzQ1LjU1ODIxMzcsICJzdGVwIjogNTY1LCAidmFsdWUiOiAxLjkwOTQxMzA0NDM0MzExMTJlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NDYuNTQ2NDgwNywgInN0ZXAiOiA2MTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0Ny41NDc1ODEsICJzdGVwIjogNjY1LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0OC41NTUxMjE3LCAic3RlcCI6IDcxNSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NDkuNTI5NjA5NywgInN0ZXAiOiA3NjUsICJ2YWx1ZSI6IDEuMTk3MzQ5NzE5MzcyOTA4OGUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc1MC41MDYzMjg4LCAic3RlcCI6IDgxNSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NTEuNjE0MTg1OCwgInN0ZXAiOiA4NjUsICJ2YWx1ZSI6IDUuNTc3ODg5NzEyNjE1NzQ3ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzUzLjIyMDE0MzgsICJzdGVwIjogOTE1LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NTQuODM4MjkxNiwgInN0ZXAiOiA5NjUsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzU2LjU0MzU5OSwgInN0ZXAiOiAxMDE1LCAidmFsdWUiOiA0LjQyMTMxOTg3NzU5NTAxMDVlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODYuMzQ2NjA4MiwgInN0ZXAiOiAxMDMwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODcuMzQ2NzIyNCwgInN0ZXAiOiAxMDgwLCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODguMzQyNzAyMiwgInN0ZXAiOiAxMTMwLCAidmFsdWUiOiAyLjU3NDc2MzA0ODE2ODAzM2UtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc4OS4zMTg3MDIsICJzdGVwIjogMTE4MCwgInZhbHVlIjogOC4xMDQyMDU3ODMwMTc0NmUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc5MC4zMTg3NiwgInN0ZXAiOiAxMjMwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3OTEuNDc1MDE4LCAic3RlcCI6IDEyODAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc5My4xMDI1Njk2LCAic3RlcCI6IDEzMzAsICJ2YWx1ZSI6IDcuMzU2MzY1MTAzMzg5ODI1ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Nzk0Ljc5NzA5NDMsICJzdGVwIjogMTM4MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3OTYuNTA0NTQ2MiwgInN0ZXAiOiAxNDMwLCAidmFsdWUiOiAyLjgyNzcyODAxNDg1MDE3ODJlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3OTguMzAzMDEyLCAic3RlcCI6IDE0ODAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODAwLjA0NjMwNzYsICJzdGVwIjogMTUzMCwgInZhbHVlIjogMi43NDkyMjQ0OTMwNzg4ODEzZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODI4LjA4MTAxOTQsICJzdGVwIjogMTU0NSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4MjkuMjY1NzI2OCwgInN0ZXAiOiAxNTk1LCAidmFsdWUiOiA5Ljc2MDI3NTkyMDgxMTUyM2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzMC4yOTQ1NjIzLCAic3RlcCI6IDE2NDUsICJ2YWx1ZSI6IDIuNjIzMTg2MzkwMzI2OTkyNWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzMS4zMzE4ODY1LCAic3RlcCI6IDE2OTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzMi44NTQ1MjUzLCAic3RlcCI6IDE3NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzNC41NTA2NjA4LCAic3RlcCI6IDE3OTUsICJ2YWx1ZSI6IDEuMzMyNzg1MDY1MDM3MDA2NmUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzNi4yNTM2Mzg1LCAic3RlcCI6IDE4NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzOC4wMjkxOTI0LCAic3RlcCI6IDE4OTUsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODM5Ljc5ODY4NTYsICJzdGVwIjogMTk0NSwgInZhbHVlIjogMS4yMzAwMDAzNjU1MDk2MTFlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NDEuNTUyMDUsICJzdGVwIjogMTk5NSwgInZhbHVlIjogMS4zMDM3Mzk3MjkyOTMyNTI1ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODQyLjg0MDEyODIsICJzdGVwIjogMjA0NSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NjkuOTQ3MzY4LCAic3RlcCI6IDIwNjAsICJ2YWx1ZSI6IDQuODI0NTQxODA3NzI0MTgxZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODcxLjEyNDM4ODcsICJzdGVwIjogMjExMCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODcyLjI2MDgwMTMsICJzdGVwIjogMjE2MCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODczLjg5MTg5NjIsICJzdGVwIjogMjIxMCwgInZhbHVlIjogMi40NDk0MDYzMDI3ODQ2NzM1ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODc1LjU3NzQ4MiwgInN0ZXAiOiAyMjYwLCAidmFsdWUiOiA0LjYzNTQ3MjkzMDY2MDM1OGUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg3Ny4zMDQ5Mzk1LCAic3RlcCI6IDIzMTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg3OS4wMjAxMTMsICJzdGVwIjogMjM2MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODgwLjg1MDI3NCwgInN0ZXAiOiAyNDEwLCAidmFsdWUiOiA1LjU5MDU3MDk3NjYwMDA3MmUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg4Mi41MTYyMDI3LCAic3RlcCI6IDI0NjAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg4My42NTgyNDM3LCAic3RlcCI6IDI1MTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg4NC43MTEyNDEsICJzdGVwIjogMjU2MCwgInZhbHVlIjogMy4yNzU5NTE4MDQyNzQwMjZlLTE2fV0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF80MzIyMjlfQlMxNl9sZGF0YTQxMTI3IjogW3sid2FsbFRpbWUiOiAxNjk1Mjg2MzQwLjc1OTAxMDMsICJzdGVwIjogMCwgInZhbHVlIjogMC40MTU4Nzg5MjE3NDcyMDc2NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQxLjUxMzcwNTMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMDYyNTM0OTUwNjczNTgwMTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM0Mi4zNjYxOTksICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjA2MjUwNTYxMDI4NzE4OTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNDMuMTYwNzYzNywgInN0ZXAiOiAxNTAsICJ2YWx1ZSI6IDIuODk1NzY0NzM3MzMxNzc0ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQzLjk2NTIzMTIsICJzdGVwIjogMjAwLCAidmFsdWUiOiAwLjA2MjUwMDk5MDkyNzIxOTM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNDQuODA3ODg2OCwgInN0ZXAiOiAyNTAsICJ2YWx1ZSI6IDAuMDYyNTE5ODg1NTk5NjEzMTl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM0NS43MjAzODY1LCAic3RlcCI6IDMwMCwgInZhbHVlIjogMC4wNjI1MDE4MzI4NDI4MjY4NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQ2Ljg1NDI5NjIsICJzdGVwIjogMzUwLCAidmFsdWUiOiAyLjM2MDY2OTQ0MTI1OTIzMzNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNDguMTM4MDM1LCAic3RlcCI6IDQwMCwgInZhbHVlIjogMC4wNjI1MDE4NzAwOTU3Mjk4M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQ5LjM1NDYwMDIsICJzdGVwIjogNDUwLCAidmFsdWUiOiAwLjA2MjUwMTYyNDIyNjU3MDEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNTAuNjIxMTk3NSwgInN0ZXAiOiA1MDAsICJ2YWx1ZSI6IDEuMDM2Njg0NjI1NDMyODI2NmUtMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM1MS45NDQ4MzIsICJzdGVwIjogNTUwLCAidmFsdWUiOiAwLjA2MjUwMTUzNDgxOTYwMjk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNTMuMjMxOTE0LCAic3RlcCI6IDYwMCwgInZhbHVlIjogMS42ODkxNDQ1OTY2MzkzODAzZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU0LjYyMzAwMzcsICJzdGVwIjogNjUwLCAidmFsdWUiOiAxLjQ5ODgwNTg4NjUxMjg1NWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM1NS43OTA4MDYzLCAic3RlcCI6IDcwMCwgInZhbHVlIjogMC4wNjI1MDkwMDc3NTE5NDE2OH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU2LjYzNTA5NTgsICJzdGVwIjogNzUwLCAidmFsdWUiOiAxLjU5NDgzNDMxNjE2NTM2MWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM1Ny40MDMyNjUyLCAic3RlcCI6IDgwMCwgInZhbHVlIjogNC41Mzk0Nzc2ODYxOTQwMDQ1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU4LjE1NjA4MiwgInN0ZXAiOiA4NTAsICJ2YWx1ZSI6IDkuODM3ODk4Njg3NjkyMzU5ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU4LjkxMjIzNjUsICJzdGVwIjogOTAwLCAidmFsdWUiOiAyLjYwMzkwMjA4OTUwNDExNzZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNTkuNzc5NjkxMiwgInN0ZXAiOiA5NTAsICJ2YWx1ZSI6IDEuNDAxMTQ4MzUyODk3NTA3N2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM2MC42NTMzOTMzLCAic3RlcCI6IDEwMDAsICJ2YWx1ZSI6IDEuNTEyNDU2ODMzNTUyMjc4MWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQwMi4yMjUzODgzLCAic3RlcCI6IDEwMjksICJ2YWx1ZSI6IDQuOTAxMjI1NDUyMTU4NTQyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDAzLjU4NTI2NjQsICJzdGVwIjogMTA3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MDQuNjkwNjI2LCAic3RlcCI6IDExMjksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDA1LjQ2ODczNzgsICJzdGVwIjogMTE3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MDYuMjA5NzgyOCwgInN0ZXAiOiAxMjI5LCAidmFsdWUiOiA1LjMzMjkxOTUyMjY0OTI0OWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQwNy4zNTkxMjkyLCAic3RlcCI6IDEyNzksICJ2YWx1ZSI6IDcuNjkzNzkyOTc2ODQ2OTY5ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDA4LjU1MjczNTMsICJzdGVwIjogMTMyOSwgInZhbHVlIjogMi4zODM1NjQyNjYxMDA3NTcyZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDA5LjYzNjc5NSwgInN0ZXAiOiAxMzc5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDEwLjg1MzQ1NzUsICJzdGVwIjogMTQyOSwgInZhbHVlIjogNS4xNjM2ODMwMjI4MzUyMDhlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTIuMDg2ODc2NiwgInN0ZXAiOiAxNDc5LCAidmFsdWUiOiAxLjc0NzI1MDQzNDYxMzg3ODRlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTMuNDQyMDMwMiwgInN0ZXAiOiAxNTI5LCAidmFsdWUiOiAyLjA1MzE4NDQ0NTM3NzQ5ODNlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTQuODY1MDM2NSwgInN0ZXAiOiAxNTc5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQxNi4wNzQ4MzI0LCAic3RlcCI6IDE2MjksICJ2YWx1ZSI6IDIuOTM5MDQ0MTQ2OTQzNDU5ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDE3LjAzMTE4NTIsICJzdGVwIjogMTY3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTcuODE3NzYyNCwgInN0ZXAiOiAxNzI5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDE4LjYwMDIzNTcsICJzdGVwIjogMTc3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTkuNDYyNjAwNywgInN0ZXAiOiAxODI5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDIwLjM0OTUxOTMsICJzdGVwIjogMTg3OSwgInZhbHVlIjogMC4xODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MjEuMTkyNDYyNywgInN0ZXAiOiAxOTI5LCAidmFsdWUiOiAxLjY0Njg2Mzk2MDMwNzA1NDVlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MjIuMDczOTc5MSwgInN0ZXAiOiAxOTc5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDIyLjk2OTY5OCwgInN0ZXAiOiAyMDI5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ2NC4wMjgzNTQsICJzdGVwIjogMjA1OCwgInZhbHVlIjogMS42MzgxNDc5NTU3MDQ0MjRlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NjQuODUyMTM3OCwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiA2LjUzNDY3NjkwNjU3NjY3OGUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ2NS42NjcyMzg1LCAic3RlcCI6IDIxNTgsICJ2YWx1ZSI6IDcuNTc0ODM2NDgyODg2MjA1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDY2LjQzMDI2MzgsICJzdGVwIjogMjIwOCwgInZhbHVlIjogMy4zNzg1MzY1OTk3OTA3MDQ2ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDY3LjU0NTI5NSwgInN0ZXAiOiAyMjU4LCAidmFsdWUiOiAxLjQ1MTY4MjU0NjIxMjMzNmUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ2OC44MjM0Mjc3LCAic3RlcCI6IDIzMDgsICJ2YWx1ZSI6IDYuMjQ0OTEzNzExNTg0NTZlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NzAuMDI1MzY0NCwgInN0ZXAiOiAyMzU4LCAidmFsdWUiOiA1LjQyNTM2ODQyMzQyNDY3MmUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3MS4yNDA1MzcyLCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDEuMTYxMTQ5NjQ4NjU0MTAyOWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3Mi41OTQzMTEyLCAic3RlcCI6IDI0NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDczLjk5MjgwNTUsICJzdGVwIjogMjUwOCwgInZhbHVlIjogOC4yMjExMzU5MDMxMTc4NDllLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NzUuMzQ0MDAzLCAic3RlcCI6IDI1NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDc2LjYwNDkzMywgInN0ZXAiOiAyNjA4LCAidmFsdWUiOiAzLjYyMjUyMTg5OTE0ODQ2NGUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3Ny4zNjExNDI5LCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDkuNzYwMjgxMDMwMTE0MjYxZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDc4LjE2NTY2NywgInN0ZXAiOiAyNzA4LCAidmFsdWUiOiA3LjcwNTUwOTU0MzE0OTIwNWUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3OS4wMTAyODQyLCAic3RlcCI6IDI3NTgsICJ2YWx1ZSI6IDUuOTE1OTI4MjQzMDQxMjdlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NzkuODczMjgzNiwgInN0ZXAiOiAyODA4LCAidmFsdWUiOiA2LjMzNTU2MDM1OTIyOTkzMmUtMTl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ4MC42MzIwODI1LCAic3RlcCI6IDI4NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDgxLjUwNjg3NCwgInN0ZXAiOiAyOTA4LCAidmFsdWUiOiA4LjcyMjc1NjgxMDQ3Mjg2OGUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ4Mi4zMjEwOTMzLCAic3RlcCI6IDI5NTgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0ODMuMDgxNzMyNSwgInN0ZXAiOiAzMDA4LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDgzLjgzNjM2MzYsICJzdGVwIjogMzA1OCwgInZhbHVlIjogMy42OTE1OTMyMDA4MzIzMTZlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjIuOTk4NDkzLCAic3RlcCI6IDMwODcsICJ2YWx1ZSI6IDEuNDAxMjIzNTY1MzQ2NjIzN2UtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUyMy45MTIyNjEsICJzdGVwIjogMzEzNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjQuNzkwNDc1NiwgInN0ZXAiOiAzMTg3LCAidmFsdWUiOiAxLjg4NjM1NTI3NzU1Mjg4MjdlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjUuNjk5NzMxLCAic3RlcCI6IDMyMzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTI2Ljg2NTg5MzQsICJzdGVwIjogMzI4NywgInZhbHVlIjogMy45OTc3NDYxNDQ1NDA2MjZlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjguMDA2NTUyLCAic3RlcCI6IDMzMzcsICJ2YWx1ZSI6IDQuMjI4MDE3ODk1Nzc5MDQzNWUtMTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUyOS4yOTEyNjkzLCAic3RlcCI6IDMzODcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTMwLjQ4ODE1MzcsICJzdGVwIjogMzQzNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzEuODY3MTU2MywgInN0ZXAiOiAzNDg3LCAidmFsdWUiOiAxLjgyNTcwODYzODA4OTYxOGUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUzMy4xMTAwODA3LCAic3RlcCI6IDM1MzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTM0LjM1NzQ1MjksICJzdGVwIjogMzU4NywgInZhbHVlIjogMi40NDE4NDE3Mjg4MTc0NTFlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzUuNzY0MDQ0LCAic3RlcCI6IDM2MzcsICJ2YWx1ZSI6IDUuMzA5Njg5NTU3MzM0NjI2ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTM2Ljg4MDUxMDYsICJzdGVwIjogMzY4NywgInZhbHVlIjogMS45NzgyMjE5NTYzODMwMjJlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzcuODE1NTA4MSwgInN0ZXAiOiAzNzM3LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTM4LjYxNzUyMjIsICJzdGVwIjogMzc4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzkuNDExODQsICJzdGVwIjogMzgzNywgInZhbHVlIjogMS43NjIwNTY4OTAzNzE1MjQ1ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTQwLjI5NjE5NDMsICJzdGVwIjogMzg4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NDEuMTQ5NDE1LCAic3RlcCI6IDM5MzcsICJ2YWx1ZSI6IDcuMTg3MzQ1MDc4NjAwMjY4ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTQyLjA1MDU0MDQsICJzdGVwIjogMzk4NywgInZhbHVlIjogMS4zNzEzNDUyNTc0MDI1Mzk4ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTQyLjk0ODQ0NzcsICJzdGVwIjogNDAzNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NDMuNzYzMDkwNiwgInN0ZXAiOiA0MDg3LCAidmFsdWUiOiA1LjAxMDE1MDY0OTIxOTEyN2UtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU4Mi43NDM0NDIsICJzdGVwIjogNDExNiwgInZhbHVlIjogMi4wNDIyNjQ3Mjc4NjE0OTA1ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTgzLjYxNjA1MjQsICJzdGVwIjogNDE2NiwgInZhbHVlIjogMS45MzE4Mzg4NDI0NzI5NjAzZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTg0LjQ2ODY0NjMsICJzdGVwIjogNDIxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1ODUuMzYxNjY0MywgInN0ZXAiOiA0MjY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU4Ni40NTUwMTU3LCAic3RlcCI6IDQzMTYsICJ2YWx1ZSI6IDUuMzMzMjY0NjAxODM5MDgxZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTg3LjYyNjI5NiwgInN0ZXAiOiA0MzY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU4OC45MDkxMTEzLCAic3RlcCI6IDQ0MTYsICJ2YWx1ZSI6IDYuODc5NzQ3MTgxMzg3MjM3ZS0xN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTkwLjA4NTI1OTcsICJzdGVwIjogNDQ2NiwgInZhbHVlIjogNC41NTM3NzQ4MjQxMjg0OTFlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTEuMzk0Njk3LCAic3RlcCI6IDQ1MTYsICJ2YWx1ZSI6IDQuNTkwODY1MzgwNDQ5MjJlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTIuNzk3NTQxLCAic3RlcCI6IDQ1NjYsICJ2YWx1ZSI6IDkuMDkyOTUzNzQ1OTE2NDg2ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTk0LjE2NjIxMjMsICJzdGVwIjogNDYxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTUuNTUzODQ5NSwgInN0ZXAiOiA0NjY2LCAidmFsdWUiOiAxLjk1Njc2MzEwNDU4MzI3MzNlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTYuNjUyOTAzMywgInN0ZXAiOiA0NzE2LCAidmFsdWUiOiAxLjE0NjA2NzczODQxNzI4NDRlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTcuNTgyNjU4OCwgInN0ZXAiOiA0NzY2LCAidmFsdWUiOiA5LjE5ODIyMjE1MzU2ODMwM2UtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU5OC41NDQyNjcsICJzdGVwIjogNDgxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTkuMzI4NjU5LCAic3RlcCI6IDQ4NjYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NjAwLjI3OTk0OTQsICJzdGVwIjogNDkxNiwgInZhbHVlIjogMy40MDA5ODI4NjcwMTM4MjVlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY2MDEuMjMyMDQ4NywgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjYwMi4wNjcwNzQsICJzdGVwIjogNTAxNiwgInZhbHVlIjogNy4yMDA1NzI4NzQ1MDAxODNlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY2MDIuODE3NzU5LCAic3RlcCI6IDUwNjYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NjAzLjYxMjg3MzMsICJzdGVwIjogNTExNiwgInZhbHVlIjogOS42MDYwMDA1NDMyNzcyMzFlLTE2fV19fV0=","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/train/loss%22%7D%5D":{"data":"W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3RyYWluL2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7ImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfOTcwMTExX0JTMTI4X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODY3MjIuNDgzNjE0LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNDI4NTQ3NzM5OTgyNjA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY3MjUuMTgxNzc3LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA3ODEzMDI2NzU2MDQ4MjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY3MjguODY1NTM0MywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDM5MDY5MzYxOTg0NzI5Nzd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjczMy4wNzE1NTY4LCAic3RlcCI6IDE1MCwgInZhbHVlIjogMC4wNDY4ODA2NjYxNjY1NDM5Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NzM3LjY5ODIxOTgsICJzdGVwIjogMjAwLCAidmFsdWUiOiAwLjAzOTA2NjQ1NjI1ODI5Njk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY3NDIuNTEwNzQ0LCAic3RlcCI6IDI1MCwgInZhbHVlIjogMC4wMzEyNTQ0NjY2MjMwNjc4NTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4Njc5MS45NTQxNjkzLCAic3RlcCI6IDI1OCwgInZhbHVlIjogMC4wMjM0NDEyNzc0NDQzNjI2NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Nzk1Ljk5MDEyODMsICJzdGVwIjogMzA4LCAidmFsdWUiOiAwLjAzOTA2NDgyMDg1NTg1NTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY4MDAuMjk2MjMyMiwgInN0ZXAiOiAzNTgsICJ2YWx1ZSI6IDAuMDQ2ODc4MjQ4NDUzMTQwMjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjgwMy40MDEzNzI0LCAic3RlcCI6IDQwOCwgInZhbHVlIjogMC4wMjM0Mzg1NTIzOTQ1MDkzMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjgwNi4yNjc3MTQsICJzdGVwIjogNDU4LCAidmFsdWUiOiAwLjAyMzQzOTI4MDY4ODc2MjY2NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODA4Ljc2MDQwNzQsICJzdGVwIjogNTA4LCAidmFsdWUiOiAwLjAzOTA2MzQ3OTc1MTM0ODQ5NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODYwLjE0MzQzOCwgInN0ZXAiOiA1MTYsICJ2YWx1ZSI6IDAuMDYyNTAzMjcwODA0ODgyMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4Njg2My4wMjAzODgxLCAic3RlcCI6IDU2NiwgInZhbHVlIjogMC4wMTU2MjY0NTQ3MjU4NjE1NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODY1LjU3NTY4MjYsICJzdGVwIjogNjE2LCAidmFsdWUiOiAwLjAyMzQzODM4MTAzMTE1NTU4Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODY4LjI3NzAwMDQsICJzdGVwIjogNjY2LCAidmFsdWUiOiAwLjA3MDMxMzMxOTU2Mzg2NTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY4NzEuNjIzMjQ3LCAic3RlcCI6IDcxNiwgInZhbHVlIjogMC4wMzkwNjMxNDA3NDk5MzEzMzV9LCB7IndhbGxUaW1lIjogMTY5NTI4Njg3NS43NjQzMDg3LCAic3RlcCI6IDc2NiwgInZhbHVlIjogMC4wMjM0MzgyMzAxNTY4OTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY5MjQuMTE0NTIwOCwgInN0ZXAiOiA3NzQsICJ2YWx1ZSI6IDAuMDc4MTI1MjYwNzcwMzIwODl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjkyNi43MDM3NTc4LCAic3RlcCI6IDgyNCwgInZhbHVlIjogMy43MzkxNDE5MDI3Njk5MTZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY5MjkuNTQyOTIyLCAic3RlcCI6IDg3NCwgInZhbHVlIjogMC4wNjI1MDIxMDg1MTQzMDg5M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTMzLjM2NzIxNTQsICJzdGVwIjogOTI0LCAidmFsdWUiOiAwLjAyMzQzODExMjgxMDI1NDA5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTM3LjYxMzkxMzUsICJzdGVwIjogOTc0LCAidmFsdWUiOiAwLjAyMzQzODU4NTkyMjEyMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTQxLjUwODY5NjYsICJzdGVwIjogMTAyNCwgInZhbHVlIjogMC4wNzgxMjc4NTM1NzIzNjg2Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTg5LjEyNTA0MzYsICJzdGVwIjogMTAzMiwgInZhbHVlIjogMC4wNDY4NzU4OTc3OTQ5NjE5M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTkyLjQ1MzEwMTIsICJzdGVwIjogMTA4MiwgInZhbHVlIjogMC4wMzEyNTExOTIwOTI4OTU1MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTk2LjU4MTI3NiwgInN0ZXAiOiAxMTMyLCAidmFsdWUiOiAwLjAzMTI1MDI2MDc3MDMyMDg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODcwMDAuNTg3MjcyNCwgInN0ZXAiOiAxMTgyLCAidmFsdWUiOiAwLjAyMzQzNzYxMTc1ODcwODk1NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3MDAzLjI3MjQ5NDYsICJzdGVwIjogMTIzMiwgInZhbHVlIjogMC4wNDY4NzUyOTgwMjMyMjM4OH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3MDA1Ljg4ODI3MiwgInN0ZXAiOiAxMjgyLCAidmFsdWUiOiAwLjA4NTkzNzY5MzcxNTA5NTUyfV0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzExOTgzMjhfQlMzMl9sZGF0YTQxMTI3IjogW3sid2FsbFRpbWUiOiAxNjk1MjgwNzA1LjE2NjA4NiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ5ODQzOTY2OTYwOTA2OTh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDcwNi4yMDc1ODUsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMDYyNTU2ODkyNjMzNDM4MTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MDcwNy4zNjAxNjk0LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC4wNjI1MjAzOTIyMzkwOTM3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzA4LjM5MDAyNTQsICJzdGVwIjogMTUwLCAidmFsdWUiOiAwLjAzMTI1NjM1NTM0NTI0OTE3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzA5LjU5ODYyODgsICJzdGVwIjogMjAwLCAidmFsdWUiOiAwLjAzMTMxOTQ2MTc2MjkwNTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTAuNzY2NjkxLCAic3RlcCI6IDI1MCwgInZhbHVlIjogNC4zNjEyODc5MzgwODE2NTk0ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzEyLjQ0Mjk4MDgsICJzdGVwIjogMzAwLCAidmFsdWUiOiAwLjA2MjUxMTQzNjY0MTIxNjI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTQuMTQ4ODU5LCAic3RlcCI6IDM1MCwgInZhbHVlIjogOS43MjA2OTc1NjI0NDMwOTJlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTUuOTE5MjU5NSwgInN0ZXAiOiA0MDAsICJ2YWx1ZSI6IDAuMDMxMjUxNDY3NzY0Mzc3NTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTcuNzEzMzEwNSwgInN0ZXAiOiA0NTAsICJ2YWx1ZSI6IDguNTM0Mjg2MjgwMzM3MjU1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzE5LjQ3MTE5LCAic3RlcCI6IDUwMCwgInZhbHVlIjogMC4wMzEyNTU0MDkxMjE1MTMzN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzIxLjEzOTc5MjcsICJzdGVwIjogNTUwLCAidmFsdWUiOiAxLjMwODU3NDM4MzA3NDMwMTNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MjIuMzMzNjY5NywgInN0ZXAiOiA2MDAsICJ2YWx1ZSI6IDAuMDMxMjk0MzM4NDA1MTMyMjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MjMuNDQ3ODk1LCAic3RlcCI6IDY1MCwgInZhbHVlIjogMC4wMzEyNTAzMzE1NTA4MzY1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzI0LjU2MTY1OTMsICJzdGVwIjogNzAwLCAidmFsdWUiOiAwLjAzMTI1MDM4MzcwNDkwMDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MjUuNzE1ODM5LCAic3RlcCI6IDc1MCwgInZhbHVlIjogMC4wMzEyNTA1MTAzNjQ3NzA4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzI3LjQyMDY2NTMsICJzdGVwIjogODAwLCAidmFsdWUiOiAwLjAzMTI1MjY0ODY4MTQwMjIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzI5LjA4ODU2OTYsICJzdGVwIjogODUwLCAidmFsdWUiOiAxLjY2NDE2NDMwMTQ3MzY0NzRlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MzAuMTAwNjczNywgInN0ZXAiOiA5MDAsICJ2YWx1ZSI6IDQuMzY0OTg3OTQ0NDI3NDEyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzMxLjQxNzY1MTcsICJzdGVwIjogOTUwLCAidmFsdWUiOiAwLjA5Mzc2MjQwNTIxNjY5Mzg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MzMuMTMwMzE3LCAic3RlcCI6IDEwMDAsICJ2YWx1ZSI6IDAuMDYyNTAxNTQ5NzIwNzY0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MDc4OS41OTQzMTUsICJzdGVwIjogMTAyOSwgInZhbHVlIjogMC4xMjUwMDA2MTA5NDc2MDg5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzkwLjY2MDQsICJzdGVwIjogMTA3OSwgInZhbHVlIjogMC4wNjI1MDAzNjUwNzg0NDkyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzkxLjgxMzcwMTksICJzdGVwIjogMTEyOSwgInZhbHVlIjogNS4xNzQ3NzM2MDUxNzY1OTdlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3OTIuOTAzMTA0OCwgInN0ZXAiOiAxMTc5LCAidmFsdWUiOiA5LjI2NzkwODA0MTAxMDc0MmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDc5My45NDI2MDQsICJzdGVwIjogMTIyOSwgInZhbHVlIjogMC4wNjI1MDA0MDIzMzEzNTIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzk1LjAxNTcwNzcsICJzdGVwIjogMTI3OSwgInZhbHVlIjogMC4xNTYyNTA0OTE3MzgzMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3OTYuMDY2NDMxNSwgInN0ZXAiOiAxMzI5LCAidmFsdWUiOiA4Ljg2NTY3MDIyNDYyMjU5ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzk3LjYwMzc0NTIsICJzdGVwIjogMTM3OSwgInZhbHVlIjogMC4wMzEyNTA1OTYwNDY0NDc3NTR9LCB7IndhbGxUaW1lIjogMTY5NTI4MDc5OS4yMDkwNjQ1LCAic3RlcCI6IDE0MjksICJ2YWx1ZSI6IDQuNzAwMjc3OTk3OTI2NjA1ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODAwLjk4NDIwMjQsICJzdGVwIjogMTQ3OSwgInZhbHVlIjogMC4wMzEyNTAxNDUyODYzMjE2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODAyLjgxODUwOTMsICJzdGVwIjogMTUyOSwgInZhbHVlIjogMC4wMzEyNTAwOTY4NTc1NDc3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODA0LjY0MTg5NDgsICJzdGVwIjogMTU3OSwgInZhbHVlIjogMC4wNjI1MDAxNzg4MTM5MzQzM30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODA1Ljk4MTk5MjIsICJzdGVwIjogMTYyOSwgInZhbHVlIjogMS4yMTk1Njc3MDcyNjY4MzMyZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODA3LjA4MzA4MjIsICJzdGVwIjogMTY3OSwgInZhbHVlIjogOC43NzE3ODIyMzM5MDcyODhlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MDguMTQ5MDc1NSwgInN0ZXAiOiAxNzI5LCAidmFsdWUiOiA1LjIxMzcyMzg1MjY0ODRlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MDkuMzAxMzQyNywgInN0ZXAiOiAxNzc5LCAidmFsdWUiOiAwLjA2MjUwMDAyMjM1MTc0MTc5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MTAuNDc3MjM3LCAic3RlcCI6IDE4MjksICJ2YWx1ZSI6IDAuMDMxMjUwMTU2NDYyMTkyNTM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MTEuNTUxODM5NiwgInN0ZXAiOiAxODc5LCAidmFsdWUiOiAwLjAzMTI1MDAxODYyNjQ1MTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MTIuNjk0MjU0LCAic3RlcCI6IDE5MjksICJ2YWx1ZSI6IDUuNzY2MTMwNDcwODc0NDg2ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODEzLjg2NzU1NjMsICJzdGVwIjogMTk3OSwgInZhbHVlIjogMC4wOTM3NTA5MzEzMjI1NzQ2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODE0Ljg5NTI1OTEsICJzdGVwIjogMjAyOSwgInZhbHVlIjogMC4wMzEyNTAwNTIxNTQwNjQxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODY0LjUxODI0ODYsICJzdGVwIjogMjA1OCwgInZhbHVlIjogMS45NzMwMTA3NjgwOTcwODMyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODY1LjYyMDQzMSwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiAwLjAzMTI1MDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NjYuNzQ1OTczMywgInN0ZXAiOiAyMTU4LCAidmFsdWUiOiAyLjM4MDQyNTkzOTkxODQ5NTdlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NjcuODIzNjE4NywgInN0ZXAiOiAyMjA4LCAidmFsdWUiOiA3LjExOTAwMzI3MTMyNzUyOWUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg2OC44MzU4OTE1LCAic3RlcCI6IDIyNTgsICJ2YWx1ZSI6IDIuNTAzNTA2OTEyODg3NTg3NWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg2OS44NzE1Njk0LCAic3RlcCI6IDIzMDgsICJ2YWx1ZSI6IDIuMDM2NjIzMTAxMjc1ODM2MmUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg3MC45Mjk0MjEsICJzdGVwIjogMjM1OCwgInZhbHVlIjogMC4wMzEyNTAzNTAxNzcyODgwNTV9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg3MS45ODQ5OTg3LCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDAuMDMxMjUwMDI5ODAyMzIyMzl9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg3My42NDU2NzA3LCAic3RlcCI6IDI0NTgsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODc1LjIxODAyODUsICJzdGVwIjogMjUwOCwgInZhbHVlIjogNC4wNjAzODI5NjMxODkxMTNlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NzYuOTYxNzA2MiwgInN0ZXAiOiAyNTU4LCAidmFsdWUiOiAwLjAzMTI1MDA1MjE1NDA2NDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NzguNTcwODUzMiwgInN0ZXAiOiAyNjA4LCAidmFsdWUiOiAwLjAzMTI1MDA3MDc4MDUxNTY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4ODAuMTczNjIzLCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDAuMDMxMjUwMDQwOTc4MTkzMjh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4MS42MTEyODk3LCAic3RlcCI6IDI3MDgsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODgyLjcyNjE3MDMsICJzdGVwIjogMjc1OCwgInZhbHVlIjogNC44Njg2NTE2MTUxOTc0NWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4My44NDQ2NDMsICJzdGVwIjogMjgwOCwgInZhbHVlIjogMC4wNjI1MDAwNDQ3MDM0ODM1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODg0Ljk4NDI3MDMsICJzdGVwIjogMjg1OCwgInZhbHVlIjogMC4wMzEyNTAyNDIxNDM4Njk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4ODYuMTM2NDY0LCAic3RlcCI6IDI5MDgsICJ2YWx1ZSI6IDAuMDMxMjUwMDQ0NzAzNDgzNTh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4Ny4zMDg0MDQ0LCAic3RlcCI6IDI5NTgsICJ2YWx1ZSI6IDAuMDYyNTAxMzQxMTA0NTA3NDV9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4OC4zODA1NDgyLCAic3RlcCI6IDMwMDgsICJ2YWx1ZSI6IDMuMzE0MDY4NjYzOTM5OTA2NGUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4OS40MDY5NjE0LCAic3RlcCI6IDMwNTgsICJ2YWx1ZSI6IDAuMDMxMjUwMDM3MjUyOTAyOTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5MzkuMTA3NzkzLCAic3RlcCI6IDMwODcsICJ2YWx1ZSI6IDAuMDMxMjUyMTc1NTY5NTM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQwLjA5NjQxNiwgInN0ZXAiOiAzMTM3LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MDk0MS4wOTUwNzcsICJzdGVwIjogMzE4NywgInZhbHVlIjogMC4wMzEyNTAwMjk4MDIzMjIzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQyLjIyMDE3MzgsICJzdGVwIjogMzIzNywgInZhbHVlIjogMC4wNjI1MDAxNTY0NjIxOTI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQzLjI5NDQ3MTUsICJzdGVwIjogMzI4NywgInZhbHVlIjogMi40MDgwMDE3OTc5NTk5NjllLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NDQuMzE3NTIzNywgInN0ZXAiOiAzMzM3LCAidmFsdWUiOiA4LjIzMjY5NDE3MDgyODgzNmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDk0NS4zODAzNDYsICJzdGVwIjogMzM4NywgInZhbHVlIjogMy43MjUyOTM0MjQ4NDk5NTE0ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQ2LjM1OTc2NTgsICJzdGVwIjogMzQzNywgInZhbHVlIjogMC4wMzEyNTAwNDg0Mjg3NzM4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQ3LjM0MDUyMDEsICJzdGVwIjogMzQ4NywgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NDguNzUzMTExLCAic3RlcCI6IDM1MzcsICJ2YWx1ZSI6IDguNjcwNTk4NDYxNDM1NDc1ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTUwLjQzMDIzLCAic3RlcCI6IDM1ODcsICJ2YWx1ZSI6IDYuNDI4MjY2ODA3NzQ1MzMxZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTUyLjI1MjQ5OTgsICJzdGVwIjogMzYzNywgInZhbHVlIjogMC4wMzEyNTAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NTMuOTUzNzYzLCAic3RlcCI6IDM2ODcsICJ2YWx1ZSI6IDAuMDMxMjUwMDE0OTAxMTYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NTUuNzI2MDA3LCAic3RlcCI6IDM3MzcsICJ2YWx1ZSI6IDEuMzkxNDUxMDA3NzQ4NDAxZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTU3LjE5MzA2OCwgInN0ZXAiOiAzNzg3LCAidmFsdWUiOiAyLjM4ODgwNDcwOTU5NjU3MDNlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NTguMjk0NzMyLCAic3RlcCI6IDM4MzcsICJ2YWx1ZSI6IDkuNDc0OTkyMTY4NjM0MzQ0ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTU5LjI5MTU1NTIsICJzdGVwIjogMzg4NywgInZhbHVlIjogMi42ODY1NzgyODQyODMzMTRlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NjAuMjk3MjQyLCAic3RlcCI6IDM5MzcsICJ2YWx1ZSI6IDIuMDA5OTU1Mjk1NTM0MzgyNWUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4MDk2MS40MDc2NiwgInN0ZXAiOiAzOTg3LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NjIuNTk3ODE3NCwgInN0ZXAiOiA0MDM3LCAidmFsdWUiOiAwLjAzMTI1MDExOTIwOTI4OTU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NjMuNzQyOTQ3MywgInN0ZXAiOiA0MDg3LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNC4yNzU0OTY3LCAic3RlcCI6IDQxMTYsICJ2YWx1ZSI6IDMuMDYzMTQ1MDcwOTI1MDg4NWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNS4zNDAzMDI3LCAic3RlcCI6IDQxNjYsICJ2YWx1ZSI6IDAuMDMxMjUwMTcxMzYzMzUzNzN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNi40MTcyOTc0LCAic3RlcCI6IDQyMTYsICJ2YWx1ZSI6IDAuMDYyNTAwMDY3MDU1MjI1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNy41NDI4NDksICJzdGVwIjogNDI2NiwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMTguNTc3NzM2NiwgInN0ZXAiOiA0MzE2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMTkuNjIzODAwOCwgInN0ZXAiOiA0MzY2LCAidmFsdWUiOiA0Ljc0NDQ5OTAxNTg4NTE0ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDIwLjY2ODAxNDMsICJzdGVwIjogNDQxNiwgInZhbHVlIjogMC4wMzEyNTAwMjYwNzcwMzIwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDIxLjg1MzIyMjgsICJzdGVwIjogNDQ2NiwgInZhbHVlIjogMS43NDc1MjQwODA5OTcyMDkyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDIyLjk1OTY0NDMsICJzdGVwIjogNDUxNiwgInZhbHVlIjogMC4wMzEyNTAwNDA5NzgxOTMyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDI0LjY0MTUyOTYsICJzdGVwIjogNDU2NiwgInZhbHVlIjogMS42MjM5ODg1ODgwNTA5MDY0ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDI2LjM5OTc2MDUsICJzdGVwIjogNDYxNiwgInZhbHVlIjogMC4wMzEyNTAwMTExNzU4NzA4OTV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAyOC4xMTUzMTkzLCAic3RlcCI6IDQ2NjYsICJ2YWx1ZSI6IDQuODA1NTkzMjU2NjYyNjMyNWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAyOS44NTUyMTc1LCAic3RlcCI6IDQ3MTYsICJ2YWx1ZSI6IDIuMDY4MDM1NzQyNjUyNzk2MmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAzMS42MDM1MiwgInN0ZXAiOiA0NzY2LCAidmFsdWUiOiAwLjA5Mzc1MDQ3NjgzNzE1ODJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAzMy4wMjQ2NiwgInN0ZXAiOiA0ODE2LCAidmFsdWUiOiA3LjM3MzI5OTc0ODUzNjUxZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDM0LjA0NjExNzgsICJzdGVwIjogNDg2NiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDM1LjE3Nzc0NDQsICJzdGVwIjogNDkxNiwgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMzYuMTk1ODgxMSwgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAwLjA5Mzc1MDAyOTgwMjMyMjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMzcuMzQ2NTI5NywgInN0ZXAiOiA1MDE2LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAzOC4zOTUwNjI0LCAic3RlcCI6IDUwNjYsICJ2YWx1ZSI6IDAuMDMxMjQ5OTkyNTQ5NDE5NDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMzkuNTI1MTc4MiwgInN0ZXAiOiA1MTE2LCAidmFsdWUiOiAwLjAzMTI1MDI4Njg0NzM1Mjk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwODkuMjQzOTE3LCAic3RlcCI6IDUxNDUsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDkwLjM5MDc0NywgInN0ZXAiOiA1MTk1LCAidmFsdWUiOiAyLjgwMjExNzg3MTA3MDIwOWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTA5MS40MTIxNTYsICJzdGVwIjogNTI0NSwgInZhbHVlIjogOS4wMzE2Mjk4NDQwMDI5NjRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwOTIuNjQ0Mzc5OSwgInN0ZXAiOiA1Mjk1LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTA5NC4zMDU5NzU0LCAic3RlcCI6IDUzNDUsICJ2YWx1ZSI6IDguMTYzMDA4MDQ3MjkwNTMyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDk2LjAyNTgyMzYsICJzdGVwIjogNTM5NSwgInZhbHVlIjogNy42ODk3NDk5NDc5MTQ0OTNlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwOTcuODEwNzMyMSwgInN0ZXAiOiA1NDQ1LCAidmFsdWUiOiAwLjA2MjUwMDAyOTgwMjMyMjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwOTkuNTgxODc1LCAic3RlcCI6IDU0OTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTEwMS40NjAzOTIsICJzdGVwIjogNTU0NSwgInZhbHVlIjogOC42ODcwNjUyODkzMzY3MTVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExMDMuMzk4ODE3LCAic3RlcCI6IDU1OTUsICJ2YWx1ZSI6IDQuNzQxMDE4MTMzNjM2MDMyZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTA1LjIwNjY2NTgsICJzdGVwIjogNTY0NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTA3LjA5NDI0NjQsICJzdGVwIjogNTY5NSwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTA4LjkxMjA4MiwgInN0ZXAiOiA1NzQ1LCAidmFsdWUiOiAzLjM1MDg0MjI3MDMyMjExODZlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExMTAuNjk0NDM4MiwgInN0ZXAiOiA1Nzk1LCAidmFsdWUiOiAxLjE1NjA1ODM2MDE1MjIwMTJlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExMTEuODM3MjEsICJzdGVwIjogNTg0NSwgInZhbHVlIjogMS4yOTAwNTA0NjY0NTE0NzU2ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTEyLjk5OTQ5MzQsICJzdGVwIjogNTg5NSwgInZhbHVlIjogMC4wNjI1MDAyODMxMjIwNjI2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTE0LjE2Mjg5OTMsICJzdGVwIjogNTk0NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTE1LjMzMzc5NzUsICJzdGVwIjogNTk5NSwgInZhbHVlIjogMy40OTU4MDU5NTU4MjIxMDY2ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTE2LjQ2NzU5ODcsICJzdGVwIjogNjA0NSwgInZhbHVlIjogMC4wMzEyNTAwODE5NTYzODY1NjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTExNy40OTYzNDQ2LCAic3RlcCI6IDYwOTUsICJ2YWx1ZSI6IDAuMDMxMjUwMDE4NjI2NDUxNDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTExOC41MTUzOTgsICJzdGVwIjogNjE0NSwgInZhbHVlIjogMy4yNDAxMTc5NTE3MTk0MTIzZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTY4LjY2NzI4MTYsICJzdGVwIjogNjE3NCwgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExNjkuNzU0Mjc1OCwgInN0ZXAiOiA2MjI0LCAidmFsdWUiOiAwLjA2MjUwMDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE3MC44NTUyMTIyLCAic3RlcCI6IDYyNzQsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTcxLjk5NDQyNDMsICJzdGVwIjogNjMyNCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTczLjAxODYzMDcsICJzdGVwIjogNjM3NCwgInZhbHVlIjogMC4wNjI1MDAwMjIzNTE3NDE3OX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTc0LjE0MDI2NywgInN0ZXAiOiA2NDI0LCAidmFsdWUiOiAwLjA2MjUwMDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE3NS4xODk3NjgsICJzdGVwIjogNjQ3NCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExNzYuMTk2MDEzMiwgInN0ZXAiOiA2NTI0LCAidmFsdWUiOiAxLjA2MjU3NTEzODk4ODEwODhlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExNzcuMjY3OTkyMywgInN0ZXAiOiA2NTc0LCAidmFsdWUiOiA5LjU5NjU2MzU0MzgyMzMyMmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE3OC45Mjg4NzM1LCAic3RlcCI6IDY2MjQsICJ2YWx1ZSI6IDQuMzQ3OTc1ODY4MjM1MjFlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODAuNjIzOTc1NSwgInN0ZXAiOiA2Njc0LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODIuMzk2ODAxNSwgInN0ZXAiOiA2NzI0LCAidmFsdWUiOiA5LjcxMjE4NDUyODgzMTcxM2UtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE4NC4xOTUxOTksICJzdGVwIjogNjc3NCwgInZhbHVlIjogNC44OTY1NDcwNTY3MDk3MjFlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODUuOTgxMzc0MywgInN0ZXAiOiA2ODI0LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODcuMjMyODEyNiwgInN0ZXAiOiA2ODc0LCAidmFsdWUiOiAwLjA2MjUwMDEwNDMwODEyODM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODguMzAwNTI5NywgInN0ZXAiOiA2OTI0LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE4OS4zMzA3MDA5LCAic3RlcCI6IDY5NzQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTkwLjMzNzcsICJzdGVwIjogNzAyNCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTkxLjM5OTEwOTgsICJzdGVwIjogNzA3NCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTkyLjQ2OTE1NywgInN0ZXAiOiA3MTI0LCAidmFsdWUiOiAxLjk0NDIyNTY2OTM0ODA0M2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE5My41NjIxMzksICJzdGVwIjogNzE3NCwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDMuMzczOTkwMywgInN0ZXAiOiA3MjAzLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDQuNDY0ODg1MiwgInN0ZXAiOiA3MjUzLCAidmFsdWUiOiAxLjU0MTk3NTIxNDE4MDk3OTVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDUuNTMyNTc2OCwgInN0ZXAiOiA3MzAzLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDYuNjE3MDgxNCwgInN0ZXAiOiA3MzUzLCAidmFsdWUiOiAzLjYyMTg3ODgzODUxMTE3MmUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI0Ny42MjgxNzQsICJzdGVwIjogNzQwMywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDguNzIxMzgsICJzdGVwIjogNzQ1MywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjQ5Ljg2MDIzMDQsICJzdGVwIjogNzUwMywgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNTEuMDE0MTI1OCwgInN0ZXAiOiA3NTUzLCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI1Mi4xNjgwMzM4LCAic3RlcCI6IDc2MDMsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjUzLjUzOTMwOTUsICJzdGVwIjogNzY1MywgInZhbHVlIjogMS4yMTg3MzgxMTA0MzExNjEyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjU1LjI5MDg3MDQsICJzdGVwIjogNzcwMywgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNTYuODY2Mjg5OSwgInN0ZXAiOiA3NzUzLCAidmFsdWUiOiA1Ljg5ODIyNjkwNjg4NjM1ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjU4LjQ3NjExMzMsICJzdGVwIjogNzgwMywgInZhbHVlIjogMi43NjE4Njg0MjI4NTE0MjEyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjYwLjIzNzY2MywgInN0ZXAiOiA3ODUzLCAidmFsdWUiOiAwLjAzMTI1MDA4NTY4MTY3Njg2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjYxLjkwOTc5MDUsICJzdGVwIjogNzkwMywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjYyLjk4MzA1NzcsICJzdGVwIjogNzk1MywgInZhbHVlIjogMC4wMzEyNTAwMTg2MjY0NTE0OX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjY0LjAxMjk4MjgsICJzdGVwIjogODAwMywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjY1LjA5NzYzLCAic3RlcCI6IDgwNTMsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI2Ni4xNzg1MDg4LCAic3RlcCI6IDgxMDMsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI2Ny4yMTU1OTAyLCAic3RlcCI6IDgxNTMsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI2OC4zMTc4NDY4LCAic3RlcCI6IDgyMDMsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMTcuNTgwOTI0NywgInN0ZXAiOiA4MjMyLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMTguODIzNDMyNywgInN0ZXAiOiA4MjgyLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMxOS45NzY2NzgxLCAic3RlcCI6IDgzMzIsICJ2YWx1ZSI6IDIuMjcwNDM5NjY5NjA0OTRlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMjEuMTIxMjE4MiwgInN0ZXAiOiA4MzgyLCAidmFsdWUiOiAwLjAzMTI1MDAyNjA3NzAzMjA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMjIuMTUyMzY0LCAic3RlcCI6IDg0MzIsICJ2YWx1ZSI6IDEuNjQwNTQ2Njk4NDg5MjMxNGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMyMy4yODYyMDc0LCAic3RlcCI6IDg0ODIsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzI0LjMyMjUyMzQsICJzdGVwIjogODUzMiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzI1LjQxMzIyOTIsICJzdGVwIjogODU4MiwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMjYuNTY3ODMwNiwgInN0ZXAiOiA4NjMyLCAidmFsdWUiOiA1LjYzMDg0NDY3OTQxNjIxNGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMyNy43MzQzODUsICJzdGVwIjogODY4MiwgInZhbHVlIjogMC4xNTYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzI5LjEzNzc3NCwgInN0ZXAiOiA4NzMyLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMzMC45MjI0NjEsICJzdGVwIjogODc4MiwgInZhbHVlIjogMS41NDMyMzk0OTQ1MjgwNTkyZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzMyLjYzMDgyMDMsICJzdGVwIjogODgzMiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM0LjM5MTgzMTksICJzdGVwIjogODg4MiwgInZhbHVlIjogMS4zNzcwMTI3MjYwNjcwNTA2ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM2LjExODA5MjMsICJzdGVwIjogODkzMiwgInZhbHVlIjogMS41Mzg3NTUzNDI3NjI4NzY0ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM3Ljc2NTU2MjgsICJzdGVwIjogODk4MiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM4LjkwODczMDUsICJzdGVwIjogOTAzMiwgInZhbHVlIjogMS4yMTk0NzI2NjUwNzA0OThlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMzkuOTg4NTgzLCAic3RlcCI6IDkwODIsICJ2YWx1ZSI6IDEuMzc1MzUzNTgxMDIzNDc1MmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4MTM0MS4wNzY1ODIsICJzdGVwIjogOTEzMiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzQyLjExNTUxNzEsICJzdGVwIjogOTE4MiwgInZhbHVlIjogMy43MjA3NTUyNTk0NTA5MjUyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzQzLjIwMzE3NjMsICJzdGVwIjogOTIzMiwgInZhbHVlIjogMy44NjYyMzk2MjAxMjA1NTk2ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzk1LjM4MDQyNzQsICJzdGVwIjogOTI2MSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzk2LjgwMDc3OTYsICJzdGVwIjogOTMxMSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzk3LjgwNzc3OSwgInN0ZXAiOiA5MzYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzOTguODAyNTc2NSwgInN0ZXAiOiA5NDExLCAidmFsdWUiOiAyLjk2MDIxNjkyNDAxNjcxMmUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTM5OS44MjkyMjI0LCAic3RlcCI6IDk0NjEsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQwMC44NzA4ODQ0LCAic3RlcCI6IDk1MTEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDAyLjA1ODgyMTIsICJzdGVwIjogOTU2MSwgInZhbHVlIjogMi4zMDA4NjMzMjIwOTExMThlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDMuMTk2Mjc0NSwgInN0ZXAiOiA5NjExLCAidmFsdWUiOiAyLjcxODc5MzcyMzQ4ODQ4ODVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDQuNDkwMDgzNywgInN0ZXAiOiA5NjYxLCAidmFsdWUiOiA0LjQ4ODM4NjA1MTcxNTMwOTZlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDUuNTUzODMwNCwgInN0ZXAiOiA5NzExLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDYuNzg4OTAyMywgInN0ZXAiOiA5NzYxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQwOC41MzM5ODU2LCAic3RlcCI6IDk4MTEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDEwLjIxNDI5NzgsICJzdGVwIjogOTg2MSwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTEuOTIxNzA4MywgInN0ZXAiOiA5OTExLCAidmFsdWUiOiAwLjE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTMuNjcwNjM3NCwgInN0ZXAiOiA5OTYxLCAidmFsdWUiOiAyLjc2NTgxNTEzNzY4MTM3MWUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQxNS4zOTQzODQ5LCAic3RlcCI6IDEwMDExLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQxNi41MjkzMDkzLCAic3RlcCI6IDEwMDYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTcuNjgxNTAxNiwgInN0ZXAiOiAxMDExMSwgInZhbHVlIjogNS4yNzg4NzI4OTQzNjUzNWUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQxOC44MTgwMzY2LCAic3RlcCI6IDEwMTYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTkuODY3NjMzLCAic3RlcCI6IDEwMjExLCAidmFsdWUiOiAxLjM0Mjg4MTEwMTQ1NzA4M2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQyMC44NDg5NjU2LCAic3RlcCI6IDEwMjYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0NzUuMzIxMTI4OCwgInN0ZXAiOiAxMDI5MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc2LjM3MTU2MjIsICJzdGVwIjogMTAzNDAsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc3LjM5MDU1MSwgInN0ZXAiOiAxMDM5MCwgInZhbHVlIjogMS41Mzg3NzgyMTU5NTkyNjg5ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc4LjQwNzI4ODgsICJzdGVwIjogMTA0NDAsICJ2YWx1ZSI6IDMuNjQ1MjAzMDYzMDA3NDE4ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc5LjU2NzY4NDIsICJzdGVwIjogMTA0OTAsICJ2YWx1ZSI6IDEuNzk0NTkxMDM4MjczMjg1NWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQ4MC41OTMwNDYyLCAic3RlcCI6IDEwNTQwLCAidmFsdWUiOiAwLjAzMTI1MDAxNDkwMTE2MTE5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDgxLjYyODA0OTksICJzdGVwIjogMTA1OTAsICJ2YWx1ZSI6IDguOTY1ODc4NzMzODkwODc1ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDgyLjcyMzk5MzMsICJzdGVwIjogMTA2NDAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDgzLjczNjA4MDIsICJzdGVwIjogMTA2OTAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDg1LjQ1OTc4NCwgInN0ZXAiOiAxMDc0MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0ODcuMDM5MjkxLCAic3RlcCI6IDEwNzkwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0ODguODUzMzc1MiwgInN0ZXAiOiAxMDg0MCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDkwLjY5NDg2MDIsICJzdGVwIjogMTA4OTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQ5Mi40OTQyNDgsICJzdGVwIjogMTA5NDAsICJ2YWx1ZSI6IDYuMDEwMTEzOTM0MzA3MTcxZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDkzLjc1MjU3NDQsICJzdGVwIjogMTA5OTAsICJ2YWx1ZSI6IDYuNDkwNTc0NzQ0MzMzMzQ0ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDk0Ljc4Mzg0OSwgInN0ZXAiOiAxMTA0MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0OTUuOTA5NDEwNSwgInN0ZXAiOiAxMTA5MCwgInZhbHVlIjogMi4wOTIxNjQxMTU1NjM1NjYyZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDk3LjAzNjA5LCAic3RlcCI6IDExMTQwLCAidmFsdWUiOiAxLjE1MjkwNTY3ODkxMTEzMTRlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0OTguMTU3NzUxOCwgInN0ZXAiOiAxMTE5MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDk5LjMzNzMyMTgsICJzdGVwIjogMTEyNDAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTAwLjQ1MTQ4MjMsICJzdGVwIjogMTEyOTAsICJ2YWx1ZSI6IDEuODQ2NzE0NDQ4MDI4MzA4MmUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1MC44NTc2MTksICJzdGVwIjogMTEzMTksICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTUxLjg5OTEzOTYsICJzdGVwIjogMTEzNjksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1Mi44ODQ4MTQzLCAic3RlcCI6IDExNDE5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1My45NTkxMzgyLCAic3RlcCI6IDExNDY5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NTUuMDA1MTM5OCwgInN0ZXAiOiAxMTUxOSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTU2LjA5Nzg4MTgsICJzdGVwIjogMTE1NjksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTU3LjE1NjQ4NDgsICJzdGVwIjogMTE2MTksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1OC4xNDk4MjY4LCAic3RlcCI6IDExNjY5LCAidmFsdWUiOiAxLjI2MjI4NjU0MjY1MjU5MDllLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NTkuMTU1Mzc0OCwgInN0ZXAiOiAxMTcxOSwgInZhbHVlIjogMy4xMjc1OTE1MDE3NTU4OTk3ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTYwLjY2ODMzOTUsICJzdGVwIjogMTE3NjksICJ2YWx1ZSI6IDMuMDg2NjAyODA0OTQ0MjE2MmUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU2Mi40NzU5MjIsICJzdGVwIjogMTE4MTksICJ2YWx1ZSI6IDIuODM0OTQ1MDU2NDg0NjI4ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTY0LjE2MTIxNDgsICJzdGVwIjogMTE4NjksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU2NS45MDc2OTAzLCAic3RlcCI6IDExOTE5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NjcuNTQ2MTE0NCwgInN0ZXAiOiAxMTk2OSwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU2OC45NTA0OTgzLCAic3RlcCI6IDEyMDE5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NjkuOTg1NTc4OCwgInN0ZXAiOiAxMjA2OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NzEuMDk4MzQ1NSwgInN0ZXAiOiAxMjExOSwgInZhbHVlIjogMS4xMzUyNTM0NTgwODAyNDMxZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTcyLjE2NDYzNiwgInN0ZXAiOiAxMjE2OSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTczLjE2ODg5NTUsICJzdGVwIjogMTIyMTksICJ2YWx1ZSI6IDQuMzI3MjkwMjA4MDE5MjI0NGUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU3NC4yMTU0MjYyLCAic3RlcCI6IDEyMjY5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NzUuMzUxNDY2NywgInN0ZXAiOiAxMjMxOSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2MjUuNDQ2NzUxOCwgInN0ZXAiOiAxMjM0OCwgInZhbHVlIjogMi41MTI5Njc4ODkzMzQzMDU1ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjI2LjYxNjYyMywgInN0ZXAiOiAxMjM5OCwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYyNy42NzI3ODU1LCAic3RlcCI6IDEyNDQ4LCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2MjguNzExOTMwNSwgInN0ZXAiOiAxMjQ5OCwgInZhbHVlIjogNC4zODA2MjkxNjAxOTc5MDc1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjI5LjgzNDk5LCAic3RlcCI6IDEyNTQ4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYzMC45NjIzNTEzLCAic3RlcCI6IDEyNTk4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYzMi4wODg3OTIsICJzdGVwIjogMTI2NDgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjMzLjA4MTI4MywgInN0ZXAiOiAxMjY5OCwgInZhbHVlIjogNy41NjA2MjkyMDYwMzgxNzJlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2MzQuMTk1NDAwMiwgInN0ZXAiOiAxMjc0OCwgInZhbHVlIjogNy4xNDMxNDY3NTExODE3NzI2ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjM1LjUyMDY0NDIsICJzdGVwIjogMTI3OTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjM3LjI5NzYwMTcsICJzdGVwIjogMTI4NDgsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYzOS4xMDk3NTI0LCAic3RlcCI6IDEyODk4LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2NDAuODA0MzgzLCAic3RlcCI6IDEyOTQ4LCAidmFsdWUiOiAyLjQ3NzYwNTEwMDI0ODQxNDVlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2NDIuNDg1ODE4MSwgInN0ZXAiOiAxMjk5OCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ0LjEzMjY0NiwgInN0ZXAiOiAxMzA0OCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ1LjIyNjkzMzUsICJzdGVwIjogMTMwOTgsICJ2YWx1ZSI6IDEuMjQ5MTc3MzI0MDgwODA4ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ2LjI1NTE2NzcsICJzdGVwIjogMTMxNDgsICJ2YWx1ZSI6IDYuNTQ4NzgzMDU0NDY3MDcyZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ3LjM1NjQ4OTcsICJzdGVwIjogMTMxOTgsICJ2YWx1ZSI6IDEuNjk0MzExMTQxMDQwMDE3ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ4LjQ5MzE4NzQsICJzdGVwIjogMTMyNDgsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTY0OS41MDcxOTUsICJzdGVwIjogMTMyOTgsICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTY1MC41MTczMTYsICJzdGVwIjogMTMzNDgsICJ2YWx1ZSI6IDYuMzM0ODU4MzMyMzQ2MzcxZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzAwLjg5NjIxOTUsICJzdGVwIjogMTMzNzcsICJ2YWx1ZSI6IDAuMDMxMjUwMDE0OTAxMTYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MDEuOTAzMzcyNSwgInN0ZXAiOiAxMzQyNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MDIuOTE4MzU1MiwgInN0ZXAiOiAxMzQ3NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MDMuOTUzMDgxNiwgInN0ZXAiOiAxMzUyNywgInZhbHVlIjogMS4wMzIyMDUzNjI4NDk3NTg1ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzA0Ljk2OTc3MzgsICJzdGVwIjogMTM1NzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzA1Ljk5NjQxMjMsICJzdGVwIjogMTM2MjcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcwNy4wMDkwNDk0LCAic3RlcCI6IDEzNjc3LCAidmFsdWUiOiA1Ljk3MjA0Mjk5OTAxMzk5M2UtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcwOC4wMTU1NjIsICJzdGVwIjogMTM3MjcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcwOS4wMjM4Njc0LCAic3RlcCI6IDEzNzc3LCAidmFsdWUiOiA1LjU2MDg4NzUxNDM1NTM1MDRlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MTAuMDYxNjk1OCwgInN0ZXAiOiAxMzgyNywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzExLjcwMjY1NzIsICJzdGVwIjogMTM4NzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzEzLjM3ODcwNTMsICJzdGVwIjogMTM5MjcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzE1LjIxMDMyMTQsICJzdGVwIjogMTM5NzcsICJ2YWx1ZSI6IDguNjU2MDE1MTQwNzczMjk5ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzE2LjkxNTU2MjQsICJzdGVwIjogMTQwMjcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcxOC42MjIxMTI4LCAic3RlcCI6IDE0MDc3LCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MTkuOTU4NDQ5MSwgInN0ZXAiOiAxNDEyNywgInZhbHVlIjogNS4yOTc4NzA4MjI1OTU5MThlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MjEuMDAwNjg3OCwgInN0ZXAiOiAxNDE3NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MjIuMDA1NDIwNywgInN0ZXAiOiAxNDIyNywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzIzLjEwNTQwNjMsICJzdGVwIjogMTQyNzcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcyNC4xNTgzOTAzLCAic3RlcCI6IDE0MzI3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcyNS4yODUyMjIsICJzdGVwIjogMTQzNzcsICJ2YWx1ZSI6IDEuNTU2OTI5MTczMjU4OTQ3NGUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc3NS4wODI2NDg4LCAic3RlcCI6IDE0NDA2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3NzYuNDU0ODc5OCwgInN0ZXAiOiAxNDQ1NiwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzc3LjQ5MTU4MzYsICJzdGVwIjogMTQ1MDYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc3OC40OTE0MjU4LCAic3RlcCI6IDE0NTU2LCAidmFsdWUiOiAxLjUzMDQ1MTkyNjIxNDc4NzVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3NzkuNjM1OTgxOCwgInN0ZXAiOiAxNDYwNiwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4MC42NTgzMzQzLCAic3RlcCI6IDE0NjU2LCAidmFsdWUiOiAyLjc5ODg3MTIwNDI0NTkzNGUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4MS43NjE5NDc0LCAic3RlcCI6IDE0NzA2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3ODIuNzY2MzQ5MywgInN0ZXAiOiAxNDc1NiwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzgzLjc1MTY3MTYsICJzdGVwIjogMTQ4MDYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzg0Ljc5MDAyMSwgInN0ZXAiOiAxNDg1NiwgInZhbHVlIjogMi43MDQzNzYzNTM3NDY5ODhlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3ODYuMTA5MTQsICJzdGVwIjogMTQ5MDYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4Ny43OTM1OTcsICJzdGVwIjogMTQ5NTYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4OS41NzU4NDI2LCAic3RlcCI6IDE1MDA2LCAidmFsdWUiOiAyLjIxNTA2MjQ3NzI0NDE1NDJlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTEuNDM1NDY0NCwgInN0ZXAiOiAxNTA1NiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTMuMDgxNTg5NywgInN0ZXAiOiAxNTEwNiwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc5NC43Njg0MDIsICJzdGVwIjogMTUxNTYsICJ2YWx1ZSI6IDEuNTcwNzc2ODYwOTAzOTQ4MmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc5NS45NjIyODQ2LCAic3RlcCI6IDE1MjA2LCAidmFsdWUiOiAyLjUzNjE0OTQxNjQ5Mzg1NzNlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTcuMTQ0MTQyOSwgInN0ZXAiOiAxNTI1NiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTguMTY2NTc0NSwgInN0ZXAiOiAxNTMwNiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzk5LjE1NTE2MDcsICJzdGVwIjogMTUzNTYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTgwMC4xODc3NDkxLCAic3RlcCI6IDE1NDA2LCAidmFsdWUiOiAwLjAzMTI1fV0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzY4MzQ1X0JTMzJfbGRhdGE0MTEyNyI6IFt7IndhbGxUaW1lIjogMTY5NTI4NDEzMi4wMTE0NTg2LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNDg5NjUwNDU4MDk3NDU3OX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTMzLjEyMTQxMzcsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDYuNjMxNDI0MTg0ODg4NjAxZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTM0LjI0MjQ3MTUsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjA2MjUzOTExNTU0ODEzMzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxMzUuMzYzNjQyMiwgInN0ZXAiOiAxNTAsICJ2YWx1ZSI6IDAuMDYyNTAzMjc4MjU1NDYyNjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDEzNi41OTk4MzYzLCAic3RlcCI6IDIwMCwgInZhbHVlIjogMC4wNjI1MDE2Njg5MzAwNTM3MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTM3Ljg2NzI3NSwgInN0ZXAiOiAyNTAsICJ2YWx1ZSI6IDAuMDMxMjUyNzQ1NTM4OTQ5OTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxMzkuNDQyODk3LCAic3RlcCI6IDMwMCwgInZhbHVlIjogNi41NDI4OTk0Mjc1ODYyMzVlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDEuMTI1MDAxNywgInN0ZXAiOiAzNTAsICJ2YWx1ZSI6IDAuMDMxMjUyOTQyOTc5MzM1Nzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDIuODIzMzYxNCwgInN0ZXAiOiA0MDAsICJ2YWx1ZSI6IDEuNDE1OTQyNzMzNzI5MDI1M2UtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE0NC42NjYwMzk3LCAic3RlcCI6IDQ1MCwgInZhbHVlIjogOS4yMDA1NTkzNjE0ODg1NThlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDYuNDU4NjY1LCAic3RlcCI6IDUwMCwgInZhbHVlIjogMy41MjQzMTgxMTczNDI3NzNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDguMjkyODA5NSwgInN0ZXAiOiA1NTAsICJ2YWx1ZSI6IDYuNTE0OTM0NTExODY5Nzk3ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTQ5LjQ0MTA4MiwgInN0ZXAiOiA2MDAsICJ2YWx1ZSI6IDIuNTQzOTk1Mzc4ODAwOTAwN2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1MC41MTg1NTQ3LCAic3RlcCI6IDY1MCwgInZhbHVlIjogMC4wMzEyNTI2NTI0MDY2OTI1MDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1MS42MTk2MDcsICJzdGVwIjogNzAwLCAidmFsdWUiOiAwLjA2MjUwMTgxNzk0MTY2NTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNTIuNzgwNzgzLCAic3RlcCI6IDc1MCwgInZhbHVlIjogMC4wMzEyNTAyMzg0MTg1NzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNTMuOTQzODAxMiwgInN0ZXAiOiA4MDAsICJ2YWx1ZSI6IDEuNTIyNjgxMDMxOTI5MDk2MmUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1NS4wOTUxOTg5LCAic3RlcCI6IDg1MCwgInZhbHVlIjogMC4xNTYyNTAyMDg2MTYyNTY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNTYuMTMwNDM1LCAic3RlcCI6IDkwMCwgInZhbHVlIjogMC4wMzEyNTA2ODU0NTM0MTQ5Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTU3LjI2NDE3OSwgInN0ZXAiOiA5NTAsICJ2YWx1ZSI6IDAuMDYyNTAxMTM5OTM4ODMxMzN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1OC4yOTMyOTksICJzdGVwIjogMTAwMCwgInZhbHVlIjogMC4wMzEyNTU1MDk3MDQzNTE0MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxMC4yNjg2MTU3LCAic3RlcCI6IDEwMjksICJ2YWx1ZSI6IDAuMDkzNzUwMTA0MzA4MTI4MzZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxMS40MjA0NTY0LCAic3RlcCI6IDEwNzksICJ2YWx1ZSI6IDMuNzg3MzgwMzY0ODgzNTc0N2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxMi41ODk5NjEsICJzdGVwIjogMTEyOSwgInZhbHVlIjogMC4wNjI1MDAzNTc2Mjc4Njg2NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjEzLjczNDg3MjgsICJzdGVwIjogMTE3OSwgInZhbHVlIjogMC4wNjI1MDAzODc0MzAxOTEwNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjE0Ljc3MTgwMzksICJzdGVwIjogMTIyOSwgInZhbHVlIjogMi45ODczOTk5MDk2NzA3ODVlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMTUuOTczMzk1MywgInN0ZXAiOiAxMjc5LCAidmFsdWUiOiA1Ljc0Nzg4ODI4MDg5MzY3NmUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxNy4xNjcyNzA0LCAic3RlcCI6IDEzMjksICJ2YWx1ZSI6IDAuMDMxMjUwMDE0OTAxMTYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMTguMzU5NDI5MSwgInN0ZXAiOiAxMzc5LCAidmFsdWUiOiAwLjAzMTI1MDA3NDUwNTgwNTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjAuMTI4MDEzMSwgInN0ZXAiOiAxNDI5LCAidmFsdWUiOiA3LjQzODU0OTExODg4Nzc1ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjIxLjk0MjM2NjgsICJzdGVwIjogMTQ3OSwgInZhbHVlIjogMC4wOTM3NTAyMzg0MTg1NzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjMuNzY0MTU0MiwgInN0ZXAiOiAxNTI5LCAidmFsdWUiOiAxLjA0NzA0MzcyNDYxMTI4NTFlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjUuNTMwOTYyMiwgInN0ZXAiOiAxNTc5LCAidmFsdWUiOiAwLjAzMTI1MDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjcuMjIwODk3NywgInN0ZXAiOiAxNjI5LCAidmFsdWUiOiAwLjA2MjUwMDA4MTk1NjM4NjU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjguODczMzU0LCAic3RlcCI6IDE2NzksICJ2YWx1ZSI6IDAuMDMxMjUwMzk0ODgwNzcxNjR9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIzMC4xMzAxODE4LCAic3RlcCI6IDE3MjksICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIzMS4zMjIyMzA4LCAic3RlcCI6IDE3NzksICJ2YWx1ZSI6IDAuMDYyNTAwMDIyMzUxNzQxNzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIzMi40NDU3Mzc0LCAic3RlcCI6IDE4MjksICJ2YWx1ZSI6IDAuMDMxMjUwNDc2ODM3MTU4Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjMzLjU0MTUwOTYsICJzdGVwIjogMTg3OSwgInZhbHVlIjogMC4xMjUwMDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMzQuNjg0NjI5NywgInN0ZXAiOiAxOTI5LCAidmFsdWUiOiAyLjYwMTY4MTUwMTM0NjMyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjM1Ljg4MzYxNywgInN0ZXAiOiAxOTc5LCAidmFsdWUiOiAwLjAzMTI1MDEwODAzMzQxODY1NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjM3LjA1MDk0NSwgInN0ZXAiOiAyMDI5LCAidmFsdWUiOiAwLjAzMTI1MDMzOTAwMTQxNzE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyODcuMDc2NDg2OCwgInN0ZXAiOiAyMDU4LCAidmFsdWUiOiAxLjU2NDU5MjUwODg4NDc0MzRlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyODguNTQwNTU5NSwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiAwLjA2MjUwMDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI4OS42MDI3NjI1LCAic3RlcCI6IDIxNTgsICJ2YWx1ZSI6IDkuNzY4OTkzNjE0MDQ1NDg1ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjkwLjc2NTE4NiwgInN0ZXAiOiAyMjA4LCAidmFsdWUiOiAwLjAzMTI1MDEzNzgzNTc0MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyOTEuODQwNzEwMiwgInN0ZXAiOiAyMjU4LCAidmFsdWUiOiAwLjAzMTI1MDEzMDM4NTE2MDQ0Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjkzLjA4NjgxNDQsICJzdGVwIjogMjMwOCwgInZhbHVlIjogMC4wMzEyNTAwMTg2MjY0NTE0OX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mjk0LjE3MTgyMywgInN0ZXAiOiAyMzU4LCAidmFsdWUiOiAwLjEyNDk5OTk5MjU0OTQxOTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI5NS4yNjc2MDQ2LCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDUuODY2NjkyNzMxNjE1MzMxZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mjk2LjQzNjI1MzgsICJzdGVwIjogMjQ1OCwgInZhbHVlIjogMC4wMzEyNTAwODE5NTYzODY1NjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI5Ny41NzUzNzk0LCAic3RlcCI6IDI1MDgsICJ2YWx1ZSI6IDAuMDYyNTAwMDk2ODU3NTQ3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI5OC45OTk1MDc0LCAic3RlcCI6IDI1NTgsICJ2YWx1ZSI6IDEuNDQwNTE1OTczMTcyMjk2ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzAwLjc2OTI3NiwgInN0ZXAiOiAyNjA4LCAidmFsdWUiOiAwLjA5Mzc1MDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMwMi40MzIwNjE0LCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDAuMDYyNTAwMDU5NjA0NjQ0Nzh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMwNC4wODE4MTIxLCAic3RlcCI6IDI3MDgsICJ2YWx1ZSI6IDAuMDYyNTAwNDMyMTMzNjc0NjJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMwNS45MTAyMzMsICJzdGVwIjogMjc1OCwgInZhbHVlIjogMS42Mjc3NjU0Nzc5NjI4MzkyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzA3Ljc2NDMwMTMsICJzdGVwIjogMjgwOCwgInZhbHVlIjogMi40ODY5NzExNjIzNDA5Nzg1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzA5LjAzNjgzLCAic3RlcCI6IDI4NTgsICJ2YWx1ZSI6IDMuMTE0OTg4NDg5MzcyMTk0NmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMxMC4wODI3NDIyLCAic3RlcCI6IDI5MDgsICJ2YWx1ZSI6IDAuMDYyNTAwNDE3MjMyNTEzNDN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMxMS4yNDQ4ODYsICJzdGVwIjogMjk1OCwgInZhbHVlIjogMC4wMzEyNTAwNjcwNTUyMjUzN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzEyLjM3MDU5NDUsICJzdGVwIjogMzAwOCwgInZhbHVlIjogNS45NDQzMjAyMzYwMzk4NTdlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzMTMuNTM1MjcwMiwgInN0ZXAiOiAzMDU4LCAidmFsdWUiOiAwLjAzMTI1MDAzNzI1MjkwMjk4NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzY3LjYyMjg3MywgInN0ZXAiOiAzMDg3LCAidmFsdWUiOiAyLjYxODMwMjY4NTc3NTEyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzY5LjM5OTYxNDgsICJzdGVwIjogMzEzNywgInZhbHVlIjogMy41MDI5NjM5NjMzNDIxNTRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzEuMTQ2MjUwNSwgInN0ZXAiOiAzMTg3LCAidmFsdWUiOiAzLjIwNDY1NjA5NjA0NTI1NWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM3Mi45NjQzNzc0LCAic3RlcCI6IDMyMzcsICJ2YWx1ZSI6IDEuMTU0MDMzMzEzMzU1Mjg1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mzc0LjI0MjU4OTcsICJzdGVwIjogMzI4NywgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzUuNDMxMTI3MywgInN0ZXAiOiAzMzM3LCAidmFsdWUiOiAzLjA5ODY1MTI5MTExMTMwOTVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzYuNTg0ODY0NiwgInN0ZXAiOiAzMzg3LCAidmFsdWUiOiAwLjAzMTI1MDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzcuNjI1NDk2NiwgInN0ZXAiOiAzNDM3LCAidmFsdWUiOiAwLjAzMTI1MDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM3OC42NTM1NjIzLCAic3RlcCI6IDM0ODcsICJ2YWx1ZSI6IDEuMTY0NDIxMjcwNTE2NDEzNmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM3OS42ODU1NiwgInN0ZXAiOiAzNTM3LCAidmFsdWUiOiAxLjI2MDQ4NDYwNTU4MDgxMzllLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzODAuNzYwNTQ3NiwgInN0ZXAiOiAzNTg3LCAidmFsdWUiOiAwLjAzMTI1MDAxNDkwMTE2MTE5NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzgxLjgwNzkwNywgInN0ZXAiOiAzNjM3LCAidmFsdWUiOiAwLjA5Mzc1MDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM4Mi45OTg1MzYsICJzdGVwIjogMzY4NywgInZhbHVlIjogMC4wNjI1MDAyMDg2MTYyNTY3MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mzg0LjY0NTkzMywgInN0ZXAiOiAzNzM3LCAidmFsdWUiOiAwLjAzMTI1MDA3ODIzMTA5NjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzODYuNDQwNzkyMywgInN0ZXAiOiAzNzg3LCAidmFsdWUiOiAwLjA2MjUwMDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzODguMzQ2ODI5NywgInN0ZXAiOiAzODM3LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM5MC4yNDE3MjksICJzdGVwIjogMzg4NywgInZhbHVlIjogMC4wOTM3NTAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzOTIuMTE4MzgyNSwgInN0ZXAiOiAzOTM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM5My45MzUzMTg1LCAic3RlcCI6IDM5ODcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM5NS4xMDQxODg3LCAic3RlcCI6IDQwMzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mzk2LjE0NzQxNjgsICJzdGVwIjogNDA4NywgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDQ0LjIxODY3NywgInN0ZXAiOiA0MTE2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NDYuMDE4MDcxLCAic3RlcCI6IDQxNjYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDQ3LjY3MTY2ODUsICJzdGVwIjogNDIxNiwgInZhbHVlIjogOC4wNTAzMDA4MzQ4Mzg3MDhlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NDkuMzY0Mzg3MywgInN0ZXAiOiA0MjY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1MS4yNzE0Mjk4LCAic3RlcCI6IDQzMTYsICJ2YWx1ZSI6IDMuNDEyMjI1ODM1MjE5ODI4N2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1My4xMzU0Njc4LCAic3RlcCI6IDQzNjYsICJ2YWx1ZSI6IDEuMzkxNTAwMTU5NTQyMTQ3MmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1NC40OTEwNTY3LCAic3RlcCI6IDQ0MTYsICJ2YWx1ZSI6IDYuNTQ4ODc2NTUyMTU5Mjk5NWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1NS41NTM4ODc4LCAic3RlcCI6IDQ0NjYsICJ2YWx1ZSI6IDEuNzgwNTgyMjU5NDE0MTMyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDU2Ljc2NTE5MSwgInN0ZXAiOiA0NTE2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1OC4wMDYwNjMyLCAic3RlcCI6IDQ1NjYsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDU5LjI2MDIzOTgsICJzdGVwIjogNDYxNiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDYwLjQ3MjEyOSwgInN0ZXAiOiA0NjY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ2MS42NTMxOTk3LCAic3RlcCI6IDQ3MTYsICJ2YWx1ZSI6IDYuMzY0Nzc3NTkzODU5MTE3ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDYyLjczNjM3NTMsICJzdGVwIjogNDc2NiwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NjQuMDMzNjM2OCwgInN0ZXAiOiA0ODE2LCAidmFsdWUiOiAxLjM1OTQwODg1MjE1MjkxMDJlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NjUuNzMwNzgxLCAic3RlcCI6IDQ4NjYsICJ2YWx1ZSI6IDIuOTIwNTc3NTU3NTc0Njg4NGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ2Ny4yOTUyNjYyLCAic3RlcCI6IDQ5MTYsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDY5LjA4ODMxMSwgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAwLjAzMTI1MDAzMzUyNzYxMjY4Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDcxLjAzMDEzMywgInN0ZXAiOiA1MDE2LCAidmFsdWUiOiAxLjk5MDIzNjc3NTM4NDM0NjRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NzIuOTAwNDAzNywgInN0ZXAiOiA1MDY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ3NC41MzkzOTYzLCAic3RlcCI6IDUxMTYsICJ2YWx1ZSI6IDIuNTk1OTc4MzIxMTk1OTU3NWUtMDl9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfMTIxMjM1NV9CUzE2X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODUzNDYuMDc0MjA4NywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ3NjI5MTAwMDg0MzA0ODF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM0Ni45NTk0MTE2LCAic3RlcCI6IDUwLCAidmFsdWUiOiAyLjE2MTEzNTQ4OTU4Njc0MDdlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNDcuNzgzMjI2LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMy42MjE3ODg4OTE5MDU0NTNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNDguNTQ2MTI0LCAic3RlcCI6IDE1MCwgInZhbHVlIjogNC4wMTg2OTc2NTQ4Mjg0MjllLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNDkuNTc2NzA3LCAic3RlcCI6IDIwMCwgInZhbHVlIjogMS4wOTg3MDc0MzQ3MjEyOTFlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTAuNzg2NTc2LCAic3RlcCI6IDI1MCwgInZhbHVlIjogMi40MzUwOTE2NjQ2NjUzNzg2ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzUxLjk4MjQ2MjIsICJzdGVwIjogMzAwLCAidmFsdWUiOiAwLjA2MjUwNjM1NTM0NTI0OTE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTMuMTAzNzI4NSwgInN0ZXAiOiAzNTAsICJ2YWx1ZSI6IDMuODQ1MDg4MDMxMDg0NzQyZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzU0LjI1NDY2OTcsICJzdGVwIjogNDAwLCAidmFsdWUiOiAyLjgwNzUxMDA5OTk1NTgzNDRlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTUuNTcwOTcwNSwgInN0ZXAiOiA0NTAsICJ2YWx1ZSI6IDUuNjU5OTU2MDU5Mzg5NTE1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzU2LjkzNjE4ODcsICJzdGVwIjogNTAwLCAidmFsdWUiOiAwLjA2MjUwNjM4NTE0NzU3MTU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTguMzIzOTQ2NSwgInN0ZXAiOiA1NTAsICJ2YWx1ZSI6IDEuNDY2NzcwMjA4OTM1NDg2MmUtMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM1OS43NTAyOTM3LCAic3RlcCI6IDYwMCwgInZhbHVlIjogNC43OTE4MDk3MTUyNDMyODllLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNjEuMDA4OTg1MywgInN0ZXAiOiA2NTAsICJ2YWx1ZSI6IDIuNjAyMzQ3NzA2MjE1MzY5ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzYyLjI1ODc3MjEsICJzdGVwIjogNzAwLCAidmFsdWUiOiAwLjA2MjUwMzI0MTAwMjU1OTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNjQuMDczMDc4NiwgInN0ZXAiOiA3NTAsICJ2YWx1ZSI6IDAuMDYyNTAwNzMwMTU2ODk4NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzY2LjI4MDMyMTgsICJzdGVwIjogODAwLCAidmFsdWUiOiAwLjA2MjUwOTMzNTU3NzQ4Nzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNjcuNDg4NzcxNCwgInN0ZXAiOiA4NTAsICJ2YWx1ZSI6IDAuMDYyNTAxMTE3NTg3MDg5NTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM2OC42NzU2MzUzLCAic3RlcCI6IDkwMCwgInZhbHVlIjogMS43MTU3OTEwMjkyNTUzNDI0ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzY5Ljk3NTU3MjYsICJzdGVwIjogOTUwLCAidmFsdWUiOiAyLjU1NTM5MDc3ODk3OTkyN2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3MC44MzkxMTU2LCAic3RlcCI6IDEwMDAsICJ2YWx1ZSI6IDEuNTk4ODkyMDI2Nzc3MzIxZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzcxLjczOTEzODYsICJzdGVwIjogMTA1MCwgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNzIuODU0NDQ0MywgInN0ZXAiOiAxMTAwLCAidmFsdWUiOiAwLjA2MjUwNjM3MDI0NjQxMDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNzQuMDM5NTI5OCwgInN0ZXAiOiAxMTUwLCAidmFsdWUiOiA3LjUwMDUzOTE0MDg5MjIxNWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3NS4xNTM0NjcsICJzdGVwIjogMTIwMCwgInZhbHVlIjogNy40OTMxNDM1Mjc4ODEzM2UtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3Ni4zNzQ4NTYsICJzdGVwIjogMTI1MCwgInZhbHVlIjogMS4zNzEyMzM3OTMxNzkyNzE3ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzc3LjYyNjY2MjUsICJzdGVwIjogMTMwMCwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3OC45NDIwOTk2LCAic3RlcCI6IDEzNTAsICJ2YWx1ZSI6IDAuMDYyNTAwMjk4MDIzMjIzODh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM4MC4xMzI5MTEsICJzdGVwIjogMTQwMCwgInZhbHVlIjogMy42NDYyOTg1NTE5ODQ3MjhlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzODEuMzQ5NDMxLCAic3RlcCI6IDE0NTAsICJ2YWx1ZSI6IDAuMDYyNTAwMDgxOTU2Mzg2NTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM4Mi4yODc1MTIsICJzdGVwIjogMTUwMCwgInZhbHVlIjogMC4wNjI1MDAxNDkwMTE2MTE5NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzgzLjA0NDE3NTYsICJzdGVwIjogMTU1MCwgInZhbHVlIjogNC45MjgwOTMwNjI1MTcyOTFlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzODMuODY0OTk2LCAic3RlcCI6IDE2MDAsICJ2YWx1ZSI6IDUuMDE1MTQ3MDUzMjAwMDUzZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg0LjYzMTU4OTcsICJzdGVwIjogMTY1MCwgInZhbHVlIjogNS42Nzc3NDg2MTc5MjcxMzZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzODUuNDE4MzE3NiwgInN0ZXAiOiAxNzAwLCAidmFsdWUiOiAzLjE3MDkxNTYxODk2NjMxOWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM4Ni4yNzI1NjA0LCAic3RlcCI6IDE3NTAsICJ2YWx1ZSI6IDguMDc2MzExMjQ2NDQxMDM3ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg3LjExOTI4OTIsICJzdGVwIjogMTgwMCwgInZhbHVlIjogMC4wNjI1MDA4NjQyNjczNDkyNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg3Ljg1NDkyMDEsICJzdGVwIjogMTg1MCwgInZhbHVlIjogMi45NDQ3OTMyMDkyODA3NjA1ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg4LjYwOTEwNDQsICJzdGVwIjogMTkwMCwgInZhbHVlIjogMi42OTMzNzQ0ODM0NDIzMTIzZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg5LjM2NjUyNzYsICJzdGVwIjogMTk1MCwgInZhbHVlIjogMS4wMTk3MzUzMTg0MDgyNjU4ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzkwLjI0Njg1NzYsICJzdGVwIjogMjAwMCwgInZhbHVlIjogMC4wNjI1MDEzNzA5MDY4Mjk4M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzkxLjA3NDY4NTMsICJzdGVwIjogMjA1MCwgInZhbHVlIjogMS4zMTQyMjAxOTkzMzMyNDkyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDQyLjQ4OTMwMywgInN0ZXAiOiAyMDU3LCAidmFsdWUiOiAwLjA2MjUwMDE3ODgxMzkzNDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDMuMzI0MDc3OCwgInN0ZXAiOiAyMTA3LCAidmFsdWUiOiAwLjA2MjUxMzk5OTY0MDk0MTYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDQuMTYwMTk3MywgInN0ZXAiOiAyMTU3LCAidmFsdWUiOiA4LjM0MTIyNzcyNjMwNTA3OGUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0NS4wMTYxMzk3LCAic3RlcCI6IDIyMDcsICJ2YWx1ZSI6IDQuNjE1NTI0MTc2MTg4MDQ2ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDQ1LjgyOTk5MDksICJzdGVwIjogMjI1NywgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDYuNTc5ODUxNiwgInN0ZXAiOiAyMzA3LCAidmFsdWUiOiAyLjI5NzI3MjM0NTY4NTk5NjdlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDcuMzEzODc1LCAic3RlcCI6IDIzNTcsICJ2YWx1ZSI6IDAuMDYyNTAwMDIyMzUxNzQxNzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0OC4wNzU4NzU1LCAic3RlcCI6IDI0MDcsICJ2YWx1ZSI6IDMuNjgwMjM5NDAyMTE1MTQ4NmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0OC44Njg2NCwgInN0ZXAiOiAyNDU3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0OS43MTE1NDIxLCAic3RlcCI6IDI1MDcsICJ2YWx1ZSI6IDYuMzg5NzQzNzAzMDM5MTNlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTAuNTQxNjE5LCAic3RlcCI6IDI1NTcsICJ2YWx1ZSI6IDMuMDMzNjYzNjg4MjU2NjM4ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDUxLjQxOTUxNzUsICJzdGVwIjogMjYwNywgInZhbHVlIjogNy43MjE0NDIzMjk5NjY1MjFlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTIuNjUzNzA2OCwgInN0ZXAiOiAyNjU3LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ1My44NDgwNzIsICJzdGVwIjogMjcwNywgInZhbHVlIjogMS45Mzg0MTU4MzQ5NTY2ODZlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTQuOTcyMzQ5NCwgInN0ZXAiOiAyNzU3LCAidmFsdWUiOiA2LjI5NDk0ODIwNzE0MTcxNWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ1Ni4zMzk4NTE0LCAic3RlcCI6IDI4MDcsICJ2YWx1ZSI6IDAuMDYyNTAwMTQxNTYxMDMxMzR9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ1Ny43MjAyNTMsICJzdGVwIjogMjg1NywgInZhbHVlIjogNi4zOTM2NDczODkzMDIyNTllLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTkuMDQ3MzY0NywgInN0ZXAiOiAyOTA3LCAidmFsdWUiOiAwLjA2MjUwMDAyMjM1MTc0MTc5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjAuMjM4NzU3OCwgInN0ZXAiOiAyOTU3LCAidmFsdWUiOiAwLjA2MjUwMDA1OTYwNDY0NDc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjEuMzk1MzcsICJzdGVwIjogMzAwNywgInZhbHVlIjogMS4yODY0ODM2NjYyNjI5Mzg2ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDYyLjI0NjA4MDksICJzdGVwIjogMzA1NywgInZhbHVlIjogMi40NjM2ODQzNjc2MjYyMjg4ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDYzLjAwNzkzODQsICJzdGVwIjogMzEwNywgInZhbHVlIjogNy44NjAwMzA4NDg0MDU1ODZlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjMuNzg5MzI4LCAic3RlcCI6IDMxNTcsICJ2YWx1ZSI6IDAuMDYyNTAwMjc1NjcxNDgyMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ2NC42NzY1ODc2LCAic3RlcCI6IDMyMDcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDY1LjQ4MDMyOTMsICJzdGVwIjogMzI1NywgInZhbHVlIjogMC4wNjI1MDA3NTI1MDg2NDAyOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDY2LjI5OTczNSwgInN0ZXAiOiAzMzA3LCAidmFsdWUiOiAyLjk2MTg3NTYzMzY0NDY5NWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ2Ny4xNDk3NjI5LCAic3RlcCI6IDMzNTcsICJ2YWx1ZSI6IDEuMzk4ODMzMTYwNDE1MzM2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDY3LjkxNDU1NTgsICJzdGVwIjogMzQwNywgInZhbHVlIjogOC4zNTQ1MzkyODI2MDY3NjVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjguNjczNjIzOCwgInN0ZXAiOiAzNDU3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ2OS40NjczNDM4LCAic3RlcCI6IDM1MDcsICJ2YWx1ZSI6IDEuMjAzODU5OTM3OTU5MzUwNmUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3MC4zNTE5NDI1LCAic3RlcCI6IDM1NTcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDcxLjEwMTg2MDMsICJzdGVwIjogMzYwNywgInZhbHVlIjogMC4wNjI1MDAwNDQ3MDM0ODM1OH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDcyLjI4ODU3MzcsICJzdGVwIjogMzY1NywgInZhbHVlIjogMS45MTI3MzEwODQ2MzAwODE2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDczLjU0OTU2MTcsICJzdGVwIjogMzcwNywgInZhbHVlIjogMC4wNjI1MDE5NTIwNTIxMTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NzQuNzczMTY5NSwgInN0ZXAiOiAzNzU3LCAidmFsdWUiOiAwLjE4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3Ni4wNzY4NjQ3LCAic3RlcCI6IDM4MDcsICJ2YWx1ZSI6IDAuMTI1MDAwMDg5NDA2OTY3MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3Ny4yNzQ1MjQyLCAic3RlcCI6IDM4NTcsICJ2YWx1ZSI6IDEuMjc2MTU5NTMzNjAzMDQ5NmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3OC40NzQxOTUsICJzdGVwIjogMzkwNywgInZhbHVlIjogNC43NTMwNDU5NTY4MTc5MTRlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NzkuNzg0Njk5NCwgInN0ZXAiOiAzOTU3LCAidmFsdWUiOiAxLjMwNjgxOTA5NzM3OTczZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDgxLjA1MzA5NDEsICJzdGVwIjogNDAwNywgInZhbHVlIjogMC4wNjI1MDE1OTQ0MjQyNDc3NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDgxLjk2Mzc3MzUsICJzdGVwIjogNDA1NywgInZhbHVlIjogMC4xMjUwMDAwNzQ1MDU4MDU5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDgyLjcyNjIyNywgInN0ZXAiOiA0MTA3LCAidmFsdWUiOiAxLjY3MTU4NjE3NjE0NDA0NjVlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1MjkuMjczNjA4LCAic3RlcCI6IDQxMTQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTMwLjA3NjU0MDcsICJzdGVwIjogNDE2NCwgInZhbHVlIjogMC4xODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1MzAuODcwMjMxNCwgInN0ZXAiOiA0MjE0LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTMxLjk1MDA1OSwgInN0ZXAiOiA0MjY0LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzMy4wNDAwNjI3LCAic3RlcCI6IDQzMTQsICJ2YWx1ZSI6IDAuMDYyNTAwMDIyMzUxNzQxNzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNC4xMjM1NDU2LCAic3RlcCI6IDQzNjQsICJ2YWx1ZSI6IDEuMDE0MjA0Mzg3MTM5NzI3N2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNS4yNzcxNjE4LCAic3RlcCI6IDQ0MTQsICJ2YWx1ZSI6IDIuMDQ1ODk1OTY4MTk0NTk5OGUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNi40Njk4Njc1LCAic3RlcCI6IDQ0NjQsICJ2YWx1ZSI6IDIuNTg1MTgwMjkyMDU4NDUzMmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNy44MDcyMTkzLCAic3RlcCI6IDQ1MTQsICJ2YWx1ZSI6IDAuMDYyNTAwMDA3NDUwNTgwNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTM5LjAwODQ3MTcsICJzdGVwIjogNDU2NCwgInZhbHVlIjogMS44ODExOTc4NjQxNTA4NjNlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDAuMjM0NzQ0OCwgInN0ZXAiOiA0NjE0LCAidmFsdWUiOiAyLjgzOTc2NzMxMDE5MjA4NzNlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDEuNDkxNDE1LCAic3RlcCI6IDQ2NjQsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTQyLjM2NzAyNTEsICJzdGVwIjogNDcxNCwgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDMuMTg1ODE4NywgInN0ZXAiOiA0NzY0LCAidmFsdWUiOiAwLjA2MjQ5OTk5NjI3NDcwOTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0My45MzQ3NTYsICJzdGVwIjogNDgxNCwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0NC43MDU3NTEsICJzdGVwIjogNDg2NCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDUuNDY1NDE3MSwgInN0ZXAiOiA0OTE0LCAidmFsdWUiOiA0LjM1NDc1OTI1NTQyMDUwNGUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0Ni4yNjQ2MiwgInN0ZXAiOiA0OTY0LCAidmFsdWUiOiA4Ljk0MzY0NjcxMjExMTc4NmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0Ny4wOTM5NDEsICJzdGVwIjogNTAxNCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDcuODQ3NTc2MSwgInN0ZXAiOiA1MDY0LCAidmFsdWUiOiAyLjg2MDgzOTA2NTY0MzcxNjZlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDguNzI4ODEzNiwgInN0ZXAiOiA1MTE0LCAidmFsdWUiOiAxLjIzMDA0NDk1NDc4MDg1MTJlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDkuNjExOTE1OCwgInN0ZXAiOiA1MTY0LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU1MC40OTc5MjQsICJzdGVwIjogNTIxNCwgInZhbHVlIjogNC4xNzA1OTgwODkxMDM4MDVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTEuMzA2OTQ4NywgInN0ZXAiOiA1MjY0LCAidmFsdWUiOiA0LjAzMzYyNjc2NTkzMTMzMWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU1Mi4zNzIzMjE0LCAic3RlcCI6IDUzMTQsICJ2YWx1ZSI6IDAuMDYyNTAwMDA3NDUwNTgwNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTUzLjU3Mzc1NjUsICJzdGVwIjogNTM2NCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTQuNzMwNTQ5LCAic3RlcCI6IDU0MTQsICJ2YWx1ZSI6IDEuNjQzMjQ3NjkwNjk2OTAzZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTU1LjgyNDAzODUsICJzdGVwIjogNTQ2NCwgInZhbHVlIjogMC4xMjUwMDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTcuMTEzMjMxLCAic3RlcCI6IDU1MTQsICJ2YWx1ZSI6IDUuMDg2MTY1OTMyODY2MDM4ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTU4LjMxOTEzOCwgInN0ZXAiOiA1NTY0LCAidmFsdWUiOiAxLjc5ODkwNTIwMjU3Njg2MTVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTkuNTc3MjA2OSwgInN0ZXAiOiA1NjE0LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2MC45MzA5ODI2LCAic3RlcCI6IDU2NjQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTYyLjAwMTIzMjEsICJzdGVwIjogNTcxNCwgInZhbHVlIjogMS4yMTEyMjE3MDA3MTQzMDQ1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTYyLjgxMDUxMSwgInN0ZXAiOiA1NzY0LCAidmFsdWUiOiAxLjAyNjQyODQ1MzM0MzQ0MmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2My42NzY5ODY1LCAic3RlcCI6IDU4MTQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTY0LjUzNDkxMjMsICJzdGVwIjogNTg2NCwgInZhbHVlIjogMS41MjAwMjM0NDA0NDg4ODFlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NjUuMzEyMjgxMSwgInN0ZXAiOiA1OTE0LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2Ni4wODA2NDk2LCAic3RlcCI6IDU5NjQsICJ2YWx1ZSI6IDguMzIxMDk4ODA5OTkzNTQzZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTY2Ljg3OTc4MDUsICJzdGVwIjogNjAxNCwgInZhbHVlIjogMi40ODQzODA5MjMyMDY2ODZlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NjcuNzMyMzIyLCAic3RlcCI6IDYwNjQsICJ2YWx1ZSI6IDUuMjUzOTE2ODU3MTI4NjE1NGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2OC40OTIxMzIsICJzdGVwIjogNjExNCwgInZhbHVlIjogNi4zNTc1MTcyOTAzODk1OGUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2OS4yMzU0ODEsICJzdGVwIjogNjE2NCwgInZhbHVlIjogMi40NjY0NjUwMzIyMTM3MDVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MTcuNzg1ODIzOCwgInN0ZXAiOiA2MTcxLCAidmFsdWUiOiA3Ljc2MzQxOTA3NDI2OTI1MWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYxOS4yMDgwMTUsICJzdGVwIjogNjIyMSwgInZhbHVlIjogNi42NjY2NjY1MDc3MjY0MDRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MjAuNjAwNTIxNiwgInN0ZXAiOiA2MjcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyMS42OTE0MTY3LCAic3RlcCI6IDYzMjEsICJ2YWx1ZSI6IDEuNzI3MDU3ODAyMzI1NDA0NmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyMi42MTY3MzM4LCAic3RlcCI6IDYzNzEsICJ2YWx1ZSI6IDEuMTEyMzA3NDkwNTU4MzUwOGUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyMy41MDg3Nzg2LCAic3RlcCI6IDY0MjEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI0LjM2MDcyOTcsICJzdGVwIjogNjQ3MSwgInZhbHVlIjogMC4wNjI1MDA4MTk1NjM4NjU2Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI1LjE1NjcxMDQsICJzdGVwIjogNjUyMSwgInZhbHVlIjogMC4wNjI1MDAwMjk4MDIzMjIzOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI1LjkxMTEwNzMsICJzdGVwIjogNjU3MSwgInZhbHVlIjogMS4xMTE2MDM0MzE1MjUwNTQ1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI2Ljc4MDkxMjksICJzdGVwIjogNjYyMSwgInZhbHVlIjogMS4wMjU1MTE0NTM1MzQwMjI2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI3LjUzMDc4NjgsICJzdGVwIjogNjY3MSwgInZhbHVlIjogNi43NjU4MjY3ODc3MTM1MzZlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MjguMjcyNjY4LCAic3RlcCI6IDY3MjEsICJ2YWx1ZSI6IDEuNTk1MDczMzc4OTM0OTQxNGUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyOS4wNTIyNzc2LCAic3RlcCI6IDY3NzEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI5Ljg4NjE4OSwgInN0ZXAiOiA2ODIxLCAidmFsdWUiOiAxLjc1OTczODMyNzI3ODI3MDdlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzAuNjM0NTA1LCAic3RlcCI6IDY4NzEsICJ2YWx1ZSI6IDEuNDg0NTkyNjcxMDE5NDEzNWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYzMS4zNzIzODEyLCAic3RlcCI6IDY5MjEsICJ2YWx1ZSI6IDAuMDYyNDk5OTk2Mjc0NzA5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjMyLjQ0MDg1NDMsICJzdGVwIjogNjk3MSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzMuNTYyNTQ1OCwgInN0ZXAiOiA3MDIxLCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYzNC42ODQ4MDgzLCAic3RlcCI6IDcwNzEsICJ2YWx1ZSI6IDMuNjcyODU3MDE4NTIxODI0NmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYzNS44MTQ2NDUsICJzdGVwIjogNzEyMSwgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzYuOTgzNjMzLCAic3RlcCI6IDcxNzEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjM4LjE3NjkwODMsICJzdGVwIjogNzIyMSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzkuNDMzNTE5NiwgInN0ZXAiOiA3MjcxLCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQwLjgwMzcxMDcsICJzdGVwIjogNzMyMSwgInZhbHVlIjogMS44MDI2NDM2NDYzMzI4MTMzZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQxLjkxNDY2MTQsICJzdGVwIjogNzM3MSwgInZhbHVlIjogMS43OTQ5MDA2MTcwMjQ4MDgzZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQyLjc0Njk5OTcsICJzdGVwIjogNzQyMSwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0My41OTYzNzksICJzdGVwIjogNzQ3MSwgInZhbHVlIjogMC4wNjI0OTk5MDMxNDI0NTIyNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQ0LjM4NTIwMjIsICJzdGVwIjogNzUyMSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NDUuMTY4NTI4NiwgInN0ZXAiOiA3NTcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0Ni4wMzUwNDcsICJzdGVwIjogNzYyMSwgInZhbHVlIjogMy44MzU3NDc2OTE2OTM5MjVlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NDYuODUwMjI2NCwgInN0ZXAiOiA3NjcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0Ny42OTY1OTk1LCAic3RlcCI6IDc3MjEsICJ2YWx1ZSI6IDEuNzk3MDk4MTE0NzY0MTM5NmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0OC41NjMwOTIsICJzdGVwIjogNzc3MSwgInZhbHVlIjogMS4yMjgyNjM4MjM5ODI0NDVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NDkuNDAyMzUxMSwgInN0ZXAiOiA3ODIxLCAidmFsdWUiOiAzLjU2MTM2ODQyMjM4ODk2NjNlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NTAuMTcwNTI4NCwgInN0ZXAiOiA3ODcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY1MC45MDg0MjYsICJzdGVwIjogNzkyMSwgInZhbHVlIjogMi4xNzEwMjkwNTA5NzkxMDA4ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjUxLjY0ODc3OTksICJzdGVwIjogNzk3MSwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY1Mi43OTkxNzc2LCAic3RlcCI6IDgwMjEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjU0LjA3MTQ3NjcsICJzdGVwIjogODA3MSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NTUuMzI4Mjg4NiwgInN0ZXAiOiA4MTIxLCAidmFsdWUiOiA3LjM2MDY5MDE4MjM2NzUxM2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY1Ni42MjExNDI5LCAic3RlcCI6IDgxNzEsICJ2YWx1ZSI6IDQuMDExMDI2OTI3MjY0MTgzZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjU3Ljk4ODAxNCwgInN0ZXAiOiA4MjIxLCAidmFsdWUiOiA4LjIxNjk5NjUyNzY0MzUxNmUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcwNi4xOTgzMDMsICJzdGVwIjogODIyOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MDcuMzY3ODA4NiwgInN0ZXAiOiA4Mjc4LCAidmFsdWUiOiAxLjI4ODI0NzAwOTA2ODA0NDJlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MDguNTkwMDksICJzdGVwIjogODMyOCwgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MDkuNzY0MDA5NywgInN0ZXAiOiA4Mzc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcxMS4xMDg1NzgsICJzdGVwIjogODQyOCwgInZhbHVlIjogNC43OTk5NDk2NzM4MzkzNDNlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTIuNjE2MjU5MywgInN0ZXAiOiA4NDc4LCAidmFsdWUiOiAxLjEyMzI5MTg3NjE4MTY1MzVlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTQuMDEzNjAwNiwgInN0ZXAiOiA4NTI4LCAidmFsdWUiOiAxLjk0OTg0MzIzODI1ODA4NjZlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTUuNDMwOTE5NCwgInN0ZXAiOiA4NTc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcxNi44MzQ3OTg2LCAic3RlcCI6IDg2MjgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTguNDAzNTk4OCwgInN0ZXAiOiA4Njc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcxOS43NDQ2MDg0LCAic3RlcCI6IDg3MjgsICJ2YWx1ZSI6IDEuNTEwOTU2NTgyMDczNjc0OGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcyMS4wODY5MDEyLCAic3RlcCI6IDg3NzgsICJ2YWx1ZSI6IDYuMzUxMDAwMDIxMDI2NTA5ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzIyLjMzMTM1NDEsICJzdGVwIjogODgyOCwgInZhbHVlIjogNC42ODU4MTMxOTU3OTI3NTRlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MjMuNjY5NjI3NCwgInN0ZXAiOiA4ODc4LCAidmFsdWUiOiAzLjg0NTI4Nzk3NjkyMjQwN2UtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcyNC43MjAzOTg3LCAic3RlcCI6IDg5MjgsICJ2YWx1ZSI6IDIuNDk4NjA1NzY2NzMxOTk4M2UtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcyNS41MDc2NzM1LCAic3RlcCI6IDg5NzgsICJ2YWx1ZSI6IDkuNDEzMjE2NzMzODY2NzQ3ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI2LjI0OTI0MDksICJzdGVwIjogOTAyOCwgInZhbHVlIjogMS4zOTg0Mjk4MTYzOTA0ODk2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI2Ljk5NTU3OTUsICJzdGVwIjogOTA3OCwgInZhbHVlIjogMS4wMDI5ODI0ODg3MjkyMDk0ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI3LjgyMDg2MzIsICJzdGVwIjogOTEyOCwgInZhbHVlIjogMy45ODMwNDY1MzE0ODYwNjc1ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI4LjYxMDc3ODYsICJzdGVwIjogOTE3OCwgInZhbHVlIjogMC4wNjI1MDAwNzQ1MDU4MDU5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI5LjM4Mzg5MDksICJzdGVwIjogOTIyOCwgInZhbHVlIjogMi43NjM0ODE5NDMyNzk3OTk3ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzMwLjI2NzMyOTUsICJzdGVwIjogOTI3OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzEuMDE4MTYzNywgInN0ZXAiOiA5MzI4LCAidmFsdWUiOiAwLjA2MjUwMDA2NzA1NTIyNTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzEuODc0OTYwMiwgInN0ZXAiOiA5Mzc4LCAidmFsdWUiOiAzLjY3MDY4NzYxNDU0MjQ1MDVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzIuNjc2NDQ4LCAic3RlcCI6IDk0MjgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzMzLjQ4OTgzMzQsICJzdGVwIjogOTQ3OCwgInZhbHVlIjogOC45NTkyNjQ1ODAyMjE2NzFlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzQuNDU3MjIyMiwgInN0ZXAiOiA5NTI4LCAidmFsdWUiOiA4LjMxNTU3MjQ4NzMyMTQ5NmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NTczNS41NjUwMzAzLCAic3RlcCI6IDk1NzgsICJ2YWx1ZSI6IDQuNjU0MzE3MjA5NDE4MjI0ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzM2Ljc0ODEyMywgInN0ZXAiOiA5NjI4LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzM3LjkyOTY0NCwgInN0ZXAiOiA5Njc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTczOS4wODA0MDU3LCAic3RlcCI6IDk3MjgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDAuMjg0MjQ4NCwgInN0ZXAiOiA5Nzc4LCAidmFsdWUiOiAxLjA5NjY4MjgzMzQzNDY3MDFlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDEuNjI3OTM1NiwgInN0ZXAiOiA5ODI4LCAidmFsdWUiOiA0Ljg5NzU5OTI1MzIzNDA3NWUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NTc0Mi44MTM1NDQ4LCAic3RlcCI6IDk4NzgsICJ2YWx1ZSI6IDYuMDk1MjIwMTYxOTI3OTgzZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ0LjAxNDU3NCwgInN0ZXAiOiA5OTI4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTc0NC45NTI4NzczLCAic3RlcCI6IDk5NzgsICJ2YWx1ZSI6IDEuMTA5NzY1NTQzMzUwMDcyZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ1Ljc2MTYxODYsICJzdGVwIjogMTAwMjgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ2LjUxNTczODcsICJzdGVwIjogMTAwNzgsICJ2YWx1ZSI6IDQuNzc4NDQ3NjAyODgyMjYzZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ3LjM3MDg4NjMsICJzdGVwIjogMTAxMjgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ4LjE1Njk5NTMsICJzdGVwIjogMTAxNzgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDguOTE3MzY2MywgInN0ZXAiOiAxMDIyOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDkuNjc4NTAxNCwgInN0ZXAiOiAxMDI3OCwgInZhbHVlIjogMC4xMjV9XX19XQ==","headers":[["content-type","application/json"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2":{"data":"d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2":{"data":"d09GMgABAAAAACoMAA4AAAAAUsQAACm2AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu5A1nULg14AATYCJAOHNgQgBYJ+ByAbIkSzoqzwsjiKkj2aj6JicZf9lwnmGDrzUL5ooaWgICnvqxcvLU1UUm052dq0PPEbkDL7t7A4c3dKponrEu8IjX2Sy0PoX9DLJNk9AHsAO6uC0MkqVZH48wM/t95fEVEDtBGpESMixmDAqNgYMLpGpmSIhFWEFSiIoIiFRIli3p2nHuksZyTDeXbXshPuAKlMlW53Zbg7HZue7/8N06wSlnxFE+rSAhYVkmR44D5FCo4yXQlcOX/hZsHaQuZYMcQ8fkufGldr+uACwqKNzkSGPbR7G1BVUZ3KOl0lGRYOQuDT2zTbfVpvBF5fojuuchvk6YE73cxV6dJS//W/1qu/X2vQGiTZDshHKx3JCpgmIwjIGl8FXKUCLIGkY12AuaMOqUzRXNWnLQmqS1HWqdIFnu/vG79/2raDcUAPMPAMtn38TkB/ouZjIAEmGGgThZmsWZkYwdIwtsYh6+N7ZqYra0NPaN1poDFKzhjB6Ep9/G4ZTnWidqQaNBB6+Y1RoPACsDkUTvsZQJjzgUiWDJEtGyJXLgQLC6JIEUSJMohOPVAu+QiBQAHTADNAgAKRDAGmosIAZt317VxBcvfkGAZI7h0THA6SB/jHRYIkDOBDaNj+e8ZEAjtwbBhGLXC2MFFLe6nWKwp1sS6WQ4VY39XdhkP/X4wChWLH4FC8KPFQDqMIiLjGjWJFabOIvvgn/jQ7N9ClKlWDRqlUq8XUxVp68cWGQ7/D+N36//YNN54bY0H9DUgUJtSPLQYOF25C9jvokMOOOE6FOg0EmrQR6dJnwJA1G3YcOXNB4obCkxdvvmrUqtfgksuuuOqa68ZNmDTlhpvue+ChRx6bteiVJa8t+2DFqjXrdnyE0M5bMIiE6TpAn6hZohBCyQ4q+IddgvVd259GlFOFNmHm+YZlbrMiWMMWJJCru+Uaj9zimRu8ySnLbXUJGnkTtMtp5Aqu4hquY1x71htzeI55LOCF9rJti3iFJbzGB6xgFWtY1zbasoktbGs7bfiYRnjlVP+hPoJCwSt7WIClnW8Rc4Vu7tDP12bBMR5M8483PCX8SrDD5C1uOcErZ0QkQ1pGyk5TrDylKDth8BBmTIBbLvMnBPCBG9uCt+WBq3CUc5cOYxpP8BQzexSGw49L58kUZJkbrABr2IJMeXnZ7NTgV8uoR4P2sg2LeIUlvK6OqM1GXCxzhxXBGrYgowwvsYhXWMLrdWPYEEahxosAu8OGlMtrXNyHhK8kWMUa1veMxZ95BFGHRjTRCLGDHexgBzsEexZimY2sYA1bh5RM5GSge4rzwqVs5y8Zi3iFJbzWPsS0glWsYV0g5P5oijmKkp9O3nw7kCfXGOc3/jcHxSZ3fc4WRHYgzYszl8Xt4s0nAnMbv+OWL1BmKuw9jcgRaflYdnZg5ZSinHQinwkpJtdyISq/Exs8UN0JBvTnxrwgTdysfiY754dWTK8Zted21jPU8/6ErTbDLJtDyepp3/I79jzdpwqjW9NkvFDxcrFn8ct7uyI/Nw20ef7NquSYG/mY2X3qX1lrwCxM5fcKo/9ELfnuZQg72j1T/muh/JezBlNxFtf0x58eYNG3oste6z3I1ae4pvIFyU8FzkQfejHes5fRm2qnDgIE807LfcaTOpsEUuLOw/wOZH8rylWi04VRGvkSdfjzXLcqGTZ0Ft8w4B8+d+iZ6+vzC6o0sWYSH/HEcH5jFetUsY0j935Npssg79F/4F6kHQmLa1Ms9Va9TLCHGVYlSVrgX3FCh77jG/+4Jd/AaEir86/WBqxJDUpC15D5baQ+bKJ1eAepuz3VUvN2vN56JxY2PSZ7AvMVJjZbZ/Wx571F+emsX0bLt4pUr261+xXWRibmZHFmW+n8uPjvZqdsHgYZaJrhAxFfgsQCHC4IflcVRfA32n6HYSjRwEGbwf3enCUJ1lCaXS7DmStZbirwzBVR+dinOD+oRqNDmr4ru+S145atI/8AunlBIbSLGGJIJak5i3JACQcVcEjEYbGU5XRcLiqKUhehoTBteejIiagkXcXpyU9fbgbyMRfHQjaWR5G4utgTpnSBQYJorrJxU4inHKgK8paDj7yKT2w/DkNMHU5SPxJDTCOU0qSUSznisnEoE/8JmHQT1n2PIabN4DRLObdnXsB5mYtY9Bq75SrGB+vQ4jU5EEAghAngKCphl/AJZwLlKIuirBh1UQiiaB15BevihAMRhOCDC/6lVKU1hC2fEJFAgwk0MkS4y81DLM9ndsFgDx65EKVUlLIqoko1UQkRQBgBhEPYRZxEAe6EEg8UHHAltutriGyg55hs2Ia9sP/pma3UcvNIgV4p7wPbWtuZ49ms4+I6jtZ3MR7rbeZo5+bGbm7taB/butgGVl5gXjGwzjQ6od7j9jgoKgIO/FOeB1A6gBbqD5oWvarVQfERMeBEXNJTXfov3YSsODZL10PI5bawcHipoWJqco0AdmG0Fahzlbqh2bDXCVXlnj+0tNzjd9JFoCEQNgJSIKK4OEEIjqMBwZ4QEBpHObSmwc1GiBZw3z09nPr16TVg0ElDThk+b/Qg+WyPShErzpjTzjjrnPNQEMJkgNr64xos6Fd0dVDm386rLwuJ+xGaHfI4sBiwjhfOBls4WgIeLDgTDv4A7DVuCsBDrgW0NfsYPDw0GIp54gptJc57XPaBKXbA6vAwxIFpZegI/5mdcMcTaz75i6gWUtyJxViaCOMl8bJ4BfwBPBFvhj8Cf9eCM/39C7yAR2e1EZPuemrdZ1JcdhbCi+OlD61TG8kfuUI0b+DMKZD/KL48Ms+I/9/7//zvc+8ypk6ZOG5Aj0fefn1zjikFLImVsdORlv+39+LZLrn3l/f7z5Fr2hNPzZiVJ98zc56bt+AFloK/wve6UJENm7Zs21HsI25A+fEeyGIo1rRLVExwDJpyHe7F9bgLuyt34z7cgwdxMB7C43hAeQLH40m8iAeVl3A/XsYbeApv4i2cgLfxPl7AB/gQJ+EjfI5XlS9wCr7Ej3hb+Qmn4mf8gU/wJ/7Cafgb/+MrZcAZSkrfq2UFjzO9ZWtpG4+z1HjC4xw13vE4V433PM7zTmY+8CwAzgeTOQ48F4ALwWQeaT6PS9TJgh6Xq5NFPa7wTtaQ1vS4Up2s63G1OjnC4xp1cpfHteqCM9mu+6jLZofKv/gMfuhW3pPiAU17HJjlQVDfAHEIQIeI+YlHYKEhpagtUCaan7BRoLDQThEoqCOLAJWzHoFQz5cnRaEgTFRYKkwRY+WMAUjjWkaXIJEwAoNOLUHcfDGMY644+bMo8P1hJLwSUN+asKZZ45uRjo1YMxyWKxyRtHwY9rOgmds0CKCF/jl3i3nj6npwDKJXOkiXSZbceUDhogx++TB31vdN6ZQnaxvAQgPbYXpfy/I6Gby5BrrAfAo57tf9GfB1tVXWWnuVU4GpY37ByDQpciH9rs9Fkp9P443DfcLcV8x96yyufmrJu5efcMIUsxvuc0q7GNZjpZHyRPs5yF+Nft3+yuA/6LcH2dFJjHAgZXAZJRIrN6goNldD9qlBbULVGSsaoh5oEK2LNnEsNozxNUMUkOcgY6GEwOWgXGdoIAytWzkWqXKsImVogtwlQ6QN8eIy43KaUgRlyCHLph1r2AI9X9Vp3ZzH4o1zI21kn+12int3NZc1cRD+pVws+BcrisPZ0GTWgzeWRs/8GTt0dqHtPLTxTW/D3C0Nb4WbLdHYNhtN3WpYVp50ki+pRNOGEQ3TGe1XMQgbZqEtbIgFv2GLob7lvxkOXHOrQVt7Ed5GWJeVDTwqrq9hZ66xSVL3jemdwJRJq1wbKtXMS5RsB3cd4wyxAPKkX7WsRqr4UBTVodqIhaMvIjaz6kPjla6hfx8DZaTPbfjoYxyuhqsJPQaOci4eSa7i9dxYeCq5d1aMAgpd2LR+JNLCmbR5fPmVlgbeuLah8bWrk7zjSbyg6uCwN0H2uIb1gvYbHvHHMPI78fT26Z1plmlY57237cR6slAinFkaTXsr8XAewr3w+momYZWzR5msF3pxUIdK5nei6fZM+2y4iu7NclQfbX/3oD9FtSFZjeVptS5YHdzJpO576objZkvUXNJktpdTQegVeg9Gzh5ZHQS/LZxulgBukUUnpQKlD+SqF0CN6zCTvb0ge2b2lOwzluW4B5tBiBIDlsULM1QhKCo1EytKj8N4somh9ur6hh11ciy3r59QPI4gw49GNFn7I8lyUorpYmXFzjZFpH0JWquDrEFBcpBGa8utTlysjL+82uit732iQ1pvhaCa2QM5MSLq0N1X7EzVecMmY510zPNyN+SKrEi8nktuL5OjLasS13VMy/usRnKieE17mxmz4I7q9uTejhz0H6VBrCCLktoO4Do0xSxgGguASIz1eDdRMHGDBqJH4xrWmfZU8FnFQKiplhMeNcfLAY7wkEeRkvNbHPtl1GhoqSMIr8zRc08vrfOrukNlnsFPH3XFAWJRHPJeKKpxULH9tiq5HwhfRkoogqAEVPNr/U1Gk4S0wo9pUSYUzhMD/Z2cKSKASmK6Q7XiprYN2yaK7MTN1lDiefZgXJDF/FFdp5SsqD0xumuYK3gTM/jD5bS40vIY0TEdlLp2etK4TCObfadRkLW26S3ICt+EabwQUb0NORjj9tOjnxs9HEXZAQfv8IxenpliLP26MSoQ+VEge76lti+2vQJFXjSImMBJx3JeyRNABXcr0jrwoOmkSCj8ow+n2qIquDBOM1bkfmRHQZxO66uEndYiMWz7Wg36SDwGTvrpVJ8M7WmLNRxIrMPxKynGGUzRXKIms/m16TyC3OwSC+PaSZzFqBVyXQfkAhKw2ODi0Q8bbOFZraQiMZYMOa193XxYXDO9SYRoLxcBkkPjzs36WsU8toTC1kPSKODcxrQN0RLjyLRGYOq4RmBPnDyqCNoi6dBIdQVIUEBK9wQVShR91SyrUlkWFbtzj5w13eK2As0rWE45U5zMAT982YojPiwMPrBKstKUGlMj0jMV1NsIworbxO3YX6FkvXjDXT7YnZ3giY5LPcMPCo4JoQPHhjEHWyI9+H5kBI7Jr2I9+t5IFpk+4lFZEfygX9jxrUCfWGTElirbElcxYKGs4GLzWiohxwyNi6K+CBbpYRU7/8WdHX+A4hbFFXkIf6XuFwodK7Yp3qX/QYZY7RAXjpn9tdnMGVqD4r83BTShxhFk7Dv29m2sUZsWbUA4pKLGbZGPPGjI6EQSrONDR103OGFBrMZiGP51aOrYVpprLdmIMnevqUA2g4lab3f2wt2O2dnVeztEQE1HIkZidCiJdDJyMNBV7+HYdDObwZ7Io2AGeZJ3vZI0s6ySFSg6wXlk+wuh4bCgL9DfL3KcmAxvo1uxtLlzSB2goNAWmSKvqtfOGRGdWHg5LkLOzkKGmFn7ZBPmULKaYlwt8nV4/YmGVWnhwAKUXjXS6hV2Zg4G3yG1GZvVT1HEQKvDK9Aw2sW1jP4ifj2x2E0Xs0YplhtsVEaRClGNl8uQ0ajYNQNZTdgRXNBE6H5tp+sv+fGrxNvsO8tz2cRj/q1d2Wwww4mV7VyCv4jm9lg6286I6NMyFpQcNGkvq4V2YYfaLZ7JhmUUSmamR0s+GYRiflL54FlmOlIgQaViIWKS5x0zaZlBvRgnzfLxqi/GMpaVV4zXW5ZliWVFPcc4jOTBaAJPjASuIvbLZ1nM4fZNaLjU2PHUB7gvgIBQ2o7YEXhLu61A6t80krAiF4C/rBsYkkz3cjJLN5ImOOVew3WXBhKDoQQaQKkbtzRiE4uO+8PY360dkcjskaGdYYSpzm3aQL6oE0RWUkwm4xF5qQuD65N63/eKXzz4u6tQLNff6J3+Pzu8epPi2nvxmg/2jtrxzyjFPQ2OngprCtnURD3WVrXyKG7A35twsKlr/wOzogN5v/vQdGLK8sTFvtKHU4iq1MYIm1X7BZJuSBdjr0b+u8bfnfoTinmaT5k/1TdA1T/TxdPvpXOrEzPMoCxgcGHhjMB8x8sx8bvfbsonBSSQXDyoLnbuXru+J1xpdK1Cr5PPnl0WvNt+55HIux+P5ROZGXRKMBWw3xpZw31lFcM9ZVYFw91l5SM9pRNYPTMrprG1gY2esTVRy9TKWC73eMFoT2n5SFeFFWuop6JyuLdoAq1laa+ZUmCnZ2rFNLUyRL6V2irFxZTagkVBMHOoPszIzbqRdHJ+7kL306mqkdG8KKf/FImxpT+kc0Zf/m9lQ+6gzbxAL29iwqg6srYOFNtQ90gGIhRv6x5tp9arZBlkbU00sHEEAUKEdM3Fg3OQ6ria3PrRoFhfq7kqvPumstzxzts1UVqNBXpbGqk16Ffgp72c3fnVsFhXq7GM3n0dJU842nW3Krre5kz8TMhrRi2BCOmGDoV4TjNNiHpLKFA5hXjBkDLD0cY8r3hWoi0cjgYep2FpjUKNdCy9QAguM+odFI1MkpGkd9/gLkRGvIeO/9Q31SG9zJxKtrCkks3NvFytLL1c4X7agjzr2AKYxngq/2u4t/tLB7WPW/V/3aVf2qh9eInzAT20EL8WVF/AGb9T4XTvXuQkyMt7UujbngtyYL12Z/67H43aaunvH+kVwGRFKuRnvFpPq3n/z8JtRtTbglobagyI11CaImkRXpQwfyopytNaPibl3FJw/jp26UZQcn+AUsrRpNGkG5Kbm4vCq9flXVJCPUPjGJ6Ln0+Abte+3s1eXXldMvf5/V8n9h1QLzVB4aHsIemDyp6ponaIZtzTbWSjLOHN65SGvPf0nCl0qiy7JyOIEkArzU5LzmWGfr8MWoSJXembqN3bYqOx8afH3/K9KU9ZfZdZviZpyBX28Qzd4c4SbL6wiLYaolRFd4V6x1THJ8ZWgZkIryKBV1XR7M7cFgaM847Rad1UFZpa6pnkG2zv7nC8n0pOPRumSlUJ66Zf+bn0fO6fRX51c9+IaG9qBNPPOzzaz4ceIfOK7BHi4uwRSHH3oPVQaKASY8GMbJhaZ39fkbb7Nq+08m1FKg8MhzNo7bY8FrD3ecTfOW4RZFmdWBPV6eMe1ZaUyGgECk3nnjhhJmJHDywORgFbGTsZrRXgGsPsgahmdMQ2vQyRYuA5Xmrae65DN0h7sMWG4ok4KiDjXxZm5zYfXSXb1vt4OdnZWnH660mrmXq6lXu6uXO4Wv4GQYSLOOffo9JNtzRrObPAks7q9u9C9wV6cuBuUVxFkPGWmjGHgyZJj5o6jx3mpxITCFPHbg6HcW7w+evm6JLO7zOW3X/i7rQKjT127kIblxyX0Ifzhbs/f/Xmz1YYZsdy5poW2qm6k6WdDr9gHI7NuAm62Uq8gUcN5VfHRBVExgzlZRkX8JAD2LE/HAIPboVHdPnvj5LKGkyd5Vr4iXAkFyH0hCCPe9MowWdvltGnA2Pc0mbBsWqVf0ubB8SNkqw9ZmsMBU9e+F+dR+yrEmcpK6O4vnYeeR+5U/6yqaQwgyOP81M9Oal8atDgoenDPt3jw+PAEXf9UdXY5VXkuf2biyunwWA50YjVs/cUsGPTX7u8jC5nkIxISmbyua+FSS+jE/6Sk99B+rnr0j1NOsizwMVqA+GBK2jFH5Lb+4TSCmOTTrSvwrL36vDmwKCl5S+B1/rgogJKTGsme7aSg7WDEkztY6D0fHgEn0tS5t7Glq0jWwvK4R7B/m7B8RFgbdnc3/H4HtTmnot5E41hyZseDobhz+l7g0xV8L1jYkF4MTN8cbmFY+UyI+K1+tPieXoyw+XjoeCCB6V9uePj7A9uX83k5FFwWb640GAqOXrxvNRwswnMWC00WUiOMHoyPYz547Da/bGxoXsLli3fdn9vaujcgWUYBoR16412zz+J+Utl8/t+oHFfuBPTosLC03MjESFwuXHxUa5SnOfe9fEBwj9WOlyTLcKfRFo/YjIosdXZuqw7OUSiC68JHs3+JTo1Jjg0Lj55D7ScM8iJnlpBnio/8z8k5F36J7S55SuT9ThXKSg9MiYymWpnWe5bfPiv3eaHk9dl5r8MCKVUPi87tocPT3QDu57r49eVrl/62gX22LGJT0dE0H+rCrX9QGmqojAn+Tea4z40hwn3WDrInR/TkasbswdHpIfbjPuoMGFMmffZdM+Vtzt5lNuVkw/D+QcOnb3C/92jf+bMa2+x3y7sPZO9hgcczMUrV1jJfOjgV+WvnklrmPj8Zo88dgzD8+Sr2SlQyJ8oB5x6+dsxYNsbA+hjBw/gjh0CeKPtovVtRYBof2lM1/C9tSPzs7LQKujAcoX8MwSKrg8+ChF0YVmzKCxuoP3pxdJTfy5+hnwDWzsPkrWLub68T2z7M8+8e1v3LjyHE4cdBATvGYVrt19hvOSpA01bczBdFsK8Vrg7FsbijsEADuQPBsZ133mnwI7H9ITWhxarM4c0oktKjxYJG4PKnFOgO2LFBxHxFx4FpW1wHcAI/cdxeOPhtzVkgg8hBYa5BIdU98r2B1eB8b7fy0dvt4XEH1IAHGB5YsJZJyfWlPA/GmmdwSxN5hCBmT8DfkK7RxS/Snenw1px7Zs/YkjCaR5aaSaj3zuprM3I63UIZ26SGz2WN7xaDPENDIPxkM65TuqFp/eu6bkJod5qa3SfcF+YWwgBs33/7hy/fyYgmSsYJ1qeNbMZ0Zr43kfHJnM0PKkpNjMlmhjI7L75WeV/PHtNfF9onnbAXZ2A7LCEQRCvuRVTNOKHaTwvP+ztSPHO1PZH5AEH8tChQFRQEzN2I9nauJOMTSikagoJJIWJ8Wev3zlra8q/qn0wtyRR9GFnvdtX+ufp0FCbb2+zIGlZCpt5sW4MJNhBhwLgQAHEVojsSTGlt2bse6J7no0NPZo+q3CGaunqlaOaCmvyp32sSR6pmsG/5YkgVktkT4utvHmq/z5y76r8Oaqji3eKXugveSIYH+hM/bVR1PRKmItvFbH+V0RpTvQoCs/WFNvFoMV3nG6I7w2nx/aA6azQf8tKUz1B0X/kAbvIzUELSx+89/ogBo9toHeHFKqFXtWgFz4B4wN/lw/eGQnJE2T+Aeyiwu9AZtfU6lH8v82MzsB8TdoEITgvKKITlL4e7T/WoxZ5S54owJblVtuk0gKXjhDC9GLFsp1+Vu5OTk3/mGqWN3B0Ils7GqureBIXjlhLrpCe1P6+cL9w1i9xIEAQbUdz9iC5GoB0nRnn5bnL0nrPjFUsXrlKeKpg1Szb5to44UcEPfv6yIW7yORt+auDTTWawX8UiPyA9rv3Qll0jiism1EG46misjExATPil0cDhu8td1KsdPT26Axw/jhvQlAXMDqoOUmaIGnJL7SagCagGu92aEppLCf5PXtraCT4aszFSZUmTxE7p68FVzYENnPG/m/f3QocAuvQ0CDG3Wdnnoyg78xdPvvhrJpWh62UfTGSMrt8xvOM14c5zGa9OnjxjAJufBTkbzcQ0NtzyxfcL7ivz6A3GrS1Os6onl2GiwvoOyNPzsy8ZPP2DQA7ksSVy+s1NhnavW0WRMtAh3nkyrn39Q6Zul1Npro2NDsYzNhDCX1WFzq/39SLXOpFZpFsxNnb3n78SOXkbJP01r3NKzLP5JZFF2fkr8m9u/e+S/rSa6SLHyEHhjiHBNdCu/xASCWoG2KLU/WtyvYU96iWAp2Y5q6dJtzygx+bT+b23k3Kkd08nE3c/P3Ylwk7YMof3pbx4GFrelZuaQWrMLD59iNGR0X1XqGssilm6kZTXEWNqVBTT297MOXfXFyKCtoxqQnhD8bjoiKVzP0SEsPvXY+NYoLg5w0UAtPequsY318cxcfiR/CiSqJqI2qxaqPfTO7rQiaPFEbqHuYHBqyn3l/opLCCr4wK3vmCyD5/iAePTJ9MZqyNoXGWMyPoUoRnHf1cJ7Ug5PKQ+Mynn3zv78u7p9DDIxPtzawjraP9b0R4N87E2BwONHexST342sRZ2dvA0yH+IIgRyAR7K30DW+swW5s0O5sZdU0nK6KugzVB4/TfCmA+69o40ml0be5c9Mj4XFv3qZ66Fj8vFwo1iAXM1PhgFtXDwymgN6+vTlrgZHc7f3eznGuTHH+fkeBgg5wzf/+DKx42d7Js7lzxePDouqfV7Ykpq7tXPcBrsinMzjktISeFFtmfNByinhlnbKWmcoonbCSrsKC5Il/PX8LJN/sQad9AId0WyLqqFNATSLiHSR0yBfILgat35n+Yh/9bLno6N7hINAwXZjCZ+tMqkT0403r+5qkOO2MT+9b8QhsfQw0LCyIVyoDQy3am/wywrYzFdHZGRrR1rLW1RDC6W/jYCWYWBA0zW7qlbZiVJRwhjVjtWTF+Mxz3HN1/C97G+G37wbkmRrEsMFVIYq6+asPHp+NOthbUdmQlWljGhrvVxPiCgHC0SyJFsUj1yIjM45CBlNyqkwnhiSzVukMVtAsZteVDeTHTCqYqGnpmitRkoIJgH+gKE7ZB8hYxKsMpIbBOK+yXPJEHa0qhFIZYKl2SB+wiFLM7rbH/nn/O8WftCGDHoOSSuRe5nEou9na1sPJ0AwpusE6yOvJCZh+uj+l8xETWBiNbDnxNj/ZdO9QWnyQEbEH+HeM3NCem+qzar95obbt+s3sEE0CNcHLwDAc/J39qhKMDlRECJ3Ly9bvbarQtpa2VWpvsPT0QJ3lkYm9+9vn2g2vtjY1+VOkD/ghFUdUVn4y4SsjmsRvvsyOp7h/7Z8eNN+DHzg5fEd0e8dAS0wGjODVtt9Bg/3FNFc0xdDirCuE4AUguzal19uSYu1ZeK9+7dSNMJ/W5pxdGi52tU6/mL5+5TSJm6Z5SYY5/s9ILbwT9ty4J07A/7OK6ubJ3Q9cOLINk8BjXWifsRmY+Yj0Q/voJ80VOHrBj+K/n3sZnx9/KSIxCYEDefunnx+WJtTtDDPqw/X49B3f7+vza06u3Fpxb5RIJK/7qyY4kK0NlMzdn47rEer+Ic44WFBezdswc2L8T/llcbWj2yD79yvPTna0/h77AgI6dE9nexcdCAy9Yh7n29FlsRHrUXWRuD7fR2sIZW5wcb58j56Zkd81Ka95QgzmnGqsUcL3HByJJ+tpOJqpqPZ6MGG5GhrSPWzAQRCT+YKHA5lSewMf6msrVjKx3hevfOacLw21VGuKY48n20Q1+sZY1Bzzffjx+Ovckwy56aNHUpSY6pjabmVgeEJp8rg3M1HQxa5huOTNPkpUl1cXc1MPFxtadtHVq0OOrEuwqbV7eGTJ7t9biXxGlLV8nCcuazpBn01V4nZxD9mgh/aP02J7xhph9zn/t5SFafAeYfiHM/oHM3wrA1qGguPTtuvN2Pxse199jHiF4ghDG+tPUL0+Uh3gjSOgTSh4Rqm7kRA3oD9fzC9eNpfYJxX3t9DLcNmR1W/vJ+IRy70TxUOq7L8EpwljfVXA50Jn833px03pJbX79PDL/HdlpK+dj5qSFkvPxzkoOV6x0XholbpbUFtXOCh9B49mamV0MenTHmROx3XRadDdxrMfeP5qPHiXpT/UHrbgN7rUTlScql/kPCg0AW/wxt+wEb2pOHIWcGevrnx4f46LUFtSmpDwSMAKawd+icxt9D3SEai1JKSLK/RxROc2+sg6JOq8kFPHKILCmUOBALkCV9K/W+4TNAbfi3rkiC1UxuNbsGTgD91Vks/bpqJrzu9ALlIDH8NSs3E7OR7W9WPgO+Hkv/rXiqeQaVNXCk/EA8Q16CazfYbnpYYysVCToaGhOGp2WlxoO9lyfyq+I5Qv16SvAf7Z5F756nf+pAk4y/ld5ObWWMY6Y6uqaZpqrrOJeqnQem5ok26/BxsG0wcYh/l96ojhajqziF285LylJvH2jY5ojGCq4+u74wvkE8elRQx7+WHpfMEk8vOsvHc5v8OCs0vO55yEFCkQF0DDHkzlsbvVbp42mwosfvCtydf3BXIOLHGC/KzQwI0Hc6lk33AzyayooxOkp8Cz+nWHOML714Fmlx2QeFk/msJVKmZYGzgfYZv6gtpXuNKGpo6+mrr0XqR5u7h6squ4eOvGQvZ4eiGbddtU0UgtGFQH/czz+71GoOaWf0v643ZOLFbQ7HTndNfcc3NIIDT+7nIRZW+Z5RbkpqYONJdln85CgabR5cFi0+il9tSP3QbF7/0B1FpnXw8woPCGvPDnuVEvhiaEuVK3+069bG82XHVUOpMYdM9ZXDYTTnTadL2wjB/oyod0wJlIrSzeL0ZVUVdmXxMjOITJ1mGGtiZxt8ZevOtNDnQ+VqhwvFQy3didb27uTYUnZRN0ptSQnN+l0X25lTx806r5YerEp0E33liEYkVoMsfbxNCWiuVY4dOScu3gu8ef6WkyzX1VVnbm8tWj21b827xXAoiD4lz9i7Pyt6nDQYjeJA37Ral/z+2QzEgCOrwXrb0HKMxeDvr9vUI3stCJywO4bN4ga0VrhO7BrfX8fo9rG96L565FJbRBtB7ClAVBGNYMFdGyA3WMjyFI5EBJi1Iqvhj1Zg/iC46vlHVeL0BKCbBBiF/IOQrbRY1ttECCa0Y9GZVA5qQwp6XBKGXaNTAkcCHQtaj/PArPCh2g6gfHlVmC567tXujMaK9K9qNYqim+pkw9qyeVW/pUPLzAzPzoIjC8lgeXyxtG1y8cCzZIVGI8YWJ4a4+jpaKmFKG9Y6rHJMoq6PKuoyw8VdXlOUZfXLJ3wrX9tCKUjCCzXP47uhqVPkksscwZ/DlDMm7VMeISS5dNJlWvkePomQAWebJZvA0vZGNbSyD4SEEptFVmItWQJ66Ova5VI2xPXng2PYC1uWWopVIYg9J2IS1iurSxSLHKzQpKd6kjYSEXC1iqSaw/Lw1duUDxkuzqPkvWOPvouljdBFpe94/SldWOqtTZ8YPcFIf8fW1L7P+Do/F5uNSqdoQY5O7809tJrR21BllZP12bBoB/UT3IF/fE+xgeMpsFe1RiuracaiQjXPktPJbOJVyxOgVXdi+URwMn5vceXwwjRHJN9jGWUxZl+CSEaz/5h5vw0YOHc7Nep+3CmkeKYRmmM8JclsvyKzljBBvoOY81EUVc4vzwV3AbV9qvfkgPa1mOdJJPn7xVQHmapzhPXtuYocCeGE7ePeeyHpi84VueWO095rAlFfQdOiGu9pyiOYEhDgfYjzNYAhwM0YP9Yc6jmwWRQrT+aAytaA9kRYLN9LgdAub3vYYE4m7zZisvRXP3SfhsNtOmxf5jEroHpCEAtg39O2HTw4SAIDT1scgjDmwI7BwFioZlex7GL+PR+Z5eYAgCPfYFlAXh9XN74T+X/51MWTBELwQEFUMD4gIEbYMozKs9AWAXEbF/fb6kgbWUYVollpEUVo3aLajeg9g2+3YhlsWUYT/wPZdah2kGq+dAp3yhWSZFBkhG/82ss92X0wwJG0AINQdCH71PtFibSQ4JOE6TZahU2BUn1l2Pjw2x7ALYuJafrcevqcloW8YDz1Fg+vb9KkNW1JIe6cCKRvWMU72POihWHt6arb0bbZt6+xryXzMR1XWyjv6DYRYi2L1DtJevQkVT9QKyBp2ZSqtWQ6KXRbJi1bFFNiUnLYdJIrOINmVbFvKUICzkRIZydZyEq5GSMPopqqWiNxcRHym+Nbe4rQzvO4aTXbFzA09+TboJEGgbQ84FtoodK4GD45VHoKuhhIqs1CWxTAnsx52aDMzCQ1dmAWq/xGVlwq2WK6l+wbzQZbs2GgoEqJaPZ8YhftPSXXCX6BbePSuo226ApjX0C4peCOiCh/gVyHxc8EuM6SuRTfzEf50M1I8Y9l3d7I79zQ8Foiklr4toqGbY8Jq1YdKhijSf4jbWQ6k+pcVJifSm+80LjSEpEeSuszCOW/5lUQ8xqzqrqMIl3Cvq2/MjACDqnWkU2fiG0Bh4tRk17Q7itkxlHJFPiP1oogCVUQIA5LKAOS800frEEAeawsNSLpqmGqSaT3Tl3tFR0SbXFdGUYimhesYS9Odo0rKnCmMZMHNUT1UxxE1HSTx4mh2oOeLC82drUrJ3CmDZF2GuFATQ0BPhBBVEOsBCA6UBArQgHAaYQAg1pHAB2AsddEdx8dkVhR98VTVTMoTG7Yh1QyHE+ZeSh8nJ1i6koTMli0IQKEwdPjQpVp+FZiiLwMwTv2VqkQMrc+AZGs4uHiHXiwWI1HiPBxoMo3+JRAhhxMFmZIShrxveFm088Fg0isn0oL1CnRTeYkVp+7mO07cw4TETHnZxYTZk/Jn+BwhKuzE6MUMdtNk2gYJFB3pNYx9mxZsqcAxJzx1ptUvlZcFlJF2QG","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2":{"data":"d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2":{"data":"d09GMgABAAAAADBAAA4AAAAAWSgAAC/nAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCvtU5E8Lg14AATYCJAOHNgQgBYMKByAbzkqzoqzvGjeKSs5nUZTtzWj2XyXwZOjNKyMiImBY6zWKNWA4InKyCXHjC4uVkc/4jsPk6tWO0dBIYh7RfvvZ2xfNC6JEQBvBRsACoSVa6XxUtYSUCCLyUMJGxQYVRREVMb/RPwqiaO3/++ju6jlvgdCDQkS1EtguC4OoERR+EIr4ZoID9KtY027T2QGFC8Sv3Wdr/ZL9V7XGmSLf7eVq1V0NM8fgyzEnvgOVQLoTJHeOBOnpy033erpXvoAXNLb//7rMVtfPikfHmhw/mzsrxFN0S6eXEzdVikojDfjPtwysJR4vzhKPJzAOEfRLwFWQSiyarXJStOlSlGlLxmrvXfu0V2RVV2FkMjP5L5lJPmT3mHIAoFJEoSpsHaOtc/Xd3n97Iqt3cLdZiriXiEgIUqQLI3uXfvxtVWfBTplCeE5blssTmOjrTLc6eFqS0E7GBITAcXnvmyMwrLEPos8VEi8eki4dkikTkiMHki8fUqgY0uYowhmfIAgBgAWACwFAkHgIAMMW+5COOsbUFmSvjI8IBtlrI3yCQPYmj6hQkEUCAN9CU914dUQo0IBckjoaBEapySreYP2mPI4vu7Ctb1pjaFwYc+NO0+4EQcNznUNId7Wu3T171HjWc3pRSfcur/xpY6KxduwohWEOw3scHykWzHNjqODCuJM1d17PSlpRcJT6uiWhYGIRWGOd9TbYaLMtttthJ3UatOy21z77GTNhyoIVazbsHebIiQs3larUqHXGqDHjJpx1znkXXHTJZdfdcNMtt93zxLynFry05JXX3njro08Qjcwh0SJuN769JN0jCRFE0RbcSOLTqq2JPbW1P2kQp59nDPOB0QRjHIQN7GZtnzcc8hvHvOMyBRbng+pIqkODMRp7YxjHBM7inHE/zzzALB7iEeaMx/ngCebxFAtYwiu8xhu8Nd7lN+/xGz4YH/POpwp0rc/FO9tym3IYR3qOINPILK28sjsf7c2Ce06QKhgUnwpMW3RYaEiZYx8Rp1wTsnampKyXHjM5KZGfNiRs4nTw2OclDwKAGFj4IDkbT/wahVo+0yTcwV1MY+bU4ii4mKE+iXyGeccIMMZB2Nl9RXGKV+KqItSg1nicd55gHk+xcGomw3xkBGMchB2K8RhPMI+nWFg0ZkLMYds44aGwKcUS8Aqv8QZvT03GTRY+qlGHBosLNWjiDu5iGjOJTKYUWQCWs7ZJmkMp44Rp6UW8Al7jDd5KVJ0QW5XLDudLpuX5xOy8oZOfPIotI5jkM6f8BknPcxyMvMQmjpO7mgmT+mD7zDmcHK0SQzIgKbeZn6NWObkoPxfU5z6kKoMQE2zEtEQC5C9XHJAnLWTzHb+8lFfKCzyNyx9cj9eZ9QW/5X1Fg/eD1l9g+WcM4tR38iWpaXdZDeQ9+jhY7u1f/e3J/QoZt+VFE8ou12lY/hTr88U/UW8AiHfCtzb8ZT/LTf8lCqG8S/mGH8nuWpe/N0PX1F2k2IzqNnG9f7O7kd9kMe/zenXcZZ1jyQsufj5LmYub+jjtOZ2PacXDz9W8zFdsALD8Hi+qpbhVT4Tl5rxKJY3elpMpzZnfwhHcFGXy3Y2fIpa1Zat0uMBH4oUfveKDd+j5/YQNll/vVb7lyg/oskXm5F5K8WVf6p32MV740dM/Cc59Dh/cm8JythXCbrzlmPwiBmcnet7w/x/lX9a48Gb1A8jzjh8QPFVibqx9WubB9/9rvuVwfdmqbvnK4FouF+bljr48mMKUDcuLbrR8ymyeozMcbTn7skwOe2uvc73ivkvygS7xe3kV0fWy/JI/ryvB8rxQZtmeJH7LLA+IMyHchQn8RWNrbECyyQ50GvaVifoMyTAGyzMNXMGKLQX2rMwxcBVnrlYrCFynUp31Guas5owFm730lt0xZhQnhJ22JSmSIjnIWcSEtSxjHfOsZ2QDk6kxw2Zm2sKStjOyg8VpMJsmM2ixrN0sbQ9z7WWWfSxGnykMmMowJrGvbDSQ4tZIbMCYLVPZs4Aj0zkznwvTuTJHgaQe8Twp1ZByRz1PSh1YTgPLOROIjDqHcH7VeC64jOy625A7ZjDcmwJZ7ptD8ThQwhMLaF6OTrLkLaxeFp14xPPE8cCS+FJcQ0khj6BCTFBjKduZsJMJu2IcxbIxiE4SJCAxYhLX1ipuDDlIEqlEmEgeZgdGDjGLQ4ysmAkN0ST73OERiogJxaMj5SpIakg8EiceiXviTkNKgiiSUI8IohMT1G4LkG6ELRz/zgdkl3Z2KV+Rl1kbM4ZjvFlQD79AXxFMjrS2jTnHWOuU7DnZwpRP0bHnMyzMcs6yPihNRFQ3JSFnHWMQT0256hZhCKz9vzuTwaabAvw8QJ1oz9hGt0SHRIBll6EAGCEvAQQ51/AKgtCyyCg4tnEWpsEEAzSpnSTRkh0Hyqc204Zg1u5Qno6ypXZpuR2bQPYVSBaUBQIUgQF+D18wmiAWNA8D6DQwcKj36u3B0K1Lpx69julzXH87OkN2b5+QIFKUQScNOWWYCAERtwIALmErQwbkZ+Z2gHZJw/B3fPvbEQqlaWAdv65dYHiqhSEgoLw5Bf4HvquGDorQiwCAdMAcpHjTCwMv5fcVSlvCAOg6pGYKQIMiEmkAbClax9+z51111xtfLKOtzaZf7U/6013FFWUVFRSVFdcqainqKUYpHlfmLy8jgqJs2/nEF1wz7a2vUK2PFyhKK8p3qLnolt/zimQuYeQiWP5zxfcj7xit/0/9J3pYikQJYkXx5GDj8x/PSiAwi43ADrh2MSSfXh+a7oypk+uRz5DpjrumzbgnS7b7Hpj10CNzcuSeaNc7T7533vvNBx8V+IQFANDhvcN1QC57BYYiUkBSWzGCNhyHl9qP0xjAeQhxAVcwql5FOq65dznuNHAGM3iIKTzCHDLwGAu4g2d4jiy8wGvcV98gB2/dLxL3K5CLb/gdL/EH/kQe/sJ/eKf+jwJ1Wfmko318UKihM5QzfVCkEx/7oEQnfvJBqU784oMyTXELZUsflGuK24rtX1CJHbEzarA7dkc99sbeaMD+OACNOApHoRl34S60VL4EHxzRlTc/B7RCCLTGLB/1Mj43oF+08HEO9cl+Pxr+DRC3IYssieX8I2QYSicSiBjub1G0sFGJs1RQiS5FIGaI7RD3wggdtDVEjBhLR0pBboIDoEgknIZ24jAchLlpKE9WI/ySrE5yqEP61Qg0XYwA+K6b4x6/4bGw7FpLNLCoWacXj+Uo65icZAV0wv9g/qK1a+/ptkSmJNeyt+OS7MU0bbTOwCiw8Y2byrEZLdngAgM2rdTGwnAa9TUwuyUWY/jdeplHwDeS81iWTnKeWpDE+IA+GTXGCfMfp85F+3h4tyC8nxpXiVHcFWfJoZleGFEVR4wwOeM21siDx7x5HZD9mFKJjCClRCYmX4vD0mRHXKyAYHLt1Ve3XuZm2LoYCpQycIS99jSgB4zkuEKABrMJamFAsTDxzmnH3jMjZRkKT8ct2WyZtFhLw2B2jhH6qMxLE0Shy9693ptc+baB+dtpZ28Td6DiR7SogHG6iKkmLajt86QvKdDfbx3KePzrFl9mYtUH7HnRQc2KgQAj395kZRv/qJmmItcKPFdtY430ZuR1S3PWbJIlGeahAM2IGuyjfqOlQHkDQd5aqa2qtTGzCL7/0r6w9VmvQHBoDMob25vKDGmsideq9jVWNTWfdwlkkI9jZ5mr7M1oJq/9Q0ZLotJbxWRVqBxWvOQCUU8gCi2u/sWgyIJJIXo/ikpUNF5lTbJrdhc0Zqae+b8IgV2iDkJ2b57j9mZhYt5CM4Ve5CQBKXKntBe9DxSq4ROdKGZ7DhifAw4atwrXNtYGgdGv6n+l8JD75Fz2QRYfpVMsJGXuDLc1copPUsKVco8jSOhGDPCa9o19fr0+5XRidXHtYUyFNmeH/nbgWzi+1DC2Wf0aKwtupdXh2purKltu5mbaUzb/wJ/tDB595xokRQOCU3CuMIAylGZk4xAMhEMurw5vRFwEUuNbh7Kmgpb+0jWIzGWuGpeb4V2Xl0Slm+w9+kophiUqSycVTekL8FDapWZiu+3CqGDZaJifDgrPD/Jc2gpRwTkYliIsXKqSpLgZIANcJfPFnCqemYKR5Nropqo2iKKtMR0G2a2nS3otCUc7Ye4HqhlqNMjGyTfU1tL2OIQJjd5l6/OKtIVqGESF2cCCZKzmJfXJ0UPb4NznlNf6p5X4Kwi6b1xRSi0TSITurGUv+QS2Id4qiXsBvGRhlNP29E9jhcTOKcUnUdP5yyXGM4dhcgKqk1jt+5IQoiFxJ21hsK4ngQQpL4XAquMzSZ5RQEYhxkNwFGSLoR9LFzt24HnWKqqkmxfSXPeuYaCWuoYXrmEXNfkb4VzMd9kSyegY/Uihij2+t3qZ0xBv7JqjfATQFGECXGBQLygbZvhYYIdciw8KdG9ZtLBt2Gnf9Ud3eocCjINhtkoV3fyuppgiJEhqDAyLQrPApveRJYlBAxAtHlAYQOFw++P+Wy9zl9m6fyWJtfqe5htfpCxBgp3MXZZKH5ufcAVHD0PxQkjFvbWx3QXf6L2FWmKJvezyDaUqh/4ApynK93jIOLcpPMPUATwrD4YiJkaI5ue1axchmXYwmhRdo6TUTPrtaa/Jn8LDT/rb6SzT0DeTYZYDM60Lz+/OMP2eIB45yl1y/H6KMLy8XzkE26URQVzDc9PUq+MKThyG/lGIB7AindfQNzV/4XmlG+ISlQHIYzkKPID0f3lEWfPJTF3ZR7Q7U30gSD5QK+3xqwe1DXDb4Nz+TPGEDBLoQv2XA0f7CNCqZgBTzz2IhX2lI0gIPMOg6BiTYS/lIN3uQxuTOXScyqzkCKPaqmt011kgAXbUXNbyKQpSbYqy/HiDWqZtoFDstBLjBFKe2M/x9v4BNIKJQIRiiScyrtS0AlYyH12t+H9ALQ9rSrBPH0SNXBA+HznUhPV3KV7a3TFqO5KtH2m1rV0L+TvJt7E+kW0safRPVW2h1u0Yqt5Le+qhe7ZL1/Ey03V5/3DKDNY+8alw512dUVkNwrgHDUfnZDlkqI7nAvmaLru7exdcPci9+XdMed+7OABjliVpnDTmuajF3mvjjT2jhh9OlbmzWuSK52v1L53tYrrBP6ggNY3VoUZQH8RAr50dOCPZM/6CUZDQdgOViGVTTRuQUvRd7v0yDiXRov/+1svcnG+uO/yYogFJ/lf9JccQEY+gjKmKqs265pK+gZlZgoAQ/KakHBRH85rafiMsTReioDLOYxU1Okbjo0dJkznpFSKsDiCykB3vnQzIR506ydi7WUyiLoNhA9LHwha/ypgIpg1q5i5FAPGaUrdIGr2LJt+rMY4MDg7XPK036QppIcJKd7/UUz5N8dqlr7R3sSdoUJqG6Mi3sldQg4M5KbJwnMM8bWk+NevdUVsPF/dBBpDM12Kqrl/o3dneDK2Kpx7puNMTD6e2mae+0xjmJBB128pEfVuLA99epZSbFyQZi4PRpPbJxbhDcxoQMYl2oVszH+K9PCv05ofs/WJOa6KOCor3mGY5mzB3XH4JW7gYevTs0eee3JjeyR6+lbIo5On0op/uZc3miPJRg7JP/m1H3Af9eysofbtGodLPWpTkrVIXXW7JHZAqtjczHn5wAXHA18CGh1i7wm1acMlFoCMdC3Amoaaiqiird/MnF+Z7SyeQfLKVGamYsDxzD0wtT4qD9xspJa4vDKswRFaUXBJ1wl2Lh+ZgaK87jQQEnM+9CYO3g8D87seYFrJ6FO758bvaZN45wOs4ARlYReOQn1M8GqtOQJxHX21B2xkihgcxv4KkC58uBNfqsi/eUgk9KU5lwi67BG9y6nXdt/fSnqvfEGRtM2Z1NOXtFYGRLwRt8G133ySQByexjzOQqbwM/ZgvzNilNoxc8pALhi0NRxlVEufkJOw5Td9mxtU2j7ngXpCuDrV2CgGL33Npn8uellCLX7DycKn+7+r6sqr6N1J5yw8M/SlVwK89Ul535J9aqaiYpCueSSrm5BXftL8EKrYr/53m8Tds46XQ7QJS/3U32VMZx77M6Hj4cFBy7ZOKdQuV8mVfOedPUSt8m7yIMFSRwQyl2Tkn8oKLY7TrKZ6sY69mJgRK58qVL3RIdb9njIoYGVGN0SgFHcsCxdmrcbikh5pGNuVkD/cm4ThU3kdNdmOVjhw/kEKy1HP9pou8vRmWNDPKQR2fA0gP+fgwLJ+QE3HxMWoy+QCraHggFceiil5qGlmXVXCyf28KyeKAuw7SR54+DEuaOcWkSo4B8voJZcH66Wm4S9zf0wAMUjmjd8rDD240NcykhjGPPprqwDnoxDFqCq3vZkmFx59JjjmSDW2y/9f3Nf28YRTWnzuNJ9DrFz2m2UR1JKe7fyiRn8EJSi6m4qdUGw3vgTrfQAuGv5uVjZ6NMA6kfAoO+qeZPquALBPFN0MivOOIuWxiU9SLuHgK+uduoJa34yZhV+TgFepq5Ma0B2Uj5R+nh2Bjo5lchD2K0FJ9jR6Qjt8YVRMKzRoII3t8mnBn2oE0nhd30C2VCNvmVKN/SC2I36LlWMFPPZShtCAV7gEbO9gFCgP5FjdHVnt71LVxzwjQlP1MIkvkimRqTornrFqCHwrzsjXz0DED/yGPf93wE8+92rAt6ag6RbUDHglO49P/Uj8hY5rhqu+b1dlbn5JG8cjvlN8IE5qh8m87jJibmTbZ7Dg4QPrvPKWQdHxO6e1GJXYkGJFo5yhZ5ON3Vy+C8wjb+1ZGrsIJuUuKMHJEokia7uHe08MrYYUIC3xwBj7Ryi8cAlZ2wZ2XoVnEMH5wj9PNPX/zvpPz/YnzIIu3xULWcAErhhUpzApE4agljxc5BNxT3BcTaARPP2UP03wLexN3ea7zOE6NFJuU/jKFx/DCc+rgMJCFsXnhOBX31jPTGDHpWWm4AGBn+ftJ2ZrLWlYjWlZZ4jHb8NurW+5fG0y/eR2ePD1z76HsMS1hcYh2KhpGF1m8u/znUmLTuB/NzpNHeimx8Zl+KBUPnBWrZ+fED0RjIxS2OQl2i4bEmlZdw3JfzN7n5opwBOpIMJ1jZgieiitcJ7fhu685F6j+ikN6UTX5Wpql7qg3UtWBcgBZWm+t97DQgTjS8bPcBrrDhmp3ezDs3Lc1et/VrTul/5SqnYADWXtpwXkD0RouOx2HqYGcCyveXccTeH6RM8BIqh/L0jTbadJBdWGfIS+dw/345mNepiUzLLYmHCeiE63sFGZkXGEoSsYnGiirlBje/vnuWIjqK1iRDL/AbHcUjBrKYHtEmrFZp6kVikDtySbzzHRWae6XJxmZuB9f+UG9RQTKtehEZyVsIauKNa55iPnvZv90xN2hO12oRoQlbgjs9sKJpIEpdk0wL/nETnegpO74V3HscYJM+c6ZhFW3YN8qtY1yrSre+zfKHVGBLfdK7AhF0T8JMmUaKGnVFGjXsSLcTgS5WRokhYrFM13soh2xD8oI4x4+BfyjP68Oom585ib7KFc01h3v53FYsuaP/Zymb9M3OGrjLxZ7weSr+GEUfJhlmttXQkQioYjZSG+tNZ8fTEcFRJZPlipdR46U405UkEV2DDblVADvTWEP8RTH//fzNVOSOhwi97ysDXpwr5VsVIH963Mg01WvfQ/NtVyStfcfvEZcJCS7K3RuLWa4PR0+uZd0LIoIJDlX/WRk/bXbvYB0QUrpI2jMJJlfTby+NXqwk08eHN0v8zyuC3aLzQ4eg+cL19hDvOmfAR5r3E/TQjmTK94sXetxZK6HvNPlnER2dEhmNFZp4EDqQDonnBUQHJRMWgFgzJvesKhHfUnOIa6nCD+Ty7AVw4wbq2YYmkAh3cJfgLI0ztr6UgpNkP5VXv2PRA35EPl0yVwRriVdbdx+vOXDEA9DcFKoIXmRbqSytzphO6rms7yjz8CDtVSV18qnGWmchhMDlRj2Em3eDnhKrimzxCLkms9a3veG3RGZlsKMCUEJfkEN2n2zAsPBC0a+kqFDqISYTY3/TKulxBhVi9ZxG08QN/DXd9x7Y4z80soUPE75V24dl19IHLzS9rAc3SMlBu82MJJrBEiYiGq9tto19p4IDr+a9zkLpHGq9zhovBb2BOMnVf624OdtfB7PPGdeHmfECkuEKAH3tvHTYGX7g3M2S5VWIXHy9eT3o4XyNqtngN/UItfkqJjtWVC2GxT72b5hsv2PxhbntT/GeINeQRlXr80h0n1TqVlAwohiViBLL/AsZZGXYpWQZSscB0tBAXErNfpPcgM5TserbUWkXVPkFH6AfynQfmL/bboZEt4uJzq4S7Xkyeq5SpyN79XmqPHeEtrky7ULZXiC9Kfs+uWWDA6anpodvBhew+KPz9wrvOn1X37sa9aF+sv13DyxhOy6VHwYQGPQdG66IOy/78ZiJnlwNyPid3IjOVnbuVlaaHck/jYuIu6mh4sflrChWzNt9w74J1Gu1c6Wt7maOGLvtRw/D+I05W+pDf+Lp8BxU0sfU3Pe7CJ4BV9e868w8gbvVuxY9GVNwXsBlF2p46ZyktKLs7AygPpMrMSRcePj++pWZfG/0uPKR7965xKZxB1h0BQ5eQLo2YUV6SgPnc5khwuqbphW7TBZKZMuvuwSSod+9ygm8uBlRPQ1Sso40NJb6pTweDqYz/KvcCT449vRZlfkmvXBmjzIyHys9FKX9QqXEPcSvJ5xixmZT0YZkfPcuvyBQlxLnh6UPcLIfAp7YfXPEw82kwe7+NGDV+DsBXxCt09u+48j1B1A79w3JaW7cHFV52Af9ZUq9toQuYK0oo+6ZvA0bOjI7Nn0Tv2J9YP7SF2k/u7AG+OpafCc/fz4xfr7jc7i424bxG1ybsH7JmW5JrJs/R7vuJ9yzU9kamB957tRrn3emFStUGB4JgyYvwaPCkZUO4Dxe1qY4NCZMKnaca593gQoTo4yn59sfZjU/rAF/q5JkK1JAOXhJyW31twGUbD8+qr8LlyChgapWfQ+6QuvJ4BpR3d3DXNFzqjEVcxMBDTX9IqblsGoB49PctoPSZFMJWe59wvtUYP9LtO1z/KgTxTE9KQdPOwN+62lBZ3F9OupCcRl7FqyOrmbOwKi4L3ppaO4EfcvkC6JBfXbEOV+DYG4B0f1Wz7cffQoDsAt2VZf4W26O2qMknI9BhyfrO7rLgFEDhrLO/STXafDbyz99TavEPfim/O9PYACwjPccREx9kjy4gY3rEuJis4FawXB0WL63cwkYhi7p/rtEHG7oJMfmVo4jqvxyZeUcxtFEkRJULMfaqLEH7X7sbuyGQcS7Tm23+G74DpeUuItmnBbm+iLORlEFz47SxshtCnaDOvLvIqs25n4CM6t9Duk6/EwFAluC4mu5i2NbNgvlhzWBbEM3b5u6ZIuXqpMu5eTv1s72m7Glaj5C7lGRbHdxQJfSJe8YGzvAxsFqcES0q2keGIcu+Wviuti6q2SvyPx501yCJry0rT3DfUoa8VpeKhWvlDglpk5iL2JKl+rSzhWdkRAlPg3BeA2HNVu+3V3ZRO5Ak/8wb0HUoKR4oYzuBZV3OKfiZ4UxVyzNOYWVhKdOPYkzYsk4o6ACJaGmZNaw2sLZm5s4fS54FHk0gwy3lqsB+OCuqNHspCODk+s0mgmXaae9XNcQY5T/G3mlhpnfPHiOLR/L07ZH1nHlyED14QKU90+fL1lF3wVloa5XSACab3dknG5pRewLypxkLWqPXkHt+H6GcFgzNXh6CkbR35uC+GJWlMkfRPujMReY4U6x3qgHuzVTKuUEjEntUDae7dMXvmRUVyHy2+qX9JOJAw6BV7767LMc9HFUud/OdUS/Obq/z8VF+McdKnU4Q9WFae7lvm54rlhKEWXHh1X6E04ELWufuc5UVQnc2ZcfKE3LiQuL0qOwP5t0oKj+dSbGYnEOPZKcKeLuPpPOkAQl106Bs1d4CQi2VSENvjjJhxe50jZU9qMc4iJOVhdZTGC3VIUQ7rdD9+wB05P7MO1SLRIOU9O1OcX3Drrc8eQZEOUhbb6oTocXe0i0CmoxnnE+CPYhKttaQNeTTQbZMc32wDIJkfUNGIlc5hYzRHmq46rf7KinqWU/D7ShTrQrTFcfQqQZYDPIeSCdDd/pBuxXFI3OkqPbm6sJ4eTvWOrr5mHEX3o+SRuGAanyBAfT1RqDytntVXJV6RLJsNaN0hQzMyVAtg12jzdIBTUwMwIaT4vXXJelQy3A1MyLuMGXDXLPxM5Joo6e3ADyfCglS5xkRzQTssUV+5v+z7o/lfaa+95ZXGtArae1hDsawOJSq1xhQdalVS8TdprWyXVVquftGqtNF5bAV9OrMl/dnIlVebKUOWWyoVzKsvhKrRzpQUbptav/pxNmSG0Dbli1a/scJLtZlftRObwqrPwvsZdtuaAdNkmG+5OuTp5qUJYCG7eUfmZ3yd3x9KYm1tBFSubo6/8TWFJy9rVWzbqvv4mhtIXxWsnXXxN6cUqWgrfkYECtyV7BwyxK7hvzlVA5N9zBhu5CosKdy85h+mxKjRNFX4hA+J0leamsMYdpZ/5x2TvWhmJ5VRQOWWP6Ss/yd3Z5hHgB2b3Gez2S3OFKJlIEI4aHjiQS6h0RTUSYm2XpotwDBHkfNhad8/+g/4hPB8Y6utkVImfk/1lsbnZDferih1bnL4O79LdUVOErHsfiGdPTxxZofpOpPYhZkXZOLuIGarCiJsZzYoR37Qo2vQiY2XFjepjgcJMd1xLvrLMXqITxZFNcDpE7r6g7pDvDUK+6YN84wEUtl7+qeztVtmmJoV/pW9K/DpP7sbnp6mDY0AJ8Ij3xiG4vkMsbeXf6rJNsE87dCz7LL6Kc5ObcoNLW7JX2NLt+dWHFf2iopqKUsIrh+JFeBzlxQzUhpYfr1hpzzzMK7WU8YyNqC5J2foyghNufLclIQhH4YfJZQtiCewIo9vNcUE4Gj9KLp0H5UzZpuonL+7+KZGkJX90t0Si1i6dsxo6OyUSd8gf3SmRRHpzdwpobFqH1Mj2vcLInBrJ/DUCut9O887dc/P1ZfWw+1feXEBz+NtrxtVhINvuS07XOwTWqHKnkydNj2kaGCp+2GLNtwjBB/bpGV/PAFYnNSj7eIxawuYidAe/eMW8MkxNzqxOxDloJIrjz7B0C+bYGCiwIj9Q6rd3qUnUsL1M9kgjS23p/u0SFQwjV2HMBmB3OrCn1LNffNHbuondvPh1TGzzWKjefHrWduya0a4qXIaPPGJ30T0EE3eeNKFi3NBOriwBsq2ehwNyRSll8v+z+RRTcwddopeifO6ejMQdTDmLxrDps5EkwVmJW8voAmkCmz4XxTqukbi65OVy4yI+ieQuFzuKX5a8seRx6No4MEawFPdag+hz2NjJLiIgNgG7kyJGE7tDIXujFMXclgiz3/K2kcEIPpGSgRJwVhU9caejJitZL/6go65cicshwm9/jIkL7DoZO6JGjZRvXQfRMx0tfADJnqtwlJiSvPna0/H6eTwEFrswl0xVZkba/K3oZGIMG8+3E/AvsbPSHt2IzJUzf3fPTiRNhO6wKqDZWAEUkKrSKOEbdN0sVU1VaO4shr3CZm6BrYBiaEfR2ayniyvTSsAQeevlt2jvPUwUgYa+ZLFkSTFwJk/j0NZWX+SOUqqQNxa2NPogD5RRluRrucdoq7qtxSG3XeY71O1tYcOSvYdUjbt281Ht5hjpmmjtpg6q+A8VqVoVaGswEER6bvC0YRoL9b/qgIXJQj0wovqrUlEsKkgm+VATapK+Xy5LBIkoXzPQQc57fCynt4XJOzcxvFvikpOJ4miSOyWmVid6I04jhQ6nZaEYVJUYXLtNR11L23G/N8uniGQPIPc7vN265gjIvNLyFdJtNtBHyokRsnsT7ZTSCHNSq50fEZrfhnItTA7PDnP1n4C4I/XrPeLF/4IpdnHl4y9RZeIgdmUQjs7CHm3et/+2wf/oorYWdBukyeNswqc/vJrAQZ1kMW+mgR9zVjULPjQ0+NnO75LK8QqTgNWzV4pw6ySrjmLA7ZyeqsbFuPUaq5qiz+2+d83kNN3NMMIUmRPCcI4fzZLqYxxsiKyQMJLtBYY9zGDrVn8vd8eYCFYEy8Ml0hl5oKwwnssp4Hf9uDGIj+Oz1zmdnJFzA5E+jrbSVb/2b+5f/NavyhmbmZ6CoDBwUHOXJ7m/018z2C5b27Lv4T7Zml0G/H5zpbhhtxlYZ5VgTrJIDSebxZl5Z8RakL//ASkWCRZgJt6JoywSG2on3gYcI70G9y0qMcTJM4vuKcRtnBafcbTm7vKWSHo8u8dufHFfi45Q7cj/KEjBepNXkalfI0lE+keg8kPp/LZyQ2zGMFPZHmOsGY7Pkf5ds44tUQEKosFtqz/BXfjwkjPOSC+a/BRYLgnqGiNis4P+E65KAIUX67gp7Ni04mgM90XMV4d42dG3RwPiUAvuP8mqpLm2/WAezNkZVF6pGaZC73g7dhyfROFGWnUBJmHIp8CTYeevHlhRvSfG1WSXu7ajhms83epgkCX2J3JrxMvAEMTj0BnnbbY9pwW4HPUcpxfRj/x36vEiMO2YfnZxDtgPlQZy7Ib4YjX/nBhFwajdXsm0reciTkH9ycZPufm86HM03VJWYFqSHzigpt3Gajvy8mP3DVbroxYjHY2Nn25AXGcY05Fm7GC/+9TOEKK3aUczwy3Hg2Hh4wSarwWDa7dGsByluproL7LSiXH8nM+fYpfmf1/IzcT1ODQUiwLqPldqBd1J9rE7uV2/aX5Xde50umbwm6ldyb2kUnz5Br+HU5A6JiRSSKInCudB++XhG4qnr0upbwXo2J888HzRsnflv91wC9a9svRFjht9qjKh9E5IOuWKJNWO39hC+ZJbjA4jZ+Wrb6GiW9GJlFvyTitXUXZuO1FFz9zmeGM0+FsTnubb8wljBb1rpyTTC4mpeYUxlivsvyQt6Cyk30hLJEaxd6I7XSSxq3U4QD0jbxg34+NLxARrdC/JplzY6IeOYGGtA2VPSRMpj5h4Aksjja0VgZ8ibJrj6UEtftLszhNvUdu4kXfY+DsyRvf4mj/ff6LLNXk54CkDkD5I5LPY4mVBXLcB9OG74n01FboZxYyeUVwD616Zx6GzkRs9Tz6dI5LQiWTjeW4uP344yY0eFJXmRvSRS0P3pOhqX9OJQIloIkzF9djcD3IWGi+2/VOsauUq0qbtTUYhWJcUFVHiTeSSLs3LjEmQ7EsjOoJxIenCG8lhfaVab+JovXrNf3Awyp1l7usI6npfORUorOdEdx3BlWAHAndnHHJMS3awjoi0Q4fTEh1sI8I9bPe6qqiZG1i57NLZqGZhBFqvF5ih8dkua+6IFrbYEgrB8RRmSFKhM5J7EaCNWu1XhoGspMDLWFgomy2VPcwTrloAzgNJL+PoCql8yYwhftyqF0CS9TSJKJUq4AWIOG7K84BV/Uwia2RrVhwblm5c+9WnxpfOqZephGhnfYHWf8kuUWH2Vv7Bh2XIDmEhjta+AXbAkDuZkfwiQ+CYVQc8L9ED8UkMawezwFLo8Y+ytb9pYdvLFRE0Y4oBMzY7O5xwJRKVSK3h8jFoEX/aufLXKZBIPC6d1y+R1LmXpSX7FjlUrlDqCFjliVrRveuqFxMkkqKk8qJhr2ehimyNCjgxtvd1SZd0AttLdiTWK8J1ABmgLGV9KZXmsG2h6BVWWmLZP5IueegS00DmpY6A5i+fNIndXrGhHFdexOLvqCrRz60Vp8h0PRrtRMHo9AY3gdjrOdEvscPDjZPsvn/+CLIyEZOo/Qs5RAVwXfhxmWxvmcE3U8PIEOWt0ZVSa4jYFoqWkNIiy35OuuRRvcENmZVCaMpYZe1OJpUXxbv4mBUjndpWu3G9U1SImC83KIsTKH1q9kIvskNhEufWtd8ittO7/KB7biGll2zXRZmS5zXeILCZ79Ljs8fCVjLTcdopZh0rnt9//HTeZ1XK8Gc2dhq/99ip7VtwoieRRchfFgxRcIo3kUmWn+KLYOlGtpyQsdFfMt1vRU/D+g0cxBKe++fouffTmsouoJ8dXXJfKtNS69g/B0LSsnAEObG/IQNFobJUkmcl0LxDkY6dFVXXSVt/UPc9rLq8kpXB/I+we2Fl5oMCoyvIQeT4Ey3/4PI+RqGhxE3apwdXy53RHsutFANNtxR7e2f/3cbQOjg52D9ZMSSZ7ggRJpSwXKMgLRxN+LenJhHcZKI0huRBSW80clTH/jiwPSkWRaK8mMtntXXU1ffZ7vey2nwBtdNWyze23aJutNvVMUptm9keuLjfdL9jUHwxOYycMNCdjlJQ1iCjdJtE6MzAix+3sFIebHA51GaJ95yQvGmTuZ/qXlsnis6FWgfB4Y76cdma8dCU/x8fubn+x6H/iVV8xub3PwHW4v8DgIqvdERahyHE9aXgbljnxv/837uxaQVWxk0bwaybmhuAdbqY9zrMvrnx0FD19gvgTvPGbsHYquV3Dkp2KzJ6hwxYXI+O3shA609g+pV2T60Pge812lty5TowKpsm4KoNoV9V22lUpZR13dpxIw8e+wCRjF6RvRHdqFN71WNqn3pc7aeBkSjAA4TjNWCEXgto6pk5uv0wl/jr5LKGkNZNA9v2ulHaUpoOrTPi26X84W7ozrvaAXVD+kUyl7iWF9gQqZr18tkcLdZckpS8wJxxt41IO2n7CL1W0DRgju7ippImG5QUKbc9eYHN1tXs0Mu7qZM5un02l/iZF9jU3L0sOkv6I/TMAxRFN5+7UJTcOOeV3Ulyel1VJ98o9RXTNdSY9rnGnemCakwmmcZpp1XzAhVQYS+955Zf9Oi9Quo2bgo5kL5ZpfVoGTe4NhvSddXGtSEH8vxriN/B5XmBKl0HMd1WHehQpoN7MTkCqnVdOKRALl7gJRCOxWZLIga8dgf0/wcy7dr/AVDJ93a0DNK4toCKy4CD2lEyThFTN+yHyCgg7zf7DSfcj5aZPzbP6u6FVT2UNUzafLhrRmrr2LcIVJfkkFgANPO9bNzn1Rv7mzmorOf1nxIrR11Lv3zUDsJNWN4L+vw8o72mjbVbmtKL+oc5rreX9t/mGJm+sosRIzkBSI+u1IGnk/L8V1dKjct/9OmpELV2oP6a1+0GpNdXByiRDsaA2A5B6HgnnfhjLV6v9WnZDcj3rpTE5u1kUzWQuaqEsgzXlkNxpT7R8p8eQN4Xo27Pu3F3AejFjOZ5SvNDj9/ntdqSnRmsHRhvypp+fhsvFiD16zEvgtxR1QD6ZC7DT3yhPlX67rxqZR/StvMDHsO7WrkA/PMDX+NUDoUFrNYp0rmmPz6GEHSHAQEg9th87stPo0vF9vydJrMOAAAm/8RTAwCYbda/+1vjv1m66bpIBDoCzQwB6k1rLAD61rP2f/DdAL0pnOnTqOGtAf3j9pAS64FuzzZVM6zLl8kcNV4LtJq3Y/2kkH42pcNTUIUxbWUp7WpkuoSdY29KucIf+AtS2AEyIhCGZujMqqp9oNIG0jj+zYVpfdOkaY1hnSsC9KZsTtRzu6eUqKlkd0WSsKVSG/Gzwv5mSShrjHrrlF3aMh2sjTbdxdaXtGuFNUOrOq2rPj2Tz6/+dnT56HK9zYM6padO5EOXyfLQdH7aNQnDiMUoSHoPM126tpePlSXLoAIdrLX0+4SocvGksrSyfbS5vYr4+IviS8LyiEJZc3dlLP3yyaOKZNyPWVkMUOuVdMuK07gldD6XNpYyOUbS6cSn9mCN9pkSWlI08VswoH3OtzJiXUX5MSvwawXd9iZ/1K0sDCNPllU8R4bLY4BD2UtfVvMYdf7oX72rzdb0l5z7S6E93mwJ83rMSuxcne33TPWXno1yF0Y/sTlqdBGD4UWgZYzk/upgskrV+ulOsVppVDeFpZagajhXHL0S0qzMvGi/qK3C2K4kGY6TTaq3N4RPWZjKuhcZ9a3WQKuV36pT16eM9Luq+0iqerfWuZtmd+XWXRGjPF/6S17ly6ri9ZW9wxUhajm2FveXea8JUlZo+Uf5qpGEAjaDCXWUwQv5KEc7UmK9FrYt2Xfux7NSSmdby7FVlEJIQsRSbaMMn59tJ8cyqci2kG2fJLJ1TELUOm2ijBUn2zaWXwIE4LMykuyRs20F4AACsT0KBIDGF4aKDgCuYD4RYXEFoQaeiMmK6ZB0ItlaZYJSU0c2lcPWNF1CYeJFCODHXxRF22yxdTEUGRJa4GA+pzYWyoua0CkQXG0tkJGZ5yNy9SLE+Im9qbEm5AlECWM8vYdgAbxq7RW9tJd6kQIgQ8eA2ojtdtk9VPtdriNVhxKjhNGyeaFYodbIC+Ph+VCjEyP42dzNR+jAIrIQppSoS585myhVN07cAoPln9d7C+TtAgAAAA==","headers":[["content-type","font/woff2"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/icon_bundle.svg":{"data":"PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hhbmdlX2hpc3RvcnlfMjRweCI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fbGVmdF8yNHB4Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX3JpZ2h0XzI0cHgiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjbGVhcl8yNHB4Ij48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImNsb3NlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNvbnRlbnRfY29weV8yNHB4Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRhcmtfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsM2MtNC45NywwLTksNC4wMy05LDlzNC4wMyw5LDksOXM5LTQuMDMsOS05YzAtMC40Ni0wLjA0LTAuOTItMC4xLTEuMzZjLTAuOTgsMS4zNy0yLjU4LDIuMjYtNC40LDIuMjYgYy0yLjk4LDAtNS40LTIuNDItNS40LTUuNGMwLTEuODEsMC44OS0zLjQyLDIuMjYtNC40QzEyLjkyLDMuMDQsMTIuNDYsMywxMiwzTDEyLDN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZG9uZV8yNHB4Ij48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRyYWdfaW5kaWNhdG9yXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMSAxOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTIgMiAuOSAyIDJ6bS0yLThjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wLTZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDRjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImVkaXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXJyb3JfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX2xlc3NfMjRweCI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9tb3JlXzI0cHgiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZpbHRlcl9hbHRfMjRweCI+PGc+PHBhdGggZD0iTTAsMGgyNCBNMjQsMjRIMCIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik00LjI1LDUuNjFDNi4yNyw4LjIsMTAsMTMsMTAsMTN2NmMwLDAuNTUsMC40NSwxLDEsMWgyYzAuNTUsMCwxLTAuNDUsMS0xdi02YzAsMCwzLjcyLTQuOCw1Ljc0LTcuMzkgQzIwLjI1LDQuOTUsMTkuNzgsNCwxOC45NSw0SDUuMDRDNC4yMSw0LDMuNzQsNC45NSw0LjI1LDUuNjF6Ii8+PHBhdGggZD0iTTAsMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImZsYWdfMjRweCI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl9leGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImdldF9hcHBfMjRweCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJncm91cF93b3JrXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImhlbHBfb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJpbWFnZV9zZWFyY2hfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAxM3Y3SDRWNmg1LjAyYy4wNS0uNzEuMjItMS4zOC40OC0ySDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTVsLTItMnptLTEuNSA1aC0xMWwyLjc1LTMuNTMgMS45NiAyLjM2IDIuNzUtMy41NHptMi44LTkuMTFjLjQ0LS43LjctMS41MS43LTIuMzlDMjAgNC4wMSAxNy45OSAyIDE1LjUgMlMxMSA0LjAxIDExIDYuNXMyLjAxIDQuNSA0LjQ5IDQuNWMuODggMCAxLjctLjI2IDIuMzktLjdMMjEgMTMuNDIgMjIuNDIgMTIgMTkuMyA4Ljg5ek0xNS41IDlDMTQuMTIgOSAxMyA3Ljg4IDEzIDYuNVMxNC4xMiA0IDE1LjUgNCAxOCA1LjEyIDE4IDYuNSAxNi44OCA5IDE1LjUgOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJpbmZvX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNiw5VjRsMSwwYzAuNTUsMCwxLTAuNDUsMS0xdjBjMC0wLjU1LTAuNDUtMS0xLTFIN0M2LjQ1LDIsNiwyLjQ1LDYsM3YwIGMwLDAuNTUsMC40NSwxLDEsMWwxLDB2NWMwLDEuNjYtMS4zNCwzLTMsM2gwdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJoMEMxNy4zNCwxMiwxNiwxMC42NiwxNiw5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwX291dGxpbmVfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNCw0djVjMCwxLjEyLDAuMzcsMi4xNiwxLDNIOWMwLjY1LTAuODYsMS0xLjksMS0zVjRIMTQgTTE3LDJIN0M2LjQ1LDIsNiwyLjQ1LDYsM2MwLDAuNTUsMC40NSwxLDEsMWMwLDAsMCwwLDAsMGwxLDB2NSBjMCwxLjY2LTEuMzQsMy0zLDN2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmMwLDAsMCwwLDAsMGMtMS42NiwwLTMtMS4zNC0zLTNWNGwxLDBjMCwwLDAsMCwwLDBjMC41NSwwLDEtMC40NSwxLTEgQzE4LDIuNDUsMTcuNTUsMiwxNywyTDE3LDJ6Ii8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaWdodF9tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiw3Yy0yLjc2LDAtNSwyLjI0LTUsNXMyLjI0LDUsNSw1czUtMi4yNCw1LTVTMTQuNzYsNywxMiw3TDEyLDd6IE0yLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwIGMtMC41NSwwLTEsMC40NS0xLDFTMS40NSwxMywyLDEzeiBNMjAsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDBjLTAuNTUsMC0xLDAuNDUtMSwxUzE5LjQ1LDEzLDIwLDEzeiBNMTEsMnYyIGMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xVjJjMC0wLjU1LTAuNDUtMS0xLTFTMTEsMS40NSwxMSwyeiBNMTEsMjB2MmMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xdi0yYzAtMC41NS0wLjQ1LTEtMS0xIEMxMS40NSwxOSwxMSwxOS40NSwxMSwyMHogTTUuOTksNC41OGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxbDEuMDYsMS4wNiBjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBzMC4zOS0xLjAzLDAtMS40MUw1Ljk5LDQuNTh6IE0xOC4zNiwxNi45NWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxIGwxLjA2LDEuMDZjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFMMTguMzYsMTYuOTV6IE0xOS40Miw1Ljk5YzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxIGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEwxOS40Miw1Ljk5eiBNNy4wNSwxOC4zNiBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMNy4wNSwxOC4zNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGluZV93ZWlnaHRfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0IiB4PSIwIi8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik0zLDE3aDE4di0ySDNWMTd6IE0zLDIwaDE4di0xSDNWMjB6IE0zLDEzaDE4di0zSDNWMTN6IE0zLDR2NGgxOFY0SDN6Ii8+PC9nPjwvZz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibW9yZV92ZXJ0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibm90aWZpY2F0aW9uc19ub25lXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgMjJjMS4xIDAgMi0uOSAyLTJoLTRjMCAxLjEuOSAyIDIgMnptNi02di01YzAtMy4wNy0xLjYzLTUuNjQtNC41LTYuMzJWNGMwLS44My0uNjctMS41LTEuNS0xLjVzLTEuNS42Ny0xLjUgMS41di42OEM3LjY0IDUuMzYgNiA3LjkyIDYgMTF2NWwtMiAydjFoMTZ2LTFsLTItMnptLTIgMUg4di02YzAtMi40OCAxLjUxLTQuNSA0LTQuNXM0IDIuMDIgNCA0LjV2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJwYWxldHRlXzI0cHgiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icmVmcmVzaF8yNHB4Ij48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNldHRpbmdzXzI0cHgiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX2JhY2t1cF9yZXN0b3JlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX292ZXJzY2FuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InZpc2liaWxpdHlfb2ZmXzI0cHgiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJ3YXJuaW5nXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPjwvZGVmcz48L3N2Zz4K","headers":[["content-type","image/svg+xml; charset=utf-8"]],"ok":true,"status":200,"status_text":""},"https://localhost:6006/index.js?_file_hash=c9c20ad9":{"data":"dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIG12ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHksZ3ZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLF92ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHl2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2dmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMseHZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxidmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpYnZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pmd2ZShlLHl2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIHZ2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPV92ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP212ZSh4dmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBPZHQ9SCgobF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxDSSxoRyxNZHQsRWR0LFRkdCxUeCxDZHQsQWR0LFBkdCxJZHQsTGR0LGtkdCxSZHQsTmR0LERkdCxBSTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGdsb2JhbD09Im9iamVjdCI/Z2xvYmFsOnR5cGVvZiBzZWxmPT0ib2JqZWN0Ij9zZWxmOnR5cGVvZiB0aGlzPT0ib2JqZWN0Ij90aGlzOnt9O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKCJ0c2xpYiIsWyJleHBvcnRzIl0sZnVuY3Rpb24obil7ZShyKHQscihuKSkpfSk6dHlwZW9mIFBJPT0ib2JqZWN0IiYmdHlwZW9mIFBJLmV4cG9ydHM9PSJvYmplY3QiP2Uocih0LHIoUEkuZXhwb3J0cykpKTplKHIodCkpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbiE9PXQmJih0eXBlb2YgT2JqZWN0LmNyZWF0ZT09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk6bi5fX2VzTW9kdWxlPSEwKSxmdW5jdGlvbihvLGEpe3JldHVybiBuW29dPWk/aShvLGEpOmF9fX0pKGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihuLGkpe24uX19wcm90b19fPWl9fHxmdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYobltvXT1pW29dKX07bWR0PWZ1bmN0aW9uKG4saSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiImJmkhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7dChuLGkpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPW59bi5wcm90b3R5cGU9aT09PW51bGw/T2JqZWN0LmNyZWF0ZShpKTooby5wcm90b3R5cGU9aS5wcm90b3R5cGUsbmV3IG8pfSxnZHQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obil7Zm9yKHZhciBpLG89MSxhPWFyZ3VtZW50cy5sZW5ndGg7bzxhO28rKyl7aT1hcmd1bWVudHNbb107Zm9yKHZhciBzIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJihuW3NdPWlbc10pfXJldHVybiBufSxfZHQ9ZnVuY3Rpb24obixpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKSYmaS5pbmRleE9mKGEpPDAmJihvW2FdPW5bYV0pO2lmKG4hPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgcz0wLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtzPGEubGVuZ3RoO3MrKylpLmluZGV4T2YoYVtzXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG4sYVtzXSkmJihvW2Fbc11dPW5bYVtzXV0pO3JldHVybiBvfSx5ZHQ9ZnVuY3Rpb24obixpLG8sYSl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aCxsPXM8Mz9pOmE9PT1udWxsP2E9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOmEsYztpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKWw9UmVmbGVjdC5kZWNvcmF0ZShuLGksbyxhKTtlbHNlIGZvcih2YXIgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKShjPW5bdV0pJiYobD0oczwzP2MobCk6cz4zP2MoaSxvLGwpOmMoaSxvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLG8sbCksbH0sdmR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aShvLGEsbil9fSx4ZHQ9ZnVuY3Rpb24obixpKXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG4saSl9LGJkdD1mdW5jdGlvbihuLGksbyxhKXtmdW5jdGlvbiBzKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX1yZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUocCl7dHJ5e2YoYS5uZXh0KHApKX1jYXRjaChkKXtjKGQpfX1mdW5jdGlvbiBoKHApe3RyeXtmKGEudGhyb3cocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGYocCl7cC5kb25lP2wocC52YWx1ZSk6cyhwLnZhbHVlKS50aGVuKHUsaCl9ZigoYT1hLmFwcGx5KG4saXx8W10pKS5uZXh0KCkpfSl9LHdkdD1mdW5jdGlvbihuLGkpe3ZhciBvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihsWzBdJjEpdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119LGEscyxsLGM7cmV0dXJuIGM9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBoKFtmLHBdKX19ZnVuY3Rpb24gaChmKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAsZlswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9ZlswXSYyP3MucmV0dXJuOmZbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxmWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihmPVtmWzBdJjIsbC52YWx1ZV0pLGZbMF0pe2Nhc2UgMDpjYXNlIDE6bD1mO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpmWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1mWzFdLGY9WzBdO2NvbnRpbnVlO2Nhc2UgNzpmPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGw9by50cnlzLCEobD1sLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKGZbMF09PT02fHxmWzBdPT09Mikpe289MDtjb250aW51ZX1pZihmWzBdPT09MyYmKCFsfHxmWzFdPmxbMF0mJmZbMV08bFszXSkpe28ubGFiZWw9ZlsxXTticmVha31pZihmWzBdPT09NiYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1mO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2goZik7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfWY9aS5jYWxsKG4sbyl9Y2F0Y2gocCl7Zj1bNixwXSxzPTB9ZmluYWxseXthPWw9MH1pZihmWzBdJjUpdGhyb3cgZlsxXTtyZXR1cm57dmFsdWU6ZlswXT9mWzFdOnZvaWQgMCxkb25lOiEwfX19LFNkdD1mdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBuKW8hPT0iZGVmYXVsdCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmQUkoaSxuLG8pfSxBST1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pO3ZhciBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTsoIXN8fCgiZ2V0ImluIHM/IWkuX19lc01vZHVsZTpzLndyaXRhYmxlfHxzLmNvbmZpZ3VyYWJsZSkpJiYocz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaVtvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixhLHMpfTpmdW5jdGlvbihuLGksbyxhKXthPT09dm9pZCAwJiYoYT1vKSxuW2FdPWlbb119LENJPWZ1bmN0aW9uKG4pe3ZhciBpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixvPWkmJm5baV0sYT0wO2lmKG8pcmV0dXJuIG8uY2FsbChuKTtpZihuJiZ0eXBlb2Ygbi5sZW5ndGg9PSJudW1iZXIiKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmE+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2ErK10sZG9uZTohbn19fTt0aHJvdyBuZXcgVHlwZUVycm9yKGk/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSxoRz1mdW5jdGlvbihuLGkpe3ZhciBvPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gbjt2YXIgYT1vLmNhbGwobikscyxsPVtdLGM7dHJ5e2Zvcig7KGk9PT12b2lkIDB8fGktLSA+MCkmJiEocz1hLm5leHQoKSkuZG9uZTspbC5wdXNoKHMudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sTWR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW49bi5jb25jYXQoaEcoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG59LEVkdD1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKyluKz1hcmd1bWVudHNbaV0ubGVuZ3RoO2Zvcih2YXIgYT1BcnJheShuKSxzPTAsaT0wO2k8bztpKyspZm9yKHZhciBsPWFyZ3VtZW50c1tpXSxjPTAsdT1sLmxlbmd0aDtjPHU7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFRkdD1mdW5jdGlvbihuLGksbyl7aWYob3x8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBhPTAscz1pLmxlbmd0aCxsO2E8czthKyspKGx8fCEoYSBpbiBpKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpLDAsYSkpLGxbYV09aVthXSk7cmV0dXJuIG4uY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpKX0sVHg9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBUeD8odGhpcy52PW4sdGhpcyk6bmV3IFR4KG4pfSxDZHQ9ZnVuY3Rpb24obixpLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYT1vLmFwcGx5KG4saXx8W10pLHMsbD1bXTtyZXR1cm4gcz17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxzO2Z1bmN0aW9uIGMoZyl7YVtnXSYmKHNbZ109ZnVuY3Rpb24oXyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHkseCl7bC5wdXNoKFtnLF8seSx4XSk+MXx8dShnLF8pfSl9KX1mdW5jdGlvbiB1KGcsXyl7dHJ5e2goYVtnXShfKSl9Y2F0Y2goeSl7ZChsWzBdWzNdLHkpfX1mdW5jdGlvbiBoKGcpe2cudmFsdWUgaW5zdGFuY2VvZiBUeD9Qcm9taXNlLnJlc29sdmUoZy52YWx1ZS52KS50aGVuKGYscCk6ZChsWzBdWzJdLGcpfWZ1bmN0aW9uIGYoZyl7dSgibmV4dCIsZyl9ZnVuY3Rpb24gcChnKXt1KCJ0aHJvdyIsZyl9ZnVuY3Rpb24gZChnLF8pe2coXyksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxBZHQ9ZnVuY3Rpb24obil7dmFyIGksbztyZXR1cm4gaT17fSxhKCJuZXh0IiksYSgidGhyb3ciLGZ1bmN0aW9uKHMpe3Rocm93IHN9KSxhKCJyZXR1cm4iKSxpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKHMsbCl7aVtzXT1uW3NdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6VHgobltzXShjKSksZG9uZTpzPT09InJldHVybiJ9Omw/bChjKTpjfTpsfX0sUGR0PWZ1bmN0aW9uKG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxvO3JldHVybiBpP2kuY2FsbChuKToobj10eXBlb2YgQ0k9PSJmdW5jdGlvbiI/Q0kobik6bltTeW1ib2wuaXRlcmF0b3JdKCksbz17fSxhKCJuZXh0IiksYSgidGhyb3ciKSxhKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBhKGwpe29bbF09bltsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsaCl7Yz1uW2xdKGMpLHModSxoLGMuZG9uZSxjLnZhbHVlKX0pfX1mdW5jdGlvbiBzKGwsYyx1LGgpe1Byb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKGYpe2woe3ZhbHVlOmYsZG9uZTp1fSl9LGMpfX0sSWR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwicmF3Iix7dmFsdWU6aX0pOm4ucmF3PWksbn07dmFyIHI9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppfSl9OmZ1bmN0aW9uKG4saSl7bi5kZWZhdWx0PWl9O0xkdD1mdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIGk9e307aWYobiE9bnVsbClmb3IodmFyIG8gaW4gbilvIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmQUkoaSxuLG8pO3JldHVybiByKGksbiksaX0sa2R0PWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX0sUmR0PWZ1bmN0aW9uKG4saSxvLGEpe2lmKG89PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhYTohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIG89PT0ibSI/YTpvPT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6aS5nZXQobil9LE5kdD1mdW5jdGlvbihuLGksbyxhLHMpe2lmKGE9PT0ibSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7aWYoYT09PSJhIiYmIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyIik7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiI/biE9PWl8fCFzOiFpLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBhPT09ImEiP3MuY2FsbChuLG8pOnM/cy52YWx1ZT1vOmkuc2V0KG4sbyksb30sRGR0PWZ1bmN0aW9uKG4saSl7aWYoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IiYmdHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/aT09PW46bi5oYXMoaSl9LGUoIl9fZXh0ZW5kcyIsbWR0KSxlKCJfX2Fzc2lnbiIsZ2R0KSxlKCJfX3Jlc3QiLF9kdCksZSgiX19kZWNvcmF0ZSIseWR0KSxlKCJfX3BhcmFtIix2ZHQpLGUoIl9fbWV0YWRhdGEiLHhkdCksZSgiX19hd2FpdGVyIixiZHQpLGUoIl9fZ2VuZXJhdG9yIix3ZHQpLGUoIl9fZXhwb3J0U3RhciIsU2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixNZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixFZHQpLGUoIl9fc3ByZWFkQXJyYXkiLFRkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLENkdCksZSgiX19hc3luY0RlbGVnYXRvciIsQWR0KSxlKCJfX2FzeW5jVmFsdWVzIixQZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixJZHQpLGUoIl9faW1wb3J0U3RhciIsTGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLGtkdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsUmR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixOZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRGR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxqbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxYbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixmcGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixwcGU9IlxcdTIwMDAtXFx1MjA2ZiIsZHBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2ZwZStwcGUrZHBlLGVxPSJbJ1x1MjAxOV0iLG1wZT0iWyIrWG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVmwrIl0iLGpodD0iXFxkKyIsZ3BlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrWG4rV2h0K2podCtZaStobStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLF9wZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iK1huKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix5cGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1fcGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsdnBlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIix4cGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsYnBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K3ZwZSx3cGU9Iig/OiIrW2dwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsU3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLG1wZV0uam9pbigifCIpKyIpIixNcGU9UmVnRXhwKGVxLCJnIiksRXBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK1NwZStuZnQsImciKSxUcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIseXBlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LGJwZSx4cGUsamh0LHdwZV0uam9pbigifCIpLCJnIiksQ3BlPVJlZ0V4cCgiWyIrWmh0K1huK1ZsK0dodCsiXSIpLEFwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxQcGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxJcGU9LTEsa249e307a25bVHRdPWtuW2JlXT1rbltudF09a25bQ3RdPWtuW1d0XT1rbltmZV09a25bYXRdPWtuW3NlXT1rbltRdF09ITAsa25bYnRdPWtuW010XT1rblskdF09a25bS3RdPWtuW2hlXT1rbltfdF09a25bWF09a25bZXRdPWtuW3FdPWtuW3B0XT1rblt3dF09a25bZWVdPWtuW0xlXT1rblthcl09a25bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgTHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sa3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxScGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LE5wZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxEcGU9cGFyc2VGbG9hdCxPcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCx6cGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fHpwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gRnBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBCcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gSHBlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBWcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFVwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBxcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/ZWRlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIEdwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gV3BlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBZcGUodXQsQXQpe3JldHVybiAkbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gJG4oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24ganBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgWHBlPWZxKExwZSksJHBlPWZxKGtwZSk7ZnVuY3Rpb24gS3BlKHV0KXtyZXR1cm4iXFwiK05wZVt1dF19ZnVuY3Rpb24gWnBlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBDcGUudGVzdCh1dCl9ZnVuY3Rpb24gSnBlKHV0KXtyZXR1cm4gQXBlLnRlc3QodXQpfWZ1bmN0aW9uIFFwZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIHRkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gZWRlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiByZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP2lkZSh1dCk6VnBlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9vZGUodXQpOlVwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIG5kZT1mcShScGUpO2Z1bmN0aW9uIGlkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gb2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiBhZGUodXQpe3JldHVybiB1dC5tYXRjaChUcGUpfHxbXX12YXIgc2RlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLFBwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxsZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUsY2RlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PWNkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSx1ZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PW14LnRvU3RyaW5nLGhkZT1ZNi5jYWxsKHZuKSxmZGU9Zm8uXyxwZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSxkZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsbWRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LGdkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxfZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUseWRlPUc2LmpvaW4sdmRlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLHhkZT1nZS5ub3csYmRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sd2RlPUc2LnJldmVyc2UsdnE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHhxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00sX3g9e30sU2RlPWFfKHZxKSxNZGU9YV8oVE0pLEVkZT1hXyh4cSksVGRlPWFfKGd4KSxDZGU9YV8oQ00pLHJJPWdtP2dtLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgobkkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBBZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFBkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBJZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVVtZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBMZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIGtkZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiBSZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIE5kZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gRGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPUxkZSxlXy5wcm90b3R5cGUuZGVsZXRlPWtkZSxlXy5wcm90b3R5cGUuZ2V0PVJkZSxlXy5wcm90b3R5cGUuaGFzPU5kZSxlXy5wcm90b3R5cGUuc2V0PURkZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBPZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHpkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBCZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gSGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPU9kZSxpcC5wcm90b3R5cGUuZGVsZXRlPXpkZSxpcC5wcm90b3R5cGUuZ2V0PUZkZSxpcC5wcm90b3R5cGUuaGFzPUJkZSxpcC5wcm90b3R5cGUuc2V0PUhkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBWZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gVWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gcWRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBHZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uIFdkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPVZkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVVkZSxvcC5wcm90b3R5cGUuZ2V0PXFkZSxvcC5wcm90b3R5cGUuaGFzPUdkZSxvcC5wcm90b3R5cGUuc2V0PVdkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIFlkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIGpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1ZZGUscl8ucHJvdG90eXBlLmhhcz1qZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBYZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiAkZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gS2RlKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBaZGUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIEpkZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1YZGUsZXUucHJvdG90eXBlLmRlbGV0ZT0kZGUsZXUucHJvdG90eXBlLmdldD1LZGUsZXUucHJvdG90eXBlLmhhcz1aZGUsZXUucHJvdG90eXBlLnNldD1KZGU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsbGRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gUWRlKG0sdil7cmV0dXJuIF9JKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIHRtZShtKXtyZXR1cm4gX0kocHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIGVtZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gcm1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1HbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/Um1lKG0scm1lKEosbSkpOmttZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPVdtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIG5tZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj0kbih2LFdzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBpbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gb21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1qbWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9WbWUobSk6dGdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiBhbWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIHNtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGxtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PSRuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBjbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJkxhKG0pPT1idH1mdW5jdGlvbiB1bWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gaG1lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpmbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBmbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6Qm1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxIbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBwbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8JG1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP3BkZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIGdtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFrbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiB2ZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIF9tZShtKXtpZighZWkobSkpcmV0dXJuIFFtZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXltZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24geW1lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PSRuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PSRuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gV3BlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gTG1lKFksSixUKX0pfWZ1bmN0aW9uIHZtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiB4bWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP0dwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9JG4obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBibWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiB3bWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gU21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIF9JKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19OmdzLE1tZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIEVtZShtKXtyZXR1cm4gX0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBUbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LGdzLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuICRuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOnptZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIENtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9ZGRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBBbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBQbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gSW1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIExtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBrbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiBSbWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9GcGU6ZW1lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gTm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoTXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gRG1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1qcGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgYmk9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPWVnZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gY21lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9JG4odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBPbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSxibWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIHptZT1neCYmMS9xNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP3RkZSh2KTpZcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJkptZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPU5tZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPURtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1PbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gRm1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gQm1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEhtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBYbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPVpwZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFZtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1MYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgU2RlOnJldHVybiBoZTtjYXNlIE1kZTpyZXR1cm4gcTtjYXNlIEVkZTpyZXR1cm4ga3Q7Y2FzZSBUZGU6cmV0dXJuIExlO2Nhc2UgQ2RlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gVW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gcW1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gR21lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoSzYobSkpOnt9fWZ1bmN0aW9uIFdtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4gQW1lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBQbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gSW1lKG0pfX1mdW5jdGlvbiBZbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIGptZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiAkbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciBLbWU9VzY/dXA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIFptZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiBKbWUobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBRbWUobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIHRnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIGVnZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPWdkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoTW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sWW1lKE4scmdlKHFtZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj14ZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9Wm1lKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIHJnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gbmdlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBpZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIG9nZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciBhZ2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLHNnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksbGdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIGNnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiB1Z2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gaGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gcGdlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxvbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIGRnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiBtZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiBnZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBfZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24geWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciB2Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JG4obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLHhnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPSRuKG0sT3EpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxiZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD0kbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gd2dlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6eWRlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gU2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P3JkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gTWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBFZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBUZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gQ2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIEFnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLCRuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFBnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206d2RlLmNhbGwobSl9ZnVuY3Rpb24gSWdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIExnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIGtnZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiBSZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gTmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gRGdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIE9nZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiB6Z2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBGZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gQmdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gSGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFZnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBxZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgR2dlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEseGksITApKX0pLFdnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4geGkodikmJih2PWUpLHltKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxZZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIGpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gWGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gJGdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiAkbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6JG4oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyIEtnZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksWmdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShmbShtLHhpKSl9KSxKZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShmbShtLHhpKSxrZSh2LDIpKX0pLFFnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEoZm0obSx4aSksZSx2KX0pLHQwZT1ucihacSk7ZnVuY3Rpb24gZTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gcjBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gaTBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBvMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gYTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBzMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gbDBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gYzBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gdTBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBoMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBmMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIHAwZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiBkMGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDppbWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIG0wZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBnMGU9dXB0KExwdCksXzBlPXVwdChrcHQpO2Z1bmN0aW9uIHkwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIHYwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIHgwZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/QnBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBiMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiB3MGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciBTMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxNMGU9dUkoZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/JG46VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gRTBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgVDBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBDMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBBMGUobSx2LFQpe3ZhciBOPSRlKG0pP0hwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFAwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBJMGUobSl7dmFyIHY9JGUobSk/TGZ0OndtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBMMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/UWRlOlNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIGswZShtKXt2YXIgdj0kZShtKT90bWU6RW1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIFIwZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBNSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBOMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOlRtZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEQwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST1tZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIE8wZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChKcSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LGZwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQsZnA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiAkcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgejBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxGMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIEIwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxvcCksVH1iSS5DYWNoZT1vcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gSDBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVjBlPUNtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pPyRuKHZbMF0sV3Moa2UoKSkpOiRuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoUXEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxVMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gcTBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBHMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gVzBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBZMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIGowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBYMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uICQwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiBLMGUobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIFowZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIEowZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBRMGUobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgdF9lPWRJKEVxKSxlX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxyX2U9YWZ0P1dzKGFmdCk6dW1lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJmRzKG0pfWZ1bmN0aW9uIG5fZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZMYShtKT09S3R9dmFyIGJtPV9kZXx8dUcsaV9lPXNmdD9XcyhzZnQpOmhtZTtmdW5jdGlvbiBvX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIGFfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBsX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBjX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6cG1lO2Z1bmN0aW9uIHVfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBoX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZl9lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIHBfZShtKXtpZihLbWUobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24gZF9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiBtX2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PWhkZX12YXIgZUc9Y2Z0P1dzKGNmdCk6ZG1lO2Z1bmN0aW9uIGdfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOm1tZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6Z21lO2Z1bmN0aW9uIF9fZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gdl9lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PUl0fXZhciB4X2U9ZEkoUHEpLGJfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBNSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIFFwZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxqbi50ZXN0KG0pP09wZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiB3X2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciBTX2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLEVJPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLE1fZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxFX2U9bHAod3EpO2Z1bmN0aW9uIFRfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIENfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxBX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBQX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gSV9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIExfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBrX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIFJfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIE5fZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIERfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBPX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxtcyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gel9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsYW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LHNtZSl9dmFyIEZfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKGdzKSksQl9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxIX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpfbWUobSl9ZnVuY3Rpb24gVl9lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBVX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBxX2U9dngoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLEdfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCxGbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gV19lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIFlfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OnZtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD0kbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIGpfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gWF9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiAkX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gS19lKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPXVwKFkpP3l4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIFpfZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIFFfZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gdHllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sbXMobSkpfWZ1bmN0aW9uIGV5ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLGxtZShtLHYsVCl9ZnVuY3Rpb24gbnllKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rRHBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGl5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLFhwZSkucmVwbGFjZShFcGUsIiIpfWZ1bmN0aW9uIG95ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiBheWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sJHBlKTptfWZ1bmN0aW9uIHN5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGx5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxjeWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksdXllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBoeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBmeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIHB5ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24gZHllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLGJkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiBteWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24gZ3llKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgX3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHl5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgdnllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24geHllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBieWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK0lwZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCxLcGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gd3llKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBNeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBFeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gVHllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gQ3llKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIEF5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxuZGUpOm19dmFyIFB5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP0pwZShtKT9hZGUobSk6cXBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksSXllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gTHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj8kbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24ga3llKG0pe3JldHVybiBubWUoWWwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIFJ5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIE55ZT1ocHQoKSxEeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24genllKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciBGeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxCeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEh5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89ZmRlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFZ5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgVXllPUJxKCRuKSxxeWU9QnEoZmZ0KSxHeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOnhtZShtKX1mdW5jdGlvbiBXeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIFl5ZT1wcHQoKSxqeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gWHllKCl7cmV0dXJue319ZnVuY3Rpb24gJHllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gS3llKCl7cmV0dXJuITB9ZnVuY3Rpb24gWnllKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gSnllKG0pe3JldHVybiAkZShtKT8kbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gUXllKG0pe3ZhciB2PSsrdWRlO3JldHVybiBvbihtKSt2fXZhciB0dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxldmU9SHEoImNlaWwiKSxydmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxudmU9SHEoImZsb29yIik7ZnVuY3Rpb24gaXZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGdzLEVxKTplfWZ1bmN0aW9uIG92ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gYXZlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gc3ZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGx2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxncyxQcSk6ZX1mdW5jdGlvbiBjdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciB1dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxodmU9SHEoInJvdW5kIiksZnZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gcHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGdzKTowfWZ1bmN0aW9uIGR2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9TzBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1TX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPU1fZSxHLmF0PUVfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1JeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1YMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1uZ2UsRy5jb21wYWN0PWlnZSxHLmNvbmNhdD1vZ2UsRy5jb25kPUx5ZSxHLmNvbmZvcm1zPWt5ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1wMGUsRy5jcmVhdGU9VF9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1DX2UsRy5kZWZhdWx0c0RlZXA9QV9lLEcuZGVmZXI9ejBlLEcuZGVsYXk9RjBlLEcuZGlmZmVyZW5jZT1hZ2UsRy5kaWZmZXJlbmNlQnk9c2dlLEcuZGlmZmVyZW5jZVdpdGg9bGdlLEcuZHJvcD1jZ2UsRy5kcm9wUmlnaHQ9dWdlLEcuZHJvcFJpZ2h0V2hpbGU9aGdlLEcuZHJvcFdoaWxlPWZnZSxHLmZpbGw9cGdlLEcuZmlsdGVyPW0wZSxHLmZsYXRNYXA9eTBlLEcuZmxhdE1hcERlZXA9djBlLEcuZmxhdE1hcERlcHRoPXgwZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9ZGdlLEcuZmxhdHRlbkRlcHRoPW1nZSxHLmZsaXA9QjBlLEcuZmxvdz1OeWUsRy5mbG93UmlnaHQ9RHllLEcuZnJvbVBhaXJzPWdnZSxHLmZ1bmN0aW9ucz1EX2UsRy5mdW5jdGlvbnNJbj1PX2UsRy5ncm91cEJ5PWIwZSxHLmluaXRpYWw9eWdlLEcuaW50ZXJzZWN0aW9uPXZnZSxHLmludGVyc2VjdGlvbkJ5PXhnZSxHLmludGVyc2VjdGlvbldpdGg9YmdlLEcuaW52ZXJ0PUZfZSxHLmludmVydEJ5PUJfZSxHLmludm9rZU1hcD1TMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PU0wZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9dkksRy5tYXBLZXlzPVZfZSxHLm1hcFZhbHVlcz1VX2UsRy5tYXRjaGVzPU95ZSxHLm1hdGNoZXNQcm9wZXJ0eT16eWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9cV9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1GeWUsRy5tZXRob2RPZj1CeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1WeWUsRy5vbWl0PUdfZSxHLm9taXRCeT1XX2UsRy5vbmNlPUgwZSxHLm9yZGVyQnk9RTBlLEcub3Zlcj1VeWUsRy5vdmVyQXJncz1WMGUsRy5vdmVyRXZlcnk9cXllLEcub3ZlclNvbWU9R3llLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249VDBlLEcucGljaz1ZX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj1XeWUsRy5wdWxsPUVnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PVRnZSxHLnB1bGxBbGxXaXRoPUNnZSxHLnB1bGxBdD1BZ2UsRy5yYW5nZT1ZeWUsRy5yYW5nZVJpZ2h0PWp5ZSxHLnJlYXJnPVUwZSxHLnJlamVjdD1QMGUsRy5yZW1vdmU9UGdlLEcucmVzdD1xMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1MMGUsRy5zZXQ9WF9lLEcuc2V0V2l0aD0kX2UsRy5zaHVmZmxlPWswZSxHLnNsaWNlPUlnZSxHLnNvcnRCeT1EMGUsRy5zb3J0ZWRVbmlxPXpnZSxHLnNvcnRlZFVuaXFCeT1GZ2UsRy5zcGxpdD15eWUsRy5zcHJlYWQ9RzBlLEcudGFpbD1CZ2UsRy50YWtlPUhnZSxHLnRha2VSaWdodD1WZ2UsRy50YWtlUmlnaHRXaGlsZT1VZ2UsRy50YWtlV2hpbGU9cWdlLEcudGFwPWkwZSxHLnRocm90dGxlPVcwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1KeWUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT1LX2UsRy51bmFyeT1ZMGUsRy51bmlvbj1HZ2UsRy51bmlvbkJ5PVdnZSxHLnVuaW9uV2l0aD1ZZ2UsRy51bmlxPWpnZSxHLnVuaXFCeT1YZ2UsRy51bmlxV2l0aD0kZ2UsRy51bnNldD1aX2UsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9Sl9lLEcudXBkYXRlV2l0aD1RX2UsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj10eWUsRy53aXRob3V0PUtnZSxHLndvcmRzPXNkdCxHLndyYXA9ajBlLEcueG9yPVpnZSxHLnhvckJ5PUpnZSxHLnhvcldpdGg9UWdlLEcuemlwPXQwZSxHLnppcE9iamVjdD1lMGUsRy56aXBPYmplY3REZWVwPXIwZSxHLnppcFdpdGg9bjBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD10dmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1peWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9ZXZlLEcuY2xhbXA9ZXllLEcuY2xvbmU9JDBlLEcuY2xvbmVEZWVwPVowZSxHLmNsb25lRGVlcFdpdGg9SjBlLEcuY2xvbmVXaXRoPUswZSxHLmNvbmZvcm1zVG89UTBlLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz1SeWUsRy5kaXZpZGU9cnZlLEcuZW5kc1dpdGg9b3llLEcuZXE9cnUsRy5lc2NhcGU9YXllLEcuZXNjYXBlUmVnRXhwPXN5ZSxHLmV2ZXJ5PWQwZSxHLmZpbmQ9ZzBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9UF9lLEcuZmluZExhc3Q9XzBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1JX2UsRy5mbG9vcj1udmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1MX2UsRy5mb3JJblJpZ2h0PWtfZSxHLmZvck93bj1SX2UsRy5mb3JPd25SaWdodD1OX2UsRy5nZXQ9ckcsRy5ndD10X2UsRy5ndGU9ZV9lLEcuaGFzPXpfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPXcwZSxHLmluZGV4T2Y9X2dlLEcuaW5SYW5nZT1yeWUsRy5pbnZva2U9SF9lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1yX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPW5fZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPWlfZSxHLmlzRWxlbWVudD1vX2UsRy5pc0VtcHR5PWFfZSxHLmlzRXF1YWw9c19lLEcuaXNFcXVhbFdpdGg9bF9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPWNfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPXVfZSxHLmlzTWF0Y2hXaXRoPWhfZSxHLmlzTmFOPWZfZSxHLmlzTmF0aXZlPXBfZSxHLmlzTmlsPW1fZSxHLmlzTnVsbD1kX2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9Z19lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPV9fZSxHLmlzV2Vha01hcD15X2UsRy5pc1dlYWtTZXQ9dl9lLEcuam9pbj13Z2UsRy5rZWJhYkNhc2U9bHllLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPVNnZSxHLmxvd2VyQ2FzZT1jeWUsRy5sb3dlckZpcnN0PXV5ZSxHLmx0PXhfZSxHLmx0ZT1iX2UsRy5tYXg9aXZlLEcubWF4Qnk9b3ZlLEcubWVhbj1hdmUsRy5tZWFuQnk9c3ZlLEcubWluPWx2ZSxHLm1pbkJ5PWN2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9WHllLEcuc3R1YlN0cmluZz0keWUsRy5zdHViVHJ1ZT1LeWUsRy5tdWx0aXBseT11dmUsRy5udGg9TWdlLEcubm9Db25mbGljdD1IeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPWh5ZSxHLnBhZEVuZD1meWUsRy5wYWRTdGFydD1weWUsRy5wYXJzZUludD1keWUsRy5yYW5kb209bnllLEcucmVkdWNlPUMwZSxHLnJlZHVjZVJpZ2h0PUEwZSxHLnJlcGVhdD1teWUsRy5yZXBsYWNlPWd5ZSxHLnJlc3VsdD1qX2UsRy5yb3VuZD1odmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9STBlLEcuc2l6ZT1SMGUsRy5zbmFrZUNhc2U9X3llLEcuc29tZT1OMGUsRy5zb3J0ZWRJbmRleD1MZ2UsRy5zb3J0ZWRJbmRleEJ5PWtnZSxHLnNvcnRlZEluZGV4T2Y9UmdlLEcuc29ydGVkTGFzdEluZGV4PU5nZSxHLnNvcnRlZExhc3RJbmRleEJ5PURnZSxHLnNvcnRlZExhc3RJbmRleE9mPU9nZSxHLnN0YXJ0Q2FzZT12eWUsRy5zdGFydHNXaXRoPXh5ZSxHLnN1YnRyYWN0PWZ2ZSxHLnN1bT1wdmUsRy5zdW1CeT1kdmUsRy50ZW1wbGF0ZT1ieWUsRy50aW1lcz1aeWUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9d3llLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPXdfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1TeWUsRy50cmltPU15ZSxHLnRyaW1FbmQ9RXllLEcudHJpbVN0YXJ0PVR5ZSxHLnRydW5jYXRlPUN5ZSxHLnVuZXNjYXBlPUF5ZSxHLnVuaXF1ZUlkPVF5ZSxHLnVwcGVyQ2FzZT1QeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPUFkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1QZGUsZ3IucHJvdG90eXBlLnZhbHVlPUlkZSxHLnByb3RvdHlwZS5hdD1vMGUsRy5wcm90b3R5cGUuY2hhaW49YTBlLEcucHJvdG90eXBlLmNvbW1pdD1zMGUsRy5wcm90b3R5cGUubmV4dD1sMGUsRy5wcm90b3R5cGUucGxhbnQ9dTBlLEcucHJvdG90eXBlLnJldmVyc2U9aDBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWYwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPWMwZSksR30sbW09c2RlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sYXEuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gcF90KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGYyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHAyZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGZfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09aDJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgaDJlLHZzLGRfdD1NKCgpPT57aDJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1wX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWYyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXAyZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Zl90KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Zl90KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9cF90fSk7dmFyIGttPU0oKCk9PntkX3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBTdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIE12dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgRXZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsVHZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSpBdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKkF2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoQ3Z0KmUpKS8yfXZhciBDdnQsQXZ0LFB2dD1NKCgpPT57Q3Z0PU1hdGguUEksQXZ0PUN2dC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgSXZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgTHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTxhU2U/REwqKGUtPW9TZSkqZStzU2U6ZTxjU2U/REwqKGUtPWxTZSkqZSt1U2U6REwqKGUtPWhTZSkqZStmU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBrWSxvU2UsYVNlLHNTZSxsU2UsY1NlLHVTZSxoU2UsZlNlLERMLGt2dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LG9TZT02LzExLGFTZT04LzExLHNTZT0zLzQsbFNlPTkvMTEsY1NlPTEwLzExLHVTZT0xNS8xNixoU2U9MjEvMjIsZlNlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsUnZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLE52dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIER2dD17fTtLcyhEdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIElfPU0oKCk9PntTdnQoKTtNdnQoKTtFdnQoKTtUdnQoKTtQdnQoKTtJdnQoKTtMdnQoKTtrdnQoKTtSdnQoKTtOdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uICR2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLGpMPU0oKCk9PntlbD0iJCI7WUwucHJvdG90eXBlPSR2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9JHZ0fSk7ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxJU2UsTFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxLdnQsWnZ0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCxLdnQsWnZ0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIElTZSgpe3JldHVybnt9fWZ1bmN0aW9uIExTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIEt2dCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIFp2dChlLHQscil7ZS5zZXQodCxyKX12YXIgUXZ0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gdDF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sZTF0LHIxdD1NKCgpPT57akwoKTtrXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPXQxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTtlMXQ9dDF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBuMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGkxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIG8xdD1NKCgpPT57fSk7ZnVuY3Rpb24gYTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57UXZ0KCk7cjF0KCk7akwoKTtuMXQoKTtvMXQoKTtzMXQoKX0pO2Z1bmN0aW9uIG0xdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEhTZShlLHQpe3ZhciByPW0xdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIGQxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gVlNlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFVTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6VlNlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/SFNlKF8sZik6bTF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLHAxdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09cDF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1VTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBwMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e3AxdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBSXyxDYixnMXQsXzF0LHkxdCx2MXQseDF0LGIxdCx3MXQ9TSgoKT0+e3RrKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSxnMXQ9Ul8ucGFyc2VSb3dzLF8xdD1SXy5mb3JtYXQseTF0PVJfLmZvcm1hdEJvZHksdjF0PVJfLmZvcm1hdFJvd3MseDF0PVJfLmZvcm1hdFJvdyxiMXQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsUzF0LE0xdCxFMXQsVDF0LEMxdCxBMXQsUDF0PU0oKCk9Pnt0aygpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2UsUzF0PU5fLnBhcnNlUm93cyxNMXQ9Tl8uZm9ybWF0LEUxdD1OXy5mb3JtYXRCb2R5LFQxdD1OXy5mb3JtYXRSb3dzLEMxdD1OXy5mb3JtYXRSb3csQTF0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKXFTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBxU2UsSTF0PU0oKCk9PntxU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7dzF0KCk7UDF0KCk7STF0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT5kNWUsX19hc3luY0RlbGVnYXRvcjooKT0+TTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PlM1ZSxfX2FzeW5jVmFsdWVzOigpPT5FNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT52NWUsX19kZWNvcmF0ZTooKT0+ZzVlLF9fZXhwb3J0U3RhcjooKT0+YjVlLF9fZXh0ZW5kczooKT0+cDVlLF9fZ2VuZXJhdG9yOigpPT54NWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PlQ1ZSxfX21ldGFkYXRhOigpPT55NWUsX19wYXJhbTooKT0+XzVlLF9fcmVhZDooKT0+UTN0LF9fcmVzdDooKT0+bTVlLF9fc3ByZWFkOigpPT53NWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gcDVlKGUsdCl7ZjVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gbTVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIGc1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIF81ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB5NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gdjVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIHg1ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBiNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gUTN0KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIHc1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KFEzdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gUzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBNNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gRTVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIFQ1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGY1ZSxkNWUsZGU9TSgoKT0+e2Y1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07ZDVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgdE10LGVNdD1NKCgpPT57dE10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1DNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBDNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57cHkoKX0pO3ZhciByTXQseCQsbk10LHNSLGIkPU0oKCk9PntweSgpO3YkKCk7ck10PWFSKF9jKSx4JD1yTXQucmlnaHQsbk10PXJNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gaU10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9NdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciBhTXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBzTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGxNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgY010LHVNdCxoTXQsQyQ9TSgoKT0+e2NNdD1BcnJheS5wcm90b3R5cGUsdU10PWNNdC5zbGljZSxoTXQ9Y010Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBwTXQoZSl7cmV0dXJuIGV9dmFyIGRNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiBnTXQoKXt2YXIgZT1wTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUodU10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIF9NdD1NKCgpPT57QyQoKTtiJCgpO2ZNdCgpO1QkKCk7ZE10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB5TXQoZSx0LHIpe3JldHVybiBlPWhNdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgdk10PU0oKCk9PntDJCgpO3B5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24geE10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgYk10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gd010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBTTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1NdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBFTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBUTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIENNdD1NKCgpPT57cHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBBTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIElNdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgTE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBrTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgUk10PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gTk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIERNdD1NKCgpPT57fSk7ZnVuY3Rpb24gT010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciB6TXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxBNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gQTVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBGTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgQk10PU0oKCk9PntPJCgpfSk7dmFyIEhNdD1NKCgpPT57YiQoKTtweSgpO3YkKCk7YU10KCk7bE10KCk7RSQoKTtUJCgpO19NdCgpO3ZNdCgpO2JNdCgpO04kKCk7U010KCk7RU10KCk7Q010KCk7UE10KCk7RCQoKTtTJCgpO0xNdCgpO2RSKCk7QSQoKTtSTXQoKTtETXQoKTt6TXQoKTtSJCgpO08kKCk7TSQoKTtCTXQoKX0pO3ZhciBfUixWTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFVNdChlKXtyZXR1cm4gZX12YXIgcU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBQNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBrNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gUjVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UDVlOkk1ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6VU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP2s1ZTpMNWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLEdNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsR010KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKFI1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gV010KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBZTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIGpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gWE10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsR010LCRNdD1NKCgpPT57Vk10KCk7cU10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxHTXQ9MWUtNn0pO3ZhciBLTXQ9TSgoKT0+eyRNdCgpfSk7ZnVuY3Rpb24gSk10KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEQ1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIE81ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFpNdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTjVlLFc1LFFNdD1NKCgpPT57TjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1KTXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUQ1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPU81ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Wk10KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Wk10KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9Sk10fSk7dmFyIEYkPU0oKCk9PntRTXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gejVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBGNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/RjVlOno1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBCNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/QjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiB0RXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgZUV0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBINWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9INWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIG5FdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBvRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gYUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIHNFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGxFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVjVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gVTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9Y0V0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9Y0V0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gdUV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9VNWU6VjVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9c0V0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGNFdCxoRXQ9TSgoKT0+e3d1KCk7VyQoKTtsRXQoKTtjRXQ9IiQifSk7ZnVuY3Rpb24gZkV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgcEV0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiBkRXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIG1FdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBfRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB2RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhFdChlKXtlfHwoZT1xNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIHE1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgYkV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gd0V0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBFRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIENFdD1NKCgpPT57fSk7ZnVuY3Rpb24gQUV0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUEV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJRXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFc1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFk1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBYNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uICQ1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBORXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VzVlOkc1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsPyQ1ZTpYNWU6ci5sb2NhbD9qNWU6WTVlKShyLHQpKX12YXIgREV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gSzVlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBPRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0s1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9KNWU6WjVlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBRNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHRUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gZVRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHpFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1E1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9lVGU6dFRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEhFdChlKX1mdW5jdGlvbiBIRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUJFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFZFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFVFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHJUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtWRXQodGhpcyxlKX19ZnVuY3Rpb24gblRlKGUpe3JldHVybiBmdW5jdGlvbigpe1VFdCh0aGlzLGUpfX1mdW5jdGlvbiBpVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VkV0OlVFdCkodGhpcyxlKX19ZnVuY3Rpb24gcUV0KGUsdCl7dmFyIHI9QkV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2lUZTp0P3JUZTpuVGUpKHIsdCkpfXZhciBHRXQ9TSgoKT0+e0hFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBvVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gV0V0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP29UZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/c1RlOmFUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBZRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiB1VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBqRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/bFRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj91VGU6Y1RlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBYRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGhUZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiAkRXQoKXtyZXR1cm4gdGhpcy5lYWNoKGhUZSl9dmFyIEtFdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlRlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gWkV0KCl7cmV0dXJuIHRoaXMuZWFjaChmVGUpfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFFFdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciB0NXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBwVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBlNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9wVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIHI1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24gZFRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbjV0KCl7cmV0dXJuIHRoaXMuZWFjaChkVGUpfXZhciBpNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gZ1RlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBvNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/Z1RlOm1UZSl9dmFyIGE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gczV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgbDV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfVGUoZSx0LHIpe3JldHVybiBlPWg1dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBoNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24geVRlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiB2VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24geFRlKGUsdCxyKXt2YXIgbj11NXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9fVGU6aDV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGY1dChlLHQscil7dmFyIG49eVRlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD94VGU6dlRlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciB1NXQsd3IsYzV0LEFSPU0oKCk9Pnt1NXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoYzV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIGM1dHx8KHU1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBwNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGJUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwNXQodGhpcyxlLHQpfX1mdW5jdGlvbiB3VGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcDV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGQ1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3dUZTpiVGUpKGUsdCkpfXZhciBtNXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBnNXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxVcCx3dT1NKCgpPT57ZUV0KCk7bkV0KCk7b0V0KCk7aEV0KCk7VyQoKTtwRXQoKTttRXQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTtqJCgpO0ZFdCgpO0dFdCgpO1lFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO0FSKCk7bTV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT1nNXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6dEV0LHNlbGVjdEFsbDpyRXQsZmlsdGVyOmlFdCxkYXRhOnVFdCxlbnRlcjphRXQsZXhpdDpmRXQsam9pbjpkRXQsbWVyZ2U6Z0V0LG9yZGVyOnlFdCxzb3J0OnhFdCxjYWxsOndFdCxub2RlczpNRXQsbm9kZTpURXQsc2l6ZTpBRXQsZW1wdHk6SUV0LGVhY2g6a0V0LGF0dHI6TkV0LHN0eWxlOk9FdCxwcm9wZXJ0eTp6RXQsY2xhc3NlZDpxRXQsdGV4dDpXRXQsaHRtbDpqRXQscmFpc2U6JEV0LGxvd2VyOlpFdCxhcHBlbmQ6UUV0LGluc2VydDplNXQscmVtb3ZlOm41dCxjbG9uZTpvNXQsZGF0dW06czV0LG9uOmY1dCxkaXNwYXRjaDpkNXR9O1VwPWc1dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBfNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgdjV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24geDV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIGI1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9eTV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLHg1dChlLHQpfXZhciB3NXQ9TSgoKT0+e3Y1dCgpO2I1dCgpfSk7dmFyIEVzPU0oKCk9PntxJCgpO3c1dCgpO1NSKCk7XzV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBTNXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgTTV0PU0oKCk9PntFcygpO1M1dCgpfSk7dmFyIEU1dD1NKCgpPT57TTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIFQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gQTV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSVRlKCl7cmV0dXJuIE41dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBQNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1TVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9JNXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU1UZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9RVRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1UVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9Q1RlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUFUZS5leGVjKGUpKT9SNXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1QVGUuZXhlYyhlKSk/UjV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6QzV0Lmhhc093blByb3BlcnR5KGUpP0k1dChDNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEk1dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIExUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0xUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBMNXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gazV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFI1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIE41dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gRDV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ONXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LFpoLFNUZSxNVGUsRVRlLFRUZSxDVGUsQVRlLFBUZSxDNXQsTzV0PU0oKCk9PntUNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsU1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLE1UZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksRVRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxUVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxDVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCxLNV0rIlxcKSQiKSxBVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LFpoLFpoXSsiXFwpJCIpLFBUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LFpoLFpoLEs1XSsiXFwpJCIpLEM1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpBNXQsZm9ybWF0SGV4OkE1dCxmb3JtYXRIc2w6SVRlLGZvcm1hdFJnYjpQNXQsdG9TdHJpbmc6UDV0fSk7TFIoc2wsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Okw1dCxmb3JtYXRIZXg6TDV0LGZvcm1hdFJnYjprNXQsdG9TdHJpbmc6azV0fSkpO0xSKEtoLEQ1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e081dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiB6NXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBGNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBCNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBrVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBSVGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBINXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9SVGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2tUZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFY1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFU1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxOVGUsRFRlLG9LPU0oKCk9PntOUigpO25LKCk7QjV0KCk7VjV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1INXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7TlRlPVU1dCh6NXQpLERUZT1VNXQoRjV0KX0pO2Z1bmN0aW9uIHE1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciBXNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFk1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIGo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIFg1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyICQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiBLNXQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBaNXQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBPVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHpUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT96VGUobFswXS54KTpPVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTp0VDp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/WDV0Okc1dCh0KT9xNXQ6QXJyYXkuaXNBcnJheSh0KT9ZNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP0s1dDpVYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtqNXQoKTskNXQoKTtRNSgpO1o1dCgpO2xLKCk7aUsoKTtXNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKko1dCxza2V3WDpNYXRoLmF0YW4obCkqSjV0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSjV0LHpSLFE1dD1NKCgpPT57SjV0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gZVR0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0VHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9dFR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHJUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLHRUdCxGUixuVHQ9TSgoKT0+e1E1dCgpfSk7ZnVuY3Rpb24gaVR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxvVHQ9TSgoKT0+e1E1KCk7blR0KCk7aEs9aVR0KGVUdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1pVHQoclR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO29UdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KGxUdChGVGUpLHl5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBGVGUoKXt5eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gY1R0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiBhVHQoKXt5eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e2NUdCgpfWZpbmFsbHl7aDI9MCxIVGUoKSx5eT0wfX1mdW5jdGlvbiBCVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5zVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBIVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dChhVHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChCVGUsc1R0KSksaDI9MSxsVHQoYVR0KSl9fXZhciBoMixpVCxuVCxzVHQsQlIsb1QsSFIseXksVlIsYVQsbFR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxzVHQ9MWUzLEhSPTAseXk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGxUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIHVUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTt1VHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47cVRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpWVGUsdHdlZW46VVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmZUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmZUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcVRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1oVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1oVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFZUZSxVVGUsZlR0LGdLLFdSLEdSLGhUdCxZUixsVCxUcz1NKCgpPT57RiQoKTttSygpO1ZUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxVVGU9W10sZlR0PTAsZ0s9MSxXUj0yLEdSPTMsaFR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHBUdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciBkVHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBHVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBXVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIG1UdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP0dUZTpXVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gWVRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBqVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBYVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gJFRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBLVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBaVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGdUdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP1pUZTpLVGUpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9qVGU6WVRlKShyKTooci5sb2NhbD8kVGU6WFRlKShyLG4sdCkpfXZhciBfVHQ9TSgoKT0+e3JUKCk7RXMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiBKVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIFFUZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIHRDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJlFUZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gZUNlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSlRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/dENlOmVDZSkobix0KSl9dmFyIHZUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIHJDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBuQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24geFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ckNlOm5DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIGJUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGlDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBvQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gd1R0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/aUNlOm9DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFNUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChhQ2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgRVR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gVFR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBDVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIEFUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBQVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBzQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBsQ2UoZSx0LHIpe3ZhciBuLGksbz1zQ2UodCk/Y1Q6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gSVR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2gobENlKHIsZSx0KSl9dmFyIExUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGNDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24ga1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGNDZSh0aGlzLl9pZCkpfXZhciBSVHQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5UdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBEVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gT1R0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciB6VHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gRlR0KCl7cmV0dXJuIG5ldyB1Q2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciB1Q2UsQlR0PU0oKCk9PntFcygpO3VDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBoQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSFR0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGZDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHBDZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBkQ2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9SFR0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gVlR0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxoQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsSFR0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxwQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZENlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxmQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBVVHQ9TSgoKT0+e3JUKCk7RXMoKTtUcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIG1DZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gZ0NlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZtQ2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gcVR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLGdDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIEdUdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24geUNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/eUNlKGQyKHRoaXMsInRleHQiLGUpKTpfQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIFlUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIHZDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24geENlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJnZDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIGpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQseENlKGUpKX12YXIgWFR0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgS1R0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBaVHQoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgSlR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK2JDZX12YXIgYkNlLG0yLEdwPU0oKCk9PntFcygpO19UdCgpO3ZUdCgpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1VUdCgpO0dUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO3VUKCk7SlR0KCk7YkNlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpOVHQsc2VsZWN0QWxsOk9UdCxmaWx0ZXI6VFR0LG1lcmdlOkFUdCxzZWxlY3Rpb246RlR0LHRyYW5zaXRpb246JFR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpJVHQsYXR0cjpnVHQsYXR0clR3ZWVuOnlUdCxzdHlsZTpWVHQsc3R5bGVUd2VlbjpxVHQsdGV4dDpXVHQsdGV4dFR3ZWVuOmpUdCxyZW1vdmU6a1R0LHR3ZWVuOm1UdCxkZWxheTp4VHQsZHVyYXRpb246d1R0LGVhc2U6TVR0LGVuZDpaVHR9fSk7ZnVuY3Rpb24gd0NlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBRVHQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fHdDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4Syx0Q3Q9TSgoKT0+e0dwKCk7VHMoKTtJXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBlQ3Q9TSgoKT0+e0VzKCk7ZFR0KCk7dEN0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1wVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249UVR0fSk7dmFyIHJDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIG5DdD1NKCgpPT57ZUN0KCk7R3AoKTtyQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBpQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG9DdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciBhQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBzQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBUQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIENDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gaEN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZkN0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBwQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIGRDdCgpe3JldHVybiBUSyhTQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUNDZSxyPVRDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgb0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2xDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpNQ2VbcF0sXz1lPT09JFI/bnVsbDpFQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgbEN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIGNDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPWNDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiB1Q3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD11Q3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGxDdCxTSyxnMixfMiwkUixLUixTQ2UsV3AsY0N0LHVDdCxNQ2UsRUNlLG1DdD1NKCgpPT57RiQoKTtFNXQoKTtyVCgpO0VzKCk7bkN0KCk7aUN0KCk7YUN0KCk7c0N0KCk7bEN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LFNDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sY0N0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSx1Q3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LE1DZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxFQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgZ0N0PU0oKCk9PnttQ3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9QUNlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gQUNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3Z5KCl9KTt2YXIgX0N0LFBDZSxJQ2UsUEs9TSgoKT0+e3Z5KCk7QUsoKTtfQ3Q9Q0sobGcpLFBDZT1fQ3QucmlnaHQsSUNlPV9DdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgeUN0PU0oKCk9PntJSygpfSk7dmFyIHZDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciB4Q3Qsa0NlLFJDZSxOSz1NKCgpPT57eEN0PUFycmF5LnByb3RvdHlwZSxrQ2U9eEN0LnNsaWNlLFJDZT14Q3QubWFwfSk7dmFyIGJDdD1NKCgpPT57fSk7dmFyIHdDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgZGxuLG1sbixnbG4sT0s9TSgoKT0+e2Rsbj1NYXRoLnNxcnQoNTApLG1sbj1NYXRoLnNxcnQoMTApLGdsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBTQ3Q9TSgoKT0+e05LKCk7UEsoKTtiQ3QoKTtSSygpO3dDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIEVDdD1NKCgpPT57TksoKTt2eSgpO3kyKCk7SlIoKX0pO3ZhciBUQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgQ0N0PU0oKCk9Pnt9KTt2YXIgQUN0PU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57dnkoKTt5MigpO0pSKCl9KTt2YXIgSUN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBMQ3Q9TSgoKT0+e30pO3ZhciBrQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIgUkN0PU0oKCk9Pnt9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgREN0PU0oKCk9PntCSygpfSk7dmFyIE9DdD1NKCgpPT57UEsoKTt2eSgpO0FLKCk7eUN0KCk7dkN0KCk7a0soKTtSSygpO1NDdCgpO0VDdCgpO1RDdCgpO3pLKCk7Q0N0KCk7QUN0KCk7UEN0KCk7SUN0KCk7RksoKTtJSygpO0xDdCgpO0pSKCk7REsoKTtrQ3QoKTtSQ3QoKTtOQ3QoKTtPSygpO0JLKCk7TEsoKTtEQ3QoKX0pO3ZhciBISyxWSyx6Q3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLHpDdD1NYXRoLlBJLGRUPXpDdC8yLFVLPXpDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gVkNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRkN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVZDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgQkN0PU0oKCk9PntPQ3QoKTtHSygpfSk7dmFyIEhDdCxWQ3Q9TSgoKT0+e0hDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFVDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBxQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyx4eSxVQ2UsWEssR0N0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0sseHk9MWUtNixVQ2U9WUsteHk7aksucHJvdG90eXBlPXFDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPlVDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1xQ3R9KTt2YXIgV0N0PU0oKCk9PntHQ3QoKX0pO2Z1bmN0aW9uIHFDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gR0NlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBXQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIFlDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBZQ3QoKXt2YXIgZT1xQ2UsdD1HQ2Uscj1XQ2Usbj1ZQ2UsaT1qQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUhDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIGpDdD1NKCgpPT57VkN0KCk7VUN0KCk7R0soKTtXQ3QoKX0pO3ZhciBYQ3Q9TSgoKT0+e0JDdCgpO2pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gJEN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksZU49TSgoKT0+e2xsPSIkIjt0Ti5wcm90b3R5cGU9JEN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT0kQ3R9KTtmdW5jdGlvbiBKQ3QoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLFhDZSwkQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEtDdCxaQ3QpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLEtDdCxaQ3QpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gWENlKCl7cmV0dXJue319ZnVuY3Rpb24gJENlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gS0N0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gWkN0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBRQ3Q9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiB0QXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSxlQXQsckF0PU0oKCk9PntlTigpO3d5PWJ5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9dEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O2VBdD10QXR9KTtmdW5jdGlvbiBuQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBpQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9BdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGFBdD1NKCgpPT57fSk7ZnVuY3Rpb24gc0F0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO3ZhciBjQXQ9TSgoKT0+e1FDdCgpO3JBdCgpO2VOKCk7aUF0KCk7YUF0KCk7bEF0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9S0NlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PVpDZS5leGVjKGUpKT9oQXQocGFyc2VJbnQodFsxXSwxNikpOih0PUpDZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9UUNlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD10QWUuZXhlYyhlKSk/ZkF0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWVBZS5leGVjKGUpKT9mQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ckFlLmV4ZWMoZSkpP3BBdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW5BZS5leGVjKGUpKT9wQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTp1QXQuaGFzT3duUHJvcGVydHkoZSk/aEF0KHVBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gaEF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGZBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gcEF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gaUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/aUFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixtVCxRaCxLQ2UsWkNlLEpDZSxRQ2UsdEFlLGVBZSxyQWUsbkFlLHVBdCxpTj1NKCgpPT57bk4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsS0NlPS9eIyhbMC05YS1mXXszfSkkLyxaQ2U9L14jKFswLTlhLWZdezZ9KSQvLEpDZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksUUNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSx0QWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxlQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxtVF0rIlxcKSQiKSxyQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULFFoLFFoXSsiXFwpJCIpLG5BZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULFFoLFFoLG1UXSsiXFwpJCIpLHVBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLEtLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsWkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkvZEF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS9tQXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL2dBdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPm9BZT9NYXRoLnBvdyhlLDEvMyk6ZS95QXQrX0F0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOnlBdCooZS1fQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gYUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9hQWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLGRBdCxtQXQsZ0F0LF9BdCxiMix5QXQsb0FlLHZBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgsZEF0PS45NTA0NyxtQXQ9MSxnQXQ9MS4wODg4MyxfQXQ9NC8yOSxiMj02LzI5LHlBdD0zKmIyKmIyLG9BZT1iMipiMipiMjtZcChqcCxsTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9bUF0KnRaKGUpLHQ9ZEF0KnRaKHQpLHI9Z0F0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxpWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIHNBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPSh3QXQqbit4QXQqdC1iQXQqcikvKHdBdCt4QXQtYkF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3NBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgU0F0LG9aLGFaLGNOLF9ULHhBdCxiQXQsd0F0LE1BdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7U0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCx4QXQ9X1QqY04sYkF0PV9UKm9aLHdBdD1vWiphWi1jTipTQXQ7WXAoTXksdU4sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKFNBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBFQXQ9TSgoKT0+e2lOKCk7dkF0KCk7TUF0KCl9KTtmdW5jdGlvbiBDQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGNBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHVBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFRBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bEFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbEFlLEFBdCxQQXQ9TSgoKT0+e2xBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9Q0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1jQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT11QWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPVRBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPVRBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O0FBdD1DQXR9KTt2YXIgSUF0PU0oKCk9PntQQXQoKX0pO2Z1bmN0aW9uIGtBdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBmQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBwQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBMQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPWhBZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIGhBZSxzWixSQXQ9TSgoKT0+e2hBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9a0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1mQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1wQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUxBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUxBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPWtBdH0pO3ZhciBOQXQ9TSgoKT0+e1JBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiBkQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG1BZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD9tQWU6ZEFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIGdBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD9nQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIERBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBPQXQ9TSgoKT0+e2VmKCk7ZlooKX0pO2Z1bmN0aW9uIF9BZSgpe3JldHVybltdfWZ1bmN0aW9uIHpBdChlKXtyZXR1cm4gZT09bnVsbD9fQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgRkF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgSEF0PU0oKCk9PntlZigpO0ZBdCgpfSk7ZnVuY3Rpb24gVkF0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBVQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VkF0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBHQXQ9TSgoKT0+e2VmKCk7VUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uIFdBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtlZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBZQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBqQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHZBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVhBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVhBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uICRBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/dkFlOnlBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVlBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBYQXQsS0F0PU0oKCk9PntlZigpO2RaKCk7akF0KCk7WEF0PSIkIn0pO2Z1bmN0aW9uIFpBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIEpBdD1NKCgpPT57cFooKTtlZigpfSk7ZnVuY3Rpb24gUUF0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciB0NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGU0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgcjR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gbjR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgaTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBvNHQoZSl7ZXx8KGU9eEFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4QWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIGE0dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIHM0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgdTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBmNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA0dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIGQ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gbTR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gYkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB3QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBTQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gRUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBUQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gdjR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3dBZTpiQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9UQWU6RUFlOnIubG9jYWw/TUFlOlNBZSkocix0KSl9dmFyIHg0dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIENBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBBQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBQQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gYjR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9DQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UEFlOkFBZSkoZSx0LHI9PW51bGw/IiI6cikpOklBZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgdzR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gTEFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBrQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIFJBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBTNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIE00dD1NKCgpPT57fSk7ZnVuY3Rpb24gRTR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBUNHQoZSl9ZnVuY3Rpb24gVDR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1FNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBDNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBBNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBOQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7QzR0KHRoaXMsZSl9fWZ1bmN0aW9uIERBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBNHQodGhpcyxlKX19ZnVuY3Rpb24gT0FlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0M0dDpBNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFA0dChlLHQpe3ZhciByPUU0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PQWU6dD9OQWU6REFlKShyLHQpKX12YXIgSTR0PU0oKCk9PntUNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gekFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBCQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEw0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD96QWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0JBZTpGQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgazR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBWQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gUjR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0hBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VUFlOlZBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRDR0KCl7cmV0dXJuIHRoaXMuZWFjaChxQWUpfXZhciBPNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIHo0dCgpe3JldHVybiB0aGlzLmVhY2goR0FlKX12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgSDR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gV0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVjR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/V0FlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBVNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIFlBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHE0dCgpe3JldHVybiB0aGlzLmVhY2goWUFlKX12YXIgRzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIFhBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVzR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP1hBZTpqQWUpfXZhciBZNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIFg0dD1NKCgpPT57fSk7ZnVuY3Rpb24gJEFlKGUsdCxyKXtyZXR1cm4gZT1aNHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gWjR0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIEtBZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gWkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEpBZShlLHQscil7dmFyIG49SzR0Lmhhc093blByb3BlcnR5KGUudHlwZSk/JEFlOlo0dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBKNHQoZSx0LHIpe3ZhciBuPUtBZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/SkFlOlpBZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgSzR0LHNuLCQ0dCx4Tj1NKCgpPT57SzR0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKCQ0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiAkNHR8fChLNHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gUTR0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBRQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUTR0KHRoaXMsZSx0KX19ZnVuY3Rpb24gdDRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFE0dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiB0UHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj90NGU6UUFlKShlLHQpKX12YXIgZVB0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gZTRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1osZWY9TSgoKT0+e09BdCgpO0hBdCgpO0dBdCgpO0tBdCgpO2RaKCk7SkF0KCk7dDR0KCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7STR0KCk7azR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7eE4oKTtlUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPWU0ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpEQXQsc2VsZWN0QWxsOkJBdCxmaWx0ZXI6cUF0LGRhdGE6JEF0LGVudGVyOldBdCxleGl0OlpBdCxqb2luOlFBdCxtZXJnZTplNHQsb3JkZXI6bjR0LHNvcnQ6bzR0LGNhbGw6czR0LG5vZGVzOmM0dCxub2RlOmg0dCxzaXplOnA0dCxlbXB0eTptNHQsZWFjaDpfNHQsYXR0cjp2NHQsc3R5bGU6YjR0LHByb3BlcnR5OlM0dCxjbGFzc2VkOlA0dCx0ZXh0Okw0dCxodG1sOlI0dCxyYWlzZTpENHQsbG93ZXI6ejR0LGFwcGVuZDpCNHQsaW5zZXJ0OlY0dCxyZW1vdmU6cTR0LGNsb25lOlc0dCxkYXR1bTpqNHQsb246SjR0LGRpc3BhdGNoOnRQdH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgclB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgblB0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBpUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57blB0KCk7clB0KCk7aVB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciBhUHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gcjRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBuNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGk0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBvNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gc1B0KCl7dmFyIGU9cjRlLHQ9bjRlLHI9aTRlLG49bzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGxQdD1NKCgpPT57TkF0KCk7U04oKTtTWigpO3daKCk7b1B0KCk7YVB0KCl9KTt2YXIgY1B0PU0oKCk9PntsUHQoKTtTWigpfSk7ZnVuY3Rpb24gaFB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gYTRlKGUsdCl7dmFyIHI9aFB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gczRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P2E0ZShkLHUpOmhQdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSx1UHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PXVQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1zNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciB1UHQsTVosRVosYlQsVFosQ049TSgoKT0+e3VQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixmUHQscFB0LGRQdCxtUHQsZ1B0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZlB0PUFOLnBhcnNlLHBQdD1BTi5wYXJzZVJvd3MsZFB0PUFOLmZvcm1hdCxtUHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixfUHQseVB0LHZQdCx4UHQsYlB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksX1B0PVBOLnBhcnNlLHlQdD1QTi5wYXJzZVJvd3MsdlB0PVBOLmZvcm1hdCx4UHQ9UE4uZm9ybWF0Um93c30pO3ZhciB3UHQ9TSgoKT0+e0NOKCk7Z1B0KCk7YlB0KCl9KTtmdW5jdGlvbiBTUHQoZSl7cmV0dXJuK2V9dmFyIE1QdD1NKCgpPT57fSk7ZnVuY3Rpb24gRVB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gVFB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBDUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUFB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgSVB0PU0oKCk9Pnt9KTt2YXIgUFosTFB0LGtQdCxJWixSUHQ9TSgoKT0+e1BaPTMsTFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLGtQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gT1B0KGUpe3JldHVybiAxLU1hdGguY29zKGUqRFB0KX1mdW5jdGlvbiB6UHQoZSl7cmV0dXJuIE1hdGguc2luKGUqRFB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhOUHQqZSkpLzJ9dmFyIE5QdCxEUHQsRlB0PU0oKCk9PntOUHQ9TWF0aC5QSSxEUHQ9TlB0LzJ9KTtmdW5jdGlvbiBCUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFZQdD1NKCgpPT57fSk7ZnVuY3Rpb24gVVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gcVB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBHUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFdQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxjNGU/SU4qKGUtPWw0ZSkqZSt1NGU6ZTxmNGU/SU4qKGUtPWg0ZSkqZStwNGU6SU4qKGUtPWQ0ZSkqZSttNGV9ZnVuY3Rpb24gWVB0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosbDRlLGM0ZSx1NGUsaDRlLGY0ZSxwNGUsZDRlLG00ZSxJTixqUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxsNGU9Ni8xMSxjNGU9OC8xMSx1NGU9My80LGg0ZT05LzExLGY0ZT0xMC8xMSxwNGU9MTUvMTYsZDRlPTIxLzIyLG00ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLFhQdCwkUHQsT1osS1B0PU0oKCk9PntEWj0xLjcwMTU4LFhQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSwkUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixaUHQsQlosSlB0LFFQdD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsWlB0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEpQdD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIHQ2dD1NKCgpPT57TVB0KCk7Q1B0KCk7SVB0KCk7UlB0KCk7RlB0KCk7VlB0KCk7R1B0KCk7alB0KCk7S1B0KCk7UVB0KCl9KTtmdW5jdGlvbiBlNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgcjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6bihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gbjZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gaTZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gaTZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIG82dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilpNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBsNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGM2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB1NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGg2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIHA2dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIGQ2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIG02dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBnNnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBfNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHk2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciB2NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHg2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIGI2dD1NKCgpPT57fSk7ZnVuY3Rpb24gdzZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIE02dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRTZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gVDZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEM2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEk2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEw2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP1Q2dDp0LHI9PW51bGw/UDZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gazZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsUjZ0PU0oKCk9PnthNnQoKTtsNnQoKTt1NnQoKTtmNnQoKTtkNnQoKTtfNnQoKTt2NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtBNnQoKTtMNnQoKTtHYT1DeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1rNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1rNnQobikpO3JldHVybiBlfTtHYS5hZGQ9bjZ0O0dhLmFkZEFsbD1vNnQ7R2EuY292ZXI9czZ0O0dhLmRhdGE9YzZ0O0dhLmV4dGVudD1oNnQ7R2EuZmluZD1wNnQ7R2EucmVtb3ZlPW02dDtHYS5yZW1vdmVBbGw9ZzZ0O0dhLnJvb3Q9eTZ0O0dhLnNpemU9eDZ0O0dhLnZpc2l0PXc2dDtHYS52aXNpdEFmdGVyPU02dDtHYS54PUM2dDtHYS55PUk2dH0pO3ZhciBWWj1NKCgpPT57UjZ0KCl9KTtmdW5jdGlvbiBnNGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIF80ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gTjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9em4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQsZzRlLF80ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6em4oK2wpLHMoKSxvKTplfSxvfXZhciBENnQ9TSgoKT0+e1R5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gTzZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsTk49TSgoKT0+e2NsPSIkIjtSTi5wcm90b3R5cGU9TzZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1PNnR9KTt2YXIgejZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24geTRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksRjZ0PU0oKCk9PntOTigpO0F5PXBnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9eTRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIEI2dD1NKCgpPT57fSk7dmFyIEg2dD1NKCgpPT57fSk7dmFyIFY2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9Pnt6NnQoKTtGNnQoKTtOTigpO0I2dCgpO0g2dCgpO1Y2dCgpfSk7ZnVuY3Rpb24gdjRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFU2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBxNnQoZSl7dmFyIHQ9djRlLHI9dSxuLGk9em4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVU2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVU2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLGQoKSxoKTppfSxofXZhciBHNnQ9TSgoKT0+e1R5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gWTZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGI0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHc0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFc2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09eDRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgeDRlLHFaLGo2dD1NKCgpPT57eDRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1ZNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWI0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXc0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09VzZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09VzZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9WTZ0fSk7dmFyIFg2dD1NKCgpPT57ajZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBQeXx8KFo2dChTNGUpLFB5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBTNGUoKXtQeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gSjZ0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiAkNnQoKXtQeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e0o2dCgpfWZpbmFsbHl7RTI9MCxFNGUoKSxQeT0wfX1mdW5jdGlvbiBNNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD5LNnQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBFNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dCgkNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChNNGUsSzZ0KSksRTI9MSxaNnQoJDZ0KSl9fXZhciBFMixTVCx3VCxLNnQsek4sTVQsRk4sUHksQk4sRVQsWjZ0LFE2dD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsSzZ0PTFlMyxGTj0wLFB5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxaNnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIHRJdD1NKCgpPT57UTZ0KCl9KTtmdW5jdGlvbiBlSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBySXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBuSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1UNGUqTWF0aC5zcXJ0KGQpLHg9ZCpDNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIFQ0ZSxDNGUsalo9TSgoKT0+e1g2dCgpO1VaKCk7dEl0KCk7VDRlPTEwLEM0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBpSXQoKXt2YXIgZSx0LHIsbj16bigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsZUl0LHJJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOnpuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgb0l0PU0oKCk9PntUeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gYUl0KGUsdCxyKXt2YXIgbixpPXpuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6em4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnpuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBzSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBsSXQoZSl7dmFyIHQ9em4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT16bihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6em4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOmV9LG99dmFyIGNJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIHVJdChlKXt2YXIgdD16biguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnpuKCtzKSxhKCksbyk6ZX0sb312YXIgaEl0PU0oKCk9PntUeSgpfSk7dmFyIGZJdD1NKCgpPT57cjZ0KCk7RDZ0KCk7RzZ0KCk7b0l0KCk7c0l0KCk7alooKTtjSXQoKTtoSXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gcEl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciBkSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1JdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIGdJdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0l0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgeUl0PU0oKCk9Pnt9KTtmdW5jdGlvbiB2SXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHhJdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57eUl0KCk7JFooKTt4SXQoKTtVTj17IiI6X0l0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6dkl0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1BNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBBNGUsUVo9TSgoKT0+e1paKCk7QTRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBiSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP3BJdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP21JdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP3dJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPXdJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgd0l0LGVKPU0oKCk9PntUVCgpO2RJdCgpO2dJdCgpO1FaKCk7WlooKTskWigpO2JJdCgpO3dJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixTSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBNSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIEVJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIFRJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgQ0l0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24gQUl0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIFBJdD1NKCgpPT57VFQoKX0pO3ZhciBJSXQ9TSgoKT0+e1NJdCgpO2VKKCk7UVooKTtFSXQoKTtDSXQoKTtQSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBMSXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sa3k9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtMSXQoWU4sZSx0aGlzLnQpLExJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBabihlKXtyZXR1cm4gZT4xP0ZuOmU8LTE/LUZuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixGbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixSeSwkTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEZuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLFJ5PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmUkl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJlJJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gTkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYma0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/a0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBrSXQsUkl0LG1nPU0oKCk9PntrSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LFJJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtOSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylOSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFA0ZSgpe0V1LnBvaW50PUw0ZX1mdW5jdGlvbiBJNGUoKXt6SXQoREl0LE9JdCl9ZnVuY3Rpb24gTDRlKGUsdCl7RXUucG9pbnQ9ekl0LERJdD1lLE9JdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIHpJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gRkl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLERJdCxPSXQsc0osbEosY0osRXUsdUo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7QVQ9Q3MoKSxKTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1QNGUsRXUubGluZUVuZD1JNGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxabihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7Z2cucHVzaChacD1bZGk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBHSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKGRpLGUpPnVsKGRpLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChkaSxlKT51bChkaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChkaSxFaSkmJihkaT1lKX1lbHNlIGdnLnB1c2goWnA9W2RpPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIEJJdCgpe0twLnBvaW50PUdJdH1mdW5jdGlvbiBISXQoKXtacFswXT1kaSxacFsxXT1FaSxLcC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uIFdJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFVJdD1lLHFJdD10O0V1LnBvaW50KGUsdCksR0l0KGUsdCl9ZnVuY3Rpb24gazRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gUjRlKCl7V0l0KFVJdCxxSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLFpwWzBdPWRpLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIE40ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gVkl0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBZSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChONGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxWSXQobixpWzBdKXx8Vkl0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxkaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksaGxdLFtFaSx4Y11dfXZhciBkaSxobCxFaSx4YyxPeSxVSXQscUl0LFAyLExULGdnLFpwLEtwLGpJdD1NKCgpPT57a3koKTt1SigpO0EyKCk7bHIoKTttZygpO0xUPUNzKCksS3A9e3BvaW50OmhKLGxpbmVTdGFydDpCSXQsbGluZUVuZDpISXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9V0l0LEtwLmxpbmVTdGFydD1rNGUsS3AubGluZUVuZD1SNGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1oSixLcC5saW5lU3RhcnQ9Qkl0LEtwLmxpbmVFbmQ9SEl0LEFUPDA/KGRpPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoaGw9LTkwKSxacFswXT1kaSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIFhJdCgpe1R1LnBvaW50PUQ0ZX1mdW5jdGlvbiBENGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9TzRlLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBPNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO3REKz1hLGlEKz1hKihXYSsoV2E9bikpLG9EKz1hKihZYSsoWWE9aSkpLGFEKz1hKihqYSsoamE9bykpLFJUKFdhLFlhLGphKX1mdW5jdGlvbiAkSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiB6NGUoKXtUdS5wb2ludD1CNGV9ZnVuY3Rpb24gRjRlKCl7Skl0KEtJdCxaSXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIEI0ZShlLHQpe0tJdD1lLFpJdD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PUpJdDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksUlQoV2EsWWEsamEpfWZ1bmN0aW9uIEpJdChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PVpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooV2ErKFdhPW4pKSxvRCs9dSooWWErKFlhPWkpKSxhRCs9dSooamErKGphPW8pKSxSVChXYSxZYSxqYSl9ZnVuY3Rpb24gUUl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixabihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLEtJdCxaSXQsV2EsWWEsamEsVHUsdDl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpYSXQsbGluZUVuZDokSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PXo0ZSxUdS5saW5lRW5kPUY0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1YSXQsVHUubGluZUVuZD0kSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZTl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qobjl0KGUpLGk5dCh0LHIpKTpuOXQoZSk6dHx8cj9pOXQodCxyKTpfSn1mdW5jdGlvbiByOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIG45dChlKXt2YXIgdD1yOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PXI5dCgtZSksdH1mdW5jdGlvbiBpOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxabihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxabihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPW85dChhLGkpLG89bzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gbzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIGE5dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtlOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLHM5dChvKSxzOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIHM5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqWm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntreSgpO0EyKCk7bHIoKTtTSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1INGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBINGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBUSj1NKCgpPT57RnkoKX0pO3ZhciBsOXQsVjRlLFU0ZSxDSj1NKCgpPT57RnkoKTtUSigpO2w5dD1FSihfZyksVjRlPWw5dC5yaWdodCxVNGU9bDl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBjOXQ9TSgoKT0+e0FKKCl9KTt2YXIgdTl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIGg5dCxHNGUsVzRlLGtKPU0oKCk9PntoOXQ9QXJyYXkucHJvdG90eXBlLEc0ZT1oOXQuc2xpY2UsVzRlPWg5dC5tYXB9KTt2YXIgZjl0PU0oKCk9Pnt9KTt2YXIgcDl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBTMG4sTTBuLEUwbixOSj1NKCgpPT57UzBuPU1hdGguc3FydCg1MCksTTBuPU1hdGguc3FydCgxMCksRTBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIGQ5dD1NKCgpPT57a0ooKTtDSigpO2Y5dCgpO0xKKCk7cDl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgZzl0PU0oKCk9PntrSigpO0Z5KCk7TDIoKTtkRCgpfSk7dmFyIF85dD1NKCgpPT57SUooKX0pO3ZhciB5OXQ9TSgoKT0+e30pO3ZhciB2OXQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntGeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIGI5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgdzl0PU0oKCk9Pnt9KTt2YXIgUzl0PU0oKCk9PntGeSgpfSk7dmFyIE05dD1NKCgpPT57fSk7dmFyIEU5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIFQ5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtGeSgpO1RKKCk7Yzl0KCk7dTl0KCk7SUooKTtMSigpO2Q5dCgpO2c5dCgpO185dCgpO0RKKCk7eTl0KCk7djl0KCk7eDl0KCk7Yjl0KCk7T0ooKTtBSigpO3c5dCgpO2REKCk7UkooKTtTOXQoKTtNOXQoKTtFOXQoKTtOSigpO3pKKCk7UEooKTtUOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsdFBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoUTRlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBRNGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gdFBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUZuLWNlOkZuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Gbi1jZTpGbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIGVQZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9GbjotRm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9clBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gclBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBuUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqRm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sZVBlLG5QZSxbLXJyLC1Gbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gQzl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIEE5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0M5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7QTl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBQOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgSTl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gaVBlKCl7azIucG9pbnQ9YVBlLGsyLmxpbmVFbmQ9b1BlfWZ1bmN0aW9uIG9QZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gYVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1zUGV9ZnVuY3Rpb24gc1BlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1ZKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6aVBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGxQZSl9dmFyIEdKLGxQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxsUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJms5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2s5dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gUjl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIE45dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEQ5dChlLHQpe3JldHVybiEhZkQoZS5tYXAoY1BlKSxPOXQodCkpfWZ1bmN0aW9uIGNQZShlKXtyZXR1cm4gZT1lLm1hcChPOXQpLGUucG9wKCksZX1mdW5jdGlvbiBPOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuKGUmJkw5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0w5dFtlLnR5cGVdOndEKShlLHQpfXZhciBMOXQsazl0LEY5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7TDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sazl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUjl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE45dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE45dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEQ5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEQ5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gQjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gSDl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPUI5dChvLGksOTApLHA9SDl0KHQsZSxfKSxkPUI5dChzLGEsOTApLGc9SDl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBWOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBVOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIHE5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKlpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBHOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVQZSgpe3lnLnBvaW50PWhQZX1mdW5jdGlvbiBoUGUoZSx0KXt5Zy5wb2ludD1qOXQsVzl0PVhKPWUsWTl0PSRKPXR9ZnVuY3Rpb24gajl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGZQZSgpe2o5dChXOXQsWTl0KX12YXIgWUosakosVzl0LFk5dCxYSiwkSix5ZyxLSixYOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO1lKPUNzKCksako9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PXVQZSx5Zy5saW5lRW5kPWZQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXlnfSk7ZnVuY3Rpb24gZFBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxwUGUsTjIsWko9TSgoKT0+e1hwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxwUGU9e3BvaW50OmRQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1wUGV9KTtmdW5jdGlvbiBIeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gJDl0KCl7Q3UucG9pbnQ9bVBlfWZ1bmN0aW9uIG1QZShlLHQpe0N1LnBvaW50PWdQZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIGdQZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7Q0QrPWkqKG9mK2UpLzIsQUQrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiBLOXQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBfUGUoKXtDdS5wb2ludD12UGV9ZnVuY3Rpb24geVBlKCl7UTl0KFo5dCxKOXQpfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PVE5dCxIeShaOXQ9b2Y9ZSxKOXQ9YWY9dCl9ZnVuY3Rpb24gUTl0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtDRCs9aSoob2YrZSkvMixBRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCx0USs9aSoob2YrZSksZVErPWkqKGFmK3QpLFVUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsWjl0LEo5dCxvZixhZixDdSxyUSx0THQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDokOXQsbGluZUVuZDpLOXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PV9QZSxDdS5saW5lRW5kPXlQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD0kOXQsQ3UubGluZUVuZD1LOXR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIGVMdD1NKCgpPT57bHIoKTtYcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIHhQZShlLHQpe0lELnBvaW50PWlMdCxyTHQ9cVQ9ZSxuTHQ9R1Q9dH1mdW5jdGlvbiBpTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLHJMdCxuTHQscVQsR1QsSUQsb1Esb0x0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtpUT1DcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD14UGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmaUx0KHJMdCxuTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBhTHQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIHNMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOmFMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPWFMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gbEx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBjTHQ9TSgoKT0+e01EKCk7bWcoKTtYOXQoKTtaSigpO3RMdCgpO2VMdCgpO29MdCgpO3NMdCgpfSk7ZnVuY3Rpb24gdUx0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57bWcoKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9TUGUoZSx0KTp3UGUoZSl9ZnVuY3Rpb24gd1BlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIFNQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPVpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPGJQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxoTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLGhMdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBoTHQsYlBlLGZMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7aEx0PTE2LGJQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBFUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1NUGUoRVBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIE1QZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Zkx0KCk7TVBlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gcEx0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsWm4oaSp0KV19LHJ9dmFyIGRMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gcEx0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksWm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTtkTHQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gVFBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBtTHQoKXt2YXIgZSx0LHI9REQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1UUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgZ0x0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxabihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBfTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQseUx0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqWm4oZS8yKX0pfSk7ZnVuY3Rpb24gdkx0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCx4THQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoRm4rdCkvMikpXX1mdW5jdGlvbiBiTHQoKXtyZXR1cm4gaFEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Gbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChGbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUZuK2NlJiYocz0tRm4rY2UpOnM+Rm4tY2UmJihzPUZuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoJE4oaS9jLDEvbikpLUZuXX0sb31mdW5jdGlvbiB3THQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIFNMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIE1MdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIEVMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgVEx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gQ0x0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBBTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFBMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBJTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBMTHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBrTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gUkx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgTkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoWm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIERMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgT0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW1J5KEMyKChGbit0KS8yKSksLWVdfWZ1bmN0aW9uIHpMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIEZMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Gbl19fSk7dmFyIEJMdD1NKCgpPT57dUooKTtqSXQoKTt0OXQoKTt2SigpO0JKKCk7SEooKTtJOXQoKTtCVCgpO0Y5dCgpO1dKKCk7VTl0KCk7Rzl0KCk7cUooKTtjTHQoKTt1USgpO2dMdCgpO3lMdCgpO3hMdCgpO1NMdCgpO05EKCk7VEx0KCk7cFEoKTtBTHQoKTtJTHQoKTtBdSgpO0JEKCk7a0x0KCk7Tkx0KCk7T0x0KCk7Rkx0KCk7RFQoKTttZygpO1dUKCl9KTtmdW5jdGlvbiBDUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gQVBlKGUpe3JldHVybiBlLnJlZHVjZShQUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUFBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIElQZShlKXtyZXR1cm4gMStlLnJlZHVjZShMUGUsMCl9ZnVuY3Rpb24gTFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBrUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIFJQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gSEx0KCl7dmFyIGU9Q1BlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1BUGUocCksZi55PUlQZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1rUGUobyksYz1SUGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFZMdD1NKCgpPT57fSk7ZnVuY3Rpb24gTlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFVMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihOUGUpfXZhciBxTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgV0x0PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgakx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyICRMdD1NKCgpPT57fSk7ZnVuY3Rpb24gS0x0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIFpMdD1NKCgpPT57fSk7ZnVuY3Rpb24gSkx0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe2Zvcih2YXIgdD10aGlzLHI9RFBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRFBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgZWt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBya3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBva3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGFrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgc2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsa3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIGNrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD16UGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBPUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShGUGUpfWZ1bmN0aW9uIHpQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBGUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntxTHQoKTtXTHQoKTtqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTt4Zy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpVTHQsZWFjaDpHTHQsZWFjaEFmdGVyOlhMdCxlYWNoQmVmb3JlOllMdCxzdW06S0x0LHNvcnQ6Skx0LHBhdGg6dGt0LGFuY2VzdG9yczpya3QsZGVzY2VuZGFudHM6aWt0LGxlYXZlczpha3QsbGlua3M6bGt0LGNvcHk6T1BlfX0pO2Z1bmN0aW9uIGhrdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgdWt0LGZrdD1NKCgpPT57dWt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9aGt0KHVrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJnBrdChvLGkpPysrdDoobz1IUGUobj1CUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBCUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKGRrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gcGt0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighcGt0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSFBlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBWUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gZGt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gVlBlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIGRrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Zmt0KCl9KTtmdW5jdGlvbiBta3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24gZ2t0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIF9rdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7bWt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtta3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoZ2t0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoZ2t0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPV9rdCh0KTsobj1uLm5leHQpIT09cjspKGE9X2t0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB5a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gdmt0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBVUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB3a3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoeGt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoYmt0KDEpKTpvLmVhY2hCZWZvcmUoeGt0KFVQZSkpLmVhY2hBZnRlcihiUSh0ZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGJrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12a3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIHhrdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBia3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIFNrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gTWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIEVrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gR1BlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIFdQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBBa3QoKXt2YXIgZT1HUGUsdD1XUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9VGt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0NrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtUa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Da3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1xUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBUa3QscVBlLENrdCxQa3Q9TSgoKT0+e1pEKCk7akQoKTtUa3Q9IiQiLHFQZT17ZGVwdGg6LTF9LENrdD17fX0pO2Z1bmN0aW9uIFlQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24galBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIFhQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiAkUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiBLUGUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gSWt0KCl7dmFyIGU9WVBlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9S1BlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe1hQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoalBlKCRQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBMa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIGtrdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciBSa3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBOa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgRGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciB6a3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBGa3QsQmt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtGa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgSGt0PU0oKCk9PntWTHQoKTtqRCgpO1NrdCgpO3ZRKCk7X1EoKTtFa3QoKTtQa3QoKTtMa3QoKTtSa3QoKTtEa3QoKTtVMigpOyRUKCk7emt0KCk7ZU8oKTtCa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFVrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGk2ZSgpe3JldHVybiBYa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gcWt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9WlBlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/R2t0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1KUGUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PVFQZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9dDZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWU2ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1yNmUuZXhlYyhlKSk/amt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9bjZlLmV4ZWMoZSkpP2prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOlZrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ha3QoVmt0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBHa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFdrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBZa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gamt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gWGt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/WGt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMixLVCx1ZixaUGUsSlBlLFFQZSx0NmUsZTZlLHI2ZSxuNmUsVmt0LGlPPU0oKCk9PntyTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixaUGU9L14jKFswLTlhLWZdezMsOH0pJC8sSlBlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxRUGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLHQ2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLGU2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLEtUXSsiXFwpJCIpLHI2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsdWYsdWZdKyJcXCkkIiksbjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsdWYsdWYsS1RdKyJcXCkkIiksVmt0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlVrdCxmb3JtYXRIZXg6VWt0LGZvcm1hdEhzbDppNmUsZm9ybWF0UmdiOnFrdCx0b1N0cmluZzpxa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6V2t0LGZvcm1hdEhleDpXa3QsZm9ybWF0UmdiOllrdCx0b1N0cmluZzpZa3R9KSk7ZWQoY2YsSlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIHQ4dChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gZTh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvS2t0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pLyRrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL1prdCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3Q4dChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5vNmU/TWF0aC5wb3coZSwxLzMpOmUvUWt0K0prdH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpRa3QqKGUtSmt0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGE2ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9dDh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/YTZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGU4dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLCRrdCxLa3QsWmt0LEprdCxXMixRa3QsbzZlLHI4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsJGt0PS45NjQyMixLa3Q9MSxaa3Q9LjgyNTIxLEprdD00LzI5LFcyPTYvMjksUWt0PTMqVzIqVzIsbzZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD0ka3QqTFEodCksZT1La3QqTFEoZSkscj1aa3QqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxRVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGU4dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBzNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obzh0Km4rbjh0KnQtaTh0KnIpLyhvOHQrbjh0LWk4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9zNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGE4dCxOUSxEUSxsTyx0QyxuOHQsaTh0LG84dCxzOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO2E4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsbjh0PXRDKmxPLGk4dD10QypOUSxvOHQ9TlEqRFEtbE8qYTh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKihhOHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e2lPKCk7cjh0KCk7czh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGw4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGw2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBjOHQoZSl7cmV0dXJuKGU9K2UpPT0xP0puOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9sNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIEpuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gdTh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLGg4dCxmOHQsQlE9TSgoKT0+e2p5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1jOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7aDh0PXU4dChjTyksZjh0PXU4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gYzZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiB1NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/dTZlKGxbMF0ueCk6YzZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIEVnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POkFzKShlLHQpfXZhciBwTz1NKCgpPT57ankoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gcDh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciBkOHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKm04dCxza2V3WDpNYXRoLmF0YW4obCkqbTh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgbTh0LF9PLGc4dD1NKCgpPT57bTh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24geTh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxfOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Xzh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHY4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLF84dCx5Tyx4OHQ9TSgoKT0+e2c4dCgpfSk7ZnVuY3Rpb24gYjh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciB3OHQsUzh0LE04dD1NKCgpPT57ckMoKTt4OHQoKTt3OHQ9Yjh0KHk4dCwicHgsICIsInB4KSIsImRlZykiKSxTOHQ9Yjh0KHY4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gVDh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGY2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBwNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEM4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8aDZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0U4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktRTh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9VDh0KF8pLEM9aS8oWFEqcCkqKFMqcDZlKGlDKmIrXyktZjZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL1Q4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsRTh0LGg2ZSxBOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixFOHQ9NCxoNmU9MWUtMTJ9KTtmdW5jdGlvbiBQOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Kbih0LnMsci5zKSxvPUpuKHQubCxyLmwpLGE9Sm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIEk4dCxMOHQsazh0PU0oKCk9PntqeSgpO0syKCk7STh0PVA4dCgkMiksTDh0PVA4dChKbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPUpuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPUpuKGUuYSx0LmEpLGk9Sm4oZS5iLHQuYiksbz1KbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciBSOHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIE44dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPUpuKHQuYyxyLmMpLG89Sm4odC5sLHIubCksYT1Kbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgRDh0LE84dCx6OHQ9TSgoKT0+e2p5KCk7SzIoKTtEOHQ9Tjh0KCQyKSxPOHQ9Tjh0KEpuKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPUpuKGkucyxvLnMpLGw9Sm4oaS5sLG8ubCksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEI4dCxIOHQsVjh0PU0oKCk9PntqeSgpO0syKCk7Qjh0PUY4dCgkMiksSDh0PUY4dChKbil9KTtmdW5jdGlvbiBVOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgcTh0PU0oKCk9Pnt9KTt2YXIgRzh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO2Q4dCgpO1dRKCk7TTh0KCk7QTh0KCk7QlEoKTtrOHQoKTtSOHQoKTt6OHQoKTtWOHQoKTtxOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gVzh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsWHksZDZlLFk4dCxqOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSxYeT0xZS02LGQ2ZT1aUS1YeTtKUS5wcm90b3R5cGU9Vzh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+ZDZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O1k4dD1XOHR9KTt2YXIgWDh0PU0oKCk9PntqOHQoKX0pO2Z1bmN0aW9uICQ4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIEs4dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjh0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgSjh0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROHQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciB0UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBlUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmUTh0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIHJSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KG02ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89ZVJ0KG4pLGE9ZVJ0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBuUnQ9TSgoKT0+e3RSdCgpfSk7ZnVuY3Rpb24gaVJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgb1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIHNSdD1NKCgpPT57fSk7dmFyIGxSdD1NKCgpPT57Szh0KCk7Sjh0KCk7blJ0KCk7b1J0KCk7c1J0KCl9KTtmdW5jdGlvbiBjUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiB1UnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiB1UnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gaFJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcil1UnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFJ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBkUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1SdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBnUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgeVJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIHZSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHhSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIGJSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB3UnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBTUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1SdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBFUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIENSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQVJ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFBSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIElSdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgTFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24ga1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIFJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIE5SdD1NKCgpPT57fSk7ZnVuY3Rpb24gRFJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIHpSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP2tSdDp0LHI9PW51bGw/RFJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gRlJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgWGEsQlJ0PU0oKCk9PntmUnQoKTtkUnQoKTtnUnQoKTt5UnQoKTt4UnQoKTtTUnQoKTtFUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtOUnQoKTt6UnQoKTtYYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1GUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1GUnQobikpO3JldHVybiBlfTtYYS5hZGQ9Y1J0O1hhLmFkZEFsbD1oUnQ7WGEuY292ZXI9cFJ0O1hhLmRhdGE9bVJ0O1hhLmV4dGVudD1fUnQ7WGEuZmluZD12UnQ7WGEucmVtb3ZlPWJSdDtYYS5yZW1vdmVBbGw9d1J0O1hhLnJvb3Q9TVJ0O1hhLnNpemU9VFJ0O1hhLnZpc2l0PUFSdDtYYS52aXNpdEFmdGVyPUlSdDtYYS54PVJSdDtYYS55PU9SdH0pO3ZhciBIUnQ9TSgoKT0+e0JSdCgpfSk7dmFyIFZSdCxVUnQ9TSgoKT0+e1ZSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBxUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtfNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gXzZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09eTZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8ZzZlKX19ZnVuY3Rpb24geTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/cVJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIGc2ZSxHUnQ9TSgoKT0+e1VSdCgpO2c2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVZSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLHFSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgV1J0PU0oKCk9PntHUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyICR5PU0oKCk9Pnt9KTt2YXIgWVJ0LGpSdD1NKCgpPT57JHkoKTtZUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgWFJ0LCRSdD1NKCgpPT57JHkoKTtydHQoKTtYUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57JHkoKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgS1J0LFpSdD1NKCgpPT57JHkoKTtudHQoKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBKUnQsUVJ0PU0oKCk9PnskeSgpO0pSdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50PU0oKCk9PntqUnQoKTtydHQoKTskUnQoKTtaUnQoKTtudHQoKTtRUnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj12cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZ4NmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9djZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIHY2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24geDZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO2ttKCl9KTtmdW5jdGlvbiBUZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBlTnQsck50PU0oKCk9PntvQygpO2VOdD1UZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgbk50LGlOdD1NKCgpPT57b0MoKTtuTnQ9VGcoImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIG9OdCxhTnQ9TSgoKT0+e29DKCk7b050PVRnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBzTnQsbE50PU0oKCk9PntvQygpO3NOdD1UZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKGI2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gYjZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e3FFKCk7aXR0KCk7Y050PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIGhOdCxmTnQ9TSgoKT0+e3FFKCk7aXR0KCk7aE50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgcE50PU0oKCk9PntFTygpO3JOdCgpO2lOdCgpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpfSk7ZnVuY3Rpb24gcGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEt5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT13NmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiB3NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHBmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e0t5KCl9KTt2YXIgZE50LG1OdCxTNmUsZGYsYXR0PU0oKCk9PntLeSgpO290dCgpO2ROdD1hQyhwZiksbU50PWROdC5yaWdodCxTNmU9ZE50LmxlZnQsZGY9bU50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIGdOdD1NKCgpPT57c3R0KCl9KTt2YXIgX050PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHlOdCxFNmUsVDZlLGh0dD1NKCgpPT57eU50PUFycmF5LnByb3RvdHlwZSxFNmU9eU50LnNsaWNlLFQ2ZT15TnQubWFwfSk7dmFyIHZOdD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIFp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBiTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO3ZOdCgpO3V0dCgpO3hOdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIHdOdD1NKCgpPT57aHR0KCk7S3koKTt0dygpO0FPKCl9KTt2YXIgU050PU0oKCk9PntjdHQoKX0pO3ZhciBNTnQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e3R3KCl9KTt2YXIgVE50PU0oKCk9PntLeSgpO3R3KCk7QU8oKX0pO3ZhciBDTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e0t5KCl9KTt2YXIgSU50PU0oKCk9Pnt9KTt2YXIgTE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBrTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIG1mPU0oKCk9PnthdHQoKTtLeSgpO290dCgpO2dOdCgpO19OdCgpO2N0dCgpO3V0dCgpO2JOdCgpO3dOdCgpO1NOdCgpO190dCgpO01OdCgpO0VOdCgpO1ROdCgpO0NOdCgpO3l0dCgpO3N0dCgpO0FOdCgpO0FPKCk7ZnR0KCk7UE50KCk7SU50KCk7TE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7a050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiBSTnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBmbCxKeSxJTz1NKCgpPT57Zmw9IiQiO1BPLnByb3RvdHlwZT1STnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2ZsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tmbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1mbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1mbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09ZmwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O0p5PVJOdH0pO3ZhciBOTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBrNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBReSxETnQ9TSgoKT0+e0lPKCk7UXk9SnkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1rNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6UXkuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1tmbCtlXT1lLHRoaXN9LHJlbW92ZTpReS5yZW1vdmUsY2xlYXI6UXkuY2xlYXIsdmFsdWVzOlF5LmtleXMsc2l6ZTpReS5zaXplLGVtcHR5OlF5LmVtcHR5LGVhY2g6UXkuZWFjaH19KTt2YXIgT050PU0oKCk9Pnt9KTt2YXIgek50PU0oKCk9Pnt9KTt2YXIgRk50PU0oKCk9Pnt9KTt2YXIgQk50PU0oKCk9PntOTnQoKTtETnQoKTtJTygpO09OdCgpO3pOdCgpO0ZOdCgpfSk7dmFyIEhOdCxydyxwbCxDZz1NKCgpPT57SE50PUFycmF5LnByb3RvdHlwZSxydz1ITnQubWFwLHBsPUhOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PUp5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpwbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1KeSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57Qk50KCk7Q2coKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gVk50KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZOdCh0KCkpfSxlfWZ1bmN0aW9uIFVOdCgpe3JldHVybiBWTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBxTnQ9TSgoKT0+e21mKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZXYoKXt9ZnVuY3Rpb24gV050KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSDZlKCl7cmV0dXJuIFpOdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBZTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBQZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1SNmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9qTnQodCk6cj09PTM/bmV3IGhhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU42ZS5leGVjKGUpKT9uZXcgaGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9RDZlLmV4ZWMoZSkpP25ldyBoYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1PNmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9ejZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUY2ZS5leGVjKGUpKT9LTnQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1CNmUuZXhlYyhlKSk/S050KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6R050Lmhhc093blByb3BlcnR5KGUpP2pOdChHTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBoYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGpOdChlKXtyZXR1cm4gbmV3IGhhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGhhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGV2fHwoZT1QZyhlKSksZT8oZT1lLnJnYigpLG5ldyBoYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgaGF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgaGEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGhhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gJE50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBLTnQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBnZihlLHQscixuKX1mdW5jdGlvbiBaTnQoZSl7aWYoZSBpbnN0YW5jZW9mIGdmKXJldHVybiBuZXcgZ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZXZ8fChlPVBnKGUpKSwhZSlyZXR1cm4gbmV3IGdmO2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBnZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIEpOdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Wk50KGUpOm5ldyBnZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgQWcsdHYsb3csaEMsX2YsUjZlLE42ZSxENmUsTzZlLHo2ZSxGNmUsQjZlLEdOdCxFdHQ9TSgoKT0+e2J0dCgpO0FnPS43LHR2PTEvQWcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLF9mPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixSNmU9L14jKFswLTlhLWZdezMsOH0pJC8sTjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxENmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW19mLF9mLF9mXSsiXFwpJCIpLE82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLHo2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW19mLF9mLF9mLGhDXSsiXFwpJCIpLEY2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMsX2YsX2ZdKyJcXCkkIiksQjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMsX2YsX2YsaENdKyJcXCkkIiksR050PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KGV2LFBnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OldOdCxmb3JtYXRIZXg6V050LGZvcm1hdEhzbDpINmUsZm9ybWF0UmdiOllOdCx0b1N0cmluZzpZTnR9KTtpdyhoYSxhdyx1Qyhldix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90djpNYXRoLnBvdyh0dixlKSxuZXcgaGEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/QWc6TWF0aC5wb3coQWcsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6WE50LGZvcm1hdEhleDpYTnQsZm9ybWF0UmdiOiROdCx0b1N0cmluZzokTnR9KSk7aXcoZ2YsSk50LHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGhhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBRTnQsdER0LGVEdD1NKCgpPT57UU50PU1hdGguUEkvMTgwLHREdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFY2ZShlKXtpZihlIGluc3RhbmNlb2YgcnYpcmV0dXJuIG5ldyBydihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBoYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oaUR0Km4rckR0KnQtbkR0KnIpLyhpRHQrckR0LW5EdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKnREdC0xMjA6TmFOO3JldHVybiBuZXcgcnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gJGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1Y2ZShlKTpuZXcgcnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHJ2KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgb0R0LFR0dCxDdHQsTk8sZkMsckR0LG5EdCxpRHQsYUR0PU0oKCk9PntidHQoKTtFdHQoKTtlRHQoKTtvRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsckR0PWZDKk5PLG5EdD1mQypUdHQsaUR0PVR0dCpDdHQtTk8qb0R0O2l3KHJ2LCRhLHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUU50LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBoYSgyNTUqKHQrcioob0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO2FEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gc0R0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgY0R0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1RHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBVNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBoRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGZEdChlKXtyZXR1cm4oZT0rZSk9PTE/bmQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1U2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gbmQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIHBEdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsbDVuLGM1bixkRHQ9TSgoKT0+e3N3KCk7UHR0KCk7Y0R0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9ZkR0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9bmQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2w1bj1wRHQoc0R0KSxjNW49cER0KGxEdCl9KTtmdW5jdGlvbiBtRHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gZ0R0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgX0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1udihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciB2RHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiB4RHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBiRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gd0R0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bnYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgU0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gcTZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBHNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6eWYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/RzZlKGxbMF0ueCk6cTZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LEVEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIG52KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3lmOnI9PT0ic3RyaW5nIj8obj1QZyh0KSk/KHQ9bixrdHQpOk1EdDp0IGluc3RhbmNlb2YgUGc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP3hEdDpnRHQodCk/bUR0OkFycmF5LmlzQXJyYXkodCk/eUR0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT93RHQ6eWYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO2REdCgpO3ZEdCgpO2JEdCgpO09PKCk7U0R0KCk7RUR0KCk7SXR0KCk7X0R0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIFREdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ0R0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9JGEoaSkpLmgsKG89JGEobykpLmgpLHM9bmQoaS5zLG8ucyksbD1uZChpLmwsby5sKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgVzZlLGN3LEFEdD1NKCgpPT57c3coKTtMdHQoKTtXNmU9Q0R0KGhEdCksY3c9Q0R0KG5kKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO1REdCgpO0FEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gWTZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIGo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBYNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gJDZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPWRmKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIElnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIGlkKGUsdCl7dmFyIHI9UER0LG49UER0LGk9bnYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/JDZlOlg2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/WTZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP2o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1wbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49cGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBQRHQsZEM9TSgoKT0+e21mKCk7dXcoKTtDZygpO3pPKCk7T3R0KCk7UER0PVswLDFdfSk7ZnVuY3Rpb24gSUR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBpdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUpe3JldHVybiBlPWl2KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIExEdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIga0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSRHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBORHQ9TSgoKT0+e30pO2Z1bmN0aW9uIExnKGUpe2lmKCEodD1LNmUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciBLNmUsenR0PU0oKCk9PntLNmU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7TGcucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEREdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikraXYoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBGRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LEJEdD1NKCgpPT57bUMoKTtCdHQoKTtGRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpJRHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOnpEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBIRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6TER0KFZEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OlJEdChWRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9RER0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/VUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1MZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1VRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFZEdCxVRHQsR0R0PU0oKCk9PntnQygpO2tEdCgpO05EdCgpO3p0dCgpO09EdCgpO0JEdCgpO0J0dCgpO0hEdCgpO1ZEdD1BcnJheS5wcm90b3R5cGUubWFwLFVEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89cUR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLFdEdD1NKCgpPT57R0R0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwtdmYoTWF0aC5hYnMoZSkpKX12YXIgWUR0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHZmKHQpLzMpKSkqMy12ZihNYXRoLmFicyhlKSkpfXZhciBqRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx2Zih0KS12ZihlKSkrMX12YXIgWER0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57V0R0KCk7enR0KCk7WUR0KCk7akR0KCk7WER0KCl9KTtmdW5jdGlvbiAkRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89WnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1MZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciBLRHQ9TSgoKT0+e21mKCk7anR0KCl9KTtmdW5jdGlvbiBvZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gJER0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1pZChwQyx5Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhlLFVPKCkpfSxvZChlKX12YXIgcHc9TSgoKT0+e21mKCk7dXcoKTtkQygpO0tEdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sb2QodCl9dmFyIFpEdD1NKCgpPT57Q2coKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaNmUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBKNmUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIFE2ZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gSkR0KGUpe3JldHVybiBlPT09MTA/UTZlOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIFFEdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gdE90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9aWQoWjZlLEo2ZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49UUR0KDEwKSxpPUpEdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPVFEdChyKSxpPUpEdChyKSx0KClbMF08MCYmKG49dE90KG4pLGk9dE90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxXTygpLmJhc2UocikpfSxlfXZhciBlT3Q9TSgoKT0+e21mKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PWlkKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHQsX0MoKS5leHBvbmVudChlKSl9LG9kKHQpfWZ1bmN0aW9uIHJPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgbk90PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbZGYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KHBmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGlPdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW2RmKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9cGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LG9kKG8pfXZhciBvT3Q9TSgoKT0+e21mKCk7Q2coKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFtkZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgYU90PU0oKCk9PnttZigpO0NnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LEthPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LHNPdCxsT3Q9TSgoKT0+e0thKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxzT3Q9JE8ucmFuZ2V9KTt2YXIgb3Ysd2MsZ3csS08sWk8seGY9TSgoKT0+e292PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgY090LF93LHVPdCxoT3Q9TSgoKT0+e0thKCk7eGYoKTtjT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqb3YpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL292fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1jT3QsdU90PWNPdC5yYW5nZX0pO3ZhciBmT3QsWnR0LHRJZSxwT3Q9TSgoKT0+e0thKCk7eGYoKTtmT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Zk90LHRJZT1mT3QucmFuZ2V9KTt2YXIgZE90LEp0dCxlSWUsbU90PU0oKCk9PntLYSgpO3hmKCk7ZE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqb3YtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD1kT3QsZUllPWRPdC5yYW5nZX0pO3ZhciBnT3QseXcsckllLF9PdD1NKCgpPT57S2EoKTt4ZigpO2dPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9Z090LHJJZT1nT3QucmFuZ2V9KTtmdW5jdGlvbiBhdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgc3YsdncseU90LHZPdCxrZyx4T3QsYk90LHdPdCxuSWUsaUllLG9JZSxhSWUsc0llLGxJZSxTT3Q9TSgoKT0+e0thKCk7eGYoKTtzdj1hdigwKSx2dz1hdigxKSx5T3Q9YXYoMiksdk90PWF2KDMpLGtnPWF2KDQpLHhPdD1hdig1KSxiT3Q9YXYoNiksd090PXN2LnJhbmdlLG5JZT12dy5yYW5nZSxpSWU9eU90LnJhbmdlLG9JZT12T3QucmFuZ2UsYUllPWtnLnJhbmdlLHNJZT14T3QucmFuZ2UsbEllPWJPdC5yYW5nZX0pO3ZhciBNT3QsUXR0LGNJZSxFT3Q9TSgoKT0+e0thKCk7TU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1NT3QsY0llPU1PdC5yYW5nZX0pO3ZhciB0ZXQsYWQsdUllLFRPdD1NKCgpPT57S2EoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTthZD10ZXQsdUllPXRldC5yYW5nZX0pO3ZhciBDT3QsZWV0LGhJZSxBT3Q9TSgoKT0+e0thKCk7eGYoKTtDT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9Q090LGhJZT1DT3QucmFuZ2V9KTt2YXIgUE90LHJldCxmSWUsSU90PU0oKCk9PntLYSgpO3hmKCk7UE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVBPdCxmSWU9UE90LnJhbmdlfSk7dmFyIExPdCx4dyxwSWUsa090PU0oKCk9PntLYSgpO3hmKCk7TE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PUxPdCxwSWU9TE90LnJhbmdlfSk7ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgY3YsYncsUk90LE5PdCxSZyxET3QsT090LHpPdCxkSWUsbUllLGdJZSxfSWUseUllLHZJZSxGT3Q9TSgoKT0+e0thKCk7eGYoKTtjdj1sdigwKSxidz1sdigxKSxST3Q9bHYoMiksTk90PWx2KDMpLFJnPWx2KDQpLERPdD1sdig1KSxPT3Q9bHYoNiksek90PWN2LnJhbmdlLGRJZT1idy5yYW5nZSxtSWU9Uk90LnJhbmdlLGdJZT1OT3QucmFuZ2UsX0llPVJnLnJhbmdlLHlJZT1ET3QucmFuZ2UsdkllPU9PdC5yYW5nZX0pO3ZhciBCT3QsbmV0LHhJZSxIT3Q9TSgoKT0+e0thKCk7Qk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1CT3QseEllPUJPdC5yYW5nZX0pO3ZhciBpZXQsc2QsYkllLFZPdD1NKCgpPT57S2EoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtzZD1pZXQsYkllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57bE90KCk7aE90KCk7cE90KCk7bU90KCk7X090KCk7U090KCk7RU90KCk7VE90KCk7QU90KCk7SU90KCk7a090KCk7Rk90KCk7SE90KCk7Vk90KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmpPdCxlOmpPdCxmOkdJZSxnOnQ5ZSxHOnI5ZSxIOlZJZSxJOlVJZSxqOnFJZSxMOkpPdCxtOldJZSxNOllJZSxwOnN0LHE6U3QsUTpLT3QsczpaT3QsUzpqSWUsdTpYSWUsVTokSWUsVjpLSWUsdzpaSWUsVzpKSWUseDpudWxsLFg6bnVsbCx5OlFJZSxZOmU5ZSxaOm45ZSwiJSI6JE90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOlhPdCxlOlhPdCxmOnM5ZSxnOl85ZSxHOnY5ZSxIOmk5ZSxJOm85ZSxqOmE5ZSxMOnQ3dCxtOmw5ZSxNOmM5ZSxwOl90LHE6Y3QsUTpLT3QsczpaT3QsUzp1OWUsdTpoOWUsVTpmOWUsVjpwOWUsdzpkOWUsVzptOWUseDpudWxsLFg6bnVsbCx5Omc5ZSxZOnk5ZSxaOng5ZSwiJSI6JE90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6V090LGU6V090LGY6ekllLGc6R090LEc6cU90LEg6WU90LEk6WU90LGo6UkllLEw6T0llLG06a0llLE06TkllLHA6RCxxOkxJZSxROkJJZSxzOkhJZSxTOkRJZSx1OlRJZSxVOkNJZSxWOkFJZSx3OkVJZSxXOlBJZSx4OnosWDpVLHk6R090LFk6cU90LFo6SUllLCIlIjpGSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1VT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gVU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gTUllKGUpe3JldHVybiBlLnJlcGxhY2UoU0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKE1JZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEVJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElJZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBESWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGSWUoZSx0LHIpe3ZhciBuPXdJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEJJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFZJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBVSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHFJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KGFkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSk90KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBHSWUoZSx0KXtyZXR1cm4gSk90KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gV0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gakllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWEllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiAkSWUoZSx0KXtyZXR1cm4gR3Ioc3YuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFPdChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9rZyhlKTprZy5jZWlsKGUpfWZ1bmN0aW9uIEtJZShlLHQpe3JldHVybiBlPVFPdChlKSxHcihrZy5jb3VudChhZChlKSxlKSsoYWQoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFpJZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBKSWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFJZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdDllKGUsdCl7cmV0dXJuIGU9UU90KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBlOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHI5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/a2coZSk6a2cuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gbjllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBYT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBpOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBhOWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChzZChlKSxlKSx0LDMpfWZ1bmN0aW9uIHQ3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gczllKGUsdCl7cmV0dXJuIHQ3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGw5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGM5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHU5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGg5ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZjllKGUsdCl7cmV0dXJuIEdyKGN2LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBlN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/UmcoZSk6UmcuY2VpbChlKX1mdW5jdGlvbiBwOWUoZSx0KXtyZXR1cm4gZT1lN3QoZSksR3IoUmcuY291bnQoc2QoZSksZSkrKHNkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBkOWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gbTllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBnOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIF85ZShlLHQpe3JldHVybiBlPWU3dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24geTllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB2OWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1JnKGUpOlJnLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHg5ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gJE90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEtPdChlKXtyZXR1cm4rZX1mdW5jdGlvbiBaT3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgVU90LFRvLHdJZSxTSWUscjd0PU0oKCk9PntKTygpO1VPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sd0llPS9eJS8sU0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxuN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGk3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sbjd0LHQ3LGk3dCxvN3Q9TSgoKT0+e3I3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57bzd0KCl9KTtmdW5jdGlvbiB3OWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIFM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9aWQocEMseWYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxiOWVdLFt0LDEsYTd0XSxbdCwzLDMqYTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1aeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KFp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxTOWUpKTpoKCkubWFwKHc5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gczd0KCl7cmV0dXJuIGU3KGFkLFF0dCxzdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLGI5ZSxhN3QsaGV0LGZldD1NKCgpPT57bWYoKTt1dygpO0pPKCk7dWV0KCk7Q2coKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxiOWU9TUMqNyxhN3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGw3dCgpe3JldHVybiBlNyhzZCxuZXQsY3YseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBjN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBkbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciB1N3QsaDd0PU0oKCk9PntTdygpO3U3dD1kbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZjd0LHA3dD1NKCgpPT57U3coKTtmN3Q9ZGwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIGQ3dCxtN3Q9TSgoKT0+e1N3KCk7ZDd0PWRsKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciBnN3QsXzd0PU0oKCk9PntTdygpO2c3dD1kbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgeTd0LHY3dD1NKCgpPT57c3coKTt1dygpO3k3dD1jdygkYSgzMDAsLjUsMCksJGEoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiB3N3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIHg3dCxiN3QscjcsUzd0PU0oKCk9PntzdygpO3V3KCk7eDd0PWN3KCRhKC0xMDAsLjc1LC4zNSksJGEoODAsMS41LC44KSksYjd0PWN3KCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxyNz0kYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIE03dCxFN3QsVDd0LEM3dCxBN3Q9TSgoKT0+e1N3KCk7TTd0PW43KGRsKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksRTd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksVDd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksQzd0PW43KGRsKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxvZChpKX12YXIgUDd0PU0oKCk9PntwdygpfSk7dmFyIEk3dD1NKCgpPT57cU50KCk7WkR0KCk7cHcoKTtlT3QoKTt4dHQoKTtuT3QoKTtpT3QoKTtvT3QoKTthT3QoKTtmZXQoKTtjN3QoKTtoN3QoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtTN3QoKTtBN3QoKTtQN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gTTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBFOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/RTllOk05ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBUOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/VDllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBMN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgQm4obix0aGlzLl9wYXJlbnRzKX12YXIgazd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBDOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9DOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBCbihuLGkpfXZhciBON3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgTzd0LFR3LEQ3dCx1NyxkZXQ9TSgoKT0+e083dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoRDd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixPN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEQ3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PU83dH0pO2Z1bmN0aW9uIHo3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJuKG4sdGhpcy5fcGFyZW50cyl9dmFyIEY3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEI3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEg3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFY3dD1NKCgpPT57fSk7ZnVuY3Rpb24gQTllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUDllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9VTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9VTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gcTd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9QOWU6QTllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SDd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBCbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFU3dCxHN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vjd0KCk7VTd0PSIkIn0pO2Z1bmN0aW9uIFc3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIFk3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIGo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgQm4oYSx0aGlzLl9wYXJlbnRzKX12YXIgWDd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gJDd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBLN3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFo3dChlKXtlfHwoZT1JOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgQm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIEk5ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciByenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG56dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGl6dD1NKCgpPT57fSk7ZnVuY3Rpb24gb3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgYXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGs5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFI5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBEOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIE85ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBoenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/azllOkw5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP085ZTpEOWU6ci5sb2NhbD9OOWU6UjllKShyLHQpKX12YXIgZnp0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gejllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEY5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEI5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBwenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3o5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9COWU6RjllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBIOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gVTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIGR6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0g5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9VOWU6VjllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgbXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBnenQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBfenQoZSl9ZnVuY3Rpb24gX3p0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1nenQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB5enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gdnp0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHE5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt5enQodGhpcyxlKX19ZnVuY3Rpb24gRzllKGUpe3JldHVybiBmdW5jdGlvbigpe3Z6dCh0aGlzLGUpfX1mdW5jdGlvbiBXOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/eXp0OnZ6dCkodGhpcyxlKX19ZnVuY3Rpb24geHp0KGUsdCl7dmFyIHI9Z3p0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9XOWU6dD9xOWU6RzllKShyLHQpKX12YXIgYnp0PU0oKCk9PntfenQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gWTllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBqOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBYOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHd6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9ZOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1g5ZTpqOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgU3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkOWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBLOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWjllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsPyQ5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WjllOks5ZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVHp0KCl7cmV0dXJuIHRoaXMuZWFjaChKOWUpfXZhciBDenQ9TSgoKT0+e30pO2Z1bmN0aW9uIFE5ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEF6dCgpe3JldHVybiB0aGlzLmVhY2goUTllKX12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgTHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gdExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24ga3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKSxuPXQ9PW51bGw/dExlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBSenQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIGVMZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIE56dCgpe3JldHVybiB0aGlzLmVhY2goZUxlKX12YXIgRHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gbkxlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIE96dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9uTGU6ckxlKX12YXIgenp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBCenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlMZShlLHQscil7cmV0dXJuIGU9VXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFV6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBvTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIGFMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBzTGUoZSx0LHIpe3ZhciBuPVZ6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2lMZTpVenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gcXp0KGUsdCxyKXt2YXIgbj1vTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P3NMZTphTGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR3p0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBWenQsUHUsSHp0LHA3PU0oKCk9PntWenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoSHp0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEh6dHx8KFZ6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBXenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGxMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXenQodGhpcyxlLHQpfX1mdW5jdGlvbiBjTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV3p0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIFl6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2NMZTpsTGUpKGUsdCkpfXZhciBqenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBCbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBYenQoKXtyZXR1cm4gbmV3IEJuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQywkenQsU2M9TSgoKT0+e2s3dCgpO043dCgpO0Y3dCgpO0c3dCgpO2dldCgpO1k3dCgpO1g3dCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO3lldCgpO216dCgpO2J6dCgpO1N6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO3A3KCk7anp0KCk7QUM9W251bGxdO0JuLnByb3RvdHlwZT1YenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCbixzZWxlY3Q6TDd0LHNlbGVjdEFsbDpSN3QsZmlsdGVyOno3dCxkYXRhOnE3dCxlbnRlcjpCN3QsZXhpdDpXN3QsbWVyZ2U6ajd0LG9yZGVyOiQ3dCxzb3J0Olo3dCxjYWxsOlE3dCxub2RlczplenQsbm9kZTpuenQsc2l6ZTpvenQsZW1wdHk6c3p0LGVhY2g6Y3p0LGF0dHI6aHp0LHN0eWxlOnB6dCxwcm9wZXJ0eTpkenQsY2xhc3NlZDp4enQsdGV4dDp3enQsaHRtbDpNenQscmFpc2U6VHp0LGxvd2VyOkF6dCxhcHBlbmQ6SXp0LGluc2VydDprenQscmVtb3ZlOk56dCxjbG9uZTpPenQsZGF0dW06Rnp0LG9uOnF6dCxkaXNwYXRjaDpZenR9OyR6dD1YenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBCbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gS3p0KGUpe3JldHVybiBkNyhOZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBaenQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrdUxlKS50b1N0cmluZygzNil9dmFyIHVMZSxKenQ9TSgoKT0+e3VMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIERnKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBRenQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRGcoZSx0KX12YXIgdEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBlRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgQm4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQm4oW2U9PW51bGw/W106ZV0sQUMpfXZhciByRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBuRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRGcoZSxvKTtyZXR1cm4gbnVsbH12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EZyhlLHRbcl0pO3JldHVybiBpfXZhciBhRnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBzRnQ9TSgoKT0+e1p6dCgpO1RDKCk7Snp0KCk7ZGV0KCk7dEZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7ckZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2lGdCgpO2FGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGxGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LHV2LGhMZSxJdSxjRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCx1dj0xZS02LGhMZT1NZXQtdXY7RWV0LnByb3RvdHlwZT1sRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPnV2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+dXYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnV2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnV2fHxNYXRoLmFicyh0aGlzLl95MS1jKT51dikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+aExlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPnV2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1sRnR9KTt2YXIgUHc9TSgoKT0+e2NGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBPZz1NKCgpPT57fSk7ZnVuY3Rpb24gaEZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLHpnLHVGdCxfNyxMdSxodixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsemc9TWF0aC5jb3MsdUZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGh2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGZMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBwTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZExlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gbUxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIGdMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBfTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9odihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpodih1RnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGZGdCgpe3ZhciBlPWZMZSx0PXBMZSxyPUdlKDApLG49bnVsbCxpPWRMZSxvPW1MZSxhPWdMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKnpnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqemcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aHYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKnpnKHkpLFc9ZipMdSh5KSxaPWgqemcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9Zip6Zyh4KSxzdD1mKkx1KHgpLFN0PWgqemcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9fTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KGhGdCgobHQqX3QrS3QqY3QpLyhodihsdCpsdCtLdCpLdCkqaHYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9aHYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW3pnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgcEZ0PU0oKCk9PntQdygpO09nKCk7SXcoKX0pO2Z1bmN0aW9uIGRGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIG5ldyBkRnQoZSl9dmFyIExDPU0oKCk9PntkRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1GZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO09nKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUZnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO09nKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiBtRnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGdGdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0Z0KGUpe3JldHVybiBlfXZhciB5RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZGdCgpe3ZhciBlPV9GdCx0PW1GdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIHhGdD1NKCgpPT57T2coKTtnRnQoKTt5RnQoKTtJdygpfSk7ZnVuY3Rpb24gYkZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IGJGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoRmcpO2JGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciB3RnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gZnYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiB2TGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD15TGUscj12TGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHhMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIGJMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHdMZShlLHQscixuLGkpe3ZhciBvPWZ2KHQsciksYT1mdih0LHI9KHIraSkvMikscz1mdihuLHIpLGw9ZnYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gU0Z0KCl7cmV0dXJuIERldCh4TGUpfWZ1bmN0aW9uIE1GdCgpe3JldHVybiBEZXQoYkxlKX1mdW5jdGlvbiBFRnQoKXt2YXIgZT1EZXQod0xlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBURnQ9TSgoKT0+e1B3KCk7TmV0KCk7T2coKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBDRnQsU0xlLE03LEZldD1NKCgpPT57Q0Z0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksU0xlPUNGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvU0xlKSxuPXIqQ0Z0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgTUxlLEFGdCxFTGUsVExlLEU3LEJldD1NKCgpPT57SXcoKTtNTGU9Ljg5MDgxMzA5MTUyOTI4NTIsQUZ0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxFTGU9TWF0aC5zaW4oTWMvMTApKkFGdCxUTGU9LU1hdGguY29zKE1jLzEwKSpBRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpNTGUpLG49RUxlKnIsaT1UTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsQ0xlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksQ0xlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gSUZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBQRnQsTEZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO09nKCk7UEZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24ga0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIFJGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gTkZ0KGUpe3JldHVybiBuZXcgUkZ0KGUpfXZhciBERnQ9TSgoKT0+e05DKCk7T0MoKTtSRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIE9GdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gekZ0KGUpe3JldHVybiBuZXcgT0Z0KGUpfXZhciBGRnQ9TSgoKT0+e09DKCk7T0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gQkZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgSEZ0LFZGdD1NKCgpPT57T0MoKTtCRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgQkZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgVUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtVRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIHFGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtxRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIEdGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gV0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFlGdCxrNz1NKCgpPT57SXcoKTt6QygpO1dGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07WUZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgV0Z0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBqRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgWEZ0LCRGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO2pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gS0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFpGdCxKRnQ9TSgoKT0+e1lldCgpO2s3KCk7S0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IEtGdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gUUZ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB0QnQoZSl7cmV0dXJuIG5ldyBRRnQoZSl9dmFyIGVCdD1NKCgpPT57TkMoKTtRRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIHJCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gbkJ0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKHJCdChvKStyQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBpQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIG9CdChlKXt0aGlzLl9jb250ZXh0PW5ldyBhQnQoZSl9ZnVuY3Rpb24gYUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBzQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBsQnQoZSl7cmV0dXJuIG5ldyBvQnQoZSl9dmFyIGNCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGlCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsaUJ0KHRoaXMscj1uQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9bkJ0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KG9CdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07YUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gaEJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB1QnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBoQnQoZSl9dmFyIHBCdD1NKCgpPT57aEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPXVCdChlKSxpPXVCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24gZEJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gbUJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBfQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIEFMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHlCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1BTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIHZCdD1NKCgpPT57TmV0KCk7T2coKTtGdygpO0J3KCl9KTtmdW5jdGlvbiB4QnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIGJCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIHdCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBTQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1CdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBFQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBUQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBDQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24gQUJ0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFBCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIElCdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgTEJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBrQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgUkJ0PU0oKCk9PntCdygpfSk7dmFyIE5CdD1NKCgpPT57cEZ0KCk7QWV0KCk7eDcoKTt4RnQoKTt3RnQoKTtMZXQoKTtSZXQoKTtURnQoKTtMRnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtERnQoKTtGRnQoKTtPQygpO1ZGdCgpO1dldCgpO1lldCgpO3pDKCk7JEZ0KCk7SkZ0KCk7azcoKTtlQnQoKTtMQygpO2NCdCgpO3BCdCgpO19CdCgpO3ZCdCgpO2JCdCgpO1NCdCgpO0Z3KCk7RUJ0KCk7Q0J0KCk7TzcoKTtQQnQoKTtMQnQoKTtCdygpO1JCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQsZmE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxEQnQ9TSgoKT0+e2ZhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLFBzLGJmLEY3LEI3LHdmPU0oKCk9PntCQz0xZTMsUHM9NmU0LGJmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIE9CdCxRZXQsdHJ0LHpCdD1NKCgpPT57ZmEoKTt3ZigpO09CdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9T0J0LHRydD1PQnQucmFuZ2V9KTt2YXIgRkJ0LEJCdCxIQnQsVkJ0PU0oKCk9PntmYSgpO3dmKCk7RkJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvUHMpKlBzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLEJCdD1GQnQsSEJ0PUZCdC5yYW5nZX0pO3ZhciBVQnQscUJ0LEdCdCxXQnQ9TSgoKT0+e2ZhKCk7d2YoKTtVQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKlBzJWJmO3Q8MCYmKHQrPWJmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvYmYpKmJmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e2ZhKCk7d2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUHMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO2Z1bmN0aW9uIHB2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsS0J0LFpCdCxKQnQsUUJ0LHRIdCxlSHQsckh0PU0oKCk9PntmYSgpO3dmKCk7SDc9cHYoMCksZXJ0PXB2KDEpLHJydD1wdigyKSxucnQ9cHYoMyksaXJ0PXB2KDQpLG9ydD1wdig1KSxhcnQ9cHYoNiksc3J0PUg3LnJhbmdlLEtCdD1lcnQucmFuZ2UsWkJ0PXJydC5yYW5nZSxKQnQ9bnJ0LnJhbmdlLFFCdD1pcnQucmFuZ2UsdEh0PW9ydC5yYW5nZSxlSHQ9YXJ0LnJhbmdlfSk7dmFyIG5IdCxpSHQsb0h0LGFIdD1NKCgpPT57ZmEoKTtuSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksaUh0PW5IdCxvSHQ9bkh0LnJhbmdlfSk7dmFyIGxydCxzSHQsbEh0LGNIdD1NKCgpPT57ZmEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtzSHQ9bHJ0LGxIdD1scnQucmFuZ2V9KTt2YXIgdUh0LGhIdCxmSHQscEh0PU0oKCk9PntmYSgpO3dmKCk7dUh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KlBzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Qc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksaEh0PXVIdCxmSHQ9dUh0LnJhbmdlfSk7dmFyIGRIdCxtSHQsZ0h0LF9IdD1NKCgpPT57ZmEoKTt3ZigpO2RIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLG1IdD1kSHQsZ0h0PWRIdC5yYW5nZX0pO3ZhciB5SHQsdkh0LHhIdCxiSHQ9TSgoKT0+e2ZhKCk7d2YoKTt5SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksdkh0PXlIdCx4SHQ9eUh0LnJhbmdlfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LHdIdCxTSHQsTUh0LEVIdCxUSHQsQ0h0LEFIdD1NKCgpPT57ZmEoKTt3ZigpO1Y3PWR2KDApLGNydD1kdigxKSx1cnQ9ZHYoMiksaHJ0PWR2KDMpLGZydD1kdig0KSxwcnQ9ZHYoNSksZHJ0PWR2KDYpLG1ydD1WNy5yYW5nZSx3SHQ9Y3J0LnJhbmdlLFNIdD11cnQucmFuZ2UsTUh0PWhydC5yYW5nZSxFSHQ9ZnJ0LnJhbmdlLFRIdD1wcnQucmFuZ2UsQ0h0PWRydC5yYW5nZX0pO3ZhciBQSHQsSUh0LExIdCxrSHQ9TSgoKT0+e2ZhKCk7UEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLElIdD1QSHQsTEh0PVBIdC5yYW5nZX0pO3ZhciBncnQsUkh0LE5IdCxESHQ9TSgoKT0+e2ZhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07Ukh0PWdydCxOSHQ9Z3J0LnJhbmdlfSk7dmFyIE9IdD1NKCgpPT57ZmEoKTtEQnQoKTt6QnQoKTtWQnQoKTtXQnQoKTskQnQoKTtySHQoKTthSHQoKTtjSHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtBSHQoKTtrSHQoKTtESHQoKX0pO2Z1bmN0aW9uIHBhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHBhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsbXY9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgekh0LFc3LFBMZSxGSHQ9TSgoKT0+e212KCk7SEMoKTt6SHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PXpIdCxQTGU9ekh0LnJhbmdlfSk7ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LEJIdCxISHQsVncsVkh0LFVIdCxxSHQsSUxlLExMZSxrTGUsUkxlLE5MZSxETGUsR0h0PU0oKCk9PnttdigpO0hDKCk7VkM9Z3YoMCksSHc9Z3YoMSksQkh0PWd2KDIpLEhIdD1ndigzKSxWdz1ndig0KSxWSHQ9Z3YoNSksVUh0PWd2KDYpLHFIdD1WQy5yYW5nZSxJTGU9SHcucmFuZ2UsTExlPUJIdC5yYW5nZSxrTGU9SEh0LnJhbmdlLFJMZT1Wdy5yYW5nZSxOTGU9Vkh0LnJhbmdlLERMZT1VSHQucmFuZ2V9KTt2YXIgdnJ0LF92LE9MZSxXSHQ9TSgoKT0+e212KCk7dnJ0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpwYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07X3Y9dnJ0LE9MZT12cnQucmFuZ2V9KTt2YXIgWUh0LFk3LHpMZSxqSHQ9TSgoKT0+e212KCk7SEMoKTtZSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9WUh0LHpMZT1ZSHQucmFuZ2V9KTtmdW5jdGlvbiB5dihlKXtyZXR1cm4gcGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxYSHQsJEh0LHF3LEtIdCxaSHQsSkh0LEZMZSxCTGUsSExlLFZMZSxVTGUscUxlLFFIdD1NKCgpPT57bXYoKTtIQygpO1VDPXl2KDApLFV3PXl2KDEpLFhIdD15digyKSwkSHQ9eXYoMykscXc9eXYoNCksS0h0PXl2KDUpLFpIdD15dig2KSxKSHQ9VUMucmFuZ2UsRkxlPVV3LnJhbmdlLEJMZT1YSHQucmFuZ2UsSExlPSRIdC5yYW5nZSxWTGU9cXcucmFuZ2UsVUxlPUtIdC5yYW5nZSxxTGU9Wkh0LnJhbmdlfSk7dmFyIHhydCx2dixHTGUsdFZ0PU0oKCk9PnttdigpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3Z2PXhydCxHTGU9eHJ0LnJhbmdlfSk7dmFyIGVWdD1NKCgpPT57Rkh0KCk7R0h0KCk7V0h0KCk7akh0KCk7UUh0KCk7dFZ0KCl9KTtmdW5jdGlvbiBXTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOm9WdCxlOm9WdCxmOm1rZSxIOmZrZSxJOnBrZSxqOmRrZSxMOnVWdCxtOmdrZSxNOl9rZSxwOnN0LFE6bFZ0LHM6Y1Z0LFM6eWtlLHU6dmtlLFU6eGtlLFY6YmtlLHc6d2tlLFc6U2tlLHg6bnVsbCxYOm51bGwseTpNa2UsWTpFa2UsWjpUa2UsIiUiOnNWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDphVnQsZTphVnQsZjpJa2UsSDpDa2UsSTpBa2UsajpQa2UsTDpoVnQsbTpMa2UsTTpra2UscDpLdCxROmxWdCxzOmNWdCxTOlJrZSx1Ok5rZSxVOkRrZSxWOk9rZSx3OnprZSxXOkZrZSx4Om51bGwsWDpudWxsLHk6QmtlLFk6SGtlLFo6VmtlLCIlIjpzVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpuVnQsZTpuVnQsZjpsa2UsSDppVnQsSTppVnQsajppa2UsTDpza2UsbTpua2UsTTpva2UscDpELFE6dWtlLHM6aGtlLFM6YWtlLHU6S0xlLFU6WkxlLFY6SkxlLHc6JExlLFc6UUxlLHg6eixYOlUseTpla2UsWTp0a2UsWjpya2UsIiUiOmNrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PXJWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiByVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsV0xlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBYTGUoZSl7cmV0dXJuIGUucmVwbGFjZShqTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoWExlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gJExlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSkxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBva2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2tlKGUsdCxyKXt2YXIgbj1ZTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiB1a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZmtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIHBrZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gZGtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoX3YoZSksZSksdCwzKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIG1rZShlLHQpe3JldHVybiB1VnQoZSx0KSsiMDAwIn1mdW5jdGlvbiBna2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBfa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB5a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB2a2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIHhrZShlLHQpe3JldHVybiBnbihWQy5jb3VudChfdihlKSxlKSx0LDIpfWZ1bmN0aW9uIGJrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudChfdihlKSxlKSsoX3YoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHdrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBTa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoX3YoZSksZSksdCwyKX1mdW5jdGlvbiBNa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gVGtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiBhVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gQWtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBQa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh2dihlKSxlKSx0LDMpfWZ1bmN0aW9uIGhWdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gSWtlKGUsdCl7cmV0dXJuIGhWdChlLHQpKyIwMDAifWZ1bmN0aW9uIExrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGtrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIFJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIE5rZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gRGtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHZ2KGUpLGUpLHQsMil9ZnVuY3Rpb24gT2tlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHZ2KGUpLGUpKyh2dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gemtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIEZrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh2dihlKSxlKSx0LDIpfWZ1bmN0aW9uIEJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBWa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHNWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBsVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gY1Z0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIHJWdCxWbyxZTGUsakxlLGJydD1NKCgpPT57ZVZ0KCk7clZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxZTGU9L14lLyxqTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFVrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQscWtlLGZWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO3FrZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Va2U6akMoTXJ0KSxmVnQ9cWtlfSk7ZnVuY3Rpb24gR2tlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFdrZSxwVnQsZFZ0PU0oKCk9PntFcnQoKTskNygpO1drZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP0drZTpYQyhNcnQpLHBWdD1Xa2V9KTt2YXIgbVZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO2RWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4geHZ8fCh5VnQoWWtlKSx4dj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gWWtlKCl7eHY9MH1mdW5jdGlvbiBidigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9eHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIGdWdCgpe3h2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLFhrZSgpLHh2PTB9fWZ1bmN0aW9uIGprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0Pl9WdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIFhrZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS14djt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoZ1Z0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoamtlLF9WdCkpLFd3PTEseVZ0KGdWdCkpfX12YXIgV3csS0MsJEMsX1Z0LEs3LFpDLFo3LHh2LEo3LEpDLHlWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsX1Z0PTFlMyxaNz0wLHh2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx5VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07YnYucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJ2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gdlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgeFZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gYlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnYsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciB3VnQ9TSgoKT0+e1E3KCl9KTt2YXIgU1Z0PU0oKCk9PntRNygpO3hWdCgpO3dWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBsZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiAka2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIEtrZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1sZChlKTtyZXR1cm4odC5sb2NhbD9La2U6JGtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gWmtlKCl7fWZ1bmN0aW9uIHd2KGUpe3JldHVybiBlPT1udWxsP1prZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gTVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13dihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIEVWdD1NKCgpPT57U2YoKTtueigpfSk7ZnVuY3Rpb24gSmtlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/SmtlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gVFZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgQ1Z0PU0oKCk9PntTZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUFZ0PU0oKCk9PntTZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7U2YoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gTFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIga1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRa2UoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB0OGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1SVnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1SVnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBOVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3Q4ZTpRa2Usbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1MVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgUlZ0LERWdD1NKCgpPT57U2YoKTtEcnQoKTtrVnQoKTtSVnQ9IiQifSk7ZnVuY3Rpb24gT1Z0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgelZ0PU0oKCk9PntOcnQoKTtTZigpfSk7ZnVuY3Rpb24gRlZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBCVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEhWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntTZigpfSk7ZnVuY3Rpb24gVVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgcVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHVnQoZSl7ZXx8KGU9ZThlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBlOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFdWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIFlWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgJFZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLVnQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBaVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpWdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIFFWdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gcjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBuOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBpOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gYThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBzOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gaVV0KGUsdCl7dmFyIHI9bGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP244ZTpyOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9zOGU6YThlOnIubG9jYWw/bzhlOmk4ZSkocix0KSl9dmFyIG9VdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gYzhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gdThlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIGFVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/bDhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3U4ZTpjOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpCZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gaDhlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBmOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHA4ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBzVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9oOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/cDhlOmY4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGxVdD1NKCgpPT57fSk7ZnVuY3Rpb24gY1V0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgdVV0KGUpfWZ1bmN0aW9uIHVVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9Y1V0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaFV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGZVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBkOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aFV0KHRoaXMsZSl9fWZ1bmN0aW9uIG04ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtmVXQodGhpcyxlKX19ZnVuY3Rpb24gZzhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP2hVdDpmVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIHBVdChlLHQpe3ZhciByPWNVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZzhlOnQ/ZDhlOm04ZSkocix0KSl9dmFyIGRVdD1NKCgpPT57dVV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIF84ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24geThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gdjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBtVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/XzhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj92OGU6eThlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIGdVdD1NKCgpPT57fSk7ZnVuY3Rpb24geDhlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gYjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIHc4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIF9VdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD94OGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3c4ZTpiOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHlVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIHZVdCgpe3JldHVybiB0aGlzLmVhY2goUzhlKX12YXIgeFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBNOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBiVXQoKXtyZXR1cm4gdGhpcy5lYWNoKE04ZSl9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gU1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE1VdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBFOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBFVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9FOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp3dih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIFRVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIFQ4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIENVdCgpe3JldHVybiB0aGlzLmVhY2goVDhlKX12YXIgQVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEE4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUFV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0E4ZTpDOGUpfXZhciBJVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIExVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIGtVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUDhlKGUsdCxyKXtyZXR1cm4gZT1EVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gRFV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIEk4ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gTDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGs4ZShlLHQscil7dmFyIG49TlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UDhlOkRVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBPVXQoZSx0LHIpe3ZhciBuPUk4ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/azhlOkw4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgTlV0LEJydCxSVXQselV0PU0oKCk9PntOVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFJVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBSVXR8fChOVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gRlV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBSOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRlV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gTjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBCVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9OOGU6UjhlKShlLHQpKX12YXIgSFV0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFZVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxEOGUpfXZhciBEOGUsY2QsU2Y9TSgoKT0+e0VWdCgpO0NWdCgpO1BWdCgpO0RWdCgpO0RydCgpO3pWdCgpO0JWdCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3pydCgpO2xVdCgpO2RVdCgpO2dVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO3pVdCgpO0hVdCgpO0Q4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVZVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpNVnQsc2VsZWN0QWxsOlRWdCxmaWx0ZXI6QVZ0LGRhdGE6TlZ0LGVudGVyOklWdCxleGl0Ok9WdCxqb2luOkZWdCxtZXJnZTpIVnQsb3JkZXI6VVZ0LHNvcnQ6R1Z0LGNhbGw6WVZ0LG5vZGVzOlhWdCxub2RlOktWdCxzaXplOkpWdCxlbXB0eTp0VXQsZWFjaDpyVXQsYXR0cjppVXQsc3R5bGU6YVV0LHByb3BlcnR5OnNVdCxjbGFzc2VkOnBVdCx0ZXh0Om1VdCxodG1sOl9VdCxyYWlzZTp2VXQsbG93ZXI6YlV0LGFwcGVuZDpTVXQsaW5zZXJ0OkVVdCxyZW1vdmU6Q1V0LGNsb25lOlBVdCxkYXR1bTpMVXQsb246T1V0LGRpc3BhdGNoOkJVdH07Y2Q9VlV0fSk7dmFyIE1mPU0oKCk9PntScnQoKTtleigpO1NmKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIHFVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBGOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBVVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPU84ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIE84ZSxIcnQsR1V0PU0oKCk9PntPOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPXFVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49ejhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9RjhlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1VVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1VVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9cVV0fSk7dmFyIFdVdD1NKCgpPT57R1V0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBTdnx8KFhVdChCOGUpLFN2PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBCOGUoKXtTdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gJFV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PVN2LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBZVXQoKXtTdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5eyRVdCgpfWZpbmFsbHl7anc9MCxWOGUoKSxTdj0wfX1mdW5jdGlvbiBIOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5qVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBWOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtU3Y7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KFlVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEg4ZSxqVXQpKSxqdz0xLFhVdChZVXQpKX19dmFyIGp3LG5BLHJBLGpVdCxzeixpQSxseixTdixjeixvQSxYVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxqVXQ9MWUzLGx6PTAsU3Y9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFhVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgS1V0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO0tVdCgpfSk7ZnVuY3Rpb24gSGcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtHOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlU4ZSx0d2VlbjpxOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6SlV0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+SlV0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBHOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1aVXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1aVXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBVOGUscThlLEpVdCxmeixsQSxHcnQsWlV0LHB6LHNBLEFjPU0oKCk9PntXVXQoKTtxcnQoKTtVOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLHE4ZT1bXSxKVXQ9MCxmej0xLGxBPTIsR3J0PTMsWlV0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gUVV0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIHRxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBlcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIG5xdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEo4ZSgpe3JldHVybiBjcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gaXF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9VzhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/b3F0KHQpOnI9PT0zP25ldyBtbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1ZOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0sdFsyXSx0WzNdLDEpOih0PWo4ZS5leGVjKGUpKT9uZXcgbWwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9WDhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PSQ4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1LOGUuZXhlYyhlKSk/bHF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9WjhlLmV4ZWMoZSkpP2xxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOnJxdC5oYXNPd25Qcm9wZXJ0eShlKT9vcXQocnF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgbWwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBvcXQoZSl7cmV0dXJuIG5ldyBtbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBtbChlLHQscixuKX1mdW5jdGlvbiBROGUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VmcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgbWwoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IG1sfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ROGUoZSk6bmV3IG1sKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBtbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gYXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIHNxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gbHF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgRWYoZSx0LHIsbil9ZnVuY3Rpb24gY3F0KGUpe2lmKGUgaW5zdGFuY2VvZiBFZilyZXR1cm4gbmV3IEVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1WZyhlKSksIWUpcmV0dXJuIG5ldyBFZjtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgRWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiB1cXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2NxdChlKTpuZXcgRWYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEVmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLFRmLFc4ZSxZOGUsajhlLFg4ZSwkOGUsSzhlLFo4ZSxycXQsaHF0PU0oKCk9PntlcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixUZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsVzhlPS9eIyhbMC05YS1mXXszLDh9KSQvLFk4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksajhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tUZixUZixUZl0rIlxcKSQiKSxYOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSwkOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUZixUZixUZixoQV0rIlxcKSQiKSxLOGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLFRmLFRmXSsiXFwpJCIpLFo4ZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLFRmLFRmLGhBXSsiXFwpJCIpLHJxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxWZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpucXQsZm9ybWF0SGV4Om5xdCxmb3JtYXRIc2w6SjhlLGZvcm1hdFJnYjppcXQsdG9TdHJpbmc6aXF0fSk7bXoobWwsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBtbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDphcXQsZm9ybWF0SGV4OmFxdCxmb3JtYXRSZ2I6c3F0LHRvU3RyaW5nOnNxdH0pKTtteihFZix1cXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IG1sKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e2hxdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZnF0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgZHF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG1xdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gZVJlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gZ3F0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/ZVJlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dFJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIF9xdD1NKCgpPT57bXF0KCl9KTtmdW5jdGlvbiB5cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosclJlLG5SZSx2cXQ9TSgoKT0+eyRydCgpO1pydCgpO2RxdCgpO19xdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z3F0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO3JSZT15cXQoZnF0KSxuUmU9eXF0KHBxdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGlSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gb1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP29SZShsWzBdLngpOmlSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCx4cXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqYnF0LHNrZXdYOk1hdGguYXRhbihsKSpicXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBicXQsYnosd3F0PU0oKCk9PnticXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBNcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxTcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9U3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIEVxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsU3F0LHd6LFRxdD1NKCgpPT57d3F0KCl9KTtmdW5jdGlvbiBDcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsQXF0PU0oKCk9Pnt4eigpO1RxdCgpO2ludD1DcXQoTXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1DcXQoRXF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7eHF0KCk7QXF0KCk7dnF0KCl9KTtmdW5jdGlvbiBhUmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBzUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFBxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2FSZTpzUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVmc/dno6KHI9VmcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gbFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBjUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiB1UmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZlJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBwUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gSXF0KGUsdCl7dmFyIHI9bGQoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP3BSZTpmUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9jUmU6bFJlKShyKTooci5sb2NhbD9oUmU6dVJlKShyLG4sdCsiIikpfXZhciBMcXQ9TSgoKT0+e1N6KCk7TWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24gZFJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gbVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBrcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWxkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/ZFJlOm1SZSkobix0KSl9dmFyIFJxdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIGdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBfUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/Z1JlOl9SZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIERxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHlSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB2UmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gT3F0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eVJlOnZSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIHpxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh4UmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgQnF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gSHF0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBWcXQ9TSgoKT0+e01mKCk7dWQoKX0pO2Z1bmN0aW9uIFVxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBxcXQ9TSgoKT0+e3VkKCl9KTtmdW5jdGlvbiBiUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiB3UmUoZSx0LHIpe3ZhciBuLGksbz1iUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gR3F0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2god1JlKHIsZSx0KSl9dmFyIFdxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIFNSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gWXF0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLFNSZSh0aGlzLl9pZCkpfXZhciBqcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXd2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsSGcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciAkcXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gS3F0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZIZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBacXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gSnF0KCl7cmV0dXJuIG5ldyBNUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBNUmUsUXF0PU0oKCk9PntNZigpO01SZT1jZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBFUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gVFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIENSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gQVJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gdEd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsRVJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLFRSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/QVJlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkNSZShlLG4sdCsiIikscil9dmFyIGVHdD1NKCgpPT57U3ooKTtNZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBQUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIHJHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBuR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIElSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBpR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xSZShadyh0aGlzLCJ0ZXh0IixlKSk6SVJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBvR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiBhR3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7SGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgc0d0PU0oKCk9Pnt1ZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIGNkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisra1JlfXZhciBrUmUsSncsdWQ9TSgoKT0+e01mKCk7THF0KCk7UnF0KCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7ZEEoKTtrUmU9MDtKdz1jZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OlhxdCxzZWxlY3RBbGw6S3F0LGZpbHRlcjpIcXQsbWVyZ2U6VXF0LHNlbGVjdGlvbjpKcXQsdHJhbnNpdGlvbjphR3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOkdxdCxhdHRyOklxdCxhdHRyVHdlZW46a3F0LHN0eWxlOnRHdCxzdHlsZVR3ZWVuOnJHdCx0ZXh0OmlHdCxyZW1vdmU6WXF0LHR3ZWVuOlBxdCxkZWxheTpOcXQsZHVyYXRpb246T3F0LGVhc2U6RnF0fX0pO2Z1bmN0aW9uIFJSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBsR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkhnKGwsZSx0LGMsYSxyfHxSUmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LGNHdD1NKCgpPT57dWQoKTtBYygpO0lfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgdUd0PU0oKCk9PntNZigpO3RxdCgpO2NHdCgpO2NkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9UVV0O2NkLnByb3RvdHlwZS50cmFuc2l0aW9uPWxHdH0pO2Z1bmN0aW9uIGhHdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxOUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIE5SZSxmR3Q9TSgoKT0+e3VkKCk7QWMoKTtOUmU9W251bGxdfSk7dmFyIHBHdD1NKCgpPT57dUd0KCk7dWQoKTtmR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGRHdD1NKCgpPT57fSk7ZnVuY3Rpb24gbUd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGdHdChlKXtyZXR1cm4gZVsxXX12YXIgX0d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24geUd0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT15R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz15R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxaYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBEUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIE9SZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiB2R3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFPUmUobz1Bb1tpXSxlLHQscixuKXx8IURSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIHhHdChlKXtyZXR1cm4gWmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIHpSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gRlJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBiR3QoKXtmb3IodmFyIGU9MCx0PVphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9WmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT16UmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gd0d0KGUsdCxyLG4pe3ZhciBpPVphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1GUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9WmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1aYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gQlJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE12KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1NR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1TR3QucG9wKCl8fG5ldyBCUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBFdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksU0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIFNHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtTR3Q9W119KTtmdW5jdGlvbiBIUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRUd0KGUpe3ZhciB0PVRHdC5wb3AoKXx8bmV3IEhSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7RXYoZSksVHYucmVtb3ZlKGUpLFRHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIENHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksRXYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksRXYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE12KGwpLE12KGMpfWZ1bmN0aW9uIEFHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPVR2Ll87czspaWYobz1QR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtVlJlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9eEd0KGUpO3ZhciBsPUVHdChlKTtpZihUdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtFdihuKSxpPUVHdChuLnNpdGUpLFR2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksTXYobiksTXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufUV2KG4pLEV2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxNdihuKSxNdihpKX19ZnVuY3Rpb24gUEd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gVlJlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFBHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIFRHdCxJR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO1RHdD1bXX0pO2Z1bmN0aW9uIFVSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24gcVJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KHFSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLFphPW5ldyBBcnJheShlLmxlbmd0aCksVHY9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihBR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylDR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoYkd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dkd0KGEscyxsLGMpLHdHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9WmEsVHY9blM9QW89WmE9bnVsbH12YXIgV3IsTUd0LFR2LFphLG5TLEFvLHJTPU0oKCk9PntJR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixNR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZVUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBMR3QoKXt2YXIgZT1tR3QsdD1nR3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIGtHdD1NKCgpPT57ZEd0KCk7X0d0KCk7clMoKX0pO3ZhciBSR3Q9TSgoKT0+e2tHdCgpfSk7ZnVuY3Rpb24gREd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIFdSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFlSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIE5HdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09R1JlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgR1JlLHZBLE9HdD1NKCgpPT57R1JlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1ER3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPVdSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVlSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Tkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Tkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9REd0fSk7dmFyIG1udD1NKCgpPT57T0d0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGhkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIGpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gWFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWhkKGUpO3JldHVybih0LmxvY2FsP1hSZTpqUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiAkUmUoKXt9ZnVuY3Rpb24gQ3YoZSl7cmV0dXJuIGU9PW51bGw/JFJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiB6R3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUN2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgRkd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiBLUmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD9LUmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBCR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBIR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBVR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBHR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBXR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFpSZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIEpSZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVlHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVlHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIGpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/SlJlOlpSZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUdHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBZR3QsWEd0PU0oKCk9PntPdSgpO3dudCgpO1dHdCgpO1lHdD0iJCJ9KTtmdW5jdGlvbiAkR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciBLR3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBaR3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIEpHdD1NKCgpPT57fSk7ZnVuY3Rpb24gUUd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBlV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciByV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG5XdChlKXtlfHwoZT1RUmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFFSZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgaVd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gb1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBsV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIHVXdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHJOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBpTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIG9OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBfV3QoZSx0KXt2YXIgcj1oZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/ZU5lOnROZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP29OZTppTmU6ci5sb2NhbD9uTmU6ck5lKShyLHQpKX12YXIgeVd0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBzTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBsTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gdld0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9hTmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/bE5lOnNOZSkoZSx0LHI9PW51bGw/IiI6cikpOlVnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBjTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHVOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gaE5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHhXdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP2NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9oTmU6dU5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgYld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3V3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBTV3QoZSl9ZnVuY3Rpb24gU1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz13V3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBNV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gRVd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtNV3QodGhpcyxlKX19ZnVuY3Rpb24gcE5lKGUpe3JldHVybiBmdW5jdGlvbigpe0VXdCh0aGlzLGUpfX1mdW5jdGlvbiBkTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TVd0OkVXdCkodGhpcyxlKX19ZnVuY3Rpb24gVFd0KGUsdCl7dmFyIHI9d1d0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9kTmU6dD9mTmU6cE5lKShyLHQpKX12YXIgQ1d0PU0oKCk9PntTV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gbU5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBnTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBfTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEFXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9tTmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP19OZTpnTmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB2TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24geE5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gSVd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3lOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/eE5lOnZOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24ga1d0KCl7cmV0dXJuIHRoaXMuZWFjaChiTmUpfXZhciBSV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdOZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE5XdCgpe3JldHVybiB0aGlzLmVhY2god05lKX12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgeld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIFNOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEZXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP1NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkN2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgQld0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gTU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSFd0KCl7cmV0dXJuIHRoaXMuZWFjaChNTmUpfXZhciBWV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEVOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVE5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBVV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/VE5lOkVOZSl9dmFyIHFXdD1NKCgpPT57fSk7ZnVuY3Rpb24gR1d0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgV1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDTmUoZSx0LHIpe3JldHVybiBlPVhXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBYV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24gQU5lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBQTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSU5lKGUsdCxyKXt2YXIgbj1qV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9DTmU6WFd0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uICRXdChlLHQscil7dmFyIG49QU5lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9JTmU6UE5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgald0LFlyLFlXdCx6ej1NKCgpPT57ald0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFlXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBZV3R8fChqV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gS1d0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBMTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS1d0KHRoaXMsZSx0KX19ZnVuY3Rpb24ga05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtXdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBaV3QoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9rTmU6TE5lKShlLHQpKX12YXIgSld0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFFXdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQsZmQsT3U9TSgoKT0+e0ZHdCgpO0hHdCgpO1VHdCgpO1hHdCgpO3dudCgpO0tHdCgpO0pHdCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO01udCgpO2JXdCgpO0NXdCgpO1BXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO3p6KCk7Sld0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9UVd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OnpHdCxzZWxlY3RBbGw6Qkd0LGZpbHRlcjpWR3QsZGF0YTpqR3QsZW50ZXI6cUd0LGV4aXQ6JEd0LGpvaW46Wkd0LG1lcmdlOlFHdCxvcmRlcjplV3Qsc29ydDpuV3QsY2FsbDpvV3Qsbm9kZXM6c1d0LG5vZGU6Y1d0LHNpemU6aFd0LGVtcHR5OnBXdCxlYWNoOm1XdCxhdHRyOl9XdCxzdHlsZTp2V3QscHJvcGVydHk6eFd0LGNsYXNzZWQ6VFd0LHRleHQ6QVd0LGh0bWw6SVd0LHJhaXNlOmtXdCxsb3dlcjpOV3QsYXBwZW5kOk9XdCxpbnNlcnQ6Rld0LHJlbW92ZTpIV3QsY2xvbmU6VVd0LGRhdHVtOkdXdCxvbjokV3QsZGlzcGF0Y2g6Wld0fTtmZD1RV3R9KTtmdW5jdGlvbiBwZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIHRZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgZVl0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIHJZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgSXM9TSgoKT0+e3hudCgpO2VZdCgpO2t6KCk7dFl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO3JZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIG5ZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGlZdD1NKCgpPT57SXMoKTtuWXQoKX0pO3ZhciBvWXQ9TSgoKT0+e2lZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgYVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBsWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBITmUoKXtyZXR1cm4gZFl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGNZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVJOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P3VZdCh0KTpyPT09Mz9uZXcgZ2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Tk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdLHRbMl0sdFszXSwxKToodD1ETmUuZXhlYyhlKSk/bmV3IGdsKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PU9OZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD16TmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9Rk5lLmV4ZWMoZSkpP3BZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PUJOZS5leGVjKGUpKT9wWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpzWXQuaGFzT3duUHJvcGVydHkoZSk/dVl0KHNZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IGdsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdVl0KGUpe3JldHVybiBuZXcgZ2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgZ2woZSx0LHIsbil9ZnVuY3Rpb24gVk5lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPXFnKGUpKSxlPyhlPWUucmdiKCksbmV3IGdsKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBnbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Vk5lKGUpOm5ldyBnbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGhZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBmWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHBZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IENmKGUsdCxyLG4pfWZ1bmN0aW9uIGRZdChlKXtpZihlIGluc3RhbmNlb2YgQ2YpcmV0dXJuIG5ldyBDZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9cWcoZSkpLCFlKXJldHVybiBuZXcgQ2Y7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IENmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gbVl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kWXQoZSk6bmV3IENmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBDZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxBZixSTmUsTk5lLEROZSxPTmUsek5lLEZOZSxCTmUsc1l0LGdZdD1NKCgpPT57YVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQWY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFJOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxOTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEROZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbQWYsQWYsQWZdKyJcXCkkIiksT05lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksek5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQWYsQWYsQWYsTUFdKyJcXCkkIiksRk5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxBZixBZl0rIlxcKSQiKSxCTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxBZixBZixNQV0rIlxcKSQiKSxzWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEscWcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6bFl0LGZvcm1hdEhleDpsWXQsZm9ybWF0SHNsOkhOZSxmb3JtYXRSZ2I6Y1l0LHRvU3RyaW5nOmNZdH0pO1V6KGdsLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6aFl0LGZvcm1hdEhleDpoWXQsZm9ybWF0UmdiOmZZdCx0b1N0cmluZzpmWXR9KSk7VXooQ2YsbVl0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBnbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9PntnWXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIF9ZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24geVl0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIHZZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB4WXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHFOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIGJZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3FOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1VOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciB3WXQ9TSgoKT0+e3hZdCgpfSk7ZnVuY3Rpb24gU1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LEdOZSxXTmUsTVl0PU0oKCk9PntEbnQoKTt6bnQoKTt2WXQoKTt3WXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPWJZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtHTmU9U1l0KF9ZdCksV05lPVNZdCh5WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9qTmUobFswXS54KTpZTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsRVl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKlRZdCxza2V3WDpNYXRoLmF0YW4obCkqVFl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgVFl0LFh6LENZdD1NKCgpPT57VFl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUFl0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQVl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPUFZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBJWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LEFZdCwkeixMWXQ9TSgoKT0+e0NZdCgpfSk7ZnVuY3Rpb24ga1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LFJZdD1NKCgpPT57anooKTtMWXQoKTtHbnQ9a1l0KFBZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9a1l0KElZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gRFl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uICROZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBLTmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8WE5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK05ZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLU5ZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1EWXQoXyksQz1pLyhZbnQqcCkqKFMqS05lKENBKmIrXyktJE5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0RZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LE5ZdCxYTmUsT1l0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLE5ZdD00LFhOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtFWXQoKTtSWXQoKTtPWXQoKTtNWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIEF2fHwoQll0KFpOZSksQXY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIFpOZSgpe0F2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBIWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9QXYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIHpZdCgpe0F2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7SFl0KCl9ZmluYWxseXtzUz0wLFFOZSgpLEF2PTB9fWZ1bmN0aW9uIEpOZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PkZZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIFFOZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Bdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoell0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwoSk5lLEZZdCkpLHNTPTEsQll0KHpZdCkpfX12YXIgc1MsSUEsUEEsRll0LEt6LExBLFp6LEF2LEp6LGtBLEJZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLEZZdD0xZTMsWno9MCxBdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQll0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBWWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7Vll0KCl9KTtmdW5jdGlvbiBHZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO3JEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246dERlLHR3ZWVuOmVEZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpxWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5xWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBKYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIHJEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1VWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1VWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIHREZSxlRGUscVl0LFpudCxyRixlRixVWXQsbkYsTkEsTHM9TSgoKT0+e21udCgpO0tudCgpO3REZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxlRGU9W10scVl0PTAsWm50PTEsckY9MixlRj0zLFVZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIFB2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gR1l0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQdih0aGlzLGUpfSl9dmFyIFdZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBuRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUphKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBpRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUphKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFlZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP25EZTppRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgcWc/WXo6KHI9cWcodCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gb0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBhRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBzRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gbERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBjRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiB1RGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGpZdChlLHQpe3ZhciByPWhkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD91RGU6Y0RlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/YURlOm9EZSkocik6KHIubG9jYWw/bERlOnNEZSkocixuLHQpKX12YXIgWFl0PU0oKCk9PntBQSgpO0lzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIGhEZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gcERlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZkRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBkRGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZoRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uICRZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aGQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9wRGU6ZERlKShuLHQpKX12YXIgS1l0PU0oKCk9PntJcygpfSk7ZnVuY3Rpb24gbURlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBaWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9tRGU6Z0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgSll0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gX0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHlEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBRWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9fRGU6eURlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgdGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHZEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciByanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBuanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGlqdD1NKCgpPT57SXMoKTtkZCgpfSk7ZnVuY3Rpb24gb2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBkYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGFqdD1NKCgpPT57ZGQoKX0pO2Z1bmN0aW9uIHhEZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIGJEZShlLHQscil7dmFyIG4saSxvPXhEZSh0KT9EQTpKYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBzanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChiRGUocixlLHQpKX12YXIgbGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gd0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBjanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsd0RlKHRoaXMuX2lkKSl9dmFyIHVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gaGp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Q3YoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgZGEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGZqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBwanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgZGEobyxhLHQscil9dmFyIGRqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBtanQoKXtyZXR1cm4gbmV3IFNEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIFNEZSxnanQ9TSgoKT0+e0lzKCk7U0RlPWZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIE1EZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1VZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksVWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBfanQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gRURlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gVERlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIENEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUphKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1fanQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB5anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxNRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsX2p0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxURGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goQ0RlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxFRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciB2anQ9TSgoKT0+e0FBKCk7SXMoKTtMcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBBRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFBEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYmQURlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIHhqdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBianQ9TSgoKT0+e30pO2Z1bmN0aW9uIElEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB3anQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xEZShjUyh0aGlzLCJ0ZXh0IixlKSk6SURlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBTanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBrRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIFJEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZrRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBNanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LFJEZShlKSl9dmFyIEVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gVGp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO0dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIENqdD1NKCgpPT57ZGQoKTtMcygpfSk7ZnVuY3Rpb24gQWp0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPUphKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFBqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIGZkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrTkRlfXZhciBORGUsdVMsZGQ9TSgoKT0+e0lzKCk7WFl0KCk7S1l0KCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7dmp0KCk7Ymp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7T0EoKTtQanQoKTtORGU9MDt1Uz1mZC5wcm90b3R5cGU7ZGEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRhLHNlbGVjdDpoanQsc2VsZWN0QWxsOnBqdCxmaWx0ZXI6bmp0LG1lcmdlOm9qdCxzZWxlY3Rpb246bWp0LHRyYW5zaXRpb246VGp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpzanQsYXR0cjpqWXQsYXR0clR3ZWVuOiRZdCxzdHlsZTp5anQsc3R5bGVUd2Vlbjp4anQsdGV4dDp3anQsdGV4dFR3ZWVuOk1qdCxyZW1vdmU6Y2p0LHR3ZWVuOllZdCxkZWxheTpaWXQsZHVyYXRpb246UVl0LGVhc2U6ZWp0LGVuZDpBanR9fSk7ZnVuY3Rpb24gRERlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIElqdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBkYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmR2cobCxlLHQsYyxhLHJ8fEREZShsLHQpKTtyZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsTGp0PU0oKCk9PntkZCgpO0xzKCk7SV8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBranQ9TSgoKT0+e0lzKCk7V1l0KCk7TGp0KCk7ZmQucHJvdG90eXBlLmludGVycnVwdD1HWXQ7ZmQucHJvdG90eXBlLnRyYW5zaXRpb249SWp0fSk7dmFyIFJqdD1NKCgpPT57ZGQoKTtMcygpfSk7dmFyIE5qdD1NKCgpPT57a2p0KCk7ZGQoKTtSanQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgT2p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntQZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBQZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFBmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IFBmKDEsMCwwKTthRi5wcm90b3R5cGU9UGYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHpqdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIE9EZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gekRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIEZqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gRkRlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gQkRlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEhEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gQmp0KCl7dmFyIGU9T0RlLHQ9ekRlLHI9SERlLG49RkRlLGk9QkRlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsRmp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsRmp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBQZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IFBmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgUGYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxQdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1wZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLFB2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/cGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOnBkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PXBkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksUHYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEhqdD1NKCgpPT57bW50KCk7b1l0KCk7QUEoKTtJcygpO05qdCgpO0RqdCgpO09qdCgpO25pdCgpO3pqdCgpfSk7dmFyIFZqdD1NKCgpPT57SGp0KCk7bml0KCl9KTt2YXIgTXI9e307S3MoTXIse2FjdGl2ZTooKT0+aEd0LGFyYzooKT0+ZkZ0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PmpNdCxheGlzTGVmdDooKT0+WE10LGF4aXNSaWdodDooKT0+WU10LGF4aXNUb3A6KCk9PldNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9Pm5NdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT5kQ3QsYnJ1c2hTZWxlY3Rpb246KCk9PmhDdCxicnVzaFg6KCk9PmZDdCxicnVzaFk6KCk9PnBDdCxjaG9yZDooKT0+RkN0LGNsaWVudFBvaW50OigpPT5EZyxjbHVzdGVyOigpPT5ITHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+S3p0LGNyZWF0b3I6KCk9Pk5nLGNyb3NzOigpPT5vTXQsY3N2OigpPT5jTnQsY3N2Rm9ybWF0OigpPT5kUHQsY3N2Rm9ybWF0Um93czooKT0+bVB0LGNzdlBhcnNlOigpPT5mUHQsY3N2UGFyc2VSb3dzOigpPT5wUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5rRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+TkZ0LGN1cnZlQmFzaXNPcGVuOigpPT56RnQsY3VydmVCdW5kbGU6KCk9PkhGdCxjdXJ2ZUNhcmRpbmFsOigpPT5VRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+cUZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5HRnQsY3VydmVDYXRtdWxsUm9tOigpPT5ZRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+WkZ0LGN1cnZlTGluZWFyOigpPT5GZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+dEJ0LGN1cnZlTW9ub3RvbmVYOigpPT5zQnQsY3VydmVNb25vdG9uZVk6KCk9PmxCdCxjdXJ2ZU5hdHVyYWw6KCk9PmZCdCxjdXJ2ZVN0ZXA6KCk9PmRCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+Z0J0LGN1cnZlU3RlcEJlZm9yZTooKT0+bUJ0LGN1c3RvbUV2ZW50OigpPT5HenQsZGVzY2VuZGluZzooKT0+c010LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PkFBdCxkcmFnOigpPT5zUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PlhQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+JFB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+V1B0LGVhc2VCb3VuY2VJbk91dDooKT0+WVB0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+VVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+cVB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PkFQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5QUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PlpQdCxlYXNlRWxhc3RpY0luT3V0OigpPT5KUHQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+QlB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+SFB0LGVhc2VMaW5lYXI6KCk9PlNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+TFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5rUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PkVQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+VFB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+T1B0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+elB0LGVudHJpZXM6KCk9PnNBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+ZTZ0LGZvcmNlQ29sbGlkZTooKT0+TjZ0LGZvcmNlTGluazooKT0+cTZ0LGZvcmNlTWFueUJvZHk6KCk9PmlJdCxmb3JjZVJhZGlhbDooKT0+YUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+bkl0LGZvcmNlWDooKT0+bEl0LGZvcmNlWTooKT0+dUl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+THksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9Pm1MdCxnZW9BcmVhOigpPT5GSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5fTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+dkx0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PllJdCxnZW9DZW50cm9pZDooKT0+UUl0LGdlb0NpcmNsZTooKT0+YTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlA5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT5RcCxnZW9Db25pY0NvbmZvcm1hbDooKT0+d0x0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+VXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PkVMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+ejl0LGdlb0Rpc3RhbmNlOigpPT5CeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk1MdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pkd5LGdlb0dub21vbmljOigpPT5DTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9PlY5dCxnZW9JZGVudGl0eTooKT0+UEx0LGdlb0ludGVycG9sYXRlOigpPT5xOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+Ykx0LGdlb01lcmNhdG9yUmF3OigpPT5xeSxnZW9OYXR1cmFsRWFydGgxOigpPT5MTHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT5STHQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5sTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5ETHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PnVMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PnpMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PmdNdCxoc2w6KCk9PlpLLGh0bWw6KCk9PmVOdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5iN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PkI4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnk3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkg4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5EOHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5POHQsaW50ZXJwb2xhdGVIc2w6KCk9Pkk4dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9Pkw4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PlQ3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+RTd0LGludGVycG9sYXRlTnVtYmVyOigpPT5BcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9PkM3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9Pnc3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+aDh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9PmY4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5wOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT53OHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PlM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9Pk03dCxpbnRlcnBvbGF0ZVdhcm06KCk9Png3dCxpbnRlcnBvbGF0ZVpvb206KCk9PkM4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5iVnQsaXNvRm9ybWF0OigpPT5mVnQsaXNvUGFyc2U6KCk9PnBWdCxqc29uOigpPT5uTnQsa2V5czooKT0+bkF0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5TRnQsbGlua1JhZGlhbDooKT0+RUZ0LGxpbmtWZXJ0aWNhbDooKT0+TUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9PmJ5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+d010LG1lYW46KCk9Pk1NdCxtZWRpYW46KCk9PlRNdCxtZXJnZTooKT0+QU10LG1pbjooKT0+bVIsbW91c2U6KCk9PlF6dCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PkpDdCxub3c6KCk9Pll3LHBhY2s6KCk9PndrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT55a3QscGFpcnM6KCk9PmlNdCxwYXJ0aXRpb246KCk9Pk1rdCxwYXRoOigpPT5ZOHQscGVybXV0ZTooKT0+SU10LHBpZTooKT0+dkZ0LHBvaW50UmFkaWFsOigpPT5mdixwb2x5Z29uQXJlYTooKT0+JDh0LHBvbHlnb25DZW50cm9pZDooKT0+Wjh0LHBvbHlnb25Db250YWluczooKT0+aVJ0LHBvbHlnb25IdWxsOigpPT5yUnQscG9seWdvbkxlbmd0aDooKT0+YVJ0LHByZWNpc2lvbkZpeGVkOigpPT5NSXQscHJlY2lzaW9uUHJlZml4OigpPT5USXQscHJlY2lzaW9uUm91bmQ6KCk9PkFJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9PmR5LHF1YW50aXplOigpPT5VOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PktSdCxyYW5kb21FeHBvbmVudGlhbDooKT0+SlJ0LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5YUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5ZUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5ZQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+VU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+ck90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9PnM3dCxzY2FsZVV0YzooKT0+bDd0LHNjYW46KCk9PmtNdCxzY2hlbWVDYXRlZ29yeTEwOigpPT51N3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+Zzd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5mN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9PmQ3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+ZUZ0LHNlbGVjdGlvbjooKT0+JHp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5lQXQsc2h1ZmZsZTooKT0+Tk10LHN0YWNrOigpPT55QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PndCdCxzdGFja09mZnNldEV4cGFuZDooKT0+eEJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5NQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PlRCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+QUJ0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PklCdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9PmtCdCxzdHJhdGlmeTooKT0+QWt0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5PTXQsc3ltYm9sOigpPT5JRnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5QRnQsdGV4dDooKT0+b050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PnlNdCx0aHJlc2hvbGRTY290dDooKT0+eE10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+bU10LHRpbWVEYXk6KCk9PmpCdCx0aW1lRGF5czooKT0+WEJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT50SHQsdGltZUhvdXI6KCk9PnFCdCx0aW1lSG91cnM6KCk9PkdCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5CQnQsdGltZU1pbnV0ZXM6KCk9PkhCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PktCdCx0aW1lTW9udGg6KCk9PmlIdCx0aW1lTW9udGhzOigpPT5vSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+ZUh0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+UUJ0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5aQnQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5KQnQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5zSHQsdGltZVllYXJzOigpPT5sSHQsdGltZW91dDooKT0+dlZ0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5uRnQsdG91Y2hlczooKT0+b0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+SWt0LHRyZWVtYXA6KCk9PmtrdCx0cmVlbWFwQmluYXJ5OigpPT5Oa3QsdHJlZW1hcERpY2U6KCk9PmxmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Ga3QsdHJlZW1hcFNsaWNlOigpPT53Zyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Pa3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9PmhOdCx0c3ZGb3JtYXQ6KCk9PnZQdCx0c3ZGb3JtYXRSb3dzOigpPT54UHQsdHN2UGFyc2U6KCk9Pl9QdCx0c3ZQYXJzZVJvd3M6KCk9PnlQdCx1dGNEYXk6KCk9PnZIdCx1dGNEYXlzOigpPT54SHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5USHQsdXRjSG91cjooKT0+bUh0LHV0Y0hvdXJzOigpPT5nSHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9PmhIdCx1dGNNaW51dGVzOigpPT5mSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+d0h0LHV0Y01vbnRoOigpPT5JSHQsdXRjTW9udGhzOigpPT5MSHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5DSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5FSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5TSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+TUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+Ukh0LHV0Y1llYXJzOigpPT5OSHQsdmFsdWVzOigpPT5vQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PnRNdCx2b3Jvbm9pOigpPT5MR3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PnNOdCx6aXA6KCk9PkZNdCx6b29tOigpPT5CanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57ZU10KCk7SE10KCk7S010KCk7Z0N0KCk7WEN0KCk7Y0F0KCk7RUF0KCk7SUF0KCk7Y1B0KCk7d1B0KCk7dDZ0KCk7Zkl0KCk7SUl0KCk7Qkx0KCk7SGt0KCk7Rzh0KCk7WDh0KCk7bFJ0KCk7SFJ0KCk7V1J0KCk7dE50KCk7cE50KCk7STd0KCk7c0Z0KCk7TkJ0KCk7T0h0KCk7bVZ0KCk7U1Z0KCk7cEd0KCk7Ukd0KCk7Vmp0KCl9KTt2YXIgV2p0PUgoR2p0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVanQ9KEVyKCksVXQoTXIpKSxXZz1VanQscWp0PVVqdDtmdW5jdGlvbiBWRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBVRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBxRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1ZEZTpVRGUpKHRoaXMsZSl9ZnVuY3Rpb24gR0RlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiBXRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIFlEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9HRGU6V0RlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBqRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gWERlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uICREZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/akRlOlhEZSkodGhpcyxlKX1mdW5jdGlvbiBLRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIFpEZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIEpEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/S0RlOlpEZSkodGhpcyxlKX1mdW5jdGlvbiBRRGUoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVdnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gdE9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBlT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/UURlOnRPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1xRGU7V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9WURlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz0kRGU7cWp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPUpEZTtxanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPWVPZX0pO3ZhciBZZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWWp0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gck9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLFlqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gWWp0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9ck9lfSk7dmFyIElmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIG5PZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09bk9lfSk7dmFyIFhqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShJXygpLFV0KER2dCkpLGlPZT1ZZygpLG9PZT1JZigpLGpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPW9PZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgYU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWlPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPWpqdFt0XTtyZXR1cm4gcj09bnVsbD9qanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz1hT2V9KTt2YXIgJGp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzT2U9WWcoKSxsT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1zT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWxPZX0pO3ZhciBMZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtqdD0oZGUoKSxVdChwZSkpO0tqdC5fX2V4cG9ydFN0YXIoWGp0KCksY0YpO0tqdC5fX2V4cG9ydFN0YXIoJGp0KCksY0YpfSk7dmFyIFpqdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgY09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1jT2V9KTt2YXIgSmp0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1T2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz11T2V9KTt2YXIgUWp0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPWhPZX0pO3ZhciB0WHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWZPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihaanQoKSk7aEYoSmp0KCkpO2hGKFFqdCgpKTtoRih0WHQoKSl9KTt2YXIgclh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlWHQ9cFMoKSxwT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPWVYdC5NZXRob2RzLmRlZmF1bHRzKHt9LHBPZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9ZVh0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkT2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RPZShyWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIG1PZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PW1PZX0pO3ZhciBvWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnT2U9RkEoKSxuWHQ9Zml0KCksamc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBuWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoblh0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtqZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1qZzt2YXIgaVh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9amcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9amcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoamcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1qZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qZ09lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPWpnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9amcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7aVh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1pWHR9KTt2YXIgYVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfT2U9RkEoKSx5T2U9IiM0NDQiLHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXlPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpfT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD12T2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQob1h0KCkpO2RpdChhWHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc1h0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtzWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1zWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIHhPZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksYk9lPWZ1bmN0aW9uKGUpe3hPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPWJPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgd09lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU09lPV9pdCgpLE1PZT1mdW5jdGlvbihlKXt3T2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KFNPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9TU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBFT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUT2U9cFMoKSxDT2U9eWl0KCksQU9lPWZ1bmN0aW9uKGUpe0VPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBUT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShDT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIGxYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9X0YoKSxrT2U9dml0KCksUk9lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IElPZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9TE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShrT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj1ST2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShsWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksTk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Tk9lfSk7dmFyIHVYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBET2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPT2U9d2l0KCksY1h0PWZ1bmN0aW9uKGUpe0RPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShPT2UuV3JhcHBlcik7Y1h0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPWNYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2hYdCh1WHQoKSk7aFh0KHdpdCgpKX0pO3ZhciBmWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSx6T2U9eGl0KCksRk9lPVNpdCgpLEJPZT1GQSgpLEhPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgek9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IEZPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBCT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9SE9lfSk7dmFyIF9sPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZlh0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBwWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWT2U9KEVyKCksVXQoTXIpKSxVT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIHFPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9cU9lO2Z1bmN0aW9uIEdPZShlKXt2YXIgdD1WT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9R09lO2Z1bmN0aW9uIFdPZShlKXtyZXR1cm4gVU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj1XT2U7ZnVuY3Rpb24gWU9lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PVlPZX0pO3ZhciBnWHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtWHQ9KEVyKCksVXQoTXIpKSxqT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gWE9lKGUsdCl7dmFyIHI9ZFh0KGUpKy4wNSxuPWRYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PVhPZTtmdW5jdGlvbiAkT2UoZSx0KXt2YXIgcj1tWHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9JE9lO2Z1bmN0aW9uIEtPZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PUtPZTtmdW5jdGlvbiBkWHQoZSl7dmFyIHQ9bVh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOmpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxtYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBaT2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPVpPZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9eVh0O2Z1bmN0aW9uIEpPZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4geVh0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9Sk9lO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBRT2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9UU9lO2Z1bmN0aW9uIHQ3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGtmKHIsIndpZHRoIikra2YociwicGFkZGluZy1sZWZ0Iikra2YociwicGFkZGluZy1yaWdodCIpK2tmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikra2YociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPXQ3ZTtmdW5jdGlvbiBlN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJoZWlnaHQiKStrZihyLCJwYWRkaW5nLXRvcCIpK2tmKHIsInBhZGRpbmctYm90dG9tIikra2YociwiYm9yZGVyLXRvcC13aWR0aCIpK2tmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PWU3ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLHZYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIscjdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK3ZYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxuN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxpN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86Iit2WHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gbzdlKGUpe3ZhciB0PXI3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1vN2U7ZnVuY3Rpb24gYTdlKGUpe3ZhciB0PW43ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9YTdlO2Z1bmN0aW9uIHM3ZShlKXt2YXIgdD1pN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1zN2U7ZnVuY3Rpb24gbDdlKGUsdCl7cmV0dXJuIShtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LmxlZnQpfHxtYS5jZWlsKGUubGVmdCk+PW1hLmZsb29yKHQucmlnaHQpfHxtYS5mbG9vcihlLmJvdHRvbSk8PW1hLmNlaWwodC50b3ApfHxtYS5jZWlsKGUudG9wKT49bWEuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9bDdlO2Z1bmN0aW9uIGM3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PWM3ZTtmdW5jdGlvbiB1N2UoZSx0KXtyZXR1cm4gbWEuZmxvb3IodC5sZWZ0KTw9bWEuY2VpbChlLmxlZnQpJiZtYS5mbG9vcih0LnRvcCk8PW1hLmNlaWwoZS50b3ApJiZtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LnJpZ2h0KSYmbWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPXU3ZTtmdW5jdGlvbiBoN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPV9YdChlKSxvPV9YdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9aDdlO2Z1bmN0aW9uIF9YdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBrZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZjdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mN2U7ZnVuY3Rpb24gcDdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIGc3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPXA3ZTt2YXIgZDdlPS9ebWF0cml4XCgoW14pXSspXCkkLyxtN2U9L1ssIF0rLztmdW5jdGlvbiBnN2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKGQ3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KG03ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSx4WHQ9Q2l0KCksbWQ9d2luZG93Lk1hdGgsXzdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24geTdlKGUsdCxyKXtyZXR1cm4gbWQubWluKHQscik8PWUmJmU8PW1kLm1heCh0LHIpfXNvLmluUmFuZ2U9eTdlO2Z1bmN0aW9uIHY3ZShlLHQscil7cmV0dXJuIG1kLm1pbihtZC5tYXgodCxlKSxyKX1zby5jbGFtcD12N2U7ZnVuY3Rpb24geDdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9eDdlO2Z1bmN0aW9uIGI3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPWI3ZTtmdW5jdGlvbiB3N2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPXc3ZTtmdW5jdGlvbiBTN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49bWQubWF4KG1kLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPU03ZTtmdW5jdGlvbiBFN2UoZSx0KXtyZXR1cm4gbWQucG93KHQueS1lLnksMikrbWQucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUvMzYwKm1kLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1UN2U7ZnVuY3Rpb24gQzdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49QzdlO2Z1bmN0aW9uIEE3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1BN2U7ZnVuY3Rpb24gUDdlKGUpe2Zvcih2YXIgdD14WHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1fN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz14WHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1iWHQocix3WHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVA3ZTtmdW5jdGlvbiBiWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1iWHQ7ZnVuY3Rpb24gSTdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9STdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gd1h0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD13WHQ7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUw3ZX0pO3ZhciBTWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9azdlO3ZhciBSN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj1SN2V9KTt2YXIgSWl0PUgoZ2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTjdlPVNYdCgpLEQ3ZT01LE83ZT1uZXcgTjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsUmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKFJmPWdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZ2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLFJmLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/UmYuUEFTUzpSZi5GQUlMOnM+bz9SZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLFJmLlBBU1MpfX1nZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1nZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIHo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1EN2UpLHI9PT12b2lkIDAmJihyPU83ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsUWEuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSxRYS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1SZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PVJmLlBBU1N8fHM9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO2dkLlJUcmVlPXo3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9UWEudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz1RYS51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKFFhLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7Z2QuUlRyZWVOb2RlPVRGO3ZhciBRYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtnZC5SVHJlZUJvdW5kcz1RYX0pO3ZhciBUWHQ9SChfZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNWHQ9KEVyKCksVXQoTXIpKSxGN2U9T2UoKSxYZz1GZSgpLEI3ZT1JZigpO19kLklTdGFja2luZ09yZGVyPUI3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgRVh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEg3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1NWHQubWFwKCksbz1NWHQubWFwKCksYT1uZXcgWGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyBYZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz1fZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX1fZC5zdGFjaz1IN2U7ZnVuY3Rpb24gVjdlKGUpe3ZhciB0PW5ldyBYZy5NYXAscj1uZXcgWGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPVhnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD1YZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX1fZC5zdGFja2VkRXh0ZW50cz1WN2U7ZnVuY3Rpb24gVTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KF9kLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9WGcuTWF0aC5tYXgobiwwKSxvPVhnLk1hdGgubWluKG4sMCk7cmV0dXJuW0VYdC5taW4obywwKSxFWHQubWF4KDAsaSldfV9kLnN0YWNrZWRFeHRlbnQ9VTdlO19kLm5vcm1hbGl6ZUtleT1GN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcTdlPSRBKCk7ZnVuY3Rpb24gQ1h0KGUpeyFxN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49Q1h0O2Z1bmN0aW9uIEFYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9QVh0O2Z1bmN0aW9uIEc3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1BWHQobyxlKX19Z1MuZGVib3VuY2U9RzdlO2Z1bmN0aW9uIFc3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLENYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9VzdlfSk7dmFyIFBYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9WTdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9ajdlfSk7dmFyIElYdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWDdlPShkZSgpLFV0KHBlKSksJDdlPVJpdCgpLEs3ZT1mdW5jdGlvbihlKXtYN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oJDdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PUs3ZX0pO3ZhciBMWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRnPUlpdCgpLFo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgJGcuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPSRnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7JGcuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1aN2V9KTt2YXIga1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKN2U9QWl0KCksUTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihKN2UuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9UTdlfSk7dmFyIFJYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiB0emUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPXR6ZX0pO3ZhciBPWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxOWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIGV6ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbTlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IERYdCh0KSx0W05YdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPWV6ZTt2YXIgRFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPURYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPShkZSgpLFV0KHBlKSkscnplPXBYdCgpO3FvLkFycmF5PXJ6ZTt2YXIgbnplPWdYdCgpO3FvLkNvbG9yPW56ZTt2YXIgaXplPUNpdCgpO3FvLkRPTT1pemU7dmFyIG96ZT1BaXQoKTtxby5NYXRoPW96ZTt2YXIgYXplPUlpdCgpO3FvLlJUcmVlPWF6ZTt2YXIgc3plPVRYdCgpO3FvLlN0YWNraW5nPXN6ZTt2YXIgbHplPUFGKCk7cW8uV2luZG93PWx6ZTtLZy5fX2V4cG9ydFN0YXIoUFh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihJWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKFlnKCkscW8pO0tnLl9fZXhwb3J0U3RhcihMWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKGtYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7S2cuX19leHBvcnRTdGFyKE9YdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6WHQ9RmUoKSxCaXQ9SUYoKSxjemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9Y3plO3ZhciB1emU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt6WHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9dXplO3ZhciBoemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9elh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9aHplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxmemU9SWYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9ZnplLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gcHplKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9cHplO2Z1bmN0aW9uIGR6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxCWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPWR6ZTtmdW5jdGlvbiBGWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSksQlh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9Rlh0O2Z1bmN0aW9uIG16ZShlKXtGWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9bXplO2Z1bmN0aW9uIEJYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIGd6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPWd6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEhYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxfemU9T2UoKSxWWHQ9WWcoKSxVWHQ9SWYoKTtRQS5YQWxpZ25tZW50PVVYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVVYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgeXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9Vlh0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8X3plLmlzRWxlbWVudCh0KT9yPUhYdC5zZWxlY3QodCk6cj1WWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXl6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksdnplPSExO2Z1bmN0aW9uIHh6ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT14emU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gYnplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1iemU7ZnVuY3Rpb24gd3plKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PXd6ZTtmdW5jdGlvbiBTemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1TemU7ZnVuY3Rpb24gTXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PU16ZTtmdW5jdGlvbiBFemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1FemU7ZnVuY3Rpb24gVHplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9VHplO2Z1bmN0aW9uIEN6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD12emUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1DemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEF6ZT0oZGUoKSxVdChwZSkpLHlkPShFcigpLFV0KE1yKSksR2l0PV9sKCksUHplPWtjKCkscVh0PUJ1KCkseFM9RmUoKSxJemU9SWYoKTtERi5BeGlzT3JpZW50YXRpb249SXplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBMemU9ZnVuY3Rpb24oZSl7QXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihxWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1xWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnlkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSkseWQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHlkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx5ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz15ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnlkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUHplLkNvbXBvbmVudCk7REYuQXhpcz1MemV9KTt2YXIgV1h0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBremU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj1fbCgpLFJ6ZT1rYygpLEdYdD1GZSgpLFlpdD10NCgpLE56ZT1mdW5jdGlvbihlKXtremUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUnplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpHWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/R1h0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1OemV9KTt2YXIgWVh0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD1fbCgpLE96ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSx6emU9ZnVuY3Rpb24oZSl7RHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihPemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9enplfSk7dmFyIGpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZ6ZT1GZSgpO2Z1bmN0aW9uIEJ6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9RnplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9QnplO2Z1bmN0aW9uIEh6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9SHplfSk7dmFyIGU0PUgoSXY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEl2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9SXYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFZ6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1YWHQoZSx0LG4saSksJFh0KGUsdCxyLG8sYSl9SXYuY29uc3RyYWluZWRab29tPVZ6ZTtmdW5jdGlvbiBYWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Jdi5jb25zdHJhaW5ab29tRXh0ZW50cz1YWHQ7ZnVuY3Rpb24gJFh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz1LWHQoZSksYT1xemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Jdi5jb25zdHJhaW5ab29tVmFsdWVzPSRYdDtmdW5jdGlvbiBVemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz1LWHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUl2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249VXplO2Z1bmN0aW9uIEtYdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBxemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIEx2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBaWHQ9RmUoKSxHemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgWlh0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBaWHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9R3plfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgV3plPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxZemU9ZTQoKSxKWHQ9RmUoKSxqemU9THYoKSxRaXQ9WzAsMV0sWHplPWZ1bmN0aW9uKGUpe1d6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiBKWHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBKWHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KFl6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oanplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9WHplfSk7dmFyIFFYdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksTmY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLEt6ZT1MdigpLFp6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxKemU9ZnVuY3Rpb24oZSl7JHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgWnplO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9TmYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1OZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0oS3plLlNjYWxlKTtyb3QuQ29sb3I9SnplfSk7dmFyIGUkdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSx0JHQ9RmUoKSx0RmU9THYoKSxlRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFt0JHQuTWF0aC5taW4ociwwKSx0JHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0odEZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9ZUZlfSk7dmFyIHZkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByRmU9KGRlKCksVXQocGUpKSxuRmU9KEVyKCksVXQoTXIpKSxpRmU9ZTQoKSxFUz1GZSgpLG9GZT1MdigpLGFGZT1mdW5jdGlvbihlKXtyRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49bkZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChpRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KG9GZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPWFGZX0pO3ZhciByJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHNGZT0oZGUoKSxVdChwZSkpLGxGZT0oRXIoKSxVdChNcikpLGNGZT12ZCgpLHVGZT1mdW5jdGlvbihlKXtzRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1sRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0oY0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPXVGZX0pO3ZhciBuJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT12ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWZGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPWRGZX0pO3ZhciBpJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9a3MoKSxnRmU9dmQoKSxfRmU9ZnVuY3Rpb24oZSl7bUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oZ0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9X0ZlfSk7dmFyIG8kdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeUZlPShkZSgpLFV0KHBlKSksZ2E9KEVyKCksVXQoTXIpKSxrdj1IRigpLHZGZT12ZCgpLHhGZT1mdW5jdGlvbihlKXt5RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1nYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1nYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP2dhLnV0Y1NlY29uZDpnYS50aW1lU2Vjb25kO2Nhc2Uga3YuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9nYS51dGNNaW51dGU6Z2EudGltZU1pbnV0ZTtjYXNlIGt2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP2dhLnV0Y0hvdXI6Z2EudGltZUhvdXI7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP2dhLnV0Y0RheTpnYS50aW1lRGF5O2Nhc2Uga3YuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/Z2EudXRjV2VlazpnYS50aW1lV2VlaztjYXNlIGt2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9nYS51dGNNb250aDpnYS50aW1lTW9udGg7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9nYS51dGNZZWFyOmdhLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fSh2RmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPXhGZX0pO3ZhciBrcz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJ2PShkZSgpLFV0KHBlKSksYkZlPWpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPWJGZTtSdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihRWHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGUkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIociR0KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGkkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIobyR0KCksSHUpO3ZhciB3RmU9ZW90KCksU0ZlPXZkKCk7ZnVuY3Rpb24gTUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2Ygd0ZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1NRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLGEkdD1fbCgpLHMkdD1CdSgpLFRGZT1rcygpLG40PUZlKCksdW90PUlmKCksdHM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgQ0ZlPWZ1bmN0aW9uKGUpe0VGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihzJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9VEZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgYSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBhJHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHRzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKHRzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPSh4ZD17fSx4ZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLHhkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEseGRbU2UuVGltZUludGVydmFsLmhvdXJdPTIseGRbU2UuVGltZUludGVydmFsLmRheV09Myx4ZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCx4ZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUseGRbU2UuVGltZUludGVydmFsLnllYXJdPTYseGQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBzJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KHRzLkF4aXMpO1NlLlRpbWU9Q0ZlO3ZhciB4ZH0pO3ZhciBsJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKFdYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKFlYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBRmU9RmUoKSxQRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcgQUZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UEZlfSk7dmFyIGMkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSUZlPShkZSgpLFV0KHBlKSksTEZlPW80KCksa0ZlPWZ1bmN0aW9uKGUpe0lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShMRmUuRGlzcGF0Y2hlcik7cG90LktleT1rRmV9KTt2YXIgaCR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSRmU9KGRlKCksVXQocGUpKSx1JHQ9RmUoKSxORmU9bzQoKSxERmU9ZnVuY3Rpb24oZSl7UkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9dSR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHUkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KE5GZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9REZlfSk7dmFyIHAkdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT0ZlPShkZSgpLFV0KHBlKSksZiR0PUZlKCksekZlPW80KCksRkZlPWZ1bmN0aW9uKGUpe09GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1mJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZiR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KHpGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9RkZlfSk7dmFyIE52PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihjJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihoJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCl9KTt2YXIgRHY9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249QkZlfSk7dmFyIGckdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZCR0PU52KCksbSR0PUZlKCksVkZlPUR2KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyBtJHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgbSR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1kJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9ZCR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oVkZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9VUZlfSk7dmFyIHkkdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcUZlPShkZSgpLFV0KHBlKSksXyR0PU52KCksczQ9RmUoKSxHRmU9RHYoKSxXRmU9ZnVuY3Rpb24oZSl7cUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9XyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9XyR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KEdGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9V0ZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWUZlPShkZSgpLFV0KHBlKSksdiR0PU52KCkseG90PUZlKCksakZlPUR2KCksWEZlPWZ1bmN0aW9uKGUpe1lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9diR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPXYkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oakZlLkludGVyYWN0aW9uKTtib3QuS2V5PVhGZX0pO3ZhciBTJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRGZT0oZGUoKSxVdChwZSkpLEtGZT0oRXIoKSxVdChNcikpLHgkdD1OdigpLGIkdD1rcygpLHlsPUZlKCksWkZlPWw0KCksSkZlPUR2KCksdyR0PWU0KCksUUZlPWZ1bmN0aW9uKGUpeyRGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB5bC5TZXQsaS5feVNjYWxlcz1uZXcgeWwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgWkZlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz1LRmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgeWwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj14JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eCR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHckdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gdyR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgYiR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIGIkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgeWwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmeWwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KEpGZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209UUZlfSk7dmFyIEUkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdEJlPShkZSgpLFV0KHBlKSksTSR0PU52KCksTW90PUZlKCksZUJlPUR2KCksckJlPWZ1bmN0aW9uKGUpe3RCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9TSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oZUJlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1yQmV9KTt2YXIgbDQ9SChaZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3RhcihnJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKHkkdCgpLFpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksWmcpO2M0Ll9fZXhwb3J0U3RhcihTJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKEUkdCgpLFpnKTt2YXIgbkJlPWU0KCk7Wmcuem9vbU91dD1uQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLG9CZT1rYygpLGVzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKGVzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciBhQmU9ZnVuY3Rpb24oZSl7aUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWVzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KG9CZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPWFCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0JlPShkZSgpLFV0KHBlKSksbEJlPWw0KCksQ290PUZlKCksY0JlPVlnKCksVUY9UG90KCksdUJlPVRvdCgpLGhCZT1mdW5jdGlvbihlKXtzQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbEJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1jQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0odUJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPWhCZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZCZT0oZGUoKSxVdChwZSkpLHBCZT1GZSgpLGRCZT1rYygpLE92OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKE92fHwoT3Y9e30pKTt2YXIgbUJlPWZ1bmN0aW9uKGUpe2ZCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPU92LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PU92LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09T3YuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT1Pdi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFwQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT1Pdi5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oZEJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPW1CZX0pO3ZhciBUJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1Mb3QoKSx5QmU9bDQoKSxrb3Q9RmUoKSx2QmU9ZnVuY3Rpb24oZSl7Z0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB5QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oX0JlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj12QmV9KTt2YXIgQyR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4QmU9KGRlKCksVXQocGUpKSxiQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciB3QmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KGJCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9d0JlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTQmU9KGRlKCksVXQocGUpKSxNQmU9WWcoKSxFQmU9a2MoKSxUQmU9ZnVuY3Rpb24oZSl7U0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9TUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oRUJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1UQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBJHQ9RmUoKSxBQmU9V0YoKSxQQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDpBJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OkEkdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KEFCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1QQmV9KTt2YXIgUCR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJQmU9KGRlKCksVXQocGUpKSxZRj1fbCgpLExCZT0kQSgpLGtCZT1CdSgpLFJCZT1GZSgpLE5CZT1rYygpLERCZT1mdW5jdGlvbihlKXtJQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9a0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj1SQmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksTEJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oTkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPURCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj1fbCgpLE9CZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShPQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIHpCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD16QmU7dmFyIEZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPUZCZX0pO3ZhciBYRj1IKGJkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJzPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gQkJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fWJkLmNpcmNsZT1CQmU7ZnVuY3Rpb24gSEJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19YmQuc3F1YXJlPUhCZTtmdW5jdGlvbiBWQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX1iZC5jcm9zcz1WQmU7ZnVuY3Rpb24gVUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX1iZC5kaWFtb25kPVVCZTtmdW5jdGlvbiBxQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fWJkLnRyaWFuZ2xlPXFCZTt2YXIgR0JlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uIFdCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTdGFyKS5zaXplKEdCZSpNYXRoLnBvdyhlLzIsMikpfX1iZC5zdGFyPVdCZTt2YXIgWUJlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIGpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xXeWUpLnNpemUoWUJlKk1hdGgucG93KGUvMi40LDIpKX19YmQud3llPWpCZX0pO3ZhciBJJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFhCZT0oZGUoKSxVdChwZSkpLHp2PShFcigpLFV0KE1yKSksJEY9X2woKSwkQmU9JEEoKSxLQmU9QnUoKSxaQmU9WEYoKSxKZz1GZSgpLEpCZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSmcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksUUJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihKZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSx0SGU9ZnVuY3Rpb24oZSl7WEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUtCZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gWkJlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsJEJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgUUJlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoSmcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1KZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1KZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89enYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PXp2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHp2LnNlbGVjdChnKSksYj1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOkpnLkRPTS5lbGVtZW50QkJveCh6di5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOnp2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PXp2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPXp2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0oSkJlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD10SGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZUhlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKGVIZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgayR0PUgoKFlxbixMJHQpPT57InVzZSBzdHJpY3QiO0wkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgRCR0PUgoKGpxbixOJHQpPT57InVzZSBzdHJpY3QiO3ZhciBySGU9ayR0KCk7ZnVuY3Rpb24gUiR0KGUpe3JldHVybiBySGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9TiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKFIkdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUsUiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkhlPUZlKCksTyR0PTAsaUhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBuSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9aUhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLG9IZT1EJHQoKSxhSGU9WW90KCksc0hlPUx2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIHNIZS5TY2FsZT96JHQoZSk6ZSBpbnN0YW5jZW9mIGFIZS5EYXRhc2V0P0YkdChlKTpvSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9CJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24geiR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT16JHQ7ZnVuY3Rpb24gRiR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9RiR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgViR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gQiR0KGUpe3JldHVybiBuZXcgSCR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PUIkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgVSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBIJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9SCR0O3ZhciBWJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVYkdDt2YXIgVSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9VSR0fSk7dmFyIHEkdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbEhlPSRvdCgpO2Z1bmN0aW9uIGNIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWxIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9Y0hlfSk7dmFyIFkkdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHVIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksRyR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uIFckdChlKXt2YXIgdD11SGUubWVtb2l6ZShlLEckdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IEckdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9VyR0O2Z1bmN0aW9uIGhIZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPVckdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9aEhlfSk7dmFyIGokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPUNTKCk7ZnVuY3Rpb24gcEhlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9ZkhlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPXBIZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIocSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO3ZhciBkSGU9JG90KCk7QVMuc2lnbj1kSGUuc2lnbn0pO3ZhciBGdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFgkdD0oRXIoKSxVdChNcikpLG1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9bUhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBnSGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiAkJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPWdIZTtmdW5jdGlvbiAkJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz0kJHQ7ZnVuY3Rpb24gX0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24geUhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiBLJHQoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9SyR0O2Z1bmN0aW9uIFokdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PVokdDtmdW5jdGlvbiB2SGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT12SGU7ZnVuY3Rpb24geEhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9eEhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD1LJHQodCk7dmFyIHI9WCR0LmNvbG9yKHQuc3Ryb2tlKSxuPVokdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9X0hlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1YJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXlIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9YkhlfSk7dmFyIERmPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB3SGU9KEVyKCksVXQoTXIpKSxKJHQ9RmUoKSxTSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD13SGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtKJHQuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyBKJHQuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPVNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFEkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLE1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IFEkdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IFEkdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9TUhlfSk7dmFyIHJzPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRUhlPShkZSgpLFV0KHBlKSksd2Q9KEVyKCksVXQoTXIpKSxkND1MZigpLFNkPUZlKCksdEt0PUdvdCgpLG9hdD1DUygpLFRIZT1rYygpLENIZT1GdigpLEFIZT1VdSgpLFBIZT1EZigpLElIZT1ZZygpLExIZT1JZigpLGtIZT1pYXQoKTtRRi5SZW5kZXJlcj1MSGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIFJIZT1mdW5jdGlvbihlKXtFSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgU2QuTWFwLHIuX2F0dHJCaW5kaW5ncz13ZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9d2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IodEt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcih0S3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1TZC5XaW5kb3cuZGVib3VuY2Uoa0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9SUhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IEFIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUEhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IENIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIFNkLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gZUt0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBlS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9d2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoU2QuTWF0aC5pc05hTihnLngpfHxTZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNkLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1TZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIHdkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSx3ZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IFNkLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246d2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShUSGUuQ29tcG9uZW50KTtRRi5QbG90PVJIZTtmdW5jdGlvbiBlS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIHJLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkhlPShkZSgpLFV0KHBlKSksREhlPXJzKCksT0hlPUZlKCksekhlPXpvdCgpLEZIZT1mdW5jdGlvbihlKXtOSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1PSGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIERIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oekhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPUZIZX0pO3ZhciBuS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxISGU9V0YoKSxWSGU9ZnVuY3Rpb24oZSl7QkhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oSEhlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVZIZX0pO3ZhciBpS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFVIZT0oZGUoKSxVdChwZSkpLHFIZT1Wb3QoKSxHSGU9MixXSGU9ZnVuY3Rpb24oZSl7VUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPUdIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KHFIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD1XSGV9KTt2YXIgb0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZSGU9KGRlKCksVXQocGUpKSxqSGU9cUYoKSxYSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShqSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1YSGV9KTt2YXIgYUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkSGU9KGRlKCksVXQocGUpKSxLSGU9cUYoKSxaSGU9ZnVuY3Rpb24oZSl7JEhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KEtIZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPVpIZX0pO3ZhciBQb3Q9SChfYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOcz0oZGUoKSxVdChwZSkpO05zLl9fZXhwb3J0U3RhcihxRigpLF9hKTtOcy5fX2V4cG9ydFN0YXIoVCR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihDJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKHpvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTG90KCksX2EpO05zLl9fZXhwb3J0U3RhcihQJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKFZvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoSSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihyS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFRvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIobkt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihpS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKG9LdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoYUt0KCksX2EpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSkhlPShkZSgpLFV0KHBlKSksUUhlPURmKCksdFZlPWZ1bmN0aW9uKGUpe0pIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShRSGUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPXRWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGVWZT0oZGUoKSxVdChwZSkpLHJWZT1EZigpLG5WZT1mdW5jdGlvbihlKXtlVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KHJWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPW5WZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpVmU9KGRlKCksVXQocGUpKSx0Qj1GdigpLG9WZT1EZigpLGFWZT1mdW5jdGlvbihlKXtpVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0ob1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj1hVmU7dmFyIHNWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sbFZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIGNWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxzVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxsVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9Y1ZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdVZlPShkZSgpLFV0KHBlKSksc0t0PUZ2KCksaFZlPURmKCksZlZlPWZ1bmN0aW9uKGUpe3VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oaFZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1mVmU7dmFyIHBWZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBkVmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1zS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixwVmUsclswXSwwKTtzS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWRWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGxLdD0oZGUoKSxVdChwZSkpLGlCPUZ2KCksbVZlPURmKCksZ1ZlPWZ1bmN0aW9uKGUpe2xLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KG1WZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixfVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB5VmU9ZnVuY3Rpb24oZSl7bEt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj15VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2VmU9KGRlKCksVXQocGUpKSx4VmU9RGYoKSxiVmU9ZnVuY3Rpb24oZSl7dlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oeFZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9YlZlfSk7dmFyIGNLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd1ZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj13VmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1ZlPShkZSgpLFV0KHBlKSksbTQ9RnYoKSxNVmU9Y0t0KCksRVZlPURmKCksVFZlPWZ1bmN0aW9uKGUpe1NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KEVWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1UVmU7dmFyIENWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBBVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IE1WZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLENWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFQVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPUlWZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1BVmU7ZnVuY3Rpb24gUFZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBJVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgQnY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPZj0oZGUoKSxVdChwZSkpO09mLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGRhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihGdigpLERjKTtPZi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7T2YuX19leHBvcnRTdGFyKG5CKCksRGMpO09mLl9fZXhwb3J0U3RhcihvQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO09mLl9fZXhwb3J0U3RhcihEZigpLERjKTtPZi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIEh2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMVmU9KGRlKCksVXQocGUpKSx1S3Q9a3MoKSx4YXQ9RmUoKSxrVmU9aWF0KCksZzQ9cnMoKSxSVmU9ZnVuY3Rpb24oZSl7TFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IGtWZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiB1S3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgdUt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9UlZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE5WZT0oZGUoKSxVdChwZSkpLHlhPShFcigpLFV0KE1yKSksRFZlPUxmKCksT1ZlPUJ2KCkselZlPVV1KCksaEt0PW5CKCksRlZlPWtzKCksc0I9dmQoKSxRZz1GZSgpLEJWZT1JZigpLHdhdD1JUygpLHZsPXJzKCksSFZlPUh2KCksZkt0PXtsaW5lYXI6eWEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnlhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6eWEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6eWEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp5YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp5YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp5YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp5YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp5YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp5YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp5YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp5YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnlhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9QlZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBWVmU9ZnVuY3Rpb24oZSl7TlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBEVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHZsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBGVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IHpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaEt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgT1ZlLkNhbnZhc0RyYXdlcihpLGhLdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB5YS5leHRlbnQoeWEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIVFnLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiBRZy5NYXRoLmlzVmFsaWROdW1iZXIoYykmJlFnLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHlhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1mS3Rbcl07cmV0dXJuIG49PW51bGw/Zkt0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyBRZy5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gUWcuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZRZy5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgUWcuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgUWcuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oSFZlLlhZUGxvdCk7bEIuTGluZT1WVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLHFWZT1rcygpLF80PUZlKCksTWF0PUJ2KCkscEt0PW1hdCgpLEdWZT1VdSgpLGRLdD1uQigpLHVCPUlTKCksV1ZlPVNhdCgpLERzPXJzKCksWVZlPWZ1bmN0aW9uKGUpe1VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IHFWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSxkS3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPURzLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IEdWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgcEt0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLHBLdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fShXVmUuTGluZSk7RWF0LkFyZWE9WVZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgalZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PV9sKCksWFZlPUxmKCksJFZlPUJ1KCksS1ZlPUJ2KCksWlZlPVV1KCksSlZlPW9CKCksUVZlPUNTKCksUGF0PWtzKCksbUt0PXZkKCkseGw9RmUoKSxMYXQ9SWYoKSxnS3Q9SVMoKSxoQj1ycygpLHRVZT1IdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7alZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPSRWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9UVZlLm1lbW9pemUoZVVlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBYVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgeGwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgSlZlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgS1ZlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107eGwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2YgbUt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmeGwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIG1LdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPXhsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PHhsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoZ0t0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihnS3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IHhsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPXhsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj94bC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KHRVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gZVVlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldCh4bC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249eGwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgeUt0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByVWU9KGRlKCksVXQocGUpKSxuVWU9a3MoKSxpVWU9RmUoKSxfS3Q9eTQoKSxvVWU9cnMoKSxhVWU9ZnVuY3Rpb24oZSl7clVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBpVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBuVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49b1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihfS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oX0t0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj1hVWV9KTt2YXIgdkt0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD1fbCgpLGxVZT1MZigpLGNVZT1CdSgpLHVVZT1rcygpLFZ2PUZlKCksaFVlPWZhdCgpLGZVZT1kYXQoKSxwVWU9VXUoKSxkVWU9QUYoKSxNZD1ycygpLG1VZT1mdW5jdGlvbihlKXtzVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1jVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgdVVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBWdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFZ2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZlVlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHBVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaFVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gZFVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFZ2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPU1kLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGxVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVnYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Wdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxWdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KE1kLlBsb3QpO05hdC5QaWU9bVVlfSk7dmFyIHhLdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ1VlPShkZSgpLFV0KHBlKSksX1VlPShFcigpLFV0KE1yKSksRGF0PV9sKCkseVVlPUxmKCksdlVlPUJ2KCkseFVlPVV1KCksYlVlPW9CKCksZkI9a3MoKSxPYz1GZSgpLHBCPXJzKCksd1VlPUh2KCksU1VlPWZ1bmN0aW9uKGUpe2dVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHlVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgeFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IHZVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9X1VlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0od1VlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1TVWV9KTt2YXIgd0t0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNVWU9KGRlKCksVXQocGUpKSx6YXQ9X2woKSxFVWU9QnUoKSxUVWU9WEYoKSxDVWU9VXUoKSxiS3Q9dmF0KCksQVVlPUxmKCksUFVlPUJ2KCksSVVlPWtzKCksRmF0PUZlKCksQmF0PUlTKCksYmw9cnMoKSxMVWU9SHYoKSxrVWU9ZnVuY3Rpb24oZSl7TVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9RVVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcgQVVlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24oYmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBJVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9VFVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBDVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUFVlLkNhbnZhc0RyYXdlcihpLGJLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiBibC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oTFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9a1VlfSk7dmFyIFNLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUlVlPShkZSgpLFV0KHBlKSksTlVlPUxmKCksRFVlPVV1KCksT1VlPV9hdCgpLHpVZT1rcygpLEZVZT1BRigpLExTPXJzKCksQlVlPUh2KCksSFVlPWZ1bmN0aW9uKGUpe1JVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IHpVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgRFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gRlVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBOVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KEJVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUhVZX0pO3ZhciBUS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFZVZT0oZGUoKSxVdChwZSkpLE1LdD0oRXIoKSxVdChNcikpLFVVZT1MZigpLEVLdD1DUygpLHQwPUZlKCkscVVlPVRhdCgpLEdVZT1ycygpLFdVZT1mdW5jdGlvbihlKXtWVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9RUt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PUVLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiB0MC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8odDAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBVVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJnQwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1NS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPUdVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldCh0MC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KHFVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9V1VlfSk7dmFyIEFLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWVVlPShkZSgpLFV0KHBlKSkscWF0PV9sKCksalVlPUJ1KCksQ0t0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxYVWU9cnMoKSwkVWU9ZnVuY3Rpb24oZSl7WVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9alVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9Q0t0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUNLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1YVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj0kVWV9KTt2YXIgUEt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLVWU9KGRlKCksVXQocGUpKSxaVWU9RmUoKSxKVWU9eTQoKSxRVWU9cnMoKSx0cWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJlpVZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89UVVlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0oSlVlLkJhcik7WWF0LldhdGVyZmFsbD10cWV9KTt2YXIgSVM9SChPcz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSxPcyk7emMuX19leHBvcnRTdGFyKHk0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHlLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksT3MpO3pjLl9fZXhwb3J0U3Rhcih2S3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHhLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIod0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKFRLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoQUt0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihQS3QoKSxPcyl9KTt2YXIgSUt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgd2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpO1dqdCgpO3ZhciBlcWU9TGYoKTtsbi5BbmltYXRvcnM9ZXFlO3ZhciBycWU9bCR0KCk7bG4uQXhlcz1ycWU7dmFyIG5xZT1Qb3QoKTtsbi5Db21wb25lbnRzPW5xZTt2YXIgaXFlPSRBKCk7bG4uQ29uZmlncz1pcWU7dmFyIG9xZT1CdSgpO2xuLkZvcm1hdHRlcnM9b3FlO3ZhciBhcWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPWFxZTt2YXIgc3FlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPXNxZTt2YXIgbHFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWxxZTt2YXIgY3FlPU52KCk7bG4uRGlzcGF0Y2hlcnM9Y3FlO3ZhciB1cWU9QnYoKTtsbi5EcmF3ZXJzPXVxZTt2YXIgaHFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPWhxZTt2YXIgZnFlPUlTKCk7bG4uUGxvdHM9ZnFlO3ZhciBwcWU9a3MoKTtsbi5TY2FsZXM9cHFlO3ZhciBkcWU9RmUoKTtsbi5VdGlscz1kcWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciBtcWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9bXFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIGdxZT1JS3QoKTtsbi52ZXJzaW9uPWdxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKER2KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKEh2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihycygpLGxuKTtGYy5fX2V4cG9ydFN0YXIodmQoKSxsbik7RmMuX19leHBvcnRTdGFyKEx2KCksbG4pfSk7dmFyICRLdD1IKChKam4sWEt0KT0+e2Z1bmN0aW9uIERxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9WEt0LmV4cG9ydHM9RHFlfSk7dmFyIFl2PUgoKFFqbixLS3QpPT57ZnVuY3Rpb24gT3FlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9S0t0LmV4cG9ydHM9T3FlfSk7dmFyIE00PUgoKHRYbixaS3QpPT57dmFyIHpxZT1ZdigpO2Z1bmN0aW9uIEZxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKHpxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfVpLdC5leHBvcnRzPUZxZX0pO3ZhciBRS3Q9SCgoZVhuLEpLdCk9Pnt2YXIgQnFlPU00KCksSHFlPUFycmF5LnByb3RvdHlwZSxWcWU9SHFlLnNwbGljZTtmdW5jdGlvbiBVcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPUJxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6VnFlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfUpLdC5leHBvcnRzPVVxZX0pO3ZhciBlWnQ9SCgoclhuLHRadCk9Pnt2YXIgcXFlPU00KCk7ZnVuY3Rpb24gR3FlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1xcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfXRadC5leHBvcnRzPUdxZX0pO3ZhciBuWnQ9SCgoblhuLHJadCk9Pnt2YXIgV3FlPU00KCk7ZnVuY3Rpb24gWXFlKGUpe3JldHVybiBXcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1yWnQuZXhwb3J0cz1ZcWV9KTt2YXIgb1p0PUgoKGlYbixpWnQpPT57dmFyIGpxZT1NNCgpO2Z1bmN0aW9uIFhxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1qcWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31pWnQuZXhwb3J0cz1YcWV9KTt2YXIgRTQ9SCgob1huLGFadCk9Pnt2YXIgJHFlPSRLdCgpLEtxZT1RS3QoKSxacWU9ZVp0KCksSnFlPW5adCgpLFFxZT1vWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9JHFlO3pTLnByb3RvdHlwZS5kZWxldGU9S3FlO3pTLnByb3RvdHlwZS5nZXQ9WnFlO3pTLnByb3RvdHlwZS5oYXM9SnFlO3pTLnByb3RvdHlwZS5zZXQ9UXFlO2FadC5leHBvcnRzPXpTfSk7dmFyIGxadD1IKChhWG4sc1p0KT0+e3ZhciB0R2U9RTQoKTtmdW5jdGlvbiBlR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyB0R2UsdGhpcy5zaXplPTB9c1p0LmV4cG9ydHM9ZUdlfSk7dmFyIHVadD1IKChzWG4sY1p0KT0+e2Z1bmN0aW9uIHJHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1jWnQuZXhwb3J0cz1yR2V9KTt2YXIgZlp0PUgoKGxYbixoWnQpPT57ZnVuY3Rpb24gbkdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1oWnQuZXhwb3J0cz1uR2V9KTt2YXIgZFp0PUgoKGNYbixwWnQpPT57ZnVuY3Rpb24gaUdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1wWnQuZXhwb3J0cz1pR2V9KTt2YXIgY3N0PUgoKHVYbixtWnQpPT57dmFyIG9HZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7bVp0LmV4cG9ydHM9b0dlfSk7dmFyIEhjPUgoKGhYbixnWnQpPT57dmFyIGFHZT1jc3QoKSxzR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixsR2U9YUdlfHxzR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Z1p0LmV4cG9ydHM9bEdlfSk7dmFyIGp2PUgoKGZYbixfWnQpPT57dmFyIGNHZT1IYygpLHVHZT1jR2UuU3ltYm9sO19adC5leHBvcnRzPXVHZX0pO3ZhciBiWnQ9SCgocFhuLHhadCk9Pnt2YXIgeVp0PWp2KCksdlp0PU9iamVjdC5wcm90b3R5cGUsaEdlPXZadC5oYXNPd25Qcm9wZXJ0eSxmR2U9dlp0LnRvU3RyaW5nLFQ0PXladD95WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHBHZShlKXt2YXIgdD1oR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWZHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX14WnQuZXhwb3J0cz1wR2V9KTt2YXIgU1p0PUgoKGRYbix3WnQpPT57dmFyIGRHZT1PYmplY3QucHJvdG90eXBlLG1HZT1kR2UudG9TdHJpbmc7ZnVuY3Rpb24gZ0dlKGUpe3JldHVybiBtR2UuY2FsbChlKX13WnQuZXhwb3J0cz1nR2V9KTt2YXIgczA9SCgobVhuLFRadCk9Pnt2YXIgTVp0PWp2KCksX0dlPWJadCgpLHlHZT1TWnQoKSx2R2U9IltvYmplY3QgTnVsbF0iLHhHZT0iW29iamVjdCBVbmRlZmluZWRdIixFWnQ9TVp0P01adC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gYkdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/eEdlOnZHZTpFWnQmJkVadCBpbiBPYmplY3QoZSk/X0dlKGUpOnlHZShlKX1UWnQuZXhwb3J0cz1iR2V9KTt2YXIgTWw9SCgoZ1huLENadCk9PntmdW5jdGlvbiB3R2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9Q1p0LmV4cG9ydHM9d0dlfSk7dmFyIEZTPUgoKF9YbixBWnQpPT57dmFyIFNHZT1zMCgpLE1HZT1NbCgpLEVHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsVEdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsQ0dlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsQUdlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUEdlKGUpe2lmKCFNR2UoZSkpcmV0dXJuITE7dmFyIHQ9U0dlKGUpO3JldHVybiB0PT1UR2V8fHQ9PUNHZXx8dD09RUdlfHx0PT1BR2V9QVp0LmV4cG9ydHM9UEdlfSk7dmFyIEladD1IKCh5WG4sUFp0KT0+e3ZhciBJR2U9SGMoKSxMR2U9SUdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtQWnQuZXhwb3J0cz1MR2V9KTt2YXIgUlp0PUgoKHZYbixrWnQpPT57dmFyIHVzdD1JWnQoKSxMWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIGtHZShlKXtyZXR1cm4hIUxadCYmTFp0IGluIGV9a1p0LmV4cG9ydHM9a0dlfSk7dmFyIGhzdD1IKCh4WG4sTlp0KT0+e3ZhciBSR2U9RnVuY3Rpb24ucHJvdG90eXBlLE5HZT1SR2UudG9TdHJpbmc7ZnVuY3Rpb24gREdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gTkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifU5adC5leHBvcnRzPURHZX0pO3ZhciBPWnQ9SCgoYlhuLERadCk9Pnt2YXIgT0dlPUZTKCksekdlPVJadCgpLEZHZT1NbCgpLEJHZT1oc3QoKSxIR2U9L1tcXF4kLiorPygpW1xde318XS9nLFZHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxVR2U9RnVuY3Rpb24ucHJvdG90eXBlLHFHZT1PYmplY3QucHJvdG90eXBlLEdHZT1VR2UudG9TdHJpbmcsV0dlPXFHZS5oYXNPd25Qcm9wZXJ0eSxZR2U9UmVnRXhwKCJeIitHR2UuY2FsbChXR2UpLnJlcGxhY2UoSEdlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIGpHZShlKXtpZighRkdlKGUpfHx6R2UoZSkpcmV0dXJuITE7dmFyIHQ9T0dlKGUpP1lHZTpWR2U7cmV0dXJuIHQudGVzdChCR2UoZSkpfURadC5leHBvcnRzPWpHZX0pO3ZhciBGWnQ9SCgod1huLHpadCk9PntmdW5jdGlvbiBYR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX16WnQuZXhwb3J0cz1YR2V9KTt2YXIgbDA9SCgoU1huLEJadCk9Pnt2YXIgJEdlPU9adCgpLEtHZT1GWnQoKTtmdW5jdGlvbiBaR2UoZSx0KXt2YXIgcj1LR2UoZSx0KTtyZXR1cm4gJEdlKHIpP3I6dm9pZCAwfUJadC5leHBvcnRzPVpHZX0pO3ZhciB6Qj1IKChNWG4sSFp0KT0+e3ZhciBKR2U9bDAoKSxRR2U9SGMoKSx0V2U9SkdlKFFHZSwiTWFwIik7SFp0LmV4cG9ydHM9dFdlfSk7dmFyIEM0PUgoKEVYbixWWnQpPT57dmFyIGVXZT1sMCgpLHJXZT1lV2UoT2JqZWN0LCJjcmVhdGUiKTtWWnQuZXhwb3J0cz1yV2V9KTt2YXIgR1p0PUgoKFRYbixxWnQpPT57dmFyIFVadD1DNCgpO2Z1bmN0aW9uIG5XZSgpe3RoaXMuX19kYXRhX189VVp0P1VadChudWxsKTp7fSx0aGlzLnNpemU9MH1xWnQuZXhwb3J0cz1uV2V9KTt2YXIgWVp0PUgoKENYbixXWnQpPT57ZnVuY3Rpb24gaVdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fVdadC5leHBvcnRzPWlXZX0pO3ZhciBYWnQ9SCgoQVhuLGpadCk9Pnt2YXIgb1dlPUM0KCksYVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixzV2U9T2JqZWN0LnByb3RvdHlwZSxsV2U9c1dlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGNXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKG9XZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PWFXZT92b2lkIDA6cn1yZXR1cm4gbFdlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1qWnQuZXhwb3J0cz1jV2V9KTt2YXIgS1p0PUgoKFBYbiwkWnQpPT57dmFyIHVXZT1DNCgpLGhXZT1PYmplY3QucHJvdG90eXBlLGZXZT1oV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcFdlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHVXZT90W2VdIT09dm9pZCAwOmZXZS5jYWxsKHQsZSl9JFp0LmV4cG9ydHM9cFdlfSk7dmFyIEpadD1IKChJWG4sWlp0KT0+e3ZhciBkV2U9QzQoKSxtV2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIGdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09ZFdlJiZ0PT09dm9pZCAwP21XZTp0LHRoaXN9Wlp0LmV4cG9ydHM9Z1dlfSk7dmFyIHRKdD1IKChMWG4sUVp0KT0+e3ZhciBfV2U9R1p0KCkseVdlPVladCgpLHZXZT1YWnQoKSx4V2U9S1p0KCksYldlPUpadCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1fV2U7QlMucHJvdG90eXBlLmRlbGV0ZT15V2U7QlMucHJvdG90eXBlLmdldD12V2U7QlMucHJvdG90eXBlLmhhcz14V2U7QlMucHJvdG90eXBlLnNldD1iV2U7UVp0LmV4cG9ydHM9QlN9KTt2YXIgbkp0PUgoKGtYbixySnQpPT57dmFyIGVKdD10SnQoKSx3V2U9RTQoKSxTV2U9ekIoKTtmdW5jdGlvbiBNV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlSnQsbWFwOm5ldyhTV2V8fHdXZSksc3RyaW5nOm5ldyBlSnR9fXJKdC5leHBvcnRzPU1XZX0pO3ZhciBvSnQ9SCgoUlhuLGlKdCk9PntmdW5jdGlvbiBFV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9aUp0LmV4cG9ydHM9RVdlfSk7dmFyIEE0PUgoKE5YbixhSnQpPT57dmFyIFRXZT1vSnQoKTtmdW5jdGlvbiBDV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBUV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH1hSnQuZXhwb3J0cz1DV2V9KTt2YXIgbEp0PUgoKERYbixzSnQpPT57dmFyIEFXZT1BNCgpO2Z1bmN0aW9uIFBXZShlKXt2YXIgdD1BV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1zSnQuZXhwb3J0cz1QV2V9KTt2YXIgdUp0PUgoKE9YbixjSnQpPT57dmFyIElXZT1BNCgpO2Z1bmN0aW9uIExXZShlKXtyZXR1cm4gSVdlKHRoaXMsZSkuZ2V0KGUpfWNKdC5leHBvcnRzPUxXZX0pO3ZhciBmSnQ9SCgoelhuLGhKdCk9Pnt2YXIga1dlPUE0KCk7ZnVuY3Rpb24gUldlKGUpe3JldHVybiBrV2UodGhpcyxlKS5oYXMoZSl9aEp0LmV4cG9ydHM9UldlfSk7dmFyIGRKdD1IKChGWG4scEp0KT0+e3ZhciBOV2U9QTQoKTtmdW5jdGlvbiBEV2UoZSx0KXt2YXIgcj1OV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31wSnQuZXhwb3J0cz1EV2V9KTt2YXIgRkI9SCgoQlhuLG1KdCk9Pnt2YXIgT1dlPW5KdCgpLHpXZT1sSnQoKSxGV2U9dUp0KCksQldlPWZKdCgpLEhXZT1kSnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9T1dlO0hTLnByb3RvdHlwZS5kZWxldGU9eldlO0hTLnByb3RvdHlwZS5nZXQ9RldlO0hTLnByb3RvdHlwZS5oYXM9QldlO0hTLnByb3RvdHlwZS5zZXQ9SFdlO21KdC5leHBvcnRzPUhTfSk7dmFyIF9KdD1IKChIWG4sZ0p0KT0+e3ZhciBWV2U9RTQoKSxVV2U9ekIoKSxxV2U9RkIoKSxHV2U9MjAwO2Z1bmN0aW9uIFdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFZXZSl7dmFyIG49ci5fX2RhdGFfXztpZighVVdlfHxuLmxlbmd0aDxHV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IHFXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9Z0p0LmV4cG9ydHM9V1dlfSk7dmFyIFA0PUgoKFZYbix5SnQpPT57dmFyIFlXZT1FNCgpLGpXZT1sWnQoKSxYV2U9dVp0KCksJFdlPWZadCgpLEtXZT1kWnQoKSxaV2U9X0p0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgWVdlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPWpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPVhXZTtWUy5wcm90b3R5cGUuZ2V0PSRXZTtWUy5wcm90b3R5cGUuaGFzPUtXZTtWUy5wcm90b3R5cGUuc2V0PVpXZTt5SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChVWG4sdkp0KT0+e2Z1bmN0aW9uIEpXZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfXZKdC5leHBvcnRzPUpXZX0pO3ZhciBmc3Q9SCgocVhuLHhKdCk9Pnt2YXIgUVdlPWwwKCksdFllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPVFXZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTt4SnQuZXhwb3J0cz10WWV9KTt2YXIgSTQ9SCgoR1huLHdKdCk9Pnt2YXIgYkp0PWZzdCgpO2Z1bmN0aW9uIGVZZShlLHQscil7dD09Il9fcHJvdG9fXyImJmJKdD9iSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfXdKdC5leHBvcnRzPWVZZX0pO3ZhciBMND1IKChXWG4sU0p0KT0+e3ZhciByWWU9STQoKSxuWWU9WXYoKSxpWWU9T2JqZWN0LnByb3RvdHlwZSxvWWU9aVllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFZZShlLHQscil7dmFyIG49ZVt0XTsoIShvWWUuY2FsbChlLHQpJiZuWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJnJZZShlLHQscil9U0p0LmV4cG9ydHM9YVllfSk7dmFyIFVTPUgoKFlYbixNSnQpPT57dmFyIHNZZT1MNCgpLGxZZT1JNCgpO2Z1bmN0aW9uIGNZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/bFllKHIscyxsKTpzWWUocixzLGwpfXJldHVybiByfU1KdC5leHBvcnRzPWNZZX0pO3ZhciBUSnQ9SCgoalhuLEVKdCk9PntmdW5jdGlvbiB1WWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufUVKdC5leHBvcnRzPXVZZX0pO3ZhciBZdT1IKChYWG4sQ0p0KT0+e2Z1bmN0aW9uIGhZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUNKdC5leHBvcnRzPWhZZX0pO3ZhciBQSnQ9SCgoJFhuLEFKdCk9Pnt2YXIgZlllPXMwKCkscFllPVl1KCksZFllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gcFllKGUpJiZmWWUoZSk9PWRZZX1BSnQuZXhwb3J0cz1tWWV9KTt2YXIgcVM9SCgoS1huLGtKdCk9Pnt2YXIgSUp0PVBKdCgpLGdZZT1ZdSgpLExKdD1PYmplY3QucHJvdG90eXBlLF9ZZT1MSnQuaGFzT3duUHJvcGVydHkseVllPUxKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSx2WWU9SUp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/SUp0OmZ1bmN0aW9uKGUpe3JldHVybiBnWWUoZSkmJl9ZZS5jYWxsKGUsImNhbGxlZSIpJiYheVllLmNhbGwoZSwiY2FsbGVlIil9O2tKdC5leHBvcnRzPXZZZX0pO3ZhciBUaT1IKChaWG4sUkp0KT0+e3ZhciB4WWU9QXJyYXkuaXNBcnJheTtSSnQuZXhwb3J0cz14WWV9KTt2YXIgREp0PUgoKEpYbixOSnQpPT57ZnVuY3Rpb24gYlllKCl7cmV0dXJuITF9Tkp0LmV4cG9ydHM9YlllfSk7dmFyIFh2PUgoKGs0LEdTKT0+e3ZhciB3WWU9SGMoKSxTWWU9REp0KCksRkp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LE9KdD1GSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLE1ZZT1PSnQmJk9KdC5leHBvcnRzPT09Rkp0LHpKdD1NWWU/d1llLkJ1ZmZlcjp2b2lkIDAsRVllPXpKdD96SnQuaXNCdWZmZXI6dm9pZCAwLFRZZT1FWWV8fFNZZTtHUy5leHBvcnRzPVRZZX0pO3ZhciBSND1IKChRWG4sQkp0KT0+e3ZhciBDWWU9OTAwNzE5OTI1NDc0MDk5MSxBWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFBZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/Q1llOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZBWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fUJKdC5leHBvcnRzPVBZZX0pO3ZhciBIQj1IKCh0JG4sSEp0KT0+e3ZhciBJWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1JWWV9SEp0LmV4cG9ydHM9TFllfSk7dmFyIFVKdD1IKChlJG4sVkp0KT0+e3ZhciBrWWU9czAoKSxSWWU9SEIoKSxOWWU9WXUoKSxEWWU9IltvYmplY3QgQXJndW1lbnRzXSIsT1llPSJbb2JqZWN0IEFycmF5XSIselllPSJbb2JqZWN0IEJvb2xlYW5dIixGWWU9IltvYmplY3QgRGF0ZV0iLEJZZT0iW29iamVjdCBFcnJvcl0iLEhZZT0iW29iamVjdCBGdW5jdGlvbl0iLFZZZT0iW29iamVjdCBNYXBdIixVWWU9IltvYmplY3QgTnVtYmVyXSIscVllPSJbb2JqZWN0IE9iamVjdF0iLEdZZT0iW29iamVjdCBSZWdFeHBdIixXWWU9IltvYmplY3QgU2V0XSIsWVllPSJbb2JqZWN0IFN0cmluZ10iLGpZZT0iW29iamVjdCBXZWFrTWFwXSIsWFllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJFllPSJbb2JqZWN0IERhdGFWaWV3XSIsS1llPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpZZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKWWU9IltvYmplY3QgSW50OEFycmF5XSIsUVllPSJbb2JqZWN0IEludDE2QXJyYXldIix0amU9IltvYmplY3QgSW50MzJBcnJheV0iLGVqZT0iW29iamVjdCBVaW50OEFycmF5XSIscmplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsbmplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaWplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVm49e307Vm5bS1llXT1WbltaWWVdPVZuW0pZZV09Vm5bUVllXT1Wblt0amVdPVZuW2VqZV09Vm5bcmplXT1WbltuamVdPVZuW2lqZV09ITA7Vm5bRFllXT1WbltPWWVdPVZuW1hZZV09Vm5belllXT1WblskWWVdPVZuW0ZZZV09Vm5bQlllXT1WbltIWWVdPVZuW1ZZZV09Vm5bVVllXT1WbltxWWVdPVZuW0dZZV09Vm5bV1llXT1WbltZWWVdPVZuW2pZZV09ITE7ZnVuY3Rpb24gb2plKGUpe3JldHVybiBOWWUoZSkmJlJZZShlLmxlbmd0aCkmJiEhVm5ba1llKGUpXX1WSnQuZXhwb3J0cz1vamV9KTt2YXIgTjQ9SCgociRuLHFKdCk9PntmdW5jdGlvbiBhamUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1xSnQuZXhwb3J0cz1hamV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIHNqZT1jc3QoKSxHSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9R0p0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxsamU9TzQmJk80LmV4cG9ydHM9PT1HSnQscHN0PWxqZSYmc2plLnByb2Nlc3MsY2plPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPWNqZX0pO3ZhciBZUz1IKChuJG4sakp0KT0+e3ZhciB1amU9VUp0KCksaGplPU40KCksV0p0PVZCKCksWUp0PVdKdCYmV0p0LmlzVHlwZWRBcnJheSxmamU9WUp0P2hqZShZSnQpOnVqZTtqSnQuZXhwb3J0cz1mamV9KTt2YXIgZHN0PUgoKGkkbixYSnQpPT57dmFyIHBqZT1USnQoKSxkamU9cVMoKSxtamU9VGkoKSxnamU9WHYoKSxfamU9UjQoKSx5amU9WVMoKSx2amU9T2JqZWN0LnByb3RvdHlwZSx4amU9dmplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGJqZShlLHQpe3ZhciByPW1qZShlKSxuPSFyJiZkamUoZSksaT0hciYmIW4mJmdqZShlKSxvPSFyJiYhbiYmIWkmJnlqZShlKSxhPXJ8fG58fGl8fG8scz1hP3BqZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fHhqZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxfamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9WEp0LmV4cG9ydHM9YmplfSk7dmFyIHo0PUgoKG8kbiwkSnQpPT57dmFyIHdqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIFNqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHx3amU7cmV0dXJuIGU9PT1yfSRKdC5leHBvcnRzPVNqZX0pO3ZhciBtc3Q9SCgoYSRuLEtKdCk9PntmdW5jdGlvbiBNamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fUtKdC5leHBvcnRzPU1qZX0pO3ZhciBKSnQ9SCgocyRuLFpKdCk9Pnt2YXIgRWplPW1zdCgpLFRqZT1FamUoT2JqZWN0LmtleXMsT2JqZWN0KTtaSnQuZXhwb3J0cz1UamV9KTt2YXIgVUI9SCgobCRuLFFKdCk9Pnt2YXIgQ2plPXo0KCksQWplPUpKdCgpLFBqZT1PYmplY3QucHJvdG90eXBlLElqZT1QamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTGplKGUpe2lmKCFDamUoZSkpcmV0dXJuIEFqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKUlqZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1RSnQuZXhwb3J0cz1MamV9KTt2YXIgQmY9SCgoYyRuLHRRdCk9Pnt2YXIga2plPUZTKCksUmplPUhCKCk7ZnVuY3Rpb24gTmplKGUpe3JldHVybiBlIT1udWxsJiZSamUoZS5sZW5ndGgpJiYha2plKGUpfXRRdC5leHBvcnRzPU5qZX0pO3ZhciBBZD1IKCh1JG4sZVF0KT0+e3ZhciBEamU9ZHN0KCksT2plPVVCKCksemplPUJmKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiB6amUoZSk/RGplKGUpOk9qZShlKX1lUXQuZXhwb3J0cz1GamV9KTt2YXIgblF0PUgoKGgkbixyUXQpPT57dmFyIEJqZT1VUygpLEhqZT1BZCgpO2Z1bmN0aW9uIFZqZShlLHQpe3JldHVybiBlJiZCamUodCxIamUodCksZSl9clF0LmV4cG9ydHM9VmplfSk7dmFyIG9RdD1IKChmJG4saVF0KT0+e2Z1bmN0aW9uIFVqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWlRdC5leHBvcnRzPVVqZX0pO3ZhciBzUXQ9SCgocCRuLGFRdCk9Pnt2YXIgcWplPU1sKCksR2plPXo0KCksV2plPW9RdCgpLFlqZT1PYmplY3QucHJvdG90eXBlLGpqZT1ZamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWGplKGUpe2lmKCFxamUoZSkpcmV0dXJuIFdqZShlKTt2YXIgdD1HamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IWpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9YVF0LmV4cG9ydHM9WGplfSk7dmFyIGMwPUgoKGQkbixsUXQpPT57dmFyICRqZT1kc3QoKSxLamU9c1F0KCksWmplPUJmKCk7ZnVuY3Rpb24gSmplKGUpe3JldHVybiBaamUoZSk/JGplKGUsITApOktqZShlKX1sUXQuZXhwb3J0cz1KamV9KTt2YXIgdVF0PUgoKG0kbixjUXQpPT57dmFyIFFqZT1VUygpLHRYZT1jMCgpO2Z1bmN0aW9uIGVYZShlLHQpe3JldHVybiBlJiZRamUodCx0WGUodCksZSl9Y1F0LmV4cG9ydHM9ZVhlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgclhlPUhjKCksZFF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LGhRdD1kUXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLG5YZT1oUXQmJmhRdC5leHBvcnRzPT09ZFF0LGZRdD1uWGU/clhlLkJ1ZmZlcjp2b2lkIDAscFF0PWZRdD9mUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGlYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPXBRdD9wUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9aVhlfSk7dmFyIF9zdD1IKChnJG4sbVF0KT0+e2Z1bmN0aW9uIG9YZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fW1RdC5leHBvcnRzPW9YZX0pO3ZhciB5c3Q9SCgoXyRuLGdRdCk9PntmdW5jdGlvbiBhWGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfWdRdC5leHBvcnRzPWFYZX0pO3ZhciB2c3Q9SCgoeSRuLF9RdCk9PntmdW5jdGlvbiBzWGUoKXtyZXR1cm5bXX1fUXQuZXhwb3J0cz1zWGV9KTt2YXIgcUI9SCgodiRuLHZRdCk9Pnt2YXIgbFhlPXlzdCgpLGNYZT12c3QoKSx1WGU9T2JqZWN0LnByb3RvdHlwZSxoWGU9dVhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHlRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZYZT15UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGxYZSh5UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIGhYZS5jYWxsKGUsdCl9KSl9OmNYZTt2UXQuZXhwb3J0cz1mWGV9KTt2YXIgYlF0PUgoKHgkbix4UXQpPT57dmFyIHBYZT1VUygpLGRYZT1xQigpO2Z1bmN0aW9uIG1YZShlLHQpe3JldHVybiBwWGUoZSxkWGUoZSksdCl9eFF0LmV4cG9ydHM9bVhlfSk7dmFyIEdCPUgoKGIkbix3UXQpPT57ZnVuY3Rpb24gZ1hlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9d1F0LmV4cG9ydHM9Z1hlfSk7dmFyIEI0PUgoKHckbixTUXQpPT57dmFyIF9YZT1tc3QoKSx5WGU9X1hlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO1NRdC5leHBvcnRzPXlYZX0pO3ZhciB4c3Q9SCgoUyRuLE1RdCk9Pnt2YXIgdlhlPUdCKCkseFhlPUI0KCksYlhlPXFCKCksd1hlPXZzdCgpLFNYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLE1YZT1TWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KXZYZSh0LGJYZShlKSksZT14WGUoZSk7cmV0dXJuIHR9OndYZTtNUXQuZXhwb3J0cz1NWGV9KTt2YXIgVFF0PUgoKE0kbixFUXQpPT57dmFyIEVYZT1VUygpLFRYZT14c3QoKTtmdW5jdGlvbiBDWGUoZSx0KXtyZXR1cm4gRVhlKGUsVFhlKGUpLHQpfUVRdC5leHBvcnRzPUNYZX0pO3ZhciBic3Q9SCgoRSRuLENRdCk9Pnt2YXIgQVhlPUdCKCksUFhlPVRpKCk7ZnVuY3Rpb24gSVhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBQWGUoZSk/bjpBWGUobixyKGUpKX1DUXQuZXhwb3J0cz1JWGV9KTt2YXIgd3N0PUgoKFQkbixBUXQpPT57dmFyIExYZT1ic3QoKSxrWGU9cUIoKSxSWGU9QWQoKTtmdW5jdGlvbiBOWGUoZSl7cmV0dXJuIExYZShlLFJYZSxrWGUpfUFRdC5leHBvcnRzPU5YZX0pO3ZhciBJUXQ9SCgoQyRuLFBRdCk9Pnt2YXIgRFhlPWJzdCgpLE9YZT14c3QoKSx6WGU9YzAoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfVBRdC5leHBvcnRzPUZYZX0pO3ZhciBrUXQ9SCgoQSRuLExRdCk9Pnt2YXIgQlhlPWwwKCksSFhlPUhjKCksVlhlPUJYZShIWGUsIkRhdGFWaWV3Iik7TFF0LmV4cG9ydHM9VlhlfSk7dmFyIE5RdD1IKChQJG4sUlF0KT0+e3ZhciBVWGU9bDAoKSxxWGU9SGMoKSxHWGU9VVhlKHFYZSwiUHJvbWlzZSIpO1JRdC5leHBvcnRzPUdYZX0pO3ZhciBTc3Q9SCgoSSRuLERRdCk9Pnt2YXIgV1hlPWwwKCksWVhlPUhjKCksalhlPVdYZShZWGUsIlNldCIpO0RRdC5leHBvcnRzPWpYZX0pO3ZhciB6UXQ9SCgoTCRuLE9RdCk9Pnt2YXIgWFhlPWwwKCksJFhlPUhjKCksS1hlPVhYZSgkWGUsIldlYWtNYXAiKTtPUXQuZXhwb3J0cz1LWGV9KTt2YXIgS3Y9SCgoayRuLEdRdCk9Pnt2YXIgTXN0PWtRdCgpLEVzdD16QigpLFRzdD1OUXQoKSxDc3Q9U3N0KCksQXN0PXpRdCgpLHFRdD1zMCgpLFhTPWhzdCgpLEZRdD0iW29iamVjdCBNYXBdIixaWGU9IltvYmplY3QgT2JqZWN0XSIsQlF0PSJbb2JqZWN0IFByb21pc2VdIixIUXQ9IltvYmplY3QgU2V0XSIsVlF0PSJbb2JqZWN0IFdlYWtNYXBdIixVUXQ9IltvYmplY3QgRGF0YVZpZXddIixKWGU9WFMoTXN0KSxRWGU9WFMoRXN0KSx0JGU9WFMoVHN0KSxlJGU9WFMoQ3N0KSxyJGU9WFMoQXN0KSwkdj1xUXQ7KE1zdCYmJHYobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9VVF0fHxFc3QmJiR2KG5ldyBFc3QpIT1GUXR8fFRzdCYmJHYoVHN0LnJlc29sdmUoKSkhPUJRdHx8Q3N0JiYkdihuZXcgQ3N0KSE9SFF0fHxBc3QmJiR2KG5ldyBBc3QpIT1WUXQpJiYoJHY9ZnVuY3Rpb24oZSl7dmFyIHQ9cVF0KGUpLHI9dD09WlhlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEpYZTpyZXR1cm4gVVF0O2Nhc2UgUVhlOnJldHVybiBGUXQ7Y2FzZSB0JGU6cmV0dXJuIEJRdDtjYXNlIGUkZTpyZXR1cm4gSFF0O2Nhc2UgciRlOnJldHVybiBWUXR9cmV0dXJuIHR9KTtHUXQuZXhwb3J0cz0kdn0pO3ZhciBZUXQ9SCgoUiRuLFdRdCk9Pnt2YXIgbiRlPU9iamVjdC5wcm90b3R5cGUsaSRlPW4kZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZpJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn1XUXQuZXhwb3J0cz1vJGV9KTt2YXIgUHN0PUgoKE4kbixqUXQpPT57dmFyIGEkZT1IYygpLHMkZT1hJGUuVWludDhBcnJheTtqUXQuZXhwb3J0cz1zJGV9KTt2YXIgV0I9SCgoRCRuLCRRdCk9Pnt2YXIgWFF0PVBzdCgpO2Z1bmN0aW9uIGwkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWFF0KHQpLnNldChuZXcgWFF0KGUpKSx0fSRRdC5leHBvcnRzPWwkZX0pO3ZhciBaUXQ9SCgoTyRuLEtRdCk9Pnt2YXIgYyRlPVdCKCk7ZnVuY3Rpb24gdSRlKGUsdCl7dmFyIHI9dD9jJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfUtRdC5leHBvcnRzPXUkZX0pO3ZhciBRUXQ9SCgoeiRuLEpRdCk9Pnt2YXIgaCRlPS9cdyokLztmdW5jdGlvbiBmJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsaCRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fUpRdC5leHBvcnRzPWYkZX0pO3ZhciBpdGU9SCgoRiRuLG50ZSk9Pnt2YXIgdHRlPWp2KCksZXRlPXR0ZT90dGUucHJvdG90eXBlOnZvaWQgMCxydGU9ZXRlP2V0ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBwJGUoZSl7cmV0dXJuIHJ0ZT9PYmplY3QocnRlLmNhbGwoZSkpOnt9fW50ZS5leHBvcnRzPXAkZX0pO3ZhciBJc3Q9SCgoQiRuLG90ZSk9Pnt2YXIgZCRlPVdCKCk7ZnVuY3Rpb24gbSRlKGUsdCl7dmFyIHI9dD9kJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9b3RlLmV4cG9ydHM9bSRlfSk7dmFyIHN0ZT1IKChIJG4sYXRlKT0+e3ZhciBnJGU9V0IoKSxfJGU9WlF0KCkseSRlPVFRdCgpLHYkZT1pdGUoKSx4JGU9SXN0KCksYiRlPSJbb2JqZWN0IEJvb2xlYW5dIix3JGU9IltvYmplY3QgRGF0ZV0iLFMkZT0iW29iamVjdCBNYXBdIixNJGU9IltvYmplY3QgTnVtYmVyXSIsRSRlPSJbb2JqZWN0IFJlZ0V4cF0iLFQkZT0iW29iamVjdCBTZXRdIixDJGU9IltvYmplY3QgU3RyaW5nXSIsQSRlPSJbb2JqZWN0IFN5bWJvbF0iLFAkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEkkZT0iW29iamVjdCBEYXRhVmlld10iLEwkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixrJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsUiRlPSJbb2JqZWN0IEludDhBcnJheV0iLE4kZT0iW29iamVjdCBJbnQxNkFycmF5XSIsRCRlPSJbb2JqZWN0IEludDMyQXJyYXldIixPJGU9IltvYmplY3QgVWludDhBcnJheV0iLHokZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLEYkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLEIkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEgkZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBQJGU6cmV0dXJuIGckZShlKTtjYXNlIGIkZTpjYXNlIHckZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgSSRlOnJldHVybiBfJGUoZSxyKTtjYXNlIEwkZTpjYXNlIGskZTpjYXNlIFIkZTpjYXNlIE4kZTpjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpyZXR1cm4geCRlKGUscik7Y2FzZSBTJGU6cmV0dXJuIG5ldyBuO2Nhc2UgTSRlOmNhc2UgQyRlOnJldHVybiBuZXcgbihlKTtjYXNlIEUkZTpyZXR1cm4geSRlKGUpO2Nhc2UgVCRlOnJldHVybiBuZXcgbjtjYXNlIEEkZTpyZXR1cm4gdiRlKGUpfX1hdGUuZXhwb3J0cz1IJGV9KTt2YXIgTHN0PUgoKFYkbixjdGUpPT57dmFyIFYkZT1NbCgpLGx0ZT1PYmplY3QuY3JlYXRlLFUkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFWJGUodCkpcmV0dXJue307aWYobHRlKXJldHVybiBsdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO2N0ZS5leHBvcnRzPVUkZX0pO3ZhciBrc3Q9SCgoVSRuLHV0ZSk9Pnt2YXIgcSRlPUxzdCgpLEckZT1CNCgpLFckZT16NCgpO2Z1bmN0aW9uIFkkZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFXJGUoZSk/cSRlKEckZShlKSk6e319dXRlLmV4cG9ydHM9WSRlfSk7dmFyIGZ0ZT1IKChxJG4saHRlKT0+e3ZhciBqJGU9S3YoKSxYJGU9WXUoKSwkJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gSyRlKGUpe3JldHVybiBYJGUoZSkmJmokZShlKT09JCRlfWh0ZS5leHBvcnRzPUskZX0pO3ZhciBndGU9SCgoRyRuLG10ZSk9Pnt2YXIgWiRlPWZ0ZSgpLEokZT1ONCgpLHB0ZT1WQigpLGR0ZT1wdGUmJnB0ZS5pc01hcCxRJGU9ZHRlP0okZShkdGUpOlokZTttdGUuZXhwb3J0cz1RJGV9KTt2YXIgeXRlPUgoKFckbixfdGUpPT57dmFyIHRLZT1LdigpLGVLZT1ZdSgpLHJLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBuS2UoZSl7cmV0dXJuIGVLZShlKSYmdEtlKGUpPT1yS2V9X3RlLmV4cG9ydHM9bktlfSk7dmFyIHd0ZT1IKChZJG4sYnRlKT0+e3ZhciBpS2U9eXRlKCksb0tlPU40KCksdnRlPVZCKCkseHRlPXZ0ZSYmdnRlLmlzU2V0LGFLZT14dGU/b0tlKHh0ZSk6aUtlO2J0ZS5leHBvcnRzPWFLZX0pO3ZhciBSc3Q9SCgoaiRuLFR0ZSk9Pnt2YXIgc0tlPVA0KCksbEtlPUJCKCksY0tlPUw0KCksdUtlPW5RdCgpLGhLZT11UXQoKSxmS2U9Z3N0KCkscEtlPV9zdCgpLGRLZT1iUXQoKSxtS2U9VFF0KCksZ0tlPXdzdCgpLF9LZT1JUXQoKSx5S2U9S3YoKSx2S2U9WVF0KCkseEtlPXN0ZSgpLGJLZT1rc3QoKSx3S2U9VGkoKSxTS2U9WHYoKSxNS2U9Z3RlKCksRUtlPU1sKCksVEtlPXd0ZSgpLENLZT1BZCgpLEFLZT1jMCgpLFBLZT0xLElLZT0yLExLZT00LFN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixrS2U9IltvYmplY3QgQXJyYXldIixSS2U9IltvYmplY3QgQm9vbGVhbl0iLE5LZT0iW29iamVjdCBEYXRlXSIsREtlPSJbb2JqZWN0IEVycm9yXSIsTXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsT0tlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsektlPSJbb2JqZWN0IE1hcF0iLEZLZT0iW29iamVjdCBOdW1iZXJdIixFdGU9IltvYmplY3QgT2JqZWN0XSIsQktlPSJbb2JqZWN0IFJlZ0V4cF0iLEhLZT0iW29iamVjdCBTZXRdIixWS2U9IltvYmplY3QgU3RyaW5nXSIsVUtlPSJbb2JqZWN0IFN5bWJvbF0iLHFLZT0iW29iamVjdCBXZWFrTWFwXSIsR0tlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsV0tlPSJbb2JqZWN0IERhdGFWaWV3XSIsWUtlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixYS2U9IltvYmplY3QgSW50OEFycmF5XSIsJEtlPSJbb2JqZWN0IEludDE2QXJyYXldIixLS2U9IltvYmplY3QgSW50MzJBcnJheV0iLFpLZT0iW29iamVjdCBVaW50OEFycmF5XSIsSktlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsUUtlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdFplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bU3RlXT1DbltrS2VdPUNuW0dLZV09Q25bV0tlXT1DbltSS2VdPUNuW05LZV09Q25bWUtlXT1DbltqS2VdPUNuW1hLZV09Q25bJEtlXT1DbltLS2VdPUNuW3pLZV09Q25bRktlXT1DbltFdGVdPUNuW0JLZV09Q25bSEtlXT1DbltWS2VdPUNuW1VLZV09Q25bWktlXT1DbltKS2VdPUNuW1FLZV09Q25bdFplXT0hMDtDbltES2VdPUNuW010ZV09Q25bcUtlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlBLZSxsPXQmSUtlLGM9dCZMS2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIUVLZShlKSlyZXR1cm4gZTt2YXIgdT13S2UoZSk7aWYodSl7aWYoYT12S2UoZSksIXMpcmV0dXJuIHBLZShlLGEpfWVsc2V7dmFyIGg9eUtlKGUpLGY9aD09TXRlfHxoPT1PS2U7aWYoU0tlKGUpKXJldHVybiBmS2UoZSxzKTtpZihoPT1FdGV8fGg9PVN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpiS2UoZSksIXMpcmV0dXJuIGw/bUtlKGUsaEtlKGEsZSkpOmRLZShlLHVLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9eEtlKGUsaCxzKX19b3x8KG89bmV3IHNLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLFRLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOk1LZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP19LZTpnS2U6bD9BS2U6Q0tlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gbEtlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSksY0tlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1UdGUuZXhwb3J0cz1ZQn0pO3ZhciBBdGU9SCgoWCRuLEN0ZSk9Pnt2YXIgZVplPVJzdCgpLHJaZT00O2Z1bmN0aW9uIG5aZShlKXtyZXR1cm4gZVplKGUsclplKX1DdGUuZXhwb3J0cz1uWmV9KTt2YXIgakI9SCgoJCRuLFB0ZSk9PntmdW5jdGlvbiBpWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVB0ZS5leHBvcnRzPWlaZX0pO3ZhciBMdGU9SCgoSyRuLEl0ZSk9PntmdW5jdGlvbiBvWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1JdGUuZXhwb3J0cz1vWmV9KTt2YXIgWEI9SCgoWiRuLGt0ZSk9Pnt2YXIgYVplPUx0ZSgpLHNaZT1hWmUoKTtrdGUuZXhwb3J0cz1zWmV9KTt2YXIgJEI9SCgoSiRuLFJ0ZSk9Pnt2YXIgbFplPVhCKCksY1plPUFkKCk7ZnVuY3Rpb24gdVplKGUsdCl7cmV0dXJuIGUmJmxaZShlLHQsY1plKX1SdGUuZXhwb3J0cz11WmV9KTt2YXIgRHRlPUgoKFEkbixOdGUpPT57dmFyIGhaZT1CZigpO2Z1bmN0aW9uIGZaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIWhaZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fU50ZS5leHBvcnRzPWZaZX0pO3ZhciBIND1IKCh0S24sT3RlKT0+e3ZhciBwWmU9JEIoKSxkWmU9RHRlKCksbVplPWRaZShwWmUpO090ZS5leHBvcnRzPW1aZX0pO3ZhciB1MD1IKChlS24senRlKT0+e2Z1bmN0aW9uIGdaZShlKXtyZXR1cm4gZX16dGUuZXhwb3J0cz1nWmV9KTt2YXIgTnN0PUgoKHJLbixGdGUpPT57dmFyIF9aZT11MCgpO2Z1bmN0aW9uIHlaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpfWmV9RnRlLmV4cG9ydHM9eVplfSk7dmFyIERzdD1IKChuS24sQnRlKT0+e3ZhciB2WmU9QkIoKSx4WmU9SDQoKSxiWmU9TnN0KCksd1plPVRpKCk7ZnVuY3Rpb24gU1plKGUsdCl7dmFyIHI9d1plKGUpP3ZaZTp4WmU7cmV0dXJuIHIoZSxiWmUodCkpfUJ0ZS5leHBvcnRzPVNaZX0pO3ZhciBPc3Q9SCgoaUtuLEh0ZSk9PntIdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBVdGU9SCgob0tuLFZ0ZSk9Pnt2YXIgTVplPUg0KCk7ZnVuY3Rpb24gRVplKGUsdCl7dmFyIHI9W107cmV0dXJuIE1aZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1WdGUuZXhwb3J0cz1FWmV9KTt2YXIgR3RlPUgoKGFLbixxdGUpPT57dmFyIFRaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gQ1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLFRaZSksdGhpc31xdGUuZXhwb3J0cz1DWmV9KTt2YXIgWXRlPUgoKHNLbixXdGUpPT57ZnVuY3Rpb24gQVplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1XdGUuZXhwb3J0cz1BWmV9KTt2YXIgenN0PUgoKGxLbixqdGUpPT57dmFyIFBaZT1GQigpLElaZT1HdGUoKSxMWmU9WXRlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFBaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1JWmU7S0IucHJvdG90eXBlLmhhcz1MWmU7anRlLmV4cG9ydHM9S0J9KTt2YXIgJHRlPUgoKGNLbixYdGUpPT57ZnVuY3Rpb24ga1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1YdGUuZXhwb3J0cz1rWmV9KTt2YXIgRnN0PUgoKHVLbixLdGUpPT57ZnVuY3Rpb24gUlplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfUt0ZS5leHBvcnRzPVJaZX0pO3ZhciBCc3Q9SCgoaEtuLFp0ZSk9Pnt2YXIgTlplPXpzdCgpLERaZT0kdGUoKSxPWmU9RnN0KCkselplPTEsRlplPTI7ZnVuY3Rpb24gQlplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnpaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZGWmU/bmV3IE5aZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIURaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIU9aZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfVp0ZS5leHBvcnRzPUJaZX0pO3ZhciBRdGU9SCgoZktuLEp0ZSk9PntmdW5jdGlvbiBIWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfUp0ZS5leHBvcnRzPUhaZX0pO3ZhciBaQj1IKChwS24sdGVlKT0+e2Z1bmN0aW9uIFZaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9dGVlLmV4cG9ydHM9VlplfSk7dmFyIG9lZT1IKChkS24saWVlKT0+e3ZhciBlZWU9anYoKSxyZWU9UHN0KCksVVplPVl2KCkscVplPUJzdCgpLEdaZT1RdGUoKSxXWmU9WkIoKSxZWmU9MSxqWmU9MixYWmU9IltvYmplY3QgQm9vbGVhbl0iLCRaZT0iW29iamVjdCBEYXRlXSIsS1plPSJbb2JqZWN0IEVycm9yXSIsWlplPSJbb2JqZWN0IE1hcF0iLEpaZT0iW29iamVjdCBOdW1iZXJdIixRWmU9IltvYmplY3QgUmVnRXhwXSIsdEplPSJbb2JqZWN0IFNldF0iLGVKZT0iW29iamVjdCBTdHJpbmddIixySmU9IltvYmplY3QgU3ltYm9sXSIsbkplPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsaUplPSJbb2JqZWN0IERhdGFWaWV3XSIsbmVlPWVlZT9lZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9bmVlP25lZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBvSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgaUplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBuSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IHJlZShlKSxuZXcgcmVlKHQpKSk7Y2FzZSBYWmU6Y2FzZSAkWmU6Y2FzZSBKWmU6cmV0dXJuIFVaZSgrZSwrdCk7Y2FzZSBLWmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIFFaZTpjYXNlIGVKZTpyZXR1cm4gZT09dCsiIjtjYXNlIFpaZTp2YXIgcz1HWmU7Y2FzZSB0SmU6dmFyIGw9biZZWmU7aWYoc3x8KHM9V1plKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1qWmUsYS5zZXQoZSx0KTt2YXIgdT1xWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgckplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWllZS5leHBvcnRzPW9KZX0pO3ZhciBsZWU9SCgobUtuLHNlZSk9Pnt2YXIgYWVlPXdzdCgpLGFKZT0xLHNKZT1PYmplY3QucHJvdG90eXBlLGxKZT1zSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gY0plKGUsdCxyLG4saSxvKXt2YXIgYT1yJmFKZSxzPWFlZShlKSxsPXMubGVuZ3RoLGM9YWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmxKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9c2VlLmV4cG9ydHM9Y0plfSk7dmFyIGdlZT1IKChnS24sbWVlKT0+e3ZhciBWc3Q9UDQoKSx1SmU9QnN0KCksaEplPW9lZSgpLGZKZT1sZWUoKSxjZWU9S3YoKSx1ZWU9VGkoKSxoZWU9WHYoKSxwSmU9WVMoKSxkSmU9MSxmZWU9IltvYmplY3QgQXJndW1lbnRzXSIscGVlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsbUplPU9iamVjdC5wcm90b3R5cGUsZGVlPW1KZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBnSmUoZSx0LHIsbixpLG8pe3ZhciBhPXVlZShlKSxzPXVlZSh0KSxsPWE/cGVlOmNlZShlKSxjPXM/cGVlOmNlZSh0KTtsPWw9PWZlZT9KQjpsLGM9Yz09ZmVlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmaGVlKGUpKXtpZighaGVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8cEplKGUpP3VKZShlLHQscixuLGksbyk6aEplKGUsdCxsLHIsbixpLG8pO2lmKCEociZkSmUpKXt2YXIgcD11JiZkZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmZGVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZkplKGUsdCxyLG4saSxvKSk6ITF9bWVlLmV4cG9ydHM9Z0plfSk7dmFyIFVzdD1IKChfS24sdmVlKT0+e3ZhciBfSmU9Z2VlKCksX2VlPVl1KCk7ZnVuY3Rpb24geWVlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFfZWUoZSkmJiFfZWUodCk/ZSE9PWUmJnQhPT10Ol9KZShlLHQscixuLHllZSxpKX12ZWUuZXhwb3J0cz15ZWV9KTt2YXIgYmVlPUgoKHlLbix4ZWUpPT57dmFyIHlKZT1QNCgpLHZKZT1Vc3QoKSx4SmU9MSxiSmU9MjtmdW5jdGlvbiB3SmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB5SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/dkplKHUsYyx4SmV8YkplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfXhlZS5leHBvcnRzPXdKZX0pO3ZhciBxc3Q9SCgodktuLHdlZSk9Pnt2YXIgU0plPU1sKCk7ZnVuY3Rpb24gTUplKGUpe3JldHVybiBlPT09ZSYmIVNKZShlKX13ZWUuZXhwb3J0cz1NSmV9KTt2YXIgTWVlPUgoKHhLbixTZWUpPT57dmFyIEVKZT1xc3QoKSxUSmU9QWQoKTtmdW5jdGlvbiBDSmUoZSl7Zm9yKHZhciB0PVRKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxFSmUoaSldfXJldHVybiB0fVNlZS5leHBvcnRzPUNKZX0pO3ZhciBHc3Q9SCgoYktuLEVlZSk9PntmdW5jdGlvbiBBSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fUVlZS5leHBvcnRzPUFKZX0pO3ZhciBDZWU9SCgod0tuLFRlZSk9Pnt2YXIgUEplPWJlZSgpLElKZT1NZWUoKSxMSmU9R3N0KCk7ZnVuY3Rpb24ga0plKGUpe3ZhciB0PUlKZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/TEplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxQSmUocixlLHQpfX1UZWUuZXhwb3J0cz1rSmV9KTt2YXIgWnY9SCgoU0tuLEFlZSk9Pnt2YXIgUkplPXMwKCksTkplPVl1KCksREplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIE9KZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxOSmUoZSkmJlJKZShlKT09REplfUFlZS5leHBvcnRzPU9KZX0pO3ZhciBRQj1IKChNS24sUGVlKT0+e3ZhciB6SmU9VGkoKSxGSmU9WnYoKSxCSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sSEplPS9eXHcqJC87ZnVuY3Rpb24gVkplKGUsdCl7aWYoekplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8RkplKGUpPyEwOkhKZS50ZXN0KGUpfHwhQkplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVBlZS5leHBvcnRzPVZKZX0pO3ZhciBrZWU9SCgoRUtuLExlZSk9Pnt2YXIgSWVlPUZCKCksVUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihVSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fEllZSkscn1Xc3QuQ2FjaGU9SWVlO0xlZS5leHBvcnRzPVdzdH0pO3ZhciBOZWU9SCgoVEtuLFJlZSk9Pnt2YXIgcUplPWtlZSgpLEdKZT01MDA7ZnVuY3Rpb24gV0plKGUpe3ZhciB0PXFKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1HSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoQ0tuLERlZSk9Pnt2YXIgWUplPU5lZSgpLGpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxYSmU9L1xcKFxcKT8vZywkSmU9WUplKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoakplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShYSmUsIiQxIik6bnx8cil9KSx0fSk7RGVlLmV4cG9ydHM9JEplfSk7dmFyIFY0PUgoKEFLbix6ZWUpPT57ZnVuY3Rpb24gS0plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9emVlLmV4cG9ydHM9S0plfSk7dmFyIHFlZT1IKChQS24sVWVlKT0+e3ZhciBGZWU9anYoKSxaSmU9VjQoKSxKSmU9VGkoKSxRSmU9WnYoKSx0UWU9MS8wLEJlZT1GZWU/RmVlLnByb3RvdHlwZTp2b2lkIDAsSGVlPUJlZT9CZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFZlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoSkplKGUpKXJldHVybiBaSmUoZSxWZWUpKyIiO2lmKFFKZShlKSlyZXR1cm4gSGVlP0hlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tdFFlPyItMCI6dH1VZWUuZXhwb3J0cz1WZWV9KTt2YXIgWXN0PUgoKElLbixHZWUpPT57dmFyIGVRZT1xZWUoKTtmdW5jdGlvbiByUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6ZVFlKGUpfUdlZS5leHBvcnRzPXJRZX0pO3ZhciBVND1IKChMS24sV2VlKT0+e3ZhciBuUWU9VGkoKSxpUWU9UUIoKSxvUWU9T2VlKCksYVFlPVlzdCgpO2Z1bmN0aW9uIHNRZShlLHQpe3JldHVybiBuUWUoZSk/ZTppUWUoZSx0KT9bZV06b1FlKGFRZShlKSl9V2VlLmV4cG9ydHM9c1FlfSk7dmFyICRTPUgoKGtLbixZZWUpPT57dmFyIGxRZT1adigpLGNRZT0xLzA7ZnVuY3Rpb24gdVFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8bFFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tY1FlPyItMCI6dH1ZZWUuZXhwb3J0cz11UWV9KTt2YXIgcTQ9SCgoUktuLGplZSk9Pnt2YXIgaFFlPVU0KCksZlFlPSRTKCk7ZnVuY3Rpb24gcFFlKGUsdCl7dD1oUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2ZRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1qZWUuZXhwb3J0cz1wUWV9KTt2YXIgJGVlPUgoKE5LbixYZWUpPT57dmFyIGRRZT1xNCgpO2Z1bmN0aW9uIG1RZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6ZFFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufVhlZS5leHBvcnRzPW1RZX0pO3ZhciBaZWU9SCgoREtuLEtlZSk9PntmdW5jdGlvbiBnUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9S2VlLmV4cG9ydHM9Z1FlfSk7dmFyIGpzdD1IKChPS24sSmVlKT0+e3ZhciBfUWU9VTQoKSx5UWU9cVMoKSx2UWU9VGkoKSx4UWU9UjQoKSxiUWU9SEIoKSx3UWU9JFMoKTtmdW5jdGlvbiBTUWUoZSx0LHIpe3Q9X1FlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPXdRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJmJRZShpKSYmeFFlKGEsaSkmJih2UWUoZSl8fHlRZShlKSkpfUplZS5leHBvcnRzPVNRZX0pO3ZhciBYc3Q9SCgoektuLFFlZSk9Pnt2YXIgTVFlPVplZSgpLEVRZT1qc3QoKTtmdW5jdGlvbiBUUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmRVFlKGUsdCxNUWUpfVFlZS5leHBvcnRzPVRRZX0pO3ZhciBlcmU9SCgoRktuLHRyZSk9Pnt2YXIgQ1FlPVVzdCgpLEFRZT0kZWUoKSxQUWU9WHN0KCksSVFlPVFCKCksTFFlPXFzdCgpLGtRZT1Hc3QoKSxSUWU9JFMoKSxOUWU9MSxEUWU9MjtmdW5jdGlvbiBPUWUoZSx0KXtyZXR1cm4gSVFlKGUpJiZMUWUodCk/a1FlKFJRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1BUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UFFlKHIsZSk6Q1FlKHQsbixOUWV8RFFlKX19dHJlLmV4cG9ydHM9T1FlfSk7dmFyICRzdD1IKChCS24scnJlKT0+e2Z1bmN0aW9uIHpRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fXJyZS5leHBvcnRzPXpRZX0pO3ZhciBpcmU9SCgoSEtuLG5yZSk9Pnt2YXIgRlFlPXE0KCk7ZnVuY3Rpb24gQlFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRlFlKHQsZSl9fW5yZS5leHBvcnRzPUJRZX0pO3ZhciBhcmU9SCgoVktuLG9yZSk9Pnt2YXIgSFFlPSRzdCgpLFZRZT1pcmUoKSxVUWU9UUIoKSxxUWU9JFMoKTtmdW5jdGlvbiBHUWUoZSl7cmV0dXJuIFVRZShlKT9IUWUocVFlKGUpKTpWUWUoZSl9b3JlLmV4cG9ydHM9R1FlfSk7dmFyIEhmPUgoKFVLbixzcmUpPT57dmFyIFdRZT1DZWUoKSxZUWU9ZXJlKCksalFlPXUwKCksWFFlPVRpKCksJFFlPWFyZSgpO2Z1bmN0aW9uIEtRZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP2pRZTp0eXBlb2YgZT09Im9iamVjdCI/WFFlKGUpP1lRZShlWzBdLGVbMV0pOldRZShlKTokUWUoZSl9c3JlLmV4cG9ydHM9S1FlfSk7dmFyIEtzdD1IKChxS24sbHJlKT0+e3ZhciBaUWU9eXN0KCksSlFlPVV0ZSgpLFFRZT1IZigpLHR0cj1UaSgpO2Z1bmN0aW9uIGV0cihlLHQpe3ZhciByPXR0cihlKT9aUWU6SlFlO3JldHVybiByKGUsUVFlKHQsMykpfWxyZS5leHBvcnRzPWV0cn0pO3ZhciB1cmU9SCgoR0tuLGNyZSk9Pnt2YXIgcnRyPU9iamVjdC5wcm90b3R5cGUsbnRyPXJ0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBpdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmbnRyLmNhbGwoZSx0KX1jcmUuZXhwb3J0cz1pdHJ9KTt2YXIgWnN0PUgoKFdLbixocmUpPT57dmFyIG90cj11cmUoKSxhdHI9anN0KCk7ZnVuY3Rpb24gc3RyKGUsdCl7cmV0dXJuIGUhPW51bGwmJmF0cihlLHQsb3RyKX1ocmUuZXhwb3J0cz1zdHJ9KTt2YXIgcHJlPUgoKFlLbixmcmUpPT57dmFyIGx0cj1VQigpLGN0cj1LdigpLHV0cj1xUygpLGh0cj1UaSgpLGZ0cj1CZigpLHB0cj1YdigpLGR0cj16NCgpLG10cj1ZUygpLGd0cj0iW29iamVjdCBNYXBdIixfdHI9IltvYmplY3QgU2V0XSIseXRyPU9iamVjdC5wcm90b3R5cGUsdnRyPXl0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4dHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihmdHIoZSkmJihodHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxwdHIoZSl8fG10cihlKXx8dXRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9Y3RyKGUpO2lmKHQ9PWd0cnx8dD09X3RyKXJldHVybiFlLnNpemU7aWYoZHRyKGUpKXJldHVybiFsdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKHZ0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9ZnJlLmV4cG9ydHM9eHRyfSk7dmFyIEpzdD1IKChqS24sZHJlKT0+e2Z1bmN0aW9uIGJ0cihlKXtyZXR1cm4gZT09PXZvaWQgMH1kcmUuZXhwb3J0cz1idHJ9KTt2YXIgUXN0PUgoKFhLbixtcmUpPT57dmFyIHd0cj1INCgpLFN0cj1CZigpO2Z1bmN0aW9uIE10cihlLHQpe3ZhciByPS0xLG49U3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gd3RyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59bXJlLmV4cG9ydHM9TXRyfSk7dmFyIHRsdD1IKCgkS24sZ3JlKT0+e3ZhciBFdHI9VjQoKSxUdHI9SGYoKSxDdHI9UXN0KCksQXRyPVRpKCk7ZnVuY3Rpb24gUHRyKGUsdCl7dmFyIHI9QXRyKGUpP0V0cjpDdHI7cmV0dXJuIHIoZSxUdHIodCwzKSl9Z3JlLmV4cG9ydHM9UHRyfSk7dmFyIHlyZT1IKChLS24sX3JlKT0+e2Z1bmN0aW9uIEl0cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfV9yZS5leHBvcnRzPUl0cn0pO3ZhciB4cmU9SCgoWktuLHZyZSk9PntmdW5jdGlvbiBMdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9dnJlLmV4cG9ydHM9THRyfSk7dmFyIGVsdD1IKChKS24sYnJlKT0+e3ZhciBrdHI9eXJlKCksUnRyPUg0KCksTnRyPUhmKCksRHRyPXhyZSgpLE90cj1UaSgpO2Z1bmN0aW9uIHp0cihlLHQscil7dmFyIG49T3RyKGUpP2t0cjpEdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxOdHIodCw0KSxyLGksUnRyKX1icmUuZXhwb3J0cz16dHJ9KTt2YXIgU3JlPUgoKFFLbix3cmUpPT57dmFyIEZ0cj1zMCgpLEJ0cj1UaSgpLEh0cj1ZdSgpLFZ0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBVdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IUJ0cihlKSYmSHRyKGUpJiZGdHIoZSk9PVZ0cn13cmUuZXhwb3J0cz1VdHJ9KTt2YXIgRXJlPUgoKHRabixNcmUpPT57dmFyIHF0cj0kc3QoKSxHdHI9cXRyKCJsZW5ndGgiKTtNcmUuZXhwb3J0cz1HdHJ9KTt2YXIgQ3JlPUgoKGVabixUcmUpPT57dmFyIFd0cj0iXFx1ZDgwMC1cXHVkZmZmIixZdHI9IlxcdTAzMDAtXFx1MDM2ZiIsanRyPSJcXHVmZTIwLVxcdWZlMmYiLFh0cj0iXFx1MjBkMC1cXHUyMGZmIiwkdHI9WXRyK2p0citYdHIsS3RyPSJcXHVmZTBlXFx1ZmUwZiIsWnRyPSJcXHUyMDBkIixKdHI9UmVnRXhwKCJbIitadHIrV3RyKyR0citLdHIrIl0iKTtmdW5jdGlvbiBRdHIoZSl7cmV0dXJuIEp0ci50ZXN0KGUpfVRyZS5leHBvcnRzPVF0cn0pO3ZhciBPcmU9SCgoclpuLERyZSk9Pnt2YXIgUHJlPSJcXHVkODAwLVxcdWRmZmYiLHRlcj0iXFx1MDMwMC1cXHUwMzZmIixlZXI9IlxcdWZlMjAtXFx1ZmUyZiIscmVyPSJcXHUyMGQwLVxcdTIwZmYiLG5lcj10ZXIrZWVyK3JlcixpZXI9IlxcdWZlMGVcXHVmZTBmIixvZXI9IlsiK1ByZSsiXSIscmx0PSJbIituZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixhZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLElyZT0iW14iK1ByZSsiXSIsTHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixrcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLHNlcj0iXFx1MjAwZCIsUnJlPWFlcisiPyIsTnJlPSJbIitpZXIrIl0/IixsZXI9Iig/OiIrc2VyKyIoPzoiK1tJcmUsTHJlLGtyZV0uam9pbigifCIpKyIpIitOcmUrUnJlKyIpKiIsY2VyPU5yZStScmUrbGVyLHVlcj0iKD86IitbSXJlK3JsdCsiPyIscmx0LExyZSxrcmUsb2VyXS5qb2luKCJ8IikrIikiLEFyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK3VlcitjZXIsImciKTtmdW5jdGlvbiBoZXIoZSl7Zm9yKHZhciB0PUFyZS5sYXN0SW5kZXg9MDtBcmUudGVzdChlKTspKyt0O3JldHVybiB0fURyZS5leHBvcnRzPWhlcn0pO3ZhciBGcmU9SCgoblpuLHpyZSk9Pnt2YXIgZmVyPUVyZSgpLHBlcj1DcmUoKSxkZXI9T3JlKCk7ZnVuY3Rpb24gbWVyKGUpe3JldHVybiBwZXIoZSk/ZGVyKGUpOmZlcihlKX16cmUuZXhwb3J0cz1tZXJ9KTt2YXIgSHJlPUgoKGlabixCcmUpPT57dmFyIGdlcj1VQigpLF9lcj1LdigpLHllcj1CZigpLHZlcj1TcmUoKSx4ZXI9RnJlKCksYmVyPSJbb2JqZWN0IE1hcF0iLHdlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBTZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih5ZXIoZSkpcmV0dXJuIHZlcihlKT94ZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9X2VyKGUpO3JldHVybiB0PT1iZXJ8fHQ9PXdlcj9lLnNpemU6Z2VyKGUpLmxlbmd0aH1CcmUuZXhwb3J0cz1TZXJ9KTt2YXIgVXJlPUgoKG9abixWcmUpPT57dmFyIE1lcj1CQigpLEVlcj1Mc3QoKSxUZXI9JEIoKSxDZXI9SGYoKSxBZXI9QjQoKSxQZXI9VGkoKSxJZXI9WHYoKSxMZXI9RlMoKSxrZXI9TWwoKSxSZXI9WVMoKTtmdW5jdGlvbiBOZXIoZSx0LHIpe3ZhciBuPVBlcihlKSxpPW58fEllcihlKXx8UmVyKGUpO2lmKHQ9Q2VyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTprZXIoZSk/cj1MZXIobyk/RWVyKEFlcihlKSk6e306cj17fX1yZXR1cm4oaT9NZXI6VGVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9VnJlLmV4cG9ydHM9TmVyfSk7dmFyIFlyZT1IKChhWm4sV3JlKT0+e3ZhciBxcmU9anYoKSxEZXI9cVMoKSxPZXI9VGkoKSxHcmU9cXJlP3FyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIHplcihlKXtyZXR1cm4gT2VyKGUpfHxEZXIoZSl8fCEhKEdyZSYmZSYmZVtHcmVdKX1XcmUuZXhwb3J0cz16ZXJ9KTt2YXIgdEg9SCgoc1puLFhyZSk9Pnt2YXIgRmVyPUdCKCksQmVyPVlyZSgpO2Z1bmN0aW9uIGpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPUJlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP2pyZShzLHQtMSxyLG4saSk6RmVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfVhyZS5leHBvcnRzPWpyZX0pO3ZhciBLcmU9SCgobFpuLCRyZSk9PntmdW5jdGlvbiBIZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX0kcmUuZXhwb3J0cz1IZXJ9KTt2YXIgaWx0PUgoKGNabixKcmUpPT57dmFyIFZlcj1LcmUoKSxacmU9TWF0aC5tYXg7ZnVuY3Rpb24gVWVyKGUsdCxyKXtyZXR1cm4gdD1acmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1acmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxWZXIoZSx0aGlzLHMpfX1KcmUuZXhwb3J0cz1VZXJ9KTt2YXIgZW5lPUgoKHVabix0bmUpPT57dmFyIHFlcj1qQigpLFFyZT1mc3QoKSxHZXI9dTAoKSxXZXI9UXJlP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIFFyZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnFlcih0KSx3cml0YWJsZTohMH0pfTpHZXI7dG5lLmV4cG9ydHM9V2VyfSk7dmFyIG5uZT1IKChoWm4scm5lKT0+e3ZhciBZZXI9ODAwLGplcj0xNixYZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gJGVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPVhlcigpLGk9amVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49WWVyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXJuZS5leHBvcnRzPSRlcn0pO3ZhciBvbHQ9SCgoZlpuLGluZSk9Pnt2YXIgS2VyPWVuZSgpLFplcj1ubmUoKSxKZXI9WmVyKEtlcik7aW5lLmV4cG9ydHM9SmVyfSk7dmFyIEc0PUgoKHBabixvbmUpPT57dmFyIFFlcj11MCgpLHRycj1pbHQoKSxlcnI9b2x0KCk7ZnVuY3Rpb24gcnJyKGUsdCl7cmV0dXJuIGVycih0cnIoZSx0LFFlciksZSsiIil9b25lLmV4cG9ydHM9cnJyfSk7dmFyIGFsdD1IKChkWm4sYW5lKT0+e2Z1bmN0aW9uIG5ycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX1hbmUuZXhwb3J0cz1ucnJ9KTt2YXIgbG5lPUgoKG1abixzbmUpPT57ZnVuY3Rpb24gaXJyKGUpe3JldHVybiBlIT09ZX1zbmUuZXhwb3J0cz1pcnJ9KTt2YXIgdW5lPUgoKGdabixjbmUpPT57ZnVuY3Rpb24gb3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfWNuZS5leHBvcnRzPW9ycn0pO3ZhciBmbmU9SCgoX1puLGhuZSk9Pnt2YXIgYXJyPWFsdCgpLHNycj1sbmUoKSxscnI9dW5lKCk7ZnVuY3Rpb24gY3JyKGUsdCxyKXtyZXR1cm4gdD09PXQ/bHJyKGUsdCxyKTphcnIoZSxzcnIscil9aG5lLmV4cG9ydHM9Y3JyfSk7dmFyIGRuZT1IKCh5Wm4scG5lKT0+e3ZhciB1cnI9Zm5lKCk7ZnVuY3Rpb24gaHJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmdXJyKGUsdCwwKT4tMX1wbmUuZXhwb3J0cz1ocnJ9KTt2YXIgZ25lPUgoKHZabixtbmUpPT57ZnVuY3Rpb24gZnJyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX1tbmUuZXhwb3J0cz1mcnJ9KTt2YXIgeW5lPUgoKHhabixfbmUpPT57ZnVuY3Rpb24gcHJyKCl7fV9uZS5leHBvcnRzPXBycn0pO3ZhciB4bmU9SCgoYlpuLHZuZSk9Pnt2YXIgc2x0PVNzdCgpLGRycj15bmUoKSxtcnI9WkIoKSxncnI9MS8wLF9ycj1zbHQmJjEvbXJyKG5ldyBzbHQoWywtMF0pKVsxXT09Z3JyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTpkcnI7dm5lLmV4cG9ydHM9X3JyfSk7dmFyIHduZT1IKCh3Wm4sYm5lKT0+e3ZhciB5cnI9enN0KCksdnJyPWRuZSgpLHhycj1nbmUoKSxicnI9RnN0KCksd3JyPXhuZSgpLFNycj1aQigpLE1ycj0yMDA7ZnVuY3Rpb24gRXJyKGUsdCxyKXt2YXIgbj0tMSxpPXZycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9eHJyO2Vsc2UgaWYobz49TXJyKXt2YXIgYz10P251bGw6d3JyKGUpO2lmKGMpcmV0dXJuIFNycihjKTthPSExLGk9YnJyLGw9bmV3IHlycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9Ym5lLmV4cG9ydHM9RXJyfSk7dmFyIGxsdD1IKChTWm4sU25lKT0+e3ZhciBUcnI9QmYoKSxDcnI9WXUoKTtmdW5jdGlvbiBBcnIoZSl7cmV0dXJuIENycihlKSYmVHJyKGUpfVNuZS5leHBvcnRzPUFycn0pO3ZhciBFbmU9SCgoTVpuLE1uZSk9Pnt2YXIgUHJyPXRIKCksSXJyPUc0KCksTHJyPXduZSgpLGtycj1sbHQoKSxScnI9SXJyKGZ1bmN0aW9uKGUpe3JldHVybiBMcnIoUHJyKGUsMSxrcnIsITApKX0pO01uZS5leHBvcnRzPVJycn0pO3ZhciBDbmU9SCgoRVpuLFRuZSk9Pnt2YXIgTnJyPVY0KCk7ZnVuY3Rpb24gRHJyKGUsdCl7cmV0dXJuIE5ycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9VG5lLmV4cG9ydHM9RHJyfSk7dmFyIGNsdD1IKChUWm4sQW5lKT0+e3ZhciBPcnI9Q25lKCksenJyPUFkKCk7ZnVuY3Rpb24gRnJyKGUpe3JldHVybiBlPT1udWxsP1tdOk9ycihlLHpycihlKSl9QW5lLmV4cG9ydHM9RnJyfSk7dmFyIEVsPUgoKENabixQbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOkF0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5OnByZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOkFkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkhyZSgpLHRyYW5zZm9ybTpVcmUoKSx1bmlvbjpFbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtQbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChQWm4sUm5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9RWwoKTtSbmUuZXhwb3J0cz1jcjt2YXIgQnJyPSJcMCIsSnY9IlwwIixJbmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0p2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SnYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSnZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1KdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09SnYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPUp2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PUp2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUhycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLExuZSh0aGlzLl9wcmVkc1t0XSxlKSxMbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sa25lKHRoaXMuX3ByZWRzW3RdLGUpLGtuZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBMbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24ga25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrSW5lK28rSW5lKyhqZS5pc1VuZGVmaW5lZChuKT9CcnI6bil9ZnVuY3Rpb24gSHJyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIERuZT1IKChJWm4sTm5lKT0+e05uZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgem5lPUgoKExabixPbmUpPT57T25lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpEbmUoKX19KTt2YXIgQm5lPUgoKGtabixGbmUpPT57dmFyIFZmPUVsKCksVnJyPXJIKCk7Rm5lLmV4cG9ydHM9e3dyaXRlOlVycixyZWFkOldycn07ZnVuY3Rpb24gVXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOnFycihlKSxlZGdlczpHcnIoZSl9O3JldHVybiBWZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1WZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIHFycihlKXtyZXR1cm4gVmYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBWZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVmYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gR3JyKGUpe3JldHVybiBWZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFZmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxWZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uIFdycihlKXt2YXIgdD1uZXcgVnJyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFZmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVmYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgVm5lPUgoKFJabixIbmUpPT57dmFyIG5IPUVsKCk7SG5lLmV4cG9ydHM9WXJyO2Z1bmN0aW9uIFlycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChOWm4scW5lKT0+e3ZhciBVbmU9RWwoKTtxbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFVuZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFVbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoRFpuLEduZSk9Pnt2YXIganJyPUVsKCksWHJyPWhsdCgpO0duZS5leHBvcnRzPUtycjt2YXIgJHJyPWpyci5jb25zdGFudCgxKTtmdW5jdGlvbiBLcnIoZSx0LHIsbil7cmV0dXJuIFpycihlLFN0cmluZyh0KSxyfHwkcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBacnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgWHJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgWW5lPUgoKE9abixXbmUpPT57dmFyIEpycj1mbHQoKSxRcnI9RWwoKTtXbmUuZXhwb3J0cz10bnI7ZnVuY3Rpb24gdG5yKGUsdCxyKXtyZXR1cm4gUXJyLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPUpycihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoelpuLFhuZSk9Pnt2YXIgam5lPUVsKCk7WG5lLmV4cG9ydHM9ZW5yO2Z1bmN0aW9uIGVucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7am5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtqbmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciBLbmU9SCgoRlpuLCRuZSk9Pnt2YXIgcm5yPUVsKCksbm5yPXBsdCgpOyRuZS5leHBvcnRzPWlucjtmdW5jdGlvbiBpbnIoZSl7cmV0dXJuIHJuci5maWx0ZXIobm5yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIEpuZT1IKChCWm4sWm5lKT0+e3ZhciBvbnI9RWwoKTtabmUuZXhwb3J0cz1zbnI7dmFyIGFucj1vbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gc25yKGUsdCxyKXtyZXR1cm4gbG5yKGUsdHx8YW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gbG5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKChIWm4sdGllKT0+e3ZhciBZND1FbCgpO3RpZS5leHBvcnRzPVFuZTtRbmUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gUW5lKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgbmllPUgoKFZabixyaWUpPT57dmFyIGVpZT1kbHQoKTtyaWUuZXhwb3J0cz1jbnI7ZnVuY3Rpb24gY25yKGUpe3RyeXtlaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIGVpZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoVVpuLG9pZSk9Pnt2YXIgb0g9RWwoKTtvaWUuZXhwb3J0cz11bnI7ZnVuY3Rpb24gdW5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtpaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBpaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2lpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBzaWU9SCgocVpuLGFpZSk9Pnt2YXIgaG5yPW1sdCgpO2FpZS5leHBvcnRzPWZucjtmdW5jdGlvbiBmbnIoZSx0KXtyZXR1cm4gaG5yKGUsdCwicG9zdCIpfX0pO3ZhciBjaWU9SCgoR1puLGxpZSk9Pnt2YXIgcG5yPW1sdCgpO2xpZS5leHBvcnRzPWRucjtmdW5jdGlvbiBkbnIoZSx0KXtyZXR1cm4gcG5yKGUsdCwicHJlIil9fSk7dmFyIGZpZT1IKChXWm4saGllKT0+e3ZhciB1aWU9RWwoKSxtbnI9ckgoKSxnbnI9aGx0KCk7aGllLmV4cG9ydHM9X25yO2Z1bmN0aW9uIF9ucihlLHQpe3ZhciByPW5ldyBtbnIsbj17fSxpPW5ldyBnbnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7dWllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSx1aWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIGRpZT1IKChZWm4scGllKT0+e3BpZS5leHBvcnRzPXtjb21wb25lbnRzOlZuZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOlluZSgpLGZpbmRDeWNsZXM6S25lKCksZmxveWRXYXJzaGFsbDpKbmUoKSxpc0FjeWNsaWM6bmllKCkscG9zdG9yZGVyOnNpZSgpLHByZW9yZGVyOmNpZSgpLHByaW06ZmllKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIF9pZT1IKChqWm4sZ2llKT0+e3ZhciBtaWU9em5lKCk7Z2llLmV4cG9ydHM9e0dyYXBoOm1pZS5HcmFwaCxqc29uOkJuZSgpLGFsZzpkaWUoKSx2ZXJzaW9uOm1pZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChYWm4seWllKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPV9pZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7eWllLmV4cG9ydHM9YUh9KTt2YXIgeGllPUgoKEtabix2aWUpPT57dmFyIHlucj1Sc3QoKSx2bnI9MSx4bnI9NDtmdW5jdGlvbiBibnIoZSl7cmV0dXJuIHlucihlLHZucnx4bnIpfXZpZS5leHBvcnRzPWJucn0pO3ZhciBqND1IKChaWm4sYmllKT0+e3ZhciB3bnI9WXYoKSxTbnI9QmYoKSxNbnI9UjQoKSxFbnI9TWwoKTtmdW5jdGlvbiBUbnIoZSx0LHIpe2lmKCFFbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP1NucihyKSYmTW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP3ducihyW3RdLGUpOiExfWJpZS5leHBvcnRzPVRucn0pO3ZhciBNaWU9SCgoSlpuLFNpZSk9Pnt2YXIgQ25yPUc0KCksQW5yPVl2KCksUG5yPWo0KCksSW5yPWMwKCksd2llPU9iamVjdC5wcm90b3R5cGUsTG5yPXdpZS5oYXNPd25Qcm9wZXJ0eSxrbnI9Q25yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUG5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9SW5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxBbnIodSx3aWVbY10pJiYhTG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7U2llLmV4cG9ydHM9a25yfSk7dmFyIFRpZT1IKChRWm4sRWllKT0+e3ZhciBSbnI9SGYoKSxObnI9QmYoKSxEbnI9QWQoKTtmdW5jdGlvbiBPbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIU5ucih0KSl7dmFyIG89Um5yKHIsMyk7dD1EbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19RWllLmV4cG9ydHM9T25yfSk7dmFyIEFpZT1IKCh0Sm4sQ2llKT0+e3ZhciB6bnI9L1xzLztmdW5jdGlvbiBGbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmem5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9Q2llLmV4cG9ydHM9Rm5yfSk7dmFyIElpZT1IKChlSm4sUGllKT0+e3ZhciBCbnI9QWllKCksSG5yPS9eXHMrLztmdW5jdGlvbiBWbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxCbnIoZSkrMSkucmVwbGFjZShIbnIsIiIpfVBpZS5leHBvcnRzPVZucn0pO3ZhciBOaWU9SCgockpuLFJpZSk9Pnt2YXIgVW5yPUlpZSgpLExpZT1NbCgpLHFucj1adigpLGtpZT0wLzAsR25yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLFducj0vXjBiWzAxXSskL2ksWW5yPS9eMG9bMC03XSskL2ksam5yPXBhcnNlSW50O2Z1bmN0aW9uIFhucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYocW5yKGUpKXJldHVybiBraWU7aWYoTGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1MaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVVucihlKTt2YXIgcj1XbnIudGVzdChlKTtyZXR1cm4gcnx8WW5yLnRlc3QoZSk/am5yKGUuc2xpY2UoMikscj8yOjgpOkduci50ZXN0KGUpP2tpZTorZX1SaWUuZXhwb3J0cz1YbnJ9KTt2YXIgZ2x0PUgoKG5KbixPaWUpPT57dmFyICRucj1OaWUoKSxEaWU9MS8wLEtucj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gWm5yKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT0kbnIoZSksZT09PURpZXx8ZT09PS1EaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0Kktucn1yZXR1cm4gZT09PWU/ZTowfU9pZS5leHBvcnRzPVpucn0pO3ZhciBGaWU9SCgoaUpuLHppZSk9Pnt2YXIgSm5yPWdsdCgpO2Z1bmN0aW9uIFFucihlKXt2YXIgdD1KbnIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH16aWUuZXhwb3J0cz1RbnJ9KTt2YXIgSGllPUgoKG9KbixCaWUpPT57dmFyIHRpcj1hbHQoKSxlaXI9SGYoKSxyaXI9RmllKCksbmlyPU1hdGgubWF4O2Z1bmN0aW9uIGlpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDpyaXIocik7cmV0dXJuIGk8MCYmKGk9bmlyKG4raSwwKSksdGlyKGUsZWlyKHQsMyksaSl9QmllLmV4cG9ydHM9aWlyfSk7dmFyIFVpZT1IKChhSm4sVmllKT0+e3ZhciBvaXI9VGllKCksYWlyPUhpZSgpLHNpcj1vaXIoYWlyKTtWaWUuZXhwb3J0cz1zaXJ9KTt2YXIgX2x0PUgoKHNKbixxaWUpPT57dmFyIGxpcj10SCgpO2Z1bmN0aW9uIGNpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/bGlyKGUsMSk6W119cWllLmV4cG9ydHM9Y2lyfSk7dmFyIFdpZT1IKChsSm4sR2llKT0+e3ZhciB1aXI9WEIoKSxoaXI9TnN0KCksZmlyPWMwKCk7ZnVuY3Rpb24gcGlyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTp1aXIoZSxoaXIodCksZmlyKX1HaWUuZXhwb3J0cz1waXJ9KTt2YXIgamllPUgoKGNKbixZaWUpPT57ZnVuY3Rpb24gZGlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfVlpZS5leHBvcnRzPWRpcn0pO3ZhciAkaWU9SCgodUpuLFhpZSk9Pnt2YXIgbWlyPUk0KCksZ2lyPSRCKCksX2lyPUhmKCk7ZnVuY3Rpb24geWlyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9X2lyKHQsMyksZ2lyKGUsZnVuY3Rpb24obixpLG8pe21pcihyLGksdChuLGksbykpfSkscn1YaWUuZXhwb3J0cz15aXJ9KTt2YXIgc0g9SCgoaEpuLEtpZSk9Pnt2YXIgdmlyPVp2KCk7ZnVuY3Rpb24geGlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhdmlyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9S2llLmV4cG9ydHM9eGlyfSk7dmFyIEppZT1IKChmSm4sWmllKT0+e2Z1bmN0aW9uIGJpcihlLHQpe3JldHVybiBlPnR9WmllLmV4cG9ydHM9YmlyfSk7dmFyIHRvZT1IKChwSm4sUWllKT0+e3ZhciB3aXI9c0goKSxTaXI9SmllKCksTWlyPXUwKCk7ZnVuY3Rpb24gRWlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD93aXIoZSxNaXIsU2lyKTp2b2lkIDB9UWllLmV4cG9ydHM9RWlyfSk7dmFyIHlsdD1IKChkSm4sZW9lKT0+e3ZhciBUaXI9STQoKSxDaXI9WXYoKTtmdW5jdGlvbiBBaXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhQ2lyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJlRpcihlLHQscil9ZW9lLmV4cG9ydHM9QWlyfSk7dmFyIGlvZT1IKChtSm4sbm9lKT0+e3ZhciBQaXI9czAoKSxJaXI9QjQoKSxMaXI9WXUoKSxraXI9IltvYmplY3QgT2JqZWN0XSIsUmlyPUZ1bmN0aW9uLnByb3RvdHlwZSxOaXI9T2JqZWN0LnByb3RvdHlwZSxyb2U9UmlyLnRvU3RyaW5nLERpcj1OaXIuaGFzT3duUHJvcGVydHksT2lyPXJvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gemlyKGUpe2lmKCFMaXIoZSl8fFBpcihlKSE9a2lyKXJldHVybiExO3ZhciB0PUlpcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1EaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJnJvZS5jYWxsKHIpPT1PaXJ9bm9lLmV4cG9ydHM9emlyfSk7dmFyIHZsdD1IKChnSm4sb29lKT0+e2Z1bmN0aW9uIEZpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19b29lLmV4cG9ydHM9RmlyfSk7dmFyIHNvZT1IKChfSm4sYW9lKT0+e3ZhciBCaXI9VVMoKSxIaXI9YzAoKTtmdW5jdGlvbiBWaXIoZSl7cmV0dXJuIEJpcihlLEhpcihlKSl9YW9lLmV4cG9ydHM9VmlyfSk7dmFyIHBvZT1IKCh5Sm4sZm9lKT0+e3ZhciBsb2U9eWx0KCksVWlyPWdzdCgpLHFpcj1Jc3QoKSxHaXI9X3N0KCksV2lyPWtzdCgpLGNvZT1xUygpLHVvZT1UaSgpLFlpcj1sbHQoKSxqaXI9WHYoKSxYaXI9RlMoKSwkaXI9TWwoKSxLaXI9aW9lKCksWmlyPVlTKCksaG9lPXZsdCgpLEppcj1zb2UoKTtmdW5jdGlvbiBRaXIoZSx0LHIsbixpLG8sYSl7dmFyIHM9aG9lKGUsciksbD1ob2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2xvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj11b2UobCkscD0hZiYmamlyKGwpLGQ9IWYmJiFwJiZaaXIobCk7dT1sLGZ8fHB8fGQ/dW9lKHMpP3U9czpZaXIocyk/dT1HaXIocyk6cD8oaD0hMSx1PVVpcihsLCEwKSk6ZD8oaD0hMSx1PXFpcihsLCEwKSk6dT1bXTpLaXIobCl8fGNvZShsKT8odT1zLGNvZShzKT91PUppcihzKTooISRpcihzKXx8WGlyKHMpKSYmKHU9V2lyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGxvZShlLHIsdSl9Zm9lLmV4cG9ydHM9UWlyfSk7dmFyIGdvZT1IKCh2Sm4sbW9lKT0+e3ZhciB0b3I9UDQoKSxlb3I9eWx0KCkscm9yPVhCKCksbm9yPXBvZSgpLGlvcj1NbCgpLG9vcj1jMCgpLGFvcj12bHQoKTtmdW5jdGlvbiBkb2UoZSx0LHIsbixpKXtlIT09dCYmcm9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgdG9yKSxpb3Iobykpbm9yKGUsdCxhLHIsZG9lLG4saSk7ZWxzZXt2YXIgcz1uP24oYW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksZW9yKGUsYSxzKX19LG9vcil9bW9lLmV4cG9ydHM9ZG9lfSk7dmFyIHlvZT1IKCh4Sm4sX29lKT0+e3ZhciBzb3I9RzQoKSxsb3I9ajQoKTtmdW5jdGlvbiBjb3IoZSl7cmV0dXJuIHNvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZsb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfV9vZS5leHBvcnRzPWNvcn0pO3ZhciB4b2U9SCgoYkpuLHZvZSk9Pnt2YXIgdW9yPWdvZSgpLGhvcj15b2UoKSxwb3I9aG9yKGZ1bmN0aW9uKGUsdCxyKXt1b3IoZSx0LHIpfSk7dm9lLmV4cG9ydHM9cG9yfSk7dmFyIHhsdD1IKCh3Sm4sYm9lKT0+e2Z1bmN0aW9uIGRvcihlLHQpe3JldHVybiBlPHR9Ym9lLmV4cG9ydHM9ZG9yfSk7dmFyIFNvZT1IKChTSm4sd29lKT0+e3ZhciBtb3I9c0goKSxnb3I9eGx0KCksX29yPXUwKCk7ZnVuY3Rpb24geW9yKGUpe3JldHVybiBlJiZlLmxlbmd0aD9tb3IoZSxfb3IsZ29yKTp2b2lkIDB9d29lLmV4cG9ydHM9eW9yfSk7dmFyIEVvZT1IKChNSm4sTW9lKT0+e3ZhciB2b3I9c0goKSx4b3I9SGYoKSxib3I9eGx0KCk7ZnVuY3Rpb24gd29yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3ZvcihlLHhvcih0LDIpLGJvcik6dm9pZCAwfU1vZS5leHBvcnRzPXdvcn0pO3ZhciBDb2U9SCgoRUpuLFRvZSk9Pnt2YXIgU29yPUhjKCksTW9yPWZ1bmN0aW9uKCl7cmV0dXJuIFNvci5EYXRlLm5vdygpfTtUb2UuZXhwb3J0cz1Nb3J9KTt2YXIgSW9lPUgoKFRKbixQb2UpPT57dmFyIEVvcj1MNCgpLFRvcj1VNCgpLENvcj1SNCgpLEFvZT1NbCgpLEFvcj0kUygpO2Z1bmN0aW9uIFBvcihlLHQscixuKXtpZighQW9lKGUpKXJldHVybiBlO3Q9VG9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9QW9yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPUFvZSh1KT91OkNvcih0W2krMV0pP1tdOnt9KX1Fb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Qb2UuZXhwb3J0cz1Qb3J9KTt2YXIga29lPUgoKENKbixMb2UpPT57dmFyIElvcj1xNCgpLExvcj1Jb2UoKSxrb3I9VTQoKTtmdW5jdGlvbiBSb3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9SW9yKGUsYSk7cihzLGEpJiZMb3Iobyxrb3IoYSxlKSxzKX1yZXR1cm4gb31Mb2UuZXhwb3J0cz1Sb3J9KTt2YXIgTm9lPUgoKEFKbixSb2UpPT57dmFyIE5vcj1rb2UoKSxEb3I9WHN0KCk7ZnVuY3Rpb24gT29yKGUsdCl7cmV0dXJuIE5vcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gRG9yKGUsbil9KX1Sb2UuZXhwb3J0cz1Pb3J9KTt2YXIgT29lPUgoKFBKbixEb2UpPT57dmFyIHpvcj1fbHQoKSxGb3I9aWx0KCksQm9yPW9sdCgpO2Z1bmN0aW9uIEhvcihlKXtyZXR1cm4gQm9yKEZvcihlLHZvaWQgMCx6b3IpLGUrIiIpfURvZS5leHBvcnRzPUhvcn0pO3ZhciBGb2U9SCgoSUpuLHpvZSk9Pnt2YXIgVm9yPU5vZSgpLFVvcj1Pb2UoKSxxb3I9VW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306Vm9yKGUsdCl9KTt6b2UuZXhwb3J0cz1xb3J9KTt2YXIgSG9lPUgoKExKbixCb2UpPT57dmFyIEdvcj1NYXRoLmNlaWwsV29yPU1hdGgubWF4O2Z1bmN0aW9uIFlvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz1Xb3IoR29yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfUJvZS5leHBvcnRzPVlvcn0pO3ZhciBVb2U9SCgoa0puLFZvZSk9Pnt2YXIgam9yPUhvZSgpLFhvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiAkb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZYb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxqb3IodCxyLG4sZSl9fVZvZS5leHBvcnRzPSRvcn0pO3ZhciBHb2U9SCgoUkpuLHFvZSk9Pnt2YXIgS29yPVVvZSgpLFpvcj1Lb3IoKTtxb2UuZXhwb3J0cz1ab3J9KTt2YXIgWW9lPUgoKE5KbixXb2UpPT57ZnVuY3Rpb24gSm9yKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX1Xb2UuZXhwb3J0cz1Kb3J9KTt2YXIgJG9lPUgoKERKbixYb2UpPT57dmFyIGpvZT1adigpO2Z1bmN0aW9uIFFvcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPWpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9am9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Yb2UuZXhwb3J0cz1Rb3J9KTt2YXIgWm9lPUgoKE9KbixLb2UpPT57dmFyIHRhcj0kb2UoKTtmdW5jdGlvbiBlYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPXRhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fUtvZS5leHBvcnRzPWVhcn0pO3ZhciBRb2U9SCgoekpuLEpvZSk9Pnt2YXIgd2x0PVY0KCkscmFyPXE0KCksbmFyPUhmKCksaWFyPVFzdCgpLG9hcj1Zb2UoKSxhYXI9TjQoKSxzYXI9Wm9lKCksbGFyPXUwKCksY2FyPVRpKCk7ZnVuY3Rpb24gdWFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBjYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIHJhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bbGFyXTt2YXIgbj0tMTt0PXdsdCh0LGFhcihuYXIpKTt2YXIgaT1pYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gb2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gc2FyKG8sYSxyKX0pfUpvZS5leHBvcnRzPXVhcn0pO3ZhciByYWU9SCgoRkpuLGVhZSk9Pnt2YXIgaGFyPXRIKCksZmFyPVFvZSgpLHBhcj1HNCgpLHRhZT1qNCgpLGRhcj1wYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJnRhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJnRhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZmFyKGUsaGFyKHQsMSksW10pfSk7ZWFlLmV4cG9ydHM9ZGFyfSk7dmFyIGlhZT1IKChCSm4sbmFlKT0+e3ZhciBtYXI9WXN0KCksZ2FyPTA7ZnVuY3Rpb24gX2FyKGUpe3ZhciB0PSsrZ2FyO3JldHVybiBtYXIoZSkrdH1uYWUuZXhwb3J0cz1fYXJ9KTt2YXIgYWFlPUgoKEhKbixvYWUpPT57ZnVuY3Rpb24geWFyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChWSm4sc2FlKT0+e3ZhciB4YXI9TDQoKSxiYXI9YWFlKCk7ZnVuY3Rpb24gd2FyKGUsdCl7cmV0dXJuIGJhcihlfHxbXSx0fHxbXSx4YXIpfXNhZS5leHBvcnRzPXdhcn0pO3ZhciBVbj1IKChVSm4sY2FlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6eGllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpNaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOlVpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjpXaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpqaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOiRpZSgpLG1heDp0b2UoKSxtZXJnZTp4b2UoKSxtaW46U29lKCksbWluQnk6RW9lKCksbm93OkNvZSgpLHBpY2s6Rm9lKCkscmFuZ2U6R29lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTpyYWUoKSx1bmlxdWVJZDppYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmxhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7Y2FlLmV4cG9ydHM9bEh9KTt2YXIgZmFlPUgoKEdKbixoYWUpPT57aGFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiB1YWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmdWFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixTYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIHVhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIFNhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgZGFlPUgoKFdKbixwYWUpPT57dmFyIFBkPVVuKCksTWFyPVVjKCkuR3JhcGgsRWFyPWZhZSgpO3BhZS5leHBvcnRzPUNhcjt2YXIgVGFyPVBkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIENhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UGFyKGUsdHx8VGFyKSxuPUFhcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBQZC5mbGF0dGVuKFBkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIEFhcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBQZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksUGQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUGFyKGUsdCl7dmFyIHI9bmV3IE1hcixuPTAsaT0wO1BkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksUGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89UGQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRWFyfSksYT1uKzE7cmV0dXJuIFBkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciBnYWU9SCgoWUpuLG1hZSk9PnsidXNlIHN0cmljdCI7dmFyIFF2PVVuKCksSWFyPWRhZSgpO21hZS5leHBvcnRzPXtydW46TGFyLHVuZG86UmFyfTtmdW5jdGlvbiBMYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP0lhcihlLHIoZSkpOmthcihlKTtRdi5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksUXYudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24ga2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe1F2LmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLFF2LmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXtRdi5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIFF2LmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gUmFyKGUpe1F2LmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBucz1IKChqSm4seGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9VW4oKSxfYWU9VWMoKS5HcmFwaDt4YWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOnlhZSxzaW1wbGlmeTpOYXIsYXNOb25Db21wb3VuZEdyYXBoOkRhcixzdWNjZXNzb3JXZWlnaHRzOk9hcixwcmVkZWNlc3NvcldlaWdodHM6emFyLGludGVyc2VjdFJlY3Q6RmFyLGJ1aWxkTGF5ZXJNYXRyaXg6QmFyLG5vcm1hbGl6ZVJhbmtzOkhhcixyZW1vdmVFbXB0eVJhbmtzOlZhcixhZGRCb3JkZXJOb2RlOlVhcixtYXhSYW5rOnZhZSxwYXJ0aXRpb246cWFyLHRpbWU6R2FyLG5vdGltZTpXYXJ9O2Z1bmN0aW9uIHlhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIE5hcihlKXt2YXIgdD1uZXcgX2FlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gRGFyKGUpe3ZhciB0PW5ldyBfYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiB6YXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gRmFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIEJhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UodmFlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBVYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx5YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIHZhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIHFhcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBHYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gV2FyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgU2FlPUgoKFhKbix3YWUpPT57InVzZSBzdHJpY3QiO3ZhciBiYWU9VW4oKSxZYXI9bnMoKTt3YWUuZXhwb3J0cz17cnVuOmphcix1bmRvOiRhcn07ZnVuY3Rpb24gamFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxiYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7WGFyKGUsdCl9KX1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9WWFyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uICRhcihlKXtiYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKCRKbixNYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1VbigpO01hZS5leHBvcnRzPXtsb25nZXN0UGF0aDpLYXIsc2xhY2s6WmFyfTtmdW5jdGlvbiBLYXIoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBaYXIoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChLSm4sRWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9VW4oKSxKYXI9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO0VhZS5leHBvcnRzPVFhcjtmdW5jdGlvbiBRYXIoZSl7dmFyIHQ9bmV3IEphcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO3Rzcih0LGUpPG47KWk9ZXNyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLHJzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gdHNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gZXNyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gcnNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciBSYWU9SCgoWkpuLGthZSk9PnsidXNlIHN0cmljdCI7dmFyIElkPVVuKCksbnNyPUVsdCgpLGlzcj1YNCgpLnNsYWNrLG9zcj1YNCgpLmxvbmdlc3RQYXRoLGFzcj1VYygpLmFsZy5wcmVvcmRlcixzc3I9VWMoKS5hbGcucG9zdG9yZGVyLGxzcj1ucygpLnNpbXBsaWZ5O2thZS5leHBvcnRzPXQxO3QxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O3QxLmluaXRDdXRWYWx1ZXM9VGx0O3QxLmNhbGNDdXRWYWx1ZT1DYWU7dDEubGVhdmVFZGdlPVBhZTt0MS5lbnRlckVkZ2U9SWFlO3QxLmV4Y2hhbmdlRWRnZXM9TGFlO2Z1bmN0aW9uIHQxKGUpe2U9bHNyKGUpLG9zcihlKTt2YXIgdD1uc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UGFlKHQpOyluPUlhZSh0LGUsciksTGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPXNzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksSWQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe2NzcihlLHQsbil9KX1mdW5jdGlvbiBjc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUNhZShlLHQscil9ZnVuY3Rpb24gQ2FlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LElkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixoc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLEFhZShlLHt9LDEsdCl9ZnVuY3Rpb24gQWFlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxJZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0lkLmhhcyh0LHMpfHwocj1BYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUGFlKGUpe3JldHVybiBJZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBJYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9SWQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PVRhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09VGFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gSWQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gaXNyKHQsdSl9KX1mdW5jdGlvbiBMYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksdXNyKGUsdCl9ZnVuY3Rpb24gdXNyKGUsdCl7dmFyIHI9SWQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPWFzcihlLHIpO249bi5zbGljZSgxKSxJZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIGhzcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIFRhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciB6YWU9SCgoSkpuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIGZzcj1YNCgpLERhZT1mc3IubG9uZ2VzdFBhdGgscHNyPUVsdCgpLGRzcj1SYWUoKTtPYWUuZXhwb3J0cz1tc3I7ZnVuY3Rpb24gbXNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6TmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6X3NyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpnc3IoZSk7YnJlYWs7ZGVmYXVsdDpOYWUoZSl9fXZhciBnc3I9RGFlO2Z1bmN0aW9uIF9zcihlKXtEYWUoZSkscHNyKGUpfWZ1bmN0aW9uIE5hZShlKXtkc3IoZSl9fSk7dmFyIEJhZT1IKChRSm4sRmFlKT0+e3ZhciBBbHQ9VW4oKTtGYWUuZXhwb3J0cz15c3I7ZnVuY3Rpb24geXNyKGUpe3ZhciB0PXhzcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPXZzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiB2c3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24geHNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFVhZT1IKCh0UW4sVmFlKT0+e3ZhciBMZD1VbigpLFBsdD1ucygpO1ZhZS5leHBvcnRzPXtydW46YnNyLGNsZWFudXA6TXNyfTtmdW5jdGlvbiBic3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPXdzcihlKSxuPUxkLm1heChMZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89U3NyKGUpKzE7TGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7SGFlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gSGFlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLExkLmZvckVhY2gocyxmdW5jdGlvbihoKXtIYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiB3c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJkxkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4gTGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBTc3IoZSl7cmV0dXJuIExkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBNc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyIFdhZT1IKChlUW4sR2FlKT0+e3ZhciBJbHQ9VW4oKSxFc3I9bnMoKTtHYWUuZXhwb3J0cz1Uc3I7ZnVuY3Rpb24gVHNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pcWFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxxYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIHFhZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Fc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciAkYWU9SCgoclFuLFhhZSk9PnsidXNlIHN0cmljdCI7dmFyIFVmPVVuKCk7WGFlLmV4cG9ydHM9e2FkanVzdDpDc3IsdW5kbzpBc3J9O2Z1bmN0aW9uIENzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZqYWUoZSl9ZnVuY3Rpb24gQXNyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlBzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKElzcihlKSxqYWUoZSkpfWZ1bmN0aW9uIGphZShlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtZYWUoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe1lhZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gWWFlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFBzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLExsdCksVWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIElzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLGtsdCksVWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBaYWU9SCgoblFuLEthZSk9PnsidXNlIHN0cmljdCI7dmFyIGtkPVVuKCk7S2FlLmV4cG9ydHM9THNyO2Z1bmN0aW9uIExzcihlKXt2YXIgdD17fSxyPWtkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1rZC5tYXgoa2QubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9a2QubWFwKGtkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIWtkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxrZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9a2Quc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIGtkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBRYWU9SCgoaVFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIGgwPVVuKCk7SmFlLmV4cG9ydHM9a3NyO2Z1bmN0aW9uIGtzcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz1Sc3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnNyKGUsdCxyKXtmb3IodmFyIG49aDAuemlwT2JqZWN0KHIsaDAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWgwLmZsYXR0ZW4oaDAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGgwLnNvcnRCeShoMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9aDAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBoMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIHJzZT1IKChvUW4sZXNlKT0+e3ZhciB0c2U9VW4oKTtlc2UuZXhwb3J0cz1Oc3I7ZnVuY3Rpb24gTnNyKGUsdCl7cmV0dXJuIHRzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPXRzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGlzZT1IKChhUW4sbnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVGw9VW4oKTtuc2UuZXhwb3J0cz1Ec3I7ZnVuY3Rpb24gRHNyKGUsdCl7dmFyIHI9e307VGwuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O1RsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLFRsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshVGwuaXNVbmRlZmluZWQobykmJiFUbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49VGwuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gT3NyKG4pfWZ1bmN0aW9uIE9zcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KFRsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fFRsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmenNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxUbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLFRsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIFRsLm1hcChUbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gVGwucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIHpzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBzc2U9SCgoc1FuLGFzZSk9Pnt2YXIgJDQ9VW4oKSxGc3I9bnMoKTthc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9RnNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoSHNyKCEhdCkpLGw9b3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPW9zZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gb3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBIc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgdXNlPUgoKGxRbixjc2UpPT57dmFyIGYwPVVuKCksVnNyPXJzZSgpLFVzcj1pc2UoKSxxc3I9c3NlKCk7Y3NlLmV4cG9ydHM9bHNlO2Z1bmN0aW9uIGxzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPWYwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9VnNyKGUsaSk7ZjAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWxzZShlLGQudixyLG4pO2xbZC52XT1nLGYwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJldzcihkLGcpfX0pO3ZhciB1PVVzcihjLHIpO0dzcih1LGwpO3ZhciBoPXFzcih1LG4pO2lmKGEmJihoLnZzPWYwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7ZjAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIEdzcihlLHQpe2YwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPWYwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gV3NyKGUsdCl7ZjAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBmc2U9SCgoY1FuLGhzZSk9Pnt2YXIgSzQ9VW4oKSxZc3I9VWMoKS5HcmFwaDtoc2UuZXhwb3J0cz1qc3I7ZnVuY3Rpb24ganNyKGUsdCxyKXt2YXIgbj1Yc3IoZSksaT1uZXcgWXNyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIFhzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIGRzZT1IKCh1UW4scHNlKT0+e3ZhciAkc3I9VW4oKTtwc2UuZXhwb3J0cz1Lc3I7ZnVuY3Rpb24gS3NyKGUsdCxyKXt2YXIgbj17fSxpOyRzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIHZzZT1IKChoUW4seXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcDA9VW4oKSxac3I9WmFlKCksSnNyPVFhZSgpLFFzcj11c2UoKSx0bHI9ZnNlKCksZWxyPWRzZSgpLHJscj1VYygpLkdyYXBoLG1zZT1ucygpO3lzZS5leHBvcnRzPW5scjtmdW5jdGlvbiBubHIoZSl7dmFyIHQ9bXNlLm1heFJhbmsoZSkscj1nc2UoZSxwMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPWdzZShlLHAwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1ac3IoZSk7X3NlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2lscihzJTI/cjpuLHMlND49MiksaT1tc2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1Kc3IoZSxpKTtjPG8mJihsPTAsYT1wMC5jbG9uZURlZXAoaSksbz1jKX1fc2UoZSxhKX1mdW5jdGlvbiBnc2UoZSx0LHIpe3JldHVybiBwMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gdGxyKGUsbixyKX0pfWZ1bmN0aW9uIGlscihlLHQpe3ZhciByPW5ldyBybHI7cDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89UXNyKG4saSxyLHQpO3AwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksZWxyKG4scixvLnZzKX0pfWZ1bmN0aW9uIF9zZShlLHQpe3AwLmZvckVhY2godCxmdW5jdGlvbihyKXtwMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFBzZT1IKChmUW4sQXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9VW4oKSxvbHI9VWMoKS5HcmFwaCxhbHI9bnMoKTtBc2UuZXhwb3J0cz17cG9zaXRpb25YOmNscixmaW5kVHlwZTFDb25mbGljdHM6eHNlLGZpbmRUeXBlMkNvbmZsaWN0czpic2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OndzZSx2ZXJ0aWNhbEFsaWdubWVudDpTc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246TXNlLGFsaWduQ29vcmRpbmF0ZXM6VHNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OkVzZSxiYWxhbmNlOkNzZX07ZnVuY3Rpb24geHNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1zbHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gYnNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gc2xyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiB3c2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBTc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIXdzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIE1zZShlLHQscixuLGkpe3ZhciBvPXt9LGE9bGxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGxscihlLHQscixuKXt2YXIgaT1uZXcgb2xyLG89ZS5ncmFwaCgpLGE9dWxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBFc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPWhscihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBUc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBDc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gY2xyKGUpe3ZhciB0PWFsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoeHNlKGUsdCksYnNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPVNzZShlLGkscixsKSx1PU1zZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPUVzZShlLG4pO3JldHVybiBUc2UobixvKSxDc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIHVscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBobHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBrc2U9SCgocFFuLExzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PVVuKCksSXNlPW5zKCksZmxyPVBzZSgpLnBvc2l0aW9uWDtMc2UuZXhwb3J0cz1wbHI7ZnVuY3Rpb24gcGxyKGUpe2U9SXNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSxkbHIoZSksWjQuZm9yRWFjaChmbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24gZGxyKGUpe3ZhciB0PUlzZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIEZzZT1IKChkUW4senNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9VW4oKSxSc2U9Z2FlKCksTnNlPVNhZSgpLG1scj16YWUoKSxnbHI9bnMoKS5ub3JtYWxpemVSYW5rcyxfbHI9QmFlKCkseWxyPW5zKCkucmVtb3ZlRW1wdHlSYW5rcyxEc2U9VWFlKCksdmxyPVdhZSgpLE9zZT0kYWUoKSx4bHI9dnNlKCksYmxyPWtzZSgpLGQwPW5zKCksd2xyPVVjKCkuR3JhcGg7enNlLmV4cG9ydHM9U2xyO2Z1bmN0aW9uIFNscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/ZDAudGltZTpkMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gTmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7TWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7RWxyKGUsbil9KX0pfWZ1bmN0aW9uIE1scihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0RscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7UnNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0RzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXttbHIoZDAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe09scihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3lscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtEc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtnbHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXt6bHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtGbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtOc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe19scihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXt2bHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7eGxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtXbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtZbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7cWxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe05zZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1ZscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtCbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7SGxyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7VWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXtSc2UudW5kbyhlKX0pfWZ1bmN0aW9uIEVscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgVGxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxDbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sQWxyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUGxyPVsid2lkdGgiLCJoZWlnaHQiXSxJbHI9e3dpZHRoOjAsaGVpZ2h0OjB9LExscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxrbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxSbHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIE5scihlKXt2YXIgdD1uZXcgd2xyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxDbHIsTmx0KHIsVGxyKSxpci5waWNrKHIsQWxyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFBsciksSWxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxrbHIsTmx0KGksTGxyKSxpci5waWNrKGksUmxyKSkpfSksdH1mdW5jdGlvbiBEbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIE9scihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTtkMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gemxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIEZscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIEJscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBIbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KGQwLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChkMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gVmxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gcWxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uIFdscihlKXt2YXIgdD1kMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe2QwLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEhzZT1IKChtUW4sQnNlKT0+e3ZhciBwSD1VbigpLGpscj1ucygpLFhscj1VYygpLkdyYXBoO0JzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOiRscn07ZnVuY3Rpb24gJGxyKGUpe3ZhciB0PWpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IFhscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgVXNlPUgoKGdRbixWc2UpPT57VnNlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoX1FuLHFzZSk9Pntxc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6RnNlKCksZGVidWc6SHNlKCksdXRpbDp7dGltZTpucygpLnRpbWUsbm90aW1lOm5zKCkubm90aW1lfSx2ZXJzaW9uOlVzZSgpfX0pO3ZhciB6ZHQ9RWUoT2R0KCksMSkse19fZXh0ZW5kczpjX3IsX19hc3NpZ246dV9yLF9fcmVzdDpoX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06Zl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6cF9yLF9fZ2VuZXJhdG9yOmRfcixfX2V4cG9ydFN0YXI6bV9yLF9fY3JlYXRlQmluZGluZzpnX3IsX192YWx1ZXM6X19yLF9fcmVhZDp5X3IsX19zcHJlYWQ6dl9yLF9fc3ByZWFkQXJyYXlzOnhfcixfX3NwcmVhZEFycmF5OmJfcixfX2F3YWl0OndfcixfX2FzeW5jR2VuZXJhdG9yOlNfcixfX2FzeW5jRGVsZWdhdG9yOk1fcixfX2FzeW5jVmFsdWVzOkVfcixfX21ha2VUZW1wbGF0ZU9iamVjdDpUX3IsX19pbXBvcnRTdGFyOkNfcixfX2ltcG9ydERlZmF1bHQ6QV9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6UF9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6SV9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpMX3J9PXpkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gRmR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e0ZkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7RmR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBSX3I9QmR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLE5fcj1CZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gQmR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIHd2ZT0vKHVybFwoKShbXildKikoXCkpL2csU3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxacztmdW5jdGlvbiBsXyhlLHQpe2lmKGUmJlN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIFpzfHwoWnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksWnMuYmFzZT1acy5jcmVhdGVFbGVtZW50KCJiYXNlIiksWnMuaGVhZC5hcHBlbmRDaGlsZChacy5iYXNlKSxacy5hbmNob3I9WnMuY3JlYXRlRWxlbWVudCgiYSIpLFpzLmJvZHkuYXBwZW5kQ2hpbGQoWnMuYW5jaG9yKSksWnMuYmFzZS5ocmVmPXQsWnMuYW5jaG9yLmhyZWY9ZSxacy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2Uod3ZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitsXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIGNfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsSF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksVl9yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxIZHQ9Y18mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxWZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFVkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBxZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgcHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBHZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyIFdkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgWWR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBNdmU9MDtmdW5jdGlvbiBqZHQoKXt9amR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO2pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgUm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1NdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSxLZHQ9e307ZnVuY3Rpb24gWGR0KGUsdCl7ZEdbZV09S2R0W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiAkZHQoZSl7cmV0dXJuIGRHW2VdfHxLZHRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBFdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj0kZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9bF8odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiYkZHQodCkhPT12b2lkIDApdGhyb3cgWGR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsWGR0KHQsdGhpcyksRXZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBUdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsQ3ZlPSJpbmNsdWRlIixaZHQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIEpkdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBBdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlB2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShDdmUpO2EmJnIucHVzaCguLi5BdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBRZHQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoVHZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShaZHQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1KZHQobyk7cy5zZXRBdHRyaWJ1dGUoWmR0LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPUpkdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIHRtdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1JdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSXZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPWt2ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9THZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIEx2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIGt2ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIGRwKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIGVtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9ZW10KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1lbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSxSdmU9Ly1bYS16XS9nLE52ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIHdtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoUnZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShOdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBEdmU9MCxybXQ9MCxMeD1bXSxPdmU9MCx2Rz0hMSxubXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcih6dmUpLm9ic2VydmUobm10LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24genZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxybXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsbm10LnRleHRDb250ZW50PU92ZSsrKSxMeC5wdXNoKGUpLER2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1ybXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgRnZlPWxpLEZJPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLEZ2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBpbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaW10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gQnZlKGUsdCl7aWYoIWltdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Um4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHdtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtCdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEh2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxvbXQ9ITEsYW10PSExO2Z1bmN0aW9uIFZ2ZSgpe2lmKCFvbXQpe29tdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLGFtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gYW10fWZ1bmN0aW9uIFV2ZShlKXtWdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24gcXZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkh2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBzbXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJnNtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIEd2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiBXdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gWXZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBqdmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGxtdD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksVXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1xdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPXNtdChzLGgpO0d2ZSh0aGlzLHMuJCxmLGgpLFl2ZSh0aGlzLGYsaCxpKSxXdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9anZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0sZ210PSJfX2NvbXB1dGVJbmZvIixYdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiAkdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBjbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIEt2ZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmJHZlKGUsbyxzLGMscixuLGkpfHxpJiZadmUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIFp2ZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIF9tdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBfbXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiBKdmUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxfbXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIFF2ZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1kcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gdDFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gZTFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZihXZHQpe2pNKys7bGV0IG89bjFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpdW10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspeW10KGUsIiIsdCxyLHMpJiZ1bXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIHIxZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSx1bXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0scjFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIG4xZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309aTFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGkxZShlKXtsZXQgdD1lW2dtdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24geW10KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIG8xZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPWRwKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9ZHAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLHUxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9YyxhMWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gYTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPXhtdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOnMxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBzMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1kcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmbDFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGwxZShlLHQscixuLGkpe2lmKGk9YzFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBjMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIHUxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gaDFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2YxZShhLGMpLHAxZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGYxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIHAxZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7UXZlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gaG10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgZDFlPVtdLHZtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIixtMWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIsZzFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixfMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHkxZT0iKD86IitnMWUrInwiK18xZSsiKSIsZm10PSIoPzooIit2bXQrInwiK20xZSsifCIreTFlKyIpXFxzKikiLHYxZT0iKD86IitmbXQrIig/OixcXHMqIitmbXQrIikqKSIseDFlPSIoPzpcXChcXHMqKD86Iit2MWUrIj8pXFwpXFxzKikiLGIxZT0iKCIrdm10KyJcXHMqIit4MWUrIj8pIix3MWU9IihcXFtcXFt8e3spXFxzKiIsUzFlPSIoPzpdXXx9fSkiLE0xZT0iKD86KCEpXFxzKik/IixFMWU9dzFlK00xZStiMWUrUzFlLHBtdD1uZXcgUmVnRXhwKEUxZSwiZyIpO2Z1bmN0aW9uIGRtdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOmQxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBUMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIFQxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49eG10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiB4bXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gbW10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIGJtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe2JtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEMxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciB1Xz1SbihlPT57bGV0IHQ9bG10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gbzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7ZTFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmS3ZlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO2JtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0MxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpjbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOmNtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO2htdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46SnZlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjp0MWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9aG10KHRoaXMscyx6ci5DT01QVVRFLHltdCxpLGEpO3hHKHRoaXMsZ210KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PW1tdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj9tbXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLGgxZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PWRtdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7WHZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9ZG10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9d20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1wbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1wbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIEExZT0wO2Z1bmN0aW9uIHdtdCgpe0ExZSsrfXZhciBQMWU9W107ZnVuY3Rpb24gVkkoZSl7UDFlLnB1c2goZSl9ZnVuY3Rpb24gSTFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgU210PVJuKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9STFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt3bXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgTW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsU209Um4oZT0+e2xldCB0PVNtdCh1XyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1RZHQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksWWR0JiZVSSYmSGR0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fHFkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIE1tdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6cHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1WZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2xfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksR2R0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9bF8odGhpcy5pbXBvcnRQYXRoKSksbF8oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEwxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gazFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEwxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrazFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9U20oSFRNTEVsZW1lbnQpO3ZhciBmeT1FZShPZSgpLDEpO3ZhciBoXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBFbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1oX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIE1tO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoTW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhFbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpFbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPVIxZShlKSxUbXQoTjFlKGUpLGUpfWZ1bmN0aW9uIFIxZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLmNvbW1lbnRzLCIiKS5yZXBsYWNlKGdwLnBvcnQsIiIpfWZ1bmN0aW9uIE4xZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1DbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09QW10JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIFRtdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUQxZShyKSxyPXIucmVwbGFjZShncC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVjFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEgxZSk9PT0wP2UudHlwZT1tcC5NRURJQV9SVUxFOm8ubWF0Y2goZ3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9bXAuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoZ3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUG10KT09PTA/ZS50eXBlPW1wLk1JWElOX1JVTEU6ZS50eXBlPW1wLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylUbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBEMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhTzFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6ejFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitDbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1BbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gTzFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihQbXQpPT09MH1mdW5jdGlvbiB6MWUoZSl7cmV0dXJuIGU9RjFlKGUpLEIxZShlKX1mdW5jdGlvbiBGMWUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKGdwLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gQjFlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AubWl4aW5BcHBseSwiIikucmVwbGFjZShncC52YXJBcHBseSwiIil9dmFyIG1wPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LENtdD0ieyIsQW10PSJ9IixncD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUG10PSItLSIsSDFlPSJAbWVkaWEiLFYxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIEltdD0vQG1lZGlhXHMoLiopLzt2YXIgTG10PW5ldyBTZXQsVTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24ga210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIUxtdC5oYXModCkpe0xtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gUm10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShVMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PW1wLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goSW10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09bXAuU1RZTEVfUlVMRT90KGUpOnImJm89PT1tcC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1tcC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gcTFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPXExZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIG52cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gTm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gRG10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO1JtdChpKT9oX3x8KGttdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIE9tdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBHMWUoZSl7aWYoTW0hPT12b2lkIDApcmV0dXJuIE1tO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoT210KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9VzFlKGUpO3IhPT0iIiYmWTFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gRzFlKGUpIT09IiJ9ZnVuY3Rpb24gVzFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PU9tdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBZMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gem10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIGoxZT0vO1xzKi9tLFgxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxGbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIHptdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9RG10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShqMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShGbXQsIiIpKSxhLnB1c2goIikiKSxGbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPVgxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBCbXQ9RG87dmFyICQxZT17fSxRTT0kMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLEsxZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBIbXQoZSl7bGV0IHQ9UU1bZV07dCYmWjFlKHQpfWZ1bmN0aW9uIFoxZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gVm10KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBVbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsSzFlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLHFtdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cW10P3FtdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIEdtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbR210XXx8KHRbR210XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgQm10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1IbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1ObXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtWbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFVtdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSxXbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixZbXQ9MjUsam10PTUsUTFlPTIsdHhlPTI1MDAsSm10PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sZXhlPVswLDEsNCwyXSxyeGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiBKbXQuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIFFtdChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmVWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgdGd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLG54ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxpeGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBveGUoZSl7cmV0dXJuIG54ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIGF4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIFhtdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYob3hlKG5baV0pKXtsZXQgbz1heGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09aWEubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uICRtdChlKXtsZXQgdD10Z3Q/WyJjbGljayJdOkptdDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sWG10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLFhtdCwhMCl9ZnVuY3Rpb24gc3hlKGUpe2lmKCFmRylyZXR1cm47aWEubW91c2UubW91c2VJZ25vcmVKb2J8fCRtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXskbXQoKSxpYS5tb3VzZS50YXJnZXQ9bnVsbCxpYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtpYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0saWEubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2UoaWEubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIodHhlKSx0KX1mdW5jdGlvbiBwXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFyeGUmJihyPWV4ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBseGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PV9wKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBpYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBjeGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZWd0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsc3hlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30sZl89W107ZnVuY3Rpb24gdXhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIF9wKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gcmd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKGlhLnRvdWNoLmlkPWEuaWRlbnRpZmllciksaWEudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmaHhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPGZfLmxlbmd0aDthKyspcz1mX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gaHhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilpYS50b3VjaC54PXQuY2xpZW50WCxpYS50b3VjaC55PXQuY2xpZW50WSxpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihpYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPWN4ZShlKSxpPSExLG89TWF0aC5hYnMoaWEudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMoaWEudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIEVtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGZ4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIG5ndChlLHQscil7cmV0dXJuIGlFW3RdPyhweGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBmeGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sISh0Z3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZkXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIHB4ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtmXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24gZHhlKGUpe2ZvcihsZXQgdD0wLHI7dDxmXy5sZW5ndGg7dCsrKXtyPWZfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGRfKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9ZHhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighcF8oZSkpcmV0dXJuO2xldCB0PV9wKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe3BfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe3BfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07ZWd0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLF9wKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPlExZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7S210KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSkscF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O2VndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTtLbXQodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gS210KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49am10fHxpPj1qbXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdXhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtwXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtwXyhlKSYmWm10KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe1ptdCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBabXQoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz1fcChyfHx0KTshb3x8aXhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PVltdCYmaTw9WW10fHxseGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBpZ3Q9X3A7dmFyIHloPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7RW0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bmd0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIG14ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyxneGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxfeGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHl4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLHZ4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sYWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gc2d0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gbGd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gY2d0KCl7c2d0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWxndChvRVtlXSl9ZnVuY3Rpb24geHhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZjZ3QoKX12YXIgdWd0PVJuKGU9PnthZ3R8fGFFfHwoc2d0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2d0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCFhZ3QmJnZ4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UobXhlLGd4ZSksbz1vLnJlcGxhY2UoX3hlLHl4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKHh4ZSgpLG9FLnB1c2godGhpcyksbGd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxoZ3Q9W10sZmd0PVtdO2Z1bmN0aW9uIHBndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLGJ4ZShoZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3eGUoZmd0KX0pfSl9ZnVuY3Rpb24gYnhlKGUpe2Zvcig7ZS5sZW5ndGg7KWRndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIHd4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspZGd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24gZGd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIG1ndChlLHQscil7aTl8fHBndCgpLGhndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIFRtKGUsdCxyKXtpOXx8cGd0KCksZmd0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24gZ2d0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/Z2d0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGdndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBfZ3Q9MCx5Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gU3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIE14ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChfZ3QpOihpLnB1c2goeWd0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gRXhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9VHhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1DeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1NeGUoU3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBfZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHlndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBUeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gQ3hlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBFeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB2aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PVdtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsQXhlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEF4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgdmgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFB4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gdmd0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIEl4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSx2Z3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBQeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLHZndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxJeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00seGd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBiZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gd2d0KGUsdD0hMSl7aWYoIUtHfHwheGd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPXhndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIWJndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFiZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LGcxcj1SbihlPT57bGV0IHQ9U20oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixMeGU9d2luZG93LlNoYWR5Q1NTLEd0PVJuKGU9PntsZXQgdD15aChTbShlKSkscj1VST90OnVndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYocHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7ZF8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gd2d0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBMeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQ209RWUoT2UoKSwxKTtmdW5jdGlvbiB4aChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYobV8oZVtyXSkmJm1fKHRbbl0pKXtsZXQgaT1yLG89bjtyPVNndChlLHIrMSksbj1TZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIFNndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighbV8oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihtXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhbV8oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gbV8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fG1fKGUpfXZhciBreGU9W107ZnVuY3Rpb24gUnhlKGUpe3JldHVybiBDbS5rZXlzKGUpLnNvcnQoeGgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBDbS51bmlvbi5hcHBseShudWxsLENtLnZhbHVlcyhlKSkuc29ydCh4aCl9ZnVuY3Rpb24gTnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxDbS51bmlxKHIpLnNvcnQoeGgpfXZhciBFZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsVGd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O0tzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pk94ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+Q2d0LHNldEZlYXR1cmVGbGFnczooKT0+RHhlfSk7dmFyIHM5LGw5O0NndCgpO2Z1bmN0aW9uIENndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBEeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gT3hlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LEFtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoQW18fChBbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PUFtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49RnhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz16eGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKEVndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24genhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIEZ4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1BbS5QT1NULHQuYm9keT1CeGUoZSksdCk6KHQubWV0aG9kVHlwZT1BbS5HRVQsdCl9ZnVuY3Rpb24gQnhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBBZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsSHhlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksVnhlPVBndCgpO2Z1bmN0aW9uIFBndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChUZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixJZ3Qoe1tBZ3RdOkh4ZS5nZXRBbGwoQWd0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gVnhlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gSWd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKE5hfHwoTmE9e30pKTtmdW5jdGlvbiBVeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOk5hLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBxeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOk5hLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBHeGUoZSx0PSIiKXtsZXQgcj1bVXhlKGUsdCldLG49cXhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPUd4ZShuLHIpLG89V3hlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uIFd4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj14aChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjp4aChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoWXhlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O0tzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PkpzfSk7dmFyIGp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxOZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LFh4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LE5ndCk7ZnVuY3Rpb24gJHhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBEZ3QoZSx0KXtyZXR1cm4gRmd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIEt4ZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspT2d0KGUsdFtuXSxyLFh4ZSl9ZnVuY3Rpb24gT2d0KGUsdCxyLG4peyR4ZSh0LGUsbik7Zm9yKGxldCBpIGluIGp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIHpndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/emd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24ga2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIFJndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gRmd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylrZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBrZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCkscHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249emd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZLeGUocyxuLGkpLE9ndChzLGUsaSxOZ3QpfTtyZXR1cm4gcHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dChSZ3QpOlJndDtyZXR1cm4gcj1GZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Um4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgSGd0PXVfKG5XKSxaeGU9R3goSGd0KTtmdW5jdGlvbiBKeGUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBReGU9dV8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgYmg9Y2xhc3MgZXh0ZW5kcyBReGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07YmgucHJvdG90eXBlLl9fZGF0YUhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7YmgucHJvdG90eXBlLl9tZXRob2RIb3N0O2JoLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjtiaC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIHRiZT1HeChiaCk7ZnVuY3Rpb24gQmd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBlYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/dGJlOmJoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGliZShpLGUsdCxyKSxpfWZ1bmN0aW9uIHJiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP1p4ZTpIZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46bmJlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJnNiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKUp4ZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gbmJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gaWJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpvYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46YWJlKCl9KX1mdW5jdGlvbiBvYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gYWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFCZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOmJoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89ZWJlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPUJndChlKTtyYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gc2JlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFZndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgVWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYocHAmJiFjXyl7aWYoIVVndCl7VWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGxiZT15aChmOSh1XyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGxiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIGNiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBjYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9ZHAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxxZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHFndC5pcyxxZ3QpO3ZhciB1YmU9Um4oZT0+e2xldCB0PVNtKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgaGJlPXViZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBoYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIEdndD0iaW5jbHVkZSIsZmJlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGZiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShHZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoR2d0KSx0LnRleHRDb250ZW50PXRtdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyIFdndDtXZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgWWd0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiBXZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBEYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LEpzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufWNffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W0pzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe0RhLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgamd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7amd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoamd0LmNvbnRlbnQpO3ZhciBYZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7WGd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWGd0LmNvbnRlbnQpO3ZhciAkZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTskZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCRndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHBiZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBwYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOkRhLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciBkYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZGJlLmNvbnRlbnQpO3ZhciBtYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1iZS5jb250ZW50KTt2YXIgS2d0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSxnYmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sWmd0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sX2JlPS9bYS16MC05Kl0vLHliZT0vVVwrLyx2YmU9L15hcnJvdy8seGJlPS9ec3BhY2UoYmFyKT8vLGJiZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIEpndChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHx4YmUudGVzdChuKT9yPSJzcGFjZSI6YmJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fF9iZS50ZXN0KG4pKSYmKHI9bik6dmJlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gd2JlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiBLZ3Q/dD1LZ3RbZV06eWJlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBTYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9Z2JlW2VdKSx0fWZ1bmN0aW9uIE1iZShlLHQpe3JldHVybiBlLmtleT9KZ3QoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9KZ3QoZS5kZXRhaWwua2V5LHQpOndiZShlLmtleUlkZW50aWZpZXIpfHxTYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gUWd0KGUsdCl7dmFyIHI9TWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gRWJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gWmd0Pyh0W1pndFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiB0MHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBFYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10MHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKFFndChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXt0MHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYoUWd0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgZTB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksVGJlPWUwdCYmZTB0WzFdPj04LHIwdD0zLG4wdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1ZndCxKcyx2OSxZZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UscjB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChyMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IVRiZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKGRwKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciB3aD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbd20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W0pzLHdoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgaTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7aTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaTB0LmNvbnRlbnQpO3ZhciBvMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO28wdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8wdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxTaD1bT28sWXhdO3ZhciBNaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIGEwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9YTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWguZGlzdGFuY2UoZSx0LDAsMCksbj1NaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPU1oLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBnXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9Z18uTUFYX1JBRElVUz0zMDA7Z18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1NaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01oLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxnXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9nXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLGdfLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IGEwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9TWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPU1oLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PU1oLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBnXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxzMHQ9W1NoLERpLHN1LHVXXTt2YXIgbDB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7bDB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6bDB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbczB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBjMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7YzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYzB0LmNvbnRlbnQpO3ZhciB1MHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDt1MHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh1MHQuY29udGVudCk7dmFyIEVoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLFRoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LGgwdD1bRWgsVGgsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W1NoLERpLHN1LHBFXTt2YXIgQ2JlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LGgwdCxDYmVdO3ZhciBmMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtmMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpmMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBwMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtwMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgZDB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIEFiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1bZDB0LEFiZV07dmFyIHc5LFBiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LG0wdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVBiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LGcwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxFbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sXzB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0seTB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiB2MHQoZSl7Q2guaW5kZXhPZihlKT49MHx8KENoLmxlbmd0aD09PTAmJkxiZSgpLENoLnB1c2goZSksX1c9Q2hbQ2gubGVuZ3RoLTFdLGIwdD1bXSx3MHQ9W10pfWZ1bmN0aW9uIHgwdChlKXt2YXIgdD1DaC5pbmRleE9mKGUpO3QhPT0tMSYmKENoLnNwbGljZSh0LDEpLF9XPUNoW0NoLmxlbmd0aC0xXSxiMHQ9W10sdzB0PVtdLENoLmxlbmd0aD09PTAmJmtiZSgpKX12YXIgQ2g9W10sYjB0PW51bGwsdzB0PW51bGw7ZnVuY3Rpb24gSWJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmUmJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBMYmUoKXtNOT1NOXx8SWJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIGtiZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gUmJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJnkwdCE9PXQmJih5MHQ9dCxnVz1OYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPU9iZShlKTtyZXR1cm4hRGJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBOYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIERiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gT2JlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgUG09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpfMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIGcwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxGYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyh4MHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSx2MHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sY18pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSx6YmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LEZiZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj16YmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVttMHQsSnMsUG1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxTMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltTMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltUaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgTTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7TTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gd20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgQmJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLEJiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpQbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHlwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEhiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtIYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBWYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbU2gsRGksRWgsVGhdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxWYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7aWd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxFMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6RTB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PUUwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbVGgsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFViZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W1NoLERpLFViZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTp3aC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LFQwdD1bd2gsU1ddO3ZhciBfXz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx3aC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7X18uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLF9fLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZighX18uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3doLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07X18uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W1QwdCxPbyxfX107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBDMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7QzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQzB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIEEwdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtBMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpBMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX13aC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUDB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1AwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlAwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLEVoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZkXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgSTB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtJMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpJMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEwwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0wwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkwwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBxYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChxYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksU2gsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W0pzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxfXy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBEYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgazB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7azB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6azB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXtkXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtLcyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5HYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgUjB0PSExO2Z1bmN0aW9uIEdiZShlKXtSMHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiBSMHR9dmFyIE4wdD0iIjtmdW5jdGlvbiBJVyhlKXtOMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBOMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBEMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gTzB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIHowdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBCMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6V2JlLHNldDpZYmUsZ2V0SW5pdGlhbGl6ZXI6eV8sZ2V0T2JzZXJ2ZXI6dl8sZGlzcG9zZUJpbmRpbmc6amJlfT12RShlPT5lLGU9PmUpLHtnZXQ6WGJlLHNldDokYmUsZ2V0SW5pdGlhbGl6ZXI6dnAsZ2V0T2JzZXJ2ZXI6eHAsZGlzcG9zZUJpbmRpbmc6S2JlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOlpiZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OkpiZSxzZXQ6UWJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOnQyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpejB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBlMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLE8wdCh0KX1mdW5jdGlvbiBGMHQoZSx0KXtsZXQgcj1lW0IwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj15XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24gX3MoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfV9zKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX1fcyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEgwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIscjJlPTEyLEFoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIEFoPT1udWxsJiYoQWg9TlcoSDB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoQWg9PW51bGx8fCFpc0Zpbml0ZShBaCl8fEFoPD0wKSYmKEFoPXIyZSkpLEFofWZ1bmN0aW9uIG4yZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PUFoJiYoQWg9ZSxEVyhIMHQsQWgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09TmEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVjB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LGJwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFWMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgVTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgYnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57VTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LHdwPW5ldyBVOTt2YXIgVnI9e307S3MoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT56dnQsYXJjOigpPT5EU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5vYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+aF90LGF4aXNUb3A6KCk9PnVfdCxiaXNlY3Q6KCk9PnlzLGJpc2VjdExlZnQ6KCk9PlcwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkwxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+cXZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5rMXQsY2hvcmQ6KCk9Pld2dCxjbGllbnRQb2ludDooKT0+RG0sY2x1c3RlcjooKT0+VmJ0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZjF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9Pm55dCxjcmVhdG9yOigpPT5SbSxjcm9zczooKT0+cTksY3N2OigpPT5OMXQsY3N2Rm9ybWF0OigpPT5fMXQsY3N2Rm9ybWF0Qm9keTooKT0+eTF0LGNzdkZvcm1hdFJvdzooKT0+eDF0LGNzdkZvcm1hdFJvd3M6KCk9PnYxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+YjF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PmcxdCxjdWJlaGVsaXg6KCk9PmxhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PiRTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+WlN0LGN1cnZlQnVuZGxlOigpPT5RU3QsY3VydmVDYXJkaW5hbDooKT0+dDN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9PmUzdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+cjN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+aTN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmwzdCxjdXJ2ZUxpbmVhcjooKT0+WWgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PnUzdCxjdXJ2ZU1vbm90b25lWDooKT0+ZzN0LGN1cnZlTW9ub3RvbmVZOigpPT5fM3QsY3VydmVOYXR1cmFsOigpPT54M3QsY3VydmVTdGVwOigpPT5iM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PlMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PnczdCxjdXN0b21FdmVudDooKT0+TXAsZGVzY2VuZGluZzooKT0+ajB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnZzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT56bSxkcmFnRW5hYmxlOigpPT5GbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+V20sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5QXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+UF8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+eHMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT54cyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+YTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PmFhLGZvcmNlQ2VudGVyOigpPT5WMXQsZm9yY2VDb2xsaWRlOigpPT5heHQsZm9yY2VMaW5rOigpPT5seHQsZm9yY2VNYW55Qm9keTooKT0+Znh0LGZvcmNlUmFkaWFsOigpPT5weHQsZm9yY2VTaW11bGF0aW9uOigpPT5oeHQsZm9yY2VYOigpPT5keHQsZm9yY2VZOigpPT5teHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5McCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+Q2J0LGdlb0FyZWE6KCk9Pkl4dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PkFidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5QYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+Rnh0LGdlb0NlbnRyb2lkOigpPT5HeHQsZ2VvQ2lyY2xlOigpPT4keHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+Snh0LGdlb0NsaXBSZWN0YW5nbGU6KCk9PkRwLGdlb0NvbmljQ29uZm9ybWFsOigpPT5MYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5XXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+UmJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5vYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9Pk5idCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PmtidCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PmpfLGdlb0dub21vbmljOigpPT5EYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmxidCxnZW9JZGVudGl0eTooKT0+T2J0LGdlb0ludGVycG9sYXRlOigpPT5jYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+SWJ0LGdlb01lcmNhdG9yUmF3OigpPT5ZXyxnZW9OYXR1cmFsRWFydGgxOigpPT56YnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5GYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT53YnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5CYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PlNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkhidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PnZ5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5KMHQsaHNsOigpPT5WbSxodG1sOigpPT5CMXQsaW1hZ2U6KCk9Pk8xdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+THl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PmdTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PiR3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmlTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9Pm9TdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PndTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PkVTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+WHl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+U1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+RV8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5reXQsaW50ZXJwb2xhdGVHbkJ1OigpPT5hU3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9Pl9TdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT55U3QsaW50ZXJwb2xhdGVIY2w6KCk9Pld5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pll5dCxpbnRlcnBvbGF0ZUhzbDooKT0+VXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+cXl0LGludGVycG9sYXRlSHVlOigpPT5SeXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5MU3QsaW50ZXJwb2xhdGVMYWI6KCk9Pk1fLGludGVycG9sYXRlTWFnbWE6KCk9PklTdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+c1N0LGludGVycG9sYXRlT3JhbmdlczooKT0+YlN0LGludGVycG9sYXRlUFJHbjooKT0+S3d0LGludGVycG9sYXRlUGlZRzooKT0+Wnd0LGludGVycG9sYXRlUGxhc21hOigpPT5rU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5jU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9Pkp3dCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PnVTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PnZTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlRTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9PlF3dCxpbnRlcnBvbGF0ZVJkR3k6KCk9PnRTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9PmhTdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+ZVN0LGludGVycG9sYXRlUmRZbEduOigpPT5yU3QsaW50ZXJwb2xhdGVSZWRzOigpPT54U3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnFtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pkl5dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkNTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5uU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+QVN0LGludGVycG9sYXRlVmlyaWRpczooKT0+UFN0LGludGVycG9sYXRlV2FybTooKT0+TVN0LGludGVycG9sYXRlWWxHbjooKT0+cFN0LGludGVycG9sYXRlWWxHbkJ1OigpPT5mU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PmRTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+bVN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+UXl0LGlzb0Zvcm1hdDooKT0+Tnd0LGlzb1BhcnNlOigpPT5Ed3QsanNvbjooKT0+ejF0LGtleXM6KCk9PiRMLGxhYjooKT0+d18sbGNoOigpPT5ieXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PlZTdCxsaW5rUmFkaWFsOigpPT5xU3QsbGlua1ZlcnRpY2FsOigpPT5VU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5lX3QsbWVkaWFuOigpPT5yX3QsbWVyZ2U6KCk9PkltLG1pbjooKT0+TG0sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+UGgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+SnZ0LG5vdzooKT0+QXAscGFjazooKT0+dTJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PmEydCxwYWlyczooKT0+WTB0LHBhcnRpdGlvbjooKT0+aDJ0LHBhdGg6KCk9PmJzLHBlcm11dGU6KCk9Pm5fdCxwaWU6KCk9PkJTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5seSxwb2x5Z29uQXJlYTooKT0+eDJ0LHBvbHlnb25DZW50cm9pZDooKT0+YjJ0LHBvbHlnb25Db250YWluczooKT0+RTJ0LHBvbHlnb25IdWxsOigpPT5NMnQscG9seWdvbkxlbmd0aDooKT0+VDJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+emgscXVhbnRpbGU6KCk9PnNhLHF1YW50aXplOigpPT4keXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlAydCxyYW5kb21FeHBvbmVudGlhbDooKT0+STJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5BMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5DMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5YdnQsc2NhbGVCYW5kOigpPT5RbSxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PkJ3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9Pk9uLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PnRnLHNjYWxlUG93OigpPT5LXyxzY2FsZVF1YW50aWxlOigpPT5lZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+Rnd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5VMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT56d3Qsc2NhbjooKT0+aV90LHNjaGVtZUFjY2VudDooKT0+SHd0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+Vnd0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+VXd0LHNjaGVtZVBhc3RlbDE6KCk9PnF3dCxzY2hlbWVQYXN0ZWwyOigpPT5Hd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+V3d0LHNjaGVtZVNldDI6KCk9Pll3dCxzY2hlbWVTZXQzOigpPT5qd3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+WHd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5FcCxzZWxlY3Rpb246KCk9PkloLHNlbGVjdG9yOigpPT5ObSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5lMXQsc2h1ZmZsZTooKT0+b190LHN0YWNrOigpPT5NM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlQzdCxzdGFja09mZnNldEV4cGFuZDooKT0+RTN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5DM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PkEzdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlAzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5JM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5MM3Qsc3RyYXRpZnk6KCk9PmQydCxzdHlsZTooKT0+U3Asc3VtOigpPT5hX3Qsc3ZnOigpPT5IMXQsc3ltYm9sOigpPT5qU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5ZU3QsdGV4dDooKT0+RF8sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+UTB0LHRocmVzaG9sZFNjb3R0OigpPT50X3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+eF8sdGlja1N0ZXA6KCk9PnRsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT50eSx0aW1lRGF5czooKT0+JDJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+dHd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PmoydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Wl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PlcydCx0aW1lTW9uZGF5OigpPT5yeSx0aW1lTW9uZGF5czooKT0+SzJ0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+bnd0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5ld3QsdGltZVNlY29uZDooKT0+UV8sdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9PnJnLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PnpwLHRpbWVUaHVyc2RheXM6KCk9PlEydCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5aMnQsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PkoydCx0aW1lV2VlazooKT0+cmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+R2gsdGltZVllYXJzOigpPT5pd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PkFfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5UcCx0b3VjaGVzOigpPT5peXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT5tMnQsdHJlZW1hcDooKT0+ZzJ0LHRyZWVtYXBCaW5hcnk6KCk9Pl8ydCx0cmVlbWFwRGljZTooKT0+VWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PnYydCx0cmVlbWFwU2xpY2U6KCk9PkptLHRyZWVtYXBTbGljZURpY2U6KCk9PnkydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+RDF0LHRzdkZvcm1hdDooKT0+TTF0LHRzdkZvcm1hdEJvZHk6KCk9PkUxdCx0c3ZGb3JtYXRSb3c6KCk9PkMxdCx0c3ZGb3JtYXRSb3dzOigpPT5UMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PkExdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5TMXQsdXRjRGF5OigpPT5ueSx1dGNEYXlzOigpPT51d3QsdXRjRm9ybWF0OigpPT5heSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9Pm13dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+bHd0LHV0Y01pbGxpc2Vjb25kOigpPT5aXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+YXd0LHV0Y01vbmRheTooKT0+b3ksdXRjTW9uZGF5czooKT0+aHd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnl3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+Z3d0LHV0Y1NlY29uZDooKT0+UV8sdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5uZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+RnAsdXRjVGh1cnNkYXlzOigpPT5kd3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9PmZ3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9PnB3dCx1dGNXZWVrOigpPT5uZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+V2gsdXRjWWVhcnM6KCk9PnZ3dCx2YWx1ZXM6KCk9PmkxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+cTB0LHZvcm9ub2k6KCk9PlkzdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+RjF0LHppcDooKT0+c190LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+WGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgcTB0PSI1LjcuMCI7ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9aTJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gaTJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvYShlKHQpLHIpfX12YXIgRzB0PW9iKG9hKSxXVz1HMHQucmlnaHQsVzB0PUcwdC5sZWZ0LHlzPVdXO2Z1bmN0aW9uIFkwdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBqMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT1RcyhlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9UXModChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBhYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBYMHQ9QXJyYXkucHJvdG90eXBlLCQwdD1YMHQuc2xpY2UsSzB0PVgwdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFowdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPXhfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiB4XyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gdGwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBKMHQoKXt2YXIgZT1aMHQsdD1hYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPXRsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3lzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRSgkMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBzYShlLHQscil7aWYocj09bnVsbCYmKHI9UXMpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBRMHQoZSx0LHIpe3JldHVybiBlPUswdC5jYWxsKGUsUXMpLnNvcnQob2EpLE1hdGguY2VpbCgoci10KS8oMiooc2EoZSwuNzUpLXNhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiB0X3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIGVfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1RcyhlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPVFzKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIHJfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT1RcyhlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9UXModChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBzYShvLnNvcnQob2EpLC41KX1mdW5jdGlvbiBJbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIExtKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG5fdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBpX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9b2EpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBvX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiBhX3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1MbShlLG8yZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBvMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIHNfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gbF90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LGNfdD0xZS02O2Z1bmN0aW9uIGEyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIHMyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGwyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIGMyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiB1MmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz9hMmU6czJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpsX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/YzJlOmwyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIsY190KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixjX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIodTJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiB1X3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIGhfdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1rbSgpO2ttKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBQaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiBkMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG0yZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBSbShlKXt2YXIgdD1QaChlKTtyZXR1cm4odC5sb2NhbD9tMmU6ZDJlKSh0KX1mdW5jdGlvbiBnMmUoKXt9ZnVuY3Rpb24gTm0oZSl7cmV0dXJuIGU9PW51bGw/ZzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gbV90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IE5uKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gXzJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/XzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24gZ190KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgTm4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBfX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBObihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHlfdCgpe3JldHVybiBuZXcgTm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gdl90KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgeF90PSIkIjtmdW5jdGlvbiB5MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB2MmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD14X3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD14X3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBiX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3YyZTp5MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT12X3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IE5uKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiB3X3QoKXtyZXR1cm4gbmV3IE5uKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFNfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBNX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IE5uKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gRV90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBUX3QoZSl7ZXx8KGU9eDJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IE5uKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4MmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gQ190KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIEFfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFBfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSV90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBMX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24ga190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBiMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIHcyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE0yZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBFMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBSX3QoZSx0KXt2YXIgcj1QaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/dzJlOmIyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1QyZTpFMmU6ci5sb2NhbD9NMmU6UzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEEyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFAyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBOX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0MyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9QMmU6QTJlKShlLHQscj09bnVsbD8iIjpyKSk6U3AodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBJMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEwyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gazJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIERfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0kyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9rMmU6TDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBPX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IHpfdChlKX1mdW5jdGlvbiB6X3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPU9fdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfXpfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gRl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gQl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gUjJlKGUpe3JldHVybiBmdW5jdGlvbigpe0ZfdCh0aGlzLGUpfX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Ql90KHRoaXMsZSl9fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9GX3Q6Ql90KSh0aGlzLGUpfX1mdW5jdGlvbiBIX3QoZSx0KXt2YXIgcj1PX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/RDJlOnQ/UjJlOk4yZSkocix0KSl9ZnVuY3Rpb24gTzJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB6MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFZfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9PMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0YyZTp6MmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBCMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBIMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVjJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gVV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0IyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VjJlOkgyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBVMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcV90KCl7cmV0dXJuIHRoaXMuZWFjaChVMmUpfWZ1bmN0aW9uIHEyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEdfdCgpe3JldHVybiB0aGlzLmVhY2gocTJlKX1mdW5jdGlvbiBXX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSbShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBHMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBZX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpLG49dD09bnVsbD9HMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpObSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gVzJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChXMmUpfWZ1bmN0aW9uIFkyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gajJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBYX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/ajJlOlkyZSl9ZnVuY3Rpb24gJF90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgWl90PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtfdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLX3R8fChaX3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBLX3Q7ZnVuY3Rpb24gWDJlKGUsdCxyKXtyZXR1cm4gZT1KX3QoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gSl90KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uICQyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gSzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFoyZShlLHQscil7dmFyIG49Wl90Lmhhc093blByb3BlcnR5KGUudHlwZSk/WDJlOkpfdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBRX3QoZSx0LHIpe3ZhciBuPSQyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/WjJlOksyZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBNcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiB0eXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEoyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0eXQodGhpcyxlLHQpfX1mdW5jdGlvbiBRMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdHl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGV5dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1EyZTpKMmUpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gTm4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gcnl0KCl7cmV0dXJuIG5ldyBObihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Obi5wcm90b3R5cGU9cnl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tm4sc2VsZWN0Om1fdCxzZWxlY3RBbGw6Z190LGZpbHRlcjpfX3QsZGF0YTpiX3QsZW50ZXI6eV90LGV4aXQ6d190LGpvaW46U190LG1lcmdlOk1fdCxvcmRlcjpFX3Qsc29ydDpUX3QsY2FsbDpDX3Qsbm9kZXM6QV90LG5vZGU6UF90LHNpemU6SV90LGVtcHR5OkxfdCxlYWNoOmtfdCxhdHRyOlJfdCxzdHlsZTpOX3QscHJvcGVydHk6RF90LGNsYXNzZWQ6SF90LHRleHQ6Vl90LGh0bWw6VV90LHJhaXNlOnFfdCxsb3dlcjpHX3QsYXBwZW5kOldfdCxpbnNlcnQ6WV90LHJlbW92ZTpqX3QsY2xvbmU6WF90LGRhdHVtOiRfdCxvbjpRX3QsZGlzcGF0Y2g6ZXl0fTt2YXIgSWg9cnl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IE5uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTm4oW1tlXV0sRUUpfWZ1bmN0aW9uIG55dChlKXtyZXR1cm4gSHQoUm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgdHdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKyt0d2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIERtKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRG0oZSx0KX1mdW5jdGlvbiBFcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBObihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBObihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gVHAoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRG0oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBpeXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT20oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHptKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixPbSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixPbSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLE9tLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBld2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiByd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIG53ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBpd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1ld2UsdD1yd2Uscj1ud2Usbj1pd2UsaT17fSxvPXZzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLHptKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoT20oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRm0ocXQudmlldyxjKSxPbSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLFRwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihPbSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFNcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfU1wKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBDcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUmgoKXt9dmFyIEhtPS43LGJfPTEvSG0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGtoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixvd2U9L14jKFswLTlhLWZdezMsOH0pJC8sYXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxzd2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2toLGtoLGtoXSsiXFwpJCIpLGx3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLGN3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2toLGtoLGtoLEFFXSsiXFwpJCIpLHV3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsa2gsa2hdKyJcXCkkIiksaHdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsa2gsa2gsQUVdKyJcXCkkIiksb3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NwKFJoLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmF5dCxmb3JtYXRIZXg6YXl0LGZvcm1hdEhzbDpmd2UsZm9ybWF0UmdiOnN5dCx0b1N0cmluZzpzeXR9KTtmdW5jdGlvbiBheXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBmd2UoKXtyZXR1cm4gZnl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHN5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PW93ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2x5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9YXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1zd2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWx3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1jd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9dXdlLmV4ZWMoZSkpP2h5dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PWh3ZS5leGVjKGUpKT9oeXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpveXQuaGFzT3duUHJvcGVydHkoZSk/bHl0KG95dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbHl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcChLaSxjdSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Y3l0LGZvcm1hdEhleDpjeXQsZm9ybWF0UmdiOnV5dCx0b1N0cmluZzp1eXR9KSk7ZnVuY3Rpb24gY3l0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIHV5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBoeXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBMaChlLHQscixuKX1mdW5jdGlvbiBmeXQoZSl7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBuZXcgTGgoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgUmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IExoO2lmKGUgaW5zdGFuY2VvZiBMaClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMaChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFZtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9meXQoZSk6bmV3IExoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBMaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoTGgsVm0sQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgscHl0PS45NjQyMixkeXQ9MSxteXQ9LjgyNTIxLGd5dD00LzI5LG1iPTYvMjksX3l0PTMqbWIqbWIscHdlPW1iKm1iKm1iO2Z1bmN0aW9uIHl5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBOaClyZXR1cm4gd3l0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvZHl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL3B5dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL215dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdnl0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gd18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3l5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcCh1dSx3XyxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9cHl0KnJZKHQpLGU9ZHl0KnJZKGUpLHI9bXl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+cHdlP01hdGgucG93KGUsMS8zKTplL195dCtneXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6X3l0KihlLWd5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB4eXQoZSl7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBuZXcgTmgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXl5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IE5oKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgTmgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gYnl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT94eXQoZSk6bmV3IE5oKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/eHl0KGUpOm5ldyBOaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gTmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHd5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9Q3AoTmgsZ2IsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB3eXQodGhpcykucmdiKCl9fSkpO3ZhciBUeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LFN5dD1JRSpzTCxNeXQ9SUUqb1ksRXl0PW9ZKmFZLXNMKlR5dDtmdW5jdGlvbiBkd2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNfKXJldHVybiBuZXcgU18oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oRXl0Km4rU3l0KnQtTXl0KnIpLyhFeXQrU3l0LU15dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IFNfKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGxhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kd2UoZSk6bmV3IFNfKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBTXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoU18sbGEsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKFR5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gQ3l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gbXdlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gVW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIEF5dChlKXtyZXR1cm4oZT0rZSk9PTE/S246ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P213ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gS24oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgcW09ZnVuY3Rpb24gZSh0KXt2YXIgcj1BeXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUHl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVB5dChsTCksSXl0PVB5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIEx5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24gZ3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBfd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/X3dlKGxbMF0ueCk6Z3dlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixxbSk6dmI6dCBpbnN0YW5jZW9mIHJjP3FtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIGt5dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiBSeXQoZSx0KXt2YXIgcj1VbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgTnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKk55dCxza2V3WDpNYXRoLmF0YW4obCkqTnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksRHl0LGdMO2Z1bmN0aW9uIE95dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRHl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUR5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiB6eXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIEZ5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9Rnl0KE95dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1GeXQoenl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixCeXQ9NCx5d2U9MWUtMTI7ZnVuY3Rpb24gSHl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIHZ3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB4d2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx5d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrQnl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1CeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1IeXQoXyksQz1pLyhwWSpwKSooUyp4d2Uoa0UqYitfKS12d2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvSHl0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFZ5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVZtKHQpKS5oLChyPVZtKHIpKS5oKSxpPUtuKHQucyxyLnMpLG89S24odC5sLHIubCksYT1Lbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgVXl0PVZ5dChVbSkscXl0PVZ5dChLbik7ZnVuY3Rpb24gTV8oZSx0KXt2YXIgcj1LbigoZT13XyhlKSkubCwodD13Xyh0KSkubCksbj1LbihlLmEsdC5hKSxpPUtuKGUuYix0LmIpLG89S24oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBHeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1Lbih0LmMsci5jKSxvPUtuKHQubCxyLmwpLGE9S24odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIFd5dD1HeXQoVW0pLFl5dD1HeXQoS24pO2Z1bmN0aW9uIGp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWxhKGkpKS5oLChvPWxhKG8pKS5oKSxzPUtuKGkucyxvLnMpLGw9S24oaS5sLG8ubCksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIFh5dD1qeXQoVW0pLEVfPWp5dChLbik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gJHl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9a20oKTt2YXIgeGI9MCxORT0wLFJFPTAsWnl0PTFlMyx4TCxERSxiTD0wLFRfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxKeXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gQXAoKXtyZXR1cm4gVF98fChKeXQoYndlKSxUXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gYndlKCl7VF89MH1mdW5jdGlvbiBDXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9Q18ucHJvdG90eXBlPUFfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q18scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP0FwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIEFfKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe0FwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1UXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gS3l0KCl7VF89KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxTd2UoKSxUXz0wfX1mdW5jdGlvbiB3d2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5aeXQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBTd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLVRfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dChLeXQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbCh3d2UsWnl0KSkseGI9MSxKeXQoS3l0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBReXQoZSx0LHIpe3ZhciBuPW5ldyBDXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP0FwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIE13ZT12cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxFd2U9W10sZXZ0PTAsTUw9MSxFTD0yLFNMPTMsdHZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIEdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47VHdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpNd2UsdHdlZW46RXdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmV2dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPmV2dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gVHdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPUFfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT10dnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT10dnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIHJ2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEN3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIEF3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2EodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gbnZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/Q3dlOkF3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPU9hKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9xbToocj1yYyh0KSk/KHQ9cixxbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBJd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBMd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24ga3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBSd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBOd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGl2dChlLHQpe3ZhciByPVBoKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP053ZTpSd2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Jd2U6UHdlKShyKTooci5sb2NhbD9rd2U6THdlKShyLG4sdCkpfWZ1bmN0aW9uIER3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gT3dlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gendlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmT3dlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBGd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZEd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIG92dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49UGgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD96d2U6RndlKShuLHQpKX1mdW5jdGlvbiBCd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIGF2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP0J3ZTpId2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFZ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gc3Z0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/VndlOlV3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gcXdlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBsdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHF3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIGN2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiB1dnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBHd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBXd2UoZSx0LHIpe3ZhciBuLGksbz1Hd2UodCk/QkU6T2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gaHZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goV3dlKHIsZSx0KSl9ZnVuY3Rpb24gWXdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBmdnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsWXdlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gcHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Tm0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24gZHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBqd2U9SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIG12dCgpe3JldHVybiBuZXcgandlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBYd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89U3AodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gZ3Z0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uICR3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIEt3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVNwKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxTcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBad2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1PYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9Z3Z0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gX3Z0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxYd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsZ3Z0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxLd2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goWndlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSwkd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIEp3ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gUXdlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZKd2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24geXZ0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLFF3ZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gdFNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gZVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHZ2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZVNlKGJiKHRoaXMsInRleHQiLGUpKTp0U2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gclNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBuU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmclNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24geHZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxuU2UoZSkpfWZ1bmN0aW9uIGJ2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtHbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIHd2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBpU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIEloKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisraVNlfXZhciB3Yj1JaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0OnB2dCxzZWxlY3RBbGw6ZHZ0LGZpbHRlcjpjdnQsbWVyZ2U6dXZ0LHNlbGVjdGlvbjptdnQsdHJhbnNpdGlvbjpidnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOmh2dCxhdHRyOml2dCxhdHRyVHdlZW46b3Z0LHN0eWxlOl92dCxzdHlsZVR3ZWVuOnl2dCx0ZXh0OnZ2dCx0ZXh0VHdlZW46eHZ0LHJlbW92ZTpmdnQsdHdlZW46bnZ0LGRlbGF5OmF2dCxkdXJhdGlvbjpzdnQsZWFzZTpsdnQsZW5kOnd2dH07SV8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfTtmdW5jdGlvbiBwU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1BcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIE92dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9QXAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZHbShsLGUsdCxjLGEscnx8cFNlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9SWgucHJvdG90eXBlLmludGVycnVwdD1ydnQ7SWgucHJvdG90eXBlLnRyYW5zaXRpb249T3Z0O3ZhciBkU2U9W251bGxdO2Z1bmN0aW9uIHp2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSxkU2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEZ2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBCdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEh2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltIdnQoZVswXSksSHZ0KGVbMV0pXX1mdW5jdGlvbiBtU2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBUcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LGdTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFBwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxWdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFV2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sX1NlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHlTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiB2U2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiB4U2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIHdTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gcXZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoZ1NlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD14U2Uscj12U2Usbj1iU2UsaT0hMCxvPXZzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gUHBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtNcChuZXcgRnZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9CdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6X1NlW3ldLFM9ZT09PUhMP251bGw6eVNlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP21TZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixQcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksem0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIEJ2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gVnZ0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9VnZ0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFV2dCYmZHQuYXR0cigiY3Vyc29yIixQcFt5PVV2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBGbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSx3U2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLFBwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLEd2dD1NYXRoLlBJLFZFPUd2dC8yLEtZPUd2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIFNTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uIFd2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1TU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIFl2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksTF89MWUtNixNU2U9UVktTF87ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqdnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1qdnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+TF8paWYoIShNYXRoLmFicyh1KnMtbCpjKT5MXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5MXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5MX3x8TWF0aC5hYnModGhpcy5feTEtYyk+TF8pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5NU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+TF8mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJzPWp2dDtmdW5jdGlvbiBFU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gQ1NlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBBU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gWHZ0KCl7dmFyIGU9RVNlLHQ9VFNlLHI9Q1NlLG49QVNlLGk9UFNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1ZdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPWJzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIGtTZT1BcnJheS5wcm90b3R5cGUsS0w9a1NlLnNsaWNlO2Z1bmN0aW9uIGwxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gYzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gT2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHUxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9UlNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gUlNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoTlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gTlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gRFNlKGUsdCxyKSYmT1NlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBEU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gT1NlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBoMXQoKXt9dmFyIElwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGwxdCk7ZWxzZXt2YXIgaD1hYShjKSxmPWhbMF0scD1oWzFdO3U9dGwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSksYzF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKHUxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LElwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LElwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoSXBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxJcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsSXBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsSXBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LElwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT9PaChLTC5jYWxsKGMpKTpPaChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6aDF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiB6U2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gRlNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEJTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGYxdCgpe3ZhciBlPXpTZSx0PUZTZSxyPUJTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT1PaCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz10bCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP09oKEtMLmNhbGwoeSkpOk9oKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofWttKCk7cUUoKTtJXygpO2Z1bmN0aW9uIEdTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEwxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oR1NlKX1mdW5jdGlvbiBXU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gazF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihXU2UpfXFFKCk7ZnVuY3Rpb24gWVNlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gRF8oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKFlTZSl9ZnVuY3Rpb24gUjF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksRF8odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1XbShlKTtyZXR1cm4gRF8odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgTjF0PVIxdChDYiksRDF0PVIxdChBYik7ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBqU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gejF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihqU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgRjF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxCMXQ9YWooInRleHQvaHRtbCIpLEgxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFYxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIERuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFUxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIHExdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIHExdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBHMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpcTF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIFcxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBZMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBqMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gWDF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiAkMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gSzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBaMXQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiBKMXQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIFExdChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIHR4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gcnh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBueHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gaXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiB6aChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/ZXh0OnQscj09bnVsbD9ueHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBveHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciB6YT16aC5wcm90b3R5cGU9c2oucHJvdG90eXBlO3phLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1veHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1veHQobikpO3JldHVybiBlfTt6YS5hZGQ9VTF0O3phLmFkZEFsbD1HMXQ7emEuY292ZXI9VzF0O3phLmRhdGE9WTF0O3phLmV4dGVudD1qMXQ7emEuZmluZD1YMXQ7emEucmVtb3ZlPSQxdDt6YS5yZW1vdmVBbGw9SzF0O3phLnJvb3Q9WjF0O3phLnNpemU9SjF0O3phLnZpc2l0PVExdDt6YS52aXNpdEFmdGVyPXR4dDt6YS54PXJ4dDt6YS55PWl4dDtmdW5jdGlvbiBYU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uICRTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gYXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PXpoKHQsWFNlLCRTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6RG4oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gS1NlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIHN4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBseHQoZSl7dmFyIHQ9S1NlLHI9dSxuLGk9RG4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPXN4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PXN4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLGQoKSxoKTppfSxofWttKCk7VGIoKTtmdW5jdGlvbiBjeHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiB1eHQoZSl7cmV0dXJuIGUueX12YXIgWlNlPTEwLEpTZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gaHh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPUFfKHUpLGM9dnMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PVpTZSpNYXRoLnNxcnQoZCkseD1kKkpTZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBmeHQoKXt2YXIgZSx0LHIsbj1EbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPXpoKGUsY3h0LHV4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkRuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBweHQoZSx0LHIpe3ZhciBuLGk9RG4oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpEbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6RG4oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24gZHh0KGUpe3ZhciB0PURuKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6RG4oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIG14dChlKXt2YXIgdD1EbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPURuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpEbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiBneHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE9fKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEZoKGUpe3JldHVybiBlPU9fKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIF94dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB5eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBRU2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTHAoZSl7aWYoISh0PVFTZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9THAucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiB2eHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIHh4dChlLHQpe3ZhciByPU9fKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK09fKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpneHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczp4eHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgYnh0PUFycmF5LnByb3RvdHlwZS5tYXAsd3h0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOl94dChieHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnl4dChieHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPXZ4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP3d4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1McChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz13eHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaCh0KS8zKSkpKjMtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEZoKHQpLUZoKGUpKSsxfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7U3h0KHNrLGUsdGhpcy50KSxTeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIFN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LHpfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEZfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLGNhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZFeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmRXh0W2UudHlwZV0oZSx0KX12YXIgTXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxFeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7VHh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspVHh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gVHh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmTXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/TXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1TcygpLHBrPVNzKCksQ3h0LEF4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9dDNlLHB1LmxpbmVFbmQ9ZTNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIHQzZSgpe3B1LnBvaW50PXIzZX1mdW5jdGlvbiBlM2UoKXtQeHQoQ3h0LEF4dCl9ZnVuY3Rpb24gcjNlKGUsdCl7cHUucG9pbnQ9UHh0LEN4dD1lLEF4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFB4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gSXh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gQl8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIEhfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksTXMsdWksbmwsVl8sTnh0LER4dCxMYixLRT1TcygpLFltLE5wLFJwPXtwb2ludDpfaixsaW5lU3RhcnQ6THh0LGxpbmVFbmQ6a3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JwLnBvaW50PXp4dCxScC5saW5lU3RhcnQ9bjNlLFJwLmxpbmVFbmQ9aTNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksUnAucG9pbnQ9X2osUnAubGluZVN0YXJ0PUx4dCxScC5saW5lRW5kPWt4dCxqRTwwPyhyaT0tKHVpPTE4MCksTXM9LShubD05MCkpOktFPmxlP25sPTkwOktFPC1sZSYmKE1zPS05MCksTnBbMF09cmksTnBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxNcz0tKG5sPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7WW0ucHVzaChOcD1bcmk9ZSx1aT1lXSksdDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KX1mdW5jdGlvbiBPeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPWtwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1rcChpLG4pO0hfKG8pLG89Ql8obyk7dmFyIGE9ZS1WXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypWXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPm5sJiYobmw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlZfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPE1zJiYoTXM9YykpOih0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpKSksdT9lPFZfP3JsKHJpLGUpPnJsKHJpLHVpKSYmKHVpPWUpOnJsKGUsdWkpPnJsKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5WXz9ybChyaSxlKT5ybChyaSx1aSkmJih1aT1lKTpybChlLHVpKT5ybChyaSx1aSkmJihyaT1lKX1lbHNlIFltLnB1c2goTnA9W3JpPWUsdWk9ZV0pO3Q8TXMmJihNcz10KSx0Pm5sJiYobmw9dCksTGI9cixWXz1lfWZ1bmN0aW9uIEx4dCgpe1JwLnBvaW50PU94dH1mdW5jdGlvbiBreHQoKXtOcFswXT1yaSxOcFsxXT11aSxScC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIHp4dChlLHQpe2lmKExiKXt2YXIgcj1lLVZfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIE54dD1lLER4dD10O3B1LnBvaW50KGUsdCksT3h0KGUsdCl9ZnVuY3Rpb24gbjNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gaTNlKCl7enh0KE54dCxEeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLE5wWzBdPXJpLE5wWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gcmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIG8zZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gUnh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBGeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYobmw9dWk9LShyaT1Ncz0xLzApLFltPVtdLHZvKGUsUnApLHI9WW0ubGVuZ3RoKXtmb3IoWW0uc29ydChvM2UpLHQ9MSxuPVltWzBdLG89W25dO3Q8cjsrK3QpaT1ZbVt0XSxSeHQobixpWzBdKXx8Unh0KG4saVsxXSk/KHJsKG5bMF0saVsxXSk+cmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSkscmwoaVswXSxuWzFdKT5ybChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXJsKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gWW09TnA9bnVsbCxyaT09PTEvMHx8TXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksTXNdLFt1aSxubF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixWeHQsVXh0LEZhLEJhLEhhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OkJ4dCxsaW5lRW5kOkh4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9bDNlLGR1LmxpbmVFbmQ9YzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PUJ4dCxkdS5saW5lRW5kPUh4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBCeHQoKXtkdS5wb2ludD1hM2V9ZnVuY3Rpb24gYTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLGR1LnBvaW50PXMzZSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gczNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9QmEqby1IYSppKSphKyhhPUhhKm4tRmEqbykqYSsoYT1GYSppLUJhKm4pKmEpLEZhKm4rQmEqaStIYSpvKTttays9YSx2ays9YSooRmErKEZhPW4pKSx4ays9YSooQmErKEJhPWkpKSxiays9YSooSGErKEhhPW8pKSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gSHh0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gbDNlKCl7ZHUucG9pbnQ9dTNlfWZ1bmN0aW9uIGMzZSgpe3F4dChWeHQsVXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiB1M2UoZSx0KXtWeHQ9ZSxVeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1xeHQ7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLEpFKEZhLEJhLEhhKX1mdW5jdGlvbiBxeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1CYSpvLUhhKmkscz1IYSpuLUZhKm8sbD1GYSppLUJhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEZhKyhGYT1uKSkseGsrPXUqKEJhKyhCYT1pKSksYmsrPXUqKEhhKyhIYT1vKSksSkUoRmEsQmEsSGEpfWZ1bmN0aW9uIEd4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPHpfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPHpfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKFl4dChlKSxqeHQodCxyKSk6WXh0KGUpOnR8fHI/anh0KHQscik6d2p9ZnVuY3Rpb24gV3h0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBZeHQoZSl7dmFyIHQ9V3h0KGUpO3JldHVybiB0LmludmVydD1XeHQoLWUpLHR9ZnVuY3Rpb24ganh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1YeHQoYSxpKSxvPVh4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9Ql8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIFh4dChlLHQpe3Q9b2ModCksdFswXS09ZSxIXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiAkeHQoKXt2YXIgZT1VXyhbMCwwXSksdD1VXyg5MCkscj1VXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6VV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksS3h0KG8pLEt4dChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gS3h0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9U3MoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06Y2EoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPWtwKG9jKGYpLG9jKHgpKTtIXyhMKTt2YXIgUj1rcChvLEwpO0hfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9SW0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxmM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihoM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIGgzZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBmM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxwM2UsbTNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gcDNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj1kM2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiBkM2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIG0zZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPWtwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9a3AoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1CXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixCXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBaeHQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBEcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9SW0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07Wnh0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiBKeHQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9RHAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9U3MoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDpnM2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24gZzNlKCl7UmIucG9pbnQ9eTNlLFJiLmxpbmVFbmQ9XzNlfWZ1bmN0aW9uIF8zZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24geTNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD12M2V9ZnVuY3Rpb24gdjNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLHgzZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayh4M2UpfXZhciBReHQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSx0YnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBlYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoZWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYocmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYobmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmdGJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/dGJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBlYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gcmJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTx6XyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gbmJ0KGUsdCl7cmV0dXJuISFUayhlLm1hcChiM2UpLGlidCh0KSl9ZnVuY3Rpb24gYjNlKGUpe3JldHVybiBlPWUubWFwKGlidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGlidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4oZSYmUXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UXh0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gYWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gc2J0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPWFidChvLGksOTApLHA9c2J0KHQsZSxfKSxkPWFidChzLGEsOTApLGc9c2J0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBsYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIGNidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIGptKGUpe3JldHVybiBlfXZhciBQaj1TcygpLElqPVNzKCksdWJ0LGhidCxMaixraixYbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PXczZSxYbS5saW5lRW5kPU0zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1htLmxpbmVTdGFydD1YbS5saW5lRW5kPVhtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIHczZSgpe1htLnBvaW50PVMzZX1mdW5jdGlvbiBTM2UoZSx0KXtYbS5wb2ludD1mYnQsdWJ0PUxqPWUsaGJ0PWtqPXR9ZnVuY3Rpb24gZmJ0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIE0zZSgpe2ZidCh1YnQsaGJ0KX12YXIgUmo9WG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsRTNlPXtwb2ludDpUM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gVDNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1FM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLG1idCxnYnQsQmgsSGgsbXU9e3BvaW50OnFfLGxpbmVTdGFydDpwYnQsbGluZUVuZDpkYnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVAzZSxtdS5saW5lRW5kPUkzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PXFfLG11LmxpbmVTdGFydD1wYnQsbXUubGluZUVuZD1kYnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gcV8oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIHBidCgpe211LnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXttdS5wb2ludD1BM2UscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBBM2UoZSx0KXt2YXIgcj1lLUJoLG49dC1IaCxpPXhyKHIqcituKm4pO3prKz1pKihCaCtlKS8yLEZrKz1pKihIaCt0KS8yLHpiKz1pLHFfKEJoPWUsSGg9dCl9ZnVuY3Rpb24gZGJ0KCl7bXUucG9pbnQ9cV99ZnVuY3Rpb24gUDNlKCl7bXUucG9pbnQ9TDNlfWZ1bmN0aW9uIEkzZSgpe19idChtYnQsZ2J0KX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1fYnQscV8obWJ0PUJoPWUsZ2J0PUhoPXQpfWZ1bmN0aW9uIF9idChlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7emsrPWkqKEJoK2UpLzIsRmsrPWkqKEhoK3QpLzIsemIrPWksaT1IaCplLUJoKnQsT2orPWkqKEJoK2UpLHpqKz1pKihIaCt0KSxvNSs9aSozLHFfKEJoPWUsSGg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPVNzKCksQmoseWJ0LHZidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9azNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJnhidCh5YnQsdmJ0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIGszZShlLHQpe0hrLnBvaW50PXhidCx5YnQ9YTU9ZSx2YnQ9czU9dH1mdW5jdGlvbiB4YnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpiYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1iYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBiYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gd2J0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLGptKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIFNidChlKXtyZXR1cm57c3RyZWFtOiRtKGUpfX1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIEdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBHXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBNYnQ9MTYsUjNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0QzZShlLHQpOk4zZShlKX1mdW5jdGlvbiBOM2UoZSl7cmV0dXJuICRtKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gRDNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8UjNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLE1idCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsTWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIE8zZT0kbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIHozZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIEYzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIEVidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9am0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPU8zZSh6M2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLGptKTpEcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBHXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1FYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP0VidDpGM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIFRidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gVGJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSpjYShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSpjYShzKSpjYShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFdfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFdfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gQjNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBDYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9V18oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1XXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1CM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBHXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFZoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIEFidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBQYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gWV8oZSx0KXtyZXR1cm5bZSxGXyhJYigobW4rdCkvMikpXX1ZXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIElidCgpe3JldHVybiBZaihZXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1ZXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpGXyhyL1p0KHQpKS9GXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIFlfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9Y2EobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSpjYShhKSpjYShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gTGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIGpfKGUsdCl7cmV0dXJuW2UsdF19al8uaW52ZXJ0PWpfO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShqXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSpjYShhKSpjYShsKSksW2MvbixpLWNhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiBSYnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsSDNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288SDNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8el8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBOYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVZoKGljKTtmdW5jdGlvbiBEYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gT2J0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPSRtKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1qbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsam0pOkRwKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBHXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIHpidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1WaCh3bik7ZnVuY3Rpb24gRmJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVZoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gQmJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0ZfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEhidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVjNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFUzZShlKXtyZXR1cm4gZS5yZWR1Y2UocTNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIHEzZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBHM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoVzNlLDApfWZ1bmN0aW9uIFczZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gWTNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBqM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFZidCgpe3ZhciBlPVYzZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9VTNlKHApLGYueT1HM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9WTNlKG8pLGM9ajNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIFgzZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBVYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoWDNlKX1mdW5jdGlvbiBxYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFlidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIGpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIFhidChlKXtmb3IodmFyIHQ9dGhpcyxyPSQzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uICQzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gJGJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIEtidCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBaYnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gSmJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IEttKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9WjNlKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgS20oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gSzNlKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUoSjNlKX1mdW5jdGlvbiBaM2UoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gSjNlKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIEttKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfUttLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkttLGNvdW50OlVidCxlYWNoOnFidCxlYWNoQWZ0ZXI6V2J0LGVhY2hCZWZvcmU6R2J0LHN1bTpZYnQsc29ydDpqYnQscGF0aDpYYnQsYW5jZXN0b3JzOiRidCxkZXNjZW5kYW50czpLYnQsbGVhdmVzOlpidCxsaW5rczpKYnQsY29weTpLM2V9O3ZhciBRYnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHQydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPXQydChRYnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZlMnQobyxpKT8rK3Q6KG89dE1lKG49UTNlKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gUTNlKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihyMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIGUydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIWUydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHRNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZU1lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIHIydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIGVNZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiByMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBuMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBpMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBvMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO24ydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7bjJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGkydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGkydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1vMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPW8ydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gYTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIHMydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiBPcCgpe3JldHVybiAwfWZ1bmN0aW9uIFptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiByTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB1MnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1PcDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUobDJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUoYzJ0KDEpKTpvLmVhY2hCZWZvcmUobDJ0KHJNZSkpLmVhY2hBZnRlcihKaihPcCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGMydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOlptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGwydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBjMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIFVoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gaDJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmVWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGYydD0iJCIsbk1lPXtkZXB0aDotMX0scDJ0PXt9O2Z1bmN0aW9uIGlNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBvTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24gZDJ0KCl7dmFyIGU9aU1lLHQ9b01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBLbShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWYydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9wMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZjJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09cDJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9bk1lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiBhTWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIHNNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBsTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gY01lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS20ucHJvdG90eXBlKTtmdW5jdGlvbiB1TWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9YU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dU1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2xNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoc01lKGNNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEptKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/VWgobCxyLG4saSxnP24rPWQqXy9nOm8pOkptKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiBnMnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz1PcCxhPU9wLHM9T3AsbD1PcCxjPU9wO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Wm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6Y30sdX1mdW5jdGlvbiBfMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB5MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP0ptOlVoKShlLHQscixuLGkpfXZhciB2MnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP1VoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpKbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24geDJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBiMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIHcydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gaE1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIFMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZ3MnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gTTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQoaE1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1TMnQobiksYT1TMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gRTJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBUMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgQzJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBBMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFAydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBJMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgTDJ0PUFycmF5LnByb3RvdHlwZSxYXz1MMnQubWFwLGxjPUwydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gUW0oKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFtKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBrMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gazJ0KHQoKSl9LGV9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gazJ0KFFtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIFIydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIE4ydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTpSMnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBEMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBmTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gcE1lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9eXMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gJF8oKXt2YXIgZT1OMnQsdD1OMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9wTWU6Zk1lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9RDJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0QydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiAkXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9dGwoZSx0LHIpLG87c3dpdGNoKG49THAobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD14XyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPXhfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD14XyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiBPbigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsT24oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxpbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD9YXy5jYWxsKGUsbTUpOlswLDFdLGlsKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gTzJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiB6MnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIGRNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIG1NZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIGdNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gX01lKGUpe3JldHVybiBlPT09MTA/Z01lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gRjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoTzJ0LHoydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9eU1lKG4pLG89X01lKG4pLHIoKVswXTwwPyhpPUYydChpKSxvPUYydChvKSxlKGRNZSxtTWUpKTplKE8ydCx6MnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNSgkXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIEIydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBIMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUoQjJ0KHQpLEgydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShCMnQodD0rbiksSDJ0KHQpKTp0fSxpbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiB2TWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24geE1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2Uodk1lLHhNZSk6ZShWMnQociksVjJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0saWwodCl9ZnVuY3Rpb24gS18oKXt2YXIgZT12NSgkXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsS18oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gVTJ0KCl7cmV0dXJuIEtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gZWcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09c2EoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt5cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQob2EpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbeXMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkoaWwoYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbeXMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIFpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBKXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBxMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqSl8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0pffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRXz1xMnQsc1g9cTJ0LnJhbmdlO3ZhciBHMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1HMnQsVzJ0PUcydC5yYW5nZTt2YXIgWTJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqSl8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PVkydCxqMnQ9WTJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHR5PVgydCwkMnQ9WDJ0LnJhbmdlO2Z1bmN0aW9uIGV5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciByZz1leSgwKSxyeT1leSgxKSxsWD1leSgyKSxjWD1leSgzKSx6cD1leSg0KSx1WD1leSg1KSxoWD1leSg2KSxmWD1yZy5yYW5nZSxLMnQ9cnkucmFuZ2UsWjJ0PWxYLnJhbmdlLEoydD1jWC5yYW5nZSxRMnQ9enAucmFuZ2UsdHd0PXVYLnJhbmdlLGV3dD1oWC5yYW5nZTt2YXIgcnd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PXJ3dCxud3Q9cnd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIEdoPXBYLGl3dD1wWC5yYW5nZTt2YXIgb3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9b3d0LGF3dD1vd3QucmFuZ2U7dmFyIHN3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PXN3dCxsd3Q9c3d0LnJhbmdlO3ZhciBjd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksbnk9Y3d0LHV3dD1jd3QucmFuZ2U7ZnVuY3Rpb24gaXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgbmc9aXkoMCksb3k9aXkoMSksZFg9aXkoMiksbVg9aXkoMyksRnA9aXkoNCksZ1g9aXkoNSksX1g9aXkoNikseVg9bmcucmFuZ2UsaHd0PW95LnJhbmdlLGZ3dD1kWC5yYW5nZSxwd3Q9bVgucmFuZ2UsZHd0PUZwLnJhbmdlLG13dD1nWC5yYW5nZSxnd3Q9X1gucmFuZ2U7dmFyIF93dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1fd3QseXd0PV93dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBXaD12WCx2d3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpFd3QsZTpFd3QsZjpxTWUsZzpRTWUsRzplRWUsSDpITWUsSTpWTWUsajpVTWUsTDpJd3QsbTpHTWUsTTpXTWUscDpzdCxxOlN0LFE6QXd0LHM6UHd0LFM6WU1lLHU6ak1lLFU6WE1lLFY6JE1lLHc6S01lLFc6Wk1lLHg6bnVsbCxYOm51bGwseTpKTWUsWTp0RWUsWjpyRWUsIiUiOkN3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpUd3QsZTpUd3QsZjphRWUsZzpnRWUsRzp5RWUsSDpuRWUsSTppRWUsajpvRWUsTDprd3QsbTpzRWUsTTpsRWUscDpfdCxxOmN0LFE6QXd0LHM6UHd0LFM6Y0VlLHU6dUVlLFU6aEVlLFY6ZkVlLHc6cEVlLFc6ZEVlLHg6bnVsbCxYOm51bGwseTptRWUsWTpfRWUsWjp2RWUsIiUiOkN3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOlN3dCxlOlN3dCxmOk9NZSxnOnd3dCxHOmJ3dCxIOk13dCxJOk13dCxqOmtNZSxMOkRNZSxtOkxNZSxNOlJNZSxwOkQscTpJTWUsUTpGTWUsczpCTWUsUzpOTWUsdTpFTWUsVTpUTWUsVjpDTWUsdzpNTWUsVzpBTWUseDp6LFg6VSx5Ond3dCxZOmJ3dCxaOlBNZSwiJSI6ek1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9eHd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/b3kuY2VpbChodCk6b3koaHQpLGh0PW55Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9yeS5jZWlsKGh0KTpyeShodCksaHQ9dHkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIHh3dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciB4d3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLGJNZT0vXiUvLHdNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gU01lKGUpe3JldHVybiBlLnJlcGxhY2Uod01lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKFNNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIE1NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYnd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHd3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFBNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6TWUoZSx0LHIpe3ZhciBuPWJNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEZNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEhNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBWTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFVNZShlLHQpe3JldHVybiBCcigxK3R5LmNvdW50KEdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSXd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBxTWUoZSx0KXtyZXR1cm4gSXd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gR01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gV01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWU1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gak1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBYTWUoZSx0KXtyZXR1cm4gQnIocmcuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEx3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD96cChlKTp6cC5jZWlsKGUpfWZ1bmN0aW9uICRNZShlLHQpe3JldHVybiBlPUx3dChlKSxCcih6cC5jb3VudChHaChlKSxlKSsoR2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIEtNZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBaTWUoZSx0KXtyZXR1cm4gQnIocnkuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEpNZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gUU1lKGUsdCl7cmV0dXJuIGU9THd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB0RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGVFZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/enAoZSk6enAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gckVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBUd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBuRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gaUVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBvRWUoZSx0KXtyZXR1cm4gQnIoMStueS5jb3VudChXaChlKSxlKSx0LDMpfWZ1bmN0aW9uIGt3dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gYUVlKGUsdCl7cmV0dXJuIGt3dChlLHQpKyIwMDAifWZ1bmN0aW9uIHNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGxFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHVFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gaEVlKGUsdCl7cmV0dXJuIEJyKG5nLmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBSd3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/RnAoZSk6RnAuY2VpbChlKX1mdW5jdGlvbiBmRWUoZSx0KXtyZXR1cm4gZT1Sd3QoZSksQnIoRnAuY291bnQoV2goZSksZSkrKFdoKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBwRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZEVlKGUsdCl7cmV0dXJuIEJyKG95LmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBtRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGdFZShlLHQpe3JldHVybiBlPVJ3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gX0VlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB5RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0ZwKGUpOkZwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHZFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gQ3d0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEF3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBQd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsYXksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLGF5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24geEVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIGJFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz94RWU6YXkoU1gpLE53dD1iRWU7ZnVuY3Rpb24gd0VlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFNFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP3dFZTpFNShTWCksRHd0PVNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LE1FZT1QNSo3LE93dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gRUVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBURWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsTUVlXSxbdCwxLE93dF0sW3QsMywzKk93dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj10bChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heCh0bChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChYXy5jYWxsKGssVEVlKSk6aCgpLm1hcChFRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KEdoLHY4LHJnLHR5LHk4LF84LFFfLFpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiB6d3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoV2gsdzgsbmcsbnksYjgseDgsUV8sWl8sYXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1pbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEZ3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgoeXMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQob2EpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1pbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEJ3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEh3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFZ3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFV3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIHF3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIEd3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyIFd3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIFl3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIGp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIFh3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLCR3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksS3d0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxad3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLEp3dD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksUXd0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSx0U3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLGVTdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksclN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxuU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGlTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksb1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSxhU3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLHNTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksbFN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxjU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLHVTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksaFN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxmU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLHBTdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSksZFN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSxtU3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLGdTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksX1N0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx5U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLHZTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSkseFN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxiU3Q9SWUoZSQpO2Z1bmN0aW9uIHdTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgU1N0PUVfKGxhKDMwMCwuNSwwKSxsYSgtMjQwLC41LDEpKTt2YXIgTVN0PUVfKGxhKC0xMDAsLjc1LC4zNSksbGEoODAsMS41LC44KSksRVN0PUVfKGxhKDI2MCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxrOD1sYSgpO2Z1bmN0aW9uIFRTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxDRWU9TWF0aC5QSS8zLEFFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBDU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStDRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUrQUVlKSkqdCxSOCsiIn1mdW5jdGlvbiBBU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUFN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksSVN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksTFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksa1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLGlnPU1hdGguY29zLFJTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixzeT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gTlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFBFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTEVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24ga0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBORWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvc3kocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqc3koUlN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBEU3QoKXt2YXIgZT1QRWUsdD1JRWUscj1xZSgwKSxuPW51bGwsaT1MRWUsbz1rRWUsYT1SRWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1icygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKmlnKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqaWcoZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6c3koaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKmlnKHkpLFc9ZipfdSh5KSxaPWgqaWcoUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZippZyh4KSxzdD1mKl91KHgpLFN0PWgqaWcoYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9TkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KE5TdCgobHQqX3QrS3QqY3QpLyhzeShsdCpsdCtLdCpLdCkqc3koX3QqX3QrY3QqY3QpKSkvMiksZXQ9c3koTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW2lnKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBPU3QoZSl7dGhpcy5fY29udGV4dD1lfU9TdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBZaChlKXtyZXR1cm4gbmV3IE9TdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9WWgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPWJzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1ZaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PWJzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gelN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIEZTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1GU3QsdD16U3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihZaCk7ZnVuY3Rpb24gSFN0KGUpe3RoaXMuX2N1cnZlPWV9SFN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEhTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBseShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIERFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1ERWUscj1PRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1icygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHpFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIEJFZShlLHQscixuLGkpe3ZhciBvPWx5KHQsciksYT1seSh0LHI9KHIraSkvMikscz1seShuLHIpLGw9bHkobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gVlN0KCl7cmV0dXJuIGEkKHpFZSl9ZnVuY3Rpb24gVVN0KCl7cmV0dXJuIGEkKEZFZSl9ZnVuY3Rpb24gcVN0KCl7dmFyIGU9YSQoQkVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBHU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxIRWU9R1N0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9IRWUpLG49cipHU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgVkVlPS44OTA4MTMwOTE1MjkyODUyLFdTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksVUVlPU1hdGguc2luKGhjLzEwKSpXU3QscUVlPS1NYXRoLmNvcyhoYy8xMCkqV1N0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqVkVlKSxuPVVFZSpyLGk9cUVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxHRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L0dFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIFlTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIGpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9YnMoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gWFN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1YU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiAkU3QoZSl7cmV0dXJuIG5ldyBYU3QoZSl9ZnVuY3Rpb24gS1N0KGUpe3RoaXMuX2NvbnRleHQ9ZX1LU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gWlN0KGUpe3JldHVybiBuZXcgS1N0KGUpfWZ1bmN0aW9uIEpTdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9SlN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgUVN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyBKU3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgdDN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgZTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIHIzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIG4zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW4zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGkzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IG4zdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIG8zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW8zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciBhM3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBvM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBzM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1zM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlKXt0aGlzLl9jb250ZXh0PWV9YzN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gdTN0KGUpe3JldHVybiBuZXcgYzN0KGUpfWZ1bmN0aW9uIGgzdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZjN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGgzdChvKStoM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBwM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAscDN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLHAzdCh0aGlzLHI9ZjN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZjN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24gZDN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IG0zdChlKX0oZDN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiBtM3QoZSl7dGhpcy5fY29udGV4dD1lfW0zdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiBnM3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBfM3QoZSl7cmV0dXJuIG5ldyBkM3QoZSl9ZnVuY3Rpb24gdjN0KGUpe3RoaXMuX2NvbnRleHQ9ZX12M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49eTN0KGUpLGk9eTN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB5M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyB2M3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiB3M3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIFMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiBXRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBNM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49V0VlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIEUzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBUM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEMzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIEEzdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoWUVlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBZRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUDN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gSTN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEwzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBrM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9TjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289TjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBOM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFZhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFZhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIGpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gWEVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEQzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIVhFZShvPXdvW2ldLGUsdCxyLG4pfHwhakVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gTzN0KGUpe3JldHVybiBWYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gJEVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIEtFZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gejN0KCl7Zm9yKHZhciBlPTAsdD1WYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVZhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09JEVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIEYzdChlLHQscixuKXt2YXIgaT1WYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1WYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9S0VlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1WYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBWYVtvXSl9dmFyIEIzdD1bXSxRODtmdW5jdGlvbiBaRWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gY3koZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUgzdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PUIzdC5wb3AoKXx8bmV3IFpFZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIHV5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxCM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgVTN0PVtdO2Z1bmN0aW9uIEpFZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBWM3QoZSl7dmFyIHQ9VTN0LnBvcCgpfHxuZXcgSkVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe3V5KGUpLGh5LnJlbW92ZShlKSxVM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBxM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSx1eShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLHV5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxjeShsKSxjeShjKX1mdW5jdGlvbiBHM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1oeS5fO3M7KWlmKG89VzN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LVFFZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfU8zdChlKTt2YXIgbD1WM3QoZSk7aWYoaHkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7dXkobiksaT1WM3Qobi5zaXRlKSxoeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLGN5KG4pLGN5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn11eShuKSx1eShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksY3kobiksY3koaSl9fWZ1bmN0aW9uIFczdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIFFFZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiBXM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEgzdD0xZS0xMixoeSxWYSxuMix3bztmdW5jdGlvbiB0NWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIGU1ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChlNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxWYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGh5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKEczdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKXEzdChvLmFyYyk7ZWxzZSBicmVhaztpZih6M3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtEM3QoYSxzLGwsYyksRjN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1WYSxoeT1uMj13bz1WYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZ0NWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gWTN0KCl7dmFyIGU9azN0LHQ9UjN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1rbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIGpoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1qaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBqaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IGpoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFhoPW5ldyBqaCgxLDAsMCk7aTIucHJvdG90eXBlPWpoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIFhoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBuNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIGozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8WGh9ZnVuY3Rpb24gaTVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gbzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGE1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1yNWUsdD1uNWUscj1hNWUsbj1pNWUsaT1vNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXZzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixqM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLGozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKFhoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IGpoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgamgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IGpoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtNcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7em0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxGbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9VHAodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPVRwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBYM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e1gzdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBzNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPXM1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uICQzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49JDN0KHdwLCgpPT53cC5nZXRSdW5zKCkpLHVRcj0kM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgb2c9RWUoT2UoKSwxKTtfcyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBvbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PW9nLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9b2cuZmlsdGVyKG9nLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPW9nLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07b2wudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG9sLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sb2wucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG9sLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb2wucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTtvbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sb2wpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD15XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj13cC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIix3cC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3dwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO19zKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiBLM3QoZSl7bGV0IHQ9YzVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBjNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIEszdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyICRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihmeS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49ZnkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWZ5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBmeS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTskaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJGgucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLCRoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLCRoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLCRoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpOyRoPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sJGgpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke3U1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiB1NWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIEozdD1FZShPZSgpLDEpO3ZhciBIcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9SjN0LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O0hwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtIcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLEhwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHtoNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBoNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgV0t0PUVlKE9lKCksMSksVVduPUVlKHdsKCksMSk7dmFyIExLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9TEt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgX3FlPUVlKE9lKCksMSksV289RWUod2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLEVkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKEVkfHwoRWQ9e30pKTt2YXIgZTA9NCx5cWU9NCxtQj0zLGdCPTIwLF9CPTQsa0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt5cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiB2cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgcjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiB4cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6cjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIEVkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgRWQuV0FMTF9USU1FOnJldHVybiB2cWUoKTtjYXNlIEVkLlJFTEFUSVZFOnJldHVybiB4cWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIHpzPUVlKE9lKCksMSksTW49RWUod2woKSwxKTt2YXIgdmE9RWUod2woKSwxKTtmdW5jdGlvbiBicWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgd3FlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gU3FlKGUpe2xldCB0PWJxZShlKSxyPXdxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXZhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHZhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHZhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9U3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnZhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LFV2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW1V2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBVdih0KSxyW1V2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LHF2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3ZhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgdmEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPVV2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9cXYuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgUkt0PUVlKE9lKCksMSk7dmFyIEd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKEd2fHwoR3Y9e30pKTt2YXIgTXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249R3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Hdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09R3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07Ukt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLE1xZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKHdsKCksMSk7dmFyIE9LdD0xZTQsekt0PS4wMDEsRkt0PXhuKCIuMn5lIiksRXFlPXhuKCIuNH5yIiksTkt0PXhuKCIsfiIpO2Z1bmN0aW9uIERLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOkVxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkRLdCxmb3JtYXRTaG9ydDpES3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOk5LdChlKX0sZm9ybWF0TG9uZzpOS3R9LCRHbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBLR249eG4oIjAuM35zIiksWkduPXhuKCIsLjN+ZiIpO3ZhciBUcWU9MWUzLENxZT02MCpUcWUsQXFlPTYwKkNxZSxQcWU9MjQqQXFlLEpHbj0zNjUqUHFlLFFHbj14bigiLjR+Iik7dmFyIElxZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQsQkt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBJcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgVGQ7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoVGR8fChUZD17fSkpO2Z1bmN0aW9uIEhLdChlKXtzd2l0Y2goZSl7Y2FzZSBUZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBUZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgTHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT1PbigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqTHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIE9uKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9Qkt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBIS3QoVGQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9c2EobywuMDUpLHM9c2EobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9YWEobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZSh3bCgpLDEpO3ZhciBWS3Q9RWUod2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFZLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1zYShhLC4wNSksbD1zYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIENkPUVlKHdsKCksMSk7dmFyIG4wPUVlKHdsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBuMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPXhzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmbjAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP24wLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciB4YTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoeGF8fCh4YT17fSkpO3ZhciB6Zj1jbGFzcyBleHRlbmRzIENkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT14YS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBDZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT56Zi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IXpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1DZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT14YS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZSh4YS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09eGEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09eGEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSB4YS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIHhhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHhhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEZmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEZmfHwoRmY9e30pKTt2YXIgVUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IHpmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09RmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoa0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4genMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9cjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1yMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9enMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UoZTApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9enMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD16cy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PXpzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89enMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9enMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1GZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09RmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9VUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9VS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoTXgoS2woe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIEdLdD1FZShPZSgpLDEpLG5zdD1FZSh3bCgpLDEpO19zKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgaTA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShpMHx8KGkwPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1pMC5ESVZ8fHI9PWkwLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaTAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PWkwLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PWkwLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPWkwLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTtfcyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIga3FlPVd1KGUwKSxxS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6a3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIHFLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+cUt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIocjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1GZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249R3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtHS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSxScWU9MCxOcWU9V0t0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShScWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksSG49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9GZi5MT0c6RmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLE5xZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtIbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEhuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSG4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEhuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSG4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sSG4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7SG49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sSG4pO19zKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgV3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIocjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIgUkI9e307S3MoUkIse0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pmt4ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+UGd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5JZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+TnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT5SeGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT53cH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgV3Yoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgT0I9e307S3MoT0Ise0RJU0FNQklHVUFUT1I6KCk9PkIwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PktiZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+WmJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT50MmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PmpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PlhiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+SmJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT5XYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+RDB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+ZTJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+JGJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5RYmUsc2V0U3RyaW5nOigpPT5ZYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIFlLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLGpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxzc3QpLGxzdCk7dmFyIFFzZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLEtscj0uMyxabHI9WzEsNWU2XSxHc2U9S18oKS5leHBvbmVudChLbHIpLmRvbWFpbihabHIpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgWXNlPTIwO2Z1bmN0aW9uIEpscihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtKbHIoZSk/KGpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihZS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIGpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZTEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxZc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LFlzZSl9KX1mdW5jdGlvbiBYc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uICRzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBRbHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9UWxyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gV3NlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiBLc2UoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKFdzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2IjtXc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIix0bGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBlbGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIHRjcj0iX291dHB1dF9zaGFwZXMiLGVjcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPW9jcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1yY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9bmNyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBybGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gcmNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT10Y3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemUpKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1lY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgaWNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBvY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2goaWNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBubGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGlsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9WnNlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1ac2UodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGUxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmUxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9YWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IFFzZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gWnNlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBhY3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBKc2UoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gb2xlKGUsdCl7bGV0IHI9SnNlKGUpLG49SnNlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiBhbGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBzbGUoZSx0KXtsZXQgcj1sY3IoZSksbj1jY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIHNjcihlKXtsZXQgdD1yMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1yMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGxjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1zY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBjY3IoZSx0KXtyZXR1cm4gcjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fHVjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gcjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gdWNyKGUsdCl7aWYoIW9sZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFoY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGhjcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBsbGUobyx0LHIsbiksbGxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9c2xlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gbGxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGUxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLHBjcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmUxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmaGxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZTEoIkFkZGluZyBlZGdlcyIsNDAsKCk9PntkY3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBjbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gdWxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gcGNyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiBkY3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBobGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmaGxlKGgsdCxyLG4saSxvKX0pO2xldCBzPW1jcihhKSxjPShvP19jcjpnY3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiBtY3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24gZ2NyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBfY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0seWNyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPU9uKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9T24oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP0dzZTpPbigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe2RsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7ZmxlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtwbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmRWNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh5Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBmbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gcGxlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiB2Y3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzpkbGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIGRsZShlLHQpe2UuY29yZUdyYXBoJiZ2Y3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwocGxlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZmxlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIG1sZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHhjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gYmNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmbWxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIHdjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJm1sZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIFNjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gTWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIEVjcihlLHQpe3hjcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZiY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZ3Y3IoZSksdCYmU2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJk1jcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIGdsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciB4bGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6T24oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkNjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/QWNyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZQY3IoZSl9ZnVuY3Rpb24gVGNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8VGNyKHIpLEljcihyKX0pfWZ1bmN0aW9uIGJsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt4bGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZMY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09dmxlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT12bGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBBY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LGJsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUGNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsYmxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBJY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9Pl9sZSh1KSksWmUuZWFjaChyLHU9Pl9sZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9T24oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPU9uKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIF9sZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24geWxlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIExjcihlKXtsZXQgdD15bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj15bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gdmxlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXZlLGtjcj0zMjAsUmNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gU2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIE1sZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLWtjcixmPXUudG9wK3UuaGVpZ2h0LVJjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBFbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIFRsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIENsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24gQWxlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIHdsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIE5jcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBEY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1OY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9d2xlKGQubWluLGspLEI9d2xlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFBsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtEY3IodGhpcyxzLG8sbisrKX0pfXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKHFufHwocW49e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBPY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1PY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIEZjcj0iXHhENyIsSWxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxCY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrZWxlK2Uud31mdW5jdGlvbiBSbGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7VmNyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1VjcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oRmNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIExsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBrbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke0lsZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtJbGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5CY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBIY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1rbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9a2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBWY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gSGNyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBVY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO3psZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTt6bGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9SGxlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJkdjcihjLG8sciksT2xlKGMsbyxyKSxxY3IoYSxvLHIpO2xldCB1PVljcihhLG8scik7T2xlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLFhjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHFjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIEdjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLEFsZShuLHQpfWZ1bmN0aW9uIE9sZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixGbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBGbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiBXY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gYWxlKFdjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gWWNyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9amNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gQmxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIEJsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PUtzZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gamNyKGUpe3JldHVybiAkbHR8fCgkbHQ9T24oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtQbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBIbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFZsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gWGNyKGUsdCl7bGV0IHI9UGwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtDbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksRGxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxEbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Yc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIHFuLk5PTkU6Y2FzZSBxbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PXFuLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIHFuLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgcW4uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgcW4uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBVbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPXFsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9R2xlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD1LY3IodCxzKTtaY3IoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBxbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQocWxlKG8sdCkpfSkscn1mdW5jdGlvbiBHbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPUdsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmJGNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiAkY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIEtjcihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIFpjcihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiB6bGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyh0dXIoYSxvKSxRY3IoYSxvKSk6V2xlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitKY3Ioby5hbm5vdGF0aW9uVHlwZSkrIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtydXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZldXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIEpjcihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIFFjcihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9SGxlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiBXbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gV2xlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBCbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBldXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sRmxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIHJ1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLFJsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gRWxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgbnVyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8bnVyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBZbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7TWxlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksTEgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtNSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtlY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxUbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209ZVIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksbVAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsU2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O1BsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTttUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO21QLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1VsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9WWxlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKHJsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxjbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOmljdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjppY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPW5QKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7YkgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9ZlB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PSRzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj1nbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgb2N0PXt9O0tzKG9jdCx7R3JhcGhJY29uVHlwZTooKT0+bjF9KTt2YXIgbjE7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobjF8fChuMT17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbjEuU0VSSUVTOnJldHVybiBWbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBuMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXFuLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/a0goaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P3RjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PW9jdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmTEgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZrSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksdWxlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gZ0godCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLGlQKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksb1ApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09dGxlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpZbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6amx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixRbHQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIseUgodCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PUlIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gSmx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBvdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1vdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PXFuLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1xbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PXFuLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIGpsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgZ1A9RWUoT2UoKSwxKTt2YXIgWGxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7WGxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBsY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLHNjdD1be3JlZ2V4OmxjdH1dLCRsZT1bXSxhdXI9bmV3IFNldChbcW4uQ09NUFVURV9USU1FLHFuLk1FTU9SWV0pLFBuPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXFuLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1xbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1nUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPWdQLnNvbWUoc2N0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1nUC5zb21lKCRsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PnNjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9emx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGxjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gJGxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiBhdXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5zY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj16bHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChsY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PXFuLk1FTU9SWT8oaT1OZChpLGlQKSxvPU5kKG8saVApKTpyPT09cW4uQ09NUFVURV9USU1FJiYoaT1OZChpLG9QKSxvPU5kKG8sb1ApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9cW4uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtQbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIHN1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIEtsZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBabGUoZSx0KXtyZXR1cm4ganNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6S2xlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2Z1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIEpsZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgS2xlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pmh1cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gbHVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBjdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LHV1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gaHVyKGUpe3JldHVybiBRbGUoZSxjdXIpfWZ1bmN0aW9uIGZ1cihlKXtyZXR1cm4gUWxlKGUsdXVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gUWxlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1zdXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gbHVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBlY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIEpsZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gaWxlKGMsbmxlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7amxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7WmxlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBlY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIHJjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhyY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKHJjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIGR1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiBtdXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIG5jZShlKXtsZXQgdD1lLm1hcChkdXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczptdXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW5jZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgcGNlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciBjcz17fTtLcyhjcyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT54MCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PkV1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5GZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PnNjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+YWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9PmhjZSxpc051bGxPclVuZGVmaW5lZDooKT0+d3VyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+bGNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+aWNlLG51bU1ldHJpY3M6KCk9Pm9jZSxudW1WaXNpYmxlQ29sdW1uczooKT0+eXVyLG51bVZpc2libGVIUGFyYW1zOigpPT5jY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PnVjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmZjZSxwcmV0dHlQcmludDooKT0+YjAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+dnVyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pnh1cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5NdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+U3VyLHJvdGF0ZVN0cjooKT0+YnVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+X3VyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBGZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gaWNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIG9jZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGljZShlKStvY2UoZSl9ZnVuY3Rpb24gYWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBzY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gbGNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiB4MChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9zY2UoZSx0LHIpOmxjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBhYSh0LG49PngwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIF91cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEZkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gdWNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB5dXIoZSl7cmV0dXJuIGNjZShlKSt1Y2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBhYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gdnVyKGUsdCl7cmV0dXJuIGIwKGFjZShlLHQpKX1mdW5jdGlvbiB4dXIoZSx0KXtyZXR1cm4gYjAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/aGNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09PXZvaWQgMD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBmY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gYnVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIHd1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBTdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBNdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBmY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBFdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIFFuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpBcnJheSgpLG1ldHJpY0NvbHVtbnM6QXJyYXkoKX0sY29sdW1uc1Zpc2liaWxpdHk6QXJyYXkoKSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpBcnJheSgpLG1ldHJpY0luZm9zOkFycmF5KCl9fSx0aGlzLnNlc3Npb25Hcm91cHM9W10sdGhpcy5kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcz0hMSx0aGlzLmRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zPSExLHRoaXMuX3N0YXR1c2VzPVt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX0ZBSUxVUkUiLGRpc3BsYXlOYW1lOiJGYWlsdXJlIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19SVU5OSU5HIixkaXNwbGF5TmFtZToiUnVubmluZyIsYWxsb3dlZDohMH1dLHRoaXMuX2dldEV4cGVyaW1lbnRSZXNvbHZlZD1uZXcgUHJvbWlzZSh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9wYWdlU2l6ZUlucHV0PXt2YWx1ZToiMTAwIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlTnVtYmVySW5wdXQ9e3ZhbHVlOiIxIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlQ291bnRTdHI9Ij8iLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdSx0aGlzLl9wcmV0dHlQcmludD1iMH1yZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfV9jc3ZVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwiY3N2Iil9X2pzb25VcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwianNvbiIpfV9sYXRleFVybCh0LHIpe3JldHVybiB0aGlzLl9kb3dubG9hZERhdGFVcmwodCxyLCJsYXRleCIpfV9kb3dubG9hZERhdGFVcmwodCxyLG4pe2xldCBpPXIuY29sdW1uc1Zpc2liaWxpdHk7cmV0dXJuIHRoaXMuYmFja2VuZC5nZXREb3dubG9hZFVybChuLHQsaSl9X2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzKCl7bGV0IHQ9Y3M7aWYodC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHx0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpKXJldHVybjtsZXQgcj17ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX07dGhpcy5iYWNrZW5kLmdldEV4cGVyaW1lbnQocikudGhlbihuPT57cGNlLmlzRXF1YWwobix0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsbiksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KS5maW5hbGx5KCgpPT57dGhpcy5fY29tcHV0ZURhdGFGb3VuZCgpfSl9X2NvbXB1dGVEYXRhRm91bmQoKXtsZXQgdD1Cb29sZWFuKHRoaXMuX2V4cGVyaW1lbnQmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MubGVuZ3RoPjAmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MubGVuZ3RoPjApO3RoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdCksdGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zIiwhdCl9X2NvbXB1dGVIUGFyYW1zKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixkaXNwbGF5ZWQ6aTw1LGZpbHRlcjp7fX07by5pbmZvLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpPyhvLmZpbHRlci5kb21haW5EaXNjcmV0ZT1bXSxvLmluZm8uZG9tYWluRGlzY3JldGUuZm9yRWFjaChhPT57by5maWx0ZXIuZG9tYWluRGlzY3JldGUucHVzaCh7dmFsdWU6YSxjaGVja2VkOiEwfSl9KSk6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0JPT0wiP28uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XTpvLmluZm8udHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCI/by5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX1NUUklORyI/by5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsby5pbmZvLnR5cGUpLHQucHVzaChvKX0pLHRoaXMuc2V0KCJfaHBhcmFtcyIsdCl9X2NvbXB1dGVNZXRyaWNzKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6aTw1fTt0LnB1c2gobyl9KSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOltdLG1ldHJpY0NvbHVtbnM6W119OntocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcCh0PT4oe21ldHJpY0luZm86dC5pbmZvfSkpfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKT0+e3RoaXMuY29uZmlndXJhdGlvbj17c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9fSl9X2NvbXB1dGVDb2x1bW5zVmlzaWJpbGl0eSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz9bXTp0aGlzLl9ocGFyYW1zLm1hcCh0PT50LmRpc3BsYXllZCkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKHQ9PnQuZGlzcGxheWVkKSl9X2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl7aWYoIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzKXJldHVybntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX07bGV0IHQ9dGhpcy5faHBhcmFtcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pLHI9dGhpcy5fbWV0cmljcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pO3JldHVybntocGFyYW1JbmZvczp0LG1ldHJpY0luZm9zOnJ9fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX1fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCl7aWYoISghdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOnQsY2FuY2VsbGVkOnJ9KT0+e2lmKCFyKXtpZih0LnRvdGFsU2l6ZT49MCl7bGV0IG49K3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWU7dGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvbikpKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix0LnRvdGFsU2l6ZSl9ZWxzZSB0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsIj8iKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIiwiVW5rbm93biIpO3BjdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpfX0pKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYodCE9PW51bGwpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtsZXQgdD10aGlzLHI9ITA7ZnVuY3Rpb24gbihoKXtyZXR1cm4gaC5taW4udmFsdWUhPT0iInx8aC5tYXgudmFsdWUhPT0iIn1mdW5jdGlvbiBpKGgpe2xldCBmPXQuZ2V0KGgrIi5taW4udmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD1mPT09IiI/Ii1JbmZpbml0eSI6K2YsZD1pc05hTihwKTt0LnNldChoKyIubWluLmludmFsaWQiLGQpLHI9ciYmIWQ7bGV0IGc9dC5nZXQoaCsiLm1heC52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGchPT12b2lkIDApO2xldCBfPWc9PT0iIj8iSW5maW5pdHkiOitnLHk9aXNOYU4oXyk7cmV0dXJuIHQuc2V0KGgrIi5tYXguaW52YWxpZCIseSkscj1yJiYheSxkfHx5P251bGw6e21pblZhbHVlOnAsbWF4VmFsdWU6X319ZnVuY3Rpb24gbyhoKXtsZXQgZj10LmdldChoKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD0rZixkPU51bWJlci5pc0ludGVnZXIocCkmJnA+MDtyZXR1cm4gdC5zZXQoaCsiLmludmFsaWQiLCFkKSxyPXImJmQsZD9wOm51bGx9bGV0IGE9dGhpcy5fc3RhdHVzZXMuZmlsdGVyKGg9PmguYWxsb3dlZCkubWFwKGg9PmgudmFsdWUpLHM9W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e2hwYXJhbTpoLmluZm8ubmFtZX07aC5maWx0ZXIuZG9tYWluRGlzY3JldGU/aC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZXZlcnkoZz0+Zy5jaGVja2VkKXx8KHAuZmlsdGVyRGlzY3JldGU9W10saC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaChnPT57Zy5jaGVja2VkJiZwLmZpbHRlckRpc2NyZXRlLnB1c2goZy52YWx1ZSl9KSk6aC5maWx0ZXIuaW50ZXJ2YWw/bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9ocGFyYW1zLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKTpoLmZpbHRlci5yZWdleHAmJihwLmZpbHRlclJlZ2V4cD1oLmZpbHRlci5yZWdleHApLHMucHVzaChwKX0pLHRoaXMuX21ldHJpY3MuZm9yRWFjaCgoaCxmKT0+e2xldCBwPXttZXRyaWM6aC5pbmZvLm5hbWV9O24oaC5maWx0ZXIuaW50ZXJ2YWwpJiYocC5maWx0ZXJJbnRlcnZhbD1pKCJfbWV0cmljcy4iK2YrIi5maWx0ZXIuaW50ZXJ2YWwiKSkscy5wdXNoKHApfSksdGhpcy5fc29ydEJ5SW5kZXghPT12b2lkIDAmJnRoaXMuX3NvcnREaXJlY3Rpb24hPT12b2lkIDApe2lmKCEodGhpcy5fc29ydEJ5SW5kZXggaW4gcykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIk5vIGNvbHVtbiBpbiBjb2xQYXJhbXMgd2l0aCBpbmRleCBzb3J0QnlJbmRleDogJXMiLHRoaXMuX3NvcnRCeUluZGV4KSxudWxsO3NbdGhpcy5fc29ydEJ5SW5kZXhdLm9yZGVyPXRoaXMuX3NvcnREaXJlY3Rpb249PT0wPyJPUkRFUl9BU0MiOiJPUkRFUl9ERVNDIn1sZXQgbD1vKCJfcGFnZU51bWJlcklucHV0Iil8fDAsYz1vKCJfcGFnZVNpemVJbnB1dCIpfHwwO2lmKCFyKXJldHVybiBudWxsO2xldCB1PWMqKGwtMSk7cmV0dXJue2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsYWxsb3dlZFN0YXR1c2VzOmEsY29sUGFyYW1zOnMsc3RhcnRJbmRleDp1LHNsaWNlU2l6ZTpjfX1fbWV0cmljU29ydEJ5SW5kZXgodCl7cmV0dXJuIHQrdGhpcy5faHBhcmFtcy5sZW5ndGh9fTtRbi50ZW1wbGF0ZT1RYAogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gaHlwZXJwYXJhbWV0ZXJzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5IeXBlcnBhcmFtZXRlcnM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19ocGFyYW1zfX0iIGFzPSJocGFyYW0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHBhcmFtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgY2hlY2tlZD0ie3tocGFyYW0uZGlzcGxheWVkfX0iCiAgICAgICAgICAgICAgY2xhc3M9ImhwYXJhbS1jaGVja2JveCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPCEtLSBQcmVjaXNlbHkgb25lIG9mIHRoZSB0ZW1wbGF0ZXMgYmVsb3cgd2lsbCBiZSBzdGFtcGVkLi0tPgogICAgICAgICAgICA8IS0tIDEuIEEgbGlzdCBvZiBjaGVja2JveGVzIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e2l0ZW0uY2hlY2tlZH19IgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzY3JldGUtdmFsdWUtY2hlY2tib3giCiAgICAgICAgICAgICAgICAgIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBbW19wcmV0dHlQcmludChpdGVtLnZhbHVlKV1dCiAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMi4gQSBudW1lcmljIGludGVydmFsIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAzLiBBIHJlZ2V4cCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIucmVnZXhwXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9IlJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgIDwhLS0gVE9ETyhlcmV6KTogTWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgICAgICAgICAgIG1ldHJpY3M6CiAgICAgICAgICAgICAgICAgIDEuIEFkZCBhbiAnaXNvbGF0b3InIHJhZGlvLWJ1dHRvbiB0byBzZWxlY3QganVzdCBvbmUKICAgICAgICAgICAgICAgICAgbWV0cmljIGFuZAogICAgICAgICAgICAgICAgICBoaWRlIGFsbCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAyLiBBZGQgYSAndG9nZ2xlLWFsbCcgYnV0dG9uIHRoYXQgd2lsbCBoaWRlL3VuaGlkZQogICAgICAgICAgICAgICAgICAgIGFsbCB0aGUKICAgICAgICAgICAgICAgICAgbWV0cmljcy4KICAgICAgICAgICAgICAgICAgVXNlIHNpbWlsYXIgbG9naWMvYXBwZWFyYW5jZSB0byB0aGUgcnVuLXNlbGVjdG9yIG9mCiAgICAgICAgICAgICAgICAgIHNjYWxhcnMuLS0+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7bWV0cmljLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzdGF0dXMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7c3RhdHVzLmFsbG93ZWR9fSIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNvcnRpbmc8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IlNvcnQgYnkiCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IgogICAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21ldHJpY3NdXSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IkRpcmVjdGlvbiIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gcGFnaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgTnVtYmVyIG9mIG1hdGNoaW5nIHNlc3Npb24gZ3JvdXBzOiBbW190b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0cl1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJQYWdlICMiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlTnVtYmVySW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZU51bWJlcklucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9Ik1heCAjIG9mIHNlc3Npb24gZ3JvdXBzIHBlciBwYWdlOiIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VTaXplSW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZVNpemVJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGRvd25sb2FkIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlc3Npb25Hcm91cHNSZXF1ZXN0XV0iPgogICAgICAgICAgRG93bmxvYWQgZGF0YSBhcwogICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImNzdkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuY3N2IgogICAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9Impzb25MaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmpzb24iCiAgICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJsYXRleExpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUudGV4IgogICAgICAgICAgICAgIGhyZWY9IltbX2xhdGV4VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+TGFUZVg8L2EKICAgICAgICAgICAgPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFuLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc3RhdHVzZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUW4ucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9wYWdlU2l6ZUlucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFuLnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUW4ucHJvdG90eXBlLCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCk7RShbQnQoImJhY2tlbmQiLCJleHBlcmltZW50TmFtZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpO0UoW0J0KCJfaHBhcmFtcy4qIiwiX21ldHJpY3MuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCk7UW49RShbeXQoInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxRbik7dmFyIFVjdD1FZShPZSgpLDEpO3ZhciBtY3Q9dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5jdXN0b21FbGVtZW50cyE9bnVsbCYmd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2shPT12b2lkIDA7dmFyIGkxPShlLHQscj1udWxsKT0+e2Zvcig7dCE9PXI7KXtsZXQgbj10Lm5leHRTaWJsaW5nO2UucmVtb3ZlQ2hpbGQodCksdD1ufX07dmFyIFljPWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsZ2N0PWA8IS0tJHtZY30tLT5gLGRjZT1uZXcgUmVnRXhwKGAke1ljfXwke2djdH1gKSxkMz0iJGxpdCQiLG8xPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJ0cz1bXSx0aGlzLmVsZW1lbnQ9cjtsZXQgbj1bXSxpPVtdLG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLmNvbnRlbnQsMTMzLG51bGwsITEpLGE9MCxzPS0xLGw9MCx7c3RyaW5nczpjLHZhbHVlczp7bGVuZ3RoOnV9fT10O2Zvcig7bDx1Oyl7bGV0IGg9by5uZXh0Tm9kZSgpO2lmKGg9PT1udWxsKXtvLmN1cnJlbnROb2RlPWkucG9wKCk7Y29udGludWV9aWYocysrLGgubm9kZVR5cGU9PT0xKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7bGV0IGY9aC5hdHRyaWJ1dGVzLHtsZW5ndGg6cH09ZixkPTA7Zm9yKGxldCBnPTA7ZzxwO2crKyltY2UoZltnXS5uYW1lLGQzKSYmZCsrO2Zvcig7ZC0tID4wOyl7bGV0IGc9Y1tsXSxfPUhILmV4ZWMoZylbMl0seT1fLnRvTG93ZXJDYXNlKCkrZDMseD1oLmdldEF0dHJpYnV0ZSh5KTtoLnJlbW92ZUF0dHJpYnV0ZSh5KTtsZXQgYj14LnNwbGl0KGRjZSk7dGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJhdHRyaWJ1dGUiLGluZGV4OnMsbmFtZTpfLHN0cmluZ3M6Yn0pLGwrPWIubGVuZ3RoLTF9fWgudGFnTmFtZT09PSJURU1QTEFURSImJihpLnB1c2goaCksby5jdXJyZW50Tm9kZT1oLmNvbnRlbnQpfWVsc2UgaWYoaC5ub2RlVHlwZT09PTMpe2xldCBmPWguZGF0YTtpZihmLmluZGV4T2YoWWMpPj0wKXtsZXQgcD1oLnBhcmVudE5vZGUsZD1mLnNwbGl0KGRjZSksZz1kLmxlbmd0aC0xO2ZvcihsZXQgXz0wO188ZztfKyspe2xldCB5LHg9ZFtfXTtpZih4PT09IiIpeT1ZZigpO2Vsc2V7bGV0IGI9SEguZXhlYyh4KTtiIT09bnVsbCYmbWNlKGJbMl0sZDMpJiYoeD14LnNsaWNlKDAsYi5pbmRleCkrYlsxXStiWzJdLnNsaWNlKDAsLWQzLmxlbmd0aCkrYlszXSkseT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KX1wLmluc2VydEJlZm9yZSh5LGgpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KytzfSl9ZFtnXT09PSIiPyhwLmluc2VydEJlZm9yZShZZigpLGgpLG4ucHVzaChoKSk6aC5kYXRhPWRbZ10sbCs9Z319ZWxzZSBpZihoLm5vZGVUeXBlPT09OClpZihoLmRhdGE9PT1ZYyl7bGV0IGY9aC5wYXJlbnROb2RlOyhoLnByZXZpb3VzU2libGluZz09PW51bGx8fHM9PT1hKSYmKHMrKyxmLmluc2VydEJlZm9yZShZZigpLGgpKSxhPXMsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDpzfSksaC5uZXh0U2libGluZz09PW51bGw/aC5kYXRhPSIiOihuLnB1c2goaCkscy0tKSxsKyt9ZWxzZXtsZXQgZj0tMTtmb3IoOyhmPWguZGF0YS5pbmRleE9mKFljLGYrMSkpIT09LTE7KXRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6LTF9KSxsKyt9fWZvcihsZXQgaCBvZiBuKWgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKX19LG1jZT0oZSx0KT0+e2xldCByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiByPj0wJiZlLnNsaWNlKHIpPT09dH0sdlA9ZT0+ZS5pbmRleCE9PS0xLFlmPSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxISD0vKFsgXHgwOVx4MGFceDBjXHgwZF0pKFteXDAtXHgxRlx4N0YtXHg5RiAiJz49L10rKShbIFx4MDlceDBhXHgwY1x4MGRdKj1bIFx4MDlceDBhXHgwY1x4MGRdKig/OlteIFx4MDlceDBhXHgwY1x4MGQiJ2A8Pj1dKnwiW14iXSp8J1teJ10qKSkkLzt2YXIgX2N0PTEzMztmdW5jdGlvbiB5Y3QoZSx0KXtsZXR7ZWxlbWVudDp7Y29udGVudDpyfSxwYXJ0czpufT1lLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLF9jdCxudWxsLCExKSxvPXhQKG4pLGE9bltvXSxzPS0xLGw9MCxjPVtdLHU9bnVsbDtmb3IoO2kubmV4dE5vZGUoKTspe3MrKztsZXQgaD1pLmN1cnJlbnROb2RlO2ZvcihoLnByZXZpb3VzU2libGluZz09PXUmJih1PW51bGwpLHQuaGFzKGgpJiYoYy5wdXNoKGgpLHU9PT1udWxsJiYodT1oKSksdSE9PW51bGwmJmwrKzthIT09dm9pZCAwJiZhLmluZGV4PT09czspYS5pbmRleD11IT09bnVsbD8tMTphLmluZGV4LWwsbz14UChuLG8pLGE9bltvXX1jLmZvckVhY2goaD0+aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpKX12YXIgVHVyPWU9PntsZXQgdD1lLm5vZGVUeXBlPT09MTE/MDoxLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLF9jdCxudWxsLCExKTtmb3IoO3IubmV4dE5vZGUoKTspdCsrO3JldHVybiB0fSx4UD0oZSx0PS0xKT0+e2ZvcihsZXQgcj10KzE7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYodlAobikpcmV0dXJuIHJ9cmV0dXJuLTF9O2Z1bmN0aW9uIGdjZShlLHQscj1udWxsKXtsZXR7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT1lO2lmKHI9PW51bGwpe24uYXBwZW5kQ2hpbGQodCk7cmV0dXJufWxldCBvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobixfY3QsbnVsbCwhMSksYT14UChpKSxzPTAsbD0tMTtmb3IoO28ubmV4dE5vZGUoKTspZm9yKGwrKyxvLmN1cnJlbnROb2RlPT09ciYmKHM9VHVyKHQpLHIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxyKSk7YSE9PS0xJiZpW2FdLmluZGV4PT09bDspe2lmKHM+MCl7Zm9yKDthIT09LTE7KWlbYV0uaW5kZXgrPXMsYT14UChpLGEpO3JldHVybn1hPXhQKGksYSl9fXZhciBDdXI9bmV3IFdlYWtNYXA7dmFyIGExPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iJiZDdXIuaGFzKGUpO3ZhciBMbD17fSxWSD17fTt2YXIgdzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX19wYXJ0cz1bXSx0aGlzLnRlbXBsYXRlPXQsdGhpcy5wcm9jZXNzb3I9cix0aGlzLm9wdGlvbnM9bn11cGRhdGUodCl7bGV0IHI9MDtmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uc2V0VmFsdWUodFtyXSkscisrO2ZvcihsZXQgbiBvZiB0aGlzLl9fcGFydHMpbiE9PXZvaWQgMCYmbi5jb21taXQoKX1fY2xvbmUoKXtsZXQgdD1tY3Q/dGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQuY2xvbmVOb2RlKCEwKTpkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LCEwKSxyPVtdLG49dGhpcy50ZW1wbGF0ZS5wYXJ0cyxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSksbz0wLGE9MCxzLGw9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspe2lmKHM9bltvXSwhdlAocykpe3RoaXMuX19wYXJ0cy5wdXNoKHZvaWQgMCksbysrO2NvbnRpbnVlfWZvcig7YTxzLmluZGV4OylhKyssbC5ub2RlTmFtZT09PSJURU1QTEFURSImJihyLnB1c2gobCksaS5jdXJyZW50Tm9kZT1sLmNvbnRlbnQpLChsPWkubmV4dE5vZGUoKSk9PT1udWxsJiYoaS5jdXJyZW50Tm9kZT1yLnBvcCgpLGw9aS5uZXh0Tm9kZSgpKTtpZihzLnR5cGU9PT0ibm9kZSIpe2xldCBjPXRoaXMucHJvY2Vzc29yLmhhbmRsZVRleHRFeHByZXNzaW9uKHRoaXMub3B0aW9ucyk7Yy5pbnNlcnRBZnRlck5vZGUobC5wcmV2aW91c1NpYmxpbmcpLHRoaXMuX19wYXJ0cy5wdXNoKGMpfWVsc2UgdGhpcy5fX3BhcnRzLnB1c2goLi4udGhpcy5wcm9jZXNzb3IuaGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnMobCxzLm5hbWUscy5zdHJpbmdzLHRoaXMub3B0aW9ucykpO28rK31yZXR1cm4gbWN0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fTt2YXIgX2NlPXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDplPT5lfSksUHVyPWAgJHtZY30gYCxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1yLHRoaXMudHlwZT1uLHRoaXMucHJvY2Vzc29yPWl9Z2V0SFRNTCgpe2xldCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMSxyPSIiLG49ITE7Zm9yKGxldCBpPTA7aTx0O2krKyl7bGV0IG89dGhpcy5zdHJpbmdzW2ldLGE9by5sYXN0SW5kZXhPZigiPCEtLSIpO249KGE+LTF8fG4pJiZvLmluZGV4T2YoIi0tPiIsYSsxKT09PS0xO2xldCBzPUhILmV4ZWMobyk7cz09PW51bGw/cis9bysobj9QdXI6Z2N0KTpyKz1vLnN1YnN0cigwLHMuaW5kZXgpK3NbMV0rc1syXStkMytzWzNdK1ljfXJldHVybiByKz10aGlzLnN0cmluZ3NbdF0scn1nZXRUZW1wbGF0ZUVsZW1lbnQoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLHI9dGhpcy5nZXRIVE1MKCk7cmV0dXJuIF9jZSE9PXZvaWQgMCYmKHI9X2NlLmNyZWF0ZUhUTUwocikpLHQuaW5uZXJIVE1MPXIsdH19O3ZhciBHSD1lPT5lPT09bnVsbHx8ISh0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSxVSD1lPT5BcnJheS5pc0FycmF5KGUpfHwhIShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLG0zPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmRpcnR5PSEwLHRoaXMuZWxlbWVudD10LHRoaXMubmFtZT1yLHRoaXMuc3RyaW5ncz1uLHRoaXMucGFydHM9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aC0xO2krKyl0aGlzLnBhcnRzW2ldPXRoaXMuX2NyZWF0ZVBhcnQoKX1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgYlAodGhpcyl9X2dldFZhbHVlKCl7bGV0IHQ9dGhpcy5zdHJpbmdzLHI9dC5sZW5ndGgtMSxuPXRoaXMucGFydHM7aWYocj09PTEmJnRbMF09PT0iIiYmdFsxXT09PSIiKXtsZXQgbz1uWzBdLnZhbHVlO2lmKHR5cGVvZiBvPT0ic3ltYm9sIilyZXR1cm4gU3RyaW5nKG8pO2lmKHR5cGVvZiBvPT0ic3RyaW5nInx8IVVIKG8pKXJldHVybiBvfWxldCBpPSIiO2ZvcihsZXQgbz0wO288cjtvKyspe2krPXRbb107bGV0IGE9bltvXTtpZihhIT09dm9pZCAwKXtsZXQgcz1hLnZhbHVlO2lmKEdIKHMpfHwhVUgocykpaSs9dHlwZW9mIHM9PSJzdHJpbmciP3M6U3RyaW5nKHMpO2Vsc2UgZm9yKGxldCBsIG9mIHMpaSs9dHlwZW9mIGw9PSJzdHJpbmciP2w6U3RyaW5nKGwpfX1yZXR1cm4gaSs9dFtyXSxpfWNvbW1pdCgpe3RoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHRoaXMuX2dldFZhbHVlKCkpKX19LGJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuY29tbWl0dGVyPXR9c2V0VmFsdWUodCl7dCE9PUxsJiYoIUdIKHQpfHx0IT09dGhpcy52YWx1ZSkmJih0aGlzLnZhbHVlPXQsYTEodCl8fCh0aGlzLmNvbW1pdHRlci5kaXJ0eT0hMCkpfWNvbW1pdCgpe2Zvcig7YTEodGhpcy52YWx1ZSk7KXtsZXQgdD10aGlzLnZhbHVlO3RoaXMudmFsdWU9TGwsdCh0aGlzKX10aGlzLnZhbHVlIT09TGwmJnRoaXMuY29tbWl0dGVyLmNvbW1pdCgpfX0sQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsdGhpcy5vcHRpb25zPXR9YXBwZW5kSW50byh0KXt0aGlzLnN0YXJ0Tm9kZT10LmFwcGVuZENoaWxkKFlmKCkpLHRoaXMuZW5kTm9kZT10LmFwcGVuZENoaWxkKFlmKCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdC5fX2luc2VydCh0aGlzLmVuZE5vZGU9WWYoKSl9aW5zZXJ0QWZ0ZXJQYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGU9PT1udWxsKXJldHVybjtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IHI9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLHIodGhpcyl9bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0IT09TGwmJihHSCh0KT90IT09dGhpcy52YWx1ZSYmdGhpcy5fX2NvbW1pdFRleHQodCk6dCBpbnN0YW5jZW9mIFMwP3RoaXMuX19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KTp0IGluc3RhbmNlb2YgTm9kZT90aGlzLl9fY29tbWl0Tm9kZSh0KTpVSCh0KT90aGlzLl9fY29tbWl0SXRlcmFibGUodCk6dD09PVZIPyh0aGlzLnZhbHVlPVZILHRoaXMuY2xlYXIoKSk6dGhpcy5fX2NvbW1pdFRleHQodCkpfV9faW5zZXJ0KHQpe3RoaXMuZW5kTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMuZW5kTm9kZSl9X19jb21taXROb2RlKHQpe3RoaXMudmFsdWUhPT10JiYodGhpcy5jbGVhcigpLHRoaXMuX19pbnNlcnQodCksdGhpcy52YWx1ZT10KX1fX2NvbW1pdFRleHQodCl7bGV0IHI9dGhpcy5zdGFydE5vZGUubmV4dFNpYmxpbmc7dD10PT1udWxsPyIiOnQ7bGV0IG49dHlwZW9mIHQ9PSJzdHJpbmciP3Q6U3RyaW5nKHQpO3I9PT10aGlzLmVuZE5vZGUucHJldmlvdXNTaWJsaW5nJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGE9bjp0aGlzLl9fY29tbWl0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksdGhpcy52YWx1ZT10fV9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCl7bGV0IHI9dGhpcy5vcHRpb25zLnRlbXBsYXRlRmFjdG9yeSh0KTtpZih0aGlzLnZhbHVlIGluc3RhbmNlb2YgdzAmJnRoaXMudmFsdWUudGVtcGxhdGU9PT1yKXRoaXMudmFsdWUudXBkYXRlKHQudmFsdWVzKTtlbHNle2xldCBuPW5ldyB3MChyLHQucHJvY2Vzc29yLHRoaXMub3B0aW9ucyksaT1uLl9jbG9uZSgpO24udXBkYXRlKHQudmFsdWVzKSx0aGlzLl9fY29tbWl0Tm9kZShpKSx0aGlzLnZhbHVlPW59fV9fY29tbWl0SXRlcmFibGUodCl7QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKXx8KHRoaXMudmFsdWU9W10sdGhpcy5jbGVhcigpKTtsZXQgcj10aGlzLnZhbHVlLG49MCxpO2ZvcihsZXQgbyBvZiB0KWk9cltuXSxpPT09dm9pZCAwJiYoaT1uZXcgQmQodGhpcy5vcHRpb25zKSxyLnB1c2goaSksbj09PTA/aS5hcHBlbmRJbnRvUGFydCh0aGlzKTppLmluc2VydEFmdGVyUGFydChyW24tMV0pKSxpLnNldFZhbHVlKG8pLGkuY29tbWl0KCksbisrO248ci5sZW5ndGgmJihyLmxlbmd0aD1uLHRoaXMuY2xlYXIoaSYmaS5lbmROb2RlKSl9Y2xlYXIodD10aGlzLnN0YXJ0Tm9kZSl7aTEodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fSx3UD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsbi5sZW5ndGghPT0yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIil0aHJvdyBuZXcgRXJyb3IoIkJvb2xlYW4gYXR0cmlidXRlcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIGV4cHJlc3Npb24iKTt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bn1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9ISF0aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMudmFsdWUhPT10JiYodD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwiIik6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpLHRoaXMudmFsdWU9dCksdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH19LFNQPWNsYXNzIGV4dGVuZHMgbTN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscixuKSx0aGlzLnNpbmdsZT1uLmxlbmd0aD09PTImJm5bMF09PT0iIiYmblsxXT09PSIifV9jcmVhdGVQYXJ0KCl7cmV0dXJuIG5ldyBxSCh0aGlzKX1fZ2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zaW5nbGU/dGhpcy5wYXJ0c1swXS52YWx1ZTpzdXBlci5fZ2V0VmFsdWUoKX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT10aGlzLl9nZXRWYWx1ZSgpKX19LHFIPWNsYXNzIGV4dGVuZHMgYlB7fSx5Y2U9ITE7KCgpPT57dHJ5e2xldCBlPXtnZXQgY2FwdHVyZSgpe3JldHVybiB5Y2U9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKX1jYXRjaChlKXt9fSkoKTt2YXIgTVA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMuZWxlbWVudD10LHRoaXMuZXZlbnROYW1lPXIsdGhpcy5ldmVudENvbnRleHQ9bix0aGlzLl9fYm91bmRIYW5kbGVFdmVudD1pPT50aGlzLmhhbmRsZUV2ZW50KGkpfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IG89dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLG8odGhpcyl9aWYodGhpcy5fX3BlbmRpbmdWYWx1ZT09PUxsKXJldHVybjtsZXQgdD10aGlzLl9fcGVuZGluZ1ZhbHVlLHI9dGhpcy52YWx1ZSxuPXQ9PW51bGx8fHIhPW51bGwmJih0LmNhcHR1cmUhPT1yLmNhcHR1cmV8fHQub25jZSE9PXIub25jZXx8dC5wYXNzaXZlIT09ci5wYXNzaXZlKSxpPXQhPW51bGwmJihyPT1udWxsfHxuKTtuJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucyksaSYmKHRoaXMuX19vcHRpb25zPUl1cih0KSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucykpLHRoaXMudmFsdWU9dCx0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsfWhhbmRsZUV2ZW50KHQpe3R5cGVvZiB0aGlzLnZhbHVlPT0iZnVuY3Rpb24iP3RoaXMudmFsdWUuY2FsbCh0aGlzLmV2ZW50Q29udGV4dHx8dGhpcy5lbGVtZW50LHQpOnRoaXMudmFsdWUuaGFuZGxlRXZlbnQodCl9fSxJdXI9ZT0+ZSYmKHljZT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmUsb25jZTplLm9uY2V9OmUuY2FwdHVyZSk7ZnVuY3Rpb24gdmN0KGUpe2xldCB0PXMxLmdldChlLnR5cGUpO3Q9PT12b2lkIDAmJih0PXtzdHJpbmdzQXJyYXk6bmV3IFdlYWtNYXAsa2V5U3RyaW5nOm5ldyBNYXB9LHMxLnNldChlLnR5cGUsdCkpO2xldCByPXQuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49ZS5zdHJpbmdzLmpvaW4oWWMpO3JldHVybiByPXQua2V5U3RyaW5nLmdldChuKSxyPT09dm9pZCAwJiYocj1uZXcgbzEoZSxlLmdldFRlbXBsYXRlRWxlbWVudCgpKSx0LmtleVN0cmluZy5zZXQobixyKSksdC5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfXZhciBzMT1uZXcgTWFwO3ZhciBNMD1uZXcgV2Vha01hcCx4Y3Q9KGUsdCxyKT0+e2xldCBuPU0wLmdldCh0KTtuPT09dm9pZCAwJiYoaTEodCx0LmZpcnN0Q2hpbGQpLE0wLnNldCh0LG49bmV3IEJkKE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTp2Y3R9LHIpKSksbi5hcHBlbmRJbnRvKHQpKSxuLnNldFZhbHVlKGUpLG4uY29tbWl0KCl9O3ZhciBXSD1jbGFzc3toYW5kbGVBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LHIsbixpKXtsZXQgbz1yWzBdO3JldHVybiBvPT09Ii4iP25ldyBTUCh0LHIuc2xpY2UoMSksbikucGFydHM6bz09PSJAIj9bbmV3IE1QKHQsci5zbGljZSgxKSxpLmV2ZW50Q29udGV4dCldOm89PT0iPyI/W25ldyB3UCh0LHIuc2xpY2UoMSksbildOm5ldyBtMyh0LHIsbikucGFydHN9aGFuZGxlVGV4dEV4cHJlc3Npb24odCl7cmV0dXJuIG5ldyBCZCh0KX19LHZjZT1uZXcgV0g7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cubGl0SHRtbFZlcnNpb25zfHwod2luZG93LmxpdEh0bWxWZXJzaW9ucz1bXSkpLnB1c2goIjEuNC4xIik7dmFyIGJjZT0oZSx0KT0+YCR7ZX0tLSR7dH1gLFlIPSEwO3R5cGVvZiB3aW5kb3cuU2hhZHlDU1M9PSJ1bmRlZmluZWQiP1lIPSExOnR5cGVvZiB3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tPT0idW5kZWZpbmVkIiYmKGNvbnNvbGUud2FybigiSW5jb21wYXRpYmxlIFNoYWR5Q1NTIHZlcnNpb24gZGV0ZWN0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gYXQgbGVhc3QgQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzQDIuMC4yIGFuZCBAd2ViY29tcG9uZW50cy9zaGFkeWNzc0AxLjMuMS4iKSxZSD0hMSk7dmFyIFJ1cj1lPT50PT57bGV0IHI9YmNlKHQudHlwZSxlKSxuPXMxLmdldChyKTtuPT09dm9pZCAwJiYobj17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzMS5zZXQocixuKSk7bGV0IGk9bi5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgbz10LnN0cmluZ3Muam9pbihZYyk7aWYoaT1uLmtleVN0cmluZy5nZXQobyksaT09PXZvaWQgMCl7bGV0IGE9dC5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtZSCYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbShhLGUpLGk9bmV3IG8xKHQsYSksbi5rZXlTdHJpbmcuc2V0KG8saSl9cmV0dXJuIG4uc3RyaW5nc0FycmF5LnNldCh0LnN0cmluZ3MsaSksaX0sTnVyPVsiaHRtbCIsInN2ZyJdLER1cj1lPT57TnVyLmZvckVhY2godD0+e2xldCByPXMxLmdldChiY2UodCxlKSk7ciE9PXZvaWQgMCYmci5rZXlTdHJpbmcuZm9yRWFjaChuPT57bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6aX19PW4sbz1uZXcgU2V0O0FycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKS5mb3JFYWNoKGE9PntvLmFkZChhKX0pLHljdChuLG8pfSl9KX0sd2NlPW5ldyBTZXQsT3VyPShlLHQscik9Pnt3Y2UuYWRkKGUpO2xldCBuPXI/ci5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1pO2lmKG89PT0wKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7cmV0dXJufWxldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCBjPTA7YzxvO2MrKyl7bGV0IHU9aVtjXTt1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSksYS50ZXh0Q29udGVudCs9dS50ZXh0Q29udGVudH1EdXIoZSk7bGV0IHM9bi5jb250ZW50O3I/Z2NlKHIsYSxzLmZpcnN0Q2hpbGQpOnMuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKSx3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7bGV0IGw9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJmwhPT1udWxsKXQuaW5zZXJ0QmVmb3JlKGwuY2xvbmVOb2RlKCEwKSx0LmZpcnN0Q2hpbGQpO2Vsc2UgaWYocil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2xldCBjPW5ldyBTZXQ7Yy5hZGQoYSkseWN0KHIsYyl9fSxTY2U9KGUsdCxyKT0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCJ8fCFyLnNjb3BlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgc2NvcGVOYW1lYCBvcHRpb24gaXMgcmVxdWlyZWQuIik7bGV0IG49ci5zY29wZU5hbWUsaT1NMC5oYXModCksbz1ZSCYmdC5ub2RlVHlwZT09PTExJiYhIXQuaG9zdCxhPW8mJiF3Y2UuaGFzKG4pLHM9YT9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk6dDtpZih4Y3QoZSxzLE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTpSdXIobil9LHIpKSxhKXtsZXQgbD1NMC5nZXQocyk7TTAuZGVsZXRlKHMpO2xldCBjPWwudmFsdWUgaW5zdGFuY2VvZiB3MD9sLnZhbHVlLnRlbXBsYXRlOnZvaWQgMDtPdXIobixzLGMpLGkxKHQsdC5maXJzdENoaWxkKSx0LmFwcGVuZENoaWxkKHMpLE0wLnNldCh0LGwpfSFpJiZvJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHQuaG9zdCl9O3ZhciBNY2U7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KGUsdCk9PmU7dmFyIFRjdD17dG9BdHRyaWJ1dGUoZSx0KXtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnJldHVybiBlPyIiOm51bGw7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZSE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIGU9PT1udWxsP251bGw6TnVtYmVyKGUpO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIEpTT04ucGFyc2UoZSl9cmV0dXJuIGV9fSxFY2U9KGUsdCk9PnQhPT1lJiYodD09PXR8fGU9PT1lKSxiY3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6VGN0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpFY2V9LHdjdD0xLFNjdD0xPDwyLE1jdD0xPDwzLEVjdD0xPDw0LENjdD0iZmluYWxpemVkIixnMz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PntsZXQgaT10aGlzLl9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobixyKTtpIT09dm9pZCAwJiYodGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5zZXQoaSxuKSx0LnB1c2goaSkpfSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9jbGFzc1Byb3BlcnRpZXM7dCE9PXZvaWQgMCYmdC5mb3JFYWNoKChyLG4pPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KG4scikpfX1zdGF0aWMgY3JlYXRlUHJvcGVydHkodCxyPWJjdCl7aWYodGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldCh0LHIpLHIubm9BY2Nlc3Nvcnx8dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2xldCBuPXR5cGVvZiB0PT0ic3ltYm9sIj9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtpIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQscixuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbcl19LHNldChpKXtsZXQgbz10aGlzW3RdO3RoaXNbcl09aSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LG8sbil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMmJnRoaXMuX2NsYXNzUHJvcGVydGllcy5nZXQodCl8fGJjdH1zdGF0aWMgZmluYWxpemUoKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYodC5oYXNPd25Qcm9wZXJ0eShDY3QpfHx0LmZpbmFsaXplKCksdGhpc1tDY3RdPSEwLHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXA9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLHRoaXMpKSl7bGV0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocik6W11dO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxyKXtsZXQgbj1yLmF0dHJpYnV0ZTtyZXR1cm4gbj09PSExP3ZvaWQgMDp0eXBlb2Ygbj09InN0cmluZyI/bjp0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1zdGF0aWMgX3ZhbHVlSGFzQ2hhbmdlZCh0LHIsbj1FY2Upe3JldHVybiBuKHQscil9c3RhdGljIF9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZSh0LHIpe2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyfHxUY3Qsbz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmkuZnJvbUF0dHJpYnV0ZTtyZXR1cm4gbz9vKHQsbik6dH1zdGF0aWMgX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZSh0LHIpe2lmKHIucmVmbGVjdD09PXZvaWQgMClyZXR1cm47bGV0IG49ci50eXBlLGk9ci5jb252ZXJ0ZXI7cmV0dXJuKGkmJmkudG9BdHRyaWJ1dGV8fFRjdC50b0F0dHJpYnV0ZSkodCxuKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKHQ9PnRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dCksdGhpcy5fY2hhbmdlZFByb3BlcnRpZXM9bmV3IE1hcCx0aGlzLl9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwoKX1fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuY29uc3RydWN0b3IuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG49dGhpc1tyXTtkZWxldGUgdGhpc1tyXSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXN8fCh0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9bmV3IE1hcCksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzLnNldChyLG4pfX0pfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT50aGlzW3JdPXQpLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz12b2lkIDB9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLmVuYWJsZVVwZGF0aW5nKCl9ZW5hYmxlVXBkYXRpbmcoKXt0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyIT09dm9pZCAwJiYodGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcigpLHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dm9pZCAwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3IhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbil9X3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxyLG49YmN0KXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLG89aS5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQsbik7aWYobyE9PXZvaWQgMCl7bGV0IGE9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHIsbik7aWYoYT09PXZvaWQgMClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0LGE9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyk6dGhpcy5zZXRBdHRyaWJ1dGUobyxhKSx0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZSZ+TWN0fX1fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LHIpe2lmKHRoaXMuX3VwZGF0ZVN0YXRlJk1jdClyZXR1cm47bGV0IG49dGhpcy5jb25zdHJ1Y3RvcixpPW4uX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuZ2V0KHQpO2lmKGkhPT12b2lkIDApe2xldCBvPW4uZ2V0UHJvcGVydHlPcHRpb25zKGkpO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKHIsbyksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19cmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKXtsZXQgaT0hMDtpZih0IT09dm9pZCAwKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yO249bnx8by5nZXRQcm9wZXJ0eU9wdGlvbnModCksby5fdmFsdWVIYXNDaGFuZ2VkKHRoaXNbdF0scixuLmhhc0NoYW5nZWQpPyh0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5oYXModCl8fHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzLnNldCh0LHIpLG4ucmVmbGVjdD09PSEwJiYhKHRoaXMuX3VwZGF0ZVN0YXRlJkVjdCkmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz09PXZvaWQgMCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxyKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfV9lbnF1ZXVlVXBkYXRlKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxTY3Q7dHJ5e3lpZWxkIHRoaXMuX3VwZGF0ZVByb21pc2V9Y2F0Y2gocil7fWxldCB0PXRoaXMucGVyZm9ybVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiYoeWllbGQgdCksIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZX0pfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN0YXRlJlNjdH1nZXQgaGFzVXBkYXRlZCgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZ3Y3R9cGVyZm9ybVVwZGF0ZSgpe2lmKCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGUpcmV0dXJuO3RoaXMuX2luc3RhbmNlUHJvcGVydGllcyYmdGhpcy5fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKTtsZXQgdD0hMSxyPXRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/dGhpcy51cGRhdGUocik6dGhpcy5fbWFya1VwZGF0ZWQoKX1jYXRjaChuKXt0aHJvdyB0PSExLHRoaXMuX21hcmtVcGRhdGVkKCksbn10JiYodGhpcy5fdXBkYXRlU3RhdGUmd2N0fHwodGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8d2N0LHRoaXMuZmlyc3RVcGRhdGVkKHIpKSx0aGlzLnVwZGF0ZWQocikpfV9tYXJrVXBkYXRlZCgpe3RoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmflNjdH1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fZ2V0VXBkYXRlQ29tcGxldGUoKX1fZ2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2V9c2hvdWxkVXBkYXRlKHQpe3JldHVybiEwfXVwZGF0ZSh0KXt0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyE9PXZvaWQgMCYmdGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuc2l6ZT4wJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocixuKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShuLHRoaXNbbl0scikpLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPXZvaWQgMCksdGhpcy5fbWFya1VwZGF0ZWQoKX11cGRhdGVkKHQpe31maXJzdFVwZGF0ZWQodCl7fX07TWNlPUNjdDtnM1tNY2VdPSEwO3ZhciBUY2U9RWxlbWVudC5wcm90b3R5cGUsYmlpPVRjZS5tc01hdGNoZXNTZWxlY3Rvcnx8VGNlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2YXIgakg9d2luZG93LlNoYWRvd1Jvb3QmJih3aW5kb3cuU2hhZHlDU1M9PT12b2lkIDB8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsQWN0PVN5bWJvbCgpLGwxPWNsYXNze2NvbnN0cnVjdG9yKHQscil7aWYociE9PUFjdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdGhpcy5fc3R5bGVTaGVldD09PXZvaWQgMCYmKGpIPyh0aGlzLl9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHRoaXMuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSk6dGhpcy5fc3R5bGVTaGVldD1udWxsKSx0aGlzLl9zdHlsZVNoZWV0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19LFBjdD1lPT5uZXcgbDEoU3RyaW5nKGUpLEFjdCksenVyPWU9PntpZihlIGluc3RhbmNlb2YgbDEpcmV0dXJuIGUuY3NzVGV4dDtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogJHtlfS4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApfSxDaT0oZSwuLi50KT0+e2xldCByPXQucmVkdWNlKChuLGksbyk9Pm4renVyKGkpK2VbbysxXSxlWzBdKTtyZXR1cm4gbmV3IGwxKHIsQWN0KX07KHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTt2YXIgQ2NlPXt9LEVQPWNsYXNzIGV4dGVuZHMgZzN7c3RhdGljIGdldFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlc31zdGF0aWMgX2dldFVuaXF1ZVN0eWxlcygpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3N0eWxlcyIsdGhpcykpKXJldHVybjtsZXQgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2xldCByPShvLGEpPT5vLnJlZHVjZVJpZ2h0KChzLGwpPT5BcnJheS5pc0FycmF5KGwpP3IobCxzKToocy5hZGQobCkscyksYSksbj1yKHQsbmV3IFNldCksaT1bXTtuLmZvckVhY2gobz0+aS51bnNoaWZ0KG8pKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz10PT09dm9pZCAwP1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcChyPT57aWYociBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFqSCl7bGV0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5jc3NSdWxlcykucmVkdWNlKChpLG8pPT5pK28uY3NzVGV4dCwiIik7cmV0dXJuIFBjdChuKX1yZXR1cm4gcn0pfWluaXRpYWxpemUoKXtzdXBlci5pbml0aWFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0VW5pcXVlU3R5bGVzKCksdGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHdpbmRvdy5TaGFkb3dSb290JiZ0aGlzLnJlbmRlclJvb3QgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5hZG9wdFN0eWxlcygpfWNyZWF0ZVJlbmRlclJvb3QoKXtyZXR1cm4gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyl9YWRvcHRTdHlsZXMoKXtsZXQgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7dC5sZW5ndGghPT0wJiYod2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiYhd2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdz93aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKHI9PnIuY3NzVGV4dCksdGhpcy5sb2NhbE5hbWUpOmpIP3RoaXMucmVuZGVyUm9vdC5hZG9wdGVkU3R5bGVTaGVldHM9dC5tYXAocj0+ciBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/cjpyLnN0eWxlU2hlZXQpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzVXBkYXRlZCYmd2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpfXVwZGF0ZSh0KXtsZXQgcj10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxyIT09Q2NlJiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihyLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9bi5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChpKX0pKX1yZW5kZXIoKXtyZXR1cm4gQ2NlfX07RVAuZmluYWxpemVkPSEwO0VQLnJlbmRlcj1TY2U7RVAuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTt2YXIgQWNlPTAsSWN0PXt9LGpjPShlLHQscik9PntsZXQgbj1yJiZyLm1vZHVsZUlkfHxgY3VzdG9tLXN0eWxlLW1vZHVsZS0ke0FjZSsrfWA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dD9bdF06W10pLHQuZm9yRWFjaChhPT57aWYoIShhIGluc3RhbmNlb2YgbDEpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIUljdFthXSl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpO3MuaW5uZXJIVE1MPWAKICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8c3R5bGU+JHthLnRvU3RyaW5nKCl9PC9zdHlsZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICBgO2xldCBsPWBjdXN0b20tc3R5bGUtbW9kdWxlLSR7QWNlKyt9YDtzLnJlZ2lzdGVyKGwpLEljdFthXT1sfX0pO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZihlKXtsZXQgYT1jdXN0b21FbGVtZW50cy5nZXQoZSk7YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9fZmluYWxpemVkIikmJmNvbnNvbGUud2FybihgVGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gZm9yICIke2V9IgogICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC4KICAgICAgTWFrZSBzdXJlIHRvIGFkZCBjb21wb25lbnQgc3BlY2lmaWMgc3R5bGUgbW9kdWxlcyBiZWZvcmUKICAgICAgaW1wb3J0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGN1c3RvbSBlbGVtZW50LmApLGkuc2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiLGUpfWxldCBvPXImJnIuaW5jbHVkZXx8W107aS5pbm5lckhUTUw9YAogICAgPHRlbXBsYXRlPgogICAgICAke28ubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke2F9Pjwvc3R5bGU+YCl9CiAgICAgICR7dC5tYXAoYT0+YDxzdHlsZSBpbmNsdWRlPSR7SWN0W2FdfT48L3N0eWxlPmApfQogICAgPC90ZW1wbGF0ZT4KICBgLGkucmVnaXN0ZXIobil9O3ZhciBMY3Q9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixMY3QpO3ZhciBGdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjZmZmOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMyk7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zNyk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC40NCk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41KTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjU3KTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjY0KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNzcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuODQpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogI2ZmZjsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXNoYWRlLTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby1zaGFkZS0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby1zaGFkZS04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXNoYWRlKTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgMTAwJSwgNjElKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCA5MiUsIDUzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDgwJSwgNDIlKTsgLyogaHNsKDE0NCw4MiUsMzclKTsgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuNTUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC4xMik7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCAxMDAlLCAzMiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29udHJhc3QtY29sb3I6ICNmZmY7CiAgfQpgLFBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1BjZS5pbm5lckhUTUw9YDxzdHlsZT4ke0Z1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFBjZS5jb250ZW50KTt2YXIgQnVyPUNpYAogIFt0aGVtZX49J2RhcmsnXSB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6IGhzbCgyMTQsIDM1JSwgMjElKTsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDIxNCwgNjUlLCA4NSUsIDAuMDYpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgyMTQsIDY0JSwgODIlLCAwLjIzKTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDIxNCwgNjklLCA4NCUsIDAuMzIpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgyMTQsIDc4JSwgODglLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMjE0LCA4MiUsIDkwJSwgMC42KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgyMTQsIDkxJSwgOTQlLCAwLjgpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMjE0LCA5NiUsIDk2JSwgMC45KTsKICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDAlLCAwJSwgMC4wNyk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA0JSwgMiUsIDAuMTUpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDEyJSwgNiUsIDAuMzIpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgMTYlLCA4JSwgMC40MSk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDI0JSwgMTIlLCAwLjYpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgMjglLCAxMyUsIDAuNyk7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDMzJSwgMTMlLCAwLjkpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzMyUsIDEzJSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tdGludC0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tdGludC0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tdGludC00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tdGludC01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tdGludC03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tdGludC04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tdGludCk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgODYlLCA1NSUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA4NiUsIDU1JSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiBoc2woMjE0LCAxMDAlLCA3MCUpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgNjUlLCA0MiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC41KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCA4NSUsIDQ3JSk7CiAgfQoKICBodG1sIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgY29sb3I6IHZhcigtLWx1bW8taGVhZGVyLXRleHQtY29sb3IpOwogIH0KCiAgYSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgfQoKICBjb2RlLAogIHByZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICB9CmA7amMoIiIsQnVyLHttb2R1bGVJZDoibHVtby1jb2xvciJ9KTt2YXIgSHVyPUNpYAogIDpob3N0IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcikgIWltcG9ydGFudDsKICB9CmA7amMoIiIsSHVyLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTt2YXIgSWNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7SWNlLmlubmVySFRNTD1gCiAgPHN0eWxlPgogICAgQGZvbnQtZmFjZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnbHVtby1pY29ucyc7CiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoJ3dvZmYnKTsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgfQoKICAgIGh0bWwgewogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tY2VudGVyOiAiXFxlYTAxIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiOwogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tcmlnaHQ6ICJcXGVhMDMiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtZG93bjogIlxcZWEwNCI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXJpZ2h0OiAiXFxlYTA2IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXVwOiAiXFxlYTA3IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctbGVmdDogIlxcZWEwOSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1yaWdodDogIlxcZWEwYSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7CiAgICAgIC0tbHVtby1pY29ucy1iYXItY2hhcnQ6ICJcXGVhMGMiOwogICAgICAtLWx1bW8taWNvbnMtYmVsbDogIlxcZWEwZCI7CiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGVja21hcms6ICJcXGVhMGYiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1kb3duOiAiXFxlYTEwIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXJpZ2h0OiAiXFxlYTEyIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tdXA6ICJcXGVhMTMiOwogICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiOwogICAgICAtLWx1bW8taWNvbnMtY29nOiAiXFxlYTE1IjsKICAgICAgLS1sdW1vLWljb25zLWNyb3NzOiAiXFxlYTE2IjsKICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjsKICAgICAgLS1sdW1vLWljb25zLWRyb3Bkb3duOiAiXFxlYTE4IjsKICAgICAgLS1sdW1vLWljb25zLWVkaXQ6ICJcXGVhMTkiOwogICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiOwogICAgICAtLWx1bW8taWNvbnMtZXllOiAiXFxlYTFiIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZS1kaXNhYmxlZDogIlxcZWExYyI7CiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjsKICAgICAgLS1sdW1vLWljb25zLW1pbnVzOiAiXFxlYTFlIjsKICAgICAgLS1sdW1vLWljb25zLW9yZGVyZWQtbGlzdDogIlxcZWExZiI7CiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7CiAgICAgIC0tbHVtby1pY29ucy1waG90bzogIlxcZWEyMSI7CiAgICAgIC0tbHVtby1pY29ucy1wbGF5OiAiXFxlYTIyIjsKICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiOwogICAgICAtLWx1bW8taWNvbnMtcmVkbzogIlxcZWEyNCI7CiAgICAgIC0tbHVtby1pY29ucy1yZWxvYWQ6ICJcXGVhMjUiOwogICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjsKICAgICAgLS1sdW1vLWljb25zLXVuZG86ICJcXGVhMjciOwogICAgICAtLWx1bW8taWNvbnMtdW5vcmRlcmVkLWxpc3Q6ICJcXGVhMjgiOwogICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjsKICAgICAgLS1sdW1vLWljb25zLXVzZXI6ICJcXGVhMmEiOwogICAgfQogIDwvc3R5bGU+CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChJY2UuY29udGVudCk7dmFyIFZ1cj1DaWAKICA6aG9zdCB7CiAgICAtLWx1bW8tc2l6ZS14czogMS42MjVyZW07CiAgICAtLWx1bW8tc2l6ZS1zOiAxLjg3NXJlbTsKICAgIC0tbHVtby1zaXplLW06IDIuMjVyZW07CiAgICAtLWx1bW8tc2l6ZS1sOiAyLjc1cmVtOwogICAgLS1sdW1vLXNpemUteGw6IDMuNXJlbTsKCiAgICAvKiBJY29ucyAqLwogICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07CiAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pOwogIH0KYCxMY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtMY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtWdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChMY2UuY29udGVudCk7dmFyIFV1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsa2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7a2NlLmlubmVySFRNTD1gPHN0eWxlPiR7VXVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoa2NlLmNvbnRlbnQpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtczogMC4yNWVtOyAvKiBDaGVja2JveCwgYmFkZ2UsIGRhdGUtcGlja2VyIHllYXIgaW5kaWNhdG9yLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLW06IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cywgMC4yNWVtKTsgLyogQnV0dG9uLCB0ZXh0IGZpZWxkLCBtZW51IG92ZXJsYXksIGV0YyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtbDogMC41ZW07IC8qIERpYWxvZywgbm90aWZpY2F0aW9uLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzOiAwLjI1ZW07IC8qIERlcHJlY2F0ZWQgKi8KCiAgICAvKiBTaGFkb3cgKi8KICAgIC0tbHVtby1ib3gtc2hhZG93LXhzOiAwIDFweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXM6IDAgMnB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDNweCAxMnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1tOiAwIDJweCA2cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCA4cHggMjRweCAtNHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbDogMCAzcHggMThweCAtMnB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDEycHggNDhweCAtNnB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3cteGw6IDAgNHB4IDI0cHggLTNweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxOHB4IDY0cHggLThweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKCiAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi8KICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0OwogIH0KYCxSY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtSY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtxdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChSY2UuY29udGVudCk7dmFyIEd1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi8KICAgIC0tbHVtby1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7CgogICAgLyogRm9udCBzaXplcyAqLwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IDAuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhzOiAwLjgxMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXM6IDAuODc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTsKCiAgICAvKiBMaW5lIGhlaWdodHMgKi8KICAgIC0tbHVtby1saW5lLWhlaWdodC14czogMS4yNTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1zOiAxLjM3NTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1tOiAxLjYyNTsKICB9CmAsTmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7TmNlLmlubmVySFRNTD1gPHN0eWxlPiR7R3VyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTmNlLmNvbnRlbnQpO3ZhciBXdXI9Q2lgCiAgaHRtbCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqLwogIDpob3N0IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgc21hbGwsCiAgW3RoZW1lfj0nZm9udC1zaXplLXMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgfQoKICBbdGhlbWV+PSdmb250LXNpemUteHMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgfQoKICBoMSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgaDIgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoMyB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDQgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1sKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDUgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTsKICB9CgogIGg2IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KCiAgcCwKICBibG9ja3F1b3RlIHsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQoKICBhOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgaHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgaGVpZ2h0OiAxcHg7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiB2YXIoLS1sdW1vLXNwYWNlLXMpIGNhbGModmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pIC8gMik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CgogIGIsCiAgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogIGJsb2NrcXVvdGVbZGlyPSdydGwnXSB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KYDtqYygiIixXdXIse21vZHVsZUlkOiJsdW1vLXR5cG9ncmFwaHkifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO3ZhciBEY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0aGVtZTp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSkscj09PSJ0aGVtZSImJnRoaXMuX3NldFRoZW1lKGkpfX07dmFyIFhIPWU9PmNsYXNzIGV4dGVuZHMgRGNlKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0IHI9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5fdGVtcGxhdGU7biYmQXJyYXkuZnJvbShuLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbaW5jbHVkZV0iKSkuZm9yRWFjaChpPT57dGhpcy5faW5jbHVkZVN0eWxlKGkuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIikscil9KSx0aGlzLl9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil9c3RhdGljIF9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil7bGV0IGk9b3UucHJvdG90eXBlLm1vZHVsZXMsbz0hMSxhPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhpKS5zb3J0KChzLGwpPT57bGV0IGM9cy5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLHU9bC5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLGg9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLGY9aC5maWx0ZXIoZD0+cy5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjAscD1oLmZpbHRlcihkPT5sLmluZGV4T2YoZCk9PT0wKS5sZW5ndGg+MDtyZXR1cm4gYyE9PXU/Yz8tMToxOmYhPT1wP2Y/LTE6MTowfSkuZm9yRWFjaChzPT57aWYocyE9PWEpe2xldCBsPWlbc10uZ2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiKTtsJiZsLnNwbGl0KCIgIikuZm9yRWFjaChjPT57bmV3IFJlZ0V4cCgiXiIrYy5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobz0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocyxyKSl9KX19KSwhbyYmaVthXSYmdGhpcy5faW5jbHVkZVN0eWxlKGEscil9c3RhdGljIF9pbmNsdWRlU3R5bGUocixuKXtpZihuJiYhbi5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2luY2x1ZGU9IiR7cn0iXWApKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJpbmNsdWRlIixyKSxuLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSl9fX07dmFyIGtjdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntrY3Q9ITB9LHtjYXB0dXJlOiEwfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntrY3Q9ITF9LHtjYXB0dXJlOiEwfSk7dmFyIFl1cj1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fX19LE9jZT1lPT5jbGFzcyBleHRlbmRzIFl1cihlKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57ci5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyhyLnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOnIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCkhPT0tMSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX3NldEZvY3VzZWQoITApfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3NldEZvY3VzZWQoITEpKSxzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscj0+eyFyLmRlZmF1bHRQcmV2ZW50ZWQmJnIua2V5Q29kZT09PTkmJnIuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKT0+dGhpcy5faXNTaGlmdFRhYmJpbmc9ITEsMCkpfSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzQXR0cmlidXRlKCJmb2N1c2VkIikmJnRoaXMuX3NldEZvY3VzZWQoITEpfV9zZXRGb2N1c2VkKHIpe3I/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzZWQiLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXNlZCIpLHImJmtjdD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1cy1yaW5nIil9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB3aW5kb3cuY29uc29sZS53YXJuKGBQbGVhc2UgaW1wbGVtZW50IHRoZSAnZm9jdXNFbGVtZW50JyBwcm9wZXJ0eSBpbiA8JHt0aGlzLmxvY2FsTmFtZX0+YCksdGhpc31fZm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuX2lzU2hpZnRUYWJiaW5nfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Zm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1ibHVyKCl7IXRoaXMuZm9jdXNFbGVtZW50fHwodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHIpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXIscj8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih0eXBlb2YgdGhpcy5fcHJldmlvdXNUYWJJbmRleCE9InVuZGVmaW5lZCImJih0aGlzLnRhYmluZGV4PXRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIikpfV90YWJpbmRleENoYW5nZWQocil7ciE9PXZvaWQgMCYmKHRoaXMuZm9jdXNFbGVtZW50LnRhYkluZGV4PXIpLHRoaXMuZGlzYWJsZWQmJnRoaXMudGFiaW5kZXgmJih0aGlzLnRhYmluZGV4IT09LTEmJih0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMudGFiaW5kZXgpLHRoaXMudGFiaW5kZXg9cj12b2lkIDApfWNsaWNrKCl7dGhpcy5kaXNhYmxlZHx8c3VwZXIuY2xpY2soKX19O3ZhciBqdXI9L1wvXCpcKlxzK3ZhYWRpbi1kZXYtbW9kZTpzdGFydChbXHNcU10qKXZhYWRpbi1kZXYtbW9kZTplbmRccytcKlwqXC8vaSwkSD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIFh1cigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4hMH1yZXR1cm4gemNlKGUpfWZ1bmN0aW9uICR1cigpe3RyeXtyZXR1cm4gS3VyKCk/ITA6WnVyKCk/JEg/IUp1cigpOiFYdXIoKTohMX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gS3VyKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9ZnVuY3Rpb24gWnVyKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9ZnVuY3Rpb24gSnVyKCl7cmV0dXJuISEoJEgmJk9iamVjdC5rZXlzKCRIKS5tYXAodD0+JEhbdF0pLmZpbHRlcih0PT50LnByb2R1Y3Rpb25Nb2RlKS5sZW5ndGg+MCl9ZnVuY3Rpb24gemNlKGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCByPWp1ci5leGVjKGUudG9TdHJpbmcoKSk7aWYocil0cnl7ZT1uZXcgRnVuY3Rpb24oclsxXSl9Y2F0Y2gobil7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLG4pfXJldHVybiBlKHQpfXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307dmFyIFJjdD1mdW5jdGlvbihlLHQpe2lmKHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlKXJldHVybiB6Y2UoZSx0KX07d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9PT12b2lkIDAmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT0kdXIoKSk7ZnVuY3Rpb24gUXVyKCl7fXZhciBGY2U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmN0PT0iZnVuY3Rpb24iKXJldHVybiBSY3QoUXVyKX07dmFyIF8zPWNsYXNze3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC50ZXh0Q29udGVudD0iQUJDRCIsdC5kaXI9InJ0bCIsdC5zdHlsZS5mb250U2l6ZT0iMTRweCIsdC5zdHlsZS53aWR0aD0iNHB4Iix0LnN0eWxlLmhlaWdodD0iMXB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Ii0xMDAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtsZXQgcj0icmV2ZXJzZSI7cmV0dXJuIHQuc2Nyb2xsTGVmdD4wP3I9ImRlZmF1bHQiOih0LnNjcm9sbExlZnQ9Mix0LnNjcm9sbExlZnQ8MiYmKHI9Im5lZ2F0aXZlIikpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkscn1zdGF0aWMgZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4pe2xldHtzY3JvbGxMZWZ0Oml9PW47aWYociE9PSJydGwifHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LHIsbixpKXtpZihyIT09InJ0bCJ8fCF0KXtuLnNjcm9sbExlZnQ9aTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pO2JyZWFrfX19O3ZhciBFMD1bXSx0aHI9ZnVuY3Rpb24oKXtsZXQgZT1EY3QoKTtFMC5mb3JFYWNoKHQ9PntOY3QodCxlKX0pfSxLSCxlaHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhyKTtlaHIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTt2YXIgTmN0PWZ1bmN0aW9uKGUsdCxyPWUuZ2V0QXR0cmlidXRlKCJkaXIiKSl7dD9lLnNldEF0dHJpYnV0ZSgiZGlyIix0KTpyIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9LERjdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKX0sWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksS0h8fChLSD1fMy5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksTmN0KHRoaXMsRGN0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSl7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKSxyIT09ImRpciIpcmV0dXJuO2xldCBvPURjdCgpLGE9aT09PW8mJkUwLmluZGV4T2YodGhpcyk9PT0tMSxzPSFpJiZuJiZFMC5pbmRleE9mKHRoaXMpPT09LTE7YXx8cz8odGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLG8saSkpOmkhPT1vJiZuPT09byYmdGhpcy5fX3N1YnNjcmliZSghMSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX19zdWJzY3JpYmUoITEpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpe2k9PT0iZGlyIiYmbj09PSIiJiYhci5oYXNBdHRyaWJ1dGUoImRpciIpfHxzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKXtyPT09ImRpciImJiFuP3RoaXMuZGlyPSIiOnN1cGVyLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKX1fX3N1YnNjcmliZShyPSEwKXtyP0UwLmluZGV4T2YodGhpcyk9PT0tMSYmRTAucHVzaCh0aGlzKTpFMC5pbmRleE9mKHRoaXMpPi0xJiZFMC5zcGxpY2UoRTAuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIpe3JldHVybiBfMy5nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChLSCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHIpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQocixuKXtyZXR1cm4gXzMuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyLG4pfX07d2luZG93LlZhYWRpbj13aW5kb3cuVmFhZGlufHx7fTt3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXtGY2UoKX07dmFyIE9jdCxCY2U9bmV3IFNldCxKSD1lPT5jbGFzcyBleHRlbmRzIFpIKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0e2lzOnJ9PXRoaXM7ciYmIUJjZS5oYXMocikmJih3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnMucHVzaCh0aGlzKSxCY2UuYWRkKHIpLHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2smJihPY3Q9c3IuZGVib3VuY2UoT2N0LGt4LCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSksSmwoT2N0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxkb2N1bWVudC5kb2N0eXBlPT09bnVsbCYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19O3ZhciBRSD1jbGFzcyBleHRlbmRzIEpIKE9jZShYSCh5aChtdCkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBRYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGxhYmVsPgogICAgICAgIDxzcGFuIHBhcnQ9ImNoZWNrYm94Ij4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIKICAgICAgICAgICAgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iCiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9Int7aW5kZXRlcm1pbmF0ZTo6Y2hhbmdlfX0iCiAgICAgICAgICAgIHJvbGU9InByZXNlbnRhdGlvbiIKICAgICAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgICAgLz4KICAgICAgICA8L3NwYW4+CgogICAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvbGFiZWw+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWNoZWNrYm94In1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbmRldGVybWluYXRlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIn0sX25hdGl2ZUNoZWNrYm94Ont0eXBlOk9iamVjdH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm5hbWV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtsZXQgdD10aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpO3QmJih0aGlzLm5hbWU9dCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0ibGFiZWwiXScpLnF1ZXJ5U2VsZWN0b3IoInNsb3QiKS5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZS5iaW5kKHRoaXMpKSx0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpfV91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpe2xldCB0PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKSxyPXQuZmlyc3RFbGVtZW50Q2hpbGQuYXNzaWduZWROb2RlcygpO3RoaXMuX2lzQXNzaWduZWROb2Rlc0VtcHR5KHIpP3Quc2V0QXR0cmlidXRlKCJlbXB0eSIsIiIpOnQucmVtb3ZlQXR0cmlidXRlKCJlbXB0eSIpfV9pc0Fzc2lnbmVkTm9kZXNFbXB0eSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09MSYmdFswXS5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnRbMF0udGV4dENvbnRlbnQudHJpbSgpPT09IiJ9X2NoZWNrZWRDaGFuZ2VkKHQpe3RoaXMuaW5kZXRlcm1pbmF0ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIixCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmNoZWNrZWQpfV9hZGRBY3RpdmVMaXN0ZW5lcnMoKXt0aGlzLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsImRvd24iLHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJ1cCIsKCk9PnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhY3RpdmUiKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKSl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpfV9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KXtyZXR1cm4hKHRoaXMuZGlzYWJsZWR8fHQudGFyZ2V0LmxvY2FsTmFtZT09PSJhIil9X2hhbmRsZUNsaWNrKHQpe3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYodGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmluZGV0ZXJtaW5hdGU9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSk6dC5jb21wb3NlZFBhdGgoKVswXSE9PXRoaXMuX25hdGl2ZUNoZWNrYm94JiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSkpfV90b2dnbGVDaGVja2VkKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7Y29tcG9zZWQ6ITEsYnViYmxlczohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShRSC5pcyxRSCk7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKCiAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdCk7CiAgICB9CgogICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLWJvcmRlciddKSkgewogICAgICBib3JkZXI6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ2VsbCBzdHlsZXMgKi8KCiAgICBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1tKTsKICAgIH0KCiAgICAvKiBBcHBseSByb3cgYm9yZGVycyBieSBkZWZhdWx0IGFuZCBpbnRyb2R1Y2UgdGhlICJuby1yb3ctYm9yZGVycyIgdmFyaWFudCAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogSGlkZSBmaXJzdCBib2R5IHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLW0pIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICAvKiBGb2N1cy1yaW5nICovCgogICAgW3BhcnR+PSdjZWxsJ106Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIDpob3N0KFtuYXZpZ2F0aW5nXSkgW3BhcnR+PSdjZWxsJ106Zm9jdXM6OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICA6aG9zdChbZHJhZ292ZXJdKTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIHsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ10gewogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgKyAycHgpOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSBbZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMnB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiAxMDAlOwogICAgICBib3R0b206IGF1dG87CiAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IGF1dG87CiAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSk6OmFmdGVyLAogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdkZXRhaWxzLWNlbGwnXTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdW2RyYWdvdmVyPSdvbi10b3AnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIHsKICAgICAgLyogQWRkIGJvdHRvbS1zcGFjZSB0byB0aGUgcm93IHNvIHRoZSBkcmFnIG51bWJlciBkb2Vzbid0IGdldCBjbGlwcGVkLiBOZWVkZWQgZm9yIElFL0VkZ2UgKi8KICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OiAwLjk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICBbaW9zXSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgICNzY3JvbGxlcjpub3QoW2lvc10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XTpub3QoW2RyYWdzdGFydD0nJ10pOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteCk7CiAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgei1pbmRleDogMTAwOwogICAgICBjb250ZW50OiBhdHRyKGRyYWdzdGFydCk7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbG9yKTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhzKTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsOwogICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgbWluLXdpZHRoOiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAqIDAuNyk7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAvKiBIZWFkZXJzIGFuZCBmb290ZXJzICovCgogICAgW3BhcnR+PSdoZWFkZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgIH0KCiAgICAvKiBIZWFkZXIgYm9yZGVycyAqLwoKICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSd0b3AnXSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZvb3RlciBib3JkZXJzICovCgogICAgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdib3R0b20nXSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVvcmRlcmluZyAqLwoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2FsbG93ZWQnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nZHJhZ2dpbmcnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYm94LXNoYWRvdzogdmFyKC0tbHVtby1ib3gtc2hhZG93LXMpOwogICAgICAvKiBUT0RPIFVzZSB0aGUgc2FtZSBzdHlsZXMgYXMgZm9yIHRoZSBjZWxsIGVsZW1lbnQgKHJlb3JkZXItZ2hvc3QgY29waWVzIHN0eWxlcyBmcm9tIHRoZSBjZWxsIGVsZW1lbnQpICovCiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIENvbHVtbiByZXNpemluZyAqLwoKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10gewogICAgICB3aWR0aDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSdjZWxsJ106aG92ZXIgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSwKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ106YWN0aXZlIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICB9CgogICAgLyogQ29sdW1uIGJvcmRlcnMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdsZWZ0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBSb3cgc3RyaXBlcyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2JvZHktY2VsbCddLAogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIH0KCiAgICAvKiBTZWxlY3RlZCByb3cgKi8KCiAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSB7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2JvZHktY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvciksIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICB9CgogICAgLyogQ292ZXIgdGhlIGJvcmRlciBvZiBhbiB1bnNlbGVjdGVkIHJvdyAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgMCAwIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb21wYWN0ICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1zKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLXMpOwogICAgfQoKICAgIC8qIFdyYXAgY2VsbCBjb250ZW50cyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3dyYXAtY2VsbC1jb250ZW50J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVtvdmVyZmxvd349J3JpZ2h0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWdyaWQifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zZWxlY3QtYWxsLWNoZWNrYm94LWx1bW8ifSk7dmFyIEhjZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHJocj1IY2UmJkhjZVsxXT49OCxWY2U9MyxVY2U9aDkoe2JlaGF2aW9yczpbSnMsdjldLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3ZpZXdwb3J0SGVpZ2h0K3RoaXMuX3Njcm9sbE9mZnNldH0sZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPWV9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KGUpe2U9ZSV0aGlzLl9waHlzaWNhbENvdW50LGU8MCYmKGU9dGhpcy5fcGh5c2ljYWxDb3VudCtlKSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2xldCB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl0sdD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gbn0pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7bGV0IGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl19KSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludChlWyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKGUuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtsZXQgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDtsZXQgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7bGV0e3BoeXNpY2FsVG9wOm4saW5kZXhlczppfT10aGlzLl9nZXRSZXVzYWJsZXMocik7cj8odGhpcy5fcGh5c2ljYWxUb3A9bix0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2kubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWkubGVuZ3RoKSx0aGlzLl91cGRhdGUoaSxyP251bGw6aSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGxpKX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oZSl7bGV0IHQscixuLGk9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fc2Nyb2xsVG9wLGY9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj1oLWMpOih0PXRoaXMuX3BoeXNpY2FsRW5kLHI9dS1mKTtuPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0scj1yLW4sIShpLmxlbmd0aD49bHx8cjw9byk7KWlmKGUpe2lmKHMraS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50fHxjK24+PWgtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO2kucHVzaCh0KSxjPWMrbix0PSh0KzEpJWx9ZWxzZXtpZihhLWkubGVuZ3RoPD0wfHxjK3RoaXMuX3BoeXNpY2FsU2l6ZS1uPD1mKWJyZWFrO2kucHVzaCh0KSxjPWMtbix0PXQ9PT0wP2wtMTp0LTF9cmV0dXJue2luZGV4ZXM6aSxwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oZSx0KXtpZighKGUmJmUubGVuZ3RoPT09MHx8dGhpcy5fcGh5c2ljYWxDb3VudD09PTApKXtpZih0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXtsZXQgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3JdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe2xldCByPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxWY2UsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudCxuPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSk7aWYoIShyPDApKXtpZihyPjApe2xldCBpPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChyKSk7Zm9yKGxldCBvPTA7bzxyO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K3IsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLWkpL3Isbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHxuPT09MHx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSksa3gpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsaSkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuaXNBdHRhY2hlZHx8IXRoaXMuX2lzVmlzaWJsZSkpaWYodGhpcy5fcGh5c2ljYWxDb3VudCE9PTApe2xldHtwaHlzaWNhbFRvcDplLGluZGV4ZXM6dH09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3VwZGF0ZSh0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChWY2UpKX0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXtsZXQgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9pc1Zpc2libGUpcmV0dXJuO2NpKCk7bGV0IHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgZT10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCl7dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTtsZXQgdD10aGlzLl9zY3JvbGxUb3A7IXJociYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsKGV8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTF8fChjaSgpLHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSlyZXR1cm47ZT10aGlzLl9jbGFtcChlLDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHxlPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PWUtMSksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7bGV0IHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtmb3IoO3I8ZSYmbjw9aTspbj1uK3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sTmkpfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LF9jbGFtcDpmdW5jdGlvbihlLHQscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgodCxlKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihlLHQscil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2VdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbZV0scix0LmJpbmQodGhpcykpLEpsKHRoaXMuX2RlYm91bmNlcnNbZV0pfX0pO3ZhciB0Vj1jbGFzcyBleHRlbmRzIFVjZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKTtsZXQgcj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKG49Pm4uaW5kZXg9PT10KVswXTtpZihyKXtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtNYXRoLmFicyhuKT4xJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9bix0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfXRoaXMuX3Njcm9sbGluZ1RvSW5kZXg9ITF9X2VmZmVjdGl2ZVNpemVDaGFuZ2VkKHQpe2xldCByLG49MDt0aGlzLl9pdGVyYXRlSXRlbXMoKGksbyk9PntpZihvPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07cj1hLmluZGV4LG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9fSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsMWU1KX0pLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLHRoaXMuX3Njcm9sbFRvcD09PTAmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fc2Nyb2xsVG9JbmRleChNYXRoLm1pbih0LTEscikpKSx0aGlzLl9pdGVyYXRlSXRlbXMoaT0+e2xldCBvPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07aWYoby5pbmRleD09PXImJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxvLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2xldCBhPUFycmF5LmZyb20odGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSk7by5jaGlsZHJlblthXS5mb2N1cygpfX0pKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3VwZGF0ZSgpKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fcG9zaXRpb25JdGVtcygpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IHQ7aXNOYU4odGhpcy5fcGh5c2ljYWxUb3ApJiYodD0hMCx0aGlzLl9waHlzaWNhbFRvcD0wKTtsZXQgcj10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMobj0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbbl0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cn1weClgLHIrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSx0JiZ0aGlzLl9zY3JvbGxUb0luZGV4KDApfV9pbmNyZWFzZVBvb2xJZk5lZWRlZCh0KXt0PT09MCYmdGhpcy5fc2Nyb2xsaW5nVG9JbmRleHx8IXRoaXMuX2NhblBvcHVsYXRlKCl8fCF0aGlzLl9lZmZlY3RpdmVTaXplfHwodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkP3RoaXMuX29wdFBoeXNpY2FsU2l6ZSE9PTEvMCYmKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLE5pLCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpO2xldCByPXRoaXMuX29wdFBoeXNpY2FsU2l6ZS10aGlzLl9waHlzaWNhbFNpemUsbj1NYXRoLmNlaWwoci90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrbj50aGlzLl9lZmZlY3RpdmVTaXplJiYobj1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmbj4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQobiksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpOih0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQ9ITAsc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKDI1KSkpfV9fcmVvcmRlckNoaWxkTm9kZXMoKXtsZXQgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTshIXQucmVkdWNlKChuLGksbyxhKT0+e2lmKG89PT0wfHxhW28tMV0uaW5kZXg9PT1pLmluZGV4LTEpcmV0dXJuIG59LCEwKXx8dC5zb3J0KChuLGkpPT5uLmluZGV4LWkuaW5kZXgpLmZvckVhY2gobj0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKG4pKX1fY3JlYXRlUG9vbCh0KXtsZXQgcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKG89PnIuYXBwZW5kQ2hpbGQobykpLHRoaXMuX2dldFJvd1RhcmdldCgpLmFwcGVuZENoaWxkKHIpO2xldCBpPXRoaXMucXVlcnlTZWxlY3RvcigiW3Nsb3RdIik7aWYoaSl7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsbyl9cmV0dXJuIFRtKHRoaXMsKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpLG59X2Fzc2lnbk1vZGVscyh0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKHIsbik9PntsZXQgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3JdO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIixuPj10aGlzLl9lZmZlY3RpdmVTaXplLGkpLHRoaXMuX3VwZGF0ZVNjcm9sbGVySXRlbShpLG4rKHRoaXMuX3ZpZHhPZmZzZXR8fDApKX0sdCl9X3Njcm9sbEhhbmRsZXIoKXtsZXQgdD10aGlzLiQudGFibGUuc2Nyb2xsVG9wLXRoaXMuX3Njcm9sbFBvc2l0aW9uO3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9zY3JvbGxIYW5kbGVyKTtsZXQgcj10aGlzLl92aWR4T2Zmc2V0O3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1yJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXt0aGlzLl9ub1NjYWxlPSExO3JldHVybn1sZXQgcj10aGlzLiQudGFibGUuc2Nyb2xsVG9wLyh0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLG49cip0aGlzLl9lZmZlY3RpdmVTaXplO3RoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChuLXIqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2xldCByPXRoaXMuX3ZpZHhPZmZzZXR8fDAsbj0xZTMsaT0xMDA7dGhpcy5fc2Nyb2xsVG9wPT09MD8odGhpcy5fdmlkeE9mZnNldD0wLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KDApKTp0aGlzLmZpcnN0VmlzaWJsZUluZGV4PG4mJnRoaXMuX3ZpZHhPZmZzZXQ+MCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsaSksciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoci10aGlzLl92aWR4T2Zmc2V0KSksdGhpcy5fbm9TY2FsZT0hMCk7bGV0IG89dGhpcy5fZWZmZWN0aXZlU2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3AmJnRoaXMuX21heFNjcm9sbFRvcD4wPyh0aGlzLl92aWR4T2Zmc2V0PW8sciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtbiYmdGhpcy5fdmlkeE9mZnNldDxvJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oby10aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtcikpLHRoaXMuX25vU2NhbGU9ITApfX1fYWNjZXNzSXJvbkxpc3RBUEkodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3NBc3luY0VuYWJsZWQ9ITE7bGV0IHI9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsTmksKCk9PnRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSEwKSxyfV9kZWJvdW5jZVJlbmRlcih0LHIpe3N1cGVyLl9kZWJvdW5jZVJlbmRlcigoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkscil9X3dhcm5Qcml2YXRlQVBJQWNjZXNzKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkJiZjb25zb2xlLndhcm4oYEFjY2Vzc2luZyBwcml2YXRlIEFQSSAoJHt0fSkhYCl9X3JlbmRlcigpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZW5kZXIpfV9pdGVtc0NoYW5nZWQoKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuZmlyc3RWaXNpYmxlSW5kZXgpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCl9X3Njcm9sbFRvSW5kZXgodCl7dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksY2koKX19O3ZhciBxY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfYTExeVVwZGF0ZUdyaWRTaXplKHNpemUsIF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfV9hMTF5R2V0SGVhZGVyUm93Q291bnQocil7cmV0dXJuIHIuZmlsdGVyKG49Pm4uc29tZShpPT5pLl9oZWFkZXJUZW1wbGF0ZXx8aS5oZWFkZXJSZW5kZXJlcnx8aS5wYXRofHxpLmhlYWRlcikpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXIpKS5sZW5ndGh9X2ExMXlVcGRhdGVHcmlkU2l6ZShyLG4pe2lmKHI9PT12b2lkIDB8fG49PT12b2lkIDApcmV0dXJuO2xldCBpPW5bbi5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIscit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQobikrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KG4pKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixpJiZpLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLG4rMSkpfV9hMTF5VXBkYXRlRm9vdGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmZvb3Rlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrbisxKSl9X2ExMXlVcGRhdGVSb3dSb3dpbmRleChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuK3RoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSsxKX1fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpLEFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT5pLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsQm9vbGVhbihuKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsbisxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e3R5cGVvZiBuPT0iYm9vbGVhbiI/aS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG4pOmkuaGFzQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikmJmkucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KX1fYTExeVNldFJvd0RldGFpbHNDZWxsKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpIT09biYmaS5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLG4uaWQpfSl9X2ExMXlVcGRhdGVDZWxsQ29sc3BhbihyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLWNvbHNwYW4iLE51bWJlcihuKSl9X2ExMXlVcGRhdGVTb3J0ZXJzKCl7QXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoInZhYWRpbi1ncmlkLXNvcnRlciIpKS5mb3JFYWNoKHI9PntsZXQgbj1yLnBhcmVudE5vZGU7Zm9yKDtuJiZuLmxvY2FsTmFtZSE9PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiOyluPW4ucGFyZW50Tm9kZTtuJiZuLmFzc2lnbmVkU2xvdCYmbi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtc29ydCIse2FzYzoiYXNjZW5kaW5nIixkZXNjOiJkZXNjZW5kaW5nIn1bU3RyaW5nKHIuZGlyZWN0aW9uKV18fCJub25lIil9KX19O3ZhciBHY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjZWxsLWFjdGl2YXRlIix0aGlzLl9hY3RpdmF0ZUl0ZW0uYmluZCh0aGlzKSl9X2FjdGl2YXRlSXRlbShyKXtsZXQgbj1yLmRldGFpbC5tb2RlbCxpPW4/bi5pdGVtOm51bGw7aSYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxpKT9udWxsOmkpfV9vbkNsaWNrKHIpe2lmKHIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW5bbi5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIWl8fGkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2xldCBvPWkuX2NvbnRlbnQsYT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDshby5jb250YWlucyhhKSYmIXRoaXMuX2lzRm9jdXNhYmxlKHIudGFyZ2V0KSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKGkucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZShyKXtyZXR1cm4gbmhyKHIpfX0sbmhyPWU9PntpZighZS5wYXJlbnROb2RlKXJldHVybiExO2xldCByPUFycmF5LmZyb20oZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpKS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoInBhcnQiKSE9PSJjZWxsIGJvZHktY2VsbCIpLmluZGV4T2YoZSkhPT0tMTtyZXR1cm4hZS5kaXNhYmxlZCYmcn07dmFyIFdjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHIsbixpKXtpZighIWkpe2lmKCFBcnJheS5pc0FycmF5KHIpKXtyPT1udWxsJiYodGhpcy5zaXplPTApLHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApO3JldHVybn10aGlzLnNpemU9ci5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIocixuKXtsZXQgaT0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsaSkmJihpPXRoaXMuX2ZpbHRlcihpKSksdGhpcy5zaXplPWkubGVuZ3RoLHIuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsaSkmJihpPWkuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2xldCBvPXIucGFnZSpyLnBhZ2VTaXplLGE9bytyLnBhZ2VTaXplLHM9aS5zbGljZShvLGEpO24ocyxpLmxlbmd0aCl9X2NoZWNrUGF0aHMocixuLGkpe2lmKCFpLmxlbmd0aClyZXR1cm4hMTtsZXQgbz0hMDtmb3IobGV0IGEgaW4gcil7bGV0IHM9clthXS5wYXRoO2lmKCFzfHxzLmluZGV4T2YoIi4iKT09PS0xKWNvbnRpbnVlO2xldCBsPXMucmVwbGFjZSgvXC5bXi5dKiQvLCIiKTtEYS5nZXQobCxpWzBdKT09PXZvaWQgMCYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtzfSIgdXNlZCBmb3IgJHtufSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke259IGlzIGRpc2FibGVkLmApLG89ITEpfXJldHVybiBvfV9tdWx0aVNvcnQocixuKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoaT0+aS5kaXJlY3Rpb249PT0iYXNjIj90aGlzLl9jb21wYXJlKERhLmdldChpLnBhdGgsciksRGEuZ2V0KGkucGF0aCxuKSk6aS5kaXJlY3Rpb249PT0iZGVzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLG4pLERhLmdldChpLnBhdGgscikpOjApLnJlZHVjZSgoaSxvKT0+aXx8bywwKX1fbm9ybWFsaXplRW1wdHlWYWx1ZShyKXtyZXR1cm5bdm9pZCAwLG51bGxdLmluZGV4T2Yocik+PTA/IiI6aXNOYU4ocik/ci50b1N0cmluZygpOnJ9X2NvbXBhcmUocixuKXtyZXR1cm4gcj10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKHIpLG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShuKSxyPG4/LTE6cj5uPzE6MH1fZmlsdGVyKHIpe3JldHVybiByLmZpbHRlcihuPT50aGlzLl9maWx0ZXJzLmZpbHRlcihpPT57bGV0IG89dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShEYS5nZXQoaS5wYXRoLG4pKSxhPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoaS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBvLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPT09LTF9KS5sZW5ndGg9PT0wKX19O3ZhciBZY2U9ZT0+Y2xhc3MgZXh0ZW5kcyB5aChlKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7bGV0IHI9dGhpcy4kLnNjcm9sbGVyO0VtKHIsInRyYWNrIix0aGlzLl9vbkhlYWRlclRyYWNrLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixuPT5yLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PSJyZXNpemUtaGFuZGxlIiYmbi5wcmV2ZW50RGVmYXVsdCgpKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSl9X29uSGVhZGVyVHJhY2socil7bGV0IG49ci50YXJnZXQ7aWYobi5nZXRBdHRyaWJ1dGUoInBhcnQiKT09PSJyZXNpemUtaGFuZGxlIil7bGV0IG89bi5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO28ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbC5fb3JkZXItYy5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCk7bGV0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKSxzPWEuZmlsdGVyKGw9PmwuX2NvbHVtbj09PW8pWzBdO2lmKHMub2Zmc2V0V2lkdGgpe2xldCBsPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLGM9MTArcGFyc2VJbnQobC5wYWRkaW5nTGVmdCkrcGFyc2VJbnQobC5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGwuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChsLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGwubWFyZ2luTGVmdCkrcGFyc2VJbnQobC5tYXJnaW5SaWdodCksdT1zLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXIuZGV0YWlsLng6ci5kZXRhaWwueC1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KGMsdSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX2NvbHVtbi5fb3JkZXItYy5fY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxjLHUpe2M8dS5pbmRleE9mKHMpJiYobC5fY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLl9jb2x1bW4uZmxleEdyb3c9MCl9KSxyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpvfX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19O3ZhciBqY2U9Y2xhc3MgWGNle2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPXIsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIodD0+dGhpcy5pdGVtQ2FjaGVzW3RdLmlzTG9hZGluZygpKVswXSl9Z2V0SXRlbUZvckluZGV4KHQpe2xldHtjYWNoZTpyLHNjYWxlZEluZGV4Om59PXRoaXMuZ2V0Q2FjaGVBbmRJbmRleCh0KTtyZXR1cm4gci5pdGVtc1tuXX11cGRhdGVTaXplKCl7dGhpcy5lZmZlY3RpdmVTaXplPSF0aGlzLnBhcmVudEl0ZW18fHRoaXMuZ3JpZC5faXNFeHBhbmRlZCh0aGlzLnBhcmVudEl0ZW0pP3RoaXMuc2l6ZStPYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpLnJlZHVjZSgodCxyKT0+e2xldCBuPXRoaXMuaXRlbUNhY2hlc1tyXTtyZXR1cm4gbi51cGRhdGVTaXplKCksdCtuLmVmZmVjdGl2ZVNpemV9LDApOjB9ZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh0KXtpZighdGhpcy5pdGVtQ2FjaGVzW3RdKXtsZXQgcj1uZXcgWGNlKHRoaXMuZ3JpZCx0aGlzLHRoaXMuaXRlbXNbdF0pO3RoaXMuaXRlbUNhY2hlc1t0XT1yLHRoaXMuZ3JpZC5fbG9hZFBhZ2UoMCxyKX19Z2V0Q2FjaGVBbmRJbmRleCh0KXtsZXQgcj10LG49T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89TnVtYmVyKG5baV0pLGE9dGhpcy5pdGVtQ2FjaGVzW29dO2lmKHI8PW8pcmV0dXJue2NhY2hlOnRoaXMsc2NhbGVkSW5kZXg6cn07aWYocjw9bythLmVmZmVjdGl2ZVNpemUpcmV0dXJuIGEuZ2V0Q2FjaGVBbmRJbmRleChyLW8tMSk7ci09YS5lZmZlY3RpdmVTaXplfXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9fX0sJGNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sbG9hZGluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpjZSh0aGlzKX19LGl0ZW1JZFBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGV4cGFuZGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NpemVDaGFuZ2VkKHNpemUpIiwiX2l0ZW1JZFBhdGhDaGFuZ2VkKGl0ZW1JZFBhdGgpIiwiX2V4cGFuZGVkSXRlbXNDaGFuZ2VkKGV4cGFuZGVkSXRlbXMuKikiXX1fc2l6ZUNoYW5nZWQocil7bGV0IG49ci10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPW4sdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9bix0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0ocixuKXtpZihyPj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtuLmluZGV4PXI7bGV0e2NhY2hlOmksc2NhbGVkSW5kZXg6b309dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxhPWkuaXRlbXNbb107YT8odGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMSxuKSx0aGlzLl91cGRhdGVJdGVtKG4sYSksdGhpcy5faXNFeHBhbmRlZChhKSYmaS5lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KG8pKToodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMCxuKSx0aGlzLl9sb2FkUGFnZSh0aGlzLl9nZXRQYWdlRm9ySW5kZXgobyksaSkpfV9leHBhbmRlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7ci5pdGVtIT09dm9pZCAwJiYobj90aGlzLmV4cGFuZEl0ZW0oci5pdGVtKTp0aGlzLmNvbGxhcHNlSXRlbShyLml0ZW0pKX1nZXRJdGVtSWQocil7cmV0dXJuIHRoaXMuaXRlbUlkUGF0aD90aGlzLmdldCh0aGlzLml0ZW1JZFBhdGgscik6cn1faXNFeHBhbmRlZChyKXtyZXR1cm4gdGhpcy5fX2V4cGFuZGVkS2V5cy5oYXModGhpcy5nZXRJdGVtSWQocikpfV9leHBhbmRlZEl0ZW1zQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCl9X19jYWNoZUV4cGFuZGVkS2V5cygpe3RoaXMuZXhwYW5kZWRJdGVtcyYmKHRoaXMuX19leHBhbmRlZEtleXM9bmV3IFNldCx0aGlzLmV4cGFuZGVkSXRlbXMuZm9yRWFjaChyPT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQocikpfSkpfWV4cGFuZEl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKXx8KHRoaXMuZXhwYW5kZWRJdGVtcz1bLi4udGhpcy5leHBhbmRlZEl0ZW1zLHJdKX1jb2xsYXBzZUl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKSYmKHRoaXMuZXhwYW5kZWRJdGVtcz10aGlzLmV4cGFuZGVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZ2V0SW5kZXhMZXZlbChyKXtsZXR7Y2FjaGU6bn09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxpPTA7Zm9yKDtuLnBhcmVudENhY2hlOyluPW4ucGFyZW50Q2FjaGUsaSsrO3JldHVybiBpfV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZShyLG4pe2lmKCFuLnBlbmRpbmdSZXF1ZXN0c1tyXSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLG4ucGVuZGluZ1JlcXVlc3RzW3JdPSEwO2xldCBpPXtwYWdlOnIscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKSxwYXJlbnRJdGVtOm4ucGFyZW50SXRlbX07dGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5kYXRhUHJvdmlkZXIoaSwobyxhKT0+e2EhPT12b2lkIDA/bi5zaXplPWE6aS5wYXJlbnRJdGVtJiYobi5zaXplPW8ubGVuZ3RoKTtsZXQgcz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikubWFwKGw9PmwuX2l0ZW0pO28uZm9yRWFjaCgobCxjKT0+e2xldCB1PXIqdGhpcy5wYWdlU2l6ZStjO24uaXRlbXNbdV09bCx0aGlzLl9pc0V4cGFuZGVkKGwpJiZzLmluZGV4T2YobCk+LTEmJm4uZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh1KX0pLHRoaXMuX2hhc0RhdGE9ITAsZGVsZXRlIG4ucGVuZGluZ1JlcXVlc3RzW3JdLHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEsbW8uYWZ0ZXIoMCksKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+IWwuaGlkZGVuKS5mb3JFYWNoKGw9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgobC5pbmRleCkmJnRoaXMuX2dldEl0ZW0obC5pbmRleCxsKX0pLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSksdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YS5mbHVzaCgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCl9KX19X2dldFBhZ2VGb3JJbmRleChyKXtyZXR1cm4gTWF0aC5mbG9vcihyL3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgamNlKHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PntBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2gobj0+e24uX2luc3RhbmNlJiZuLl9pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KCJpdGVtIix7fSwhMSl9KX0pLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLCghdGhpcy5fZWZmZWN0aXZlU2l6ZXx8IXRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZCkmJnRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQocixuKXtuIT09dm9pZCAwJiZyIT09biYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3RoaXMuc2l6ZT09PXZvaWQgMCYmdGhpcy5fZWZmZWN0aXZlU2l6ZT09PTAmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYFx1MjAxOXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmdGhpcy5jbGVhckNhY2hlKCksciYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsbW8uYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbChyLG4pe3JldHVybiB0aGlzLmdldEl0ZW1JZChyKT09PXRoaXMuZ2V0SXRlbUlkKG4pfV9nZXRJdGVtSW5kZXhJbkFycmF5KHIsbil7bGV0IGk9LTE7cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e3RoaXMuX2l0ZW1zRXF1YWwobyxyKSYmKGk9YSl9KSxpfXNjcm9sbFRvSW5kZXgocil7c3VwZXIuc2Nyb2xsVG9JbmRleChyKSwhaXNOYU4ocikmJih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8IXRoaXMuY2xpZW50SGVpZ2h0KSYmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleD1yKX1fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCl7aWYodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4JiZ0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtsZXQgcj10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgocil9fX07dmFyIEtjZT1lPT5jbGFzcyBleHRlbmRzIGV7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHMocil7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIilyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHIpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2RlcyhyKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3VwcyhyKXtyZXR1cm4gci5tYXAobj0+bi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj90aGlzLl9nZXRDaGlsZENvbHVtbnMobik6W25dKS5yZWR1Y2UoKG4saSk9Pm4uY29uY2F0KGkpLFtdKX1fZ2V0Q29sdW1uVHJlZSgpe2xldCByPXZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLG49W107Zm9yKGxldCBpPXI7bi5wdXNoKGkpLCEhdGhpcy5faGFzQ29sdW1uR3JvdXBzKGkpOylpPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoaSk7cmV0dXJuIG59X3VwZGF0ZUNvbHVtblRyZWUoKXtsZXQgcj10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMocix0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9cil9X2FkZE5vZGVPYnNlcnZlcigpe3RoaXMuX29ic2VydmVyPW5ldyB2aCh0aGlzLHI9PntsZXQgbj1yLmFkZGVkTm9kZXMuZmlsdGVyKG89Pm8ubG9jYWxOYW1lPT09InRlbXBsYXRlIiYmby5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpWzBdO24mJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PW4mJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9bik7bGV0IGk9bz0+by5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihpKHIuYWRkZWROb2Rlcyl8fGkoci5yZW1vdmVkTm9kZXMpKXtsZXQgbz1yLnJlbW92ZWROb2Rlcy5mbGF0TWFwKHM9PnMuX2FsbENlbGxzKSxhPXM9Pm8uZmlsdGVyKGw9PmwuX2NvbnRlbnQuY29udGFpbnMocykpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihhKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIoYSkpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSl9X2FycmF5RXF1YWxzKHIsbil7aWYoIXJ8fCFufHxyLmxlbmd0aCE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKWlmKHJbaV1pbnN0YW5jZW9mIEFycmF5JiZuW2ldaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKHJbaV0sbltpXSkpcmV0dXJuITF9ZWxzZSBpZihyW2ldIT1uW2ldKXJldHVybiExO3JldHVybiEwfV9jaGVja0ltcG9ydHMoKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLWZpbHRlci1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC10cmVlLXRvZ2dsZSIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0LWNvbHVtbiIsInZhYWRpbi1ncmlkLXNvcnRlciJdLmZvckVhY2gocj0+e2xldCBuPXRoaXMucXVlcnlTZWxlY3RvcihyKTtuJiYhKG4gaW5zdGFuY2VvZiBtdCkmJmNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3J9PiBlbGVtZW50LmApfSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2gocj0+dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpe0FycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgobixpKT0+bi5fY29sdW1uLl9vcmRlci1pLl9jb2x1bW4uX29yZGVyKS5mb3JFYWNoKChuLGksbyk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsaT09PTAsbiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsaT09PW8ubGVuZ3RoLTEsbil9KX1faXNDb2x1bW5FbGVtZW50KHIpe3JldHVybiByLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHIubG9jYWxOYW1lKX19O3ZhciBaY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldEV2ZW50Q29udGV4dChyKXtsZXQgbj17fSxpPXIuY29tcG9zZWRQYXRoKCksbz1pW2kuaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO3JldHVybiBvJiYobi5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoYT0+by5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKGEpPi0xKVswXSxvLl9jb2x1bW4mJihuLmNvbHVtbj1vLl9jb2x1bW4pLChuLnNlY3Rpb249PT0iYm9keSJ8fG4uc2VjdGlvbj09PSJkZXRhaWxzIikmJk9iamVjdC5hc3NpZ24obix0aGlzLl9fZ2V0Um93TW9kZWwoby5wYXJlbnRFbGVtZW50KSkpLG59fTt2YXIgSmNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZChyKXtyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIoci50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHIpe3RoaXMuX2ZpbHRlcnMuaW5kZXhPZihyKT09PS0xJiZ0aGlzLl9maWx0ZXJzLnB1c2gocil9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLHZhbHVlOnIudmFsdWV9KSl9fTt2YXIgVDA9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLXRlbXBsYXRpemVyIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sX2dyaWQ6T2JqZWN0fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5zdGFuY2VQcm9wcz17ZGV0YWlsc09wZW5lZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwLGV4cGFuZGVkOiEwLGxldmVsOiEwfX1jcmVhdGVJbnN0YW5jZSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7bGV0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KT09PS0xJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMubm90aWZ5UGF0aCgiX3RlbXBsYXRlSW5zdGFuY2VzLioiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzKSkpfXJlbW92ZUluc3RhbmNlKHQpe2xldCByPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk7dGhpcy5zcGxpY2UoIl90ZW1wbGF0ZUluc3RhbmNlcyIsciwxKX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXt0aGlzLl9UZW1wbGF0ZUNsYXNzfHwodGhpcy5fVGVtcGxhdGVDbGFzcz10Yyh0aGlzLnRlbXBsYXRlLHRoaXMse2luc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxwYXJlbnRNb2RlbDohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24odCxyKXt0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCh0LHIpLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzJiZ0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQscixuKXtpZihyPT09ImluZGV4Inx8cj09PSJpdGVtIilyZXR1cm47bGV0IGk9YF9fJHtyfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2xldCBvPUFycmF5LmZyb20odGhpcy5fZ3JpZC4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChsLl9pdGVtLHQuaXRlbSkpWzBdO28mJkFycmF5LmZyb20oby5jaGlsZHJlbikuZm9yRWFjaChsPT57bC5faW5zdGFuY2UmJihsLl9pbnN0YW5jZVtpXT1uLGwuX2luc3RhbmNlLm5vdGlmeVBhdGgocixuKSl9KTtsZXQgYT0iaXRlbS4iO2lmKEFycmF5LmlzQXJyYXkodGhpcy5fZ3JpZC5pdGVtcykmJnIuaW5kZXhPZihhKT09PTApe2xldCBsPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLGM9ci5zbGljZShhLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2x9LiR7Y31gLG4pfWxldCBzPWBfJHtyfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW3NdJiZ0aGlzLl9ncmlkW3NdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LHIpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09cix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX1fdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKHQpe2xldCByLG47aWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcyIpcj0wLG49dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2UgaWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIilyPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goaT0+e2ZvcihsZXQgbz1yO288cituO28rKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tvXS5zZXQoaSx0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ldKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKFQwLmlzLFQwKTt2YXIgUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHIsbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZihyfHxuKXtpZihyJiYhci50ZW1wbGF0aXplcil7bGV0IGk9bmV3IFQwO2kuX2dyaWQ9dGhpcyxpLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChpPT57aS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpfHwodGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQoaSwhMSkpLGRlbGV0ZSBpLnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIikuX2luc3RhbmNlfSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChyKXtyLnBhdGg9PT0iZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCJ8fCFyLnZhbHVlfHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChuPT57dGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwobixuLl9pdGVtKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZChuLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkZXRhaWxzLW9wZW5lZCIsdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4uX2l0ZW0pLG4pfSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHIpe3Iuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAscil9X3RvZ2dsZURldGFpbHNDZWxsKHIsbil7bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyk7aWYoIWkpcmV0dXJuO2xldCBvPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQobiksYT0hIWkuaGlkZGVuIT09bzsoIWkuX2luc3RhbmNlJiYhaS5fcmVuZGVyZXJ8fGkuaGlkZGVuIT09bykmJihpLmhpZGRlbj1vLG8/ci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKToodGhpcy5yb3dEZXRhaWxzUmVuZGVyZXI/KGkuX3JlbmRlcmVyPXRoaXMucm93RGV0YWlsc1JlbmRlcmVyLGkuX3JlbmRlcmVyLmNhbGwodGhpcyxpLl9jb250ZW50LHRoaXMse2luZGV4OnIuaW5kZXgsaXRlbTpufSkpOnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSYmIWkuX2luc3RhbmNlJiYoaS5faW5zdGFuY2U9dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksaS5fY29udGVudC5pbm5lckhUTUw9IiIsaS5fY29udGVudC5hcHBlbmRDaGlsZChpLl9pbnN0YW5jZS5yb290KSx0aGlzLl91cGRhdGVJdGVtKHIsbikpLGNpKCksci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke2kub2Zmc2V0SGVpZ2h0fXB4YCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpLGEmJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2gocj0+e3IucGFyZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke3Iub2Zmc2V0SGVpZ2h0fXB4YCl9KX1faXNEZXRhaWxzT3BlbmVkKHIpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zKSE9PS0xfW9wZW5JdGVtRGV0YWlscyhyKXt0aGlzLl9pc0RldGFpbHNPcGVuZWQocil8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMscl0pfWNsb3NlSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLm9wZW5JdGVtRGV0YWlscyhyLml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyhyLml0ZW0pfX07dmFyIHpjdD17U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfSx0dWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHIpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9cn1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKS5mb250U2l6ZTtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxuP3dpbmRvdy5wYXJzZUludChuKTp2b2lkIDB9X3Njcm9sbFZpZXdwb3J0SGVpZ2h0VXBkYXRlZChyKXt0aGlzLl9zY3JvbGxQYWdlSGVpZ2h0PXItdGhpcy4kLmhlYWRlci5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQtdGhpcy5fc2Nyb2xsTGluZUhlaWdodH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLm91dGVyc2Nyb2xsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy4kLnRhYmxlLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57bGV0IG49ci5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuJC5pdGVtcyk7dGhpcy5fcm93V2l0aEZvY3VzZWRFbGVtZW50PXIuY29tcG9zZWRQYXRoKClbbi0xXX0pLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PnRoaXMuX19tb3VzZURvd249ITApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5fX21vdXNlRG93bj0hMSx0aGlzLl9fcGVuZGluZ1Jlb3JkZXImJih0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITEsc2V0VGltZW91dCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSx6Y3QuU0NST0xMSU5HKSl9KX1zY3JvbGxUb0luZGV4KHIpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHIpKX1fb25XaGVlbChyKXtpZihyLmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci50YXJnZXQsci5kZWx0YVgsci5kZWx0YVkpKXJldHVybjtsZXQgbj10aGlzLiQudGFibGUsaT1yLmRlbHRhWTtpZihyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/aSo9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDpyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihpKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXt0aGlzLl9kZWx0YVlBY2MrPWksci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsTmksKCk9PnRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITEpO2xldCBvPU1hdGguYWJzKHIuZGVsdGFYKStNYXRoLmFicyhpKTt0aGlzLl9jYW5TY3JvbGwobixyLmRlbHRhWCxpKT8oci5wcmV2ZW50RGVmYXVsdCgpLG4uc2Nyb2xsVG9wKz1pLG4uc2Nyb2xsTGVmdCs9ci5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsbW8uYWZ0ZXIoemN0LklHTk9SRV9XSEVFTCksKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmbzw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/ci5wcmV2ZW50RGVmYXVsdCgpOm8+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpLHRoaXMuX3ByZXZpb3VzTW9tZW50dW09b31faGFzU2Nyb2xsZWRBbmNlc3RvcihyLG4saSl7aWYoci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IilyZXR1cm4hMTtpZih0aGlzLl9jYW5TY3JvbGwocixuLGkpJiZbImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUocikub3ZlcmZsb3cpIT09LTEpcmV0dXJuITA7aWYociE9PXRoaXMmJnIucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihyLnBhcmVudEVsZW1lbnQsbixpKX1fY2FuU2Nyb2xsKHIsbixpKXtyZXR1cm4gaT4wJiZyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLm9mZnNldEhlaWdodHx8aTwwJiZyLnNjcm9sbFRvcD4wfHxuPjAmJnIuc2Nyb2xsTGVmdDxyLnNjcm9sbFdpZHRoLXIub2Zmc2V0V2lkdGh8fG48MCYmci5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSksdGhpcy5fZGVib3VuY2VTY3JvbGxpbmc9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VTY3JvbGxpbmcsbW8uYWZ0ZXIoemN0LlNDUk9MTElORyksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxpbmdGcmFtZSksZGVsZXRlIHRoaXMuX3Njcm9sbGluZ0ZyYW1lLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuX3Jlb3JkZXJSb3dzKCl9KX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHI9IiIsbj10aGlzLiQudGFibGU7bi5zY3JvbGxUb3A8bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQmJihyKz0iIGJvdHRvbSIpLG4uc2Nyb2xsVG9wPjAmJihyKz0iIHRvcCIpLG4uc2Nyb2xsTGVmdDxuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgmJihyKz0iIHJpZ2h0Iiksbi5zY3JvbGxMZWZ0PjAmJihyKz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csTmksKCk9PntsZXQgaT1yLnRyaW0oKTtpLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWk/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixpKTppLmxlbmd0aD09MCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bil7dGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwO3JldHVybn1sZXQgcj10aGlzLiQuaXRlbXMsbj1yLnF1ZXJ5U2VsZWN0b3JBbGwoInRyIik7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxvPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShuKS5maWx0ZXIobD0+IWwuaGlkZGVuKVswXTtpZighbylyZXR1cm47bGV0IGE9by5pbmRleC1pLHM9QXJyYXkuZnJvbShuKS5pbmRleE9mKG8pLWE7aWYocz4wKWZvcihsZXQgbD0wO2w8cztsKyspci5hcHBlbmRDaGlsZChuW2xdKTtlbHNlIGlmKHM8MClmb3IobGV0IGw9bi5sZW5ndGgrcztsPG4ubGVuZ3RoO2wrKylyLmluc2VydEJlZm9yZShuW2xdLG5bMF0pO2lmKHRoaXMuX3NhZmFyaSl7bGV0e3RyYW5zZm9ybTpsfT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPWwpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLGxpLCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaChmdW5jdGlvbihyKXtyLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47bGV0IHI9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTtyLnNvcnQoKGksbyk9PmkuX29yZGVyLW8uX29yZGVyKTtsZXQgbj1yLnJlZHVjZSgoaSxvLGEpPT4oby5fbGFzdEZyb3plbj0hMSxvLmZyb3plbiYmIW8uaGlkZGVuP2E6aSksdm9pZCAwKTtuIT09dm9pZCAwJiYocltuXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2xldCByPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsTGVmdCksbj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbFRvcCksaT0wLG89MCxhPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwoaT1yLG89bixhPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8pLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8rYSksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7bGV0IHM9dGhpcy5fX2lzUlRMP3RoaXMuX19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0aGlzLiQudGFibGUpK3RoaXMuX19zY3JvbGxlck1ldHJpY3MuY2xpZW50V2lkdGgtdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5zY3JvbGxXaWR0aDp0aGlzLl9zY3JvbGxMZWZ0LGw9dGhpcy5fZ2V0VHJhbnNsYXRlKHMsMCk7Zm9yKGxldCBjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1sfX1fZ2V0VHJhbnNsYXRlKHIsbil7cmV0dXJuYHRyYW5zbGF0ZSgke3J9cHgsICR7bn1weClgfX07dmFyIGV1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkSXRlbXMuKikiXX1faXNTZWxlY3RlZChyKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHIsdGhpcy5zZWxlY3RlZEl0ZW1zKT4tMX1zZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocil8fCh0aGlzLnNlbGVjdGVkSXRlbXM9Wy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxyXSl9ZGVzZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocikmJih0aGlzLnNlbGVjdGVkSXRlbXM9dGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X3RvZ2dsZUl0ZW0ocil7dGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk9PT0tMT90aGlzLnNlbGVjdEl0ZW0ocik6dGhpcy5kZXNlbGVjdEl0ZW0ocil9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHIpe3RoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJihyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcyJ8fHIucGF0aD09PSJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiKSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3VwZGF0ZUl0ZW0obixuLl9pdGVtKX0pfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLnNlbGVjdEl0ZW0oci5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbShyLml0ZW0pfX07dmFyIHJ1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQocil7bGV0IG49ci50YXJnZXQ7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fdXBkYXRlU29ydGVyKG4pLHRoaXMuX19hcHBseVNvcnRlcnMoKX1fX3JlbW92ZVNvcnRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9zb3J0ZXJzPXRoaXMuX3NvcnRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgocixuKT0+ci5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9uOm51bGwsdGhpcyl9X191cGRhdGVTb3J0ZXIocil7aWYoISghci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMuaW5kZXhPZihyKT09PS0xKSl7aWYoci5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxyKSxyLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHIpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCk7ZWxzZSBpZihyLmRpcmVjdGlvbil7bGV0IG49dGhpcy5fc29ydGVycy5maWx0ZXIoaT0+aSE9cik7dGhpcy5fc29ydGVycz1bcl0sbi5mb3JFYWNoKGk9PntpLl9vcmRlcj1udWxsLGkuZGlyZWN0aW9uPW51bGx9KX19fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLGRpcmVjdGlvbjpyLmRpcmVjdGlvbn0pKX1fcmVtb3ZlQXJyYXlJdGVtKHIsbil7bGV0IGk9ci5pbmRleE9mKG4pO2k+LTEmJnIuc3BsaWNlKGksMSl9fTt2YXIgbnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKS5mb3JFYWNoKHI9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocix0aGlzLl9fZ2V0Um93TW9kZWwocikpKX1fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyhyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2gobz0+aS5jbGFzc0xpc3QucmVtb3ZlKG8pKSx0aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3Ipe2xldCBvPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcihpLl9jb2x1bW4sbik7aS5fX2dlbmVyYXRlZENsYXNzZXM9byYmby5zcGxpdCgiICIpLmZpbHRlcihhPT5hLmxlbmd0aD4wKSxpLl9fZ2VuZXJhdGVkQ2xhc3NlcyYmaS5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpfX0pfX07dmFyIFRQPXtCRVRXRUVOOiJiZXR3ZWVuIixPTl9UT1A6Im9uLXRvcCIsT05fVE9QX09SX0JFVFdFRU46Im9uLXRvcC1vci1iZXR3ZWVuIixPTl9HUklEOiJvbi1ncmlkIn0sQzA9e09OX1RPUDoib24tdG9wIixBQk9WRToiYWJvdmUiLEJFTE9XOiJiZWxvdyIsRU1QVFk6ImVtcHR5In0saXVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLHI9Pnt0aGlzLmRyb3BNb2RlJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpfSl9X29uRHJhZ1N0YXJ0KHIpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IG49ci50YXJnZXQ7aWYobi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiYmKG49bi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2xldCBzPW4uc3R5bGUudHJhbnNmb3JtO24uc3R5bGUudG9wPS90cmFuc2xhdGVZXCgoLiopXCkvLmV4ZWMocylbMV0sbi5zdHlsZS50cmFuc2Zvcm09Im5vbmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e24uc3R5bGUudG9wPSIiLG4uc3R5bGUudHJhbnNmb3JtPXN9KX1sZXQgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz9yLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uobik6ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sci5jbGllbnRYLWkubGVmdCxyLmNsaWVudFktaS50b3ApO2xldCBvPVtuXTt0aGlzLl9pc1NlbGVjdGVkKG4uX2l0ZW0pJiYobz10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKHM9PnRoaXMuX2lzU2VsZWN0ZWQocy5faXRlbSkpLmZpbHRlcihzPT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHMpKSkpLHIuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLHRoaXMuX19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKG8pKSxuLnNldEF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IixvLmxlbmd0aD4xP28ubGVuZ3RoOiIiKSx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tX2dyaWQtZHJhZy1zdGFydC14IjpgJHtyLmNsaWVudFgtaS5sZWZ0KzIwfXB4YCwiLS1fZ3JpZC1kcmFnLXN0YXJ0LXkiOmAke3IuY2xpZW50WS1pLnRvcCsxMH1weGB9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6IiIsIi0tX2dyaWQtZHJhZy1zdGFydC15IjoiIn0pfSk7bGV0IGE9bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdzdGFydCIse2RldGFpbDp7ZHJhZ2dlZEl0ZW1zOm8ubWFwKHM9PnMuX2l0ZW0pLHNldERyYWdEYXRhOihzLGwpPT5yLmRhdGFUcmFuc2Zlci5zZXREYXRhKHMsbCksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6cz0+bi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIscyl9fSk7YS5vcmlnaW5hbEV2ZW50PXIsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfX1fb25EcmFnRW5kKHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksci5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJhZ2VuZCIpO24ub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChuKX1fb25EcmFnTGVhdmUocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX1fb25EcmFnT3ZlcihyKXtpZih0aGlzLmRyb3BNb2RlKXtpZih0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwLHRoaXMuX2RyYWdPdmVySXRlbT12b2lkIDAsdGhpcy5fX2RuZEF1dG9TY3JvbGwoci5jbGllbnRZKSl7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7cmV0dXJufWxldCBuPXIuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkubG9jYWxOYW1lPT09InRyIilbMF07aWYoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9HUklEKXRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5FTVBUWTtlbHNlIGlmKCFufHxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpe2lmKG4pcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fVE9QX09SX0JFVFdFRU4pbj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PiFpLmhpZGRlbikucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XO2Vsc2UgcmV0dXJufWVsc2V7bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLl9kcm9wTG9jYXRpb249QzAuT05fVE9QLHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOKXtsZXQgbz1yLmNsaWVudFktaS50b3A8aS5ib3R0b20tci5jbGllbnRZO3RoaXMuX2Ryb3BMb2NhdGlvbj1vP0MwLkFCT1ZFOkMwLkJFTE9XfWVsc2UgdGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOJiYoci5jbGllbnRZLWkudG9wPGkuaGVpZ2h0LzM/dGhpcy5fZHJvcExvY2F0aW9uPUMwLkFCT1ZFOnIuY2xpZW50WS1pLnRvcD5pLmhlaWdodC8zKjImJih0aGlzLl9kcm9wTG9jYXRpb249QzAuQkVMT1cpKX1pZihuJiZuLmhhc0F0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIpKXt0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwO3JldHVybn1yLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1DMC5FTVBUWT90aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdvdmVyIiwhMCx0aGlzKTpuPyh0aGlzLl9kcmFnT3Zlckl0ZW09bi5faXRlbSxuLmdldEF0dHJpYnV0ZSgiZHJhZ292ZXIiKSE9PXRoaXMuX2Ryb3BMb2NhdGlvbiYmbi5zZXRBdHRyaWJ1dGUoImRyYWdvdmVyIix0aGlzLl9kcm9wTG9jYXRpb24pKTp0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX19X19kbmRBdXRvU2Nyb2xsKHIpe2lmKHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nKXJldHVybiEwO2xldCBuPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLGk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Asbz1uLXIrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQsYT1yLWkrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscz0wO2lmKGE+MD9zPWEqMjpvPjAmJihzPS1vKjIpLHMpe2xldCBsPXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9cyxsIT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKT0+dGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITEsMjApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwhMH19X19nZXRWaWV3cG9ydFJvd3MoKXtsZXQgcj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxuPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PntsZXQgbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmJvdHRvbT5yJiZvLnRvcDxufSl9X2NsZWFyRHJhZ1N0eWxlcygpe3RoaXMucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnIucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKX1fb25Ecm9wKHIpe2lmKHRoaXMuZHJvcE1vZGUpe3Iuc3RvcFByb3BhZ2F0aW9uKCksci5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPXIuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHIuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAobz0+KHt0eXBlOm8sZGF0YTpyLmRhdGFUcmFuc2Zlci5nZXREYXRhKG8pfSkpO3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBpPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcm9wIix7YnViYmxlczpyLmJ1YmJsZXMsY2FuY2VsYWJsZTpyLmNhbmNlbGFibGUsZGV0YWlsOntkcm9wVGFyZ2V0SXRlbTp0aGlzLl9kcmFnT3Zlckl0ZW0sZHJvcExvY2F0aW9uOnRoaXMuX2Ryb3BMb2NhdGlvbixkcmFnRGF0YTpufX0pO2kub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChpKX19X19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKHIpe3JldHVybiByLm1hcChuPT5BcnJheS5mcm9tKG4uY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4mJmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik9PT0tMSkuc29ydCgoaSxvKT0+aS5fY29sdW1uLl9vcmRlcj5vLl9jb2x1bW4uX29yZGVyPzE6LTEpLm1hcChpPT5pLl9jb250ZW50LnRleHRDb250ZW50LnRyaW0oKSkuZmlsdGVyKGk9PmkpLmpvaW4oIgkiKSkuam9pbihgCmApfV9kcmFnRHJvcEFjY2Vzc0NoYW5nZWQoKXt0aGlzLmZpbHRlckRyYWdBbmREcm9wKCl9ZmlsdGVyRHJhZ0FuZERyb3AoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT57dGhpcy5fZmlsdGVyRHJhZ0FuZERyb3Aocix0aGlzLl9fZ2V0Um93TW9kZWwocikpfSl9X2ZpbHRlckRyYWdBbmREcm9wKHIsbil7bGV0IGk9IXRoaXMucm93c0RyYWdnYWJsZXx8dGhpcy5kcmFnRmlsdGVyJiYhdGhpcy5kcmFnRmlsdGVyKG4pLG89IXRoaXMuZHJvcE1vZGV8fHRoaXMuZHJvcEZpbHRlciYmIXRoaXMuZHJvcEZpbHRlcihuKTtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLm1hcChzPT5zLl9jb250ZW50KS5mb3JFYWNoKHM9PntpP3MucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTpzLnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWctZGlzYWJsZWQiLGksciksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcm9wLWRpc2FibGVkIixvLHIpfX07dmFyIG91ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19oZWFkZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9pdGVtc0ZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2Zvb3RlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX25hdmlnYXRpbmdJc0hpZGRlbjpCb29sZWFuLF9mb2N1c2VkSXRlbUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfZm9jdXNlZENvbHVtbk9yZGVyOk51bWJlcixpbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxvYnNlcnZlcjoiX2ludGVyYWN0aW5nQ2hhbmdlZCJ9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksISh0aGlzLl9pb3N8fHRoaXMuX2FuZHJvaWQpJiYodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5faXNNb3VzZWRvd249ITB9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpfV9mb2N1c2FibGVDaGFuZ2VkKHIsbil7biYmbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxyJiZ0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHIpfV9pbnRlcmFjdGluZ0NoYW5nZWQoKXt0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2hlYWRlckZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9pdGVtc0ZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9mb290ZXJGb2N1c2FibGUpfV9vbktleURvd24ocil7bGV0IG49ci5rZXksaTtzd2l0Y2gobil7Y2FzZSJBcnJvd1VwIjpjYXNlIkFycm93RG93biI6Y2FzZSJBcnJvd0xlZnQiOmNhc2UiQXJyb3dSaWdodCI6Y2FzZSJQYWdlVXAiOmNhc2UiUGFnZURvd24iOmNhc2UiSG9tZSI6Y2FzZSJFbmQiOmk9Ik5hdmlnYXRpb24iO2JyZWFrO2Nhc2UiRW50ZXIiOmNhc2UiRXNjYXBlIjpjYXNlIkYyIjppPSJJbnRlcmFjdGlvbiI7YnJlYWs7Y2FzZSJUYWIiOmk9IlRhYiI7YnJlYWs7Y2FzZSIgIjppPSJTcGFjZSI7YnJlYWt9dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksdGhpcy5pbnRlcmFjdGluZyYmaSE9PSJJbnRlcmFjdGlvbiImJihpPXZvaWQgMCksaSYmdGhpc1tgX29uJHtpfUtleURvd25gXShyLG4pfV9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocil7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT5pLmluZGV4PT09cilbMF18fHRoaXMuX3Njcm9sbFRvSW5kZXgocil9X29uTmF2aWdhdGlvbktleURvd24ocixuKXt0aGlzLl9zY3JvbGxIYW5kbGVyKCksci5wcmV2ZW50RGVmYXVsdCgpO2Z1bmN0aW9uIGkoQil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoQi5wYXJlbnROb2RlLmNoaWxkcmVuLEIpfWxldCBvPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMSxhPTAscz0wO3N3aXRjaChuKXtjYXNlIkFycm93UmlnaHQiOmE9dGhpcy5fX2lzUlRMPy0xOjE7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmE9dGhpcy5fX2lzUlRMPzE6LTE7YnJlYWs7Y2FzZSJIb21lIjphPS0xLzAsci5jdHJsS2V5JiYocz0tMS8wKTticmVhaztjYXNlIkVuZCI6YT0xLzAsci5jdHJsS2V5JiYocz0xLzApO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpzPTE7YnJlYWs7Y2FzZSJBcnJvd1VwIjpzPS0xO2JyZWFrO2Nhc2UiUGFnZURvd24iOnM9bzticmVhaztjYXNlIlBhZ2VVcCI6cz0tbzticmVha31sZXQgbD1yLmNvbXBvc2VkUGF0aCgpWzBdLGM9aShsKSx1PXRoaXMuX2VsZW1lbnRNYXRjaGVzKGwsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxoPWwucGFyZW50Tm9kZSxmPWgucGFyZW50Tm9kZSxwPShmPT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6Zi5jaGlsZHJlbi5sZW5ndGgpLTEsZD1mPT09dGhpcy4kLml0ZW1zP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXghPT12b2lkIDA/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpoLmluZGV4OmkoaCksZz1NYXRoLm1heCgwLE1hdGgubWluKGQrcyxwKSksXz0hMTtpZihmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1oLl9pdGVtLEk9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGcpO3U/Xz1zPT09MDpfPXM9PT0xJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoQil8fHM9PT0tMSYmZyE9PWQmJnRoaXMuX2lzRGV0YWlsc09wZW5lZChJKSxfIT09dSYmKHM9PT0xJiZffHxzPT09LTEmJiFfKSYmKGc9ZCl9aWYoZiE9PXRoaXMuJC5pdGVtcyl7aWYoZz5kKWZvcig7ZzxwJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZysrO2Vsc2UgaWYoZzxkKWZvcig7Zz4wJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZy0tfXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj09PXZvaWQgMCYmKHU/dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPTA6dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXRoaXMuX2dldENvbHVtbnMoZixkKS5maWx0ZXIoQj0+IUIuaGlkZGVuKVtjXS5fb3JkZXIpO2xldCB5PXRoaXMuX2dldENvbHVtbnMoZixnKS5maWx0ZXIoQj0+IUIuaGlkZGVuKSx4PXkubWFwKEI9PkIuX29yZGVyKS5zb3J0KChCLEkpPT5CLUkpLGI9eC5sZW5ndGgtMSxTPXguaW5kZXhPZih4LnNsaWNlKDApLnNvcnQoKEIsSSk9Pk1hdGguYWJzKEItdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyKS1NYXRoLmFicyhJLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcikpWzBdKSxDPXM9PT0wJiZ1P1M6TWF0aC5tYXgoMCxNYXRoLm1pbihTK2EsYikpO0MhPT1TJiYodGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCksZj09PXRoaXMuJC5pdGVtcyYmdGhpcy5fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KGcpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IGs9eS5yZWR1Y2UoKEIsSSxMKT0+KEJbSS5fb3JkZXJdPUwsQikse30pW3hbQ11dLE89Zj09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKGYuY2hpbGRyZW4pLmZpbHRlcihCPT5CLmluZGV4PT09ZylbMF06Zi5jaGlsZHJlbltnXTtpZighTylyZXR1cm47bGV0IEQ9Xz9BcnJheS5mcm9tKE8uY2hpbGRyZW4pLmZpbHRlcihCPT50aGlzLl9lbGVtZW50TWF0Y2hlcyhCLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpWzBdOk8uY2hpbGRyZW5ba107aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKEQpLGY9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PWcpLGY9PT10aGlzLiQuaXRlbXMpe2xldCBCPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxMPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO0IuYm90dG9tPkk/KHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPUIuYm90dG9tLUksdGhpcy5fc2Nyb2xsSGFuZGxlcigpKTpCLnRvcDxMJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcC09TC1CLnRvcCx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfUQuZm9jdXMoKX1fb25JbnRlcmFjdGlvbktleURvd24ocixuKXtsZXQgaT1yLmNvbXBvc2VkUGF0aCgpWzBdLG89aS5sb2NhbE5hbWU9PT0iaW5wdXQiJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KGkudHlwZSksYTtzd2l0Y2gobil7Y2FzZSJFbnRlciI6YT10aGlzLmludGVyYWN0aW5nPyFvOiEwO2JyZWFrO2Nhc2UiRXNjYXBlIjphPSExO2JyZWFrO2Nhc2UiRjIiOmE9IXRoaXMuaW50ZXJhY3Rpbmc7YnJlYWt9bGV0e2NlbGw6c309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7aWYodGhpcy5pbnRlcmFjdGluZyE9PWEmJnMhPT1udWxsKWlmKGEpe2xldCBsPXMuX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8cy5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtsJiYoci5wcmV2ZW50RGVmYXVsdCgpLGwuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCxzLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITEpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQocixuKXtsZXQgaT1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF0sbz1pLmluZGV4T2Yocik7Zm9yKG8rPW47bz49MCYmbzw9aS5sZW5ndGgtMSYmKCFpW29dfHxpW29dLnBhcmVudE5vZGUuaGlkZGVuKTspbys9bjtyZXR1cm4gaVtvXX1fb25UYWJLZXlEb3duKHIpe2xldCBuPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoci5jb21wb3NlZFBhdGgoKVswXSxyLnNoaWZ0S2V5Py0xOjEpO2lmKG49PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBpPW4sbz10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxvLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7bGV0IGE9QXJyYXkuZnJvbShvLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxzPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+bC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpWzBdO3MmJihpPXMuY2hpbGRyZW5bYV0pfXIucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X29uU3BhY2VLZXlEb3duKHIpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdOyghbi5fY29udGVudHx8IW4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAocil7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdChyLmtleSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO2lmKG4uX2NvbnRlbnQmJm4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCBpPXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7bi5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsaSx0aGlzKX19X29uRm9jdXNJbihyKXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO249PT10aGlzLiQudGFibGV8fG49PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KG4sbj09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uRm9jdXNPdXQocil7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyhyKX1fb25DZWxsRm9jdXNJbihyKXtsZXR7c2VjdGlvbjpuLGNlbGw6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksbiYmaSYmKHRoaXMuX2FjdGl2ZVJvd0dyb3VwPW4sdGhpcy4kLmhlYWRlcj09PW4/dGhpcy5faGVhZGVyRm9jdXNhYmxlPWk6dGhpcy4kLml0ZW1zPT09bj90aGlzLl9pdGVtc0ZvY3VzYWJsZT1pOnRoaXMuJC5mb290ZXI9PT1uJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWkpLGkuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSksaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1cyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpLHRoaXMuX2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil9X29uQ2VsbEZvY3VzT3V0KHIpe3IuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpPT09MyYmci5jb21wb3NlZFBhdGgoKVswXS5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c291dCIse2J1YmJsZXM6ITF9KSl9X2RldGVjdEludGVyYWN0aW5nKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCkuc29tZShpPT5pLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhuKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleChyKXtsZXR7c2VjdGlvbjpuLHJvdzppfT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbihyKTtuPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1pLmluZGV4KX1fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKXtpZighcilyZXR1cm47bGV0IG49dGhpcy5fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQociksaT10aGlzLmludGVyYWN0aW5nJiZuPT09dGhpcy5fYWN0aXZlUm93R3JvdXA7ci50YWJJbmRleD1pPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHIsbil7ci5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLG49PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnMocixuKXtsZXQgaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiByPT09dGhpcy4kLmhlYWRlcj9pPW46cj09PXRoaXMuJC5mb290ZXImJihpPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtbiksdGhpcy5fY29sdW1uVHJlZVtpXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbilbMF0pLHRoaXMuJC5pdGVtcy5maXJzdEVsZW1lbnRDaGlsZCl7bGV0IHI9dGhpcy5faXRlcmF0ZUl0ZW1zKChuLGkpPT57aWYodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg9PT1pKXJldHVybiB0aGlzLiQuaXRlbXMuY2hpbGRyZW5bbl19KTtyJiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5maWx0ZXIobj0+IW4uaGlkZGVuKVswXSl9dGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKX1fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHIpe2lmKHIuaGFzQXR0cmlidXRlKCJmcm96ZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXMociwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKXJldHVybjtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5wYXJlbnROb2RlLG89QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpLGE9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5sZWZ0LGw9YS5yaWdodDtmb3IobGV0IGM9by0xO2M+PTA7Yy0tKXtsZXQgdT1pLmNoaWxkcmVuW2NdO2lmKCEodS5oYXNBdHRyaWJ1dGUoImhpZGRlbiIpfHx0aGlzLl9lbGVtZW50TWF0Y2hlcyh1LCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpJiZ1Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIikpe3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDticmVha319Zm9yKGxldCBjPW8rMTtjPGkuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtsPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319bi5sZWZ0PHMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLmxlZnQtcykpLG4ucmlnaHQ+bCYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKG4ucmlnaHQtbCkpfV9lbGVtZW50TWF0Y2hlcyhyLG4pe3JldHVybiByLm1hdGNoZXM/ci5tYXRjaGVzKG4pOkFycmF5LmZyb20oci5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwobikpLmluZGV4T2YocikhPT0tMX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocil7bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW4uaW5kZXhPZih0aGlzLiQudGFibGUpLG89aT49MT9uW2ktMV06bnVsbCxhPWk+PTI/bltpLTJdOm51bGwscz1pPj0zP25baS0zXTpudWxsO3JldHVybntzZWN0aW9uOm8scm93OmEsY2VsbDpzfX1fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQocil7cmV0dXJuIHI9PT10aGlzLl9oZWFkZXJGb2N1c2FibGU/dGhpcy4kLmhlYWRlcjpyPT09dGhpcy5faXRlbXNGb2N1c2FibGU/dGhpcy4kLml0ZW1zOnI9PT10aGlzLl9mb290ZXJGb2N1c2FibGU/dGhpcy4kLmZvb3RlcjpudWxsfX07ZnVuY3Rpb24gYXVlKGUsdCxyKXtsZXQgbj0xO2UuZm9yRWFjaChpPT57biUxMD09PTAmJm4rKyxpLl9vcmRlcj1yK24qdCxuKyt9KX12YXIgc3VlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLEVtKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUocil7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmci5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQocil7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9vblRyYWNrU3RhcnQoe2RldGFpbDp7eDpyLnRvdWNoZXNbMF0uY2xpZW50WCx5OnIudG91Y2hlc1swXS5jbGllbnRZfX0pfSwxMDApfV9vblRvdWNoTW92ZShyKXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZyLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudChyKXtpZihyLmRldGFpbC5zdGF0ZT09PSJzdGFydCIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQuaGVhZGVyKS0yXTtpZighaXx8IWkuX2NvbnRlbnR8fGkuX2NvbnRlbnQuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLiQuc2Nyb2xsZXIuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSlyZXR1cm47dGhpcy5fdG91Y2hEZXZpY2V8fHRoaXMuX29uVHJhY2tTdGFydChyKX1lbHNlIHIuZGV0YWlsLnN0YXRlPT09InRyYWNrIj90aGlzLl9vblRyYWNrKHIpOnIuZGV0YWlsLnN0YXRlPT09ImVuZCImJnRoaXMuX29uVHJhY2tFbmQocil9X29uVHJhY2tTdGFydChyKXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgmJnIuY29tcG9zZWRQYXRoKCk7aWYobiYmbi5maWx0ZXIobz0+by5oYXNBdHRyaWJ1dGUmJm8uaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSlbMF0pcmV0dXJuO2xldCBpPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIik9PT0tMSkpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49aS5fY29sdW1uO3RoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudD09PTE7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KGkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2socil7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2xldCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighbilyZXR1cm47bGV0IGk9dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKG4sdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oaSxyLmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oci5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT9yLmRldGFpbC55LTUwOnIuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1yLmRldGFpbC54fV9vblRyYWNrRW5kKCl7IXRoaXMuX2RyYWdnZWRDb2x1bW58fCh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKHI9PiFyLmhpZGRlbikuc29ydCgocixuKT0+ci5fb3JkZXItbi5fb3JkZXIpfV9jZWxsRnJvbVBvaW50KHIsbil7cj1yfHwwLG49bnx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7bGV0IGk9dGhpcy5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQocixuKTtpZih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExLHRoaXMuJC5zY3JvbGxlciksaSYmaS5fY29sdW1uKXJldHVybiBpfV91cGRhdGVHaG9zdFBvc2l0aW9uKHIsbil7bGV0IGk9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci1pLndpZHRoLzIsYT1uLWkuaGVpZ2h0LzIscz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGw9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1zLShpLmxlZnQtbyksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9bC0oaS50b3AtYSksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X3VwZGF0ZUdob3N0KHIpe2xldCBuPXRoaXMuX3Jlb3JkZXJHaG9zdDtuLnRleHRDb250ZW50PXIuX2NvbnRlbnQuaW5uZXJUZXh0O2xldCBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpO3JldHVyblsiYm94U2l6aW5nIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsImFsaWduSXRlbXMiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZmxleC1kaXJlY3Rpb24iLCJvdmVyZmxvdyJdLmZvckVhY2gobz0+bi5zdHlsZVtvXT1pW29dKSxufV91cGRhdGVPcmRlcnMocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHwoclswXS5mb3JFYWNoKGk9PmkuX29yZGVyPTApLGF1ZShyWzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHIsbil7QXJyYXkuZnJvbShyLnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcihpPT4vY29sdW1uLy50ZXN0KGkubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChpLHIpKS5mb3JFYWNoKGk9PmkuX3Jlb3JkZXJTdGF0dXM9bil9X2F1dG9TY3JvbGxlcigpe2lmKHRoaXMuX2xhc3REcmFnQ2xpZW50WCl7bGV0IHI9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3I+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9ci8xMDpuPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09bi8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZChyLG4pe2lmKHImJm4pe2xldCBpPXIhPT1uLG89ci5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50LGE9ci5mcm96ZW49PT1uLmZyb3plbjtyZXR1cm4gaSYmbyYmYX19X2lzU3dhcHBhYmxlQnlQb3NpdGlvbihyLG4pe2xldCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcihzPT5yLmNvbnRhaW5zKHMuX2NvbHVtbikpWzBdLG89dGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJ0cjpub3QoW2hpZGRlbl0pIFtyZW9yZGVyLXN0YXR1cz1kcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEubGVmdD5vLmxlZnQ/bj5hLnJpZ2h0LW8ud2lkdGg6bjxhLmxlZnQrby53aWR0aH1fc3dhcENvbHVtbk9yZGVycyhyLG4pe2xldCBpPXIuX29yZGVyO3IuX29yZGVyPW4uX29yZGVyLG4uX29yZGVyPWksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpfV9nZXRUYXJnZXRDb2x1bW4ocixuKXtpZihyJiZuKXtsZXQgaT1yLl9jb2x1bW47Zm9yKDtpLnBhcmVudEVsZW1lbnQhPT1uLnBhcmVudEVsZW1lbnQmJmkhPT10aGlzOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaS5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50P2k6ci5fY29sdW1ufX19O3ZhciBpaHI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuO2xldCByPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gciYmci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiYmci5yZXNpemFibGV8fCExfX0sX2hlYWRlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2Zvb3RlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sZnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGRlbjp7dHlwZTpCb29sZWFufSxoZWFkZXI6e3R5cGU6U3RyaW5nfSx0ZXh0QWxpZ246e3R5cGU6U3RyaW5nfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXI6TnVtYmVyLF9yZW9yZGVyU3RhdHVzOkJvb2xlYW4sX2VtcHR5Q2VsbHM6QXJyYXksX2hlYWRlckNlbGw6T2JqZWN0LF9mb290ZXJDZWxsOk9iamVjdCxfZ3JpZDpPYmplY3QsaGVhZGVyUmVuZGVyZXI6RnVuY3Rpb24sZm9vdGVyUmVuZGVyZXI6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfd2lkdGhDaGFuZ2VkKHdpZHRoLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mcm96ZW5DaGFuZ2VkKGZyb3plbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93LCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9wYXRoT3JIZWFkZXJDaGFuZ2VkKHBhdGgsIGhlYWRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKiwgcmVuZGVyZXIsIGhlYWRlclJlbmRlcmVyLCBfYm9keVRlbXBsYXRlLCBfaGVhZGVyVGVtcGxhdGUpIiwiX3RleHRBbGlnbkNoYW5nZWQodGV4dEFsaWduLCBfY2VsbHMuKiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsKSIsIl9vcmRlckNoYW5nZWQoX29yZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiLCJfc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihfYm9keVRlbXBsYXRlLCByZW5kZXJlciwgX2NlbGxzLCBfY2VsbHMuKikiLCJfc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKF9oZWFkZXJUZW1wbGF0ZSwgaGVhZGVyUmVuZGVyZXIsIF9oZWFkZXJDZWxsKSIsIl9zZXRGb290ZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2Zvb3RlclRlbXBsYXRlLCBmb290ZXJSZW5kZXJlciwgX2Zvb3RlckNlbGwpIiwiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlLCBfaGVhZGVyQ2VsbCkiLCJfcmVvcmRlclN0YXR1c0NoYW5nZWQoX3Jlb3JkZXJTdGF0dXMsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2hpZGRlbkNoYW5nZWQoaGlkZGVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9ib2R5VGVtcGxhdGUmJih0aGlzLl9ib2R5VGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5faGVhZGVyVGVtcGxhdGUmJih0aGlzLl9oZWFkZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9mb290ZXJUZW1wbGF0ZSYmKHRoaXMuX2Zvb3RlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLl9ib2R5VGVtcGxhdGV8fHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuY2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKHI9PntyLl9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQoci5fY29udGVudCl9KX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlJiZyLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoci5fY29udGVudCl9KX0pLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCByPXRoaXM7Zm9yKDtyJiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdChyLmxvY2FsTmFtZSk7KXI9ci5hc3NpZ25lZFNsb3Q/ci5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTpyLnBhcmVudE5vZGU7cmV0dXJuIHJ8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIocj0+cil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHZoKHRoaXMsKCk9Pnt0aGlzLl9oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLl9mb290ZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKSx0aGlzLl9ib2R5VGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpfSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHIsbil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMuX2dyaWQsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkuX2luc3RhbmNlUHJvcHM9bnx8aS5faW5zdGFuY2VQcm9wcyxpLnRlbXBsYXRlPXIsci50ZW1wbGF0aXplcj1pfXJldHVybiByfV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHIsbixpKXtsZXQgbz1bbi5fY29udGVudCx0aGlzXTtpJiZpLml0ZW0mJm8ucHVzaChpKSxyLmFwcGx5KHRoaXMsbyl9X19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpe2lmKCF0aGlzLmhpZGRlbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSIpO2kuZm9yRWFjaChvPT57bGV0IGE9dGhpcy5fZ3JpZC5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCk7aWYobilvLl9yZW5kZXJlcj1uLChhLml0ZW18fG49PT10aGlzLmhlYWRlclJlbmRlcmVyfHxuPT09dGhpcy5mb290ZXJSZW5kZXJlcikmJnRoaXMuX19ydW5SZW5kZXJlcihuLG8sYSk7ZWxzZSBpZihvLl90ZW1wbGF0ZSE9PXIpe28uX3RlbXBsYXRlPXIsby5fY29udGVudC5pbm5lckhUTUw9IiIsci50ZW1wbGF0aXplci5fZ3JpZD1yLnRlbXBsYXRpemVyLl9ncmlkfHx0aGlzLl9ncmlkO2xldCBzPXIudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtvLl9jb250ZW50LmFwcGVuZENoaWxkKHMucm9vdCksby5faW5zdGFuY2U9cyxhLml0ZW0mJm8uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoYSl9fSl9fV9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpfV9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpeyhyfHxuKSYmaSYmdGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKX1fc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJih0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixbaV0pLHRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCkpfV9zZWxlY3RGaXJzdFRlbXBsYXRlKHI9ITEsbj0hMSl7cmV0dXJuIHZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJoZWFkZXIiKT09PXImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb290ZXIiKT09PW4pWzBdfV9maW5kVGVtcGxhdGUocixuKXtsZXQgaT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKHIsbik7cmV0dXJuIGkmJnRoaXMuZGF0YUhvc3QmJihpLl9yb290RGF0YUhvc3Q9dGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0KSxpfV9mbGV4R3Jvd0NoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmbGV4R3JvdyIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5mbGV4R3Jvdz1yKX1fb3JkZXJDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5vcmRlcj1yKX1fd2lkdGhDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUud2lkdGg9ciksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93JiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3coKX1fZnJvemVuQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZyb3plbiIsciksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIscixuKSksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkJiZ0aGlzLl9ncmlkLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX1fbGFzdEZyb3plbkNoYW5nZWQocil7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtZnJvemVuIixyLG4pKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49cil9X3BhdGhPckhlYWRlckNoYW5nZWQocixuLGksbyxhLHMsbCxjLHUpe2xldCBoPW4hPT12b2lkIDA7aWYoIWwmJiF1JiZoJiZpJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCxuKSxyJiZhLnZhbHVlKXtpZighcyYmIWMpe2xldCBmPShwLGQse2l0ZW06Z30pPT50aGlzLl9fc2V0VGV4dENvbnRlbnQocCx0aGlzLmdldChyLGcpKTt0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCxmLGEudmFsdWUpfSFsJiYhdSYmIWgmJmkmJm4hPT1udWxsJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCx0aGlzLl9nZW5lcmF0ZUhlYWRlcihyKSl9aSYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkoaS5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHIsbil7ci50ZXh0Q29udGVudCE9PW4mJihyLnRleHRDb250ZW50PW4pfV9nZW5lcmF0ZUhlYWRlcihyKXtyZXR1cm4gci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sbj0+bi50b1VwcGVyQ2FzZSgpKX1fdG9nZ2xlQXR0cmlidXRlKHIsbixpKXtpLmhhc0F0dHJpYnV0ZShyKT09PSFuJiYobj9pLnNldEF0dHJpYnV0ZShyLCIiKTppLnJlbW92ZUF0dHJpYnV0ZShyKSl9X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIixyKSl9X3Jlc2l6YWJsZUNoYW5nZWQocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHxuJiZbbl0uY29uY2F0KHRoaXMuX2VtcHR5Q2VsbHMpLmZvckVhY2goaT0+e2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3RvcignW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0nKTtpZihvJiZpLnJlbW92ZUNoaWxkKG8pLHIpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGkuYXBwZW5kQ2hpbGQoYSl9fX0pfV90ZXh0QWxpZ25DaGFuZ2VkKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuO2lmKFsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHIpPT09LTEpe2NvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO3JldHVybn1sZXQgbjtnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2dyaWQpLmRpcmVjdGlvbj09PSJsdHIiP3I9PT0ic3RhcnQiP249ImxlZnQiOnI9PT0iZW5kIiYmKG49InJpZ2h0Iik6cj09PSJzdGFydCI/bj0icmlnaHQiOnI9PT0iZW5kIiYmKG49ImxlZnQiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKGk9PntpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1yLGdldENvbXB1dGVkU3R5bGUoaS5fY29udGVudCkudGV4dEFsaWduIT09ciYmKGkuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPW4pfSl9X2hpZGRlbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJoaWRkZW4iLHIpLCEhciE9ISF0aGlzLl9wcmV2aW91c0hpZGRlbiYmdGhpcy5fZ3JpZCYmKHI9PT0hMCYmdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bi5fY29udGVudC5wYXJlbnROb2RlJiZuLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobi5fY29udGVudCl9KSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPXNyLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsTmksKCk9Pnt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlKHRoaXMuX2dyaWQuX2NvbHVtblRyZWUpfSksdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbiYmdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX2dyaWQubm90aWZ5UmVzaXplJiZ0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uJiZ0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpKSx0aGlzLl9wcmV2aW91c0hpZGRlbj1yfX0sZVY9Y2xhc3MgZXh0ZW5kcyBpaHIoWkgobXQpKXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3dpZHRoOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwcHgifSxmbGV4R3Jvdzp7dHlwZTpOdW1iZXIsdmFsdWU6MX0scmVuZGVyZXI6RnVuY3Rpb24scGF0aDp7dHlwZTpTdHJpbmd9LGF1dG9XaWR0aDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm9keVRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2NlbGxzOkFycmF5fX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTt2YXIgb2hyPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KSgpLHJWPWNsYXNzIGV4dGVuZHMgSkgoWEgoJGNlKFdjZShLY2UoR2NlKHR1ZShldWUocnVlKFFjZShvdWUocWNlKEpjZShzdWUoWWNlKFpjZShpdWUobnVlKHRWKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8bmF2aWdhdG9yLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOm9ocn0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbiksdD09PSJkaXIiJiYodGhpcy5fX2lzUlRMPW49PT0icnRsIix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHQ9PnQuY2xpZW50SGVpZ2h0KS5sZW5ndGh9X19pdGVtc1JlY2VpdmVkKCl7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQmJiF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCkmJih0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpfV9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KXt0LmZvckVhY2gocj0+e3Iud2lkdGg9ImF1dG8iLHIuX29yaWdGbGV4R3Jvdz1yLmZsZXhHcm93LHIuZmxleEdyb3c9MH0pLHQuZm9yRWFjaChyPT57ci5fY3VycmVudFdpZHRoPTAsci5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bGV0IGk9bi5vZmZzZXRXaWR0aCsxO3IuX2N1cnJlbnRXaWR0aD1NYXRoLm1heChyLl9jdXJyZW50V2lkdGgsaSl9KX0pLHQuZm9yRWFjaChyPT57ci53aWR0aD1gJHtyLl9jdXJyZW50V2lkdGh9cHhgLHIuZmxleEdyb3c9ci5fb3JpZ0ZsZXhHcm93LHIuX2N1cnJlbnRXaWR0aD12b2lkIDAsci5fb3JpZ0ZsZXhHcm93PXZvaWQgMH0pfXJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl7aWYoISF0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7bGV0IHQ9dGhpcy5fZ2V0Q29sdW1ucygpLmZpbHRlcihyPT4hci5oaWRkZW4mJnIuYXV0b1dpZHRoKTt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KX19X2NyZWF0ZVNjcm9sbGVyUm93cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO2kuc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl91cGRhdGVSb3coaSx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLCJib2R5IiwhMSwhMCksci5wdXNoKGkpfXJldHVybiB0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLmZvckVhY2gobj0+bi5pc0Nvbm5lY3RlZCYmbi5ub3RpZnlQYXRoJiZuLm5vdGlmeVBhdGgoIl9jZWxscy4qIixuLl9jZWxscykpLG1ndCh0aGlzLCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pLHJ9X2dldFJvd1RhcmdldCgpe3JldHVybiB0aGlzLiQuaXRlbXN9X2NyZWF0ZUNlbGwodCl7bGV0IHI9dGhpcy5fY29udGVudEluZGV4PXRoaXMuX2NvbnRlbnRJbmRleCsxfHwwLG49InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iK3IsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsbik7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtvLmlkPW4ucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksby5zZXRBdHRyaWJ1dGUoInJvbGUiLHQ9PT0idGQiPyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIm5hbWUiLG4pLG8uYXBwZW5kQ2hpbGQoYSksby5fY29udGVudD1pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2xldCBzPSgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCEwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKX0pfSksb31fdXBkYXRlUm93KHQscixuLGksbyl7bj1ufHwiYm9keSI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChzPT5zLl92YWNhbnQ9ITApLHQuaW5uZXJIVE1MPSIiLHQuaWQhPT0ic2l6ZXIiJiYodC5oaWRkZW49ITApLHIuZmlsdGVyKHM9PiFzLmhpZGRlbikuZm9yRWFjaCgocyxsLGMpPT57bGV0IHU7aWYobj09PSJib2R5Iil7aWYocy5fY2VsbHM9cy5fY2VsbHN8fFtdLHU9cy5fY2VsbHMuZmlsdGVyKGg9PmguX3ZhY2FudClbMF0sdXx8KHU9dGhpcy5fY3JlYXRlQ2VsbCgidGQiKSxzLl9jZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgYm9keS1jZWxsIiksdC5hcHBlbmRDaGlsZCh1KSxsPT09Yy5sZW5ndGgtMSYmKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpKXt0aGlzLl9kZXRhaWxzQ2VsbHM9dGhpcy5fZGV0YWlsc0NlbGxzfHxbXTtsZXQgaD10aGlzLl9kZXRhaWxzQ2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7dGhpcy5fZGV0YWlsc0NlbGxzLmluZGV4T2YoaCk9PT0tMSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goaCksaC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKGguX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGgpLHQuYXBwZW5kQ2hpbGQoaCksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsaCksaC5fdmFjYW50PSExfXMubm90aWZ5UGF0aCYmIW8mJnMubm90aWZ5UGF0aCgiX2NlbGxzLioiLHMuX2NlbGxzKX1lbHNle2xldCBoPW49PT0iaGVhZGVyIj8idGgiOiJ0ZCI7aXx8cy5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj8odT1zW2BfJHtufUNlbGxgXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHNbYF8ke259Q2VsbGBdPXUpOihzLl9lbXB0eUNlbGxzPXMuX2VtcHR5Q2VsbHN8fFtdLHU9cy5fZW1wdHlDZWxscy5maWx0ZXIoZj0+Zi5fdmFjYW50KVswXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHMuX2VtcHR5Q2VsbHMuaW5kZXhPZih1KT09PS0xJiZzLl9lbXB0eUNlbGxzLnB1c2godSkpLHUuc2V0QXR0cmlidXRlKCJwYXJ0IixgY2VsbCAke259LWNlbGxgKSx0aGlzLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KX11Ll9jb250ZW50LnBhcmVudEVsZW1lbnR8fGEuYXBwZW5kQ2hpbGQodS5fY29udGVudCksdS5fdmFjYW50PSExLHUuX2NvbHVtbj1zfSksdGhpcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl9X191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KHQpe2lmKCF0KXJldHVybjtsZXQgcj1BcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZpbHRlcihuPT57bGV0IGk9bi5fY29sdW1uO2lmKGkuX2VtcHR5Q2VsbHMmJmkuX2VtcHR5Q2VsbHMuaW5kZXhPZihuKT4tMSlyZXR1cm4hMTtpZih0LnBhcmVudEVsZW1lbnQ9PT10aGlzLiQuaGVhZGVyKXtpZihpLmhlYWRlclJlbmRlcmVyfHxpLl9oZWFkZXJUZW1wbGF0ZSlyZXR1cm4hMDtpZihpLmhlYWRlcj09PW51bGwpcmV0dXJuITE7aWYoaS5wYXRofHxpLmhlYWRlciE9PXZvaWQgMClyZXR1cm4hMH1lbHNlIGlmKGkuZm9vdGVyUmVuZGVyZXJ8fGkuX2Zvb3RlclRlbXBsYXRlKXJldHVybiEwfSk7dC5oaWRkZW4hPT0hci5sZW5ndGgmJih0LmhpZGRlbj0hci5sZW5ndGgsdGhpcy5ub3RpZnlSZXNpemUoKSl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LHIpe3RoaXMuX3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsciksdGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QiLHI9PT0wLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgib2RkIixyJTIsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1Jvd2luZGV4KHQsciksdGhpcy5fZ2V0SXRlbShyLHQpKX1fY29sdW1uVHJlZUNoYW5nZWQodCl7dGhpcy5fcmVuZGVyQ29sdW1uVHJlZSh0KSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9X3JlbmRlckNvbHVtblRyZWUodCl7Zm9yKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtyLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZChyKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO24uc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93Iiksbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuZm9vdGVyLmFwcGVuZENoaWxkKG4pfWZvcig7dGhpcy4kLmhlYWRlci5jaGlsZHJlbi5sZW5ndGg+dC5sZW5ndGg7KXRoaXMuJC5oZWFkZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCksdGhpcy4kLmZvb3Rlci5yZW1vdmVDaGlsZCh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkKTtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMS1uXSwiZm9vdGVyIixuPT09MCkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKX1fdXBkYXRlSXRlbSh0LHIpe3QuX2l0ZW09cjtsZXQgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChyKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsciksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpZihpLl9yZW5kZXJlcil7bGV0IG89aS5fY29sdW1ufHx0aGlzO2kuX3JlbmRlcmVyLmNhbGwobyxpLl9jb250ZW50LG8sbil9ZWxzZSBpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCxpLl9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCxpLl9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCxpLl9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCxpLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pLHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cyxtby5hZnRlcigxKSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXt0LmFuaW1hdGlvbk5hbWUuaW5kZXhPZigidmFhZGluLWdyaWQtYXBwZWFyIik9PT0wJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCksdGhpcy4kLnRhYmxlLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9KSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LHIsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hciYmKHI/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISEodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCh0PT57dC5mb3JFYWNoKHI9PnIuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKX0pLHRoaXMuX3VwZGF0ZSgpKX1ub3RpZnlSZXNpemUoKXtzdXBlci5ub3RpZnlSZXNpemUoKX1faGVpZ2h0QnlSb3dzQ2hhbmdlZCh0LHIpeyh0fHxyKSYmdGhpcy5ub3RpZnlSZXNpemUoKX1fX2ZvcmNlUmVmbG93KCl7dGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3c9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3csTmksKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJWLmlzLHJWKTtmdW5jdGlvbiBsdWUoZSx0KXtyZXR1cm4gRGd0KGUsdCl9dmFyIGMxPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQscixuKXtyZXR1cm4gcj9NaShuKHQscikse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQscixuKXtyZXR1cm4gcj9uKHQscik6IiJ9X2Nzdk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uanNvbmA6IiJ9fTtjMS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGMxLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjMS5wcm90b3R5cGUsInVybEZuIix2b2lkIDApO2MxPUUoW3l0KCJ0Zi1kb3dubG9hZGVyIildLGMxKTt2YXIgYWhyPTY0LGdsaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEduPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2lmKG49PW51bGwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIscik7cmV0dXJufWxldCBpPW4ubWFwKGE9Pih7d2FsbF90aW1lOm5ldyBEYXRlKGFbMF0qMWUzKSxzdGVwOmFbMV0sc2NhbGFyOmFbMl19KSksbz10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHIpO3Quc2V0U2VyaWVzTWV0YWRhdGEobyxyKSx0LnNldFNlcmllc0RhdGEobyxpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjpyfSk9Pl9lKCkucGx1Z2luUm91dGVGb3JTcmMoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOnJ9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxyKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOnJ9KSx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LHIsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQscixuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPU1pKG8se3RhZzphLnRhZyxydW46YS5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHMpLnRoZW4obD0+dm9pZCByKHtpdGVtOmEsZGF0YTpsfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LHIsbik9Pnt2YXIgYztsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxhPW5ldyBNYXA7Zm9yKGxldHt0YWc6dSxydW46aH1vZiB0KXtsZXQgZj1hLmdldCh1KTtmPT1udWxsJiZhLnNldCh1LGY9W10pLGYucHVzaChoKX1sZXQgcz0oYz10aGlzLmJhdGNoU2l6ZSkhPW51bGw/YzphaHIsbD1bXTtmb3IobGV0W3UsaF1vZiBhKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7Zis9cylsLnB1c2goe3RhZzp1LHJ1bnM6aC5zbGljZShmLGYrcyl9KTtQcm9taXNlLmFsbChsLm1hcCgoe3RhZzp1LHJ1bnM6aH0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyx7dGFnOnUscnVuczpofSkudGhlbihmPT57Zm9yKGxldCBwIG9mIGgpe2xldCBkPXt0YWc6dSxydW46cH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYscCk/cih7aXRlbTpkLGRhdGE6ZltwXX0pOnIoe2l0ZW06ZCxkYXRhOm51bGx9KX19KSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9aXN0LnNsaWNlKCkscj10LmZpbmRJbmRleChuPT5uLnRpdGxlPT0iTmFtZSIpO3JldHVybiB0LnNwbGljZShyLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT57bGV0IGk9bi5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oaSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe3ZhciBuO2xldCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLmV4cG9ydEFzU3ZnU3RyaW5nKCkscj0obj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDpuLnF1ZXJ5U2VsZWN0b3IoIiNzdmdMaW5rIik7ci5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKHI9PnIucnVuKX1fZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OnI9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3IubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUhPT1udWxsP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2xldFsscl09SlNPTi5wYXJzZSh0KTtyZXR1cm4gZm4ocil9fX19O0duLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19nZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUpXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC1uYW1lPSJbW19nZXREYXRhTG9hZE5hbWVdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIgogICAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249ImF1dG8iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBpY29uPSJmaWxlLWRvd25sb2FkIgogICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPgogICAgICAgICAgICAgIDxhIGlkPSJzdmdMaW5rIiBkb3dubG9hZD0iW1t0YWddXS5zdmciPgogICAgICAgICAgICAgICAgRG93bmxvYWQgQ3VycmVudCBDaGFydCBhcyBTVkcKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLW1lbnUtYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8dGYtZG93bmxvYWRlcgogICAgICAgICAgICBydW5zPSJbW19ydW5zRnJvbURhdGEoZGF0YVRvTG9hZCldXSIKICAgICAgICAgICAgdGFnPSJbW3RhZ11dIgogICAgICAgICAgICB1cmwtZm49IltbX2Rvd25sb2FkVXJsRm5dXSIKICAgICAgICAgID48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sR24ucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEduLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sR24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHbi5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEduLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEduLnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfbG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwicmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR24ucHJvdG90eXBlLCJfbG9nU2NhbGVBY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEduLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0duPUUoW3l0KCJ0Zi1zY2FsYXItY2FyZCIpXSxHbik7dmFyIFZzPWNsYXNzIGV4dGVuZHMgbHVlKFtjV10sbXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fbm9NdWx0aUV4cGVyaW1lbnRzPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntQcm9taXNlLmFsbCh0Lm1hcChpPT57bGV0IG89e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6aS5ydW4sbWV0cmljTmFtZTppLnRhZ307cmV0dXJuIHRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMobykudGhlbihhPT52b2lkIHIoe2l0ZW06aSxkYXRhOmF9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57bGV0IHI9SlNPTi5wYXJzZSh0KVsxXSxuPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChyKSxpPWlSO3JldHVybiBpWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVpLmxlbmd0aF19fX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5yZWRyYXcuYmluZCh0aGlzKSl9cmVkcmF3KCl7dmFyIHQ7KHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2gocj0+e3IucmVkcmF3KCl9KX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3ZhciB0OyF0aGlzLnNlc3Npb25Hcm91cHx8T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD09MD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKHIsbik9PltyLm5hbWUsbl0pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD1kY3QodGhpcy5zZXNzaW9uR3JvdXAubmFtZSkpLCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntsZXQgbj1yLGk9bi5nZXQoInRhZyIpO24uc2V0KCJ0YWciLCIiKSxuLnNldCgidGFnIixpKX0pfV9oYXZlTWV0cmljcygpe3JldHVybiB0aGlzLnZpc2libGVTY2hlbWEmJkFycmF5LmlzQXJyYXkodGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zKSYmdGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wfV9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX1fY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyh0LHIpe3JldHVybiB0PT09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHxyPT09bnVsbD9bXTp0LnNlc3Npb25zLmZpbHRlcihuPT5mMyhuLm1ldHJpY1ZhbHVlcyxyLm5hbWUpIT09dm9pZCAwKS5tYXAobj0+KHt0YWc6ci5uYW1lLHJ1bjpuLm5hbWV9KSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6UXUodCksZGVzY3JpcHRpb246dC5kZXNjcmlwdGlvbnx8IiJ9fX07VnMudGVtcGxhdGU9UWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVnMucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2luZGV4T2ZTZXNzaW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVnMucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3VwLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cENoYW5nZWQiLG51bGwpO1ZzPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIpXSxWcyk7dmFyIEhkPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faHBhcmFtTmFtZT1GZCx0aGlzLl9tZXRyaWNOYW1lPVF1fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2xldCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksY2koKTtsZXQgcj1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKG49PntyLnNldChuLm5hbWUsbil9KSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcChuPT5yLmdldChuLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxyKXtyZXR1cm4gdD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQuaHBhcmFtcyxyKT8iIjpiMCh0LmhwYXJhbXNbcl0pfV9zZXNzaW9uR3JvdXBNZXRyaWModCxyKXtpZih0PT1udWxsfHxPYmplY3Qua2V5cyh0KS5sZW5ndGg9PTApcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1yLmdyb3VwJiZpLm5hbWUudGFnPT1yLnRhZylyZXR1cm4gYjAoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07SGQudGVtcGxhdGU9UWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSGQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIZC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIZC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIZC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhkLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtIZD1FKFt5dCgidGYtaHBhcmFtcy10YWJsZS12aWV3IildLEhkKTt2YXIgQ1A9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LHIpe3JldHVybiB0IT1udWxsJiZyIT09dm9pZCAwJiZyIT09bnVsbH1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gdD09bnVsbD9bXTpbdF19fTtDUC50ZW1wbGF0ZT1RYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0NQPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLENQKTt2YXIgQVA9RWUoT2UoKSwxKTtmdW5jdGlvbiBjdWUoZSx0LHIsbil7aWYodC5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtsZXQgaT1yWzBdLG89clsxXTtpZihpPD10WzBdfHxpPj10W3QubGVuZ3RoLTFdKXJldHVybiBudWxsO2xldCBhPUFQLnNvcnRlZEluZGV4KHQsaSk7Y29uc29sZS5hc3NlcnQoYT4wKSxjb25zb2xlLmFzc2VydChhPHQubGVuZ3RoKTtsZXQgcz1hLTE7ZnVuY3Rpb24gbChoLGYscCxkKXtsZXQgZz1oLXAsXz1mLWQseT1pLXAseD1vLWQsYj0oZyp5K18qeCkvKGcqZytfKl8pO2lmKGI8PTApcmV0dXJuIHAzKHkseCk7aWYoYj49MSl7bGV0IFM9aC1pLEM9Zi1vO3JldHVybiBwMyhTLEMpfXJldHVybiBwMyh5LWIqZyx4LWIqXyl9bGV0IGM9bnVsbCx1PW51bGw7cmV0dXJuIGUuZm9yRWFjaChoPT57bGV0IGY9bChoLmNvbnRyb2xQb2ludHNbc11bMF0saC5jb250cm9sUG9pbnRzW3NdWzFdLGguY29udHJvbFBvaW50c1thXVswXSxoLmNvbnRyb2xQb2ludHNbYV1bMV0pO2Y+bnx8KGM9PT1udWxsfHxmPGMpJiYoYz1mLHU9aCl9KSx1fWZ1bmN0aW9uIHV1ZShlLHQscil7cmV0dXJuIGUuZG9tYWluKCkuZmlsdGVyKG49PntsZXQgaT1lKG4pO3JldHVybiB0PD1pJiZpPD1yfSl9ZnVuY3Rpb24gaHVlKGUsdCxyKXtsZXQgbj1lLnJhbmdlKCksaT1uLmZpbHRlcihvPT50PD1vJiZvPD1yKS5tYXAobz0+e2xldCBhPWUuaW52ZXJ0RXh0ZW50KG8pO3JldHVybiBvPT09bltuLmxlbmd0aC0xXT9bYVswXSxhWzFdKzFdOmF9KTtyZXR1cm4gaS5sZW5ndGg9PTA/WzAsMF06YWEoSW0oaSkpfWZ1bmN0aW9uIGZ1ZShlLHQscil7cmV0dXJuW2UuaW52ZXJ0KHQpLGUuaW52ZXJ0KHIpXS5zb3J0KChuLGkpPT5uLWkpfWZ1bmN0aW9uIEZjdChlLHQscil7ZnVuY3Rpb24gbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5bMSwyXTtsZXRbaSxvXT1hYShlKTtyZXR1cm4gaSE9PW8/W2ksb106aT4wP1tpKi41LGkqMS41XTppPDA/W2kqMS41LGkqLjVdOlstMSwxXX1pZihyPT09IkxJTkVBUiIpcmV0dXJuIE9uKCkuZG9tYWluKG4oKSkucmFuZ2UoW3QsMF0pO2lmKHI9PT0iTE9HIil7bGV0IGk9bigpO3JldHVybiBpWzBdPD0wJiZpWzFdPj0wP0ZjdChlLHQsIkxJTkVBUiIpOmNjKCkuZG9tYWluKGkpLnJhbmdlKFt0LDBdKX1lbHNlIGlmKHI9PT0iUVVBTlRJTEUiKXtsZXQgbz1JcigyMCkubWFwKGE9PnQtYSp0LzE5KTtyZXR1cm4gZS5sZW5ndGg9PT0wJiYoZT1bMV0pLGVnKCkuZG9tYWluKEFQLnVuaXEoZSkpLnJhbmdlKG8pfWVsc2V7aWYocj09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKEFQLnVuaXEoZS5zb3J0KCkpKS5yYW5nZShbdCwwXSkucGFkZGluZyguMSk7dGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBzY2FsZTogIityKX19dmFyIHUxOyhmdW5jdGlvbihlKXtlLkxJTkVBUj0iTElORUFSIixlLkxPRz0iTE9HIixlLlFVQU5USUxFPSJRVUFOVElMRSIsZS5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkodTF8fCh1MT17fSkpO3ZhciBQUD1jbGFzc3tpc1Bhc3NpbmcodCl7cmV0dXJuITB9fSxuVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPXIsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2xldCByPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQscixuKXtyZXR1cm4gbj90PD1yOnQ8cn19LEhjdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb21haW5TZXQ9dH1pc1Bhc3NpbmcodCl7cmV0dXJuIHRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgocj0+cj09PXQpIT09LTF9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bix0aGlzLl9jb2xJbmRleD1pLHRoaXMuX2lzRGlzcGxheWVkPSExLHRoaXMuX3lTY2FsZT1udWxsLHRoaXMuX3NjYWxlVHlwZT1udWxsLHRoaXMuc2V0QnJ1c2hTZWxlY3Rpb24obnVsbCl9Y29sSW5kZXgoKXtyZXR1cm4gdGhpcy5fY29sSW5kZXh9eVNjYWxlKCl7cmV0dXJuIHRoaXMuX3lTY2FsZX1zY2FsZVR5cGUoKXtyZXR1cm4gdGhpcy5fc2NhbGVUeXBlfWJydXNoU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2JydXNoU2VsZWN0aW9ufWlzRGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcGxheWVkfXNldEJydXNoU2VsZWN0aW9uKHQpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXQsdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZSh0LHIpe3RoaXMuX3NjYWxlVHlwZT1yLHRoaXMuX3lTY2FsZT1GY3QodC5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKSx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTSh0KXtsZXQgcj1sYih0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09dTEuUVVBTlRJTEUmJihyPXIudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KHhuKCItLjZnIikpKTtsZXQgbj1IdCh0KTtuLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLG4uYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwocikuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoYT0+Y2N0KHRoaXMuX3NjaGVtYSxhKSksbi5jYWxsKHBiKCkub24oInN0YXJ0IiwoKT0+e3Quc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHF0LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTtsZXQgaT1xTCgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCk9PnshQmN0KHF0KXx8KHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKSl9KS5vbigiYnJ1c2giLCgpPT57IUJjdChxdCl8fHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKX0pLm9uKCJlbmQiLCgpPT57IUJjdChxdCl8fCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbiksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSksbz1IdCh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO28uY2FsbChpKSxpLm1vdmUobyx0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQscixuKXtpZih0PT09bnVsbClyZXR1cm4gbmV3IFBQO2lmKHI9PT1udWxsKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgUFA7c3dpdGNoKHIpe2Nhc2UgdTEuTElORUFSOmNhc2UgdTEuTE9HOntsZXRbaSxvXT1mdWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCExKX1jYXNlIHUxLlFVQU5USUxFOntsZXRbaSxvXT1odWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCEwKX1jYXNlIHUxLk5PTl9OVU1FUklDOnJldHVybiBuZXcgSGN0KHV1ZShuLHRbMF0sdFsxXSkpfXJldHVybiBjb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsciksbmV3IFBQfX0saVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPXRnKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQscil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7bGV0IG49bmV3IFNldDt0LmNvbHVtbnMuZm9yRWFjaChvPT57bGV0IGE9by5hYnNvbHV0ZUluZGV4LHM9dGhpcy5fYXhlc1thXTtzLnNldERpc3BsYXllZCghMCk7bGV0IGw9ci5tYXAoYz0+eDAodGhpcy5fc2NoZW1hLGMsYSkpO3Muc2V0RG9tYWluQW5kU2NhbGUobCxvLnNjYWxlKSxuLmFkZChhKX0pLHRoaXMuX2F4ZXMuZm9yRWFjaChvPT57bi5oYXMoby5jb2xJbmRleCgpKXx8by5zZXREaXNwbGF5ZWQoITEpfSksdGhpcy5fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMobiksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmRhdGEoQXJyYXkuZnJvbShuKSxvPT5vKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2xldCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKG89PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShvKSkuZWFjaChmdW5jdGlvbihvKXtpLl9heGVzW29dLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeShyPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpLHRoaXMuX2F4ZXNbcl0pKX1nZXRBeGlzRm9yQ29sSW5kZXgodCl7cmV0dXJuIHRoaXMuX2F4ZXNbdF19ZHJhZ1N0YXJ0KHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2F4ZXNbdF0uaXNEaXNwbGF5ZWQoKSksdGhpcy5fZHJhZ2dlZEF4aXM9dGhpcy5fYXhlc1t0XSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfWRyYWcodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXQ7bGV0IHI9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCk7ci5zb3J0KChuLGkpPT50aGlzLmdldEF4aXNQb3NpdGlvbihuKS10aGlzLmdldEF4aXNQb3NpdGlvbihpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGx9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGwmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcihpPT50LmhhcyhpKSksbj1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnIsLi4uQXJyYXkuZnJvbSh0KV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4obil9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KXt0LmF0dHIoInRyYW5zZm9ybSIscj0+eVAodGhpcy5nZXRBeGlzUG9zaXRpb24ocikpKX1fY3JlYXRlQXhlcyh0KXtyZXR1cm4gSXIodWN0KHRoaXMuX3NjaGVtYSkpLm1hcChyPT5uZXcgVmN0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LHIpKX19O2Z1bmN0aW9uIEJjdChlKXtyZXR1cm4gZS5zb3VyY2VFdmVudCE9PW51bGx9dmFyIGpmOyhmdW5jdGlvbihlKXtlW2UuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsZVtlLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoamZ8fChqZj17fSkpO3ZhciB0aD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0PT09dm9pZCAwJiYodD1FcChudWxsKSksY29uc29sZS5hc3NlcnQodC5zaXplKCk8PTEpLHRoaXMuX3Nlc3Npb25Hcm91cFNlbD10fXNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpPT09MT90aGlzLl9zZXNzaW9uR3JvdXBTZWwuZGF0dW0oKTpudWxsfWlzTnVsbCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCgpPT09bnVsbH1zZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsfWVxdWFsc1RvKHQpe3ZhciByLG47cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTp0LmlzTnVsbCgpPyExOigocj10LnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6ci5uYW1lKT09KChuPXRoaXMuc2Vzc2lvbkdyb3VwKCkpPT1udWxsP3ZvaWQgMDpuLm5hbWUpfX0sb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlc0NvbGxlY3Rpb249bix0aGlzLl9zZXNzaW9uR3JvdXBzPVtdLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmJhY2tncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5mb3JlZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiZm9yZWdyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB0aCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fZDNsaW5lPXZ1KCkuY3VydmUoWWgpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gdD09bnVsbD9uZXcgdGg6bmV3IHRoKHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKHI9PnIubmFtZT09PXQubmFtZSkpfWhpZGVCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKX1zaG93QmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IixudWxsKX1wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlfXNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlfXJlY29tcHV0ZUNvbnRyb2xQb2ludHModCxyPTApeyh0PT09amYuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyKS5hdHRyKCJkIixpPT50aGlzLl9wYXRoREF0dHJpYnV0ZShpKSksdD09PWpmLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IGk9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goZnVuY3Rpb24obyl7aS5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsbyl9KX0pfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIix0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KChyLG4pPT5uLmJydXNoRmlsdGVyKCkuaXNQYXNzaW5nKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKX1zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcih0LHIsbil7bGV0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxyLG4saSl7bGV0IG89dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLGE9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGEpLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCksdGhpcy5zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcihyLG4saSl9dXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITEpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITApfWNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCl7dGhpcy51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAobmV3IHRoKX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKXtsZXQgbj10aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygobyxhKT0+byksaT1jdWUodGhpcy5fdmlzaWJsZUZnUGF0aHNTZWwubm9kZXMoKSxuLFt0LHJdLDEwMCk7cmV0dXJuIGk9PT1udWxsP25ldyB0aDpuZXcgdGgoSHQoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuKCk9PiJyZWQiO2xldCBpPU9uKCkuZG9tYWluKGhjdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW3Isbl0pLmludGVycG9sYXRlKE1fKTtyZXR1cm4gbz0+aSh4MCh0aGlzLl9zY2hlbWEsbyx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuIHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMscj0+ci5uYW1lKSx0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UodCl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0LHIpe3QuY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhyKX1fY29tcHV0ZUNvbnRyb2xQb2ludHModCl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChyLG4pPT5bcixuLnlTY2FsZSgpKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSl9X3BhdGhEQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLl9kM2xpbmUodGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHModCkpfV91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpe3RoaXMuX3Zpc2libGVGZ1BhdGhzU2VsPXRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19O3ZhciBhVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuc3ZnPUh0KHQpO2xldCBuPXt0b3A6MzAscmlnaHQ6MTAsYm90dG9tOjEwLGxlZnQ6MTB9LGk9MTAwLG89MjAwLGE9cippK24ubGVmdCtuLnJpZ2h0LHM9bytuLnRvcCtuLmJvdHRvbTt0aGlzLnN2Zy5hdHRyKCJ2aWV3Qm94IixgMCAwICR7YX0gJHtzfWApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGErInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLHMrInB4IiksdGhpcy53aWR0aD1hLW4ubGVmdC1uLnJpZ2h0LHRoaXMuaGVpZ2h0PXMtbi50b3Atbi5ib3R0b20sdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseVAobi5sZWZ0LG4udG9wKSl9fSxzVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGlWKHQscix0aGlzKSx0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IG9WKHQscix0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57bGV0W28sYV09em8odGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKG8sYSl9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydCh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKHIpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQscil7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyB0aCk6dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodCxyKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKHQscik7bGV0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhyLHQuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwP3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fTt2YXIgZWg9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5yZWRyYXdDb3VudD0wfV9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3ZhciBuO2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuO2xldHtjb25maWd1cmF0aW9uOnR9PShuPXRoaXMuX3ByZXZPcHRpb25zKSE9bnVsbD9uOnt9LHtjb25maWd1cmF0aW9uOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9PT12b2lkIDB8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LnNjaGVtYSxyLnNjaGVtYSl8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LmNvbHVtbnNWaXNpYmlsaXR5LHIuY29sdW1uc1Zpc2liaWxpdHkpKXtIdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgaT1uZXcgYVYodGhpcy4kLnN2ZyxyLmNvbHVtbnNWaXNpYmlsaXR5LmZpbHRlcihCb29sZWFuKS5sZW5ndGgpO3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uZXcgc1YoaSxyLnNjaGVtYSxvPT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pLG89PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7bGV0IHQ9Y3M7aWYodGhpcy5zZXNzaW9uR3JvdXBzPT09dm9pZCAwKXt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO3JldHVybn1sZXQgcj10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5zY2hlbWE7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXRoaXMuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKHIpOysraSl7aWYoIXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldKWNvbnRpbnVlO2xldCBvPXQuY29sdW1uVmFsdWVCeUluZGV4KHIsbixpKTtpZihvPT09dm9pZCAwfHxvPT09Ik5hTiIpcmV0dXJuITF9cmV0dXJuITB9KX19O2VoLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxlaC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZWgucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCk7RShbQnQoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZWgucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO2VoPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLGVoKTt2YXIgQTA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEscj10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLG49KGEscyk9Pih7bmFtZTpGZChhKSxpbmRleDpzLGFic29sdXRlSW5kZXg6ekgocix0LHMpLHNjYWxlOnRoaXMuX2lzTnVtZXJpY0NvbHVtbihzKT8iTElORUFSIjoiTk9OX05VTUVSSUMifSksaT0oYSxzKT0+e2xldCBsPXMrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6UXUoYSksaW5kZXg6bCxhYnNvbHV0ZUluZGV4OnpIKHIsdCxsKX19LG89e2NvbHVtbnM6dC5ocGFyYW1JbmZvcy5tYXAobikuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKGkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbyksY2koKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXt0aGlzLm9wdGlvbnMhPT1udWxsJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHQ9PntsZXQgcj0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDshdGhpcy5fYWxsb3dMb2dTY2FsZSh0KSYmdC5zY2FsZT09PSJMT0ciJiZ0aGlzLnNldChyKyIuc2NhbGUiLCJMSU5FQVIiKX0pfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7bGV0W3Isbl09X1AodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiByPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW3RdLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQifV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtsZXQgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgocj0+ci50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0Iik7aWYodCE9PS0xKXJldHVybiB0fX07QTAudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQTAucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBMC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtCdCgiY29uZmlndXJhdGlvbi4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxBMC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCk7QTA9RShbeXQoInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLEEwKTt2YXIgaDE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07aDEudGVtcGxhdGU9UWAKICAgIDwhLS0gQ29udHJvbHMgYmVoYXZpb3Igb2YgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdAogICAgICAgICBvdXRwdXRzIHNldCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4KICAgICAgLS0+CiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBUaGUgc2NhbGUgYW5kIGNvbG9yIGNvbnRyb2xzLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdCAtLT4KICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QKICAgICAgICBpZD0icGxvdCIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iCiAgICAgICAgY2xvc2VzdC1zZXNzaW9uLWdyb3VwPSJ7e19jbG9zZXN0R3JvdXB9fSIKICAgICAgICBvcHRpb25zPSJbW19vcHRpb25zXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIGlkPSJ2YWx1ZXMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGgxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxoMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7aDE9RShbeXQoInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0saDEpO3ZhciB5Mz1FZShPZSgpLDEpO3ZhciAkbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9SHQodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPWZjdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57bGV0IHQ9Y3Mscj0xMjAwLG49LjQqcixpPTE1MCxvPS43NSppO3RoaXMud2lkdGg9TWF0aC5tYXgoaSp0Lm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksciksdGhpcy5oZWlnaHQ9TWF0aC5tYXgobyp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksbiksdGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KSx0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksdGhpcy5fZHJhdygpfSwxMDApfV9kcmF3KCl7bGV0IHQ9Y3Mscj10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fHRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGg9PTB8fCF0aGlzLnZpc2libGVTY2hlbWF8fHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg9PTApcmV0dXJuO2xldCBuPUlyKHQubnVtVmlzaWJsZUNvbHVtbnMoci52aXNpYmxlU2NoZW1hKSksaT1Jcih0Lm51bVZpc2libGVNZXRyaWNzKHIudmlzaWJsZVNjaGVtYSkpLG89ODAsYT01MCxzPTUsbD1RbSgpLmRvbWFpbihuKS5yYW5nZShbbytzLHRoaXMud2lkdGgtMS1zXSkucGFkZGluZ0lubmVyKC4xKSxjPVFtKCkuZG9tYWluKGkpLnJhbmdlKFt0aGlzLmhlaWdodC0xLXMtYSxzXSkucGFkZGluZ0lubmVyKC4xKSx1PWwuYmFuZHdpZHRoKCksaD1jLmJhbmR3aWR0aCgpLGY9bi5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCxbMCx1LTFdKSkscD1pLm1hcChjdD0+ci5fY2VsbFNjYWxlKGN0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKSxbaC0xLDBdKSksZD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKGwoY3QpLDApKTtmdW5jdGlvbiBnKGN0KXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIF8oY3Qpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2N0fWQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixnKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0LWEvMiksZC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLF8pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHIuaGVpZ2h0LWEvMikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsYS8yKSxkLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrZyhjdCkrIikiKS5lYWNoKGZ1bmN0aW9uKGN0KXtIdCh0aGlzKS5jYWxsKFMsWjkoZltjdF0pLnRpY2tTaXplKHIuaGVpZ2h0LWEpLHUsNDAsci5vcHRpb25zLmNvbHVtbnNbY3RdLnNjYWxlKX0pLGQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIitfKGN0KSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsdS8yKS5hdHRyKCJ5IixyLmhlaWdodC0xLWEvNCkudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKS5hcHBlbmQoInRpdGxlIikudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKTtsZXQgeT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKHIud2lkdGgtMSxjKGN0KSkpO2Z1bmN0aW9uIHgoY3Qpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrY3R9ZnVuY3Rpb24gYihjdCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrY3R9eS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oci53aWR0aC1vLzItMSkpLmF0dHIoInkiLC1zKS5hdHRyKCJ3aWR0aCIsci53aWR0aC1vLzIpLmF0dHIoImhlaWdodCIsaCsyKnMpLHkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixiKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixvLzIpLmF0dHIoImhlaWdodCIsaCkseS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK3goY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLGxiKHBbY3RdKS50aWNrU2l6ZShyLndpZHRoLW8pLGgsMjAsci5vcHRpb25zLmNvbHVtbnNbY3QrdC5udW1WaXNpYmxlSFBhcmFtcyhyLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSx5LmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrYihjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oci53aWR0aC1vLzQtMSkpLmF0dHIoInkiLGgvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKHIud2lkdGgtby80LTEpLGgvMikpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSk7ZnVuY3Rpb24gUyhjdCxYLGV0LGR0LHEpe2xldCBwdD1NYXRoLmZsb29yKGV0L2R0KSxodD1YLnNjYWxlKCk7aWYocT09PSJRVUFOVElMRSIpe2xldCB3dD1odC5xdWFudGlsZXMoKSxrdD1NYXRoLmNlaWwod3QubGVuZ3RoL3B0KTt3dD1JcigwLHd0Lmxlbmd0aCxrdCkubWFwKGllPT53dFtpZV0pLFgudGlja1ZhbHVlcyh3dCkudGlja0Zvcm1hdCh4bigiLS4yZyIpKX0ocT09PSJMSU5FQVIifHxxPT09IkxPRyIpJiZYLnRpY2tzKHB0KSxjdC5jYWxsKFgpLGN0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLGN0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1sZXQgQz10aGlzLl9zdmcuc2VsZWN0QWxsKCIuY2VsbCIpLmRhdGEocTkobixpKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjZWxsIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoW2N0LFhdKT0+dC50cmFuc2xhdGVTdHIobChjdCksYyhYKSkpLFA9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC1zKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLGgrMipzKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksaz1udWxsO3Iub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXghPT12b2lkIDAmJihrPU9uKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShNXykpO2xldCBPPXIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg9PT12b2lkIDA/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmN0fSk9PmsodGhpcy5fY29sVmFsdWUoY3Qsci5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpO2Z1bmN0aW9uIEQoY3QsWCl7cmV0dXJuIGZbWF0oci5fY29sVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEIoY3QsWCl7cmV0dXJuIHBbWF0oci5fbWV0cmljVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEkoY3QsWCl7bGV0IGV0PWN0LnNlbGVjdEFsbCgiLmRhdGEtbWFya2VyIikuZGF0YSgoW3B0LGh0XSk9PnIuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIod3Q9PnIuX2NvbFZhbHVlKHd0LHB0KSE9PXZvaWQgMCYmci5fbWV0cmljVmFsdWUod3QsaHQpIT09dm9pZCAwKS5tYXAod3Q9Pih7Y29sOnB0LG1ldHJpYzpodCxzZXNzaW9uR3JvdXA6d3QseDpEKHd0LHB0KSx5OkIod3QsaHQpLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImRhdGEtbWFya2VyIiwhMCkuYXR0cigiY3giLCh7eDpwdH0pPT5wdCkuYXR0cigiY3kiLCh7eTpwdH0pPT5wdCkuYXR0cigiciIsMikuYXR0cigiZmlsbCIsWCksZHQ9bmV3IE1hcDtyLnNlc3Npb25Hcm91cHMuZm9yRWFjaChwdD0+e2R0LnNldChwdCxbXSl9KSxldC5lYWNoKGZ1bmN0aW9uKHB0KXt2YXIgaHQ7KGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApKT09bnVsbHx8aHQucHVzaCh0aGlzKX0pLGV0LmVhY2gocHQ9PntsZXQgaHQ9ZHQuZ2V0KHB0LnNlc3Npb25Hcm91cCk7cHQuc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGh0KX0pO2xldCBxPW4ubWFwKHB0PT5pLm1hcChodD0+ZXQuZmlsdGVyKHd0PT53dC5jb2w9PXB0JiZ3dC5tZXRyaWM9PWh0KSkpO3JldHVybltldCxxLGR0XX1sZXRbTCxSLEZdPUkoQy5hcHBlbmQoImciKSxPKTtmdW5jdGlvbiB6KGN0LFgpe2xldCBldD1bXTtyZXR1cm4gUltjdF1bWF0uZWFjaChmdW5jdGlvbigpe2V0LnB1c2godGhpcyl9KSx6aCgpLngoZHQ9Pkh0KGR0KS5kYXR1bSgpLngpLnkoZHQ9Pkh0KGR0KS5kYXR1bSgpLnkpLmFkZEFsbChldCl9bGV0IFU9bi5tYXAoY3Q9PmkubWFwKFg9PnooY3QsWCkpKSxXPW51bGw7YnQoKSYmKFc9Qy5maWx0ZXIoY3Q9PnkzLmlzRXF1YWwoY3Qsci5fYnJ1c2hlZENlbGxJbmRleCkpLGNvbnNvbGUuYXNzZXJ0KFcuc2l6ZSgpPT0xLFcpKTtsZXQgWj1uZXcgU2V0KEwubm9kZXMoKSk7cnQoKTtmdW5jdGlvbiBydCgpe2xldCBjdD1uZXcgU2V0KEwubm9kZXMoKSk7TXQoKXx8KGN0PW90KHIuX2JydXNoZWRDZWxsSW5kZXgsci5fYnJ1c2hTZWxlY3Rpb24pKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KGN0LFg9PiFaLmhhcyhYKSkpKS5hdHRyKCJmaWxsIixPKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KFosWD0+IWN0LmhhcyhYKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLFo9Y3R9ZnVuY3Rpb24gb3QoY3QsWCl7Y29uc29sZS5hc3NlcnQoY3QhPT1udWxsKSxjb25zb2xlLmFzc2VydChYIT09bnVsbCk7bGV0W2V0LGR0XT1jdCxxPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChVW2V0XVtkdF0sWFswXVswXSxYWzBdWzFdLFhbMV1bMF0sWFsxXVsxXSxwdD0+e0h0KHB0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCh3dD0+e3EuYWRkKHd0KX0pfSkscX1sZXQgc3Q9R0woKS5leHRlbnQoW1stcysxLC1zKzFdLFt1LTErcy0xLGgtMStzLTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe2J0KCkmJlcubm9kZSgpIT10aGlzJiZzdC5tb3ZlKFcsbnVsbCksU3QodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7U3QodGhpcyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1N0KHRoaXMpfSk7ZnVuY3Rpb24gU3QoY3Qpe2xldCBYPVVMKGN0KTshYnQoKSYmWD09PW51bGx8fGJ0KCkmJmN0PT09Vy5ub2RlKCkmJnkzLmlzRXF1YWwoWCxyLl9icnVzaFNlbGVjdGlvbil8fChyLl9icnVzaFNlbGVjdGlvbj1YLFghPT1udWxsPyhXPUh0KGN0KSxyLl9icnVzaGVkQ2VsbEluZGV4PVcuZGF0dW0oKSk6KFc9bnVsbCxyLl9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHJ0KCkpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHIuX2JydXNoZWRDZWxsSW5kZXghPT1udWxsJiZyLl9icnVzaFNlbGVjdGlvbiE9PW51bGx9ZnVuY3Rpb24gTXQoKXtyZXR1cm4hYnQoKXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMF09PT1yLl9icnVzaFNlbGVjdGlvblsxXVswXXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMV09PT1yLl9icnVzaFNlbGVjdGlvblsxXVsxXX1DLmNhbGwoc3QpLGJ0KCkmJnN0Lm1vdmUoVyxyLl9icnVzaFNlbGVjdGlvbik7bGV0IGx0PW51bGwsS3Q9bnVsbDt0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwIT09bnVsbCYmKEt0PUVwKEYuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSksQy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IGN0PWx0PT09S3Q/bnVsbDpsdDtpZihjdD09PUt0KXJldHVybjtLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITEpLEt0PWN0LEt0IT09bnVsbCYmS3QuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCk7bGV0IFg9S3Q9PT1udWxsP251bGw6S3QuZGF0dW0oKS5zZXNzaW9uR3JvdXA7ci5zZWxlY3RlZFNlc3Npb25Hcm91cD1YfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbY3QsWF0pe2xldFtldCxkdF09em8odGhpcykscT1fdChjdCxYLGV0LGR0LDIwKTtsdCE9PXEmJihsdCE9PW51bGwmJmx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksbHQ9cSxsdCE9PW51bGw/KGx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMCksci5jbG9zZXN0U2Vzc2lvbkdyb3VwPWx0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwKTpyLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oW2N0LFhdKXtsdCE9PW51bGwmJihsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PW51bGwsci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSk7ZnVuY3Rpb24gX3QoY3QsWCxldCxkdCxxKXtsZXQgcHQ9MS8wLGh0PW51bGw7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhVW2N0XVtYXSxldCxkdCxxLCh3dCxrdCk9PntpZihaLmhhcyh3dCkmJmt0PHB0KXtsZXQgaWU9SHQod3QpLmRhdHVtKCk7cHQ9a3QsaHQ9aWUuc2Vzc2lvbkdyb3VwfX0pLGh0PT09bnVsbD9udWxsOkVwKEYuZ2V0KGh0KSl9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LHIpe2xldCBuPXRoaXMuX2NvbEV4dGVudCh0KSxpPU9uKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxJTkVBUiIpcmV0dXJuIGk7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTE9HIilyZXR1cm4gblswXTw9MCYmblsxXT49MD9pOmNjKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IlFVQU5USUxFIil7bGV0IG89KHJbMV0tclswXSkvMTksYT1JcigyMCkubWFwKHM9PnJbMF0rbypzKTtyZXR1cm4gZWcoKS5kb21haW4oeTMudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKHM9PnRoaXMuX2NvbFZhbHVlKHMsdCkpKSkucmFuZ2UoYSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChvPT50aGlzLl9jb2xWYWx1ZShvLHQpKS5zb3J0KCkpKS5yYW5nZShyKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc319X2NvbFZhbHVlKHQscil7cmV0dXJuIEJIKHRoaXMudmlzaWJsZVNjaGVtYSx0LHIpfV9tZXRyaWNWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fY29sRXh0ZW50KHQpe3JldHVybiBfUCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQpfX07JG8udGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkby5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSwkby5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfc3ZnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sJG8ucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hlZENlbGxJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInZpc2libGVTY2hlbWEuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpO0UoW0J0KCJvcHRpb25zLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCk7JG89RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLCRvKTt2YXIgZjE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07ZjEudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZjEucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGYxLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtmMT1FKFt5dCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciKV0sZjEpO3ZhciBYZj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zZWxlY3RlZFRhYj0wLHRoaXMuX3RhYmxlVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlRhYmxlIil9LHRoaXMuX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlBhcmFsbGVsIENvb3JkcyIpfSx0aGlzLl9zY2F0dGVyUGxvdE1hdHJpeFRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJTY2F0dGVyIFBsb3QgTWF0cml4Iil9LHRoaXMubG9nQWN0aW9uPSh0LHIpPT57KHdpbmRvdy5nYXx8ZnVuY3Rpb24oKXt9KSgic2VuZCIse2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJIUGFyYW1zIixldmVudEFjdGlvbjp0LGV2ZW50TGFiZWw6cn0pfSx0aGlzLmxvZ0FjdGlvbigiUGx1Z2luIExvYWQiKX19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIG9uLWNsaWNrPSJfdGFibGVUYWJDbGlja2VkIiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfcGFyYWxsZWxDb29yZHNUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyIKICAgICAgICAgID4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWGYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFhmLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWGYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFhmLnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApO1hmPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxYZik7dmFyIHJoPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07cmgudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dD4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgPHRmLWhwYXJhbXMtcXVlcnktcGFuZQogICAgICAgICAgaWQ9InF1ZXJ5LXBhbmUiCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IgogICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtbm9uLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1xdWVyeS1wYW5lPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhwYXJhbXMgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhwYXJhbXMgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgRXZlbnQgZmlsZXMgYXJlIHN0aWxsIGJlaW5nIGxvYWRlZCAodHJ5IHJlbG9hZGluZyB0aGlzIHBhZ2UpLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZQogICAgICAgICAgICBpZD0ic2Vzc2lvbnMtcGFuZSIKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIKICAgICAgICAgICAgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIGhwYXJhbXMtc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsdTMpXSxyaC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scmgucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scmgucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7cmg9RShbeXQoInRmLWhwYXJhbXMtbWFpbiIpXSxyaCk7dmFyIGxocj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgidGVuc29yYm9hcmRDb2xhYiIpPT09InRydWUiLGxWPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9iYWNrZW5kPW5ldyB1MyhuZXcgQWUsbGhyKX1yZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX07bFYudGVtcGxhdGU9UWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsVi5wcm90b3R5cGUsIl9iYWNrZW5kIix2b2lkIDApO2xWPUUoW3l0KCJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIpXSxsVik7dmFyIHAxPUVlKE9lKCksMSk7dmFyIF9uPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdHVhbFNpemU9ITEsdGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudD0uNSx0aGlzLmNvbnRyYXN0UGVyY2VudGFnZT0wLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9pbWFnZUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5fc3RlcHM9W10sdGhpcy5faXNJbWFnZUxvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1nZXQgX2hhc0F0TGVhc3RPbmVTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfWdldCBfaGFzTXVsdGlwbGVTdGVwcygpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiB0Lmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy5vZlNhbXBsZXM7cmV0dXJuIHQ+MX1fZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxyPV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiLHQpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsdC53YWxsX3RpbWUpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiLHIpO3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUodC53YWxsX3RpbWUqMWUzKSxzdGVwOnQuc3RlcCx1cmw6bn19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAscj10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2xldCBpPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKSxpLm9ubG9hZD1pLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUobz0+e2lmKG8uY2FuY2VsbGVkKXJldHVybjtsZXQgYT10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKTthJiYoYS50ZXh0Q29udGVudD0iIix6dChhKS5hcHBlbmRDaGlsZChpKSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkuYmluZCh0aGlzKSxpLnN0eWxlLmZpbHRlcj1gY29udHJhc3QoJHtufSUpIGAsaS5zdHlsZS5maWx0ZXIrPWBicmlnaHRuZXNzKCR7cn0pYCx0aGlzLnNldCgiX2lzSW1hZ2VMb2FkaW5nIiwhMCksaS5zcmM9dC51cmx9X2hhbmRsZVRhcCh0KXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9X3RvTG9jYWxlU3RyaW5nKHQpe3JldHVybiB0LnRvTG9jYWxlU3RyaW5nKCl9fTtfbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJvZlNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxfbi5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxfbi5wcm90b3R5cGUsImNvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLF9uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfaW1hZ2VDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxfbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJfaXNJbWFnZUxvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJzYW1wbGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKTtFKFtSdCgib2ZTYW1wbGVzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU2FtcGxlcyIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAiLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsImNvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJfdXBkYXRlSW1hZ2VVcmwiLG51bGwpO19uPUUoW3l0KCJ0Zi1pbWFnZS1sb2FkZXIiKV0sX24pO3ZhciBJbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWV9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihwMS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cDEubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSW1hZ2VzKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3ZhciB0PXRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50O3JldHVybiB0PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U7cmV0dXJuIHQ9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtsZXQgbz1wMS5tYXBWYWx1ZXModCxjPT5PYmplY3Qua2V5cyhjKSksYT1RbChvLHIsbik7ZnVuY3Rpb24gcyhjKXtsZXQgdT10W2MucnVuXVtjLnRhZ10uc2FtcGxlcztyZXR1cm4gcDEucmFuZ2UodSkubWFwKGg9Pk9iamVjdC5hc3NpZ24oe30sYyx7c2FtcGxlOmgsb2ZTYW1wbGVzOnV9KSl9cmV0dXJuIGEubWFwKGM9Pk9iamVjdC5hc3NpZ24oe30sYyx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGMuaXRlbXMubWFwKHMpKX0pKX1fdGFnTWV0YWRhdGEodCxyLG4pe3JldHVybiB0W3JdW25dfX07SW8udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9hY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2JyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9icmlnaHRuZXNzQWRqdXN0bWVudCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKTtFKFtSdCgiX2NvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLElvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0lvPUUoW3l0KCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sSW8pO3ZhciBzeD1FZShPZSgpLDEpO3ZhciBkMTsoZnVuY3Rpb24oZSl7ZVtlLkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKGQxfHwoZDE9e30pKTt2YXIgY1Y7KGZ1bmN0aW9uKGUpe2VbZS5WRVJURVg9MV09IlZFUlRFWCIsZVtlLkZBQ0U9Ml09IkZBQ0UiLGVbZS5DT0xPUj0zXT0iQ09MT1IifSkoY1Z8fChjVj17fSkpO3ZhciBxY3Q7KGZ1bmN0aW9uKGUpe2UuVkVSVEVYPSJmbG9hdDMyIixlLkZBQ0U9ImludDMyIixlLkNPTE9SPSJ1aW50OCJ9KShxY3R8fChxY3Q9e30pKTt2YXIgSVA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LHIsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQscixuKX1fZmV0Y2hEYXRhQnlTdGVwKHQscixuLGksbyxhKXtsZXQgcz1fZSgpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcobyl9KSksbD1mdW5jdGlvbih1KXtsZXQgZj1bXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoLzM7cCsrKXtsZXQgZD1bXTtmb3IobGV0IGc9MDtnPDM7ZysrKWQucHVzaCh1W3AqMytnXSk7Zi5wdXNoKGQpfXJldHVybiBmfSxjPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh1PT57aWYodS5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO2xldCBoPXUudmFsdWU7c3dpdGNoKG4pe2Nhc2UiVkVSVEVYIjphLnZlcnRpY2VzPWwobmV3IEZsb2F0MzJBcnJheShoKSk7YnJlYWs7Y2FzZSJGQUNFIjphLmZhY2VzPWwobmV3IEludDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiQ09MT1IiOmEuY29sb3JzPWwobmV3IFVpbnQ4QXJyYXkoaCkpO2JyZWFrfXJldHVybiBhfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKHMse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpxY3Rbbl19fSkudGhlbih1PT51LmFycmF5QnVmZmVyKCkpLnRoZW4oYyl9ZmV0Y2hEYXRhKHQscixuLGkpe2xldCBvPVtdLGE9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoY1YpLmZvckVhY2gocz0+e2xldCBsPTE8PGNWW3NdO3QuY29tcG9uZW50cyZsJiZvLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKHIsbixzLGksdC5zdGVwLGEpKX0pLFByb21pc2UuYWxsKG8pfV9mZXRjaE1ldGFkYXRhKHQscixuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IGk9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LHNhbXBsZTpufSkpLG89dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PmEuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pOmEudmFsdWUpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKGE9PmEuanNvbigpKS50aGVuKG8pLnRoZW4odGhpcy5fcHJvY2Vzc01ldGFkYXRhLmJpbmQodGhpcykpfV9wcm9jZXNzTWV0YWRhdGEodCl7aWYoIXQpcmV0dXJuO2xldCByPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV07ci5oYXMoby5zdGVwKXx8ci5zZXQoby5zdGVwLFtdKSxyLmdldChvLnN0ZXApLnB1c2gobyl9bGV0IG49W107cmV0dXJuIHIuZm9yRWFjaChpPT57bGV0IG89dGhpcy5fY3JlYXRlU3RlcERhdHVtKGlbMF0pO24ucHVzaChvKX0pLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fTt2YXIgd009e307S3Mod00se0FDRVNGaWxtaWNUb25lTWFwcGluZzooKT0+Y2ZlLEFkZEVxdWF0aW9uOigpPT5NMSxBZGRPcGVyYXRpb246KCk9Pm9mZSxBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTooKT0+a2h0LEFkZGl0aXZlQmxlbmRpbmc6KCk9Pk11dCxBbHBoYUZvcm1hdDooKT0+Z2ZlLEFsd2F5c0RlcHRoOigpPT5KaGUsQWx3YXlzU3RlbmNpbEZ1bmM6KCk9PmtmZSxBbWJpZW50TGlnaHQ6KCk9Pkw2LEFtYmllbnRMaWdodFByb2JlOigpPT56VSxBbmltYXRpb25DbGlwOigpPT5RMSxBbmltYXRpb25Mb2FkZXI6KCk9Pm9odCxBbmltYXRpb25NaXhlcjooKT0+VlUsQW5pbWF0aW9uT2JqZWN0R3JvdXA6KCk9PkhVLEFuaW1hdGlvblV0aWxzOigpPT5ZbixBcmNDdXJ2ZTooKT0+bDYsQXJyYXlDYW1lcmE6KCk9Pm42LEFycm93SGVscGVyOigpPT5NaHQsQXVkaW86KCk9PkQ2LEF1ZGlvQW5hbHlzZXI6KCk9PkZVLEF1ZGlvQ29udGV4dDooKT0+emh0LEF1ZGlvTGlzdGVuZXI6KCk9PmNodCxBdWRpb0xvYWRlcjooKT0+RFUsQXhlc0hlbHBlcjooKT0+dk0sQXhpc0hlbHBlcjooKT0+VzByLEJhY2tTaWRlOigpPT5JaSxCYXNpY0RlcHRoUGFja2luZzooKT0+UGZlLEJhc2ljU2hhZG93TWFwOigpPT51aHIsQmluYXJ5VGV4dHVyZUxvYWRlcjooKT0+SzByLEJvbmU6KCk9PnNNLEJvb2xlYW5LZXlmcmFtZVRyYWNrOigpPT5hbSxCb3VuZGluZ0JveEhlbHBlcjooKT0+WTByLEJveDI6KCk9PiQwLEJveDM6KCk9PnRhLEJveDNIZWxwZXI6KCk9PndodCxCb3hCdWZmZXJHZW9tZXRyeTooKT0+UWYsQm94R2VvbWV0cnk6KCk9PlFmLEJveEhlbHBlcjooKT0+eU0sQnVmZmVyQXR0cmlidXRlOigpPT5KZSxCdWZmZXJHZW9tZXRyeTooKT0+UGUsQnVmZmVyR2VvbWV0cnlMb2FkZXI6KCk9PlJVLEJ5dGVUeXBlOigpPT5oZmUsQ2FjaGU6KCk9PnR4LENhbWVyYTooKT0+UjEsQ2FtZXJhSGVscGVyOigpPT5iaHQsQ2FudmFzUmVuZGVyZXI6KCk9PkowcixDYW52YXNUZXh0dXJlOigpPT54VSxDYXRtdWxsUm9tQ3VydmUzOigpPT5jNixDaW5lb25Ub25lTWFwcGluZzooKT0+bGZlLENpcmNsZUJ1ZmZlckdlb21ldHJ5OigpPT5GMSxDaXJjbGVHZW9tZXRyeTooKT0+RjEsQ2xhbXBUb0VkZ2VXcmFwcGluZzooKT0+Sm8sQ2xvY2s6KCk9Pm1NLENvbG9yOigpPT5uZSxDb2xvcktleWZyYW1lVHJhY2s6KCk9Pk02LENvbXByZXNzZWRUZXh0dXJlOigpPT5hNixDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjooKT0+YWh0LENvbmVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ29uZUdlb21ldHJ5OigpPT5CMSxDdWJlQ2FtZXJhOigpPT5KMyxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6KCk9Pm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzooKT0+aXgsQ3ViZVRleHR1cmU6KCk9PkgwLEN1YmVUZXh0dXJlTG9hZGVyOigpPT5UVSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzooKT0+eE0sQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pno2LEN1YmljQmV6aWVyQ3VydmU6KCk9PmNNLEN1YmljQmV6aWVyQ3VydmUzOigpPT51NixDdWJpY0ludGVycG9sYW50OigpPT5TVSxDdWxsRmFjZUJhY2s6KCk9PlN1dCxDdWxsRmFjZUZyb250OigpPT56aGUsQ3VsbEZhY2VGcm9udEJhY2s6KCk9PmNocixDdWxsRmFjZU5vbmU6KCk9Pk9oZSxDdXJ2ZTooKT0+ZnMsQ3VydmVQYXRoOigpPT53VSxDdXN0b21CbGVuZGluZzooKT0+QmhlLEN1c3RvbVRvbmVNYXBwaW5nOigpPT51ZmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kcmljYWw6KCk9Pm1odCxEYXRhVGV4dHVyZTooKT0+SmQsRGF0YVRleHR1cmUyREFycmF5OigpPT50TSxEYXRhVGV4dHVyZTNEOigpPT5yNixEYXRhVGV4dHVyZUxvYWRlcjooKT0+Q1UsRGF0YVV0aWxzOigpPT5UaHQsRGVjcmVtZW50U3RlbmNpbE9wOigpPT5iaHIsRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDooKT0+U2hyLERlZmF1bHRMb2FkaW5nTWFuYWdlcjooKT0+dHBlLERlcHRoRm9ybWF0OigpPT56MCxEZXB0aFN0ZW5jaWxGb3JtYXQ6KCk9PmsxLERlcHRoVGV4dHVyZTooKT0+bk0sRGlyZWN0aW9uYWxMaWdodDooKT0+STYsRGlyZWN0aW9uYWxMaWdodEhlbHBlcjooKT0+eGh0LERpc2NyZXRlSW50ZXJwb2xhbnQ6KCk9Pk1VLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5IMSxEb2RlY2FoZWRyb25HZW9tZXRyeTooKT0+SDEsRG91YmxlU2lkZTooKT0+TDEsRHN0QWxwaGFGYWN0b3I6KCk9PlloZSxEc3RDb2xvckZhY3RvcjooKT0+WGhlLER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6KCk9PkQwcixEeW5hbWljQ29weVVzYWdlOigpPT56aHIsRHluYW1pY0RyYXdVc2FnZTooKT0+WTMsRHluYW1pY1JlYWRVc2FnZTooKT0+TmhyLEVkZ2VzR2VvbWV0cnk6KCk9PnM2LEVkZ2VzSGVscGVyOigpPT5qMHIsRWxsaXBzZUN1cnZlOigpPT5WMSxFcXVhbERlcHRoOigpPT50ZmUsRXF1YWxTdGVuY2lsRnVuYzooKT0+Q2hyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOigpPT5ZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzooKT0+alAsRXVsZXI6KCk9PnRtLEV2ZW50RGlzcGF0Y2hlcjooKT0+VXMsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OigpPT5oaCxFeHRydWRlR2VvbWV0cnk6KCk9PmhoLEZhY2VDb2xvcnM6KCk9Pk0wcixGaWxlTG9hZGVyOigpPT5KYyxGbGF0U2hhZGluZzooKT0+QWh0LEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0MzJBdHRyaWJ1dGU6KCk9PnEwcixGbG9hdDMyQnVmZmVyQXR0cmlidXRlOigpPT54ZSxGbG9hdDY0QXR0cmlidXRlOigpPT5HMHIsRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTooKT0+bVUsRmxvYXRUeXBlOigpPT5qZCxGb2c6KCk9PnoxLEZvZ0V4cDI6KCk9Pk8xLEZvbnQ6KCk9Pm9fcixGb250TG9hZGVyOigpPT5pX3IsRnJhbWVidWZmZXJUZXh0dXJlOigpPT52VSxGcm9udFNpZGU6KCk9PkkxLEZydXN0dW06KCk9Pk4xLEdMQnVmZmVyQXR0cmlidXRlOigpPT5xVSxHTFNMMTooKT0+QmhyLEdMU0wzOigpPT5LdXQsR3JlYXRlckRlcHRoOigpPT5yZmUsR3JlYXRlckVxdWFsRGVwdGg6KCk9PmVmZSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzooKT0+TGhyLEdyZWF0ZXJTdGVuY2lsRnVuYzooKT0+UGhyLEdyaWRIZWxwZXI6KCk9PllVLEdyb3VwOigpPT5YZCxIYWxmRmxvYXRUeXBlOigpPT5DMSxIZW1pc3BoZXJlTGlnaHQ6KCk9PlQ2LEhlbWlzcGhlcmVMaWdodEhlbHBlcjooKT0+eWh0LEhlbWlzcGhlcmVMaWdodFByb2JlOigpPT5PVSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5HMSxJY29zYWhlZHJvbkdlb21ldHJ5OigpPT5HMSxJbWFnZUJpdG1hcExvYWRlcjooKT0+TlUsSW1hZ2VMb2FkZXI6KCk9PmV4LEltYWdlVXRpbHM6KCk9PktmLEltbWVkaWF0ZVJlbmRlck9iamVjdDooKT0+YV9yLEluY3JlbWVudFN0ZW5jaWxPcDooKT0+eGhyLEluY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PndocixJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnJtLEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OigpPT5ONixJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+VVUsSW5zdGFuY2VkTWVzaDooKT0+aTYsSW50MTZBdHRyaWJ1dGU6KCk9PkIwcixJbnQxNkJ1ZmZlckF0dHJpYnV0ZTooKT0+ZlUsSW50MzJBdHRyaWJ1dGU6KCk9PlYwcixJbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+cFUsSW50OEF0dHJpYnV0ZTooKT0+TzByLEludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLEludFR5cGU6KCk9PnBmZSxJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+ZW0sSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnRwLEludGVycG9sYW50OigpPT5maCxJbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5LUCxJbnRlcnBvbGF0ZUxpbmVhcjooKT0+WlAsSW50ZXJwb2xhdGVTbW9vdGg6KCk9PnJVLEludmVydFN0ZW5jaWxPcDooKT0+TWhyLEpTT05Mb2FkZXI6KCk9PlEwcixLZWVwU3RlbmNpbE9wOigpPT5uVSxLZXlmcmFtZVRyYWNrOigpPT5EbCxMT0Q6KCk9Pl9VLExhdGhlQnVmZmVyR2VvbWV0cnk6KCk9PlcxLExhdGhlR2VvbWV0cnk6KCk9PlcxLExheWVyczooKT0+WDMsTGVuc0ZsYXJlOigpPT5lX3IsTGVzc0RlcHRoOigpPT5RaGUsTGVzc0VxdWFsRGVwdGg6KCk9PmlVLExlc3NFcXVhbFN0ZW5jaWxGdW5jOigpPT5BaHIsTGVzc1N0ZW5jaWxGdW5jOigpPT5UaHIsTGlnaHQ6KCk9Pk9sLExpZ2h0UHJvYmU6KCk9PnJ4LExpbmU6KCk9PmNoLExpbmUzOigpPT5HVSxMaW5lQmFzaWNNYXRlcmlhbDooKT0+R2ksTGluZUN1cnZlOigpPT5VMSxMaW5lQ3VydmUzOigpPT5iVSxMaW5lRGFzaGVkTWF0ZXJpYWw6KCk9Pnc2LExpbmVMb29wOigpPT5vNixMaW5lUGllY2VzOigpPT53MHIsTGluZVNlZ21lbnRzOigpPT5BYSxMaW5lU3RyaXA6KCk9PmIwcixMaW5lYXJFbmNvZGluZzooKT0+UWQsTGluZWFyRmlsdGVyOigpPT5paSxMaW5lYXJJbnRlcnBvbGFudDooKT0+UzYsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOigpPT5taHIsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZGhyLExpbmVhck1pcG1hcExpbmVhckZpbHRlcjooKT0+b3gsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+TGh0LExpbmVhclRvbmVNYXBwaW5nOigpPT5hZmUsTG9hZGVyOigpPT5lYSxMb2FkZXJVdGlsczooKT0+ZE0sTG9hZGluZ01hbmFnZXI6KCk9PkU2LExvb3BPbmNlOigpPT5FZmUsTG9vcFBpbmdQb25nOigpPT5DZmUsTG9vcFJlcGVhdDooKT0+VGZlLEx1bWluYW5jZUFscGhhRm9ybWF0OigpPT55ZmUsTHVtaW5hbmNlRm9ybWF0OigpPT5fZmUsTU9VU0U6KCk9PkswLE1hdGVyaWFsOigpPT5xaSxNYXRlcmlhbExvYWRlcjooKT0+a1UsTWF0aDooKT0+UWhyLE1hdGhVdGlsczooKT0+UWhyLE1hdHJpeDM6KCk9PmtpLE1hdHJpeDQ6KCk9Pk1lLE1heEVxdWF0aW9uOigpPT5BdXQsTWVzaDooKT0+dGksTWVzaEJhc2ljTWF0ZXJpYWw6KCk9PnNoLE1lc2hEZXB0aE1hdGVyaWFsOigpPT5lTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDooKT0+ck0sTWVzaEZhY2VNYXRlcmlhbDooKT0+VDByLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6KCk9Png2LE1lc2hNYXRjYXBNYXRlcmlhbDooKT0+YjYsTWVzaE5vcm1hbE1hdGVyaWFsOigpPT52NixNZXNoUGhvbmdNYXRlcmlhbDooKT0+XzYsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6KCk9Pmc2LE1lc2hTdGFuZGFyZE1hdGVyaWFsOigpPT5wTSxNZXNoVG9vbk1hdGVyaWFsOigpPT55NixNaW5FcXVhdGlvbjooKT0+Q3V0LE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6KCk9PiRQLE1peE9wZXJhdGlvbjooKT0+aWZlLE11bHRpTWF0ZXJpYWw6KCk9PkMwcixNdWx0aXBseUJsZW5kaW5nOigpPT5UdXQsTXVsdGlwbHlPcGVyYXRpb246KCk9Pk82LE5lYXJlc3RGaWx0ZXI6KCk9PkxpLE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6KCk9PnBocixOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZmhyLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmFVLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOigpPT5vVSxOZXZlckRlcHRoOigpPT5aaGUsTmV2ZXJTdGVuY2lsRnVuYzooKT0+RWhyLE5vQmxlbmRpbmc6KCk9PiRkLE5vQ29sb3JzOigpPT5TMHIsTm9Ub25lTWFwcGluZzooKT0+S2QsTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOigpPT4kVSxOb3JtYWxCbGVuZGluZzooKT0+VjMsTm90RXF1YWxEZXB0aDooKT0+bmZlLE5vdEVxdWFsU3RlbmNpbEZ1bmM6KCk9PklocixOdW1iZXJLZXlmcmFtZVRyYWNrOigpPT5aMSxPYmplY3QzRDooKT0+b3IsT2JqZWN0TG9hZGVyOigpPT5zaHQsT2JqZWN0U3BhY2VOb3JtYWxNYXA6KCk9PkxmZSxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PlcwLE9jdGFoZWRyb25HZW9tZXRyeTooKT0+VzAsT25lRmFjdG9yOigpPT5xaGUsT25lTWludXNEc3RBbHBoYUZhY3RvcjooKT0+amhlLE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6KCk9PiRoZSxPbmVNaW51c1NyY0FscGhhRmFjdG9yOigpPT5JaHQsT25lTWludXNTcmNDb2xvckZhY3RvcjooKT0+V2hlLE9ydGhvZ3JhcGhpY0NhbWVyYTooKT0+RDEsUENGU2hhZG93TWFwOigpPT5DaHQsUENGU29mdFNoYWRvd01hcDooKT0+RmhlLFBNUkVNR2VuZXJhdG9yOigpPT5lNixQYXJhbWV0cmljR2VvbWV0cnk6KCk9PnJfcixQYXJ0aWNsZTooKT0+UDByLFBhcnRpY2xlQmFzaWNNYXRlcmlhbDooKT0+azByLFBhcnRpY2xlU3lzdGVtOigpPT5JMHIsUGFydGljbGVTeXN0ZW1NYXRlcmlhbDooKT0+UjByLFBhdGg6KCk9PnExLFBlcnNwZWN0aXZlQ2FtZXJhOigpPT5VaSxQbGFuZTooKT0+JGMsUGxhbmVCdWZmZXJHZW9tZXRyeTooKT0+VjAsUGxhbmVHZW9tZXRyeTooKT0+VjAsUGxhbmVIZWxwZXI6KCk9PlNodCxQb2ludENsb3VkOigpPT5BMHIsUG9pbnRDbG91ZE1hdGVyaWFsOigpPT5MMHIsUG9pbnRMaWdodDooKT0+UDYsUG9pbnRMaWdodEhlbHBlcjooKT0+X2h0LFBvaW50czooKT0+aW0sUG9pbnRzTWF0ZXJpYWw6KCk9Pm5tLFBvbGFyR3JpZEhlbHBlcjooKT0+dmh0LFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+dWgsUG9seWhlZHJvbkdlb21ldHJ5OigpPT51aCxQb3NpdGlvbmFsQXVkaW86KCk9PnVodCxQcm9wZXJ0eUJpbmRpbmc6KCk9PkNyLFByb3BlcnR5TWl4ZXI6KCk9PkJVLFF1YWRyYXRpY0JlemllckN1cnZlOigpPT51TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6KCk9PmhNLFF1YXRlcm5pb246KCk9PnlpLFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOigpPT5YMCxRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ6KCk9PkVVLFJFVklTSU9OOigpPT5qVSxSR0JBRGVwdGhQYWNraW5nOigpPT5JZmUsUkdCQUZvcm1hdDooKT0+UW8sUkdCQUludGVnZXJGb3JtYXQ6KCk9PlNmZSxSR0JBX0FTVENfMTB4MTBfRm9ybWF0OigpPT5ZdXQsUkdCQV9BU1RDXzEweDVfRm9ybWF0OigpPT5xdXQsUkdCQV9BU1RDXzEweDZfRm9ybWF0OigpPT5HdXQsUkdCQV9BU1RDXzEweDhfRm9ybWF0OigpPT5XdXQsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfNHg0X0Zvcm1hdDooKT0+RHV0LFJHQkFfQVNUQ181eDRfRm9ybWF0OigpPT5PdXQsUkdCQV9BU1RDXzV4NV9Gb3JtYXQ6KCk9Pnp1dCxSR0JBX0FTVENfNng1X0Zvcm1hdDooKT0+RnV0LFJHQkFfQVNUQ182eDZfRm9ybWF0OigpPT5CdXQsUkdCQV9BU1RDXzh4NV9Gb3JtYXQ6KCk9Pkh1dCxSR0JBX0FTVENfOHg2X0Zvcm1hdDooKT0+VnV0LFJHQkFfQVNUQ184eDhfRm9ybWF0OigpPT5VdXQsUkdCQV9CUFRDX0Zvcm1hdDooKT0+JHV0LFJHQkFfRVRDMl9FQUNfRm9ybWF0OigpPT5OdXQsUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5rdXQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCQV9TM1RDX0RYVDFfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUM19Gb3JtYXQ6KCk9PnRVLFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDooKT0+ZVUsUkdCX0VUQzFfRm9ybWF0OigpPT5NZmUsUkdCX0VUQzJfRm9ybWF0OigpPT5SdXQsUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+UHV0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OigpPT5KVixSR0Zvcm1hdDooKT0+YmZlLFJHSW50ZWdlckZvcm1hdDooKT0+d2ZlLFJhd1NoYWRlck1hdGVyaWFsOigpPT5VMCxSYXk6KCk9PkpmLFJheWNhc3RlcjooKT0+cGh0LFJlY3RBcmVhTGlnaHQ6KCk9Pms2LFJlZEZvcm1hdDooKT0+dmZlLFJlZEludGVnZXJGb3JtYXQ6KCk9PnhmZSxSZWluaGFyZFRvbmVNYXBwaW5nOigpPT5zZmUsUmVwZWF0V3JhcHBpbmc6KCk9PlhQLFJlcGxhY2VTdGVuY2lsT3A6KCk9PnZocixSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjooKT0+VmhlLFJpbmdCdWZmZXJHZW9tZXRyeTooKT0+WTEsUmluZ0dlb21ldHJ5OigpPT5ZMSxTY2VuZTooKT0+cTAsU2NlbmVVdGlsczooKT0+dF9yLFNoYWRlckNodW5rOigpPT5ocixTaGFkZXJMaWI6KCk9PmFoLFNoYWRlck1hdGVyaWFsOigpPT5saCxTaGFkb3dNYXRlcmlhbDooKT0+bTYsU2hhcGU6KCk9PktjLFNoYXBlQnVmZmVyR2VvbWV0cnk6KCk9PlkwLFNoYXBlR2VvbWV0cnk6KCk9PlkwLFNoYXBlUGF0aDooKT0+RWh0LFNoYXBlVXRpbHM6KCk9PlpjLFNob3J0VHlwZTooKT0+ZmZlLFNrZWxldG9uOigpPT5sTSxTa2VsZXRvbkhlbHBlcjooKT0+V1UsU2tpbm5lZE1lc2g6KCk9PmFNLFNtb290aFNoYWRpbmc6KCk9PmhocixTcGhlcmU6KCk9PlpmLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTcGhlcmVHZW9tZXRyeTooKT0+ajAsU3BoZXJpY2FsOigpPT5fTSxTcGhlcmljYWxIYXJtb25pY3MzOigpPT5SNixTcGxpbmVDdXJ2ZTooKT0+Zk0sU3BvdExpZ2h0OigpPT5BNixTcG90TGlnaHRIZWxwZXI6KCk9PmdodCxTcHJpdGU6KCk9Pm9NLFNwcml0ZU1hdGVyaWFsOigpPT5pTSxTcmNBbHBoYUZhY3RvcjooKT0+UGh0LFNyY0FscGhhU2F0dXJhdGVGYWN0b3I6KCk9PktoZSxTcmNDb2xvckZhY3RvcjooKT0+R2hlLFN0YXRpY0NvcHlVc2FnZTooKT0+T2hyLFN0YXRpY0RyYXdVc2FnZTooKT0+VzMsU3RhdGljUmVhZFVzYWdlOigpPT5SaHIsU3RlcmVvQ2FtZXJhOigpPT5saHQsU3RyZWFtQ29weVVzYWdlOigpPT5GaHIsU3RyZWFtRHJhd1VzYWdlOigpPT5raHIsU3RyZWFtUmVhZFVzYWdlOigpPT5EaHIsU3RyaW5nS2V5ZnJhbWVUcmFjazooKT0+c20sU3VidHJhY3RFcXVhdGlvbjooKT0+SGhlLFN1YnRyYWN0aXZlQmxlbmRpbmc6KCk9PkV1dCxUT1VDSDooKT0+WjAsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOigpPT5heCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5qMSxUZXRyYWhlZHJvbkdlb21ldHJ5OigpPT5qMSxUZXh0R2VvbWV0cnk6KCk9Pm5fcixUZXh0dXJlOigpPT52aSxUZXh0dXJlTG9hZGVyOigpPT5BVSxUb3J1c0J1ZmZlckdlb21ldHJ5OigpPT5YMSxUb3J1c0dlb21ldHJ5OigpPT5YMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90R2VvbWV0cnk6KCk9PiQxLFRyaWFuZ2xlOigpPT5vaSxUcmlhbmdsZUZhbkRyYXdNb2RlOigpPT5faHIsVHJpYW5nbGVTdHJpcERyYXdNb2RlOigpPT5naHIsVHJpYW5nbGVzRHJhd01vZGU6KCk9PkFmZSxUdWJlQnVmZmVyR2VvbWV0cnk6KCk9PksxLFR1YmVHZW9tZXRyeTooKT0+SzEsVVZNYXBwaW5nOigpPT5YVSxVaW50MTZBdHRyaWJ1dGU6KCk9PkgwcixVaW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PiQzLFVpbnQzMkF0dHJpYnV0ZTooKT0+VTByLFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+SzMsVWludDhBdHRyaWJ1dGU6KCk9PnowcixVaW50OEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVWludDhDbGFtcGVkQXR0cmlidXRlOigpPT5GMHIsVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOigpPT5oVSxVbmlmb3JtOigpPT5nTSxVbmlmb3Jtc0xpYjooKT0+cmUsVW5pZm9ybXNVdGlsczooKT0+emZlLFVuc2lnbmVkQnl0ZVR5cGU6KCk9PlpkLFVuc2lnbmVkSW50MjQ4VHlwZTooKT0+QTEsVW5zaWduZWRJbnRUeXBlOigpPT5WUCxVbnNpZ25lZFNob3J0NDQ0NFR5cGU6KCk9PmRmZSxVbnNpZ25lZFNob3J0NTU1MVR5cGU6KCk9Pm1mZSxVbnNpZ25lZFNob3J0VHlwZTooKT0+RzMsVlNNU2hhZG93TWFwOigpPT5GMyxWZWN0b3IyOigpPT5MdCxWZWN0b3IzOigpPT5qLFZlY3RvcjQ6KCk9PmVuLFZlY3RvcktleWZyYW1lVHJhY2s6KCk9PkoxLFZlcnRleDooKT0+TjByLFZlcnRleENvbG9yczooKT0+RTByLFZpZGVvVGV4dHVyZTooKT0+eVUsV2ViR0wxUmVuZGVyZXI6KCk9PmdVLFdlYkdMQ3ViZVJlbmRlclRhcmdldDooKT0+UTMsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6KCk9PmxVLFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6KCk9PmozLFdlYkdMUmVuZGVyVGFyZ2V0OigpPT51cyxXZWJHTFJlbmRlclRhcmdldEN1YmU6KCk9PlowcixXZWJHTFJlbmRlcmVyOigpPT5ybixXZWJHTFV0aWxzOigpPT4kZmUsV2lyZWZyYW1lR2VvbWV0cnk6KCk9PmQ2LFdpcmVmcmFtZUhlbHBlcjooKT0+WDByLFdyYXBBcm91bmRFbmRpbmc6KCk9PkpQLFhIUkxvYWRlcjooKT0+JDByLFplcm9DdXJ2YXR1cmVFbmRpbmc6KCk9PkUxLFplcm9GYWN0b3I6KCk9PlVoZSxaZXJvU2xvcGVFbmRpbmc6KCk9PlQxLFplcm9TdGVuY2lsT3A6KCk9PnlocixfU1JHQkFGb3JtYXQ6KCk9PnNVLHNSR0JFbmNvZGluZzooKT0+V259KTt2YXIgalU9IjEzNyIsSzA9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LFowPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sT2hlPTAsU3V0PTEsemhlPTIsY2hyPTMsdWhyPTAsQ2h0PTEsRmhlPTIsRjM9MyxJMT0wLElpPTEsTDE9MixBaHQ9MSxoaHI9MiwkZD0wLFYzPTEsTXV0PTIsRXV0PTMsVHV0PTQsQmhlPTUsTTE9MTAwLEhoZT0xMDEsVmhlPTEwMixDdXQ9MTAzLEF1dD0xMDQsVWhlPTIwMCxxaGU9MjAxLEdoZT0yMDIsV2hlPTIwMyxQaHQ9MjA0LElodD0yMDUsWWhlPTIwNixqaGU9MjA3LFhoZT0yMDgsJGhlPTIwOSxLaGU9MjEwLFpoZT0wLEpoZT0xLFFoZT0yLGlVPTMsdGZlPTQsZWZlPTUscmZlPTYsbmZlPTcsTzY9MCxpZmU9MSxvZmU9MixLZD0wLGFmZT0xLHNmZT0yLGxmZT0zLGNmZT00LHVmZT01LFhVPTMwMCxueD0zMDEsaXg9MzAyLFlQPTMwMyxqUD0zMDQseE09MzA2LHo2PTMwNyxYUD0xZTMsSm89MTAwMSwkUD0xMDAyLExpPTEwMDMsb1U9MTAwNCxmaHI9MTAwNCxhVT0xMDA1LHBocj0xMDA1LGlpPTEwMDYsTGh0PTEwMDcsZGhyPTEwMDcsb3g9MTAwOCxtaHI9MTAwOCxaZD0xMDA5LGhmZT0xMDEwLGZmZT0xMDExLEczPTEwMTIscGZlPTEwMTMsVlA9MTAxNCxqZD0xMDE1LEMxPTEwMTYsZGZlPTEwMTcsbWZlPTEwMTgsQTE9MTAyMCxnZmU9MTAyMSxRbz0xMDIzLF9mZT0xMDI0LHlmZT0xMDI1LHowPTEwMjYsazE9MTAyNyx2ZmU9MTAyOCx4ZmU9MTAyOSxiZmU9MTAzMCx3ZmU9MTAzMSxTZmU9MTAzMyxKVj0zMzc3NixRVj0zMzc3Nyx0VT0zMzc3OCxlVT0zMzc3OSxQdXQ9MzU4NDAsSXV0PTM1ODQxLEx1dD0zNTg0MixrdXQ9MzU4NDMsTWZlPTM2MTk2LFJ1dD0zNzQ5MixOdXQ9Mzc0OTYsRHV0PTM3ODA4LE91dD0zNzgwOSx6dXQ9Mzc4MTAsRnV0PTM3ODExLEJ1dD0zNzgxMixIdXQ9Mzc4MTMsVnV0PTM3ODE0LFV1dD0zNzgxNSxxdXQ9Mzc4MTYsR3V0PTM3ODE3LFd1dD0zNzgxOCxZdXQ9Mzc4MTksanV0PTM3ODIwLFh1dD0zNzgyMSwkdXQ9MzY0OTIsRWZlPTIyMDAsVGZlPTIyMDEsQ2ZlPTIyMDIsS1A9MjMwMCxaUD0yMzAxLHJVPTIzMDIsRTE9MjQwMCxUMT0yNDAxLEpQPTI0MDIsJFU9MjUwMCxraHQ9MjUwMSxBZmU9MCxnaHI9MSxfaHI9MixRZD0zZTMsV249MzAwMSxQZmU9MzIwMCxJZmU9MzIwMSxheD0wLExmZT0xLHlocj0wLG5VPTc2ODAsdmhyPTc2ODEseGhyPTc2ODIsYmhyPTc2ODMsd2hyPTM0MDU1LFNocj0zNDA1NixNaHI9NTM4NixFaHI9NTEyLFRocj01MTMsQ2hyPTUxNCxBaHI9NTE1LFBocj01MTYsSWhyPTUxNyxMaHI9NTE4LGtmZT01MTksVzM9MzUwNDQsWTM9MzUwNDgsa2hyPTM1MDQwLFJocj0zNTA0NSxOaHI9MzUwNDksRGhyPTM1MDQxLE9ocj0zNTA0Nix6aHI9MzUwNTAsRmhyPTM1MDQyLEJocj0iMTAwIixLdXQ9IjMwMCBlcyIsc1U9MTAzNSxVcz1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQscil7dGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7blt0XT09PXZvaWQgMCYmKG5bdF09W10pLG5bdF0uaW5kZXhPZihyKT09PS0xJiZuW3RdLnB1c2gocil9aGFzRXZlbnRMaXN0ZW5lcih0LHIpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm4hMTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIG5bdF0hPT12b2lkIDAmJm5bdF0uaW5kZXhPZihyKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0XTtpZihpIT09dm9pZCAwKXtsZXQgbz1pLmluZGV4T2Yocik7byE9PS0xJiZpLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IG49dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYobiE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztsZXQgaT1uLnNsaWNlKDApO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LEtvPVtdO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylLb1tlXT0oZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpO3ZhciB1Vj0xMjM0NTY3LFAxPU1hdGguUEkvMTgwLFFQPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIE5sKCl7bGV0IGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxyPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKEtvW2UmMjU1XStLb1tlPj44JjI1NV0rS29bZT4+MTYmMjU1XStLb1tlPj4yNCYyNTVdKyItIitLb1t0JjI1NV0rS29bdD4+OCYyNTVdKyItIitLb1t0Pj4xNiYxNXw2NF0rS29bdD4+MjQmMjU1XSsiLSIrS29bciY2M3wxMjhdK0tvW3I+PjgmMjU1XSsiLSIrS29bcj4+MTYmMjU1XStLb1tyPj4yNCYyNTVdK0tvW24mMjU1XStLb1tuPj44JjI1NV0rS29bbj4+MTYmMjU1XStLb1tuPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFpvKGUsdCxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX1mdW5jdGlvbiBSaHQoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gSGhyKGUsdCxyLG4saSl7cmV0dXJuIG4rKGUtdCkqKGktbikvKHItdCl9ZnVuY3Rpb24gVmhyKGUsdCxyKXtyZXR1cm4gZSE9PXQ/KHItZSkvKHQtZSk6MH1mdW5jdGlvbiBVUChlLHQscil7cmV0dXJuKDEtcikqZStyKnR9ZnVuY3Rpb24gVWhyKGUsdCxyLG4pe3JldHVybiBVUChlLHQsMS1NYXRoLmV4cCgtcipuKSl9ZnVuY3Rpb24gcWhyKGUsdD0xKXtyZXR1cm4gdC1NYXRoLmFicyhSaHQoZSx0KjIpLXQpfWZ1bmN0aW9uIEdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKigzLTIqZSkpfWZ1bmN0aW9uIFdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKmUqKGUqKGUqNi0xNSkrMTApKX1mdW5jdGlvbiBZaHIoZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9ZnVuY3Rpb24gamhyKGUsdCl7cmV0dXJuIGUrTWF0aC5yYW5kb20oKSoodC1lKX1mdW5jdGlvbiBYaHIoZSl7cmV0dXJuIGUqKC41LU1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uICRocihlKXtyZXR1cm4gZSE9PXZvaWQgMCYmKHVWPWUlMjE0NzQ4MzY0NyksdVY9dVYqMTY4MDclMjE0NzQ4MzY0NywodVYtMSkvMjE0NzQ4MzY0Nn1mdW5jdGlvbiBLaHIoZSl7cmV0dXJuIGUqUDF9ZnVuY3Rpb24gWmhyKGUpe3JldHVybiBlKlFQfWZ1bmN0aW9uIFp1dChlKXtyZXR1cm4oZSZlLTEpPT09MCYmZSE9PTB9ZnVuY3Rpb24gUmZlKGUpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIE5mZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSl9ZnVuY3Rpb24gSmhyKGUsdCxyLG4saSl7bGV0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8oci8yKSxsPWEoci8yKSxjPW8oKHQrbikvMiksdT1hKCh0K24pLzIpLGg9bygodC1uKS8yKSxmPWEoKHQtbikvMikscD1vKChuLXQpLzIpLGQ9YSgobi10KS8yKTtzd2l0Y2goaSl7Y2FzZSJYWVgiOmUuc2V0KHMqdSxsKmgsbCpmLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOmUuc2V0KGwqZixzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOmUuc2V0KGwqaCxsKmYscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOmUuc2V0KHMqdSxsKmQsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOmUuc2V0KGwqcCxzKnUsbCpkLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOmUuc2V0KGwqZCxsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2kpfX12YXIgUWhyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFRzJSQUQ6UDEsUkFEMkRFRzpRUCxnZW5lcmF0ZVVVSUQ6TmwsY2xhbXA6Wm8sZXVjbGlkZWFuTW9kdWxvOlJodCxtYXBMaW5lYXI6SGhyLGludmVyc2VMZXJwOlZocixsZXJwOlVQLGRhbXA6VWhyLHBpbmdwb25nOnFocixzbW9vdGhzdGVwOkdocixzbW9vdGhlcnN0ZXA6V2hyLHJhbmRJbnQ6WWhyLHJhbmRGbG9hdDpqaHIscmFuZEZsb2F0U3ByZWFkOlhocixzZWVkZWRSYW5kb206JGhyLGRlZ1RvUmFkOktocixyYWRUb0RlZzpaaHIsaXNQb3dlck9mVHdvOlp1dCxjZWlsUG93ZXJPZlR3bzpSZmUsZmxvb3JQb3dlck9mVHdvOk5mZSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOkpocn0pLEx0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTApe3RoaXMueD10LHRoaXMueT1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKnIraVszXSpuK2lbNl0sdGhpcy55PWlbMV0qcitpWzRdKm4raVs3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiByKnIrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXN9cm90YXRlQXJvdW5kKHQscil7bGV0IG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9bypuLWEqaSt0LngsdGhpcy55PW8qaSthKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0x0LnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGtpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPWksdVsyXT1zLHVbM109cix1WzRdPW8sdVs1XT1sLHVbNl09bix1WzddPWEsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxyLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0scls0XSxyWzhdLHJbMV0scls1XSxyWzldLHJbMl0scls2XSxyWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxyKXtsZXQgbj10LmVsZW1lbnRzLGk9ci5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1uWzBdLHM9blszXSxsPW5bNl0sYz1uWzFdLHU9bls0XSxoPW5bN10sZj1uWzJdLHA9bls1XSxkPW5bOF0sZz1pWzBdLF89aVszXSx5PWlbNl0seD1pWzFdLGI9aVs0XSxTPWlbN10sQz1pWzJdLFA9aVs1XSxrPWlbOF07cmV0dXJuIG9bMF09YSpnK3MqeCtsKkMsb1szXT1hKl8rcypiK2wqUCxvWzZdPWEqeStzKlMrbCprLG9bMV09YypnK3UqeCtoKkMsb1s0XT1jKl8rdSpiK2gqUCxvWzddPWMqeSt1KlMraCprLG9bMl09ZipnK3AqeCtkKkMsb1s1XT1mKl8rcCpiK2QqUCxvWzhdPWYqeStwKlMrZCprLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzNdKj10LHJbNl0qPXQsclsxXSo9dCxyWzRdKj10LHJbN10qPXQsclsyXSo9dCxyWzVdKj10LHJbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIHIqYSp1LXIqcypjLW4qbyp1K24qcypsK2kqbypjLWkqYSpsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11KmEtcypjLGY9cypsLXUqbyxwPWMqby1hKmwsZD1yKmgrbipmK2kqcDtpZihkPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCBnPTEvZDtyZXR1cm4gdFswXT1oKmcsdFsxXT0oaSpjLXUqbikqZyx0WzJdPShzKm4taSphKSpnLHRbM109ZipnLHRbNF09KHUqci1pKmwpKmcsdFs1XT0oaSpvLXMqcikqZyx0WzZdPXAqZyx0WzddPShuKmwtYypyKSpnLHRbOF09KGEqci1uKm8pKmcsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxyPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9clsxXSxyWzFdPXJbM10sclszXT10LHQ9clsyXSxyWzJdPXJbNl0scls2XT10LHQ9cls1XSxyWzVdPXJbN10scls3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPXJbMF0sdFsxXT1yWzNdLHRbMl09cls2XSx0WzNdPXJbMV0sdFs0XT1yWzRdLHRbNV09cls3XSx0WzZdPXJbMl0sdFs3XT1yWzVdLHRbOF09cls4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQscixuLGksbyxhLHMpe2xldCBsPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7cmV0dXJuIHRoaXMuc2V0KG4qbCxuKmMsLW4qKGwqYStjKnMpK2ErdCwtaSpjLGkqbCwtaSooLWMqYStsKnMpK3MrciwwLDAsMSksdGhpc31zY2FsZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPXIsbls0XSo9cixuWzddKj1yLHRoaXN9cm90YXRlKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbM10scz1pWzZdLGw9aVsxXSxjPWlbNF0sdT1pWzddO3JldHVybiBpWzBdPXIqbytuKmwsaVszXT1yKmErbipjLGlbNl09cipzK24qdSxpWzFdPS1uKm8rcipsLGlbNF09LW4qYStyKmMsaVs3XT0tbipzK3IqdSx0aGlzfXRyYW5zbGF0ZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPXIqblsyXSxuWzRdKz1yKm5bNV0sbls3XSs9cipuWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspaWYocltpXSE9PW5baV0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQscj0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07a2kucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBEZmUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpaWYoZVt0XT42NTUzNSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgdGZyPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheX07ZnVuY3Rpb24gQjMoZSx0KXtyZXR1cm4gbmV3IHRmcltlXSh0KX1mdW5jdGlvbiB0NihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixlKX12YXIgT2ZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LG5oPXtoOjAsczowLGw6MH0saFY9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBHY3QoZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKyh0LWUpKjYqcjpyPDEvMj90OnI8Mi8zP2UrKHQtZSkqNiooMi8zLXIpOmV9ZnVuY3Rpb24gVTMoZSl7cmV0dXJuIGU8LjA0MDQ1P2UqLjA3NzM5OTM4MDg6TWF0aC5wb3coZSouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIFdjdChlKXtyZXR1cm4gZTwuMDAzMTMwOD9lKjEyLjkyOjEuMDU1Kk1hdGgucG93KGUsLjQxNjY2KS0uMDU1fXZhciBuZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7cmV0dXJuIHI9PT12b2lkIDAmJm49PT12b2lkIDA/dGhpcy5zZXQodCk6dGhpcy5zZXRSR0IodCxyLG4pfXNldCh0KXtyZXR1cm4gdCYmdC5pc0NvbG9yP3RoaXMuY29weSh0KTp0eXBlb2YgdD09Im51bWJlciI/dGhpcy5zZXRIZXgodCk6dHlwZW9mIHQ9PSJzdHJpbmciJiZ0aGlzLnNldFN0eWxlKHQpLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9dCx0aGlzLmI9dCx0aGlzfXNldEhleCh0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLHRoaXMucj0odD4+MTYmMjU1KS8yNTUsdGhpcy5nPSh0Pj44JjI1NSkvMjU1LHRoaXMuYj0odCYyNTUpLzI1NSx0aGlzfXNldFJHQih0LHIsbil7cmV0dXJuIHRoaXMucj10LHRoaXMuZz1yLHRoaXMuYj1uLHRoaXN9c2V0SFNMKHQscixuKXtpZih0PVJodCh0LDEpLHI9Wm8ociwwLDEpLG49Wm8obiwwLDEpLHI9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtsZXQgaT1uPD0uNT9uKigxK3IpOm4rci1uKnIsbz0yKm4taTt0aGlzLnI9R2N0KG8saSx0KzEvMyksdGhpcy5nPUdjdChvLGksdCksdGhpcy5iPUdjdChvLGksdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIHIoaSl7aSE9PXZvaWQgMCYmcGFyc2VGbG9hdChpKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCBpLG89blsxXSxhPW5bMl07c3dpdGNoKG8pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKGk9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChpWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbM10sMTApKS8yNTUscihpWzRdKSx0aGlzO2lmKGk9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChpWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbM10sMTApKS8xMDAscihpWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKGk9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBzPXBhcnNlRmxvYXQoaVsxXSkvMzYwLGw9cGFyc2VJbnQoaVsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoaVszXSwxMCkvMTAwO3JldHVybiByKGlbNF0pLHRoaXMuc2V0SFNMKHMsbCxjKX1icmVha319ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IGk9blsxXSxvPWkubGVuZ3RoO2lmKG89PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMSkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKG89PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoNCkraS5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCByPU9mZVt0LnRvTG93ZXJDYXNlKCldO3JldHVybiByIT09dm9pZCAwP3RoaXMuc2V0SGV4KHIpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1VMyh0LnIpLHRoaXMuZz1VMyh0LmcpLHRoaXMuYj1VMyh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVdjdCh0LnIpLHRoaXMuZz1XY3QodC5nKSx0aGlzLmI9V2N0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IHI9dGhpcy5yLG49dGhpcy5nLGk9dGhpcy5iLG89TWF0aC5tYXgocixuLGkpLGE9TWF0aC5taW4ocixuLGkpLHMsbCxjPShhK28pLzI7aWYoYT09PW8pcz0wLGw9MDtlbHNle2xldCB1PW8tYTtzd2l0Y2gobD1jPD0uNT91LyhvK2EpOnUvKDItby1hKSxvKXtjYXNlIHI6cz0obi1pKS91KyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS1yKS91KzI7YnJlYWs7Y2FzZSBpOnM9KHItbikvdSs0O2JyZWFrfXMvPTZ9cmV0dXJuIHQuaD1zLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQscixuKXtyZXR1cm4gdGhpcy5nZXRIU0wobmgpLG5oLmgrPXQsbmgucys9cixuaC5sKz1uLHRoaXMuc2V0SFNMKG5oLmgsbmgucyxuaC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxyKXtyZXR1cm4gdGhpcy5yPXQucityLnIsdGhpcy5nPXQuZytyLmcsdGhpcy5iPXQuYityLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxyKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqcix0aGlzLmcrPSh0LmctdGhpcy5nKSpyLHRoaXMuYis9KHQuYi10aGlzLmIpKnIsdGhpc31sZXJwQ29sb3JzKHQscixuKXtyZXR1cm4gdGhpcy5yPXQucisoci5yLXQucikqbix0aGlzLmc9dC5nKyhyLmctdC5nKSpuLHRoaXMuYj10LmIrKHIuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQscil7dGhpcy5nZXRIU0wobmgpLHQuZ2V0SFNMKGhWKTtsZXQgbj1VUChuaC5oLGhWLmgsciksaT1VUChuaC5zLGhWLnMsciksbz1VUChuaC5sLGhWLmwscik7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxvKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLnI9dFtyXSx0aGlzLmc9dFtyKzFdLHRoaXMuYj10W3IrMl0sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLnIsdFtyKzFdPXRoaXMuZyx0W3IrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpe3JldHVybiB0aGlzLnI9dC5nZXRYKHIpLHRoaXMuZz10LmdldFkociksdGhpcy5iPXQuZ2V0WihyKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07bmUuTkFNRVM9T2ZlO25lLnByb3RvdHlwZS5pc0NvbG9yPSEwO25lLnByb3RvdHlwZS5yPTE7bmUucHJvdG90eXBlLmc9MTtuZS5wcm90b3R5cGUuYj0xO3ZhciB2MyxLZj1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD09InVuZGVmaW5lZCIpcmV0dXJuIHQuc3JjO2xldCByO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClyPXQ7ZWxzZXt2Mz09PXZvaWQgMCYmKHYzPXQ2KCJjYW52YXMiKSksdjMud2lkdGg9dC53aWR0aCx2My5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49djMuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxyPXYzfXJldHVybiByLndpZHRoPjIwNDh8fHIuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTpyLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHI9dDYoImNhbnZhcyIpO3Iud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodDtsZXQgbj1yLmdldENvbnRleHQoIjJkIik7bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IGk9bi5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89aS5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09VTMob1thXS8yNTUpKjI1NTtyZXR1cm4gbi5wdXRJbWFnZURhdGEoaSwwLDApLHJ9ZWxzZSBpZih0LmRhdGEpe2xldCByPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3Jbbl09TWF0aC5mbG9vcihVMyhyW25dLzI1NSkqMjU1KTpyW25dPVUzKHJbbl0pO3JldHVybntkYXRhOnIsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxlZnI9MCx2aT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQ9dmkuREVGQVVMVF9JTUFHRSxyPXZpLkRFRkFVTFRfTUFQUElORyxuPUpvLGk9Sm8sbz1paSxhPW94LHM9UW8sbD1aZCxjPTEsdT1RZCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTplZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1yLHRoaXMud3JhcFM9bix0aGlzLndyYXBUPWksdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBMdCgwLDApLHRoaXMucmVwZWF0PW5ldyBMdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBMdCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGtpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIXImJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgaT10aGlzLmltYWdlO2lmKGkudXVpZD09PXZvaWQgMCYmKGkudXVpZD1ObCgpKSwhciYmdC5pbWFnZXNbaS51dWlkXT09PXZvaWQgMCl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1bXTtmb3IobGV0IGE9MCxzPWkubGVuZ3RoO2E8czthKyspaVthXS5pc0RhdGFUZXh0dXJlP28ucHVzaChZY3QoaVthXS5pbWFnZSkpOm8ucHVzaChZY3QoaVthXSkpfWVsc2Ugbz1ZY3QoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOm99fW4uaW1hZ2U9aS51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHJ8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PVhVKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgWFA6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBKbzp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBYUDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEpvOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAkUDpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt2aS5ERUZBVUxUX0lNQUdFPXZvaWQgMDt2aS5ERUZBVUxUX01BUFBJTkc9WFU7dmkucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBZY3QoZSl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwP0tmLmdldERhdGFVUkwoZSk6ZS5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuZGF0YSksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsdHlwZTplLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX12YXIgZW49Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7Y2FzZSAzOnRoaXMudz1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz10LnchPT12b2lkIDA/dC53OjEsdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpcy56PXQueityLnosdGhpcy53PXQudytyLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXMueis9dC56KnIsdGhpcy53Kz10Lncqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzLno9dC56LXIueix0aGlzLnc9dC53LXIudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qcithWzRdKm4rYVs4XSppK2FbMTJdKm8sdGhpcy55PWFbMV0qcithWzVdKm4rYVs5XSppK2FbMTNdKm8sdGhpcy56PWFbMl0qcithWzZdKm4rYVsxMF0qaSthWzE0XSpvLHRoaXMudz1hWzNdKnIrYVs3XSpuK2FbMTFdKmkrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCByPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiByPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9yLHRoaXMueT10Lnkvcix0aGlzLno9dC56L3IpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCByLG4saSxvLGw9dC5lbGVtZW50cyxjPWxbMF0sdT1sWzRdLGg9bFs4XSxmPWxbMV0scD1sWzVdLGQ9bFs5XSxnPWxbMl0sXz1sWzZdLHk9bFsxMF07aWYoTWF0aC5hYnModS1mKTwuMDEmJk1hdGguYWJzKGgtZyk8LjAxJiZNYXRoLmFicyhkLV8pPC4wMSl7aWYoTWF0aC5hYnModStmKTwuMSYmTWF0aC5hYnMoaCtnKTwuMSYmTWF0aC5hYnMoZCtfKTwuMSYmTWF0aC5hYnMoYytwK3ktMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7cj1NYXRoLlBJO2xldCBiPShjKzEpLzIsUz0ocCsxKS8yLEM9KHkrMSkvMixQPSh1K2YpLzQsaz0oaCtnKS80LE89KGQrXykvNDtyZXR1cm4gYj5TJiZiPkM/YjwuMDE/KG49MCxpPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQoYiksaT1QL24sbz1rL24pOlM+Qz9TPC4wMT8obj0uNzA3MTA2NzgxLGk9MCxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChTKSxuPVAvaSxvPU8vaSk6QzwuMDE/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoQyksbj1rL28saT1PL28pLHRoaXMuc2V0KG4saSxvLHIpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChfLWQpKihfLWQpKyhoLWcpKihoLWcpKyhmLXUpKihmLXUpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShfLWQpL3gsdGhpcy55PShoLWcpL3gsdGhpcy56PShmLXUpL3gsdGhpcy53PU1hdGguYWNvcygoYytwK3ktMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihyLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXMudys9KHQudy10aGlzLncpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzLno9dC56KyhyLnotdC56KSpuLHRoaXMudz10LncrKHIudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXMuej10W3IrMl0sdGhpcy53PXRbciszXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdFtyKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzLnc9dC5nZXRXKHIpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07ZW4ucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBlbigwLDAsdCxyKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGVuKDAsMCx0LHIpLHRoaXMudGV4dHVyZT1uZXcgdmkodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwP24uZ2VuZXJhdGVNaXBtYXBzOiExLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD1uLmludGVybmFsRm9ybWF0IT09dm9pZCAwP24uaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPW4ubWluRmlsdGVyIT09dm9pZCAwP24ubWluRmlsdGVyOmlpLHRoaXMuZGVwdGhCdWZmZXI9bi5kZXB0aEJ1ZmZlciE9PXZvaWQgMD9uLmRlcHRoQnVmZmVyOiEwLHRoaXMuc3RlbmNpbEJ1ZmZlcj1uLnN0ZW5jaWxCdWZmZXIhPT12b2lkIDA/bi5zdGVuY2lsQnVmZmVyOiExLHRoaXMuZGVwdGhUZXh0dXJlPW4uZGVwdGhUZXh0dXJlIT09dm9pZCAwP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQscixuPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bikmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt1cy5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMDt2YXIgbFU9Y2xhc3MgZXh0ZW5kcyB1c3tjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIodCxyKTtsZXQgaT10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288bjtvKyspdGhpcy50ZXh0dXJlW29dPWkuY2xvbmUoKX1zZXRTaXplKHQscixuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PXJ8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW47Zm9yKGxldCBpPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO2k8bztpKyspdGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCByPTAsbj10LnRleHR1cmUubGVuZ3RoO3I8bjtyKyspdGhpcy50ZXh0dXJlW3JdPXQudGV4dHVyZVtyXS5jbG9uZSgpO3JldHVybiB0aGlzfX07bFUucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIGozPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKHQscixuKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PW4uaWdub3JlRGVwdGghPT12b2lkIDA/bi5pZ25vcmVEZXB0aDohMCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT1uLnVzZVJlbmRlclRvVGV4dHVyZSE9PXZvaWQgMD9uLnVzZVJlbmRlclRvVGV4dHVyZTohMSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10aGlzLnVzZVJlbmRlclRvVGV4dHVyZT09PSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O2ozLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIHlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pfXN0YXRpYyBzbGVycCh0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksbi5zbGVycFF1YXRlcm5pb25zKHQscixpKX1zdGF0aWMgc2xlcnBGbGF0KHQscixuLGksbyxhLHMpe2xldCBsPW5baSswXSxjPW5baSsxXSx1PW5baSsyXSxoPW5baSszXSxmPW9bYSswXSxwPW9bYSsxXSxkPW9bYSsyXSxnPW9bYSszXTtpZihzPT09MCl7dFtyKzBdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWg7cmV0dXJufWlmKHM9PT0xKXt0W3IrMF09Zix0W3IrMV09cCx0W3IrMl09ZCx0W3IrM109ZztyZXR1cm59aWYoaCE9PWd8fGwhPT1mfHxjIT09cHx8dSE9PWQpe2xldCBfPTEtcyx5PWwqZitjKnArdSpkK2gqZyx4PXk+PTA/MTotMSxiPTEteSp5O2lmKGI+TnVtYmVyLkVQU0lMT04pe2xldCBDPU1hdGguc3FydChiKSxQPU1hdGguYXRhbjIoQyx5KngpO189TWF0aC5zaW4oXypQKS9DLHM9TWF0aC5zaW4ocypQKS9DfWxldCBTPXMqeDtpZihsPWwqXytmKlMsYz1jKl8rcCpTLHU9dSpfK2QqUyxoPWgqXytnKlMsXz09PTEtcyl7bGV0IEM9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUraCpoKTtsKj1DLGMqPUMsdSo9QyxoKj1DfX10W3JdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWh9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscixuLGksbyxhKXtsZXQgcz1uW2ldLGw9bltpKzFdLGM9bltpKzJdLHU9bltpKzNdLGg9b1thXSxmPW9bYSsxXSxwPW9bYSsyXSxkPW9bYSszXTtyZXR1cm4gdFtyXT1zKmQrdSpoK2wqcC1jKmYsdFtyKzFdPWwqZCt1KmYrYypoLXMqcCx0W3IrMl09YypkK3UqcCtzKmYtbCpoLHRbciszXT11KmQtcypoLWwqZi1jKnAsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQscixuLGkpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1yLHRoaXMuX3o9bix0aGlzLl93PWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQscil7aWYoISh0JiZ0LmlzRXVsZXIpKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IG49dC5feCxpPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhuLzIpLHU9cyhpLzIpLGg9cyhvLzIpLGY9bChuLzIpLHA9bChpLzIpLGQ9bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIllYWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIlpYWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlpZWCI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIllaWCI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlhaWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuIHIhPT0hMSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LHIpe2xldCBuPXIvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcj10LmVsZW1lbnRzLG49clswXSxpPXJbNF0sbz1yWzhdLGE9clsxXSxzPXJbNV0sbD1yWzldLGM9clsyXSx1PXJbNl0saD1yWzEwXSxmPW4rcytoO2lmKGY+MCl7bGV0IHA9LjUvTWF0aC5zcXJ0KGYrMSk7dGhpcy5fdz0uMjUvcCx0aGlzLl94PSh1LWwpKnAsdGhpcy5feT0oby1jKSpwLHRoaXMuX3o9KGEtaSkqcH1lbHNlIGlmKG4+cyYmbj5oKXtsZXQgcD0yKk1hdGguc3FydCgxK24tcy1oKTt0aGlzLl93PSh1LWwpL3AsdGhpcy5feD0uMjUqcCx0aGlzLl95PShpK2EpL3AsdGhpcy5fej0obytjKS9wfWVsc2UgaWYocz5oKXtsZXQgcD0yKk1hdGguc3FydCgxK3Mtbi1oKTt0aGlzLl93PShvLWMpL3AsdGhpcy5feD0oaSthKS9wLHRoaXMuX3k9LjI1KnAsdGhpcy5fej0obCt1KS9wfWVsc2V7bGV0IHA9MipNYXRoLnNxcnQoMStoLW4tcyk7dGhpcy5fdz0oYS1pKS9wLHRoaXMuX3g9KG8rYykvcCx0aGlzLl95PShsK3UpL3AsdGhpcy5fej0uMjUqcH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQscil7bGV0IG49dC5kb3QocikrMTtyZXR1cm4gbjxOdW1iZXIuRVBTSUxPTj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSpyLnotdC56KnIueSx0aGlzLl95PXQueipyLngtdC54KnIueix0aGlzLl96PXQueCpyLnktdC55KnIueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoWm8odGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQscil7bGV0IG49dGhpcy5hbmdsZVRvKHQpO2lmKG49PT0wKXJldHVybiB0aGlzO2xldCBpPU1hdGgubWluKDEsci9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpe2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX3cscz1yLl94LGw9ci5feSxjPXIuX3osdT1yLl93O3JldHVybiB0aGlzLl94PW4qdSthKnMraSpjLW8qbCx0aGlzLl95PWkqdSthKmwrbypzLW4qYyx0aGlzLl96PW8qdSthKmMrbipsLWkqcyx0aGlzLl93PWEqdS1uKnMtaSpsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LHIpe2lmKHI9PT0wKXJldHVybiB0aGlzO2lmKHI9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IG49dGhpcy5feCxpPXRoaXMuX3ksbz10aGlzLl96LGE9dGhpcy5fdyxzPWEqdC5fdytuKnQuX3graSp0Ll95K28qdC5fejtpZihzPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscz0tcyk6dGhpcy5jb3B5KHQpLHM+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1pLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtcypzO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgcD0xLXI7cmV0dXJuIHRoaXMuX3c9cCphK3IqdGhpcy5fdyx0aGlzLl94PXAqbityKnRoaXMuX3gsdGhpcy5feT1wKmkrcip0aGlzLl95LHRoaXMuX3o9cCpvK3IqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxzKSxoPU1hdGguc2luKCgxLXIpKnUpL2MsZj1NYXRoLnNpbihyKnUpL2M7cmV0dXJuIHRoaXMuX3c9YSpoK3RoaXMuX3cqZix0aGlzLl94PW4qaCt0aGlzLl94KmYsdGhpcy5feT1pKmgrdGhpcy5feSpmLHRoaXMuX3o9bypoK3RoaXMuX3oqZix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQscixuKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKHIsbil9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxyPU1hdGguc3FydCgxLXQpLG49TWF0aC5zcXJ0KHQpLGk9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQocipNYXRoLmNvcyhpKSxuKk1hdGguc2luKG8pLG4qTWF0aC5jb3MobykscipNYXRoLnNpbihpKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLl94PXRbcl0sdGhpcy5feT10W3IrMV0sdGhpcy5fej10W3IrMl0sdGhpcy5fdz10W3IrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5feCx0W3IrMV09dGhpcy5feSx0W3IrMl09dGhpcy5feix0W3IrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5feD10LmdldFgociksdGhpcy5feT10LmdldFkociksdGhpcy5fej10LmdldFoociksdGhpcy5fdz10LmdldFcociksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eWkucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgaj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW59c2V0KHQscixuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxyKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54KnIueCx0aGlzLnk9dC55KnIueSx0aGlzLno9dC56KnIueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQscil7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tQXhpc0FuZ2xlKHQscikpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bM10qbitvWzZdKmksdGhpcy55PW9bMV0qcitvWzRdKm4rb1s3XSppLHRoaXMuej1vWzJdKnIrb1s1XSpuK29bOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cyxhPTEvKG9bM10qcitvWzddKm4rb1sxMV0qaStvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSpyK29bNF0qbitvWzhdKmkrb1sxMl0pKmEsdGhpcy55PShvWzFdKnIrb1s1XSpuK29bOV0qaStvWzEzXSkqYSx0aGlzLno9KG9bMl0qcitvWzZdKm4rb1sxMF0qaStvWzE0XSkqYSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LngsYT10Lnkscz10LnosbD10LncsYz1sKnIrYSppLXMqbix1PWwqbitzKnItbyppLGg9bCppK28qbi1hKnIsZj0tbypyLWEqbi1zKmk7cmV0dXJuIHRoaXMueD1jKmwrZiotbyt1Ki1zLWgqLWEsdGhpcy55PXUqbCtmKi1hK2gqLW8tYyotcyx0aGlzLno9aCpsK2YqLXMrYyotYS11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bNF0qbitvWzhdKmksdGhpcy55PW9bMV0qcitvWzVdKm4rb1s5XSppLHRoaXMuej1vWzJdKnIrb1s2XSpuK29bMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKHIueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzfWNyb3NzKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LHIpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXIueCxzPXIueSxsPXIuejtyZXR1cm4gdGhpcy54PWkqbC1vKnMsdGhpcy55PW8qYS1uKmwsdGhpcy56PW4qcy1pKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IHI9dC5sZW5ndGhTcSgpO2lmKHI9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IG49dC5kb3QodGhpcykvcjtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqY3QuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoamN0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihqY3QuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgcj1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYocj09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgbj10aGlzLmRvdCh0KS9yO3JldHVybiBNYXRoLmFjb3MoWm8obiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gcipyK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxyLG4pe2xldCBpPU1hdGguc2luKHIpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhyKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4ociksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MociksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMTJdLHRoaXMueT1yWzEzXSx0aGlzLno9clsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9cix0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxyKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxyKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsciozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdFtyKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLHI9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsbj1NYXRoLnNxcnQoMS1USSh0LDIpKTtyZXR1cm4gdGhpcy54PW4qTWF0aC5jb3MociksdGhpcy55PW4qTWF0aC5zaW4ociksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O2oucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgamN0PW5ldyBqLGR1ZT1uZXcgeWksdGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaigxLzAsMS8wLDEvMCkscj1uZXcgaigtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCByPTAsbj10Lmxlbmd0aDtyPG47cisrKXRoaXMuZXhwYW5kQnlQb2ludCh0W3JdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LHIpe2xldCBuPW0xLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCxyPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQscil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQscj0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IG49dC5nZW9tZXRyeTtpZihuIT09dm9pZCAwKWlmKHImJm4uYXR0cmlidXRlcyE9bnVsbCYmbi5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspbTEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQobTEpfWVsc2Ugbi5ib3VuZGluZ0JveD09PW51bGwmJm4uY29tcHV0ZUJvdW5kaW5nQm94KCksWGN0LmNvcHkobi5ib3VuZGluZ0JveCksWGN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKFhjdCk7bGV0IGk9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChpW29dLHIpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsbTEpLG0xLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByLG47cmV0dXJuIHQubm9ybWFsLng+MD8ocj10Lm5vcm1hbC54KnRoaXMubWluLngsbj10Lm5vcm1hbC54KnRoaXMubWF4LngpOihyPXQubm9ybWFsLngqdGhpcy5tYXgueCxuPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhyKz10Lm5vcm1hbC55KnRoaXMubWluLnksbis9dC5ub3JtYWwueSp0aGlzLm1heC55KToocis9dC5ub3JtYWwueSp0aGlzLm1heC55LG4rPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhyKz10Lm5vcm1hbC56KnRoaXMubWluLnosbis9dC5ub3JtYWwueip0aGlzLm1heC56KToocis9dC5ub3JtYWwueip0aGlzLm1heC56LG4rPXQubm9ybWFsLnoqdGhpcy5taW4ueikscjw9LXQuY29uc3RhbnQmJm4+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihMUCksZlYuc3ViVmVjdG9ycyh0aGlzLm1heCxMUCkseDMuc3ViVmVjdG9ycyh0LmEsTFApLGIzLnN1YlZlY3RvcnModC5iLExQKSx3My5zdWJWZWN0b3JzKHQuYyxMUCksUDAuc3ViVmVjdG9ycyhiMyx4MyksSTAuc3ViVmVjdG9ycyh3MyxiMyksZzEuc3ViVmVjdG9ycyh4Myx3Myk7bGV0IHI9WzAsLVAwLnosUDAueSwwLC1JMC56LEkwLnksMCwtZzEueixnMS55LFAwLnosMCwtUDAueCxJMC56LDAsLUkwLngsZzEueiwwLC1nMS54LC1QMC55LFAwLngsMCwtSTAueSxJMC54LDAsLWcxLnksZzEueCwwXTtyZXR1cm4hJGN0KHIseDMsYjMsdzMsZlYpfHwocj1bMSwwLDAsMCwxLDAsMCwwLDFdLCEkY3Qocix4MyxiMyx3MyxmVikpPyExOihwVi5jcm9zc1ZlY3RvcnMoUDAsSTApLHI9W3BWLngscFYueSxwVi56XSwkY3Qocix4MyxiMyx3MyxmVikpfWNsYW1wUG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG0xLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShtMSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KFZkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhWZCksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dGEucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgVmQ9W25ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqXSxtMT1uZXcgaixYY3Q9bmV3IHRhLHgzPW5ldyBqLGIzPW5ldyBqLHczPW5ldyBqLFAwPW5ldyBqLEkwPW5ldyBqLGcxPW5ldyBqLExQPW5ldyBqLGZWPW5ldyBqLHBWPW5ldyBqLF8xPW5ldyBqO2Z1bmN0aW9uICRjdChlLHQscixuLGkpe2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGgtMztvPD1hO28rPTMpe18xLmZyb21BcnJheShlLG8pO2xldCBzPWkueCpNYXRoLmFicyhfMS54KStpLnkqTWF0aC5hYnMoXzEueSkraS56Kk1hdGguYWJzKF8xLnopLGw9dC5kb3QoXzEpLGM9ci5kb3QoXzEpLHU9bi5kb3QoXzEpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5zKXJldHVybiExfXJldHVybiEwfXZhciByZnI9bmV3IHRhLG11ZT1uZXcgaixkVj1uZXcgaixLY3Q9bmV3IGosWmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9cix0aGlzfXNldEZyb21Qb2ludHModCxyKXtsZXQgbj10aGlzLmNlbnRlcjtyIT09dm9pZCAwP24uY29weShyKTpyZnIuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgcj10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1yKnJ9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LHIpe2xldCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiByLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKHIuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxyLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxyfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtLY3Quc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgcj1LY3QubGVuZ3RoU3EoKTtpZihyPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgbj1NYXRoLnNxcnQociksaT0obi10aGlzLnJhZGl1cykqLjU7dGhpcy5jZW50ZXIuYWRkKEtjdC5tdWx0aXBseVNjYWxhcihpL24pKSx0aGlzLnJhZGl1cys9aX1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP2RWLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOmRWLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQobXVlLmNvcHkodC5jZW50ZXIpLmFkZChkVikpLHRoaXMuZXhwYW5kQnlQb2ludChtdWUuY29weSh0LmNlbnRlcikuc3ViKGRWKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sVWQ9bmV3IGosWmN0PW5ldyBqLG1WPW5ldyBqLEwwPW5ldyBqLEpjdD1uZXcgaixnVj1uZXcgaixRY3Q9bmV3IGosSmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LFVkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7ci5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBuPXIuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP3IuY29weSh0aGlzLm9yaWdpbik6ci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCByPVVkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gcjwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihVZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5vcmlnaW4pLFVkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQscixuLGkpe1pjdC5jb3B5KHQpLmFkZChyKS5tdWx0aXBseVNjYWxhciguNSksbVYuY29weShyKS5zdWIodCkubm9ybWFsaXplKCksTDAuY29weSh0aGlzLm9yaWdpbikuc3ViKFpjdCk7bGV0IG89dC5kaXN0YW5jZVRvKHIpKi41LGE9LXRoaXMuZGlyZWN0aW9uLmRvdChtVikscz1MMC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LUwwLmRvdChtViksYz1MMC5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1hKmEpLGgsZixwLGQ7aWYodT4wKWlmKGg9YSpsLXMsZj1hKnMtbCxkPW8qdSxoPj0wKWlmKGY+PS1kKWlmKGY8PWQpe2xldCBnPTEvdTtoKj1nLGYqPWcscD1oKihoK2EqZisyKnMpK2YqKGEqaCtmKzIqbCkrY31lbHNlIGY9byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZD8oaD1NYXRoLm1heCgwLC0oLWEqbytzKSksZj1oPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk6Zjw9ZD8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShhKm8rcykpLGY9aD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPWE+MD8tbzpvLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO3JldHVybiBuJiZuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksaSYmaS5jb3B5KG1WKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoWmN0KSxwfWludGVyc2VjdFNwaGVyZSh0LHIpe1VkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBuPVVkLmRvdCh0aGlzLmRpcmVjdGlvbiksaT1VZC5kb3QoVWQpLW4qbixvPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1pKSxzPW4tYSxsPW4rYTtyZXR1cm4gczwwJiZsPDA/bnVsbDpzPDA/dGhpcy5hdChsLHIpOnRoaXMuYXQocyxyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCByPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYocj09PTApcmV0dXJuIHQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT09PTA/MDpudWxsO2xldCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9yO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LHIpe2xldCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBuPT09bnVsbD9udWxsOnRoaXMuYXQobixyKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IHI9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiByPT09MHx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpyPDB9aW50ZXJzZWN0Qm94KHQscil7bGV0IG4saSxvLGEscyxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGg9MS90aGlzLmRpcmVjdGlvbi56LGY9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KG49KHQubWluLngtZi54KSpjLGk9KHQubWF4LngtZi54KSpjKToobj0odC5tYXgueC1mLngpKmMsaT0odC5taW4ueC1mLngpKmMpLHU+PTA/KG89KHQubWluLnktZi55KSp1LGE9KHQubWF4LnktZi55KSp1KToobz0odC5tYXgueS1mLnkpKnUsYT0odC5taW4ueS1mLnkpKnUpLG4+YXx8bz5pfHwoKG8+bnx8biE9PW4pJiYobj1vKSwoYTxpfHxpIT09aSkmJihpPWEpLGg+PTA/KHM9KHQubWluLnotZi56KSpoLGw9KHQubWF4LnotZi56KSpoKToocz0odC5tYXguei1mLnopKmgsbD0odC5taW4uei1mLnopKmgpLG4+bHx8cz5pKXx8KChzPm58fG4hPT1uKSYmKG49cyksKGw8aXx8aSE9PWkpJiYoaT1sKSxpPDApP251bGw6dGhpcy5hdChuPj0wP246aSxyKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0aGlzLmludGVyc2VjdEJveCh0LFVkKSE9PW51bGx9aW50ZXJzZWN0VHJpYW5nbGUodCxyLG4saSxvKXtKY3Quc3ViVmVjdG9ycyhyLHQpLGdWLnN1YlZlY3RvcnMobix0KSxRY3QuY3Jvc3NWZWN0b3JzKEpjdCxnVik7bGV0IGE9dGhpcy5kaXJlY3Rpb24uZG90KFFjdCkscztpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7cz0xfWVsc2UgaWYoYTwwKXM9LTEsYT0tYTtlbHNlIHJldHVybiBudWxsO0wwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoZ1YuY3Jvc3NWZWN0b3JzKEwwLGdWKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KEpjdC5jcm9zcyhMMCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IHU9LXMqTDAuZG90KFFjdCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9hLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxNZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09cix5WzhdPW4seVsxMl09aSx5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPXUseVsxMF09aCx5WzE0XT1mLHlbM109cCx5WzddPWQseVsxMV09Zyx5WzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgTWUoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0scls5XT1uWzldLHJbMTBdPW5bMTBdLHJbMTFdPW5bMTFdLHJbMTJdPW5bMTJdLHJbMTNdPW5bMTNdLHJbMTRdPW5bMTRdLHJbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiByWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0sclszXSxyWzZdLDAsclsxXSxyWzRdLHJbN10sMCxyWzJdLHJbNV0scls4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxyLG4pe3JldHVybiB0aGlzLnNldCh0Lngsci54LG4ueCwwLHQueSxyLnksbi55LDAsdC56LHIueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gclswXT1uWzBdKmksclsxXT1uWzFdKmksclsyXT1uWzJdKmksclszXT0wLHJbNF09bls0XSpvLHJbNV09bls1XSpvLHJbNl09bls2XSpvLHJbN109MCxyWzhdPW5bOF0qYSxyWzldPW5bOV0qYSxyWzEwXT1uWzEwXSphLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQueixhPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGkpLHU9TWF0aC5jb3MobyksaD1NYXRoLnNpbihvKTtpZih0Lm9yZGVyPT09IlhZWiIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPS1sKmgscls4XT1jLHJbMV09cCtkKmMscls1XT1mLWcqYyxyWzldPS1zKmwsclsyXT1nLWYqYyxyWzZdPWQrcCpjLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWVhaIil7bGV0IGY9bCp1LHA9bCpoLGQ9Yyp1LGc9YypoO3JbMF09ZitnKnMscls0XT1kKnMtcCxyWzhdPWEqYyxyWzFdPWEqaCxyWzVdPWEqdSxyWzldPS1zLHJbMl09cCpzLWQscls2XT1nK2YqcyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYtZypzLHJbNF09LWEqaCxyWzhdPWQrcCpzLHJbMV09cCtkKnMscls1XT1hKnUscls5XT1nLWYqcyxyWzJdPS1hKmMscls2XT1zLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWllYIil7bGV0IGY9YSp1LHA9YSpoLGQ9cyp1LGc9cypoO3JbMF09bCp1LHJbNF09ZCpjLXAscls4XT1mKmMrZyxyWzFdPWwqaCxyWzVdPWcqYytmLHJbOV09cCpjLWQsclsyXT0tYyxyWzZdPXMqbCxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllaWCIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPWctZipoLHJbOF09ZCpoK3AsclsxXT1oLHJbNV09YSp1LHJbOV09LXMqdSxyWzJdPS1jKnUscls2XT1wKmgrZCxyWzEwXT1mLWcqaH1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7bGV0IGY9YSpsLHA9YSpjLGQ9cypsLGc9cypjO3JbMF09bCp1LHJbNF09LWgscls4XT1jKnUsclsxXT1mKmgrZyxyWzVdPWEqdSxyWzldPXAqaC1kLHJbMl09ZCpoLXAscls2XT1zKnUsclsxMF09ZypoK2Z9cmV0dXJuIHJbM109MCxyWzddPTAsclsxMV09MCxyWzEyXT0wLHJbMTNdPTAsclsxNF09MCxyWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShuZnIsdCxpZnIpfWxvb2tBdCh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4ga2wuc3ViVmVjdG9ycyh0LHIpLGtsLmxlbmd0aFNxKCk9PT0wJiYoa2wuej0xKSxrbC5ub3JtYWxpemUoKSxrMC5jcm9zc1ZlY3RvcnMobixrbCksazAubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhuLnopPT09MT9rbC54Kz0xZS00OmtsLnorPTFlLTQsa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpKSxrMC5ub3JtYWxpemUoKSxfVi5jcm9zc1ZlY3RvcnMoa2wsazApLGlbMF09azAueCxpWzRdPV9WLngsaVs4XT1rbC54LGlbMV09azAueSxpWzVdPV9WLnksaVs5XT1rbC55LGlbMl09azAueixpWzZdPV9WLnosaVsxMF09a2wueix0aGlzfW11bHRpcGx5KHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQscikpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bNF0sbD1uWzhdLGM9blsxMl0sdT1uWzFdLGg9bls1XSxmPW5bOV0scD1uWzEzXSxkPW5bMl0sZz1uWzZdLF89blsxMF0seT1uWzE0XSx4PW5bM10sYj1uWzddLFM9blsxMV0sQz1uWzE1XSxQPWlbMF0saz1pWzRdLE89aVs4XSxEPWlbMTJdLEI9aVsxXSxJPWlbNV0sTD1pWzldLFI9aVsxM10sRj1pWzJdLHo9aVs2XSxVPWlbMTBdLFc9aVsxNF0sWj1pWzNdLHJ0PWlbN10sb3Q9aVsxMV0sc3Q9aVsxNV07cmV0dXJuIG9bMF09YSpQK3MqQitsKkYrYypaLG9bNF09YSprK3MqSStsKnorYypydCxvWzhdPWEqTytzKkwrbCpVK2Mqb3Qsb1sxMl09YSpEK3MqUitsKlcrYypzdCxvWzFdPXUqUCtoKkIrZipGK3AqWixvWzVdPXUqaytoKkkrZip6K3AqcnQsb1s5XT11Kk8raCpMK2YqVStwKm90LG9bMTNdPXUqRCtoKlIrZipXK3Aqc3Qsb1syXT1kKlArZypCK18qRit5Klosb1s2XT1kKmsrZypJK18qeit5KnJ0LG9bMTBdPWQqTytnKkwrXypVK3kqb3Qsb1sxNF09ZCpEK2cqUitfKlcreSpzdCxvWzNdPXgqUCtiKkIrUypGK0MqWixvWzddPXgqaytiKkkrUyp6K0MqcnQsb1sxMV09eCpPK2IqTCtTKlUrQypvdCxvWzE1XT14KkQrYipSK1MqVytDKnN0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzRdKj10LHJbOF0qPXQsclsxMl0qPXQsclsxXSo9dCxyWzVdKj10LHJbOV0qPXQsclsxM10qPXQsclsyXSo9dCxyWzZdKj10LHJbMTBdKj10LHJbMTRdKj10LHJbM10qPXQscls3XSo9dCxyWzExXSo9dCxyWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0sbj10WzRdLGk9dFs4XSxvPXRbMTJdLGE9dFsxXSxzPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLHA9dFsxNF0sZD10WzNdLGc9dFs3XSxfPXRbMTFdLHk9dFsxNV07cmV0dXJuIGQqKCtvKmwqaC1pKmMqaC1vKnMqZituKmMqZitpKnMqcC1uKmwqcCkrZyooK3IqbCpwLXIqYypmK28qYSpmLWkqYSpwK2kqYyp1LW8qbCp1KStfKigrcipjKmgtcipzKnAtbyphKmgrbiphKnArbypzKnUtbipjKnUpK3kqKC1pKnMqdS1yKmwqaCtyKnMqZitpKmEqaC1uKmEqZituKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyO3JldHVybiByPXRbMV0sdFsxXT10WzRdLHRbNF09cixyPXRbMl0sdFsyXT10WzhdLHRbOF09cixyPXRbNl0sdFs2XT10WzldLHRbOV09cixyPXRbM10sdFszXT10WzEyXSx0WzEyXT1yLHI9dFs3XSx0WzddPXRbMTNdLHRbMTNdPXIscj10WzExXSx0WzExXT10WzE0XSx0WzE0XT1yLHRoaXN9c2V0UG9zaXRpb24odCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109cixpWzE0XT1uKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0scD10WzExXSxkPXRbMTJdLGc9dFsxM10sXz10WzE0XSx5PXRbMTVdLHg9aCpfKmMtZypmKmMrZypsKnAtcypfKnAtaCpsKnkrcypmKnksYj1kKmYqYy11Kl8qYy1kKmwqcCthKl8qcCt1KmwqeS1hKmYqeSxTPXUqZypjLWQqaCpjK2QqcypwLWEqZypwLXUqcyp5K2EqaCp5LEM9ZCpoKmwtdSpnKmwtZCpzKmYrYSpnKmYrdSpzKl8tYSpoKl8sUD1yKngrbipiK2kqUytvKkM7aWYoUD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBrPTEvUDtyZXR1cm4gdFswXT14KmssdFsxXT0oZypmKm8taCpfKm8tZyppKnArbipfKnAraCppKnktbipmKnkpKmssdFsyXT0ocypfKm8tZypsKm8rZyppKmMtbipfKmMtcyppKnkrbipsKnkpKmssdFszXT0oaCpsKm8tcypmKm8taCppKmMrbipmKmMrcyppKnAtbipsKnApKmssdFs0XT1iKmssdFs1XT0odSpfKm8tZCpmKm8rZCppKnAtcipfKnAtdSppKnkrcipmKnkpKmssdFs2XT0oZCpsKm8tYSpfKm8tZCppKmMrcipfKmMrYSppKnktcipsKnkpKmssdFs3XT0oYSpmKm8tdSpsKm8rdSppKmMtcipmKmMtYSppKnArcipsKnApKmssdFs4XT1TKmssdFs5XT0oZCpoKm8tdSpnKm8tZCpuKnArcipnKnArdSpuKnktcipoKnkpKmssdFsxMF09KGEqZypvLWQqcypvK2QqbipjLXIqZypjLWEqbip5K3Iqcyp5KSprLHRbMTFdPSh1KnMqby1hKmgqby11Km4qYytyKmgqYythKm4qcC1yKnMqcCkqayx0WzEyXT1DKmssdFsxM109KHUqZyppLWQqaCppK2QqbipmLXIqZypmLXUqbipfK3IqaCpfKSprLHRbMTRdPShkKnMqaS1hKmcqaS1kKm4qbCtyKmcqbCthKm4qXy1yKnMqXykqayx0WzE1XT0oYSpoKmktdSpzKmkrdSpuKmwtcipoKmwtYSpuKmYrcipzKmYpKmssdGhpc31zY2FsZSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LG89dC56O3JldHVybiByWzBdKj1uLHJbNF0qPWkscls4XSo9byxyWzFdKj1uLHJbNV0qPWkscls5XSo9byxyWzJdKj1uLHJbNl0qPWksclsxMF0qPW8sclszXSo9bixyWzddKj1pLHJbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sbj10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxpPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChyLG4saSkpfW1ha2VUcmFuc2xhdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsciwwLDAsMSxuLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsciwtbiwwLDAsbixyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsMCxuLDAsMCwxLDAsMCwtbiwwLHIsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQociwtbiwwLDAsbixyLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz0xLW4sYT10Lngscz10LnksbD10LnosYz1vKmEsdT1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStuLGMqcy1pKmwsYypsK2kqcywwLGMqcytpKmwsdSpzK24sdSpsLWkqYSwwLGMqbC1pKnMsdSpsK2kqYSxvKmwqbCtuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxyLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsciwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsbixvLDAsdCwxLGEsMCxyLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPXIuX3gsYT1yLl95LHM9ci5feixsPXIuX3csYz1vK28sdT1hK2EsaD1zK3MsZj1vKmMscD1vKnUsZD1vKmgsZz1hKnUsXz1hKmgseT1zKmgseD1sKmMsYj1sKnUsUz1sKmgsQz1uLngsUD1uLnksaz1uLno7cmV0dXJuIGlbMF09KDEtKGcreSkpKkMsaVsxXT0ocCtTKSpDLGlbMl09KGQtYikqQyxpWzNdPTAsaVs0XT0ocC1TKSpQLGlbNV09KDEtKGYreSkpKlAsaVs2XT0oXyt4KSpQLGlbN109MCxpWzhdPShkK2IpKmssaVs5XT0oXy14KSprLGlbMTBdPSgxLShmK2cpKSprLGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPVMzLnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCksYT1TMy5zZXQoaVs0XSxpWzVdLGlbNl0pLmxlbmd0aCgpLHM9UzMuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSxpaC5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvYSxoPTEvcztyZXR1cm4gaWguZWxlbWVudHNbMF0qPWMsaWguZWxlbWVudHNbMV0qPWMsaWguZWxlbWVudHNbMl0qPWMsaWguZWxlbWVudHNbNF0qPXUsaWguZWxlbWVudHNbNV0qPXUsaWguZWxlbWVudHNbNl0qPXUsaWguZWxlbWVudHNbOF0qPWgsaWguZWxlbWVudHNbOV0qPWgsaWguZWxlbWVudHNbMTBdKj1oLHIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGloKSxuLng9byxuLnk9YSxuLno9cyx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LHIsbixpLG8sYSl7YT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTIqby8oci10KSxjPTIqby8obi1pKSx1PShyK3QpLyhyLXQpLGg9KG4raSkvKG4taSksZj0tKGErbykvKGEtbykscD0tMiphKm8vKGEtbyk7cmV0dXJuIHNbMF09bCxzWzRdPTAsc1s4XT11LHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPWgsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPWYsc1sxNF09cCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oci10KSxjPTEvKG4taSksdT0xLyhhLW8pLGg9KHIrdCkqbCxmPShuK2kpKmMscD0oYStvKSp1O3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS1oLHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LWYsc1syXT0wLHNbNl09MCxzWzEwXT0tMip1LHNbMTRdPS1wLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8MTY7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rcl07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtyXT1uWzBdLHRbcisxXT1uWzFdLHRbcisyXT1uWzJdLHRbciszXT1uWzNdLHRbcis0XT1uWzRdLHRbcis1XT1uWzVdLHRbcis2XT1uWzZdLHRbcis3XT1uWzddLHRbcis4XT1uWzhdLHRbcis5XT1uWzldLHRbcisxMF09blsxMF0sdFtyKzExXT1uWzExXSx0W3IrMTJdPW5bMTJdLHRbcisxM109blsxM10sdFtyKzE0XT1uWzE0XSx0W3IrMTVdPW5bMTVdLHR9fTtNZS5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBTMz1uZXcgaixpaD1uZXcgTWUsbmZyPW5ldyBqKDAsMCwwKSxpZnI9bmV3IGooMSwxLDEpLGswPW5ldyBqLF9WPW5ldyBqLGtsPW5ldyBqLGd1ZT1uZXcgTWUsX3VlPW5ldyB5aSx0bT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPXRtLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQscj10aGlzLl9vcmRlcixuPSEwKXtsZXQgaT10LmVsZW1lbnRzLG89aVswXSxhPWlbNF0scz1pWzhdLGw9aVsxXSxjPWlbNV0sdT1pWzldLGg9aVsyXSxmPWlbNl0scD1pWzEwXTtzd2l0Y2gocil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFpvKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUscCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVpvKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihabyhmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1abyhoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWm8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMscCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWm8oYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIityKX1yZXR1cm4gdGhpcy5fb3JkZXI9cixuPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQscixuKXtyZXR1cm4gZ3VlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGd1ZSxyLG4pfXNldEZyb21WZWN0b3IzKHQscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LHIpfXJlb3JkZXIodCl7cmV0dXJuIF91ZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihfdWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdFszXSE9PXZvaWQgMCYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RtLnByb3RvdHlwZS5pc0V1bGVyPSEwO3RtLkRlZmF1bHRPcmRlcj0iWFlaIjt0bS5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBYMz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuKHRoaXMubWFzayZ0Lm1hc2spIT09MH1pc0VuYWJsZWQodCl7cmV0dXJuKHRoaXMubWFzayYoMTw8dHwwKSkhPT0wfX0sb2ZyPTAseXVlPW5ldyBqLE0zPW5ldyB5aSxxZD1uZXcgTWUseVY9bmV3IGosa1A9bmV3IGosYWZyPW5ldyBqLHNmcj1uZXcgeWksdnVlPW5ldyBqKDEsMCwwKSx4dWU9bmV3IGooMCwxLDApLGJ1ZT1uZXcgaigwLDAsMSksbGZyPXt0eXBlOiJhZGRlZCJ9LHd1ZT17dHlwZToicmVtb3ZlZCJ9LG9yPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm9mcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPW9yLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBqLHI9bmV3IHRtLG49bmV3IHlpLGk9bmV3IGooMSwxLDEpO2Z1bmN0aW9uIG8oKXtuLnNldEZyb21FdWxlcihyLCExKX1mdW5jdGlvbiBhKCl7ci5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9ci5fb25DaGFuZ2Uobyksbi5fb25DaGFuZ2UoYSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTWV9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGtpfX0pLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLm1hdHJpeFdvcmxkPW5ldyBNZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxyKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LHIpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShNMyksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LHIpe3JldHVybiBNMy5zZXRGcm9tQXhpc0FuZ2xlKHQsciksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHZ1ZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh4dWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYnVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LHIpe3JldHVybiB5dWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCh5dWUubXVsdGlwbHlTY2FsYXIocikpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXModnVlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHh1ZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhidWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHFkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LHIsbil7dC5pc1ZlY3RvcjM/eVYuY29weSh0KTp5Vi5zZXQodCxyLG4pO2xldCBpPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGtQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/cWQubG9va0F0KGtQLHlWLHRoaXMudXApOnFkLmxvb2tBdCh5VixrUCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHFkKSxpJiYocWQuZXh0cmFjdFJvdGF0aW9uKGkubWF0cml4V29ybGQpLE0zLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCByPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0aGlzLmFkZChhcmd1bWVudHNbcl0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnBhcmVudCE9PW51bGwmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQobGZyKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbbl0pO3JldHVybiB0aGlzfWxldCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpLHQuZGlzcGF0Y2hFdmVudCh3dWUpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IHI9dGhpcy5jaGlsZHJlblt0XTtyLnBhcmVudD1udWxsLHIuZGlzcGF0Y2hFdmVudCh3dWUpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpLHQucGFyZW50IT09bnVsbCYmKHQucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KHFkKSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQscil7aWYodGhpc1t0XT09PXIpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtsZXQgYT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxyKTtpZihhIT09dm9pZCAwKXJldHVybiBhfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHQsYWZyKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHNmcix0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCByPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KHJbOF0scls5XSxyWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCByPXRoaXMucGFyZW50O3IhPT1udWxsJiYodChyKSxyLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7bGV0IG49dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZuIT09bnVsbCYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkscj09PSEwKXtsZXQgaT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixuPXt9O3ImJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCBpPXt9O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoaS5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKGkucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBvKHMsbCl7cmV0dXJuIHNbbC51dWlkXT09PXZvaWQgMCYmKHNbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9pLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihpLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihpLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtpLmdlb21ldHJ5PW8odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBzPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihzIT09dm9pZCAwJiZzLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9cy5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107byh0LnNoYXBlcyxoKX1lbHNlIG8odC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IHM9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKXMucHVzaChvKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtpLm1hdGVyaWFsPXN9ZWxzZSBpLm1hdGVyaWFsPW8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7aS5jaGlsZHJlbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylpLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltzXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe2kuYW5pbWF0aW9ucz1bXTtmb3IobGV0IHM9MDtzPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7cysrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbc107aS5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsbCkpfX1pZihyKXtsZXQgcz1hKHQuZ2VvbWV0cmllcyksbD1hKHQubWF0ZXJpYWxzKSxjPWEodC50ZXh0dXJlcyksdT1hKHQuaW1hZ2VzKSxoPWEodC5zaGFwZXMpLGY9YSh0LnNrZWxldG9ucykscD1hKHQuYW5pbWF0aW9ucyk7cy5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1zKSxsLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKG4udGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKG4uaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihuLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9ZikscC5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1wKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIGEocyl7bGV0IGw9W107Zm9yKGxldCBjIGluIHMpe2xldCB1PXNbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LHI9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxyPT09ITApZm9yKGxldCBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe2xldCBpPXQuY2hpbGRyZW5bbl07dGhpcy5hZGQoaS5jbG9uZSgpKX1yZXR1cm4gdGhpc319O29yLkRlZmF1bHRVcD1uZXcgaigwLDEsMCk7b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7b3IucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIG9oPW5ldyBqLEdkPW5ldyBqLHR1dD1uZXcgaixXZD1uZXcgaixFMz1uZXcgaixUMz1uZXcgaixTdWU9bmV3IGosZXV0PW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosb2k9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3RoaXMuYT10LHRoaXMuYj1yLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxyLG4saSl7aS5zdWJWZWN0b3JzKG4sciksb2guc3ViVmVjdG9ycyh0LHIpLGkuY3Jvc3Mob2gpO2xldCBvPWkubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP2kubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOmkuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQscixuLGksbyl7b2guc3ViVmVjdG9ycyhpLHIpLEdkLnN1YlZlY3RvcnMobixyKSx0dXQuc3ViVmVjdG9ycyh0LHIpO2xldCBhPW9oLmRvdChvaCkscz1vaC5kb3QoR2QpLGw9b2guZG90KHR1dCksYz1HZC5kb3QoR2QpLHU9R2QuZG90KHR1dCksaD1hKmMtcypzO2lmKGg9PT0wKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLHA9KGMqbC1zKnUpKmYsZD0oYSp1LXMqbCkqZjtyZXR1cm4gby5zZXQoMS1wLWQsZCxwKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LHIsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksV2QueD49MCYmV2QueT49MCYmV2QueCtXZC55PD0xfXN0YXRpYyBnZXRVVih0LHIsbixpLG8sYSxzLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LHIsbixpLFdkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sV2QueCksbC5hZGRTY2FsZWRWZWN0b3IoYSxXZC55KSxsLmFkZFNjYWxlZFZlY3RvcihzLFdkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxyLG4saSl7cmV0dXJuIG9oLnN1YlZlY3RvcnMobixyKSxHZC5zdWJWZWN0b3JzKHQsciksb2guY3Jvc3MoR2QpLmRvdChpKTwwfXNldCh0LHIsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KHIpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbcl0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbaV0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBvaC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLEdkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksb2guY3Jvc3MoR2QpLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIG9pLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LHIpe3JldHVybiBvaS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyKX1nZXRVVih0LHIsbixpLG8pe3JldHVybiBvaS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLHIsbixpLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIG9pLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gb2kuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7bGV0IG49dGhpcy5hLGk9dGhpcy5iLG89dGhpcy5jLGEscztFMy5zdWJWZWN0b3JzKGksbiksVDMuc3ViVmVjdG9ycyhvLG4pLGV1dC5zdWJWZWN0b3JzKHQsbik7bGV0IGw9RTMuZG90KGV1dCksYz1UMy5kb3QoZXV0KTtpZihsPD0wJiZjPD0wKXJldHVybiByLmNvcHkobik7cnV0LnN1YlZlY3RvcnModCxpKTtsZXQgdT1FMy5kb3QocnV0KSxoPVQzLmRvdChydXQpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIHIuY29weShpKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIGE9bC8obC11KSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpO251dC5zdWJWZWN0b3JzKHQsbyk7bGV0IHA9RTMuZG90KG51dCksZD1UMy5kb3QobnV0KTtpZihkPj0wJiZwPD1kKXJldHVybiByLmNvcHkobyk7bGV0IGc9cCpjLWwqZDtpZihnPD0wJiZjPj0wJiZkPD0wKXJldHVybiBzPWMvKGMtZCksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihUMyxzKTtsZXQgXz11KmQtcCpoO2lmKF88PTAmJmgtdT49MCYmcC1kPj0wKXJldHVybiBTdWUuc3ViVmVjdG9ycyhvLGkpLHM9KGgtdSkvKGgtdSsocC1kKSksci5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihTdWUscyk7bGV0IHk9MS8oXytnK2YpO3JldHVybiBhPWcqeSxzPWYqeSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpLmFkZFNjYWxlZFZlY3RvcihUMyxzKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxjZnI9MCxxaT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpjZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPVYzLHRoaXMuc2lkZT1JMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9UGh0LHRoaXMuYmxlbmREc3Q9SWh0LHRoaXMuYmxlbmRFcXVhdGlvbj1NMSx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPWlVLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9a2ZlLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW5VLHRoaXMuc3RlbmNpbFpGYWlsPW5VLHRoaXMuc3RlbmNpbFpQYXNzPW5VLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCByIGluIHQpe2xldCBuPXRbcl07aWYobj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrcisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKHI9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PUFodDtjb250aW51ZX1sZXQgaT10aGlzW3JdO2lmKGk9PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrcisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpO2NvbnRpbnVlfWkmJmkuaXNDb2xvcj9pLnNldChuKTppJiZpLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/aS5jb3B5KG4pOnRoaXNbcl09bn19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtyJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07bi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx0aGlzLnJvdWdobmVzcyE9PXZvaWQgMCYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx0aGlzLm1ldGFsbmVzcyE9PXZvaWQgMCYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuIT09dm9pZCAwJiYobi5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYobi5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdGhpcy5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKG4uc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiZ0aGlzLmVtaXNzaXZlSW50ZW5zaXR5IT09MSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYobi5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYobi5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdGhpcy5zaGluaW5lc3MhPT12b2lkIDAmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdGhpcy5jbGVhcmNvYXQhPT12b2lkIDAmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MhPT12b2lkIDAmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdGhpcy5jb21iaW5lIT09dm9pZCAwJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHRoaXMuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHRoaXMucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHRoaXMucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudGhpY2tuZXNzIT09dm9pZCAwJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdGhpcy5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdGhpcy5zaXplIT09dm9pZCAwJiYobi5zaXplPXRoaXMuc2l6ZSksdGhpcy5zaGFkb3dTaWRlIT09bnVsbCYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHRoaXMuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1WMyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09STEmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLHRoaXMudHJhbnNwYXJlbnQ9PT0hMCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmdGhpcy5yb3RhdGlvbiE9PTAmJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLHRoaXMucG9seWdvbk9mZnNldD09PSEwJiYobi5wb2x5Z29uT2Zmc2V0PSEwKSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IhPT0wJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMhPT0wJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiZ0aGlzLmxpbmV3aWR0aCE9PTEmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdGhpcy5kYXNoU2l6ZSE9PXZvaWQgMCYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdGhpcy5nYXBTaXplIT09dm9pZCAwJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdGhpcy5zY2FsZSE9PXZvaWQgMCYmKG4uc2NhbGU9dGhpcy5zY2FsZSksdGhpcy5kaXRoZXJpbmc9PT0hMCYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLHRoaXMuYWxwaGFUb0NvdmVyYWdlPT09ITAmJihuLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9PT0hMCYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSx0aGlzLndpcmVmcmFtZT09PSEwJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksdGhpcy53aXJlZnJhbWVMaW5lY2FwIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLHRoaXMud2lyZWZyYW1lTGluZWpvaW4hPT0icm91bmQiJiYobi53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSx0aGlzLmZsYXRTaGFkaW5nPT09ITAmJihuLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLHRoaXMudmlzaWJsZT09PSExJiYobi52aXNpYmxlPSExKSx0aGlzLnRvbmVNYXBwZWQ9PT0hMSYmKG4udG9uZU1hcHBlZD0hMSksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtmdW5jdGlvbiBpKG8pe2xldCBhPVtdO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1vW3NdO2RlbGV0ZSBsLm1ldGFkYXRhLGEucHVzaChsKX1yZXR1cm4gYX1pZihyKXtsZXQgbz1pKHQudGV4dHVyZXMpLGE9aSh0LmltYWdlcyk7by5sZW5ndGg+MCYmKG4udGV4dHVyZXM9byksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpfXJldHVybiBufWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCByPXQuY2xpcHBpbmdQbGFuZXMsbj1udWxsO2lmKHIhPT1udWxsKXtsZXQgaT1yLmxlbmd0aDtuPW5ldyBBcnJheShpKTtmb3IobGV0IG89MDtvIT09aTsrK28pbltvXT1yW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07cWkucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtzaC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgSW49bmV3IGosdlY9bmV3IEx0LEplPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLm5vcm1hbGl6ZWQ9bj09PSEwLHRoaXMudXNhZ2U9VzMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLml0ZW1TaXplLG4qPXIuaXRlbVNpemU7Zm9yKGxldCBpPTAsbz10aGlzLml0ZW1TaXplO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgbmUpLHJbbisrXT1hLnIscltuKytdPWEuZyxyW24rK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgTHQpLHJbbisrXT1hLngscltuKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGopLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgZW4pLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56LHJbbisrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKXZWLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxyKSx2Vi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShyLHZWLngsdlYueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksSW4uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKHIsSW4ueCxJbi55LEluLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi54PXRoaXMuZ2V0WChyKSxJbi55PXRoaXMuZ2V0WShyKSxJbi56PXRoaXMuZ2V0WihyKSxJbi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspSW4ueD10aGlzLmdldFgociksSW4ueT10aGlzLmdldFkociksSW4uej10aGlzLmdldFoociksSW4uYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUluLng9dGhpcy5nZXRYKHIpLEluLnk9dGhpcy5nZXRZKHIpLEluLno9dGhpcy5nZXRaKHIpLEluLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihyLEluLngsSW4ueSxJbi56KTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxyKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPXIsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPXIsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPXIsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPXIsdGhpc31zZXRYWSh0LHIsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQscixuLGksbyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1XMyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O0plLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgY1U9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDhBcnJheSh0KSxyLG4pfX0sdVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQ4QXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyLG4pfX0sZlU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDE2QXJyYXkodCkscixuKX19LCQzPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX0scFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCkscixuKX19LEszPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLHIsbil9fTtkVS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciB4ZT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLHIsbil9fSxtVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQ2NEFycmF5KHQpLHIsbil9fSx1ZnI9MCxYYz1uZXcgTWUsaXV0PW5ldyBvcixDMz1uZXcgaixSbD1uZXcgdGEsUlA9bmV3IHRhLExvPW5ldyBqLFBlPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnVmcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KERmZSh0KT9LMzokMykodCwxKTp0aGlzLmluZGV4PXQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPXIsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XSE9PXZvaWQgMH1hZGRHcm91cCh0LHIsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OnIsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxyKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PXJ9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtyIT09dm9pZCAwJiYoci5hcHBseU1hdHJpeDQodCksci5uZWVkc1VwZGF0ZT0hMCk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZihuIT09dm9pZCAwKXtsZXQgbz1uZXcga2koKS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChvKSxuLm5lZWRzVXBkYXRlPSEwfWxldCBpPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBpIT09dm9pZCAwJiYoaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksaS5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWSh0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVaKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXRyYW5zbGF0ZSh0LHIsbil7cmV0dXJuIFhjLm1ha2VUcmFuc2xhdGlvbih0LHIsbiksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9c2NhbGUodCxyLG4pe3JldHVybiBYYy5tYWtlU2NhbGUodCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gaXV0Lmxvb2tBdCh0KSxpdXQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaXV0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihDMykubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoQzMueCxDMy55LEMzLnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPXRbbl07ci5wdXNoKG8ueCxvLnksby56fHwwKX1yZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXt0aGlzLmJvdW5kaW5nQm94PT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHRhKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgaigtMS8wLC0xLzAsLTEvMCksbmV3IGooMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO1JsLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixSbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxSbC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWF4KSl9fWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXt0aGlzLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IFpmKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaiwxLzApO3JldHVybn1pZih0KXtsZXQgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dO1JQLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyhSbC5taW4sUlAubWluKSxSbC5leHBhbmRCeVBvaW50KExvKSxMby5hZGRWZWN0b3JzKFJsLm1heCxSUC5tYXgpLFJsLmV4cGFuZEJ5UG9pbnQoTG8pKTooUmwuZXhwYW5kQnlQb2ludChSUC5taW4pLFJsLmV4cGFuZEJ5UG9pbnQoUlAubWF4KSl9UmwuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSk7aWYocilmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9cy5jb3VudDtjPHU7YysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoQzMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLExvLmFkZChDMykpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KGkpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmF0dHJpYnV0ZXM7aWYodD09PW51bGx8fHIucG9zaXRpb249PT12b2lkIDB8fHIubm9ybWFsPT09dm9pZCAwfHxyLnV2PT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtyZXR1cm59bGV0IG49dC5hcnJheSxpPXIucG9zaXRpb24uYXJyYXksbz1yLm5vcm1hbC5hcnJheSxhPXIudXYuYXJyYXkscz1pLmxlbmd0aC8zO3IudGFuZ2VudD09PXZvaWQgMCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KDQqcyksNCkpO2xldCBsPXIudGFuZ2VudC5hcnJheSxjPVtdLHU9W107Zm9yKGxldCBCPTA7QjxzO0IrKyljW0JdPW5ldyBqLHVbQl09bmV3IGo7bGV0IGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IGoseD1uZXcgajtmdW5jdGlvbiBiKEIsSSxMKXtoLmZyb21BcnJheShpLEIqMyksZi5mcm9tQXJyYXkoaSxJKjMpLHAuZnJvbUFycmF5KGksTCozKSxkLmZyb21BcnJheShhLEIqMiksZy5mcm9tQXJyYXkoYSxJKjIpLF8uZnJvbUFycmF5KGEsTCoyKSxmLnN1YihoKSxwLnN1YihoKSxnLnN1YihkKSxfLnN1YihkKTtsZXQgUj0xLyhnLngqXy55LV8ueCpnLnkpOyFpc0Zpbml0ZShSKXx8KHkuY29weShmKS5tdWx0aXBseVNjYWxhcihfLnkpLmFkZFNjYWxlZFZlY3RvcihwLC1nLnkpLm11bHRpcGx5U2NhbGFyKFIpLHguY29weShwKS5tdWx0aXBseVNjYWxhcihnLngpLmFkZFNjYWxlZFZlY3RvcihmLC1fLngpLm11bHRpcGx5U2NhbGFyKFIpLGNbQl0uYWRkKHkpLGNbSV0uYWRkKHkpLGNbTF0uYWRkKHkpLHVbQl0uYWRkKHgpLHVbSV0uYWRkKHgpLHVbTF0uYWRkKHgpKX1sZXQgUz10aGlzLmdyb3VwcztTLmxlbmd0aD09PTAmJihTPVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MyliKG5beiswXSxuW3orMV0sblt6KzJdKX1sZXQgQz1uZXcgaixQPW5ldyBqLGs9bmV3IGosTz1uZXcgajtmdW5jdGlvbiBEKEIpe2suZnJvbUFycmF5KG8sQiozKSxPLmNvcHkoayk7bGV0IEk9Y1tCXTtDLmNvcHkoSSksQy5zdWIoay5tdWx0aXBseVNjYWxhcihrLmRvdChJKSkpLm5vcm1hbGl6ZSgpLFAuY3Jvc3NWZWN0b3JzKE8sSSk7bGV0IFI9UC5kb3QodVtCXSk8MD8tMToxO2xbQio0XT1DLngsbFtCKjQrMV09Qy55LGxbQio0KzJdPUMueixsW0IqNCszXT1SfWZvcihsZXQgQj0wLEk9Uy5sZW5ndGg7QjxJOysrQil7bGV0IEw9U1tCXSxSPUwuc3RhcnQsRj1MLmNvdW50O2ZvcihsZXQgej1SLFU9UitGO3o8VTt6Kz0zKUQoblt6KzBdKSxEKG5beisxXSksRChuW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihyIT09dm9pZCAwKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYobj09PXZvaWQgMCluPW5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHIuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IGY9MCxwPW4uY291bnQ7ZjxwO2YrKyluLnNldFhZWihmLDAsMCwwKTtsZXQgaT1uZXcgaixvPW5ldyBqLGE9bmV3IGoscz1uZXcgaixsPW5ldyBqLGM9bmV3IGosdT1uZXcgaixoPW5ldyBqO2lmKHQpZm9yKGxldCBmPTAscD10LmNvdW50O2Y8cDtmKz0zKXtsZXQgZD10LmdldFgoZiswKSxnPXQuZ2V0WChmKzEpLF89dC5nZXRYKGYrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZCksby5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZyksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsXyksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUobixfKSxzLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxuLnNldFhZWihkLHMueCxzLnkscy56KSxuLnNldFhZWihnLGwueCxsLnksbC56KSxuLnNldFhZWihfLGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLHA9ci5jb3VudDtmPHA7Zis9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZisyKSx1LnN1YlZlY3RvcnMoYSxvKSxoLnN1YlZlY3RvcnMoaSxvKSx1LmNyb3NzKGgpLG4uc2V0WFlaKGYrMCx1LngsdS55LHUueiksbi5zZXRYWVooZisxLHUueCx1LnksdS56KSxuLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQscil7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59cj09PXZvaWQgMCYmKHI9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBpIGluIG4pe2lmKHQuYXR0cmlidXRlc1tpXT09PXZvaWQgMCljb250aW51ZTtsZXQgYT1uW2ldLmFycmF5LHM9dC5hdHRyaWJ1dGVzW2ldLGw9cy5hcnJheSxjPXMuaXRlbVNpemUqcix1PU1hdGgubWluKGwubGVuZ3RoLGEubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylhW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCByPTAsbj10LmNvdW50O3I8bjtyKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLExvLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKHIsTG8ueCxMby55LExvLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQocyxsKXtsZXQgYz1zLmFycmF5LHU9cy5pdGVtU2l6ZSxoPXMubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLHA9MCxkPTA7Zm9yKGxldCBnPTAsXz1sLmxlbmd0aDtnPF87ZysrKXtzLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/cD1sW2ddKnMuZGF0YS5zdHJpZGUrcy5vZmZzZXQ6cD1sW2ddKnU7Zm9yKGxldCB5PTA7eTx1O3krKylmW2QrK109Y1twKytdfXJldHVybiBuZXcgSmUoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IHI9bmV3IFBlLG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXSxjPXQobCxuKTtyLnNldEF0dHJpYnV0ZShzLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1bXSxjPW9bc107Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLHA9dChmLG4pO2wucHVzaChwKX1yLm1vcnBoQXR0cmlidXRlc1tzXT1sfXIubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ci5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gcn10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgcj10aGlzLmluZGV4O3IhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOnIuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLmFycmF5KX0pO2xldCBuPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gbil7bGV0IGM9bltsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCBpPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IHA9Y1toXTt1LnB1c2gocC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKGlbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gcyE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IHI9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgbj10LmluZGV4O24hPT1udWxsJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUocikpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gaSl7bGV0IHU9aVtjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUocikpfWxldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgdT1bXSxoPW9bY107Zm9yKGxldCBmPTAscD1oLmxlbmd0aDtmPHA7ZisrKXUucHVzaChoW2ZdLmNsb25lKHIpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PWEubGVuZ3RoO2M8dTtjKyspe2xldCBoPWFbY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O3MhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtQZS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTXVlPW5ldyBNZSxBMz1uZXcgSmYsb3V0PW5ldyBaZixSMD1uZXcgaixOMD1uZXcgaixEMD1uZXcgaixhdXQ9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaix4Vj1uZXcgaixiVj1uZXcgaix3Vj1uZXcgaixTVj1uZXcgTHQsTVY9bmV3IEx0LEVWPW5ldyBMdCxjdXQ9bmV3IGosVFY9bmV3IGosdGk9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBzaCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYoaT09PXZvaWQgMHx8KG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLG91dC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLG91dC5hcHBseU1hdHJpeDQobyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShvdXQpPT09ITEpfHwoTXVlLmNvcHkobykuaW52ZXJ0KCksQTMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE11ZSksbi5ib3VuZGluZ0JveCE9PW51bGwmJkEzLmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBhO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHM9bi5pbmRleCxsPW4uYXR0cmlidXRlcy5wb3NpdGlvbixjPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPW4uYXR0cmlidXRlcy51dixmPW4uYXR0cmlidXRlcy51djIscD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKHMhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKHMuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9cy5nZXRYKEMpLE89cy5nZXRYKEMrMSksRD1zLmdldFgoQysyKTthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4ocy5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9cy5nZXRYKHkpLFM9cy5nZXRYKHkrMSksQz1zLmdldFgoeSsyKTthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGc9MCxfPXAubGVuZ3RoO2c8XztnKyspe2xldCB5PXBbZ10seD1pW3kubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heCh5LnN0YXJ0LGQuc3RhcnQpLFM9TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbih5LnN0YXJ0K3kuY291bnQsZC5zdGFydCtkLmNvdW50KSk7Zm9yKGxldCBDPWIsUD1TO0M8UDtDKz0zKXtsZXQgaz1DLE89QysxLEQ9QysyO2E9Q1YodGhpcyx4LHQsQTMsbCxjLHUsaCxmLGssTyxEKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihDLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxyLnB1c2goYSkpfX1lbHNle2xldCBnPU1hdGgubWF4KDAsZC5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7Zm9yKGxldCB5PWcseD1fO3k8eDt5Kz0zKXtsZXQgYj15LFM9eSsxLEM9eSsyO2E9Q1YodGhpcyxpLHQsQTMsbCxjLHUsaCxmLGIsUyxDKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLHIucHVzaChhKSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O3RpLnByb3RvdHlwZS5pc01lc2g9ITA7ZnVuY3Rpb24gaGZyKGUsdCxyLG4saSxvLGEscyl7bGV0IGw7aWYodC5zaWRlPT09SWk/bD1uLmludGVyc2VjdFRyaWFuZ2xlKGEsbyxpLCEwLHMpOmw9bi5pbnRlcnNlY3RUcmlhbmdsZShpLG8sYSx0LnNpZGUhPT1MMSxzKSxsPT09bnVsbClyZXR1cm4gbnVsbDtUVi5jb3B5KHMpLFRWLmFwcGx5TWF0cml4NChlLm1hdHJpeFdvcmxkKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhUVik7cmV0dXJuIGM8ci5uZWFyfHxjPnIuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6VFYuY2xvbmUoKSxvYmplY3Q6ZX19ZnVuY3Rpb24gQ1YoZSx0LHIsbixpLG8sYSxzLGwsYyx1LGgpe1IwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxjKSxOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksdSksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGgpO2xldCBmPWUubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKG8mJmYpe3hWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKSx3Vi5zZXQoMCwwLDApO2ZvcihsZXQgZD0wLGc9by5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXSx5PW9bZF07XyE9PTAmJihhdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLHN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksbHV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxoKSxhPyh4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihzdXQsXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dCxfKSk6KHhWLmFkZFNjYWxlZFZlY3RvcihhdXQuc3ViKFIwKSxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihOMCksXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoRDApLF8pKSl9UjAuYWRkKHhWKSxOMC5hZGQoYlYpLEQwLmFkZCh3Vil9ZS5pc1NraW5uZWRNZXNoJiYoZS5ib25lVHJhbnNmb3JtKGMsUjApLGUuYm9uZVRyYW5zZm9ybSh1LE4wKSxlLmJvbmVUcmFuc2Zvcm0oaCxEMCkpO2xldCBwPWhmcihlLHQscixuLFIwLE4wLEQwLGN1dCk7aWYocCl7cyYmKFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksRVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGgpLHAudXY9b2kuZ2V0VVYoY3V0LFIwLE4wLEQwLFNWLE1WLEVWLG5ldyBMdCkpLGwmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1vaS5nZXRVVihjdXQsUjAsTjAsRDAsU1YsTVYsRVYsbmV3IEx0KSk7bGV0IGQ9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgaixtYXRlcmlhbEluZGV4OjB9O29pLmdldE5vcm1hbChSMCxOMCxEMCxkLm5vcm1hbCkscC5mYWNlPWR9cmV0dXJuIHB9dmFyIFFmPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO2k9TWF0aC5mbG9vcihpKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxwPTA7ZCgieiIsInkiLCJ4IiwtMSwtMSxuLHIsdCxhLG8sMCksZCgieiIsInkiLCJ4IiwxLC0xLG4sciwtdCxhLG8sMSksZCgieCIsInoiLCJ5IiwxLDEsdCxuLHIsaSxhLDIpLGQoIngiLCJ6IiwieSIsMSwtMSx0LG4sLXIsaSxhLDMpLGQoIngiLCJ5IiwieiIsMSwtMSx0LHIsbixpLG8sNCksZCgieCIsInkiLCJ6IiwtMSwtMSx0LHIsLW4saSxvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGgsMikpO2Z1bmN0aW9uIGQoZyxfLHkseCxiLFMsQyxQLGssTyxEKXtsZXQgQj1TL2ssST1DL08sTD1TLzIsUj1DLzIsRj1QLzIsej1rKzEsVT1PKzEsVz0wLFo9MCxydD1uZXcgajtmb3IobGV0IG90PTA7b3Q8VTtvdCsrKXtsZXQgc3Q9b3QqSS1SO2ZvcihsZXQgU3Q9MDtTdDx6O1N0Kyspe2xldCBidD1TdCpCLUw7cnRbZ109YnQqeCxydFtfXT1zdCpiLHJ0W3ldPUYsYy5wdXNoKHJ0LngscnQueSxydC56KSxydFtnXT0wLHJ0W19dPTAscnRbeV09UD4wPzE6LTEsdS5wdXNoKHJ0LngscnQueSxydC56KSxoLnB1c2goU3QvayksaC5wdXNoKDEtb3QvTyksVys9MX19Zm9yKGxldCBvdD0wO290PE87b3QrKylmb3IobGV0IHN0PTA7c3Q8aztzdCsrKXtsZXQgU3Q9ZitzdCt6Km90LGJ0PWYrc3Qreioob3QrMSksTXQ9Zisoc3QrMSkreioob3QrMSksbHQ9Zisoc3QrMSkreipvdDtsLnB1c2goU3QsYnQsbHQpLGwucHVzaChidCxNdCxsdCksWis9Nn1zLmFkZEdyb3VwKHAsWixEKSxwKz1aLGYrPVd9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFFmKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gWjMoZSl7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe3Rbcl09e307Zm9yKGxldCBuIGluIGVbcl0pe2xldCBpPWVbcl1bbl07aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP3Rbcl1bbl09aS5jbG9uZSgpOkFycmF5LmlzQXJyYXkoaSk/dFtyXVtuXT1pLnNsaWNlKCk6dFtyXVtuXT1pfX1yZXR1cm4gdH1mdW5jdGlvbiBUYShlKXtsZXQgdD17fTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49WjMoZVtyXSk7Zm9yKGxldCBpIGluIG4pdFtpXT1uW2ldfXJldHVybiB0fXZhciB6ZmU9e2Nsb25lOlozLG1lcmdlOlRhfSxmZnI9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAscGZyPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsbGg9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPWZmcix0aGlzLmZyYWdtZW50U2hhZGVyPXBmcix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1aMyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7ci5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLHIudW5pZm9ybXM9e307Zm9yKGxldCBpIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbaV0udmFsdWU7YSYmYS5pc1RleHR1cmU/ci51bmlmb3Jtc1tpXT17dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3IudW5pZm9ybXNbaV09e3R5cGU6ImMiLHZhbHVlOmEuZ2V0SGV4KCl9OmEmJmEuaXNWZWN0b3IyP3IudW5pZm9ybXNbaV09e3R5cGU6InYyIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjM/ci51bmlmb3Jtc1tpXT17dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2NCIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXgzP3IudW5pZm9ybXNbaV09e3R5cGU6Im0zIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc01hdHJpeDQ/ci51bmlmb3Jtc1tpXT17dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTpyLnVuaWZvcm1zW2ldPXt2YWx1ZTphfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoci5kZWZpbmVzPXRoaXMuZGVmaW5lcyksci52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsci5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBuPXt9O2ZvcihsZXQgaSBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW2ldPT09ITAmJihuW2ldPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmV4dGVuc2lvbnM9bikscn19O2xoLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBSMT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgTWUsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgTWV9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtcls4XSwtcls5XSwtclsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxyKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07UjEucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBVaT1jbGFzcyBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKHQ9NTAscj0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9cix0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgcj0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVFQKjIqTWF0aC5hdGFuKHIpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oUDEqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBRUCoyKk1hdGguYXRhbihNYXRoLnRhbihQMSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLmFzcGVjdD10L3IsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PXIsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIscj10Kk1hdGgudGFuKFAxKi41KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKnIsaT10aGlzLmFzcGVjdCpuLG89LS41KmksYT10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPWEuZnVsbFdpZHRoLGM9YS5mdWxsSGVpZ2h0O28rPWEub2Zmc2V0WCppL2wsci09YS5vZmZzZXRZKm4vYyxpKj1hLndpZHRoL2wsbio9YS5oZWlnaHQvY31sZXQgcz10aGlzLmZpbG1PZmZzZXQ7cyE9PTAmJihvKz10KnMvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8raSxyLHItbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5mb3Y9dGhpcy5mb3Ysci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHIub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsci5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksci5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLHIub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LHJ9fTtVaS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgUDM9OTAsSTM9MSxKMz1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9bjtsZXQgaT1uZXcgVWkoUDMsSTMsdCxyKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBqKDEsMCwwKSksdGhpcy5hZGQoaSk7bGV0IG89bmV3IFVpKFAzLEkzLHQscik7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaigtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgVWkoUDMsSTMsdCxyKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsMSksYS5sb29rQXQobmV3IGooMCwxLDApKSx0aGlzLmFkZChhKTtsZXQgcz1uZXcgVWkoUDMsSTMsdCxyKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBqKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBVaShQMyxJMyx0LHIpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGooMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgVWkoUDMsSTMsdCxyKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBqKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LHIpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtpLG8sYSxzLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPW4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChuLDApLHQucmVuZGVyKHIsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwxKSx0LnJlbmRlcihyLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMiksdC5yZW5kZXIocixhKSx0LnNldFJlbmRlclRhcmdldChuLDMpLHQucmVuZGVyKHIscyksdC5zZXRSZW5kZXJUYXJnZXQobiw0KSx0LnJlbmRlcihyLGwpLG4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChuLDUpLHQucmVuZGVyKHIsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsbi50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxIMD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLHI9ciE9PXZvaWQgMD9yOm54LHN1cGVyKHQscixuLGksbyxhLHMsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07SDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIFEzPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe051bWJlci5pc0ludGVnZXIocikmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLHI9biksc3VwZXIodCx0LHIpLHI9cnx8e30sdGhpcy50ZXh0dXJlPW5ldyBIMCh2b2lkIDAsci5tYXBwaW5nLHIud3JhcFMsci53cmFwVCxyLm1hZ0ZpbHRlcixyLm1pbkZpbHRlcixyLmZvcm1hdCxyLnR5cGUsci5hbmlzb3Ryb3B5LHIuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9yLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyIT09dm9pZCAwP3IubWluRmlsdGVyOmlpfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQscil7dGhpcy50ZXh0dXJlLnR5cGU9ci50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UW8sdGhpcy50ZXh0dXJlLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ci5tYWdGaWx0ZXI7bGV0IG49e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0saT1uZXcgUWYoNSw1LDUpLG89bmV3IGxoKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpaMyhuLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6bi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6bi5mcmFnbWVudFNoYWRlcixzaWRlOklpLGJsZW5kaW5nOiRkfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9cjtsZXQgYT1uZXcgdGkoaSxvKSxzPXIubWluRmlsdGVyO3JldHVybiByLm1pbkZpbHRlcj09PW94JiYoci5taW5GaWx0ZXI9aWkpLG5ldyBKMygxLDEwLHRoaXMpLnVwZGF0ZSh0LGEpLHIubWluRmlsdGVyPXMsYS5nZW9tZXRyeS5kaXNwb3NlKCksYS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LHIsbixpKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgYT0wO2E8NjthKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxhKSx0LmNsZWFyKHIsbixpKTt0LnNldFJlbmRlclRhcmdldChvKX19O1EzLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgdXV0PW5ldyBqLGRmcj1uZXcgaixtZnI9bmV3IGtpLCRjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMSwwLDApLHI9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0Q29tcG9uZW50cyh0LHIsbixpKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQscixuKSx0aGlzLmNvbnN0YW50PWksdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LXIuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LHIsbil7bGV0IGk9dXV0LnN1YlZlY3RvcnMobixyKS5jcm9zcyhkZnIuc3ViVmVjdG9ycyh0LHIpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxyKXtsZXQgbj10LmRlbHRhKHV1dCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoaT09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9yLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9pO3JldHVybiBvPDB8fG8+MT9udWxsOnIuY29weShuKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IHI9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIHI8MCYmbj4wfHxuPDAmJnI+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxyKXtsZXQgbj1yfHxtZnIuZ2V0Tm9ybWFsTWF0cml4KHQpLGk9dGhpcy5jb3BsYW5hclBvaW50KHV1dCkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1pLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTskYy5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgTDM9bmV3IFpmLEFWPW5ldyBqLE4xPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRjLHI9bmV3ICRjLG49bmV3ICRjLGk9bmV3ICRjLG89bmV3ICRjLGE9bmV3ICRjKXt0aGlzLnBsYW5lcz1bdCxyLG4saSxvLGFdfXNldCh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkociksc1syXS5jb3B5KG4pLHNbM10uY29weShpKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXJbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxvPW5bMV0sYT1uWzJdLHM9blszXSxsPW5bNF0sYz1uWzVdLHU9bls2XSxoPW5bN10sZj1uWzhdLHA9bls5XSxkPW5bMTBdLGc9blsxMV0sXz1uWzEyXSx5PW5bMTNdLHg9blsxNF0sYj1uWzE1XTtyZXR1cm4gclswXS5zZXRDb21wb25lbnRzKHMtaSxoLWwsZy1mLGItXykubm9ybWFsaXplKCksclsxXS5zZXRDb21wb25lbnRzKHMraSxoK2wsZytmLGIrXykubm9ybWFsaXplKCksclsyXS5zZXRDb21wb25lbnRzKHMrbyxoK2MsZytwLGIreSkubm9ybWFsaXplKCksclszXS5zZXRDb21wb25lbnRzKHMtbyxoLWMsZy1wLGIteSkubm9ybWFsaXplKCkscls0XS5zZXRDb21wb25lbnRzKHMtYSxoLXUsZy1kLGIteCkubm9ybWFsaXplKCkscls1XS5zZXRDb21wb25lbnRzKHMrYSxoK3UsZytkLGIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCByPXQuZ2VvbWV0cnk7cmV0dXJuIHIuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEwzLmNvcHkoci5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShMMyl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gTDMuY2VudGVyLnNldCgwLDAsMCksTDMucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEwzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKHJbb10uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtsZXQgaT1yW25dO2lmKEFWLng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxBVi55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksQVYuej1pLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LGkuZGlzdGFuY2VUb1BvaW50KEFWKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihyW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2Z1bmN0aW9uIEZmZSgpe2xldCBlPW51bGwsdD0hMSxyPW51bGwsbj1udWxsO2Z1bmN0aW9uIGkobyxhKXtyKG8sYSksbj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJnIhPT1udWxsJiYobj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe2UuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihvKXtyPW99LHNldENvbnRleHQ6ZnVuY3Rpb24obyl7ZT1vfX19ZnVuY3Rpb24gZ2ZyKGUsdCl7bGV0IHI9dC5pc1dlYkdMMixuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxwPWUuY3JlYXRlQnVmZmVyKCk7ZS5iaW5kQnVmZmVyKHUscCksZS5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZD01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Q9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/cj9kPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmQ9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9kPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Q9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9kPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9kPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZD01MTIxKSx7YnVmZmVyOnAsdHlwZTpkLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBvKGMsdSxoKXtsZXQgZj11LmFycmF5LHA9dS51cGRhdGVSYW5nZTtlLmJpbmRCdWZmZXIoaCxjKSxwLmNvdW50PT09LTE/ZS5idWZmZXJTdWJEYXRhKGgsMCxmKToocj9lLmJ1ZmZlclN1YkRhdGEoaCxwLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYscC5vZmZzZXQscC5jb3VudCk6ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KHAub2Zmc2V0LHAub2Zmc2V0K3AuY291bnQpKSxwLmNvdW50PS0xKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksbi5nZXQoYyl9ZnVuY3Rpb24gcyhjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9bi5nZXQoYyk7dSYmKGUuZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxuLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9bi5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmbi5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1uLmdldChjKTtoPT09dm9pZCAwP24uc2V0KGMsaShjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYobyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6YSxyZW1vdmU6cyx1cGRhdGU6bH19dmFyIFYwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtsZXQgbz10LzIsYT1yLzIscz1NYXRoLmZsb29yKG4pLGw9TWF0aC5mbG9vcihpKSxjPXMrMSx1PWwrMSxoPXQvcyxmPXIvbCxwPVtdLGQ9W10sZz1bXSxfPVtdO2ZvcihsZXQgeT0wO3k8dTt5Kyspe2xldCB4PXkqZi1hO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBTPWIqaC1vO2QucHVzaChTLC14LDApLGcucHVzaCgwLDAsMSksXy5wdXNoKGIvcyksXy5wdXNoKDEteS9sKX19Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PHM7eCsrKXtsZXQgYj14K2MqeSxTPXgrYyooeSsxKSxDPXgrMStjKih5KzEpLFA9eCsxK2MqeTtwLnB1c2goYixTLFApLHAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjAodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfZnI9YCNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7CiNlbmRpZmAseWZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx2ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCx4ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCgl1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsKI2VuZGlmYCxiZnI9YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCx3ZnI9YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxTZnI9InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsTWZyPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsRWZyPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxUZnI9YCNpZmRlZiBVU0VfQlVNUE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDsKCXVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlOwoJdmVjMiBkSGR4eV9md2QoKSB7CgkJdmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApOwoJCXZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTsKCQlmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7CgkJZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7CgkJZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7CgkJcmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7Cgl9Cgl2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2TiA9IHN1cmZfbm9ybTsKCQl2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7CgkJdmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApOwoJCWZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uOwoJCXZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApOwoJCXJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTsKCX0KI2VuZGlmYCxDZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxBZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxQZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247CiNlbmRpZmAsSWZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLExmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsa2ZyPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZhcnlpbmcgdmVjNCB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLFJmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLE5mcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsRGZyPWAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2CiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjYKI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwNwojZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzUKI2RlZmluZSBFUFNJTE9OIDFlLTYKI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApICkKZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfQpmbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH0KZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfQpmbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH0KZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH0KaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHsKCWNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MzsKCWhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApOwoJcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7Cn0KI2lmZGVmIEhJR0hfUFJFQ0lTSU9OCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfQojZWxzZQoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgewoJCWZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7CgkJcmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50OwoJfQojZW5kaWYKc3RydWN0IEluY2lkZW50TGlnaHQgewoJdmVjMyBjb2xvcjsKCXZlYzMgZGlyZWN0aW9uOwoJYm9vbCB2aXNpYmxlOwp9OwpzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQgewoJdmVjMyBkaXJlY3REaWZmdXNlOwoJdmVjMyBkaXJlY3RTcGVjdWxhcjsKCXZlYzMgaW5kaXJlY3REaWZmdXNlOwoJdmVjMyBpbmRpcmVjdFNwZWN1bGFyOwp9OwpzdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7Cgl2ZWMzIHBvc2l0aW9uOwoJdmVjMyBub3JtYWw7Cgl2ZWMzIHZpZXdEaXI7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCn07CnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTsKfQp2ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApOwp9Cm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkgewoJbWF0MyB0bXA7Cgl0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTsKCXRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApOwoJdG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7CglyZXR1cm4gdG1wOwp9CmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7Cgl2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7CglyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTsKfQpib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHsKCXJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDsKfQp2ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkgewoJZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7CglmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7CglyZXR1cm4gdmVjMiggdSwgdiApOwp9YCxPZnI9YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsemZyPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxGZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzOwojZW5kaWZgLEJmcj1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsSGZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxWZnI9YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwOwojZW5kaWZgLFVmcj0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixxZnI9YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLEdmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2ZWMzIGNhbWVyYVRvRnJhZzsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApOwoJCX0KCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApOwoJCSNlbHNlCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2Vsc2UKCQl2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkUKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTsKCSNlbHNlCgkJdmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApOwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREICkKCQlvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7CgkjZW5kaWYKI2VuZGlmYCxXZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsWWZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLGpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKI2VuZGlmYCxYZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCwkZnI9YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxLZnI9YCNpZmRlZiBVU0VfRk9HCgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKI2VuZGlmYCxaZnI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLEpmcj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxRZnI9YCNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwOwojZW5kaWYKdmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkgewoJZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTsKCXZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7CgkjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgkJcmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApOwoJI2Vsc2UKCQlyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApOwoJI2VuZGlmCn1gLHRwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLGVwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHJwcj1gdmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7Ckdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7Ckdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5OwpiYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7CmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKdkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKdkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApOwoJdkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKZmxvYXQgZG90Tkw7CnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwp2SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwp2SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fRElSX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCXZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmYCxucHI9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsaXByPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLG9wcj1gVG9vbk1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO2AsYXByPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLHNwcj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGxwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhclNoaW5pbmVzczsKCWZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7Cn07CnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfQmxpbm5QaG9uZwojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcKI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApCSgwKWAsY3ByPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCx1cHI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxocHI9YApHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCglnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwojaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglQb2ludExpZ2h0IHBvaW50TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdOwoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTICkKCQlwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglTcG90TGlnaHQgc3BvdExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApCgkJc3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTICkKCQlkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApCglSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHsKCQlyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTsKCQlSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCXZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCWlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApCgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQkJaXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCgl2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7CiNlbmRpZmAsZnByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAscHByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAsZHByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCglnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7CiNlbmRpZmAsbXByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLGdwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX3ByPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53OwoJCXZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApOwoJI2Vsc2UKCQlpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHsKCQkJZ2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wOwoJCQlnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7CgkJfQoJI2VuZGlmCiNlbmRpZmAseXByPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLHZwcj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCx4cHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5OwojZW5kaWYKI2lmZGVmIFVTRV9NQVAKCWRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZzsKI2VuZGlmYCxicHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx3cHI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxTcHI9YCNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7CiNlbmRpZmAsTXByPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLEVwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsVHByPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJZm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkgewoJCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2Vsc2UKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2VuZGlmCgkJfQoJI2Vsc2UKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxDcHI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxBcHI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsUHByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZhcnlpbmcgdmVjMyB2VGFuZ2VudDsKCQl2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLElwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxMcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLGtwcj1gI2lmZGVmIFVTRV9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTsKI2VuZGlmCiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CiNlbmRpZgojaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKQoJdmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7CgkJdmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTsKCQl2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApOwoJCXZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7CgkJdmVjMyBOID0gc3VyZl9ub3JtOwoJCXZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7CgkJdmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTsKCQl2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54OwoJCXZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7CgkJZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTsKCQlmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTsKCX0KI2VuZGlmYCxScHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLE5wcj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxEcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlOwojZW5kaWZgLE9wcj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLHpwcj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxGcHI9YCNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBCglnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hOwojZW5kaWZgLEJwcj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLEhwcj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFZwcj1gI2lmZGVmIERJVEhFUklORwoJdmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7CgkJZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApOwoJCXZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7CgkJZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTsKCQlyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCOwoJfQojZW5kaWZgLFVwcj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLHFwcj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxHcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCglmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkgewoJCXJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApOwoJfQoJdmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7CgkJcmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApOwoJfQoJZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7CgkJZmxvYXQgb2NjbHVzaW9uID0gMS4wOwoJCXZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7CgkJZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTsKCQlpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkgewoJCQlmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7CgkJCWZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7CgkJCWZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7CQkJc29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7CQkJb2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7CgkJfQoJCXJldHVybiBvY2NsdXNpb247Cgl9CglmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkgewoJCWZsb2F0IHNoYWRvdyA9IDEuMDsKCQlzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudzsKCQlzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7CgkJYnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApOwoJCWJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTsKCQlidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7CgkJYm9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTsKCQlpZiAoIGZydXN0dW1UZXN0ICkgewoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgyID0gZHgwIC8gMi4wOwoJCQlmbG9hdCBkeTIgPSBkeTAgLyAyLjA7CgkJCWZsb2F0IGR4MyA9IGR4MSAvIDIuMDsKCQkJZmxvYXQgZHkzID0gZHkxIC8gMi4wOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKQoJCQkpICogKCAxLjAgLyAxNy4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHggPSB0ZXhlbFNpemUueDsKCQkJZmxvYXQgZHkgPSB0ZXhlbFNpemUueTsKCQkJdmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5OwoJCQl2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7CgkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBmLnkgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQlzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZWxzZQoJCQlzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2VuZGlmCgkJfQoJCXJldHVybiBzaGFkb3c7Cgl9Cgl2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7CgkJdmVjMyBhYnNWID0gYWJzKCB2ICk7CgkJZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7CgkJYWJzViAqPSBzY2FsZVRvQ3ViZTsKCQl2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7CgkJdmVjMiBwbGFuYXIgPSB2Lnh5OwoJCWZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7CgkJZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsOwoJCWlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHsKCQkJaWYgKCB2LnogPiAwLjAgKQoJCQkJcGxhbmFyLnggPSA0LjAgLSB2Lng7CgkJfSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTsKCQkJcGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YOwoJCX0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7CgkJCXBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7CgkJCXBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7CgkJfQoJCXJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTsKCX0KCWZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkgewoJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7CgkJdmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7CgkJZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTsJCWRwICs9IHNoYWRvd0JpYXM7CgkJdmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQl2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7CgkJCXJldHVybiAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLFdwcj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxZcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCxqcHI9YGZsb2F0IGdldFNoYWRvd01hc2soKSB7CglmbG9hdCBzaGFkb3cgPSAxLjA7CgkjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjZW5kaWYKCXJldHVybiBzaGFkb3c7Cn1gLFhwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsJHByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxLcHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7Cgl2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTsKCXNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54OwoJc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7Cglza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejsKCXNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53OwoJdHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejsKI2VuZGlmYCxacHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsSnByPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLFFwcj1gI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7CiNlbmRpZmAsdGRyPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLGVkcj1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHJkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCWZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wOwoJZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uOwoJZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzOwoJI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVAKCQl0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQCgkJdGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nOwoJI2VuZGlmCgl2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uOwoJdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApOwoJdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oCgkJbiwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLAoJCXBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLAoJCWF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTsKCXRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKCXRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApOwojZW5kaWZgLG5kcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxpZHI9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxvZHI9YCNpZmRlZiBVU0VfVVYKCSNpZmRlZiBVVlNfVkVSVEVYX09OTFkKCQl2ZWMyIHZVdjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMyIHZVdjsKCSNlbmRpZgoJdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwojZW5kaWZgLGFkcj1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCxzZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsbGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCWF0dHJpYnV0ZSB2ZWMyIHV2MjsKCXZhcnlpbmcgdmVjMiB2VXYyOwoJdW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTsKI2VuZGlmYCxjZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCx1ZHI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAsaGRyPWB2YXJ5aW5nIHZlYzIgdlV2Owp1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CnZvaWQgbWFpbigpIHsKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApOwp9YCxmZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAscGRyPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCxkZHI9YCNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJdmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CglnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjsKCWdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxtZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsZ2RyPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfZHI9YCNkZWZpbmUgRElTVEFOQ0UKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6Owp9YCx5ZHI9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLHZkcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLHhkcj1gdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7Cgl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CglnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGJkcj1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsd2RyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxTZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE1kcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxFZHI9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxUZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250OwoJI2VuZGlmCgkjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250OwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpOwoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLENkcj1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxBZHI9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxQZHI9YCNkZWZpbmUgTk9STUFMCiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLElkcj1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsTGRyPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLGtkcj1gI2RlZmluZSBQSE9ORwp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIHZlYzMgc3BlY3VsYXI7CnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLFJkcj1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsTmRyPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsRGRyPWAjZGVmaW5lIFRPT04KdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE9kcj1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLHpkcj1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEZkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxCZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsSGRyPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVmRyPWB1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOwp1bmlmb3JtIHZlYzIgY2VudGVyOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCXZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJdmVjMiBzY2FsZTsKCXNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApOwoJc2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7CgkjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7CgkjZW5kaWYKCXZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7Cgl2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsKCXJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCXJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCW12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOwoJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxVZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxocj17YWxwaGFtYXBfZnJhZ21lbnQ6X2ZyLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6eWZyLGFscGhhdGVzdF9mcmFnbWVudDp2ZnIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6eGZyLGFvbWFwX2ZyYWdtZW50OmJmcixhb21hcF9wYXJzX2ZyYWdtZW50OndmcixiZWdpbl92ZXJ0ZXg6U2ZyLGJlZ2lubm9ybWFsX3ZlcnRleDpNZnIsYnNkZnM6RWZyLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpUZnIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkNmcixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDpBZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OlBmcixjbGlwcGluZ19wbGFuZXNfdmVydGV4Oklmcixjb2xvcl9mcmFnbWVudDpMZnIsY29sb3JfcGFyc19mcmFnbWVudDprZnIsY29sb3JfcGFyc192ZXJ0ZXg6UmZyLGNvbG9yX3ZlcnRleDpOZnIsY29tbW9uOkRmcixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T2ZyLGRlZmF1bHRub3JtYWxfdmVydGV4OnpmcixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6RmZyLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6QmZyLGVtaXNzaXZlbWFwX2ZyYWdtZW50OkhmcixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OlZmcixlbmNvZGluZ3NfZnJhZ21lbnQ6VWZyLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OnFmcixlbnZtYXBfZnJhZ21lbnQ6R2ZyLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpXZnIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6WWZyLGVudm1hcF9wYXJzX3ZlcnRleDpqZnIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6aXByLGVudm1hcF92ZXJ0ZXg6WGZyLGZvZ192ZXJ0ZXg6JGZyLGZvZ19wYXJzX3ZlcnRleDpLZnIsZm9nX2ZyYWdtZW50Olpmcixmb2dfcGFyc19mcmFnbWVudDpKZnIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpRZnIsbGlnaHRtYXBfZnJhZ21lbnQ6dHByLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6ZXByLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpycHIsbGlnaHRzX3BhcnNfYmVnaW46bnByLGxpZ2h0c190b29uX2ZyYWdtZW50Om9wcixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmFwcixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6c3ByLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OmxwcixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6Y3ByLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OnVwcixsaWdodHNfZnJhZ21lbnRfYmVnaW46aHByLGxpZ2h0c19mcmFnbWVudF9tYXBzOmZwcixsaWdodHNfZnJhZ21lbnRfZW5kOnBwcixsb2dkZXB0aGJ1Zl9mcmFnbWVudDpkcHIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDptcHIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6Z3ByLGxvZ2RlcHRoYnVmX3ZlcnRleDpfcHIsbWFwX2ZyYWdtZW50OnlwcixtYXBfcGFyc19mcmFnbWVudDp2cHIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OnhwcixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpicHIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OndwcixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpTcHIsbW9ycGhub3JtYWxfdmVydGV4Ok1wcixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDpFcHIsbW9ycGh0YXJnZXRfdmVydGV4OlRwcixub3JtYWxfZnJhZ21lbnRfYmVnaW46Q3ByLG5vcm1hbF9mcmFnbWVudF9tYXBzOkFwcixub3JtYWxfcGFyc19mcmFnbWVudDpQcHIsbm9ybWFsX3BhcnNfdmVydGV4Oklwcixub3JtYWxfdmVydGV4Okxwcixub3JtYWxtYXBfcGFyc19mcmFnbWVudDprcHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjpScHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOk5wcixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpEcHIsb3V0cHV0X2ZyYWdtZW50Ok9wcixwYWNraW5nOnpwcixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OkZwcixwcm9qZWN0X3ZlcnRleDpCcHIsZGl0aGVyaW5nX2ZyYWdtZW50OkhwcixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpWcHIscm91Z2huZXNzbWFwX2ZyYWdtZW50OlVwcixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDpxcHIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6R3ByLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpXcHIsc2hhZG93bWFwX3ZlcnRleDpZcHIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50Ompwcixza2luYmFzZV92ZXJ0ZXg6WHByLHNraW5uaW5nX3BhcnNfdmVydGV4OiRwcixza2lubmluZ192ZXJ0ZXg6S3ByLHNraW5ub3JtYWxfdmVydGV4OlpwcixzcGVjdWxhcm1hcF9mcmFnbWVudDpKcHIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDpRcHIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6dGRyLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6ZWRyLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpyZHIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bmRyLHV2X3BhcnNfZnJhZ21lbnQ6aWRyLHV2X3BhcnNfdmVydGV4Om9kcix1dl92ZXJ0ZXg6YWRyLHV2Ml9wYXJzX2ZyYWdtZW50OnNkcix1djJfcGFyc192ZXJ0ZXg6bGRyLHV2Ml92ZXJ0ZXg6Y2RyLHdvcmxkcG9zX3ZlcnRleDp1ZHIsYmFja2dyb3VuZF92ZXJ0OmhkcixiYWNrZ3JvdW5kX2ZyYWc6ZmRyLGN1YmVfdmVydDpwZHIsY3ViZV9mcmFnOmRkcixkZXB0aF92ZXJ0Om1kcixkZXB0aF9mcmFnOmdkcixkaXN0YW5jZVJHQkFfdmVydDpfZHIsZGlzdGFuY2VSR0JBX2ZyYWc6eWRyLGVxdWlyZWN0X3ZlcnQ6dmRyLGVxdWlyZWN0X2ZyYWc6eGRyLGxpbmVkYXNoZWRfdmVydDpiZHIsbGluZWRhc2hlZF9mcmFnOndkcixtZXNoYmFzaWNfdmVydDpTZHIsbWVzaGJhc2ljX2ZyYWc6TWRyLG1lc2hsYW1iZXJ0X3ZlcnQ6RWRyLG1lc2hsYW1iZXJ0X2ZyYWc6VGRyLG1lc2htYXRjYXBfdmVydDpDZHIsbWVzaG1hdGNhcF9mcmFnOkFkcixtZXNobm9ybWFsX3ZlcnQ6UGRyLG1lc2hub3JtYWxfZnJhZzpJZHIsbWVzaHBob25nX3ZlcnQ6TGRyLG1lc2hwaG9uZ19mcmFnOmtkcixtZXNocGh5c2ljYWxfdmVydDpSZHIsbWVzaHBoeXNpY2FsX2ZyYWc6TmRyLG1lc2h0b29uX3ZlcnQ6RGRyLG1lc2h0b29uX2ZyYWc6T2RyLHBvaW50c192ZXJ0Onpkcixwb2ludHNfZnJhZzpGZHIsc2hhZG93X3ZlcnQ6QmRyLHNoYWRvd19mcmFnOkhkcixzcHJpdGVfdmVydDpWZHIsc3ByaXRlX2ZyYWc6VWRyfSxyZT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHV2MlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LGlvcjp7dmFsdWU6MS41fSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEx0KC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX19fSxhaD17YmFzaWM6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5zcGVjdWxhcm1hcCxyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IG5lKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUucm91Z2huZXNzbWFwLHJlLm1ldGFsbmVzc21hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmdyYWRpZW50bWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOlRhKFtyZS5wb2ludHMscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOmhyLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpoci5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlRhKFtyZS5zcHJpdGUscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmhyLmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOlRhKFtyZS5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgan0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VGEoW3JlLmxpZ2h0cyxyZS5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zaGFkb3dfZnJhZ319O2FoLnBoeXNpY2FsPXt1bmlmb3JtczpUYShbYWguc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBMdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgTHR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IG5lKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBxZHIoZSx0LHIsbixpLG8pe2xldCBhPW5ldyBuZSgwKSxzPWk9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIHAoZyxfKXtsZXQgeT0hMSx4PV8uaXNTY2VuZT09PSEwP18uYmFja2dyb3VuZDpudWxsO3gmJnguaXNUZXh0dXJlJiYoeD10LmdldCh4KSk7bGV0IGI9ZS54cixTPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7UyYmUy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJih4PW51bGwpLHg9PT1udWxsP2QoYSxzKTp4JiZ4LmlzQ29sb3ImJihkKHgsMSkseT0hMCksKGUuYXV0b0NsZWFyfHx5KSYmZS5jbGVhcihlLmF1dG9DbGVhckNvbG9yLGUuYXV0b0NsZWFyRGVwdGgsZS5hdXRvQ2xlYXJTdGVuY2lsKSx4JiYoeC5pc0N1YmVUZXh0dXJlfHx4Lm1hcHBpbmc9PT14TSk/KGM9PT12b2lkIDAmJihjPW5ldyB0aShuZXcgUWYoMSwxLDEpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6WjMoYWguY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmFoLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFoLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oQyxQLGspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG4udXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJnguaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXh8fGghPT14LnZlcnNpb258fGYhPT1lLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT14LGg9eC52ZXJzaW9uLGY9ZS50b25lTWFwcGluZyksZy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgdGkobmV3IFYwKDIsMiksbmV3IGxoKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6STEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG4udXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LHgubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGQoZyxfKXtyLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoZy5yLGcuZyxnLmIsXyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGcsXz0xKXthLnNldChnKSxzPV8sZChhLHMpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oZyl7cz1nLGQoYSxzKX0scmVuZGVyOnB9fWZ1bmN0aW9uIEdkcihlLHQscixuKXtsZXQgaT1lLmdldFBhcmFtZXRlcigzNDkyMSksbz1uLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksYT1uLmlzV2ViR0wyfHxvIT09bnVsbCxzPXt9LGw9ZyhudWxsKSxjPWw7ZnVuY3Rpb24gdShSLEYseixVLFcpe2xldCBaPSExO2lmKGEpe2xldCBydD1kKFUseixGKTtjIT09cnQmJihjPXJ0LGYoYy5vYmplY3QpKSxaPV8oVSxXKSxaJiZ5KFUsVyl9ZWxzZXtsZXQgcnQ9Ri53aXJlZnJhbWU9PT0hMDsoYy5nZW9tZXRyeSE9PVUuaWR8fGMucHJvZ3JhbSE9PXouaWR8fGMud2lyZWZyYW1lIT09cnQpJiYoYy5nZW9tZXRyeT1VLmlkLGMucHJvZ3JhbT16LmlkLGMud2lyZWZyYW1lPXJ0LFo9ITApfVIuaXNJbnN0YW5jZWRNZXNoPT09ITAmJihaPSEwKSxXIT09bnVsbCYmci51cGRhdGUoVywzNDk2MyksWiYmKGsoUixGLHosVSksVyE9PW51bGwmJmUuYmluZEJ1ZmZlcigzNDk2MyxyLmdldChXKS5idWZmZXIpKX1mdW5jdGlvbiBoKCl7cmV0dXJuIG4uaXNXZWJHTDI/ZS5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX1mdW5jdGlvbiBmKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuYmluZFZlcnRleEFycmF5KFIpOm8uYmluZFZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIHAoUil7cmV0dXJuIG4uaXNXZWJHTDI/ZS5kZWxldGVWZXJ0ZXhBcnJheShSKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIGQoUixGLHope2xldCBVPXoud2lyZWZyYW1lPT09ITAsVz1zW1IuaWRdO1c9PT12b2lkIDAmJihXPXt9LHNbUi5pZF09Vyk7bGV0IFo9V1tGLmlkXTtaPT09dm9pZCAwJiYoWj17fSxXW0YuaWRdPVopO2xldCBydD1aW1VdO3JldHVybiBydD09PXZvaWQgMCYmKHJ0PWcoaCgpKSxaW1VdPXJ0KSxydH1mdW5jdGlvbiBnKFIpe2xldCBGPVtdLHo9W10sVT1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUZbV109MCx6W1ddPTAsVVtXXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpGLGVuYWJsZWRBdHRyaWJ1dGVzOnosYXR0cmlidXRlRGl2aXNvcnM6VSxvYmplY3Q6UixhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIF8oUixGKXtsZXQgej1jLmF0dHJpYnV0ZXMsVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9eltaXSxvdD1VW1pdO2lmKHJ0PT09dm9pZCAwfHxydC5hdHRyaWJ1dGUhPT1vdHx8cnQuZGF0YSE9PW90LmRhdGEpcmV0dXJuITA7VysrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1XfHxjLmluZGV4IT09Rn1mdW5jdGlvbiB5KFIsRil7bGV0IHo9e30sVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9VVtaXSxvdD17fTtvdC5hdHRyaWJ1dGU9cnQscnQuZGF0YSYmKG90LmRhdGE9cnQuZGF0YSkseltaXT1vdCxXKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVcsYy5pbmRleD1GfWZ1bmN0aW9uIHgoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKVJbRl09MH1mdW5jdGlvbiBiKFIpe1MoUiwwKX1mdW5jdGlvbiBTKFIsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLFU9Yy5lbmFibGVkQXR0cmlidXRlcyxXPWMuYXR0cmlidXRlRGl2aXNvcnM7eltSXT0xLFVbUl09PT0wJiYoZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShSKSxVW1JdPTEpLFdbUl0hPT1GJiYoKG4uaXNXZWJHTDI/ZTp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtuLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oUixGKSxXW1JdPUYpfWZ1bmN0aW9uIEMoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLFU9Ri5sZW5ndGg7ejxVO3orKylGW3pdIT09Ult6XSYmKGUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gUChSLEYseixVLFcsWil7bi5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9lLnZlcnRleEF0dHJpYklQb2ludGVyKFIsRix6LFcsWik6ZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFIsRix6LFUsVyxaKX1mdW5jdGlvbiBrKFIsRix6LFUpe2lmKG4uaXNXZWJHTDI9PT0hMSYmKFIuaXNJbnN0YW5jZWRNZXNofHxVLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47eCgpO2xldCBXPVUuYXR0cmlidXRlcyxaPXouZ2V0QXR0cmlidXRlcygpLHJ0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IG90IGluIFope2xldCBzdD1aW290XTtpZihzdC5sb2NhdGlvbj49MCl7bGV0IFN0PVdbb3RdO2lmKFN0PT09dm9pZCAwJiYob3Q9PT0iaW5zdGFuY2VNYXRyaXgiJiZSLmluc3RhbmNlTWF0cml4JiYoU3Q9Ui5pbnN0YW5jZU1hdHJpeCksb3Q9PT0iaW5zdGFuY2VDb2xvciImJlIuaW5zdGFuY2VDb2xvciYmKFN0PVIuaW5zdGFuY2VDb2xvcikpLFN0IT09dm9pZCAwKXtsZXQgYnQ9U3Qubm9ybWFsaXplZCxNdD1TdC5pdGVtU2l6ZSxsdD1yLmdldChTdCk7aWYobHQ9PT12b2lkIDApY29udGludWU7bGV0IEt0PWx0LmJ1ZmZlcixfdD1sdC50eXBlLGN0PWx0LmJ5dGVzUGVyRWxlbWVudDtpZihTdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgWD1TdC5kYXRhLGV0PVguc3RyaWRlLGR0PVN0Lm9mZnNldDtpZihYJiZYLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylTKHN0LmxvY2F0aW9uK3EsWC5tZXNoUGVyQXR0cmlidXRlKTtSLmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZVLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoVS5fbWF4SW5zdGFuY2VDb3VudD1YLm1lc2hQZXJBdHRyaWJ1dGUqWC5jb3VudCl9ZWxzZSBmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspYihzdC5sb2NhdGlvbitxKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylQKHN0LmxvY2F0aW9uK3EsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LGV0KmN0LChkdCtNdC9zdC5sb2NhdGlvblNpemUqcSkqY3QpfWVsc2V7aWYoU3QuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylTKHN0LmxvY2F0aW9uK1gsU3QubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9U3QubWVzaFBlckF0dHJpYnV0ZSpTdC5jb3VudCl9ZWxzZSBmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspYihzdC5sb2NhdGlvbitYKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylQKHN0LmxvY2F0aW9uK1gsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LE10KmN0LE10L3N0LmxvY2F0aW9uU2l6ZSpYKmN0KX19ZWxzZSBpZihydCE9PXZvaWQgMCl7bGV0IGJ0PXJ0W290XTtpZihidCE9PXZvaWQgMClzd2l0Y2goYnQubGVuZ3RoKXtjYXNlIDI6ZS52ZXJ0ZXhBdHRyaWIyZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgMzplLnZlcnRleEF0dHJpYjNmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7Y2FzZSA0OmUudmVydGV4QXR0cmliNGZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztkZWZhdWx0OmUudmVydGV4QXR0cmliMWZ2KHN0LmxvY2F0aW9uLGJ0KX19fX1DKCl9ZnVuY3Rpb24gTygpe0koKTtmb3IobGV0IFIgaW4gcyl7bGV0IEY9c1tSXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSXX19ZnVuY3Rpb24gRChSKXtpZihzW1IuaWRdPT09dm9pZCAwKXJldHVybjtsZXQgRj1zW1IuaWRdO2ZvcihsZXQgeiBpbiBGKXtsZXQgVT1GW3pdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSBGW3pdfWRlbGV0ZSBzW1IuaWRdfWZ1bmN0aW9uIEIoUil7Zm9yKGxldCBGIGluIHMpe2xldCB6PXNbRl07aWYoeltSLmlkXT09PXZvaWQgMCljb250aW51ZTtsZXQgVT16W1IuaWRdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSB6W1IuaWRdfX1mdW5jdGlvbiBJKCl7TCgpLGMhPT1sJiYoYz1sLGYoYy5vYmplY3QpKX1mdW5jdGlvbiBMKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDp1LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6TCxkaXNwb3NlOk8scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6RCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOkIsaW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpDfX1mdW5jdGlvbiBXZHIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoYyl7bz1jfWZ1bmN0aW9uIHMoYyx1KXtlLmRyYXdBcnJheXMobyxjLHUpLHIudXBkYXRlKHUsbywxKX1mdW5jdGlvbiBsKGMsdSxoKXtpZihoPT09MClyZXR1cm47bGV0IGYscDtpZihpKWY9ZSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGY9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLGY9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59ZltwXShvLGMsdSxoKSxyLnVwZGF0ZSh1LG8saCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5yZW5kZXI9cyx0aGlzLnJlbmRlckluc3RhbmNlcz1sfWZ1bmN0aW9uIFlkcihlLHQscil7bGV0IG47ZnVuY3Rpb24gaSgpe2lmKG4hPT12b2lkIDApcmV0dXJuIG47aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBrPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtuPWUuZ2V0UGFyYW1ldGVyKGsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG49MDtyZXR1cm4gbn1mdW5jdGlvbiBvKGspe2lmKGs9PT0iaGlnaHAiKXtpZihlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO2s9Im1lZGl1bXAifXJldHVybiBrPT09Im1lZGl1bXAiJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxzPXIucHJlY2lzaW9uIT09dm9pZCAwP3IucHJlY2lzaW9uOiJoaWdocCIsbD1vKHMpO2whPT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIscywibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikscz1sKTtsZXQgYz1hfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPWUuZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPWUuZ2V0UGFyYW1ldGVyKDM1NjYwKSxwPWUuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9ZS5nZXRQYXJhbWV0ZXIoMzQwNzYpLGc9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLF89ZS5nZXRQYXJhbWV0ZXIoMzYzNDcpLHk9ZS5nZXRQYXJhbWV0ZXIoMzYzNDgpLHg9ZS5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLFM9YXx8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksQz1iJiZTLFA9YT9lLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6aSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246cyxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOnAsbWF4Q3ViZW1hcFNpemU6ZCxtYXhBdHRyaWJ1dGVzOmcsbWF4VmVydGV4VW5pZm9ybXM6XyxtYXhWYXJ5aW5nczp5LG1heEZyYWdtZW50VW5pZm9ybXM6eCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpTLGZsb2F0VmVydGV4VGV4dHVyZXM6QyxtYXhTYW1wbGVzOlB9fWZ1bmN0aW9uIGpkcihlKXtsZXQgdD10aGlzLHI9bnVsbCxuPTAsaT0hMSxvPSExLGE9bmV3ICRjLHM9bmV3IGtpLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLHApe2xldCBkPWgubGVuZ3RoIT09MHx8Znx8biE9PTB8fGk7cmV0dXJuIGk9ZixyPXUoaCxwLDApLG49aC5sZW5ndGgsZH0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmNsaXBwaW5nUGxhbmVzLGc9aC5jbGlwSW50ZXJzZWN0aW9uLF89aC5jbGlwU2hhZG93cyx5PWUuZ2V0KGgpO2lmKCFpfHxkPT09bnVsbHx8ZC5sZW5ndGg9PT0wfHxvJiYhXylvP3UobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOm4sYj14KjQsUz15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1TLFM9dShkLGYsYixwKTtmb3IobGV0IEM9MDtDIT09YjsrK0MpU1tDXT1yW0NdO3kuY2xpcHBpbmdTdGF0ZT1TLHRoaXMubnVtSW50ZXJzZWN0aW9uPWc/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ciYmKGwudmFsdWU9cixsLm5lZWRzVXBkYXRlPW4+MCksdC5udW1QbGFuZXM9bix0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLHAsZCl7bGV0IGc9aCE9PW51bGw/aC5sZW5ndGg6MCxfPW51bGw7aWYoZyE9PTApe2lmKF89bC52YWx1ZSxkIT09ITB8fF89PT1udWxsKXtsZXQgeT1wK2cqNCx4PWYubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHgpLChfPT09bnVsbHx8Xy5sZW5ndGg8eSkmJihfPW5ldyBGbG9hdDMyQXJyYXkoeSkpO2ZvcihsZXQgYj0wLFM9cDtiIT09ZzsrK2IsUys9NClhLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHgscyksYS5ub3JtYWwudG9BcnJheShfLFMpLF9bUyszXT1hLmNvbnN0YW50fWwudmFsdWU9XyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1nLHQubnVtSW50ZXJzZWN0aW9uPTAsX319ZnVuY3Rpb24gWGRyKGUpe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm4gcz09PVlQP2EubWFwcGluZz1ueDpzPT09alAmJihhLm1hcHBpbmc9aXgpLGF9ZnVuY3Rpb24gbihhKXtpZihhJiZhLmlzVGV4dHVyZSYmYS5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMSl7bGV0IHM9YS5tYXBwaW5nO2lmKHM9PT1ZUHx8cz09PWpQKWlmKHQuaGFzKGEpKXtsZXQgbD10LmdldChhKS50ZXh0dXJlO3JldHVybiByKGwsYS5tYXBwaW5nKX1lbHNle2xldCBsPWEuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFEzKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKGUsYSksdC5zZXQoYSxjKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLHIoYy50ZXh0dXJlLGEubWFwcGluZyl9ZWxzZSByZXR1cm4gbnVsbH19cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtsZXQgcz1hLnRhcmdldDtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2xldCBsPXQuZ2V0KHMpO2whPT12b2lkIDAmJih0LmRlbGV0ZShzKSxsLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXB9cmV0dXJue2dldDpuLGRpc3Bvc2U6b319dmFyIEQxPWNsYXNzIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IodD0tMSxyPTEsbj0xLGk9LTEsbz0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1yLHRoaXMudG9wPW4sdGhpcy5ib3R0b209aSx0aGlzLm5lYXI9byx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxyLG4saSxvLGEpe3RoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLHI9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLGk9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89bi10LGE9bit0LHM9aStyLGw9aS1yO2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLHU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxhPW8rYyp0aGlzLnZpZXcud2lkdGgscy09dSp0aGlzLnZpZXcub2Zmc2V0WSxsPXMtdSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8sYSxzLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC56b29tPXRoaXMuem9vbSxyLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxyLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LHIub2JqZWN0LnRvcD10aGlzLnRvcCxyLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSkscn19O0QxLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgVTA9Y2xhc3MgZXh0ZW5kcyBsaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O1UwLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBxMz00LEYwPTgsJGY9TWF0aC5wb3coMixGMCksQmZlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxIZmU9RjAtcTMrMStCZmUubGVuZ3RoLGszPTIwLGh1dD1uZXcgRDEse19sb2RQbGFuZXM6TlAsX3NpemVMb2RzOkV1ZSxfc2lnbWFzOlBWfT0kZHIoKSxUdWU9bmV3IG5lLGZ1dD1udWxsLFMxPSgxK01hdGguc3FydCg1KSkvMixSMz0xL1MxLEN1ZT1bbmV3IGooMSwxLDEpLG5ldyBqKC0xLDEsMSksbmV3IGooMSwxLC0xKSxuZXcgaigtMSwxLC0xKSxuZXcgaigwLFMxLFIzKSxuZXcgaigwLFMxLC1SMyksbmV3IGooUjMsMCxTMSksbmV3IGooLVIzLDAsUzEpLG5ldyBqKFMxLFIzLDApLG5ldyBqKC1TMSxSMywwKV0sZTY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD1LZHIoazMpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LHI9MCxuPS4xLGk9MTAwKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxuLGksbykscj4wJiZ0aGlzLl9ibHVyKG8sMCwwLHIpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxyPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LHIpfWZyb21DdWJlbWFwKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1JdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXt0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxOUC5sZW5ndGg7dCsrKU5QW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZnV0KSx0LnNjaXNzb3JUZXN0PSExLElWKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LHIpe2Z1dD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbj1yfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LG4pLHRoaXMuX2FwcGx5UE1SRU0obiksdGhpcy5fY2xlYW51cChuKSxufV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IHI9e21hZ0ZpbHRlcjppaSxtaW5GaWx0ZXI6aWksZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6QzEsZm9ybWF0OlFvLGVuY29kaW5nOlFkLGRlcHRoQnVmZmVyOiExfSxuPUF1ZShyKTtyZXR1cm4gbi5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1BdWUocikpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgcj1uZXcgdGkoTlBbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShyLGh1dCl9X3NjZW5lVG9DdWJlVVYodCxyLG4saSl7bGV0IHM9bmV3IFVpKDkwLDEscixuKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGg9dS5hdXRvQ2xlYXIsZj11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihUdWUpLHUudG9uZU1hcHBpbmc9S2QsdS5hdXRvQ2xlYXI9ITE7bGV0IHA9bmV3IHNoKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOklpLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZD1uZXcgdGkobmV3IFFmLHApLGc9ITEsXz10LmJhY2tncm91bmQ7Xz9fLmlzQ29sb3ImJihwLmNvbG9yLmNvcHkoXyksdC5iYWNrZ3JvdW5kPW51bGwsZz0hMCk6KHAuY29sb3IuY29weShUdWUpLGc9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzt4PT09MD8ocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KGNbeV0sMCwwKSk6eD09PTE/KHMudXAuc2V0KDAsMCxsW3ldKSxzLmxvb2tBdCgwLGNbeV0sMCkpOihzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoMCwwLGNbeV0pKSxJVihpLHgqJGYseT4yPyRmOjAsJGYsJGYpLHUuc2V0UmVuZGVyVGFyZ2V0KGkpLGcmJnUucmVuZGVyKGQscyksdS5yZW5kZXIodCxzKX1kLmdlb21ldHJ5LmRpc3Bvc2UoKSxkLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9X31fdGV4dHVyZVRvQ3ViZVVWKHQscil7bGV0IG49dGhpcy5fcmVuZGVyZXIsaT10Lm1hcHBpbmc9PT1ueHx8dC5tYXBwaW5nPT09aXg7aT8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPUl1ZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9dC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxKTp0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSk7bGV0IG89aT90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLGE9bmV3IHRpKE5QWzBdLG8pLHM9by51bmlmb3JtcztzLmVudk1hcC52YWx1ZT10LGl8fHMudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSVYociwwLDAsMyokZiwyKiRmKSxuLnNldFJlbmRlclRhcmdldChyKSxuLnJlbmRlcihhLGh1dCl9X2FwcGx5UE1SRU0odCl7bGV0IHI9dGhpcy5fcmVuZGVyZXIsbj1yLmF1dG9DbGVhcjtyLmF1dG9DbGVhcj0hMTtmb3IobGV0IGk9MTtpPEhmZTtpKyspe2xldCBvPU1hdGguc3FydChQVltpXSpQVltpXS1QVltpLTFdKlBWW2ktMV0pLGE9Q3VlWyhpLTEpJUN1ZS5sZW5ndGhdO3RoaXMuX2JsdXIodCxpLTEsaSxvLGEpfXIuYXV0b0NsZWFyPW59X2JsdXIodCxyLG4saSxvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEscixuLGksImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsbixuLGksImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQscixuLGksbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO2EhPT0ibGF0aXR1ZGluYWwiJiZhIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IHRpKE5QW2ldLGMpLGY9Yy51bmlmb3JtcyxwPUV1ZVtuXS0xLGQ9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvKDIqazMtMSksZz1vL2QsXz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IodSpnKTprMztfPmszJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke199IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtrM31gKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCBQPTA7UDxrMzsrK1Ape2xldCBrPVAvZyxPPU1hdGguZXhwKC1rKmsvMik7eS5wdXNoKE8pLFA9PT0wP3grPU86UDxfJiYoeCs9MipPKX1mb3IobGV0IFA9MDtQPHkubGVuZ3RoO1ArKyl5W1BdPXlbUF0veDtmLmVudk1hcC52YWx1ZT10LnRleHR1cmUsZi5zYW1wbGVzLnZhbHVlPV8sZi53ZWlnaHRzLnZhbHVlPXksZi5sYXRpdHVkaW5hbC52YWx1ZT1hPT09ImxhdGl0dWRpbmFsIixzJiYoZi5wb2xlQXhpcy52YWx1ZT1zKSxmLmRUaGV0YS52YWx1ZT1kLGYubWlwSW50LnZhbHVlPUYwLW47bGV0IGI9RXVlW2ldLFM9MypNYXRoLm1heCgwLCRmLTIqYiksQz0oaT09PTA/MDoyKiRmKSsyKmIqKGk+RjAtcTM/aS1GMCtxMzowKTtJVihyLFMsQywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChyKSxsLnJlbmRlcihoLGh1dCl9fTtmdW5jdGlvbiAkZHIoKXtsZXQgZT1bXSx0PVtdLHI9W10sbj1GMDtmb3IobGV0IGk9MDtpPEhmZTtpKyspe2xldCBvPU1hdGgucG93KDIsbik7dC5wdXNoKG8pO2xldCBhPTEvbztpPkYwLXEzP2E9QmZlW2ktRjArcTMtMV06aT09PTAmJihhPTApLHIucHVzaChhKTtsZXQgcz0xLyhvLTEpLGw9LXMvMixjPTErcy8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LHA9MyxkPTIsZz0xLF89bmV3IEZsb2F0MzJBcnJheShwKmYqaCkseT1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSx4PW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpO2ZvcihsZXQgUz0wO1M8aDtTKyspe2xldCBDPVMlMyoyLzMtMSxQPVM+Mj8wOi0xLGs9W0MsUCwwLEMrMi8zLFAsMCxDKzIvMyxQKzEsMCxDLFAsMCxDKzIvMyxQKzEsMCxDLFArMSwwXTtfLnNldChrLHAqZipTKSx5LnNldCh1LGQqZipTKTtsZXQgTz1bUyxTLFMsUyxTLFNdO3guc2V0KE8sZypmKlMpfWxldCBiPW5ldyBQZTtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShfLHApKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKZSh5LGQpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgSmUoeCxnKSksZS5wdXNoKGIpLG4+cTMmJm4tLX1yZXR1cm57X2xvZFBsYW5lczplLF9zaXplTG9kczp0LF9zaWdtYXM6cn19ZnVuY3Rpb24gQXVlKGUpe2xldCB0PW5ldyB1cygzKiRmLDMqJGYsZSk7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPXhNLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBJVihlLHQscixuLGkpe2Uudmlld3BvcnQuc2V0KHQscixuLGkpLGUuc2Npc3Nvci5zZXQodCxyLG4saSl9ZnVuY3Rpb24gS2RyKGUpe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoZSkscj1uZXcgaigwLDEsMCk7cmV0dXJuIG5ldyBVMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOmV9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpyfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBQdWUoKXtsZXQgZT1uZXcgTHQoMSwxKTtyZXR1cm4gbmV3IFUwKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIEl1ZSgpe3JldHVybiBuZXcgVTAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6Tmh0KCksZnJhZ21lbnRTaGFkZXI6YAoKCQkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCgkJCXZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uOwoKCQkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE5odCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiBaZHIoZSl7bGV0IHQ9bmV3IFdlYWtNYXAscj1udWxsO2Z1bmN0aW9uIG4ocyl7aWYocyYmcy5pc1RleHR1cmUpe2xldCBsPXMubWFwcGluZyxjPWw9PT1ZUHx8bD09PWpQLHU9bD09PW54fHxsPT09aXg7aWYoY3x8dSlpZihzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmcy5uZWVkc1BNUkVNVXBkYXRlPT09ITApe3MubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChzKTtyZXR1cm4gcj09PW51bGwmJihyPW5ldyBlNihlKSksaD1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzLGgpOnIuZnJvbUN1YmVtYXAocyxoKSx0LnNldChzLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgaD1zLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJmkoaCkpe3I9PT1udWxsJiYocj1uZXcgZTYoZSkpO2xldCBmPWM/ci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMpOnIuZnJvbUN1YmVtYXAocyk7cmV0dXJuIHQuc2V0KHMsZikscy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBzfWZ1bmN0aW9uIGkocyl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylzW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIG8ocyl7bGV0IGw9cy50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIGEoKXt0PW5ldyBXZWFrTWFwLHIhPT1udWxsJiYoci5kaXNwb3NlKCkscj1udWxsKX1yZXR1cm57Z2V0Om4sZGlzcG9zZTphfX1mdW5jdGlvbiBKZHIoZSl7bGV0IHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dIT09dm9pZCAwKXJldHVybiB0W25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPWUuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiB0W25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pIT09bnVsbH0saW5pdDpmdW5jdGlvbihuKXtuLmlzV2ViR0wyP3IoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToocigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHIoIk9FU190ZXh0dXJlX2Zsb2F0IikscigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikscigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikscigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLHIoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikscigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxyKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxyKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKG4pe2xldCBpPXIobik7cmV0dXJuIGk9PT1udWxsJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrbisiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGl9fX1mdW5jdGlvbiBRZHIoZSx0LHIsbil7bGV0IGk9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGQgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tkXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgaVtmLmlkXTtsZXQgcD1vLmdldChmKTtwJiYodC5yZW1vdmUocCksby5kZWxldGUoZikpLG4ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LHIubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGlbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksaVtmLmlkXT0hMCxyLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIGYpdC51cGRhdGUoZltkXSwzNDk2Mik7bGV0IHA9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIHApe2xldCBnPXBbZF07Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXQudXBkYXRlKGdbX10sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLHA9aC5pbmRleCxkPWguYXR0cmlidXRlcy5wb3NpdGlvbixnPTA7aWYocCE9PW51bGwpe2xldCB4PXAuYXJyYXk7Zz1wLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aDtiPFM7Yis9Myl7bGV0IEM9eFtiKzBdLFA9eFtiKzFdLGs9eFtiKzJdO2YucHVzaChDLFAsUCxrLGssQyl9fWVsc2V7bGV0IHg9ZC5hcnJheTtnPWQudmVyc2lvbjtmb3IobGV0IGI9MCxTPXgubGVuZ3RoLzMtMTtiPFM7Yis9Myl7bGV0IEM9YiswLFA9YisxLGs9YisyO2YucHVzaChDLFAsUCxrLGssQyl9fWxldCBfPW5ldyhEZmUoZik/SzM6JDMpKGYsMSk7Xy52ZXJzaW9uPWc7bGV0IHk9by5nZXQoaCk7eSYmdC5yZW1vdmUoeSksby5zZXQoaCxfKX1mdW5jdGlvbiB1KGgpe2xldCBmPW8uZ2V0KGgpO2lmKGYpe2xldCBwPWguaW5kZXg7cCE9PW51bGwmJmYudmVyc2lvbjxwLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBvLmdldChoKX1yZXR1cm57Z2V0OnMsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIHRtcihlLHQscixuKXtsZXQgaT1uLmlzV2ViR0wyLG87ZnVuY3Rpb24gYShmKXtvPWZ9bGV0IHMsbDtmdW5jdGlvbiBjKGYpe3M9Zi50eXBlLGw9Zi5ieXRlc1BlckVsZW1lbnR9ZnVuY3Rpb24gdShmLHApe2UuZHJhd0VsZW1lbnRzKG8scCxzLGYqbCksci51cGRhdGUocCxvLDEpfWZ1bmN0aW9uIGgoZixwLGQpe2lmKGQ9PT0wKXJldHVybjtsZXQgZyxfO2lmKGkpZz1lLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihnPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksXz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLGc9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWdbX10obyxwLHMsZipsLGQpLHIudXBkYXRlKHAsbyxkKX10aGlzLnNldE1vZGU9YSx0aGlzLnNldEluZGV4PWMsdGhpcy5yZW5kZXI9dSx0aGlzLnJlbmRlckluc3RhbmNlcz1ofWZ1bmN0aW9uIGVtcihlKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBuKG8sYSxzKXtzd2l0Y2goci5jYWxscysrLGEpe2Nhc2UgNDpyLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ci5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ci5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ci5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDpyLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpO2JyZWFrfX1mdW5jdGlvbiBpKCl7ci5mcmFtZSsrLHIuY2FsbHM9MCxyLnRyaWFuZ2xlcz0wLHIucG9pbnRzPTAsci5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6cixwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDppLHVwZGF0ZTpufX12YXIgdE09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07dE0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHJtcihlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gbm1yKGUsdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKGVbMV0pfWZ1bmN0aW9uIEx1ZShlLHQpe2xldCByPTEsbj10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7biBpbnN0YW5jZW9mIEludDhBcnJheT9yPTEyNzpuIGluc3RhbmNlb2YgSW50MTZBcnJheT9yPTMyNzY3Om4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P3I9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixuKSxlLmRpdmlkZVNjYWxhcihyKX1mdW5jdGlvbiBpbXIoZSx0LHIpe2xldCBuPXt9LGk9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLGE9bmV3IGoscz1bXTtmb3IobGV0IGM9MDtjPDg7YysrKXNbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgcD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBkPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxnPW8uZ2V0KHUpO2lmKGc9PT12b2lkIDB8fGcuY291bnQhPT1kKXtsZXQgTD1mdW5jdGlvbigpe0IuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9O2chPT12b2lkIDAmJmcudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sUz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLEM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LFA9eD09PSEwPzI6MSxrPUMqUCxPPTE7az50Lm1heFRleHR1cmVTaXplJiYoTz1NYXRoLmNlaWwoay90Lm1heFRleHR1cmVTaXplKSxrPXQubWF4VGV4dHVyZVNpemUpO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkoaypPKjQqZCksQj1uZXcgdE0oRCxrLE8sZCk7Qi5mb3JtYXQ9UW8sQi50eXBlPWpkLEIubmVlZHNVcGRhdGU9ITA7bGV0IEk9UCo0O2ZvcihsZXQgUj0wO1I8ZDtSKyspe2xldCBGPWJbUl0sej1TW1JdLFU9aypPKjQqUjtmb3IobGV0IFc9MDtXPEYuY291bnQ7VysrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoRixXKSxGLm5vcm1hbGl6ZWQ9PT0hMCYmTHVlKGEsRik7bGV0IFo9VypJO0RbVStaKzBdPWEueCxEW1UrWisxXT1hLnksRFtVK1orMl09YS56LERbVStaKzNdPTAseD09PSEwJiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKHosVyksei5ub3JtYWxpemVkPT09ITAmJkx1ZShhLHopLERbVStaKzRdPWEueCxEW1UrWis1XT1hLnksRFtVK1orNl09YS56LERbVStaKzddPTApfX1nPXtjb3VudDpkLHRleHR1cmU6QixzaXplOm5ldyBMdChrLE8pfSxvLnNldCh1LGcpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9bGV0IF89MDtmb3IobGV0IHg9MDt4PHAubGVuZ3RoO3grKylfKz1wW3hdO2xldCB5PXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLV87Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGcudGV4dHVyZSxyKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZSwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGcuc2l6ZSl9ZWxzZXtsZXQgZD1wPT09dm9pZCAwPzA6cC5sZW5ndGgsZz1uW3UuaWRdO2lmKGc9PT12b2lkIDB8fGcubGVuZ3RoIT09ZCl7Zz1bXTtmb3IobGV0IFM9MDtTPGQ7UysrKWdbU109W1MsMF07blt1LmlkXT1nfWZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWdbU107Q1swXT1TLENbMV09cFtTXX1nLnNvcnQobm1yKTtmb3IobGV0IFM9MDtTPDg7UysrKVM8ZCYmZ1tTXVsxXT8oc1tTXVswXT1nW1NdWzBdLHNbU11bMV09Z1tTXVsxXSk6KHNbU11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsc1tTXVsxXT0wKTtzLnNvcnQocm1yKTtsZXQgXz11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBTPTA7Uzw4O1MrKyl7bGV0IEM9c1tTXSxQPUNbMF0saz1DWzFdO1AhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmaz8oXyYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSE9PV9bUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyxfW1BdKSx5JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpIT09eVtQXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTLHlbUF0pLGlbU109ayx4Kz1rKTooXyYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MpLHkmJnUuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSxpW1NdPTApfWxldCBiPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsYiksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaSl9fXJldHVybnt1cGRhdGU6bH19ZnVuY3Rpb24gb21yKGUsdCxyLG4pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG8obCl7bGV0IGM9bi5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gaS5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksaS5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBhKCl7aT1uZXcgV2Vha01hcH1mdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOm8sZGlzcG9zZTphfX12YXIgcjY9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07cjYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgVmZlPW5ldyB2aSxVZmU9bmV3IHRNLHFmZT1uZXcgcjYsR2ZlPW5ldyBIMCxrdWU9W10sUnVlPVtdLE51ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxEdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxPdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBiTShlLHQscil7bGV0IG49ZVswXTtpZihuPD0wfHxuPjApcmV0dXJuIGU7bGV0IGk9dCpyLG89a3VlW2ldO2lmKG89PT12b2lkIDAmJihvPW5ldyBGbG9hdDMyQXJyYXkoaSksa3VlW2ldPW8pLHQhPT0wKXtuLnRvQXJyYXkobywwKTtmb3IobGV0IGE9MSxzPTA7YSE9PXQ7KythKXMrPXIsZVthXS50b0FycmF5KG8scyl9cmV0dXJuIG99ZnVuY3Rpb24gaHMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDYShlLHQpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl19ZnVuY3Rpb24gS1UoZSx0KXtsZXQgcj1SdWVbdF07cj09PXZvaWQgMCYmKHI9bmV3IEludDMyQXJyYXkodCksUnVlW3RdPXIpO2ZvcihsZXQgbj0wO24hPT10OysrbilyW25dPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiByfWZ1bmN0aW9uIGFtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBzbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueSkmJihlLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksclswXT10LngsclsxXT10LnkpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBsbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueXx8clsyXSE9PXQueikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoclswXSE9PXQucnx8clsxXSE9PXQuZ3x8clsyXSE9PXQuYikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLHJbMF09dC5yLHJbMV09dC5nLHJbMl09dC5iKTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTNmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gY21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10Lnp8fHJbM10hPT10LncpJiYoZS51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksclswXT10LngsclsxXT10LnksclsyXT10LnosclszXT10LncpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiB1bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtPdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsT3VlKSxDYShyLG4pfX1mdW5jdGlvbiBobXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtEdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRHVlKSxDYShyLG4pfX1mdW5jdGlvbiBmbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtOdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsTnVlKSxDYShyLG4pfX1mdW5jdGlvbiBwbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gZG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBtbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIGdtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTRpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gX21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiB5bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB2bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB4bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBibXIoZSx0LHIpe2xldCBuPXRoaXMuY2FjaGUsaT1yLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09aSYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxuWzBdPWkpLHIuc2FmZVNldFRleHR1cmUyRCh0fHxWZmUsaSl9ZnVuY3Rpb24gd21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUzRCh0fHxxZmUsaSl9ZnVuY3Rpb24gU21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxHZmUsaSl9ZnVuY3Rpb24gTW1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUyREFycmF5KHR8fFVmZSxpKX1mdW5jdGlvbiBFbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gYW1yO2Nhc2UgMzU2NjQ6cmV0dXJuIHNtcjtjYXNlIDM1NjY1OnJldHVybiBsbXI7Y2FzZSAzNTY2NjpyZXR1cm4gY21yO2Nhc2UgMzU2NzQ6cmV0dXJuIHVtcjtjYXNlIDM1Njc1OnJldHVybiBobXI7Y2FzZSAzNTY3NjpyZXR1cm4gZm1yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBwbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBkbXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBtbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBnbXI7Y2FzZSA1MTI1OnJldHVybiBfbXI7Y2FzZSAzNjI5NDpyZXR1cm4geW1yO2Nhc2UgMzYyOTU6cmV0dXJuIHZtcjtjYXNlIDM2Mjk2OnJldHVybiB4bXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBibXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIHdtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBTbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gTW1yfX1mdW5jdGlvbiBUbXIoZSx0KXtlLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIENtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDIpO2UudW5pZm9ybTJmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gQW1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMyk7ZS51bmlmb3JtM2Z2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBQbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm00ZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIEltcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDQpO2UudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gTG1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsOSk7ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBrbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwxNik7ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBSbXIoZSx0KXtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIE5tcihlLHQpe2UudW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gRG1yKGUsdCl7ZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBPbXIoZSx0KXtlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHptcihlLHQpe2UudW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEZtcihlLHQpe2UudW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJtcihlLHQpe2UudW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEhtcihlLHQpe2UudW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFZtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmUyRCh0W29dfHxWZmUsaVtvXSl9ZnVuY3Rpb24gVW1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlM0QodFtvXXx8cWZlLGlbb10pfWZ1bmN0aW9uIHFtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fEdmZSxpW29dKX1mdW5jdGlvbiBHbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNldFRleHR1cmUyREFycmF5KHRbb118fFVmZSxpW29dKX1mdW5jdGlvbiBXbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gVG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIENtcjtjYXNlIDM1NjY1OnJldHVybiBBbXI7Y2FzZSAzNTY2NjpyZXR1cm4gUG1yO2Nhc2UgMzU2NzQ6cmV0dXJuIEltcjtjYXNlIDM1Njc1OnJldHVybiBMbXI7Y2FzZSAzNTY3NjpyZXR1cm4ga21yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBSbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBObXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBEbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPbXI7Y2FzZSA1MTI1OnJldHVybiB6bXI7Y2FzZSAzNjI5NDpyZXR1cm4gRm1yO2Nhc2UgMzYyOTU6cmV0dXJuIEJtcjtjYXNlIDM2Mjk2OnJldHVybiBIbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBWbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIFVtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBxbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gR21yfX1mdW5jdGlvbiBZbXIoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmFkZHI9cix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9RW1yKHQudHlwZSl9ZnVuY3Rpb24gV2ZlKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9V21yKHQudHlwZSl9V2ZlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLmNhY2hlO2UgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09ZS5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgpKSxDYSh0LGUpfTtmdW5jdGlvbiBZZmUoZSl7dGhpcy5pZD1lLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fVlmZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuc2VxO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT1uW2ldO2Euc2V0VmFsdWUoZSx0W2EuaWRdLHIpfX07dmFyIHB1dD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24genVlKGUsdCl7ZS5zZXEucHVzaCh0KSxlLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGptcihlLHQscil7bGV0IG49ZS5uYW1lLGk9bi5sZW5ndGg7Zm9yKHB1dC5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wdXQuZXhlYyhuKSxhPXB1dC5sYXN0SW5kZXgscz1vWzFdLGw9b1syXT09PSJdIixjPW9bM107aWYobCYmKHM9c3wwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZhKzI9PT1pKXt6dWUocixjPT09dm9pZCAwP25ldyBZbXIocyxlLHQpOm5ldyBXZmUocyxlLHQpKTticmVha31lbHNle2xldCBoPXIubWFwW3NdO2g9PT12b2lkIDAmJihoPW5ldyBZZmUocyksenVlKHIsaCkpLHI9aH19fWZ1bmN0aW9uIEIwKGUsdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IHI9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgbj0wO248cjsrK24pe2xldCBpPWUuZ2V0QWN0aXZlVW5pZm9ybSh0LG4pLG89ZS5nZXRVbmlmb3JtTG9jYXRpb24odCxpLm5hbWUpO2ptcihpLG8sdGhpcyl9fUIwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlLHQscixuKXtsZXQgaT10aGlzLm1hcFt0XTtpIT09dm9pZCAwJiZpLnNldFZhbHVlKGUscixuKX07QjAucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10W3JdO24hPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSxyLG4pfTtCMC51cGxvYWQ9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpIT09bzsrK2kpe2xldCBhPXRbaV0scz1yW2EuaWRdO3MubmVlZHNVcGRhdGUhPT0hMSYmYS5zZXRWYWx1ZShlLHMudmFsdWUsbil9fTtCMC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbil7bGV0IG89ZVtuXTtvLmlkIGluIHQmJnIucHVzaChvKX1yZXR1cm4gcn07ZnVuY3Rpb24gRnVlKGUsdCxyKXtsZXQgbj1lLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gZS5zaGFkZXJTb3VyY2UobixyKSxlLmNvbXBpbGVTaGFkZXIobiksbn12YXIgWG1yPTA7ZnVuY3Rpb24gJG1yKGUpe2xldCB0PWUuc3BsaXQoYApgKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXIrMSsiOiAiK3Rbcl07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIEttcihlKXtzd2l0Y2goZSl7Y2FzZSBRZDpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgV246cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsZSksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gQnVlKGUsdCxyKXtsZXQgbj1lLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxpPWUuZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIG4mJmk9PT0iIj8iIjpyLnRvVXBwZXJDYXNlKCkrYAoKYCtpK2AKCmArJG1yKGUuZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiBabXIoZSx0KXtsZXQgcj1LbXIodCk7cmV0dXJuInZlYzQgIitlKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrclswXStyWzFdKyI7IH0ifWZ1bmN0aW9uIEptcihlLHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIGFmZTpyPSJMaW5lYXIiO2JyZWFrO2Nhc2Ugc2ZlOnI9IlJlaW5oYXJkIjticmVhaztjYXNlIGxmZTpyPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgY2ZlOnI9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgdWZlOnI9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxyPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrZSsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIityKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gUW1yKGUpe3JldHVybltlLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8ZS5jbGVhcmNvYXROb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmd8fGUuc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGUuZXh0ZW5zaW9uRnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixlLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwfHxlLnRyYW5zbWlzc2lvbikmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoSFApLmpvaW4oYApgKX1mdW5jdGlvbiB0Z3IoZSl7bGV0IHQ9W107Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07biE9PSExJiZ0LnB1c2goIiNkZWZpbmUgIityKyIgIituKX1yZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gZWdyKGUsdCl7bGV0IHI9e30sbj1lLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG89ZS5nZXRBY3RpdmVBdHRyaWIodCxpKSxhPW8ubmFtZSxzPTE7by50eXBlPT09MzU2NzQmJihzPTIpLG8udHlwZT09PTM1Njc1JiYocz0zKSxvLnR5cGU9PT0zNTY3NiYmKHM9NCksclthXT17dHlwZTpvLnR5cGUsbG9jYXRpb246ZS5nZXRBdHRyaWJMb2NhdGlvbih0LGEpLGxvY2F0aW9uU2l6ZTpzfX1yZXR1cm4gcn1mdW5jdGlvbiBIUChlKXtyZXR1cm4gZSE9PSIifWZ1bmN0aW9uIEh1ZShlLHQpe3JldHVybiBlLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBWdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciByZ3I9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBKdXQoZSl7cmV0dXJuIGUucmVwbGFjZShyZ3IsbmdyKX1mdW5jdGlvbiBuZ3IoZSx0KXtsZXQgcj1oclt0XTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gSnV0KHIpfXZhciBpZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxvZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBVdWUoZSl7cmV0dXJuIGUucmVwbGFjZShvZ3IsamZlKS5yZXBsYWNlKGlncixhZ3IpfWZ1bmN0aW9uIGFncihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksamZlKGUsdCxyLG4pfWZ1bmN0aW9uIGpmZShlLHQscixuKXtsZXQgaT0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChyKTtvKyspaSs9bi5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIGl9ZnVuY3Rpb24gcXVlKGUpe2xldCB0PSJwcmVjaXNpb24gIitlLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtlLnByZWNpc2lvbisiIGludDsiO3JldHVybiBlLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDplLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gc2dyKGUpe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIGUuc2hhZG93TWFwVHlwZT09PUNodD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOmUuc2hhZG93TWFwVHlwZT09PUZoZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6ZS5zaGFkb3dNYXBUeXBlPT09RjMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGxncihlKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuZW52TWFwTW9kZSl7Y2FzZSBueDpjYXNlIGl4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgeE06Y2FzZSB6Njp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBjZ3IoZSl7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSB6Njp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiB1Z3IoZSl7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihlLmVudk1hcClzd2l0Y2goZS5jb21iaW5lKXtjYXNlIE82OnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBpZmU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBvZmU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gaGdyKGUsdCxyLG4pe2xldCBpPWUuZ2V0Q29udGV4dCgpLG89ci5kZWZpbmVzLGE9ci52ZXJ0ZXhTaGFkZXIscz1yLmZyYWdtZW50U2hhZGVyLGw9c2dyKHIpLGM9bGdyKHIpLHU9Y2dyKHIpLGg9dWdyKHIpLGY9ci5pc1dlYkdMMj8iIjpRbXIocikscD10Z3IobyksZD1pLmNyZWF0ZVByb2dyYW0oKSxnLF8seT1yLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK3IuZ2xzbFZlcnNpb24rYApgOiIiO3IuaXNSYXdTaGFkZXJNYXRlcmlhbD8oZz1bcF0uZmlsdGVyKEhQKS5qb2luKGAKYCksZy5sZW5ndGg+MCYmKGcrPWAKYCksXz1bZixwXS5maWx0ZXIoSFApLmpvaW4oYApgKSxfLmxlbmd0aD4wJiYoXys9YApgKSk6KGc9W3F1ZShyKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3Iuc2hhZGVyTmFtZSxwLHIuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLHIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK3IubWF4Qm9uZXMsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsci5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHIuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixyLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHIubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHIuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixyLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsci5kaXNwbGFjZW1lbnRNYXAmJnIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHIudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixyLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixyLm1vcnBoTm9ybWFscyYmci5mbGF0U2hhZGluZz09PSExPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHIubW9ycGhUYXJnZXRzJiZyLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIityLm1vcnBoVGFyZ2V0c0NvdW50OiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCIJYXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiCWF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIglhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIglhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIglhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIgkjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIgkjZWxzZSIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIgkjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCIJYXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLGAKYF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXz1bZixxdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLnVzZUZvZyYmci5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsci51c2VGb2cmJnIuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsci5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsci5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixyLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsci5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixyLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixyLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixyLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsci5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsci5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9yc3x8ci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixyLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLHIudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsci51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsci5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmci5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoci5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxyLmVudk1hcCkmJnIucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixyLnRvbmVNYXBwaW5nIT09S2Q/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixyLnRvbmVNYXBwaW5nIT09S2Q/aHIudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixyLnRvbmVNYXBwaW5nIT09S2Q/Sm1yKCJ0b25lTWFwcGluZyIsci50b25lTWFwcGluZyk6IiIsci5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixyLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixoci5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxabXIoImxpbmVhclRvT3V0cHV0VGV4ZWwiLHIub3V0cHV0RW5jb2RpbmcpLHIuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIityLmRlcHRoUGFja2luZzoiIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApKSxhPUp1dChhKSxhPUh1ZShhLHIpLGE9VnVlKGEscikscz1KdXQocykscz1IdWUocyxyKSxzPVZ1ZShzLHIpLGE9VXVlKGEpLHM9VXVlKHMpLHIuaXNXZWJHTDImJnIuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYoeT1gI3ZlcnNpb24gMzAwIGVzCmAsZz1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK2csXz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCtfKTtsZXQgeD15K2crYSxiPXkrXytzLFM9RnVlKGksMzU2MzMseCksQz1GdWUoaSwzNTYzMixiKTtpZihpLmF0dGFjaFNoYWRlcihkLFMpLGkuYXR0YWNoU2hhZGVyKGQsQyksci5pbmRleDBBdHRyaWJ1dGVOYW1lIT09dm9pZCAwP2kuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCxyLmluZGV4MEF0dHJpYnV0ZU5hbWUpOnIubW9ycGhUYXJnZXRzPT09ITAmJmkuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCwicG9zaXRpb24iKSxpLmxpbmtQcm9ncmFtKGQpLGUuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2xldCBPPWkuZ2V0UHJvZ3JhbUluZm9Mb2coZCkudHJpbSgpLEQ9aS5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSxCPWkuZ2V0U2hhZGVySW5mb0xvZyhDKS50cmltKCksST0hMCxMPSEwO2lmKGkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE0KT09PSExKXtJPSExO2xldCBSPUJ1ZShpLFMsInZlcnRleCIpLEY9QnVlKGksQywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK2kuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIraS5nZXRQcm9ncmFtUGFyYW1ldGVyKGQsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArTytgCmArUitgCmArRil9ZWxzZSBPIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixPKTooRD09PSIifHxCPT09IiIpJiYoTD0hMSk7TCYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOkkscHJvZ3JhbUxvZzpPLHZlcnRleFNoYWRlcjp7bG9nOkQscHJlZml4Omd9LGZyYWdtZW50U2hhZGVyOntsb2c6QixwcmVmaXg6X319KX1pLmRlbGV0ZVNoYWRlcihTKSxpLmRlbGV0ZVNoYWRlcihDKTtsZXQgUDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPW5ldyBCMChpLGQpKSxQfTtsZXQgaztyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGs9PT12b2lkIDAmJihrPWVncihpLGQpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksaS5kZWxldGVQcm9ncmFtKGQpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1yLnNoYWRlck5hbWUsdGhpcy5pZD1YbXIrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09ZCx0aGlzLnZlcnRleFNoYWRlcj1TLHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfXZhciBmZ3I9MCxRdXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCByPXQudmVydGV4U2hhZGVyLG49dC5mcmFnbWVudFNoYWRlcixpPXRoaXMuX2dldFNoYWRlclN0YWdlKHIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UobiksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiBhLmhhcyhpKT09PSExJiYoYS5hZGQoaSksaS51c2VkVGltZXMrKyksYS5oYXMobyk9PT0hMSYmKGEuYWRkKG8pLG8udXNlZFRpbWVzKyspLHRoaXN9cmVtb3ZlKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZS5nZXQodCk7Zm9yKGxldCBuIG9mIHIpbi51c2VkVGltZXMtLSxuLnVzZWRUaW1lcz09PTAmJnRoaXMuc2hhZGVyQ2FjaGUuZGVsZXRlKG4pO3JldHVybiB0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKHQpLHRoaXN9Z2V0VmVydGV4U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQudmVydGV4U2hhZGVyKS5pZH1nZXRGcmFnbWVudFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LmZyYWdtZW50U2hhZGVyKS5pZH1kaXNwb3NlKCl7dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpLHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpfV9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZTtyZXR1cm4gci5oYXModCk9PT0hMSYmci5zZXQodCxuZXcgU2V0KSxyLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IHI9dGhpcy5zaGFkZXJDYWNoZTtpZihyLmhhcyh0KT09PSExKXtsZXQgbj1uZXcgdGh0O3Iuc2V0KHQsbil9cmV0dXJuIHIuZ2V0KHQpfX0sdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1mZ3IrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZnVuY3Rpb24gcGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPW5ldyBYMyxsPW5ldyBRdXQsYz1bXSx1PWkuaXNXZWJHTDIsaD1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLGQ9aS52ZXJ0ZXhUZXh0dXJlcyxnPWkucHJlY2lzaW9uLF89e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiB5KEkpe2xldCBSPUkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigocC0yMCkvNCksVT1NYXRoLm1pbih6LFIubGVuZ3RoKTtyZXR1cm4gVTxSLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitSLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1UrIi4iKSwwKTpVfX1mdW5jdGlvbiB4KEksTCxSLEYseil7bGV0IFU9Ri5mb2csVz1JLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFo9KEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9yOnQpLmdldChJLmVudk1hcHx8VykscnQ9X1tJLnR5cGVdLG90PXouaXNTa2lubmVkTWVzaD95KHopOjA7SS5wcmVjaXNpb24hPT1udWxsJiYoZz1pLmdldE1heFByZWNpc2lvbihJLnByZWNpc2lvbiksZyE9PUkucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsSS5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixnLCJpbnN0ZWFkLiIpKTtsZXQgc3QsU3QsYnQsTXQ7aWYocnQpe2xldCBYPWFoW3J0XTtzdD1YLnZlcnRleFNoYWRlcixTdD1YLmZyYWdtZW50U2hhZGVyfWVsc2Ugc3Q9SS52ZXJ0ZXhTaGFkZXIsU3Q9SS5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShJKSxidD1sLmdldFZlcnRleFNoYWRlcklEKEkpLE10PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChJKTtsZXQgbHQ9ZS5nZXRSZW5kZXJUYXJnZXQoKSxLdD1JLmFscGhhVGVzdD4wLF90PUkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6cnQsc2hhZGVyTmFtZTpJLnR5cGUsdmVydGV4U2hhZGVyOnN0LGZyYWdtZW50U2hhZGVyOlN0LGRlZmluZXM6SS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmJ0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6TXQsaXNSYXdTaGFkZXJNYXRlcmlhbDpJLmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjpJLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpnLGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bHQ9PT1udWxsP2Uub3V0cHV0RW5jb2Rpbmc6bHQuaXNYUlJlbmRlclRhcmdldD09PSEwP2x0LnRleHR1cmUuZW5jb2Rpbmc6UWQsbWFwOiEhSS5tYXAsbWF0Y2FwOiEhSS5tYXRjYXAsZW52TWFwOiEhWixlbnZNYXBNb2RlOlomJloubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFaJiYoWi5tYXBwaW5nPT09eE18fFoubWFwcGluZz09PXo2KSxsaWdodE1hcDohIUkubGlnaHRNYXAsYW9NYXA6ISFJLmFvTWFwLGVtaXNzaXZlTWFwOiEhSS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhSS5idW1wTWFwLG5vcm1hbE1hcDohIUkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PUxmZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09YXgsZGVjb2RlVmlkZW9UZXh0dXJlOiEhSS5tYXAmJkkubWFwLmlzVmlkZW9UZXh0dXJlPT09ITAmJkkubWFwLmVuY29kaW5nPT09V24sY2xlYXJjb2F0Ol90LGNsZWFyY29hdE1hcDpfdCYmISFJLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6X3QmJiEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOl90JiYhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUkuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUkuYWxwaGFNYXAsYWxwaGFUZXN0Okt0LGFscGhhV3JpdGU6SS5hbHBoYVdyaXRlfHxJLnRyYW5zcGFyZW50LGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxzaGVlbjpJLnNoZWVuPjAsc2hlZW5Db2xvck1hcDohIUkuc2hlZW5Db2xvck1hcCxzaGVlblJvdWdobmVzc01hcDohIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdHJhbnNtaXNzaW9uOkkudHJhbnNtaXNzaW9uPjAsdHJhbnNtaXNzaW9uTWFwOiEhSS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhSS50aGlja25lc3NNYXAsY29tYmluZTpJLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFJLm5vcm1hbE1hcCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6SS52ZXJ0ZXhDb2xvcnM9PT0hMCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx2ZXJ0ZXhVdnM6ISFJLm1hcHx8ISFJLmJ1bXBNYXB8fCEhSS5ub3JtYWxNYXB8fCEhSS5zcGVjdWxhck1hcHx8ISFJLmFscGhhTWFwfHwhIUkuZW1pc3NpdmVNYXB8fCEhSS5yb3VnaG5lc3NNYXB8fCEhSS5tZXRhbG5lc3NNYXB8fCEhSS5jbGVhcmNvYXRNYXB8fCEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fCEhSS5jbGVhcmNvYXROb3JtYWxNYXB8fCEhSS5kaXNwbGFjZW1lbnRNYXB8fCEhSS50cmFuc21pc3Npb25NYXB8fCEhSS50aGlja25lc3NNYXB8fCEhSS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISFJLnNwZWN1bGFyQ29sb3JNYXB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdXZzVmVydGV4T25seTohKCEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxJLnRyYW5zbWlzc2lvbj4wfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuPjB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXApJiYhIUkuZGlzcGxhY2VtZW50TWFwLGZvZzohIVUsdXNlRm9nOkkuZm9nLGZvZ0V4cDI6VSYmVS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsc2tpbm5pbmc6ei5pc1NraW5uZWRNZXNoPT09ITAmJm90PjAsbWF4Qm9uZXM6b3QsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpMLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpMLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOkwuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6TC5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpMLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpMLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpMLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOkwuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDplLnNoYWRvd01hcC5lbmFibGVkJiZSLmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6ZS5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzpJLnRvbmVNYXBwZWQ/ZS50b25lTWFwcGluZzpLZCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czplLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpJLnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDpJLnNpZGU9PT1MMSxmbGlwU2lkZWQ6SS5zaWRlPT09SWksZGVwdGhQYWNraW5nOkkuZGVwdGhQYWNraW5nIT09dm9pZCAwP0kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6SS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpJLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKEkpe2xldCBMPVtdO2lmKEkuc2hhZGVySUQ/TC5wdXNoKEkuc2hhZGVySUQpOihMLnB1c2goSS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksTC5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLEkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IFIgaW4gSS5kZWZpbmVzKUwucHVzaChSKSxMLnB1c2goSS5kZWZpbmVzW1JdKTtyZXR1cm4gSS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihTKEwsSSksQyhMLEkpLEwucHVzaChlLm91dHB1dEVuY29kaW5nKSksTC5wdXNoKEkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxMLmpvaW4oKX1mdW5jdGlvbiBTKEksTCl7SS5wdXNoKEwucHJlY2lzaW9uKSxJLnB1c2goTC5vdXRwdXRFbmNvZGluZyksSS5wdXNoKEwuZW52TWFwTW9kZSksSS5wdXNoKEwuY29tYmluZSksSS5wdXNoKEwudmVydGV4VXZzKSxJLnB1c2goTC5mb2dFeHAyKSxJLnB1c2goTC5zaXplQXR0ZW51YXRpb24pLEkucHVzaChMLm1heEJvbmVzKSxJLnB1c2goTC5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKEwubnVtRGlyTGlnaHRzKSxJLnB1c2goTC5udW1Qb2ludExpZ2h0cyksSS5wdXNoKEwubnVtU3BvdExpZ2h0cyksSS5wdXNoKEwubnVtSGVtaUxpZ2h0cyksSS5wdXNoKEwubnVtUmVjdEFyZWFMaWdodHMpLEkucHVzaChMLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVNwb3RMaWdodFNoYWRvd3MpLEkucHVzaChMLnNoYWRvd01hcFR5cGUpLEkucHVzaChMLnRvbmVNYXBwaW5nKSxJLnB1c2goTC5udW1DbGlwcGluZ1BsYW5lcyksSS5wdXNoKEwubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKEwuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gQyhJLEwpe3MuZGlzYWJsZUFsbCgpLEwuaXNXZWJHTDImJnMuZW5hYmxlKDApLEwuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSksTC5pbnN0YW5jaW5nJiZzLmVuYWJsZSgyKSxMLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMyksTC5tYXAmJnMuZW5hYmxlKDQpLEwubWF0Y2FwJiZzLmVuYWJsZSg1KSxMLmVudk1hcCYmcy5lbmFibGUoNiksTC5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLEwubGlnaHRNYXAmJnMuZW5hYmxlKDgpLEwuYW9NYXAmJnMuZW5hYmxlKDkpLEwuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxMLmJ1bXBNYXAmJnMuZW5hYmxlKDExKSxMLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLEwub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxMLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmcy5lbmFibGUoMTQpLEwuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSksTC5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxMLmNsZWFyY29hdFJvdWdobmVzc01hcCYmcy5lbmFibGUoMTcpLEwuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCksTC5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxMLnNwZWN1bGFyTWFwJiZzLmVuYWJsZSgyMCksTC5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLEwuZ3JhZGllbnRNYXAmJnMuZW5hYmxlKDIzKSxMLmFscGhhTWFwJiZzLmVuYWJsZSgyNCksTC5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxMLnZlcnRleENvbG9ycyYmcy5lbmFibGUoMjYpLEwudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNyksTC52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxMLnZlcnRleFRhbmdlbnRzJiZzLmVuYWJsZSgyOSksTC51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCksTC5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxMLnVzZUZvZyYmcy5lbmFibGUoMCksTC5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSksTC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxMLnNraW5uaW5nJiZzLmVuYWJsZSgzKSxMLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLEwubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxMLm1vcnBoTm9ybWFscyYmcy5lbmFibGUoNiksTC5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLEwuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCksTC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmcy5lbmFibGUoOSksTC5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLEwuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSksTC5kZXB0aFBhY2tpbmcmJnMuZW5hYmxlKDEyKSxMLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLEwuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxMLnNwZWN1bGFyQ29sb3JNYXAmJnMuZW5hYmxlKDE1KSxMLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLEwudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNyksTC50aGlja25lc3NNYXAmJnMuZW5hYmxlKDE4KSxMLnNoZWVuJiZzLmVuYWJsZSgxOSksTC5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCksTC5zaGVlblJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLEwuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksSS5wdXNoKHMubWFzayl9ZnVuY3Rpb24gUChJKXtsZXQgTD1fW0kudHlwZV0sUjtpZihMKXtsZXQgRj1haFtMXTtSPXpmZS5jbG9uZShGLnVuaWZvcm1zKX1lbHNlIFI9SS51bmlmb3JtcztyZXR1cm4gUn1mdW5jdGlvbiBrKEksTCl7bGV0IFI7Zm9yKGxldCBGPTAsej1jLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1jW0ZdO2lmKFUuY2FjaGVLZXk9PT1MKXtSPVUsKytSLnVzZWRUaW1lczticmVha319cmV0dXJuIFI9PT12b2lkIDAmJihSPW5ldyBoZ3IoZSxMLEksbyksYy5wdXNoKFIpKSxSfWZ1bmN0aW9uIE8oSSl7aWYoLS1JLnVzZWRUaW1lcz09PTApe2xldCBMPWMuaW5kZXhPZihJKTtjW0xdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxJLmRlc3Ryb3koKX19ZnVuY3Rpb24gRChJKXtsLnJlbW92ZShJKX1mdW5jdGlvbiBCKCl7bC5kaXNwb3NlKCl9cmV0dXJue2dldFBhcmFtZXRlcnM6eCxnZXRQcm9ncmFtQ2FjaGVLZXk6YixnZXRVbmlmb3JtczpQLGFjcXVpcmVQcm9ncmFtOmsscmVsZWFzZVByb2dyYW06TyxyZWxlYXNlU2hhZGVyQ2FjaGU6RCxwcm9ncmFtczpjLGRpc3Bvc2U6Qn19ZnVuY3Rpb24gZGdyKCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdChvKXtsZXQgYT1lLmdldChvKTtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30sZS5zZXQobyxhKSksYX1mdW5jdGlvbiByKG8pe2UuZGVsZXRlKG8pfWZ1bmN0aW9uIG4obyxhLHMpe2UuZ2V0KG8pW2FdPXN9ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LHJlbW92ZTpyLHVwZGF0ZTpuLGRpc3Bvc2U6aX19ZnVuY3Rpb24gbWdyKGUsdCl7cmV0dXJuIGUuZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9lLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOmUucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP2UucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjplLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9lLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6ZS56IT09dC56P2Uuei10Lno6ZS5pZC10LmlkfWZ1bmN0aW9uIEd1ZShlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS56IT09dC56P3Quei1lLno6ZS5pZC10LmlkfWZ1bmN0aW9uIFd1ZSgpe2xldCBlPVtdLHQ9MCxyPVtdLG49W10saT1bXTtmdW5jdGlvbiBvKCl7dD0wLHIubGVuZ3RoPTAsbi5sZW5ndGg9MCxpLmxlbmd0aD0wfWZ1bmN0aW9uIGEoaCxmLHAsZCxnLF8pe2xldCB5PWVbdF07cmV0dXJuIHk9PT12b2lkIDA/KHk9e2lkOmguaWQsb2JqZWN0OmgsZ2VvbWV0cnk6ZixtYXRlcmlhbDpwLGdyb3VwT3JkZXI6ZCxyZW5kZXJPcmRlcjpoLnJlbmRlck9yZGVyLHo6Zyxncm91cDpffSxlW3RdPXkpOih5LmlkPWguaWQseS5vYmplY3Q9aCx5Lmdlb21ldHJ5PWYseS5tYXRlcmlhbD1wLHkuZ3JvdXBPcmRlcj1kLHkucmVuZGVyT3JkZXI9aC5yZW5kZXJPcmRlcix5Lno9Zyx5Lmdyb3VwPV8pLHQrKyx5fWZ1bmN0aW9uIHMoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi5wdXNoKHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnB1c2goeSk6ci5wdXNoKHkpfWZ1bmN0aW9uIGwoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi51bnNoaWZ0KHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnVuc2hpZnQoeSk6ci51bnNoaWZ0KHkpfWZ1bmN0aW9uIGMoaCxmKXtyLmxlbmd0aD4xJiZyLnNvcnQoaHx8bWdyKSxuLmxlbmd0aD4xJiZuLnNvcnQoZnx8R3VlKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8R3VlKX1mdW5jdGlvbiB1KCl7Zm9yKGxldCBoPXQsZj1lLmxlbmd0aDtoPGY7aCsrKXtsZXQgcD1lW2hdO2lmKHAuaWQ9PT1udWxsKWJyZWFrO3AuaWQ9bnVsbCxwLm9iamVjdD1udWxsLHAuZ2VvbWV0cnk9bnVsbCxwLm1hdGVyaWFsPW51bGwscC5ncm91cD1udWxsfX1yZXR1cm57b3BhcXVlOnIsdHJhbnNtaXNzaXZlOm4sdHJhbnNwYXJlbnQ6aSxpbml0Om8scHVzaDpzLHVuc2hpZnQ6bCxmaW5pc2g6dSxzb3J0OmN9fWZ1bmN0aW9uIGdncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobixpKXtsZXQgbztyZXR1cm4gZS5oYXMobik9PT0hMT8obz1uZXcgV3VlLGUuc2V0KG4sW29dKSk6aT49ZS5nZXQobikubGVuZ3RoPyhvPW5ldyBXdWUsZS5nZXQobikucHVzaChvKSk6bz1lLmdldChuKVtpXSxvfWZ1bmN0aW9uIHIoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxkaXNwb3NlOnJ9fWZ1bmN0aW9uIF9ncigpe2xldCBlPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoZVt0LmlkXSE9PXZvaWQgMClyZXR1cm4gZVt0LmlkXTtsZXQgcjtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixjb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixjb2xvcjpuZXcgbmUsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj17ZGlyZWN0aW9uOm5ldyBqLHNreUNvbG9yOm5ldyBuZSxncm91bmRDb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6cj17Y29sb3I6bmV3IG5lLHBvc2l0aW9uOm5ldyBqLGhhbGZXaWR0aDpuZXcgaixoYWxmSGVpZ2h0Om5ldyBqfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX1mdW5jdGlvbiB5Z3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0fTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX12YXIgdmdyPTA7ZnVuY3Rpb24geGdyKGUsdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShlLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBiZ3IoZSx0KXtsZXQgcj1uZXcgX2dyLG49eWdyKCksaT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKWkucHJvYmUucHVzaChuZXcgaik7bGV0IG89bmV3IGosYT1uZXcgTWUscz1uZXcgTWU7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAscD0wLGQ9MDtmb3IobGV0IEQ9MDtEPDk7RCsrKWkucHJvYmVbRF0uc2V0KDAsMCwwKTtsZXQgZz0wLF89MCx5PTAseD0wLGI9MCxTPTAsQz0wLFA9MDt1LnNvcnQoeGdyKTtsZXQgaz1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgRD0wLEI9dS5sZW5ndGg7RDxCO0QrKyl7bGV0IEk9dVtEXSxMPUkuY29sb3IsUj1JLmludGVuc2l0eSxGPUkuZGlzdGFuY2Usej1JLnNoYWRvdyYmSS5zaGFkb3cubWFwP0kuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoSS5pc0FtYmllbnRMaWdodClmKz1MLnIqUiprLHArPUwuZypSKmssZCs9TC5iKlIqaztlbHNlIGlmKEkuaXNMaWdodFByb2JlKWZvcihsZXQgVT0wO1U8OTtVKyspaS5wcm9iZVtVXS5hZGRTY2FsZWRWZWN0b3IoSS5zaC5jb2VmZmljaWVudHNbVV0sUik7ZWxzZSBpZihJLmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KmspLEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxpLmRpcmVjdGlvbmFsU2hhZG93W2ddPVosaS5kaXJlY3Rpb25hbFNoYWRvd01hcFtnXT16LGkuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZ109SS5zaGFkb3cubWF0cml4LFMrK31pLmRpcmVjdGlvbmFsW2ddPVUsZysrfWVsc2UgaWYoSS5pc1Nwb3RMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksVS5jb2xvci5jb3B5KEwpLm11bHRpcGx5U2NhbGFyKFIqayksVS5kaXN0YW5jZT1GLFUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxVLnBlbnVtYnJhQ29zPU1hdGguY29zKEkuYW5nbGUqKDEtSS5wZW51bWJyYSkpLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5zcG90U2hhZG93W3ldPVosaS5zcG90U2hhZG93TWFwW3ldPXosaS5zcG90U2hhZG93TWF0cml4W3ldPUkuc2hhZG93Lm1hdHJpeCxQKyt9aS5zcG90W3ldPVUseSsrfWVsc2UgaWYoSS5pc1JlY3RBcmVhTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1UuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKSxVLmhhbGZXaWR0aC5zZXQoSS53aWR0aCouNSwwLDApLFUuaGFsZkhlaWdodC5zZXQoMCxJLmhlaWdodCouNSwwKSxpLnJlY3RBcmVhW3hdPVUseCsrfWVsc2UgaWYoSS5pc1BvaW50TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxVLmRpc3RhbmNlPUkuZGlzdGFuY2UsVS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxaLnNoYWRvd0NhbWVyYU5lYXI9Vy5jYW1lcmEubmVhcixaLnNoYWRvd0NhbWVyYUZhcj1XLmNhbWVyYS5mYXIsaS5wb2ludFNoYWRvd1tfXT1aLGkucG9pbnRTaGFkb3dNYXBbX109eixpLnBvaW50U2hhZG93TWF0cml4W19dPUkuc2hhZG93Lm1hdHJpeCxDKyt9aS5wb2ludFtfXT1VLF8rK31lbHNlIGlmKEkuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1Uuc2t5Q29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLGkuaGVtaVtiXT1VLGIrK319eD4wJiYodC5pc1dlYkdMMnx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITA/KGkucmVjdEFyZWFMVEMxPXJlLkxUQ19GTE9BVF8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19GTE9BVF8yKTplLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfSEFMRl8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxpLmFtYmllbnRbMF09ZixpLmFtYmllbnRbMV09cCxpLmFtYmllbnRbMl09ZDtsZXQgTz1pLmhhc2g7KE8uZGlyZWN0aW9uYWxMZW5ndGghPT1nfHxPLnBvaW50TGVuZ3RoIT09X3x8Ty5zcG90TGVuZ3RoIT09eXx8Ty5yZWN0QXJlYUxlbmd0aCE9PXh8fE8uaGVtaUxlbmd0aCE9PWJ8fE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09U3x8Ty5udW1Qb2ludFNoYWRvd3MhPT1DfHxPLm51bVNwb3RTaGFkb3dzIT09UCkmJihpLmRpcmVjdGlvbmFsLmxlbmd0aD1nLGkuc3BvdC5sZW5ndGg9eSxpLnJlY3RBcmVhLmxlbmd0aD14LGkucG9pbnQubGVuZ3RoPV8saS5oZW1pLmxlbmd0aD1iLGkuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPVMsaS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9UyxpLnBvaW50U2hhZG93Lmxlbmd0aD1DLGkucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUMsaS5zcG90U2hhZG93Lmxlbmd0aD1QLGkuc3BvdFNoYWRvd01hcC5sZW5ndGg9UCxpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1TLGkucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUMsaS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1QLE8uZGlyZWN0aW9uYWxMZW5ndGg9ZyxPLnBvaW50TGVuZ3RoPV8sTy5zcG90TGVuZ3RoPXksTy5yZWN0QXJlYUxlbmd0aD14LE8uaGVtaUxlbmd0aD1iLE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPVMsTy5udW1Qb2ludFNoYWRvd3M9QyxPLm51bVNwb3RTaGFkb3dzPVAsaS52ZXJzaW9uPXZncisrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxwPTAsZD0wLGc9MCxfPTAseT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxiPXUubGVuZ3RoO3g8Yjt4Kyspe2xldCBTPXVbeF07aWYoUy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBDPWkuZGlyZWN0aW9uYWxbZl07Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGYrK31lbHNlIGlmKFMuaXNTcG90TGlnaHQpe2xldCBDPWkuc3BvdFtkXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy50YXJnZXQubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnN1YihvKSxDLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksZCsrfWVsc2UgaWYoUy5pc1JlY3RBcmVhTGlnaHQpe2xldCBDPWkucmVjdEFyZWFbZ107Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSkscy5pZGVudGl0eSgpLGEuY29weShTLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHkpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEMuaGFsZldpZHRoLnNldChTLndpZHRoKi41LDAsMCksQy5oYWxmSGVpZ2h0LnNldCgwLFMuaGVpZ2h0Ki41LDApLEMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxDLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLGcrK31lbHNlIGlmKFMuaXNQb2ludExpZ2h0KXtsZXQgQz1pLnBvaW50W3BdO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHArK31lbHNlIGlmKFMuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBDPWkuaGVtaVtfXTtDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLEMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLF8rK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOml9fWZ1bmN0aW9uIFl1ZShlLHQpe2xldCByPW5ldyBiZ3IoZSx0KSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe24ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgpe24ucHVzaChoKX1mdW5jdGlvbiBzKGgpe2kucHVzaChoKX1mdW5jdGlvbiBsKGgpe3Iuc2V0dXAobixoKX1mdW5jdGlvbiBjKGgpe3Iuc2V0dXBWaWV3KG4saCl9cmV0dXJue2luaXQ6byxzdGF0ZTp7bGlnaHRzQXJyYXk6bixzaGFkb3dzQXJyYXk6aSxsaWdodHM6cn0sc2V0dXBMaWdodHM6bCxzZXR1cExpZ2h0c1ZpZXc6YyxwdXNoTGlnaHQ6YSxwdXNoU2hhZG93OnN9fWZ1bmN0aW9uIHdncihlLHQpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4obyxhPTApe2xldCBzO3JldHVybiByLmhhcyhvKT09PSExPyhzPW5ldyBZdWUoZSx0KSxyLnNldChvLFtzXSkpOmE+PXIuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgWXVlKGUsdCksci5nZXQobykucHVzaChzKSk6cz1yLmdldChvKVthXSxzfWZ1bmN0aW9uIGkoKXtyPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOml9fXZhciBlTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9UGZlLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2VNLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciByTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgaix0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3JNLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTZ3I9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxNZ3I9YHVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzOwp1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CiNpbmNsdWRlIDxwYWNraW5nPgp2b2lkIG1haW4oKSB7Cgljb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7CglmbG9hdCBtZWFuID0gMC4wOwoJZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wOwoJZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApOwoJZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7Cglmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHsKCQlmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7CgkJI2lmZGVmIEhPUklaT05UQUxfUEFTUwoJCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGlzdHJpYnV0aW9uLng7CgkJCXNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDsKCQkjZWxzZQoJCQlmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGVwdGg7CgkJCXNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoOwoJCSNlbmRpZgoJfQoJbWVhbiA9IG1lYW4gLyBzYW1wbGVzOwoJc3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlczsKCWZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApOwoJZ2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTsKfWA7ZnVuY3Rpb24gWGZlKGUsdCxyKXtsZXQgbj1uZXcgTjEsaT1uZXcgTHQsbz1uZXcgTHQsYT1uZXcgZW4scz1uZXcgZU0oe2RlcHRoUGFja2luZzpJZmV9KSxsPW5ldyByTSxjPXt9LHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXswOklpLDE6STEsMjpMMX0sZj1uZXcgbGgoe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEx0fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6U2dyLGZyYWdtZW50U2hhZGVyOk1ncn0pLHA9Zi5jbG9uZSgpO3AuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZD1uZXcgUGU7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCBnPW5ldyB0aShkLGYpLF89dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPUNodCx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEMsUCl7aWYoXy5lbmFibGVkPT09ITF8fF8uYXV0b1VwZGF0ZT09PSExJiZfLm5lZWRzVXBkYXRlPT09ITF8fFMubGVuZ3RoPT09MClyZXR1cm47bGV0IGs9ZS5nZXRSZW5kZXJUYXJnZXQoKSxPPWUuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxEPWUuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxCPWUuc3RhdGU7Qi5zZXRCbGVuZGluZygkZCksQi5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLEIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxCLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEk9MCxMPVMubGVuZ3RoO0k8TDtJKyspe2xldCBSPVNbSV0sRj1SLnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsUiwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO2kuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoaS5tdWx0aXBseSh6KSxvLmNvcHkoRi5tYXBTaXplKSwoaS54PnV8fGkueT51KSYmKGkueD51JiYoby54PU1hdGguZmxvb3IodS96LngpLGkueD1vLngqei54LEYubWFwU2l6ZS54PW8ueCksaS55PnUmJihvLnk9TWF0aC5mbG9vcih1L3oueSksaS55PW8ueSp6LnksRi5tYXBTaXplLnk9by55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUYzKXtsZXQgVz17bWluRmlsdGVyOmlpLG1hZ0ZpbHRlcjppaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgdXMoaS54LGkueSxXKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVz17bWluRmlsdGVyOkxpLG1hZ0ZpbHRlcjpMaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1lLnNldFJlbmRlclRhcmdldChGLm1hcCksZS5jbGVhcigpO2xldCBVPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVz0wO1c8VTtXKyspe2xldCBaPUYuZ2V0Vmlld3BvcnQoVyk7YS5zZXQoby54KloueCxvLnkqWi55LG8ueCpaLnosby55KloudyksQi52aWV3cG9ydChhKSxGLnVwZGF0ZU1hdHJpY2VzKFIsVyksbj1GLmdldEZydXN0dW0oKSxiKEMsUCxGLmNhbWVyYSxSLHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyYmeShGLFApLEYubmVlZHNVcGRhdGU9ITF9Xy5uZWVkc1VwZGF0ZT0hMSxlLnNldFJlbmRlclRhcmdldChrLE8sRCl9O2Z1bmN0aW9uIHkoUyxDKXtsZXQgUD10LnVwZGF0ZShnKTtmLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1TLmJsdXJTYW1wbGVzJiYoZi5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMscC5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMsZi5uZWVkc1VwZGF0ZT0hMCxwLm5lZWRzVXBkYXRlPSEwKSxmLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVMubWFwLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcFBhc3MpLGUuY2xlYXIoKSxlLnJlbmRlckJ1ZmZlckRpcmVjdChDLG51bGwsUCxmLGcsbnVsbCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcFBhc3MudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Uy5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVMucmFkaXVzLGUuc2V0UmVuZGVyVGFyZ2V0KFMubWFwKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAscCxnLG51bGwpfWZ1bmN0aW9uIHgoUyxDLFAsayxPLEQsQil7bGV0IEk9bnVsbCxMPWsuaXNQb2ludExpZ2h0PT09ITA/Uy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOlMuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihMIT09dm9pZCAwP0k9TDpJPWsuaXNQb2ludExpZ2h0PT09ITA/bDpzLGUubG9jYWxDbGlwcGluZ0VuYWJsZWQmJlAuY2xpcFNoYWRvd3M9PT0hMCYmUC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxQLmRpc3BsYWNlbWVudE1hcCYmUC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fFAuYWxwaGFNYXAmJlAuYWxwaGFUZXN0PjApe2xldCBSPUkudXVpZCxGPVAudXVpZCx6PWNbUl07ej09PXZvaWQgMCYmKHo9e30sY1tSXT16KTtsZXQgVT16W0ZdO1U9PT12b2lkIDAmJihVPUkuY2xvbmUoKSx6W0ZdPVUpLEk9VX1yZXR1cm4gSS52aXNpYmxlPVAudmlzaWJsZSxJLndpcmVmcmFtZT1QLndpcmVmcmFtZSxCPT09RjM/SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOlAuc2lkZTpJLnNpZGU9UC5zaGFkb3dTaWRlIT09bnVsbD9QLnNoYWRvd1NpZGU6aFtQLnNpZGVdLEkuYWxwaGFNYXA9UC5hbHBoYU1hcCxJLmFscGhhVGVzdD1QLmFscGhhVGVzdCxJLmNsaXBTaGFkb3dzPVAuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz1QLmNsaXBwaW5nUGxhbmVzLEkuY2xpcEludGVyc2VjdGlvbj1QLmNsaXBJbnRlcnNlY3Rpb24sSS5kaXNwbGFjZW1lbnRNYXA9UC5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT1QLmRpc3BsYWNlbWVudFNjYWxlLEkuZGlzcGxhY2VtZW50Qmlhcz1QLmRpc3BsYWNlbWVudEJpYXMsSS53aXJlZnJhbWVMaW5ld2lkdGg9UC53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9UC5saW5ld2lkdGgsay5pc1BvaW50TGlnaHQ9PT0hMCYmSS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJihJLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihrLm1hdHJpeFdvcmxkKSxJLm5lYXJEaXN0YW5jZT1PLEkuZmFyRGlzdGFuY2U9RCksSX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7aWYoUy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoQy5sYXllcnMpJiYoUy5pc01lc2h8fFMuaXNMaW5lfHxTLmlzUG9pbnRzKSYmKFMuY2FzdFNoYWRvd3x8Uy5yZWNlaXZlU2hhZG93JiZPPT09RjMpJiYoIVMuZnJ1c3R1bUN1bGxlZHx8bi5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7Uy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhQLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKTtsZXQgST10LnVwZGF0ZShTKSxMPVMubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMKSl7bGV0IFI9SS5ncm91cHM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1SW0ZdLFc9TFtVLm1hdGVyaWFsSW5kZXhdO2lmKFcmJlcudmlzaWJsZSl7bGV0IFo9eChTLEksVyxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxaLFMsVSl9fX1lbHNlIGlmKEwudmlzaWJsZSl7bGV0IFI9eChTLEksTCxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxSLFMsbnVsbCl9fWxldCBCPVMuY2hpbGRyZW47Zm9yKGxldCBJPTAsTD1CLmxlbmd0aDtJPEw7SSsrKWIoQltJXSxDLFAsayxPKX19ZnVuY3Rpb24gRWdyKGUsdCxyKXtsZXQgbj1yLmlzV2ViR0wyO2Z1bmN0aW9uIGkoKXtsZXQgYXQ9ITEsc2U9bmV3IGVuLFF0PW51bGwsQ2U9bmV3IGVuKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFB0KXtRdCE9PVB0JiYhYXQmJihlLmNvbG9yTWFzayhQdCxQdCxQdCxQdCksUXQ9UHQpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCxOdCx6ZSx5bixXaSl7V2k9PT0hMCYmKFB0Kj15bixOdCo9eW4semUqPXluKSxzZS5zZXQoUHQsTnQsemUseW4pLENlLmVxdWFscyhzZSk9PT0hMSYmKGUuY2xlYXJDb2xvcihQdCxOdCx6ZSx5biksQ2UuY29weShzZSkpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLFF0PW51bGwsQ2Uuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIG8oKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oUHQpe1B0P2x0KDI5MjkpOkt0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFB0KXtzZSE9PVB0JiYhYXQmJihlLmRlcHRoTWFzayhQdCksc2U9UHQpfSxzZXRGdW5jOmZ1bmN0aW9uKFB0KXtpZihRdCE9PVB0KXtpZihQdClzd2l0Y2goUHQpe2Nhc2UgWmhlOmUuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSBKaGU6ZS5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIFFoZTplLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgaVU6ZS5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHRmZTplLmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIG5mZTplLmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6ZS5kZXB0aEZ1bmMoNTE1KX1lbHNlIGUuZGVwdGhGdW5jKDUxNSk7UXQ9UHR9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCl7Q2UhPT1QdCYmKGUuY2xlYXJEZXB0aChQdCksQ2U9UHQpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsfX19ZnVuY3Rpb24gYSgpe2xldCBhdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oQXIpe2F0fHwoQXI/bHQoMjk2MCk6S3QoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKEFyKXtzZSE9PUFyJiYhYXQmJihlLnN0ZW5jaWxNYXNrKEFyKSxzZT1Bcil9LHNldEZ1bmM6ZnVuY3Rpb24oQXIsUGEsaG8peyhRdCE9PUFyfHxDZSE9PVBhfHxQdCE9PWhvKSYmKGUuc3RlbmNpbEZ1bmMoQXIsUGEsaG8pLFF0PUFyLENlPVBhLFB0PWhvKX0sc2V0T3A6ZnVuY3Rpb24oQXIsUGEsaG8peyhOdCE9PUFyfHx6ZSE9PVBhfHx5biE9PWhvKSYmKGUuc3RlbmNpbE9wKEFyLFBhLGhvKSxOdD1Bcix6ZT1QYSx5bj1obyl9LHNldExvY2tlZDpmdW5jdGlvbihBcil7YXQ9QXJ9LHNldENsZWFyOmZ1bmN0aW9uKEFyKXtXaSE9PUFyJiYoZS5jbGVhclN0ZW5jaWwoQXIpLFdpPUFyKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGx9fX1sZXQgcz1uZXcgaSxsPW5ldyBvLGM9bmV3IGEsdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLFI9ZS5nZXRQYXJhbWV0ZXIoMzU2NjEpLEY9ITEsej0wLFU9ZS5nZXRQYXJhbWV0ZXIoNzkzOCk7VS5pbmRleE9mKCJXZWJHTCIpIT09LTE/KHo9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49MSk6VS5pbmRleE9mKCJPcGVuR0wgRVMiKSE9PS0xJiYoej1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49Mik7bGV0IFc9bnVsbCxaPXt9LHJ0PWUuZ2V0UGFyYW1ldGVyKDMwODgpLG90PWUuZ2V0UGFyYW1ldGVyKDI5NzgpLHN0PW5ldyBlbigpLmZyb21BcnJheShydCksU3Q9bmV3IGVuKCkuZnJvbUFycmF5KG90KTtmdW5jdGlvbiBidChhdCxzZSxRdCl7bGV0IENlPW5ldyBVaW50OEFycmF5KDQpLFB0PWUuY3JlYXRlVGV4dHVyZSgpO2UuYmluZFRleHR1cmUoYXQsUHQpLGUudGV4UGFyYW1ldGVyaShhdCwxMDI0MSw5NzI4KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDAsOTcyOCk7Zm9yKGxldCBOdD0wO050PFF0O050KyspZS50ZXhJbWFnZTJEKHNlK050LDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsQ2UpO3JldHVybiBQdH1sZXQgTXQ9e307TXRbMzU1M109YnQoMzU1MywzNTUzLDEpLE10WzM0MDY3XT1idCgzNDA2NywzNDA2OSw2KSxzLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxsdCgyOTI5KSxsLnNldEZ1bmMoaVUpLGh0KCExKSx3dChTdXQpLGx0KDI4ODQpLHEoJGQpO2Z1bmN0aW9uIGx0KGF0KXt1W2F0XSE9PSEwJiYoZS5lbmFibGUoYXQpLHVbYXRdPSEwKX1mdW5jdGlvbiBLdChhdCl7dVthdF0hPT0hMSYmKGUuZGlzYWJsZShhdCksdVthdF09ITEpfWZ1bmN0aW9uIF90KGF0LHNlKXtyZXR1cm4gaFthdF0hPT1zZT8oZS5iaW5kRnJhbWVidWZmZXIoYXQsc2UpLGhbYXRdPXNlLG4mJihhdD09PTM2MDA5JiYoaFszNjE2MF09c2UpLGF0PT09MzYxNjAmJihoWzM2MDA5XT1zZSkpLCEwKTohMX1mdW5jdGlvbiBjdChhdCxzZSl7bGV0IFF0PXAsQ2U9ITE7aWYoYXQpaWYoUXQ9Zi5nZXQoc2UpLFF0PT09dm9pZCAwJiYoUXQ9W10sZi5zZXQoc2UsUXQpKSxhdC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgUHQ9YXQudGV4dHVyZTtpZihRdC5sZW5ndGghPT1QdC5sZW5ndGh8fFF0WzBdIT09MzYwNjQpe2ZvcihsZXQgTnQ9MCx6ZT1QdC5sZW5ndGg7TnQ8emU7TnQrKylRdFtOdF09MzYwNjQrTnQ7UXQubGVuZ3RoPVB0Lmxlbmd0aCxDZT0hMH19ZWxzZSBRdFswXSE9PTM2MDY0JiYoUXRbMF09MzYwNjQsQ2U9ITApO2Vsc2UgUXRbMF0hPT0xMDI5JiYoUXRbMF09MTAyOSxDZT0hMCk7Q2UmJihyLmlzV2ViR0wyP2UuZHJhd0J1ZmZlcnMoUXQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKFF0KSl9ZnVuY3Rpb24gWChhdCl7cmV0dXJuIGQhPT1hdD8oZS51c2VQcm9ncmFtKGF0KSxkPWF0LCEwKTohMX1sZXQgZXQ9e1tNMV06MzI3NzQsW0hoZV06MzI3NzgsW1ZoZV06MzI3Nzl9O2lmKG4pZXRbQ3V0XT0zMjc3NSxldFtBdXRdPTMyNzc2O2Vsc2V7bGV0IGF0PXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7YXQhPT1udWxsJiYoZXRbQ3V0XT1hdC5NSU5fRVhULGV0W0F1dF09YXQuTUFYX0VYVCl9bGV0IGR0PXtbVWhlXTowLFtxaGVdOjEsW0doZV06NzY4LFtQaHRdOjc3MCxbS2hlXTo3NzYsW1hoZV06Nzc0LFtZaGVdOjc3MixbV2hlXTo3NjksW0lodF06NzcxLFskaGVdOjc3NSxbamhlXTo3NzN9O2Z1bmN0aW9uIHEoYXQsc2UsUXQsQ2UsUHQsTnQsemUseW4pe2lmKGF0PT09JGQpe2c9PT0hMCYmKEt0KDMwNDIpLGc9ITEpO3JldHVybn1pZihnPT09ITEmJihsdCgzMDQyKSxnPSEwKSxhdCE9PUJoZSl7aWYoYXQhPT1ffHx5biE9PWspe2lmKCh5IT09TTF8fFMhPT1NMSkmJihlLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9TTEsUz1NMSkseW4pc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgTXV0OmUuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhdCk7YnJlYWt9ZWxzZSBzd2l0Y2goYXQpe2Nhc2UgVjM6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfXg9bnVsbCxiPW51bGwsQz1udWxsLFA9bnVsbCxfPWF0LGs9eW59cmV0dXJufVB0PVB0fHxzZSxOdD1OdHx8UXQsemU9emV8fENlLChzZSE9PXl8fFB0IT09UykmJihlLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShldFtzZV0sZXRbUHRdKSx5PXNlLFM9UHQpLChRdCE9PXh8fENlIT09Ynx8TnQhPT1DfHx6ZSE9PVApJiYoZS5ibGVuZEZ1bmNTZXBhcmF0ZShkdFtRdF0sZHRbQ2VdLGR0W050XSxkdFt6ZV0pLHg9UXQsYj1DZSxDPU50LFA9emUpLF89YXQsaz1udWxsfWZ1bmN0aW9uIHB0KGF0LHNlKXthdC5zaWRlPT09TDE/S3QoMjg4NCk6bHQoMjg4NCk7bGV0IFF0PWF0LnNpZGU9PT1JaTtzZSYmKFF0PSFRdCksaHQoUXQpLGF0LmJsZW5kaW5nPT09VjMmJmF0LnRyYW5zcGFyZW50PT09ITE/cSgkZCk6cShhdC5ibGVuZGluZyxhdC5ibGVuZEVxdWF0aW9uLGF0LmJsZW5kU3JjLGF0LmJsZW5kRHN0LGF0LmJsZW5kRXF1YXRpb25BbHBoYSxhdC5ibGVuZFNyY0FscGhhLGF0LmJsZW5kRHN0QWxwaGEsYXQucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoYXQuZGVwdGhGdW5jKSxsLnNldFRlc3QoYXQuZGVwdGhUZXN0KSxsLnNldE1hc2soYXQuZGVwdGhXcml0ZSkscy5zZXRNYXNrKGF0LmNvbG9yV3JpdGUpO2xldCBDZT1hdC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KENlKSxDZSYmKGMuc2V0TWFzayhhdC5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoYXQuc3RlbmNpbEZ1bmMsYXQuc3RlbmNpbFJlZixhdC5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoYXQuc3RlbmNpbEZhaWwsYXQuc3RlbmNpbFpGYWlsLGF0LnN0ZW5jaWxaUGFzcykpLGllKGF0LnBvbHlnb25PZmZzZXQsYXQucG9seWdvbk9mZnNldEZhY3RvcixhdC5wb2x5Z29uT2Zmc2V0VW5pdHMpLGF0LmFscGhhVG9Db3ZlcmFnZT09PSEwP2x0KDMyOTI2KTpLdCgzMjkyNil9ZnVuY3Rpb24gaHQoYXQpe08hPT1hdCYmKGF0P2UuZnJvbnRGYWNlKDIzMDQpOmUuZnJvbnRGYWNlKDIzMDUpLE89YXQpfWZ1bmN0aW9uIHd0KGF0KXthdCE9PU9oZT8obHQoMjg4NCksYXQhPT1EJiYoYXQ9PT1TdXQ/ZS5jdWxsRmFjZSgxMDI5KTphdD09PXpoZT9lLmN1bGxGYWNlKDEwMjgpOmUuY3VsbEZhY2UoMTAzMikpKTpLdCgyODg0KSxEPWF0fWZ1bmN0aW9uIGt0KGF0KXthdCE9PUImJihGJiZlLmxpbmVXaWR0aChhdCksQj1hdCl9ZnVuY3Rpb24gaWUoYXQsc2UsUXQpe2F0PyhsdCgzMjgyMyksKEkhPT1zZXx8TCE9PVF0KSYmKGUucG9seWdvbk9mZnNldChzZSxRdCksST1zZSxMPVF0KSk6S3QoMzI4MjMpfWZ1bmN0aW9uIGVlKGF0KXthdD9sdCgzMDg5KTpLdCgzMDg5KX1mdW5jdGlvbiBMZShhdCl7YXQ9PT12b2lkIDAmJihhdD0zMzk4NCtSLTEpLFchPT1hdCYmKGUuYWN0aXZlVGV4dHVyZShhdCksVz1hdCl9ZnVuY3Rpb24gYXIoYXQsc2Upe1c9PT1udWxsJiZMZSgpO2xldCBRdD1aW1ddO1F0PT09dm9pZCAwJiYoUXQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxaW1ddPVF0KSwoUXQudHlwZSE9PWF0fHxRdC50ZXh0dXJlIT09c2UpJiYoZS5iaW5kVGV4dHVyZShhdCxzZXx8TXRbYXRdKSxRdC50eXBlPWF0LFF0LnRleHR1cmU9c2UpfWZ1bmN0aW9uIGZyKCl7bGV0IGF0PVpbV107YXQhPT12b2lkIDAmJmF0LnR5cGUhPT12b2lkIDAmJihlLmJpbmRUZXh0dXJlKGF0LnR5cGUsbnVsbCksYXQudHlwZT12b2lkIDAsYXQudGV4dHVyZT12b2lkIDApfWZ1bmN0aW9uIHR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkKCl7dHJ5e2UudGV4U3ViSW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEl0KCl7dHJ5e2UudGV4U3ViSW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uICR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBoZSgpe3RyeXtlLnRleFN0b3JhZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIFR0KCl7dHJ5e2UudGV4U3RvcmFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gYmUoKXt0cnl7ZS50ZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gbnQoKXt0cnl7ZS50ZXhJbWFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gQ3QoYXQpe3N0LmVxdWFscyhhdCk9PT0hMSYmKGUuc2Npc3NvcihhdC54LGF0LnksYXQueixhdC53KSxzdC5jb3B5KGF0KSl9ZnVuY3Rpb24gV3QoYXQpe1N0LmVxdWFscyhhdCk9PT0hMSYmKGUudmlld3BvcnQoYXQueCxhdC55LGF0LnosYXQudyksU3QuY29weShhdCkpfWZ1bmN0aW9uIGZlKCl7ZS5kaXNhYmxlKDMwNDIpLGUuZGlzYWJsZSgyODg0KSxlLmRpc2FibGUoMjkyOSksZS5kaXNhYmxlKDMyODIzKSxlLmRpc2FibGUoMzA4OSksZS5kaXNhYmxlKDI5NjApLGUuZGlzYWJsZSgzMjkyNiksZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSxlLmJsZW5kRnVuYygxLDApLGUuYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksZS5jb2xvck1hc2soITAsITAsITAsITApLGUuY2xlYXJDb2xvcigwLDAsMCwwKSxlLmRlcHRoTWFzayghMCksZS5kZXB0aEZ1bmMoNTEzKSxlLmNsZWFyRGVwdGgoMSksZS5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLGUuc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxlLmNsZWFyU3RlbmNpbCgwKSxlLmN1bGxGYWNlKDEwMjkpLGUuZnJvbnRGYWNlKDIzMDUpLGUucG9seWdvbk9mZnNldCgwLDApLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbj09PSEwJiYoZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLGUudXNlUHJvZ3JhbShudWxsKSxlLmxpbmVXaWR0aCgxKSxlLnNjaXNzb3IoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS52aWV3cG9ydCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSx1PXt9LFc9bnVsbCxaPXt9LGg9e30sZj1uZXcgV2Vha01hcCxwPVtdLGQ9bnVsbCxnPSExLF89bnVsbCx5PW51bGwseD1udWxsLGI9bnVsbCxTPW51bGwsQz1udWxsLFA9bnVsbCxrPSExLE89bnVsbCxEPW51bGwsQj1udWxsLEk9bnVsbCxMPW51bGwsc3Quc2V0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLFN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmx0LGRpc2FibGU6S3QsYmluZEZyYW1lYnVmZmVyOl90LGRyYXdCdWZmZXJzOmN0LHVzZVByb2dyYW06WCxzZXRCbGVuZGluZzpxLHNldE1hdGVyaWFsOnB0LHNldEZsaXBTaWRlZDpodCxzZXRDdWxsRmFjZTp3dCxzZXRMaW5lV2lkdGg6a3Qsc2V0UG9seWdvbk9mZnNldDppZSxzZXRTY2lzc29yVGVzdDplZSxhY3RpdmVUZXh0dXJlOkxlLGJpbmRUZXh0dXJlOmFyLHVuYmluZFRleHR1cmU6ZnIsY29tcHJlc3NlZFRleEltYWdlMkQ6dHQsdGV4SW1hZ2UyRDpiZSx0ZXhJbWFnZTNEOm50LHRleFN0b3JhZ2UyRDpoZSx0ZXhTdG9yYWdlM0Q6VHQsdGV4U3ViSW1hZ2UyRDokLHRleFN1YkltYWdlM0Q6SXQsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6JHQsc2Npc3NvcjpDdCx2aWV3cG9ydDpXdCxyZXNldDpmZX19ZnVuY3Rpb24gVGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSx1PWkubWF4VGV4dHVyZVNpemUsaD1pLm1heFNhbXBsZXMscD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxkPW5ldyBXZWFrTWFwLGcsXz0hMTt0cnl7Xz10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIT0idW5kZWZpbmVkIiYmbmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikhPT1udWxsfWNhdGNoKHR0KXt9ZnVuY3Rpb24geSh0dCwkKXtyZXR1cm4gXz9uZXcgT2Zmc2NyZWVuQ2FudmFzKHR0LCQpOnQ2KCJjYW52YXMiKX1mdW5jdGlvbiB4KHR0LCQsSXQsJHQpe2xldCBoZT0xO2lmKCh0dC53aWR0aD4kdHx8dHQuaGVpZ2h0PiR0KSYmKGhlPSR0L01hdGgubWF4KHR0LndpZHRoLHR0LmhlaWdodCkpLGhlPDF8fCQ9PT0hMClpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IFR0PSQ/TmZlOk1hdGguZmxvb3IsYmU9VHQoaGUqdHQud2lkdGgpLG50PVR0KGhlKnR0LmhlaWdodCk7Zz09PXZvaWQgMCYmKGc9eShiZSxudCkpO2xldCBDdD1JdD95KGJlLG50KTpnO3JldHVybiBDdC53aWR0aD1iZSxDdC5oZWlnaHQ9bnQsQ3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodHQsMCwwLGJlLG50KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3R0LndpZHRoKyJ4Iit0dC5oZWlnaHQrIikgdG8gKCIrYmUrIngiK250KyIpLiIpLEN0fWVsc2UgcmV0dXJuImRhdGEiaW4gdHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpLiIpLHR0O3JldHVybiB0dH1mdW5jdGlvbiBiKHR0KXtyZXR1cm4gWnV0KHR0LndpZHRoKSYmWnV0KHR0LmhlaWdodCl9ZnVuY3Rpb24gUyh0dCl7cmV0dXJuIHM/ITE6dHQud3JhcFMhPT1Kb3x8dHQud3JhcFQhPT1Kb3x8dHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIEModHQsJCl7cmV0dXJuIHR0LmdlbmVyYXRlTWlwbWFwcyYmJCYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIFAodHQpe2UuZ2VuZXJhdGVNaXBtYXAodHQpfWZ1bmN0aW9uIGsodHQsJCxJdCwkdCxoZT0hMSl7aWYocz09PSExKXJldHVybiAkO2lmKHR0IT09bnVsbCl7aWYoZVt0dF0hPT12b2lkIDApcmV0dXJuIGVbdHRdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIit0dCsiJyIpfWxldCBUdD0kO3JldHVybiAkPT09NjQwMyYmKEl0PT09NTEyNiYmKFR0PTMzMzI2KSxJdD09PTUxMzEmJihUdD0zMzMyNSksSXQ9PT01MTIxJiYoVHQ9MzMzMjEpKSwkPT09MzMzMTkmJihJdD09PTUxMjYmJihUdD0zMzMyOCksSXQ9PT01MTMxJiYoVHQ9MzMzMjcpLEl0PT09NTEyMSYmKFR0PTMzMzIzKSksJD09PTY0MDgmJihJdD09PTUxMjYmJihUdD0zNDgzNiksSXQ9PT01MTMxJiYoVHQ9MzQ4NDIpLEl0PT09NTEyMSYmKFR0PSR0PT09V24mJmhlPT09ITE/MzU5MDc6MzI4NTYpLEl0PT09MzI4MTkmJihUdD0zMjg1NCksSXQ9PT0zMjgyMCYmKFR0PTMyODU1KSksKFR0PT09MzMzMjV8fFR0PT09MzMzMjZ8fFR0PT09MzMzMjd8fFR0PT09MzMzMjh8fFR0PT09MzQ4NDJ8fFR0PT09MzQ4MzYpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLFR0fWZ1bmN0aW9uIE8odHQsJCxJdCl7cmV0dXJuIEModHQsSXQpPT09ITB8fHR0LmlzRnJhbWVidWZmZXJUZXh0dXJlJiZ0dC5taW5GaWx0ZXIhPT1MaSYmdHQubWluRmlsdGVyIT09aWk/TWF0aC5sb2cyKE1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpKSsxOnR0Lm1pcG1hcHMhPT12b2lkIDAmJnR0Lm1pcG1hcHMubGVuZ3RoPjA/dHQubWlwbWFwcy5sZW5ndGg6dHQuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheSh0dC5pbWFnZSk/JC5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIEQodHQpe3JldHVybiB0dD09PUxpfHx0dD09PW9VfHx0dD09PWFVPzk3Mjg6OTcyOX1mdW5jdGlvbiBCKHR0KXtsZXQgJD10dC50YXJnZXQ7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSxMKCQpLCQuaXNWaWRlb1RleHR1cmUmJmQuZGVsZXRlKCQpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gSSh0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksUigkKX1mdW5jdGlvbiBMKHR0KXtsZXQgJD1uLmdldCh0dCk7JC5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkLl9fd2ViZ2xUZXh0dXJlKSxuLnJlbW92ZSh0dCkpfWZ1bmN0aW9uIFIodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO2lmKCEhdHQpe2lmKCR0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYoZS5kZWxldGVUZXh0dXJlKCR0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSx0dC5kZXB0aFRleHR1cmUmJnR0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBoZT0wO2hlPDY7aGUrKyllLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcltoZV0pLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyW2hlXSk7ZWxzZSBlLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksSXQuX193ZWJnbERlcHRoYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhidWZmZXIpLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYodHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGhlPTAsVHQ9JC5sZW5ndGg7aGU8VHQ7aGUrKyl7bGV0IGJlPW4uZ2V0KCRbaGVdKTtiZS5fX3dlYmdsVGV4dHVyZSYmKGUuZGVsZXRlVGV4dHVyZShiZS5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksbi5yZW1vdmUoJFtoZV0pfW4ucmVtb3ZlKCQpLG4ucmVtb3ZlKHR0KX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIFUoKXtsZXQgdHQ9RjtyZXR1cm4gdHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3R0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSx0dH1mdW5jdGlvbiBXKHR0LCQpe2xldCBJdD1uLmdldCh0dCk7aWYodHQuaXNWaWRlb1RleHR1cmUmJmt0KHR0KSx0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2xldCAkdD10dC5pbWFnZTtpZigkdD09PXZvaWQgMCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoJHQuY29tcGxldGU9PT0hMSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle2x0KEl0LHR0LCQpO3JldHVybn19ci5hY3RpdmVUZXh0dXJlKDMzOTg0KyQpLHIuYmluZFRleHR1cmUoMzU1MyxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gWih0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1ODY2LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBydCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDMyODc5LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBvdCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7S3QoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM0MDY3LEl0Ll9fd2ViZ2xUZXh0dXJlKX1sZXQgc3Q9e1tYUF06MTA0OTcsW0pvXTozMzA3MSxbJFBdOjMzNjQ4fSxTdD17W0xpXTo5NzI4LFtvVV06OTk4NCxbYVVdOjk5ODYsW2lpXTo5NzI5LFtMaHRdOjk5ODUsW294XTo5OTg3fTtmdW5jdGlvbiBidCh0dCwkLEl0KXtpZihJdD8oZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQyLHN0WyQud3JhcFNdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDMsc3RbJC53cmFwVF0pLCh0dD09PTMyODc5fHx0dD09PTM1ODY2KSYmZS50ZXhQYXJhbWV0ZXJpKHR0LDMyODgyLHN0WyQud3JhcFJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsU3RbJC5tYWdGaWx0ZXJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDEsU3RbJC5taW5GaWx0ZXJdKSk6KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MiwzMzA3MSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLDMzMDcxKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MiwzMzA3MSksKCQud3JhcFMhPT1Kb3x8JC53cmFwVCE9PUpvKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MCxEKCQubWFnRmlsdGVyKSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLEQoJC5taW5GaWx0ZXIpKSwkLm1pbkZpbHRlciE9PUxpJiYkLm1pbkZpbHRlciE9PWlpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksdC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCAkdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoJC50eXBlPT09amQmJnQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSExfHxzPT09ITEmJiQudHlwZT09PUMxJiZ0LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSExKXJldHVybjsoJC5hbmlzb3Ryb3B5PjF8fG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYoZS50ZXhQYXJhbWV0ZXJmKHR0LCR0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKCQuYW5pc290cm9weSxpLmdldE1heEFuaXNvdHJvcHkoKSkpLG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHk9JC5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTXQodHQsJCl7dHQuX193ZWJnbEluaXQ9PT12b2lkIDAmJih0dC5fX3dlYmdsSW5pdD0hMCwkLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEIpLHR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGx0KHR0LCQsSXQpe2xldCAkdD0zNTUzOyQuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJigkdD0zNTg2NiksJC5pc0RhdGFUZXh0dXJlM0QmJigkdD0zMjg3OSksTXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKCR0LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGhlPVMoJCkmJmIoJC5pbWFnZSk9PT0hMSxUdD14KCQuaW1hZ2UsaGUsITEsdSk7VHQ9aWUoJCxUdCk7bGV0IGJlPWIoVHQpfHxzLG50PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxDdD1vLmNvbnZlcnQoJC50eXBlKSxXdD1rKCQuaW50ZXJuYWxGb3JtYXQsbnQsQ3QsJC5lbmNvZGluZywkLmlzVmlkZW9UZXh0dXJlKTtidCgkdCwkLGJlKTtsZXQgZmUsYXQ9JC5taXBtYXBzLHNlPXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxRdD10dC5fX3ZlcnNpb249PT12b2lkIDAsQ2U9TygkLFR0LGJlKTtpZigkLmlzRGVwdGhUZXh0dXJlKVd0PTY0MDIscz8kLnR5cGU9PT1qZD9XdD0zNjAxMjokLnR5cGU9PT1WUD9XdD0zMzE5MDokLnR5cGU9PT1BMT9XdD0zNTA1NjpXdD0zMzE4OTokLnR5cGU9PT1qZCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksJC5mb3JtYXQ9PT16MCYmV3Q9PT02NDAyJiYkLnR5cGUhPT1HMyYmJC50eXBlIT09VlAmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9RzMsQ3Q9by5jb252ZXJ0KCQudHlwZSkpLCQuZm9ybWF0PT09azEmJld0PT09NjQwMiYmKFd0PTM0MDQxLCQudHlwZSE9PUExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLCQudHlwZT1BMSxDdD1vLmNvbnZlcnQoJC50eXBlKSkpLHNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLDEsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LG51bGwpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlKWlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzQ29tcHJlc3NlZFRleHR1cmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sJC5mb3JtYXQhPT1Rbz9udCE9PW51bGw/c2U/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsZmUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLGZlLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnNlP3IudGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSl9ZWxzZSBpZigkLmlzRGF0YVRleHR1cmUyREFycmF5KXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzU4NjYsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzNTg2NiwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlM0Qpc2U/KFF0JiZyLnRleFN0b3JhZ2UzRCgzMjg3OSxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgpLHIudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCxudCxDdCxUdC5kYXRhKSk6ci50ZXhJbWFnZTNEKDMyODc5LDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzRnJhbWVidWZmZXJUZXh0dXJlKXNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsbnQsQ3QsZmUpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LG50LEN0LGZlKTskLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHNlPyhRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpLHIudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLG50LEN0LFR0KSk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxudCxDdCxUdCk7QygkLGJlKSYmUCgkdCksdHQuX192ZXJzaW9uPSQudmVyc2lvbiwkLm9uVXBkYXRlJiYkLm9uVXBkYXRlKCQpfWZ1bmN0aW9uIEt0KHR0LCQsSXQpe2lmKCQuaW1hZ2UubGVuZ3RoIT09NilyZXR1cm47TXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKDM0MDY3LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0ICR0PSQmJigkLmlzQ29tcHJlc3NlZFRleHR1cmV8fCQuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksaGU9JC5pbWFnZVswXSYmJC5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLFR0PVtdO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspISR0JiYhaGU/VHRbUHRdPXgoJC5pbWFnZVtQdF0sITEsITAsYyk6VHRbUHRdPWhlPyQuaW1hZ2VbUHRdLmltYWdlOiQuaW1hZ2VbUHRdLFR0W1B0XT1pZSgkLFR0W1B0XSk7bGV0IGJlPVR0WzBdLG50PWIoYmUpfHxzLEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9cyYmJC5pc1ZpZGVvVGV4dHVyZSE9PSEwLHNlPXR0Ll9fdmVyc2lvbj09PXZvaWQgMCxRdD1PKCQsYmUsbnQpO2J0KDM0MDY3LCQsbnQpO2xldCBDZTtpZigkdCl7YXQmJnNlJiZyLnRleFN0b3JhZ2UyRCgzNDA2NyxRdCxmZSxiZS53aWR0aCxiZS5oZWlnaHQpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0Kyspe0NlPVR0W1B0XS5taXBtYXBzO2ZvcihsZXQgTnQ9MDtOdDxDZS5sZW5ndGg7TnQrKyl7bGV0IHplPUNlW050XTskLmZvcm1hdCE9PVFvP0N0IT09bnVsbD9hdD9yLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsemUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCx6ZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsV3QsemUuZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50LGZlLHplLndpZHRoLHplLmhlaWdodCwwLEN0LFd0LHplLmRhdGEpfX19ZWxzZXtDZT0kLm1pcG1hcHMsYXQmJnNlJiYoQ2UubGVuZ3RoPjAmJlF0Kyssci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsVHRbMF0ud2lkdGgsVHRbMF0uaGVpZ2h0KSk7Zm9yKGxldCBQdD0wO1B0PDY7UHQrKylpZihoZSl7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLFR0W1B0XS53aWR0aCxUdFtQdF0uaGVpZ2h0LEN0LFd0LFR0W1B0XS5kYXRhKTpyLnRleEltYWdlMkQoMzQwNjkrUHQsMCxmZSxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCwwLEN0LFd0LFR0W1B0XS5kYXRhKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB5bj1DZVtOdF0uaW1hZ2VbUHRdLmltYWdlO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCx5bi53aWR0aCx5bi5oZWlnaHQsQ3QsV3QseW4uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUseW4ud2lkdGgseW4uaGVpZ2h0LDAsQ3QsV3QseW4uZGF0YSl9fWVsc2V7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLEN0LFd0LFR0W1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsQ3QsV3QsVHRbUHRdKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50KzEsMCwwLEN0LFd0LHplLmltYWdlW1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUsQ3QsV3QsemUuaW1hZ2VbUHRdKX19fUMoJCxudCkmJlAoMzQwNjcpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBfdCh0dCwkLEl0LCR0LGhlKXtsZXQgVHQ9by5jb252ZXJ0KEl0LmZvcm1hdCxJdC5lbmNvZGluZyksYmU9by5jb252ZXJ0KEl0LnR5cGUpLG50PWsoSXQuaW50ZXJuYWxGb3JtYXQsVHQsYmUsSXQuZW5jb2RpbmcpO24uZ2V0KCQpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGhlPT09MzI4Nzl8fGhlPT09MzU4NjY/ci50ZXhJbWFnZTNEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwkLmRlcHRoLDAsVHQsYmUsbnVsbCk6ci50ZXhJbWFnZTJEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwwLFR0LGJlLG51bGwpKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwLHd0KCQpKTplLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBjdCh0dCwkLEl0KXtpZihlLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsdHQpLCQuZGVwdGhCdWZmZXImJiEkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD0zMzE4OTtpZihJdHx8JC51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBoZT0kLmRlcHRoVGV4dHVyZTtoZSYmaGUuaXNEZXB0aFRleHR1cmUmJihoZS50eXBlPT09amQ/JHQ9MzYwMTI6aGUudHlwZT09PVZQJiYoJHQ9MzMxOTApKTtsZXQgVHQ9d3QoJCk7JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCl9ZWxzZSBlLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsJHQsJC53aWR0aCwkLmhlaWdodCk7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSx0dCl9ZWxzZSBpZigkLmRlcHRoQnVmZmVyJiYkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLCQud2lkdGgsJC5oZWlnaHQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsdHQpfWVsc2V7bGV0ICR0PSQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwPyQudGV4dHVyZVswXTokLnRleHR1cmUsaGU9by5jb252ZXJ0KCR0LmZvcm1hdCwkdC5lbmNvZGluZyksVHQ9by5jb252ZXJ0KCR0LnR5cGUpLGJlPWsoJHQuaW50ZXJuYWxGb3JtYXQsaGUsVHQsJHQuZW5jb2RpbmcpLG50PXd0KCQpO0l0JiYkLnVzZVJlbmRlcmJ1ZmZlcj9lLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTokLnVzZVJlbmRlclRvVGV4dHVyZT9wLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTplLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYmUsJC53aWR0aCwkLmhlaWdodCl9ZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFgodHQsJCl7aWYoJCYmJC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksISgkLmRlcHRoVGV4dHVyZSYmJC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghbi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHwkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PSQud2lkdGh8fCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PSQuaGVpZ2h0KSYmKCQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPSQud2lkdGgsJC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PSQuaGVpZ2h0LCQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxXKCQuZGVwdGhUZXh0dXJlLDApO2xldCAkdD1uLmdldCgkLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsaGU9d3QoJCk7aWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09ejApJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLCR0LDApO2Vsc2UgaWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09azEpJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLCR0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBldCh0dCl7bGV0ICQ9bi5nZXQodHQpLEl0PXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYodHQuZGVwdGhUZXh0dXJlJiYhJC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihJdCl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7WCgkLl9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCl9ZWxzZSBpZihJdCl7JC5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCAkdD0wOyR0PDY7JHQrKylyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlclskdF0pLCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XT1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XSx0dCwhMSl9ZWxzZSByLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlciksJC5fX3dlYmdsRGVwdGhidWZmZXI9ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlcix0dCwhMSk7ci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gZHQodHQsJCxJdCl7bGV0ICR0PW4uZ2V0KHR0KTskIT09dm9pZCAwJiZfdCgkdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsdHQudGV4dHVyZSwzNjA2NCwzNTUzKSxJdCE9PXZvaWQgMCYmZXQodHQpfWZ1bmN0aW9uIHEodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO3R0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMhPT0hMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoJHQuX193ZWJnbFRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCkpLCR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IGhlPXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVHQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwLGJlPSQuaXNEYXRhVGV4dHVyZTNEfHwkLmlzRGF0YVRleHR1cmUyREFycmF5LG50PWIodHQpfHxzO2lmKGhlKXtJdC5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdPWUuY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksVHQpaWYoaS5kcmF3QnVmZmVycyl7bGV0IEN0PXR0LnRleHR1cmU7Zm9yKGxldCBXdD0wLGZlPUN0Lmxlbmd0aDtXdDxmZTtXdCsrKXtsZXQgYXQ9bi5nZXQoQ3RbV3RdKTthdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKGF0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe0l0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9d3QodHQpO2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGF0LGZlLHR0LndpZHRoLHR0LmhlaWdodCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHR0LmRlcHRoQnVmZmVyJiYoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLHR0LCEwKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihoZSl7ci5iaW5kVGV4dHVyZSgzNDA2NywkdC5fX3dlYmdsVGV4dHVyZSksYnQoMzQwNjcsJCxudCk7Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylfdChJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdLHR0LCQsMzYwNjQsMzQwNjkrQ3QpO0MoJCxudCkmJlAoMzQwNjcpLHIudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVHQpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PUN0W1d0XSxzZT1uLmdldChhdCk7ci5iaW5kVGV4dHVyZSgzNTUzLHNlLl9fd2ViZ2xUZXh0dXJlKSxidCgzNTUzLGF0LG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsYXQsMzYwNjQrV3QsMzU1MyksQyhhdCxudCkmJlAoMzU1Myl9ci51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgQ3Q9MzU1MztiZSYmKHM/Q3Q9JC5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLHIuYmluZFRleHR1cmUoQ3QsJHQuX193ZWJnbFRleHR1cmUpLGJ0KEN0LCQsbnQpLF90KEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCwkLDM2MDY0LEN0KSxDKCQsbnQpJiZQKEN0KSxyLnVuYmluZFRleHR1cmUoKX10dC5kZXB0aEJ1ZmZlciYmZXQodHQpfWZ1bmN0aW9uIHB0KHR0KXtsZXQgJD1iKHR0KXx8cyxJdD10dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dHQudGV4dHVyZTpbdHQudGV4dHVyZV07Zm9yKGxldCAkdD0wLGhlPUl0Lmxlbmd0aDskdDxoZTskdCsrKXtsZXQgVHQ9SXRbJHRdO2lmKEMoVHQsJCkpe2xldCBiZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG50PW4uZ2V0KFR0KS5fX3dlYmdsVGV4dHVyZTtyLmJpbmRUZXh0dXJlKGJlLG50KSxQKGJlKSxyLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIGh0KHR0KXtpZih0dC51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0ICQ9dHQud2lkdGgsSXQ9dHQuaGVpZ2h0LCR0PTE2Mzg0LGhlPVszNjA2NF0sVHQ9dHQuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5Njt0dC5kZXB0aEJ1ZmZlciYmaGUucHVzaChUdCksdHQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fCh0dC5kZXB0aEJ1ZmZlciYmKCR0fD0yNTYpLHR0LnN0ZW5jaWxCdWZmZXImJigkdHw9MTAyNCkpO2xldCBiZT1uLmdldCh0dCk7ci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsRnJhbWVidWZmZXIpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYoZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1R0XSksZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1R0XSkpLGUuYmxpdEZyYW1lYnVmZmVyKDAsMCwkLEl0LDAsMCwkLEl0LCR0LDk3MjgpLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGhlKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gd3QodHQpe3JldHVybiBzJiYodHQudXNlUmVuZGVyYnVmZmVyfHx0dC51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsdHQuc2FtcGxlcyk6MH1mdW5jdGlvbiBrdCh0dCl7bGV0ICQ9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodHQpIT09JCYmKGQuc2V0KHR0LCQpLHR0LnVwZGF0ZSgpKX1mdW5jdGlvbiBpZSh0dCwkKXtsZXQgSXQ9dHQuZW5jb2RpbmcsJHQ9dHQuZm9ybWF0LGhlPXR0LnR5cGU7cmV0dXJuIHR0LmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8dHQuaXNWaWRlb1RleHR1cmU9PT0hMHx8dHQuZm9ybWF0PT09c1V8fEl0IT09UWQmJihJdD09PVduP3M9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiYkdD09PVFvPyh0dC5mb3JtYXQ9c1UsdHQubWluRmlsdGVyPWlpLHR0LmdlbmVyYXRlTWlwbWFwcz0hMSk6JD1LZi5zUkdCVG9MaW5lYXIoJCk6KCR0IT09UW98fGhlIT09WmQpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixJdCkpLCR9bGV0IGVlPSExLExlPSExO2Z1bmN0aW9uIGFyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoZWU9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGVlPSEwKSx0dD10dC50ZXh0dXJlKSxXKHR0LCQpfWZ1bmN0aW9uIGZyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKExlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTGU9ITApLHR0PXR0LnRleHR1cmUpLG90KHR0LCQpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1VLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1XLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9Wix0aGlzLnNldFRleHR1cmUzRD1ydCx0aGlzLnNldFRleHR1cmVDdWJlPW90LHRoaXMucmViaW5kVGV4dHVyZXM9ZHQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1xLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPXB0LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9aHQsdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWV0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9X3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWFyLHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZyfWZ1bmN0aW9uICRmZShlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKG8sYT1udWxsKXtsZXQgcztpZihvPT09WmQpcmV0dXJuIDUxMjE7aWYobz09PWRmZSlyZXR1cm4gMzI4MTk7aWYobz09PW1mZSlyZXR1cm4gMzI4MjA7aWYobz09PWhmZSlyZXR1cm4gNTEyMDtpZihvPT09ZmZlKXJldHVybiA1MTIyO2lmKG89PT1HMylyZXR1cm4gNTEyMztpZihvPT09cGZlKXJldHVybiA1MTI0O2lmKG89PT1WUClyZXR1cm4gNTEyNTtpZihvPT09amQpcmV0dXJuIDUxMjY7aWYobz09PUMxKXJldHVybiBuPzUxMzE6KHM9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxzIT09bnVsbD9zLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKG89PT1nZmUpcmV0dXJuIDY0MDY7aWYobz09PVFvKXJldHVybiA2NDA4O2lmKG89PT1fZmUpcmV0dXJuIDY0MDk7aWYobz09PXlmZSlyZXR1cm4gNjQxMDtpZihvPT09ejApcmV0dXJuIDY0MDI7aWYobz09PWsxKXJldHVybiAzNDA0MTtpZihvPT09dmZlKXJldHVybiA2NDAzO2lmKG89PT1zVSlyZXR1cm4gcz10LmdldCgiRVhUX3NSR0IiKSxzIT09bnVsbD9zLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYobz09PXhmZSlyZXR1cm4gMzYyNDQ7aWYobz09PWJmZSlyZXR1cm4gMzMzMTk7aWYobz09PXdmZSlyZXR1cm4gMzMzMjA7aWYobz09PVNmZSlyZXR1cm4gMzYyNDk7aWYobz09PUpWfHxvPT09UVZ8fG89PT10VXx8bz09PWVVKWlmKGE9PT1XbilpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1lVSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2Vsc2UgaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxzIT09bnVsbCl7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UHV0fHxvPT09SXV0fHxvPT09THV0fHxvPT09a3V0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLHMhPT1udWxsKXtpZihvPT09UHV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PWt1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKG89PT1NZmUpcmV0dXJuIHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIikscyE9PW51bGw/cy5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYobz09PVJ1dHx8bz09PU51dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIikscyE9PW51bGwpe2lmKG89PT1SdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfRVRDMjpzLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKG89PT1OdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKG89PT1EdXR8fG89PT1PdXR8fG89PT16dXR8fG89PT1GdXR8fG89PT1CdXR8fG89PT1IdXR8fG89PT1WdXR8fG89PT1VdXR8fG89PT1xdXR8fG89PT1HdXR8fG89PT1XdXR8fG89PT1ZdXR8fG89PT1qdXR8fG89PT1YdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxzIT09bnVsbCl7aWYobz09PUR1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihvPT09T3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT16dXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PUZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihvPT09QnV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1IdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihvPT09VXV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1xdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1qdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKG89PT1YdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PSR1dClpZihzPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIikscyE9PW51bGwpe2lmKG89PT0kdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKG89PT1BMSlyZXR1cm4gbj8zNDA0Mjoocz10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHMhPT1udWxsP3MuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6aX19dmFyIG42PWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O242LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBYZD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O1hkLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBDZ3I9e3R5cGU6Im1vdmUifSxxUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgWGQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBYZCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IFhkLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBqKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxyLG4pe2xldCBpPW51bGwsbz1udWxsLGE9bnVsbCxzPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJnIuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihzIT09bnVsbCYmKGk9ci5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksaSE9PW51bGwmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KHMuaGFzTGluZWFyVmVsb2NpdHk9ITAscy5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTpzLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxzLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6cy5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KENncikpKSxjJiZ0LmhhbmQpe2E9ITA7Zm9yKGxldCBnIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IF89ci5nZXRKb2ludFBvc2UoZyxuKTtpZihjLmpvaW50c1tnLmpvaW50TmFtZV09PT12b2lkIDApe2xldCB4PW5ldyBYZDt4Lm1hdHJpeEF1dG9VcGRhdGU9ITEseC52aXNpYmxlPSExLGMuam9pbnRzW2cuam9pbnROYW1lXT14LGMuYWRkKHgpfWxldCB5PWMuam9pbnRzW2cuam9pbnROYW1lXTtfIT09bnVsbCYmKHkubWF0cml4LmZyb21BcnJheShfLnRyYW5zZm9ybS5tYXRyaXgpLHkubWF0cml4LmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucm90YXRpb24seS5zY2FsZSkseS5qb2ludFJhZGl1cz1fLnJhZGl1cykseS52aXNpYmxlPV8hPT1udWxsfWxldCB1PWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0saD1jLmpvaW50c1sidGh1bWItdGlwIl0sZj11LnBvc2l0aW9uLmRpc3RhbmNlVG8oaC5wb3NpdGlvbikscD0uMDIsZD0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmZj5wK2Q/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPD1wLWQmJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIGwhPT1udWxsJiZ0LmdyaXBTcGFjZSYmKG89ci5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG8hPT1udWxsJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIHMhPT1udWxsJiYocy52aXNpYmxlPWkhPT1udWxsKSxsIT09bnVsbCYmKGwudmlzaWJsZT1vIT09bnVsbCksYyE9PW51bGwmJihjLnZpc2libGU9YSE9PW51bGwpLHRoaXN9fSxuTT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe2lmKHU9dSE9PXZvaWQgMD91OnowLHUhPT16MCYmdSE9PWsxKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTtuPT09dm9pZCAwJiZ1PT09ejAmJihuPUczKSxuPT09dm9pZCAwJiZ1PT09azEmJihuPUExKSxzdXBlcihudWxsLGksbyxhLHMsbCx1LG4sYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cn0sdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOkxpLHRoaXMubWluRmlsdGVyPWwhPT12b2lkIDA/bDpMaSx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bk0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBlaHQ9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCk7bGV0IG49dGhpcyxpPW51bGwsbz0xLGE9bnVsbCxzPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwscD0hMSxkPW51bGwsZz1yLmdldENvbnRleHRBdHRyaWJ1dGVzKCksXz1udWxsLHk9bnVsbCx4PVtdLGI9bmV3IE1hcCxTPW5ldyBVaTtTLmxheWVycy5lbmFibGUoMSksUy52aWV3cG9ydD1uZXcgZW47bGV0IEM9bmV3IFVpO0MubGF5ZXJzLmVuYWJsZSgyKSxDLnZpZXdwb3J0PW5ldyBlbjtsZXQgUD1bUyxDXSxrPW5ldyBuNjtrLmxheWVycy5lbmFibGUoMSksay5sYXllcnMuZW5hYmxlKDIpO2xldCBPPW51bGwsRD1udWxsO3RoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRIYW5kU3BhY2UoKX07ZnVuY3Rpb24gQihvdCl7bGV0IHN0PWIuZ2V0KG90LmlucHV0U291cmNlKTtzdCYmc3QuZGlzcGF0Y2hFdmVudCh7dHlwZTpvdC50eXBlLGRhdGE6b3QuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBJKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKG90LHN0KXtvdC5kaXNjb25uZWN0KHN0KX0pLGIuY2xlYXIoKSxPPW51bGwsRD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KF8pLGY9bnVsbCxoPW51bGwsdT1udWxsLGk9bnVsbCx5PW51bGwscnQuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24ob3Qpe289b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24ob3Qpe3M9b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24ob3Qpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoaT1vdCxpIT09bnVsbCl7aWYoXz10LmdldFJlbmRlclRhcmdldCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLEwpLGcueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCByLm1ha2VYUkNvbXBhdGlibGUoKSksaS5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCBzdD17YW50aWFsaWFzOmkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP2cuYW50aWFsaWFzOiEwLGFscGhhOmcuYWxwaGEsZGVwdGg6Zy5kZXB0aCxzdGVuY2lsOmcuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99O2Y9bmV3IFhSV2ViR0xMYXllcihpLHIsc3QpLGkudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpmfSkseT1uZXcgdXMoZi5mcmFtZWJ1ZmZlcldpZHRoLGYuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1lbHNle3A9Zy5hbnRpYWxpYXM7bGV0IHN0PW51bGwsU3Q9bnVsbCxidD1udWxsO2cuZGVwdGgmJihidD1nLnN0ZW5jaWw/MzUwNTY6MzMxOTAsc3Q9Zy5zdGVuY2lsP2sxOnowLFN0PWcuc3RlbmNpbD9BMTpHMyk7bGV0IE10PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09V24/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6YnQsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcoaSxyKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKE10KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSkscD95PW5ldyBqMyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTp5PW5ldyB1cyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX15LmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksYT15aWVsZCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShzKSxydC5zZXRDb250ZXh0KGkpLHJ0LnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIEwob3Qpe2xldCBzdD1pLmlucHV0U291cmNlcztmb3IobGV0IFN0PTA7U3Q8eC5sZW5ndGg7U3QrKyliLnNldChzdFtTdF0seFtTdF0pO2ZvcihsZXQgU3Q9MDtTdDxvdC5yZW1vdmVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QucmVtb3ZlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiYoTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOmJ0fSksYi5kZWxldGUoYnQpKX1mb3IobGV0IFN0PTA7U3Q8b3QuYWRkZWQubGVuZ3RoO1N0Kyspe2xldCBidD1vdC5hZGRlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiZNdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6YnR9KX19bGV0IFI9bmV3IGosRj1uZXcgajtmdW5jdGlvbiB6KG90LHN0LFN0KXtSLnNldEZyb21NYXRyaXhQb3NpdGlvbihzdC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24oU3QubWF0cml4V29ybGQpO2xldCBidD1SLmRpc3RhbmNlVG8oRiksTXQ9c3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxsdD1TdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEt0PU10WzE0XS8oTXRbMTBdLTEpLF90PU10WzE0XS8oTXRbMTBdKzEpLGN0PShNdFs5XSsxKS9NdFs1XSxYPShNdFs5XS0xKS9NdFs1XSxldD0oTXRbOF0tMSkvTXRbMF0sZHQ9KGx0WzhdKzEpL2x0WzBdLHE9S3QqZXQscHQ9S3QqZHQsaHQ9YnQvKC1ldCtkdCksd3Q9aHQqLWV0O3N0Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC50cmFuc2xhdGVYKHd0KSxvdC50cmFuc2xhdGVaKGh0KSxvdC5tYXRyaXhXb3JsZC5jb21wb3NlKG90LnBvc2l0aW9uLG90LnF1YXRlcm5pb24sb3Quc2NhbGUpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQga3Q9S3QraHQsaWU9X3QraHQsZWU9cS13dCxMZT1wdCsoYnQtd3QpLGFyPWN0Kl90L2llKmt0LGZyPVgqX3QvaWUqa3Q7b3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZWUsTGUsYXIsZnIsa3QsaWUpfWZ1bmN0aW9uIFUob3Qsc3Qpe3N0PT09bnVsbD9vdC5tYXRyaXhXb3JsZC5jb3B5KG90Lm1hdHJpeCk6b3QubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhzdC5tYXRyaXhXb3JsZCxvdC5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihvdCl7aWYoaT09PW51bGwpcmV0dXJuO2submVhcj1DLm5lYXI9Uy5uZWFyPW90Lm5lYXIsay5mYXI9Qy5mYXI9Uy5mYXI9b3QuZmFyLChPIT09ay5uZWFyfHxEIT09ay5mYXIpJiYoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOmsubmVhcixkZXB0aEZhcjprLmZhcn0pLE89ay5uZWFyLEQ9ay5mYXIpO2xldCBzdD1vdC5wYXJlbnQsU3Q9ay5jYW1lcmFzO1UoayxzdCk7Zm9yKGxldCBNdD0wO010PFN0Lmxlbmd0aDtNdCsrKVUoU3RbTXRdLHN0KTtrLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrLnBvc2l0aW9uLGsucXVhdGVybmlvbixrLnNjYWxlKSxvdC5wb3NpdGlvbi5jb3B5KGsucG9zaXRpb24pLG90LnF1YXRlcm5pb24uY29weShrLnF1YXRlcm5pb24pLG90LnNjYWxlLmNvcHkoay5zY2FsZSksb3QubWF0cml4LmNvcHkoay5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkLmNvcHkoay5tYXRyaXhXb3JsZCk7bGV0IGJ0PW90LmNoaWxkcmVuO2ZvcihsZXQgTXQ9MCxsdD1idC5sZW5ndGg7TXQ8bHQ7TXQrKylidFtNdF0udXBkYXRlTWF0cml4V29ybGQoITApO1N0Lmxlbmd0aD09PTI/eihrLFMsQyk6ay5wcm9qZWN0aW9uTWF0cml4LmNvcHkoUy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24ob3Qpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1vdCksZiE9PW51bGwmJmYuZml4ZWRGb3ZlYXRpb24hPT12b2lkIDAmJihmLmZpeGVkRm92ZWF0aW9uPW90KX07bGV0IFc9bnVsbDtmdW5jdGlvbiBaKG90LHN0KXtpZihjPXN0LmdldFZpZXdlclBvc2UoYSksZD1zdCxjIT09bnVsbCl7bGV0IGJ0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHksZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoeSkpO2xldCBNdD0hMTtidC5sZW5ndGghPT1rLmNhbWVyYXMubGVuZ3RoJiYoay5jYW1lcmFzLmxlbmd0aD0wLE10PSEwKTtmb3IobGV0IGx0PTA7bHQ8YnQubGVuZ3RoO2x0Kyspe2xldCBLdD1idFtsdF0sX3Q9bnVsbDtpZihmIT09bnVsbClfdD1mLmdldFZpZXdwb3J0KEt0KTtlbHNle2xldCBYPXUuZ2V0Vmlld1N1YkltYWdlKGgsS3QpO190PVgudmlld3BvcnQsbHQ9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyh5LFguY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlguZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBjdD1QW2x0XTtjdC5tYXRyaXguZnJvbUFycmF5KEt0LnRyYW5zZm9ybS5tYXRyaXgpLGN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEt0LnByb2plY3Rpb25NYXRyaXgpLGN0LnZpZXdwb3J0LnNldChfdC54LF90LnksX3Qud2lkdGgsX3QuaGVpZ2h0KSxsdD09PTAmJmsubWF0cml4LmNvcHkoY3QubWF0cml4KSxNdD09PSEwJiZrLmNhbWVyYXMucHVzaChjdCl9fWxldCBTdD1pLmlucHV0U291cmNlcztmb3IobGV0IGJ0PTA7YnQ8eC5sZW5ndGg7YnQrKyl7bGV0IE10PXhbYnRdLGx0PVN0W2J0XTtNdC51cGRhdGUobHQsc3QsYSl9VyYmVyhvdCxzdCksZD1udWxsfWxldCBydD1uZXcgRmZlO3J0LnNldEFuaW1hdGlvbkxvb3AoWiksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKG90KXtXPW90fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gQWdyKGUpe2Z1bmN0aW9uIHQoeSx4KXt5LmZvZ0NvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseC5pc0ZvZz8oeS5mb2dOZWFyLnZhbHVlPXgubmVhcix5LmZvZ0Zhci52YWx1ZT14LmZhcik6eC5pc0ZvZ0V4cDImJih5LmZvZ0RlbnNpdHkudmFsdWU9eC5kZW5zaXR5KX1mdW5jdGlvbiByKHkseCxiLFMsQyl7eC5pc01lc2hCYXNpY01hdGVyaWFsP24oeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8obih5LHgpLGwoeSx4KSk6eC5pc01lc2hUb29uTWF0ZXJpYWw/KG4oeSx4KSx1KHkseCkpOnguaXNNZXNoUGhvbmdNYXRlcmlhbD8obih5LHgpLGMoeSx4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhuKHkseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2YoeSx4LEMpOmgoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8obih5LHgpLHAoeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhuKHkseCksZCh5LHgpKTp4LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KG4oeSx4KSxnKHkseCkpOnguaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KG4oeSx4KSxfKHkseCkpOnguaXNMaW5lQmFzaWNNYXRlcmlhbD8oaSh5LHgpLHguaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJm8oeSx4KSk6eC5pc1BvaW50c01hdGVyaWFsP2EoeSx4LGIsUyk6eC5pc1Nwcml0ZU1hdGVyaWFsP3MoeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9ZnVuY3Rpb24gbih5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI9ZS5nZXQoeCkuZW52TWFwO2ImJih5LmVudk1hcC52YWx1ZT1iLHkuZmxpcEVudk1hcC52YWx1ZT1iLmlzQ3ViZVRleHR1cmUmJmIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSx5LnJlZmxlY3Rpdml0eS52YWx1ZT14LnJlZmxlY3Rpdml0eSx5Lmlvci52YWx1ZT14Lmlvcix5LnJlZnJhY3Rpb25SYXRpby52YWx1ZT14LnJlZnJhY3Rpb25SYXRpbykseC5saWdodE1hcCYmKHkubGlnaHRNYXAudmFsdWU9eC5saWdodE1hcCx5LmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPXgubGlnaHRNYXBJbnRlbnNpdHkpLHguYW9NYXAmJih5LmFvTWFwLnZhbHVlPXguYW9NYXAseS5hb01hcEludGVuc2l0eS52YWx1ZT14LmFvTWFwSW50ZW5zaXR5KTtsZXQgUzt4Lm1hcD9TPXgubWFwOnguc3BlY3VsYXJNYXA/Uz14LnNwZWN1bGFyTWFwOnguZGlzcGxhY2VtZW50TWFwP1M9eC5kaXNwbGFjZW1lbnRNYXA6eC5ub3JtYWxNYXA/Uz14Lm5vcm1hbE1hcDp4LmJ1bXBNYXA/Uz14LmJ1bXBNYXA6eC5yb3VnaG5lc3NNYXA/Uz14LnJvdWdobmVzc01hcDp4Lm1ldGFsbmVzc01hcD9TPXgubWV0YWxuZXNzTWFwOnguYWxwaGFNYXA/Uz14LmFscGhhTWFwOnguZW1pc3NpdmVNYXA/Uz14LmVtaXNzaXZlTWFwOnguY2xlYXJjb2F0TWFwP1M9eC5jbGVhcmNvYXRNYXA6eC5jbGVhcmNvYXROb3JtYWxNYXA/Uz14LmNsZWFyY29hdE5vcm1hbE1hcDp4LmNsZWFyY29hdFJvdWdobmVzc01hcD9TPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwOnguc3BlY3VsYXJJbnRlbnNpdHlNYXA/Uz14LnNwZWN1bGFySW50ZW5zaXR5TWFwOnguc3BlY3VsYXJDb2xvck1hcD9TPXguc3BlY3VsYXJDb2xvck1hcDp4LnRyYW5zbWlzc2lvbk1hcD9TPXgudHJhbnNtaXNzaW9uTWFwOngudGhpY2tuZXNzTWFwP1M9eC50aGlja25lc3NNYXA6eC5zaGVlbkNvbG9yTWFwP1M9eC5zaGVlbkNvbG9yTWFwOnguc2hlZW5Sb3VnaG5lc3NNYXAmJihTPXguc2hlZW5Sb3VnaG5lc3NNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSk7bGV0IEM7eC5hb01hcD9DPXguYW9NYXA6eC5saWdodE1hcCYmKEM9eC5saWdodE1hcCksQyE9PXZvaWQgMCYmKEMuaXNXZWJHTFJlbmRlclRhcmdldCYmKEM9Qy50ZXh0dXJlKSxDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gaSh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9ZnVuY3Rpb24gbyh5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9ZnVuY3Rpb24gYSh5LHgsYixTKXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqYix5LnNjYWxlLnZhbHVlPVMqLjUseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgQzt4Lm1hcD9DPXgubWFwOnguYWxwaGFNYXAmJihDPXguYWxwaGFNYXApLEMhPT12b2lkIDAmJihDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQy5tYXRyaXgpKX1mdW5jdGlvbiBzKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgYjt4Lm1hcD9iPXgubWFwOnguYWxwaGFNYXAmJihiPXguYWxwaGFNYXApLGIhPT12b2lkIDAmJihiLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmYi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpKX1mdW5jdGlvbiBsKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9ZnVuY3Rpb24gYyh5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIHUoeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGgoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLGUuZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1mdW5jdGlvbiBmKHkseCxiKXtoKHkseCkseS5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYoeS5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx5LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYoeS5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHkuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih5LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx5LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHkuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx5LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT1JaSYmeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih5LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix5LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Yi50ZXh0dXJlLHkudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KGIud2lkdGgsYi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYoeS50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHkudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYoeS50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHkuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2UseS5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSkseS5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHkuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYoeS5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9ZnVuY3Rpb24gcCh5LHgpe3gubWF0Y2FwJiYoeS5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHkuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAseS5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09SWkmJih5LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHkubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHkubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT1JaSYmeS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gZCh5LHgpe3guZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfWZ1bmN0aW9uIF8oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6dCxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpyfX1mdW5jdGlvbiBQZ3IoKXtsZXQgZT10NigiY2FudmFzIik7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV9ZnVuY3Rpb24gcm4oZT17fSl7bGV0IHQ9ZS5jYW52YXMhPT12b2lkIDA/ZS5jYW52YXM6UGdyKCkscj1lLmNvbnRleHQhPT12b2lkIDA/ZS5jb250ZXh0Om51bGwsbj1lLmFscGhhIT09dm9pZCAwP2UuYWxwaGE6ITEsaT1lLmRlcHRoIT09dm9pZCAwP2UuZGVwdGg6ITAsbz1lLnN0ZW5jaWwhPT12b2lkIDA/ZS5zdGVuY2lsOiEwLGE9ZS5hbnRpYWxpYXMhPT12b2lkIDA/ZS5hbnRpYWxpYXM6ITEscz1lLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9lLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP2UucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9ZS5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/ZS5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP2UuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLHA9W10sZD1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPVFkLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1LZCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgZz10aGlzLF89ITEseT0wLHg9MCxiPW51bGwsUz0tMSxDPW51bGwsUD1uZXcgZW4saz1uZXcgZW4sTz1udWxsLEQ9dC53aWR0aCxCPXQuaGVpZ2h0LEk9MSxMPW51bGwsUj1udWxsLEY9bmV3IGVuKDAsMCxELEIpLHo9bmV3IGVuKDAsMCxELEIpLFU9ITEsVz1uZXcgTjEsWj0hMSxydD0hMSxvdD1udWxsLHN0PW5ldyBNZSxTdD1uZXcgaixidD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIGI9PT1udWxsP0k6MX1sZXQgbHQ9cjtmdW5jdGlvbiBLdChLLGd0KXtmb3IobGV0IEV0PTA7RXQ8Sy5sZW5ndGg7RXQrKyl7bGV0IHh0PUtbRXRdLEZ0PXQuZ2V0Q29udGV4dCh4dCxndCk7aWYoRnQhPT1udWxsKXJldHVybiBGdH1yZXR1cm4gbnVsbH10cnl7bGV0IEs9e2FscGhhOiEwLGRlcHRoOmksc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtqVX1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixhdCwhMSksbHQ9PT1udWxsKXtsZXQgZ3Q9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKGcuaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZndC5zaGlmdCgpLGx0PUt0KGd0LEspLGx0PT09bnVsbCl0aHJvdyBLdChndCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX1sdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihsdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEspe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrSy5tZXNzYWdlKSxLfWxldCBfdCxjdCxYLGV0LGR0LHEscHQsaHQsd3Qsa3QsaWUsZWUsTGUsYXIsZnIsdHQsJCxJdCwkdCxoZSxUdCxiZSxudDtmdW5jdGlvbiBDdCgpe190PW5ldyBKZHIobHQpLGN0PW5ldyBZZHIobHQsX3QsZSksX3QuaW5pdChjdCksYmU9bmV3ICRmZShsdCxfdCxjdCksWD1uZXcgRWdyKGx0LF90LGN0KSxldD1uZXcgZW1yKGx0KSxkdD1uZXcgZGdyLHE9bmV3IFRncihsdCxfdCxYLGR0LGN0LGJlLGV0KSxwdD1uZXcgWGRyKGcpLGh0PW5ldyBaZHIoZyksd3Q9bmV3IGdmcihsdCxjdCksbnQ9bmV3IEdkcihsdCxfdCx3dCxjdCksa3Q9bmV3IFFkcihsdCx3dCxldCxudCksaWU9bmV3IG9tcihsdCxrdCx3dCxldCksJHQ9bmV3IGltcihsdCxjdCxxKSx0dD1uZXcgamRyKGR0KSxlZT1uZXcgcGdyKGcscHQsaHQsX3QsY3QsbnQsdHQpLExlPW5ldyBBZ3IoZHQpLGFyPW5ldyBnZ3IsZnI9bmV3IHdncihfdCxjdCksSXQ9bmV3IHFkcihnLHB0LFgsaWUsbixzKSwkPW5ldyBYZmUoZyxpZSxjdCksaGU9bmV3IFdkcihsdCxfdCxldCxjdCksVHQ9bmV3IHRtcihsdCxfdCxldCxjdCksZXQucHJvZ3JhbXM9ZWUucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9Y3QsZy5leHRlbnNpb25zPV90LGcucHJvcGVydGllcz1kdCxnLnJlbmRlckxpc3RzPWFyLGcuc2hhZG93TWFwPSQsZy5zdGF0ZT1YLGcuaW5mbz1ldH1DdCgpO2xldCBXdD1uZXcgZWh0KGcsbHQpO3RoaXMueHI9V3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBLPV90LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7SyYmSy5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihLKXtLIT09dm9pZCAwJiYoST1LLHRoaXMuc2V0U2l6ZShELEIsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEspe3JldHVybiBLLnNldChELEIpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oSyxndCxFdCl7aWYoV3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn1EPUssQj1ndCx0LndpZHRoPU1hdGguZmxvb3IoSypJKSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkkpLEV0IT09ITEmJih0LnN0eWxlLndpZHRoPUsrInB4Iix0LnN0eWxlLmhlaWdodD1ndCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCpJLEIqSSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLLGd0LEV0KXtEPUssQj1ndCxJPUV0LHQud2lkdGg9TWF0aC5mbG9vcihLKkV0KSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkV0KSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShQKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEYpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P0Yuc2V0KEsueCxLLnksSy56LEsudyk6Ri5zZXQoSyxndCxFdCx4dCksWC52aWV3cG9ydChQLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KHopfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSyxndCxFdCx4dCl7Sy5pc1ZlY3RvcjQ/ei5zZXQoSy54LEsueSxLLnosSy53KTp6LnNldChLLGd0LEV0LHh0KSxYLnNjaXNzb3Ioay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFV9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSyl7WC5zZXRTY2lzc29yVGVzdChVPUspfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oSyl7TD1LfSx0aGlzLnNldFRyYW5zcGFyZW50U29ydD1mdW5jdGlvbihLKXtSPUt9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEl0LmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0l0LnNldENsZWFyQ29sb3IuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SXQuc2V0Q2xlYXJBbHBoYS5hcHBseShJdCxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEssZ3QsRXQpe2xldCB4dD0wOyhLPT09dm9pZCAwfHxLKSYmKHh0fD0xNjM4NCksKGd0PT09dm9pZCAwfHxndCkmJih4dHw9MjU2KSwoRXQ9PT12b2lkIDB8fEV0KSYmKHh0fD0xMDI0KSxsdC5jbGVhcih4dCl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGFyLmRpc3Bvc2UoKSxmci5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHB0LmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksaWUuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxlZS5kaXNwb3NlKCksV3QuZGlzcG9zZSgpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSxvdCYmKG90LmRpc3Bvc2UoKSxvdD1udWxsKSxXaS5zdG9wKCl9O2Z1bmN0aW9uIGZlKEspe0sucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gYXQoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2xldCBLPWV0LmF1dG9SZXNldCxndD0kLmVuYWJsZWQsRXQ9JC5hdXRvVXBkYXRlLHh0PSQubmVlZHNVcGRhdGUsRnQ9JC50eXBlO0N0KCksZXQuYXV0b1Jlc2V0PUssJC5lbmFibGVkPWd0LCQuYXV0b1VwZGF0ZT1FdCwkLm5lZWRzVXBkYXRlPXh0LCQudHlwZT1GdH1mdW5jdGlvbiBzZShLKXtsZXQgZ3Q9Sy50YXJnZXQ7Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFF0KGd0KX1mdW5jdGlvbiBRdChLKXtDZShLKSxkdC5yZW1vdmUoSyl9ZnVuY3Rpb24gQ2UoSyl7bGV0IGd0PWR0LmdldChLKS5wcm9ncmFtcztndCE9PXZvaWQgMCYmKGd0LmZvckVhY2goZnVuY3Rpb24oRXQpe2VlLnJlbGVhc2VQcm9ncmFtKEV0KX0pLEsuaXNTaGFkZXJNYXRlcmlhbCYmZWUucmVsZWFzZVNoYWRlckNhY2hlKEspKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0LFZlKXtndD09PW51bGwmJihndD1idCk7bGV0IFVlPUZ0LmlzTWVzaCYmRnQubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHRyPWNuKEssZ3QsRXQseHQsRnQpO1guc2V0TWF0ZXJpYWwoeHQsVWUpO2xldCBLZT1FdC5pbmRleCxYcj1FdC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKEtlPT09bnVsbCl7aWYoWHI9PT12b2lkIDB8fFhyLmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihLZS5jb3VudD09PTApcmV0dXJuO2xldCBfcj0xO3h0LndpcmVmcmFtZT09PSEwJiYoS2U9a3QuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKEV0KSxfcj0yKSxudC5zZXR1cChGdCx4dCx0cixFdCxLZSk7bGV0IFByLGpuPWhlO0tlIT09bnVsbCYmKFByPXd0LmdldChLZSksam49VHQsam4uc2V0SW5kZXgoUHIpKTtsZXQgbnA9S2UhPT1udWxsP0tlLmNvdW50OlhyLmNvdW50LHVtPUV0LmRyYXdSYW5nZS5zdGFydCpfcixtcj1FdC5kcmF3UmFuZ2UuY291bnQqX3IsRmw9VmUhPT1udWxsP1ZlLnN0YXJ0Kl9yOjAsWG49VmUhPT1udWxsP1ZlLmNvdW50Kl9yOjEvMCxCbD1NYXRoLm1heCh1bSxGbCksdXg9TWF0aC5taW4obnAsdW0rbXIsRmwrWG4pLTEsSGw9TWF0aC5tYXgoMCx1eC1CbCsxKTtpZihIbCE9PTApe2lmKEZ0LmlzTWVzaCl4dC53aXJlZnJhbWU9PT0hMD8oWC5zZXRMaW5lV2lkdGgoeHQud2lyZWZyYW1lTGluZXdpZHRoKk10KCkpLGpuLnNldE1vZGUoMSkpOmpuLnNldE1vZGUoNCk7ZWxzZSBpZihGdC5pc0xpbmUpe2xldCBWbD14dC5saW5ld2lkdGg7Vmw9PT12b2lkIDAmJihWbD0xKSxYLnNldExpbmVXaWR0aChWbCpNdCgpKSxGdC5pc0xpbmVTZWdtZW50cz9qbi5zZXRNb2RlKDEpOkZ0LmlzTGluZUxvb3A/am4uc2V0TW9kZSgyKTpqbi5zZXRNb2RlKDMpfWVsc2UgRnQuaXNQb2ludHM/am4uc2V0TW9kZSgwKTpGdC5pc1Nwcml0ZSYmam4uc2V0TW9kZSg0KTtpZihGdC5pc0luc3RhbmNlZE1lc2gpam4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLEZ0LmNvdW50KTtlbHNlIGlmKEV0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCBWbD1NYXRoLm1pbihFdC5pbnN0YW5jZUNvdW50LEV0Ll9tYXhJbnN0YW5jZUNvdW50KTtqbi5yZW5kZXJJbnN0YW5jZXMoQmwsSGwsVmwpfWVsc2Ugam4ucmVuZGVyKEJsLEhsKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihLLGd0KXtmPWZyLmdldChLKSxmLmluaXQoKSxkLnB1c2goZiksSy50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oRXQpe0V0LmlzTGlnaHQmJkV0LmxheWVycy50ZXN0KGd0LmxheWVycykmJihmLnB1c2hMaWdodChFdCksRXQuY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KEV0KSl9KSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEsudHJhdmVyc2UoZnVuY3Rpb24oRXQpe2xldCB4dD1FdC5tYXRlcmlhbDtpZih4dClpZihBcnJheS5pc0FycmF5KHh0KSlmb3IobGV0IEZ0PTA7RnQ8eHQubGVuZ3RoO0Z0Kyspe2xldCBWZT14dFtGdF07Y20oVmUsSyxFdCl9ZWxzZSBjbSh4dCxLLEV0KX0pLGQucG9wKCksZj1udWxsfTtsZXQgUHQ9bnVsbDtmdW5jdGlvbiBOdChLKXtQdCYmUHQoSyl9ZnVuY3Rpb24gemUoKXtXaS5zdG9wKCl9ZnVuY3Rpb24geW4oKXtXaS5zdGFydCgpfWxldCBXaT1uZXcgRmZlO1dpLnNldEFuaW1hdGlvbkxvb3AoTnQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZXaS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKEspe1B0PUssV3Quc2V0QW5pbWF0aW9uTG9vcChLKSxLPT09bnVsbD9XaS5zdG9wKCk6V2kuc3RhcnQoKX0sV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0Iix6ZSksV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIseW4pLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEssZ3Qpe2lmKGd0IT09dm9pZCAwJiZndC5pc0NhbWVyYSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7cmV0dXJufWlmKF89PT0hMClyZXR1cm47Sy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlTWF0cml4V29ybGQoKSxndC5wYXJlbnQ9PT1udWxsJiZndC51cGRhdGVNYXRyaXhXb3JsZCgpLFd0LmVuYWJsZWQ9PT0hMCYmV3QuaXNQcmVzZW50aW5nPT09ITAmJihXdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJld0LnVwZGF0ZUNhbWVyYShndCksZ3Q9V3QuZ2V0Q2FtZXJhKCkpLEsuaXNTY2VuZT09PSEwJiZLLm9uQmVmb3JlUmVuZGVyKGcsSyxndCxiKSxmPWZyLmdldChLLGQubGVuZ3RoKSxmLmluaXQoKSxkLnB1c2goZiksc3QubXVsdGlwbHlNYXRyaWNlcyhndC5wcm9qZWN0aW9uTWF0cml4LGd0Lm1hdHJpeFdvcmxkSW52ZXJzZSksVy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzdCkscnQ9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCxaPXR0LmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxydCxndCksaD1hci5nZXQoSyxwLmxlbmd0aCksaC5pbml0KCkscC5wdXNoKGgpLEFyKEssZ3QsMCxnLnNvcnRPYmplY3RzKSxoLmZpbmlzaCgpLGcuc29ydE9iamVjdHM9PT0hMCYmaC5zb3J0KEwsUiksWj09PSEwJiZ0dC5iZWdpblNoYWRvd3MoKTtsZXQgRXQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYoJC5yZW5kZXIoRXQsSyxndCksWj09PSEwJiZ0dC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxJdC5yZW5kZXIoaCxLKSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLGd0LmlzQXJyYXlDYW1lcmEpe2xldCB4dD1ndC5jYW1lcmFzO2ZvcihsZXQgRnQ9MCxWZT14dC5sZW5ndGg7RnQ8VmU7RnQrKyl7bGV0IFVlPXh0W0Z0XTtQYShoLEssVWUsVWUudmlld3BvcnQpfX1lbHNlIFBhKGgsSyxndCk7YiE9PW51bGwmJihxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkFmdGVyUmVuZGVyKGcsSyxndCksWC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFguYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxYLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksWC5zZXRQb2x5Z29uT2Zmc2V0KCExKSxudC5yZXNldERlZmF1bHRTdGF0ZSgpLFM9LTEsQz1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9mPWRbZC5sZW5ndGgtMV06Zj1udWxsLHAucG9wKCkscC5sZW5ndGg+MD9oPXBbcC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBBcihLLGd0LEV0LHh0KXtpZihLLnZpc2libGU9PT0hMSlyZXR1cm47aWYoSy5sYXllcnMudGVzdChndC5sYXllcnMpKXtpZihLLmlzR3JvdXApRXQ9Sy5yZW5kZXJPcmRlcjtlbHNlIGlmKEsuaXNMT0QpSy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlKGd0KTtlbHNlIGlmKEsuaXNMaWdodClmLnB1c2hMaWdodChLKSxLLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhLKTtlbHNlIGlmKEsuaXNTcHJpdGUpe2lmKCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c1Nwcml0ZShLKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDt0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1lbHNlIGlmKChLLmlzTWVzaHx8Sy5pc0xpbmV8fEsuaXNQb2ludHMpJiYoSy5pc1NraW5uZWRNZXNoJiZLLnNrZWxldG9uLmZyYW1lIT09ZXQucmVuZGVyLmZyYW1lJiYoSy5za2VsZXRvbi51cGRhdGUoKSxLLnNrZWxldG9uLmZyYW1lPWV0LnJlbmRlci5mcmFtZSksIUsuZnJ1c3R1bUN1bGxlZHx8Vy5pbnRlcnNlY3RzT2JqZWN0KEspKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHRyKSl7bGV0IEtlPVVlLmdyb3Vwcztmb3IobGV0IFhyPTAsX3I9S2UubGVuZ3RoO1hyPF9yO1hyKyspe2xldCBQcj1LZVtYcl0sam49dHJbUHIubWF0ZXJpYWxJbmRleF07am4mJmpuLnZpc2libGUmJmgucHVzaChLLFVlLGpuLEV0LFN0LnosUHIpfX1lbHNlIHRyLnZpc2libGUmJmgucHVzaChLLFVlLHRyLEV0LFN0LnosbnVsbCl9fWxldCBWZT1LLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCx0cj1WZS5sZW5ndGg7VWU8dHI7VWUrKylBcihWZVtVZV0sZ3QsRXQseHQpfWZ1bmN0aW9uIFBhKEssZ3QsRXQseHQpe2xldCBGdD1LLm9wYXF1ZSxWZT1LLnRyYW5zbWlzc2l2ZSxVZT1LLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KEV0KSxWZS5sZW5ndGg+MCYmaG8oRnQsZ3QsRXQpLHh0JiZYLnZpZXdwb3J0KFAuY29weSh4dCkpLEZ0Lmxlbmd0aD4wJiZJYShGdCxndCxFdCksVmUubGVuZ3RoPjAmJklhKFZlLGd0LEV0KSxVZS5sZW5ndGg+MCYmSWEoVWUsZ3QsRXQpfWZ1bmN0aW9uIGhvKEssZ3QsRXQpe2lmKG90PT09bnVsbCl7bGV0IFVlPWE9PT0hMCYmY3QuaXNXZWJHTDI9PT0hMD9qMzp1cztvdD1uZXcgVWUoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpiZS5jb252ZXJ0KEMxKSE9PW51bGw/QzE6WmQsbWluRmlsdGVyOm94LG1hZ0ZpbHRlcjpMaSx3cmFwUzpKbyx3cmFwVDpKbyx1c2VSZW5kZXJUb1RleHR1cmU6X3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCB4dD1nLmdldFJlbmRlclRhcmdldCgpO2cuc2V0UmVuZGVyVGFyZ2V0KG90KSxnLmNsZWFyKCk7bGV0IEZ0PWcudG9uZU1hcHBpbmc7Zy50b25lTWFwcGluZz1LZCxJYShLLGd0LEV0KSxnLnRvbmVNYXBwaW5nPUZ0LHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQob3QpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKG90KSxnLnNldFJlbmRlclRhcmdldCh4dCl9ZnVuY3Rpb24gSWEoSyxndCxFdCl7bGV0IHh0PWd0LmlzU2NlbmU9PT0hMD9ndC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBGdD0wLFZlPUsubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT1LW0Z0XSx0cj1VZS5vYmplY3QsS2U9VWUuZ2VvbWV0cnksWHI9eHQ9PT1udWxsP1VlLm1hdGVyaWFsOnh0LF9yPVVlLmdyb3VwO3RyLmxheWVycy50ZXN0KEV0LmxheWVycykmJmx4KHRyLGd0LEV0LEtlLFhyLF9yKX19ZnVuY3Rpb24gbHgoSyxndCxFdCx4dCxGdCxWZSl7Sy5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKSxLLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKEV0Lm1hdHJpeFdvcmxkSW52ZXJzZSxLLm1hdHJpeFdvcmxkKSxLLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoSy5tb2RlbFZpZXdNYXRyaXgpLEZ0Lm9uQmVmb3JlUmVuZGVyKGcsZ3QsRXQseHQsSyxWZSksRnQudHJhbnNwYXJlbnQ9PT0hMCYmRnQuc2lkZT09PUwxPyhGdC5zaWRlPUlpLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9STEsRnQubmVlZHNVcGRhdGU9ITAsZy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksRnQuc2lkZT1MMSk6Zy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksSy5vbkFmdGVyUmVuZGVyKGcsZ3QsRXQseHQsRnQsVmUpfWZ1bmN0aW9uIGNtKEssZ3QsRXQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KTtsZXQgeHQ9ZHQuZ2V0KEspLEZ0PWYuc3RhdGUubGlnaHRzLFZlPWYuc3RhdGUuc2hhZG93c0FycmF5LFVlPUZ0LnN0YXRlLnZlcnNpb24sdHI9ZWUuZ2V0UGFyYW1ldGVycyhLLEZ0LnN0YXRlLFZlLGd0LEV0KSxLZT1lZS5nZXRQcm9ncmFtQ2FjaGVLZXkodHIpLFhyPXh0LnByb2dyYW1zO3h0LmVudmlyb25tZW50PUsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHh0LmZvZz1ndC5mb2cseHQuZW52TWFwPShLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldChLLmVudk1hcHx8eHQuZW52aXJvbm1lbnQpLFhyPT09dm9pZCAwJiYoSy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzZSksWHI9bmV3IE1hcCx4dC5wcm9ncmFtcz1Ycik7bGV0IF9yPVhyLmdldChLZSk7aWYoX3IhPT12b2lkIDApe2lmKHh0LmN1cnJlbnRQcm9ncmFtPT09X3ImJnh0LmxpZ2h0c1N0YXRlVmVyc2lvbj09PVVlKXJldHVybiBKMChLLHRyKSxfcn1lbHNlIHRyLnVuaWZvcm1zPWVlLmdldFVuaWZvcm1zKEspLEsub25CdWlsZChFdCx0cixnKSxLLm9uQmVmb3JlQ29tcGlsZSh0cixnKSxfcj1lZS5hY3F1aXJlUHJvZ3JhbSh0cixLZSksWHIuc2V0KEtlLF9yKSx4dC51bmlmb3Jtcz10ci51bmlmb3JtcztsZXQgUHI9eHQudW5pZm9ybXM7KCFLLmlzU2hhZGVyTWF0ZXJpYWwmJiFLLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fEsuY2xpcHBpbmc9PT0hMCkmJihQci5jbGlwcGluZ1BsYW5lcz10dC51bmlmb3JtKSxKMChLLHRyKSx4dC5uZWVkc0xpZ2h0cz1ycChLKSx4dC5saWdodHNTdGF0ZVZlcnNpb249VWUseHQubmVlZHNMaWdodHMmJihQci5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1GdC5zdGF0ZS5hbWJpZW50LFByLmxpZ2h0UHJvYmUudmFsdWU9RnQuc3RhdGUucHJvYmUsUHIuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWwsUHIuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csUHIuc3BvdExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5zcG90LFByLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvdyxQci5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYSxQci5sdGNfMS52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYUxUQzEsUHIubHRjXzIudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMyLFByLnBvaW50TGlnaHRzLnZhbHVlPUZ0LnN0YXRlLnBvaW50LFByLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93LFByLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9RnQuc3RhdGUuaGVtaSxQci5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxQci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxQci5zcG90U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3dNYXAsUHIuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWF0cml4LFByLnBvaW50U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWFwLFByLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgam49X3IuZ2V0VW5pZm9ybXMoKSxucD1CMC5zZXFXaXRoVmFsdWUoam4uc2VxLFByKTtyZXR1cm4geHQuY3VycmVudFByb2dyYW09X3IseHQudW5pZm9ybXNMaXN0PW5wLF9yfWZ1bmN0aW9uIEowKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQub3V0cHV0RW5jb2Rpbmc9Z3Qub3V0cHV0RW5jb2RpbmcsRXQuaW5zdGFuY2luZz1ndC5pbnN0YW5jaW5nLEV0LnNraW5uaW5nPWd0LnNraW5uaW5nLEV0Lm1vcnBoVGFyZ2V0cz1ndC5tb3JwaFRhcmdldHMsRXQubW9ycGhOb3JtYWxzPWd0Lm1vcnBoTm9ybWFscyxFdC5tb3JwaFRhcmdldHNDb3VudD1ndC5tb3JwaFRhcmdldHNDb3VudCxFdC5udW1DbGlwcGluZ1BsYW5lcz1ndC5udW1DbGlwcGluZ1BsYW5lcyxFdC5udW1JbnRlcnNlY3Rpb249Z3QubnVtQ2xpcEludGVyc2VjdGlvbixFdC52ZXJ0ZXhBbHBoYXM9Z3QudmVydGV4QWxwaGFzLEV0LnZlcnRleFRhbmdlbnRzPWd0LnZlcnRleFRhbmdlbnRzLEV0LnRvbmVNYXBwaW5nPWd0LnRvbmVNYXBwaW5nfWZ1bmN0aW9uIGNuKEssZ3QsRXQseHQsRnQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFZlPWd0LmZvZyxVZT14dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2d0LmVudmlyb25tZW50Om51bGwsdHI9Yj09PW51bGw/Zy5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6UWQsS2U9KHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldCh4dC5lbnZNYXB8fFVlKSxYcj14dC52ZXJ0ZXhDb2xvcnM9PT0hMCYmISFFdC5hdHRyaWJ1dGVzLmNvbG9yJiZFdC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCxfcj0hIXh0Lm5vcm1hbE1hcCYmISFFdC5hdHRyaWJ1dGVzLnRhbmdlbnQsUHI9ISFFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sam49ISFFdC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG5wPUV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsdW09eHQudG9uZU1hcHBlZD9nLnRvbmVNYXBwaW5nOktkLG1yPWR0LmdldCh4dCksRmw9Zi5zdGF0ZS5saWdodHM7aWYoWj09PSEwJiYocnQ9PT0hMHx8SyE9PUMpKXtsZXQgcXM9Sz09PUMmJnh0LmlkPT09Uzt0dC5zZXRTdGF0ZSh4dCxLLHFzKX1sZXQgWG49ITE7eHQudmVyc2lvbj09PW1yLl9fdmVyc2lvbj8obXIubmVlZHNMaWdodHMmJm1yLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PUZsLnN0YXRlLnZlcnNpb258fG1yLm91dHB1dEVuY29kaW5nIT09dHJ8fEZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSExfHwhRnQuaXNJbnN0YW5jZWRNZXNoJiZtci5pbnN0YW5jaW5nPT09ITB8fEZ0LmlzU2tpbm5lZE1lc2gmJm1yLnNraW5uaW5nPT09ITF8fCFGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSEwfHxtci5lbnZNYXAhPT1LZXx8eHQuZm9nJiZtci5mb2chPT1WZXx8bXIubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihtci5udW1DbGlwcGluZ1BsYW5lcyE9PXR0Lm51bVBsYW5lc3x8bXIubnVtSW50ZXJzZWN0aW9uIT09dHQubnVtSW50ZXJzZWN0aW9uKXx8bXIudmVydGV4QWxwaGFzIT09WHJ8fG1yLnZlcnRleFRhbmdlbnRzIT09X3J8fG1yLm1vcnBoVGFyZ2V0cyE9PVByfHxtci5tb3JwaE5vcm1hbHMhPT1qbnx8bXIudG9uZU1hcHBpbmchPT11bXx8Y3QuaXNXZWJHTDI9PT0hMCYmbXIubW9ycGhUYXJnZXRzQ291bnQhPT1ucCkmJihYbj0hMCk6KFhuPSEwLG1yLl9fdmVyc2lvbj14dC52ZXJzaW9uKTtsZXQgQmw9bXIuY3VycmVudFByb2dyYW07WG49PT0hMCYmKEJsPWNtKHh0LGd0LEZ0KSk7bGV0IHV4PSExLEhsPSExLFZsPSExLFlpPUJsLmdldFVuaWZvcm1zKCksaG09bXIudW5pZm9ybXM7aWYoWC51c2VQcm9ncmFtKEJsLnByb2dyYW0pJiYodXg9ITAsSGw9ITAsVmw9ITApLHh0LmlkIT09UyYmKFM9eHQuaWQsSGw9ITApLHV4fHxDIT09Syl7aWYoWWkuc2V0VmFsdWUobHQsInByb2plY3Rpb25NYXRyaXgiLEsucHJvamVjdGlvbk1hdHJpeCksY3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmWWkuc2V0VmFsdWUobHQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEsuZmFyKzEpL01hdGguTE4yKSksQyE9PUsmJihDPUssSGw9ITAsVmw9ITApLHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuZW52TWFwKXtsZXQgcXM9WWkubWFwLmNhbWVyYVBvc2l0aW9uO3FzIT09dm9pZCAwJiZxcy5zZXRWYWx1ZShsdCxTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkpfSh4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8eHQuaXNNZXNoQmFzaWNNYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuaXNTaGFkZXJNYXRlcmlhbCkmJllpLnNldFZhbHVlKGx0LCJpc09ydGhvZ3JhcGhpYyIsSy5pc09ydGhvZ3JhcGhpY0NhbWVyYT09PSEwKSwoeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzU2hhZG93TWF0ZXJpYWx8fEZ0LmlzU2tpbm5lZE1lc2gpJiZZaS5zZXRWYWx1ZShsdCwidmlld01hdHJpeCIsSy5tYXRyaXhXb3JsZEludmVyc2UpfWlmKEZ0LmlzU2tpbm5lZE1lc2gpe1lpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4IiksWWkuc2V0T3B0aW9uYWwobHQsRnQsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHFzPUZ0LnNrZWxldG9uO3FzJiYoY3QuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8ocXMuYm9uZVRleHR1cmU9PT1udWxsJiZxcy5jb21wdXRlQm9uZVRleHR1cmUoKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmUiLHFzLmJvbmVUZXh0dXJlLHEpLFlpLnNldFZhbHVlKGx0LCJib25lVGV4dHVyZVNpemUiLHFzLmJvbmVUZXh0dXJlU2l6ZSkpOllpLnNldE9wdGlvbmFsKGx0LHFzLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFFdCYmKEV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8RXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCkmJiR0LnVwZGF0ZShGdCxFdCx4dCxCbCksKEhsfHxtci5yZWNlaXZlU2hhZG93IT09RnQucmVjZWl2ZVNoYWRvdykmJihtci5yZWNlaXZlU2hhZG93PUZ0LnJlY2VpdmVTaGFkb3csWWkuc2V0VmFsdWUobHQsInJlY2VpdmVTaGFkb3ciLEZ0LnJlY2VpdmVTaGFkb3cpKSxIbCYmKFlpLnNldFZhbHVlKGx0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLG1yLm5lZWRzTGlnaHRzJiZjeChobSxWbCksVmUmJnh0LmZvZyYmTGUucmVmcmVzaEZvZ1VuaWZvcm1zKGhtLFZlKSxMZS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhobSx4dCxJLEIsb3QpLEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkpLHh0LmlzU2hhZGVyTWF0ZXJpYWwmJnh0LnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoQjAudXBsb2FkKGx0LG1yLnVuaWZvcm1zTGlzdCxobSxxKSx4dC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLHh0LmlzU3ByaXRlTWF0ZXJpYWwmJllpLnNldFZhbHVlKGx0LCJjZW50ZXIiLEZ0LmNlbnRlciksWWkuc2V0VmFsdWUobHQsIm1vZGVsVmlld01hdHJpeCIsRnQubW9kZWxWaWV3TWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibm9ybWFsTWF0cml4IixGdC5ub3JtYWxNYXRyaXgpLFlpLnNldFZhbHVlKGx0LCJtb2RlbE1hdHJpeCIsRnQubWF0cml4V29ybGQpLEJsfWZ1bmN0aW9uIGN4KEssZ3Qpe0suYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9Z3QsSy5saWdodFByb2JlLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9Z3QsSy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndH1mdW5jdGlvbiBycChLKXtyZXR1cm4gSy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEsuaXNNZXNoVG9vbk1hdGVyaWFsfHxLLmlzTWVzaFBob25nTWF0ZXJpYWx8fEsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Sy5pc1NoYWRvd01hdGVyaWFsfHxLLmlzU2hhZGVyTWF0ZXJpYWwmJksubGlnaHRzPT09ITB9dGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXM9ZnVuY3Rpb24oSyxndCxFdCl7ZHQuZ2V0KEsudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9Z3QsZHQuZ2V0KEsuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1FdDtsZXQgeHQ9ZHQuZ2V0KEspO3h0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcz0hMCx4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJih4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPUV0PT09dm9pZCAwLHh0Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEsudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxLLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxLLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQuX193ZWJnbEZyYW1lYnVmZmVyPWd0LEV0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPWd0PT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihLLGd0PTAsRXQ9MCl7Yj1LLHk9Z3QseD1FdDtsZXQgeHQ9ITA7aWYoSyl7bGV0IEtlPWR0LmdldChLKTtLZS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciE9PXZvaWQgMD8oWC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCkseHQ9ITEpOktlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9xLnNldHVwUmVuZGVyVGFyZ2V0KEspOktlLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmcS5yZWJpbmRUZXh0dXJlcyhLLGR0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBGdD1udWxsLFZlPSExLFVlPSExO2lmKEspe2xldCBLZT1LLnRleHR1cmU7KEtlLmlzRGF0YVRleHR1cmUzRHx8S2UuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoVWU9ITApO2xldCBYcj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO0suaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KEZ0PVhyW2d0XSxWZT0hMCk6Sy51c2VSZW5kZXJidWZmZXI/RnQ9ZHQuZ2V0KEspLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpGdD1YcixQLmNvcHkoSy52aWV3cG9ydCksay5jb3B5KEsuc2Npc3NvciksTz1LLnNjaXNzb3JUZXN0fWVsc2UgUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksTz1VO2lmKFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLEZ0KSYmY3QuZHJhd0J1ZmZlcnMmJnh0JiZYLmRyYXdCdWZmZXJzKEssRnQpLFgudmlld3BvcnQoUCksWC5zY2lzc29yKGspLFguc2V0U2Npc3NvclRlc3QoTyksVmUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKTtsdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStndCxLZS5fX3dlYmdsVGV4dHVyZSxFdCl9ZWxzZSBpZihVZSl7bGV0IEtlPWR0LmdldChLLnRleHR1cmUpLFhyPWd0fHwwO2x0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LEtlLl9fd2ViZ2xUZXh0dXJlLEV0fHwwLFhyKX1TPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSxVZSl7aWYoIShLJiZLLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCB0cj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEsuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJlVlIT09dm9pZCAwJiYodHI9dHJbVWVdKSx0cil7WC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHIpO3RyeXtsZXQgS2U9Sy50ZXh0dXJlLFhyPUtlLmZvcm1hdCxfcj1LZS50eXBlO2lmKFhyIT09UW8mJmJlLmNvbnZlcnQoWHIpIT09bHQuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBQcj1fcj09PUMxJiYoX3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Y3QuaXNXZWJHTDImJl90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZihfciE9PVpkJiZiZS5jb252ZXJ0KF9yKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOCkmJiEoX3I9PT1qZCYmKGN0LmlzV2ViR0wyfHxfdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fF90LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpKSYmIVByKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7cmV0dXJufWx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/Z3Q+PTAmJmd0PD1LLndpZHRoLXh0JiZFdD49MCYmRXQ8PUsuaGVpZ2h0LUZ0JiZsdC5yZWFkUGl4ZWxzKGd0LEV0LHh0LEZ0LGJlLmNvbnZlcnQoWHIpLGJlLmNvbnZlcnQoX3IpLFZlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgS2U9YiE9PW51bGw/ZHQuZ2V0KGIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLEtlKX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0PTApe2lmKGd0LmlzRnJhbWVidWZmZXJUZXh0dXJlIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7cmV0dXJufWxldCB4dD1NYXRoLnBvdygyLC1FdCksRnQ9TWF0aC5mbG9vcihndC5pbWFnZS53aWR0aCp4dCksVmU9TWF0aC5mbG9vcihndC5pbWFnZS5oZWlnaHQqeHQpO3Euc2V0VGV4dHVyZTJEKGd0LDApLGx0LmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsRXQsMCwwLEsueCxLLnksRnQsVmUpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEssZ3QsRXQseHQ9MCl7bGV0IEZ0PWd0LmltYWdlLndpZHRoLFZlPWd0LmltYWdlLmhlaWdodCxVZT1iZS5jb252ZXJ0KEV0LmZvcm1hdCksdHI9YmUuY29udmVydChFdC50eXBlKTtxLnNldFRleHR1cmUyRChFdCwwKSxsdC5waXhlbFN0b3JlaSgzNzQ0MCxFdC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEsRXQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyxFdC51bnBhY2tBbGlnbm1lbnQpLGd0LmlzRGF0YVRleHR1cmU/bHQudGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksRnQsVmUsVWUsdHIsZ3QuaW1hZ2UuZGF0YSk6Z3QuaXNDb21wcmVzc2VkVGV4dHVyZT9sdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksZ3QubWlwbWFwc1swXS53aWR0aCxndC5taXBtYXBzWzBdLmhlaWdodCxVZSxndC5taXBtYXBzWzBdLmRhdGEpOmx0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LFVlLHRyLGd0LmltYWdlKSx4dD09PTAmJkV0LmdlbmVyYXRlTWlwbWFwcyYmbHQuZ2VuZXJhdGVNaXBtYXAoMzU1MyksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0PTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBWZT1LLm1heC54LUsubWluLngrMSxVZT1LLm1heC55LUsubWluLnkrMSx0cj1LLm1heC56LUsubWluLnorMSxLZT1iZS5jb252ZXJ0KHh0LmZvcm1hdCksWHI9YmUuY29udmVydCh4dC50eXBlKSxfcjtpZih4dC5pc0RhdGFUZXh0dXJlM0QpcS5zZXRUZXh0dXJlM0QoeHQsMCksX3I9MzI4Nzk7ZWxzZSBpZih4dC5pc0RhdGFUZXh0dXJlMkRBcnJheSlxLnNldFRleHR1cmUyREFycmF5KHh0LDApLF9yPTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1sdC5waXhlbFN0b3JlaSgzNzQ0MCx4dC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEseHQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyx4dC51bnBhY2tBbGlnbm1lbnQpO2xldCBQcj1sdC5nZXRQYXJhbWV0ZXIoMzMxNCksam49bHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxucD1sdC5nZXRQYXJhbWV0ZXIoMzMxNiksdW09bHQuZ2V0UGFyYW1ldGVyKDMzMTUpLG1yPWx0LmdldFBhcmFtZXRlcigzMjg3NyksRmw9RXQuaXNDb21wcmVzc2VkVGV4dHVyZT9FdC5taXBtYXBzWzBdOkV0LmltYWdlO2x0LnBpeGVsU3RvcmVpKDMzMTQsRmwud2lkdGgpLGx0LnBpeGVsU3RvcmVpKDMyODc4LEZsLmhlaWdodCksbHQucGl4ZWxTdG9yZWkoMzMxNixLLm1pbi54KSxsdC5waXhlbFN0b3JlaSgzMzE1LEsubWluLnkpLGx0LnBpeGVsU3RvcmVpKDMyODc3LEsubWluLnopLEV0LmlzRGF0YVRleHR1cmV8fEV0LmlzRGF0YVRleHR1cmUzRD9sdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsLmRhdGEpOkV0LmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksbHQuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsRmwuZGF0YSkpOmx0LnRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsWHIsRmwpLGx0LnBpeGVsU3RvcmVpKDMzMTQsUHIpLGx0LnBpeGVsU3RvcmVpKDMyODc4LGpuKSxsdC5waXhlbFN0b3JlaSgzMzE2LG5wKSxsdC5waXhlbFN0b3JlaSgzMzE1LHVtKSxsdC5waXhlbFN0b3JlaSgzMjg3NyxtciksRnQ9PT0wJiZ4dC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKF9yKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihLKXtxLnNldFRleHR1cmUyRChLLDApLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLGI9bnVsbCxYLnJlc2V0KCksbnQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXJuLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIGdVPWNsYXNzIGV4dGVuZHMgcm57fTtnVS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgTzE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5kZW5zaXR5PXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IE8xKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtPMS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB6MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMubmVhcj1yLHRoaXMuZmFyPW59Y2xvbmUoKXtyZXR1cm4gbmV3IHoxKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt6MS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoci5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxyfX07cTAucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIGVtPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9TmwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxyLG4pe3QqPXRoaXMuc3RyaWRlLG4qPXIuc3RyaWRlO2ZvcihsZXQgaT0wLG89dGhpcy5zdHJpZGU7aTxvO2krKyl0aGlzLmFycmF5W3QraV09ci5hcnJheVtuK2ldO3JldHVybiB0aGlzfXNldCh0LHI9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsciksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IHI9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHIsdGhpcy5zdHJpZGUpO3JldHVybiBuLnNldFVzYWdlKHRoaXMudXNhZ2UpLG59b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07ZW0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIEFpPW5ldyBqLHRwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGk9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5kYXRhLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixBaS54LEFpLnksQWkueik7cmV0dXJuIHRoaXN9c2V0WCh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1yLHRoaXN9c2V0WSh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPXIsdGhpc31zZXRaKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09cix0aGlzfXNldFcodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1yLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxyLG4pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPXIsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJuIG5ldyBKZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihyKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IHRwKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6cixub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07dHAucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGlNPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aU0ucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIE4zLERQPW5ldyBqLEQzPW5ldyBqLE8zPW5ldyBqLHozPW5ldyBMdCxPUD1uZXcgTHQsS2ZlPW5ldyBNZSxMVj1uZXcgaix6UD1uZXcgaixrVj1uZXcgaixqdWU9bmV3IEx0LGR1dD1uZXcgTHQsWHVlPW5ldyBMdCxvTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLE4zPT09dm9pZCAwKXtOMz1uZXcgUGU7bGV0IHI9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksbj1uZXcgZW0ociw1KTtOMy5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxOMy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgdHAobiwzLDAsITEpKSxOMy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgdHAobiwyLDMsITEpKX10aGlzLmdlb21ldHJ5PU4zLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBpTSx0aGlzLmNlbnRlcj1uZXcgTHQoLjUsLjUpfXJheWNhc3QodCxyKXt0LmNhbWVyYT09PW51bGwmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxEMy5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksS2ZlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE8zLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmRDMubXVsdGlwbHlTY2FsYXIoLU8zLnopO2xldCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb24saSxvO24hPT0wJiYobz1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtsZXQgYT10aGlzLmNlbnRlcjtSVihMVi5zZXQoLS41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoelAuc2V0KC41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoa1Yuc2V0KC41LC41LDApLE8zLGEsRDMsaSxvKSxqdWUuc2V0KDAsMCksZHV0LnNldCgxLDApLFh1ZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVix6UCxrViwhMSxEUCk7aWYocz09PW51bGwmJihSVih6UC5zZXQoLS41LC41LDApLE8zLGEsRDMsaSxvKSxkdXQuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVixrVix6UCwhMSxEUCkscz09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhEUCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpEUC5jbG9uZSgpLHV2Om9pLmdldFVWKERQLExWLHpQLGtWLGp1ZSxkdXQsWHVlLG5ldyBMdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0LmNlbnRlciE9PXZvaWQgMCYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fTtvTS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7ZnVuY3Rpb24gUlYoZSx0LHIsbixpLG8pe3ozLnN1YlZlY3RvcnMoZSxyKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG4pLGkhPT12b2lkIDA/KE9QLng9byp6My54LWkqejMueSxPUC55PWkqejMueCtvKnozLnkpOk9QLmNvcHkoejMpLGUuY29weSh0KSxlLngrPU9QLngsZS55Kz1PUC55LGUuYXBwbHlNYXRyaXg0KEtmZSl9dmFyIE5WPW5ldyBqLCR1ZT1uZXcgaixfVT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtsZXQgcj10LmxldmVscztmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspe2xldCBvPXJbbl07dGhpcy5hZGRMZXZlbChvLm9iamVjdC5jbG9uZSgpLG8uZGlzdGFuY2UpfXJldHVybiB0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXN9YWRkTGV2ZWwodCxyPTApe3I9TWF0aC5hYnMocik7bGV0IG49dGhpcy5sZXZlbHMsaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEocjxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOnIsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfWdldEN1cnJlbnRMZXZlbCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9Z2V0T2JqZWN0Rm9yRGlzdGFuY2UodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ci5sZW5ndGg7bjxpJiYhKHQ8cltuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gcltuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQscil7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe05WLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOVik7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShpKS5yYXljYXN0KHQscil9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLmxldmVscztpZihyLmxlbmd0aD4xKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksJHVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgbj1OVi5kaXN0YW5jZVRvKCR1ZSkvdC56b29tO3JbMF0ub2JqZWN0LnZpc2libGU9ITA7bGV0IGksbztmb3IoaT0xLG89ci5sZW5ndGg7aTxvJiZuPj1yW2ldLmRpc3RhbmNlO2krKylyW2ktMV0ub2JqZWN0LnZpc2libGU9ITEscltpXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPWktMTtpPG87aSsrKXJbaV0ub2JqZWN0LnZpc2libGU9ITF9fXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7dGhpcy5hdXRvVXBkYXRlPT09ITEmJihyLm9iamVjdC5hdXRvVXBkYXRlPSExKSxyLm9iamVjdC5sZXZlbHM9W107bGV0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXtsZXQgYT1uW2ldO3Iub2JqZWN0LmxldmVscy5wdXNoKHtvYmplY3Q6YS5vYmplY3QudXVpZCxkaXN0YW5jZTphLmRpc3RhbmNlfSl9cmV0dXJuIHJ9fSxLdWU9bmV3IGosWnVlPW5ldyBlbixKdWU9bmV3IGVuLElncj1uZXcgaixRdWU9bmV3IE1lLGFNPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IE1lLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxyKXt0aGlzLnNrZWxldG9uPXQscj09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxyPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KHIpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShyKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgZW4scj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7dC54PXIuZ2V0WChuKSx0Lnk9ci5nZXRZKG4pLHQuej1yLmdldFoobiksdC53PXIuZ2V0VyhuKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLHIuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LHIpe2xldCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O1p1ZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSnVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksS3VlLmNvcHkocikuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksci5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBhPUp1ZS5nZXRDb21wb25lbnQobyk7aWYoYSE9PTApe2xldCBzPVp1ZS5nZXRDb21wb25lbnQobyk7UXVlLm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tzXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tzXSksci5hZGRTY2FsZWRWZWN0b3IoSWdyLmNvcHkoS3VlKS5hcHBseU1hdHJpeDQoUXVlKSxhKX19cmV0dXJuIHIuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07YU0ucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIHNNPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtzTS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBKZD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEsbj0xLGksbyxhLHMsbCxjPUxpLHU9TGksaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bn0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O0pkLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciB0aGU9bmV3IE1lLExncj1uZXcgTWUsbE09Y2xhc3N7Y29uc3RydWN0b3IodD1bXSxyPVtdKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9cix0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9aW5pdCgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjE2KSxyLmxlbmd0aD09PTApdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCBuPTAsaT10aGlzLmJvbmVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKX19Y2FsY3VsYXRlSW52ZXJzZXMoKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPW5ldyBNZTt0aGlzLmJvbmVzW3RdJiZuLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChuKX19cG9zZSgpe2ZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiZuLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiYobi5wYXJlbnQmJm4ucGFyZW50LmlzQm9uZT8obi5tYXRyaXguY29weShuLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbi5tYXRyaXgubXVsdGlwbHkobi5tYXRyaXhXb3JsZCkpOm4ubWF0cml4LmNvcHkobi5tYXRyaXhXb3JsZCksbi5tYXRyaXguZGVjb21wb3NlKG4ucG9zaXRpb24sbi5xdWF0ZXJuaW9uLG4uc2NhbGUpKX19dXBkYXRlKCl7bGV0IHQ9dGhpcy5ib25lcyxyPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXT90W29dLm1hdHJpeFdvcmxkOkxncjt0aGUubXVsdGlwbHlNYXRyaWNlcyhzLHJbb10pLHRoZS50b0FycmF5KG4sbyoxNil9aSE9PW51bGwmJihpLm5lZWRzVXBkYXRlPSEwKX1jbG9uZSgpe3JldHVybiBuZXcgbE0odGhpcy5ib25lcyx0aGlzLmJvbmVJbnZlcnNlcyl9Y29tcHV0ZUJvbmVUZXh0dXJlKCl7bGV0IHQ9TWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoKjQpO3Q9UmZlKHQpLHQ9TWF0aC5tYXgodCw0KTtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KHQqdCo0KTtyLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7bGV0IG49bmV3IEpkKHIsdCx0LFFvLGpkKTtyZXR1cm4gbi5uZWVkc1VwZGF0ZT0hMCx0aGlzLmJvbmVNYXRyaWNlcz1yLHRoaXMuYm9uZVRleHR1cmU9bix0aGlzLmJvbmVUZXh0dXJlU2l6ZT10LHRoaXN9Z2V0Qm9uZUJ5TmFtZSh0KXtmb3IobGV0IHI9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMuYm9uZXNbcl07aWYoaS5uYW1lPT09dClyZXR1cm4gaX19ZGlzcG9zZSgpe3RoaXMuYm9uZVRleHR1cmUhPT1udWxsJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LHIpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtsZXQgbz10LmJvbmVzW25dLGE9cltvXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxhPW5ldyBzTSksdGhpcy5ib25lcy5wdXNoKGEpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7bGV0IHI9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7bGV0IGE9cltpXTt0LmJvbmVzLnB1c2goYS51dWlkKTtsZXQgcz1uW2ldO3QuYm9uZUludmVyc2VzLnB1c2gocy50b0FycmF5KCkpfXJldHVybiB0fX0scm09Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbixpPTEpe3R5cGVvZiBuPT0ibnVtYmVyIiYmKGk9bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LHIsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cm0ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBlaGU9bmV3IE1lLHJoZT1uZXcgTWUsRFY9W10sRlA9bmV3IHRpLGk2PWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsciksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcm0obmV3IEZsb2F0MzJBcnJheShuKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxyKXtyLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLm1hdHJpeFdvcmxkLGk9dGhpcy5jb3VudDtpZihGUC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LEZQLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsRlAubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBvPTA7bzxpO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLGVoZSkscmhlLm11bHRpcGx5TWF0cmljZXMobixlaGUpLEZQLm1hdHJpeFdvcmxkPXJoZSxGUC5yYXljYXN0KHQsRFYpO2ZvcihsZXQgYT0wLHM9RFYubGVuZ3RoO2E8czthKyspe2xldCBsPURWW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsci5wdXNoKGwpfURWLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQscil7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcm0obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxyLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxyKXtyLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2k2LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIEdpPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O0dpLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBuaGU9bmV3IGosaWhlPW5ldyBqLG9oZT1uZXcgTWUsbXV0PW5ldyBKZixPVj1uZXcgWmYsY2g9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBHaSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCBpPTEsbz1yLmNvdW50O2k8bztpKyspbmhlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpLTEpLGloZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSksbltpXT1uW2ktMV0sbltpXSs9bmhlLmRpc3RhbmNlVG8oaWhlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgeGUobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLE9WLmNvcHkobi5ib3VuZGluZ1NwaGVyZSksT1YuYXBwbHlNYXRyaXg0KGkpLE9WLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKE9WKT09PSExKXJldHVybjtvaGUuY29weShpKS5pbnZlcnQoKSxtdXQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KG9oZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcyxjPW5ldyBqLHU9bmV3IGosaD1uZXcgaixmPW5ldyBqLHA9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZD1uLmluZGV4LF89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGQhPT1udWxsKXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oZC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtsZXQgQz1kLmdldFgoYiksUD1kLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxDKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxQKSxtdXQuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBPPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO088dC5uZWFyfHxPPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOk8scG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCB5PU1hdGgubWF4KDAsYS5zdGFydCkseD1NYXRoLm1pbihfLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBiPXksUz14LTE7YjxTO2IrPXApe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIrMSksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgUD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtQPHQubmVhcnx8UD50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpQLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19fWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2NoLnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIGFoZT1uZXcgaixzaGU9bmV3IGosQWE9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgaT0wLG89ci5jb3VudDtpPG87aSs9MilhaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLHNoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSsxKSxuW2ldPWk9PT0wPzA6bltpLTFdLG5baSsxXT1uW2ldK2FoZS5kaXN0YW5jZVRvKHNoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07QWEucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19O282LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBubT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtubS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgbGhlPW5ldyBNZSxyaHQ9bmV3IEpmLHpWPW5ldyBaZixGVj1uZXcgaixpbT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IFBlLHI9bmV3IG5tKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHpWLmNvcHkobi5ib3VuZGluZ1NwaGVyZSkselYuYXBwbHlNYXRyaXg0KGkpLHpWLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKHpWKT09PSExKXJldHVybjtsaGUuY29weShpKS5pbnZlcnQoKSxyaHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGxoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPW4uaW5kZXgsaD1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsYS5zdGFydCkscD1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBkPWYsZz1wO2Q8ZztkKyspe2xldCBfPWMuZ2V0WChkKTtGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsXyksY2hlKEZWLF8sbCxpLHQscix0aGlzKX19ZWxzZXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oaC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKUZWLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCxkKSxjaGUoRlYsZCxsLGksdCxyLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2ltLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBjaGUoZSx0LHIsbixpLG8sYSl7bGV0IHM9cmh0LmRpc3RhbmNlU3FUb1BvaW50KGUpO2lmKHM8cil7bGV0IGw9bmV3IGo7cmh0LmNsb3Nlc3RQb2ludFRvUG9pbnQoZSxsKSxsLmFwcGx5TWF0cml4NChuKTtsZXQgYz1pLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPGkubmVhcnx8Yz5pLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19dmFyIHlVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj1hIT09dm9pZCAwP2E6aWksdGhpcy5tYWdGaWx0ZXI9byE9PXZvaWQgMD9vOmlpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O3lVLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgdlU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzLmZvcm1hdD1uLHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt2VS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIGE2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoLGYpe3N1cGVyKG51bGwsYSxzLGwsYyx1LGksbyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTthNi5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgeFU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyl7c3VwZXIodCxyLG4saSxvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt4VS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBGMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTgsbj0wLGk9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6cix0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6aX0scj1NYXRoLm1heCgzLHIpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IGosdT1uZXcgTHQ7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PXI7aCsrLGYrPTMpe2xldCBwPW4raC9yKmk7Yy54PXQqTWF0aC5jb3MocCksYy55PXQqTWF0aC5zaW4ocCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLHUueD0oYVtmXS90KzEpLzIsdS55PShhW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1yO2grKylvLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRjEodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxvbT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9OCxvPTEsYT0hMSxzPTAsbD1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTpyLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6byxvcGVuRW5kZWQ6YSx0aGV0YVN0YXJ0OnMsdGhldGFMZW5ndGg6bH07bGV0IGM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pO2xldCB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9MCxnPVtdLF89bi8yLHk9MDt4KCksYT09PSExJiYodD4wJiZiKCEwKSxyPjAmJmIoITEpKSx0aGlzLnNldEluZGV4KHUpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiB4KCl7bGV0IFM9bmV3IGosQz1uZXcgaixQPTAsaz0oci10KS9uO2ZvcihsZXQgTz0wO088PW87TysrKXtsZXQgRD1bXSxCPU8vbyxJPUIqKHItdCkrdDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IFI9TC9pLEY9UipsK3Msej1NYXRoLnNpbihGKSxVPU1hdGguY29zKEYpO0MueD1JKnosQy55PS1CKm4rXyxDLno9SSpVLGgucHVzaChDLngsQy55LEMueiksUy5zZXQoeixrLFUpLm5vcm1hbGl6ZSgpLGYucHVzaChTLngsUy55LFMueikscC5wdXNoKFIsMS1CKSxELnB1c2goZCsrKX1nLnB1c2goRCl9Zm9yKGxldCBPPTA7TzxpO08rKylmb3IobGV0IEQ9MDtEPG87RCsrKXtsZXQgQj1nW0RdW09dLEk9Z1tEKzFdW09dLEw9Z1tEKzFdW08rMV0sUj1nW0RdW08rMV07dS5wdXNoKEIsSSxSKSx1LnB1c2goSSxMLFIpLFArPTZ9Yy5hZGRHcm91cCh5LFAsMCkseSs9UH1mdW5jdGlvbiBiKFMpe2xldCBDPWQsUD1uZXcgTHQsaz1uZXcgaixPPTAsRD1TPT09ITA/dDpyLEI9Uz09PSEwPzE6LTE7Zm9yKGxldCBMPTE7TDw9aTtMKyspaC5wdXNoKDAsXypCLDApLGYucHVzaCgwLEIsMCkscC5wdXNoKC41LC41KSxkKys7bGV0IEk9ZDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IEY9TC9pKmwrcyx6PU1hdGguY29zKEYpLFU9TWF0aC5zaW4oRik7ay54PUQqVSxrLnk9XypCLGsuej1EKnosaC5wdXNoKGsueCxrLnksay56KSxmLnB1c2goMCxCLDApLFAueD16Ki41Ky41LFAueT1VKi41KkIrLjUscC5wdXNoKFAueCxQLnkpLGQrK31mb3IobGV0IEw9MDtMPGk7TCsrKXtsZXQgUj1DK0wsRj1JK0w7Uz09PSEwP3UucHVzaChGLEYrMSxSKTp1LnB1c2goRisxLEYsUiksTys9M31jLmFkZEdyb3VwKHksTyxTPT09ITA/MToyKSx5Kz1PfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvbSh0LnJhZGl1c1RvcCx0LnJhZGl1c0JvdHRvbSx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sQjE9Y2xhc3MgZXh0ZW5kcyBvbXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49OCxpPTEsbz0hMSxhPTAscz1NYXRoLlBJKjIpe3N1cGVyKDAsdCxyLG4saSxvLGEscyksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OnIscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBCMSh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sdWg9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PVtdLHI9W10sbj0xLGk9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczp0LGluZGljZXM6cixyYWRpdXM6bixkZXRhaWw6aX07bGV0IG89W10sYT1bXTtzKGkpLGMobiksdSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLnNsaWNlKCksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpLGk9PT0wP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtmdW5jdGlvbiBzKHgpe2xldCBiPW5ldyBqLFM9bmV3IGosQz1uZXcgajtmb3IobGV0IFA9MDtQPHIubGVuZ3RoO1ArPTMpcChyW1ArMF0sYikscChyW1ArMV0sUykscChyW1ArMl0sQyksbChiLFMsQyx4KX1mdW5jdGlvbiBsKHgsYixTLEMpe2xldCBQPUMrMSxrPVtdO2ZvcihsZXQgTz0wO088PVA7TysrKXtrW09dPVtdO2xldCBEPXguY2xvbmUoKS5sZXJwKFMsTy9QKSxCPWIuY2xvbmUoKS5sZXJwKFMsTy9QKSxJPVAtTztmb3IobGV0IEw9MDtMPD1JO0wrKylMPT09MCYmTz09PVA/a1tPXVtMXT1EOmtbT11bTF09RC5jbG9uZSgpLmxlcnAoQixML0kpfWZvcihsZXQgTz0wO088UDtPKyspZm9yKGxldCBEPTA7RDwyKihQLU8pLTE7RCsrKXtsZXQgQj1NYXRoLmZsb29yKEQvMik7RCUyPT09MD8oZihrW09dW0IrMV0pLGYoa1tPKzFdW0JdKSxmKGtbT11bQl0pKTooZihrW09dW0IrMV0pLGYoa1tPKzFdW0IrMV0pLGYoa1tPKzFdW0JdKSl9fWZ1bmN0aW9uIGMoeCl7bGV0IGI9bmV3IGo7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz0zKWIueD1vW1MrMF0sYi55PW9bUysxXSxiLno9b1tTKzJdLGIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoeCksb1tTKzBdPWIueCxvW1MrMV09Yi55LG9bUysyXT1iLnp9ZnVuY3Rpb24gdSgpe2xldCB4PW5ldyBqO2ZvcihsZXQgYj0wO2I8by5sZW5ndGg7Yis9Myl7eC54PW9bYiswXSx4Lnk9b1tiKzFdLHguej1vW2IrMl07bGV0IFM9Xyh4KS8yL01hdGguUEkrLjUsQz15KHgpL01hdGguUEkrLjU7YS5wdXNoKFMsMS1DKX1kKCksaCgpfWZ1bmN0aW9uIGgoKXtmb3IobGV0IHg9MDt4PGEubGVuZ3RoO3grPTYpe2xldCBiPWFbeCswXSxTPWFbeCsyXSxDPWFbeCs0XSxQPU1hdGgubWF4KGIsUyxDKSxrPU1hdGgubWluKGIsUyxDKTtQPi45JiZrPC4xJiYoYjwuMiYmKGFbeCswXSs9MSksUzwuMiYmKGFbeCsyXSs9MSksQzwuMiYmKGFbeCs0XSs9MSkpfX1mdW5jdGlvbiBmKHgpe28ucHVzaCh4LngseC55LHgueil9ZnVuY3Rpb24gcCh4LGIpe2xldCBTPXgqMztiLng9dFtTKzBdLGIueT10W1MrMV0sYi56PXRbUysyXX1mdW5jdGlvbiBkKCl7bGV0IHg9bmV3IGosYj1uZXcgaixTPW5ldyBqLEM9bmV3IGosUD1uZXcgTHQsaz1uZXcgTHQsTz1uZXcgTHQ7Zm9yKGxldCBEPTAsQj0wO0Q8by5sZW5ndGg7RCs9OSxCKz02KXt4LnNldChvW0QrMF0sb1tEKzFdLG9bRCsyXSksYi5zZXQob1tEKzNdLG9bRCs0XSxvW0QrNV0pLFMuc2V0KG9bRCs2XSxvW0QrN10sb1tEKzhdKSxQLnNldChhW0IrMF0sYVtCKzFdKSxrLnNldChhW0IrMl0sYVtCKzNdKSxPLnNldChhW0IrNF0sYVtCKzVdKSxDLmNvcHkoeCkuYWRkKGIpLmFkZChTKS5kaXZpZGVTY2FsYXIoMyk7bGV0IEk9XyhDKTtnKFAsQiswLHgsSSksZyhrLEIrMixiLEkpLGcoTyxCKzQsUyxJKX19ZnVuY3Rpb24gZyh4LGIsUyxDKXtDPDAmJngueD09PTEmJihhW2JdPXgueC0xKSxTLng9PT0wJiZTLno9PT0wJiYoYVtiXT1DLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gXyh4KXtyZXR1cm4gTWF0aC5hdGFuMih4LnosLXgueCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gTWF0aC5hdGFuMigteC55LE1hdGguc3FydCh4LngqeC54K3gueip4LnopKX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgdWgodC52ZXJ0aWNlcyx0LmluZGljZXMsdC5yYWRpdXMsdC5kZXRhaWxzKX19LEgxPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uLG89Wy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxhPVszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XTtzdXBlcihvLGEsdCxyKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBIMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxCVj1uZXcgaixIVj1uZXcgaixndXQ9bmV3IGosVlY9bmV3IG9pLHM2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsLHI9MSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dCx0aHJlc2hvbGRBbmdsZTpyfSx0IT09bnVsbCl7bGV0IGk9TWF0aC5wb3coMTAsNCksbz1NYXRoLmNvcyhQMSpyKSxhPXQuZ2V0SW5kZXgoKSxzPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGw9YT9hLmNvdW50OnMuY291bnQsYz1bMCwwLDBdLHU9WyJhIiwiYiIsImMiXSxoPW5ldyBBcnJheSgzKSxmPXt9LHA9W107Zm9yKGxldCBkPTA7ZDxsO2QrPTMpe2E/KGNbMF09YS5nZXRYKGQpLGNbMV09YS5nZXRYKGQrMSksY1syXT1hLmdldFgoZCsyKSk6KGNbMF09ZCxjWzFdPWQrMSxjWzJdPWQrMik7bGV0e2E6ZyxiOl8sYzp5fT1WVjtpZihnLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzBdKSxfLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzFdKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzJdKSxWVi5nZXROb3JtYWwoZ3V0KSxoWzBdPWAke01hdGgucm91bmQoZy54KmkpfSwke01hdGgucm91bmQoZy55KmkpfSwke01hdGgucm91bmQoZy56KmkpfWAsaFsxXT1gJHtNYXRoLnJvdW5kKF8ueCppKX0sJHtNYXRoLnJvdW5kKF8ueSppKX0sJHtNYXRoLnJvdW5kKF8ueippKX1gLGhbMl09YCR7TWF0aC5yb3VuZCh5LngqaSl9LCR7TWF0aC5yb3VuZCh5LnkqaSl9LCR7TWF0aC5yb3VuZCh5LnoqaSl9YCwhKGhbMF09PT1oWzFdfHxoWzFdPT09aFsyXXx8aFsyXT09PWhbMF0pKWZvcihsZXQgeD0wO3g8Mzt4Kyspe2xldCBiPSh4KzEpJTMsUz1oW3hdLEM9aFtiXSxQPVZWW3VbeF1dLGs9VlZbdVtiXV0sTz1gJHtTfV8ke0N9YCxEPWAke0N9XyR7U31gO0QgaW4gZiYmZltEXT8oZ3V0LmRvdChmW0RdLm5vcm1hbCk8PW8mJihwLnB1c2goUC54LFAueSxQLnopLHAucHVzaChrLngsay55LGsueikpLGZbRF09bnVsbCk6TyBpbiBmfHwoZltPXT17aW5kZXgwOmNbeF0saW5kZXgxOmNbYl0sbm9ybWFsOmd1dC5jbG9uZSgpfSl9fWZvcihsZXQgZCBpbiBmKWlmKGZbZF0pe2xldHtpbmRleDA6ZyxpbmRleDE6X309ZltkXTtCVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZyksSFYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLF8pLHAucHVzaChCVi54LEJWLnksQlYueikscC5wdXNoKEhWLngsSFYueSxIVi56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShwLDMpKX19fSxmcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLHIpfWdldFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiByfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIHJ9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgcj1bXSxuLGk9dGhpcy5nZXRQb2ludCgwKSxvPTA7ci5wdXNoKDApO2ZvcihsZXQgYT0xO2E8PXQ7YSsrKW49dGhpcy5nZXRQb2ludChhL3QpLG8rPW4uZGlzdGFuY2VUbyhpKSxyLnB1c2gobyksaT1uO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1yLHJ9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxyKXtsZXQgbj10aGlzLmdldExlbmd0aHMoKSxpPTAsbz1uLmxlbmd0aCxhO3I/YT1yOmE9dCpuW28tMV07bGV0IHM9MCxsPW8tMSxjO2Zvcig7czw9bDspaWYoaT1NYXRoLmZsb29yKHMrKGwtcykvMiksYz1uW2ldLWEsYzwwKXM9aSsxO2Vsc2UgaWYoYz4wKWw9aS0xO2Vsc2V7bD1pO2JyZWFrfWlmKGk9bCxuW2ldPT09YSlyZXR1cm4gaS8oby0xKTtsZXQgdT1uW2ldLGY9bltpKzFdLXUscD0oYS11KS9mO3JldHVybihpK3ApLyhvLTEpfWdldFRhbmdlbnQodCxyKXtsZXQgaT10LTFlLTQsbz10KzFlLTQ7aTwwJiYoaT0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQoaSkscz10aGlzLmdldFBvaW50KG8pLGw9cnx8KGEuaXNWZWN0b3IyP25ldyBMdDpuZXcgaik7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxyKXtsZXQgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixyKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQscil7bGV0IG49bmV3IGosaT1bXSxvPVtdLGE9W10scz1uZXcgaixsPW5ldyBNZTtmb3IobGV0IHA9MDtwPD10O3ArKyl7bGV0IGQ9cC90O2lbcF09dGhpcy5nZXRUYW5nZW50QXQoZCxuZXcgail9b1swXT1uZXcgaixhWzBdPW5ldyBqO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhpWzBdLngpLGg9TWF0aC5hYnMoaVswXS55KSxmPU1hdGguYWJzKGlbMF0ueik7dTw9YyYmKGM9dSxuLnNldCgxLDAsMCkpLGg8PWMmJihjPWgsbi5zZXQoMCwxLDApKSxmPD1jJiZuLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoaVswXSxuKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sb1swXSk7Zm9yKGxldCBwPTE7cDw9dDtwKyspe2lmKG9bcF09b1twLTFdLmNsb25lKCksYVtwXT1hW3AtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhpW3AtMV0saVtwXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgZD1NYXRoLmFjb3MoWm8oaVtwLTFdLmRvdChpW3BdKSwtMSwxKSk7b1twXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsZCkpfWFbcF0uY3Jvc3NWZWN0b3JzKGlbcF0sb1twXSl9aWYocj09PSEwKXtsZXQgcD1NYXRoLmFjb3MoWm8ob1swXS5kb3Qob1t0XSksLTEsMSkpO3AvPXQsaVswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKHA9LXApO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKW9bZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhpW2RdLHAqZCkpLGFbZF0uY3Jvc3NWZWN0b3JzKGlbZF0sb1tkXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0sVjE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MSxpPTEsbz0wLGE9TWF0aC5QSSoyLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1yLHRoaXMueFJhZGl1cz1uLHRoaXMueVJhZGl1cz1pLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQsaT1NYXRoLlBJKjIsbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPWk7Zm9yKDtvPmk7KW8tPWk7bzxOdW1iZXIuRVBTSUxPTiYmKGE/bz0wOm89aSksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFhJiYobz09PWk/bz0taTpvPW8taSk7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLHA9Yy10aGlzLmFZO2w9Zip1LXAqaCt0aGlzLmFYLGM9ZipoK3AqdSt0aGlzLmFZfXJldHVybiBuLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O1YxLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbDY9Y2xhc3MgZXh0ZW5kcyBWMXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSl7c3VwZXIodCxyLG4sbixpLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtsNi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiBEaHQoKXtsZXQgZT0wLHQ9MCxyPTAsbj0wO2Z1bmN0aW9uIGkobyxhLHMsbCl7ZT1vLHQ9cyxyPS0zKm8rMyphLTIqcy1sLG49MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7aShhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyx1LGgpe2xldCBmPShhLW8pL2MtKHMtbykvKGMrdSkrKHMtYSkvdSxwPShzLWEpL3UtKGwtYSkvKHUraCkrKGwtcykvaDtmKj11LHAqPXUsaShhLHMsZixwKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm8scz1hKm87cmV0dXJuIGUrdCpvK3IqYStuKnN9fX12YXIgVVY9bmV3IGosX3V0PW5ldyBEaHQseXV0PW5ldyBEaHQsdnV0PW5ldyBEaHQsYzY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdLHI9ITEsbj0iY2VudHJpcGV0YWwiLGk9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPXIsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnBvaW50cyxvPWkubGVuZ3RoLGE9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQscz1NYXRoLmZsb29yKGEpLGw9YS1zO3RoaXMuY2xvc2VkP3MrPXM+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKHMpL28pKzEpKm86bD09PTAmJnM9PT1vLTEmJihzPW8tMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fHM+MD9jPWlbKHMtMSklb106KFVWLnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYz1VVik7bGV0IGg9aVtzJW9dLGY9aVsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/dT1pWyhzKzIpJW9dOihVVi5zdWJWZWN0b3JzKGlbby0xXSxpW28tMl0pLmFkZChpW28tMV0pLHU9VVYpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBwPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxkPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCkscCksZz1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLHApLF89TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxwKTtnPDFlLTQmJihnPTEpLGQ8MWUtNCYmKGQ9ZyksXzwxZS00JiYoXz1nKSxfdXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCxkLGcsXykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGQsZyxfKX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoX3V0LmluaXRDYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCx0aGlzLnRlbnNpb24pLHl1dC5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBuLnNldChfdXQuY2FsYyhsKSx5dXQuY2FsYyhsKSx2dXQuY2FsYyhsKSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCByPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5wb2ludHNbcl07dC5wb2ludHMucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBqKCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07YzYucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiB1aGUoZSx0LHIsbixpKXtsZXQgbz0obi10KSouNSxhPShpLXIpKi41LHM9ZSplLGw9ZSpzO3JldHVybigyKnItMipuK28rYSkqbCsoLTMqciszKm4tMipvLWEpKnMrbyplK3J9ZnVuY3Rpb24ga2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqdH1mdW5jdGlvbiBSZ3IoZSx0KXtyZXR1cm4gMiooMS1lKSplKnR9ZnVuY3Rpb24gTmdyKGUsdCl7cmV0dXJuIGUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4pe3JldHVybiBrZ3IoZSx0KStSZ3IoZSxyKStOZ3IoZSxuKX1mdW5jdGlvbiBEZ3IoZSx0KXtsZXQgcj0xLWU7cmV0dXJuIHIqcipyKnR9ZnVuY3Rpb24gT2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiAzKnIqciplKnR9ZnVuY3Rpb24gemdyKGUsdCl7cmV0dXJuIDMqKDEtZSkqZSplKnR9ZnVuY3Rpb24gRmdyKGUsdCl7cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gV1AoZSx0LHIsbixpKXtyZXR1cm4gRGdyKGUsdCkrT2dyKGUscikremdyKGUsbikrRmdyKGUsaSl9dmFyIGNNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQsaT1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIG4uc2V0KFdQKHQsaS54LG8ueCxhLngscy54KSxXUCh0LGkueSxvLnksYS55LHMueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07Y00ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgdTY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGosbj1uZXcgaixpPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1uLHRoaXMudjM9aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpLFdQKHQsaS56LG8ueixhLnoscy56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt1Ni5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgVTE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCxyPW5ldyBMdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yO3JldHVybiB0PT09MT9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LHIpe3JldHVybiB0aGlzLmdldFBvaW50KHQscil9Z2V0VGFuZ2VudCh0LHIpe2xldCBuPXJ8fG5ldyBMdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1UxLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1yfWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHVNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW59Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07dU0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIGhNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSksR1AodCxpLnosby56LGEueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07aE0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBmTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz0oaS5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1pW2E9PT0wP2E6YS0xXSxjPWlbYV0sdT1pW2E+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOmErMV0saD1pW2E+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOmErMl07cmV0dXJuIG4uc2V0KHVoZShzLGwueCxjLngsdS54LGgueCksdWhlKHMsbC55LGMueSx1LnksaC55KSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2gobmV3IEx0KCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpc319O2ZNLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBPaHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bDYsQ2F0bXVsbFJvbUN1cnZlMzpjNixDdWJpY0JlemllckN1cnZlOmNNLEN1YmljQmV6aWVyQ3VydmUzOnU2LEVsbGlwc2VDdXJ2ZTpWMSxMaW5lQ3VydmU6VTEsTGluZUN1cnZlMzpiVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp1TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6aE0sU3BsaW5lQ3VydmU6Zk19KSx3VT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCkscj10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMocil8fHRoaXMuY3VydmVzLnB1c2gobmV3IFUxKHIsdCkpfWdldFBvaW50KHQscil7bGV0IG49dCp0aGlzLmdldExlbmd0aCgpLGk9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPGkubGVuZ3RoOyl7aWYoaVtvXT49bil7bGV0IGE9aVtvXS1uLHM9dGhpcy5jdXJ2ZXNbb10sbD1zLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLWEvbDtyZXR1cm4gcy5nZXRQb2ludEF0KGMscil9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLHI9MDtmb3IobGV0IG49MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtuPGk7bisrKXIrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChyKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIucHVzaChyWzBdKSxyfWdldFBvaW50cyh0PTEyKXtsZXQgcj1bXSxuO2ZvcihsZXQgaT0wLG89dGhpcy5jdXJ2ZXM7aTxvLmxlbmd0aDtpKyspe2xldCBhPW9baV0scz1hJiZhLmlzRWxsaXBzZUN1cnZlP3QqMjphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQsbD1hLmdldFBvaW50cyhzKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtuJiZuLmVxdWFscyh1KXx8KHIucHVzaCh1KSxuPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIubGVuZ3RoPjEmJiFyW3IubGVuZ3RoLTFdLmVxdWFscyhyWzBdKSYmci5wdXNoKHJbMF0pLHJ9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmN1cnZlc1tyXTt0LmN1cnZlcy5wdXNoKGkudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2gobmV3IE9odFtpLnR5cGVdKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0scTE9Y2xhc3MgZXh0ZW5kcyB3VXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEx0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgcj0xLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmxpbmVUbyh0W3JdLngsdFtyXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31saW5lVG8odCxyKXtsZXQgbj1uZXcgVTEodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe2xldCBvPW5ldyB1TSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe2xldCBzPW5ldyBjTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpLG5ldyBMdChvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IHI9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxuPW5ldyBmTShyKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCtzLHIrbCxuLGksbyxhKSx0aGlzfWFic2FyYyh0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LHIsbixuLGksbyxhKSx0aGlzfWVsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxyK3UsbixpLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LHIsbixpLG8sYSxzLGwpe2xldCBjPW5ldyBWMSh0LHIsbixpLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sS2M9Y2xhc3MgZXh0ZW5kcyBxMXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7bjxpO24rKylyW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiByfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmhvbGVzW3JdO3QuaG9sZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCByPTAsbj10LmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmhvbGVzW3JdO3RoaXMuaG9sZXMucHVzaChuZXcgcTEoKS5mcm9tSlNPTihpKSl9cmV0dXJuIHRoaXN9fSxCZ3I9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGUsdCxyPTIpe2xldCBuPXQmJnQubGVuZ3RoLGk9bj90WzBdKnI6ZS5sZW5ndGgsbz1aZmUoZSwwLGksciwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2xldCBzLGwsYyx1LGgsZixwO2lmKG4mJihvPUdncihlLHQsbyxyKSksZS5sZW5ndGg+ODAqcil7cz1jPWVbMF0sbD11PWVbMV07Zm9yKGxldCBkPXI7ZDxpO2QrPXIpaD1lW2RdLGY9ZVtkKzFdLGg8cyYmKHM9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7cD1NYXRoLm1heChjLXMsdS1sKSxwPXAhPT0wPzEvcDowfXJldHVybiBoNihvLGEscixzLGwscCksYX19O2Z1bmN0aW9uIFpmZShlLHQscixuLGkpe2xldCBvLGE7aWYoaT09PWUwcihlLHQscixuKT4wKWZvcihvPXQ7bzxyO28rPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtlbHNlIGZvcihvPXItbjtvPj10O28tPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtyZXR1cm4gYSYmWlUoYSxhLm5leHQpJiYocDYoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gRzAoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgcj1lLG47ZG8gaWYobj0hMSwhci5zdGVpbmVyJiYoWlUocixyLm5leHQpfHxhaShyLnByZXYscixyLm5leHQpPT09MCkpe2lmKHA2KHIpLHI9dD1yLnByZXYscj09PXIubmV4dClicmVhaztuPSEwfWVsc2Ugcj1yLm5leHQ7d2hpbGUobnx8ciE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGg2KGUsdCxyLG4saSxvLGEpe2lmKCFlKXJldHVybjshYSYmbyYmJGdyKGUsbixpLG8pO2xldCBzPWUsbCxjO2Zvcig7ZS5wcmV2IT09ZS5uZXh0Oyl7aWYobD1lLnByZXYsYz1lLm5leHQsbz9WZ3IoZSxuLGksbyk6SGdyKGUpKXt0LnB1c2gobC5pL3IpLHQucHVzaChlLmkvciksdC5wdXNoKGMuaS9yKSxwNihlKSxlPWMubmV4dCxzPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PXMpe2E/YT09PTE/KGU9VWdyKEcwKGUpLHQsciksaDYoZSx0LHIsbixpLG8sMikpOmE9PT0yJiZxZ3IoZSx0LHIsbixpLG8pOmg2KEcwKGUpLHQscixuLGksbywxKTticmVha319fWZ1bmN0aW9uIEhncihlKXtsZXQgdD1lLnByZXYscj1lLG49ZS5uZXh0O2lmKGFpKHQscixuKT49MClyZXR1cm4hMTtsZXQgaT1lLm5leHQubmV4dDtmb3IoO2khPT1lLnByZXY7KXtpZihIMyh0LngsdC55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmYWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBWZ3IoZSx0LHIsbil7bGV0IGk9ZS5wcmV2LG89ZSxhPWUubmV4dDtpZihhaShpLG8sYSk+PTApcmV0dXJuITE7bGV0IHM9aS54PG8ueD9pLng8YS54P2kueDphLng6by54PGEueD9vLng6YS54LGw9aS55PG8ueT9pLnk8YS55P2kueTphLnk6by55PGEueT9vLnk6YS55LGM9aS54Pm8ueD9pLng+YS54P2kueDphLng6by54PmEueD9vLng6YS54LHU9aS55Pm8ueT9pLnk+YS55P2kueTphLnk6by55PmEueT9vLnk6YS55LGg9bmh0KHMsbCx0LHIsbiksZj1uaHQoYyx1LHQscixuKSxwPWUucHJldlosZD1lLm5leHRaO2Zvcig7cCYmcC56Pj1oJiZkJiZkLno8PWY7KXtpZihwIT09ZS5wcmV2JiZwIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxwLngscC55KSYmYWkocC5wcmV2LHAscC5uZXh0KT49MHx8KHA9cC5wcmV2WixkIT09ZS5wcmV2JiZkIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxkLngsZC55KSYmYWkoZC5wcmV2LGQsZC5uZXh0KT49MCkpcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1mOyl7aWYoZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIFVncihlLHQscil7bGV0IG49ZTtkb3tsZXQgaT1uLnByZXYsbz1uLm5leHQubmV4dDshWlUoaSxvKSYmSmZlKGksbixuLm5leHQsbykmJmY2KGksbykmJmY2KG8saSkmJih0LnB1c2goaS5pL3IpLHQucHVzaChuLmkvciksdC5wdXNoKG8uaS9yKSxwNihuKSxwNihuLm5leHQpLG49ZT1vKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIEcwKG4pfWZ1bmN0aW9uIHFncihlLHQscixuLGksbyl7bGV0IGE9ZTtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJkpncihhLHMpKXtsZXQgbD1RZmUoYSxzKTthPUcwKGEsYS5uZXh0KSxsPUcwKGwsbC5uZXh0KSxoNihhLHQscixuLGksbyksaDYobCx0LHIsbixpLG8pO3JldHVybn1zPXMubmV4dH1hPWEubmV4dH13aGlsZShhIT09ZSl9ZnVuY3Rpb24gR2dyKGUsdCxyLG4pe2xldCBpPVtdLG8sYSxzLGwsYztmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qbixsPW88YS0xP3RbbysxXSpuOmUubGVuZ3RoLGM9WmZlKGUscyxsLG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGkucHVzaChaZ3IoYykpO2ZvcihpLnNvcnQoV2dyKSxvPTA7bzxpLmxlbmd0aDtvKyspWWdyKGlbb10scikscj1HMChyLHIubmV4dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gV2dyKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24gWWdyKGUsdCl7aWYodD1qZ3IoZSx0KSx0KXtsZXQgcj1RZmUodCxlKTtHMCh0LHQubmV4dCksRzAocixyLm5leHQpfX1mdW5jdGlvbiBqZ3IoZSx0KXtsZXQgcj10LG49ZS54LGk9ZS55LG89LTEvMCxhO2Rve2lmKGk8PXIueSYmaT49ci5uZXh0LnkmJnIubmV4dC55IT09ci55KXtsZXQgZj1yLngrKGktci55KSooci5uZXh0Lngtci54KS8oci5uZXh0Lnktci55KTtpZihmPD1uJiZmPm8pe2lmKG89ZixmPT09bil7aWYoaT09PXIueSlyZXR1cm4gcjtpZihpPT09ci5uZXh0LnkpcmV0dXJuIHIubmV4dH1hPXIueDxyLm5leHQueD9yOnIubmV4dH19cj1yLm5leHR9d2hpbGUociE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKG49PT1vKXJldHVybiBhO2xldCBzPWEsbD1hLngsYz1hLnksdT0xLzAsaDtyPWE7ZG8gbj49ci54JiZyLng+PWwmJm4hPT1yLngmJkgzKGk8Yz9uOm8saSxsLGMsaTxjP286bixpLHIueCxyLnkpJiYoaD1NYXRoLmFicyhpLXIueSkvKG4tci54KSxmNihyLGUpJiYoaDx1fHxoPT09dSYmKHIueD5hLnh8fHIueD09PWEueCYmWGdyKGEscikpKSYmKGE9cix1PWgpKSxyPXIubmV4dDt3aGlsZShyIT09cyk7cmV0dXJuIGF9ZnVuY3Rpb24gWGdyKGUsdCl7cmV0dXJuIGFpKGUucHJldixlLHQucHJldik8MCYmYWkodC5uZXh0LGUsZS5uZXh0KTwwfWZ1bmN0aW9uICRncihlLHQscixuKXtsZXQgaT1lO2RvIGkuej09PW51bGwmJihpLno9bmh0KGkueCxpLnksdCxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dDt3aGlsZShpIT09ZSk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxLZ3IoaSl9ZnVuY3Rpb24gS2dyKGUpe2xldCB0LHIsbixpLG8sYSxzLGwsYz0xO2Rve2ZvcihyPWUsZT1udWxsLG89bnVsbCxhPTA7cjspe2ZvcihhKyssbj1yLHM9MCx0PTA7dDxjJiYocysrLG49bi5uZXh0WiwhIW4pO3QrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspcyE9PTAmJihsPT09MHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksbz9vLm5leHRaPWk6ZT1pLGkucHJldlo9byxvPWk7cj1ufW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmh0KGUsdCxyLG4saSl7cmV0dXJuIGU9MzI3NjcqKGUtcikqaSx0PTMyNzY3Kih0LW4pKmksZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIFpncihlKXtsZXQgdD1lLHI9ZTtkbyh0Lng8ci54fHx0Lng9PT1yLngmJnQueTxyLnkpJiYocj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSDMoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4oaS1hKSoodC1zKS0oZS1hKSooby1zKT49MCYmKGUtYSkqKG4tcyktKHItYSkqKHQtcyk+PTAmJihyLWEpKihvLXMpLShpLWEpKihuLXMpPj0wfWZ1bmN0aW9uIEpncihlLHQpe3JldHVybiBlLm5leHQuaSE9PXQuaSYmZS5wcmV2LmkhPT10LmkmJiFRZ3IoZSx0KSYmKGY2KGUsdCkmJmY2KHQsZSkmJnQwcihlLHQpJiYoYWkoZS5wcmV2LGUsdC5wcmV2KXx8YWkoZSx0LnByZXYsdCkpfHxaVShlLHQpJiZhaShlLnByZXYsZSxlLm5leHQpPjAmJmFpKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gYWkoZSx0LHIpe3JldHVybih0LnktZS55KSooci54LXQueCktKHQueC1lLngpKihyLnktdC55KX1mdW5jdGlvbiBaVShlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBKZmUoZSx0LHIsbil7bGV0IGk9R1YoYWkoZSx0LHIpKSxvPUdWKGFpKGUsdCxuKSksYT1HVihhaShyLG4sZSkpLHM9R1YoYWkocixuLHQpKTtyZXR1cm4hIShpIT09byYmYSE9PXN8fGk9PT0wJiZxVihlLHIsdCl8fG89PT0wJiZxVihlLG4sdCl8fGE9PT0wJiZxVihyLGUsbil8fHM9PT0wJiZxVihyLHQsbikpfWZ1bmN0aW9uIHFWKGUsdCxyKXtyZXR1cm4gdC54PD1NYXRoLm1heChlLngsci54KSYmdC54Pj1NYXRoLm1pbihlLngsci54KSYmdC55PD1NYXRoLm1heChlLnksci55KSYmdC55Pj1NYXRoLm1pbihlLnksci55KX1mdW5jdGlvbiBHVihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9ZnVuY3Rpb24gUWdyKGUsdCl7bGV0IHI9ZTtkb3tpZihyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZKZmUocixyLm5leHQsZSx0KSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gZjYoZSx0KXtyZXR1cm4gYWkoZS5wcmV2LGUsZS5uZXh0KTwwP2FpKGUsdCxlLm5leHQpPj0wJiZhaShlLGUucHJldix0KT49MDphaShlLHQsZS5wcmV2KTwwfHxhaShlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIHQwcihlLHQpe2xldCByPWUsbj0hMSxpPShlLngrdC54KS8yLG89KGUueSt0LnkpLzI7ZG8gci55Pm8hPXIubmV4dC55Pm8mJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihvLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHQ7d2hpbGUociE9PWUpO3JldHVybiBufWZ1bmN0aW9uIFFmZShlLHQpe2xldCByPW5ldyBpaHQoZS5pLGUueCxlLnkpLG49bmV3IGlodCh0LmksdC54LHQueSksaT1lLm5leHQsbz10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLG59ZnVuY3Rpb24gaGhlKGUsdCxyLG4pe2xldCBpPW5ldyBpaHQoZSx0LHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBwNihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uIGlodChlLHQscil7dGhpcy5pPWUsdGhpcy54PXQsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gZTByKGUsdCxyLG4pe2xldCBpPTA7Zm9yKGxldCBvPXQsYT1yLW47bzxyO28rPW4paSs9KGVbYV0tZVtvXSkqKGVbbysxXStlW2ErMV0pLGE9bztyZXR1cm4gaX12YXIgWmM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IHI9dC5sZW5ndGgsbj0wO2ZvcihsZXQgaT1yLTEsbz0wO288cjtpPW8rKyluKz10W2ldLngqdFtvXS55LXRbb10ueCp0W2ldLnk7cmV0dXJuIG4qLjV9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBaYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxyKXtsZXQgbj1bXSxpPVtdLG89W107ZmhlKHQpLHBoZShuLHQpO2xldCBhPXQubGVuZ3RoO3IuZm9yRWFjaChmaGUpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKWkucHVzaChhKSxhKz1yW2xdLmxlbmd0aCxwaGUobixyW2xdKTtsZXQgcz1CZ3IudHJpYW5ndWxhdGUobixpKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIGZoZShlKXtsZXQgdD1lLmxlbmd0aDt0PjImJmVbdC0xXS5lcXVhbHMoZVswXSkmJmUucG9wKCl9ZnVuY3Rpb24gcGhlKGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wdXNoKHRbcl0ueCksZS5wdXNoKHRbcl0ueSl9dmFyIGhoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCguNSwuNSksbmV3IEx0KC0uNSwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOnJ9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgbj10aGlzLGk9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc107YShjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gYShzKXtsZXQgbD1bXSxjPXIuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9yLmN1cnZlU2VnbWVudHM6MTIsdT1yLnN0ZXBzIT09dm9pZCAwP3Iuc3RlcHM6MSxoPXIuZGVwdGghPT12b2lkIDA/ci5kZXB0aDoxLGY9ci5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ci5iZXZlbEVuYWJsZWQ6ITAscD1yLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP3IuYmV2ZWxUaGlja25lc3M6LjIsZD1yLmJldmVsU2l6ZSE9PXZvaWQgMD9yLmJldmVsU2l6ZTpwLS4xLGc9ci5iZXZlbE9mZnNldCE9PXZvaWQgMD9yLmJldmVsT2Zmc2V0OjAsXz1yLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ci5iZXZlbFNlZ21lbnRzOjMseT1yLmV4dHJ1ZGVQYXRoLHg9ci5VVkdlbmVyYXRvciE9PXZvaWQgMD9yLlVWR2VuZXJhdG9yOnIwcjtyLmFtb3VudCE9PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxoPXIuYW1vdW50KTtsZXQgYixTPSExLEMsUCxrLE87eSYmKGI9eS5nZXRTcGFjZWRQb2ludHModSksUz0hMCxmPSExLEM9eS5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFA9bmV3IGosaz1uZXcgaixPPW5ldyBqKSxmfHwoXz0wLHA9MCxkPTAsZz0wKTtsZXQgRD1zLmV4dHJhY3RQb2ludHMoYyksQj1ELnNoYXBlLEk9RC5ob2xlcztpZighWmMuaXNDbG9ja1dpc2UoQikpe0I9Qi5yZXZlcnNlKCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO1pjLmlzQ2xvY2tXaXNlKGh0KSYmKElbcV09aHQucmV2ZXJzZSgpKX19bGV0IFI9WmMudHJpYW5ndWxhdGVTaGFwZShCLEkpLEY9Qjtmb3IobGV0IHE9MCxwdD1JLmxlbmd0aDtxPHB0O3ErKyl7bGV0IGh0PUlbcV07Qj1CLmNvbmNhdChodCl9ZnVuY3Rpb24geihxLHB0LGh0KXtyZXR1cm4gcHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IikscHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihodCkuYWRkKHEpfWxldCBVPUIubGVuZ3RoLFc9Ui5sZW5ndGg7ZnVuY3Rpb24gWihxLHB0LGh0KXtsZXQgd3Qsa3QsaWUsZWU9cS54LXB0LngsTGU9cS55LXB0LnksYXI9aHQueC1xLngsZnI9aHQueS1xLnksdHQ9ZWUqZWUrTGUqTGUsJD1lZSpmci1MZSphcjtpZihNYXRoLmFicygkKT5OdW1iZXIuRVBTSUxPTil7bGV0IEl0PU1hdGguc3FydCh0dCksJHQ9TWF0aC5zcXJ0KGFyKmFyK2ZyKmZyKSxoZT1wdC54LUxlL0l0LFR0PXB0LnkrZWUvSXQsYmU9aHQueC1mci8kdCxudD1odC55K2FyLyR0LEN0PSgoYmUtaGUpKmZyLShudC1UdCkqYXIpLyhlZSpmci1MZSphcik7d3Q9aGUrZWUqQ3QtcS54LGt0PVR0K0xlKkN0LXEueTtsZXQgV3Q9d3Qqd3Qra3Qqa3Q7aWYoV3Q8PTIpcmV0dXJuIG5ldyBMdCh3dCxrdCk7aWU9TWF0aC5zcXJ0KFd0LzIpfWVsc2V7bGV0IEl0PSExO2VlPk51bWJlci5FUFNJTE9OP2FyPk51bWJlci5FUFNJTE9OJiYoSXQ9ITApOmVlPC1OdW1iZXIuRVBTSUxPTj9hcjwtTnVtYmVyLkVQU0lMT04mJihJdD0hMCk6TWF0aC5zaWduKExlKT09PU1hdGguc2lnbihmcikmJihJdD0hMCksSXQ/KHd0PS1MZSxrdD1lZSxpZT1NYXRoLnNxcnQodHQpKTood3Q9ZWUsa3Q9TGUsaWU9TWF0aC5zcXJ0KHR0LzIpKX1yZXR1cm4gbmV3IEx0KHd0L2llLGt0L2llKX1sZXQgcnQ9W107Zm9yKGxldCBxPTAscHQ9Ri5sZW5ndGgsaHQ9cHQtMSx3dD1xKzE7cTxwdDtxKyssaHQrKyx3dCsrKWh0PT09cHQmJihodD0wKSx3dD09PXB0JiYod3Q9MCkscnRbcV09WihGW3FdLEZbaHRdLEZbd3RdKTtsZXQgb3Q9W10sc3QsU3Q9cnQuY29uY2F0KCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO3N0PVtdO2ZvcihsZXQgd3Q9MCxrdD1odC5sZW5ndGgsaWU9a3QtMSxlZT13dCsxO3d0PGt0O3d0KyssaWUrKyxlZSsrKWllPT09a3QmJihpZT0wKSxlZT09PWt0JiYoZWU9MCksc3Rbd3RdPVooaHRbd3RdLGh0W2llXSxodFtlZV0pO290LnB1c2goc3QpLFN0PVN0LmNvbmNhdChzdCl9Zm9yKGxldCBxPTA7cTxfO3ErKyl7bGV0IHB0PXEvXyxodD1wKk1hdGguY29zKHB0Kk1hdGguUEkvMiksd3Q9ZCpNYXRoLnNpbihwdCpNYXRoLlBJLzIpK2c7Zm9yKGxldCBrdD0wLGllPUYubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT16KEZba3RdLHJ0W2t0XSx3dCk7X3QoZWUueCxlZS55LC1odCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtfdChmci54LGZyLnksLWh0KX19fWxldCBidD1kK2c7Zm9yKGxldCBxPTA7cTxVO3ErKyl7bGV0IHB0PWY/eihCW3FdLFN0W3FdLGJ0KTpCW3FdO1M/KGsuY29weShDLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LngpLFAuY29weShDLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIocHQueSksTy5jb3B5KGJbMF0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChwdC54LHB0LnksMCl9Zm9yKGxldCBxPTE7cTw9dTtxKyspZm9yKGxldCBwdD0wO3B0PFU7cHQrKyl7bGV0IGh0PWY/eihCW3B0XSxTdFtwdF0sYnQpOkJbcHRdO1M/KGsuY29weShDLm5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LngpLFAuY29weShDLmJpbm9ybWFsc1txXSkubXVsdGlwbHlTY2FsYXIoaHQueSksTy5jb3B5KGJbcV0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChodC54LGh0LnksaC91KnEpfWZvcihsZXQgcT1fLTE7cT49MDtxLS0pe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSxoK2h0KX1mb3IobGV0IGt0PTAsaWU9SS5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPUlba3RdO3N0PW90W2t0XTtmb3IobGV0IExlPTAsYXI9ZWUubGVuZ3RoO0xlPGFyO0xlKyspe2xldCBmcj16KGVlW0xlXSxzdFtMZV0sd3QpO1M/X3QoZnIueCxmci55K2JbdS0xXS55LGJbdS0xXS54K2h0KTpfdChmci54LGZyLnksaCtodCl9fX1NdCgpLGx0KCk7ZnVuY3Rpb24gTXQoKXtsZXQgcT1pLmxlbmd0aC8zO2lmKGYpe2xldCBwdD0wLGh0PVUqcHQ7Zm9yKGxldCB3dD0wO3d0PFc7d3QrKyl7bGV0IGt0PVJbd3RdO2N0KGt0WzJdK2h0LGt0WzFdK2h0LGt0WzBdK2h0KX1wdD11K18qMixodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFswXStodCxrdFsxXStodCxrdFsyXStodCl9fWVsc2V7Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzJdLGh0WzFdLGh0WzBdKX1mb3IobGV0IHB0PTA7cHQ8VztwdCsrKXtsZXQgaHQ9UltwdF07Y3QoaHRbMF0rVSp1LGh0WzFdK1UqdSxodFsyXStVKnUpfX1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDApfWZ1bmN0aW9uIGx0KCl7bGV0IHE9aS5sZW5ndGgvMyxwdD0wO0t0KEYscHQpLHB0Kz1GLmxlbmd0aDtmb3IobGV0IGh0PTAsd3Q9SS5sZW5ndGg7aHQ8d3Q7aHQrKyl7bGV0IGt0PUlbaHRdO0t0KGt0LHB0KSxwdCs9a3QubGVuZ3RofW4uYWRkR3JvdXAocSxpLmxlbmd0aC8zLXEsMSl9ZnVuY3Rpb24gS3QocSxwdCl7bGV0IGh0PXEubGVuZ3RoO2Zvcig7LS1odD49MDspe2xldCB3dD1odCxrdD1odC0xO2t0PDAmJihrdD1xLmxlbmd0aC0xKTtmb3IobGV0IGllPTAsZWU9dStfKjI7aWU8ZWU7aWUrKyl7bGV0IExlPVUqaWUsYXI9VSooaWUrMSksZnI9cHQrd3QrTGUsdHQ9cHQra3QrTGUsJD1wdCtrdCthcixJdD1wdCt3dCthcjtYKGZyLHR0LCQsSXQpfX19ZnVuY3Rpb24gX3QocSxwdCxodCl7bC5wdXNoKHEpLGwucHVzaChwdCksbC5wdXNoKGh0KX1mdW5jdGlvbiBjdChxLHB0LGh0KXtldChxKSxldChwdCksZXQoaHQpO2xldCB3dD1pLmxlbmd0aC8zLGt0PXguZ2VuZXJhdGVUb3BVVihuLGksd3QtMyx3dC0yLHd0LTEpO2R0KGt0WzBdKSxkdChrdFsxXSksZHQoa3RbMl0pfWZ1bmN0aW9uIFgocSxwdCxodCx3dCl7ZXQocSksZXQocHQpLGV0KHd0KSxldChwdCksZXQoaHQpLGV0KHd0KTtsZXQga3Q9aS5sZW5ndGgvMyxpZT14LmdlbmVyYXRlU2lkZVdhbGxVVihuLGksa3QtNixrdC0zLGt0LTIsa3QtMSk7ZHQoaWVbMF0pLGR0KGllWzFdKSxkdChpZVszXSksZHQoaWVbMV0pLGR0KGllWzJdKSxkdChpZVszXSl9ZnVuY3Rpb24gZXQocSl7aS5wdXNoKGxbcSozKzBdKSxpLnB1c2gobFtxKjMrMV0pLGkucHVzaChsW3EqMysyXSl9ZnVuY3Rpb24gZHQocSl7by5wdXNoKHEueCksby5wdXNoKHEueSl9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXMsbj10aGlzLnBhcmFtZXRlcnMub3B0aW9ucztyZXR1cm4gbjByKHIsbix0KX1zdGF0aWMgZnJvbUpTT04odCxyKXtsZXQgbj1bXTtmb3IobGV0IG89MCxhPXQuc2hhcGVzLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW3Quc2hhcGVzW29dXTtuLnB1c2gocyl9bGV0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiBpIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKSxuZXcgaGgobix0Lm9wdGlvbnMpfX0scjByPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKGUsdCxyLG4saSl7bGV0IG89dFtyKjNdLGE9dFtyKjMrMV0scz10W24qM10sbD10W24qMysxXSxjPXRbaSozXSx1PXRbaSozKzFdO3JldHVybltuZXcgTHQobyxhKSxuZXcgTHQocyxsKSxuZXcgTHQoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihlLHQscixuLGksbyl7bGV0IGE9dFtyKjNdLHM9dFtyKjMrMV0sbD10W3IqMysyXSxjPXRbbiozXSx1PXRbbiozKzFdLGg9dFtuKjMrMl0sZj10W2kqM10scD10W2kqMysxXSxkPXRbaSozKzJdLGc9dFtvKjNdLF89dFtvKjMrMV0seT10W28qMysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTxNYXRoLmFicyhhLWMpP1tuZXcgTHQoYSwxLWwpLG5ldyBMdChjLDEtaCksbmV3IEx0KGYsMS1kKSxuZXcgTHQoZywxLXkpXTpbbmV3IEx0KHMsMS1sKSxuZXcgTHQodSwxLWgpLG5ldyBMdChwLDEtZCksbmV3IEx0KF8sMS15KV19fTtmdW5jdGlvbiBuMHIoZSx0LHIpe2lmKHIuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1lW25dO3Iuc2hhcGVzLnB1c2goby51dWlkKX1lbHNlIHIuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdC5leHRydWRlUGF0aCE9PXZvaWQgMCYmKHIub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxyfXZhciBHMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPVstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sbz1bMCwxMSw1LDAsNSwxLDAsMSw3LDAsNywxMCwwLDEwLDExLDEsNSw5LDUsMTEsNCwxMSwxMCwyLDEwLDcsNiw3LDEsOCwzLDksNCwzLDQsMiwzLDIsNiwzLDYsOCwzLDgsOSw0LDksNSwyLDQsMTEsNiwyLDEwLDgsNiw3LDksOCwxXTtzdXBlcihpLG8sdCxyKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEcxKHQucmFkaXVzLHQuZGV0YWlsKX19LFcxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bbmV3IEx0KDAsLjUpLG5ldyBMdCguNSwwKSxuZXcgTHQoMCwtLjUpXSxyPTEyLG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6cixwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxyPU1hdGguZmxvb3IociksaT1abyhpLDAsTWF0aC5QSSoyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPVtdLHU9MS9yLGg9bmV3IGosZj1uZXcgTHQscD1uZXcgaixkPW5ldyBqLGc9bmV3IGosXz0wLHk9MDtmb3IobGV0IHg9MDt4PD10Lmxlbmd0aC0xO3grKylzd2l0Y2goeCl7Y2FzZSAwOl89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZy5jb3B5KHApLHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KTticmVhaztjYXNlIHQubGVuZ3RoLTE6bC5wdXNoKGcueCxnLnksZy56KTticmVhaztkZWZhdWx0Ol89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZC5jb3B5KHApLHAueCs9Zy54LHAueSs9Zy55LHAueis9Zy56LHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KSxnLmNvcHkoZCl9Zm9yKGxldCB4PTA7eDw9cjt4Kyspe2xldCBiPW4reCp1KmksUz1NYXRoLnNpbihiKSxDPU1hdGguY29zKGIpO2ZvcihsZXQgUD0wO1A8PXQubGVuZ3RoLTE7UCsrKXtoLng9dFtQXS54KlMsaC55PXRbUF0ueSxoLno9dFtQXS54KkMsYS5wdXNoKGgueCxoLnksaC56KSxmLng9eC9yLGYueT1QLyh0Lmxlbmd0aC0xKSxzLnB1c2goZi54LGYueSk7bGV0IGs9bFszKlArMF0qUyxPPWxbMypQKzFdLEQ9bFszKlArMF0qQztjLnB1c2goayxPLEQpfX1mb3IobGV0IHg9MDt4PHI7eCsrKWZvcihsZXQgYj0wO2I8dC5sZW5ndGgtMTtiKyspe2xldCBTPWIreCp0Lmxlbmd0aCxDPVMsUD1TK3QubGVuZ3RoLGs9Uyt0Lmxlbmd0aCsxLE89UysxO28ucHVzaChDLFAsTyksby5wdXNoKGssTyxQKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHMsMikpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShjLDMpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX0sVzA9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLGk9WzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVzAodC5yYWRpdXMsdC5kZXRhaWwpfX0sWTE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PS41LHI9MSxuPTgsaT0xLG89MCxhPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOnIsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LG49TWF0aC5tYXgoMyxuKSxpPU1hdGgubWF4KDEsaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD10LGY9KHItdCkvaSxwPW5ldyBqLGQ9bmV3IEx0O2ZvcihsZXQgZz0wO2c8PWk7ZysrKXtmb3IobGV0IF89MDtfPD1uO18rKyl7bGV0IHk9bytfL24qYTtwLng9aCpNYXRoLmNvcyh5KSxwLnk9aCpNYXRoLnNpbih5KSxsLnB1c2gocC54LHAueSxwLnopLGMucHVzaCgwLDAsMSksZC54PShwLngvcisxKS8yLGQueT0ocC55L3IrMSkvMix1LnB1c2goZC54LGQueSl9aCs9Zn1mb3IobGV0IGc9MDtnPGk7ZysrKXtsZXQgXz1nKihuKzEpO2ZvcihsZXQgeT0wO3k8bjt5Kyspe2xldCB4PXkrXyxiPXgsUz14K24rMSxDPXgrbisyLFA9eCsxO3MucHVzaChiLFMsUCkscy5wdXNoKFMsQyxQKX19dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCgwLC41KSxuZXcgTHQoLS41LC0uNSksbmV3IEx0KC41LC0uNSldKSxyPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOnJ9O2xldCBuPVtdLGk9W10sbz1bXSxhPVtdLHM9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAocyxsLHUpLHMrPWwsbD0wO3RoaXMuc2V0SW5kZXgobiksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9aS5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhyKSxwPWYuc2hhcGUsZD1mLmhvbGVzO1pjLmlzQ2xvY2tXaXNlKHApPT09ITEmJihwPXAucmV2ZXJzZSgpKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107WmMuaXNDbG9ja1dpc2UoeCk9PT0hMCYmKGRbX109eC5yZXZlcnNlKCkpfWxldCBnPVpjLnRyaWFuZ3VsYXRlU2hhcGUocCxkKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107cD1wLmNvbmNhdCh4KX1mb3IobGV0IF89MCx5PXAubGVuZ3RoO188eTtfKyspe2xldCB4PXBbX107aS5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxhLnB1c2goeC54LHgueSl9Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1nW19dLGI9eFswXStoLFM9eFsxXStoLEM9eFsyXStoO24ucHVzaChiLFMsQyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLHI9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gaTByKHIsdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBpPTAsbz10LnNoYXBlcy5sZW5ndGg7aTxvO2krKyl7bGV0IGE9clt0LnNoYXBlc1tpXV07bi5wdXNoKGEpfXJldHVybiBuZXcgWTAobix0LmN1cnZlU2VnbWVudHMpfX07ZnVuY3Rpb24gaTByKGUsdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2xldCBpPWVbcl07dC5zaGFwZXMucHVzaChpLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChlLnV1aWQpO3JldHVybiB0fXZhciBqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTMyLG49MTYsaT0wLG89TWF0aC5QSSoyLGE9MCxzPU1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6bixwaGlTdGFydDppLHBoaUxlbmd0aDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfSxyPU1hdGgubWF4KDMsTWF0aC5mbG9vcihyKSksbj1NYXRoLm1heCgyLE1hdGguZmxvb3IobikpO2xldCBsPU1hdGgubWluKGErcyxNYXRoLlBJKSxjPTAsdT1bXSxoPW5ldyBqLGY9bmV3IGoscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PD1uO3krKyl7bGV0IHg9W10sYj15L24sUz0wO3k9PTAmJmE9PTA/Uz0uNS9yOnk9PW4mJmw9PU1hdGguUEkmJihTPS0uNS9yKTtmb3IobGV0IEM9MDtDPD1yO0MrKyl7bGV0IFA9Qy9yO2gueD0tdCpNYXRoLmNvcyhpK1AqbykqTWF0aC5zaW4oYStiKnMpLGgueT10Kk1hdGguY29zKGErYipzKSxoLno9dCpNYXRoLnNpbihpK1AqbykqTWF0aC5zaW4oYStiKnMpLGQucHVzaChoLngsaC55LGgueiksZi5jb3B5KGgpLm5vcm1hbGl6ZSgpLGcucHVzaChmLngsZi55LGYueiksXy5wdXNoKFArUywxLWIpLHgucHVzaChjKyspfXUucHVzaCh4KX1mb3IobGV0IHk9MDt5PG47eSsrKWZvcihsZXQgeD0wO3g8cjt4Kyspe2xldCBiPXVbeV1beCsxXSxTPXVbeV1beF0sQz11W3krMV1beF0sUD11W3krMV1beCsxXTsoeSE9PTB8fGE+MCkmJnAucHVzaChiLFMsUCksKHkhPT1uLTF8fGw8TWF0aC5QSSkmJnAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajAodC5yYWRpdXMsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5waGlTdGFydCx0LnBoaUxlbmd0aCx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPVsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0saT1bMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdO3N1cGVyKG4saSx0LHIpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajEodC5yYWRpdXMsdC5kZXRhaWwpfX0sWDE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0uNCxuPTgsaT02LG89TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIscmFkaWFsU2VnbWVudHM6bix0dWJ1bGFyU2VnbWVudHM6aSxhcmM6b30sbj1NYXRoLmZsb29yKG4pLGk9TWF0aC5mbG9vcihpKTtsZXQgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBqLGg9bmV3IGosZj1uZXcgajtmb3IobGV0IHA9MDtwPD1uO3ArKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7bGV0IGc9ZC9pKm8sXz1wL24qTWF0aC5QSSoyO2gueD0odCtyKk1hdGguY29zKF8pKSpNYXRoLmNvcyhnKSxoLnk9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5zaW4oZyksaC56PXIqTWF0aC5zaW4oXykscy5wdXNoKGgueCxoLnksaC56KSx1Lng9dCpNYXRoLmNvcyhnKSx1Lnk9dCpNYXRoLnNpbihnKSxmLnN1YlZlY3RvcnMoaCx1KS5ub3JtYWxpemUoKSxsLnB1c2goZi54LGYueSxmLnopLGMucHVzaChkL2kpLGMucHVzaChwL24pfWZvcihsZXQgcD0xO3A8PW47cCsrKWZvcihsZXQgZD0xO2Q8PWk7ZCsrKXtsZXQgZz0oaSsxKSpwK2QtMSxfPShpKzEpKihwLTEpK2QtMSx5PShpKzEpKihwLTEpK2QseD0oaSsxKSpwK2Q7YS5wdXNoKGcsXyx4KSxhLnB1c2goXyx5LHgpfXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQudHViZSx0LnJhZGlhbFNlZ21lbnRzLHQudHVidWxhclNlZ21lbnRzLHQuYXJjKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj02NCxpPTgsbz0yLGE9Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6cix0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6byxxOmF9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD1uZXcgaixmPW5ldyBqLHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89bmV3IGoseT1uZXcgajtmb3IobGV0IGI9MDtiPD1uOysrYil7bGV0IFM9Yi9uKm8qTWF0aC5QSSoyO3goUyxvLGEsdCxwKSx4KFMrLjAxLG8sYSx0LGQpLF8uc3ViVmVjdG9ycyhkLHApLHkuYWRkVmVjdG9ycyhkLHApLGcuY3Jvc3NWZWN0b3JzKF8seSkseS5jcm9zc1ZlY3RvcnMoZyxfKSxnLm5vcm1hbGl6ZSgpLHkubm9ybWFsaXplKCk7Zm9yKGxldCBDPTA7Qzw9aTsrK0Mpe2xldCBQPUMvaSpNYXRoLlBJKjIsaz0tcipNYXRoLmNvcyhQKSxPPXIqTWF0aC5zaW4oUCk7aC54PXAueCsoayp5LngrTypnLngpLGgueT1wLnkrKGsqeS55K08qZy55KSxoLno9cC56KyhrKnkueitPKmcueiksbC5wdXNoKGgueCxoLnksaC56KSxmLnN1YlZlY3RvcnMoaCxwKS5ub3JtYWxpemUoKSxjLnB1c2goZi54LGYueSxmLnopLHUucHVzaChiL24pLHUucHVzaChDL2kpfX1mb3IobGV0IGI9MTtiPD1uO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztzLnB1c2goQyxQLE8pLHMucHVzaChQLGssTyl9dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSk7ZnVuY3Rpb24geChiLFMsQyxQLGspe2xldCBPPU1hdGguY29zKGIpLEQ9TWF0aC5zaW4oYiksQj1DL1MqYixJPU1hdGguY29zKEIpO2sueD1QKigyK0kpKi41Kk8say55PVAqKDIrSSkqRCouNSxrLno9UCpNYXRoLnNpbihCKSouNX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgJDEodC5yYWRpdXMsdC50dWJlLHQudHVidWxhclNlZ21lbnRzLHQucmFkaWFsU2VnbWVudHMsdC5wLHQucSl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IGhNKG5ldyBqKC0xLC0xLDApLG5ldyBqKC0xLDEsMCksbmV3IGooMSwxLDApKSxyPTY0LG49MSxpPTgsbz0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOnIscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6b307bGV0IGE9dC5jb21wdXRlRnJlbmV0RnJhbWVzKHIsbyk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzLHRoaXMubm9ybWFscz1hLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9YS5iaW5vcm1hbHM7bGV0IHM9bmV3IGosbD1uZXcgaixjPW5ldyBMdCx1PW5ldyBqLGg9W10sZj1bXSxwPVtdLGQ9W107ZygpLHRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHAsMikpO2Z1bmN0aW9uIGcoKXtmb3IobGV0IGI9MDtiPHI7YisrKV8oYik7XyhvPT09ITE/cjowKSx4KCkseSgpfWZ1bmN0aW9uIF8oYil7dT10LmdldFBvaW50QXQoYi9yLHUpO2xldCBTPWEubm9ybWFsc1tiXSxDPWEuYmlub3JtYWxzW2JdO2ZvcihsZXQgUD0wO1A8PWk7UCsrKXtsZXQgaz1QL2kqTWF0aC5QSSoyLE89TWF0aC5zaW4oayksRD0tTWF0aC5jb3Moayk7bC54PUQqUy54K08qQy54LGwueT1EKlMueStPKkMueSxsLno9RCpTLnorTypDLnosbC5ub3JtYWxpemUoKSxmLnB1c2gobC54LGwueSxsLnopLHMueD11LngrbipsLngscy55PXUueStuKmwueSxzLno9dS56K24qbC56LGgucHVzaChzLngscy55LHMueil9fWZ1bmN0aW9uIHkoKXtmb3IobGV0IGI9MTtiPD1yO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztkLnB1c2goQyxQLE8pLGQucHVzaChQLGssTyl9fWZ1bmN0aW9uIHgoKXtmb3IobGV0IGI9MDtiPD1yO2IrKylmb3IobGV0IFM9MDtTPD1pO1MrKyljLng9Yi9yLGMueT1TL2kscC5wdXNoKGMueCxjLnkpfX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSzEobmV3IE9odFt0LnBhdGgudHlwZV0oKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX0sZDY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW51bGwpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtnZW9tZXRyeTp0fSx0IT09bnVsbCl7bGV0IHI9W10sbj1uZXcgU2V0LGk9bmV3IGosbz1uZXcgajtpZih0LmluZGV4IT09bnVsbCl7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9dC5pbmRleCxsPXQuZ3JvdXBzO2wubGVuZ3RoPT09MCYmKGw9W3tzdGFydDowLGNvdW50OnMuY291bnQsbWF0ZXJpYWxJbmRleDowfV0pO2ZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1OysrYyl7bGV0IGg9bFtjXSxmPWguc3RhcnQscD1oLmNvdW50O2ZvcihsZXQgZD1mLGc9ZitwO2Q8ZztkKz0zKWZvcihsZXQgXz0wO188MztfKyspe2xldCB5PXMuZ2V0WChkK18pLHg9cy5nZXRYKGQrKF8rMSklMyk7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEseSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEseCksZGhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19fWVsc2V7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGw9YS5jb3VudC8zO3M8bDtzKyspZm9yKGxldCBjPTA7YzwzO2MrKyl7bGV0IHU9MypzK2MsaD0zKnMrKGMrMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSxkaGUoaSxvLG4pPT09ITAmJihyLnB1c2goaS54LGkueSxpLnopLHIucHVzaChvLngsby55LG8ueikpfX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKX19fTtmdW5jdGlvbiBkaGUoZSx0LHIpe2xldCBuPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWAsaT1gJHt0Lnh9LCR7dC55fSwke3Quen0tJHtlLnh9LCR7ZS55fSwke2Uuen1gO3JldHVybiByLmhhcyhuKT09PSEwfHxyLmhhcyhpKT09PSEwPyExOihyLmFkZChuLGkpLCEwKX12YXIgbWhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJveEdlb21ldHJ5OlFmLEJveEJ1ZmZlckdlb21ldHJ5OlFmLENpcmNsZUdlb21ldHJ5OkYxLENpcmNsZUJ1ZmZlckdlb21ldHJ5OkYxLENvbmVHZW9tZXRyeTpCMSxDb25lQnVmZmVyR2VvbWV0cnk6QjEsQ3lsaW5kZXJHZW9tZXRyeTpvbSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om9tLERvZGVjYWhlZHJvbkdlb21ldHJ5OkgxLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkgxLEVkZ2VzR2VvbWV0cnk6czYsRXh0cnVkZUdlb21ldHJ5OmhoLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpoaCxJY29zYWhlZHJvbkdlb21ldHJ5OkcxLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6RzEsTGF0aGVHZW9tZXRyeTpXMSxMYXRoZUJ1ZmZlckdlb21ldHJ5OlcxLE9jdGFoZWRyb25HZW9tZXRyeTpXMCxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VzAsUGxhbmVHZW9tZXRyeTpWMCxQbGFuZUJ1ZmZlckdlb21ldHJ5OlYwLFBvbHloZWRyb25HZW9tZXRyeTp1aCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6dWgsUmluZ0dlb21ldHJ5OlkxLFJpbmdCdWZmZXJHZW9tZXRyeTpZMSxTaGFwZUdlb21ldHJ5OlkwLFNoYXBlQnVmZmVyR2VvbWV0cnk6WTAsU3BoZXJlR2VvbWV0cnk6ajAsU3BoZXJlQnVmZmVyR2VvbWV0cnk6ajAsVGV0cmFoZWRyb25HZW9tZXRyeTpqMSxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmoxLFRvcnVzR2VvbWV0cnk6WDEsVG9ydXNCdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0tub3RHZW9tZXRyeTokMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTokMSxUdWJlR2VvbWV0cnk6SzEsVHViZUJ1ZmZlckdlb21ldHJ5OksxLFdpcmVmcmFtZUdlb21ldHJ5OmQ2fSksbTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O202LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBwTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtwTS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDt2YXIgZzY9Y2xhc3MgZXh0ZW5kcyBwTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBabygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5pb3I9KDErLjQqcikvKDEtLjQqcil9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBuZSgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBuZSgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgbmUoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtfNi5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt5Ni5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO3ZhciB2Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07djYucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPU82LHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3g2LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2I2LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgdzY9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt3Ni5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIG8wcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxTaGFkb3dNYXRlcmlhbDptNixTcHJpdGVNYXRlcmlhbDppTSxSYXdTaGFkZXJNYXRlcmlhbDpVMCxTaGFkZXJNYXRlcmlhbDpsaCxQb2ludHNNYXRlcmlhbDpubSxNZXNoUGh5c2ljYWxNYXRlcmlhbDpnNixNZXNoU3RhbmRhcmRNYXRlcmlhbDpwTSxNZXNoUGhvbmdNYXRlcmlhbDpfNixNZXNoVG9vbk1hdGVyaWFsOnk2LE1lc2hOb3JtYWxNYXRlcmlhbDp2NixNZXNoTGFtYmVydE1hdGVyaWFsOng2LE1lc2hEZXB0aE1hdGVyaWFsOmVNLE1lc2hEaXN0YW5jZU1hdGVyaWFsOnJNLE1lc2hCYXNpY01hdGVyaWFsOnNoLE1lc2hNYXRjYXBNYXRlcmlhbDpiNixMaW5lRGFzaGVkTWF0ZXJpYWw6dzYsTGluZUJhc2ljTWF0ZXJpYWw6R2ksTWF0ZXJpYWw6cWl9KSxZbj17YXJyYXlTbGljZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIFluLmlzVHlwZWRBcnJheShlKT9uZXcgZS5jb25zdHJ1Y3RvcihlLnN1YmFycmF5KHQsciE9PXZvaWQgMD9yOmUubGVuZ3RoKSk6ZS5zbGljZSh0LHIpfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiFlfHwhciYmZS5jb25zdHJ1Y3Rvcj09PXQ/ZTp0eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD09Im51bWJlciI/bmV3IHQoZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLG8pe3JldHVybiBlW2ldLWVbb119bGV0IHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7Zm9yKGxldCBpPTA7aSE9PXI7KytpKW5baV09aTtyZXR1cm4gbi5zb3J0KHQpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPW5ldyBlLmNvbnN0cnVjdG9yKG4pO2ZvcihsZXQgbz0wLGE9MDthIT09bjsrK28pe2xldCBzPXJbb10qdDtmb3IobGV0IGw9MDtsIT09dDsrK2wpaVthKytdPWVbcytsXX1yZXR1cm4gaX0sZmxhdHRlbkpTT046ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9MSxvPWVbMF07Zm9yKDtvIT09dm9pZCAwJiZvW25dPT09dm9pZCAwOylvPWVbaSsrXTtpZihvPT09dm9pZCAwKXJldHVybjtsZXQgYT1vW25dO2lmKGEhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShhKSlkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaC5hcHBseShyLGEpKSxvPWVbaSsrXTt3aGlsZShvIT09dm9pZCAwKTtlbHNlIGlmKGEudG9BcnJheSE9PXZvaWQgMClkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLGEudG9BcnJheShyLHIubGVuZ3RoKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaChhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCl9LHN1YmNsaXA6ZnVuY3Rpb24oZSx0LHIsbixpPTMwKXtsZXQgbz1lLmNsb25lKCk7by5uYW1lPXQ7bGV0IGE9W107Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXtsZXQgYz1vLnRyYWNrc1tsXSx1PWMuZ2V0VmFsdWVTaXplKCksaD1bXSxmPVtdO2ZvcihsZXQgcD0wO3A8Yy50aW1lcy5sZW5ndGg7KytwKXtsZXQgZD1jLnRpbWVzW3BdKmk7aWYoIShkPHJ8fGQ+PW4pKXtoLnB1c2goYy50aW1lc1twXSk7Zm9yKGxldCBnPTA7Zzx1OysrZylmLnB1c2goYy52YWx1ZXNbcCp1K2ddKX19aC5sZW5ndGghPT0wJiYoYy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkoaCxjLnRpbWVzLmNvbnN0cnVjdG9yKSxjLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkoZixjLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGMpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpcz5vLnRyYWNrc1tsXS50aW1lc1swXSYmKHM9by50cmFja3NbbF0udGltZXNbMF0pO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClvLnRyYWNrc1tsXS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbihlLHQ9MCxyPWUsbj0zMCl7bjw9MCYmKG49MzApO2xldCBpPXIudHJhY2tzLmxlbmd0aCxvPXQvbjtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgcz1yLnRyYWNrc1thXSxsPXMuVmFsdWVUeXBlTmFtZTtpZihsPT09ImJvb2wifHxsPT09InN0cmluZyIpY29udGludWU7bGV0IGM9ZS50cmFja3MuZmluZChmdW5jdGlvbih5KXtyZXR1cm4geS5uYW1lPT09cy5uYW1lJiZ5LlZhbHVlVHlwZU5hbWU9PT1sfSk7aWYoYz09PXZvaWQgMCljb250aW51ZTtsZXQgdT0wLGg9cy5nZXRWYWx1ZVNpemUoKTtzLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYodT1oLzMpO2xldCBmPTAscD1jLmdldFZhbHVlU2l6ZSgpO2MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihmPXAvMyk7bGV0IGQ9cy50aW1lcy5sZW5ndGgtMSxnO2lmKG88PXMudGltZXNbMF0pe2xldCB5PXUseD1oLXU7Zz1Zbi5hcnJheVNsaWNlKHMudmFsdWVzLHkseCl9ZWxzZSBpZihvPj1zLnRpbWVzW2RdKXtsZXQgeT1kKmgrdSx4PXkraC11O2c9WW4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9dSxiPWgtdTt5LmV2YWx1YXRlKG8pLGc9WW4uYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LGIpfWw9PT0icXVhdGVybmlvbiImJm5ldyB5aSgpLmZyb21BcnJheShnKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KGcpO2xldCBfPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8XzsrK3kpe2xldCB4PXkqcCtmO2lmKGw9PT0icXVhdGVybmlvbiIpeWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxnLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgYj1wLWYqMjtmb3IobGV0IFM9MDtTPGI7KytTKWMudmFsdWVzW3grU10tPWdbU119fX1yZXR1cm4gZS5ibGVuZE1vZGU9a2h0LGV9fSxmaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9aSE9PXZvaWQgMD9pOm5ldyByLmNvbnN0cnVjdG9yKG4pLHRoaXMuc2FtcGxlVmFsdWVzPXIsdGhpcy52YWx1ZVNpemU9bix0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG49dGhpcy5fY2FjaGVkSW5kZXgsaT1yW25dLG89cltuLTFdO3Q6e2U6e2xldCBhO3I6e246aWYoISh0PGkpKXtmb3IobGV0IHM9bisyOzspe2lmKGk9PT12b2lkIDApe2lmKHQ8bylicmVhayBuO3JldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLHQsbyl9aWYobj09PXMpYnJlYWs7aWYobz1pLGk9clsrK25dLHQ8aSlicmVhayBlfWE9ci5sZW5ndGg7YnJlYWsgcn1pZighKHQ+PW8pKXtsZXQgcz1yWzFdO3Q8cyYmKG49MixvPXMpO2ZvcihsZXQgbD1uLTI7Oyl7aWYobz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PWwpYnJlYWs7aWYoaT1vLG89clstLW4tMV0sdD49bylicmVhayBlfWE9bixuPTA7YnJlYWsgcn1icmVhayB0fWZvcig7bjxhOyl7bGV0IHM9bithPj4+MTt0PHJbc10/YT1zOm49cysxfWlmKGk9cltuXSxvPXJbbi0xXSxvPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihpPT09dm9pZCAwKXJldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmludGVydmFsQ2hhbmdlZF8obixvLGkpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhuLG8sdCxpKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLG89dCppO2ZvcihsZXQgYT0wO2EhPT1pOysrYSlyW2FdPW5bbythXTtyZXR1cm4gcn1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O2ZoLnByb3RvdHlwZS5iZWZvcmVTdGFydF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87ZmgucHJvdG90eXBlLmFmdGVyRW5kXz1maC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgU1U9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfX1pbnRlcnZhbENoYW5nZWRfKHQscixuKXtsZXQgaT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPWlbb10sbD1pW2FdO2lmKHM9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVDE6bz10LHM9MipyLW47YnJlYWs7Y2FzZSBKUDpvPWkubGVuZ3RoLTIscz1yK2lbb10taVtvKzFdO2JyZWFrO2RlZmF1bHQ6bz10LHM9bn1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBUMTphPXQsbD0yKm4tcjticmVhaztjYXNlIEpQOmE9MSxsPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEsbD1yfWxldCBjPShuLXIpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhyLXMpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1uKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PWEqdX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9dCpzLGM9bC1zLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LHA9dGhpcy5fd2VpZ2h0TmV4dCxkPShuLXIpLyhpLXIpLGc9ZCpkLF89ZypkLHk9LWYqXysyKmYqZy1mKmQseD0oMStmKSpfKygtMS41LTIqZikqZysoLS41K2YpKmQrMSxiPSgtMS1wKSpfKygxLjUrcCkqZysuNSpkLFM9cCpfLXAqZztmb3IobGV0IEM9MDtDIT09czsrK0Mpb1tDXT15KmFbdStDXSt4KmFbYytDXStiKmFbbCtDXStTKmFbaCtDXTtyZXR1cm4gb319LFM2PWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PShuLXIpLyhpLXIpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1zOysrZilvW2ZdPWFbYytmXSpoK2FbbCtmXSp1O3JldHVybiBvfX0sTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRGw9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYocj09PXZvaWQgMHx8ci5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkocix0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkobix0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKGl8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IHI9dC5jb25zdHJ1Y3RvcixuO2lmKHIudG9KU09OIT09dGhpcy50b0pTT04pbj1yLnRvSlNPTih0KTtlbHNle249e25hbWU6dC5uYW1lLHRpbWVzOlluLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6WW4uY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IGk9dC5nZXRJbnRlcnBvbGF0aW9uKCk7aSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249aSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE1VKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBTNih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgU1UodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgS1A6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgWlA6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIHJVOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYocj09PXZvaWQgMCl7bGV0IG49InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLG4pLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9cix0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBLUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBaUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiByVX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgcj10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXJbbl0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LHIpe2xldCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aCxvPTAsYT1pLTE7Zm9yKDtvIT09aSYmbltvXTx0OykrK287Zm9yKDthIT09LTEmJm5bYV0+cjspLS1hO2lmKCsrYSxvIT09MHx8YSE9PWkpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKG4sbyxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAscj10aGlzLmdldFZhbHVlU2l6ZSgpO3ItTWF0aC5mbG9vcihyKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgbj10aGlzLnRpbWVzLGk9dGhpcy52YWx1ZXMsbz1uLmxlbmd0aDtvPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IGE9bnVsbDtmb3IobGV0IHM9MDtzIT09bztzKyspe2xldCBsPW5bc107aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsbCksdD0hMTticmVha31pZihhIT09bnVsbCYmYT5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMscyxsLGEpLHQ9ITE7YnJlYWt9YT1sfWlmKGkhPT12b2lkIDAmJlluLmlzVHlwZWRBcnJheShpKSlmb3IobGV0IHM9MCxsPWkubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9aVtzXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9WW4uYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxyPVluLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLG49dGhpcy5nZXRWYWx1ZVNpemUoKSxpPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09clUsbz10Lmxlbmd0aC0xLGE9MTtmb3IobGV0IHM9MTtzPG87KytzKXtsZXQgbD0hMSxjPXRbc10sdT10W3MrMV07aWYoYyE9PXUmJihzIT09MXx8YyE9PXRbMF0pKWlmKGkpbD0hMDtlbHNle2xldCBoPXMqbixmPWgtbixwPWgrbjtmb3IobGV0IGQ9MDtkIT09bjsrK2Qpe2xldCBnPXJbaCtkXTtpZihnIT09cltmK2RdfHxnIT09cltwK2RdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgaD1zKm4sZj1hKm47Zm9yKGxldCBwPTA7cCE9PW47KytwKXJbZitwXT1yW2grcF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9bypuLGw9YSpuLGM9MDtjIT09bjsrK2MpcltsK2NdPXJbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHIsMCxhKm4pKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPXIpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Zbi5hcnJheVNsaWNlKHRoaXMudGltZXMsMCkscj1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLG49dGhpcy5jb25zdHJ1Y3RvcixpPW5ldyBuKHRoaXMubmFtZSx0LHIpO3JldHVybiBpLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsaX19O0RsLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQO3ZhciBhbT1jbGFzcyBleHRlbmRzIERse307YW0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO2FtLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7YW0ucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBNNj1jbGFzcyBleHRlbmRzIERse307TTYucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgWjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O1oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBFVT1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0obi1yKS8oaS1yKSxjPXQqcztmb3IobGV0IHU9YytzO2MhPT11O2MrPTQpeWkuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxYMD1jbGFzcyBleHRlbmRzIERse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEVVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1gwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYMC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249WlA7WDAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNtPWNsYXNzIGV4dGVuZHMgRGx7fTtzbS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgSjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O0oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBRMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9LTEsbixpPSRVKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249cix0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ObCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCByPVtdLG49dC50cmFja3MsaT0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthIT09czsrK2Epci5wdXNoKHMwcihuW2FdKS5zY2FsZShpKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24scix0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCByPVtdLG49dC50cmFja3MsaT17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6cix1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9bi5sZW5ndGg7byE9PWE7KytvKXIucHVzaChEbC50b0pTT04obltvXSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LHIsbixpKXtsZXQgbz1yLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9WW4uZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPVluLnNvcnRlZEFycmF5KGwsMSx1KSxjPVluLnNvcnRlZEFycmF5KGMsMSx1KSwhaSYmbFswXT09PTAmJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IFoxKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrcltzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQscil7bGV0IG49dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IGk9dDtuPWkuZ2VvbWV0cnkmJmkuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8aS5hbmltYXRpb25zfWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV0ubmFtZT09PXIpcmV0dXJuIG5baV07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQscixuKXtsZXQgaT17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKyl7bGV0IGM9dFtzXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9aVtoXTtmfHwoaVtoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBhPVtdO2ZvcihsZXQgcyBpbiBpKWEucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHMsaVtzXSxyLG4pKTtyZXR1cm4gYX1zdGF0aWMgcGFyc2VBbmltYXRpb24odCxyKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBuPWZ1bmN0aW9uKGgsZixwLGQsZyl7aWYocC5sZW5ndGghPT0wKXtsZXQgXz1bXSx5PVtdO1luLmZsYXR0ZW5KU09OKHAsXyx5LGQpLF8ubGVuZ3RoIT09MCYmZy5wdXNoKG5ldyBoKGYsXyx5KSl9fSxpPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIsYT10LmZwc3x8MzAscz10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBwPXt9LGQ7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylpZihmW2RdLm1vcnBoVGFyZ2V0cylmb3IobGV0IGc9MDtnPGZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDtnKyspcFtmW2RdLm1vcnBoVGFyZ2V0c1tnXV09LTE7Zm9yKGxldCBnIGluIHApe2xldCBfPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PWZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBiPWZbZF07Xy5wdXNoKGIudGltZSkseS5wdXNoKGIubW9ycGhUYXJnZXQ9PT1nPzE6MCl9aS5wdXNoKG5ldyBaMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrZysiXSIsXyx5KSl9bD1wLmxlbmd0aCooYXx8MSl9ZWxzZXtsZXQgcD0iLmJvbmVzWyIrcltoXS5uYW1lKyJdIjtuKEoxLHArIi5wb3NpdGlvbiIsZiwicG9zIixpKSxuKFgwLHArIi5xdWF0ZXJuaW9uIixmLCJyb3QiLGkpLG4oSjEscCsiLnNjYWxlIixmLCJzY2wiLGkpfX1yZXR1cm4gaS5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMobyxsLGkscyl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO24hPT1pOysrbil7bGV0IG89dGhpcy50cmFja3Nbbl07cj1NYXRoLm1heChyLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPXIsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0PXQmJnRoaXMudHJhY2tzW3JdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0LnB1c2godGhpcy50cmFja3Nbcl0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGEwcihlKXtzd2l0Y2goZS50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBaMTtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIEoxO2Nhc2UiY29sb3IiOnJldHVybiBNNjtjYXNlInF1YXRlcm5pb24iOnJldHVybiBYMDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGFtO2Nhc2Uic3RyaW5nIjpyZXR1cm4gc219dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitlKX1mdW5jdGlvbiBzMHIoZSl7aWYoZS50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1hMHIoZS50eXBlKTtpZihlLnRpbWVzPT09dm9pZCAwKXtsZXQgcj1bXSxuPVtdO1luLmZsYXR0ZW5KU09OKGUua2V5cyxyLG4sInZhbHVlIiksZS50aW1lcz1yLGUudmFsdWVzPW59cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShlKTpuZXcgdChlLm5hbWUsZS50aW1lcyxlLnZhbHVlcyxlLmludGVycG9sYXRpb24pfXZhciB0eD17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbZV09dCl9LGdldDpmdW5jdGlvbihlKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tlXX0scmVtb3ZlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmZpbGVzW2VdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxFNj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9dGhpcyxvPSExLGE9MCxzPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9cix0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXtzKyssbz09PSExJiZpLm9uU3RhcnQhPT12b2lkIDAmJmkub25TdGFydCh1LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe2ErKyxpLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJmkub25Qcm9ncmVzcyh1LGEscyksYT09PXMmJihvPSExLGkub25Mb2FkIT09dm9pZCAwJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7aS5vbkVycm9yIT09dm9pZCAwJiZpLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgcD1jW2hdLGQ9Y1toKzFdO2lmKHAuZ2xvYmFsJiYocC5sYXN0SW5kZXg9MCkscC50ZXN0KHUpKXJldHVybiBkfXJldHVybiBudWxsfX19LHRwZT1uZXcgRTYsZWE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXQhPT12b2lkIDA/dDp0cGUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQscil7bGV0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLmxvYWQodCxpLHIsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sWWQ9e30sSmM9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXR4LmdldCh0KTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntyJiZyKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKFlkW3RdIT09dm9pZCAwKXtZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7cmV0dXJufVlkW3RdPVtdLFlkW3RdLnB1c2goe29uTG9hZDpyLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtsZXQgYT1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxzPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChhKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PVlkW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxwPWY/cGFyc2VJbnQoZik6MCxkPXAhPT0wLGc9MCxfPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoeSl7eCgpO2Z1bmN0aW9uIHgoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOlN9KT0+e2lmKGIpeS5jbG9zZSgpO2Vsc2V7Zys9Uy5ieXRlTGVuZ3RoO2xldCBDPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6ZCxsb2FkZWQ6Zyx0b3RhbDpwfSk7Zm9yKGxldCBQPTAsaz11Lmxlbmd0aDtQPGs7UCsrKXtsZXQgTz11W1BdO08ub25Qcm9ncmVzcyYmTy5vblByb2dyZXNzKEMpfXkuZW5xdWV1ZShTKSx4KCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2UoXyl9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHM9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocyksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAscD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGQ9PnAuZGVjb2RlKGQpKX19fSkudGhlbihjPT57dHguYWRkKHQsYyk7bGV0IHU9WWRbdF07ZGVsZXRlIFlkW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9dVtoXTtwLm9uTG9hZCYmcC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVlkW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkVycm9yJiZwLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sb2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1RMS5wYXJzZSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSxhaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1bXSxzPW5ldyBhNixsPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2wuc2V0UGF0aCh0aGlzLnBhdGgpLGwuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGwuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGwuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKTtsZXQgYz0wO2Z1bmN0aW9uIHUoaCl7bC5sb2FkKHRbaF0sZnVuY3Rpb24oZil7bGV0IHA9by5wYXJzZShmLCEwKTthW2hdPXt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxmb3JtYXQ6cC5mb3JtYXQsbWlwbWFwczpwLm1pcG1hcHN9LGMrPTEsYz09PTYmJihwLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmltYWdlPWEscy5mb3JtYXQ9cC5mb3JtYXQscy5uZWVkc1VwZGF0ZT0hMCxyJiZyKHMpKX0sbixpKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgaD0wLGY9dC5sZW5ndGg7aDxmOysraCl1KGgpO2Vsc2UgbC5sb2FkKHQsZnVuY3Rpb24oaCl7bGV0IGY9by5wYXJzZShoLCEwKTtpZihmLmlzQ3ViZW1hcCl7bGV0IHA9Zi5taXBtYXBzLmxlbmd0aC9mLm1pcG1hcENvdW50O2ZvcihsZXQgZD0wO2Q8cDtkKyspe2FbZF09e21pcG1hcHM6W119O2ZvcihsZXQgZz0wO2c8Zi5taXBtYXBDb3VudDtnKyspYVtkXS5taXBtYXBzLnB1c2goZi5taXBtYXBzW2QqZi5taXBtYXBDb3VudCtnXSksYVtkXS5mb3JtYXQ9Zi5mb3JtYXQsYVtkXS53aWR0aD1mLndpZHRoLGFbZF0uaGVpZ2h0PWYuaGVpZ2h0fXMuaW1hZ2U9YX1lbHNlIHMuaW1hZ2Uud2lkdGg9Zi53aWR0aCxzLmltYWdlLmhlaWdodD1mLmhlaWdodCxzLm1pcG1hcHM9Zi5taXBtYXBzO2YubWlwbWFwQ291bnQ9PT0xJiYocy5taW5GaWx0ZXI9aWkpLHMuZm9ybWF0PWYuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKX0sbixpKTtyZXR1cm4gc319LGV4PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXRoaXMsYT10eC5nZXQodCk7aWYoYSE9PXZvaWQgMClyZXR1cm4gby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ciYmcihhKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksYTtsZXQgcz10NigiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSx0eC5hZGQodCx0aGlzKSxyJiZyKHRoaXMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLGkmJmkoaCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKHMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzLnNyYz10LHN9fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IEgwLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7YS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxhLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgcz0wO2Z1bmN0aW9uIGwoYyl7YS5sb2FkKHRbY10sZnVuY3Rpb24odSl7by5pbWFnZXNbY109dSxzKysscz09PTYmJihvLm5lZWRzVXBkYXRlPSEwLHImJnIobykpfSx2b2lkIDAsaSl9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gb319LENVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpkLHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1vLnBhcnNlKGwpOyFjfHwoYy5pbWFnZSE9PXZvaWQgMD9hLmltYWdlPWMuaW1hZ2U6Yy5kYXRhIT09dm9pZCAwJiYoYS5pbWFnZS53aWR0aD1jLndpZHRoLGEuaW1hZ2UuaGVpZ2h0PWMuaGVpZ2h0LGEuaW1hZ2UuZGF0YT1jLmRhdGEpLGEud3JhcFM9Yy53cmFwUyE9PXZvaWQgMD9jLndyYXBTOkpvLGEud3JhcFQ9Yy53cmFwVCE9PXZvaWQgMD9jLndyYXBUOkpvLGEubWFnRmlsdGVyPWMubWFnRmlsdGVyIT09dm9pZCAwP2MubWFnRmlsdGVyOmlpLGEubWluRmlsdGVyPWMubWluRmlsdGVyIT09dm9pZCAwP2MubWluRmlsdGVyOmlpLGEuYW5pc290cm9weT1jLmFuaXNvdHJvcHkhPT12b2lkIDA/Yy5hbmlzb3Ryb3B5OjEsYy5lbmNvZGluZyE9PXZvaWQgMCYmKGEuZW5jb2Rpbmc9Yy5lbmNvZGluZyksYy5mbGlwWSE9PXZvaWQgMCYmKGEuZmxpcFk9Yy5mbGlwWSksYy5mb3JtYXQhPT12b2lkIDAmJihhLmZvcm1hdD1jLmZvcm1hdCksYy50eXBlIT09dm9pZCAwJiYoYS50eXBlPWMudHlwZSksYy5taXBtYXBzIT09dm9pZCAwJiYoYS5taXBtYXBzPWMubWlwbWFwcyxhLm1pbkZpbHRlcj1veCksYy5taXBtYXBDb3VudD09PTEmJihhLm1pbkZpbHRlcj1paSksYy5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDAmJihhLmdlbmVyYXRlTWlwbWFwcz1jLmdlbmVyYXRlTWlwbWFwcyksYS5uZWVkc1VwZGF0ZT0hMCxyJiZyKGEsYykpfSxuLGkpLGF9fSxBVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IHZpLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCksYS5sb2FkKHQsZnVuY3Rpb24ocyl7by5pbWFnZT1zLG8ubmVlZHNVcGRhdGU9ITAsciE9PXZvaWQgMCYmcihvKX0sbixpKSxvfX0sT2w9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLmludGVuc2l0eT1yfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLHIub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoci5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKHIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihyLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoci5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKHIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoci5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxyfX07T2wucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFQ2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsbiksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgbmUocil9Y29weSh0KXtyZXR1cm4gT2wucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VDYucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBnaGU9bmV3IE1lLF9oZT1uZXcgaix5aGU9bmV3IGosQzY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEx0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IE4xLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgTHQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgZW4oMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IHI9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtfaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLHIucG9zaXRpb24uY29weShfaGUpLHloZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLHIubG9va0F0KHloZSksci51cGRhdGVNYXRyaXhXb3JsZCgpLGdoZS5tdWx0aXBseU1hdHJpY2VzKHIucHJvamVjdGlvbk1hdHJpeCxyLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChnaGUpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoci5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KHIubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXt9O3JldHVybiB0aGlzLmJpYXMhPT0wJiYodC5iaWFzPXRoaXMuYmlhcyksdGhpcy5ub3JtYWxCaWFzIT09MCYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLHRoaXMucmFkaXVzIT09MSYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSwodGhpcy5tYXBTaXplLnghPT01MTJ8fHRoaXMubWFwU2l6ZS55IT09NTEyKSYmKHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fSxQVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49UVAqMip0LmFuZ2xlKnRoaXMuZm9jdXMsaT10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodCxvPXQuZGlzdGFuY2V8fHIuZmFyOyhuIT09ci5mb3Z8fGkhPT1yLmFzcGVjdHx8byE9PXIuZmFyKSYmKHIuZm92PW4sci5hc3BlY3Q9aSxyLmZhcj1vLHIudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX07UFUucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwO3ZhciBBNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT1NYXRoLlBJLzMsbz0wLGE9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5kaXN0YW5jZT1uLHRoaXMuYW5nbGU9aSx0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1hLHRoaXMuc2hhZG93PW5ldyBQVX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtBNi5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIHZoZT1uZXcgTWUsQlA9bmV3IGoseHV0PW5ldyBqLElVPWNsYXNzIGV4dGVuZHMgQzZ7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWkoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDIsMSwxLDEpLG5ldyBlbigwLDEsMSwxKSxuZXcgZW4oMywxLDEsMSksbmV3IGVuKDEsMSwxLDEpLG5ldyBlbigzLDAsMSwxKSxuZXcgZW4oMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgaigxLDAsMCksbmV3IGooLTEsMCwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKSxuZXcgaigwLDEsMCksbmV3IGooMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMCwxKSxuZXcgaigwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LHI9MCl7bGV0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fG4uZmFyO28hPT1uLmZhciYmKG4uZmFyPW8sbi51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLEJQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoQlApLHh1dC5jb3B5KG4ucG9zaXRpb24pLHh1dC5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbcl0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW3JdKSxuLmxvb2tBdCh4dXQpLG4udXBkYXRlTWF0cml4V29ybGQoKSxpLm1ha2VUcmFuc2xhdGlvbigtQlAueCwtQlAueSwtQlAueiksdmhlLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHZoZSl9fTtJVS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT0xKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1uLHRoaXMuZGVjYXk9aSx0aGlzLnNoYWRvdz1uZXcgSVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IEQxKC01LDUsNSwtNSwuNSw1MDApKX19O0xVLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIEk2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5zaGFkb3c9bmV3IExVfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0k2LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0w2LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgazY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0xMCxpPTEwKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsci5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LHJ9fTtrNi5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBSNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgail9c2V0KHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspdGhpcy5jb2VmZmljaWVudHNbcl0uY29weSh0W3JdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIHIuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxyLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxyLmFkZFNjYWxlZFZlY3RvcihhWzRdLDEuMDkyNTQ4KihuKmkpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDEuMDkyNTQ4KihpKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzddLDEuMDkyNTQ4KihuKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxyfWdldElycmFkaWFuY2VBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwyKi41MTE2NjQqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwyKi41MTE2NjQqbyksci5hZGRTY2FsZWRWZWN0b3IoYVszXSwyKi41MTE2NjQqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwyKi40MjkwNDMqbippKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDIqLjQyOTA0MyppKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwyKi40MjkwNDMqbipvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC40MjkwNDMqKG4qbi1pKmkpKSxyfWFkZCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmFkZCh0LmNvZWZmaWNpZW50c1tyXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tuXSxyKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmxlcnAodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW3JdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tyXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxyK2kqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLnRvQXJyYXkodCxyK2kqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10Lno7clswXT0uMjgyMDk1LHJbMV09LjQ4ODYwMyppLHJbMl09LjQ4ODYwMypvLHJbM109LjQ4ODYwMypuLHJbNF09MS4wOTI1NDgqbippLHJbNV09MS4wOTI1NDgqaSpvLHJbNl09LjMxNTM5MiooMypvKm8tMSkscls3XT0xLjA5MjU0OCpuKm8scls4XT0uNTQ2Mjc0KihuKm4taSppKX19O1I2LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIHJ4PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodD1uZXcgUjYscj0xKXtzdXBlcih2b2lkIDAsciksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCkscn19O3J4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9dGhpcy50ZXh0dXJlcztmdW5jdGlvbiBuKG8pe3JldHVybiByW29dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsbykscltvXX1sZXQgaT1uZXcgbzByW3QudHlwZV07aWYodC51dWlkIT09dm9pZCAwJiYoaS51dWlkPXQudXVpZCksdC5uYW1lIT09dm9pZCAwJiYoaS5uYW1lPXQubmFtZSksdC5jb2xvciE9PXZvaWQgMCYmaS5jb2xvciE9PXZvaWQgMCYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdC5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdC5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdC5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dC5zaGVlbiksdC5zaGVlbkNvbG9yIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yPW5ldyBuZSgpLnNldEhleCh0LnNoZWVuQ29sb3IpKSx0LnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzKSx0LmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlLnNldEhleCh0LmVtaXNzaXZlKSx0LnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyLnNldEhleCh0LnNwZWN1bGFyKSx0LnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYoaS5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5KSx0LnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvciE9PXZvaWQgMCYmaS5zcGVjdWxhckNvbG9yLnNldEhleCh0LnNwZWN1bGFyQ29sb3IpLHQuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHQuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHQuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHQudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHQudGhpY2tuZXNzIT09dm9pZCAwJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHQuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHQuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiZpLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KHQuYXR0ZW51YXRpb25Db2xvciksdC5mb2chPT12b2lkIDAmJihpLmZvZz10LmZvZyksdC5mbGF0U2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdC5ibGVuZGluZyE9PXZvaWQgMCYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdC5jb21iaW5lIT09dm9pZCAwJiYoaS5jb21iaW5lPXQuY29tYmluZSksdC5zaWRlIT09dm9pZCAwJiYoaS5zaWRlPXQuc2lkZSksdC5zaGFkb3dTaWRlIT09dm9pZCAwJiYoaS5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSksdC5vcGFjaXR5IT09dm9pZCAwJiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdC50cmFuc3BhcmVudCE9PXZvaWQgMCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdC5hbHBoYVRlc3QhPT12b2lkIDAmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdC5kZXB0aFRlc3QhPT12b2lkIDAmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdC5kZXB0aFdyaXRlIT09dm9pZCAwJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdC5jb2xvcldyaXRlIT09dm9pZCAwJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdC5hbHBoYVdyaXRlIT09dm9pZCAwJiYoaS5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSksdC5zdGVuY2lsV3JpdGUhPT12b2lkIDAmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdC5zdGVuY2lsV3JpdGVNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdC5zdGVuY2lsRnVuYyE9PXZvaWQgMCYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdC5zdGVuY2lsUmVmIT09dm9pZCAwJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdC5zdGVuY2lsRnVuY01hc2shPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdC5zdGVuY2lsRmFpbCE9PXZvaWQgMCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdC5zdGVuY2lsWkZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdC5zdGVuY2lsWlBhc3MhPT12b2lkIDAmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdC53aXJlZnJhbWUhPT12b2lkIDAmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdC53aXJlZnJhbWVMaW5ld2lkdGghPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdC53aXJlZnJhbWVMaW5lY2FwIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdC53aXJlZnJhbWVMaW5lam9pbiE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdC5yb3RhdGlvbiE9PXZvaWQgMCYmKGkucm90YXRpb249dC5yb3RhdGlvbiksdC5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHQuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHQuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHQuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXQuc2NhbGUpLHQucG9seWdvbk9mZnNldCE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHQucG9seWdvbk9mZnNldEZhY3RvciE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHQucG9seWdvbk9mZnNldFVuaXRzIT09dm9pZCAwJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHQuZGl0aGVyaW5nIT09dm9pZCAwJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHQuYWxwaGFUb0NvdmVyYWdlIT09dm9pZCAwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UpLHQucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEpLHQudmlzaWJsZSE9PXZvaWQgMCYmKGkudmlzaWJsZT10LnZpc2libGUpLHQudG9uZU1hcHBlZCE9PXZvaWQgMCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHQudXNlckRhdGEhPT12b2lkIDAmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHQudmVydGV4Q29sb3JzIT09dm9pZCAwJiYodHlwZW9mIHQudmVydGV4Q29sb3JzPT0ibnVtYmVyIj9pLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycz4wOmkudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzKSx0LnVuaWZvcm1zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LnVuaWZvcm1zKXtsZXQgYT10LnVuaWZvcm1zW29dO3N3aXRjaChpLnVuaWZvcm1zW29dPXt9LGEudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW29dLnZhbHVlPW4oYS52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBuZSgpLnNldEhleChhLnZhbHVlKTticmVhaztjYXNlInYyIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBMdCgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBqKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UidjQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGVuKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGtpKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IE1lKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2RlZmF1bHQ6aS51bmlmb3Jtc1tvXS52YWx1ZT1hLnZhbHVlfX1pZih0LmRlZmluZXMhPT12b2lkIDAmJihpLmRlZmluZXM9dC5kZWZpbmVzKSx0LnZlcnRleFNoYWRlciE9PXZvaWQgMCYmKGkudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyKSx0LmZyYWdtZW50U2hhZGVyIT09dm9pZCAwJiYoaS5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyKSx0LmV4dGVuc2lvbnMhPT12b2lkIDApZm9yKGxldCBvIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbb109dC5leHRlbnNpb25zW29dO2lmKHQuc2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5zaGFkaW5nPT09MSksdC5zaXplIT09dm9pZCAwJiYoaS5zaXplPXQuc2l6ZSksdC5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdC5tYXAhPT12b2lkIDAmJihpLm1hcD1uKHQubWFwKSksdC5tYXRjYXAhPT12b2lkIDAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdC5hbHBoYU1hcCE9PXZvaWQgMCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdC5idW1wTWFwIT09dm9pZCAwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdC5idW1wU2NhbGUhPT12b2lkIDAmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdC5ub3JtYWxNYXAhPT12b2lkIDAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdC5ub3JtYWxNYXBUeXBlIT09dm9pZCAwJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdC5ub3JtYWxTY2FsZSE9PXZvaWQgMCl7bGV0IG89dC5ub3JtYWxTY2FsZTtBcnJheS5pc0FycmF5KG8pPT09ITEmJihvPVtvLG9dKSxpLm5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheShvKX1yZXR1cm4gdC5kaXNwbGFjZW1lbnRNYXAhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudE1hcD1uKHQuZGlzcGxhY2VtZW50TWFwKSksdC5kaXNwbGFjZW1lbnRTY2FsZSE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSksdC5kaXNwbGFjZW1lbnRCaWFzIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50QmlhcyksdC5yb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLnJvdWdobmVzc01hcD1uKHQucm91Z2huZXNzTWFwKSksdC5tZXRhbG5lc3NNYXAhPT12b2lkIDAmJihpLm1ldGFsbmVzc01hcD1uKHQubWV0YWxuZXNzTWFwKSksdC5lbWlzc2l2ZU1hcCE9PXZvaWQgMCYmKGkuZW1pc3NpdmVNYXA9bih0LmVtaXNzaXZlTWFwKSksdC5lbWlzc2l2ZUludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSksdC5zcGVjdWxhck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJNYXA9bih0LnNwZWN1bGFyTWFwKSksdC5zcGVjdWxhckludGVuc2l0eU1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bih0LnNwZWN1bGFySW50ZW5zaXR5TWFwKSksdC5zcGVjdWxhckNvbG9yTWFwIT09dm9pZCAwJiYoaS5zcGVjdWxhckNvbG9yTWFwPW4odC5zcGVjdWxhckNvbG9yTWFwKSksdC5lbnZNYXAhPT12b2lkIDAmJihpLmVudk1hcD1uKHQuZW52TWFwKSksdC5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSksdC5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSksdC5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyksdC5saWdodE1hcCE9PXZvaWQgMCYmKGkubGlnaHRNYXA9bih0LmxpZ2h0TWFwKSksdC5saWdodE1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSksdC5hb01hcCE9PXZvaWQgMCYmKGkuYW9NYXA9bih0LmFvTWFwKSksdC5hb01hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSksdC5ncmFkaWVudE1hcCE9PXZvaWQgMCYmKGkuZ3JhZGllbnRNYXA9bih0LmdyYWRpZW50TWFwKSksdC5jbGVhcmNvYXRNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE1hcD1uKHQuY2xlYXJjb2F0TWFwKSksdC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD1uKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSksdC5jbGVhcmNvYXROb3JtYWxNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbE1hcD1uKHQuY2xlYXJjb2F0Tm9ybWFsTWFwKSksdC5jbGVhcmNvYXROb3JtYWxTY2FsZSE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx0LnRyYW5zbWlzc2lvbk1hcCE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSx0LnRoaWNrbmVzc01hcCE9PXZvaWQgMCYmKGkudGhpY2tuZXNzTWFwPW4odC50aGlja25lc3NNYXApKSx0LnNoZWVuQ29sb3JNYXAhPT12b2lkIDAmJihpLnNoZWVuQ29sb3JNYXA9bih0LnNoZWVuQ29sb3JNYXApKSx0LnNoZWVuUm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzc01hcD1uKHQuc2hlZW5Sb3VnaG5lc3NNYXApKSxpfXNldFRleHR1cmVzKHQpe3JldHVybiB0aGlzLnRleHR1cmVzPXQsdGhpc319LGRNPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocikpfWNhdGNoKG4pe3JldHVybiByfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IHI9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiByPT09LTE/Ii4vIjp0LnN1YnN0cigwLHIrMSl9c3RhdGljIHJlc29sdmVVUkwodCxyKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KHIpJiYvXlwvLy50ZXN0KHQpJiYocj1yLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OnIrdCl9fSxONj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtONi5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgUlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9e30sbj17fTtmdW5jdGlvbiBpKHAsZCl7aWYocltkXSE9PXZvaWQgMClyZXR1cm4gcltkXTtsZXQgXz1wLmludGVybGVhdmVkQnVmZmVyc1tkXSx5PW8ocCxfLmJ1ZmZlcikseD1CMyhfLnR5cGUseSksYj1uZXcgZW0oeCxfLnN0cmlkZSk7cmV0dXJuIGIudXVpZD1fLnV1aWQscltkXT1iLGJ9ZnVuY3Rpb24gbyhwLGQpe2lmKG5bZF0hPT12b2lkIDApcmV0dXJuIG5bZF07bGV0IF89cC5hcnJheUJ1ZmZlcnNbZF0seT1uZXcgVWludDMyQXJyYXkoXykuYnVmZmVyO3JldHVybiBuW2RdPXkseX1sZXQgYT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IE42Om5ldyBQZSxzPXQuZGF0YS5pbmRleDtpZihzIT09dm9pZCAwKXtsZXQgcD1CMyhzLnR5cGUscy5hcnJheSk7YS5zZXRJbmRleChuZXcgSmUocCwxKSl9bGV0IGw9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGxldCBwIGluIGwpe2xldCBkPWxbcF0sZztpZihkLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBfPWkodC5kYXRhLGQuZGF0YSk7Zz1uZXcgdHAoXyxkLml0ZW1TaXplLGQub2Zmc2V0LGQubm9ybWFsaXplZCl9ZWxzZXtsZXQgXz1CMyhkLnR5cGUsZC5hcnJheSkseT1kLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3JtOkplO2c9bmV3IHkoXyxkLml0ZW1TaXplLGQubm9ybWFsaXplZCl9ZC5uYW1lIT09dm9pZCAwJiYoZy5uYW1lPWQubmFtZSksZC51c2FnZSE9PXZvaWQgMCYmZy5zZXRVc2FnZShkLnVzYWdlKSxkLnVwZGF0ZVJhbmdlIT09dm9pZCAwJiYoZy51cGRhdGVSYW5nZS5vZmZzZXQ9ZC51cGRhdGVSYW5nZS5vZmZzZXQsZy51cGRhdGVSYW5nZS5jb3VudD1kLnVwZGF0ZVJhbmdlLmNvdW50KSxhLnNldEF0dHJpYnV0ZShwLGcpfWxldCBjPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoYylmb3IobGV0IHAgaW4gYyl7bGV0IGQ9Y1twXSxnPVtdO2ZvcihsZXQgXz0wLHk9ZC5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9ZFtfXSxiO2lmKHguaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFM9aSh0LmRhdGEseC5kYXRhKTtiPW5ldyB0cChTLHguaXRlbVNpemUseC5vZmZzZXQseC5ub3JtYWxpemVkKX1lbHNle2xldCBTPUIzKHgudHlwZSx4LmFycmF5KTtiPW5ldyBKZShTLHguaXRlbVNpemUseC5ub3JtYWxpemVkKX14Lm5hbWUhPT12b2lkIDAmJihiLm5hbWU9eC5uYW1lKSxnLnB1c2goYil9YS5tb3JwaEF0dHJpYnV0ZXNbcF09Z310LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUmJihhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSEwKTtsZXQgaD10LmRhdGEuZ3JvdXBzfHx0LmRhdGEuZHJhd2NhbGxzfHx0LmRhdGEub2Zmc2V0cztpZihoIT09dm9pZCAwKWZvcihsZXQgcD0wLGQ9aC5sZW5ndGg7cCE9PWQ7KytwKXtsZXQgZz1oW3BdO2EuYWRkR3JvdXAoZy5zdGFydCxnLmNvdW50LGcubWF0ZXJpYWxJbmRleCl9bGV0IGY9dC5kYXRhLmJvdW5kaW5nU3BoZXJlO2lmKGYhPT12b2lkIDApe2xldCBwPW5ldyBqO2YuY2VudGVyIT09dm9pZCAwJiZwLmZyb21BcnJheShmLmNlbnRlciksYS5ib3VuZGluZ1NwaGVyZT1uZXcgWmYocCxmLnJhZGl1cyl9cmV0dXJuIHQubmFtZSYmKGEubmFtZT10Lm5hbWUpLHQudXNlckRhdGEmJihhLnVzZXJEYXRhPXQudXNlckRhdGEpLGF9fSxzaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGE7bGV0IHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cy5zZXRQYXRoKHRoaXMucGF0aCkscy5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcikscy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLHMubG9hZCh0LGZ1bmN0aW9uKGwpe2xldCBjPW51bGw7dHJ5e2M9SlNPTi5wYXJzZShsKX1jYXRjaChoKXtpIT09dm9pZCAwJiZpKGgpLGNvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIit0KyIuIixoLm1lc3NhZ2UpO3JldHVybn1sZXQgdT1jLm1ldGFkYXRhO2lmKHU9PT12b2lkIDB8fHUudHlwZT09PXZvaWQgMHx8dS50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KTtyZXR1cm59by5wYXJzZShjLHIpfSxuLGkpfWxvYWRBc3luYyh0LHIpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IG49dGhpcyxpPXRoaXMucGF0aD09PSIiP2RNLmV4dHJhY3RVcmxCYXNlKHQpOnRoaXMucGF0aDt0aGlzLnJlc291cmNlUGF0aD10aGlzLnJlc291cmNlUGF0aHx8aTtsZXQgbz1uZXcgSmModGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7bGV0IGE9eWllbGQgby5sb2FkQXN5bmModCxyKSxzPUpTT04ucGFyc2UoYSksbD1zLm1ldGFkYXRhO2lmKGw9PT12b2lkIDB8fGwudHlwZT09PXZvaWQgMHx8bC50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXRocm93IG5ldyBFcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJuIHlpZWxkIG4ucGFyc2VBc3luYyhzKX0pfXBhcnNlKHQscil7bGV0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLG89dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLGE9dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcyxmdW5jdGlvbigpe3IhPT12b2lkIDAmJnIoYyl9KSxzPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLGEpLGw9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxzKSxjPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsbyxsLHMsbiksdT10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGMpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhjLHUpLHIhPT12b2lkIDApe2xldCBoPSExO2ZvcihsZXQgZiBpbiBhKWlmKGFbZl1pbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpe2g9ITA7YnJlYWt9aD09PSExJiZyKGMpfXJldHVybiBjfXBhcnNlQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLnBhcnNlQW5pbWF0aW9ucyh0LmFuaW1hdGlvbnMpLG49dGhpcy5wYXJzZVNoYXBlcyh0LnNoYXBlcyksaT10aGlzLnBhcnNlR2VvbWV0cmllcyh0Lmdlb21ldHJpZXMsbiksbz15aWVsZCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmModC5pbWFnZXMpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxpLHMsYSxyKSxjPXRoaXMucGFyc2VTa2VsZXRvbnModC5za2VsZXRvbnMsbCk7cmV0dXJuIHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLGx9KX1wYXJzZVNoYXBlcyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7bGV0IG89bmV3IEtjKCkuZnJvbUpTT04odFtuXSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VTa2VsZXRvbnModCxyKXtsZXQgbj17fSxpPXt9O2lmKHIudHJhdmVyc2UoZnVuY3Rpb24obyl7by5pc0JvbmUmJihpW28udXVpZF09byl9KSx0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9bmV3IGxNKCkuZnJvbUpTT04odFtvXSxpKTtuW3MudXVpZF09c31yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxyKXtsZXQgbj17fTtpZih0IT09dm9pZCAwKXtsZXQgaT1uZXcgUlU7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgcyxsPXRbb107c3dpdGNoKGwudHlwZSl7Y2FzZSJCdWZmZXJHZW9tZXRyeSI6Y2FzZSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI6cz1pLnBhcnNlKGwpO2JyZWFrO2Nhc2UiR2VvbWV0cnkiOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7ZGVmYXVsdDpsLnR5cGUgaW4gbWhlP3M9bWhlW2wudHlwZV0uZnJvbUpTT04obCxyKTpjb25zb2xlLndhcm4oYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJHtsLnR5cGV9ImApfXMudXVpZD1sLnV1aWQsbC5uYW1lIT09dm9pZCAwJiYocy5uYW1lPWwubmFtZSkscy5pc0J1ZmZlckdlb21ldHJ5PT09ITAmJmwudXNlckRhdGEhPT12b2lkIDAmJihzLnVzZXJEYXRhPWwudXNlckRhdGEpLG5bbC51dWlkXT1zfX1yZXR1cm4gbn1wYXJzZU1hdGVyaWFscyh0LHIpe2xldCBuPXt9LGk9e307aWYodCE9PXZvaWQgMCl7bGV0IG89bmV3IGtVO28uc2V0VGV4dHVyZXMocik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdO2lmKGwudHlwZT09PSJNdWx0aU1hdGVyaWFsIil7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxsLm1hdGVyaWFscy5sZW5ndGg7dSsrKXtsZXQgaD1sLm1hdGVyaWFsc1t1XTtuW2gudXVpZF09PT12b2lkIDAmJihuW2gudXVpZF09by5wYXJzZShoKSksYy5wdXNoKG5baC51dWlkXSl9aVtsLnV1aWRdPWN9ZWxzZSBuW2wudXVpZF09PT12b2lkIDAmJihuW2wudXVpZF09by5wYXJzZShsKSksaVtsLnV1aWRdPW5bbC51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2xldCByPXt9O2lmKHQhPT12b2lkIDApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0sbz1RMS5wYXJzZShpKTtyW28udXVpZF09b31yZXR1cm4gcn1wYXJzZUltYWdlcyh0LHIpe2xldCBuPXRoaXMsaT17fSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4ubWFuYWdlci5pdGVtU3RhcnQobCksby5sb2FkKGwsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZChsKX0sdm9pZCAwLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FcnJvcihsKSxuLm1hbmFnZXIuaXRlbUVuZChsKX0pfWZ1bmN0aW9uIHMobCl7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtsZXQgYz1sLHU9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoYyk/YzpuLnJlc291cmNlUGF0aCtjO3JldHVybiBhKHUpfWVsc2UgcmV0dXJuIGwuZGF0YT97ZGF0YTpCMyhsLnR5cGUsbC5kYXRhKSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH06bnVsbH1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtsZXQgbD1uZXcgRTYocik7bz1uZXcgZXgobCksby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGM9MCx1PXQubGVuZ3RoO2M8dTtjKyspe2xldCBoPXRbY10sZj1oLnVybDtpZihBcnJheS5pc0FycmF5KGYpKXtpW2gudXVpZF09W107Zm9yKGxldCBwPTAsZD1mLmxlbmd0aDtwPGQ7cCsrKXtsZXQgZz1mW3BdLF89cyhnKTtfIT09bnVsbCYmKF8gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbaC51dWlkXS5wdXNoKF8pOmlbaC51dWlkXS5wdXNoKG5ldyBKZChfLmRhdGEsXy53aWR0aCxfLmhlaWdodCkpKX19ZWxzZXtsZXQgcD1zKGgudXJsKTtwIT09bnVsbCYmKGlbaC51dWlkXT1wKX19fXJldHVybiBpfXBhcnNlSW1hZ2VzQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLG49e30saTtmdW5jdGlvbiBvKGEpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtsZXQgcz1hLGw9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3Qocyk/czpyLnJlc291cmNlUGF0aCtzO3JldHVybiB5aWVsZCBpLmxvYWRBc3luYyhsKX1lbHNlIHJldHVybiBhLmRhdGE/e2RhdGE6QjMoYS50eXBlLGEuZGF0YSksd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9Om51bGx9KX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtpPW5ldyBleCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdLGM9bC51cmw7aWYoQXJyYXkuaXNBcnJheShjKSl7bltsLnV1aWRdPVtdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXlpZWxkIG8oZik7cCE9PW51bGwmJihwIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9uW2wudXVpZF0ucHVzaChwKTpuW2wudXVpZF0ucHVzaChuZXcgSmQocC5kYXRhLHAud2lkdGgscC5oZWlnaHQpKSl9fWVsc2V7bGV0IHU9eWllbGQgbyhsLnVybCk7dSE9PW51bGwmJihuW2wudXVpZF09dSl9fX1yZXR1cm4gbn0pfXBhcnNlVGV4dHVyZXModCxyKXtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuIHR5cGVvZiBvPT0ibnVtYmVyIj9vOihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uIixvKSxhW29dKX1sZXQgaT17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXTtzLmltYWdlPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxzLnV1aWQpLHJbcy5pbWFnZV09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHMuaW1hZ2UpO2xldCBsLGM9cltzLmltYWdlXTtBcnJheS5pc0FycmF5KGMpPyhsPW5ldyBIMChjKSxjLmxlbmd0aD09PTYmJihsLm5lZWRzVXBkYXRlPSEwKSk6KGMmJmMuZGF0YT9sPW5ldyBKZChjLmRhdGEsYy53aWR0aCxjLmhlaWdodCk6bD1uZXcgdmkoYyksYyYmKGwubmVlZHNVcGRhdGU9ITApKSxsLnV1aWQ9cy51dWlkLHMubmFtZSE9PXZvaWQgMCYmKGwubmFtZT1zLm5hbWUpLHMubWFwcGluZyE9PXZvaWQgMCYmKGwubWFwcGluZz1uKHMubWFwcGluZyxsMHIpKSxzLm9mZnNldCE9PXZvaWQgMCYmbC5vZmZzZXQuZnJvbUFycmF5KHMub2Zmc2V0KSxzLnJlcGVhdCE9PXZvaWQgMCYmbC5yZXBlYXQuZnJvbUFycmF5KHMucmVwZWF0KSxzLmNlbnRlciE9PXZvaWQgMCYmbC5jZW50ZXIuZnJvbUFycmF5KHMuY2VudGVyKSxzLnJvdGF0aW9uIT09dm9pZCAwJiYobC5yb3RhdGlvbj1zLnJvdGF0aW9uKSxzLndyYXAhPT12b2lkIDAmJihsLndyYXBTPW4ocy53cmFwWzBdLHhoZSksbC53cmFwVD1uKHMud3JhcFsxXSx4aGUpKSxzLmZvcm1hdCE9PXZvaWQgMCYmKGwuZm9ybWF0PXMuZm9ybWF0KSxzLnR5cGUhPT12b2lkIDAmJihsLnR5cGU9cy50eXBlKSxzLmVuY29kaW5nIT09dm9pZCAwJiYobC5lbmNvZGluZz1zLmVuY29kaW5nKSxzLm1pbkZpbHRlciE9PXZvaWQgMCYmKGwubWluRmlsdGVyPW4ocy5taW5GaWx0ZXIsYmhlKSkscy5tYWdGaWx0ZXIhPT12b2lkIDAmJihsLm1hZ0ZpbHRlcj1uKHMubWFnRmlsdGVyLGJoZSkpLHMuYW5pc290cm9weSE9PXZvaWQgMCYmKGwuYW5pc290cm9weT1zLmFuaXNvdHJvcHkpLHMuZmxpcFkhPT12b2lkIDAmJihsLmZsaXBZPXMuZmxpcFkpLHMucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmKGwucHJlbXVsdGlwbHlBbHBoYT1zLnByZW11bHRpcGx5QWxwaGEpLHMudW5wYWNrQWxpZ25tZW50IT09dm9pZCAwJiYobC51bnBhY2tBbGlnbm1lbnQ9cy51bnBhY2tBbGlnbm1lbnQpLHMudXNlckRhdGEhPT12b2lkIDAmJihsLnVzZXJEYXRhPXMudXNlckRhdGEpLGlbcy51dWlkXT1sfXJldHVybiBpfXBhcnNlT2JqZWN0KHQscixuLGksbyl7bGV0IGE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gcltmXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsZikscltmXX1mdW5jdGlvbiBsKGYpe2lmKGYhPT12b2lkIDApe2lmKEFycmF5LmlzQXJyYXkoZikpe2xldCBwPVtdO2ZvcihsZXQgZD0wLGc9Zi5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXTtuW19dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixfKSxwLnB1c2gobltfXSl9cmV0dXJuIHB9cmV0dXJuIG5bZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLGYpLG5bZl19fWZ1bmN0aW9uIGMoZil7cmV0dXJuIGlbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsZiksaVtmXX1sZXQgdSxoO3N3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOmE9bmV3IHEwLHQuYmFja2dyb3VuZCE9PXZvaWQgMCYmKE51bWJlci5pc0ludGVnZXIodC5iYWNrZ3JvdW5kKT9hLmJhY2tncm91bmQ9bmV3IG5lKHQuYmFja2dyb3VuZCk6YS5iYWNrZ3JvdW5kPWModC5iYWNrZ3JvdW5kKSksdC5lbnZpcm9ubWVudCE9PXZvaWQgMCYmKGEuZW52aXJvbm1lbnQ9Yyh0LmVudmlyb25tZW50KSksdC5mb2chPT12b2lkIDAmJih0LmZvZy50eXBlPT09IkZvZyI/YS5mb2c9bmV3IHoxKHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKTp0LmZvZy50eXBlPT09IkZvZ0V4cDIiJiYoYS5mb2c9bmV3IE8xKHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6YT1uZXcgVWkodC5mb3YsdC5hc3BlY3QsdC5uZWFyLHQuZmFyKSx0LmZvY3VzIT09dm9pZCAwJiYoYS5mb2N1cz10LmZvY3VzKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LmZpbG1HYXVnZSE9PXZvaWQgMCYmKGEuZmlsbUdhdWdlPXQuZmlsbUdhdWdlKSx0LmZpbG1PZmZzZXQhPT12b2lkIDAmJihhLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0KSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIk9ydGhvZ3JhcGhpY0NhbWVyYSI6YT1uZXcgRDEodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6YT1uZXcgTDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjphPW5ldyBJNih0LmNvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIlBvaW50TGlnaHQiOmE9bmV3IFA2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmE9bmV3IGs2KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmE9bmV3IEE2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmFuZ2xlLHQucGVudW1icmEsdC5kZWNheSk7YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmE9bmV3IFQ2KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjphPW5ldyByeCgpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgYU0odSxoKSx0LmJpbmRNb2RlIT09dm9pZCAwJiYoYS5iaW5kTW9kZT10LmJpbmRNb2RlKSx0LmJpbmRNYXRyaXghPT12b2lkIDAmJmEuYmluZE1hdHJpeC5mcm9tQXJyYXkodC5iaW5kTWF0cml4KSx0LnNrZWxldG9uIT09dm9pZCAwJiYoYS5za2VsZXRvbj10LnNrZWxldG9uKTticmVhaztjYXNlIk1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgdGkodSxoKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCk7bGV0IGY9dC5jb3VudCxwPXQuaW5zdGFuY2VNYXRyaXgsZD10Lmluc3RhbmNlQ29sb3I7YT1uZXcgaTYodSxoLGYpLGEuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkocC5hcnJheSksMTYpLGQhPT12b2lkIDAmJihhLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkoZC5hcnJheSksZC5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjphPW5ldyBfVTticmVhaztjYXNlIkxpbmUiOmE9bmV3IGNoKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lTG9vcCI6YT1uZXcgbzYocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6YT1uZXcgQWEocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlBvaW50Q2xvdWQiOmNhc2UiUG9pbnRzIjphPW5ldyBpbShzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiU3ByaXRlIjphPW5ldyBvTShsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjphPW5ldyBYZDticmVhaztjYXNlIkJvbmUiOmE9bmV3IHNNO2JyZWFrO2RlZmF1bHQ6YT1uZXcgb3J9aWYoYS51dWlkPXQudXVpZCx0Lm5hbWUhPT12b2lkIDAmJihhLm5hbWU9dC5uYW1lKSx0Lm1hdHJpeCE9PXZvaWQgMD8oYS5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx0Lm1hdHJpeEF1dG9VcGRhdGUhPT12b2lkIDAmJihhLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxhLm1hdHJpeEF1dG9VcGRhdGUmJmEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKSk6KHQucG9zaXRpb24hPT12b2lkIDAmJmEucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHQucm90YXRpb24hPT12b2lkIDAmJmEucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHQucXVhdGVybmlvbiE9PXZvaWQgMCYmYS5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHQuc2NhbGUhPT12b2lkIDAmJmEuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx0LmNhc3RTaGFkb3chPT12b2lkIDAmJihhLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx0LnJlY2VpdmVTaGFkb3chPT12b2lkIDAmJihhLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHQuc2hhZG93LmJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHQuc2hhZG93Lm5vcm1hbEJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHQuc2hhZG93LnJhZGl1cyE9PXZvaWQgMCYmKGEuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHQuc2hhZG93Lm1hcFNpemUhPT12b2lkIDAmJmEuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHQuc2hhZG93LmNhbWVyYSE9PXZvaWQgMCYmKGEuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx0LnZpc2libGUhPT12b2lkIDAmJihhLnZpc2libGU9dC52aXNpYmxlKSx0LmZydXN0dW1DdWxsZWQhPT12b2lkIDAmJihhLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx0LnJlbmRlck9yZGVyIT09dm9pZCAwJiYoYS5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LmxheWVycyE9PXZvaWQgMCYmKGEubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHQuY2hpbGRyZW4hPT12b2lkIDApe2xldCBmPXQuY2hpbGRyZW47Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspYS5hZGQodGhpcy5wYXJzZU9iamVjdChmW3BdLHIsbixpLG8pKX1pZih0LmFuaW1hdGlvbnMhPT12b2lkIDApe2xldCBmPXQuYW5pbWF0aW9ucztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXTthLmFuaW1hdGlvbnMucHVzaChvW2RdKX19aWYodC50eXBlPT09IkxPRCIpe3QuYXV0b1VwZGF0ZSE9PXZvaWQgMCYmKGEuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2xldCBmPXQubGV2ZWxzO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgZD1mW3BdLGc9YS5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixkLm9iamVjdCk7ZyE9PXZvaWQgMCYmYS5hZGRMZXZlbChnLGQuZGlzdGFuY2UpfX1yZXR1cm4gYX1iaW5kU2tlbGV0b25zKHQscil7T2JqZWN0LmtleXMocikubGVuZ3RoIT09MCYmdC50cmF2ZXJzZShmdW5jdGlvbihuKXtpZihuLmlzU2tpbm5lZE1lc2g9PT0hMCYmbi5za2VsZXRvbiE9PXZvaWQgMCl7bGV0IGk9cltuLnNrZWxldG9uXTtpPT09dm9pZCAwP2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6IixuLnNrZWxldG9uKTpuLmJpbmQoaSxuLmJpbmRNYXRyaXgpfX0pfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxsMHI9e1VWTWFwcGluZzpYVSxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6bngsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOml4LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOllQLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOmpQLEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOno2fSx4aGU9e1JlcGVhdFdyYXBwaW5nOlhQLENsYW1wVG9FZGdlV3JhcHBpbmc6Sm8sTWlycm9yZWRSZXBlYXRXcmFwcGluZzokUH0sYmhlPXtOZWFyZXN0RmlsdGVyOkxpLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOm9VLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6YVUsTGluZWFyRmlsdGVyOmlpLExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6TGh0LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpveH0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9e307cy5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIscy5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LHMpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt0eC5hZGQodCxsKSxyJiZyKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7aSYmaShsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05VLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBXVix6aHQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1Y9PT12b2lkIDAmJihXVj1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLFdWfSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe1dWPWV9fSxEVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7bGV0IGw9cy5zbGljZSgwKTt6aHQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe3IodSl9KX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX19LE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodm9pZCAwLG4pO2xldCBpPW5ldyBuZSgpLnNldCh0KSxvPW5ldyBuZSgpLnNldChyKSxhPW5ldyBqKGkucixpLmcsaS5iKSxzPW5ldyBqKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fTtPVS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgelU9Y2xhc3MgZXh0ZW5kcyByeHtjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIodm9pZCAwLHIpO2xldCBuPW5ldyBuZSgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQobi5yLG4uZyxuLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O3pVLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB3aGU9bmV3IE1lLFNoZT1uZXcgTWUseTE9bmV3IE1lLGxodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBVaSx0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKSx0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNhbWVyYVI9bmV3IFVpLHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLl9jYWNoZTtpZihyLmZvY3VzIT09dC5mb2N1c3x8ci5mb3YhPT10LmZvdnx8ci5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ci5uZWFyIT09dC5uZWFyfHxyLmZhciE9PXQuZmFyfHxyLnpvb20hPT10Lnpvb218fHIuZXllU2VwIT09dGhpcy5leWVTZXApe3IuZm9jdXM9dC5mb2N1cyxyLmZvdj10LmZvdixyLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxyLm5lYXI9dC5uZWFyLHIuZmFyPXQuZmFyLHIuem9vbT10Lnpvb20sci5leWVTZXA9dGhpcy5leWVTZXAseTEuY29weSh0LnByb2plY3Rpb25NYXRyaXgpO2xldCBpPXIuZXllU2VwLzIsbz1pKnIubmVhci9yLmZvY3VzLGE9ci5uZWFyKk1hdGgudGFuKFAxKnIuZm92Ki41KS9yLnpvb20scyxsO1NoZS5lbGVtZW50c1sxMl09LWksd2hlLmVsZW1lbnRzWzEyXT1pLHM9LWEqci5hc3BlY3QrbyxsPWEqci5hc3BlY3Qrbyx5MS5lbGVtZW50c1swXT0yKnIubmVhci8obC1zKSx5MS5lbGVtZW50c1s4XT0obCtzKS8obC1zKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KHkxKSxzPS1hKnIuYXNwZWN0LW8sbD1hKnIuYXNwZWN0LW8seTEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseTEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weSh5MSl9dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoU2hlKSx0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseSh3aGUpfX0sbU09Y2xhc3N7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1NaGUoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7bGV0IHI9TWhlKCk7dD0oci10aGlzLm9sZFRpbWUpLzFlMyx0aGlzLm9sZFRpbWU9cix0aGlzLmVsYXBzZWRUaW1lKz10fXJldHVybiB0fX07ZnVuY3Rpb24gTWhlKCl7cmV0dXJuKHR5cGVvZiBwZXJmb3JtYW5jZT09InVuZGVmaW5lZCI/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCl9dmFyIHYxPW5ldyBqLEVoZT1uZXcgeWksYzByPW5ldyBqLHgxPW5ldyBqLGNodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiLHRoaXMuY29udGV4dD16aHQuZ2V0Q29udGV4dCgpLHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCx0aGlzLnRpbWVEZWx0YT0wLHRoaXMuX2Nsb2NrPW5ldyBtTX1nZXRJbnB1dCgpe3JldHVybiB0aGlzLmdhaW59cmVtb3ZlRmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbCYmKHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj1udWxsKSx0aGlzfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlcn1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbD8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj10LHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpc31nZXRNYXN0ZXJWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0TWFzdGVyVm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpO2xldCByPXRoaXMuY29udGV4dC5saXN0ZW5lcixuPXRoaXMudXA7aWYodGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh2MSxFaGUsYzByKSx4MS5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oRWhlKSxyLnBvc2l0aW9uWCl7bGV0IGk9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHYxLngsaSksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodjEueSxpKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2MS56LGkpLHIuZm9yd2FyZFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueCxpKSxyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS56LGkpLHIudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueCxpKSxyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksaSksci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi56LGkpfWVsc2Ugci5zZXRQb3NpdGlvbih2MS54LHYxLnksdjEueiksci5zZXRPcmllbnRhdGlvbih4MS54LHgxLnkseDEueixuLngsbi55LG4ueil9fSxENj1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IHI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiByLmJ1ZmZlcj10aGlzLmJ1ZmZlcixyLmxvb3A9dGhpcy5sb29wLHIubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LHIubG9vcEVuZD10aGlzLmxvb3BFbmQsci5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLHIuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPXIsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fSxiMT1uZXcgaixUaGU9bmV3IHlpLHUwcj1uZXcgaix3MT1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBENntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LHIsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9cix0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSEwJiZ0aGlzLmlzUGxheWluZz09PSExKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiMSxUaGUsdTByKSx3MS5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihUaGUpO2xldCByPXRoaXMucGFubmVyO2lmKHIucG9zaXRpb25YKXtsZXQgbj10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueCxuKSxyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LG4pLHIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLnosbiksci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueCxuKSxyLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS55LG4pLHIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLnosbil9ZWxzZSByLnNldFBvc2l0aW9uKGIxLngsYjEueSxiMS56KSxyLnNldE9yaWVudGF0aW9uKHcxLngsdzEueSx3MS56KX19LEZVPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1yLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLHI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspdCs9cltuXTtyZXR1cm4gdC9yLmxlbmd0aH19LEJVPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uO2xldCBpLG8sYTtzd2l0Y2gocil7Y2FzZSJxdWF0ZXJuaW9uIjppPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjppPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkobio1KTticmVhaztkZWZhdWx0Omk9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio1KX10aGlzLl9taXhCdWZmZXJSZWdpb249aSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LHIpe2xldCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUsbz10KmkraSxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihhPT09MCl7Zm9yKGxldCBzPTA7cyE9PWk7KytzKW5bbytzXT1uW3NdO2E9cn1lbHNle2ErPXI7bGV0IHM9ci9hO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLG8sMCxzLGkpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUocixpLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgcj10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCpyK3Isbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxzPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSl7bGV0IGw9cip0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxsLDEtbyxyKX1hPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4saSx0aGlzLl9hZGRJbmRleCpyLDEscik7Zm9yKGxldCBsPXIsYz1yK3I7bCE9PWM7KytsKWlmKG5bbF0hPT1uW2wrcl0pe3Muc2V0VmFsdWUobixpKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcscj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShyLGkpO2ZvcihsZXQgbz1uLGE9aTtvIT09YTsrK28pcltvXT1yW2krbyVuXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxyO24rKyl0aGlzLmJ1ZmZlcltuXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLHI9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbcituXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxyLG4saSxvKXtpZihpPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtyK2FdPXRbbithXX1fc2xlcnAodCxyLG4saSl7eWkuc2xlcnBGbGF0KHQscix0LHIsdCxuLGkpfV9zbGVycEFkZGl0aXZlKHQscixuLGksbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87eWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQscix0LG4pLHlpLnNsZXJwRmxhdCh0LHIsdCxyLHQsYSxpKX1fbGVycCh0LHIsbixpLG8pe2xldCBhPTEtaTtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPXIrczt0W2xdPXRbbF0qYSt0W24rc10qaX19X2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9cithO3Rbc109dFtzXSt0W24rYV0qaX19fSxGaHQ9IlxcW1xcXVxcLjpcXC8iLGgwcj1uZXcgUmVnRXhwKCJbIitGaHQrIl0iLCJnIiksQmh0PSJbXiIrRmh0KyJdIixmMHI9IlteIitGaHQucmVwbGFjZSgiXFwuIiwiIikrIl0iLHAwcj0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZDByPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLGYwciksbTByPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZzByPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLF8wcj1uZXcgUmVnRXhwKCJeIitwMHIrZDByK20wcitnMHIrIiQiKSx5MHI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0saGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1ufHxDci5wYXJzZVRyYWNrTmFtZShyKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhyLGkpfWdldFZhbHVlKHQscil7dGhpcy5iaW5kKCk7bGV0IG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dGhpcy5fYmluZGluZ3Nbbl07aSE9PXZvaWQgMCYmaS5nZXRWYWx1ZSh0LHIpfXNldFZhbHVlKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO3IhPT1uOysrcil0W3JdLnVuYmluZCgpfX0sQ3I9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMucGF0aD1yLHRoaXMucGFyc2VkUGF0aD1ufHxDci5wYXJzZVRyYWNrTmFtZShyKSx0aGlzLm5vZGU9Q3IuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxyLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IENyLkNvbXBvc2l0ZSh0LHIsbik6bmV3IENyKHQscixuKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShoMHIsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgcj1fMHIuZXhlYyh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgbj17bm9kZU5hbWU6clsyXSxvYmplY3ROYW1lOnJbM10sb2JqZWN0SW5kZXg6cls0XSxwcm9wZXJ0eU5hbWU6cls1XSxwcm9wZXJ0eUluZGV4OnJbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKGkhPT12b2lkIDAmJmkhPT0tMSl7bGV0IG89bi5ub2RlTmFtZS5zdWJzdHJpbmcoaSsxKTt5MHIuaW5kZXhPZihvKSE9PS0xJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLGkpLG4ub2JqZWN0TmFtZT1vKX1pZihuLnByb3BlcnR5TmFtZT09PW51bGx8fG4ucHJvcGVydHlOYW1lLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufXN0YXRpYyBmaW5kTm9kZSh0LHIpe2lmKCFyfHxyPT09IiJ8fHI9PT0iLiJ8fHI9PT0tMXx8cj09PXQubmFtZXx8cj09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtsZXQgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUocik7aWYobiE9PXZvaWQgMClyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtsZXQgbj1mdW5jdGlvbihvKXtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKyl7bGV0IHM9b1thXTtpZihzLm5hbWU9PT1yfHxzLnV1aWQ9PT1yKXJldHVybiBzO2xldCBsPW4ocy5jaGlsZHJlbik7aWYobClyZXR1cm4gbH1yZXR1cm4gbnVsbH0saT1uKHQuY2hpbGRyZW4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQscil7dFtyXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXRbcisrXT1uW2ldfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0W3JdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxyKX1fc2V0VmFsdWVfZGlyZWN0KHQscil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbcl19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKW5baV09dFtyKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbcl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsciksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQscil9X3NldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMubm9kZSxyPXRoaXMucGFyc2VkUGF0aCxuPXIub2JqZWN0TmFtZSxpPXIucHJvcGVydHlOYW1lLG89ci5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PUNyLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsci5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7cmV0dXJufWlmKG4pe2xldCBjPXIub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtyZXR1cm59aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufXQ9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7cmV0dXJufXQ9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKylpZih0W3VdLm5hbWU9PT1jKXtjPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih0W25dPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufXQ9dFtuXX1pZihjIT09dm9pZCAwKXtpZih0W2NdPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3JldHVybn10PXRbY119fWxldCBhPXRbaV07aWYoYT09PXZvaWQgMCl7bGV0IGM9ci5ub2RlTmFtZTtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2MrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7cmV0dXJufWxldCBzPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdC5uZWVkc1VwZGF0ZSE9PXZvaWQgMD9zPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUhPT12b2lkIDAmJihzPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgbD10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZihvIT09dm9pZCAwKXtpZihpPT09Im1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpe2lmKCF0Lmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZih0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W29dIT09dm9pZCAwJiYobz10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSl9ZWxzZXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7cmV0dXJufX1sPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1vfWVsc2UgYS5mcm9tQXJyYXkhPT12b2lkIDAmJmEudG9BcnJheSE9PXZvaWQgMD8obD10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhsPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbbF0sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2xdW3NdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fTtDci5Db21wb3NpdGU9aGh0O0NyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtDci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtDci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxDci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO0NyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgSFU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO24hPT1pOysrbil0W2FyZ3VtZW50c1tuXS51dWlkXT1uO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgcj10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiByLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtci5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gci5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aCxzLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0scD1mLnV1aWQsZD1yW3BdO2lmKGQ9PT12b2lkIDApe2Q9bCsrLHJbcF09ZCx0LnB1c2goZik7Zm9yKGxldCBnPTAsXz1hO2chPT1fOysrZylvW2ddLnB1c2gobmV3IENyKGYsbltnXSxpW2ddKSl9ZWxzZSBpZihkPGMpe3M9dFtkXTtsZXQgZz0tLWMsXz10W2ddO3JbXy51dWlkXT1kLHRbZF09XyxyW3BdPWcsdFtnXT1mO2ZvcihsZXQgeT0wLHg9YTt5IT09eDsrK3kpe2xldCBiPW9beV0sUz1iW2ddLEM9YltkXTtiW2RdPVMsQz09PXZvaWQgMCYmKEM9bmV3IENyKGYsblt5XSxpW3ldKSksYltnXT1DfX1lbHNlIHRbZF0hPT1zJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7bGV0IGw9YXJndW1lbnRzW2FdLGM9bC51dWlkLHU9cltjXTtpZih1IT09dm9pZCAwJiZ1Pj1vKXtsZXQgaD1vKyssZj10W2hdO3JbZi51dWlkXT11LHRbdV09ZixyW2NdPWgsdFtoXT1sO2ZvcihsZXQgcD0wLGQ9aTtwIT09ZDsrK3Ape2xldCBnPW5bcF0sXz1nW2hdLHk9Z1t1XTtnW3VdPV8sZ1toXT15fX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c18sYT10Lmxlbmd0aDtmb3IobGV0IHM9MCxsPWFyZ3VtZW50cy5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hcmd1bWVudHNbc10sdT1jLnV1aWQsaD1yW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIHJbdV0saDxvKXtsZXQgZj0tLW8scD10W2ZdLGQ9LS1hLGc9dFtkXTtyW3AudXVpZF09aCx0W2hdPXAscltnLnV1aWRdPWYsdFtmXT1nLHQucG9wKCk7Zm9yKGxldCBfPTAseT1pO18hPT15OysrXyl7bGV0IHg9bltfXSxiPXhbZl0sUz14W2RdO3hbaF09Yix4W2ZdPVMseC5wb3AoKX19ZWxzZXtsZXQgZj0tLWEscD10W2ZdO2Y+MCYmKHJbcC51dWlkXT1oKSx0W2hdPXAsdC5wb3AoKTtmb3IobGV0IGQ9MCxnPWk7ZCE9PWc7KytkKXtsZXQgXz1uW2RdO19baF09X1tmXSxfLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b31zdWJzY3JpYmVfKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9blt0XSxvPXRoaXMuX2JpbmRpbmdzO2lmKGkhPT12b2lkIDApcmV0dXJuIG9baV07bGV0IGE9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO2k9by5sZW5ndGgsblt0XT1pLGEucHVzaCh0KSxzLnB1c2gociksby5wdXNoKGgpO2ZvcihsZXQgZj11LHA9bC5sZW5ndGg7ZiE9PXA7KytmKXtsZXQgZD1sW2ZdO2hbZl09bmV3IENyKGQsdCxyKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IHI9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49clt0XTtpZihuIT09dm9pZCAwKXtsZXQgaT10aGlzLl9wYXRocyxvPXRoaXMuX3BhcnNlZFBhdGhzLGE9dGhpcy5fYmluZGluZ3Mscz1hLmxlbmd0aC0xLGw9YVtzXSxjPXRbc107cltjXT1uLGFbbl09bCxhLnBvcCgpLG9bbl09b1tzXSxvLnBvcCgpLGlbbl09aVtzXSxpLnBvcCgpfX19O0hVLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBmaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49bnVsbCxpPXIuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9cix0aGlzLl9sb2NhbFJvb3Q9bix0aGlzLmJsZW5kTW9kZT1pO2xldCBvPXIudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVRmZSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmdGhpcy50aW1lU2NhbGUhPT0wJiZ0aGlzLl9zdGFydFRpbWU9PT1udWxsJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LHIpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPXIsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LHIsbil7aWYodC5mYWRlT3V0KHIpLHRoaXMuZmFkZUluKHIpLG4pe2xldCBpPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9by9pLHM9aS9vO3Qud2FycCgxLGEsciksdGhpcy53YXJwKHMsMSxyKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LHIsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLHIsbil9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3M9PT1udWxsJiYocz1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytuLGNbMF09dC9hLGNbMV09ci9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxyLG4saSl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO3JldHVybn1sZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobyE9PW51bGwpe2xldCBsPSh0LW8pKm47aWYobDwwfHxuPT09MClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwscj1uKmx9cio9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBhPXRoaXMuX3VwZGF0ZVRpbWUocikscz10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYocz4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBraHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTticmVhaztjYXNlICRVOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGUoaSxzKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IHI9MDtpZih0aGlzLmVuYWJsZWQpe3I9dGhpcy53ZWlnaHQ7bGV0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobiE9PW51bGwpe2xldCBpPW4uZXZhbHVhdGUodClbMF07cio9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksaT09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1yLHJ9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgcj0wO2lmKCF0aGlzLnBhdXNlZCl7cj10aGlzLnRpbWVTY2FsZTtsZXQgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtuIT09bnVsbCYmKHIqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxyPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1yKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1yLHJ9X3VwZGF0ZVRpbWUodCl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcCxpPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9bj09PUNmZTtpZih0PT09MClyZXR1cm4gbz09PS0xP2k6YSYmKG8mMSk9PT0xP3ItaTppO2lmKG49PT1FZmUpe289PT0tMSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihpPj1yKWk9cjtlbHNlIGlmKGk8MClpPTA7ZWxzZXt0aGlzLnRpbWU9aTticmVhayB0fXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZihvPT09LTEmJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCx0aGlzLnJlcGV0aXRpb25zPT09MCxhKSk6dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zPT09MCwhMCxhKSksaT49cnx8aTwwKXtsZXQgcz1NYXRoLmZsb29yKGkvcik7aS09cipzLG8rPU1hdGguYWJzKHMpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGk9dD4wP3I6MCx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZihsPT09MSl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOnN9KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihhJiYobyYxKT09PTEpcmV0dXJuIHItaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LHIsbil7bGV0IGk9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhpLmVuZGluZ1N0YXJ0PVQxLGkuZW5kaW5nRW5kPVQxKToodD9pLmVuZGluZ1N0YXJ0PXRoaXMuemVyb1Nsb3BlQXRTdGFydD9UMTpFMTppLmVuZGluZ1N0YXJ0PUpQLHI/aS5lbmRpbmdFbmQ9dGhpcy56ZXJvU2xvcGVBdEVuZD9UMTpFMTppLmVuZGluZ0VuZD1KUCl9X3NjaGVkdWxlRmFkaW5nKHQscixuKXtsZXQgaT10aGlzLl9taXhlcixvPWkudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O2E9PT1udWxsJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09cixzWzFdPW8rdCxsWzFdPW4sdGhpc319LFZVPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQscil7bGV0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Msbz1pLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscz10Ll9pbnRlcnBvbGFudHMsbD1uLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1jW2xdO3U9PT12b2lkIDAmJih1PXt9LGNbbF09dSk7Zm9yKGxldCBoPTA7aCE9PW87KytoKXtsZXQgZj1pW2hdLHA9Zi5uYW1lLGQ9dVtwXTtpZihkIT09dm9pZCAwKSsrZC5yZWZlcmVuY2VDb3VudCxhW2hdPWQ7ZWxzZXtpZihkPWFbaF0sZCE9PXZvaWQgMCl7ZC5fY2FjaGVJbmRleD09PW51bGwmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQsbCxwKSk7Y29udGludWV9bGV0IGc9ciYmci5fcHJvcGVydHlCaW5kaW5nc1toXS5iaW5kaW5nLnBhcnNlZFBhdGg7ZD1uZXcgQlUoQ3IuY3JlYXRlKG4scCxnKSxmLlZhbHVlVHlwZU5hbWUsZi5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCksYVtoXT1kfXNbaF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZih0Ll9jYWNoZUluZGV4PT09bnVsbCl7bGV0IG49KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxpPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbaV07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LGksbil9bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTtvLnVzZUNvdW50Kys9PT0wJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTstLW8udXNlQ291bnQ9PT0wJiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCByPXQuX2NhY2hlSW5kZXg7cmV0dXJuIHIhPT1udWxsJiZyPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsbil7bGV0IGk9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3JdO2lmKGE9PT12b2lkIDApYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW3JdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49cltyLmxlbmd0aC0xXSxpPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1pLHJbaV09bixyLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtsZXQgaD1zLmFjdGlvbkJ5Um9vdCxmPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQ7ZGVsZXRlIGhbZl0sbC5sZW5ndGg9PT0wJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnJlZmVyZW5jZUNvdW50PT09MCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2FkZEluYWN0aXZlQmluZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3MsYT1pW3JdO2E9PT12b2lkIDAmJihhPXt9LGlbcl09YSksYVtuXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQsbz1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1hW2ldLGw9cltyLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLHJbY109bCxyLnBvcCgpLGRlbGV0ZSBzW29dLE9iamVjdC5rZXlzKHMpLmxlbmd0aD09PTAmJmRlbGV0ZSBhW2ldfV9sZW5kQmluZGluZyh0KXtsZXQgcj10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMscj10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLG49dFtyXTtyZXR1cm4gbj09PXZvaWQgMCYmKG49bmV3IFM2KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PXIsdFtyXT1uKSxufV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgcj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89cltpXTt0Ll9fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9fY2FjaGVJbmRleD1uLHJbbl09b31jbGlwQWN0aW9uKHQscixuKXtsZXQgaT1yfHx0aGlzLl9yb290LG89aS51dWlkLGE9dHlwZW9mIHQ9PSJzdHJpbmciP1ExLmZpbmRCeU5hbWUoaSx0KTp0LHM9YSE9PW51bGw/YS51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW3NdLGM9bnVsbDtpZihuPT09dm9pZCAwJiYoYSE9PW51bGw/bj1hLmJsZW5kTW9kZTpuPSRVKSxsIT09dm9pZCAwKXtsZXQgaD1sLmFjdGlvbkJ5Um9vdFtvXTtpZihoIT09dm9pZCAwJiZoLmJsZW5kTW9kZT09PW4pcmV0dXJuIGg7Yz1sLmtub3duQWN0aW9uc1swXSxhPT09bnVsbCYmKGE9Yy5fY2xpcCl9aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGZodCh0aGlzLGEscixuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUscyxvKSx1fWV4aXN0aW5nQWN0aW9uKHQscil7bGV0IG49cnx8dGhpcy5fcm9vdCxpPW4udXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9RMS5maW5kQnlOYW1lKG4sdCk6dCxhPW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO3JldHVybiBzIT09dm9pZCAwJiZzLmFjdGlvbkJ5Um9vdFtpXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxyPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgbj1yLTE7bj49MDstLW4pdFtuXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCxvPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09bjsrK2MpcltjXS5fdXBkYXRlKGksdCxvLGEpO2xldCBzPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylzW2NdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9hY3Rpb25zLmxlbmd0aDtyKyspdGhpcy5fYWN0aW9uc1tyXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPWlbbl07aWYobyE9PXZvaWQgMCl7bGV0IGE9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWFbc107dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9cltyLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxyW3VdPWgsci5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSBpW25dfX11bmNhY2hlUm9vdCh0KXtsZXQgcj10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgYSBpbiBuKXtsZXQgcz1uW2FdLmFjdGlvbkJ5Um9vdCxsPXNbcl07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPWlbcl07aWYobyE9PXZvaWQgMClmb3IobGV0IGEgaW4gbyl7bGV0IHM9b1thXTtzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHMpfX11bmNhY2hlQWN0aW9uKHQscil7bGV0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LHIpO24hPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fTtWVS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZ009Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGdNKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0sVVU9Y2xhc3MgZXh0ZW5kcyBlbXtjb25zdHJ1Y3Rvcih0LHIsbj0xKXtzdXBlcih0LHIpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCByPXN1cGVyLmNsb25lKHQpO3JldHVybiByLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLHIubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUscn19O1VVLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBxVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPXIsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9aSx0aGlzLmNvdW50PW8sdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LHIpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPXIsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07cVUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIHBodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgSmYodCxyKSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFgzLHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fX1zZXQodCxyKXt0aGlzLnJheS5zZXQodCxyKX1zZXRGcm9tQ2FtZXJhKHQscil7ciYmci5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KHIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPXIpOnImJnIuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoci5uZWFyK3IuZmFyKS8oci5uZWFyLXIuZmFyKSkudW5wcm9qZWN0KHIpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oci5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9cik6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIityLnR5cGUpfWludGVyc2VjdE9iamVjdCh0LHI9ITAsbj1bXSl7cmV0dXJuIGRodCh0LHRoaXMsbixyKSxuLnNvcnQoQ2hlKSxufWludGVyc2VjdE9iamVjdHModCxyPSEwLG49W10pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKylkaHQodFtpXSx0aGlzLG4scik7cmV0dXJuIG4uc29ydChDaGUpLG59fTtmdW5jdGlvbiBDaGUoZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfWZ1bmN0aW9uIGRodChlLHQscixuKXtpZihlLmxheWVycy50ZXN0KHQubGF5ZXJzKSYmZS5yYXljYXN0KHQsciksbj09PSEwKXtsZXQgaT1lLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylkaHQoaVtvXSx0LHIsITApfX12YXIgX009Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPXIsdGhpcy50aGV0YT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMucGhpPXQucGhpLHRoaXMudGhldGE9dC50aGV0YSx0aGlzfW1ha2VTYWZlKCl7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KDFlLTYsTWF0aC5taW4oTWF0aC5QSS0xZS02LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtyKnIrbipuKSx0aGlzLnJhZGl1cz09PTA/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFpvKHIvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LG1odD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTEscj0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPXIsdGhpcy55PW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxyLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PXIsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxBaGU9bmV3IEx0LCQwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEx0KDEvMCwxLzApLHI9bmV3IEx0KC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1BaGUuY29weShyKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBBaGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19OyQwLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIFBoZT1uZXcgaixZVj1uZXcgaixHVT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfXNldCh0LHIpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodCksdGhpcy5lbmQuY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0LnN0YXJ0KSx0aGlzLmVuZC5jb3B5KHQuZW5kKSx0aGlzfWdldENlbnRlcih0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX1kZWx0YSh0KXtyZXR1cm4gdC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfWRpc3RhbmNlU3EoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCl9ZGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX1hdCh0LHIpe3JldHVybiB0aGlzLmRlbHRhKHIpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscil7UGhlLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxZVi5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBuPVlWLmRvdChZViksbz1ZVi5kb3QoUGhlKS9uO3JldHVybiByJiYobz1abyhvLDAsMSkpLG99Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIsbil7bGV0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscik7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxJaGU9bmV3IGosZ2h0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1yO2xldCBuPW5ldyBQZSxpPVswLDAsMCwwLDAsMSwwLDAsMCwxLDAsMSwwLDAsMCwtMSwwLDEsMCwwLDAsMCwxLDEsMCwwLDAsMCwtMSwxXTtmb3IobGV0IGE9MCxzPTEsbD0zMjthPGw7YSsrLHMrKyl7bGV0IGM9YS9sKk1hdGguUEkqMix1PXMvbCpNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKGMpLE1hdGguc2luKGMpLDEsTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMuY29uZT1uZXcgQWEobixvKSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IHQ9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFlMyxyPXQqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChyLHIsdCksSWhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksdGhpcy5jb25lLmxvb2tBdChJaGUpLHRoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19LE8wPW5ldyBqLGpWPW5ldyBNZSxidXQ9bmV3IE1lLFdVPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9ZXBlKHQpLG49bmV3IFBlLGk9W10sbz1bXSxhPW5ldyBuZSgwLDAsMSkscz1uZXcgbmUoMCwxLDApO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgdT1yW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksby5wdXNoKGEucixhLmcsYS5iKSxvLnB1c2gocy5yLHMuZyxzLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShvLDMpKTtsZXQgbD1uZXcgR2koe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIobixsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1yLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7YnV0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxhPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107cy5wYXJlbnQmJnMucGFyZW50LmlzQm9uZSYmKGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSxPMC54LE8wLnksTzAueiksalYubXVsdGlwbHlNYXRyaWNlcyhidXQscy5wYXJlbnQubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSsxLE8wLngsTzAueSxPMC56KSxhKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIGVwZShlKXtsZXQgdD1bXTtlJiZlLmlzQm9uZSYmdC5wdXNoKGUpO2ZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaC5hcHBseSh0LGVwZShlLmNoaWxkcmVuW3JdKSk7cmV0dXJuIHR9dmFyIF9odD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1uZXcgajAociw0LDIpLG89bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihpLG8pLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5jb2xvciE9PXZvaWQgMD90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSx2MHI9bmV3IGosTGhlPW5ldyBuZSxraGU9bmV3IG5lLHlodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2xldCBpPW5ldyBXMChyKTtpLnJvdGF0ZVkoTWF0aC5QSSouNSksdGhpcy5tYXRlcmlhbD1uZXcgc2goe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHRoaXMuY29sb3I9PT12b2lkIDAmJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksYT1uZXcgRmxvYXQzMkFycmF5KG8uY291bnQqMyk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoYSwzKSksdGhpcy5hZGQobmV3IHRpKGksdGhpcy5tYXRlcmlhbCkpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodGhpcy5jb2xvciE9PXZvaWQgMCl0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2xldCByPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0xoZS5jb3B5KHRoaXMubGlnaHQuY29sb3IpLGtoZS5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgbj0wLGk9ci5jb3VudDtuPGk7bisrKXtsZXQgbz1uPGkvMj9MaGU6a2hlO3Iuc2V0WFlaKG4sby5yLG8uZyxvLmIpfXIubmVlZHNVcGRhdGU9ITB9dC5sb29rQXQodjByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSl9fSxZVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBuZShuKSxpPW5ldyBuZShpKTtsZXQgbz1yLzIsYT10L3Iscz10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLHA9MCxkPS1zO2Y8PXI7ZisrLGQrPWEpe2wucHVzaCgtcywwLGQscywwLGQpLGwucHVzaChkLDAsLXMsZCwwLHMpO2xldCBnPWY9PT1vP246aTtnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zfWxldCB1PW5ldyBQZTt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShjLDMpKTtsZXQgaD1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX0sdmh0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xMCxyPTE2LG49OCxpPTY0LG89NDQ3MzkyNCxhPTg5NDc4NDgpe289bmV3IG5lKG8pLGE9bmV3IG5lKGEpO2xldCBzPVtdLGw9W107Zm9yKGxldCBoPTA7aDw9cjtoKyspe2xldCBmPWgvciooTWF0aC5QSSoyKSxwPU1hdGguc2luKGYpKnQsZD1NYXRoLmNvcyhmKSp0O3MucHVzaCgwLDAsMCkscy5wdXNoKHAsMCxkKTtsZXQgZz1oJjE/bzphO2wucHVzaChnLnIsZy5nLGcuYiksbC5wdXNoKGcucixnLmcsZy5iKX1mb3IobGV0IGg9MDtoPD1uO2grKyl7bGV0IGY9aCYxP286YSxwPXQtdC9uKmg7Zm9yKGxldCBkPTA7ZDxpO2QrKyl7bGV0IGc9ZC9pKihNYXRoLlBJKjIpLF89TWF0aC5zaW4oZykqcCx5PU1hdGguY29zKGcpKnA7cy5wdXNoKF8sMCx5KSxsLnB1c2goZi5yLGYuZyxmLmIpLGc9KGQrMSkvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwLHMucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKX19bGV0IGM9bmV3IFBlO2Muc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKGwsMykpO2xldCB1PW5ldyBHaSh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihjLHUpLHRoaXMudHlwZT0iUG9sYXJHcmlkSGVscGVyIn19LFJoZT1uZXcgaixYVj1uZXcgaixOaGU9bmV3IGoseGh0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4scj09PXZvaWQgMCYmKHI9MSk7bGV0IGk9bmV3IFBlO2kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFstcixyLDAscixyLDAsciwtciwwLC1yLC1yLDAsLXIsciwwXSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFBlLGkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7UmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSxYVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLE5oZS5zdWJWZWN0b3JzKFhWLFJoZSksdGhpcy5saWdodFBsYW5lLmxvb2tBdChYViksdGhpcy5jb2xvciE9PXZvaWQgMD8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQoWFYpLHRoaXMudGFyZ2V0TGluZS5zY2FsZS56PU5oZS5sZW5ndGgoKX19LCRWPW5ldyBqLF9pPW5ldyBSMSxiaHQ9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1uZXcgUGUsbj1uZXcgR2koe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxvPVtdLGE9e30scz1uZXcgbmUoMTY3NTUyMDApLGw9bmV3IG5lKDE2NzExNjgwKSxjPW5ldyBuZSg0Mzc3NSksdT1uZXcgbmUoMTY3NzcyMTUpLGg9bmV3IG5lKDMzNTU0NDMpO2YoIm4xIiwibjIiLHMpLGYoIm4yIiwibjQiLHMpLGYoIm40IiwibjMiLHMpLGYoIm4zIiwibjEiLHMpLGYoImYxIiwiZjIiLHMpLGYoImYyIiwiZjQiLHMpLGYoImY0IiwiZjMiLHMpLGYoImYzIiwiZjEiLHMpLGYoIm4xIiwiZjEiLHMpLGYoIm4yIiwiZjIiLHMpLGYoIm4zIiwiZjMiLHMpLGYoIm40IiwiZjQiLHMpLGYoInAiLCJuMSIsbCksZigicCIsIm4yIixsKSxmKCJwIiwibjMiLGwpLGYoInAiLCJuNCIsbCksZigidTEiLCJ1MiIsYyksZigidTIiLCJ1MyIsYyksZigidTMiLCJ1MSIsYyksZigiYyIsInQiLHUpLGYoInAiLCJjIixoKSxmKCJjbjEiLCJjbjIiLGgpLGYoImNuMyIsImNuNCIsaCksZigiY2YxIiwiY2YyIixoKSxmKCJjZjMiLCJjZjQiLGgpO2Z1bmN0aW9uIGYoZCxnLF8pe3AoZCxfKSxwKGcsXyl9ZnVuY3Rpb24gcChkLGcpe2kucHVzaCgwLDAsMCksby5wdXNoKGcucixnLmcsZy5iKSxhW2RdPT09dm9pZCAwJiYoYVtkXT1bXSksYVtkXS5wdXNoKGkubGVuZ3RoLzMtMSl9ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksci5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSksc3VwZXIocixuKSx0aGlzLnR5cGU9IkNhbWVyYUhlbHBlciIsdGhpcy5jYW1lcmE9dCx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5wb2ludE1hcD1hLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeSxyPXRoaXMucG9pbnRNYXAsbj0xLGk9MTtfaS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSxQaSgiYyIscix0LF9pLDAsMCwtMSksUGkoInQiLHIsdCxfaSwwLDAsMSksUGkoIm4xIixyLHQsX2ksLW4sLWksLTEpLFBpKCJuMiIscix0LF9pLG4sLWksLTEpLFBpKCJuMyIscix0LF9pLC1uLGksLTEpLFBpKCJuNCIscix0LF9pLG4saSwtMSksUGkoImYxIixyLHQsX2ksLW4sLWksMSksUGkoImYyIixyLHQsX2ksbiwtaSwxKSxQaSgiZjMiLHIsdCxfaSwtbixpLDEpLFBpKCJmNCIscix0LF9pLG4saSwxKSxQaSgidTEiLHIsdCxfaSxuKi43LGkqMS4xLC0xKSxQaSgidTIiLHIsdCxfaSwtbiouNyxpKjEuMSwtMSksUGkoInUzIixyLHQsX2ksMCxpKjIsLTEpLFBpKCJjZjEiLHIsdCxfaSwtbiwwLDEpLFBpKCJjZjIiLHIsdCxfaSxuLDAsMSksUGkoImNmMyIscix0LF9pLDAsLWksMSksUGkoImNmNCIscix0LF9pLDAsaSwxKSxQaSgiY24xIixyLHQsX2ksLW4sMCwtMSksUGkoImNuMiIscix0LF9pLG4sMCwtMSksUGkoImNuMyIscix0LF9pLDAsLWksLTEpLFBpKCJjbjQiLHIsdCxfaSwwLGksLTEpLHQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19O2Z1bmN0aW9uIFBpKGUsdCxyLG4saSxvLGEpeyRWLnNldChpLG8sYSkudW5wcm9qZWN0KG4pO2xldCBzPXRbZV07aWYocyE9PXZvaWQgMCl7bGV0IGw9ci5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKWwuc2V0WFlaKHNbY10sJFYueCwkVi55LCRWLnopfX12YXIgS1Y9bmV3IHRhLHlNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgRmxvYXQzMkFycmF5KDgqMyksbz1uZXcgUGU7by5zZXRJbmRleChuZXcgSmUobiwxKSksby5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoaSwzKSksc3VwZXIobyxuZXcgR2koe2NvbG9yOnIsdG9uZU1hcHBlZDohMX0pKSx0aGlzLm9iamVjdD10LHRoaXMudHlwZT0iQm94SGVscGVyIix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX11cGRhdGUodCl7aWYodCE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKSx0aGlzLm9iamVjdCE9PXZvaWQgMCYmS1Yuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksS1YuaXNFbXB0eSgpKXJldHVybjtsZXQgcj1LVi5taW4sbj1LVi5tYXgsaT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sbz1pLmFycmF5O29bMF09bi54LG9bMV09bi55LG9bMl09bi56LG9bM109ci54LG9bNF09bi55LG9bNV09bi56LG9bNl09ci54LG9bN109ci55LG9bOF09bi56LG9bOV09bi54LG9bMTBdPXIueSxvWzExXT1uLnosb1sxMl09bi54LG9bMTNdPW4ueSxvWzE0XT1yLnosb1sxNV09ci54LG9bMTZdPW4ueSxvWzE3XT1yLnosb1sxOF09ci54LG9bMTldPXIueSxvWzIwXT1yLnosb1syMV09bi54LG9bMjJdPXIueSxvWzIzXT1yLnosaS5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMub2JqZWN0PXQsdGhpcy51cGRhdGUoKSx0aGlzfWNvcHkodCl7cmV0dXJuIEFhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX0sd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IHI9dGhpcy5ib3g7ci5pc0VtcHR5KCl8fChyLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxyLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCkpfX0sU2h0PWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyPTEsbj0xNjc3Njk2MCl7bGV0IGk9bixvPVsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSxhPW5ldyBQZTthLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSxhLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHN1cGVyKGEsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQbGFuZUhlbHBlciIsdGhpcy5wbGFuZT10LHRoaXMuc2l6ZT1yO2xldCBzPVsxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwtMSwxLDEsLTEsMV0sbD1uZXcgUGU7bC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksbC5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzLmFkZChuZXcgdGkobCxuZXcgc2goe2NvbG9yOmksb3BhY2l0eTouMix0cmFuc3BhcmVudDohMCxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITF9KSkpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPS10aGlzLnBsYW5lLmNvbnN0YW50O01hdGguYWJzKHIpPDFlLTgmJihyPTFlLTgpLHRoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsciksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPXI8MD9JaTpJMSx0aGlzLmxvb2tBdCh0aGlzLnBsYW5lLm5vcm1hbCksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fSxEaGU9bmV3IGosWlYsd3V0LE1odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IGooMCwwLDEpLHI9bmV3IGooMCwwLDApLG49MSxpPTE2Nzc2OTYwLG89biouMixhPW8qLjIpe3N1cGVyKCksdGhpcy50eXBlPSJBcnJvd0hlbHBlciIsWlY9PT12b2lkIDAmJihaVj1uZXcgUGUsWlYuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDEsMF0sMykpLHd1dD1uZXcgb20oMCwuNSwxLDUsMSksd3V0LnRyYW5zbGF0ZSgwLC0uNSwwKSksdGhpcy5wb3NpdGlvbi5jb3B5KHIpLHRoaXMubGluZT1uZXcgY2goWlYsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5saW5lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5saW5lKSx0aGlzLmNvbmU9bmV3IHRpKHd1dCxuZXcgc2goe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4sbyxhKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle0RoZS5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7bGV0IHI9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoRGhlLHIpfX1zZXRMZW5ndGgodCxyPXQqLjIsbj1yKi4yKXt0aGlzLmxpbmUuc2NhbGUuc2V0KDEsTWF0aC5tYXgoMWUtNCx0LXIpLDEpLHRoaXMubGluZS51cGRhdGVNYXRyaXgoKSx0aGlzLmNvbmUuc2NhbGUuc2V0KG4scixuKSx0aGlzLmNvbmUucG9zaXRpb24ueT10LHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKX1zZXRDb2xvcih0KXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpLHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0LCExKSx0aGlzLmxpbmUuY29weSh0LmxpbmUpLHRoaXMuY29uZS5jb3B5KHQuY29uZSksdGhpc319LHZNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xKXtsZXQgcj1bMCwwLDAsdCwwLDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwwLHRdLG49WzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSxpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShuLDMpKTtsZXQgbz1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LHIsbil7bGV0IGk9bmV3IG5lLG89dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkobywwKSxpLnRvQXJyYXkobywzKSxpLnNldChyKSxpLnRvQXJyYXkobyw2KSxpLnRvQXJyYXkobyw5KSxpLnNldChuKSxpLnRvQXJyYXkobywxMiksaS50b0FycmF5KG8sMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19LEVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBuZSx0aGlzLnN1YlBhdGhzPVtdLHRoaXMuY3VycmVudFBhdGg9bnVsbH1tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aD1uZXcgcTEsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsciksdGhpc31saW5lVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxyKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxyLG4saSxvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9dG9TaGFwZXModCxyKXtmdW5jdGlvbiBuKHgpe2xldCBiPVtdO2ZvcihsZXQgUz0wLEM9eC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9eFtTXSxrPW5ldyBLYztrLmN1cnZlcz1QLmN1cnZlcyxiLnB1c2goayl9cmV0dXJuIGJ9ZnVuY3Rpb24gaSh4LGIpe2xldCBTPWIubGVuZ3RoLEM9ITE7Zm9yKGxldCBQPVMtMSxrPTA7azxTO1A9aysrKXtsZXQgTz1iW1BdLEQ9YltrXSxCPUQueC1PLngsST1ELnktTy55O2lmKE1hdGguYWJzKEkpPk51bWJlci5FUFNJTE9OKXtpZihJPDAmJihPPWJba10sQj0tQixEPWJbUF0sST0tSSkseC55PE8ueXx8eC55PkQueSljb250aW51ZTtpZih4Lnk9PT1PLnkpe2lmKHgueD09PU8ueClyZXR1cm4hMH1lbHNle2xldCBMPUkqKHgueC1PLngpLUIqKHgueS1PLnkpO2lmKEw9PT0wKXJldHVybiEwO2lmKEw8MCljb250aW51ZTtDPSFDfX1lbHNle2lmKHgueSE9PU8ueSljb250aW51ZTtpZihELng8PXgueCYmeC54PD1PLnh8fE8ueDw9eC54JiZ4Lng8PUQueClyZXR1cm4hMH19cmV0dXJuIEN9bGV0IG89WmMuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtpZihyPT09ITApcmV0dXJuIG4oYSk7bGV0IHMsbCxjLHU9W107aWYoYS5sZW5ndGg9PT0xKXJldHVybiBsPWFbMF0sYz1uZXcgS2MsYy5jdXJ2ZXM9bC5jdXJ2ZXMsdS5wdXNoKGMpLHU7bGV0IGg9IW8oYVswXS5nZXRQb2ludHMoKSk7aD10PyFoOmg7bGV0IGY9W10scD1bXSxkPVtdLGc9MCxfO3BbZ109dm9pZCAwLGRbZ109W107Zm9yKGxldCB4PTAsYj1hLmxlbmd0aDt4PGI7eCsrKWw9YVt4XSxfPWwuZ2V0UG9pbnRzKCkscz1vKF8pLHM9dD8hczpzLHM/KCFoJiZwW2ddJiZnKysscFtnXT17czpuZXcgS2MscDpffSxwW2ddLnMuY3VydmVzPWwuY3VydmVzLGgmJmcrKyxkW2ddPVtdKTpkW2ddLnB1c2goe2g6bCxwOl9bMF19KTtpZighcFswXSlyZXR1cm4gbihhKTtpZihwLmxlbmd0aD4xKXtsZXQgeD0hMSxiPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKylmW1NdPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9ZFtTXTtmb3IobGV0IGs9MDtrPFAubGVuZ3RoO2srKyl7bGV0IE89UFtrXSxEPSEwO2ZvcihsZXQgQj0wO0I8cC5sZW5ndGg7QisrKWkoTy5wLHBbQl0ucCkmJihTIT09QiYmYi5wdXNoKHtmcm9tczpTLHRvczpCLGhvbGU6a30pLEQ/KEQ9ITEsZltCXS5wdXNoKE8pKTp4PSEwKTtEJiZmW1NdLnB1c2goTyl9fWIubGVuZ3RoPjAmJih4fHwoZD1mKSl9bGV0IHk7Zm9yKGxldCB4PTAsYj1wLmxlbmd0aDt4PGI7eCsrKXtjPXBbeF0ucyx1LnB1c2goYykseT1kW3hdO2ZvcihsZXQgUz0wLEM9eS5sZW5ndGg7UzxDO1MrKyljLmhvbGVzLnB1c2goeVtTXS5oKX1yZXR1cm4gdX19LHJwZT1uZXcgRmxvYXQzMkFycmF5KDEpLHgwcj1uZXcgSW50MzJBcnJheShycGUuYnVmZmVyKSxUaHQ9Y2xhc3N7c3RhdGljIHRvSGFsZkZsb2F0KHQpe3Q+NjU1MDQmJihjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LiIpLHQ9NjU1MDQpLHJwZVswXT10O2xldCByPXgwclswXSxuPXI+PjE2JjMyNzY4LGk9cj4+MTImMjA0NyxvPXI+PjIzJjI1NTtyZXR1cm4gbzwxMDM/bjpvPjE0Mj8obnw9MzE3NDQsbnw9KG89PTI1NT8wOjEpJiZyJjgzODg2MDcsbik6bzwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1vKSsoaT4+MTEzLW8mMSksbik6KG58PW8tMTEyPDwxMHxpPj4xLG4rPWkmMSxuKX19LGIwcj0wLHcwcj0xLFMwcj0wLE0wcj0xLEUwcj0yO2Z1bmN0aW9uIFQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGV9ZnVuY3Rpb24gQzByKGU9W10pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksZS5pc011bHRpTWF0ZXJpYWw9ITAsZS5tYXRlcmlhbHM9ZSxlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xpY2UoKX0sZX1mdW5jdGlvbiBBMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIFAwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKSxuZXcgb00oZSl9ZnVuY3Rpb24gSTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIiksbmV3IGltKGUsdCl9ZnVuY3Rpb24gTDByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBrMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIFIwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIE4wcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IGooZSx0LHIpfWZ1bmN0aW9uIEQwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IEplKGUsdCkuc2V0VXNhZ2UoWTMpfWZ1bmN0aW9uIE8wcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgY1UoZSx0KX1mdW5jdGlvbiB6MHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBGMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OENsYW1wZWRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBoVShlLHQpfWZ1bmN0aW9uIEIwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIEgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3ICQzKGUsdCl9ZnVuY3Rpb24gVjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHBVKGUsdCl9ZnVuY3Rpb24gVTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgSzMoZSx0KX1mdW5jdGlvbiBxMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHhlKGUsdCl9ZnVuY3Rpb24gRzByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBtVShlLHQpfWZzLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZnMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldFBvaW50PXQsZX07cTEucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKGUpfTtmdW5jdGlvbiBXMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIiksbmV3IHZNKGUpfWZ1bmN0aW9uIFkwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IHlNKGUsdCl9ZnVuY3Rpb24gajByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRWRnZXNIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkVkZ2VzR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHM2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfVlVLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O1dVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07ZnVuY3Rpb24gWDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBBYShuZXcgZDYoZS5nZW9tZXRyeSksbmV3IEdpKHtjb2xvcjp0IT09dm9pZCAwP3Q6MTY3NzcyMTV9KSl9ZWEucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxkTS5leHRyYWN0VXJsQmFzZShlKX07ZWEuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uICQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLiIpLG5ldyBKYyhlKX1mdW5jdGlvbiBLMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpLG5ldyBDVShlKX0kMC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07JDAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTskMC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07JDAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKGUpfTt0YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07dGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTt0YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O3RhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07WmYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O04xLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KGUpfTtHVS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O2tpLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O2tpLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtraS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07TWUucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24oZSl9O01lLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O01lLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgaigpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07TWUucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oZSl9O01lLnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksZS50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O01lLnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUoZSx0LG4scixpLG8pfTtNZS5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KGUpLmludmVydCgpfTskYy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKGUpfTt5aS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLGUuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTt5aS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUoZSl9O0pmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O29pLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtvaS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChlLHQpfTtvaS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChlKX07b2kucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwoZSl9O29pLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKGUpfTtvaS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLG9pLmdldEJhcnljb29yZChlLHQscixuLGkpfTtvaS5ub3JtYWw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxvaS5nZXROb3JtYWwoZSx0LHIsbil9O0tjLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKGUpfTtLYy5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaGgodGhpcyxlKX07S2MucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgWTAodGhpcyxlKX07THQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQscil9O0x0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07THQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpfTtqLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKGUpfTtqLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl9O2oucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtqLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtqLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07ai5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2VuLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtlbi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O29yLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUoZSl9O29yLnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtvci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsZSl9O29yLnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3IucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPWV9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTt0aS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksQWZlfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7YU0ucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtVaS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihlLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2wucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9ZX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1lfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1lfX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9ZX19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWV9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9ZX19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWV9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPWV9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9ZX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9ZX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmUucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09WTN9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShZMyl9fX0pO0plLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKGU9PT0hMD9ZMzpXMyksdGhpc307SmUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSmUucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07UGUucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChlKX07UGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShlLG5ldyBKZShhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOmU9PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTtQZS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24oZSx0LHIpe3IhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChlLHQpfTtQZS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtQZS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtQZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUoZSl9O1BlLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7ZW0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O2VtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07aGgucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2hoLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3EwLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Z00ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWkucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBuZX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9ZT09PUFodH19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9ZX19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsaC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWV9fX0pO3JuLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihlLHQscixuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQoZSksdGhpcy5jbGVhcih0LHIsbil9O3JuLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3AoZSl9O3JuLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9O3JuLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfTtybi5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259O3JuLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX07cm4ucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QoZSl9O3JuLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocm4ucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPWV9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPWV9fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz1lPT09ITA/V246UWR9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYZmUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO2Z1bmN0aW9uIFowcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLiIpLG5ldyBRMyhlLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPWV9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9ZX19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZX19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZX19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PWV9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PWV9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PWV9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PWV9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1lfX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lfX19KTtENi5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRFUoKS5sb2FkKGUsZnVuY3Rpb24obil7dC5zZXRCdWZmZXIobil9KSx0aGlzfTtGVS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O0ozLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKGUsdCl9O0ozLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKGUsdCxyLG4pfTtLZi5jcm9zc09yaWdpbj12b2lkIDA7S2YubG9hZFRleHR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgQVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCBpPW5ldyBUVTtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPWkubG9hZChlLHIsdm9pZCAwLG4pO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07S2YubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O2Z1bmN0aW9uIEowcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX1mdW5jdGlvbiBRMHIoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuIil9dmFyIHRfcj17Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGF0dGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9fTtmdW5jdGlvbiBlX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfWZ1bmN0aW9uIHJfcigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcyIpLG5ldyBQZX1mdW5jdGlvbiBuX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gaV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyIpfWZ1bmN0aW9uIG9fcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBhX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4iKX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246alV9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPWpVKTt2YXIgbnBlPXt0eXBlOiJjaGFuZ2UifSxIaHQ9e3R5cGU6InN0YXJ0In0saXBlPXt0eXBlOiJlbmQifSxKVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSxyPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLHI9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9cix0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgaix0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6IkFycm93TGVmdCIsVVA6IkFycm93VXAiLFJJR0hUOiJBcnJvd1JpZ2h0IixCT1RUT006IkFycm93RG93biJ9LHRoaXMubW91c2VCdXR0b25zPXtMRUZUOkswLlJPVEFURSxNSURETEU6SzAuRE9MTFksUklHSFQ6SzAuUEFOfSx0aGlzLnRvdWNoZXM9e09ORTpaMC5ST1RBVEUsVFdPOlowLkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnRoZXRhfSx0aGlzLmdldERpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0LnBvc2l0aW9uLmRpc3RhbmNlVG8odGhpcy50YXJnZXQpfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKG50KXtudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmciksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KG5wZSksbi51cGRhdGUoKSxvPWkuTk9ORX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGosQ3Q9bmV3IHlpKCkuc2V0RnJvbVVuaXRWZWN0b3JzKHQudXAsbmV3IGooMCwxLDApKSxXdD1DdC5jbG9uZSgpLmludmVydCgpLGZlPW5ldyBqLGF0PW5ldyB5aSxzZT0yKk1hdGguUEk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IENlPW4ub2JqZWN0LnBvc2l0aW9uO250LmNvcHkoQ2UpLnN1YihuLnRhcmdldCksbnQuYXBwbHlRdWF0ZXJuaW9uKEN0KSxzLnNldEZyb21WZWN0b3IzKG50KSxuLmF1dG9Sb3RhdGUmJm89PT1pLk5PTkUmJkQoaygpKSxuLmVuYWJsZURhbXBpbmc/KHMudGhldGErPWwudGhldGEqbi5kYW1waW5nRmFjdG9yLHMucGhpKz1sLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihzLnRoZXRhKz1sLnRoZXRhLHMucGhpKz1sLnBoaSk7bGV0IFB0PW4ubWluQXppbXV0aEFuZ2xlLE50PW4ubWF4QXppbXV0aEFuZ2xlO3JldHVybiBpc0Zpbml0ZShQdCkmJmlzRmluaXRlKE50KSYmKFB0PC1NYXRoLlBJP1B0Kz1zZTpQdD5NYXRoLlBJJiYoUHQtPXNlKSxOdDwtTWF0aC5QST9OdCs9c2U6TnQ+TWF0aC5QSSYmKE50LT1zZSksUHQ8PU50P3MudGhldGE9TWF0aC5tYXgoUHQsTWF0aC5taW4oTnQscy50aGV0YSkpOnMudGhldGE9cy50aGV0YT4oUHQrTnQpLzI/TWF0aC5tYXgoUHQscy50aGV0YSk6TWF0aC5taW4oTnQscy50aGV0YSkpLHMucGhpPU1hdGgubWF4KG4ubWluUG9sYXJBbmdsZSxNYXRoLm1pbihuLm1heFBvbGFyQW5nbGUscy5waGkpKSxzLm1ha2VTYWZlKCkscy5yYWRpdXMqPWMscy5yYWRpdXM9TWF0aC5tYXgobi5taW5EaXN0YW5jZSxNYXRoLm1pbihuLm1heERpc3RhbmNlLHMucmFkaXVzKSksbi5lbmFibGVEYW1waW5nPT09ITA/bi50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHUsbi5kYW1waW5nRmFjdG9yKTpuLnRhcmdldC5hZGQodSksbnQuc2V0RnJvbVNwaGVyaWNhbChzKSxudC5hcHBseVF1YXRlcm5pb24oV3QpLENlLmNvcHkobi50YXJnZXQpLmFkZChudCksbi5vYmplY3QubG9va0F0KG4udGFyZ2V0KSxuLmVuYWJsZURhbXBpbmc9PT0hMD8obC50aGV0YSo9MS1uLmRhbXBpbmdGYWN0b3IsbC5waGkqPTEtbi5kYW1waW5nRmFjdG9yLHUubXVsdGlwbHlTY2FsYXIoMS1uLmRhbXBpbmdGYWN0b3IpKToobC5zZXQoMCwwLDApLHUuc2V0KDAsMCwwKSksYz0xLGh8fGZlLmRpc3RhbmNlVG9TcXVhcmVkKG4ub2JqZWN0LnBvc2l0aW9uKT5hfHw4KigxLWF0LmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+YT8obi5kaXNwYXRjaEV2ZW50KG5wZSksZmUuY29weShuLm9iamVjdC5wb3NpdGlvbiksYXQuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSxoPSExLCEwKTohMX19KCksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCksbi5fZG9tRWxlbWVudEtleUV2ZW50cyE9PW51bGwmJm4uX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpfTtsZXQgbj10aGlzLGk9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sbz1pLk5PTkUsYT0xZS02LHM9bmV3IF9NLGw9bmV3IF9NLGM9MSx1PW5ldyBqLGg9ITEsZj1uZXcgTHQscD1uZXcgTHQsZD1uZXcgTHQsZz1uZXcgTHQsXz1uZXcgTHQseT1uZXcgTHQseD1uZXcgTHQsYj1uZXcgTHQsUz1uZXcgTHQsQz1bXSxQPXt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKm4uYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIE8oKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBEKG50KXtsLnRoZXRhLT1udH1mdW5jdGlvbiBCKG50KXtsLnBoaS09bnR9bGV0IEk9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50Lm11bHRpcGx5U2NhbGFyKC1XdCksdS5hZGQobnQpfX0oKSxMPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bi5zY3JlZW5TcGFjZVBhbm5pbmc9PT0hMD9udC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDEpOihudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCxudCkpLG50Lm11bHRpcGx5U2NhbGFyKFd0KSx1LmFkZChudCl9fSgpLFI9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtsZXQgYXQ9bi5kb21FbGVtZW50O2lmKG4ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe2xldCBzZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KHNlKS5zdWIobi50YXJnZXQpO2xldCBRdD1udC5sZW5ndGgoKTtRdCo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEkoMipXdCpRdC9hdC5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxMKDIqZmUqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oSShXdCoobi5vYmplY3QucmlnaHQtbi5vYmplY3QubGVmdCkvbi5vYmplY3Quem9vbS9hdC5jbGllbnRXaWR0aCxuLm9iamVjdC5tYXRyaXgpLEwoZmUqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSxuLmVuYWJsZVBhbj0hMSl9fSgpO2Z1bmN0aW9uIEYobnQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/Yy89bnQ6bi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KG4ub2JqZWN0Lnpvb209TWF0aC5tYXgobi5taW5ab29tLE1hdGgubWluKG4ubWF4Wm9vbSxuLm9iamVjdC56b29tKm50KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLGg9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiB6KG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MqPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbS9udCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gVShudCl7Zi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBXKG50KXt4LnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIFoobnQpe2cuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gcnQobnQpe3Auc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksZC5zdWJWZWN0b3JzKHAsZikubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7bGV0IEN0PW4uZG9tRWxlbWVudDtEKDIqTWF0aC5QSSpkLngvQ3QuY2xpZW50SGVpZ2h0KSxCKDIqTWF0aC5QSSpkLnkvQ3QuY2xpZW50SGVpZ2h0KSxmLmNvcHkocCksbi51cGRhdGUoKX1mdW5jdGlvbiBvdChudCl7Yi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSxTLnN1YlZlY3RvcnMoYix4KSxTLnk+MD9GKE8oKSk6Uy55PDAmJnooTygpKSx4LmNvcHkoYiksbi51cGRhdGUoKX1mdW5jdGlvbiBzdChudCl7Xy5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSx5LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIFN0KG50KXtudC5kZWx0YVk8MD96KE8oKSk6bnQuZGVsdGFZPjAmJkYoTygpKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIGJ0KG50KXtsZXQgQ3Q9ITE7c3dpdGNoKG50LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOlIoMCxuLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5CT1RUT006UigwLC1uLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5MRUZUOlIobi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpSKC1uLmtleVBhblNwZWVkLDApLEN0PSEwO2JyZWFrfUN0JiYobnQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX1mdW5jdGlvbiBNdCgpe2lmKEMubGVuZ3RoPT09MSlmLnNldChDWzBdLnBhZ2VYLENbMF0ucGFnZVkpO2Vsc2V7bGV0IG50PS41KihDWzBdLnBhZ2VYK0NbMV0ucGFnZVgpLEN0PS41KihDWzBdLnBhZ2VZK0NbMV0ucGFnZVkpO2Yuc2V0KG50LEN0KX19ZnVuY3Rpb24gbHQoKXtpZihDLmxlbmd0aD09PTEpZy5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtnLnNldChudCxDdCl9fWZ1bmN0aW9uIEt0KCl7bGV0IG50PUNbMF0ucGFnZVgtQ1sxXS5wYWdlWCxDdD1DWzBdLnBhZ2VZLUNbMV0ucGFnZVksV3Q9TWF0aC5zcXJ0KG50Km50K0N0KkN0KTt4LnNldCgwLFd0KX1mdW5jdGlvbiBfdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVBhbiYmbHQoKX1mdW5jdGlvbiBjdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVJvdGF0ZSYmTXQoKX1mdW5jdGlvbiBYKG50KXtpZihDLmxlbmd0aD09MSlwLnNldChudC5wYWdlWCxudC5wYWdlWSk7ZWxzZXtsZXQgV3Q9YmUobnQpLGZlPS41KihudC5wYWdlWCtXdC54KSxhdD0uNSoobnQucGFnZVkrV3QueSk7cC5zZXQoZmUsYXQpfWQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApfWZ1bmN0aW9uIGV0KG50KXtpZihDLmxlbmd0aD09PTEpXy5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IEN0PWJlKG50KSxXdD0uNSoobnQucGFnZVgrQ3QueCksZmU9LjUqKG50LnBhZ2VZK0N0LnkpO18uc2V0KFd0LGZlKX15LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKX1mdW5jdGlvbiBkdChudCl7bGV0IEN0PWJlKG50KSxXdD1udC5wYWdlWC1DdC54LGZlPW50LnBhZ2VZLUN0LnksYXQ9TWF0aC5zcXJ0KFd0Kld0K2ZlKmZlKTtiLnNldCgwLGF0KSxTLnNldCgwLE1hdGgucG93KGIueS94Lnksbi56b29tU3BlZWQpKSxGKFMueSkseC5jb3B5KGIpfWZ1bmN0aW9uIHEobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUGFuJiZldChudCl9ZnVuY3Rpb24gcHQobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUm90YXRlJiZYKG50KX1mdW5jdGlvbiBodChudCl7bi5lbmFibGVkIT09ITEmJihDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUobnQucG9pbnRlcklkKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCkpLCR0KG50KSxudC5wb2ludGVyVHlwZT09PSJ0b3VjaCI/dHQobnQpOmVlKG50KSl9ZnVuY3Rpb24gd3QobnQpe24uZW5hYmxlZCE9PSExJiYobnQucG9pbnRlclR5cGU9PT0idG91Y2giPyQobnQpOkxlKG50KSl9ZnVuY3Rpb24ga3QobnQpe2hlKG50KSxDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSxuLmRpc3BhdGNoRXZlbnQoaXBlKSxvPWkuTk9ORX1mdW5jdGlvbiBpZShudCl7aGUobnQpfWZ1bmN0aW9uIGVlKG50KXtsZXQgQ3Q7c3dpdGNoKG50LmJ1dHRvbil7Y2FzZSAwOkN0PW4ubW91c2VCdXR0b25zLkxFRlQ7YnJlYWs7Y2FzZSAxOkN0PW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6Q3Q9bi5tb3VzZUJ1dHRvbnMuUklHSFQ7YnJlYWs7ZGVmYXVsdDpDdD0tMX1zd2l0Y2goQ3Qpe2Nhc2UgSzAuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO1cobnQpLG89aS5ET0xMWTticmVhaztjYXNlIEswLlJPVEFURTppZihudC5jdHJsS2V5fHxudC5tZXRhS2V5fHxudC5zaGlmdEtleSl7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1lbHNle2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9YnJlYWs7Y2FzZSBLMC5QQU46aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9ZWxzZXtpZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtaKG50KSxvPWkuUEFOfWJyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9byE9PWkuTk9ORSYmbi5kaXNwYXRjaEV2ZW50KEhodCl9ZnVuY3Rpb24gTGUobnQpe2lmKG4uZW5hYmxlZCE9PSExKXN3aXRjaChvKXtjYXNlIGkuUk9UQVRFOmlmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO3J0KG50KTticmVhaztjYXNlIGkuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO290KG50KTticmVhaztjYXNlIGkuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3N0KG50KTticmVha319ZnVuY3Rpb24gYXIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVpvb209PT0hMXx8byE9PWkuTk9ORXx8KG50LnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaEV2ZW50KEhodCksU3QobnQpLG4uZGlzcGF0Y2hFdmVudChpcGUpKX1mdW5jdGlvbiBmcihudCl7bi5lbmFibGVkPT09ITF8fG4uZW5hYmxlUGFuPT09ITF8fGJ0KG50KX1mdW5jdGlvbiB0dChudCl7c3dpdGNoKFR0KG50KSxDLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChuLnRvdWNoZXMuT05FKXtjYXNlIFowLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtNdCgpLG89aS5UT1VDSF9ST1RBVEU7YnJlYWs7Y2FzZSBaMC5QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47bHQoKSxvPWkuVE9VQ0hfUEFOO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChuLnRvdWNoZXMuVFdPKXtjYXNlIFowLkRPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47X3QoKSxvPWkuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgWjAuRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtjdCgpLG89aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uICQobnQpe3N3aXRjaChUdChudCksbyl7Y2FzZSBpLlRPVUNIX1JPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtYKG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47ZXQobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47cShudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtwdChudCksbi51cGRhdGUoKTticmVhaztkZWZhdWx0Om89aS5OT05FfX1mdW5jdGlvbiBJdChudCl7bi5lbmFibGVkIT09ITEmJm50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gJHQobnQpe0MucHVzaChudCl9ZnVuY3Rpb24gaGUobnQpe2RlbGV0ZSBQW250LnBvaW50ZXJJZF07Zm9yKGxldCBDdD0wO0N0PEMubGVuZ3RoO0N0KyspaWYoQ1tDdF0ucG9pbnRlcklkPT1udC5wb2ludGVySWQpe0Muc3BsaWNlKEN0LDEpO3JldHVybn19ZnVuY3Rpb24gVHQobnQpe2xldCBDdD1QW250LnBvaW50ZXJJZF07Q3Q9PT12b2lkIDAmJihDdD1uZXcgTHQsUFtudC5wb2ludGVySWRdPUN0KSxDdC5zZXQobnQucGFnZVgsbnQucGFnZVkpfWZ1bmN0aW9uIGJlKG50KXtsZXQgQ3Q9bnQucG9pbnRlcklkPT09Q1swXS5wb2ludGVySWQ/Q1sxXTpDWzBdO3JldHVybiBQW0N0LnBvaW50ZXJJZF19bi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyLHtwYXNzaXZlOiExfSksdGhpcy51cGRhdGUoKX19O3ZhciBGNj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgbU0sdGhpcy5fY2FudmFzU2l6ZT1udWxsLHRoaXMuX2xheWVyc0NvbmZpZz1udWxsLHRoaXMuX3J1bkNvbG9yPXR9X2lzT2JqZWN0KHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ib2JqZWN0IiYmdCE9bnVsbCYmIUFycmF5LmlzQXJyYXkodCl9X2FwcGx5RGVmYXVsdHModCxyKXtsZXQgbj17fSxpPVt0LHJdO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2ZvcihsZXQgcyBpbiBhKXtsZXQgbD1zIGluIG47dGhpcy5faXNPYmplY3QoYVtzXSk/bltzXT10aGlzLl9hcHBseURlZmF1bHRzKG5bc118fHt9LGFbc10pOmx8fChuW3NdPWFbc10pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYoISghdGhpcy5fbGF5ZXJzQ29uZmlnfHwhdGhpcy5fc2NlbmV8fCF0aGlzLl9sYXN0TWVzaCkpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyB5TSh0aGlzLl9sYXN0TWVzaCxuZXcgbmUoInJnYigwLCAwLCAyNTUpIikpO3RoaXMuX3NjZW5lLmFkZCh0KX1pZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0F4ZXMpe3ZhciByPW5ldyB2TSg1KTt0aGlzLl9zY2VuZS5hZGQocil9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxyKXt2YXIgYSxzLGwsYztpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IHEwO3ZhciBuPW5ldyB3TVt0LmNhbWVyYS5jbHNdKHQuY2FtZXJhLmZvdiwoKGE9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmEud2lkdGgpLygocz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6cy5oZWlnaHQpLHQuY2FtZXJhLm5lYXIsdC5jYW1lcmEuZmFyKTt0aGlzLl9jYW1lcmE9bix0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj12b2lkIDAsdC5jYW1lcmEucG9zaXRpb24mJih0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5wb3NpdGlvbikpLHRoaXMuaW5pdENhbWVyYUxvb2tBdD12b2lkIDAsdC5jYW1lcmEubG9va0F0JiYodGhpcy5pbml0Q2FtZXJhTG9va0F0PW5ldyBqKCkuZnJvbUFycmF5KHQuY2FtZXJhLmxvb2tBdCkpO3ZhciBpPW5ldyBKVShuLHIpO2xldCBvPWk7by5sb29rU3BlZWQ9LjQsby5tb3ZlbWVudFNwZWVkPTIwLG8ubm9GbHk9ITAsby5sb29rVmVydGljYWw9ITAsby5jb25zdHJhaW5WZXJ0aWNhbD0hMCxvLnZlcnRpY2FsTWluPTEsby52ZXJ0aWNhbE1heD0yLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IHJuKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChsPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpsLndpZHRoLChjPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpjLmhlaWdodCksdGhpcy5fcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigxNjc3NzIxNSwxKX1fY2xlYXJTY2VuZSgpe3ZhciB0O2lmKHRoaXMuX3NjZW5lKWZvcig7dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoPjA7KXRoaXMuX3NjZW5lLnJlbW92ZSgodD10aGlzLl9zY2VuZSk9PW51bGw/dm9pZCAwOnQuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3ZhciB0LHIsbjtyZXR1cm57ZmFyOih0PXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnQuZmFyLHBvc2l0aW9uOihyPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnIucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsP3ZvaWQgMDpuLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dmFyIHIsbixpLG87dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhJiYodGhpcy5fY2FtZXJhLmFzcGVjdD0oKHI9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnIud2lkdGgpLygobj10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bi5oZWlnaHQpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX3JlbmRlcmVyLnNldFNpemUoKGk9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmkud2lkdGgsKG89dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm8uaGVpZ2h0KTtsZXQgdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKGEpLHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSx0aGlzLl9jYW1lcmEpfS5iaW5kKHRoaXMpO3QoKX11cGRhdGVTY2VuZSh0LHIpe2xldCBuPXt9OyJjb25maWciaW4gdCYmdC5jb25maWcmJihuPUpTT04ucGFyc2UodC5jb25maWcpKSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImJlZm9yZVVwZGF0ZVNjZW5lIn0pO2xldCBpPXtjYW1lcmE6e2NsczoiUGVyc3BlY3RpdmVDYW1lcmEiLGZvdjo3NSxuZWFyOi4xLGZhcjoxZTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX07bj10aGlzLl9hcHBseURlZmF1bHRzKG4saSksdGhpcy5fY3JlYXRlV29ybGQobixyKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe3ZhciBuLGk7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjsobj10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fG4ucmVzZXQoKTtsZXQgcjshdCYmdGhpcy5fbGFzdE1lc2gmJihyPXRoaXMuX2xhc3RNZXNoKSxyJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChyKSx0aGlzLl9sYXN0TWVzaD1yKSwoaT10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fGkudXBkYXRlKCl9X2NyZWF0ZUdlb21ldHJ5KHQscil7bGV0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixyKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4scil9X2NyZWF0ZVBvaW50Q2xvdWQodCxyKXt2YXIgaDtsZXQgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnMsbz17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9vLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpvLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2xldCBhPXRoaXMuX2FwcGx5RGVmYXVsdHMocixvKSxzPW5ldyBQZSxsPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKHMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGwsMykpLGkmJmkubGVuZ3RoPT1uLmxlbmd0aCl7bGV0IGY9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXT1mW3BdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShmLDMpKX12YXIgYz1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLHU9bmV3IGltKHMsYyk7KGg9dGhpcy5fc2NlbmUpPT1udWxsfHxoLmFkZCh1KSx0aGlzLl9sYXN0TWVzaD11fXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5mYXI9cix0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdGhpcy5fY2FtZXJhQ29udHJvbHMmJih0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7dmFyIHAsZCxnO2xldCBuPW5ldyB0YSxpPW5ldyBqLG89bmV3IGo7bi5zZXRGcm9tT2JqZWN0KHQpLG4uZ2V0Q2VudGVyKGkpLG4uZ2V0U2l6ZShvKTtsZXQgYT1NYXRoLm1heChvLngsby55LG8ueikscz0oKHA9dGhpcy5fY2FtZXJhKT09bnVsbD92b2lkIDA6cC5mb3YpKihNYXRoLlBJLzE4MCksbD1NYXRoLmFicyhhLygyKk1hdGgudGFuKHMvMikpKSoxLjI1LGM9bi5taW4ueix1PWM8MD8tYytsOmwtYyxoPShkPXRoaXMuaW5pdENhbWVyYVBvc2l0aW9uKSE9bnVsbD9kOm5ldyBqKGkueCxpLnksbCksZj0oZz10aGlzLmluaXRDYW1lcmFMb29rQXQpIT1udWxsP2c6aTt0aGlzLnNldENhbWVyYVZpZXdwb2ludChoLHUqMyxmKX1fY3JlYXRlTWVzaCh0LHIpe3ZhciBmO2xldCBuPXQudmVydGljZXMsaT10LmZhY2VzLG89dC5jb2xvcnMsYT10aGlzLl9hcHBseURlZmF1bHRzKHIse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSkscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKTtsZXQgYz1uZXcgVWludDE2QXJyYXkoaS5mbGF0KCkpO2lmKG8mJm8ubGVuZ3RoKXtsZXQgcD1vLmZsYXQoKTtmb3IobGV0IGQ9MDtkPHAubGVuZ3RoO2QrKylwW2RdPXBbZF0vMjU1O3Muc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkocCksMykpLGEubWF0ZXJpYWw9YS5tYXRlcmlhbHx8e30sYS5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITB9cy5jZW50ZXIoKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHMuc2V0SW5kZXgobmV3IEplKGMsMSkpLHMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgdT1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLGg9bmV3IHRpKHMsdSk7aC5jYXN0U2hhZG93PSEwLGgucmVjZWl2ZVNoYWRvdz0hMCwoZj10aGlzLl9zY2VuZSk9PW51bGx8fGYuYWRkKGgpLHRoaXMuX2xhc3RNZXNoPWh9X2NyZWF0ZUxpZ2h0cyh0LHIpe2ZvcihsZXQgbj0wO248ci5saWdodHMubGVuZ3RoO24rKyl7bGV0IGk9ci5saWdodHNbbl0sbz1uZXcgd01baS5jbHNdKGkuY29sb3IsaS5pbnRlbnNpdHkpO2kucG9zaXRpb24mJm8ucG9zaXRpb24uc2V0KGkucG9zaXRpb25bMF0saS5wb3NpdGlvblsxXSxpLnBvc2l0aW9uWzJdKSx0LmFkZChvKX19fTt2YXIgTG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuYWN0aXZlPSExLHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITEsdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMSx0aGlzLl9pc01lc2hMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IElQKHRoaXMucmVxdWVzdE1hbmFnZXIpO2xldCB0PW5ldyBGNih0aGlzLl9ydW5Db2xvcik7dC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVVcGRhdGVTY2VuZSIsdGhpcy5fdXBkYXRlQ2FudmFzU2l6ZS5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX21lc2hWaWV3ZXI9dH1yZWxvYWQoKXshdGhpcy5hY3RpdmV8fCF0aGlzLl9kYXRhUHJvdmlkZXJ8fCh0aGlzLl9pc01lc2hMb2FkaW5nPSEwLHRoaXMuX2RhdGFQcm92aWRlci5yZWxvYWQodGhpcy5ydW4sdGhpcy50YWcsdGhpcy5zYW1wbGUpLnRoZW4odD0+eyF0fHwodGhpcy5fc3RlcHM9dCx0aGlzLl9zdGVwSW5kZXg9dC5sZW5ndGgtMSl9KS5jYXRjaCh0PT57aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHQ9dHx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHQpfSkpfV91cGRhdGVTY2VuZSgpe3ZhciByO2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwOyF0fHwhdC5tZXNofHwodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KChyPXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHIuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfV9kZWJvdW5jZWRGZXRjaE1lc2goKXt0aGlzLmRlYm91bmNlKCJmZXRjaE1lc2giLCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpLDEwMCl9X21heWJlRmV0Y2hNZXNoKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtpZighKCF0fHx0Lm1lc2h8fHQubWVzaEZldGNoaW5nKSl7dC5tZXNoRmV0Y2hpbmc9ITAsdGhpcy5faXNNZXNoTG9hZGluZz0hMDt0cnl7bGV0IHI9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9clswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2gocil7aWYoIXJ8fCFyLmNvZGV8fHIuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHI9cnx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHIpfWZpbmFsbHl7dGhpcy5faXNNZXNoTG9hZGluZz0hMSx0Lm1lc2hGZXRjaGluZz0hMX19fSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UoKXtpZighdGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpcmV0dXJuO2xldCB0PW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIse2RldGFpbDp0aGlzLl9tZXNoVmlld2VyLmdldENhbWVyYVBvc2l0aW9uKCl9KTt0aGlzLmRpc3BhdGNoRXZlbnQodCl9c2V0Q2FtZXJhVmlld3BvaW50KHQscixuKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludCh0LHIsbil9X3VwZGF0ZUNhbnZhc1NpemUoKXtsZXQgdD10aGlzLm9mZnNldFdpZHRoLHI9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQsaT17d2lkdGg6dCxoZWlnaHQ6ci1ufTt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoaSl9cmVkcmF3KCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfV9oYXNBdExlYXN0T25lU3RlcCh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjB9X2hhc011bHRpcGxlU3RlcHModCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWaWV3O3RoaXMuX21lc2hWaWV3ZXImJnQ9PSJhbGwiJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfXRvTG9jYWxlU3RyaW5nXyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07TG4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwic2VsZWN0ZWRWaWV3Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxMbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEY2KV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixJUCldLExuLnByb3RvdHlwZSwiX2RhdGFQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMbi5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxMbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTG4ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExuLnByb3RvdHlwZSwiX2lzTWVzaExvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExuLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiwiYWN0aXZlIiwiX2RhdGFQcm92aWRlciIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcC4qIiwiX21lc2hWaWV3ZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVNjZW5lIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsIl9kZWJvdW5jZWRGZXRjaE1lc2giLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTG4ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW0J0KCJzZWxlY3RlZFZpZXciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVZpZXciLG51bGwpO0xuPUUoW3l0KCJ0Zi1tZXNoLWxvYWRlciIpXSxMbik7dmFyIHBoPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9Ii4qIix0aGlzLl9zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7dmFyIHQ7cmV0dXJuIEFycmF5LmZyb20oKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQodCl7dGhpcy5fc2VsZWN0ZWRWaWV3PT0ic2hhcmUiJiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2gocj0+e3QudGFyZ2V0IT1yJiZyLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfV9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2godD0+e3QucmVkcmF3KCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoc3guaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXN4Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuX2RhdGFOb3RGb3VuZD1pLmxlbmd0aD09PTAsdGhpcy5fcnVuVG9UYWdJbmZvPXJ9KX1fcmVsb2FkTWVzaGVzKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXN4Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBzeC5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSxvZlNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfX07cGgudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scGgucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHBoLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtwaD1FKFt5dCgibWVzaC1kYXNoYm9hcmQiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaCk7dmFyIFFVPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pbnN0YWxsQ29tbWFuZD0icGlwIGluc3RhbGwgLVUgdGVuc29yYm9hcmQtcGx1Z2luLXByb2ZpbGUifV9jb3B5SW5zdGFsbENvbW1hbmQoKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCB0PSgpPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKGkpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pLHI9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dHJ5e3lpZWxkIHQoKSxyLmlubmVyVGV4dD0iQ29waWVkLiJ9Y2F0Y2gobil7ci5pbm5lclRleHQ9IkZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZC4ifX0pfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7bGV0IHQ9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dC5pbm5lclRleHQ9IiJ9fTtRVS50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVUucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCk7UVU9RShbeXQoInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLFFVKTt2YXIgbG09RWUoT2UoKSwxKTt2YXIgemw9RWUoT2UoKSwxKSx0cT1FZSh3bCgpLDEpO3ZhciBubj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6Zm59LHRoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2xldCB0PW5ldyB0cS5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHRxLkF4ZXMuTnVtZXJpYyh0LCJib3R0b20iKSxhY2Nlc3NvcjpyPT5yLnJlY2FsbH19LHRoaXMuX3lWYWx1ZUFjY2Vzc29yPXQ9PnQucHJlY2lzaW9uLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgicHJfY3VydmVzIiwiL3ByX2N1cnZlcyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy50YWcsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9zbW9vdGhpbmdFbmFibGVkPSExfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsbikpfX1fY29tcHV0ZVJ1bkNvbG9yKHQpe3JldHVybiBmbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYXR0YWNoZWQ9ITAsdGhpcy5yZWxvYWQoKX1fZ2V0Q2hhcnREYXRhTG9hZGVyKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIil9cmVsb2FkKCl7aWYoISF0aGlzLl9hdHRhY2hlZCl7aWYodGhpcy5ydW5zLmxlbmd0aD09PTApe3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KTtyZXR1cm59dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVsb2FkKCl9fV9zZXRDaGFydERhdGEoKXt2YXIgdD10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSxyPXRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksbj10aGlzLl9zZXRPZlJlbGV2YW50UnVuczt6bC5mb3JPd24odCwoaSxvKT0+e2xldCBhPXJbb107aWYoIShhJiZ0W29dLnN0ZXA9PT1hLnN0ZXApKXtpZighbltvXSl7dGhpcy5fY2xlYXJTZXJpZXNEYXRhKG8pO3JldHVybn10aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKG8saSl9fSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxyKXtsZXQgbj16bC5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoYSxzKT0+KGFbc109cltzXS5zbGljZSgpLnJldmVyc2UoKSxhKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV09emwubWFwVmFsdWVzKG4scz0+c1thXSk7bGV0IG89dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7by5zZXRTZXJpZXNEYXRhKHQsaSksby5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtsZXQgcj10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTtyLnNldFNlcmllc0RhdGEodCxbXSksci5jb21taXRDaGFuZ2VzKCl9X3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUscj10aGlzLnJ1blRvU3RlcENhcDtsZXQgbj17fTt6bC5mb3JPd24odCwoaSxvKT0+eyFpfHwhaS5sZW5ndGh8fChuW29dPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHJbb10saSkpfSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsbil9X25vdGlmeURhdGFDaGFuZ2UoKXt2YXIgdD10aGlzLl9ydW5Ub0RhdGFPdmVyVGltZTt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodCl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQscil7bGV0IG49TWF0aC5taW4oemwuc29ydGVkSW5kZXgoci5tYXAoaT0+aS5zdGVwKSx0KSxyLmxlbmd0aC0xKTtyZXR1cm4gcltuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiB6bC5maWx0ZXIodCxuPT5yW25dKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe3ZhciB0PXRoaXMuX3J1bnNXaXRoU3RlcEF2YWlsYWJsZTtsZXQgcj17fTtyZXR1cm4gemwuZm9yRWFjaCh0LG49PntyW25dPSEwfSkscn1fY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bmV3IERhdGUobi53YWxsX3RpbWUqMWUzKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07bm4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW194Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbX3lWYWx1ZUFjY2Vzc29yXV0iCiAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbX2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgZGVmYXVsdC15LXJhbmdlPSJbW19kZWZhdWx0WVJhbmdlXV0iCiAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICBkYXRhLXNlcmllcz0iW1tydW5zXV0iCiAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgID48L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CgogICAgPGRpdiBpZD0iYnV0dG9ucy1yb3ciPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic3RlcC1sZWdlbmQiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFN0ZXBBdmFpbGFibGVdXSIgYXM9InJ1biI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1ib3giCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiBbW19jb21wdXRlUnVuQ29sb3IocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4KICAgICAgICAgID48YnIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3YWxsLXRpbWUtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIChbW19jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dKQogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgI3N0ZXAtbGVnZW5kIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBtYXJnaW46IDVweCAwIDVweCAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jb2xvci1ib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CiAgICAgIC5zdGVwLWxhYmVsLXRleHQgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC53YWxsLXRpbWUtbGFiZWwtdGV4dCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbm4ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLG5uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sbm4ucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFGaWVsZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxubi5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQnQoInJ1bnMiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX3J1blRvUHJDdXJ2ZUVudHJ5IiwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLCJfc2V0T2ZSZWxldmFudFJ1bnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCk7RShbQnQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsInJ1blRvU3RlcENhcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sbm4ucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpO0UoW1J0KCJydW5zIiwiX3J1blRvUHJDdXJ2ZUVudHJ5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxubi5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpO0UoW1J0KCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpO25uPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1jYXJkIildLG5uKTt2YXIgU009RWUoT2UoKSwxKTt2YXIgZXA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVuVG9TdGVwSW5kZXg9e319X2NvbXB1dGVDb2xvckZvclJ1bih0KXtyZXR1cm4gZm4odCl9X2NvbXB1dGVUaW1lVGV4dEZvclJ1bih0LHIsbixpKXtsZXQgbz1yW25dO2lmKCFTTS5pc051bWJlcihvKSlyZXR1cm4iIjtsZXQgYT10W25dO2lmKCFhKXJldHVybiIiO2xldCBzPWFbb11baV07aWYoaT09PSJzdGVwIilyZXR1cm5gc3RlcCAke3N9YDtpZihpPT09InJlbGF0aXZlIilyZXR1cm4gczwxP2AkeyhzKjFlMykudG9GaXhlZCgyKX0gbXNgOmAke3MudG9GaXhlZCgyKX0gc2A7aWYoaT09PSJ3YWxsX3RpbWUiKXJldHVybiBuZXcgRGF0ZShzKjFlMykudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2xldCByPXQudGFyZ2V0LmRhdGFzZXQucnVuLG49dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsaT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtpc05hTihuKT9kZWxldGUgaVtyXTppW3JdPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLHRoaXMuX3J1blRvU3RlcEluZGV4PWl9X2NvbXB1dGVNYXhTdGVwSW5kZXhGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztsZXQgcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTTS5mb3JPd24odCwobixpKT0+e1NNLmlzTnVtYmVyKHJbaV0pfHwocltpXT1uLmxlbmd0aC0xKX0pLHRoaXMuX3J1blRvU3RlcEluZGV4PXJ9X2dldFN0ZXAodCxyKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbcl06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LHIpe2xldCBuPXt9O3JldHVybiBTTS5mb3JPd24ociwoaSxvKT0+e2xldCBhPXRbb107IWF8fChuW29dPWFbaV0uc3RlcCl9KSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5zLHI9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX19O2VwLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZXAucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGVwLnByb3RvdHlwZSwidGltZURpc3BsYXlUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlcC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpO0UoW1J0KCJydW5zIiwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZXAucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKTtlcD1FKFt5dCgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sZXApO3ZhciBrbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYobG0uaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWxtLm1hcFZhbHVlcyhyLG89PmxtLmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkQ2FyZHMoKXt2YXIgdDtsbS5mb3JFYWNoKCh0PXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWxtLm1hcFZhbHVlcyh0LG89Pk9iamVjdC5rZXlzKG8pKTtyZXR1cm4gaEUoaSxyLG4pfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMscj10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHQuZmlsdGVyKG49PnJbbl0pfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9e307ci5mb3JFYWNoKGE9PntpW2FdPXRbYV1bbl19KTtsZXQgbz1uLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBvUihpLG8pfV9jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2sodCl7cmV0dXJuIHI9Pnt0aGlzLnNldCgiX3RhZ1RvUnVuVG9EYXRhIixNeChLbCh7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTpyfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtsZXQgcj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyh0KSlmb3IobGV0W2Fdb2YgT2JqZWN0LmVudHJpZXMobykpKHJbYV09PW51bGx8fGk8clthXSkmJihyW2FdPWkpO2xldCBuPXt9O2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgYT10W29dW2ldO25baV09YS5tYXAocz0+KHtzdGVwOnMuc3RlcCx3YWxsX3RpbWU6cy53YWxsX3RpbWUscmVsYXRpdmU6cy53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KSl9cmV0dXJuIG59fTtrby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa28ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxrby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa28ucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7RShbUnQoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCk7RShbUnQoIl90YWdUb1J1blRvRGF0YSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpO2tvPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sa28pO3ZhciBCNj1FZShPZSgpLDEpO3ZhciB1bz1jbGFzcyBleHRlbmRzIEd0KG5iKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3ZhciB0PXRoaXMuX3Ntb290aGluZ1dlaWdodDtyZXR1cm4gdD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1OYS5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoQjYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPUI2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENoYXJ0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3VwZGF0ZUNhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGksbz1uLGE9QjYubWFwVmFsdWVzKHQscz0+T2JqZWN0LmtleXMocykpO2k9aEUoYSxyLG8pLGkuZm9yRWFjaChzPT57cy5pdGVtcz1zLml0ZW1zLm1hcChsPT4oe3RhZzpsLnRhZyxzZXJpZXM6bC5ydW5zLm1hcChjPT4oe3J1bjpjLHRhZzpsLnRhZ30pKX0pKX0pLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsaSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQscixuKXtsZXQgaT10Lm5hbWUsbz1uLnRhZyxhPXt9O24uc2VyaWVzLmZvckVhY2goKHtydW46dX0pPT57YVt1XT1yW3VdW29dfSk7bGV0IHM9by5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpLHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmN9PW9SKGEscyk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuUFJFRklYX0dST1VQJiZjLnN0YXJ0c1dpdGgoaSsiLyIpJiYoYz1jLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfX19O3VvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJzaG93LWRvd25sb2FkLWxpbmtzIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSIKICAgICAgICAgICAgICAgID5TaG93IGRhdGEgZG93bmxvYWQgbGlua3M8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJpZ25vcmUteS1vdXRsaWVyIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iCiAgICAgICAgICAgICAgICA+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0iMCIKICAgICAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQKICAgICAgICAgICAgICB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IgogICAgICAgICAgICAgIHN0ZXA9IjAuMDAxIgogICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICBtYXg9IjAuOTk5IgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHNjYWxhciBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgYmF0Y2gtc2l6ZT0iW1tmZWF0dXJlRmxhZ3Muc2NhbGFyc0JhdGNoU2l6ZV1dIgogICAgICAgICAgICAgICAgICBpbi1jb2xhYj0iW1tmZWF0dXJlRmxhZ3MuaW5Db2xhYl1dIgogICAgICAgICAgICAgICAgPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1by5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1by5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx1by5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1by5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtCdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdW8ucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCk7dW89RShbeXQoInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sdW8pO3ZhciBvcGU9RWUoT2UoKSwxKTt2YXIgZGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgYW59Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1fY2hhbmdlUnVuQ29sb3IoKXt2YXIgdD10aGlzLl9ydW5Db2xvcjt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dH0pfWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9X2UoKSxyPU1pKHQucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLG1hcmtkb3duOnRoaXMubWFya2Rvd25FbmFibGVkPyJ0cnVlIjoiZmFsc2UifSksbj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgbz1pLnZhbHVlLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhLndhbGxfdGltZSoxZTMpLHN0ZXA6YS5zdGVwLHRleHQ6YS50ZXh0fSkpO3RoaXMuc2V0KCJfdGV4dHMiLG8uc2xpY2UoKS5yZXZlcnNlKCkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIHhuKCIsIikodCl9fTtkaC50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwKICAgICAgZWxldmF0aW9uPSIxIgogICAgICBpZD0ic3RlcHMtY29udGFpbmVyIgogICAgICBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdGV4dHNdXSI+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InN0ZXAtY29udGFpbmVyIj4KICAgICAgICAgIHN0ZXAgPHNwYW4gY2xhc3M9InN0ZXAtdmFsdWUiPltbX2Zvcm1hdFN0ZXAoaXRlbS5zdGVwKV1dPC9zcGFuPgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InRleHQiPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tpdGVtLnRleHRdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAjc3RlcHMtY29udGFpbmVyIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgLyogY29sb3IgY29tcHV0ZWQgYW5kIHNldCBhcyBpbmxpbmUgc3R5bGUgKi87CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXRiLXRleHQtbG9hZGVyLW91dGxpbmUpOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkaC5wcm90b3R5cGUsIm1hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZGgucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxkaC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sZGgucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkaC5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoIl9ydW5Db2xvciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGgucHJvdG90eXBlLCJfY2hhbmdlUnVuQ29sb3IiLG51bGwpO2RoPUUoW3l0KCJ0Zi10ZXh0LWxvYWRlciIpXSxkaCk7dmFyIFFjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fbWFya2Rvd25FbmFibGVkPXZwKCJfbWFya2Rvd25FbmFibGVkIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlcj14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX21hcmtkb3duRW5hYmxlZE9ic2VydmVyKF9tYXJrZG93bkVuYWJsZWQpIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihvcGUuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnKSlyZXR1cm47bGV0IG49JGkocik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLG4ubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRUZXh0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWcscj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIFFsKHQscixuKX1fbWFya2Rvd25FbmFibGVkT2JzZXJ2ZXIoKXt0aGlzLl9yZWxvYWRUZXh0cygpfX07UWMudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X21hcmtkb3duRW5hYmxlZH19IgogICAgICAgICAgICAgID5FbmFibGUgTWFya2Rvd248L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSB0ZXh0IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi10ZXh0LWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBtYXJrZG93bi1lbmFibGVkPSJbW19tYXJrZG93bkVuYWJsZWRdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfbWFya2Rvd25FbmFibGVkU3RvcmFnZU9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfbWFya2Rvd25FbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRYy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUWMucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUWMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1FjPUUoW3l0KCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxRYyk7dmFyIFZodD1jbGFzcyBleHRlbmRzIEd0KG10KXt9O1ZodC50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgV2hhdC1JZiBUb29sIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgVGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWlyLWNvZGUuZ2l0aHViLmlvL2xpdC8iCiAgICAgICAgICA+TGVhcm5pbmcgSW50ZXJwcmV0YWJpbGl0eSBUb29sIChMSVQpPC9hCiAgICAgICAgPgogICAgICAgIGlzIGFuIGFjdGl2ZWx5IG1haW50YWluZWQgYWx0ZXJuYXRpdmUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvc2V0dXAvIj5oZXJlPC9hPiB0byBpbnN0YWxsIGFuZAogICAgICAgIHVzZSB0aGlzIHRvb2wuCiAgICAgIDwvcD4KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQoKICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIH0KICAgICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQogICAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQogICAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgIDwvZGl2PgogIGA7Vmh0PUUoW3l0KCJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIildLFZodCk7dmFyIGFwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1SQn19O2FwZT1FKFt5dCgidGYtYmFja2VuZCIpXSxhcGUpO3ZhciBzcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPWZufX07c3BlPUUoW3l0KCJ0Zi1jb2xvci1zY2FsZSIpXSxzcGUpO3ZhciBscGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2ZlYXR1cmVfZmxhZ3M9dFd9fTtscGU9RShbeXQoInRmLWZlYXR1cmUtZmxhZ3MiKV0sbHBlKTt2YXIgY3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPWtXfX07Y3BlPUUoW3l0KCJ0Zi1nbG9iYWxzIildLGNwZSk7dmFyIFVodD17fTtLcyhVaHQse1RmRG9tUmVwZWF0OigpPT5PaSxhZGRMaW1pdExpc3RlbmVyOigpPT5VVyxnZXRMaW1pdDooKT0+R1cscmVtb3ZlTGltaXRMaXN0ZW5lcjooKT0+cVcsc2V0TGltaXQ6KCk9Pm4yZX0pO3ZhciB1cGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PVVodH19O3VwZT1FKFt5dCgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sdXBlKTt2YXIgaHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPU9CfX07aHBlPUUoW3l0KCJ0Zi1zdG9yYWdlIildLGhwZSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIFV1ZT1PYmplY3QuY3JlYXRlLE1PPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx6dWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixqdWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsR3VlPU9iamVjdC5nZXRQcm90b3R5cGVPZixXdWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx1OD0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLFNPPShuLHQpPT57Zm9yKHZhciBlIGluIHQpTU8obixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LGQ4PShuLHQsZSk9PihlPW51bGwhPW4/VXVlKEd1ZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIGp1ZSh0KSkhV3VlLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYmTU8obixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9enVlKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTpNTyhlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLFc4PXU4KChkUWUseVMpPT57dmFyIE04LFM4LEU4LFQ4LEQ4LEE4LEk4LFA4LFI4LF9TLFZPLE84LGs4LEY4LG1nLE44LEw4LEI4LFY4LEg4LFU4LHo4LGo4LEc4LHZTOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8scyl7cmV0dXJuIGlbb109cj9yKG8scyk6c319ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgeVMmJiJvYmplY3QiPT10eXBlb2YgeVMuZXhwb3J0cz9lKHQsZSh5Uy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07TTg9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LFM4PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEscz1hcmd1bWVudHMubGVuZ3RoO288cztvKyspZm9yKHZhciBhIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpJiYoaVthXT1yW2FdKTtyZXR1cm4gaX0sRTg9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIHMgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmci5pbmRleE9mKHMpPDAmJihvW3NdPWlbc10pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT0wO2ZvcihzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7YTxzLmxlbmd0aDthKyspci5pbmRleE9mKHNbYV0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLHNbYV0pJiYob1tzW2FdXT1pW3NbYV1dKX1yZXR1cm4gb30sVDg9ZnVuY3Rpb24oaSxyLG8scyl7dmFyIGMsYT1hcmd1bWVudHMubGVuZ3RoLGw9YTwzP3I6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6cztpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxzKTtlbHNlIGZvcih2YXIgdT1pLmxlbmd0aC0xO3U+PTA7dS0tKShjPWlbdV0pJiYobD0oYTwzP2MobCk6YT4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBhPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sRDg9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtyKG8scyxpKX19LEE4PWZ1bmN0aW9uKGkscil7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShpLHIpfSxJOD1mdW5jdGlvbihpLHIsbyxzKXtyZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUoaCl7dHJ5e3Aocy5uZXh0KGgpKX1jYXRjaChmKXtjKGYpfX1mdW5jdGlvbiBkKGgpe3RyeXtwKHMudGhyb3coaCkpfWNhdGNoKGYpe2MoZil9fWZ1bmN0aW9uIHAoaCl7aC5kb25lP2woaC52YWx1ZSk6ZnVuY3Rpb24obCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfShoLnZhbHVlKS50aGVuKHUsZCl9cCgocz1zLmFwcGx5KGkscnx8W10pKS5uZXh0KCkpfSl9LFA4PWZ1bmN0aW9uKGkscil7dmFyIHMsYSxsLGMsbz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZsWzBdKXRocm93IGxbMV07cmV0dXJuIGxbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShwKXtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKHMpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxwWzBdJiYobz0wKSksbzspdHJ5e2lmKHM9MSxhJiYobD0yJnBbMF0/YS5yZXR1cm46cFswXT9hLnRocm93fHwoKGw9YS5yZXR1cm4pJiZsLmNhbGwoYSksMCk6YS5uZXh0KSYmIShsPWwuY2FsbChhLHBbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChhPTAsbCYmKHA9WzImcFswXSxsLnZhbHVlXSkscFswXSl7Y2FzZSAwOmNhc2UgMTpsPXA7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOnBbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxhPXBbMV0scD1bMF07Y29udGludWU7Y2FzZSA3OnA9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShsPShsPW8udHJ5cykubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoNj09PXBbMF18fDI9PT1wWzBdKSl7bz0wO2NvbnRpbnVlfWlmKDM9PT1wWzBdJiYoIWx8fHBbMV0+bFswXSYmcFsxXTxsWzNdKSl7by5sYWJlbD1wWzFdO2JyZWFrfWlmKDY9PT1wWzBdJiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPXA7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChwKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9cD1yLmNhbGwoaSxvKX1jYXRjaChoKXtwPVs2LGhdLGE9MH1maW5hbGx5e3M9bD0wfWlmKDUmcFswXSl0aHJvdyBwWzFdO3JldHVybnt2YWx1ZTpwWzBdP3BbMV06dm9pZCAwLGRvbmU6ITB9fShbcCxoXSl9fX0sUjg9ZnVuY3Rpb24oaSxyKXtmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJnZTKHIsaSxvKX0sdlM9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihpLHIsbyxzKXt2b2lkIDA9PT1zJiYocz1vKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk7KCFhfHwoImdldCJpbiBhPyFyLl9fZXNNb2R1bGU6YS53cml0YWJsZXx8YS5jb25maWd1cmFibGUpKSYmKGE9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJbb119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyxhKX06ZnVuY3Rpb24oaSxyLG8scyl7dm9pZCAwPT09cyYmKHM9byksaVtzXT1yW29dfSxfUz1mdW5jdGlvbihpKXt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbz1yJiZpW3JdLHM9MDtpZihvKXJldHVybiBvLmNhbGwoaSk7aWYoaSYmIm51bWJlciI9PXR5cGVvZiBpLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBpJiZzPj1pLmxlbmd0aCYmKGk9dm9pZCAwKSx7dmFsdWU6aSYmaVtzKytdLGRvbmU6IWl9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihyPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0sVk89ZnVuY3Rpb24oaSxyKXt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZpW1N5bWJvbC5pdGVyYXRvcl07aWYoIW8pcmV0dXJuIGk7dmFyIGEsYyxzPW8uY2FsbChpKSxsPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1yfHxyLS0gPjApJiYhKGE9cy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKX1jYXRjaCh1KXtjPXtlcnJvcjp1fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobz1zLnJldHVybikmJm8uY2FsbChzKX1maW5hbGx5e2lmKGMpdGhyb3cgYy5lcnJvcn19cmV0dXJuIGx9LE84PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWk9aS5jb25jYXQoVk8oYXJndW1lbnRzW3JdKSk7cmV0dXJuIGl9LGs4PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAscj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWkrPWFyZ3VtZW50c1tyXS5sZW5ndGg7dmFyIHM9QXJyYXkoaSksYT0wO2ZvcihyPTA7cjxvO3IrKylmb3IodmFyIGw9YXJndW1lbnRzW3JdLGM9MCx1PWwubGVuZ3RoO2M8dTtjKyssYSsrKXNbYV09bFtjXTtyZXR1cm4gc30sRjg9ZnVuY3Rpb24oaSxyLG8pe2lmKG98fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbCxzPTAsYT1yLmxlbmd0aDtzPGE7cysrKShsfHwhKHMgaW4gcikpJiYobHx8KGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwwLHMpKSxsW3NdPXJbc10pO3JldHVybiBpLmNvbmNhdChsfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSl9LG1nPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbWc/KHRoaXMudj1pLHRoaXMpOm5ldyBtZyhpKX0sTjg9ZnVuY3Rpb24oaSxyLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYSxzPW8uYXBwbHkoaSxyfHxbXSksbD1bXTtyZXR1cm4gYT17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhO2Z1bmN0aW9uIGMobSl7c1ttXSYmKGFbbV09ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8seSl7bC5wdXNoKFttLEMsXyx5XSk+MXx8dShtLEMpfSl9KX1mdW5jdGlvbiB1KG0sQyl7dHJ5eyFmdW5jdGlvbihtKXttLnZhbHVlIGluc3RhbmNlb2YgbWc/UHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLGgpOmYobFswXVsyXSxtKX0oc1ttXShDKSl9Y2F0Y2goXyl7ZihsWzBdWzNdLF8pfX1mdW5jdGlvbiBwKG0pe3UoIm5leHQiLG0pfWZ1bmN0aW9uIGgobSl7dSgidGhyb3ciLG0pfWZ1bmN0aW9uIGYobSxDKXttKEMpLGwuc2hpZnQoKSxsLmxlbmd0aCYmdShsWzBdWzBdLGxbMF1bMV0pfX0sTDg9ZnVuY3Rpb24oaSl7dmFyIHIsbztyZXR1cm4gcj17fSxzKCJuZXh0IikscygidGhyb3ciLGZ1bmN0aW9uKGEpe3Rocm93IGF9KSxzKCJyZXR1cm4iKSxyW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBzKGEsbCl7clthXT1pW2FdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6bWcoaVthXShjKSksZG9uZToicmV0dXJuIj09PWF9Omw/bChjKTpjfTpsfX0sQjg9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPV9TKGkpLG89e30scygibmV4dCIpLHMoInRocm93IikscygicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gcyhsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGQpeyFmdW5jdGlvbihsLGMsdSxkKXtQcm9taXNlLnJlc29sdmUoZCkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6dX0pfSxjKX0odSxkLChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxWOD1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTtIOD1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmdlMocixpLG8pO3JldHVybiBlKHIsaSkscn0sVTg9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSx6OD1mdW5jdGlvbihpLHIsbyxzKXtpZigiYSI9PT1vJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/czoiYSI9PT1vP3MuY2FsbChpKTpzP3MudmFsdWU6ci5nZXQoaSl9LGo4PWZ1bmN0aW9uKGkscixvLHMsYSl7aWYoIm0iPT09cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1zJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09cz9hLmNhbGwoaSxvKTphP2EudmFsdWU9bzpyLnNldChpLG8pLG99LEc4PWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixNOCksbigiX19hc3NpZ24iLFM4KSxuKCJfX3Jlc3QiLEU4KSxuKCJfX2RlY29yYXRlIixUOCksbigiX19wYXJhbSIsRDgpLG4oIl9fbWV0YWRhdGEiLEE4KSxuKCJfX2F3YWl0ZXIiLEk4KSxuKCJfX2dlbmVyYXRvciIsUDgpLG4oIl9fZXhwb3J0U3RhciIsUjgpLG4oIl9fY3JlYXRlQmluZGluZyIsdlMpLG4oIl9fdmFsdWVzIixfUyksbigiX19yZWFkIixWTyksbigiX19zcHJlYWQiLE84KSxuKCJfX3NwcmVhZEFycmF5cyIsazgpLG4oIl9fc3ByZWFkQXJyYXkiLEY4KSxuKCJfX2F3YWl0IixtZyksbigiX19hc3luY0dlbmVyYXRvciIsTjgpLG4oIl9fYXN5bmNEZWxlZ2F0b3IiLEw4KSxuKCJfX2FzeW5jVmFsdWVzIixCOCksbigiX19tYWtlVGVtcGxhdGVPYmplY3QiLFY4KSxuKCJfX2ltcG9ydFN0YXIiLEg4KSxuKCJfX2ltcG9ydERlZmF1bHQiLFU4KSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Iix6OCksbigiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsajgpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRzgpfSl9KSxaWT11OChWMz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbixNcD1WMyYmVjMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24obix0LGUpe2lmKGV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbyxpPTAscj10Lmxlbmd0aDtpPHI7aSsrKShvfHwhKGkgaW4gdCkpJiYob3x8KG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxvW2ldPXRbaV0pO3JldHVybiBuLmNvbmNhdChvfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9O249ZnVuY3Rpb24oKXshZnVuY3Rpb24oVil7dmFyIHRlPVYucGVyZm9ybWFuY2U7ZnVuY3Rpb24gZGUoYnQpe3RlJiZ0ZS5tYXJrJiZ0ZS5tYXJrKGJ0KX1mdW5jdGlvbiBTKGJ0LF9lKXt0ZSYmdGUubWVhc3VyZSYmdGUubWVhc3VyZShidCxfZSl9ZGUoIlpvbmUiKTt2YXIgTD1WLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBxKGJ0KXtyZXR1cm4gTCtidH12YXIgWj0hMD09PVZbcSgiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoVi5ab25lKXtpZihafHwiZnVuY3Rpb24iIT10eXBlb2YgVi5ab25lLl9fc3ltYm9sX18pdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3JldHVybiBWLlpvbmV9dmFyIGNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUpe3RoaXMuX3BhcmVudD1fZSx0aGlzLl9uYW1lPWJlP2JlLm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPWJlJiZiZS5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3ICRlKHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxiZSl9cmV0dXJuIGJ0LmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYoVi5Qcm9taXNlIT09a24uWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIF9lPWJ0LmN1cnJlbnQ7X2UucGFyZW50OylfZT1fZS5wYXJlbnQ7cmV0dXJuIF9lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkci56b25lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKF9lLGJlLERlKXtpZih2b2lkIDA9PT1EZSYmKERlPSExKSxrbi5oYXNPd25Qcm9wZXJ0eShfZSkpe2lmKCFEZSYmWil0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrX2UpfWVsc2UgaWYoIVZbIl9fWm9uZV9kaXNhYmxlXyIrX2VdKXt2YXIgRW49IlpvbmU6IitfZTtkZShFbiksa25bX2VdPWJlKFYsYnQsZ3IpLFMoRW4sRW4pfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihfZSl7dmFyIGJlPXRoaXMuZ2V0Wm9uZVdpdGgoX2UpO2lmKGJlKXJldHVybiBiZS5fcHJvcGVydGllc1tfZV19LGJ0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihfZSl7Zm9yKHZhciBiZT10aGlzO2JlOyl7aWYoYmUuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoX2UpKXJldHVybiBiZTtiZT1iZS5fcGFyZW50fXJldHVybiBudWxsfSxidC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihfZSl7aWYoIV9lKXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsX2UpfSxidC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihfZSxiZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIGZ1bmN0aW9uIGdvdDogIitfZSk7dmFyIERlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxfZSxiZSksRW49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRW4ucnVuR3VhcmRlZChEZSx0aGlzLGFyZ3VtZW50cyxiZSl9fSxidC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsX2UsYmUsRGUsRW4pfWZpbmFsbHl7ZHI9ZHIucGFyZW50fX0sYnQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3ZvaWQgMD09PWJlJiYoYmU9bnVsbCksZHI9e3BhcmVudDpkcix6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxfZSxiZSxEZSxFbil9Y2F0Y2godnIpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHZyKSl0aHJvdyB2cn19ZmluYWxseXtkcj1kci5wYXJlbnR9fSxidC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7aWYoX2Uuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoX2Uuem9uZXx8RHQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKF9lLnN0YXRlIT09Z2l8fF9lLnR5cGUhPT1faSYmX2UudHlwZSE9PU9uKXt2YXIgRW49X2Uuc3RhdGUhPVhuO0VuJiZfZS5fdHJhbnNpdGlvblRvKFhuLFVuKSxfZS5ydW5Db3VudCsrO3ZhciB2cj1xcztxcz1fZSxkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e19lLnR5cGU9PU9uJiZfZS5kYXRhJiYhX2UuZGF0YS5pc1BlcmlvZGljJiYoX2UuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsX2UsYmUsRGUpfWNhdGNoKEhsKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxIbCkpdGhyb3cgSGx9fWZpbmFsbHl7X2Uuc3RhdGUhPT1naSYmX2Uuc3RhdGUhPT1qaSYmKF9lLnR5cGU9PV9pfHxfZS5kYXRhJiZfZS5kYXRhLmlzUGVyaW9kaWM/RW4mJl9lLl90cmFuc2l0aW9uVG8oVW4sWG4pOihfZS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksRW4mJl9lLl90cmFuc2l0aW9uVG8oZ2ksWG4sZ2kpKSksZHI9ZHIucGFyZW50LHFzPXZyfX19LGJ0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oX2Upe2lmKF9lLnpvbmUmJl9lLnpvbmUhPT10aGlzKWZvcih2YXIgYmU9dGhpcztiZTspe2lmKGJlPT09X2Uuem9uZSl0aHJvdyBFcnJvcigiY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gIi5jb25jYXQodGhpcy5uYW1lLCIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIikuY29uY2F0KF9lLnpvbmUubmFtZSkpO2JlPWJlLnBhcmVudH1fZS5fdHJhbnNpdGlvblRvKGVpLGdpKTt2YXIgRGU9W107X2UuX3pvbmVEZWxlZ2F0ZXM9RGUsX2UuX3pvbmU9dGhpczt0cnl7X2U9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLF9lKX1jYXRjaChFbil7dGhyb3cgX2UuX3RyYW5zaXRpb25UbyhqaSxlaSxnaSksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsRW4pLEVufXJldHVybiBfZS5fem9uZURlbGVnYXRlcz09PURlJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoX2UsMSksX2Uuc3RhdGU9PWVpJiZfZS5fdHJhbnNpdGlvblRvKFVuLGVpKSxfZX0sYnQucHJvdG90eXBlLnNjaGVkdWxlTWljcm9UYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKHduLF9lLGJlLERlLEVuLHZvaWQgMCkpfSxidC5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4sdnIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgV2UoT24sX2UsYmUsRGUsRW4sdnIpKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuLHZyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKF9pLF9lLGJlLERlLEVuLHZyKSl9LGJ0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKF9lKXtpZihfZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhfZS56b25lfHxEdCkubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYoX2Uuc3RhdGU9PT1Vbnx8X2Uuc3RhdGU9PT1Ybil7X2UuX3RyYW5zaXRpb25UbyhWdCxVbixYbik7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsX2UpfWNhdGNoKGJlKXt0aHJvdyBfZS5fdHJhbnNpdGlvblRvKGppLFZ0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxiZSksYmV9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksX2UuX3RyYW5zaXRpb25UbyhnaSxWdCksX2UucnVuQ291bnQ9MCxfZX19LGJ0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKF9lLGJlKXt2YXIgRGU9X2UuX3pvbmVEZWxlZ2F0ZXM7LTE9PWJlJiYoX2UuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciBFbj0wO0VuPERlLmxlbmd0aDtFbisrKURlW0VuXS5fdXBkYXRlVGFza0NvdW50KF9lLnR5cGUsYmUpfSxidH0oKTtjZS5fX3N5bWJvbF9fPXE7dmFyIEppLFVlPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0Lmhhc1Rhc2soYmUsRGUpfSxvblNjaGVkdWxlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0LnNjaGVkdWxlVGFzayhiZSxEZSl9LG9uSW52b2tlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSxFbix2cil7cmV0dXJuIGJ0Lmludm9rZVRhc2soYmUsRGUsRW4sdnIpfSxvbkNhbmNlbFRhc2s6ZnVuY3Rpb24oYnQsX2UsYmUsRGUpe3JldHVybiBidC5jYW5jZWxUYXNrKGJlLERlKX19LCRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUpe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9X2UsdGhpcy5fcGFyZW50RGVsZWdhdGU9YmUsdGhpcy5fZm9ya1pTPURlJiYoRGUmJkRlLm9uRm9yaz9EZTpiZS5fZm9ya1pTKSx0aGlzLl9mb3JrRGxndD1EZSYmKERlLm9uRm9yaz9iZTpiZS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1EZSYmKERlLm9uRm9yaz90aGlzLnpvbmU6YmUuX2ZvcmtDdXJyWm9uZSksdGhpcy5faW50ZXJjZXB0WlM9RGUmJihEZS5vbkludGVyY2VwdD9EZTpiZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9RGUmJihEZS5vbkludGVyY2VwdD9iZTpiZS5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9RGUmJihEZS5vbkludGVyY2VwdD90aGlzLnpvbmU6YmUuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZva2VaUz1EZSYmKERlLm9uSW52b2tlP0RlOmJlLl9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1EZSYmKERlLm9uSW52b2tlP2JlOmJlLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1EZSYmKERlLm9uSW52b2tlP3RoaXMuem9uZTpiZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9RGUmJihEZS5vbkhhbmRsZUVycm9yP0RlOmJlLl9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9RGUmJihEZS5vbkhhbmRsZUVycm9yP2JlOmJlLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9RGUmJihEZS5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTpiZS5faGFuZGxlRXJyb3JDdXJyWm9uZSksdGhpcy5fc2NoZWR1bGVUYXNrWlM9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9EZTpiZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9iZTpiZS5fc2NoZWR1bGVUYXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9RGUmJihEZS5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6YmUuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9RGUmJihEZS5vbkludm9rZVRhc2s/RGU6YmUuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFza0RsZ3Q9RGUmJihEZS5vbkludm9rZVRhc2s/YmU6YmUuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9RGUmJihEZS5vbkludm9rZVRhc2s/dGhpcy56b25lOmJlLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1EZSYmKERlLm9uQ2FuY2VsVGFzaz9EZTpiZS5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1EZSYmKERlLm9uQ2FuY2VsVGFzaz9iZTpiZS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1EZSYmKERlLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6YmUuX2NhbmNlbFRhc2tDdXJyWm9uZSksdGhpcy5faGFzVGFza1pTPW51bGwsdGhpcy5faGFzVGFza0RsZ3Q9bnVsbCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPW51bGwsdGhpcy5faGFzVGFza0N1cnJab25lPW51bGw7dmFyIEVuPURlJiZEZS5vbkhhc1Rhc2s7KEVufHxiZSYmYmUuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9RW4/RGU6VWUsdGhpcy5faGFzVGFza0RsZ3Q9YmUsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1fZSxEZS5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPVVlLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9YmUsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxEZS5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9VWUsdGhpcy5faW52b2tlVGFza0RsZ3Q9YmUsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksRGUub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPVVlLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWJlLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gYnQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oX2UsYmUpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsX2UsYmUpOm5ldyBjZShfZSxiZSl9LGJ0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oX2UsYmUsRGUpe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLF9lLGJlLERlKTpiZX0sYnQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihfZSxiZSxEZSxFbix2cil7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsX2UsYmUsRGUsRW4sdnIpOmJlLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKF9lLGJlKXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLF9lLGJlKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihfZSxiZSl7dmFyIERlPWJlO2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmRGUuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwoRGU9dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxfZSxiZSkpfHwoRGU9YmUpO2Vsc2UgaWYoYmUuc2NoZWR1bGVGbiliZS5zY2hlZHVsZUZuKGJlKTtlbHNle2lmKGJlLnR5cGUhPXduKXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7bW4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmludm9rZVRhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsX2UsYmUsRGUsRW4pOmJlLmNhbGxiYWNrLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oX2UsYmUpe3ZhciBEZTtpZih0aGlzLl9jYW5jZWxUYXNrWlMpRGU9dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsX2UsYmUpO2Vsc2V7aWYoIWJlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7RGU9YmUuY2FuY2VsRm4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmhhc1Rhc2s9ZnVuY3Rpb24oX2UsYmUpe3RyeXt0aGlzLl9oYXNUYXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLF9lLGJlKX1jYXRjaChEZSl7dGhpcy5oYW5kbGVFcnJvcihfZSxEZSl9fSxidC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihfZSxiZSl7dmFyIERlPXRoaXMuX3Rhc2tDb3VudHMsRW49RGVbX2VdLHZyPURlW19lXT1FbitiZTtpZih2cjwwKXRocm93IG5ldyBFcnJvcigiTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPUVuJiYwIT12cnx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOkRlLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpEZS5tYWNyb1Rhc2s+MCxldmVudFRhc2s6RGUuZXZlbnRUYXNrPjAsY2hhbmdlOl9lfSl9LGJ0fSgpLFdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUsRW4sdnIsSGwpe2lmKHRoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVsZWQiLHRoaXMudHlwZT1fZSx0aGlzLnNvdXJjZT1iZSx0aGlzLmRhdGE9RW4sdGhpcy5zY2hlZHVsZUZuPXZyLHRoaXMuY2FuY2VsRm49SGwsIURlKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPURlO3ZhciBldD10aGlzO3RoaXMuaW52b2tlPV9lPT09X2kmJkVuJiZFbi51c2VHP2J0Lmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gYnQuaW52b2tlVGFzay5jYWxsKFYsZXQsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gYnQuaW52b2tlVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7X2V8fChfZT10aGlzKSxEcisrO3RyeXtyZXR1cm4gX2UucnVuQ291bnQrKyxfZS56b25lLnJ1blRhc2soX2UsYmUsRGUpfWZpbmFsbHl7MT09RHImJlJuKCksRHItLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidC5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJzdGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxidC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKGdpLGVpKX0sYnQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oX2UsYmUsRGUpe2lmKHRoaXMuX3N0YXRlIT09YmUmJnRoaXMuX3N0YXRlIT09RGUpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdCh0aGlzLnR5cGUsIiAnIikuY29uY2F0KHRoaXMuc291cmNlLCInOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyIpLmNvbmNhdChfZSwiJywgZXhwZWN0aW5nIHN0YXRlICciKS5jb25jYXQoYmUsIiciKS5jb25jYXQoRGU/IiBvciAnIitEZSsiJyI6IiIsIiwgd2FzICciKS5jb25jYXQodGhpcy5fc3RhdGUsIicuIikpO3RoaXMuX3N0YXRlPV9lLF9lPT1naSYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGJ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEmJnR5cGVvZiB0aGlzLmRhdGEuaGFuZGxlSWQ8InUiP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sYnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fSxidH0oKSxydD1xKCJzZXRUaW1lb3V0IiksZHQ9cSgiUHJvbWlzZSIpLFR0PXEoInRoZW4iKSxBdD1bXSxjbj0hMTtmdW5jdGlvbiB4aShidCl7aWYoSml8fFZbZHRdJiYoSmk9VltkdF0ucmVzb2x2ZSgwKSksSmkpe3ZhciBfZT1KaVtUdF07X2V8fChfZT1KaS50aGVuKSxfZS5jYWxsKEppLGJ0KX1lbHNlIFZbcnRdKGJ0LDApfWZ1bmN0aW9uIG1uKGJ0KXswPT09RHImJjA9PT1BdC5sZW5ndGgmJnhpKFJuKSxidCYmQXQucHVzaChidCl9ZnVuY3Rpb24gUm4oKXtpZighY24pe2Zvcihjbj0hMDtBdC5sZW5ndGg7KXt2YXIgYnQ9QXQ7QXQ9W107Zm9yKHZhciBfZT0wO19lPGJ0Lmxlbmd0aDtfZSsrKXt2YXIgYmU9YnRbX2VdO3RyeXtiZS56b25lLnJ1blRhc2soYmUsbnVsbCxudWxsKX1jYXRjaChEZSl7Z3Iub25VbmhhbmRsZWRFcnJvcihEZSl9fX1nci5taWNyb3Rhc2tEcmFpbkRvbmUoKSxjbj0hMX19dmFyIER0PXtuYW1lOiJOTyBaT05FIn0sZ2k9Im5vdFNjaGVkdWxlZCIsZWk9InNjaGVkdWxpbmciLFVuPSJzY2hlZHVsZWQiLFhuPSJydW5uaW5nIixWdD0iY2FuY2VsaW5nIixqaT0idW5rbm93biIsd249Im1pY3JvVGFzayIsT249Im1hY3JvVGFzayIsX2k9ImV2ZW50VGFzayIsa249e30sZ3I9e3N5bWJvbDpxLGN1cnJlbnRab25lRnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LG9uVW5oYW5kbGVkRXJyb3I6X3IsbWljcm90YXNrRHJhaW5Eb25lOl9yLHNjaGVkdWxlTWljcm9UYXNrOm1uLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWNlW3EoImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hPblByb3BlcnRpZXM6X3IscGF0Y2hNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaE1hY3JvVGFzazpmdW5jdGlvbigpe3JldHVybiBfcn0scGF0Y2hFdmVudFByb3RvdHlwZTpmdW5jdGlvbigpe3JldHVybiBfcn0saXNJRU9yRWRnZTpmdW5jdGlvbigpe3JldHVybiExfSxnZXRHbG9iYWxPYmplY3RzOmZ1bmN0aW9uKCl7fSxPYmplY3REZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBfcn0sT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7fSxPYmplY3RDcmVhdGU6ZnVuY3Rpb24oKXt9LEFycmF5U2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hDbGFzczpmdW5jdGlvbigpe3JldHVybiBfcn0sd3JhcFdpdGhDdXJyZW50Wm9uZTpmdW5jdGlvbigpe3JldHVybiBfcn0sZmlsdGVyUHJvcGVydGllczpmdW5jdGlvbigpe3JldHVybltdfSxhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LF9yZWRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaENhbGxiYWNrczpmdW5jdGlvbigpe3JldHVybiBfcn0sbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6eGl9LGRyPXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBjZShudWxsLG51bGwpfSxxcz1udWxsLERyPTA7ZnVuY3Rpb24gX3IoKXt9UygiWm9uZSIsIlpvbmUiKSxWLlpvbmU9Y2V9KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8Z2xvYmFsKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGk9T2JqZWN0LmNyZWF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZSxvPSJhZGRFdmVudExpc3RlbmVyIixzPSJyZW1vdmVFdmVudExpc3RlbmVyIixhPVpvbmUuX19zeW1ib2xfXyhvKSxsPVpvbmUuX19zeW1ib2xfXyhzKSxjPSJ0cnVlIix1PSJmYWxzZSIsZD1ab25lLl9fc3ltYm9sX18oIiIpO2Z1bmN0aW9uIHAoVix0ZSl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKFYsdGUpfWZ1bmN0aW9uIGgoVix0ZSxkZSxTLEwpe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2soVix0ZSxkZSxTLEwpfXZhciBmPVpvbmUuX19zeW1ib2xfXyxtPXR5cGVvZiB3aW5kb3c8InUiLEM9bT93aW5kb3c6dm9pZCAwLF89bSYmQ3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWw7ZnVuY3Rpb24gSShWLHRlKXtmb3IodmFyIGRlPVYubGVuZ3RoLTE7ZGU+PTA7ZGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgVltkZV0mJihWW2RlXT1wKFZbZGVdLHRlKyJfIitkZSkpO3JldHVybiBWfWZ1bmN0aW9uIE8oVil7cmV0dXJuIVZ8fCExIT09Vi53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgVi5nZXQmJnR5cGVvZiBWLnNldD4idSIpfXZhciBlZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsWD0hKCJudyJpbiBfKSYmdHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSx4ZT0hWCYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksZmU9dHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksdmU9e30sVD1mdW5jdGlvbihWKXtpZihWPVZ8fF8uZXZlbnQpe3ZhciB0ZT12ZVtWLnR5cGVdO3RlfHwodGU9dmVbVi50eXBlXT1mKCJPTl9QUk9QRVJUWSIrVi50eXBlKSk7dmFyIEwsZGU9dGhpc3x8Vi50YXJnZXR8fF8sUz1kZVt0ZV07aWYoeGUmJmRlPT09QyYmImVycm9yIj09PVYudHlwZSl7dmFyIHE9VjshMD09PShMPVMmJlMuY2FsbCh0aGlzLHEubWVzc2FnZSxxLmZpbGVuYW1lLHEubGluZW5vLHEuY29sbm8scS5lcnJvcikpJiZWLnByZXZlbnREZWZhdWx0KCl9ZWxzZSBudWxsIT0oTD1TJiZTLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkmJiFMJiZWLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIEx9fTtmdW5jdGlvbiBuZShWLHRlLGRlKXt2YXIgUz1uKFYsdGUpO2lmKCFTJiZkZSYmbihkZSx0ZSkmJihTPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLFMmJlMuY29uZmlndXJhYmxlKXt2YXIgcT1mKCJvbiIrdGUrInBhdGNoZWQiKTtpZighVi5oYXNPd25Qcm9wZXJ0eShxKXx8IVZbcV0pe2RlbGV0ZSBTLndyaXRhYmxlLGRlbGV0ZSBTLnZhbHVlO3ZhciBaPVMuZ2V0LGNlPVMuc2V0LFVlPXRlLnNsaWNlKDIpLCRlPXZlW1VlXTskZXx8KCRlPXZlW1VlXT1mKCJPTl9QUk9QRVJUWSIrVWUpKSxTLnNldD1mdW5jdGlvbihXZSl7dmFyIHJ0PXRoaXM7IXJ0JiZWPT09XyYmKHJ0PV8pLHJ0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WyRlXSYmcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihVZSxUKSxjZSYmY2UuY2FsbChydCxudWxsKSxydFskZV09V2UsImZ1bmN0aW9uIj09dHlwZW9mIFdlJiZydC5hZGRFdmVudExpc3RlbmVyKFVlLFQsITEpKX0sUy5nZXQ9ZnVuY3Rpb24oKXt2YXIgV2U9dGhpcztpZighV2UmJlY9PT1fJiYoV2U9XyksIVdlKXJldHVybiBudWxsO3ZhciBydD1XZVskZV07aWYocnQpcmV0dXJuIHJ0O2lmKFope3ZhciBkdD1aLmNhbGwodGhpcyk7aWYoZHQpcmV0dXJuIFMuc2V0LmNhbGwodGhpcyxkdCksImZ1bmN0aW9uIj09dHlwZW9mIFdlLnJlbW92ZUF0dHJpYnV0ZSYmV2UucmVtb3ZlQXR0cmlidXRlKHRlKSxkdH1yZXR1cm4gbnVsbH0sdChWLHRlLFMpLFZbcV09ITB9fX1mdW5jdGlvbiBsZShWLHRlLGRlKXtpZih0ZSlmb3IodmFyIFM9MDtTPHRlLmxlbmd0aDtTKyspbmUoViwib24iK3RlW1NdLGRlKTtlbHNle3ZhciBMPVtdO2Zvcih2YXIgcSBpbiBWKSJvbiI9PXEuc2xpY2UoMCwyKSYmTC5wdXNoKHEpO2Zvcih2YXIgWj0wO1o8TC5sZW5ndGg7WisrKW5lKFYsTFtaXSxkZSl9fXZhciBoZT1mKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24geWUoVil7dmFyIHRlPV9bVl07aWYodGUpe19bZihWKV09dGUsX1tWXT1mdW5jdGlvbigpe3ZhciBMPUkoYXJndW1lbnRzLFYpO3N3aXRjaChMLmxlbmd0aCl7Y2FzZSAwOnRoaXNbaGVdPW5ldyB0ZTticmVhaztjYXNlIDE6dGhpc1toZV09bmV3IHRlKExbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2hlXT1uZXcgdGUoTFswXSxMWzFdKTticmVhaztjYXNlIDM6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdKTticmVhaztjYXNlIDQ6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdLExbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LG1lKF9bVl0sdGUpO3ZhciBTLGRlPW5ldyB0ZShmdW5jdGlvbigpe30pO2ZvcihTIGluIGRlKSJYTUxIdHRwUmVxdWVzdCI9PT1WJiYicmVzcG9uc2VCbG9iIj09PVN8fGZ1bmN0aW9uKEwpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZVtMXT9fW1ZdLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW2hlXVtMXS5hcHBseSh0aGlzW2hlXSxhcmd1bWVudHMpfTp0KF9bVl0ucHJvdG90eXBlLEwse3NldDpmdW5jdGlvbihxKXsiZnVuY3Rpb24iPT10eXBlb2YgcT8odGhpc1toZV1bTF09cChxLFYrIi4iK0wpLG1lKHRoaXNbaGVdW0xdLHEpKTp0aGlzW2hlXVtMXT1xfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1toZV1bTF19fSl9KFMpO2ZvcihTIGluIHRlKSJwcm90b3R5cGUiIT09UyYmdGUuaGFzT3duUHJvcGVydHkoUykmJihfW1ZdW1NdPXRlW1NdKX19ZnVuY3Rpb24gSihWLHRlLGRlKXtmb3IodmFyIFM9VjtTJiYhUy5oYXNPd25Qcm9wZXJ0eSh0ZSk7KVM9ZShTKTshUyYmVlt0ZV0mJihTPVYpO3ZhciBMPWYodGUpLHE9bnVsbDtpZihTJiYoIShxPVNbTF0pfHwhUy5oYXNPd25Qcm9wZXJ0eShMKSkmJihxPVNbTF09U1t0ZV0sTyhTJiZuKFMsdGUpKSkpe3ZhciBjZT1kZShxLEwsdGUpO1NbdGVdPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKHRoaXMsYXJndW1lbnRzKX0sbWUoU1t0ZV0scSl9cmV0dXJuIHF9ZnVuY3Rpb24gYWUoVix0ZSxkZSl7dmFyIFM9bnVsbDtmdW5jdGlvbiBMKHEpe3ZhciBaPXEuZGF0YTtyZXR1cm4gWi5hcmdzW1ouY2JJZHhdPWZ1bmN0aW9uKCl7cS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxTLmFwcGx5KFoudGFyZ2V0LFouYXJncykscX1TPUooVix0ZSxmdW5jdGlvbihxKXtyZXR1cm4gZnVuY3Rpb24oWixjZSl7dmFyIFVlPWRlKFosY2UpO3JldHVybiBVZS5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIGNlW1VlLmNiSWR4XT9oKFVlLm5hbWUsY2VbVWUuY2JJZHhdLFVlLEwpOnEuYXBwbHkoWixjZSl9fSl9ZnVuY3Rpb24gbWUoVix0ZSl7VltmKCJPcmlnaW5hbERlbGVnYXRlIildPXRlfXZhciBqZT0hMSxNZT0hMTtmdW5jdGlvbiB1dCgpe2lmKGplKXJldHVybiBNZTtqZT0hMDt0cnl7dmFyIFY9Qy5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PVYuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1WLmluZGV4T2YoIlRyaWRlbnQvIil8fC0xIT09Vi5pbmRleE9mKCJFZGdlLyIpKSYmKE1lPSEwKX1jYXRjaHt9cmV0dXJuIE1lfVpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEw9T2JqZWN0LmRlZmluZVByb3BlcnR5LFo9ZGUuc3ltYm9sLGNlPVtdLFVlPSEwPT09VltaKCJESVNBQkxFX1dSQVBQSU5HX1VOQ0FVR0hUX1BST01JU0VfUkVKRUNUSU9OIildLCRlPVooIlByb21pc2UiKSxXZT1aKCJ0aGVuIik7ZGUub25VbmhhbmRsZWRFcnJvcj1mdW5jdGlvbihldCl7aWYoZGUuc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIFJ0PWV0JiZldC5yZWplY3Rpb247UnQ/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5tZXNzYWdlOlJ0LCI7IFpvbmU6IixldC56b25lLm5hbWUsIjsgVGFzazoiLGV0LnRhc2smJmV0LnRhc2suc291cmNlLCI7IFZhbHVlOiIsUnQsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3IoZXQpfX0sZGUubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciBldD1mdW5jdGlvbigpe3ZhciBSdD1jZS5zaGlmdCgpO3RyeXtSdC56b25lLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXt0aHJvdyBSdC50aHJvd09yaWdpbmFsP1J0LnJlamVjdGlvbjpSdH0pfWNhdGNoKHd0KXshZnVuY3Rpb24oZXQpe2RlLm9uVW5oYW5kbGVkRXJyb3IoZXQpO3RyeXt2YXIgUnQ9dGVbZHRdOyJmdW5jdGlvbiI9PXR5cGVvZiBSdCYmUnQuY2FsbCh0aGlzLGV0KX1jYXRjaHt9fSh3dCl9fTtjZS5sZW5ndGg7KWV0KCl9O3ZhciBkdD1aKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEF0KGV0KXtyZXR1cm4gZXQmJmV0LnRoZW59ZnVuY3Rpb24gY24oZXQpe3JldHVybiBldH1mdW5jdGlvbiBKaShldCl7cmV0dXJuIGJlLnJlamVjdChldCl9dmFyIHhpPVooInN0YXRlIiksbW49WigidmFsdWUiKSxSbj1aKCJmaW5hbGx5IiksRHQ9WigicGFyZW50UHJvbWlzZVZhbHVlIiksZ2k9WigicGFyZW50UHJvbWlzZVN0YXRlIiksVW49bnVsbCxWdD0hMTtmdW5jdGlvbiB3bihldCxSdCl7cmV0dXJuIGZ1bmN0aW9uKHd0KXt0cnl7Z3IoZXQsUnQsd3QpfWNhdGNoKEtlKXtncihldCwhMSxLZSl9fX12YXIgT249ZnVuY3Rpb24oKXt2YXIgZXQ9ITE7cmV0dXJuIGZ1bmN0aW9uKHd0KXtyZXR1cm4gZnVuY3Rpb24oKXtldHx8KGV0PSEwLHd0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sa249WigiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIGdyKGV0LFJ0LHd0KXt2YXIgS2U9T24oKTtpZihldD09PXd0KXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiKTtpZihldFt4aV09PT1Vbil7dmFyIFh0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIHd0fHwiZnVuY3Rpb24iPT10eXBlb2Ygd3QpJiYoWHQ9d3QmJnd0LnRoZW4pfWNhdGNoKHNpKXtyZXR1cm4gS2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpLGV0fWlmKFJ0IT09VnQmJnd0IGluc3RhbmNlb2YgYmUmJnd0Lmhhc093blByb3BlcnR5KHhpKSYmd3QuaGFzT3duUHJvcGVydHkobW4pJiZ3dFt4aV0hPT1Vbilxcyh3dCksZ3IoZXQsd3RbeGldLHd0W21uXSk7ZWxzZSBpZihSdCE9PVZ0JiYiZnVuY3Rpb24iPT10eXBlb2YgWHQpdHJ5e1h0LmNhbGwod3QsS2Uod24oZXQsUnQpKSxLZSh3bihldCwhMSkpKX1jYXRjaChzaSl7S2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpfWVsc2V7ZXRbeGldPVJ0O3ZhciBCbj1ldFttbl07aWYoZXRbbW5dPXd0LGV0W1JuXT09PVJuJiYhMD09PVJ0JiYoZXRbeGldPWV0W2dpXSxldFttbl09ZXRbRHRdKSxSdD09PVZ0JiZ3dCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgSW49dGUuY3VycmVudFRhc2smJnRlLmN1cnJlbnRUYXNrLmRhdGEmJnRlLmN1cnJlbnRUYXNrLmRhdGEuX19jcmVhdGlvblRyYWNlX187SW4mJkwod3Qsa24se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOklufSl9Zm9yKHZhciB0aT0wO3RpPEJuLmxlbmd0aDspRHIoZXQsQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10pO2lmKDA9PUJuLmxlbmd0aCYmUnQ9PVZ0KXtldFt4aV09MDt2YXIgbmk9d3Q7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uKGV0KXtyZXR1cm4gZXQmJmV0LnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oZXQuY29uc3RydWN0b3ImJmV0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGV0KTpldD9ldC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldCl9KHd0KSsod3QmJnd0LnN0YWNrPyJcbiIrd3Quc3RhY2s6IiIpKX1jYXRjaChzaSl7bmk9c2l9VWUmJihuaS50aHJvd09yaWdpbmFsPSEwKSxuaS5yZWplY3Rpb249d3QsbmkucHJvbWlzZT1ldCxuaS56b25lPXRlLmN1cnJlbnQsbmkudGFzaz10ZS5jdXJyZW50VGFzayxjZS5wdXNoKG5pKSxkZS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIGV0fXZhciBkcj1aKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIHFzKGV0KXtpZigwPT09ZXRbeGldKXt0cnl7dmFyIFJ0PXRlW2RyXTtSdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJ0JiZSdC5jYWxsKHRoaXMse3JlamVjdGlvbjpldFttbl0scHJvbWlzZTpldH0pfWNhdGNoe31ldFt4aV09VnQ7Zm9yKHZhciB3dD0wO3d0PGNlLmxlbmd0aDt3dCsrKWV0PT09Y2Vbd3RdLnByb21pc2UmJmNlLnNwbGljZSh3dCwxKX19ZnVuY3Rpb24gRHIoZXQsUnQsd3QsS2UsWHQpe3FzKGV0KTt2YXIgQm49ZXRbeGldLEluPUJuPyJmdW5jdGlvbiI9PXR5cGVvZiBLZT9LZTpjbjoiZnVuY3Rpb24iPT10eXBlb2YgWHQ/WHQ6Smk7UnQuc2NoZWR1bGVNaWNyb1Rhc2soIlByb21pc2UudGhlbiIsZnVuY3Rpb24oKXt0cnl7dmFyIHRpPWV0W21uXSxuaT0hIXd0JiZSbj09PXd0W1JuXTtuaSYmKHd0W0R0XT10aSx3dFtnaV09Qm4pO3ZhciBzaT1SdC5ydW4oSW4sdm9pZCAwLG5pJiZJbiE9PUppJiZJbiE9PWNuP1tdOlt0aV0pO2dyKHd0LCEwLHNpKX1jYXRjaChDaSl7Z3Iod3QsITEsQ2kpfX0sd3QpfXZhciBidD1mdW5jdGlvbigpe30sX2U9Vi5BZ2dyZWdhdGVFcnJvcixiZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGV0KFJ0KXt2YXIgd3Q9dGhpcztpZighKHd0IGluc3RhbmNlb2YgZXQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7d3RbeGldPVVuLHd0W21uXT1bXTt0cnl7dmFyIEtlPU9uKCk7UnQmJlJ0KEtlKHduKHd0LCEwKSksS2Uod24od3QsVnQpKSl9Y2F0Y2goWHQpe2dyKHd0LCExLFh0KX19cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LGV0LnJlc29sdmU9ZnVuY3Rpb24oUnQpe3JldHVybiBncihuZXcgdGhpcyhudWxsKSwhMCxSdCl9LGV0LnJlamVjdD1mdW5jdGlvbihSdCl7cmV0dXJuIGdyKG5ldyB0aGlzKG51bGwpLFZ0LFJ0KX0sZXQuYW55PWZ1bmN0aW9uKFJ0KXtpZighUnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBSdFtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB3dD1bXSxLZT0wO3RyeXtmb3IodmFyIFh0PTAsQm49UnQ7WHQ8Qm4ubGVuZ3RoO1h0KyspS2UrKyx3dC5wdXNoKGV0LnJlc29sdmUoQm5bWHRdKSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBfZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUtlKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB0aT0hMSxuaT1bXTtyZXR1cm4gbmV3IGV0KGZ1bmN0aW9uKHNpLENpKXtmb3IodmFyIHlyPTA7eXI8d3QubGVuZ3RoO3lyKyspd3RbeXJdLnRoZW4oZnVuY3Rpb24oUW8pe3RpfHwodGk9ITAsc2koUW8pKX0sZnVuY3Rpb24oUW8pe25pLnB1c2goUW8pLDA9PS0tS2UmJih0aT0hMCxDaShuZXcgX2UobmksIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpKX0pfSl9LGV0LnJhY2U9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZSxYdD1uZXcgdGhpcyhmdW5jdGlvbihDaSx5cil7d3Q9Q2ksS2U9eXJ9KTtmdW5jdGlvbiBCbihDaSl7d3QoQ2kpfWZ1bmN0aW9uIEluKENpKXtLZShDaSl9Zm9yKHZhciB0aT0wLG5pPVJ0O3RpPG5pLmxlbmd0aDt0aSsrKXt2YXIgc2k9bmlbdGldO0F0KHNpKXx8KHNpPXRoaXMucmVzb2x2ZShzaSkpLHNpLnRoZW4oQm4sSW4pfXJldHVybiBYdH0sZXQuYWxsPWZ1bmN0aW9uKFJ0KXtyZXR1cm4gZXQuYWxsV2l0aENhbGxiYWNrKFJ0KX0sZXQuYWxsU2V0dGxlZD1mdW5jdGlvbihSdCl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgZXQ/dGhpczpldCkuYWxsV2l0aENhbGxiYWNrKFJ0LHt0aGVuQ2FsbGJhY2s6ZnVuY3Rpb24oS2Upe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6S2V9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKEtlKXtyZXR1cm57c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOktlfX19KX0sZXQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKFJ0LHd0KXtmb3IodmFyIEtlLFh0LEJuPW5ldyB0aGlzKGZ1bmN0aW9uKHNvLFJvKXtLZT1zbyxYdD1Sb30pLEluPTIsdGk9MCxuaT1bXSxzaT1mdW5jdGlvbihzbyl7QXQoc28pfHwoc289Q2kucmVzb2x2ZShzbykpO3ZhciBSbz10aTt0cnl7c28udGhlbihmdW5jdGlvbihacil7bmlbUm9dPXd0P3d0LnRoZW5DYWxsYmFjayhacik6WnIsMD09LS1JbiYmS2UobmkpfSxmdW5jdGlvbihacil7d3Q/KG5pW1JvXT13dC5lcnJvckNhbGxiYWNrKFpyKSwwPT0tLUluJiZLZShuaSkpOlh0KFpyKX0pfWNhdGNoKFpyKXtYdChacil9SW4rKyx0aSsrfSxDaT10aGlzLHlyPTAsUW89UnQ7eXI8UW8ubGVuZ3RoO3lyKyspc2koUW9beXJdKTtyZXR1cm4gMD09KEluLT0yKSYmS2UobmkpLEJufSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiBldH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxldC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihSdCx3dCl7dmFyIEtlLFh0PW51bGw9PT0oS2U9dGhpcy5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PUtlP3ZvaWQgMDpLZVtTeW1ib2wuc3BlY2llc107KCFYdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFh0KSYmKFh0PXRoaXMuY29uc3RydWN0b3J8fGV0KTt2YXIgQm49bmV3IFh0KGJ0KSxJbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChJbixCbixSdCx3dCk6RHIodGhpcyxJbixCbixSdCx3dCksQm59LGV0LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihSdCl7cmV0dXJuIHRoaXMudGhlbihudWxsLFJ0KX0sZXQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZT1udWxsPT09KHd0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT13dD92b2lkIDA6d3RbU3ltYm9sLnNwZWNpZXNdOyghS2V8fCJmdW5jdGlvbiIhPXR5cGVvZiBLZSkmJihLZT1ldCk7dmFyIFh0PW5ldyBLZShidCk7WHRbUm5dPVJuO3ZhciBCbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChCbixYdCxSdCxSdCk6RHIodGhpcyxCbixYdCxSdCxSdCksWHR9LGV0fSgpO2JlLnJlc29sdmU9YmUucmVzb2x2ZSxiZS5yZWplY3Q9YmUucmVqZWN0LGJlLnJhY2U9YmUucmFjZSxiZS5hbGw9YmUuYWxsO3ZhciBEZT1WWyRlXT1WLlByb21pc2U7Vi5Qcm9taXNlPWJlO3ZhciBFbj1aKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHZyKGV0KXt2YXIgUnQ9ZXQucHJvdG90eXBlLHd0PVMoUnQsInRoZW4iKTtpZighd3R8fCExIT09d3Qud3JpdGFibGUmJnd0LmNvbmZpZ3VyYWJsZSl7dmFyIEtlPVJ0LnRoZW47UnRbV2VdPUtlLGV0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFh0LEJuKXt2YXIgSW49dGhpcztyZXR1cm4gbmV3IGJlKGZ1bmN0aW9uKG5pLHNpKXtLZS5jYWxsKEluLG5pLHNpKX0pLnRoZW4oWHQsQm4pfSxldFtFbl09ITB9fXJldHVybiBkZS5wYXRjaFRoZW49dnIsRGUmJih2cihEZSksSihWLCJmZXRjaCIsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihldCl7cmV0dXJuIGZ1bmN0aW9uKFJ0LHd0KXt2YXIgS2U9ZXQuYXBwbHkoUnQsd3QpO2lmKEtlIGluc3RhbmNlb2YgYmUpcmV0dXJuIEtlO3ZhciBYdD1LZS5jb25zdHJ1Y3RvcjtyZXR1cm4gWHRbRW5dfHx2cihYdCksS2V9fShldCl9KSksUHJvbWlzZVt0ZS5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09Y2UsYmV9KSxab25lLl9fbG9hZF9wYXRjaCgidG9TdHJpbmciLGZ1bmN0aW9uKFYpe3ZhciB0ZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsZGU9ZigiT3JpZ2luYWxEZWxlZ2F0ZSIpLFM9ZigiUHJvbWlzZSIpLEw9ZigiRXJyb3IiKSxxPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMpe3ZhciAkZT10aGlzW2RlXTtpZigkZSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgJGU/dGUuY2FsbCgkZSk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCRlKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIFdlPVZbU107aWYoV2UpcmV0dXJuIHRlLmNhbGwoV2UpfWlmKHRoaXM9PT1FcnJvcil7dmFyIHJ0PVZbTF07aWYocnQpcmV0dXJuIHRlLmNhbGwocnQpfX1yZXR1cm4gdGUuY2FsbCh0aGlzKX07cVtkZV09dGUsRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPXE7dmFyIFo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpaLmNhbGwodGhpcyl9fSk7dmFyIFN0PSExO2lmKHR5cGVvZiB3aW5kb3c8InUiKXRyeXt2YXIgZ3Q9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7U3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGd0LGd0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZ3QsZ3QpfWNhdGNoe1N0PSExfXZhciBvaSxVaSx6aSxRLEYsUmU9e3VzZUc6ITB9LEFuPXt9LEV0PXt9LG9uPW5ldyBSZWdFeHAoIl4iK2QrIihcXHcrKSh0cnVlfGZhbHNlKSQiKSxDZT1mKCJwcm9wYWdhdGlvblN0b3BwZWQiKTtmdW5jdGlvbiB2dChWLHRlKXt2YXIgZGU9KHRlP3RlKFYpOlYpK3UsUz0odGU/dGUoVik6VikrYyxMPWQrZGUscT1kK1M7QW5bVl09e30sQW5bVl1bdV09TCxBbltWXVtjXT1xfWZ1bmN0aW9uIF90KFYsdGUsZGUsUyl7dmFyIEw9UyYmUy5hZGR8fG8scT1TJiZTLnJtfHxzLFo9UyYmUy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsY2U9UyYmUy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsVWU9ZihMKSwkZT0iLiIrTCsiOiIsZHQ9ZnVuY3Rpb24oUm4sRHQsZ2kpe2lmKCFSbi5pc1JlbW92ZWQpe3ZhciBVbixlaT1Sbi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIGVpJiZlaS5oYW5kbGVFdmVudCYmKFJuLmNhbGxiYWNrPWZ1bmN0aW9uKGppKXtyZXR1cm4gZWkuaGFuZGxlRXZlbnQoamkpfSxSbi5vcmlnaW5hbERlbGVnYXRlPWVpKTt0cnl7Um4uaW52b2tlKFJuLER0LFtnaV0pfWNhdGNoKGppKXtVbj1qaX12YXIgWG49Um4ub3B0aW9ucztyZXR1cm4gWG4mJiJvYmplY3QiPT10eXBlb2YgWG4mJlhuLm9uY2UmJkR0W3FdLmNhbGwoRHQsZ2kudHlwZSxSbi5vcmlnaW5hbERlbGVnYXRlP1JuLm9yaWdpbmFsRGVsZWdhdGU6Um4uY2FsbGJhY2ssWG4pLFVufX07ZnVuY3Rpb24gVHQoUm4sRHQsZ2kpe2lmKER0PUR0fHxWLmV2ZW50KXt2YXIgZWk9Um58fER0LnRhcmdldHx8VixVbj1laVtBbltEdC50eXBlXVtnaT9jOnVdXTtpZihVbil7dmFyIFhuPVtdO2lmKDE9PT1Vbi5sZW5ndGgpKFZ0PWR0KFVuWzBdLGVpLER0KSkmJlhuLnB1c2goVnQpO2Vsc2UgZm9yKHZhciBqaT1Vbi5zbGljZSgpLHduPTA7d248amkubGVuZ3RoJiYoIUR0fHwhMCE9PUR0W0NlXSk7d24rKyl7dmFyIFZ0OyhWdD1kdChqaVt3bl0sZWksRHQpKSYmWG4ucHVzaChWdCl9aWYoMT09PVhuLmxlbmd0aCl0aHJvdyBYblswXTt2YXIgT249ZnVuY3Rpb24oX2kpe3ZhciBrbj1YbltfaV07dGUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBrbn0pfTtmb3Iod249MDt3bjxYbi5sZW5ndGg7d24rKylPbih3bil9fX12YXIgQXQ9ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCExKX0sY249ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCEwKX07ZnVuY3Rpb24gSmkoUm4sRHQpe2lmKCFSbilyZXR1cm4hMTt2YXIgZ2k9ITA7RHQmJnZvaWQgMCE9PUR0LnVzZUcmJihnaT1EdC51c2VHKTt2YXIgZWk9RHQmJkR0LnZoLFVuPSEwO0R0JiZ2b2lkIDAhPT1EdC5jaGtEdXAmJihVbj1EdC5jaGtEdXApO3ZhciBYbj0hMTtEdCYmdm9pZCAwIT09RHQucnQmJihYbj1EdC5ydCk7Zm9yKHZhciBWdD1SbjtWdCYmIVZ0Lmhhc093blByb3BlcnR5KEwpOylWdD1lKFZ0KTtpZighVnQmJlJuW0xdJiYoVnQ9Um4pLCFWdHx8VnRbVWVdKXJldHVybiExO3ZhciBkcixqaT1EdCYmRHQuZXZlbnROYW1lVG9TdHJpbmcsd249e30sT249VnRbVWVdPVZ0W0xdLF9pPVZ0W2YocSldPVZ0W3FdLGtuPVZ0W2YoWildPVZ0W1pdLGdyPVZ0W2YoY2UpXT1WdFtjZV07ZnVuY3Rpb24gcXMoS2UsWHQpe3JldHVybiFTdCYmIm9iamVjdCI9PXR5cGVvZiBLZSYmS2U/ISFLZS5jYXB0dXJlOlN0JiZYdD8iYm9vbGVhbiI9PXR5cGVvZiBLZT97Y2FwdHVyZTpLZSxwYXNzaXZlOiEwfTpLZT8ib2JqZWN0Ij09dHlwZW9mIEtlJiYhMSE9PUtlLnBhc3NpdmU/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEtlKSx7cGFzc2l2ZTohMH0pOktlOntwYXNzaXZlOiEwfTpLZX1EdCYmRHQucHJlcGVuZCYmKGRyPVZ0W2YoRHQucHJlcGVuZCldPVZ0W0R0LnByZXBlbmRdKTt2YXIgRGU9Z2k/ZnVuY3Rpb24oS2Upe2lmKCF3bi5pc0V4aXN0aW5nKXJldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsd24uY2FwdHVyZT9jbjpBdCx3bi5vcHRpb25zKX06ZnVuY3Rpb24oS2Upe3JldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbj1naT9mdW5jdGlvbihLZSl7aWYoIUtlLmlzUmVtb3ZlZCl7dmFyIFh0PUFuW0tlLmV2ZW50TmFtZV0sQm49dm9pZCAwO1h0JiYoQm49WHRbS2UuY2FwdHVyZT9jOnVdKTt2YXIgSW49Qm4mJktlLnRhcmdldFtCbl07aWYoSW4pZm9yKHZhciB0aT0wO3RpPEluLmxlbmd0aDt0aSsrKWlmKEluW3RpXT09PUtlKXtJbi5zcGxpY2UodGksMSksS2UuaXNSZW1vdmVkPSEwLDA9PT1Jbi5sZW5ndGgmJihLZS5hbGxSZW1vdmVkPSEwLEtlLnRhcmdldFtCbl09bnVsbCk7YnJlYWt9fWlmKEtlLmFsbFJlbW92ZWQpcmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5jYXB0dXJlP2NuOkF0LEtlLm9wdGlvbnMpfTpmdW5jdGlvbihLZSl7cmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5pbnZva2UsS2Uub3B0aW9ucyl9LEhsPUR0JiZEdC5kaWZmP0R0LmRpZmY6ZnVuY3Rpb24oS2UsWHQpe3ZhciBCbj10eXBlb2YgWHQ7cmV0dXJuImZ1bmN0aW9uIj09PUJuJiZLZS5jYWxsYmFjaz09PVh0fHwib2JqZWN0Ij09PUJuJiZLZS5vcmlnaW5hbERlbGVnYXRlPT09WHR9LGV0PVpvbmVbZigiVU5QQVRDSEVEX0VWRU5UUyIpXSxSdD1WW2YoIlBBU1NJVkVfRVZFTlRTIildLHd0PWZ1bmN0aW9uKEtlLFh0LEJuLEluLHRpLG5pKXtyZXR1cm4gdm9pZCAwPT09dGkmJih0aT0hMSksdm9pZCAwPT09bmkmJihuaT0hMSksZnVuY3Rpb24oKXt2YXIgc2k9dGhpc3x8VixDaT1hcmd1bWVudHNbMF07RHQmJkR0LnRyYW5zZmVyRXZlbnROYW1lJiYoQ2k9RHQudHJhbnNmZXJFdmVudE5hbWUoQ2kpKTt2YXIgeXI9YXJndW1lbnRzWzFdO2lmKCF5cilyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKFgmJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT1DaSlyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBRbz0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeXIpe2lmKCF5ci5oYW5kbGVFdmVudClyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO1FvPSEwfWlmKCFlaXx8ZWkoS2UseXIsc2ksYXJndW1lbnRzKSl7dmFyIHF1PVN0JiYhIVJ0JiYtMSE9PVJ0LmluZGV4T2YoQ2kpLHNvPXFzKGFyZ3VtZW50c1syXSxxdSk7aWYoZXQpZm9yKHZhciBSbz0wO1JvPGV0Lmxlbmd0aDtSbysrKWlmKENpPT09ZXRbUm9dKXJldHVybiBxdT9LZS5jYWxsKHNpLENpLHlyLHNvKTpLZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIFpyPSEhc28mJigiYm9vbGVhbiI9PXR5cGVvZiBzb3x8c28uY2FwdHVyZSksYWc9ISghc298fCJvYmplY3QiIT10eXBlb2Ygc28pJiZzby5vbmNlLEh1ZT1ab25lLmN1cnJlbnQsd089QW5bQ2ldO3dPfHwodnQoQ2ksamkpLHdPPUFuW0NpXSk7dmFyIHM4PXdPW1pyP2M6dV0sbGc9c2lbczhdLGE4PSExO2lmKGxnKXtpZihhOD0hMCxVbilmb3IoUm89MDtSbzxsZy5sZW5ndGg7Um8rKylpZihIbChsZ1tSb10seXIpKXJldHVybn1lbHNlIGxnPXNpW3M4XT1bXTt2YXIgaVMsbDg9c2kuY29uc3RydWN0b3IubmFtZSxjOD1FdFtsOF07YzgmJihpUz1jOFtDaV0pLGlTfHwoaVM9bDgrWHQrKGppP2ppKENpKTpDaSkpLHduLm9wdGlvbnM9c28sYWcmJih3bi5vcHRpb25zLm9uY2U9ITEpLHduLnRhcmdldD1zaSx3bi5jYXB0dXJlPVpyLHduLmV2ZW50TmFtZT1DaSx3bi5pc0V4aXN0aW5nPWE4O3ZhciBWeT1naT9SZTp2b2lkIDA7VnkmJihWeS50YXNrRGF0YT13bik7dmFyIFFkPUh1ZS5zY2hlZHVsZUV2ZW50VGFzayhpUyx5cixWeSxCbixJbik7aWYod24udGFyZ2V0PW51bGwsVnkmJihWeS50YXNrRGF0YT1udWxsKSxhZyYmKHNvLm9uY2U9ITApLCFTdCYmImJvb2xlYW4iPT10eXBlb2YgUWQub3B0aW9uc3x8KFFkLm9wdGlvbnM9c28pLFFkLnRhcmdldD1zaSxRZC5jYXB0dXJlPVpyLFFkLmV2ZW50TmFtZT1DaSxRbyYmKFFkLm9yaWdpbmFsRGVsZWdhdGU9eXIpLG5pP2xnLnVuc2hpZnQoUWQpOmxnLnB1c2goUWQpLHRpKXJldHVybiBzaX19fTtyZXR1cm4gVnRbTF09d3QoT24sJGUsRGUsRW4sWG4pLGRyJiYoVnQucHJlcGVuZExpc3RlbmVyPXd0KGRyLCIucHJlcGVuZExpc3RlbmVyOiIsZnVuY3Rpb24oS2Upe3JldHVybiBkci5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbixYbiwhMCkpLFZ0W3FdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7dmFyIEJuPWFyZ3VtZW50c1syXSxJbj0hIUJuJiYoImJvb2xlYW4iPT10eXBlb2YgQm58fEJuLmNhcHR1cmUpLHRpPWFyZ3VtZW50c1sxXTtpZighdGkpcmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighZWl8fGVpKF9pLHRpLEtlLGFyZ3VtZW50cykpe3ZhciBzaSxuaT1BbltYdF07bmkmJihzaT1uaVtJbj9jOnVdKTt2YXIgQ2k9c2kmJktlW3NpXTtpZihDaSlmb3IodmFyIHlyPTA7eXI8Q2kubGVuZ3RoO3lyKyspe3ZhciBRbz1DaVt5cl07aWYoSGwoUW8sdGkpKXtpZihDaS5zcGxpY2UoeXIsMSksUW8uaXNSZW1vdmVkPSEwLDA9PT1DaS5sZW5ndGgmJihRby5hbGxSZW1vdmVkPSEwLEtlW3NpXT1udWxsLCJzdHJpbmciPT10eXBlb2YgWHQpKXt2YXIgcXU9ZCsiT05fUFJPUEVSVFkiK1h0O0tlW3F1XT1udWxsfXJldHVybiBRby56b25lLmNhbmNlbFRhc2soUW8pLFhuP0tlOnZvaWQgMH19cmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFZ0W1pdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7Zm9yKHZhciBCbj1bXSxJbj1pZShLZSxqaT9qaShYdCk6WHQpLHRpPTA7dGk8SW4ubGVuZ3RoO3RpKyspe3ZhciBuaT1Jblt0aV0sc2k9bmkub3JpZ2luYWxEZWxlZ2F0ZT9uaS5vcmlnaW5hbERlbGVnYXRlOm5pLmNhbGxiYWNrO0JuLnB1c2goc2kpfXJldHVybiBCbn0sVnRbY2VdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO2lmKFh0KXtEdCYmRHQudHJhbnNmZXJFdmVudE5hbWUmJihYdD1EdC50cmFuc2ZlckV2ZW50TmFtZShYdCkpO3ZhciBDaT1BbltYdF07aWYoQ2kpe3ZhciB5cj1DaVt1XSxRbz1DaVtjXSxxdT1LZVt5cl0sc289S2VbUW9dO2lmKHF1KWZvcih2YXIgUm89cXUuc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXRoaXNbcV0uY2FsbCh0aGlzLFh0LChacj1Sb1tJbl0pLm9yaWdpbmFsRGVsZWdhdGU/WnIub3JpZ2luYWxEZWxlZ2F0ZTpaci5jYWxsYmFjayxaci5vcHRpb25zKTtpZihzbylmb3IoUm89c28uc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXt2YXIgWnI7dGhpc1txXS5jYWxsKHRoaXMsWHQsKFpyPVJvW0luXSkub3JpZ2luYWxEZWxlZ2F0ZT9aci5vcmlnaW5hbERlbGVnYXRlOlpyLmNhbGxiYWNrLFpyLm9wdGlvbnMpfX19ZWxzZXt2YXIgQm49T2JqZWN0LmtleXMoS2UpO2ZvcihJbj0wO0luPEJuLmxlbmd0aDtJbisrKXt2YXIgdGk9Qm5bSW5dLG5pPW9uLmV4ZWModGkpLHNpPW5pJiZuaVsxXTtzaSYmInJlbW92ZUxpc3RlbmVyIiE9PXNpJiZ0aGlzW2NlXS5jYWxsKHRoaXMsc2kpfXRoaXNbY2VdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihYbilyZXR1cm4gdGhpc30sbWUoVnRbTF0sT24pLG1lKFZ0W3FdLF9pKSxnciYmbWUoVnRbY2VdLGdyKSxrbiYmbWUoVnRbWl0sa24pLCEwfWZvcih2YXIgeGk9W10sbW49MDttbjxkZS5sZW5ndGg7bW4rKyl4aVttbl09SmkoZGVbbW5dLFMpO3JldHVybiB4aX1mdW5jdGlvbiBpZShWLHRlKXtpZighdGUpe3ZhciBkZT1bXTtmb3IodmFyIFMgaW4gVil7dmFyIEw9b24uZXhlYyhTKSxxPUwmJkxbMV07aWYocSYmKCF0ZXx8cT09PXRlKSl7dmFyIFo9VltTXTtpZihaKWZvcih2YXIgY2U9MDtjZTxaLmxlbmd0aDtjZSsrKWRlLnB1c2goWltjZV0pfX1yZXR1cm4gZGV9dmFyIFVlPUFuW3RlXTtVZXx8KHZ0KHRlKSxVZT1Bblt0ZV0pO3ZhciAkZT1WW1VlW3VdXSxXZT1WW1VlW2NdXTtyZXR1cm4gJGU/V2U/JGUuY29uY2F0KFdlKTokZS5zbGljZSgpOldlP1dlLnNsaWNlKCk6W119ZnVuY3Rpb24gY3QoVix0ZSl7dmFyIGRlPVYuRXZlbnQ7ZGUmJmRlLnByb3RvdHlwZSYmdGUucGF0Y2hNZXRob2QoZGUucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLGZ1bmN0aW9uKFMpe3JldHVybiBmdW5jdGlvbihMLHEpe0xbQ2VdPSEwLFMmJlMuYXBwbHkoTCxxKX19KX1mdW5jdGlvbiBZZShWLHRlLGRlLFMsTCl7dmFyIHE9Wm9uZS5fX3N5bWJvbF9fKFMpO2lmKCF0ZVtxXSl7dmFyIFo9dGVbcV09dGVbU107dGVbU109ZnVuY3Rpb24oY2UsVWUsJGUpe3JldHVybiBVZSYmVWUucHJvdG90eXBlJiZMLmZvckVhY2goZnVuY3Rpb24oV2Upe3ZhciBydD0iIi5jb25jYXQoZGUsIi4iKS5jb25jYXQoUywiOjoiKStXZSxkdD1VZS5wcm90b3R5cGU7dHJ5e2lmKGR0Lmhhc093blByb3BlcnR5KFdlKSl7dmFyIFR0PVYuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGR0LFdlKTtUdCYmVHQudmFsdWU/KFR0LnZhbHVlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShUdC52YWx1ZSxydCksVi5fcmVkZWZpbmVQcm9wZXJ0eShVZS5wcm90b3R5cGUsV2UsVHQpKTpkdFtXZV0mJihkdFtXZV09Vi53cmFwV2l0aEN1cnJlbnRab25lKGR0W1dlXSxydCkpfWVsc2UgZHRbV2VdJiYoZHRbV2VdPVYud3JhcFdpdGhDdXJyZW50Wm9uZShkdFtXZV0scnQpKX1jYXRjaHt9fSksWi5jYWxsKHRlLGNlLFVlLCRlKX0sVi5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQodGVbU10sWil9fWZ1bmN0aW9uIHh0KFYsdGUsZGUpe2lmKCFkZXx8MD09PWRlLmxlbmd0aClyZXR1cm4gdGU7dmFyIFM9ZGUuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLnRhcmdldD09PVZ9KTtpZighU3x8MD09PVMubGVuZ3RoKXJldHVybiB0ZTt2YXIgTD1TWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIHRlLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4tMT09PUwuaW5kZXhPZihxKX0pfWZ1bmN0aW9uIGh0KFYsdGUsZGUsUyl7ViYmbGUoVix4dChWLHRlLGRlKSxTKX1mdW5jdGlvbiBzbihWKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoVikuZmlsdGVyKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUuc3RhcnRzV2l0aCgib24iKSYmdGUubGVuZ3RoPjJ9KS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiB0ZS5zdWJzdHJpbmcoMil9KX1mdW5jdGlvbiBDdChWLHRlLGRlKXt2YXIgUz1kZS5jb25maWd1cmFibGU7cmV0dXJuIGduKFYsdGUsZGU9QmUoVix0ZSxkZSksUyl9ZnVuY3Rpb24gdG4oVix0ZSl7cmV0dXJuIFYmJlZbRl0mJlZbRl1bdGVdfWZ1bmN0aW9uIEJlKFYsdGUsZGUpe3JldHVybiBPYmplY3QuaXNGcm96ZW4oZGUpfHwoZGUuY29uZmlndXJhYmxlPSEwKSxkZS5jb25maWd1cmFibGV8fCghVltGXSYmIU9iamVjdC5pc0Zyb3plbihWKSYmVWkoVixGLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLFZbRl0mJihWW0ZdW3RlXT0hMCkpLGRlfWZ1bmN0aW9uIGduKFYsdGUsZGUsUyl7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChaKXtpZighZGUuY29uZmlndXJhYmxlKXRocm93IFo7dHlwZW9mIFM+InUiP2RlbGV0ZSBkZS5jb25maWd1cmFibGU6ZGUuY29uZmlndXJhYmxlPVM7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChjZSl7dmFyIEw9ITE7aWYoKCJjcmVhdGVkQ2FsbGJhY2siPT09dGV8fCJhdHRhY2hlZENhbGxiYWNrIj09PXRlfHwiZGV0YWNoZWRDYWxsYmFjayI9PT10ZXx8ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayI9PT10ZSkmJihMPSEwKSwhTCl0aHJvdyBjZTt2YXIgcT1udWxsO3RyeXtxPUpTT04uc3RyaW5naWZ5KGRlKX1jYXRjaHtxPWRlLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciLmNvbmNhdCh0ZSwiJyB3aXRoIGRlc2NyaXB0b3IgJyIpLmNvbmNhdChxLCInIG9uIG9iamVjdCAnIikuY29uY2F0KFYsIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiKS5jb25jYXQoY2UpKX19fVpvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1zbihWKTtkZS5wYXRjaE9uUHJvcGVydGllcz1sZSxkZS5wYXRjaE1ldGhvZD1KLGRlLmJpbmRBcmd1bWVudHM9SSxkZS5wYXRjaE1hY3JvVGFzaz1hZTt2YXIgTD10ZS5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIikscT10ZS5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7VltxXSYmKFZbTF09VltxXSksVltMXSYmKHRlW0xdPXRlW3FdPVZbTF0pLGRlLnBhdGNoRXZlbnRQcm90b3R5cGU9Y3QsZGUucGF0Y2hFdmVudFRhcmdldD1fdCxkZS5pc0lFT3JFZGdlPXV0LGRlLk9iamVjdERlZmluZVByb3BlcnR5PXQsZGUuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPW4sZGUuT2JqZWN0Q3JlYXRlPWksZGUuQXJyYXlTbGljZT1yLGRlLnBhdGNoQ2xhc3M9eWUsZGUud3JhcFdpdGhDdXJyZW50Wm9uZT1wLGRlLmZpbHRlclByb3BlcnRpZXM9eHQsZGUuYXR0YWNoT3JpZ2luVG9QYXRjaGVkPW1lLGRlLl9yZWRlZmluZVByb3BlcnR5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkZS5wYXRjaENhbGxiYWNrcz1ZZSxkZS5nZXRHbG9iYWxPYmplY3RzPWZ1bmN0aW9uKCl7cmV0dXJue2dsb2JhbFNvdXJjZXM6RXQsem9uZVN5bWJvbEV2ZW50TmFtZXM6QW4sZXZlbnROYW1lczpTLGlzQnJvd3Nlcjp4ZSxpc01peDpmZSxpc05vZGU6WCxUUlVFX1NUUjpjLEZBTFNFX1NUUjp1LFpPTkVfU1lNQk9MX1BSRUZJWDpkLEFERF9FVkVOVF9MSVNURU5FUl9TVFI6byxSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOnN9fX0pO3ZhciBWLG9zPU1wKE1wKE1wKE1wKE1wKE1wKE1wKE1wKFtdLFsiYWJvcnQiLCJhbmltYXRpb25jYW5jZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9yZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5nZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5kIiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIsImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJlIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwib3JpZW50YXRpb25jaGFuZ2UiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJkb3duIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcmxvY2tjaGFuZ2UiLCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIndlYmtpdHBvaW50ZXJsb2NrZXJjaGFuZ2UiLCJwb2ludGVybG9ja2Vycm9yIiwibW96cG9pbnRlcmxvY2tlcnJvciIsIndlYmtpdHBvaW50ZXJsb2NrZXJyb3IiLCJwb2ludGVybW92ZSIsInBvaW50b3V0IiwicG9pbnRlcm92ZXIiLCJwb2ludGVydXAiLCJwcm9ncmVzcyIsInJhdGVjaGFuZ2UiLCJyZXNldCIsInJlc2l6ZSIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzZWxlY3QiLCJzZWxlY3Rpb25jaGFuZ2UiLCJzZWxlY3RzdGFydCIsInNob3ciLCJzb3J0Iiwic3RhbGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1ldXBkYXRlIiwidm9sdW1lY2hhbmdlIiwidG91Y2hjYW5jZWwiLCJ0b3VjaG1vdmUiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiLCJ0cmFuc2l0aW9uY2FuY2VsIiwidHJhbnNpdGlvbmVuZCIsIndhaXRpbmciLCJ3aGVlbCJdLCEwKSxbIndlYmdsY29udGV4dHJlc3RvcmVkIiwid2ViZ2xjb250ZXh0bG9zdCIsIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiXSwhMCksWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLCEwKSxbInRvZ2dsZSJdLCEwKSxbImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlwdGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnJlZXplIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVlbmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIiwidmlzaWJpbGl0eWNoYW5nZSIsInJlc3VtZSJdLCEwKSxbImFic29sdXRlZGV2aWNlb3JpZW50YXRpb24iLCJhZnRlcmlucHV0IiwiYWZ0ZXJwcmludCIsImFwcGluc3RhbGxlZCIsImJlZm9yZWluc3RhbGxwcm9tcHQiLCJiZWZvcmVwcmludCIsImJlZm9yZXVubG9hZCIsImRldmljZWxpZ2h0IiwiZGV2aWNlbW90aW9uIiwiZGV2aWNlb3JpZW50YXRpb24iLCJkZXZpY2VvcmllbnRhdGlvbmFic29sdXRlIiwiZGV2aWNlcHJveGltaXR5IiwiaGFzaGNoYW5nZSIsImxhbmd1YWdlY2hhbmdlIiwibWVzc2FnZSIsIm1vemJlZm9yZXBhaW50Iiwib2ZmbGluZSIsIm9ubGluZSIsInBhaW50IiwicGFnZXNob3ciLCJwYWdlaGlkZSIsInBvcHN0YXRlIiwicmVqZWN0aW9uaGFuZGxlZCIsInN0b3JhZ2UiLCJ1bmhhbmRsZWRyZWplY3Rpb24iLCJ1bmxvYWQiLCJ1c2VycHJveGltaXR5IiwidnJkaXNwbGF5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLCEwKSxbImJlZm9yZWNvcHkiLCJiZWZvcmVjdXQiLCJiZWZvcmVwYXN0ZSIsImNvcHkiLCJjdXQiLCJwYXN0ZSIsImRyYWdzdGFydCIsImxvYWRlbmQiLCJhbmltYXRpb25zdGFydCIsInNlYXJjaCIsInRyYW5zaXRpb25ydW4iLCJ0cmFuc2l0aW9uc3RhcnQiLCJ3ZWJraXRhbmltYXRpb25lbmQiLCJ3ZWJraXRhbmltYXRpb25pdGVyYXRpb24iLCJ3ZWJraXRhbmltYXRpb25zdGFydCIsIndlYmtpdHRyYW5zaXRpb25lbmQiXSwhMCksWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSwhMCk7KFY9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSlbKCJsZWdhY3lQYXRjaCIsKFYuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iKSsibGVnYWN5UGF0Y2giKV09ZnVuY3Rpb24oKXt2YXIgUz1WLlpvbmU7Uy5fX2xvYWRfcGF0Y2goImRlZmluZVByb3BlcnR5IixmdW5jdGlvbihMLHEsWil7Wi5fcmVkZWZpbmVQcm9wZXJ0eT1DdCxvaT1ab25lLl9fc3ltYm9sX18sVWk9T2JqZWN0W29pKCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksemk9T2JqZWN0W29pKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixRPU9iamVjdC5jcmVhdGUsRj1vaSgidW5jb25maWd1cmFibGVzIiksT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKFYsdGUsZGUpe2lmKHRuKFYsdGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3RlKyInIG9mICIrVik7dmFyIFM9ZGUuY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09dGUmJihkZT1CZShWLHRlLGRlKSksZ24oVix0ZSxkZSxTKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24oVix0ZSl7T2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oWil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFYsWix0ZVtaXSl9KTtmb3IodmFyIGRlPTAsUz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRlKTtkZTxTLmxlbmd0aDtkZSsrKXt2YXIgTD1TW2RlXTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlLEwpPy5lbnVtZXJhYmxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVixMLHRlW0xdKX1yZXR1cm4gVn0sT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihWLHRlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRlJiYhT2JqZWN0LmlzRnJvemVuKHRlKSYmT2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oZGUpe3RlW2RlXT1CZShWLGRlLHRlW2RlXSl9KSxRKFYsdGUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT16aShWLHRlKTtyZXR1cm4gZGUmJnRuKFYsdGUpJiYoZGUuY29uZmlndXJhYmxlPSExKSxkZX19KSxTLl9fbG9hZF9wYXRjaCgicmVnaXN0ZXJFbGVtZW50IixmdW5jdGlvbihMLHEsWil7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYicmVnaXN0ZXJFbGVtZW50ImluIFYuZG9jdW1lbnQmJnRlLnBhdGNoQ2FsbGJhY2tzKHRlLGRvY3VtZW50LCJEb2N1bWVudCIsInJlZ2lzdGVyRWxlbWVudCIsWyJjcmVhdGVkQ2FsbGJhY2siLCJhdHRhY2hlZENhbGxiYWNrIiwiZGV0YWNoZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oTCxaKX0pLFMuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldExlZ2FjeSIsZnVuY3Rpb24oTCxxLFopeyhmdW5jdGlvbihWLHRlKXt2YXIgZGU9dGUuZ2V0R2xvYmFsT2JqZWN0cygpLFM9ZGUuZXZlbnROYW1lcyxMPWRlLmdsb2JhbFNvdXJjZXMscT1kZS56b25lU3ltYm9sRXZlbnROYW1lcyxaPWRlLlRSVUVfU1RSLGNlPWRlLkZBTFNFX1NUUixVZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsV2U9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLHJ0PSJFdmVudFRhcmdldCIsZHQ9W10sVHQ9Vi53dGYsQXQ9IkFuY2hvcixBcmVhLEF1ZGlvLEJSLEJhc2UsQmFzZUZvbnQsQm9keSxCdXR0b24sQ2FudmFzLENvbnRlbnQsRExpc3QsRGlyZWN0b3J5LERpdixFbWJlZCxGaWVsZFNldCxGb250LEZvcm0sRnJhbWUsRnJhbWVTZXQsSFIsSGVhZCxIZWFkaW5nLEh0bWwsSUZyYW1lLEltYWdlLElucHV0LEtleWdlbixMSSxMYWJlbCxMZWdlbmQsTGluayxNYXAsTWFycXVlZSxNZWRpYSxNZW51LE1ldGEsTWV0ZXIsTW9kLE9MaXN0LE9iamVjdCxPcHRHcm91cCxPcHRpb24sT3V0cHV0LFBhcmFncmFwaCxQcmUsUHJvZ3Jlc3MsUXVvdGUsU2NyaXB0LFNlbGVjdCxTb3VyY2UsU3BhbixTdHlsZSxUYWJsZUNhcHRpb24sVGFibGVDZWxsLFRhYmxlQ29sLFRhYmxlLFRhYmxlUm93LFRhYmxlU2VjdGlvbixUZXh0QXJlYSxUaXRsZSxUcmFjayxVTGlzdCxVbmtub3duLFZpZGVvIi5zcGxpdCgiLCIpO1R0P2R0PUF0Lm1hcChmdW5jdGlvbihEcil7cmV0dXJuIkhUTUwiK0RyKyJFbGVtZW50In0pLmNvbmNhdChXZSk6VltydF0/ZHQucHVzaChydCk6ZHQ9V2U7Zm9yKHZhciBjbj1WLl9fWm9uZV9kaXNhYmxlX0lFX2NoZWNrfHwhMSxKaT1WLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEseGk9dGUuaXNJRU9yRWRnZSgpLFJuPSJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iLER0PSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLGdpPXtNU1BvaW50ZXJDYW5jZWw6InBvaW50ZXJjYW5jZWwiLE1TUG9pbnRlckRvd246InBvaW50ZXJkb3duIixNU1BvaW50ZXJFbnRlcjoicG9pbnRlcmVudGVyIixNU1BvaW50ZXJIb3ZlcjoicG9pbnRlcmhvdmVyIixNU1BvaW50ZXJMZWF2ZToicG9pbnRlcmxlYXZlIixNU1BvaW50ZXJNb3ZlOiJwb2ludGVybW92ZSIsTVNQb2ludGVyT3V0OiJwb2ludGVyb3V0IixNU1BvaW50ZXJPdmVyOiJwb2ludGVyb3ZlciIsTVNQb2ludGVyVXA6InBvaW50ZXJ1cCJ9LGVpPTA7ZWk8Uy5sZW5ndGg7ZWkrKyl7dmFyIGppPVVlKygoVW49U1tlaV0pK2NlKSx3bj1VZSsoVW4rWik7cVtVbl09e30scVtVbl1bY2VdPWppLHFbVW5dW1pdPXdufWZvcihlaT0wO2VpPEF0Lmxlbmd0aDtlaSsrKWZvcih2YXIgT249QXRbZWldLF9pPUxbT25dPXt9LGtuPTA7a248Uy5sZW5ndGg7a24rKyl7dmFyIFVuO19pW1VuPVNba25dXT1PbisiLmFkZEV2ZW50TGlzdGVuZXI6IitVbn12YXIgZHI9W107Zm9yKGVpPTA7ZWk8ZHQubGVuZ3RoO2VpKyspe3ZhciBxcz1WW2R0W2VpXV07ZHIucHVzaChxcyYmcXMucHJvdG90eXBlKX10ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsZHIse3ZoOmZ1bmN0aW9uKERyLF9yLGJ0LF9lKXtpZighY24mJnhpKWlmKEppKXRyeXtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9Y2F0Y2h7cmV0dXJuIERyLmFwcGx5KGJ0LF9lKSwhMX1lbHNle3ZhciBiZTtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9ZWxzZSBpZihKaSl0cnl7X3IudG9TdHJpbmcoKX1jYXRjaHtyZXR1cm4gRHIuYXBwbHkoYnQsX2UpLCExfXJldHVybiEwfSx0cmFuc2ZlckV2ZW50TmFtZTpmdW5jdGlvbihEcil7cmV0dXJuIGdpW0RyXXx8RHJ9fSksWm9uZVt0ZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISFWW3J0XX0pKEwsWiksZnVuY3Rpb24oVix0ZSl7dmFyIGRlPVYuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKCghZGUuaXNOb2RlfHxkZS5pc01peCkmJiFmdW5jdGlvbihWLHRlKXt2YXIgZGU9Vi5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYhVi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJnR5cGVvZiBFbGVtZW50PCJ1Iil7dmFyIHE9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihxJiYhcS5jb25maWd1cmFibGUpcmV0dXJuITE7aWYocSl7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBjZT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLm9uY2xpY2s7cmV0dXJuIFYuT2JqZWN0RGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siLHEpLGNlfX12YXIgVWU9dGUuWE1MSHR0cFJlcXVlc3Q7aWYoIVVlKXJldHVybiExO3ZhciAkZT0ib25yZWFkeXN0YXRlY2hhbmdlIixXZT1VZS5wcm90b3R5cGUscnQ9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV2UsJGUpO2lmKHJ0KXJldHVybiBWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxjZT0hIShkdD1uZXcgVWUpLm9ucmVhZHlzdGF0ZWNoYW5nZSxWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHJ0fHx7fSksY2U7dmFyIFR0PVYuc3ltYm9sKCJmYWtlIik7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShXZSwkZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVHRdfSxzZXQ6ZnVuY3Rpb24oeGkpe3RoaXNbVHRdPXhpfX0pO3ZhciBkdCxBdD1mdW5jdGlvbigpe307cmV0dXJuKGR0PW5ldyBVZSkub25yZWFkeXN0YXRlY2hhbmdlPUF0LGNlPWR0W1R0XT09PUF0LGR0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGNlfShWLHRlKSl7dmFyIHE9dHlwZW9mIFdlYlNvY2tldDwidSI7KGZ1bmN0aW9uKFYpe2Zvcih2YXIgdGU9Vi5zeW1ib2woInVuYm91bmQiKSxkZT1mdW5jdGlvbihMKXt2YXIgcT1vc1tMXSxaPSJvbiIrcTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIocSxmdW5jdGlvbihjZSl7dmFyICRlLFdlLFVlPWNlLnRhcmdldDtmb3IoV2U9VWU/VWUuY29uc3RydWN0b3IubmFtZSsiLiIrWjoidW5rbm93bi4iK1o7VWU7KVVlW1pdJiYhVWVbWl1bdGVdJiYoKCRlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShVZVtaXSxXZSkpW3RlXT1VZVtaXSxVZVtaXT0kZSksVWU9VWUucGFyZW50RWxlbWVudH0sITApfSxTPTA7Uzxvcy5sZW5ndGg7UysrKWRlKFMpfSkoViksVi5wYXRjaENsYXNzKCJYTUxIdHRwUmVxdWVzdCIpLHEmJmZ1bmN0aW9uKFYsdGUpe3ZhciBkZT1WLmdldEdsb2JhbE9iamVjdHMoKSxTPWRlLkFERF9FVkVOVF9MSVNURU5FUl9TVFIsTD1kZS5SRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSLHE9dGUuV2ViU29ja2V0O3RlLkV2ZW50VGFyZ2V0fHxWLnBhdGNoRXZlbnRUYXJnZXQodGUsVixbcS5wcm90b3R5cGVdKSx0ZS5XZWJTb2NrZXQ9ZnVuY3Rpb24oVWUsJGUpe3ZhciBydCxkdCxXZT1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IHEoVWUsJGUpOm5ldyBxKFVlKSxUdD1WLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXZSwib25tZXNzYWdlIik7cmV0dXJuIFR0JiYhMT09PVR0LmNvbmZpZ3VyYWJsZT8ocnQ9Vi5PYmplY3RDcmVhdGUoV2UpLGR0PVdlLFtTLEwsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oQXQpe3J0W0F0XT1mdW5jdGlvbigpe3ZhciBjbj1WLkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKEF0PT09U3x8QXQ9PT1MKXt2YXIgSmk9Y24ubGVuZ3RoPjA/Y25bMF06dm9pZCAwO2lmKEppKXt2YXIgeGk9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrSmkpO1dlW3hpXT1ydFt4aV19fXJldHVybiBXZVtBdF0uYXBwbHkoV2UsY24pfX0pKTpydD1XZSxWLnBhdGNoT25Qcm9wZXJ0aWVzKHJ0LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0sZHQpLHJ0fTt2YXIgWj10ZS5XZWJTb2NrZXQ7Zm9yKHZhciBjZSBpbiBxKVpbY2VdPXFbY2VdfShWLHRlKSxab25lW1Yuc3ltYm9sKCJwYXRjaEV2ZW50cyIpXT0hMH19KFosTCl9KX07dmFyIFdzPWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gVmwoVix0ZSxkZSxTKXt2YXIgTD1udWxsLHE9bnVsbDtkZSs9Uzt2YXIgWj17fTtmdW5jdGlvbiBjZSgkZSl7dmFyIFdlPSRlLmRhdGE7cmV0dXJuIFdlLmFyZ3NbMF09ZnVuY3Rpb24oKXtyZXR1cm4gJGUuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sV2UuaGFuZGxlSWQ9TC5hcHBseShWLFdlLmFyZ3MpLCRlfWZ1bmN0aW9uIFVlKCRlKXtyZXR1cm4gcS5jYWxsKFYsJGUuZGF0YS5oYW5kbGVJZCl9TD1KKFYsdGUrPVMsZnVuY3Rpb24oJGUpe3JldHVybiBmdW5jdGlvbihXZSxydCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WzBdKXt2YXIgZHQ9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PVMsZGVsYXk6IlRpbWVvdXQiPT09U3x8IkludGVydmFsIj09PVM/cnRbMV18fDA6dm9pZCAwLGFyZ3M6cnR9LFR0PXJ0WzBdO3J0WzBdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBUdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtkdC5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBkdC5oYW5kbGVJZD9kZWxldGUgWltkdC5oYW5kbGVJZF06ZHQuaGFuZGxlSWQmJihkdC5oYW5kbGVJZFtXc109bnVsbCkpfX07dmFyIEF0PWgodGUscnRbMF0sZHQsY2UsVWUpO2lmKCFBdClyZXR1cm4gQXQ7dmFyIGNuPUF0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjbj9aW2NuXT1BdDpjbiYmKGNuW1dzXT1BdCksY24mJmNuLnJlZiYmY24udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi51bnJlZiYmKEF0LnJlZj1jbi5yZWYuYmluZChjbiksQXQudW5yZWY9Y24udW5yZWYuYmluZChjbikpLCJudW1iZXIiPT10eXBlb2YgY258fGNuP2NuOkF0fXJldHVybiAkZS5hcHBseShWLHJ0KX19KSxxPUooVixkZSxmdW5jdGlvbigkZSl7cmV0dXJuIGZ1bmN0aW9uKFdlLHJ0KXt2YXIgVHQsZHQ9cnRbMF07Im51bWJlciI9PXR5cGVvZiBkdD9UdD1aW2R0XTooVHQ9ZHQmJmR0W1dzXSl8fChUdD1kdCksVHQmJiJzdHJpbmciPT10eXBlb2YgVHQudHlwZT8ibm90U2NoZWR1bGVkIiE9PVR0LnN0YXRlJiYoVHQuY2FuY2VsRm4mJlR0LmRhdGEuaXNQZXJpb2RpY3x8MD09PVR0LnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgZHQ/ZGVsZXRlIFpbZHRdOmR0JiYoZHRbV3NdPW51bGwpLFR0LnpvbmUuY2FuY2VsVGFzayhUdCkpOiRlLmFwcGx5KFYscnQpfX0pfVpvbmUuX19sb2FkX3BhdGNoKCJsZWdhY3kiLGZ1bmN0aW9uKFYpe3ZhciB0ZT1WW1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07dGUmJnRlKCl9KSxab25lLl9fbG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLGZ1bmN0aW9uKFYsdGUsZGUpe2RlLnBhdGNoTWV0aG9kKFYsInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbihTKXtyZXR1cm4gZnVuY3Rpb24oTCxxKXt0ZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIscVswXSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihWKXt2YXIgZGU9ImNsZWFyIjtWbChWLCJzZXQiLGRlLCJUaW1lb3V0IiksVmwoViwic2V0IixkZSwiSW50ZXJ2YWwiKSxWbChWLCJzZXQiLGRlLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKFYpe1ZsKFYsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihWLHRlKXtmb3IodmFyIGRlPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sUz0wO1M8ZGUubGVuZ3RoO1MrKylKKFYsZGVbU10sZnVuY3Rpb24ocSxaLGNlKXtyZXR1cm4gZnVuY3Rpb24oVWUsJGUpe3JldHVybiB0ZS5jdXJyZW50LnJ1bihxLFYsJGUsY2UpfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihWLHRlLGRlKXsoZnVuY3Rpb24oVix0ZSl7dGUucGF0Y2hFdmVudFByb3RvdHlwZShWLHRlKX0pKFYsZGUpLGZ1bmN0aW9uKFYsdGUpe2lmKCFab25lW3RlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSl7Zm9yKHZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCksUz1kZS5ldmVudE5hbWVzLEw9ZGUuem9uZVN5bWJvbEV2ZW50TmFtZXMscT1kZS5UUlVFX1NUUixaPWRlLkZBTFNFX1NUUixjZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsVWU9MDtVZTxTLmxlbmd0aDtVZSsrKXt2YXIgJGU9U1tVZV0sZHQ9Y2UrKCRlK1opLFR0PWNlKygkZStxKTtMWyRlXT17fSxMWyRlXVtaXT1kdCxMWyRlXVtxXT1UdH12YXIgQXQ9Vi5FdmVudFRhcmdldDtBdCYmQXQucHJvdG90eXBlJiZ0ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsW0F0JiZBdC5wcm90b3R5cGVdKX19KFYsZGUpO3ZhciBTPVYuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtTJiZTLnByb3RvdHlwZSYmZGUucGF0Y2hFdmVudFRhcmdldChWLGRlLFtTLnByb3RvdHlwZV0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLGZ1bmN0aW9uKFYsdGUsZGUpe3llKCJNdXRhdGlvbk9ic2VydmVyIikseWUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe2lmKCghWHx8ZmUpJiYhWm9uZVtWLnN5bWJvbCgicGF0Y2hFdmVudHMiKV0pe3ZhciBkZT10ZS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXMsUz1bXTtpZih4ZSl7dmFyIEw9d2luZG93O1M9Uy5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1lbnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTt2YXIgcT1mdW5jdGlvbigpe3RyeXt2YXIgVj1DLm5hdmlnYXRvci51c2VyQWdlbnQ7aWYoLTEhPT1WLmluZGV4T2YoIk1TSUUgIil8fC0xIT09Vi5pbmRleE9mKCJUcmlkZW50LyIpKXJldHVybiEwfWNhdGNoe31yZXR1cm4hMX0oKT9be3RhcmdldDpMLGlnbm9yZVByb3BlcnRpZXM6WyJlcnJvciJdfV06W107aHQoTCxzbihMKSxkZSYmZGUuY29uY2F0KHEpLGUoTCkpfVM9Uy5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKyl7dmFyIGNlPXRlW1NbWl1dO2NlJiZjZS5wcm90b3R5cGUmJmh0KGNlLnByb3RvdHlwZSxzbihjZS5wcm90b3R5cGUpLGRlKX19fShkZSxWKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJjdXN0b21FbGVtZW50cyIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiZWLmN1c3RvbUVsZW1lbnRzJiYiY3VzdG9tRWxlbWVudHMiaW4gViYmdGUucGF0Y2hDYWxsYmFja3ModGUsVi5jdXN0b21FbGVtZW50cywiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLFsiY29ubmVjdGVkQ2FsbGJhY2siLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImFkb3B0ZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oVixkZSl9KSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIixmdW5jdGlvbihWLHRlKXshZnVuY3Rpb24oJGUpe3ZhciBXZT0kZS5YTUxIdHRwUmVxdWVzdDtpZihXZSl7dmFyIHJ0PVdlLnByb3RvdHlwZSxUdD1ydFthXSxBdD1ydFtsXTtpZighVHQpe3ZhciBjbj0kZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2lmKGNuKXt2YXIgSmk9Y24ucHJvdG90eXBlO1R0PUppW2FdLEF0PUppW2xdfX12YXIgeGk9InJlYWR5c3RhdGVjaGFuZ2UiLG1uPSJzY2hlZHVsZWQiLGVpPUoocnQsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtyZXR1cm4gT25bU109MD09X2lbMl0sT25bWl09X2lbMV0sZWkuYXBwbHkoT24sX2kpfX0pLFhuPWYoImZldGNoVGFza0Fib3J0aW5nIiksVnQ9ZigiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLGppPUoocnQsInNlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtpZighMD09PXRlLmN1cnJlbnRbVnRdfHxPbltTXSlyZXR1cm4gamkuYXBwbHkoT24sX2kpO3ZhciBrbj17dGFyZ2V0Ok9uLHVybDpPbltaXSxpc1BlcmlvZGljOiExLGFyZ3M6X2ksYWJvcnRlZDohMX0sZ3I9aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsRHQsa24sUm4sZ2kpO09uJiYhMD09PU9uW2NlXSYmIWtuLmFib3J0ZWQmJmdyLnN0YXRlPT09bW4mJmdyLmludm9rZSgpfX0pLHduPUoocnQsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPbixfaSl7dmFyIGtuPWZ1bmN0aW9uKE9uKXtyZXR1cm4gT25bZGVdfShPbik7aWYoa24mJiJzdHJpbmciPT10eXBlb2Yga24udHlwZSl7aWYobnVsbD09a24uY2FuY2VsRm58fGtuLmRhdGEmJmtuLmRhdGEuYWJvcnRlZClyZXR1cm47a24uem9uZS5jYW5jZWxUYXNrKGtuKX1lbHNlIGlmKCEwPT09dGUuY3VycmVudFtYbl0pcmV0dXJuIHduLmFwcGx5KE9uLF9pKX19KX1mdW5jdGlvbiBSbihPbil7dmFyIF9pPU9uLmRhdGEsa249X2kudGFyZ2V0O2tuW3FdPSExLGtuW2NlXT0hMTt2YXIgZ3I9a25bTF07VHR8fChUdD1rblthXSxBdD1rbltsXSksZ3ImJkF0LmNhbGwoa24seGksZ3IpO3ZhciBkcj1rbltMXT1mdW5jdGlvbigpe2lmKGtuLnJlYWR5U3RhdGU9PT1rbi5ET05FKWlmKCFfaS5hYm9ydGVkJiZrbltxXSYmT24uc3RhdGU9PT1tbil7dmFyIERyPWtuW3RlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtpZigwIT09a24uc3RhdHVzJiZEciYmRHIubGVuZ3RoPjApe3ZhciBfcj1Pbi5pbnZva2U7T24uaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBidD1rblt0ZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0sX2U9MDtfZTxidC5sZW5ndGg7X2UrKylidFtfZV09PT1PbiYmYnQuc3BsaWNlKF9lLDEpOyFfaS5hYm9ydGVkJiZPbi5zdGF0ZT09PW1uJiZfci5jYWxsKE9uKX0sRHIucHVzaChPbil9ZWxzZSBPbi5pbnZva2UoKX1lbHNlIV9pLmFib3J0ZWQmJiExPT09a25bcV0mJihrbltjZV09ITApfTtyZXR1cm4gVHQuY2FsbChrbix4aSxkciksa25bZGVdfHwoa25bZGVdPU9uKSxqaS5hcHBseShrbixfaS5hcmdzKSxrbltxXT0hMCxPbn1mdW5jdGlvbiBEdCgpe31mdW5jdGlvbiBnaShPbil7dmFyIF9pPU9uLmRhdGE7cmV0dXJuIF9pLmFib3J0ZWQ9ITAsd24uYXBwbHkoX2kudGFyZ2V0LF9pLmFyZ3MpfX0oVik7dmFyIGRlPWYoInhoclRhc2siKSxTPWYoInhoclN5bmMiKSxMPWYoInhockxpc3RlbmVyIikscT1mKCJ4aHJTY2hlZHVsZWQiKSxaPWYoInhoclVSTCIpLGNlPWYoInhockVycm9yQmVmb3JlU2NoZWR1bGVkIil9KSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLGZ1bmN0aW9uKFYpe1YubmF2aWdhdG9yJiZWLm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24oVix0ZSl7Zm9yKHZhciBkZT1WLmNvbnN0cnVjdG9yLm5hbWUsUz1mdW5jdGlvbihxKXt2YXIgJGUsV2UsWj10ZVtxXSxjZT1WW1pdO2lmKGNlKXtpZighTyhuKFYsWikpKXJldHVybiJjb250aW51ZSI7VltaXT0oV2U9ZnVuY3Rpb24oKXtyZXR1cm4gJGUuYXBwbHkodGhpcyxJKGFyZ3VtZW50cyxkZSsiLiIrWikpfSxtZShXZSwkZT1jZSksV2UpfX0sTD0wO0w8dGUubGVuZ3RoO0wrKylTKEwpfShWLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihWLHRlKXtmdW5jdGlvbiBkZShTKXtyZXR1cm4gZnVuY3Rpb24oTCl7aWUoVixTKS5mb3JFYWNoKGZ1bmN0aW9uKFope3ZhciBjZT1WLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihjZSl7dmFyIFVlPW5ldyBjZShTLHtwcm9taXNlOkwucHJvbWlzZSxyZWFzb246TC5yZWplY3Rpb259KTtaLmludm9rZShVZSl9fSl9fVYuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYodGVbZigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09ZGUoInVuaGFuZGxlZHJlamVjdGlvbiIpLHRlW2YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPWRlKCJyZWplY3Rpb25oYW5kbGVkIikpfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKG4pOm4oKX0pO2Z1bmN0aW9uIGJuKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIGNnKG4pe2xldCBlPW4oaT0+e0Vycm9yLmNhbGwoaSksaS5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfXZhciByUz1jZyhuPT5mdW5jdGlvbihlKXtuKHRoaXMpLHRoaXMubWVzc2FnZT1lP2Ake2UubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuJHtlLm1hcCgoaSxyKT0+YCR7cisxfSkgJHtpLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1lfSk7ZnVuY3Rpb24gQmgobix0KXtpZihuKXtsZXQgZT1uLmluZGV4T2YodCk7MDw9ZSYmbi5zcGxpY2UoZSwxKX19dmFyIHZuPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5pdGlhbFRlYXJkb3duPXQsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IHQ7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtsZXR7X3BhcmVudGFnZTplfT10aGlzO2lmKGUpaWYodGhpcy5fcGFyZW50YWdlPW51bGwsQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IG8gb2YgZSlvLnJlbW92ZSh0aGlzKTtlbHNlIGUucmVtb3ZlKHRoaXMpO2xldHtpbml0aWFsVGVhcmRvd246aX09dGhpcztpZihibihpKSl0cnl7aSgpfWNhdGNoKG8pe3Q9byBpbnN0YW5jZW9mIHJTP28uZXJyb3JzOltvXX1sZXR7X2ZpbmFsaXplcnM6cn09dGhpcztpZihyKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGxldCBvIG9mIHIpdHJ5e3A4KG8pfWNhdGNoKHMpe3Q9dD8/W10scyBpbnN0YW5jZW9mIHJTP3Q9Wy4uLnQsLi4ucy5lcnJvcnNdOnQucHVzaChzKX19aWYodCl0aHJvdyBuZXcgclModCl9fWFkZCh0KXt2YXIgZTtpZih0JiZ0IT09dGhpcylpZih0aGlzLmNsb3NlZClwOCh0KTtlbHNle2lmKHQgaW5zdGFuY2VvZiB2bil7aWYodC5jbG9zZWR8fHQuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47dC5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oZT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09ZT9lOltdKS5wdXNoKHQpfX1faGFzUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7cmV0dXJuIGU9PT10fHxBcnJheS5pc0FycmF5KGUpJiZlLmluY2x1ZGVzKHQpfV9hZGRQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpczt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShlKT8oZS5wdXNoKHQpLGUpOmU/W2UsdF06dH1fcmVtb3ZlUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7ZT09PXQ/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShlKSYmQmgoZSx0KX1yZW1vdmUodCl7bGV0e19maW5hbGl6ZXJzOmV9PXRoaXM7ZSYmQmgoZSx0KSx0IGluc3RhbmNlb2Ygdm4mJnQuX3JlbW92ZVBhcmVudCh0aGlzKX19O3ZuLkVNUFRZPSgoKT0+e2xldCBuPW5ldyB2bjtyZXR1cm4gbi5jbG9zZWQ9ITAsbn0pKCk7dmFyIEVPPXZuLkVNUFRZO2Z1bmN0aW9uIG9TKG4pe3JldHVybiBuIGluc3RhbmNlb2Ygdm58fG4mJiJjbG9zZWQiaW4gbiYmYm4obi5yZW1vdmUpJiZibihuLmFkZCkmJmJuKG4udW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHA4KG4pe2JuKG4pP24oKTpuLnVuc3Vic2NyaWJlKCl9dmFyIFVsPXtvblVuaGFuZGxlZEVycm9yOm51bGwsb25TdG9wcGVkTm90aWZpY2F0aW9uOm51bGwsUHJvbWlzZTp2b2lkIDAsdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzohMSx1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ITF9LHVnPXtzZXRUaW1lb3V0KG4sdCwuLi5lKXtsZXR7ZGVsZWdhdGU6aX09dWc7cmV0dXJuIGk/LnNldFRpbWVvdXQ/aS5zZXRUaW1lb3V0KG4sdCwuLi5lKTpzZXRUaW1lb3V0KG4sdCwuLi5lKX0sY2xlYXJUaW1lb3V0KG4pe2xldHtkZWxlZ2F0ZTp0fT11ZztyZXR1cm4odD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIHNTKG4pe3VnLnNldFRpbWVvdXQoKCk9PntsZXR7b25VbmhhbmRsZWRFcnJvcjp0fT1VbDtpZighdCl0aHJvdyBuO3Qobil9KX1mdW5jdGlvbiB6bCgpe312YXIgaDg9VE8oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIFRPKG4sdCxlKXtyZXR1cm57a2luZDpuLHZhbHVlOnQsZXJyb3I6ZX19dmFyIFZoPW51bGw7ZnVuY3Rpb24gZGcobil7aWYoVWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7bGV0IHQ9IVZoO2lmKHQmJihWaD17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLG4oKSx0KXtsZXR7ZXJyb3JUaHJvd246ZSxlcnJvcjppfT1WaDtpZihWaD1udWxsLGUpdGhyb3cgaX19ZWxzZSBuKCl9dmFyIEhoPWNsYXNzIGV4dGVuZHMgdm57Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSx0Pyh0aGlzLmRlc3RpbmF0aW9uPXQsb1ModCkmJnQuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPVF1ZX1zdGF0aWMgY3JlYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGpsKHQsZSxpKX1uZXh0KHQpe3RoaXMuaXNTdG9wcGVkP0FPKFRPKCJOIix0LHZvaWQgMCksdGhpcyk6dGhpcy5fbmV4dCh0KX1lcnJvcih0KXt0aGlzLmlzU3RvcHBlZD9BTyhUTygiRSIsdm9pZCAwLHQpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcih0KSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9BTyhoOCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dCh0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9X2Vycm9yKHQpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19LFl1ZT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZDtmdW5jdGlvbiBETyhuLHQpe3JldHVybiBZdWUuY2FsbChuLHQpfXZhciBqbD1jbGFzcyBleHRlbmRzIEhoe2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcjtpZihzdXBlcigpLGJuKHQpfHwhdClyPXtuZXh0OnQ/P3ZvaWQgMCxlcnJvcjplPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfTtlbHNle2xldCBvO3RoaXMmJlVsLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8obz1PYmplY3QuY3JlYXRlKHQpLG8udW5zdWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoKSxyPXtuZXh0OnQubmV4dCYmRE8odC5uZXh0LG8pLGVycm9yOnQuZXJyb3ImJkRPKHQuZXJyb3IsbyksY29tcGxldGU6dC5jb21wbGV0ZSYmRE8odC5jb21wbGV0ZSxvKX0pOnI9dH10aGlzLmRlc3RpbmF0aW9uPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBhcnRpYWxPYnNlcnZlcj10fW5leHQodCl7bGV0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUubmV4dCl0cnl7ZS5uZXh0KHQpfWNhdGNoKGkpe2FTKGkpfX1lcnJvcih0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5lcnJvcil0cnl7ZS5lcnJvcih0KX1jYXRjaChpKXthUyhpKX1lbHNlIGFTKHQpfWNvbXBsZXRlKCl7bGV0e3BhcnRpYWxPYnNlcnZlcjp0fT10aGlzO2lmKHQuY29tcGxldGUpdHJ5e3QuY29tcGxldGUoKX1jYXRjaChlKXthUyhlKX19fShyKX19O2Z1bmN0aW9uIGFTKG4pe1VsLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24obil7VWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmVmgmJihWaC5lcnJvclRocm93bj0hMCxWaC5lcnJvcj1uKX0obik6c1Mobil9ZnVuY3Rpb24gQU8obix0KXtsZXR7b25TdG9wcGVkTm90aWZpY2F0aW9uOmV9PVVsO2UmJnVnLnNldFRpbWVvdXQoKCk9PmUobix0KSl9dmFyIFF1ZT17Y2xvc2VkOiEwLG5leHQ6emwsZXJyb3I6ZnVuY3Rpb24obil7dGhyb3cgbn0sY29tcGxldGU6emx9LHBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBNcyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBSTyhuKXtyZXR1cm4gMD09PW4ubGVuZ3RoP01zOjE9PT1uLmxlbmd0aD9uWzBdOmZ1bmN0aW9uKGUpe3JldHVybiBuLnJlZHVjZSgoaSxyKT0+cihpKSxlKX19dmFyIFF0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZSYmKHRoaXMuX3N1YnNjcmliZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfXN1YnNjcmliZShlLGkscil7bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4gaW5zdGFuY2VvZiBIaHx8ZnVuY3Rpb24obil7cmV0dXJuIG4mJmJuKG4ubmV4dCkmJmJuKG4uZXJyb3IpJiZibihuLmNvbXBsZXRlKX0obikmJm9TKG4pfShlKT9lOm5ldyBqbChlLGkscik7cmV0dXJuIGRnKCgpPT57bGV0e29wZXJhdG9yOnMsc291cmNlOmF9PXRoaXM7by5hZGQocz9zLmNhbGwobyxhKTphP3RoaXMuX3N1YnNjcmliZShvKTp0aGlzLl90cnlTdWJzY3JpYmUobykpfSksb31fdHJ5U3Vic2NyaWJlKGUpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGUpfWNhdGNoKGkpe2UuZXJyb3IoaSl9fWZvckVhY2goZSxpKXtyZXR1cm4gbmV3KGk9XzgoaSkpKChyLG8pPT57bGV0IHM9bmV3IGpsKHtuZXh0OmE9Pnt0cnl7ZShhKX1jYXRjaChsKXtvKGwpLHMudW5zdWJzY3JpYmUoKX19LGVycm9yOm8sY29tcGxldGU6cn0pO3RoaXMuc3Vic2NyaWJlKHMpfSl9X3N1YnNjcmliZShlKXt2YXIgaTtyZXR1cm4gbnVsbD09PShpPXRoaXMuc291cmNlKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdWJzY3JpYmUoZSl9W3BnXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uZSl7cmV0dXJuIFJPKGUpKHRoaXMpfXRvUHJvbWlzZShlKXtyZXR1cm4gbmV3KGU9XzgoZSkpKChpLHIpPT57bGV0IG87dGhpcy5zdWJzY3JpYmUocz0+bz1zLHM9PnIocyksKCk9PmkobykpfSl9fXJldHVybiBuLmNyZWF0ZT10PT5uZXcgbih0KSxufSkoKTtmdW5jdGlvbiBfOChuKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PW4/P1VsLlByb21pc2UpJiZ2b2lkIDAhPT10P3Q6UHJvbWlzZX1mdW5jdGlvbiBPTyhuKXtyZXR1cm4gYm4obj8ubGlmdCl9ZnVuY3Rpb24gcXQobil7cmV0dXJuIHQ9PntpZihPTyh0KSlyZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gbihlLHRoaXMpfWNhdGNoKGkpe3RoaXMuZXJyb3IoaSl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTHQobix0LGUsaSxyKXtyZXR1cm4gbmV3IEh5KG4sdCxlLGkscil9dmFyIGtPLEh5PWNsYXNzIGV4dGVuZHMgSGh7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQpLHRoaXMub25GaW5hbGl6ZT1vLHRoaXMuc2hvdWxkVW5zdWJzY3JpYmU9cyx0aGlzLl9uZXh0PWU/ZnVuY3Rpb24oYSl7dHJ5e2UoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX19OnN1cGVyLl9uZXh0LHRoaXMuX2Vycm9yPXI/ZnVuY3Rpb24oYSl7dHJ5e3IoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9lcnJvcix0aGlzLl9jb21wbGV0ZT1pP2Z1bmN0aW9uKCl7dHJ5e2koKX1jYXRjaChhKXt0LmVycm9yKGEpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2NvbXBsZXRlfXVuc3Vic2NyaWJlKCl7dmFyIHQ7aWYoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmV8fHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSl7bGV0e2Nsb3NlZDplfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJlKCksIWUmJihudWxsPT09KHQ9dGhpcy5vbkZpbmFsaXplKXx8dm9pZCAwPT09dHx8dC5jYWxsKHRoaXMpKX19fSxVeT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnNvdXJjZT10LHRoaXMuc3ViamVjdEZhY3Rvcnk9ZSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsT08odCkmJih0aGlzLmxpZnQ9dC5saWZ0KX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9Z2V0U3ViamVjdCgpe2xldCB0PXRoaXMuX3N1YmplY3Q7cmV0dXJuKCF0fHx0LmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2xldHtfY29ubmVjdGlvbjp0fT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLHQ/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nvbm5lY3Rpb247aWYoIXQpe3Q9dGhpcy5fY29ubmVjdGlvbj1uZXcgdm47bGV0IGU9dGhpcy5nZXRTdWJqZWN0KCk7dC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxlLmNvbXBsZXRlKCl9LGk9Pnt0aGlzLl90ZWFyZG93bigpLGUuZXJyb3IoaSl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLHQuY2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9dm4uRU1QVFkpfXJldHVybiB0fXJlZkNvdW50KCl7cmV0dXJuIHF0KChuLHQpPT57bGV0IGU9bnVsbDtuLl9yZWZDb3VudCsrO2xldCBpPUx0KHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKCk9PntpZighbnx8bi5fcmVmQ291bnQ8PTB8fDA8LS1uLl9yZWZDb3VudClyZXR1cm4gdm9pZChlPW51bGwpO2xldCByPW4uX2Nvbm5lY3Rpb24sbz1lO2U9bnVsbCxyJiYoIW98fHI9PT1vKSYmci51bnN1YnNjcmliZSgpLHQudW5zdWJzY3JpYmUoKX0pO24uc3Vic2NyaWJlKGkpLGkuY2xvc2VkfHwoZT1uLmNvbm5lY3QoKSl9KSh0aGlzKX19LGhnPXtzY2hlZHVsZShuKXtsZXQgdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1jYW5jZWxBbmltYXRpb25GcmFtZSx7ZGVsZWdhdGU6aX09aGc7aSYmKHQ9aS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1pLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtsZXQgcj10KG89PntlPXZvaWQgMCxuKG8pfSk7cmV0dXJuIG5ldyB2bigoKT0+ZT8uKHIpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1oZztyZXR1cm4odD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09aGc7cmV0dXJuKHQ/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4ubil9LGRlbGVnYXRlOnZvaWQgMH0seTg9Y2cobj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9KSxUZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoZSl7bGV0IGk9bmV3IGxTKHRoaXMsdGhpcyk7cmV0dXJuIGkub3BlcmF0b3I9ZSxpfV90aHJvd0lmQ2xvc2VkKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHk4fW5leHQoZSl7ZGcoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmN1cnJlbnRPYnNlcnZlcnN8fCh0aGlzLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVycykpO2ZvcihsZXQgaSBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpaS5uZXh0KGUpfX0pfWVycm9yKGUpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93bkVycm9yPWU7bGV0e29ic2VydmVyczppfT10aGlzO2Zvcig7aS5sZW5ndGg7KWkuc2hpZnQoKS5lcnJvcihlKX19KX1jb21wbGV0ZSgpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7bGV0e29ic2VydmVyczplfT10aGlzO2Zvcig7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jb21wbGV0ZSgpfX0pfXVuc3Vic2NyaWJlKCl7dGhpcy5pc1N0b3BwZWQ9dGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGx9Z2V0IG9ic2VydmVkKCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT10aGlzLm9ic2VydmVycyl8fHZvaWQgMD09PWU/dm9pZCAwOmUubGVuZ3RoKT4wfV90cnlTdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxzdXBlci5fdHJ5U3Vic2NyaWJlKGUpfV9zdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpfV9pbm5lclN1YnNjcmliZShlKXtsZXR7aGFzRXJyb3I6aSxpc1N0b3BwZWQ6cixvYnNlcnZlcnM6b309dGhpcztyZXR1cm4gaXx8cj9FTzoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsby5wdXNoKGUpLG5ldyB2bigoKT0+e3RoaXMuY3VycmVudE9ic2VydmVycz1udWxsLEJoKG8sZSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSl7bGV0e2hhc0Vycm9yOmksdGhyb3duRXJyb3I6cixpc1N0b3BwZWQ6b309dGhpcztpP2UuZXJyb3Iocik6byYmZS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2xldCBlPW5ldyBRdDtyZXR1cm4gZS5zb3VyY2U9dGhpcyxlfX1yZXR1cm4gbi5jcmVhdGU9KHQsZSk9Pm5ldyBsUyh0LGUpLG59KSgpLGxTPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZGVzdGluYXRpb249dCx0aGlzLnNvdXJjZT1lfW5leHQodCl7dmFyIGUsaTtudWxsPT09KGk9bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm5leHQpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1lcnJvcih0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1jb21wbGV0ZSgpe3ZhciB0LGU7bnVsbD09PShlPW51bGw9PT0odD10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbCh0KX1fc3Vic2NyaWJlKHQpe3ZhciBlLGk7cmV0dXJuIG51bGwhPT0oaT1udWxsPT09KGU9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN1YnNjcmliZSh0KSkmJnZvaWQgMCE9PWk/aTpFT319LFZyPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl92YWx1ZT10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZSh0KXtsZXQgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiFlLmNsb3NlZCYmdC5uZXh0KHRoaXMuX3ZhbHVlKSxlfWdldFZhbHVlKCl7bGV0e2hhc0Vycm9yOnQsdGhyb3duRXJyb3I6ZSxfdmFsdWU6aX09dGhpcztpZih0KXRocm93IGU7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxpfW5leHQodCl7c3VwZXIubmV4dCh0aGlzLl92YWx1ZT10KX19LHp5PXtub3c6KCk9Pih6eS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfSxVaD1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9MS8wLGU9MS8wLGk9enkpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT10LHRoaXMuX3dpbmRvd1RpbWU9ZSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1pLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5maW5pdGVUaW1lV2luZG93PWU9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLHQpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxlKX1uZXh0KHQpe2xldHtpc1N0b3BwZWQ6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyLF90aW1lc3RhbXBQcm92aWRlcjpvLF93aW5kb3dUaW1lOnN9PXRoaXM7ZXx8KGkucHVzaCh0KSwhciYmaS5wdXNoKG8ubm93KCkrcykpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KHQpfV9zdWJzY3JpYmUodCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtsZXQgZT10aGlzLl9pbm5lclN1YnNjcmliZSh0KSx7X2luZmluaXRlVGltZVdpbmRvdzppLF9idWZmZXI6cn09dGhpcyxvPXIuc2xpY2UoKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoJiYhdC5jbG9zZWQ7cys9aT8xOjIpdC5uZXh0KG9bc10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHQpLGV9X3RyaW1CdWZmZXIoKXtsZXR7X2J1ZmZlclNpemU6dCxfdGltZXN0YW1wUHJvdmlkZXI6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyfT10aGlzLG89KHI/MToyKSp0O2lmKHQ8MS8wJiZvPGkubGVuZ3RoJiZpLnNwbGljZSgwLGkubGVuZ3RoLW8pLCFyKXtsZXQgcz1lLm5vdygpLGE9MDtmb3IobGV0IGw9MTtsPGkubGVuZ3RoJiZpW2xdPD1zO2wrPTIpYT1sO2EmJmkuc3BsaWNlKDAsYSsxKX19fSxjUz1jbGFzcyBleHRlbmRzIHZue2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKX1zY2hlZHVsZSh0LGU9MCl7cmV0dXJuIHRoaXN9fSxqeT17c2V0SW50ZXJ2YWwobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1qeTtyZXR1cm4gaT8uc2V0SW50ZXJ2YWw/aS5zZXRJbnRlcnZhbChuLHQsLi4uZSk6c2V0SW50ZXJ2YWwobix0LC4uLmUpfSxjbGVhckludGVydmFsKG4pe2xldHtkZWxlZ2F0ZTp0fT1qeTtyZXR1cm4odD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkobil9LGRlbGVnYXRlOnZvaWQgMH0sQmM9Y2xhc3MgZXh0ZW5kcyBjU3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUodCxlPTApe3ZhciBpO2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDtsZXQgcj10aGlzLmlkLG89dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPXImJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQobyxyLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9bnVsbCE9PShpPXRoaXMuaWQpJiZ2b2lkIDAhPT1pP2k6dGhpcy5yZXF1ZXN0QXN5bmNJZChvLHRoaXMuaWQsZSksdGhpc31yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gankuc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksaSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7aWYobnVsbCE9aSYmdGhpcy5kZWxheT09PWkmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO251bGwhPWUmJmp5LmNsZWFySW50ZXJ2YWwoZSl9ZXhlY3V0ZSh0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7bGV0IGk9dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKGkpcmV0dXJuIGk7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4ZWN1dGUodCxlKXtsZXQgcixpPSExO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2gobyl7aT0hMCxyPW98fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKGkpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xvc2VkKXtsZXR7aWQ6dCxzY2hlZHVsZXI6ZX09dGhpcyx7YWN0aW9uczppfT1lO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLEJoKGksdGhpcyksbnVsbCE9dCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChlLHQsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19LEp1ZT0xLEZPPXt9O2Z1bmN0aW9uIGI4KG4pe3JldHVybiBuIGluIEZPJiYoZGVsZXRlIEZPW25dLCEwKX12YXIgeDg9e3NldEltbWVkaWF0ZShuKXtsZXQgdD1KdWUrKztyZXR1cm4gRk9bdF09ITAsa098fChrTz1Qcm9taXNlLnJlc29sdmUoKSksa08udGhlbigoKT0+YjgodCkmJm4oKSksdH0sY2xlYXJJbW1lZGlhdGUobil7Yjgobil9fSx7c2V0SW1tZWRpYXRlOiR1ZSxjbGVhckltbWVkaWF0ZTplZGV9PXg4LEd5PXtzZXRJbW1lZGlhdGUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PUd5O3JldHVybih0Py5zZXRJbW1lZGlhdGV8fCR1ZSkoLi4ubil9LGNsZWFySW1tZWRpYXRlKG4pe2xldHtkZWxlZ2F0ZTp0fT1HeTtyZXR1cm4odD8uY2xlYXJJbW1lZGlhdGV8fGVkZSkobil9LGRlbGVnYXRlOnZvaWQgMH0sS2Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlPUtkLm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yPXQsdGhpcy5ub3c9ZX1zY2hlZHVsZSh0LGU9MCxpKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLHQpLnNjaGVkdWxlKGksZSl9fTtLZC5ub3c9enkubm93O3ZhciBWYz1jbGFzcyBleHRlbmRzIEtke2NvbnN0cnVjdG9yKHQsZT1LZC5ub3cpe3N1cGVyKHQsZSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaCh0KXtsZXQgaSx7YWN0aW9uczplfT10aGlzO2lmKHRoaXMuX2FjdGl2ZSllLnB1c2godCk7ZWxzZXt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoaT10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGkpe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBpfX19fSxmZz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1HeS5zZXRJbW1lZGlhdGUodC5mbHVzaC5iaW5kKHQsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKEd5LmNsZWFySW1tZWRpYXRlKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLFl1PW5ldyBWYyhCYyksQzg9WXUsTk89bmV3IGNsYXNzIGV4dGVuZHMgVmN7fShjbGFzcyBleHRlbmRzIEJje2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gZT4wP3N1cGVyLnNjaGVkdWxlKHQsZSk6KHRoaXMuZGVsYXk9ZSx0aGlzLnN0YXRlPXQsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9ZXhlY3V0ZSh0LGUpe3JldHVybiBlPjB8fHRoaXMuY2xvc2VkP3N1cGVyLmV4ZWN1dGUodCxlKTp0aGlzLl9leGVjdXRlKHQsZSl9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPWkmJmk+MHx8bnVsbD09aSYmdGhpcy5kZWxheT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5mbHVzaCh0aGlzKSwwKX19KSxMTz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1oZy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnQuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKGhnLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLGFvPW5ldyBRdChuPT5uLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIGdTKG4pe3JldHVybiBuJiZibihuLnNjaGVkdWxlKX1mdW5jdGlvbiBCTyhuKXtyZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBIYyhuKXtyZXR1cm4gYm4oQk8obikpP24ucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIFVjKG4pe3JldHVybiBnUyhCTyhuKSk/bi5wb3AoKTp2b2lkIDB9dmFyIHE4PWQ4KFc4KCksMSkse19fZGVjb3JhdGU6WTgsX19hd2FpdGVyOlg4LF9fYXdhaXQ6YlMsX19hc3luY0dlbmVyYXRvcjpROCxfX2FzeW5jVmFsdWVzOks4fT1xOC5kZWZhdWx0LGdnPW49Pm4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiBuO2Z1bmN0aW9uIHhTKG4pe3JldHVybiBibihuPy50aGVuKX1mdW5jdGlvbiBDUyhuKXtyZXR1cm4gYm4obltwZ10pfWZ1bmN0aW9uIHdTKG4pe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmYm4obj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9ZnVuY3Rpb24gTVMobil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7bn0nYH0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX12YXIgU1M9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciI7ZnVuY3Rpb24gRVMobil7cmV0dXJuIGJuKG4/LltTU10pfWZ1bmN0aW9uIFRTKG4pe3JldHVybiBROCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgZT1uLmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2xldHt2YWx1ZTppLGRvbmU6cn09eWllbGQgYlMoZS5yZWFkKCkpO2lmKHIpcmV0dXJuIHlpZWxkIGJTKHZvaWQgMCk7eWllbGQgeWllbGQgYlMoaSl9fWZpbmFsbHl7ZS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIERTKG4pe3JldHVybiBibihuPy5nZXRSZWFkZXIpfWZ1bmN0aW9uIGFpKG4pe2lmKG4gaW5zdGFuY2VvZiBRdClyZXR1cm4gbjtpZihudWxsIT1uKXtpZihDUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bGV0IGU9bltwZ10oKTtpZihibihlLnN1YnNjcmliZSkpcmV0dXJuIGUuc3Vic2NyaWJlKHQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0obik7aWYoZ2cobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUXQodD0+e2ZvcihsZXQgZT0wO2U8bi5sZW5ndGgmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0pO3QuY29tcGxldGUoKX0pfShuKTtpZih4UyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bi50aGVuKGU9Pnt0LmNsb3NlZHx8KHQubmV4dChlKSx0LmNvbXBsZXRlKCkpfSxlPT50LmVycm9yKGUpKS50aGVuKG51bGwsc1MpfSl9KG4pO2lmKHdTKG4pKXJldHVybiBaOChuKTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57Zm9yKGxldCBlIG9mIG4paWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KX0obik7aWYoRFMobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBaOChUUyhuKSl9KG4pfXRocm93IE1TKG4pfWZ1bmN0aW9uIFo4KG4pe3JldHVybiBuZXcgUXQodD0+eyhmdW5jdGlvbihuLHQpe3ZhciBlLGkscixvO3JldHVybiBYOCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dHJ5e2ZvcihlPUs4KG4pOyEoaT15aWVsZCBlLm5leHQoKSkuZG9uZTspaWYodC5uZXh0KGkudmFsdWUpLHQuY2xvc2VkKXJldHVybn1jYXRjaChzKXtyPXtlcnJvcjpzfX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobz1lLnJldHVybikmJih5aWVsZCBvLmNhbGwoZSkpfWZpbmFsbHl7aWYocil0aHJvdyByLmVycm9yfX10LmNvbXBsZXRlKCl9KX0pKG4sdCkuY2F0Y2goZT0+dC5lcnJvcihlKSl9KX1mdW5jdGlvbiBZcyhuLHQsZSxpPTAscj0hMSl7bGV0IG89dC5zY2hlZHVsZShmdW5jdGlvbigpe2UoKSxyP24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxpKSk6dGhpcy51bnN1YnNjcmliZSgpfSxpKTtpZihuLmFkZChvKSwhcilyZXR1cm4gb31mdW5jdGlvbiB6aChuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57ZS5zdWJzY3JpYmUoTHQoaSxyPT5ZcyhpLG4sKCk9PmkubmV4dChyKSx0KSwoKT0+WXMoaSxuLCgpPT5pLmNvbXBsZXRlKCksdCkscj0+WXMoaSxuLCgpPT5pLmVycm9yKHIpLHQpKSl9KX1mdW5jdGlvbiBBUyhuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57aS5hZGQobi5zY2hlZHVsZSgoKT0+ZS5zdWJzY3JpYmUoaSksdCkpfSl9ZnVuY3Rpb24gSVMobix0KXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBRdChlPT57WXMoZSx0LCgpPT57bGV0IGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtZcyhlLHQsKCk9PntpLm5leHQoKS50aGVuKHI9PntyLmRvbmU/ZS5jb21wbGV0ZSgpOmUubmV4dChyLnZhbHVlKX0pfSwwLCEwKX0pfSl9ZnVuY3Rpb24gbG8obix0KXtyZXR1cm4gdD9mdW5jdGlvbihuLHQpe2lmKG51bGwhPW4pe2lmKENTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZihnZyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaT0wO3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7aT09PW4ubGVuZ3RoP2UuY29tcGxldGUoKTooZS5uZXh0KG5baSsrXSksZS5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KX0pfShuLHQpO2lmKHhTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZih3UyhuKSlyZXR1cm4gSVMobix0KTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaTtyZXR1cm4gWXMoZSx0LCgpPT57aT1uW1NTXSgpLFlzKGUsdCwoKT0+e2xldCByLG87dHJ5eyh7dmFsdWU6cixkb25lOm99PWkubmV4dCgpKX1jYXRjaChzKXtyZXR1cm4gdm9pZCBlLmVycm9yKHMpfW8/ZS5jb21wbGV0ZSgpOmUubmV4dChyKX0sMCwhMCl9KSwoKT0+Ym4oaT8ucmV0dXJuKSYmaS5yZXR1cm4oKX0pfShuLHQpO2lmKERTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBJUyhUUyhuKSx0KX0obix0KX10aHJvdyBNUyhuKX0obix0KTphaShuKX1mdW5jdGlvbiBqdCguLi5uKXtyZXR1cm4gbG8obixVYyhuKSl9ZnVuY3Rpb24gR2wobix0KXtsZXQgZT1ibihuKT9uOigpPT5uLGk9cj0+ci5lcnJvcihlKCkpO3JldHVybiBuZXcgUXQodD9yPT50LnNjaGVkdWxlKGksMCxyKTppKX12YXIgdGw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPWksdGhpcy5oYXNWYWx1ZT0iTiI9PT10fW9ic2VydmUodCl7cmV0dXJuIEhPKHRoaXMsdCl9ZG8odCxlLGkpe2xldHtraW5kOnIsdmFsdWU6byxlcnJvcjpzfT10aGlzO3JldHVybiJOIj09PXI/dD8uKG8pOiJFIj09PXI/ZT8uKHMpOmk/LigpfWFjY2VwdCh0LGUsaSl7dmFyIHI7cmV0dXJuIGJuKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5uZXh0KT90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsaSl9dG9PYnNlcnZhYmxlKCl7bGV0e2tpbmQ6dCx2YWx1ZTplLGVycm9yOml9PXRoaXMscj0iTiI9PT10P2p0KGUpOiJFIj09PXQ/R2woKCk9PmkpOiJDIj09PXQ/YW86MDtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICR7dH1gKTtyZXR1cm4gcn1zdGF0aWMgY3JlYXRlTmV4dCh0KXtyZXR1cm4gbmV3IHRsKCJOIix0KX1zdGF0aWMgY3JlYXRlRXJyb3IodCl7cmV0dXJuIG5ldyB0bCgiRSIsdm9pZCAwLHQpfXN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpe3JldHVybiB0bC5jb21wbGV0ZU5vdGlmaWNhdGlvbn19O2Z1bmN0aW9uIEhPKG4sdCl7dmFyIGUsaSxyO2xldHtraW5kOm8sdmFsdWU6cyxlcnJvcjphfT1uO2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyAia2luZCInKTsiTiI9PT1vP251bGw9PT0oZT10Lm5leHQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodCxzKToiRSI9PT1vP251bGw9PT0oaT10LmVycm9yKXx8dm9pZCAwPT09aXx8aS5jYWxsKHQsYSk6bnVsbD09PShyPXQuY29tcGxldGUpfHx2b2lkIDA9PT1yfHxyLmNhbGwodCl9ZnVuY3Rpb24gV3kobil7cmV0dXJuISFuJiYobiBpbnN0YW5jZW9mIFF0fHxibihuLmxpZnQpJiZibihuLnN1YnNjcmliZSkpfXRsLmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyB0bCgiQyIpO3ZhciBfZz1jZyhuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIFBTKG4sdCl7bGV0IGU9Im9iamVjdCI9PXR5cGVvZiB0O3JldHVybiBuZXcgUHJvbWlzZSgoaSxyKT0+e2xldCBvPW5ldyBqbCh7bmV4dDpzPT57aShzKSxvLnVuc3Vic2NyaWJlKCl9LGVycm9yOnIsY29tcGxldGU6KCk9PntlP2kodC5kZWZhdWx0VmFsdWUpOnIobmV3IF9nKX19KTtuLnN1YnNjcmliZShvKX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2kubmV4dChuLmNhbGwodCxvLHIrKykpfSkpfSl9dmFye2lzQXJyYXk6bGRlfT1BcnJheTtmdW5jdGlvbiBaZChuKXtyZXR1cm4gQih0PT5mdW5jdGlvbihuLHQpe3JldHVybiBsZGUodCk/biguLi50KTpuKHQpfShuLHQpKX12YXJ7aXNBcnJheTp1ZGV9PUFycmF5LHtnZXRQcm90b3R5cGVPZjpkZGUscHJvdG90eXBlOnBkZSxrZXlzOmhkZX09T2JqZWN0O2Z1bmN0aW9uIFJTKG4pe2lmKDE9PT1uLmxlbmd0aCl7bGV0IHQ9blswXTtpZih1ZGUodCkpcmV0dXJue2FyZ3M6dCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4mJmRkZShuKT09PXBkZX0odCkpe2xldCBlPWhkZSh0KTtyZXR1cm57YXJnczplLm1hcChpPT50W2ldKSxrZXlzOmV9fX1yZXR1cm57YXJnczpuLGtleXM6bnVsbH19ZnVuY3Rpb24gT1Mobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSxyKT0+KGVbaV09dFtyXSxlKSx7fSl9ZnVuY3Rpb24gcG4oLi4ubil7bGV0IHQ9VWMobiksZT1IYyhuKSx7YXJnczppLGtleXM6cn09UlMobik7aWYoMD09PWkubGVuZ3RoKXJldHVybiBsbyhbXSx0KTtsZXQgbz1uZXcgUXQoVU8oaSx0LHI/cz0+T1MocixzKTpNcykpO3JldHVybiBlP28ucGlwZShaZChlKSk6b31mdW5jdGlvbiBVTyhuLHQsZT1Ncyl7cmV0dXJuIGk9Pntvaih0LCgpPT57bGV0e2xlbmd0aDpyfT1uLG89bmV3IEFycmF5KHIpLHM9cixhPXI7Zm9yKGxldCBsPTA7bDxyO2wrKylvaih0LCgpPT57bGV0IGM9bG8obltsXSx0KSx1PSExO2Muc3Vic2NyaWJlKEx0KGksZD0+e29bbF09ZCx1fHwodT0hMCxhLS0pLGF8fGkubmV4dChlKG8uc2xpY2UoKSkpfSwoKT0+ey0tc3x8aS5jb21wbGV0ZSgpfSkpfSxpKX0saSl9fWZ1bmN0aW9uIG9qKG4sdCxlKXtuP1lzKGUsbix0KTp0KCl9ZnVuY3Rpb24gX24obix0LGU9MS8wKXtyZXR1cm4gYm4odCk/X24oKGkscik9PkIoKG8scyk9PnQoaSxvLHIscykpKGFpKG4oaSxyKSkpLGUpOigibnVtYmVyIj09dHlwZW9mIHQmJihlPXQpLHF0KChpLHIpPT5mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsPVtdLGM9MCx1PTAsZD0hMSxwPSgpPT57ZCYmIWwubGVuZ3RoJiYhYyYmdC5jb21wbGV0ZSgpfSxoPW09PmM8aT9mKG0pOmwucHVzaChtKSxmPW09PntjKys7bGV0IEM9ITE7YWkoZShtLHUrKykpLnN1YnNjcmliZShMdCh0LF89Pnt0Lm5leHQoXyl9LCgpPT57Qz0hMH0sdm9pZCAwLCgpPT57aWYoQyl0cnl7Zm9yKGMtLTtsLmxlbmd0aCYmYzxpOyl7bGV0IF89bC5zaGlmdCgpO2YoXyl9cCgpfWNhdGNoKF8pe3QuZXJyb3IoXyl9fSkpfTtyZXR1cm4gbi5zdWJzY3JpYmUoTHQodCxoLCgpPT57ZD0hMCxwKCl9KSksKCk9Pnt9fShpLHIsbixlKSkpfWZ1bmN0aW9uIGtTKG49MS8wKXtyZXR1cm4gX24oTXMsbil9ZnVuY3Rpb24gSmQoLi4ubil7cmV0dXJuIGtTKDEpKGxvKG4sVWMobikpKX1mdW5jdGlvbiBiYShuKXtyZXR1cm4gbmV3IFF0KHQ9PnthaShuKCkpLnN1YnNjcmliZSh0KX0pfWZ1bmN0aW9uIHhvKC4uLm4pe2xldCB0PUhjKG4pLHthcmdzOmUsa2V5czppfT1SUyhuKSxyPW5ldyBRdChvPT57bGV0e2xlbmd0aDpzfT1lO2lmKCFzKXJldHVybiB2b2lkIG8uY29tcGxldGUoKTtsZXQgYT1uZXcgQXJyYXkocyksbD1zLGM9cztmb3IobGV0IHU9MDt1PHM7dSsrKXtsZXQgZD0hMTthaShlW3VdKS5zdWJzY3JpYmUoTHQobyxwPT57ZHx8KGQ9ITAsYy0tKSxhW3VdPXB9LCgpPT5sLS0sdm9pZCAwLCgpPT57KCFsfHwhZCkmJihjfHxvLm5leHQoaT9PUyhpLGEpOmEpLG8uY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIHQ/ci5waXBlKFpkKHQpKTpyfXZhciBtZGU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sZ2RlPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxfZGU9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIGxpKG4sdCxlLGkpe2lmKGJuKGUpJiYoaT1lLGU9dm9pZCAwKSxpKXJldHVybiBsaShuLHQsZSkucGlwZShaZChpKSk7bGV0W3Isb109ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4uYWRkRXZlbnRMaXN0ZW5lcikmJmJuKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KG4pP2dkZS5tYXAocz0+YT0+bltzXSh0LGEsZSkpOmZ1bmN0aW9uKG4pe3JldHVybiBibihuLmFkZExpc3RlbmVyKSYmYm4obi5yZW1vdmVMaXN0ZW5lcil9KG4pP21kZS5tYXAobGoobix0KSk6ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4ub24pJiZibihuLm9mZil9KG4pP19kZS5tYXAobGoobix0KSk6W107aWYoIXImJmdnKG4pKXJldHVybiBfbihzPT5saShzLHQsZSkpKGFpKG4pKTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgUXQocz0+e2xldCBhPSguLi5sKT0+cy5uZXh0KDE8bC5sZW5ndGg/bDpsWzBdKTtyZXR1cm4gcihhKSwoKT0+byhhKX0pfWZ1bmN0aW9uIGxqKG4sdCl7cmV0dXJuIGU9Pmk9Pm5bZV0odCxpKX1mdW5jdGlvbiB4YShuPTAsdCxlPUM4KXtsZXQgaT0tMTtyZXR1cm4gbnVsbCE9dCYmKGdTKHQpP2U9dDppPXQpLG5ldyBRdChyPT57bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obil9KG4pPytuLWUubm93KCk6bjtvPDAmJihvPTApO2xldCBzPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyLmNsb3NlZHx8KHIubmV4dChzKyspLDA8PWk/dGhpcy5zY2hlZHVsZSh2b2lkIDAsaSk6ci5jb21wbGV0ZSgpKX0sbyl9KX1mdW5jdGlvbiB1biguLi5uKXtsZXQgdD1VYyhuKSxlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBCTyhuKT9uLnBvcCgpOjEvMH0obiksaT1uO3JldHVybiBpLmxlbmd0aD8xPT09aS5sZW5ndGg/YWkoaVswXSk6a1MoZSkobG8oaSx0KSk6YW99dmFye2lzQXJyYXk6eGRlfT1BcnJheTtmdW5jdGlvbiBGUyhuKXtyZXR1cm4gMT09PW4ubGVuZ3RoJiZ4ZGUoblswXSk/blswXTpufWZ1bmN0aW9uIEhlKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9MDtlLnN1YnNjcmliZShMdChpLG89Pm4uY2FsbCh0LG8scisrKSYmaS5uZXh0KG8pKSl9KX1mdW5jdGlvbiB6YyhuLHQ9WXUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgaT0hMSxyPW51bGwsbz1udWxsLHM9ITEsYT0oKT0+e2lmKG8/LnVuc3Vic2NyaWJlKCksbz1udWxsLGkpe2k9ITE7bGV0IGM9cjtyPW51bGwsZS5uZXh0KGMpfXMmJmUuY29tcGxldGUoKX0sbD0oKT0+e289bnVsbCxzJiZlLmNvbXBsZXRlKCl9O3Quc3Vic2NyaWJlKEx0KGUsYz0+e2k9ITAscj1jLG98fGFpKG4oKSkuc3Vic2NyaWJlKG89THQoZSxhLGwpKX0sKCk9PntzPSEwLCghaXx8IW98fG8uY2xvc2VkKSYmZS5jb21wbGV0ZSgpfSkpfSl9KCgpPT54YShuLHQpKX1mdW5jdGlvbiBDbyhuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgbyxpPW51bGwscj0hMTtpPXQuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLHZvaWQgMCxzPT57bz1haShuKHMsQ28obikodCkpKSxpPyhpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKTpyPSEwfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKX0pfWZ1bmN0aW9uIHVqKG4sdCxlLGkscil7cmV0dXJuKG8scyk9PntsZXQgYT1lLGw9dCxjPTA7by5zdWJzY3JpYmUoTHQocyx1PT57bGV0IGQ9YysrO2w9YT9uKGwsdSxkKTooYT0hMCx1KSxpJiZzLm5leHQobCl9LHImJigoKT0+e2EmJnMubmV4dChsKSxzLmNvbXBsZXRlKCl9KSkpfX1mdW5jdGlvbiBHTyguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gdD9mdW5jdGlvbiguLi5uKXtyZXR1cm4gUk8obil9KEdPKC4uLm4pLFpkKHQpKTpxdCgoZSxpKT0+e1VPKFtlLC4uLkZTKG4pXSkoaSl9KX1mdW5jdGlvbiBzciguLi5uKXtyZXR1cm4gR08oLi4ubil9ZnVuY3Rpb24gQXIobix0PVl1KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT0oKT0+e2lmKHIpe3IudW5zdWJzY3JpYmUoKSxyPW51bGw7bGV0IGM9bztvPW51bGwsaS5uZXh0KGMpfX07ZnVuY3Rpb24gbCgpe2xldCBjPXMrbix1PXQubm93KCk7aWYodTxjKXJldHVybiByPXRoaXMuc2NoZWR1bGUodm9pZCAwLGMtdSksdm9pZCBpLmFkZChyKTthKCl9ZS5zdWJzY3JpYmUoTHQoaSxjPT57bz1jLHM9dC5ub3coKSxyfHwocj10LnNjaGVkdWxlKGwsbiksaS5hZGQocikpfSwoKT0+e2EoKSxpLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e289cj1udWxsfSkpfSl9ZnVuY3Rpb24gZGoobil7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT57aXx8ZS5uZXh0KG4pLGUuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIEh0KG4pe3JldHVybiBuPD0wPygpPT5hbzpxdCgodCxlKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUoTHQoZSxyPT57KytpPD1uJiYoZS5uZXh0KHIpLG48PWkmJmUuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBxeSgpe3JldHVybiBxdCgobix0KT0+e24uc3Vic2NyaWJlKEx0KHQsemwpKX0pfWZ1bmN0aW9uIHZnKG4sdCl7cmV0dXJuIHQ/ZT0+SmQodC5waXBlKEh0KDEpLHF5KCkpLGUucGlwZSh2ZyhuKSkpOl9uKChlLGkpPT5uKGUsaSkucGlwZShIdCgxKSxmdW5jdGlvbihuKXtyZXR1cm4gQigoKT0+bil9KGUpKSl9ZnVuY3Rpb24gbmwobix0PVl1KXtsZXQgZT14YShuLHQpO3JldHVybiB2ZygoKT0+ZSl9ZnVuY3Rpb24gZGkobix0PU1zKXtyZXR1cm4gbj1uPz9DZGUscXQoKGUsaSk9PntsZXQgcixvPSEwO2Uuc3Vic2NyaWJlKEx0KGkscz0+e2xldCBhPXQocyk7KG98fCFuKHIsYSkpJiYobz0hMSxyPWEsaS5uZXh0KHMpKX0pKX0pfWZ1bmN0aW9uIENkZShuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBoaihuPXdkZSl7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT5pP2UuY29tcGxldGUoKTplLmVycm9yKG4oKSkpKX0pfWZ1bmN0aW9uIHdkZSgpe3JldHVybiBuZXcgX2d9ZnVuY3Rpb24gTFMobix0KXtyZXR1cm4gdD9lPT5lLnBpcGUoTFMoKGkscik9PmFpKG4oaSxyKSkucGlwZShCKChvLHMpPT50KGksbyxyLHMpKSkpKTpxdCgoZSxpKT0+e2xldCByPTAsbz1udWxsLHM9ITE7ZS5zdWJzY3JpYmUoTHQoaSxhPT57b3x8KG89THQoaSx2b2lkIDAsKCk9PntvPW51bGwscyYmaS5jb21wbGV0ZSgpfSksYWkobihhLHIrKykpLnN1YnNjcmliZShvKSl9LCgpPT57cz0hMCwhbyYmaS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gVlMobix0LGUsaSl7cmV0dXJuIHF0KChyLG8pPT57bGV0IHM7dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KHtkdXJhdGlvbjplLGVsZW1lbnQ6cyxjb25uZWN0b3I6aX09dCk6cz10O2xldCBhPW5ldyBNYXAsbD1mPT57YS5mb3JFYWNoKGYpLGYobyl9LGM9Zj0+bChtPT5tLmVycm9yKGYpKSx1PTAsZD0hMSxwPW5ldyBIeShvLGY9Pnt0cnl7bGV0IG09bihmKSxDPWEuZ2V0KG0pO2lmKCFDKXthLnNldChtLEM9aT9pKCk6bmV3IFRlKTtsZXQgXz1mdW5jdGlvbihmLG0pe2xldCBDPW5ldyBRdChfPT57dSsrO2xldCB5PW0uc3Vic2NyaWJlKF8pO3JldHVybigpPT57eS51bnN1YnNjcmliZSgpLDA9PS0tdSYmZCYmcC51bnN1YnNjcmliZSgpfX0pO3JldHVybiBDLmtleT1mLEN9KG0sQyk7aWYoby5uZXh0KF8pLGUpe2xldCB5PUx0KEMsKCk9PntDLmNvbXBsZXRlKCkseT8udW5zdWJzY3JpYmUoKX0sdm9pZCAwLHZvaWQgMCwoKT0+YS5kZWxldGUobSkpO3AuYWRkKGFpKGUoXykpLnN1YnNjcmliZSh5KSl9fUMubmV4dChzP3MoZik6Zil9Y2F0Y2gobSl7YyhtKX19LCgpPT5sKGY9PmYuY29tcGxldGUoKSksYywoKT0+YS5jbGVhcigpLCgpPT4oZD0hMCwwPT09dSkpO3Iuc3Vic2NyaWJlKHApfSl9ZnVuY3Rpb24geWcoKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKEx0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIFhzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBUZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCx1PSExLGQ9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGg9KCk9PntwKCkscz1sPXZvaWQgMCx1PWQ9ITF9LGY9KCk9PntsZXQgbT1zO2goKSxtPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gcXQoKG0sQyk9PntjKyssIWQmJiF1JiZwKCk7bGV0IF89bD1sPz90KCk7Qy5hZGQoKCk9PntjLS0sMD09PWMmJiFkJiYhdSYmKGE9Wk8oZixyKSl9KSxfLnN1YnNjcmliZShDKSwhcyYmYz4wJiYocz1uZXcgamwoe25leHQ6eT0+Xy5uZXh0KHkpLGVycm9yOnk9PntkPSEwLHAoKSxhPVpPKGgsZSx5KSxfLmVycm9yKHkpfSxjb21wbGV0ZTooKT0+e3U9ITAscCgpLGE9Wk8oaCxpKSxfLmNvbXBsZXRlKCl9fSksYWkobSkuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBaTyhuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBqbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIFFzKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsWHMoe2Nvbm5lY3RvcjooKT0+bmV3IFVoKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIENhKG4pe3JldHVybiBIZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gVm4oLi4ubil7bGV0IHQ9VWMobik7cmV0dXJuIHF0KChlLGkpPT57KHQ/SmQobixlLHQpOkpkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIHZpKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKEx0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCx1PW8rKzthaShuKGwsdSkpLnN1YnNjcmliZShyPUx0KGksZD0+aS5uZXh0KHQ/dChsLGQsdSxjKyspOmQpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIG90KG4pe3JldHVybiBxdCgodCxlKT0+e2FpKG4pLnN1YnNjcmliZShMdChlLCgpPT5lLmNvbXBsZXRlKCksemwpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gWXkobix0PSExKXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBOdChuLHQsZSl7bGV0IGk9Ym4obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/cXQoKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoTHQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOk1zfXZhciBKTz17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYmcobix0PVl1LGU9Sk8pe2xldCBpPXhhKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1KTyl7cmV0dXJuIHF0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLHU9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoaCgpLGMmJmkuY29tcGxldGUoKSl9LGQ9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPWY9Pmw9YWkobihmKSkuc3Vic2NyaWJlKEx0KGksdSxkKSksaD0oKT0+e2lmKHMpe3M9ITE7bGV0IGY9YTthPW51bGwsaS5uZXh0KGYpLCFjJiZwKGYpfX07ZS5zdWJzY3JpYmUoTHQoaSxmPT57cz0hMCxhPWYsKCFsfHxsLmNsb3NlZCkmJihyP2goKTpwKGYpKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBHdCguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWFpKG5bbF0pLnN1YnNjcmliZShMdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KE1zKSkmJihzPW51bGwpKX0semwpKTtlLnN1YnNjcmliZShMdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIGFyKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT1hcilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uICRPKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIGNvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChjbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIGJrKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIE1kZT1hcih7X19mb3J3YXJkX3JlZl9fOmFyfSk7ZnVuY3Rpb24gcmkobil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPXJpLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY28odGhpcygpKX0sbn1mdW5jdGlvbiBxaShuKXtyZXR1cm4gbEcobik/bigpOm59ZnVuY3Rpb24gbEcobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoTWRlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1yaX12YXIgTXQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMobil9JHt0PyI6ICIrdC50cmltKCk6IiJ9YH0odCxlKSksdGhpcy5jb2RlPXR9fTtmdW5jdGlvbiBxbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bjpudWxsPT1uPyIiOlN0cmluZyhuKX1mdW5jdGlvbiBNRihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLm5hbWV8fG4udG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLm5hbWV8fG4udHlwZS50b1N0cmluZygpOnFuKG4pfWZ1bmN0aW9uIFNGKG4sdCl7dGhyb3cgbmV3IE10KC0yMDEsITEpfWZ1bmN0aW9uIGNHKG4sdCxlLGkpe3Rocm93IG5ldyBFcnJvcihgQVNTRVJUSU9OIEVSUk9SOiAke259YCsobnVsbD09aT8iIjpgIFtFeHBlY3RlZD0+ICR7ZX0gJHtpfSAke3R9IDw9QWN0dWFsXWApKX1mdW5jdGlvbiBnZShuKXtyZXR1cm57dG9rZW46bi50b2tlbixwcm92aWRlZEluOm4ucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5Om4uZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIFUobil7cmV0dXJue3Byb3ZpZGVyczpuLnByb3ZpZGVyc3x8W10saW1wb3J0czpuLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBFRihuKXtyZXR1cm4gbWoobix0RSl8fG1qKG4sdUcpfWZ1bmN0aW9uIG1qKG4sdCl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsfWZ1bmN0aW9uIGdqKG4pe3JldHVybiBuJiYobi5oYXNPd25Qcm9wZXJ0eSh4ayl8fG4uaGFzT3duUHJvcGVydHkoSWRlKSk/blt4a106bnVsbH12YXIgQ2ssdEU9YXIoeyJcdTAyNzVwcm92Ijphcn0pLHhrPWFyKHsiXHUwMjc1aW5qIjphcn0pLHVHPWFyKHtuZ0luamVjdGFibGVEZWY6YXJ9KSxJZGU9YXIoe25nSW5qZWN0b3JEZWY6YXJ9KSxpaT0oKCk9PntyZXR1cm4obj1paXx8KGlpPXt9KSlbbi5EZWZhdWx0PTBdPSJEZWZhdWx0IixuW24uSG9zdD0xXT0iSG9zdCIsbltuLlNlbGY9Ml09IlNlbGYiLG5bbi5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLG5bbi5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGlpO3ZhciBufSkoKTtmdW5jdGlvbiBpbChuKXtsZXQgdD1DaztyZXR1cm4gQ2s9bix0fWZ1bmN0aW9uIGRHKG4sdCxlKXtsZXQgaT1FRihuKTtyZXR1cm4gaSYmInJvb3QiPT1pLnByb3ZpZGVkSW4/dm9pZCAwPT09aS52YWx1ZT9pLnZhbHVlPWkuZmFjdG9yeSgpOmkudmFsdWU6ZSZpaS5PcHRpb25hbD9udWxsOnZvaWQgMCE9PXQ/dDp2b2lkIFNGKGNvKG4pKX1mdW5jdGlvbiB0ZihuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX12YXIgS3k9KCgpPT57cmV0dXJuKG49S3l8fChLeT17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixLeTt2YXIgbn0pKCksd2E9KCgpPT57cmV0dXJuKG49d2F8fCh3YT17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIix3YTt2YXIgbn0pKCksV3I9KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLEFnPXt9LFdpPVtdLFRFPWFyKHsiXHUwMjc1Y21wIjphcn0pLFRGPWFyKHsiXHUwMjc1ZGlyIjphcn0pLERGPWFyKHsiXHUwMjc1cGlwZSI6YXJ9KSxwRz1hcih7Ilx1MDI3NW1vZCI6YXJ9KSxRdT1hcih7Ilx1MDI3NWZhYyI6YXJ9KSxaeT1hcih7X19OR19FTEVNRU5UX0lEX186YXJ9KSxSZGU9MDtmdW5jdGlvbiBrKG4pe3JldHVybiB0ZigoKT0+e2xldCBlPSEwPT09bi5zdGFuZGFsb25lLGk9e30scj17dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxkZWNsczpuLmRlY2xzLHZhcnM6bi52YXJzLGZhY3Rvcnk6bnVsbCx0ZW1wbGF0ZTpuLnRlbXBsYXRlfHxudWxsLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6aSxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBc3x8bnVsbCxvblB1c2g6bi5jaGFuZ2VEZXRlY3Rpb249PT1LeS5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsc3RhbmRhbG9uZTplLGRlcGVuZGVuY2llczplJiZuLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bnVsbCxzZWxlY3RvcnM6bi5zZWxlY3RvcnN8fFdpLHZpZXdRdWVyeTpuLnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpuLmZlYXR1cmVzfHxudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8d2EuRW11bGF0ZWQsaWQ6ImMiK1JkZSsrLHN0eWxlczpuLnN0eWxlc3x8V2ksXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz1uLmRlcGVuZGVuY2llcyxzPW4uZmVhdHVyZXM7cmV0dXJuIHIuaW5wdXRzPXZqKG4uaW5wdXRzLGkpLHIub3V0cHV0cz12aihuLm91dHB1dHMpLHMmJnMuZm9yRWFjaChhPT5hKHIpKSxyLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoaEcpLmZpbHRlcihfaik6bnVsbCxyLnBpcGVEZWZzPW8/KCk9PigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6bykubWFwKEt1KS5maWx0ZXIoX2opOm51bGwscn0pfWZ1bmN0aW9uIGJiKG4sdCxlKXtsZXQgaT1uLlx1MDI3NWNtcDtpLmRpcmVjdGl2ZURlZnM9KCk9PigiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCkubWFwKGhHKSxpLnBpcGVEZWZzPSgpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUpLm1hcChLdSl9ZnVuY3Rpb24gaEcobil7cmV0dXJuIG9sKG4pfHxYaChuKX1mdW5jdGlvbiBfaihuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24geihuKXtyZXR1cm4gdGYoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxXaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFdpLGltcG9ydHM6bi5pbXBvcnRzfHxXaSxleHBvcnRzOm4uZXhwb3J0c3x8V2ksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIHZqKG4sdCl7aWYobnVsbD09bilyZXR1cm4gQWc7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX12YXIgT2U9aztmdW5jdGlvbiBCZyhuKXtyZXR1cm57dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsZmFjdG9yeTpudWxsLHB1cmU6ITEhPT1uLnB1cmUsc3RhbmRhbG9uZTohMD09PW4uc3RhbmRhbG9uZSxvbkRlc3Ryb3k6bi50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gb2wobil7cmV0dXJuIG5bVEVdfHxudWxsfWZ1bmN0aW9uIFhoKG4pe3JldHVybiBuW1RGXXx8bnVsbH1mdW5jdGlvbiBLdShuKXtyZXR1cm4gbltERl18fG51bGx9ZnVuY3Rpb24gZkcobil7bGV0IHQ9b2wobil8fFhoKG4pfHxLdShuKTtyZXR1cm4gbnVsbCE9PXQmJnQuc3RhbmRhbG9uZX1mdW5jdGlvbiBJZyhuLHQpe2xldCBlPW5bcEddfHxudWxsO2lmKCFlJiYhMD09PXQpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Y28obil9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gcWgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgblsxXX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmITA9PT1uWzFdfWZ1bmN0aW9uIFBGKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX1mdW5jdGlvbiBSRihuKXtyZXR1cm4gMj09KDImbi5mbGFncyl9ZnVuY3Rpb24gQUUobil7cmV0dXJuIDE9PSgxJm4uZmxhZ3MpfWZ1bmN0aW9uIFFsKG4pe3JldHVybiBudWxsIT09bi50ZW1wbGF0ZX1mdW5jdGlvbiBGZGUobil7cmV0dXJuIDAhPSgyNTYmblsyXSl9ZnVuY3Rpb24gUWgobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShRdSk/bltRdV06bnVsbH1mdW5jdGlvbiB6dCgpe3JldHVybiBfR31mdW5jdGlvbiBfRyhuKXtyZXR1cm4gbi50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKG4uc2V0SW5wdXQ9TGRlKSxOZGV9ZnVuY3Rpb24gTmRlKCl7bGV0IG49eUcodGhpcyksdD1uPy5jdXJyZW50O2lmKHQpe2xldCBlPW4ucHJldmlvdXM7aWYoZT09PUFnKW4ucHJldmlvdXM9dDtlbHNlIGZvcihsZXQgaSBpbiB0KWVbaV09dFtpXTtuLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKHQpfX1mdW5jdGlvbiBMZGUobix0LGUsaSl7bGV0IHI9eUcobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bdkddPXR9KG4se3ByZXZpb3VzOkFnLGN1cnJlbnQ6bnVsbH0pLG89ci5jdXJyZW50fHwoci5jdXJyZW50PXt9KSxzPXIucHJldmlvdXMsYT10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLGw9c1thXTtvW2FdPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPWl9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0obCYmbC5jdXJyZW50VmFsdWUsdCxzPT09QWcpLG5baV09dH16dC5uZ0luaGVyaXQ9ITA7dmFyIHZHPSJfX25nU2ltcGxlQ2hhbmdlc19fIjtmdW5jdGlvbiB5RyhuKXtyZXR1cm4gblt2R118fG51bGx9ZnVuY3Rpb24gTWEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bMF07cmV0dXJuIG59ZnVuY3Rpb24gSUUobix0KXtyZXR1cm4gTWEodFtuXSl9ZnVuY3Rpb24gdWwobix0KXtyZXR1cm4gTWEodFtuLmluZGV4XSl9ZnVuY3Rpb24gQ0cobix0KXtyZXR1cm4gbi5kYXRhW3RdfWZ1bmN0aW9uIEhnKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gb3Aobix0KXtsZXQgZT10W25dO3JldHVybiBxaChlKT9lOmVbMF19ZnVuY3Rpb24gb0Uobil7cmV0dXJuIDY0PT0oNjQmblsyXSl9ZnVuY3Rpb24gZXAobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gd0cobil7blsxOF09MH1mdW5jdGlvbiBPRihuLHQpe25bNV0rPXQ7bGV0IGU9bixpPW5bM107Zm9yKDtudWxsIT09aSYmKDE9PT10JiYxPT09ZVs1XXx8LTE9PT10JiYwPT09ZVs1XSk7KWlbNV0rPXQsZT1pLGk9aVszXX12YXIgWW49e2xGcmFtZTpQRyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIE1HKCl7cmV0dXJuIFluLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBaZSgpe3JldHVybiBZbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRGkoKXtyZXR1cm4gWW4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHJlKG4pe3JldHVybiBZbi5sRnJhbWUuY29udGV4dExWaWV3PW4sbls4XX1mdW5jdGlvbiBvZShuKXtyZXR1cm4gWW4ubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLG59ZnVuY3Rpb24gTW8oKXtsZXQgbj1TRygpO2Zvcig7bnVsbCE9PW4mJjY0PT09bi50eXBlOyluPW4ucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFNHKCl7cmV0dXJuIFluLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gbGIoKXtsZXQgbj1Zbi5sRnJhbWUsdD1uLmN1cnJlbnRUTm9kZTtyZXR1cm4gbi5pc1BhcmVudD90OnQucGFyZW50fWZ1bmN0aW9uIFdjKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuY3VycmVudFROb2RlPW4sZS5pc1BhcmVudD10fWZ1bmN0aW9uIGtGKCl7cmV0dXJuIFluLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBGRigpe1luLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBFcygpe2xldCBuPVluLmxGcmFtZSx0PW4uYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PXQmJih0PW4uYmluZGluZ1Jvb3RJbmRleD1uLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSx0fWZ1bmN0aW9uICR1KCl7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gRUcobil7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXg9bn1mdW5jdGlvbiBVZygpe3JldHVybiBZbi5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gZWQobil7bGV0IHQ9WW4ubEZyYW1lLGU9dC5iaW5kaW5nSW5kZXg7cmV0dXJuIHQuYmluZGluZ0luZGV4PXQuYmluZGluZ0luZGV4K24sZX1mdW5jdGlvbiBURyhuKXtZbi5sRnJhbWUuaW5JMThuPW59ZnVuY3Rpb24gUWRlKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuYmluZGluZ0luZGV4PWUuYmluZGluZ1Jvb3RJbmRleD1uLFNrKHQpfWZ1bmN0aW9uIFNrKG4pe1luLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9bn1mdW5jdGlvbiBORihuKXtsZXQgdD1Zbi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09dD9udWxsOm5bdF19ZnVuY3Rpb24gREcoKXtyZXR1cm4gWW4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIExGKG4pe1luLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIFpkZShuKXtsZXQgdD1uWzFdO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bls2XTpudWxsfWZ1bmN0aW9uIEFHKG4sdCxlKXtpZihlJmlpLlNraXBTZWxmKXtsZXQgcj10LG89bjtmb3IoOyEocj1yLnBhcmVudCxudWxsIT09cnx8ZSZpaS5Ib3N0fHwocj1aZGUobyksbnVsbD09PXJ8fChvPW9bMTVdLDEwJnIudHlwZSkpKTspO2lmKG51bGw9PT1yKXJldHVybiExO3Q9cixuPW99bGV0IGk9WW4ubEZyYW1lPUlHKCk7cmV0dXJuIGkuY3VycmVudFROb2RlPXQsaS5sVmlldz1uLCEwfWZ1bmN0aW9uIEJGKG4pe2xldCB0PUlHKCksZT1uWzFdO1luLmxGcmFtZT10LHQuY3VycmVudFROb2RlPWUuZmlyc3RDaGlsZCx0LmxWaWV3PW4sdC50Vmlldz1lLHQuY29udGV4dExWaWV3PW4sdC5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nU3RhcnRJbmRleCx0LmluSTE4bj0hMX1mdW5jdGlvbiBJRygpe2xldCBuPVluLmxGcmFtZSx0PW51bGw9PT1uP251bGw6bi5jaGlsZDtyZXR1cm4gbnVsbD09PXQ/UEcobik6dH1mdW5jdGlvbiBQRyhuKXtsZXQgdD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50Om4sY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09biYmKG4uY2hpbGQ9dCksdH1mdW5jdGlvbiBSRygpe2xldCBuPVluLmxGcmFtZTtyZXR1cm4gWW4ubEZyYW1lPW4ucGFyZW50LG4uY3VycmVudFROb2RlPW51bGwsbi5sVmlldz1udWxsLG59dmFyIE9HPVJHO2Z1bmN0aW9uIFZGKCl7bGV0IG49UkcoKTtuLmlzUGFyZW50PSEwLG4udFZpZXc9bnVsbCxuLnNlbGVjdGVkSW5kZXg9LTEsbi5jb250ZXh0TFZpZXc9bnVsbCxuLmVsZW1lbnREZXB0aENvdW50PTAsbi5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsbi5jdXJyZW50TmFtZXNwYWNlPW51bGwsbi5iaW5kaW5nUm9vdEluZGV4PS0xLG4uYmluZGluZ0luZGV4PS0xLG4uY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBUcygpe3JldHVybiBZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiB0cChuKXtZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleD1ufWZ1bmN0aW9uIHFyKCl7bGV0IG49WW4ubEZyYW1lO3JldHVybiBDRyhuLnRWaWV3LG4uc2VsZWN0ZWRJbmRleCl9ZnVuY3Rpb24gam4oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ic3ZnIn1mdW5jdGlvbiBTYSgpe1luLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPW51bGx9ZnVuY3Rpb24gUEUobix0KXtmb3IobGV0IGU9dC5kaXJlY3RpdmVTdGFydCxpPXQuZGlyZWN0aXZlRW5kO2U8aTtlKyspe2xldCBvPW4uZGF0YVtlXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnMsbmdBZnRlckNvbnRlbnRDaGVja2VkOmEsbmdBZnRlclZpZXdJbml0OmwsbmdBZnRlclZpZXdDaGVja2VkOmMsbmdPbkRlc3Ryb3k6dX09bztzJiYobi5jb250ZW50SG9va3N8fChuLmNvbnRlbnRIb29rcz1bXSkpLnB1c2goLWUscyksYSYmKChuLmNvbnRlbnRIb29rc3x8KG4uY29udGVudEhvb2tzPVtdKSkucHVzaChlLGEpLChuLmNvbnRlbnRDaGVja0hvb2tzfHwobi5jb250ZW50Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxhKSksbCYmKG4udmlld0hvb2tzfHwobi52aWV3SG9va3M9W10pKS5wdXNoKC1lLGwpLGMmJigobi52aWV3SG9va3N8fChuLnZpZXdIb29rcz1bXSkpLnB1c2goZSxjKSwobi52aWV3Q2hlY2tIb29rc3x8KG4udmlld0NoZWNrSG9va3M9W10pKS5wdXNoKGUsYykpLG51bGwhPXUmJihuLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKSkucHVzaChlLHUpfX1mdW5jdGlvbiBxUyhuLHQsZSl7a0cobix0LDMsZSl9ZnVuY3Rpb24gWVMobix0LGUsaSl7KDMmblsyXSk9PT1lJiZrRyhuLHQsZSxpKX1mdW5jdGlvbiBlayhuLHQpe2xldCBlPW5bMl07KDMmZSk9PT10JiYoZSY9MjA0NyxlKz0xLG5bMl09ZSl9ZnVuY3Rpb24ga0cobix0LGUsaSl7bGV0IG89aT8/LTEscz10Lmxlbmd0aC0xLGE9MDtmb3IobGV0IGw9dm9pZCAwIT09aT82NTUzNSZuWzE4XTowO2w8cztsKyspaWYoIm51bWJlciI9PXR5cGVvZiB0W2wrMV0pe2lmKGE9dFtsXSxudWxsIT1pJiZhPj1pKWJyZWFrfWVsc2UgdFtsXTwwJiYoblsxOF0rPTY1NTM2KSwoYTxvfHwtMT09bykmJihycGUobixlLHQsbCksblsxOF09KDQyOTQ5MDE3NjAmblsxOF0pK2wrMiksbCsrfWZ1bmN0aW9uIHJwZShuLHQsZSxpKXtsZXQgcj1lW2ldPDAsbz1lW2krMV0sYT1uW3I/LWVbaV06ZVtpXV07aWYocil7aWYoblsyXT4+MTE8blsxOF0+PjE2JiYoMyZuWzJdKT09PXQpe25bMl0rPTIwNDg7dHJ5e28uY2FsbChhKX1maW5hbGx5e319fWVsc2UgdHJ5e28uY2FsbChhKX1maW5hbGx5e319dmFyIEtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9ZSx0aGlzLmluamVjdEltcGw9aX19O2Z1bmN0aW9uIHNFKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aDspe2xldCByPWVbaV07aWYoIm51bWJlciI9PXR5cGVvZiByKXtpZigwIT09cilicmVhaztpKys7bGV0IG89ZVtpKytdLHM9ZVtpKytdLGE9ZVtpKytdO24uc2V0QXR0cmlidXRlKHQscyxhLG8pfWVsc2V7bGV0IG89cixzPWVbKytpXTtjcGUobyk/bi5zZXRQcm9wZXJ0eSh0LG8scyk6bi5zZXRBdHRyaWJ1dGUodCxvLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gRkcobil7cmV0dXJuIDM9PT1ufHw0PT09bnx8Nj09PW59ZnVuY3Rpb24gY3BlKG4pe3JldHVybiA2ND09PW4uY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBhRShuLHQpe2lmKG51bGwhPT10JiYwIT09dC5sZW5ndGgpaWYobnVsbD09PW58fDA9PT1uLmxlbmd0aCluPXQuc2xpY2UoKTtlbHNle2xldCBlPS0xO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgcj10W2ldOyJudW1iZXIiPT10eXBlb2Ygcj9lPXI6MD09PWV8fHhqKG4sZSxyLG51bGwsLTE9PT1lfHwyPT09ZT90WysraV06bnVsbCl9fXJldHVybiBufWZ1bmN0aW9uIHhqKG4sdCxlLGkscil7bGV0IG89MCxzPW4ubGVuZ3RoO2lmKC0xPT09dClzPS0xO2Vsc2UgZm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvKytdO2lmKCJudW1iZXIiPT10eXBlb2YgYSl7aWYoYT09PXQpe3M9LTE7YnJlYWt9aWYoYT50KXtzPW8tMTticmVha319fWZvcig7bzxuLmxlbmd0aDspe2xldCBhPW5bb107aWYoIm51bWJlciI9PXR5cGVvZiBhKWJyZWFrO2lmKGE9PT1lKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09ciYmKG5bbysxXT1yKSk7aWYoaT09PW5bbysxXSlyZXR1cm4gdm9pZChuW28rMl09cil9bysrLG51bGwhPT1pJiZvKyssbnVsbCE9PXImJm8rK30tMSE9PXMmJihuLnNwbGljZShzLDAsdCksbz1zKzEpLG4uc3BsaWNlKG8rKywwLGUpLG51bGwhPT1pJiZuLnNwbGljZShvKyssMCxpKSxudWxsIT09ciYmbi5zcGxpY2UobysrLDAscil9ZnVuY3Rpb24gTkcobil7cmV0dXJuLTEhPT1ufWZ1bmN0aW9uIGxFKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIGNFKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVsxNV0sZS0tO3JldHVybiBpfXZhciBFaz0hMDtmdW5jdGlvbiB1RShuKXtsZXQgdD1FaztyZXR1cm4gRWs9bix0fXZhciBwcGU9MCxqYz17fTtmdW5jdGlvbiBjYihuLHQpe2xldCBlPVZHKG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbMV07aS5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9dC5sZW5ndGgsdGsoaS5kYXRhLG4pLHRrKHQsbnVsbCksdGsoaS5ibHVlcHJpbnQsbnVsbCkpO2xldCByPVVGKG4sdCksbz1uLmluamVjdG9ySW5kZXg7aWYoTkcocikpe2xldCBzPWxFKHIpLGE9Y0Uocix0KSxsPWFbMV0uZGF0YTtmb3IobGV0IGM9MDtjPDg7YysrKXRbbytjXT1hW3MrY118bFtzK2NdfXJldHVybiB0W28rOF09cixvfWZ1bmN0aW9uIHRrKG4sdCl7bi5wdXNoKDAsMCwwLDAsMCwwLDAsMCx0KX1mdW5jdGlvbiBWRyhuLHQpe3JldHVybi0xPT09bi5pbmplY3RvckluZGV4fHxuLnBhcmVudCYmbi5wYXJlbnQuaW5qZWN0b3JJbmRleD09PW4uaW5qZWN0b3JJbmRleHx8bnVsbD09PXRbbi5pbmplY3RvckluZGV4KzhdPy0xOm4uaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBVRihuLHQpe2lmKG4ucGFyZW50JiYtMSE9PW4ucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIG4ucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGU9MCxpPW51bGwscj10O2Zvcig7bnVsbCE9PXI7KXtpZihpPUdHKHIpLG51bGw9PT1pKXJldHVybi0xO2lmKGUrKyxyPXJbMTVdLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuLTF9ZnVuY3Rpb24gZEUobix0LGUpeyFmdW5jdGlvbihuLHQsZSl7bGV0IGk7InN0cmluZyI9PXR5cGVvZiBlP2k9ZS5jaGFyQ29kZUF0KDApfHwwOmUuaGFzT3duUHJvcGVydHkoWnkpJiYoaT1lW1p5XSksbnVsbD09aSYmKGk9ZVtaeV09cHBlKyspO2xldCByPTI1NSZpO3QuZGF0YVtuKyhyPj41KV18PTE8PHJ9KG4sdCxlKX1mdW5jdGlvbiBIRyhuLHQsZSl7aWYoZSZpaS5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtTRigpfWZ1bmN0aW9uIFVHKG4sdCxlLGkpe2lmKGUmaWkuT3B0aW9uYWwmJnZvaWQgMD09PWkmJihpPW51bGwpLDA9PShlJihpaS5TZWxmfGlpLkhvc3QpKSl7bGV0IHI9bls5XSxvPWlsKHZvaWQgMCk7dHJ5e3JldHVybiByP3IuZ2V0KHQsaSxlJmlpLk9wdGlvbmFsKTpkRyh0LGksZSZpaS5PcHRpb25hbCl9ZmluYWxseXtpbChvKX19cmV0dXJuIEhHKGksMCxlKX1mdW5jdGlvbiB6RyhuLHQsZSxpPWlpLkRlZmF1bHQscil7aWYobnVsbCE9PW4pe2lmKDEwMjQmdFsyXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzWzJdJiYhKDI1NiZzWzJdKTspe2xldCBhPWpHKG8scyxlLGl8aWkuU2VsZixqYyk7aWYoYSE9PWpjKXJldHVybiBhO2xldCBsPW8ucGFyZW50O2lmKCFsKXtsZXQgYz1zWzIxXTtpZihjKXtsZXQgdT1jLmdldChlLGpjLGkpO2lmKHUhPT1qYylyZXR1cm4gdX1sPUdHKHMpLHM9c1sxNV19bz1sfXJldHVybiByfShuLHQsZSxpLGpjKTtpZihzIT09amMpcmV0dXJuIHN9bGV0IG89akcobix0LGUsaSxqYyk7aWYobyE9PWpjKXJldHVybiBvfXJldHVybiBVRyh0LGUsaSxyKX1mdW5jdGlvbiBqRyhuLHQsZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi5jaGFyQ29kZUF0KDApfHwwO2xldCB0PW4uaGFzT3duUHJvcGVydHkoWnkpP25bWnldOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dD49MD8yNTUmdDpfcGU6dH0oZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKCFBRyh0LG4saSkpcmV0dXJuIGkmaWkuSG9zdD9IRyhyLDAsaSk6VUcodCxlLGkscik7dHJ5e2xldCBzPW8oaSk7aWYobnVsbCE9c3x8aSZpaS5PcHRpb25hbClyZXR1cm4gcztTRigpfWZpbmFsbHl7T0coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pe2xldCBzPW51bGwsYT1WRyhuLHQpLGw9LTEsYz1pJmlpLkhvc3Q/dFsxNl1bNl06bnVsbDtmb3IoKC0xPT09YXx8aSZpaS5Ta2lwU2VsZikmJihsPS0xPT09YT9VRihuLHQpOnRbYSs4XSwtMSE9PWwmJndqKGksITEpPyhzPXRbMV0sYT1sRShsKSx0PWNFKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCB1PXRbMV07aWYoQ2oobyxhLHUuZGF0YSkpe2xldCBkPW1wZShhLHQsZSxzLGksYyk7aWYoZCE9PWpjKXJldHVybiBkfWw9dFthKzhdLC0xIT09bCYmd2ooaSx0WzFdLmRhdGFbYSs4XT09PWMpJiZDaihvLGEsdCk/KHM9dSxhPWxFKGwpLHQ9Y0UobCx0KSk6YT0tMX19cmV0dXJuIHJ9ZnVuY3Rpb24gbXBlKG4sdCxlLGkscixvKXtsZXQgcz10WzFdLGE9cy5kYXRhW24rOF0sdT1YUyhhLHMsZSxudWxsPT1pP1JGKGEpJiZFazppIT1zJiYwIT0oMyZhLnR5cGUpLHImaWkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09dT9DYih0LHMsdSxhKTpqY31mdW5jdGlvbiBYUyhuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCx1PW8+PjIwLHA9cj9hK3U6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBoPWk/YTphK3U7aDxwO2grKyl7bGV0IGY9c1toXTtpZihoPGwmJmU9PT1mfHxoPj1sJiZmLnR5cGU9PT1lKXJldHVybiBofWlmKHIpe2xldCBoPXNbbF07aWYoaCYmUWwoaCkmJmgudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2Iobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEtofShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShNRihvW2VdKSk7bGV0IGE9dUUocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/aWwocy5pbmplY3RJbXBsKTpudWxsO0FHKG4saSxpaS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1fRyh0KTsoZS5wcmVPcmRlckhvb2tzfHwoZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rc3x8KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3N8fChlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rc3x8KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3N8fChlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZpbChsKSx1RShhKSxzLnJlc29sdmluZz0hMSxPRygpfX1yZXR1cm4gcn1mdW5jdGlvbiBDaihuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj41KV0mMTw8bil9ZnVuY3Rpb24gd2oobix0KXtyZXR1cm4hKG4maWkuU2VsZnx8biZpaS5Ib3N0JiZ0KX12YXIgWWg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSxpKXtyZXR1cm4gekcodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCxpLGUpfX07ZnVuY3Rpb24gX3BlKCl7cmV0dXJuIG5ldyBZaChNbygpLFplKCkpfWZ1bmN0aW9uIGhpKG4pe3JldHVybiB0ZigoKT0+e2xldCB0PW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGU9dFtRdV18fFRrKHQpLGk9T2JqZWN0LnByb3RvdHlwZSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtyJiZyIT09aTspe2xldCBvPXJbUXVdfHxUayhyKTtpZihvJiZvIT09ZSlyZXR1cm4gbztyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbz0+bmV3IG99KX1mdW5jdGlvbiBUayhuKXtyZXR1cm4gbEcobik/KCk9PntsZXQgdD1UayhxaShuKSk7cmV0dXJuIHQmJnQoKX06UWgobil9ZnVuY3Rpb24gR0cobil7bGV0IHQ9blsxXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bls2XTpudWxsfWZ1bmN0aW9uIEtvKG4pe3JldHVybiBmdW5jdGlvbihuLHQpe2lmKCJjbGFzcyI9PT10KXJldHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2xldCBlPW4uYXR0cnM7aWYoZSl7bGV0IGk9ZS5sZW5ndGgscj0wO2Zvcig7cjxpOyl7bGV0IG89ZVtyXTtpZihGRyhvKSlicmVhaztpZigwPT09bylyKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKWZvcihyKys7cjxpJiYic3RyaW5nIj09dHlwZW9mIGVbcl07KXIrKztlbHNle2lmKG89PT10KXJldHVybiBlW3IrMV07cis9Mn19fXJldHVybiBudWxsfShNbygpLG4pfXZhciB3Zz0iX19hbm5vdGF0aW9uc19fIixNZz0iX19wYXJhbWV0ZXJzX18iLFNnPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIHdiKG4sdCxlLGkscil7cmV0dXJuIHRmKCgpPT57bGV0IG89ekYodCk7ZnVuY3Rpb24gcyguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgcylyZXR1cm4gby5jYWxsKHRoaXMsLi4uYSksdGhpcztsZXQgbD1uZXcgcyguLi5hKTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHImJnIodSwuLi5hKSwodS5oYXNPd25Qcm9wZXJ0eSh3Zyk/dVt3Z106T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsd2cse3ZhbHVlOltdfSlbd2ddKS5wdXNoKGwpLGkmJmkodSksdX19cmV0dXJuIGUmJihzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSkscy5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixzLmFubm90YXRpb25DbHM9cyxzfSl9ZnVuY3Rpb24gekYobil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2lmKG4pe2xldCBpPW4oLi4uZSk7Zm9yKGxldCByIGluIGkpdGhpc1tyXT1pW3JdfX19ZnVuY3Rpb24gemcobix0LGUpe3JldHVybiB0ZigoKT0+e2xldCBpPXpGKHQpO2Z1bmN0aW9uIHIoLi4ubyl7aWYodGhpcyBpbnN0YW5jZW9mIHIpcmV0dXJuIGkuYXBwbHkodGhpcyxvKSx0aGlzO2xldCBzPW5ldyByKC4uLm8pO3JldHVybiBhLmFubm90YXRpb249cyxhO2Z1bmN0aW9uIGEobCxjLHUpe2xldCBkPWwuaGFzT3duUHJvcGVydHkoTWcpP2xbTWddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE1nLHt2YWx1ZTpbXX0pW01nXTtmb3IoO2QubGVuZ3RoPD11OylkLnB1c2gobnVsbCk7cmV0dXJuKGRbdV09ZFt1XXx8W10pLnB1c2gocyksbH19cmV0dXJuIGUmJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixyLmFubm90YXRpb25DbHM9cixyfSl9ZnVuY3Rpb24gc3Aobix0LGUsaSl7cmV0dXJuIHRmKCgpPT57bGV0IHI9ekYodCk7ZnVuY3Rpb24gbyguLi5zKXtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLHMpLHRoaXM7bGV0IGE9bmV3IG8oLi4ucyk7cmV0dXJuIGZ1bmN0aW9uKGMsdSl7bGV0IGQ9Yy5jb25zdHJ1Y3RvcixwPWQuaGFzT3duUHJvcGVydHkoU2cpP2RbU2ddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFNnLHt2YWx1ZTp7fX0pW1NnXTtwW3VdPXAuaGFzT3duUHJvcGVydHkodSkmJnBbdV18fFtdLHBbdV0udW5zaGlmdChhKSxpJiZpKGMsdSwuLi5zKX19cmV0dXJuIGUmJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixvLmFubm90YXRpb25DbHM9byxvfSl9dmFyIHlwZT16ZygiQXR0cmlidXRlIixuPT4oe2F0dHJpYnV0ZU5hbWU6bixfX05HX0VMRU1FTlRfSURfXzooKT0+S28obil9KSksc2U9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX19OR19FTEVNRU5UX0lEX189ZTp2b2lkIDAhPT1lJiYodGhpcy5cdTAyNzVwcm92PWdlKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fSxSZz0obmV3IHNlKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiksY2xhc3N7fSk7ZnVuY3Rpb24gc2wobil7bGV0IHQ9V3Iubmc7aWYodCYmdC5cdTAyNzVjb21waWxlckZhY2FkZSlyZXR1cm4gdC5cdTAyNzVjb21waWxlckZhY2FkZTt0aHJvdyBuZXcgRXJyb3IoIkpJVCBjb21waWxlciB1bmF2YWlsYWJsZSIpfXNwKCJDb250ZW50Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLFJnKSxzcCgiQ29udGVudENoaWxkIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxSZyksc3AoIlZpZXdDaGlsZHJlbiIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMCwuLi50fSksUmcpLHNwKCJWaWV3Q2hpbGQiLChuLHQpPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsLi4udH0pLFJnKTt2YXIgYnBlPUZ1bmN0aW9uO2Z1bmN0aW9uIFh5KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFh1KG4sdCl7dm9pZCAwPT09dCYmKHQ9bik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07QXJyYXkuaXNBcnJheShpKT8odD09PW4mJih0PW4uc2xpY2UoMCxlKSksWHUoaSx0KSk6dCE9PW4mJnQucHVzaChpKX1yZXR1cm4gdH1mdW5jdGlvbiB1YihuLHQpe24uZm9yRWFjaChlPT5BcnJheS5pc0FycmF5KGUpP3ViKGUsdCk6dChlKSl9ZnVuY3Rpb24gcUcobix0LGUpe3Q+PW4ubGVuZ3RoP24ucHVzaChlKTpuLnNwbGljZSh0LDAsZSl9ZnVuY3Rpb24gcEUobix0KXtyZXR1cm4gdD49bi5sZW5ndGgtMT9uLnBvcCgpOm4uc3BsaWNlKHQsMSlbMF19ZnVuY3Rpb24gSnkobix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBFYShuLHQsZSl7bGV0IGk9TWIobix0KTtyZXR1cm4gaT49MD9uWzF8aV09ZTooaT1+aSxmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmxlbmd0aDtpZihyPT10KW4ucHVzaChlLGkpO2Vsc2UgaWYoMT09PXIpbi5wdXNoKGksblswXSksblswXT1lO2Vsc2V7Zm9yKHItLSxuLnB1c2gobltyLTFdLG5bcl0pO3I+dDspbltyXT1uW3ItMl0sci0tO25bdF09ZSxuW3QrMV09aX19KG4saSx0LGUpKSxpfWZ1bmN0aW9uIG5rKG4sdCl7bGV0IGU9TWIobix0KTtpZihlPj0wKXJldHVybiBuWzF8ZV19ZnVuY3Rpb24gTWIobix0KXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPTAscj1uLmxlbmd0aD4+MTtmb3IoO3IhPT1pOyl7bGV0IG89aSsoci1pPj4xKSxzPW5bbzw8MV07aWYodD09PXMpcmV0dXJuIG88PDE7cz50P3I9bzppPW8rMX1yZXR1cm5+KHI8PDEpfShuLHQpfXZhciBNcGU9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpLiopXCkvLFNwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLEVwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sVHBlPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoXClccyp7W159XSpzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2Z1bmN0aW9uIGlrKG4pe3JldHVybiBuP24ubWFwKHQ9Pm5ldygwLHQudHlwZS5hbm5vdGF0aW9uQ2xzKSguLi50LmFyZ3M/dC5hcmdzOltdKSk6W119ZnVuY3Rpb24gSFMobil7bGV0IHQ9bi5wcm90b3R5cGU/T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKTpudWxsO3JldHVybih0P3QuY29uc3RydWN0b3I6bnVsbCl8fE9iamVjdH12YXIgJHksZGI9e30sQWs9Il9fTkdfRElfRkxBR19fIixoRT0ibmdUZW1wVG9rZW5QYXRoIixQcGU9L1xuL2dtLE1qPSJfX3NvdXJjZSI7ZnVuY3Rpb24geGcobil7bGV0IHQ9JHk7cmV0dXJuICR5PW4sdH1mdW5jdGlvbiBPcGUobix0PWlpLkRlZmF1bHQpe2lmKHZvaWQgMD09PSR5KXRocm93IG5ldyBNdCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PSR5P2RHKG4sdm9pZCAwLHQpOiR5LmdldChuLHQmaWkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gUihuLHQ9aWkuRGVmYXVsdCl7cmV0dXJuKENrfHxPcGUpKHFpKG4pLHQpfWZ1bmN0aW9uIFlHKG4pe3Rocm93IG5ldyBNdCgyMDIsITEpfWZ1bmN0aW9uIFNvKG4sdD1paS5EZWZhdWx0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQmJih0PTB8KHQub3B0aW9uYWwmJjgpfCh0Lmhvc3QmJjEpfCh0LnNlbGYmJjIpfCh0LnNraXBTZWxmJiY0KSksUihuLHQpfWZ1bmN0aW9uIElrKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1xaShuW2VdKTtpZihBcnJheS5pc0FycmF5KGkpKXtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDkwMCwhMSk7bGV0IHIsbz1paS5EZWZhdWx0O2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgYT1pW3NdLGw9a3BlKGEpOyJudW1iZXIiPT10eXBlb2YgbD8tMT09PWw/cj1hLnRva2VuOm98PWw6cj1hfXQucHVzaChSKHIsbykpfWVsc2UgdC5wdXNoKFIoaSkpfXJldHVybiB0fWZ1bmN0aW9uIFNiKG4sdCl7cmV0dXJuIG5bQWtdPXQsbi5wcm90b3R5cGVbQWtdPXQsbn1mdW5jdGlvbiBrcGUobil7cmV0dXJuIG5bQWtdfXZhciBqZz1TYih6ZygiSW5qZWN0IixuPT4oe3Rva2VuOm59KSksLTEpLE9vPVNiKHpnKCJPcHRpb25hbCIpLDgpLGpGPVNiKHpnKCJTZWxmIiksMiksVGE9U2IoemcoIlNraXBTZWxmIiksNCksTHBlPVNiKHpnKCJIb3N0IiksMSksU2o9bnVsbDtmdW5jdGlvbiBHRigpe3JldHVybiBTaj1Tanx8bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8V3IuUmVmbGVjdH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgaTtpPUp5KHR5cGVvZiB0PiJ1Ij9lLmxlbmd0aDp0Lmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT10eXBlb2YgdD4idSI/W106dFtyXSYmdFtyXSE9T2JqZWN0P1t0W3JdXTpbXSxlJiZudWxsIT1lW3JdJiYoaVtyXT1pW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJuIGl9X293blBhcmFtZXRlcnModCxlKXtsZXQgaT10LnRvU3RyaW5nKCk7aWYoTXBlLnRlc3Qobj1pKXx8VHBlLnRlc3Qobil8fFNwZS50ZXN0KG4pJiYhRXBlLnRlc3QobikpcmV0dXJuIG51bGw7dmFyIG47aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztsZXQgcj10LmN0b3JQYXJhbWV0ZXJzO2lmKHImJnIhPT1lLmN0b3JQYXJhbWV0ZXJzKXtsZXQgYT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixsPWEubWFwKHU9PnUmJnUudHlwZSksYz1hLm1hcCh1PT51JiZpayh1LmRlY29yYXRvcnMpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhsLGMpfWxldCBvPXQuaGFzT3duUHJvcGVydHkoTWcpJiZ0W01nXSxzPXRoaXMuX3JlZmxlY3QmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJhbXR5cGVzIix0KTtyZXR1cm4gc3x8bz90aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKHMsbyk6SnkodC5sZW5ndGgpfXBhcmFtZXRlcnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duUGFyYW1ldGVycyh0LGUpO3JldHVybiFpJiZlIT09T2JqZWN0JiYoaT10aGlzLnBhcmFtZXRlcnMoZSkpLGl8fFtdfV9vd25Bbm5vdGF0aW9ucyh0LGUpe2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXtsZXQgaT10LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLmFubm90YXRpb25zJiYoaT1pLmFubm90YXRpb25zKSxpfXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUuZGVjb3JhdG9ycz9payh0LmRlY29yYXRvcnMpOnQuaGFzT3duUHJvcGVydHkod2cpP3Rbd2ddOm51bGx9YW5ub3RhdGlvbnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KGkpfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGk9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkucHJvcE1ldGFkYXRhJiYoaT1pLnByb3BNZXRhZGF0YSksaX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7bGV0IGk9dC5wcm9wRGVjb3JhdG9ycyxyPXt9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntyW29dPWlrKGlbb10pfSkscn1yZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShTZyk/dFtTZ106bnVsbH1wcm9wTWV0YWRhdGEodCl7aWYoIVh5KHQpKXJldHVybnt9O2xldCBlPUhTKHQpLGk9e307aWYoZSE9PU9iamVjdCl7bGV0IG89dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMobykuZm9yRWFjaChzPT57aVtzXT1vW3NdfSl9bGV0IHI9dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2gobz0+e2xldCBzPVtdO2kuaGFzT3duUHJvcGVydHkobykmJnMucHVzaCguLi5pW29dKSxzLnB1c2goLi4ucltvXSksaVtvXT1zfSksaX1vd25Qcm9wTWV0YWRhdGEodCl7cmV0dXJuIFh5KHQpJiZ0aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxIUyh0KSl8fHt9fWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJwZSYmZSBpbiB0LnByb3RvdHlwZX19fWZ1bmN0aW9uIFJFKG4pe3JldHVybiBYRyhHRigpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIFhHKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIE9vfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIFRhfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpGfHwiU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2VsZj0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBMcGV8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpdC5ob3N0PSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpnKXQudG9rZW49aS50b2tlbjtlbHNlIGlmKGkgaW5zdGFuY2VvZiB5cGUpe2lmKHZvaWQgMD09PWkuYXR0cmlidXRlTmFtZSl0aHJvdyBuZXcgTXQoMjA0LCExKTt0LmF0dHJpYnV0ZT1pLmF0dHJpYnV0ZU5hbWV9ZWxzZSB0LnRva2VuPWl9ZWxzZSB0LnRva2VuPXZvaWQgMD09PW58fEFycmF5LmlzQXJyYXkobikmJjA9PT1uLmxlbmd0aD9udWxsOm47cmV0dXJuIHR9KHQpKX12YXIgcGI9bmV3IE1hcCxRRz1uZXcgU2V0O2Z1bmN0aW9uIEtHKG4pe3JldHVybiEhKG4udGVtcGxhdGVVcmwmJiFuLmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHxuLnN0eWxlVXJscyYmbi5zdHlsZVVybHMubGVuZ3RoKX12YXIgUGssVVMselMsRWo9bmV3IE1hcDtmdW5jdGlvbiBaRyhuLHQpeyhmdW5jdGlvbihuLHQsZSl7aWYodCYmdCE9PWUpdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIHJlZ2lzdGVyZWQgZm9yICR7bn0gLSAke2NvKHQpfSB2cyAke2NvKHQubmFtZSl9YCl9KSh0LEVqLmdldCh0KXx8bnVsbCxuKSxFai5zZXQodCxuKX1mdW5jdGlvbiAkRygpe3JldHVybiB2b2lkIDAhPT1Qaz9Qazp0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMH1mdW5jdGlvbiBlNigpe2lmKHZvaWQgMD09PVVTJiYoVVM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXtVUz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBVU31mdW5jdGlvbiBPZyhuKXtyZXR1cm4gZTYoKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBXRigpe2lmKHZvaWQgMD09PXpTJiYoelM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXt6Uz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIHpTfWZ1bmN0aW9uIFRqKG4pe3JldHVybiBXRigpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIERqKG4pe3JldHVybiBXRigpPy5jcmVhdGVTY3JpcHQobil8fG59ZnVuY3Rpb24gQWoobil7cmV0dXJuIFdGKCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn12YXIgWnU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgfX0sUms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJIVE1MIn19LE9rPWNsYXNzIGV4dGVuZHMgWnV7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX0sa2s9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJTY3JpcHQifX0sRms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJVUkwifX0sTms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fTtmdW5jdGlvbiAkcyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFp1P24uY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpufWZ1bmN0aW9uIFpsKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBadSYmbi5nZXRUeXBlTmFtZSgpfHxudWxsfShuKTtpZihudWxsIT1lJiZlIT09dCl7aWYoIlJlc291cmNlVVJMIj09PWUmJiJVUkwiPT09dClyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke3R9LCBnb3QgYSAke2V9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gczYobil7bGV0IHQ9bmV3IEJrKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE9nKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBMayh0KTp0fXZhciBMaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhPZyh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSxCaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksbnVsbD09dGhpcy5pbmVydERvY3VtZW50LmJvZHkpe2xldCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7ZS5hcHBlbmRDaGlsZChpKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtpZigiY29udGVudCJpbiBlKXJldHVybiBlLmlubmVySFRNTD1PZyh0KSxlO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7cmV0dXJuIGkuaW5uZXJIVE1MPU9nKHQpLHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGl9c3RyaXBDdXN0b21Oc0F0dHJzKHQpe2xldCBlPXQuYXR0cmlidXRlcztmb3IobGV0IHI9ZS5sZW5ndGgtMTswPHI7ci0tKXtsZXQgcz1lLml0ZW0ocikubmFtZTsoInhtbG5zOm5zMSI9PT1zfHwwPT09cy5pbmRleE9mKCJuczE6IikpJiZ0LnJlbW92ZUF0dHJpYnV0ZShzKX1sZXQgaT10LmZpcnN0Q2hpbGQ7Zm9yKDtpOylpLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGk9aS5uZXh0U2libGluZ319LEtwZT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZGF0YXxmdHB8dGVsfGZpbGV8c21zKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO2Z1bmN0aW9uIEViKG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goS3BlKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIHRkKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuLnNwbGl0KCIsIikpdFtlXT0hMDtyZXR1cm4gdH1mdW5jdGlvbiBUYiguLi5uKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT0hMCk7cmV0dXJuIHR9dmFyIGpTLGE2PXRkKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksbDY9dGQoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxjNj10ZCgicnAscnQiKSxacGU9VGIoYzYsbDYpLEpwZT1UYihsNix0ZCgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksJHBlPVRiKGM2LHRkKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksVms9VGIoYTYsSnBlLCRwZSxacGUpLHFGPXRkKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxlaGU9dGQoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLHRoZT10ZCgiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSx1Nj1UYihxRixlaGUsdGhlKSxuaGU9dGQoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpLGloZT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2cscmhlPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBJaihuKXtyZXR1cm4gbi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShpaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShyaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gWUYobix0KXtsZXQgZT1udWxsO3RyeXtqUz1qU3x8czYobik7bGV0IGk9dD9TdHJpbmcodCk6IiI7ZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpO2xldCByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89ZS5pbm5lckhUTUwsZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTtsZXQgYT0obmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsaT0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9pPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxpJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgcj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHIpe2U9cjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighVmsuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFuaGUuaGFzT3duUHJvcGVydHkoZSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7bGV0IGk9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pLml0ZW0ocikscz1vLm5hbWUsYT1zLnRvTG93ZXJDYXNlKCk7aWYoIXU2Lmhhc093blByb3BlcnR5KGEpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgbD1vLnZhbHVlO3FGW2FdJiYobD1FYihsKSksdGhpcy5idWYucHVzaCgiICIscywnPSInLElqKGwpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtWay5oYXNPd25Qcm9wZXJ0eShlKSYmIWE2Lmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChJaih0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19KS5zYW5pdGl6ZUNoaWxkcmVuKFVrKGUpfHxlKTtyZXR1cm4gT2coYSl9ZmluYWxseXtpZihlKXtsZXQgaT1VayhlKXx8ZTtmb3IoO2kuZmlyc3RDaGlsZDspaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpfX19ZnVuY3Rpb24gVWsobil7cmV0dXJuImNvbnRlbnQiaW4gbiYmZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PW4ubm9kZU5hbWV9KG4pP24uY29udGVudDpudWxsfXZhciBKcj0oKCk9PntyZXR1cm4obj1Kcnx8KEpyPXt9KSlbbi5OT05FPTBdPSJOT05FIixuW24uSFRNTD0xXT0iSFRNTCIsbltuLlNUWUxFPTJdPSJTVFlMRSIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uVVJMPTRdPSJVUkwiLG5bbi5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsSnI7dmFyIG59KSgpO2Z1bmN0aW9uIFhGKG4pe2xldCB0PURiKCk7cmV0dXJuIHQ/VGoodC5zYW5pdGl6ZShKci5IVE1MLG4pfHwiIik6WmwobiwiSFRNTCIpP1RqKCRzKG4pKTpZRigkRygpLHFuKG4pKX1mdW5jdGlvbiBkbChuKXtsZXQgdD1EYigpO3JldHVybiB0P3Quc2FuaXRpemUoSnIuVVJMLG4pfHwiIjpabChuLCJVUkwiKT8kcyhuKTpFYihxbihuKSl9ZnVuY3Rpb24gZDYobil7bGV0IHQ9RGIoKTtpZih0KXJldHVybiBBaih0LnNhbml0aXplKEpyLlJFU09VUkNFX1VSTCxuKXx8IiIpO2lmKFpsKG4sIlJlc291cmNlVVJMIikpcmV0dXJuIEFqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA0LCExKX1mdW5jdGlvbiBEYigpe2xldCBuPVplKCk7cmV0dXJuIG4mJm5bMTJdfXZhciBPRT1uZXcgc2UoIkVOVklST05NRU5UX0lOSVRJQUxJWkVSIikscDY9bmV3IHNlKCJJTkpFQ1RPUiIsLTEpLGg2PW5ldyBzZSgiSU5KRUNUT1JfREVGX1RZUEVTIiksZkU9Y2xhc3N7Z2V0KHQsZT1kYil7aWYoZT09PWRiKXtsZXQgaT1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtjbyh0KX0hYCk7dGhyb3cgaS5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsaX1yZXR1cm4gZX19O2Z1bmN0aW9uIHBoZSguLi5uKXtyZXR1cm57Ilx1MDI3NXByb3ZpZGVycyI6ZjYoMCxuKX19ZnVuY3Rpb24gZjYobiwuLi50KXtsZXQgcixlPVtdLGk9bmV3IFNldDtyZXR1cm4gdWIodCxvPT57bGV0IHM9bzt6ayhzLGUsW10saSkmJihyfHwocj1bXSksci5wdXNoKHMpKX0pLHZvaWQgMCE9PXImJm02KHIsZSksZX1mdW5jdGlvbiBtNihuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXR7cHJvdmlkZXJzOnJ9PW5bZV07dWIocixvPT57dC5wdXNoKG8pfSl9fWZ1bmN0aW9uIHprKG4sdCxlLGkpe2lmKCEobj1xaShuKSkpcmV0dXJuITE7bGV0IHI9bnVsbCxvPWdqKG4pLHM9IW8mJm9sKG4pO2lmKG98fHMpe2lmKHMmJiFzLnN0YW5kYWxvbmUpcmV0dXJuITE7cj1ufWVsc2V7bGV0IGw9bi5uZ01vZHVsZTtpZihvPWdqKGwpLCFvKXJldHVybiExO3I9bH1sZXQgYT1pLmhhcyhyKTtpZihzKXtpZihhKXJldHVybiExO2lmKGkuYWRkKHIpLHMuZGVwZW5kZW5jaWVzKXtsZXQgbD0iZnVuY3Rpb24iPT10eXBlb2Ygcy5kZXBlbmRlbmNpZXM/cy5kZXBlbmRlbmNpZXMoKTpzLmRlcGVuZGVuY2llcztmb3IobGV0IGMgb2YgbCl6ayhjLHQsZSxpKX19ZWxzZXtpZighbylyZXR1cm4hMTt7aWYobnVsbCE9by5pbXBvcnRzJiYhYSl7bGV0IGM7aS5hZGQocik7dHJ5e3ViKG8uaW1wb3J0cyx1PT57emsodSx0LGUsaSkmJihjfHwoYz1bXSksYy5wdXNoKHUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PWMmJm02KGMsdCl9aWYoIWEpe2xldCBjPVFoKHIpfHwoKCk9Pm5ldyByKTt0LnB1c2goe3Byb3ZpZGU6cix1c2VGYWN0b3J5OmMsZGVwczpXaX0se3Byb3ZpZGU6aDYsdXNlVmFsdWU6cixtdWx0aTohMH0se3Byb3ZpZGU6T0UsdXNlVmFsdWU6KCk9PlIociksbXVsdGk6ITB9KX1sZXQgbD1vLnByb3ZpZGVycztudWxsPT1sfHxhfHx1YihsLHU9Pnt0LnB1c2godSl9KX19cmV0dXJuIHIhPT1uJiZ2b2lkIDAhPT1uLnByb3ZpZGVyc312YXIgaGhlPWFyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTphcn0pO2Z1bmN0aW9uIGc2KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZoaGUgaW4gbn1mdW5jdGlvbiBrZyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgcmssa0U9bmV3IHNlKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksUVM9e30sX2hlPXt9O2Z1bmN0aW9uIFFGKCl7cmV0dXJuIHZvaWQgMD09PXJrJiYocms9bmV3IGZFKSxya312YXIgbnA9Y2xhc3N7fSxtRT1jbGFzcyBleHRlbmRzIG5we2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxHayh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KHA2LEVnKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQobnAsRWcodm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KGtFKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChoNi5tdWx0aSxXaSxpaS5TZWxmKSl9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9eGcodGhpcyksaT1pbCh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7eGcoZSksaWwoaSl9fWdldCh0LGU9ZGIsaT1paS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2xldCByPXhnKHRoaXMpLG89aWwodm9pZCAwKTt0cnl7aWYoIShpJmlpLlNraXBTZWxmKSl7bGV0IGE9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1hKXtsZXQgbD0oImZ1bmN0aW9uIj09dHlwZW9mKG49dCl8fCJvYmplY3QiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIHNlKSYmRUYodCk7YT1sJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKGwpP0VnKGprKHQpLFFTKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQodCxhKX1pZihudWxsIT1hKXJldHVybiB0aGlzLmh5ZHJhdGUodCxhKX1yZXR1cm4oaSZpaS5TZWxmP1FGKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9aSZpaS5PcHRpb25hbCYmZT09PWRiP251bGw6ZSl9Y2F0Y2gocyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PXMubmFtZSl7aWYoKHNbaEVdPXNbaEVdfHxbXSkudW5zaGlmdChjbyh0KSkscil0aHJvdyBzO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW2hFXTt0aHJvdyB0W01qXSYmci51bnNoaWZ0KHRbTWpdKSxuLm1lc3NhZ2U9ZnVuY3Rpb24obix0LGUsaT1udWxsKXtuPW4mJiJcbiI9PT1uLmNoYXJBdCgwKSYmIlx1MDI3NSI9PW4uY2hhckF0KDEpP24uc2xpY2UoMik6bjtsZXQgcj1jbyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAoY28pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpjbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZShQcGUsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksbi5uZ1Rva2VuUGF0aD1yLG5baEVdPW51bGwsbn0ocyx0LCJSM0luamVjdG9yRXJyb3IiLHRoaXMuc291cmNlKX10aHJvdyBzfWZpbmFsbHl7aWwobykseGcocil9dmFyIG59cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7bGV0IHQ9eGcodGhpcyksZT1pbCh2b2lkIDApO3RyeXtsZXQgaT10aGlzLmdldChPRS5tdWx0aSxXaSxpaS5TZWxmKTtmb3IobGV0IHIgb2YgaSlyKCl9ZmluYWxseXt4Zyh0KSxpbChlKX19dG9TdHJpbmcoKXtsZXQgdD1bXSxlPXRoaXMucmVjb3Jkcztmb3IobGV0IGkgb2YgZS5rZXlzKCkpdC5wdXNoKGNvKGkpKTtyZXR1cm5gUjNJbmplY3Rvclske3Quam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IE10KDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKHQpe2xldCBlPWtnKHQ9cWkodCkpP3Q6cWkodCYmdC5wcm92aWRlKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBnNihuKT9FZyh2b2lkIDAsbi51c2VWYWx1ZSk6RWcoXzYobiksUVMpfSh0KTtpZihrZyh0KXx8ITAhPT10Lm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoZSk7ZWxzZXtsZXQgcj10aGlzLnJlY29yZHMuZ2V0KGUpO3J8fChyPUVnKHZvaWQgMCxRUywhMCksci5mYWN0b3J5PSgpPT5JayhyLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGUscikpLGU9dCxyLm11bHRpLnB1c2godCl9dGhpcy5yZWNvcmRzLnNldChlLGkpfWh5ZHJhdGUodCxlKXtyZXR1cm4gZS52YWx1ZT09PVFTJiYoZS52YWx1ZT1faGUsZS52YWx1ZT1lLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBlLnZhbHVlJiZlLnZhbHVlJiZudWxsIT09KG49ZS52YWx1ZSkmJiJvYmplY3QiPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3kmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGUudmFsdWUpLGUudmFsdWU7dmFyIG59aW5qZWN0YWJsZURlZkluU2NvcGUodCl7aWYoIXQucHJvdmlkZWRJbilyZXR1cm4hMTtsZXQgZT1xaSh0LnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iYW55Ij09PWV8fHRoaXMuc2NvcGVzLmhhcyhlKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGUpfX07ZnVuY3Rpb24gamsobil7bGV0IHQ9RUYobiksZT1udWxsIT09dD90LmZhY3Rvcnk6UWgobik7aWYobnVsbCE9PWUpcmV0dXJuIGU7aWYobiBpbnN0YW5jZW9mIHNlKXRocm93IG5ldyBNdCgyMDQsITEpO2lmKG4gaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7aWYodD4wKXRocm93IEp5KHQsIj8iKSxuZXcgTXQoMjA0LCExKTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uJiYoblt0RV18fG5bdUddKTtpZih0KXtsZXQgZT1mdW5jdGlvbihuKXtpZihuLmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIG4ubmFtZTtsZXQgdD0oIiIrbikubWF0Y2goL15mdW5jdGlvblxzKihbXlxzKF0rKS8pO3JldHVybiBudWxsPT09dD8iIjp0WzFdfShuKTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7ZX0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7ZX0iIGNsYXNzLmApLHR9cmV0dXJuIG51bGx9KG4pO3JldHVybiBudWxsIT09ZT8oKT0+ZS5mYWN0b3J5KG4pOigpPT5uZXcgbn0obik7dGhyb3cgbmV3IE10KDIwNCwhMSl9ZnVuY3Rpb24gXzYobix0LGUpe2xldCBpO2lmKGtnKG4pKXtsZXQgcj1xaShuKTtyZXR1cm4gUWgocil8fGprKHIpfWlmKGc2KG4pKWk9KCk9PnFpKG4udXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24obil7cmV0dXJuISghbnx8IW4udXNlRmFjdG9yeSl9KG4pKWk9KCk9Pm4udXNlRmFjdG9yeSguLi5JayhuLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VFeGlzdGluZyl9KG4pKWk9KCk9PlIocWkobi51c2VFeGlzdGluZykpO2Vsc2V7bGV0IHI9cWkobiYmKG4udXNlQ2xhc3N8fG4ucHJvdmlkZSkpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hIW4uZGVwc30obikpcmV0dXJuIFFoKHIpfHxqayhyKTtpPSgpPT5uZXcgciguLi5JayhuLmRlcHMpKX1yZXR1cm4gaX1mdW5jdGlvbiBFZyhuLHQsZT0hMSl7cmV0dXJue2ZhY3Rvcnk6bix2YWx1ZTp0LG11bHRpOmU/W106dm9pZCAwfX1mdW5jdGlvbiB3aGUobil7cmV0dXJuISFuLlx1MDI3NXByb3ZpZGVyc31mdW5jdGlvbiBHayhuLHQpe2ZvcihsZXQgZSBvZiBuKUFycmF5LmlzQXJyYXkoZSk/R2soZSx0KTp3aGUoZSk/R2soZS5cdTAyNzVwcm92aWRlcnMsdCk6dChlKX12YXIgV2s9Y2xhc3N7fSxnRT1jbGFzc3t9LHFrPWNsYXNze3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe3Rocm93IGZ1bmN0aW9uKG4pe2xldCB0PUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtjbyhuKX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIHQubmdDb21wb25lbnQ9bix0fSh0KX19LEVvPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5VTEw9bmV3IHFrLG59KSgpO2Z1bmN0aW9uIEVoZSgpe3JldHVybiBHZyhNbygpLFplKCkpfWZ1bmN0aW9uIEdnKG4sdCl7cmV0dXJuIG5ldyBBZSh1bChuLHQpKX12YXIgQWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9ZX19cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189RWhlLG59KSgpO2Z1bmN0aW9uIFRoZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufW5ldyBzZSgiUmVuZGVyZXIySW50ZXJjZXB0b3IiKTt2YXIgcWM9Y2xhc3N7fSxYYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1aZSgpLGU9b3AoTW8oKS5pbmRleCxuKTtyZXR1cm4ocWgoZSk/ZTpuKVsxMV19KCksbn0pKCksQWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLEtsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LEloZT1uZXcgS2woIjE0LjIuMTEiKSxvaz17fTtmdW5jdGlvbiBzayhuKXtyZXR1cm4gbi5uZ09yaWdpbmFsRXJyb3J9dmFyIFNzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2xldCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIix0KSxlJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsZSl9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPXQmJnNrKHQpO2Zvcig7ZSYmc2soZSk7KWU9c2soZSk7cmV0dXJuIGV8fG51bGx9fSxSaGU9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxPaGU9Lyg8fD4pLyx2Nj1uZXcgTWFwLE5oZT0wLFBqPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBZYyhuLHQpe3FoKHQpPyhuW1BqXT10WzIwXSxmdW5jdGlvbihuKXt2Ni5zZXQoblsyMF0sbil9KHQpKTpuW1BqXT10fWZ1bmN0aW9uIEZFKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gS1Mobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdW5jdGlvbj9uKCk6bn12YXIgWWssYWw9KCgpPT57cmV0dXJuKG49YWx8fChhbD17fSkpW24uSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLG5bbi5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLGFsO3ZhciBufSkoKTtmdW5jdGlvbiBLRihuLHQpe3JldHVybiBZayhuLHQpfWZ1bmN0aW9uIFpGKG4pe2xldCB0PW5bM107cmV0dXJuIEp1KHQpP3RbM106dH1mdW5jdGlvbiBKRihuKXtyZXR1cm4gYjYoblsxM10pfWZ1bmN0aW9uICRGKG4pe3JldHVybiBiNihuWzRdKX1mdW5jdGlvbiBiNihuKXtmb3IoO251bGwhPT1uJiYhSnUobik7KW49bls0XTtyZXR1cm4gbn1mdW5jdGlvbiBUZyhuLHQsZSxpLHIpe2lmKG51bGwhPWkpe2xldCBvLHM9ITE7SnUoaSk/bz1pOnFoKGkpJiYocz0hMCxpPWlbMF0pO2xldCBhPU1hKGkpOzA9PT1uJiZudWxsIT09ZT9udWxsPT1yP0U2KHQsZSxhKTpaaCh0LGUsYSxyfHxudWxsLCEwKToxPT09biYmbnVsbCE9PWU/WmgodCxlLGEscnx8bnVsbCwhMCk6Mj09PW4/UjYodCxhLHMpOjM9PT1uJiZ0LmRlc3Ryb3lOb2RlKGEpLG51bGwhPW8mJmZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89ZVs3XTtvIT09TWEoZSkmJlRnKHQsbixpLG8scik7Zm9yKGxldCBhPTEwO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbD1lW2FdO0FiKGxbMV0sbCxuLHQsaSxvKX19KHQsbixvLGUscil9fWZ1bmN0aW9uIGVOKG4sdCl7cmV0dXJuIG4uY3JlYXRlVGV4dCh0KX1mdW5jdGlvbiB4NihuLHQsZSl7bi5zZXRWYWx1ZSh0LGUpfWZ1bmN0aW9uIEdoZShuLHQpe3JldHVybiBuLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShSaGUsdD0+dC5yZXBsYWNlKE9oZSwiXHUyMDBiJDFcdTIwMGIiKSl9KHQpKX1mdW5jdGlvbiB0TihuLHQsZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudCh0LGUpfWZ1bmN0aW9uIEM2KG4sdCl7bGV0IGU9bls5XSxpPWUuaW5kZXhPZih0KSxyPXRbM107NTEyJnRbMl0mJih0WzJdJj0tNTEzLE9GKHIsLTEpKSxlLnNwbGljZShpLDEpfWZ1bmN0aW9uIFhrKG4sdCl7aWYobi5sZW5ndGg8PTEwKXJldHVybjtsZXQgZT0xMCt0LGk9bltlXTtpZihpKXtsZXQgcj1pWzE3XTtudWxsIT09ciYmciE9PW4mJkM2KHIsaSksdD4wJiYobltlLTFdWzRdPWlbNF0pO2xldCBvPXBFKG4sMTArdCk7IWZ1bmN0aW9uKG4sdCl7QWIobix0LHRbMTFdLDIsbnVsbCxudWxsKSx0WzBdPW51bGwsdFs2XT1udWxsfShpWzFdLGkpO2xldCBzPW9bMTldO251bGwhPT1zJiZzLmRldGFjaFZpZXcob1sxXSksaVszXT1udWxsLGlbNF09bnVsbCxpWzJdJj0tNjV9cmV0dXJuIGl9ZnVuY3Rpb24gdzYobix0KXtpZighKDEyOCZ0WzJdKSl7bGV0IGU9dFsxMV07ZS5kZXN0cm95Tm9kZSYmQWIobix0LGUsMyxudWxsLG51bGwpLGZ1bmN0aW9uKG4pe2xldCB0PW5bMTNdO2lmKCF0KXJldHVybiBhayhuWzFdLG4pO2Zvcig7dDspe2xldCBlPW51bGw7aWYocWgodCkpZT10WzEzXTtlbHNle2xldCBpPXRbMTBdO2kmJihlPWkpfWlmKCFlKXtmb3IoO3QmJiF0WzRdJiZ0IT09bjspcWgodCkmJmFrKHRbMV0sdCksdD10WzNdO251bGw9PT10JiYodD1uKSxxaCh0KSYmYWsodFsxXSx0KSxlPXQmJnRbNF19dD1lfX0odCl9fWZ1bmN0aW9uIGFrKG4sdCl7aWYoISgxMjgmdFsyXSkpe3RbMl0mPS02NSx0WzJdfD0xMjgsZnVuY3Rpb24obix0KXtsZXQgZTtpZihudWxsIT1uJiZudWxsIT0oZT1uLmRlc3Ryb3lIb29rcykpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj10W2VbaV1dO2lmKCEociBpbnN0YW5jZW9mIEtoKSl7bGV0IG89ZVtpKzFdO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKz0yKXtsZXQgYT1yW29bc11dLGw9b1tzKzFdO3RyeXtsLmNhbGwoYSl9ZmluYWxseXt9fWVsc2UgdHJ5e28uY2FsbChyKX1maW5hbGx5e319fX0obix0KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY2xlYW51cCxpPXRbN10scj0tMTtpZihudWxsIT09ZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoLTE7bys9MilpZigic3RyaW5nIj09dHlwZW9mIGVbb10pe2xldCBzPWVbbysxXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBzP3ModCk6TWEodFtzXSksbD1pW3I9ZVtvKzJdXSxjPWVbbyszXTsiYm9vbGVhbiI9PXR5cGVvZiBjP2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihlW29dLGwsYyk6Yz49MD9pW3I9Y10oKTppW3I9LWNdLnVuc3Vic2NyaWJlKCksbys9Mn1lbHNle2xldCBzPWlbcj1lW28rMV1dO2Vbb10uY2FsbChzKX1pZihudWxsIT09aSl7Zm9yKGxldCBvPXIrMTtvPGkubGVuZ3RoO28rKykoMCxpW29dKSgpO3RbN109bnVsbH19KG4sdCksMT09PXRbMV0udHlwZSYmdFsxMV0uZGVzdHJveSgpO2xldCBlPXRbMTddO2lmKG51bGwhPT1lJiZKdSh0WzNdKSl7ZSE9PXRbM10mJkM2KGUsdCk7bGV0IGk9dFsxOV07bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX0hZnVuY3Rpb24obil7djYuZGVsZXRlKG5bMjBdKX0odCl9fWZ1bmN0aW9uIE02KG4sdCxlKXtyZXR1cm4gUzYobix0LnBhcmVudCxlKX1mdW5jdGlvbiBTNihuLHQsZSl7bGV0IGk9dDtmb3IoO251bGwhPT1pJiY0MCZpLnR5cGU7KWk9KHQ9aSkucGFyZW50O2lmKG51bGw9PT1pKXJldHVybiBlWzBdO2lmKDImaS5mbGFncyl7bGV0IHI9bi5kYXRhW2kuZGlyZWN0aXZlU3RhcnRdLmVuY2Fwc3VsYXRpb247aWYocj09PXdhLk5vbmV8fHI9PT13YS5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gdWwoaSxlKX1mdW5jdGlvbiBaaChuLHQsZSxpLHIpe24uaW5zZXJ0QmVmb3JlKHQsZSxpLHIpfWZ1bmN0aW9uIEU2KG4sdCxlKXtuLmFwcGVuZENoaWxkKHQsZSl9ZnVuY3Rpb24gUmoobix0LGUsaSxyKXtudWxsIT09aT9aaChuLHQsZSxpLHIpOkU2KG4sdCxlKX1mdW5jdGlvbiBORShuLHQpe3JldHVybiBuLnBhcmVudE5vZGUodCl9ZnVuY3Rpb24gVDYobix0LGUpe3JldHVybiBBNihuLHQsZSl9ZnVuY3Rpb24gRDYobix0LGUpe3JldHVybiA0MCZuLnR5cGU/dWwobixlKTpudWxsfXZhciBRayxBNj1ENjtmdW5jdGlvbiBJNihuLHQpe0E2PW4sUWs9dH1mdW5jdGlvbiBMRShuLHQsZSxpKXtsZXQgcj1NNihuLGksdCksbz10WzExXSxhPVQ2KGkucGFyZW50fHx0WzZdLGksdCk7aWYobnVsbCE9cilpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKVJqKG8scixlW2xdLGEsITEpO2Vsc2UgUmoobyxyLGUsYSwhMSk7dm9pZCAwIT09UWsmJlFrKG8saSx0LGUscil9ZnVuY3Rpb24gWlMobix0KXtpZihudWxsIT09dCl7bGV0IGU9dC50eXBlO2lmKDMmZSlyZXR1cm4gdWwodCxuKTtpZig0JmUpcmV0dXJuIEtrKC0xLG5bdC5pbmRleF0pO2lmKDgmZSl7bGV0IGk9dC5jaGlsZDtpZihudWxsIT09aSlyZXR1cm4gWlMobixpKTt7bGV0IHI9blt0LmluZGV4XTtyZXR1cm4gSnUocik/S2soLTEscik6TWEocil9fWlmKDMyJmUpcmV0dXJuIEtGKHQsbikoKXx8TWEoblt0LmluZGV4XSk7e2xldCBpPVA2KG4sdCk7cmV0dXJuIG51bGwhPT1pP0FycmF5LmlzQXJyYXkoaSk/aVswXTpaUyhaRihuWzE2XSksaSk6WlMobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBQNihuLHQpe3JldHVybiBudWxsIT09dD9uWzE2XVs2XS5wcm9qZWN0aW9uW3QucHJvamVjdGlvbl06bnVsbH1mdW5jdGlvbiBLayhuLHQpe2xldCBlPTEwK24rMTtpZihlPHQubGVuZ3RoKXtsZXQgaT10W2VdLHI9aVsxXS5maXJzdENoaWxkO2lmKG51bGwhPT1yKXJldHVybiBaUyhpLHIpfXJldHVybiB0WzddfWZ1bmN0aW9uIFI2KG4sdCxlKXtsZXQgaT1ORShuLHQpO2kmJmZ1bmN0aW9uKG4sdCxlLGkpe24ucmVtb3ZlQ2hpbGQodCxlLGkpfShuLGksdCxlKX1mdW5jdGlvbiBuTihuLHQsZSxpLHIsbyxzKXtmb3IoO251bGwhPWU7KXtsZXQgYT1pW2UuaW5kZXhdLGw9ZS50eXBlO2lmKHMmJjA9PT10JiYoYSYmWWMoTWEoYSksaSksZS5mbGFnc3w9NCksNjQhPSg2NCZlLmZsYWdzKSlpZig4Jmwpbk4obix0LGUuY2hpbGQsaSxyLG8sITEpLFRnKHQsbixyLGEsbyk7ZWxzZSBpZigzMiZsKXtsZXQgdSxjPUtGKGUsaSk7Zm9yKDt1PWMoKTspVGcodCxuLHIsdSxvKTtUZyh0LG4scixhLG8pfWVsc2UgMTYmbD9PNihuLHQsaSxlLHIsbyk6VGcodCxuLHIsYSxvKTtlPXM/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0aW9uIEFiKG4sdCxlLGkscixvKXtuTihlLGksbi5maXJzdENoaWxkLHQscixvLCExKX1mdW5jdGlvbiBPNihuLHQsZSxpLHIsbyl7bGV0IHM9ZVsxNl0sbD1zWzZdLnByb2plY3Rpb25baS5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKVRnKHQsbixyLGxbY10sbyk7ZWxzZSBuTihuLHQsbCxzWzNdLHIsbywhMCl9ZnVuY3Rpb24gazYobix0LGUpe24uc2V0QXR0cmlidXRlKHQsInN0eWxlIixlKX1mdW5jdGlvbiBpTihuLHQsZSl7IiI9PT1lP24ucmVtb3ZlQXR0cmlidXRlKHQsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfWZ1bmN0aW9uIEY2KG4sdCxlKXtsZXQgaT1uLmxlbmd0aDtmb3IoOzspe2xldCByPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09cilyZXR1cm4gcjtpZigwPT09cnx8bi5jaGFyQ29kZUF0KHItMSk8PTMyKXtsZXQgbz10Lmxlbmd0aDtpZihyK289PT1pfHxuLmNoYXJDb2RlQXQocitvKTw9MzIpcmV0dXJuIHJ9ZT1yKzF9fXZhciBONj0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIHJmZShuLHQsZSl7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGg7KXtsZXQgcj1uW2krK107aWYoZSYmImNsYXNzIj09PXIpe2lmKHI9bltpXSwtMSE9PUY2KHIudG9Mb3dlckNhc2UoKSx0LDApKXJldHVybiEwfWVsc2UgaWYoMT09PXIpe2Zvcig7aTxuLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihyPW5baSsrXSk7KWlmKHIudG9Mb3dlckNhc2UoKT09PXQpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiExfWZ1bmN0aW9uIEw2KG4pe3JldHVybiA0PT09bi50eXBlJiZuLnZhbHVlIT09TjZ9ZnVuY3Rpb24gb2ZlKG4sdCxlKXtyZXR1cm4gdD09PSg0IT09bi50eXBlfHxlP24udmFsdWU6TjYpfWZ1bmN0aW9uIHNmZShuLHQsZSl7bGV0IGk9NCxyPW4uYXR0cnN8fFtdLG89ZnVuY3Rpb24obil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoRkcoblt0XSkpcmV0dXJuIHQ7cmV0dXJuIG4ubGVuZ3RofShyKSxzPSExO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtsZXQgbD10W2FdO2lmKCJudW1iZXIiIT10eXBlb2YgbCl7aWYoIXMpaWYoNCZpKXtpZihpPTJ8MSZpLCIiIT09bCYmIW9mZShuLGwsZSl8fCIiPT09bCYmMT09PXQubGVuZ3RoKXtpZihXbChpKSlyZXR1cm4hMTtzPSEwfX1lbHNle2xldCBjPTgmaT9sOnRbKythXTtpZig4JmkmJm51bGwhPT1uLmF0dHJzKXtpZighcmZlKG4uYXR0cnMsYyxlKSl7aWYoV2woaSkpcmV0dXJuITE7cz0hMH1jb250aW51ZX1sZXQgZD1hZmUoOCZpPyJjbGFzcyI6bCxyLEw2KG4pLGUpO2lmKC0xPT09ZCl7aWYoV2woaSkpcmV0dXJuITE7cz0hMDtjb250aW51ZX1pZigiIiE9PWMpe2xldCBwO3A9ZD5vPyIiOnJbZCsxXS50b0xvd2VyQ2FzZSgpO2xldCBoPTgmaT9wOm51bGw7aWYoaCYmLTEhPT1GNihoLGMsMCl8fDImaSYmYyE9PXApe2lmKFdsKGkpKXJldHVybiExO3M9ITB9fX19ZWxzZXtpZighcyYmIVdsKGkpJiYhV2wobCkpcmV0dXJuITE7aWYocyYmV2wobCkpY29udGludWU7cz0hMSxpPWx8MSZpfX1yZXR1cm4gV2woaSl8fHN9ZnVuY3Rpb24gV2wobil7cmV0dXJuIDA9PSgxJm4pfWZ1bmN0aW9uIGFmZShuLHQsZSxpKXtpZihudWxsPT09dClyZXR1cm4tMTtsZXQgcj0wO2lmKGl8fCFlKXtsZXQgbz0hMTtmb3IoO3I8dC5sZW5ndGg7KXtsZXQgcz10W3JdO2lmKHM9PT1uKXJldHVybiByO2lmKDM9PT1zfHw2PT09cylvPSEwO2Vsc2V7aWYoMT09PXN8fDI9PT1zKXtsZXQgYT10Wysrcl07Zm9yKDsic3RyaW5nIj09dHlwZW9mIGE7KWE9dFsrK3JdO2NvbnRpbnVlfWlmKDQ9PT1zKWJyZWFrO2lmKDA9PT1zKXtyKz00O2NvbnRpbnVlfX1yKz1vPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YoNCk7aWYoZT4tMSlmb3IoZSsrO2U8bi5sZW5ndGg7KXtsZXQgaT1uW2VdO2lmKCJudW1iZXIiPT10eXBlb2YgaSlyZXR1cm4tMTtpZihpPT09dClyZXR1cm4gZTtlKyt9cmV0dXJuLTF9KHQsbil9ZnVuY3Rpb24gQjYobix0LGU9ITEpe2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHNmZShuLHRbaV0sZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZGZlKG4sdCl7ZTpmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXTtpZihuLmxlbmd0aD09PWkubGVuZ3RoKXtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKylpZihuW3JdIT09aVtyXSljb250aW51ZSBlO3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBPaihuLHQpe3JldHVybiBuPyI6bm90KCIrdC50cmltKCkrIikiOnR9ZnVuY3Rpb24gcGZlKG4pe2xldCB0PW5bMF0sZT0xLGk9MixyPSIiLG89ITE7Zm9yKDtlPG4ubGVuZ3RoOyl7bGV0IHM9bltlXTtpZigic3RyaW5nIj09dHlwZW9mIHMpaWYoMiZpKXtsZXQgYT1uWysrZV07cis9IlsiK3MrKGEubGVuZ3RoPjA/Jz0iJythKyciJzoiIikrIl0ifWVsc2UgOCZpP3IrPSIuIitzOjQmaSYmKHIrPSIgIitzKTtlbHNlIiIhPT1yJiYhV2wocykmJih0Kz1PaihvLHIpLHI9IiIpLGk9cyxvPW98fCFXbChpKTtlKyt9cmV0dXJuIiIhPT1yJiYodCs9T2oobyxyKSksdH12YXIgR249e307ZnVuY3Rpb24geChuKXtWNihEaSgpLFplKCksVHMoKStuLCExKX1mdW5jdGlvbiBWNihuLHQsZSxpKXtpZighaSlpZigzPT0oMyZ0WzJdKSl7bGV0IG89bi5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PW8mJnFTKHQsbyxlKX1lbHNle2xldCBvPW4ucHJlT3JkZXJIb29rcztudWxsIT09byYmWVModCxvLDAsZSl9dHAoZSl9dmFyIGtqPXsiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSI6Z2UsIlx1MDI3NVx1MDI3NWRlZmluZUluamVjdG9yIjpVLCJcdTAyNzVcdTAyNzVpbmplY3QiOlIsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRyxyZXNvbHZlRm9yd2FyZFJlZjpxaX07dmFyIGdmZT1hcih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6YXJ9KTtmdW5jdGlvbiBGaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VDbGFzc31mdW5jdGlvbiBOaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VGYWN0b3J5fXZhciBINj13YigiSW5qZWN0YWJsZSIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7bi5oYXNPd25Qcm9wZXJ0eSh0RSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHRFLHtnZXQ6KCk9PihudWxsPT09ZSYmKGU9c2woKS5jb21waWxlSW5qZWN0YWJsZShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NXByb3YuanNgLGZ1bmN0aW9uKG4sdCl7bGV0IGU9dHx8e3Byb3ZpZGVkSW46bnVsbH0saT17bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjplLnByb3ZpZGVkSW59O3JldHVybihGaihlKXx8TmooZSkpJiZ2b2lkIDAhPT1lLmRlcHMmJihpLmRlcHM9WEcoZS5kZXBzKSksRmooZSk/aS51c2VDbGFzcz1lLnVzZUNsYXNzOmZ1bmN0aW9uKG4pe3JldHVybiBnZmUgaW4gbn0oZSk/aS51c2VWYWx1ZT1lLnVzZVZhbHVlOk5qKGUpP2kudXNlRmFjdG9yeT1lLnVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIHZvaWQgMCE9PW4udXNlRXhpc3Rpbmd9KGUpJiYoaS51c2VFeGlzdGluZz1lLnVzZUV4aXN0aW5nKSxpfShuLHQpKSksZSl9KSxuLmhhc093blByb3BlcnR5KFF1KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj1zbCgpO2k9ci5jb21waWxlRmFjdG9yeShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bix0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0OnIuRmFjdG9yeVRhcmdldC5JbmplY3RhYmxlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMH0pfShuLHQpKTtmdW5jdGlvbiBMaihuLHQ9bnVsbCxlPW51bGwsaSl7bGV0IHI9VTYobix0LGUsaSk7cmV0dXJuIHIucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCkscn1mdW5jdGlvbiBVNihuLHQ9bnVsbCxlPW51bGwsaSxyPW5ldyBTZXQpe2xldCBvPVtlfHxXaSxwaGUobildO3JldHVybiBpPWl8fCgib2JqZWN0Ij09dHlwZW9mIG4/dm9pZCAwOmNvKG4pKSxuZXcgbUUobyx0fHxRRigpLGl8fG51bGwscil9dmFyIHpuPSgoKT0+e2NsYXNzIG57c3RhdGljIGNyZWF0ZShlLGkpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIExqKHtuYW1lOiIifSxpLGUsIiIpO3tsZXQgcj1lLm5hbWU/PyIiO3JldHVybiBMaih7bmFtZTpyfSxlLnBhcmVudCxlLnByb3ZpZGVycyxyKX19fXJldHVybiBuLlRIUk9XX0lGX05PVF9GT1VORD1kYixuLk5VTEw9bmV3IGZFLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PlIocDYpfSksbi5fX05HX0VMRU1FTlRfSURfXz0tMSxufSkoKSxlYj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHRoaXMudG9rZW49dCx0aGlzLmlkPWUsIXQpdGhyb3cgbmV3IE10KDIwOCwhMSk7dGhpcy5kaXNwbGF5TmFtZT1jbyh0aGlzLnRva2VuKX1zdGF0aWMgZ2V0KHQpe3JldHVybiBCai5nZXQocWkodCkpfXN0YXRpYyBnZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIEJqLm51bWJlck9mS2V5c319LEJqPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FsbEtleXM9bmV3IE1hcH1nZXQodCl7aWYodCBpbnN0YW5jZW9mIGViKXJldHVybiB0O2lmKHRoaXMuX2FsbEtleXMuaGFzKHQpKXJldHVybiB0aGlzLl9hbGxLZXlzLmdldCh0KTtsZXQgZT1uZXcgZWIodCxlYi5udW1iZXJPZktleXMpO3JldHVybiB0aGlzLl9hbGxLZXlzLnNldCh0LGUpLGV9Z2V0IG51bWJlck9mS2V5cygpe3JldHVybiB0aGlzLl9hbGxLZXlzLnNpemV9fTtmdW5jdGlvbiB3KG4sdD1paS5EZWZhdWx0KXtsZXQgZT1aZSgpO3JldHVybiBudWxsPT09ZT9SKG4sdCk6ekcoTW8oKSxlLHFpKG4pLHQpfWZ1bmN0aW9uIEpsKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9ZnVuY3Rpb24gR1Mobix0KXtyZXR1cm4gbjw8MTd8dDw8Mn1mdW5jdGlvbiBKaChuKXtyZXR1cm4gbj4+MTcmMzI3Njd9ZnVuY3Rpb24gSmsobil7cmV0dXJuIDJ8bn1mdW5jdGlvbiBGZyhuKXtyZXR1cm4oMTMxMDY4Jm4pPj4yfWZ1bmN0aW9uIGxrKG4sdCl7cmV0dXJuLTEzMTA2OSZufHQ8PDJ9ZnVuY3Rpb24gJGsobil7cmV0dXJuIDF8bn1mdW5jdGlvbiB6NihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj1lW2ldLG89ZVtpKzFdO2lmKC0xIT09byl7bGV0IHM9bi5kYXRhW29dO0xGKHIpLHMuY29udGVudFF1ZXJpZXMoMix0W29dLG8pfX19ZnVuY3Rpb24gQkUobix0LGUsaSxyLG8scyxhLGwsYyx1KXtsZXQgZD10LmJsdWVwcmludC5zbGljZSgpO3JldHVybiBkWzBdPXIsZFsyXT03NnxpLChudWxsIT09dXx8biYmMTAyNCZuWzJdKSYmKGRbMl18PTEwMjQpLHdHKGQpLGRbM109ZFsxNV09bixkWzhdPWUsZFsxMF09c3x8biYmblsxMF0sZFsxMV09YXx8biYmblsxMV0sZFsxMl09bHx8biYmblsxMl18fG51bGwsZFs5XT1jfHxuJiZuWzldfHxudWxsLGRbNl09byxkWzIwXT1OaGUrKyxkWzIxXT11LGRbMTZdPTI9PXQudHlwZT9uWzE2XTpkLGR9ZnVuY3Rpb24gV2cobix0LGUsaSxyKXtsZXQgbz1uLmRhdGFbdF07aWYobnVsbD09PW8pbz1yTihuLHQsZSxpLHIpLFluLmxGcmFtZS5pbkkxOG4mJihvLmZsYWdzfD02NCk7ZWxzZSBpZig2NCZvLnR5cGUpe28udHlwZT1lLG8udmFsdWU9aSxvLmF0dHJzPXI7bGV0IHM9bGIoKTtvLmluamVjdG9ySW5kZXg9bnVsbD09PXM/LTE6cy5pbmplY3RvckluZGV4fXJldHVybiBXYyhvLCEwKSxvfWZ1bmN0aW9uIHJOKG4sdCxlLGkscil7bGV0IG89U0coKSxzPWtGKCksbD1uLmRhdGFbdF09ZnVuY3Rpb24obix0LGUsaSxyLG8pe3JldHVybnt0eXBlOmUsaW5kZXg6aSxpbnNlcnRCZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6dD90LmluamVjdG9ySW5kZXg6LTEsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOnIsYXR0cnM6byxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXdzOm51bGwsbmV4dDpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAscz9vOm8mJm8ucGFyZW50LGUsdCxpLHIpO3JldHVybiBudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPWwpLG51bGwhPT1vJiYocz9udWxsPT1vLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihvLmNoaWxkPWwpOm51bGw9PT1vLm5leHQmJihvLm5leHQ9bCkpLGx9ZnVuY3Rpb24gcWcobix0LGUsaSl7aWYoMD09PWUpcmV0dXJuLTE7bGV0IHI9dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxlO28rKyl0LnB1c2goaSksbi5ibHVlcHJpbnQucHVzaChpKSxuLmRhdGEucHVzaChudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBvTihuLHQsZSl7QkYodCk7dHJ5e2xldCBpPW4udmlld1F1ZXJ5O251bGwhPT1pJiZ0RigxLGksZSk7bGV0IHI9bi50ZW1wbGF0ZTtudWxsIT09ciYmajYobix0LHIsMSxlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmKG4uZmlyc3RDcmVhdGVQYXNzPSExKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLG4uc3RhdGljVmlld1F1ZXJpZXMmJnRGKDIsbi52aWV3UXVlcnksZSk7bGV0IG89bi5jb21wb25lbnRzO251bGwhPT1vJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWpmZShuLHRbZV0pfSh0LG8pfWNhdGNoKGkpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxpfWZpbmFsbHl7dFsyXSY9LTUsVkYoKX19ZnVuY3Rpb24gVkUobix0LGUsaSl7bGV0IHI9dFsyXTtpZigxMjghPSgxMjgmcikpe0JGKHQpO3RyeXt3Ryh0KSxFRyhuLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09ZSYmajYobix0LGUsMixpKTtsZXQgcz0zPT0oMyZyKTtpZihzKXtsZXQgYz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09YyYmcVModCxjLG51bGwpfWVsc2V7bGV0IGM9bi5wcmVPcmRlckhvb2tzO251bGwhPT1jJiZZUyh0LGMsMCxudWxsKSxlayh0LDApfWlmKGZ1bmN0aW9uKG4pe2ZvcihsZXQgdD1KRihuKTtudWxsIT09dDt0PSRGKHQpKXtpZighdFsyXSljb250aW51ZTtsZXQgZT10WzldO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLG89clszXTswPT0oNTEyJnJbMl0pJiZPRihvLDEpLHJbMl18PTUxMn19fSh0KSxmdW5jdGlvbihuKXtmb3IobGV0IHQ9SkYobik7bnVsbCE9PXQ7dD0kRih0KSlmb3IobGV0IGU9MTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV0scj1pWzFdO29FKGkpJiZWRShyLGksci50ZW1wbGF0ZSxpWzhdKX19KHQpLG51bGwhPT1uLmNvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLHMpe2xldCBjPW4uY29udGVudENoZWNrSG9va3M7bnVsbCE9PWMmJnFTKHQsYyl9ZWxzZXtsZXQgYz1uLmNvbnRlbnRIb29rcztudWxsIT09YyYmWVModCxjLDEpLGVrKHQsMSl9IWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PWUpdHJ5e2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldO2lmKHI8MCl0cCh+cik7ZWxzZXtsZXQgbz1yLHM9ZVsrK2ldLGE9ZVsrK2ldO1FkZShzLG8pLGEoMix0W29dKX19fWZpbmFsbHl7dHAoLTEpfX0obix0KTtsZXQgYT1uLmNvbXBvbmVudHM7bnVsbCE9PWEmJmZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspemZlKG4sdFtlXSl9KHQsYSk7bGV0IGw9bi52aWV3UXVlcnk7aWYobnVsbCE9PWwmJnRGKDIsbCxpKSxzKXtsZXQgYz1uLnZpZXdDaGVja0hvb2tzO251bGwhPT1jJiZxUyh0LGMpfWVsc2V7bGV0IGM9bi52aWV3SG9va3M7bnVsbCE9PWMmJllTKHQsYywyKSxlayh0LDIpfSEwPT09bi5maXJzdFVwZGF0ZVBhc3MmJihuLmZpcnN0VXBkYXRlUGFzcz0hMSksdFsyXSY9LTQxLDUxMiZ0WzJdJiYodFsyXSY9LTUxMyxPRih0WzNdLC0xKSl9ZmluYWxseXtWRigpfX19ZnVuY3Rpb24gajYobix0LGUsaSxyKXtsZXQgbz1UcygpLHM9MiZpO3RyeXt0cCgtMSkscyYmdC5sZW5ndGg+MjImJlY2KG4sdCwyMiwhMSksZShpLHIpfWZpbmFsbHl7dHAobyl9fWZ1bmN0aW9uIEc2KG4sdCxlKXtpZihQRih0KSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBvPXQuZGlyZWN0aXZlU3RhcnQ7bzxyO28rKyl7bGV0IHM9bi5kYXRhW29dO3MuY29udGVudFF1ZXJpZXMmJnMuY29udGVudFF1ZXJpZXMoMSxlW29dLG8pfX19ZnVuY3Rpb24gc04obix0LGUpeyFNRygpfHwoZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZS5kaXJlY3RpdmVTdGFydCxvPWUuZGlyZWN0aXZlRW5kO24uZmlyc3RDcmVhdGVQYXNzfHxjYihlLHQpLFljKGksdCk7bGV0IHM9ZS5pbml0aWFsSW5wdXRzO2ZvcihsZXQgYT1yO2E8bzthKyspe2xldCBsPW4uZGF0YVthXSxjPVFsKGwpO2MmJkxmZSh0LGUsbCk7bGV0IHU9Q2IodCxuLGEsZSk7WWModSx0KSxudWxsIT09cyYmQmZlKDAsYS1yLHUsbCwwLHMpLGMmJihvcChlLmluZGV4LHQpWzhdPXUpfX0obix0LGUsdWwoZSx0KSksMTI4PT0oMTI4JmUuZmxhZ3MpJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9ZS5kaXJlY3RpdmVTdGFydCxyPWUuZGlyZWN0aXZlRW5kLG89ZS5pbmRleCxzPVluLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7dHJ5e3RwKG8pO2ZvcihsZXQgYT1pO2E8cjthKyspe2xldCBsPW4uZGF0YVthXSxjPXRbYV07U2soYSksKG51bGwhPT1sLmhvc3RCaW5kaW5nc3x8MCE9PWwuaG9zdFZhcnN8fG51bGwhPT1sLmhvc3RBdHRycykmJks2KGwsYyl9fWZpbmFsbHl7dHAoLTEpLFNrKHMpfX0obix0LGUpKX1mdW5jdGlvbiBhTihuLHQsZT11bCl7bGV0IGk9dC5sb2NhbE5hbWVzO2lmKG51bGwhPT1pKXtsZXQgcj10LmluZGV4KzE7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKz0yKXtsZXQgcz1pW28rMV0sYT0tMT09PXM/ZSh0LG4pOm5bc107bltyKytdPWF9fX1mdW5jdGlvbiBXNihuKXtsZXQgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9bE4oMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzKTp0fWZ1bmN0aW9uIGxOKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCB1PTIyK2ksZD11K3IscD1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKGk8bj9udWxsOkduKTtyZXR1cm4gZX0odSxkKSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjO3JldHVybiBwWzFdPXt0eXBlOm4sYmx1ZXByaW50OnAsdGVtcGxhdGU6ZSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OmEsZGVjbFROb2RlOnQsZGF0YTpwLnNsaWNlKCkuZmlsbChudWxsLHUpLGJpbmRpbmdTdGFydEluZGV4OnUsZXhwYW5kb1N0YXJ0SW5kZXg6ZCxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygcz9zKCk6cyxmaXJzdENoaWxkOm51bGwsc2NoZW1hczpsLGNvbnN0czpoLGluY29tcGxldGVGaXJzdFBhc3M6ITF9fWZ1bmN0aW9uIHE2KG4sdCxlLGkpe2xldCByPWlXKHQpO251bGw9PT1lP3IucHVzaChpKTooci5wdXNoKGUpLG4uZmlyc3RDcmVhdGVQYXNzJiZyVyhuKS5wdXNoKGksci5sZW5ndGgtMSkpfWZ1bmN0aW9uIFZqKG4sdCxlKXtmb3IobGV0IGkgaW4gbilpZihuLmhhc093blByb3BlcnR5KGkpKXtsZXQgcj1uW2ldOyhlPW51bGw9PT1lP3t9OmUpLmhhc093blByb3BlcnR5KGkpP2VbaV0ucHVzaCh0LHIpOmVbaV09W3Qscl19cmV0dXJuIGV9ZnVuY3Rpb24gWTYobix0KXtsZXQgaT10LmRpcmVjdGl2ZUVuZCxyPW4uZGF0YSxvPXQuYXR0cnMscz1bXSxhPW51bGwsbD1udWxsO2ZvcihsZXQgYz10LmRpcmVjdGl2ZVN0YXJ0O2M8aTtjKyspe2xldCB1PXJbY10sZD11LmlucHV0cyxwPW51bGw9PT1vfHxMNih0KT9udWxsOlZmZShkLG8pO3MucHVzaChwKSxhPVZqKGQsYyxhKSxsPVZqKHUub3V0cHV0cyxjLGwpfW51bGwhPT1hJiYoYS5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKHQuZmxhZ3N8PTE2KSxhLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYodC5mbGFnc3w9MzIpKSx0LmluaXRpYWxJbnB1dHM9cyx0LmlucHV0cz1hLHQub3V0cHV0cz1sfWZ1bmN0aW9uIERhKG4sdCxlLGkscixvLHMsYSl7bGV0IHUsbD11bCh0LGUpLGM9dC5pbnB1dHM7IWEmJm51bGwhPWMmJih1PWNbaV0pPyhkTihuLGUsdSxpLHIpLFJGKHQpJiZYNihlLHQuaW5kZXgpKTozJnQudHlwZSYmKGk9ZnVuY3Rpb24obil7cmV0dXJuImNsYXNzIj09PW4/ImNsYXNzTmFtZSI6ImZvciI9PT1uPyJodG1sRm9yIjoiZm9ybWFjdGlvbiI9PT1uPyJmb3JtQWN0aW9uIjoiaW5uZXJIdG1sIj09PW4/ImlubmVySFRNTCI6InJlYWRvbmx5Ij09PW4/InJlYWRPbmx5IjoidGFiaW5kZXgiPT09bj8idGFiSW5kZXgiOm59KGkpLHI9bnVsbCE9cz9zKHIsdC52YWx1ZXx8IiIsaSk6cixvLnNldFByb3BlcnR5KGwsaSxyKSl9ZnVuY3Rpb24gWDYobix0KXtsZXQgZT1vcCh0LG4pOzE2JmVbMl18fChlWzJdfD0zMil9ZnVuY3Rpb24gY04obix0LGUsaSl7bGV0IHI9ITE7aWYoTUcoKSl7bGV0IG89ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGlyZWN0aXZlUmVnaXN0cnkscj1udWxsO2lmKGkpZm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBzPWlbb107QjYoZSxzLnNlbGVjdG9ycywhMSkmJihyfHwocj1bXSksZEUoY2IoZSx0KSxuLHMudHlwZSksUWwocyk/KFo2KG4sZSksci51bnNoaWZ0KHMpKTpyLnB1c2gocykpfXJldHVybiByfShuLHQsZSkscz1udWxsPT09aT9udWxsOnsiIjotMX07aWYobnVsbCE9PW8pe3I9ITAsSjYoZSxuLmRhdGEubGVuZ3RoLG8ubGVuZ3RoKTtmb3IobGV0IHU9MDt1PG8ubGVuZ3RoO3UrKyl7bGV0IGQ9b1t1XTtkLnByb3ZpZGVyc1Jlc29sdmVyJiZkLnByb3ZpZGVyc1Jlc29sdmVyKGQpfWxldCBhPSExLGw9ITEsYz1xZyhuLHQsby5sZW5ndGgsbnVsbCk7Zm9yKGxldCB1PTA7dTxvLmxlbmd0aDt1Kyspe2xldCBkPW9bdV07ZS5tZXJnZWRBdHRycz1hRShlLm1lcmdlZEF0dHJzLGQuaG9zdEF0dHJzKSwkNihuLGUsdCxjLGQpLE5mZShjLGQscyksbnVsbCE9PWQuY29udGVudFF1ZXJpZXMmJihlLmZsYWdzfD04KSwobnVsbCE9PWQuaG9zdEJpbmRpbmdzfHxudWxsIT09ZC5ob3N0QXR0cnN8fDAhPT1kLmhvc3RWYXJzKSYmKGUuZmxhZ3N8PTEyOCk7bGV0IHA9ZC50eXBlLnByb3RvdHlwZTshYSYmKHAubmdPbkNoYW5nZXN8fHAubmdPbkluaXR8fHAubmdEb0NoZWNrKSYmKChuLnByZU9yZGVySG9va3N8fChuLnByZU9yZGVySG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGE9ITApLCFsJiYocC5uZ09uQ2hhbmdlc3x8cC5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJDaGVja0hvb2tzfHwobi5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGw9ITApLGMrK31ZNihuLGUpfXMmJmZ1bmN0aW9uKG4sdCxlKXtpZih0KXtsZXQgaT1uLmxvY2FsTmFtZXM9W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKz0yKXtsZXQgbz1lW3RbcisxXV07aWYobnVsbD09byl0aHJvdyBuZXcgTXQoLTMwMSwhMSk7aS5wdXNoKHRbcl0sbyl9fX0oZSxpLHMpfXJldHVybiBlLm1lcmdlZEF0dHJzPWFFKGUubWVyZ2VkQXR0cnMsZS5hdHRycykscn1mdW5jdGlvbiBRNihuLHQsZSxpLHIsbyl7bGV0IHM9by5ob3N0QmluZGluZ3M7aWYocyl7bGV0IGE9bi5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PWEmJihhPW4uaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtsZXQgbD1+dC5pbmRleDsoZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7Zm9yKDt0PjA7KXtsZXQgZT1uWy0tdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiZlPDApcmV0dXJuIGV9cmV0dXJuIDB9KShhKSE9bCYmYS5wdXNoKGwpLGEucHVzaChpLHIscyl9fWZ1bmN0aW9uIEs2KG4sdCl7bnVsbCE9PW4uaG9zdEJpbmRpbmdzJiZuLmhvc3RCaW5kaW5ncygxLHQpfWZ1bmN0aW9uIFo2KG4sdCl7dC5mbGFnc3w9Miwobi5jb21wb25lbnRzfHwobi5jb21wb25lbnRzPVtdKSkucHVzaCh0LmluZGV4KX1mdW5jdGlvbiBOZmUobix0LGUpe2lmKGUpe2lmKHQuZXhwb3J0QXMpZm9yKGxldCBpPTA7aTx0LmV4cG9ydEFzLmxlbmd0aDtpKyspZVt0LmV4cG9ydEFzW2ldXT1uO1FsKHQpJiYoZVsiIl09bil9fWZ1bmN0aW9uIEo2KG4sdCxlKXtuLmZsYWdzfD0xLG4uZGlyZWN0aXZlU3RhcnQ9dCxuLmRpcmVjdGl2ZUVuZD10K2Usbi5wcm92aWRlckluZGV4ZXM9dH1mdW5jdGlvbiAkNihuLHQsZSxpLHIpe24uZGF0YVtpXT1yO2xldCBvPXIuZmFjdG9yeXx8KHIuZmFjdG9yeT1RaChyLnR5cGUpKSxzPW5ldyBLaChvLFFsKHIpLHcpO24uYmx1ZXByaW50W2ldPXMsZVtpXT1zLFE2KG4sdCwwLGkscWcobixlLHIuaG9zdFZhcnMsR24pLHIpfWZ1bmN0aW9uIExmZShuLHQsZSl7bGV0IGk9dWwodCxuKSxyPVc2KGUpLG89blsxMF0scz1IRShuLEJFKG4scixudWxsLGUub25QdXNoPzMyOjE2LGksdCxvLG8uY3JlYXRlUmVuZGVyZXIoaSxlKSxudWxsLG51bGwsbnVsbCkpO25bdC5pbmRleF09c31mdW5jdGlvbiBRYyhuLHQsZSxpLHIsbyl7bGV0IHM9dWwobix0KTt1Tih0WzExXSxzLG8sbi52YWx1ZSxlLGkscil9ZnVuY3Rpb24gdU4obix0LGUsaSxyLG8scyl7aWYobnVsbD09byluLnJlbW92ZUF0dHJpYnV0ZSh0LHIsZSk7ZWxzZXtsZXQgYT1udWxsPT1zP3FuKG8pOnMobyxpfHwiIixyKTtuLnNldEF0dHJpYnV0ZSh0LHIsYSxlKX19ZnVuY3Rpb24gQmZlKG4sdCxlLGkscixvKXtsZXQgcz1vW3RdO2lmKG51bGwhPT1zKXtsZXQgYT1pLnNldElucHV0O2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7KXtsZXQgYz1zW2wrK10sdT1zW2wrK10sZD1zW2wrK107bnVsbCE9PWE/aS5zZXRJbnB1dChlLGQsYyx1KTplW3VdPWR9fX1mdW5jdGlvbiBWZmUobix0KXtsZXQgZT1udWxsLGk9MDtmb3IoO2k8dC5sZW5ndGg7KXtsZXQgcj10W2ldO2lmKDAhPT1yKWlmKDUhPT1yKXtpZigibnVtYmVyIj09dHlwZW9mIHIpYnJlYWs7bi5oYXNPd25Qcm9wZXJ0eShyKSYmKG51bGw9PT1lJiYoZT1bXSksZS5wdXNoKHIsbltyXSx0W2krMV0pKSxpKz0yfWVsc2UgaSs9MjtlbHNlIGkrPTR9cmV0dXJuIGV9ZnVuY3Rpb24gZVcobix0LGUsaSl7cmV0dXJuIG5ldyBBcnJheShuLCEwLCExLHQsbnVsbCwwLGksZSxudWxsLG51bGwpfWZ1bmN0aW9uIHpmZShuLHQpe2xldCBlPW9wKHQsbik7aWYob0UoZSkpe2xldCBpPWVbMV07NDgmZVsyXT9WRShpLGUsaS50ZW1wbGF0ZSxlWzhdKTplWzVdPjAmJmVGKGUpfX1mdW5jdGlvbiBlRihuKXtmb3IobGV0IGk9SkYobik7bnVsbCE9PWk7aT0kRihpKSlmb3IobGV0IHI9MTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07aWYob0UobykpaWYoNTEyJm9bMl0pe2xldCBzPW9bMV07VkUocyxvLHMudGVtcGxhdGUsb1s4XSl9ZWxzZSBvWzVdPjAmJmVGKG8pfWxldCBlPW5bMV0uY29tcG9uZW50cztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9b3AoZVtpXSxuKTtvRShyKSYmcls1XT4wJiZlRihyKX19ZnVuY3Rpb24gamZlKG4sdCl7bGV0IGU9b3AodCxuKSxpPWVbMV07KGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPXQubGVuZ3RoO2U8bi5ibHVlcHJpbnQubGVuZ3RoO2UrKyl0LnB1c2gobi5ibHVlcHJpbnRbZV0pfSkoaSxlKSxvTihpLGUsZVs4XSl9ZnVuY3Rpb24gSEUobix0KXtyZXR1cm4gblsxM10/blsxNF1bNF09dDpuWzEzXT10LG5bMTRdPXQsdH1mdW5jdGlvbiB0VyhuKXtmb3IoO247KXtuWzJdfD0zMjtsZXQgdD1aRihuKTtpZihGZGUobikmJiF0KXJldHVybiBuO249dH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuVyhuLHQsZSxpPSEwKXtsZXQgcj10WzEwXTtyLmJlZ2luJiZyLmJlZ2luKCk7dHJ5e1ZFKG4sdCxuLnRlbXBsYXRlLGUpfWNhdGNoKHMpe3Rocm93IGkmJnNXKHQscyksc31maW5hbGx5e3IuZW5kJiZyLmVuZCgpfX1mdW5jdGlvbiB0RihuLHQsZSl7TEYoMCksdChuLGUpfWZ1bmN0aW9uIGlXKG4pe3JldHVybiBuWzddfHwobls3XT1bXSl9ZnVuY3Rpb24gclcobil7cmV0dXJuIG4uY2xlYW51cHx8KG4uY2xlYW51cD1bXSl9ZnVuY3Rpb24gb1cobix0LGUpe3JldHVybihudWxsPT09bnx8UWwobikpJiYoZT1mdW5jdGlvbihuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bMV0pcmV0dXJuIG47bj1uWzBdfXJldHVybiBudWxsfShlW3QuaW5kZXhdKSksZVsxMV19ZnVuY3Rpb24gc1cobix0KXtsZXQgZT1uWzldLGk9ZT9lLmdldChTcyxudWxsKTpudWxsO2kmJmkuaGFuZGxlRXJyb3IodCl9ZnVuY3Rpb24gZE4obix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoOyl7bGV0IHM9ZVtvKytdLGE9ZVtvKytdLGw9dFtzXSxjPW4uZGF0YVtzXTtudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwscixpLGEpOmxbYV09cn19ZnVuY3Rpb24gbmQobix0LGUpe2xldCBpPUlFKHQsbik7eDYoblsxMV0saSxlKX1mdW5jdGlvbiBfRShuLHQsZSl7bGV0IGk9ZT9uLnN0eWxlczpudWxsLHI9ZT9uLmNsYXNzZXM6bnVsbCxvPTA7aWYobnVsbCE9PXQpZm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBhPXRbc107Im51bWJlciI9PXR5cGVvZiBhP289YToxPT1vP3I9YmsocixhKToyPT1vJiYoaT1iayhpLGErIjogIit0Wysrc10rIjsiKSl9ZT9uLnN0eWxlcz1pOm4uc3R5bGVzV2l0aG91dEhvc3Q9aSxlP24uY2xhc3Nlcz1yOm4uY2xhc3Nlc1dpdGhvdXRIb3N0PXJ9ZnVuY3Rpb24gSlMobix0LGUsaSxyPSExKXtmb3IoO251bGwhPT1lOyl7bGV0IG89dFtlLmluZGV4XTtpZihudWxsIT09byYmaS5wdXNoKE1hKG8pKSxKdShvKSlmb3IobGV0IGE9MTA7YTxvLmxlbmd0aDthKyspe2xldCBsPW9bYV0sYz1sWzFdLmZpcnN0Q2hpbGQ7bnVsbCE9PWMmJkpTKGxbMV0sbCxjLGkpfWxldCBzPWUudHlwZTtpZig4JnMpSlMobix0LGUuY2hpbGQsaSk7ZWxzZSBpZigzMiZzKXtsZXQgbCxhPUtGKGUsdCk7Zm9yKDtsPWEoKTspaS5wdXNoKGwpfWVsc2UgaWYoMTYmcyl7bGV0IGE9UDYodCxlKTtpZihBcnJheS5pc0FycmF5KGEpKWkucHVzaCguLi5hKTtlbHNle2xldCBsPVpGKHRbMTZdKTtKUyhsWzFdLGwsYSxpLCEwKX19ZT1yP2UucHJvamVjdGlvbk5leHQ6ZS5uZXh0fXJldHVybiBpfXZhciAkaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2xWaWV3PXQsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWUsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IHJvb3ROb2Rlcygpe2xldCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gSlMoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19c2V0IGNvbnRleHQodCl7dGhpcy5fbFZpZXdbOF09dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDEyOD09KDEyOCZ0aGlzLl9sVmlld1syXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtsZXQgdD10aGlzLl9sVmlld1szXTtpZihKdSh0KSl7bGV0IGU9dFs4XSxpPWU/ZS5pbmRleE9mKHRoaXMpOi0xO2k+LTEmJihYayh0LGkpLHBFKGUsaSkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfXc2KHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kodCl7cTYodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsbnVsbCx0KX1tYXJrRm9yQ2hlY2soKXt0Vyh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXd8fHRoaXMuX2xWaWV3KX1kZXRhY2goKXt0aGlzLl9sVmlld1syXSY9LTY1fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbMl18PTY0fWRldGVjdENoYW5nZXMoKXtuVyh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgTXQoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dmFyIHQ7dGhpcy5fYXBwUmVmPW51bGwsQWIodGhpcy5fbFZpZXdbMV0sdD10aGlzLl9sVmlldyx0WzExXSwyLG51bGwsbnVsbCl9YXR0YWNoVG9BcHBSZWYodCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IE10KDkwMiwhMSk7dGhpcy5fYXBwUmVmPXR9fSxuRj1jbGFzcyBleHRlbmRzICRoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7bGV0IHQ9dGhpcy5fdmlldztuVyh0WzFdLHQsdFs4XSwhMSl9Y2hlY2tOb0NoYW5nZXMoKXt9Z2V0IGNvbnRleHQoKXtyZXR1cm4gbnVsbH19LGhiPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPXR9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCl7bGV0IGU9b2wodCk7cmV0dXJuIG5ldyB2RShlLHRoaXMubmdNb2R1bGUpfX07ZnVuY3Rpb24gSGoobil7bGV0IHQ9W107Zm9yKGxldCBlIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShlKSYmdC5wdXNoKHtwcm9wTmFtZTpuW2VdLHRlbXBsYXRlTmFtZTplfSk7cmV0dXJuIHR9dmFyIHZFPWNsYXNzIGV4dGVuZHMgZ0V7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj10LnNlbGVjdG9ycy5tYXAocGZlKS5qb2luKCIsIiksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWdldCBpbnB1dHMoKXtyZXR1cm4gSGoodGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX1nZXQgb3V0cHV0cygpe3JldHVybiBIaih0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jcmVhdGUodCxlLGkscil7bGV0IG89KHI9cnx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIG5wP3I6cj8uaW5qZWN0b3I7byYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKG89dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKG8pfHxvKTtsZXQgcz1vP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaW5qZWN0b3I9dCx0aGlzLnBhcmVudEluamVjdG9yPWV9Z2V0KHQsZSxpKXtsZXQgcj10aGlzLmluamVjdG9yLmdldCh0LG9rLGkpO3JldHVybiByIT09b2t8fGU9PT1vaz9yOnRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KHQsZSxpKX19KHQsbyk6dCxhPXMuZ2V0KHFjLG51bGwpO2lmKG51bGw9PT1hKXRocm93IG5ldyBNdCg0MDcsITEpO2xldCBtLEMsbD1zLmdldChBaGUsbnVsbCksYz1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLHU9dGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdWzBdfHwiZGl2IixkPWk/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuLnNlbGVjdFJvb3RFbGVtZW50KHQsZT09PXdhLlNoYWRvd0RvbSl9KGMsaSx0aGlzLmNvbXBvbmVudERlZi5lbmNhcHN1bGF0aW9uKTp0TihjLHUsZnVuY3Rpb24obil7bGV0IHQ9bi50b0xvd2VyQ2FzZSgpO3JldHVybiJzdmciPT09dD8ic3ZnIjoibWF0aCI9PT10PyJtYXRoIjpudWxsfSh1KSkscD10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/Mjg4OjI3MixoPWxOKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLGY9QkUobnVsbCxoLG51bGwscCxudWxsLG51bGwsYSxjLGwscyxudWxsKTtCRihmKTt0cnl7bGV0IF89ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWVbMV07ZVsyMl09bjtsZXQgbD1XZyhzLDIyLDIsIiNob3N0IixudWxsKSxjPWwubWVyZ2VkQXR0cnM9dC5ob3N0QXR0cnM7bnVsbCE9PWMmJihfRShsLGMsITApLG51bGwhPT1uJiYoc0UocixuLGMpLG51bGwhPT1sLmNsYXNzZXMmJmlOKHIsbixsLmNsYXNzZXMpLG51bGwhPT1sLnN0eWxlcyYmazYocixuLGwuc3R5bGVzKSkpO2xldCB1PWkuY3JlYXRlUmVuZGVyZXIobix0KSxkPUJFKGUsVzYodCksbnVsbCx0Lm9uUHVzaD8zMjoxNixlWzIyXSxsLGksdSxudWxsLG51bGwsbnVsbCk7cmV0dXJuIHMuZmlyc3RDcmVhdGVQYXNzJiYoZEUoY2IobCxlKSxzLHQudHlwZSksWjYocyxsKSxKNihsLGUubGVuZ3RoLDEpKSxIRShlLGQpLGVbMjJdPWR9KGQsdGhpcy5jb21wb25lbnREZWYsZixhLGMpO2lmKGQpaWYoaSlzRShjLGQsWyJuZy12ZXJzaW9uIixJaGUuZnVsbF0pO2Vsc2V7bGV0e2F0dHJzOnksY2xhc3NlczpJfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTI7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IG89bltpXTtpZigic3RyaW5nIj09dHlwZW9mIG8pMj09PXI/IiIhPT1vJiZ0LnB1c2gobyxuWysraV0pOjg9PT1yJiZlLnB1c2gobyk7ZWxzZXtpZighV2wocikpYnJlYWs7cj1vfWkrK31yZXR1cm57YXR0cnM6dCxjbGFzc2VzOmV9fSh0aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF0pO3kmJnNFKGMsZCx5KSxJJiZJLmxlbmd0aD4wJiZpTihjLGQsSS5qb2luKCIgIikpfWlmKEM9Q0coaCwyMiksdm9pZCAwIT09ZSl7bGV0IHk9Qy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgST0wO0k8dGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMubGVuZ3RoO0krKyl7bGV0IEE9ZVtJXTt5LnB1c2gobnVsbCE9QT9BcnJheS5mcm9tKEEpOm51bGwpfX1tPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPWVbMV0sbz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9TW8oKTtuLmZpcnN0Q3JlYXRlUGFzcyYmKGUucHJvdmlkZXJzUmVzb2x2ZXImJmUucHJvdmlkZXJzUmVzb2x2ZXIoZSksJDYobixpLHQscWcobix0LDEsbnVsbCksZSksWTYobixpKSk7bGV0IHI9Q2IodCxuLGkuZGlyZWN0aXZlU3RhcnQsaSk7WWMocix0KTtsZXQgbz11bChpLHQpO3JldHVybiBvJiZZYyhvLHQpLHJ9KHIsZSx0KTtpZihuWzhdPWVbOF09byxudWxsIT09aSlmb3IobGV0IGEgb2YgaSlhKG8sdCk7aWYodC5jb250ZW50UXVlcmllcyl7bGV0IGE9TW8oKTt0LmNvbnRlbnRRdWVyaWVzKDEsbyxhLmRpcmVjdGl2ZVN0YXJ0KX1sZXQgcz1NbygpO3JldHVybiFyLmZpcnN0Q3JlYXRlUGFzc3x8bnVsbD09PXQuaG9zdEJpbmRpbmdzJiZudWxsPT09dC5ob3N0QXR0cnN8fCh0cChzLmluZGV4KSxRNihlWzFdLHMsMCxzLmRpcmVjdGl2ZVN0YXJ0LHMuZGlyZWN0aXZlRW5kLHQpLEs2KHQsbykpLG99KF8sdGhpcy5jb21wb25lbnREZWYsZixbWGZlXSksb04oaCxmLG51bGwpfWZpbmFsbHl7VkYoKX1yZXR1cm4gbmV3IHJGKHRoaXMuY29tcG9uZW50VHlwZSxtLEdnKEMsZiksZixDKX19LHJGPShuZXcgaGIsY2xhc3MgZXh0ZW5kcyBXa3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1pLHRoaXMuX3Jvb3RMVmlldz1yLHRoaXMuX3ROb2RlPW8sdGhpcy5pbnN0YW5jZT1lLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgbkYociksdGhpcy5jb21wb25lbnRUeXBlPXR9c2V0SW5wdXQodCxlKXtsZXQgcixpPXRoaXMuX3ROb2RlLmlucHV0cztpZihudWxsIT09aSYmKHI9aVt0XSkpe2xldCBvPXRoaXMuX3Jvb3RMVmlldztkTihvWzFdLG8scix0LGUpLFg2KG8sdGhpcy5fdE5vZGUuaW5kZXgpfX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IFloKHRoaXMuX3ROb2RlLHRoaXMuX3Jvb3RMVmlldyl9ZGVzdHJveSgpe3RoaXMuaG9zdFZpZXcuZGVzdHJveSgpfW9uRGVzdHJveSh0KXt0aGlzLmhvc3RWaWV3Lm9uRGVzdHJveSh0KX19KTtmdW5jdGlvbiBYZmUoKXtsZXQgbj1NbygpO1BFKFplKClbMV0sbil9ZnVuY3Rpb24gYVcobil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3J9ZnVuY3Rpb24gdHQobil7bGV0IHQ9YVcobi50eXBlKSxlPSEwLGk9W25dO2Zvcig7dDspe2xldCByO2lmKFFsKG4pKXI9dC5cdTAyNzVjbXB8fHQuXHUwMjc1ZGlyO2Vsc2V7aWYodC5cdTAyNzVjbXApdGhyb3cgbmV3IE10KDkwMywhMSk7cj10Llx1MDI3NWRpcn1pZihyKXtpZihlKXtpLnB1c2gocik7bGV0IHM9bjtzLmlucHV0cz1jayhuLmlucHV0cykscy5kZWNsYXJlZElucHV0cz1jayhuLmRlY2xhcmVkSW5wdXRzKSxzLm91dHB1dHM9Y2sobi5vdXRwdXRzKTtsZXQgYT1yLmhvc3RCaW5kaW5nczthJiZKZmUobixhKTtsZXQgbD1yLnZpZXdRdWVyeSxjPXIuY29udGVudFF1ZXJpZXM7aWYobCYmS2ZlKG4sbCksYyYmWmZlKG4sYyksJE8obi5pbnB1dHMsci5pbnB1dHMpLCRPKG4uZGVjbGFyZWRJbnB1dHMsci5kZWNsYXJlZElucHV0cyksJE8obi5vdXRwdXRzLHIub3V0cHV0cyksUWwocikmJnIuZGF0YS5hbmltYXRpb24pe2xldCB1PW4uZGF0YTt1LmFuaW1hdGlvbj0odS5hbmltYXRpb258fFtdKS5jb25jYXQoci5kYXRhLmFuaW1hdGlvbil9fWxldCBvPXIuZmVhdHVyZXM7aWYobylmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGE9b1tzXTthJiZhLm5nSW5oZXJpdCYmYShuKSxhPT09dHQmJihlPSExKX19dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9IWZ1bmN0aW9uKG4pe2xldCB0PTAsZT1udWxsO2ZvcihsZXQgaT1uLmxlbmd0aC0xO2k+PTA7aS0tKXtsZXQgcj1uW2ldO3IuaG9zdFZhcnM9dCs9ci5ob3N0VmFycyxyLmhvc3RBdHRycz1hRShyLmhvc3RBdHRycyxlPWFFKGUsci5ob3N0QXR0cnMpKX19KGkpfWZ1bmN0aW9uIGNrKG4pe3JldHVybiBuPT09QWc/e306bj09PVdpP1tdOm59ZnVuY3Rpb24gS2ZlKG4sdCl7bGV0IGU9bi52aWV3UXVlcnk7bi52aWV3UXVlcnk9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9ZnVuY3Rpb24gWmZlKG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllcztuLmNvbnRlbnRRdWVyaWVzPWU/KGkscixvKT0+e3QoaSxyLG8pLGUoaSxyLG8pfTp0fWZ1bmN0aW9uIEpmZShuLHQpe2xldCBlPW4uaG9zdEJpbmRpbmdzO24uaG9zdEJpbmRpbmdzPWU/KGkscik9Pnt0KGksciksZShpLHIpfTp0fXZhciAkZmU9WyJwcm92aWRlcnNSZXNvbHZlciJdLGVtZT1bInRlbXBsYXRlIiwiZGVjbHMiLCJjb25zdHMiLCJ2YXJzIiwib25QdXNoIiwibmdDb250ZW50U2VsZWN0b3JzIiwic3R5bGVzIiwiZW5jYXBzdWxhdGlvbiIsInNjaGVtYXMiXTt2YXIgV1M9bnVsbDtmdW5jdGlvbiBVRSgpe2lmKCFXUyl7bGV0IG49V3IuU3ltYm9sO2lmKG4mJm4uaXRlcmF0b3IpV1M9bi5pdGVyYXRvcjtlbHNle2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXtsZXQgaT10W2VdOyJlbnRyaWVzIiE9PWkmJiJzaXplIiE9PWkmJk1hcC5wcm90b3R5cGVbaV09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJihXUz1pKX19fXJldHVybiBXU31mdW5jdGlvbiB6RShuKXtyZXR1cm4hIXBOKG4pJiYoQXJyYXkuaXNBcnJheShuKXx8IShuIGluc3RhbmNlb2YgTWFwKSYmVUUoKWluIG4pfWZ1bmN0aW9uIHBOKG4pe3JldHVybiBudWxsIT09biYmKCJmdW5jdGlvbiI9PXR5cGVvZiBufHwib2JqZWN0Ij09dHlwZW9mIG4pfWZ1bmN0aW9uIEtjKG4sdCxlKXtyZXR1cm4gblt0XT1lfWZ1bmN0aW9uIEliKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gc3Mobix0LGUpe3JldHVybiFPYmplY3QuaXMoblt0XSxlKSYmKG5bdF09ZSwhMCl9ZnVuY3Rpb24gZWYobix0LGUsaSl7bGV0IHI9c3Mobix0LGUpO3JldHVybiBzcyhuLHQrMSxpKXx8cn1mdW5jdGlvbiBqRShuLHQsZSxpLHIpe2xldCBvPWVmKG4sdCxlLGkpO3JldHVybiBzcyhuLHQrMixyKXx8b31mdW5jdGlvbiBsbChuLHQsZSxpLHIsbyl7bGV0IHM9ZWYobix0LGUsaSk7cmV0dXJuIGVmKG4sdCsyLHIsbyl8fHN9ZnVuY3Rpb24gemUobix0LGUsaSl7bGV0IHI9WmUoKTtyZXR1cm4gc3MocixVZygpLHQpJiYoRGkoKSxRYyhxcigpLHIsbix0LGUsaSkpLHplfWZ1bmN0aW9uIFlnKG4sdCl7bGV0IGU9ITEsaT0kdSgpO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MillPXNzKG4saSsrLHRbb10pfHxlO2lmKEVHKGkpLCFlKXJldHVybiBHbjtsZXQgcj10WzBdO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MilyKz1xbih0W29dKSt0W28rMV07cmV0dXJuIHJ9ZnVuY3Rpb24gWGcobix0LGUsaSl7cmV0dXJuIHNzKG4sVWcoKSxlKT90K3FuKGUpK2k6R259ZnVuY3Rpb24gUWcobix0LGUsaSxyLG8pe2xldCBhPWVmKG4sJHUoKSxlLHIpO3JldHVybiBlZCgyKSxhP3QrcW4oZSkraStxbihyKStvOkdufWZ1bmN0aW9uIEtnKG4sdCxlLGkscixvLHMsYSl7bGV0IGM9akUobiwkdSgpLGUscixzKTtyZXR1cm4gZWQoMyksYz90K3FuKGUpK2krcW4ocikrbytxbihzKSthOkdufWZ1bmN0aW9uIFpnKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPWxsKG4sJHUoKSxlLHIscyxsKTtyZXR1cm4gZWQoNCksZD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2M6R259ZnVuY3Rpb24gSmcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQpe2xldCBwPSR1KCksaD1sbChuLHAsZSxyLHMsbCk7cmV0dXJuIGg9c3MobixwKzQsdSl8fGgsZWQoNSksaD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZDpHbn1mdW5jdGlvbiAkZyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe2xldCBmPSR1KCksbT1sbChuLGYsZSxyLHMsbCk7cmV0dXJuIG09ZWYobixmKzQsdSxwKXx8bSxlZCg2KSxtP3QrcW4oZSkraStxbihyKStvK3FuKHMpK2ErcW4obCkrYytxbih1KStkK3FuKHApK2g6R259ZnVuY3Rpb24gZTAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9JHUoKSxfPWxsKG4sQyxlLHIscyxsKTtyZXR1cm4gXz1qRShuLEMrNCx1LHAsZil8fF8sZWQoNyksXz90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK206R259ZnVuY3Rpb24gdDAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pe2xldCB5PSR1KCksST1sbChuLHksZSxyLHMsbCk7cmV0dXJuIEk9bGwobix5KzQsdSxwLGYsQyl8fEksZWQoOCksST90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK20rcW4oQykrXzpHbn1mdW5jdGlvbiBFKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9WmUoKSxjPURpKCksdT1uKzIyLGQ9Yy5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQuY29uc3RzLHU9V2codCxuLDQsc3x8bnVsbCxlcChjLGEpKTtjTih0LGUsdSxlcChjLGwpKSxQRSh0LHUpO2xldCBkPXUudFZpZXdzPWxOKDIsdSxpLHIsbyx0LmRpcmVjdGl2ZVJlZ2lzdHJ5LHQucGlwZVJlZ2lzdHJ5LG51bGwsdC5zY2hlbWFzLGMpO3JldHVybiBudWxsIT09dC5xdWVyaWVzJiYodC5xdWVyaWVzLnRlbXBsYXRlKHQsdSksZC5xdWVyaWVzPXQucXVlcmllcy5lbWJlZGRlZFRWaWV3KHUpKSx1fSh1LGMsbCx0LGUsaSxyLG8scyk6Yy5kYXRhW3VdO1djKGQsITEpO2xldCBwPWxbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO0xFKGMsbCxwLGQpLFljKHAsbCksSEUobCxsW3VdPWVXKHAsbCxwLGQpKSxBRShkKSYmc04oYyxsLGQpLG51bGwhPXMmJmFOKGwsZCxhKX1mdW5jdGlvbiBzdChuKXtyZXR1cm4gSGcoWW4ubEZyYW1lLmNvbnRleHRMVmlldywyMituKX1mdW5jdGlvbiBiKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCExKSxifWZ1bmN0aW9uIG9GKG4sdCxlLGkscil7bGV0IHM9cj8iY2xhc3MiOiJzdHlsZSI7ZE4obixlLHQuaW5wdXRzW3NdLHMsaSl9ZnVuY3Rpb24gZyhuLHQsZSxpKXtsZXQgcj1aZSgpLG89RGkoKSxzPTIyK24sYT1yWzExXSxsPXJbc109dE4oYSx0LFluLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlKSxjPW8uZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscixvLHMpe2xldCBhPXQuY29uc3RzLGM9V2codCxuLDIscixlcChhLG8pKTtyZXR1cm4gY04odCxlLGMsZXAoYSxzKSksbnVsbCE9PWMuYXR0cnMmJl9FKGMsYy5hdHRycywhMSksbnVsbCE9PWMubWVyZ2VkQXR0cnMmJl9FKGMsYy5tZXJnZWRBdHRycywhMCksbnVsbCE9PXQucXVlcmllcyYmdC5xdWVyaWVzLmVsZW1lbnRTdGFydCh0LGMpLGN9KHMsbyxyLDAsdCxlLGkpOm8uZGF0YVtzXTtXYyhjLCEwKTtsZXQgdT1jLm1lcmdlZEF0dHJzO251bGwhPT11JiZzRShhLGwsdSk7bGV0IGQ9Yy5jbGFzc2VzO251bGwhPT1kJiZpTihhLGwsZCk7bGV0IHA9Yy5zdHlsZXM7cmV0dXJuIG51bGwhPT1wJiZrNihhLGwscCksNjQhPSg2NCZjLmZsYWdzKSYmTEUobyxyLGwsYyksMD09PVluLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCYmWWMobCxyKSxZbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrKyxBRShjKSYmKHNOKG8scixjKSxHNihvLGMscikpLG51bGwhPT1pJiZhTihyLGMpLGd9ZnVuY3Rpb24gdigpe2xldCBuPU1vKCk7a0YoKT9GRigpOihuPW4ucGFyZW50LFdjKG4sITEpKTtsZXQgdD1uO1luLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tO2xldCBlPURpKCk7cmV0dXJuIGUuZmlyc3RDcmVhdGVQYXNzJiYoUEUoZSxuKSxQRihuKSYmZS5xdWVyaWVzLmVsZW1lbnRFbmQobikpLG51bGwhPXQuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbihuKXtyZXR1cm4gMCE9KDE2Jm4uZmxhZ3MpfSh0KSYmb0YoZSx0LFplKCksdC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPXQuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oMzImbi5mbGFncyl9KHQpJiZvRihlLHQsWmUoKSx0LnN0eWxlc1dpdGhvdXRIb3N0LCExKSx2fWZ1bmN0aW9uIE4obix0LGUsaSl7cmV0dXJuIGcobix0LGUsaSksdigpLE59ZnVuY3Rpb24gS3Qobix0LGUpe2xldCBpPVplKCkscj1EaSgpLG89bisyMixzPXIuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89dC5jb25zdHMscz1lcChvLGkpLGE9V2codCxuLDgsIm5nLWNvbnRhaW5lciIscyk7cmV0dXJuIG51bGwhPT1zJiZfRShhLHMsITApLGNOKHQsZSxhLGVwKG8scikpLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxhKSxhfShvLHIsaSx0LGUpOnIuZGF0YVtvXTtXYyhzLCEwKTtsZXQgYT1pW29dPWlbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiBMRShyLGksYSxzKSxZYyhhLGkpLEFFKHMpJiYoc04ocixpLHMpLEc2KHIscyxpKSksbnVsbCE9ZSYmYU4oaSxzKSxLdH1mdW5jdGlvbiBadCgpe2xldCBuPU1vKCksdD1EaSgpO3JldHVybiBrRigpP0ZGKCk6KG49bi5wYXJlbnQsV2MobiwhMSkpLHQuZmlyc3RDcmVhdGVQYXNzJiYoUEUodCxuKSxQRihuKSYmdC5xdWVyaWVzLmVsZW1lbnRFbmQobikpLFp0fWZ1bmN0aW9uIEFpKG4sdCxlKXtyZXR1cm4gS3Qobix0LGUpLFp0KCksQWl9ZnVuY3Rpb24gSWUoKXtyZXR1cm4gWmUoKX1mdW5jdGlvbiBuMChuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW59ZnVuY3Rpb24gaE4obil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zdWJzY3JpYmV9dmFyIGZOPWhOO2Z1bmN0aW9uIFAobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1NbygpO3JldHVybiBfVyhvLHIsclsxMV0scyxuLHQsMCxpKSxQfWZ1bmN0aW9uIGkwKG4sdCl7bGV0IGU9TW8oKSxpPVplKCkscj1EaSgpO3JldHVybiBfVyhyLGksb1coTkYoci5kYXRhKSxlLGkpLGUsbix0KSxpMH1mdW5jdGlvbiBfVyhuLHQsZSxpLHIsbyxzLGEpe2xldCBsPUFFKGkpLHU9bi5maXJzdENyZWF0ZVBhc3MmJnJXKG4pLHA9aVcodCksaD0hMDtpZigzJmkudHlwZXx8YSl7bGV0IEM9dWwoaSx0KSxfPWE/YShDKTpDLHk9cC5sZW5ndGgsST1hP089PmEoTWEoT1tpLmluZGV4XSkpOmkuaW5kZXgsQT1udWxsO2lmKCFhJiZsJiYoQT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmNsZWFudXA7aWYobnVsbCE9cilmb3IobGV0IG89MDtvPHIubGVuZ3RoLTE7bys9Mil7bGV0IHM9cltvXTtpZihzPT09ZSYmcltvKzFdPT09aSl7bGV0IGE9dFs3XSxsPXJbbysyXTtyZXR1cm4gYS5sZW5ndGg+bD9hW2xdOm51bGx9InN0cmluZyI9PXR5cGVvZiBzJiYobys9Mil9cmV0dXJuIG51bGx9KG4sdCxyLGkuaW5kZXgpKSxudWxsIT09QSkoQS5fX25nTGFzdExpc3RlbmVyRm5fX3x8QSkuX19uZ05leHRMaXN0ZW5lckZuX189byxBLl9fbmdMYXN0TGlzdGVuZXJGbl9fPW8saD0hMTtlbHNle289emooaSx0LDAsbywhMSk7bGV0IE89ZS5saXN0ZW4oXyxyLG8pO3AucHVzaChvLE8pLHUmJnUucHVzaChyLEkseSx5KzEpfX1lbHNlIG89emooaSx0LDAsbywhMSk7bGV0IG0sZj1pLm91dHB1dHM7aWYoaCYmbnVsbCE9PWYmJihtPWZbcl0pKXtsZXQgQz1tLmxlbmd0aDtpZihDKWZvcihsZXQgXz0wO188QztfKz0yKXtsZXQgZWU9dFttW19dXVttW18rMV1dLnN1YnNjcmliZShvKSxYPXAubGVuZ3RoO3AucHVzaChvLGVlKSx1JiZ1LnB1c2gocixpLmluZGV4LFgsLShYKzEpKX19fWZ1bmN0aW9uIFVqKG4sdCxlLGkpe3RyeXtyZXR1cm4hMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIHNXKG4sciksITF9fWZ1bmN0aW9uIHpqKG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3RXKDImbi5mbGFncz9vcChuLmluZGV4LHQpOnQpO2xldCBsPVVqKHQsMCxpLHMpLGM9by5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9VWoodCwwLGMscykmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiByJiYhMT09PWwmJihzLnByZXZlbnREZWZhdWx0KCkscy5yZXR1cm5WYWx1ZT0hMSksbH19ZnVuY3Rpb24gTShuPTEpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4oWW4ubEZyYW1lLmNvbnRleHRMVmlldz1mdW5jdGlvbihuLHQpe2Zvcig7bj4wOyl0PXRbMTVdLG4tLTtyZXR1cm4gdH0obixZbi5sRnJhbWUuY29udGV4dExWaWV3KSlbOF19KG4pfWZ1bmN0aW9uIGxtZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT9CNihuLG8sITApOmRmZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIHdpKG4pe2xldCB0PVplKClbMTZdWzZdO2lmKCF0LnByb2plY3Rpb24pe2xldCBpPXQucHJvamVjdGlvbj1KeShuP24ubGVuZ3RoOjEsbnVsbCkscj1pLnNsaWNlKCksbz10LmNoaWxkO2Zvcig7bnVsbCE9PW87KXtsZXQgcz1uP2xtZShvLG4pOjA7bnVsbCE9PXMmJihyW3NdP3Jbc10ucHJvamVjdGlvbk5leHQ9bzppW3NdPW8scltzXT1vKSxvPW8ubmV4dH19fWZ1bmN0aW9uIE5uKG4sdD0wLGUpe2xldCBpPVplKCkscj1EaSgpLG89V2cociwyMituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PW8ucHJvamVjdGlvbiYmKG8ucHJvamVjdGlvbj10KSxGRigpLDY0IT0oNjQmby5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtPNih0WzExXSwwLHQsZSxNNihuLGUsdCksVDYoZS5wYXJlbnR8fHRbNl0sZSx0KSl9KHIsaSxvKX1mdW5jdGlvbiB4cihuLHQsZSl7cmV0dXJuIFBiKG4sIiIsdCwiIixlKSx4cn1mdW5jdGlvbiBQYihuLHQsZSxpLHIpe2xldCBvPVplKCkscz1YZyhvLHQsZSxpKTtyZXR1cm4gcyE9PUduJiZEYShEaSgpLHFyKCksbyxuLHMsb1sxMV0sciwhMSksUGJ9ZnVuY3Rpb24gR0Uobix0LGUsaSxyLG8scyl7bGV0IGE9WmUoKSxsPVFnKGEsdCxlLGkscixvKTtyZXR1cm4gbCE9PUduJiZEYShEaSgpLHFyKCksYSxuLGwsYVsxMV0scywhMSksR0V9ZnVuY3Rpb24gamoobix0LGUsaSxyKXtsZXQgbz1uW2UrMV0scz1udWxsPT09dCxhPWk/Smgobyk6RmcobyksbD0hMTtmb3IoOzAhPT1hJiYoITE9PT1sfHxzKTspe2xldCB1PW5bYSsxXTtkbWUoblthXSx0KSYmKGw9ITAsblthKzFdPWk/JGsodSk6SmsodSkpLGE9aT9KaCh1KTpGZyh1KX1sJiYobltlKzFdPWk/Smsobyk6JGsobykpfWZ1bmN0aW9uIGRtZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJk1iKG4sdCk+PTB9dmFyIHdvPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBTVyhuKXtyZXR1cm4gbi5zdWJzdHJpbmcod28ua2V5LHdvLmtleUVuZCl9ZnVuY3Rpb24gcG1lKG4pe3JldHVybiBuLnN1YnN0cmluZyh3by52YWx1ZSx3by52YWx1ZUVuZCl9ZnVuY3Rpb24gRVcobix0KXtsZXQgZT13by50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD13by5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk+MzI7KXQrKztyZXR1cm4gdH0obix3by5rZXk9dCxlKSxOZyhuLHQsZSkpfWZ1bmN0aW9uIFRXKG4sdCl7bGV0IGU9d28udGV4dEVuZCxpPXdvLmtleT1OZyhuLHQsZSk7cmV0dXJuIGU9PT1pPy0xOihpPXdvLmtleUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk7Zm9yKDt0PGUmJig0NT09PShpPW4uY2hhckNvZGVBdCh0KSl8fDk1PT09aXx8KC0zMyZpKT49NjUmJigtMzMmaSk8PTkwfHxpPj00OCYmaTw9NTcpOyl0Kys7cmV0dXJuIHR9KG4saSxlKSxpPUdqKG4saSxlKSxpPXdvLnZhbHVlPU5nKG4saSxlKSxpPXdvLnZhbHVlRW5kPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0tMSxyPS0xLG89LTEscz10LGE9cztmb3IoO3M8ZTspe2xldCBsPW4uY2hhckNvZGVBdChzKyspO2lmKDU5PT09bClyZXR1cm4gYTszND09PWx8fDM5PT09bD9hPXM9V2oobixsLHMsZSk6dD09PXMtNCYmODU9PT1vJiY4Mj09PXImJjc2PT09aSYmNDA9PT1sP2E9cz1XaihuLDQxLHMsZSk6bD4zMiYmKGE9cyksbz1yLHI9aSxpPS0zMyZsfXJldHVybiBhfShuLGksZSksR2oobixpLGUpKX1mdW5jdGlvbiBEVyhuKXt3by5rZXk9MCx3by5rZXlFbmQ9MCx3by52YWx1ZT0wLHdvLnZhbHVlRW5kPTAsd28udGV4dEVuZD1uLmxlbmd0aH1mdW5jdGlvbiBOZyhuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBHaihuLHQsZSxpKXtyZXR1cm4odD1OZyhuLHQsZSkpPGUmJnQrKyx0fWZ1bmN0aW9uIFdqKG4sdCxlLGkpe2xldCByPS0xLG89ZTtmb3IoO288aTspe2xldCBzPW4uY2hhckNvZGVBdChvKyspO2lmKHM9PXQmJjkyIT09cilyZXR1cm4gbztyPTkyPT1zJiY5Mj09PXI/MDpzfXRocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBPdChuLHQsZSl7cmV0dXJuICRsKG4sdCxlLCExKSxPdH1mdW5jdGlvbiBhdChuLHQpe3JldHVybiAkbChuLHQsbnVsbCwhMCksYXR9ZnVuY3Rpb24gcGwobil7ZWMoUFcsdm1lLG4sITEpfWZ1bmN0aW9uIHZtZShuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gRFcobiksVFcobixOZyhuLDAsd28udGV4dEVuZCkpfSh0KTtlPj0wO2U9VFcodCxlKSlQVyhuLFNXKHQpLHBtZSh0KSl9ZnVuY3Rpb24gZWEobil7ZWMoRWEsWmMsbiwhMCl9ZnVuY3Rpb24gWmMobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIERXKG4pLEVXKG4sTmcobiwwLHdvLnRleHRFbmQpKX0odCk7ZT49MDtlPUVXKHQsZSkpRWEobixTVyh0KSwhMCl9ZnVuY3Rpb24gJGwobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1lZCgyKTtvLmZpcnN0VXBkYXRlUGFzcyYmSVcobyxuLHMsaSksdCE9PUduJiZzcyhyLHMsdCkmJlJXKG8sby5kYXRhW1RzKCldLHIsclsxMV0sbixyW3MrMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49Y28oJHMobikpKSksbn0odCxlKSxpLHMpfWZ1bmN0aW9uIGVjKG4sdCxlLGkpe2xldCByPURpKCksbz1lZCgyKTtyLmZpcnN0VXBkYXRlUGFzcyYmSVcocixudWxsLG8saSk7bGV0IHM9WmUoKTtpZihlIT09R24mJnNzKHMsbyxlKSl7bGV0IGE9ci5kYXRhW1RzKCldO2lmKE9XKGEsaSkmJiFBVyhyLG8pKXtsZXQgbD1pP2EuY2xhc3Nlc1dpdGhvdXRIb3N0OmEuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PWwmJihlPWJrKGwsZXx8IiIpKSxvRihyLGEscyxlLGkpfWVsc2UhZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtyPT09R24mJihyPVdpKTtsZXQgbD0wLGM9MCx1PTA8ci5sZW5ndGg/clswXTpudWxsLGQ9MDxvLmxlbmd0aD9vWzBdOm51bGw7Zm9yKDtudWxsIT09dXx8bnVsbCE9PWQ7KXtsZXQgbSxwPWw8ci5sZW5ndGg/cltsKzFdOnZvaWQgMCxoPWM8by5sZW5ndGg/b1tjKzFdOnZvaWQgMCxmPW51bGw7dT09PWQ/KGwrPTIsYys9MixwIT09aCYmKGY9ZCxtPWgpKTpudWxsPT09ZHx8bnVsbCE9PXUmJnU8ZD8obCs9MixmPXUpOihjKz0yLGY9ZCxtPWgpLG51bGwhPT1mJiZSVyhuLHQsZSxpLGYsbSxzLGEpLHU9bDxyLmxlbmd0aD9yW2xdOm51bGwsZD1jPG8ubGVuZ3RoP29bY106bnVsbH19KHIsYSxzLHNbMTFdLHNbbysxXSxzW28rMV09ZnVuY3Rpb24obix0LGUpe2lmKG51bGw9PWV8fCIiPT09ZSlyZXR1cm4gV2k7bGV0IGk9W10scj0kcyhlKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKW4oaSxyW29dLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Ygcilmb3IobGV0IG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZuKGksbyxyW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiByJiZ0KGkscik7cmV0dXJuIGl9KG4sdCxlKSxpLG8pfX1mdW5jdGlvbiBBVyhuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIElXKG4sdCxlLGkpe2xldCByPW4uZGF0YTtpZihudWxsPT09cltlKzFdKXtsZXQgbz1yW1RzKCldLHM9QVcobixlKTtPVyhvLGkpJiZudWxsPT09dCYmIXMmJih0PSExKSx0PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPU5GKG4pLG89aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1yKTA9PT0oaT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKSYmKGU9ZmIoZT11ayhudWxsLG4sdCxlLGkpLHQuYXR0cnMsaSksbz1udWxsKTtlbHNle2xldCBzPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT1zfHxuW3NdIT09cilpZihlPXVrKHIsbix0LGUsaSksbnVsbD09PW8pe2xldCBsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3M7aWYoMCE9PUZnKGkpKXJldHVybiBuW0poKGkpXX0obix0LGkpO3ZvaWQgMCE9PWwmJkFycmF5LmlzQXJyYXkobCkmJihsPXVrKG51bGwsbix0LGxbMV0saSksbD1mYihsLHQuYXR0cnMsaSksZnVuY3Rpb24obix0LGUsaSl7bltKaChlP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpXT1pfShuLHQsaSxsKSl9ZWxzZSBvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaSxyPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbz0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7bzxyO28rKylpPWZiKGksbltvXS5ob3N0QXR0cnMsZSk7cmV0dXJuIGZiKGksdC5hdHRycyxlKX0obix0LGkpfXJldHVybiB2b2lkIDAhPT1vJiYoaT90LnJlc2lkdWFsQ2xhc3Nlcz1vOnQucmVzaWR1YWxTdHlsZXM9byksZX0ocixvLHQsaSksZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW8/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxhPUpoKHMpLGw9Rmcocyk7bltpXT1lO2xldCB1LGM9ITE7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IGQ9ZTt1PWRbMV0sKG51bGw9PT11fHxNYihkLHUpPjApJiYoYz0hMCl9ZWxzZSB1PWU7aWYocilpZigwIT09bCl7bGV0IHA9SmgoblthKzFdKTtuW2krMV09R1MocCxhKSwwIT09cCYmKG5bcCsxXT1sayhuW3ArMV0saSkpLG5bYSsxXT1mdW5jdGlvbihuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30oblthKzFdLGkpfWVsc2UgbltpKzFdPUdTKGEsMCksMCE9PWEmJihuW2ErMV09bGsoblthKzFdLGkpKSxhPWk7ZWxzZSBuW2krMV09R1MobCwwKSwwPT09YT9hPWk6bltsKzFdPWxrKG5bbCsxXSxpKSxsPWk7YyYmKG5baSsxXT1KayhuW2krMV0pKSxqaihuLHUsaSwhMCksamoobix1LGksITEpLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89cj9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgdCYmTWIobyx0KT49MCYmKGVbaSsxXT0kayhlW2krMV0pKX0odCx1LG4saSxvKSxzPUdTKGEsbCksbz90LmNsYXNzQmluZGluZ3M9czp0LnN0eWxlQmluZGluZ3M9c30ocixvLHQsZSxzLGkpfX1mdW5jdGlvbiB1ayhuLHQsZSxpLHIpe2xldCBvPW51bGwscz1lLmRpcmVjdGl2ZUVuZCxhPWUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09YT9hPWUuZGlyZWN0aXZlU3RhcnQ6YSsrO2E8cyYmKG89dFthXSxpPWZiKGksby5ob3N0QXR0cnMsciksbyE9PW4pOylhKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1hKSxpfWZ1bmN0aW9uIGZiKG4sdCxlKXtsZXQgaT1lPzE6MixyPS0xO2lmKG51bGwhPT10KWZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyJudW1iZXIiPT10eXBlb2Ygcz9yPXM6cj09PWkmJihBcnJheS5pc0FycmF5KG4pfHwobj12b2lkIDA9PT1uP1tdOlsiIixuXSksRWEobixzLCEhZXx8dFsrK29dKSl9cmV0dXJuIHZvaWQgMD09PW4/bnVsbDpufWZ1bmN0aW9uIFBXKG4sdCxlKXtFYShuLHQsJHMoZSkpfWZ1bmN0aW9uIFJXKG4sdCxlLGkscixvLHMsYSl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2xldCBsPW4uZGF0YSxjPWxbYSsxXSx1PWZ1bmN0aW9uKG4pe3JldHVybiAxPT0oMSZuKX0oYyk/cWoobCx0LGUscixGZyhjKSxzKTp2b2lkIDA7eUUodSl8fCh5RShvKXx8ZnVuY3Rpb24obil7cmV0dXJuIDI9PSgyJm4pfShjKSYmKG89cWoobCxudWxsLGUscixhLHMpKSxmdW5jdGlvbihuLHQsZSxpLHIpe2lmKHQpcj9uLmFkZENsYXNzKGUsaSk6bi5yZW1vdmVDbGFzcyhlLGkpO2Vsc2V7bGV0IG89LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6YWwuRGFzaENhc2U7bnVsbD09cj9uLnJlbW92ZVN0eWxlKGUsaSxvKTooInN0cmluZyI9PXR5cGVvZiByJiZyLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihyPXIuc2xpY2UoMCwtMTApLG98PWFsLkltcG9ydGFudCksbi5zZXRTdHlsZShlLGkscixvKSl9fShpLHMsSUUoVHMoKSxlKSxyLG8pKX1mdW5jdGlvbiBxaihuLHQsZSxpLHIsbyl7bGV0IGEscz1udWxsPT09dDtmb3IoO3I+MDspe2xldCBsPW5bcl0sYz1BcnJheS5pc0FycmF5KGwpLHU9Yz9sWzFdOmwsZD1udWxsPT09dSxwPWVbcisxXTtwPT09R24mJihwPWQ/V2k6dm9pZCAwKTtsZXQgaD1kP25rKHAsaSk6dT09PWk/cDp2b2lkIDA7aWYoYyYmIXlFKGgpJiYoaD1uayhsLGkpKSx5RShoKSYmKGE9aCxzKSlyZXR1cm4gYTtsZXQgZj1uW3IrMV07cj1zP0poKGYpOkZnKGYpfWlmKG51bGwhPT10KXtsZXQgbD1vP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9bCYmKGE9bmsobCxpKSl9cmV0dXJuIGF9ZnVuY3Rpb24geUUobil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gT1cobix0KXtyZXR1cm4gMCE9KG4uZmxhZ3MmKHQ/MTY6MzIpKX1mdW5jdGlvbiBEKG4sdD0iIil7bGV0IGU9WmUoKSxpPURpKCkscj1uKzIyLG89aS5maXJzdENyZWF0ZVBhc3M/V2coaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPWVOKGVbMTFdLHQpO0xFKGksZSxzLG8pLFdjKG8sITEpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBxZSgiIixuLCIiKSx5dH1mdW5jdGlvbiBxZShuLHQsZSl7bGV0IGk9WmUoKSxyPVhnKGksbix0LGUpO3JldHVybiByIT09R24mJm5kKGksVHMoKSxyKSxxZX1mdW5jdGlvbiBhcChuLHQsZSxpLHIpe2xldCBvPVplKCkscz1RZyhvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1HbiYmbmQobyxUcygpLHMpLGFwfWZ1bmN0aW9uIFdFKG4sdCxlLGkscixvLHMpe2xldCBhPVplKCksbD1LZyhhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09R24mJm5kKGEsVHMoKSxsKSxXRX1mdW5jdGlvbiBSYihuLHQsZSl7ZWMoRWEsWmMsWGcoWmUoKSxuLHQsZSksITApfWZ1bmN0aW9uIEFhKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCEwKSxBYX1mdW5jdGlvbiByMChuLHQsZSl7bGV0IGk9WmUoKTtpZihzcyhpLFVnKCksdCkpe2xldCBvPURpKCkscz1xcigpO0RhKG8scyxpLG4sdCxvVyhORihvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIHIwfXZhciBqaD12b2lkIDAsR21lPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0samhdLFtbIkFNIiwiUE0iXSxqaCxqaF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0samgsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGpoLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsamgsInsxfSAnYXQnIHswfSIsamhdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0sZGs9e307ZnVuY3Rpb24gdGEobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1Zaih0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPVlqKGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIEdtZTt0aHJvdyBuZXcgTXQoNzAxLCExKX1mdW5jdGlvbiBZaihuKXtyZXR1cm4gbiBpbiBka3x8KGRrW25dPVdyLm5nJiZXci5uZy5jb21tb24mJldyLm5nLmNvbW1vbi5sb2NhbGVzJiZXci5uZy5jb21tb24ubG9jYWxlc1tuXSksZGtbbl19dmFyIGJyPSgoKT0+e3JldHVybihuPWJyfHwoYnI9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixicjt2YXIgbn0pKCkscW1lPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgYkU9ImVuLVVTIixLVz17bWFya2VyOiJlbGVtZW50In0sWlc9e21hcmtlcjoiSUNVIn0scWw9KCgpPT57cmV0dXJuKG49cWx8fChxbD17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIscWw7dmFyIG59KSgpLEpXPWJFO2Z1bmN0aW9uICRXKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP0Q2KG4sMCxlKTpNYShlW3JdKX1mdW5jdGlvbiBlNyhuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmMD09KDImdC5mbGFncykpZm9yKGxldCBsPTE7bDxvLmxlbmd0aDtsKyspWmgobixzLGVbb1tsXV0sYSwhMSl9fWZ1bmN0aW9uIHQ3KG4sdCl7aWYobi5wdXNoKHQpLG4ubGVuZ3RoPjEpZm9yKGxldCBlPW4ubGVuZ3RoLTI7ZT49MDtlLS0pe2xldCBpPW5bZV07bjcoaSl8fFptZShpLHQpJiZudWxsPT09Sm1lKGkpJiYkbWUoaSx0LmluZGV4KX19ZnVuY3Rpb24gbjcobil7cmV0dXJuISg2NCZuLnR5cGUpfWZ1bmN0aW9uIFptZShuLHQpe3JldHVybiBuNyh0KXx8bi5pbmRleD50LmluZGV4fWZ1bmN0aW9uIEptZShuKXtsZXQgdD1uLmluc2VydEJlZm9yZUluZGV4O3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMF06dH1mdW5jdGlvbiAkbWUobix0KXtsZXQgZT1uLmluc2VydEJlZm9yZUluZGV4O0FycmF5LmlzQXJyYXkoZSk/ZVswXT10OihJNigkVyxlNyksbi5pbnNlcnRCZWZvcmVJbmRleD10KX1mdW5jdGlvbiB0YihuLHQpe2xldCBlPW4uZGF0YVt0XTtyZXR1cm4gbnVsbD09PWV8fCJzdHJpbmciPT10eXBlb2YgZT9udWxsOmUuaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP2U6ZS52YWx1ZX1mdW5jdGlvbiBuZ2Uobix0LGUpe2xldCBpPXJOKG4sZSw2NCxudWxsLG51bGwpO3JldHVybiB0Nyh0LGkpLGl9ZnVuY3Rpb24gcUUobix0KXtsZXQgZT10W24uY3VycmVudENhc2VMVmlld0luZGV4XTtyZXR1cm4gbnVsbD09PWU/ZTplPDA/fmU6ZX1mdW5jdGlvbiBpZ2Uobil7cmV0dXJuIG4+Pj4xN31mdW5jdGlvbiByZ2Uobil7cmV0dXJuKDEzMTA3MCZuKT4+PjF9dmFyIG1iPTAsbmI9MDtmdW5jdGlvbiBpNyhuLHQsZSxpKXtsZXQgcyxyPWVbMTFdLG89bnVsbDtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2xldCBjPXRbKythXTtudWxsPT09ZVtjXSYmKGVbY109ZU4ocixsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmxldCB1LGQsYz1pZ2UobCk7aWYobnVsbD09PW8mJihvPWMscz1ORShyLGkpKSxjPT09bz8odT1pLGQ9cyk6KHU9bnVsbCxkPU1hKGVbY10pKSxudWxsIT09ZCl7bGV0IG09cmdlKGwpO1poKHIsZCxlW21dLHUsITEpO2xldCBfPXRiKG4sbSk7aWYobnVsbCE9PV8mJiJvYmplY3QiPT10eXBlb2YgXyl7bGV0IHk9cUUoXyxlKTtudWxsIT09eSYmaTcobixfLmNyZWF0ZVt5XSxlLGVbXy5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmxldCBoPXRbKythXSxmPXRbKythXTt1TihyLElFKGw+Pj4xLGUpLG51bGwsbnVsbCxoLGYsbnVsbCl9ZWxzZSBzd2l0Y2gobCl7Y2FzZSBaVzpsZXQgYz10WysrYV0sdT10WysrYV07bnVsbD09PWVbdV0mJlljKGVbdV09R2hlKHIsYyksZSk7YnJlYWs7Y2FzZSBLVzpsZXQgZD10WysrYV0scD10WysrYV07bnVsbD09PWVbcF0mJlljKGVbcF09dE4ocixkLG51bGwpLGUpfX19ZnVuY3Rpb24gcjcobix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXSxhPWVbKytvXTtpZihzJnIpe2xldCBsPSIiO2ZvcihsZXQgYz1vKzE7Yzw9bythO2MrKyl7bGV0IHU9ZVtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbCs9dTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdSlpZih1PDApbCs9cW4odFtpLXVdKTtlbHNle2xldCBkPXU+Pj4yO3N3aXRjaCgzJnUpe2Nhc2UgMTpsZXQgcD1lWysrY10saD1lWysrY10sZj1uLmRhdGFbZF07InN0cmluZyI9PXR5cGVvZiBmP3VOKHRbMTFdLHRbZF0sbnVsbCxmLHAsbCxoKTpEYShuLGYsdCxwLGwsdFsxMV0saCwhMSk7YnJlYWs7Y2FzZSAwOmxldCBtPXRbZF07bnVsbCE9PW0mJng2KHRbMTFdLG0sbCk7YnJlYWs7Y2FzZSAyOmNnZShuLHRiKG4sZCksdCxsKTticmVhaztjYXNlIDM6WGoobix0YihuLGQpLGksdCl9fX19ZWxzZXtsZXQgbD1lW28rMV07aWYobD4wJiYzPT0oMyZsKSl7bGV0IHU9dGIobixsPj4+Mik7dFt1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF08MCYmWGoobix1LGksdCl9fW8rPWF9fWZ1bmN0aW9uIFhqKG4sdCxlLGkpe2xldCByPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO2lmKG51bGwhPT1yKXtsZXQgbz1tYjtyPDAmJihyPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPX5yLG89LTEpLHI3KG4saSx0LnVwZGF0ZVtyXSxlLG8pfX1mdW5jdGlvbiBjZ2Uobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1uLmNhc2VzLmluZGV4T2YodCk7aWYoLTE9PT1lKXN3aXRjaChuLnR5cGUpe2Nhc2UgMTp7bGV0IGk9ZnVuY3Rpb24obix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gdGEobilbYnIuUGx1cmFsQ2FzZV19KHQpKHBhcnNlSW50KG4sMTApKSxpPXFtZVtlXTtyZXR1cm4gdm9pZCAwIT09aT9pOiJvdGhlciJ9KHQsSlcpO2U9bi5jYXNlcy5pbmRleE9mKGkpLC0xPT09ZSYmIm90aGVyIiE9PWkmJihlPW4uY2FzZXMuaW5kZXhPZigib3RoZXIiKSk7YnJlYWt9Y2FzZSAwOmU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpfXJldHVybi0xPT09ZT9udWxsOmV9KHQsaSk7aWYocUUodCxlKSE9PXImJihvNyhuLHQsZSksZVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09bnVsbD09PXI/bnVsbDp+cixudWxsIT09cikpe2xldCBzPWVbdC5hbmNob3JJZHhdO3MmJmk3KG4sdC5jcmVhdGVbcl0sZSxzKX19ZnVuY3Rpb24gbzcobix0LGUpe2xldCBpPXFFKHQsZSk7aWYobnVsbCE9PWkpe2xldCByPXQucmVtb3ZlW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHM+MCl7bGV0IGE9SUUocyxlKTtudWxsIT09YSYmUjYoZVsxMV0sYSl9ZWxzZSBvNyhuLHRiKG4sfnMpLGUpfX19ZnVuY3Rpb24gZGdlKCl7bGV0IGUsaSxuPVtdLHQ9LTE7ZnVuY3Rpb24gbyhhLGwpe3Q9MDtsZXQgYz1xRShhLGwpO2k9bnVsbCE9PWM/YS5yZW1vdmVbY106V2l9ZnVuY3Rpb24gcygpe2lmKHQ8aS5sZW5ndGgpe2xldCBhPWlbdCsrXTtyZXR1cm4gYT4wP2VbYV06KG4ucHVzaCh0LGkpLG8oZVsxXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgeEU9L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2kscGdlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSxoZ2U9L1x1ZmZmZChcZCspXHVmZmZkLyxzNz0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sZmdlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxtZ2U9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLGdnZT0vXHVFNTAwL2c7ZnVuY3Rpb24gYTcobix0LGUsaSxyLG8scyl7bGV0IGE9cWcobixpLDEsbnVsbCksbD1hPDxxbC5TSElGVCxjPWxiKCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9cWwuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1xbC5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PVlrJiYoWWs9bigpKX0oZGdlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IHU9ck4obixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO3Q3KGUsdSk7bGV0IGQ9dS5pbmRleDtyZXR1cm4gV2ModSwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KEk2KCRXLGU3KSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmY0coIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLGQpLHV9ZnVuY3Rpb24geWdlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goeEUpLGw9YTcobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZyYihyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gcmIobix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoeEUpLHU9MDtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXTtpZigxJmQpe2xldCBoPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWgpLHV8PWw3KGgpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT11LG5bYV09bi5sZW5ndGgtbCx1fWZ1bmN0aW9uIHhnZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24gbDcobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIFFqKG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD1mZ2UuZXhlYyhuKSk7KXI/dFswXT09PWBcdWZmZmQvKiR7b31cdWZmZmRgJiYoaT10LmluZGV4LHI9ITEpOihlKz1uLnN1YnN0cmluZyhpLHQuaW5kZXgrdFswXS5sZW5ndGgpLG89dFsxXSxyPSEwKTtyZXR1cm4gZSs9bi5zbGljZShpKSxlfWZ1bmN0aW9uIGM3KG4sdCxlLGkscixvKXtsZXQgcz0wLGE9e3R5cGU6ci50eXBlLGN1cnJlbnRDYXNlTFZpZXdJbmRleDpxZyhuLHQsMSxudWxsKSxhbmNob3JJZHg6byxjYXNlczpbXSxjcmVhdGU6W10scmVtb3ZlOltdLHVwZGF0ZTpbXX07KGZ1bmN0aW9uKG4sdCxlKXtuLnB1c2gobDcodC5tYWluQmluZGluZyksMiwtMS10Lm1haW5CaW5kaW5nLGU8PDJ8Mil9KShlLHIsbyksZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGF0YVt0XTtudWxsPT09aT9uLmRhdGFbdF09ZTppLnZhbHVlPWV9KG4sbyxhKTtsZXQgbD1yLnZhbHVlcztmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXSxkPVtdO2ZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXtsZXQgaD11W3BdO2lmKCJzdHJpbmciIT10eXBlb2YgaCl7bGV0IGY9ZC5wdXNoKGgpLTE7dVtwXT1gXHgzYyEtLVx1ZmZmZCR7Zn1cdWZmZmQtLVx4M2VgfX1zPVNnZShuLGEsdCxlLGksci5jYXNlc1tjXSx1LmpvaW4oIiIpLGQpfHN9cyYmZnVuY3Rpb24obix0LGUpe24ucHVzaCh0LDEsZTw8MnwzKX0oZSxzLG8pfWZ1bmN0aW9uIE1nZShuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTAsbz1zRihuPW4ucmVwbGFjZShzNyxmdW5jdGlvbihzLGEsbCl7cmV0dXJuIGk9InNlbGVjdCI9PT1sPzA6MSxyPXBhcnNlSW50KGEuc2xpY2UoMSksMTApLCIifSkpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7KXtsZXQgYT1vW3MrK10udHJpbSgpOzE9PT1pJiYoYT1hLnJlcGxhY2UoL1xzKig/Oj0pPyhcdyspXHMqLywiJDEiKSksYS5sZW5ndGgmJnQucHVzaChhKTtsZXQgbD1zRihvW3MrK10pO3QubGVuZ3RoPmUubGVuZ3RoJiZlLnB1c2gobCl9cmV0dXJue3R5cGU6aSxtYWluQmluZGluZzpyLGNhc2VzOnQsdmFsdWVzOmV9fWZ1bmN0aW9uIHNGKG4pe2lmKCFuKXJldHVybltdO2xldCBvLHQ9MCxlPVtdLGk9W10scj0vW3t9XS9nO2ZvcihyLmxhc3RJbmRleD0wO289ci5leGVjKG4pOyl7bGV0IGE9by5pbmRleDtpZigifSI9PW9bMF0pe2lmKGUucG9wKCksMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7czcudGVzdChsKT9pLnB1c2goTWdlKGwpKTppLnB1c2gobCksdD1hKzF9fWVsc2V7aWYoMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7aS5wdXNoKGwpLHQ9YSsxfWUucHVzaCgieyIpfX1sZXQgcz1uLnN1YnN0cmluZyh0KTtyZXR1cm4gaS5wdXNoKHMpLGl9ZnVuY3Rpb24gU2dlKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz1bXSx1PVtdO3QuY2FzZXMucHVzaChvKSx0LmNyZWF0ZS5wdXNoKGwpLHQucmVtb3ZlLnB1c2goYyksdC51cGRhdGUucHVzaCh1KTtsZXQgcD1zNigkRygpKS5nZXRJbmVydEJvZHlFbGVtZW50KHMpLGg9VWsocCl8fHA7cmV0dXJuIGg/dTcobix0LGUsaSxsLGMsdSxoLHIsYSwwKTowfWZ1bmN0aW9uIHU3KG4sdCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9MCxwPWEuZmlyc3RDaGlsZDtmb3IoO3A7KXtsZXQgaD1xZyhuLGUsMSxudWxsKTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpsZXQgZj1wLG09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoVmsuaGFzT3duUHJvcGVydHkobSkpe3BrKHIsS1csbSxsLGgpLG4uZGF0YVtoXT1tO2xldCBJPWYuYXR0cmlidXRlcztmb3IobGV0IEE9MDtBPEkubGVuZ3RoO0ErKyl7bGV0IE89SS5pdGVtKEEpLGVlPU8ubmFtZS50b0xvd2VyQ2FzZSgpO08udmFsdWUubWF0Y2goeEUpP3U2Lmhhc093blByb3BlcnR5KGVlKSYmcmIocyxPLnZhbHVlLGgsTy5uYW1lLDAscUZbZWVdP0ViOm51bGwpOkFnZShyLGgsTyl9ZD11NyhuLHQsZSxpLHIsbyxzLHAsaCxjLHUrMSl8ZCxLaihvLGgsdSl9YnJlYWs7Y2FzZSBOb2RlLlRFWFRfTk9ERTpsZXQgQz1wLnRleHRDb250ZW50fHwiIixfPUMubWF0Y2goeEUpO3BrKHIsbnVsbCxfPyIiOkMsbCxoKSxLaihvLGgsdSksXyYmKGQ9cmIocyxDLGgsbnVsbCwwLG51bGwpfGQpO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6bGV0IHk9aGdlLmV4ZWMocC50ZXh0Q29udGVudHx8IiIpO2lmKHkpe2xldCBBPWNbcGFyc2VJbnQoeVsxXSwxMCldO3BrKHIsWlcsIiIsbCxoKSxjNyhuLGUsaSxsLEEsaCksRWdlKG8saCx1KX19cD1wLm5leHRTaWJsaW5nfXJldHVybiBkfWZ1bmN0aW9uIEtqKG4sdCxlKXswPT09ZSYmbi5wdXNoKHQpfWZ1bmN0aW9uIEVnZShuLHQsZSl7MD09PWUmJihuLnB1c2gofnQpLG4ucHVzaCh0KSl9ZnVuY3Rpb24gcGsobix0LGUsaSxyKXtudWxsIT09dCYmbi5wdXNoKHQpLG4ucHVzaChlLHIsZnVuY3Rpb24obix0LGUpe3JldHVybiAwfHQ8PDE3fGU8PDF9KDAsaSxyKSl9ZnVuY3Rpb24gQWdlKG4sdCxlKXtuLnB1c2godDw8MXwxLGUubmFtZSxlLnZhbHVlKX12YXIgSWdlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxQZ2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyxSZ2U9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxPZ2U9L3soW0EtWjAtOV9dKyl9L2csa2dlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxGZ2U9L1wvXCovLE5nZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gZDcobix0LGU9LTEpe2xldCBpPURpKCkscj1aZSgpLG89MjIrbixzPWVwKGkuY29uc3RzLHQpLGE9bGIoKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWxiKCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4gUWoobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH1cdWZmZmRgKSsyK3QudG9TdHJpbmcoKS5sZW5ndGgsaT1uLnNlYXJjaChuZXcgUmVnRXhwKGBcdWZmZmRcXC9cXCpcXGQrOiR7dH1cdWZmZmRgKSk7cmV0dXJuIFFqKG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgdT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGdnZSwiICIpfShyKS5zcGxpdChtZ2UpO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXtsZXQgcD11W2RdO2lmKDA9PSgxJmQpKXtsZXQgaD1zRihwKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IG09aFtmXTtpZigwPT0oMSZmKSl7bGV0IEM9bTsiIiE9PUMmJnlnZShuLHMsY1swXSxhLGwsZSxDKX1lbHNle2xldCBDPW07aWYoIm9iamVjdCIhPXR5cGVvZiBDKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO2M3KG4sZSxsLHQsQyxhNyhuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGg9NDc9PT1wLmNoYXJDb2RlQXQoMCksbT0ocC5jaGFyQ29kZUF0KGg/MTowKSwyMitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoaD8yOjEpKSk7aWYoaCljLnNoaWZ0KCksV2MobGIoKSwhMSk7ZWxzZXtsZXQgQz1uZ2UobixjWzBdLG0pO2MudW5zaGlmdChbXSksV2MoQywhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLHU9UzYoaSxhPT09cls2XT9udWxsOmEscik7KGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bMTFdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W28rK10sYT10W29dLGw9KHMmcWwuQ09NTUVOVCk9PT1xbC5DT01NRU5ULGM9KHMmcWwuQVBQRU5EX0VBR0VSTFkpPT09cWwuQVBQRU5EX0VBR0VSTFksdT1zPj4+cWwuU0hJRlQsZD1uW3VdO251bGw9PT1kJiYoZD1uW3VdPWw/ci5jcmVhdGVDb21tZW50KGEpOmVOKHIsYSkpLGMmJm51bGwhPT1lJiZaaChyLGUsZCxpLCExKX19KShyLGwuY3JlYXRlLHUsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxURyghMCl9ZnVuY3Rpb24gcDcoKXtURyghMSl9ZnVuY3Rpb24gWUUobix0LGUpe2Q3KG4sdCxlKSxwNygpfWZ1bmN0aW9uIE9iKG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYobWJ8PTE8PE1hdGgubWluKG5iLDMxKSksbmIrK30oc3MoWmUoKSxVZygpLG4pKSxPYn1mdW5jdGlvbiBYRShuKXshZnVuY3Rpb24obix0LGUpe2lmKG5iPjApe2xldCBpPW4uZGF0YVtlXTtyNyhuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLCR1KCktbmItMSxtYil9bWI9MCxuYj0wfShEaSgpLFplKCksbisyMil9ZnVuY3Rpb24gUUUobix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKElnZS50ZXN0KG4pKXtsZXQgaT17fSxyPVswXTtlPWUucmVwbGFjZShQZ2UsKG8scyxhKT0+e2xldCBsPXN8fGEsYz1pW2xdfHxbXTtpZihjLmxlbmd0aHx8KGwuc3BsaXQoInwiKS5mb3JFYWNoKG09PntsZXQgQz1tLm1hdGNoKE5nZSksXz1DP3BhcnNlSW50KENbMV0sMTApOjAseT1GZ2UudGVzdChtKTtjLnB1c2goW18seSxtXSl9KSxpW2xdPWMpLCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7bH1gKTtsZXQgdT1yW3IubGVuZ3RoLTFdLGQ9MDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rKylpZihjW21dWzBdPT09dSl7ZD1tO2JyZWFrfWxldFtwLGgsZl09Y1tkXTtyZXR1cm4gaD9yLnBvcCgpOnUhPT1wJiZyLnB1c2gocCksYy5zcGxpY2UoZCwxKSxmfSl9cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKGU9ZS5yZXBsYWNlKFJnZSwoaSxyLG8scyxhLGwpPT50Lmhhc093blByb3BlcnR5KG8pP2Ake3J9JHt0W29dfSR7bH1gOmkpLGU9ZS5yZXBsYWNlKE9nZSwoaSxyKT0+dC5oYXNPd25Qcm9wZXJ0eShyKT90W3JdOmkpLGU9ZS5yZXBsYWNlKGtnZSwoaSxyKT0+e2lmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIElDVSAtICR7aX0gd2l0aCBrZXk6ICR7cn1gKTtyZXR1cm4gby5zaGlmdCgpfXJldHVybiBpfSkpLGV9KG4sdCl9ZnVuY3Rpb24gYUYobix0LGUsaSxyKXtpZihuPXFpKG4pLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspYUYobltvXSx0LGUsaSxyKTtlbHNle2xldCBvPURpKCkscz1aZSgpLGE9a2cobik/bjpxaShuLnByb3ZpZGUpLGw9XzYobiksYz1NbygpLHU9MTA0ODU3NSZjLnByb3ZpZGVySW5kZXhlcyxkPWMuZGlyZWN0aXZlU3RhcnQscD1jLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoa2cobil8fCFuLm11bHRpKXtsZXQgaD1uZXcgS2gobCxyLHcpLGY9ZmsoYSx0LHI/dTp1K3AsZCk7LTE9PT1mPyhkRShjYihjLHMpLG8sYSksaGsobyxuLHQubGVuZ3RoKSx0LnB1c2goYSksYy5kaXJlY3RpdmVTdGFydCsrLGMuZGlyZWN0aXZlRW5kKyssciYmKGMucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxlLnB1c2goaCkscy5wdXNoKGgpKTooZVtmXT1oLHNbZl09aCl9ZWxzZXtsZXQgaD1mayhhLHQsdStwLGQpLGY9ZmsoYSx0LHUsdStwKSxtPWg+PTAmJmVbaF0sQz1mPj0wJiZlW2ZdO2lmKHImJiFDfHwhciYmIW0pe2RFKGNiKGMscyksbyxhKTtsZXQgXz1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBLaChuLGUsdyk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsaDcobyxyLGkmJiFlKSxvfShyP1VnZTpIZ2UsZS5sZW5ndGgscixpLGwpOyFyJiZDJiYoZVtmXS5wcm92aWRlckZhY3Rvcnk9XyksaGsobyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChfKSxzLnB1c2goXyl9ZWxzZSBoayhvLG4saD4tMT9oOmYsaDcoZVtyP2Y6aF0sbCwhciYmaSkpOyFyJiZpJiZDJiZlW2ZdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gaGsobix0LGUsaSl7bGV0IHI9a2codCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP3FpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IHU9Yy5pbmRleE9mKGUpOy0xPT09dT9jLnB1c2goZSxbaSxsXSk6Y1t1KzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gaDcobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIGZrKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSGdlKG4sdCxlLGkpe3JldHVybiBsRih0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBVZ2Uobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT1DYihlLGVbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7bz1hLnNsaWNlKDAscyksbEYocixvKTtmb3IobGV0IGw9cztsPGEubGVuZ3RoO2wrKylvLnB1c2goYVtsXSl9ZWxzZSBvPVtdLGxGKHIsbyk7cmV0dXJuIG99ZnVuY3Rpb24gbEYobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gJHQobix0PVtdKXtyZXR1cm4gZT0+e2UucHJvdmlkZXJzUmVzb2x2ZXI9KGkscik9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1EaSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtsZXQgcj1RbChuKTthRihlLGkuZGF0YSxpLmJsdWVwcmludCxyLCEwKSxhRih0LGkuZGF0YSxpLmJsdWVwcmludCxyLCExKX19KGkscj9yKG4pOm4sdCl9fXZhciBpcD1jbGFzc3t9LGNGPWNsYXNze30sdUY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGhiKHRoaXMpO2xldCBpPUlnKHQpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9S1MoaS5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9VTYodCxlLFt7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGNvKHQpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtsZXQgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fSxkRj1jbGFzcyBleHRlbmRzIGNGe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXR9Y3JlYXRlKHQpe3JldHVybiBuZXcgdUYodGhpcy5tb2R1bGVUeXBlLHQpfX0scEY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgaGIodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2xldCByPW5ldyBtRShbLi4udCx7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGV8fFFGKCksaSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9cixyLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kodCl9fSxHZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZSl7aWYoIWUuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGUuaWQpKXtsZXQgaT1mNigwLGUudHlwZSkscj1pLmxlbmd0aD4wP2Z1bmN0aW9uKG4sdCxlPW51bGwpe3JldHVybiBuZXcgcEYobix0LGUpLmluamVjdG9yfShbaV0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHtlLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoZS5pZCxyKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGUuaWQpfW5nT25EZXN0cm95KCl7dHJ5e2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09ZSYmZS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IG4oUihucCkpfSksbn0pKCk7ZnVuY3Rpb24gbHAobix0LGUpe2xldCBpPUVzKCkrbixyPVplKCk7cmV0dXJuIHJbaV09PT1Hbj9LYyhyLGksZT90LmNhbGwoZSk6dCgpKTpJYihyLGkpfWZ1bmN0aW9uIEhuKG4sdCxlLGkpe3JldHVybiBmNyhaZSgpLEVzKCksbix0LGUsaSl9ZnVuY3Rpb24gdG8obix0LGUsaSxyKXtyZXR1cm4gbTcoWmUoKSxFcygpLG4sdCxlLGkscil9ZnVuY3Rpb24ga2Iobix0LGUsaSxyLG8pe3JldHVybiBnNyhaZSgpLEVzKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIG1OKG4sdCxlLGkscixvLHMpe3JldHVybiBfNyhaZSgpLEVzKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gZ04obix0LGUsaSxyLG8scyxhKXtsZXQgbD1FcygpK24sYz1aZSgpLHU9bGwoYyxsLGUsaSxyLG8pO3JldHVybiBzcyhjLGwrNCxzKXx8dT9LYyhjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpJYihjLGwrNSl9ZnVuY3Rpb24gRmIobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09R24/dm9pZCAwOmV9ZnVuY3Rpb24gZjcobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gc3MobixzLHIpP0tjKG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6RmIobixzKzEpfWZ1bmN0aW9uIG03KG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gZWYobixhLHIsbyk/S2MobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6RmIobixhKzIpfWZ1bmN0aW9uIGc3KG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBqRShuLGwscixvLHMpP0tjKG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpGYihuLGwrMyl9ZnVuY3Rpb24gXzcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gbGwobixjLHIsbyxzLGEpP0tjKG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6RmIobixjKzQpfWZ1bmN0aW9uIHY3KG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylzcyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP0tjKG4scyxpLmFwcGx5KG8scikpOkZiKG4scyl9ZnVuY3Rpb24gaihuLHQpe2xldCBpLGU9RGkoKSxyPW4rMjI7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzfHwoZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9UWgoaS50eXBlKSkscz1pbCh3KTt0cnl7bGV0IGE9dUUoITEpLGw9bygpO3JldHVybiB1RShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLFplKCkscixsKSxsfWZpbmFsbHl7aWwocyl9fWZ1bmN0aW9uIFcobix0LGUpe2xldCBpPW4rMjIscj1aZSgpLG89SGcocixpKTtyZXR1cm4gTmIocixpKT9mNyhyLEVzKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIG5mKG4sdCxlLGkpe2xldCByPW4rMjIsbz1aZSgpLHM9SGcobyxyKTtyZXR1cm4gTmIobyxyKT9tNyhvLEVzKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBfTihuLHQsZSxpLHIpe2xldCBvPW4rMjIscz1aZSgpLGE9SGcocyxvKTtyZXR1cm4gTmIocyxvKT9nNyhzLEVzKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gTmIobix0KXtyZXR1cm4gblsxXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gbWsobil7cmV0dXJuIHQ9PntzZXRUaW1lb3V0KG4sdm9pZCAwLHQpfX12YXIgRz1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxpKXtsZXQgcj10LG89ZXx8KCgpPT5udWxsKSxzPWk7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbD10O3I9bC5uZXh0Py5iaW5kKGwpLG89bC5lcnJvcj8uYmluZChsKSxzPWwuY29tcGxldGU/LmJpbmQobCl9dGhpcy5fX2lzQXN5bmMmJihvPW1rKG8pLHImJihyPW1rKHIpKSxzJiYocz1tayhzKSkpO2xldCBhPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpyLGVycm9yOm8sY29tcGxldGU6c30pO3JldHVybiB0IGluc3RhbmNlb2Ygdm4mJnQuYWRkKGEpLGF9fTtmdW5jdGlvbiAkZ2UoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tVRSgpXSgpfXZhciBjbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtsZXQgZT1VRSgpLGk9Y2wucHJvdG90eXBlO2lbZV18fChpW2VdPSRnZSl9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEcpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9WHUodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sT2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189bjBlLG59KSgpLGUwZT1PaSx0MGU9Y2xhc3MgZXh0ZW5kcyBlMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Mscj1CRSh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGksdCwxNixudWxsLGkuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwsZXx8bnVsbCk7clsxN109dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO2xldCBzPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09cyYmKHJbMTldPXMuY3JlYXRlRW1iZWRkZWRWaWV3KGkpKSxvTihpLHIsdCksbmV3ICRoKHIpfX07ZnVuY3Rpb24gbjBlKCl7cmV0dXJuIEtFKE1vKCksWmUoKSl9ZnVuY3Rpb24gS0Uobix0KXtyZXR1cm4gNCZuLnR5cGU/bmV3IHQwZSh0LG4sR2cobix0KSk6bnVsbH12YXIgeWk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189aTBlLG59KSgpO2Z1bmN0aW9uIGkwZSgpe3JldHVybiBiNyhNbygpLFplKCkpfXZhciByMGU9eWkseTc9Y2xhc3MgZXh0ZW5kcyByMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fbENvbnRhaW5lcj10LHRoaXMuX2hvc3RUTm9kZT1lLHRoaXMuX2hvc3RMVmlldz1pfWdldCBlbGVtZW50KCl7cmV0dXJuIEdnKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgWWgodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IHBhcmVudEluamVjdG9yKCl7bGV0IHQ9VUYodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoTkcodCkpe2xldCBlPWNFKHQsdGhpcy5faG9zdExWaWV3KSxpPWxFKHQpO3JldHVybiBuZXcgWWgoZVsxXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBZaChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC0xMH1jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiFYeSh0KTtpZihzKWE9ZTtlbHNle2xldCBkPWV8fHt9O2E9ZC5pbmRleCxpPWQuaW5qZWN0b3Iscj1kLnByb2plY3RhYmxlTm9kZXMsbz1kLmVudmlyb25tZW50SW5qZWN0b3J8fGQubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyB2RShvbCh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChucCxudWxsKTtwJiYobz1wKX1sZXQgdT1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydCh1Lmhvc3RWaWV3LGEpLHV9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pWzFdO2lmKEp1KGlbM10pKXtsZXQgdT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT11KXRoaXMuZGV0YWNoKHUpO2Vsc2V7bGV0IGQ9aVszXSxwPW5ldyB5NyhkLGRbNl0sZFszXSk7cC5kZXRhY2gocC5pbmRleE9mKHQpKX19bGV0IG89dGhpcy5fYWRqdXN0SW5kZXgoZSkscz10aGlzLl9sQ29udGFpbmVyOyFmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xMCtpLG89ZS5sZW5ndGg7aT4wJiYoZVtyLTFdWzRdPXQpLGk8by0xMD8odFs0XT1lW3JdLHFHKGUsMTAraSx0KSk6KGUucHVzaCh0KSx0WzRdPW51bGwpLHRbM109ZTtsZXQgcz10WzE3XTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bls5XTt0WzE2XSE9PXRbM11bM11bMTZdJiYoblsyXT0hMCksbnVsbD09PWU/bls5XT1bdF06ZS5wdXNoKHQpfShzLHQpO2xldCBhPXRbMTldO251bGwhPT1hJiZhLmluc2VydFZpZXcobiksdFsyXXw9NjR9KHIsaSxzLG8pO2xldCBhPUtrKG8scyksbD1pWzExXSxjPU5FKGwsc1s3XSk7cmV0dXJuIG51bGwhPT1jJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7aVswXT1yLGlbNl09dCxBYihuLGksZSwxLHIsbyl9KHIsc1s2XSxsLGksYyxhKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHFHKGdrKHMpLG8sdCksdH1tb3ZlKHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7aSYmKHBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpLHc2KGlbMV0saSkpfWRldGFjaCh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7cmV0dXJuIGkmJm51bGwhPXBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpP25ldyAkaChpKTpudWxsfV9hZGp1c3RJbmRleCh0LGU9MCl7cmV0dXJuIHQ/P3RoaXMubGVuZ3RoK2V9fTtmdW5jdGlvbiBKaihuKXtyZXR1cm4gbls4XX1mdW5jdGlvbiBnayhuKXtyZXR1cm4gbls4XXx8KG5bOF09W10pfWZ1bmN0aW9uIGI3KG4sdCl7bGV0IGUsaT10W24uaW5kZXhdO2lmKEp1KGkpKWU9aTtlbHNle2xldCByO2lmKDgmbi50eXBlKXI9TWEoaSk7ZWxzZXtsZXQgbz10WzExXTtyPW8uY3JlYXRlQ29tbWVudCgiIik7bGV0IHM9dWwobix0KTtaaChvLE5FKG8scykscixmdW5jdGlvbihuLHQpe3JldHVybiBuLm5leHRTaWJsaW5nKHQpfShvLHMpLCExKX10W24uaW5kZXhdPWU9ZVcoaSx0LHIsbiksSEUodCxlKX1yZXR1cm4gbmV3IHk3KGUsbix0KX12YXIgZ2I9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeUxpc3Q9dCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgZ2IodGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19LF9iPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtsZXQgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2xldCBpPW51bGwhPT10LmNvbnRlbnRRdWVyaWVzP3QuY29udGVudFF1ZXJpZXNbMF06ZS5sZW5ndGgscj1bXTtmb3IobGV0IG89MDtvPGk7bysrKXtsZXQgcz1lLmdldEJ5SW5kZXgobyk7ci5wdXNoKHRoaXMucXVlcmllc1tzLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgX2Iocil9cmV0dXJuIG51bGx9aW5zZXJ0Vmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRldGFjaFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KXtmb3IobGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKW51bGwhPT1NNyh0LGUpLm1hdGNoZXMmJnRoaXMucXVlcmllc1tlXS5zZXREaXJ0eSgpfX0sQ0U9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPWl9fSx2Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1lbGVtZW50U3RhcnQodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtsZXQgcj1udWxsIT09ZT9lLmxlbmd0aDowLG89dGhpcy5nZXRCeUluZGV4KGkpLmVtYmVkZGVkVFZpZXcodCxyKTtvJiYoby5pbmRleEluRGVjbGFyYXRpb25WaWV3PWksbnVsbCE9PWU/ZS5wdXNoKG8pOmU9W29dKX1yZXR1cm4gbnVsbCE9PWU/bmV3IHZiKGUpOm51bGx9dGVtcGxhdGUodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fSx5Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEpe3RoaXMubWV0YWRhdGE9dCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1lfWVsZW1lbnRTdGFydCh0LGUpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShlKSYmdGhpcy5tYXRjaFROb2RlKHQsZSl9ZWxlbWVudEVuZCh0KXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PXQuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUodCxlKXt0aGlzLmVsZW1lbnRTdGFydCh0LGUpfWVtYmVkZGVkVFZpZXcodCxlKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLXQuaW5kZXgsZSksbmV3IHliKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUodCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEhPSgxJnRoaXMubWV0YWRhdGEuZmxhZ3MpKXtsZXQgZT10aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleCxpPXQucGFyZW50O2Zvcig7bnVsbCE9PWkmJjgmaS50eXBlJiZpLmluZGV4IT09ZTspaT1pLnBhcmVudDtyZXR1cm4gZT09PShudWxsIT09aT9pLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZSh0LGUpe2xldCBpPXRoaXMubWV0YWRhdGEucHJlZGljYXRlO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGEwZShlLG8pKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LG8sITEsITEpKX1lbHNlIGk9PT1PaT80JmUudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LGksITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGkpe2lmKG51bGwhPT1pKXtsZXQgcj10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PXIpaWYocj09PUFlfHxyPT09eWl8fHI9PT1PaSYmNCZlLnR5cGUpdGhpcy5hZGRNYXRjaChlLmluZGV4LC0yKTtlbHNle2xldCBvPVhTKGUsdCxyLCExLCExKTtudWxsIT09byYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG8pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LGkpfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fTtmdW5jdGlvbiBhMGUobix0KXtsZXQgZT1uLmxvY2FsTmFtZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKWlmKGVbaV09PT10KXJldHVybiBlW2krMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gYzBlKG4sdCxlLGkpe3JldHVybi0xPT09ZT9mdW5jdGlvbihuLHQpe3JldHVybiAxMSZuLnR5cGU/R2cobix0KTo0Jm4udHlwZT9LRShuLHQpOm51bGx9KHQsbik6LTI9PT1lP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZT09PUFlP0dnKHQsbik6ZT09PU9pP0tFKHQsbik6ZT09PXlpP2I3KHQsbik6dm9pZCAwfShuLHQsaSk6Q2IobixuWzFdLGUsdCl9ZnVuY3Rpb24geDcobix0LGUsaSl7bGV0IHI9dFsxOV0ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOmMwZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gZkYobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPXg3KG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sdT10Wy1sXTtmb3IobGV0IGQ9MTA7ZDx1Lmxlbmd0aDtkKyspe2xldCBwPXVbZF07cFsxN109PT1wWzNdJiZmRihwWzFdLHAsYyxpKX1pZihudWxsIT09dVs5XSl7bGV0IGQ9dVs5XTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGg9ZFtwXTtmRihoWzFdLGgsYyxpKX19fX19cmV0dXJuIGl9ZnVuY3Rpb24gTmUobil7bGV0IHQ9WmUoKSxlPURpKCksaT1ERygpO0xGKGkrMSk7bGV0IHI9TTcoZSxpKTtpZihuLmRpcnR5JiZmdW5jdGlvbihuKXtyZXR1cm4gND09KDQmblsyXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/ZkYoZSx0LGksW10pOng3KGUsdCxyLGkpO24ucmVzZXQobyxUaGUpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbHQobix0LGUpe2xldCBpPURpKCk7aS5maXJzdENyZWF0ZVBhc3MmJih3NyhpLG5ldyBDRShuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLEM3KGksWmUoKSx0KX1mdW5jdGlvbiBOaShuLHQsZSxpKXtsZXQgcj1EaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz1NbygpO3c3KHIsbmV3IENFKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9QzcocixaZSgpLGUpfWZ1bmN0aW9uIExlKCl7cmV0dXJuIG49WmUoKSx0PURHKCksblsxOV0ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBDNyhuLHQsZSl7bGV0IGk9bmV3IGNsKDQ9PSg0JmUpKTtxNihuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10WzE5XSYmKHRbMTldPW5ldyBfYiksdFsxOV0ucXVlcmllcy5wdXNoKG5ldyBnYihpKSl9ZnVuY3Rpb24gdzcobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IHZiKSxuLnF1ZXJpZXMudHJhY2sobmV3IHliKHQsZSkpfWZ1bmN0aW9uIE03KG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIGVuKG4sdCl7cmV0dXJuIEtFKG4sdCl9dmFyICRkPXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjp6ZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBsVyhuLHQsZSxpLHIsbyl7bGV0IHM9WmUoKSxhPVhnKHMsdCxlLGkpO3JldHVybiBhIT09R24mJlFjKHFyKCkscyxuLGEscixvKSxsV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gY1cobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9UWcobCx0LGUsaSxyLG8pO3JldHVybiBjIT09R24mJlFjKHFyKCksbCxuLGMscyxhKSxjV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdVcobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9WmUoKSxkPUtnKHUsdCxlLGkscixvLHMsYSk7cmV0dXJuIGQhPT1HbiYmUWMocXIoKSx1LG4sZCxsLGMpLHVXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBkVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9WmUoKSxoPVpnKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBoIT09R24mJlFjKHFyKCkscCxuLGgsdSxkKSxkV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gcFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXtsZXQgZj1aZSgpLG09SmcoZix0LGUsaSxyLG8scyxhLGwsYyx1LGQpO3JldHVybiBtIT09R24mJlFjKHFyKCksZixuLG0scCxoKSxwV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gaFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9WmUoKSxfPSRnKEMsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCk7cmV0dXJuIF8hPT1HbiYmUWMocXIoKSxDLG4sXyxmLG0pLGhXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBmVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyl7bGV0IHk9WmUoKSxJPWUwKHksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0pO3JldHVybiBJIT09R24mJlFjKHFyKCkseSxuLEksQyxfKSxmV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gbVcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSxJKXtsZXQgQT1aZSgpLE89dDAoQSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pO3JldHVybiBPIT09R24mJlFjKHFyKCksQSxuLE8seSxJKSxtV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gZ1cobix0LGUsaSl7bGV0IHI9WmUoKSxvPVlnKHIsdCk7cmV0dXJuIG8hPT1HbiYmUWMocXIoKSxyLG4sbyxlLGkpLGdXfSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjprLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOk9lLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjpnZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjp6LCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpCZywiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0Ijp3LCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpoaSwiXHUwMjc1XHUwMjc1aW5qZWN0IjpSLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOktvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6SmwsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRywiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOmVuLCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOm9lLCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOnp0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjokdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PWFXKG4udHlwZSk7ZT1RbChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiAkZmUpaVtyXT1lW3JdO2lmKFFsKGUpKWZvcihsZXQgciBvZiBlbWUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjp0dCwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOmZ1bmN0aW9uKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KEdnZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9LCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6TSwiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6U2EsIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ibWF0aCJ9LCJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciOmpuLCJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtZbi5iaW5kaW5nc0VuYWJsZWQ9ITB9LCJcdTAyNzVcdTAyNzVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uKCl7WW4uYmluZGluZ3NFbmFibGVkPSExfSwiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0IjpnLCJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIjp2LCJcdTAyNzVcdTAyNzVlbGVtZW50IjpOLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiOkt0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIjpadCwiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lciI6QWksIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiOmxwLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIjpIbiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMiI6dG8sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiOmtiLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240IjptTiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNSI6Z04sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1FcygpK24sdT1aZSgpLGQ9bGwodSxjLGUsaSxyLG8pO3JldHVybiBlZih1LGMrNCxzLGEpfHxkP0tjKHUsYys2LGw/dC5jYWxsKGwsZSxpLHIsbyxzLGEpOnQoZSxpLHIsbyxzLGEpKTpJYih1LGMrNil9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjKXtsZXQgdT1FcygpK24sZD1aZSgpLHA9bGwoZCx1LGUsaSxyLG8pO3JldHVybiBqRShkLHUrNCxzLGEsbCl8fHA/S2MoZCx1KzcsYz90LmNhbGwoYyxlLGkscixvLHMsYSxsKTp0KGUsaSxyLG8scyxhLGwpKTpJYihkLHUrNyl9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPUVzKCkrbixwPVplKCksaD1sbChwLGQsZSxpLHIsbyk7cmV0dXJuIGxsKHAsZCs0LHMsYSxsLGMpfHxoP0tjKHAsZCs4LHU/dC5jYWxsKHUsZSxpLHIsbyxzLGEsbCxjKTp0KGUsaSxyLG8scyxhLGwsYykpOkliKHAsZCs4KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiOmZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiB2NyhaZSgpLEVzKCksbix0LGUsaSl9LCJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyI6SWUsIlx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3IjpyZSwiXHUwMjc1XHUwMjc1bGlzdGVuZXIiOlAsIlx1MDI3NVx1MDI3NXByb2plY3Rpb24iOk5uLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiOnIwLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOmkwLCJcdTAyNzVcdTAyNzVwaXBlQmluZDEiOlcsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMiI6bmYsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMyI6X04sIlx1MDI3NVx1MDI3NXBpcGVCaW5kNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW4rMjIsYT1aZSgpLGw9SGcoYSxzKTtyZXR1cm4gTmIoYSxzKT9fNyhhLEVzKCksdCxsLnRyYW5zZm9ybSxlLGkscixvLGwpOmwudHJhbnNmb3JtKGUsaSxyLG8pfSwiXHUwMjc1XHUwMjc1cGlwZUJpbmRWIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bisyMixyPVplKCksbz1IZyhyLGkpO3JldHVybiBOYihyLGkpP3Y3KHIsRXMoKSx0LG8udHJhbnNmb3JtLGUsbyk6by50cmFuc2Zvcm0uYXBwbHkobyxlKX0sIlx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiOndpLCJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiOkFhLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eSI6YiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSI6eHIsIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIjpQYiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTIiOkdFLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdlcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1LZyhjLHQsZSxpLHIsbyxzLGEpO3JldHVybiB1IT09R24mJkRhKERpKCkscXIoKSxjLG4sdSxjWzExXSxsLCExKSx2V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB5VyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1aZyhkLHQsZSxpLHIsbyxzLGEsbCxjKTtyZXR1cm4gcCE9PUduJiZEYShEaSgpLHFyKCksZCxuLHAsZFsxMV0sdSwhMSkseVd9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gYlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPUpnKGgsdCxlLGkscixvLHMsYSxsLGMsdSxkKTtyZXR1cm4gZiE9PUduJiZEYShEaSgpLHFyKCksaCxuLGYsaFsxMV0scCwhMSksYld9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24geFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz0kZyhtLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpO3JldHVybiBDIT09R24mJkRhKERpKCkscXIoKSxtLG4sQyxtWzExXSxmLCExKSx4V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBDVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT1lMChfLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKTtyZXR1cm4geSE9PUduJiZEYShEaSgpLHFyKCksXyxuLHksX1sxMV0sQywhMSksQ1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gd1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSl7bGV0IEk9WmUoKSxBPXQwKEksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKTtyZXR1cm4gQSE9PUduJiZEYShEaSgpLHFyKCksSSxuLEEsSVsxMV0seSwhMSksd1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24gTVcobix0LGUpe2xldCBpPVplKCkscj1ZZyhpLHQpO3JldHVybiByIT09R24mJkRhKERpKCkscXIoKSxpLG4scixpWzExXSxlLCExKSxNV30sIlx1MDI3NVx1MDI3NXBpcGUiOmosIlx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCI6TmUsIlx1MDI3NVx1MDI3NXZpZXdRdWVyeSI6bHQsIlx1MDI3NVx1MDI3NWxvYWRRdWVyeSI6TGUsIlx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSI6TmksIlx1MDI3NVx1MDI3NXJlZmVyZW5jZSI6c3QsIlx1MDI3NVx1MDI3NWNsYXNzTWFwIjplYSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiOlJiLCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtlYyhFYSxaYyxRZyhaZSgpLG4sdCxlLGksciksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe2VjKEVhLFpjLEtnKFplKCksbix0LGUsaSxyLG8scyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtlYyhFYSxaYyxaZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1KXtlYyhFYSxaYyxKZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe2VjKEVhLFpjLCRnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKXtlYyhFYSxaYyxlMChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtlYyhFYSxaYyx0MChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe2VjKEVhLFpjLFlnKFplKCksbiksITApfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXAiOnBsLCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24obix0LGUpe3BsKFhnKFplKCksbix0LGUpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbihuLHQsZSxpLHIpe3BsKFFnKFplKCksbix0LGUsaSxyKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7cGwoS2coWmUoKSxuLHQsZSxpLHIsbyxzKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe3BsKFpnKFplKCksbix0LGUsaSxyLG8scyxhLGwpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe3BsKEpnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cGwoJGcoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3BsKGUwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe3BsKHQwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViI6ZnVuY3Rpb24obil7cGwoWWcoWmUoKSxuKSl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3AiOk90LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIEhXKG4sdCxlLGkscil7cmV0dXJuICRsKG4sWGcoWmUoKSx0LGUsaSksciwhMSksSFd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIFVXKG4sdCxlLGkscixvLHMpe3JldHVybiAkbChuLFFnKFplKCksdCxlLGkscixvKSxzLCExKSxVV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gelcobix0LGUsaSxyLG8scyxhLGwpe3JldHVybiAkbChuLEtnKFplKCksdCxlLGkscixvLHMsYSksbCwhMSkseld9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGpXKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7cmV0dXJuICRsKG4sWmcoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyksdSwhMSksald9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIEdXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3JldHVybiAkbChuLEpnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkKSxwLCExKSxHV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gV1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3JldHVybiAkbChuLCRnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCksZiwhMSksV1d9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHFXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyl7cmV0dXJuICRsKG4sZTAoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSksQywhMSkscVd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIFlXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfLHkpe3JldHVybiAkbChuLHQwKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKSx5LCExKSxZV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gWFcobix0LGUpe3JldHVybiAkbChuLFlnKFplKCksdCksZSwhMSksWFd9LCJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiOmF0LCJcdTAyNzVcdTAyNzVhZHZhbmNlIjp4LCJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSI6RSwiXHUwMjc1XHUwMjc1dGV4dCI6RCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlIjp5dCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSI6cWUsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiOmFwLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUzIjpXRSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCI6ZnVuY3Rpb24ga1cobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1aZyhjLG4sdCxlLGkscixvLHMsYSxsKTtyZXR1cm4gdSE9PUduJiZuZChjLFRzKCksdSksa1d9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBGVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1KZyhkLG4sdCxlLGkscixvLHMsYSxsLGMsdSk7cmV0dXJuIHAhPT1HbiYmbmQoZCxUcygpLHApLEZXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gTlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPSRnKGgsbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCk7cmV0dXJuIGYhPT1HbiYmbmQoaCxUcygpLGYpLE5XfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyI6ZnVuY3Rpb24gTFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz1lMChtLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKTtyZXR1cm4gQyE9PUduJiZuZChtLFRzKCksQyksTFd9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBCVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT10MChfLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyk7cmV0dXJuIHkhPT1HbiYmbmQoXyxUcygpLHkpLEJXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gVlcobil7bGV0IHQ9WmUoKSxlPVlnKHQsbik7cmV0dXJuIGUhPT1HbiYmbmQodCxUcygpLGUpLFZXfSwiXHUwMjc1XHUwMjc1aTE4biI6WUUsIlx1MDI3NVx1MDI3NWkxOG5BdHRyaWJ1dGVzIjpmdW5jdGlvbihuLHQpe2xldCBlPURpKCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1NbygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKHBnZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTtyYihvLGwscixhLHhnZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rMjIsZXAoZS5jb25zdHMsdCkpfSwiXHUwMjc1XHUwMjc1aTE4bkV4cCI6T2IsIlx1MDI3NVx1MDI3NWkxOG5TdGFydCI6ZDcsIlx1MDI3NVx1MDI3NWkxOG5FbmQiOnA3LCJcdTAyNzVcdTAyNzVpMThuQXBwbHkiOlhFLCJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiOlFFLCJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93IjpmdW5jdGlvbihuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSwiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50IjpGRSwiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuYm9keX0sIlx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIjpiYiwiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSI6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGYoKCk9PntsZXQgZT1JZyhuLCEwKTtlLmRlY2xhcmF0aW9ucz10LmRlY2xhcmF0aW9uc3x8V2ksZS5pbXBvcnRzPXQuaW1wb3J0c3x8V2ksZS5leHBvcnRzPXQuZXhwb3J0c3x8V2l9KX0sIlx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIjpaRywiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIjpYRiwiXHUwMjc1XHUwMjc1c2FuaXRpemVTdHlsZSI6ZnVuY3Rpb24obil7bGV0IHQ9RGIoKTtyZXR1cm4gdD90LnNhbml0aXplKEpyLlNUWUxFLG4pfHwiIjpabChuLCJTdHlsZSIpPyRzKG4pOnFuKG4pfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCI6ZDYsIlx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0IjpmdW5jdGlvbihuKXtsZXQgdD1EYigpO2lmKHQpcmV0dXJuIERqKHQuc2FuaXRpemUoSnIuU0NSSVBULG4pfHwiIik7aWYoWmwobiwiU2NyaXB0IikpcmV0dXJuIERqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA1LCExKX0sIlx1MDI3NVx1MDI3NXNhbml0aXplVXJsIjpkbCwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuInNyYyI9PT10JiYoImVtYmVkIj09PW58fCJmcmFtZSI9PT1ufHwiaWZyYW1lIj09PW58fCJtZWRpYSI9PT1ufHwic2NyaXB0Ij09PW4pfHwiaHJlZiI9PT10JiYoImJhc2UiPT09bnx8ImxpbmsiPT09bik/ZDY6ZGx9KHQsZSkobil9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCI6ZnVuY3Rpb24obil7cmV0dXJuIE9nKG5bMF0pfSwiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsIjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGU2KCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn0oblswXSl9LGZvcndhcmRSZWY6cmkscmVzb2x2ZUZvcndhcmRSZWY6cWl9O2Z1bmN0aW9uIFM3KG4pe3JldHVybiEhSWcobil9dmFyICRTPVtdLF9rPSExO2Z1bmN0aW9uIEU3KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZXZlcnkoRTcpOiEhcWkobil9ZnVuY3Rpb24gYjBlKG4sdCl7bGV0IGU9WHUodC5kZWNsYXJhdGlvbnN8fFdpKSxpPUxnKG4pO2UuZm9yRWFjaChyPT57KHI9cWkocikpLmhhc093blByb3BlcnR5KFRFKT9UNyhvbChyKSxpKTohci5oYXNPd25Qcm9wZXJ0eShURikmJiFyLmhhc093blByb3BlcnR5KERGKSYmKHIubmdTZWxlY3RvclNjb3BlPW4pfSl9ZnVuY3Rpb24gVDcobix0KXtuLmRpcmVjdGl2ZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5kaXJlY3RpdmVzKS5tYXAoZT0+ZS5oYXNPd25Qcm9wZXJ0eShURSk/b2woZSk6WGgoZSkpLmZpbHRlcihlPT4hIWUpLG4ucGlwZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5waXBlcykubWFwKGU9Pkt1KGUpKSxuLnNjaGVtYXM9dC5zY2hlbWFzLG4udFZpZXc9bnVsbH1mdW5jdGlvbiBMZyhuKXtpZihTNyhuKSlyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9SWcobiwhMCk7aWYobnVsbCE9PXQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMpcmV0dXJuIHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM7bGV0IGU9e3NjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fX07cmV0dXJuIEtTKHQuaW1wb3J0cykuZm9yRWFjaChpPT57bGV0IHI9TGcoaSk7ci5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChvKSksci5leHBvcnRlZC5waXBlcy5mb3JFYWNoKG89PmUuY29tcGlsYXRpb24ucGlwZXMuYWRkKG8pKX0pLEtTKHQuZGVjbGFyYXRpb25zKS5mb3JFYWNoKGk9PntLdShpKT9lLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpKTplLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGkpfSksS1ModC5leHBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1pO2lmKFM3KHIpKXtsZXQgbz1MZyhyKTtvLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChzPT57ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChzKSxlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHMpfSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChzKSxlLmV4cG9ydGVkLnBpcGVzLmFkZChzKX0pfWVsc2UgS3Uocik/ZS5leHBvcnRlZC5waXBlcy5hZGQocik6ZS5leHBvcnRlZC5kaXJlY3RpdmVzLmFkZChyKX0pLHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9ZSxlfShuKTtpZihmRyhuKSl7aWYobnVsbCE9PShvbChuKXx8WGgobikpKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0KFtuXSkscGlwZXM6bmV3IFNldH19O2lmKG51bGwhPT1LdShuKSlyZXR1cm57c2NoZW1hczpudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0KFtuXSl9fX10aHJvdyBuZXcgRXJyb3IoYCR7bi5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoXHUwMjc1bW9kIHByb3BlcnR5KWApfWZ1bmN0aW9uICRqKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ01vZHVsZX0obik/bi5uZ01vZHVsZTpufXZhciB2az0wO2Z1bmN0aW9uIEQ3KG4sdCl7bGV0IGU9bnVsbDtJNyhuLHR8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixURix7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCBpPUE3KG4sdHx8e30pO2U9c2woKS5jb21waWxlRGlyZWN0aXZlKCRkLGkuc291cmNlTWFwVXJsLGkubWV0YWRhdGEpfXJldHVybiBlfSxjb25maWd1cmFibGU6ITF9KX1mdW5jdGlvbiBBNyhuLHQpe2xldCBlPW4mJm4ubmFtZSxpPWBuZzovLy8ke2V9L1x1MDI3NWRpci5qc2Ascj1zbCgpLG89UDcobix0KTtyZXR1cm4gby50eXBlU291cmNlU3Bhbj1yLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixlLGkpLG8udXNlc0luaGVyaXRhbmNlJiZSNyhuKSx7bWV0YWRhdGE6byxzb3VyY2VNYXBVcmw6aX19ZnVuY3Rpb24gSTcobix0KXtsZXQgZT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFF1LHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9QTcobix0KSxyPXNsKCk7ZT1yLmNvbXBpbGVGYWN0b3J5KCRkLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTppLm1ldGFkYXRhLm5hbWUsdHlwZTppLm1ldGFkYXRhLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOlJFKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIFMwZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gUDcobix0KXtsZXQgZT1HRigpLGk9ZS5vd25Qcm9wTWV0YWRhdGEobik7cmV0dXJue25hbWU6bi5uYW1lLHR5cGU6bixzZWxlY3Rvcjp2b2lkIDAhPT10LnNlbGVjdG9yP3Quc2VsZWN0b3I6bnVsbCxob3N0OnQuaG9zdHx8QWcscHJvcE1ldGFkYXRhOmksaW5wdXRzOnQuaW5wdXRzfHxXaSxvdXRwdXRzOnQub3V0cHV0c3x8V2kscXVlcmllczplRyhuLGksTzcpLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczplLmhhc0xpZmVjeWNsZUhvb2sobiwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IVMwZShuKSxleHBvcnRBczpEMGUodC5leHBvcnRBcykscHJvdmlkZXJzOnQucHJvdmlkZXJzfHxudWxsLHZpZXdRdWVyaWVzOmVHKG4saSxrNyksaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX1mdW5jdGlvbiBSNyhuKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2UmJmUhPT10OykhWGgoZSkmJiFvbChlKSYmSTBlKGUpJiZENyhlLG51bGwpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfWZ1bmN0aW9uIEUwZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/Tjcobik6cWkobil9ZnVuY3Rpb24gVDBlKG4sdCl7cmV0dXJue3Byb3BlcnR5TmFtZTpuLHByZWRpY2F0ZTpFMGUodC5zZWxlY3RvciksZGVzY2VuZGFudHM6dC5kZXNjZW5kYW50cyxmaXJzdDp0LmZpcnN0LHJlYWQ6dC5yZWFkP3QucmVhZDpudWxsLHN0YXRpYzohIXQuc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEhdC5lbWl0RGlzdGluY3RDaGFuZ2VzT25seX19ZnVuY3Rpb24gZUcobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07by5mb3JFYWNoKHM9PntpZihlKHMpKXtpZighcy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7cn0iIG9mICIke01GKG4pfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKG8uc29tZShGNykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtpLnB1c2goVDBlKHIscykpfX0pfXJldHVybiBpfWZ1bmN0aW9uIEQwZShuKXtyZXR1cm4gdm9pZCAwPT09bj9udWxsOk43KG4pfWZ1bmN0aW9uIE83KG4pe2xldCB0PW4ubmdNZXRhZGF0YU5hbWU7cmV0dXJuIkNvbnRlbnRDaGlsZCI9PT10fHwiQ29udGVudENoaWxkcmVuIj09PXR9ZnVuY3Rpb24gazcobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iVmlld0NoaWxkIj09PXR8fCJWaWV3Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiBGNyhuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBONyhuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSl9dmFyIEEwZT1bIm5nT25DaGFuZ2VzIiwibmdPbkluaXQiLCJuZ09uRGVzdHJveSIsIm5nRG9DaGVjayIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCJdO2Z1bmN0aW9uIEkwZShuKXtsZXQgdD1HRigpO2lmKEEwZS5zb21lKGk9PnQuaGFzTGlmZWN5Y2xlSG9vayhuLGkpKSlyZXR1cm4hMDtsZXQgZT10LnByb3BNZXRhZGF0YShuKTtmb3IobGV0IGkgaW4gZSl7bGV0IHI9ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXSxhPXMubmdNZXRhZGF0YU5hbWU7aWYoRjcocyl8fE83KHMpfHxrNyhzKXx8Ik91dHB1dCI9PT1hfHwiSG9zdEJpbmRpbmciPT09YXx8Ikhvc3RMaXN0ZW5lciI9PT1hKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB0RyhuLHQpe3JldHVybnt0eXBlOm4sbmFtZTpuLm5hbWUscGlwZU5hbWU6dC5uYW1lLHB1cmU6dm9pZCAwPT09dC5wdXJlfHx0LnB1cmUsaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX12YXIgUjBlPXdiKCJEaXJlY3RpdmUiLChuPXt9KT0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5ENyhuLHQpKTtmdW5jdGlvbiB3RSguLi5uKXt9d2IoIkNvbXBvbmVudCIsKG49e30pPT4oe2NoYW5nZURldGVjdGlvbjpLeS5EZWZhdWx0LC4uLm59KSxSMGUsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGw7KGZ1bmN0aW9uKG4sdCl7S0codCkmJihwYi5zZXQobix0KSxRRy5hZGQobikpfSkobix0KSxJNyhuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFRFLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9c2woKTtpZihLRyh0KSl7bGV0IGM9W2BDb21wb25lbnQgJyR7bi5uYW1lfScgaXMgbm90IHJlc29sdmVkOmBdO3Rocm93IHQudGVtcGxhdGVVcmwmJmMucHVzaChgIC0gdGVtcGxhdGVVcmw6ICR7dC50ZW1wbGF0ZVVybH1gKSx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoJiZjLnB1c2goYCAtIHN0eWxlVXJsczogJHtKU09OLnN0cmluZ2lmeSh0LnN0eWxlVXJscyl9YCksYy5wdXNoKCJEaWQgeW91IHJ1biBhbmQgd2FpdCBmb3IgJ3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMoKSc/IiksbmV3IEVycm9yKGMuam9pbigiXG4iKSl9bGV0IHI9bnVsbCxvPXQucHJlc2VydmVXaGl0ZXNwYWNlczt2b2lkIDA9PT1vJiYobz1udWxsIT09ciYmdm9pZCAwIT09ci5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZyLnByZXNlcnZlV2hpdGVzcGFjZXMpO2xldCBzPXQuZW5jYXBzdWxhdGlvbjt2b2lkIDA9PT1zJiYocz1udWxsIT09ciYmdm9pZCAwIT09ci5kZWZhdWx0RW5jYXBzdWxhdGlvbj9yLmRlZmF1bHRFbmNhcHN1bGF0aW9uOndhLkVtdWxhdGVkKTtsZXQgYT10LnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHtuLm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9ey4uLlA3KG4sdCksdHlwZVNvdXJjZVNwYW46aS5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsbi5uYW1lLGEpLHRlbXBsYXRlOnQudGVtcGxhdGV8fCIiLHByZXNlcnZlV2hpdGVzcGFjZXM6byxzdHlsZXM6dC5zdHlsZXN8fFdpLGFuaW1hdGlvbnM6dC5hbmltYXRpb25zLGRlY2xhcmF0aW9uczpbXSxjaGFuZ2VEZXRlY3Rpb246dC5jaGFuZ2VEZXRlY3Rpb24sZW5jYXBzdWxhdGlvbjpzLGludGVycG9sYXRpb246dC5pbnRlcnBvbGF0aW9uLHZpZXdQcm92aWRlcnM6dC52aWV3UHJvdmlkZXJzfHxudWxsLGlzU3RhbmRhbG9uZTohIXQuc3RhbmRhbG9uZX07dmsrKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJlI3KG4pLGU9aS5jb21waWxlQ29tcG9uZW50KCRkLGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz1YdSh0LmltcG9ydHN8fFdpKSx7ZGlyZWN0aXZlRGVmczp1LHBpcGVEZWZzOmR9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bb2wobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IGQ9b2wodSl8fFhoKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGUucHVzaChkKSl9fWVsc2V7bGV0IGM9b2wobCl8fFhoKGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCBkPUt1KHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGkucHVzaChkKSl9fWVsc2V7bGV0IGM9S3UobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9dSxlLnBpcGVEZWZzPWQsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKHFpKX19ZmluYWxseXt2ay0tfWlmKDA9PT12ayYmZnVuY3Rpb24oKXtpZighX2spe19rPSEwO3RyeXtmb3IobGV0IG49JFMubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09JFNbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KEU3KSYmKCRTLnNwbGljZShuLDEpLGIwZSh0LGUpKX19ZmluYWxseXtfaz0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPUxnKG4ubmdTZWxlY3RvclNjb3BlKTtUNyhlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7TUYobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHdiKCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj10RyhuLHQpLG89c2woKTtpPW8uY29tcGlsZUZhY3RvcnkoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLERGLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9dEcobix0KTtlPXNsKCkuY29tcGlsZVBpcGUoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHNwKCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxzcCgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksd2IoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT1YdSh0LmRlY2xhcmF0aW9uc3x8V2kpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixwRyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1zbCgpLmNvbXBpbGVOZ01vZHVsZSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6WHUodC5ib290c3RyYXB8fFdpKS5tYXAocWkpLGRlY2xhcmF0aW9uczppLm1hcChxaSksaW1wb3J0czpYdSh0LmltcG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksZXhwb3J0czpYdSh0LmV4cG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksc2NoZW1hczp0LnNjaGVtYXM/WHUodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1zbCgpO289YS5jb21waWxlRmFjdG9yeSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOlJFKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHhrLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFdpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFdpKS5tYXAocWkpLCh0LmV4cG9ydHN8fFdpKS5tYXAocWkpXX07cz1zbCgpLmNvbXBpbGVJbmplY3RvcigkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZaRyhuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7JFMucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyIHZOPW5ldyBzZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxaRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9d0UsdGhpcy5yZWplY3Q9d0UsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYobjAobykpZS5wdXNoKG8pO2Vsc2UgaWYoZk4obykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2Tiw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscmY9bmV3IHNlKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHt5aygpfSR7eWsoKX0ke3lrKCl9YH19KTtmdW5jdGlvbiB5aygpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciB5Tj1uZXcgc2UoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksaWQ9bmV3IHNlKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxrMGU9bmV3IHNlKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLExpPShuZXcgc2UoIkFwcGxpY2F0aW9uIFBhY2thZ2VzIFJvb3QgVVJMIiksbmV3IHNlKCJBbmltYXRpb25Nb2R1bGVUeXBlIikpLHJkPW5ldyBzZSgiTG9jYWxlSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TbyhyZCxpaS5PcHRpb25hbHxpaS5Ta2lwU2VsZil8fHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxiRX0pLEIwZT0obmV3IHNlKCJEZWZhdWx0Q3VycmVuY3lDb2RlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlVTRCJ9KSxuZXcgc2UoIlRyYW5zbGF0aW9ucyIpLG5ldyBzZSgiVHJhbnNsYXRpb25zRm9ybWF0IiksbmV3IHNlKCJjb21waWxlck9wdGlvbnMiKSxQcm9taXNlLnJlc29sdmUoMCkpO2Z1bmN0aW9uIG1GKG4pe3R5cGVvZiBab25lPiJ1Ij9CMGUudGhlbigoKT0+e24mJm4uYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLG4pfXZhciBwdD1jbGFzc3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246aT0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBHKCExKSx0aGlzLm9uU3RhYmxlPW5ldyBHKCExKSx0aGlzLm9uRXJyb3I9bmV3IEcoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgTXQoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7bGV0IHI9dGhpcztpZihyLl9uZXN0aW5nPTAsci5fb3V0ZXI9ci5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuQXN5bmNTdGFja1RhZ2dpbmdab25lU3BlYyl7bGV0IG89Wm9uZS5Bc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjO3IuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IG8oIkFuZ3VsYXIiKSl9Wm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSx0JiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHIuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haSYmZSxyLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWksci5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsci5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtsZXQgbj1Xci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD1Xci5jYW5jZWxBbmltYXRpb25GcmFtZTtpZih0eXBlb2YgWm9uZTwidSImJm4mJnQpe2xldCBlPW5bWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2UmJihuPWUpO2xldCBpPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2kmJih0PWkpfXJldHVybntuYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bixuYXRpdmVDYW5jZWxBbmltYXRpb25GcmFtZTp0fX0oKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZnVuY3Rpb24obil7bGV0IHQ9KCk9PnshZnVuY3Rpb24obil7bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KG4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPW4ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwoV3IsKCk9PntuLmZha2VUb3BFdmVudFRhc2t8fChuLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e24ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGdGKG4pLG4uaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsYk4obiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxuLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxnRihuKSl9KG4pfTtuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGUsaSxyLG8scyxhKT0+e3RyeXtyZXR1cm4gbkcobiksZS5pbnZva2VUYXNrKHIsbyxzLGEpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1vLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCksaUcobil9fSxvbkludm9rZTooZSxpLHIsbyxzLGEsbCk9Pnt0cnl7cmV0dXJuIG5HKG4pLGUuaW52b2tlKHIsbyxzLGEsbCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZ0KCksaUcobil9fSxvbkhhc1Rhc2s6KGUsaSxyLG8pPT57ZS5oYXNUYXNrKHIsbyksaT09PXImJigibWljcm9UYXNrIj09by5jaGFuZ2U/KG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPW8ubWljcm9UYXNrLGdGKG4pLGJOKG4pKToibWFjcm9UYXNrIj09by5jaGFuZ2UmJihuLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPW8ubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGUsaSxyLG8pPT4oZS5oYW5kbGVFcnJvcihyLG8pLG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ub25FcnJvci5lbWl0KG8pKSwhMSl9KX0ocil9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBNdCg5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYocHQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IE10KDkwOSwhMSl9cnVuKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxpKX1ydW5UYXNrKHQsZSxpLHIpe2xldCBvPXRoaXMuX2lubmVyLHM9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LEgwZSx3RSx3RSk7dHJ5e3JldHVybiBvLnJ1blRhc2socyxlLGkpfWZpbmFsbHl7by5jYW5jZWxUYXNrKHMpfX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19LEgwZT17fTtmdW5jdGlvbiBiTihuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBnRihuKXtuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gbkcobil7bi5fbmVzdGluZysrLG4uaXNTdGFibGUmJihuLmlzU3RhYmxlPSExLG4ub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBpRyhuKXtuLl9uZXN0aW5nLS0sYk4obil9dmFyIENOLHhOPW5ldyBzZSgiIiksTGI9bmV3IHNlKCIiKSxKRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLENOfHwoZnVuY3Rpb24obil7Q049bn0ociksci5hZGRUb1dpbmRvdyhpKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntwdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksbUYoKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSltRigoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSk7ZWxzZXtsZXQgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGk9PiFpLnVwZGF0ZUNifHwhaS51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dChpLnRpbWVvdXRJZCksITEpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChlPT4oe3NvdXJjZTplLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmUuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmUuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhlLGkscil7bGV0IG89LTE7aSYmaT4wJiYobz1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIocz0+cy50aW1lb3V0SWQhPT1vKSxlKHRoaXMuX2RpZFdvcmssdGhpcy5nZXRQZW5kaW5nVGFza3MoKSl9LGkpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmUsdGltZW91dElkOm8sdXBkYXRlQ2I6cn0pfXdoZW5TdGFibGUoZSxpLHIpe2lmKHImJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soZSxpLHIpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihlLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKX1maW5kUHJvdmlkZXJzKGUsaSxyKXtyZXR1cm5bXX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihwdCksUigkRSksUihMYikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLCRFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGUsaSl7dGhpcy5fYXBwbGljYXRpb25zLnNldChlLGkpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGUpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShlKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxpPSEwKXtyZXR1cm4gQ04/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGUsaSk/P251bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKSxvYj1udWxsLEw3PW5ldyBzZSgiQWxsb3dNdWx0aXBsZVRva2VuIiksQjc9bmV3IHNlKCJQbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMiKTtmdW5jdGlvbiB3TihuLHQsZT1bXSl7bGV0IGk9YFBsYXRmb3JtOiAke3R9YCxyPW5ldyBzZShpKTtyZXR1cm4obz1bXSk9PntsZXQgcz1WNygpO2lmKCFzfHxzLmluamVjdG9yLmdldChMNywhMSkpe2xldCBhPVsuLi5lLC4uLm8se3Byb3ZpZGU6cix1c2VWYWx1ZTohMH1dO24/bihhKTpmdW5jdGlvbihuKXtpZihvYiYmIW9iLmdldChMNywhMSkpdGhyb3cgbmV3IE10KDQwMCwhMSk7b2I9bjtsZXQgdD1uLmdldChINyk7KGZ1bmN0aW9uKG4pe2xldCB0PW4uZ2V0KHlOLG51bGwpO3QmJnQuZm9yRWFjaChlPT5lKCkpfSkobil9KGZ1bmN0aW9uKG49W10sdCl7cmV0dXJuIHpuLmNyZWF0ZSh7bmFtZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6a0UsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6QjcsdXNlVmFsdWU6bmV3IFNldChbKCk9Pm9iPW51bGxdKX0sLi4ubl19KX0oYSxpKSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PVY3KCk7aWYoIXQpdGhyb3cgbmV3IE10KDQwMSwhMSk7cmV0dXJuIHR9KCl9fWZ1bmN0aW9uIFY3KCl7cmV0dXJuIG9iPy5nZXQoSDcpPz9udWxsfXZhciBINz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2luamVjdG9yPWUsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZTtyZXR1cm4gZT0ibm9vcCI9PT1uP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEcsdGhpcy5vblN0YWJsZT1uZXcgRyx0aGlzLm9uRXJyb3I9bmV3IEd9cnVuKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0LmFwcGx5KGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHQoKX1ydW5UYXNrKHQsZSxpLHIpe3JldHVybiB0LmFwcGx5KGUsaSl9fTooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBwdCh0KSxlfShpPy5uZ1pvbmUsZnVuY3Rpb24obil7cmV0dXJue2VuYWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lRXZlbnRDb2FsZXNjaW5nKXx8ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lUnVuQ29hbGVzY2luZyl8fCExfX0oaSkpLG89W3twcm92aWRlOnB0LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oKCk9PntsZXQgcz16bi5jcmVhdGUoe3Byb3ZpZGVyczpvLHBhcmVudDp0aGlzLmluamVjdG9yLG5hbWU6ZS5tb2R1bGVUeXBlLm5hbWV9KSxhPWUuY3JlYXRlKHMpLGw9YS5pbmplY3Rvci5nZXQoU3MsbnVsbCk7aWYoIWwpdGhyb3cgbmV3IE10KDQwMiwhMSk7cmV0dXJuIHIucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgYz1yLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OnU9PntsLmhhbmRsZUVycm9yKHUpfX0pO2Eub25EZXN0cm95KCgpPT57ZUUodGhpcy5fbW9kdWxlcyxhKSxjLnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uKG4sdCxlKXt0cnl7bGV0IGk9ZSgpO3JldHVybiBuMChpKT9pLmNhdGNoKHI9Pnt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKHIpKSxyfSk6aX1jYXRjaChpKXt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKGkpKSxpfX0obCxyLCgpPT57bGV0IGM9YS5pbmplY3Rvci5nZXQoWkUpO3JldHVybiBjLnJ1bkluaXRpYWxpemVycygpLGMuZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uKG4peyhmdW5jdGlvbihuLHQpe251bGw9PW4mJmNHKCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIixuLG51bGwsIiE9Iil9KShuKSwic3RyaW5nIj09dHlwZW9mIG4mJihKVz1uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfShhLmluamVjdG9yLmdldChyZCxiRSl8fGJFKSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChhKSxhKSl9KX0pfWJvb3RzdHJhcE1vZHVsZShlLGk9W10pe2xldCByPVU3KHt9LGkpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IGRGKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9KDAsMCxlKS50aGVuKG89PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShvLHIpKX1fbW9kdWxlRG9Cb290c3RyYXAoZSl7bGV0IGk9ZS5pbmplY3Rvci5nZXQoSmMpO2lmKGUuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApZS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKHI9PmkuYm9vdHN0cmFwKHIpKTtlbHNle2lmKCFlLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IE10KDQwMywhMSk7ZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGkpfXRoaXMuX21vZHVsZXMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBNdCg0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goaT0+aSgpKTtsZXQgZT10aGlzLl9pbmplY3Rvci5nZXQoQjcsbnVsbCk7ZSYmKGUuZm9yRWFjaChpPT5pKCkpLGUuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHpuKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIFU3KG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2UoVTcsbik6ey4uLm4sLi4udH19dmFyIEpjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgUXQoYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgUXQoYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57cHQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLG1GKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntwdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9dW4obyxzLnBpcGUoWHMoKSkpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoZSxpKXtsZXQgcyxyPWUgaW5zdGFuY2VvZiBnRTtpZighdGhpcy5faW5qZWN0b3IuZ2V0KFpFKS5kb25lKXRocm93IXImJmZHKGUpLG5ldyBNdCg0MDUsZmFsc2UpO3M9cj9lOnRoaXMuX2luamVjdG9yLmdldChFbykucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHMuY29tcG9uZW50VHlwZSk7bGV0IGE9ZnVuY3Rpb24obil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfShzKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KGlwKSxjPXMuY3JlYXRlKHpuLk5VTEwsW10saXx8cy5zZWxlY3RvcixhKSx1PWMubG9jYXRpb24ubmF0aXZlRWxlbWVudCxkPWMuaW5qZWN0b3IuZ2V0KHhOLG51bGwpO3JldHVybiBkPy5yZWdpc3RlckFwcGxpY2F0aW9uKHUpLGMub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KGMuaG9zdFZpZXcpLGVFKHRoaXMuY29tcG9uZW50cyxjKSxkPy51bnJlZ2lzdGVyQXBwbGljYXRpb24odSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KGMpLGN9dGljaygpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBNdCgxMDEsITEpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IGUgb2YgdGhpcy5fdmlld3MpZS5kZXRlY3RDaGFuZ2VzKCl9Y2F0Y2goZSl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcihlKSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMX19YXR0YWNoVmlldyhlKXtsZXQgaT1lO3RoaXMuX3ZpZXdzLnB1c2goaSksaS5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGUpe2xldCBpPWU7ZUUodGhpcy5fdmlld3MsaSksaS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoZSl7dGhpcy5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGUpLHRoaXMuX2luamVjdG9yLmdldChrMGUsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2gocj0+cihlKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZT0+ZSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGUpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSksKCk9PmVFKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsZSl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgTXQoNDA2LCExKTtsZXQgZT10aGlzLl9pbmplY3RvcjtlLmRlc3Ryb3kmJiFlLmRlc3Ryb3llZCYmZS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKG5wKSxSKFNzKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gZUUobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX12YXIgejc9ITAsajc9ITE7ZnVuY3Rpb24gQmIoKXtyZXR1cm4gajc9ITAsejd9dmFyIG5uPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPWVfZSxufSkoKTtmdW5jdGlvbiBlX2Uobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihSRihuKSYmIWUpe2xldCBpPW9wKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyAkaChpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3ICRoKHRbMTZdLHQpOm51bGx9KE1vKCksWmUoKSwxNj09KDE2Jm4pKX12YXIgTUU9Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHpFKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IHZGKHQpfX0sbl9lPShuLHQpPT50LHZGPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxuX2V9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PG9HKGkscixvKT9lOmksYT1vRyhzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcix1PWwtcjtpZihjIT11KXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgaD1wPG8ubGVuZ3RoP29bcF06b1twXT0wLGY9aCtwO3U8PWYmJmY8YyYmKG9bcF09aCsxKX1vW3MucHJldmlvdXNJbmRleF09dS1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIXpFKHQpKXRocm93IG5ldyBNdCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW1VFKCldKCk7Zm9yKDshKGk9ZS5uZXh0KCkpLmRvbmU7KXQoaS52YWx1ZSl9fSh0LGE9PntzPXRoaXMuX3RyYWNrQnlGbihyLGEpLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQscyk/KGkmJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUsYSxzLHIpKSxPYmplY3QuaXMoZS5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLGEpKTooZT10aGlzLl9taXNtYXRjaChlLGEscyxyKSxpPSEwKSxlPWUuX25leHQscisrfSksdGhpcy5sZW5ndGg9cjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLGkscil7bGV0IG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaSxudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGkscikpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IHlGKGUsaSksbyxyKSx0fV92ZXJpZnlSZWluc2VydGlvbih0LGUsaSxyKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpO3JldHVybiBudWxsIT09bz90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9X3RydW5jYXRlKHQpe2Zvcig7bnVsbCE9PXQ7KXtsZXQgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLGkpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7bGV0IHI9dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fbW92ZUFmdGVyKHQsZSxpKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fYWRkQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsaSksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH1faW5zZXJ0QWZ0ZXIodCxlLGkpe2xldCByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9aSx0fV9yZW1vdmUodCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX1fdW5saW5rKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgZT10Ll9wcmV2LGk9dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPWk6ZS5fbmV4dD1pLG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19LHlGPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fSxTRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2xldCBlPXQudHJhY2tCeUlkLGk9dGhpcy5tYXAuZ2V0KGUpO2l8fChpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX1nZXQodCxlKXtsZXQgaTtmb3IoaT10aGlzLl9oZWFkO251bGwhPT1pO2k9aS5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PWkuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGkudHJhY2tCeUlkLHQpKXJldHVybiBpO3JldHVybiBudWxsfXJlbW92ZSh0KXtsZXQgZT10Ll9wcmV2RHVwLGk9dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1pOmUuX25leHREdXA9aSxudWxsPT09aT90aGlzLl90YWlsPWU6aS5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX0sdGhpcy5tYXAuc2V0KGUsaSkpLGkuYWRkKHQpfWdldCh0LGUpe2xldCByPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2xldCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fTtmdW5jdGlvbiBvRyhuLHQsZSl7bGV0IGk9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1pKXJldHVybiBpO2xldCByPTA7cmV0dXJuIGUmJmk8ZS5sZW5ndGgmJihyPWVbaV0pLGkrdCtyfXZhciBFRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8cE4odCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyB4Rn19LHhGPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fHBOKHQpKSl0aHJvdyBuZXcgTXQoOTAwLCExKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGU9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCwoaSxyKT0+e2lmKGUmJmUua2V5PT09cil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLGkpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7bGV0IG89dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocixpKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsbyl9fSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCBpPWU7bnVsbCE9PWk7aT1pLl9uZXh0UmVtb3ZlZClpPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoaS5rZXkpLGkuX25leHRSZW1vdmVkPWkuX25leHQsaS5wcmV2aW91c1ZhbHVlPWkuY3VycmVudFZhbHVlLGkuY3VycmVudFZhbHVlPW51bGwsaS5fcHJldj1udWxsLGkuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7bGV0IGk9dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9aSx0Ll9wcmV2PWUsaSYmKGkuX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkodCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7bGV0IHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMocixlKTtsZXQgbz1yLl9wcmV2LHM9ci5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9cykscyYmKHMuX3ByZXY9byksci5fbmV4dD1udWxsLHIuX3ByZXY9bnVsbCxyfWxldCBpPW5ldyBDRih0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxpKSxpLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKGkpLGl9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PmUodFtpXSxpKSl9fSxDRj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fTtmdW5jdGlvbiBzRygpe3JldHVybiBuZXcgdGMoW25ldyBNRV0pfXZhciB0Yz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKG51bGwhPWkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxzRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihudWxsIT1pKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6c0d9KSxufSkoKTtmdW5jdGlvbiBhRygpe3JldHVybiBuZXcgVmIoW25ldyBFRV0pfXZhciBWYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKGkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxhRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihpKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6YUd9KSxufSkoKSxpX2U9W25ldyBFRV0scl9lPVtuZXcgTUVdLFc3PShuZXcgdGMocl9lKSxuZXcgVmIoaV9lKSx3TihudWxsLCJjb3JlIixbXSkpLHE3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEpjKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGUxKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn12YXIgZmw9KCgpPT57cmV0dXJuKG49Zmx8fChmbD17fSkpW24uUkFXX1RFWFQ9MF09IlJBV19URVhUIixuW24uRVNDQVBBQkxFX1JBV19URVhUPTFdPSJFU0NBUEFCTEVfUkFXX1RFWFQiLG5bbi5QQVJTQUJMRV9EQVRBPTJdPSJQQVJTQUJMRV9EQVRBIixmbDt2YXIgbn0pKCk7ZnVuY3Rpb24gY2Qobil7aWYoIjoiIT1uWzBdKXJldHVybltudWxsLG5dO2xldCB0PW4uaW5kZXhPZigiOiIsMSk7aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0ICIke259IiBleHBlY3RpbmcgIjpuYW1lc3BhY2U6bmFtZSJgKTtyZXR1cm5bbi5zbGljZSgxLHQpLG4uc2xpY2UodCsxKV19ZnVuY3Rpb24gVU4obil7cmV0dXJuIm5nLWNvbnRhaW5lciI9PT1jZChuKVsxXX1mdW5jdGlvbiB6TihuKXtyZXR1cm4ibmctY29udGVudCI9PT1jZChuKVsxXX1mdW5jdGlvbiBZNyhuKXtyZXR1cm4gbnVsbD09PW4/bnVsbDpjZChuKVswXX1mdW5jdGlvbiBqTihuLHQpe3JldHVybiBuP2A6JHtufToke3R9YDp0fXZhciBYNyx0MSxRbj1jbGFzc3tjb25zdHJ1Y3Rvcih7Y2xvc2VkQnlDaGlsZHJlbjp0LGltcGxpY2l0TmFtZXNwYWNlUHJlZml4OmUsY29udGVudFR5cGU6aT1mbC5QQVJTQUJMRV9EQVRBLGNsb3NlZEJ5UGFyZW50OnI9ITEsaXNWb2lkOm89ITEsaWdub3JlRmlyc3RMZjpzPSExLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTphPSExfT17fSl7dGhpcy5jbG9zZWRCeUNoaWxkcmVuPXt9LHRoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITEsdCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGw9PnRoaXMuY2xvc2VkQnlDaGlsZHJlbltsXT0hMCksdGhpcy5pc1ZvaWQ9byx0aGlzLmNsb3NlZEJ5UGFyZW50PXJ8fG8sdGhpcy5pbXBsaWNpdE5hbWVzcGFjZVByZWZpeD1lfHxudWxsLHRoaXMuY29udGVudFR5cGU9aSx0aGlzLmlnbm9yZUZpcnN0TGY9cyx0aGlzLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZT1hfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4gdGhpcy5pc1ZvaWR8fHQudG9Mb3dlckNhc2UoKWluIHRoaXMuY2xvc2VkQnlDaGlsZHJlbn1nZXRDb250ZW50VHlwZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRoaXMuY29udGVudFR5cGU/KHZvaWQgMD09PXQ/dm9pZCAwOnRoaXMuY29udGVudFR5cGVbdF0pPz90aGlzLmNvbnRlbnRUeXBlLmRlZmF1bHQ6dGhpcy5jb250ZW50VHlwZX19O2Z1bmN0aW9uIGUzKG4pe3JldHVybiB0MXx8KFg3PW5ldyBRbix0MT17YmFzZTpuZXcgUW4oe2lzVm9pZDohMH0pLG1ldGE6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxhcmVhOm5ldyBRbih7aXNWb2lkOiEwfSksZW1iZWQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxsaW5rOm5ldyBRbih7aXNWb2lkOiEwfSksaW1nOm5ldyBRbih7aXNWb2lkOiEwfSksaW5wdXQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxwYXJhbTpuZXcgUW4oe2lzVm9pZDohMH0pLGhyOm5ldyBRbih7aXNWb2lkOiEwfSksYnI6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxzb3VyY2U6bmV3IFFuKHtpc1ZvaWQ6ITB9KSx0cmFjazpuZXcgUW4oe2lzVm9pZDohMH0pLHdicjpuZXcgUW4oe2lzVm9pZDohMH0pLHA6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJsb2NrcXVvdGUiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImhyIiwibWFpbiIsIm5hdiIsIm9sIiwicCIsInByZSIsInNlY3Rpb24iLCJ0YWJsZSIsInVsIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0aGVhZDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il19KSx0Ym9keTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0Zm9vdDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksdHI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsidHIiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRkOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRoOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLGNvbDpuZXcgUW4oe2lzVm9pZDohMH0pLHN2ZzpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmcifSksZm9yZWlnbk9iamVjdDpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmciLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTohMH0pLG1hdGg6bmV3IFFuKHtpbXBsaWNpdE5hbWVzcGFjZVByZWZpeDoibWF0aCJ9KSxsaTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJsaSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksZHQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdfSksZGQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdLGNsb3NlZEJ5UGFyZW50OiEwfSkscmI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsicmIiLCJydCIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxydDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHJ0YzpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxycDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLG9wdGdyb3VwOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbIm9wdGdyb3VwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxvcHRpb246bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsib3B0aW9uIiwib3B0Z3JvdXAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHByZTpuZXcgUW4oe2lnbm9yZUZpcnN0TGY6ITB9KSxsaXN0aW5nOm5ldyBRbih7aWdub3JlRmlyc3RMZjohMH0pLHN0eWxlOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuUkFXX1RFWFR9KSxzY3JpcHQ6bmV3IFFuKHtjb250ZW50VHlwZTpmbC5SQVdfVEVYVH0pLHRpdGxlOm5ldyBRbih7Y29udGVudFR5cGU6e2RlZmF1bHQ6ZmwuRVNDQVBBQkxFX1JBV19URVhULHN2ZzpmbC5QQVJTQUJMRV9EQVRBfX0pLHRleHRhcmVhOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuRVNDQVBBQkxFX1JBV19URVhULGlnbm9yZUZpcnN0TGY6ITB9KX0pLHQxW25dPz90MVtuLnRvTG93ZXJDYXNlKCldPz9YN312YXIgUTc9bmV3IFJlZ0V4cCgiKFxcOm5vdFxcKCl8KChbXFwuXFwjXT8pWy1cXHddKyl8KD86XFxbKFstLlxcdypcXFxcJF0rKSg/Oj0oW1wiJ10/KShbXlxcXVwiJ10qKVxcNSk/XFxdKXwoXFwpKXwoXFxzKixcXHMqKSIsImciKSx1ZD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudD1udWxsLHRoaXMuY2xhc3NOYW1lcz1bXSx0aGlzLmF0dHJzPVtdLHRoaXMubm90U2VsZWN0b3JzPVtdfXN0YXRpYyBwYXJzZSh0KXtsZXQgbyxlPVtdLGk9KGwsYyk9PntjLm5vdFNlbGVjdG9ycy5sZW5ndGg+MCYmIWMuZWxlbWVudCYmMD09Yy5jbGFzc05hbWVzLmxlbmd0aCYmMD09Yy5hdHRycy5sZW5ndGgmJihjLmVsZW1lbnQ9IioiKSxsLnB1c2goYyl9LHI9bmV3IHVkLHM9cixhPSExO2ZvcihRNy5sYXN0SW5kZXg9MDtvPVE3LmV4ZWModCk7KXtpZihvWzFdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTmVzdGluZyA6bm90IGluIGEgc2VsZWN0b3IgaXMgbm90IGFsbG93ZWQiKTthPSEwLHM9bmV3IHVkLHIubm90U2VsZWN0b3JzLnB1c2gocyl9bGV0IGw9b1syXTtpZihsKXtsZXQgdT1vWzNdOyIjIj09PXU/cy5hZGRBdHRyaWJ1dGUoImlkIixsLnNsaWNlKDEpKToiLiI9PT11P3MuYWRkQ2xhc3NOYW1lKGwuc2xpY2UoMSkpOnMuc2V0RWxlbWVudChsKX1sZXQgYz1vWzRdO2lmKGMmJnMuYWRkQXR0cmlidXRlKHMudW5lc2NhcGVBdHRyaWJ1dGUoYyksb1s2XSksb1s3XSYmKGE9ITEscz1yKSxvWzhdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgc2VsZWN0b3JzIGluIDpub3QgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpKGUscikscj1zPW5ldyB1ZH19cmV0dXJuIGkoZSxyKSxlfXVuZXNjYXBlQXR0cmlidXRlKHQpe2xldCBlPSIiLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBvPXQuY2hhckF0KHIpO2lmKCJcXCIhPT1vKXtpZigiJCI9PT1vJiYhaSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIGF0dHJpYnV0ZSBzZWxlY3RvciAiJHt0fSIuIFVuZXNjYXBlZCAiJCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGVzY2FwZSB3aXRoICJcXCQiLmApO2k9ITEsZSs9b31lbHNlIGk9ITB9cmV0dXJuIGV9ZXNjYXBlQXR0cmlidXRlKHQpe3JldHVybiB0LnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC9cJC9nLCJcXCQiKX1pc0VsZW1lbnRTZWxlY3Rvcigpe3JldHVybiB0aGlzLmhhc0VsZW1lbnRTZWxlY3RvcigpJiYwPT10aGlzLmNsYXNzTmFtZXMubGVuZ3RoJiYwPT10aGlzLmF0dHJzLmxlbmd0aCYmMD09PXRoaXMubm90U2VsZWN0b3JzLmxlbmd0aH1oYXNFbGVtZW50U2VsZWN0b3IoKXtyZXR1cm4hIXRoaXMuZWxlbWVudH1zZXRFbGVtZW50KHQ9bnVsbCl7dGhpcy5lbGVtZW50PXR9Z2V0TWF0Y2hpbmdFbGVtZW50VGVtcGxhdGUoKXtsZXQgdD10aGlzLmVsZW1lbnR8fCJkaXYiLGU9dGhpcy5jbGFzc05hbWVzLmxlbmd0aD4wP2AgY2xhc3M9IiR7dGhpcy5jbGFzc05hbWVzLmpvaW4oIiAiKX0iYDoiIixpPSIiO2ZvcihsZXQgcj0wO3I8dGhpcy5hdHRycy5sZW5ndGg7cis9MilpKz1gICR7dGhpcy5hdHRyc1tyXX0keyIiIT09dGhpcy5hdHRyc1tyKzFdP2A9IiR7dGhpcy5hdHRyc1tyKzFdfSJgOiIifWA7cmV0dXJuIGUzKHQpLmlzVm9pZD9gPCR7dH0ke2V9JHtpfS8+YDpgPCR7dH0ke2V9JHtpfT48LyR7dH0+YH1nZXRBdHRycygpe2xldCB0PVtdO3JldHVybiB0aGlzLmNsYXNzTmFtZXMubGVuZ3RoPjAmJnQucHVzaCgiY2xhc3MiLHRoaXMuY2xhc3NOYW1lcy5qb2luKCIgIikpLHQuY29uY2F0KHRoaXMuYXR0cnMpfWFkZEF0dHJpYnV0ZSh0LGU9IiIpe3RoaXMuYXR0cnMucHVzaCh0LGUmJmUudG9Mb3dlckNhc2UoKXx8IiIpfWFkZENsYXNzTmFtZSh0KXt0aGlzLmNsYXNzTmFtZXMucHVzaCh0LnRvTG93ZXJDYXNlKCkpfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5lbGVtZW50fHwiIjtpZih0aGlzLmNsYXNzTmFtZXMmJnRoaXMuY2xhc3NOYW1lcy5mb3JFYWNoKGU9PnQrPWAuJHtlfWApLHRoaXMuYXR0cnMpZm9yKGxldCBlPTA7ZTx0aGlzLmF0dHJzLmxlbmd0aDtlKz0yKXtsZXQgaT10aGlzLmVzY2FwZUF0dHJpYnV0ZSh0aGlzLmF0dHJzW2VdKSxyPXRoaXMuYXR0cnNbZSsxXTt0Kz1gWyR7aX0ke3I/Ij0iK3I6IiJ9XWB9cmV0dXJuIHRoaXMubm90U2VsZWN0b3JzLmZvckVhY2goZT0+dCs9YDpub3QoJHtlfSlgKSx0fX0sb2Q9KCgpPT57cmV0dXJuKG49b2R8fChvZD17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixvZDt2YXIgbn0pKCkscWI9KCgpPT57cmV0dXJuKG49cWJ8fChxYj17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixxYjt2YXIgbn0pKCksWXI9KCgpPT57cmV0dXJuKG49WXJ8fChZcj17fSkpW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJMIixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLFlyO3ZhciBufSkoKTtmdW5jdGlvbiBsX2Uobil7bGV0IHQ9ZnVuY3Rpb24obil7bGV0IHQ9bi5jbGFzc05hbWVzJiZuLmNsYXNzTmFtZXMubGVuZ3RoP1s4LC4uLm4uY2xhc3NOYW1lc106W107cmV0dXJuW24uZWxlbWVudCYmIioiIT09bi5lbGVtZW50P24uZWxlbWVudDoiIiwuLi5uLmF0dHJzLC4uLnRdfShuKSxlPW4ubm90U2VsZWN0b3JzJiZuLm5vdFNlbGVjdG9ycy5sZW5ndGg/bi5ub3RTZWxlY3RvcnMubWFwKGk9PmZ1bmN0aW9uKG4pe2xldCB0PW4uY2xhc3NOYW1lcyYmbi5jbGFzc05hbWVzLmxlbmd0aD9bOCwuLi5uLmNsYXNzTmFtZXNdOltdO3JldHVybiBuLmVsZW1lbnQ/WzUsbi5lbGVtZW50LC4uLm4uYXR0cnMsLi4udF06bi5hdHRycy5sZW5ndGg/WzMsLi4ubi5hdHRycywuLi50XTpuLmNsYXNzTmFtZXMmJm4uY2xhc3NOYW1lcy5sZW5ndGg/WzksLi4ubi5jbGFzc05hbWVzXTpbXX0oaSkpOltdO3JldHVybiB0LmNvbmNhdCguLi5lKX1mdW5jdGlvbiB0MyhuKXtyZXR1cm4gbj91ZC5wYXJzZShuKS5tYXAobF9lKTpbXX12YXIgY19lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBtcShuLHQsZSl7bGV0IGk9bi5pbmRleE9mKHQpO3JldHVybi0xPT1pP2U6W24uc2xpY2UoMCxpKS50cmltKCksbi5zbGljZShpKzEpLnRyaW0oKV19ZnVuY3Rpb24gaDEobil7dGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBFcnJvcjogJHtufWApfWZ1bmN0aW9uIG4zKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uLmNoYXJDb2RlQXQoZSk7aWYoaT49NTUyOTYmJmk8PTU2MzE5JiZuLmxlbmd0aD5lKzEpe2xldCByPW4uY2hhckNvZGVBdChlKzEpO3I+PTU2MzIwJiZyPD01NzM0MyYmKGUrKyxpPShpLTU1Mjk2PDwxMCkrci01NjMyMCs2NTUzNil9aTw9MTI3P3QucHVzaChpKTppPD0yMDQ3P3QucHVzaChpPj42JjMxfDE5Miw2MyZpfDEyOCk6aTw9NjU1MzU/dC5wdXNoKGk+PjEyfDIyNCxpPj42JjYzfDEyOCw2MyZpfDEyOCk6aTw9MjA5NzE1MSYmdC5wdXNoKGk+PjE4Jjd8MjQwLGk+PjEyJjYzfDEyOCxpPj42JjYzfDEyOCw2MyZpfDEyOCl9cmV0dXJuIHR9ZnVuY3Rpb24gZ3Eobil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIlsiK24ubWFwKGdxKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1uKXJldHVybiIiK247aWYobi5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtuLm92ZXJyaWRkZW5OYW1lfWA7aWYobi5uYW1lKXJldHVybmAke24ubmFtZX1gO2lmKCFuLnRvU3RyaW5nKXJldHVybiJvYmplY3QiO2xldCB0PW4udG9TdHJpbmcoKTtpZihudWxsPT10KXJldHVybiIiK3Q7bGV0IGU9dC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09ZT90OnQuc3Vic3RyaW5nKDAsZSl9dmFyIHAwPSgoKT0+dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksbXA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1zdGF0aWMgemVybygpe3JldHVybiBuZXcgbXAoWzBdKX1zdGF0aWMgb25lKCl7cmV0dXJuIG5ldyBtcChbMV0pfWNsb25lKCl7cmV0dXJuIG5ldyBtcCh0aGlzLmRpZ2l0cy5zbGljZSgpKX1hZGQodCl7bGV0IGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLmFkZFRvU2VsZih0KSxlfWFkZFRvU2VsZih0KXtsZXQgZT1NYXRoLm1heCh0aGlzLmRpZ2l0cy5sZW5ndGgsdC5kaWdpdHMubGVuZ3RoKSxpPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89aTtyPHRoaXMuZGlnaXRzLmxlbmd0aCYmKG8rPXRoaXMuZGlnaXRzW3JdKSxyPHQuZGlnaXRzLmxlbmd0aCYmKG8rPXQuZGlnaXRzW3JdKSxvPj0xMD8odGhpcy5kaWdpdHNbcl09by0xMCxpPTEpOih0aGlzLmRpZ2l0c1tyXT1vLGk9MCl9aT4wJiYodGhpcy5kaWdpdHNbZV09MSl9dG9TdHJpbmcoKXtsZXQgdD0iIjtmb3IobGV0IGU9dGhpcy5kaWdpdHMubGVuZ3RoLTE7ZT49MDtlLS0pdCs9dGhpcy5kaWdpdHNbZV07cmV0dXJuIHR9fSxmMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvd2VyT2ZUd29zPVt0XX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnBvd2VyT2ZUd29zWzBdfW11bHRpcGx5QnkodCl7bGV0IGU9bXAuemVybygpO3JldHVybiB0aGlzLm11bHRpcGx5QnlBbmRBZGRUbyh0LGUpLGV9bXVsdGlwbHlCeUFuZEFkZFRvKHQsZSl7Zm9yKGxldCBpPTA7MCE9PXQ7dD4+Pj0xLGkrKylpZigxJnQpe2xldCByPXRoaXMuZ2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byhpKTtlLmFkZFRvU2VsZihyKX19Z2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byh0KXtmb3IobGV0IGU9dGhpcy5wb3dlck9mVHdvcy5sZW5ndGg7ZTw9dDtlKyspe2xldCBpPXRoaXMucG93ZXJPZlR3b3NbZS0xXTt0aGlzLnBvd2VyT2ZUd29zW2VdPWkuYWRkKGkpfXJldHVybiB0aGlzLnBvd2VyT2ZUd29zW3RdfX07ZnVuY3Rpb24gbV9lKG4pe3JldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uMyhuKSxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5sZW5ndGgrMz4+PjIsaT1bXTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09b2Yobiw0KnIsdCk7cmV0dXJuIGl9KHQsbmMuQmlnKSxpPTgqdC5sZW5ndGgscj1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8ODA7aSsrKWUucHVzaCh1bmRlZmluZWQpO3JldHVybiBlfSgpLG89MTczMjU4NDE5MyxzPTQwMjMyMzM0MTcsYT0yNTYyMzgzMTAyLGw9MjcxNzMzODc4LGM9MzI4NTM3NzUyMDtlW2k+PjVdfD0xMjg8PDI0LWklMzIsZVsxNSsoaSs2ND4+OTw8NCldPWk7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kz0xNil7bGV0IGQ9byxwPXMsaD1hLGY9bCxtPWM7Zm9yKGxldCBDPTA7Qzw4MDtDKyspe3JbQ109QzwxNj9lW3UrQ106TU4ocltDLTNdXnJbQy04XV5yW0MtMTRdXnJbQy0xNl0sMSk7bGV0IF89Yl9lKEMscyxhLGwpLHk9X1swXSxJPV9bMV0sQT1bTU4obyw1KSx5LGMsSSxyW0NdXS5yZWR1Y2UoQXMpO2M9bCxsPWEsYT1NTihzLDMwKSxzPW8sbz1BfW89QXMobyxkKSxzPUFzKHMscCksYT1BcyhhLGgpLGw9QXMobCxmKSxjPUFzKGMsbSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1ZTihuLGUpO3QrPShpPj4+NCkudG9TdHJpbmcoMTYpKygxNSZpKS50b1N0cmluZygxNil9cmV0dXJuIHQudG9Mb3dlckNhc2UoKX0oZnVuY3Rpb24obil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT50LmNvbmNhdChmdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPDQ7ZSsrKXQucHVzaChuPj4+OCooMy1lKSYyNTUpO3JldHVybiB0fShlKSksW10pfShbbyxzLGEsbCxjXSkpfShmdW5jdGlvbihuKXtyZXR1cm4gbi5tYXAodD0+dC52aXNpdChfX2UsbnVsbCkpfShuLm5vZGVzKS5qb2luKCIiKStgWyR7bi5tZWFuaW5nfV1gKX1mdW5jdGlvbiBfcShuKXtsZXQgdD1uZXcgcU47cmV0dXJuIFkxKG4ubm9kZXMubWFwKGk9PmkudmlzaXQodCxudWxsKSkuam9pbigiIiksbi5tZWFuaW5nKX12YXIgbTE9Y2xhc3N7dmlzaXRUZXh0KHQsZSl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCxlKXtyZXR1cm5gWyR7dC5jaGlsZHJlbi5tYXAoaT0+aS52aXNpdCh0aGlzKSkuam9pbigiLCAiKX1dYH12aXNpdEljdSh0LGUpe2xldCBpPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9ufSwgJHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQuaXNWb2lkP2A8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ii8+YDpgPHBoIHRhZyBuYW1lPSIke3Quc3RhcnROYW1lfSI+JHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfTwvcGggbmFtZT0iJHt0LmNsb3NlTmFtZX0iPmB9dmlzaXRQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0LnZhbHVlP2A8cGggbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWV9PC9waD5gOmA8cGggbmFtZT0iJHt0Lm5hbWV9Ii8+YH12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuYDxwaCBpY3UgbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWUudmlzaXQodGhpcyl9PC9waD5gfX0sX19lPW5ldyBtMSxxTj1jbGFzcyBleHRlbmRzIG0xe3Zpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH19O2Z1bmN0aW9uIGJfZShuLHQsZSxpKXtyZXR1cm4gbjwyMD9bdCZlfH50JmksMTUxODUwMDI0OV06bjw0MD9bdF5lXmksMTg1OTc3NTM5M106bjw2MD9bdCZlfHQmaXxlJmksMjQwMDk1OTcwOF06W3ReZV5pLDMzOTU0Njk3ODJdfWZ1bmN0aW9uIEo3KG4pe2xldCB0PW4zKG4pLGU9JDcodCwwKSxpPSQ3KHQsMTAyMDcyKTtyZXR1cm4gMD09ZSYmKDA9PWl8fDE9PWkpJiYoZV49MzE5NzkwMDYzLGlePS0xODAxNDEwMjY0KSxbZSxpXX1mdW5jdGlvbiBZMShuLHQ9IiIpe2xldCBlPUo3KG4pO2lmKHQpe2xldCBvPUo3KHQpO2U9ZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLHI9dFswXSxzPXZxKG5bMV0sdFsxXSksYT1zWzBdLGw9c1sxXTtyZXR1cm5bQXMoQXMoZSxyKSxhKSxsXX0oZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLGk9blsxXTtyZXR1cm5bZTw8MXxpPj4+MzEsaTw8MXxlPj4+MzFdfShlKSxvKX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT10OS50b1RoZVBvd2VyT2YoMCkubXVsdGlwbHlCeSh0KTtyZXR1cm4gdDkudG9UaGVQb3dlck9mKDQpLm11bHRpcGx5QnlBbmRBZGRUbyhuLGUpLGUudG9TdHJpbmcoKX0oMjE0NzQ4MzY0NyZlWzBdLGVbMV0pfWZ1bmN0aW9uICQ3KG4sdCl7bGV0IHIsZT0yNjU0NDM1NzY5LGk9MjY1NDQzNTc2OSxvPW4ubGVuZ3RoO2ZvcihyPTA7cisxMjw9bztyKz0xMil7ZT1BcyhlLG9mKG4scixuYy5MaXR0bGUpKSxpPUFzKGksb2YobixyKzQsbmMuTGl0dGxlKSk7bGV0IHM9ZTkoZSxpLHQ9QXModCxvZihuLHIrOCxuYy5MaXR0bGUpKSk7ZT1zWzBdLGk9c1sxXSx0PXNbMl19cmV0dXJuIGU9QXMoZSxvZihuLHIsbmMuTGl0dGxlKSksaT1BcyhpLG9mKG4scis0LG5jLkxpdHRsZSkpLHQ9QXModCxvKSxlOShlLGksdD1Bcyh0LG9mKG4scis4LG5jLkxpdHRsZSk8PDgpKVsyXX1mdW5jdGlvbiBlOShuLHQsZSl7cmV0dXJuIG49a28obix0KSxuPWtvKG4sZSksbl49ZT4+PjEzLHQ9a28odCxlKSx0PWtvKHQsbiksdF49bjw8OCxlPWtvKGUsbiksZT1rbyhlLHQpLGVePXQ+Pj4xMyxuPWtvKG4sdCksbj1rbyhuLGUpLG5ePWU+Pj4xMix0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDE2LGU9a28oZSxuKSxlPWtvKGUsdCksZV49dD4+PjUsbj1rbyhuLHQpLG49a28obixlKSxuXj1lPj4+Myx0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDEwLGU9a28oZSxuKSxlPWtvKGUsdCksW24sdCxlXj10Pj4+MTVdfXZhciBuYz0oKCk9PntyZXR1cm4obj1uY3x8KG5jPXt9KSlbbi5MaXR0bGU9MF09IkxpdHRsZSIsbltuLkJpZz0xXT0iQmlnIixuYzt2YXIgbn0pKCk7ZnVuY3Rpb24gQXMobix0KXtyZXR1cm4gdnEobix0KVsxXX1mdW5jdGlvbiB2cShuLHQpe2xldCBlPSg2NTUzNSZuKSsoNjU1MzUmdCksaT0obj4+PjE2KSsodD4+PjE2KSsoZT4+PjE2KTtyZXR1cm5baT4+PjE2LGk8PDE2fDY1NTM1JmVdfWZ1bmN0aW9uIGtvKG4sdCl7bGV0IGU9KDY1NTM1Jm4pLSg2NTUzNSZ0KTtyZXR1cm4obj4+MTYpLSh0Pj4xNikrKGU+PjE2KTw8MTZ8NjU1MzUmZX1mdW5jdGlvbiBNTihuLHQpe3JldHVybiBuPDx0fG4+Pj4zMi10fWZ1bmN0aW9uIFlOKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoPzA6blt0XX1mdW5jdGlvbiBvZihuLHQsZSl7bGV0IGk9MDtpZihlPT09bmMuQmlnKWZvcihsZXQgcj0wO3I8NDtyKyspaSs9WU4obix0K3IpPDwyNC04KnI7ZWxzZSBmb3IobGV0IHI9MDtyPDQ7cisrKWkrPVlOKG4sdCtyKTw8OCpyO3JldHVybiBpfXZhciB0OT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBmMShtcC5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgZjEoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KSxhMT0oKCk9PntyZXR1cm4obj1hMXx8KGExPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uQ29uc3Q9MV09IkNvbnN0IixhMTt2YXIgbn0pKCksZzE9Y2xhc3N7Y29uc3RydWN0b3IodD1hMS5Ob25lKXt0aGlzLm1vZGlmaWVycz10fWhhc01vZGlmaWVyKHQpe3JldHVybiAwIT0odGhpcy5tb2RpZmllcnMmdCl9fSxvYz0oKCk9PntyZXR1cm4obj1vY3x8KG9jPXt9KSlbbi5EeW5hbWljPTBdPSJEeW5hbWljIixuW24uQm9vbD0xXT0iQm9vbCIsbltuLlN0cmluZz0yXT0iU3RyaW5nIixuW24uSW50PTNdPSJJbnQiLG5bbi5OdW1iZXI9NF09Ik51bWJlciIsbltuLkZ1bmN0aW9uPTVdPSJGdW5jdGlvbiIsbltuLkluZmVycmVkPTZdPSJJbmZlcnJlZCIsbltuLk5vbmU9N109Ik5vbmUiLG9jO3ZhciBufSkoKSxzdT1jbGFzcyBleHRlbmRzIGcxe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZSksdGhpcy5uYW1lPXR9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRCdWlsdGluVHlwZSh0aGlzLGUpfX0sc2M9Y2xhc3MgZXh0ZW5kcyBnMXtjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXtzdXBlcihlKSx0aGlzLnZhbHVlPXQsdGhpcy50eXBlUGFyYW1zPWl9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uVHlwZSh0aGlzLGUpfX0sVjA9bmV3IHN1KG9jLkR5bmFtaWMpLGlhPW5ldyBzdShvYy5JbmZlcnJlZCksRF9lPW5ldyBzdShvYy5Cb29sKSxreD0obmV3IHN1KG9jLkludCksbmV3IHN1KG9jLk51bWJlcikpLHlxPW5ldyBzdShvYy5TdHJpbmcpLGRkPShuZXcgc3Uob2MuRnVuY3Rpb24pLG5ldyBzdShvYy5Ob25lKSkscGY9KCgpPT57cmV0dXJuKG49cGZ8fChwZj17fSkpW24uTWludXM9MF09Ik1pbnVzIixuW24uUGx1cz0xXT0iUGx1cyIscGY7dmFyIG59KSgpLGhuPSgoKT0+e3JldHVybihuPWhufHwoaG49e30pKVtuLkVxdWFscz0wXT0iRXF1YWxzIixuW24uTm90RXF1YWxzPTFdPSJOb3RFcXVhbHMiLG5bbi5JZGVudGljYWw9Ml09IklkZW50aWNhbCIsbltuLk5vdElkZW50aWNhbD0zXT0iTm90SWRlbnRpY2FsIixuW24uTWludXM9NF09Ik1pbnVzIixuW24uUGx1cz01XT0iUGx1cyIsbltuLkRpdmlkZT02XT0iRGl2aWRlIixuW24uTXVsdGlwbHk9N109Ik11bHRpcGx5IixuW24uTW9kdWxvPThdPSJNb2R1bG8iLG5bbi5BbmQ9OV09IkFuZCIsbltuLk9yPTEwXT0iT3IiLG5bbi5CaXR3aXNlQW5kPTExXT0iQml0d2lzZUFuZCIsbltuLkxvd2VyPTEyXT0iTG93ZXIiLG5bbi5Mb3dlckVxdWFscz0xM109Ikxvd2VyRXF1YWxzIixuW24uQmlnZ2VyPTE0XT0iQmlnZ2VyIixuW24uQmlnZ2VyRXF1YWxzPTE1XT0iQmlnZ2VyRXF1YWxzIixuW24uTnVsbGlzaENvYWxlc2NlPTE2XT0iTnVsbGlzaENvYWxlc2NlIixobjt2YXIgbn0pKCk7ZnVuY3Rpb24gYnEobix0LGUpe2xldCBpPW4ubGVuZ3RoO2lmKGkhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGk7cisrKWlmKCFlKG5bcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbGMobix0KXtyZXR1cm4gYnEobix0LChlLGkpPT5lLmlzRXF1aXZhbGVudChpKSl9dmFyIENyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50eXBlPXR8fG51bGwsdGhpcy5zb3VyY2VTcGFuPWV8fG51bGx9cHJvcCh0LGUpe3JldHVybiBuZXcgYjAodGhpcyx0LG51bGwsZSl9a2V5KHQsZSxpKXtyZXR1cm4gbmV3IHN4KHRoaXMsdCxlLGkpfWNhbGxGbih0LGUsaSl7cmV0dXJuIG5ldyB2cCh0aGlzLHQsbnVsbCxlLGkpfWluc3RhbnRpYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGdmKHRoaXMsdCxlLGkpfWNvbmRpdGlvbmFsKHQsZT1udWxsLGkpe3JldHVybiBuZXcgaXgodGhpcyx0LGUsbnVsbCxpKX1lcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLkVxdWFscyx0aGlzLHQsbnVsbCxlKX1ub3RFcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdEVxdWFscyx0aGlzLHQsbnVsbCxlKX1pZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLklkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1ub3RJZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdElkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1taW51cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTWludXMsdGhpcyx0LG51bGwsZSl9cGx1cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uUGx1cyx0aGlzLHQsbnVsbCxlKX1kaXZpZGUodCxlKXtyZXR1cm4gbmV3IGxyKGhuLkRpdmlkZSx0aGlzLHQsbnVsbCxlKX1tdWx0aXBseSh0LGUpe3JldHVybiBuZXcgbHIoaG4uTXVsdGlwbHksdGhpcyx0LG51bGwsZSl9bW9kdWxvKHQsZSl7cmV0dXJuIG5ldyBscihobi5Nb2R1bG8sdGhpcyx0LG51bGwsZSl9YW5kKHQsZSl7cmV0dXJuIG5ldyBscihobi5BbmQsdGhpcyx0LG51bGwsZSl9Yml0d2lzZUFuZCh0LGUsaT0hMCl7cmV0dXJuIG5ldyBscihobi5CaXR3aXNlQW5kLHRoaXMsdCxudWxsLGUsaSl9b3IodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk9yLHRoaXMsdCxudWxsLGUpfWxvd2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5Mb3dlcix0aGlzLHQsbnVsbCxlKX1sb3dlckVxdWFscyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTG93ZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9YmlnZ2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXIsdGhpcyx0LG51bGwsZSl9YmlnZ2VyRXF1YWxzKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9aXNCbGFuayh0KXtyZXR1cm4gdGhpcy5lcXVhbHMoYzEsdCl9bnVsbGlzaENvYWxlc2NlKHQsZSl7cmV0dXJuIG5ldyBscihobi5OdWxsaXNoQ29hbGVzY2UsdGhpcyx0LG51bGwsZSl9dG9TdG10KCl7cmV0dXJuIG5ldyBsdSh0aGlzLG51bGwpfX0sbWY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLm5hbWU9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtZiYmdGhpcy5uYW1lPT09dC5uYW1lfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRWYXJFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgJGIodGhpcy5uYW1lLHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdjA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmV4cHI9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFR5cGVvZkV4cHIodGhpcyxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2MCYmdC5leHByLmlzRXF1aXZhbGVudCh0aGlzLmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4gdGhpcy5leHByLmlzQ29uc3RhbnQoKX19LERuPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5ub2RlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG4mJnRoaXMubm9kZT09PXQubm9kZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcmFwcGVkTm9kZUV4cHIodGhpcyxlKX19LCRiPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaXx8ZS50eXBlLHIpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiAkYiYmdGhpcy5uYW1lPT09dC5uYW1lJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZVZhckV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBhdSh0aGlzLm5hbWUsdGhpcy52YWx1ZSx0LGUsdGhpcy5zb3VyY2VTcGFuKX10b0NvbnN0RGVjbCgpe3JldHVybiB0aGlzLnRvRGVjbFN0bXQoaWEsa2EuRmluYWwpfX0sZXg9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHJ8fGkudHlwZSxvKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5pbmRleD1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBleCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZUtleUV4cHIodGhpcyxlKX19LHR4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihyfHxpLnR5cGUsbyksdGhpcy5yZWNlaXZlcj10LHRoaXMubmFtZT1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0eCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMubmFtZT09PXQubmFtZSYmdGhpcy52YWx1ZS5pc0VxdWl2YWxlbnQodC52YWx1ZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0V3JpdGVQcm9wRXhwcih0aGlzLGUpfX0sdnA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3N1cGVyKGksciksdGhpcy5mbj10LHRoaXMuYXJncz1lLHRoaXMucHVyZT1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHZwJiZ0aGlzLmZuLmlzRXF1aXZhbGVudCh0LmZuKSYmbGModGhpcy5hcmdzLHQuYXJncykmJnRoaXMucHVyZT09PXQucHVyZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodGhpcyxlKX19LG54PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnRhZz10LHRoaXMudGVtcGxhdGU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBueCYmdGhpcy50YWcuaXNFcXVpdmFsZW50KHQudGFnKSYmYnEodGhpcy50ZW1wbGF0ZS5lbGVtZW50cyx0LnRlbXBsYXRlLmVsZW1lbnRzLChlLGkpPT5lLnRleHQ9PT1pLnRleHQpJiZsYyh0aGlzLnRlbXBsYXRlLmV4cHJlc3Npb25zLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0aGlzLGUpfX0sZ2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihpLHIpLHRoaXMuY2xhc3NFeHByPXQsdGhpcy5hcmdzPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZ2YmJnRoaXMuY2xhc3NFeHByLmlzRXF1aXZhbGVudCh0LmNsYXNzRXhwcikmJmxjKHRoaXMuYXJncyx0LmFyZ3MpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdEluc3RhbnRpYXRlRXhwcih0aGlzLGUpfX0sRmE9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLnZhbHVlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRmEmJnRoaXMudmFsdWU9PT10LnZhbHVlfWlzQ29uc3RhbnQoKXtyZXR1cm4hMH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExpdGVyYWxFeHByKHRoaXMsZSl9fSxfMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZWxlbWVudHM9dCx0aGlzLmV4cHJlc3Npb25zPWV9fSx2MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5yYXdUZXh0PWk/P2U/LnRvU3RyaW5nKCk/P1FOKGwxKHQpKX19LGhmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWV9fSxoMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5hc3NvY2lhdGVkTWVzc2FnZT1pfX0sWE49Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHlxLG8pLHRoaXMubWV0YUJsb2NrPXQsdGhpcy5tZXNzYWdlUGFydHM9ZSx0aGlzLnBsYWNlSG9sZGVyTmFtZXM9aSx0aGlzLmV4cHJlc3Npb25zPXJ9aXNFcXVpdmFsZW50KHQpe3JldHVybiExfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExvY2FsaXplZFN0cmluZyh0aGlzLGUpfXNlcmlhbGl6ZUkxOG5IZWFkKCl7bGV0IHQ9dGhpcy5tZXRhQmxvY2suZGVzY3JpcHRpb258fCIiO3JldHVybiB0aGlzLm1ldGFCbG9jay5tZWFuaW5nJiYodD1gJHt0aGlzLm1ldGFCbG9jay5tZWFuaW5nfXwke3R9YCksdGhpcy5tZXRhQmxvY2suY3VzdG9tSWQmJih0PWAke3R9QEAke3RoaXMubWV0YUJsb2NrLmN1c3RvbUlkfWApLHRoaXMubWV0YUJsb2NrLmxlZ2FjeUlkcyYmdGhpcy5tZXRhQmxvY2subGVnYWN5SWRzLmZvckVhY2goZT0+e3Q9YCR7dH1cdTI0MWYke2V9YH0pLGk5KHQsdGhpcy5tZXNzYWdlUGFydHNbMF0udGV4dCx0aGlzLmdldE1lc3NhZ2VQYXJ0U291cmNlU3BhbigwKSl9Z2V0TWVzc2FnZVBhcnRTb3VyY2VTcGFuKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VQYXJ0c1t0XT8uc291cmNlU3Bhbj8/dGhpcy5zb3VyY2VTcGFufWdldFBsYWNlaG9sZGVyU291cmNlU3Bhbih0KXtyZXR1cm4gdGhpcy5wbGFjZUhvbGRlck5hbWVzW3RdPy5zb3VyY2VTcGFuPz90aGlzLmV4cHJlc3Npb25zW3RdPy5zb3VyY2VTcGFuPz90aGlzLnNvdXJjZVNwYW59c2VyaWFsaXplSTE4blRlbXBsYXRlUGFydCh0KXtsZXQgZT10aGlzLnBsYWNlSG9sZGVyTmFtZXNbdC0xXSxpPXRoaXMubWVzc2FnZVBhcnRzW3RdLHI9ZS50ZXh0O3JldHVybiAwPT09ZS5hc3NvY2lhdGVkTWVzc2FnZT8ubGVnYWN5SWRzLmxlbmd0aCYmKHIrPWBAQCR7WTEoZS5hc3NvY2lhdGVkTWVzc2FnZS5tZXNzYWdlU3RyaW5nLGUuYXNzb2NpYXRlZE1lc3NhZ2UubWVhbmluZyl9YCksaTkocixpLnRleHQsdGhpcy5nZXRNZXNzYWdlUGFydFNvdXJjZVNwYW4odCkpfX0sbDE9bj0+bi5yZXBsYWNlKC9cXC9nLCJcXFxcIiksUl9lPW49Pm4ucmVwbGFjZSgvXjovLCJcXDoiKSxPX2U9bj0+bi5yZXBsYWNlKC86L2csIlxcOiIpLFFOPW49Pm4ucmVwbGFjZSgvYC9nLCJcXGAiKS5yZXBsYWNlKC9cJHsvZywiJFxceyIpO2Z1bmN0aW9uIGk5KG4sdCxlKXtyZXR1cm4iIj09PW4/e2Nvb2tlZDp0LHJhdzpRTihSX2UobDEodCkpKSxyYW5nZTplfTp7Y29va2VkOmA6JHtufToke3R9YCxyYXc6UU4oYDoke09fZShsMShuKSl9OiR7bDEodCl9YCkscmFuZ2U6ZX19dmFyIHkwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnR5cGVQYXJhbXM9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5MCYmdGhpcy52YWx1ZS5uYW1lPT09dC52YWx1ZS5uYW1lJiZ0aGlzLnZhbHVlLm1vZHVsZU5hbWU9PT10LnZhbHVlLm1vZHVsZU5hbWUmJnRoaXMudmFsdWUucnVudGltZT09PXQudmFsdWUucnVudGltZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRFeHRlcm5hbEV4cHIodGhpcyxlKX19LGl4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyLG8pe3N1cGVyKHJ8fGUudHlwZSxvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMuZmFsc2VDYXNlPWksdGhpcy50cnVlQ2FzZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZ0aGlzLnRydWVDYXNlLmlzRXF1aXZhbGVudCh0LnRydWVDYXNlKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8bnVsbD09dD9uPT10Om4uaXNFcXVpdmFsZW50KHQpfSh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Q29uZGl0aW9uYWxFeHByKHRoaXMsZSl9fSxyeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoRF9lLGUpLHRoaXMuY29uZGl0aW9uPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgcngmJnRoaXMuY29uZGl0aW9uLmlzRXF1aXZhbGVudCh0LmNvbmRpdGlvbil9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Tm90RXhwcih0aGlzLGUpfX0sUnM9Y2xhc3N7Y29uc3RydWN0b3IodCxlPW51bGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdGhpcy5uYW1lPT09dC5uYW1lfX0sX2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGksciksdGhpcy5wYXJhbXM9dCx0aGlzLnN0YXRlbWVudHM9ZSx0aGlzLm5hbWU9b31pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfZiYmbGModGhpcy5wYXJhbXMsdC5wYXJhbXMpJiZsYyh0aGlzLnN0YXRlbWVudHMsdC5zdGF0ZW1lbnRzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRGdW5jdGlvbkV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBheCh0LHRoaXMucGFyYW1zLHRoaXMuc3RhdGVtZW50cyx0aGlzLnR5cGUsZSx0aGlzLnNvdXJjZVNwYW4pfX0sb3g9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITApe3N1cGVyKGl8fGt4LHIpLHRoaXMub3BlcmF0b3I9dCx0aGlzLmV4cHI9ZSx0aGlzLnBhcmVucz1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG94JiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHRoaXMsZSl9fSxscj1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPSEwKXtzdXBlcihyfHxlLnR5cGUsbyksdGhpcy5vcGVyYXRvcj10LHRoaXMucmhzPWksdGhpcy5wYXJlbnM9cyx0aGlzLmxocz1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGxyJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5saHMuaXNFcXVpdmFsZW50KHQubGhzKSYmdGhpcy5yaHMuaXNFcXVpdmFsZW50KHQucmhzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodGhpcyxlKX19LGIwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5uYW1lPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYjAmJnRoaXMucmVjZWl2ZXIuaXNFcXVpdmFsZW50KHQucmVjZWl2ZXIpJiZ0aGlzLm5hbWU9PT10Lm5hbWV9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0UmVhZFByb3BFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgdHgodGhpcy5yZWNlaXZlcix0aGlzLm5hbWUsdCxudWxsLHRoaXMuc291cmNlU3Bhbil9fSxzeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKGksciksdGhpcy5yZWNlaXZlcj10LHRoaXMuaW5kZXg9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBzeCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRLZXlFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgZXgodGhpcy5yZWNlaXZlcix0aGlzLmluZGV4LHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdmY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVudHJpZXM9dH1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LmlzQ29uc3RhbnQoKSl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgdmYmJmxjKHRoaXMuZW50cmllcyx0LmVudHJpZXMpfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5RXhwcih0aGlzLGUpfX0seTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2V5PXQsdGhpcy52YWx1ZT1lLHRoaXMucXVvdGVkPWl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX19LHgwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbnRyaWVzPXQsdGhpcy52YWx1ZVR5cGU9bnVsbCxlJiYodGhpcy52YWx1ZVR5cGU9ZS52YWx1ZVR5cGUpfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHgwJiZsYyh0aGlzLmVudHJpZXMsdC5lbnRyaWVzKX1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LnZhbHVlLmlzQ29uc3RhbnQoKSl9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwRXhwcih0aGlzLGUpfX0sS049bmV3IEZhKG51bGwsbnVsbCxudWxsKSxjMT1uZXcgRmEobnVsbCxpYSxudWxsKSxrYT0oKCk9PntyZXR1cm4obj1rYXx8KGthPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uRmluYWw9MV09IkZpbmFsIixuW24uUHJpdmF0ZT0yXT0iUHJpdmF0ZSIsbltuLkV4cG9ydGVkPTRdPSJFeHBvcnRlZCIsbltuLlN0YXRpYz04XT0iU3RhdGljIixrYTt2YXIgbn0pKCksWk49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudGV4dD10LHRoaXMubXVsdGlsaW5lPWUsdGhpcy50cmFpbGluZ05ld2xpbmU9aX10b1N0cmluZygpe3JldHVybiB0aGlzLm11bHRpbGluZT9gICR7dGhpcy50ZXh0fSBgOnRoaXMudGV4dH19LGIxPWNsYXNzIGV4dGVuZHMgWk57Y29uc3RydWN0b3IodCl7c3VwZXIoIiIsITAsITApLHRoaXMudGFncz10fXRvU3RyaW5nKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4iIjtpZigxPT09bi5sZW5ndGgmJm5bMF0udGFnTmFtZSYmIW5bMF0udGV4dClyZXR1cm5gKiR7bzkoblswXSl9IGA7bGV0IHQ9IipcbiI7Zm9yKGxldCBlIG9mIG4pdCs9IiAqIix0Kz1vOShlKS5yZXBsYWNlKC9cbi9nLCJcbiAqICIpLHQrPSJcbiI7cmV0dXJuIHQrPSIgIix0fSh0aGlzLnRhZ3MpfX0seWY9Y2xhc3N7Y29uc3RydWN0b3IodD1rYS5Ob25lLGU9bnVsbCxpKXt0aGlzLm1vZGlmaWVycz10LHRoaXMuc291cmNlU3Bhbj1lLHRoaXMubGVhZGluZ0NvbW1lbnRzPWl9aGFzTW9kaWZpZXIodCl7cmV0dXJuIDAhPSh0aGlzLm1vZGlmaWVycyZ0KX1hZGRMZWFkaW5nQ29tbWVudCh0KXt0aGlzLmxlYWRpbmdDb21tZW50cz10aGlzLmxlYWRpbmdDb21tZW50cz8/W10sdGhpcy5sZWFkaW5nQ29tbWVudHMucHVzaCh0KX19LGF1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHIsbyxzKSx0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy50eXBlPWl8fGUmJmUudHlwZXx8bnVsbH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhdSYmdGhpcy5uYW1lPT09dC5uYW1lJiYodGhpcy52YWx1ZT8hIXQudmFsdWUmJnRoaXMudmFsdWUuaXNFcXVpdmFsZW50KHQudmFsdWUpOiF0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0RGVjbGFyZVZhclN0bXQodGhpcyxlKX19LGF4PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSl7c3VwZXIobyxzLGEpLHRoaXMubmFtZT10LHRoaXMucGFyYW1zPWUsdGhpcy5zdGF0ZW1lbnRzPWksdGhpcy50eXBlPXJ8fG51bGx9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXgmJmxjKHRoaXMucGFyYW1zLHQucGFyYW1zKSYmbGModGhpcy5zdGF0ZW1lbnRzLHQuc3RhdGVtZW50cyl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodGhpcyxlKX19LGx1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGthLk5vbmUsZSxpKSx0aGlzLmV4cHI9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBsdSYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfXZpc2l0U3RhdGVtZW50KHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uU3RtdCh0aGlzLGUpfX0sdW89Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGU9bnVsbCxpKXtzdXBlcihrYS5Ob25lLGUsaSksdGhpcy52YWx1ZT10fWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHVvJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0UmV0dXJuU3RtdCh0aGlzLGUpfX0sbHg9Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGUsaT1bXSxyLG8pe3N1cGVyKGthLk5vbmUscixvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMudHJ1ZUNhc2U9ZSx0aGlzLmZhbHNlQ2FzZT1pfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGx4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZsYyh0aGlzLnRydWVDYXNlLHQudHJ1ZUNhc2UpJiZsYyh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdElmU3RtdCh0aGlzLGUpfX07ZnVuY3Rpb24gTWkobix0LGUpe3JldHVybiBuZXcgbWYobix0LGUpfWZ1bmN0aW9uIHhuKG4sdD1udWxsLGUpe3JldHVybiBuZXcgeTAobixudWxsLHQsZSl9ZnVuY3Rpb24gTmEobix0LGUpe3JldHVybiBuZXcgc2Mobix0LGUpfWZ1bmN0aW9uIGkzKG4pe3JldHVybiBuZXcgdjAobil9ZnVuY3Rpb24gY3Iobix0LGUpe3JldHVybiBuZXcgdmYobix0LGUpfWZ1bmN0aW9uIG1sKG4sdD1udWxsKXtyZXR1cm4gbmV3IHgwKG4ubWFwKGU9Pm5ldyB5MShlLmtleSxlLnZhbHVlLGUucXVvdGVkKSksdCxudWxsKX1mdW5jdGlvbiBPcyhuLHQsZSxpLHIpe3JldHVybiBuZXcgX2Yobix0LGUsaSxyKX1mdW5jdGlvbiByMyhuLHQsZSxpLHIpe3JldHVybiBuZXcgbHgobix0LGUsaSxyKX1mdW5jdGlvbiByOShuLHQsZSxpKXtyZXR1cm4gbmV3IG54KG4sdCxlLGkpfWZ1bmN0aW9uIG50KG4sdCxlKXtyZXR1cm4gbmV3IEZhKG4sdCxlKX1mdW5jdGlvbiB4cShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiZudWxsPT09bi52YWx1ZX1mdW5jdGlvbiBvOShuKXtsZXQgdD0iIjtpZihuLnRhZ05hbWUmJih0Kz1gIEAke24udGFnTmFtZX1gKSxuLnRleHQpe2lmKG4udGV4dC5tYXRjaCgvXC9cKnxcKlwvLykpdGhyb3cgbmV3IEVycm9yKCdKU0RvYyB0ZXh0IGNhbm5vdCBjb250YWluICIvKiIgYW5kICIqLyInKTt0Kz0iICIrbi50ZXh0LnJlcGxhY2UoL0AvZywiXFxAIil9cmV0dXJuIHR9dmFyIHM5PU1pKCI8dW5rbm93bj4iKSxDcT17fSxDMD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQudHlwZSksdGhpcy5yZXNvbHZlZD10LHRoaXMub3JpZ2luYWw9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gZT09PUNxP3RoaXMub3JpZ2luYWwudmlzaXRFeHByZXNzaW9uKHQsZSk6dGhpcy5yZXNvbHZlZC52aXNpdEV4cHJlc3Npb24odCxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDMCYmdGhpcy5yZXNvbHZlZC5pc0VxdWl2YWxlbnQodC5yZXNvbHZlZCl9aXNDb25zdGFudCgpe3JldHVybiEwfWZpeHVwKHQpe3RoaXMucmVzb2x2ZWQ9dCx0aGlzLnNoYXJlZD0hMH19LHgxPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITEpe3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkPXQsdGhpcy5zdGF0ZW1lbnRzPVtdLHRoaXMubGl0ZXJhbHM9bmV3IE1hcCx0aGlzLmxpdGVyYWxGYWN0b3JpZXM9bmV3IE1hcCx0aGlzLm5leHROYW1lSW5kZXg9MH1nZXRDb25zdExpdGVyYWwodCxlKXtpZih0IGluc3RhbmNlb2YgRmEmJiFhOSh0KXx8dCBpbnN0YW5jZW9mIEMwKXJldHVybiB0O2xldCBpPXRoaXMua2V5T2YodCkscj10aGlzLmxpdGVyYWxzLmdldChpKSxvPSExO2lmKHJ8fChyPW5ldyBDMCh0KSx0aGlzLmxpdGVyYWxzLnNldChpLHIpLG89ITApLCFvJiYhci5zaGFyZWR8fG8mJmUpe2xldCBhLGwscz10aGlzLmZyZXNoTmFtZSgpO3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkJiZhOSh0KT8oYT1NaShzKS5zZXQobmV3IF9mKFtdLFtuZXcgdW8odCldKSksbD1NaShzKS5jYWxsRm4oW10pKTooYT1NaShzKS5zZXQodCksbD1NaShzKSksdGhpcy5zdGF0ZW1lbnRzLnB1c2goYS50b0RlY2xTdG10KGlhLGthLkZpbmFsKSksci5maXh1cChsKX1yZXR1cm4gcn1nZXRMaXRlcmFsRmFjdG9yeSh0KXtpZih0IGluc3RhbmNlb2YgdmYpe2xldCBlPXQuZW50cmllcy5tYXAocj0+ci5pc0NvbnN0YW50KCk/cjpzOSksaT10aGlzLmtleU9mKGNyKGUpKTtyZXR1cm4gdGhpcy5fZ2V0TGl0ZXJhbEZhY3RvcnkoaSx0LmVudHJpZXMscj0+Y3IocikpfXtsZXQgZT1tbCh0LmVudHJpZXMubWFwKHI9Pih7a2V5OnIua2V5LHZhbHVlOnIudmFsdWUuaXNDb25zdGFudCgpP3IudmFsdWU6czkscXVvdGVkOnIucXVvdGVkfSkpKSxpPXRoaXMua2V5T2YoZSk7cmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KGksdC5lbnRyaWVzLm1hcChyPT5yLnZhbHVlKSxyPT5tbChyLm1hcCgobyxzKT0+KHtrZXk6dC5lbnRyaWVzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmVudHJpZXNbc10ucXVvdGVkfSkpKSl9fV9nZXRMaXRlcmFsRmFjdG9yeSh0LGUsaSl7bGV0IHI9dGhpcy5saXRlcmFsRmFjdG9yaWVzLmdldCh0KSxvPWUuZmlsdGVyKHM9PiFzLmlzQ29uc3RhbnQoKSk7aWYoIXIpe2xldCBzPWUubWFwKCh1LGQpPT51LmlzQ29uc3RhbnQoKT90aGlzLmdldENvbnN0TGl0ZXJhbCh1LCEwKTpNaShgYSR7ZH1gKSksbD1PcyhzLmZpbHRlcihIX2UpLm1hcCh1PT5uZXcgUnModS5uYW1lLFYwKSksW25ldyB1byhpKHMpKV0saWEpLGM9dGhpcy5mcmVzaE5hbWUoKTt0aGlzLnN0YXRlbWVudHMucHVzaChNaShjKS5zZXQobCkudG9EZWNsU3RtdChpYSxrYS5GaW5hbCkpLHI9TWkoYyksdGhpcy5saXRlcmFsRmFjdG9yaWVzLnNldCh0LHIpfXJldHVybntsaXRlcmFsRmFjdG9yeTpyLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOm99fXVuaXF1ZU5hbWUodCl7cmV0dXJuYCR7dH0ke3RoaXMubmV4dE5hbWVJbmRleCsrfWB9ZnJlc2hOYW1lKCl7cmV0dXJuIHRoaXMudW5pcXVlTmFtZSgiX2MiKX1rZXlPZih0KXtyZXR1cm4gdC52aXNpdEV4cHJlc3Npb24obmV3IEpOLENxKX19LEpOPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aXNpdFdyYXBwZWROb2RlRXhwcj1Gbyx0aGlzLnZpc2l0V3JpdGVWYXJFeHByPUZvLHRoaXMudmlzaXRXcml0ZUtleUV4cHI9Rm8sdGhpcy52aXNpdFdyaXRlUHJvcEV4cHI9Rm8sdGhpcy52aXNpdEludm9rZUZ1bmN0aW9uRXhwcj1Gbyx0aGlzLnZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByPUZvLHRoaXMudmlzaXRJbnN0YW50aWF0ZUV4cHI9Rm8sdGhpcy52aXNpdENvbmRpdGlvbmFsRXhwcj1Gbyx0aGlzLnZpc2l0Tm90RXhwcj1Gbyx0aGlzLnZpc2l0QXNzZXJ0Tm90TnVsbEV4cHI9Rm8sdGhpcy52aXNpdENhc3RFeHByPUZvLHRoaXMudmlzaXRGdW5jdGlvbkV4cHI9Rm8sdGhpcy52aXNpdFVuYXJ5T3BlcmF0b3JFeHByPUZvLHRoaXMudmlzaXRCaW5hcnlPcGVyYXRvckV4cHI9Rm8sdGhpcy52aXNpdFJlYWRQcm9wRXhwcj1Gbyx0aGlzLnZpc2l0UmVhZEtleUV4cHI9Rm8sdGhpcy52aXNpdENvbW1hRXhwcj1Gbyx0aGlzLnZpc2l0TG9jYWxpemVkU3RyaW5nPUZvfXZpc2l0TGl0ZXJhbEV4cHIodCl7cmV0dXJuYCR7InN0cmluZyI9PXR5cGVvZiB0LnZhbHVlPyciJyt0LnZhbHVlKyciJzp0LnZhbHVlfWB9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuYFske3QuZW50cmllcy5tYXAoaT0+aS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSkuam9pbigiLCIpfV1gfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm5geyR7dC5lbnRyaWVzLm1hcChvPT5gJHsobz0+e2xldCBzPW8ucXVvdGVkPyciJzoiIjtyZXR1cm5gJHtzfSR7by5rZXl9JHtzfWB9KShvKX06JHtvLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfWApLmpvaW4oIiwiKX1gfXZpc2l0RXh0ZXJuYWxFeHByKHQpe3JldHVybiB0LnZhbHVlLm1vZHVsZU5hbWU/YEVYOiR7dC52YWx1ZS5tb2R1bGVOYW1lfToke3QudmFsdWUubmFtZX1gOmBFWDoke3QudmFsdWUucnVudGltZS5uYW1lfWB9dmlzaXRSZWFkVmFyRXhwcih0KXtyZXR1cm5gVkFSOiR7dC5uYW1lfWB9dmlzaXRUeXBlb2ZFeHByKHQsZSl7cmV0dXJuYFRZUEVPRjoke3QuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX1gfX07ZnVuY3Rpb24gRm8obil7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBWaXNpdG9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2Vzbid0IGhhbmRsZSAke24uY29uc3RydWN0b3IubmFtZX1gKX1mdW5jdGlvbiBIX2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBtZn1mdW5jdGlvbiBhOShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiYic3RyaW5nIj09dHlwZW9mIG4udmFsdWUmJm4udmFsdWUubGVuZ3RoPj01MH12YXIgcGU9IkBhbmd1bGFyL2NvcmUiLEs9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uTkVXX01FVEhPRD0iZmFjdG9yeSIsbi5UUkFOU0ZPUk1fTUVUSE9EPSJ0cmFuc2Zvcm0iLG4uUEFUQ0hfREVQUz0icGF0Y2hlZERlcHMiLG4uY29yZT17bmFtZTpudWxsLG1vZHVsZU5hbWU6cGV9LG4ubmFtZXNwYWNlSFRNTD17bmFtZToiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VNYXRoTUw9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VTVkc9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRTdGFydD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRFbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiLG1vZHVsZU5hbWU6cGV9LG4uYWR2YW5jZT17bmFtZToiXHUwMjc1XHUwMjc1YWR2YW5jZSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0TGlzdGVuZXI9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RMaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc1Byb3A9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyU3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyRW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRDb250YWluZXI9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXA9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlMj17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUzIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlNT17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU2Iixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlOD17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGVWIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcCIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3A9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5uZXh0Q29udGV4dD17bmFtZToiXHUwMjc1XHUwMjc1bmV4dENvbnRleHQiLG1vZHVsZU5hbWU6cGV9LG4ucmVzZXRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNldFZpZXciLG1vZHVsZU5hbWU6cGV9LG4udGVtcGxhdGVDcmVhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRlbXBsYXRlIixtb2R1bGVOYW1lOnBlfSxuLnRleHQ9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHQiLG1vZHVsZU5hbWU6cGV9LG4uZW5hYmxlQmluZGluZ3M9e25hbWU6Ilx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmRpc2FibGVCaW5kaW5ncz17bmFtZToiXHUwMjc1XHUwMjc1ZGlzYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmdldEN1cnJlbnRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5yZXN0b3JlVmlldz17bmFtZToiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMD17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb24xPXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjI9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjIiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMz17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb240PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjU9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjUiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uNj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb243PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjg9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uVj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDE9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMSIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDI9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMiIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDM9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMyIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDQ9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kNCIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZFY9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kViIsbW9kdWxlTmFtZTpwZX0sbi5ob3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NWhvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHkiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5pMThuPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5BdHRyaWJ1dGVzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXR0cmlidXRlcyIsbW9kdWxlTmFtZTpwZX0sbi5pMThuRXhwPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuRXhwIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5TdGFydD17bmFtZToiXHUwMjc1XHUwMjc1aTE4blN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmkxOG5FbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWkxOG5FbmQiLG1vZHVsZU5hbWU6cGV9LG4uaTE4bkFwcGx5PXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXBwbHkiLG1vZHVsZU5hbWU6cGV9LG4uaTE4blBvc3Rwcm9jZXNzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiLG1vZHVsZU5hbWU6cGV9LG4ucGlwZT17bmFtZToiXHUwMjc1XHUwMjc1cGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9qZWN0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uIixtb2R1bGVOYW1lOnBlfSxuLnByb2plY3Rpb25EZWY9e25hbWU6Ilx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiLG1vZHVsZU5hbWU6cGV9LG4ucmVmZXJlbmNlPXtuYW1lOiJcdTAyNzVcdTAyNzVyZWZlcmVuY2UiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0QXR0cmlidXRlPXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiLG1vZHVsZU5hbWU6cGV9LG4uZGlyZWN0aXZlSW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVkaXJlY3RpdmVJbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW52YWxpZEZhY3Rvcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLmludmFsaWRGYWN0b3J5RGVwPXtuYW1lOiJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeURlcCIsbW9kdWxlTmFtZTpwZX0sbi50ZW1wbGF0ZVJlZkV4dHJhY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZm9yd2FyZFJlZj17bmFtZToiZm9yd2FyZFJlZiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlRm9yd2FyZFJlZj17bmFtZToicmVzb2x2ZUZvcndhcmRSZWYiLG1vZHVsZU5hbWU6cGV9LG4uXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RhYmxlRGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdGFibGVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlV2luZG93PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVEb2N1bWVudD17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVCb2R5PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlQm9keSIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVDb21wb25lbnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUNvbXBvbmVudCIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ29tcG9uZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVDb21wb25lbnQiLG1vZHVsZU5hbWU6cGV9LG4uc2V0Q29tcG9uZW50U2NvcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIixtb2R1bGVOYW1lOnBlfSxuLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5PXtuYW1lOiJDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSIsbW9kdWxlTmFtZTpwZX0sbi5WaWV3RW5jYXBzdWxhdGlvbj17bmFtZToiVmlld0VuY2Fwc3VsYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uQ29tcG9uZW50RGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUNvbXBvbmVudERlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1RmFjdG9yeURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlUYXJnZXQ9e25hbWU6Ilx1MDI3NVx1MDI3NUZhY3RvcnlUYXJnZXQiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lRGlyZWN0aXZlPXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZURpcmVjdGl2ZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlRGlyZWN0aXZlIixtb2R1bGVOYW1lOnBlfSxuLkRpcmVjdGl2ZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVEaXJlY3RpdmVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RvckRlZj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWYiLG1vZHVsZU5hbWU6cGV9LG4uSW5qZWN0b3JEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVJbmplY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZUluamVjdG9yPXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVJbmplY3RvciIsbW9kdWxlTmFtZTpwZX0sbi5OZ01vZHVsZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVOZ01vZHVsZURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLk1vZHVsZVdpdGhQcm92aWRlcnM9e25hbWU6Ik1vZHVsZVdpdGhQcm92aWRlcnMiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lTmdNb2R1bGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVOZ01vZHVsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlTmdNb2R1bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2V0TmdNb2R1bGVTY29wZT17bmFtZToiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSIsbW9kdWxlTmFtZTpwZX0sbi5yZWdpc3Rlck5nTW9kdWxlVHlwZT17bmFtZToiXHUwMjc1XHUwMjc1cmVnaXN0ZXJOZ01vZHVsZVR5cGUiLG1vZHVsZU5hbWU6cGV9LG4uUGlwZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVQaXBlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ2xhc3NNZXRhZGF0YT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSIsbW9kdWxlTmFtZTpwZX0sbi5zZXRDbGFzc01ldGFkYXRhPXtuYW1lOiJcdTAyNzVzZXRDbGFzc01ldGFkYXRhIixtb2R1bGVOYW1lOnBlfSxuLnF1ZXJ5UmVmcmVzaD17bmFtZToiXHUwMjc1XHUwMjc1cXVlcnlSZWZyZXNoIixtb2R1bGVOYW1lOnBlfSxuLnZpZXdRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1dmlld1F1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmxvYWRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1bG9hZFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmNvbnRlbnRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1Y29udGVudFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLk5nT25DaGFuZ2VzRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1TmdPbkNoYW5nZXNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkluaGVyaXREZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkNvcHlEZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLlN0YW5kYWxvbmVGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVTdGFuZGFsb25lRmVhdHVyZSIsbW9kdWxlTmFtZTpwZX0sbi5Qcm92aWRlcnNGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLmxpc3RlbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVsaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5nZXRJbmhlcml0ZWRGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplSHRtbD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplU3R5bGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplU3R5bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbi5zYW5pdGl6ZVNjcmlwdD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVTY3JpcHQiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplVXJsIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIixtb2R1bGVOYW1lOnBlfSxuLnRydXN0Q29uc3RhbnRIdG1sPXtuYW1lOiJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCIsbW9kdWxlTmFtZTpwZX0sbi50cnVzdENvbnN0YW50UmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbn0pKCk7ZnVuY3Rpb24gbjEobil7bj1uPDA/MSsoLW48PDEpOm48PDE7bGV0IHQ9IiI7ZG97bGV0IGU9MzEmbjsobj4+PTUpPjAmJihlfD0zMiksdCs9amIoZSl9d2hpbGUobj4wKTtyZXR1cm4gdH1mdW5jdGlvbiBqYihuKXtpZihuPDB8fG4+PTY0KXRocm93IG5ldyBFcnJvcigiQ2FuIG9ubHkgZW5jb2RlIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgNjNdIik7cmV0dXJuIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iW25dfXZhciBXX2U9Lyd8XFx8XG58XHJ8XCQvZyxxX2U9L15bJEEtWl9dWzAtOUEtWl8kXSokL2ksQzE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbmRlbnQ9dCx0aGlzLnBhcnRzTGVuZ3RoPTAsdGhpcy5wYXJ0cz1bXSx0aGlzLnNyY1NwYW5zPVtdfX0sY3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faW5kZW50PXQsdGhpcy5fbGluZXM9W25ldyBDMSh0KV19c3RhdGljIGNyZWF0ZVJvb3QoKXtyZXR1cm4gbmV3IGN4KDApfWdldCBfY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5fbGluZXNbdGhpcy5fbGluZXMubGVuZ3RoLTFdfXByaW50bG4odCxlPSIiKXt0aGlzLnByaW50KHR8fG51bGwsZSwhMCl9bGluZUlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLmxlbmd0aH1saW5lTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudCoiICAiLmxlbmd0aCt0aGlzLl9jdXJyZW50TGluZS5wYXJ0c0xlbmd0aH1wcmludCh0LGUsaT0hMSl7ZS5sZW5ndGg+MCYmKHRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLnB1c2goZSksdGhpcy5fY3VycmVudExpbmUucGFydHNMZW5ndGgrPWUubGVuZ3RoLHRoaXMuX2N1cnJlbnRMaW5lLnNyY1NwYW5zLnB1c2godCYmdC5zb3VyY2VTcGFufHxudWxsKSksaSYmdGhpcy5fbGluZXMucHVzaChuZXcgQzEodGhpcy5faW5kZW50KSl9cmVtb3ZlRW1wdHlMYXN0TGluZSgpe3RoaXMubGluZUlzRW1wdHkoKSYmdGhpcy5fbGluZXMucG9wKCl9aW5jSW5kZW50KCl7dGhpcy5faW5kZW50KyssdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9ZGVjSW5kZW50KCl7dGhpcy5faW5kZW50LS0sdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9dG9Tb3VyY2UoKXtyZXR1cm4gdGhpcy5zb3VyY2VMaW5lcy5tYXAodD0+dC5wYXJ0cy5sZW5ndGg+MD9sOSh0LmluZGVudCkrdC5wYXJ0cy5qb2luKCIiKToiIikuam9pbigiXG4iKX10b1NvdXJjZU1hcEdlbmVyYXRvcih0LGU9MCl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQ9bnVsbCl7dGhpcy5maWxlPXQsdGhpcy5zb3VyY2VzQ29udGVudD1uZXcgTWFwLHRoaXMubGluZXM9W10sdGhpcy5sYXN0Q29sMD0wLHRoaXMuaGFzTWFwcGluZ3M9ITF9YWRkU291cmNlKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5oYXModCl8fHRoaXMuc291cmNlc0NvbnRlbnQuc2V0KHQsZSksdGhpc31hZGRMaW5lKCl7cmV0dXJuIHRoaXMubGluZXMucHVzaChbXSksdGhpcy5sYXN0Q29sMD0wLHRoaXN9YWRkTWFwcGluZyh0LGUsaSxyKXtpZighdGhpcy5jdXJyZW50TGluZSl0aHJvdyBuZXcgRXJyb3IoIkEgbGluZSBtdXN0IGJlIGFkZGVkIGJlZm9yZSBtYXBwaW5ncyBjYW4gYmUgYWRkZWQiKTtpZihudWxsIT1lJiYhdGhpcy5zb3VyY2VzQ29udGVudC5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvdXJjZSBmaWxlICIke2V9ImApO2lmKG51bGw9PXQpdGhyb3cgbmV3IEVycm9yKCJUaGUgY29sdW1uIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBtdXN0IGJlIHByb3ZpZGVkIik7aWYodDx0aGlzLmxhc3RDb2wwKXRocm93IG5ldyBFcnJvcigiTWFwcGluZyBzaG91bGQgYmUgYWRkZWQgaW4gb3V0cHV0IG9yZGVyIik7aWYoZSYmKG51bGw9PWl8fG51bGw9PXIpKXRocm93IG5ldyBFcnJvcigiVGhlIHNvdXJjZSBsb2NhdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gYSBzb3VyY2UgdXJsIGlzIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMuaGFzTWFwcGluZ3M9ITAsdGhpcy5sYXN0Q29sMD10LHRoaXMuY3VycmVudExpbmUucHVzaCh7Y29sMDp0LHNvdXJjZVVybDplLHNvdXJjZUxpbmUwOmksc291cmNlQ29sMDpyfSksdGhpc31nZXQgY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSgtMSlbMF19dG9KU09OKCl7aWYoIXRoaXMuaGFzTWFwcGluZ3MpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IE1hcCxlPVtdLGk9W107QXJyYXkuZnJvbSh0aGlzLnNvdXJjZXNDb250ZW50LmtleXMoKSkuZm9yRWFjaCgoYyx1KT0+e3Quc2V0KGMsdSksZS5wdXNoKGMpLGkucHVzaCh0aGlzLnNvdXJjZXNDb250ZW50LmdldChjKXx8bnVsbCl9KTtsZXQgcj0iIixvPTAscz0wLGE9MCxsPTA7cmV0dXJuIHRoaXMubGluZXMuZm9yRWFjaChjPT57bz0wLHIrPWMubWFwKHU9PntsZXQgZD1uMSh1LmNvbDAtbyk7cmV0dXJuIG89dS5jb2wwLG51bGwhPXUuc291cmNlVXJsJiYoZCs9bjEodC5nZXQodS5zb3VyY2VVcmwpLXMpLHM9dC5nZXQodS5zb3VyY2VVcmwpLGQrPW4xKHUuc291cmNlTGluZTAtYSksYT11LnNvdXJjZUxpbmUwLGQrPW4xKHUuc291cmNlQ29sMC1sKSxsPXUuc291cmNlQ29sMCksZH0pLmpvaW4oIiwiKSxyKz0iOyJ9KSxyPXIuc2xpY2UoMCwtMSkse2ZpbGU6dGhpcy5maWxlfHwiIix2ZXJzaW9uOjMsc291cmNlUm9vdDoiIixzb3VyY2VzOmUsc291cmNlc0NvbnRlbnQ6aSxtYXBwaW5nczpyfX10b0pzQ29tbWVudCgpe3JldHVybiB0aGlzLmhhc01hcHBpbmdzPyIvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCIrZnVuY3Rpb24obil7bGV0IHQ9IiIsZT1uMyhuKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpKytdLG89aTxlLmxlbmd0aD9lW2krK106bnVsbCxzPWk8ZS5sZW5ndGg/ZVtpKytdOm51bGw7dCs9amIocj4+MiksdCs9amIoKDMmcik8PDR8KG51bGw9PT1vPzA6bz4+NCkpLHQrPW51bGw9PT1vPyI9IjpqYigoMTUmbyk8PDJ8KG51bGw9PT1zPzA6cz4+NikpLHQrPW51bGw9PT1vfHxudWxsPT09cz8iPSI6amIoNjMmcyl9cmV0dXJuIHR9KEpTT04uc3RyaW5naWZ5KHRoaXMsbnVsbCwwKSk6IiJ9fSh0KSxyPSExLG89KCk9PntyfHwoaS5hZGRTb3VyY2UodCwiICIpLmFkZE1hcHBpbmcoMCx0LDAsMCkscj0hMCl9O2ZvcihsZXQgcz0wO3M8ZTtzKyspaS5hZGRMaW5lKCksbygpO3JldHVybiB0aGlzLnNvdXJjZUxpbmVzLmZvckVhY2goKHMsYSk9PntpLmFkZExpbmUoKTtsZXQgbD1zLnNyY1NwYW5zLGM9cy5wYXJ0cyx1PXMuaW5kZW50KiIgICIubGVuZ3RoLGQ9MDtmb3IoO2Q8bC5sZW5ndGgmJiFsW2RdOyl1Kz1jW2RdLmxlbmd0aCxkKys7Zm9yKGQ8bC5sZW5ndGgmJjA9PT1hJiYwPT09dT9yPSEwOm8oKTtkPGwubGVuZ3RoOyl7bGV0IHA9bFtkXSxoPXAuc3RhcnQuZmlsZSxmPXAuc3RhcnQubGluZSxtPXAuc3RhcnQuY29sO2ZvcihpLmFkZFNvdXJjZShoLnVybCxoLmNvbnRlbnQpLmFkZE1hcHBpbmcodSxoLnVybCxmLG0pLHUrPWNbZF0ubGVuZ3RoLGQrKztkPGwubGVuZ3RoJiYocD09PWxbZF18fCFsW2RdKTspdSs9Y1tkXS5sZW5ndGgsZCsrfX0pLGl9c3Bhbk9mKHQsZSl7bGV0IGk9dGhpcy5fbGluZXNbdF07aWYoaSl7bGV0IHI9ZS1sOShpLmluZGVudCkubGVuZ3RoO2ZvcihsZXQgbz0wO288aS5wYXJ0cy5sZW5ndGg7bysrKXtsZXQgcz1pLnBhcnRzW29dO2lmKHMubGVuZ3RoPnIpcmV0dXJuIGkuc3JjU3BhbnNbb107ci09cy5sZW5ndGh9fXJldHVybiBudWxsfWdldCBzb3VyY2VMaW5lcygpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGgmJjA9PT10aGlzLl9saW5lc1t0aGlzLl9saW5lcy5sZW5ndGgtMV0ucGFydHMubGVuZ3RoP3RoaXMuX2xpbmVzLnNsaWNlKDAsLTEpOnRoaXMuX2xpbmVzfX0sdEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZXNjYXBlRG9sbGFySW5TdHJpbmdzPXR9cHJpbnRMZWFkaW5nQ29tbWVudHModCxlKXtpZih2b2lkIDAhPT10LmxlYWRpbmdDb21tZW50cylmb3IobGV0IGkgb2YgdC5sZWFkaW5nQ29tbWVudHMpaSBpbnN0YW5jZW9mIGIxP2UucHJpbnQodCxgLyoke2kudG9TdHJpbmcoKX0qL2AsaS50cmFpbGluZ05ld2xpbmUpOmkubXVsdGlsaW5lP2UucHJpbnQodCxgLyogJHtpLnRleHR9ICovYCxpLnRyYWlsaW5nTmV3bGluZSk6aS50ZXh0LnNwbGl0KCJcbiIpLmZvckVhY2gocj0+e2UucHJpbnRsbih0LGAvLyAke3J9YCl9KX12aXNpdEV4cHJlc3Npb25TdG10KHQsZSl7cmV0dXJuIHRoaXMucHJpbnRMZWFkaW5nQ29tbWVudHModCxlKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0UmV0dXJuU3RtdCh0LGUpe3JldHVybiB0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJyZXR1cm4gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50bG4odCwiOyIpLG51bGx9dmlzaXRJZlN0bXQodCxlKXt0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJpZiAoIiksdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIpIHsiKTtsZXQgaT1udWxsIT10LmZhbHNlQ2FzZSYmdC5mYWxzZUNhc2UubGVuZ3RoPjA7cmV0dXJuIHQudHJ1ZUNhc2UubGVuZ3RoPD0xJiYhaT8oZS5wcmludCh0LCIgIiksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLnJlbW92ZUVtcHR5TGFzdExpbmUoKSxlLnByaW50KHQsIiAiKSk6KGUucHJpbnRsbigpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLmRlY0luZGVudCgpLGkmJihlLnByaW50bG4odCwifSBlbHNlIHsiKSxlLmluY0luZGVudCgpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQuZmFsc2VDYXNlLGUpLGUuZGVjSW5kZW50KCkpKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRXcml0ZVZhckV4cHIodCxlKXtsZXQgaT1lLmxpbmVJc0VtcHR5KCk7cmV0dXJuIGl8fGUucHJpbnQodCwiKCIpLGUucHJpbnQodCxgJHt0Lm5hbWV9ID0gYCksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVLZXlFeHByKHQsZSl7bGV0IGk9ZS5saW5lSXNFbXB0eSgpO3JldHVybiBpfHxlLnByaW50KHQsIigiKSx0LnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiWyIpLHQuaW5kZXgudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJdID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVQcm9wRXhwcih0LGUpe2xldCBpPWUubGluZUlzRW1wdHkoKTtyZXR1cm4gaXx8ZS5wcmludCh0LCIoIiksdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsYC4ke3QubmFtZX0gPSBgKSx0LnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGl8fGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodCxlKXtyZXR1cm4gdC5mbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5hcmdzLGUsIiwiKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7dC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJgIit0LnRlbXBsYXRlLmVsZW1lbnRzWzBdLnJhd1RleHQpO2ZvcihsZXQgaT0xO2k8dC50ZW1wbGF0ZS5lbGVtZW50cy5sZW5ndGg7aSsrKWUucHJpbnQodCwiJHsiKSx0LnRlbXBsYXRlLmV4cHJlc3Npb25zW2ktMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnRlbXBsYXRlLmVsZW1lbnRzW2ldLnJhd1RleHR9YCk7cmV0dXJuIGUucHJpbnQodCwiYCIpLG51bGx9dmlzaXRXcmFwcGVkTm9kZUV4cHIodCxlKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IGVtaXR0ZXIgY2Fubm90IHZpc2l0IFdyYXBwZWROb2RlRXhwci4iKX12aXNpdFR5cGVvZkV4cHIodCxlKXtlLnByaW50KHQsInR5cGVvZiAiKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9dmlzaXRSZWFkVmFyRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0SW5zdGFudGlhdGVFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwibmV3ICIpLHQuY2xhc3NFeHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiKCIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmFyZ3MsZSwiLCIpLGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRMaXRlcmFsRXhwcih0LGUpe2xldCBpPXQudmFsdWU7cmV0dXJuIGUucHJpbnQodCwic3RyaW5nIj09dHlwZW9mIGk/Y2YoaSx0aGlzLl9lc2NhcGVEb2xsYXJJblN0cmluZ3MpOmAke2l9YCksbnVsbH12aXNpdExvY2FsaXplZFN0cmluZyh0LGUpe2xldCBpPXQuc2VyaWFsaXplSTE4bkhlYWQoKTtlLnByaW50KHQsIiRsb2NhbGl6ZSBgIitpLnJhdyk7Zm9yKGxldCByPTE7cjx0Lm1lc3NhZ2VQYXJ0cy5sZW5ndGg7cisrKWUucHJpbnQodCwiJHsiKSx0LmV4cHJlc3Npb25zW3ItMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnNlcmlhbGl6ZUkxOG5UZW1wbGF0ZVBhcnQocikucmF3fWApO3JldHVybiBlLnByaW50KHQsImAiKSxudWxsfXZpc2l0Q29uZGl0aW9uYWxFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiKCIpLHQuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiPyAiKSx0LnRydWVDYXNlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiOiAiKSx0LmZhbHNlQ2FzZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0Tm90RXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIiEiKSx0LmNvbmRpdGlvbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxudWxsfXZpc2l0VW5hcnlPcGVyYXRvckV4cHIodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRvcil7Y2FzZSBwZi5QbHVzOmk9IisiO2JyZWFrO2Nhc2UgcGYuTWludXM6aT0iLSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiB0LnBhcmVucyYmZS5wcmludCh0LCIoIiksZS5wcmludCh0LGkpLHQuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSx0LnBhcmVucyYmZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEJpbmFyeU9wZXJhdG9yRXhwcih0LGUpe2xldCBpO3N3aXRjaCh0Lm9wZXJhdG9yKXtjYXNlIGhuLkVxdWFsczppPSI9PSI7YnJlYWs7Y2FzZSBobi5JZGVudGljYWw6aT0iPT09IjticmVhaztjYXNlIGhuLk5vdEVxdWFsczppPSIhPSI7YnJlYWs7Y2FzZSBobi5Ob3RJZGVudGljYWw6aT0iIT09IjticmVhaztjYXNlIGhuLkFuZDppPSImJiI7YnJlYWs7Y2FzZSBobi5CaXR3aXNlQW5kOmk9IiYiO2JyZWFrO2Nhc2UgaG4uT3I6aT0ifHwiO2JyZWFrO2Nhc2UgaG4uUGx1czppPSIrIjticmVhaztjYXNlIGhuLk1pbnVzOmk9Ii0iO2JyZWFrO2Nhc2UgaG4uRGl2aWRlOmk9Ii8iO2JyZWFrO2Nhc2UgaG4uTXVsdGlwbHk6aT0iKiI7YnJlYWs7Y2FzZSBobi5Nb2R1bG86aT0iJSI7YnJlYWs7Y2FzZSBobi5Mb3dlcjppPSI8IjticmVhaztjYXNlIGhuLkxvd2VyRXF1YWxzOmk9Ijw9IjticmVhaztjYXNlIGhuLkJpZ2dlcjppPSI+IjticmVhaztjYXNlIGhuLkJpZ2dlckVxdWFsczppPSI+PSI7YnJlYWs7Y2FzZSBobi5OdWxsaXNoQ29hbGVzY2U6aT0iPz8iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdC5wYXJlbnMmJmUucHJpbnQodCwiKCIpLHQubGhzLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgICR7aX0gYCksdC5yaHMudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksdC5wYXJlbnMmJmUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRSZWFkUHJvcEV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIi4iKSxlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0UmVhZEtleUV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIlsiKSx0LmluZGV4LnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiWyIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmVudHJpZXMsZSwiLCIpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsTWFwRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsInsiKSx0aGlzLnZpc2l0QWxsT2JqZWN0cyhpPT57ZS5wcmludCh0LGAke2NmKGkua2V5LHRoaXMuX2VzY2FwZURvbGxhckluU3RyaW5ncyxpLnF1b3RlZCl9OmApLGkudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9LHQuZW50cmllcyxlLCIsIiksZS5wcmludCh0LCJ9IiksbnVsbH12aXNpdENvbW1hRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5wYXJ0cyxlLCIsIiksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEFsbEV4cHJlc3Npb25zKHQsZSxpKXt0aGlzLnZpc2l0QWxsT2JqZWN0cyhyPT5yLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLHQsZSxpKX12aXNpdEFsbE9iamVjdHModCxlLGkscil7bGV0IG89ITE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspcz4wJiYoaS5saW5lTGVuZ3RoKCk+ODA/KGkucHJpbnQobnVsbCxyLCEwKSxvfHwoaS5pbmNJbmRlbnQoKSxpLmluY0luZGVudCgpLG89ITApKTppLnByaW50KG51bGwsciwhMSkpLHQoZVtzXSk7byYmKGkuZGVjSW5kZW50KCksaS5kZWNJbmRlbnQoKSl9dmlzaXRBbGxTdGF0ZW1lbnRzKHQsZSl7dC5mb3JFYWNoKGk9PmkudmlzaXRTdGF0ZW1lbnQodGhpcyxlKSl9fTtmdW5jdGlvbiBjZihuLHQsZT0hMCl7aWYobnVsbD09bilyZXR1cm4gbnVsbDtsZXQgaT1uLnJlcGxhY2UoV19lLCguLi5vKT0+IiQiPT1vWzBdP3Q/IlxcJCI6IiQiOiJcbiI9PW9bMF0/IlxcbiI6IlxyIj09b1swXT8iXFxyIjpgXFwke29bMF19YCk7cmV0dXJuIGV8fCFxX2UudGVzdChpKT9gJyR7aX0nYDppfWZ1bmN0aW9uIGw5KG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bjtlKyspdCs9IiAgIjtyZXR1cm4gdH1mdW5jdGlvbiBYMShuLHQpe2lmKDA9PT10KXJldHVybiBOYShuKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHQ7aSsrKWUucHVzaChWMCk7cmV0dXJuIE5hKG4sdm9pZCAwLGUpfWZ1bmN0aW9uIE1xKG4pe3JldHVybmBAJHtufWB9ZnVuY3Rpb24gWF9lKG4sdCl7bGV0IGU9Y2YodCwhMSwhMSk7cmV0dXJuIGUhPT10P2Ake259WyR7ZX1dYDpgJHtufS4ke3R9YH1mdW5jdGlvbiBTcShuLHQpe3JldHVybmBhbmltYXRpb25fJHtufV8ke3R9YH1mdW5jdGlvbiBhcyhuKXtsZXQgdD1uZXcgRG4obik7cmV0dXJue3ZhbHVlOnQsdHlwZTp0fX1mdW5jdGlvbiB1ZihuLHQpe2xldCBlPWNyKG4ubWFwKGk9PmkudmFsdWUpKTtyZXR1cm4gdD9PcyhbXSxbbmV3IHVvKGUpXSk6ZX1mdW5jdGlvbiBvMyhuLHQpe3JldHVybntleHByZXNzaW9uOm4sZm9yd2FyZFJlZjp0fX12YXIgZjA9KCgpPT57cmV0dXJuKG49ZjB8fChmMD17fSkpW24uQ2xhc3M9MF09IkNsYXNzIixuW24uRnVuY3Rpb249MV09IkZ1bmN0aW9uIixmMDt2YXIgbn0pKCksaWM9KCgpPT57cmV0dXJuKG49aWN8fChpYz17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5Db21wb25lbnQ9MV09IkNvbXBvbmVudCIsbltuLkluamVjdGFibGU9Ml09IkluamVjdGFibGUiLG5bbi5QaXBlPTNdPSJQaXBlIixuW24uTmdNb2R1bGU9NF09Ik5nTW9kdWxlIixpYzt2YXIgbn0pKCk7ZnVuY3Rpb24gYWYobil7bGV0IHQ9TWkoInQiKSxlPW51bGwsaT11OShuKT90Om5ldyBscihobi5Pcix0LG4uaW50ZXJuYWxUeXBlKSxyPW51bGw7bnVsbCE9PW4uZGVwcz8iaW52YWxpZCIhPT1uLmRlcHMmJihyPW5ldyBnZihpLGM5KG4uZGVwcyxuLnRhcmdldCkpKTooZT1NaShgXHUwMjc1JHtuLm5hbWV9X0Jhc2VGYWN0b3J5YCkscj1lLmNhbGxGbihbaV0pKTtsZXQgbz1bXSxzPW51bGw7ZnVuY3Rpb24gYShjKXtsZXQgdT1NaSgiciIpO28ucHVzaCh1LnNldChLTikudG9EZWNsU3RtdCgpKTtsZXQgZD1udWxsIT09cj91LnNldChyKS50b1N0bXQoKTp4bihLLmludmFsaWRGYWN0b3J5KS5jYWxsRm4oW10pLnRvU3RtdCgpO3JldHVybiBvLnB1c2gocjModCxbZF0sW3Uuc2V0KGMpLnRvU3RtdCgpXSkpLHV9aWYodTkobikpe2xldCBjPWM5KG4uZGVsZWdhdGVEZXBzLG4udGFyZ2V0KTtzPWEobmV3KG4uZGVsZWdhdGVUeXBlPT09ZjAuQ2xhc3M/Z2Y6dnApKG4uZGVsZWdhdGUsYykpfWVsc2Ugcz1mdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5leHByZXNzaW9ufShuKT9hKG4uZXhwcmVzc2lvbik6cjtpZihudWxsPT09cylvLnB1c2goeG4oSy5pbnZhbGlkRmFjdG9yeSkuY2FsbEZuKFtdKS50b1N0bXQoKSk7ZWxzZSBpZihudWxsIT09ZSl7bGV0IGM9eG4oSy5nZXRJbmhlcml0ZWRGYWN0b3J5KS5jYWxsRm4oW24uaW50ZXJuYWxUeXBlXSksdT1uZXcgbHIoaG4uT3IsZSxlLnNldChjKSk7by5wdXNoKG5ldyB1byh1LmNhbGxGbihbaV0pKSl9ZWxzZSBvLnB1c2gobmV3IHVvKHMpKTtsZXQgbD1PcyhbbmV3IFJzKCJ0IixWMCldLG8saWEsdm9pZCAwLGAke24ubmFtZX1fRmFjdG9yeWApO3JldHVybiBudWxsIT09ZSYmKGw9T3MoW10sW25ldyBhdShlLm5hbWUpLG5ldyB1byhsKV0pLmNhbGxGbihbXSx2b2lkIDAsITApKSx7ZXhwcmVzc2lvbjpsLHN0YXRlbWVudHM6W10sdHlwZTokX2Uobil9fWZ1bmN0aW9uICRfZShuKXtsZXQgdD1udWxsIT09bi5kZXBzJiYiaW52YWxpZCIhPT1uLmRlcHM/ZnVuY3Rpb24obil7bGV0IHQ9ITEsZT1uLm1hcChpPT57bGV0IHI9ZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIG51bGwhPT1uLmF0dHJpYnV0ZU5hbWVUeXBlJiZ0LnB1c2goe2tleToiYXR0cmlidXRlIix2YWx1ZTpuLmF0dHJpYnV0ZU5hbWVUeXBlLHF1b3RlZDohMX0pLG4ub3B0aW9uYWwmJnQucHVzaCh7a2V5OiJvcHRpb25hbCIsdmFsdWU6bnQoITApLHF1b3RlZDohMX0pLG4uaG9zdCYmdC5wdXNoKHtrZXk6Imhvc3QiLHZhbHVlOm50KCEwKSxxdW90ZWQ6ITF9KSxuLnNlbGYmJnQucHVzaCh7a2V5OiJzZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksbi5za2lwU2VsZiYmdC5wdXNoKHtrZXk6InNraXBTZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksdC5sZW5ndGg+MD9tbCh0KTpudWxsfShpKTtyZXR1cm4gbnVsbCE9PXI/KHQ9ITAscik6bnQobnVsbCl9KTtyZXR1cm4gdD9OYShjcihlKSk6ZGR9KG4uZGVwcyk6ZGQ7cmV0dXJuIE5hKHhuKEsuRmFjdG9yeURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KSx0XSkpfWZ1bmN0aW9uIGM5KG4sdCl7cmV0dXJuIG4ubWFwKChlLGkpPT5mdW5jdGlvbihuLHQsZSl7aWYobnVsbD09PW4udG9rZW4pcmV0dXJuIHhuKEsuaW52YWxpZEZhY3RvcnlEZXApLmNhbGxGbihbbnQoZSldKTtpZihudWxsPT09bi5hdHRyaWJ1dGVOYW1lVHlwZSl7bGV0IGk9MHwobi5zZWxmPzI6MCl8KG4uc2tpcFNlbGY/NDowKXwobi5ob3N0PzE6MCl8KG4ub3B0aW9uYWw/ODowKXwodD09PWljLlBpcGU/MTY6MCkscj0wIT09aXx8bi5vcHRpb25hbD9udChpKTpudWxsLG89W24udG9rZW5dO3ImJm8ucHVzaChyKTtsZXQgcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBpYy5Db21wb25lbnQ6Y2FzZSBpYy5EaXJlY3RpdmU6Y2FzZSBpYy5QaXBlOnJldHVybiBLLmRpcmVjdGl2ZUluamVjdDtkZWZhdWx0OnJldHVybiBLLmluamVjdH19KHQpO3JldHVybiB4bihzKS5jYWxsRm4obyl9cmV0dXJuIHhuKEsuaW5qZWN0QXR0cmlidXRlKS5jYWxsRm4oW24udG9rZW5dKX0oZSx0LGkpKX1mdW5jdGlvbiB1OShuKXtyZXR1cm4gdm9pZCAwIT09bi5kZWxlZ2F0ZVR5cGV9dmFyIHcwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzKX19LHV4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5pMThuPWl9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRCb3VuZFRleHQodGhpcyl9fSxkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy5pMThuPXN9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRUZXh0QXR0cmlidXRlKHRoaXMpfX0sTTA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuc2VjdXJpdHlDb250ZXh0PWksdGhpcy52YWx1ZT1yLHRoaXMudW5pdD1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMua2V5U3Bhbj1hLHRoaXMudmFsdWVTcGFuPWwsdGhpcy5pMThuPWN9c3RhdGljIGZyb21Cb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LGUpe2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBhdHRyaWJ1dGVzIGJ1dCB3YXMgbm90IGZvciAke3QubmFtZX06ICR7dC5zb3VyY2VTcGFufWApO3JldHVybiBuZXcgTTAodC5uYW1lLHQudHlwZSx0LnNlY3VyaXR5Q29udGV4dCx0LnZhbHVlLHQudW5pdCx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLGUpfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRBdHRyaWJ1dGUodGhpcyl9fSxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlcj1pLHRoaXMudGFyZ2V0PXIsdGhpcy5waGFzZT1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMuaGFuZGxlclNwYW49YSx0aGlzLmtleVNwYW49bH1zdGF0aWMgZnJvbVBhcnNlZEV2ZW50KHQpe2xldCBlPTA9PT10LnR5cGU/dC50YXJnZXRPclBoYXNlOm51bGwsaT0xPT09dC50eXBlP3QudGFyZ2V0T3JQaGFzZTpudWxsO2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBldmVudCBidXQgd2FzIG5vdCBmb3IgJHt0Lm5hbWV9OiAke3Quc291cmNlU3Bhbn1gKTtyZXR1cm4gbmV3IFMwKHQubmFtZSx0LnR5cGUsdC5oYW5kbGVyLGUsaSx0LnNvdXJjZVNwYW4sdC5oYW5kbGVyU3Bhbix0LmtleVNwYW4pfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRFdmVudCh0aGlzKX19LEUwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMubmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy5jaGlsZHJlbj1vLHRoaXMucmVmZXJlbmNlcz1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWMsdGhpcy5pMThuPXV9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRFbGVtZW50KHRoaXMpfX0sWWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMudGFnTmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy50ZW1wbGF0ZUF0dHJzPW8sdGhpcy5jaGlsZHJlbj1zLHRoaXMucmVmZXJlbmNlcz1hLHRoaXMudmFyaWFibGVzPWwsdGhpcy5zb3VyY2VTcGFuPWMsdGhpcy5zdGFydFNvdXJjZVNwYW49dSx0aGlzLmVuZFNvdXJjZVNwYW49ZCx0aGlzLmkxOG49cH12aXNpdCh0KXtyZXR1cm4gdC52aXNpdFRlbXBsYXRlKHRoaXMpfX0sdzE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5rZXlTcGFuPXIsdGhpcy52YWx1ZVNwYW49b312aXNpdCh0KXtyZXR1cm4gdC52aXNpdFZhcmlhYmxlKHRoaXMpfX0sTTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy52YXJzPXQsdGhpcy5wbGFjZWhvbGRlcnM9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmkxOG49cn12aXNpdCh0KXtyZXR1cm4gdC52aXNpdEljdSh0aGlzKX19O2Z1bmN0aW9uIGQ5KG4sdCl7bGV0IGU9W107aWYobi52aXNpdClmb3IobGV0IGkgb2YgdCluLnZpc2l0KGkpfHxpLnZpc2l0KG4pO2Vsc2UgZm9yKGxldCBpIG9mIHQpe2xldCByPWkudmlzaXQobik7ciYmZS5wdXNoKHIpfXJldHVybiBlfXZhciBpdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5ub2Rlcz10LHRoaXMucGxhY2Vob2xkZXJzPWUsdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZT1pLHRoaXMubWVhbmluZz1yLHRoaXMuZGVzY3JpcHRpb249byx0aGlzLmN1c3RvbUlkPXMsdGhpcy5pZD10aGlzLmN1c3RvbUlkLHRoaXMubGVnYWN5SWRzPVtdLHRoaXMubWVzc2FnZVN0cmluZz1mdW5jdGlvbihuKXtsZXQgdD1uZXcgc0w7cmV0dXJuIG4ubWFwKGk9PmkudmlzaXQodCkpLmpvaW4oIiIpfSh0aGlzLm5vZGVzKSx0aGlzLnNvdXJjZXM9dC5sZW5ndGg/W3tmaWxlUGF0aDp0WzBdLnNvdXJjZVNwYW4uc3RhcnQuZmlsZS51cmwsc3RhcnRMaW5lOnRbMF0uc291cmNlU3Bhbi5zdGFydC5saW5lKzEsc3RhcnRDb2w6dFswXS5zb3VyY2VTcGFuLnN0YXJ0LmNvbCsxLGVuZExpbmU6dFt0Lmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZC5saW5lKzEsZW5kQ29sOnRbMF0uc291cmNlU3Bhbi5zdGFydC5jb2wrMX1dOltdfX0sbDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRleHQodGhpcyxlKX19LGJmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGlsZHJlbj10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb250YWluZXIodGhpcyxlKX19LFMxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1lLHRoaXMuY2FzZXM9aSx0aGlzLnNvdXJjZVNwYW49cn12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1KHRoaXMsZSl9fSxFMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52YWx1ZT10LHRoaXMubmFtZT1lLHRoaXMuc291cmNlU3Bhbj1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRQbGFjZWhvbGRlcih0aGlzLGUpfX0sVDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnNvdXJjZVNwYW49aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1UGxhY2Vob2xkZXIodGhpcyxlKX19LHNMPWNsYXNze3Zpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7bGV0IGU9T2JqZWN0LmtleXModC5jYXNlcykubWFwKGk9PmAke2l9IHske3QuY2FzZXNbaV0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb25QbGFjZWhvbGRlcn0sICR7dC50eXBlfSwgJHtlLmpvaW4oIiAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe2xldCBlPXQuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiIpO3JldHVybmB7JCR7dC5zdGFydE5hbWV9fSR7ZX17JCR7dC5jbG9zZU5hbWV9fWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm5geyQke3QubmFtZX19YH12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3JldHVybmB7JCR7dC5uYW1lfX1gfX07bmV3IGNsYXNze3Zpc2l0VGFnKHQpe2xldCBlPXRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyk7aWYoMD09dC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuYDwke3QubmFtZX0ke2V9Lz5gO2xldCBpPXQuY2hpbGRyZW4ubWFwKHI9PnIudmlzaXQodGhpcykpO3JldHVybmA8JHt0Lm5hbWV9JHtlfT4ke2kuam9pbigiIil9PC8ke3QubmFtZX0+YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXREZWNsYXJhdGlvbih0KXtyZXR1cm5gPD94bWwke3RoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyl9ID8+YH1fc2VyaWFsaXplQXR0cmlidXRlcyh0KXtsZXQgZT1PYmplY3Qua2V5cyh0KS5tYXAoaT0+YCR7aX09IiR7dFtpXX0iYCkuam9pbigiICIpO3JldHVybiBlLmxlbmd0aD4wPyIgIitlOiIifXZpc2l0RG9jdHlwZSh0KXtyZXR1cm5gPCFET0NUWVBFICR7dC5yb290VGFnfSBbXG4ke3QuZHRkfVxuXT5gfX07dmFyIGxMPSJpMThuLSI7ZnVuY3Rpb24gcHgobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBpdX1mdW5jdGlvbiBpMShuKXtyZXR1cm4gcHgobikmJjE9PT1uLm5vZGVzLmxlbmd0aCYmbi5ub2Rlc1swXWluc3RhbmNlb2YgUzF9ZnVuY3Rpb24gcHZlKG4pe3JldHVybiEhbi5pMThufWZ1bmN0aW9uIFRxKG4pe3JldHVybiBuLm5vZGVzWzBdfWZ1bmN0aW9uIFExKG4sdD0wKXtyZXR1cm5gXHVmZmZkJHtufSR7dD4wP2A6JHt0fWA6IiJ9XHVmZmZkYH1mdW5jdGlvbiBtdmUobj0wKXtsZXQgdD1uO3JldHVybigpPT50Kyt9ZnVuY3Rpb24gaDkobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+e3RbaV09bnQoZS5sZW5ndGg+MT9gWyR7ZS5qb2luKCJ8Iil9XWA6ZVswXSl9KSx0fWZ1bmN0aW9uIHUxKG4sdCwuLi5lKXtsZXQgaT1uLmdldCh0KXx8W107aS5wdXNoKC4uLmUpLG4uc2V0KHQsaSl9ZnVuY3Rpb24gRHEobix0PTAsZT0wKXtsZXQgaT10LHI9bmV3IE1hcCxvPW4gaW5zdGFuY2VvZiBpdT9uLm5vZGVzLmZpbmQocz0+cyBpbnN0YW5jZW9mIGJmKTpuO3JldHVybiBvJiZvLmNoaWxkcmVuLmZpbHRlcihzPT5zIGluc3RhbmNlb2YgRTEpLmZvckVhY2goKHMsYSk9PntsZXQgbD1RMShpK2EsZSk7dTEocixzLm5hbWUsbCl9KSxyfWZ1bmN0aW9uIHMzKG49e30sdCl7bGV0IGU9e307cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmT2JqZWN0LmtleXMobikuZm9yRWFjaChpPT5lW0Z4KGksdCldPW5baV0pLGV9ZnVuY3Rpb24gRngobix0PSEwKXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teQS1aMC05X10vZywiXyIpfShuKTtpZighdClyZXR1cm4gZTtsZXQgcixpPWUuc3BsaXQoIl8iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsvXlxkKyQvLnRlc3QoaVtpLmxlbmd0aC0xXSkmJihyPWkucG9wKCkpO2xldCBvPWkuc2hpZnQoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBpLmxlbmd0aCYmKG8rPWkubWFwKHM9PnMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKS5qb2luKCIiKSkscj9gJHtvfV8ke3J9YDpvfWZ1bmN0aW9uIGY5KG4pe3JldHVybmBNU0dfJHtufWAudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBndmUobil7cmV0dXJuIG5ldyBhdShuLm5hbWUsdm9pZCAwLGlhLHZvaWQgMCxuLnNvdXJjZVNwYW4pfXZhciBfdmU9L1stLl0vLGFjPSJjdHgiLE54PSJyZiIsQXE9InJlc3RvcmVkQ3R4IixDdmU9bmV3IFNldChbSy5lbGVtZW50LEsuZWxlbWVudFN0YXJ0LEsuZWxlbWVudEVuZCxLLmVsZW1lbnRDb250YWluZXIsSy5lbGVtZW50Q29udGFpbmVyU3RhcnQsSy5lbGVtZW50Q29udGFpbmVyRW5kLEsuaTE4bkV4cCxLLmxpc3RlbmVyLEsuY2xhc3NQcm9wLEsuc3ludGhldGljSG9zdExpc3RlbmVyLEsuaG9zdFByb3BlcnR5LEsuc3ludGhldGljSG9zdFByb3BlcnR5LEsucHJvcGVydHksSy5wcm9wZXJ0eUludGVycG9sYXRlMSxLLnByb3BlcnR5SW50ZXJwb2xhdGUyLEsucHJvcGVydHlJbnRlcnBvbGF0ZTMsSy5wcm9wZXJ0eUludGVycG9sYXRlNCxLLnByb3BlcnR5SW50ZXJwb2xhdGU1LEsucHJvcGVydHlJbnRlcnBvbGF0ZTYsSy5wcm9wZXJ0eUludGVycG9sYXRlNyxLLnByb3BlcnR5SW50ZXJwb2xhdGU4LEsucHJvcGVydHlJbnRlcnBvbGF0ZVYsSy5hdHRyaWJ1dGUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTEsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTIsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTMsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTYsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTcsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTgsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVYsSy5zdHlsZVByb3AsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTEsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTIsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTMsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTQsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTUsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTYsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTcsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTgsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZVYsSy50ZXh0SW50ZXJwb2xhdGUsSy50ZXh0SW50ZXJwb2xhdGUxLEsudGV4dEludGVycG9sYXRlMixLLnRleHRJbnRlcnBvbGF0ZTMsSy50ZXh0SW50ZXJwb2xhdGU0LEsudGV4dEludGVycG9sYXRlNSxLLnRleHRJbnRlcnBvbGF0ZTYsSy50ZXh0SW50ZXJwb2xhdGU3LEsudGV4dEludGVycG9sYXRlOCxLLnRleHRJbnRlcnBvbGF0ZVZdKTtmdW5jdGlvbiB4ZihuLHQsZSl7cmV0dXJuIHhuKHQsbnVsbCxuKS5jYWxsRm4oZSxuKX1mdW5jdGlvbiBJcShuLHQpe2xldCBlPW51bGw7cmV0dXJuKCk9PihlfHwobi5wdXNoKG5ldyBhdSgiX3QiLHZvaWQgMCxWMCkpLGU9TWkodCkpLGUpfWZ1bmN0aW9uIEhiKG4pe3Rocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogVmlzaXRvciAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZG9lc24ndCBoYW5kbGUgJHtuLmNvbnN0cnVjdG9yLm5hbWV9YCl9ZnVuY3Rpb24gcnUobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/Y3Iobi5tYXAocnUpKTpudChuLGlhKX1mdW5jdGlvbiBtOShuLHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5sZW5ndGg+MD9mdW5jdGlvbihuLHQpe3JldHVybiBtbChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5tYXAoZT0+e2xldCByLG8scyxhLGk9bltlXTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT8oW28scl09aSxzPWUsYT1vIT09cik6KHM9cj1lLG89aSxhPSExKSx7a2V5OnMscXVvdGVkOl92ZS50ZXN0KHMpLHZhbHVlOnQmJmE/Y3IoW3J1KG8pLHJ1KHIpXSk6cnUobyl9fSkpfShuLHQpOm51bGx9ZnVuY3Rpb24gU04obil7Zm9yKDt4cShuW24ubGVuZ3RoLTFdKTspbi5wb3AoKTtyZXR1cm4gbn1mdW5jdGlvbiBNdmUobix0KXtpZihBcnJheS5pc0FycmF5KG4ucHJlZGljYXRlKSl7bGV0IGU9W107cmV0dXJuIG4ucHJlZGljYXRlLmZvckVhY2goaT0+e2xldCByPWkuc3BsaXQoIiwiKS5tYXAobz0+bnQoby50cmltKCkpKTtlLnB1c2goLi4ucil9KSx0LmdldENvbnN0TGl0ZXJhbChjcihlKSwhMCl9c3dpdGNoKG4ucHJlZGljYXRlLmZvcndhcmRSZWYpe2Nhc2UgMDpjYXNlIDI6cmV0dXJuIG4ucHJlZGljYXRlLmV4cHJlc3Npb247Y2FzZSAxOnJldHVybiB4bihLLnJlc29sdmVGb3J3YXJkUmVmKS5jYWxsRm4oW24ucHJlZGljYXRlLmV4cHJlc3Npb25dKX19dmFyIHlwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZXM9W119c2V0KHQsZSl7ZSYmdGhpcy52YWx1ZXMucHVzaCh7a2V5OnQsdmFsdWU6ZSxxdW90ZWQ6ITF9KX10b0xpdGVyYWxNYXAoKXtyZXR1cm4gbWwodGhpcy52YWx1ZXMpfX07ZnVuY3Rpb24gQWYobil7bGV0e2V4cHJlc3Npb25zOnQsc3RyaW5nczplfT1uO3JldHVybiAxPT09dC5sZW5ndGgmJjI9PT1lLmxlbmd0aCYmIiI9PT1lWzBdJiYiIj09PWVbMV0/MTp0Lmxlbmd0aCtlLmxlbmd0aH1mdW5jdGlvbiBUMShuKXtsZXQgdD1bXSxlPW51bGwsaT1udWxsLHI9MDtmb3IobGV0IG8gb2Ygbil7bGV0IHM9KCJmdW5jdGlvbiI9PXR5cGVvZiBvLnBhcmFtc09yRm4/by5wYXJhbXNPckZuKCk6by5wYXJhbXNPckZuKT8/W10sYT1BcnJheS5pc0FycmF5KHMpP3M6W3NdO3I8NTAwJiZpPT09by5yZWZlcmVuY2UmJkN2ZS5oYXMoaSk/KGU9ZS5jYWxsRm4oYSxlLnNvdXJjZVNwYW4pLHIrKyk6KG51bGwhPT1lJiZ0LnB1c2goZS50b1N0bXQoKSksZT14ZihvLnNwYW4sby5yZWZlcmVuY2UsYSksaT1vLnJlZmVyZW5jZSxyPTApfXJldHVybiBudWxsIT09ZSYmdC5wdXNoKGUudG9TdG10KCkpLHR9ZnVuY3Rpb24gZzkobix0KXtsZXQgZT1udWxsLGk9e25hbWU6bi5uYW1lLHR5cGU6bi50eXBlLGludGVybmFsVHlwZTpuLmludGVybmFsVHlwZSx0eXBlQXJndW1lbnRDb3VudDpuLnR5cGVBcmd1bWVudENvdW50LGRlcHM6W10sdGFyZ2V0OmljLkluamVjdGFibGV9O2lmKHZvaWQgMCE9PW4udXNlQ2xhc3Mpe2xldCBsLGE9bi51c2VDbGFzcy5leHByZXNzaW9uLmlzRXF1aXZhbGVudChuLmludGVybmFsVHlwZSk7dm9pZCAwIT09bi5kZXBzJiYobD1uLmRlcHMpLGU9dm9pZCAwIT09bD9hZih7Li4uaSxkZWxlZ2F0ZTpuLnVzZUNsYXNzLmV4cHJlc3Npb24sZGVsZWdhdGVEZXBzOmwsZGVsZWdhdGVUeXBlOmYwLkNsYXNzfSk6YT9hZihpKTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLnVzZUNsYXNzLmV4cHJlc3Npb24sdCl9fWVsc2UgZT12b2lkIDAhPT1uLnVzZUZhY3Rvcnk/dm9pZCAwIT09bi5kZXBzP2FmKHsuLi5pLGRlbGVnYXRlOm4udXNlRmFjdG9yeSxkZWxlZ2F0ZURlcHM6bi5kZXBzfHxbXSxkZWxlZ2F0ZVR5cGU6ZjAuRnVuY3Rpb259KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOk9zKFtdLFtuZXcgdW8obi51c2VGYWN0b3J5LmNhbGxGbihbXSkpXSl9OnZvaWQgMCE9PW4udXNlVmFsdWU/YWYoey4uLmksZXhwcmVzc2lvbjpuLnVzZVZhbHVlLmV4cHJlc3Npb259KTp2b2lkIDAhPT1uLnVzZUV4aXN0aW5nP2FmKHsuLi5pLGV4cHJlc3Npb246eG4oSy5pbmplY3QpLmNhbGxGbihbbi51c2VFeGlzdGluZy5leHByZXNzaW9uXSl9KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLmludGVybmFsVHlwZSx0KX07bGV0IHI9bi5pbnRlcm5hbFR5cGUsbz1uZXcgeXA7cmV0dXJuIG8uc2V0KCJ0b2tlbiIsciksby5zZXQoImZhY3RvcnkiLGUuZXhwcmVzc2lvbiksbnVsbCE9PW4ucHJvdmlkZWRJbi5leHByZXNzaW9uLnZhbHVlJiZvLnNldCgicHJvdmlkZWRJbiIsZnVuY3Rpb24oe2V4cHJlc3Npb246bixmb3J3YXJkUmVmOnR9KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gbjtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4bihLLmZvcndhcmRSZWYpLmNhbGxGbihbT3MoW10sW25ldyB1byhuKV0pXSl9KG4pfX0obi5wcm92aWRlZEluKSkse2V4cHJlc3Npb246eG4oSy5cdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlKS5jYWxsRm4oW28udG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksdHlwZTpTdmUobiksc3RhdGVtZW50czplLnN0YXRlbWVudHN9fWZ1bmN0aW9uIFN2ZShuKXtyZXR1cm4gbmV3IHNjKHhuKEsuSW5qZWN0YWJsZURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KV0pKX1mdW5jdGlvbiBfOShuLHQsZSl7cmV0dXJuIG4ubm9kZT09PXQubm9kZT90LnByb3AoIlx1MDI3NWZhYyIpOnY5KGU/eG4oSy5yZXNvbHZlRm9yd2FyZFJlZikuY2FsbEZuKFt0XSk6dCl9ZnVuY3Rpb24gdjkobil7cmV0dXJuIE9zKFtuZXcgUnMoInQiLFYwKV0sW25ldyB1byhuLnByb3AoIlx1MDI3NWZhYyIpLmNhbGxGbihbTWkoInQiKV0pKV0pfXZhciBFdmU9Wy9eXHMqJC8sL1s8Pl0vLC9eW3t9XSQvLC8mKCN8W2Etel0pL2ksL15cL1wvL10sRDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX1zdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiB0PyhmdW5jdGlvbihuLHQpe2lmKG51bGwhPXQmJighQXJyYXkuaXNBcnJheSh0KXx8MiE9dC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgJ2ludGVycG9sYXRpb24nIHRvIGJlIGFuIGFycmF5LCBbc3RhcnQsIGVuZF0uIik7aWYobnVsbCE9dCl7bGV0IGU9dFswXSxpPXRbMV07RXZlLmZvckVhY2gocj0+e2lmKHIudGVzdChlKXx8ci50ZXN0KGkpKXRocm93IG5ldyBFcnJvcihgWycke2V9JywgJyR7aX0nXSBjb250YWlucyB1bnVzYWJsZSBpbnRlcnBvbGF0aW9uIHN5bWJvbC5gKX0pfX0oMCx0KSxuZXcgRDAodFswXSx0WzFdKSk6JGN9fSwkYz1uZXcgRDAoInt7IiwifX0iKSxmcD0xMjMsdHU9MTI1O2Z1bmN0aW9uIGYzKG4pe3JldHVybiBuPj05JiZuPD0zMnx8MTYwPT1ufWZ1bmN0aW9uIHBwKG4pe3JldHVybiA0ODw9biYmbjw9NTd9ZnVuY3Rpb24gbTMobil7cmV0dXJuIG4+PTk3JiZuPD0xMjJ8fG4+PTY1JiZuPD05MH1mdW5jdGlvbiBXcShuKXtyZXR1cm4gMTA9PT1ufHwxMz09PW59ZnVuY3Rpb24geDkobil7cmV0dXJuIDQ4PD1uJiZuPD01NX1mdW5jdGlvbiB1TChuKXtyZXR1cm4gMzk9PT1ufHwzND09PW58fDk2PT09bn12YXIgd2Y9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5maWxlPXQsdGhpcy5vZmZzZXQ9ZSx0aGlzLmxpbmU9aSx0aGlzLmNvbD1yfXRvU3RyaW5nKCl7cmV0dXJuIG51bGwhPXRoaXMub2Zmc2V0P2Ake3RoaXMuZmlsZS51cmx9QCR7dGhpcy5saW5lfToke3RoaXMuY29sfWA6dGhpcy5maWxlLnVybH1tb3ZlQnkodCl7bGV0IGU9dGhpcy5maWxlLmNvbnRlbnQsaT1lLmxlbmd0aCxyPXRoaXMub2Zmc2V0LG89dGhpcy5saW5lLHM9dGhpcy5jb2w7Zm9yKDtyPjAmJnQ8MDspaWYoci0tLHQrKywxMD09ZS5jaGFyQ29kZUF0KHIpKXtvLS07bGV0IGw9ZS5zdWJzdHJpbmcoMCxyLTEpLmxhc3RJbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoMTApKTtzPWw+MD9yLWw6cn1lbHNlIHMtLTtmb3IoO3I8aSYmdD4wOyl7bGV0IGE9ZS5jaGFyQ29kZUF0KHIpO3IrKyx0LS0sMTA9PWE/KG8rKyxzPTApOnMrK31yZXR1cm4gbmV3IHdmKHRoaXMuZmlsZSxyLG8scyl9Z2V0Q29udGV4dCh0LGUpe2xldCBpPXRoaXMuZmlsZS5jb250ZW50LHI9dGhpcy5vZmZzZXQ7aWYobnVsbCE9cil7cj5pLmxlbmd0aC0xJiYocj1pLmxlbmd0aC0xKTtsZXQgbz1yLHM9MCxhPTA7Zm9yKDtzPHQmJnI+MCYmKHItLSxzKyssIlxuIiE9aVtyXXx8KythIT1lKTspO2ZvcihzPTAsYT0wO3M8dCYmbzxpLmxlbmd0aC0xJiYobysrLHMrKywiXG4iIT1pW29dfHwrK2EhPWUpOyk7cmV0dXJue2JlZm9yZTppLnN1YnN0cmluZyhyLHRoaXMub2Zmc2V0KSxhZnRlcjppLnN1YnN0cmluZyh0aGlzLm9mZnNldCxvKzEpfX1yZXR1cm4gbnVsbH19LEkxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb250ZW50PXQsdGhpcy51cmw9ZX19LFRvPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPXQscj1udWxsKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZSx0aGlzLmZ1bGxTdGFydD1pLHRoaXMuZGV0YWlscz1yfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc3RhcnQuZmlsZS5jb250ZW50LnN1YnN0cmluZyh0aGlzLnN0YXJ0Lm9mZnNldCx0aGlzLmVuZC5vZmZzZXQpfX0sbnU9KCgpPT57cmV0dXJuKG49bnV8fChudT17fSkpW24uV0FSTklORz0wXT0iV0FSTklORyIsbltuLkVSUk9SPTFdPSJFUlJPUiIsbnU7dmFyIG59KSgpLE1mPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLnNwYW49dCx0aGlzLm1zZz1lLHRoaXMubGV2ZWw9aX1jb250ZXh0dWFsTWVzc2FnZSgpe2xldCB0PXRoaXMuc3Bhbi5zdGFydC5nZXRDb250ZXh0KDEwMCwzKTtyZXR1cm4gdD9gJHt0aGlzLm1zZ30gKCIke3QuYmVmb3JlfVske251W3RoaXMubGV2ZWxdfSAtPl0ke3QuYWZ0ZXJ9IilgOnRoaXMubXNnfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5zcGFuLmRldGFpbHM/YCwgJHt0aGlzLnNwYW4uZGV0YWlsc31gOiIiO3JldHVybmAke3RoaXMuY29udGV4dHVhbE1lc3NhZ2UoKX06ICR7dGhpcy5zcGFuLnN0YXJ0fSR7dH1gfX0sVXZlPTA7ZnVuY3Rpb24gbTAobil7cmV0dXJuIG4ucmVwbGFjZSgvXFcvZywiXyIpfXZhciByMSxDOT0nKHRoaXMmJnRoaXMuX19tYWtlVGVtcGxhdGVPYmplY3R8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0pJyxkTD1jbGFzcyBleHRlbmRzIHRMe2NvbnN0cnVjdG9yKCl7c3VwZXIoITEpfXZpc2l0V3JhcHBlZE5vZGVFeHByKHQsZSl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW1pdCBhIFdyYXBwZWROb2RlRXhwciBpbiBKYXZhc2NyaXB0LiIpfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gZS5wcmludCh0LGB2YXIgJHt0Lm5hbWV9YCksdC52YWx1ZSYmKGUucHJpbnQodCwiID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7bGV0IGk9dC50ZW1wbGF0ZS5lbGVtZW50cztyZXR1cm4gdC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGAoJHtDOX0oYCksZS5wcmludCh0LGBbJHtpLm1hcChyPT5jZihyLnRleHQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXdUZXh0LCExKSkuam9pbigiLCAiKX1dKWApLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMuZm9yRWFjaChyPT57ZS5wcmludCh0LCIsICIpLHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9KSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0RnVuY3Rpb25FeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCxgZnVuY3Rpb24ke3QubmFtZT8iICIrdC5uYW1lOiIifShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50KHQsIn0iKSxudWxsfXZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpe3JldHVybiBlLnByaW50KHQsYGZ1bmN0aW9uICR7dC5uYW1lfShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRMb2NhbGl6ZWRTdHJpbmcodCxlKXtlLnByaW50KHQsYCRsb2NhbGl6ZSgke0M5fShgKTtsZXQgaT1bdC5zZXJpYWxpemVJMThuSGVhZCgpXTtmb3IobGV0IHI9MTtyPHQubWVzc2FnZVBhcnRzLmxlbmd0aDtyKyspaS5wdXNoKHQuc2VyaWFsaXplSTE4blRlbXBsYXRlUGFydChyKSk7cmV0dXJuIGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5jb29rZWQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXcsITEpKS5qb2luKCIsICIpfV0pYCksdC5leHByZXNzaW9ucy5mb3JFYWNoKHI9PntlLnByaW50KHQsIiwgIiksci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX0pLGUucHJpbnQodCwiKSIpLG51bGx9X3Zpc2l0UGFyYW1zKHQsZSl7dGhpcy52aXNpdEFsbE9iamVjdHMoaT0+ZS5wcmludChudWxsLGkubmFtZSksdCxlLCIsIil9fTtmdW5jdGlvbiB3OSguLi5uKXtpZighcDAudHJ1c3RlZFR5cGVzKXJldHVybiBuZXcgRnVuY3Rpb24oLi4ubik7bGV0IGk9YChmdW5jdGlvbiBhbm9ueW1vdXMoJHtuLnNsaWNlKDAsLTEpLmpvaW4oIiwiKX1cbikgeyAke25bbi5sZW5ndGgtMV19XG59KWAscj1wMC5ldmFsKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PXIxJiYocjE9bnVsbCxwMC50cnVzdGVkVHlwZXMpKXRyeXtyMT1wMC50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1qaXQiLHtjcmVhdGVTY3JpcHQ6bj0+bn0pfWNhdGNoe31yZXR1cm4gcjF9KCk/LmNyZWF0ZVNjcmlwdChuKXx8bn0oaSkpO3JldHVybiB2b2lkIDA9PT1yLmJpbmQ/bmV3IEZ1bmN0aW9uKC4uLm4pOihyLnRvU3RyaW5nPSgpPT5pLHIuYmluZChwMCkpfXZhciBoTD1jbGFzcyBleHRlbmRzIGRMe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5yZWZSZXNvbHZlcj10LHRoaXMuX2V2YWxBcmdOYW1lcz1bXSx0aGlzLl9ldmFsQXJnVmFsdWVzPVtdLHRoaXMuX2V2YWxFeHBvcnRlZFZhcnM9W119Y3JlYXRlUmV0dXJuU3RtdCh0KXtuZXcgdW8obmV3IHgwKHRoaXMuX2V2YWxFeHBvcnRlZFZhcnMubWFwKGk9Pm5ldyB5MShpLE1pKGkpLCExKSkpKS52aXNpdFN0YXRlbWVudCh0aGlzLHQpfWdldEFyZ3MoKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPHRoaXMuX2V2YWxBcmdOYW1lcy5sZW5ndGg7ZSsrKXRbdGhpcy5fZXZhbEFyZ05hbWVzW2VdXT10aGlzLl9ldmFsQXJnVmFsdWVzW2VdO3JldHVybiB0fXZpc2l0RXh0ZXJuYWxFeHByKHQsZSl7cmV0dXJuIHRoaXMuX2VtaXRSZWZlcmVuY2VUb0V4dGVybmFsKHQsdGhpcy5yZWZSZXNvbHZlci5yZXNvbHZlRXh0ZXJuYWxSZWZlcmVuY2UodC52YWx1ZSksZSksbnVsbH12aXNpdFdyYXBwZWROb2RlRXhwcih0LGUpe3JldHVybiB0aGlzLl9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LHQubm9kZSxlKSxudWxsfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZVZhclN0bXQodCxlKX12aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpfV9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LGUsaSl7bGV0IHI9dGhpcy5fZXZhbEFyZ1ZhbHVlcy5pbmRleE9mKGUpO2lmKC0xPT09cil7cj10aGlzLl9ldmFsQXJnVmFsdWVzLmxlbmd0aCx0aGlzLl9ldmFsQXJnVmFsdWVzLnB1c2goZSk7bGV0IG89ZnVuY3Rpb24obil7aWYoIW58fCFuLnJlZmVyZW5jZSlyZXR1cm4gbnVsbDtsZXQgdD1uLnJlZmVyZW5jZTtpZih0Ll9fYW5vbnltb3VzVHlwZSlyZXR1cm4gdC5fX2Fub255bW91c1R5cGU7aWYodC5fX2ZvcndhcmRfcmVmX18pcmV0dXJuIl9fZm9yd2FyZF9yZWZfXyI7bGV0IGU9Z3EodCk7cmV0dXJuIGUuaW5kZXhPZigiKCIpPj0wPyhlPSJhbm9ueW1vdXNfIitVdmUrKyx0Ll9fYW5vbnltb3VzVHlwZT1lKTplPW0wKGUpLGV9KHtyZWZlcmVuY2U6ZX0pfHwidmFsIjt0aGlzLl9ldmFsQXJnTmFtZXMucHVzaChgaml0XyR7b31fJHtyfWApfWkucHJpbnQodCx0aGlzLl9ldmFsQXJnTmFtZXNbcl0pfX07ZnVuY3Rpb24gTTkobil7bGV0IHQ9bmV3IHlwO251bGwhPT1uLnByb3ZpZGVycyYmdC5zZXQoInByb3ZpZGVycyIsbi5wcm92aWRlcnMpLG4uaW1wb3J0cy5sZW5ndGg+MCYmdC5zZXQoImltcG9ydHMiLGNyKG4uaW1wb3J0cykpO2xldCBlPXhuKEsuZGVmaW5lSW5qZWN0b3IpLmNhbGxGbihbdC50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgc2MoeG4oSy5JbmplY3RvckRlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlLnR5cGUpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgZzA9KCgpPT57cmV0dXJuKG49ZzB8fChnMD17fSkpW24uSW5saW5lPTBdPSJJbmxpbmUiLG5bbi5TaWRlRWZmZWN0PTFdPSJTaWRlRWZmZWN0IixuW24uT21pdD0yXT0iT21pdCIsZzA7dmFyIG59KSgpO2Z1bmN0aW9uIFl2ZShuKXtsZXR7YWRqYWNlbnRUeXBlOnQsaW50ZXJuYWxUeXBlOmUsYm9vdHN0cmFwOmksZGVjbGFyYXRpb25zOnIsaW1wb3J0czpvLGV4cG9ydHM6cyxzY2hlbWFzOmEsY29udGFpbnNGb3J3YXJkRGVjbHM6bCxzZWxlY3RvclNjb3BlTW9kZTpjLGlkOnV9PW4sZD1bXSxwPW5ldyB5cDtpZihwLnNldCgidHlwZSIsZSksaS5sZW5ndGg+MCYmcC5zZXQoImJvb3RzdHJhcCIsdWYoaSxsKSksYz09PWcwLklubGluZSlyLmxlbmd0aD4wJiZwLnNldCgiZGVjbGFyYXRpb25zIix1ZihyLGwpKSxvLmxlbmd0aD4wJiZwLnNldCgiaW1wb3J0cyIsdWYobyxsKSkscy5sZW5ndGg+MCYmcC5zZXQoImV4cG9ydHMiLHVmKHMsbCkpO2Vsc2UgaWYoYz09PWcwLlNpZGVFZmZlY3Qpe2xldCBtPWZ1bmN0aW9uKG4pe2xldHthZGphY2VudFR5cGU6dCxkZWNsYXJhdGlvbnM6ZSxpbXBvcnRzOmksZXhwb3J0czpyLGNvbnRhaW5zRm9yd2FyZERlY2xzOm99PW4scz1uZXcgeXA7aWYoZS5sZW5ndGg+MCYmcy5zZXQoImRlY2xhcmF0aW9ucyIsdWYoZSxvKSksaS5sZW5ndGg+MCYmcy5zZXQoImltcG9ydHMiLHVmKGksbykpLHIubGVuZ3RoPjAmJnMuc2V0KCJleHBvcnRzIix1ZihyLG8pKSwwPT09T2JqZWN0LmtleXMocy52YWx1ZXMpLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgeTAoe25hbWU6Im5nSml0TW9kZSIsbW9kdWxlTmFtZTpudWxsfSksaT1uZXcgbHIoaG4uSWRlbnRpY2FsLG5ldyB2MChlKSxudCgidW5kZWZpbmVkIikpLHI9bmV3IGxyKGhuLk9yLGksZSx2b2lkIDAsdm9pZCAwLCEwKTtyZXR1cm4gbmV3IGxyKGhuLkFuZCxyLHQpfSgwLG4pfShuZXcgdnAoeG4oSy5zZXROZ01vZHVsZVNjb3BlKSxbdCxzLnRvTGl0ZXJhbE1hcCgpXSkpLGM9bmV3IF9mKFtdLFtsLnRvU3RtdCgpXSk7cmV0dXJuIG5ldyB2cChjLFtdKS50b1N0bXQoKX0obik7bnVsbCE9PW0mJmQucHVzaChtKX1udWxsIT09YSYmYS5sZW5ndGg+MCYmcC5zZXQoInNjaGVtYXMiLGNyKGEubWFwKG09Pm0udmFsdWUpKSksbnVsbCE9PXUmJihwLnNldCgiaWQiLHUpLGQucHVzaCh4bihLLnJlZ2lzdGVyTmdNb2R1bGVUeXBlKS5jYWxsRm4oW3QsdV0pLnRvU3RtdCgpKSk7bGV0IGg9eG4oSy5kZWZpbmVOZ01vZHVsZSkuY2FsbEZuKFtwLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGY9ZnVuY3Rpb24oe3R5cGU6bixkZWNsYXJhdGlvbnM6dCxleHBvcnRzOmUsaW1wb3J0czppLGluY2x1ZGVJbXBvcnRUeXBlczpyLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6b30pe3JldHVybiBuZXcgc2MoeG4oSy5OZ01vZHVsZURlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlKSxudWxsPT09bz9FTih0KTpadmUobykscj9FTihpKTpkZCxFTihlKV0pKX0obik7cmV0dXJue2V4cHJlc3Npb246aCx0eXBlOmYsc3RhdGVtZW50czpkfX1mdW5jdGlvbiBFTihuKXtsZXQgdD1uLm1hcChlPT5pMyhlLnR5cGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gWnZlKG4pe2xldCB0PW4ubWFwKGU9PmkzKGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gUzkobil7bGV0IHQ9W107dC5wdXNoKHtrZXk6Im5hbWUiLHZhbHVlOm50KG4ucGlwZU5hbWUpLHF1b3RlZDohMX0pLHQucHVzaCh7a2V5OiJ0eXBlIix2YWx1ZTpuLnR5cGUudmFsdWUscXVvdGVkOiExfSksdC5wdXNoKHtrZXk6InB1cmUiLHZhbHVlOm50KG4ucHVyZSkscXVvdGVkOiExfSksbi5pc1N0YW5kYWxvbmUmJnQucHVzaCh7a2V5OiJzdGFuZGFsb25lIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSk7bGV0IGU9eG4oSy5kZWZpbmVQaXBlKS5jYWxsRm4oW21sKHQpXSx2b2lkIDAsITApLGk9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBzYyh4bihLLlBpcGVEZWNsYXJhdGlvbixbWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbmV3IHNjKG5ldyBGYShuLnBpcGVOYW1lKSksbmV3IHNjKG5ldyBGYShuLmlzU3RhbmRhbG9uZSkpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgXzA9KCgpPT57cmV0dXJuKG49XzB8fChfMD17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5QaXBlPTFdPSJQaXBlIixuW24uTmdNb2R1bGU9Ml09Ik5nTW9kdWxlIixfMDt2YXIgbn0pKCksbXg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pbnB1dD1lLHRoaXMuZXJyTG9jYXRpb249aSx0aGlzLmN0eExvY2F0aW9uPXIsdGhpcy5tZXNzYWdlPWBQYXJzZXIgRXJyb3I6ICR7dH0gJHtpfSBbJHtlfV0gaW4gJHtyfWB9fSxTZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1lfXRvQWJzb2x1dGUodCl7cmV0dXJuIG5ldyBPYSh0K3RoaXMuc3RhcnQsdCt0aGlzLmVuZCl9fSxwbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3Bhbj10LHRoaXMuc291cmNlU3Bhbj1lfXRvU3RyaW5nKCl7cmV0dXJuIkFTVCJ9fSxBMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMubmFtZVNwYW49aX19LG5hPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe319LEVmPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0SW1wbGljaXRSZWNlaXZlcih0aGlzLGUpfX0sZ3g9Y2xhc3MgZXh0ZW5kcyBFZnt2aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRUaGlzUmVjZWl2ZXI/Lih0aGlzLGUpfX0sX3g9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0Q2hhaW4odGhpcyxlKX19LHZ4PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMuY29uZGl0aW9uPWksdGhpcy50cnVlRXhwPXIsdGhpcy5mYWxzZUV4cD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdENvbmRpdGlvbmFsKHRoaXMsZSl9fSxvdT1jbGFzcyBleHRlbmRzIEEwe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlLGkpLHRoaXMucmVjZWl2ZXI9cix0aGlzLm5hbWU9b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRQcm9wZXJ0eVJlYWQodGhpcyxlKX19LHl4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpKSx0aGlzLnJlY2VpdmVyPXIsdGhpcy5uYW1lPW8sdGhpcy52YWx1ZT1zfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByb3BlcnR5V3JpdGUodGhpcyxlKX19LGJ4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUsaSksdGhpcy5yZWNlaXZlcj1yLHRoaXMubmFtZT1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFNhZmVQcm9wZXJ0eVJlYWQodGhpcyxlKX19LEkwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRLZXllZFJlYWQodGhpcyxlKX19LFAwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlS2V5ZWRSZWFkKHRoaXMsZSl9fSx4eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cix0aGlzLnZhbHVlPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0S2V5ZWRXcml0ZSh0aGlzLGUpfX0sUjA9Y2xhc3MgZXh0ZW5kcyBBMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLHMpLHRoaXMuZXhwPWksdGhpcy5uYW1lPXIsdGhpcy5hcmdzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0UGlwZSh0aGlzLGUpfX0sSXM9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLnZhbHVlPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0aGlzLGUpfX0sTzA9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5KHRoaXMsZSl9fSxDeD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5rZXlzPWksdGhpcy52YWx1ZXM9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwKHRoaXMsZSl9fSxabz1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5zdHJpbmdzPWksdGhpcy5leHByZXNzaW9ucz1yfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEludGVycG9sYXRpb24odGhpcyxlKX19LGhsPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMub3BlcmF0aW9uPWksdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEJpbmFyeSh0aGlzLGUpfX0sY2M9Y2xhc3MgZXh0ZW5kcyBobHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcih0LGUsbyxzLGEpLHRoaXMub3BlcmF0b3I9aSx0aGlzLmV4cHI9cix0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy5vcGVyYXRpb249bnVsbH1zdGF0aWMgY3JlYXRlTWludXModCxlLGkpe3JldHVybiBuZXcgY2ModCxlLCItIixpLCItIixuZXcgSXModCxlLDApLGkpfXN0YXRpYyBjcmVhdGVQbHVzKHQsZSxpKXtyZXR1cm4gbmV3IGNjKHQsZSwiKyIsaSwiLSIsaSxuZXcgSXModCxlLDApKX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHZvaWQgMCE9PXQudmlzaXRVbmFyeT90LnZpc2l0VW5hcnkodGhpcyxlKTp0LnZpc2l0QmluYXJ5KHRoaXMsZSl9fSx3eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuZXhwcmVzc2lvbj1pfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByZWZpeE5vdCh0aGlzLGUpfX0sTXg9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb249aX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXROb25OdWxsQXNzZXJ0KHRoaXMsZSl9fSxicD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRDYWxsKHRoaXMsZSl9fSxrMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlQ2FsbCh0aGlzLGUpfX0sT2E9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX19LGV1PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihuZXcgU2YoMCxudWxsPT09ZT8wOmUubGVuZ3RoKSxuZXcgT2EocixudWxsPT09ZT9yOnIrZS5sZW5ndGgpKSx0aGlzLmFzdD10LHRoaXMuc291cmNlPWUsdGhpcy5sb2NhdGlvbj1pLHRoaXMuZXJyb3JzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0QVNUV2l0aFNvdXJjZT90LnZpc2l0QVNUV2l0aFNvdXJjZSh0aGlzLGUpOnRoaXMuYXN0LnZpc2l0KHQsZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZX0gaW4gJHt0aGlzLmxvY2F0aW9ufWB9fSxTeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fSxnTD1jbGFzc3t2aXNpdCh0LGUpe3QudmlzaXQodGhpcyxlKX12aXNpdFVuYXJ5KHQsZSl7dGhpcy52aXNpdCh0LmV4cHIsZSl9dmlzaXRCaW5hcnkodCxlKXt0aGlzLnZpc2l0KHQubGVmdCxlKSx0aGlzLnZpc2l0KHQucmlnaHQsZSl9dmlzaXRDaGFpbih0LGUpe3RoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7dGhpcy52aXNpdCh0LmNvbmRpdGlvbixlKSx0aGlzLnZpc2l0KHQudHJ1ZUV4cCxlKSx0aGlzLnZpc2l0KHQuZmFsc2VFeHAsZSl9dmlzaXRQaXBlKHQsZSl7dGhpcy52aXNpdCh0LmV4cCxlKSx0aGlzLnZpc2l0QWxsKHQuYXJncyxlKX12aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXt9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXt9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0S2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSksdGhpcy52aXNpdCh0LnZhbHVlLGUpfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0TGl0ZXJhbE1hcCh0LGUpe3RoaXMudmlzaXRBbGwodC52YWx1ZXMsZSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7fXZpc2l0UHJlZml4Tm90KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXROb25OdWxsQXNzZXJ0KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC52YWx1ZSxlKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRDYWxsKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXRBbGwodC5hcmdzLGUpfXZpc2l0U2FmZUNhbGwodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSksdGhpcy52aXNpdEFsbCh0LmFyZ3MsZSl9dmlzaXRBbGwodCxlKXtmb3IobGV0IGkgb2YgdCl0aGlzLnZpc2l0KGksZSl9fSxfTD1jbGFzc3t2aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdFRoaXNSZWNlaXZlcih0LGUpe3JldHVybiB0fXZpc2l0SW50ZXJwb2xhdGlvbih0LGUpe3JldHVybiBuZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7cmV0dXJuIG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQudmFsdWUpfXZpc2l0UHJvcGVydHlSZWFkKHQsZSl7cmV0dXJuIG5ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sdC5yZWNlaXZlci52aXNpdCh0aGlzKSx0Lm5hbWUpfXZpc2l0UHJvcGVydHlXcml0ZSh0LGUpe3JldHVybiBuZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0U2FmZVByb3BlcnR5UmVhZCh0LGUpe3JldHVybiBuZXcgYngodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgTzAodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpKX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IEN4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5rZXlzLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpKX12aXNpdFVuYXJ5KHQsZSl7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHIudmlzaXQodGhpcykpO2Nhc2UiLSI6cmV0dXJuIGNjLmNyZWF0ZU1pbnVzKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5leHByLnZpc2l0KHRoaXMpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biB1bmFyeSBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9fXZpc2l0QmluYXJ5KHQsZSl7cmV0dXJuIG5ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLHQubGVmdC52aXNpdCh0aGlzKSx0LnJpZ2h0LnZpc2l0KHRoaXMpKX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBuZXcgd3godC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBuZXcgTXgodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Q29uZGl0aW9uYWwodCxlKXtyZXR1cm4gbmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5jb25kaXRpb24udmlzaXQodGhpcyksdC50cnVlRXhwLnZpc2l0KHRoaXMpLHQuZmFsc2VFeHAudmlzaXQodGhpcykpfXZpc2l0UGlwZSh0LGUpe3JldHVybiBuZXcgUjAodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cC52aXNpdCh0aGlzKSx0Lm5hbWUsdGhpcy52aXNpdEFsbCh0LmFyZ3MpLHQubmFtZVNwYW4pfXZpc2l0S2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBJMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfXZpc2l0S2V5ZWRXcml0ZSh0LGUpe3JldHVybiBuZXcgeHgodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHQua2V5LnZpc2l0KHRoaXMpLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0Q2FsbCh0LGUpe3JldHVybiBuZXcgYnAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRTYWZlQ2FsbCh0LGUpe3JldHVybiBuZXcgazAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRBbGwodCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT10W2ldLnZpc2l0KHRoaXMpO3JldHVybiBlfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gbmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBQMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfX0sdkw9Y2xhc3N7dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIHR9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdEludGVycG9sYXRpb24odCxlKXtsZXQgaT10aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpO3JldHVybiBpIT09dC5leHByZXNzaW9ucz9uZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsaSk6dH12aXNpdExpdGVyYWxQcmltaXRpdmUodCxlKXtyZXR1cm4gdH12aXNpdFByb3BlcnR5UmVhZCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyP25ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4saSx0Lm5hbWUpOnR9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKSxyPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC52YWx1ZT9uZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLGksdC5uYW1lLHIpOnR9dmlzaXRTYWZlUHJvcGVydHlSZWFkKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQucmVjZWl2ZXI/bmV3IGJ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixpLHQubmFtZSk6dH12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyk7cmV0dXJuIGkhPT10LmV4cHJlc3Npb25zP25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpOnR9dmlzaXRMaXRlcmFsTWFwKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LnZhbHVlcyk7cmV0dXJuIGkhPT10LnZhbHVlcz9uZXcgQ3godC5zcGFuLHQuc291cmNlU3Bhbix0LmtleXMsaSk6dH12aXNpdFVuYXJ5KHQsZSl7bGV0IGk9dC5leHByLnZpc2l0KHRoaXMpO2lmKGkhPT10LmV4cHIpc3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3BhbixpKTtjYXNlIi0iOnJldHVybiBjYy5jcmVhdGVNaW51cyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHVuYXJ5IG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdH12aXNpdEJpbmFyeSh0LGUpe2xldCBpPXQubGVmdC52aXNpdCh0aGlzKSxyPXQucmlnaHQudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmxlZnR8fHIhPT10LnJpZ2h0P25ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLGkscik6dH12aXNpdFByZWZpeE5vdCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgd3godC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgTXgodC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Q29uZGl0aW9uYWwodCxlKXtsZXQgaT10LmNvbmRpdGlvbi52aXNpdCh0aGlzKSxyPXQudHJ1ZUV4cC52aXNpdCh0aGlzKSxvPXQuZmFsc2VFeHAudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmNvbmRpdGlvbnx8ciE9PXQudHJ1ZUV4cHx8byE9PXQuZmFsc2VFeHA/bmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyLG8pOnR9dmlzaXRQaXBlKHQsZSl7bGV0IGk9dC5leHAudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LmV4cHx8ciE9PXQuYXJncz9uZXcgUjAodC5zcGFuLHQuc291cmNlU3BhbixpLHQubmFtZSxyLHQubmFtZVNwYW4pOnR9dmlzaXRLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IEkwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fXZpc2l0S2V5ZWRXcml0ZSh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10LmtleS52aXNpdCh0aGlzKSxvPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXl8fG8hPT10LnZhbHVlP25ldyB4eCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscixvKTp0fXZpc2l0QWxsKHQpe2xldCBlPVtdLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3Ipe2xldCBvPXRbcl0scz1vLnZpc2l0KHRoaXMpO2Vbcl09cyxpPWl8fHMhPT1vfXJldHVybiBpP2U6dH12aXNpdENoYWluKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbnM/bmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4saSk6dH12aXNpdENhbGwodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MpO3JldHVybiBpIT09dC5yZWNlaXZlcnx8ciE9PXQuYXJncz9uZXcgYnAodC5zcGFuLHQuc291cmNlU3BhbixpLHIsdC5hcmd1bWVudFNwYW4pOnR9dmlzaXRTYWZlQ2FsbCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5hcmdzP25ldyBrMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscix0LmFyZ3VtZW50U3Bhbik6dH12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IFAwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fX0sUWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3RoaXMubmFtZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMudHlwZT1pLHRoaXMuc291cmNlU3Bhbj1yLHRoaXMua2V5U3Bhbj1vLHRoaXMudmFsdWVTcGFuPXMsdGhpcy5pc0xpdGVyYWw9dGhpcy50eXBlPT09Z3AuTElURVJBTF9BVFRSLHRoaXMuaXNBbmltYXRpb249dGhpcy50eXBlPT09Z3AuQU5JTUFUSU9OfX0sZ3A9KCgpPT57cmV0dXJuKG49Z3B8fChncD17fSkpW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkxJVEVSQUxfQVRUUj0xXT0iTElURVJBTF9BVFRSIixuW24uQU5JTUFUSU9OPTJdPSJBTklNQVRJT04iLGdwO3ZhciBufSkoKSxQMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLm5hbWU9dCx0aGlzLnRhcmdldE9yUGhhc2U9ZSx0aGlzLnR5cGU9aSx0aGlzLmhhbmRsZXI9cix0aGlzLnNvdXJjZVNwYW49byx0aGlzLmhhbmRsZXJTcGFuPXMsdGhpcy5rZXlTcGFuPWF9fSx5TD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vfX0sUjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlY3VyaXR5Q29udGV4dD1pLHRoaXMudmFsdWU9cix0aGlzLnVuaXQ9byx0aGlzLnNvdXJjZVNwYW49cyx0aGlzLmtleVNwYW49YSx0aGlzLnZhbHVlU3Bhbj1sfX0sRXg9Y2xhc3N7fTtmdW5jdGlvbiAkdmUobix0LGUsaSxyLG8scyl7bnx8KG49bmV3IE8xKHMpKTtsZXQgYT1mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBDTChuKTtyZXR1cm4gdC52aXNpdChlKX0obix0KX0oe2NyZWF0ZUxpdGVyYWxBcnJheUNvbnZlcnRlcjpkPT5wPT5jcihwKSxjcmVhdGVMaXRlcmFsTWFwQ29udmVydGVyOmQ9PnA9Pm1sKGQubWFwKChmLG0pPT4oe2tleTpmLmtleSx2YWx1ZTpwW21dLHF1b3RlZDpmLnF1b3RlZH0pKSksY3JlYXRlUGlwZUNvbnZlcnRlcjpkPT57dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIFN0YXRlOiBBY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBpcGVzLiBQaXBlOiAke2R9YCl9fSxlKSxsPW5ldyBUeChuLHQsaSwhMSxyLG8pLGM9W107UXEoYS52aXNpdChsLEJpLlN0YXRlbWVudCksYyksZnVuY3Rpb24obix0LGUpe2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pZS51bnNoaWZ0KFhxKHQsaSkpfShsLnRlbXBvcmFyeUNvdW50LGksYyksbC51c2VzSW1wbGljaXRSZWNlaXZlciYmbi5ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCk7bGV0IHU9Yy5sZW5ndGgtMTtpZih1Pj0wKXtsZXQgZD1jW3VdO2QgaW5zdGFuY2VvZiBsdSYmKGNbdV09bmV3IHVvKGQuZXhwcikpfXJldHVybiBjfWZ1bmN0aW9uIHFxKG4sdCxlLGkpe258fChuPW5ldyBPMSk7bGV0IHI9bmV3IFR4KG4sdCxpLCExKSxvPWUudmlzaXQocixCaS5FeHByZXNzaW9uKSxzPVlxKHIsaSk7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RtdHM9dCx0aGlzLmN1cnJWYWxFeHByPWV9fShzLG8pfWZ1bmN0aW9uIFlxKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuLnRlbXBvcmFyeUNvdW50O2krKyllLnB1c2goWHEodCxpKSk7cmV0dXJuIGV9ZnVuY3Rpb24geEwobix0KXtyZXR1cm5gdG1wXyR7bn1fJHt0fWB9ZnVuY3Rpb24gWHEobix0KXtyZXR1cm4gbmV3IGF1KHhMKG4sdCkpfUV4LmV2ZW50PU1pKCIkZXZlbnQiKTt2YXIgQmk9KCgpPT57cmV0dXJuKG49Qml8fChCaT17fSkpW24uU3RhdGVtZW50PTBdPSJTdGF0ZW1lbnQiLG5bbi5FeHByZXNzaW9uPTFdPSJFeHByZXNzaW9uIixCaTt2YXIgbn0pKCk7ZnVuY3Rpb24gRTkobix0KXtpZihuIT09QmkuRXhwcmVzc2lvbil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGV4cHJlc3Npb24sIGJ1dCBzYXcgJHt0fWApfWZ1bmN0aW9uIERzKG4sdCl7cmV0dXJuIG49PT1CaS5TdGF0ZW1lbnQ/dC50b1N0bXQoKTp0fXZhciBDTD1jbGFzcyBleHRlbmRzIF9Me2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29udmVydGVyRmFjdG9yeT10fXZpc2l0UGlwZSh0LGUpe2xldCBpPVt0LmV4cCwuLi50LmFyZ3NdLm1hcChyPT5yLnZpc2l0KHRoaXMsZSkpO3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3BhbixpLHRoaXMuX2NvbnZlcnRlckZhY3RvcnkuY3JlYXRlUGlwZUNvbnZlcnRlcih0Lm5hbWUsaS5sZW5ndGgpKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbnMubWFwKHI9PnIudmlzaXQodGhpcyxlKSk7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLGksdGhpcy5fY29udmVydGVyRmFjdG9yeS5jcmVhdGVMaXRlcmFsQXJyYXlDb252ZXJ0ZXIodC5leHByZXNzaW9ucy5sZW5ndGgpKX12aXNpdExpdGVyYWxNYXAodCxlKXtsZXQgaT10LnZhbHVlcy5tYXAocj0+ci52aXNpdCh0aGlzLGUpKTtyZXR1cm4gbmV3IF9wKHQuc3Bhbix0LnNvdXJjZVNwYW4saSx0aGlzLl9jb252ZXJ0ZXJGYWN0b3J5LmNyZWF0ZUxpdGVyYWxNYXBDb252ZXJ0ZXIodC5rZXlzKSl9fSxUeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5fbG9jYWxSZXNvbHZlcj10LHRoaXMuX2ltcGxpY2l0UmVjZWl2ZXI9ZSx0aGlzLmJpbmRpbmdJZD1pLHRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uPXIsdGhpcy5iYXNlU291cmNlU3Bhbj1vLHRoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzPXMsdGhpcy5fbm9kZU1hcD1uZXcgTWFwLHRoaXMuX3Jlc3VsdE1hcD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRUZW1wb3Jhcnk9MCx0aGlzLnRlbXBvcmFyeUNvdW50PTAsdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMX12aXNpdFVuYXJ5KHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6aT1wZi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1wZi5NaW51czticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiBEcyhlLG5ldyBveChpLHRoaXMuX3Zpc2l0KHQuZXhwcixCaS5FeHByZXNzaW9uKSx2b2lkIDAsdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRCaW5hcnkodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRpb24pe2Nhc2UiKyI6aT1obi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1obi5NaW51czticmVhaztjYXNlIioiOmk9aG4uTXVsdGlwbHk7YnJlYWs7Y2FzZSIvIjppPWhuLkRpdmlkZTticmVhaztjYXNlIiUiOmk9aG4uTW9kdWxvO2JyZWFrO2Nhc2UiJiYiOmk9aG4uQW5kO2JyZWFrO2Nhc2UifHwiOmk9aG4uT3I7YnJlYWs7Y2FzZSI9PSI6aT1obi5FcXVhbHM7YnJlYWs7Y2FzZSIhPSI6aT1obi5Ob3RFcXVhbHM7YnJlYWs7Y2FzZSI9PT0iOmk9aG4uSWRlbnRpY2FsO2JyZWFrO2Nhc2UiIT09IjppPWhuLk5vdElkZW50aWNhbDticmVhaztjYXNlIjwiOmk9aG4uTG93ZXI7YnJlYWs7Y2FzZSI+IjppPWhuLkJpZ2dlcjticmVhaztjYXNlIjw9IjppPWhuLkxvd2VyRXF1YWxzO2JyZWFrO2Nhc2UiPj0iOmk9aG4uQmlnZ2VyRXF1YWxzO2JyZWFrO2Nhc2UiPz8iOnJldHVybiB0aGlzLmNvbnZlcnROdWxsaXNoQ29hbGVzY2UodCxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uICR7dC5vcGVyYXRpb259YCl9cmV0dXJuIERzKGUsbmV3IGxyKGksdGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQucmlnaHQsQmkuRXhwcmVzc2lvbiksdm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZihuIT09QmkuU3RhdGVtZW50KXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQsIGJ1dCBzYXcgJHt0fWApfShlLHQpLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7cmV0dXJuIERzKGUsdGhpcy5fdmlzaXQodC5jb25kaXRpb24sQmkuRXhwcmVzc2lvbikuY29uZGl0aW9uYWwodGhpcy5fdmlzaXQodC50cnVlRXhwLEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQuZmFsc2VFeHAsQmkuRXhwcmVzc2lvbiksdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRQaXBlKHQsZSl7dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIHN0YXRlOiBQaXBlcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucy4gUGlwZTogJHt0Lm5hbWV9YCl9dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIEU5KGUsdCksdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyfXZpc2l0VGhpc1JlY2VpdmVyKHQsZSl7cmV0dXJuIHRoaXMudmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7aWYoIXRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIik7RTkoZSx0KTtsZXQgaT1bXTtmb3IobGV0IG89MDtvPHQuc3RyaW5ncy5sZW5ndGgtMTtvKyspaS5wdXNoKG50KHQuc3RyaW5nc1tvXSkpLGkucHVzaCh0aGlzLl92aXNpdCh0LmV4cHJlc3Npb25zW29dLEJpLkV4cHJlc3Npb24pKTtpLnB1c2gobnQodC5zdHJpbmdzW3Quc3RyaW5ncy5sZW5ndGgtMV0pKTtsZXQgcj10LnN0cmluZ3M7cmV0dXJuIDI9PT1yLmxlbmd0aCYmIiI9PT1yWzBdJiYiIj09PXJbMV0/aT1baVsxXV06dC5leHByZXNzaW9ucy5sZW5ndGg+PTkmJihpPVtjcihpKV0pLG5ldyB3TChpKX12aXNpdEtleWVkUmVhZCh0LGUpe2xldCBpPXRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KTtyZXR1cm4gaT90aGlzLmNvbnZlcnRTYWZlQWNjZXNzKHQsaSxlKTpEcyhlLHRoaXMuX3Zpc2l0KHQucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbikua2V5KHRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pKSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKSxyPXRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pLG89dGhpcy5fdmlzaXQodC52YWx1ZSxCaS5FeHByZXNzaW9uKTtyZXR1cm4gaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJnRoaXMuX2xvY2FsUmVzb2x2ZXIubWF5YmVSZXN0b3JlVmlldygpLERzKGUsaS5rZXkocikuc2V0KG8pKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogbGl0ZXJhbCBhcnJheXMgc2hvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBmdW5jdGlvbnMiKX12aXNpdExpdGVyYWxNYXAodCxlKXt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGxpdGVyYWwgbWFwcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucyIpfXZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0LGUpe3JldHVybiBEcyhlLG50KHQudmFsdWUsbnVsbD09dC52YWx1ZXx8ITA9PT10LnZhbHVlfHwhMD09PXQudmFsdWU/aWE6dm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfV9nZXRMb2NhbCh0LGUpe3JldHVybiB0aGlzLl9sb2NhbFJlc29sdmVyLmdsb2JhbHM/Lmhhcyh0KSYmZSBpbnN0YW5jZW9mIGd4P251bGw6dGhpcy5fbG9jYWxSZXNvbHZlci5nZXRMb2NhbCh0KX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBEcyhlLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyByeChuLHZvaWQgMCl9KHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSkpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBEcyhlLHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7e2xldCByPW51bGwsbz10aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyLHM9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKTtyZXR1cm4gcz09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJihyPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKSxyJiYodGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj1vLHRoaXMuYWRkSW1wbGljaXRSZWNlaXZlckFjY2Vzcyh0Lm5hbWUpKSksbnVsbD09ciYmKHI9cy5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLHIpfX12aXNpdFByb3BlcnR5V3JpdGUodCxlKXtsZXQgaT10aGlzLl92aXNpdCh0LnJlY2VpdmVyLEJpLkV4cHJlc3Npb24pLHI9dGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcixvPW51bGw7aWYoaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXIpe2xldCBzPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKTtpZihzKXtpZighKHMgaW5zdGFuY2VvZiBiMCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXNzaWduIHZhbHVlICIke3QudmFsdWUgaW5zdGFuY2VvZiBvdT90LnZhbHVlLm5hbWU6dm9pZCAwfSIgdG8gdGVtcGxhdGUgdmFyaWFibGUgIiR7dC5uYW1lfSIuIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LmApO289cyx0aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyPXIsdGhpcy5hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQubmFtZSl9fXJldHVybiBudWxsPT09byYmKG89aS5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLG8uc2V0KHRoaXMuX3Zpc2l0KHQudmFsdWUsQmkuRXhwcmVzc2lvbikpKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdEFsbCh0LGUpe3JldHVybiB0Lm1hcChpPT50aGlzLl92aXNpdChpLGUpKX12aXNpdENhbGwodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7bGV0IHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MsQmkuRXhwcmVzc2lvbik7aWYodCBpbnN0YW5jZW9mIF9wKXJldHVybiBEcyhlLHQuY29udmVydGVyKHIpKTtsZXQgbz10LnJlY2VpdmVyO2lmKG8gaW5zdGFuY2VvZiBvdSYmby5yZWNlaXZlciBpbnN0YW5jZW9mIEVmJiYhKG8ucmVjZWl2ZXIgaW5zdGFuY2VvZiBneCkmJiIkYW55Ij09PW8ubmFtZSl7aWYoMSE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYWxsIHRvICRhbnksIGV4cGVjdGVkIDEgYXJndW1lbnQgYnV0IHJlY2VpdmVkICR7ci5sZW5ndGh8fCJub25lIn1gKTtyZXR1cm4gRHMoZSxyWzBdKX1yZXR1cm4gRHMoZSx0aGlzLl92aXNpdChvLEJpLkV4cHJlc3Npb24pLmNhbGxGbihyLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0U2FmZUNhbGwodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX1fdmlzaXQodCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0TWFwLmdldCh0KXx8KHRoaXMuX25vZGVNYXAuZ2V0KHQpfHx0KS52aXNpdCh0aGlzLGUpfWNvbnZlcnRTYWZlQWNjZXNzKHQsZSxpKXtsZXQgbyxyPXRoaXMuX3Zpc2l0KGUucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbik7dGhpcy5uZWVkc1RlbXBvcmFyeUluU2FmZUFjY2VzcyhlLnJlY2VpdmVyKSYmKG89dGhpcy5hbGxvY2F0ZVRlbXBvcmFyeSgpLHI9by5zZXQociksdGhpcy5fcmVzdWx0TWFwLnNldChlLnJlY2VpdmVyLG8pKTtsZXQgcz1yLmlzQmxhbmsoKTt0aGlzLl9ub2RlTWFwLnNldChlLGUgaW5zdGFuY2VvZiBrMD9uZXcgYnAoZS5zcGFuLGUuc291cmNlU3BhbixlLnJlY2VpdmVyLGUuYXJncyxlLmFyZ3VtZW50U3Bhbik6ZSBpbnN0YW5jZW9mIFAwP25ldyBJMChlLnNwYW4sZS5zb3VyY2VTcGFuLGUucmVjZWl2ZXIsZS5rZXkpOm5ldyBvdShlLnNwYW4sZS5zb3VyY2VTcGFuLGUubmFtZVNwYW4sZS5yZWNlaXZlcixlLm5hbWUpKTtsZXQgYT10aGlzLl92aXNpdCh0LEJpLkV4cHJlc3Npb24pO3JldHVybiB0aGlzLl9ub2RlTWFwLmRlbGV0ZShlKSxvJiZ0aGlzLnJlbGVhc2VUZW1wb3JhcnkobyksRHMoaSxzLmNvbmRpdGlvbmFsKEtOLGEpKX1jb252ZXJ0TnVsbGlzaENvYWxlc2NlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHI9dGhpcy5fdmlzaXQodC5yaWdodCxCaS5FeHByZXNzaW9uKSxvPXRoaXMuYWxsb2NhdGVUZW1wb3JhcnkoKTtyZXR1cm4gdGhpcy5yZWxlYXNlVGVtcG9yYXJ5KG8pLERzKGUsby5zZXQoaSkubm90SWRlbnRpY2FsKEtOKS5hbmQoby5ub3RJZGVudGljYWwobnQodm9pZCAwKSkpLmNvbmRpdGlvbmFsKG8scikpfWxlZnRNb3N0U2FmZU5vZGUodCl7bGV0IGU9KGkscik9Pih0aGlzLl9ub2RlTWFwLmdldChyKXx8cikudmlzaXQoaSk7cmV0dXJuIHQudmlzaXQoe3Zpc2l0VW5hcnk6aT0+bnVsbCx2aXNpdEJpbmFyeTppPT5udWxsLHZpc2l0Q2hhaW46aT0+bnVsbCx2aXNpdENvbmRpdGlvbmFsOmk9Pm51bGwsdmlzaXRDYWxsKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil9LHZpc2l0U2FmZUNhbGwoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKXx8aX0sdmlzaXRJbXBsaWNpdFJlY2VpdmVyOmk9Pm51bGwsdmlzaXRUaGlzUmVjZWl2ZXI6aT0+bnVsbCx2aXNpdEludGVycG9sYXRpb246aT0+bnVsbCx2aXNpdEtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfSx2aXNpdEtleWVkV3JpdGU6aT0+bnVsbCx2aXNpdExpdGVyYWxBcnJheTppPT5udWxsLHZpc2l0TGl0ZXJhbE1hcDppPT5udWxsLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTppPT5udWxsLHZpc2l0UGlwZTppPT5udWxsLHZpc2l0UHJlZml4Tm90Omk9Pm51bGwsdmlzaXROb25OdWxsQXNzZXJ0Omk9Pm51bGwsdmlzaXRQcm9wZXJ0eVJlYWQoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKX0sdmlzaXRQcm9wZXJ0eVdyaXRlOmk9Pm51bGwsdmlzaXRTYWZlUHJvcGVydHlSZWFkKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil8fGl9LHZpc2l0U2FmZUtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfHxpfX0pfW5lZWRzVGVtcG9yYXJ5SW5TYWZlQWNjZXNzKHQpe2xldCBlPShyLG8pPT5vJiYodGhpcy5fbm9kZU1hcC5nZXQobyl8fG8pLnZpc2l0KHIpO3JldHVybiB0LnZpc2l0KHt2aXNpdFVuYXJ5KHIpe3JldHVybiBlKHRoaXMsci5leHByKX0sdmlzaXRCaW5hcnkocil7cmV0dXJuIGUodGhpcyxyLmxlZnQpfHxlKHRoaXMsci5yaWdodCl9LHZpc2l0Q2hhaW46cj0+ITEsdmlzaXRDb25kaXRpb25hbChyKXtyZXR1cm4gZSh0aGlzLHIuY29uZGl0aW9uKXx8ZSh0aGlzLHIudHJ1ZUV4cCl8fGUodGhpcyxyLmZhbHNlRXhwKX0sdmlzaXRDYWxsOnI9PiEwLHZpc2l0U2FmZUNhbGw6cj0+ITAsdmlzaXRJbXBsaWNpdFJlY2VpdmVyOnI9PiExLHZpc2l0VGhpc1JlY2VpdmVyOnI9PiExLHZpc2l0SW50ZXJwb2xhdGlvbihyKXtyZXR1cm4oKHIsbyk9Pm8uc29tZShzPT5lKHIscykpKSh0aGlzLHIuZXhwcmVzc2lvbnMpfSx2aXNpdEtleWVkUmVhZDpyPT4hMSx2aXNpdEtleWVkV3JpdGU6cj0+ITEsdmlzaXRMaXRlcmFsQXJyYXk6cj0+ITAsdmlzaXRMaXRlcmFsTWFwOnI9PiEwLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTpyPT4hMSx2aXNpdFBpcGU6cj0+ITAsdmlzaXRQcmVmaXhOb3Qocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdE5vbk51bGxBc3NlcnQocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdFByb3BlcnR5UmVhZDpyPT4hMSx2aXNpdFByb3BlcnR5V3JpdGU6cj0+ITEsdmlzaXRTYWZlUHJvcGVydHlSZWFkOnI9PiExLHZpc2l0U2FmZUtleWVkUmVhZDpyPT4hMX0pfWFsbG9jYXRlVGVtcG9yYXJ5KCl7bGV0IHQ9dGhpcy5fY3VycmVudFRlbXBvcmFyeSsrO3JldHVybiB0aGlzLnRlbXBvcmFyeUNvdW50PU1hdGgubWF4KHRoaXMuX2N1cnJlbnRUZW1wb3JhcnksdGhpcy50ZW1wb3JhcnlDb3VudCksbmV3IG1mKHhMKHRoaXMuYmluZGluZ0lkLHQpKX1yZWxlYXNlVGVtcG9yYXJ5KHQpe2lmKHRoaXMuX2N1cnJlbnRUZW1wb3JhcnktLSx0Lm5hbWUhPXhMKHRoaXMuYmluZGluZ0lkLHRoaXMuX2N1cnJlbnRUZW1wb3JhcnkpKXRocm93IG5ldyBFcnJvcihgVGVtcG9yYXJ5ICR7dC5uYW1lfSByZWxlYXNlZCBvdXQgb2Ygb3JkZXJgKX1jb252ZXJ0U291cmNlU3Bhbih0KXtpZih0aGlzLmJhc2VTb3VyY2VTcGFuKXtsZXQgZT10aGlzLmJhc2VTb3VyY2VTcGFuLnN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KSxpPXRoaXMuYmFzZVNvdXJjZVNwYW4uc3RhcnQubW92ZUJ5KHQuZW5kKSxyPXRoaXMuYmFzZVNvdXJjZVNwYW4uZnVsbFN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KTtyZXR1cm4gbmV3IFRvKGUsaSxyKX1yZXR1cm4gbnVsbH1hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQpe3RoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzJiZ0aGlzLmltcGxpY2l0UmVjZWl2ZXJBY2Nlc3Nlcy5hZGQodCl9fTtmdW5jdGlvbiBRcShuLHQpe0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKGU9PlFxKGUsdCkpOnQucHVzaChuKX1mdW5jdGlvbiBUTigpe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uIil9dmFyIHdMPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCl7c3VwZXIobnVsbCxudWxsKSx0aGlzLmFyZ3M9dCx0aGlzLmlzQ29uc3RhbnQ9VE4sdGhpcy5pc0VxdWl2YWxlbnQ9VE4sdGhpcy52aXNpdEV4cHJlc3Npb249VE59fSxPMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbHM9dH1ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCl7fW1heWJlUmVzdG9yZVZpZXcoKXt9Z2V0TG9jYWwodCl7cmV0dXJuIHQ9PT1FeC5ldmVudC5uYW1lP0V4LmV2ZW50Om51bGx9fSxfcD1jbGFzcyBleHRlbmRzIGJwe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxuZXcgbmEodCxlKSxpLG51bGwpLHRoaXMuY29udmVydGVyPXJ9fSxveWU9L3BvbHlmaWxsLW5leHQtc2VsZWN0b3JbXn1dKmNvbnRlbnQ6W1xzXSo/KFsnIl0pKC4qPylcMVs7XHNdKn0oW157XSo/KXsvZ2ltLHN5ZT0vKHBvbHlmaWxsLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxUOT0vKHBvbHlmaWxsLXVuc2NvcGVkLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxrMT0iLXNoYWRvd2Nzc2hvc3QiLGczPSItc2hhZG93Y3NzY29udGV4dCIsXzM9Iig/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSk/KFteLHtdKikiLGF5ZT1uZXcgUmVnRXhwKGsxK18zLCJnaW0iKSxseWU9bmV3IFJlZ0V4cChnMytfMywiZ2ltIiksY3llPW5ldyBSZWdFeHAoZzMrXzMsImltIiksc2Y9azErIi1uby1jb21iaW5hdG9yIixEOT0vLXNoYWRvd2Nzc2hvc3Qtbm8tY29tYmluYXRvcihbXlxzXSopLyx1eWU9Wy86OnNoYWRvdy9nLC86OmNvbnRlbnQvZywvXC9zaGFkb3ctZGVlcFwvL2csL1wvc2hhZG93XC8vZ10sQTk9Lyg/Oj4+Pil8KD86XC9kZWVwXC8pfCg/Ojo6bmctZGVlcCkvZyxkMD0vLXNoYWRvd2Nzc2hvc3QvZ2ltLHB5ZT0vOmhvc3QvZ2ltLGh5ZT0vOmhvc3QtY29udGV4dC9naW0sZnllPS9cL1wqW1xzXFNdKj9cKlwvL2csZ3llPS9cL1wqXHMqI1xzKnNvdXJjZShNYXBwaW5nKT9VUkw9W1xzXFNdKz9cKlwvL2csRE49IiVCTE9DSyUiLHl5ZT0vKFxzKikoW147XHtcfV0rPykoXHMqKSgoPzp7JUJMT0NLJX0/XHMqOz8pfCg/OlxzKjspKS9nLGJ5ZT0vJVFVT1RFRCUvZyx4eWU9bmV3IE1hcChbWyJ7IiwifSJdXSksQ3llPW5ldyBNYXAoW1snIicsJyInXSxbIiciLCInIl1dKSxEeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc2VsZWN0b3I9dCx0aGlzLmNvbnRlbnQ9ZX19O2Z1bmN0aW9uIEk5KG4sdCl7bGV0IGU9UDkobixDeWUsIiVRVU9URUQlIiksaT1QOShlLmVzY2FwZWRTdHJpbmcseHllLEROKSxyPTAsbz0wO3JldHVybiBpLmVzY2FwZWRTdHJpbmcucmVwbGFjZSh5eWUsKC4uLnMpPT57bGV0IGE9c1syXSxsPSIiLGM9c1s0XSx1PSIiO2MmJmMuc3RhcnRzV2l0aCgieyIrRE4pJiYobD1pLmJsb2Nrc1tyKytdLGM9Yy5zdWJzdHJpbmcoRE4ubGVuZ3RoKzEpLHU9InsiKTtsZXQgZD10KG5ldyBEeChhLGwpKTtyZXR1cm5gJHtzWzFdfSR7ZC5zZWxlY3Rvcn0ke3NbM119JHt1fSR7ZC5jb250ZW50fSR7Y31gfSkucmVwbGFjZShieWUsKCk9PmUuYmxvY2tzW28rK10pfWZ1bmN0aW9uIFA5KG4sdCxlKXtsZXQgbCxjLGk9W10scj1bXSxvPTAscz0wLGE9LTE7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kyspe2xldCBkPW5bdV07IlxcIj09PWQ/dSsrOmQ9PT1jPyhvLS0sMD09PW8mJihyLnB1c2gobi5zdWJzdHJpbmcoYSx1KSksaS5wdXNoKGUpLHM9dSxhPS0xLGw9Yz12b2lkIDApKTpkPT09bD9vKys6MD09PW8mJnQuaGFzKGQpJiYobD1kLGM9dC5nZXQoZCksbz0xLGE9dSsxLGkucHVzaChuLnN1YnN0cmluZyhzLGEpKSl9cmV0dXJuLTEhPT1hPyhyLnB1c2gobi5zdWJzdHJpbmcoYSkpLGkucHVzaChlKSk6aS5wdXNoKG4uc3Vic3RyaW5nKHMpKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmVzY2FwZWRTdHJpbmc9dCx0aGlzLmJsb2Nrcz1lfX0oaS5qb2luKCIiKSxyKX1mdW5jdGlvbiBNeWUobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IobGV0IGk9MTtpPHQ7aSsrKWZvcihsZXQgcj0wO3I8ZTtyKyspbltyK2kqZV09bltyXS5zbGljZSgwKX1mdW5jdGlvbiBSOShuKXtsZXQgdD1uLmNoYXJDb2RlQXQoMCk7aWYodD09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoMzk9PXR8fDM0PT10KSl7bGV0IGk9bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKTstMT09aS5pbmRleE9mKCInIikmJi0xPT1pLmluZGV4T2YoJyInKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gS3Eobil7cmV0dXJuIG4ucmVwbGFjZSgvW2Etel1bQS1aXS9nLHQ9PnQuY2hhckF0KDApKyItIit0LmNoYXJBdCgxKSkudG9Mb3dlckNhc2UoKX12YXIgTjE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZGlyZWN0aXZlRXhwcj10LHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITEsdGhpcy5oYXNCaW5kaW5ncz0hMSx0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSExLHRoaXMuX2NsYXNzTWFwSW5wdXQ9bnVsbCx0aGlzLl9zdHlsZU1hcElucHV0PW51bGwsdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9bnVsbCx0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz1udWxsLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9bnVsbCx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD1udWxsLHRoaXMuX3N0eWxlc0luZGV4PW5ldyBNYXAsdGhpcy5fY2xhc3Nlc0luZGV4PW5ldyBNYXAsdGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzPVtdLHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz1bXX1yZWdpc3RlckJvdW5kSW5wdXQodCl7bGV0IGU9bnVsbCxpPXQubmFtZTtzd2l0Y2godC50eXBlKXtjYXNlIDA6ZT10aGlzLnJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZShpLHQudmFsdWUsdC5zb3VyY2VTcGFuKTticmVhaztjYXNlIDM6ZT10aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChpLCExLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudW5pdCk7YnJlYWs7Y2FzZSAyOmU9dGhpcy5yZWdpc3RlckNsYXNzSW5wdXQoaSwhMSx0LnZhbHVlLHQuc291cmNlU3Bhbil9cmV0dXJuISFlfXJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZSh0LGUsaSl7bGV0IHI9bnVsbCxvPXQuc3Vic3RyaW5nKDAsNikscz0ic3R5bGUiPT09dHx8InN0eWxlLiI9PT1vfHwic3R5bGUhIj09PW87aWYoc3x8IXMmJigiY2xhc3MiPT09dHx8ImNsYXNzLiI9PT1vfHwiY2xhc3MhIj09PW8pKXtsZXQgbD0iLiIhPT10LmNoYXJBdCg1KSxjPXQuc2xpY2UobD81OjYpO3I9cz90aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChjLGwsZSxpKTp0aGlzLnJlZ2lzdGVyQ2xhc3NJbnB1dChjLGwsZSxpKX1yZXR1cm4gcn1yZWdpc3RlclN0eWxlSW5wdXQodCxlLGkscixvKXtpZihGOShpKSlyZXR1cm4gbnVsbDt0LnN0YXJ0c1dpdGgoIi0tIil8fCh0PUtxKHQpKTtsZXR7cHJvcGVydHk6cyxoYXNPdmVycmlkZUZsYWc6YSxzdWZmaXg6bH09azkodCksYz17bmFtZTpzLHN1ZmZpeDpvPSJzdHJpbmciPT10eXBlb2YgbyYmMCE9PW8ubGVuZ3RoP286bCx2YWx1ZTppLHNvdXJjZVNwYW46cixoYXNPdmVycmlkZUZsYWc6YX07cmV0dXJuIGU/dGhpcy5fc3R5bGVNYXBJbnB1dD1jOigodGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9dGhpcy5fc2luZ2xlU3R5bGVJbnB1dHN8fFtdKS5wdXNoKGMpLE85KHRoaXMuX3N0eWxlc0luZGV4LHMpKSx0aGlzLl9sYXN0U3R5bGluZ0lucHV0PWMsdGhpcy5fZmlyc3RTdHlsaW5nSW5wdXQ9dGhpcy5fZmlyc3RTdHlsaW5nSW5wdXR8fGMsdGhpcy5fY2hlY2tGb3JQaXBlcyhpKSx0aGlzLmhhc0JpbmRpbmdzPSEwLGN9cmVnaXN0ZXJDbGFzc0lucHV0KHQsZSxpLHIpe2lmKEY5KGkpKXJldHVybiBudWxsO2xldHtwcm9wZXJ0eTpvLGhhc092ZXJyaWRlRmxhZzpzfT1rOSh0KSxhPXtuYW1lOm8sdmFsdWU6aSxzb3VyY2VTcGFuOnIsaGFzT3ZlcnJpZGVGbGFnOnMsc3VmZml4Om51bGx9O3JldHVybiBlP3RoaXMuX2NsYXNzTWFwSW5wdXQ9YTooKHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzPXRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzfHxbXSkucHVzaChhKSxPOSh0aGlzLl9jbGFzc2VzSW5kZXgsbykpLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9YSx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD10aGlzLl9maXJzdFN0eWxpbmdJbnB1dHx8YSx0aGlzLl9jaGVja0ZvclBpcGVzKGkpLHRoaXMuaGFzQmluZGluZ3M9ITAsYX1fY2hlY2tGb3JQaXBlcyh0KXt0IGluc3RhbmNlb2YgZXUmJnQuYXN0IGluc3RhbmNlb2YgUjAmJih0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSEwKX1yZWdpc3RlclN0eWxlQXR0cih0KXt0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXM9ZnVuY3Rpb24obil7bGV0IHQ9W10sZT0wLGk9MCxyPTAsbz0wLHM9MCxhPW51bGwsbD0hMTtmb3IoO2U8bi5sZW5ndGg7KXN3aXRjaChuLmNoYXJDb2RlQXQoZSsrKSl7Y2FzZSA0MDppKys7YnJlYWs7Y2FzZSA0MTppLS07YnJlYWs7Y2FzZSAzOTpsPWx8fG8+MCwwPT09cj9yPTM5OjM5PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSAzNDpsPWx8fG8+MCwwPT09cj9yPTM0OjM0PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSA1ODohYSYmMD09PWkmJjA9PT1yJiYoYT1LcShuLnN1YnN0cmluZyhzLGUtMSkudHJpbSgpKSxvPWUpO2JyZWFrO2Nhc2UgNTk6aWYoYSYmbz4wJiYwPT09aSYmMD09PXIpe2xldCB1PW4uc3Vic3RyaW5nKG8sZS0xKS50cmltKCk7dC5wdXNoKGEsbD9SOSh1KTp1KSxzPWUsbz0wLGE9bnVsbCxsPSExfX1pZihhJiZvKXtsZXQgYz1uLnNsaWNlKG8pLnRyaW0oKTt0LnB1c2goYSxsP1I5KGMpOmMpfXJldHVybiB0fSh0KSx0aGlzLl9oYXNJbml0aWFsVmFsdWVzPSEwfXJlZ2lzdGVyQ2xhc3NBdHRyKHQpe3RoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz10LnRyaW0oKS5zcGxpdCgvXHMrL2cpLHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITB9cG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKHQpe2lmKHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcy5sZW5ndGgpe3QucHVzaChudCgxKSk7Zm9yKGxldCBlPTA7ZTx0aGlzLl9pbml0aWFsQ2xhc3NWYWx1ZXMubGVuZ3RoO2UrKyl0LnB1c2gobnQodGhpcy5faW5pdGlhbENsYXNzVmFsdWVzW2VdKSl9aWYodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzLmxlbmd0aCl7dC5wdXNoKG50KDIpKTtmb3IobGV0IGU9MDtlPHRoaXMuX2luaXRpYWxTdHlsZVZhbHVlcy5sZW5ndGg7ZSs9Mil0LnB1c2gobnQodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzW2VdKSxudCh0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXNbZSsxXSkpfX1hc3NpZ25Ib3N0QXR0cnModCxlKXt0aGlzLl9kaXJlY3RpdmVFeHByJiYodC5sZW5ndGh8fHRoaXMuX2hhc0luaXRpYWxWYWx1ZXMpJiYodGhpcy5wb3B1bGF0ZUluaXRpYWxTdHlsaW5nQXR0cnModCksZS5zZXQoImhvc3RBdHRycyIsY3IodCkpKX1idWlsZENsYXNzTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX2NsYXNzTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITAsdGhpcy5fY2xhc3NNYXBJbnB1dCk6bnVsbH1idWlsZFN0eWxlTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0eWxlTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITEsdGhpcy5fc3R5bGVNYXBJbnB1dCk6bnVsbH1fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsZSxpKXtsZXQgcyxyPTIsbz1pLnZhbHVlLnZpc2l0KHQpO3JldHVybiBvIGluc3RhbmNlb2YgWm8/KHIrPW8uZXhwcmVzc2lvbnMubGVuZ3RoLHM9ZT9mdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5jbGFzc01hcDtjYXNlIDM6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGVWfX0obyk6ZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsuc3R5bGVNYXA7Y2FzZSAzOnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlVn19KG8pKTpzPWU/Sy5jbGFzc01hcDpLLnN0eWxlTWFwLHtyZWZlcmVuY2U6cyxjYWxsczpbe3N1cHBvcnRzSW50ZXJwb2xhdGlvbjohMCxzb3VyY2VTcGFuOmkuc291cmNlU3BhbixhbGxvY2F0ZUJpbmRpbmdTbG90czpyLHBhcmFtczphPT57bGV0IGw9YShvKTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sOltsXX19XX19X2J1aWxkU2luZ2xlSW5wdXRzKHQsZSxpLHIsbyl7bGV0IHM9W107cmV0dXJuIGUuZm9yRWFjaChhPT57bGV0IGw9c1tzLmxlbmd0aC0xXSxjPWEudmFsdWUudmlzaXQoaSksdT10LGQ9MjtjIGluc3RhbmNlb2YgWm8mJihkKz1jLmV4cHJlc3Npb25zLmxlbmd0aCxyJiYodT1yKGMpKSk7bGV0IHA9e3NvdXJjZVNwYW46YS5zb3VyY2VTcGFuLGFsbG9jYXRlQmluZGluZ1Nsb3RzOmQsc3VwcG9ydHNJbnRlcnBvbGF0aW9uOiEhcixwYXJhbXM6aD0+e2xldCBmPVtdO2YucHVzaChudChhLm5hbWUpKTtsZXQgbT1oKGMpO3JldHVybiBBcnJheS5pc0FycmF5KG0pP2YucHVzaCguLi5tKTpmLnB1c2gobSksIW8mJm51bGwhPT1hLnN1ZmZpeCYmZi5wdXNoKG50KGEuc3VmZml4KSksZn19O2wmJmwucmVmZXJlbmNlPT09dT9sLmNhbGxzLnB1c2gocCk6cy5wdXNoKHtyZWZlcmVuY2U6dSxjYWxsczpbcF19KX0pLHN9X2J1aWxkQ2xhc3NJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuY2xhc3NQcm9wLHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzLHQsbnVsbCwhMCk6W119X2J1aWxkU3R5bGVJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuc3R5bGVQcm9wLHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzLHQsQXllLCExKTpbXX1idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKHQpe2xldCBlPVtdO2lmKHRoaXMuaGFzQmluZGluZ3Mpe2xldCBpPXRoaXMuYnVpbGRTdHlsZU1hcEluc3RydWN0aW9uKHQpO2kmJmUucHVzaChpKTtsZXQgcj10aGlzLmJ1aWxkQ2xhc3NNYXBJbnN0cnVjdGlvbih0KTtyJiZlLnB1c2gociksZS5wdXNoKC4uLnRoaXMuX2J1aWxkU3R5bGVJbnB1dHModCkpLGUucHVzaCguLi50aGlzLl9idWlsZENsYXNzSW5wdXRzKHQpKX1yZXR1cm4gZX19O2Z1bmN0aW9uIE85KG4sdCl7bi5oYXModCl8fG4uc2V0KHQsbi5zaXplKX1mdW5jdGlvbiBrOShuKXtsZXQgdD0hMSxlPW4uaW5kZXhPZigiIWltcG9ydGFudCIpOy0xIT09ZSYmKG49ZT4wP24uc3Vic3RyaW5nKDAsZSk6IiIsdD0hMCk7bGV0IGk9bnVsbCxyPW4sbz1uLmxhc3RJbmRleE9mKCIuIik7cmV0dXJuIG8+MCYmKGk9bi5zbGljZShvKzEpLHI9bi5zdWJzdHJpbmcoMCxvKSkse3Byb3BlcnR5OnIsc3VmZml4OmksaGFzT3ZlcnJpZGVGbGFnOnR9fWZ1bmN0aW9uIEF5ZShuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5zdHlsZVByb3A7Y2FzZSAzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlMTtjYXNlIDU6cmV0dXJuIEsuc3R5bGVQcm9wSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNDtjYXNlIDExOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNztjYXNlIDE3OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlVn19ZnVuY3Rpb24gRjkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBldSYmKG49bi5hc3QpLG4gaW5zdGFuY2VvZiBuYX12YXIgSm49KCgpPT57cmV0dXJuKG49Sm58fChKbj17fSkpW24uQ2hhcmFjdGVyPTBdPSJDaGFyYWN0ZXIiLG5bbi5JZGVudGlmaWVyPTFdPSJJZGVudGlmaWVyIixuW24uUHJpdmF0ZUlkZW50aWZpZXI9Ml09IlByaXZhdGVJZGVudGlmaWVyIixuW24uS2V5d29yZD0zXT0iS2V5d29yZCIsbltuLlN0cmluZz00XT0iU3RyaW5nIixuW24uT3BlcmF0b3I9NV09Ik9wZXJhdG9yIixuW24uTnVtYmVyPTZdPSJOdW1iZXIiLG5bbi5FcnJvcj03XT0iRXJyb3IiLEpuO3ZhciBufSkoKSxQeWU9WyJ2YXIiLCJsZXQiLCJhcyIsIm51bGwiLCJ1bmRlZmluZWQiLCJ0cnVlIiwiZmFsc2UiLCJpZiIsImVsc2UiLCJ0aGlzIl0sTDE9Y2xhc3N7dG9rZW5pemUodCl7bGV0IGU9bmV3IFRMKHQpLGk9W10scj1lLnNjYW5Ub2tlbigpO2Zvcig7bnVsbCE9cjspaS5wdXNoKHIpLHI9ZS5zY2FuVG9rZW4oKTtyZXR1cm4gaX19LHVjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5pbmRleD10LHRoaXMuZW5kPWUsdGhpcy50eXBlPWksdGhpcy5udW1WYWx1ZT1yLHRoaXMuc3RyVmFsdWU9b31pc0NoYXJhY3Rlcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5DaGFyYWN0ZXImJnRoaXMubnVtVmFsdWU9PXR9aXNOdW1iZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5OdW1iZXJ9aXNTdHJpbmcoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5TdHJpbmd9aXNPcGVyYXRvcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5PcGVyYXRvciYmdGhpcy5zdHJWYWx1ZT09dH1pc0lkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5JZGVudGlmaWVyfWlzUHJpdmF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5Qcml2YXRlSWRlbnRpZmllcn1pc0tleXdvcmQoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkfWlzS2V5d29yZExldCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJsZXQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmImFzIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmROdWxsKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmIm51bGwiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFVuZGVmaW5lZCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJ1bmRlZmluZWQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRydWUoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidHJ1ZSI9PXRoaXMuc3RyVmFsdWV9aXNLZXl3b3JkRmFsc2UoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYiZmFsc2UiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRoaXMoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidGhpcyI9PXRoaXMuc3RyVmFsdWV9aXNFcnJvcigpe3JldHVybiB0aGlzLnR5cGU9PUpuLkVycm9yfXRvTnVtYmVyKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uTnVtYmVyP3RoaXMubnVtVmFsdWU6LTF9dG9TdHJpbmcoKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlIEpuLkNoYXJhY3RlcjpjYXNlIEpuLklkZW50aWZpZXI6Y2FzZSBKbi5LZXl3b3JkOmNhc2UgSm4uT3BlcmF0b3I6Y2FzZSBKbi5Qcml2YXRlSWRlbnRpZmllcjpjYXNlIEpuLlN0cmluZzpjYXNlIEpuLkVycm9yOnJldHVybiB0aGlzLnN0clZhbHVlO2Nhc2UgSm4uTnVtYmVyOnJldHVybiB0aGlzLm51bVZhbHVlLnRvU3RyaW5nKCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19fTtmdW5jdGlvbiBOOShuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uQ2hhcmFjdGVyLGUsU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZnVuY3Rpb24gQU4obix0LGUpe3JldHVybiBuZXcgdWMobix0LEpuLk9wZXJhdG9yLDAsZSl9dmFyIElOPW5ldyB1YygtMSwtMSxKbi5DaGFyYWN0ZXIsMCwiIiksVEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbnB1dD10LHRoaXMucGVlaz0wLHRoaXMuaW5kZXg9LTEsdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5hZHZhbmNlKCl9YWR2YW5jZSgpe3RoaXMucGVlaz0rK3RoaXMuaW5kZXg+PXRoaXMubGVuZ3RoPzA6dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpfXNjYW5Ub2tlbigpe2xldCB0PXRoaXMuaW5wdXQsZT10aGlzLmxlbmd0aCxpPXRoaXMucGVlayxyPXRoaXMuaW5kZXg7Zm9yKDtpPD0zMjspe2lmKCsrcj49ZSl7aT0wO2JyZWFrfWk9dC5jaGFyQ29kZUF0KHIpfWlmKHRoaXMucGVlaz1pLHRoaXMuaW5kZXg9cixyPj1lKXJldHVybiBudWxsO2lmKEw5KGkpKXJldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCk7aWYocHAoaSkpcmV0dXJuIHRoaXMuc2Nhbk51bWJlcihyKTtsZXQgbz1yO3N3aXRjaChpKXtjYXNlIDQ2OnJldHVybiB0aGlzLmFkdmFuY2UoKSxwcCh0aGlzLnBlZWspP3RoaXMuc2Nhbk51bWJlcihvKTpOOShvLHRoaXMuaW5kZXgsNDYpO2Nhc2UgNDA6Y2FzZSA0MTpjYXNlIGZwOmNhc2UgdHU6Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDQ6Y2FzZSA1ODpjYXNlIDU5OnJldHVybiB0aGlzLnNjYW5DaGFyYWN0ZXIobyxpKTtjYXNlIDM5OmNhc2UgMzQ6cmV0dXJuIHRoaXMuc2NhblN0cmluZygpO2Nhc2UgMzU6cmV0dXJuIHRoaXMuc2NhblByaXZhdGVJZGVudGlmaWVyKCk7Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDI6Y2FzZSA0NzpjYXNlIDM3OmNhc2UgOTQ6cmV0dXJuIHRoaXMuc2Nhbk9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7Y2FzZSA2MzpyZXR1cm4gdGhpcy5zY2FuUXVlc3Rpb24obyk7Y2FzZSA2MDpjYXNlIDYyOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iik7Y2FzZSAzMzpjYXNlIDYxOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iiw2MSwiPSIpO2Nhc2UgMzg6cmV0dXJuIHRoaXMuc2NhbkNvbXBsZXhPcGVyYXRvcihvLCImIiwzOCwiJiIpO2Nhc2UgMTI0OnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobywifCIsMTI0LCJ8Iik7Y2FzZSAxNjA6Zm9yKDtmMyh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtyZXR1cm4gdGhpcy5zY2FuVG9rZW4oKX1yZXR1cm4gdGhpcy5hZHZhbmNlKCksdGhpcy5lcnJvcihgVW5leHBlY3RlZCBjaGFyYWN0ZXIgWyR7U3RyaW5nLmZyb21DaGFyQ29kZShpKX1dYCwwKX1zY2FuQ2hhcmFjdGVyKHQsZSl7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLE45KHQsdGhpcy5pbmRleCxlKX1zY2FuT3BlcmF0b3IodCxlKXtyZXR1cm4gdGhpcy5hZHZhbmNlKCksQU4odCx0aGlzLmluZGV4LGUpfXNjYW5Db21wbGV4T3BlcmF0b3IodCxlLGkscixvLHMpe3RoaXMuYWR2YW5jZSgpO2xldCBhPWU7cmV0dXJuIHRoaXMucGVlaz09aSYmKHRoaXMuYWR2YW5jZSgpLGErPXIpLG51bGwhPW8mJnRoaXMucGVlaz09byYmKHRoaXMuYWR2YW5jZSgpLGErPXMpLEFOKHQsdGhpcy5pbmRleCxhKX1zY2FuSWRlbnRpZmllcigpe2xldCB0PXRoaXMuaW5kZXg7Zm9yKHRoaXMuYWR2YW5jZSgpO0I5KHRoaXMucGVlayk7KXRoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7cmV0dXJuIFB5ZS5pbmRleE9mKGUpPi0xP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5LZXl3b3JkLDAsZSl9KHQsdGhpcy5pbmRleCxlKTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uSWRlbnRpZmllciwwLGUpfSh0LHRoaXMuaW5kZXgsZSl9c2NhblByaXZhdGVJZGVudGlmaWVyKCl7bGV0IHQ9dGhpcy5pbmRleDtpZih0aGlzLmFkdmFuY2UoKSwhTDkodGhpcy5wZWVrKSlyZXR1cm4gdGhpcy5lcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgWyNdIiwtMSk7Zm9yKDtCOSh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uUHJpdmF0ZUlkZW50aWZpZXIsMCxlKX0odCx0aGlzLmluZGV4LGUpfXNjYW5OdW1iZXIodCl7bGV0IGU9dGhpcy5pbmRleD09PXQsaT0hMTtmb3IodGhpcy5hZHZhbmNlKCk7Oyl7aWYoIXBwKHRoaXMucGVlaykpaWYoOTU9PT10aGlzLnBlZWspe2lmKCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleC0xKSl8fCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSkpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgbnVtZXJpYyBzZXBhcmF0b3IiLDApO2k9ITB9ZWxzZSBpZig0Nj09PXRoaXMucGVlayllPSExO2Vsc2V7aWYoMTAxIT0obj10aGlzLnBlZWspJiY2OSE9bilicmVhaztpZih0aGlzLmFkdmFuY2UoKSxWeWUodGhpcy5wZWVrKSYmdGhpcy5hZHZhbmNlKCksIXBwKHRoaXMucGVlaykpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgZXhwb25lbnQiLC0xKTtlPSExfXRoaXMuYWR2YW5jZSgpfXZhciBuO2xldCByPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7aSYmKHI9ci5yZXBsYWNlKC9fL2csIiIpKTtsZXQgbz1lP2Z1bmN0aW9uKG4pe2xldCB0PXBhcnNlSW50KG4pO2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrbik7cmV0dXJuIHR9KHIpOnBhcnNlRmxvYXQocik7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5OdW1iZXIsZSwiIil9KHQsdGhpcy5pbmRleCxvKX1zY2FuU3RyaW5nKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMucGVlazt0aGlzLmFkdmFuY2UoKTtsZXQgaT0iIixyPXRoaXMuaW5kZXgsbz10aGlzLmlucHV0O2Zvcig7dGhpcy5wZWVrIT1lOylpZig5Mj09dGhpcy5wZWVrKXtsZXQgYTtpZihpKz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpLHRoaXMuYWR2YW5jZSgpLHRoaXMucGVlaz10aGlzLnBlZWssMTE3PT10aGlzLnBlZWspe2xldCBsPW8uc3Vic3RyaW5nKHRoaXMuaW5kZXgrMSx0aGlzLmluZGV4KzUpO2lmKCEvXlswLTlhLWZdKyQvaS50ZXN0KGwpKXJldHVybiB0aGlzLmVycm9yKGBJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIFtcXHUke2x9XWAsMCk7YT1wYXJzZUludChsLDE2KTtmb3IobGV0IGM9MDtjPDU7YysrKXRoaXMuYWR2YW5jZSgpfWVsc2UgYT1IeWUodGhpcy5wZWVrKSx0aGlzLmFkdmFuY2UoKTtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpLHI9dGhpcy5pbmRleH1lbHNle2lmKDA9PXRoaXMucGVlaylyZXR1cm4gdGhpcy5lcnJvcigiVW50ZXJtaW5hdGVkIHF1b3RlIiwwKTt0aGlzLmFkdmFuY2UoKX1sZXQgcz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpO3JldHVybiB0aGlzLmFkdmFuY2UoKSxmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uU3RyaW5nLDAsZSl9KHQsdGhpcy5pbmRleCxpK3MpfXNjYW5RdWVzdGlvbih0KXt0aGlzLmFkdmFuY2UoKTtsZXQgZT0iPyI7cmV0dXJuKDYzPT09dGhpcy5wZWVrfHw0Nj09PXRoaXMucGVlaykmJihlKz00Nj09PXRoaXMucGVlaz8iLiI6Ij8iLHRoaXMuYWR2YW5jZSgpKSxBTih0LHRoaXMuaW5kZXgsZSl9ZXJyb3IodCxlKXtsZXQgaT10aGlzLmluZGV4K2U7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5FcnJvciwwLGUpfShpLHRoaXMuaW5kZXgsYExleGVyIEVycm9yOiAke3R9IGF0IGNvbHVtbiAke2l9IGluIGV4cHJlc3Npb24gWyR7dGhpcy5pbnB1dH1dYCl9fTtmdW5jdGlvbiBMOShuKXtyZXR1cm4gOTc8PW4mJm48PTEyMnx8NjU8PW4mJm48PTkwfHw5NT09bnx8MzY9PW59ZnVuY3Rpb24gQjkobil7cmV0dXJuIG0zKG4pfHxwcChuKXx8OTU9PW58fDM2PT1ufWZ1bmN0aW9uIFZ5ZShuKXtyZXR1cm4gNDU9PW58fDQzPT1ufWZ1bmN0aW9uIEh5ZShuKXtzd2l0Y2gobil7Y2FzZSAxMTA6cmV0dXJuIDEwO2Nhc2UgMTAyOnJldHVybiAxMjtjYXNlIDExNDpyZXR1cm4gMTM7Y2FzZSAxMTY6cmV0dXJuIDk7Y2FzZSAxMTg6cmV0dXJuIDExO2RlZmF1bHQ6cmV0dXJuIG59fXZhciBCMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9sZXhlcj10LHRoaXMuZXJyb3JzPVtdfXBhcnNlQWN0aW9uKHQsZSxpLHIsbz0kYyl7dGhpcy5fY2hlY2tOb0ludGVycG9sYXRpb24odCxpLG8pO2xldCBzPXRoaXMuX3N0cmlwQ29tbWVudHModCksYT10aGlzLl9sZXhlci50b2tlbml6ZShzKSxsPTE7ZSYmKGx8PTIpO2xldCBjPW5ldyBsZih0LGkscixhLGwsdGhpcy5lcnJvcnMsMCkucGFyc2VDaGFpbigpO3JldHVybiBuZXcgZXUoYyx0LGkscix0aGlzLmVycm9ycyl9cGFyc2VCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKTtyZXR1cm4gbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfWNoZWNrU2ltcGxlRXhwcmVzc2lvbih0KXtsZXQgZT1uZXcgSUw7cmV0dXJuIHQudmlzaXQoZSksZS5lcnJvcnN9cGFyc2VTaW1wbGVCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKSxzPXRoaXMuY2hlY2tTaW1wbGVFeHByZXNzaW9uKG8pO3JldHVybiBzLmxlbmd0aD4wJiZ0aGlzLl9yZXBvcnRFcnJvcihgSG9zdCBiaW5kaW5nIGV4cHJlc3Npb24gY2Fubm90IGNvbnRhaW4gJHtzLmpvaW4oIiAiKX1gLHQsZSksbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfV9yZXBvcnRFcnJvcih0LGUsaSxyKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBteCh0LGUsaSxyKSl9X3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKXt0aGlzLl9jaGVja05vSW50ZXJwb2xhdGlvbih0LGUscik7bGV0IG89dGhpcy5fc3RyaXBDb21tZW50cyh0KSxzPXRoaXMuX2xleGVyLnRva2VuaXplKG8pO3JldHVybiBuZXcgbGYodCxlLGkscywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKX1wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz10aGlzLl9sZXhlci50b2tlbml6ZShlKTtyZXR1cm4gbmV3IGxmKGUsaSxvLHMsMCx0aGlzLmVycm9ycywwKS5wYXJzZVRlbXBsYXRlQmluZGluZ3Moe3NvdXJjZTp0LHNwYW46bmV3IE9hKHIscit0Lmxlbmd0aCl9KX1wYXJzZUludGVycG9sYXRpb24odCxlLGkscixvPSRjKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmEsb2Zmc2V0czpsfT10aGlzLnNwbGl0SW50ZXJwb2xhdGlvbih0LGUscixvKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDsrK3Upe2xldCBwPXRoaXMuX3N0cmlwQ29tbWVudHMoYVt1XS50ZXh0KSxoPXRoaXMuX2xleGVyLnRva2VuaXplKHApLGY9bmV3IGxmKHQsZSxpLGgsMCx0aGlzLmVycm9ycyxsW3VdKS5wYXJzZUNoYWluKCk7Yy5wdXNoKGYpfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYXRpb25Bc3Qocy5tYXAodT0+dS50ZXh0KSxjLHQsZSxpKX1wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsZSxpKXtsZXQgcj10aGlzLl9zdHJpcENvbW1lbnRzKHQpLG89dGhpcy5fbGV4ZXIudG9rZW5pemUocikscz1uZXcgbGYodCxlLGksbywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKTtyZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KFsiIiwiIl0sW3NdLHQsZSxpKX1jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KHQsZSxpLHIsbyl7bGV0IHM9bmV3IFNmKDAsaS5sZW5ndGgpLGE9bmV3IFpvKHMscy50b0Fic29sdXRlKG8pLHQsZSk7cmV0dXJuIG5ldyBldShhLGkscixvLHRoaXMuZXJyb3JzKX1zcGxpdEludGVycG9sYXRpb24odCxlLGkscj0kYyl7bGV0IG89W10scz1bXSxhPVtdLGw9aT9mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9MCxpPTAscj0wO2Zvcig7cjxuLmxlbmd0aDspe2xldCBvPW5bcl07aWYoOT09PW8udHlwZSl7bGV0W3MsYV09by5wYXJ0cztlKz1hLmxlbmd0aCxpKz1zLmxlbmd0aH1lbHNle2xldCBzPW8ucGFydHMucmVkdWNlKChhLGwpPT5hK2wubGVuZ3RoLDApO2krPXMsZSs9c310LnNldChpLGUpLHIrK31yZXR1cm4gdH0oaSk6bnVsbCxjPTAsdT0hMSxkPSExLHtzdGFydDpwLGVuZDpofT1yO2Zvcig7Yzx0Lmxlbmd0aDspaWYodSl7bGV0IGY9YyxtPWYrcC5sZW5ndGgsQz10aGlzLl9nZXRJbnRlcnBvbGF0aW9uRW5kSW5kZXgodCxoLG0pO2lmKC0xPT09Qyl7dT0hMSxkPSEwO2JyZWFrfWxldCBfPUMraC5sZW5ndGgseT10LnN1YnN0cmluZyhtLEMpOzA9PT15LnRyaW0oKS5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJCbGFuayBleHByZXNzaW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJwb2xhdGVkIHN0cmluZ3MiLHQsYGF0IGNvbHVtbiAke2N9IGluYCxlKSxzLnB1c2goe3RleHQ6eSxzdGFydDpmLGVuZDpffSk7bGV0IEE9KGw/LmdldChmKT8/ZikrcC5sZW5ndGg7YS5wdXNoKEEpLGM9Xyx1PSExfWVsc2V7bGV0IGY9YztjPXQuaW5kZXhPZihwLGMpLC0xPT09YyYmKGM9dC5sZW5ndGgpO2xldCBtPXQuc3Vic3RyaW5nKGYsYyk7by5wdXNoKHt0ZXh0Om0sc3RhcnQ6ZixlbmQ6Y30pLHU9ITB9aWYoIXUpaWYoZCl7bGV0IGY9b1tvLmxlbmd0aC0xXTtmLnRleHQrPXQuc3Vic3RyaW5nKGMpLGYuZW5kPXQubGVuZ3RofWVsc2Ugby5wdXNoKHt0ZXh0OnQuc3Vic3RyaW5nKGMpLHN0YXJ0OmMsZW5kOnQubGVuZ3RofSk7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zdHJpbmdzPXQsdGhpcy5leHByZXNzaW9ucz1lLHRoaXMub2Zmc2V0cz1pfX0obyxzLGEpfXdyYXBMaXRlcmFsUHJpbWl0aXZlKHQsZSxpKXtsZXQgcj1uZXcgU2YoMCxudWxsPT10PzA6dC5sZW5ndGgpO3JldHVybiBuZXcgZXUobmV3IElzKHIsci50b0Fic29sdXRlKGkpLHQpLHQsZSxpLHRoaXMuZXJyb3JzKX1fc3RyaXBDb21tZW50cyh0KXtsZXQgZT10aGlzLl9jb21tZW50U3RhcnQodCk7cmV0dXJuIG51bGwhPWU/dC5zdWJzdHJpbmcoMCxlKTp0fV9jb21tZW50U3RhcnQodCl7bGV0IGU9bnVsbDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoLTE7aSsrKXtsZXQgcj10LmNoYXJDb2RlQXQoaSksbz10LmNoYXJDb2RlQXQoaSsxKTtpZig0Nz09PXImJjQ3PT1vJiZudWxsPT1lKXJldHVybiBpO2U9PT1yP2U9bnVsbDpudWxsPT1lJiZ1TChyKSYmKGU9cil9cmV0dXJuIG51bGx9X2NoZWNrTm9JbnRlcnBvbGF0aW9uKHQsZSx7c3RhcnQ6aSxlbmQ6cn0pe2xldCBvPS0xLHM9LTE7Zm9yKGxldCBhIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCwwKSlpZigtMT09PW8pdC5zdGFydHNXaXRoKGkpJiYobz1hKTtlbHNlIGlmKHM9dGhpcy5fZ2V0SW50ZXJwb2xhdGlvbkVuZEluZGV4KHQscixhKSxzPi0xKWJyZWFrO28+LTEmJnM+LTEmJnRoaXMuX3JlcG9ydEVycm9yKGBHb3QgaW50ZXJwb2xhdGlvbiAoJHtpfSR7cn0pIHdoZXJlIGV4cHJlc3Npb24gd2FzIGV4cGVjdGVkYCx0LGBhdCBjb2x1bW4gJHtvfSBpbmAsZSl9X2dldEludGVycG9sYXRpb25FbmRJbmRleCh0LGUsaSl7Zm9yKGxldCByIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCxpKSl7aWYodC5zdGFydHNXaXRoKGUscikpcmV0dXJuIHI7aWYodC5zdGFydHNXaXRoKCIvLyIscikpcmV0dXJuIHQuaW5kZXhPZihlLHIpfXJldHVybi0xfSpfZm9yRWFjaFVucXVvdGVkQ2hhcih0LGUpe2xldCBpPW51bGwscj0wO2ZvcihsZXQgbz1lO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyF1TCh0LmNoYXJDb2RlQXQobykpfHxudWxsIT09aSYmaSE9PXN8fHIlMiE9MD9udWxsPT09aSYmKHlpZWxkIG8pOmk9bnVsbD09PWk/czpudWxsLHI9IlxcIj09PXM/cisxOjB9fX0sZGY9KCgpPT57cmV0dXJuKG49ZGZ8fChkZj17fSkpW24uTm9uZT0wXT0iTm9uZSIsbltuLldyaXRhYmxlPTFdPSJXcml0YWJsZSIsZGY7dmFyIG59KSgpLGxmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3RoaXMuaW5wdXQ9dCx0aGlzLmxvY2F0aW9uPWUsdGhpcy5hYnNvbHV0ZU9mZnNldD1pLHRoaXMudG9rZW5zPXIsdGhpcy5wYXJzZUZsYWdzPW8sdGhpcy5lcnJvcnM9cyx0aGlzLm9mZnNldD1hLHRoaXMucnBhcmVuc0V4cGVjdGVkPTAsdGhpcy5yYnJhY2tldHNFeHBlY3RlZD0wLHRoaXMucmJyYWNlc0V4cGVjdGVkPTAsdGhpcy5jb250ZXh0PWRmLk5vbmUsdGhpcy5zb3VyY2VTcGFuQ2FjaGU9bmV3IE1hcCx0aGlzLmluZGV4PTB9cGVlayh0KXtsZXQgZT10aGlzLmluZGV4K3Q7cmV0dXJuIGU8dGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zW2VdOklOfWdldCBuZXh0KCl7cmV0dXJuIHRoaXMucGVlaygwKX1nZXQgYXRFT0YoKXtyZXR1cm4gdGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RofWdldCBpbnB1dEluZGV4KCl7cmV0dXJuIHRoaXMuYXRFT0Y/dGhpcy5jdXJyZW50RW5kSW5kZXg6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50RW5kSW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleD4wP3RoaXMucGVlaygtMSkuZW5kK3RoaXMub2Zmc2V0OjA9PT10aGlzLnRva2Vucy5sZW5ndGg/dGhpcy5pbnB1dC5sZW5ndGgrdGhpcy5vZmZzZXQ6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50QWJzb2x1dGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5hYnNvbHV0ZU9mZnNldCt0aGlzLmlucHV0SW5kZXh9c3Bhbih0LGUpe2xldCBpPXRoaXMuY3VycmVudEVuZEluZGV4O2lmKHZvaWQgMCE9PWUmJmU+dGhpcy5jdXJyZW50RW5kSW5kZXgmJihpPWUpLHQ+aSl7bGV0IHI9aTtpPXQsdD1yfXJldHVybiBuZXcgU2YodCxpKX1zb3VyY2VTcGFuKHQsZSl7bGV0IGk9YCR7dH1AJHt0aGlzLmlucHV0SW5kZXh9OiR7ZX1gO3JldHVybiB0aGlzLnNvdXJjZVNwYW5DYWNoZS5oYXMoaSl8fHRoaXMuc291cmNlU3BhbkNhY2hlLnNldChpLHRoaXMuc3Bhbih0LGUpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCkpLHRoaXMuc291cmNlU3BhbkNhY2hlLmdldChpKX1hZHZhbmNlKCl7dGhpcy5pbmRleCsrfXdpdGhDb250ZXh0KHQsZSl7dGhpcy5jb250ZXh0fD10O2xldCBpPWUoKTtyZXR1cm4gdGhpcy5jb250ZXh0Xj10LGl9Y29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKHQpe3JldHVybiEhdGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpJiYodGhpcy5hZHZhbmNlKCksITApfXBlZWtLZXl3b3JkTGV0KCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRMZXQoKX1wZWVrS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRBcygpfWV4cGVjdENoYXJhY3Rlcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0KXx8dGhpcy5lcnJvcihgTWlzc2luZyBleHBlY3RlZCAke1N0cmluZy5mcm9tQ2hhckNvZGUodCl9YCl9Y29uc3VtZU9wdGlvbmFsT3BlcmF0b3IodCl7cmV0dXJuISF0aGlzLm5leHQuaXNPcGVyYXRvcih0KSYmKHRoaXMuYWR2YW5jZSgpLCEwKX1leHBlY3RPcGVyYXRvcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKHQpfHx0aGlzLmVycm9yKGBNaXNzaW5nIGV4cGVjdGVkIG9wZXJhdG9yICR7dH1gKX1wcmV0dHlQcmludFRva2VuKHQpe3JldHVybiB0PT09SU4/ImVuZCBvZiBpbnB1dCI6YHRva2VuICR7dH1gfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKXtsZXQgdD10aGlzLm5leHQ7cmV0dXJuIHQuaXNJZGVudGlmaWVyKCl8fHQuaXNLZXl3b3JkKCk/KHRoaXMuYWR2YW5jZSgpLHQudG9TdHJpbmcoKSk6KHQuaXNQcml2YXRlSWRlbnRpZmllcigpP3RoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodCwiZXhwZWN0ZWQgaWRlbnRpZmllciBvciBrZXl3b3JkIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIgb3Iga2V5d29yZGApLG51bGwpfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpe2xldCB0PXRoaXMubmV4dDtyZXR1cm4gdC5pc0lkZW50aWZpZXIoKXx8dC5pc0tleXdvcmQoKXx8dC5pc1N0cmluZygpPyh0aGlzLmFkdmFuY2UoKSx0LnRvU3RyaW5nKCkpOih0LmlzUHJpdmF0ZUlkZW50aWZpZXIoKT90aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsImV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQgb3Igc3RyaW5nIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQsIG9yIHN0cmluZ2ApLCIiKX1wYXJzZUNoYWluKCl7bGV0IHQ9W10sZT10aGlzLmlucHV0SW5kZXg7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aDspe2xldCBpPXRoaXMucGFyc2VQaXBlKCk7aWYodC5wdXNoKGkpLHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDU5KSlmb3IoMSZ0aGlzLnBhcnNlRmxhZ3N8fHRoaXMuZXJyb3IoIkJpbmRpbmcgZXhwcmVzc2lvbiBjYW5ub3QgY29udGFpbiBjaGFpbmVkIGV4cHJlc3Npb24iKTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OSk7KTtlbHNlIGlmKHRoaXMuaW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoKXtsZXQgcj10aGlzLmluZGV4O2lmKHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW4gJyR7dGhpcy5uZXh0fSdgKSx0aGlzLmluZGV4PT09cilicmVha319aWYoMD09PXQubGVuZ3RoKXtsZXQgaT10aGlzLm9mZnNldCxyPXRoaXMub2Zmc2V0K3RoaXMuaW5wdXQubGVuZ3RoO3JldHVybiBuZXcgbmEodGhpcy5zcGFuKGksciksdGhpcy5zb3VyY2VTcGFuKGkscikpfXJldHVybiAxPT10Lmxlbmd0aD90WzBdOm5ldyBfeCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQpfXBhcnNlUGlwZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKXsxJnRoaXMucGFyc2VGbGFncyYmdGhpcy5lcnJvcigiQ2Fubm90IGhhdmUgYSBwaXBlIGluIGFuIGFjdGlvbiBleHByZXNzaW9uIik7ZG97bGV0IG8scyxpPXRoaXMuaW5wdXRJbmRleCxyPXRoaXMuZXhwZWN0SWRlbnRpZmllck9yS2V5d29yZCgpO251bGwhPT1yP289dGhpcy5zb3VyY2VTcGFuKGkpOihyPSIiLHM9LTEhPT10aGlzLm5leHQuaW5kZXg/dGhpcy5uZXh0LmluZGV4OnRoaXMuaW5wdXQubGVuZ3RoK3RoaXMub2Zmc2V0LG89bmV3IFNmKHMscykudG9BYnNvbHV0ZSh0aGlzLmFic29sdXRlT2Zmc2V0KSk7bGV0IGE9W107Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7KWEucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtlPW5ldyBSMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQscyksZSxyLGEsbyl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKX1yZXR1cm4gZX1wYXJzZUV4cHJlc3Npb24oKXtyZXR1cm4gdGhpcy5wYXJzZUNvbmRpdGlvbmFsKCl9cGFyc2VDb25kaXRpb25hbCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VMb2dpY2FsT3IoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI/Iikpe2xldCByLGk9dGhpcy5wYXJzZVBpcGUoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpcj10aGlzLnBhcnNlUGlwZSgpO2Vsc2V7bGV0IHM9dGhpcy5pbnB1dC5zdWJzdHJpbmcodCx0aGlzLmlucHV0SW5kZXgpO3RoaXMuZXJyb3IoYENvbmRpdGlvbmFsIGV4cHJlc3Npb24gJHtzfSByZXF1aXJlcyBhbGwgMyBleHByZXNzaW9uc2ApLHI9bmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpfXJldHVybiBuZXcgdngodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlLGkscil9cmV0dXJuIGV9cGFyc2VMb2dpY2FsT3IoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlTG9naWNhbEFuZCgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifHwiKTspe2xldCBpPXRoaXMucGFyc2VMb2dpY2FsQW5kKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwifHwiLGUsaSl9cmV0dXJuIGV9cGFyc2VMb2dpY2FsQW5kKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCImJiIpOyl7bGV0IGk9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwiJiYiLGUsaSl9cmV0dXJuIGV9cGFyc2VOdWxsaXNoQ29hbGVzY2luZygpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFcXVhbGl0eSgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPz8iKTspe2xldCBpPXRoaXMucGFyc2VFcXVhbGl0eSgpO2U9bmV3IGhsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksIj8/IixlLGkpfXJldHVybiBlfXBhcnNlRXF1YWxpdHkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlUmVsYXRpb25hbCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIj09IjpjYXNlIj09PSI6Y2FzZSIhPSI6Y2FzZSIhPT0iOnRoaXMuYWR2YW5jZSgpO2xldCByPXRoaXMucGFyc2VSZWxhdGlvbmFsKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VSZWxhdGlvbmFsKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZUFkZGl0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiPCI6Y2FzZSI+IjpjYXNlIjw9IjpjYXNlIj49Ijp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlQWRkaXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZUFkZGl0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU11bHRpcGxpY2F0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiKyI6Y2FzZSItIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlTXVsdGlwbGljYXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZU11bHRpcGxpY2F0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByZWZpeCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIioiOmNhc2UiJSI6Y2FzZSIvIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlUHJlZml4KCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VQcmVmaXgoKXtpZih0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3Ipe2xldCBpLHQ9dGhpcy5pbnB1dEluZGV4O3N3aXRjaCh0aGlzLm5leHQuc3RyVmFsdWUpe2Nhc2UiKyI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLGNjLmNyZWF0ZVBsdXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKTtjYXNlIi0iOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSxjYy5jcmVhdGVNaW51cyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpO2Nhc2UiISI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLG5ldyB3eCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpfX1yZXR1cm4gdGhpcy5wYXJzZUNhbGxDaGFpbigpfXBhcnNlQ2FsbENoYWluKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByaW1hcnkoKTtmb3IoOzspaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDYpKWU9dGhpcy5wYXJzZUFjY2Vzc01lbWJlcihlLHQsITEpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPy4iKSllPXRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQwKT90aGlzLnBhcnNlQ2FsbChlLHQsITApOnRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKT90aGlzLnBhcnNlS2V5ZWRSZWFkT3JXcml0ZShlLHQsITApOnRoaXMucGFyc2VBY2Nlc3NNZW1iZXIoZSx0LCEwKTtlbHNlIGlmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKSllPXRoaXMucGFyc2VLZXllZFJlYWRPcldyaXRlKGUsdCwhMSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0MCkpZT10aGlzLnBhcnNlQ2FsbChlLHQsITEpO2Vsc2V7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIiEiKSlyZXR1cm4gZTtlPW5ldyBNeCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfX1wYXJzZVByaW1hcnkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDApKXt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBlPXRoaXMucGFyc2VQaXBlKCk7cmV0dXJuIHRoaXMucnBhcmVuc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLGV9aWYodGhpcy5uZXh0LmlzS2V5d29yZE51bGwoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksbnVsbCk7aWYodGhpcy5uZXh0LmlzS2V5d29yZFVuZGVmaW5lZCgpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgSXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSx2b2lkIDApO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUcnVlKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCEwKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkRmFsc2UoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksITEpO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUaGlzKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBneCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSkpe3RoaXMucmJyYWNrZXRzRXhwZWN0ZWQrKztsZXQgZT10aGlzLnBhcnNlRXhwcmVzc2lvbkxpc3QoOTMpO3JldHVybiB0aGlzLnJicmFja2V0c0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoOTMpLG5ldyBPMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc0NoYXJhY3RlcihmcCkpcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsTWFwKCk7aWYodGhpcy5uZXh0LmlzSWRlbnRpZmllcigpKXJldHVybiB0aGlzLnBhcnNlQWNjZXNzTWVtYmVyKG5ldyBFZih0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSx0LCExKTtpZih0aGlzLm5leHQuaXNOdW1iZXIoKSl7bGV0IGU9dGhpcy5uZXh0LnRvTnVtYmVyKCk7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc1N0cmluZygpKXtsZXQgZT10aGlzLm5leHQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksZSl9cmV0dXJuIHRoaXMubmV4dC5pc1ByaXZhdGVJZGVudGlmaWVyKCk/KHRoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodGhpcy5uZXh0LG51bGwpLG5ldyBuYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSk6dGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RoPyh0aGlzLmVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uOiAke3RoaXMuaW5wdXR9YCksbmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpKToodGhpcy5lcnJvcihgVW5leHBlY3RlZCB0b2tlbiAke3RoaXMubmV4dH1gKSxuZXcgbmEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSkpfXBhcnNlRXhwcmVzc2lvbkxpc3QodCl7bGV0IGU9W107ZG97aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpKWJyZWFrO2UucHVzaCh0aGlzLnBhcnNlUGlwZSgpKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3JldHVybiBlfXBhcnNlTGl0ZXJhbE1hcCgpe2xldCB0PVtdLGU9W10saT10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5leHBlY3RDaGFyYWN0ZXIoZnApLCF0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0dSkpe3RoaXMucmJyYWNlc0V4cGVjdGVkKys7ZG97bGV0IHI9dGhpcy5pbnB1dEluZGV4LG89dGhpcy5uZXh0LmlzU3RyaW5nKCkscz10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpO2lmKHQucHVzaCh7a2V5OnMscXVvdGVkOm99KSxvKXRoaXMuZXhwZWN0Q2hhcmFjdGVyKDU4KSxlLnB1c2godGhpcy5wYXJzZVBpcGUoKSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpZS5wdXNoKHRoaXMucGFyc2VQaXBlKCkpO2Vsc2V7bGV0IGE9dGhpcy5zcGFuKHIpLGw9dGhpcy5zb3VyY2VTcGFuKHIpO2UucHVzaChuZXcgb3UoYSxsLGwsbmV3IEVmKGEsbCkscykpfX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3RoaXMucmJyYWNlc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIodHUpfXJldHVybiBuZXcgQ3godGhpcy5zcGFuKGkpLHRoaXMuc291cmNlU3BhbihpKSx0LGUpfXBhcnNlQWNjZXNzTWVtYmVyKHQsZSxpKXtsZXQgYSxyPXRoaXMuaW5wdXRJbmRleCxvPXRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9PntsZXQgbD10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKT8/IiI7cmV0dXJuIDA9PT1sLmxlbmd0aCYmdGhpcy5lcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciBmb3IgcHJvcGVydHkgYWNjZXNzIix0LnNwYW4uZW5kKSxsfSkscz10aGlzLnNvdXJjZVNwYW4ocik7aWYoaSl0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKT8odGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxhPW5ldyBuYSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpKSk6YT1uZXcgYngodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSxzLHQsbyk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKSl7aWYoISgxJnRoaXMucGFyc2VGbGFncykpcmV0dXJuIHRoaXMuZXJyb3IoIkJpbmRpbmdzIGNhbm5vdCBjb250YWluIGFzc2lnbm1lbnRzIiksbmV3IG5hKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkpO2xldCBsPXRoaXMucGFyc2VDb25kaXRpb25hbCgpO2E9bmV3IHl4KHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkscyx0LG8sbCl9ZWxzZSBhPW5ldyBvdSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHMsdCxvKTtyZXR1cm4gYX1wYXJzZUNhbGwodCxlLGkpe2xldCByPXRoaXMuaW5wdXRJbmRleDt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBvPXRoaXMucGFyc2VDYWxsQXJndW1lbnRzKCkscz10aGlzLnNwYW4ocix0aGlzLmlucHV0SW5kZXgpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCk7dGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLHRoaXMucnBhcmVuc0V4cGVjdGVkLS07bGV0IGE9dGhpcy5zcGFuKGUpLGw9dGhpcy5zb3VyY2VTcGFuKGUpO3JldHVybiBpP25ldyBrMChhLGwsdCxvLHMpOm5ldyBicChhLGwsdCxvLHMpfWNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKXtyZXR1cm4gMiZ0aGlzLnBhcnNlRmxhZ3MmJnRoaXMubmV4dC5pc09wZXJhdG9yKCIhIikmJnRoaXMucGVlaygxKS5pc09wZXJhdG9yKCI9Iik/KHRoaXMuYWR2YW5jZSgpLHRoaXMuYWR2YW5jZSgpLCEwKTp0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI9Iil9cGFyc2VDYWxsQXJndW1lbnRzKCl7aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKDQxKSlyZXR1cm5bXTtsZXQgdD1bXTtkb3t0LnB1c2godGhpcy5wYXJzZVBpcGUoKSl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTtyZXR1cm4gdH1leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKXtsZXQgdD0iIixlPSExLGk9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7ZG97dCs9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKSxlPXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIi0iKSxlJiYodCs9Ii0iKX13aGlsZShlKTtyZXR1cm57c291cmNlOnQsc3BhbjpuZXcgT2EoaSxpK3QubGVuZ3RoKX19cGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQpe2xldCBlPVtdO2ZvcihlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KSk7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGg7KXtsZXQgaT10aGlzLnBhcnNlTGV0QmluZGluZygpO2lmKGkpZS5wdXNoKGkpO2Vsc2V7bGV0IHI9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxvPXRoaXMucGFyc2VBc0JpbmRpbmcocik7bz9lLnB1c2gobyk6KHIuc291cmNlPXQuc291cmNlK3Iuc291cmNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Iuc291cmNlLnN1YnN0cmluZygxKSxlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyhyKSkpfXRoaXMuY29uc3VtZVN0YXRlbWVudFRlcm1pbmF0b3IoKX1yZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnRlbXBsYXRlQmluZGluZ3M9dCx0aGlzLndhcm5pbmdzPWUsdGhpcy5lcnJvcnM9aX19KGUsW10sdGhpcy5lcnJvcnMpfXBhcnNlS2V5ZWRSZWFkT3JXcml0ZSh0LGUsaSl7cmV0dXJuIHRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9Pnt0aGlzLnJicmFja2V0c0V4cGVjdGVkKys7bGV0IHI9dGhpcy5wYXJzZVBpcGUoKTtpZihyIGluc3RhbmNlb2YgbmEmJnRoaXMuZXJyb3IoIktleSBhY2Nlc3MgY2Fubm90IGJlIGVtcHR5IiksdGhpcy5yYnJhY2tldHNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDkzKSwhdGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpKXJldHVybiBpP25ldyBQMCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscik6bmV3IEkwKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSksdCxyKTtpZighaSl7bGV0IG89dGhpcy5wYXJzZUNvbmRpdGlvbmFsKCk7cmV0dXJuIG5ldyB4eCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscixvKX1yZXR1cm4gdGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxuZXcgbmEodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSl9KX1wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KXtsZXQgZT1bXTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7bGV0IGk9dGhpcy5nZXREaXJlY3RpdmVCb3VuZFRhcmdldCgpLHI9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQsbz10aGlzLnBhcnNlQXNCaW5kaW5nKHQpO298fCh0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCkscj10aGlzLmN1cnJlbnRBYnNvbHV0ZU9mZnNldCk7bGV0IHM9bmV3IE9hKHQuc3Bhbi5zdGFydCxyKTtyZXR1cm4gZS5wdXNoKG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fShzLHQsaSkpLG8mJmUucHVzaChvKSxlfWdldERpcmVjdGl2ZUJvdW5kVGFyZ2V0KCl7aWYodGhpcy5uZXh0PT09SU58fHRoaXMucGVla0tleXdvcmRBcygpfHx0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5wYXJzZVBpcGUoKSx7c3RhcnQ6ZSxlbmQ6aX09dC5zcGFuLHI9dGhpcy5pbnB1dC5zdWJzdHJpbmcoZSxpKTtyZXR1cm4gbmV3IGV1KHQscix0aGlzLmxvY2F0aW9uLHRoaXMuYWJzb2x1dGVPZmZzZXQrZSx0aGlzLmVycm9ycyl9cGFyc2VBc0JpbmRpbmcodCl7aWYoIXRoaXMucGVla0tleXdvcmRBcygpKXJldHVybiBudWxsO3RoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCk7dGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpO2xldCBpPW5ldyBPYSh0LnNwYW4uc3RhcnQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3goaSxlLHQpfXBhcnNlTGV0QmluZGluZygpe2lmKCF0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7dGhpcy5hZHZhbmNlKCk7bGV0IGU9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxpPW51bGw7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpJiYoaT10aGlzLmV4cGVjdFRlbXBsYXRlQmluZGluZ0tleSgpKSx0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCk7bGV0IHI9bmV3IE9hKHQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3gocixlLGkpfWNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCl7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTkpfHx0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCl9ZXJyb3IodCxlPW51bGwpe3RoaXMuZXJyb3JzLnB1c2gobmV3IG14KHQsdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dChlKSx0aGlzLmxvY2F0aW9uKSksdGhpcy5za2lwKCl9bG9jYXRpb25UZXh0KHQ9bnVsbCl7cmV0dXJuIG51bGw9PXQmJih0PXRoaXMuaW5kZXgpLHQ8dGhpcy50b2tlbnMubGVuZ3RoP2BhdCBjb2x1bW4gJHt0aGlzLnRva2Vuc1t0XS5pbmRleCsxfSBpbmA6ImF0IHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24ifV9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsZSl7bGV0IGk9YFByaXZhdGUgaWRlbnRpZmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIFVuZXhwZWN0ZWQgcHJpdmF0ZSBpZGVudGlmaWVyOiAke3R9YDtudWxsIT09ZSYmKGkrPWAsICR7ZX1gKSx0aGlzLmVycm9yKGkpfXNraXAoKXtsZXQgdD10aGlzLm5leHQ7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aCYmIXQuaXNDaGFyYWN0ZXIoNTkpJiYhdC5pc09wZXJhdG9yKCJ8IikmJih0aGlzLnJwYXJlbnNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoNDEpKSYmKHRoaXMucmJyYWNlc0V4cGVjdGVkPD0wfHwhdC5pc0NoYXJhY3Rlcih0dSkpJiYodGhpcy5yYnJhY2tldHNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoOTMpKSYmISh0aGlzLmNvbnRleHQmZGYuV3JpdGFibGUmJnQuaXNPcGVyYXRvcigiPSIpKTspdGhpcy5uZXh0LmlzRXJyb3IoKSYmdGhpcy5lcnJvcnMucHVzaChuZXcgbXgodGhpcy5uZXh0LnRvU3RyaW5nKCksdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dCgpLHRoaXMubG9jYXRpb24pKSx0aGlzLmFkdmFuY2UoKSx0PXRoaXMubmV4dH19LElMPWNsYXNzIGV4dGVuZHMgZ0x7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZXJyb3JzPVtdfXZpc2l0UGlwZSgpe3RoaXMuZXJyb3JzLnB1c2goInBpcGVzIil9fSxUZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlU3Bhbj10LHRoaXMuaTE4bj1lfX0sRjA9Y2xhc3MgZXh0ZW5kcyBUZntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnRva2Vucz1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRUZXh0KHRoaXMsZSl9fSxOMD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcihyLHMpLHRoaXMuc3dpdGNoVmFsdWU9dCx0aGlzLnR5cGU9ZSx0aGlzLmNhc2VzPWksdGhpcy5zd2l0Y2hWYWx1ZVNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uKHRoaXMsZSl9fSxSTD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3N1cGVyKGksYSksdGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy52YWx1ZVRva2Vucz1zfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRBdHRyaWJ1dGUodGhpcyxlKX19LEF4PWNsYXNzIGV4dGVuZHMgVGZ7Y29uc3RydWN0b3IodCxlLGkscixvLHM9bnVsbCxhKXtzdXBlcihyLGEpLHRoaXMubmFtZT10LHRoaXMuYXR0cnM9ZSx0aGlzLmNoaWxkcmVuPWksdGhpcy5zdGFydFNvdXJjZVNwYW49byx0aGlzLmVuZFNvdXJjZVNwYW49c312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RWxlbWVudCh0aGlzLGUpfX0sVjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdENvbW1lbnQodGhpcyxlKX19O2Z1bmN0aW9uIGN1KG4sdCxlPW51bGwpe2xldCBpPVtdLHI9bi52aXNpdD9vPT5uLnZpc2l0KG8sZSl8fG8udmlzaXQobixlKTpvPT5vLnZpc2l0KG4sZSk7cmV0dXJuIHQuZm9yRWFjaChvPT57bGV0IHM9cihvKTtzJiZpLnB1c2gocyl9KSxpfXZhciBIMT17QUVsaWc6Ilx4YzYiLEFNUDoiJiIsYW1wOiImIixBYWN1dGU6Ilx4YzEiLEFicmV2ZToiXHUwMTAyIixBY2lyYzoiXHhjMiIsQWN5OiJcdTA0MTAiLEFmcjoiXHVkODM1XHVkZDA0IixBZ3JhdmU6Ilx4YzAiLEFscGhhOiJcdTAzOTEiLEFtYWNyOiJcdTAxMDAiLEFuZDoiXHUyYTUzIixBb2dvbjoiXHUwMTA0IixBb3BmOiJcdWQ4MzVcdWRkMzgiLEFwcGx5RnVuY3Rpb246Ilx1MjA2MSIsYWY6Ilx1MjA2MSIsQXJpbmc6Ilx4YzUiLGFuZ3N0OiJceGM1IixBc2NyOiJcdWQ4MzVcdWRjOWMiLEFzc2lnbjoiXHUyMjU0Iixjb2xvbmU6Ilx1MjI1NCIsY29sb25lcToiXHUyMjU0IixBdGlsZGU6Ilx4YzMiLEF1bWw6Ilx4YzQiLEJhY2tzbGFzaDoiXHUyMjE2IixzZXRtaW51czoiXHUyMjE2IixzZXRtbjoiXHUyMjE2IixzbWFsbHNldG1pbnVzOiJcdTIyMTYiLHNzZXRtbjoiXHUyMjE2IixCYXJ2OiJcdTJhZTciLEJhcndlZDoiXHUyMzA2Iixkb3VibGViYXJ3ZWRnZToiXHUyMzA2IixCY3k6Ilx1MDQxMSIsQmVjYXVzZToiXHUyMjM1IixiZWNhdXM6Ilx1MjIzNSIsYmVjYXVzZToiXHUyMjM1IixCZXJub3VsbGlzOiJcdTIxMmMiLEJzY3I6Ilx1MjEyYyIsYmVybm91OiJcdTIxMmMiLEJldGE6Ilx1MDM5MiIsQmZyOiJcdWQ4MzVcdWRkMDUiLEJvcGY6Ilx1ZDgzNVx1ZGQzOSIsQnJldmU6Ilx1MDJkOCIsYnJldmU6Ilx1MDJkOCIsQnVtcGVxOiJcdTIyNGUiLEh1bXBEb3duSHVtcDoiXHUyMjRlIixidW1wOiJcdTIyNGUiLENIY3k6Ilx1MDQyNyIsQ09QWToiXHhhOSIsY29weToiXHhhOSIsQ2FjdXRlOiJcdTAxMDYiLENhcDoiXHUyMmQyIixDYXBpdGFsRGlmZmVyZW50aWFsRDoiXHUyMTQ1IixERDoiXHUyMTQ1IixDYXlsZXlzOiJcdTIxMmQiLENmcjoiXHUyMTJkIixDY2Fyb246Ilx1MDEwYyIsQ2NlZGlsOiJceGM3IixDY2lyYzoiXHUwMTA4IixDY29uaW50OiJcdTIyMzAiLENkb3Q6Ilx1MDEwYSIsQ2VkaWxsYToiXHhiOCIsY2VkaWw6Ilx4YjgiLENlbnRlckRvdDoiXHhiNyIsY2VudGVyZG90OiJceGI3IixtaWRkb3Q6Ilx4YjciLENoaToiXHUwM2E3IixDaXJjbGVEb3Q6Ilx1MjI5OSIsb2RvdDoiXHUyMjk5IixDaXJjbGVNaW51czoiXHUyMjk2IixvbWludXM6Ilx1MjI5NiIsQ2lyY2xlUGx1czoiXHUyMjk1IixvcGx1czoiXHUyMjk1IixDaXJjbGVUaW1lczoiXHUyMjk3IixvdGltZXM6Ilx1MjI5NyIsQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzIiLGN3Y29uaW50OiJcdTIyMzIiLENsb3NlQ3VybHlEb3VibGVRdW90ZToiXHUyMDFkIixyZHF1bzoiXHUyMDFkIixyZHF1b3I6Ilx1MjAxZCIsQ2xvc2VDdXJseVF1b3RlOiJcdTIwMTkiLHJzcXVvOiJcdTIwMTkiLHJzcXVvcjoiXHUyMDE5IixDb2xvbjoiXHUyMjM3IixQcm9wb3J0aW9uOiJcdTIyMzciLENvbG9uZToiXHUyYTc0IixDb25ncnVlbnQ6Ilx1MjI2MSIsZXF1aXY6Ilx1MjI2MSIsQ29uaW50OiJcdTIyMmYiLERvdWJsZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjJmIixDb250b3VySW50ZWdyYWw6Ilx1MjIyZSIsY29uaW50OiJcdTIyMmUiLG9pbnQ6Ilx1MjIyZSIsQ29wZjoiXHUyMTAyIixjb21wbGV4ZXM6Ilx1MjEwMiIsQ29wcm9kdWN0OiJcdTIyMTAiLGNvcHJvZDoiXHUyMjEwIixDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzMiLGF3Y29uaW50OiJcdTIyMzMiLENyb3NzOiJcdTJhMmYiLENzY3I6Ilx1ZDgzNVx1ZGM5ZSIsQ3VwOiJcdTIyZDMiLEN1cENhcDoiXHUyMjRkIixhc3ltcGVxOiJcdTIyNGQiLEREb3RyYWhkOiJcdTI5MTEiLERKY3k6Ilx1MDQwMiIsRFNjeToiXHUwNDA1IixEWmN5OiJcdTA0MGYiLERhZ2dlcjoiXHUyMDIxIixkZGFnZ2VyOiJcdTIwMjEiLERhcnI6Ilx1MjFhMSIsRGFzaHY6Ilx1MmFlNCIsRG91YmxlTGVmdFRlZToiXHUyYWU0IixEY2Fyb246Ilx1MDEwZSIsRGN5OiJcdTA0MTQiLERlbDoiXHUyMjA3IixuYWJsYToiXHUyMjA3IixEZWx0YToiXHUwMzk0IixEZnI6Ilx1ZDgzNVx1ZGQwNyIsRGlhY3JpdGljYWxBY3V0ZToiXHhiNCIsYWN1dGU6Ilx4YjQiLERpYWNyaXRpY2FsRG90OiJcdTAyZDkiLGRvdDoiXHUwMmQ5IixEaWFjcml0aWNhbERvdWJsZUFjdXRlOiJcdTAyZGQiLGRibGFjOiJcdTAyZGQiLERpYWNyaXRpY2FsR3JhdmU6ImAiLGdyYXZlOiJgIixEaWFjcml0aWNhbFRpbGRlOiJcdTAyZGMiLHRpbGRlOiJcdTAyZGMiLERpYW1vbmQ6Ilx1MjJjNCIsZGlhbToiXHUyMmM0IixkaWFtb25kOiJcdTIyYzQiLERpZmZlcmVudGlhbEQ6Ilx1MjE0NiIsZGQ6Ilx1MjE0NiIsRG9wZjoiXHVkODM1XHVkZDNiIixEb3Q6Ilx4YTgiLERvdWJsZURvdDoiXHhhOCIsZGllOiJceGE4Iix1bWw6Ilx4YTgiLERvdERvdDoiXHUyMGRjIixEb3RFcXVhbDoiXHUyMjUwIixkb3RlcToiXHUyMjUwIixlc2RvdDoiXHUyMjUwIixEb3VibGVEb3duQXJyb3c6Ilx1MjFkMyIsRG93bmFycm93OiJcdTIxZDMiLGRBcnI6Ilx1MjFkMyIsRG91YmxlTGVmdEFycm93OiJcdTIxZDAiLExlZnRhcnJvdzoiXHUyMWQwIixsQXJyOiJcdTIxZDAiLERvdWJsZUxlZnRSaWdodEFycm93OiJcdTIxZDQiLExlZnRyaWdodGFycm93OiJcdTIxZDQiLGhBcnI6Ilx1MjFkNCIsaWZmOiJcdTIxZDQiLERvdWJsZUxvbmdMZWZ0QXJyb3c6Ilx1MjdmOCIsTG9uZ2xlZnRhcnJvdzoiXHUyN2Y4Iix4bEFycjoiXHUyN2Y4IixEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmYSIsTG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZmEiLHhoQXJyOiJcdTI3ZmEiLERvdWJsZUxvbmdSaWdodEFycm93OiJcdTI3ZjkiLExvbmdyaWdodGFycm93OiJcdTI3ZjkiLHhyQXJyOiJcdTI3ZjkiLERvdWJsZVJpZ2h0QXJyb3c6Ilx1MjFkMiIsSW1wbGllczoiXHUyMWQyIixSaWdodGFycm93OiJcdTIxZDIiLHJBcnI6Ilx1MjFkMiIsRG91YmxlUmlnaHRUZWU6Ilx1MjJhOCIsdkRhc2g6Ilx1MjJhOCIsRG91YmxlVXBBcnJvdzoiXHUyMWQxIixVcGFycm93OiJcdTIxZDEiLHVBcnI6Ilx1MjFkMSIsRG91YmxlVXBEb3duQXJyb3c6Ilx1MjFkNSIsVXBkb3duYXJyb3c6Ilx1MjFkNSIsdkFycjoiXHUyMWQ1IixEb3VibGVWZXJ0aWNhbEJhcjoiXHUyMjI1IixwYXI6Ilx1MjIyNSIscGFyYWxsZWw6Ilx1MjIyNSIsc2hvcnRwYXJhbGxlbDoiXHUyMjI1IixzcGFyOiJcdTIyMjUiLERvd25BcnJvdzoiXHUyMTkzIixTaG9ydERvd25BcnJvdzoiXHUyMTkzIixkYXJyOiJcdTIxOTMiLGRvd25hcnJvdzoiXHUyMTkzIixEb3duQXJyb3dCYXI6Ilx1MjkxMyIsRG93bkFycm93VXBBcnJvdzoiXHUyMWY1IixkdWFycjoiXHUyMWY1IixEb3duQnJldmU6Ilx1MDMxMSIsRG93bkxlZnRSaWdodFZlY3RvcjoiXHUyOTUwIixEb3duTGVmdFRlZVZlY3RvcjoiXHUyOTVlIixEb3duTGVmdFZlY3RvcjoiXHUyMWJkIixsZWZ0aGFycG9vbmRvd246Ilx1MjFiZCIsbGhhcmQ6Ilx1MjFiZCIsRG93bkxlZnRWZWN0b3JCYXI6Ilx1Mjk1NiIsRG93blJpZ2h0VGVlVmVjdG9yOiJcdTI5NWYiLERvd25SaWdodFZlY3RvcjoiXHUyMWMxIixyaGFyZDoiXHUyMWMxIixyaWdodGhhcnBvb25kb3duOiJcdTIxYzEiLERvd25SaWdodFZlY3RvckJhcjoiXHUyOTU3IixEb3duVGVlOiJcdTIyYTQiLHRvcDoiXHUyMmE0IixEb3duVGVlQXJyb3c6Ilx1MjFhNyIsbWFwc3RvZG93bjoiXHUyMWE3IixEc2NyOiJcdWQ4MzVcdWRjOWYiLERzdHJvazoiXHUwMTEwIixFTkc6Ilx1MDE0YSIsRVRIOiJceGQwIixFYWN1dGU6Ilx4YzkiLEVjYXJvbjoiXHUwMTFhIixFY2lyYzoiXHhjYSIsRWN5OiJcdTA0MmQiLEVkb3Q6Ilx1MDExNiIsRWZyOiJcdWQ4MzVcdWRkMDgiLEVncmF2ZToiXHhjOCIsRWxlbWVudDoiXHUyMjA4IixpbjoiXHUyMjA4Iixpc2luOiJcdTIyMDgiLGlzaW52OiJcdTIyMDgiLEVtYWNyOiJcdTAxMTIiLEVtcHR5U21hbGxTcXVhcmU6Ilx1MjVmYiIsRW1wdHlWZXJ5U21hbGxTcXVhcmU6Ilx1MjVhYiIsRW9nb246Ilx1MDExOCIsRW9wZjoiXHVkODM1XHVkZDNjIixFcHNpbG9uOiJcdTAzOTUiLEVxdWFsOiJcdTJhNzUiLEVxdWFsVGlsZGU6Ilx1MjI0MiIsZXFzaW06Ilx1MjI0MiIsZXNpbToiXHUyMjQyIixFcXVpbGlicml1bToiXHUyMWNjIixyaWdodGxlZnRoYXJwb29uczoiXHUyMWNjIixybGhhcjoiXHUyMWNjIixFc2NyOiJcdTIxMzAiLGV4cGVjdGF0aW9uOiJcdTIxMzAiLEVzaW06Ilx1MmE3MyIsRXRhOiJcdTAzOTciLEV1bWw6Ilx4Y2IiLEV4aXN0czoiXHUyMjAzIixleGlzdDoiXHUyMjAzIixFeHBvbmVudGlhbEU6Ilx1MjE0NyIsZWU6Ilx1MjE0NyIsZXhwb25lbnRpYWxlOiJcdTIxNDciLEZjeToiXHUwNDI0IixGZnI6Ilx1ZDgzNVx1ZGQwOSIsRmlsbGVkU21hbGxTcXVhcmU6Ilx1MjVmYyIsRmlsbGVkVmVyeVNtYWxsU3F1YXJlOiJcdTI1YWEiLGJsYWNrc3F1YXJlOiJcdTI1YWEiLHNxdWFyZjoiXHUyNWFhIixzcXVmOiJcdTI1YWEiLEZvcGY6Ilx1ZDgzNVx1ZGQzZCIsRm9yQWxsOiJcdTIyMDAiLGZvcmFsbDoiXHUyMjAwIixGb3VyaWVydHJmOiJcdTIxMzEiLEZzY3I6Ilx1MjEzMSIsR0pjeToiXHUwNDAzIixHVDoiPiIsZ3Q6Ij4iLEdhbW1hOiJcdTAzOTMiLEdhbW1hZDoiXHUwM2RjIixHYnJldmU6Ilx1MDExZSIsR2NlZGlsOiJcdTAxMjIiLEdjaXJjOiJcdTAxMWMiLEdjeToiXHUwNDEzIixHZG90OiJcdTAxMjAiLEdmcjoiXHVkODM1XHVkZDBhIixHZzoiXHUyMmQ5IixnZ2c6Ilx1MjJkOSIsR29wZjoiXHVkODM1XHVkZDNlIixHcmVhdGVyRXF1YWw6Ilx1MjI2NSIsZ2U6Ilx1MjI2NSIsZ2VxOiJcdTIyNjUiLEdyZWF0ZXJFcXVhbExlc3M6Ilx1MjJkYiIsZ2VsOiJcdTIyZGIiLGd0cmVxbGVzczoiXHUyMmRiIixHcmVhdGVyRnVsbEVxdWFsOiJcdTIyNjciLGdFOiJcdTIyNjciLGdlcXE6Ilx1MjI2NyIsR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMiIsR3JlYXRlckxlc3M6Ilx1MjI3NyIsZ2w6Ilx1MjI3NyIsZ3RybGVzczoiXHUyMjc3IixHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlIixnZXFzbGFudDoiXHUyYTdlIixnZXM6Ilx1MmE3ZSIsR3JlYXRlclRpbGRlOiJcdTIyNzMiLGdzaW06Ilx1MjI3MyIsZ3Ryc2ltOiJcdTIyNzMiLEdzY3I6Ilx1ZDgzNVx1ZGNhMiIsR3Q6Ilx1MjI2YiIsTmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MjI2YiIsZ2c6Ilx1MjI2YiIsSEFSRGN5OiJcdTA0MmEiLEhhY2VrOiJcdTAyYzciLGNhcm9uOiJcdTAyYzciLEhhdDoiXiIsSGNpcmM6Ilx1MDEyNCIsSGZyOiJcdTIxMGMiLFBvaW5jYXJlcGxhbmU6Ilx1MjEwYyIsSGlsYmVydFNwYWNlOiJcdTIxMGIiLEhzY3I6Ilx1MjEwYiIsaGFtaWx0OiJcdTIxMGIiLEhvcGY6Ilx1MjEwZCIscXVhdGVybmlvbnM6Ilx1MjEwZCIsSG9yaXpvbnRhbExpbmU6Ilx1MjUwMCIsYm94aDoiXHUyNTAwIixIc3Ryb2s6Ilx1MDEyNiIsSHVtcEVxdWFsOiJcdTIyNGYiLGJ1bXBlOiJcdTIyNGYiLGJ1bXBlcToiXHUyMjRmIixJRWN5OiJcdTA0MTUiLElKbGlnOiJcdTAxMzIiLElPY3k6Ilx1MDQwMSIsSWFjdXRlOiJceGNkIixJY2lyYzoiXHhjZSIsSWN5OiJcdTA0MTgiLElkb3Q6Ilx1MDEzMCIsSWZyOiJcdTIxMTEiLEltOiJcdTIxMTEiLGltYWdlOiJcdTIxMTEiLGltYWdwYXJ0OiJcdTIxMTEiLElncmF2ZToiXHhjYyIsSW1hY3I6Ilx1MDEyYSIsSW1hZ2luYXJ5SToiXHUyMTQ4IixpaToiXHUyMTQ4IixJbnQ6Ilx1MjIyYyIsSW50ZWdyYWw6Ilx1MjIyYiIsaW50OiJcdTIyMmIiLEludGVyc2VjdGlvbjoiXHUyMmMyIixiaWdjYXA6Ilx1MjJjMiIseGNhcDoiXHUyMmMyIixJbnZpc2libGVDb21tYToiXHUyMDYzIixpYzoiXHUyMDYzIixJbnZpc2libGVUaW1lczoiXHUyMDYyIixpdDoiXHUyMDYyIixJb2dvbjoiXHUwMTJlIixJb3BmOiJcdWQ4MzVcdWRkNDAiLElvdGE6Ilx1MDM5OSIsSXNjcjoiXHUyMTEwIixpbWFnbGluZToiXHUyMTEwIixJdGlsZGU6Ilx1MDEyOCIsSXVrY3k6Ilx1MDQwNiIsSXVtbDoiXHhjZiIsSmNpcmM6Ilx1MDEzNCIsSmN5OiJcdTA0MTkiLEpmcjoiXHVkODM1XHVkZDBkIixKb3BmOiJcdWQ4MzVcdWRkNDEiLEpzY3I6Ilx1ZDgzNVx1ZGNhNSIsSnNlcmN5OiJcdTA0MDgiLEp1a2N5OiJcdTA0MDQiLEtIY3k6Ilx1MDQyNSIsS0pjeToiXHUwNDBjIixLYXBwYToiXHUwMzlhIixLY2VkaWw6Ilx1MDEzNiIsS2N5OiJcdTA0MWEiLEtmcjoiXHVkODM1XHVkZDBlIixLb3BmOiJcdWQ4MzVcdWRkNDIiLEtzY3I6Ilx1ZDgzNVx1ZGNhNiIsTEpjeToiXHUwNDA5IixMVDoiPCIsbHQ6IjwiLExhY3V0ZToiXHUwMTM5IixMYW1iZGE6Ilx1MDM5YiIsTGFuZzoiXHUyN2VhIixMYXBsYWNldHJmOiJcdTIxMTIiLExzY3I6Ilx1MjExMiIsbGFncmFuOiJcdTIxMTIiLExhcnI6Ilx1MjE5ZSIsdHdvaGVhZGxlZnRhcnJvdzoiXHUyMTllIixMY2Fyb246Ilx1MDEzZCIsTGNlZGlsOiJcdTAxM2IiLExjeToiXHUwNDFiIixMZWZ0QW5nbGVCcmFja2V0OiJcdTI3ZTgiLGxhbmc6Ilx1MjdlOCIsbGFuZ2xlOiJcdTI3ZTgiLExlZnRBcnJvdzoiXHUyMTkwIixTaG9ydExlZnRBcnJvdzoiXHUyMTkwIixsYXJyOiJcdTIxOTAiLGxlZnRhcnJvdzoiXHUyMTkwIixzbGFycjoiXHUyMTkwIixMZWZ0QXJyb3dCYXI6Ilx1MjFlNCIsbGFycmI6Ilx1MjFlNCIsTGVmdEFycm93UmlnaHRBcnJvdzoiXHUyMWM2IixsZWZ0cmlnaHRhcnJvd3M6Ilx1MjFjNiIsbHJhcnI6Ilx1MjFjNiIsTGVmdENlaWxpbmc6Ilx1MjMwOCIsbGNlaWw6Ilx1MjMwOCIsTGVmdERvdWJsZUJyYWNrZXQ6Ilx1MjdlNiIsbG9icms6Ilx1MjdlNiIsTGVmdERvd25UZWVWZWN0b3I6Ilx1Mjk2MSIsTGVmdERvd25WZWN0b3I6Ilx1MjFjMyIsZGhhcmw6Ilx1MjFjMyIsZG93bmhhcnBvb25sZWZ0OiJcdTIxYzMiLExlZnREb3duVmVjdG9yQmFyOiJcdTI5NTkiLExlZnRGbG9vcjoiXHUyMzBhIixsZmxvb3I6Ilx1MjMwYSIsTGVmdFJpZ2h0QXJyb3c6Ilx1MjE5NCIsaGFycjoiXHUyMTk0IixsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0IixMZWZ0UmlnaHRWZWN0b3I6Ilx1Mjk0ZSIsTGVmdFRlZToiXHUyMmEzIixkYXNodjoiXHUyMmEzIixMZWZ0VGVlQXJyb3c6Ilx1MjFhNCIsbWFwc3RvbGVmdDoiXHUyMWE0IixMZWZ0VGVlVmVjdG9yOiJcdTI5NWEiLExlZnRUcmlhbmdsZToiXHUyMmIyIix2YXJ0cmlhbmdsZWxlZnQ6Ilx1MjJiMiIsdmx0cmk6Ilx1MjJiMiIsTGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2YiLExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyYjQiLGx0cmllOiJcdTIyYjQiLHRyaWFuZ2xlbGVmdGVxOiJcdTIyYjQiLExlZnRVcERvd25WZWN0b3I6Ilx1Mjk1MSIsTGVmdFVwVGVlVmVjdG9yOiJcdTI5NjAiLExlZnRVcFZlY3RvcjoiXHUyMWJmIix1aGFybDoiXHUyMWJmIix1cGhhcnBvb25sZWZ0OiJcdTIxYmYiLExlZnRVcFZlY3RvckJhcjoiXHUyOTU4IixMZWZ0VmVjdG9yOiJcdTIxYmMiLGxlZnRoYXJwb29udXA6Ilx1MjFiYyIsbGhhcnU6Ilx1MjFiYyIsTGVmdFZlY3RvckJhcjoiXHUyOTUyIixMZXNzRXF1YWxHcmVhdGVyOiJcdTIyZGEiLGxlZzoiXHUyMmRhIixsZXNzZXFndHI6Ilx1MjJkYSIsTGVzc0Z1bGxFcXVhbDoiXHUyMjY2IixsRToiXHUyMjY2IixsZXFxOiJcdTIyNjYiLExlc3NHcmVhdGVyOiJcdTIyNzYiLGxlc3NndHI6Ilx1MjI3NiIsbGc6Ilx1MjI3NiIsTGVzc0xlc3M6Ilx1MmFhMSIsTGVzc1NsYW50RXF1YWw6Ilx1MmE3ZCIsbGVxc2xhbnQ6Ilx1MmE3ZCIsbGVzOiJcdTJhN2QiLExlc3NUaWxkZToiXHUyMjcyIixsZXNzc2ltOiJcdTIyNzIiLGxzaW06Ilx1MjI3MiIsTGZyOiJcdWQ4MzVcdWRkMGYiLExsOiJcdTIyZDgiLExsZWZ0YXJyb3c6Ilx1MjFkYSIsbEFhcnI6Ilx1MjFkYSIsTG1pZG90OiJcdTAxM2YiLExvbmdMZWZ0QXJyb3c6Ilx1MjdmNSIsbG9uZ2xlZnRhcnJvdzoiXHUyN2Y1Iix4bGFycjoiXHUyN2Y1IixMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmNyIsbG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZjciLHhoYXJyOiJcdTI3ZjciLExvbmdSaWdodEFycm93OiJcdTI3ZjYiLGxvbmdyaWdodGFycm93OiJcdTI3ZjYiLHhyYXJyOiJcdTI3ZjYiLExvcGY6Ilx1ZDgzNVx1ZGQ0MyIsTG93ZXJMZWZ0QXJyb3c6Ilx1MjE5OSIsc3dhcnI6Ilx1MjE5OSIsc3dhcnJvdzoiXHUyMTk5IixMb3dlclJpZ2h0QXJyb3c6Ilx1MjE5OCIsc2VhcnI6Ilx1MjE5OCIsc2VhcnJvdzoiXHUyMTk4IixMc2g6Ilx1MjFiMCIsbHNoOiJcdTIxYjAiLExzdHJvazoiXHUwMTQxIixMdDoiXHUyMjZhIixOZXN0ZWRMZXNzTGVzczoiXHUyMjZhIixsbDoiXHUyMjZhIixNYXA6Ilx1MjkwNSIsTWN5OiJcdTA0MWMiLE1lZGl1bVNwYWNlOiJcdTIwNWYiLE1lbGxpbnRyZjoiXHUyMTMzIixNc2NyOiJcdTIxMzMiLHBobW1hdDoiXHUyMTMzIixNZnI6Ilx1ZDgzNVx1ZGQxMCIsTWludXNQbHVzOiJcdTIyMTMiLG1ucGx1czoiXHUyMjEzIixtcDoiXHUyMjEzIixNb3BmOiJcdWQ4MzVcdWRkNDQiLE11OiJcdTAzOWMiLE5KY3k6Ilx1MDQwYSIsTmFjdXRlOiJcdTAxNDMiLE5jYXJvbjoiXHUwMTQ3IixOY2VkaWw6Ilx1MDE0NSIsTmN5OiJcdTA0MWQiLE5lZ2F0aXZlTWVkaXVtU3BhY2U6Ilx1MjAwYiIsTmVnYXRpdmVUaGlja1NwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVGhpblNwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVmVyeVRoaW5TcGFjZToiXHUyMDBiIixaZXJvV2lkdGhTcGFjZToiXHUyMDBiIixOZXdMaW5lOiJcbiIsTmZyOiJcdWQ4MzVcdWRkMTEiLE5vQnJlYWs6Ilx1MjA2MCIsTm9uQnJlYWtpbmdTcGFjZToiXHhhMCIsbmJzcDoiXHhhMCIsTm9wZjoiXHUyMTE1IixuYXR1cmFsczoiXHUyMTE1IixOb3Q6Ilx1MmFlYyIsTm90Q29uZ3J1ZW50OiJcdTIyNjIiLG5lcXVpdjoiXHUyMjYyIixOb3RDdXBDYXA6Ilx1MjI2ZCIsTm90RG91YmxlVmVydGljYWxCYXI6Ilx1MjIyNiIsbnBhcjoiXHUyMjI2IixucGFyYWxsZWw6Ilx1MjIyNiIsbnNob3J0cGFyYWxsZWw6Ilx1MjIyNiIsbnNwYXI6Ilx1MjIyNiIsTm90RWxlbWVudDoiXHUyMjA5Iixub3RpbjoiXHUyMjA5Iixub3RpbnZhOiJcdTIyMDkiLE5vdEVxdWFsOiJcdTIyNjAiLG5lOiJcdTIyNjAiLE5vdEVxdWFsVGlsZGU6Ilx1MjI0Mlx1MDMzOCIsbmVzaW06Ilx1MjI0Mlx1MDMzOCIsTm90RXhpc3RzOiJcdTIyMDQiLG5leGlzdDoiXHUyMjA0IixuZXhpc3RzOiJcdTIyMDQiLE5vdEdyZWF0ZXI6Ilx1MjI2ZiIsbmd0OiJcdTIyNmYiLG5ndHI6Ilx1MjI2ZiIsTm90R3JlYXRlckVxdWFsOiJcdTIyNzEiLG5nZToiXHUyMjcxIixuZ2VxOiJcdTIyNzEiLE5vdEdyZWF0ZXJGdWxsRXF1YWw6Ilx1MjI2N1x1MDMzOCIsbmdFOiJcdTIyNjdcdTAzMzgiLG5nZXFxOiJcdTIyNjdcdTAzMzgiLE5vdEdyZWF0ZXJHcmVhdGVyOiJcdTIyNmJcdTAzMzgiLG5HdHY6Ilx1MjI2Ylx1MDMzOCIsTm90R3JlYXRlckxlc3M6Ilx1MjI3OSIsbnRnbDoiXHUyMjc5IixOb3RHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlXHUwMzM4IixuZ2Vxc2xhbnQ6Ilx1MmE3ZVx1MDMzOCIsbmdlczoiXHUyYTdlXHUwMzM4IixOb3RHcmVhdGVyVGlsZGU6Ilx1MjI3NSIsbmdzaW06Ilx1MjI3NSIsTm90SHVtcERvd25IdW1wOiJcdTIyNGVcdTAzMzgiLG5idW1wOiJcdTIyNGVcdTAzMzgiLE5vdEh1bXBFcXVhbDoiXHUyMjRmXHUwMzM4IixuYnVtcGU6Ilx1MjI0Zlx1MDMzOCIsTm90TGVmdFRyaWFuZ2xlOiJcdTIyZWEiLG5sdHJpOiJcdTIyZWEiLG50cmlhbmdsZWxlZnQ6Ilx1MjJlYSIsTm90TGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2ZcdTAzMzgiLE5vdExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyZWMiLG5sdHJpZToiXHUyMmVjIixudHJpYW5nbGVsZWZ0ZXE6Ilx1MjJlYyIsTm90TGVzczoiXHUyMjZlIixubGVzczoiXHUyMjZlIixubHQ6Ilx1MjI2ZSIsTm90TGVzc0VxdWFsOiJcdTIyNzAiLG5sZToiXHUyMjcwIixubGVxOiJcdTIyNzAiLE5vdExlc3NHcmVhdGVyOiJcdTIyNzgiLG50bGc6Ilx1MjI3OCIsTm90TGVzc0xlc3M6Ilx1MjI2YVx1MDMzOCIsbkx0djoiXHUyMjZhXHUwMzM4IixOb3RMZXNzU2xhbnRFcXVhbDoiXHUyYTdkXHUwMzM4IixubGVxc2xhbnQ6Ilx1MmE3ZFx1MDMzOCIsbmxlczoiXHUyYTdkXHUwMzM4IixOb3RMZXNzVGlsZGU6Ilx1MjI3NCIsbmxzaW06Ilx1MjI3NCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMlx1MDMzOCIsTm90TmVzdGVkTGVzc0xlc3M6Ilx1MmFhMVx1MDMzOCIsTm90UHJlY2VkZXM6Ilx1MjI4MCIsbnByOiJcdTIyODAiLG5wcmVjOiJcdTIyODAiLE5vdFByZWNlZGVzRXF1YWw6Ilx1MmFhZlx1MDMzOCIsbnByZToiXHUyYWFmXHUwMzM4IixucHJlY2VxOiJcdTJhYWZcdTAzMzgiLE5vdFByZWNlZGVzU2xhbnRFcXVhbDoiXHUyMmUwIixucHJjdWU6Ilx1MjJlMCIsTm90UmV2ZXJzZUVsZW1lbnQ6Ilx1MjIwYyIsbm90bmk6Ilx1MjIwYyIsbm90bml2YToiXHUyMjBjIixOb3RSaWdodFRyaWFuZ2xlOiJcdTIyZWIiLG5ydHJpOiJcdTIyZWIiLG50cmlhbmdsZXJpZ2h0OiJcdTIyZWIiLE5vdFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMFx1MDMzOCIsTm90UmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyZWQiLG5ydHJpZToiXHUyMmVkIixudHJpYW5nbGVyaWdodGVxOiJcdTIyZWQiLE5vdFNxdWFyZVN1YnNldDoiXHUyMjhmXHUwMzM4IixOb3RTcXVhcmVTdWJzZXRFcXVhbDoiXHUyMmUyIixuc3FzdWJlOiJcdTIyZTIiLE5vdFNxdWFyZVN1cGVyc2V0OiJcdTIyOTBcdTAzMzgiLE5vdFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjJlMyIsbnNxc3VwZToiXHUyMmUzIixOb3RTdWJzZXQ6Ilx1MjI4Mlx1MjBkMiIsbnN1YnNldDoiXHUyMjgyXHUyMGQyIix2bnN1YjoiXHUyMjgyXHUyMGQyIixOb3RTdWJzZXRFcXVhbDoiXHUyMjg4Iixuc3ViZToiXHUyMjg4Iixuc3Vic2V0ZXE6Ilx1MjI4OCIsTm90U3VjY2VlZHM6Ilx1MjI4MSIsbnNjOiJcdTIyODEiLG5zdWNjOiJcdTIyODEiLE5vdFN1Y2NlZWRzRXF1YWw6Ilx1MmFiMFx1MDMzOCIsbnNjZToiXHUyYWIwXHUwMzM4Iixuc3VjY2VxOiJcdTJhYjBcdTAzMzgiLE5vdFN1Y2NlZWRzU2xhbnRFcXVhbDoiXHUyMmUxIixuc2NjdWU6Ilx1MjJlMSIsTm90U3VjY2VlZHNUaWxkZToiXHUyMjdmXHUwMzM4IixOb3RTdXBlcnNldDoiXHUyMjgzXHUyMGQyIixuc3Vwc2V0OiJcdTIyODNcdTIwZDIiLHZuc3VwOiJcdTIyODNcdTIwZDIiLE5vdFN1cGVyc2V0RXF1YWw6Ilx1MjI4OSIsbnN1cGU6Ilx1MjI4OSIsbnN1cHNldGVxOiJcdTIyODkiLE5vdFRpbGRlOiJcdTIyNDEiLG5zaW06Ilx1MjI0MSIsTm90VGlsZGVFcXVhbDoiXHUyMjQ0Iixuc2ltZToiXHUyMjQ0Iixuc2ltZXE6Ilx1MjI0NCIsTm90VGlsZGVGdWxsRXF1YWw6Ilx1MjI0NyIsbmNvbmc6Ilx1MjI0NyIsTm90VGlsZGVUaWxkZToiXHUyMjQ5IixuYXA6Ilx1MjI0OSIsbmFwcHJveDoiXHUyMjQ5IixOb3RWZXJ0aWNhbEJhcjoiXHUyMjI0IixubWlkOiJcdTIyMjQiLG5zaG9ydG1pZDoiXHUyMjI0Iixuc21pZDoiXHUyMjI0IixOc2NyOiJcdWQ4MzVcdWRjYTkiLE50aWxkZToiXHhkMSIsTnU6Ilx1MDM5ZCIsT0VsaWc6Ilx1MDE1MiIsT2FjdXRlOiJceGQzIixPY2lyYzoiXHhkNCIsT2N5OiJcdTA0MWUiLE9kYmxhYzoiXHUwMTUwIixPZnI6Ilx1ZDgzNVx1ZGQxMiIsT2dyYXZlOiJceGQyIixPbWFjcjoiXHUwMTRjIixPbWVnYToiXHUwM2E5IixvaG06Ilx1MDNhOSIsT21pY3JvbjoiXHUwMzlmIixPb3BmOiJcdWQ4MzVcdWRkNDYiLE9wZW5DdXJseURvdWJsZVF1b3RlOiJcdTIwMWMiLGxkcXVvOiJcdTIwMWMiLE9wZW5DdXJseVF1b3RlOiJcdTIwMTgiLGxzcXVvOiJcdTIwMTgiLE9yOiJcdTJhNTQiLE9zY3I6Ilx1ZDgzNVx1ZGNhYSIsT3NsYXNoOiJceGQ4IixPdGlsZGU6Ilx4ZDUiLE90aW1lczoiXHUyYTM3IixPdW1sOiJceGQ2IixPdmVyQmFyOiJcdTIwM2UiLG9saW5lOiJcdTIwM2UiLE92ZXJCcmFjZToiXHUyM2RlIixPdmVyQnJhY2tldDoiXHUyM2I0Iix0YnJrOiJcdTIzYjQiLE92ZXJQYXJlbnRoZXNpczoiXHUyM2RjIixQYXJ0aWFsRDoiXHUyMjAyIixwYXJ0OiJcdTIyMDIiLFBjeToiXHUwNDFmIixQZnI6Ilx1ZDgzNVx1ZGQxMyIsUGhpOiJcdTAzYTYiLFBpOiJcdTAzYTAiLFBsdXNNaW51czoiXHhiMSIscGx1c21uOiJceGIxIixwbToiXHhiMSIsUG9wZjoiXHUyMTE5IixwcmltZXM6Ilx1MjExOSIsUHI6Ilx1MmFiYiIsUHJlY2VkZXM6Ilx1MjI3YSIscHI6Ilx1MjI3YSIscHJlYzoiXHUyMjdhIixQcmVjZWRlc0VxdWFsOiJcdTJhYWYiLHByZToiXHUyYWFmIixwcmVjZXE6Ilx1MmFhZiIsUHJlY2VkZXNTbGFudEVxdWFsOiJcdTIyN2MiLHByY3VlOiJcdTIyN2MiLHByZWNjdXJseWVxOiJcdTIyN2MiLFByZWNlZGVzVGlsZGU6Ilx1MjI3ZSIscHJlY3NpbToiXHUyMjdlIixwcnNpbToiXHUyMjdlIixQcmltZToiXHUyMDMzIixQcm9kdWN0OiJcdTIyMGYiLHByb2Q6Ilx1MjIwZiIsUHJvcG9ydGlvbmFsOiJcdTIyMWQiLHByb3A6Ilx1MjIxZCIscHJvcHRvOiJcdTIyMWQiLHZhcnByb3B0bzoiXHUyMjFkIix2cHJvcDoiXHUyMjFkIixQc2NyOiJcdWQ4MzVcdWRjYWIiLFBzaToiXHUwM2E4IixRVU9UOiciJyxxdW90OiciJyxRZnI6Ilx1ZDgzNVx1ZGQxNCIsUW9wZjoiXHUyMTFhIixyYXRpb25hbHM6Ilx1MjExYSIsUXNjcjoiXHVkODM1XHVkY2FjIixSQmFycjoiXHUyOTEwIixkcmJrYXJvdzoiXHUyOTEwIixSRUc6Ilx4YWUiLGNpcmNsZWRSOiJceGFlIixyZWc6Ilx4YWUiLFJhY3V0ZToiXHUwMTU0IixSYW5nOiJcdTI3ZWIiLFJhcnI6Ilx1MjFhMCIsdHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFhMCIsUmFycnRsOiJcdTI5MTYiLFJjYXJvbjoiXHUwMTU4IixSY2VkaWw6Ilx1MDE1NiIsUmN5OiJcdTA0MjAiLFJlOiJcdTIxMWMiLFJmcjoiXHUyMTFjIixyZWFsOiJcdTIxMWMiLHJlYWxwYXJ0OiJcdTIxMWMiLFJldmVyc2VFbGVtZW50OiJcdTIyMGIiLFN1Y2hUaGF0OiJcdTIyMGIiLG5pOiJcdTIyMGIiLG5pdjoiXHUyMjBiIixSZXZlcnNlRXF1aWxpYnJpdW06Ilx1MjFjYiIsbGVmdHJpZ2h0aGFycG9vbnM6Ilx1MjFjYiIsbHJoYXI6Ilx1MjFjYiIsUmV2ZXJzZVVwRXF1aWxpYnJpdW06Ilx1Mjk2ZiIsZHVoYXI6Ilx1Mjk2ZiIsUmhvOiJcdTAzYTEiLFJpZ2h0QW5nbGVCcmFja2V0OiJcdTI3ZTkiLHJhbmc6Ilx1MjdlOSIscmFuZ2xlOiJcdTI3ZTkiLFJpZ2h0QXJyb3c6Ilx1MjE5MiIsU2hvcnRSaWdodEFycm93OiJcdTIxOTIiLHJhcnI6Ilx1MjE5MiIscmlnaHRhcnJvdzoiXHUyMTkyIixzcmFycjoiXHUyMTkyIixSaWdodEFycm93QmFyOiJcdTIxZTUiLHJhcnJiOiJcdTIxZTUiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6Ilx1MjFjNCIscmlnaHRsZWZ0YXJyb3dzOiJcdTIxYzQiLHJsYXJyOiJcdTIxYzQiLFJpZ2h0Q2VpbGluZzoiXHUyMzA5IixyY2VpbDoiXHUyMzA5IixSaWdodERvdWJsZUJyYWNrZXQ6Ilx1MjdlNyIscm9icms6Ilx1MjdlNyIsUmlnaHREb3duVGVlVmVjdG9yOiJcdTI5NWQiLFJpZ2h0RG93blZlY3RvcjoiXHUyMWMyIixkaGFycjoiXHUyMWMyIixkb3duaGFycG9vbnJpZ2h0OiJcdTIxYzIiLFJpZ2h0RG93blZlY3RvckJhcjoiXHUyOTU1IixSaWdodEZsb29yOiJcdTIzMGIiLHJmbG9vcjoiXHUyMzBiIixSaWdodFRlZToiXHUyMmEyIix2ZGFzaDoiXHUyMmEyIixSaWdodFRlZUFycm93OiJcdTIxYTYiLG1hcDoiXHUyMWE2IixtYXBzdG86Ilx1MjFhNiIsUmlnaHRUZWVWZWN0b3I6Ilx1Mjk1YiIsUmlnaHRUcmlhbmdsZToiXHUyMmIzIix2YXJ0cmlhbmdsZXJpZ2h0OiJcdTIyYjMiLHZydHJpOiJcdTIyYjMiLFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMCIsUmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyYjUiLHJ0cmllOiJcdTIyYjUiLHRyaWFuZ2xlcmlnaHRlcToiXHUyMmI1IixSaWdodFVwRG93blZlY3RvcjoiXHUyOTRmIixSaWdodFVwVGVlVmVjdG9yOiJcdTI5NWMiLFJpZ2h0VXBWZWN0b3I6Ilx1MjFiZSIsdWhhcnI6Ilx1MjFiZSIsdXBoYXJwb29ucmlnaHQ6Ilx1MjFiZSIsUmlnaHRVcFZlY3RvckJhcjoiXHUyOTU0IixSaWdodFZlY3RvcjoiXHUyMWMwIixyaGFydToiXHUyMWMwIixyaWdodGhhcnBvb251cDoiXHUyMWMwIixSaWdodFZlY3RvckJhcjoiXHUyOTUzIixSb3BmOiJcdTIxMWQiLHJlYWxzOiJcdTIxMWQiLFJvdW5kSW1wbGllczoiXHUyOTcwIixScmlnaHRhcnJvdzoiXHUyMWRiIixyQWFycjoiXHUyMWRiIixSc2NyOiJcdTIxMWIiLHJlYWxpbmU6Ilx1MjExYiIsUnNoOiJcdTIxYjEiLHJzaDoiXHUyMWIxIixSdWxlRGVsYXllZDoiXHUyOWY0IixTSENIY3k6Ilx1MDQyOSIsU0hjeToiXHUwNDI4IixTT0ZUY3k6Ilx1MDQyYyIsU2FjdXRlOiJcdTAxNWEiLFNjOiJcdTJhYmMiLFNjYXJvbjoiXHUwMTYwIixTY2VkaWw6Ilx1MDE1ZSIsU2NpcmM6Ilx1MDE1YyIsU2N5OiJcdTA0MjEiLFNmcjoiXHVkODM1XHVkZDE2IixTaG9ydFVwQXJyb3c6Ilx1MjE5MSIsVXBBcnJvdzoiXHUyMTkxIix1YXJyOiJcdTIxOTEiLHVwYXJyb3c6Ilx1MjE5MSIsU2lnbWE6Ilx1MDNhMyIsU21hbGxDaXJjbGU6Ilx1MjIxOCIsY29tcGZuOiJcdTIyMTgiLFNvcGY6Ilx1ZDgzNVx1ZGQ0YSIsU3FydDoiXHUyMjFhIixyYWRpYzoiXHUyMjFhIixTcXVhcmU6Ilx1MjVhMSIsc3F1OiJcdTI1YTEiLHNxdWFyZToiXHUyNWExIixTcXVhcmVJbnRlcnNlY3Rpb246Ilx1MjI5MyIsc3FjYXA6Ilx1MjI5MyIsU3F1YXJlU3Vic2V0OiJcdTIyOGYiLHNxc3ViOiJcdTIyOGYiLHNxc3Vic2V0OiJcdTIyOGYiLFNxdWFyZVN1YnNldEVxdWFsOiJcdTIyOTEiLHNxc3ViZToiXHUyMjkxIixzcXN1YnNldGVxOiJcdTIyOTEiLFNxdWFyZVN1cGVyc2V0OiJcdTIyOTAiLHNxc3VwOiJcdTIyOTAiLHNxc3Vwc2V0OiJcdTIyOTAiLFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjI5MiIsc3FzdXBlOiJcdTIyOTIiLHNxc3Vwc2V0ZXE6Ilx1MjI5MiIsU3F1YXJlVW5pb246Ilx1MjI5NCIsc3FjdXA6Ilx1MjI5NCIsU3NjcjoiXHVkODM1XHVkY2FlIixTdGFyOiJcdTIyYzYiLHNzdGFyZjoiXHUyMmM2IixTdWI6Ilx1MjJkMCIsU3Vic2V0OiJcdTIyZDAiLFN1YnNldEVxdWFsOiJcdTIyODYiLHN1YmU6Ilx1MjI4NiIsc3Vic2V0ZXE6Ilx1MjI4NiIsU3VjY2VlZHM6Ilx1MjI3YiIsc2M6Ilx1MjI3YiIsc3VjYzoiXHUyMjdiIixTdWNjZWVkc0VxdWFsOiJcdTJhYjAiLHNjZToiXHUyYWIwIixzdWNjZXE6Ilx1MmFiMCIsU3VjY2VlZHNTbGFudEVxdWFsOiJcdTIyN2QiLHNjY3VlOiJcdTIyN2QiLHN1Y2NjdXJseWVxOiJcdTIyN2QiLFN1Y2NlZWRzVGlsZGU6Ilx1MjI3ZiIsc2NzaW06Ilx1MjI3ZiIsc3VjY3NpbToiXHUyMjdmIixTdW06Ilx1MjIxMSIsc3VtOiJcdTIyMTEiLFN1cDoiXHUyMmQxIixTdXBzZXQ6Ilx1MjJkMSIsU3VwZXJzZXQ6Ilx1MjI4MyIsc3VwOiJcdTIyODMiLHN1cHNldDoiXHUyMjgzIixTdXBlcnNldEVxdWFsOiJcdTIyODciLHN1cGU6Ilx1MjI4NyIsc3Vwc2V0ZXE6Ilx1MjI4NyIsVEhPUk46Ilx4ZGUiLFRSQURFOiJcdTIxMjIiLHRyYWRlOiJcdTIxMjIiLFRTSGN5OiJcdTA0MGIiLFRTY3k6Ilx1MDQyNiIsVGFiOiJcdCIsVGF1OiJcdTAzYTQiLFRjYXJvbjoiXHUwMTY0IixUY2VkaWw6Ilx1MDE2MiIsVGN5OiJcdTA0MjIiLFRmcjoiXHVkODM1XHVkZDE3IixUaGVyZWZvcmU6Ilx1MjIzNCIsdGhlcmU0OiJcdTIyMzQiLHRoZXJlZm9yZToiXHUyMjM0IixUaGV0YToiXHUwMzk4IixUaGlja1NwYWNlOiJcdTIwNWZcdTIwMGEiLFRoaW5TcGFjZToiXHUyMDA5Iix0aGluc3A6Ilx1MjAwOSIsVGlsZGU6Ilx1MjIzYyIsc2ltOiJcdTIyM2MiLHRoaWNrc2ltOiJcdTIyM2MiLHRoa3NpbToiXHUyMjNjIixUaWxkZUVxdWFsOiJcdTIyNDMiLHNpbWU6Ilx1MjI0MyIsc2ltZXE6Ilx1MjI0MyIsVGlsZGVGdWxsRXF1YWw6Ilx1MjI0NSIsY29uZzoiXHUyMjQ1IixUaWxkZVRpbGRlOiJcdTIyNDgiLGFwOiJcdTIyNDgiLGFwcHJveDoiXHUyMjQ4Iixhc3ltcDoiXHUyMjQ4Iix0aGlja2FwcHJveDoiXHUyMjQ4Iix0aGthcDoiXHUyMjQ4IixUb3BmOiJcdWQ4MzVcdWRkNGIiLFRyaXBsZURvdDoiXHUyMGRiIix0ZG90OiJcdTIwZGIiLFRzY3I6Ilx1ZDgzNVx1ZGNhZiIsVHN0cm9rOiJcdTAxNjYiLFVhY3V0ZToiXHhkYSIsVWFycjoiXHUyMTlmIixVYXJyb2NpcjoiXHUyOTQ5IixVYnJjeToiXHUwNDBlIixVYnJldmU6Ilx1MDE2YyIsVWNpcmM6Ilx4ZGIiLFVjeToiXHUwNDIzIixVZGJsYWM6Ilx1MDE3MCIsVWZyOiJcdWQ4MzVcdWRkMTgiLFVncmF2ZToiXHhkOSIsVW1hY3I6Ilx1MDE2YSIsVW5kZXJCYXI6Il8iLGxvd2JhcjoiXyIsVW5kZXJCcmFjZToiXHUyM2RmIixVbmRlckJyYWNrZXQ6Ilx1MjNiNSIsYmJyazoiXHUyM2I1IixVbmRlclBhcmVudGhlc2lzOiJcdTIzZGQiLFVuaW9uOiJcdTIyYzMiLGJpZ2N1cDoiXHUyMmMzIix4Y3VwOiJcdTIyYzMiLFVuaW9uUGx1czoiXHUyMjhlIix1cGx1czoiXHUyMjhlIixVb2dvbjoiXHUwMTcyIixVb3BmOiJcdWQ4MzVcdWRkNGMiLFVwQXJyb3dCYXI6Ilx1MjkxMiIsVXBBcnJvd0Rvd25BcnJvdzoiXHUyMWM1Iix1ZGFycjoiXHUyMWM1IixVcERvd25BcnJvdzoiXHUyMTk1Iix1cGRvd25hcnJvdzoiXHUyMTk1Iix2YXJyOiJcdTIxOTUiLFVwRXF1aWxpYnJpdW06Ilx1Mjk2ZSIsdWRoYXI6Ilx1Mjk2ZSIsVXBUZWU6Ilx1MjJhNSIsYm90OiJcdTIyYTUiLGJvdHRvbToiXHUyMmE1IixwZXJwOiJcdTIyYTUiLFVwVGVlQXJyb3c6Ilx1MjFhNSIsbWFwc3RvdXA6Ilx1MjFhNSIsVXBwZXJMZWZ0QXJyb3c6Ilx1MjE5NiIsbndhcnI6Ilx1MjE5NiIsbndhcnJvdzoiXHUyMTk2IixVcHBlclJpZ2h0QXJyb3c6Ilx1MjE5NyIsbmVhcnI6Ilx1MjE5NyIsbmVhcnJvdzoiXHUyMTk3IixVcHNpOiJcdTAzZDIiLHVwc2loOiJcdTAzZDIiLFVwc2lsb246Ilx1MDNhNSIsVXJpbmc6Ilx1MDE2ZSIsVXNjcjoiXHVkODM1XHVkY2IwIixVdGlsZGU6Ilx1MDE2OCIsVXVtbDoiXHhkYyIsVkRhc2g6Ilx1MjJhYiIsVmJhcjoiXHUyYWViIixWY3k6Ilx1MDQxMiIsVmRhc2g6Ilx1MjJhOSIsVmRhc2hsOiJcdTJhZTYiLFZlZToiXHUyMmMxIixiaWd2ZWU6Ilx1MjJjMSIseHZlZToiXHUyMmMxIixWZXJiYXI6Ilx1MjAxNiIsVmVydDoiXHUyMDE2IixWZXJ0aWNhbEJhcjoiXHUyMjIzIixtaWQ6Ilx1MjIyMyIsc2hvcnRtaWQ6Ilx1MjIyMyIsc21pZDoiXHUyMjIzIixWZXJ0aWNhbExpbmU6InwiLHZlcmJhcjoifCIsdmVydDoifCIsVmVydGljYWxTZXBhcmF0b3I6Ilx1Mjc1OCIsVmVydGljYWxUaWxkZToiXHUyMjQwIix3cjoiXHUyMjQwIix3cmVhdGg6Ilx1MjI0MCIsVmVyeVRoaW5TcGFjZToiXHUyMDBhIixoYWlyc3A6Ilx1MjAwYSIsVmZyOiJcdWQ4MzVcdWRkMTkiLFZvcGY6Ilx1ZDgzNVx1ZGQ0ZCIsVnNjcjoiXHVkODM1XHVkY2IxIixWdmRhc2g6Ilx1MjJhYSIsV2NpcmM6Ilx1MDE3NCIsV2VkZ2U6Ilx1MjJjMCIsYmlnd2VkZ2U6Ilx1MjJjMCIseHdlZGdlOiJcdTIyYzAiLFdmcjoiXHVkODM1XHVkZDFhIixXb3BmOiJcdWQ4MzVcdWRkNGUiLFdzY3I6Ilx1ZDgzNVx1ZGNiMiIsWGZyOiJcdWQ4MzVcdWRkMWIiLFhpOiJcdTAzOWUiLFhvcGY6Ilx1ZDgzNVx1ZGQ0ZiIsWHNjcjoiXHVkODM1XHVkY2IzIixZQWN5OiJcdTA0MmYiLFlJY3k6Ilx1MDQwNyIsWVVjeToiXHUwNDJlIixZYWN1dGU6Ilx4ZGQiLFljaXJjOiJcdTAxNzYiLFljeToiXHUwNDJiIixZZnI6Ilx1ZDgzNVx1ZGQxYyIsWW9wZjoiXHVkODM1XHVkZDUwIixZc2NyOiJcdWQ4MzVcdWRjYjQiLFl1bWw6Ilx1MDE3OCIsWkhjeToiXHUwNDE2IixaYWN1dGU6Ilx1MDE3OSIsWmNhcm9uOiJcdTAxN2QiLFpjeToiXHUwNDE3IixaZG90OiJcdTAxN2IiLFpldGE6Ilx1MDM5NiIsWmZyOiJcdTIxMjgiLHplZXRyZjoiXHUyMTI4Iixab3BmOiJcdTIxMjQiLGludGVnZXJzOiJcdTIxMjQiLFpzY3I6Ilx1ZDgzNVx1ZGNiNSIsYWFjdXRlOiJceGUxIixhYnJldmU6Ilx1MDEwMyIsYWM6Ilx1MjIzZSIsbXN0cG9zOiJcdTIyM2UiLGFjRToiXHUyMjNlXHUwMzMzIixhY2Q6Ilx1MjIzZiIsYWNpcmM6Ilx4ZTIiLGFjeToiXHUwNDMwIixhZWxpZzoiXHhlNiIsYWZyOiJcdWQ4MzVcdWRkMWUiLGFncmF2ZToiXHhlMCIsYWxlZnN5bToiXHUyMTM1IixhbGVwaDoiXHUyMTM1IixhbHBoYToiXHUwM2IxIixhbWFjcjoiXHUwMTAxIixhbWFsZzoiXHUyYTNmIixhbmQ6Ilx1MjIyNyIsd2VkZ2U6Ilx1MjIyNyIsYW5kYW5kOiJcdTJhNTUiLGFuZGQ6Ilx1MmE1YyIsYW5kc2xvcGU6Ilx1MmE1OCIsYW5kdjoiXHUyYTVhIixhbmc6Ilx1MjIyMCIsYW5nbGU6Ilx1MjIyMCIsYW5nZToiXHUyOWE0Iixhbmdtc2Q6Ilx1MjIyMSIsbWVhc3VyZWRhbmdsZToiXHUyMjIxIixhbmdtc2RhYToiXHUyOWE4Iixhbmdtc2RhYjoiXHUyOWE5Iixhbmdtc2RhYzoiXHUyOWFhIixhbmdtc2RhZDoiXHUyOWFiIixhbmdtc2RhZToiXHUyOWFjIixhbmdtc2RhZjoiXHUyOWFkIixhbmdtc2RhZzoiXHUyOWFlIixhbmdtc2RhaDoiXHUyOWFmIixhbmdydDoiXHUyMjFmIixhbmdydHZiOiJcdTIyYmUiLGFuZ3J0dmJkOiJcdTI5OWQiLGFuZ3NwaDoiXHUyMjIyIixhbmd6YXJyOiJcdTIzN2MiLGFvZ29uOiJcdTAxMDUiLGFvcGY6Ilx1ZDgzNVx1ZGQ1MiIsYXBFOiJcdTJhNzAiLGFwYWNpcjoiXHUyYTZmIixhcGU6Ilx1MjI0YSIsYXBwcm94ZXE6Ilx1MjI0YSIsYXBpZDoiXHUyMjRiIixhcG9zOiInIixhcmluZzoiXHhlNSIsYXNjcjoiXHVkODM1XHVkY2I2Iixhc3Q6IioiLG1pZGFzdDoiKiIsYXRpbGRlOiJceGUzIixhdW1sOiJceGU0Iixhd2ludDoiXHUyYTExIixiTm90OiJcdTJhZWQiLGJhY2tjb25nOiJcdTIyNGMiLGJjb25nOiJcdTIyNGMiLGJhY2tlcHNpbG9uOiJcdTAzZjYiLGJlcHNpOiJcdTAzZjYiLGJhY2twcmltZToiXHUyMDM1IixicHJpbWU6Ilx1MjAzNSIsYmFja3NpbToiXHUyMjNkIixic2ltOiJcdTIyM2QiLGJhY2tzaW1lcToiXHUyMmNkIixic2ltZToiXHUyMmNkIixiYXJ2ZWU6Ilx1MjJiZCIsYmFyd2VkOiJcdTIzMDUiLGJhcndlZGdlOiJcdTIzMDUiLGJicmt0YnJrOiJcdTIzYjYiLGJjeToiXHUwNDMxIixiZHF1bzoiXHUyMDFlIixsZHF1b3I6Ilx1MjAxZSIsYmVtcHR5djoiXHUyOWIwIixiZXRhOiJcdTAzYjIiLGJldGg6Ilx1MjEzNiIsYmV0d2VlbjoiXHUyMjZjIix0d2l4dDoiXHUyMjZjIixiZnI6Ilx1ZDgzNVx1ZGQxZiIsYmlnY2lyYzoiXHUyNWVmIix4Y2lyYzoiXHUyNWVmIixiaWdvZG90OiJcdTJhMDAiLHhvZG90OiJcdTJhMDAiLGJpZ29wbHVzOiJcdTJhMDEiLHhvcGx1czoiXHUyYTAxIixiaWdvdGltZXM6Ilx1MmEwMiIseG90aW1lOiJcdTJhMDIiLGJpZ3NxY3VwOiJcdTJhMDYiLHhzcWN1cDoiXHUyYTA2IixiaWdzdGFyOiJcdTI2MDUiLHN0YXJmOiJcdTI2MDUiLGJpZ3RyaWFuZ2xlZG93bjoiXHUyNWJkIix4ZHRyaToiXHUyNWJkIixiaWd0cmlhbmdsZXVwOiJcdTI1YjMiLHh1dHJpOiJcdTI1YjMiLGJpZ3VwbHVzOiJcdTJhMDQiLHh1cGx1czoiXHUyYTA0Iixia2Fyb3c6Ilx1MjkwZCIscmJhcnI6Ilx1MjkwZCIsYmxhY2tsb3plbmdlOiJcdTI5ZWIiLGxvemY6Ilx1MjllYiIsYmxhY2t0cmlhbmdsZToiXHUyNWI0Iix1dHJpZjoiXHUyNWI0IixibGFja3RyaWFuZ2xlZG93bjoiXHUyNWJlIixkdHJpZjoiXHUyNWJlIixibGFja3RyaWFuZ2xlbGVmdDoiXHUyNWMyIixsdHJpZjoiXHUyNWMyIixibGFja3RyaWFuZ2xlcmlnaHQ6Ilx1MjViOCIscnRyaWY6Ilx1MjViOCIsYmxhbms6Ilx1MjQyMyIsYmxrMTI6Ilx1MjU5MiIsYmxrMTQ6Ilx1MjU5MSIsYmxrMzQ6Ilx1MjU5MyIsYmxvY2s6Ilx1MjU4OCIsYm5lOiI9XHUyMGU1IixibmVxdWl2OiJcdTIyNjFcdTIwZTUiLGJub3Q6Ilx1MjMxMCIsYm9wZjoiXHVkODM1XHVkZDUzIixib3d0aWU6Ilx1MjJjOCIsYm94REw6Ilx1MjU1NyIsYm94RFI6Ilx1MjU1NCIsYm94RGw6Ilx1MjU1NiIsYm94RHI6Ilx1MjU1MyIsYm94SDoiXHUyNTUwIixib3hIRDoiXHUyNTY2Iixib3hIVToiXHUyNTY5Iixib3hIZDoiXHUyNTY0Iixib3hIdToiXHUyNTY3Iixib3hVTDoiXHUyNTVkIixib3hVUjoiXHUyNTVhIixib3hVbDoiXHUyNTVjIixib3hVcjoiXHUyNTU5Iixib3hWOiJcdTI1NTEiLGJveFZIOiJcdTI1NmMiLGJveFZMOiJcdTI1NjMiLGJveFZSOiJcdTI1NjAiLGJveFZoOiJcdTI1NmIiLGJveFZsOiJcdTI1NjIiLGJveFZyOiJcdTI1NWYiLGJveGJveDoiXHUyOWM5Iixib3hkTDoiXHUyNTU1Iixib3hkUjoiXHUyNTUyIixib3hkbDoiXHUyNTEwIixib3hkcjoiXHUyNTBjIixib3hoRDoiXHUyNTY1Iixib3hoVToiXHUyNTY4Iixib3hoZDoiXHUyNTJjIixib3hodToiXHUyNTM0Iixib3htaW51czoiXHUyMjlmIixtaW51c2I6Ilx1MjI5ZiIsYm94cGx1czoiXHUyMjllIixwbHVzYjoiXHUyMjllIixib3h0aW1lczoiXHUyMmEwIix0aW1lc2I6Ilx1MjJhMCIsYm94dUw6Ilx1MjU1YiIsYm94dVI6Ilx1MjU1OCIsYm94dWw6Ilx1MjUxOCIsYm94dXI6Ilx1MjUxNCIsYm94djoiXHUyNTAyIixib3h2SDoiXHUyNTZhIixib3h2TDoiXHUyNTYxIixib3h2UjoiXHUyNTVlIixib3h2aDoiXHUyNTNjIixib3h2bDoiXHUyNTI0Iixib3h2cjoiXHUyNTFjIixicnZiYXI6Ilx4YTYiLGJzY3I6Ilx1ZDgzNVx1ZGNiNyIsYnNlbWk6Ilx1MjA0ZiIsYnNvbDoiXFwiLGJzb2xiOiJcdTI5YzUiLGJzb2xoc3ViOiJcdTI3YzgiLGJ1bGw6Ilx1MjAyMiIsYnVsbGV0OiJcdTIwMjIiLGJ1bXBFOiJcdTJhYWUiLGNhY3V0ZToiXHUwMTA3IixjYXA6Ilx1MjIyOSIsY2FwYW5kOiJcdTJhNDQiLGNhcGJyY3VwOiJcdTJhNDkiLGNhcGNhcDoiXHUyYTRiIixjYXBjdXA6Ilx1MmE0NyIsY2FwZG90OiJcdTJhNDAiLGNhcHM6Ilx1MjIyOVx1ZmUwMCIsY2FyZXQ6Ilx1MjA0MSIsY2NhcHM6Ilx1MmE0ZCIsY2Nhcm9uOiJcdTAxMGQiLGNjZWRpbDoiXHhlNyIsY2NpcmM6Ilx1MDEwOSIsY2N1cHM6Ilx1MmE0YyIsY2N1cHNzbToiXHUyYTUwIixjZG90OiJcdTAxMGIiLGNlbXB0eXY6Ilx1MjliMiIsY2VudDoiXHhhMiIsY2ZyOiJcdWQ4MzVcdWRkMjAiLGNoY3k6Ilx1MDQ0NyIsY2hlY2s6Ilx1MjcxMyIsY2hlY2ttYXJrOiJcdTI3MTMiLGNoaToiXHUwM2M3IixjaXI6Ilx1MjVjYiIsY2lyRToiXHUyOWMzIixjaXJjOiJcdTAyYzYiLGNpcmNlcToiXHUyMjU3IixjaXJlOiJcdTIyNTciLGNpcmNsZWFycm93bGVmdDoiXHUyMWJhIixvbGFycjoiXHUyMWJhIixjaXJjbGVhcnJvd3JpZ2h0OiJcdTIxYmIiLG9yYXJyOiJcdTIxYmIiLGNpcmNsZWRTOiJcdTI0YzgiLG9TOiJcdTI0YzgiLGNpcmNsZWRhc3Q6Ilx1MjI5YiIsb2FzdDoiXHUyMjliIixjaXJjbGVkY2lyYzoiXHUyMjlhIixvY2lyOiJcdTIyOWEiLGNpcmNsZWRkYXNoOiJcdTIyOWQiLG9kYXNoOiJcdTIyOWQiLGNpcmZuaW50OiJcdTJhMTAiLGNpcm1pZDoiXHUyYWVmIixjaXJzY2lyOiJcdTI5YzIiLGNsdWJzOiJcdTI2NjMiLGNsdWJzdWl0OiJcdTI2NjMiLGNvbG9uOiI6Iixjb21tYToiLCIsY29tbWF0OiJAIixjb21wOiJcdTIyMDEiLGNvbXBsZW1lbnQ6Ilx1MjIwMSIsY29uZ2RvdDoiXHUyYTZkIixjb3BmOiJcdWQ4MzVcdWRkNTQiLGNvcHlzcjoiXHUyMTE3IixjcmFycjoiXHUyMWI1Iixjcm9zczoiXHUyNzE3Iixjc2NyOiJcdWQ4MzVcdWRjYjgiLGNzdWI6Ilx1MmFjZiIsY3N1YmU6Ilx1MmFkMSIsY3N1cDoiXHUyYWQwIixjc3VwZToiXHUyYWQyIixjdGRvdDoiXHUyMmVmIixjdWRhcnJsOiJcdTI5MzgiLGN1ZGFycnI6Ilx1MjkzNSIsY3VlcHI6Ilx1MjJkZSIsY3VybHllcXByZWM6Ilx1MjJkZSIsY3Vlc2M6Ilx1MjJkZiIsY3VybHllcXN1Y2M6Ilx1MjJkZiIsY3VsYXJyOiJcdTIxYjYiLGN1cnZlYXJyb3dsZWZ0OiJcdTIxYjYiLGN1bGFycnA6Ilx1MjkzZCIsY3VwOiJcdTIyMmEiLGN1cGJyY2FwOiJcdTJhNDgiLGN1cGNhcDoiXHUyYTQ2IixjdXBjdXA6Ilx1MmE0YSIsY3VwZG90OiJcdTIyOGQiLGN1cG9yOiJcdTJhNDUiLGN1cHM6Ilx1MjIyYVx1ZmUwMCIsY3VyYXJyOiJcdTIxYjciLGN1cnZlYXJyb3dyaWdodDoiXHUyMWI3IixjdXJhcnJtOiJcdTI5M2MiLGN1cmx5dmVlOiJcdTIyY2UiLGN1dmVlOiJcdTIyY2UiLGN1cmx5d2VkZ2U6Ilx1MjJjZiIsY3V3ZWQ6Ilx1MjJjZiIsY3VycmVuOiJceGE0Iixjd2ludDoiXHUyMjMxIixjeWxjdHk6Ilx1MjMyZCIsZEhhcjoiXHUyOTY1IixkYWdnZXI6Ilx1MjAyMCIsZGFsZXRoOiJcdTIxMzgiLGRhc2g6Ilx1MjAxMCIsaHlwaGVuOiJcdTIwMTAiLGRia2Fyb3c6Ilx1MjkwZiIsckJhcnI6Ilx1MjkwZiIsZGNhcm9uOiJcdTAxMGYiLGRjeToiXHUwNDM0IixkZGFycjoiXHUyMWNhIixkb3duZG93bmFycm93czoiXHUyMWNhIixkZG90c2VxOiJcdTJhNzciLGVERG90OiJcdTJhNzciLGRlZzoiXHhiMCIsZGVsdGE6Ilx1MDNiNCIsZGVtcHR5djoiXHUyOWIxIixkZmlzaHQ6Ilx1Mjk3ZiIsZGZyOiJcdWQ4MzVcdWRkMjEiLGRpYW1vbmRzdWl0OiJcdTI2NjYiLGRpYW1zOiJcdTI2NjYiLGRpZ2FtbWE6Ilx1MDNkZCIsZ2FtbWFkOiJcdTAzZGQiLGRpc2luOiJcdTIyZjIiLGRpdjoiXHhmNyIsZGl2aWRlOiJceGY3IixkaXZpZGVvbnRpbWVzOiJcdTIyYzciLGRpdm9ueDoiXHUyMmM3IixkamN5OiJcdTA0NTIiLGRsY29ybjoiXHUyMzFlIixsbGNvcm5lcjoiXHUyMzFlIixkbGNyb3A6Ilx1MjMwZCIsZG9sbGFyOiIkIixkb3BmOiJcdWQ4MzVcdWRkNTUiLGRvdGVxZG90OiJcdTIyNTEiLGVEb3Q6Ilx1MjI1MSIsZG90bWludXM6Ilx1MjIzOCIsbWludXNkOiJcdTIyMzgiLGRvdHBsdXM6Ilx1MjIxNCIscGx1c2RvOiJcdTIyMTQiLGRvdHNxdWFyZToiXHUyMmExIixzZG90YjoiXHUyMmExIixkcmNvcm46Ilx1MjMxZiIsbHJjb3JuZXI6Ilx1MjMxZiIsZHJjcm9wOiJcdTIzMGMiLGRzY3I6Ilx1ZDgzNVx1ZGNiOSIsZHNjeToiXHUwNDU1Iixkc29sOiJcdTI5ZjYiLGRzdHJvazoiXHUwMTExIixkdGRvdDoiXHUyMmYxIixkdHJpOiJcdTI1YmYiLHRyaWFuZ2xlZG93bjoiXHUyNWJmIixkd2FuZ2xlOiJcdTI5YTYiLGR6Y3k6Ilx1MDQ1ZiIsZHppZ3JhcnI6Ilx1MjdmZiIsZWFjdXRlOiJceGU5IixlYXN0ZXI6Ilx1MmE2ZSIsZWNhcm9uOiJcdTAxMWIiLGVjaXI6Ilx1MjI1NiIsZXFjaXJjOiJcdTIyNTYiLGVjaXJjOiJceGVhIixlY29sb246Ilx1MjI1NSIsZXFjb2xvbjoiXHUyMjU1IixlY3k6Ilx1MDQ0ZCIsZWRvdDoiXHUwMTE3IixlZkRvdDoiXHUyMjUyIixmYWxsaW5nZG90c2VxOiJcdTIyNTIiLGVmcjoiXHVkODM1XHVkZDIyIixlZzoiXHUyYTlhIixlZ3JhdmU6Ilx4ZTgiLGVnczoiXHUyYTk2IixlcXNsYW50Z3RyOiJcdTJhOTYiLGVnc2RvdDoiXHUyYTk4IixlbDoiXHUyYTk5IixlbGludGVyczoiXHUyM2U3IixlbGw6Ilx1MjExMyIsZWxzOiJcdTJhOTUiLGVxc2xhbnRsZXNzOiJcdTJhOTUiLGVsc2RvdDoiXHUyYTk3IixlbWFjcjoiXHUwMTEzIixlbXB0eToiXHUyMjA1IixlbXB0eXNldDoiXHUyMjA1IixlbXB0eXY6Ilx1MjIwNSIsdmFybm90aGluZzoiXHUyMjA1IixlbXNwMTM6Ilx1MjAwNCIsZW1zcDE0OiJcdTIwMDUiLGVtc3A6Ilx1MjAwMyIsZW5nOiJcdTAxNGIiLGVuc3A6Ilx1MjAwMiIsZW9nb246Ilx1MDExOSIsZW9wZjoiXHVkODM1XHVkZDU2IixlcGFyOiJcdTIyZDUiLGVwYXJzbDoiXHUyOWUzIixlcGx1czoiXHUyYTcxIixlcHNpOiJcdTAzYjUiLGVwc2lsb246Ilx1MDNiNSIsZXBzaXY6Ilx1MDNmNSIsc3RyYWlnaHRlcHNpbG9uOiJcdTAzZjUiLHZhcmVwc2lsb246Ilx1MDNmNSIsZXF1YWxzOiI9IixlcXVlc3Q6Ilx1MjI1ZiIscXVlc3RlcToiXHUyMjVmIixlcXVpdkREOiJcdTJhNzgiLGVxdnBhcnNsOiJcdTI5ZTUiLGVyRG90OiJcdTIyNTMiLHJpc2luZ2RvdHNlcToiXHUyMjUzIixlcmFycjoiXHUyOTcxIixlc2NyOiJcdTIxMmYiLGV0YToiXHUwM2I3IixldGg6Ilx4ZjAiLGV1bWw6Ilx4ZWIiLGV1cm86Ilx1MjBhYyIsZXhjbDoiISIsZmN5OiJcdTA0NDQiLGZlbWFsZToiXHUyNjQwIixmZmlsaWc6Ilx1ZmIwMyIsZmZsaWc6Ilx1ZmIwMCIsZmZsbGlnOiJcdWZiMDQiLGZmcjoiXHVkODM1XHVkZDIzIixmaWxpZzoiXHVmYjAxIixmamxpZzoiZmoiLGZsYXQ6Ilx1MjY2ZCIsZmxsaWc6Ilx1ZmIwMiIsZmx0bnM6Ilx1MjViMSIsZm5vZjoiXHUwMTkyIixmb3BmOiJcdWQ4MzVcdWRkNTciLGZvcms6Ilx1MjJkNCIscGl0Y2hmb3JrOiJcdTIyZDQiLGZvcmt2OiJcdTJhZDkiLGZwYXJ0aW50OiJcdTJhMGQiLGZyYWMxMjoiXHhiZCIsaGFsZjoiXHhiZCIsZnJhYzEzOiJcdTIxNTMiLGZyYWMxNDoiXHhiYyIsZnJhYzE1OiJcdTIxNTUiLGZyYWMxNjoiXHUyMTU5IixmcmFjMTg6Ilx1MjE1YiIsZnJhYzIzOiJcdTIxNTQiLGZyYWMyNToiXHUyMTU2IixmcmFjMzQ6Ilx4YmUiLGZyYWMzNToiXHUyMTU3IixmcmFjMzg6Ilx1MjE1YyIsZnJhYzQ1OiJcdTIxNTgiLGZyYWM1NjoiXHUyMTVhIixmcmFjNTg6Ilx1MjE1ZCIsZnJhYzc4OiJcdTIxNWUiLGZyYXNsOiJcdTIwNDQiLGZyb3duOiJcdTIzMjIiLHNmcm93bjoiXHUyMzIyIixmc2NyOiJcdWQ4MzVcdWRjYmIiLGdFbDoiXHUyYThjIixndHJlcXFsZXNzOiJcdTJhOGMiLGdhY3V0ZToiXHUwMWY1IixnYW1tYToiXHUwM2IzIixnYXA6Ilx1MmE4NiIsZ3RyYXBwcm94OiJcdTJhODYiLGdicmV2ZToiXHUwMTFmIixnY2lyYzoiXHUwMTFkIixnY3k6Ilx1MDQzMyIsZ2RvdDoiXHUwMTIxIixnZXNjYzoiXHUyYWE5IixnZXNkb3Q6Ilx1MmE4MCIsZ2VzZG90bzoiXHUyYTgyIixnZXNkb3RvbDoiXHUyYTg0IixnZXNsOiJcdTIyZGJcdWZlMDAiLGdlc2xlczoiXHUyYTk0IixnZnI6Ilx1ZDgzNVx1ZGQyNCIsZ2ltZWw6Ilx1MjEzNyIsZ2pjeToiXHUwNDUzIixnbEU6Ilx1MmE5MiIsZ2xhOiJcdTJhYTUiLGdsajoiXHUyYWE0IixnbkU6Ilx1MjI2OSIsZ25lcXE6Ilx1MjI2OSIsZ25hcDoiXHUyYThhIixnbmFwcHJveDoiXHUyYThhIixnbmU6Ilx1MmE4OCIsZ25lcToiXHUyYTg4IixnbnNpbToiXHUyMmU3Iixnb3BmOiJcdWQ4MzVcdWRkNTgiLGdzY3I6Ilx1MjEwYSIsZ3NpbWU6Ilx1MmE4ZSIsZ3NpbWw6Ilx1MmE5MCIsZ3RjYzoiXHUyYWE3IixndGNpcjoiXHUyYTdhIixndGRvdDoiXHUyMmQ3IixndHJkb3Q6Ilx1MjJkNyIsZ3RsUGFyOiJcdTI5OTUiLGd0cXVlc3Q6Ilx1MmE3YyIsZ3RyYXJyOiJcdTI5NzgiLGd2ZXJ0bmVxcToiXHUyMjY5XHVmZTAwIixndm5FOiJcdTIyNjlcdWZlMDAiLGhhcmRjeToiXHUwNDRhIixoYXJyY2lyOiJcdTI5NDgiLGhhcnJ3OiJcdTIxYWQiLGxlZnRyaWdodHNxdWlnYXJyb3c6Ilx1MjFhZCIsaGJhcjoiXHUyMTBmIixoc2xhc2g6Ilx1MjEwZiIscGxhbmNrOiJcdTIxMGYiLHBsYW5rdjoiXHUyMTBmIixoY2lyYzoiXHUwMTI1IixoZWFydHM6Ilx1MjY2NSIsaGVhcnRzdWl0OiJcdTI2NjUiLGhlbGxpcDoiXHUyMDI2IixtbGRyOiJcdTIwMjYiLGhlcmNvbjoiXHUyMmI5IixoZnI6Ilx1ZDgzNVx1ZGQyNSIsaGtzZWFyb3c6Ilx1MjkyNSIsc2VhcmhrOiJcdTI5MjUiLGhrc3dhcm93OiJcdTI5MjYiLHN3YXJoazoiXHUyOTI2Iixob2FycjoiXHUyMWZmIixob210aHQ6Ilx1MjIzYiIsaG9va2xlZnRhcnJvdzoiXHUyMWE5IixsYXJyaGs6Ilx1MjFhOSIsaG9va3JpZ2h0YXJyb3c6Ilx1MjFhYSIscmFycmhrOiJcdTIxYWEiLGhvcGY6Ilx1ZDgzNVx1ZGQ1OSIsaG9yYmFyOiJcdTIwMTUiLGhzY3I6Ilx1ZDgzNVx1ZGNiZCIsaHN0cm9rOiJcdTAxMjciLGh5YnVsbDoiXHUyMDQzIixpYWN1dGU6Ilx4ZWQiLGljaXJjOiJceGVlIixpY3k6Ilx1MDQzOCIsaWVjeToiXHUwNDM1IixpZXhjbDoiXHhhMSIsaWZyOiJcdWQ4MzVcdWRkMjYiLGlncmF2ZToiXHhlYyIsaWlpaW50OiJcdTJhMGMiLHFpbnQ6Ilx1MmEwYyIsaWlpbnQ6Ilx1MjIyZCIsdGludDoiXHUyMjJkIixpaW5maW46Ilx1MjlkYyIsaWlvdGE6Ilx1MjEyOSIsaWpsaWc6Ilx1MDEzMyIsaW1hY3I6Ilx1MDEyYiIsaW1hdGg6Ilx1MDEzMSIsaW5vZG90OiJcdTAxMzEiLGltb2Y6Ilx1MjJiNyIsaW1wZWQ6Ilx1MDFiNSIsaW5jYXJlOiJcdTIxMDUiLGluZmluOiJcdTIyMWUiLGluZmludGllOiJcdTI5ZGQiLGludGNhbDoiXHUyMmJhIixpbnRlcmNhbDoiXHUyMmJhIixpbnRsYXJoazoiXHUyYTE3IixpbnRwcm9kOiJcdTJhM2MiLGlwcm9kOiJcdTJhM2MiLGlvY3k6Ilx1MDQ1MSIsaW9nb246Ilx1MDEyZiIsaW9wZjoiXHVkODM1XHVkZDVhIixpb3RhOiJcdTAzYjkiLGlxdWVzdDoiXHhiZiIsaXNjcjoiXHVkODM1XHVkY2JlIixpc2luRToiXHUyMmY5Iixpc2luZG90OiJcdTIyZjUiLGlzaW5zOiJcdTIyZjQiLGlzaW5zdjoiXHUyMmYzIixpdGlsZGU6Ilx1MDEyOSIsaXVrY3k6Ilx1MDQ1NiIsaXVtbDoiXHhlZiIsamNpcmM6Ilx1MDEzNSIsamN5OiJcdTA0MzkiLGpmcjoiXHVkODM1XHVkZDI3IixqbWF0aDoiXHUwMjM3Iixqb3BmOiJcdWQ4MzVcdWRkNWIiLGpzY3I6Ilx1ZDgzNVx1ZGNiZiIsanNlcmN5OiJcdTA0NTgiLGp1a2N5OiJcdTA0NTQiLGthcHBhOiJcdTAzYmEiLGthcHBhdjoiXHUwM2YwIix2YXJrYXBwYToiXHUwM2YwIixrY2VkaWw6Ilx1MDEzNyIsa2N5OiJcdTA0M2EiLGtmcjoiXHVkODM1XHVkZDI4IixrZ3JlZW46Ilx1MDEzOCIsa2hjeToiXHUwNDQ1IixramN5OiJcdTA0NWMiLGtvcGY6Ilx1ZDgzNVx1ZGQ1YyIsa3NjcjoiXHVkODM1XHVkY2MwIixsQXRhaWw6Ilx1MjkxYiIsbEJhcnI6Ilx1MjkwZSIsbEVnOiJcdTJhOGIiLGxlc3NlcXFndHI6Ilx1MmE4YiIsbEhhcjoiXHUyOTYyIixsYWN1dGU6Ilx1MDEzYSIsbGFlbXB0eXY6Ilx1MjliNCIsbGFtYmRhOiJcdTAzYmIiLGxhbmdkOiJcdTI5OTEiLGxhcDoiXHUyYTg1IixsZXNzYXBwcm94OiJcdTJhODUiLGxhcXVvOiJceGFiIixsYXJyYmZzOiJcdTI5MWYiLGxhcnJmczoiXHUyOTFkIixsYXJybHA6Ilx1MjFhYiIsbG9vcGFycm93bGVmdDoiXHUyMWFiIixsYXJycGw6Ilx1MjkzOSIsbGFycnNpbToiXHUyOTczIixsYXJydGw6Ilx1MjFhMiIsbGVmdGFycm93dGFpbDoiXHUyMWEyIixsYXQ6Ilx1MmFhYiIsbGF0YWlsOiJcdTI5MTkiLGxhdGU6Ilx1MmFhZCIsbGF0ZXM6Ilx1MmFhZFx1ZmUwMCIsbGJhcnI6Ilx1MjkwYyIsbGJicms6Ilx1Mjc3MiIsbGJyYWNlOiJ7IixsY3ViOiJ7IixsYnJhY2s6IlsiLGxzcWI6IlsiLGxicmtlOiJcdTI5OGIiLGxicmtzbGQ6Ilx1Mjk4ZiIsbGJya3NsdToiXHUyOThkIixsY2Fyb246Ilx1MDEzZSIsbGNlZGlsOiJcdTAxM2MiLGxjeToiXHUwNDNiIixsZGNhOiJcdTI5MzYiLGxkcmRoYXI6Ilx1Mjk2NyIsbGRydXNoYXI6Ilx1Mjk0YiIsbGRzaDoiXHUyMWIyIixsZToiXHUyMjY0IixsZXE6Ilx1MjI2NCIsbGVmdGxlZnRhcnJvd3M6Ilx1MjFjNyIsbGxhcnI6Ilx1MjFjNyIsbGVmdHRocmVldGltZXM6Ilx1MjJjYiIsbHRocmVlOiJcdTIyY2IiLGxlc2NjOiJcdTJhYTgiLGxlc2RvdDoiXHUyYTdmIixsZXNkb3RvOiJcdTJhODEiLGxlc2RvdG9yOiJcdTJhODMiLGxlc2c6Ilx1MjJkYVx1ZmUwMCIsbGVzZ2VzOiJcdTJhOTMiLGxlc3Nkb3Q6Ilx1MjJkNiIsbHRkb3Q6Ilx1MjJkNiIsbGZpc2h0OiJcdTI5N2MiLGxmcjoiXHVkODM1XHVkZDI5IixsZ0U6Ilx1MmE5MSIsbGhhcnVsOiJcdTI5NmEiLGxoYmxrOiJcdTI1ODQiLGxqY3k6Ilx1MDQ1OSIsbGxoYXJkOiJcdTI5NmIiLGxsdHJpOiJcdTI1ZmEiLGxtaWRvdDoiXHUwMTQwIixsbW91c3Q6Ilx1MjNiMCIsbG1vdXN0YWNoZToiXHUyM2IwIixsbkU6Ilx1MjI2OCIsbG5lcXE6Ilx1MjI2OCIsbG5hcDoiXHUyYTg5IixsbmFwcHJveDoiXHUyYTg5IixsbmU6Ilx1MmE4NyIsbG5lcToiXHUyYTg3IixsbnNpbToiXHUyMmU2Iixsb2FuZzoiXHUyN2VjIixsb2FycjoiXHUyMWZkIixsb25nbWFwc3RvOiJcdTI3ZmMiLHhtYXA6Ilx1MjdmYyIsbG9vcGFycm93cmlnaHQ6Ilx1MjFhYyIscmFycmxwOiJcdTIxYWMiLGxvcGFyOiJcdTI5ODUiLGxvcGY6Ilx1ZDgzNVx1ZGQ1ZCIsbG9wbHVzOiJcdTJhMmQiLGxvdGltZXM6Ilx1MmEzNCIsbG93YXN0OiJcdTIyMTciLGxvejoiXHUyNWNhIixsb3plbmdlOiJcdTI1Y2EiLGxwYXI6IigiLGxwYXJsdDoiXHUyOTkzIixscmhhcmQ6Ilx1Mjk2ZCIsbHJtOiJcdTIwMGUiLGxydHJpOiJcdTIyYmYiLGxzYXF1bzoiXHUyMDM5Iixsc2NyOiJcdWQ4MzVcdWRjYzEiLGxzaW1lOiJcdTJhOGQiLGxzaW1nOiJcdTJhOGYiLGxzcXVvcjoiXHUyMDFhIixzYnF1bzoiXHUyMDFhIixsc3Ryb2s6Ilx1MDE0MiIsbHRjYzoiXHUyYWE2IixsdGNpcjoiXHUyYTc5IixsdGltZXM6Ilx1MjJjOSIsbHRsYXJyOiJcdTI5NzYiLGx0cXVlc3Q6Ilx1MmE3YiIsbHRyUGFyOiJcdTI5OTYiLGx0cmk6Ilx1MjVjMyIsdHJpYW5nbGVsZWZ0OiJcdTI1YzMiLGx1cmRzaGFyOiJcdTI5NGEiLGx1cnVoYXI6Ilx1Mjk2NiIsbHZlcnRuZXFxOiJcdTIyNjhcdWZlMDAiLGx2bkU6Ilx1MjI2OFx1ZmUwMCIsbUREb3Q6Ilx1MjIzYSIsbWFjcjoiXHhhZiIsc3RybnM6Ilx4YWYiLG1hbGU6Ilx1MjY0MiIsbWFsdDoiXHUyNzIwIixtYWx0ZXNlOiJcdTI3MjAiLG1hcmtlcjoiXHUyNWFlIixtY29tbWE6Ilx1MmEyOSIsbWN5OiJcdTA0M2MiLG1kYXNoOiJcdTIwMTQiLG1mcjoiXHVkODM1XHVkZDJhIixtaG86Ilx1MjEyNyIsbWljcm86Ilx4YjUiLG1pZGNpcjoiXHUyYWYwIixtaW51czoiXHUyMjEyIixtaW51c2R1OiJcdTJhMmEiLG1sY3A6Ilx1MmFkYiIsbW9kZWxzOiJcdTIyYTciLG1vcGY6Ilx1ZDgzNVx1ZGQ1ZSIsbXNjcjoiXHVkODM1XHVkY2MyIixtdToiXHUwM2JjIixtdWx0aW1hcDoiXHUyMmI4IixtdW1hcDoiXHUyMmI4IixuR2c6Ilx1MjJkOVx1MDMzOCIsbkd0OiJcdTIyNmJcdTIwZDIiLG5MZWZ0YXJyb3c6Ilx1MjFjZCIsbmxBcnI6Ilx1MjFjZCIsbkxlZnRyaWdodGFycm93OiJcdTIxY2UiLG5oQXJyOiJcdTIxY2UiLG5MbDoiXHUyMmQ4XHUwMzM4IixuTHQ6Ilx1MjI2YVx1MjBkMiIsblJpZ2h0YXJyb3c6Ilx1MjFjZiIsbnJBcnI6Ilx1MjFjZiIsblZEYXNoOiJcdTIyYWYiLG5WZGFzaDoiXHUyMmFlIixuYWN1dGU6Ilx1MDE0NCIsbmFuZzoiXHUyMjIwXHUyMGQyIixuYXBFOiJcdTJhNzBcdTAzMzgiLG5hcGlkOiJcdTIyNGJcdTAzMzgiLG5hcG9zOiJcdTAxNDkiLG5hdHVyOiJcdTI2NmUiLG5hdHVyYWw6Ilx1MjY2ZSIsbmNhcDoiXHUyYTQzIixuY2Fyb246Ilx1MDE0OCIsbmNlZGlsOiJcdTAxNDYiLG5jb25nZG90OiJcdTJhNmRcdTAzMzgiLG5jdXA6Ilx1MmE0MiIsbmN5OiJcdTA0M2QiLG5kYXNoOiJcdTIwMTMiLG5lQXJyOiJcdTIxZDciLG5lYXJoazoiXHUyOTI0IixuZWRvdDoiXHUyMjUwXHUwMzM4IixuZXNlYXI6Ilx1MjkyOCIsdG9lYToiXHUyOTI4IixuZnI6Ilx1ZDgzNVx1ZGQyYiIsbmhhcnI6Ilx1MjFhZSIsbmxlZnRyaWdodGFycm93OiJcdTIxYWUiLG5ocGFyOiJcdTJhZjIiLG5pczoiXHUyMmZjIixuaXNkOiJcdTIyZmEiLG5qY3k6Ilx1MDQ1YSIsbmxFOiJcdTIyNjZcdTAzMzgiLG5sZXFxOiJcdTIyNjZcdTAzMzgiLG5sYXJyOiJcdTIxOWEiLG5sZWZ0YXJyb3c6Ilx1MjE5YSIsbmxkcjoiXHUyMDI1Iixub3BmOiJcdWQ4MzVcdWRkNWYiLG5vdDoiXHhhYyIsbm90aW5FOiJcdTIyZjlcdTAzMzgiLG5vdGluZG90OiJcdTIyZjVcdTAzMzgiLG5vdGludmI6Ilx1MjJmNyIsbm90aW52YzoiXHUyMmY2Iixub3RuaXZiOiJcdTIyZmUiLG5vdG5pdmM6Ilx1MjJmZCIsbnBhcnNsOiJcdTJhZmRcdTIwZTUiLG5wYXJ0OiJcdTIyMDJcdTAzMzgiLG5wb2xpbnQ6Ilx1MmExNCIsbnJhcnI6Ilx1MjE5YiIsbnJpZ2h0YXJyb3c6Ilx1MjE5YiIsbnJhcnJjOiJcdTI5MzNcdTAzMzgiLG5yYXJydzoiXHUyMTlkXHUwMzM4Iixuc2NyOiJcdWQ4MzVcdWRjYzMiLG5zdWI6Ilx1MjI4NCIsbnN1YkU6Ilx1MmFjNVx1MDMzOCIsbnN1YnNldGVxcToiXHUyYWM1XHUwMzM4Iixuc3VwOiJcdTIyODUiLG5zdXBFOiJcdTJhYzZcdTAzMzgiLG5zdXBzZXRlcXE6Ilx1MmFjNlx1MDMzOCIsbnRpbGRlOiJceGYxIixudToiXHUwM2JkIixudW06IiMiLG51bWVybzoiXHUyMTE2IixudW1zcDoiXHUyMDA3IixudkRhc2g6Ilx1MjJhZCIsbnZIYXJyOiJcdTI5MDQiLG52YXA6Ilx1MjI0ZFx1MjBkMiIsbnZkYXNoOiJcdTIyYWMiLG52Z2U6Ilx1MjI2NVx1MjBkMiIsbnZndDoiPlx1MjBkMiIsbnZpbmZpbjoiXHUyOWRlIixudmxBcnI6Ilx1MjkwMiIsbnZsZToiXHUyMjY0XHUyMGQyIixudmx0OiI8XHUyMGQyIixudmx0cmllOiJcdTIyYjRcdTIwZDIiLG52ckFycjoiXHUyOTAzIixudnJ0cmllOiJcdTIyYjVcdTIwZDIiLG52c2ltOiJcdTIyM2NcdTIwZDIiLG53QXJyOiJcdTIxZDYiLG53YXJoazoiXHUyOTIzIixud25lYXI6Ilx1MjkyNyIsb2FjdXRlOiJceGYzIixvY2lyYzoiXHhmNCIsb2N5OiJcdTA0M2UiLG9kYmxhYzoiXHUwMTUxIixvZGl2OiJcdTJhMzgiLG9kc29sZDoiXHUyOWJjIixvZWxpZzoiXHUwMTUzIixvZmNpcjoiXHUyOWJmIixvZnI6Ilx1ZDgzNVx1ZGQyYyIsb2dvbjoiXHUwMmRiIixvZ3JhdmU6Ilx4ZjIiLG9ndDoiXHUyOWMxIixvaGJhcjoiXHUyOWI1IixvbGNpcjoiXHUyOWJlIixvbGNyb3NzOiJcdTI5YmIiLG9sdDoiXHUyOWMwIixvbWFjcjoiXHUwMTRkIixvbWVnYToiXHUwM2M5IixvbWljcm9uOiJcdTAzYmYiLG9taWQ6Ilx1MjliNiIsb29wZjoiXHVkODM1XHVkZDYwIixvcGFyOiJcdTI5YjciLG9wZXJwOiJcdTI5YjkiLG9yOiJcdTIyMjgiLHZlZToiXHUyMjI4IixvcmQ6Ilx1MmE1ZCIsb3JkZXI6Ilx1MjEzNCIsb3JkZXJvZjoiXHUyMTM0Iixvc2NyOiJcdTIxMzQiLG9yZGY6Ilx4YWEiLG9yZG06Ilx4YmEiLG9yaWdvZjoiXHUyMmI2Iixvcm9yOiJcdTJhNTYiLG9yc2xvcGU6Ilx1MmE1NyIsb3J2OiJcdTJhNWIiLG9zbGFzaDoiXHhmOCIsb3NvbDoiXHUyMjk4IixvdGlsZGU6Ilx4ZjUiLG90aW1lc2FzOiJcdTJhMzYiLG91bWw6Ilx4ZjYiLG92YmFyOiJcdTIzM2QiLHBhcmE6Ilx4YjYiLHBhcnNpbToiXHUyYWYzIixwYXJzbDoiXHUyYWZkIixwY3k6Ilx1MDQzZiIscGVyY250OiIlIixwZXJpb2Q6Ii4iLHBlcm1pbDoiXHUyMDMwIixwZXJ0ZW5rOiJcdTIwMzEiLHBmcjoiXHVkODM1XHVkZDJkIixwaGk6Ilx1MDNjNiIscGhpdjoiXHUwM2Q1IixzdHJhaWdodHBoaToiXHUwM2Q1Iix2YXJwaGk6Ilx1MDNkNSIscGhvbmU6Ilx1MjYwZSIscGk6Ilx1MDNjMCIscGl2OiJcdTAzZDYiLHZhcnBpOiJcdTAzZDYiLHBsYW5ja2g6Ilx1MjEwZSIscGx1czoiKyIscGx1c2FjaXI6Ilx1MmEyMyIscGx1c2NpcjoiXHUyYTIyIixwbHVzZHU6Ilx1MmEyNSIscGx1c2U6Ilx1MmE3MiIscGx1c3NpbToiXHUyYTI2IixwbHVzdHdvOiJcdTJhMjciLHBvaW50aW50OiJcdTJhMTUiLHBvcGY6Ilx1ZDgzNVx1ZGQ2MSIscG91bmQ6Ilx4YTMiLHByRToiXHUyYWIzIixwcmFwOiJcdTJhYjciLHByZWNhcHByb3g6Ilx1MmFiNyIscHJlY25hcHByb3g6Ilx1MmFiOSIscHJuYXA6Ilx1MmFiOSIscHJlY25lcXE6Ilx1MmFiNSIscHJuRToiXHUyYWI1IixwcmVjbnNpbToiXHUyMmU4Iixwcm5zaW06Ilx1MjJlOCIscHJpbWU6Ilx1MjAzMiIscHJvZmFsYXI6Ilx1MjMyZSIscHJvZmxpbmU6Ilx1MjMxMiIscHJvZnN1cmY6Ilx1MjMxMyIscHJ1cmVsOiJcdTIyYjAiLHBzY3I6Ilx1ZDgzNVx1ZGNjNSIscHNpOiJcdTAzYzgiLHB1bmNzcDoiXHUyMDA4IixxZnI6Ilx1ZDgzNVx1ZGQyZSIscW9wZjoiXHVkODM1XHVkZDYyIixxcHJpbWU6Ilx1MjA1NyIscXNjcjoiXHVkODM1XHVkY2M2IixxdWF0aW50OiJcdTJhMTYiLHF1ZXN0OiI/IixyQXRhaWw6Ilx1MjkxYyIsckhhcjoiXHUyOTY0IixyYWNlOiJcdTIyM2RcdTAzMzEiLHJhY3V0ZToiXHUwMTU1IixyYWVtcHR5djoiXHUyOWIzIixyYW5nZDoiXHUyOTkyIixyYW5nZToiXHUyOWE1IixyYXF1bzoiXHhiYiIscmFycmFwOiJcdTI5NzUiLHJhcnJiZnM6Ilx1MjkyMCIscmFycmM6Ilx1MjkzMyIscmFycmZzOiJcdTI5MWUiLHJhcnJwbDoiXHUyOTQ1IixyYXJyc2ltOiJcdTI5NzQiLHJhcnJ0bDoiXHUyMWEzIixyaWdodGFycm93dGFpbDoiXHUyMWEzIixyYXJydzoiXHUyMTlkIixyaWdodHNxdWlnYXJyb3c6Ilx1MjE5ZCIscmF0YWlsOiJcdTI5MWEiLHJhdGlvOiJcdTIyMzYiLHJiYnJrOiJcdTI3NzMiLHJicmFjZToifSIscmN1YjoifSIscmJyYWNrOiJdIixyc3FiOiJdIixyYnJrZToiXHUyOThjIixyYnJrc2xkOiJcdTI5OGUiLHJicmtzbHU6Ilx1Mjk5MCIscmNhcm9uOiJcdTAxNTkiLHJjZWRpbDoiXHUwMTU3IixyY3k6Ilx1MDQ0MCIscmRjYToiXHUyOTM3IixyZGxkaGFyOiJcdTI5NjkiLHJkc2g6Ilx1MjFiMyIscmVjdDoiXHUyNWFkIixyZmlzaHQ6Ilx1Mjk3ZCIscmZyOiJcdWQ4MzVcdWRkMmYiLHJoYXJ1bDoiXHUyOTZjIixyaG86Ilx1MDNjMSIscmhvdjoiXHUwM2YxIix2YXJyaG86Ilx1MDNmMSIscmlnaHRyaWdodGFycm93czoiXHUyMWM5IixycmFycjoiXHUyMWM5IixyaWdodHRocmVldGltZXM6Ilx1MjJjYyIscnRocmVlOiJcdTIyY2MiLHJpbmc6Ilx1MDJkYSIscmxtOiJcdTIwMGYiLHJtb3VzdDoiXHUyM2IxIixybW91c3RhY2hlOiJcdTIzYjEiLHJubWlkOiJcdTJhZWUiLHJvYW5nOiJcdTI3ZWQiLHJvYXJyOiJcdTIxZmUiLHJvcGFyOiJcdTI5ODYiLHJvcGY6Ilx1ZDgzNVx1ZGQ2MyIscm9wbHVzOiJcdTJhMmUiLHJvdGltZXM6Ilx1MmEzNSIscnBhcjoiKSIscnBhcmd0OiJcdTI5OTQiLHJwcG9saW50OiJcdTJhMTIiLHJzYXF1bzoiXHUyMDNhIixyc2NyOiJcdWQ4MzVcdWRjYzciLHJ0aW1lczoiXHUyMmNhIixydHJpOiJcdTI1YjkiLHRyaWFuZ2xlcmlnaHQ6Ilx1MjViOSIscnRyaWx0cmk6Ilx1MjljZSIscnVsdWhhcjoiXHUyOTY4IixyeDoiXHUyMTFlIixzYWN1dGU6Ilx1MDE1YiIsc2NFOiJcdTJhYjQiLHNjYXA6Ilx1MmFiOCIsc3VjY2FwcHJveDoiXHUyYWI4IixzY2Fyb246Ilx1MDE2MSIsc2NlZGlsOiJcdTAxNWYiLHNjaXJjOiJcdTAxNWQiLHNjbkU6Ilx1MmFiNiIsc3VjY25lcXE6Ilx1MmFiNiIsc2NuYXA6Ilx1MmFiYSIsc3VjY25hcHByb3g6Ilx1MmFiYSIsc2Nuc2ltOiJcdTIyZTkiLHN1Y2Nuc2ltOiJcdTIyZTkiLHNjcG9saW50OiJcdTJhMTMiLHNjeToiXHUwNDQxIixzZG90OiJcdTIyYzUiLHNkb3RlOiJcdTJhNjYiLHNlQXJyOiJcdTIxZDgiLHNlY3Q6Ilx4YTciLHNlbWk6IjsiLHNlc3dhcjoiXHUyOTI5Iix0b3NhOiJcdTI5MjkiLHNleHQ6Ilx1MjczNiIsc2ZyOiJcdWQ4MzVcdWRkMzAiLHNoYXJwOiJcdTI2NmYiLHNoY2hjeToiXHUwNDQ5IixzaGN5OiJcdTA0NDgiLHNoeToiXHhhZCIsc2lnbWE6Ilx1MDNjMyIsc2lnbWFmOiJcdTAzYzIiLHNpZ21hdjoiXHUwM2MyIix2YXJzaWdtYToiXHUwM2MyIixzaW1kb3Q6Ilx1MmE2YSIsc2ltZzoiXHUyYTllIixzaW1nRToiXHUyYWEwIixzaW1sOiJcdTJhOWQiLHNpbWxFOiJcdTJhOWYiLHNpbW5lOiJcdTIyNDYiLHNpbXBsdXM6Ilx1MmEyNCIsc2ltcmFycjoiXHUyOTcyIixzbWFzaHA6Ilx1MmEzMyIsc21lcGFyc2w6Ilx1MjllNCIsc21pbGU6Ilx1MjMyMyIsc3NtaWxlOiJcdTIzMjMiLHNtdDoiXHUyYWFhIixzbXRlOiJcdTJhYWMiLHNtdGVzOiJcdTJhYWNcdWZlMDAiLHNvZnRjeToiXHUwNDRjIixzb2w6Ii8iLHNvbGI6Ilx1MjljNCIsc29sYmFyOiJcdTIzM2YiLHNvcGY6Ilx1ZDgzNVx1ZGQ2NCIsc3BhZGVzOiJcdTI2NjAiLHNwYWRlc3VpdDoiXHUyNjYwIixzcWNhcHM6Ilx1MjI5M1x1ZmUwMCIsc3FjdXBzOiJcdTIyOTRcdWZlMDAiLHNzY3I6Ilx1ZDgzNVx1ZGNjOCIsc3RhcjoiXHUyNjA2IixzdWI6Ilx1MjI4MiIsc3Vic2V0OiJcdTIyODIiLHN1YkU6Ilx1MmFjNSIsc3Vic2V0ZXFxOiJcdTJhYzUiLHN1YmRvdDoiXHUyYWJkIixzdWJlZG90OiJcdTJhYzMiLHN1Ym11bHQ6Ilx1MmFjMSIsc3VibkU6Ilx1MmFjYiIsc3Vic2V0bmVxcToiXHUyYWNiIixzdWJuZToiXHUyMjhhIixzdWJzZXRuZXE6Ilx1MjI4YSIsc3VicGx1czoiXHUyYWJmIixzdWJyYXJyOiJcdTI5NzkiLHN1YnNpbToiXHUyYWM3IixzdWJzdWI6Ilx1MmFkNSIsc3Vic3VwOiJcdTJhZDMiLHN1bmc6Ilx1MjY2YSIsc3VwMToiXHhiOSIsc3VwMjoiXHhiMiIsc3VwMzoiXHhiMyIsc3VwRToiXHUyYWM2IixzdXBzZXRlcXE6Ilx1MmFjNiIsc3VwZG90OiJcdTJhYmUiLHN1cGRzdWI6Ilx1MmFkOCIsc3VwZWRvdDoiXHUyYWM0IixzdXBoc29sOiJcdTI3YzkiLHN1cGhzdWI6Ilx1MmFkNyIsc3VwbGFycjoiXHUyOTdiIixzdXBtdWx0OiJcdTJhYzIiLHN1cG5FOiJcdTJhY2MiLHN1cHNldG5lcXE6Ilx1MmFjYyIsc3VwbmU6Ilx1MjI4YiIsc3Vwc2V0bmVxOiJcdTIyOGIiLHN1cHBsdXM6Ilx1MmFjMCIsc3Vwc2ltOiJcdTJhYzgiLHN1cHN1YjoiXHUyYWQ0IixzdXBzdXA6Ilx1MmFkNiIsc3dBcnI6Ilx1MjFkOSIsc3dud2FyOiJcdTI5MmEiLHN6bGlnOiJceGRmIix0YXJnZXQ6Ilx1MjMxNiIsdGF1OiJcdTAzYzQiLHRjYXJvbjoiXHUwMTY1Iix0Y2VkaWw6Ilx1MDE2MyIsdGN5OiJcdTA0NDIiLHRlbHJlYzoiXHUyMzE1Iix0ZnI6Ilx1ZDgzNVx1ZGQzMSIsdGhldGE6Ilx1MDNiOCIsdGhldGFzeW06Ilx1MDNkMSIsdGhldGF2OiJcdTAzZDEiLHZhcnRoZXRhOiJcdTAzZDEiLHRob3JuOiJceGZlIix0aW1lczoiXHhkNyIsdGltZXNiYXI6Ilx1MmEzMSIsdGltZXNkOiJcdTJhMzAiLHRvcGJvdDoiXHUyMzM2Iix0b3BjaXI6Ilx1MmFmMSIsdG9wZjoiXHVkODM1XHVkZDY1Iix0b3Bmb3JrOiJcdTJhZGEiLHRwcmltZToiXHUyMDM0Iix0cmlhbmdsZToiXHUyNWI1Iix1dHJpOiJcdTI1YjUiLHRyaWFuZ2xlcToiXHUyMjVjIix0cmllOiJcdTIyNWMiLHRyaWRvdDoiXHUyNWVjIix0cmltaW51czoiXHUyYTNhIix0cmlwbHVzOiJcdTJhMzkiLHRyaXNiOiJcdTI5Y2QiLHRyaXRpbWU6Ilx1MmEzYiIsdHJwZXppdW06Ilx1MjNlMiIsdHNjcjoiXHVkODM1XHVkY2M5Iix0c2N5OiJcdTA0NDYiLHRzaGN5OiJcdTA0NWIiLHRzdHJvazoiXHUwMTY3Iix1SGFyOiJcdTI5NjMiLHVhY3V0ZToiXHhmYSIsdWJyY3k6Ilx1MDQ1ZSIsdWJyZXZlOiJcdTAxNmQiLHVjaXJjOiJceGZiIix1Y3k6Ilx1MDQ0MyIsdWRibGFjOiJcdTAxNzEiLHVmaXNodDoiXHUyOTdlIix1ZnI6Ilx1ZDgzNVx1ZGQzMiIsdWdyYXZlOiJceGY5Iix1aGJsazoiXHUyNTgwIix1bGNvcm46Ilx1MjMxYyIsdWxjb3JuZXI6Ilx1MjMxYyIsdWxjcm9wOiJcdTIzMGYiLHVsdHJpOiJcdTI1ZjgiLHVtYWNyOiJcdTAxNmIiLHVvZ29uOiJcdTAxNzMiLHVvcGY6Ilx1ZDgzNVx1ZGQ2NiIsdXBzaToiXHUwM2M1Iix1cHNpbG9uOiJcdTAzYzUiLHVwdXBhcnJvd3M6Ilx1MjFjOCIsdXVhcnI6Ilx1MjFjOCIsdXJjb3JuOiJcdTIzMWQiLHVyY29ybmVyOiJcdTIzMWQiLHVyY3JvcDoiXHUyMzBlIix1cmluZzoiXHUwMTZmIix1cnRyaToiXHUyNWY5Iix1c2NyOiJcdWQ4MzVcdWRjY2EiLHV0ZG90OiJcdTIyZjAiLHV0aWxkZToiXHUwMTY5Iix1dW1sOiJceGZjIix1d2FuZ2xlOiJcdTI5YTciLHZCYXI6Ilx1MmFlOCIsdkJhcnY6Ilx1MmFlOSIsdmFuZ3J0OiJcdTI5OWMiLHZhcnN1YnNldG5lcToiXHUyMjhhXHVmZTAwIix2c3VibmU6Ilx1MjI4YVx1ZmUwMCIsdmFyc3Vic2V0bmVxcToiXHUyYWNiXHVmZTAwIix2c3VibkU6Ilx1MmFjYlx1ZmUwMCIsdmFyc3Vwc2V0bmVxOiJcdTIyOGJcdWZlMDAiLHZzdXBuZToiXHUyMjhiXHVmZTAwIix2YXJzdXBzZXRuZXFxOiJcdTJhY2NcdWZlMDAiLHZzdXBuRToiXHUyYWNjXHVmZTAwIix2Y3k6Ilx1MDQzMiIsdmVlYmFyOiJcdTIyYmIiLHZlZWVxOiJcdTIyNWEiLHZlbGxpcDoiXHUyMmVlIix2ZnI6Ilx1ZDgzNVx1ZGQzMyIsdm9wZjoiXHVkODM1XHVkZDY3Iix2c2NyOiJcdWQ4MzVcdWRjY2IiLHZ6aWd6YWc6Ilx1Mjk5YSIsd2NpcmM6Ilx1MDE3NSIsd2VkYmFyOiJcdTJhNWYiLHdlZGdlcToiXHUyMjU5Iix3ZWllcnA6Ilx1MjExOCIsd3A6Ilx1MjExOCIsd2ZyOiJcdWQ4MzVcdWRkMzQiLHdvcGY6Ilx1ZDgzNVx1ZGQ2OCIsd3NjcjoiXHVkODM1XHVkY2NjIix4ZnI6Ilx1ZDgzNVx1ZGQzNSIseGk6Ilx1MDNiZSIseG5pczoiXHUyMmZiIix4b3BmOiJcdWQ4MzVcdWRkNjkiLHhzY3I6Ilx1ZDgzNVx1ZGNjZCIseWFjdXRlOiJceGZkIix5YWN5OiJcdTA0NGYiLHljaXJjOiJcdTAxNzciLHljeToiXHUwNDRiIix5ZW46Ilx4YTUiLHlmcjoiXHVkODM1XHVkZDM2Iix5aWN5OiJcdTA0NTciLHlvcGY6Ilx1ZDgzNVx1ZGQ2YSIseXNjcjoiXHVkODM1XHVkY2NlIix5dWN5OiJcdTA0NGUiLHl1bWw6Ilx4ZmYiLHphY3V0ZToiXHUwMTdhIix6Y2Fyb246Ilx1MDE3ZSIsemN5OiJcdTA0MzciLHpkb3Q6Ilx1MDE3YyIsemV0YToiXHUwM2I2Iix6ZnI6Ilx1ZDgzNVx1ZGQzNyIsemhjeToiXHUwNDM2Iix6aWdyYXJyOiJcdTIxZGQiLHpvcGY6Ilx1ZDgzNVx1ZGQ2YiIsenNjcjoiXHVkODM1XHVkY2NmIix6d2o6Ilx1MjAwZCIsenduajoiXHUyMDBjIixuZ3NwOiJcdWU1MDAifSxLYj1jbGFzcyBleHRlbmRzIE1me2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihpLHQpLHRoaXMudG9rZW5UeXBlPWV9fSxHeWU9L1xyXG4/L2c7ZnVuY3Rpb24gVWIobil7cmV0dXJuYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICIkezA9PT1uPyJFT0YiOlN0cmluZy5mcm9tQ2hhckNvZGUobil9ImB9ZnVuY3Rpb24gVjkobil7cmV0dXJuYFVua25vd24gZW50aXR5ICIke259IiAtIHVzZSB0aGUgIiYjPGRlY2ltYWw+OyIgb3IgICImI3g8aGV4PjsiIHN5bnRheGB9dmFyIFpiPSgoKT0+e3JldHVybihuPVpifHwoWmI9e30pKS5IRVg9ImhleGFkZWNpbWFsIixuLkRFQz0iZGVjaW1hbCIsWmI7dmFyIG59KSgpLEpiPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3I9dH19O2Z1bmN0aW9uIElhKG4pe3JldHVybiFmMyhuKXx8MD09PW59ZnVuY3Rpb24gSDkobil7cmV0dXJuIGYzKG4pfHw2Mj09PW58fDYwPT09bnx8NDc9PT1ufHwzOT09PW58fDM0PT09bnx8NjE9PT1ufHwwPT09bn1mdW5jdGlvbiBZeWUobil7cmV0dXJuIDU5PT09bnx8MD09PW58fCFmdW5jdGlvbihuKXtyZXR1cm4gbj49OTcmJm48PTEwMnx8bj49NjUmJm48PTcwfHxwcChuKX0obil9ZnVuY3Rpb24gWHllKG4pe3JldHVybiA1OT09PW58fDA9PT1ufHwhbTMobil9ZnVuY3Rpb24gVTkobil7cmV0dXJuIG4+PTk3JiZuPD0xMjI/bi05Nys2NTpufXZhciBEZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHQgaW5zdGFuY2VvZiBEZil7dGhpcy5maWxlPXQuZmlsZSx0aGlzLmlucHV0PXQuaW5wdXQsdGhpcy5lbmQ9dC5lbmQ7bGV0IGk9dC5zdGF0ZTt0aGlzLnN0YXRlPXtwZWVrOmkucGVlayxvZmZzZXQ6aS5vZmZzZXQsbGluZTppLmxpbmUsY29sdW1uOmkuY29sdW1ufX1lbHNle2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvZ3JhbW1pbmcgZXJyb3I6IHRoZSByYW5nZSBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggYSBmaWxlIGFyZ3VtZW50LiIpO3RoaXMuZmlsZT10LHRoaXMuaW5wdXQ9dC5jb250ZW50LHRoaXMuZW5kPWUuZW5kUG9zLHRoaXMuc3RhdGU9e3BlZWs6LTEsb2Zmc2V0OmUuc3RhcnRQb3MsbGluZTplLnN0YXJ0TGluZSxjb2x1bW46ZS5zdGFydENvbH19fWNsb25lKCl7cmV0dXJuIG5ldyBEZih0aGlzKX1wZWVrKCl7cmV0dXJuIHRoaXMuc3RhdGUucGVla31jaGFyc0xlZnQoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGF0ZS5vZmZzZXR9ZGlmZih0KXtyZXR1cm4gdGhpcy5zdGF0ZS5vZmZzZXQtdC5zdGF0ZS5vZmZzZXR9YWR2YW5jZSgpe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuc3RhdGUpfWluaXQoKXt0aGlzLnVwZGF0ZVBlZWsodGhpcy5zdGF0ZSl9Z2V0U3Bhbih0LGUpe2xldCBpPXQ9dHx8dGhpcztpZihlKWZvcig7dGhpcy5kaWZmKHQpPjAmJi0xIT09ZS5pbmRleE9mKHQucGVlaygpKTspaT09PXQmJih0PXQuY2xvbmUoKSksdC5hZHZhbmNlKCk7bGV0IHI9dGhpcy5sb2NhdGlvbkZyb21DdXJzb3IodCksbz10aGlzLmxvY2F0aW9uRnJvbUN1cnNvcih0aGlzKSxzPWkhPT10P3RoaXMubG9jYXRpb25Gcm9tQ3Vyc29yKGkpOnI7cmV0dXJuIG5ldyBUbyhyLG8scyl9Z2V0Q2hhcnModCl7cmV0dXJuIHRoaXMuaW5wdXQuc3Vic3RyaW5nKHQuc3RhdGUub2Zmc2V0LHRoaXMuc3RhdGUub2Zmc2V0KX1jaGFyQXQodCl7cmV0dXJuIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0KX1hZHZhbmNlU3RhdGUodCl7aWYodC5vZmZzZXQ+PXRoaXMuZW5kKXRocm93IHRoaXMuc3RhdGU9dCxuZXcgSXgoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyICJFT0YiJyx0aGlzKTtsZXQgZT10aGlzLmNoYXJBdCh0Lm9mZnNldCk7MTA9PT1lPyh0LmxpbmUrKyx0LmNvbHVtbj0wKTpXcShlKXx8dC5jb2x1bW4rKyx0Lm9mZnNldCsrLHRoaXMudXBkYXRlUGVlayh0KX11cGRhdGVQZWVrKHQpe3QucGVlaz10Lm9mZnNldD49dGhpcy5lbmQ/MDp0aGlzLmNoYXJBdCh0Lm9mZnNldCl9bG9jYXRpb25Gcm9tQ3Vyc29yKHQpe3JldHVybiBuZXcgd2YodC5maWxlLHQuc3RhdGUub2Zmc2V0LHQuc3RhdGUubGluZSx0LnN0YXRlLmNvbHVtbil9fSxMMD1jbGFzcyBleHRlbmRzIERme2NvbnN0cnVjdG9yKHQsZSl7dCBpbnN0YW5jZW9mIEwwPyhzdXBlcih0KSx0aGlzLmludGVybmFsU3RhdGU9ey4uLnQuaW50ZXJuYWxTdGF0ZX0pOihzdXBlcih0LGUpLHRoaXMuaW50ZXJuYWxTdGF0ZT10aGlzLnN0YXRlKX1hZHZhbmNlKCl7dGhpcy5zdGF0ZT10aGlzLmludGVybmFsU3RhdGUsc3VwZXIuYWR2YW5jZSgpLHRoaXMucHJvY2Vzc0VzY2FwZVNlcXVlbmNlKCl9aW5pdCgpe3N1cGVyLmluaXQoKSx0aGlzLnByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpfWNsb25lKCl7cmV0dXJuIG5ldyBMMCh0aGlzKX1nZXRDaGFycyh0KXtsZXQgZT10LmNsb25lKCksaT0iIjtmb3IoO2UuaW50ZXJuYWxTdGF0ZS5vZmZzZXQ8dGhpcy5pbnRlcm5hbFN0YXRlLm9mZnNldDspaSs9U3RyaW5nLmZyb21Db2RlUG9pbnQoZS5wZWVrKCkpLGUuYWR2YW5jZSgpO3JldHVybiBpfXByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpe2xldCB0PSgpPT50aGlzLmludGVybmFsU3RhdGUucGVlaztpZig5Mj09PXQoKSlpZih0aGlzLmludGVybmFsU3RhdGU9ey4uLnRoaXMuc3RhdGV9LHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksMTEwPT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMDtlbHNlIGlmKDExND09PXQoKSl0aGlzLnN0YXRlLnBlZWs9MTM7ZWxzZSBpZigxMTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTExO2Vsc2UgaWYoMTE2PT09dCgpKXRoaXMuc3RhdGUucGVlaz05O2Vsc2UgaWYoOTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTg7ZWxzZSBpZigxMDI9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTEyO2Vsc2UgaWYoMTE3PT09dCgpKWlmKHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdCgpPT09ZnApe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSk7bGV0IGU9dGhpcy5jbG9uZSgpLGk9MDtmb3IoO3QoKSE9PXR1Oyl0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSxpKX1lbHNle2xldCBlPXRoaXMuY2xvbmUoKTt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSw0KX1lbHNlIGlmKDEyMD09PXQoKSl7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKTtsZXQgZT10aGlzLmNsb25lKCk7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSwyKX1lbHNlIGlmKHg5KHQoKSkpe2xldCBlPSIiLGk9MCxyPXRoaXMuY2xvbmUoKTtmb3IoO3g5KHQoKSkmJmk8Mzspcj10aGlzLmNsb25lKCksZSs9U3RyaW5nLmZyb21Db2RlUG9pbnQodCgpKSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9cGFyc2VJbnQoZSw4KSx0aGlzLmludGVybmFsU3RhdGU9ci5pbnRlcm5hbFN0YXRlfWVsc2UgV3EodGhpcy5pbnRlcm5hbFN0YXRlLnBlZWspPyh0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuc3RhdGU9dGhpcy5pbnRlcm5hbFN0YXRlKTp0aGlzLnN0YXRlLnBlZWs9dGhpcy5pbnRlcm5hbFN0YXRlLnBlZWt9ZGVjb2RlSGV4RGlnaXRzKHQsZSl7bGV0IGk9dGhpcy5pbnB1dC5zbGljZSh0LmludGVybmFsU3RhdGUub2Zmc2V0LHQuaW50ZXJuYWxTdGF0ZS5vZmZzZXQrZSkscj1wYXJzZUludChpLDE2KTtpZihpc05hTihyKSl0aHJvdyB0LnN0YXRlPXQuaW50ZXJuYWxTdGF0ZSxuZXcgSXgoIkludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIix0KTtyZXR1cm4gcn19LEl4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5tc2c9dCx0aGlzLmN1cnNvcj1lfX0sUGE9Y2xhc3MgZXh0ZW5kcyBNZntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVsZW1lbnROYW1lPXR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIG5ldyBQYSh0LGUsaSl9fSxVMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdE5vZGVzPXQsdGhpcy5lcnJvcnM9ZX19LEZMPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZ2V0VGFnRGVmaW5pdGlvbj10fXBhcnNlKHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQsZSxpPXt9KXtsZXQgcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX2dldFRhZ0RlZmluaXRpb249ZSx0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2s9W10sdGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMudG9rZW5zPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPVtdLHRoaXMuX3Rva2VuaXplSWN1PWkudG9rZW5pemVFeHBhbnNpb25Gb3Jtc3x8ITEsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1pLmludGVycG9sYXRpb25Db25maWd8fCRjLHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzPWkubGVhZGluZ1RyaXZpYUNoYXJzJiZpLmxlYWRpbmdUcml2aWFDaGFycy5tYXAobz0+by5jb2RlUG9pbnRBdCgwKXx8MCk7bGV0IHI9aS5yYW5nZXx8e2VuZFBvczp0LmNvbnRlbnQubGVuZ3RoLHN0YXJ0UG9zOjAsc3RhcnRMaW5lOjAsc3RhcnRDb2w6MH07dGhpcy5fY3Vyc29yPWkuZXNjYXBlZFN0cmluZz9uZXcgTDAodCxyKTpuZXcgRGYodCxyKSx0aGlzLl9wcmVzZXJ2ZUxpbmVFbmRpbmdzPWkucHJlc2VydmVMaW5lRW5kaW5nc3x8ITEsdGhpcy5fZXNjYXBlZFN0cmluZz1pLmVzY2FwZWRTdHJpbmd8fCExLHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcz1pLmkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVc3x8ITE7dHJ5e3RoaXMuX2N1cnNvci5pbml0KCl9Y2F0Y2gobyl7dGhpcy5oYW5kbGVFcnJvcihvKX19X3Byb2Nlc3NDYXJyaWFnZVJldHVybnModCl7cmV0dXJuIHRoaXMuX3ByZXNlcnZlTGluZUVuZGluZ3M/dDp0LnJlcGxhY2UoR3llLCJcbiIpfXRva2VuaXplKCl7Zm9yKDswIT09dGhpcy5fY3Vyc29yLnBlZWsoKTspe2xldCB0PXRoaXMuX2N1cnNvci5jbG9uZSgpO3RyeXt0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjApP3RoaXMuX2F0dGVtcHRDaGFyQ29kZSgzMyk/dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDkxKT90aGlzLl9jb25zdW1lQ2RhdGEodCk6dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ1KT90aGlzLl9jb25zdW1lQ29tbWVudCh0KTp0aGlzLl9jb25zdW1lRG9jVHlwZSh0KTp0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpP3RoaXMuX2NvbnN1bWVUYWdDbG9zZSh0KTp0aGlzLl9jb25zdW1lVGFnT3Blbih0KTp0aGlzLl90b2tlbml6ZUljdSYmdGhpcy5fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl8fHRoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbig1LDgsKCk9PnRoaXMuX2lzVGV4dEVuZCgpLCgpPT50aGlzLl9pc1RhZ1N0YXJ0KCkpfWNhdGNoKGUpe3RoaXMuaGFuZGxlRXJyb3IoZSl9fXRoaXMuX2JlZ2luVG9rZW4oMjQpLHRoaXMuX2VuZFRva2VuKFtdKX1fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl7aWYodGhpcy5pc0V4cGFuc2lvbkZvcm1TdGFydCgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uRm9ybVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKSE9PXR1JiZ0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKT09PXR1KXtpZih0aGlzLl9pc0luRXhwYW5zaW9uQ2FzZSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZUVuZCgpLCEwO2lmKHRoaXMuX2lzSW5FeHBhbnNpb25Gb3JtKCkpcmV0dXJuIHRoaXMuX2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCksITB9cmV0dXJuITF9X2JlZ2luVG9rZW4odCxlPXRoaXMuX2N1cnNvci5jbG9uZSgpKXt0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1lLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9dH1fZW5kVG9rZW4odCxlKXtpZihudWxsPT09dGhpcy5fY3VycmVudFRva2VuU3RhcnQpdGhyb3cgbmV3IEtiKCJQcm9ncmFtbWluZyBlcnJvciAtIGF0dGVtcHRlZCB0byBlbmQgYSB0b2tlbiB3aGVuIHRoZXJlIHdhcyBubyBzdGFydCB0byB0aGUgdG9rZW4iLHRoaXMuX2N1cnJlbnRUb2tlblR5cGUsdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpO2lmKG51bGw9PT10aGlzLl9jdXJyZW50VG9rZW5UeXBlKXRocm93IG5ldyBLYigiUHJvZ3JhbW1pbmcgZXJyb3IgLSBhdHRlbXB0ZWQgdG8gZW5kIGEgdG9rZW4gd2hpY2ggaGFzIG5vIHRva2VuIHR5cGUiLG51bGwsdGhpcy5fY3Vyc29yLmdldFNwYW4odGhpcy5fY3VycmVudFRva2VuU3RhcnQpKTtsZXQgaT17dHlwZTp0aGlzLl9jdXJyZW50VG9rZW5UeXBlLHBhcnRzOnQsc291cmNlU3BhbjooZT8/dGhpcy5fY3Vyc29yKS5nZXRTcGFuKHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0LHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzKX07cmV0dXJuIHRoaXMudG9rZW5zLnB1c2goaSksdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsaX1fY3JlYXRlRXJyb3IodCxlKXt0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpJiYodCs9JyAoRG8geW91IGhhdmUgYW4gdW5lc2NhcGVkICJ7IiBpbiB5b3VyIHRlbXBsYXRlPyBVc2UgInt7IFwne1wnIH19IikgdG8gZXNjYXBlIGl0LiknKTtsZXQgaT1uZXcgS2IodCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlLGUpO3JldHVybiB0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCxuZXcgSmIoaSl9aGFuZGxlRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIEl4JiYodD10aGlzLl9jcmVhdGVFcnJvcih0Lm1zZyx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0LmN1cnNvcikpKSwhKHQgaW5zdGFuY2VvZiBKYikpdGhyb3cgdDt0aGlzLmVycm9ycy5wdXNoKHQuZXJyb3IpfV9hdHRlbXB0Q2hhckNvZGUodCl7cmV0dXJuIHRoaXMuX2N1cnNvci5wZWVrKCk9PT10JiYodGhpcy5fY3Vyc29yLmFkdmFuY2UoKSwhMCl9X2F0dGVtcHRDaGFyQ29kZUNhc2VJbnNlbnNpdGl2ZSh0KXtyZXR1cm4hIWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFU5KG4pPT09VTkodCl9KHRoaXMuX2N1cnNvci5wZWVrKCksdCkmJih0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLCEwKX1fcmVxdWlyZUNoYXJDb2RlKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKCF0aGlzLl9hdHRlbXB0Q2hhckNvZGUodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0U3RyKHQpe2xldCBlPXQubGVuZ3RoO2lmKHRoaXMuX2N1cnNvci5jaGFyc0xlZnQoKTxlKXJldHVybiExO2xldCBpPXRoaXMuX2N1cnNvci5jbG9uZSgpO2ZvcihsZXQgcj0wO3I8ZTtyKyspaWYoIXRoaXMuX2F0dGVtcHRDaGFyQ29kZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiB0aGlzLl9jdXJzb3I9aSwhMTtyZXR1cm4hMH1fYXR0ZW1wdFN0ckNhc2VJbnNlbnNpdGl2ZSh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZighdGhpcy5fYXR0ZW1wdENoYXJDb2RlQ2FzZUluc2Vuc2l0aXZlKHQuY2hhckNvZGVBdChlKSkpcmV0dXJuITE7cmV0dXJuITB9X3JlcXVpcmVTdHIodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYoIXRoaXMuX2F0dGVtcHRTdHIodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpe2Zvcig7IXQodGhpcy5fY3Vyc29yLnBlZWsoKSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlcXVpcmVDaGFyQ29kZVVudGlsRm4odCxlKXtsZXQgaT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpLHRoaXMuX2N1cnNvci5kaWZmKGkpPGUpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oaSkpfV9hdHRlbXB0VW50aWxDaGFyKHQpe2Zvcig7dGhpcy5fY3Vyc29yLnBlZWsoKSE9PXQ7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlYWRDaGFyKCl7bGV0IHQ9U3RyaW5nLmZyb21Db2RlUG9pbnQodGhpcy5fY3Vyc29yLnBlZWsoKSk7cmV0dXJuIHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdH1fY29uc3VtZUVudGl0eSh0KXt0aGlzLl9iZWdpblRva2VuKDkpO2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDM1KSl7bGV0IGk9dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDEyMCl8fHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg4OCkscj10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKFl5ZSksNTkhPXRoaXMuX2N1cnNvci5wZWVrKCkpdGhyb3cgdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSx0aGlzLl9jcmVhdGVFcnJvcihmdW5jdGlvbihuLHQpe3JldHVybmBVbmFibGUgdG8gcGFyc2UgZW50aXR5ICIke3R9IiAtICR7bn0gY2hhcmFjdGVyIHJlZmVyZW5jZSBlbnRpdGllcyBtdXN0IGVuZCB3aXRoICI7ImB9KGk/WmIuSEVYOlpiLkRFQyx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO2xldCBvPXRoaXMuX2N1cnNvci5nZXRDaGFycyhyKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpO3RyeXtsZXQgcz1wYXJzZUludChvLGk/MTY6MTApO3RoaXMuX2VuZFRva2VuKFtTdHJpbmcuZnJvbUNoYXJDb2RlKHMpLHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKV0pfWNhdGNoe3Rocm93IHRoaXMuX2NyZWF0ZUVycm9yKFY5KHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oKSl9fWVsc2V7bGV0IGk9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihYeWUpLDU5IT10aGlzLl9jdXJzb3IucGVlaygpKXRoaXMuX2JlZ2luVG9rZW4odCxlKSx0aGlzLl9jdXJzb3I9aSx0aGlzLl9lbmRUb2tlbihbIiYiXSk7ZWxzZXtsZXQgcj10aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSk7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTtsZXQgbz1IMVtyXTtpZighbyl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihWOShyKSx0aGlzLl9jdXJzb3IuZ2V0U3BhbihlKSk7dGhpcy5fZW5kVG9rZW4oW28sYCYke3J9O2BdKX19fV9jb25zdW1lUmF3VGV4dCh0LGUpe3RoaXMuX2JlZ2luVG9rZW4odD82OjcpO2xldCBpPVtdO2Zvcig7Oyl7bGV0IHI9dGhpcy5fY3Vyc29yLmNsb25lKCksbz1lKCk7aWYodGhpcy5fY3Vyc29yPXIsbylicmVhazt0JiYzOD09PXRoaXMuX2N1cnNvci5wZWVrKCk/KHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKGkuam9pbigiIikpXSksaS5sZW5ndGg9MCx0aGlzLl9jb25zdW1lRW50aXR5KDYpLHRoaXMuX2JlZ2luVG9rZW4oNikpOmkucHVzaCh0aGlzLl9yZWFkQ2hhcigpKX10aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhpLmpvaW4oIiIpKV0pfV9jb25zdW1lQ29tbWVudCh0KXt0aGlzLl9iZWdpblRva2VuKDEwLHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NSksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2NvbnN1bWVSYXdUZXh0KCExLCgpPT50aGlzLl9hdHRlbXB0U3RyKCItLVx4M2UiKSksdGhpcy5fYmVnaW5Ub2tlbigxMSksdGhpcy5fcmVxdWlyZVN0cigiLS1ceDNlIiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lQ2RhdGEodCl7dGhpcy5fYmVnaW5Ub2tlbigxMix0KSx0aGlzLl9yZXF1aXJlU3RyKCJDREFUQVsiKSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fY29uc3VtZVJhd1RleHQoITEsKCk9PnRoaXMuX2F0dGVtcHRTdHIoIl1dPiIpKSx0aGlzLl9iZWdpblRva2VuKDEzKSx0aGlzLl9yZXF1aXJlU3RyKCJdXT4iKSx0aGlzLl9lbmRUb2tlbihbXSl9X2NvbnN1bWVEb2NUeXBlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTgsdCk7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7dGhpcy5fYXR0ZW1wdFVudGlsQ2hhcig2Mik7bGV0IGk9dGhpcy5fY3Vyc29yLmdldENoYXJzKGUpO3RoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW2ldKX1fY29uc3VtZVByZWZpeEFuZE5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPSIiO2Zvcig7NTghPT10aGlzLl9jdXJzb3IucGVlaygpJiYhKCgobj10aGlzLl9jdXJzb3IucGVlaygpKTw5N3x8MTIyPG4pJiYobjw2NXx8OTA8bikmJihuPDQ4fHxuPjU3KSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCk7dmFyIG47bGV0IGk7cmV0dXJuIDU4PT09dGhpcy5fY3Vyc29yLnBlZWsoKT8oZT10aGlzLl9jdXJzb3IuZ2V0Q2hhcnModCksdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSxpPXRoaXMuX2N1cnNvci5jbG9uZSgpKTppPXQsdGhpcy5fcmVxdWlyZUNoYXJDb2RlVW50aWxGbihIOSwiIj09PWU/MDoxKSxbZSx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSldfV9jb25zdW1lVGFnT3Blbih0KXtsZXQgZSxpLHI7dHJ5e2lmKCFtMyh0aGlzLl9jdXJzb3IucGVlaygpKSl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihVYih0aGlzLl9jdXJzb3IucGVlaygpKSx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0KSk7Zm9yKHI9dGhpcy5fY29uc3VtZVRhZ09wZW5TdGFydCh0KSxpPXIucGFydHNbMF0sZT1yLnBhcnRzWzFdLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpOzQ3IT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmNjIhPT10aGlzLl9jdXJzb3IucGVlaygpJiY2MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJjAhPT10aGlzLl9jdXJzb3IucGVlaygpOyl0aGlzLl9jb25zdW1lQXR0cmlidXRlTmFtZSgpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MSkmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9jb25zdW1lQXR0cmlidXRlVmFsdWUoKSksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSk7dGhpcy5fY29uc3VtZVRhZ09wZW5FbmQoKX1jYXRjaChzKXtpZihzIGluc3RhbmNlb2YgSmIpcmV0dXJuIHZvaWQocj9yLnR5cGU9NDoodGhpcy5fYmVnaW5Ub2tlbig1LHQpLHRoaXMuX2VuZFRva2VuKFsiPCJdKSkpO3Rocm93IHN9bGV0IG89dGhpcy5fZ2V0VGFnRGVmaW5pdGlvbihlKS5nZXRDb250ZW50VHlwZShpKTtvPT09ZmwuUkFXX1RFWFQ/dGhpcy5fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UoaSxlLCExKTpvPT09ZmwuRVNDQVBBQkxFX1JBV19URVhUJiZ0aGlzLl9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZShpLGUsITApfV9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZSh0LGUsaSl7dGhpcy5fY29uc3VtZVJhd1RleHQoaSwoKT0+ISEodGhpcy5fYXR0ZW1wdENoYXJDb2RlKDYwKSYmdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRTdHJDYXNlSW5zZW5zaXRpdmUoZSkpKSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MikpKSx0aGlzLl9iZWdpblRva2VuKDMpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZVVudGlsRm4ocj0+NjI9PT1yLDMpLHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW3QsZV0pfV9jb25zdW1lVGFnT3BlblN0YXJ0KHQpe3RoaXMuX2JlZ2luVG9rZW4oMCx0KTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3JldHVybiB0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUF0dHJpYnV0ZU5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IucGVlaygpO2lmKDM5PT09dHx8MzQ9PT10KXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKFViKHQpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO3RoaXMuX2JlZ2luVG9rZW4oMTQpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVBdHRyaWJ1dGVWYWx1ZSgpe2lmKDM5PT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8MzQ9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgZT10aGlzLl9jdXJzb3IucGVlaygpO3RoaXMuX2NvbnN1bWVRdW90ZShlKTtsZXQgaT0oKT0+dGhpcy5fY3Vyc29yLnBlZWsoKT09PWU7dGhpcy5fY29uc3VtZVdpdGhJbnRlcnBvbGF0aW9uKDE2LDE3LGksaSksdGhpcy5fY29uc3VtZVF1b3RlKGUpfWVsc2V7bGV0IGU9KCk9Pkg5KHRoaXMuX2N1cnNvci5wZWVrKCkpO3RoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbigxNiwxNyxlLGUpfX1fY29uc3VtZVF1b3RlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTUpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSh0KSx0aGlzLl9lbmRUb2tlbihbU3RyaW5nLmZyb21Db2RlUG9pbnQodCldKX1fY29uc3VtZVRhZ09wZW5FbmQoKXtsZXQgdD10aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpPzI6MTt0aGlzLl9iZWdpblRva2VuKHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg2MiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lVGFnQ2xvc2UodCl7dGhpcy5fYmVnaW5Ub2tlbigzLHQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKDYyKSx0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUV4cGFuc2lvbkZvcm1TdGFydCgpe3RoaXMuX2JlZ2luVG9rZW4oMTkpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDE5KSx0aGlzLl9iZWdpblRva2VuKDcpO2xldCB0PXRoaXMuX3JlYWRVbnRpbCg0NCksZT10aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKHQpO2lmKHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcyl0aGlzLl9lbmRUb2tlbihbZV0pO2Vsc2V7bGV0IHI9dGhpcy5fZW5kVG9rZW4oW3RdKTtlIT09dCYmdGhpcy5ub25Ob3JtYWxpemVkSWN1RXhwcmVzc2lvbnMucHVzaChyKX10aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oNyk7bGV0IGk9dGhpcy5fcmVhZFVudGlsKDQ0KTt0aGlzLl9lbmRUb2tlbihbaV0pLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSl9X2NvbnN1bWVFeHBhbnNpb25DYXNlU3RhcnQoKXt0aGlzLl9iZWdpblRva2VuKDIwKTtsZXQgdD10aGlzLl9yZWFkVW50aWwoZnApLnRyaW0oKTt0aGlzLl9lbmRUb2tlbihbdF0pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oMjEpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDIxKX1fY29uc3VtZUV4cGFuc2lvbkNhc2VFbmQoKXt0aGlzLl9iZWdpblRva2VuKDIyKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodHUpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucG9wKCl9X2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCl7dGhpcy5fYmVnaW5Ub2tlbigyMyksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKHR1KSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLnBvcCgpfV9jb25zdW1lV2l0aEludGVycG9sYXRpb24odCxlLGkscil7dGhpcy5fYmVnaW5Ub2tlbih0KTtsZXQgbz1bXTtmb3IoOyFpKCk7KXtsZXQgcz10aGlzLl9jdXJzb3IuY2xvbmUoKTt0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnJiZ0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0scyksby5sZW5ndGg9MCx0aGlzLl9jb25zdW1lSW50ZXJwb2xhdGlvbihlLHMsciksdGhpcy5fYmVnaW5Ub2tlbih0KSk6Mzg9PT10aGlzLl9jdXJzb3IucGVlaygpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0pLG8ubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUVudGl0eSh0KSx0aGlzLl9iZWdpblRva2VuKHQpKTpvLnB1c2godGhpcy5fcmVhZENoYXIoKSl9dGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKG8uam9pbigiIikpXSl9X2NvbnN1bWVJbnRlcnBvbGF0aW9uKHQsZSxpKXtsZXQgcj1bXTt0aGlzLl9iZWdpblRva2VuKHQsZSksci5wdXNoKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpO2xldCBvPXRoaXMuX2N1cnNvci5jbG9uZSgpLHM9bnVsbCxhPSExO2Zvcig7MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJihudWxsPT09aXx8IWkoKSk7KXtsZXQgbD10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9pc1RhZ1N0YXJ0KCkpcmV0dXJuIHRoaXMuX2N1cnNvcj1sLHIucHVzaCh0aGlzLl9nZXRQcm9jZXNzZWRDaGFycyhvLGwpKSx2b2lkIHRoaXMuX2VuZFRva2VuKHIpO2lmKG51bGw9PT1zKXtpZih0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuZW5kKSlyZXR1cm4gci5wdXNoKHRoaXMuX2dldFByb2Nlc3NlZENoYXJzKG8sbCkpLHIucHVzaCh0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLmVuZCksdm9pZCB0aGlzLl9lbmRUb2tlbihyKTt0aGlzLl9hdHRlbXB0U3RyKCIvLyIpJiYoYT0hMCl9bGV0IGM9dGhpcy5fY3Vyc29yLnBlZWsoKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLDkyPT09Yz90aGlzLl9jdXJzb3IuYWR2YW5jZSgpOmM9PT1zP3M9bnVsbDohYSYmbnVsbD09PXMmJnVMKGMpJiYocz1jKX1yLnB1c2godGhpcy5fZ2V0UHJvY2Vzc2VkQ2hhcnMobyx0aGlzLl9jdXJzb3IpKSx0aGlzLl9lbmRUb2tlbihyKX1fZ2V0UHJvY2Vzc2VkQ2hhcnModCxlKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhlLmdldENoYXJzKHQpKX1faXNUZXh0RW5kKCl7cmV0dXJuISEodGhpcy5faXNUYWdTdGFydCgpfHwwPT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8dGhpcy5fdG9rZW5pemVJY3UmJiF0aGlzLl9pbkludGVycG9sYXRpb24mJih0aGlzLmlzRXhwYW5zaW9uRm9ybVN0YXJ0KCl8fHRoaXMuX2N1cnNvci5wZWVrKCk9PT10dSYmdGhpcy5faXNJbkV4cGFuc2lvbkNhc2UoKSkpfV9pc1RhZ1N0YXJ0KCl7aWYoNjA9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKTt0LmFkdmFuY2UoKTtsZXQgZT10LnBlZWsoKTtpZig5Nzw9ZSYmZTw9MTIyfHw2NTw9ZSYmZTw9OTB8fDQ3PT09ZXx8MzM9PT1lKXJldHVybiEwfXJldHVybiExfV9yZWFkVW50aWwodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7cmV0dXJuIHRoaXMuX2F0dGVtcHRVbnRpbENoYXIodCksdGhpcy5fY3Vyc29yLmdldENoYXJzKGUpfV9pc0luRXhwYW5zaW9uQ2FzZSgpe3JldHVybiB0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoPjAmJjIxPT09dGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrW3RoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGgtMV19X2lzSW5FeHBhbnNpb25Gb3JtKCl7cmV0dXJuIHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGg+MCYmMTk9PT10aGlzLl9leHBhbnNpb25DYXNlU3RhY2tbdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLmxlbmd0aC0xXX1pc0V4cGFuc2lvbkZvcm1TdGFydCgpe2lmKHRoaXMuX2N1cnNvci5wZWVrKCkhPT1mcClyZXR1cm4hMTtpZih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPXRoaXMuX2F0dGVtcHRTdHIodGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZy5zdGFydCk7cmV0dXJuIHRoaXMuX2N1cnNvcj10LCFlfXJldHVybiEwfX0obmV3IEkxKG4sdCksZSxpKTtyZXR1cm4gci50b2tlbml6ZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50b2tlbnM9dCx0aGlzLmVycm9ycz1lLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPWl9fShmdW5jdGlvbihuKXtsZXQgZSx0PVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO2UmJjU9PT1lLnR5cGUmJjU9PT1yLnR5cGV8fGUmJjE2PT09ZS50eXBlJiYxNj09PXIudHlwZT8oZS5wYXJ0c1swXSs9ci5wYXJ0c1swXSxlLnNvdXJjZVNwYW4uZW5kPXIuc291cmNlU3Bhbi5lbmQpOihlPXIsdC5wdXNoKGUpKX1yZXR1cm4gdH0oci50b2tlbnMpLHIuZXJyb3JzLHIubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zKX0odCxlLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbixpKSxvPW5ldyBQeChyLnRva2Vucyx0aGlzLmdldFRhZ0RlZmluaXRpb24pO3JldHVybiBvLmJ1aWxkKCksbmV3IFUxKG8ucm9vdE5vZGVzLHIuZXJyb3JzLmNvbmNhdChvLmVycm9ycykpfX0sUHg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRva2Vucz10LHRoaXMuZ2V0VGFnRGVmaW5pdGlvbj1lLHRoaXMuX2luZGV4PS0xLHRoaXMuX2VsZW1lbnRTdGFjaz1bXSx0aGlzLnJvb3ROb2Rlcz1bXSx0aGlzLmVycm9ycz1bXSx0aGlzLl9hZHZhbmNlKCl9YnVpbGQoKXtmb3IoOzI0IT09dGhpcy5fcGVlay50eXBlOykwPT09dGhpcy5fcGVlay50eXBlfHw0PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVTdGFydFRhZyh0aGlzLl9hZHZhbmNlKCkpOjM9PT10aGlzLl9wZWVrLnR5cGU/dGhpcy5fY29uc3VtZUVuZFRhZyh0aGlzLl9hZHZhbmNlKCkpOjEyPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNkYXRhKHRoaXMuX2FkdmFuY2UoKSkpOjEwPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNvbW1lbnQodGhpcy5fYWR2YW5jZSgpKSk6NT09PXRoaXMuX3BlZWsudHlwZXx8Nz09PXRoaXMuX3BlZWsudHlwZXx8Nj09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVUZXh0KHRoaXMuX2FkdmFuY2UoKSkpOjE5PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVFeHBhbnNpb24odGhpcy5fYWR2YW5jZSgpKTp0aGlzLl9hZHZhbmNlKCl9X2FkdmFuY2UoKXtsZXQgdD10aGlzLl9wZWVrO3JldHVybiB0aGlzLl9pbmRleDx0aGlzLnRva2Vucy5sZW5ndGgtMSYmdGhpcy5faW5kZXgrKyx0aGlzLl9wZWVrPXRoaXMudG9rZW5zW3RoaXMuX2luZGV4XSx0fV9hZHZhbmNlSWYodCl7cmV0dXJuIHRoaXMuX3BlZWsudHlwZT09PXQ/dGhpcy5fYWR2YW5jZSgpOm51bGx9X2NvbnN1bWVDZGF0YSh0KXt0aGlzLl9jb25zdW1lVGV4dCh0aGlzLl9hZHZhbmNlKCkpLHRoaXMuX2FkdmFuY2VJZigxMyl9X2NvbnN1bWVDb21tZW50KHQpe2xldCBlPXRoaXMuX2FkdmFuY2VJZig3KTt0aGlzLl9hZHZhbmNlSWYoMTEpO2xldCBpPW51bGwhPWU/ZS5wYXJ0c1swXS50cmltKCk6bnVsbDt0aGlzLl9hZGRUb1BhcmVudChuZXcgVjEoaSx0LnNvdXJjZVNwYW4pKX1fY29uc3VtZUV4cGFuc2lvbih0KXtsZXQgZT10aGlzLl9hZHZhbmNlKCksaT10aGlzLl9hZHZhbmNlKCkscj1bXTtmb3IoOzIwPT09dGhpcy5fcGVlay50eXBlOyl7bGV0IHM9dGhpcy5fcGFyc2VFeHBhbnNpb25DYXNlKCk7aWYoIXMpcmV0dXJuO3IucHVzaChzKX1pZigyMyE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdm9pZCB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHRoaXMuX3BlZWsuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpO2xldCBvPW5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsdGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KTt0aGlzLl9hZGRUb1BhcmVudChuZXcgTjAoZS5wYXJ0c1swXSxpLnBhcnRzWzBdLHIsbyxlLnNvdXJjZVNwYW4pKSx0aGlzLl9hZHZhbmNlKCl9X3BhcnNlRXhwYW5zaW9uQ2FzZSgpe2xldCB0PXRoaXMuX2FkdmFuY2UoKTtpZigyMSE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0aGlzLl9wZWVrLnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ3snLiIpKSxudWxsO2xldCBlPXRoaXMuX2FkdmFuY2UoKSxpPXRoaXMuX2NvbGxlY3RFeHBhbnNpb25FeHBUb2tlbnMoZSk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fYWR2YW5jZSgpO2kucHVzaCh7dHlwZToyNCxwYXJ0czpbXSxzb3VyY2VTcGFuOnIuc291cmNlU3Bhbn0pO2xldCBvPW5ldyBQeChpLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbik7aWYoby5idWlsZCgpLG8uZXJyb3JzLmxlbmd0aD4wKXJldHVybiB0aGlzLmVycm9ycz10aGlzLmVycm9ycy5jb25jYXQoby5lcnJvcnMpLG51bGw7bGV0IHM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGE9bmV3IFRvKGUuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLGUuc291cmNlU3Bhbi5mdWxsU3RhcnQpO3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnZhbHVlPXQsdGhpcy5leHByZXNzaW9uPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy52YWx1ZVNvdXJjZVNwYW49cix0aGlzLmV4cFNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uQ2FzZSh0aGlzLGUpfX0odC5wYXJ0c1swXSxvLnJvb3ROb2RlcyxzLHQuc291cmNlU3BhbixhKX1fY29sbGVjdEV4cGFuc2lvbkV4cFRva2Vucyh0KXtsZXQgZT1bXSxpPVsyMV07Zm9yKDs7KXtpZigoMTk9PT10aGlzLl9wZWVrLnR5cGV8fDIxPT09dGhpcy5fcGVlay50eXBlKSYmaS5wdXNoKHRoaXMuX3BlZWsudHlwZSksMjI9PT10aGlzLl9wZWVrLnR5cGUpe2lmKCF6OShpLDIxKSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0LnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKSxudWxsO2lmKGkucG9wKCksMD09PWkubGVuZ3RoKXJldHVybiBlfWlmKDIzPT09dGhpcy5fcGVlay50eXBlKXtpZighejkoaSwxOSkpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG51bGwsdC5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd9Jy4iKSksbnVsbDtpLnBvcCgpfWlmKDI0PT09dGhpcy5fcGVlay50eXBlKXJldHVybiB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHQuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpLG51bGw7ZS5wdXNoKHRoaXMuX2FkdmFuY2UoKSl9fV9jb25zdW1lVGV4dCh0KXtsZXQgZT1bdF0saT10LnNvdXJjZVNwYW4scj10LnBhcnRzWzBdO2lmKHIubGVuZ3RoPjAmJiJcbiI9PT1yWzBdKXtsZXQgbz10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7bnVsbCE9byYmMD09PW8uY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oby5uYW1lKS5pZ25vcmVGaXJzdExmJiYocj1yLnN1YnN0cmluZygxKSxlWzBdPXt0eXBlOnQudHlwZSxzb3VyY2VTcGFuOnQuc291cmNlU3BhbixwYXJ0czpbcl19KX1mb3IoOzg9PT10aGlzLl9wZWVrLnR5cGV8fDU9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXQ9dGhpcy5fYWR2YW5jZSgpLGUucHVzaCh0KSxyKz04PT09dC50eXBlP3QucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT10LnR5cGU/dC5wYXJ0c1swXTp0LnBhcnRzLmpvaW4oIiIpO3IubGVuZ3RoPjAmJnRoaXMuX2FkZFRvUGFyZW50KG5ldyBGMChyLG5ldyBUbyhpLnN0YXJ0LHQuc291cmNlU3Bhbi5lbmQsaS5mdWxsU3RhcnQsaS5kZXRhaWxzKSxlKSl9X2Nsb3NlVm9pZEVsZW1lbnQoKXtsZXQgdD10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7dCYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKHQubmFtZSkuaXNWb2lkJiZ0aGlzLl9lbGVtZW50U3RhY2sucG9wKCl9X2NvbnN1bWVTdGFydFRhZyh0KXtsZXRbZSxpXT10LnBhcnRzLHI9W107Zm9yKDsxND09PXRoaXMuX3BlZWsudHlwZTspci5wdXNoKHRoaXMuX2NvbnN1bWVBdHRyKHRoaXMuX2FkdmFuY2UoKSkpO2xldCBvPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZShlLGksdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKSxzPSExO2lmKDI9PT10aGlzLl9wZWVrLnR5cGUpe3RoaXMuX2FkdmFuY2UoKSxzPSEwO2xldCBkPXRoaXMuZ2V0VGFnRGVmaW5pdGlvbihvKTtkLmNhblNlbGZDbG9zZXx8bnVsbCE9PVk3KG8pfHxkLmlzVm9pZHx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobyx0LnNvdXJjZVNwYW4sYE9ubHkgdm9pZCBhbmQgZm9yZWlnbiBlbGVtZW50cyBjYW4gYmUgc2VsZiBjbG9zZWQgIiR7dC5wYXJ0c1sxXX0iYCkpfWVsc2UgMT09PXRoaXMuX3BlZWsudHlwZSYmKHRoaXMuX2FkdmFuY2UoKSxzPSExKTtsZXQgYT10aGlzLl9wZWVrLnNvdXJjZVNwYW4uZnVsbFN0YXJ0LGw9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLHU9bmV3IEF4KG8scixbXSxsLGMsdm9pZCAwKTt0aGlzLl9wdXNoRWxlbWVudCh1KSxzP3RoaXMuX3BvcEVsZW1lbnQobyxsKTo0PT09dC50eXBlJiYodGhpcy5fcG9wRWxlbWVudChvLG51bGwpLHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG8sbCxgT3BlbmluZyB0YWcgIiR7b30iIG5vdCB0ZXJtaW5hdGVkLmApKSl9X3B1c2hFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtlJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oZS5uYW1lKS5pc0Nsb3NlZEJ5Q2hpbGQodC5uYW1lKSYmdGhpcy5fZWxlbWVudFN0YWNrLnBvcCgpLHRoaXMuX2FkZFRvUGFyZW50KHQpLHRoaXMuX2VsZW1lbnRTdGFjay5wdXNoKHQpfV9jb25zdW1lRW5kVGFnKHQpe2xldCBlPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZSh0LnBhcnRzWzBdLHQucGFydHNbMV0sdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKTt0aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaXNWb2lkP3RoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKGUsdC5zb3VyY2VTcGFuLGBWb2lkIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGVuZCB0YWdzICIke3QucGFydHNbMV19ImApKTp0aGlzLl9wb3BFbGVtZW50KGUsdC5zb3VyY2VTcGFuKXx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUoZSx0LnNvdXJjZVNwYW4sYFVuZXhwZWN0ZWQgY2xvc2luZyB0YWcgIiR7ZX0iLiBJdCBtYXkgaGFwcGVuIHdoZW4gdGhlIHRhZyBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCBieSBhbm90aGVyIHRhZy4gRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2Nsb3NpbmctZWxlbWVudHMtdGhhdC1oYXZlLWltcGxpZWQtZW5kLXRhZ3NgKSl9X3BvcEVsZW1lbnQodCxlKXtsZXQgaT0hMTtmb3IobGV0IHI9dGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC0xO3I+PTA7ci0tKXtsZXQgbz10aGlzLl9lbGVtZW50U3RhY2tbcl07aWYoby5uYW1lPT09dClyZXR1cm4gby5lbmRTb3VyY2VTcGFuPWUsby5zb3VyY2VTcGFuLmVuZD1udWxsIT09ZT9lLmVuZDpvLnNvdXJjZVNwYW4uZW5kLHRoaXMuX2VsZW1lbnRTdGFjay5zcGxpY2Uocix0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLXIpLCFpO3RoaXMuZ2V0VGFnRGVmaW5pdGlvbihvLm5hbWUpLmNsb3NlZEJ5UGFyZW50fHwoaT0hMCl9cmV0dXJuITF9X2NvbnN1bWVBdHRyKHQpe2xldCBlPWpOKHQucGFydHNbMF0sdC5wYXJ0c1sxXSksaT10LnNvdXJjZVNwYW4uZW5kOzE1PT09dGhpcy5fcGVlay50eXBlJiZ0aGlzLl9hZHZhbmNlKCk7bGV0IHMsYSxyPSIiLG89W107aWYoMTY9PT10aGlzLl9wZWVrLnR5cGUpZm9yKHM9dGhpcy5fcGVlay5zb3VyY2VTcGFuLGE9dGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZDsxNj09PXRoaXMuX3BlZWsudHlwZXx8MTc9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXtsZXQgdT10aGlzLl9hZHZhbmNlKCk7by5wdXNoKHUpLHIrPTE3PT09dS50eXBlP3UucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT11LnR5cGU/dS5wYXJ0c1swXTp1LnBhcnRzLmpvaW4oIiIpLGE9aT11LnNvdXJjZVNwYW4uZW5kfTE1PT09dGhpcy5fcGVlay50eXBlJiYoaT10aGlzLl9hZHZhbmNlKCkuc291cmNlU3Bhbi5lbmQpO2xldCBjPXMmJmEmJm5ldyBUbyhzLnN0YXJ0LGEscy5mdWxsU3RhcnQpO3JldHVybiBuZXcgUkwoZSxyLG5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsaSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSx0LnNvdXJjZVNwYW4sYyxvLmxlbmd0aD4wP286dm9pZCAwLHZvaWQgMCl9X2dldFBhcmVudEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aD4wP3RoaXMuX2VsZW1lbnRTdGFja1t0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLTFdOm51bGx9X2FkZFRvUGFyZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtudWxsIT1lP2UuY2hpbGRyZW4ucHVzaCh0KTp0aGlzLnJvb3ROb2Rlcy5wdXNoKHQpfV9nZXRFbGVtZW50RnVsbE5hbWUodCxlLGkpe2lmKCIiPT09dCYmIiI9PT0odD10aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaW1wbGljaXROYW1lc3BhY2VQcmVmaXh8fCIiKSYmbnVsbCE9aSl7bGV0IHI9Y2QoaS5uYW1lKVsxXTt0aGlzLmdldFRhZ0RlZmluaXRpb24ocikucHJldmVudE5hbWVzcGFjZUluaGVyaXRhbmNlfHwodD1ZNyhpLm5hbWUpKX1yZXR1cm4gak4odCxlKX19O2Z1bmN0aW9uIHo5KG4sdCl7cmV0dXJuIG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV09PT10fWZ1bmN0aW9uIGo5KG4sdCl7cmV0dXJuIHZvaWQgMCE9PUgxW3RdP0gxW3RdfHxuOi9eI3hbYS1mMC05XSskL2kudGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDIpLDE2KSk6L14jXGQrJC8udGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDEpLDEwKSk6bn12YXIgcDEsTkw9Y2xhc3MgZXh0ZW5kcyBGTHtjb25zdHJ1Y3Rvcigpe3N1cGVyKGUzKX1wYXJzZSh0LGUsaSl7cmV0dXJuIHN1cGVyLnBhcnNlKHQsZSxpKX19LEpxPSJuZ1ByZXNlcnZlV2hpdGVzcGFjZXMiLEp5ZT1uZXcgU2V0KFsicHJlIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInNjcmlwdCIsInN0eWxlIl0pLCRxPSIgXGZcblxyXHRcdlx1MTY4MFx1MTgwZVx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmYiLCR5ZT1uZXcgUmVnRXhwKGBbXiR7JHF9XWApLGViZT1uZXcgUmVnRXhwKGBbJHskcX1dezIsfWAsImciKTtmdW5jdGlvbiBlWShuKXtyZXR1cm4gbi5yZXBsYWNlKG5ldyBSZWdFeHAoIlx1ZTUwMCIsImciKSwiICIpfWZ1bmN0aW9uIHRZKG4pe3JldHVybiBlWShuKS5yZXBsYWNlKGViZSwiICIpfWZ1bmN0aW9uIHoxKG4sdD0hMSl7cmV0dXJuIG1sKE9iamVjdC5rZXlzKG4pLm1hcChlPT4oe2tleTplLHF1b3RlZDp0LHZhbHVlOm5bZV19KSkpfWZ1bmN0aW9uIEc5KCl7cmV0dXJuIHAxfHwocDE9e30sbzEoWXIuSFRNTCxbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVySFRNTCIsIip8b3V0ZXJIVE1MIl0pLG8xKFlyLlNUWUxFLFsiKnxzdHlsZSJdKSxvMShZci5VUkwsWyIqfGZvcm1BY3Rpb24iLCJhcmVhfGhyZWYiLCJhcmVhfHBpbmciLCJhdWRpb3xzcmMiLCJhfGhyZWYiLCJhfHBpbmciLCJibG9ja3F1b3RlfGNpdGUiLCJib2R5fGJhY2tncm91bmQiLCJkZWx8Y2l0ZSIsImZvcm18YWN0aW9uIiwiaW1nfHNyYyIsImlucHV0fHNyYyIsImluc3xjaXRlIiwicXxjaXRlIiwic291cmNlfHNyYyIsInRyYWNrfHNyYyIsInZpZGVvfHBvc3RlciIsInZpZGVvfHNyYyJdKSxvMShZci5SRVNPVVJDRV9VUkwsWyJhcHBsZXR8Y29kZSIsImFwcGxldHxjb2RlYmFzZSIsImJhc2V8aHJlZiIsImVtYmVkfHNyYyIsImZyYW1lfHNyYyIsImhlYWR8cHJvZmlsZSIsImh0bWx8bWFuaWZlc3QiLCJpZnJhbWV8c3JjIiwibGlua3xocmVmIiwibWVkaWF8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiLCJzY3JpcHR8c3JjIl0pKSxwMX1mdW5jdGlvbiBvMShuLHQpe2ZvcihsZXQgZSBvZiB0KXAxW2UudG9Mb3dlckNhc2UoKV09bn12YXIgQkw9Y2xhc3N7fSxsYmU9WyJbRWxlbWVudF18dGV4dENvbnRlbnQsJWNsYXNzTGlzdCxjbGFzc05hbWUsaWQsaW5uZXJIVE1MLCpiZWZvcmVjb3B5LCpiZWZvcmVjdXQsKmJlZm9yZXBhc3RlLCpjb3B5LCpjdXQsKnBhc3RlLCpzZWFyY2gsKnNlbGVjdHN0YXJ0LCp3ZWJraXRmdWxsc2NyZWVuY2hhbmdlLCp3ZWJraXRmdWxsc2NyZWVuZXJyb3IsKndoZWVsLG91dGVySFRNTCwjc2Nyb2xsTGVmdCwjc2Nyb2xsVG9wLHNsb3QsKm1lc3NhZ2UsKm1vemZ1bGxzY3JlZW5jaGFuZ2UsKm1vemZ1bGxzY3JlZW5lcnJvciwqbW96cG9pbnRlcmxvY2tjaGFuZ2UsKm1venBvaW50ZXJsb2NrZXJyb3IsKndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IsKndlYmdsY29udGV4dGxvc3QsKndlYmdsY29udGV4dHJlc3RvcmVkIiwiW0hUTUxFbGVtZW50XV5bRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJhYmJyLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiLGJkaSxiZG8sY2l0ZSxjb2RlLGRkLGRmbixkdCxlbSxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGksa2JkLG1haW4sbWFyayxuYXYsbm9zY3JpcHQscmIscnAscnQscnRjLHJ1YnkscyxzYW1wLHNlY3Rpb24sc21hbGwsc3Ryb25nLHN1YixzdXAsdSx2YXIsd2JyXltIVE1MRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJtZWRpYV5bSFRNTEVsZW1lbnRdfCFhdXRvcGxheSwhY29udHJvbHMsJWNvbnRyb2xzTGlzdCwlY3Jvc3NPcmlnaW4sI2N1cnJlbnRUaW1lLCFkZWZhdWx0TXV0ZWQsI2RlZmF1bHRQbGF5YmFja1JhdGUsIWRpc2FibGVSZW1vdGVQbGF5YmFjaywhbG9vcCwhbXV0ZWQsKmVuY3J5cHRlZCwqd2FpdGluZ2ZvcmtleSwjcGxheWJhY2tSYXRlLHByZWxvYWQsc3JjLCVzcmNPYmplY3QsI3ZvbHVtZSIsIjpzdmc6XltIVE1MRWxlbWVudF18KmFib3J0LCphdXhjbGljaywqYmx1ciwqY2FuY2VsLCpjYW5wbGF5LCpjYW5wbGF5dGhyb3VnaCwqY2hhbmdlLCpjbGljaywqY2xvc2UsKmNvbnRleHRtZW51LCpjdWVjaGFuZ2UsKmRibGNsaWNrLCpkcmFnLCpkcmFnZW5kLCpkcmFnZW50ZXIsKmRyYWdsZWF2ZSwqZHJhZ292ZXIsKmRyYWdzdGFydCwqZHJvcCwqZHVyYXRpb25jaGFuZ2UsKmVtcHRpZWQsKmVuZGVkLCplcnJvciwqZm9jdXMsKmdvdHBvaW50ZXJjYXB0dXJlLCppbnB1dCwqaW52YWxpZCwqa2V5ZG93biwqa2V5cHJlc3MsKmtleXVwLCpsb2FkLCpsb2FkZWRkYXRhLCpsb2FkZWRtZXRhZGF0YSwqbG9hZHN0YXJ0LCpsb3N0cG9pbnRlcmNhcHR1cmUsKm1vdXNlZG93biwqbW91c2VlbnRlciwqbW91c2VsZWF2ZSwqbW91c2Vtb3ZlLCptb3VzZW91dCwqbW91c2VvdmVyLCptb3VzZXVwLCptb3VzZXdoZWVsLCpwYXVzZSwqcGxheSwqcGxheWluZywqcG9pbnRlcmNhbmNlbCwqcG9pbnRlcmRvd24sKnBvaW50ZXJlbnRlciwqcG9pbnRlcmxlYXZlLCpwb2ludGVybW92ZSwqcG9pbnRlcm91dCwqcG9pbnRlcm92ZXIsKnBvaW50ZXJ1cCwqcHJvZ3Jlc3MsKnJhdGVjaGFuZ2UsKnJlc2V0LCpyZXNpemUsKnNjcm9sbCwqc2Vla2VkLCpzZWVraW5nLCpzZWxlY3QsKnNob3csKnN0YWxsZWQsKnN1Ym1pdCwqc3VzcGVuZCwqdGltZXVwZGF0ZSwqdG9nZ2xlLCp2b2x1bWVjaGFuZ2UsKndhaXRpbmcsJXN0eWxlLCN0YWJJbmRleCIsIjpzdmc6Z3JhcGhpY3NeOnN2Zzp8IiwiOnN2ZzphbmltYXRpb25eOnN2Zzp8KmJlZ2luLCplbmQsKnJlcGVhdCIsIjpzdmc6Z2VvbWV0cnleOnN2Zzp8IiwiOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uXjpzdmc6fCIsIjpzdmc6Z3JhZGllbnReOnN2Zzp8IiwiOnN2Zzp0ZXh0Q29udGVudF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6dGV4dFBvc2l0aW9uaW5nXjpzdmc6dGV4dENvbnRlbnR8IiwiYV5bSFRNTEVsZW1lbnRdfGNoYXJzZXQsY29vcmRzLGRvd25sb2FkLGhhc2gsaG9zdCxob3N0bmFtZSxocmVmLGhyZWZsYW5nLG5hbWUscGFzc3dvcmQscGF0aG5hbWUscGluZyxwb3J0LHByb3RvY29sLHJlZmVycmVyUG9saWN5LHJlbCxyZXYsc2VhcmNoLHNoYXBlLHRhcmdldCx0ZXh0LHR5cGUsdXNlcm5hbWUiLCJhcmVhXltIVE1MRWxlbWVudF18YWx0LGNvb3Jkcyxkb3dubG9hZCxoYXNoLGhvc3QsaG9zdG5hbWUsaHJlZiwhbm9IcmVmLHBhc3N3b3JkLHBhdGhuYW1lLHBpbmcscG9ydCxwcm90b2NvbCxyZWZlcnJlclBvbGljeSxyZWwsc2VhcmNoLHNoYXBlLHRhcmdldCx1c2VybmFtZSIsImF1ZGlvXm1lZGlhfCIsImJyXltIVE1MRWxlbWVudF18Y2xlYXIiLCJiYXNlXltIVE1MRWxlbWVudF18aHJlZix0YXJnZXQiLCJib2R5XltIVE1MRWxlbWVudF18YUxpbmssYmFja2dyb3VuZCxiZ0NvbG9yLGxpbmssKmJlZm9yZXVubG9hZCwqYmx1ciwqZXJyb3IsKmZvY3VzLCpoYXNoY2hhbmdlLCpsYW5ndWFnZWNoYW5nZSwqbG9hZCwqbWVzc2FnZSwqb2ZmbGluZSwqb25saW5lLCpwYWdlaGlkZSwqcGFnZXNob3csKnBvcHN0YXRlLCpyZWplY3Rpb25oYW5kbGVkLCpyZXNpemUsKnNjcm9sbCwqc3RvcmFnZSwqdW5oYW5kbGVkcmVqZWN0aW9uLCp1bmxvYWQsdGV4dCx2TGluayIsImJ1dHRvbl5bSFRNTEVsZW1lbnRdfCFhdXRvZm9jdXMsIWRpc2FibGVkLGZvcm1BY3Rpb24sZm9ybUVuY3R5cGUsZm9ybU1ldGhvZCwhZm9ybU5vVmFsaWRhdGUsZm9ybVRhcmdldCxuYW1lLHR5cGUsdmFsdWUiLCJjYW52YXNeW0hUTUxFbGVtZW50XXwjaGVpZ2h0LCN3aWR0aCIsImNvbnRlbnReW0hUTUxFbGVtZW50XXxzZWxlY3QiLCJkbF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGF0YWxpc3ReW0hUTUxFbGVtZW50XXwiLCJkZXRhaWxzXltIVE1MRWxlbWVudF18IW9wZW4iLCJkaWFsb2deW0hUTUxFbGVtZW50XXwhb3BlbixyZXR1cm5WYWx1ZSIsImRpcl5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGl2XltIVE1MRWxlbWVudF18YWxpZ24iLCJlbWJlZF5bSFRNTEVsZW1lbnRdfGFsaWduLGhlaWdodCxuYW1lLHNyYyx0eXBlLHdpZHRoIiwiZmllbGRzZXReW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbmFtZSIsImZvbnReW0hUTUxFbGVtZW50XXxjb2xvcixmYWNlLHNpemUiLCJmb3JtXltIVE1MRWxlbWVudF18YWNjZXB0Q2hhcnNldCxhY3Rpb24sYXV0b2NvbXBsZXRlLGVuY29kaW5nLGVuY3R5cGUsbWV0aG9kLG5hbWUsIW5vVmFsaWRhdGUsdGFyZ2V0IiwiZnJhbWVeW0hUTUxFbGVtZW50XXxmcmFtZUJvcmRlcixsb25nRGVzYyxtYXJnaW5IZWlnaHQsbWFyZ2luV2lkdGgsbmFtZSwhbm9SZXNpemUsc2Nyb2xsaW5nLHNyYyIsImZyYW1lc2V0XltIVE1MRWxlbWVudF18Y29scywqYmVmb3JldW5sb2FkLCpibHVyLCplcnJvciwqZm9jdXMsKmhhc2hjaGFuZ2UsKmxhbmd1YWdlY2hhbmdlLCpsb2FkLCptZXNzYWdlLCpvZmZsaW5lLCpvbmxpbmUsKnBhZ2VoaWRlLCpwYWdlc2hvdywqcG9wc3RhdGUsKnJlamVjdGlvbmhhbmRsZWQsKnJlc2l6ZSwqc2Nyb2xsLCpzdG9yYWdlLCp1bmhhbmRsZWRyZWplY3Rpb24sKnVubG9hZCxyb3dzIiwiaHJeW0hUTUxFbGVtZW50XXxhbGlnbixjb2xvciwhbm9TaGFkZSxzaXplLHdpZHRoIiwiaGVhZF5bSFRNTEVsZW1lbnRdfCIsImgxLGgyLGgzLGg0LGg1LGg2XltIVE1MRWxlbWVudF18YWxpZ24iLCJodG1sXltIVE1MRWxlbWVudF18dmVyc2lvbiIsImlmcmFtZV5bSFRNTEVsZW1lbnRdfGFsaWduLCFhbGxvd0Z1bGxzY3JlZW4sZnJhbWVCb3JkZXIsaGVpZ2h0LGxvbmdEZXNjLG1hcmdpbkhlaWdodCxtYXJnaW5XaWR0aCxuYW1lLHJlZmVycmVyUG9saWN5LCVzYW5kYm94LHNjcm9sbGluZyxzcmMsc3JjZG9jLHdpZHRoIiwiaW1nXltIVE1MRWxlbWVudF18YWxpZ24sYWx0LGJvcmRlciwlY3Jvc3NPcmlnaW4sI2hlaWdodCwjaHNwYWNlLCFpc01hcCxsb25nRGVzYyxsb3dzcmMsbmFtZSxyZWZlcnJlclBvbGljeSxzaXplcyxzcmMsc3Jjc2V0LHVzZU1hcCwjdnNwYWNlLCN3aWR0aCIsImlucHV0XltIVE1MRWxlbWVudF18YWNjZXB0LGFsaWduLGFsdCxhdXRvY2FwaXRhbGl6ZSxhdXRvY29tcGxldGUsIWF1dG9mb2N1cywhY2hlY2tlZCwhZGVmYXVsdENoZWNrZWQsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCVmaWxlcyxmb3JtQWN0aW9uLGZvcm1FbmN0eXBlLGZvcm1NZXRob2QsIWZvcm1Ob1ZhbGlkYXRlLGZvcm1UYXJnZXQsI2hlaWdodCwhaW5jcmVtZW50YWwsIWluZGV0ZXJtaW5hdGUsbWF4LCNtYXhMZW5ndGgsbWluLCNtaW5MZW5ndGgsIW11bHRpcGxlLG5hbWUscGF0dGVybixwbGFjZWhvbGRlciwhcmVhZE9ubHksIXJlcXVpcmVkLHNlbGVjdGlvbkRpcmVjdGlvbiwjc2VsZWN0aW9uRW5kLCNzZWxlY3Rpb25TdGFydCwjc2l6ZSxzcmMsc3RlcCx0eXBlLHVzZU1hcCx2YWx1ZSwldmFsdWVBc0RhdGUsI3ZhbHVlQXNOdW1iZXIsI3dpZHRoIiwibGleW0hUTUxFbGVtZW50XXx0eXBlLCN2YWx1ZSIsImxhYmVsXltIVE1MRWxlbWVudF18aHRtbEZvciIsImxlZ2VuZF5bSFRNTEVsZW1lbnRdfGFsaWduIiwibGlua15bSFRNTEVsZW1lbnRdfGFzLGNoYXJzZXQsJWNyb3NzT3JpZ2luLCFkaXNhYmxlZCxocmVmLGhyZWZsYW5nLGludGVncml0eSxtZWRpYSxyZWZlcnJlclBvbGljeSxyZWwsJXJlbExpc3QscmV2LCVzaXplcyx0YXJnZXQsdHlwZSIsIm1hcF5bSFRNTEVsZW1lbnRdfG5hbWUiLCJtYXJxdWVlXltIVE1MRWxlbWVudF18YmVoYXZpb3IsYmdDb2xvcixkaXJlY3Rpb24saGVpZ2h0LCNoc3BhY2UsI2xvb3AsI3Njcm9sbEFtb3VudCwjc2Nyb2xsRGVsYXksIXRydWVTcGVlZCwjdnNwYWNlLHdpZHRoIiwibWVudV5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwibWV0YV5bSFRNTEVsZW1lbnRdfGNvbnRlbnQsaHR0cEVxdWl2LG5hbWUsc2NoZW1lIiwibWV0ZXJeW0hUTUxFbGVtZW50XXwjaGlnaCwjbG93LCNtYXgsI21pbiwjb3B0aW11bSwjdmFsdWUiLCJpbnMsZGVsXltIVE1MRWxlbWVudF18Y2l0ZSxkYXRlVGltZSIsIm9sXltIVE1MRWxlbWVudF18IWNvbXBhY3QsIXJldmVyc2VkLCNzdGFydCx0eXBlIiwib2JqZWN0XltIVE1MRWxlbWVudF18YWxpZ24sYXJjaGl2ZSxib3JkZXIsY29kZSxjb2RlQmFzZSxjb2RlVHlwZSxkYXRhLCFkZWNsYXJlLGhlaWdodCwjaHNwYWNlLG5hbWUsc3RhbmRieSx0eXBlLHVzZU1hcCwjdnNwYWNlLHdpZHRoIiwib3B0Z3JvdXBeW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbGFiZWwiLCJvcHRpb25eW0hUTUxFbGVtZW50XXwhZGVmYXVsdFNlbGVjdGVkLCFkaXNhYmxlZCxsYWJlbCwhc2VsZWN0ZWQsdGV4dCx2YWx1ZSIsIm91dHB1dF5bSFRNTEVsZW1lbnRdfGRlZmF1bHRWYWx1ZSwlaHRtbEZvcixuYW1lLHZhbHVlIiwicF5bSFRNTEVsZW1lbnRdfGFsaWduIiwicGFyYW1eW0hUTUxFbGVtZW50XXxuYW1lLHR5cGUsdmFsdWUsdmFsdWVUeXBlIiwicGljdHVyZV5bSFRNTEVsZW1lbnRdfCIsInByZV5bSFRNTEVsZW1lbnRdfCN3aWR0aCIsInByb2dyZXNzXltIVE1MRWxlbWVudF18I21heCwjdmFsdWUiLCJxLGJsb2NrcXVvdGUsY2l0ZV5bSFRNTEVsZW1lbnRdfCIsInNjcmlwdF5bSFRNTEVsZW1lbnRdfCFhc3luYyxjaGFyc2V0LCVjcm9zc09yaWdpbiwhZGVmZXIsZXZlbnQsaHRtbEZvcixpbnRlZ3JpdHksc3JjLHRleHQsdHlwZSIsInNlbGVjdF5bSFRNTEVsZW1lbnRdfGF1dG9jb21wbGV0ZSwhYXV0b2ZvY3VzLCFkaXNhYmxlZCwjbGVuZ3RoLCFtdWx0aXBsZSxuYW1lLCFyZXF1aXJlZCwjc2VsZWN0ZWRJbmRleCwjc2l6ZSx2YWx1ZSIsInNoYWRvd15bSFRNTEVsZW1lbnRdfCIsInNsb3ReW0hUTUxFbGVtZW50XXxuYW1lIiwic291cmNlXltIVE1MRWxlbWVudF18bWVkaWEsc2l6ZXMsc3JjLHNyY3NldCx0eXBlIiwic3Bhbl5bSFRNTEVsZW1lbnRdfCIsInN0eWxlXltIVE1MRWxlbWVudF18IWRpc2FibGVkLG1lZGlhLHR5cGUiLCJjYXB0aW9uXltIVE1MRWxlbWVudF18YWxpZ24iLCJ0aCx0ZF5bSFRNTEVsZW1lbnRdfGFiYnIsYWxpZ24sYXhpcyxiZ0NvbG9yLGNoLGNoT2ZmLCNjb2xTcGFuLGhlYWRlcnMsaGVpZ2h0LCFub1dyYXAsI3Jvd1NwYW4sc2NvcGUsdkFsaWduLHdpZHRoIiwiY29sLGNvbGdyb3VwXltIVE1MRWxlbWVudF18YWxpZ24sY2gsY2hPZmYsI3NwYW4sdkFsaWduLHdpZHRoIiwidGFibGVeW0hUTUxFbGVtZW50XXxhbGlnbixiZ0NvbG9yLGJvcmRlciwlY2FwdGlvbixjZWxsUGFkZGluZyxjZWxsU3BhY2luZyxmcmFtZSxydWxlcyxzdW1tYXJ5LCV0Rm9vdCwldEhlYWQsd2lkdGgiLCJ0cl5bSFRNTEVsZW1lbnRdfGFsaWduLGJnQ29sb3IsY2gsY2hPZmYsdkFsaWduIiwidGZvb3QsdGhlYWQsdGJvZHleW0hUTUxFbGVtZW50XXxhbGlnbixjaCxjaE9mZix2QWxpZ24iLCJ0ZW1wbGF0ZV5bSFRNTEVsZW1lbnRdfCIsInRleHRhcmVhXltIVE1MRWxlbWVudF18YXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLCFhdXRvZm9jdXMsI2NvbHMsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCNtYXhMZW5ndGgsI21pbkxlbmd0aCxuYW1lLHBsYWNlaG9sZGVyLCFyZWFkT25seSwhcmVxdWlyZWQsI3Jvd3Msc2VsZWN0aW9uRGlyZWN0aW9uLCNzZWxlY3Rpb25FbmQsI3NlbGVjdGlvblN0YXJ0LHZhbHVlLHdyYXAiLCJ0aXRsZV5bSFRNTEVsZW1lbnRdfHRleHQiLCJ0cmFja15bSFRNTEVsZW1lbnRdfCFkZWZhdWx0LGtpbmQsbGFiZWwsc3JjLHNyY2xhbmciLCJ1bF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0LHR5cGUiLCJ1bmtub3duXltIVE1MRWxlbWVudF18IiwidmlkZW9ebWVkaWF8I2hlaWdodCxwb3N0ZXIsI3dpZHRoIiwiOnN2ZzphXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzphbmltYXRlXjpzdmc6YW5pbWF0aW9ufCIsIjpzdmc6YW5pbWF0ZU1vdGlvbl46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOmFuaW1hdGVUcmFuc2Zvcm1eOnN2ZzphbmltYXRpb258IiwiOnN2ZzpjaXJjbGVeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmNsaXBQYXRoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZWZzXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZXNjXjpzdmc6fCIsIjpzdmc6ZGlzY2FyZF46c3ZnOnwiLCI6c3ZnOmVsbGlwc2VeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmZlQmxlbmReOnN2Zzp8IiwiOnN2ZzpmZUNvbG9yTWF0cml4Xjpzdmc6fCIsIjpzdmc6ZmVDb21wb25lbnRUcmFuc2Zlcl46c3ZnOnwiLCI6c3ZnOmZlQ29tcG9zaXRlXjpzdmc6fCIsIjpzdmc6ZmVDb252b2x2ZU1hdHJpeF46c3ZnOnwiLCI6c3ZnOmZlRGlmZnVzZUxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVEaXNwbGFjZW1lbnRNYXBeOnN2Zzp8IiwiOnN2ZzpmZURpc3RhbnRMaWdodF46c3ZnOnwiLCI6c3ZnOmZlRHJvcFNoYWRvd146c3ZnOnwiLCI6c3ZnOmZlRmxvb2ReOnN2Zzp8IiwiOnN2ZzpmZUZ1bmNBXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlRnVuY0JeOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9ufCIsIjpzdmc6ZmVGdW5jR146c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUZ1bmNSXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlR2F1c3NpYW5CbHVyXjpzdmc6fCIsIjpzdmc6ZmVJbWFnZV46c3ZnOnwiLCI6c3ZnOmZlTWVyZ2VeOnN2Zzp8IiwiOnN2ZzpmZU1lcmdlTm9kZV46c3ZnOnwiLCI6c3ZnOmZlTW9ycGhvbG9neV46c3ZnOnwiLCI6c3ZnOmZlT2Zmc2V0Xjpzdmc6fCIsIjpzdmc6ZmVQb2ludExpZ2h0Xjpzdmc6fCIsIjpzdmc6ZmVTcGVjdWxhckxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVTcG90TGlnaHReOnN2Zzp8IiwiOnN2ZzpmZVRpbGVeOnN2Zzp8IiwiOnN2ZzpmZVR1cmJ1bGVuY2VeOnN2Zzp8IiwiOnN2ZzpmaWx0ZXJeOnN2Zzp8IiwiOnN2Zzpmb3JlaWduT2JqZWN0Xjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpnXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzppbWFnZV46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6bGluZV46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6bGluZWFyR3JhZGllbnReOnN2ZzpncmFkaWVudHwiLCI6c3ZnOm1wYXRoXjpzdmc6fCIsIjpzdmc6bWFya2VyXjpzdmc6fCIsIjpzdmc6bWFza146c3ZnOnwiLCI6c3ZnOm1ldGFkYXRhXjpzdmc6fCIsIjpzdmc6cGF0aF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6cGF0dGVybl46c3ZnOnwiLCI6c3ZnOnBvbHlnb25eOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnBvbHlsaW5lXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpyYWRpYWxHcmFkaWVudF46c3ZnOmdyYWRpZW50fCIsIjpzdmc6cmVjdF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6c3ZnXjpzdmc6Z3JhcGhpY3N8I2N1cnJlbnRTY2FsZSwjem9vbUFuZFBhbiIsIjpzdmc6c2NyaXB0Xjpzdmc6fHR5cGUiLCI6c3ZnOnNldF46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOnN0b3BeOnN2Zzp8IiwiOnN2ZzpzdHlsZV46c3ZnOnwhZGlzYWJsZWQsbWVkaWEsdGl0bGUsdHlwZSIsIjpzdmc6c3dpdGNoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpzeW1ib2xeOnN2Zzp8IiwiOnN2Zzp0c3Bhbl46c3ZnOnRleHRQb3NpdGlvbmluZ3wiLCI6c3ZnOnRleHReOnN2Zzp0ZXh0UG9zaXRpb25pbmd8IiwiOnN2Zzp0ZXh0UGF0aF46c3ZnOnRleHRDb250ZW50fCIsIjpzdmc6dGl0bGVeOnN2Zzp8IiwiOnN2Zzp1c2VeOnN2ZzpncmFwaGljc3wiLCI6c3ZnOnZpZXdeOnN2Zzp8I3pvb21BbmRQYW4iLCJkYXRhXltIVE1MRWxlbWVudF18dmFsdWUiLCJrZXlnZW5eW0hUTUxFbGVtZW50XXwhYXV0b2ZvY3VzLGNoYWxsZW5nZSwhZGlzYWJsZWQsZm9ybSxrZXl0eXBlLG5hbWUiLCJtZW51aXRlbV5bSFRNTEVsZW1lbnRdfHR5cGUsbGFiZWwsaWNvbiwhZGlzYWJsZWQsIWNoZWNrZWQscmFkaW9ncm91cCwhZGVmYXVsdCIsInN1bW1hcnleW0hUTUxFbGVtZW50XXwiLCJ0aW1lXltIVE1MRWxlbWVudF18ZGF0ZVRpbWUiLCI6c3ZnOmN1cnNvcl46c3ZnOnwiXSxuWT1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKHtjbGFzczoiY2xhc3NOYW1lIixmb3I6Imh0bWxGb3IiLGZvcm1hY3Rpb246ImZvcm1BY3Rpb24iLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9KSksY2JlPUFycmF5LmZyb20oblkpLnJlZHVjZSgobixbdCxlXSk9PihuLnNldCh0LGUpLG4pLG5ldyBNYXApLGoxPWNsYXNzIGV4dGVuZHMgQkx7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3NjaGVtYT1uZXcgTWFwLHRoaXMuX2V2ZW50U2NoZW1hPW5ldyBNYXAsbGJlLmZvckVhY2godD0+e2xldCBlPW5ldyBNYXAsaT1uZXcgU2V0LFtyLG9dPXQuc3BsaXQoInwiKSxzPW8uc3BsaXQoIiwiKSxbYSxsXT1yLnNwbGl0KCJeIik7YS5zcGxpdCgiLCIpLmZvckVhY2godT0+e3RoaXMuX3NjaGVtYS5zZXQodS50b0xvd2VyQ2FzZSgpLGUpLHRoaXMuX2V2ZW50U2NoZW1hLnNldCh1LnRvTG93ZXJDYXNlKCksaSl9KTtsZXQgYz1sJiZ0aGlzLl9zY2hlbWEuZ2V0KGwudG9Mb3dlckNhc2UoKSk7aWYoYyl7Zm9yKGxldFt1LGRdb2YgYyllLnNldCh1LGQpO2ZvcihsZXQgdSBvZiB0aGlzLl9ldmVudFNjaGVtYS5nZXQobC50b0xvd2VyQ2FzZSgpKSlpLmFkZCh1KX1zLmZvckVhY2godT0+e2lmKHUubGVuZ3RoPjApc3dpdGNoKHVbMF0pe2Nhc2UiKiI6aS5hZGQodS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UiISI6ZS5zZXQodS5zdWJzdHJpbmcoMSksImJvb2xlYW4iKTticmVhaztjYXNlIiMiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJudW1iZXIiKTticmVhaztjYXNlIiUiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJvYmplY3QiKTticmVhaztkZWZhdWx0OmUuc2V0KHUsInN0cmluZyIpfX0pfSl9aGFzUHJvcGVydHkodCxlLGkpe2lmKGkuc29tZShvPT4ibm8tZXJyb3JzLXNjaGVtYSI9PT1vLm5hbWUpKXJldHVybiEwO2lmKHQuaW5kZXhPZigiLSIpPi0xKXtpZihVTih0KXx8ek4odCkpcmV0dXJuITE7aWYoaS5zb21lKG89PiJjdXN0b20tZWxlbWVudHMiPT09by5uYW1lKSlyZXR1cm4hMH1yZXR1cm4odGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIikpLmhhcyhlKX1oYXNFbGVtZW50KHQsZSl7cmV0dXJuISEoZS5zb21lKGk9PiJuby1lcnJvcnMtc2NoZW1hIj09PWkubmFtZSl8fHQuaW5kZXhPZigiLSIpPi0xJiYoVU4odCl8fHpOKHQpfHxlLnNvbWUoaT0+ImN1c3RvbS1lbGVtZW50cyI9PT1pLm5hbWUpKSl8fHRoaXMuX3NjaGVtYS5oYXModC50b0xvd2VyQ2FzZSgpKX1zZWN1cml0eUNvbnRleHQodCxlLGkpe2kmJihlPXRoaXMuZ2V0TWFwcGVkUHJvcE5hbWUoZSkpLHQ9dC50b0xvd2VyQ2FzZSgpLGU9ZS50b0xvd2VyQ2FzZSgpO2xldCByPUc5KClbdCsifCIrZV07cmV0dXJuIHJ8fChyPUc5KClbIip8IitlXSxyfHxZci5OT05FKX1nZXRNYXBwZWRQcm9wTmFtZSh0KXtyZXR1cm4gblkuZ2V0KHQpPz90fWdldERlZmF1bHRDb21wb25lbnRFbGVtZW50TmFtZSgpe3JldHVybiJuZy1jb21wb25lbnQifXZhbGlkYXRlUHJvcGVydHkodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJvbiIpP3tlcnJvcjohMCxtc2c6YEJpbmRpbmcgdG8gZXZlbnQgcHJvcGVydHkgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLlxuSWYgJyR7dH0nIGlzIGEgZGlyZWN0aXZlIGlucHV0LCBtYWtlIHN1cmUgdGhlIGRpcmVjdGl2ZSBpcyBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBtb2R1bGUuYH06e2Vycm9yOiExfX12YWxpZGF0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm9uIik/e2Vycm9yOiEwLG1zZzpgQmluZGluZyB0byBldmVudCBhdHRyaWJ1dGUgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLmB9OntlcnJvcjohMX19YWxsS25vd25FbGVtZW50TmFtZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zY2hlbWEua2V5cygpKX1hbGxLbm93bkF0dHJpYnV0ZXNPZkVsZW1lbnQodCl7bGV0IGU9dGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIik7cmV0dXJuIEFycmF5LmZyb20oZS5rZXlzKCkpLm1hcChpPT5jYmUuZ2V0KGkpPz9pKX1hbGxLbm93bkV2ZW50c09mRWxlbWVudCh0KXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9ldmVudFNjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKT8/W10pfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlUHJvcGVydHkodCl7cmV0dXJuIHQucmVwbGFjZShjX2UsKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlVmFsdWUodCxlLGkpe2xldCByPSIiLG89aS50b1N0cmluZygpLnRyaW0oKSxzPW51bGw7aWYoZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2Uid2lkdGgiOmNhc2UiaGVpZ2h0IjpjYXNlIm1pbldpZHRoIjpjYXNlIm1pbkhlaWdodCI6Y2FzZSJtYXhXaWR0aCI6Y2FzZSJtYXhIZWlnaHQiOmNhc2UibGVmdCI6Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpjYXNlImZvbnRTaXplIjpjYXNlIm91dGxpbmVXaWR0aCI6Y2FzZSJvdXRsaW5lT2Zmc2V0IjpjYXNlInBhZGRpbmdUb3AiOmNhc2UicGFkZGluZ0xlZnQiOmNhc2UicGFkZGluZ0JvdHRvbSI6Y2FzZSJwYWRkaW5nUmlnaHQiOmNhc2UibWFyZ2luVG9wIjpjYXNlIm1hcmdpbkxlZnQiOmNhc2UibWFyZ2luQm90dG9tIjpjYXNlIm1hcmdpblJpZ2h0IjpjYXNlImJvcmRlclJhZGl1cyI6Y2FzZSJib3JkZXJXaWR0aCI6Y2FzZSJib3JkZXJUb3BXaWR0aCI6Y2FzZSJib3JkZXJMZWZ0V2lkdGgiOmNhc2UiYm9yZGVyUmlnaHRXaWR0aCI6Y2FzZSJib3JkZXJCb3R0b21XaWR0aCI6Y2FzZSJ0ZXh0SW5kZW50IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0odCkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlyPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJihzPWBQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAke2V9OiR7aX1gKX1yZXR1cm57ZXJyb3I6cyx2YWx1ZTpvK3J9fX0sVzk9bmV3IFNldChbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVyaHRtbCIsIip8b3V0ZXJodG1sIiwiZW1iZWR8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiXSk7ZnVuY3Rpb24gaVkobix0KXtyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksdD10LnRvTG93ZXJDYXNlKCksVzkuaGFzKG4rInwiK3QpfHxXOS5oYXMoIip8Iit0KX12YXIgUE49ImFuaW1hdGUtIjtmdW5jdGlvbiBSTihuKXtyZXR1cm4iQCI9PW5bMF19ZnVuY3Rpb24gT04obix0LGUsaSl7bGV0IHI9W107cmV0dXJuIHVkLnBhcnNlKHQpLmZvckVhY2gobz0+e2xldCBzPW8uZWxlbWVudD9bby5lbGVtZW50XTpuLmFsbEtub3duRWxlbWVudE5hbWVzKCksYT1uZXcgU2V0KG8ubm90U2VsZWN0b3JzLmZpbHRlcihjPT5jLmlzRWxlbWVudFNlbGVjdG9yKCkpLm1hcChjPT5jLmVsZW1lbnQpKSxsPXMuZmlsdGVyKGM9PiFhLmhhcyhjKSk7ci5wdXNoKC4uLmwubWFwKGM9Pm4uc2VjdXJpdHlDb250ZXh0KGMsZSxpKSkpfSksMD09PXIubGVuZ3RoP1tZci5OT05FXTpBcnJheS5mcm9tKG5ldyBTZXQocikpLnNvcnQoKX1mdW5jdGlvbiBjcChuLHQpe2xldCBlPXQuc3RhcnQtbi5zdGFydC5vZmZzZXQsaT10LmVuZC1uLmVuZC5vZmZzZXQ7cmV0dXJuIG5ldyBUbyhuLnN0YXJ0Lm1vdmVCeShlKSxuLmVuZC5tb3ZlQnkoaSksbi5mdWxsU3RhcnQubW92ZUJ5KGUpLG4uZGV0YWlscyl9dmFyIGdiZT0vXihbXjovPyNdKyk6LztmdW5jdGlvbiByWShuKXtsZXQgdD1udWxsLGU9bnVsbCxpPW51bGwscj0hMSxvPSIiO24uYXR0cnMuZm9yRWFjaChsPT57bGV0IGM9bC5uYW1lLnRvTG93ZXJDYXNlKCk7InNlbGVjdCI9PWM/dD1sLnZhbHVlOiJocmVmIj09Yz9lPWwudmFsdWU6InJlbCI9PWM/aT1sLnZhbHVlOiJuZ05vbkJpbmRhYmxlIj09bC5uYW1lP3I9ITA6Im5nUHJvamVjdEFzIj09bC5uYW1lJiZsLnZhbHVlLmxlbmd0aD4wJiYobz1sLnZhbHVlKX0pLHQ9ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PT1ufHwwPT09bi5sZW5ndGg/IioiOm59KHQpO2xldCBzPW4ubmFtZS50b0xvd2VyQ2FzZSgpLGE9UHMuT1RIRVI7cmV0dXJuIHpOKHMpP2E9UHMuTkdfQ09OVEVOVDoic3R5bGUiPT1zP2E9UHMuU1RZTEU6InNjcmlwdCI9PXM/YT1Qcy5TQ1JJUFQ6ImxpbmsiPT1zJiYic3R5bGVzaGVldCI9PWkmJihhPVBzLlNUWUxFU0hFRVQpLG5ldyBITChhLHQsZSxyLG8pfXZhciBQcz0oKCk9PntyZXR1cm4obj1Qc3x8KFBzPXt9KSlbbi5OR19DT05URU5UPTBdPSJOR19DT05URU5UIixuW24uU1RZTEU9MV09IlNUWUxFIixuW24uU1RZTEVTSEVFVD0yXT0iU1RZTEVTSEVFVCIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uT1RIRVI9NF09Ik9USEVSIixQczt2YXIgbn0pKCksSEw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdEF0dHI9ZSx0aGlzLmhyZWZBdHRyPWksdGhpcy5ub25CaW5kYWJsZT1yLHRoaXMucHJvamVjdEFzPW99fSxUYmU9L14oPzooYmluZC0pfChsZXQtKXwocmVmLXwjKXwob24tKXwoYmluZG9uLSl8KEApKSguKikkLyx1cF9CQU5BTkFfQk9YPXtzdGFydDoiWygiLGVuZDoiKV0ifSx1cF9QUk9QRVJUWT17c3RhcnQ6IlsiLGVuZDoiXSJ9LHVwX0VWRU5UPXtzdGFydDoiKCIsZW5kOiIpIn0sSWJlPW5ldyBjbGFzc3t2aXNpdEVsZW1lbnQodCl7bGV0IGU9clkodCk7aWYoZS50eXBlPT09UHMuU0NSSVBUfHxlLnR5cGU9PT1Qcy5TVFlMRXx8ZS50eXBlPT09UHMuU1RZTEVTSEVFVClyZXR1cm4gbnVsbDtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sbnVsbCk7cmV0dXJuIG5ldyBFMCh0Lm5hbWUsY3UodGhpcyx0LmF0dHJzKSxbXSxbXSxpLFtdLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pfXZpc2l0Q29tbWVudCh0KXtyZXR1cm4gbnVsbH12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIG5ldyB3MCh0LnZhbHVlLHQuc291cmNlU3Bhbil9dmlzaXRFeHBhbnNpb24odCl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb25DYXNlKHQpe3JldHVybiBudWxsfX07ZnVuY3Rpb24gJDkobil7cmV0dXJuL15kYXRhLS9pLnRlc3Qobik/bi5zdWJzdHJpbmcoNSk6bn1mdW5jdGlvbiBrTihuLHQpe3QucHVzaCguLi5uLm1hcChlPT5TMC5mcm9tUGFyc2VkRXZlbnQoZSkpKX12YXIgcmM9KCgpPT57cmV0dXJuKG49cmN8fChyYz17fSkpW24uRUxFTUVOVD0wXT0iRUxFTUVOVCIsbltuLlRFTVBMQVRFPTFdPSJURU1QTEFURSIscmM7dmFyIG59KSgpLFJ4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPTAscj1udWxsLG8scyl7dGhpcy5pbmRleD10LHRoaXMucmVmPWUsdGhpcy5sZXZlbD1pLHRoaXMudGVtcGxhdGVJbmRleD1yLHRoaXMubWV0YT1vLHRoaXMucmVnaXN0cnk9cyx0aGlzLmJpbmRpbmdzPW5ldyBTZXQsdGhpcy5wbGFjZWhvbGRlcnM9bmV3IE1hcCx0aGlzLmlzRW1pdHRlZD0hMSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQ9MCx0aGlzLl9yZWdpc3RyeT1zfHx7Z2V0VW5pcXVlSWQ6bXZlKCksaWN1czpuZXcgTWFwfSx0aGlzLmlkPXRoaXMuX3JlZ2lzdHJ5LmdldFVuaXF1ZUlkKCl9YXBwZW5kVGFnKHQsZSxpLHIpe2UuaXNWb2lkJiZyfHx1MSh0aGlzLnBsYWNlaG9sZGVycyxlLmlzVm9pZHx8IXI/ZS5zdGFydE5hbWU6ZS5jbG9zZU5hbWUse3R5cGU6dCxpbmRleDppLGN0eDp0aGlzLmlkLGlzVm9pZDplLmlzVm9pZCxjbG9zZWQ6cn0pfWdldCBpY3VzKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmljdXN9Z2V0IGlzUm9vdCgpe3JldHVybiAwPT09dGhpcy5sZXZlbH1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiAwPT09dGhpcy5fdW5yZXNvbHZlZEN0eENvdW50fWdldFNlcmlhbGl6ZWRQbGFjZWhvbGRlcnMoKXtsZXQgdD1uZXcgTWFwO3JldHVybiB0aGlzLnBsYWNlaG9sZGVycy5mb3JFYWNoKChlLGkpPT50LnNldChpLGUubWFwKEZiZSkpKSx0fWFwcGVuZEJpbmRpbmcodCl7dGhpcy5iaW5kaW5ncy5hZGQodCl9YXBwZW5kSWN1KHQsZSl7dTEodGhpcy5fcmVnaXN0cnkuaWN1cyx0LGUpfWFwcGVuZEJvdW5kVGV4dCh0KXtEcSh0LHRoaXMuYmluZGluZ3Muc2l6ZSx0aGlzLmlkKS5mb3JFYWNoKChpLHIpPT51MSh0aGlzLnBsYWNlaG9sZGVycyxyLC4uLmkpKX1hcHBlbmRUZW1wbGF0ZSh0LGUpe3RoaXMuYXBwZW5kVGFnKHJjLlRFTVBMQVRFLHQsZSwhMSksdGhpcy5hcHBlbmRUYWcocmMuVEVNUExBVEUsdCxlLCEwKSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQrK31hcHBlbmRFbGVtZW50KHQsZSxpKXt0aGlzLmFwcGVuZFRhZyhyYy5FTEVNRU5ULHQsZSxpKX1hcHBlbmRQcm9qZWN0aW9uKHQsZSl7dGhpcy5hcHBlbmRUYWcocmMuRUxFTUVOVCx0LGUsITEpLHRoaXMuYXBwZW5kVGFnKHJjLkVMRU1FTlQsdCxlLCEwKX1mb3JrQ2hpbGRDb250ZXh0KHQsZSxpKXtyZXR1cm4gbmV3IFJ4KHQsdGhpcy5yZWYsdGhpcy5sZXZlbCsxLGUsaSx0aGlzLl9yZWdpc3RyeSl9cmVjb25jaWxlQ2hpbGRDb250ZXh0KHQpe1sic3RhcnQiLCJjbG9zZSJdLmZvckVhY2goaT0+e2xldCBzPSh0aGlzLnBsYWNlaG9sZGVycy5nZXQodC5tZXRhW2Ake2l9TmFtZWBdKXx8W10pLmZpbmQoZXEodGhpcy5pZCx0LnRlbXBsYXRlSW5kZXgpKTtzJiYocy5jdHg9dC5pZCl9KSx0LnBsYWNlaG9sZGVycy5mb3JFYWNoKChpLHIpPT57bGV0IG89dGhpcy5wbGFjZWhvbGRlcnMuZ2V0KHIpO2lmKCFvKXJldHVybiB2b2lkIHRoaXMucGxhY2Vob2xkZXJzLnNldChyLGkpO2xldCBzPW8uZmluZEluZGV4KGVxKHQuaWQsdC50ZW1wbGF0ZUluZGV4KSk7aWYocz49MCl7bGV0IGE9ci5zdGFydHNXaXRoKCJDTE9TRSIpO3IuZW5kc1dpdGgoIk5HLVRFTVBMQVRFIik/by5zcGxpY2UocysoYT8wOjEpLDAsLi4uaSk6KGlbYT9pLmxlbmd0aC0xOjBdLnRtcGw9b1tzXSxvLnNwbGljZShzLDEsLi4uaSkpfWVsc2Ugby5wdXNoKC4uLmkpO3RoaXMucGxhY2Vob2xkZXJzLnNldChyLG8pfSksdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50LS19fTtmdW5jdGlvbiBGTihuLHQsZSxpKXtyZXR1cm4gUTEoYCR7aT8iLyI6IiJ9JHtufSR7dH1gLGUpfWZ1bmN0aW9uIE5OKG4se2luZGV4OnQsY3R4OmUsaXNWb2lkOml9LHIpe3JldHVybiBpP0ZOKG4sdCxlKStGTihuLHQsZSwhMCk6Rk4obix0LGUscil9ZnVuY3Rpb24gZXEobix0KXtyZXR1cm4gZT0+Im9iamVjdCI9PXR5cGVvZiBlJiZlLnR5cGU9PT1yYy5URU1QTEFURSYmZS5pbmRleD09PXQmJmUuY3R4PT09bn1mdW5jdGlvbiBGYmUobil7bGV0IHQ9KHIsbyk9Pk5OKCIjIixyLG8pLGU9KHIsbyk9Pk5OKCIqIixyLG8pO3N3aXRjaChuLnR5cGUpe2Nhc2UgcmMuRUxFTUVOVDpyZXR1cm4gbi5jbG9zZWQ/dChuLCEwKSsobi50bXBsP2Uobi50bXBsLCEwKToiIik6bi50bXBsP2Uobi50bXBsKSt0KG4pKyhuLmlzVm9pZD9lKG4udG1wbCwhMCk6IiIpOnQobik7Y2FzZSByYy5URU1QTEFURTpyZXR1cm4gZShuLG4uY2xvc2VkKTtkZWZhdWx0OnJldHVybiBufX12YXIgTmJlPW5ldyBjbGFzc3t2aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCl7cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfXZpc2l0SWN1KHQpe2xldCBlPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9uUGxhY2Vob2xkZXJ9LCAke3QudHlwZX0sICR7ZS5qb2luKCIgIil9fWB9dmlzaXRUYWdQbGFjZWhvbGRlcih0KXtyZXR1cm4gdC5pc1ZvaWQ/dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSk6YCR7dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSl9JHt0LmNoaWxkcmVuLm1hcChlPT5lLnZpc2l0KHRoaXMpKS5qb2luKCIiKX0ke3RoaXMuZm9ybWF0UGgodC5jbG9zZU5hbWUpfWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCxlKXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfWZvcm1hdFBoKHQpe3JldHVybmB7JHtGeCh0LCExKX19YH19O2Z1bmN0aW9uIG9ZKG4pe3JldHVybiBuLnZpc2l0KE5iZSl9dmFyIHRxPXtBOiJMSU5LIixCOiJCT0xEX1RFWFQiLEJSOiJMSU5FX0JSRUFLIixFTToiRU1QSEFTSVNFRF9URVhUIixIMToiSEVBRElOR19MRVZFTDEiLEgyOiJIRUFESU5HX0xFVkVMMiIsSDM6IkhFQURJTkdfTEVWRUwzIixINDoiSEVBRElOR19MRVZFTDQiLEg1OiJIRUFESU5HX0xFVkVMNSIsSDY6IkhFQURJTkdfTEVWRUw2IixIUjoiSE9SSVpPTlRBTF9SVUxFIixJOiJJVEFMSUNfVEVYVCIsTEk6IkxJU1RfSVRFTSIsTElOSzoiTUVESUFfTElOSyIsT0w6Ik9SREVSRURfTElTVCIsUDoiUEFSQUdSQVBIIixROiJRVU9UQVRJT04iLFM6IlNUUklLRVRIUk9VR0hfVEVYVCIsU01BTEw6IlNNQUxMX1RFWFQiLFNVQjoiU1VCU1RSSVBUIixTVVA6IlNVUEVSU0NSSVBUIixUQk9EWToiVEFCTEVfQk9EWSIsVEQ6IlRBQkxFX0NFTEwiLFRGT09UOiJUQUJMRV9GT09URVIiLFRIOiJUQUJMRV9IRUFERVJfQ0VMTCIsVEhFQUQ6IlRBQkxFX0hFQURFUiIsVFI6IlRBQkxFX1JPVyIsVFQ6Ik1PTk9TUEFDRURfVEVYVCIsVToiVU5ERVJMSU5FRF9URVhUIixVTDoiVU5PUkRFUkVEX0xJU1QifSxHTD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50cz17fSx0aGlzLl9zaWduYXR1cmVUb05hbWU9e319Z2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodCxlLGkpe2xldCByPXRoaXMuX2hhc2hUYWcodCxlLGkpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdO2xldCBvPXQudG9VcHBlckNhc2UoKSxzPXRxW29dfHxgVEFHXyR7b31gLGE9dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGk/czpgU1RBUlRfJHtzfWApO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09YSxhfWdldENsb3NlVGFnUGxhY2Vob2xkZXJOYW1lKHQpe2xldCBlPXRoaXMuX2hhc2hDbG9zaW5nVGFnKHQpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdO2xldCBpPXQudG9VcHBlckNhc2UoKSxvPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShgQ0xPU0VfJHt0cVtpXXx8YFRBR18ke2l9YH1gKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdPW8sb31nZXRQbGFjZWhvbGRlck5hbWUodCxlKXtsZXQgaT10LnRvVXBwZXJDYXNlKCkscj1gUEg6ICR7aX09JHtlfWA7aWYodGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdKXJldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl07bGV0IG89dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGkpO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09byxvfWdldFVuaXF1ZVBsYWNlaG9sZGVyKHQpe3JldHVybiB0aGlzLl9nZW5lcmF0ZVVuaXF1ZU5hbWUodC50b1VwcGVyQ2FzZSgpKX1faGFzaFRhZyh0LGUsaSl7cmV0dXJuYDwke3R9YCtPYmplY3Qua2V5cyhlKS5zb3J0KCkubWFwKGE9PmAgJHthfT0ke2VbYV19YCkuam9pbigiIikrKGk/Ii8+IjpgPjwvJHt0fT5gKX1faGFzaENsb3NpbmdUYWcodCl7cmV0dXJuIHRoaXMuX2hhc2hUYWcoYC8ke3R9YCx7fSwhMSl9X2dlbmVyYXRlVW5pcXVlTmFtZSh0KXtpZighdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHNbdF09MSx0O2xldCBpPXRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50c1t0XTtyZXR1cm4gdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzW3RdPWkrMSxgJHt0fV8ke2l9YH19LExiZT1uZXcgQjEobmV3IEwxKTtmdW5jdGlvbiBWYmUobix0KXtyZXR1cm4gdH12YXIgamJlPS9cL1wvW1xzXFNdKmkxOG5bXHNcU10qXChbXHNcU10qcGhbXHNcU10qPVtcc1xTXSooInwnKShbXHNcU10qPylcMVtcc1xTXSpcKS9nLHFMPWNsYXNzIGV4dGVuZHMgTWZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX0sV2JlPShuLHQpPT4obiBpbnN0YW5jZW9mIFRmJiYodCBpbnN0YW5jZW9mIFQwJiZuLmkxOG4gaW5zdGFuY2VvZiBpdSYmKHQucHJldmlvdXNNZXNzYWdlPW4uaTE4biksbi5pMThuPXQpLHQpLEcxPWNsYXNze2NvbnN0cnVjdG9yKHQ9JGMsZT0hMSxpPSExKXt0aGlzLmludGVycG9sYXRpb25Db25maWc9dCx0aGlzLmtlZXBJMThuQXR0cnM9ZSx0aGlzLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ9aSx0aGlzLmhhc0kxOG5NZXRhPSExLHRoaXMuX2Vycm9ycz1bXSx0aGlzLl9jcmVhdGVJMThuTWVzc2FnZT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9leHByZXNzaW9uUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lfXRvSTE4bk1lc3NhZ2UodCxlPSIiLGk9IiIscj0iIixvKXtsZXQgcz17aXNJY3U6MT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIE4wLGljdURlcHRoOjAscGxhY2Vob2xkZXJSZWdpc3RyeTpuZXcgR0wscGxhY2Vob2xkZXJUb0NvbnRlbnQ6e30scGxhY2Vob2xkZXJUb01lc3NhZ2U6e30sdmlzaXROb2RlRm46b3x8VmJlfSxhPWN1KHRoaXMsdCxzKTtyZXR1cm4gbmV3IGl1KGEscy5wbGFjZWhvbGRlclRvQ29udGVudCxzLnBsYWNlaG9sZGVyVG9NZXNzYWdlLGUsaSxyKX12aXNpdEVsZW1lbnQodCxlKXtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sZSkscj17fTt0LmF0dHJzLmZvckVhY2goYz0+e3JbYy5uYW1lXT1jLnZhbHVlfSk7bGV0IG89ZTModC5uYW1lKS5pc1ZvaWQscz1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodC5uYW1lLHIsbyk7ZS5wbGFjZWhvbGRlclRvQ29udGVudFtzXT17dGV4dDp0LnN0YXJ0U291cmNlU3Bhbi50b1N0cmluZygpLHNvdXJjZVNwYW46dC5zdGFydFNvdXJjZVNwYW59O2xldCBhPSIiO298fChhPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRDbG9zZVRhZ1BsYWNlaG9sZGVyTmFtZSh0Lm5hbWUpLGUucGxhY2Vob2xkZXJUb0NvbnRlbnRbYV09e3RleHQ6YDwvJHt0Lm5hbWV9PmAsc291cmNlU3Bhbjp0LmVuZFNvdXJjZVNwYW4/P3Quc291cmNlU3Bhbn0pO2xldCBsPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7dGhpcy50YWc9dCx0aGlzLmF0dHJzPWUsdGhpcy5zdGFydE5hbWU9aSx0aGlzLmNsb3NlTmFtZT1yLHRoaXMuY2hpbGRyZW49byx0aGlzLmlzVm9pZD1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWN9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRhZ1BsYWNlaG9sZGVyKHRoaXMsZSl9fSh0Lm5hbWUscixzLGEsaSxvLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsbCl9dmlzaXRBdHRyaWJ1dGUodCxlKXtsZXQgaT12b2lkIDA9PT10LnZhbHVlVG9rZW5zfHwxPT09dC52YWx1ZVRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC52YWx1ZVNwYW58fHQuc291cmNlU3Bhbik6dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC52YWx1ZVRva2Vucyx0LnZhbHVlU3Bhbnx8dC5zb3VyY2VTcGFuLGUsdC5pMThuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGkpfXZpc2l0VGV4dCh0LGUpe2xldCBpPTE9PT10LnRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC5zb3VyY2VTcGFuKTp0aGlzLl92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LnRva2Vucyx0LnNvdXJjZVNwYW4sZSx0LmkxOG4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsaSl9dmlzaXRDb21tZW50KHQsZSl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb24odCxlKXtlLmljdURlcHRoKys7bGV0IGk9e30scj1uZXcgUzEodC5zd2l0Y2hWYWx1ZSx0LnR5cGUsaSx0LnNvdXJjZVNwYW4pO2lmKHQuY2FzZXMuZm9yRWFjaChhPT57aVthLnZhbHVlXT1uZXcgYmYoYS5leHByZXNzaW9uLm1hcChsPT5sLnZpc2l0KHRoaXMsZSkpLGEuZXhwU291cmNlU3Bhbil9KSxlLmljdURlcHRoLS0sZS5pc0ljdXx8ZS5pY3VEZXB0aD4wKXtsZXQgYT1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0VW5pcXVlUGxhY2Vob2xkZXIoYFZBUl8ke3QudHlwZX1gKTtyZXR1cm4gci5leHByZXNzaW9uUGxhY2Vob2xkZXI9YSxlLnBsYWNlaG9sZGVyVG9Db250ZW50W2FdPXt0ZXh0OnQuc3dpdGNoVmFsdWUsc291cmNlU3Bhbjp0LnN3aXRjaFZhbHVlU291cmNlU3Bhbn0sZS52aXNpdE5vZGVGbih0LHIpfWxldCBvPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRQbGFjZWhvbGRlck5hbWUoIklDVSIsdC5zb3VyY2VTcGFuLnRvU3RyaW5nKCkpO2UucGxhY2Vob2xkZXJUb01lc3NhZ2Vbb109dGhpcy50b0kxOG5NZXNzYWdlKFt0XSwiIiwiIiwiIix2b2lkIDApO2xldCBzPW5ldyBUMChyLG8sdC5zb3VyY2VTcGFuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LHMpfXZpc2l0RXhwYW5zaW9uQ2FzZSh0LGUpe3Rocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGUgY29kZSIpfV92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LGUsaSxyKXtsZXQgbz1bXSxzPSExO2ZvcihsZXQgYSBvZiB0KXN3aXRjaChhLnR5cGUpe2Nhc2UgODpjYXNlIDE3OnM9ITA7bGV0IGw9YS5wYXJ0c1sxXSxjPWwuc3BsaXQoamJlKVsyXXx8IklOVEVSUE9MQVRJT04iLHU9aS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFBsYWNlaG9sZGVyTmFtZShjLGwpO2kucGxhY2Vob2xkZXJUb0NvbnRlbnRbdV09e3RleHQ6YS5wYXJ0cy5qb2luKCIiKSxzb3VyY2VTcGFuOmEuc291cmNlU3Bhbn0sby5wdXNoKG5ldyBFMShsLHUsYS5zb3VyY2VTcGFuKSk7YnJlYWs7ZGVmYXVsdDppZihhLnBhcnRzWzBdLmxlbmd0aD4wKXtsZXQgZD1vW28ubGVuZ3RoLTFdO2QgaW5zdGFuY2VvZiBsMD8oZC52YWx1ZSs9YS5wYXJ0c1swXSxkLnNvdXJjZVNwYW49bmV3IFRvKGQuc291cmNlU3Bhbi5zdGFydCxhLnNvdXJjZVNwYW4uZW5kLGQuc291cmNlU3Bhbi5mdWxsU3RhcnQsZC5zb3VyY2VTcGFuLmRldGFpbHMpKTpvLnB1c2gobmV3IGwwKGEucGFydHNbMF0sYS5zb3VyY2VTcGFuKSl9fXJldHVybiBzPyhmdW5jdGlvbihuLHQpe2lmKHQgaW5zdGFuY2VvZiBpdSYmKGZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZXM7aWYoMSE9PXQubGVuZ3RofHwhKHRbMF1pbnN0YW5jZW9mIGJmKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcHJldmlvdXMgaTE4biBtZXNzYWdlIC0gZXhwZWN0ZWQgaXQgdG8gY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIGBDb250YWluZXJgIG5vZGUuIil9KHQpLHQ9dC5ub2Rlc1swXSksdCBpbnN0YW5jZW9mIGJmKXshZnVuY3Rpb24obix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIG51bWJlciBvZiBpMThuIG1lc3NhZ2UgY2hpbGRyZW4gY2hhbmdlZCBiZXR3ZWVuIGZpcnN0IGFuZCBzZWNvbmQgcGFzcy4iKTtpZihuLnNvbWUoKGUsaSk9PnRbaV0uY29uc3RydWN0b3IhPT1lLmNvbnN0cnVjdG9yKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlcyBvZiB0aGUgaTE4biBtZXNzYWdlIGNoaWxkcmVuIGNoYW5nZWQgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIHBhc3MuIil9KHQuY2hpbGRyZW4sbik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5zb3VyY2VTcGFuPXQuY2hpbGRyZW5bZV0uc291cmNlU3Bhbn19KG8sciksbmV3IGJmKG8sZSkpOm9bMF19fShMYmUsbik7cmV0dXJuKGUsaSxyLG8scyk9PnQudG9JMThuTWVzc2FnZShlLGkscixvLHMpfSh0aGlzLmludGVycG9sYXRpb25Db25maWcpfV9nZW5lcmF0ZUkxOG5NZXNzYWdlKHQsZT0iIixpKXtsZXR7bWVhbmluZzpyLGRlc2NyaXB0aW9uOm8sY3VzdG9tSWQ6c309dGhpcy5fcGFyc2VNZXRhZGF0YShlKSxhPXRoaXMuX2NyZWF0ZUkxOG5NZXNzYWdlKHQscixvLHMsaSk7cmV0dXJuIHRoaXMuX3NldE1lc3NhZ2VJZChhLGUpLHRoaXMuX3NldExlZ2FjeUlkcyhhLGUpLGF9dmlzaXRBbGxXaXRoRXJyb3JzKHQpe2xldCBlPXQubWFwKGk9PmkudmlzaXQodGhpcyxudWxsKSk7cmV0dXJuIG5ldyBVMShlLHRoaXMuX2Vycm9ycyl9dmlzaXRFbGVtZW50KHQpe2xldCBlO2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuLmF0dHJzLnNvbWUodD0+ZnVuY3Rpb24obil7cmV0dXJuImkxOG4iPT09bnx8bi5zdGFydHNXaXRoKGxMKX0odC5uYW1lKSl9KHQpKXt0aGlzLmhhc0kxOG5NZXRhPSEwO2xldCBpPVtdLHI9e307Zm9yKGxldCBvIG9mIHQuYXR0cnMpaWYoImkxOG4iPT09by5uYW1lKWU9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZSh0LmNoaWxkcmVuLHQuaTE4bnx8by52YWx1ZSxXYmUpLDA9PT1lLm5vZGVzLmxlbmd0aCYmKGU9dm9pZCAwKSx0LmkxOG49ZTtlbHNlIGlmKG8ubmFtZS5zdGFydHNXaXRoKGxMKSl7bGV0IHM9by5uYW1lLnNsaWNlKGxMLmxlbmd0aCk7aVkodC5uYW1lLHMpP3RoaXMuX3JlcG9ydEVycm9yKG8sYFRyYW5zbGF0aW5nIGF0dHJpYnV0ZSAnJHtzfScgaXMgZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucy5gKTpyW3NdPW8udmFsdWV9ZWxzZSBpLnB1c2gobyk7aWYoT2JqZWN0LmtleXMocikubGVuZ3RoKWZvcihsZXQgbyBvZiBpKXtsZXQgcz1yW28ubmFtZV07dm9pZCAwIT09cyYmby52YWx1ZSYmKG8uaTE4bj10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFtvXSxvLmkxOG58fHMpKX10aGlzLmtlZXBJMThuQXR0cnN8fCh0LmF0dHJzPWkpfXJldHVybiBjdSh0aGlzLHQuY2hpbGRyZW4sZSksdH12aXNpdEV4cGFuc2lvbih0LGUpe2xldCBpLHI9dC5pMThuO2lmKHRoaXMuaGFzSTE4bk1ldGE9ITAsciBpbnN0YW5jZW9mIFQwKXtsZXQgbz1yLm5hbWU7aT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxyKSxUcShpKS5uYW1lPW8sbnVsbCE9PWUmJihlLnBsYWNlaG9sZGVyVG9NZXNzYWdlW29dPWkpfWVsc2UgaT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxlfHxyKTtyZXR1cm4gdC5pMThuPWksdH12aXNpdFRleHQodCl7cmV0dXJuIHR9dmlzaXRBdHRyaWJ1dGUodCl7cmV0dXJuIHR9dmlzaXRDb21tZW50KHQpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gdH1fcGFyc2VNZXRhZGF0YSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24obj0iIil7bGV0IHQsZSxpO2lmKG49bi50cmltKCkpe2xldCBzLHI9bi5pbmRleE9mKCJAQCIpLG89bi5pbmRleE9mKCJ8Iik7W3MsdF09cj4tMT9bbi5zbGljZSgwLHIpLG4uc2xpY2UocisyKV06W24sIiJdLFtlLGldPW8+LTE/W3Muc2xpY2UoMCxvKSxzLnNsaWNlKG8rMSldOlsiIixzXX1yZXR1cm57Y3VzdG9tSWQ6dCxtZWFuaW5nOmUsZGVzY3JpcHRpb246aX19KHQpOnQgaW5zdGFuY2VvZiBpdT90Ont9fV9zZXRNZXNzYWdlSWQodCxlKXt2YXIgbjt0LmlkfHwodC5pZD1lIGluc3RhbmNlb2YgaXUmJmUuaWR8fChuPXQpLmlkfHxfcShuKSl9X3NldExlZ2FjeUlkcyh0LGUpe2lmKHRoaXMuZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdCl0LmxlZ2FjeUlkcz1bbV9lKHQpLF9xKHQpXTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZSl7bGV0IGk9ZSBpbnN0YW5jZW9mIGl1P2U6ZSBpbnN0YW5jZW9mIFQwP2UucHJldmlvdXNNZXNzYWdlOnZvaWQgMDt0LmxlZ2FjeUlkcz1pP2kubGVnYWN5SWRzOltdfX1fcmVwb3J0RXJyb3IodCxlKXt0aGlzLl9lcnJvcnMucHVzaChuZXcgcUwodC5zb3VyY2VTcGFuLGUpKX19O2Z1bmN0aW9uIFpiZShuLHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5ub2Rlcy5tYXAodD0+dC52aXNpdChKYmUsbnVsbCkpLmpvaW4oIiIpfSh0KSxvPVtudChyKV07T2JqZWN0LmtleXMoaSkubGVuZ3RoJiYoby5wdXNoKHoxKHMzKGksITApLCEwKSksby5wdXNoKHoxKHtvcmlnaW5hbF9jb2RlOm1sKE9iamVjdC5rZXlzKGkpLm1hcChsPT4oe2tleTpGeChsKSxxdW90ZWQ6ITAsdmFsdWU6bnQodC5wbGFjZWhvbGRlcnNbbF0/dC5wbGFjZWhvbGRlcnNbbF0uc291cmNlU3Bhbi50b1N0cmluZygpOnQucGxhY2Vob2xkZXJUb01lc3NhZ2VbbF0ubm9kZXMubWFwKGM9PmMuc291cmNlU3Bhbi50b1N0cmluZygpKS5qb2luKCIiKSl9KSkpfSkpKTtsZXQgcz1lLnNldChNaSgiZ29vZy5nZXRNc2ciKS5jYWxsRm4obykpLnRvQ29uc3REZWNsKCk7cmV0dXJuIHMuYWRkTGVhZGluZ0NvbW1lbnQoZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIHQucHVzaChuLmRlc2NyaXB0aW9uP3t0YWdOYW1lOiJkZXNjIix0ZXh0Om4uZGVzY3JpcHRpb259Ont0YWdOYW1lOiJzdXBwcmVzcyIsdGV4dDoie21zZ0Rlc2NyaXB0aW9uc30ifSksbi5tZWFuaW5nJiZ0LnB1c2goe3RhZ05hbWU6Im1lYW5pbmciLHRleHQ6bi5tZWFuaW5nfSksZnVuY3Rpb24obj1bXSl7cmV0dXJuIG5ldyBiMShuKX0odCl9KHQpKSxbcyxuZXcgbHUobi5zZXQoZSkpXX12YXIgSmJlPW5ldyBjbGFzc3tmb3JtYXRQaCh0KXtyZXR1cm5geyQke0Z4KHQpfX1gfXZpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7cmV0dXJuIG9ZKHQpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7cmV0dXJuIHQuaXNWb2lkP3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpOmAke3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpfSR7dC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9JHt0aGlzLmZvcm1hdFBoKHQuY2xvc2VOYW1lKX1gfXZpc2l0UGxhY2Vob2xkZXIodCl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX19O2Z1bmN0aW9uIGV4ZShuLHQsZSl7bGV0e21lc3NhZ2VQYXJ0czppLHBsYWNlSG9sZGVyczpyfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucGxhY2Vob2xkZXJUb01lc3NhZ2U9dCx0aGlzLnBpZWNlcz1lfXZpc2l0VGV4dCh0KXtpZih0aGlzLnBpZWNlc1t0aGlzLnBpZWNlcy5sZW5ndGgtMV1pbnN0YW5jZW9mIGhmKXRoaXMucGllY2VzW3RoaXMucGllY2VzLmxlbmd0aC0xXS50ZXh0Kz10LnZhbHVlO2Vsc2V7bGV0IGU9bmV3IFRvKHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5kZXRhaWxzKTt0aGlzLnBpZWNlcy5wdXNoKG5ldyBoZih0LnZhbHVlLGUpKX19dmlzaXRDb250YWluZXIodCl7dC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpfXZpc2l0SWN1KHQpe3RoaXMucGllY2VzLnB1c2gobmV3IGhmKG9ZKHQpLHQuc291cmNlU3BhbikpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5zdGFydE5hbWUsdC5zdGFydFNvdXJjZVNwYW4/P3Quc291cmNlU3BhbikpLHQuaXNWb2lkfHwodC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpLHRoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQuY2xvc2VOYW1lLHQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSkpfXZpc2l0UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3BhbikpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3Bhbix0aGlzLnBsYWNlaG9sZGVyVG9NZXNzYWdlW3QubmFtZV0pKX1jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQsZSxpKXtyZXR1cm4gbmV3IGgwKEZ4KHQsITEpLGUsaSl9fShuLnBsYWNlaG9sZGVyVG9NZXNzYWdlLHQpO3JldHVybiBuLm5vZGVzLmZvckVhY2goaT0+aS52aXNpdChlKSksZnVuY3Rpb24obil7bGV0IHQ9W10sZT1bXTtuWzBdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bMF0uc291cmNlU3Bhbi5zdGFydCkpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO3IgaW5zdGFuY2VvZiBoZj90LnB1c2gocik6KGUucHVzaChyKSxuW2ktMV1pbnN0YW5jZW9mIGgwJiZ0LnB1c2goTE4obltpLTFdLnNvdXJjZVNwYW4uZW5kKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bbi5sZW5ndGgtMV0uc291cmNlU3Bhbi5lbmQpKSx7bWVzc2FnZVBhcnRzOnQscGxhY2VIb2xkZXJzOmV9fSh0KX0odCksbz1mdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVzWzBdO3JldHVybiBuZXcgVG8odC5zb3VyY2VTcGFuLmZ1bGxTdGFydCxuLm5vZGVzW24ubm9kZXMubGVuZ3RoLTFdLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmRldGFpbHMpfSh0KSxzPXIubWFwKGM9PmVbYy50ZXh0XSksYT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuZXcgWE4obix0LGUsaSxyKX0odCxpLHIscyxvKSxsPW4uc2V0KGEpO3JldHVybltuZXcgbHUobCldfWZ1bmN0aW9uIExOKG4pe3JldHVybiBuZXcgaGYoIiIsbmV3IFRvKG4sbikpfXZhciBzWT1uZXcgU2V0KFsiJGV2ZW50Il0pLEJOPW5ldyBNYXAoW1sid2luZG93IixLLnJlc29sdmVXaW5kb3ddLFsiZG9jdW1lbnQiLEsucmVzb2x2ZURvY3VtZW50XSxbImJvZHkiLEsucmVzb2x2ZUJvZHldXSksc3hlPVsiICIsIlxuIiwiXHIiLCJcdCJdO2Z1bmN0aW9uIHhwKG4sdCl7cmV0dXJuIHIzKE1pKE54KS5iaXR3aXNlQW5kKG50KG4pLG51bGwsITEpLHQpfWZ1bmN0aW9uIGFZKG4sdD1udWxsLGU9bnVsbCl7bGV0e3R5cGU6aSxuYW1lOnIsdGFyZ2V0Om8scGhhc2U6cyxoYW5kbGVyOmF9PW47aWYobyYmIUJOLmhhcyhvKSl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZ2xvYmFsIHRhcmdldCAnJHtvfScgZGVmaW5lZCBmb3IgJyR7cn0nIGV2ZW50LlxuICAgICAgICBTdXBwb3J0ZWQgbGlzdCBvZiBnbG9iYWwgdGFyZ2V0czogJHtBcnJheS5mcm9tKEJOLmtleXMoKSl9LmApO2xldCBsPSIkZXZlbnQiLGM9bmV3IFNldCx1PW51bGw9PT1lfHwwPT09ZS5iaW5kaW5nTGV2ZWw/TWkoYWMpOmUuZ2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKDApLGQ9JHZlKGUsdSxhLCJiIixuLmhhbmRsZXJTcGFuLGMsc1kpLHA9W10saD1lPy52YXJpYWJsZURlY2xhcmF0aW9ucygpLGY9ZT8ucmVzdG9yZVZpZXdTdGF0ZW1lbnQoKTtpZihoJiZwLnB1c2goLi4uaCkscC5wdXNoKC4uLmQpLGYpe3AudW5zaGlmdChmKTtsZXQgQT1wW3AubGVuZ3RoLTFdO0EgaW5zdGFuY2VvZiB1bz9wW3AubGVuZ3RoLTFdPW5ldyB1byh4ZihBLnZhbHVlLnNvdXJjZVNwYW4sSy5yZXNldFZpZXcsW0EudmFsdWVdKSk6cC5wdXNoKG5ldyBsdSh4ZihudWxsLEsucmVzZXRWaWV3LFtdKSkpfWxldCBtPTE9PT1pP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYEAke259LiR7dH1gfShyLHMpOnIsQz10JiZtMCh0KSxfPVtdO2MuaGFzKGwpJiZfLnB1c2gobmV3IFJzKGwsVjApKTtsZXQgeT1PcyhfLHAsaWEsbnVsbCxDKSxJPVtudChtKSx5XTtyZXR1cm4gbyYmSS5wdXNoKG50KCExKSx4bihCTi5nZXQobykpKSxJfXZhciBPeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHIsbyxzLGEsbCxjLHUsZD1mdW5jdGlvbigpe3JldHVybntwcmVwYXJlU3RhdGVtZW50czpbXSxjb25zdEV4cHJlc3Npb25zOltdLGkxOG5WYXJSZWZzQ2FjaGU6bmV3IE1hcH19KCkpe3RoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5sZXZlbD1pLHRoaXMuY29udGV4dE5hbWU9cix0aGlzLmkxOG5Db250ZXh0PW8sdGhpcy50ZW1wbGF0ZUluZGV4PXMsdGhpcy50ZW1wbGF0ZU5hbWU9YSx0aGlzLl9uYW1lc3BhY2U9bCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcz11LHRoaXMuX2NvbnN0YW50cz1kLHRoaXMuX2RhdGFJbmRleD0wLHRoaXMuX2JpbmRpbmdDb250ZXh0PTAsdGhpcy5fcHJlZml4Q29kZT1bXSx0aGlzLl9jcmVhdGlvbkNvZGVGbnM9W10sdGhpcy5fdXBkYXRlQ29kZUZucz1bXSx0aGlzLl9jdXJyZW50SW5kZXg9MCx0aGlzLl90ZW1wVmFyaWFibGVzPVtdLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zPVtdLHRoaXMuaTE4bj1udWxsLHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzPTAsdGhpcy5fYmluZGluZ1Nsb3RzPTAsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cz1bXSx0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9MCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj1udWxsLHRoaXMudmlzaXRSZWZlcmVuY2U9SGIsdGhpcy52aXNpdFZhcmlhYmxlPUhiLHRoaXMudmlzaXRUZXh0QXR0cmlidXRlPUhiLHRoaXMudmlzaXRCb3VuZEF0dHJpYnV0ZT1IYix0aGlzLnZpc2l0Qm91bmRFdmVudD1IYix0aGlzLl9iaW5kaW5nU2NvcGU9ZS5uZXN0ZWRTY29wZShpKSx0aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXg9Yy5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpKyJfIix0aGlzLl92YWx1ZUNvbnZlcnRlcj1uZXcgVzEodCwoKT0+dGhpcy5hbGxvY2F0ZURhdGFTbG90KCkscD0+dGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzKHApLChwLGgsZixtKT0+e3RoaXMuX2JpbmRpbmdTY29wZS5zZXQodGhpcy5sZXZlbCxoLG0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLEsucGlwZSxbbnQoZiksbnQocCldKX0pfWJ1aWxkVGVtcGxhdGVGdW5jdGlvbih0LGUsaT0wLHIpe3RoaXMuX25nQ29udGVudFNlbGVjdG9yc09mZnNldD1pLHRoaXMuX25hbWVzcGFjZSE9PUsubmFtZXNwYWNlSFRNTCYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKG51bGwsdGhpcy5fbmFtZXNwYWNlKSxlLmZvckVhY2goaD0+dGhpcy5yZWdpc3RlckNvbnRleHRWYXJpYWJsZXMoaCkpO2xldCBvPXRoaXMuaTE4bkNvbnRleHR8fHB4KHIpJiYhaTEocikmJiEoMT09PShuPXQpLmxlbmd0aCYmblswXWluc3RhbmNlb2YgRTAmJnRbMF0uaTE4bj09PXIpLHM9Vk4odCk7dmFyIG47aWYobyYmdGhpcy5pMThuU3RhcnQobnVsbCxyLHMpLGQ5KHRoaXMsdCksdGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHMrPXRoaXMuX2JpbmRpbmdTbG90cyx0aGlzLl92YWx1ZUNvbnZlcnRlci51cGRhdGVQaXBlU2xvdE9mZnNldHModGhpcy5fYmluZGluZ1Nsb3RzKSx0aGlzLl9uZXN0ZWRUZW1wbGF0ZUZucy5mb3JFYWNoKGg9PmgoKSksMD09PXRoaXMubGV2ZWwmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoKXtsZXQgaD1bXTtpZih0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD4xfHwiKiIhPT10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzWzBdKXtsZXQgZj10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLm1hcChtPT4iKiIhPT1tP3QzKG0pOm0pO2gucHVzaCh0aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUoZiksITApKX10aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24obnVsbCxLLnByb2plY3Rpb25EZWYsaCwhMCl9byYmdGhpcy5pMThuRW5kKG51bGwscyk7bGV0IGE9VDEodGhpcy5fY3JlYXRpb25Db2RlRm5zKSxsPVQxKHRoaXMuX3VwZGF0ZUNvZGVGbnMpLGM9dGhpcy5fYmluZGluZ1Njb3BlLnZpZXdTbmFwc2hvdFN0YXRlbWVudHMoKSx1PXRoaXMuX2JpbmRpbmdTY29wZS52YXJpYWJsZURlY2xhcmF0aW9ucygpLmNvbmNhdCh0aGlzLl90ZW1wVmFyaWFibGVzKSxkPWEubGVuZ3RoPjA/W3hwKDEsYy5jb25jYXQoYSkpXTpbXSxwPWwubGVuZ3RoPjA/W3hwKDIsdS5jb25jYXQobCkpXTpbXTtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbLi4udGhpcy5fcHJlZml4Q29kZSwuLi5kLC4uLnBdLGlhLG51bGwsdGhpcy50ZW1wbGF0ZU5hbWUpfWdldExvY2FsKHQpe3JldHVybiB0aGlzLl9iaW5kaW5nU2NvcGUuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXt0aGlzLl9iaW5kaW5nU2NvcGUubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLl9iaW5kaW5nU2NvcGUubWF5YmVSZXN0b3JlVmlldygpfWkxOG5UcmFuc2xhdGUodCxlPXt9LGkscil7bGV0IG89aXx8dGhpcy5pMThuR2VuZXJhdGVNYWluQmxvY2tWYXIoKSxhPWZ1bmN0aW9uKG4sdCxlLGk9e30scil7bGV0IG89W2d2ZSh0KSxyMyhpMyhNaShvcSkpLm5vdElkZW50aWNhbChudCgidW5kZWZpbmVkIix5cSkpLmFuZChNaShvcSkpLFpiZSh0LG4sZSxpKSxleGUodCxuLHMzKGksITEpKSldO3JldHVybiByJiZvLnB1c2gobmV3IGx1KHQuc2V0KHIodCkpKSksb30odCxvLHRoaXMuaTE4bkdlbmVyYXRlQ2xvc3VyZVZhcih0LmlkKSxlLHIpO3JldHVybiB0aGlzLl9jb25zdGFudHMucHJlcGFyZVN0YXRlbWVudHMucHVzaCguLi5hKSxvfXJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyh0KXtsZXQgZT10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCksaT10aGlzLmxldmVsLHI9TWkodC5uYW1lK2UpO3RoaXMuX2JpbmRpbmdTY29wZS5zZXQoaSx0Lm5hbWUsciwxLChvLHMpPT57bGV0IGE7cmV0dXJuIG8uYmluZGluZ0xldmVsPT09aT9vLmlzTGlzdGVuZXJTY29wZSgpJiZvLmhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKT8oYT1NaShBcSksby5ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCkpOmE9TWkoYWMpOmE9by5nZXRTaGFyZWRDb250ZXh0TmFtZShpKXx8UUwocyksW3Iuc2V0KGEucHJvcCh0LnZhbHVlfHwiJGltcGxpY2l0IikpLnRvQ29uc3REZWNsKCldfSl9aTE4bkFwcGVuZEJpbmRpbmdzKHQpe3QubGVuZ3RoPjAmJnQuZm9yRWFjaChlPT50aGlzLmkxOG4uYXBwZW5kQmluZGluZyhlKSl9aTE4bkJpbmRQcm9wcyh0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dFtpXTtpZihyIGluc3RhbmNlb2YgdzApZVtpXT1udChyLnZhbHVlKTtlbHNle2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMobyksbyBpbnN0YW5jZW9mIFpvKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmF9PW8se2lkOmwsYmluZGluZ3M6Y309dGhpcy5pMThuLHU9ZnVuY3Rpb24obix0PTAsZT0wKXtpZighbi5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9IiIscj1uLmxlbmd0aC0xO2ZvcihsZXQgbz0wO288cjtvKyspaSs9YCR7bltvXX0ke1ExKHQrbyxlKX1gO3JldHVybiBpKz1uW3JdLGl9KHMsYy5zaXplLGwpO3RoaXMuaTE4bkFwcGVuZEJpbmRpbmdzKGEpLGVbaV09bnQodSl9fX0pLGV9aTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCl7cmV0dXJuIE1pKHRoaXMuY29uc3RhbnRQb29sLnVuaXF1ZU5hbWUoImkxOG5fIikpfWkxOG5HZW5lcmF0ZUNsb3N1cmVWYXIodCl7bGV0IGUsaT10aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXgudG9VcHBlckNhc2UoKTtpZih0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyl7bGV0IHI9ZjkoIkVYVEVSTkFMXyIpLG89dGhpcy5jb25zdGFudFBvb2wudW5pcXVlTmFtZShpKTtlPWAke3J9JHttMCh0KX0kJCR7b31gfWVsc2V7bGV0IHI9ZjkoaSk7ZT10aGlzLmNvbnN0YW50UG9vbC51bmlxdWVOYW1lKHIpfXJldHVybiBNaShlKX1pMThuVXBkYXRlUmVmKHQpe2xldHtpY3VzOmUsbWV0YTppLGlzUm9vdDpyLGlzUmVzb2x2ZWQ6byxpc0VtaXR0ZWQ6c309dDtpZihyJiZvJiYhcyYmIWkxKGkpKXt0LmlzRW1pdHRlZD0hMDtsZXQgZCxhPXQuZ2V0U2VyaWFsaXplZFBsYWNlaG9sZGVycygpLGw9e30sYz1hLnNpemU/aDkoYSk6e307ZS5zaXplJiZlLmZvckVhY2goKHAsaCk9PntpZigxPT09cC5sZW5ndGgpY1toXT1wWzBdO2Vsc2V7bGV0IGY9UTEoYEkxOE5fRVhQXyR7aH1gKTtjW2hdPW50KGYpLGxbaF09Y3IocCl9fSksKEFycmF5LmZyb20oYS52YWx1ZXMoKSkuc29tZShwPT5wLmxlbmd0aD4xKXx8T2JqZWN0LmtleXMobCkubGVuZ3RoKSYmKGQ9cD0+e2xldCBoPVtwXTtyZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiZoLnB1c2goejEobCwhMCkpLHhmKG51bGwsSy5pMThuUG9zdHByb2Nlc3MsaCl9KSx0aGlzLmkxOG5UcmFuc2xhdGUoaSxjLHQucmVmLGQpfX1pMThuU3RhcnQodD1udWxsLGUsaSl7bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCk7dGhpcy5pMThuPXRoaXMuaTE4bkNvbnRleHQ/dGhpcy5pMThuQ29udGV4dC5mb3JrQ2hpbGRDb250ZXh0KHIsdGhpcy50ZW1wbGF0ZUluZGV4LGUpOm5ldyBSeChyLHRoaXMuaTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCksMCx0aGlzLnRlbXBsYXRlSW5kZXgsZSk7bGV0e2lkOm8scmVmOnN9PXRoaXMuaTE4bixhPVtudChyKSx0aGlzLmFkZFRvQ29uc3RzKHMpXTtvPjAmJmEucHVzaChudChvKSksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsaT9LLmkxOG46Sy5pMThuU3RhcnQsYSl9aTE4bkVuZCh0PW51bGwsZSl7aWYoIXRoaXMuaTE4bil0aHJvdyBuZXcgRXJyb3IoImkxOG5FbmQgaXMgZXhlY3V0ZWQgd2l0aCBubyBpMThuIGNvbnRleHQgcHJlc2VudCIpO3RoaXMuaTE4bkNvbnRleHQ/KHRoaXMuaTE4bkNvbnRleHQucmVjb25jaWxlQ2hpbGRDb250ZXh0KHRoaXMuaTE4biksdGhpcy5pMThuVXBkYXRlUmVmKHRoaXMuaTE4bkNvbnRleHQpKTp0aGlzLmkxOG5VcGRhdGVSZWYodGhpcy5pMThuKTtsZXR7aW5kZXg6aSxiaW5kaW5nczpyfT10aGlzLmkxOG47aWYoci5zaXplKXtmb3IobGV0IG8gb2Ygcil0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UodGhpcy5nZXRDb25zdENvdW50KCktMSx0LEsuaTE4bkV4cCwoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKG8pKTt0aGlzLnVwZGF0ZUluc3RydWN0aW9uKHQsSy5pMThuQXBwbHksW250KGkpXSl9ZXx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsSy5pMThuRW5kKSx0aGlzLmkxOG49bnVsbH1pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKHQsZSxpKXtsZXQgcj0hMSxvPVtdO2lmKGUuZm9yRWFjaChzPT57bGV0IGE9cy5pMThuLGw9cy52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhsKSxsIGluc3RhbmNlb2YgWm8pe2xldCB1PWg5KERxKGEpKTtvLnB1c2gobnQocy5uYW1lKSx0aGlzLmkxOG5UcmFuc2xhdGUoYSx1KSksbC5leHByZXNzaW9ucy5mb3JFYWNoKGQ9PntyPSEwLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGksSy5pMThuRXhwLCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcoZCkpfSl9fSksby5sZW5ndGg+MCl7bGV0IHM9bnQodGhpcy5hbGxvY2F0ZURhdGFTbG90KCkpLGE9dGhpcy5hZGRUb0NvbnN0cyhjcihvKSk7dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGksSy5pMThuQXR0cmlidXRlcyxbcyxhXSksciYmdGhpcy51cGRhdGVJbnN0cnVjdGlvbihpLEsuaTE4bkFwcGx5LFtzXSl9fWdldE5hbWVzcGFjZUluc3RydWN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIm1hdGgiOnJldHVybiBLLm5hbWVzcGFjZU1hdGhNTDtjYXNlInN2ZyI6cmV0dXJuIEsubmFtZXNwYWNlU1ZHO2RlZmF1bHQ6cmV0dXJuIEsubmFtZXNwYWNlSFRNTH19YWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24odCxlKXt0aGlzLl9uYW1lc3BhY2U9dCx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZS5zdGFydFNvdXJjZVNwYW4sdCl9aW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkscixvLHMpe3RoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHIuc291cmNlU3Bhbix0LCgpPT5bbnQoaSksLi4udGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhvKSwuLi5zXSl9dmlzaXRDb250ZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9dGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0K3RoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoLHI9W250KGUpXTt0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2godC5zZWxlY3Rvcik7bGV0IG89dC5hdHRyaWJ1dGVzLmZpbHRlcihhPT4ic2VsZWN0IiE9PWEubmFtZS50b0xvd2VyQ2FzZSgpKSxzPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLG8sW10sW10pO3MubGVuZ3RoPjA/ci5wdXNoKG50KGkpLGNyKHMpKTowIT09aSYmci5wdXNoKG50KGkpKSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsucHJvamVjdGlvbixyKSx0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRQcm9qZWN0aW9uKHQuaTE4bixlKX12aXNpdEVsZW1lbnQodCl7bGV0IGU9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksaT1uZXcgTjEobnVsbCkscj0hMSxvPXB4KHQuaTE4bikmJiFpMSh0LmkxOG4pLHM9W10sW2EsbF09Y2QodC5uYW1lKSxjPVVOKHQubmFtZSk7Zm9yKGxldCBmZSBvZiB0LmF0dHJpYnV0ZXMpe2xldHtuYW1lOnZlLHZhbHVlOlR9PWZlOyJuZ05vbkJpbmRhYmxlIj09PXZlP3I9ITA6InN0eWxlIj09PXZlP2kucmVnaXN0ZXJTdHlsZUF0dHIoVCk6ImNsYXNzIj09PXZlP2kucmVnaXN0ZXJDbGFzc0F0dHIoVCk6cy5wdXNoKGZlKX1sZXQgdT1bbnQoZSldO2N8fHUucHVzaChudChsKSk7bGV0IGQ9W10scD1bXTt0LmlucHV0cy5mb3JFYWNoKGZlPT57aS5yZWdpc3RlckJvdW5kSW5wdXQoZmUpfHwoMD09PWZlLnR5cGUmJmZlLmkxOG4/cC5wdXNoKGZlKTpkLnB1c2goZmUpKX0pO2xldCBoPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLHMsZCx0Lm91dHB1dHMsaSxbXSxwKTt1LnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGgpKTtsZXQgZj10aGlzLnByZXBhcmVSZWZzQXJyYXkodC5yZWZlcmVuY2VzKTt1LnB1c2godGhpcy5hZGRUb0NvbnN0cyhmKSk7bGV0IG09dGhpcy5fbmFtZXNwYWNlLEM9dGhpcy5nZXROYW1lc3BhY2VJbnN0cnVjdGlvbihhKTtDIT09bSYmdGhpcy5hZGROYW1lc3BhY2VJbnN0cnVjdGlvbihDLHQpLHRoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZEVsZW1lbnQodC5pMThuLGUpO2xldCBfPSFvJiZ0aGlzLmkxOG4/IVZOKHQuY2hpbGRyZW4pOnQuY2hpbGRyZW4ubGVuZ3RoPjAseT0haS5oYXNCaW5kaW5nc1dpdGhQaXBlcyYmMD09PXQub3V0cHV0cy5sZW5ndGgmJjA9PT1wLmxlbmd0aCYmIV8sST0heSYmVk4odC5jaGlsZHJlbik7aWYoeSl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLGM/Sy5lbGVtZW50Q29udGFpbmVyOksuZWxlbWVudCxTTih1KSk7ZWxzZXtpZih0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sYz9LLmVsZW1lbnRDb250YWluZXJTdGFydDpLLmVsZW1lbnRTdGFydCxTTih1KSksciYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc3RhcnRTb3VyY2VTcGFuLEsuZGlzYWJsZUJpbmRpbmdzKSxwLmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oZSxwLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLHQub3V0cHV0cy5sZW5ndGg+MClmb3IobGV0IGZlIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKHQubmFtZSxmZSxlKSk7byYmdGhpcy5pMThuU3RhcnQodC5zdGFydFNvdXJjZVNwYW4sdC5pMThuLEkpfWxldCBBPWkuYnVpbGRVcGRhdGVMZXZlbEluc3RydWN0aW9ucyh0aGlzLl92YWx1ZUNvbnZlcnRlciksTz1BLmxlbmd0aC0xO2ZvcihsZXQgZmU9MDtmZTw9TztmZSsrKXRoaXMuX2JpbmRpbmdTbG90cys9dGhpcy5wcm9jZXNzU3R5bGluZ1VwZGF0ZUluc3RydWN0aW9uKGUsQVtmZV0pO2xldCBlZT1udCh2b2lkIDApLFg9W10seGU9W107ZC5mb3JFYWNoKGZlPT57bGV0IHZlPWZlLnR5cGU7aWYoND09PXZlKXtsZXQgVD1mZS52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlciksbmU9IShUIGluc3RhbmNlb2YgSXMmJiFULnZhbHVlKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLFgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9Pm5lP3RoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKTplZSxNcShmZS5uYW1lKSl9KX1lbHNle2lmKGZlLmkxOG4pcmV0dXJuO2xldCBUPWZlLnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTtpZih2b2lkIDAhPT1UKXtsZXQgbmU9W10sW2xlLGhlXT1jZChmZS5uYW1lKSxKPWNZKGZlLnNlY3VyaXR5Q29udGV4dCwxPT09dmUpO2lmKEomJm5lLnB1c2goSiksbGUpe2xldCBhZT1udChsZSk7Sj9uZS5wdXNoKGFlKTpuZS5wdXNoKG50KG51bGwpLGFlKX1pZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLDA9PT12ZSlUIGluc3RhbmNlb2YgWm8/dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShUKSxlLGhlLGZlLFQsbmUpOlgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSxoZSxuZSl9KTtlbHNlIGlmKDE9PT12ZSlpZihUIGluc3RhbmNlb2YgWm8mJkFmKFQpPjEpdGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihmdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmF0dHJpYnV0ZUludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuYXR0cmlidXRlSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVZ9fShUKSxlLGhlLGZlLFQsbmUpO2Vsc2V7bGV0IGFlPVQgaW5zdGFuY2VvZiBabz9ULmV4cHJlc3Npb25zWzBdOlQ7eGUucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhhZSksaGUsbmUpfSl9ZWxzZSB0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSxmZS5zb3VyY2VTcGFuLEsuY2xhc3NQcm9wLCgpPT5bbnQoZSksbnQoaGUpLHRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSwuLi5uZV0pfX19KTtmb3IobGV0IGZlIG9mIFgpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLnByb3BlcnR5LGZlLnBhcmFtc09yRm4pO2ZvcihsZXQgZmUgb2YgeGUpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLmF0dHJpYnV0ZSxmZS5wYXJhbXNPckZuKTtpZihkOSh0aGlzLHQuY2hpbGRyZW4pLCFvJiZ0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlLCEwKSwheSl7bGV0IGZlPXQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuO28mJnRoaXMuaTE4bkVuZChmZSxJKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUsSy5lbmFibGVCaW5kaW5ncyksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGZlLGM/Sy5lbGVtZW50Q29udGFpbmVyRW5kOksuZWxlbWVudEVuZCl9fXZpc2l0VGVtcGxhdGUodCl7bGV0IGU9Im5nLXRlbXBsYXRlIixpPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZFRlbXBsYXRlKHQuaTE4bixpKTtsZXQgcj10LnRhZ05hbWU/Y2QodC50YWdOYW1lKVsxXTp0LnRhZ05hbWUsbz1gJHt0aGlzLmNvbnRleHROYW1lfSR7dC50YWdOYW1lPyJfIittMCh0LnRhZ05hbWUpOiIifV8ke2l9YCxzPWAke299X1RlbXBsYXRlYCxhPVtudChpKSxNaShzKSxudChyKV0sbD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKGUsdC5hdHRyaWJ1dGVzLHQuaW5wdXRzLHQub3V0cHV0cyx2b2lkIDAsdC50ZW1wbGF0ZUF0dHJzKTtpZihhLnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGwpKSx0LnJlZmVyZW5jZXMmJnQucmVmZXJlbmNlcy5sZW5ndGgpe2xldCB1PXRoaXMucHJlcGFyZVJlZnNBcnJheSh0LnJlZmVyZW5jZXMpO2EucHVzaCh0aGlzLmFkZFRvQ29uc3RzKHUpKSxhLnB1c2goeG4oSy50ZW1wbGF0ZVJlZkV4dHJhY3RvcikpfWxldCBjPW5ldyBPeCh0aGlzLmNvbnN0YW50UG9vbCx0aGlzLl9iaW5kaW5nU2NvcGUsdGhpcy5sZXZlbCsxLG8sdGhpcy5pMThuLGkscyx0aGlzLl9uYW1lc3BhY2UsdGhpcy5maWxlQmFzZWRJMThuU3VmZml4LHRoaXMuaTE4blVzZUV4dGVybmFsSWRzLHRoaXMuX2NvbnN0YW50cyk7aWYodGhpcy5fbmVzdGVkVGVtcGxhdGVGbnMucHVzaCgoKT0+e2xldCB1PWMuYnVpbGRUZW1wbGF0ZUZ1bmN0aW9uKHQuY2hpbGRyZW4sdC52YXJpYWJsZXMsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgrdGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0LHQuaTE4bik7dGhpcy5jb25zdGFudFBvb2wuc3RhdGVtZW50cy5wdXNoKHUudG9EZWNsU3RtdChzKSksYy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMucHVzaCguLi5jLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzKX0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih0LnNvdXJjZVNwYW4sSy50ZW1wbGF0ZUNyZWF0ZSwoKT0+KGEuc3BsaWNlKDIsMCxudChjLmdldENvbnN0Q291bnQoKSksbnQoYy5nZXRWYXJDb3VudCgpKSksU04oYSkpKSx0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLHQudGVtcGxhdGVBdHRycykscj09PWUpe2xldFt1LGRdPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXTtmb3IobGV0IHIgb2YgbikodChyKT9lOmkpLnB1c2gocik7cmV0dXJuW2UsaV19KHQuaW5wdXRzLHB2ZSk7dS5sZW5ndGg+MCYmdGhpcy5pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKGksdSx0LnN0YXJ0U291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSxkLmxlbmd0aD4wJiZ0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLGQpO2ZvcihsZXQgcCBvZiB0Lm91dHB1dHMpdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHAuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKCJuZ190ZW1wbGF0ZSIscCxpKSl9fXZpc2l0Qm91bmRUZXh0KHQpe2lmKHRoaXMuaTE4bil7bGV0IHI9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7cmV0dXJuIHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMociksdm9pZChyIGluc3RhbmNlb2YgWm8mJih0aGlzLmkxOG4uYXBwZW5kQm91bmRUZXh0KHQuaTE4biksdGhpcy5pMThuQXBwZW5kQmluZGluZ3Moci5leHByZXNzaW9ucykpKX1sZXQgZT10aGlzLmFsbG9jYXRlRGF0YVNsb3QoKTt0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsudGV4dCxbbnQoZSldKTtsZXQgaT10LnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKGkpLGkgaW5zdGFuY2VvZiBabz90aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSx0LnNvdXJjZVNwYW4sZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlO2Nhc2UgMzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsudGV4dEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZVZ9fShpKSwoKT0+dGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhpKSk6aDEoIlRleHQgbm9kZXMgc2hvdWxkIGJlIGludGVycG9sYXRlZCBhbmQgbmV2ZXIgYm91bmQgZGlyZWN0bHkuIil9dmlzaXRUZXh0KHQpe3RoaXMuaTE4bnx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc291cmNlU3BhbixLLnRleHQsW250KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxudCh0LnZhbHVlKV0pfXZpc2l0SWN1KHQpe2xldCBlPSExO3RoaXMuaTE4bnx8KGU9ITAsdGhpcy5pMThuU3RhcnQobnVsbCx0LmkxOG4sITApKTtsZXQgaT10aGlzLmkxOG4scj10aGlzLmkxOG5CaW5kUHJvcHModC52YXJzKSxvPXRoaXMuaTE4bkJpbmRQcm9wcyh0LnBsYWNlaG9sZGVycykscz10LmkxOG4sYT1sPT57bGV0IHU9czMoey4uLnIsLi4ub30sITEpO3JldHVybiB4ZihudWxsLEsuaTE4blBvc3Rwcm9jZXNzLFtsLHoxKHUsITApXSl9O2lmKGkxKGkubWV0YSkpdGhpcy5pMThuVHJhbnNsYXRlKHMse30saS5yZWYsYSk7ZWxzZXtsZXQgbD10aGlzLmkxOG5UcmFuc2xhdGUocyx7fSx2b2lkIDAsYSk7aS5hcHBlbmRJY3UoVHEocykubmFtZSxsKX1yZXR1cm4gZSYmdGhpcy5pMThuRW5kKG51bGwsITApLG51bGx9YWxsb2NhdGVEYXRhU2xvdCgpe3JldHVybiB0aGlzLl9kYXRhSW5kZXgrK31nZXRDb25zdENvdW50KCl7cmV0dXJuIHRoaXMuX2RhdGFJbmRleH1nZXRWYXJDb3VudCgpe3JldHVybiB0aGlzLl9wdXJlRnVuY3Rpb25TbG90c31nZXRDb25zdHMoKXtyZXR1cm4gdGhpcy5fY29uc3RhbnRzfWdldE5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiB0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD90aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUodGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cyksITApOm51bGx9YmluZGluZ0NvbnRleHQoKXtyZXR1cm4iIit0aGlzLl9iaW5kaW5nQ29udGV4dCsrfXRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyh0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKXtpZighKHIgaW5zdGFuY2VvZiBNMCkpY29udGludWU7bGV0IG89ci52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodm9pZCAwIT09bylpZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKG8pLG8gaW5zdGFuY2VvZiBabyl7bGV0IHM9W107dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShvKSx0LHIubmFtZSxyLG8scyl9ZWxzZSBpLnB1c2goe3NwYW46ci5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSxyLm5hbWUpfSl9Zm9yKGxldCByIG9mIGkpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsci5zcGFuLEsucHJvcGVydHksci5wYXJhbXNPckZuKX1pbnN0cnVjdGlvbkZuKHQsZSxpLHIsbz0hMSl7dFtvPyJ1bnNoaWZ0IjoicHVzaCJdKHtzcGFuOmUscmVmZXJlbmNlOmkscGFyYW1zT3JGbjpyfSl9cHJvY2Vzc1N0eWxpbmdVcGRhdGVJbnN0cnVjdGlvbih0LGUpe2xldCBpPTA7aWYoZSlmb3IobGV0IHIgb2YgZS5jYWxscylpKz1yLmFsbG9jYXRlQmluZGluZ1Nsb3RzLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LHIuc291cmNlU3BhbixlLnJlZmVyZW5jZSwoKT0+ci5wYXJhbXMobz0+ci5zdXBwb3J0c0ludGVycG9sYXRpb24mJm8gaW5zdGFuY2VvZiBabz90aGlzLmdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKG8pOnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSkpO3JldHVybiBpfWNyZWF0aW9uSW5zdHJ1Y3Rpb24odCxlLGkscil7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX2NyZWF0aW9uQ29kZUZucyx0LGUsaXx8W10scil9dXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGUsaSxyKXt0aGlzLmFkZEFkdmFuY2VJbnN0cnVjdGlvbklmTmVjZXNzYXJ5KHQsZSksdGhpcy51cGRhdGVJbnN0cnVjdGlvbihlLGkscil9dXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkpe3RoaXMuaW5zdHJ1Y3Rpb25Gbih0aGlzLl91cGRhdGVDb2RlRm5zLHQsZSxpfHxbXSl9YWRkQWR2YW5jZUluc3RydWN0aW9uSWZOZWNlc3NhcnkodCxlKXtpZih0IT09dGhpcy5fY3VycmVudEluZGV4KXtsZXQgaT10LXRoaXMuX2N1cnJlbnRJbmRleDtpZihpPDEpdGhyb3cgbmV3IEVycm9yKCJhZHZhbmNlIGluc3RydWN0aW9uIGNhbiBvbmx5IGdvIGZvcndhcmRzIik7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX3VwZGF0ZUNvZGVGbnMsZSxLLmFkdmFuY2UsW250KGkpXSksdGhpcy5fY3VycmVudEluZGV4PXR9fWFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHModCl7bGV0IGU9dGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHM7cmV0dXJuIHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzKz10LGV9YWxsb2NhdGVCaW5kaW5nU2xvdHModCl7dGhpcy5fYmluZGluZ1Nsb3RzKz10IGluc3RhbmNlb2YgWm8/dC5leHByZXNzaW9ucy5sZW5ndGg6MX1nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpe3JldHVybiB0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj90aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcjp0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj0wPT09dGhpcy5sZXZlbD9NaShhYyk6dGhpcy5fYmluZGluZ1Njb3BlLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKX1jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHQpe2xldCBlPXFxKHRoaXMsdGhpcy5nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpLHQsdGhpcy5iaW5kaW5nQ29udGV4dCgpKSxpPWUuY3VyclZhbEV4cHI7cmV0dXJuIHRoaXMuX3RlbXBWYXJpYWJsZXMucHVzaCguLi5lLnN0bXRzKSxpfWdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKHQpe2xldHthcmdzOmUsc3RtdHM6aX09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bmV3IFR4KG4sdCxpLCEwKSxvPXIudmlzaXRJbnRlcnBvbGF0aW9uKGUsQmkuRXhwcmVzc2lvbik7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLHtzdG10czpZcShyLGkpLGFyZ3M6by5hcmdzfX0odGhpcyx0aGlzLmdldEltcGxpY2l0UmVjZWl2ZXJFeHByKCksdCx0aGlzLmJpbmRpbmdDb250ZXh0KCkpO3JldHVybiB0aGlzLl90ZW1wVmFyaWFibGVzLnB1c2goLi4uaSksZX1nZXRBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LGUsaSxyLG8scz1bXSxhPVtdKXtsZXQgdSxsPW5ldyBTZXQsYz1bXTtmb3IobGV0IHAgb2YgZSlpZigibmdQcm9qZWN0QXMiPT09cC5uYW1lJiYodT1wKSxwLmkxOG4pe2xldCBmLHtpMThuVmFyUmVmc0NhY2hlOmh9PXRoaXMuX2NvbnN0YW50cztoLmhhcyhwLmkxOG4pP2Y9aC5nZXQocC5pMThuKTooZj10aGlzLmkxOG5UcmFuc2xhdGUocC5pMThuKSxoLnNldChwLmkxOG4sZikpLGMucHVzaChudChwLm5hbWUpLGYpfWVsc2UgYy5wdXNoKC4uLmlxKHAubmFtZSksZ3hlKHQscCkpO2Z1bmN0aW9uIGQocCxoKXsic3RyaW5nIj09dHlwZW9mIHA/bC5oYXMocCl8fChjLnB1c2goLi4uaXEocCkpLHZvaWQgMCE9PWgmJmMucHVzaChoKSxsLmFkZChwKSk6Yy5wdXNoKG50KHApKX1pZih1JiZjLnB1c2goLi4uZnVuY3Rpb24obil7bGV0IHQ9dDMobi52YWx1ZSlbMF07cmV0dXJuW250KDUpLHJ1KHQpXX0odSkpLG8mJm8ucG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKGMpLGkubGVuZ3RofHxyLmxlbmd0aCl7bGV0IHA9Yy5sZW5ndGg7Zm9yKGxldCBoPTA7aDxpLmxlbmd0aDtoKyspe2xldCBmPWlbaF07NCE9PWYudHlwZSYmMSE9PWYudHlwZSYmZChmLm5hbWUpfWZvcihsZXQgaD0wO2g8ci5sZW5ndGg7aCsrKXtsZXQgZj1yW2hdOzEhPT1mLnR5cGUmJmQoZi5uYW1lKX1jLmxlbmd0aCE9PXAmJmMuc3BsaWNlKHAsMCxudCgzKSl9cmV0dXJuIHMubGVuZ3RoJiYoYy5wdXNoKG50KDQpKSxzLmZvckVhY2gocD0+ZChwLm5hbWUpKSksYS5sZW5ndGgmJihjLnB1c2gobnQoNikpLGEuZm9yRWFjaChwPT5kKHAubmFtZSkpKSxjfWFkZFRvQ29uc3RzKHQpe2lmKHhxKHQpKXJldHVybiBjMTtsZXQgZT10aGlzLl9jb25zdGFudHMuY29uc3RFeHByZXNzaW9ucztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlzRXF1aXZhbGVudCh0KSlyZXR1cm4gbnQoaSk7cmV0dXJuIG50KGUucHVzaCh0KS0xKX1hZGRBdHRyc1RvQ29uc3RzKHQpe3JldHVybiB0Lmxlbmd0aD4wP3RoaXMuYWRkVG9Db25zdHMoY3IodCkpOmMxfXByZXBhcmVSZWZzQXJyYXkodCl7cmV0dXJuIHQmJjAhPT10Lmxlbmd0aD9ydSh1WSh0Lm1hcChpPT57bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksbz10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCkscz10aGlzLmxldmVsLGE9TWkobyk7cmV0dXJuIHRoaXMuX2JpbmRpbmdTY29wZS5zZXQocyxpLm5hbWUsYSwwLChsLGMpPT57bGV0IHU9Yz4wP1tRTChjKS50b1N0bXQoKV06W10sZD1hLnNldCh4bihLLnJlZmVyZW5jZSkuY2FsbEZuKFtudChyKV0pKTtyZXR1cm4gdS5jb25jYXQoZC50b0NvbnN0RGVjbCgpKX0sITApLFtpLm5hbWUsaS52YWx1ZV19KSkpOmMxfXByZXBhcmVMaXN0ZW5lclBhcmFtZXRlcih0LGUsaSl7cmV0dXJuKCk9PntsZXQgcj1lLm5hbWUsbz0xPT09ZS50eXBlP1NxKHIsZS5waGFzZSk6bTAocikscz1gJHt0aGlzLnRlbXBsYXRlTmFtZX1fJHt0fV8ke299XyR7aX1fbGlzdGVuZXJgLGE9dGhpcy5fYmluZGluZ1Njb3BlLm5lc3RlZFNjb3BlKHRoaXMuX2JpbmRpbmdTY29wZS5iaW5kaW5nTGV2ZWwsc1kpO3JldHVybiBhWShlLHMsYSl9fX0sVzE9Y2xhc3MgZXh0ZW5kcyB2THtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5hbGxvY2F0ZVNsb3Q9ZSx0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHM9aSx0aGlzLmRlZmluZVBpcGU9cix0aGlzLl9waXBlQmluZEV4cHJzPVtdfXZpc2l0UGlwZSh0LGUpe2xldCBpPXRoaXMuYWxsb2NhdGVTbG90KCkscj1gUElQRToke2l9YCxvPXRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cygyK3QuYXJncy5sZW5ndGgpLHM9bmV3IG91KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixuZXcgRWYodC5zcGFuLHQuc291cmNlU3Bhbikscikse2lkZW50aWZpZXI6YSxpc1Zhckxlbmd0aDpsfT1mdW5jdGlvbihuKXtsZXQgdD1seGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucGlwZUJpbmRWLGlzVmFyTGVuZ3RoOiF0fX0odC5hcmdzKTt0aGlzLmRlZmluZVBpcGUodC5uYW1lLHIsaSx4bihhKSk7bGV0IGM9W3QuZXhwLC4uLnQuYXJnc10sdT10aGlzLnZpc2l0QWxsKGw/W25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGMpXTpjKSxkPW5ldyBicCh0LnNwYW4sdC5zb3VyY2VTcGFuLHMsW25ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpLG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLG8pLC4uLnVdLG51bGwpO3JldHVybiB0aGlzLl9waXBlQmluZEV4cHJzLnB1c2goZCksZH11cGRhdGVQaXBlU2xvdE9mZnNldHModCl7dGhpcy5fcGlwZUJpbmRFeHBycy5mb3JFYWNoKGU9PntlLmFyZ3NbMV0udmFsdWUrPXR9KX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpLGk9PntsZXQgcj1jcihpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9dmlzaXRMaXRlcmFsTWFwKHQsZSl7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpLGk9PntsZXQgcj1tbChpLm1hcCgobyxzKT0+KHtrZXk6dC5rZXlzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmtleXNbc10ucXVvdGVkfSkpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9fSxseGU9W0sucGlwZUJpbmQxLEsucGlwZUJpbmQyLEsucGlwZUJpbmQzLEsucGlwZUJpbmQ0XSx1eGU9W0sucHVyZUZ1bmN0aW9uMCxLLnB1cmVGdW5jdGlvbjEsSy5wdXJlRnVuY3Rpb24yLEsucHVyZUZ1bmN0aW9uMyxLLnB1cmVGdW5jdGlvbjQsSy5wdXJlRnVuY3Rpb241LEsucHVyZUZ1bmN0aW9uNixLLnB1cmVGdW5jdGlvbjcsSy5wdXJlRnVuY3Rpb244XTtmdW5jdGlvbiBRTChuKXtyZXR1cm4geG4oSy5uZXh0Q29udGV4dCkuY2FsbEZuKG4+MT9bbnQobildOltdKX1mdW5jdGlvbiBucShuLHQsZSl7bGV0e2xpdGVyYWxGYWN0b3J5OmksbGl0ZXJhbEZhY3RvcnlBcmd1bWVudHM6cn09bi5nZXRMaXRlcmFsRmFjdG9yeSh0KSxvPWUoMStyLmxlbmd0aCkse2lkZW50aWZpZXI6cyxpc1Zhckxlbmd0aDphfT1mdW5jdGlvbihuKXtsZXQgdD11eGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucHVyZUZ1bmN0aW9uVixpc1Zhckxlbmd0aDohdH19KHIpLGw9W250KG8pLGldO3JldHVybiBhP2wucHVzaChjcihyKSk6bC5wdXNoKC4uLnIpLHhuKHMpLmNhbGxGbihsKX1mdW5jdGlvbiBpcShuKXtsZXRbdCxlXT1jZChuKSxpPW50KGUpO3JldHVybiB0P1tudCgwKSxudCh0KSxpXTpbaV19dmFyIG8wPSIkJHNoYXJlZF9jdHgkJCIsQjA9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9bnVsbCxpKXtpZih0aGlzLmJpbmRpbmdMZXZlbD10LHRoaXMucGFyZW50PWUsdGhpcy5nbG9iYWxzPWksdGhpcy5tYXA9bmV3IE1hcCx0aGlzLnJlZmVyZW5jZU5hbWVJbmRleD0wLHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZT1udWxsLHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ9ITEsdm9pZCAwIT09aSlmb3IobGV0IHIgb2YgaSl0aGlzLnNldCgwLHIsTWkocikpfXN0YXRpYyBjcmVhdGVSb290U2NvcGUoKXtyZXR1cm4gbmV3IEIwfWdldCh0KXtsZXQgZT10aGlzO2Zvcig7ZTspe2xldCBpPWUubWFwLmdldCh0KTtpZihudWxsIT1pKXJldHVybiBlIT09dGhpcyYmKGk9e3JldHJpZXZhbExldmVsOmkucmV0cmlldmFsTGV2ZWwsbGhzOmkubGhzLGRlY2xhcmVMb2NhbENhbGxiYWNrOmkuZGVjbGFyZUxvY2FsQ2FsbGJhY2ssZGVjbGFyZTohMSxwcmlvcml0eTppLnByaW9yaXR5fSx0aGlzLm1hcC5zZXQodCxpKSx0aGlzLm1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKGkpLHRoaXMubWF5YmVSZXN0b3JlVmlldygpKSxpLmRlY2xhcmVMb2NhbENhbGxiYWNrJiYhaS5kZWNsYXJlJiYoaS5kZWNsYXJlPSEwKSxpLmxocztlPWUucGFyZW50fXJldHVybiAwPT09dGhpcy5iaW5kaW5nTGV2ZWw/bnVsbDp0aGlzLmdldENvbXBvbmVudFByb3BlcnR5KHQpfXNldCh0LGUsaSxyPTAsbyxzKXtpZih0aGlzLm1hcC5oYXMoZSkpe2lmKHMpcmV0dXJuIHRoaXM7aDEoYFRoZSBuYW1lICR7ZX0gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHNjb3BlIHRvIGJlICR7dGhpcy5tYXAuZ2V0KGUpfWApfXJldHVybiB0aGlzLm1hcC5zZXQoZSx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6aSxkZWNsYXJlOiExLGRlY2xhcmVMb2NhbENhbGxiYWNrOm8scHJpb3JpdHk6cn0pLHRoaXN9Z2V0TG9jYWwodCl7cmV0dXJuIHRoaXMuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXswIT09dGhpcy5iaW5kaW5nTGV2ZWwmJih0aGlzLm1hcC5nZXQobzArMCkuZGVjbGFyZT0hMCl9bmVzdGVkU2NvcGUodCxlKXtsZXQgaT1uZXcgQjAodCx0aGlzLGUpO3JldHVybiB0PjAmJmkuZ2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKDApLGl9Z2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2xldCBlPW8wK3Q7cmV0dXJuIHRoaXMubWFwLmhhcyhlKXx8dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodCksdGhpcy5tYXAuZ2V0KGUpLmxoc31nZXRTaGFyZWRDb250ZXh0TmFtZSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArdCk7cmV0dXJuIGUmJmUuZGVjbGFyZT9lLmxoczpudWxsfW1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2lmKDE9PT10LnByaW9yaXR5JiZ0LnJldHJpZXZhbExldmVsPHRoaXMuYmluZGluZ0xldmVsKXtsZXQgZT10aGlzLm1hcC5nZXQobzArdC5yZXRyaWV2YWxMZXZlbCk7ZT9lLmRlY2xhcmU9ITA6dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodC5yZXRyaWV2YWxMZXZlbCl9fWdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0KXtsZXQgZT1NaShhYyt0aGlzLmZyZXNoUmVmZXJlbmNlTmFtZSgpKTt0aGlzLm1hcC5zZXQobzArdCx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6ZSxkZWNsYXJlTG9jYWxDYWxsYmFjazooaSxyKT0+W2Uuc2V0KFFMKHIpKS50b0NvbnN0RGVjbCgpXSxkZWNsYXJlOiExLHByaW9yaXR5OjJ9KX1nZXRDb21wb25lbnRQcm9wZXJ0eSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArMCk7cmV0dXJuIGUuZGVjbGFyZT0hMCx0aGlzLm1heWJlUmVzdG9yZVZpZXcoKSxlLmxocy5wcm9wKHQpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLmlzTGlzdGVuZXJTY29wZSgpJiYodGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZXx8KHRoaXMucGFyZW50LnJlc3RvcmVWaWV3VmFyaWFibGU9TWkodGhpcy5wYXJlbnQuZnJlc2hSZWZlcmVuY2VOYW1lKCkpKSx0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU9dGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZSl9cmVzdG9yZVZpZXdTdGF0ZW1lbnQoKXtpZih0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGUpe2xldCB0PXhmKG51bGwsSy5yZXN0b3JlVmlldyxbdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlXSk7cmV0dXJuIHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ/TWkoQXEpLnNldCh0KS50b0NvbnN0RGVjbCgpOnQudG9TdG10KCl9cmV0dXJuIG51bGx9dmlld1NuYXBzaG90U3RhdGVtZW50cygpe3JldHVybiB0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU/W3RoaXMucmVzdG9yZVZpZXdWYXJpYWJsZS5zZXQoeGYobnVsbCxLLmdldEN1cnJlbnRWaWV3LFtdKSkudG9Db25zdERlY2woKV06W119aXNMaXN0ZW5lclNjb3BlKCl7cmV0dXJuIHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5iaW5kaW5nTGV2ZWw9PT10aGlzLmJpbmRpbmdMZXZlbH12YXJpYWJsZURlY2xhcmF0aW9ucygpe2xldCB0PTA7cmV0dXJuIEFycmF5LmZyb20odGhpcy5tYXAudmFsdWVzKCkpLmZpbHRlcihlPT5lLmRlY2xhcmUpLnNvcnQoKGUsaSk9PmkucmV0cmlldmFsTGV2ZWwtZS5yZXRyaWV2YWxMZXZlbHx8aS5wcmlvcml0eS1lLnByaW9yaXR5KS5yZWR1Y2UoKGUsaSk9PntsZXQgcj10aGlzLmJpbmRpbmdMZXZlbC1pLnJldHJpZXZhbExldmVsLG89aS5kZWNsYXJlTG9jYWxDYWxsYmFjayh0aGlzLHItdCk7cmV0dXJuIHQ9cixlLmNvbmNhdChvKX0sW10pfWZyZXNoUmVmZXJlbmNlTmFtZSgpe2xldCB0PXRoaXM7Zm9yKDt0LnBhcmVudDspdD10LnBhcmVudDtyZXR1cm4iX3IiK3QucmVmZXJlbmNlTmFtZUluZGV4Kyt9aGFzUmVzdG9yZVZpZXdWYXJpYWJsZSgpe3JldHVybiEhdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlfW5vdGlmeVJlc3RvcmVkVmlld0NvbnRleHRVc2UoKXt0aGlzLnVzZXNSZXN0b3JlZFZpZXdDb250ZXh0PSEwfX07ZnVuY3Rpb24gcnEobil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTtjYXNlIDM6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGVWfX1mdW5jdGlvbiBteGUobix0LGU9e30pe2xldHtpbnRlcnBvbGF0aW9uQ29uZmlnOmkscHJlc2VydmVXaGl0ZXNwYWNlczpyLGVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ6b309ZSxzPXExKGkpLGw9KG5ldyBOTCkucGFyc2Uobix0LHtsZWFkaW5nVHJpdmlhQ2hhcnM6c3hlLC4uLmUsdG9rZW5pemVFeHBhbnNpb25Gb3JtczohMH0pO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmwuZXJyb3JzJiZsLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmwuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9bGV0IGM9bC5yb290Tm9kZXMsdT1uZXcgRzEoaSwhcixvKSxkPXUudmlzaXRBbGxXaXRoRXJyb3JzKGMpO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmQuZXJyb3JzJiZkLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmQuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9Yz1kLnJvb3ROb2RlcyxyfHwoYz1jdShuZXcgY2xhc3N7dmlzaXRFbGVtZW50KHQsZSl7cmV0dXJuIEp5ZS5oYXModC5uYW1lKXx8dC5hdHRycy5zb21lKHQ9PnQubmFtZT09PUpxKT9uZXcgQXgodC5uYW1lLGN1KHRoaXMsdC5hdHRycyksdC5jaGlsZHJlbix0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bik6bmV3IEF4KHQubmFtZSx0LmF0dHJzLGZ1bmN0aW9uKG4sdCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaCgoaSxyKT0+e2xldCBzPWkudmlzaXQobix7cHJldjp0W3ItMV0sbmV4dDp0W3IrMV19KTtzJiZlLnB1c2gocyl9KSxlfSh0aGlzLHQuY2hpbGRyZW4pLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKX12aXNpdEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0Lm5hbWUhPT1KcT90Om51bGx9dmlzaXRUZXh0KHQsZSl7aWYodC52YWx1ZS5tYXRjaCgkeWUpfHxlJiYoZS5wcmV2IGluc3RhbmNlb2YgTjB8fGUubmV4dCBpbnN0YW5jZW9mIE4wKSl7bGV0IG89dC50b2tlbnMubWFwKGE9PjU9PT1hLnR5cGU/ZnVuY3Rpb24oe3R5cGU6bixwYXJ0czp0LHNvdXJjZVNwYW46ZX0pe3JldHVybnt0eXBlOm4scGFydHM6W3RZKHRbMF0pXSxzb3VyY2VTcGFuOmV9fShhKTphKSxzPXRZKHQudmFsdWUpO3JldHVybiBuZXcgRjAocyx0LnNvdXJjZVNwYW4sbyx0LmkxOG4pfXJldHVybiBudWxsfXZpc2l0Q29tbWVudCh0LGUpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uKHQsZSl7cmV0dXJuIHR9dmlzaXRFeHBhbnNpb25DYXNlKHQsZSl7cmV0dXJuIHR9fSxjKSx1Lmhhc0kxOG5NZXRhJiYoYz1jdShuZXcgRzEoaSwhMSksYykpKTtsZXR7bm9kZXM6cCxlcnJvcnM6aCxzdHlsZVVybHM6ZixzdHlsZXM6bSxuZ0NvbnRlbnRTZWxlY3RvcnM6Qyxjb21tZW50Tm9kZXM6X309ZnVuY3Rpb24obix0LGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYmluZGluZ1BhcnNlcj10LHRoaXMub3B0aW9ucz1lLHRoaXMuZXJyb3JzPVtdLHRoaXMuc3R5bGVzPVtdLHRoaXMuc3R5bGVVcmxzPVtdLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPVtdLHRoaXMuY29tbWVudE5vZGVzPVtdLHRoaXMuaW5JMThuQmxvY2s9ITF9dmlzaXRFbGVtZW50KHQpe2xldCBlPXB4KHQuaTE4bik7ZSYmKHRoaXMuaW5JMThuQmxvY2smJnRoaXMucmVwb3J0RXJyb3IoIkNhbm5vdCBtYXJrIGFuIGVsZW1lbnQgYXMgdHJhbnNsYXRhYmxlIGluc2lkZSBvZiBhIHRyYW5zbGF0YWJsZSBzZWN0aW9uLiBQbGVhc2UgcmVtb3ZlIHRoZSBuZXN0ZWQgaTE4biBtYXJrZXIuIix0LnNvdXJjZVNwYW4pLHRoaXMuaW5JMThuQmxvY2s9ITApO2xldCBpPXJZKHQpO2lmKGkudHlwZT09PVBzLlNDUklQVClyZXR1cm4gbnVsbDtpZihpLnR5cGU9PT1Qcy5TVFlMRSl7bGV0IEM9MT09PShuPXQpLmNoaWxkcmVuLmxlbmd0aCYmbi5jaGlsZHJlblswXWluc3RhbmNlb2YgRjA/bi5jaGlsZHJlblswXS52YWx1ZTpudWxsO3JldHVybiBudWxsIT09QyYmdGhpcy5zdHlsZXMucHVzaChDKSxudWxsfWlmKGkudHlwZT09PVBzLlNUWUxFU0hFRVQmJmZ1bmN0aW9uKG4pe2lmKG51bGw9PW58fDA9PT1uLmxlbmd0aHx8Ii8iPT1uWzBdKXJldHVybiExO2xldCB0PW4ubWF0Y2goZ2JlKTtyZXR1cm4gbnVsbD09PXR8fCJwYWNrYWdlIj09dFsxXXx8ImFzc2V0Ij09dFsxXX0oaS5ocmVmQXR0cikpcmV0dXJuIHRoaXMuc3R5bGVVcmxzLnB1c2goaS5ocmVmQXR0ciksbnVsbDt2YXIgbjtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4ibmctdGVtcGxhdGUiPT09Y2QobilbMV19KHQubmFtZSksbz1bXSxzPVtdLGE9W10sbD1bXSxjPVtdLHU9e30sZD1bXSxwPVtdLGg9ITE7Zm9yKGxldCBDIG9mIHQuYXR0cnMpe2xldCBfPSExLHk9JDkoQy5uYW1lKSxJPSExO2lmKEMuaTE4biYmKHVbQy5uYW1lXT1DLmkxOG4pLHkuc3RhcnRzV2l0aCgiKiIpKXtoJiZ0aGlzLnJlcG9ydEVycm9yKCJDYW4ndCBoYXZlIG11bHRpcGxlIHRlbXBsYXRlIGJpbmRpbmdzIG9uIG9uZSBlbGVtZW50LiBVc2Ugb25seSBvbmUgYXR0cmlidXRlIHByZWZpeGVkIHdpdGggKiIsQy5zb3VyY2VTcGFuKSxJPSEwLGg9ITA7bGV0IEE9Qy52YWx1ZSxPPXkuc3Vic3RyaW5nKCIqIi5sZW5ndGgpLGVlPVtdO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUlubGluZVRlbXBsYXRlQmluZGluZyhPLEEsQy5zb3VyY2VTcGFuLEMudmFsdWVTcGFuP0MudmFsdWVTcGFuLnN0YXJ0Lm9mZnNldDpDLnNvdXJjZVNwYW4uc3RhcnQub2Zmc2V0K0MubmFtZS5sZW5ndGgsW10sZCxlZSwhMCkscC5wdXNoKC4uLmVlLm1hcCh4ZT0+bmV3IHcxKHhlLm5hbWUseGUudmFsdWUseGUuc291cmNlU3Bhbix4ZS5rZXlTcGFuLHhlLnZhbHVlU3BhbikpKX1lbHNlIF89dGhpcy5wYXJzZUF0dHJpYnV0ZShyLEMsW10sbyxzLGEsbCk7IV8mJiFJJiZjLnB1c2godGhpcy52aXNpdEF0dHJpYnV0ZShDKSl9bGV0IG0sZj1jdShpLm5vbkJpbmRhYmxlP0liZTp0aGlzLHQuY2hpbGRyZW4pO2lmKGkudHlwZT09PVBzLk5HX0NPTlRFTlQpe3QuY2hpbGRyZW4mJiF0LmNoaWxkcmVuLmV2ZXJ5KHk9PmZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRjAmJjA9PW4udmFsdWUudHJpbSgpLmxlbmd0aH0oeSl8fGZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVjF9KHkpKSYmdGhpcy5yZXBvcnRFcnJvcigiPG5nLWNvbnRlbnQ+IGVsZW1lbnQgY2Fubm90IGhhdmUgY29udGVudC4iLHQuc291cmNlU3Bhbik7bGV0IEM9aS5zZWxlY3RBdHRyLF89dC5hdHRycy5tYXAoeT0+dGhpcy52aXNpdEF0dHJpYnV0ZSh5KSk7bT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5zZWxlY3Rvcj10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMuaTE4bj1yLHRoaXMubmFtZT0ibmctY29udGVudCJ9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRDb250ZW50KHRoaXMpfX0oQyxfLHQuc291cmNlU3Bhbix0LmkxOG4pLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLnB1c2goQyl9ZWxzZSBpZihyKXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IFliKHQubmFtZSxjLEMuYm91bmQscyxbXSxmLGwsYSx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bil9ZWxzZXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IEUwKHQubmFtZSxjLEMuYm91bmQscyxmLGwsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3Bhbix0LmkxOG4pfWlmKGgpe2xldCBDPXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXMoIm5nLXRlbXBsYXRlIixkLHUpLF89W107Qy5saXRlcmFsLmZvckVhY2goTz0+Xy5wdXNoKE8pKSxDLmJvdW5kLmZvckVhY2goTz0+Xy5wdXNoKE8pKTtsZXQgeT1tIGluc3RhbmNlb2YgRTA/e2F0dHJpYnV0ZXM6bS5hdHRyaWJ1dGVzLGlucHV0czptLmlucHV0cyxvdXRwdXRzOm0ub3V0cHV0c306e2F0dHJpYnV0ZXM6W10saW5wdXRzOltdLG91dHB1dHM6W119O209bmV3IFliKG0gaW5zdGFuY2VvZiBZYj9udWxsOm0ubmFtZSx5LmF0dHJpYnV0ZXMseS5pbnB1dHMseS5vdXRwdXRzLF8sW21dLFtdLHAsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3BhbixyJiZlP3ZvaWQgMDp0LmkxOG4pfXJldHVybiBlJiYodGhpcy5pbkkxOG5CbG9jaz0hMSksbX12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIHRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudG9rZW5zLHQuaTE4bil9dmlzaXRFeHBhbnNpb24odCl7aWYoIXQuaTE4bilyZXR1cm4gbnVsbDtpZighcHgodC5pMThuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSAiJHt0LmkxOG4uY29uc3RydWN0b3J9IiBmb3IgImkxOG4iIHByb3BlcnR5IG9mICR7dC5zb3VyY2VTcGFuLnRvU3RyaW5nKCl9LiBFeHBlY3RlZCBhICJNZXNzYWdlImApO2xldCBlPXQuaTE4bixpPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKGUucGxhY2Vob2xkZXJzKS5mb3JFYWNoKG89PntsZXQgcz1lLnBsYWNlaG9sZGVyc1tvXTtpZihvLnN0YXJ0c1dpdGgoIlZBUl8iKSl7bGV0IGE9by50cmltKCksbD10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihzLnRleHQscy5zb3VyY2VTcGFuKTtpW2FdPW5ldyB1eChsLHMuc291cmNlU3Bhbil9ZWxzZSByW29dPXRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHMudGV4dCxzLnNvdXJjZVNwYW4sbnVsbCl9KSxuZXcgTTEoaSxyLHQuc291cmNlU3BhbixlKX12aXNpdEV4cGFuc2lvbkNhc2UodCl7cmV0dXJuIG51bGx9dmlzaXRDb21tZW50KHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY29sbGVjdENvbW1lbnROb2RlcyYmdGhpcy5jb21tZW50Tm9kZXMucHVzaChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCl7dGhyb3cgbmV3IEVycm9yKCJ2aXNpdCgpIG5vdCBpbXBsZW1lbnRlZCBmb3IgQ29tbWVudCIpfX0odC52YWx1ZXx8IiIsdC5zb3VyY2VTcGFuKSksbnVsbH1leHRyYWN0QXR0cmlidXRlcyh0LGUsaSl7bGV0IHI9W10sbz1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgYT1pW3MubmFtZV07aWYocy5pc0xpdGVyYWwpby5wdXNoKG5ldyBkeChzLm5hbWUscy5leHByZXNzaW9uLnNvdXJjZXx8IiIscy5zb3VyY2VTcGFuLHMua2V5U3BhbixzLnZhbHVlU3BhbixhKSk7ZWxzZXtsZXQgbD10aGlzLmJpbmRpbmdQYXJzZXIuY3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxzLCEwLCExKTtyLnB1c2goTTAuZnJvbUJvdW5kRWxlbWVudFByb3BlcnR5KGwsYSkpfX0pLHtib3VuZDpyLGxpdGVyYWw6b319cGFyc2VBdHRyaWJ1dGUodCxlLGkscixvLHMsYSl7bGV0IGw9JDkoZS5uYW1lKSxjPWUudmFsdWUsdT1lLnNvdXJjZVNwYW4sZD1lLnZhbHVlU3Bhbj9lLnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQ6dS5zdGFydC5vZmZzZXQ7ZnVuY3Rpb24gcChfLHksSSl7bGV0IE89Xy5zdGFydC5tb3ZlQnkoeS5sZW5ndGgrKGUubmFtZS5sZW5ndGgtbC5sZW5ndGgpKSxlZT1PLm1vdmVCeShJLmxlbmd0aCk7cmV0dXJuIG5ldyBUbyhPLGVlLE8sSSl9bGV0IGg9bC5tYXRjaChUYmUpO2lmKGgpe2lmKG51bGwhPWhbMV0pe2xldCBfPWhbN10seT1wKHUsaFsxXSxfKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSl9ZWxzZSBpZihoWzJdKWlmKHQpe2xldCBfPWhbN10seT1wKHUsaFsyXSxfKTt0aGlzLnBhcnNlVmFyaWFibGUoXyxjLHUseSxlLnZhbHVlU3BhbixzKX1lbHNlIHRoaXMucmVwb3J0RXJyb3IoJyJsZXQtIiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBuZy10ZW1wbGF0ZSBlbGVtZW50cy4nLHUpO2Vsc2UgaWYoaFszXSl7bGV0IF89aFs3XSx5PXAodSxoWzNdLF8pO3RoaXMucGFyc2VSZWZlcmVuY2UoXyxjLHUseSxlLnZhbHVlU3BhbixhKX1lbHNlIGlmKGhbNF0pe2xldCBfPVtdLHk9aFs3XSxJPXAodSxoWzRdLHkpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUV2ZW50KHksYywhMSx1LGUudmFsdWVTcGFufHx1LGksXyxJKSxrTihfLG8pfWVsc2UgaWYoaFs1XSl7bGV0IF89aFs3XSx5PXAodSxoWzVdLF8pO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KX1lbHNlIGlmKGhbNl0pe2xldCBfPXAodSwiIixsKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VMaXRlcmFsQXR0cihsLGMsdSxkLGUudmFsdWVTcGFuLGkscixfKX1yZXR1cm4hMH1sZXQgZj1udWxsO2lmKGwuc3RhcnRzV2l0aCh1cF9CQU5BTkFfQk9YLnN0YXJ0KT9mPXVwX0JBTkFOQV9CT1g6bC5zdGFydHNXaXRoKHVwX1BST1BFUlRZLnN0YXJ0KT9mPXVwX1BST1BFUlRZOmwuc3RhcnRzV2l0aCh1cF9FVkVOVC5zdGFydCkmJihmPXVwX0VWRU5UKSxudWxsIT09ZiYmbC5lbmRzV2l0aChmLmVuZCkmJmwubGVuZ3RoPmYuc3RhcnQubGVuZ3RoK2YuZW5kLmxlbmd0aCl7bGV0IF89bC5zdWJzdHJpbmcoZi5zdGFydC5sZW5ndGgsbC5sZW5ndGgtZi5lbmQubGVuZ3RoKSx5PXAodSxmLnN0YXJ0LF8pO2lmKGYuc3RhcnQ9PT11cF9CQU5BTkFfQk9YLnN0YXJ0KXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KTtlbHNlIGlmKGYuc3RhcnQ9PT11cF9QUk9QRVJUWS5zdGFydCl0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSk7ZWxzZXtsZXQgST1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChfLGMsITEsdSxlLnZhbHVlU3Bhbnx8dSxpLEkseSksa04oSSxvKX1yZXR1cm4hMH1sZXQgbT1wKHUsIiIsbCk7cmV0dXJuIHRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5SW50ZXJwb2xhdGlvbihsLGMsdSxlLnZhbHVlU3BhbixpLHIsbSxlLnZhbHVlVG9rZW5zPz9udWxsKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89ZVkodCkscz10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uKG8sZSxpKTtyZXR1cm4gcz9uZXcgdXgocyxlLHIpOm5ldyB3MChvLGUpfXBhcnNlVmFyaWFibGUodCxlLGkscixvLHMpe3QuaW5kZXhPZigiLSIpPi0xP3RoaXMucmVwb3J0RXJyb3IoJyItIiBpcyBub3QgYWxsb3dlZCBpbiB2YXJpYWJsZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoJiZ0aGlzLnJlcG9ydEVycm9yKCJWYXJpYWJsZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSkscy5wdXNoKG5ldyB3MSh0LGUsaSxyLG8pKX1wYXJzZVJlZmVyZW5jZSh0LGUsaSxyLG8scyl7dC5pbmRleE9mKCItIik+LTE/dGhpcy5yZXBvcnRFcnJvcignIi0iIGlzIG5vdCBhbGxvd2VkIGluIHJlZmVyZW5jZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoP3RoaXMucmVwb3J0RXJyb3IoIlJlZmVyZW5jZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSk6cy5zb21lKGE9PmEubmFtZT09PXQpJiZ0aGlzLnJlcG9ydEVycm9yKGBSZWZlcmVuY2UgIiMke3R9IiBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlYCxpKSxzLnB1c2gobmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW99dmlzaXQodCl7cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UodGhpcyl9fSh0LGUsaSxyLG8pKX1wYXJzZUFzc2lnbm1lbnRFdmVudCh0LGUsaSxyLG8scyxhKXtsZXQgbD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChgJHt0fUNoYW5nZWAsYCR7ZX0gPSRldmVudGAsITAsaSxyfHxpLG8sbCxhKSxrTihsLHMpfXJlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfX0odCxlKSxzPXtub2RlczpjdShpLG4pLGVycm9yczp0LmVycm9ycy5jb25jYXQoaS5lcnJvcnMpLHN0eWxlVXJsczppLnN0eWxlVXJscyxzdHlsZXM6aS5zdHlsZXMsbmdDb250ZW50U2VsZWN0b3JzOmkubmdDb250ZW50U2VsZWN0b3JzfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYocy5jb21tZW50Tm9kZXM9aS5jb21tZW50Tm9kZXMpLHN9KGMscyx7Y29sbGVjdENvbW1lbnROb2RlczohIWUuY29sbGVjdENvbW1lbnROb2Rlc30pO2gucHVzaCguLi5sLmVycm9ycywuLi5kLmVycm9ycyk7bGV0IHk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmgubGVuZ3RoPjA/aDpudWxsLG5vZGVzOnAsc3R5bGVVcmxzOmYsc3R5bGVzOm0sbmdDb250ZW50U2VsZWN0b3JzOkN9O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJih5LmNvbW1lbnROb2Rlcz1fKSx5fXZhciBsWT1uZXcgajE7ZnVuY3Rpb24gcTEobj0kYyl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9leHByUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lLHRoaXMuX3NjaGVtYVJlZ2lzdHJ5PWksdGhpcy5lcnJvcnM9cn1nZXQgaW50ZXJwb2xhdGlvbkNvbmZpZygpe3JldHVybiB0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnfWNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VQcm9wZXJ0eUJpbmRpbmcocixvLCEwLGUsZS5zdGFydC5vZmZzZXQsdm9pZCAwLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IHByb3BlcnR5IGJpbmRpbmcgIiR7cn0iIG5lZWRzIHRvIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIGJ1dCBnb3QgIiR7b30iICgke3R5cGVvZiBvfSlgLGUpfXJldHVybiBpfWNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VFdmVudChyLG8sITEsZSxlLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IGxpc3RlbmVyICIke3J9IiBuZWVkcyB0byBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBidXQgZ290ICIke299IiAoJHt0eXBlb2Ygb30pYCxlKX1yZXR1cm4gaX1wYXJzZUludGVycG9sYXRpb24odCxlLGkpe2xldCByPWUuc3RhcnQudG9TdHJpbmcoKSxvPWUuZnVsbFN0YXJ0Lm9mZnNldDt0cnl7bGV0IHM9dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb24odCxyLG8saSx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxlKSxzfWNhdGNoKHMpe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtzfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbyl9fXBhcnNlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24odCxlKXtsZXQgaT1lLnN0YXJ0LnRvU3RyaW5nKCkscj1lLnN0YXJ0Lm9mZnNldDt0cnl7bGV0IG89dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsaSxyKTtyZXR1cm4gbyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhvLmVycm9ycyxlKSxvfWNhdGNoKG8pe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtvfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLGkscil9fXBhcnNlSW5saW5lVGVtcGxhdGVCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCl7bGV0IHU9dGhpcy5fcGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLGkuc3RhcnQub2Zmc2V0KyIqIi5sZW5ndGgscik7Zm9yKGxldCBkIG9mIHUpe2xldCBwPWNwKGksZC5zb3VyY2VTcGFuKSxoPWQua2V5LnNvdXJjZSxmPWNwKGksZC5rZXkuc3Bhbik7aWYoZCBpbnN0YW5jZW9mIFN4KXtsZXQgbT1kLnZhbHVlP2QudmFsdWUuc291cmNlOiIkaW1wbGljaXQiLEM9ZC52YWx1ZT9jcChpLGQudmFsdWUuc3Bhbik6dm9pZCAwO2EucHVzaChuZXcgeUwoaCxtLHAsZixDKSl9ZWxzZSBpZihkLnZhbHVlKXtsZXQgbT1sP3A6aSxDPWNwKGksZC52YWx1ZS5hc3Quc291cmNlU3Bhbik7dGhpcy5fcGFyc2VQcm9wZXJ0eUFzdChoLGQudmFsdWUsbSxmLEMsbyxzKX1lbHNlIG8ucHVzaChbaCwiIl0pLHRoaXMucGFyc2VMaXRlcmFsQXR0cihoLG51bGwsZixyLHZvaWQgMCxvLHMsZil9fV9wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz1pLnN0YXJ0LnRvU3RyaW5nKCk7dHJ5e2xldCBhPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxzLHIsbyk7cmV0dXJuIHRoaXMuX3JlcG9ydEV4cHJlc3Npb25QYXJzZXJFcnJvcnMoYS5lcnJvcnMsaSksYS53YXJuaW5ncy5mb3JFYWNoKGw9Pnt0aGlzLl9yZXBvcnRFcnJvcihsLGksbnUuV0FSTklORyl9KSxhLnRlbXBsYXRlQmluZGluZ3N9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke2F9YCxpKSxbXX19cGFyc2VMaXRlcmFsQXR0cih0LGUsaSxyLG8scyxhLGwpe1JOKHQpPyh0PXQuc3Vic3RyaW5nKDEpLHZvaWQgMCE9PWwmJihsPWNwKGwsbmV3IE9hKGwuc3RhcnQub2Zmc2V0KzEsbC5lbmQub2Zmc2V0KSkpLGUmJnRoaXMuX3JlcG9ydEVycm9yKCdBc3NpZ25pbmcgYW5pbWF0aW9uIHRyaWdnZXJzIHZpYSBAcHJvcD0iZXhwIiBhdHRyaWJ1dGVzIHdpdGggYW4gZXhwcmVzc2lvbiBpcyBpbnZhbGlkLiBVc2UgcHJvcGVydHkgYmluZGluZ3MgKGUuZy4gW0Bwcm9wXT0iZXhwIikgb3IgdXNlIGFuIGF0dHJpYnV0ZSB3aXRob3V0IGEgdmFsdWUgKGUuZy4gQHByb3ApIGluc3RlYWQuJyxpLG51LkVSUk9SKSx0aGlzLl9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLGwsbyxzLGEpKTphLnB1c2gobmV3IFFiKHQsdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZShlLCIiLHIpLGdwLkxJVEVSQUxfQVRUUixpLGwsbykpfXBhcnNlUHJvcGVydHlCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCxjKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJQcm9wZXJ0eSBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIscik7bGV0IHU9ITE7dC5zdGFydHNXaXRoKFBOKT8odT0hMCx0PXQuc3Vic3RyaW5nKFBOLmxlbmd0aCksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrUE4ubGVuZ3RoLGMuZW5kLm9mZnNldCkpKSk6Uk4odCkmJih1PSEwLHQ9dC5zdWJzdHJpbmcoMSksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrMSxjLmVuZC5vZmZzZXQpKSkpLHU/dGhpcy5fcGFyc2VBbmltYXRpb24odCxlLHIsbyxjLHMsYSxsKTp0aGlzLl9wYXJzZVByb3BlcnR5QXN0KHQsdGhpcy5fcGFyc2VCaW5kaW5nKGUsaSxzfHxyLG8pLHIsYyxzLGEsbCl9cGFyc2VQcm9wZXJ0eUludGVycG9sYXRpb24odCxlLGkscixvLHMsYSxsKXtsZXQgYz10aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihlLHJ8fGksbCk7cmV0dXJuISFjJiYodGhpcy5fcGFyc2VQcm9wZXJ0eUFzdCh0LGMsaSxhLHIsbyxzKSwhMCl9X3BhcnNlUHJvcGVydHlBc3QodCxlLGkscixvLHMsYSl7cy5wdXNoKFt0LGUuc291cmNlXSksYS5wdXNoKG5ldyBRYih0LGUsZ3AuREVGQVVMVCxpLHIsbykpfV9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLG8scyxhLGwpezA9PT10Lmxlbmd0aCYmdGhpcy5fcmVwb3J0RXJyb3IoIkFuaW1hdGlvbiB0cmlnZ2VyIGlzIG1pc3NpbmciLGkpO2xldCBjPXRoaXMuX3BhcnNlQmluZGluZyhlfHwidW5kZWZpbmVkIiwhMSxzfHxpLHIpO2EucHVzaChbdCxjLnNvdXJjZV0pLGwucHVzaChuZXcgUWIodCxjLGdwLkFOSU1BVElPTixpLG8scykpfV9wYXJzZUJpbmRpbmcodCxlLGkscil7bGV0IG89KGkmJmkuc3RhcnR8fCIodW5rbm93bikiKS50b1N0cmluZygpO3RyeXtsZXQgcz1lP3RoaXMuX2V4cHJQYXJzZXIucGFyc2VTaW1wbGVCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpOnRoaXMuX2V4cHJQYXJzZXIucGFyc2VCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpO3JldHVybiBzJiZ0aGlzLl9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHMuZXJyb3JzLGkpLHN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIsbyxyKX19Y3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxlLGk9ITEscj0hMCl7aWYoZS5pc0FuaW1hdGlvbilyZXR1cm4gbmV3IFIxKGUubmFtZSw0LFlyLk5PTkUsZS5leHByZXNzaW9uLG51bGwsZS5zb3VyY2VTcGFuLGUua2V5U3BhbixlLnZhbHVlU3Bhbik7bGV0IHMsYyxvPW51bGwsYT1udWxsLGw9ZS5uYW1lLnNwbGl0KCIuIik7aWYobC5sZW5ndGg+MSlpZigiYXR0ciI9PWxbMF0pe2E9bC5zbGljZSgxKS5qb2luKCIuIiksaXx8dGhpcy5fdmFsaWRhdGVQcm9wZXJ0eU9yQXR0cmlidXRlTmFtZShhLGUuc291cmNlU3BhbiwhMCksYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LGEsITApO2xldCB1PWEuaW5kZXhPZigiOiIpO2lmKHU+LTEpe2xldCBkPWEuc3Vic3RyaW5nKDAsdSkscD1hLnN1YnN0cmluZyh1KzEpO2E9ak4oZCxwKX1zPTF9ZWxzZSJjbGFzcyI9PWxbMF0/KGE9bFsxXSxzPTIsYz1bWXIuTk9ORV0pOiJzdHlsZSI9PWxbMF0mJihvPWwubGVuZ3RoPjI/bFsyXTpudWxsLGE9bFsxXSxzPTMsYz1bWXIuU1RZTEVdKTtpZihudWxsPT09YSl7bGV0IHU9dGhpcy5fc2NoZW1hUmVnaXN0cnkuZ2V0TWFwcGVkUHJvcE5hbWUoZS5uYW1lKTthPXI/dTplLm5hbWUsYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHUsITEpLHM9MCxpfHx0aGlzLl92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHUsZS5zb3VyY2VTcGFuLCExKX1yZXR1cm4gbmV3IFIxKGEscyxjWzBdLGUuZXhwcmVzc2lvbixvLGUuc291cmNlU3BhbixlLmtleVNwYW4sZS52YWx1ZVNwYW4pfXBhcnNlRXZlbnQodCxlLGkscixvLHMsYSxsKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJFdmVudCBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIsciksUk4odCk/KHQ9dC5zbGljZSgxKSx2b2lkIDAhPT1sJiYobD1jcChsLG5ldyBPYShsLnN0YXJ0Lm9mZnNldCsxLGwuZW5kLm9mZnNldCkpKSx0aGlzLl9wYXJzZUFuaW1hdGlvbkV2ZW50KHQsZSxpLHIsbyxhLGwpKTp0aGlzLl9wYXJzZVJlZ3VsYXJFdmVudCh0LGUsaSxyLG8scyxhLGwpfWNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHModCxlLGkpe2xldCByPXRoaXMuX3NjaGVtYVJlZ2lzdHJ5LmdldE1hcHBlZFByb3BOYW1lKGUpO3JldHVybiBPTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHIsaSl9X3BhcnNlQW5pbWF0aW9uRXZlbnQodCxlLGkscixvLHMsYSl7bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiLiIsdCl9KHQsW3QsIiJdKSxjPWxbMF0sdT1sWzFdLnRvTG93ZXJDYXNlKCksZD10aGlzLl9wYXJzZUFjdGlvbihlLGksbyk7cy5wdXNoKG5ldyBQMShjLHUsMSxkLHIsbyxhKSksMD09PWMubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQW5pbWF0aW9uIGV2ZW50IG5hbWUgaXMgbWlzc2luZyBpbiBiaW5kaW5nIixyKSx1PyJzdGFydCIhPT11JiYiZG9uZSIhPT11JiZ0aGlzLl9yZXBvcnRFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiBvdXRwdXQgcGhhc2UgdmFsdWUgIiR7dX0iIGZvciAiQCR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgKHVzZSBzdGFydCBvciBkb25lKWAscik6dGhpcy5fcmVwb3J0RXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciBvdXRwdXQgZXZlbnQgKEAke2N9KSBpcyBtaXNzaW5nIGl0cyBwaGFzZSB2YWx1ZSBuYW1lIChzdGFydCBvciBkb25lIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkKWAscil9X3BhcnNlUmVndWxhckV2ZW50KHQsZSxpLHIsbyxzLGEsbCl7bGV0W2MsdV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiOiIsdCl9KHQsW251bGwsdF0pLGQ9dGhpcy5fcGFyc2VBY3Rpb24oZSxpLG8pO3MucHVzaChbdCxkLnNvdXJjZV0pLGEucHVzaChuZXcgUDEodSxjLDAsZCxyLG8sbCkpfV9wYXJzZUFjdGlvbih0LGUsaSl7bGV0IHI9KGkmJmkuc3RhcnR8fCIodW5rbm93biIpLnRvU3RyaW5nKCksbz1pJiZpLnN0YXJ0P2kuc3RhcnQub2Zmc2V0OjA7dHJ5e2xldCBzPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VBY3Rpb24odCxlLHIsbyx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxpKSwhc3x8cy5hc3QgaW5zdGFuY2VvZiBuYT8odGhpcy5fcmVwb3J0RXJyb3IoIkVtcHR5IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCIsaSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbykpOnN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIscixvKX19X3JlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfV9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHQsZSl7Zm9yKGxldCBpIG9mIHQpdGhpcy5fcmVwb3J0RXJyb3IoaS5tZXNzYWdlLGUpfV92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHQsZSxpKXtsZXQgcj1pP3RoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlQXR0cmlidXRlKHQpOnRoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlUHJvcGVydHkodCk7ci5lcnJvciYmdGhpcy5fcmVwb3J0RXJyb3Ioci5tc2csZSxudS5FUlJPUil9fShuZXcgQjEobmV3IEwxKSxuLGxZLFtdKX1mdW5jdGlvbiBjWShuLHQpe3N3aXRjaChuKXtjYXNlIFlyLkhUTUw6cmV0dXJuIHhuKEsuc2FuaXRpemVIdG1sKTtjYXNlIFlyLlNDUklQVDpyZXR1cm4geG4oSy5zYW5pdGl6ZVNjcmlwdCk7Y2FzZSBZci5TVFlMRTpyZXR1cm4gdD94bihLLnNhbml0aXplU3R5bGUpOm51bGw7Y2FzZSBZci5VUkw6cmV0dXJuIHhuKEsuc2FuaXRpemVVcmwpO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiB4bihLLnNhbml0aXplUmVzb3VyY2VVcmwpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGd4ZShuLHQpe2xldCBlPXJ1KHQudmFsdWUpO2lmKCFpWShuLHQubmFtZSkpcmV0dXJuIGU7c3dpdGNoKGxZLnNlY3VyaXR5Q29udGV4dChuLHQubmFtZSwhMCkpe2Nhc2UgWXIuSFRNTDpyZXR1cm4gcjkoeG4oSy50cnVzdENvbnN0YW50SHRtbCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiByOSh4bihLLnRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIHZ4ZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHcwfHxuIGluc3RhbmNlb2YgdXh8fG4gaW5zdGFuY2VvZiBNMX1mdW5jdGlvbiBWTihuKXtyZXR1cm4gbi5ldmVyeSh2eGUpfWZ1bmN0aW9uIHMxKG4sdCxlKXtyZXR1cm4oKT0+e2xldCBpPW4oKSxyPUFycmF5LmlzQXJyYXkoaSk/aTpbaV07cmV0dXJuIGUmJnIucHVzaCguLi5lKSx0JiZyLnVuc2hpZnQobnQodCkpLHJ9fXZhciBvcT0ibmdJMThuQ2xvc3VyZU1vZGUiO2Z1bmN0aW9uIHVZKG4pe3JldHVybiBuLnJlZHVjZSgodCxlKT0+e2xldCBpPUFycmF5LmlzQXJyYXkoZSk/dVkoZSk6ZTtyZXR1cm4gdC5jb25jYXQoaSl9LFtdKX12YXIgeHhlPS9hdHRyXC4oW15cXV0rKS87ZnVuY3Rpb24gcFkobix0LGUpe2xldCBpPW5ldyB5cCxyPXQzKG4uc2VsZWN0b3IpO3JldHVybiBpLnNldCgidHlwZSIsbi5pbnRlcm5hbFR5cGUpLHIubGVuZ3RoPjAmJmkuc2V0KCJzZWxlY3RvcnMiLHJ1KHIpKSxuLnF1ZXJpZXMubGVuZ3RoPjAmJmkuc2V0KCJjb250ZW50UXVlcmllcyIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO2ZvcihsZXQgYSBvZiBuKXtpLnB1c2goeG4oSy5jb250ZW50UXVlcnkpLmNhbGxGbihbTWkoImRpckluZGV4IiksLi4uZlkoYSx0KV0pLnRvU3RtdCgpKTtsZXQgbD1vKCksYz14bihLLmxvYWRRdWVyeSkuY2FsbEZuKFtdKSx1PXhuKEsucXVlcnlSZWZyZXNoKS5jYWxsRm4oW2wuc2V0KGMpXSksZD1NaShhYykucHJvcChhLnByb3BlcnR5TmFtZSkuc2V0KGEuZmlyc3Q/bC5wcm9wKCJmaXJzdCIpOmwpO3IucHVzaCh1LmFuZChkKS50b1N0bXQoKSl9bGV0IHM9ZT9gJHtlfV9Db250ZW50UXVlcmllc2A6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpLG5ldyBScygiZGlySW5kZXgiLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnF1ZXJpZXMsdCxuLm5hbWUpKSxuLnZpZXdRdWVyaWVzLmxlbmd0aCYmaS5zZXQoInZpZXdRdWVyeSIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO24uZm9yRWFjaChhPT57bGV0IGw9eG4oSy52aWV3UXVlcnkpLmNhbGxGbihmWShhLHQpKTtpLnB1c2gobC50b1N0bXQoKSk7bGV0IGM9bygpLHU9eG4oSy5sb2FkUXVlcnkpLmNhbGxGbihbXSksZD14bihLLnF1ZXJ5UmVmcmVzaCkuY2FsbEZuKFtjLnNldCh1KV0pLHA9TWkoYWMpLnByb3AoYS5wcm9wZXJ0eU5hbWUpLnNldChhLmZpcnN0P2MucHJvcCgiZmlyc3QiKTpjKTtyLnB1c2goZC5hbmQocCkudG9TdG10KCkpfSk7bGV0IHM9ZT9gJHtlfV9RdWVyeWA6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnZpZXdRdWVyaWVzLHQsbi5uYW1lKSksaS5zZXQoImhvc3RCaW5kaW5ncyIsZnVuY3Rpb24obix0LGUsaSxyLG8scyl7bGV0IGE9TWkoYWMpLGw9bmV3IE4xKGEpLHtzdHlsZUF0dHI6YyxjbGFzc0F0dHI6dX09bi5zcGVjaWFsQXR0cmlidXRlczt2b2lkIDAhPT1jJiZsLnJlZ2lzdGVyU3R5bGVBdHRyKGMpLHZvaWQgMCE9PXUmJmwucmVnaXN0ZXJDbGFzc0F0dHIodSk7bGV0IGQ9W10scD1bXSxoPVtdLGY9dCxtPWUuY3JlYXRlRGlyZWN0aXZlSG9zdEV2ZW50QXN0cyhuLmxpc3RlbmVycyxmKTttJiZtLmxlbmd0aCYmZC5wdXNoKC4uLmZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtsZXQgcz1vLm5hbWUmJm0wKG8ubmFtZSksYT0xPT09by50eXBlP1NxKHMsby50YXJnZXRPclBoYXNlKTpzLGw9dCYmcz9gJHt0fV8ke2F9X0hvc3RCaW5kaW5nSGFuZGxlcmA6bnVsbCxjPWFZKFMwLmZyb21QYXJzZWRFdmVudChvKSxsKTsxPT1vLnR5cGU/aS5wdXNoKGMpOmUucHVzaChjKX1mb3IobGV0IG8gb2YgaSlyLnB1c2goe3JlZmVyZW5jZTpLLnN5bnRoZXRpY0hvc3RMaXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7Zm9yKGxldCBvIG9mIGUpci5wdXNoKHtyZWZlcmVuY2U6Sy5saXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7cmV0dXJuIHJ9KG0sbykpO2xldCBDPWUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsZiksXz1bXSx5PTA7QyYmQy5mb3JFYWNoKGZlPT57bC5yZWdpc3RlcklucHV0QmFzZWRPbk5hbWUoZmUubmFtZSxmZS5leHByZXNzaW9uLGYpP3krPTI6KF8ucHVzaChmZSkseSsrKX0pO2xldCBJLEE9KCk9PihJfHwoST1uZXcgVzEoaSwoKT0+aDEoIlVuZXhwZWN0ZWQgbm9kZSIpLHZlPT57bGV0IFQ9eTtyZXR1cm4geSs9dmUsVH0sKCk9PmgxKCJVbmV4cGVjdGVkIHBpcGUiKSkpLEkpLE89W10sZWU9W10sWD1bXTtmb3IobGV0IGZlIG9mIF8pe2xldCB2ZT1mZS5leHByZXNzaW9uLnZpc2l0KEEoKSksVD1hcShhLHZlKSx7YmluZGluZ05hbWU6bmUsaW5zdHJ1Y3Rpb246bGUsaXNBdHRyaWJ1dGU6aGV9PU54ZShmZSkseWU9ZS5jYWxjUG9zc2libGVTZWN1cml0eUNvbnRleHRzKHIsbmUsaGUpLmZpbHRlcihtZT0+bWUhPT1Zci5OT05FKSxKPW51bGw7eWUubGVuZ3RoJiYoSj0yPT09eWUubGVuZ3RoJiZ5ZS5pbmRleE9mKFlyLlVSTCk+LTEmJnllLmluZGV4T2YoWXIuUkVTT1VSQ0VfVVJMKT4tMT94bihLLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybCk6Y1koeWVbMF0saGUpKTtsZXQgYWU9W250KG5lKSxULmN1cnJWYWxFeHByXTtKJiZhZS5wdXNoKEopLGgucHVzaCguLi5ULnN0bXRzKSxsZT09PUsuaG9zdFByb3BlcnR5P08ucHVzaChhZSk6bGU9PT1LLmF0dHJpYnV0ZT9lZS5wdXNoKGFlKTpsZT09PUsuc3ludGhldGljSG9zdFByb3BlcnR5P1gucHVzaChhZSk6cC5wdXNoKHtyZWZlcmVuY2U6bGUscGFyYW1zT3JGbjphZSxzcGFuOm51bGx9KX1mb3IobGV0IGZlIG9mIE8pcC5wdXNoKHtyZWZlcmVuY2U6Sy5ob3N0UHJvcGVydHkscGFyYW1zT3JGbjpmZSxzcGFuOm51bGx9KTtmb3IobGV0IGZlIG9mIGVlKXAucHVzaCh7cmVmZXJlbmNlOksuYXR0cmlidXRlLHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7Zm9yKGxldCBmZSBvZiBYKXAucHVzaCh7cmVmZXJlbmNlOksuc3ludGhldGljSG9zdFByb3BlcnR5LHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7bGV0IHhlPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSl7bGV0IGk9bltlXTt0LnB1c2gobnQoZSksaSl9cmV0dXJuIHR9KG4uYXR0cmlidXRlcyk7aWYobC5hc3NpZ25Ib3N0QXR0cnMoeGUscyksbC5oYXNCaW5kaW5ncyYmbC5idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKEEoKSkuZm9yRWFjaChmZT0+e2ZvcihsZXQgdmUgb2YgZmUuY2FsbHMpeSs9TWF0aC5tYXgodmUuYWxsb2NhdGVCaW5kaW5nU2xvdHMtMiwwKSxwLnB1c2goe3JlZmVyZW5jZTpmZS5yZWZlcmVuY2UscGFyYW1zT3JGbjpGeGUodmUsYSxhcSksc3BhbjpudWxsfSl9KSx5JiZzLnNldCgiaG9zdFZhcnMiLG50KHkpKSxkLmxlbmd0aD4wfHxwLmxlbmd0aD4wKXtsZXQgZmU9bz9gJHtvfV9Ib3N0QmluZGluZ3NgOm51bGwsdmU9W107cmV0dXJuIGQubGVuZ3RoPjAmJnZlLnB1c2goeHAoMSxUMShkKSkpLHAubGVuZ3RoPjAmJnZlLnB1c2goeHAoMixoLmNvbmNhdChUMShwKSkpKSxPcyhbbmV3IFJzKE54LGt4KSxuZXcgUnMoYWMsbnVsbCldLHZlLGlhLG51bGwsZmUpfXJldHVybiBudWxsfShuLmhvc3Qsbi50eXBlU291cmNlU3BhbixlLHQsbi5zZWxlY3Rvcnx8IiIsbi5uYW1lLGkpKSxpLnNldCgiaW5wdXRzIixtOShuLmlucHV0cywhMCkpLGkuc2V0KCJvdXRwdXRzIixtOShuLm91dHB1dHMpKSxudWxsIT09bi5leHBvcnRBcyYmaS5zZXQoImV4cG9ydEFzIixjcihuLmV4cG9ydEFzLm1hcChvPT5udChvKSkpKSxuLmlzU3RhbmRhbG9uZSYmaS5zZXQoInN0YW5kYWxvbmUiLG50KCEwKSksaX1mdW5jdGlvbiBoWShuLHQpe2xldCBlPVtdLGk9dC5wcm92aWRlcnMscj10LnZpZXdQcm92aWRlcnM7aWYoaXx8cil7bGV0IG89W2l8fG5ldyB2ZihbXSldO3ImJm8ucHVzaChyKSxlLnB1c2goeG4oSy5Qcm92aWRlcnNGZWF0dXJlKS5jYWxsRm4obykpfXQudXNlc0luaGVyaXRhbmNlJiZlLnB1c2goeG4oSy5Jbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUpKSx0LmZ1bGxJbmhlcml0YW5jZSYmZS5wdXNoKHhuKEsuQ29weURlZmluaXRpb25GZWF0dXJlKSksdC5saWZlY3ljbGUudXNlc09uQ2hhbmdlcyYmZS5wdXNoKHhuKEsuTmdPbkNoYW5nZXNGZWF0dXJlKSksdC5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKSYmdC5pc1N0YW5kYWxvbmUmJmUucHVzaCh4bihLLlN0YW5kYWxvbmVGZWF0dXJlKSksZS5sZW5ndGgmJm4uc2V0KCJmZWF0dXJlcyIsY3IoZSkpfWZ1bmN0aW9uIGZZKG4sdCl7bGV0IGU9W012ZShuLHQpLG50KER4ZShuKSldO3JldHVybiBuLnJlYWQmJmUucHVzaChuLnJlYWQpLGV9ZnVuY3Rpb24gRHhlKG4pe3JldHVybihuLmRlc2NlbmRhbnRzPzE6MCl8KG4uc3RhdGljPzI6MCl8KG4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk/NDowKX1mdW5jdGlvbiBQeGUobil7cmV0dXJuIE5hKG50KG4pKX1mdW5jdGlvbiBzcShuKXtyZXR1cm4gTmEobWwoT2JqZWN0LmtleXMobikubWFwKGU9Pih7a2V5OmUsdmFsdWU6bnQoQXJyYXkuaXNBcnJheShuW2VdKT9uW2VdWzBdOm5bZV0pLHF1b3RlZDohMH0pKSkpfWZ1bmN0aW9uIEtMKG4pe3JldHVybiBuLmxlbmd0aD4wP05hKGNyKG4ubWFwKHQ9Pm50KHQpKSkpOmRkfWZ1bmN0aW9uIG1ZKG4pe2xldCB0PW51bGwhPT1uLnNlbGVjdG9yP24uc2VsZWN0b3IucmVwbGFjZSgvXG4vZywiIik6bnVsbDtyZXR1cm5bWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbnVsbCE9PXQ/UHhlKHQpOmRkLG51bGwhPT1uLmV4cG9ydEFzP0tMKG4uZXhwb3J0QXMpOmRkLHNxKG4uaW5wdXRzKSxzcShuLm91dHB1dHMpLEtMKG4ucXVlcmllcy5tYXAoZT0+ZS5wcm9wZXJ0eU5hbWUpKV19ZnVuY3Rpb24gYXEobix0KXtyZXR1cm4gcXEobnVsbCxuLHQsImIiKX1mdW5jdGlvbiBGeGUobix0LGUpe3JldHVybiBuLnBhcmFtcyhpPT5lKHQsaSkuY3VyclZhbEV4cHIpfWZ1bmN0aW9uIE54ZShuKXtsZXQgZSx0PW4ubmFtZSxpPXQubWF0Y2goeHhlKTtyZXR1cm4gaT8odD1pWzFdLGU9Sy5hdHRyaWJ1dGUpOm4uaXNBbmltYXRpb24/KHQ9TXEodCksZT1LLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eSk6ZT1LLmhvc3RQcm9wZXJ0eSx7YmluZGluZ05hbWU6dCxpbnN0cnVjdGlvbjplLGlzQXR0cmlidXRlOiEhaX19dmFyIG4sQnhlPS9eKD86XFsoW15cXV0rKVxdKXwoPzpcKChbXlwpXSspXCkpJC8sWkw9Y2xhc3N7fTtmdW5jdGlvbiBscShuKXtyZXR1cm57Li4ubixwcmVkaWNhdGU6Z1kobi5wcmVkaWNhdGUpLHJlYWQ6bi5yZWFkP25ldyBEbihuLnJlYWQpOm51bGwsc3RhdGljOm4uc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5Om4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHl9fWZ1bmN0aW9uIGNxKG4pe3JldHVybntwcm9wZXJ0eU5hbWU6bi5wcm9wZXJ0eU5hbWUsZmlyc3Q6bi5maXJzdD8/ITEscHJlZGljYXRlOmdZKG4ucHJlZGljYXRlKSxkZXNjZW5kYW50czpuLmRlc2NlbmRhbnRzPz8hMSxyZWFkOm4ucmVhZD9uZXcgRG4obi5yZWFkKTpudWxsLHN0YXRpYzpuLnN0YXRpYz8/ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6bi5lbWl0RGlzdGluY3RDaGFuZ2VzT25seT8/ITB9fWZ1bmN0aW9uIGdZKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP246bzMobmV3IERuKG4pLDEpfWZ1bmN0aW9uIHVxKG4pe2xldCB0PWZxKG4uaW5wdXRzfHxbXSksZT1mcShuLm91dHB1dHN8fFtdKSxpPW4ucHJvcE1ldGFkYXRhLHI9e30sbz17fTtmb3IobGV0IHMgaW4gaSlpLmhhc093blByb3BlcnR5KHMpJiZpW3NdLmZvckVhY2goYT0+e0p4ZShhKT9yW3NdPWEuYmluZGluZ1Byb3BlcnR5TmFtZT9bYS5iaW5kaW5nUHJvcGVydHlOYW1lLHNdOnM6JHhlKGEpJiYob1tzXT1hLmJpbmRpbmdQcm9wZXJ0eU5hbWV8fHMpfSk7cmV0dXJuey4uLm4sdHlwZUFyZ3VtZW50Q291bnQ6MCx0eXBlU291cmNlU3BhbjpuLnR5cGVTb3VyY2VTcGFuLHR5cGU6YXMobi50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksZGVwczpudWxsLGhvc3Q6UXhlKG4ucHJvcE1ldGFkYXRhLG4udHlwZVNvdXJjZVNwYW4sbi5ob3N0KSxpbnB1dHM6ey4uLnQsLi4ucn0sb3V0cHV0czp7Li4uZSwuLi5vfSxxdWVyaWVzOm4ucXVlcmllcy5tYXAobHEpLHByb3ZpZGVyczpudWxsIT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsdmlld1F1ZXJpZXM6bi52aWV3UXVlcmllcy5tYXAobHEpLGZ1bGxJbmhlcml0YW5jZTohMX19ZnVuY3Rpb24gX1kobix0KXtyZXR1cm57bmFtZTpuLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksdHlwZVNvdXJjZVNwYW46dCxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksc2VsZWN0b3I6bi5zZWxlY3Rvcj8/bnVsbCxpbnB1dHM6bi5pbnB1dHM/P3t9LG91dHB1dHM6bi5vdXRwdXRzPz97fSxob3N0Onp4ZShuLmhvc3QpLHF1ZXJpZXM6KG4ucXVlcmllcz8/W10pLm1hcChjcSksdmlld1F1ZXJpZXM6KG4udmlld1F1ZXJpZXM/P1tdKS5tYXAoY3EpLHByb3ZpZGVyczp2b2lkIDAhPT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBcz8/bnVsbCx1c2VzSW5oZXJpdGFuY2U6bi51c2VzSW5oZXJpdGFuY2U/PyExLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczpuLnVzZXNPbkNoYW5nZXM/PyExfSxkZXBzOm51bGwsdHlwZUFyZ3VtZW50Q291bnQ6MCxmdWxsSW5oZXJpdGFuY2U6ITEsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX19ZnVuY3Rpb24genhlKG49e30pe3JldHVybnthdHRyaWJ1dGVzOmp4ZShuLmF0dHJpYnV0ZXM/P3t9KSxsaXN0ZW5lcnM6bi5saXN0ZW5lcnM/P3t9LHByb3BlcnRpZXM6bi5wcm9wZXJ0aWVzPz97fSxzcGVjaWFsQXR0cmlidXRlczp7Y2xhc3NBdHRyOm4uY2xhc3NBdHRyaWJ1dGUsc3R5bGVBdHRyOm4uc3R5bGVBdHRyaWJ1dGV9fX1mdW5jdGlvbiBqeGUobil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXRbZV09bmV3IERuKG5bZV0pO3JldHVybiB0fWZ1bmN0aW9uIFd4ZShuKXtyZXR1cm57Li4ubix0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiBITihuLHQ9bnVsbCl7cmV0dXJue2tpbmQ6XzAuRGlyZWN0aXZlLGlzQ29tcG9uZW50OnR8fCJjb21wb25lbnQiPT09bi5raW5kLHNlbGVjdG9yOm4uc2VsZWN0b3IsdHlwZTpuZXcgRG4obi50eXBlKSxpbnB1dHM6bi5pbnB1dHM/P1tdLG91dHB1dHM6bi5vdXRwdXRzPz9bXSxleHBvcnRBczpuLmV4cG9ydEFzPz9udWxsfX1mdW5jdGlvbiBZeGUobil7cmV0dXJue2tpbmQ6XzAuUGlwZSxuYW1lOm4ubmFtZSx0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiB2WShuLHQsZSxpLHIpe2xldCBvPXI/RDAuZnJvbUFycmF5KHIpOiRjLHM9bXhlKG4sZSx7cHJlc2VydmVXaGl0ZXNwYWNlczppLGludGVycG9sYXRpb25Db25maWc6b30pO2lmKG51bGwhPT1zLmVycm9ycyl7bGV0IGE9cy5lcnJvcnMubWFwKGw9PmwudG9TdHJpbmcoKSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uIG9mIHRlbXBsYXRlIGZvciAke3R9OiAke2F9YCl9cmV0dXJue3RlbXBsYXRlOnMsaW50ZXJwb2xhdGlvbjpvfX1mdW5jdGlvbiBzMChuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG8zKG5ldyBEbihuW3RdKSwwKX1mdW5jdGlvbiBkcShuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG5ldyBEbihuW3RdKX1mdW5jdGlvbiBwcShuKXtyZXR1cm4gbzMoImZ1bmN0aW9uIj09dHlwZW9mIG4/bmV3IERuKG4pOm5ldyBGYShuPz9udWxsKSwwKX1mdW5jdGlvbiB5WShuKXtsZXQgdD1udWxsIT1uLmF0dHJpYnV0ZSxlPW51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pO3JldHVybiBiWSh0P25ldyBEbihuLmF0dHJpYnV0ZSk6ZSx0LG4uaG9zdCxuLm9wdGlvbmFsLG4uc2VsZixuLnNraXBTZWxmKX1mdW5jdGlvbiBocShuKXtsZXQgdD1uLmF0dHJpYnV0ZT8/ITE7cmV0dXJuIGJZKG51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pLHQsbi5ob3N0Pz8hMSxuLm9wdGlvbmFsPz8hMSxuLnNlbGY/PyExLG4uc2tpcFNlbGY/PyExKX1mdW5jdGlvbiBiWShuLHQsZSxpLHIsbyl7cmV0dXJue3Rva2VuOm4sYXR0cmlidXRlTmFtZVR5cGU6dD9udCgidW5rbm93biIpOm51bGwsaG9zdDplLG9wdGlvbmFsOmksc2VsZjpyLHNraXBTZWxmOm99fWZ1bmN0aW9uIFF4ZShuLHQsZSl7bGV0IGk9ZnVuY3Rpb24obil7bGV0IHQ9e30sZT17fSxpPXt9LHI9e307Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcz1uW29dLGE9by5tYXRjaChCeGUpO2lmKG51bGw9PT1hKXN3aXRjaChvKXtjYXNlImNsYXNzIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJDbGFzcyBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5jbGFzc0F0dHI9czticmVhaztjYXNlInN0eWxlIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJTdHlsZSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5zdHlsZUF0dHI9czticmVhaztkZWZhdWx0OnRbb109InN0cmluZyI9PXR5cGVvZiBzP250KHMpOnN9ZWxzZSBpZihudWxsIT1hWzFdKXtpZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7aVthWzFdXT1zfWVsc2UgaWYobnVsbCE9YVsyXSl7aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiRXZlbnQgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO2VbYVsyXV09c319cmV0dXJue2F0dHJpYnV0ZXM6dCxsaXN0ZW5lcnM6ZSxwcm9wZXJ0aWVzOmksc3BlY2lhbEF0dHJpYnV0ZXM6cn19KGV8fHt9KSxyPWZ1bmN0aW9uKG4sdCl7bGV0IGU9cTEoKTtyZXR1cm4gZS5jcmVhdGVEaXJlY3RpdmVIb3N0RXZlbnRBc3RzKG4ubGlzdGVuZXJzLHQpLGUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsdCksZS5lcnJvcnN9KGksdCk7aWYoci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIubWFwKG89Pm8ubXNnKS5qb2luKCJcbiIpKTtmb3IobGV0IG8gaW4gbiluLmhhc093blByb3BlcnR5KG8pJiZuW29dLmZvckVhY2gocz0+e0t4ZShzKT9pLnByb3BlcnRpZXNbcy5ob3N0UHJvcGVydHlOYW1lfHxvXT1YX2UoInRoaXMiLG8pOlp4ZShzKSYmKGkubGlzdGVuZXJzW3MuZXZlbnROYW1lfHxvXT1gJHtvfSgkeyhzLmFyZ3N8fFtdKS5qb2luKCIsIil9KWApfSk7cmV0dXJuIGl9ZnVuY3Rpb24gS3hlKG4pe3JldHVybiJIb3N0QmluZGluZyI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIFp4ZShuKXtyZXR1cm4iSG9zdExpc3RlbmVyIj09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gSnhlKG4pe3JldHVybiJJbnB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uICR4ZShuKXtyZXR1cm4iT3V0cHV0Ij09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gZnEobil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT57bGV0W2kscl09ZS5zcGxpdCgiOiIsMikubWFwKG89Pm8udHJpbSgpKTtyZXR1cm4gdFtpXT1yfHxpLHR9LHt9KX1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mdWxsPXQ7bGV0IGU9dC5zcGxpdCgiLiIpO3RoaXMubWFqb3I9ZVswXSx0aGlzLm1pbm9yPWVbMV0sdGhpcy5wYXRjaD1lLnNsaWNlKDIpLmpvaW4oIi4iKX19KCIxNC4yLjExIiksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbG9zZWRCeVBhcmVudD0hMSx0aGlzLmlzVm9pZD0hMSx0aGlzLmlnbm9yZUZpcnN0TGY9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITAsdGhpcy5wcmV2ZW50TmFtZXNwYWNlSW5oZXJpdGFuY2U9ITF9cmVxdWlyZUV4dHJhUGFyZW50KHQpe3JldHVybiExfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4hMX1nZXRDb250ZW50VHlwZSgpe3JldHVybiBmbC5QQVJTQUJMRV9EQVRBfX0sKChuPXAwKS5uZ3x8KG4ubmc9e30pKS5cdTAyNzVjb21waWxlckZhY2FkZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodD1uZXcgY2xhc3N7ZXZhbHVhdGVTdGF0ZW1lbnRzKHQsZSxpLHIpe2xldCBvPW5ldyBoTChpKSxzPWN4LmNyZWF0ZVJvb3QoKTtyZXR1cm4gZS5sZW5ndGg+MCYmIWVbMF0uaXNFcXVpdmFsZW50KG50KCJ1c2Ugc3RyaWN0IikudG9TdG10KCkpJiYoZT1bbnQoInVzZSBzdHJpY3QiKS50b1N0bXQoKSwuLi5lXSksby52aXNpdEFsbFN0YXRlbWVudHMoZSxzKSxvLmNyZWF0ZVJldHVyblN0bXQocyksdGhpcy5ldmFsdWF0ZUNvZGUodCxzLG8uZ2V0QXJncygpLHIpfWV2YWx1YXRlQ29kZSh0LGUsaSxyKXtsZXQgbz1gInVzZSBzdHJpY3QiOyR7ZS50b1NvdXJjZSgpfVxuLy8jIHNvdXJjZVVSTD0ke3R9YCxzPVtdLGE9W107Zm9yKGxldCBjIGluIGkpYS5wdXNoKGlbY10pLHMucHVzaChjKTtpZihyKXtsZXQgYz13OSguLi5zLmNvbmNhdCgicmV0dXJuIG51bGw7IikpLnRvU3RyaW5nKCksdT1jLnNsaWNlKDAsYy5pbmRleE9mKCJyZXR1cm4gbnVsbDsiKSkuc3BsaXQoIlxuIikubGVuZ3RoLTE7bys9YFxuJHtlLnRvU291cmNlTWFwR2VuZXJhdG9yKHQsdSkudG9Kc0NvbW1lbnQoKX1gfWxldCBsPXc5KC4uLnMuY29uY2F0KG8pKTtyZXR1cm4gdGhpcy5leGVjdXRlRnVuY3Rpb24obCxhKX1leGVjdXRlRnVuY3Rpb24odCxlKXtyZXR1cm4gdCguLi5lKX19KXt0aGlzLmppdEV2YWx1YXRvcj10LHRoaXMuRmFjdG9yeVRhcmdldD1pYyx0aGlzLlJlc291cmNlTG9hZGVyPVpMLHRoaXMuZWxlbWVudFNjaGVtYVJlZ2lzdHJ5PW5ldyBqMX1jb21waWxlUGlwZSh0LGUsaSl7bGV0IG89Uzkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOm51bGwscGlwZU5hbWU6aS5waXBlTmFtZSxwdXJlOmkucHVyZSxpc1N0YW5kYWxvbmU6aS5pc1N0YW5kYWxvbmV9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVQaXBlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPVM5KHtuYW1lOihuPWkpLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksaW50ZXJuYWxUeXBlOm5ldyBEbihuLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAscGlwZU5hbWU6bi5uYW1lLGRlcHM6bnVsbCxwdXJlOm4ucHVyZT8/ITAsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZUluamVjdGFibGUodCxlLGkpe2xldHtleHByZXNzaW9uOnIsc3RhdGVtZW50czpvfT1nOSh7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LHByb3ZpZGVkSW46cHEoaS5wcm92aWRlZEluKSx1c2VDbGFzczpzMChpLCJ1c2VDbGFzcyIpLHVzZUZhY3Rvcnk6ZHEoaSwidXNlRmFjdG9yeSIpLHVzZVZhbHVlOnMwKGksInVzZVZhbHVlIiksdXNlRXhpc3Rpbmc6czAoaSwidXNlRXhpc3RpbmciKSxkZXBzOmkuZGVwcz8ubWFwKHlZKX0sITApO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocix0LGUsbyl9Y29tcGlsZUluamVjdGFibGVEZWNsYXJhdGlvbih0LGUsaSl7bGV0e2V4cHJlc3Npb246cixzdGF0ZW1lbnRzOm99PWc5KHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOnBxKGkucHJvdmlkZWRJbiksdXNlQ2xhc3M6czAoaSwidXNlQ2xhc3MiKSx1c2VGYWN0b3J5OmRxKGksInVzZUZhY3RvcnkiKSx1c2VWYWx1ZTpzMChpLCJ1c2VWYWx1ZSIpLHVzZUV4aXN0aW5nOnMwKGksInVzZUV4aXN0aW5nIiksZGVwczppLmRlcHM/Lm1hcChocSl9LCEwKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLG8pfWNvbXBpbGVJbmplY3Rvcih0LGUsaSl7bGV0IG89TTkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSkscHJvdmlkZXJzOmkucHJvdmlkZXJzJiZpLnByb3ZpZGVycy5sZW5ndGg+MD9uZXcgRG4oaS5wcm92aWRlcnMpOm51bGwsaW1wb3J0czppLmltcG9ydHMubWFwKHM9Pm5ldyBEbihzKSl9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVJbmplY3RvckRlY2xhcmF0aW9uKHQsZSxpKXtsZXQgcj17bmFtZToobj1pKS50eXBlLm5hbWUsdHlwZTphcyhuLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4obi50eXBlKSxwcm92aWRlcnM6dm9pZCAwIT09bi5wcm92aWRlcnMmJm4ucHJvdmlkZXJzLmxlbmd0aD4wP25ldyBEbihuLnByb3ZpZGVycyk6bnVsbCxpbXBvcnRzOnZvaWQgMCE9PW4uaW1wb3J0cz9uLmltcG9ydHMubWFwKHQ9Pm5ldyBEbih0KSk6W119LG89TTkocik7dmFyIG47cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlTmdNb2R1bGUodCxlLGkpe2xldCBvPVl2ZSh7dHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSxhZGphY2VudFR5cGU6bmV3IERuKGkudHlwZSksYm9vdHN0cmFwOmkuYm9vdHN0cmFwLm1hcChhcyksZGVjbGFyYXRpb25zOmkuZGVjbGFyYXRpb25zLm1hcChhcykscHVibGljRGVjbGFyYXRpb25UeXBlczpudWxsLGltcG9ydHM6aS5pbXBvcnRzLm1hcChhcyksaW5jbHVkZUltcG9ydFR5cGVzOiEwLGV4cG9ydHM6aS5leHBvcnRzLm1hcChhcyksc2VsZWN0b3JTY29wZU1vZGU6ZzAuSW5saW5lLGNvbnRhaW5zRm9yd2FyZERlY2xzOiExLHNjaGVtYXM6aS5zY2hlbWFzP2kuc2NoZW1hcy5tYXAoYXMpOm51bGwsaWQ6aS5pZD9uZXcgRG4oaS5pZCk6bnVsbH0pO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZU5nTW9kdWxlRGVjbGFyYXRpb24odCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyB5cDtyZXR1cm4gdC5zZXQoInR5cGUiLG5ldyBEbihuLnR5cGUpKSx2b2lkIDAhPT1uLmJvb3RzdHJhcCYmdC5zZXQoImJvb3RzdHJhcCIsbmV3IERuKG4uYm9vdHN0cmFwKSksdm9pZCAwIT09bi5kZWNsYXJhdGlvbnMmJnQuc2V0KCJkZWNsYXJhdGlvbnMiLG5ldyBEbihuLmRlY2xhcmF0aW9ucykpLHZvaWQgMCE9PW4uaW1wb3J0cyYmdC5zZXQoImltcG9ydHMiLG5ldyBEbihuLmltcG9ydHMpKSx2b2lkIDAhPT1uLmV4cG9ydHMmJnQuc2V0KCJleHBvcnRzIixuZXcgRG4obi5leHBvcnRzKSksdm9pZCAwIT09bi5zY2hlbWFzJiZ0LnNldCgic2NoZW1hcyIsbmV3IERuKG4uc2NoZW1hcykpLHZvaWQgMCE9PW4uaWQmJnQuc2V0KCJpZCIsbmV3IERuKG4uaWQpKSx4bihLLmRlZmluZU5nTW9kdWxlKS5jYWxsRm4oW3QudG9MaXRlcmFsTWFwKCldKX0oaSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLHQsZSxbXSl9Y29tcGlsZURpcmVjdGl2ZSh0LGUsaSl7bGV0IHI9dXEoaSk7cmV0dXJuIHRoaXMuY29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxyKX1jb21waWxlRGlyZWN0aXZlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPV9ZKGksdGhpcy5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkRpcmVjdGl2ZSIsaS50eXBlLm5hbWUsZSkpO3JldHVybiB0aGlzLmNvbXBpbGVEaXJlY3RpdmVGcm9tTWV0YSh0LGUsbyl9Y29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxpKXtsZXQgcj1uZXcgeDEscz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9cFkobix0LGUpO2hZKGksbik7bGV0IHI9eG4oSy5kZWZpbmVEaXJlY3RpdmUpLmNhbGxGbihbaS50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxvPWZ1bmN0aW9uKG4pe2xldCB0PW1ZKG4pO3JldHVybiB0LnB1c2goZGQpLHQucHVzaChOYShudChuLmlzU3RhbmRhbG9uZSkpKSxOYSh4bihLLkRpcmVjdGl2ZURlY2xhcmF0aW9uLHQpKX0obik7cmV0dXJue2V4cHJlc3Npb246cix0eXBlOm8sc3RhdGVtZW50czpbXX19KGkscixxMSgpKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHMuZXhwcmVzc2lvbix0LGUsci5zdGF0ZW1lbnRzKX1jb21waWxlQ29tcG9uZW50KHQsZSxpKXtsZXR7dGVtcGxhdGU6cixpbnRlcnBvbGF0aW9uOm99PXZZKGkudGVtcGxhdGUsaS5uYW1lLGUsaS5wcmVzZXJ2ZVdoaXRlc3BhY2VzLGkuaW50ZXJwb2xhdGlvbikscz17Li4uaSwuLi51cShpKSxzZWxlY3RvcjppLnNlbGVjdG9yfHx0aGlzLmVsZW1lbnRTY2hlbWFSZWdpc3RyeS5nZXREZWZhdWx0Q29tcG9uZW50RWxlbWVudE5hbWUoKSx0ZW1wbGF0ZTpyLGRlY2xhcmF0aW9uczppLmRlY2xhcmF0aW9ucy5tYXAoV3hlKSxkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZTowLHN0eWxlczpbLi4uaS5zdHlsZXMsLi4uci5zdHlsZXNdLGVuY2Fwc3VsYXRpb246aS5lbmNhcHN1bGF0aW9uLGludGVycG9sYXRpb246byxjaGFuZ2VEZXRlY3Rpb246aS5jaGFuZ2VEZXRlY3Rpb24sYW5pbWF0aW9uczpudWxsIT1pLmFuaW1hdGlvbnM/bmV3IERuKGkuYW5pbWF0aW9ucyk6bnVsbCx2aWV3UHJvdmlkZXJzOm51bGwhPWkudmlld1Byb3ZpZGVycz9uZXcgRG4oaS52aWV3UHJvdmlkZXJzKTpudWxsLHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiIiLGkxOG5Vc2VFeHRlcm5hbElkczohMH07cmV0dXJuIHRoaXMuY29tcGlsZUNvbXBvbmVudEZyb21NZXRhKHQsYG5nOi8vLyR7aS5uYW1lfS5qc2Ascyl9Y29tcGlsZUNvbXBvbmVudERlY2xhcmF0aW9uKHQsZSxpKXtsZXQgbz1mdW5jdGlvbihuLHQsZSl7bGV0e3RlbXBsYXRlOmksaW50ZXJwb2xhdGlvbjpyfT12WShuLnRlbXBsYXRlLG4udHlwZS5uYW1lLGUsbi5wcmVzZXJ2ZVdoaXRlc3BhY2VzPz8hMSxuLmludGVycG9sYXRpb24pLG89W107aWYobi5kZXBlbmRlbmNpZXMpZm9yKGxldCBzIG9mIG4uZGVwZW5kZW5jaWVzKXN3aXRjaChzLmtpbmQpe2Nhc2UiZGlyZWN0aXZlIjpjYXNlImNvbXBvbmVudCI6by5wdXNoKEhOKHMpKTticmVhaztjYXNlInBpcGUiOm8ucHVzaChZeGUocykpfWVsc2Uobi5jb21wb25lbnRzfHxuLmRpcmVjdGl2ZXN8fG4ucGlwZXMpJiYobi5jb21wb25lbnRzJiZvLnB1c2goLi4ubi5jb21wb25lbnRzLm1hcChzPT5ITihzLCEwKSkpLG4uZGlyZWN0aXZlcyYmby5wdXNoKC4uLm4uZGlyZWN0aXZlcy5tYXAocz0+SE4ocykpKSxuLnBpcGVzJiZvLnB1c2goLi4uZnVuY3Rpb24obil7cmV0dXJuIG4/T2JqZWN0LmtleXMobikubWFwKHQ9Pih7a2luZDpfMC5QaXBlLG5hbWU6dCx0eXBlOm5ldyBEbihuW3RdKX0pKTpbXX0obi5waXBlcykpKTtyZXR1cm57Li4uX1kobix0KSx0ZW1wbGF0ZTppLHN0eWxlczpuLnN0eWxlcz8/W10sZGVjbGFyYXRpb25zOm8sdmlld1Byb3ZpZGVyczp2b2lkIDAhPT1uLnZpZXdQcm92aWRlcnM/bmV3IERuKG4udmlld1Byb3ZpZGVycyk6bnVsbCxhbmltYXRpb25zOnZvaWQgMCE9PW4uYW5pbWF0aW9ucz9uZXcgRG4obi5hbmltYXRpb25zKTpudWxsLGNoYW5nZURldGVjdGlvbjpuLmNoYW5nZURldGVjdGlvbj8/cWIuRGVmYXVsdCxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbj8/b2QuRW11bGF0ZWQsaW50ZXJwb2xhdGlvbjpyLGRlY2xhcmF0aW9uTGlzdEVtaXRNb2RlOjIscmVsYXRpdmVDb250ZXh0RmlsZVBhdGg6IiIsaTE4blVzZUV4dGVybmFsSWRzOiEwfX0oaSx0aGlzLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiQ29tcG9uZW50IixpLnR5cGUubmFtZSxlKSxlKTtyZXR1cm4gdGhpcy5jb21waWxlQ29tcG9uZW50RnJvbU1ldGEodCxlLG8pfWNvbXBpbGVDb21wb25lbnRGcm9tTWV0YSh0LGUsaSl7bGV0IHI9bmV3IHgxLHM9ZnVuY3Rpb24obix0LGUpe2xldCBpPXBZKG4sdCxlKTtoWShpLG4pO2xldCByPW4uc2VsZWN0b3ImJnVkLnBhcnNlKG4uc2VsZWN0b3IpLG89ciYmclswXTtpZihvKXtsZXQgXz1vLmdldEF0dHJzKCk7Xy5sZW5ndGgmJmkuc2V0KCJhdHRycyIsdC5nZXRDb25zdExpdGVyYWwoY3IoXy5tYXAoeT0+bnQobnVsbCE9eT95OnZvaWQgMCkpKSwhMCkpfWxldCBzPW4ubmFtZSxhPXM/YCR7c31fVGVtcGxhdGVgOm51bGwsbD1uLmNoYW5nZURldGVjdGlvbixjPW4udGVtcGxhdGUsdT1uZXcgT3godCxCMC5jcmVhdGVSb290U2NvcGUoKSwwLHMsbnVsbCxudWxsLGEsSy5uYW1lc3BhY2VIVE1MLG4ucmVsYXRpdmVDb250ZXh0RmlsZVBhdGgsbi5pMThuVXNlRXh0ZXJuYWxJZHMpLGQ9dS5idWlsZFRlbXBsYXRlRnVuY3Rpb24oYy5ub2RlcyxbXSkscD11LmdldE5nQ29udGVudFNlbGVjdG9ycygpO3AmJmkuc2V0KCJuZ0NvbnRlbnRTZWxlY3RvcnMiLHApLGkuc2V0KCJkZWNscyIsbnQodS5nZXRDb25zdENvdW50KCkpKSxpLnNldCgidmFycyIsbnQodS5nZXRWYXJDb3VudCgpKSk7bGV0e2NvbnN0RXhwcmVzc2lvbnM6aCxwcmVwYXJlU3RhdGVtZW50czpmfT11LmdldENvbnN0cygpO2lmKGgubGVuZ3RoPjApe2xldCBfPWNyKGgpO2YubGVuZ3RoPjAmJihfPU9zKFtdLFsuLi5mLG5ldyB1byhfKV0pKSxpLnNldCgiY29uc3RzIixfKX1pZihpLnNldCgidGVtcGxhdGUiLGQpLG4uZGVjbGFyYXRpb25zLmxlbmd0aD4wJiZpLnNldCgiZGVwZW5kZW5jaWVzIixmdW5jdGlvbihuLHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIG47Y2FzZSAxOnJldHVybiBPcyhbXSxbbmV3IHVvKG4pXSk7Y2FzZSAyOmxldCBlPW4ucHJvcCgibWFwIikuY2FsbEZuKFt4bihLLnJlc29sdmVGb3J3YXJkUmVmKV0pO3JldHVybiBPcyhbXSxbbmV3IHVvKGUpXSl9fShjcihuLmRlY2xhcmF0aW9ucy5tYXAoXz0+Xy50eXBlKSksbi5kZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSkpLG51bGw9PT1uLmVuY2Fwc3VsYXRpb24mJihuLmVuY2Fwc3VsYXRpb249b2QuRW11bGF0ZWQpLG4uc3R5bGVzJiZuLnN0eWxlcy5sZW5ndGgpe2xldCB5PShuLmVuY2Fwc3VsYXRpb249PW9kLkVtdWxhdGVkP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmljdFN0eWxpbmc9ITB9c2hpbUNzc1RleHQodCxlLGk9IiIpe2xldCByPXQubWF0Y2goZ3llKXx8W107cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShmeWUsIiIpfSh0KSx0PXRoaXMuX2luc2VydERpcmVjdGl2ZXModCksW3RoaXMuX3Njb3BlQ3NzVGV4dCh0LGUsaSksLi4ucl0uam9pbigiXG4iKX1faW5zZXJ0RGlyZWN0aXZlcyh0KXtyZXR1cm4gdD10aGlzLl9pbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQodCksdGhpcy5faW5zZXJ0UG9seWZpbGxSdWxlc0luQ3NzVGV4dCh0KX1faW5zZXJ0UG9seWZpbGxEaXJlY3RpdmVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uob3llLGZ1bmN0aW9uKC4uLmUpe3JldHVybiBlWzJdKyJ7In0pfV9pbnNlcnRQb2x5ZmlsbFJ1bGVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uoc3llLCguLi5lKT0+e2xldCBpPWVbMF0ucmVwbGFjZShlWzFdLCIiKS5yZXBsYWNlKGVbMl0sIiIpO3JldHVybiBlWzRdK2l9KX1fc2NvcGVDc3NUZXh0KHQsZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpO3JldHVybiB0PXRoaXMuX2luc2VydFBvbHlmaWxsSG9zdEluQ3NzVGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRDb2xvbkhvc3QodCksdD10aGlzLl9jb252ZXJ0Q29sb25Ib3N0Q29udGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRTaGFkb3dET01TZWxlY3RvcnModCksZSYmKHQ9dGhpcy5fc2NvcGVTZWxlY3RvcnModCxlLGkpKSwodD10KyJcbiIrcikudHJpbSgpfV9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpe2xldCBpLGU9IiI7Zm9yKFQ5Lmxhc3RJbmRleD0wO251bGwhPT0oaT1UOS5leGVjKHQpKTspZSs9aVswXS5yZXBsYWNlKGlbMl0sIiIpLnJlcGxhY2UoaVsxXSxpWzRdKSsiXG5cbiI7cmV0dXJuIGV9X2NvbnZlcnRDb2xvbkhvc3QodCl7cmV0dXJuIHQucmVwbGFjZShheWUsKGUsaSxyKT0+e2lmKGkpe2xldCBvPVtdLHM9aS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhIG9mIHMpe2lmKCFhKWJyZWFrO2xldCBsPXNmK2EucmVwbGFjZShrMSwiIikrcjtvLnB1c2gobCl9cmV0dXJuIG8uam9pbigiLCIpfXJldHVybiBzZityfSl9X2NvbnZlcnRDb2xvbkhvc3RDb250ZXh0KHQpe3JldHVybiB0LnJlcGxhY2UobHllLGU9PntsZXQgcixpPVtbXV07Zm9yKDtyPWN5ZS5leGVjKGUpOyl7bGV0IG89KHJbMV0/PyIiKS50cmltKCkuc3BsaXQoIiwiKS5tYXAoYT0+YS50cmltKCkpLmZpbHRlcihhPT4iIiE9PWEpLHM9aS5sZW5ndGg7TXllKGksby5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWZvcihsZXQgbD0wO2w8cztsKyspaVtsK2Eqc10ucHVzaChvW2FdKTtlPXJbMl19cmV0dXJuIGkubWFwKG89PmZ1bmN0aW9uKG4sdCl7bGV0IGU9c2Y7ZDAubGFzdEluZGV4PTA7bGV0IGk9ZDAudGVzdCh0KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuIGUrdDtsZXQgcj1bbi5wb3AoKXx8IiJdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBvPXIubGVuZ3RoLHM9bi5wb3AoKTtmb3IobGV0IGE9MDthPG87YSsrKXtsZXQgbD1yW2FdO3JbMipvK2FdPWwrIiAiK3MscltvK2FdPXMrIiAiK2wsclthXT1zK2x9fXJldHVybiByLm1hcChvPT5pP2Ake299JHt0fWA6YCR7b30ke2V9JHt0fSwgJHtvfSAke2V9JHt0fWApLmpvaW4oIiwiKX0obyxlKSkuam9pbigiLCAiKX0pfV9jb252ZXJ0U2hhZG93RE9NU2VsZWN0b3JzKHQpe3JldHVybiB1eWUucmVkdWNlKChlLGkpPT5lLnJlcGxhY2UoaSwiICIpLHQpfV9zY29wZVNlbGVjdG9ycyh0LGUsaSl7cmV0dXJuIEk5KHQscj0+e2xldCBvPXIuc2VsZWN0b3Iscz1yLmNvbnRlbnQ7cmV0dXJuIkAiIT09ci5zZWxlY3RvclswXT9vPXRoaXMuX3Njb3BlU2VsZWN0b3Ioci5zZWxlY3RvcixlLGksdGhpcy5zdHJpY3RTdHlsaW5nKTpyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBtZWRpYSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBzdXBwb3J0cyIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBkb2N1bWVudCIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBsYXllciIpP3M9dGhpcy5fc2NvcGVTZWxlY3RvcnMoci5jb250ZW50LGUsaSk6KHIuc2VsZWN0b3Iuc3RhcnRzV2l0aCgiQGZvbnQtZmFjZSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBwYWdlIikpJiYocz10aGlzLl9zdHJpcFNjb3BpbmdTZWxlY3RvcnMoci5jb250ZW50KSksbmV3IER4KG8scyl9KX1fc3RyaXBTY29waW5nU2VsZWN0b3JzKHQpe3JldHVybiBJOSh0LGU9PntsZXQgaT1lLnNlbGVjdG9yLnJlcGxhY2UoQTksIiAiKS5yZXBsYWNlKEQ5LCIgIik7cmV0dXJuIG5ldyBEeChpLGUuY29udGVudCl9KX1fc2NvcGVTZWxlY3Rvcih0LGUsaSxyKXtyZXR1cm4gdC5zcGxpdCgiLCIpLm1hcChvPT5vLnRyaW0oKS5zcGxpdChBOSkpLm1hcChvPT57bGV0W3MsLi4uYV09bztyZXR1cm5bKGM9PnRoaXMuX3NlbGVjdG9yTmVlZHNTY29waW5nKGMsZSk/cj90aGlzLl9hcHBseVN0cmljdFNlbGVjdG9yU2NvcGUoYyxlLGkpOnRoaXMuX2FwcGx5U2VsZWN0b3JTY29wZShjLGUsaSk6YykocyksLi4uYV0uam9pbigiICIpfSkuam9pbigiLCAiKX1fc2VsZWN0b3JOZWVkc1Njb3BpbmcodCxlKXtyZXR1cm4hdGhpcy5fbWFrZVNjb3BlTWF0Y2hlcihlKS50ZXN0KHQpfV9tYWtlU2NvcGVNYXRjaGVyKHQpe3JldHVybiB0PXQucmVwbGFjZSgvXFsvZywiXFxbIikucmVwbGFjZSgvXF0vZywiXFxdIiksbmV3IFJlZ0V4cCgiXigiK3QrIikoWz5cXHN+K1suLHs6XVtcXHNcXFNdKik/JCIsIm0iKX1fYXBwbHlTZWxlY3RvclNjb3BlKHQsZSxpKXtyZXR1cm4gdGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKX1fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKXtpZihkMC5sYXN0SW5kZXg9MCxkMC50ZXN0KHQpKXtsZXQgcj10aGlzLnN0cmljdFN0eWxpbmc/YFske2l9XWA6ZTtyZXR1cm4gdC5yZXBsYWNlKEQ5LChvLHMpPT5zLnJlcGxhY2UoLyhbXjpdKikoOiopKC4qKS8sKGEsbCxjLHUpPT5sK3IrYyt1KSkucmVwbGFjZShkMCxyKyIgIil9cmV0dXJuIGUrIiAiK3R9X2FwcGx5U3RyaWN0U2VsZWN0b3JTY29wZSh0LGUsaSl7bGV0IHUsbz0iWyIrKGU9ZS5yZXBsYWNlKC9cW2lzPShbXlxdXSopXF0vZywobSwuLi5DKT0+Q1swXSkpKyJdIixzPW09PntsZXQgQz1tLnRyaW0oKTtpZighQylyZXR1cm4iIjtpZihtLmluZGV4T2Yoc2YpPi0xKUM9dGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKG0sZSxpKTtlbHNle2xldCBfPW0ucmVwbGFjZShkMCwiIik7aWYoXy5sZW5ndGg+MCl7bGV0IHk9Xy5tYXRjaCgvKFteOl0qKSg6KikoLiopLyk7eSYmKEM9eVsxXStvK3lbMl0reVszXSl9fXJldHVybiBDfSxhPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYWNlaG9sZGVycz1bXSx0aGlzLmluZGV4PTAsdD10aGlzLl9lc2NhcGVSZWdleE1hdGNoZXModCwvKFxbW15cXV0qXF0pL2cpLHQ9dGhpcy5fZXNjYXBlUmVnZXhNYXRjaGVzKHQsLyhcXC4pL2cpLHRoaXMuX2NvbnRlbnQ9dC5yZXBsYWNlKC8oOm50aC1bLVx3XSspKFwoW14pXStcKSkvZywoZSxpLHIpPT57bGV0IG89YF9fcGgtJHt0aGlzLmluZGV4fV9fYDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMucHVzaChyKSx0aGlzLmluZGV4KyssaStvfSl9cmVzdG9yZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9fX3BoLShcZCspX18vZywoZSxpKT0+dGhpcy5wbGFjZWhvbGRlcnNbK2ldKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9X2VzY2FwZVJlZ2V4TWF0Y2hlcyh0LGUpe3JldHVybiB0LnJlcGxhY2UoZSwoaSxyKT0+e2xldCBvPWBfX3BoLSR7dGhpcy5pbmRleH1fX2A7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLnB1c2gociksdGhpcy5pbmRleCsrLG99KX19KHQpLGw9IiIsYz0wLGQ9LyggfD58XCt8fig/IT0pKVxzKi9nLGg9ISgodD1hLmNvbnRlbnQoKSkuaW5kZXhPZihzZik+LTEpO2Zvcig7bnVsbCE9PSh1PWQuZXhlYyh0KSk7KXtsZXQgbT11WzFdLEM9dC5zbGljZShjLHUuaW5kZXgpLnRyaW0oKTtoPWh8fEMuaW5kZXhPZihzZik+LTEsbCs9YCR7aD9zKEMpOkN9ICR7bX0gYCxjPWQubGFzdEluZGV4fWxldCBmPXQuc3Vic3RyaW5nKGMpO3JldHVybiBoPWh8fGYuaW5kZXhPZihzZik+LTEsbCs9aD9zKGYpOmYsYS5yZXN0b3JlKGwpfV9pbnNlcnRQb2x5ZmlsbEhvc3RJbkNzc1RleHQodCl7cmV0dXJuIHQucmVwbGFjZShoeWUsZzMpLnJlcGxhY2UocHllLGsxKX19O3JldHVybiBuLm1hcChyPT5pLnNoaW1Dc3NUZXh0KHIsIl9uZ2NvbnRlbnQtJUNPTVAlIiwiX25naG9zdC0lQ09NUCUiKSl9KG4uc3R5bGVzKTpuLnN0eWxlcykucmVkdWNlKChJLEEpPT4oQS50cmltKCkubGVuZ3RoPjAmJkkucHVzaCh0LmdldENvbnN0TGl0ZXJhbChudChBKSkpLEkpLFtdKTt5Lmxlbmd0aD4wJiZpLnNldCgic3R5bGVzIixjcih5KSl9ZWxzZSBuLmVuY2Fwc3VsYXRpb249PT1vZC5FbXVsYXRlZCYmKG4uZW5jYXBzdWxhdGlvbj1vZC5Ob25lKTtuLmVuY2Fwc3VsYXRpb24hPT1vZC5FbXVsYXRlZCYmaS5zZXQoImVuY2Fwc3VsYXRpb24iLG50KG4uZW5jYXBzdWxhdGlvbikpLG51bGwhPT1uLmFuaW1hdGlvbnMmJmkuc2V0KCJkYXRhIixtbChbe2tleToiYW5pbWF0aW9uIix2YWx1ZTpuLmFuaW1hdGlvbnMscXVvdGVkOiExfV0pKSxudWxsIT1sJiZsIT09cWIuRGVmYXVsdCYmaS5zZXQoImNoYW5nZURldGVjdGlvbiIsbnQobCkpO2xldCBtPXhuKEsuZGVmaW5lQ29tcG9uZW50KS5jYWxsRm4oW2kudG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksQz1mdW5jdGlvbihuKXtsZXQgdD1tWShuKTtyZXR1cm4gdC5wdXNoKEtMKG4udGVtcGxhdGUubmdDb250ZW50U2VsZWN0b3JzKSksdC5wdXNoKE5hKG50KG4uaXNTdGFuZGFsb25lKSkpLE5hKHhuKEsuQ29tcG9uZW50RGVjbGFyYXRpb24sdCkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjptLHR5cGU6QyxzdGF0ZW1lbnRzOltdfX0oaSxyLHExKGkuaW50ZXJwb2xhdGlvbikpO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocy5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5KHQsZSxpKXtsZXQgcj1hZih7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LGRlcHM6KG49aS5kZXBzLG51bGw9PW4/bnVsbDpuLm1hcCh5WSkpLHRhcmdldDppLnRhcmdldH0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oci5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5RGVjbGFyYXRpb24odCxlLGkpe2xldCByPWFmKHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOkFycmF5LmlzQXJyYXkoaS5kZXBzKT9pLmRlcHMubWFwKGhxKTppLmRlcHMsdGFyZ2V0OmkudGFyZ2V0fSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y3JlYXRlUGFyc2VTb3VyY2VTcGFuKHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCByPW5ldyBJMSgiIixgaW4gJHtufSAke3R9IGluICR7ZX1gKTtyZXR1cm4gbmV3IFRvKG5ldyB3ZihyLC0xLC0xLC0xKSxuZXcgd2YociwtMSwtMSwtMSkpfSh0LGUsaSl9aml0RXhwcmVzc2lvbih0LGUsaSxyKXtsZXQgbz1bLi4ucixuZXcgYXUoIiRkZWYiLHQsdm9pZCAwLGthLkV4cG9ydGVkKV07cmV0dXJuIHRoaXMuaml0RXZhbHVhdG9yLmV2YWx1YXRlU3RhdGVtZW50cyhpLG8sbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY29udGV4dD10fXJlc29sdmVFeHRlcm5hbFJlZmVyZW5jZSh0KXtpZigiQGFuZ3VsYXIvY29yZSIhPT10Lm1vZHVsZU5hbWUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHRlcm5hbCByZWZlcmVuY2UgdG8gJHt0Lm1vZHVsZU5hbWV9LCBvbmx5IHJlZmVyZW5jZXMgdG8gQGFuZ3VsYXIvY29yZSBhcmUgc3VwcG9ydGVkLmApO2lmKCF0aGlzLmNvbnRleHQuaGFzT3duUHJvcGVydHkodC5uYW1lKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHZhbHVlIHByb3ZpZGVkIGZvciBAYW5ndWxhci9jb3JlIHN5bWJvbCAnJHt0Lm5hbWV9Jy5gKTtyZXR1cm4gdGhpcy5jb250ZXh0W3QubmFtZV19fShlKSwhMCkuJGRlZn19O3ZhciBaMT1mdW5jdGlvbihuLC4uLnQpe2lmKFoxLnRyYW5zbGF0ZSl7bGV0IGk9WjEudHJhbnNsYXRlKG4sdCk7bj1pWzBdLHQ9aVsxXX1sZXQgZT14WShuWzBdLG4ucmF3WzBdKTtmb3IobGV0IGk9MTtpPG4ubGVuZ3RoO2krKyllKz10W2ktMV0reFkobltpXSxuLnJhd1tpXSk7cmV0dXJuIGV9O2Z1bmN0aW9uIHhZKG4sdCl7cmV0dXJuIjoiPT09dC5jaGFyQXQoMCk/bi5zdWJzdHJpbmcoZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MSxpPTE7ZTxuLmxlbmd0aDtlKyssaSsrKWlmKCJcXCI9PT10W2ldKWkrKztlbHNlIGlmKCI6Ij09PW5bZV0pcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnRlcm1pbmF0ZWQgJGxvY2FsaXplIG1ldGFkYXRhIGJsb2NrIGluICIke3R9Ii5gKX0obix0KSsxKTpufSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKS4kbG9jYWxpemU9WjE7dmFyIHczPW51bGw7ZnVuY3Rpb24gZ2woKXtyZXR1cm4gdzN9dmFyIHNUPWNsYXNze30sQnQ9bmV3IHNlKCJEb2N1bWVudFRva2VuIiksUlk9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFIoT1kpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtuZXcgc2UoIkxvY2F0aW9uIEluaXRpYWxpemVkIik7dmFyIE9ZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSWXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX2RvYz1lLHRoaXMuX2luaXQoKX1faW5pdCgpe3RoaXMubG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIGdsKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKGUpe2xldCBpPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGUpfW9uSGFzaENoYW5nZShlKXtsZXQgaT1nbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhvc3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoZSl7dGhpcy5sb2NhdGlvbi5wYXRobmFtZT1lfXB1c2hTdGF0ZShlLGkscil7d1koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZShlLGkscik6dGhpcy5sb2NhdGlvbi5oYXNoPXJ9cmVwbGFjZVN0YXRlKGUsaSxyKXt3WSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGUsaSxyKTp0aGlzLmxvY2F0aW9uLmhhc2g9cn1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2hpc3RvcnkuZ28oZSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgT1koUihCdCkpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtmdW5jdGlvbiB3WSgpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfWZ1bmN0aW9uIGtZKG4sdCl7aWYoMD09bi5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09dC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9MDtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpJiZlKyssdC5zdGFydHNXaXRoKCIvIikmJmUrKywyPT1lP24rdC5zdWJzdHJpbmcoMSk6MT09ZT9uK3Q6bisiLyIrdH1mdW5jdGlvbiBNWShuKXtsZXQgdD1uLm1hdGNoKC8jfFw/fCQvKSxlPXQmJnQuaW5kZXh8fG4ubGVuZ3RoO3JldHVybiBuLnNsaWNlKDAsZS0oIi8iPT09bltlLTFdPzE6MCkpK24uc2xpY2UoZSl9ZnVuY3Rpb24gSWYobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/Ij8iK246bn12YXIgRDM9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFNvKGNDZSl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbENlPW5ldyBzZSgiYXBwQmFzZUhyZWYiKSxjQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEQze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9aT8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/U28oQnQpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBrWSh0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2xldCBpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrSWYodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiByJiZlP2Ake2l9JHtyfWA6aX1wdXNoU3RhdGUoZSxpLHIsbyl7bGV0IHM9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitJZihvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoZSxpLHMpfXJlcGxhY2VTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK0lmKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLGkscyl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSWSksUihsQ2UsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEh4PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fc3ViamVjdD1uZXcgRyx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1lO2xldCBpPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj1NWShTWShpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKHI9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpyLnN0YXRlLHR5cGU6ci50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChlPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGUpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oZSxpPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrSWYoaSkpfW5vcm1hbGl6ZShlKXtyZXR1cm4gbi5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmdC5zdGFydHNXaXRoKG4pP3Quc3Vic3RyaW5nKG4ubGVuZ3RoKTp0fSh0aGlzLl9iYXNlSHJlZixTWShlKSkpfXByZXBhcmVFeHRlcm5hbFVybChlKXtyZXR1cm4gZSYmIi8iIT09ZVswXSYmKGU9Ii8iK2UpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGUpfWdvKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9cmVwbGFjZVN0YXRlKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGUpfW9uVXJsQ2hhbmdlKGUpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChlKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb258fCh0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5zdWJzY3JpYmUoaT0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhpLnVybCxpLnN0YXRlKX0pKSwoKT0+e2xldCBpPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGUpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZT0iIixpKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChyPT5yKGUsaSkpfXN1YnNjcmliZShlLGkscil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6aSxjb21wbGV0ZTpyfSl9fXJldHVybiBuLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPUlmLG4uam9pbldpdGhTbGFzaD1rWSxuLnN0cmlwVHJhaWxpbmdTbGFzaD1NWSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoRDMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEh4KFIoRDMpKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBTWShuKXtyZXR1cm4gbi5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIHJUPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EZWNpbWFsPTBdPSJEZWNpbWFsIixuW24uUGVyY2VudD0xXT0iUGVyY2VudCIsbltuLkN1cnJlbmN5PTJdPSJDdXJyZW5jeSIsbltuLlNjaWVudGlmaWM9M109IlNjaWVudGlmaWMifShyVHx8KHJUPXt9KSksclQpKSgpLEpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5Gb3JtYXQ9MF09IkZvcm1hdCIsbltuLlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUifShKb3x8KEpvPXt9KSksSm8pKSgpLCRpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OYXJyb3c9MF09Ik5hcnJvdyIsbltuLkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsbltuLldpZGU9Ml09IldpZGUiLG5bbi5TaG9ydD0zXT0iU2hvcnQifSgkaXx8KCRpPXt9KSksJGkpKSgpLGtzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5NZWRpdW09MV09Ik1lZGl1bSIsbltuLkxvbmc9Ml09IkxvbmciLG5bbi5GdWxsPTNdPSJGdWxsIn0oa3N8fChrcz17fSkpLGtzKSkoKSxscz0oKCk9PihmdW5jdGlvbihuKXtuW24uRGVjaW1hbD0wXT0iRGVjaW1hbCIsbltuLkdyb3VwPTFdPSJHcm91cCIsbltuLkxpc3Q9Ml09Ikxpc3QiLG5bbi5QZXJjZW50U2lnbj0zXT0iUGVyY2VudFNpZ24iLG5bbi5QbHVzU2lnbj00XT0iUGx1c1NpZ24iLG5bbi5NaW51c1NpZ249NV09Ik1pbnVzU2lnbiIsbltuLkV4cG9uZW50aWFsPTZdPSJFeHBvbmVudGlhbCIsbltuLlN1cGVyc2NyaXB0aW5nRXhwb25lbnQ9N109IlN1cGVyc2NyaXB0aW5nRXhwb25lbnQiLG5bbi5QZXJNaWxsZT04XT0iUGVyTWlsbGUiLG5bbi5JbmZpbml0eT05XT0iSW5maW5pdHkiLG5bbi5OYU49MTBdPSJOYU4iLG5bbi5UaW1lU2VwYXJhdG9yPTExXT0iVGltZVNlcGFyYXRvciIsbltuLkN1cnJlbmN5RGVjaW1hbD0xMl09IkN1cnJlbmN5RGVjaW1hbCIsbltuLkN1cnJlbmN5R3JvdXA9MTNdPSJDdXJyZW5jeUdyb3VwIn0obHN8fChscz17fSkpLGxzKSkoKTtmdW5jdGlvbiBKMShuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlRm9ybWF0XSx0KX1mdW5jdGlvbiAkMShuLHQpe3JldHVybiBfbCh0YShuKVtici5UaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlVGltZUZvcm1hdF0sdCl9ZnVuY3Rpb24gaGQobix0KXtsZXQgZT10YShuKSxpPWVbYnIuTnVtYmVyU3ltYm9sc11bdF07aWYodHlwZW9mIGk+InUiKXtpZih0PT09bHMuQ3VycmVuY3lEZWNpbWFsKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkRlY2ltYWxdO2lmKHQ9PT1scy5DdXJyZW5jeUdyb3VwKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkdyb3VwXX1yZXR1cm4gaX1mdW5jdGlvbiBGWShuKXtpZighbltici5FeHRyYURhdGFdKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBleHRyYSBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJHtuW2JyLkxvY2FsZUlkXX0iLiBVc2UgInJlZ2lzdGVyTG9jYWxlRGF0YSIgdG8gbG9hZCBuZXcgZGF0YS4gU2VlIHRoZSAiSTE4biBndWlkZSIgb24gYW5ndWxhci5pbyB0byBrbm93IG1vcmUuYCl9ZnVuY3Rpb24gX2wobix0KXtmb3IobGV0IGU9dDtlPi0xO2UtLSlpZih0eXBlb2YgbltlXTwidSIpcmV0dXJuIG5bZV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIHYzKG4pe2xldFt0LGVdPW4uc3BsaXQoIjoiKTtyZXR1cm57aG91cnM6K3QsbWludXRlczorZX19dmFyIGJDZT0vXihcZHs0LH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86XC4oXGQrKSk/KT8pPyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvLEJ4PXt9LHhDZT0vKCg/OlteQkVHSExNT1NXWVphYmNkaG1zd3l6J10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGN7MSw2fXxhezEsNX18YnsxLDV9fEJ7MSw1fXxoezEsMn18SHsxLDJ9fG17MSwyfXxzezEsMn18U3sxLDN9fHp7MSw0fXxaezEsNX18T3sxLDR9KSkoW1xzXFNdKikvLHBjPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5TaG9ydEdNVD0xXT0iU2hvcnRHTVQiLG5bbi5Mb25nPTJdPSJMb25nIixuW24uRXh0ZW5kZWQ9M109IkV4dGVuZGVkIn0ocGN8fChwYz17fSkpLHBjKSkoKSxGaT0oKCk9PihmdW5jdGlvbihuKXtuW24uRnVsbFllYXI9MF09IkZ1bGxZZWFyIixuW24uTW9udGg9MV09Ik1vbnRoIixuW24uRGF0ZT0yXT0iRGF0ZSIsbltuLkhvdXJzPTNdPSJIb3VycyIsbltuLk1pbnV0ZXM9NF09Ik1pbnV0ZXMiLG5bbi5TZWNvbmRzPTVdPSJTZWNvbmRzIixuW24uRnJhY3Rpb25hbFNlY29uZHM9Nl09IkZyYWN0aW9uYWxTZWNvbmRzIixuW24uRGF5PTddPSJEYXkifShGaXx8KEZpPXt9KSksRmkpKSgpLGtpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EYXlQZXJpb2RzPTBdPSJEYXlQZXJpb2RzIixuW24uRGF5cz0xXT0iRGF5cyIsbltuLk1vbnRocz0yXT0iTW9udGhzIixuW24uRXJhcz0zXT0iRXJhcyJ9KGtpfHwoa2k9e30pKSxraSkpKCk7ZnVuY3Rpb24gQ0NlKG4sdCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2lmKEVZKG4pKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmIWlzTmFOKG4pKXJldHVybiBuZXcgRGF0ZShuKTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2lmKG49bi50cmltKCksL14oXGR7NH0oLVxkezEsMn0oLVxkezEsMn0pPyk/KSQvLnRlc3Qobikpe2xldFtyLG89MSxzPTFdPW4uc3BsaXQoIi0iKS5tYXAoYT0+K2EpO3JldHVybiBhVChyLG8tMSxzKX1sZXQgaSxlPXBhcnNlRmxvYXQobik7aWYoIWlzTmFOKG4tZSkpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKGk9bi5tYXRjaChiQ2UpKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uZXcgRGF0ZSgwKSxlPTAsaT0wLHI9bls4XT90LnNldFVUQ0Z1bGxZZWFyOnQuc2V0RnVsbFllYXIsbz1uWzhdP3Quc2V0VVRDSG91cnM6dC5zZXRIb3VycztuWzldJiYoZT1OdW1iZXIobls5XStuWzEwXSksaT1OdW1iZXIobls5XStuWzExXSkpLHIuY2FsbCh0LE51bWJlcihuWzFdKSxOdW1iZXIoblsyXSktMSxOdW1iZXIoblszXSkpO2xldCBzPU51bWJlcihuWzRdfHwwKS1lLGE9TnVtYmVyKG5bNV18fDApLWksbD1OdW1iZXIobls2XXx8MCksYz1NYXRoLmZsb29yKDFlMypwYXJzZUZsb2F0KCIwLiIrKG5bN118fDApKSk7cmV0dXJuIG8uY2FsbCh0LHMsYSxsLGMpLHR9KGkpfWxldCB0PW5ldyBEYXRlKG4pO2lmKCFFWSh0KSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb252ZXJ0ICIke259IiBpbnRvIGEgZGF0ZWApO3JldHVybiB0fShuKTt0PXBkKGUsdCl8fHQ7bGV0IGEscz1bXTtmb3IoO3Q7KXtpZihhPXhDZS5leGVjKHQpLCFhKXtzLnB1c2godCk7YnJlYWt9e3M9cy5jb25jYXQoYS5zbGljZSgxKSk7bGV0IHU9cy5wb3AoKTtpZighdSlicmVhazt0PXV9fWxldCBsPXIuZ2V0VGltZXpvbmVPZmZzZXQoKTtpJiYobD1MWShpLGwpLHI9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4obj1uZXcgRGF0ZShuLmdldFRpbWUoKSkpLnNldE1pbnV0ZXMobi5nZXRNaW51dGVzKCkrdCksbn0obiwtMSooTFkodCxyKS1yKSl9KHIsaSkpO2xldCBjPSIiO3JldHVybiBzLmZvckVhY2godT0+e2xldCBkPWZ1bmN0aW9uKG4pe2lmKGIzW25dKXJldHVybiBiM1tuXTtsZXQgdDtzd2l0Y2gobil7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6dD1wcihraS5FcmFzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkdHR0ciOnQ9cHIoa2kuRXJhcywkaS5XaWRlKTticmVhaztjYXNlIkdHR0dHIjp0PXByKGtpLkVyYXMsJGkuTmFycm93KTticmVhaztjYXNlInkiOnQ9aG8oRmkuRnVsbFllYXIsMSwwLCExLCEwKTticmVhaztjYXNlInl5Ijp0PWhvKEZpLkZ1bGxZZWFyLDIsMCwhMCwhMCk7YnJlYWs7Y2FzZSJ5eXkiOnQ9aG8oRmkuRnVsbFllYXIsMywwLCExLCEwKTticmVhaztjYXNlInl5eXkiOnQ9aG8oRmkuRnVsbFllYXIsNCwwLCExLCEwKTticmVhaztjYXNlIlkiOnQ9aVQoMSk7YnJlYWs7Y2FzZSJZWSI6dD1pVCgyLCEwKTticmVhaztjYXNlIllZWSI6dD1pVCgzKTticmVhaztjYXNlIllZWVkiOnQ9aVQoNCk7YnJlYWs7Y2FzZSJNIjpjYXNlIkwiOnQ9aG8oRmkuTW9udGgsMSwxKTticmVhaztjYXNlIk1NIjpjYXNlIkxMIjp0PWhvKEZpLk1vbnRoLDIsMSk7YnJlYWs7Y2FzZSJNTU0iOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIk1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLldpZGUpO2JyZWFrO2Nhc2UiTU1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLk5hcnJvdyk7YnJlYWs7Y2FzZSJMTEwiOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkLEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTCI6dD1wcihraS5Nb250aHMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlIkxMTExMIjp0PXByKGtpLk1vbnRocywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJ3Ijp0PXkzKDEpO2JyZWFrO2Nhc2Uid3ciOnQ9eTMoMik7YnJlYWs7Y2FzZSJXIjp0PXkzKDEsITApO2JyZWFrO2Nhc2UiZCI6dD1obyhGaS5EYXRlLDEpO2JyZWFrO2Nhc2UiZGQiOnQ9aG8oRmkuRGF0ZSwyKTticmVhaztjYXNlImMiOmNhc2UiY2MiOnQ9aG8oRmkuRGF5LDEpO2JyZWFrO2Nhc2UiY2NjIjp0PXByKGtpLkRheXMsJGkuQWJicmV2aWF0ZWQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjIjp0PXByKGtpLkRheXMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2NjIjp0PXByKGtpLkRheXMsJGkuTmFycm93LEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2NjIjp0PXByKGtpLkRheXMsJGkuU2hvcnQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6dD1wcihraS5EYXlzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkVFRUUiOnQ9cHIoa2kuRGF5cywkaS5XaWRlKTticmVhaztjYXNlIkVFRUVFIjp0PXByKGtpLkRheXMsJGkuTmFycm93KTticmVhaztjYXNlIkVFRUVFRSI6dD1wcihraS5EYXlzLCRpLlNob3J0KTticmVhaztjYXNlImEiOmNhc2UiYWEiOmNhc2UiYWFhIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiYWFhYSI6dD1wcihraS5EYXlQZXJpb2RzLCRpLldpZGUpO2JyZWFrO2Nhc2UiYWFhYWEiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3cpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJiYiI6Y2FzZSJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5BYmJyZXZpYXRlZCxKby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5XaWRlLEpvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6dD1wcihraS5EYXlQZXJpb2RzLCRpLkFiYnJldmlhdGVkLEpvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuV2lkZSxKby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQkIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uRm9ybWF0LCEwKTticmVhaztjYXNlImgiOnQ9aG8oRmkuSG91cnMsMSwtMTIpO2JyZWFrO2Nhc2UiaGgiOnQ9aG8oRmkuSG91cnMsMiwtMTIpO2JyZWFrO2Nhc2UiSCI6dD1obyhGaS5Ib3VycywxKTticmVhaztjYXNlIkhIIjp0PWhvKEZpLkhvdXJzLDIpO2JyZWFrO2Nhc2UibSI6dD1obyhGaS5NaW51dGVzLDEpO2JyZWFrO2Nhc2UibW0iOnQ9aG8oRmkuTWludXRlcywyKTticmVhaztjYXNlInMiOnQ9aG8oRmkuU2Vjb25kcywxKTticmVhaztjYXNlInNzIjp0PWhvKEZpLlNlY29uZHMsMik7YnJlYWs7Y2FzZSJTIjp0PWhvKEZpLkZyYWN0aW9uYWxTZWNvbmRzLDEpO2JyZWFrO2Nhc2UiU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMik7YnJlYWs7Y2FzZSJTU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMyk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpjYXNlIlpaWiI6dD1uVChwYy5TaG9ydCk7YnJlYWs7Y2FzZSJaWlpaWiI6dD1uVChwYy5FeHRlbmRlZCk7YnJlYWs7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6Y2FzZSJ6IjpjYXNlInp6IjpjYXNlInp6eiI6dD1uVChwYy5TaG9ydEdNVCk7YnJlYWs7Y2FzZSJPT09PIjpjYXNlIlpaWloiOmNhc2Uienp6eiI6dD1uVChwYy5Mb25nKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBiM1tuXT10LHR9KHUpO2MrPWQ/ZChyLGUsbCk6IicnIj09PXU/IiciOnUucmVwbGFjZSgvKF4nfCckKS9nLCIiKS5yZXBsYWNlKC8nJy9nLCInIil9KSxjfWZ1bmN0aW9uIGFUKG4sdCxlKXtsZXQgaT1uZXcgRGF0ZSgwKTtyZXR1cm4gaS5zZXRGdWxsWWVhcihuLHQsZSksaS5zZXRIb3VycygwLDAsMCksaX1mdW5jdGlvbiBwZChuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiB0YShuKVtici5Mb2NhbGVJZF19KG4pO2lmKEJ4W2VdPUJ4W2VdfHx7fSxCeFtlXVt0XSlyZXR1cm4gQnhbZV1bdF07bGV0IGk9IiI7c3dpdGNoKHQpe2Nhc2Uic2hvcnREYXRlIjppPUoxKG4sa3MuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtRGF0ZSI6aT1KMShuLGtzLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nRGF0ZSI6aT1KMShuLGtzLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbERhdGUiOmk9SjEobixrcy5GdWxsKTticmVhaztjYXNlInNob3J0VGltZSI6aT0kMShuLGtzLlNob3J0KTticmVhaztjYXNlIm1lZGl1bVRpbWUiOmk9JDEobixrcy5NZWRpdW0pO2JyZWFrO2Nhc2UibG9uZ1RpbWUiOmk9JDEobixrcy5Mb25nKTticmVhaztjYXNlImZ1bGxUaW1lIjppPSQxKG4sa3MuRnVsbCk7YnJlYWs7Y2FzZSJzaG9ydCI6bGV0IHI9cGQobiwic2hvcnRUaW1lIiksbz1wZChuLCJzaG9ydERhdGUiKTtpPXRUKGVUKG4sa3MuU2hvcnQpLFtyLG9dKTticmVhaztjYXNlIm1lZGl1bSI6bGV0IHM9cGQobiwibWVkaXVtVGltZSIpLGE9cGQobiwibWVkaXVtRGF0ZSIpO2k9dFQoZVQobixrcy5NZWRpdW0pLFtzLGFdKTticmVhaztjYXNlImxvbmciOmxldCBsPXBkKG4sImxvbmdUaW1lIiksYz1wZChuLCJsb25nRGF0ZSIpO2k9dFQoZVQobixrcy5Mb25nKSxbbCxjXSk7YnJlYWs7Y2FzZSJmdWxsIjpsZXQgdT1wZChuLCJmdWxsVGltZSIpLGQ9cGQobiwiZnVsbERhdGUiKTtpPXRUKGVUKG4sa3MuRnVsbCksW3UsZF0pfXJldHVybiBpJiYoQnhbZV1bdF09aSksaX1mdW5jdGlvbiB0VChuLHQpe3JldHVybiB0JiYobj1uLnJlcGxhY2UoL1x7KFtefV0rKX0vZyxmdW5jdGlvbihlLGkpe3JldHVybiBudWxsIT10JiZpIGluIHQ/dFtpXTplfSkpLG59ZnVuY3Rpb24gZGMobix0LGU9Ii0iLGkscil7bGV0IG89IiI7KG48MHx8ciYmbjw9MCkmJihyP249MS1uOihuPS1uLG89ZSkpO2xldCBzPVN0cmluZyhuKTtmb3IoO3MubGVuZ3RoPHQ7KXM9IjAiK3M7cmV0dXJuIGkmJihzPXMuc2xpY2Uocy5sZW5ndGgtdCkpLG8rc31mdW5jdGlvbiBobyhuLHQsZT0wLGk9ITEscj0hMSl7cmV0dXJuIGZ1bmN0aW9uKG8scyl7bGV0IGE9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSBGaS5GdWxsWWVhcjpyZXR1cm4gdC5nZXRGdWxsWWVhcigpO2Nhc2UgRmkuTW9udGg6cmV0dXJuIHQuZ2V0TW9udGgoKTtjYXNlIEZpLkRhdGU6cmV0dXJuIHQuZ2V0RGF0ZSgpO2Nhc2UgRmkuSG91cnM6cmV0dXJuIHQuZ2V0SG91cnMoKTtjYXNlIEZpLk1pbnV0ZXM6cmV0dXJuIHQuZ2V0TWludXRlcygpO2Nhc2UgRmkuU2Vjb25kczpyZXR1cm4gdC5nZXRTZWNvbmRzKCk7Y2FzZSBGaS5GcmFjdGlvbmFsU2Vjb25kczpyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIEZpLkRheTpyZXR1cm4gdC5nZXREYXkoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBEYXRlVHlwZSB2YWx1ZSAiJHtufSIuYCl9fShuLG8pO2lmKChlPjB8fGE+LWUpJiYoYSs9ZSksbj09PUZpLkhvdXJzKTA9PT1hJiYtMTI9PT1lJiYoYT0xMik7ZWxzZSBpZihuPT09RmkuRnJhY3Rpb25hbFNlY29uZHMpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGRjKG4sMykuc3Vic3RyaW5nKDAsdCl9KGEsdCk7bGV0IGw9aGQocyxscy5NaW51c1NpZ24pO3JldHVybiBkYyhhLHQsbCxpLHIpfX1mdW5jdGlvbiBwcihuLHQsZT1Kby5Gb3JtYXQsaT0hMSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvKXtzd2l0Y2goZSl7Y2FzZSBraS5Nb250aHM6cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10YShuKSxvPV9sKFtpW2JyLk1vbnRoc0Zvcm1hdF0saVtici5Nb250aHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtuLmdldE1vbnRoKCldO2Nhc2Uga2kuRGF5czpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPXRhKG4pLG89X2woW2lbYnIuRGF5c0Zvcm1hdF0saVtici5EYXlzU3RhbmRhbG9uZV1dLHQpO3JldHVybiBfbChvLGUpfSh0LHIsaSlbbi5nZXREYXkoKV07Y2FzZSBraS5EYXlQZXJpb2RzOmxldCBzPW4uZ2V0SG91cnMoKSxhPW4uZ2V0TWludXRlcygpO2lmKG8pe2xldCBjPWZ1bmN0aW9uKG4pe2xldCB0PXRhKG4pO3JldHVybiBGWSh0KSwodFtici5FeHRyYURhdGFdWzJdfHxbXSkubWFwKGk9PiJzdHJpbmciPT10eXBlb2YgaT92MyhpKTpbdjMoaVswXSksdjMoaVsxXSldKX0odCksdT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobik7RlkoaSk7bGV0IG89X2woW2lbYnIuRXh0cmFEYXRhXVswXSxpW2JyLkV4dHJhRGF0YV1bMV1dLHQpfHxbXTtyZXR1cm4gX2wobyxlKXx8W119KHQscixpKSxkPWMuZmluZEluZGV4KHA9PntpZihBcnJheS5pc0FycmF5KHApKXtsZXRbaCxmXT1wLG09cz49aC5ob3VycyYmYT49aC5taW51dGVzLEM9czxmLmhvdXJzfHxzPT09Zi5ob3VycyYmYTxmLm1pbnV0ZXM7aWYoaC5ob3VyczxmLmhvdXJzKXtpZihtJiZDKXJldHVybiEwfWVsc2UgaWYobXx8QylyZXR1cm4hMH1lbHNlIGlmKHAuaG91cnM9PT1zJiZwLm1pbnV0ZXM9PT1hKXJldHVybiEwO3JldHVybiExfSk7aWYoLTEhPT1kKXJldHVybiB1W2RdfXJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobiksbz1fbChbaVtici5EYXlQZXJpb2RzRm9ybWF0XSxpW2JyLkRheVBlcmlvZHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtzPDEyPzA6MV07Y2FzZSBraS5FcmFzOnJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBfbCh0YShuKVtici5FcmFzXSx0KX0odCxpKVtuLmdldEZ1bGxZZWFyKCk8PTA/MDoxXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7ZX1gKX19KHIsbyxuLHQsZSxpKX19ZnVuY3Rpb24gblQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxpKXtsZXQgcj0tMSppLG89aGQoZSxscy5NaW51c1NpZ24pLHM9cj4wP01hdGguZmxvb3Ioci82MCk6TWF0aC5jZWlsKHIvNjApO3N3aXRjaChuKXtjYXNlIHBjLlNob3J0OnJldHVybihyPj0wPyIrIjoiIikrZGMocywyLG8pK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5TaG9ydEdNVDpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK2RjKHMsMSxvKTtjYXNlIHBjLkxvbmc6cmV0dXJuIkdNVCIrKHI+PTA/IisiOiIiKStkYyhzLDIsbykrIjoiK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5FeHRlbmRlZDpyZXR1cm4gMD09PWk/IloiOihyPj0wPyIrIjoiIikrZGMocywyLG8pKyI6IitkYyhNYXRoLmFicyhyJTYwKSwyLG8pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHpvbmUgd2lkdGggIiR7bn0iYCl9fX1mdW5jdGlvbiBOWShuKXtyZXR1cm4gYVQobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSsoNC1uLmdldERheSgpKSl9ZnVuY3Rpb24geTMobix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcjtpZih0KXtsZXQgbz1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLmdldERheSgpLTEscz1lLmdldERhdGUoKTtyPTErTWF0aC5mbG9vcigocytvKS83KX1lbHNle2xldCBvPU5ZKGUpLHM9ZnVuY3Rpb24obil7bGV0IHQ9YVQobiwwLDEpLmdldERheSgpO3JldHVybiBhVChuLDAsMSsodDw9ND80OjExKS10KX0oby5nZXRGdWxsWWVhcigpKSxhPW8uZ2V0VGltZSgpLXMuZ2V0VGltZSgpO3I9MStNYXRoLnJvdW5kKGEvNjA0OGU1KX1yZXR1cm4gZGMocixuLGhkKGksbHMuTWludXNTaWduKSl9fWZ1bmN0aW9uIGlUKG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGRjKE5ZKGUpLmdldEZ1bGxZZWFyKCksbixoZChpLGxzLk1pbnVzU2lnbiksdCl9fXZhciBiMz17fTtmdW5jdGlvbiBMWShuLHQpe249bi5yZXBsYWNlKC86L2csIiIpO2xldCBlPURhdGUucGFyc2UoIkphbiAwMSwgMTk3MCAwMDowMDowMCAiK24pLzZlNDtyZXR1cm4gaXNOYU4oZSk/dDplfWZ1bmN0aW9uIEVZKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4udmFsdWVPZigpKX12YXIgT0NlPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvO2Z1bmN0aW9uIEEzKG4sdCxlKXtsZXQgaT1mdW5jdGlvbihuLHQpe3JldHVybiB0YShuKVtici5OdW1iZXJGb3JtYXRzXVt0XX0odCxyVC5EZWNpbWFsKSxyPWZ1bmN0aW9uKG4sdD0iLSIpe2xldCBlPXttaW5JbnQ6MSxtaW5GcmFjOjAsbWF4RnJhYzowLHBvc1ByZToiIixwb3NTdWY6IiIsbmVnUHJlOiIiLG5lZ1N1ZjoiIixnU2l6ZTowLGxnU2l6ZTowfSxpPW4uc3BsaXQoIjsiKSxyPWlbMF0sbz1pWzFdLHM9LTEhPT1yLmluZGV4T2YoIi4iKT9yLnNwbGl0KCIuIik6W3Iuc3Vic3RyaW5nKDAsci5sYXN0SW5kZXhPZigiMCIpKzEpLHIuc3Vic3RyaW5nKHIubGFzdEluZGV4T2YoIjAiKSsxKV0sYT1zWzBdLGw9c1sxXXx8IiI7ZS5wb3NQcmU9YS5zdWJzdHJpbmcoMCxhLmluZGV4T2YoIiMiKSk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBkPWwuY2hhckF0KHUpOyIwIj09PWQ/ZS5taW5GcmFjPWUubWF4RnJhYz11KzE6IiMiPT09ZD9lLm1heEZyYWM9dSsxOmUucG9zU3VmKz1kfWxldCBjPWEuc3BsaXQoIiwiKTtpZihlLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxlLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxvKXtsZXQgdT1yLmxlbmd0aC1lLnBvc1ByZS5sZW5ndGgtZS5wb3NTdWYubGVuZ3RoLGQ9by5pbmRleE9mKCIjIik7ZS5uZWdQcmU9by5zdWJzdHJpbmcoMCxkKS5yZXBsYWNlKC8nL2csIiIpLGUubmVnU3VmPW8uc2xpY2UoZCt1KS5yZXBsYWNlKC8nL2csIiIpfWVsc2UgZS5uZWdQcmU9dCtlLnBvc1ByZSxlLm5lZ1N1Zj1lLnBvc1N1ZjtyZXR1cm4gZX0oaSxoZCh0LGxzLk1pbnVzU2lnbikpO3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIsbyxzPSExKXtsZXQgYT0iIixsPSExO2lmKGlzRmluaXRlKG4pKXtsZXQgYz1mdW5jdGlvbihuKXtsZXQgaSxyLG8scyxhLHQ9TWF0aC5hYnMobikrIiIsZT0wO2Zvcigocj10LmluZGV4T2YoIi4iKSk+LTEmJih0PXQucmVwbGFjZSgiLiIsIiIpKSwobz10LnNlYXJjaCgvZS9pKSk+MD8ocjwwJiYocj1vKSxyKz0rdC5zbGljZShvKzEpLHQ9dC5zdWJzdHJpbmcoMCxvKSk6cjwwJiYocj10Lmxlbmd0aCksbz0wOyIwIj09PXQuY2hhckF0KG8pO28rKyk7aWYobz09PShhPXQubGVuZ3RoKSlpPVswXSxyPTE7ZWxzZXtmb3IoYS0tOyIwIj09PXQuY2hhckF0KGEpOylhLS07Zm9yKHItPW8saT1bXSxzPTA7bzw9YTtvKysscysrKWlbc109TnVtYmVyKHQuY2hhckF0KG8pKX1yZXR1cm4gcj4yMiYmKGk9aS5zcGxpY2UoMCwyMSksZT1yLTEscj0xKSx7ZGlnaXRzOmksZXhwb25lbnQ6ZSxpbnRlZ2VyTGVuOnJ9fShuKTtzJiYoYz1mdW5jdGlvbihuKXtpZigwPT09bi5kaWdpdHNbMF0pcmV0dXJuIG47bGV0IHQ9bi5kaWdpdHMubGVuZ3RoLW4uaW50ZWdlckxlbjtyZXR1cm4gbi5leHBvbmVudD9uLmV4cG9uZW50Kz0yOigwPT09dD9uLmRpZ2l0cy5wdXNoKDAsMCk6MT09PXQmJm4uZGlnaXRzLnB1c2goMCksbi5pbnRlZ2VyTGVuKz0yKSxufShjKSk7bGV0IHU9dC5taW5JbnQsZD10Lm1pbkZyYWMscD10Lm1heEZyYWM7aWYobyl7bGV0IHk9by5tYXRjaChPQ2UpO2lmKG51bGw9PT15KXRocm93IG5ldyBFcnJvcihgJHtvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7bGV0IEk9eVsxXSxBPXlbM10sTz15WzVdO251bGwhPUkmJih1PUMzKEkpKSxudWxsIT1BJiYoZD1DMyhBKSksbnVsbCE9Tz9wPUMzKE8pOm51bGwhPUEmJmQ+cCYmKHA9ZCl9IWZ1bmN0aW9uKG4sdCxlKXtpZih0PmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGZyYWN0aW9uICgke3R9KSBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAoJHtlfSkuYCk7bGV0IGk9bi5kaWdpdHMscj1pLmxlbmd0aC1uLmludGVnZXJMZW4sbz1NYXRoLm1pbihNYXRoLm1heCh0LHIpLGUpLHM9bytuLmludGVnZXJMZW4sYT1pW3NdO2lmKHM+MCl7aS5zcGxpY2UoTWF0aC5tYXgobi5pbnRlZ2VyTGVuLHMpKTtmb3IobGV0IGQ9cztkPGkubGVuZ3RoO2QrKylpW2RdPTB9ZWxzZXtyPU1hdGgubWF4KDAsciksbi5pbnRlZ2VyTGVuPTEsaS5sZW5ndGg9TWF0aC5tYXgoMSxzPW8rMSksaVswXT0wO2ZvcihsZXQgZD0xO2Q8cztkKyspaVtkXT0wfWlmKGE+PTUpaWYocy0xPDApe2ZvcihsZXQgZD0wO2Q+cztkLS0paS51bnNoaWZ0KDApLG4uaW50ZWdlckxlbisrO2kudW5zaGlmdCgxKSxuLmludGVnZXJMZW4rK31lbHNlIGlbcy0xXSsrO2Zvcig7cjxNYXRoLm1heCgwLG8pO3IrKylpLnB1c2goMCk7bGV0IGw9MCE9PW8sYz10K24uaW50ZWdlckxlbix1PWkucmVkdWNlUmlnaHQoZnVuY3Rpb24oZCxwLGgsZil7cmV0dXJuIGZbaF09KHArPWQpPDEwP3A6cC0xMCxsJiYoMD09PWZbaF0mJmg+PWM/Zi5wb3AoKTpsPSExKSxwPj0xMD8xOjB9LDApO3UmJihpLnVuc2hpZnQodSksbi5pbnRlZ2VyTGVuKyspfShjLGQscCk7bGV0IGg9Yy5kaWdpdHMsZj1jLmludGVnZXJMZW4sbT1jLmV4cG9uZW50LEM9W107Zm9yKGw9aC5ldmVyeSh5PT4heSk7Zjx1O2YrKyloLnVuc2hpZnQoMCk7Zm9yKDtmPDA7ZisrKWgudW5zaGlmdCgwKTtmPjA/Qz1oLnNwbGljZShmLGgubGVuZ3RoKTooQz1oLGg9WzBdKTtsZXQgXz1bXTtmb3IoaC5sZW5ndGg+PXQubGdTaXplJiZfLnVuc2hpZnQoaC5zcGxpY2UoLXQubGdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGg+dC5nU2l6ZTspXy51bnNoaWZ0KGguc3BsaWNlKC10LmdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGgmJl8udW5zaGlmdChoLmpvaW4oIiIpKSxhPV8uam9pbihoZChlLGkpKSxDLmxlbmd0aCYmKGErPWhkKGUscikrQy5qb2luKCIiKSksbSYmKGErPWhkKGUsbHMuRXhwb25lbnRpYWwpKyIrIittKX1lbHNlIGE9aGQoZSxscy5JbmZpbml0eSk7cmV0dXJuIGE9bjwwJiYhbD90Lm5lZ1ByZSthK3QubmVnU3VmOnQucG9zUHJlK2ErdC5wb3NTdWYsYX0obixyLHQsbHMuR3JvdXAsbHMuRGVjaW1hbCxlKX1mdW5jdGlvbiBDMyhuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fWZ1bmN0aW9uIHVUKG4sdCl7dD1lbmNvZGVVUklDb21wb25lbnQodCk7Zm9yKGxldCBlIG9mIG4uc3BsaXQoIjsiKSl7bGV0IGk9ZS5pbmRleE9mKCI9IiksW3Isb109LTE9PWk/W2UsIiJdOltlLnNsaWNlKDAsaSksZS5zbGljZShpKzEpXTtpZihyLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKX1yZXR1cm4gbnVsbH12YXIgUG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9ZSx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9aSx0aGlzLl9uZ0VsPXIsdGhpcy5fcmVuZGVyZXI9byx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5faW5pdGlhbENsYXNzZXM9W10sdGhpcy5fcmF3Q2xhc3M9bnVsbH1zZXQga2xhc3MoZSl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiBlP2Uuc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX1zZXQgbmdDbGFzcyhlKXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgvXHMrLyk6ZSx0aGlzLl9yYXdDbGFzcyYmKHpFKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7bGV0IGU9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXMoZSl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7bGV0IGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fV9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaS5rZXksaS5jdXJyZW50VmFsdWUpKSxlLmZvckVhY2hDaGFuZ2VkSXRlbShpPT50aGlzLl90b2dnbGVDbGFzcyhpLmtleSxpLmN1cnJlbnRWYWx1ZSkpLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PntpLnByZXZpb3VzVmFsdWUmJnRoaXMuX3RvZ2dsZUNsYXNzKGkua2V5LCExKX0pfV9hcHBseUl0ZXJhYmxlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+e2lmKCJzdHJpbmciIT10eXBlb2YgaS5pdGVtKXRocm93IG5ldyBFcnJvcihgTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAke2NvKGkuaXRlbSl9YCk7dGhpcy5fdG9nZ2xlQ2xhc3MoaS5pdGVtLCEwKX0pLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGkuaXRlbSwhMSkpfV9hcHBseUNsYXNzZXMoZSl7ZSYmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQ/ZS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITApKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksISFlW2ldKSkpfV9yZW1vdmVDbGFzc2VzKGUpe2UmJihBcnJheS5pc0FycmF5KGUpfHxlIGluc3RhbmNlb2YgU2V0P2UuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSkpfV90b2dnbGVDbGFzcyhlLGkpeyhlPWUudHJpbSgpKSYmZS5zcGxpdCgvXHMrL2cpLmZvckVhY2gocj0+e2k/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHRjKSx3KFZiKSx3KEFlKSx3KFhjKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHluPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0Zvck9mKGUpe3RoaXMuX25nRm9yT2Y9ZSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShlKXt0aGlzLl90cmFja0J5Rm49ZX1nZXQgbmdGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn1zZXQgbmdGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fdGVtcGxhdGU9ZSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7bGV0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X2FwcGx5Q2hhbmdlcyhlKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbigocixvLHMpPT57aWYobnVsbD09ci5wcmV2aW91c0luZGV4KWkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9aSx0aGlzLmNvdW50PXJ9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX0oci5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1zP3ZvaWQgMDpzKTtlbHNlIGlmKG51bGw9PXMpaS5yZW1vdmUobnVsbD09PW8/dm9pZCAwOm8pO2Vsc2UgaWYobnVsbCE9PW8pe2xldCBhPWkuZ2V0KG8pO2kubW92ZShhLHMpLEFZKGEscil9fSk7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKXtsZXQgYT1pLmdldChyKS5jb250ZXh0O2EuaW5kZXg9cixhLmNvdW50PW8sYS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uocj0+e0FZKGkuZ2V0KHIuY3VycmVudEluZGV4KSxyKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCk7ZnVuY3Rpb24gQVkobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX12YXIgWGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl9jb250ZXh0PW5ldyBTMyx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWl9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtJWSgibmdJZlRoZW4iLGUpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShlKXtJWSgibmdJZkVsc2UiLGUpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1lLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFMzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19O2Z1bmN0aW9uIElZKG4sdCl7aWYodCYmIXQuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtjbyh0KX0nLmApfXZhciBjVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19LGhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChlKXt0aGlzLl9uZ1N3aXRjaD1lLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoZSl7dGhpcy5fZGVmYXVsdFZpZXdzfHwodGhpcy5fZGVmYXVsdFZpZXdzPVtdKSx0aGlzLl9kZWZhdWx0Vmlld3MucHVzaChlKX1fbWF0Y2hDYXNlKGUpe2xldCBpPWU9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxpfV91cGRhdGVEZWZhdWx0Q2FzZXMoZSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzJiZlIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWU7Zm9yKGxldCBpPTA7aTx0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoO2krKyl0aGlzLl9kZWZhdWx0Vmlld3NbaV0uZW5mb3JjZVN0YXRlKGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLElyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMubmdTd2l0Y2g9cixyLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgY1QoZSxpKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhPaSksdyhociw5KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLENwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3IuX2FkZERlZmF1bHQobmV3IGNUKGUsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSx3KE9pKSx3KGhyLDkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx3cD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1pLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGUpe3RoaXMuX25nU3R5bGU9ZSwhdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9zZXRTdHlsZShlLGkpe2xldFtyLG9dPWUuc3BsaXQoIi4iKSxzPS0xPT09ci5pbmRleE9mKCItIik/dm9pZCAwOmFsLkRhc2hDYXNlO251bGwhPWk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsbz9gJHtpfSR7b31gOmkscyk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIscyl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhWYiksdyhYYykpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxObz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoZSl7aWYoZS5uZ1RlbXBsYXRlT3V0bGV0fHxlLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZpLnJlbW92ZShpLmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMubmdUZW1wbGF0ZU91dGxldCl7bGV0e25nVGVtcGxhdGVPdXRsZXQ6cixuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpvLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjpzfT10aGlzO3RoaXMuX3ZpZXdSZWY9aS5jcmVhdGVFbWJlZGRlZFZpZXcocixvLHM/e2luamVjdG9yOnN9OnZvaWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZlLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbenRdfSksbn0pKCk7ZnVuY3Rpb24gZFQobix0KXtyZXR1cm4gbmV3IE10KDIxMDAsITEpfXZhciB6Q2U9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxpPT57dGhyb3cgaX0pfWRpc3Bvc2UodCl7fX0sakNlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppPT57dGhyb3cgaX19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX19LGZ0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1lfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLl9vYmo/ZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZTooZSYmdGhpcy5fc3Vic2NyaWJlKGUpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxpPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLGkpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYobjAoZSkpcmV0dXJuIHpDZTtpZihoTihlKSlyZXR1cm4gakNlO3Rocm93IGRUKCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKXtlPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9aSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uLDE2KSl9LG4uXHUwMjc1cGlwZT1CZyh7bmFtZToiYXN5bmMiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxHQ2U9bmV3IHNlKCJEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSIpLFUwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmxvY2FsZT1lLHRoaXMuZGVmYXVsdFRpbWV6b25lPWl9dHJhbnNmb3JtKGUsaT0ibWVkaXVtRGF0ZSIscixvKXtpZihudWxsPT1lfHwiIj09PWV8fGUhPWUpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBDQ2UoZSxpLG98fHRoaXMubG9jYWxlLHI/P3RoaXMuZGVmYXVsdFRpbWV6b25lPz92b2lkIDApfWNhdGNoKHMpe3Rocm93IGRUKCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHJkLDE2KSx3KEdDZSwyNCkpfSxuLlx1MDI3NXBpcGU9Qmcoe25hbWU6ImRhdGUiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx2bD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xvY2FsZT1lfXRyYW5zZm9ybShlLGkscil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiEobnVsbD09bnx8IiI9PT1ufHxuIT1uKX0oZSkpcmV0dXJuIG51bGw7cj1yfHx0aGlzLl9sb2NhbGU7dHJ5e2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWlzTmFOKE51bWJlcihuKS1wYXJzZUZsb2F0KG4pKSlyZXR1cm4gTnVtYmVyKG4pO2lmKCJudW1iZXIiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoYCR7bn0gaXMgbm90IGEgbnVtYmVyYCk7cmV0dXJuIG59KGUpO3JldHVybiBBMyhvLHIsaSl9Y2F0Y2gobyl7dGhyb3cgZFQoKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQsMTYpKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJudW1iZXIiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxCWT0oKCk9PntjbGFzcyBue3RyYW5zZm9ybShlLGkscil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZighdGhpcy5zdXBwb3J0cyhlKSl0aHJvdyBkVCgpO3JldHVybiBlLnNsaWNlKGkscil9c3VwcG9ydHMoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJzbGljZSIsdHlwZTpuLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLG59KSgpLGtlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxJMz0iYnJvd3NlciI7ZnVuY3Rpb24gcFQobil7cmV0dXJuIG49PT1JM31uZXcgS2woIjE0LjIuMTEiKTt2YXIgUGY9Y2xhc3N7fTtmdW5jdGlvbiBLQ2Uobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiLyIpP24uc2xpY2UoMSk6bn1uZXcgc2UoIlBSRUNPTk5FQ1RfQ0hFQ0tfQkxPQ0tMSVNUIik7dmFyIFpDZT1uPT5uLnNyYyxKQ2U9bmV3IHNlKCJJbWFnZUxvYWRlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PlpDZX0pO2Z1bmN0aW9uIGhUKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGkscj17ZW5zdXJlUHJlY29ubmVjdDohMH0pe3JldHVybiBmdW5jdGlvbihuKXtpZigic3RyaW5nIiE9dHlwZW9mIG58fCIiPT09bi50cmltKCkpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgVVJMKG4pLCEwfWNhdGNoe3JldHVybiExfX0oaSl8fGZ1bmN0aW9uKG4sdCl7dGhyb3cgbmV3IE10KDI5NTksITEpfSgpLGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uZW5kc1dpdGgoIi8iKT9uLnNsaWNlKDAsLTEpOm59KGkpLFt7cHJvdmlkZTpKQ2UsdXNlVmFsdWU6YT0+KGZ1bmN0aW9uKG4pe3JldHVybi9eaHR0cHM/OlwvXC8vLnRlc3Qobil9KGEuc3JjKSYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoMjk1OSwhMSl9KCksbihpLHsuLi5hLHNyYzpLQ2UoYS5zcmMpfSkpfV19fWhUKGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZvcm1hdD1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd2lkdGg9JHt0LndpZHRofWApLGAke259L2Nkbi1jZ2kvaW1hZ2UvJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPSJmX2F1dG8scV9hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd18ke3Qud2lkdGh9YCksYCR7bn0vaW1hZ2UvdXBsb2FkLyR7ZX0vJHt0LnNyY31gfSksaFQoZnVuY3Rpb24obix0KXtsZXQgZT0idHI6cS1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsdy0ke3Qud2lkdGh9YCksYCR7bn0vJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBVUkwoYCR7bn0vJHt0LnNyY31gKTtyZXR1cm4gZS5zZWFyY2hQYXJhbXMuc2V0KCJhdXRvIiwiZm9ybWF0IiksdC53aWR0aCYmZS5zZWFyY2hQYXJhbXMuc2V0KCJ3Iix0LndpZHRoLnRvU3RyaW5nKCkpLGUuaHJlZn0pO3ZhciBmVCxSMz1jbGFzcyBleHRlbmRzIHNUe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX0sR3g9Y2xhc3MgZXh0ZW5kcyBSM3tzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24obil7dzN8fCh3Mz1uKX0obmV3IEd4KX1vbkFuZENhbmNlbCh0LGUsaSl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLGksITEpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSwhMSl9fWRpc3BhdGNoRXZlbnQodCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9cmVtb3ZlKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldCh0LGUpe3JldHVybiJ3aW5kb3ciPT09ZT93aW5kb3c6ImRvY3VtZW50Ij09PWU/dDoiYm9keSI9PT1lP3QuYm9keTpudWxsfWdldEJhc2VIcmVmKHQpe2xldCBlPShVeD1VeHx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpKT9VeC5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1lP251bGw6ZnVuY3Rpb24obil7KGZUPWZUfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLnNldEF0dHJpYnV0ZSgiaHJlZiIsbik7bGV0IHQ9ZlQucGF0aG5hbWU7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCk/dDpgLyR7dH1gfShlKX1yZXNldEJhc2VFbGVtZW50KCl7VXg9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKHQpe3JldHVybiB1VChkb2N1bWVudC5jb29raWUsdCl9fSxVeD1udWxsLFdZPW5ldyBzZSgiVFJBTlNJVElPTl9JRCIpLGN3ZT1be3Byb3ZpZGU6dk4sdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuKCk9PntlLmdldChaRSkuZG9uZVByb21pc2UudGhlbigoKT0+e2xldCBpPWdsKCkscj10LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlW25nLXRyYW5zaXRpb249IiR7bn0iXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKWkucmVtb3ZlKHJbb10pfSl9fSxkZXBzOltXWSxCdCx6bl0sbXVsdGk6ITB9XSx1d2U9KCgpPT57Y2xhc3MgbntidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG1UPW5ldyBzZSgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLGdUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl96b25lPWksdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxlLmZvckVhY2gocj0+ci5tYW5hZ2VyPXRoaXMpLHRoaXMuX3BsdWdpbnM9ZS5zbGljZSgpLnJldmVyc2UoKX1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRFdmVudExpc3RlbmVyKGUsaSxyKX1hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQbHVnaW5Gb3IoZSl7bGV0IGk9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KGUpO2lmKGkpcmV0dXJuIGk7bGV0IHI9dGhpcy5fcGx1Z2lucztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXTtpZihzLnN1cHBvcnRzKGUpKXJldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQoZSxzKSxzfXRocm93IG5ldyBFcnJvcihgTm8gZXZlbnQgbWFuYWdlciBwbHVnaW4gZm91bmQgZm9yIGV2ZW50ICR7ZX1gKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihtVCksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9UPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fWFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLGkpe2xldCByPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7cn0gZm9yIGV2ZW50ICR7ZX1gKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxpKX19LHFZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9zdHlsZXNTZXQ9bmV3IFNldH1hZGRTdHlsZXMoZSl7bGV0IGk9bmV3IFNldDtlLmZvckVhY2gocj0+e3RoaXMuX3N0eWxlc1NldC5oYXMocil8fCh0aGlzLl9zdHlsZXNTZXQuYWRkKHIpLGkuYWRkKHIpKX0pLHRoaXMub25TdHlsZXNBZGRlZChpKX1vblN0eWxlc0FkZGVkKGUpe31nZXRBbGxTdHlsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zdHlsZXNTZXQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx6eD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcVl7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZSx0aGlzLl9ob3N0Tm9kZXM9bmV3IE1hcCx0aGlzLl9ob3N0Tm9kZXMuc2V0KGUuaGVhZCxbXSl9X2FkZFN0eWxlc1RvSG9zdChlLGkscil7ZS5mb3JFYWNoKG89PntsZXQgcz10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtzLnRleHRDb250ZW50PW8sci5wdXNoKGkuYXBwZW5kQ2hpbGQocykpfSl9YWRkSG9zdChlKXtsZXQgaT1bXTt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LGUsaSksdGhpcy5faG9zdE5vZGVzLnNldChlLGkpfXJlbW92ZUhvc3QoZSl7bGV0IGk9dGhpcy5faG9zdE5vZGVzLmdldChlKTtpJiZpLmZvckVhY2goVlkpLHRoaXMuX2hvc3ROb2Rlcy5kZWxldGUoZSl9b25TdHlsZXNBZGRlZChlKXt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaCgoaSxyKT0+e3RoaXMuX2FkZFN0eWxlc1RvSG9zdChlLHIsaSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGU9PmUuZm9yRWFjaChWWSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gVlkobil7Z2woKS5yZW1vdmUobil9dmFyIFAzPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LE4zPS8lQ09NUCUvZztmdW5jdGlvbiB2VChuLHQsZSl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT92VChuLHIsZSk6KHI9ci5yZXBsYWNlKE4zLG4pLGUucHVzaChyKSl9cmV0dXJuIGV9ZnVuY3Rpb24gVVkobil7cmV0dXJuIHQ9PntpZigiX19uZ1Vud3JhcF9fIj09PXQpcmV0dXJuIG47ITE9PT1uKHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITEpfX12YXIgang9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5ldmVudE1hbmFnZXI9ZSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9aSx0aGlzLmFwcElkPXIsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IFd4KGUpfWNyZWF0ZVJlbmRlcmVyKGUsaSl7aWYoIWV8fCFpKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goaS5lbmNhcHN1bGF0aW9uKXtjYXNlIHdhLkVtdWxhdGVkOntsZXQgcj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGkuaWQpO3JldHVybiByfHwocj1uZXcgazModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGksdGhpcy5hcHBJZCksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChpLmlkLHIpKSxyLmFwcGx5VG9Ib3N0KGUpLHJ9Y2FzZSAxOmNhc2Ugd2EuU2hhZG93RG9tOnJldHVybiBuZXcgRjModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUsaSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhpLmlkKSl7bGV0IHI9dlQoaS5pZCxpLnN0eWxlcyxbXSk7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyhyKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGkuaWQsdGhpcy5kZWZhdWx0UmVuZGVyZXIpfXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcn19YmVnaW4oKXt9ZW5kKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGdUKSxSKHp4KSxSKHJmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksV3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRlc3Ryb3lOb2RlPW51bGx9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFAzW2VdfHxlLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1hcHBlbmRDaGlsZCh0LGUpeyhqWSh0KT90LmNvbnRlbnQ6dCkuYXBwZW5kQ2hpbGQoZSl9aW5zZXJ0QmVmb3JlKHQsZSxpKXt0JiYoalkodCk/dC5jb250ZW50OnQpLmluc2VydEJlZm9yZShlLGkpfXJlbW92ZUNoaWxkKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCBpPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0b3IgIiR7dH0iIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzYCk7cmV0dXJuIGV8fChpLnRleHRDb250ZW50PSIiKSxpfXBhcmVudE5vZGUodCl7cmV0dXJuIHQucGFyZW50Tm9kZX1uZXh0U2libGluZyh0KXtyZXR1cm4gdC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUodCxlLGkscil7aWYocil7ZT1yKyI6IitlO2xldCBvPVAzW3JdO28/dC5zZXRBdHRyaWJ1dGVOUyhvLGUsaSk6dC5zZXRBdHRyaWJ1dGUoZSxpKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsaSl9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXtpZihpKXtsZXQgcj1QM1tpXTtyP3QucmVtb3ZlQXR0cmlidXRlTlMocixlKTp0LnJlbW92ZUF0dHJpYnV0ZShgJHtpfToke2V9YCl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX1hZGRDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX1yZW1vdmVDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX1zZXRTdHlsZSh0LGUsaSxyKXtyJihhbC5EYXNoQ2FzZXxhbC5JbXBvcnRhbnQpP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxpLHImYWwuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPWl9cmVtb3ZlU3R5bGUodCxlLGkpe2kmYWwuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifXNldFByb3BlcnR5KHQsZSxpKXt0W2VdPWl9c2V0VmFsdWUodCxlKXt0Lm5vZGVWYWx1ZT1lfWxpc3Rlbih0LGUsaSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLFVZKGkpKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxVWShpKSl9fTtmdW5jdGlvbiBqWShuKXtyZXR1cm4iVEVNUExBVEUiPT09bi50YWdOYW1lJiZ2b2lkIDAhPT1uLmNvbnRlbnR9IkAiLmNoYXJDb2RlQXQoMCk7dmFyIGszPWNsYXNzIGV4dGVuZHMgV3h7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCksdGhpcy5jb21wb25lbnQ9aTtsZXQgbz12VChyKyItIitpLmlkLGkuc3R5bGVzLFtdKTtlLmFkZFN0eWxlcyhvKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uKG4pe3JldHVybiJfbmdjb250ZW50LSVDT01QJSIucmVwbGFjZShOMyxuKX0ocisiLSIraS5pZCksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbihuKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UoTjMsbil9KHIrIi0iK2kuaWQpfWFwcGx5VG9Ib3N0KHQpe3N1cGVyLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtsZXQgaT1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9fSxGMz1jbGFzcyBleHRlbmRzIFd4e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9zdEVsPWksdGhpcy5zaGFkb3dSb290PWkuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IG89dlQoci5pZCxyLnN0eWxlcyxbXSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50ZXh0Q29udGVudD1vW3NdLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChhKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSkpfX0sZ3dlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBfVHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1zdXBwb3J0cyhlKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKGksciwhMSksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR1k9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sX3dlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSx2d2U9e2FsdDpuPT5uLmFsdEtleSxjb250cm9sOm49Pm4uY3RybEtleSxtZXRhOm49Pm4ubWV0YUtleSxzaGlmdDpuPT5uLnNoaWZ0S2V5fSx5d2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIF9Ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiBudWxsIT1uLnBhcnNlRXZlbnROYW1lKGUpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe2xldCBvPW4ucGFyc2VFdmVudE5hbWUoaSkscz1uLmV2ZW50Q2FsbGJhY2soby5mdWxsS2V5LHIsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmdsKCkub25BbmRDYW5jZWwoZSxvLmRvbUV2ZW50TmFtZSxzKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGUpe2xldCBpPWUudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9aS5zaGlmdCgpO2lmKDA9PT1pLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7bGV0IG89bi5fbm9ybWFsaXplS2V5KGkucG9wKCkpLHM9IiIsYT1pLmluZGV4T2YoImNvZGUiKTtpZihhPi0xJiYoaS5zcGxpY2UoYSwxKSxzPSJjb2RlLiIpLEdZLmZvckVhY2goYz0+e2xldCB1PWkuaW5kZXhPZihjKTt1Pi0xJiYoaS5zcGxpY2UodSwxKSxzKz1jKyIuIil9KSxzKz1vLDAhPWkubGVuZ3RofHwwPT09by5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGw9e307cmV0dXJuIGwuZG9tRXZlbnROYW1lPXIsbC5mdWxsS2V5PXMsbH1zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGUsaSl7bGV0IHI9X3dlW2Uua2V5XXx8ZS5rZXksbz0iIjtyZXR1cm4gaS5pbmRleE9mKCJjb2RlLiIpPi0xJiYocj1lLmNvZGUsbz0iY29kZS4iKSwhKG51bGw9PXJ8fCFyKSYmKHI9ci50b0xvd2VyQ2FzZSgpLCIgIj09PXI/cj0ic3BhY2UiOiIuIj09PXImJihyPSJkb3QiKSxHWS5mb3JFYWNoKHM9PntzIT09ciYmKDAsdndlW3NdKShlKSYmKG8rPXMrIi4iKX0pLG8rPXIsbz09PWkpfXN0YXRpYyBldmVudENhbGxiYWNrKGUsaSxyKXtyZXR1cm4gbz0+e24ubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKG8sZSkmJnIucnVuR3VhcmRlZCgoKT0+aShvKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGUpe3JldHVybiJlc2MiPT09ZT8iZXNjYXBlIjplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd3dlPVt7cHJvdmlkZTppZCx1c2VWYWx1ZTpJM30se3Byb3ZpZGU6eU4sdXNlVmFsdWU6ZnVuY3Rpb24oKXtHeC5tYWtlQ3VycmVudCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6QnQsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtQaz1ufShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxCMz13TihXNywiYnJvd3NlciIsd3dlKSxYWT1uZXcgc2UoIiIpLE13ZT1be3Byb3ZpZGU6TGIsdXNlQ2xhc3M6Y2xhc3N7YWRkVG9XaW5kb3codCl7V3IuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PShpLHI9ITApPT57bGV0IG89dC5maW5kVGVzdGFiaWxpdHlJblRyZWUoaSxyKTtpZihudWxsPT1vKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuIik7cmV0dXJuIG99LFdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT50LmdldEFsbFRlc3RhYmlsaXRpZXMoKSxXci5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT50LmdldEFsbFJvb3RFbGVtZW50cygpLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoV3IuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goaT0+e2xldCByPVdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbz1yLmxlbmd0aCxzPSExLGE9ZnVuY3Rpb24obCl7cz1zfHxsLG8tLSwwPT1vJiZpKHMpfTtyLmZvckVhY2goZnVuY3Rpb24obCl7bC53aGVuU3RhYmxlKGEpfSl9KX1maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLGkpe3JldHVybiBudWxsPT1lP251bGw6dC5nZXRUZXN0YWJpbGl0eShlKT8/KGk/Z2woKS5pc1NoYWRvd1Jvb3QoZSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5wYXJlbnRFbGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnhOLHVzZUNsYXNzOkpFLGRlcHM6W3B0LCRFLExiXX0se3Byb3ZpZGU6SkUsdXNlQ2xhc3M6SkUsZGVwczpbcHQsJEUsTGJdfV0sU3dlPVt7cHJvdmlkZTprRSx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOlNzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNzfSxkZXBzOltdfSx7cHJvdmlkZTptVCx1c2VDbGFzczpnd2UsbXVsdGk6ITAsZGVwczpbQnQscHQsaWRdfSx7cHJvdmlkZTptVCx1c2VDbGFzczp5d2UsbXVsdGk6ITAsZGVwczpbQnRdfSx7cHJvdmlkZTpqeCx1c2VDbGFzczpqeCxkZXBzOltnVCx6eCxyZl19LHtwcm92aWRlOnFjLHVzZUV4aXN0aW5nOmp4fSx7cHJvdmlkZTpxWSx1c2VFeGlzdGluZzp6eH0se3Byb3ZpZGU6engsdXNlQ2xhc3M6engsZGVwczpbQnRdfSx7cHJvdmlkZTpnVCx1c2VDbGFzczpnVCxkZXBzOlttVCxwdF19LHtwcm92aWRlOlBmLHVzZUNsYXNzOnV3ZSxkZXBzOltdfSxbXV0seVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6cmYsdXNlVmFsdWU6ZS5hcHBJZH0se3Byb3ZpZGU6V1ksdXNlRXhpc3Rpbmc6cmZ9LGN3ZV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFhZLDEyKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbLi4uU3dlLC4uLk13ZV0saW1wb3J0czpba2UscTddfSksbn0pKCksUmY9KG5ldyBzZSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLG5ldyBzZSgiSGFtbWVyTG9hZGVyIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcoZXx8bik6UihRWSksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSksUVk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJme2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWV9c2FuaXRpemUoZSxpKXtpZihudWxsPT1pKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIEpyLk5PTkU6cmV0dXJuIGk7Y2FzZSBKci5IVE1MOnJldHVybiBabChpLCJIVE1MIik/JHMoaSk6WUYodGhpcy5fZG9jLFN0cmluZyhpKSkudG9TdHJpbmcoKTtjYXNlIEpyLlNUWUxFOnJldHVybiBabChpLCJTdHlsZSIpPyRzKGkpOmk7Y2FzZSBKci5TQ1JJUFQ6aWYoWmwoaSwiU2NyaXB0IikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2UgSnIuVVJMOnJldHVybiBabChpLCJVUkwiKT8kcyhpKTpFYihTdHJpbmcoaSkpO2Nhc2UgSnIuUkVTT1VSQ0VfVVJMOmlmKFpsKGksIlJlc291cmNlVVJMIikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7ZX0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWApfX1ieXBhc3NTZWN1cml0eVRydXN0SHRtbChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBSayhuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IE9rKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0KGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGtrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0VXJsKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEZrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgTmsobil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcgZTpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFFZKG4uZ2V0KEJ0KSl9KFIoem4pKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHF4PShuZXcgS2woIjE0LjIuMTEiKSxkOChaWSgpLDEpLGNsYXNze30pLGJUPWNsYXNze30sdXU9IioiO2Z1bmN0aW9uIEhyKG4sdCl7cmV0dXJue3R5cGU6NyxuYW1lOm4sZGVmaW5pdGlvbnM6dCxvcHRpb25zOnt9fX1mdW5jdGlvbiBWaShuLHQ9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6dCx0aW1pbmdzOm59fWZ1bmN0aW9uIEgzKG4sdD1udWxsKXtyZXR1cm57dHlwZTozLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiB4VChuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gcm4obil7cmV0dXJue3R5cGU6NixzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gRWkobix0LGUpe3JldHVybnt0eXBlOjAsbmFtZTpuLHN0eWxlczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gT2Yobil7cmV0dXJue3R5cGU6NSxzdGVwczpufX1mdW5jdGlvbiBJaShuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGtmKG49bnVsbCl7cmV0dXJue3R5cGU6OSxvcHRpb25zOm59fWZ1bmN0aW9uIEZmKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjExLHNlbGVjdG9yOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiBKWShuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4pfXZhciBTcD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7SlkoKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/dCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LFl4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7bGV0IGU9MCxpPTAscj0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP0pZKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaChzPT57cy5vbkRvbmUoKCk9PnsrK2U9PW8mJnRoaXMuX29uRmluaXNoKCl9KSxzLm9uRGVzdHJveSgoKT0+eysraT09byYmdGhpcy5fb25EZXN0cm95KCl9KSxzLm9uU3RhcnQoKCk9PnsrK3I9PW8mJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgocyxhKT0+TWF0aC5tYXgocyxhLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuaW5pdCgpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe2xldCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goaT0+e2xldCByPWkudG90YWxUaW1lP01hdGgubWluKDEsZS9pLnRvdGFsVGltZSk6MTtpLnNldFBvc2l0aW9uKHIpfSl9Z2V0UG9zaXRpb24oKXtsZXQgdD10aGlzLnBsYXllcnMucmVkdWNlKChlLGkpPT5udWxsPT09ZXx8aS50b3RhbFRpbWU+ZS50b3RhbFRpbWU/aTplLG51bGwpO3JldHVybiBudWxsIT10P3QuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fTtmdW5jdGlvbiAkWShuKXtyZXR1cm4gbmV3IE10KDNlMywhMSl9ZnVuY3Rpb24gYUIoKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpfWZ1bmN0aW9uIEVwKG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgU3A7Y2FzZSAxOnJldHVybiBuWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBZeChuKX19ZnVuY3Rpb24gZlgobix0LGUsaSxyPW5ldyBNYXAsbz1uZXcgTWFwKXtsZXQgcz1bXSxhPVtdLGw9LTEsYz1udWxsO2lmKGkuZm9yRWFjaCh1PT57bGV0IGQ9dS5nZXQoIm9mZnNldCIpLHA9ZD09bCxoPXAmJmN8fG5ldyBNYXA7dS5mb3JFYWNoKChmLG0pPT57bGV0IEM9bSxfPWY7aWYoIm9mZnNldCIhPT1tKXN3aXRjaChDPXQubm9ybWFsaXplUHJvcGVydHlOYW1lKEMscyksXyl7Y2FzZSIhIjpfPXIuZ2V0KG0pO2JyZWFrO2Nhc2UgdXU6Xz1vLmdldChtKTticmVhaztkZWZhdWx0Ol89dC5ub3JtYWxpemVTdHlsZVZhbHVlKG0sQyxfLHMpfWguc2V0KEMsXyl9KSxwfHxhLnB1c2goaCksYz1oLGw9ZH0pLHMubGVuZ3RoKXRocm93IG5ldyBNdCgzNTAyLCExKTtyZXR1cm4gYX1mdW5jdGlvbiBsQihuLHQsZSxpKXtzd2l0Y2godCl7Y2FzZSJzdGFydCI6bi5vblN0YXJ0KCgpPT5pKGUmJlUzKGUsInN0YXJ0IixuKSkpO2JyZWFrO2Nhc2UiZG9uZSI6bi5vbkRvbmUoKCk9PmkoZSYmVTMoZSwiZG9uZSIsbikpKTticmVhaztjYXNlImRlc3Ryb3kiOm4ub25EZXN0cm95KCgpPT5pKGUmJlUzKGUsImRlc3Ryb3kiLG4pKSl9fWZ1bmN0aW9uIFUzKG4sdCxlKXtsZXQgbz1jQihuLmVsZW1lbnQsbi50cmlnZ2VyTmFtZSxuLmZyb21TdGF0ZSxuLnRvU3RhdGUsdHx8bi5waGFzZU5hbWUsZS50b3RhbFRpbWU/P24udG90YWxUaW1lLCEhZS5kaXNhYmxlZCkscz1uLl9kYXRhO3JldHVybiBudWxsIT1zJiYoby5fZGF0YT1zKSxvfWZ1bmN0aW9uIGNCKG4sdCxlLGkscj0iIixvPTAscyl7cmV0dXJue2VsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGZyb21TdGF0ZTplLHRvU3RhdGU6aSxwaGFzZU5hbWU6cix0b3RhbFRpbWU6byxkaXNhYmxlZDohIXN9fWZ1bmN0aW9uIEJhKG4sdCxlKXtsZXQgaT1uLmdldCh0KTtyZXR1cm4gaXx8bi5zZXQodCxpPWUpLGl9ZnVuY3Rpb24gZVgobil7bGV0IHQ9bi5pbmRleE9mKCI6Iik7cmV0dXJuW24uc3Vic3RyaW5nKDEsdCksbi5zbGljZSh0KzEpXX12YXIgWTM9KG4sdCk9PiExLG1YPShuLHQsZSk9PltdLGdYPW51bGw7ZnVuY3Rpb24gdUIobil7bGV0IHQ9bi5wYXJlbnROb2RlfHxuLmhvc3Q7cmV0dXJuIHQ9PT1nWD9udWxsOnR9KGFCKCl8fHR5cGVvZiBFbGVtZW50PCJ1IikmJih0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSI/KGdYPSgoKT0+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSgpLFkzPShuLHQpPT57Zm9yKDt0Oyl7aWYodD09PW4pcmV0dXJuITA7dD11Qih0KX1yZXR1cm4hMX0pOlkzPShuLHQpPT5uLmNvbnRhaW5zKHQpLG1YPShuLHQsZSk9PntpZihlKXJldHVybiBBcnJheS5mcm9tKG4ucXVlcnlTZWxlY3RvckFsbCh0KSk7bGV0IGk9bi5xdWVyeVNlbGVjdG9yKHQpO3JldHVybiBpP1tpXTpbXX0pO3ZhciBOZj1udWxsLHRYPSExO3ZhciBfWD1ZMyx2WD1tWCxkQj0oKCk9PntjbGFzcyBue3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShlKXtyZXR1cm4gZnVuY3Rpb24obil7TmZ8fChOZj0odHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSx0WD0hIU5mLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBOZi5zdHlsZSk7bGV0IHQ9ITA7cmV0dXJuIE5mLnN0eWxlJiYhZnVuY3Rpb24obil7cmV0dXJuImVia2l0Ij09bi5zdWJzdHJpbmcoMSw2KX0obikmJih0PW4gaW4gTmYuc3R5bGUsIXQmJnRYJiYodD0iV2Via2l0IituLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK24uc2xpY2UoMSlpbiBOZi5zdHlsZSkpLHR9KGUpfW1hdGNoZXNFbGVtZW50KGUsaSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGUsaSl7cmV0dXJuIF9YKGUsaSl9Z2V0UGFyZW50RWxlbWVudChlKXtyZXR1cm4gdUIoZSl9cXVlcnkoZSxpLHIpe3JldHVybiB2WChlLGkscil9Y29tcHV0ZVN0eWxlKGUsaSxyKXtyZXR1cm4gcnx8IiJ9YW5pbWF0ZShlLGkscixvLHMsYT1bXSxsKXtyZXR1cm4gbmV3IFNwKHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHRDPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5PT1A9bmV3IGRCLG59KSgpLGJYPSJuZy1lbnRlciIsWDM9Im5nLWxlYXZlIix3VD0ibmctdHJpZ2dlciIsVFQ9Ii5uZy10cmlnZ2VyIixuWD0ibmctYW5pbWF0aW5nIixRMz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gZmQobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO2xldCB0PW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIXR8fHQubGVuZ3RoPDI/MDpLMyhwYXJzZUZsb2F0KHRbMV0pLHRbMl0pfWZ1bmN0aW9uIEszKG4sdCl7cmV0dXJuInMiPT09dD8xZTMqbjpufWZ1bmN0aW9uIERUKG4sdCxlKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9uOmZ1bmN0aW9uKG4sdCxlKXtsZXQgcixvPTAscz0iIjtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBhPW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1hKXJldHVybiB0LnB1c2goJFkoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9SzMocGFyc2VGbG9hdChhWzFdKSxhWzJdKTtsZXQgbD1hWzNdO251bGwhPWwmJihvPUszKHBhcnNlRmxvYXQobCksYVs0XSkpO2xldCBjPWFbNV07YyYmKHM9Yyl9ZWxzZSByPW47aWYoIWUpe2xldCBhPSExLGw9dC5sZW5ndGg7cjwwJiYodC5wdXNoKG5ldyBNdCgzMTAwLCExKSksYT0hMCksbzwwJiYodC5wdXNoKG5ldyBNdCgzMTAxLCExKSksYT0hMCksYSYmdC5zcGxpY2UobCwwLCRZKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5Om8sZWFzaW5nOnN9fShuLHQsZSl9ZnVuY3Rpb24gbkMobix0PXt9KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dFtlXT1uW2VdfSksdH1mdW5jdGlvbiB4WChuKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0LnNldChlLG5bZV0pfSksdH1mdW5jdGlvbiBqMChuLHQ9bmV3IE1hcCxlKXtpZihlKWZvcihsZXRbaSxyXW9mIGUpdC5zZXQoaSxyKTtmb3IobGV0W2kscl1vZiBuKXQuc2V0KGkscik7cmV0dXJuIHR9ZnVuY3Rpb24gaVgobix0LGUpe3JldHVybiBlP3QrIjoiK2UrIjsiOiIifWZ1bmN0aW9uIENYKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5zdHlsZS5sZW5ndGg7ZSsrKXtsZXQgaT1uLnN0eWxlLml0ZW0oZSk7dCs9aVgoMCxpLG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpKSl9Zm9yKGxldCBlIGluIG4uc3R5bGUpbi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShlKSYmIWUuc3RhcnRzV2l0aCgiXyIpJiYodCs9aVgoMCxtTWUoZSksbi5zdHlsZVtlXSkpO24uc2V0QXR0cmlidXRlKCJzdHlsZSIsdCl9ZnVuY3Rpb24gZHUobix0LGUpe24uc3R5bGUmJih0LmZvckVhY2goKGkscik9PntsZXQgbz1wQihyKTtlJiYhZS5oYXMocikmJmUuc2V0KHIsbi5zdHlsZVtvXSksbi5zdHlsZVtvXT1pfSksYUIoKSYmQ1gobikpfWZ1bmN0aW9uIEJmKG4sdCl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoZSxpKT0+e2xldCByPXBCKGkpO24uc3R5bGVbcl09IiJ9KSxhQigpJiZDWChuKSl9ZnVuY3Rpb24gWHgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTp4VChuKTpufXZhciBaMz1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB3WChuKXtsZXQgdD1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBlO2Zvcig7ZT1aMy5leGVjKG4pOyl0LnB1c2goZVsxXSk7WjMubGFzdEluZGV4PTB9cmV0dXJuIHR9ZnVuY3Rpb24gS3gobix0LGUpe2xldCBpPW4udG9TdHJpbmcoKSxyPWkucmVwbGFjZShaMywobyxzKT0+e2xldCBhPXRbc107cmV0dXJuIG51bGw9PWEmJihlLnB1c2gobmV3IE10KDMwMDMsITEpKSxhPSIiKSxhLnRvU3RyaW5nKCl9KTtyZXR1cm4gcj09aT9uOnJ9ZnVuY3Rpb24gQVQobil7bGV0IHQ9W10sZT1uLm5leHQoKTtmb3IoOyFlLmRvbmU7KXQucHVzaChlLnZhbHVlKSxlPW4ubmV4dCgpO3JldHVybiB0fXZhciBmTWU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHBCKG4pe3JldHVybiBuLnJlcGxhY2UoZk1lLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBtTWUobil7cmV0dXJuIG4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIExhKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIDc6cmV0dXJuIG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSAwOnJldHVybiBuLnZpc2l0U3RhdGUodCxlKTtjYXNlIDE6cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKHQsZSk7Y2FzZSAyOnJldHVybiBuLnZpc2l0U2VxdWVuY2UodCxlKTtjYXNlIDM6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgNDpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIDU6cmV0dXJuIG4udmlzaXRLZXlmcmFtZXModCxlKTtjYXNlIDY6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgODpyZXR1cm4gbi52aXNpdFJlZmVyZW5jZSh0LGUpO2Nhc2UgOTpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZCh0LGUpO2Nhc2UgMTA6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSAxMTpyZXR1cm4gbi52aXNpdFF1ZXJ5KHQsZSk7Y2FzZSAxMjpyZXR1cm4gbi52aXNpdFN0YWdnZXIodCxlKTtkZWZhdWx0OnRocm93IG5ldyBNdCgzMDA0LCExKX19ZnVuY3Rpb24gTVgobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbdF19ZnVuY3Rpb24gYk1lKG4sdCl7bGV0IGU9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGk9PmZ1bmN0aW9uKG4sdCxlKXtpZigiOiI9PW5bMF0pe2xldCBsPWZ1bmN0aW9uKG4sdCl7c3dpdGNoKG4pe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKT5wYXJzZUZsb2F0KGUpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGUsaSk9PnBhcnNlRmxvYXQoaSk8cGFyc2VGbG9hdChlKTtkZWZhdWx0OnJldHVybiB0LnB1c2gobmV3IE10KDMwMTYsITEpKSwiKiA9PiAqIn19KG4sZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpcmV0dXJuIHZvaWQgdC5wdXNoKGwpO249bH1sZXQgaT1uLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1pfHxpLmxlbmd0aDw0KXJldHVybiBlLnB1c2gobmV3IE10KDMwMTUsITEpKSx0O2xldCByPWlbMV0sbz1pWzJdLHM9aVszXTt0LnB1c2goclgocixzKSksIjwiPT1vWzBdJiYhKCIqIj09ciYmIioiPT1zKSYmdC5wdXNoKHJYKHMscikpfShpLGUsdCkpOmUucHVzaChuKSxlfXZhciBNVD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksU1Q9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiByWChuLHQpe2xldCBlPU1ULmhhcyhuKXx8U1QuaGFzKG4pLGk9TVQuaGFzKHQpfHxTVC5oYXModCk7cmV0dXJuKHIsbyk9PntsZXQgcz0iKiI9PW58fG49PXIsYT0iKiI9PXR8fHQ9PW87cmV0dXJuIXMmJmUmJiJib29sZWFuIj09dHlwZW9mIHImJihzPXI/TVQuaGFzKG4pOlNULmhhcyhuKSksIWEmJmkmJiJib29sZWFuIj09dHlwZW9mIG8mJihhPW8/TVQuaGFzKHQpOlNULmhhcyh0KSkscyYmYX19dmFyIHdNZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBEWChuLHQsZSxpKXtyZXR1cm4gbmV3IEozKG4pLmJ1aWxkKHQsZSxpKX12YXIgSjM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZHJpdmVyPXR9YnVpbGQodCxlLGkpe2xldCByPW5ldyAkMyhlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShyKSxMYSh0aGlzLFh4KHQpLHIpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0LmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksdC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcih0LGUpe2xldCBpPWUucXVlcnlDb3VudD0wLHI9ZS5kZXBDb3VudD0wLG89W10scz1bXTtyZXR1cm4iQCI9PXQubmFtZS5jaGFyQXQoMCkmJmUuZXJyb3JzLnB1c2gobmV3IE10KDMwMDYsITEpKSx0LmRlZmluaXRpb25zLmZvckVhY2goYT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09YS50eXBlKXtsZXQgbD1hLGM9bC5uYW1lO2MudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2godT0+e2wubmFtZT11LG8ucHVzaCh0aGlzLnZpc2l0U3RhdGUobCxlKSl9KSxsLm5hbWU9Y31lbHNlIGlmKDE9PWEudHlwZSl7bGV0IGw9dGhpcy52aXNpdFRyYW5zaXRpb24oYSxlKTtpKz1sLnF1ZXJ5Q291bnQscis9bC5kZXBDb3VudCxzLnB1c2gobCl9ZWxzZSBlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA3LCExKSl9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOnMscXVlcnlDb3VudDppLGRlcENvdW50OnIsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7bGV0IGk9dGhpcy52aXNpdFN0eWxlKHQuc3R5bGVzLGUpLHI9dC5vcHRpb25zJiZ0Lm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGkuY29udGFpbnNEeW5hbWljU3R5bGVzKXtsZXQgbz1uZXcgU2V0LHM9cnx8e307aS5zdHlsZXMuZm9yRWFjaChhPT57YSBpbnN0YW5jZW9mIE1hcCYmYS5mb3JFYWNoKGw9Pnt3WChsKS5mb3JFYWNoKGM9PntzLmhhc093blByb3BlcnR5KGMpfHxvLmFkZChjKX0pfSl9KSxvLnNpemUmJihBVChvLnZhbHVlcygpKSxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA4LCExKSkpfXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6aSxvcHRpb25zOnI/e3BhcmFtczpyfTpudWxsfX12aXNpdFRyYW5zaXRpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7bGV0IGk9TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSk7cmV0dXJue3R5cGU6MSxtYXRjaGVyczpiTWUodC5leHByLGUuZXJyb3JzKSxhbmltYXRpb246aSxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZSh0LGUpe3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoaT0+TGEodGhpcyxpLGUpKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0R3JvdXAodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lLHI9MCxvPXQuc3RlcHMubWFwKHM9PntlLmN1cnJlbnRUaW1lPWk7bGV0IGE9TGEodGhpcyxzLGUpO3JldHVybiByPU1hdGgubWF4KHIsZS5jdXJyZW50VGltZSksYX0pO3JldHVybiBlLmN1cnJlbnRUaW1lPXIse3R5cGU6MyxzdGVwczpvLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlKHQsZSl7bGV0IGk9ZnVuY3Rpb24obix0KXtpZihuLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gejMoRFQobix0KS5kdXJhdGlvbiwwLCIiKTtsZXQgZT1uO2lmKGUuc3BsaXQoL1xzKy8pLnNvbWUobz0+InsiPT1vLmNoYXJBdCgwKSYmInsiPT1vLmNoYXJBdCgxKSkpe2xldCBvPXozKDAsMCwiIik7cmV0dXJuIG8uZHluYW1pYz0hMCxvLnN0clZhbHVlPWUsb31sZXQgcj1EVChlLHQpO3JldHVybiB6MyhyLmR1cmF0aW9uLHIuZGVsYXksci5lYXNpbmcpfSh0LnRpbWluZ3MsZS5lcnJvcnMpO2UuY3VycmVudEFuaW1hdGVUaW1pbmdzPWk7bGV0IHIsbz10LnN0eWxlcz90LnN0eWxlczpybih7fSk7aWYoNT09by50eXBlKXI9dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpO2Vsc2V7bGV0IHM9dC5zdHlsZXMsYT0hMTtpZighcyl7YT0hMDtsZXQgYz17fTtpLmVhc2luZyYmKGMuZWFzaW5nPWkuZWFzaW5nKSxzPXJuKGMpfWUuY3VycmVudFRpbWUrPWkuZHVyYXRpb24raS5kZWxheTtsZXQgbD10aGlzLnZpc2l0U3R5bGUocyxlKTtsLmlzRW1wdHlTdGVwPWEscj1sfXJldHVybiBlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczppLHN0eWxlOnIsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKHQsZSl7bGV0IGk9dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoaSxlKSxpfV9tYWtlU3R5bGVBc3QodCxlKXtsZXQgaT1bXSxyPUFycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzOlt0LnN0eWxlc107Zm9yKGxldCBhIG9mIHIpInN0cmluZyI9PXR5cGVvZiBhP2E9PT11dT9pLnB1c2goYSk6ZS5lcnJvcnMucHVzaChuZXcgTXQoMzAwMiwhMSkpOmkucHVzaCh4WChhKSk7bGV0IG89ITEscz1udWxsO3JldHVybiBpLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJihhLmhhcygiZWFzaW5nIikmJihzPWEuZ2V0KCJlYXNpbmciKSxhLmRlbGV0ZSgiZWFzaW5nIikpLCFvKSlmb3IobGV0IGwgb2YgYS52YWx1ZXMoKSlpZihsLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7bz0hMDticmVha319KSx7dHlwZTo2LHN0eWxlczppLGVhc2luZzpzLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6byxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtpJiZvPjAmJihvLT1pLmR1cmF0aW9uK2kuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2gocz0+eyJzdHJpbmciIT10eXBlb2YgcyYmcy5mb3JFYWNoKChhLGwpPT57bGV0IGM9ZS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHU9Yy5nZXQobCksZD0hMDt1JiYobyE9ciYmbz49dS5zdGFydFRpbWUmJnI8PXUuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTAsITEpKSxkPSExKSxvPXUuc3RhcnRUaW1lKSxkJiZjLnNldChsLHtzdGFydFRpbWU6byxlbmRUaW1lOnJ9KSxlLm9wdGlvbnMmJmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10LnBhcmFtc3x8e30scj13WChuKTtyLmxlbmd0aCYmci5mb3JFYWNoKG89PntpLmhhc093blByb3BlcnR5KG8pfHxlLnB1c2gobmV3IE10KDMwMDEsITEpKX0pfShhLGUub3B0aW9ucyxlLmVycm9ycyl9KX0pfXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTEsITEpKSxpO2xldCBvPTAscz1bXSxhPSExLGw9ITEsYz0wLHU9dC5zdGVwcy5tYXAoXz0+e2xldCB5PXRoaXMuX21ha2VTdHlsZUFzdChfLGUpLEk9bnVsbCE9eS5vZmZzZXQ/eS5vZmZzZXQ6ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBudWxsO2xldCB0PW51bGw7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2goZT0+e2lmKGUgaW5zdGFuY2VvZiBNYXAmJmUuaGFzKCJvZmZzZXQiKSl7bGV0IGk9ZTt0PXBhcnNlRmxvYXQoaS5nZXQoIm9mZnNldCIpKSxpLmRlbGV0ZSgib2Zmc2V0Iil9fSk7ZWxzZSBpZihuIGluc3RhbmNlb2YgTWFwJiZuLmhhcygib2Zmc2V0Iikpe2xldCBlPW47dD1wYXJzZUZsb2F0KGUuZ2V0KCJvZmZzZXQiKSksZS5kZWxldGUoIm9mZnNldCIpfXJldHVybiB0fSh5LnN0eWxlcyksQT0wO3JldHVybiBudWxsIT1JJiYobysrLEE9eS5vZmZzZXQ9SSksbD1sfHxBPDB8fEE+MSxhPWF8fEE8YyxjPUEscy5wdXNoKEEpLHl9KTtsJiZlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEyLCExKSksYSYmZS5lcnJvcnMucHVzaChuZXcgTXQoMzIwMCwhMSkpO2xldCBkPXQuc3RlcHMubGVuZ3RoLHA9MDtvPjAmJm88ZD9lLmVycm9ycy5wdXNoKG5ldyBNdCgzMjAyLCExKSk6MD09byYmKHA9MS8oZC0xKSk7bGV0IGg9ZC0xLGY9ZS5jdXJyZW50VGltZSxtPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLEM9bS5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKChfLHkpPT57bGV0IEk9cD4wP3k9PWg/MTpwKnk6c1t5XSxBPUkqQztlLmN1cnJlbnRUaW1lPWYrbS5kZWxheStBLG0uZHVyYXRpb249QSx0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KF8sZSksXy5vZmZzZXQ9SSxpLnN0eWxlcy5wdXNoKF8pfSksaX12aXNpdFJlZmVyZW5jZSh0LGUpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOkxhKHRoaXMsWHgodC5hbmltYXRpb24pLGUpLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpMZih0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYodCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLHI9dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O2xldFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PSEhbi5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoZT0+IjpzZWxmIj09ZSk7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSh3TWUsIiIpKSxuPW4ucmVwbGFjZSgvQFwqL2csVFQpLnJlcGxhY2UoL0BcdysvZyxlPT5UVCsiLSIrZS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLFEzKSxbbix0XX0odC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1pLmxlbmd0aD9pKyIgIitvOm8sQmEoZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtsZXQgYT1MYSh0aGlzLFh4KHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWkse3R5cGU6MTEsc2VsZWN0b3I6byxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjphLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEzLCExKSk7bGV0IGk9ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06RFQodC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSksdGltaW5nczppLG9wdGlvbnM6bnVsbH19fSwkMz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5kPW5ldyBTZXR9fTtmdW5jdGlvbiBMZihuKXtyZXR1cm4gbj8obj1uQyhuKSkucGFyYW1zJiYobi5wYXJhbXM9ZnVuY3Rpb24obil7cmV0dXJuIG4/bkMobik6bnVsbH0obi5wYXJhbXMpKTpuPXt9LG59ZnVuY3Rpb24gejMobix0LGUpe3JldHVybntkdXJhdGlvbjpuLGRlbGF5OnQsZWFzaW5nOmV9fWZ1bmN0aW9uIGhCKG4sdCxlLGkscixvLHM9bnVsbCxhPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6bixrZXlmcmFtZXM6dCxwcmVTdHlsZVByb3BzOmUscG9zdFN0eWxlUHJvcHM6aSxkdXJhdGlvbjpyLGRlbGF5Om8sdG90YWxUaW1lOnIrbyxlYXNpbmc6cyxzdWJUaW1lbGluZTphfX12YXIgWng9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQodCl7cmV0dXJuIHRoaXMuX21hcC5nZXQodCl8fFtdfWFwcGVuZCh0LGUpe2xldCBpPXRoaXMuX21hcC5nZXQodCk7aXx8dGhpcy5fbWFwLnNldCh0LGk9W10pLGkucHVzaCguLi5lKX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19LElNZT1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksUk1lPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBBWChuLHQsZSxpLHIsbz1uZXcgTWFwLHM9bmV3IE1hcCxhLGwsYz1bXSl7cmV0dXJuKG5ldyBlQikuYnVpbGRLZXlmcmFtZXMobix0LGUsaSxyLG8scyxhLGwsYyl9dmFyIGVCPWNsYXNze2J1aWxkS2V5ZnJhbWVzKHQsZSxpLHIsbyxzLGEsbCxjLHU9W10pe2M9Y3x8bmV3IFp4O2xldCBkPW5ldyBKeCh0LGUsYyxyLG8sdSxbXSk7ZC5vcHRpb25zPWw7bGV0IHA9bC5kZWxheT9mZChsLmRlbGF5KTowO2QuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAocCksZC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtzXSxudWxsLGQuZXJyb3JzLGwpLExhKHRoaXMsaSxkKTtsZXQgaD1kLnRpbWVsaW5lcy5maWx0ZXIoZj0+Zi5jb250YWluc0FuaW1hdGlvbigpKTtpZihoLmxlbmd0aCYmYS5zaXplKXtsZXQgZjtmb3IobGV0IG09aC5sZW5ndGgtMTttPj0wO20tLSl7bGV0IEM9aFttXTtpZihDLmVsZW1lbnQ9PT1lKXtmPUM7YnJlYWt9fWYmJiFmLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJmYuc2V0U3R5bGVzKFthXSxudWxsLGQuZXJyb3JzLGwpfXJldHVybiBoLmxlbmd0aD9oLm1hcChmPT5mLmJ1aWxkS2V5ZnJhbWVzKCkpOltoQihlLFtdLFtdLFtdLDAscCwiIiwhMSldfXZpc2l0VHJpZ2dlcih0LGUpe312aXNpdFN0YXRlKHQsZSl7fXZpc2l0VHJhbnNpdGlvbih0LGUpe312aXNpdEFuaW1hdGVDaGlsZCh0LGUpe2xldCBpPWUuc3ViSW5zdHJ1Y3Rpb25zLmdldChlLmVsZW1lbnQpO2lmKGkpe2xldCByPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscz10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhpLHIsci5vcHRpb25zKTtvIT1zJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShzKX1lLnByZXZpb3VzTm9kZT10fXZpc2l0QW5pbWF0ZVJlZih0LGUpe2xldCBpPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO2kudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW3Qub3B0aW9ucyx0LmFuaW1hdGlvbi5vcHRpb25zXSxlLGkpLHRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24saSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGUucHJldmlvdXNOb2RlPXR9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKHQsZSxpKXtmb3IobGV0IHIgb2YgdCl7bGV0IG89cj8uZGVsYXk7aWYobyl7bGV0IHM9Im51bWJlciI9PXR5cGVvZiBvP286ZmQoS3gobyxyPy5wYXJhbXM/P3t9LGUuZXJyb3JzKSk7aS5kZWxheU5leHRTdGVwKHMpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKHQsZSxpKXtsZXQgbz1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxzPW51bGwhPWkuZHVyYXRpb24/ZmQoaS5kdXJhdGlvbik6bnVsbCxhPW51bGwhPWkuZGVsYXk/ZmQoaS5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PXMmJnQuZm9yRWFjaChsPT57bGV0IGM9ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUobCxzLGEpO289TWF0aC5tYXgobyxjLmR1cmF0aW9uK2MuZGVsYXkpfSksb312aXNpdFJlZmVyZW5jZSh0LGUpe2UudXBkYXRlT3B0aW9ucyh0Lm9wdGlvbnMsITApLExhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH12aXNpdFNlcXVlbmNlKHQsZSl7bGV0IGk9ZS5zdWJDb250ZXh0Q291bnQscj1lLG89dC5vcHRpb25zO2lmKG8mJihvLnBhcmFtc3x8by5kZWxheSkmJihyPWUuY3JlYXRlU3ViQ29udGV4dChvKSxyLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPW8uZGVsYXkpKXs2PT1yLnByZXZpb3VzTm9kZS50eXBlJiYoci5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksci5wcmV2aW91c05vZGU9UFQpO2xldCBzPWZkKG8uZGVsYXkpO3IuZGVsYXlOZXh0U3RlcChzKX10LnN0ZXBzLmxlbmd0aCYmKHQuc3RlcHMuZm9yRWFjaChzPT5MYSh0aGlzLHMscikpLHIuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHIuc3ViQ29udGV4dENvdW50PmkmJnIudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRHcm91cCh0LGUpe2xldCBpPVtdLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9mZCh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKHM9PntsZXQgYT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtvJiZhLmRlbGF5TmV4dFN0ZXAobyksTGEodGhpcyxzLGEpLHI9TWF0aC5tYXgocixhLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksaS5wdXNoKGEuY3VycmVudFRpbWVsaW5lKX0pLGkuZm9yRWFjaChzPT5lLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFRpbWluZyh0LGUpe2lmKHQuZHluYW1pYyl7bGV0IGk9dC5zdHJWYWx1ZTtyZXR1cm4gRFQoZS5wYXJhbXM/S3goaSxlLnBhcmFtcyxlLmVycm9ycyk6aSxlLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOnQuZHVyYXRpb24sZGVsYXk6dC5kZWxheSxlYXNpbmc6dC5lYXNpbmd9fXZpc2l0QW5pbWF0ZSh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO2kuZGVsYXkmJihlLmluY3JlbWVudFRpbWUoaS5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7bGV0IG89dC5zdHlsZTs1PT1vLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpOihlLmluY3JlbWVudFRpbWUoaS5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKG8sZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZSxyPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFyJiZpLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSYmaS5mb3J3YXJkRnJhbWUoKTtsZXQgbz1yJiZyLmVhc2luZ3x8dC5lYXNpbmc7dC5pc0VtcHR5U3RlcD9pLmFwcGx5RW1wdHlTdGVwKG8pOmkuc2V0U3R5bGVzKHQuc3R5bGVzLG8sZS5lcnJvcnMsZS5vcHRpb25zKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixvPWkuZHVyYXRpb24sYT1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7YS5lYXNpbmc9aS5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChsPT57YS5mb3J3YXJkVGltZSgobC5vZmZzZXR8fDApKm8pLGEuc2V0U3R5bGVzKGwuc3R5bGVzLGwuZWFzaW5nLGUuZXJyb3JzLGUub3B0aW9ucyksYS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocitvKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxyPXQub3B0aW9uc3x8e30sbz1yLmRlbGF5P2ZkKHIuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1pJiZlLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9UFQpO2xldCBzPWksYT1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIXIub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9YS5sZW5ndGg7bGV0IGw9bnVsbDthLmZvckVhY2goKGMsdSk9PntlLmN1cnJlbnRRdWVyeUluZGV4PXU7bGV0IGQ9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxjKTtvJiZkLmRlbGF5TmV4dFN0ZXAobyksYz09PWUuZWxlbWVudCYmKGw9ZC5jdXJyZW50VGltZWxpbmUpLExhKHRoaXMsdC5hbmltYXRpb24sZCksZC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkscz1NYXRoLm1heChzLGQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocyksbCYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTdGFnZ2VyKHQsZSl7bGV0IGk9ZS5wYXJlbnRDb250ZXh0LHI9ZS5jdXJyZW50VGltZWxpbmUsbz10LnRpbWluZ3Mscz1NYXRoLmFicyhvLmR1cmF0aW9uKSxhPXMqKGUuY3VycmVudFF1ZXJ5VG90YWwtMSksbD1zKmUuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKG8uZHVyYXRpb248MD8icmV2ZXJzZSI6by5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6bD1hLWw7YnJlYWs7Y2FzZSJmdWxsIjpsPWkuY3VycmVudFN0YWdnZXJUaW1lfWxldCB1PWUuY3VycmVudFRpbWVsaW5lO2wmJnUuZGVsYXlOZXh0U3RlcChsKTtsZXQgZD11LmN1cnJlbnRUaW1lO0xhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxpLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLWQrKHIuc3RhcnRUaW1lLWkuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fSxQVD17fSxKeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWksdGhpcy5fZW50ZXJDbGFzc05hbWU9cix0aGlzLl9sZWF2ZUNsYXNzTmFtZT1vLHRoaXMuZXJyb3JzPXMsdGhpcy50aW1lbGluZXM9YSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVBULHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1sfHxuZXcgRzAodGhpcy5fZHJpdmVyLGUsMCksYS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyh0LGUpe2lmKCF0KXJldHVybjtsZXQgaT10LHI9dGhpcy5vcHRpb25zO251bGwhPWkuZHVyYXRpb24mJihyLmR1cmF0aW9uPWZkKGkuZHVyYXRpb24pKSxudWxsIT1pLmRlbGF5JiYoci5kZWxheT1mZChpLmRlbGF5KSk7bGV0IG89aS5wYXJhbXM7aWYobyl7bGV0IHM9ci5wYXJhbXM7c3x8KHM9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChhPT57KCFlfHwhcy5oYXNPd25Qcm9wZXJ0eShhKSkmJihzW2FdPUt4KG9bYV0scyx0aGlzLmVycm9ycykpfSl9fV9jb3B5T3B0aW9ucygpe2xldCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7bGV0IGU9dGhpcy5vcHRpb25zLnBhcmFtcztpZihlKXtsZXQgaT10LnBhcmFtcz17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntpW3JdPWVbcl19KX19cmV0dXJuIHR9Y3JlYXRlU3ViQ29udGV4dCh0PW51bGwsZSxpKXtsZXQgcj1lfHx0aGlzLmVsZW1lbnQsbz1uZXcgSngodGhpcy5fZHJpdmVyLHIsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhyLGl8fDApKTtyZXR1cm4gby5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsby5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3Msby5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksby51cGRhdGVPcHRpb25zKHQpLG8uY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxvLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsby5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxvfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9UFQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsZSxpKXtsZXQgcj17ZHVyYXRpb246ZT8/dC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoaT8/MCkrdC5kZWxheSxlYXNpbmc6IiJ9LG89bmV3IHRCKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChvKSxyfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLGkscixvLHMpe2xldCBhPVtdO2lmKHImJmEucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKElNZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKFJNZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBjPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsdCwxIT1pKTswIT09aSYmKGM9aTwwP2Muc2xpY2UoYy5sZW5ndGgraSxjLmxlbmd0aCk6Yy5zbGljZSgwLGkpKSxhLnB1c2goLi4uYyl9cmV0dXJuIW8mJjA9PWEubGVuZ3RoJiZzLnB1c2gobmV3IE10KDMwMTQsITEpKSxhfX0sRzA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9aSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9cix0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7bGV0IGU9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fWZvcmsodCxlKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgRzAodGhpcy5fZHJpdmVyLHQsZXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUodCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KHQse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKHQpe3QmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2ZvcihsZXRbZSxpXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChlLGl8fHV1KSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdXUpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKHQsZSxpLHIpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2xldCBvPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKG4sdCl7bGV0IGksZT1uZXcgTWFwO3JldHVybiBuLmZvckVhY2gocj0+e2lmKCIqIj09PXIpe2k9aXx8dC5rZXlzKCk7Zm9yKGxldCBvIG9mIGkpZS5zZXQobyx1dSl9ZWxzZSBqMChyLGUpfSksZX0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFthLGxdb2Ygcyl7bGV0IGM9S3gobCxvLGkpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGEsYyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoYSl8fHRoaXMuX2JhY2tGaWxsLnNldChhLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChhKT8/dXUpLHRoaXMuX3VwZGF0ZVN0eWxlKGEsYyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGUpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFt0LGVdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldCh0LGUpLHRoaXMuX3VwZGF0ZVN0eWxlKHQsZSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7bGV0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxpKT0+e2xldCByPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoaSk7KCFyfHxlLnRpbWU+ci50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoaSxlLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtsZXQgdD1uZXcgU2V0LGU9bmV3IFNldCxpPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24scj1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWowKGEsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7Yy5mb3JFYWNoKCh1LGQpPT57IiEiPT09dT90LmFkZChkKTp1PT09dXUmJmUuYWRkKGQpfSksaXx8Yy5zZXQoIm9mZnNldCIsbC90aGlzLmR1cmF0aW9uKSxyLnB1c2goYyl9KTtsZXQgbz10LnNpemU/QVQodC52YWx1ZXMoKSk6W10scz1lLnNpemU/QVQoZS52YWx1ZXMoKSk6W107aWYoaSl7bGV0IGE9clswXSxsPW5ldyBNYXAoYSk7YS5zZXQoIm9mZnNldCIsMCksbC5zZXQoIm9mZnNldCIsMSkscj1bYSxsXX1yZXR1cm4gaEIodGhpcy5lbGVtZW50LHIsbyxzLHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX0sdEI9Y2xhc3MgZXh0ZW5kcyBHMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhPSExKXtzdXBlcih0LGUscy5kZWxheSksdGhpcy5rZXlmcmFtZXM9aSx0aGlzLnByZVN0eWxlUHJvcHM9cix0aGlzLnBvc3RTdHlsZVByb3BzPW8sdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9YSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnMuZHVyYXRpb24sZGVsYXk6cy5kZWxheSxlYXNpbmc6cy5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246aSxlYXNpbmc6cn09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtsZXQgbz1bXSxzPWkrZSxhPWUvcyxsPWowKHRbMF0pO2wuc2V0KCJvZmZzZXQiLDApLG8ucHVzaChsKTtsZXQgYz1qMCh0WzBdKTtjLnNldCgib2Zmc2V0IixzWChhKSksby5wdXNoKGMpO2xldCB1PXQubGVuZ3RoLTE7Zm9yKGxldCBkPTE7ZDw9dTtkKyspe2xldCBwPWowKHRbZF0pLGg9cC5nZXQoIm9mZnNldCIpO3Auc2V0KCJvZmZzZXQiLHNYKChlK2gqaSkvcykpLG8ucHVzaChwKX1pPXMsZT0wLHI9IiIsdD1vfXJldHVybiBoQih0aGlzLmVsZW1lbnQsdCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxpLGUsciwhMCl9fTtmdW5jdGlvbiBzWChuLHQ9Myl7bGV0IGU9TWF0aC5wb3coMTAsdC0xKTtyZXR1cm4gTWF0aC5yb3VuZChuKmUpL2V9dmFyIFZmPWNsYXNze30sa01lPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKSxSVD1jbGFzcyBleHRlbmRzIFZme25vcm1hbGl6ZVByb3BlcnR5TmFtZSh0LGUpe3JldHVybiBwQih0KX1ub3JtYWxpemVTdHlsZVZhbHVlKHQsZSxpLHIpe2xldCBvPSIiLHM9aS50b1N0cmluZygpLnRyaW0oKTtpZihrTWUuaGFzKGUpJiYwIT09aSYmIjAiIT09aSlpZigibnVtYmVyIj09dHlwZW9mIGkpbz0icHgiO2Vsc2V7bGV0IGE9aS5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2gobmV3IE10KDMwMDUsITEpKX1yZXR1cm4gcytvfX07ZnVuY3Rpb24gYVgobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cmV0dXJue3R5cGU6MCxlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxpc1JlbW92YWxUcmFuc2l0aW9uOnIsZnJvbVN0YXRlOmUsZnJvbVN0eWxlczpvLHRvU3RhdGU6aSx0b1N0eWxlczpzLHRpbWVsaW5lczphLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6Yyxwb3N0U3R5bGVQcm9wczp1LHRvdGFsVGltZTpkLGVycm9yczpwfX12YXIgajM9e30sT1Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3RyaWdnZXJOYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9zdGF0ZVN0eWxlcz1pfW1hdGNoKHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuLnNvbWUobz0+byh0LGUsaSxyKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxpLHIpfWJ1aWxkU3R5bGVzKHQsZSxpKXtsZXQgcj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09dCYmKHI9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KHQ/LnRvU3RyaW5nKCkpfHxyKSxyP3IuYnVpbGRTdHlsZXMoZSxpKTpuZXcgTWFwfWJ1aWxkKHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVtdLHA9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fGozLGY9dGhpcy5idWlsZFN0eWxlcyhpLGEmJmEucGFyYW1zfHxqMyxkKSxtPWwmJmwucGFyYW1zfHxqMyxDPXRoaXMuYnVpbGRTdHlsZXMocixtLGQpLF89bmV3IFNldCx5PW5ldyBNYXAsST1uZXcgTWFwLEE9InZvaWQiPT09cixPPXtwYXJhbXM6Tk1lKG0scCksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LGVlPXU/W106QVgodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLHMsZixDLE8sYyxkKSxYPTA7aWYoZWUuZm9yRWFjaChmZT0+e1g9TWF0aC5tYXgoZmUuZHVyYXRpb24rZmUuZGVsYXksWCl9KSxkLmxlbmd0aClyZXR1cm4gYVgoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsQSxmLEMsW10sW10seSxJLFgsZCk7ZWUuZm9yRWFjaChmZT0+e2xldCB2ZT1mZS5lbGVtZW50LFQ9QmEoeSx2ZSxuZXcgU2V0KTtmZS5wcmVTdHlsZVByb3BzLmZvckVhY2gobGU9PlQuYWRkKGxlKSk7bGV0IG5lPUJhKEksdmUsbmV3IFNldCk7ZmUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChsZT0+bmUuYWRkKGxlKSksdmUhPT1lJiZfLmFkZCh2ZSl9KTtsZXQgeGU9QVQoXy52YWx1ZXMoKSk7cmV0dXJuIGFYKGUsdGhpcy5fdHJpZ2dlck5hbWUsaSxyLEEsZixDLGVlLHhlLHksSSxYKX19O2Z1bmN0aW9uIE5NZShuLHQpe2xldCBlPW5DKHQpO2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJm51bGwhPW5baV0mJihlW2ldPW5baV0pO3JldHVybiBlfWZ1bmN0aW9uIGxYKG4sdCxlKXtuLmhhcyh0KT9uLmhhcyhlKXx8bi5zZXQoZSxuLmdldCh0KSk6bi5oYXMoZSkmJm4uc2V0KHQsbi5nZXQoZSkpfXZhciBWTWU9bmV3IFp4LGNYPSJuZy1hbmltYXRlLXF1ZXVlZCIsRzM9Im5nLWFuaW1hdGUtZGlzYWJsZWQiLEdNZT1bXSxJWD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sV01lPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSx5bD0iX19uZ19yZW1vdmVkIiwkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtsZXQgaT10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIG4/P251bGx9KGk/dC52YWx1ZTp0KSxpKXtsZXQgbz1uQyh0KTtkZWxldGUgby52YWx1ZSx0aGlzLm9wdGlvbnM9b31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWFic29yYk9wdGlvbnModCl7bGV0IGU9dC5wYXJhbXM7aWYoZSl7bGV0IGk9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntudWxsPT1pW3JdJiYoaVtyXT1lW3JdKX0pfX19LFF4PSJ2b2lkIixXMz1uZXcgJHgoUXgpLGVDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1pLHRoaXMuX3BsYXllcj1uZXcgU3AsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcih0KXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9dCx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgoZSxpKT0+e2UuZm9yRWFjaChyPT5sQih0LGksdm9pZCAwLHIpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5jbGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKHQudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUodCl7dGhpcy50b3RhbFRpbWU9dH1zeW5jUGxheWVyRXZlbnRzKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KCgpPT5lLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksdC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLHQub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQodCxlKXtCYSh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX1vbkRvbmUodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9b25TdGFydCh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfW9uRGVzdHJveSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9fTtmdW5jdGlvbiBFVChuKXtyZXR1cm4gbiYmMT09PW4ubm9kZVR5cGV9ZnVuY3Rpb24gdVgobix0KXtsZXQgZT1uLnN0eWxlLmRpc3BsYXk7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT10Pz8ibm9uZSIsZX1mdW5jdGlvbiBkWChuLHQsZSxpLHIpe2xldCBvPVtdO2UuZm9yRWFjaChsPT5vLnB1c2godVgobCkpKTtsZXQgcz1bXTtpLmZvckVhY2goKGwsYyk9PntsZXQgdT1uZXcgTWFwO2wuZm9yRWFjaChkPT57bGV0IHA9dC5jb21wdXRlU3R5bGUoYyxkLHIpO3Uuc2V0KGQscCksKCFwfHwwPT1wLmxlbmd0aCkmJihjW3lsXT1XTWUscy5wdXNoKGMpKX0pLG4uc2V0KGMsdSl9KTtsZXQgYT0wO3JldHVybiBlLmZvckVhY2gobD0+dVgobCxvW2ErK10pKSxzfWZ1bmN0aW9uIHBYKG4sdCl7bGV0IGU9bmV3IE1hcDtpZihuLmZvckVhY2goYT0+ZS5zZXQoYSxbXSkpLDA9PXQubGVuZ3RoKXJldHVybiBlO2xldCByPW5ldyBTZXQodCksbz1uZXcgTWFwO2Z1bmN0aW9uIHMoYSl7aWYoIWEpcmV0dXJuIDE7bGV0IGw9by5nZXQoYSk7aWYobClyZXR1cm4gbDtsZXQgYz1hLnBhcmVudE5vZGU7cmV0dXJuIGw9ZS5oYXMoYyk/YzpyLmhhcyhjKT8xOnMoYyksby5zZXQoYSxsKSxsfXJldHVybiB0LmZvckVhY2goYT0+e2xldCBsPXMoYSk7MSE9PWwmJmUuZ2V0KGwpLnB1c2goYSl9KSxlfWZ1bmN0aW9uIGJsKG4sdCl7bi5jbGFzc0xpc3Q/LmFkZCh0KX1mdW5jdGlvbiB6MChuLHQpe24uY2xhc3NMaXN0Py5yZW1vdmUodCl9ZnVuY3Rpb24gUU1lKG4sdCxlKXtFcChlKS5vbkRvbmUoKCk9Pm4ucHJvY2Vzc0xlYXZlTm9kZSh0KSl9ZnVuY3Rpb24gUFgobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTtpIGluc3RhbmNlb2YgWXg/UFgoaS5wbGF5ZXJzLHQpOnQucHVzaChpKX19ZnVuY3Rpb24gaFgobix0LGUpe2xldCBpPWUuZ2V0KG4pO2lmKCFpKXJldHVybiExO2xldCByPXQuZ2V0KG4pO3JldHVybiByP2kuZm9yRWFjaChvPT5yLmFkZChvKSk6dC5zZXQobixpKSxlLmRlbGV0ZShuKSwhMH12YXIgVHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fX1fb25SZW1vdmFsQ29tcGxldGUodCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9Z2V0IHF1ZXVlZFBsYXllcnMoKXtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGU9PntlLnBsYXllcnMuZm9yRWFjaChpPT57aS5xdWV1ZWQmJnQucHVzaChpKX0pfSksdH1jcmVhdGVOYW1lc3BhY2UodCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsYmwoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4odCxlLGkscil7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhlKSl0aHJvdyBuZXcgTXQoMzMwMiwhMSk7aWYobnVsbD09aXx8MD09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDMzMDMsITEpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4ic3RhcnQiPT1ufHwiZG9uZSI9PW59KGkpKXRocm93IG5ldyBNdCgzNDAwLCExKTtsZXQgbz1CYSh0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTppLGNhbGxiYWNrOnJ9O28ucHVzaChzKTtsZXQgYT1CYSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQsbmV3IE1hcCk7cmV0dXJuIGEuaGFzKGUpfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksYS5zZXQoZSxXMykpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntsZXQgbD1vLmluZGV4T2Yocyk7bD49MCYmby5zcGxpY2UobCwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoZSl8fGEuZGVsZXRlKGUpfSl9fXJlZ2lzdGVyKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyh0KSYmKHRoaXMuX3RyaWdnZXJzLnNldCh0LGUpLCEwKX1fZ2V0VHJpZ2dlcih0KXtsZXQgZT10aGlzLl90cmlnZ2Vycy5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IE10KDM0MDEsITEpO3JldHVybiBlfXRyaWdnZXIodCxlLGkscj0hMCl7bGV0IG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxzPW5ldyBlQyh0aGlzLmlkLGUsdCksYT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTthfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxhPW5ldyBNYXApKTtsZXQgbD1hLmdldChlKSxjPW5ldyAkeChpLHRoaXMuaWQpO2lmKCEoaSYmaS5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJmwmJmMuYWJzb3JiT3B0aW9ucyhsLm9wdGlvbnMpLGEuc2V0KGUsYyksbHx8KGw9VzMpLGMudmFsdWUhPT1ReCYmbC52YWx1ZT09PWMudmFsdWUpe2lmKCFmdW5jdGlvbihuLHQpe2xldCBlPU9iamVjdC5rZXlzKG4pLGk9T2JqZWN0LmtleXModCk7aWYoZS5sZW5ndGghPWkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbz1lW3JdO2lmKCF0Lmhhc093blByb3BlcnR5KG8pfHxuW29dIT09dFtvXSlyZXR1cm4hMX1yZXR1cm4hMH0obC5wYXJhbXMsYy5wYXJhbXMpKXtsZXQgbT1bXSxDPW8ubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxtKSxfPW8ubWF0Y2hTdHlsZXMoYy52YWx1ZSxjLnBhcmFtcyxtKTttLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IobSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntCZih0LEMpLGR1KHQsXyl9KX1yZXR1cm59bGV0IHA9QmEodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsdCxbXSk7cC5mb3JFYWNoKG09PnttLm5hbWVzcGFjZUlkPT10aGlzLmlkJiZtLnRyaWdnZXJOYW1lPT1lJiZtLnF1ZXVlZCYmbS5kZXN0cm95KCl9KTtsZXQgaD1vLm1hdGNoVHJhbnNpdGlvbihsLnZhbHVlLGMudmFsdWUsdCxjLnBhcmFtcyksZj0hMTtpZighaCl7aWYoIXIpcmV0dXJuO2g9by5mYWxsYmFja1RyYW5zaXRpb24sZj0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246aCxmcm9tU3RhdGU6bCx0b1N0YXRlOmMscGxheWVyOnMsaXNGYWxsYmFja1RyYW5zaXRpb246Zn0pLGZ8fChibCh0LGNYKSxzLm9uU3RhcnQoKCk9Pnt6MCh0LGNYKX0pKSxzLm9uRG9uZSgoKT0+e2xldCBtPXRoaXMucGxheWVycy5pbmRleE9mKHMpO20+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobSwxKTtsZXQgQz10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoQyl7bGV0IF89Qy5pbmRleE9mKHMpO18+PTAmJkMuc3BsaWNlKF8sMSl9fSksdGhpcy5wbGF5ZXJzLnB1c2gocykscC5wdXNoKHMpLHN9ZGVyZWdpc3Rlcih0KXt0aGlzLl90cmlnZ2Vycy5kZWxldGUodCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGU9PmUuZGVsZXRlKHQpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGUsaSk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChpLGUuZmlsdGVyKHI9PnIubmFtZSE9dCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUodCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7bGV0IGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goaT0+aS5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZSh0KSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LFRULCEwKTtpLmZvckVhY2gocj0+e2lmKHJbeWxdKXJldHVybjtsZXQgbz10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHIpO28uc2l6ZT9vLmZvckVhY2gocz0+cy50cmlnZ2VyTGVhdmVBbmltYXRpb24ocixlLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmkuZm9yRWFjaChyPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHIpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSxpLHIpe2xldCBvPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpLHM9bmV3IE1hcDtpZihvKXtsZXQgYT1bXTtpZihvLmZvckVhY2goKGwsYyk9PntpZihzLnNldChjLGwudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhjKSl7bGV0IHU9dGhpcy50cmlnZ2VyKHQsYyxReCxyKTt1JiZhLnB1c2godSl9fSksYS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSxzKSxpJiZFcChhKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKHQpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCl7bGV0IGU9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQodCksaT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihlJiZpKXtsZXQgcj1uZXcgU2V0O2UuZm9yRWFjaChvPT57bGV0IHM9by5uYW1lO2lmKHIuaGFzKHMpKXJldHVybjtyLmFkZChzKTtsZXQgbD10aGlzLl90cmlnZ2Vycy5nZXQocykuZmFsbGJhY2tUcmFuc2l0aW9uLGM9aS5nZXQocyl8fFczLHU9bmV3ICR4KFF4KSxkPW5ldyBlQyh0aGlzLmlkLHMsdCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTpzLHRyYW5zaXRpb246bCxmcm9tU3RhdGU6Yyx0b1N0YXRlOnUscGxheWVyOmQsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSlyZXR1cm47bGV0IHI9ITE7aWYoaS50b3RhbEFuaW1hdGlvbnMpe2xldCBvPWkucGxheWVycy5sZW5ndGg/aS5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpcj0hMDtlbHNle2xldCBzPXQ7Zm9yKDtzPXMucGFyZW50Tm9kZTspaWYoaS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHMpKXtyPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCkscilpLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMSxlKTtlbHNle2xldCBvPXRbeWxdOyghb3x8bz09PUlYKSYmKGkuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZSh0KSksaS5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLGkuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX1pbnNlcnROb2RlKHQsZSl7YmwodCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKHQpe2xldCBlPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGk9PntsZXQgcj1pLnBsYXllcjtpZihyLmRlc3Ryb3llZClyZXR1cm47bGV0IG89aS5lbGVtZW50LHM9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7cyYmcy5mb3JFYWNoKGE9PntpZihhLm5hbWU9PWkudHJpZ2dlck5hbWUpe2xldCBsPWNCKG8saS50cmlnZ2VyTmFtZSxpLmZyb21TdGF0ZS52YWx1ZSxpLnRvU3RhdGUudmFsdWUpO2wuX2RhdGE9dCxsQihpLnBsYXllcixhLnBoYXNlLGwsYS5jYWxsYmFjayl9fSksci5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ci5kZXN0cm95KCl9KTplLnB1c2goaSl9KSx0aGlzLl9xdWV1ZT1bXSxlLnNvcnQoKGkscik9PntsZXQgbz1pLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LHM9ci50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09b3x8MD09cz9vLXM6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoaS5lbGVtZW50LHIuZWxlbWVudCk/MTotMX0pfWRlc3Ryb3kodCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9ZWxlbWVudENvbnRhaW5zRGF0YSh0KXtsZXQgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSxlPSEhdGhpcy5fcXVldWUuZmluZChpPT5pLmVsZW1lbnQ9PT10KXx8ZSxlfX0odCxlLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxlKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChpLGUpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoZSxpKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XT1pfV9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LGUpe2xldCBpPXRoaXMuX25hbWVzcGFjZUxpc3Qscj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGkubGVuZ3RoLTE+PTApe2xldCBzPSExLGE9dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChlKTtmb3IoO2E7KXtsZXQgbD1yLmdldChhKTtpZihsKXtsZXQgYz1pLmluZGV4T2YobCk7aS5zcGxpY2UoYysxLDAsdCkscz0hMDticmVha31hPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSl9c3x8aS51bnNoaWZ0KHQpfWVsc2UgaS5wdXNoKHQpO3JldHVybiByLnNldChlLHQpLHR9cmVnaXN0ZXIodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIGl8fChpPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLGl9cmVnaXN0ZXJUcmlnZ2VyKHQsZSxpKXtsZXQgcj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07ciYmci5yZWdpc3RlcihlLGkpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kodCxlKXtpZighdClyZXR1cm47bGV0IGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKCgpPT57dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoaS5ob3N0RWxlbWVudCksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtsZXQgcj10aGlzLl9uYW1lc3BhY2VMaXN0LmluZGV4T2YoaSk7cj49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UociwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmRlc3Ryb3koZSkpfV9mZXRjaE5hbWVzcGFjZSh0KXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KXtsZXQgZT1uZXcgU2V0LGk9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKGkpZm9yKGxldCByIG9mIGkudmFsdWVzKCkpaWYoci5uYW1lc3BhY2VJZCl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2Uoci5uYW1lc3BhY2VJZCk7byYmZS5hZGQobyl9cmV0dXJuIGV9dHJpZ2dlcih0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYobylyZXR1cm4gby50cmlnZ2VyKGUsaSxyKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKHQsZSxpLHIpe2lmKCFFVChlKSlyZXR1cm47bGV0IG89ZVt5bF07aWYobyYmby5zZXRGb3JSZW1vdmFsKXtvLnNldEZvclJlbW92YWw9ITEsby5zZXRGb3JNb3ZlPSEwO2xldCBzPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO3M+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UocywxKX1pZih0KXtsZXQgcz10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtzJiZzLmluc2VydE5vZGUoZSxpKX1yJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9Y29sbGVjdEVudGVyRWxlbWVudCh0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX1tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLGJsKHQsRzMpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZSh0KSx6MCh0LEczKSl9cmVtb3ZlTm9kZSh0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dD90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTpudWxsO2lmKG8/by5yZW1vdmVOb2RlKGUscik6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0LGUsITEsciksaSl7bGV0IHM9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoZSk7cyYmcy5pZCE9PXQmJnMucmVtb3ZlTm9kZShlLHIpfX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUscil9bWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLGkscixvKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChlKSxlW3lsXT17bmFtZXNwYWNlSWQ6dCxzZXRGb3JSZW1vdmFsOnIsaGFzQW5pbWF0aW9uOmkscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpvfX1saXN0ZW4odCxlLGkscixvKXtyZXR1cm4gRVQoZSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkubGlzdGVuKGUsaSxyLG8pOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbih0LGUsaSxyLG8pe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxpLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLG8pfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCl7bGV0IGU9dGhpcy5kcml2ZXIucXVlcnkodCxUVCwhMCk7ZS5mb3JFYWNoKGk9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGkpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUTMsITApLGUuZm9yRWFjaChpPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoaSkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goaT0+e2kucXVldWVkP2kubWFya2VkRm9yRGVzdHJveT0hMDppLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PmkuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntpZih0aGlzLnBsYXllcnMubGVuZ3RoKXJldHVybiBFcCh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+dCgpKTt0KCl9KX1wcm9jZXNzTGVhdmVOb2RlKHQpe2xldCBlPXRbeWxdO2lmKGUmJmUuc2V0Rm9yUmVtb3ZhbCl7aWYodFt5bF09SVgsZS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUubmFtZXNwYWNlSWQpO2kmJmkuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxlLnNldEZvclJlbW92YWwpfXQuY2xhc3NMaXN0Py5jb250YWlucyhHMykmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChpPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQoaSwhMSl9KX1mbHVzaCh0PS0xKXtsZXQgZT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoaSxyKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxyKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2krKylibCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbaV0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7bGV0IGk9W107dHJ5e2U9dGhpcy5fZmx1c2hBbmltYXRpb25zKGksdCl9ZmluYWxseXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdKCl9fWVsc2UgZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2krKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2ldKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChpPT5pKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2xldCBpPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sZS5sZW5ndGg/RXAoZSkub25Eb25lKCgpPT57aS5mb3JFYWNoKHI9PnIoKSl9KTppLmZvckVhY2gocj0+cigpKX19cmVwb3J0RXJyb3IodCl7dGhyb3cgbmV3IE10KDM0MDIsITEpfV9mbHVzaEFuaW1hdGlvbnModCxlKXtsZXQgaT1uZXcgWngscj1bXSxvPW5ldyBNYXAscz1bXSxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx1PW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goSj0+e3UuYWRkKEopO2xldCBhZT10aGlzLmRyaXZlci5xdWVyeShKLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0IG1lPTA7bWU8YWUubGVuZ3RoO21lKyspdS5hZGQoYWVbbWVdKX0pO2xldCBkPXRoaXMuYm9keU5vZGUscD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksaD1wWChwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksZj1uZXcgTWFwLG09MDtoLmZvckVhY2goKEosYWUpPT57bGV0IG1lPWJYK20rKztmLnNldChhZSxtZSksSi5mb3JFYWNoKGplPT5ibChqZSxtZSkpfSk7bGV0IEM9W10sXz1uZXcgU2V0LHk9bmV3IFNldDtmb3IobGV0IEo9MDtKPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7SisrKXtsZXQgYWU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0pdLG1lPWFlW3lsXTttZSYmbWUuc2V0Rm9yUmVtb3ZhbCYmKEMucHVzaChhZSksXy5hZGQoYWUpLG1lLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShhZSwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGplPT5fLmFkZChqZSkpOnkuYWRkKGFlKSl9bGV0IEk9bmV3IE1hcCxBPXBYKHAsQXJyYXkuZnJvbShfKSk7QS5mb3JFYWNoKChKLGFlKT0+e2xldCBtZT1YMyttKys7SS5zZXQoYWUsbWUpLEouZm9yRWFjaChqZT0+YmwoamUsbWUpKX0pLHQucHVzaCgoKT0+e2guZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9Zi5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEEuZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9SS5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEMuZm9yRWFjaChKPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEopfSl9KTtsZXQgTz1bXSxlZT1bXTtmb3IobGV0IEo9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtKPj0wO0otLSl0aGlzLl9uYW1lc3BhY2VMaXN0W0pdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChtZT0+e2xldCBqZT1tZS5wbGF5ZXIsTWU9bWUuZWxlbWVudDtpZihPLnB1c2goamUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2xldCBFdD1NZVt5bF07aWYoRXQmJkV0LnNldEZvck1vdmUpe2lmKEV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJkV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKG1lLnRyaWdnZXJOYW1lKSl7bGV0IG9uPUV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KG1lLnRyaWdnZXJOYW1lKSxDZT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobWUuZWxlbWVudCk7aWYoQ2UmJkNlLmhhcyhtZS50cmlnZ2VyTmFtZSkpe2xldCB2dD1DZS5nZXQobWUudHJpZ2dlck5hbWUpO3Z0LnZhbHVlPW9uLENlLnNldChtZS50cmlnZ2VyTmFtZSx2dCl9fXJldHVybiB2b2lkIGplLmRlc3Ryb3koKX19bGV0IEZlPSFkfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQsTWUpLHV0PUkuZ2V0KE1lKSxTdD1mLmdldChNZSksZ3Q9dGhpcy5fYnVpbGRJbnN0cnVjdGlvbihtZSxpLFN0LHV0LEZlKTtpZihndC5lcnJvcnMmJmd0LmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgZWUucHVzaChndCk7aWYoRmUpcmV0dXJuIGplLm9uU3RhcnQoKCk9PkJmKE1lLGd0LmZyb21TdHlsZXMpKSxqZS5vbkRlc3Ryb3koKCk9PmR1KE1lLGd0LnRvU3R5bGVzKSksdm9pZCByLnB1c2goamUpO2lmKG1lLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBqZS5vblN0YXJ0KCgpPT5CZihNZSxndC5mcm9tU3R5bGVzKSksamUub25EZXN0cm95KCgpPT5kdShNZSxndC50b1N0eWxlcykpLHZvaWQgci5wdXNoKGplKTtsZXQgUmU9W107Z3QudGltZWxpbmVzLmZvckVhY2goRXQ9PntFdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKEV0LmVsZW1lbnQpfHxSZS5wdXNoKEV0KX0pLGd0LnRpbWVsaW5lcz1SZSxpLmFwcGVuZChNZSxndC50aW1lbGluZXMpLHMucHVzaCh7aW5zdHJ1Y3Rpb246Z3QscGxheWVyOmplLGVsZW1lbnQ6TWV9KSxndC5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChFdD0+QmEoYSxFdCxbXSkucHVzaChqZSkpLGd0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoRXQsb24pPT57aWYoRXQuc2l6ZSl7bGV0IENlPWwuZ2V0KG9uKTtDZXx8bC5zZXQob24sQ2U9bmV3IFNldCksRXQuZm9yRWFjaCgodnQsX3QpPT5DZS5hZGQoX3QpKX19KSxndC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKChFdCxvbik9PntsZXQgQ2U9Yy5nZXQob24pO0NlfHxjLnNldChvbixDZT1uZXcgU2V0KSxFdC5mb3JFYWNoKCh2dCxfdCk9PkNlLmFkZChfdCkpfSl9KTtpZihlZS5sZW5ndGgpe2xldCBKPVtdO2VlLmZvckVhY2goYWU9PntKLnB1c2gobmV3IE10KDM1MDUsITEpKX0pLE8uZm9yRWFjaChhZT0+YWUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKEopfWxldCBYPW5ldyBNYXAseGU9bmV3IE1hcDtzLmZvckVhY2goSj0+e2xldCBhZT1KLmVsZW1lbnQ7aS5oYXMoYWUpJiYoeGUuc2V0KGFlLGFlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChKLnBsYXllci5uYW1lc3BhY2VJZCxKLmluc3RydWN0aW9uLFgpKX0pLHIuZm9yRWFjaChKPT57bGV0IGFlPUouZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYWUsITEsSi5uYW1lc3BhY2VJZCxKLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goamU9PntCYShYLGFlLFtdKS5wdXNoKGplKSxqZS5kZXN0cm95KCl9KX0pO2xldCBmZT1DLmZpbHRlcihKPT5oWChKLGwsYykpLHZlPW5ldyBNYXA7ZFgodmUsdGhpcy5kcml2ZXIseSxjLHV1KS5mb3JFYWNoKEo9PntoWChKLGwsYykmJmZlLnB1c2goSil9KTtsZXQgbmU9bmV3IE1hcDtoLmZvckVhY2goKEosYWUpPT57ZFgobmUsdGhpcy5kcml2ZXIsbmV3IFNldChKKSxsLCIhIil9KSxmZS5mb3JFYWNoKEo9PntsZXQgYWU9dmUuZ2V0KEopLG1lPW5lLmdldChKKTt2ZS5zZXQoSixuZXcgTWFwKFsuLi5BcnJheS5mcm9tKGFlPy5lbnRyaWVzKCk/P1tdKSwuLi5BcnJheS5mcm9tKG1lPy5lbnRyaWVzKCk/P1tdKV0pKX0pO2xldCBsZT1bXSxoZT1bXSx5ZT17fTtzLmZvckVhY2goSj0+e2xldHtlbGVtZW50OmFlLHBsYXllcjptZSxpbnN0cnVjdGlvbjpqZX09SjtpZihpLmhhcyhhZSkpe2lmKHUuaGFzKGFlKSlyZXR1cm4gbWUub25EZXN0cm95KCgpPT5kdShhZSxqZS50b1N0eWxlcykpLG1lLmRpc2FibGVkPSEwLG1lLm92ZXJyaWRlVG90YWxUaW1lKGplLnRvdGFsVGltZSksdm9pZCByLnB1c2gobWUpO2xldCBNZT15ZTtpZih4ZS5zaXplPjEpe2xldCB1dD1hZSxTdD1bXTtmb3IoO3V0PXV0LnBhcmVudE5vZGU7KXtsZXQgZ3Q9eGUuZ2V0KHV0KTtpZihndCl7TWU9Z3Q7YnJlYWt9U3QucHVzaCh1dCl9U3QuZm9yRWFjaChndD0+eGUuc2V0KGd0LE1lKSl9bGV0IEZlPXRoaXMuX2J1aWxkQW5pbWF0aW9uKG1lLm5hbWVzcGFjZUlkLGplLFgsbyxuZSx2ZSk7aWYobWUuc2V0UmVhbFBsYXllcihGZSksTWU9PT15ZSlsZS5wdXNoKG1lKTtlbHNle2xldCB1dD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KE1lKTt1dCYmdXQubGVuZ3RoJiYobWUucGFyZW50UGxheWVyPUVwKHV0KSksci5wdXNoKG1lKX19ZWxzZSBCZihhZSxqZS5mcm9tU3R5bGVzKSxtZS5vbkRlc3Ryb3koKCk9PmR1KGFlLGplLnRvU3R5bGVzKSksaGUucHVzaChtZSksdS5oYXMoYWUpJiZyLnB1c2gobWUpfSksaGUuZm9yRWFjaChKPT57bGV0IGFlPW8uZ2V0KEouZWxlbWVudCk7aWYoYWUmJmFlLmxlbmd0aCl7bGV0IG1lPUVwKGFlKTtKLnNldFJlYWxQbGF5ZXIobWUpfX0pLHIuZm9yRWFjaChKPT57Si5wYXJlbnRQbGF5ZXI/Si5zeW5jUGxheWVyRXZlbnRzKEoucGFyZW50UGxheWVyKTpKLmRlc3Ryb3koKX0pO2ZvcihsZXQgSj0wO0o8Qy5sZW5ndGg7SisrKXtsZXQgYWU9Q1tKXSxtZT1hZVt5bF07aWYoejAoYWUsWDMpLG1lJiZtZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGplPVtdO2lmKGEuc2l6ZSl7bGV0IEZlPWEuZ2V0KGFlKTtGZSYmRmUubGVuZ3RoJiZqZS5wdXNoKC4uLkZlKTtsZXQgdXQ9dGhpcy5kcml2ZXIucXVlcnkoYWUsUTMsITApO2ZvcihsZXQgU3Q9MDtTdDx1dC5sZW5ndGg7U3QrKyl7bGV0IGd0PWEuZ2V0KHV0W1N0XSk7Z3QmJmd0Lmxlbmd0aCYmamUucHVzaCguLi5ndCl9fWxldCBNZT1qZS5maWx0ZXIoRmU9PiFGZS5kZXN0cm95ZWQpO01lLmxlbmd0aD9RTWUodGhpcyxhZSxNZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGFlKX1yZXR1cm4gQy5sZW5ndGg9MCxsZS5mb3JFYWNoKEo9Pnt0aGlzLnBsYXllcnMucHVzaChKKSxKLm9uRG9uZSgoKT0+e0ouZGVzdHJveSgpO2xldCBhZT10aGlzLnBsYXllcnMuaW5kZXhPZihKKTt0aGlzLnBsYXllcnMuc3BsaWNlKGFlLDEpfSksSi5wbGF5KCl9KSxsZX1lbGVtZW50Q29udGFpbnNEYXRhKHQsZSl7bGV0IGk9ITEscj1lW3lsXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYoaT0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8aX1hZnRlckZsdXNoKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfV9nZXRQcmV2aW91c1BsYXllcnModCxlLGkscixvKXtsZXQgcz1bXTtpZihlKXtsZXQgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYocz1hKX1lbHNle2xldCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoYSl7bGV0IGw9IW98fG89PVF4O2EuZm9yRWFjaChjPT57Yy5xdWV1ZWR8fCFsJiZjLnRyaWdnZXJOYW1lIT1yfHxzLnB1c2goYyl9KX19cmV0dXJuKGl8fHIpJiYocz1zLmZpbHRlcihhPT4hKGkmJmkhPWEubmFtZXNwYWNlSWR8fHImJnIhPWEudHJpZ2dlck5hbWUpKSksc31fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLGkpe2xldCBvPWUuZWxlbWVudCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IobGV0IGwgb2YgZS50aW1lbGluZXMpe2xldCBjPWwuZWxlbWVudCx1PWMhPT1vLGQ9QmEoaSxjLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYyx1LHMsYSxlLnRvU3RhdGUpLmZvckVhY2goaD0+e2xldCBmPWguZ2V0UmVhbFBsYXllcigpO2YuYmVmb3JlRGVzdHJveSYmZi5iZWZvcmVEZXN0cm95KCksaC5kZXN0cm95KCksZC5wdXNoKGgpfSl9QmYobyxlLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbih0LGUsaSxyLG8scyl7bGV0IGE9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCxjPVtdLHU9bmV3IFNldCxkPW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAoZj0+e2xldCBtPWYuZWxlbWVudDt1LmFkZChtKTtsZXQgQz1tW3lsXTtpZihDJiZDLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgU3AoZi5kdXJhdGlvbixmLmRlbGF5KTtsZXQgXz1tIT09bCx5PWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBQWChuLHQpLHR9KChpLmdldChtKXx8R01lKS5tYXAoWD0+WC5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoWD0+ISFYLmVsZW1lbnQmJlguZWxlbWVudD09PW0pLEk9by5nZXQobSksQT1zLmdldChtKSxPPWZYKDAsdGhpcy5fbm9ybWFsaXplciwwLGYua2V5ZnJhbWVzLEksQSksZWU9dGhpcy5fYnVpbGRQbGF5ZXIoZixPLHkpO2lmKGYuc3ViVGltZWxpbmUmJnImJmQuYWRkKG0pLF8pe2xldCBYPW5ldyBlQyh0LGEsbSk7WC5zZXRSZWFsUGxheWVyKGVlKSxjLnB1c2goWCl9cmV0dXJuIGVlfSk7Yy5mb3JFYWNoKGY9PntCYSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGYuZWxlbWVudCxbXSkucHVzaChmKSxmLm9uRG9uZSgoKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZ2V0KHQpO2lmKGkpe2lmKGkubGVuZ3RoKXtsZXQgcj1pLmluZGV4T2YoZSk7aS5zcGxpY2UociwxKX0wPT1pLmxlbmd0aCYmbi5kZWxldGUodCl9cmV0dXJuIGl9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsZi5lbGVtZW50LGYpKX0pLHUuZm9yRWFjaChmPT5ibChmLG5YKSk7bGV0IGg9RXAocCk7cmV0dXJuIGgub25EZXN0cm95KCgpPT57dS5mb3JFYWNoKGY9PnowKGYsblgpKSxkdShsLGUudG9TdHlsZXMpfSksZC5mb3JFYWNoKGY9PntCYShyLGYsW10pLnB1c2goaCl9KSxofV9idWlsZFBsYXllcih0LGUsaSl7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsaSk6bmV3IFNwKHQuZHVyYXRpb24sdC5kZWxheSl9fSh0LGUsaSksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3Rlcih0LGUpe2xldCBpPVtdLG89RFgodGhpcy5fZHJpdmVyLGUsaSxbXSk7aWYoaS5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDMsITEpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KHQsbyl9X2J1aWxkUGxheWVyKHQsZSxpKXtsZXQgcj10LmVsZW1lbnQsbz1mWCgwLHRoaXMuX25vcm1hbGl6ZXIsMCx0LmtleWZyYW1lcyxlLGkpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShyLG8sdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLFtdLCEwKX1jcmVhdGUodCxlLGk9e30pe2xldCBzLHI9W10sbz10aGlzLl9hbmltYXRpb25zLmdldCh0KSxhPW5ldyBNYXA7aWYobz8ocz1BWCh0aGlzLl9kcml2ZXIsZSxvLGJYLFgzLG5ldyBNYXAsbmV3IE1hcCxpLFZNZSxyKSxzLmZvckVhY2godT0+e2xldCBkPUJhKGEsdS5lbGVtZW50LG5ldyBNYXApO3UucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChwPT5kLnNldChwLG51bGwpKX0pKTooci5wdXNoKG5ldyBNdCgzMzAwLCExKSkscz1bXSksci5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDQsITEpO2EuZm9yRWFjaCgodSxkKT0+e3UuZm9yRWFjaCgocCxoKT0+e3Uuc2V0KGgsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZShkLGgsdXUpKX0pfSk7bGV0IGM9RXAocy5tYXAodT0+e2xldCBkPWEuZ2V0KHUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKHUsbmV3IE1hcCxkKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KHQsYyksYy5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSh0KSksdGhpcy5wbGF5ZXJzLnB1c2goYyksY31kZXN0cm95KHQpe2xldCBlPXRoaXMuX2dldFBsYXllcih0KTtlLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUodCk7bGV0IGk9dGhpcy5wbGF5ZXJzLmluZGV4T2YoZSk7aT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShpLDEpfV9nZXRQbGF5ZXIodCl7bGV0IGU9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBNdCgzMzAxLCExKTtyZXR1cm4gZX1saXN0ZW4odCxlLGkscil7bGV0IG89Y0IoZSwiIiwiIiwiIik7cmV0dXJuIGxCKHRoaXMuX2dldFBsYXllcih0KSxpLG8sciksKCk9Pnt9fWNvbW1hbmQodCxlLGkscil7aWYoInJlZ2lzdGVyIj09aSlyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKHQsclswXSk7aWYoImNyZWF0ZSI9PWkpcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUodCxlLHJbMF18fHt9KTtsZXQgbz10aGlzLl9nZXRQbGF5ZXIodCk7c3dpdGNoKGkpe2Nhc2UicGxheSI6by5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6by5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOm8ucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOm8ucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpvLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6by5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6by5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KHJbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveSh0KX19fSh0LGUsaSksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShyLG8pfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSxyLG8pe2xldCBzPXQrIi0iK3IsYT10aGlzLl90cmlnZ2VyQ2FjaGVbc107aWYoIWEpe2xldCBsPVtdLHU9RFgodGhpcy5fZHJpdmVyLG8sbCxbXSk7aWYobC5sZW5ndGgpdGhyb3cgbmV3IE10KDM0MDQsITEpO2E9ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGUuc3RhdGVzLmZvckVhY2gocj0+e2xldCBvPXIub3B0aW9ucyYmci5vcHRpb25zLnBhcmFtc3x8e307dGhpcy5zdGF0ZXMuc2V0KHIubmFtZSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWUsdGhpcy5ub3JtYWxpemVyPWl9YnVpbGRTdHlsZXModCxlKXtsZXQgaT1uZXcgTWFwLHI9bkModGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChvPT57bGV0IHM9dFtvXTtudWxsIT09cyYmKHJbb109cyl9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChvPT57InN0cmluZyIhPXR5cGVvZiBvJiZvLmZvckVhY2goKHMsYSk9PntzJiYocz1LeChzLHIsZSkpO2xldCBsPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoYSxlKTtzPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKGEsbCxzLGUpLGkuc2V0KGwscyl9KX0pLGl9fShyLnN0eWxlLG8saSkpfSksbFgodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksbFgodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChyPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IE9UKHQscix0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgT1Qobix7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6WyhzLGEpPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0KX0odCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKHQsZSxpLHIpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZChzPT5zLm1hdGNoKHQsZSxpLHIpKXx8bnVsbH1tYXRjaFN0eWxlcyh0LGUsaSl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKHQsZSxpKX19KG4sdCxlKX0ocix1LHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVtzXT1hfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGUscixhKX1yZWdpc3Rlcih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX1kZXN0cm95KHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9b25JbnNlcnQodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKHQsZSxpLHIpfW9uUmVtb3ZlKHQsZSxpLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUscnx8ITEsaSl9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpfXByb2Nlc3ModCxlLGkscil7aWYoIkAiPT1pLmNoYXJBdCgwKSl7bGV0W28sc109ZVgoaSk7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChvLGUscyxyKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsaSxyKX1saXN0ZW4odCxlLGkscixvKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbcyxhXT1lWChpKTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKHMsZSxhLG8pfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3Rlbih0LGUsaSxyLG8pfWZsdXNoKHQ9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9Z2V0IHBsYXllcnMoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLmNvbmNhdCh0aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fSwkTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3N0YXJ0U3R5bGVzPWksdGhpcy5fZW5kU3R5bGVzPXIsdGhpcy5fc3RhdGU9MDtsZXQgbz1uLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGUpO298fG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQoZSxvPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9b31zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxlcyYmZHUodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzJiYoZHUodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYobi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKEJmKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihCZih0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fXJldHVybiBuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXAsbn0pKCk7ZnVuY3Rpb24gcTMobil7bGV0IHQ9bnVsbDtyZXR1cm4gbi5mb3JFYWNoKChlLGkpPT57KGZ1bmN0aW9uKG4pe3JldHVybiJkaXNwbGF5Ij09PW58fCJwb3NpdGlvbiI9PT1ufSkoaSkmJih0PXR8fG5ldyBNYXAsdC5zZXQoaSxlKSl9KSx0fXZhciBrVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1pLHRoaXMuX3NwZWNpYWxTdHlsZXM9cix0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1pLmR1cmF0aW9uLHRoaXMuX2RlbGF5PWkuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtsZXQgdD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCx0LHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT10Lmxlbmd0aD90W3QubGVuZ3RoLTFdOm5ldyBNYXAsdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKT0+dGhpcy5fb25GaW5pc2goKSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QodCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaChpPT57ZS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhpKSl9KSxlfV90cmlnZ2VyV2ViQW5pbWF0aW9uKHQsZSxpKXtyZXR1cm4gdC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChlKSxpKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24odCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtsZXQgdD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGkscik9Pnsib2Zmc2V0IiE9PXImJnQuc2V0KHIsdGhpcy5fZmluaXNoZWQ/aTpNWCh0aGlzLmVsZW1lbnQscikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LG5TZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcXh7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX25leHRBbmltYXRpb25JZD0wLHRoaXMuX3JlbmRlcmVyPWUuY3JlYXRlUmVuZGVyZXIoaS5ib2R5LHtpZDoiMCIsZW5jYXBzdWxhdGlvbjp3YS5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSl9YnVpbGQoZSl7bGV0IGk9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7bGV0IHI9QXJyYXkuaXNBcnJheShlKT94VChlKTplO3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcixudWxsLGksInJlZ2lzdGVyIixbcl0pLG5ldyBmQihpLHRoaXMuX3JlbmRlcmVyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxYyksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGZCPWNsYXNzIGV4dGVuZHMgYlR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2lkPXQsdGhpcy5fcmVuZGVyZXI9ZX1jcmVhdGUodCxlKXtyZXR1cm4gbmV3IG1CKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfX0sbUI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixpKX1fbGlzdGVuKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsYEBAJHt0aGlzLmlkfToke3R9YCxlKX1fY29tbWFuZCh0LC4uLmUpe3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfW9uRG9uZSh0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfW9uU3RhcnQodCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9b25EZXN0cm95KHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9aW5pdCgpe3RoaXMuX2NvbW1hbmQoImluaXQiKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfXBhdXNlKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX1yZXN0YXJ0KCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfWZpbmlzaCgpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfWRlc3Ryb3koKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9cmVzZXQoKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzWyt0aGlzLmlkXT8uZ2V0UG9zaXRpb24oKT8/MH19O2Z1bmN0aW9uIE9YKG4sdCxlLGkscil7cmV0dXJuIG4uc2V0UHJvcGVydHkodCxgQEAke2V9OiR7aX1gLHIpfXZhciBrWD0iQC5kaXNhYmxlZCIsaVNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1pLHRoaXMuX3pvbmU9cix0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsdGhpcy5wcm9taXNlPVByb21pc2UucmVzb2x2ZSgwKSxpLm9uUmVtb3ZhbENvbXBsZXRlPShvLHMpPT57bGV0IGE9cz8ucGFyZW50Tm9kZShvKTthJiZzLnJlbW92ZUNoaWxkKGEsbyl9fWNyZWF0ZVJlbmRlcmVyKGUsaSl7bGV0IG89dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihlLGkpO2lmKCEoZSYmaSYmaS5kYXRhJiZpLmRhdGEuYW5pbWF0aW9uKSl7bGV0IHU9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobyk7cmV0dXJuIHV8fCh1PW5ldyBMVCgiIixvLHRoaXMuZW5naW5lLCgpPT50aGlzLl9yZW5kZXJlckNhY2hlLmRlbGV0ZShvKSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQobyx1KSksdX1sZXQgcz1pLmlkLGE9aS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsZSk7bGV0IGw9dT0+e0FycmF5LmlzQXJyYXkodSk/dS5mb3JFYWNoKGwpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihzLGEsZSx1Lm5hbWUsdSl9O3JldHVybiBpLmRhdGEuYW5pbWF0aW9uLmZvckVhY2gobCksbmV3IGdCKHRoaXMsYSxvLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soZSxpLHIpe2U+PTAmJmU8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oKCk9PmkocikpOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2gobz0+e2xldFtzLGFdPW87cyhhKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2kscl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocWMpLFIoVHApLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxMVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fb25EZXN0cm95PXIsdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP289PmUuZGVzdHJveU5vZGUobyk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX1hcHBlbmRDaGlsZCh0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9aW5zZXJ0QmVmb3JlKHQsZSxpLHI9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxpKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCxyKX1yZW1vdmVDaGlsZCh0LGUsaSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUsaSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0LGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX1uZXh0U2libGluZyh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX1zZXRBdHRyaWJ1dGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLGkscil9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl9YWRkQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9cmVtb3ZlQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9c2V0U3R5bGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsaSxyKX1yZW1vdmVTdHlsZSh0LGUsaSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsaSl9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIWkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsaSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fSxnQj1jbGFzcyBleHRlbmRzIExUe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5mYWN0b3J5PXQsdGhpcy5uYW1lc3BhY2VJZD1lfXNldFByb3BlcnR5KHQsZSxpKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxpPXZvaWQgMD09PWl8fCEhaSk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zbGljZSgxKSxpKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxpKX1saXN0ZW4odCxlLGkpe2lmKCJAIj09ZS5jaGFyQXQoMCkpe2xldCByPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBufX0odCksbz1lLnNsaWNlKDEpLHM9IiI7cmV0dXJuIkAiIT1vLmNoYXJBdCgwKSYmKFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PW4uaW5kZXhPZigiLiIpO3JldHVybltuLnN1YnN0cmluZygwLHQpLG4uc2xpY2UodCsxKV19KG8pKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxyLG8scyxhPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhhLl9kYXRhfHwtMSxpLGEpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX19LHNTZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVHB7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZS5ib2R5LGkscil9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodEMpLFIoVmYpLFIoSmMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxGWD1be3Byb3ZpZGU6cXgsdXNlQ2xhc3M6blNlfSx7cHJvdmlkZTpWZix1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSVH19LHtwcm92aWRlOlRwLHVzZUNsYXNzOnNTZX0se3Byb3ZpZGU6cWMsdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBpU2Uobix0LGUpfSxkZXBzOltqeCxUcCxwdF19XSxSWD1be3Byb3ZpZGU6dEMsdXNlRmFjdG9yeTooKT0+bmV3IGNsYXNze3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KHQsZSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KHQsZSl7cmV0dXJuIF9YKHQsZSl9Z2V0UGFyZW50RWxlbWVudCh0KXtyZXR1cm4gdUIodCl9cXVlcnkodCxlLGkpe3JldHVybiB2WCh0LGUsaSl9Y29tcHV0ZVN0eWxlKHQsZSxpKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19YW5pbWF0ZSh0LGUsaSxyLG8scz1bXSl7bGV0IGw9e2R1cmF0aW9uOmksZGVsYXk6cixmaWxsOjA9PXI/ImJvdGgiOiJmb3J3YXJkcyJ9O28mJihsLmVhc2luZz1vKTtsZXQgYz1uZXcgTWFwLHU9cy5maWx0ZXIoaD0+aCBpbnN0YW5jZW9mIGtUKTsoZnVuY3Rpb24obix0KXtyZXR1cm4gMD09PW58fDA9PT10fSkoaSxyKSYmdS5mb3JFYWNoKGg9PntoLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChmLG0pPT5jLnNldChtLGYpKX0pO2xldCBkPWZ1bmN0aW9uKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdaW5zdGFuY2VvZiBNYXA/bjpuLm1hcCh0PT54WCh0KSk6W119KGUpLm1hcChoPT5qMChoKSk7ZD1mdW5jdGlvbihuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IGk9dFswXSxyPVtdO2lmKGUuZm9yRWFjaCgobyxzKT0+e2kuaGFzKHMpfHxyLnB1c2gocyksaS5zZXQocyxvKX0pLHIubGVuZ3RoKWZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3IuZm9yRWFjaChhPT5zLnNldChhLE1YKG4sYSkpKX19cmV0dXJuIHR9KHQsZCxjKTtsZXQgcD1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD8oZT1xMyh0WzBdKSx0Lmxlbmd0aD4xJiYoaT1xMyh0W3QubGVuZ3RoLTFdKSkpOnQgaW5zdGFuY2VvZiBNYXAmJihlPXEzKHQpKSxlfHxpP25ldyAkTWUobixlLGkpOm51bGx9KHQsZCk7cmV0dXJuIG5ldyBrVCh0LGQsbCxwKX19fSx7cHJvdmlkZTpMaSx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5GWF0sY1NlPVt7cHJvdmlkZTp0Qyx1c2VDbGFzczpkQn0se3Byb3ZpZGU6TGksdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uRlhdLE5YPSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOmUuZGlzYWJsZUFuaW1hdGlvbnM/Y1NlOlJYfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpSWCxpbXBvcnRzOlt5VF19KSxufSkoKSxiQj17fTtmdW5jdGlvbiB3ZShuLHQpe2lmKGJCW25dPShiQltuXXx8MCkrMSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gX0IobiwoLi4uaSk9Pih7Li4udCguLi5pKSx0eXBlOm59KSk7c3dpdGNoKHQ/dC5fYXM6ImVtcHR5Iil7Y2FzZSJlbXB0eSI6cmV0dXJuIF9CKG4sKCk9Pih7dHlwZTpufSkpO2Nhc2UicHJvcHMiOnJldHVybiBfQihuLGk9Pih7Li4uaSx0eXBlOm59KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY29uZmlnLiIpfX1mdW5jdGlvbiBfQihuLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZSIse3ZhbHVlOm4sd3JpdGFibGU6ITF9KX12YXIgSlg9IkBuZ3J4L3N0b3JlL2luaXQiLHEwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBWcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOkpYfSl9bmV4dChlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih0eXBlb2YgZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGJlIG9iamVjdHMiKTtpZih0eXBlb2YgZS50eXBlPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJBY3Rpb25zIG11c3QgaGF2ZSBhIHR5cGUgcHJvcGVydHkiKTtzdXBlci5uZXh0KGUpfWNvbXBsZXRlKCl7fW5nT25EZXN0cm95KCl7c3VwZXIuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdVNlPVtxMF0sJFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksTFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksTUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksZVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSxCWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLHRRPW5ldyBzZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLHZCPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLFZYPW5ldyBzZSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxIWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIikseUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksVVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxuUT1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIikselg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksaVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksalg9bmV3IHNlKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxXMD1uZXcgc2UoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxHWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxXWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIikscVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGlDPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxTQj1uZXcgc2UoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gSGYobix0PXt9KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dOyJmdW5jdGlvbiI9PXR5cGVvZiBuW3NdJiYoaVtzXT1uW3NdKX1sZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gZnVuY3Rpb24ocyxhKXtzPXZvaWQgMD09PXM/dDpzO2xldCBsPSExLGM9e307Zm9yKGxldCB1PTA7dTxyLmxlbmd0aDt1Kyspe2xldCBkPXJbdV0saD1zW2RdLGY9KDAsaVtkXSkoaCxhKTtjW2RdPWYsbD1sfHxmIT09aH1yZXR1cm4gbD9jOnN9fWZ1bmN0aW9uIFVUKC4uLm4pe3JldHVybiBmdW5jdGlvbih0KXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgocixvKT0+byhyKSxlKHQpKX19ZnVuY3Rpb24gclEobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmKG49VVQuYXBwbHkobnVsbCxbLi4udCxuXSkpLChlLGkpPT57bGV0IHI9bihlKTtyZXR1cm4obyxzKT0+cihvPXZvaWQgMD09PW8/aTpvLHMpfX1uZXcgc2UoIkBuZ3J4L3N0b3JlIFJvb3QgU3RvcmUgUHJvdmlkZXIiKSxuZXcgc2UoIkBuZ3J4L3N0b3JlIEZlYXR1cmUgU3RhdGUgUHJvdmlkZXIiKTt2YXIgckM9Y2xhc3MgZXh0ZW5kcyBRdHt9LEJUPWNsYXNzIGV4dGVuZHMgcTB7fSxWVD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyhyLGkpKSx0aGlzLmRpc3BhdGNoZXI9ZSx0aGlzLmluaXRpYWxTdGF0ZT1pLHRoaXMucmVkdWNlcnM9cix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUoZSl7dGhpcy5hZGRGZWF0dXJlcyhbZV0pfWFkZEZlYXR1cmVzKGUpe2xldCBpPWUucmVkdWNlKChyLHtyZWR1Y2VyczpvLHJlZHVjZXJGYWN0b3J5OnMsbWV0YVJlZHVjZXJzOmEsaW5pdGlhbFN0YXRlOmwsa2V5OmN9KT0+e2xldCB1PSJmdW5jdGlvbiI9PXR5cGVvZiBvP2Z1bmN0aW9uKG4pe2xldCB0PUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjA/VVQoLi4ubik6ZT0+ZTtyZXR1cm4oZSxpKT0+KGU9dChlKSwocixvKT0+ZShyPXZvaWQgMD09PXI/aTpyLG8pKX0oYSkobyxsKTpyUShzLGEpKG8sbCk7cmV0dXJuIHJbY109dSxyfSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhpKX1yZW1vdmVGZWF0dXJlKGUpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW2VdKX1yZW1vdmVGZWF0dXJlcyhlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKGUubWFwKGk9Pmkua2V5KSl9YWRkUmVkdWNlcihlLGkpe3RoaXMuYWRkUmVkdWNlcnMoe1tlXTppfSl9YWRkUmVkdWNlcnMoZSl7dGhpcy5yZWR1Y2Vycz17Li4udGhpcy5yZWR1Y2VycywuLi5lfSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKGUpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW2VdKX1yZW1vdmVSZWR1Y2VycyhlKXtlLmZvckVhY2goaT0+e3RoaXMucmVkdWNlcnM9ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PmUhPT10KS5yZWR1Y2UoKGUsaSk9Pk9iamVjdC5hc3NpZ24oZSx7W2ldOm5baV19KSx7fSl9KHRoaXMucmVkdWNlcnMsaSl9KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKGUpfXVwZGF0ZVJlZHVjZXJzKGUpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczplfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQlQpLFIoTUIpLFIodFEpLFIoZVEpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxnU2U9W1ZULHtwcm92aWRlOnJDLHVzZUV4aXN0aW5nOlZUfSx7cHJvdmlkZTpCVCx1c2VFeGlzdGluZzpxMH1dLG9DPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9TZT1bb0NdLEhUPWNsYXNzIGV4dGVuZHMgUXR7fSxZWD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyk7bGV0IGM9ZS5waXBlKHpoKE5PKSkucGlwZShHdChpKSkucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBxdCh1aihuLHQsYXJndW1lbnRzLmxlbmd0aD49MiwhMCkpfSh2U2Use3N0YXRlOm99KSk7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1jLnN1YnNjcmliZSgoe3N0YXRlOnUsYWN0aW9uOmR9KT0+e3RoaXMubmV4dCh1KSxyLm5leHQoZCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLklOSVQ9Slgsbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHEwKSxSKHJDKSxSKG9DKSxSKE1CKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gdlNlKG49e3N0YXRlOnZvaWQgMH0sW3QsZV0pe2xldHtzdGF0ZTppfT1uO3JldHVybntzdGF0ZTplKGksdCksYWN0aW9uOnR9fXZhciB5U2U9W1lYLHtwcm92aWRlOkhULHVzZUV4aXN0aW5nOllYfV0sUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuYWN0aW9uc09ic2VydmVyPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yLHRoaXMuc291cmNlPWV9c2VsZWN0KGUsLi4uaSl7cmV0dXJuIGZuLmNhbGwobnVsbCxlLC4uLmkpKHRoaXMpfWxpZnQoZSl7bGV0IGk9bmV3IG4odGhpcyx0aGlzLmFjdGlvbnNPYnNlcnZlcix0aGlzLnJlZHVjZXJNYW5hZ2VyKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9ZGlzcGF0Y2goZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1uZXh0KGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLm5leHQoZSl9ZXJyb3IoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIuZXJyb3IoZSl9Y29tcGxldGUoKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5jb21wbGV0ZSgpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLmFkZFJlZHVjZXIoZSxpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlUmVkdWNlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihIVCksUihxMCksUihWVCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGJTZT1bUGVdO2Z1bmN0aW9uIGZuKG4sdCwuLi5lKXtyZXR1cm4gZnVuY3Rpb24ocil7bGV0IG87aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgcz1bdCwuLi5lXS5maWx0ZXIoQm9vbGVhbik7bz1yLnBpcGUoZnVuY3Rpb24oLi4ubil7bGV0IHQ9bi5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LiIpO3JldHVybiBCKGU9PntsZXQgaT1lO2ZvcihsZXQgcj0wO3I8dDtyKyspe2xldCBvPWk/LltuW3JdXTtpZighKHR5cGVvZiBvPCJ1IikpcmV0dXJuO2k9b31yZXR1cm4gaX0pfShuLC4uLnMpKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2Ygbn0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO289ci5waXBlKEIocz0+bihzLHQpKSl9cmV0dXJuIG8ucGlwZShkaSgpKX19dmFyIEVCPSJodHRwczovL25ncnguaW8vZ3VpZGUvc3RvcmUvY29uZmlndXJhdGlvbi9ydW50aW1lLWNoZWNrcyI7ZnVuY3Rpb24gWFgobil7cmV0dXJuIHZvaWQgMD09PW59ZnVuY3Rpb24gUVgobil7cmV0dXJuIG51bGw9PT1ufWZ1bmN0aW9uIG9RKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pfWZ1bmN0aW9uIHNRKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW59ZnVuY3Rpb24geEIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gS1gobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gSVNlKG4sdCxlKXtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZighZShuW2ldLHRbaV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGFRKG4sdD1LWCxlPUtYKXtsZXQgbyxpPW51bGwscj1udWxsO3JldHVybnttZW1vaXplZDpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8ucmVzdWx0O2lmKCFpKXJldHVybiByPW4uYXBwbHkobnVsbCxhcmd1bWVudHMpLGk9YXJndW1lbnRzLHI7aWYoIUlTZShhcmd1bWVudHMsaSx0KSlyZXR1cm4gcjtsZXQgdT1uLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gaT1hcmd1bWVudHMsZShyLHUpP3I6KHI9dSx1KX0scmVzZXQ6ZnVuY3Rpb24oKXtpPW51bGwscj1udWxsfSxzZXRSZXN1bHQ6ZnVuY3Rpb24odSl7bz17cmVzdWx0OnV9fSxjbGVhclJlc3VsdDpmdW5jdGlvbigpe289dm9pZCAwfX19ZnVuY3Rpb24gWSguLi5uKXtyZXR1cm4gZnVuY3Rpb24obix0PXtzdGF0ZUZuOlBTZX0pe3JldHVybiBmdW5jdGlvbiguLi5lKXtsZXQgaT1lO2lmKEFycmF5LmlzQXJyYXkoaVswXSkpe2xldFt1LC4uLmRdPWk7aT1bLi4udSwuLi5kXX1sZXQgcj1pLnNsaWNlKDAsaS5sZW5ndGgtMSksbz1pW2kubGVuZ3RoLTFdLHM9ci5maWx0ZXIodT0+dS5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdS5yZWxlYXNlKSxhPW4oZnVuY3Rpb24oLi4udSl7cmV0dXJuIG8uYXBwbHkobnVsbCx1KX0pLGw9YVEoZnVuY3Rpb24odSxkKXtyZXR1cm4gdC5zdGF0ZUZuLmFwcGx5KG51bGwsW3UscixkLGFdKX0pO3JldHVybiBPYmplY3QuYXNzaWduKGwubWVtb2l6ZWQse3JlbGVhc2U6ZnVuY3Rpb24oKXtsLnJlc2V0KCksYS5yZXNldCgpLHMuZm9yRWFjaCh1PT51LnJlbGVhc2UoKSl9LHByb2plY3RvcjphLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fShhUSkoLi4ubil9ZnVuY3Rpb24gUFNlKG4sdCxlLGkpe2lmKHZvaWQgMD09PWUpe2xldCBvPXQubWFwKHM9PnMobikpO3JldHVybiBpLm1lbW9pemVkLmFwcGx5KG51bGwsbyl9bGV0IHI9dC5tYXAobz0+byhuLGUpKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLFsuLi5yLGVdKX1mdW5jdGlvbiBQcihuKXtyZXR1cm4gWSh0PT57bGV0IGU9dFtuXTtyZXR1cm4gQmIoKSYmIShuIGluIHQpJiZjb25zb2xlLndhcm4oYEBuZ3J4L3N0b3JlOiBUaGUgZmVhdHVyZSBuYW1lICIke259IiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUsIHRoZXJlZm9yZSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IgY2Fubm90IGFjY2VzcyBpdC4gIEJlIHN1cmUgaXQgaXMgaW1wb3J0ZWQgaW4gYSBsb2FkZWQgbW9kdWxlIHVzaW5nIFN0b3JlTW9kdWxlLmZvclJvb3QoJyR7bn0nLCAuLi4pIG9yIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoJyR7bn0nLCAuLi4pLiAgSWYgdGhlIGRlZmF1bHQgc3RhdGUgaXMgaW50ZW5kZWQgdG8gYmUgdW5kZWZpbmVkLCBhcyBpcyB0aGUgY2FzZSB3aXRoIHJvdXRlciBzdGF0ZSwgdGhpcyBkZXZlbG9wbWVudC1vbmx5IHdhcm5pbmcgbWVzc2FnZSBjYW4gYmUgaWdub3JlZC5gKSxlfSx0PT50KX1mdW5jdGlvbiBPU2Uobix0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHNlP24uZ2V0KHQpOnR9ZnVuY3Rpb24ga1NlKG4sdCxlKXtyZXR1cm4gZS5tYXAoKGkscik9PntpZih0W3JdaW5zdGFuY2VvZiBzZSl7bGV0IG89bi5nZXQodFtyXSk7cmV0dXJue2tleTppLmtleSxyZWR1Y2VyRmFjdG9yeTpvLnJlZHVjZXJGYWN0b3J5P28ucmVkdWNlckZhY3Rvcnk6SGYsbWV0YVJlZHVjZXJzOm8ubWV0YVJlZHVjZXJzP28ubWV0YVJlZHVjZXJzOltdLGluaXRpYWxTdGF0ZTpvLmluaXRpYWxTdGF0ZX19cmV0dXJuIGl9KX1mdW5jdGlvbiBGU2Uobix0KXtyZXR1cm4gdC5tYXAoaT0+aSBpbnN0YW5jZW9mIHNlP24uZ2V0KGkpOmkpfWZ1bmN0aW9uIGxRKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24oKTpufWZ1bmN0aW9uIE5TZShuLHQpe3JldHVybiBuLmNvbmNhdCh0KX1mdW5jdGlvbiBMU2Uobil7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcm9vdCBTdG9yZSBoYXMgYmVlbiBwcm92aWRlZCBtb3JlIHRoYW4gb25jZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCBwcm92aWRlIGZlYXR1cmUgc3RhdGVzIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIENCKG4pe09iamVjdC5mcmVlemUobik7bGV0IHQ9eEIobik7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZvckVhY2goZT0+e2lmKCFlLnN0YXJ0c1dpdGgoIlx1MDI3NSIpJiZmdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobix0KX0obixlKSYmKCF0fHwiY2FsbGVyIiE9PWUmJiJjYWxsZWUiIT09ZSYmImFyZ3VtZW50cyIhPT1lKSl7bGV0IGk9bltlXTsoc1EoaSl8fHhCKGkpKSYmIU9iamVjdC5pc0Zyb3plbihpKSYmQ0IoaSl9fSksbn1mdW5jdGlvbiB3QihuLHQ9W10pe3JldHVybihYWChuKXx8UVgobikpJiYwPT09dC5sZW5ndGg/e3BhdGg6WyJyb290Il0sdmFsdWU6bn06T2JqZWN0LmtleXMobikucmVkdWNlKChpLHIpPT57aWYoaSlyZXR1cm4gaTtsZXQgbz1uW3JdO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geEIobikmJm4uaGFzT3duUHJvcGVydHkoIlx1MDI3NWNtcCIpfShvKT9pOiEoWFgobyl8fFFYKG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBufShvKXx8ZnVuY3Rpb24obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBufShvKXx8b1EobykpJiYoZnVuY3Rpb24obil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiBzUShuKSYmIW9RKG4pfShuKSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIHQ9PT1PYmplY3QucHJvdG90eXBlfHxudWxsPT09dH0obyk/d0IobyxbLi4udCxyXSk6e3BhdGg6Wy4uLnQscl0sdmFsdWU6b30pfSwhMSl9ZnVuY3Rpb24gWlgobix0KXtpZighMT09PW4pcmV0dXJuO2xldCBlPW4ucGF0aC5qb2luKCIuIiksaT1uZXcgRXJyb3IoYERldGVjdGVkIHVuc2VyaWFsaXphYmxlICR7dH0gYXQgIiR7ZX0iLiAke0VCfSNzdHJpY3Qke3R9c2VyaWFsaXphYmlsaXR5YCk7dGhyb3cgaS52YWx1ZT1uLnZhbHVlLGkudW5zZXJpYWxpemFibGVQYXRoPWUsaX1mdW5jdGlvbiBVU2Uobil7cmV0dXJuIEJiKCk/e3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExLC4uLm59OntzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbldpdGhpbk5nWm9uZTohMSxzdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzczohMX19ZnVuY3Rpb24gelNlKHtzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6bixzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXt0LmFjdGlvbihpKSYmWlgod0IoaSksImFjdGlvbiIpO2xldCByPW4oZSxpKTtyZXR1cm4gdC5zdGF0ZSgpJiZaWCh3QihyKSwic3RhdGUiKSxyfX0oZSx7YWN0aW9uOmk9Pm4mJiFUQihpKSxzdGF0ZTooKT0+dH0pOmV9ZnVuY3Rpb24galNlKHtzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6bixzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcj10LmFjdGlvbihpKT9DQihpKTppLG89bihlLHIpO3JldHVybiB0LnN0YXRlKCk/Q0Iobyk6b319KGUse2FjdGlvbjppPT5uJiYhVEIoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uIFRCKG4pe3JldHVybiBuLnR5cGUuc3RhcnRzV2l0aCgiQG5ncngiKX1mdW5jdGlvbiBHU2Uoe3N0cmljdEFjdGlvbldpdGhpbk5nWm9uZTpufSl7cmV0dXJuIHQ9Pm4/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtpZih0LmFjdGlvbihpKSYmIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcihgQWN0aW9uICcke2kudHlwZX0nIHJ1bm5pbmcgb3V0c2lkZSBOZ1pvbmUuICR7RUJ9I3N0cmljdGFjdGlvbndpdGhpbm5nem9uZWApO3JldHVybiBuKGUsaSl9fSh0LHthY3Rpb246ZT0+biYmIVRCKGUpfSk6dH1mdW5jdGlvbiBXU2Uobil7cmV0dXJuW3twcm92aWRlOnFYLHVzZVZhbHVlOm59LHtwcm92aWRlOldYLHVzZUZhY3Rvcnk6cVNlLGRlcHM6W3FYXX0se3Byb3ZpZGU6aUMsZGVwczpbV1hdLHVzZUZhY3Rvcnk6VVNlfSx7cHJvdmlkZTpXMCxtdWx0aTohMCxkZXBzOltpQ10sdXNlRmFjdG9yeTpqU2V9LHtwcm92aWRlOlcwLG11bHRpOiEwLGRlcHM6W2lDXSx1c2VGYWN0b3J5OnpTZX0se3Byb3ZpZGU6VzAsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6R1NlfV19ZnVuY3Rpb24gY1EoKXtyZXR1cm5be3Byb3ZpZGU6U0IsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6WVNlfV19ZnVuY3Rpb24gcVNlKG4pe3JldHVybiBufWZ1bmN0aW9uIFlTZShuKXtpZighbi5zdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzcylyZXR1cm47bGV0IHQ9T2JqZWN0LmVudHJpZXMoYkIpLmZpbHRlcigoWyxlXSk9PmU+MSkubWFwKChbZV0pPT5lKTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiB0eXBlcyBhcmUgcmVnaXN0ZXJlZCBtb3JlIHRoYW4gb25jZSwgJHt0Lm1hcChlPT5gIiR7ZX0iYCkuam9pbigiLCAiKX0uICR7RUJ9I3N0cmljdGFjdGlvbnR5cGV1bmlxdWVuZXNzYCl9ZnVuY3Rpb24gWFNlKG4sdCl7cmV0dXJuW3twcm92aWRlOiRYLHVzZUZhY3Rvcnk6TFNlLGRlcHM6W1tQZSxuZXcgT28sbmV3IFRhXV19LHtwcm92aWRlOkxYLHVzZVZhbHVlOnQuaW5pdGlhbFN0YXRlfSx7cHJvdmlkZTpNQix1c2VGYWN0b3J5OmxRLGRlcHM6W0xYXX0se3Byb3ZpZGU6dkIsdXNlVmFsdWU6bn0se3Byb3ZpZGU6SFgsdXNlRXhpc3Rpbmc6biBpbnN0YW5jZW9mIHNlP246dkJ9LHtwcm92aWRlOnRRLGRlcHM6W3puLHZCLFtuZXcgamcoSFgpXV0sdXNlRmFjdG9yeTpPU2V9LHtwcm92aWRlOmpYLHVzZVZhbHVlOnQubWV0YVJlZHVjZXJzP3QubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTpHWCxkZXBzOltXMCxqWF0sdXNlRmFjdG9yeTpOU2V9LHtwcm92aWRlOkJYLHVzZVZhbHVlOnQucmVkdWNlckZhY3Rvcnk/dC5yZWR1Y2VyRmFjdG9yeTpIZn0se3Byb3ZpZGU6ZVEsZGVwczpbQlgsR1hdLHVzZUZhY3Rvcnk6clF9LHVTZSxnU2UsX1NlLHlTZSxiU2UsV1NlKHQucnVudGltZUNoZWNrcyksY1EoKV19ZnVuY3Rpb24gUVNlKG4sdCxlPXt9KXtyZXR1cm5be3Byb3ZpZGU6VVgsbXVsdGk6ITAsdXNlVmFsdWU6biBpbnN0YW5jZW9mIE9iamVjdD97fTplfSx7cHJvdmlkZTpWWCxtdWx0aTohMCx1c2VWYWx1ZTp7a2V5Om4gaW5zdGFuY2VvZiBPYmplY3Q/bi5uYW1lOm4scmVkdWNlckZhY3Rvcnk6ZSBpbnN0YW5jZW9mIHNlfHwhZS5yZWR1Y2VyRmFjdG9yeT9IZjplLnJlZHVjZXJGYWN0b3J5LG1ldGFSZWR1Y2VyczplIGluc3RhbmNlb2Ygc2V8fCFlLm1ldGFSZWR1Y2Vycz9bXTplLm1ldGFSZWR1Y2Vycyxpbml0aWFsU3RhdGU6ZSBpbnN0YW5jZW9mIHNlfHwhZS5pbml0aWFsU3RhdGU/dm9pZCAwOmUuaW5pdGlhbFN0YXRlfX0se3Byb3ZpZGU6blEsZGVwczpbem4sVVgsVlhdLHVzZUZhY3Rvcnk6a1NlfSx7cHJvdmlkZTp5QixtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P24ucmVkdWNlcjp0fSx7cHJvdmlkZTp6WCxtdWx0aTohMCx1c2VFeGlzdGluZzp0IGluc3RhbmNlb2Ygc2U/dDp5Qn0se3Byb3ZpZGU6aVEsbXVsdGk6ITAsZGVwczpbem4seUIsW25ldyBqZyh6WCldXSx1c2VGYWN0b3J5OkZTZX0sY1EoKV19dmFyIHNDPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxMCksUihyQyksUihvQyksUihQZSksUigkWCw4KSxSKFNCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCkselQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuZmVhdHVyZXM9ZSx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1pLHRoaXMucmVkdWNlck1hbmFnZXI9cjtsZXQgYT1lLm1hcCgobCxjKT0+e2xldCBkPWkuc2hpZnQoKVtjXTtyZXR1cm57Li4ubCxyZWR1Y2VyczpkLGluaXRpYWxTdGF0ZTpsUShsLmluaXRpYWxTdGF0ZSl9fSk7ci5hZGRGZWF0dXJlcyhhKX1uZ09uRGVzdHJveSgpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlRmVhdHVyZXModGhpcy5mZWF0dXJlcyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoblEpLFIoaVEpLFIoVlQpLFIoc0MpLFIoU0IsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxScj0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JSb290KGUsaT17fSl7cmV0dXJue25nTW9kdWxlOnNDLHByb3ZpZGVyczpbLi4uWFNlKGUsaSldfX1zdGF0aWMgZm9yRmVhdHVyZShlLGkscj17fSl7cmV0dXJue25nTW9kdWxlOnpULHByb3ZpZGVyczpbLi4uUVNlKGUsaSxyKV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gU2UoLi4ubil7cmV0dXJue3JlZHVjZXI6bi5wb3AoKSx0eXBlczpuLm1hcChpPT5pLnR5cGUpfX1mdW5jdGlvbiB3cihuLC4uLnQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZm9yKGxldCByIG9mIGkudHlwZXMpe2xldCBvPWUuZ2V0KHIpO2Uuc2V0KHIsbz8oYSxsKT0+aS5yZWR1Y2VyKG8oYSxsKSxsKTppLnJlZHVjZXIpfXJldHVybiBmdW5jdGlvbihpPW4scil7bGV0IG89ZS5nZXQoci50eXBlKTtyZXR1cm4gbz9vKGkscik6aX19dmFyIEtTZT17ZGlzcGF0Y2g6ITAsdXNlRWZmZWN0c0Vycm9ySGFuZGxlcjohMH0sR1Q9Il9fQG5ncngvZWZmZWN0c19jcmVhdGVfXyI7ZnVuY3Rpb24gVXIobix0KXtsZXQgZT1uKCksaT17Li4uS1NlLC4uLnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxHVCx7dmFsdWU6aX0pLGV9ZnVuY3Rpb24gWlNlKG4pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5maWx0ZXIoaT0+ISghbltpXXx8IW5baV0uaGFzT3duUHJvcGVydHkoR1QpKSYmbltpXVtHVF0uaGFzT3duUHJvcGVydHkoImRpc3BhdGNoIikpLm1hcChpPT4oe3Byb3BlcnR5TmFtZTppLC4uLm5baV1bR1RdfSkpfWZ1bmN0aW9uIEFCKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9dmFyIHBRPSJfX0BuZ3J4L2VmZmVjdHNfXyI7ZnVuY3Rpb24gSlNlKG4pe3JldHVybiBVVChlRWUsQUIpKG4pfWZ1bmN0aW9uIGVFZShuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4uY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkocFEpfShuKT9uLmNvbnN0cnVjdG9yW3BRXTpbXX1mdW5jdGlvbiBoUShuLHQsZT0xMCl7cmV0dXJuIG4ucGlwZShDbyhpPT4odCYmdC5oYW5kbGVFcnJvcihpKSxlPD0xP246aFEobix0LGUtMSkpKSl9dmFyIGNzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBRdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLGUmJih0aGlzLnNvdXJjZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKG9DKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gVGkoLi4ubil7cmV0dXJuIEhlKHQ9Pm4uc29tZShlPT4ic3RyaW5nIj09dHlwZW9mIGU/ZT09PXQudHlwZTplLnR5cGU9PT10LnR5cGUpKX12YXIgZlE9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgR3VhcmQiKSxqVD1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgVXNlciBQcm92aWRlZCBFZmZlY3RzIiksREI9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgRWZmZWN0cyIpLG1RPW5ldyBzZSgiQG5ncngvZWZmZWN0cyBSb290IEVmZmVjdHMiKSx1UT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIiksZ1E9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEZlYXR1cmUgRWZmZWN0cyIpLHJFZT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+aFF9KSxfUT0iQG5ncngvZWZmZWN0cy9pbml0IjtmdW5jdGlvbiBmRWUobil7cmV0dXJuIElCKG4sIm5ncnhPbkluaXRFZmZlY3RzIil9ZnVuY3Rpb24gSUIobix0KXtyZXR1cm4gbiYmdCBpbiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygblt0XX13ZShfUSk7dmFyIHZRPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5lcnJvckhhbmRsZXI9ZSx0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXI9aX1hZGRFZmZlY3RzKGUpe3RoaXMubmV4dChlKX10b0FjdGlvbnMoKXtyZXR1cm4gdGhpcy5waXBlKFZTKEFCKSxfbihlPT5lLnBpcGUoVlMobUVlKSkpLF9uKGU9PntsZXQgaT1lLnBpcGUoTFMobz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gZT0+e2xldCBpPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BQihuKS5jb25zdHJ1Y3Rvci5uYW1lLHI9ZnVuY3Rpb24obil7cmV0dXJuW0pTZSxaU2VdLnJlZHVjZSgoZSxpKT0+ZS5jb25jYXQoaShuKSksW10pfShuKS5tYXAoKHtwcm9wZXJ0eU5hbWU6byxkaXNwYXRjaDpzLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6YX0pPT57bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIG5bb10/bltvXSgpOm5bb10sYz1hP2UobCx0KTpsO3JldHVybiExPT09cz9jLnBpcGUocXkoKSk6Yy5waXBlKHF0KChuLHQpPT57bi5zdWJzY3JpYmUoTHQodCxlPT57dC5uZXh0KHRsLmNyZWF0ZU5leHQoZSkpfSwoKT0+e3QubmV4dCh0bC5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9LGU9Pnt0Lm5leHQodGwuY3JlYXRlRXJyb3IoZSkpLHQuY29tcGxldGUoKX0pKX0pKS5waXBlKEIoZD0+KHtlZmZlY3Q6bltvXSxub3RpZmljYXRpb246ZCxwcm9wZXJ0eU5hbWU6byxzb3VyY2VOYW1lOmksc291cmNlSW5zdGFuY2U6bn0pKSl9KTtyZXR1cm4gdW4oLi4ucil9KGUsbix0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIElCKG4sIm5ncnhPblJ1bkVmZmVjdHMiKX0oZSk/ZS5uZ3J4T25SdW5FZmZlY3RzKGkpOml9fSh0aGlzLmVycm9ySGFuZGxlcix0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXIpKG8pKSxCKG89PihmdW5jdGlvbihuLHQpe2lmKCJOIj09PW4ubm90aWZpY2F0aW9uLmtpbmQpe2xldCBlPW4ubm90aWZpY2F0aW9uLnZhbHVlOyFmdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmbiYmbi50eXBlJiYic3RyaW5nIj09dHlwZW9mIG4udHlwZX0oZSkmJnQuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFZmZlY3QgJHtmdW5jdGlvbih7cHJvcGVydHlOYW1lOm4sc291cmNlSW5zdGFuY2U6dCxzb3VyY2VOYW1lOmV9KXtsZXQgaT0iZnVuY3Rpb24iPT10eXBlb2YgdFtuXTtyZXR1cm5gIiR7ZX0uJHtTdHJpbmcobil9JHtpPyIoKSI6IiJ9ImB9KG4pfSBkaXNwYXRjaGVkIGFuIGludmFsaWQgYWN0aW9uOiAke2Z1bmN0aW9uKG4pe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9Y2F0Y2h7cmV0dXJuIG59fShlKX1gKSl9fShvLHRoaXMuZXJyb3JIYW5kbGVyKSxvLm5vdGlmaWNhdGlvbikpLEhlKG89PiJOIj09PW8ua2luZCYmbnVsbCE9by52YWx1ZSkscXQoKG4sdCk9PntuLnN1YnNjcmliZShMdCh0LGU9PkhPKGUsdCkpKX0pKTtyZXR1cm4gdW4oaSxlLnBpcGUoSHQoMSksSGUoZkVlKSxCKG89Pm8ubmdyeE9uSW5pdEVmZmVjdHMoKSkpKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihTcyksUihyRWUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBtRWUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBJQihuLCJuZ3J4T25JZGVudGlmeUVmZmVjdHMiKX0obik/bi5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn12YXIgeVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZWZmZWN0U291cmNlcz1lLHRoaXMuc3RvcmU9aSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1nZXQgaXNTdGFydGVkKCl7cmV0dXJuISF0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb259c3RhcnQoKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb258fCh0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249dGhpcy5lZmZlY3RTb3VyY2VzLnRvQWN0aW9ucygpLnN1YnNjcmliZSh0aGlzLnN0b3JlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24mJih0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodlEpLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuc291cmNlcz1lLGkuc3RhcnQoKSxvLmZvckVhY2goYz0+ZS5hZGRFZmZlY3RzKGMpKSxyLmRpc3BhdGNoKHt0eXBlOl9RfSl9YWRkRWZmZWN0cyhlKXt0aGlzLnNvdXJjZXMuYWRkRWZmZWN0cyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2USksUih5USksUihQZSksUihtUSksUihzQyw4KSxSKHpULDgpLFIoZlEsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxfRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXtpLmZvckVhY2gocz0+cy5mb3JFYWNoKGE9PmUuYWRkRWZmZWN0cyhhKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGJRKSxSKGdRKSxSKHNDLDgpLFIoelQsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxMbz0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JGZWF0dXJlKGU9W10pe3JldHVybntuZ01vZHVsZTpfRWUscHJvdmlkZXJzOltlLHtwcm92aWRlOnVRLG11bHRpOiEwLHVzZVZhbHVlOmV9LHtwcm92aWRlOmpULG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTpnUSxtdWx0aTohMCx1c2VGYWN0b3J5OmRRLGRlcHM6W3puLHVRLGpUXX1dfX1zdGF0aWMgZm9yUm9vdChlPVtdKXtyZXR1cm57bmdNb2R1bGU6YlEscHJvdmlkZXJzOltlLHtwcm92aWRlOkRCLHVzZVZhbHVlOltlXX0se3Byb3ZpZGU6ZlEsdXNlRmFjdG9yeTp5RWUsZGVwczpbW3lRLG5ldyBPbyxuZXcgVGFdLFtEQixuZXcgakZdXX0se3Byb3ZpZGU6alQsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOm1RLHVzZUZhY3Rvcnk6ZFEsZGVwczpbem4sREIsalRdfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gZFEobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiB0KWkucHVzaCguLi5yKTtmb3IobGV0IHIgb2YgZSlpLnB1c2goLi4ucik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQubWFwKGU9Pm4uZ2V0KGUpKX0obixpKX1mdW5jdGlvbiB5RWUobix0KXtpZigoMSE9PXQubGVuZ3RofHwwIT09dFswXS5sZW5ndGgpJiZuKXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIGZpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTktOT1dOPTBdPSJVTktOT1dOIixuW24uRVhQRVJJTUVOVFM9MV09IkVYUEVSSU1FTlRTIixuW24uRVhQRVJJTUVOVD0yXT0iRVhQRVJJTUVOVCIsbltuLkNPTVBBUkVfRVhQRVJJTUVOVD0zXT0iQ09NUEFSRV9FWFBFUklNRU5UIixuW24uTk9UX1NFVD00XT0iTk9UX1NFVCJ9KGZpfHwoZmk9e30pKSxmaSkpKCksV1Q9ImRlZmF1bHRFeHBlcmltZW50SWQiLFkwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UUz0wXT0iRVhQRVJJTUVOVFMiLG5bbi5EQVNIQk9BUkQ9MV09IkRBU0hCT0FSRCJ9KFkwfHwoWTA9e30pKSxZMCkpKCk7ZnVuY3Rpb24gbEMobil7cmV0dXJuIG4uc3BsaXQoIiwiKS5tYXAodD0+e2xldCBlPXQuaW5kZXhPZigiOiIpO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBjb2xvbiBkZWxpbWl0aW5nIG5hbWUgYW5kIElEOiAke3R9YCk7bGV0IGk9dC5zbGljZSgwLGUpLHI9dC5zbGljZShlKzEpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgRXhwZWN0IGlkIHRvIGJlIG5vbi1mYWxzeTogJHt0fWApO3JldHVybntuYW1lOmksaWQ6cn19KX1mdW5jdGlvbiB4UShuKXtyZXR1cm4gbi5tYXAoKHthbGlhczp0LGlkOmV9KT0+YCR7dH06JHtlfWApLmpvaW4oIiwiKX1mdW5jdGlvbiBhQyhuLHQpe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlQ6cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJleHBlcmltZW50SWQiKT9bdC5leHBlcmltZW50SWRdOltXVF07Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIGxDKHQuZXhwZXJpbWVudElkcykubWFwKCh7aWQ6aX0pPT5pKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiB1cyhuLHQpe2lmKCFufHwhdClyZXR1cm4gbj09PXQ7aWYobi5yb3V0ZUtpbmQhPT10LnJvdXRlS2luZClyZXR1cm4hMTtsZXQgZT1hQyhuLnJvdXRlS2luZCxuLnBhcmFtcyksaT1hQyh0LnJvdXRlS2luZCx0LnBhcmFtcyk7aWYobnVsbD09PWV8fG51bGw9PT1pKXJldHVybiBlPT09aTtpZihlLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2xldCByPWkuc29ydCgpO3JldHVybiBlLnNvcnQoKS5ldmVyeSgobyxzKT0+cltzXT09PW8pfWZ1bmN0aW9uIFBCKG4pe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlRTOnJldHVybiBZMC5FWFBFUklNRU5UUztjYXNlIGZpLkVYUEVSSU1FTlQ6Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIFkwLkRBU0hCT0FSRDtjYXNlIGZpLlVOS05PV046Y2FzZSBmaS5OT1RfU0VUOnJldHVybiBudWxsfX1mdW5jdGlvbiBxVChuLHQsZSl7bGV0IGk9UEIobik7cmV0dXJuIG51bGwhPT1pJiYhZS5zb21lKHI9PnIuZGVlcExpbmtHcm91cD09PWkmJnIubmFtZXNwYWNlSWQ9PT10KX12YXIgU1FfZ2V0SHJlZj0oKT0+d2luZG93LmxvY2F0aW9uLmhyZWYsVWY9KCgpPT57Y2xhc3MgbntnZXRIcmVmKCl7cmV0dXJuIFNRX2dldEhyZWYoKX1nZXRTZWFyY2goKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGk9W107cmV0dXJuIGUuZm9yRWFjaCgocixvKT0+e2kucHVzaCh7a2V5Om8sdmFsdWU6cn0pfSksaX1nZXRIYXNoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNofWdldFBhdGgoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWdldEhpc3RvcnlTdGF0ZSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZX1yZXBsYWNlU3RhdGVVcmwoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfXB1c2hTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIixlKX1yZXBsYWNlU3RhdGVEYXRhKGUpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLCIiKX1vblBvcFN0YXRlKCl7cmV0dXJuIGxpKHdpbmRvdywicG9wc3RhdGUiKS5waXBlKEIoZT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxzdGF0ZTplLnN0YXRlfSkpKX1nZXRSZXNvbHZlZFBhdGgoZSl7cmV0dXJuIG5ldyBVUkwoZSxTUV9nZXRIcmVmKCkpLnBhdGhuYW1lfWdldEZ1bGxQYXRoKGUsaSxyKXtsZXQgbz10aGlzLmdldFJlc29sdmVkUGF0aChlKSxzPSIiO3JldHVybiBpLmxlbmd0aCYmKHM9Ij8iK2Z1bmN0aW9uKG4pe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldHtrZXk6ZSx2YWx1ZTppfW9mIG4pdC5hcHBlbmQoZSxpKTtyZXR1cm4gdH0oaSkudG9TdHJpbmcoKSksYCR7b30ke3N9JHtyP3RoaXMuZ2V0SGFzaCgpOiIifWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHpmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudChlKX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpe2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighaSlyZXR1cm4iLyI7bGV0e3BhdGhuYW1lOnJ9PW5ldyBVUkwoaS5jb250ZW50LGUuZ2V0SHJlZigpKTtyZXR1cm4gci5yZXBsYWNlKC9cLyokLywiLyIpfWdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSl7cmV0dXJuIHRoaXMuYXBwUm9vdC5zbGljZSgwLC0xKStlfWdldEFwcFJvb3RsZXNzUGF0aG5hbWUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCh0aGlzLmFwcFJvb3QpPyIvIitlLnNsaWNlKHRoaXMuYXBwUm9vdC5sZW5ndGgpOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVWYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltVZl19KSxufSkoKSxRMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6Zl0saW1wb3J0czpbWDBdfSksbn0pKCksa0I9bmV3IHNlKCJbQXBwIFJvdXRpbmddIERpcnR5IFVwZGF0ZXMiKSxZVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHlVcGRhdGVzU2VsZWN0b3JGYWN0b3JpZXM9ZX1nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz8/W119c3RhdGljIHJlZ2lzdGVyRGlydHlVcGRhdGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6a0IsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGtCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksRVE9d2UoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxLMD13ZSgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWFQ9d2UoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZCPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFowPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseGw9d2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLExCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIiksUVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGkuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7aS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChpLmFjdGlvbkNyZWF0b3IudHlwZSxpLmxhbWJkYSl9fWdldE5hdmlnYXRpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOkxCLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihMQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGNDKG4pe3JldHVybiBudWxsIT1uLnJvdXRlS2luZH1mdW5jdGlvbiBIQihuKXtyZXR1cm4gQVEobikubWFwKGU9PntsZXQgaT1lLnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gaT97cGF0aFBhcnQ6ZSxpc1BhcmFtOiEwLHBhcmFtTmFtZTplLnNsaWNlKDEpfTp7cGF0aFBhcnQ6ZSxpc1BhcmFtOml9fSl9dmFyIEowPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPUhCKHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX1zdGF0aWMgZ2V0TWF0Y2hlcih0KXtyZXR1cm4gY0ModCk/bmV3IHVDKHQpOmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLnJlZGlyZWN0aW9uUGF0aH0odCk/bmV3IEJCKHQpOm5ldyBWQih0KX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sdUM9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LEJCPWNsYXNzIGV4dGVuZHMgSjB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1IQih0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0sVkI9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LGRDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPUowLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiB1QyYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKGNDKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oSEIobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPUFRKHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czp1LGlzUmVkaXJlY3Rpb246ZH09bDtpZihkKXtlPXUscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiB1QykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGg9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpEUSh1KSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLHUpfTtyZXR1cm4gcj97Li4uaCxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmgsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6RFEoci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gQVEobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBEUShuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIFVCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxoYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBkQyhbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgZEMoaSksaS5mb3JFYWNoKHI9PntjQyhyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VUIsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksS1Q9ImFwcF9yb3V0aW5nIixwQz1QcihLVCkscmE9WShwQyxuPT5uLmFjdGl2ZVJvdXRlKSxSUT1ZKHBDLG49Pm4ubmV4dFJvdXRlKSxPUT1ZKHBDLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLGtRPVkocEMsbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxGUT1ZKHBDLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cykscHU9WShyYSxuPT5uP24ucm91dGVLaW5kOmZpLk5PVF9TRVQpLGpCPVkocmEsbj0+bj9uLnBhcmFtczp7fSksJG89WShwdSxqQiwobix0KT0+YUMobix0KSksaHU9KFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpLGk9MDtmb3IobGV0e2lkOnIsbmFtZTpvfW9mIGUpaSsrLCF0LmhhcyhyKSYmdC5zZXQocix7YWxpYXNUZXh0Om8sYWxpYXNOdW1iZXI6aX0pO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pKSxHQj13ZSgiW0FwcCBSb3V0aW5nXSBFZmZlY3RzIEluaXQiKSxGcz0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIn0oRnN8fChGcz17fSkpLEZzKSkoKSxOUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5sb2NhdGlvbj1yLHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnk9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZT1hLHRoaXMuYXBwUm9vdFByb3ZpZGVyPWwsdGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShGQiksQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoYy5wYXRobmFtZSk6dGhpcy5sb2NhdGlvbi5nZXRSZXNvbHZlZFBhdGgoYy5wYXRobmFtZSksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMSxyZXBsYWNlU3RhdGU6Yy5yZXBsYWNlU3RhdGU/PyExLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmMucmVzZXROYW1lc3BhY2VkU3RhdGU/RnMuTkVXOkZzLlVOQ0hBTkdFRH19fSkpKSx0aGlzLmJvb3RzdHJhcFJlZHVjZXJzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSxCKCgpPT5YVCh7cm91dGVLaW5kczpuZXcgU2V0KHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJvdXRlS2luZHMoKSl9KSkpKSx0aGlzLm9uSW5pdCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSkucGlwZShubCgwKSxCKCgpPT57bGV0IGM9dGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKT8ubmFtZXNwYWNlSWQsdT12b2lkIDA9PT1jP3tvcHRpb246RnMuTkVXfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjfTtyZXR1cm57cGF0aG5hbWU6dGhpcy5sb2NhdGlvbi5nZXRQYXRoKCksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnV9fX0pKSx0aGlzLm9uUG9wU3RhdGUkPXRoaXMubG9jYXRpb24ub25Qb3BTdGF0ZSgpLnBpcGUoQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUsb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnZvaWQgMD09PWMuc3RhdGU/Lm5hbWVzcGFjZUlkP3tvcHRpb246RnMuVU5DSEFOR0VEfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjLnN0YXRlLm5hbWVzcGFjZUlkfX19KSkpLHRoaXMudXNlckluaXROYXZSb3V0ZSQ9dW4odGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkLHRoaXMub25Jbml0JCx0aGlzLm9uUG9wU3RhdGUkKS5waXBlKEIoYz0+e2lmKCFjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoYFtBcHAgcm91dGluZ10gcGF0aG5hbWUgbXVzdCBzdGFydCB3aXRoICcvJy4gR290OiAke2MucGF0aG5hbWV9YCk7cmV0dXJuey4uLmMscGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZShjLnBhdGhuYW1lKX19KSxCKGM9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncy5tYXRjaChjKSxvcHRpb25zOmMub3B0aW9uc30pKSksdGhpcy5wcm9ncmFtbWF0aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoQihjPT50aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlLmdldE5hdmlnYXRpb24oYykpLEhlKGM9Pm51bGwhPT1jKSxCKGM9PntsZXQgZix1PWMse3JlcGxhY2VTdGF0ZTpkPSExLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnAscm91dGVLaW5kOmh9PXU7cmV0dXJuIGY9dS5yb3V0ZUtpbmQ9PT1maS5DT01QQVJFX0VYUEVSSU1FTlQ/e2V4cGVyaW1lbnRJZHM6eFEodS5yb3V0ZVBhcmFtcy5hbGlhc0FuZEV4cGVyaW1lbnRJZHMpfTp1LnJvdXRlUGFyYW1zLHtyZXBsYWNlU3RhdGU6ZCxyb3V0ZUtpbmQ6aCxyb3V0ZVBhcmFtczpmLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9fSksQigoe3JlcGxhY2VTdGF0ZTpjLHJvdXRlS2luZDp1LHJvdXRlUGFyYW1zOmQscmVzZXROYW1lc3BhY2VkU3RhdGU6cH0pPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3M/dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2hCeVJvdXRlS2luZCh1LGQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOmMsYnJvd3NlckluaXRpYXRlZDohMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpwP0ZzLk5FVzpGcy5VTkNIQU5HRUR9fX0pKSksdGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJD11bih0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQpLnBpcGUoSGUoKHtyb3V0ZU1hdGNoOmN9KT0+Qm9vbGVhbihjKSksQigoe3JvdXRlTWF0Y2g6YyxvcHRpb25zOnV9KT0+KHtyb3V0ZU1hdGNoOmMsb3B0aW9uczp1fSkpKSx0aGlzLm5hdmlnYXRlJD1VcigoKT0+dGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJC5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHJhKSksX24oKFtkLHBdKT0+e2xldCBoPW51bGwhPT1wJiZ1cyhwLGQucm91dGVNYXRjaCksZj10aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpO3JldHVybiBofHwhZi5sZW5ndGg/anQoZCk6eG8odGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKS5tYXAobT0+dGhpcy5zdG9yZS5zZWxlY3QobSkucGlwZShIdCgxKSkpKS5waXBlKEIobT0+dm9pZCAwIT09bVswXS5leHBlcmltZW50SWRzJiZtWzBdLmV4cGVyaW1lbnRJZHMubGVuZ3RoPjApLEhlKG09PntpZihtKXtsZXQgQz13aW5kb3cuY29uZmlybSgiWW91IGhhdmUgdW5zYXZlZCBlZGl0cywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlbT8iKTtyZXR1cm4gQyYmdGhpcy5zdG9yZS5kaXNwYXRjaChFUSgpKSxDfXJldHVybiEwfSksQigoKT0+ZCkpfSksR3QodGhpcy5zdG9yZS5zZWxlY3Qoa1EpKSxOdCgoW3tyb3V0ZU1hdGNoOmQsb3B0aW9uczpwfSxoXSk9PntpZighcC5icm93c2VySW5pdGlhdGVkfHwhZC5kZWVwTGlua1Byb3ZpZGVyfHxwLm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5GUk9NX0hJU1RPUlkmJiFxVChkLnJvdXRlS2luZCxwLm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZCxoKSlyZXR1cm47bGV0IGY9ZC5vcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb24mJmQucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM/ZC5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLG09ZC5kZWVwTGlua1Byb3ZpZGVyLmRlc2VyaWFsaXplUXVlcnlQYXJhbXMoZik7dGhpcy5zdG9yZS5kaXNwYXRjaChLMCh7cm91dGVLaW5kOmQucm91dGVLaW5kLHBhcnRpYWxTdGF0ZTptfSkpfSksTnQoKFt7cm91dGVNYXRjaDpkfV0pPT57ZC5hY3Rpb24mJnRoaXMuc3RvcmUuZGlzcGF0Y2goZC5hY3Rpb24pfSksdmkoKFt7cm91dGVNYXRjaDpkLG9wdGlvbnM6cH1dKT0+bnVsbD09PWQuZGVlcExpbmtQcm92aWRlcj9qdCh7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6W10sb3B0aW9uczpwfSk6ZC5kZWVwTGlua1Byb3ZpZGVyLnNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0aGlzLnN0b3JlKS5waXBlKEIoKGgsZik9Pih7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6aCxvcHRpb25zOjA9PT1mP3A6ey4uLnAsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246RnMuVU5DSEFOR0VEfSxyZXBsYWNlU3RhdGU6ITB9fSkpKSksTnQoKHtyb3V0ZTpkfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFowKHthZnRlcjpkfSkpfSksQXIoMCkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpKSxCKChbZCxwXSk9PntsZXQgaD1udWxsPT09cHx8bnVsbD09PWQucm91dGV8fHVzKHAsZC5yb3V0ZSk7cmV0dXJuey4uLmQscHJlc2VydmVIYXNoOmh9fSksTnQoKHtwcmVzZXJ2ZUhhc2g6ZCxwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmgsb3B0aW9uczpmfSk9PnsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5wYXRobmFtZT09PXQucGF0aG5hbWUmJm4ucXVlcnlQYXJhbXMubGVuZ3RoPT09dC5xdWVyeVBhcmFtcy5sZW5ndGgmJm4ucXVlcnlQYXJhbXMuZXZlcnkoKGUsaSk9PntsZXQgcj10LnF1ZXJ5UGFyYW1zW2ldO3JldHVybiBlLmtleT09PXIua2V5JiZlLnZhbHVlPT09ci52YWx1ZX0pfSkoe3BhdGhuYW1lOnAscXVlcnlQYXJhbXM6aH0se3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodGhpcy5sb2NhdGlvbi5nZXRQYXRoKCkpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCl9KXx8KGYucmVwbGFjZVN0YXRlP3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlVXJsKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aChwLGgsZCkpKTp0aGlzLmxvY2F0aW9uLnB1c2hTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxoLGQpKSkpfSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KE9RKSksQigoW3tyb3V0ZTpkLG9wdGlvbnM6cH0saCxmXSk9PntsZXQgbT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIHQubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PUZzLkZST01fSElTVE9SWT90Lm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZDpudWxsPT1lfHx0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5ORVc/YCR7RGF0ZS5ub3coKS50b1N0cmluZygpfToke2Z1bmN0aW9uKCl7bGV0IG49bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMobik7bGV0IHQ9IiI7Zm9yKGxldCBlIG9mIG4pdCs9KGU+PjQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gdH0oKX1gOmV9KDAscCxmKTtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGVEYXRhKHsuLi50aGlzLmxvY2F0aW9uLmdldEhpc3RvcnlTdGF0ZSgpLG5hbWVzcGFjZUlkOm19KSx4bCh7YmVmb3JlOmgsYWZ0ZXI6ZCxiZWZvcmVOYW1lc3BhY2VJZDpmLGFmdGVyTmFtZXNwYWNlSWQ6bX0pfSkpKSx0aGlzLnJvdXRlQ29uZmlncz1zLmdldFJvdXRlQ29uZmlncygpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIEdCKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoVWYpLFIoWVQpLFIoaGMpLFIoUVQpLFIoemYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNRWU9d3Ioe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6bnVsbCxyZWh5ZHJhdGVkRGVlcExpbmtzOltdLHJlZ2lzdGVyZWRSb3V0ZUtleXM6bmV3IFNldH0sU2UoWjAsKG4se2FmdGVyOnR9KT0+KHsuLi5uLG5leHRSb3V0ZTp0fSkpLFNlKHhsLChuLHthZnRlcjp0LGFmdGVyTmFtZXNwYWNlSWQ6ZX0pPT57bGV0IGk9bi5yZWh5ZHJhdGVkRGVlcExpbmtzO3JldHVybiBxVCh0LnJvdXRlS2luZCxlLGkpJiYoaT1bLi4uaV0saS5wdXNoKHtkZWVwTGlua0dyb3VwOlBCKHQucm91dGVLaW5kKSxuYW1lc3BhY2VJZDplfSkpLHsuLi5uLGFjdGl2ZVJvdXRlOnQsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6ZSxyZWh5ZHJhdGVkRGVlcExpbmtzOml9fSksU2UoWFQsKG4se3JvdXRlS2luZHM6dH0pPT4oey4uLm4scmVnaXN0ZXJlZFJvdXRlS2V5czp0fSkpKTtmdW5jdGlvbiBMUShuLHQpe3JldHVybiBNRWUobix0KX12YXIgJDA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbWVQsUVRdLGltcG9ydHM6W2hjLFJyLmZvckZlYXR1cmUoS1QsTFEpLExvLmZvckZlYXR1cmUoW05RXSksUTAsWDBdfSksbn0pKCksQlE9Il9fdGFiX18iLFZRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRmU3RvcmFnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIiksZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZ2xvYmFscyIpLnRmX2dsb2JhbHMuc2V0VXNlSGFzaCghMCksdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5taWdyYXRlTGVnYWN5VVJMU2NoZW1lKCl9Z2V0U3RyaW5nKGUpe3JldHVybiB0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLmdldFN0cmluZyhlKX1zZXRTdHJpbmcoZSxpLHIpe3RoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2Uuc2V0U3RyaW5nKGUsaSxyKX1nZXRQbHVnaW5JZCgpe3JldHVybiB0aGlzLmdldFN0cmluZyhCUSl9c2V0UGx1Z2luSWQoZSxpKXt0aGlzLnNldFN0cmluZyhCUSxlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxBcD1jbGFzc3t9LFdCPW5ldyBzZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyIpLG5yPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPVtdLGUmJih0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9ZS5tYXAoaT0+aSgpKSl9Z2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM/P1tdfXN0YXRpYyBkZWZpbmVHbG9iYWxTZXR0aW5nKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6V0IsbXVsdGk6ITAsdXNlVmFsdWU6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihXQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLG9hPSgoKT0+KGZ1bmN0aW9uKG4pe24uQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsifShvYXx8KG9hPXt9KSksb2EpKSgpLEhRPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLFVRPSJfdGJfZ2xvYmFsX3NldHRpbmdzIix6UT0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiLFpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHFCPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKVHt1aVRvQmFja2VuZChlKXtsZXQgaT17fTtyZXR1cm4gdm9pZCAwIT09ZS5pZ25vcmVPdXRsaWVycyYmKGkuaWdub3JlT3V0bGllcnM9ZS5pZ25vcmVPdXRsaWVycyksdm9pZCAwIT09ZS5zY2FsYXJTbW9vdGhpbmcmJihpLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksdm9pZCAwIT09ZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyYmKGkuYXV0b1JlbG9hZFBlcmlvZEluTXM9ZS5hdXRvUmVsb2FkUGVyaW9kSW5Ncyksdm9pZCAwIT09ZS5wYWdlU2l6ZSYmKGkucGFnaW5hdGlvblNpemU9ZS5wYWdlU2l6ZSksdm9pZCAwIT09ZS50aGVtZU92ZXJyaWRlJiYoaS50aGVtZT1lLnRoZW1lT3ZlcnJpZGUpLHZvaWQgMCE9PWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLHZvaWQgMCE9PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLHZvaWQgMCE9PWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLHZvaWQgMCE9PWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLHZvaWQgMCE9PWUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLHZvaWQgMCE9PWUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLHZvaWQgMCE9PWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyYmKGkuc2luZ2xlU2VsZWN0aW9uSGVhZGVycz1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzJiYoaS5yYW5nZVNlbGVjdGlvbkhlYWRlcnM9ZS5yYW5nZVNlbGVjdGlvbkhlYWRlcnMpLGl9YmFja2VuZFRvVWkoZSl7bGV0IGk9e307cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLGUuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLGUuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmF1dG9SZWxvYWQmJihpLmF1dG9SZWxvYWQ9ZS5hdXRvUmVsb2FkKSxlLmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLGUuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgZS5wYWdpbmF0aW9uU2l6ZSYmKGkucGFnZVNpemU9ZS5wYWdpbmF0aW9uU2l6ZSksZS5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiBlLnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMob2EpKS5oYXMoZS50aGVtZSkmJihpLnRoZW1lT3ZlcnJpZGU9ZS50aGVtZSksZS5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGUuaGFzT3duUHJvcGVydHkoInNpZGVCYXJXaWR0aEluUGVyY2VudCIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkJiYoaS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCksZS5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc0NhcmRNaW5XaWR0aCIpJiYibnVtYmVyIj09dHlwZW9mIGUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLGUuaGFzT3duUHJvcGVydHkoInN0ZXBTZWxlY3RvckVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5zdGVwU2VsZWN0b3JFbmFibGVkJiYoaS5zdGVwU2VsZWN0b3JFbmFibGVkPWUuc3RlcFNlbGVjdG9yRW5hYmxlZCksZS5oYXNPd25Qcm9wZXJ0eSgicmFuZ2VTZWxlY3Rpb25FbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoImxpbmtlZFRpbWVFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoInNpbmdsZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMmJihpLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnM9ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxlLmhhc093blByb3BlcnR5KCJyYW5nZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnJhbmdlU2VsZWN0aW9uSGVhZGVycyYmKGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksalE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKT90aGlzLmdldFNldHRpbmdzKCkucGlwZShOdChpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFVRLEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKHsuLi5pLC4uLmV9KSkpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShIUSksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHpRKX0pLEIoKCk9Pnt9KSk6YW99ZGVzZXJpYWxpemUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh6USk7cmV0dXJuIGp0KHsuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGU/SlNPTi5zdHJpbmdpZnkoe25vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM6TnVtYmVyKGUpfSk6Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEhRKT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFVRKT8/Int9IikpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoSlQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxHUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpaVCx1c2VDbGFzczpqUX0scUIse3Byb3ZpZGU6SlQsdXNlRXhpc3Rpbmc6cUJ9XX0pLG59KSgpLGZjPXdlKCJbUGVyc2lzdGVudCBTZXR0aW5nc10gR2xvYmFsIFNldHRpbmdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLCRUPSJwZXJzaXN0ZW50X3NldHRpbmdzIixXUT1ZKFByKCRUKSxuPT5uLnNob3VsZFBlcnNpc3RTZXR0aW5ncykscVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuY29uZmlnTW9kdWxlPXIsdGhpcy5kYXRhU291cmNlPW8sdGhpcy5pbml0aWFsaXplQW5kVXBkYXRlU2V0dGluZ3MkPVVyKCgpPT57bGV0IHM9dGhpcy5hY3Rpb25zJC5waXBlKFRpKFowKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChXUSkpLEhlKChbLGFdKT0+YSksX24oKCk9PnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSxOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChmYyh7cGFydGlhbFNldHRpbmdzOmF9KSl9KSxubCgwKSxfbigoKT0+dW4oLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcChsPT50aGlzLnN0b3JlLnNlbGVjdChsKS5waXBlKGRpKChjLHUpPT57bGV0IGQ9T2JqZWN0LnZhbHVlcyhjKSxwPU9iamVjdC52YWx1ZXModSk7cmV0dXJuIGQubGVuZ3RoPT09cC5sZW5ndGgmJmQuZXZlcnkoKGgsZik9Pmg9PT1wW2ZdKX0pLENhKDEpKSkpKSxYcygpKTtyZXR1cm4gcy5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPVtdO3JldHVybiB0LnN1YnNjcmliZShMdChlLHI9PmkucHVzaChyKSwoKT0+e2UubmV4dChpKSxlLmNvbXBsZXRlKCl9KSksbi5zdWJzY3JpYmUoTHQoZSwoKT0+e2xldCByPWk7aT1bXSxlLm5leHQocil9LHpsKSksKCk9PntpPW51bGx9fSl9KHMucGlwZShBcig1MDApKSksX24oYT0+e2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gYW87bGV0IGw9e307Zm9yKGxldCBjIG9mIGEpT2JqZWN0LmFzc2lnbihsLGMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MobCl9KSl9LHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKG5yKSxSKFpUKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSUVlPXdyKHtzaG91bGRQZXJzaXN0U2V0dGluZ3M6ITB9KTtmdW5jdGlvbiBZUShuLHQpe3JldHVybiBJRWUobix0KX12YXIgWUI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbbnJdLGltcG9ydHM6W1JyLmZvckZlYXR1cmUoJFQsWVEpLExvLmZvckZlYXR1cmUoW3FRXSksR1FdfSksbn0pKCksdEQ9Y2xhc3N7fSxuRD1jbGFzc3t9LFZhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57bGV0IGk9ZS5pbmRleE9mKCI6Iik7aWYoaT4wKXtsZXQgcj1lLnNsaWNlKDAsaSksbz1yLnRvTG93ZXJDYXNlKCkscz1lLnNsaWNlKGkrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLG8pLHRoaXMuaGVhZGVycy5oYXMobyk/dGhpcy5oZWFkZXJzLmdldChvKS5wdXNoKHMpOnRoaXMuaGVhZGVycy5zZXQobyxbc10pfX0pfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZT0+e2xldCBpPXRbZV0scj1lLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLGkubGVuZ3RoPjAmJih0aGlzLmhlYWRlcnMuc2V0KHIsaSksdGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGUscikpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZVswXTpudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJhIn0pfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX1kZWxldGUodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9bWF5YmVTZXROb3JtYWxpemVkTmFtZSh0LGUpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyhlKXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdCl9aW5pdCgpe3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKHQ9PnRoaXMuYXBwbHlVcGRhdGUodCkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20odCl7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGU9Pnt0aGlzLmhlYWRlcnMuc2V0KGUsdC5oZWFkZXJzLmdldChlKSksdGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdC5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpKX0pfWNsb25lKHQpe2xldCBlPW5ldyBWYTtyZXR1cm4gZS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5sYXp5SW5pdDp0aGlzLGUubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFt0XSksZX1hcHBseVVwZGF0ZSh0KXtsZXQgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBpPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLDA9PT1pLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTtsZXQgcj0oImEiPT09dC5vcD90aGlzLmhlYWRlcnMuZ2V0KGUpOnZvaWQgMCl8fFtdO3IucHVzaCguLi5pKSx0aGlzLmhlYWRlcnMuc2V0KGUscik7YnJlYWs7Y2FzZSJkIjpsZXQgbz10LnZhbHVlO2lmKG8pe2xldCBzPXRoaXMuaGVhZGVycy5nZXQoZSk7aWYoIXMpcmV0dXJuO3M9cy5maWx0ZXIoYT0+LTE9PT1vLmluZGV4T2YoYSkpLDA9PT1zLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSxzKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1mb3JFYWNoKHQpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGU9PnQodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpLHRoaXMuaGVhZGVycy5nZXQoZSkpKX19LFJFZT0vJShcZFthLWYwLTldKS9naSxPRWU9ezQwOiJAIiwiM0EiOiI6IiwyNDoiJCIsIjJDIjoiLCIsIjNCIjoiOyIsIjNEIjoiPSIsIjNGIjoiPyIsIjJGIjoiLyJ9O2Z1bmN0aW9uIFhRKG4pe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZShSRWUsKHQsZSk9Pk9FZVtlXT8/dCl9ZnVuY3Rpb24gZUQobil7cmV0dXJuYCR7bn1gfXZhciBmdT1jbGFzc3tjb25zdHJ1Y3Rvcih0PXt9KXtpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBjbGFzc3tlbmNvZGVLZXkodCl7cmV0dXJuIFhRKHQpfWVuY29kZVZhbHVlKHQpe3JldHVybiBYUSh0KX1kZWNvZGVLZXkodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1kZWNvZGVWYWx1ZSh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfX0sdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgTWFwO3JldHVybiBuLmxlbmd0aD4wJiZuLnJlcGxhY2UoL15cPy8sIiIpLnNwbGl0KCImIikuZm9yRWFjaChyPT57bGV0IG89ci5pbmRleE9mKCI9IiksW3MsYV09LTE9PW8/W3QuZGVjb2RlS2V5KHIpLCIiXTpbdC5kZWNvZGVLZXkoci5zbGljZSgwLG8pKSx0LmRlY29kZVZhbHVlKHIuc2xpY2UobysxKSldLGw9ZS5nZXQocyl8fFtdO2wucHVzaChhKSxlLnNldChzLGwpfSksZX0odC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKGU9PntsZXQgaT10LmZyb21PYmplY3RbZV0scj1BcnJheS5pc0FycmF5KGkpP2kubWFwKGVEKTpbZUQoaSldO3RoaXMubWFwLnNldChlLHIpfSkpOnRoaXMubWFwPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9Z2V0KHQpe3RoaXMuaW5pdCgpO2xldCBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX1hcHBlbmRBbGwodCl7bGV0IGU9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2gobz0+e2UucHVzaCh7cGFyYW06aSx2YWx1ZTpvLG9wOiJhIn0pfSk6ZS5wdXNoKHtwYXJhbTppLHZhbHVlOnIsb3A6ImEifSl9KSx0aGlzLmNsb25lKGUpfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAodD0+e2xldCBlPXRoaXMuZW5jb2Rlci5lbmNvZGVLZXkodCk7cmV0dXJuIHRoaXMubWFwLmdldCh0KS5tYXAoaT0+ZSsiPSIrdGhpcy5lbmNvZGVyLmVuY29kZVZhbHVlKGkpKS5qb2luKCImIil9KS5maWx0ZXIodD0+IiIhPT10KS5qb2luKCImIil9Y2xvbmUodCl7bGV0IGU9bmV3IGZ1KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBlLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxlLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdCh0KSxlfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2godD0+dGhpcy5tYXAuc2V0KHQsdGhpcy5jbG9uZUZyb20ubWFwLmdldCh0KSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKHQ9Pntzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBlPSgiYSI9PT10Lm9wP3RoaXMubWFwLmdldCh0LnBhcmFtKTp2b2lkIDApfHxbXTtlLnB1c2goZUQodC52YWx1ZSkpLHRoaXMubWFwLnNldCh0LnBhcmFtLGUpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09dC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pO2JyZWFrfXtsZXQgaT10aGlzLm1hcC5nZXQodC5wYXJhbSl8fFtdLHI9aS5pbmRleE9mKGVEKHQudmFsdWUpKTstMSE9PXImJmkuc3BsaWNlKHIsMSksaS5sZW5ndGg+MD90aGlzLm1hcC5zZXQodC5wYXJhbSxpKTp0aGlzLm1hcC5kZWxldGUodC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19O2Z1bmN0aW9uIFFRKG4pe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZuIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gS1Eobil7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmbiBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gWlEobil7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJm4gaW5zdGFuY2VvZiBGb3JtRGF0YX12YXIgamY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7bGV0IG87aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fHI/KHRoaXMuYm9keT12b2lkIDAhPT1pP2k6bnVsbCxvPXIpOm89aSxvJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIW8ucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFvLndpdGhDcmVkZW50aWFscyxvLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPW8ucmVzcG9uc2VUeXBlKSxvLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9by5oZWFkZXJzKSxvLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9by5jb250ZXh0KSxvLnBhcmFtcyYmKHRoaXMucGFyYW1zPW8ucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBWYSksdGhpcy5jb250ZXh0fHwodGhpcy5jb250ZXh0PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWFwLnNldCh0LGUpLHRoaXN9Z2V0KHQpe3JldHVybiB0aGlzLm1hcC5oYXModCl8fHRoaXMubWFwLnNldCh0LHQuZGVmYXVsdFZhbHVlKCkpLHRoaXMubWFwLmdldCh0KX1kZWxldGUodCl7cmV0dXJuIHRoaXMubWFwLmRlbGV0ZSh0KSx0aGlzfWhhcyh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfWtleXMoKXtyZXR1cm4gdGhpcy5tYXAua2V5cygpfX0pLHRoaXMucGFyYW1zKXtsZXQgcz10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT1zLmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9ZTtlbHNle2xldCBhPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PWE/Ij8iOmE8ZS5sZW5ndGgtMT8iJiI6IiIpK3N9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IGZ1LHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlFRKHRoaXMuYm9keSl8fEtRKHRoaXMuYm9keSl8fFpRKHRoaXMuYm9keSl8fGZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmbiBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30odGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIGZ1P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fFpRKHRoaXMuYm9keSk/bnVsbDpLUSh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOlFRKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgZnU/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZSh0PXt9KXtsZXQgZT10Lm1ldGhvZHx8dGhpcy5tZXRob2QsaT10LnVybHx8dGhpcy51cmwscj10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsbz12b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxzPXZvaWQgMCE9PXQud2l0aENyZWRlbnRpYWxzP3Qud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLGE9dm9pZCAwIT09dC5yZXBvcnRQcm9ncmVzcz90LnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3MsbD10LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxjPXQucGFyYW1zfHx0aGlzLnBhcmFtcyx1PXQuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT10LnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKHQuc2V0SGVhZGVycykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0SGVhZGVyc1twXSksbCkpLHQuc2V0UGFyYW1zJiYoYz1PYmplY3Qua2V5cyh0LnNldFBhcmFtcykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0UGFyYW1zW3BdKSxjKSksbmV3IGpmKGUsaSxvLHtwYXJhbXM6YyxoZWFkZXJzOmwsY29udGV4dDp1LHJlcG9ydFByb2dyZXNzOmEscmVzcG9uc2VUeXBlOnIsd2l0aENyZWRlbnRpYWxzOnN9KX19LElwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TZW50PTBdPSJTZW50IixuW24uVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixuW24uUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIixuW24uRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsbltuLlVzZXI9NV09IlVzZXIifShJcHx8KElwPXt9KSksSXApKSgpLGZDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDAsaT0iT0siKXt0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgVmEsdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxpLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0sbUM9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9SXAuUmVzcG9uc2VIZWFkZXJ9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBtQyh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19LGVfPWNsYXNzIGV4dGVuZHMgZkN7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPUlwLlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT10LmJvZHk/dC5ib2R5Om51bGx9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBlXyh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0sbWQ9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifTogJHt0LnN0YXR1c30gJHt0LnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPXQuZXJyb3J8fG51bGx9fTtmdW5jdGlvbiBYQihuLHQpe3JldHVybntib2R5OnQsaGVhZGVyczpuLmhlYWRlcnMsY29udGV4dDpuLmNvbnRleHQsb2JzZXJ2ZTpuLm9ic2VydmUscGFyYW1zOm4ucGFyYW1zLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc319dmFyIEdmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5oYW5kbGVyPWV9cmVxdWVzdChlLGkscj17fSl7bGV0IG87aWYoZSBpbnN0YW5jZW9mIGpmKW89ZTtlbHNle2xldCBsLGM7bD1yLmhlYWRlcnMgaW5zdGFuY2VvZiBWYT9yLmhlYWRlcnM6bmV3IFZhKHIuaGVhZGVycyksci5wYXJhbXMmJihjPXIucGFyYW1zIGluc3RhbmNlb2YgZnU/ci5wYXJhbXM6bmV3IGZ1KHtmcm9tT2JqZWN0OnIucGFyYW1zfSkpLG89bmV3IGpmKGUsaSx2b2lkIDAhPT1yLmJvZHk/ci5ib2R5Om51bGwse2hlYWRlcnM6bCxjb250ZXh0OnIuY29udGV4dCxwYXJhbXM6YyxyZXBvcnRQcm9ncmVzczpyLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpyLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpyLndpdGhDcmVkZW50aWFsc30pfWxldCBzPWp0KG8pLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gYm4odCk/X24obix0LDEpOl9uKG4sMSl9KGw9PnRoaXMuaGFuZGxlci5oYW5kbGUobCkpKTtpZihlIGluc3RhbmNlb2YgamZ8fCJldmVudHMiPT09ci5vYnNlcnZlKXJldHVybiBzO2xldCBhPXMucGlwZShIZShsPT5sIGluc3RhbmNlb2YgZV8pKTtzd2l0Y2goci5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiJzdHJpbmciIT10eXBlb2YgbC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiBsLmJvZHl9KSk7ZGVmYXVsdDpyZXR1cm4gYS5waXBlKEIobD0+bC5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICR7ci5vYnNlcnZlfX1gKX19ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixlLGkpfWdldChlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsZSxpKX1oZWFkKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSEVBRCIsZSxpKX1qc29ucChlLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIixlLHtwYXJhbXM6KG5ldyBmdSkuYXBwZW5kKGksIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJPUFRJT05TIixlLGkpfXBhdGNoKGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsZSxYQihyLGkpKX1wb3N0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixlLFhCKHIsaSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIixlLFhCKHIsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHREKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksckQ9bmV3IHNlKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLE5FZT0oKCk9PntjbGFzcyBue2ludGVyY2VwdChlLGkpe3JldHVybiBpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTEVlPS9eXClcXVx9Jyw/XG4vLEpRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy54aHJGYWN0b3J5PWV9aGFuZGxlKGUpe2lmKCJKU09OUCI9PT1lLm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEh0dHBDbGllbnRKc29ucE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBRdChpPT57bGV0IHI9dGhpcy54aHJGYWN0b3J5LmJ1aWxkKCk7aWYoci5vcGVuKGUubWV0aG9kLGUudXJsV2l0aFBhcmFtcyksZS53aXRoQ3JlZGVudGlhbHMmJihyLndpdGhDcmVkZW50aWFscz0hMCksZS5oZWFkZXJzLmZvckVhY2goKGgsZik9PnIuc2V0UmVxdWVzdEhlYWRlcihoLGYuam9pbigiLCIpKSksZS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWUuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtsZXQgaD1lLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWgmJnIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixoKX1pZihlLnJlc3BvbnNlVHlwZSl7bGV0IGg9ZS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtyLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1oP2g6InRleHQifWxldCBvPWUuc2VyaWFsaXplQm9keSgpLHM9bnVsbCxhPSgpPT57aWYobnVsbCE9PXMpcmV0dXJuIHM7bGV0IGg9ci5zdGF0dXNUZXh0fHwiT0siLGY9bmV3IFZhKHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG09ZnVuY3Rpb24obil7cmV0dXJuInJlc3BvbnNlVVJMImluIG4mJm4ucmVzcG9uc2VVUkw/bi5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdChuLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT9uLmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0ocil8fGUudXJsO3JldHVybiBzPW5ldyBtQyh7aGVhZGVyczpmLHN0YXR1czpyLnN0YXR1cyxzdGF0dXNUZXh0OmgsdXJsOm19KSxzfSxsPSgpPT57bGV0e2hlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOkN9PWEoKSxfPW51bGw7MjA0IT09ZiYmKF89dHlwZW9mIHIucmVzcG9uc2U+InUiP3IucmVzcG9uc2VUZXh0OnIucmVzcG9uc2UpLDA9PT1mJiYoZj1fPzIwMDowKTtsZXQgeT1mPj0yMDAmJmY8MzAwO2lmKCJqc29uIj09PWUucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIF8pe2xldCBJPV87Xz1fLnJlcGxhY2UoTEVlLCIiKTt0cnl7Xz0iIiE9PV8/SlNPTi5wYXJzZShfKTpudWxsfWNhdGNoKEEpe189SSx5JiYoeT0hMSxfPXtlcnJvcjpBLHRleHQ6X30pfX15PyhpLm5leHQobmV3IGVfKHtib2R5Ol8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpLGkuY29tcGxldGUoKSk6aS5lcnJvcihuZXcgbWQoe2Vycm9yOl8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpfSxjPWg9PntsZXR7dXJsOmZ9PWEoKSxtPW5ldyBtZCh7ZXJyb3I6aCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6Znx8dm9pZCAwfSk7aS5lcnJvcihtKX0sdT0hMSxkPWg9Pnt1fHwoaS5uZXh0KGEoKSksdT0hMCk7bGV0IGY9e3R5cGU6SXAuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6aC5sb2FkZWR9O2gubGVuZ3RoQ29tcHV0YWJsZSYmKGYudG90YWw9aC50b3RhbCksInRleHQiPT09ZS5yZXNwb25zZVR5cGUmJiEhci5yZXNwb25zZVRleHQmJihmLnBhcnRpYWxUZXh0PXIucmVzcG9uc2VUZXh0KSxpLm5leHQoZil9LHA9aD0+e2xldCBmPXt0eXBlOklwLlVwbG9hZFByb2dyZXNzLGxvYWRlZDpoLmxvYWRlZH07aC5sZW5ndGhDb21wdXRhYmxlJiYoZi50b3RhbD1oLnRvdGFsKSxpLm5leHQoZil9O3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksci5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnNlbmQobyksaS5uZXh0KHt0eXBlOklwLlNlbnR9KSwoKT0+e3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCksci5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjKSxlLnJlcG9ydFByb2dyZXNzJiYoci5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZCksbnVsbCE9PW8mJnIudXBsb2FkJiZyLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIucmVhZHlTdGF0ZSE9PXIuRE9ORSYmci5hYm9ydCgpfX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJEI9bmV3IHNlKCJYU1JGX0NPT0tJRV9OQU1FIiksZVY9bmV3IHNlKCJYU1JGX0hFQURFUl9OQU1FIiksaUQ9Y2xhc3N7fSxWRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kb2M9ZSx0aGlzLnBsYXRmb3JtPWksdGhpcy5jb29raWVOYW1lPXIsdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gZSE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPXVUKGUsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9ZSksdGhpcy5sYXN0VG9rZW59fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIoaWQpLFIoJEIpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRQj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy50b2tlblNlcnZpY2U9ZSx0aGlzLmhlYWRlck5hbWU9aX1pbnRlcmNlcHQoZSxpKXtsZXQgcj1lLnVybC50b0xvd2VyQ2FzZSgpO2lmKCJHRVQiPT09ZS5tZXRob2R8fCJIRUFEIj09PWUubWV0aG9kfHxyLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8ci5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBpLmhhbmRsZShlKTtsZXQgbz10aGlzLnRva2VuU2VydmljZS5nZXRUb2tlbigpO3JldHVybiBudWxsIT09byYmIWUuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKSYmKGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxvKX0pKSxpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihpRCksUihlVikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhFZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5iYWNrZW5kPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY2hhaW49bnVsbH1oYW5kbGUoZSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2xldCBpPXRoaXMuaW5qZWN0b3IuZ2V0KHJELFtdKTt0aGlzLmNoYWluPWkucmVkdWNlUmlnaHQoKHIsbyk9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubmV4dD10LHRoaXMuaW50ZXJjZXB0b3I9ZX1oYW5kbGUodCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX19KHIsbyksdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIobkQpLFIoem4pKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVRWU9KCgpPT57Y2xhc3MgbntzdGF0aWMgZGlzYWJsZSgpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UUIsdXNlQ2xhc3M6TkVlfV19fXN0YXRpYyB3aXRoT3B0aW9ucyhlPXt9KXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTokQix1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTplVix1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1FCLHtwcm92aWRlOnJELHVzZUV4aXN0aW5nOlFCLG11bHRpOiEwfSx7cHJvdmlkZTppRCx1c2VDbGFzczpWRWV9LHtwcm92aWRlOiRCLHVzZVZhbHVlOiJYU1JGLVRPS0VOIn0se3Byb3ZpZGU6ZVYsdXNlVmFsdWU6IlgtWFNSRi1UT0tFTiJ9XX0pLG59KSgpLCRRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0dmLHtwcm92aWRlOnRELHVzZUNsYXNzOkhFZX0sSlEse3Byb3ZpZGU6bkQsdXNlRXhpc3Rpbmc6SlF9XSxpbXBvcnRzOltVRWUud2l0aE9wdGlvbnMoe2Nvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLGhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiJ9KV19KSxufSkoKSxvRD0iZmVhdHVyZSIsdF89UHIob0QpLFBwPVkodF8sbj0+bi5pc0ZlYXR1cmVGbGFnc0xvYWRlZCksQm89WSh0XyxuPT4oey4uLm4uZGVmYXVsdEZsYWdzLC4uLm4uZmxhZ092ZXJyaWRlc30pKSx0Sz1ZKHRfLG49Pm4uZGVmYXVsdEZsYWdzKSxnQz1ZKHRfLG49Pm4uZmxhZ092ZXJyaWRlc3x8e30pLFdmPVkodF8sbj0+bi5tZXRhZGF0YSksbl89WSh0XyxuPT57bGV0IHQ9e307Zm9yKGxldCBlIGluIG4uZmxhZ092ZXJyaWRlcyl7bGV0IGk9bi5tZXRhZGF0YVtlXTtpJiZpLnF1ZXJ5UGFyYW1PdmVycmlkZSYmaS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbiYmKHRbZV09bi5mbGFnT3ZlcnJpZGVzW2VdKX1yZXR1cm4gdH0pLG5LPVkoQm8sbj0+bi5pc0F1dG9EYXJrTW9kZUFsbG93ZWQpLG11PVkoQm8sbj0+bnVsbCE9PW4uZW5hYmxlRGFya01vZGVPdmVycmlkZT9uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6bi5kZWZhdWx0RW5hYmxlRGFya01vZGUpLHNEPVkoQm8sbj0+bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlKSxpSz1ZKEJvLG49Pm4uZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnMpLHJLPVkoQm8sbj0+bi5pbkNvbGFiKSxhRD1ZKEJvLG49Pm4ubWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQpLG9LPVkoQm8sbj0+bi5lbmFibGVkTGlua2VkVGltZSksc0s9WShCbyxuPT5uLmZvcmNlU3ZnKSxhSz1ZKEJvLG49Pm4uZW5hYmxlZFNjYWxhckRhdGFUYWJsZSksbEs9WShCbyxuPT52b2lkIDAhPT1uLnNob3dGbGFncyksY0s9WShCbyxuPT5uLmFsbG93UmFuZ2VTZWxlY3Rpb24pLHVLPVkoQm8sbj0+bi5lbmFibGVkUHJvc3BlY3RpdmVGb2IpLGxEPVkoQm8sbj0+bi5lbmFibGVTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uKSxkSz1ZKEJvLG49Pm4uZW5hYmxlSHBhcmFtc0luVGltZVNlcmllcyk7ZnVuY3Rpb24gakVlKG4sdCl7aWYoIW4pcmV0dXJuO2xldCBlPW4gaW5zdGFuY2VvZiBGb3JtRGF0YT9mdW5jdGlvbihuKXtsZXQgdD17fTtmb3IobGV0W2UsaV1vZiBuLmVudHJpZXMoKSl0W2VdPWk7cmV0dXJuIHR9KG4pOm47cmV0dXJuIHQ/e1t0XTpKU09OLnN0cmluZ2lmeShlKX06ZX1mdW5jdGlvbiB0VihuKXtsZXQgdD1uLmhlYWRlcnN8fG5ldyBWYTtyZXR1cm4gdD10LmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSx7Li4ubixoZWFkZXJzOnR9fXZhciBndT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFwcFJvb3RQcm92aWRlcj1lLHRoaXMuaHR0cD1pLHRoaXMuc3RvcmU9cn1yZXNvbHZlQXBwUm9vdChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCIvIik/dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKTplfWdldChlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSl9cG9zdChlLGkscj17fSxvKXtyZXR1cm4gcj10VihyKSx0aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShzPT5Cb29sZWFuKHMpKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChySykpLF9uKChbLHNdKT0+e2xldCBhPXRoaXMucmVzb2x2ZUFwcFJvb3QoZSk7cmV0dXJuIHM/dGhpcy5odHRwLmdldChhLHtoZWFkZXJzOnIuaGVhZGVycz8/e30scGFyYW1zOmpFZShpLG8pfSk6dGhpcy5odHRwLnBvc3QoYSxpLHIpfSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5yZXNvbHZlQXBwUm9vdChlKSxpLHRWKHIpKX1kZWxldGUoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLnJlc29sdmVBcHBSb290KGUpLHRWKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih6ZiksUihHZiksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGlfPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2d1XSxpbXBvcnRzOlskUSxRMF19KSxufSkoKSxDbD0oKCk9PihmdW5jdGlvbihuKXtuLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIn0oQ2x8fChDbD17fSkpLENsKSkoKSxwSz1uZXcgc2UoIlRlbnNvckJvYXJkIGJyYW5kIG5hbWUiKSxmbz0oKCk9PihmdW5jdGlvbihuKXtuLlNURVA9InN0ZXAiLG4uV0FMTF9USU1FPSJ3YWxsX3RpbWUiLG4uUkVMQVRJVkU9InJlbGF0aXZlIn0oZm98fChmbz17fSkpLGZvKSkoKSxPcj0oKCk9PihmdW5jdGlvbihuKXtuLk9GRlNFVD0ib2Zmc2V0IixuLk9WRVJMQVk9Im92ZXJsYXkifShPcnx8KE9yPXt9KSksT3IpKSgpO2Z1bmN0aW9uIGhLKG4pe2xldCB0PUNsLlVOS05PV047cmV0dXJuIG4gaW5zdGFuY2VvZiBtZCYmKDQwND09PW4uc3RhdHVzJiYodD1DbC5OT1RfRk9VTkQpLDQwMz09PW4uc3RhdHVzJiYodD1DbC5QRVJNSVNTSU9OX0RFTklFRCkpLEdsKG5ldyBfQyh0KSl9dmFyIF9DPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFpbHVyZUNvZGU9dH19LHVEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5odHRwPWUsdGhpcy50ZkJhY2tlbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9ZmV0Y2hQbHVnaW5zTGlzdGluZyhlKXtsZXQgaT1mdW5jdGlvbihuKXtpZighbi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0IGUgb2Ygbil0LmFwcGVuZCgiZXhwZXJpbWVudGFsUGx1Z2luIixlKTtyZXR1cm4gdH0oZSkscj1pP2BkYXRhL3BsdWdpbnNfbGlzdGluZz8ke2kudG9TdHJpbmcoKX1gOiJkYXRhL3BsdWdpbnNfbGlzdGluZyI7cmV0dXJuIHRoaXMuaHR0cC5nZXQocikucGlwZShDbyhoSykpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4geG8oW3RoaXMuaHR0cC5nZXQoImRhdGEvZW52aXJvbm1lbnQiKSxsbyh0aGlzLnRmQmFja2VuZC5lbnZpcm9ubWVudFN0b3JlLnJlZnJlc2goKSldKS5waXBlKEIoKFtyXSk9PnIpLENvKGhLKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoZ3UpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmSz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt1RF0saW1wb3J0czpbaV9dfSksbn0pKCksRWU9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLG5bbi5MT0FERUQ9MV09IkxPQURFRCIsbltuLkxPQURJTkc9Ml09IkxPQURJTkciLG5bbi5GQUlMRUQ9M109IkZBSUxFRCJ9KEVlfHwoRWU9e30pKSxFZSkpKCksX3U9d2UoIltDb3JlXSBQbHVnaW4gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGREPXdlKCJbQ29yZV0gUGx1Z2luIFVybCBIYXNoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtSz13ZSgiW0NvcmVdIExvYWRlZCIpLHdsPXdlKCJbQ29yZV0gVXNlciBUcmlnZ2VyZWQgUmVsb2FkIiksSGE9d2UoIltDb3JlXSBBdXRvIFJlbG9hZCIpLHBEPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBSZXF1ZXN0ZWQiKSxxZj13ZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZDPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggUmVxdWVzdGVkIiksZkQ9d2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFN1Y2Nlc3NmdWwiKSxtRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggRmFpbGVkIiksZ0Q9d2UoIltDb3JlXSBFbnZpcm9ubWVudCBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ0s9d2UoIltDb3JlXSBSdW4gU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfSz13ZSgiW0NvcmVdIFJ1biBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscl89d2UoIltDb3JlXSBTaWRlIEJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gWWYobix0LGUpe2xldCBpPU9iamVjdC5rZXlzKG4pLHI9ey4uLm4sLi4udCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnt9fTtyZXR1cm57aW5pdGlhbFN0YXRlOnIscmVkdWNlcnM6d3IocixTZSh4bCwoYSx7YmVmb3JlOmwsYWZ0ZXI6YyxiZWZvcmVOYW1lc3BhY2VJZDp1LGFmdGVyTmFtZXNwYWNlSWQ6ZH0pPT57bGV0IHA9YTtyZXR1cm4gdSE9PWQmJihwPWZ1bmN0aW9uKGEsbCxjKXtsZXQgdT17Li4uYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlfTtpZihsKXtsZXQgcD17fTtmb3IobGV0IGggb2YgaSlwW2hdPWFbaF07dT17Li4udSxbbF06cH19bGV0IGQ9e307cmV0dXJuIGEucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZT8uW2NdP2Q9YS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlW2NdOmwmJihkPW4pLHsuLi5hLC4uLmQscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTp1fX0oYSx1LGQpKSxlJiYocD1lKHAsbCxjKSkscH0pKX19ZnVuY3Rpb24gWGYoLi4ubil7cmV0dXJuKHQsZSk9PntsZXQgaT10O2ZvcihsZXQgciBvZiBuKWk9cihpLGUpO3JldHVybiBpfX12YXIgeUM9e2FjdGl2ZVBsdWdpbjpudWxsLHBsdWdpbnM6e30sY29yZURhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsLGZhaWx1cmVDb2RlOm51bGx9LGVudmlyb25tZW50OntkYXRhX2xvY2F0aW9uOiIiLHdpbmRvd190aXRsZToiIn0scG9seW1lclJ1bnNMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBvbHltZXJJbnRlcm9wUnVuczpbXSxwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0LHNpZGVCYXJXaWR0aEluUGVyY2VudDoyMH0sWUVlPXdyKHlDLFNlKF91LGRELChuLHtwbHVnaW46dH0pPT4oey4uLm4sYWN0aXZlUGx1Z2luOnR9KSksU2UocEQsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOkVlLkxPQURJTkd9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHZDLChuLHtmYWlsdXJlQ29kZTp0fSk9Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkZBSUxFRCxmYWlsdXJlQ29kZTp0fX0pKSxTZShxZiwobix7cGx1Z2luczp0fSk9PntsZXQgZT1PYmplY3Qua2V5cyh0KS5maW5kKHM9PnRbc10uZW5hYmxlZCl8fG51bGwsaT1uLmFjdGl2ZVBsdWdpbnx8ZSxyPURhdGUubm93KCksbz1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBvbHltZXJSdW5zTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BREVEJiYobz17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyfSksey4uLm4sYWN0aXZlUGx1Z2luOmksY29yZURhdGFMb2FkU3RhdGU6byxwbHVnaW5zOnQscGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6cixmYWlsdXJlQ29kZTpudWxsfX19KSxTZShoRCxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR30scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR319KSksU2UoZkQsbj0+e2xldCB0PURhdGUubm93KCksZT1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBsdWdpbnNMaXN0TG9hZGVkLnN0YXRlPT09RWUuTE9BREVEJiYoZT17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5Nczp0fSksey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ZSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9fX0pLFNlKG1ELG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoZ0QsKG4se2Vudmlyb25tZW50OnR9KT0+KHsuLi5uLGVudmlyb25tZW50OnR9KSksU2UoX0ssKG4se3J1bnM6dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5zOnR9KSksU2UoZ0ssKG4se25leHRTZWxlY3Rpb246dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldCh0KX0pKSxTZShyXywobix7d2lkdGhJblBlcmNlbnQ6dH0pPT4oey4uLm4sc2lkZUJhcldpZHRoSW5QZXJjZW50Ok1hdGgubWluKE1hdGgubWF4KDAsdCksMTAwKX0pKSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXsuLi5ufSxpPXQuc2lkZUJhcldpZHRoSW5QZXJjZW50O3JldHVybiJudW1iZXIiPT10eXBlb2YgaSYmaT49MCYmaTw9MTAwJiYoZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9aSksZX0pKSx7cmVkdWNlcnM6WEVlfT1ZZih5Qyx7fSk7ZnVuY3Rpb24gdksobix0KXtyZXR1cm4gWGYoWUVlLFhFZSkobix0KX12YXIgUnA9UHIoImNvcmUiKSx5RD1ZKFJwLG49Pm4ucGx1Z2luc0xpc3RMb2FkZWQpLHlLPVkoUnAsbj0+bi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSksYks9WShScCxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLnN0YXRlKSxvXz1ZKFJwLG49Pm4uY29yZURhdGFMb2FkU3RhdGUubGFzdExvYWRlZFRpbWVJbk1zKSxkcz1ZKFJwLG49Pm4uYWN0aXZlUGx1Z2luKSxzXz1ZKFJwLG49Pm4ucGx1Z2lucyksYkQ9WShScCxuPT5uLmVudmlyb25tZW50KSx4RD1ZKFJwLG49Pm4uc2lkZUJhcldpZHRoSW5QZXJjZW50KSx4Sz1uZXcgU2V0KFtmaS5DT01QQVJFX0VYUEVSSU1FTlQsZmkuRVhQRVJJTUVOVCxmaS5OT1RfU0VUXSksQ0s9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLndlYmFwcERhdGFTb3VyY2U9cix0aGlzLnRmQmFja2VuZD17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfSx0aGlzLm9uRGFzaGJvYXJkTG9hZCQ9dW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKG1LLHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKEhhLHdsKSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpKSxIZSgoWyxvXSk9PnhLLmhhcyhvKSksYmcoMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPVVyKCgpPT57bGV0IG89dGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoeUQpLHRoaXMuc3RvcmUuc2VsZWN0KGlLKSksSGUoKFsse3N0YXRlOmF9XSk9PmEhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChwRCgpKSksX24oKFssLGFdKT0+ZnVuY3Rpb24oLi4ubil7bGV0IHQ9SGMobiksZT1GUyhuKTtyZXR1cm4gZS5sZW5ndGg/bmV3IFF0KGk9PntsZXQgcj1lLm1hcCgoKT0+W10pLG89ZS5tYXAoKCk9PiExKTtpLmFkZCgoKT0+e3I9bz1udWxsfSk7Zm9yKGxldCBzPTA7IWkuY2xvc2VkJiZzPGUubGVuZ3RoO3MrKylhaShlW3NdKS5zdWJzY3JpYmUoTHQoaSxhPT57aWYocltzXS5wdXNoKGEpLHIuZXZlcnkobD0+bC5sZW5ndGgpKXtsZXQgbD1yLm1hcChjPT5jLnNoaWZ0KCkpO2kubmV4dCh0P3QoLi4ubCk6bCksci5zb21lKChjLHUpPT4hYy5sZW5ndGgmJm9bdV0pJiZpLmNvbXBsZXRlKCl9fSwoKT0+e29bc109ITAsIXJbc10ubGVuZ3RoJiZpLmNvbXBsZXRlKCl9KSk7cmV0dXJuKCk9PntyPW89bnVsbH19KTphb30odGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoUGx1Z2luc0xpc3RpbmcoYSksdGhpcy5mZXRjaEVudmlyb25tZW50KCkpLnBpcGUoQigoW2xdKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gocWYoe3BsdWdpbnM6bH0pKX0pLENvKGw9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHZDKGwgaW5zdGFuY2VvZiBfQz97ZmFpbHVyZUNvZGU6bC5mYWlsdXJlQ29kZX06e2ZhaWx1cmVDb2RlOkNsLlVOS05PV059KSksYW8pKSkpKTtyZXR1cm4gdW4obyx0aGlzLm9uRGFzaGJvYXJkTG9hZCQucGlwZShCKChbLGFdKT0+YSksdmkoYT0+YSE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9qdChbXSk6dGhpcy5zdG9yZS5zZWxlY3QoaHUpLnBpcGUoZGkoKGwsYyk9PntsZXQgdT1PYmplY3QuZW50cmllcyhsKSxkPW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoYykpO2lmKHUubGVuZ3RoIT09ZC5zaXplKXJldHVybiExO2ZvcihsZXRbcCxoXW9mIHUpaWYoIWQuZ2V0KHApfHxkLmdldChwKS5hbGlhc1RleHQhPT1oLmFsaWFzVGV4dHx8ZC5nZXQocCkuYWxpYXNOdW1iZXIhPT1oLmFsaWFzTnVtYmVyKXJldHVybiExO3JldHVybiEwfSksbmwoMCksYmcoNTAwLHZvaWQgMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pKSksR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuc3RvcmUuc2VsZWN0KHlLKSksSGUoKFssYSxsXSk9PnhLLmhhcyhhKSYmbC5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChoRCgpKX0pLHZpKCgpPT50aGlzLnJlZnJlc2hQb2x5bWVyUnVucygpKSxOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goZkQoKSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2gobUQoKSksYW8pKSkpfSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmRpc3BhdGNoQ2hhbmdlUGx1Z2luJD1VcigoKT0+dW4odGhpcy5vbkRhc2hib2FyZExvYWQkLHRoaXMuYWN0aW9ucyQucGlwZShUaShxZikpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksQigoWyxvXSk9Pm8pLGRpKCksSGUobz0+bnVsbCE9PW8pLEh0KDEpLE50KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKF91KHtwbHVnaW46b30pKX0pKSx7ZGlzcGF0Y2g6ITF9KX1yZWZyZXNoUG9seW1lclJ1bnMoKXtyZXR1cm4gbG8odGhpcy50ZkJhY2tlbmQucmVmLnJ1bnNTdG9yZS5yZWZyZXNoKCkpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoRW52aXJvbm1lbnQoKS5waXBlKE50KGU9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGdEKHtlbnZpcm9ubWVudDplfSkpfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksblY9bmV3IHNlKCJDb3JlIEZlYXR1cmUgQ29uZmlnIik7ZnVuY3Rpb24gd0sobil7cmV0dXJue2luaXRpYWxTdGF0ZTp7Li4ueUMsYWN0aXZlUGx1Z2luOm4uZ2V0UGx1Z2luSWQoKXx8bnVsbH19fWZ1bmN0aW9uIFpFZSgpe3JldHVybiBZKHhELG49Pih7c2lkZUJhcldpZHRoSW5QZXJjZW50Om59KSl9dmFyIE1sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOm5WLGRlcHM6W0FwXSx1c2VGYWN0b3J5OndLfV0saW1wb3J0czpbTG8uZm9yRmVhdHVyZShbQ0tdKSxSci5mb3JGZWF0dXJlKCJjb3JlIix2SyxuViksZkssbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhaRWUpXX0pLG59KSgpLE1LPW5ldyBzZSgiW0FsZXJ0XSBBY3Rpb24tVG8tQWxlcnQgUHJvdmlkZXIiKSx2dT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGxldCBpIG9mIGV8fFtdKWZvcihsZXQgciBvZiBpKXtpZih0aGlzLnByb3ZpZGVycy5oYXMoci5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHtyLmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgYWxlcnRzLiBNdWx0aXBsZSBhbGVydHMgZm9yIHRoZSBzYW1lIGFjdGlvbiBpcyBub3QgYWxsb3dlZC5gKTt0aGlzLnByb3ZpZGVycy5zZXQoci5hY3Rpb25DcmVhdG9yLnR5cGUsci5hbGVydEZyb21BY3Rpb24pfX1nZXRBbGVydEZyb21BY3Rpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlckFsZXJ0QWN0aW9ucyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOk1LLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihNSyw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLENEPXdlKCJbUnVuc10gRmV0Y2ggUnVucyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPcD13ZSgiW1J1bnNdIEZldGNoIFJ1bnMgU3VjY2VlZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYV89d2UoIltSdW5zXSBGZXRjaCBSdW5zIEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHdEPXdlKCJbUnVuc10gUnVuIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTUQ9d2UoIltSdW5zXSBTaW5nbGUgUnVuIFNlbGVjdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU0Q9d2UoIltSdW5zXSBSdW4gUGFnZSBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVEPXdlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFBhZ2luYXRpb24gT3B0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxURD13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBTb3J0IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxiQz13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBSZWdleCBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEREPXdlKCJbUnVuc10gUnVuIENvbG9yIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRD13ZSgiW1J1bnNdIFJ1biBUYWJsZSBTaG93biIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGxfPXdlKCJbUnVuc10gUnVuIEdyb3VwIEJ5IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrcD0oKCk9PihmdW5jdGlvbihuKXtuLlNUQVRVU19VTktOT1dOPSJTVEFUVVNfVU5LTk9XTiIsbi5TVEFUVVNfU1VDQ0VTUz0iU1RBVFVTX1NVQ0NFU1MiLG4uU1RBVFVTX0ZBSUxVUkU9IlNUQVRVU19GQUlMVVJFIixuLlNUQVRVU19SVU5OSU5HPSJTVEFUVVNfUlVOTklORyJ9KGtwfHwoa3A9e30pKSxrcCkpKCksS249KCgpPT4oZnVuY3Rpb24obil7bltuLkRJU0NSRVRFPTBdPSJESVNDUkVURSIsbltuLklOVEVSVkFMPTFdPSJJTlRFUlZBTCJ9KEtufHwoS249e30pKSxLbikpKCksSUQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUWY9e307U08oUWYse2hwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9Pm9WLGhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9PnNWLGhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkOigpPT5hVn0pO3ZhciBvVj13ZSgiW0hwYXJhbXNdIEhwYXJhbXMgRGlzY3JldGUgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1Y9d2UoIltIcGFyYW1zXSBIcGFyYW1zIEludGVydmFsIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFWPXdlKCJbSHBhcmFtc10gSHBhcmFtcyBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBLZihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLm5dLnNvcnQoKSl9ZnVuY3Rpb24geEMobil7bGV0IHQ9bmV3IE1hcCxlPW5ldyBNYXAsaT1uZXcgTWFwO2ZvcihsZXQgciBvZiBuKWZvcihsZXRbbyxzXW9mIHIpaWYocy50eXBlPT09S24uRElTQ1JFVEUpe2xldHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfT1lLmdldChvKXx8e3Bvc3NpYmxlVmFsdWVzOm5ldyBTZXQsdmFsdWVzOm5ldyBTZXR9O2ZvcihsZXQgYyBvZiBzLmZpbHRlclZhbHVlcylsLmFkZChjKTtmb3IobGV0IGMgb2Ygcy5wb3NzaWJsZVZhbHVlcylhLmFkZChjKTtlLnNldChvLHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfSl9ZWxzZXtsZXQgYT1pLmdldChvKTtpLnNldChvLHtmaWx0ZXJMb3dlclZhbHVlOk1hdGgubWluKHMuZmlsdGVyTG93ZXJWYWx1ZSxhPy5maWx0ZXJMb3dlclZhbHVlPz8xLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgocy5maWx0ZXJVcHBlclZhbHVlLGE/LmZpbHRlclVwcGVyVmFsdWU/Py0xLzApLG1pblZhbHVlOk1hdGgubWluKHMubWluVmFsdWUsYT8ubWluVmFsdWU/PzEvMCksbWF4VmFsdWU6TWF0aC5tYXgocy5tYXhWYWx1ZSxhPy5tYXhWYWx1ZT8/LTEvMCl9KX1mb3IobGV0W3Ise3ZhbHVlczpvLHBvc3NpYmxlVmFsdWVzOnN9XW9mIGUpdC5zZXQocix7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5zXSxmaWx0ZXJWYWx1ZXM6Wy4uLm9dfSk7Zm9yKGxldFtyLHttaW5WYWx1ZTpvLG1heFZhbHVlOnMsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6bH1db2YgaSl7aWYodC5oYXMocikpe2xldCBjPXQuZ2V0KHIpO2lmKGMudHlwZT09PUtuLkRJU0NSRVRFJiZjLnBvc3NpYmxlVmFsdWVzLnNvbWUodT0+dSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENhbm5vdCBjb21iaW5lIGhwYXJhbSwgJHtyfSwgYXMgaXQgaXMgb2YgbWl4ZWQgdHlwZXMuYCl9dC5zZXQocix7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOm8sbWF4VmFsdWU6cyxmaWx0ZXJMb3dlclZhbHVlOmEsZmlsdGVyVXBwZXJWYWx1ZTpsfSl9cmV0dXJuIHR9ZnVuY3Rpb24gUEQobil7bGV0IHQ9bmV3IE1hcDtmb3IobGV0IGUgb2Ygbilmb3IobGV0W2kscl1vZiBlKXtsZXQgbz10LmdldChpKTt0LnNldChpLHt0eXBlOktuLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsLi4ubyxtaW5WYWx1ZTpNYXRoLm1pbihyLm1pblZhbHVlLG8/Lm1pblZhbHVlPz8xLzApLG1heFZhbHVlOk1hdGgubWF4KHIubWF4VmFsdWUsbz8ubWF4VmFsdWU/Py0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4oci5maWx0ZXJMb3dlclZhbHVlLG8/LmZpbHRlckxvd2VyVmFsdWU/PzEvMCksZmlsdGVyVXBwZXJWYWx1ZTpNYXRoLm1heChyLmZpbHRlclVwcGVyVmFsdWUsbz8uZmlsdGVyVXBwZXJWYWx1ZT8/LTEvMCl9KX1yZXR1cm4gdH12YXIgaTFlPXdyKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxTZShvViwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309dCxzPUtmKGUpLGE9bi5maWx0ZXJzW3NdPz97aHBhcmFtczpuZXcgTWFwfSxsPWEuaHBhcmFtcy5nZXQoaSk7aWYobCYmbC50eXBlIT09S24uRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArS25bbC50eXBlXSk7bGV0IGM9eEMoZS5maWx0ZXIoaD0+Qm9vbGVhbihuLnNwZWNzW2hdKSkubWFwKGg9Pm4uc3BlY3NbaF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtpZihjLnR5cGUhPT1Lbi5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2xldCB1PW5ldyBTZXQoYy5wb3NzaWJsZVZhbHVlcyksZD1bLi4ucl0uZmlsdGVyKGg9PiF1LmhhcyhoKSk7aWYoZC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBOZXcgZmlsdGVyIGZvciAke2l9IGhhcyBtb3JlIHRoYW4gb25lIHZhbHVlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHNwZWMuIEJhZCB2YWx1ZXM6ICR7ZC5qb2luKCIsICIpfWApO2xldCBwPW5ldyBNYXAoYS5ocGFyYW1zKTtyZXR1cm4gcC5zZXQoaSx7Li4ubCx0eXBlOktuLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6byxwb3NzaWJsZVZhbHVlczpbLi4udV0sZmlsdGVyVmFsdWVzOnJ9KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW3NdOnsuLi5hLGhwYXJhbXM6cH19fX0pLFNlKHNWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxocGFyYW1OYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1LZihlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9bC5ocGFyYW1zLmdldChpKTtpZihjJiZjLnR5cGUhPT1Lbi5JTlRFUlZBTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTmV3IGludGVydmFsIGZpbHRlciBvZiAke2l9IGNvbmZsaWN0cyBleGlzdGluZyBmaWx0ZXIgb2YgYCtLbltjLnR5cGVdKTtsZXQgdT14QyhlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGhwYXJhLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYodS50eXBlIT09S24uSU5URVJWQUwpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgaW50ZXJ2YWwgdHlwZS5gKTtsZXQgZD1uZXcgTWFwKGwuaHBhcmFtcyk7cmV0dXJuIGQuc2V0KGksey4uLmMsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6dS5taW5WYWx1ZSxtYXhWYWx1ZTp1Lm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLGhwYXJhbXM6ZH19fX0pLFNlKGFWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxtZXRyaWNUYWc6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309dCxhPUtmKGUpLGw9bi5maWx0ZXJzW2FdPz97bWV0cmljczpuZXcgTWFwLGhwYXJhbXM6bmV3IE1hcH0sYz1QRChlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIWMpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IG1ldHJpYywgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2xldCB1PWwubWV0cmljcy5nZXQoaSksZD1uZXcgTWFwKGwubWV0cmljcyk7cmV0dXJuIGQuc2V0KGksey4uLnUsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6Yy5taW5WYWx1ZSxtYXhWYWx1ZTpjLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLG1ldHJpY3M6ZH19fX0pLFNlKE9wLChuLHQpPT57aWYoMD09PU9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4uc3BlY3N9LGk9bmV3IE1hcCxyPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0IHM9bmV3IE1hcCxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx7cnVuczp1LG1ldGFkYXRhOmR9PXQubmV3UnVuc0FuZE1ldGFkYXRhW29dO2ZvcihsZXQgcCBvZiB1KXtsZXQgaD1kLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbcC5pZF07aWYoaClmb3IobGV0IGYgb2YgaC5tZXRyaWNzKXtsZXQgbT1pLmdldChmLnRhZyk7aS5zZXQoZi50YWcse21pbjptP01hdGgubWluKG0ubWluLGYudmFsdWUpOmYudmFsdWUsbWF4Om0/TWF0aC5tYXgobS5tYXgsZi52YWx1ZSk6Zi52YWx1ZX0pfX1mb3IobGV0e25hbWU6cCxkb21haW46aH1vZiBkLmhwYXJhbVNwZWNzKWlmKGgudHlwZT09PUtuLkRJU0NSRVRFKXtsZXQgZj1sLmdldChwKXx8bmV3IFNldDtmb3IobGV0IG0gb2YgaC52YWx1ZXMpZi5hZGQobSk7bC5zZXQocCxmKX1lbHNle2xldCBmPWMuZ2V0KHApO2Muc2V0KHAse21pblZhbHVlOmY/TWF0aC5taW4oaC5taW5WYWx1ZSxmLm1pblZhbHVlKTpoLm1pblZhbHVlLG1heFZhbHVlOmY/TWF0aC5tYXgoaC5tYXhWYWx1ZSxmLm1heFZhbHVlKTpoLm1heFZhbHVlfSl9Zm9yKGxldCBwIG9mIGQubWV0cmljU3BlY3Mpci5hZGQocC50YWcpO2ZvcihsZXRbcCxoXW9mIGwpcy5zZXQocCx7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5oXSxmaWx0ZXJWYWx1ZXM6Wy4uLmhdfSk7Zm9yKGxldFtwLHttaW5WYWx1ZTpoLG1heFZhbHVlOmZ9XW9mIGMpcy5zZXQocCx7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOmgsbWF4VmFsdWU6ZixmaWx0ZXJMb3dlclZhbHVlOmgsZmlsdGVyVXBwZXJWYWx1ZTpmfSk7Zm9yKGxldCBwIG9mIHIpe2xldCBoPWkuZ2V0KHApLGY9aD8ubWluPz8wLG09aD8ubWF4Pz8wO2Euc2V0KHAse3R5cGU6S24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpmLG1heFZhbHVlOm0sZmlsdGVyTG93ZXJWYWx1ZTpmLGZpbHRlclVwcGVyVmFsdWU6bX0pfWVbb109e2hwYXJhbTp7Li4uZVtvXT8uaHBhcmFtLHNwZWNzOmQuaHBhcmFtU3BlY3MsZGVmYXVsdEZpbHRlcnM6c30sbWV0cmljOnsuLi5lW29dPy5tZXRyaWMsc3BlY3M6ZC5tZXRyaWNTcGVjcyxkZWZhdWx0RmlsdGVyczphfX19cmV0dXJuey4uLm4sc3BlY3M6ZX19KSk7ZnVuY3Rpb24gVEsobix0KXtyZXR1cm4gaTFlKG4sdCl9dmFyIFJEPSJocGFyYW1zIixESz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShSRCxUSyldfSksbn0pKCksT0Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0RLXX0pLG59KSgpLEFLPSJkYXRhL3BsdWdpbi9ocGFyYW1zIjtmdW5jdGlvbiByMWUobix0KXtyZXR1cm5gJHt0fS8ke259YH1mdW5jdGlvbiBvMWUobil7bGV0IHQ7cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIil9KG4pP3t0eXBlOktuLkRJU0NSRVRFLHZhbHVlczpuLmRvbWFpbkRpc2NyZXRlfTpmdW5jdGlvbihuKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluSW50ZXJ2YWwiKX0obik/ey4uLm4uZG9tYWluSW50ZXJ2YWwsdHlwZTpLbi5JTlRFUlZBTH06e3R5cGU6S24uSU5URVJWQUwsbWluVmFsdWU6LTEvMCxtYXhWYWx1ZToxLzB9LHtkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGRpc3BsYXlOYW1lOm4uZGlzcGxheU5hbWUsbmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsZG9tYWluOnR9fWZ1bmN0aW9uIHMxZShuKXtsZXR7bmFtZTp0LC4uLmV9PW47cmV0dXJuey4uLmUsdGFnOnQudGFnfX12YXIgSUs9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoImRhdGEvcnVucyIpLnBpcGUoQihpPT5pLm1hcChyPT4oe2lkOnIxZShyLGUpLG5hbWU6cixzdGFydFRpbWU6MH0pKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKGUpe3JldHVybiB0aGlzLmh0dHAucG9zdChgL2V4cGVyaW1lbnQvJHtlfS8ke0FLfS9leHBlcmltZW50YCx7ZXhwZXJpbWVudE5hbWU6ZX0se30sInJlcXVlc3QiKS5waXBlKEIocj0+e2xldCBvPVtdO2ZvcihsZXQgYSBvZiByLmhwYXJhbUluZm9zKW8ucHVzaCh7aHBhcmFtOmEubmFtZX0pO2ZvcihsZXQgYSBvZiByLm1ldHJpY0luZm9zKW8ucHVzaCh7bWV0cmljOmEubmFtZX0pO3JldHVybntleHBlcmltZW50SHBhcmFtc0luZm86cixsaXN0U2Vzc2lvblJlcXVlc3RQYXJhbXM6e2V4cGVyaW1lbnROYW1lOmUsYWxsb3dlZFN0YXR1c2VzOltrcC5TVEFUVVNfRkFJTFVSRSxrcC5TVEFUVVNfUlVOTklORyxrcC5TVEFUVVNfU1VDQ0VTUyxrcC5TVEFUVVNfVU5LTk9XTl0sY29sUGFyYW1zOm8sc3RhcnRJbmRleDowLHNsaWNlU2l6ZToxZTZ9fX0pLF9uKCh7ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsbGlzdFNlc3Npb25SZXF1ZXN0UGFyYW1zOm99KT0+dGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHtBS30vc2Vzc2lvbl9ncm91cHNgLG8se30sInJlcXVlc3QiKS5waXBlKEIocz0+KHtleHBlcmltZW50SHBhcmFtc0luZm86cixzZXNzaW9uR3JvdXBzTGlzdDpzfSkpKSksQigoe2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLHNlc3Npb25Hcm91cHNMaXN0Om99KT0+e2xldCBzPXt9O2ZvcihsZXQgYSBvZiBvLnNlc3Npb25Hcm91cHMpe2xldCBsPU9iamVjdC5lbnRyaWVzKGEuaHBhcmFtcykubWFwKGM9PntsZXRbdSxkXT1jO3JldHVybntuYW1lOnUsdmFsdWU6ZH19KTtmb3IobGV0IGMgb2YgYS5zZXNzaW9ucylmb3IobGV0IHUgb2YgYy5tZXRyaWNWYWx1ZXMpe2xldCBwPWAke2V9LyR7dS5uYW1lLmdyb3VwP2Ake2MubmFtZX0vJHt1Lm5hbWUuZ3JvdXB9YDpjLm5hbWV9YCxoPXNbcF18fHttZXRyaWNzOltdLGhwYXJhbXM6bH07aC5tZXRyaWNzLnB1c2goe3RhZzp1Lm5hbWUudGFnLHRyYWluaW5nU3RlcDp1LnRyYWluaW5nU3RlcCx2YWx1ZTp1LnZhbHVlfSksc1twXT1ofX1yZXR1cm57aHBhcmFtU3BlY3M6ci5ocGFyYW1JbmZvcy5tYXAobzFlKSxtZXRyaWNTcGVjczpyLm1ldHJpY0luZm9zLm1hcChzMWUpLHJ1blRvSHBhcmFtc0FuZE1ldHJpY3M6c319KSxDbyhyPT5yIGluc3RhbmNlb2YgbWQmJjQwMD09PXIuc3RhdHVzP2p0KHtocGFyYW1TcGVjczpbXSxtZXRyaWNTcGVjczpbXSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnt9fSk6R2wocikpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFBLPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOklELHVzZUNsYXNzOklLfV19KSxufSkoKSxSSz1ZKFByKCJhbGVydHMiKSxuPT5uLmxhdGVzdEFsZXJ0KSxGRD0iZXhwZXJpbWVudHMiLGMxZT1ZKFByKEZEKSxuPT5uLmRhdGEpLE5EPVkoYzFlLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZDplfT10O3JldHVybiBuLmV4cGVyaW1lbnRNYXBbZV18fG51bGx9KTtmdW5jdGlvbiBMRChuLHQsZSl7cmV0dXJuIG48dD90Om4+ZT9lOm59ZnVuY3Rpb24gY18obix0LGUpe2xldCBpPUxEKG4uc3RhcnQuc3RlcCx0LGUpLHI9bi5lbmQ/TEQobi5lbmQuc3RlcCx0LGUpOm51bGw7cmV0dXJue3N0YXJ0U3RlcDppLGVuZFN0ZXA6cixjbGlwcGVkOmkhPT1uLnN0YXJ0LnN0ZXB8fHIhPT0obi5lbmQ/LnN0ZXA/P251bGwpfX1mdW5jdGlvbiBCRChuLHQpe2xldCBlPXRbbi5pZF07cmV0dXJuIGUmJmUudmlzaWJsZSYmIUJvb2xlYW4oZS5hdXgpfWZ1bmN0aW9uIGxWKG4sdCl7cmV0dXJuIHQ/bjp7c3RhcnQ6bi5zdGFydCxlbmQ6bnVsbH19ZnVuY3Rpb24gY1Yobix0LGUpe3JldHVybiBsVihmdW5jdGlvbihuLHttaW5TdGVwOnQsbWF4U3RlcDplfSl7cmV0dXJue3N0YXJ0OntzdGVwOkxEKG4uc3RhcnQuc3RlcCx0LGUpfSxlbmQ6bi5lbmQ/e3N0ZXA6TEQobi5lbmQuc3RlcCx0LGUpfTpudWxsfX0obix0KSxlKX12YXIgV249KCgpPT4oZnVuY3Rpb24obil7bi5TQ0FMQVJTPSJzY2FsYXJzIixuLkhJU1RPR1JBTVM9Imhpc3RvZ3JhbXMiLG4uSU1BR0VTPSJpbWFnZXMifShXbnx8KFduPXt9KSksV24pKSgpLFlpPSgoKT0+KGZ1bmN0aW9uKG4pe24uU1RFUD0ic3RlcCIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG4uV0FMTF9USU1FPSJ3YWxsdGltZSJ9KFlpfHwoWWk9e30pKSxZaSkpKCksQ0M9InRpbWVzZXJpZXMiO2Z1bmN0aW9uIExLKG4pe3JldHVybiBuPT09V24uU0NBTEFSU3x8bj09PVduLkhJU1RPR1JBTVN8fG49PT1Xbi5JTUFHRVN9dmFyIHAxZT1bV24uSU1BR0VTXTtmdW5jdGlvbiBVYShuKXtyZXR1cm4gcDFlLmluY2x1ZGVzKG4pfXZhciBoMWU9W1duLkhJU1RPR1JBTVMsV24uSU1BR0VTXTtmdW5jdGlvbiB6YShuKXtyZXR1cm4gaDFlLmluY2x1ZGVzKG4pfWZ1bmN0aW9uIHVWKG4pe3JldHVybiB6YShuLnBsdWdpbil9dmFyIHl1PWNsYXNze307ZnVuY3Rpb24gSEQobil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImVycm9yIil9dmFyIGRWPSJkYXRhL3BsdWdpbi90aW1lc2VyaWVzIjtmdW5jdGlvbiBCSyhuKXtsZXQgdD1uLmluZGV4T2YoIi8iKTtyZXR1cm57cnVuOm4uc3Vic3RyaW5nKHQrMSksZXhwZXJpbWVudElkOm4uc3Vic3RyaW5nKDAsdCl9fWZ1bmN0aW9uIEhLKG4sdCl7cmV0dXJuYCR7dH0vJHtufWB9ZnVuY3Rpb24gVksobix0KXtsZXR7cnVuVG9TZXJpZXM6ZSxydW46aSwuLi5yfT1uLG89ey4uLnJ9O3JldHVybiBlJiYoby5ydW5Ub1Nlcmllcz1wVihlLHQpKSxpJiYoby5ydW5JZD1ISyhpLHQpKSxvfWZ1bmN0aW9uIHBWKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbSEsoaSx0KV09bltpXSk7cmV0dXJuIGV9dmFyIFVLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmh0dHA9ZSx0aGlzLnN0b3JlPWl9ZmV0Y2hUYWdNZXRhZGF0YShlKXtsZXQgaT1lLm1hcChvPT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke299LyR7ZFZ9L3RhZ3NgKS5waXBlKEIoYT0+ZnVuY3Rpb24obix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpe2xldCByPWk7aWYoVWEocikpe2xldHt0YWdSdW5TYW1wbGVkSW5mbzpvLC4uLnN9PW5bcl0sYT17fTtmb3IobGV0IGwgaW4gbylvLmhhc093blByb3BlcnR5KGwpJiYoYVtsXT1wVihvW2xdLHQpKTtlW3JdPXsuLi5zLHRhZ1J1blNhbXBsZWRJbmZvOmF9fWVsc2V7bGV0e3J1blRhZ0luZm86bywuLi5zfT1uW3JdO2Vbcl09ey4uLnMscnVuVGFnSW5mbzpwVihvLHQpfX19cmV0dXJuIGV9KGEsbykpKSkscj10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssb10pPT5vKSk7cmV0dXJuIHhvKGkpLnBpcGUoR3QociksQigoW28sc10pPT57bGV0IGE9ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIG9mIE9iamVjdC52YWx1ZXMoV24pKWlmKFVhKGkpKXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319O2xldHt0YWdEZXNjcmlwdGlvbnM6cix0YWdSdW5TYW1wbGVkSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfTtsZXQgcz10W2ldLnRhZ1J1blNhbXBsZWRJbmZvO2ZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvKSl7c1thXT1zW2FdfHx7fTtmb3IobGV0IGwgb2YgT2JqZWN0LmtleXMob1thXSkpc1thXVtsXT1vW2FdW2xdfX1lbHNle3RbaV09dFtpXXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSxydW5UYWdJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIscnVuVGFnSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfSx0W2ldLnJ1blRhZ0luZm89ey4uLnRbaV0ucnVuVGFnSW5mbywuLi5vfX1yZXR1cm4gdH0obyk7cmV0dXJuIHN8fChhW1duLklNQUdFU109e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX0pLGF9KSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe2xldCBpPWUubWFwKHI9PntpZih6YShyLnBsdWdpbikpe2xldHtydW5JZDpsLC4uLmN9PXIse3J1bjp1LGV4cGVyaW1lbnRJZDpkfT1CSyhsKSxwPXsuLi5jLHJ1bjp1fTtyZXR1cm4gdGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChwLGQpLnBpcGUoQigoe3Jlc3BvbnNlOmgsZXhwZXJpbWVudElkOmZ9KT0+VksoaCxmKSkpfWxldHtleHBlcmltZW50SWRzOm8sLi4uc309cjtyZXR1cm4geG8oby5tYXAobD0+dGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChzLGwpKSkucGlwZShCKGw9PntsZXR7cnVuVG9TZXJpZXM6YyxlcnJvcjp1LC4uLmR9PWxbMF0ucmVzcG9uc2UscD1kO2ZvcihsZXR7cmVzcG9uc2U6aCxleHBlcmltZW50SWQ6Zn1vZiBsKXtsZXQgbT1WSyhoLGYpO2lmKHAuZXJyb3IpY29udGludWU7bGV0e3J1blRvU2VyaWVzOkMsZXJyb3I6X309bTtpZihfKXAuZXJyb3I9XyxwLnJ1blRvU2VyaWVzPXZvaWQgMDtlbHNle3AucnVuVG9TZXJpZXM9cC5ydW5Ub1Nlcmllc3x8e307Zm9yKGxldCB5IG9mIE9iamVjdC5rZXlzKEMpKXAucnVuVG9TZXJpZXNbeV09Q1t5XX19cmV0dXJuIHB9KSl9KTtyZXR1cm4geG8oaSl9ZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QoZSxpKXtsZXQgcj1uZXcgRm9ybURhdGE7cmV0dXJuIHIuYXBwZW5kKCJyZXF1ZXN0cyIsSlNPTi5zdHJpbmdpZnkoW2VdKSksdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7aX0vJHtkVn0vdGltZVNlcmllc2AscikucGlwZShCKG89Pih7cmVzcG9uc2U6b1swXSxleHBlcmltZW50SWQ6aX0pKSl9aW1hZ2VVcmwoZSl7cmV0dXJuYCR7ZFZ9L2ltYWdlRGF0YT9pbWFnZUlkPSR7ZX1gfWRvd25sb2FkVXJsKGUsaSxyLG8pe2xldCBsLHtydW46cyxleHBlcmltZW50SWQ6YX09Qksocik7aWYoZSE9PVduLlNDQUxBUlMpdGhyb3cgbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQ6IGRvd25sb2FkVXJsIGZvciAke2V9IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtpZihsPSJzY2FsYXJzL3NjYWxhcnMiLCFhKXRocm93IG5ldyBFcnJvcigiZXhwZXJpbWVudElkIGlzIGVtcHR5OyBpdCBpcyByZXF1aXJlZCB0byBmb3JtIGRvd25sb2FkVXJsLiIpO3JldHVybmAvZXhwZXJpbWVudC8ke2F9L2RhdGEvcGx1Z2luL3NjYWxhcnMvc2NhbGFycz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzppLHJ1bjpzLGZvcm1hdDpvfSl9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF8xZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLFVEPSgoKT0+e2NsYXNzIG57Z2V0UGFyYW1zKCl7cmV0dXJuIF8xZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd0M9InRiX2ZlYXR1cmVfZmxhZ19zdG9yYWdlX2tleSIsaFY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXJ5UGFyYW1zPWV9Z2V0RmVhdHVyZXMoZSxpKXtsZXQgcj1lP3RoaXMuZ2V0UGFydGlhbEZlYXR1cmVzRnJvbU1lZGlhUXVlcnkoKTp7fSxvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoZSxbaSxyXSk9PntsZXQgbz1mdW5jdGlvbihuLHQpe2xldCBlPW4ucXVlcnlQYXJhbU92ZXJyaWRlO2lmKCFlfHwhdC5oYXMoZSkpcmV0dXJuIG51bGw7bGV0IGk9dC5nZXQoZSk7cmV0dXJuIG51bGw9PWk/bnVsbDpuLnBhcnNlVmFsdWUoaSl9KHIsdCk7cmV0dXJuIG51bGwhPT1vJiYoZVtpXT1vKSxlfSx7fSl9KGksdGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSk7cmV0dXJuey4uLnIsLi4uT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpKS5maWx0ZXIoKFthXSk9PmlbYV0pKSwuLi5vfX1wZXJzaXN0RmVhdHVyZUZsYWdzKGUpe2xldCByPXsuLi50aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSwuLi5lfTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0od0MsSlNPTi5zdHJpbmdpZnkocikpfXJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoZSl7bGV0IGk9dGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCk7aWYobnVsbCE9aVtlXSl7aWYoZGVsZXRlIGlbZV0sMD09PU9iamVjdC5rZXlzKGkpLmxlbmd0aClyZXR1cm4gdm9pZCB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0od0MpO3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh3QyxKU09OLnN0cmluZ2lmeShpKSl9fXJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl7d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHdDKX1nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCl7bGV0IGU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHdDKTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksekQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR0s9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaFYsVUQse3Byb3ZpZGU6ekQsdXNlQ2xhc3M6aFZ9XX0pLG59KSgpLE1DPXdlKCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksakQ9d2UoIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFpmPXdlKCJbRkVBVFVSRSBGTEFHXSBTdG9yZSB0aGUgZmVhdHVyZSBmbGFncyBpbiBwZXJzaXN0ZW50IGxvY2FsU3RvcmFnZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZwPXdlKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdV89d2UoIltGRUFUVVJFIEZMQUddIFJlc2V0IGFsbCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIiksV0s9d2UoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLHFLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy50ZkZlYXR1cmVGbGFncz17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWZlYXR1cmUtZmxhZ3MiKS50Zl9mZWF0dXJlX2ZsYWdzfSx0aGlzLmdldEZlYXR1cmVGbGFncyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShXSyksc3IodGhpcy5zdG9yZS5zZWxlY3QobkspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSksQigoWyxvLHNdKT0+e2xldCBhPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhvLHMpO3JldHVybiBNQyh7ZmVhdHVyZXM6YX0pfSkpKSx0aGlzLnVwZGF0ZVBvbHltZXJGZWF0dXJlRmxhZ3MkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoTUMpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KEJvKSx0aGlzLnN0b3JlLnNlbGVjdChuXykpLE50KChbLG8sc10pPT57dGhpcy50ZkZlYXR1cmVGbGFncy5yZWYuc2V0RmVhdHVyZUZsYWdzKG8scyl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5zdG9yZUZlYXR1cmVGbGFnJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKFpmKSxOdCgoe2ZsYWdzOm99KT0+e3RoaXMuZGF0YVNvdXJjZS5wZXJzaXN0RmVhdHVyZUZsYWdzKG8pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShGcCksTnQoKHtmbGFnczpvfSk9PntvLmZvckVhY2gocz0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKHMpfSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEFsbEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKHVfKSxOdCgoKT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpfSkpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIFdLKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoekQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRSz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX1pbnRlcmNlcHQoZSxpKXtyZXR1cm4gdGhpcy5zdG9yZS5waXBlKGZuKG5fKSxmdW5jdGlvbihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGk9PmkucGlwZShuP0hlKChyLG8pPT5uKHIsbyxpKSk6TXMsSHQoMSksZT9kaih0KTpoaigoKT0+bmV3IF9nKSl9KCksdmkocj0+KGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KCJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiLEpTT04uc3RyaW5naWZ5KHIpKX0pLGkuaGFuZGxlKGUpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBlKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gZ2Qobil7cmV0dXJuImZhbHNlIiE9PW59dmFyIGZWPXtzY2FsYXJzQmF0Y2hTaXplOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2NhbGFyc0JhdGNoU2l6ZSIscGFyc2VWYWx1ZTpwYXJzZUludH0sZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnM6e2RlZmF1bHRWYWx1ZTpbXSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImV4cGVyaW1lbnRhbFBsdWdpbiIscGFyc2VWYWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4gbj9uLnNwbGl0KCIsIik6W119fSxlbmFibGVkTGlua2VkVGltZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlTGlua2VkVGltZSIscGFyc2VWYWx1ZTpnZH0sZW5hYmxlZFNjYWxhckRhdGFUYWJsZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlRGF0YVRhYmxlIixwYXJzZVZhbHVlOmdkfSxmb3JjZVN2Zzp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZm9yY2VTVkciLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6e2RlZmF1bHRWYWx1ZTpudWxsLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxkZWZhdWx0RW5hYmxlRGFya01vZGU6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImRhcmtNb2RlIixwYXJzZVZhbHVlOmdkfSxpc0F1dG9EYXJrTW9kZUFsbG93ZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0saW5Db2xhYjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToidGVuc29yYm9hcmRDb2xhYiIscGFyc2VWYWx1ZTpnZH0sbWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0sc2hvd0ZsYWdzOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2hvd0ZsYWdzIixwYXJzZVZhbHVlOm49Pm59LGFsbG93UmFuZ2VTZWxlY3Rpb246e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6ImFsbG93UmFuZ2VTZWxlY3Rpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZWRQcm9zcGVjdGl2ZUZvYjp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlUHJvc3BlY3RpdmVGb2IiLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb246e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXM6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXMiLHBhcnNlVmFsdWU6Z2R9fSxtVj17aXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITEsZGVmYXVsdEZsYWdzOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKHQsW2UsaV0pPT4odFtlXT1pLmRlZmF1bHRWYWx1ZSx0KSx7fSl9KGZWKSxtZXRhZGF0YTpmVixmbGFnT3ZlcnJpZGVzOnt9fSxnVj1uZXcgc2UoIltGZWF0dXJlIEZsYWddIFN0b3JlIENvbmZpZyIpO2Z1bmN0aW9uIFpLKCl7cmV0dXJue2luaXRpYWxTdGF0ZTptVn19dmFyIE0xZT13cihtVixTZShNQywobix7ZmVhdHVyZXM6dH0pPT4oey4uLm4saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITAsZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnR9fSkpLFNlKGpELChuLHtlbmFibGVEYXJrTW9kZTp0fSk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTp0fX0pKSxTZShaZiwobix0KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50LmZsYWdzfX0pKSxTZShGcCwobix0KT0+e2lmKCF0fHwhdC5mbGFnc3x8IXQuZmxhZ3MubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLmZsYWdPdmVycmlkZXN9O3JldHVybiB0LmZsYWdzLmZvckVhY2goaT0+e2RlbGV0ZSBlW2ldfSksey4uLm4sZmxhZ092ZXJyaWRlczplfX0pLFNlKHVfLG49Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnt9fSkpLFNlKGZjLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57aWYoIXQudGhlbWVPdmVycmlkZSlyZXR1cm4gbjtsZXQgZTtzd2l0Y2godC50aGVtZU92ZXJyaWRlKXtjYXNlIG9hLkJST1dTRVJfREVGQVVMVDplPW51bGw7YnJlYWs7Y2FzZSBvYS5EQVJLOmU9ITA7YnJlYWs7Y2FzZSBvYS5MSUdIVDplPSExfXJldHVybnsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOmV9fX0pKTtmdW5jdGlvbiBKSyhuLHQpe3JldHVybiBNMWUobix0KX1mdW5jdGlvbiBTMWUoKXtyZXR1cm4gWShzRCxuPT5udWxsPT09bj97dGhlbWVPdmVycmlkZTpvYS5CUk9XU0VSX0RFRkFVTFR9Ont0aGVtZU92ZXJyaWRlOm4/b2EuREFSSzpvYS5MSUdIVH0pfXZhciBkXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpnVix1c2VGYWN0b3J5OlpLfSx7cHJvdmlkZTpyRCx1c2VDbGFzczpRSyxtdWx0aTohMH1dLGltcG9ydHM6W0dLLFJyLmZvckZlYXR1cmUob0QsSkssZ1YpLExvLmZvckZlYXR1cmUoW3FLXSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhTMWUpXX0pLG59KSgpLEdEPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOnl1LHVzZUNsYXNzOlVLfV0saW1wb3J0czpbZF8saV9dfSksbn0pKCksbW89KCgpPT4oZnVuY3Rpb24obil7bi5ERUZBVUxUPSJkZWZhdWx0IixuLkFMUEhBQkVUSUNBTD0iYWxwaGFiZXRpY2FsIixuLkFTQ0VORElORz0iYXNjZW5kaW5nIixuLkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLG4uTkVBUkVTVD0ibmVhcmVzdCIsbi5ORUFSRVNUX1k9Im5lYXJlc3RfWSJ9KG1vfHwobW89e30pKSxtbykpKCksV0Q9Im1ldHJpY3MiLHNhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uT1ZFUlJJREVfQVNfRU5BQkxFRD0xXT0iT1ZFUlJJREVfQVNfRU5BQkxFRCIsbltuLk9WRVJSSURFX0FTX0RJU0FCTEVEPTJdPSJPVkVSUklERV9BU19ESVNBQkxFRCJ9KHNhfHwoc2E9e30pKSxzYSkpKCkscUQ9e2NhcmRNaW5XaWR0aDpudWxsLHRvb2x0aXBTb3J0Om1vLkFMUEhBQkVUSUNBTCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6WWkuU1RFUCxoaWRlRW1wdHlDYXJkczohMCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOk9yLk9GRlNFVH07ZnVuY3Rpb24gX2Qobix0LGUsaSl7cmV0dXJuIG5bdF0uaGFzT3duUHJvcGVydHkoZSk/VWEodCk/blt0XVtlXS5oYXNPd25Qcm9wZXJ0eShpKT9uW3RdW2VdW2ldOm51bGw6blt0XVtlXTpudWxsfWZ1bmN0aW9uIFlEKG4sdCxlLGkpe2lmKFVhKHQpKXtsZXQgcz17Li4ublt0XX0sYT1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5oYXNPd25Qcm9wZXJ0eSh0KT97Li4ublt0XX06e30sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn0ocyxlLGkpO3JldHVybiBzW2VdPWEsc31sZXQgcj17Li4ublt0XX0sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn1mdW5jdGlvbiBfVihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9ZnVuY3Rpb24gWEQobix0LGUpe2xldCBpPXsuLi5lfTtmb3IobGV0IHIgb2YgdClpW3JdPW47cmV0dXJuIGl9ZnVuY3Rpb24gcF8obix0LGUsaSl7aWYoVWEodCkpe2xldCBvPW5bdF0udGFnUnVuU2FtcGxlZEluZm87cmV0dXJuIG8uaGFzT3duUHJvcGVydHkoZSk/T2JqZWN0LmtleXMob1tlXSkuZmlsdGVyKGE9Pmk8b1tlXVthXS5tYXhTYW1wbGVzUGVyU3RlcCk6W119bGV0IHI9blt0XS50YWdUb1J1bnM7cmV0dXJuIHIuaGFzT3duUHJvcGVydHkoZSk/cltlXTpbXX1mdW5jdGlvbiBBMWUobix0KXtyZXR1cm4gbi5wbHVnaW49PT10LnBsdWdpbiYmbi50YWc9PT10LnRhZyYmbi5zYW1wbGU9PT10LnNhbXBsZSYmKG4ucnVuSWQ9PT10LnJ1bklkfHwhbi5ydW5JZCYmIXQucnVuSWQpfWZ1bmN0aW9uIHZWKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9bmV3IFNldChuKSxjPVtdO2ZvcihsZXQgZCBvZiBuKWZvcihsZXQgcCBvZiB0KWlmKEExZShlW3BdLGQpKXtjLnB1c2gocCksbC5kZWxldGUoZCk7YnJlYWt9aWYoIWMubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkU3RhdGVNYXA6YX07bGV0IHU9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZSxjYXJkU3RhdGVNYXA6YX07Zm9yKGxldCBkIG9mIGMpdT15VihkLHUuY2FyZFRvUGlubmVkQ29weSx1LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSx1LnBpbm5lZENhcmRUb09yaWdpbmFsLHUuY2FyZFN0ZXBJbmRleCx1LmNhcmRNZXRhZGF0YU1hcCxhKTtyZXR1cm57Li4udSx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbLi4ubF19fWZ1bmN0aW9uIHlWKG4sdCxlLGkscixvLHMpe2lmKHQuaGFzKG4pKXJldHVybntjYXJkVG9QaW5uZWRDb3B5OnQsY2FyZFRvUGlubmVkQ29weUNhY2hlOmUscGlubmVkQ2FyZFRvT3JpZ2luYWw6aSxjYXJkU3RlcEluZGV4OnIsY2FyZE1ldGFkYXRhTWFwOm8sY2FyZFN0YXRlTWFwOnN9O2xldCBhPW5ldyBNYXAodCksbD1uZXcgTWFwKGUpLGM9bmV3IE1hcChpKSx1PXsuLi5yfSxkPXsuLi5vfSxwPXsuLi5zfSxoPWZ1bmN0aW9uKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7YmFzZUNhcmRJZDpufSl9KG4pO2Euc2V0KG4saCksbC5zZXQobixoKSxjLnNldChoLG4pLHIuaGFzT3duUHJvcGVydHkobikmJih1W2hdPXJbbl0pO2xldCBmPW9bbl07aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIGRbaF09ZixwW25dJiYocFtoXT1wW25dKSx7Y2FyZFRvUGlubmVkQ29weTphLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpsLHBpbm5lZENhcmRUb09yaWdpbmFsOmMsY2FyZFN0ZXBJbmRleDp1LGNhcmRNZXRhZGF0YU1hcDpkLGNhcmRTdGF0ZU1hcDpwfX1mdW5jdGlvbiBRRChuKXtyZXR1cm4gbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK24udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPDEwfWZ1bmN0aW9uIGJWKG4sdCxlLGkpe2xldCByPXsuLi5ufTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChvPT57aWYoIW8uaW5jbHVkZXMoJyJwbHVnaW4iOiJpbWFnZXMiJykpcmV0dXJuO2xldCBzPXhWKG8sdCxlKSxhPW51bGw7aWYobnVsbD09PWkuZW5kKWE9ZnVuY3Rpb24obix0KXtsZXQgZT10LmluZGV4T2Yobik7aWYoLTEhPT1lKXJldHVybntpbmRleDplLGlzQ2xvc2VzdDohMX07Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dFtpXSxvPXRbaSsxXSxzPS4xKihvLXIpO2lmKG48cilyZXR1cm4gbnVsbDtpZighKG4+bykpe2lmKG4tcjw9cylyZXR1cm57aW5kZXg6aSxpc0Nsb3Nlc3Q6ITB9O2lmKG8tbjw9cylyZXR1cm57aW5kZXg6aSsxLGlzQ2xvc2VzdDohMH19fXJldHVybiBudWxsfShpLnN0YXJ0LnN0ZXAscyk7ZWxzZXtsZXQgYz1zW25bb10uaW5kZXhdLHU9ZnVuY3Rpb24obix0KXtpZighbilyZXR1cm5bXTtpZihudWxsPT09bi5lbmQpcmV0dXJuLTEhPT10LmluZGV4T2Yobi5zdGFydC5zdGVwKT9bbi5zdGFydC5zdGVwXTpbXTtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdClpPj1uLnN0YXJ0LnN0ZXAmJmk8PW4uZW5kLnN0ZXAmJmUucHVzaChpKTtyZXR1cm4gZX0oaSxzKTthPWZ1bmN0aW9uKG4sdCxlKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGk9blswXSxyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU+cj97aW5kZXg6dC5pbmRleE9mKHIpLGlzQ2xvc2VzdDohMX06ZTxpP3tpbmRleDp0LmluZGV4T2YoaSksaXNDbG9zZXN0OiExfTpudWxsfSh1LHMsYyl9bnVsbCE9PWEmJihyW29dPWEpfSkscn1mdW5jdGlvbiB4VihuLHQsZSl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuW107bGV0e3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvLHJ1bklkOnN9PXRbbl07aWYobnVsbD09PXMpcmV0dXJuW107bGV0IGE9X2QoZSxpLHIsbyk7cmV0dXJuIG51bGwhPT1hJiZhLnJ1blRvU2VyaWVzLmhhc093blByb3BlcnR5KHMpP2EucnVuVG9TZXJpZXNbc10ubWFwKGw9Pmwuc3RlcCk6W119ZnVuY3Rpb24gQ1Yobil7bGV0e2RhdGFNaW5NYXg6dCx1c2VyVmlld0JveDplfT1uLGk9ZT8ueDtpZighaSlyZXR1cm4gdDtsZXQgcj1pWzBdPGlbMV0/aVswXTppWzFdLG89cj09PWlbMF0/aVsxXTppWzBdO3JldHVybnttaW5TdGVwOk1hdGguY2VpbChyKSxtYXhTdGVwOk1hdGguZmxvb3Iobyl9fWZ1bmN0aW9uIEtEKG4sdCl7c3dpdGNoKG4pe2Nhc2Ugc2EuT1ZFUlJJREVfQVNfRU5BQkxFRDpyZXR1cm4hMDtjYXNlIHNhLk9WRVJSSURFX0FTX0RJU0FCTEVEOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuIHR9fXZhciBYaT1QcihXRCksU0M9WShYaSxuPT5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlKSxyWj1ZKFhpLG49Pm4udGFnTWV0YWRhdGEpLEYxZT1ZKFhpLG49Pm4uY2FyZExpc3QpLE5wPVkoWGksKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0e3BsdWdpbjplLHRhZzppLHJ1bklkOnIsc2FtcGxlOm99PW4uY2FyZE1ldGFkYXRhTWFwW3RdLHM9X2Qobi50aW1lU2VyaWVzRGF0YSxlLGksbyk7aWYoIXMpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0IGE9cy5ydW5Ub0xvYWRTdGF0ZTtpZihyKXJldHVybiBhLmhhc093blByb3BlcnR5KHIpP2Fbcl06RWUuTk9UX0xPQURFRDtsZXQgbD1wXyhuLnRhZ01ldGFkYXRhLGUsaSxvKTtpZighbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCBhIGNhcmQgd2hvc2UgdGFnIGhhcyBubyBydW5zIik7cmV0dXJuIGwuZXZlcnkoYz0+YVtjXT09PUVlLkxPQURFRCk/RWUuTE9BREVEOmwuc29tZShjPT5hW2NdPT09RWUuTE9BRElORyk/RWUuTE9BRElORzpFZS5OT1RfTE9BREVEfSksTHA9WShYaSwobix0KT0+e2lmKCFuLmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gbnVsbDtsZXR7cGx1Z2luOmUsdGFnOmksc2FtcGxlOnJ9PW4uY2FyZE1ldGFkYXRhTWFwW3RdLG89X2Qobi50aW1lU2VyaWVzRGF0YSxlLGkscik7cmV0dXJuIG8/by5ydW5Ub1NlcmllczpudWxsfSksd1Y9WShYaSxuPT5uLmNhcmRNZXRhZGF0YU1hcCksU2w9WSh3Viwobix0KT0+bi5oYXNPd25Qcm9wZXJ0eSh0KT9uW3RdOm51bGwpLG1jPVkoWGksbj0+bi5jYXJkU3RhdGVNYXApLE4xZT1ZKFhpLG49Pm4udmlzaWJsZUNhcmRNYXApLG9aPVkoTjFlLG49Pm5ldyBTZXQobi52YWx1ZXMoKSkpLFpEPVkoRjFlLHdWLChuLHQpPT5uLmZpbHRlcihlPT50Lmhhc093blByb3BlcnR5KGUpKS5tYXAoZT0+KHtjYXJkSWQ6ZSwuLi50W2VdfSkpKSxNVj1ZKFhpLChuLHQpPT5uLmNhcmRTdGVwSW5kZXguaGFzT3duUHJvcGVydHkodCk/bi5jYXJkU3RlcEluZGV4W3RdOm51bGwpLHNaPVkoWGksKG4sdCk9PnhWKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLGFaPVkoWGksbj0+bi5jYXJkVG9QaW5uZWRDb3B5KSxMMWU9WShYaSxuPT5uLnBpbm5lZENhcmRUb09yaWdpbmFsKSxFQz1ZKGFaLHdWLChuLHQpPT5bLi4ubi52YWx1ZXMoKV0uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLEJwPVkoYVosTDFlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSksbFo9WShYaSxuPT5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzKSxjWj1ZKFhpLG49PlFEKG4pKSxnYz1ZKFhpLG49Pih7Li4ubi5zZXR0aW5ncywuLi5uLnNldHRpbmdPdmVycmlkZXN9KSksdVo9WShYaSxuPT5uLnNldHRpbmdPdmVycmlkZXMpLGhfPVkoZ2Msbj0+bi5jYXJkTWluV2lkdGgpLGZfPVkoZ2Msbj0+bi50b29sdGlwU29ydCksbV89WShnYyxuPT5uLmlnbm9yZU91dGxpZXJzKSxidT1ZKGdjLG49Pm4ueEF4aXNUeXBlKSxKRD1ZKGdjLG49Pm4uaGlzdG9ncmFtTW9kZSksZFo9WShnYyxuPT5uLmhpZGVFbXB0eUNhcmRzKSx2ZD1ZKGdjLG49Pm4uc2NhbGFyU21vb3RoaW5nKSwkRD1ZKGdjLG49Pm4uc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCksZUE9WShnYyxuPT5uLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpLHRBPVkoZ2Msbj0+bi5pbWFnZUNvbnRyYXN0SW5NaWxsaSksbkE9WShnYyxuPT5uLmltYWdlU2hvd0FjdHVhbFNpemUpLF9jPVkoWGksbj0+bi50YWdGaWx0ZXIpLGlBPVkoWGksKG4sdCk9PkJvb2xlYW4obi50YWdHcm91cEV4cGFuZGVkLmdldCh0KSkpLFZwPVkoWGksbj0+bi5saW5rZWRUaW1lRW5hYmxlZCksVEM9WShYaSxuPT5uLnN0ZXBTZWxlY3RvckVuYWJsZWQpLEhwPVkoWGksbj0+bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLFNWPVkoWGksbj0+e2xldHttaW46dCxtYXg6ZX09bi5zdGVwTWluTWF4O3JldHVybnttaW46dD09PTEvMD8wOnQsbWF4OmU9PT0tMS8wPzFlMzplfX0pLGdfPVkoWGksbj0+bi5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxfXz1ZKFhpLG49Pm4ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxFVj1ZKFhpLFNWLChuLHQpPT5uLmxpbmtlZFRpbWVTZWxlY3Rpb24/bi5saW5rZWRUaW1lU2VsZWN0aW9uOntzdGFydDp7c3RlcDp0Lm1pbn0sZW5kOm51bGx9KSxVcD1ZKFhpLEVWLChuLHQpPT5uLmxpbmtlZFRpbWVFbmFibGVkP3Q6bnVsbCkseHU9WShYaSxuPT5uLmZpbHRlcmVkUGx1Z2luVHlwZXMpLHJBPVkoWGksbj0+bi5pc1NldHRpbmdzUGFuZU9wZW4pLG9BPVkoWGksbj0+bi5pc1NsaWRlb3V0TWVudU9wZW4pLHBaPVkoWGksbj0+bi50YWJsZUVkaXRvclNlbGVjdGVkVGFiKSxoWj1ZKEhwLFZwLG1jLChuLHQsZSxpKT0+dD9uOktEKGVbaV0/LnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsbikpLGZaPVkobWMsKG4sdCk9PntpZihuW3RdKXJldHVybiBDVihuW3RdKX0pLG1aPVkobWMsKG4sdCk9Pm5bdF0/LmRhdGFNaW5NYXgpLGdaPVkobWMsVEMsSHAsVnAsVXAsKG4sdCxlLGkscixvKT0+e2xldCBzPW5bb107aWYoIXMpcmV0dXJuO2xldCBhPUNWKHMpO2lmKCFhKXJldHVybjtpZihpJiZyKXJldHVybiBjVihyLGEsZSk7aWYoIUtEKHMuc3RlcFNlbGVjdGlvbk92ZXJyaWRlLHQpKXJldHVybjtsZXQgbD1LRChzLnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsZSk7cmV0dXJuIGNWKHtzdGFydDp7c3RlcDpzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA/P2EubWluU3RlcH0sZW5kOntzdGVwOnMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwPz9hLm1heFN0ZXB9fSxhLGwpfSksdlo9UHIoIm5vdGlmaWNhdGlvbiIpLEN1PShZKHZaLG49Pm4ubm90aWZpY2F0aW9ucyksWSh2WixuPT5uLmxhc3RSZWFkVGltZXN0YW1wSW5Ncz8/LTEpLCgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UX05BTUU9MF09IkVYUEVSSU1FTlRfTkFNRSIsbltuLkhQQVJBTT0xXT0iSFBBUkFNIixuW24uTUVUUklDPTJdPSJNRVRSSUMiLG5bbi5SVU5fTkFNRT0zXT0iUlVOX05BTUUifShDdXx8KEN1PXt9KSksQ3UpKSgpKSxlcj0oKCk9PihmdW5jdGlvbihuKXtuW24uUlVOPTBdPSJSVU4iLG5bbi5FWFBFUklNRU5UPTFdPSJFWFBFUklNRU5UIixuW24uUkVHRVg9Ml09IlJFR0VYIn0oZXJ8fChlcj17fSkpLGVyKSkoKTtmdW5jdGlvbiBBQyhuLHQsZSl7bGV0IGk9e30scj1bXSxvPXttYXRjaGVzOmksbm9uTWF0Y2hlczpyfTtzd2l0Y2gobi5rZXkpe2Nhc2UgZXIuUlVOOmZvcihsZXQgYSBvZiB0KWlbYS5pZF09W2FdO2JyZWFrO2Nhc2UgZXIuRVhQRVJJTUVOVDpmb3IobGV0IGEgb2YgdCl7bGV0IGw9ZVthLmlkXSxjPWlbbF18fFtdO2MucHVzaChhKSxpW2xdPWN9YnJlYWs7Y2FzZSBlci5SRUdFWDppZighbi5yZWdleFN0cmluZylicmVhaztsZXQgczt0cnl7cz1uZXcgUmVnRXhwKG4ucmVnZXhTdHJpbmcpfWNhdGNoe2JyZWFrfWZvcihsZXQgYSBvZiB0KXtsZXQgbD1hLm5hbWUubWF0Y2gocyk7aWYobCl7bGV0IHU9bC5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShsLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIixkPWlbdV18fFtdO2QucHVzaChhKSxpW3VdPWR9ZWxzZSByLnB1c2goYSl9fXJldHVybiBvfWZ1bmN0aW9uIGFBKG4sdCl7cmV0dXJuIG49PT1lci5SRUdFWD97a2V5Om4scmVnZXhTdHJpbmc6dD8/IiJ9OntrZXk6bn19dmFyIHlaPVByKCJydW5zIiksamE9WSh5WixuPT5uLmRhdGEpLGJaPVkoamEsbj0+bi5ydW5JZFRvRXhwSWQpLGxBPVkoamEsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSxjQT1ZKGphLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSx3dT1ZKGphLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSkseFo9WShqYSwobix0KT0+bi5ydW5JZHNbdC5leHBlcmltZW50SWRdPz9bXSksQ1o9WShqYSxuPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKG4ucnVuTWV0YWRhdGEpKSksSUM9WShqYSwobix0KT0+bi5ydW5zTG9hZFN0YXRlW3QuZXhwZXJpbWVudElkXXx8e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOkVlLk5PVF9MT0FERUR9KSxUVj1ZKGphLG49Pm51bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5P2FBKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpLHdaPVkoVFYsamEsKG4sdCk9Pm4/P3QuaW5pdGlhbEdyb3VwQnkpLEpmPVkoamEsbj0+bi5yZWdleEZpbHRlciksRFY9WSh5WixuPT5uLnVpKSxBVj1ZKERWLG49Pm4ucGFnaW5hdGlvbk9wdGlvbiksSVY9WShEVixuPT5uLnNvcnQpLE1aPVkoRFYsbj0+bi5zZWxlY3Rpb25TdGF0ZSksU1o9WShqYSxuPT5uLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KSxFWj1ZKGphLG49Pm4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSx1QT1ZKGphLG49Pm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSxkQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSxwQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGhBPXdlKCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhYT17fTtTTyhhYSx7Z2V0Q29sb3JQYWxldHRlOigpPT5CMWUsZ2V0UGFnZVNpemU6KCk9PiRmLGdldFJlbG9hZEVuYWJsZWQ6KCk9PlJDLGdldFJlbG9hZFBlcmlvZEluTXM6KCk9Pk9DLGdldFNldHRpbmdzTG9hZFN0YXRlOigpPT5QVn0pO3ZhciBmQT0ic2V0dGluZ3MiLEFaPXtzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LFBDPVByKGZBKSxQVj1ZKFBDLG49Pm4uc3RhdGUpLFJDPVkoUEMsbj0+bi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkKSxPQz1ZKFBDLG49Pm4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcyksJGY9WShQQyxuPT5uLnNldHRpbmdzLnBhZ2VTaXplKSxCMWU9WShQQyxuPT5uLnNldHRpbmdzLmNvbG9yUGFsZXR0ZSk7ZnVuY3Rpb24gbUEobix0LGUpe2lmKCF0KXJldHVybiEwO2xldCBpO3RyeXtpPW5ldyBSZWdFeHAodCwiaSIpfWNhdGNoe3JldHVybiExfWxldCByPVtuLnJ1bk5hbWVdO3JldHVybiBlJiZyLnB1c2gobi5leHBlcmltZW50QWxpYXMuYWxpYXNUZXh0LGAke24uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dH0vJHtuLnJ1bk5hbWV9YCksci5zb21lKG89PmkudGVzdChvKSl9dmFyIFYxZT1ZKCRvLE1aLGJaLChuLHQsZSk9PntpZighbilyZXR1cm4gbmV3IE1hcDtsZXQgaT1uZXcgTWFwO2ZvcihsZXRbcixvXW9mIHQuZW50cmllcygpKXtsZXQgcz1lW3JdO3MmJm4uaW5kZXhPZihzKT49MCYmaS5zZXQocixvKX1yZXR1cm4gaX0pLGVtPVkoJG8sVjFlLEpmLG49PntsZXQgdD0kbyhuKT8/W10sZT1odShuKSxpPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBvPXd1KG4se2V4cGVyaW1lbnRJZDpyfSk7Zm9yKGxldCBzIG9mIG8paS5zZXQocy5pZCx7cnVuTmFtZTpzLm5hbWUsZXhwZXJpbWVudEFsaWFzOmVbcl19KX1yZXR1cm4gaX0scHUsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09ZmkuQ09NUEFSRV9FWFBFUklNRU5ULHM9bmV3IE1hcDtmb3IobGV0W2EsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQoYSk7cy5zZXQoYSxtQShjLGUsbykmJmwpfXJldHVybiBzfSksdl89WShhYS5nZXRDb2xvclBhbGV0dGUsRVosU1osbXUsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxzKT0+e2xldCBhPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMocykpYT1lLmdldChzKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTthPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9cltzXT1hfSkscn0pLElaPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoQUQpLF9uKCh7ZXhwZXJpbWVudElkczpvfSk9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YT09PUVlLkZBSUxFRHx8YT09PUVlLk5PVF9MT0FERUQpLnBpcGUoSGUoYT0+ISFhLmxlbmd0aCksX24oYT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8sYSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG9dKT0+ISFvKSxCKChbLG9dKT0+byksX24obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zPT09RWUuRkFJTEVEfHxzPT09RWUuTk9UX0xPQURFRCkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShIYSx3bCksR3QodGhpcy5zdG9yZS5zZWxlY3QoJG8pKSxIZSgoWyxvXSk9PiEhbyksQigoWyxvXSk9Pm8pLF9uKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8scz0+cyE9PUVlLkxPQURJTkcpLnBpcGUoQihzPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6c30pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPVVyKCgpPT51bih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKF9uKCh7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLHMpKSkse2Rpc3BhdGNoOiExfSl9Z2V0UnVuc0xpc3RMb2FkU3RhdGUoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KElDLHtleHBlcmltZW50SWQ6ZX0pLnBpcGUoSHQoMSkpfWdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZShlLGkpe3JldHVybiB4byhlLm1hcChyPT50aGlzLmdldFJ1bnNMaXN0TG9hZFN0YXRlKHIpKSkucGlwZShCKHI9PmUuZmlsdGVyKChvLHMpPT5pKHJbc10uc3RhdGUpKSkpfWZldGNoQWxsUnVuc0xpc3QoZSxpKXtyZXR1cm4ganQoe2V4cGVyaW1lbnRJZHM6ZSxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6aX0pLnBpcGUoTnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENEKHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpfSksX24oKCk9PntsZXQgcj1uZXcgU2V0KGkpO3JldHVybiB4byhlLm1hcChzPT5yLmhhcyhzKT90aGlzLmZldGNoUnVuc0ZvckV4cGVyaW1lbnQocyk6dGhpcy5tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhzKSkpfSksQihyPT57bGV0IG89e30scz1bXTtmb3IobGV0IGEgb2YgcilzLnB1c2goLi4uYS5ydW5zKSxhLmZyb21SZW1vdGUmJihvW2EuZXhwZXJpbWVudElkXT17cnVuczphLnJ1bnMsbWV0YWRhdGE6YS5tZXRhZGF0YX0pO3JldHVybntuZXdSdW5zQW5kTWV0YWRhdGE6byxydW5zRm9yQWxsRXhwZXJpbWVudHM6c319KSxOdCgoe25ld1J1bnNBbmRNZXRhZGF0YTpyLHJ1bnNGb3JBbGxFeHBlcmltZW50czpvfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE9wKHtleHBlcmltZW50SWRzOmUsbmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KSl9KSxDbyhyPT4odGhpcy5zdG9yZS5kaXNwYXRjaChhXyh7ZXhwZXJpbWVudElkczplLHJlcXVlc3RlZEV4cGVyaW1lbnRJZHM6aX0pKSxqdChudWxsKSkpLEIoKCk9Pm51bGwpKX1tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoSUMse2V4cGVyaW1lbnRJZDplfSkucGlwZShIZShpPT5pLnN0YXRlIT09RWUuTE9BRElORyksSHQoMSksX24oaT0+aS5zdGF0ZT09PUVlLkZBSUxFRD9HbChuZXcgRXJyb3IoIlBlbmRpbmcgcmVxdWVzdCBmYWlsZWQiKSk6anQoaSkpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KHd1LHtleHBlcmltZW50SWQ6ZX0pKSxCKChbLGldKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDplLHJ1bnM6aX0pKSl9ZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChlKXtyZXR1cm4geG8oW3RoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hSdW5zKGUpLHRoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hIcGFyYW1zTWV0YWRhdGEoZSldKS5waXBlKEIoKFtpLHJdKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDplLHJ1bnM6aSxtZXRhZGF0YTpyfSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihJRCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEVsPSgoKT0+KGZ1bmN0aW9uKG4pe24uQVNDPSJhc2MiLG4uREVTQz0iZGVzYyIsbi5VTlNFVD0iIn0oRWx8fChFbD17fSkpLEVsKSkoKSx7aW5pdGlhbFN0YXRlOkgxZSxyZWR1Y2VyczpVMWV9PVlmKHtydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTpuZXcgTWFwLGdyb3VwS2V5VG9Db2xvcklkOm5ldyBNYXAsaW5pdGlhbEdyb3VwQnk6e2tleTplci5SVU59LHVzZXJTZXRHcm91cEJ5S2V5Om51bGwsY29sb3JHcm91cFJlZ2V4U3RyaW5nOiIiLHJlZ2V4RmlsdGVyOiIifSx7cnVuSWRzOnt9LHJ1bklkVG9FeHBJZDp7fSxydW5NZXRhZGF0YTp7fSxydW5zTG9hZFN0YXRlOnt9fSwobix0LGUpPT51cyh0LGUpP246ey4uLm4saW5pdGlhbEdyb3VwQnk6e2tleTplLnJvdXRlS2luZD09PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9lci5FWFBFUklNRU5UOmVyLlJVTn19KSx6MWU9d3IoSDFlLFNlKEswLChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVCYmdCE9PWZpLkVYUEVSSU1FTlQpcmV0dXJuIG47bGV0IHI9ZS5ydW5zLmdyb3VwQnksbz1lLnJ1bnMucmVnZXhGaWx0ZXI/PyIiO2lmKCFyJiYhbylyZXR1cm4gbjtsZXR7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOnMsdXNlclNldEdyb3VwQnlLZXk6YX09bjtyZXR1cm4gciYmKHM9ci5rZXk9PT1lci5SRUdFWD9yLnJlZ2V4U3RyaW5nOm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nLGE9ci5rZXk/P251bGwpLHsuLi5uLGNvbG9yR3JvdXBSZWdleFN0cmluZzpzLHJlZ2V4RmlsdGVyOm8sdXNlclNldEdyb3VwQnlLZXk6YX19KSxTZShDRCwobix0KT0+e2xldCBlPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgaSBvZiB0LnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpZVtpXT1lW2ldP3suLi5lW2ldLHN0YXRlOkVlLkxPQURJTkd9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpFZS5MT0FESU5HfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5JZHN9LGk9ey4uLm4ucnVuTWV0YWRhdGF9LHI9ey4uLm4ucnVuSWRUb0V4cElkfSxvPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldHtydW5zOmEsbWV0YWRhdGE6bH09dC5uZXdSdW5zQW5kTWV0YWRhdGFbc107ZVtzXT1hLm1hcCgoe2lkOmN9KT0+Yyksb1tzXT17Li4ub1tzXSxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKSxzdGF0ZTpFZS5MT0FERUR9O2ZvcihsZXQgYyBvZiBhKXtsZXQgdT1sLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbYy5pZF07aVtjLmlkXT17Li4uYyxocGFyYW1zOnU/dS5ocGFyYW1zOm51bGwsbWV0cmljczp1P3UubWV0cmljczpudWxsfSxyW2MuaWRdPXN9fXJldHVybnsuLi5uLHJ1bklkczplLHJ1bklkVG9FeHBJZDpyLHJ1bk1ldGFkYXRhOmkscnVuc0xvYWRTdGF0ZTpvfX0pLFNlKGFfLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6RWUuRkFJTEVEfTp7bGFzdExvYWRlZFRpbWVJbk1zOm51bGwsc3RhdGU6RWUuRkFJTEVEfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4se3J1bnNGb3JBbGxFeHBlcmltZW50czp0fSk9PntsZXQgZT1uZXcgTWFwKG4uZ3JvdXBLZXlUb0NvbG9ySWQpLGk9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscj1uLmluaXRpYWxHcm91cEJ5O251bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5JiYocj1hQShuLnVzZXJTZXRHcm91cEJ5S2V5LG4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSk7bGV0IG89QUMocix0LG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhvLm1hdGNoZXMpLmZvckVhY2goKFtzLGFdKT0+e2xldCBsPWUuZ2V0KHMpPz9lLnNpemU7ZS5zZXQocyxsKTtmb3IobGV0IGMgb2YgYSlpLnNldChjLmlkLGwpfSk7Zm9yKGxldCBzIG9mIG8ubm9uTWF0Y2hlcylpLnNldChzLmlkLC0xKTtyZXR1cm57Li4ubixkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6aSxncm91cEtleVRvQ29sb3JJZDplfX0pLFNlKGxfLChuLHtleHBlcmltZW50SWRzOnQsZ3JvdXBCeTplfSk9PntsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscz1BQyhlLHQuZmxhdE1hcChsPT5uLnJ1bklkc1tsXSkubWFwKGw9Pm4ucnVuTWV0YWRhdGFbbF0pLG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhzLm1hdGNoZXMpLmZvckVhY2goKFtsLGNdKT0+e2xldCB1PWkuZ2V0KGwpPz9pLnNpemU7aS5zZXQobCx1KTtmb3IobGV0IGQgb2YgYylyLnNldChkLmlkLHUpfSk7Zm9yKGxldCBsIG9mIHMubm9uTWF0Y2hlcylyLnNldChsLmlkLC0xKTtsZXQgYT1lLmtleT09PWVyLlJFR0VYP2UucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOmEsdXNlclNldEdyb3VwQnlLZXk6ZS5rZXksZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5OnIsZ3JvdXBLZXlUb0NvbG9ySWQ6aSxydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwfX0pLFNlKERELChuLHtydW5JZDp0LG5ld0NvbG9yOmV9KT0+e2xldCBpPW5ldyBNYXAobi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSk7cmV0dXJuIGkuc2V0KHQsZSksey4uLm4scnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6aX19KSxTZShiQywobix0KT0+KHsuLi5uLHJlZ2V4RmlsdGVyOnQucmVnZXhTdHJpbmd9KSkpLGoxZT1YZih6MWUsVTFlKSxHMWU9e2tleTpudWxsLGRpcmVjdGlvbjpFbC5VTlNFVH0se2luaXRpYWxTdGF0ZTpXMWUscmVkdWNlcnM6cTFlfT1ZZih7cGFnaW5hdGlvbk9wdGlvbjp7cGFnZUluZGV4OjAscGFnZVNpemU6MTB9LHNvcnQ6RzFlLHNlbGVjdGlvblN0YXRlOm5ldyBNYXB9LHt9KSxZMWU9d3IoVzFlLFNlKEVELChuLHtwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfSk9Pih7Li4ubixwYWdpbmF0aW9uT3B0aW9uOntwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfX0pKSxTZShiQywobix0KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246ey4uLm4ucGFnaW5hdGlvbk9wdGlvbixwYWdlSW5kZXg6MH19KSksU2UoVEQsKG4sdCk9Pih7Li4ubixzb3J0OntrZXk6dC5rZXksZGlyZWN0aW9uOnQuZGlyZWN0aW9ufX0pKSxTZShPcCwobix0KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT10LnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IobGV0IHIgb2YgdC5ydW5zRm9yQWxsRXhwZXJpbWVudHMpZS5oYXMoci5pZCl8fGUuc2V0KHIuaWQsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZSh3RCwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKTtyZXR1cm4gZS5zZXQodCwhQm9vbGVhbihlLmdldCh0KSkpLHsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoTUQsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIG4uc2VsZWN0aW9uU3RhdGUua2V5cygpKWUuc2V0KGksdD09PWkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoU0QsKG4se3J1bklkczp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9IXQuZXZlcnkocj0+Qm9vbGVhbihlLmdldChyKSkpO2ZvcihsZXQgciBvZiB0KWUuc2V0KHIsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSksWDFlPVhmKFkxZSxxMWUpO2Z1bmN0aW9uIFBaKG4sdCl7cmV0dXJuIEhmKHtkYXRhOmoxZSx1aTpYMWV9KShuLHQpfWZ1bmN0aW9uIFExZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjphXyxhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgZ0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JyLmZvckZlYXR1cmUoInJ1bnMiLFBaKSxMby5mb3JGZWF0dXJlKFtJWl0pLFBLLHZ1LnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFExZSksT0RdfSksbn0pKCkseWQ9KCgpPT4oZnVuY3Rpb24obil7bi5SVU5TX0NIQU5HRUQ9ImV4cGVyaW1lbnRhbC5SdW5zQ2hhbmdlZCIsbi5HRVRfUlVOUz0iZXhwZXJpbWVudGFsLkdldFJ1bnMiLG4uR0VUX1VSTF9EQVRBPSJleHBlcmltZW50YWwuR2V0VVJMUGx1Z2luRGF0YSIsbi5EQVRBX1JFTE9BREVEPSJleHBlcmltZW50YWwuRGF0YVJlbG9hZGVkIn0oeWR8fCh5ZD17fSkpLHlkKSkoKSxPWj1uZXcgV2Vha01hcCx5Xz1uZXcgU2V0LFJWPW5ldyBNYXAsdkE9bmV3IE1hcDtmdW5jdGlvbiBrWihuLHQpe3JldHVybiBlPT57bGV0IGk9dkEuZ2V0KHQpLHI9T1ouZ2V0KGkpfHxudWxsO3JldHVybiBuKHIsZSl9fXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57aWYoImV4cGVyaW1lbnRhbC5ib290c3RyYXAiIT09bi5kYXRhKXJldHVybjtsZXQgdD1uLnBvcnRzWzBdO2lmKCF0KXJldHVybjtsZXQgZT1uLnNvdXJjZT9uLnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDshZXx8ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3J0PXQsdGhpcy5pZD0wLHRoaXMucmVzcG9uc2VXYWl0cz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGU9PnRoaXMub25NZXNzYWdlKGUpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9YXN5bmMgb25NZXNzYWdlKHQpe2xldCBlPUpTT04ucGFyc2UodC5kYXRhKSxpPWUudHlwZSxyPWUuaWQsbz1lLnBheWxvYWQscz1lLmVycm9yO2lmKGUuaXNSZXBseSl7aWYoIXRoaXMucmVzcG9uc2VXYWl0cy5oYXMocikpcmV0dXJuO2xldHtyZXNvbHZlOmQscmVqZWN0OnB9PXRoaXMucmVzcG9uc2VXYWl0cy5nZXQocik7cmV0dXJuIHRoaXMucmVzcG9uc2VXYWl0cy5kZWxldGUociksdm9pZChzP3AobmV3IEVycm9yKHMpKTpkKG8pKX1sZXQgbD1udWxsLGM9bnVsbDtpZih0aGlzLmxpc3RlbmVycy5oYXMoaSkpe2xldCBkPXRoaXMubGlzdGVuZXJzLmdldChpKTt0cnl7bD1hd2FpdCBkKG8pfWNhdGNoKHApe2M9cH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTppLGlkOnIscGF5bG9hZDpsLGVycm9yOmMsaXNSZXBseTohMH0pfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtsZXQgaT10aGlzLmlkKys7cmV0dXJuIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDppLHBheWxvYWQ6ZSxlcnJvcjpudWxsLGlzUmVwbHk6ITF9KSxuZXcgUHJvbWlzZSgobyxzKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQoaSx7cmVzb2x2ZTpvLHJlamVjdDpzfSl9KX19KG4pO3lfLmFkZChlKSx2QS5zZXQoZSx0KSxuLnN0YXJ0KCk7Zm9yKGxldFtpLHJdb2YgUlYpe2xldCBvPWtaKHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIga1YsYl89KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgeV8pdkEuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoeV8uZGVsZXRlKGkpLHZBLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLnlfXS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7UlYuc2V0KG4sdCk7Zm9yKGxldCBlIG9mIHlfKXtsZXQgaT1rWih0LGUpO2UubGlzdGVuKG4saSl9fShlLGkpfXVubGlzdGVuKGUpeyFmdW5jdGlvbihuKXtSVi5kZWxldGUobik7Zm9yKGxldCB0IG9mIHlfKXQudW5saXN0ZW4obil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx5QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKTt0aGlzLmlwYy5saXN0ZW4oeWQuR0VUX1VSTF9EQVRBLGk9PntpZighaSlyZXR1cm47bGV0IHI9YHAuJHtpLnBsdWdpbk5hbWV9LmAsbz17fSxzPWUudGZfc3RvcmFnZS5nZXRVcmxIYXNoRGljdCgpO2ZvcihsZXQgYSBpbiBzKWEuc3RhcnRzV2l0aChyKSYmKG9bYS5zdWJzdHJpbmcoci5sZW5ndGgpXT1zW2FdKTtyZXR1cm4gb30pLHRoaXMuc3RvcmUuc2VsZWN0KG9fKS5waXBlKEhlKGk9Pm51bGwhPT1pKSxkaSgpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoeWQuREFUQV9SRUxPQURFRCx2b2lkIDApfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKF9uKGk9Pmk/cG4oaS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3Qod3Use2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKEIobz0+by5mbGF0KCkpLGRpKChvLHMpPT5vLmxlbmd0aD09PXMubGVuZ3RoJiZvLmV2ZXJ5KChhLGwpPT5zW2xdLmlkPT09YS5pZCkpLEIobz0+by5tYXAoKHtuYW1lOnN9KT0+cykpKTpqdChbXSkpKTtlLnN1YnNjcmliZShpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHlkLlJVTlNfQ0hBTkdFRCxpKX0pLHRoaXMuaXBjLmxpc3Rlbih5ZC5HRVRfUlVOUywoKT0+ZS5waXBlKEh0KDEpKS50b1Byb21pc2UoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx4QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7aS5pbml0KCksZS5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUoZSxpKXshZnVuY3Rpb24obix0KXtPWi5zZXQobix7cGx1Z2luTmFtZTp0fSl9KGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYkEpLFIoeUEpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltiXyx5QSxiQV0saW1wb3J0czpbJDAsTWwsZ0FdfSksbn0pKCkseF89d2UoIltBbGVydF0gQWxlcnQgUmVwb3J0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuYWxlcnRBY3Rpb25Nb2R1bGU9cix0aGlzLnJlcG9ydFJlZ2lzdGVyZWRBY3Rpb25BbGVydHMkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoTnQobz0+e2xldCBzPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKG8pO3MmJnRoaXMuc3RvcmUuZGlzcGF0Y2goeF8ocykpfSkpLHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHZ1KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksb1RlPXdyKHtsYXRlc3RBbGVydDpudWxsfSxTZSh4Xywobix7bG9jYWxpemVkTWVzc2FnZTp0LGZvbGxvd3VwQWN0aW9uOmV9KT0+e2xldCBpPXtsb2NhbGl6ZWRNZXNzYWdlOnQsY3JlYXRlZDpEYXRlLm5vdygpfTtyZXR1cm4gZSYmKGkuZm9sbG93dXBBY3Rpb249ZSksey4uLm4sbGF0ZXN0QWxlcnQ6aX19KSk7ZnVuY3Rpb24gQloobix0KXtyZXR1cm4gb1RlKG4sdCl9dHJ5e2tWPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7a1Y9ITF9dmFyIENfLEZDLENBLHRtLE9WLHVpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/cFQodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYha1YpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaWQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxWWj1bImNvbG9yIiwiYnV0dG9uIiwiY2hlY2tib3giLCJkYXRlIiwiZGF0ZXRpbWUtbG9jYWwiLCJlbWFpbCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsIm1vbnRoIiwibnVtYmVyIiwicGFzc3dvcmQiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzZWFyY2giLCJzdWJtaXQiLCJ0ZWwiLCJ0ZXh0IiwidGltZSIsInVybCIsIndlZWsiXTtmdW5jdGlvbiBGVigpe2lmKENfKXJldHVybiBDXztpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIENfPW5ldyBTZXQoVlopO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIENfPW5ldyBTZXQoVlouZmlsdGVyKHQ9PihuLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbi50eXBlPT09dCkpKX1mdW5jdGlvbiBOcyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihudWxsPT1GQyYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+RkM9ITB9KSl9ZmluYWxseXtGQz1GQ3x8ITF9cmV0dXJuIEZDfSgpP246ISFuLmNhcHR1cmV9ZnVuY3Rpb24gd0EoKXtpZihudWxsPT10bSl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIHRtPSExO2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpdG09ITA7ZWxzZXtsZXQgbj1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbzt0bT0hIW4mJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChuLnRvU3RyaW5nKCkpfX1yZXR1cm4gdG19ZnVuY3Rpb24gd18oKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIDA7aWYobnVsbD09Q0Epe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9bi5zdHlsZTtuLmRpcj0icnRsIix0LndpZHRoPSIxcHgiLHQub3ZlcmZsb3c9ImF1dG8iLHQudmlzaWJpbGl0eT0iaGlkZGVuIix0LnBvaW50ZXJFdmVudHM9Im5vbmUiLHQucG9zaXRpb249ImFic29sdXRlIjtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPWUuc3R5bGU7aS53aWR0aD0iMnB4IixpLmhlaWdodD0iMXB4IixuLmFwcGVuZENoaWxkKGUpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksQ0E9MCwwPT09bi5zY3JvbGxMZWZ0JiYobi5zY3JvbGxMZWZ0PTEsQ0E9MD09PW4uc2Nyb2xsTGVmdD8xOjIpLG4ucmVtb3ZlKCl9cmV0dXJuIENBfWZ1bmN0aW9uIE1BKG4pe2lmKGZ1bmN0aW9uKCl7aWYobnVsbD09T1Ype2xldCBuPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO09WPSEoIW58fCFuLmNyZWF0ZVNoYWRvd1Jvb3QmJiFuLmF0dGFjaFNoYWRvdyl9cmV0dXJuIE9WfSgpKXtsZXQgdD1uLmdldFJvb3ROb2RlP24uZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hhZG93Um9vdCYmdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTkMoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtsZXQgdD1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZih0PT09bilicmVhaztuPXR9cmV0dXJuIG59ZnVuY3Rpb24gdmMobil7cmV0dXJuIG4uY29tcG9zZWRQYXRoP24uY29tcG9zZWRQYXRoKClbMF06bi50YXJnZXR9ZnVuY3Rpb24gTEMoKXtyZXR1cm4gdHlwZW9mIF9fa2FybWFfXzwidSImJiEhX19rYXJtYV9ffHx0eXBlb2YgamFzbWluZTwidSImJiEhamFzbWluZXx8dHlwZW9mIGplc3Q8InUiJiYhIWplc3R8fHR5cGVvZiBNb2NoYTwidSImJiEhTW9jaGF9ZnVuY3Rpb24gTXIobiwuLi50KXtyZXR1cm4gdC5sZW5ndGg/dC5zb21lKGU9Pm5bZV0pOm4uYWx0S2V5fHxuLnNoaWZ0S2V5fHxuLmN0cmxLZXl8fG4ubWV0YUtleX1mdW5jdGlvbiBXdChuKXtyZXR1cm4gbnVsbCE9biYmImZhbHNlIiE9YCR7bn1gfWZ1bmN0aW9uIFBpKG4sdD0wKXtyZXR1cm4gTlYobik/TnVtYmVyKG4pOnR9ZnVuY3Rpb24gTlYobil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQobikpJiYhaXNOYU4oTnVtYmVyKG4pKX1mdW5jdGlvbiBNXyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBubyhuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBjYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufXZhciBFXyxVWj0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGxUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9Y2EoZSk7cmV0dXJuIG5ldyBRdChyPT57bGV0IHM9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57cy51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgVGUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVaKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksU189KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEcsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5fdW5zdWJzY3JpYmUoKTp0aGlzLl9zdWJzY3JpYmUoKX1nZXQgZGVib3VuY2UoKXtyZXR1cm4gdGhpcy5fZGVib3VuY2V9c2V0IGRlYm91bmNlKGUpe3RoaXMuX2RlYm91bmNlPVBpKGUpLHRoaXMuX3N1YnNjcmliZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKEFyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGxUZSksdyhBZSksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksenA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbVVpdfSksbn0pKCkselo9bmV3IFNldCxjVGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6ZFRlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighelouaGFzKG4pKXRyeXtFX3x8KChFXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRV8pKSxFXy5zaGVldCYmKEVfLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCkselouYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGRUZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBubT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgVGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIGpaKE1fKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89cG4oalooTV8oZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1KZChvLnBpcGUoSHQoMSkpLG8ucGlwZShDYSgxKSxBcigwKSkpLG8ucGlwZShCKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IFF0KHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZShWbihpKSxCKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksb3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjVGUpLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBqWihuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIERBKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIEtaPSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsRUE9ImNkay1kZXNjcmliZWRieS1ob3N0IixIVj0wLElBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrSFYrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPVNvKHJmKSsiLSIrSFYrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPUJWKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyhXWihpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89QlYoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7RUF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoRUEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1daKHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KEJWKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9REEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoS1opKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPURBKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKEVBLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9REEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShFQSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPURBKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSkscz1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhcyYmLTEhPXIuaW5kZXhPZihzKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gQlYobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24gV1oobix0KXtuLmlkfHwobi5pZD1gJHtLWn0tJHt0fS0ke0hWKyt9YCl9dmFyIEFBPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgVGUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgVGUsdGhpcy5jaGFuZ2U9bmV3IFRlLHQgaW5zdGFuY2VvZiBjbCYmdC5jaGFuZ2VzLnN1YnNjcmliZShlPT57aWYodGhpcy5fYWN0aXZlSXRlbSl7bGV0IHI9ZS50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9hY3RpdmVJdGVtKTtyPi0xJiZyIT09dGhpcy5fYWN0aXZlSXRlbUluZGV4JiYodGhpcy5fYWN0aXZlSXRlbUluZGV4PXIpfX0pfXNraXBQcmVkaWNhdGUodCl7cmV0dXJuIHRoaXMuX3NraXBQcmVkaWNhdGVGbj10LHRoaXN9d2l0aFdyYXAodD0hMCl7cmV0dXJuIHRoaXMuX3dyYXA9dCx0aGlzfXdpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKHQ9ITApe3JldHVybiB0aGlzLl92ZXJ0aWNhbD10LHRoaXN9d2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0KXtyZXR1cm4gdGhpcy5faG9yaXpvbnRhbD10LHRoaXN9d2l0aEFsbG93ZWRNb2RpZmllcktleXModCl7cmV0dXJuIHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9dCx0aGlzfXdpdGhUeXBlQWhlYWQodD0yMDApe3JldHVybiB0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249dGhpcy5fbGV0dGVyS2V5U3RyZWFtLnBpcGUoTnQoZT0+dGhpcy5fcHJlc3NlZExldHRlcnMucHVzaChlKSksQXIodCksSGUoKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wKSxCKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgcj0xO3I8aS5sZW5ndGgrMTtyKyspe2xldCBvPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrciklaS5sZW5ndGgscz1pW29dO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4ocykmJjA9PT1zLmdldExhYmVsKCkudG9VcHBlckNhc2UoKS50cmltKCkuaW5kZXhPZihlKSl7dGhpcy5zZXRBY3RpdmVJdGVtKG8pO2JyZWFrfX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXX0pLHRoaXN9d2l0aEhvbWVBbmRFbmQodD0hMCl7cmV0dXJuIHRoaXMuX2hvbWVBbmRFbmQ9dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fYWN0aXZlSXRlbTt0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0odCksdGhpcy5fYWN0aXZlSXRlbSE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX1vbktleWRvd24odCl7bGV0IGU9dC5rZXlDb2RlLHI9WyJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Il0uZXZlcnkobz0+IXRbb118fHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXMuaW5kZXhPZihvKT4tMSk7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4gdm9pZCB0aGlzLnRhYk91dC5uZXh0KCk7Y2FzZSA0MDppZih0aGlzLl92ZXJ0aWNhbCYmcil7dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM4OmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM5OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOnRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNzppZih0aGlzLl9ob3Jpem9udGFsJiZyKXsicnRsIj09PXRoaXMuX2hvcml6b250YWw/dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpOnRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzY6aWYodGhpcy5faG9tZUFuZEVuZCYmcil7dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNTppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldExhc3RJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2RlZmF1bHQ6cmV0dXJuIHZvaWQoKHJ8fE1yKHQsInNoaWZ0S2V5IikpJiYodC5rZXkmJjE9PT10LmtleS5sZW5ndGg/dGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQodC5rZXkudG9Mb2NhbGVVcHBlckNhc2UoKSk6KGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3KSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpKX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0LnByZXZlbnREZWZhdWx0KCl9Z2V0IGFjdGl2ZUl0ZW1JbmRleCgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtSW5kZXh9Z2V0IGFjdGl2ZUl0ZW0oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbX1pc1R5cGluZygpe3JldHVybiB0aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MH1zZXRGaXJzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLDEpfXNldExhc3RJdGVtQWN0aXZlKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfXNldE5leHRJdGVtQWN0aXZlKCl7dGhpcy5fYWN0aXZlSXRlbUluZGV4PDA/dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgxKX1zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MCYmdGhpcy5fd3JhcD90aGlzLnNldExhc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoLTEpfXVwZGF0ZUFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLGk9Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW09ZVtpXT8/bnVsbCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9aX1fc2V0QWN0aXZlSXRlbUJ5RGVsdGEodCl7dGhpcy5fd3JhcD90aGlzLl9zZXRBY3RpdmVJbldyYXBNb2RlKHQpOnRoaXMuX3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl9X3NldEFjdGl2ZUluV3JhcE1vZGUodCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgaT0xO2k8PWUubGVuZ3RoO2krKyl7bGV0IHI9KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0KmkrZS5sZW5ndGgpJWUubGVuZ3RoO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4oZVtyXSkpcmV0dXJuIHZvaWQgdGhpcy5zZXRBY3RpdmVJdGVtKHIpfX1fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZSh0KXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCx0KX1fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodCxlKXtsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoaVt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oaVt0XSk7KWlmKCFpW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fV9nZXRJdGVtc0FycmF5KCl7cmV0dXJuIHRoaXMuX2l0ZW1zIGluc3RhbmNlb2YgY2w/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfX0sRF89Y2xhc3MgZXh0ZW5kcyBBQXtzZXRBY3RpdmVJdGVtKHQpe3RoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLnNldEluYWN0aXZlU3R5bGVzKCksc3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRBY3RpdmVTdHlsZXMoKX19LEFfPWNsYXNzIGV4dGVuZHMgQUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29yaWdpbj0icHJvZ3JhbSJ9c2V0Rm9jdXNPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtzdXBlci5zZXRBY3RpdmVJdGVtKHQpLHRoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLmZvY3VzKHRoaXMuX29yaWdpbil9fSxJXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtPWV9aXNEaXNhYmxlZChlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hIShuLm9mZnNldFdpZHRofHxuLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0Q2xpZW50UmVjdHMmJm4uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShlKSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZShlKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtsZXQgaT1mdW5jdGlvbihuKXt0cnl7cmV0dXJuIG4uZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24obil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGUpKTtpZihpJiYoLTE9PT1xWihpKXx8IXRoaXMuaXNWaXNpYmxlKGkpKSlyZXR1cm4hMTtsZXQgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz1xWihlKTtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09bzohKCJpZnJhbWUiPT09cnx8Im9iamVjdCI9PT1yfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlPSJpbnB1dCI9PT10JiZuLnR5cGU7cmV0dXJuInRleHQiPT09ZXx8InBhc3N3b3JkIj09PWV8fCJzZWxlY3QiPT09dHx8InRleHRhcmVhIj09PXR9KGUpKSYmKCJhdWRpbyI9PT1yPyEhZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09bzoidmlkZW8iPT09cj8tMSE9PW8mJihudWxsIT09b3x8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8ZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmUudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiFmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXR8fCJzZWxlY3QiPT09dHx8ImJ1dHRvbiI9PT10fHwidGV4dGFyZWEiPT09dH0obil8fGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fFpaKG4pKX0oZSkmJiF0aGlzLmlzRGlzYWJsZWQoZSkmJihpPy5pZ25vcmVWaXNpYmlsaXR5fHx0aGlzLmlzVmlzaWJsZShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBaWihuKXtpZighbi5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PW4udGFiSW5kZXgpcmV0dXJuITE7bGV0IHQ9bi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghdHx8aXNOYU4ocGFyc2VJbnQodCwxMCkpKX1mdW5jdGlvbiBxWihuKXtpZighWloobikpcmV0dXJuIG51bGw7bGV0IHQ9cGFyc2VJbnQobi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4odCk/LTE6dH12YXIgQkM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXJ9Y3JlYXRlKGUsaT0hMSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9oYXNBdHRhY2hlZD0hMSx0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5lbmRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5fZW5hYmxlZD0hMCxvfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1kZXN0cm95KCl7bGV0IHQ9dGhpcy5fc3RhcnRBbmNob3IsZT10aGlzLl9lbmRBbmNob3I7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksdC5yZW1vdmUoKSksZSYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpLGUucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5nKSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkodCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmUodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KHQpKSl9KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke3R9XSwgW2Nka0ZvY3VzUmVnaW9uJHt0fV0sIFtjZGstZm9jdXMtJHt0fV1gKTtyZXR1cm4ic3RhcnQiPT10P2UubGVuZ3RoP2VbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKGUpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGUpKXtsZXQgaT10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlKTtyZXR1cm4gaT8uZm9jdXModCksISFpfXJldHVybiBlLmZvY3VzKHQpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtsZXQgZT10LmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsdCksdC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCxlKXt0P2Uuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTplLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKHQpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUodCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKHQpfX0oZSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihJXyksUihwdCksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIFZDKG4pe3JldHVybiAwPT09bi5idXR0b25zfHwwPT09bi5vZmZzZXRYJiYwPT09bi5vZmZzZXRZfWZ1bmN0aW9uIEhDKG4pe2xldCB0PW4udG91Y2hlcyYmbi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzJiZuLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIXR8fC0xIT09dC5pZGVudGlmaWVyfHxudWxsIT10LnJhZGl1c1gmJjEhPT10LnJhZGl1c1h8fG51bGwhPXQucmFkaXVzWSYmMSE9PXQucmFkaXVzWSl9bmV3IHNlKCJGT0NVU19UUkFQX0lORVJUX1NUUkFURUdZIik7dmFyIFJUZT1uZXcgc2UoImNkay1pbnB1dC1tb2RhbGl0eS1kZXRlY3Rvci1vcHRpb25zIiksT1RlPXtpZ25vcmVLZXlzOlsxOCwxNywyMjQsOTEsMTZdfSxUXz1Ocyh7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksa1RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IFZyKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPXM9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKGE9PmE9PT1zLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb25Nb3VzZWRvd249cz0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChWQyhzKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9dmMocykpfSx0aGlzLl9vblRvdWNoc3RhcnQ9cz0+e0hDKHMpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb3B0aW9ucz17Li4uT1RlLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKENhKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShkaSgpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLFRfKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sVF8pLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKX0pfWdldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RhbGl0eS5jb21wbGV0ZSgpLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5ZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQpLFIoUlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxGVGU9bmV3IHNlKCJsaXZlQW5ub3VuY2VyRWxlbWVudCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxMVGU9bmV3IHNlKCJMSVZFX0FOTk9VTkNFUl9ERUZBVUxUX09QVElPTlMiKSxVQz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX25nWm9uZT1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPW8sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9saXZlRWxlbWVudD1lfHx0aGlzLl9jcmVhdGVMaXZlRWxlbWVudCgpfWFubm91bmNlKGUsLi4uaSl7bGV0IG8scyxyPXRoaXMuX2RlZmF1bHRPcHRpb25zO3JldHVybiAxPT09aS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgaVswXT9zPWlbMF06W28sc109aSx0aGlzLmNsZWFyKCksY2xlYXJUaW1lb3V0KHRoaXMuX3ByZXZpb3VzVGltZW91dCksb3x8KG89ciYmci5wb2xpdGVuZXNzP3IucG9saXRlbmVzczoicG9saXRlIiksbnVsbD09cyYmciYmKHM9ci5kdXJhdGlvbiksdGhpcy5fbGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLG8pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2UoYT0+dGhpcy5fY3VycmVudFJlc29sdmU9YSkpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIHMmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLHMpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEZUZSw4KSxSKHB0KSxSKEJ0KSxSKExUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQlRlPW5ldyBzZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksVEE9TnMoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHpyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgVGUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1hPT57Zm9yKGxldCBjPXZjKGEpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PWEudHlwZT90aGlzLl9vbkZvY3VzKGEsYyk6dGhpcy5fb25CbHVyKGEsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1zPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1jYShlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4ganQobnVsbCk7bGV0IG89TUEocil8fHRoaXMuX2dldERvY3VtZW50KCkscz10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYocylyZXR1cm4gaSYmKHMuY2hlY2tDaGlsZHJlbj0hMCkscy5zdWJqZWN0O2xldCBhPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgVGUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1jYShlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89Y2EoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFthLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChhLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPXZjKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsVEEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUob3QodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixUQSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocHQpLFIodWkpLFIoa1RlKSxSKEJ0LDgpLFIoQlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSwkWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgR31nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh6cikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxZWj0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLFhaPSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsVlY9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIscVY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPVNvKG5tKS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShWVixZWixYWiksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQoVlYsWVopOjI9PT1pJiZlLmFkZChWVixYWil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHVpKSxSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUF89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHFWKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3pwXX0pLG59KSgpLFZUZT1uZXcgc2UoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhCdCl9fSksVVRlPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLGlyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRyxlKXtsZXQgcj1lLmRvY3VtZW50RWxlbWVudD9lLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbDt0aGlzLnZhbHVlPWZ1bmN0aW9uKG4pe2xldCB0PW4/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PXQmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP1VUZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT10PyJydGwiOiJsdHIifSgoZS5ib2R5P2UuYm9keS5kaXI6bnVsbCl8fHJ8fCJsdHIiKX19bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFZUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksV3A9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGpUZShuLHQpe2lmKDEmbiYmTigwLCJtYXQtcHNldWRvLWNoZWNrYm94Iiw0KSwyJm4pe2xldCBlPU0oKTtiKCJzdGF0ZSIsZS5zZWxlY3RlZD8iY2hlY2tlZCI6InVuY2hlY2tlZCIpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCl9fWZ1bmN0aW9uIEdUZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNSksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIigiLGUuZ3JvdXAubGFiZWwsIikiKX19dmFyIFdUZT1bIioiXSxpSj0obmV3IEtsKCIxNC4yLjciKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5TVEFOREFSRF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIixuLkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixuLkFDQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMSwxKSIsbi5TSEFSUF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC42LDEpIixufSkoKSkscko9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uQ09NUExFWD0iMzc1bXMiLG4uRU5URVJJTkc9IjIyNW1zIixuLkVYSVRJTkc9IjE5NW1zIixufSkoKSxZVGU9bmV3IHNlKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxkbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9zYW5pdHlDaGVja3M9aSx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsZS5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2NoZWNrSXNFbmFibGVkKGUpe3JldHVybiFMQygpJiYoImJvb2xlYW4iPT10eXBlb2YgdGhpcy5fc2FuaXR5Q2hlY2tzP3RoaXMuX3Nhbml0eUNoZWNrczohIXRoaXMuX3Nhbml0eUNoZWNrc1tlXSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocVYpLFIoWVRlLDgpLFIoQnQpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbV3AsV3BdfSksbn0pKCk7ZnVuY3Rpb24gZ28obil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPVd0KHQpfX19ZnVuY3Rpb24gcHMobix0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fWdldCBjb2xvcigpe3JldHVybiB0aGlzLl9jb2xvcn1zZXQgY29sb3IoZSl7bGV0IGk9ZXx8dGhpcy5kZWZhdWx0Q29sb3I7aSE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtJHt0aGlzLl9jb2xvcn1gKSxpJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LSR7aX1gKSx0aGlzLl9jb2xvcj1pKX19fWZ1bmN0aW9uIExzKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QodCl9fX1mdW5jdGlvbiBxcChuLHQ9MCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLl90YWJJbmRleD10LHRoaXMuZGVmYXVsdFRhYkluZGV4PXR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/LTE6dGhpcy5fdGFiSW5kZXh9c2V0IHRhYkluZGV4KGUpe3RoaXMuX3RhYkluZGV4PW51bGwhPWU/UGkoZSk6dGhpcy5kZWZhdWx0VGFiSW5kZXh9fX1mdW5jdGlvbiBSQShuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuZXJyb3JTdGF0ZT0hMX11cGRhdGVFcnJvclN0YXRlKCl7bGV0IHQ9dGhpcy5lcnJvclN0YXRlLG89KHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXJ8fHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcikuaXNFcnJvclN0YXRlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLmNvbnRyb2w6bnVsbCx0aGlzLl9wYXJlbnRGb3JtR3JvdXB8fHRoaXMuX3BhcmVudEZvcm0pO28hPT10JiYodGhpcy5lcnJvclN0YXRlPW8sdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX19fWZ1bmN0aW9uIE9BKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9W10sdGhpcy5pbml0aWFsaXplZD1uZXcgUXQoZT0+e3RoaXMuX2lzSW5pdGlhbGl6ZWQ/dGhpcy5fbm90aWZ5U3Vic2NyaWJlcihlKTp0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMucHVzaChlKX0pfV9tYXJrSW5pdGlhbGl6ZWQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5mb3JFYWNoKHRoaXMuX25vdGlmeVN1YnNjcmliZXIpLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1udWxsfV9ub3RpZnlTdWJzY3JpYmVyKHQpe3QubmV4dCgpLHQuY29tcGxldGUoKX19fW5ldyBzZSgiTUFUX0RBVEVfTE9DQUxFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhyZCl9fSksbmV3IHNlKCJtYXQtZGF0ZS1mb3JtYXRzIik7dmFyIFJfPSgoKT0+e2NsYXNzIG57aXNFcnJvclN0YXRlKGUsaSl7cmV0dXJuISEoZSYmZS5pbnZhbGlkJiYoZS50b3VjaGVkfHxpJiZpLnN1Ym1pdHRlZCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxlSj17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sWVY9TnMoe3Bhc3NpdmU6ITB9KSx0Sj1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxuSj1bIm1vdXNldXAiLCJtb3VzZWxlYXZlIiwidG91Y2hlbmQiLCJ0b3VjaGNhbmNlbCJdLG9KPW5ldyBzZSgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLGVzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1jYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uZUosLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgcz1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUsciksYT10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLHUuc3R5bGUubGVmdD1hLXMrInB4Iix1LnN0eWxlLnRvcD1sLXMrInB4Iix1LnN0eWxlLmhlaWdodD0yKnMrInB4Iix1LnN0eWxlLndpZHRoPTIqcysicHgiLG51bGwhPWkuY29sb3ImJih1LnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSx1LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHUpO2xldCBkPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHUpLGg9ZC50cmFuc2l0aW9uRHVyYXRpb24sZj0ibm9uZSI9PT1kLnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWh8fCIwcywgMHMiPT09aCxtPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLHUsaSxmKTt1LnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIsbS5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bSk7bGV0IEM9bnVsbDtyZXR1cm4hZiYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IF89KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24obSkseT0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZShtKTt1LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLF8pLHUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseSksQz17b25UcmFuc2l0aW9uRW5kOl8sb25UcmFuc2l0aW9uQ2FuY2VsOnl9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQobSxDKSwoZnx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKG0pLG19ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi5lSiwuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1jYSh0KTshZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdGhpcy5fcmVnaXN0ZXJFdmVudHModEopKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKG5KKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSEwKX1fZmluaXNoUmlwcGxlVHJhbnNpdGlvbih0KXswPT09dC5zdGF0ZT90aGlzLl9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpOjI9PT10LnN0YXRlJiZ0aGlzLl9kZXN0cm95UmlwcGxlKHQpfV9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpe2xldCBlPXQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlLHtwZXJzaXN0ZW50Oml9PXQuY29uZmlnO3Quc3RhdGU9MSwhaSYmKCFlfHwhdGhpcy5faXNQb2ludGVyRG93bikmJnQuZmFkZU91dCgpfV9kZXN0cm95UmlwcGxlKHQpe2xldCBlPXRoaXMuX2FjdGl2ZVJpcHBsZXMuZ2V0KHQpPz9udWxsO3RoaXMuX2FjdGl2ZVJpcHBsZXMuZGVsZXRlKHQpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksdD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHQuc3RhdGU9MyxudWxsIT09ZSYmKHQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixlLm9uVHJhbnNpdGlvbkVuZCksdC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25jYW5jZWwiLGUub25UcmFuc2l0aW9uQ2FuY2VsKSksdC5lbGVtZW50LnJlbW92ZSgpfV9vbk1vdXNlZG93bih0KXtsZXQgZT1WQyh0KSxpPXRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCs4MDA7IXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIWUmJiFpJiYodGhpcy5faXNQb2ludGVyRG93bj0hMCx0aGlzLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpKX1fb25Ub3VjaFN0YXJ0KHQpe2lmKCF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFIQyh0KSl7dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHRoaXMuX2lzUG9pbnRlckRvd249ITA7bGV0IGU9dC5jaGFuZ2VkVG91Y2hlcztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0aGlzLmZhZGVJblJpcHBsZShlW2ldLmNsaWVudFgsZVtpXS5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpfX1fb25Qb2ludGVyVXAoKXshdGhpcy5faXNQb2ludGVyRG93bnx8KHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+eyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYoMT09PXQuc3RhdGV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiYwPT09dC5zdGF0ZSkmJnQuZmFkZU91dCgpfSkpfV9yZWdpc3RlckV2ZW50cyh0KXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0LmZvckVhY2goZT0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLFlWKX0pfSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXt0aGlzLl90cmlnZ2VyRWxlbWVudCYmKHRKLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQmJm5KLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pKX19KHRoaXMsaSxlLHIpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfWZhZGVPdXRBbGwoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsKCl9ZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpfWdldCByaXBwbGVDb25maWcoKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246ey4uLnRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uLC4uLiJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlP3tlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9Ont9LC4uLnRoaXMuYW5pbWF0aW9ufSx0ZXJtaW5hdGVPblBvaW50ZXJVcDp0aGlzLl9nbG9iYWxPcHRpb25zLnRlcm1pbmF0ZU9uUG9pbnRlclVwfX1nZXQgcmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfV9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9bGF1bmNoKGUsaT0wLHIpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoZSxpLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5yfSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCx7Li4udGhpcy5yaXBwbGVDb25maWcsLi4uZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHB0KSx3KHVpKSx3KG9KLDgpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtcmlwcGxlIiwiIl0sWyIiLCJtYXRSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtcmlwcGxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsaS51bmJvdW5kZWQpfSxpbnB1dHM6e2NvbG9yOlsibWF0UmlwcGxlQ29sb3IiLCJjb2xvciJdLHVuYm91bmRlZDpbIm1hdFJpcHBsZVVuYm91bmRlZCIsInVuYm91bmRlZCJdLGNlbnRlcmVkOlsibWF0UmlwcGxlQ2VudGVyZWQiLCJjZW50ZXJlZCJdLHJhZGl1czpbIm1hdFJpcHBsZVJhZGl1cyIsInJhZGl1cyJdLGFuaW1hdGlvbjpbIm1hdFJpcHBsZUFuaW1hdGlvbiIsImFuaW1hdGlvbiJdLGRpc2FibGVkOlsibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHRyaWdnZXI6WyJtYXRSaXBwbGVUcmlnZ2VyIiwidHJpZ2dlciJdfSxleHBvcnRBczpbIm1hdFJpcHBsZSJdfSksbn0pKCkseGM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLFpUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2FuaW1hdGlvbk1vZGU9ZSx0aGlzLnN0YXRlPSJ1bmNoZWNrZWQiLHRoaXMuZGlzYWJsZWQ9ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wc2V1ZG8tY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtcHNldWRvLWNoZWNrYm94Il0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLCJpbmRldGVybWluYXRlIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQiLCJjaGVja2VkIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIixpLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WycubWF0LXBzZXVkby1jaGVja2JveHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JvcmRlcjoycHggc29saWQ7Ym9yZGVyLXJhZGl1czoycHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSxiYWNrZ3JvdW5kLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO2NvbnRlbnQ6IiI7Ym9yZGVyLWJvdHRvbToycHggc29saWQgY3VycmVudENvbG9yO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3gubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjVweDtsZWZ0OjFweDt3aWR0aDoxMHB4O29wYWNpdHk6MTtib3JkZXItcmFkaXVzOjJweH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt0b3A6Mi40cHg7bGVmdDoxcHg7d2lkdGg6OHB4O2hlaWdodDozcHg7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7b3BhY2l0eToxO2JveC1zaXppbmc6Y29udGVudC1ib3h9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSlRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbl19KSxufSkoKSxqQz1uZXcgc2UoIk1BVF9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCIpLEdDPShnbyhjbGFzc3t9KSxuZXcgc2UoIk1hdE9wdGdyb3VwIikpLCRUZT0wLHpDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0hMSl7dGhpcy5zb3VyY2U9dCx0aGlzLmlzVXNlcklucHV0PWV9fSxlRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYXJlbnQ9cix0aGlzLmdyb3VwPW8sdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5pZD0ibWF0LW9wdGlvbi0iKyRUZSsrLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZX1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQubXVsdGlwbGV9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmRpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSl9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4hKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlzYWJsZVJpcHBsZSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9Z2V0IHZpZXdWYWx1ZSgpe3JldHVybih0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnRleHRDb250ZW50fHwiIikudHJpbSgpfXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWRlc2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKSl9Zm9jdXMoZSxpKXtsZXQgcj10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiByLmZvY3VzJiZyLmZvY3VzKGkpfXNldEFjdGl2ZVN0eWxlcygpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2V0SW5hY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldExhYmVsKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfV9oYW5kbGVLZXlkb3duKGUpeygxMz09PWUua2V5Q29kZXx8MzI9PT1lLmtleUNvZGUpJiYhTXIoZSkmJih0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9X3NlbGVjdFZpYUludGVyYWN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkfHwhdGhpcy5tdWx0aXBsZSYmbnVsbH1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHRoaXMuX3NlbGVjdGVkKXtsZXQgZT10aGlzLnZpZXdWYWx1ZTtlIT09dGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmKHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9ZSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KGU9ITEpe3RoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgekModGhpcyxlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCksdWE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGVEZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhqQyw4KSx3KEdDLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1vcHRpb24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pLDImZSYmKEFhKCJpZCIsaS5pZCksemUoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1zZWxlY3RlZCIsaS5fZ2V0QXJpYVNlbGVjdGVkKCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJtYXQtc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtb3B0aW9uLW11bHRpcGxlIixpLm11bHRpcGxlKSgibWF0LWFjdGl2ZSIsaS5hY3RpdmUpKCJtYXQtb3B0aW9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGV4cG9ydEFzOlsibWF0T3B0aW9uIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6V1RlLGRlY2xzOjUsdmFyczo0LGNvbnN0czpbWyJjbGFzcyIsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIiw0LCJuZ0lmIl0sWzEsIm1hdC1vcHRpb24tdGV4dCJdLFsiY2xhc3MiLCJjZGstdmlzdWFsbHktaGlkZGVuIiw0LCJuZ0lmIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtb3B0aW9uLXJpcHBsZSIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIl0sWzEsImNkay12aXN1YWxseS1oaWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxqVGUsMSwyLCJtYXQtcHNldWRvLWNoZWNrYm94IiwwKSxnKDEsInNwYW4iLDEpLE5uKDIpLHYoKSxFKDMsR1RlLDIsMSwic3BhbiIsMiksTig0LCJkaXYiLDMpKSwyJmUmJihiKCJuZ0lmIixpLm11bHRpcGxlKSx4KDMpLGIoIm5nSWYiLGkuZ3JvdXAmJmkuZ3JvdXAuX2luZXJ0KSx4KDEpLGIoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlZHx8aS5kaXNhYmxlUmlwcGxlKSl9LGRlcGVuZGVuY2llczpbZXMsWGUsWlRlXSxzdHlsZXM6WycubWF0LW9wdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtb3B0aW9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0aW9uIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVdey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MzJweH0ubWF0LW9wdGlvbi5tYXQtYWN0aXZlOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17b3BhY2l0eTouNX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMHB4O2hlaWdodDowO2JvcmRlci1ib3R0b206c29saWQgMTBweDtib3JkZXItcmFkaXVzOjEwcHh9W2Rpcj1ydGxdIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6OmFmdGVye3JpZ2h0OmF1dG87bGVmdDoxNnB4fS5tYXQtb3B0aW9uLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1vcHRpb24gLm1hdC1vcHRpb24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gV0Mobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IHM9MDtzPG4rMTtzKyspaVtzXS5ncm91cCYmaVtzXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiBrQShuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBPXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsa2UsZG4sSlRlXX0pLG59KSgpLHNKPVsibWF0LWJ1dHRvbiIsIiJdLGFKPVsiKiJdLGlEZT1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxyRGU9cHMoZ28oTHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksJG49KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJEZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuaXNSb3VuZEJ1dHRvbj10aGlzLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHRoaXMuaXNJY29uQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IobGV0IG8gb2YgaURlKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKG8pJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQobyk7ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLmUpe3JldHVybiBlLnNvbWUoaT0+dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHpyKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoZXMsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yaXBwbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRkE9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGksZSxyKSx0aGlzLl9uZ1pvbmU9byx0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHM9cz0+e3RoaXMuZGlzYWJsZWQmJihzLnByZXZlbnREZWZhdWx0KCkscy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9KTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6ciksdyhBZSksdyhMaSw4KSx3KHB0LDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhIiwibWF0LWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJhIiwibWF0LWZhYiIsIiJdLFsiYSIsIm1hdC1taW5pLWZhYiIsIiJdLFsiYSIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mbGF0LWJ1dHRvbiIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUmk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3hjLGRuLGRuXX0pLG59KSgpLGtfPWNsYXNze30sTkE9Y2xhc3MgZXh0ZW5kcyBrX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIFd5KHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6anQodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319LExBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXModCxlLGkscixvKXt0LmZvckVhY2hPcGVyYXRpb24oKHMsYSxsKT0+e2xldCBjLHU7bnVsbD09cy5wcmV2aW91c0luZGV4PyhjPXRoaXMuX2luc2VydFZpZXcoKCk9PmkocyxhLGwpLGwsZSxyKHMpKSx1PWM/MTowKTpudWxsPT1sPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoYSxlKSx1PTMpOihjPXRoaXMuX21vdmVWaWV3KGEsbCxlLHIocykpLHU9MiksbyYmbyh7Y29udGV4dDpjPy5jb250ZXh0LG9wZXJhdGlvbjp1LHJlY29yZDpzfSl9KX1kZXRhY2goKXtmb3IobGV0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsaSxyKXtsZXQgbz10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsaSk7aWYobylyZXR1cm4gdm9pZChvLmNvbnRleHQuJGltcGxpY2l0PXIpO2xldCBzPXQoKTtyZXR1cm4gaS5jcmVhdGVFbWJlZGRlZFZpZXcocy50ZW1wbGF0ZVJlZixzLmNvbnRleHQscy5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyh0LGUpe2xldCBpPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGksZSl9X21vdmVWaWV3KHQsZSxpLHIpe2xldCBvPWkuZ2V0KHQpO3JldHVybiBpLm1vdmUobyxlKSxvLmNvbnRleHQuJGltcGxpY2l0PXIsb31fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2xldCBpPWUuaW5kZXhPZih0KTstMT09PWk/dC5kZXN0cm95KCk6ZS5yZW1vdmUoaSl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKHQsZSl7bGV0IGk9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBpJiZlLmluc2VydChpLHQpLGl8fG51bGx9fSxGXz1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExLGUsaT0hMCxyKXt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPWksdGhpcy5jb21wYXJlV2l0aD1yLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5jaGFuZ2VkPW5ldyBUZSxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKG89PnRoaXMuX21hcmtTZWxlY3RlZChvKSk6dGhpcy5fbWFya1NlbGVjdGVkKGVbMF0pLHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aD0wKX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD1BcnJheS5mcm9tKHRoaXMuX3NlbGVjdGlvbi52YWx1ZXMoKSkpLHRoaXMuX3NlbGVjdGVkfXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX21hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1zZXRTZWxlY3Rpb24oLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpO2xldCBlPXRoaXMuc2VsZWN0ZWQsaT1uZXcgU2V0KHQpO3QuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpLGUuZmlsdGVyKG89PiFpLmhhcyhvKSkuZm9yRWFjaChvPT50aGlzLl91bm1hcmtTZWxlY3RlZChvKSk7bGV0IHI9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxyfXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIodD0hMCl7dGhpcy5fdW5tYXJrQWxsKCk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0JiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWlzU2VsZWN0ZWQodCl7aWYodGhpcy5jb21wYXJlV2l0aCl7Zm9yKGxldCBlIG9mIHRoaXMuX3NlbGVjdGlvbilpZih0aGlzLmNvbXBhcmVXaXRoKGUsdCkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5oYXModCl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9aGFzVmFsdWUoKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9c29ydCh0KXt0aGlzLl9tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX1pc011bHRpcGxlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMuY2hhbmdlZC5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX1fbWFya1NlbGVjdGVkKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLmlzU2VsZWN0ZWQodCl8fHRoaXMuX3NlbGVjdGlvbi5hZGQodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX3NlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCkmJih0aGlzLl9zZWxlY3Rpb24uZGVsZXRlKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9kZXNlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtBbGwoKXt0aGlzLmlzRW1wdHkoKXx8dGhpcy5fc2VsZWN0aW9uLmZvckVhY2godD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpfV92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCl7fV9oYXNRdWV1ZWRDaGFuZ2VzKCl7cmV0dXJuISghdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgmJiF0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGgpfX0sUVY9bmV3IHNlKCJfVmlld1JlcGVhdGVyIiksb0RlPVsiY29udGVudFdyYXBwZXIiXSxzRGU9WyIqIl0sZEo9bmV3IHNlKCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpO2Z1bmN0aW9uIGFEZShuKXtyZXR1cm4gbi5fc2Nyb2xsU3RyYXRlZ3l9dmFyIHBKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtU2l6ZT0yMCx0aGlzLl9taW5CdWZmZXJQeD0xMDAsdGhpcy5fbWF4QnVmZmVyUHg9MjAwLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgVGUsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShkaSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pfWF0dGFjaCh0KXt0aGlzLl92aWV3cG9ydD10LHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodCxlLGkpe3RoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRhTGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJlZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleCh0LGUpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zY3JvbGxUb09mZnNldCh0KnRoaXMuX2l0ZW1TaXplLGUpfV91cGRhdGVUb3RhbENvbnRlbnRTaXplKCl7IXRoaXMuX3ZpZXdwb3J0fHx0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2xldCB0PXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxlPXtzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZH0saT10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxyPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSxvPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSxzPXRoaXMuX2l0ZW1TaXplPjA/by90aGlzLl9pdGVtU2l6ZTowO2lmKGUuZW5kPnIpe2xldCBsPU1hdGguY2VpbChpL3RoaXMuX2l0ZW1TaXplKSxjPU1hdGgubWF4KDAsTWF0aC5taW4ocyxyLWwpKTtzIT1jJiYocz1jLG89Yyp0aGlzLl9pdGVtU2l6ZSxlLnN0YXJ0PU1hdGguZmxvb3IocykpLGUuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4ocixlLnN0YXJ0K2wpKX1sZXQgYT1vLWUuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYoYTx0aGlzLl9taW5CdWZmZXJQeCYmMCE9ZS5zdGFydCl7bGV0IGw9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1hKS90aGlzLl9pdGVtU2l6ZSk7ZS5zdGFydD1NYXRoLm1heCgwLGUuc3RhcnQtbCksZS5lbmQ9TWF0aC5taW4ocixNYXRoLmNlaWwocysoaSt0aGlzLl9taW5CdWZmZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2xldCBsPWUuZW5kKnRoaXMuX2l0ZW1TaXplLShvK2kpO2lmKGw8dGhpcy5fbWluQnVmZmVyUHgmJmUuZW5kIT1yKXtsZXQgYz1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWwpL3RoaXMuX2l0ZW1TaXplKTtjPjAmJihlLmVuZD1NYXRoLm1pbihyLGUuZW5kK2MpLGUuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHMtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNpemUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoZSksdGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmUuc3RhcnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKHMpKX19KHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5faXRlbVNpemV9c2V0IGl0ZW1TaXplKGUpe3RoaXMuX2l0ZW1TaXplPVBpKGUpfWdldCBtaW5CdWZmZXJQeCgpe3JldHVybiB0aGlzLl9taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoZSl7dGhpcy5fbWluQnVmZmVyUHg9UGkoZSl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21heEJ1ZmZlclB4fXNldCBtYXhCdWZmZXJQeChlKXt0aGlzLl9tYXhCdWZmZXJQeD1QaShlKX1uZ09uQ2hhbmdlcygpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsIml0ZW1TaXplIiwiIl1dLGlucHV0czp7aXRlbVNpemU6Iml0ZW1TaXplIixtaW5CdWZmZXJQeDoibWluQnVmZmVyUHgiLG1heEJ1ZmZlclB4OiJtYXhCdWZmZXJQeCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6ZEosdXNlRmFjdG9yeTphRGUsZGVwczpbcmkoKCk9Pm4pXX1dKSx6dF19KSxufSkoKSxpbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX3Njcm9sbGVkPW5ldyBUZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9cn1yZWdpc3RlcihlKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGUpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGUsZS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoZSkpKX1kZXJlZ2lzdGVyKGUpe2xldCBpPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoZSk7aSYmKGkudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGUpKX1zY3JvbGxlZChlPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBRdChpPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2xldCByPWU+MD90aGlzLl9zY3JvbGxlZC5waXBlKHpjKGUpKS5zdWJzY3JpYmUoaSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGkpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntyLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6anQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGUsaSk9PnRoaXMuZGVyZWdpc3RlcihpKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGUsaSl7bGV0IHI9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoaSkucGlwZShIZShvPT4hb3x8ci5pbmRleE9mKG8pPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgocixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyxlKSYmaS5wdXNoKG8pfSksaX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZSxpKXtsZXQgcj1jYShpKSxvPWUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYocj09bylyZXR1cm4hMH13aGlsZShyPXIucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bGkodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKHVpKSxSKEJ0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxZcD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuZWxlbWVudFJlZj1lLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1pLHRoaXMubmdab25lPXIsdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgUXQocz0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmxpKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShzKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1lLmxlZnQmJihlLmxlZnQ9cj9lLmVuZDplLnN0YXJ0KSxudWxsPT1lLnJpZ2h0JiYoZS5yaWdodD1yP2Uuc3RhcnQ6ZS5lbmQpLG51bGwhPWUuYm90dG9tJiYoZS50b3A9aS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQtZS5ib3R0b20pLHImJjAhPXdfKCk/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUubGVmdCksMj09d18oKT9lLmxlZnQ9ZS5yaWdodDoxPT13XygpJiYoZS5sZWZ0PWUucmlnaHQ/LWUucmlnaHQ6ZS5yaWdodCkpOm51bGwhPWUucmlnaHQmJihlLmxlZnQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGUpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt3QSgpP2kuc2Nyb2xsVG8oZSk6KG51bGwhPWUudG9wJiYoaS5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKGkuc2Nyb2xsTGVmdD1lLmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpPSJsZWZ0IixyPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09ZSlyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWUpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2xldCBzPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPXM/cjppOiJlbmQiPT1lJiYoZT1zP2k6cikscyYmMj09d18oKT9lPT1pP28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnQ6by5zY3JvbGxMZWZ0OnMmJjE9PXdfKCk/ZT09aT9vLnNjcm9sbExlZnQrby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoOi1vLnNjcm9sbExlZnQ6ZT09aT9vLnNjcm9sbExlZnQ6by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksbn0pKCksZGE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IFRlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZSh6YyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGNKPW5ldyBzZSgiVklSVFVBTF9TQ1JPTExBQkxFIiksdURlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZcHtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX1tZWFzdXJlVmlld3BvcnRTaXplKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWU/aS5jbGllbnRXaWR0aDppLmNsaWVudEhlaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHBEZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9MTzpmZyxxQz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxhLHIscyksdGhpcy5lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuc2Nyb2xsYWJsZT1jLHRoaXMuX3BsYXRmb3JtPVNvKHVpKSx0aGlzLl9kZXRhY2hlZFN1YmplY3Q9bmV3IFRlLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyBUZSx0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX2FwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBRdCh1PT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShkPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PnUubmV4dChkKSkpKSksdGhpcy5yZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LHRoaXMuX3RvdGFsQ29udGVudFNpemU9MCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iIix0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9IiIsdGhpcy5fcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH0sdGhpcy5fZGF0YUxlbmd0aD0wLHRoaXMuX3ZpZXdwb3J0U2l6ZT0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W10sdGhpcy5fdmlld3BvcnRDaGFuZ2VzPXZuLkVNUFRZLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1sLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihlKXt0aGlzLl9vcmllbnRhdGlvbiE9PWUmJih0aGlzLl9vcmllbnRhdGlvbj1lLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Z2V0IGFwcGVuZE9ubHkoKXtyZXR1cm4gdGhpcy5fYXBwZW5kT25seX1zZXQgYXBwZW5kT25seShlKXt0aGlzLl9hcHBlbmRPbmx5PVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKFZuKG51bGwpLHpjKDAscERlKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGUpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9ZSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUob3QodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGk9PntsZXQgcj1pLmxlbmd0aDtyIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9cix0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnN0YXJ0PT10LnN0YXJ0JiZuLmVuZD09dC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGUpfHwodGhpcy5hcHBlbmRPbmx5JiYoZT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsZS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWUpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoZSxpPSJ0by1zdGFydCIpe2U9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09aT8wOmU7bGV0IG89Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHM9bz8iWCI6IlkiLGw9YHRyYW5zbGF0ZSR7c30oJHtOdW1iZXIoKG8mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqZSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9ZSwidG8tZW5kIj09PWkmJihsKz1gIHRyYW5zbGF0ZSR7c30oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9bCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1sLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGUsaT0iYXV0byIpe2xldCByPXtiZWhhdmlvcjppfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3Iuc3RhcnQ9ZTpyLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhyKX1zY3JvbGxUb0luZGV4KGUsaT0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpO3JldHVybiBpPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9yPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpOnI9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpLE1hdGgubWF4KDAsaShlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCBpLHI9ImxlZnQiLG89InJpZ2h0IixzPSJydGwiPT10aGlzLmRpcj8udmFsdWU7aT0ic3RhcnQiPT1lP3M/bzpyOiJlbmQiPT1lP3M/cjpvOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7bGV0IGE9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGkpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtpXS1hfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7bGV0IGU9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShlKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShlLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGUpe2UmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goZSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtsZXQgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IobGV0IGkgb2YgZSlpKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHB0KSx3KGRKLDgpLHcoaXIsOCksdyhpbSksdyhkYSksdyhjSiw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQob0RlLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpZcCx1c2VGYWN0b3J5Oih0LGUpPT50fHxlLGRlcHM6W1tuZXcgT28sbmV3IGpnKGNKKV0sbl19XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpzRGUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsiY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDAsMSksTm4oMiksdigpLE4oMywiZGl2IiwyKSksMiZlJiYoeCgzKSxPdCgid2lkdGgiLGkuX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixpLl90b3RhbENvbnRlbnRIZWlnaHQpKX0sc3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpzdHJpY3Q7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdUoobix0LGUpe2lmKCFlLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtsZXQgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PW4/InN0YXJ0Ij09PXQ/ci5sZWZ0OnIucmlnaHQ6InN0YXJ0Ij09PXQ/ci50b3A6ci5ib3R0b219dmFyIGhKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl92aWV3UmVwZWF0ZXI9byx0aGlzLl92aWV3cG9ydD1zLHRoaXMudmlld0NoYW5nZT1uZXcgVGUsdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXM9bmV3IFRlLHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKFZuKG51bGwpLHlnKCksdmkoKFtsLGNdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShsLGMpKSxRcygxKSksdGhpcy5fZGlmZmVyPW51bGwsdGhpcy5fbmVlZHNVcGRhdGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBUZSx0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGw9Pnt0aGlzLl9kYXRhPWwsdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUobD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9bCx0aGlzLnZpZXdDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmYS5ydW4oKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQuYXR0YWNoKHRoaXMpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoZSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWUsZnVuY3Rpb24obil7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbm5lY3QmJiEobiBpbnN0YW5jZW9mIFV5KX0oZSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChlKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBOQShXeShlKT9lOkFycmF5LmZyb20oZXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShlKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1lPyhpLHIpPT5lKGkrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxyKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9ZSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPVBpKGUpfW1lYXN1cmVSYW5nZVNpemUoZSxpKXtpZihlLnN0YXJ0Pj1lLmVuZClyZXR1cm4gMDtsZXQgcyxhLHI9ZS5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LG89ZS5lbmQtZS5zdGFydDtmb3IobGV0IGw9MDtsPG87bCsrKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7cz1hPWMucm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IGw9by0xO2w+LTE7bC0tKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7YT1jLnJvb3ROb2Rlc1tjLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBzJiZhP3VKKGksImVuZCIsYSktdUooaSwic3RhcnQiLHMpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7bGV0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7ZT90aGlzLl9hcHBseUNoYW5nZXMoZSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMudmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpeyF0aGlzLl9yZW5kZXJlZFJhbmdlfHwodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChlLGkpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoZSxpKTppKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGUsaSl7cmV0dXJuIGUmJmUuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxpP2kuY29ubmVjdCh0aGlzKTpqdCgpfV91cGRhdGVDb250ZXh0KCl7bGV0IGU9dGhpcy5fZGF0YS5sZW5ndGgsaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2ktLTspe2xldCByPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGkpO3IuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2ksci5jb250ZXh0LmNvdW50PWUsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhyLmNvbnRleHQpLHIuZGV0ZWN0Q2hhbmdlcygpfX1fYXBwbHlDaGFuZ2VzKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci5hcHBseUNoYW5nZXMoZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLChvLHMsYSk9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3MobyxhKSxvPT5vLml0ZW0pLGUuZm9yRWFjaElkZW50aXR5Q2hhbmdlKG89Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChvLmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9by5pdGVtfSk7bGV0IGk9dGhpcy5fZGF0YS5sZW5ndGgscj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO3ItLTspe2xldCBvPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KHIpO28uY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K3Isby5jb250ZXh0LmNvdW50PWksdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhvLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhlKXtlLmZpcnN0PTA9PT1lLmluZGV4LGUubGFzdD1lLmluZGV4PT09ZS5jb3VudC0xLGUuZXZlbj1lLmluZGV4JTI9PTAsZS5vZGQ9IWUuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyhlLGkpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6ZS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6aX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpLHcoUVYpLHcocUMsNCksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpRVix1c2VDbGFzczpMQX1dKV19KSxufSkoKSxTdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksQ2Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1dwLFN1LFdwLFN1XX0pLG59KSgpLFlDPWNsYXNze2F0dGFjaCh0KXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9ZGV0YWNoKCl7bGV0IHQ9dGhpcy5fYXR0YWNoZWRIb3N0O251bGwhPXQmJih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9c2V0QXR0YWNoZWRIb3N0KHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fX0sQ2M9Y2xhc3MgZXh0ZW5kcyBZQ3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29tcG9uZW50PXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXJ9fSxocz1jbGFzcyBleHRlbmRzIFlDe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy50ZW1wbGF0ZVJlZj10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuY29udGV4dD1pLHRoaXMuaW5qZWN0b3I9cn1nZXQgb3JpZ2luKCl7cmV0dXJuIHRoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZn1hdHRhY2godCxlPXRoaXMuY29udGV4dCl7cmV0dXJuIHRoaXMuY29udGV4dD1lLHN1cGVyLmF0dGFjaCh0KX1kZXRhY2goKXtyZXR1cm4gdGhpcy5jb250ZXh0PXZvaWQgMCxzdXBlci5kZXRhY2goKX19LFpWPWNsYXNzIGV4dGVuZHMgWUN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmVsZW1lbnQ9dCBpbnN0YW5jZW9mIEFlP3QubmF0aXZlRWxlbWVudDp0fX0sWHA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW51bGx9aGFzQXR0YWNoZWQoKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfWF0dGFjaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENjPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgaHM/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dGhpcy5hdHRhY2hEb21Qb3J0YWwmJnQgaW5zdGFuY2VvZiBaVj8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaERvbVBvcnRhbCh0KSk6dm9pZCAwfWRldGFjaCgpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfWRpc3Bvc2UoKXt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuZGV0YWNoKCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCksdGhpcy5faXNEaXNwb3NlZD0hMH1zZXREaXNwb3NlRm4odCl7dGhpcy5fZGlzcG9zZUZuPXR9X2ludm9rZURpc3Bvc2VGbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX19LFhDPWNsYXNzIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcigpLHRoaXMub3V0bGV0RWxlbWVudD10LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX2FwcFJlZj1pLHRoaXMuX2RlZmF1bHRJbmplY3Rvcj1yLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXM9PntsZXQgYT1zLmVsZW1lbnQsbD10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLGEpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1zLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+e2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhLGwpfSl9LHRoaXMuX2RvY3VtZW50PW99YXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpe2xldCByLGk9KHQuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfHx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhyPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoaSx0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5pbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oKCk9PnIuZGVzdHJveSgpKSk6KHI9aS5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yfHx6bi5OVUxMKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhyLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e3RoaXMuX2FwcFJlZi52aWV3Q291bnQ+MCYmdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoci5ob3N0Vmlldyksci5kZXN0cm95KCl9KSksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2dldENvbXBvbmVudFJvb3ROb2RlKHIpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHJ9YXR0YWNoVGVtcGxhdGVQb3J0YWwodCl7bGV0IGU9dC52aWV3Q29udGFpbmVyUmVmLGk9ZS5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQse2luamVjdG9yOnQuaW5qZWN0b3J9KTtyZXR1cm4gaS5yb290Tm9kZXMuZm9yRWFjaChyPT50aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQocikpLGkuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT57bGV0IHI9ZS5pbmRleE9mKGkpOy0xIT09ciYmZS5yZW1vdmUocil9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LGl9ZGlzcG9zZSgpe3N1cGVyLmRpc3Bvc2UoKSx0aGlzLm91dGxldEVsZW1lbnQucmVtb3ZlKCl9X2dldENvbXBvbmVudFJvb3ROb2RlKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX19LGZKPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoc3tjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcoeWkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsIiwiIl1dLGV4cG9ydEFzOlsiY2RrUG9ydGFsIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYcHtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLmF0dGFjaGVkPW5ldyBHLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW89PntsZXQgcz1vLmVsZW1lbnQsYT10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7by5zZXRBdHRhY2hlZEhvc3QodGhpcykscy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHMpLHRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9byxzdXBlci5zZXREaXNwb3NlRm4oKCk9PnthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocyxhKX0pfSx0aGlzLl9kb2N1bWVudD1yfWdldCBwb3J0YWwoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9c2V0IHBvcnRhbChlKXt0aGlzLmhhc0F0dGFjaGVkKCkmJiFlJiYhdGhpcy5faXNJbml0aWFsaXplZHx8KHRoaXMuaGFzQXR0YWNoZWQoKSYmc3VwZXIuZGV0YWNoKCksZSYmc3VwZXIuYXR0YWNoKGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWV8fG51bGwpfWdldCBhdHRhY2hlZFJlZigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXtzdXBlci5kaXNwb3NlKCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT1udWxsIT1lLnZpZXdDb250YWluZXJSZWY/ZS52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsbz0oZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jb21wb25lbnQpLHM9aS5jcmVhdGVDb21wb25lbnQobyxpLmxlbmd0aCxlLmluamVjdG9yfHxpLmluamVjdG9yKTtyZXR1cm4gaSE9PXRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocy5ob3N0Vmlldy5yb290Tm9kZXNbMF0pLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+cy5kZXN0cm95KCkpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cyx0aGlzLmF0dGFjaGVkLmVtaXQocyksc31hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlLnRlbXBsYXRlUmVmLGUuY29udGV4dCx7aW5qZWN0b3I6ZS5pbmplY3Rvcn0pO3JldHVybiBzdXBlci5zZXREaXNwb3NlRm4oKCk9PnRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfV9nZXRSb290Tm9kZSgpe2xldCBlPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiBlLm5vZGVUeXBlPT09ZS5FTEVNRU5UX05PREU/ZTplLnBhcmVudE5vZGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pLHcoeWkpLHcoQnQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLGlucHV0czp7cG9ydGFsOlsiY2RrUG9ydGFsT3V0bGV0IiwicG9ydGFsIl19LG91dHB1dHM6e2F0dGFjaGVkOiJhdHRhY2hlZCJ9LGV4cG9ydEFzOlsiY2RrUG9ydGFsT3V0bGV0Il0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHdjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxtSj13QSgpLFZBPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIGU1KG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gZ0oobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4udG9wPGUudG9wfHxuLmJvdHRvbT5lLmJvdHRvbXx8bi5sZWZ0PGUubGVmdHx8bi5yaWdodD5lLnJpZ2h0KX12YXIgb209Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLmF1dG9DbG9zZSl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtlNShlLFt7d2lkdGg6aSxoZWlnaHQ6cixib3R0b206cixyaWdodDppLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpKX19KSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSxoRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX25nWm9uZT1yLHRoaXMubm9vcD0oKT0+bmV3IFZBLHRoaXMuY2xvc2U9cz0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKX19YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXtpZih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pcmV0dXJuO2xldCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXQuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50aGlzLl9jb25maWcudGhyZXNob2xkP3RoaXMuX2RldGFjaCgpOnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dC5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX1kaXNhYmxlKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfWRldGFjaCgpe3RoaXMuZGlzYWJsZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH19KHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIscyksdGhpcy5ibG9jaz0oKT0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfWF0dGFjaCgpe31lbmFibGUoKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fWRpc2FibGUoKXtpZih0aGlzLl9pc0VuYWJsZWQpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPXQuc3R5bGUscj10aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLG89aS5zY3JvbGxCZWhhdmlvcnx8IiIscz1yLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsaS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LGkudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksbUomJihpLnNjcm9sbEJlaGF2aW9yPXIuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iKSx3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksbUomJihpLnNjcm9sbEJlaGF2aW9yPW8sci5zY3JvbGxCZWhhdmlvcj1zKX19X2NhbkJlRW5hYmxlZCgpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiBlLnNjcm9sbEhlaWdodD5pLmhlaWdodHx8ZS5zY3JvbGxXaWR0aD5pLndpZHRofX0odGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCksdGhpcy5yZXBvc2l0aW9uPXM9Pm5ldyBvbSh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fbmdab25lLHMpLHRoaXMuX2RvY3VtZW50PW99fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaW0pLFIoZGEpLFIocHQpLFIoQnQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxEbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyBWQSx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtsZXQgZT1PYmplY3Qua2V5cyh0KTtmb3IobGV0IGkgb2YgZSl2b2lkIDAhPT10W2ldJiYodGhpc1tpXT10W2ldKX19fSx4Sj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fZG9jdW1lbnQ9ZX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCl9YWRkKGUpe3RoaXMucmVtb3ZlKGUpLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaChlKX1yZW1vdmUoZSl7bGV0IGk9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5pbmRleE9mKGUpO2k+LTEmJnRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc3BsaWNlKGksMSksMD09PXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZ0aGlzLmRldGFjaCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZkRlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB4Sntjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUpLHRoaXMuX25nWm9uZT1pLHRoaXMuX2tleWRvd25MaXN0ZW5lcj1yPT57bGV0IG89dGhpcy5fYXR0YWNoZWRPdmVybGF5cztmb3IobGV0IHM9by5sZW5ndGgtMTtzPi0xO3MtLSlpZihvW3NdLl9rZXlkb3duRXZlbnRzLm9ic2VydmVycy5sZW5ndGg+MCl7bGV0IGE9b1tzXS5fa2V5ZG93bkV2ZW50czt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bigoKT0+YS5uZXh0KHIpKTphLm5leHQocik7YnJlYWt9fX1hZGQoZSl7c3VwZXIuYWRkKGUpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lcikpOnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSEwKX1kZXRhY2goKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxtRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcj1vPT57dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD12YyhvKX0sdGhpcy5fY2xpY2tMaXN0ZW5lcj1vPT57bGV0IHM9dmMobyksYT0iY2xpY2siPT09by50eXBlJiZ0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0P3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ6czt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW51bGw7bGV0IGw9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zbGljZSgpO2ZvcihsZXQgYz1sLmxlbmd0aC0xO2M+LTE7Yy0tKXtsZXQgdT1sW2NdO2lmKHUuX291dHNpZGVQb2ludGVyRXZlbnRzLm9ic2VydmVycy5sZW5ndGg8MXx8IXUuaGFzQXR0YWNoZWQoKSljb250aW51ZTtpZih1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHMpfHx1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGEpKWJyZWFrO2xldCBkPXUuX291dHNpZGVQb2ludGVyRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5kLm5leHQobykpOmQubmV4dChvKX19fWFkZChlKXtpZihzdXBlci5hZGQoZSksIXRoaXMuX2lzQXR0YWNoZWQpe2xldCBpPXRoaXMuX2RvY3VtZW50LmJvZHk7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSkpOnRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKGkpLHRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlPWkuc3R5bGUuY3Vyc29yLGkuc3R5bGUuY3Vyc29yPSJwb2ludGVyIix0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSEwKSx0aGlzLl9pc0F0dGFjaGVkPSEwfX1kZXRhY2goKXtpZih0aGlzLl9pc0F0dGFjaGVkKXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKGUuc3R5bGUuY3Vyc29yPXRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSksdGhpcy5faXNBdHRhY2hlZD0hMX19X2FkZEV2ZW50TGlzdGVuZXJzKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxOXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5fY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCl9Z2V0Q29udGFpbmVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fV9jcmVhdGVDb250YWluZXIoKXtsZXQgZT0iY2RrLW92ZXJsYXktY29udGFpbmVyIjtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fExDKCkpe2xldCByPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2V9W3BsYXRmb3JtPSJzZXJ2ZXIiXSwgLiR7ZX1bcGxhdGZvcm09InRlc3QiXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb10ucmVtb3ZlKCl9bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc0xpc3QuYWRkKGUpLExDKCk/aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxUdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1PSExKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fbG9jYXRpb249bCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXUsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgVGUsdGhpcy5fYXR0YWNobWVudHM9bmV3IFRlLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBUZSx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXI9ZD0+dGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KGQpLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXI9ZD0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcChkLnRhcmdldCl9LHRoaXMuX2tleWRvd25FdmVudHM9bmV3IFRlLHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzPW5ldyBUZSxyLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ci5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ci5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXshdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KTtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSx0aGlzLl9jb25maWcuZGlzcG9zZU9uTmF2aWdhdGlvbiYmKHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz10aGlzLl9sb2NhdGlvbi5zdWJzY3JpYmUoKCk9PnRoaXMuZGlzcG9zZSgpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksImZ1bmN0aW9uIj09dHlwZW9mIGU/Lm9uRGVzdHJveSYmZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5kZXRhY2goKSkpfSksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtsZXQgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH1kaXNwb3NlKCl7bGV0IHQ9dGhpcy5oYXNBdHRhY2hlZCgpO3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9ob3N0Py5yZW1vdmUoKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT10aGlzLl9ob3N0PW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZywuLi50fSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfXNldERpcmVjdGlvbih0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZyxkaXJlY3Rpb246dH0sdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpfWFkZFBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITApfXJlbW92ZVBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITEpfWdldERpcmVjdGlvbigpe2xldCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtsZXQgdD10aGlzLl9wYW5lLnN0eWxlO3Qud2lkdGg9bm8odGhpcy5fY29uZmlnLndpZHRoKSx0LmhlaWdodD1ubyh0aGlzLl9jb25maWcuaGVpZ2h0KSx0Lm1pbldpZHRoPW5vKHRoaXMuX2NvbmZpZy5taW5XaWR0aCksdC5taW5IZWlnaHQ9bm8odGhpcy5fY29uZmlnLm1pbkhlaWdodCksdC5tYXhXaWR0aD1ubyh0aGlzLl9jb25maWcubWF4V2lkdGgpLHQubWF4SGVpZ2h0PW5vKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpfV90b2dnbGVQb2ludGVyRXZlbnRzKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyIiOiJub25lIn1fYXR0YWNoQmFja2Ryb3AoKXtsZXQgdD0iY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyI7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9uIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSwhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9iYWNrZHJvcEVsZW1lbnQmJnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0PXRoaXMuX2JhY2tkcm9wRWxlbWVudDtpZih0KXtpZih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHQpO3QuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcil9KSx0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuX2JhY2tkcm9wVGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCl9LDUwMCkpfX1fdG9nZ2xlQ2xhc3Nlcyh0LGUsaSl7bGV0IHI9TV8oZXx8W10pLmZpbHRlcihvPT4hIW8pO3IubGVuZ3RoJiYoaT90LmNsYXNzTGlzdC5hZGQoLi4ucik6dC5jbGFzc0xpc3QucmVtb3ZlKC4uLnIpKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh1bih0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCk9PnsoIXRoaXMuX3BhbmV8fCF0aGlzLl9ob3N0fHwwPT09dGhpcy5fcGFuZS5jaGlsZHJlbi5sZW5ndGgpJiYodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9ob3N0LnJlbW92ZSgpKSx0LnVuc3Vic2NyaWJlKCkpfSl9KX1fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCl7bGV0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX1fZGlzcG9zZUJhY2tkcm9wKHQpe3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKSx0LnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wRWxlbWVudD09PXQmJih0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCkpLHRoaXMuX2JhY2tkcm9wVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9iYWNrZHJvcFRpbWVvdXQpLHRoaXMuX2JhY2tkcm9wVGltZW91dD12b2lkIDApfX0sX0o9ImNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3giLGdEZT0vKFtBLVphLXolXSspJC87ZnVuY3Rpb24gcm0obix0KXtmb3IobGV0IGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYobltlXT10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiB2SihuKXtpZigibnVtYmVyIiE9dHlwZW9mIG4mJm51bGwhPW4pe2xldFt0LGVdPW4uc3BsaXQoZ0RlKTtyZXR1cm4gZSYmInB4IiE9PWU/bnVsbDpwYXJzZUZsb2F0KHQpfXJldHVybiBufHxudWxsfWZ1bmN0aW9uIHlKKG4pe3JldHVybnt0b3A6TWF0aC5mbG9vcihuLnRvcCkscmlnaHQ6TWF0aC5mbG9vcihuLnJpZ2h0KSxib3R0b206TWF0aC5mbG9vcihuLmJvdHRvbSksbGVmdDpNYXRoLmZsb29yKG4ubGVmdCksd2lkdGg6TWF0aC5mbG9vcihuLndpZHRoKSxoZWlnaHQ6TWF0aC5mbG9vcihuLmhlaWdodCl9fXZhciBiSj0iY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiLF9EZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1vfWdsb2JhbCgpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9jc3NQb3NpdGlvbj0ic3RhdGljIix0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5feFBvc2l0aW9uPSIiLHRoaXMuX3hPZmZzZXQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIiLHRoaXMuX2lzRGlzcG9zZWQ9ITF9YXR0YWNoKHQpe2xldCBlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3dpZHRoJiYhZS53aWR0aCYmdC51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl93aWR0aH0pLHRoaXMuX2hlaWdodCYmIWUuaGVpZ2h0JiZ0LnVwZGF0ZVNpemUoe2hlaWdodDp0aGlzLl9oZWlnaHR9KSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoYkopLHRoaXMuX2lzRGlzcG9zZWQ9ITF9dG9wKHQ9IiIpe3JldHVybiB0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fdG9wT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1zdGFydCIsdGhpc31sZWZ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJsZWZ0Iix0aGlzfWJvdHRvbSh0PSIiKXtyZXR1cm4gdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtZW5kIix0aGlzfXJpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJyaWdodCIsdGhpc31zdGFydCh0PSIiKXtyZXR1cm4gdGhpcy5feE9mZnNldD10LHRoaXMuX3hQb3NpdGlvbj0ic3RhcnQiLHRoaXN9ZW5kKHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJlbmQiLHRoaXN9d2lkdGgodD0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfWhlaWdodCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe2hlaWdodDp0fSk6dGhpcy5faGVpZ2h0PXQsdGhpc31jZW50ZXJIb3Jpem9udGFsbHkodD0iIil7cmV0dXJuIHRoaXMubGVmdCh0KSx0aGlzLl94UG9zaXRpb249ImNlbnRlciIsdGhpc31jZW50ZXJWZXJ0aWNhbGx5KHQ9IiIpe3JldHVybiB0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9YXBwbHkoKXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuc3R5bGUsaT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLHt3aWR0aDpyLGhlaWdodDpvLG1heFdpZHRoOnMsbWF4SGVpZ2h0OmF9PWksbD0hKCIxMDAlIiE9PXImJiIxMDB2dyIhPT1yfHxzJiYiMTAwJSIhPT1zJiYiMTAwdnciIT09cyksYz0hKCIxMDAlIiE9PW8mJiIxMDB2aCIhPT1vfHxhJiYiMTAwJSIhPT1hJiYiMTAwdmgiIT09YSksdT10aGlzLl94UG9zaXRpb24sZD10aGlzLl94T2Zmc2V0LHA9InJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmRpcmVjdGlvbixoPSIiLGY9IiIsbT0iIjtsP209ImZsZXgtc3RhcnQiOiJjZW50ZXIiPT09dT8obT0iY2VudGVyIixwP2Y9ZDpoPWQpOnA/ImxlZnQiPT09dXx8ImVuZCI9PT11PyhtPSJmbGV4LWVuZCIsaD1kKTooInJpZ2h0Ij09PXV8fCJzdGFydCI9PT11KSYmKG09ImZsZXgtc3RhcnQiLGY9ZCk6ImxlZnQiPT09dXx8InN0YXJ0Ij09PXU/KG09ImZsZXgtc3RhcnQiLGg9ZCk6KCJyaWdodCI9PT11fHwiZW5kIj09PXUpJiYobT0iZmxleC1lbmQiLGY9ZCksdC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9bD8iMCI6aCx0Lm1hcmdpblRvcD1jPyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9bD8iMCI6ZixlLmp1c3RpZnlDb250ZW50PW0sZS5hbGlnbkl0ZW1zPWM/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9ZGlzcG9zZSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9vdmVybGF5UmVmKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudCxpPWUuc3R5bGU7ZS5jbGFzc0xpc3QucmVtb3ZlKGJKKSxpLmp1c3RpZnlDb250ZW50PWkuYWxpZ25JdGVtcz10Lm1hcmdpblRvcD10Lm1hcmdpbkJvdHRvbT10Lm1hcmdpbkxlZnQ9dC5tYXJnaW5SaWdodD10LnBvc2l0aW9uPSIiLHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwfX19ZmxleGlibGVDb25uZWN0ZWRUbyhlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW8sdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuX3Njcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IFRlLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChfSiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLmFwcGx5KCl9KX1hcHBseSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2lmKCF0aGlzLl9pc0luaXRpYWxSZW5kZXImJnRoaXMuX3Bvc2l0aW9uTG9ja2VkJiZ0aGlzLl9sYXN0UG9zaXRpb24pcmV0dXJuIHZvaWQgdGhpcy5yZWFwcGx5TGFzdFBvc2l0aW9uKCk7dGhpcy5fY2xlYXJQYW5lbENsYXNzZXMoKSx0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX29yaWdpblJlY3Q9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgcyx0PXRoaXMuX29yaWdpblJlY3QsZT10aGlzLl9vdmVybGF5UmVjdCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2NvbnRhaW5lclJlY3Qsbz1bXTtmb3IobGV0IGEgb2YgdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKXtsZXQgbD10aGlzLl9nZXRPcmlnaW5Qb2ludCh0LHIsYSksYz10aGlzLl9nZXRPdmVybGF5UG9pbnQobCxlLGEpLHU9dGhpcy5fZ2V0T3ZlcmxheUZpdChjLGUsaSxhKTtpZih1LmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYSxsKTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHUsYyxpKT9vLnB1c2goe3Bvc2l0aW9uOmEsb3JpZ2luOmwsb3ZlcmxheVJlY3Q6ZSxib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KGwsYSl9KTooIXN8fHMub3ZlcmxheUZpdC52aXNpYmxlQXJlYTx1LnZpc2libGVBcmVhKSYmKHM9e292ZXJsYXlGaXQ6dSxvdmVybGF5UG9pbnQ6YyxvcmlnaW5Qb2ludDpsLHBvc2l0aW9uOmEsb3ZlcmxheVJlY3Q6ZX0pfWlmKG8ubGVuZ3RoKXtsZXQgYT1udWxsLGw9LTE7Zm9yKGxldCBjIG9mIG8pe2xldCB1PWMuYm91bmRpbmdCb3hSZWN0LndpZHRoKmMuYm91bmRpbmdCb3hSZWN0LmhlaWdodCooYy5wb3NpdGlvbi53ZWlnaHR8fDEpO3U+bCYmKGw9dSxhPWMpfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYS5wb3NpdGlvbixhLm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMucG9zaXRpb24scy5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbihzLnBvc2l0aW9uLHMub3JpZ2luUG9pbnQpfWRldGFjaCgpe3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9ib3VuZGluZ0JveCYmcm0odGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiIixsZWZ0OiIiLHJpZ2h0OiIiLGJvdHRvbToiIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pLHRoaXMuX3BhbmUmJnRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoX0opLHRoaXMuZGV0YWNoKCksdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITApfXJlYXBwbHlMYXN0UG9zaXRpb24oKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtsZXQgdD10aGlzLl9sYXN0UG9zaXRpb247aWYodCl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdGhpcy5fY29udGFpbmVyUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9ZWxzZSB0aGlzLmFwcGx5KCl9d2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlcz10LHRoaXN9d2l0aFBvc2l0aW9ucyh0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9d2l0aFZpZXdwb3J0TWFyZ2luKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9d2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0PSEwKXtyZXR1cm4gdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc313aXRoR3Jvd0FmdGVyT3Blbih0PSEwKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbj10LHRoaXN9d2l0aFB1c2godD0hMCl7cmV0dXJuIHRoaXMuX2NhblB1c2g9dCx0aGlzfXdpdGhMb2NrZWRQb3NpdGlvbih0PSEwKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfXNldE9yaWdpbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQsdGhpc313aXRoRGVmYXVsdE9mZnNldFgodCl7cmV0dXJuIHRoaXMuX29mZnNldFg9dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WSh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9d2l0aFRyYW5zZm9ybU9yaWdpbk9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9X2dldE9yaWdpblBvaW50KHQsZSxpKXtsZXQgcixvO2lmKCJjZW50ZXIiPT1pLm9yaWdpblgpcj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7bGV0IHM9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxhPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7cj0ic3RhcnQiPT1pLm9yaWdpblg/czphfXJldHVybiBlLmxlZnQ8MCYmKHItPWUubGVmdCksbz0iY2VudGVyIj09aS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWkub3JpZ2luWT90LnRvcDp0LmJvdHRvbSxlLnRvcDwwJiYoby09ZS50b3ApLHt4OnIseTpvfX1fZ2V0T3ZlcmxheVBvaW50KHQsZSxpKXtsZXQgcixvO3JldHVybiByPSJjZW50ZXIiPT1pLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PWkub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCxvPSJjZW50ZXIiPT1pLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1pLm92ZXJsYXlZPzA6LWUuaGVpZ2h0LHt4OnQueCtyLHk6dC55K299fV9nZXRPdmVybGF5Rml0KHQsZSxpLHIpe2xldCBvPXlKKGUpLHt4OnMseTphfT10LGw9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxjPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7bCYmKHMrPWwpLGMmJihhKz1jKTtsZXQgcD0wLWEsaD1hK28uaGVpZ2h0LWkuaGVpZ2h0LGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby53aWR0aCwwLXMscytvLndpZHRoLWkud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby5oZWlnaHQscCxoKSxDPWYqbTtyZXR1cm57dmlzaWJsZUFyZWE6Qyxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDpvLndpZHRoKm8uaGVpZ2h0PT09QyxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PW8uaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmY9PW8ud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxpKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2xldCByPWkuYm90dG9tLWUueSxvPWkucmlnaHQtZS54LHM9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5IZWlnaHQpLGE9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aCksYz10LmZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5fHxudWxsIT1hJiZhPD1vO3JldHVybih0LmZpdHNJblZpZXdwb3J0VmVydGljYWxseXx8bnVsbCE9cyYmczw9cikmJmN9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLGkpe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtsZXQgcj15SihlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSx1PTAsZD0wO3JldHVybiB1PXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsZD1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDp1LHk6ZH0se3g6dC54K3UseTp0LnkrZH19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSx1LGQscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBoPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmgscz10LnktaCxvPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHU9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpZD10LngsdT1pLnJpZ2h0LXQueDtlbHNle2xldCBoPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDt1PTIqaCxkPXQueC1oLHU+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihkPXQueC1mLzIpfXJldHVybnt0b3A6cyxsZWZ0OmQsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDp1LGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1ubyhpLmhlaWdodCksci50b3A9bm8oaS50b3ApLHIuYm90dG9tPW5vKGkuYm90dG9tKSxyLndpZHRoPW5vKGkud2lkdGgpLHIubGVmdD1ubyhpLmxlZnQpLHIucmlnaHQ9bm8oaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1ubyhvKSkscyYmKHIubWF4V2lkdGg9bm8ocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSxybSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3JtKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXtybSh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCB1PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsdSkpLHJtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsdSkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PW5vKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPW5vKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSkscm0odGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPW5vKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9bm8oby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOmdKKHQsaSksaXNPcmlnaW5PdXRzaWRlVmlldzplNSh0LGkpLGlzT3ZlcmxheUNsaXBwZWQ6Z0ooZSxpKSxpc092ZXJsYXlPdXRzaWRlVmlldzplNShlLGkpfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKGkscik9PmktTWF0aC5tYXgociwwKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDppLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0OmkubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDppLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206aS50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19X2lzUnRsKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfV9oYXNFeGFjdFBvc2l0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9X2dldE9mZnNldCh0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX1fdmFsaWRhdGVQb3NpdGlvbnMoKXt9X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZNXyh0KS5mb3JFYWNoKGU9PnsiIiE9PWUmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKGUpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKGUpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZChlKSl9KX1fY2xlYXJQYW5lbENsYXNzZXMoKXt0aGlzLl9wYW5lJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5mb3JFYWNoKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2xldCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgQWUpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10LndpZHRofHwwLGk9dC5oZWlnaHR8fDA7cmV0dXJue3RvcDp0LnksYm90dG9tOnQueStpLGxlZnQ6dC54LHJpZ2h0OnQueCtlLGhlaWdodDppLHdpZHRoOmV9fX0oZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGRhKSxSKEJ0KSxSKHVpKSxSKE5fKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksdkRlPTAsUWk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPWUsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9kaXJlY3Rpb25hbGl0eT11LHRoaXMuX2xvY2F0aW9uPWQsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1wLHRoaXMuX2FuaW1hdGlvbnNNb2R1bGVUeXBlPWh9Y3JlYXRlKGUpe2xldCBpPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCkscj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChpKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChyKSxzPW5ldyBEbChlKTtyZXR1cm4gcy5kaXJlY3Rpb249cy5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBUdShvLGkscixzLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlciwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGUpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkuaWQ9ImNkay1vdmVybGF5LSIrdkRlKyssaS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksZS5hcHBlbmRDaGlsZChpKSxpfV9jcmVhdGVIb3N0RWxlbWVudCgpe2xldCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVQb3J0YWxPdXRsZXQoZSl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoSmMpKSxuZXcgWEMoZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihoRGUpLFIoTl8pLFIoRW8pLFIoX0RlKSxSKGZEZSksUih6biksUihwdCksUihCdCksUihpciksUihIeCksUihtRGUpLFIoTGksOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHlEZT1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sQ0o9bmV3IHNlKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iiksc209KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdfSksbn0pKCksUXA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kaXI9cyx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMudmlld3BvcnRNYXJnaW49MCx0aGlzLm9wZW49ITEsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy5iYWNrZHJvcENsaWNrPW5ldyBHLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5hdHRhY2g9bmV3IEcsdGhpcy5kZXRhY2g9bmV3IEcsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgRyx0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2s9bmV3IEcsdGhpcy5fdGVtcGxhdGVQb3J0YWw9bmV3IGhzKGksciksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PW8sdGhpcy5zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKX1nZXQgb2Zmc2V0WCgpe3JldHVybiB0aGlzLl9vZmZzZXRYfXNldCBvZmZzZXRYKGUpe3RoaXMuX29mZnNldFg9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IG9mZnNldFkoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WX1zZXQgb2Zmc2V0WShlKXt0aGlzLl9vZmZzZXRZPWUsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9Z2V0IGxvY2tQb3NpdGlvbigpe3JldHVybiB0aGlzLl9sb2NrUG9zaXRpb259c2V0IGxvY2tQb3NpdGlvbihlKXt0aGlzLl9sb2NrUG9zaXRpb249V3QoZSl9Z2V0IGZsZXhpYmxlRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnN9c2V0IGZsZXhpYmxlRGltZW5zaW9ucyhlKXt0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9V3QoZSl9Z2V0IGdyb3dBZnRlck9wZW4oKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbn1zZXQgZ3Jvd0FmdGVyT3BlbihlKXt0aGlzLl9ncm93QWZ0ZXJPcGVuPVd0KGUpfWdldCBwdXNoKCl7cmV0dXJuIHRoaXMuX3B1c2h9c2V0IHB1c2goZSl7dGhpcy5fcHVzaD1XdChlKX1nZXQgb3ZlcmxheVJlZigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIn1uZ09uRGVzdHJveSgpe3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxtaW5XaWR0aDp0aGlzLm1pbldpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxtaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSxlLm9yaWdpbiYmdGhpcy5vcGVuJiZ0aGlzLl9wb3NpdGlvbi5hcHBseSgpKSxlLm9wZW4mJih0aGlzLm9wZW4/dGhpcy5fYXR0YWNoT3ZlcmxheSgpOnRoaXMuX2RldGFjaE92ZXJsYXkoKSl9X2NyZWF0ZU92ZXJsYXkoKXsoIXRoaXMucG9zaXRpb25zfHwhdGhpcy5wb3NpdGlvbnMubGVuZ3RoKSYmKHRoaXMucG9zaXRpb25zPXlEZSk7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9idWlsZENvbmZpZygpKTt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249ZS5hdHRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249ZS5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5kZXRhY2guZW1pdCgpKSxlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheUtleWRvd24ubmV4dChpKSwyNz09PWkua2V5Q29kZSYmIXRoaXMuZGlzYWJsZUNsb3NlJiYhTXIoaSkmJihpLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGV0YWNoT3ZlcmxheSgpKX0pLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheU91dHNpZGVDbGljay5uZXh0KGkpfSl9X2J1aWxkQ29uZmlnKCl7bGV0IGU9dGhpcy5fcG9zaXRpb249dGhpcy5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCksaT1uZXcgRGwoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTplLHNjcm9sbFN0cmF0ZWd5OnRoaXMuc2Nyb2xsU3RyYXRlZ3ksaGFzQmFja2Ryb3A6dGhpcy5oYXNCYWNrZHJvcH0pO3JldHVybih0aGlzLndpZHRofHwwPT09dGhpcy53aWR0aCkmJihpLndpZHRoPXRoaXMud2lkdGgpLCh0aGlzLmhlaWdodHx8MD09PXRoaXMuaGVpZ2h0KSYmKGkuaGVpZ2h0PXRoaXMuaGVpZ2h0KSwodGhpcy5taW5XaWR0aHx8MD09PXRoaXMubWluV2lkdGgpJiYoaS5taW5XaWR0aD10aGlzLm1pbldpZHRoKSwodGhpcy5taW5IZWlnaHR8fDA9PT10aGlzLm1pbkhlaWdodCkmJihpLm1pbkhlaWdodD10aGlzLm1pbkhlaWdodCksdGhpcy5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPXRoaXMuYmFja2Ryb3BDbGFzcyksdGhpcy5wYW5lbENsYXNzJiYoaS5wYW5lbENsYXNzPXRoaXMucGFuZWxDbGFzcyksaX1fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKXtsZXQgaT10aGlzLnBvc2l0aW9ucy5tYXAocj0+KHtvcmlnaW5YOnIub3JpZ2luWCxvcmlnaW5ZOnIub3JpZ2luWSxvdmVybGF5WDpyLm92ZXJsYXlYLG92ZXJsYXlZOnIub3ZlcmxheVksb2Zmc2V0WDpyLm9mZnNldFh8fHRoaXMub2Zmc2V0WCxvZmZzZXRZOnIub2Zmc2V0WXx8dGhpcy5vZmZzZXRZLHBhbmVsQ2xhc3M6ci5wYW5lbENsYXNzfHx2b2lkIDB9KSk7cmV0dXJuIGUuc2V0T3JpZ2luKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKS53aXRoUG9zaXRpb25zKGkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnModGhpcy5mbGV4aWJsZURpbWVuc2lvbnMpLndpdGhQdXNoKHRoaXMucHVzaCkud2l0aEdyb3dBZnRlck9wZW4odGhpcy5ncm93QWZ0ZXJPcGVuKS53aXRoVmlld3BvcnRNYXJnaW4odGhpcy52aWV3cG9ydE1hcmdpbikud2l0aExvY2tlZFBvc2l0aW9uKHRoaXMubG9ja1Bvc2l0aW9uKS53aXRoVHJhbnNmb3JtT3JpZ2luT24odGhpcy50cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil9X2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKSk7cmV0dXJuIHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koZSksZX1fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luIGluc3RhbmNlb2Ygc20/dGhpcy5vcmlnaW4uZWxlbWVudFJlZjp0aGlzLm9yaWdpbn1fYXR0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5oYXNCYWNrZHJvcD10aGlzLmhhc0JhY2tkcm9wOnRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCl8fHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3RlbXBsYXRlUG9ydGFsKSx0aGlzLmhhc0JhY2tkcm9wP3RoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShlPT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoZSl9KTp0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjAmJih0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj10aGlzLl9wb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZShZeSgoKT0+dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjApKS5zdWJzY3JpYmUoZT0+e3RoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChlKSwwPT09dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSkpfV9kZXRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUWkpLHcoT2kpLHcoeWkpLHcoQ0opLHcoaXIsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIl1dLGlucHV0czp7b3JpZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsIm9yaWdpbiJdLHBvc2l0aW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJwb3NpdGlvbnMiXSxwb3NpdGlvblN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kiLCJwb3NpdGlvblN0cmF0ZWd5Il0sb2Zmc2V0WDpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIiwib2Zmc2V0WCJdLG9mZnNldFk6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsIm9mZnNldFkiXSx3aWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsIndpZHRoIl0saGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodCIsImhlaWdodCJdLG1pbldpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwibWluV2lkdGgiXSxtaW5IZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluSGVpZ2h0IiwibWluSGVpZ2h0Il0sYmFja2Ryb3BDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIiwiYmFja2Ryb3BDbGFzcyJdLHBhbmVsQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsInBhbmVsQ2xhc3MiXSx2aWV3cG9ydE1hcmdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiIsInZpZXdwb3J0TWFyZ2luIl0sc2Nyb2xsU3RyYXRlZ3k6WyJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJzY3JvbGxTdHJhdGVneSJdLG9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsIm9wZW4iXSxkaXNhYmxlQ2xvc2U6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIiwiZGlzYWJsZUNsb3NlIl0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iLCJ0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvciJdLGhhc0JhY2tkcm9wOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiaGFzQmFja2Ryb3AiXSxsb2NrUG9zaXRpb246WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwibG9ja1Bvc2l0aW9uIl0sZmxleGlibGVEaW1lbnNpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImZsZXhpYmxlRGltZW5zaW9ucyJdLGdyb3dBZnRlck9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImdyb3dBZnRlck9wZW4iXSxwdXNoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2giLCJwdXNoIl19LG91dHB1dHM6e2JhY2tkcm9wQ2xpY2s6ImJhY2tkcm9wQ2xpY2siLHBvc2l0aW9uQ2hhbmdlOiJwb3NpdGlvbkNoYW5nZSIsYXR0YWNoOiJhdHRhY2giLGRldGFjaDoiZGV0YWNoIixvdmVybGF5S2V5ZG93bjoib3ZlcmxheUtleWRvd24iLG92ZXJsYXlPdXRzaWRlQ2xpY2s6Im92ZXJsYXlPdXRzaWRlQ2xpY2sifSxleHBvcnRBczpbImNka0Nvbm5lY3RlZE92ZXJsYXkiXSxmZWF0dXJlczpbenRdfSksbn0pKCkseERlPXtwcm92aWRlOkNKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sVm89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUWkseERlXSxpbXBvcnRzOltXcCx3YyxDZCxDZF19KSxufSkoKTtmdW5jdGlvbiBDRGUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIpKDEsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5hY3Rpb24oKSl9KSxEKDIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMikseXQoZS5kYXRhLmFjdGlvbil9fWZ1bmN0aW9uIHdEZShuLHQpe312YXIgSEE9bmV3IHNlKCJNYXRTbmFja0JhckRhdGEiKSxMXz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19LE1EZT1NYXRoLnBvdygyLDMxKS0xLGFtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBUZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgVGUsdGhpcy5fb25BY3Rpb249bmV3IFRlLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0Ll9vbkV4aXQuc3Vic2NyaWJlKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpfWRpc21pc3MoKXt0aGlzLl9hZnRlckRpc21pc3NlZC5jbG9zZWR8fHRoaXMuY29udGFpbmVySW5zdGFuY2UuZXhpdCgpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9ZGlzbWlzc1dpdGhBY3Rpb24oKXt0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fCh0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMCx0aGlzLl9vbkFjdGlvbi5uZXh0KCksdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLmRpc21pc3MoKSksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1jbG9zZVdpdGhBY3Rpb24oKXt0aGlzLmRpc21pc3NXaXRoQWN0aW9uKCl9X2Rpc21pc3NBZnRlcih0KXt0aGlzLl9kdXJhdGlvblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLmRpc21pc3MoKSxNYXRoLm1pbih0LE1EZSkpfV9vcGVuKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfV9maW5pc2hEaXNtaXNzKCl7dGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb25BY3Rpb24uY2xvc2VkfHx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoe2Rpc21pc3NlZEJ5QWN0aW9uOnRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9ufSksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMX1hZnRlckRpc21pc3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZH1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfW9uQWN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQWN0aW9ufX0sU0RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnNuYWNrQmFyUmVmPWUsdGhpcy5kYXRhPWl9YWN0aW9uKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzV2l0aEFjdGlvbigpfWdldCBoYXNBY3Rpb24oKXtyZXR1cm4hIXRoaXMuZGF0YS5hY3Rpb259fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzaW1wbGUtc25hY2stYmFyIl1dLGhvc3RBdHRyczpbMSwibWF0LXNpbXBsZS1zbmFja2JhciJdLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsIm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnQiXSxbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iLDQsIm5nSWYiXSxbMSwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsQ0RlLDMsMSwiZGl2IiwxKSksMiZlJiYoeCgxKSx5dChpLmRhdGEubWVzc2FnZSkseCgxKSxiKCJuZ0lmIixpLmhhc0FjdGlvbikpfSxkZXBlbmRlbmNpZXM6W1hlLCRuXSxzdHlsZXM6WyIubWF0LXNpbXBsZS1zbmFja2JhcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntmbGV4LXNocmluazowO21hcmdpbjotOHB4IC04cHggLThweCA4cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIGJ1dHRvbnttYXgtaGVpZ2h0OjM2cHg7bWluLXdpZHRoOjB9W2Rpcj1ydGxdIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbnttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDo4cHh9Lm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRURlPXtzbmFja0JhclN0YXRlOkhyKCJzdGF0ZSIsW0VpKCJ2b2lkLCBoaWRkZW4iLHJuKHt0cmFuc2Zvcm06InNjYWxlKDAuOCkiLG9wYWNpdHk6MH0pKSxFaSgidmlzaWJsZSIscm4oe3RyYW5zZm9ybToic2NhbGUoMSkiLG9wYWNpdHk6MX0pKSxJaSgiKiA9PiB2aXNpYmxlIixWaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksSWkoIiogPT4gdm9pZCwgKiA9PiBoaWRkZW4iLFZpKCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LFREZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nWm9uZT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1zLHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyBUZSx0aGlzLl9vbkV4aXQ9bmV3IFRlLHRoaXMuX29uRW50ZXI9bmV3IFRlLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLmF0dGFjaERvbVBvcnRhbD1hPT57dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgbD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKGEpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksbH0sdGhpcy5fbGl2ZT0iYXNzZXJ0aXZlIiE9PXMucG9saXRlbmVzc3x8cy5hbm5vdW5jZW1lbnRNZXNzYWdlPyJvZmYiPT09cy5wb2xpdGVuZXNzPyJvZmYiOiJwb2xpdGUiOiJhc3NlcnRpdmUiLHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gmJigicG9saXRlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJzdGF0dXMiKSwiYXNzZXJ0aXZlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJhbGVydCIpKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9b25BbmltYXRpb25FbmQoZSl7bGV0e2Zyb21TdGF0ZTppLHRvU3RhdGU6cn09ZTtpZigoInZvaWQiPT09ciYmInZvaWQiIT09aXx8ImhpZGRlbiI9PT1yKSYmdGhpcy5fY29tcGxldGVFeGl0KCksInZpc2libGUiPT09cil7bGV0IG89dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgpPT57by5uZXh0KCksby5jb21wbGV0ZSgpfSl9fWVudGVyKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZpc2libGUiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpKX1leGl0KCl7cmV0dXJuIHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25TdGF0ZT0iaGlkZGVuIix0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXQtZXhpdCIsIiIpLGNsZWFyVGltZW91dCh0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCl9KSx0aGlzLl9vbkV4aXR9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY29tcGxldGVFeGl0KCl9X2NvbXBsZXRlRXhpdCgpe3RoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9vbkV4aXQubmV4dCgpLHRoaXMuX29uRXhpdC5jb21wbGV0ZSgpfSl9KX1fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuc25hY2tCYXJDb25maWcucGFuZWxDbGFzcztpJiYoQXJyYXkuaXNBcnJheShpKT9pLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKTplLmNsYXNzTGlzdC5hZGQoaSkpfV9hc3NlcnROb3RBdHRhY2hlZCgpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWhpZGRlbl0iKSxpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1saXZlXSIpO2lmKGUmJmkpe2xldCByPW51bGw7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJihyPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGkuYXBwZW5kQ2hpbGQoZSkscj8uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSx0aGlzLl9hbm5vdW5jZURlbGF5KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KHVpKSx3KExfKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxmZWF0dXJlczpbdHRdfSksbn0pKCksRERlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBURGV7X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtzdXBlci5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLWNlbnRlciIpLCJ0b3AiPT09dGhpcy5zbmFja0JhckNvbmZpZy52ZXJ0aWNhbFBvc2l0aW9uJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNuYWNrLWJhci1jb250YWluZXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZpMCgiQHN0YXRlLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQW5pbWF0aW9uRW5kKG8pfSksMiZlJiZyMCgiQHN0YXRlIixpLl9hbmltYXRpb25TdGF0ZSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSx3RGUsMCwwLCJuZy10ZW1wbGF0ZSIsMSksdigpLE4oMiwiZGl2IikpLDImZSYmKHgoMiksemUoImFyaWEtbGl2ZSIsaS5fbGl2ZSkoInJvbGUiLGkuX3JvbGUpKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjoyNHB4O21heC13aWR0aDozM3Z3O21pbi13aWR0aDozNDRweDtwYWRkaW5nOjE0cHggMTZweDttaW4taGVpZ2h0OjQ4cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH0ubWF0LXNuYWNrLWJhci1oYW5kc2V0e3dpZHRoOjEwMCV9Lm1hdC1zbmFjay1iYXItaGFuZHNldCAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7bWFyZ2luOjhweDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W0VEZS5zbmFja0JhclN0YXRlXX19KSxufSkoKSxyNT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVm8sd2Msa2UsUmksZG4sZG5dfSksbn0pKCksd0o9bmV3IHNlKCJtYXQtc25hY2stYmFyLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExffX0pLElEZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fbGl2ZT1pLHRoaXMuX2luamVjdG9yPXIsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPW8sdGhpcy5fcGFyZW50U25hY2tCYXI9cyx0aGlzLl9kZWZhdWx0Q29uZmlnPWEsdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfWdldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtsZXQgZT10aGlzLl9wYXJlbnRTbmFja0JhcjtyZXR1cm4gZT9lLl9vcGVuZWRTbmFja0JhclJlZjp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsfXNldCBfb3BlbmVkU25hY2tCYXJSZWYoZSl7dGhpcy5fcGFyZW50U25hY2tCYXI/dGhpcy5fcGFyZW50U25hY2tCYXIuX29wZW5lZFNuYWNrQmFyUmVmPWU6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1lfW9wZW5Gcm9tQ29tcG9uZW50KGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW5Gcm9tVGVtcGxhdGUoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbihlLGk9IiIscil7bGV0IG89ey4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4ucn07cmV0dXJuIG8uZGF0YT17bWVzc2FnZTplLGFjdGlvbjppfSxvLmFubm91bmNlbWVudE1lc3NhZ2U9PT1lJiYoby5hbm5vdW5jZW1lbnRNZXNzYWdlPXZvaWQgMCksdGhpcy5vcGVuRnJvbUNvbXBvbmVudCh0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50LG8pfWRpc21pc3MoKXt0aGlzLl9vcGVuZWRTbmFja0JhclJlZiYmdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpfW5nT25EZXN0cm95KCl7dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCYmdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCl9X2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKGUsaSl7bGV0IG89em4uY3JlYXRlKHtwYXJlbnQ6aSYmaS52aWV3Q29udGFpbmVyUmVmJiZpLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6TF8sdXNlVmFsdWU6aX1dfSkscz1uZXcgQ2ModGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxpLnZpZXdDb250YWluZXJSZWYsbyksYT1lLmF0dGFjaChzKTtyZXR1cm4gYS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1pLGEuaW5zdGFuY2V9X2F0dGFjaChlLGkpe2xldCByPXsuLi5uZXcgTF8sLi4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5pfSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkocikscz10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLHIpLGE9bmV3IGFtKHMsbyk7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgbD1uZXcgaHMoZSxudWxsLHskaW1wbGljaXQ6ci5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwobCl9ZWxzZXtsZXQgbD10aGlzLl9jcmVhdGVJbmplY3RvcihyLGEpLGM9bmV3IENjKGUsdm9pZCAwLGwpLHU9cy5hdHRhY2hDb21wb25lbnRQb3J0YWwoYyk7YS5pbnN0YW5jZT11Lmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLnBpcGUob3Qoby5kZXRhY2htZW50cygpKSkuc3Vic2NyaWJlKGw9PntvLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MsbC5tYXRjaGVzKX0pLHIuYW5ub3VuY2VtZW50TWVzc2FnZSYmcy5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKHIuYW5ub3VuY2VtZW50TWVzc2FnZSxyLnBvbGl0ZW5lc3MpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKGEsciksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9YSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn1fYW5pbWF0ZVNuYWNrQmFyKGUsaSl7ZS5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT1lJiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksaS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9PntlLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOmUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxpLmR1cmF0aW9uJiZpLmR1cmF0aW9uPjAmJmUuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCk9PmUuX2Rpc21pc3NBZnRlcihpLmR1cmF0aW9uKSl9X2NyZWF0ZU92ZXJsYXkoZSl7bGV0IGk9bmV3IERsO2kuZGlyZWN0aW9uPWUuZGlyZWN0aW9uO2xldCByPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxvPSJydGwiPT09ZS5kaXJlY3Rpb24scz0ibGVmdCI9PT1lLmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFzJiYiY2VudGVyIiE9PWUuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBzP3IubGVmdCgiMCIpOmE/ci5yaWdodCgiMCIpOnIuY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT1lLnZlcnRpY2FsUG9zaXRpb24/ci50b3AoIjAiKTpyLmJvdHRvbSgiMCIpLGkucG9zaXRpb25TdHJhdGVneT1yLHRoaXMuX292ZXJsYXkuY3JlYXRlKGkpfV9jcmVhdGVJbmplY3RvcihlLGkpe3JldHVybiB6bi5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTphbSx1c2VWYWx1ZTppfSx7cHJvdmlkZTpIQSx1c2VWYWx1ZTplLmRhdGF9XX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKFVDKSxSKHpuKSxSKG5tKSxSKG4sMTIpLFIod0opKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNSj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlLGkscixvLHMsYSksdGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudD1TRGUsdGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudD1ERGUsdGhpcy5oYW5kc2V0Q3NzQ2xhc3M9Im1hdC1zbmFjay1iYXItaGFuZHNldCJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoVUMpLFIoem4pLFIobm0pLFIobiwxMiksUih3SikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOnI1fSksbn0pKCksUERlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxFSj0iXFx1MDAwMC1cXHUwMDIwXFx1MDA3Zi1cXHUwMDlmIixPRGU9bmV3IFJlZ0V4cCgiKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06XFwvXFwvfGRhdGE6fHd3d1xcLilbXlxccyIrRUorJyJdezIsfVteXFxzJytFSisiXCInKX1cXF0sOjsuIT9dIiwiZ3UiKTtmdW5jdGlvbiBESihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXt0LmZsYWdzLmluY2x1ZGVzKCJnIil8fCh0PW5ldyBSZWdFeHAodCx0LmZsYWdzKyJnIikpO2xldCBlPVtdLGk9MDtmb3IobGV0IHIgb2Ygbi5tYXRjaEFsbCh0KSl7bGV0IG89ci5pbmRleCxzPXJbMF07bz5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG8pLG1hdGNoZXNSZWdleDohMX0pLGUucHVzaCh7aW5kZXg6byx0ZXh0OnMsbWF0Y2hlc1JlZ2V4OiEwfSksaT1vK3MubGVuZ3RofXJldHVybiBuLmxlbmd0aD5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG4ubGVuZ3RoKSxtYXRjaGVzUmVnZXg6ITF9KSxlfShuLE9EZSkubWFwKCh7bWF0Y2hlc1JlZ2V4OnQsdGV4dDplfSk9Pih7aXNVUkw6dCx0ZXh0OmV9KSl9ZnVuY3Rpb24ga0RlKG4sdCl7aWYoMSZuJiYoS3QoMCksRCgxKSxadCgpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7eCgxKSxxZSgiICIsZS50ZXh0LCIgIil9fWZ1bmN0aW9uIEZEZShuLHQpe2lmKDEmbiYmKGcoMCwiYSIsNyksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4cigiaHJlZiIsZS50ZXh0LGRsKSx4KDEpLHl0KGUudGV4dCl9fWZ1bmN0aW9uIE5EZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxrRGUsMiwxLCJuZy1jb250YWluZXIiLDUpLEUoMixGRGUsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoMyk7eCgxKSxiKCJuZ0lmIiwhZS5pc1VSTCkoIm5nSWZFbHNlIixpKX19ZnVuY3Rpb24gTERlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO3goMSkscWUoIiAiLGUuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19dmFyIEFKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLnVua25vd25EYXRhPWksdGhpcy5zdG9yZT1yLHRoaXMuc3BsaXRCeVVSTD1ESix0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbih0aGlzLnN0b3JlKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGUpfW9uQ2xvc2VCdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpLHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydC1kaXNwbGF5LXNuYWNrYmFyIl1dLGRlY2xzOjYsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gY2xvc2UgdGhlIHNuYWNrYmFyIG1lc3NhZ2XikJ9lYTRkOWZlNjE0MjBhM2ZjZTgxY2Y1NGM0YzYxNWUzYzE5YzY0NmE24pCfMTUzNjA4NzUxOTc0MzcwNzM2MjpEaXNtaXNzYCxbWzEsIm1lc3NhZ2UiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJkaXNtaXNzLWJ1dHRvbiIsMywiY2xpY2siXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsaW5rUGllY2UiLCIiXSxbInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLDMsImhyZWYiXSxbIm1hdC1idXR0b24iLCIiLDEsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSxORGUsNCwyLCJuZy1jb250YWluZXIiLDEpLHYoKSxnKDIsImRpdiIsMiksRSgzLExEZSwyLDEsImJ1dHRvbiIsMyksZyg0LCJidXR0b24iLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VCdXR0b25DbGlja2VkKCl9KSxEKDUsIiBEaXNtaXNzICIpLHYoKSgpKSwyJmUmJih4KDEpLGIoIm5nRm9yT2YiLGkuc3BsaXRCeVVSTChpLmFsZXJ0LmxvY2FsaXplZE1lc3NhZ2UpKSx4KDIpLGIoIm5nSWYiLGkuYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbjo1cHggMDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tbGVmdDphdXRvfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSUo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLnNuYWNrQmFyPWksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuc2VsZWN0KFJLKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoZT0+Qm9vbGVhbihlKSkpLnN1YnNjcmliZShlPT57dGhpcy5zaG93QWxlcnQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvd0FsZXJ0KGUpe3RoaXMuc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoQUose2R1cmF0aW9uOjVlMyxob3Jpem9udGFsUG9zaXRpb246InN0YXJ0Iix2ZXJ0aWNhbFBvc2l0aW9uOiJib3R0b20iLGRhdGE6ZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1KKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnQtc25hY2tiYXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFVBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxSaSxyNV19KSxufSkoKSx6QT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbdnUsVUEsUnIuZm9yRmVhdHVyZSgiYWxlcnRzIixCWiksTG8uZm9yRmVhdHVyZShbTFpdKV19KSxufSkoKTtmdW5jdGlvbiBWRGUobix0KXt9dmFyIGxtPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yb2xlPSJkaWFsb2ciLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuYmFja2Ryb3BDbGFzcz0iIix0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLndpZHRoPSIiLHRoaXMuaGVpZ2h0PSIiLHRoaXMuZGF0YT1udWxsLHRoaXMuYXJpYURlc2NyaWJlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWxsZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5hcmlhTW9kYWw9ITAsdGhpcy5hdXRvRm9jdXM9ImZpcnN0LXRhYmJhYmxlIix0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmNsb3NlT25OYXZpZ2F0aW9uPSEwLHRoaXMuY2xvc2VPbkRlc3Ryb3k9ITB9fSxzNT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWksdGhpcy5fY29uZmlnPW8sdGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXI9cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdmVybGF5UmVmPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9bnVsbCx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXU9Pnt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgZD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKHUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxkfSx0aGlzLl9hcmlhTGFiZWxsZWRCeT10aGlzLl9jb25maWcuYXJpYUxhYmVsbGVkQnl8fG51bGwsdGhpcy5fZG9jdW1lbnQ9cn1fY29udGVudEF0dGFjaGVkKCl7dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCksdGhpcy5fY2FwdHVyZUluaXRpYWxGb2N1cygpfV9jYXB0dXJlSW5pdGlhbEZvY3VzKCl7dGhpcy5fdHJhcEZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXN0b3JlRm9jdXMoKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLGl9X3JlY2FwdHVyZUZvY3VzKCl7dGhpcy5fY29udGFpbnNGb2N1cygpfHx0aGlzLl90cmFwRm9jdXMoKX1fZm9yY2VGb2N1cyhlLGkpe3RoaXMuX2ludGVyYWN0aXZpdHlDaGVja2VyLmlzRm9jdXNhYmxlKGUpfHwoZS50YWJJbmRleD0tMSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgcj0oKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfTtlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixyKX0pKSxlLmZvY3VzKGkpfV9mb2N1c0J5Q3NzU2VsZWN0b3IoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlKTtyJiZ0aGlzLl9mb3JjZUZvY3VzKHIsaSl9X3RyYXBGb2N1cygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtzd2l0Y2godGhpcy5fY29uZmlnLmF1dG9Gb2N1cyl7Y2FzZSExOmNhc2UiZGlhbG9nIjp0aGlzLl9jb250YWluc0ZvY3VzKCl8fGUuZm9jdXMoKTticmVhaztjYXNlITA6Y2FzZSJmaXJzdC10YWJiYWJsZSI6dGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGk9PntpfHx0aGlzLl9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpfSk7YnJlYWs7Y2FzZSJmaXJzdC1oZWFkaW5nIjp0aGlzLl9mb2N1c0J5Q3NzU2VsZWN0b3IoJ2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIFtyb2xlPSJoZWFkaW5nIl0nKTticmVhaztkZWZhdWx0OnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3Rvcih0aGlzLl9jb25maWcuYXV0b0ZvY3VzKX19X3Jlc3RvcmVGb2N1cygpe2xldCBlPXRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMsaT1udWxsO2lmKCJzdHJpbmciPT10eXBlb2YgZT9pPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ImJvb2xlYW4iPT10eXBlb2YgZT9pPWU/dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ6bnVsbDplJiYoaT1lKSx0aGlzLl9jb25maWcucmVzdG9yZUZvY3VzJiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5mb2N1cyl7bGV0IHI9TkMoKSxvPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsoIXJ8fHI9PT10aGlzLl9kb2N1bWVudC5ib2R5fHxyPT09b3x8by5jb250YWlucyhyKSkmJih0aGlzLl9mb2N1c01vbml0b3I/KHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYShpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlKSx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsKTppLmZvY3VzKCkpfXRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9TkMoKTtyZXR1cm4gZT09PWl8fGUuY29udGFpbnMoaSl9X2luaXRpYWxpemVGb2N1c1RyYXAoKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9kb2N1bWVudCYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkPU5DKCkpfV9oYW5kbGVCYWNrZHJvcENsaWNrcygpe3RoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NvbmZpZy5kaXNhYmxlQ2xvc2UmJnRoaXMuX3JlY2FwdHVyZUZvY3VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCQyksdyhCdCw4KSx3KGxtKSx3KElfKSx3KHB0KSx3KFR1KSx3KHpyKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLWRpYWxvZy1jb250YWluZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIi0xIiwxLCJjZGstZGlhbG9nLWNvbnRhaW5lciJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuX2NvbmZpZy5pZHx8bnVsbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpfSxmZWF0dXJlczpbdHRdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkUoMCxWRGUsMCwwLCJuZy10ZW1wbGF0ZSIsMCl9LGRlcGVuZGVuY2llczpbQnNdLHN0eWxlczpbIi5jZGstZGlhbG9nLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDppbmhlcml0O21heC1oZWlnaHQ6aW5oZXJpdH0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMub3ZlcmxheVJlZj10LHRoaXMuY29uZmlnPWUsdGhpcy5jbG9zZWQ9bmV3IFRlLHRoaXMuZGlzYWJsZUNsb3NlPWUuZGlzYWJsZUNsb3NlLHRoaXMuYmFja2Ryb3BDbGljaz10LmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHM9dC5rZXlkb3duRXZlbnRzKCksdGhpcy5vdXRzaWRlUG9pbnRlckV2ZW50cz10Lm91dHNpZGVQb2ludGVyRXZlbnRzKCksdGhpcy5pZD1lLmlkLHRoaXMua2V5ZG93bkV2ZW50cy5zdWJzY3JpYmUoaT0+ezI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46ImtleWJvYXJkIn0pKX0pLHRoaXMuYmFja2Ryb3BDbGljay5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRpc2FibGVDbG9zZXx8dGhpcy5jbG9zZSh2b2lkIDAse2ZvY3VzT3JpZ2luOiJtb3VzZSJ9KX0pfWNsb3NlKHQsZSl7aWYodGhpcy5jb250YWluZXJJbnN0YW5jZSl7bGV0IGk9dGhpcy5jbG9zZWQ7dGhpcy5jb250YWluZXJJbnN0YW5jZS5fY2xvc2VJbnRlcmFjdGlvblR5cGU9ZT8uZm9jdXNPcmlnaW58fCJwcm9ncmFtIix0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpLGkubmV4dCh0KSxpLmNvbXBsZXRlKCksdGhpcy5jb21wb25lbnRJbnN0YW5jZT10aGlzLmNvbnRhaW5lckluc3RhbmNlPW51bGx9fXVwZGF0ZVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXN9dXBkYXRlU2l6ZSh0PSIiLGU9IiIpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXN9YWRkUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3ModCksdGhpc31yZW1vdmVQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcyh0KSx0aGlzfX0sUEo9bmV3IHNlKCJEaWFsb2dTY3JvbGxTdHJhdGVneSIpLEhEZT1uZXcgc2UoIkRpYWxvZ0RhdGEiKSxVRGU9bmV3IHNlKCJEZWZhdWx0RGlhbG9nQ29uZmlnIiksakRlPXtwcm92aWRlOlBKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LEdEZT0wLGE1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1zLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWF9Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfW9wZW4oZSxpKXsoaT17Li4udGhpcy5fZGVmYXVsdE9wdGlvbnN8fG5ldyBsbSwuLi5pfSkuaWQ9aS5pZHx8ImNkay1kaWFsb2ctIitHRGUrKyxpLmlkJiZ0aGlzLmdldERpYWxvZ0J5SWQoaS5pZCk7bGV0IG89dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhpKSxzPXRoaXMuX292ZXJsYXkuY3JlYXRlKG8pLGE9bmV3IFFDKHMsaSksbD10aGlzLl9hdHRhY2hDb250YWluZXIocyxhLGkpO3JldHVybiBhLmNvbnRhaW5lckluc3RhbmNlPWwsdGhpcy5fYXR0YWNoRGlhbG9nQ29udGVudChlLGEsbCxpKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpLHRoaXMub3BlbkRpYWxvZ3MucHVzaChhKSxhLmNsb3NlZC5zdWJzY3JpYmUoKCk9PnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coYSwhMCkpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChhKSxhfWNsb3NlQWxsKCl7bzUodGhpcy5vcGVuRGlhbG9ncyxlPT5lLmNsb3NlKCkpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXtvNSh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PnshMT09PWUuY29uZmlnLmNsb3NlT25EZXN0cm95JiZ0aGlzLl9yZW1vdmVPcGVuRGlhbG9nKGUsITEpfSksbzUodGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCxlPT5lLmNsb3NlKCkpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXX1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtsZXQgaT1uZXcgRGwoe3Bvc2l0aW9uU3RyYXRlZ3k6ZS5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLHNjcm9sbFN0cmF0ZWd5OmUuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCkscGFuZWxDbGFzczplLnBhbmVsQ2xhc3MsaGFzQmFja2Ryb3A6ZS5oYXNCYWNrZHJvcCxkaXJlY3Rpb246ZS5kaXJlY3Rpb24sbWluV2lkdGg6ZS5taW5XaWR0aCxtaW5IZWlnaHQ6ZS5taW5IZWlnaHQsbWF4V2lkdGg6ZS5tYXhXaWR0aCxtYXhIZWlnaHQ6ZS5tYXhIZWlnaHQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGlzcG9zZU9uTmF2aWdhdGlvbjplLmNsb3NlT25OYXZpZ2F0aW9ufSk7cmV0dXJuIGUuYmFja2Ryb3BDbGFzcyYmKGkuYmFja2Ryb3BDbGFzcz1lLmJhY2tkcm9wQ2xhc3MpLGl9X2F0dGFjaENvbnRhaW5lcihlLGkscil7bGV0IGEsbz1yLmluamVjdG9yfHxyLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLHM9W3twcm92aWRlOmxtLHVzZVZhbHVlOnJ9LHtwcm92aWRlOlFDLHVzZVZhbHVlOml9LHtwcm92aWRlOlR1LHVzZVZhbHVlOmV9XTtyLmNvbnRhaW5lcj8iZnVuY3Rpb24iPT10eXBlb2Ygci5jb250YWluZXI/YT1yLmNvbnRhaW5lcjooYT1yLmNvbnRhaW5lci50eXBlLHMucHVzaCguLi5yLmNvbnRhaW5lci5wcm92aWRlcnMocikpKTphPXM1O2xldCBsPW5ldyBDYyhhLHIudmlld0NvbnRhaW5lclJlZix6bi5jcmVhdGUoe3BhcmVudDpvfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6c30pLHIuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtyZXR1cm4gZS5hdHRhY2gobCkuaW5zdGFuY2V9X2F0dGFjaERpYWxvZ0NvbnRlbnQoZSxpLHIsbyl7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgcz10aGlzLl9jcmVhdGVJbmplY3RvcihvLGkscix2b2lkIDApLGE9eyRpbXBsaWNpdDpvLmRhdGEsZGlhbG9nUmVmOml9O28udGVtcGxhdGVDb250ZXh0JiYoYT17Li4uYSwuLi4iZnVuY3Rpb24iPT10eXBlb2Ygby50ZW1wbGF0ZUNvbnRleHQ/by50ZW1wbGF0ZUNvbnRleHQoKTpvLnRlbXBsYXRlQ29udGV4dH0pLHIuYXR0YWNoVGVtcGxhdGVQb3J0YWwobmV3IGhzKGUsbnVsbCxhLHMpKX1lbHNle2xldCBzPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHRoaXMuX2luamVjdG9yKSxhPXIuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG5ldyBDYyhlLG8udmlld0NvbnRhaW5lclJlZixzLG8uY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSk7aS5jb21wb25lbnRJbnN0YW5jZT1hLmluc3RhbmNlfX1fY3JlYXRlSW5qZWN0b3IoZSxpLHIsbyl7bGV0IHM9ZS5pbmplY3Rvcnx8ZS52aWV3Q29udGFpbmVyUmVmPy5pbmplY3RvcixhPVt7cHJvdmlkZTpIRGUsdXNlVmFsdWU6ZS5kYXRhfSx7cHJvdmlkZTpRQyx1c2VWYWx1ZTppfV07cmV0dXJuIGUucHJvdmlkZXJzJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUucHJvdmlkZXJzP2EucHVzaCguLi5lLnByb3ZpZGVycyhpLGUscikpOmEucHVzaCguLi5lLnByb3ZpZGVycykpLGUuZGlyZWN0aW9uJiYoIXN8fCFzLmdldChpcixudWxsLGlpLk9wdGlvbmFsKSkmJmEucHVzaCh7cHJvdmlkZTppcix1c2VWYWx1ZTp7dmFsdWU6ZS5kaXJlY3Rpb24sY2hhbmdlOmp0KCl9fSksem4uY3JlYXRlKHtwYXJlbnQ6c3x8byxwcm92aWRlcnM6YX0pfV9yZW1vdmVPcGVuRGlhbG9nKGUsaSl7bGV0IHI9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKGUpO3I+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShyLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHwodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmZvckVhY2goKG8scyk9PntvP3Muc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsbyk6cy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIil9KSx0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuY2xlYXIoKSxpJiZ0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSkpfV9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCk7aWYoZS5wYXJlbnRFbGVtZW50KXtsZXQgaT1lLnBhcmVudEVsZW1lbnQuY2hpbGRyZW47Zm9yKGxldCByPWkubGVuZ3RoLTE7cj4tMTtyLS0pe2xldCBvPWlbcl07byE9PWUmJiJTQ1JJUFQiIT09by5ub2RlTmFtZSYmIlNUWUxFIiE9PW8ubm9kZU5hbWUmJiFvLmhhc0F0dHJpYnV0ZSgiYXJpYS1saXZlIikmJih0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuc2V0KG8sby5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpLG8uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSl9fX1fZ2V0QWZ0ZXJBbGxDbG9zZWQoKXtsZXQgZT10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIGU/ZS5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKHpuKSxSKFVEZSw4KSxSKG4sMTIpLFIoTl8pLFIoUEopKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBvNShuLHQpe2xldCBlPW4ubGVuZ3RoO2Zvcig7ZS0tOyl0KG5bZV0pfXZhciBSSj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthNSxqRGVdLGltcG9ydHM6W1ZvLHdjLFBfLHdjXX0pLG59KSgpO2Z1bmN0aW9uIFdEZShuLHQpe312YXIgQl89e3BhcmFtczp7ZW50ZXJBbmltYXRpb25EdXJhdGlvbjoiMTUwbXMiLGV4aXRBbmltYXRpb25EdXJhdGlvbjoiNzVtcyJ9fSxxRGU9e2RpYWxvZ0NvbnRhaW5lcjpIcigiZGlhbG9nQ29udGFpbmVyIixbRWkoInZvaWQsIGV4aXQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxFaSgiZW50ZXIiLHJuKHt0cmFuc2Zvcm06Im5vbmUifSkpLElpKCIqID0+IGVudGVyIixIMyhbVmkoInt7ZW50ZXJBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7dHJhbnNmb3JtOiJub25lIixvcGFjaXR5OjF9KSksRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSksQl8pLElpKCIqID0+IHZvaWQsICogPT4gZXhpdCIsSDMoW1ZpKCJ7e2V4aXRBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIscm4oe29wYWNpdHk6MH0pKSxGZigiQCoiLGtmKCkse29wdGlvbmFsOiEwfSldKSxCXyldKX0sVl89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuZGVsYXlGb2N1c1RyYXA9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmVudGVyQW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmVudGVyQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5leGl0QW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmV4aXRBbmltYXRpb25EdXJhdGlvbn19LFlEZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgczV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGkscixvLHMsYSxsLGMpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgR31fY2FwdHVyZUluaXRpYWxGb2N1cygpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcHx8dGhpcy5fdHJhcEZvY3VzKCl9X29wZW5BbmltYXRpb25Eb25lKGUpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcCYmdGhpcy5fdHJhcEZvY3VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuZWQiLHRvdGFsVGltZTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxmZWF0dXJlczpbdHRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxYRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFlEZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIoZSxpLHIsbyxzLGEsbCx1KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1jLHRoaXMuX3N0YXRlPSJlbnRlciJ9X29uQW5pbWF0aW9uRG9uZSh7dG9TdGF0ZTplLHRvdGFsVGltZTppfSl7ImVudGVyIj09PWU/dGhpcy5fb3BlbkFuaW1hdGlvbkRvbmUoaSk6ImV4aXQiPT09ZSYmdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTppfSl9X29uQW5pbWF0aW9uU3RhcnQoe3RvU3RhdGU6ZSx0b3RhbFRpbWU6aX0peyJlbnRlciI9PT1lP3RoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmluZyIsdG90YWxUaW1lOml9KTooImV4aXQiPT09ZXx8InZvaWQiPT09ZSkmJnRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOml9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRBbmltYXRpb25TdGF0ZSgpe3JldHVybnt2YWx1ZTp0aGlzLl9zdGF0ZSxwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246dGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb258fEJfLnBhcmFtcy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uLGV4aXRBbmltYXRpb25EdXJhdGlvbjp0aGlzLl9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufHxCXy5wYXJhbXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyhubiksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmkwKCJAZGlhbG9nQ29udGFpbmVyLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25BbmltYXRpb25TdGFydChvKX0pKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkFuaW1hdGlvbkRvbmUobyl9KSwyJmUmJihBYSgiaWQiLGkuX2NvbmZpZy5pZCksemUoImFyaWEtbW9kYWwiLGkuX2NvbmZpZy5hcmlhTW9kYWwpKCJyb2xlIixpLl9jb25maWcucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpLHIwKCJAZGlhbG9nQ29udGFpbmVyIixpLl9nZXRBbmltYXRpb25TdGF0ZSgpKSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFdEZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9ucy5tYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyLC5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMubWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCwubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbcURlLmRpYWxvZ0NvbnRhaW5lcl19fSksbn0pKCksTWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IFRlLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcgVGUsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoSGUocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxIdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShIZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx1bih0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKEhlKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLE9KKHRoaXMsImtleWRvd24iPT09ci50eXBlPyJrZXlib2FyZCI6Im1vdXNlIikpfSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEhlKGU9PiJjbG9zaW5nIj09PWUuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX3JlZi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSxlLnRvdGFsVGltZSsxMDApfSksdGhpcy5fc3RhdGU9MSx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCl9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWR9YWZ0ZXJDbG9zZWQoKXtyZXR1cm4gdGhpcy5fcmVmLmNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fcmVmLmJhY2tkcm9wQ2xpY2t9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9yZWYua2V5ZG93bkV2ZW50c311cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9yZWYuY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3k7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9yZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fcmVmLnVwZGF0ZVNpemUodCxlKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fcmVmLnJlbW92ZVBhbmVsQ2xhc3ModCksdGhpc31nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1fZmluaXNoRGlhbG9nQ2xvc2UoKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3JlZi5jbG9zZSh0aGlzLl9yZXN1bHQse2ZvY3VzT3JpZ2luOnRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlfSksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsfX07ZnVuY3Rpb24gT0oobix0LGUpe3JldHVybiBuLl9jbG9zZUludGVyYWN0aW9uVHlwZT10LG4uY2xvc2UoZSl9dmFyIEtDPW5ldyBzZSgiTWF0RGlhbG9nRGF0YSIpLFFEZT1uZXcgc2UoIm1hdC1kaWFsb2ctZGVmYXVsdC1vcHRpb25zIiksa0o9bmV3IHNlKCJtYXQtZGlhbG9nLXNjcm9sbC1zdHJhdGVneSIpLFpEZT17cHJvdmlkZTprSixkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fSxKRGU9MCwkRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9wYXJlbnREaWFsb2c9byx0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcj1sLHRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGU9Yyx0aGlzLl9kaWFsb2dEYXRhVG9rZW49dSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2lkUHJlZml4PSJtYXQtZGlhbG9nLSIsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWEsdGhpcy5fZGlhbG9nPWkuZ2V0KGE1KX1nZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH1vcGVuKGUsaSl7bGV0IHI7KGk9ey4uLnRoaXMuX2RlZmF1bHRPcHRpb25zfHxuZXcgVl8sLi4uaX0pLmlkPWkuaWR8fGAke3RoaXMuX2lkUHJlZml4fSR7SkRlKyt9YCxpLnNjcm9sbFN0cmF0ZWd5PWkuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCk7bGV0IG89dGhpcy5fZGlhbG9nLm9wZW4oZSx7Li4uaSxwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksZGlzYWJsZUNsb3NlOiEwLGNsb3NlT25EZXN0cm95OiExLGNvbnRhaW5lcjp7dHlwZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHByb3ZpZGVyczooKT0+W3twcm92aWRlOlZfLHVzZVZhbHVlOml9LHtwcm92aWRlOmxtLHVzZVZhbHVlOml9XX0sdGVtcGxhdGVDb250ZXh0OigpPT4oe2RpYWxvZ1JlZjpyfSkscHJvdmlkZXJzOihzLGEsbCk9PihyPW5ldyB0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3RvcihzLGksbCksci51cGRhdGVQb3NpdGlvbihpPy5wb3NpdGlvbiksW3twcm92aWRlOnRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGUsdXNlVmFsdWU6bH0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nRGF0YVRva2VuLHVzZVZhbHVlOmEuZGF0YX0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IsdXNlVmFsdWU6cn1dKX0pO3JldHVybiByLmNvbXBvbmVudEluc3RhbmNlPW8uY29tcG9uZW50SW5zdGFuY2UsdGhpcy5vcGVuRGlhbG9ncy5wdXNoKHIpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChyKSxyLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpPT57bGV0IHM9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKHIpO3M+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShzLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSl9KSxyfWNsb3NlQWxsKCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMub3BlbkRpYWxvZ3MpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKX1fY2xvc2VEaWFsb2dzKGUpe2xldCBpPWUubGVuZ3RoO2Zvcig7aS0tOyllW2ldLmNsb3NlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE1jPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyAkRGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGksbyxhLGwscyxNZCxYRGUsS0MsYyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoem4pLFIoSHgsOCksUihRRGUsOCksUihrSiksUihuLDEyKSxSKE5fKSxSKExpLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxlQWU9MCxqQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmRpYWxvZ1JlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9kaWFsb2c9cix0aGlzLnR5cGU9ImJ1dHRvbiJ9bmdPbkluaXQoKXt0aGlzLmRpYWxvZ1JlZnx8KHRoaXMuZGlhbG9nUmVmPU5KKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5fbWF0RGlhbG9nQ2xvc2V8fGUuX21hdERpYWxvZ0Nsb3NlUmVzdWx0O2kmJih0aGlzLmRpYWxvZ1Jlc3VsdD1pLmN1cnJlbnRWYWx1ZSl9X29uQnV0dG9uQ2xpY2soZSl7T0oodGhpcy5kaWFsb2dSZWYsMD09PWUuc2NyZWVuWCYmMD09PWUuc2NyZWVuWT8ia2V5Ym9hcmQiOiJtb3VzZSIsdGhpcy5kaWFsb2dSZXN1bHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1kLDgpLHcoQWUpLHcoTWMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1jbG9zZSIsIiJdLFsiIiwibWF0RGlhbG9nQ2xvc2UiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25CdXR0b25DbGljayhvKX0pLDImZSYmemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgidHlwZSIsaS50eXBlKX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sdHlwZToidHlwZSIsZGlhbG9nUmVzdWx0OlsibWF0LWRpYWxvZy1jbG9zZSIsImRpYWxvZ1Jlc3VsdCJdLF9tYXREaWFsb2dDbG9zZTpbIm1hdERpYWxvZ0Nsb3NlIiwiX21hdERpYWxvZ0Nsb3NlIl19LGV4cG9ydEFzOlsibWF0RGlhbG9nQ2xvc2UiXSxmZWF0dXJlczpbenRdfSksbn0pKCksRko9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMuaWQ9Im1hdC1kaWFsb2ctdGl0bGUtIitlQWUrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1OSih0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhNZCw4KSx3KEFlKSx3KE1jKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy10aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZBYSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEdBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctY29udGVudCJdfSksbn0pKCksV0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWxpZ249InN0YXJ0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyIiwiY2VudGVyIj09PWkuYWxpZ24pKCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gTkoobix0KXtsZXQgZT1uLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2UmJiFlLmNsYXNzTGlzdC5jb250YWlucygibWF0LWRpYWxvZy1jb250YWluZXIiKTspZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGU/dC5maW5kKGk9PmkuaWQ9PT1lLmlkKTpudWxsfXZhciBIXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltNYyxaRGVdLGltcG9ydHM6W1JKLFZvLHdjLGRuLGRuXX0pLG59KSgpLHRBZT1bImNvbm5lY3Rpb25Db250YWluZXIiXSxuQWU9WyJpbnB1dENvbnRhaW5lciJdLGlBZT1bImxhYmVsIl07ZnVuY3Rpb24gckFlKG4sdCl7MSZuJiYoS3QoMCksZygxLCJkaXYiLDE0KSxOKDIsImRpdiIsMTUpKDMsImRpdiIsMTYpKDQsImRpdiIsMTcpLHYoKSxnKDUsImRpdiIsMTgpLE4oNiwiZGl2IiwxNSkoNywiZGl2IiwxNikoOCwiZGl2IiwxNyksdigpLFp0KCkpfWZ1bmN0aW9uIG9BZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTkpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLE5uKDEsMSksdigpfTImbiYmYigiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIm91dGxpbmUiIT1NKCkuYXBwZWFyYW5jZSl9ZnVuY3Rpb24gc0FlKG4sdCl7aWYoMSZuJiYoS3QoMCksTm4oMSwyKSxnKDIsInNwYW4iKSxEKDMpLHYoKSxadCgpKSwyJm4pe2xldCBlPU0oMik7eCgzKSx5dChlLl9jb250cm9sLnBsYWNlaG9sZGVyKX19ZnVuY3Rpb24gYUFlKG4sdCl7MSZuJiZObigwLDMsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBsQWUobix0KXsxJm4mJihnKDAsInNwYW4iLDIzKSxEKDEsIiAqIiksdigpKX1mdW5jdGlvbiBjQWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJsYWJlbCIsMjAsMjEpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLEUoMixzQWUsNCwxLCJuZy1jb250YWluZXIiLDEyKSxFKDMsYUFlLDEsMCwibmctY29udGVudCIsMTIpLEUoNCxsQWUsMiwwLCJzcGFuIiwyMiksdigpfWlmKDImbil7bGV0IGU9TSgpO2F0KCJtYXQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWZvcm0tZmllbGQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKSxiKCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwib3V0bGluZSIhPWUuYXBwZWFyYW5jZSkoImlkIixlLl9sYWJlbElkKSgibmdTd2l0Y2giLGUuX2hhc0xhYmVsKCkpLHplKCJmb3IiLGUuX2NvbnRyb2wuaWQpKCJhcmlhLW93bnMiLGUuX2NvbnRyb2wuaWQpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nSWYiLCFlLmhpZGVSZXF1aXJlZE1hcmtlciYmZS5fY29udHJvbC5yZXF1aXJlZCYmIWUuX2NvbnRyb2wuZGlzYWJsZWQpfX1mdW5jdGlvbiB1QWUobix0KXsxJm4mJihnKDAsImRpdiIsMjQpLE5uKDEsNCksdigpKX1mdW5jdGlvbiBkQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLE4oMSwic3BhbiIsMjYpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxhdCgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKX19ZnVuY3Rpb24gcEFlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxObigxLDUpLHYoKSksMiZuJiZiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixNKCkuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX1mdW5jdGlvbiBoQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMzApLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7YigiaWQiLGUuX2hpbnRMYWJlbElkKSx4KDEpLHl0KGUuaGludExhYmVsKX19ZnVuY3Rpb24gZkFlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI3KSxFKDEsaEFlLDIsMiwiZGl2IiwyOCksTm4oMiw2KSxOKDMsImRpdiIsMjkpLE5uKDQsNyksdigpKSwyJm4pe2xldCBlPU0oKTtiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixlLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSkseCgxKSxiKCJuZ0lmIixlLmhpbnRMYWJlbCl9fXZhciBtQWU9WyIqIixbWyIiLCJtYXRQcmVmaXgiLCIiXV0sW1sibWF0LXBsYWNlaG9sZGVyIl1dLFtbIm1hdC1sYWJlbCJdXSxbWyIiLCJtYXRTdWZmaXgiLCIiXV0sW1sibWF0LWVycm9yIl1dLFtbIm1hdC1oaW50IiwzLCJhbGlnbiIsImVuZCJdXSxbWyJtYXQtaGludCIsImFsaWduIiwiZW5kIl1dXSxnQWU9WyIqIiwiW21hdFByZWZpeF0iLCJtYXQtcGxhY2Vob2xkZXIiLCJtYXQtbGFiZWwiLCJbbWF0U3VmZml4XSIsIm1hdC1lcnJvciIsIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKSIsIm1hdC1oaW50W2FsaWduPSdlbmQnXSJdLF9BZT0wLFZKPW5ldyBzZSgiTWF0RXJyb3IiKSxISj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pZD0ibWF0LWVycm9yLSIrX0FlKyssZXx8aS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEtvKCJhcmlhLWxpdmUiKSx3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdXSxob3N0QXR0cnM6WyJhcmlhLWF0b21pYyIsInRydWUiLDEsIm1hdC1lcnJvciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VkosdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSx2QWU9e3RyYW5zaXRpb25NZXNzYWdlczpIcigidHJhbnNpdGlvbk1lc3NhZ2VzIixbRWkoImVudGVyIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwJSkifSkpLElpKCJ2b2lkID0+IGVudGVyIixbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTVweCkifSksVmkoIjMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfSxVXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHlBZT1uZXcgc2UoIk1hdEhpbnQiKSx6Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksbn0pKCksYkFlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcGxhY2Vob2xkZXIiXV19KSxufSkoKSx4QWU9bmV3IHNlKCJNYXRQcmVmaXgiKSxDQWU9bmV3IHNlKCJNYXRTdWZmaXgiKSxMSj0wLE1BZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSwicHJpbWFyeSIpLFNBZT1uZXcgc2UoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHVtPW5ldyBzZSgiTWF0Rm9ybUZpZWxkIiksRHU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE1BZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2RlZmF1bHRzPW8sdGhpcy5fcGxhdGZvcm09cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hMSx0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMSx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGludExhYmVsSWQ9Im1hdC1oaW50LSIrTEorKyx0aGlzLl9sYWJlbElkPSJtYXQtZm9ybS1maWVsZC1sYWJlbC0iK0xKKyssdGhpcy5mbG9hdExhYmVsPXRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9hbmltYXRpb25zRW5hYmxlZD0iTm9vcEFuaW1hdGlvbnMiIT09bCx0aGlzLmFwcGVhcmFuY2U9bz8uYXBwZWFyYW5jZXx8ImxlZ2FjeSIsbyYmKHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1Cb29sZWFuKG8uaGlkZVJlcXVpcmVkTWFya2VyKSxvLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1vLmNvbG9yKSl9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXtsZXQgaT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9ZXx8dGhpcy5fZGVmYXVsdHM/LmFwcGVhcmFuY2V8fCJsZWdhY3kiLCJvdXRsaW5lIj09PXRoaXMuX2FwcGVhcmFuY2UmJmkhPT1lJiYodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITApfWdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKXtyZXR1cm4gdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyfXNldCBoaWRlUmVxdWlyZWRNYXJrZXIoZSl7dGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPVd0KGUpfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9X2NhbkxhYmVsRmxvYXQoKXtyZXR1cm4ibmV2ZXIiIT09dGhpcy5mbG9hdExhYmVsfWdldCBoaW50TGFiZWwoKXtyZXR1cm4gdGhpcy5faGludExhYmVsfXNldCBoaW50TGFiZWwoZSl7dGhpcy5faGludExhYmVsPWUsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4ibGVnYWN5IiE9PXRoaXMuYXBwZWFyYW5jZSYmIm5ldmVyIj09PXRoaXMuX2Zsb2F0TGFiZWw/ImF1dG8iOnRoaXMuX2Zsb2F0TGFiZWx9c2V0IGZsb2F0TGFiZWwoZSl7ZSE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPWV8fHRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IF9jb250cm9sKCl7cmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbHx8dGhpcy5fY29udHJvbE5vblN0YXRpY3x8dGhpcy5fY29udHJvbFN0YXRpY31zZXQgX2NvbnRyb2woZSl7dGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sPWV9Z2V0TGFiZWxJZCgpe3JldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCk/dGhpcy5fbGFiZWxJZDpudWxsfWdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZnx8dGhpcy5fZWxlbWVudFJlZn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpO2xldCBlPXRoaXMuX2NvbnRyb2w7ZS5jb250cm9sVHlwZSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC1mb3JtLWZpZWxkLXR5cGUtJHtlLmNvbnRyb2xUeXBlfWApLGUuc3RhdGVDaGFuZ2VzLnBpcGUoVm4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxlLm5nQ29udHJvbCYmZS5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9KX0pLHVuKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsdGhpcy5fc3VmZml4Q2hpbGRyZW4uY2hhbmdlcykuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSx0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9wcm9jZXNzSGludHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZU91dGxpbmVHYXAoKSl9KTp0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCksdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHkmJnRoaXMudXBkYXRlT3V0bGluZUdhcCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2hvdWxkRm9yd2FyZChlKXtsZXQgaT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGkmJmlbZV19X2hhc1BsYWNlaG9sZGVyKCl7cmV0dXJuISEodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5wbGFjZWhvbGRlcnx8dGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl9X2hhc0xhYmVsKCl7cmV0dXJuISghdGhpcy5fbGFiZWxDaGlsZE5vblN0YXRpYyYmIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWMpfV9zaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQoKSYmKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdHx8dGhpcy5fc2hvdWxkQWx3YXlzRmxvYXQoKSl9X2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9X2hhc0Zsb2F0aW5nTGFiZWwoKXtyZXR1cm4gdGhpcy5faGFzTGFiZWwoKXx8ImxlZ2FjeSI9PT10aGlzLmFwcGVhcmFuY2UmJnRoaXMuX2hhc1BsYWNlaG9sZGVyKCl9X2dldERpc3BsYXllZE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJnRoaXMuX2Vycm9yQ2hpbGRyZW4ubGVuZ3RoPjAmJnRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZT8iZXJyb3IiOiJoaW50In1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJnRoaXMuX2xhYmVsJiYodGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITAsbGkodGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudCwidHJhbnNpdGlvbmVuZCIpLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Nob3dBbHdheXNBbmltYXRlPSExfSkpLHRoaXMuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCl7fV9wcm9jZXNzSGludHMoKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9X3ZhbGlkYXRlSGludHMoKXt9X2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmZsb2F0TGFiZWx8fCJhdXRvIn1fc3luY0Rlc2NyaWJlZEJ5SWRzKCl7aWYodGhpcy5fY29udHJvbCl7bGV0IGU9W107aWYodGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmZS5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgiICIpKSwiaGludCI9PT10aGlzLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKXtsZXQgaT10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+InN0YXJ0Ij09PW8uYWxpZ24pOm51bGwscj10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+ImVuZCI9PT1vLmFsaWduKTpudWxsO2k/ZS5wdXNoKGkuaWQpOnRoaXMuX2hpbnRMYWJlbCYmZS5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxyJiZlLnB1c2goci5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiZlLnB1c2goLi4udGhpcy5fZXJyb3JDaGlsZHJlbi5tYXAoaT0+aS5pZCkpO3RoaXMuX2NvbnRyb2wuc2V0RGVzY3JpYmVkQnlJZHMoZSl9fV92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpe311cGRhdGVPdXRsaW5lR2FwKCl7bGV0IGU9dGhpcy5fbGFiZWw/dGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudDpudWxsLGk9dGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LHI9Ii5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IixvPSIubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiO2lmKCJvdXRsaW5lIiE9PXRoaXMuYXBwZWFyYW5jZXx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIWV8fCFlLmNoaWxkcmVuLmxlbmd0aHx8IWUudGV4dENvbnRlbnQudHJpbSgpKXtsZXQgdT1pLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7cn0sICR7b31gKTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKyl1W2RdLnN0eWxlLndpZHRoPSIwIjtyZXR1cm59aWYoIXRoaXMuX2lzQXR0YWNoZWRUb0RPTSgpKXJldHVybiB2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSEwKTtsZXQgcz0wLGE9MCxsPWkucXVlcnlTZWxlY3RvckFsbChyKSxjPWkucXVlcnlTZWxlY3RvckFsbChvKTtpZih0aGlzLl9sYWJlbCYmdGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpe2xldCB1PWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PXUud2lkdGgmJjA9PT11LmhlaWdodClyZXR1cm4gdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdm9pZCh0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSk7bGV0IGQ9dGhpcy5fZ2V0U3RhcnRFbmQodSkscD1lLmNoaWxkcmVuLGg9dGhpcy5fZ2V0U3RhcnRFbmQocFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksZj0wO2ZvcihsZXQgbT0wO208cC5sZW5ndGg7bSsrKWYrPXBbbV0ub2Zmc2V0V2lkdGg7cz1NYXRoLmFicyhoLWQpLTUsYT1mPjA/Ljc1KmYrMTA6MH1mb3IobGV0IHU9MDt1PGwubGVuZ3RoO3UrKylsW3VdLnN0eWxlLndpZHRoPWAke3N9cHhgO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKWNbdV0uc3R5bGUud2lkdGg9YCR7YX1weGA7dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITF9X2dldFN0YXJ0RW5kKGUpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlP2UucmlnaHQ6ZS5sZWZ0fV9pc0F0dGFjaGVkVG9ET00oKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoZS5nZXRSb290Tm9kZSl7bGV0IGk9ZS5nZXRSb290Tm9kZSgpO3JldHVybiBpJiZpIT09ZX1yZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGlyLDgpLHcoU0FlLDgpLHcodWkpLHcocHQpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1mb3JtLWZpZWxkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLFVfLDUpLE5pKHIsVV8sNyksTmkocix6Xyw1KSxOaShyLHpfLDcpLE5pKHIsYkFlLDUpLE5pKHIsVkosNSksTmkocix5QWUsNSksTmkocix4QWUsNSksTmkocixDQWUsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2NvbnRyb2xOb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2NvbnRyb2xTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX3BsYWNlaG9sZGVyQ2hpbGQ9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKSxOZShvPUxlKCkpJiYoaS5fcHJlZml4Q2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX3N1ZmZpeENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodEFlLDcpLGx0KG5BZSw1KSxsdChpQWUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX2lucHV0Q29udGFpbmVyUmVmPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IiwibGVnYWN5Ij09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSgibWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IixpLl9jYW5MYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLGkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCIsaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciIsaS5faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpKSgibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixpLl9jb250cm9sLmF1dG9maWxsZWQpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsaGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGhpbnRMYWJlbDoiaGludExhYmVsIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOnVtLHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpnQWUsZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4IiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm5nU3dpdGNoIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsIiwiIl0sWyJjbGFzcyIsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIiwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2kobUFlKSxnKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxFKDMsckFlLDksMCwibmctY29udGFpbmVyIiwzKSxFKDQsb0FlLDIsMSwiZGl2Iiw0KSxnKDUsImRpdiIsNSw2KSxObig3KSxnKDgsInNwYW4iLDcpLEUoOSxjQWUsNSwxNiwibGFiZWwiLDgpLHYoKSgpLEUoMTAsdUFlLDIsMCwiZGl2Iiw5KSx2KCksRSgxMSxkQWUsMiw0LCJkaXYiLDEwKSxnKDEyLCJkaXYiLDExKSxFKDEzLHBBZSwyLDEsImRpdiIsMTIpLEUoMTQsZkFlLDUsMiwiZGl2IiwxMyksdigpKCkpLDImZSYmKHgoMyksYigibmdJZiIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdJZiIsaS5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSx4KDUpLGIoIm5nSWYiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSkseCgxKSxiKCJuZ0lmIixpLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLHgoMSksYigibmdJZiIsIm91dGxpbmUiIT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdTd2l0Y2giLGkuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsU19dLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwnLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO3BhZGRpbmc6Ljc1ZW0gLjc1ZW0gMCAuNzVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmUtY29sb3I6R3JheVRleHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6ZGFzaGVkIDNweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjFweDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGw6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye3BhZGRpbmc6MCAxZW19JywnLm1hdC1pbnB1dC1lbGVtZW50e2ZvbnQ6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207dGV4dC1hbGlnbjppbmhlcml0O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY29udGFjdHMtYXV0by1maWxsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2Fwcy1sb2NrLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6bm90KFt0eXBlPXBhc3N3b3JkXSk6Oi13ZWJraXQtY3JlZGVudGlhbHMtYXV0by1maWxsLWJ1dHRvbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV06OmFmdGVye2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jbGVhci1idXR0b257Zm9udC1zaXplOi43NWVtfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6MWVtO3RvcDotMWVtO21hcmdpbi1ib3R0b206LTFlbX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yaWdodDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItdG9wOjVweCBzb2xpZDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotMi41cHg7cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntyaWdodDphdXRvO2xlZnQ6MH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDoxNXB4fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxMHB4KX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcnttYXJnaW4tdG9wOi01cHh9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotMTBweH0nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbnt3aWR0aDoxZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2ZvbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntmb250LXNpemU6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dG9wOjA7aGVpZ2h0OjJweDtvdmVyZmxvdzpoaWRkZW59LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym9yZGVyLXRvcC1jb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcnttYXJnaW46LjI1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmc6MCAuNzVlbSAwIC43NWVtO21hcmdpbi10b3A6LTAuMjVlbTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3VmZml4e3RvcDouMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjI1ZW07bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO21pbi13aWR0aDo1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4O2JvcmRlci1yaWdodC1zdHlsZTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6MCA1cHggNXB4IDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMDtib3JkZXItbGVmdC1zdHlsZTpub25lO2ZsZXgtZ3JvdzoxfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6bm9uZTtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci1yYWRpdXM6LjAwMDAwMXB4O2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6R3JheVRleHR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvcmRlci10b3Atc3R5bGU6ZG90dGVkO2JvcmRlci10b3Atd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDYwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbdkFlLnRyYW5zaXRpb25NZXNzYWdlc119LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZG09KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGRuLHpwLGRuXX0pLG59KSgpLEtKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9yZW5kZXJlcj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLm9uQ2hhbmdlPXI9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShlLGkpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLGkpfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoWGMpLHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHBtPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLSnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxIbz1uZXcgc2UoIk5nVmFsdWVBY2Nlc3NvciIpLEVBZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+VEFlKSxtdWx0aTohMH0sVEFlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFtFQWVdKSx0dF19KSxufSkoKSxEQWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PnRJKSxtdWx0aTohMH0sSUFlPW5ldyBzZSgiQ29tcG9zaXRpb25FdmVudE1vZGUiKSx0ST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS0p7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY29tcG9zaXRpb25Nb2RlPXIsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24oKXtsZXQgbj1nbCgpP2dsKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3Qobi50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfV9oYW5kbGVJbnB1dChlKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShlKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoZSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhYYyksdyhBZSksdyhJQWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9jb21wb3NpdGlvbkVuZChvLnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6WyR0KFtEQWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBLcChuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBaSihuKXtyZXR1cm4gbnVsbCE9biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aH12YXIgVW89bmV3IHNlKCJOZ1ZhbGlkYXRvcnMiKSxacD1uZXcgc2UoIk5nQXN5bmNWYWxpZGF0b3JzIiksUkFlPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sU2M9Y2xhc3N7c3RhdGljIG1pbih0KXtyZXR1cm4gSkoodCl9c3RhdGljIG1heCh0KXtyZXR1cm4gJEoodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBlJCh0KX1zdGF0aWMgcmVxdWlyZWRUcnVlKHQpe3JldHVybiB0JCh0KX1zdGF0aWMgZW1haWwodCl7cmV0dXJuIG4kKHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIGkkKHQpfXN0YXRpYyBtYXhMZW5ndGgodCl7cmV0dXJuIHIkKHQpfXN0YXRpYyBwYXR0ZXJuKHQpe3JldHVybiBvJCh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gZCQodCl9c3RhdGljIGNvbXBvc2VBc3luYyh0KXtyZXR1cm4gcCQodCl9fTtmdW5jdGlvbiBKSihuKXtyZXR1cm4gdD0+e2lmKEtwKHQudmFsdWUpfHxLcChuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gJEoobil7cmV0dXJuIHQ9PntpZihLcCh0LnZhbHVlKXx8S3AobikpcmV0dXJuIG51bGw7bGV0IGU9cGFyc2VGbG9hdCh0LnZhbHVlKTtyZXR1cm4haXNOYU4oZSkmJmU+bj97bWF4OnttYXg6bixhY3R1YWw6dC52YWx1ZX19Om51bGx9fWZ1bmN0aW9uIGUkKG4pe3JldHVybiBLcChuLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gdCQobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBuJChuKXtyZXR1cm4gS3Aobi52YWx1ZSl8fFJBZS50ZXN0KG4udmFsdWUpP251bGw6e2VtYWlsOiEwfX1mdW5jdGlvbiBpJChuKXtyZXR1cm4gdD0+S3AodC52YWx1ZSl8fCFaSih0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHIkKG4pe3JldHVybiB0PT5aSih0LnZhbHVlKSYmdC52YWx1ZS5sZW5ndGg+bj97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gbyQobil7aWYoIW4pcmV0dXJuIFlBO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihLcChpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiBZQShuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzJChuKXtyZXR1cm4gbnVsbCE9bn1mdW5jdGlvbiBhJChuKXtyZXR1cm4gbjAobik/bG8obik6bn1mdW5jdGlvbiBsJChuKXtsZXQgdD17fTtyZXR1cm4gbi5mb3JFYWNoKGU9Pnt0PW51bGwhPWU/ey4uLnQsLi4uZX06dH0pLDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/bnVsbDp0fWZ1bmN0aW9uIGMkKG4sdCl7cmV0dXJuIHQubWFwKGU9PmUobikpfWZ1bmN0aW9uIHUkKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtyZXR1cm4hbi52YWxpZGF0ZX0odCk/dDplPT50LnZhbGlkYXRlKGUpKX1mdW5jdGlvbiBkJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGwkKGMkKGUsdCkpfX1mdW5jdGlvbiBkNShuKXtyZXR1cm4gbnVsbCE9bj9kJCh1JChuKSk6bnVsbH1mdW5jdGlvbiBwJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHhvKGMkKGUsdCkubWFwKGEkKSkucGlwZShCKGwkKSl9fWZ1bmN0aW9uIHA1KG4pe3JldHVybiBudWxsIT1uP3AkKHUkKG4pKTpudWxsfWZ1bmN0aW9uIFVKKG4sdCl7cmV0dXJuIG51bGw9PT1uP1t0XTpBcnJheS5pc0FycmF5KG4pP1suLi5uLHRdOltuLHRdfWZ1bmN0aW9uIGgkKG4pe3JldHVybiBuLl9yYXdWYWxpZGF0b3JzfWZ1bmN0aW9uIGYkKG4pe3JldHVybiBuLl9yYXdBc3luY1ZhbGlkYXRvcnN9ZnVuY3Rpb24gbDUobil7cmV0dXJuIG4/QXJyYXkuaXNBcnJheShuKT9uOltuXTpbXX1mdW5jdGlvbiBYQShuLHQpe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uaW5jbHVkZXModCk6bj09PXR9ZnVuY3Rpb24gekoobix0KXtsZXQgZT1sNSh0KTtyZXR1cm4gbDUobikuZm9yRWFjaChyPT57WEEoZSxyKXx8ZS5wdXNoKHIpfSksZX1mdW5jdGlvbiBqSihuLHQpe3JldHVybiBsNSh0KS5maWx0ZXIoZT0+IVhBKG4sZSkpfXZhciBRQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWQ1KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1wNSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119cmVzZXQodCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9aGFzRXJyb3IodCxlKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKHQsZSl9Z2V0RXJyb3IodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcih0LGUpOm51bGx9fSxmcz1jbGFzcyBleHRlbmRzIFFBe2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19LHBhPWNsYXNzIGV4dGVuZHMgUUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX0sYzU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2Q9dH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlzUGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX0sbSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGM1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHBhLDIpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJuZy11bnRvdWNoZWQiLGkuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixpLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixpLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaS5pc0RpcnR5KSgibmctdmFsaWQiLGkuaXNWYWxpZCkoIm5nLWludmFsaWQiLGkuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaS5pc1BlbmRpbmcpfSxmZWF0dXJlczpbdHRdfSksbn0pKCksSkM9IlZBTElEIixxQT0iSU5WQUxJRCIsal89IlBFTkRJTkciLCRDPSJESVNBQkxFRCI7ZnVuY3Rpb24gXyQobil7cmV0dXJuKG5JKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBHSihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9kNShuKTpufHxudWxsfWZ1bmN0aW9uIHYkKG4sdCl7cmV0dXJuKG5JKHQpP3QuYXN5bmNWYWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIFdKKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP3A1KG4pOm58fG51bGx9ZnVuY3Rpb24gbkkobil7cmV0dXJuIG51bGwhPW4mJiFBcnJheS5pc0FycmF5KG4pJiYib2JqZWN0Ij09dHlwZW9mIG59dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1lLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodGhpcy5fcmF3VmFsaWRhdG9ycyksdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVdKKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IodCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXR9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IodCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj10fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PUpDfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09cUF9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PWpffWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PSRDfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09JEN9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XSih0KX1hZGRWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyh6Sih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoekoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhqSih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoakoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsdCl9aGFzQXN5bmNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyx0KX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKHQ9PnQubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9bWFya0FzRGlydHkodD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9bWFya0FzUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1tYXJrQXNQZW5kaW5nKHQ9e30pe3RoaXMuc3RhdHVzPWpfLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX1kaXNhYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPSRDLHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmRpc2FibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCEwKSl9ZW5hYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPUpDLHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5lbmFibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMSkpfV91cGRhdGVBbmNlc3RvcnModCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHQuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0PXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PUpDfHx0aGlzLnN0YXR1cz09PWpfKSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8kQzpKQ31fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKHQpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPWpfLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtsZXQgZT1hJCh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEcsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBHfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpPyRDOnRoaXMuZXJyb3JzP3FBOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGpfKT9qXzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMocUEpP3FBOkpDfV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7bkkodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH19LFpBPWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKF8kKGUpLHYkKGksZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUsaT17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDppLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbCh0LGUsaT17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH1zZXRWYWx1ZSh0LGU9e30peyhmdW5jdGlvbihuLHQsZSl7bi5fZm9yRWFjaENoaWxkKChpLHIpPT57aWYodm9pZCAwPT09ZVtyXSl0aHJvdyBuZXcgTXQoMTAwMiwiIil9KX0pKHRoaXMsMCx0KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PnsoZnVuY3Rpb24obix0LGUpe2xldCBpPW4uY29udHJvbHM7aWYoISh0P09iamVjdC5rZXlzKGkpOmkpLmxlbmd0aCl0aHJvdyBuZXcgTXQoMWUzLCIiKTtpZighaVtlXSl0aHJvdyBuZXcgTXQoMTAwMSwiIil9KSh0aGlzLCEwLGkpLHRoaXMuY29udHJvbHNbaV0uc2V0VmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10aGlzLmNvbnRyb2xzW2ldO3ImJnIucGF0Y2hWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKHQsZSxpKT0+KHRbaV09ZS5nZXRSYXdWYWx1ZSgpLHQpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLChlLGkpPT4hIWkuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8ZSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV9mb3JFYWNoQ2hpbGQodCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChlPT57bGV0IGk9dGhpcy5jb250cm9sc1tlXTtpJiZ0KGksZSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHModCl7Zm9yKGxldFtlLGldb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhlKSYmdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGUsaSxyKT0+KChpLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoZVtyXT1pLnZhbHVlKSxlKSl9X3JlZHVjZUNoaWxkcmVuKHQsZSl7bGV0IGk9dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChyLG8pPT57aT1lKGkscixvKX0pLGl9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZCh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmNvbnRyb2xzW3RdOm51bGx9fTtmdW5jdGlvbiBpSShuLHQpe3JldHVyblsuLi50LnBhdGgsbl19ZnVuY3Rpb24gdHcobix0KXtoNShuLHQpLHQudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKG4udmFsdWUpLG4uZGlzYWJsZWQmJnQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oITApLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZT0+e24uX3BlbmRpbmdWYWx1ZT1lLG4uX3BlbmRpbmdDaGFuZ2U9ITAsbi5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09bi51cGRhdGVPbiYmeSQobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnkkKG4sdCksInN1Ym1pdCIhPT1uLnVwZGF0ZU9uJiZuLm1hcmtBc1RvdWNoZWQoKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7aWYodC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2xldCBlPWk9Pnt0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShpKX07bi5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKX0pfX0obix0KX1mdW5jdGlvbiBKQShuLHQsZT0hMCl7bGV0IGk9KCk9Pnt9O3QudmFsdWVBY2Nlc3NvciYmKHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGkpLHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChpKSksZUkobix0KSxuJiYodC5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksbi5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9ZnVuY3Rpb24gJEEobix0KXtuLmZvckVhY2goZT0+e2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpfSl9ZnVuY3Rpb24gaDUobix0KXtsZXQgZT1oJChuKTtudWxsIT09dC52YWxpZGF0b3I/bi5zZXRWYWxpZGF0b3JzKFVKKGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9ZiQobik7bnVsbCE9PXQuYXN5bmNWYWxpZGF0b3I/bi5zZXRBc3luY1ZhbGlkYXRvcnMoVUooaSx0LmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4uc2V0QXN5bmNWYWxpZGF0b3JzKFtpXSk7bGV0IHI9KCk9Pm4udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOyRBKHQuX3Jhd1ZhbGlkYXRvcnMsciksJEEodC5fcmF3QXN5bmNWYWxpZGF0b3JzLHIpfWZ1bmN0aW9uIGVJKG4sdCl7bGV0IGU9ITE7aWYobnVsbCE9PW4pe2lmKG51bGwhPT10LnZhbGlkYXRvcil7bGV0IHI9aCQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9ZiQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQuYXN5bmNWYWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0QXN5bmNWYWxpZGF0b3JzKG8pKX19fWxldCBpPSgpPT57fTtyZXR1cm4gJEEodC5fcmF3VmFsaWRhdG9ycyxpKSwkQSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMsaSksZX1mdW5jdGlvbiB5JChuLHQpe24uX3BlbmRpbmdEaXJ0eSYmbi5tYXJrQXNEaXJ0eSgpLG4uc2V0VmFsdWUobi5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSx0LnZpZXdUb01vZGVsVXBkYXRlKG4uX3BlbmRpbmdWYWx1ZSksbi5fcGVuZGluZ0NoYW5nZT0hMX1mdW5jdGlvbiBiJChuLHQpe2g1KG4sdCl9ZnVuY3Rpb24gZjUobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24geCQobix0KXtuLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksdC5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2w7InN1Ym1pdCI9PT1pLnVwZGF0ZU9uJiZpLl9wZW5kaW5nQ2hhbmdlJiYoZS52aWV3VG9Nb2RlbFVwZGF0ZShpLl9wZW5kaW5nVmFsdWUpLGkuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9ZnVuY3Rpb24gbTUobix0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZSxpLHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCksdC5mb3JFYWNoKG89PntvLmNvbnN0cnVjdG9yPT09dEk/ZT1vOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5jb25zdHJ1Y3Rvcik9PT1wbX0obyk/aT1vOnI9b30pLHJ8fGl8fGV8fG51bGx9dmFyIFlBZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+R18pfSxldz1Qcm9taXNlLnJlc29sdmUoKSxHXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBHLHRoaXMuZm9ybT1uZXcgWkEoe30sZDUoZSkscDUoaSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtlLmNvbnRyb2w9aS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLGUuY29udHJvbCksdHcoZS5jb250cm9sLGUpLGUuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChlKX0pfWdldENvbnRyb2woZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX1yZW1vdmVDb250cm9sKGUpe2V3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSksdGhpcy5fZGlyZWN0aXZlcy5kZWxldGUoZSl9KX1hZGRGb3JtR3JvdXAoZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKSxyPW5ldyBaQSh7fSk7YiQocixlKSxpLnJlZ2lzdGVyQ29udHJvbChlLm5hbWUsciksci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChlKXtldy50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpfSl9Z2V0Rm9ybUdyb3VwKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9dXBkYXRlTW9kZWwoZSxpKXtldy50aGVuKCgpPT57dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfSl9c2V0VmFsdWUoZSl7dGhpcy5jb250cm9sLnNldFZhbHVlKGUpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihlKXtyZXR1cm4gZS5wb3AoKSxlLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGUpOnRoaXMuZm9ybX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhVbywxMCksdyhacCwxMCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbWUFlXSksdHRdfSksbn0pKCk7ZnVuY3Rpb24gcUoobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBZSihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYyPT09T2JqZWN0LmtleXMobikubGVuZ3RoJiYidmFsdWUiaW4gbiYmImRpc2FibGVkImluIG59dmFyIG53PWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodD1udWxsLGUsaSl7c3VwZXIoXyQoZSksdiQoaSxlKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVsbCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLG5JKGUpJiYoZS5ub25OdWxsYWJsZXx8ZS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9WUoodCk/dC52YWx1ZTp0KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGk9PmkodGhpcy52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXt0aGlzLnNldFZhbHVlKHQsZSl9cmVzZXQodD10aGlzLmRlZmF1bHRWYWx1ZSxlPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLm1hcmtBc1ByaXN0aW5lKGUpLHRoaXMubWFya0FzVW50b3VjaGVkKGUpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxlKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHModCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9X3VucmVnaXN0ZXJPbkNoYW5nZSh0KXtxSih0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtxSih0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLHQpfV9mb3JFYWNoQ2hpbGQodCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUodCl7WUoodCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQudmFsdWUsdC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dH19LEMkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmc3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBpSShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxRQWU9e3Byb3ZpZGU6ZnMsdXNlRXhpc3Rpbmc6cmkoKCk9PktBZSl9LEtBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcyw1KSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6WyR0KFtRQWVdKSx0dF19KSxufSkoKSxaQWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PkpBZSl9LFhKPVByb21pc2UucmVzb2x2ZSgpLEpBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5jb250cm9sPW5ldyBudyx0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMudXBkYXRlPW5ldyBHLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGUpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUpKXtsZXQgaT1lLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh7bmFtZTppLHBhdGg6dGhpcy5fZ2V0UGF0aChpKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGUmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGUpLGY1KGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShlKXt0aGlzLnZpZXdNb2RlbD1lLHRoaXMudXBkYXRlLmVtaXQoZSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFsb25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXt0dyh0aGlzLmNvbnRyb2wsdGhpcyksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoZSl7WEoudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZlMShpKTtYSi50aGVuKCgpPT57ciYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fZ2V0UGF0aChlKXtyZXR1cm4gdGhpcy5fcGFyZW50P2lJKGUsdGhpcy5fcGFyZW50KTpbZV19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsOSksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhubiw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlsibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOlskdChbWkFlXSksdHQsenRdfSksbn0pKCksJEFlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5nNSksbXVsdGk6ITB9LGc1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntlKCIiPT1pP251bGw6cGFyc2VGbG9hdChpKSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFskQWVdKSx0dF19KSxufSkoKSxlSWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9Pm5JZSksbXVsdGk6ITB9LHckPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx0SWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoZSxpKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbZSxpXSl9cmVtb3ZlKGUpe2ZvcihsZXQgaT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7aT49MDstLWkpaWYodGhpcy5fYWNjZXNzb3JzW2ldWzFdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGksMSl9c2VsZWN0KGUpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGk9Pnt0aGlzLl9pc1NhbWVHcm91cChpLGUpJiZpWzFdIT09ZSYmaVsxXS5maXJlVW5jaGVjayhlLnZhbHVlKX0pfV9pc1NhbWVHcm91cChlLGkpe3JldHVybiEhZVswXS5jb250cm9sJiZlWzBdLl9wYXJlbnQ9PT1pLl9jb250cm9sLl9wYXJlbnQmJmVbMV0ubmFtZT09PWkubmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46dyR9KSxufSkoKSxuSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMub25DaGFuZ2U9KCk9Pnt9fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQocGEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFhjKSx3KEFlKSx3KHRJZSksdyh6bikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbJHQoW2VJZV0pLHR0XX0pLG59KSgpLGlJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ckllKSxtdWx0aTohMH0sckllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW2lJZV0pLHR0XX0pLG59KSgpLF81PW5ldyBzZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxvSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnY1KX0sdjU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBhe2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLnVwZGF0ZT1uZXcgRyx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPW01KDAscil9c2V0IGlzRGlzYWJsZWQoZSl7fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJkpBKGksdGhpcywhMSksdHcodGhpcy5mb3JtLHRoaXMpLHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1mNShlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuZm9ybS5zZXRWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmSkEodGhpcy5mb3JtLHRoaXMsITEpfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1faXNDb250cm9sQ2hhbmdlZChlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoVW8sMTApLHcoWnAsMTApLHcoSG8sMTApLHcoXzUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW29JZV0pLHR0LHp0XX0pLG59KSgpLHNJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+V18pfSxXXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKGVJKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiB0dyhpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtKQShlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2wscj10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSE9PXImJihKQShpfHxudWxsLGUpLChuPT5uIGluc3RhbmNlb2YgbncpKHIpJiYodHcocixlKSxlLmNvbnRyb2w9cikpfSksdGhpcy5mb3JtLl91cGRhdGVUcmVlVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9zZXRVcEZvcm1Db250YWluZXIoZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO2IkKGksZSksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2xlYW5VcEZvcm1Db250YWluZXIoZSl7aWYodGhpcy5mb3JtKXtsZXQgaT10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSYmZnVuY3Rpb24obix0KXtyZXR1cm4gZUkobix0KX0oaSxlKSYmaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX19X3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKXt0aGlzLmZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksdGhpcy5fb2xkRm9ybSYmdGhpcy5fb2xkRm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KX1fdXBkYXRlVmFsaWRhdG9ycygpe2g1KHRoaXMuZm9ybSx0aGlzKSx0aGlzLl9vbGRGb3JtJiZlSSh0aGlzLl9vbGRGb3JtLHRoaXMpfV9jaGVja0Zvcm1QcmVzZW50KCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoInN1Ym1pdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdWJtaXQobyl9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNldCgpfSl9LGlucHV0czp7Zm9ybTpbImZvcm1Hcm91cCIsImZvcm0iXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW3NJZV0pLHR0LHp0XX0pLG59KSgpLGFJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+TSQpfSxNJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe0UkKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsMTMpLHcoVW8sMTApLHcoWnAsMTApKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbJHQoW2FJZV0pLHR0XX0pLG59KSgpLGxJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+UyQpfSxTJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUFycmF5KHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtQXJyYXkodGhpcyl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gaUkobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfV9jaGVja1BhcmVudFR5cGUoKXtFJCh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGZzLDEzKSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6WyR0KFtsSWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBFJChuKXtyZXR1cm4hKG4gaW5zdGFuY2VvZiBNJHx8biBpbnN0YW5jZW9mIFdffHxuIGluc3RhbmNlb2YgUyQpfXZhciBjSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnVJZSl9LHVJZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPXMsdGhpcy5fYWRkZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfXNldCBpc0Rpc2FibGVkKGUpe31uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksZjUoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIGlJKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcywxMyksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhfNSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOlskdChbY0llXSksdHQsenRdfSksbn0pKCksZEllPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5EJCksbXVsdGk6ITB9O2Z1bmN0aW9uIFQkKG4sdCl7cmV0dXJuIG51bGw9PW4/YCR7dH1gOih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0PSJPYmplY3QiKSxgJHtufTogJHt0fWAuc2xpY2UoMCw1MCkpfXZhciBEJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj1UJCh0aGlzLl9nZXRPcHRpb25JZChlKSxlKTt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIscil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGkpLGUodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKTplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6WyR0KFtkSWVdKSx0dF19KSxufSkoKSxBJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsZSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKFQkKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoRCQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpLGhJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+SSQpLG11bHRpOiEwfTtmdW5jdGlvbiBRSihuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgSSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXtsZXQgaTtpZih0aGlzLnZhbHVlPWUsQXJyYXkuaXNBcnJheShlKSl7bGV0IHI9ZS5tYXAobz0+dGhpcy5fZ2V0T3B0aW9uSWQobykpO2k9KG8scyk9PntvLl9zZXRTZWxlY3RlZChyLmluZGV4T2Yocy50b1N0cmluZygpKT4tMSl9fWVsc2UgaT0ocixvKT0+e3IuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goaSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntsZXQgcj1bXSxvPWkuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PW8pe2xldCBzPW87Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKHNbYV0udmFsdWUpO3IucHVzaChjKX19ZWxzZXtsZXQgcz1pLm9wdGlvbnM7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBsPXNbYV07aWYobC5zZWxlY3RlZCl7bGV0IGM9dGhpcy5fZ2V0T3B0aW9uVmFsdWUobC52YWx1ZSk7ci5wdXNoKGMpfX19dGhpcy52YWx1ZT1yLGUocil9fV9yZWdpc3Rlck9wdGlvbihlKXtsZXQgaT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoaSxlKSxpfV9nZXRPcHRpb25JZChlKXtmb3IobGV0IGkgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGkpLl92YWx1ZSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWU6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOlskdChbaEllXSksdHRdfSksbn0pKCksUCQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSl9X3NldEVsZW1lbnRWYWx1ZShlKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixlKX1fc2V0U2VsZWN0ZWQoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoSSQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpO2Z1bmN0aW9uIFIkKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIE8kKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlRmxvYXQobil9dmFyIGhtPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9WUF9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gZSl7bGV0IGk9dGhpcy5ub3JtYWxpemVJbnB1dChlW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKGkpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGkpOllBLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGUpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1lbmFibGVkKGUpe3JldHVybiBudWxsIT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCksbUllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5nSWUpLG11bHRpOiEwfSxnSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4Iix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9Pk8kKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PiRKKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbJHQoW21JZV0pLHR0XX0pLG59KSgpLF9JZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+dkllKSxtdWx0aTohMH0sdkllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5PJChlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5KSihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgibWluIixpLl9lbmFibGVkP2kubWluOm51bGwpfSxpbnB1dHM6e21pbjoibWluIn0sZmVhdHVyZXM6WyR0KFtfSWVdKSx0dF19KSxufSkoKSx5SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9PmskKSxtdWx0aTohMH0sYkllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT55NSksbXVsdGk6ITB9LGskPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PWUxLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PmUkfWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOlskdChbeUllXSksdHRdfSksbn0pKCkseTU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGske2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT50JH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOlskdChbYkllXSksdHRdfSksbn0pKCkseEllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5DSWUpLG11bHRpOiEwfSxDSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0iZW1haWwiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZTEsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+biR9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwiZW1haWwiLCIiLCJuZ01vZGVsIiwiIl1dLGlucHV0czp7ZW1haWw6ImVtYWlsIn0sZmVhdHVyZXM6WyR0KFt4SWVdKSx0dF19KSxufSkoKSx3SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9Pk1JZSksbXVsdGk6ITB9LE1JZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW5sZW5ndGgiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+UiQoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+aSQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoIm1pbmxlbmd0aCIsaS5fZW5hYmxlZD9pLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOlskdChbd0llXSksdHRdfSksbn0pKCksU0llPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5FSWUpLG11bHRpOiEwfSxFSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4bGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PlIkKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PnIkKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbJHQoW1NJZV0pLHR0XX0pLG59KSgpLFRJZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+REllKSxtdWx0aTohMH0sREllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5vJChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicGF0dGVybiIsaS5fZW5hYmxlZD9pLnBhdHRlcm46bnVsbCl9LGlucHV0czp7cGF0dGVybjoicGF0dGVybiJ9LGZlYXR1cmVzOlskdChbVEllXSksdHRdfSksbn0pKCksRiQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3ckXX0pLG59KSgpLHJJPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltGJF19KSxufSkoKSxOJD0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6XzUsdXNlVmFsdWU6ZS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbRiRdfSksbn0pKCksQUllPShuZXcgS2woIjE0LjIuMTEiKSxbInRyaWdnZXIiXSksSUllPVsicGFuZWwiXTtmdW5jdGlvbiBQSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHl0KGUucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBSSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkseXQoZS50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBPSWUobix0KXsxJm4mJk5uKDAsMCxbIipuZ1N3aXRjaENhc2UiLCJ0cnVlIl0pfWZ1bmN0aW9uIGtJZShuLHQpezEmbiYmKGcoMCwic3BhbiIsOSksRSgxLFJJZSwyLDEsInNwYW4iLDEwKSxFKDIsT0llLDEsMCwibmctY29udGVudCIsMTEpLHYoKSksMiZuJiYoYigibmdTd2l0Y2giLCEhTSgpLmN1c3RvbVRyaWdnZXIpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMCkpfWZ1bmN0aW9uIEZJZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTMpKDEsImRpdiIsMTQsMTUpLFAoIkB0cmFuc2Zvcm1QYW5lbC5kb25lIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dChyLnRvU3RhdGUpKX0pKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pLE5uKDMsMSksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQHRyYW5zZm9ybVBhbmVsV3JhcCIsdm9pZCAwKSx4KDEpLFJiKCJtYXQtc2VsZWN0LXBhbmVsICIsZS5fZ2V0UGFuZWxUaGVtZSgpLCIiKSxPdCgidHJhbnNmb3JtLW9yaWdpbiIsZS5fdHJhbnNmb3JtT3JpZ2luKSgiZm9udC1zaXplIixlLl90cmlnZ2VyRm9udFNpemUsInB4IiksYigibmdDbGFzcyIsZS5wYW5lbENsYXNzKSgiQHRyYW5zZm9ybVBhbmVsIixlLm11bHRpcGxlPyJzaG93aW5nLW11bHRpcGxlIjoic2hvd2luZyIpLHplKCJpZCIsZS5pZCsiLXBhbmVsIikoImFyaWEtbXVsdGlzZWxlY3RhYmxlIixlLm11bHRpcGxlKSgiYXJpYS1sYWJlbCIsZS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGUuX2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoKSl9fXZhciBOSWU9W1tbIm1hdC1zZWxlY3QtdHJpZ2dlciJdXSwiKiJdLExJZT1bIm1hdC1zZWxlY3QtdHJpZ2dlciIsIioiXSxMJD17dHJhbnNmb3JtUGFuZWxXcmFwOkhyKCJ0cmFuc2Zvcm1QYW5lbFdyYXAiLFtJaSgiKiA9PiB2b2lkIixGZigiQHRyYW5zZm9ybVBhbmVsIixba2YoKV0se29wdGlvbmFsOiEwfSkpXSksdHJhbnNmb3JtUGFuZWw6SHIoInRyYW5zZm9ybVBhbmVsIixbRWkoInZvaWQiLHJuKHt0cmFuc2Zvcm06InNjYWxlWSgwLjgpIixtaW5XaWR0aDoiMTAwJSIsb3BhY2l0eTowfSkpLEVpKCJzaG93aW5nIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyAzMnB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLEVpKCJzaG93aW5nLW11bHRpcGxlIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyA2NHB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLElpKCJ2b2lkID0+ICoiLFZpKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LEIkPTAsSCQ9bmV3IHNlKCJtYXQtc2VsZWN0LXNjcm9sbC1zdHJhdGVneSIpLFVJZT1uZXcgc2UoIk1BVF9TRUxFQ1RfQ09ORklHIiksekllPXtwcm92aWRlOkgkLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sakllPUxzKHFwKGdvKFJBKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBUZX19KSkpKSxHSWU9bmV3IHNlKCJNYXRTZWxlY3RUcmlnZ2VyIiksV0llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqSWV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtzdXBlcihzLG8sbCxjLGQpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD11LHRoaXMuX2xpdmVBbm5vdW5jZXI9Zix0aGlzLl9kZWZhdWx0T3B0aW9ucz1tLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oQyxfKT0+Qz09PV8sdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrQiQrKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBUZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrQiQrKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IFRlLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9YmEoKCk9PntsZXQgQz10aGlzLm9wdGlvbnM7cmV0dXJuIEM/Qy5jaGFuZ2VzLnBpcGUoVm4oQyksdmkoKCk9PnVuKC4uLkMubWFwKF89Pl8ub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpLHZpKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBHLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKEhlKEM9PkMpLEIoKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoSGUoQz0+IUMpLEIoKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9bT8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9bS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9aCx0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoU2MucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9V3QoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPVd0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1QaShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgRl8odGhpcy5tdWx0aXBsZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5waXBlKGRpKCksb3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+dGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nKHRoaXMucGFuZWxPcGVuKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faW5pdEtleU1hbmFnZXIoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShlPT57ZS5hZGRlZC5mb3JFYWNoKGk9Pmkuc2VsZWN0KCkpLGUucmVtb3ZlZC5mb3JFYWNoKGk9PmkuZGVzZWxlY3QoKSl9KSx0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKFZuKG51bGwpLG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9yZXNldE9wdGlvbnMoKSx0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9KX1uZ0RvQ2hlY2soKXtsZXQgZT10aGlzLl9nZXRUcmlnZ2VyQXJpYUxhYmVsbGVkYnkoKSxpPXRoaXMubmdDb250cm9sO2lmKGUhPT10aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9ZSxlP3Iuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpOnIucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiKX1pJiYodGhpcy5fcHJldmlvdXNDb250cm9sIT09aS5jb250cm9sJiYodm9pZCAwIT09dGhpcy5fcHJldmlvdXNDb250cm9sJiZudWxsIT09aS5kaXNhYmxlZCYmaS5kaXNhYmxlZCE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLmRpc2FibGVkPWkuZGlzYWJsZWQpLHRoaXMuX3ByZXZpb3VzQ29udHJvbD1pLmNvbnRyb2wpLHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpKX1uZ09uQ2hhbmdlcyhlKXsoZS5kaXNhYmxlZHx8ZS51c2VyQXJpYURlc2NyaWJlZEJ5KSYmdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLGUudHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWkscz10aGlzLl9rZXlNYW5hZ2VyO2lmKCFzLmlzVHlwaW5nKCkmJm8mJiFNcihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IGE9dGhpcy5zZWxlY3RlZDtzLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJmEhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIscz1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKHN8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHxNcihlKSlpZighcyYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGE9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KGE/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgYT1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PWEmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goaT0+aS5zZXRJbmFjdGl2ZVN0eWxlcygpKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMubXVsdGlwbGUmJmUpQXJyYXkuaXNBcnJheShlKSxlLmZvckVhY2goaT0+dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShpKSksdGhpcy5fc29ydFZhbHVlcygpO2Vsc2V7bGV0IGk9dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKTtpP3RoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShpKTp0aGlzLnBhbmVsT3Blbnx8dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKC0xKX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKXtsZXQgaT10aGlzLm9wdGlvbnMuZmluZChyPT57aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG51bGwhPXIudmFsdWUmJnRoaXMuX2NvbXBhcmVXaXRoKHIudmFsdWUsZSl9Y2F0Y2h7cmV0dXJuITF9fSk7cmV0dXJuIGkmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSxpfV9hc3NpZ25WYWx1ZShlKXtyZXR1cm4hIShlIT09dGhpcy5fdmFsdWV8fHRoaXMuX211bHRpcGxlJiZBcnJheS5pc0FycmF5KGUpKSYmKHRoaXMub3B0aW9ucyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKSx0aGlzLl92YWx1ZT1lLCEwKX1faW5pdEtleU1hbmFnZXIoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBEXyh0aGlzLm9wdGlvbnMpLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLndpdGhIb21lQW5kRW5kKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPXVuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKG90KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLHVuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShvdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9X29uU2VsZWN0KGUsaSl7bGV0IHI9dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKTtudWxsIT1lLnZhbHVlfHx0aGlzLl9tdWx0aXBsZT8ociE9PWUuc2VsZWN0ZWQmJihlLnNlbGVjdGVkP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKSksaSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpLHRoaXMubXVsdGlwbGUmJih0aGlzLl9zb3J0VmFsdWVzKCksaSYmdGhpcy5mb2N1cygpKSk6KGUuZGVzZWxlY3QoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLG51bGwhPXRoaXMudmFsdWUmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoZS52YWx1ZSkpLHIhPT10aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zb3J0VmFsdWVzKCl7aWYodGhpcy5tdWx0aXBsZSl7bGV0IGU9dGhpcy5vcHRpb25zLnRvQXJyYXkoKTt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zb3J0KChpLHIpPT50aGlzLnNvcnRDb21wYXJhdG9yP3RoaXMuc29ydENvbXBhcmF0b3IoaSxyLGUpOmUuaW5kZXhPZihpKS1lLmluZGV4T2YocikpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX19X3Byb3BhZ2F0ZUNoYW5nZXMoZSl7bGV0IGk9bnVsbDtpPXRoaXMubXVsdGlwbGU/dGhpcy5zZWxlY3RlZC5tYXAocj0+ci52YWx1ZSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOmUsdGhpcy5fdmFsdWU9aSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaSksdGhpcy5fb25DaGFuZ2UoaSksdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLl9nZXRDaGFuZ2VFdmVudChpKSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKXt0aGlzLl9rZXlNYW5hZ2VyJiYodGhpcy5lbXB0eT90aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSkpfV9jYW5PcGVuKCl7cmV0dXJuIXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMuZGlzYWJsZWQmJnRoaXMub3B0aW9ucz8ubGVuZ3RoPjB9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCk7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnk/KGU/ZSsiICI6IiIpK3RoaXMuYXJpYUxhYmVsbGVkYnk6ZX1fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKXtyZXR1cm4gdGhpcy5wYW5lbE9wZW4mJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbT90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaWQ6bnVsbH1fZ2V0VHJpZ2dlckFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCksaT0oZT9lKyIgIjoiIikrdGhpcy5fdmFsdWVJZDtyZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRieSYmKGkrPSIgIit0aGlzLmFyaWFMYWJlbGxlZGJ5KSxpfV9wYW5lbERvbmVBbmltYXRpbmcoZSl7dGhpcy5vcGVuZWRDaGFuZ2UuZW1pdChlKX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzKCksdGhpcy5vcGVuKCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fcGFuZWxPcGVufHwhdGhpcy5lbXB0eXx8dGhpcy5fZm9jdXNlZCYmISF0aGlzLl9wbGFjZWhvbGRlcn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhkYSksdyhubiksdyhwdCksdyhSXyksdyhBZSksdyhpciw4KSx3KEdfLDgpLHcoV18sOCksdyh1bSw4KSx3KHBhLDEwKSxLbygidGFiaW5kZXgiKSx3KEgkKSx3KFVDKSx3KFVJZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQUllLDUpLGx0KElJZSw1KSxsdChRcCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50cmlnZ2VyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9vdmVybGF5RGlyPXIuZmlyc3QpfX0saW5wdXRzOnt1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxwYW5lbENsYXNzOiJwYW5lbENsYXNzIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw6InR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLHNvcnRDb21wYXJhdG9yOiJzb3J0Q29tcGFyYXRvciIsaWQ6ImlkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLEpwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX3RyaWdnZXJGb250U2l6ZT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0idG9wIix0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25zPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9XX1fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChlLGkscil7bGV0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qZS1pK28vMikscil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZShvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJih0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1vcGVuKCl7c3VwZXIuX2Nhbk9wZW4oKSYmKHN1cGVyLm9wZW4oKSx0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl90cmlnZ2VyRm9udFNpemU9cGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCkuZm9udFNpemV8fCIwIiksdGhpcy5fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQmJih0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSl9X3Njcm9sbE9wdGlvbkludG9WaWV3KGUpe2xldCBpPVdDKGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxyPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPTA9PT1lJiYxPT09aT8wOmtBKChlK2kpKnIscix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLDI1Nil9X3Bvc2l0aW9uaW5nU2V0dGxlZCgpe3RoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCksdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10aGlzLl9zY3JvbGxUb3B9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLnBhbmVsT3Blbj90aGlzLl9zY3JvbGxUb3A9MDoodGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPTAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHN1cGVyLl9wYW5lbERvbmVBbmltYXRpbmcoZSl9X2dldENoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsZSl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7bGV0IHMsZT10aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5faXNSdGwoKSxvPXRoaXMubXVsdGlwbGU/NTY6MzI7aWYodGhpcy5tdWx0aXBsZSlzPTQwO2Vsc2UgaWYodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKXM9MTY7ZWxzZXtsZXQgYz10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXXx8dGhpcy5vcHRpb25zLmZpcnN0O3M9YyYmYy5ncm91cD8zMjoxNn1yfHwocyo9LTEpO2xldCBhPTAtKGUubGVmdCtzLShyP286MCkpLGw9ZS5yaWdodCtzLWkud2lkdGgrKHI/MDpvKTthPjA/cys9YSs4Omw+MCYmKHMtPWwrOCksdGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQocyksdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGUsaSxyKXtsZXQgbCxvPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxzPShvLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMixhPU1hdGguZmxvb3IoMjU2L28pO3JldHVybiB0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmc/MDoobD0wPT09dGhpcy5fc2Nyb2xsVG9wP2Uqbzp0aGlzLl9zY3JvbGxUb3A9PT1yPyhlLSh0aGlzLl9nZXRJdGVtQ291bnQoKS1hKSkqbysoby0odGhpcy5fZ2V0SXRlbUNvdW50KCkqby0yNTYpJW8pOmktby8yLE1hdGgucm91bmQoLTEqbC1zKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KGUpe2xldCBpPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxyPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbz10aGlzLl90cmlnZ2VyUmVjdC50b3AtOCxzPXIuaGVpZ2h0LXRoaXMuX3RyaWdnZXJSZWN0LmJvdHRvbS04LGE9TWF0aC5hYnModGhpcy5fb2Zmc2V0WSksYz1NYXRoLm1pbih0aGlzLl9nZXRJdGVtQ291bnQoKSppLDI1NiktYS10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQ7Yz5zP3RoaXMuX2FkanVzdFBhbmVsVXAoYyxzKTphPm8/dGhpcy5fYWRqdXN0UGFuZWxEb3duKGEsbyxlKTp0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpfV9hZGp1c3RQYW5lbFVwKGUsaSl7bGV0IHI9TWF0aC5yb3VuZChlLWkpO3RoaXMuX3Njcm9sbFRvcC09cix0aGlzLl9vZmZzZXRZLT1yLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKGUsaSxyKXtsZXQgbz1NYXRoLnJvdW5kKGUtaSk7aWYodGhpcy5fc2Nyb2xsVG9wKz1vLHRoaXMuX29mZnNldFkrPW8sdGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKSx0aGlzLl9zY3JvbGxUb3A+PXIpcmV0dXJuIHRoaXMuX3Njcm9sbFRvcD1yLHRoaXMuX29mZnNldFk9MCx2b2lkKHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIHRvcCAwcHgiKX1fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCl7bGV0IGEsZT10aGlzLl9nZXRJdGVtSGVpZ2h0KCksaT10aGlzLl9nZXRJdGVtQ291bnQoKSxyPU1hdGgubWluKGkqZSwyNTYpLHM9aSplLXI7YT10aGlzLmVtcHR5PzA6TWF0aC5tYXgodGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSwwKSxhKz1XQyhhLHRoaXMub3B0aW9ucyx0aGlzLm9wdGlvbkdyb3Vwcyk7bGV0IGw9ci8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGEsbCxzKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGEsbCxzKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChzKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2xldCBlPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxpPShlLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMjtyZXR1cm5gNTAlICR7TWF0aC5hYnModGhpcy5fb2Zmc2V0WSktaStlLzJ9cHggMHB4YH1fZ2V0SXRlbUhlaWdodCgpe3JldHVybiAzKnRoaXMuX3RyaWdnZXJGb250U2l6ZX1fZ2V0SXRlbUNvdW50KCl7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGgrdGhpcy5vcHRpb25Hcm91cHMubGVuZ3RofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixHSWUsNSksTmkocix1YSw1KSxOaShyLEdDLDUpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksTmUobz1MZSgpKSYmKGkub3B0aW9ucz1vKSxOZShvPUxlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwibWF0LXNlbGVjdCJdLGhvc3RWYXJzOjE5LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJsdXIoKX0pLDImZSYmKHplKCJpZCIsaS5pZCkoInRhYmluZGV4IixpLnRhYkluZGV4KSgiYXJpYS1jb250cm9scyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5wYW5lbE9wZW4pKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQudG9TdHJpbmcoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLl9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpKSxhdCgibWF0LXNlbGVjdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LXNlbGVjdC1yZXF1aXJlZCIsaS5yZXF1aXJlZCkoIm1hdC1zZWxlY3QtZW1wdHkiLGkuZW1wdHkpKCJtYXQtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VV8sdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOkxJZSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih3aShOSWUpLGcoMCwiZGl2IiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksZygzLCJkaXYiLDIpLEUoNCxQSWUsMiwxLCJzcGFuIiwzKSxFKDUsa0llLDMsMiwic3BhbiIsNCksdigpLGcoNiwiZGl2Iiw1KSxOKDcsImRpdiIsNiksdigpKCksRSg4LEZJZSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksUCgiYmFja2Ryb3BDbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkoImF0dGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25BdHRhY2hlZCgpfSkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkpLDImZSl7bGV0IHI9c3QoMSk7emUoImFyaWEtb3ducyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSx4KDMpLGIoIm5nU3dpdGNoIixpLmVtcHR5KSx6ZSgiaWQiLGkuX3ZhbHVlSWQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwhMCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCExKSx4KDMpLGIoImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIixpLl9vdmVybGF5UGFuZWxDbGFzcykoImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsaS5fc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixyKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkucGFuZWxPcGVuKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS5fcG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIixudWxsPT1pLl90cmlnZ2VyUmVjdD9udWxsOmkuX3RyaWdnZXJSZWN0LndpZHRoKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLGkuX29mZnNldFkpfX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxRcCxzbV0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtc2VsZWN0LXZhbHVle3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo1cHggc29saWQ7bWFyZ2luOjAgNHB4fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmlzaWJpbGl0eTpoaWRkZW59J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbTCQudHJhbnNmb3JtUGFuZWxXcmFwLEwkLnRyYW5zZm9ybVBhbmVsXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJbD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6SWVdLGltcG9ydHM6W2tlLFZvLE9fLGRuLFN1LGRtLE9fLGRuXX0pLG59KSgpO2Z1bmN0aW9uIHFJZShuLHQpezEmbiYmKEt0KDApLGcoMSwiZGl2IiwxKSxEKDIsIiBUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBEZWZhdWx0IC0gKEVuYWJsZWQvRGlzYWJsZWQpIGFuZCAoRW5hYmxlZC9EaXNhYmxlZCkgIiksdigpLGcoMywiZGl2IiwxKSxEKDQsIiBPbmx5IGZsYWdzIHdpdGggbm9uIGRlZmF1bHQgdmFsdWVzIGFyZSBzZW50IHRvIHRoZSBiYWNrZW5kLiAiKSx2KCksWnQoKSl9ZnVuY3Rpb24gWUllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJkaXYiLDEpLEQoMiksdigpLFp0KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoJyBGZWF0dXJlIEZsYWdzIGFyZSBmaWx0ZXJlZCB0byBvbmx5IHNob3cgZmVhdHVyZXMgY29udGFpbmluZyAiJyxlLnNob3dGbGFnc0ZpbHRlciwnIiAnKX19ZnVuY3Rpb24gWEllKG4sdCl7MSZuJiYoZygwLCJzdXAiLDExKSxEKDEsIjEiKSx2KCkpfWZ1bmN0aW9uIFFJZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24gS0llKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNlbGVjdCIsMTIpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLmZsYWdDaGFuZ2VkLmVtaXQoe2ZsYWc6by5mbGFnLHN0YXR1czpyLnZhbHVlfSkpfSksZygxLCJtYXQtb3B0aW9uIiwxMyksRCgyKSx2KCksZygzLCJtYXQtb3B0aW9uIiwxNCksRCg0LCJFbmFibGVkIiksdigpLGcoNSwibWF0LW9wdGlvbiIsMTUpLEQoNiwiRGlzYWJsZWQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7YigidmFsdWUiLGUuc3RhdHVzKSx4KDIpLHFlKCIgRGVmYXVsdCAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUuZGVmYXVsdFZhbHVlKSwiICIpfX1mdW5jdGlvbiBaSWUobix0KXtpZigxJm4mJihnKDAsInRkIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLHFlKCJVbnN1cHBvcnRlZCBCeSBVSSAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUudmFsdWUpLCIiKX19ZnVuY3Rpb24gSkllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIpKDIsInRkIikoMywiZGl2IiksRCg0KSxFKDUsWEllLDIsMCwic3VwIiw3KSx2KCkoKSxFKDYsUUllLDEsMCwibmctY29udGFpbmVyIiw4KSxFKDcsS0llLDcsMiwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksRSg5LFpJZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSx2KCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXN0KDgpLHI9c3QoMTApLG89TSgpO3goNCkscWUoIiAiLGUuZmxhZywiICIpLHgoMSksYigibmdJZiIsZS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikseCgxKSxiKCJuZ0lmIixvLmlzRWRpdGFibGUoZSkpKCJuZ0lmVGhlbiIsaSkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gJEllKG4sdCl7MSZuJiYoZygwLCJkaXYiLDExKSxEKDEsIiAxLiBTZW50IHRvIHNlcnZlciB3aGVuIG92ZXJyaWRkZW4gIiksdigpKX12YXIgbEksVSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXI9ITEsdGhpcy5mbGFnQ2hhbmdlZD1uZXcgRyx0aGlzLmFsbEZsYWdzUmVzZXQ9bmV3IEd9c2VyaWFsaXplRmxhZ1ZhbHVlKGUpe3JldHVybiEwPT09ZT8iRW5hYmxlZCI6ITE9PT1lPyJEaXNhYmxlZCI6bnVsbD09ZT8ibnVsbCI6QXJyYXkuaXNBcnJheShlKT9KU09OLnN0cmluZ2lmeShlKTplLnRvU3RyaW5nKCl9aXNFZGl0YWJsZShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmRlZmF1bHRWYWx1ZX1mb3JtYXRGbGFnVmFsdWUoZSl7bGV0IGk9dGhpcy5zZXJpYWxpemVGbGFnVmFsdWUoZSk7cmV0dXJuIDA9PT1pLmxlbmd0aD8iIjpgLSAke2l9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntmZWF0dXJlRmxhZ1N0YXR1c2VzOiJmZWF0dXJlRmxhZ1N0YXR1c2VzIixoYXNGbGFnc1NlbnRUb1NlcnZlcjoiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLHNob3dGbGFnc0ZpbHRlcjoic2hvd0ZsYWdzRmlsdGVyIn0sb3V0cHV0czp7ZmxhZ0NoYW5nZWQ6ImZsYWdDaGFuZ2VkIixhbGxGbGFnc1Jlc2V0OiJhbGxGbGFnc1Jlc2V0In0sZGVjbHM6MTIsdmFyczo0LGNvbnN0czpbWzEsInNjcm9sbGluZy1wYWdlIl0sWzEsIm1lc3NhZ2UiXSxbMSwid2FybmluZyJdLFs0LCJuZ0lmIl0sWzEsImZlYXR1cmUtZmxhZy10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl0sWyJjbGFzcyIsIm5vdGUtMSIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdLFsic2VsZWN0QmxvY2siLCIiXSxbInVuc3VwcG9ydGVkQmxvY2siLCIiXSxbMSwibm90ZS0xIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWyJ2YWx1ZSIsImRlZmF1bHQiXSxbInZhbHVlIiwiZW5hYmxlZCJdLFsidmFsdWUiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgyIiwyKSxEKDMsIldBUk5JTkc6IEVYUEVSSU1FTlRBTCBGRUFUVVJFUyBBSEVBRCEiKSx2KCksRCg0LCIgQnkgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIHlvdSBjb3VsZCBwdXQgdGhlIGFwcGxpY2F0aW9uIGluIGFuIHVudXNhYmxlIHN0YXRlIG9yIGV4cG9zZSB5b3Vyc2VsZiB0byB1bnRlc3RlZCBmZWF0dXJlcyBvciBwb3RlbnRpYWwgYnVncy4gIiksdigpLEUoNSxxSWUsNSwwLCJuZy1jb250YWluZXIiLDMpLEUoNixZSWUsMywxLCJuZy1jb250YWluZXIiLDMpLGcoNywidGFibGUiLDQpLEUoOCxKSWUsMTEsNSwibmctY29udGFpbmVyIiw1KSx2KCksZyg5LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmFsbEZsYWdzUmVzZXQuZW1pdCgpfSksRCgxMCwiUmVzZXQgQWxsIiksdigpLEUoMTEsJEllLDIsMCwiZGl2Iiw3KSx2KCkpLDImZSYmKHgoNSksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikseCgxKSxiKCJuZ0lmIixpLnNob3dGbGFnc0ZpbHRlcikseCgyKSxiKCJuZ0Zvck9mIixpLmZlYXR1cmVGbGFnU3RhdHVzZXMpLHgoMyksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikpfSxkZXBlbmRlbmNpZXM6W3luLFhlLCRuLEpwLHVhXSxzdHlsZXM6WyIubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxNnB4fS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjQ0MzM2fS5ub3RlLTFbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZjk4MDB9LnNjcm9sbGluZy1wYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0Ojkwdmh9LmZlYXR1cmUtZmxhZy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0iXX0pLG59KSgpLHokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0ZsYWdzRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChnQykucGlwZShCKGk9Pmkuc2hvd0ZsYWdzPy50b0xvd2VyQ2FzZSgpKSksdGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlciQ9dGhpcy5zdG9yZS5zZWxlY3QoV2YpLnBpcGUoQihpPT5PYmplY3QudmFsdWVzKGkpLnNvbWUocj0+ci5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikpKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ0MpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QodEspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSx0aGlzLnNob3dGbGFnc0ZpbHRlciQpLEIoKFtpLHIsbyxzXSk9Pk9iamVjdC5lbnRyaWVzKHIpLmZpbHRlcigoW2FdKT0+IXN8fGEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzKSkubWFwKChbYSxsXSk9PntsZXQgYz1mdW5jdGlvbihuLHQpe3JldHVybiB2b2lkIDA9PT10W25dPyJkZWZhdWx0Ijp0W25dPyJlbmFibGVkIjoiZGlzYWJsZWQifShhLGkpO3JldHVybntmbGFnOmEsZGVmYXVsdFZhbHVlOmwsc3RhdHVzOmMsc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW46b1thXS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbn19KSkpfW9uRmxhZ0NoYW5nZWQoe2ZsYWc6ZSxzdGF0dXM6aX0pe3N3aXRjaChpKXtjYXNlImRlZmF1bHQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goRnAoe2ZsYWdzOltlXX0pKTticmVhaztjYXNlImVuYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITB9fSkpO2JyZWFrO2Nhc2UiZGlzYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITF9fSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGbGFnIGNoYW5nZWQgdG8gaW52YWxpZCBzdGF0dXMiKX19b25BbGxGbGFnc1Jlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1XygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1kaWFsb2ciXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZmVhdHVyZUZsYWdTdGF0dXNlcyIsImhhc0ZsYWdzU2VudFRvU2VydmVyIiwic2hvd0ZsYWdzRmlsdGVyIiwiZmxhZ0NoYW5nZWQiLCJhbGxGbGFnc1Jlc2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJmZWF0dXJlLWZsYWctZGlhbG9nLWNvbXBvbmVudCIsMCksUCgiZmxhZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmxhZ0NoYW5nZWQobyl9KSgiYWxsRmxhZ3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFsbEZsYWdzUmVzZXQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJmZWF0dXJlRmxhZ1N0YXR1c2VzIixXKDEsMyxpLmZlYXR1cmVGbGFncyQpKSgiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLFcoMiw1LGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIkKSkoInNob3dGbGFnc0ZpbHRlciIsVygzLDcsaS5zaG93RmxhZ3NGaWx0ZXIkKSl9LGRlcGVuZGVuY2llczpbVSQsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kaWFsb2c9aSx0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZT16JCx0aGlzLnNob3dGZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KGxLKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfW5nT25Jbml0KCl7dGhpcy5zaG93RmVhdHVyZUZsYWdzJC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57aWYoZSlyZXR1cm4gdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2c9dGhpcy5kaWFsb2cub3Blbih0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZSksdm9pZCB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZy5hZnRlckNsb3NlZCgpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChGcCh7ZmxhZ3M6WyJzaG93RmxhZ3MiXX0pKSxzZXRUaW1lb3V0KCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwxKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLW1vZGFsLXRyaWdnZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJQZT1bInJvdXRlQ29udGFpbmVyIl0sRyQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lfW5nT25DaGFuZ2VzKGUpe2xldCBpPWUuYWN0aXZlTmdDb21wb25lbnQ7aWYoaSYmKHRoaXMucm91dGVDb250YWluZXIuY2xlYXIoKSxpLmN1cnJlbnRWYWx1ZSkpe2xldCByPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGkuY3VycmVudFZhbHVlKTt0aGlzLnJvdXRlQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChyKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJQZSw3LHlpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnJvdXRlQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVOZ0NvbXBvbmVudDoiYWN0aXZlTmdDb21wb25lbnQifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3V0ZUNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmQWkoMCxudWxsLDApfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMucmVnaXN0cnk9aSx0aGlzLmFjdGl2ZU5nQ29tcG9uZW50JD1wbihbdGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KFJRKV0pLnBpcGUoQigoW3Isb10pPT5yJiYobnVsbD09PW98fHVzKHIsbykpP3RoaXMucmVnaXN0cnkuZ2V0TmdDb21wb25lbnRCeVJvdXRlS2luZChyLnJvdXRlS2luZCk6bnVsbCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KGhjKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVOZ0NvbXBvbmVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicm91dGVyLW91dGxldC1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZiKCJhY3RpdmVOZ0NvbXBvbmVudCIsVygxLDEsaS5hY3RpdmVOZ0NvbXBvbmVudCQpKX0sZGVwZW5kZW5jaWVzOltHJCxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLnNlbGVjdChtdSkuc3Vic2NyaWJlKGk9Pntkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsaSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhcmstbW9kZS1zdXBwb3J0ZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWV89KCgpPT4oZnVuY3Rpb24obil7bltuLkFDVElWRV9QTFVHSU49MF09IkFDVElWRV9QTFVHSU4ifShZX3x8KFlfPXt9KSksWV8pKSgpLFkkPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kZWVwTGlua2VyPWUsdGhpcy5vblZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGUsdGhpcy5vbkhhc2hDaGFuZ2U9bGkod2luZG93LCJwb3BzdGF0ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpfW5nT25Jbml0KCl7dGhpcy5vbkhhc2hDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5kZWVwTGlua2VyLmdldFBsdWdpbklkKCk7ZSE9PXRoaXMuYWN0aXZlUGx1Z2luSWQmJnRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtwcm9wOllfLkFDVElWRV9QTFVHSU4sdmFsdWU6ZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUuYWN0aXZlUGx1Z2luSWQpe2xldCBpPWUuYWN0aXZlUGx1Z2luSWQ7dGhpcy5kZWVwTGlua2VyLnNldFBsdWdpbklkKG51bGw9PT1pLmN1cnJlbnRWYWx1ZT8iIjppLmN1cnJlbnRWYWx1ZSx7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2F0aW9uUmVwbGFjZTpudWxsPT09aS5wcmV2aW91c1ZhbHVlfHxpLmZpcnN0Q2hhbmdlfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFwKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCJ9LG91dHB1dHM6e29uVmFsdWVDaGFuZ2U6Im9uVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbenRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKX1vblZhbHVlQ2hhbmdlZChlKXtlLnByb3A9PT1ZXy5BQ1RJVkVfUExVR0lOJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKGREKHtwbHVnaW46ZS52YWx1ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5JZCIsIm9uVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhhc2gtc3RvcmFnZS1jb21wb25lbnQiLDApLFAoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5JZCIsVygxLDEsaS5hY3RpdmVQbHVnaW5JZCQpKX0sZGVwZW5kZW5jaWVzOltZJCxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1UGU9WyIqIl07ZnVuY3Rpb24gcncobil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09bEkmJihsST1udWxsLHR5cGVvZiB3aW5kb3c8InUiKSl7bGV0IG49d2luZG93O3ZvaWQgMCE9PW4udHJ1c3RlZFR5cGVzJiYobEk9bi50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2NvbXBvbmVudHMiLHtjcmVhdGVIVE1MOnQ9PnR9KSl9cmV0dXJuIGxJfSgpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIFEkKG4pe3JldHVybiBFcnJvcihgVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICIke259ImApfWZ1bmN0aW9uIEskKG4pe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHtufSIuYCl9ZnVuY3Rpb24gWiQobil7cmV0dXJuIEVycm9yKGBUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgIiR7bn0iLmApfXZhciBTZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy51cmw9dCx0aGlzLnN2Z1RleHQ9ZSx0aGlzLm9wdGlvbnM9aX19LFhfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5faHR0cENsaWVudD1lLHRoaXMuX3Nhbml0aXplcj1pLHRoaXMuX2Vycm9ySGFuZGxlcj1vLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1bIm1hdGVyaWFsLWljb25zIiwibWF0LWxpZ2F0dXJlLWZvbnQiXSx0aGlzLl9kb2N1bWVudD1yfWFkZFN2Z0ljb24oZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIixlLGkscil9YWRkU3ZnSWNvbkxpdGVyYWwoZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25Jbk5hbWVzcGFjZShlLGkscixvKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IFNkKHIsbnVsbCxvKSl9YWRkU3ZnSWNvblJlc29sdmVyKGUpe3JldHVybiB0aGlzLl9yZXNvbHZlcnMucHVzaChlKSx0aGlzfWFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIsbyl7bGV0IHM9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKEpyLkhUTUwscik7aWYoIXMpdGhyb3cgWiQocik7bGV0IGE9cncocyk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBTZCgiIixhLG8pKX1hZGRTdmdJY29uU2V0KGUsaSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldExpdGVyYWwoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKGUsaSxyKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyhlLG5ldyBTZChpLG51bGwscikpfWFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIpe2xldCBvPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5IVE1MLGkpO2lmKCFvKXRocm93IFokKGkpO2xldCBzPXJ3KG8pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IFNkKCIiLHMscikpfXJlZ2lzdGVyRm9udENsYXNzQWxpYXMoZSxpPWUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KGUsaSksdGhpc31jbGFzc05hbWVGb3JGb250QWxpYXMoZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQoZSl8fGV9c2V0RGVmYXVsdEZvbnRTZXRDbGFzcyguLi5lKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1lLHRoaXN9Z2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfWdldFN2Z0ljb25Gcm9tVXJsKGUpe2xldCBpPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsZSk7aWYoIWkpdGhyb3cgSyQoZSk7bGV0IHI9dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5nZXQoaSk7cmV0dXJuIHI/anQoY0kocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgU2QoZSxudWxsKSkucGlwZShOdChvPT50aGlzLl9jYWNoZWRJY29uc0J5VXJsLnNldChpLG8pKSxCKG89PmNJKG8pKSl9Z2V0TmFtZWRTdmdJY29uKGUsaT0iIil7bGV0IHI9SiQoaSxlKSxvPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChyKTtpZihvKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2lmKG89dGhpcy5fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoaSxlKSxvKXJldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQocixvKSx0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2xldCBzPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChpKTtyZXR1cm4gcz90aGlzLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxzKTpHbChRJChyKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fc3ZnSWNvbkNvbmZpZ3MuY2xlYXIoKSx0aGlzLl9pY29uU2V0Q29uZmlncy5jbGVhcigpLHRoaXMuX2NhY2hlZEljb25zQnlVcmwuY2xlYXIoKX1fZ2V0U3ZnRnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P2p0KGNJKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpLnBpcGUoQihpPT5jSShpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO3JldHVybiByP2p0KHIpOnhvKGkuZmlsdGVyKHM9PiFzLnN2Z1RleHQpLm1hcChzPT50aGlzLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcocykucGlwZShDbyhhPT57bGV0IGM9YExvYWRpbmcgaWNvbiBzZXQgVVJMOiAke3RoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwscy51cmwpfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWA7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYykpLGp0KG51bGwpfSkpKSkucGlwZShCKCgpPT57bGV0IHM9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtpZighcyl0aHJvdyBRJChlKTtyZXR1cm4gc30pKX1fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKXtmb3IobGV0IHI9aS5sZW5ndGgtMTtyPj0wO3ItLSl7bGV0IG89aVtyXTtpZihvLnN2Z1RleHQmJm8uc3ZnVGV4dC50b1N0cmluZygpLmluZGV4T2YoZSk+LTEpe2xldCBzPXRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKG8pLGE9dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KHMsZSxvLm9wdGlvbnMpO2lmKGEpcmV0dXJuIGF9fXJldHVybiBudWxsfV9sb2FkU3ZnSWNvbkZyb21Db25maWcoZSl7cmV0dXJuIHRoaXMuX2ZldGNoSWNvbihlKS5waXBlKE50KGk9PmUuc3ZnVGV4dD1pKSxCKCgpPT50aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKSkpfV9sb2FkU3ZnSWNvblNldEZyb21Db25maWcoZSl7cmV0dXJuIGUuc3ZnVGV4dD9qdChudWxsKTp0aGlzLl9mZXRjaEljb24oZSkucGlwZShOdChpPT5lLnN2Z1RleHQ9aSkpfV9leHRyYWN0U3ZnSWNvbkZyb21TZXQoZSxpLHIpe2xldCBvPWUucXVlcnlTZWxlY3RvcihgW2lkPSIke2l9Il1gKTtpZighbylyZXR1cm4gbnVsbDtsZXQgcz1vLmNsb25lTm9kZSghMCk7aWYocy5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMocyxyKTtpZigic3ltYm9sIj09PXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocykscik7bGV0IGE9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcocncoIjxzdmc+PC9zdmc+IikpO3JldHVybiBhLmFwcGVuZENoaWxkKHMpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoYSxyKX1fc3ZnRWxlbWVudEZyb21TdHJpbmcoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7aS5pbm5lckhUTUw9ZTtsZXQgcj1pLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFyKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIHJ9X3RvU3ZnRWxlbWVudChlKXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhydygiPHN2Zz48L3N2Zz4iKSkscj1lLmF0dHJpYnV0ZXM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldHtuYW1lOnMsdmFsdWU6YX09cltvXTsiaWQiIT09cyYmaS5zZXRBdHRyaWJ1dGUocyxhKX1mb3IobGV0IG89MDtvPGUuY2hpbGROb2Rlcy5sZW5ndGg7bysrKWUuY2hpbGROb2Rlc1tvXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmaS5hcHBlbmRDaGlsZChlLmNoaWxkTm9kZXNbb10uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGl9X3NldFN2Z0F0dHJpYnV0ZXMoZSxpKXtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLGUuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGkmJmkudmlld0JveCYmZS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGkudmlld0JveCksZX1fZmV0Y2hJY29uKGUpe2xldHt1cmw6aSxvcHRpb25zOnJ9PWUsbz1yPy53aXRoQ3JlZGVudGlhbHM/PyExO2lmKCF0aGlzLl9odHRwQ2xpZW50KXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBIdHRwQ2xpZW50IHByb3ZpZGVyIGZvciB1c2Ugd2l0aCBBbmd1bGFyIE1hdGVyaWFsIGljb25zLiBQbGVhc2UgaW5jbHVkZSB0aGUgSHR0cENsaWVudE1vZHVsZSBmcm9tIEBhbmd1bGFyL2NvbW1vbi9odHRwIGluIHlvdXIgYXBwIGltcG9ydHMuIik7aWYobnVsbD09aSl0aHJvdyBFcnJvcihgQ2Fubm90IGZldGNoIGljb24gZnJvbSBVUkwgIiR7aX0iLmApO2xldCBzPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsaSk7aWYoIXMpdGhyb3cgSyQoaSk7bGV0IGE9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KHMpO2lmKGEpcmV0dXJuIGE7bGV0IGw9dGhpcy5faHR0cENsaWVudC5nZXQocyx7cmVzcG9uc2VUeXBlOiJ0ZXh0Iix3aXRoQ3JlZGVudGlhbHM6b30pLnBpcGUoQihjPT5ydyhjKSksZnVuY3Rpb24obil7cmV0dXJuIHF0KCh0LGUpPT57dHJ5e3Quc3Vic2NyaWJlKGUpfWZpbmFsbHl7ZS5hZGQobil9fSl9KCgpPT50aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUocykpLFhzKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQocyxsKSxsfV9hZGRTdmdJY29uQ29uZmlnKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KEokKGUsaSksciksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyhlLGkpe2xldCByPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gcj9yLnB1c2goaSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KGUsW2ldKSx0aGlzfV9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKXtpZighZS5zdmdFbGVtZW50KXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhlLnN2Z1RleHQpO3RoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSxlLm9wdGlvbnMpLGUuc3ZnRWxlbWVudD1pfXJldHVybiBlLnN2Z0VsZW1lbnR9X2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGUsaSl7Zm9yKGxldCByPTA7cjx0aGlzLl9yZXNvbHZlcnMubGVuZ3RoO3IrKyl7bGV0IG89dGhpcy5fcmVzb2x2ZXJzW3JdKGksZSk7aWYobylyZXR1cm4gZlBlKG8pP25ldyBTZChvLnVybCxudWxsLG8ub3B0aW9ucyk6bmV3IFNkKG8sbnVsbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEdmLDgpLFIoUmYpLFIoQnQsOCksUihTcykpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGNJKG4pe3JldHVybiBuLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gSiQobix0KXtyZXR1cm4gbisiOiIrdH1mdW5jdGlvbiBmUGUobil7cmV0dXJuISghbi51cmx8fCFuLm9wdGlvbnMpfW5ldyBPbyxuZXcgVGEsbmV3IE9vLG5ldyBPbzt2YXIgbVBlPXBzKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSxnUGU9bmV3IHNlKCJNQVRfSUNPTl9ERUZBVUxUX09QVElPTlMiKSxfUGU9bmV3IHNlKCJtYXQtaWNvbi1sb2NhdGlvbiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtsZXQgbj1TbyhCdCksdD1uP24ubG9jYXRpb246bnVsbDtyZXR1cm57Z2V0UGF0aG5hbWU6KCk9PnQ/dC5wYXRobmFtZSt0LnNlYXJjaDoiIn19fSksJCQ9WyJjbGlwLXBhdGgiLCJjb2xvci1wcm9maWxlIiwic3JjIiwiY3Vyc29yIiwiZmlsbCIsImZpbHRlciIsIm1hcmtlciIsIm1hcmtlci1zdGFydCIsIm1hcmtlci1taWQiLCJtYXJrZXItZW5kIiwibWFzayIsInN0cm9rZSJdLHlQZT0kJC5tYXAobj0+YFske259XWApLmpvaW4oIiwgIiksYlBlPS9edXJsXChbJyJdPyMoLio/KVsnIl0/XCkkLyxabj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbVBle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXZuLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9V3QoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfV9zcGxpdEljb25OYW1lKGUpe2lmKCFlKXJldHVyblsiIiwiIl07bGV0IGk9ZS5zcGxpdCgiOiIpO3N3aXRjaChpLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixpWzBdXTtjYXNlIDI6cmV0dXJuIGk7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke2V9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpZihlJiZlLnNpemUpe2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7aSE9PXRoaXMuX3ByZXZpb3VzUGF0aCYmKHRoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKX1fdXNpbmdGb250SWNvbigpe3JldHVybiF0aGlzLnN2Z0ljb259X3NldFN2Z0VsZW1lbnQoZSl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTt0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9X2NsZWFyU3ZnRWxlbWVudCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUuY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCk7aS0tOyl7bGV0IHI9ZS5jaGlsZE5vZGVzW2ldOygxIT09ci5ub2RlVHlwZXx8InN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZyLnJlbW92ZSgpfX1fdXBkYXRlRm9udEljb25DbGFzc2VzKCl7aWYoIXRoaXMuX3VzaW5nRm9udEljb24oKSlyZXR1cm47bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9KHRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCkuc3BsaXQoLyArLyk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKSkuZmlsdGVyKHI9PnIubGVuZ3RoPjApO3RoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QucmVtb3ZlKHIpKSxpLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1pLHRoaXMuZm9udEljb24hPT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJiFpLmluY2x1ZGVzKCJtYXQtbGlnYXR1cmUtZm9udCIpJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZlLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZlLmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfV9jbGVhbnVwRm9udFZhbHVlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdCgiICIpWzBdOmV9X3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGUpe2xldCBpPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpJiZpLmZvckVhY2goKHIsbyk9PntyLmZvckVhY2gocz0+e28uc2V0QXR0cmlidXRlKHMubmFtZSxgdXJsKCcke2V9IyR7cy52YWx1ZX0nKWApfSl9KX1fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yQWxsKHlQZSkscj10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzfHxuZXcgTWFwO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKSQkLmZvckVhY2gocz0+e2xldCBhPWlbb10sbD1hLmdldEF0dHJpYnV0ZShzKSxjPWw/bC5tYXRjaChiUGUpOm51bGw7aWYoYyl7bGV0IHU9ci5nZXQoYSk7dXx8KHU9W10sci5zZXQoYSx1KSksdS5wdXNoKHtuYW1lOnMsdmFsdWU6Y1sxXX0pfX0pfV91cGRhdGVTdmdJY29uKGUpe2lmKHRoaXMuX3N2Z05hbWVzcGFjZT1udWxsLHRoaXMuX3N2Z05hbWU9bnVsbCx0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksZSl7bGV0W2kscl09dGhpcy5fc3BsaXRJY29uTmFtZShlKTtpJiYodGhpcy5fc3ZnTmFtZXNwYWNlPWkpLHImJih0aGlzLl9zdmdOYW1lPXIpLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9dGhpcy5faWNvblJlZ2lzdHJ5LmdldE5hbWVkU3ZnSWNvbihyLGkpLnBpcGUoSHQoMSkpLnN1YnNjcmliZShvPT50aGlzLl9zZXRTdmdFbGVtZW50KG8pLG89Pnt0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFcnJvciByZXRyaWV2aW5nIGljb24gJHtpfToke3J9ISAke28ubWVzc2FnZX1gKSl9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWF8pLEtvKCJhcmlhLWhpZGRlbiIpLHcoX1BlKSx3KFNzKSx3KGdQZSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWljb24iXV0saG9zdEF0dHJzOlsicm9sZSIsImltZyIsMSwibWF0LWljb24iLCJub3RyYW5zbGF0ZSJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoemUoImRhdGEtbWF0LWljb24tdHlwZSIsaS5fdXNpbmdGb250SWNvbigpPyJmb250Ijoic3ZnIikoImRhdGEtbWF0LWljb24tbmFtZSIsaS5fc3ZnTmFtZXx8aS5mb250SWNvbikoImRhdGEtbWF0LWljb24tbmFtZXNwYWNlIixpLl9zdmdOYW1lc3BhY2V8fGkuZm9udFNldCkoImZvbnRJY29uIixpLl91c2luZ0ZvbnRJY29uKCk/aS5mb250SWNvbjpudWxsKSxhdCgibWF0LWljb24taW5saW5lIixpLmlubGluZSkoIm1hdC1pY29uLW5vLWNvbG9yIiwicHJpbWFyeSIhPT1pLmNvbG9yJiYiYWNjZW50IiE9PWkuY29sb3ImJiJ3YXJuIiE9PWkuY29sb3IpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGlubGluZToiaW5saW5lIixzdmdJY29uOiJzdmdJY29uIixmb250U2V0OiJmb250U2V0Iixmb250SWNvbjoiZm9udEljb24ifSxleHBvcnRBczpbIm1hdEljb24iXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczp1UGUsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLE5uKDApKX0sc3R5bGVzOlsiLm1hdC1pY29uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O292ZXJmbG93OmhpZGRlbn0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH0ubWF0LWljb24ubWF0LWxpZ2F0dXJlLWZvbnRbZm9udEljb25dOjpiZWZvcmV7Y29udGVudDphdHRyKGZvbnRJY29uKX1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLCAxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLHhQZT1bIioiLFtbIm1hdC10b29sYmFyLXJvdyJdXV0sQ1BlPVsiKiIsIm1hdC10b29sYmFyLXJvdyJdLHdQZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksTVBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhci1yb3ciXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhci1yb3ciXSxleHBvcnRBczpbIm1hdFRvb2xiYXJSb3ciXX0pLG59KSgpLGVlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd1Ble2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh1aSksdyhCdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsTVBlLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX3Rvb2xiYXJSb3dzPW8pfX0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsaS5fdG9vbGJhclJvd3MubGVuZ3RoPjApKCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IiwwPT09aS5fdG9vbGJhclJvd3MubGVuZ3RoKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpDUGUsZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSh4UGUpLE5uKDApLE5uKDEsMSkpfSxzdHlsZXM6WyIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbGJhcntvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHRlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZG4sZG5dfSksbn0pKCk7ZnVuY3Rpb24geDUobil7cmV0dXJuIG4uc3RhdGUhPT1FZS5OT1RfTE9BREVEJiZuLnN0YXRlIT09RWUuTE9BRElOR312YXIgRVBlPXdyKEFaLFNlKGRBLG49Png1KG4pP3suLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZEVuYWJsZWQ6IW4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZH19Om4pLFNlKHBBLChuLHtwZXJpb2RJbk1zOnR9KT0+e2lmKCF4NShuKSlyZXR1cm4gbjtsZXQgZT10Pj0zZTQ/dDpuLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXM7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkUGVyaW9kSW5NczplfX19KSxTZShoQSwobix7c2l6ZTp0fSk9PntpZigheDUobikpcmV0dXJuIG47bGV0IGU9dD4wP3Q6bi5zZXR0aW5ncy5wYWdlU2l6ZTtyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxwYWdlU2l6ZTplfX19KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUodC5wYWdlU2l6ZSkmJnQucGFnZVNpemU+MCYmKGUucGFnZVNpemU9TnVtYmVyKHQucGFnZVNpemUpKSwiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLnJlbG9hZEVuYWJsZWQ9dC5hdXRvUmVsb2FkKSxOdW1iZXIuaXNGaW5pdGUodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykmJnQuYXV0b1JlbG9hZFBlcmlvZEluTXM+M2U0JiYoZS5yZWxvYWRQZXJpb2RJbk1zPU51bWJlcih0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSksey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MsLi4uZX19fSkpO2Z1bmN0aW9uIG5lZShuLHQpe3JldHVybiBFUGUobix0KX12YXIgVFBlPVsiaW5wdXQiXSxEUGU9WyJsYWJlbCJdLEFQZT1mdW5jdGlvbihuKXtyZXR1cm57ZW50ZXJEdXJhdGlvbjpufX0sSVBlPVsiKiJdLFBQZT1uZXcgc2UoIm1hdC1jaGVja2JveC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn19fSk7dmFyIFJQZT0wLGllZT17Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifSxPUGU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PkVkKSxtdWx0aTohMH0sa1BlPXFwKHBzKExzKGdvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSxGUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vcHRpb25zPWwsdGhpcy5hcmlhTGFiZWw9IiIsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMubGFiZWxQb3NpdGlvbj0iYWZ0ZXIiLHRoaXMubmFtZT1udWxsLHRoaXMuY2hhbmdlPW5ldyBHLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZT1uZXcgRyx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fGllZSx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXRoaXMuX29wdGlvbnMuY29sb3J8fGllZS5jb2xvcix0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQ9YCR7ZX0keysrUlBlfWB9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3luY0luZGV0ZXJtaW5hdGUodGhpcy5faW5kZXRlcm1pbmF0ZSl9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT1XdChlKTtpIT10aGlzLmNoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgaW5kZXRlcm1pbmF0ZSgpe3JldHVybiB0aGlzLl9pbmRldGVybWluYXRlfXNldCBpbmRldGVybWluYXRlKGUpe2xldCBpPWUhPXRoaXMuX2luZGV0ZXJtaW5hdGU7dGhpcy5faW5kZXRlcm1pbmF0ZT1XdChlKSxpJiYodGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5faW5kZXRlcm1pbmF0ZT8zOnRoaXMuY2hlY2tlZD8xOjIpLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpKSx0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfXdyaXRlVmFsdWUoZSl7dGhpcy5jaGVja2VkPSEhZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZX1fZ2V0QXJpYUNoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2VkPyJ0cnVlIjp0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjoiZmFsc2UifV90cmFuc2l0aW9uQ2hlY2tTdGF0ZShlKXtsZXQgaT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxyPXRoaXMuX2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKTtpZihpIT09ZSYmciYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyYmci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oaSxlKSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT1lLHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe3IuY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2xldCBvPXRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57ci5jbGFzc0xpc3QucmVtb3ZlKG8pfSwxZTMpfSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0aGlzLmNoZWNrZWQpKSx0aGlzLl9pbnB1dEVsZW1lbnQmJih0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCl9dG9nZ2xlKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpfV9oYW5kbGVJbnB1dENsaWNrKCl7bGV0IGU9dGhpcy5fb3B0aW9ucz8uY2xpY2tBY3Rpb247dGhpcy5kaXNhYmxlZHx8Im5vb3AiPT09ZT8hdGhpcy5kaXNhYmxlZCYmIm5vb3AiPT09ZSYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dGhpcy5pbmRldGVybWluYXRlKToodGhpcy5pbmRldGVybWluYXRlJiYiY2hlY2siIT09ZSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSl9KSx0aGlzLl9jaGVja2VkPSF0aGlzLl9jaGVja2VkLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9X29uSW50ZXJhY3Rpb25FdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpfV9vbkJsdXIoKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihlLGkpe2lmKCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlKXJldHVybiIiO3N3aXRjaChlKXtjYXNlIDA6aWYoMT09PWkpcmV0dXJuIHRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9DaGVja2VkO2lmKDM9PWkpcmV0dXJuIHRoaXMuX2NoZWNrZWQ/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5jaGVja2VkVG9JbmRldGVybWluYXRlOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9JbmRldGVybWluYXRlO2JyZWFrO2Nhc2UgMjpyZXR1cm4gMT09PWk/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAxOnJldHVybiAyPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb1VuY2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAzOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5pbmRldGVybWluYXRlVG9VbmNoZWNrZWR9cmV0dXJuIiJ9X3N5bmNJbmRldGVybWluYXRlKGUpe2xldCBpPXRoaXMuX2lucHV0RWxlbWVudDtpJiYoaS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFRQZSw1KSxsdChEUGUsNSksbHQoZXMsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lucHV0RWxlbWVudD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fbGFiZWxFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0saWQ6ImlkIixyZXF1aXJlZDoicmVxdWlyZWQiLGxhYmVsUG9zaXRpb246ImxhYmVsUG9zaXRpb24iLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpbmRldGVybWluYXRlOiJpbmRldGVybWluYXRlIn0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGluZGV0ZXJtaW5hdGVDaGFuZ2U6ImluZGV0ZXJtaW5hdGVDaGFuZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksRWQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcigibWF0LWNoZWNrYm94LSIsZSxpLG8scyxhLGwpLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX2FuaW1hdGlvbkNsYXNzZXM9e3VuY2hlY2tlZFRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQiLHVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUiLGNoZWNrZWRUb1VuY2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQiLGNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6Im1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIixpbmRldGVybWluYXRlVG9VbmNoZWNrZWQ6Im1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIn19X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkuY2hlY2tlZD1lLGl9X2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57ZXx8dGhpcy5fb25CbHVyKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX1fb25JbnB1dENsaWNrKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksc3VwZXIuX2hhbmRsZUlucHV0Q2xpY2soKX1mb2N1cyhlLGkpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxlLGkpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHpyKSx3KHB0KSxLbygidGFiaW5kZXgiKSx3KExpLDgpLHcoUFBlLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hlY2tib3giXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihBYSgiaWQiLGkuaWQpLHplKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLGF0KCJtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgibWF0LWNoZWNrYm94LWNoZWNrZWQiLGkuY2hlY2tlZCkoIm1hdC1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0Q2hlY2tib3giXSxmZWF0dXJlczpbJHQoW09QZV0pLHR0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6SVBlLGRlY2xzOjE3LHZhcnM6MjEsY29uc3RzOltbMSwibWF0LWNoZWNrYm94LWxheW91dCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtYXQtY2hlY2tib3gtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWNoZWNrYm94LXJpcHBsZSIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlQW5pbWF0aW9uIl0sWzEsIm1hdC1yaXBwbGUtZWxlbWVudCIsIm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtY2hlY2tib3gtZnJhbWUiXSxbMSwibWF0LWNoZWNrYm94LWJhY2tncm91bmQiXSxbInZlcnNpb24iLCIxLjEiLCJmb2N1c2FibGUiLCJmYWxzZSIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwic3Ryb2tlIiwid2hpdGUiLCJkIiwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuMyIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIl0sWzEsIm1hdC1jaGVja2JveC1taXhlZG1hcmsiXSxbMSwibWF0LWNoZWNrYm94LWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiY2hlY2tib3hMYWJlbCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJsYWJlbCIsMCwxKSgyLCJzcGFuIiwyKSgzLCJpbnB1dCIsMyw0KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbklucHV0Q2xpY2sobyl9KSx2KCksZyg1LCJzcGFuIiw1KSxOKDYsInNwYW4iLDYpLHYoKSxOKDcsInNwYW4iLDcpLGcoOCwic3BhbiIsOCksam4oKSxnKDksInN2ZyIsOSksTigxMCwicGF0aCIsMTApLHYoKSxTYSgpLE4oMTEsInNwYW4iLDExKSx2KCkoKSxnKDEyLCJzcGFuIiwxMiwxMyksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTGFiZWxUZXh0Q2hhbmdlKCl9KSxnKDE0LCJzcGFuIiwxNCksRCgxNSwiXHhhMCIpLHYoKSxObigxNiksdigpKCkpLDImZSl7bGV0IHI9c3QoMSksbz1zdCgxMyk7emUoImZvciIsaS5pbnB1dElkKSx4KDIpLGF0KCJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luIiwhby50ZXh0Q29udGVudHx8IW8udGV4dENvbnRlbnQudHJpbSgpKSx4KDEpLGIoImlkIixpLmlucHV0SWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCkoImNoZWNrZWQiLGkuY2hlY2tlZCkoImRpc2FibGVkIixpLmRpc2FibGVkKSgidGFiSW5kZXgiLGkudGFiSW5kZXgpLHplKCJ2YWx1ZSIsaS52YWx1ZSkoIm5hbWUiLGkubmFtZSkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1jaGVja2VkIixpLl9nZXRBcmlhQ2hlY2tlZCgpKSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpLHgoMiksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQ2VudGVyZWQiLCEwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixIbigxOSxBUGUsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGU/MDoxNTApKX19LGRlcGVuZGVuY2llczpbZXMsU19dLHN0eWxlczpbJ0BrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZHswJSw1MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtY2hlY2tlZC1jaGVja21hcmstcGF0aHswJSw1MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7MCUsNjguMiV7dHJhbnNmb3JtOnNjYWxlWCgwKX02OC4yJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLCAxKX0xMDAle3RyYW5zZm9ybTpzY2FsZVgoMSl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtdW5jaGVja2VkLWNoZWNrbWFyay1wYXRoe2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtzdHJva2UtZGFzaG9mZnNldDowfXRve3N0cm9rZS1kYXNob2Zmc2V0Oi0yMi45MTAyNTl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya3swJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX0zMi44JSwxMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApfX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1mcmFtZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTZ9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94LWxheW91dHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87dXNlci1zZWxlY3Q6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDowO21hcmdpbjphdXRvO21hcmdpbi1yaWdodDo4cHg7b3JkZXI6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1jaGVja2JveC1mcmFtZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWZyYW1le3RyYW5zaXRpb246bm9uZX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLG9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpOy13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6bm9uZX0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06bm9uZX0ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTowfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCV9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTk7c3Ryb2tlLWRhc2hhcnJheToyMi45MTAyNTk7c3Ryb2tlLXdpZHRoOjIuMTMzMzMzMzMzM3B4fS5jZGstaGlnaC1jb250cmFzdC1ibGFjay1vbi13aGl0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7d2lkdGg6Y2FsYygxMDAlIC0gNnB4KTtoZWlnaHQ6MnB4O29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApIHJvdGF0ZSgwZGVnKTtib3JkZXItcmFkaXVzOjJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O21hcmdpbi10b3A6MnB4fS5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye29yZGVyOjE7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4cHh9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MX0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3t0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKDBkZWcpfS5tYXQtY2hlY2tib3gtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfS5tYXQtY2hlY2tib3gtaW5wdXQ6Zm9jdXN+Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE5QZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+TFBlKSxtdWx0aTohMH0sTFBlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5NXt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOlskdChbTlBlXSksdHRdfSksbn0pKCkscmVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSwkcD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsZG4senAscmVlLGRuLHJlZV19KSxufSkoKSxzZWU9TnMoe3Bhc3NpdmU6ITB9KSxhZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbmdab25lPWksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHM9bmV3IE1hcH1tb25pdG9yKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGFvO2xldCBpPWNhKGUpLHI9dGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZ2V0KGkpO2lmKHIpcmV0dXJuIHIuc3ViamVjdDtsZXQgbz1uZXcgVGUscz0iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIsYT1sPT57ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IiE9PWwuYW5pbWF0aW9uTmFtZXx8aS5jbGFzc0xpc3QuY29udGFpbnMocyk/ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1sLmFuaW1hdGlvbk5hbWUmJmkuY2xhc3NMaXN0LmNvbnRhaW5zKHMpJiYoaS5jbGFzc0xpc3QucmVtb3ZlKHMpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pm8ubmV4dCh7dGFyZ2V0OmwudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMX0pKSk6KGkuY2xhc3NMaXN0LmFkZChzKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITB9KSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aS5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpfX0pLG99c3RvcE1vbml0b3JpbmcoZSl7bGV0IGk9Y2EoZSkscj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoaSk7ciYmKHIudW5saXN0ZW4oKSxyLnN1YmplY3QuY29tcGxldGUoKSxpLmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmRlbGV0ZShpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLnN0b3BNb25pdG9yaW5nKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHc1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxWUGU9bmV3IHNlKCJNQVRfSU5QVVRfVkFMVUVfQUNDRVNTT1IiKSxIUGU9WyJidXR0b24iLCJjaGVja2JveCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInN1Ym1pdCJdLFVQZT0wLHpQZT1SQShjbGFzc3tjb25zdHJ1Y3RvcihuLHQsZSxpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9bix0aGlzLl9wYXJlbnRGb3JtPXQsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWUsdGhpcy5uZ0NvbnRyb2w9aSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGV9fSksUV89KCgpPT57Y2xhc3MgbiBleHRlbmRzIHpQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXtzdXBlcihhLG8scyxyKSx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9hdXRvZmlsbE1vbml0b3I9Yyx0aGlzLl9mb3JtRmllbGQ9ZCx0aGlzLl91aWQ9Im1hdC1pbnB1dC0iK1VQZSsrLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGUsdGhpcy5jb250cm9sVHlwZT0ibWF0LWlucHV0Iix0aGlzLmF1dG9maWxsZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdHlwZT0idGV4dCIsdGhpcy5fcmVhZG9ubHk9ITEsdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXM9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiXS5maWx0ZXIoZj0+RlYoKS5oYXMoZikpLHRoaXMuX2lPU0tleXVwTGlzdGVuZXI9Zj0+e2xldCBtPWYudGFyZ2V0OyFtLnZhbHVlJiYwPT09bS5zZWxlY3Rpb25TdGFydCYmMD09PW0uc2VsZWN0aW9uRW5kJiYobS5zZXRTZWxlY3Rpb25SYW5nZSgxLDEpLG0uc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKSl9O2xldCBwPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxoPXAubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3I9bHx8cCx0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXRoaXMudmFsdWUsdGhpcy5pZD10aGlzLmlkLGkuSU9TJiZ1LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57ZS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX0pLHRoaXMuX2lzU2VydmVyPSF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsdGhpcy5faXNOYXRpdmVTZWxlY3Q9InNlbGVjdCI9PT1oLHRoaXMuX2lzVGV4dGFyZWE9InRleHRhcmVhIj09PWgsdGhpcy5faXNJbkZvcm1GaWVsZD0hIWQsdGhpcy5faXNOYXRpdmVTZWxlY3QmJih0aGlzLmNvbnRyb2xUeXBlPXAubXVsdGlwbGU/Im1hdC1uYXRpdmUtc2VsZWN0LW11bHRpcGxlIjoibWF0LW5hdGl2ZS1zZWxlY3QiKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFNjLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPVd0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJkZWKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5fZGlydHlDaGVja05hdGl2ZVZhbHVlKCksdGhpcy5fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9mb2N1c0NoYW5nZWQoZSl7ZSE9PXRoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uSW5wdXQoKXt9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2Zvcm1GaWVsZCxpPWUmJiJsZWdhY3kiPT09ZS5hcHBlYXJhbmNlJiYhZS5faGFzTGFiZWw/LigpP251bGw6dGhpcy5wbGFjZWhvbGRlcjtpZihpIT09dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcil7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXI9aSxpP3Iuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsaSk6ci5yZW1vdmVBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIil9fV9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7dGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZSE9PWUmJih0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fdmFsaWRhdGVUeXBlKCl7SFBlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHVpKSx3KHBhLDEwKSx3KEdfLDgpLHcoV18sOCksdyhSXyksdyhWUGUsMTApLHcoYWVlKSx3KHB0KSx3KHVtLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJtYXRJbnB1dCIsIiJdLFsidGV4dGFyZWEiLCJtYXRJbnB1dCIsIiJdLFsic2VsZWN0IiwibWF0TmF0aXZlQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5wdXQtZWxlbWVudCIsIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2wiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9mb2N1c0NoYW5nZWQoITApfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMSl9KSgiaW5wdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uSW5wdXQoKX0pLDImZSYmKEFhKCJkaXNhYmxlZCIsaS5kaXNhYmxlZCkoInJlcXVpcmVkIixpLnJlcXVpcmVkKSx6ZSgiaWQiLGkuaWQpKCJkYXRhLXBsYWNlaG9sZGVyIixpLnBsYWNlaG9sZGVyKSgibmFtZSIsaS5uYW1lfHxudWxsKSgicmVhZG9ubHkiLGkucmVhZG9ubHkmJiFpLl9pc05hdGl2ZVNlbGVjdHx8bnVsbCkoImFyaWEtaW52YWxpZCIsaS5lbXB0eSYmaS5yZXF1aXJlZD9udWxsOmkuZXJyb3JTdGF0ZSkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQpLGF0KCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1uYXRpdmUtc2VsZWN0LWlubGluZSIsaS5faXNJbmxpbmVTZWxlY3QoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsaWQ6ImlkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLG5hbWU6Im5hbWUiLHJlcXVpcmVkOiJyZXF1aXJlZCIsdHlwZToidHlwZSIsZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSx2YWx1ZToidmFsdWUiLHJlYWRvbmx5OiJyZWFkb25seSJ9LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlVfLHVzZUV4aXN0aW5nOm59XSksdHQsenRdfSksbn0pKCksQXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUl9dLGltcG9ydHM6W3c1LGRtLGRuLHc1LGRtXX0pLG59KSgpO2Z1bmN0aW9uIGpQZShuLHQpe2lmKDEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIiBSZWxvYWQgcGVyaW9kIGhhcyB0byBiZSBtaW5pbXVtIG9mICIsZS5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLCIgc2Vjb25kcy4gIil9fWZ1bmN0aW9uIEdQZShuLHQpezEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxLCIgUGFnZSBzaXplIGhhcyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXIuICIpLHYoKSl9dmFyIGxlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5yZWxvYWRUb2dnbGVkPW5ldyBHLHRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ9bmV3IEcsdGhpcy5wYWdlU2l6ZUNoYW5nZWQ9bmV3IEcsdGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TPTMwLHRoaXMucmVsb2FkUGVyaW9kQ29udHJvbD1uZXcgbncodGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLFtTYy5yZXF1aXJlZCxTYy5taW4odGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TKV0pLHRoaXMucGFnaW5hdGlvbkNvbnRyb2w9bmV3IG53KDEsW1NjLnJlcXVpcmVkLFNjLm1pbigxKSxuPT57bGV0IHQ9TnVtYmVyKG4udmFsdWUpO3JldHVybiBNYXRoLnJvdW5kKHQpPT09bi52YWx1ZT9udWxsOntpbnRlZ2VyOnt2YWx1ZTpuLnZhbHVlfX19XSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCYmdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZC5lbWl0KDFlMyp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWUpfSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsaWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUucmVsb2FkUGVyaW9kSW5Ncyl7bGV0IGk9ZS5yZWxvYWRQZXJpb2RJbk1zO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuc2V0VmFsdWUoaS5jdXJyZW50VmFsdWUvMWUzKX1pZihlLnJlbG9hZEVuYWJsZWQmJihlLnJlbG9hZEVuYWJsZWQuY3VycmVudFZhbHVlP3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5lbmFibGUoKTp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZGlzYWJsZSgpKSxlLnBhZ2VTaXplKXtsZXQgaT1lLnBhZ2VTaXplO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnBhZ2luYXRpb25Db250cm9sLnNldFZhbHVlKGkuY3VycmVudFZhbHVlKX19b25SZWxvYWRUb2dnbGUoKXt0aGlzLnJlbG9hZFRvZ2dsZWQuZW1pdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7cmVsb2FkRW5hYmxlZDoicmVsb2FkRW5hYmxlZCIscmVsb2FkUGVyaW9kSW5NczoicmVsb2FkUGVyaW9kSW5NcyIscGFnZVNpemU6InBhZ2VTaXplIn0sb3V0cHV0czp7cmVsb2FkVG9nZ2xlZDoicmVsb2FkVG9nZ2xlZCIscmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6InJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixwYWdlU2l6ZUNoYW5nZWQ6InBhZ2VTaXplQ2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTQsdmFyczo1LGNvbnN0czpbWzEsInJlbG9hZC10b2dnbGUiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJSZWxvYWQgUGVyaW9kIChzZWNvbmRzKSIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJQYWdpbmF0aW9uIExpbWl0IiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJoMyIpLEQoMSwiU2V0dGluZ3MiKSx2KCksZygyLCJkaXYiKSgzLCJkaXYiLDApKDQsIm1hdC1jaGVja2JveCIsMSksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlKCl9KSxEKDUsIlJlbG9hZCBkYXRhIiksdigpKCksZyg2LCJkaXYiKSg3LCJtYXQtZm9ybS1maWVsZCIpLE4oOCwiaW5wdXQiLDIpLHYoKSxFKDksalBlLDIsMSwibWF0LWVycm9yIiwzKSx2KCkoKSxnKDEwLCJkaXYiKSgxMSwibWF0LWZvcm0tZmllbGQiKSxOKDEyLCJpbnB1dCIsNCksdigpLEUoMTMsR1BlLDIsMCwibWF0LWVycm9yIiwzKSx2KCkpLDImZSYmKHgoNCksYigiY2hlY2tlZCIsaS5yZWxvYWRFbmFibGVkKSx4KDQpLGIoImZvcm1Db250cm9sIixpLnJlbG9hZFBlcmlvZENvbnRyb2wpLHgoMSksYigibmdJZiIsaS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJtaW4iKXx8aS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJyZXF1aXJlZCIpKSx4KDMpLGIoImZvcm1Db250cm9sIixpLnBhZ2luYXRpb25Db250cm9sKSx4KDEpLGIoIm5nSWYiLGkucGFnaW5hdGlvbkNvbnRyb2wuaW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W1hlLHRJLGc1LG0kLHY1LEVkLEhKLER1LFFfXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5oM1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDIwcHg7XG59XG5cbi5yZWxvYWQtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59Il19KSxufSkoKSxjZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChSQyksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChPQyksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoJGYpfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZEEoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHBBKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChoQSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLFAoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWxvYWRFbmFibGVkIixXKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFcoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFcoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbbGVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx1ZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lfWlzQnV0dG9uRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1FZS5MT0FESU5HfW9wZW5EaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKGNlZSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLE4oMSwibWF0LWljb24iLDEpLHYoKSksMiZlJiZiKCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6WyRuLFpuXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxkZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUFYpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmYigic2V0dGluZ3NMb2FkU3RhdGUiLFcoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbdWVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRUGU9WyJtYXQtbWVudS1pdGVtIiwiIl07ZnVuY3Rpb24gS1BlKG4sdCl7MSZuJiYoam4oKSxnKDAsInN2ZyIsMiksTigxLCJwb2x5Z29uIiwzKSx2KCkpfXZhciBoZWU9WyIqIl07ZnVuY3Rpb24gWlBlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwwKSxQKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmNsb3NlZC5lbWl0KCJjbGljayIpKX0pKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25TdGFydChyKSl9KSgiQHRyYW5zZm9ybU1lbnUuZG9uZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25Eb25lKHIpKX0pLGcoMSwiZGl2IiwxKSxObigyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJpZCIsZS5wYW5lbElkKSgibmdDbGFzcyIsZS5fY2xhc3NMaXN0KSgiQHRyYW5zZm9ybU1lbnUiLGUuX3BhbmVsQW5pbWF0aW9uU3RhdGUpLHplKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsZS5hcmlhTGFiZWxsZWRieXx8bnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLGUuYXJpYURlc2NyaWJlZGJ5fHxudWxsKX19dmFyIHBJPXt0cmFuc2Zvcm1NZW51OkhyKCJ0cmFuc2Zvcm1NZW51IixbRWkoInZvaWQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjgpIn0pKSxJaSgidm9pZCA9PiBlbnRlciIsVmkoIjEyMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToic2NhbGUoMSkifSkpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSksZmFkZUluSXRlbXM6SHIoImZhZGVJbkl0ZW1zIixbRWkoInNob3dpbmciLHJuKHtvcGFjaXR5OjF9KSksSWkoInZvaWQgPT4gKiIsW3JuKHtvcGFjaXR5OjB9KSxWaSgiNDAwbXMgMTAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LEpQZT1uZXcgc2UoIk1hdE1lbnVDb250ZW50IiksUzU9bmV3IHNlKCJNQVRfTUVOVV9QQU5FTCIpLCRQZT1McyhnbyhjbGFzc3t9KSksRWM9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fZm9jdXNNb25pdG9yPXIsdGhpcy5fcGFyZW50TWVudT1vLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5yb2xlPSJtZW51aXRlbSIsdGhpcy5faG92ZXJlZD1uZXcgVGUsdGhpcy5fZm9jdXNlZD1uZXcgVGUsdGhpcy5faGlnaGxpZ2h0ZWQ9ITEsdGhpcy5fdHJpZ2dlcnNTdWJtZW51PSExLG8/LmFkZEl0ZW0/Lih0aGlzKX1mb2N1cyhlLGkpe3RoaXMuX2ZvY3VzTW9uaXRvciYmZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSksdGhpcy5fZm9jdXNlZC5uZXh0KHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9wYXJlbnRNZW51JiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0mJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSh0aGlzKSx0aGlzLl9ob3ZlcmVkLmNvbXBsZXRlKCksdGhpcy5fZm9jdXNlZC5jb21wbGV0ZSgpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9X2NoZWNrRGlzYWJsZWQoZSl7dGhpcy5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX1faGFuZGxlTW91c2VFbnRlcigpe3RoaXMuX2hvdmVyZWQubmV4dCh0aGlzKX1nZXRMYWJlbCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUoITApLGk9ZS5xdWVyeVNlbGVjdG9yQWxsKCJtYXQtaWNvbiwgLm1hdGVyaWFsLWljb25zIik7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXS5yZW1vdmUoKTtyZXR1cm4gZS50ZXh0Q29udGVudD8udHJpbSgpfHwiIn1fc2V0SGlnaGxpZ2h0ZWQoZSl7dGhpcy5faGlnaGxpZ2h0ZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X2hhc0ZvY3VzKCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCdCksdyh6ciksdyhTNSw4KSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtaXRlbSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY2hlY2tEaXNhYmxlZChvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVNb3VzZUVudGVyKCl9KSwyJmUmJih6ZSgicm9sZSIsaS5yb2xlKSgidGFiaW5kZXgiLGkuX2dldFRhYkluZGV4KCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIm1hdC1tZW51LWl0ZW0iLCEwKSgibWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCIsaS5faGlnaGxpZ2h0ZWQpKCJtYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlciIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixyb2xlOiJyb2xlIn0sZXhwb3J0QXM6WyJtYXRNZW51SXRlbSJdLGZlYXR1cmVzOlt0dF0sYXR0cnM6UVBlLG5nQ29udGVudFNlbGVjdG9yczpoZWUsZGVjbHM6Myx2YXJzOjMsY29uc3RzOltbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1lbnUtcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbImNsYXNzIiwibWF0LW1lbnUtc3VibWVudS1pY29uIiwidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDQsIm5nSWYiXSxbInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtbWVudS1zdWJtZW51LWljb24iXSxbInBvaW50cyIsIjAsMCA1LDUgMCwxMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksTm4oMCksTigxLCJkaXYiLDApLEUoMixLUGUsMiwwLCJzdmciLDEpKSwyJmUmJih4KDEpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSx4KDEpLGIoIm5nSWYiLGkuX3RyaWdnZXJzU3VibWVudSkpfSxkZXBlbmRlbmNpZXM6W1hlLGVzXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmZWU9bmV3IHNlKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSksdFJlPTAsb3c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1vLHRoaXMuX3hQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy54UG9zaXRpb24sdGhpcy5feVBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnlQb3NpdGlvbix0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXM9bmV3IGNsLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5fYW5pbWF0aW9uRG9uZT1uZXcgVGUsdGhpcy5vdmVybGF5UGFuZWxDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5iYWNrZHJvcENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zLmJhY2tkcm9wQ2xhc3MsdGhpcy5fb3ZlcmxhcFRyaWdnZXI9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxhcFRyaWdnZXIsdGhpcy5faGFzQmFja2Ryb3A9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGFzQmFja2Ryb3AsdGhpcy5jbG9zZWQ9bmV3IEcsdGhpcy5jbG9zZT10aGlzLmNsb3NlZCx0aGlzLnBhbmVsSWQ9Im1hdC1tZW51LXBhbmVsLSIrdFJlKyt9Z2V0IHhQb3NpdGlvbigpe3JldHVybiB0aGlzLl94UG9zaXRpb259c2V0IHhQb3NpdGlvbihlKXt0aGlzLl94UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCB5UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feVBvc2l0aW9ufXNldCB5UG9zaXRpb24oZSl7dGhpcy5feVBvc2l0aW9uPWUsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgb3ZlcmxhcFRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fb3ZlcmxhcFRyaWdnZXJ9c2V0IG92ZXJsYXBUcmlnZ2VyKGUpe3RoaXMuX292ZXJsYXBUcmlnZ2VyPVd0KGUpfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9c2V0IHBhbmVsQ2xhc3MoZSl7bGV0IGk9dGhpcy5fcHJldmlvdXNQYW5lbENsYXNzO2kmJmkubGVuZ3RoJiZpLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSExfSksdGhpcy5fcHJldmlvdXNQYW5lbENsYXNzPWUsZSYmZS5sZW5ndGgmJihlLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSEwfSksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIil9Z2V0IGNsYXNzTGlzdCgpe3JldHVybiB0aGlzLnBhbmVsQ2xhc3N9c2V0IGNsYXNzTGlzdChlKXt0aGlzLnBhbmVsQ2xhc3M9ZX1uZ09uSW5pdCgpe3RoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKSx0aGlzLl9rZXlNYW5hZ2VyPW5ldyBBXyh0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLndpdGhXcmFwKCkud2l0aFR5cGVBaGVhZCgpLndpdGhIb21lQW5kRW5kKCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uPXRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZSgoKT0+dGhpcy5jbG9zZWQuZW1pdCgidGFiIikpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSx2aShlPT51biguLi5lLm1hcChpPT5pLl9mb2N1c2VkKSkpKS5zdWJzY3JpYmUoZT0+dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuX2tleU1hbmFnZXI7aWYoImVudGVyIj09PXRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUmJmkuYWN0aXZlSXRlbT8uX2hhc0ZvY3VzKCkpe2xldCByPWUudG9BcnJheSgpLG89TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0xLGkuYWN0aXZlSXRlbUluZGV4fHwwKSk7cltvXSYmIXJbb10uZGlzYWJsZWQ/aS5zZXRBY3RpdmVJdGVtKG8pOmkuc2V0TmV4dEl0ZW1BY3RpdmUoKX19KX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5kZXN0cm95KCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKX1faG92ZXJlZCgpe3JldHVybiB0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksdmkoaT0+dW4oLi4uaS5tYXAocj0+ci5faG92ZXJlZCkpKSl9YWRkSXRlbShlKXt9cmVtb3ZlSXRlbShlKXt9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9dGhpcy5fa2V5TWFuYWdlcjtzd2l0Y2goaSl7Y2FzZSAyNzpNcihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIikpO2JyZWFrO2Nhc2UgMzc6dGhpcy5wYXJlbnRNZW51JiYibHRyIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7Y2FzZSAzOTp0aGlzLnBhcmVudE1lbnUmJiJydGwiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztkZWZhdWx0OnJldHVybigzOD09PWl8fDQwPT09aSkmJnIuc2V0Rm9jdXNPcmlnaW4oImtleWJvYXJkIiksdm9pZCByLm9uS2V5ZG93bihlKX1lLnN0b3BQcm9wYWdhdGlvbigpfWZvY3VzRmlyc3RJdGVtKGU9InByb2dyYW0iKXt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKCgpPT57bGV0IGk9bnVsbDtpZih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubGVuZ3RoJiYoaT10aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZmlyc3QuX2dldEhvc3RFbGVtZW50KCkuY2xvc2VzdCgnW3JvbGU9Im1lbnUiXScpKSwhaXx8IWkuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpe2xldCByPXRoaXMuX2tleU1hbmFnZXI7ci5zZXRGb2N1c09yaWdpbihlKS5zZXRGaXJzdEl0ZW1BY3RpdmUoKSwhci5hY3RpdmVJdGVtJiZpJiZpLmZvY3VzKCl9fSl9cmVzZXRBY3RpdmVJdGVtKCl7dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKX1zZXRFbGV2YXRpb24oZSl7bGV0IGk9TWF0aC5taW4odGhpcy5fYmFzZUVsZXZhdGlvbitlLDI0KSxyPWAke3RoaXMuX2VsZXZhdGlvblByZWZpeH0ke2l9YCxvPU9iamVjdC5rZXlzKHRoaXMuX2NsYXNzTGlzdCkuZmluZChzPT5zLnN0YXJ0c1dpdGgodGhpcy5fZWxldmF0aW9uUHJlZml4KSk7KCFvfHxvPT09dGhpcy5fcHJldmlvdXNFbGV2YXRpb24pJiYodGhpcy5fcHJldmlvdXNFbGV2YXRpb24mJih0aGlzLl9jbGFzc0xpc3RbdGhpcy5fcHJldmlvdXNFbGV2YXRpb25dPSExKSx0aGlzLl9jbGFzc0xpc3Rbcl09ITAsdGhpcy5fcHJldmlvdXNFbGV2YXRpb249cil9c2V0UG9zaXRpb25DbGFzc2VzKGU9dGhpcy54UG9zaXRpb24saT10aGlzLnlQb3NpdGlvbil7bGV0IHI9dGhpcy5fY2xhc3NMaXN0O3JbIm1hdC1tZW51LWJlZm9yZSJdPSJiZWZvcmUiPT09ZSxyWyJtYXQtbWVudS1hZnRlciJdPSJhZnRlciI9PT1lLHJbIm1hdC1tZW51LWFib3ZlIl09ImFib3ZlIj09PWksclsibWF0LW1lbnUtYmVsb3ciXT0iYmVsb3ciPT09aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X3N0YXJ0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0iZW50ZXIifV9yZXNldEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQifV9vbkFuaW1hdGlvbkRvbmUoZSl7dGhpcy5fYW5pbWF0aW9uRG9uZS5uZXh0KGUpLHRoaXMuX2lzQW5pbWF0aW5nPSExfV9vbkFuaW1hdGlvblN0YXJ0KGUpe3RoaXMuX2lzQW5pbWF0aW5nPSEwLCJlbnRlciI9PT1lLnRvU3RhdGUmJjA9PT10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCYmKGUuZWxlbWVudC5zY3JvbGxUb3A9MCl9X3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCl7dGhpcy5fYWxsSXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2FsbEl0ZW1zKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMucmVzZXQoZS5maWx0ZXIoaT0+aS5fcGFyZW50TWVudT09PXRoaXMpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubm90aWZ5T25DaGFuZ2VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhmZWUpLHcobm4pKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixKUGUsNSksTmkocixFYyw1KSxOaShyLEVjLDQpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmxhenlDb250ZW50PW8uZmlyc3QpLE5lKG89TGUoKSkmJihpLl9hbGxJdGVtcz1vKSxOZShvPUxlKCkpJiYoaS5pdGVtcz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50ZW1wbGF0ZVJlZj1yLmZpcnN0KX19LGlucHV0czp7YmFja2Ryb3BDbGFzczoiYmFja2Ryb3BDbGFzcyIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0seFBvc2l0aW9uOiJ4UG9zaXRpb24iLHlQb3NpdGlvbjoieVBvc2l0aW9uIixvdmVybGFwVHJpZ2dlcjoib3ZlcmxhcFRyaWdnZXIiLGhhc0JhY2tkcm9wOiJoYXNCYWNrZHJvcCIscGFuZWxDbGFzczpbImNsYXNzIiwicGFuZWxDbGFzcyJdLGNsYXNzTGlzdDoiY2xhc3NMaXN0In0sb3V0cHV0czp7Y2xvc2VkOiJjbG9zZWQiLGNsb3NlOiJjbG9zZSJ9fSksbn0pKCksSXU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIG93e2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuX2VsZXZhdGlvblByZWZpeD0ibWF0LWVsZXZhdGlvbi16Iix0aGlzLl9iYXNlRWxldmF0aW9uPTR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcocHQpLHcoZmVlKSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsbnVsbCl9LGV4cG9ydEFzOlsibWF0TWVudSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6UzUsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOmhlZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sidGFiaW5kZXgiLCItMSIsInJvbGUiLCJtZW51IiwxLCJtYXQtbWVudS1wYW5lbCIsMywiaWQiLCJuZ0NsYXNzIiwia2V5ZG93biIsImNsaWNrIl0sWzEsIm1hdC1tZW51LWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxaUGUsMyw2LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsnbWF0LW1lbnV7ZGlzcGxheTpub25lfS5tYXQtbWVudS1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDhweCk7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowO21pbi1oZWlnaHQ6NjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1tZW51LWNvbnRlbnQ6bm90KDplbXB0eSl7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1lbnUtaXRlbXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW17bWFyZ2luLXRvcDoxcHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0ubWF0LW1lbnUtc3VibWVudS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDo1cHg7aGVpZ2h0OjEwcHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtbWVudS1zdWJtZW51LWljb257cmlnaHQ6YXV0bztsZWZ0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgc2NhbGVYKC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fWJ1dHRvbi5tYXQtbWVudS1pdGVte3dpZHRoOjEwMCV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3BJLnRyYW5zZm9ybU1lbnUscEkuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG1lZT1uZXcgc2UoIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpLGlSZT17cHJvdmlkZTptZWUsZGVwczpbUWldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxwZWU9TnMoe3Bhc3NpdmU6ITB9KSxyUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2VsZW1lbnQ9aSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPXIsdGhpcy5fbWVudUl0ZW1JbnN0YW5jZT1hLHRoaXMuX2Rpcj1sLHRoaXMuX2ZvY3VzTW9uaXRvcj1jLHRoaXMuX25nWm9uZT11LHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9tZW51T3Blbj0hMSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5faGFuZGxlVG91Y2hTdGFydD1kPT57SEMoZCl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgRyx0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgRyx0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1zIGluc3RhbmNlb2Ygb3c/czp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQscGVlKSxhJiYoYS5fdHJpZ2dlcnNTdWJtZW51PXRoaXMudHJpZ2dlcnNTdWJtZW51KCkpfWdldCBfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yKCl7cmV0dXJuIHRoaXMubWVudX1zZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcihlKXt0aGlzLm1lbnU9ZX1nZXQgbWVudSgpe3JldHVybiB0aGlzLl9tZW51fXNldCBtZW51KGUpe2UhPT10aGlzLl9tZW51JiYodGhpcy5fbWVudT1lLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGUmJih0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249ZS5jbG9zZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2Rlc3Ryb3lNZW51KGkpLCgiY2xpY2siPT09aXx8InRhYiI9PT1pKSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkLmVtaXQoaSl9KSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxwZWUpLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faG92ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgbWVudU9wZW4oKXtyZXR1cm4gdGhpcy5fbWVudU9wZW59Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifXRyaWdnZXJzU3VibWVudSgpe3JldHVybiEoIXRoaXMuX21lbnVJdGVtSW5zdGFuY2V8fCF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2Ygb3cmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUob3QoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2Ygb3c/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoSGUocj0+InZvaWQiPT09ci50b1N0YXRlKSxIdCgxKSxvdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXt0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKX1fY3JlYXRlT3ZlcmxheShlKXtpZighdGhpcy5fb3ZlcmxheVJlZil7bGV0IGk9dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhlKTt0aGlzLl9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkucG9zaXRpb25TdHJhdGVneSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZShpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKX1yZXR1cm4gdGhpcy5fb3ZlcmxheVJlZn1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnQpLndpdGhMb2NrZWRQb3NpdGlvbigpLndpdGhHcm93QWZ0ZXJPcGVuKCkud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCIubWF0LW1lbnUtcGFuZWwsIC5tYXQtbWRjLW1lbnUtcGFuZWwiKSxiYWNrZHJvcENsYXNzOmUuYmFja2Ryb3BDbGFzc3x8ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIixwYW5lbENsYXNzOmUub3ZlcmxheVBhbmVsQ2xhc3Msc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxkaXJlY3Rpb246dGhpcy5fZGlyfSl9X3N1YnNjcmliZVRvUG9zaXRpb25zKGUsaSl7ZS5zZXRQb3NpdGlvbkNsYXNzZXMmJmkucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZShyPT57bGV0IG89InN0YXJ0Ij09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVg/ImFmdGVyIjoiYmVmb3JlIixzPSJ0b3AiPT09ci5jb25uZWN0aW9uUGFpci5vdmVybGF5WT8iYmVsb3ciOiJhYm92ZSI7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scykpOmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scyl9KX1fc2V0UG9zaXRpb24oZSxpKXtsZXRbcixvXT0iYmVmb3JlIj09PWUueFBvc2l0aW9uP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl0sW3MsYV09ImFib3ZlIj09PWUueVBvc2l0aW9uP1siYm90dG9tIiwidG9wIl06WyJ0b3AiLCJib3R0b20iXSxbbCxjXT1bcyxhXSxbdSxkXT1bcixvXSxwPTA7aWYodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSl7aWYoZD1yPSJiZWZvcmUiPT09ZS54UG9zaXRpb24/InN0YXJ0IjoiZW5kIixvPXU9ImVuZCI9PT1yPyJzdGFydCI6ImVuZCIsdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51KXtpZihudWxsPT10aGlzLl9wYXJlbnRJbm5lclBhZGRpbmcpe2xldCBoPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5pdGVtcy5maXJzdDt0aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc9aD9oLl9nZXRIb3N0RWxlbWVudCgpLm9mZnNldFRvcDowfXA9ImJvdHRvbSI9PT1zP3RoaXMuX3BhcmVudElubmVyUGFkZGluZzotdGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nfX1lbHNlIGUub3ZlcmxhcFRyaWdnZXJ8fChsPSJ0b3AiPT09cz8iYm90dG9tIjoidG9wIixjPSJ0b3AiPT09YT8iYm90dG9tIjoidG9wIik7aS53aXRoUG9zaXRpb25zKFt7b3JpZ2luWDpyLG9yaWdpblk6bCxvdmVybGF5WDp1LG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpvLG9yaWdpblk6bCxvdmVybGF5WDpkLG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpyLG9yaWdpblk6YyxvdmVybGF5WDp1LG92ZXJsYXlZOmEsb2Zmc2V0WTotcH0se29yaWdpblg6byxvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6LXB9XSl9X21lbnVDbG9zaW5nQWN0aW9ucygpe2xldCBlPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLGk9dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpO3JldHVybiB1bihlLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkOmp0KCksdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51P3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoSGUocz0+cyE9PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UpLEhlKCgpPT50aGlzLl9tZW51T3BlbikpOmp0KCksaSl9X2hhbmRsZU1vdXNlZG93bihlKXtWQyhlKXx8KHRoaXMuX29wZW5lZEJ5PTA9PT1lLmJ1dHRvbj8ibW91c2UiOnZvaWQgMCx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZlLnByZXZlbnREZWZhdWx0KCkpfV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZTsoMTM9PT1pfHwzMj09PWkpJiYodGhpcy5fb3BlbmVkQnk9ImtleWJvYXJkIiksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmKDM5PT09aSYmImx0ciI9PT10aGlzLmRpcnx8Mzc9PT1pJiYicnRsIj09PXRoaXMuZGlyKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIsdGhpcy5vcGVuTWVudSgpKX1faGFuZGxlQ2xpY2soZSl7dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKT8oZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9wZW5NZW51KCkpOnRoaXMudG9nZ2xlTWVudSgpfV9oYW5kbGVIb3ZlcigpeyF0aGlzLnRyaWdnZXJzU3VibWVudSgpfHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51fHwodGhpcy5faG92ZXJTdWJzY3JpcHRpb249dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShIZShlPT5lPT09dGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmIWUuZGlzYWJsZWQpLG5sKDAsZmcpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vcGVuZWRCeT0ibW91c2UiLHRoaXMubWVudSBpbnN0YW5jZW9mIG93JiZ0aGlzLm1lbnUuX2lzQW5pbWF0aW5nP3RoaXMubWVudS5fYW5pbWF0aW9uRG9uZS5waXBlKEh0KDEpLG5sKDAsZmcpLG90KHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLm9wZW5NZW51KCkpOnRoaXMub3Blbk1lbnUoKX0pKX1fZ2V0UG9ydGFsKGUpe3JldHVybighdGhpcy5fcG9ydGFsfHx0aGlzLl9wb3J0YWwudGVtcGxhdGVSZWYhPT1lLnRlbXBsYXRlUmVmKSYmKHRoaXMuX3BvcnRhbD1uZXcgaHMoZS50ZW1wbGF0ZVJlZix0aGlzLl92aWV3Q29udGFpbmVyUmVmKSksdGhpcy5fcG9ydGFsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KHlpKSx3KG1lZSksdyhTNSw4KSx3KEVjLDEwKSx3KGlyLDgpLHcoenIpLHcocHQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJnplKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVufHxudWxsKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpLFB1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyByUmV7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCIiXSxbIiIsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1lbnUtdHJpZ2dlciJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZWg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaVJlXSxpbXBvcnRzOltrZSxkbix4YyxWbyxTdSxkbl19KSxufSkoKTtmdW5jdGlvbiBvUmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDgpfWZ1bmN0aW9uIHNSZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gYVJlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwxMCl9dmFyIGhhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5ERUZBVUxUPTBdPSJERUZBVUxUIixuW24uREFSS19NT0RFX09OPTFdPSJEQVJLX01PREVfT04iLG5bbi5EQVJLX01PREVfT0ZGPTJdPSJEQVJLX01PREVfT0ZGIn0oaGF8fChoYT17fSkpLGhhKSkoKSxnZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGFya01vZGVPdmVycmlkZT1oYSx0aGlzLm9uT3ZlcnJpZGVDaGFuZ2VkPW5ldyBHfWdldEJ1dHRvblRpdGxlKCl7bGV0IGU7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBoYS5ERUZBVUxUOmU9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046ZT0iRGFyayBtb2RlIjticmVhaztjYXNlIGhhLkRBUktfTU9ERV9PRkY6ZT0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7ZX1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiXV0saW5wdXRzOntkYXJrTW9kZU92ZXJyaWRlOiJkYXJrTW9kZU92ZXJyaWRlIn0sb3V0cHV0czp7b25PdmVycmlkZUNoYW5nZWQ6Im9uT3ZlcnJpZGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIiwiTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJuZ1N3aXRjaCIsInRpdGxlIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIlNldCB0aGUgdGhlbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgbW9kZSBpbiB0aGUgYnJvd3Nlci4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBsaWdodCBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBkYXJrIFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLEUoMSxvUmUsMSwwLCJtYXQtaWNvbiIsMSksRSgyLHNSZSwxLDAsIm1hdC1pY29uIiwyKSxFKDMsYVJlLDEsMCwibWF0LWljb24iLDMpLHYoKSxnKDQsIm1hdC1tZW51IixudWxsLDQpKDYsImJ1dHRvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCl9KSxnKDcsImxhYmVsIiksRCg4LCJCcm93c2VyIGRlZmF1bHQiKSx2KCkoKSxnKDksImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRil9KSxnKDEwLCJsYWJlbCIpLEQoMTEsIkxpZ2h0IiksdigpKCksZygxMiwiYnV0dG9uIiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pfSksZygxMywibGFiZWwiKSxEKDE0LCJEYXJrIiksdigpKCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDUpKSgibmdTd2l0Y2giLGkuZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixpLmdldEJ1dHRvblRpdGxlKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkZXBlbmRlbmNpZXM6WyRuLFpuLEl1LEVjLFB1LGhyLElyXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxfZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXJrTW9kZU92ZXJyaWRlJD10aGlzLnN0b3JlLnNlbGVjdChzRCkucGlwZShCKGk9Pm51bGw9PT1pP2hhLkRFRkFVTFQ6aT9oYS5EQVJLX01PREVfT046aGEuREFSS19NT0RFX09GRikpfWNoYW5nZURhcmtNb2RlKGUpe2xldCBpPW51bGw7c3dpdGNoKGUpe2Nhc2UgaGEuREVGQVVMVDppPW51bGw7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT0ZGOmk9ITE7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046aT0hMH10aGlzLnN0b3JlLmRpc3BhdGNoKGpEKHtlbmFibGVEYXJrTW9kZTppfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImRhcmtNb2RlT3ZlcnJpZGUiLCJvbk92ZXJyaWRlQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlLWNvbXBvbmVudCIsMCksUCgib25PdmVycmlkZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmNoYW5nZURhcmtNb2RlKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJkYXJrTW9kZU92ZXJyaWRlIixXKDEsMSxpLmRhcmtNb2RlT3ZlcnJpZGUkKSl9LGRlcGVuZGVuY2llczpbZ2VlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiB1UmUobix0KXsxJm4mJk5uKDApfXZhciB4ZWU9WyIqIl07ZnVuY3Rpb24gZFJlKG4sdCl7fXZhciBwUmU9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxoUmU9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19LGZSZT1bInRhYkxpc3RDb250YWluZXIiXSxtUmU9WyJ0YWJMaXN0Il0sZ1JlPVsidGFiTGlzdElubmVyIl0sX1JlPVsibmV4dFBhZ2luYXRvciJdLHZSZT1bInByZXZpb3VzUGFnaW5hdG9yIl0seVJlPVsidGFiQm9keVdyYXBwZXIiXSxiUmU9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiB4UmUobix0KXt9ZnVuY3Rpb24gQ1JlKG4sdCl7MSZuJiZFKDAseFJlLDAsMCwibmctdGVtcGxhdGUiLDEwKSwyJm4mJmIoImNka1BvcnRhbE91dGxldCIsTSgpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiB3UmUobix0KXsxJm4mJkQoMCksMiZuJiZ5dChNKCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gTVJlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgcj1yZShlKSxvPXIuJGltcGxpY2l0LHM9ci5pbmRleCxhPU0oKSxsPXN0KDEpO3JldHVybiBvZShhLl9oYW5kbGVDbGljayhvLGwscykpfSkoImNka0ZvY3VzQ2hhbmdlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgpLl90YWJGb2N1c0NoYW5nZWQocixzKSl9KSxnKDEsImRpdiIsNyksRSgyLENSZSwxLDEsIm5nLXRlbXBsYXRlIiw4KSxFKDMsd1JlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1zdCg0KSxvPU0oKTthdCgibWF0LXRhYi1sYWJlbC1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixvLl9nZXRUYWJMYWJlbElkKGkpKSgibmdDbGFzcyIsZS5sYWJlbENsYXNzKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsZS5kaXNhYmxlZHx8by5kaXNhYmxlUmlwcGxlKSx6ZSgidGFiSW5kZXgiLG8uX2dldFRhYkluZGV4KGUsaSkpKCJhcmlhLXBvc2luc2V0IixpKzEpKCJhcmlhLXNldHNpemUiLG8uX3RhYnMubGVuZ3RoKSgiYXJpYS1jb250cm9scyIsby5fZ2V0VGFiQ29udGVudElkKGkpKSgiYXJpYS1zZWxlY3RlZCIsby5zZWxlY3RlZEluZGV4PT09aSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IiwhZS5hcmlhTGFiZWwmJmUuYXJpYUxhYmVsbGVkYnk/ZS5hcmlhTGFiZWxsZWRieTpudWxsKSx4KDIpLGIoIm5nSWYiLGUudGVtcGxhdGVMYWJlbCkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gU1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXRhYi1ib2R5IiwxMSksUCgiX29uQ2VudGVyZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fcmVtb3ZlVGFiQm9keVdyYXBwZXJIZWlnaHQoKSl9KSgiX29uQ2VudGVyaW5nIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKCk7YXQoIm1hdC10YWItYm9keS1hY3RpdmUiLHIuc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixyLl9nZXRUYWJDb250ZW50SWQoaSkpKCJuZ0NsYXNzIixlLmJvZHlDbGFzcykoImNvbnRlbnQiLGUuY29udGVudCkoInBvc2l0aW9uIixlLnBvc2l0aW9uKSgib3JpZ2luIixlLm9yaWdpbikoImFuaW1hdGlvbkR1cmF0aW9uIixyLmFuaW1hdGlvbkR1cmF0aW9uKSgicHJlc2VydmVDb250ZW50IixyLnByZXNlcnZlQ29udGVudCksemUoInRhYmluZGV4IixudWxsIT1yLmNvbnRlbnRUYWJJbmRleCYmci5zZWxlY3RlZEluZGV4PT09aT9yLmNvbnRlbnRUYWJJbmRleDpudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixyLl9nZXRUYWJMYWJlbElkKGkpKX19dmFyIEVSZT1uZXcgc2UoIk1hdElua0JhclBvc2l0aW9uZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHQ9Pih7bGVmdDp0Pyh0Lm9mZnNldExlZnR8fDApKyJweCI6IjAiLHdpZHRoOnQ/KHQub2Zmc2V0V2lkdGh8fDApKyJweCI6IjAifSl9fSksdmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2lua0JhclBvc2l0aW9uZXI9cix0aGlzLl9hbmltYXRpb25Nb2RlPW99YWxpZ25Ub0VsZW1lbnQoZSl7dGhpcy5zaG93KCksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT10aGlzLl9pbmtCYXJQb3NpdGlvbmVyKGUpLHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubGVmdD1pLmxlZnQsci5zdHlsZS53aWR0aD1pLndpZHRofSl9KX1zaG93KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifWhpZGUoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhFUmUpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaW5rLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbmstYmFyIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpfX0pLG59KSgpLERSZT1uZXcgc2UoIk1hdFRhYkNvbnRlbnQiKSxDZWU9bmV3IHNlKCJNYXRUYWJMYWJlbCIpLHdlZT1uZXcgc2UoIk1BVF9UQUIiKSxNZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGZKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX2Nsb3Nlc3RUYWI9cn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPaSksdyh5aSksdyh3ZWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLWxhYmVsIiwiIl0sWyIiLCJtYXRUYWJMYWJlbCIsIiJdXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOkNlZSx1c2VFeGlzdGluZzpufV0pLHR0XX0pLG59KSgpLEFSZT1nbyhjbGFzc3t9KSxTZWU9bmV3IHNlKCJNQVRfVEFCX0dST1VQIiksYXc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEFSZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX2Nsb3Nlc3RUYWJHcm91cD1pLHRoaXMudGV4dExhYmVsPSIiLHRoaXMuX2NvbnRlbnRQb3J0YWw9bnVsbCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFRlLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLm9yaWdpbj1udWxsLHRoaXMuaXNBY3RpdmU9ITF9Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbChlKXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fY29udGVudFBvcnRhbH1uZ09uQ2hhbmdlcyhlKXsoZS5oYXNPd25Qcm9wZXJ0eSgidGV4dExhYmVsIil8fGUuaGFzT3duUHJvcGVydHkoImRpc2FibGVkIikpJiZ0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9bmdPbkluaXQoKXt0aGlzLl9jb250ZW50UG9ydGFsPW5ldyBocyh0aGlzLl9leHBsaWNpdENvbnRlbnR8fHRoaXMuX2ltcGxpY2l0Q29udGVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKX1fc2V0VGVtcGxhdGVMYWJlbElucHV0KGUpe2UmJmUuX2Nsb3Nlc3RUYWI9PT10aGlzJiYodGhpcy5fdGVtcGxhdGVMYWJlbD1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhTZWUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKE5pKHIsQ2VlLDUpLE5pKHIsRFJlLDcsT2kpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLnRlbXBsYXRlTGFiZWw9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2V4cGxpY2l0Q29udGVudD1vLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW1wbGljaXRDb250ZW50PXIuZmlyc3QpfX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLHRleHRMYWJlbDpbImxhYmVsIiwidGV4dExhYmVsIl0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxsYWJlbENsYXNzOiJsYWJlbENsYXNzIixib2R5Q2xhc3M6ImJvZHlDbGFzcyJ9LGV4cG9ydEFzOlsibWF0VGFiIl0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTp3ZWUsdXNlRXhpc3Rpbmc6bn1dKSx0dCx6dF0sbmdDb250ZW50U2VsZWN0b3JzOnhlZSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLHVSZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxJUmU9e3RyYW5zbGF0ZVRhYjpIcigidHJhbnNsYXRlVGFiIixbRWkoImNlbnRlciwgdm9pZCwgbGVmdC1vcmlnaW4tY2VudGVyLCByaWdodC1vcmlnaW4tY2VudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSxFaSgibGVmdCIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxFaSgicmlnaHQiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxJaSgiKiA9PiBsZWZ0LCAqID0+IHJpZ2h0LCBsZWZ0ID0+IGNlbnRlciwgcmlnaHQgPT4gY2VudGVyIixWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpKSxJaSgidm9pZCA9PiBsZWZ0LW9yaWdpbi1jZW50ZXIiLFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSksSWkoInZvaWQgPT4gcmlnaHQtb3JpZ2luLWNlbnRlciIsW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksVmkoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9LFBSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQnN7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLG8pLHRoaXMuX2hvc3Q9cix0aGlzLl9jZW50ZXJpbmdTdWI9dm4uRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj12bi5FTVBUWX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5fY2VudGVyaW5nU3ViPXRoaXMuX2hvc3QuX2JlZm9yZUNlbnRlcmluZy5waXBlKFZuKHRoaXMuX2hvc3QuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5faG9zdC5fcG9zaXRpb24pKSkuc3Vic2NyaWJlKGU9PntlJiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pLHRoaXMuX2xlYXZpbmdTdWI9dGhpcy5faG9zdC5fYWZ0ZXJMZWF2aW5nQ2VudGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hvc3QucHJlc2VydmVDb250ZW50fHx0aGlzLmRldGFjaCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2NlbnRlcmluZ1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX2xlYXZpbmdTdWIudW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhFbyksdyh5aSksdyhyaSgoKT0+RWVlKSksdyhCdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJCb2R5SG9zdCIsIiJdXSxmZWF0dXJlczpbdHRdfSksbn0pKCksUlJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaXI9aSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGU9bmV3IFRlLHRoaXMuX29uQ2VudGVyaW5nPW5ldyBHLHRoaXMuX2JlZm9yZUNlbnRlcmluZz1uZXcgRyx0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXI9bmV3IEcsdGhpcy5fb25DZW50ZXJlZD1uZXcgRyghMCksdGhpcy5hbmltYXRpb25EdXJhdGlvbj0iNTAwbXMiLHRoaXMucHJlc2VydmVDb250ZW50PSExLGkmJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249aS5jaGFuZ2Uuc3Vic2NyaWJlKG89Pnt0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShvKSxyLm1hcmtGb3JDaGVjaygpfSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoZGkoKG8scyk9Pm8uZnJvbVN0YXRlPT09cy5mcm9tU3RhdGUmJm8udG9TdGF0ZT09PXMudG9TdGF0ZSkpLnN1YnNjcmliZShvPT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pfXNldCBwb3NpdGlvbihlKXt0aGlzLl9wb3NpdGlvbkluZGV4PWUsdGhpcy5fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoKX1uZ09uSW5pdCgpeyJjZW50ZXIiPT10aGlzLl9wb3NpdGlvbiYmbnVsbCE9dGhpcy5vcmlnaW4mJih0aGlzLl9wb3NpdGlvbj10aGlzLl9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKHRoaXMub3JpZ2luKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZS5jb21wbGV0ZSgpfV9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoZSl7bGV0IGk9dGhpcy5faXNDZW50ZXJQb3NpdGlvbihlLnRvU3RhdGUpO3RoaXMuX2JlZm9yZUNlbnRlcmluZy5lbWl0KGkpLGkmJnRoaXMuX29uQ2VudGVyaW5nLmVtaXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCl9X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV9pc0NlbnRlclBvc2l0aW9uKGUpe3JldHVybiJjZW50ZXIiPT1lfHwibGVmdC1vcmlnaW4tY2VudGVyIj09ZXx8InJpZ2h0LW9yaWdpbi1jZW50ZXIiPT1lfV9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShlPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpKXt0aGlzLl9wb3NpdGlvbj10aGlzLl9wb3NpdGlvbkluZGV4PDA/Imx0ciI9PWU/ImxlZnQiOiJyaWdodCI6dGhpcy5fcG9zaXRpb25JbmRleD4wPyJsdHIiPT1lPyJyaWdodCI6ImxlZnQiOiJjZW50ZXIifV9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKGUpe2xldCBpPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpO3JldHVybiJsdHIiPT1pJiZlPD0wfHwicnRsIj09aSYmZT4wPyJsZWZ0LW9yaWdpbi1jZW50ZXIiOiJyaWdodC1vcmlnaW4tY2VudGVyIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpciw4KSx3KG5uKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntfY29udGVudDpbImNvbnRlbnQiLCJfY29udGVudCJdLG9yaWdpbjoib3JpZ2luIixhbmltYXRpb25EdXJhdGlvbjoiYW5pbWF0aW9uRHVyYXRpb24iLHByZXNlcnZlQ29udGVudDoicHJlc2VydmVDb250ZW50Iixwb3NpdGlvbjoicG9zaXRpb24ifSxvdXRwdXRzOntfb25DZW50ZXJpbmc6Il9vbkNlbnRlcmluZyIsX2JlZm9yZUNlbnRlcmluZzoiX2JlZm9yZUNlbnRlcmluZyIsX2FmdGVyTGVhdmluZ0NlbnRlcjoiX2FmdGVyTGVhdmluZ0NlbnRlciIsX29uQ2VudGVyZWQ6Il9vbkNlbnRlcmVkIn19KSxufSkoKSxFZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJSZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KGlyLDgpLHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWJvZHkiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxIb3N0PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWJvZHkiXSxmZWF0dXJlczpbdHRdLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWyJjZGtTY3JvbGxhYmxlIiwiIiwxLCJtYXQtdGFiLWJvZHktY29udGVudCJdLFsiY29udGVudCIsIiJdLFsibWF0VGFiQm9keUhvc3QiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJAdHJhbnNsYXRlVGFiLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25UcmFuc2xhdGVUYWJTdGFydGVkKG8pfSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQobyl9KSxFKDIsZFJlLDAsMCwibmctdGVtcGxhdGUiLDIpLHYoKSksMiZlJiZiKCJAdHJhbnNsYXRlVGFiIix0bygzLGhSZSxpLl9wb3NpdGlvbixIbigxLHBSZSxpLmFuaW1hdGlvbkR1cmF0aW9uKSkpfSxkZXBlbmRlbmNpZXM6W1BSZV0sc3R5bGVzOlsnLm1hdC10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn0ubWF0LXRhYi1ib2R5LWNvbnRlbnRbc3R5bGUqPSJ2aXNpYmlsaXR5OiBoaWRkZW4iXXtkaXNwbGF5Om5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbSVJlLnRyYW5zbGF0ZVRhYl19fSksbn0pKCksVGVlPW5ldyBzZSgiTUFUX1RBQlNfQ09ORklHIiksT1JlPWdvKGNsYXNze30pLERlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT1Jle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPWV9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih6ZSgiYXJpYS1kaXNhYmxlZCIsISFpLmRpc2FibGVkKSxhdCgibWF0LXRhYi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx5ZWU9TnMoe3Bhc3NpdmU6ITB9KSxOUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl92aWV3cG9ydFJ1bGVyPXIsdGhpcy5fZGlyPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hbmltYXRpb25Nb2RlPWwsdGhpcy5fc2Nyb2xsRGlzdGFuY2U9MCx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITEsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPSEwLHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITAsdGhpcy5fc3RvcFNjcm9sbGluZz1uZXcgVGUsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD0wLHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4PW5ldyBHLHRoaXMuaW5kZXhGb2N1c2VkPW5ldyBHLHMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsaShlLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbGVhdmUiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N0b3BJbnRlcnZhbCgpfSl9KX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBzZWxlY3RlZEluZGV4KCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXh9c2V0IHNlbGVjdGVkSW5kZXgoZSl7ZT1QaShlKSx0aGlzLl9zZWxlY3RlZEluZGV4IT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITAsdGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSl9bmdBZnRlclZpZXdJbml0KCl7bGkodGhpcy5fcHJldmlvdXNQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiKX0pLGxpKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7bGV0IGU9dGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6anQoImx0ciIpLGk9dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTUwKSxyPSgpPT57dGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl9O3RoaXMuX2tleU1hbmFnZXI9bmV3IEFfKHRoaXMuX2l0ZW1zKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKS53aXRoSG9tZUFuZEVuZCgpLndpdGhXcmFwKCksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUociksdW4oZSxpLHRoaXMuX2l0ZW1zLmNoYW5nZXMsdGhpcy5faXRlbXNSZXNpemVkKCkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKSxyKCl9KX0pLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShvPT57dGhpcy5pbmRleEZvY3VzZWQuZW1pdChvKSx0aGlzLl9zZXRUYWJGb2N1cyhvKX0pfV9pdGVtc1Jlc2l6ZWQoKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/YW86dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2l0ZW1zKSx2aShlPT5uZXcgUXQoaT0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHI9bmV3IFJlc2l6ZU9ic2VydmVyKG89PmkubmV4dChvKSk7cmV0dXJuIGUuZm9yRWFjaChvPT5yLm9ic2VydmUoby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKSwoKT0+e3IuZGlzY29ubmVjdCgpfX0pKSksQ2EoMSksSGUoZT0+ZS5zb21lKGk9PmkuY29udGVudFJlY3Qud2lkdGg+MCYmaS5jb250ZW50UmVjdC5oZWlnaHQ+MCkpKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl90YWJMYWJlbENvdW50IT10aGlzLl9pdGVtcy5sZW5ndGgmJih0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl90YWJMYWJlbENvdW50PXRoaXMuX2l0ZW1zLmxlbmd0aCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQmJih0aGlzLl9zY3JvbGxUb0xhYmVsKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkJiYodGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nLmNvbXBsZXRlKCl9X2hhbmRsZUtleWRvd24oZSl7aWYoIU1yKGUpKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAzMjp0aGlzLmZvY3VzSW5kZXghPT10aGlzLnNlbGVjdGVkSW5kZXgmJih0aGlzLnNlbGVjdEZvY3VzZWRJbmRleC5lbWl0KHRoaXMuZm9jdXNJbmRleCksdGhpcy5faXRlbVNlbGVjdGVkKGUpKTticmVhaztkZWZhdWx0OnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfX1fb25Db250ZW50Q2hhbmdlcygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtlIT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PWV8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleChlKXshdGhpcy5faXNWYWxpZEluZGV4KGUpfHx0aGlzLmZvY3VzSW5kZXg9PT1lfHwhdGhpcy5fa2V5TWFuYWdlcnx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpfV9pc1ZhbGlkSW5kZXgoZSl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybiEwO2xldCBpPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXTpudWxsO3JldHVybiEhaSYmIWkuZGlzYWJsZWR9X3NldFRhYkZvY3VzKGUpe2lmKHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX3Njcm9sbFRvTGFiZWwoZSksdGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aCl7dGhpcy5faXRlbXMudG9BcnJheSgpW2VdLmZvY3VzKCk7bGV0IGk9dGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O2kuc2Nyb2xsTGVmdD0ibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/MDppLnNjcm9sbFdpZHRoLWkub2Zmc2V0V2lkdGh9fV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgZT10aGlzLnNjcm9sbERpc3RhbmNlLGk9Imx0ciI9PT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8tZTplO3RoaXMuX3RhYkxpc3QubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGkpfXB4KWAsKHRoaXMuX3BsYXRmb3JtLlRSSURFTlR8fHRoaXMuX3BsYXRmb3JtLkVER0UpJiYodGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ9MCl9Z2V0IHNjcm9sbERpc3RhbmNlKCl7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlfXNldCBzY3JvbGxEaXN0YW5jZShlKXt0aGlzLl9zY3JvbGxUbyhlKX1fc2Nyb2xsSGVhZGVyKGUpe3JldHVybiB0aGlzLl9zY3JvbGxUbyh0aGlzLl9zY3JvbGxEaXN0YW5jZSsoImJlZm9yZSI9PWU/LTE6MSkqdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLzMpfV9oYW5kbGVQYWdpbmF0b3JDbGljayhlKXt0aGlzLl9zdG9wSW50ZXJ2YWwoKSx0aGlzLl9zY3JvbGxIZWFkZXIoZSl9X3Njcm9sbFRvTGFiZWwoZSl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm47bGV0IGk9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW2VdOm51bGw7aWYoIWkpcmV0dXJuO2xldCBhLGwscj10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgse29mZnNldExlZnQ6byxvZmZzZXRXaWR0aDpzfT1pLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/KGE9byxsPWErcyk6KGw9dGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgtbyxhPWwtcyk7bGV0IGM9dGhpcy5zY3JvbGxEaXN0YW5jZSx1PXRoaXMuc2Nyb2xsRGlzdGFuY2UrcjthPGM/dGhpcy5zY3JvbGxEaXN0YW5jZS09Yy1hKzYwOmw+dSYmKHRoaXMuc2Nyb2xsRGlzdGFuY2UrPWwtdSs2MCl9X2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITE7ZWxzZXtsZXQgZT10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7ZXx8KHRoaXMuc2Nyb2xsRGlzdGFuY2U9MCksZSE9PXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ZX19X2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKXt0aGlzLmRpc2FibGVQYWdpbmF0aW9uP3RoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPSEwOih0aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPTA9PXRoaXMuc2Nyb2xsRGlzdGFuY2UsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuc2Nyb2xsRGlzdGFuY2U9PXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aC10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9X2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpe2xldCBlPXRoaXMuX2l0ZW1zJiZ0aGlzLl9pdGVtcy5sZW5ndGg/dGhpcy5faXRlbXMudG9BcnJheSgpW3RoaXMuc2VsZWN0ZWRJbmRleF06bnVsbCxpPWU/ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtpP3RoaXMuX2lua0Jhci5hbGlnblRvRWxlbWVudChpKTp0aGlzLl9pbmtCYXIuaGlkZSgpfV9zdG9wSW50ZXJ2YWwoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nLm5leHQoKX1faGFuZGxlUGFnaW5hdG9yUHJlc3MoZSxpKXtpJiZudWxsIT1pLmJ1dHRvbiYmMCE9PWkuYnV0dG9ufHwodGhpcy5fc3RvcEludGVydmFsKCkseGEoNjUwLDEwMCkucGlwZShvdCh1bih0aGlzLl9zdG9wU2Nyb2xsaW5nLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoKCk9PntsZXR7bWF4U2Nyb2xsRGlzdGFuY2U6cixkaXN0YW5jZTpvfT10aGlzLl9zY3JvbGxIZWFkZXIoZSk7KDA9PT1vfHxvPj1yKSYmdGhpcy5fc3RvcEludGVydmFsKCl9KSl9X3Njcm9sbFRvKGUpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJue21heFNjcm9sbERpc3RhbmNlOjAsZGlzdGFuY2U6MH07bGV0IGk9dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U9TWF0aC5tYXgoMCxNYXRoLm1pbihpLGUpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITAsdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHttYXhTY3JvbGxEaXN0YW5jZTppLGRpc3RhbmNlOnRoaXMuX3Njcm9sbERpc3RhbmNlfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhkYSksdyhpciw4KSx3KHB0KSx3KHVpKSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiJ9fSksbn0pKCksTFJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOUmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoZSxpLHIsbyxzLGEsbCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKGUpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QoZSl9X2l0ZW1TZWxlY3RlZChlKXtlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcobm4pLHcoZGEpLHcoaXIsOCksdyhwdCksdyh1aSksdyhMaSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTFJle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGRhKSx3KGlyLDgpLHcocHQpLHcodWkpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItaGVhZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsRGVlLDQpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2l0ZW1zPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodmVlLDcpLGx0KGZSZSw3KSxsdChtUmUsNyksbHQoZ1JlLDcpLGx0KF9SZSw1KSxsdCh2UmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lua0Jhcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdENvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdElubmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9uZXh0UGFnaW5hdG9yPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9wcmV2aW91c1BhZ2luYXRvcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1oZWFkZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsaS5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PWkuX2dldExheW91dERpcmVjdGlvbigpKX0saW5wdXRzOntzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4In0sb3V0cHV0czp7c2VsZWN0Rm9jdXNlZEluZGV4OiJzZWxlY3RGb2N1c2VkSW5kZXgiLGluZGV4Rm9jdXNlZDoiaW5kZXhGb2N1c2VkIn0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6eGVlLGRlY2xzOjE0LHZhcnM6MTAsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1sYWJlbHMiXSxbInRhYkxpc3RJbm5lciIsIiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koKSxnKDAsImJ1dHRvbiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLG8pfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLE4oMiwiZGl2IiwyKSx2KCksZygzLCJkaXYiLDMsNCksUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSxnKDUsImRpdiIsNSw2KSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Db250ZW50Q2hhbmdlcygpfSksZyg3LCJkaXYiLDcsOCksTm4oOSksdigpLE4oMTAsIm1hdC1pbmstYmFyIiksdigpKCksZygxMSwiYnV0dG9uIiw5LDEwKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYWZ0ZXIiLG8pfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYWZ0ZXIiKX0pKCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc3RvcEludGVydmFsKCl9KSxOKDEzLCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmUpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bnVsbCkseCg1KSxhdCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSx4KDYpLGF0KCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXIpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG51bGwpKX0sZGVwZW5kZW5jaWVzOltlcyxTXyx2ZWVdLHN0eWxlczpbIi5tYXQtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTt0b3VjaC1hY3Rpb246bm9uZTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctbGVmdDo0cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2hlaWdodDoycHg7dHJhbnNpdGlvbjo1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1sYWJlbHN7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC10YWItbGlzdC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1sYWJlbCAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWx7b3BhY2l0eToxfS5tYXQtdGFiLWxhYmVsOjpiZWZvcmV7bWFyZ2luOjVweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjcycHh9fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFZSZT0wLEhSZT1wcyhMcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksInByaW1hcnkiKSxVUmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhSZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl90YWJzPW5ldyBjbCx0aGlzLl9pbmRleFRvU2VsZWN0PTAsdGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1udWxsLHRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0PTAsdGhpcy5fdGFic1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9keW5hbWljSGVpZ2h0PSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9bnVsbCx0aGlzLmhlYWRlclBvc2l0aW9uPSJhYm92ZSIsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fcHJlc2VydmVDb250ZW50PSExLHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZT1uZXcgRyx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBHLHRoaXMuYW5pbWF0aW9uRG9uZT1uZXcgRyx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLl9ncm91cElkPVZSZSsrLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249ciYmci5hbmltYXRpb25EdXJhdGlvbj9yLmFuaW1hdGlvbkR1cmF0aW9uOiI1MDBtcyIsdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hKCFyfHxudWxsPT1yLmRpc2FibGVQYWdpbmF0aW9uKSYmci5kaXNhYmxlUGFnaW5hdGlvbix0aGlzLmR5bmFtaWNIZWlnaHQ9ISghcnx8bnVsbD09ci5keW5hbWljSGVpZ2h0KSYmci5keW5hbWljSGVpZ2h0LHRoaXMuY29udGVudFRhYkluZGV4PXI/LmNvbnRlbnRUYWJJbmRleD8/bnVsbCx0aGlzLnByZXNlcnZlQ29udGVudD0hIXI/LnByZXNlcnZlQ29udGVudH1nZXQgZHluYW1pY0hlaWdodCgpe3JldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0fXNldCBkeW5hbWljSGVpZ2h0KGUpe3RoaXMuX2R5bmFtaWNIZWlnaHQ9V3QoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXt0aGlzLl9pbmRleFRvU2VsZWN0PVBpKGUsbnVsbCl9Z2V0IGFuaW1hdGlvbkR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9ufXNldCBhbmltYXRpb25EdXJhdGlvbihlKXt0aGlzLl9hbmltYXRpb25EdXJhdGlvbj0vXlxkKyQvLnRlc3QoZSsiIik/ZSsibXMiOmV9Z2V0IGNvbnRlbnRUYWJJbmRleCgpe3JldHVybiB0aGlzLl9jb250ZW50VGFiSW5kZXh9c2V0IGNvbnRlbnRUYWJJbmRleChlKXt0aGlzLl9jb250ZW50VGFiSW5kZXg9UGkoZSxudWxsKX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBwcmVzZXJ2ZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcHJlc2VydmVDb250ZW50fXNldCBwcmVzZXJ2ZUNvbnRlbnQoZSl7dGhpcy5fcHJlc2VydmVDb250ZW50PVd0KGUpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2kuY2xhc3NMaXN0LnJlbW92ZShgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmNsYXNzTGlzdC5hZGQoYG1hdC1iYWNrZ3JvdW5kLSR7ZX1gKSx0aGlzLl9iYWNrZ3JvdW5kQ29sb3I9ZX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtsZXQgZT10aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX2NsYW1wVGFiSW5kZXgodGhpcy5faW5kZXhUb1NlbGVjdCk7aWYodGhpcy5fc2VsZWN0ZWRJbmRleCE9ZSl7bGV0IGk9bnVsbD09dGhpcy5fc2VsZWN0ZWRJbmRleDtpZighaSl7dGhpcy5zZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKTtsZXQgcj10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubWluSGVpZ2h0PXIuY2xpZW50SGVpZ2h0KyJweCJ9UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX3RhYnMuZm9yRWFjaCgocixvKT0+ci5pc0FjdGl2ZT1vPT09ZSksaXx8KHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KGUpLHRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSIiKX0pfXRoaXMuX3RhYnMuZm9yRWFjaCgoaSxyKT0+e2kucG9zaXRpb249ci1lLG51bGwhPXRoaXMuX3NlbGVjdGVkSW5kZXgmJjA9PWkucG9zaXRpb24mJiFpLm9yaWdpbiYmKGkub3JpZ2luPWUtdGhpcy5fc2VsZWN0ZWRJbmRleCl9KSx0aGlzLl9zZWxlY3RlZEluZGV4IT09ZSYmKHRoaXMuX3NlbGVjdGVkSW5kZXg9ZSx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpLHRoaXMuX3N1YnNjcmliZVRvVGFiTGFiZWxzKCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbj10aGlzLl90YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZihlPT09dGhpcy5fc2VsZWN0ZWRJbmRleCl7bGV0IHIsaT10aGlzLl90YWJzLnRvQXJyYXkoKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpZihpW29dLmlzQWN0aXZlKXt0aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX3NlbGVjdGVkSW5kZXg9byx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwscj1pW29dO2JyZWFrfSFyJiZpW2VdJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aVtlXS5pc0FjdGl2ZT0hMCx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpfSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCl7dGhpcy5fYWxsVGFicy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fYWxsVGFicykpLnN1YnNjcmliZShlPT57dGhpcy5fdGFicy5yZXNldChlLmZpbHRlcihpPT5pLl9jbG9zZXN0VGFiR3JvdXA9PT10aGlzfHwhaS5fY2xvc2VzdFRhYkdyb3VwKSksdGhpcy5fdGFicy5ub3RpZnlPbkNoYW5nZXMoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdGFicy5kZXN0cm95KCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cmVhbGlnbklua0Jhcigpe3RoaXMuX3RhYkhlYWRlciYmdGhpcy5fdGFiSGVhZGVyLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIudXBkYXRlUGFnaW5hdGlvbigpfWZvY3VzVGFiKGUpe2xldCBpPXRoaXMuX3RhYkhlYWRlcjtpJiYoaS5mb2N1c0luZGV4PWUpfV9mb2N1c0NoYW5nZWQoZSl7dGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1lLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLmluZGV4PWUsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihpLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVtlXSksaX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj11biguLi50aGlzLl90YWJzLm1hcChlPT5lLl9zdGF0ZUNoYW5nZXMpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fY2xhbXBUYWJJbmRleChlKXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heChlfHwwLDApKX1fZ2V0VGFiTGFiZWxJZChlKXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9nZXRUYWJDb250ZW50SWQoZSl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChlKXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtsZXQgaT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2kuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihpLnN0eWxlLmhlaWdodD1lKyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2xldCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9ZS5jbGllbnRIZWlnaHQsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKX1faGFuZGxlQ2xpY2soZSxpLHIpe2UuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVkSW5kZXg9aS5mb2N1c0luZGV4PXIpfV9nZXRUYWJJbmRleChlLGkpe3JldHVybiBlLmRpc2FibGVkP251bGw6aT09PSh0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4Pz90aGlzLnNlbGVjdGVkSW5kZXgpPzA6LTF9X3RhYkZvY3VzQ2hhbmdlZChlLGkpe2UmJiJtb3VzZSIhPT1lJiYidG91Y2giIT09ZSYmKHRoaXMuX3RhYkhlYWRlci5mb2N1c0luZGV4PWkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2R5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLHNlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgiLGhlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixjb250ZW50VGFiSW5kZXg6ImNvbnRlbnRUYWJJbmRleCIsZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIixwcmVzZXJ2ZUNvbnRlbnQ6InByZXNlcnZlQ29udGVudCIsYmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IifSxvdXRwdXRzOntzZWxlY3RlZEluZGV4Q2hhbmdlOiJzZWxlY3RlZEluZGV4Q2hhbmdlIixmb2N1c0NoYW5nZToiZm9jdXNDaGFuZ2UiLGFuaW1hdGlvbkRvbmU6ImFuaW1hdGlvbkRvbmUiLHNlbGVjdGVkVGFiQ2hhbmdlOiJzZWxlY3RlZFRhYkNoYW5nZSJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSxoST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVVJle2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsYXcsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYWxsVGFicz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHlSZSw1KSxsdChiUmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3RhYkJvZHlXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJIZWFkZXI9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItZ3JvdXAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLGkuZHluYW1pY0hlaWdodCkoIm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIiwiYmVsb3ciPT09aS5oZWFkZXJQb3NpdGlvbil9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6U2VlLHVzZUV4aXN0aW5nOm59XSksdHRdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWF0LXRhYi1sYWJlbC1hY3RpdmUiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtYXQtdGFiLWJvZHktd3JhcHBlciJdLFsidGFiQm9keVdyYXBwZXIiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJtYXQtdGFiLWJvZHktYWN0aXZlIiwibmdDbGFzcyIsImNvbnRlbnQiLCJwb3NpdGlvbiIsIm9yaWdpbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwicHJlc2VydmVDb250ZW50IiwiX29uQ2VudGVyZWQiLCJfb25DZW50ZXJpbmciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsInRhYiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiIsIm1hdC1yaXBwbGUiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwxLCJtYXQtdGFiLWxhYmVsIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywiaWQiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiXSxbMSwibWF0LXRhYi1sYWJlbC1jb250ZW50Il0sWzMsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidGFiVGV4dExhYmVsIiwiIl0sWzMsImNka1BvcnRhbE91dGxldCJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsInByZXNlcnZlQ29udGVudCIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtYXQtdGFiLWhlYWRlciIsMCwxKSxQKCJpbmRleEZvY3VzZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9mb2N1c0NoYW5nZWQobyl9KSgic2VsZWN0Rm9jdXNlZEluZGV4IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3RlZEluZGV4PW99KSxFKDIsTVJlLDUsMTUsImRpdiIsMiksdigpLGcoMywiZGl2IiwzLDQpLEUoNSxTUmUsMSwxMSwibWF0LXRhYi1ib2R5Iiw1KSx2KCkpLDImZSYmKGIoInNlbGVjdGVkSW5kZXgiLGkuc2VsZWN0ZWRJbmRleHx8MCkoImRpc2FibGVSaXBwbGUiLGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVQYWdpbmF0aW9uIixpLmRpc2FibGVQYWdpbmF0aW9uKSx4KDIpLGIoIm5nRm9yT2YiLGkuX3RhYnMpLHgoMSksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkseCgyKSxiKCJuZ0Zvck9mIixpLl90YWJzKSl9LGRlcGVuZGVuY2llczpbUG4seW4sWGUsQnMsZXMsJFosRGVlLEVlZSxCUmVdLHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCV9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWJvZHktd3JhcHBlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxmST0ocXAoTHMoZ28oY2xhc3N7fSkpKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZG4sd2MseGMsenAsUF8sZG5dfSksbn0pKCkpO2Z1bmN0aW9uIHpSZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25BY3RpdmVQbHVnaW5TZWxlY3Rpb24ocixvLmlkKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7emUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSx4KDEpLHFlKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIGpSZShuLHQpezEmbiYmKGcoMCwibWF0LXRhYiIsMyksRSgxLHpSZSwyLDIsIm5nLXRlbXBsYXRlIiw0KSx2KCkpLDImbiYmYigiZGlzYWJsZWQiLCF0LiRpbXBsaWNpdC5lbmFibGVkKX1mdW5jdGlvbiBHUmUobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDkpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx6ZSgiZGF0YS1wbHVnaW4taWQiLGUuaWQpLHgoMSkscWUoIiAiLGUudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gV1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDYpKDEsIm1hdC1sYWJlbCIpLEQoMiwiSW5hY3RpdmUiKSx2KCksZygzLCJtYXQtc2VsZWN0Iiw3KSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQocikpfSksRSg0LEdSZSwyLDMsIm1hdC1vcHRpb24iLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksYigidmFsdWUiLGUuc2VsZWN0ZWRQbHVnaW4pLHgoMSksYigibmdGb3JPZiIsZS5kaXNhYmxlZFBsdWdpbnMpfX12YXIgSWVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgR31nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiw0LCJuZ0lmIl0sWzMsImRpc2FibGVkIl0sWyJtYXQtdGFiLWxhYmVsIiwiIl0sWzEsInBsdWdpbi1uYW1lIiwzLCJjbGljayJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC10YWItZ3JvdXAiLDApLEUoMSxqUmUsMiwxLCJtYXQtdGFiIiwxKSx2KCksRSgyLFdSZSw1LDIsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoYigic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSx4KDEpLGIoIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucykseCgxKSxiKCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2hJLE1lZSxhdyxEdSx6XyxKcCx1YSx5bixYZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMDttYXJnaW4tdG9wOjVweDt3aWR0aDoxMzBweH1tYXQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYWN0aXZlLXBsdWdpbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59LnBsdWdpbi1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCAxMnB4O3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saXN0IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmt7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWwubWF0LXRhYi1sYWJlbC1hY3RpdmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGluay5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtvcGFjaXR5OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWRpc2FibGVke2Rpc3BsYXk6bm9uZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItbGlzdCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0iXX0pLG59KSgpLFBlZT1ZKHNfLG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLFlSZT1ZKFBlZSxuPT5uLmZpbHRlcih0PT4hdC5lbmFibGVkKSksUmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKSx0aGlzLnBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZShmbihQZWUpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKGZuKFlSZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX3Uoe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksUCgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5zIixXKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVygyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixXKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltJZWUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFFSZT1ZKHNfLGRzLChuLHQpPT4hKCF0fHwhblt0XSkmJm5bdF0uZGlzYWJsZV9yZWxvYWQpLE9lZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlbG9hZERpc2FibGVkJD10aGlzLnN0b3JlLnNlbGVjdChRUmUpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KGJLKS5waXBlKHNyKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxCKChbaSxyXSk9PiFyJiZpPT09RWUuTE9BRElORykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyl9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2woKSl9Z2V0UmVsb2FkVGl0bGUoZSl7cmV0dXJuIGU/YExhc3QgVXBkYXRlZDogJHtlfWA6IkxvYWRpbmcuLi4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1yZWxvYWQiXV0sZGVjbHM6Nix2YXJzOjEzLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDEsInJlbG9hZC1idXR0b24iLDMsInRpdGxlIiwiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInJlZnJlc2hfMjRweCIsMSwicmVmcmVzaC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRyaWdnZXJSZWxvYWQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImRhdGUiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLE4oNSwibWF0LWljb24iLDEpLHYoKSksMiZlJiYoYXQoImxvYWRpbmciLFcoMSw0LGkuaXNSZWxvYWRpbmckKSksYigidGl0bGUiLGkuZ2V0UmVsb2FkVGl0bGUobmYoMiw2LFcoMyw5LGkubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixXKDQsMTEsaS5yZWxvYWREaXNhYmxlZCQpKSl9LGRlcGVuZGVuY2llczpbJG4sWm4sZnQsVTBdLHN0eWxlczpbIi5yZWxvYWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlZnJlc2gtaWNvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnJlbG9hZC1idXR0b24ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9Il19KSxufSkoKSxrZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczo5LHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWF0LXRvb2xiYXIiKSgxLCJzcGFuIiwwKSxEKDIsIlRlbnNvckJvYXJkIiksdigpLE4oMywicGx1Z2luLXNlbGVjdG9yIiwxKSg0LCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiKSg1LCJhcHAtaGVhZGVyLXJlbG9hZCIpKDYsInNldHRpbmdzLWJ1dHRvbiIpLGcoNywiYSIsMiksTig4LCJtYXQtaWNvbiIsMyksdigpKCkpfSxkZXBlbmRlbmNpZXM6W0ZBLFpuLGVlZSxkZWUsX2VlLFJlZSxPZWVdLHN0eWxlczpbIm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlYWRtZVtfbmdjb250ZW50LSVDT01QJV0sIGFwcC1oZWFkZXItcmVsb2FkW19uZ2NvbnRlbnQtJUNPTVAlXSwgc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMCBhdXRvfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV17bGV0dGVyLXNwYWNpbmc6LTAuMDI1ZW07bWFyZ2luLWxlZnQ6MTBweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Il19KSxufSkoKSwkUmVfc2V0RG9jdW1lbnRUaXRsZT1mdW5jdGlvbihuKXtkb2N1bWVudC50aXRsZT1ufSxGZWU9KCgpPT57Y2xhc3MgbntuZ09uQ2hhbmdlcyhlKXtlLnRpdGxlJiYkUmVfc2V0RG9jdW1lbnRUaXRsZShlLnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUtY29tcG9uZW50Il1dLGlucHV0czp7dGl0bGU6InRpdGxlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTmVlPSJUZW5zb3JCb2FyZCIsTGVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jdXN0b21CcmFuZE5hbWU9aSx0aGlzLmdldEV4cGVyaW1lbnRJZCQ9dGhpcy5zdG9yZS5zZWxlY3QoJG8pLnBpcGUoQihyPT5yPy5bMF0pKSx0aGlzLmV4cGVyaW1lbnROYW1lJD10aGlzLmdldEV4cGVyaW1lbnRJZCQucGlwZShIZShCb29sZWFuKSxfbihyPT50aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOnJ9KSksQihyPT5yP3IubmFtZTpudWxsKSksdGhpcy50aXRsZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYkQpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuZXhwZXJpbWVudE5hbWUkKSxCKChbcixvLHNdKT0+e2xldCBhPXRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWU7cmV0dXJuIHIud2luZG93X3RpdGxlP3Iud2luZG93X3RpdGxlOm89PT1maS5FWFBFUklNRU5UJiZzP2Ake3N9IC0gJHthfWA6YX0pLFZuKHRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWUpLGRpKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KHBLLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwYWdlLXRpdGxlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJwYWdlLXRpdGxlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoInRpdGxlIixXKDEsMSxpLnRpdGxlJCkpfSxkZXBlbmRlbmNpZXM6W0ZlZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmdldFBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUoZm4oJGYpKSx0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpLnRmX3BhZ2luYXRlZF92aWV3fW5nT25Jbml0KCl7dGhpcy5nZXRQYWdlU2l6ZSQucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGRpKCkpLnN1YnNjcmliZShlPT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFZlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudmNSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXdlYmFwcCJdXSxkZWNsczo5LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiYXBwLWhlYWRlciIpLGcoMSwibWFpbiIpLE4oMiwicm91dGVyLW91dGxldCIpLHYoKSxOKDMsImFsZXJ0LXNuYWNrYmFyIikoNCwiaGFzaC1zdG9yYWdlIikoNSwicGFnZS10aXRsZSIpKDYsInNldHRpbmdzLXBvbHltZXItaW50ZXJvcCIpKDcsImRhcmstbW9kZS1zdXBwb3J0ZXIiKSg4LCJmZWF0dXJlLWZsYWctbW9kYWwtdHJpZ2dlciIpKX0sZGVwZW5kZW5jaWVzOltqJCxXJCxJSixxJCxYJCxrZWUsTGVlLEJlZV0sc3R5bGVzOlsiaHRtbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1ZjVmNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfWFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDAsMCwwLC4yNSk7ZmxleDowIDA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuMSl9bWFpbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30iXX0pLG59KSgpLEhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUTAsWDAsaGNdfSksbn0pKCksVWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx6ZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6QXAsdXNlQ2xhc3M6VlF9XX0pLG59KSgpLGplZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsemVlXX0pLG59KSgpLEdlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksV2VlPXtpZDpXVCxuYW1lOiIiLHN0YXJ0X3RpbWU6MH0scjJlPXdyKHtleHBlcmltZW50TWFwOntbV2VlLmlkXTpXZWV9fSk7ZnVuY3Rpb24gcWVlKG4sdCl7cmV0dXJuIEhmKHtkYXRhOnIyZX0pKG4sdCl9dmFyIFllZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShGRCxxZWUpXX0pLG59KSgpLFhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUmksSWxdfSksbn0pKCksUWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxYZWVdfSksbn0pKCksS2VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxySSxOJCxSaSwkcCxIXyxTaSxBdV19KSxufSkoKTtmdW5jdGlvbiBvMmUoKXtyZXR1cm4gWShSQyxuPT4oe2F1dG9SZWxvYWQ6bn0pKX1mdW5jdGlvbiBzMmUoKXtyZXR1cm4gWShPQyxuPT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOm59KSl9ZnVuY3Rpb24gYTJlKCl7cmV0dXJuIFkoJGYsbj0+KHtwYWdlU2l6ZTpufSkpfXZhciBtST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShmQSxuZWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcobzJlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKHMyZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhhMmUpLEtlZV19KSxufSkoKSxaZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JpLFNpLGZJLHRlZSxJbCxlaCxrZSxNbCxtSV19KSxufSkoKSxKZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe2xldCByPWUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCIuL2ljb25fYnVuZGxlLnN2ZyIpO2kuYWRkU3ZnSWNvblNldChyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSZiksUihYXykpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltTaV19KSxufSkoKSxUNT1uZXcgc2UoIltwbHVnaW5zXSBQbHVnaW4gcmVnaXN0cnkgY29uZmlnIiksJGVlPW5ldyBNYXAsUnU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZighZSlyZXR1cm47bGV0IGk9bmV3IFNldChlLm1hcChyPT5yLnBsdWdpbk5hbWUpKTtjb25zb2xlLmFzc2VydChpLnNpemU9PT1lLmxlbmd0aCwiQ2Fubm90IHJlZ2lzdGVyIHRoZSBzYW1lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcy4iKTtmb3IobGV0IHIgb2YgZSl7bGV0e3BsdWdpbk5hbWU6byxjb21wb25lbnRDbGFzczpzfT1yOyRlZS5zZXQobyxzKX19c3RhdGljIGZvclBsdWdpbihlLGkpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VDUsbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6ZSxjb21wb25lbnRDbGFzczppfX1dfX1nZXRDb21wb25lbnQoZSl7cmV0dXJuICRlZS5nZXQoZSl8fG51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVDUsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxnST0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL2RlYnVnZ2VyLXYyIn1mZXRjaFJ1bnMoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvcnVucyIpfWZldGNoRXhlY3V0aW9uRGlnZXN0cyhlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEV4ZWN1dGlvbkRhdGEoZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoZSxpLHIsbyl7aWYodm9pZCAwIT09byl0aHJvdyBuZXcgRXJyb3IoInRyYWNlX2lkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoKSB5ZXQiKTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhfZXhlY3V0aW9uL2RpZ2VzdHMiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EYXRhKGUsaSxyLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EYXRhKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kYXRhIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoT3BJbmZvKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhzL29wX2luZm8iLHtwYXJhbXM6e3J1bjplLGdyYXBoX2lkOmksb3BfbmFtZTpyfX0pfWZldGNoU291cmNlRmlsZUxpc3QoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9saXN0Iix7cGFyYW1zOntydW46ZX19KX1mZXRjaFNvdXJjZUZpbGUoZSxpKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc291cmNlX2ZpbGVzL2ZpbGUiLHtwYXJhbXM6e3J1bjplLGluZGV4OlN0cmluZyhpKX19KX1mZXRjaFN0YWNrRnJhbWVzKGUsaSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3N0YWNrX2ZyYW1lcy9zdGFja19mcmFtZXMiLHtwYXJhbXM6e3J1bjplLHN0YWNrX2ZyYW1lX2lkczppLmpvaW4oIiwiKX19KS5waXBlKEIocj0+KHtzdGFja19mcmFtZXM6ci5zdGFja19mcmFtZXMubWFwKG89PmZ1bmN0aW9uKG4pe3JldHVybntob3N0X25hbWU6blswXSxmaWxlX3BhdGg6blsxXSxsaW5lbm86blsyXSxmdW5jdGlvbl9uYW1lOm5bM119fShvKSl9KSkpfWZldGNoQWxlcnRzKGUsaSxyLG8pe2xldCBzPXtydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX07cmV0dXJuIHZvaWQgMCE9PW8mJihzLmFsZXJ0X3R5cGU9byksdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvYWxlcnRzIix7cGFyYW1zOnN9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGV0ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltnSV0saW1wb3J0czpbaV9dfSksbn0pKCksX0k9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIiksdkk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxsdz13ZSgiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIikseUk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSxiST13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHR0ZT13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIFJlcXVlc3QgRmFpbGVkIiksY3c9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIFJlcXVlc3RlZCIpLHhJPXdlKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDST13ZSgiW0RlYnVnZ2VyXSBBbGVydHMgRGF0YSBvZiBhbiBBbGVydFR5cGUgSXMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS189d2UoIltEZWJ1Z2dlcl0gQWxlcnQgVHlwZSBGb2N1cyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksd0k9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLE1JPXdlKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxTST13ZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWl89d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIExlZnR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxKXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgUmlnaHR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSwkXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGV2PXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgQmVpbmcgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksREk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksQUk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUEk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdHY9d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBMaXN0IHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbnY9d2UoIltEZWJ1Z2dlcl0gR3JhcGggRXhlY3V0aW9uIGlzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxpdj13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUkk9d2UoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPST13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgUmVxdWVzdGVkLiIpLEZJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscnY9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGluZSBJcyBGb2N1c2VkIG9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdXc9d2UoIltEZWJ1Z2dlcl0gQSBTZXQgb2YgU3RhY2sgRnJhbWVzIEhhdmUgQmVlbiBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdz0iZGVidWdnZXIiLHpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLG5bbi5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsbltuLkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsbltuLkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsbltuLkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsbltuLlNIQVBFPTVdPSJTSEFQRSIsbltuLkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLG5bbi5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLG5bbi5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifSh6b3x8KHpvPXt9KSksem8pKSgpLE91PSgoKT0+KGZ1bmN0aW9uKG4pe24uRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUPSJGdW5jdGlvblJlY29tcGlsZXNBbGVydCIsbi5JTkZfTkFOX0FMRVJUPSJJbmZOYW5BbGVydCIsbi5URU5TT1JfU0hBUEVfQUxFUlQ9IlRlbnNvclNoYXBlQWxlcnQifShPdXx8KE91PXt9KSksT3UpKSgpLHRzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWEVDVVRJT049MF09IkVYRUNVVElPTiIsbltuLkdSQVBIX09QX0NSRUFUSU9OPTFdPSJHUkFQSF9PUF9DUkVBVElPTiJ9KHRzfHwodHM9e30pKSx0cykpKCk7ZnVuY3Rpb24gb3Yobil7aWYobnVsbD09PW4uY29kZUxvY2F0aW9uRm9jdXNUeXBlKXJldHVybiBudWxsO2xldCB0PVtdO2lmKG4uY29kZUxvY2F0aW9uRm9jdXNUeXBlPT09dHMuRVhFQ1VUSU9OKXtsZXR7Zm9jdXNJbmRleDppLGV4ZWN1dGlvbkRhdGE6cn09bi5leGVjdXRpb25zO2lmKG51bGw9PT1pfHx2b2lkIDA9PT1yW2ldKXJldHVybiBudWxsO3Q9cltpXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09bi5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2xldHtncmFwaElkOmksb3BOYW1lOnJ9PW4uZ3JhcGhzLmZvY3VzZWRPcDtpZih2b2lkIDA9PT1uLmdyYXBocy5vcHNbaV18fCFuLmdyYXBocy5vcHNbaV0uaGFzKHIpKXJldHVybiBudWxsO3Q9bi5ncmFwaHMub3BzW2ldLmdldChyKS5zdGFja19mcmFtZV9pZHN9bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2lmKG51bGw9PW4uc3RhY2tGcmFtZXNbaV0pcmV0dXJuIG51bGw7ZS5wdXNoKG4uc3RhY2tGcmFtZXNbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHB3KG4sdCl7cmV0dXJuIG4uZmluZEluZGV4KGU9PmUuaG9zdF9uYW1lPT09dC5ob3N0X25hbWUmJmUuZmlsZV9wYXRoPT09dC5maWxlX3BhdGgpfWZ1bmN0aW9uIEE1KG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybiBuLmZpbmRJbmRleChpPT5pLmJlZ2luPT09dCYmaS5lbmQ9PT1lKX1mdW5jdGlvbiBCSShuKXtsZXQgdD1uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gdDtsZXQgZT1vdihuKTtpZihudWxsPT09ZSlyZXR1cm4gdDtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2ZvcihsZXQgZT1uLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgaT1uW2VdLHtob3N0X25hbWU6cixmaWxlX3BhdGg6b309aTtpZihyPT09dC5ob3N0X25hbWUmJm89PT10LmZpbGVfcGF0aClyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSx0KTtyZXR1cm4gbnVsbD09PWk/dDppfXZhciB5MmU9d3Ioe3J1bnM6e30scnVuc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYWN0aXZlUnVuSWQ6bnVsbCxsYXN0RGF0YVBvbGxPbnNldFRpbWVNczotMSxsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczoxLGFsZXJ0czp7YWxlcnRzTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxudW1BbGVydHM6MCxhbGVydHNCcmVha2Rvd246e30sYWxlcnRzOnt9LGV4ZWN1dGlvbkluZGljZXM6e30sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnt9LGZvY3VzVHlwZTpudWxsfSxleGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDo1MCxwYWdlU2l6ZToxMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxleGVjdXRpb25EaWdlc3RzOnt9LGV4ZWN1dGlvbkRhdGE6e319LGdyYXBoRXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhzOntvcHM6e30sbG9hZGluZ09wczp7fSxmb2N1c2VkT3A6bnVsbH0sc3RhY2tGcmFtZXM6e30sY29kZUxvY2F0aW9uRm9jdXNUeXBlOm51bGwsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6ITEsc291cmNlQ29kZTp7c291cmNlRmlsZUxpc3RMb2FkZWQ6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHNvdXJjZUZpbGVMaXN0OltdLGZpbGVDb250ZW50czpbXSxmb2N1c0xpbmVTcGVjOm51bGx9fSxTZSh5SSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHR0ZSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoYkksKG4se3J1bnM6dH0pPT57bGV0IGU9T2JqZWN0LmtleXModCksaT1lLmxlbmd0aD4wJiZudWxsPT09bi5hY3RpdmVSdW5JZDtyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczppP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxydW5zOnQscnVuc0xvYWRlZDp7c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxhY3RpdmVSdW5JZDplLmxlbmd0aD4wP2VbMF06bnVsbH19KSxTZShsdyxuPT4oey4uLm4sbGFzdERhdGFQb2xsT25zZXRUaW1lTXM6RGF0ZS5ub3coKX0pKSxTZShjdyxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoeEksKG4se251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgcj10Pm4uYWxlcnRzLm51bUFsZXJ0cztyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczpyP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sbnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmV9fX0pLFNlKENJLChuLHtudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZSxhbGVydFR5cGU6aSxiZWdpbjpyLGFsZXJ0czpvfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgYT17fSxsPW4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV0/bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdLGM9bi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW2ldP24uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdO2ZvcihsZXQgcD0wO3A8by5sZW5ndGg7KytwKXtsZXQgaD1yK3AsZj1vW3BdO2lmKGFbaF09ZixmLmFsZXJ0X3R5cGU9PT1PdS5JTkZfTkFOX0FMRVJUKXtsZXQgbT1mO2xbaF09bS5leGVjdXRpb25faW5kZXgsbnVsbCE9PW0uZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4JiYoY1toXT1tLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCl9fXZvaWQgMCE9PW4uYWxlcnRzLmFsZXJ0c1tpXSYmT2JqZWN0LmFzc2lnbihhLG4uYWxlcnRzLmFsZXJ0c1tpXSk7bGV0IHU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZD1uLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4O2lmKGk9PT1PdS5JTkZfTkFOX0FMRVJUJiYwPT09cil7bGV0IHA9b1swXTt1PU1hdGgubWF4KDAscC5leGVjdXRpb25faW5kZXgtTWF0aC5mbG9vcihuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKSxudWxsIT09cC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihkPXAuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX1yZXR1cm57Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp1fSxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGZvY3VzSW5kZXg6ZH0sYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LG51bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0czp7Li4ubi5hbGVydHMuYWxlcnRzLFtpXTphfSxleGVjdXRpb25JbmRpY2VzOnsuLi5uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzLFtpXTpsfSxncmFwaEV4ZWN1dGlvbkluZGljZXM6ey4uLm4uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyxbaV06Y319fX0pLFNlKEtfLChuLHthbGVydFR5cGU6dH0pPT57bGV0IGU9ey4uLm4sYWxlcnRzOnsuLi5uLmFsZXJ0cyxmb2N1c1R5cGU6bi5hbGVydHMuZm9jdXNUeXBlPT09dD9udWxsOnR9fSxpPWUuYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsIT09aSl7bGV0IHI9ZS5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXXx8W107dm9pZCAwIT09clswXSYmKGUuZXhlY3V0aW9ucz17Li4uZS5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6TWF0aC5tYXgoMCxOdW1iZXIoclswXSktTWF0aC5mbG9vcihlLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKX0pfXJldHVybiBlfSksU2Uod0ksbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoTUksKG4se251bUV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9dD5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zLHI9ey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6aT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0fX19O3JldHVybiB0PjAmJm51bGw9PT1uLmV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKHIuZXhlY3V0aW9ucy5mb2N1c0luZGV4PTApLHJ9KSxTZShTSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPVsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5sb2FkaW5nUmFuZ2VzXTtyZXR1cm4tMT09PUE1KGksdC5iZWdpbix0LmVuZCkmJmkucHVzaCh7YmVnaW46dC5iZWdpbixlbmQ6dC5lbmR9KSx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbG9hZGluZ1JhbmdlczppfX19fSksU2UoRUksKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT1bLi4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc10scj1BNShpLHQuYmVnaW4sdC5lbmQpOy0xIT09ciYmaS5zcGxpY2UociwxKTtsZXQgbz17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0Lm51bV9kaWdlc3RzLGxvYWRpbmdSYW5nZXM6aX0sZXhlY3V0aW9uRGlnZXN0czp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHN9fX07Zm9yKGxldCBzPXQuYmVnaW47czx0LmVuZDsrK3Mpby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNbc109dC5leGVjdXRpb25fZGlnZXN0c1tzLXQuYmVnaW5dO3JldHVybiB0LmVuZD50LmJlZ2luJiYoby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzPXsuLi5vLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXMsW3QuYmVnaW4vbi5leGVjdXRpb25zLnBhZ2VTaXplXTp0LmVuZC10LmJlZ2lufSksb30pLFNlKFpfLG49PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleDtyZXR1cm4gZT4wJiZlLS0sey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZX19fSksU2UoSl8sbj0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlK24uZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQrMTw9bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyYmZSsrLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmV9fX0pLFNlKCRfLChuLHQpPT57aWYodC5pbmRleDwwfHwhTnVtYmVyLmlzSW50ZWdlcih0LmluZGV4KSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIG5lZ2F0aXZlIG9yIG5vbi1pbnRlZ2VyIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSlgKTtsZXR7ZGlzcGxheUNvdW50OmV9PW4uZXhlY3V0aW9ucyx7bnVtRXhlY3V0aW9uczppfT1uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDtpZih0LmluZGV4Pk1hdGgubWF4KDAsaS1lKSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSksIHdoaWNoIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGluZGV4IChudW1FeGVjdXRpb25zPSR7aX07IGRpc3BsYXlDb3VudD0ke2V9KWApO3JldHVybnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OnQuaW5kZXh9fX0pLFNlKGV2LChuLHQpPT57bGV0IGU9ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGZvY3VzSW5kZXg6bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrdC5kaXNwbGF5SW5kZXh9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5FWEVDVVRJT04sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIGUuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUJJKGUpLGV9KSxTZShUSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EYXRhOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YX19fTtmb3IobGV0IHI9dC5iZWdpbjtyPHQuZW5kOysrcilpLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YVtyXT10LmV4ZWN1dGlvbnNbci10LmJlZ2luXTtyZXR1cm4gaX0pLFNlKERJLG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fX0pLFNlKEFJLChuLHtudW1HcmFwaEV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9dD5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMsaT17Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczplP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dH19fTtyZXR1cm4gdD4wJiZudWxsPT09bi5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKGkuZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg9MCksaX0pLFNlKElJLChuLHtwYWdlSW5kZXg6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCk7cmV0dXJuLTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KSx7Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczplfX19KSxTZShQSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldHtwYWdlU2l6ZTplfT1uLmdyYXBoRXhlY3V0aW9ucyxpPW4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpLHI9ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplc30sbz17Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhfTtmb3IobGV0IHM9dC5iZWdpbjtzPHQuZW5kOysrcyl7bGV0IGE9TWF0aC5mbG9vcihzL2UpOy0xIT09aS5pbmRleE9mKGEpJiZpLnNwbGljZShpLmluZGV4T2YoYSksMSksdm9pZCAwPT09clthXSYmKHJbYV09MCksdm9pZCAwPT09b1tzXSYmclthXSsrLG9bc109dC5ncmFwaF9leGVjdXRpb25zW3MtdC5iZWdpbl19cmV0dXJuey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6aSxncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXM6cixncmFwaEV4ZWN1dGlvbkRhdGE6b319fSksU2UodHYsKG4sdCk9PntpZih0LmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZ3JhcGgtZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KWApO3JldHVybnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp0LmluZGV4fX19KSxTZShudiwobix0KT0+cnRlKG4sdC5ncmFwaF9pZCx0Lm9wX25hbWUsdC5pbmRleCkpLFNlKGl2LChuLHQpPT5ydGUobix0LmdyYXBoX2lkLHQub3BfbmFtZSkpLFNlKFJJLChuLHQpPT57bGV0e2dyYXBoX2lkOmUsb3BfbmFtZTppfT10LHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzfX19O3JldHVybiB2b2lkIDA9PT1yLmdyYXBocy5sb2FkaW5nT3BzW2VdJiYoci5ncmFwaHMubG9hZGluZ09wc1tlXT1uZXcgTWFwKSxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLmhhcyhpKXx8ci5ncmFwaHMubG9hZGluZ09wc1tlXS5zZXQoaSxFZS5MT0FESU5HKSxyfSksU2UoT0ksKG4sdCk9PntsZXR7Z3JhcGhPcEluZm9SZXNwb25zZTplfT10LHtncmFwaF9pZHM6aX09ZSxyPWlbaS5sZW5ndGgtMV0sbz17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLG9wczp7Li4ubi5ncmFwaHMub3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLm9wc1tyXSl9LGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMubG9hZGluZ09wc1tyXSl9fX07Zm9yKGxldCBzIG9mIGUuaW5wdXRzKSFzLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQocy5vcF9uYW1lLHMuZGF0YSk7Zm9yKGxldCBzPTA7czxlLmNvbnN1bWVycy5sZW5ndGg7KytzKWZvcihsZXQgYSBvZiBlLmNvbnN1bWVyc1tzXSkhYS5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KGEub3BfbmFtZSxhLmRhdGEpO3JldHVybiBvLmdyYXBocy5vcHNbcl0uc2V0KGUub3BfbmFtZSx7Li4uZSxpbnB1dHM6ZS5pbnB1dHMubWFwKHM9Pih7b3BfbmFtZTpzLm9wX25hbWUsb3V0cHV0X3Nsb3Q6cy5vdXRwdXRfc2xvdH0pKSxjb25zdW1lcnM6ZS5jb25zdW1lcnMubWFwKHM9PnMubWFwKGE9Pih7b3BfbmFtZTphLm9wX25hbWUsaW5wdXRfc2xvdDphLmlucHV0X3Nsb3R9KSkpfSksby5ncmFwaHMubG9hZGluZ09wc1tyXS5zZXQoZS5vcF9uYW1lLEVlLkxPQURFRCksb30pLFNlKGtJLG49Pih7Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FESU5HfX19KSksU2UoRkksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHNvdXJjZUZpbGVMaXN0OnQuc291cmNlRmlsZXMsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dC5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czpyfT1lLnNvdXJjZUNvZGU7Zm9yKGxldCBvPTA7bzxpOysrbylyW29dPW4uc291cmNlQ29kZS5maWxlQ29udGVudHNbb10/P3tsb2FkU3RhdGU6RWUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gZX0pLFNlKHJ2LChuLHQpPT57bGV0IGU9b3YobiksaT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZm9jdXNMaW5lU3BlYzp0LnN0YWNrRnJhbWV9fTtyZXR1cm4gbnVsbCE9PWUmJihpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9LTEsaT0tMTtpZihuLmZvckVhY2goKHtmaWxlX3BhdGg6cixsaW5lbm86b30scyk9PntyPT09dC5maWxlX3BhdGgmJihpPXMsbz09PXQubGluZW5vJiYoZT1zKSl9KSwtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KHQpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIGU9PT1pfShlLHQuc3RhY2tGcmFtZSkpLGl9KSxTZShOSSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT1wdyhlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEsey4uLmUuc291cmNlQ29kZS5maWxlQ29udGVudHNbaV0sbG9hZFN0YXRlOkVlLkxPQURJTkd9KSxlfSksU2UoTEksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9cHcoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHtsb2FkU3RhdGU6RWUuTE9BREVELGxpbmVzOnQubGluZXN9KSxlfSksU2UodXcsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixzdGFja0ZyYW1lczp7Li4ubi5zdGFja0ZyYW1lcywuLi50LnN0YWNrRnJhbWVzfSxzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9QkkoaSksaX0pKTtmdW5jdGlvbiBydGUobix0LGUsaSl7bGV0IHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxmb2N1c2VkT3A6e2dyYXBoSWQ6dCxvcE5hbWU6ZX19LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5HUkFQSF9PUF9DUkVBVElPTixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gci5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Qkkociksdm9pZCAwIT09aSYmKHIuZ3JhcGhFeGVjdXRpb25zPXsuLi5uLmdyYXBoRXhlY3V0aW9ucyxmb2N1c0luZGV4Oml9KSxyfWZ1bmN0aW9uIG90ZShuLHQpe3JldHVybiB5MmUobix0KX12YXIgam89UHIoZHcpLGZtPVkoam8sbj0+bi5ydW5zKSxJNT1ZKGpvLG49Pm4ucnVuc0xvYWRlZCksbXM9WShqbyxuPT5uLmFjdGl2ZVJ1bklkKSxzdGU9WShqbyxuPT5uLmxhc3REYXRhUG9sbE9uc2V0VGltZU1zLW4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMpLHN2PVkoam8sbj0+bi5hbGVydHMpLFA1PVkoc3Ysbj0+bi5hbGVydHNMb2FkZWQpLGF0ZT1ZKHN2LG49Pm4ubnVtQWxlcnRzKSxWST1ZKHN2LG49Pm4uZm9jdXNUeXBlKSxsdGU9WShzdixuPT5udWxsPT09bi5mb2N1c1R5cGU/MDpuLmFsZXJ0c0JyZWFrZG93bltuLmZvY3VzVHlwZV18fDApLGN0ZT1ZKHN2LG49Pm51bGw9PT1uLmZvY3VzVHlwZXx8dm9pZCAwPT09bi5hbGVydHNbbi5mb2N1c1R5cGVdP251bGw6bi5hbGVydHNbbi5mb2N1c1R5cGVdKSx1dGU9WShzdixuPT5uLmFsZXJ0c0JyZWFrZG93biksbW09WShqbyxuPT5uLmV4ZWN1dGlvbnMpLEhJPVkobW0sbj0+bi5udW1FeGVjdXRpb25zTG9hZGVkKSxodz1ZKG1tLG49Pm4uZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCksdGg9WShtbSxuPT5uLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyksZnc9WShtbSxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGF2PVkobW0sbj0+bi5wYWdlU2l6ZSksbHY9WShtbSxuPT5uLmRpc3BsYXlDb3VudCksZHRlPVkobW0sbj0+e2xldCB0PVtdO2ZvcihsZXQgZT1uLnNjcm9sbEJlZ2luSW5kZXg7ZTxuLnNjcm9sbEJlZ2luSW5kZXgrbi5kaXNwbGF5Q291bnQ7KytlKXQucHVzaChlIGluIG4uZXhlY3V0aW9uRGlnZXN0cz9uLmV4ZWN1dGlvbkRpZ2VzdHNbZV06bnVsbCk7cmV0dXJuIHR9KSxuaD1ZKGpvLG49Pm4uZ3JhcGhFeGVjdXRpb25zKSxwdGU9WShuaCxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLG13PVkoam8sbj0+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxodGU9WShuaCxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGZ0ZT1ZKG5oLG49Pm4uZGlzcGxheUNvdW50KSxtdGU9WShuaCxuPT5uLnBhZ2VTaXplKSxndGU9WShuaCxuPT5uLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcyksX3RlPVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXMpLFI1PVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGEpLE81PVkobmgsbj0+bi5mb2N1c0luZGV4KSxrNT1ZKGpvLG49Pm4uZ3JhcGhzKSxGNT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF0/bnVsbDplW3QuZ3JhcGhJZF0uZ2V0KHQub3BOYW1lKXx8bnVsbH0pLE41PVkoazUsbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7aW5wdXRzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+e2xldCBzPXsuLi5vfTtyZXR1cm4gaS5oYXMoby5vcF9uYW1lKSYmKHMuZGF0YT1pLmdldChvLm9wX25hbWUpKSxzfSl9fSksdnRlPVkoTzUsUjUsTjUsKG4sdCxlKT0+e2lmKG51bGw9PT1ufHxudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgaT1lLm1hcChhPT4hMSkscj1bXTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHI7bGV0IG89dFtuXS5ncmFwaF9pZCxzPU1hdGgubWF4KDAsbi0yMDApO2ZvcihsZXQgYT1uLTE7YT49czstLWEpaWYodm9pZCAwIT09dFthXSlmb3IobGV0IGw9MDtsPGUubGVuZ3RoJiYoaVtsXXx8dFthXS5ncmFwaF9pZCE9PW98fHRbYV0ub3BfbmFtZSE9PWVbbF0ub3BfbmFtZXx8dFthXS5vdXRwdXRfc2xvdCE9PWVbbF0ub3V0cHV0X3Nsb3R8fChyLnB1c2goYSksaVtsXT0hMCxyLmxlbmd0aCE9PWUubGVuZ3RoKSk7KytsKTtyZXR1cm4gcn0pLHl0ZT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2NvbnN1bWVyczpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89Pm8ubWFwKHM9PntsZXQgYT17Li4uc307cmV0dXJuIGkuaGFzKHMub3BfbmFtZSkmJihhLmRhdGE9aS5nZXQocy5vcF9uYW1lKSksYX0pKX19KSxidGU9WShqbyxuPT57bGV0IHQ9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCtuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LGk9bmV3IEFycmF5KGUtdCkuZmlsbChudWxsKSxyPW4uYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09cilyZXR1cm4gaTtsZXQgbz1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW3JdO2lmKHZvaWQgMD09PW8pcmV0dXJuIGk7Zm9yKGxldCBzPXQ7czxlOysrcylvLmluY2x1ZGVzKHMpJiYoaVtzLXRdPW4uYWxlcnRzLmZvY3VzVHlwZSk7cmV0dXJuIGl9KSxVST1ZKGpvLG49Pm4uZXhlY3V0aW9ucyksTDU9WShVSSxuPT5uLmZvY3VzSW5kZXgpLHh0ZT1ZKFVJLG49PntpZihudWxsPT09bi5mb2N1c0luZGV4KXJldHVybiBudWxsO2xldHtmb2N1c0luZGV4OnQsc2Nyb2xsQmVnaW5JbmRleDplLGRpc3BsYXlDb3VudDppfT1uO3JldHVybiB0PGV8fHQ+PWUraT9udWxsOnQtZX0pLEI1PVkoVUksbj0+bi5leGVjdXRpb25EYXRhKSxDdGU9WShqbyxuPT5uLmdyYXBocy5sb2FkaW5nT3BzKSxWNT1ZKGpvLG49Pm4uc3RhY2tGcmFtZXMpLGdtPVkoVUksbj0+e2xldHtmb2N1c0luZGV4OnQsZXhlY3V0aW9uRGF0YTplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0XT9udWxsOmVbdF19KSxndz1ZKGpvLEw1LGdtLEY1LChuLHQsZSxpKT0+e2xldHtjb2RlTG9jYXRpb25Gb2N1c1R5cGU6cn09bjtyZXR1cm4gbnVsbD09PXI/bnVsbDpyPT09dHMuRVhFQ1VUSU9OP251bGw9PT10fHxudWxsPT09ZT9udWxsOntjb2RlTG9jYXRpb25UeXBlOnRzLkVYRUNVVElPTixvcFR5cGU6ZS5vcF90eXBlLGV4ZWN1dGlvbkluZGV4OnR9Om51bGw9PT1pP251bGw6e2NvZGVMb2NhdGlvblR5cGU6dHMuR1JBUEhfT1BfQ1JFQVRJT04sb3BUeXBlOmkub3BfdHlwZSxvcE5hbWU6aS5vcF9uYW1lfX0pLHd0ZT1ZKGpvLG92KSx6ST1ZKGpvLG49Pm4uc291cmNlQ29kZSksTXRlPVkoekksbj0+bi5zb3VyY2VGaWxlTGlzdExvYWRlZCksSDU9KFkoekksbj0+bi5zb3VyY2VGaWxlTGlzdCksWSh6SSxuPT57bGV0e3NvdXJjZUZpbGVMaXN0OnQsZm9jdXNMaW5lU3BlYzplfT1uO3JldHVybiBudWxsPT09ZT8tMTpwdyh0LGUpfSkpLGpJPVkoekksSDUsKG4sdCk9Pi0xPT09dD9udWxsOm4uZmlsZUNvbnRlbnRzW3RdfHxudWxsKSxHST1ZKGpvLG49Pm4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjKSxTdGU9WShqbyxuPT5uLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlKSxFdGU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiB4MmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLm9uVG9nZ2xlRm9jdXNUeXBlLmVtaXQoby50eXBlKSl9KSxnKDEsImRpdiIsOCksRCgyKSx2KCksZygzLCJkaXYiLDkpLEQoNCksdigpLE4oNSwiZGl2IiksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7YigibmdDbGFzcyIsSG4oNCxFdGUsZS50eXBlPT09aS5mb2N1c1R5cGU/ImZvY3VzIjoiIikpLHgoMikseXQoZS5kaXNwbGF5TmFtZSkseCgyKSxhcCgiICIsZS5kaXNwbGF5U3ltYm9sLCI6ICIsZS5jb3VudCwiICIpfX12YXIgVHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnRzLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFsZXJ0czoibnVtQWxlcnRzIixhbGVydHNCcmVha2Rvd246ImFsZXJ0c0JyZWFrZG93biIsZm9jdXNUeXBlOiJmb2N1c1R5cGUifSxvdXRwdXRzOntvblRvZ2dsZUZvY3VzVHlwZToib25Ub2dnbGVGb2N1c1R5cGUifSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMSwiYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJkZWJ1Z2dpbmctdGl0bGUiXSxbMSwibnVtLWFsZXJ0cy1jb250YWluZXIiXSxbMSwibnVtLWFsZXJ0cy1sYWJlbCJdLFsxLCJudW0tYWxlcnRzLXZhbHVlIiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyIl0sWyJjbGFzcyIsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYWxlcnQtdHlwZS1uYW1lIl0sWzEsImFsZXJ0LXR5cGUtY291bnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxEKDIsIkRlYnVnZ2luZyIpLHYoKSxnKDMsImRpdiIsMikoNCwiZGl2IiwzKSxEKDUsIkFsZXJ0cyIpLHYoKSxnKDYsImRpdiIsNCksRCg3KSx2KCkoKSxnKDgsImRpdiIsNSksRSg5LHgyZSw2LDYsImRpdiIsNiksdigpKCkpLDImZSYmKHgoNiksYigibmdDbGFzcyIsSG4oMyxFdGUsaS5udW1BbGVydHM+MD8ibm9uLXplcm8iOiIiKSkseCgxKSxxZSgiICIsaS5udW1BbGVydHMsIiAiKSx4KDIpLGIoIm5nRm9yT2YiLGkuYWxlcnRzQnJlYWtkb3duKSl9LGRlcGVuZGVuY2llczpbUG4seW5dLHN0eWxlczpbIi5hbGVydHMtYnJlYWtkb3duLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMCAxMHB4IDEwcHggMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiA2cHggMCA2cHggNTBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZS5mb2N1c1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWUwO1xufVxuXG4uYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90bycsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG59XG5cbi5hbGVydC10eXBlLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0LXR5cGUtbmFtZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRlYnVnZ2luZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDE4cHg7XG59XG5cbi5udW0tYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHggMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubnVtLWFsZXJ0cy1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAyNHB4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZS5ub24temVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiNzgwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn0iXX0pLG59KSgpLHcyZT17W091LkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJGdW5jdGlvbiByZWNvbXBpbGVzIixkaXNwbGF5U3ltYm9sOiJDIn0sW091LklORl9OQU5fQUxFUlRdOntkaXNwbGF5TmFtZToiTmFOL1x1MjIxZSIsZGlzcGxheVN5bWJvbDoiXHUyMjFlIn0sW091LlRFTlNPUl9TSEFQRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJUZW5zb3Igc2hhcGUiLGRpc3BsYXlTeW1ib2w6Ilx1MjVhMCJ9fSxEdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZShmbihhdGUpKSx0aGlzLmFsZXJ0c0JyZWFrZG93biQ9dGhpcy5zdG9yZS5waXBlKGZuKFkodXRlLGk9PntsZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gci5zb3J0KCksci5tYXAobz0+KHt0eXBlOm8sLi4udzJlW29dLGNvdW50Omlbb119KSl9KSkpLHRoaXMuZm9jdXNUeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oVkkpKX1vblRvZ2dsZUZvY3VzVHlwZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEtfKHthbGVydFR5cGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJudW1BbGVydHMiLCJhbGVydHNCcmVha2Rvd24iLCJmb2N1c1R5cGUiLCJvblRvZ2dsZUZvY3VzVHlwZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYWxlcnRzLWNvbXBvbmVudCIsMCksUCgib25Ub2dnbGVGb2N1c1R5cGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVG9nZ2xlRm9jdXNUeXBlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUFsZXJ0cyIsVygxLDMsaS5udW1BbGVydHMkKSkoImFsZXJ0c0JyZWFrZG93biIsVygyLDUsaS5hbGVydHNCcmVha2Rvd24kKSkoImZvY3VzVHlwZSIsVygzLDcsaS5mb2N1c1R5cGUkKSl9LGRlcGVuZGVuY2llczpbVHRlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxfdz17MTk6ImZsb2F0MTYiLDE6ImZsb2F0MzIiLDI6ImZsb2F0NjQiLDM6ImludDMyIiw0OiJ1aW50OCIsMTc6InVpbnQxNiIsMjI6InVpbnQzMiIsMjM6InVpbnQ2NCIsNToiaW50MTYiLDY6ImludDgiLDc6InN0cmluZyIsODoiY29tcGxleDY0IiwxODoiY29tcGxleDEyOCIsOToiaW50NjQiLDEwOiJib29sIiwxMToicWludDgiLDEyOiJxdWludDgiLDE1OiJxaW50MTYiLDE2OiJxdWludDE2IiwxMzoicWludDMyIiwxNDoiYmZsb2F0MTYiLDIwOiJyZXNvdXJjZSIsMjE6InZhcmlhbnQiLDExOToiZmxvYXQxNl9yZWYiLDEwMToiZmxvYXQzMl9yZWYiLDEwMjoiZmxvYXQ2NF9yZWYiLDEwMzoiaW50MzJfcmVmIiwxMjI6InVpbnQzMl9yZWYiLDEwNDoidWludDhfcmVmIiwxMTc6InVpbnQxNl9yZWYiLDEwNToiaW50MTZfcmVmIiwxMDY6ImludDhfcmVmIiwxMDc6InN0cmluZ19yZWYiLDEwODoiY29tcGxleDY0X3JlZiIsMTE4OiJjb21wbGV4MTI4X3JlZiIsMTA5OiJpbnQ2NF9yZWYiLDEyMzoidWludDY0X3JlZiIsMTEwOiJib29sX3JlZiIsMTExOiJxaW50OF9yZWYiLDExMjoicXVpbnQ4X3JlZiIsMTE1OiJxaW50MTZfcmVmIiwxMTY6InF1aW50MTZfcmVmIiwxMTM6InFpbnQzMl9yZWYiLDExNDoiYmZsb2F0MTZfcmVmIiwxMjA6InJlc291cmNlX3JlZiIsMTIxOiJ2YXJpYW50X3JlZiJ9O2Z1bmN0aW9uIFdJKG4pe2xldHt0ZW5zb3JEZWJ1Z01vZGU6dCxhcnJheTplfT1uO3N3aXRjaCh0KXtjYXNlIHpvLk5PX1RFTlNPUjppZihudWxsIT09ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIHpvLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1lfHwyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKGVbMV0pfTtjYXNlIHpvLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09ZXx8NSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT17c2l6ZTplWzFdfTtyZXR1cm4gZVsyXT4wJiYoaS5udW1OZWdhdGl2ZUluZnM9ZVsyXSksZVszXT4wJiYoaS5udW1Qb3NpdGl2ZUluZnM9ZVszXSksZVs0XT4wJiYoaS5udW1OYU5zPWVbNF0pLGl9Y2FzZSB6by5TSEFQRTp7aWYobnVsbD09PWV8fDEwIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBTSEFQRSBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTAsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT1lWzJdLHI9ZS5zbGljZSg0LE1hdGgubWluKDQraSxlLmxlbmd0aCkpO3JldHVybiByLmxlbmd0aDxpJiYocj1uZXcgQXJyYXkoaS1yLmxlbmd0aCkuY29uY2F0KHIpKSx7ZHR5cGU6X3dbZVsxXV0scmFuazppLHNpemU6ZVszXSxzaGFwZTpyfX1jYXNlIHpvLkZVTExfSEVBTFRIOntpZihudWxsPT09ZXx8MTEhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIEZVTExfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMSwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO2xldCByPXtkdHlwZTpfd1tlWzJdXSxyYW5rOmVbM10sc2l6ZTplWzRdfTtyZXR1cm4gZVs1XT4wJiYoci5udW1OZWdhdGl2ZUluZnM9ZVs1XSksZVs2XT4wJiYoci5udW1Qb3NpdGl2ZUluZnM9ZVs2XSksZVs3XT4wJiYoci5udW1OYU5zPWVbN10pLGVbOF0+MCYmKHIubnVtTmVnYXRpdmVGaW5pdGVzPWVbOF0pLGVbOV0+MCYmKHIubnVtWmVyb3M9ZVs5XSksZVsxMF0+MCYmKHIubnVtUG9zaXRpdmVGaW5pdGVzPWVbMTBdKSxyfWNhc2Ugem8uRlVMTF9URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIEZVTExfVEVOU09SIG1vZGUiKTtyZXR1cm57fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHRlbnNvckRlYnVnTW9kZTogJHt0fWApfX12YXIgVTU9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gUzJlKG4sdCl7MSZuJiZOKDAsImRpdiIsNCl9ZnVuY3Rpb24gRTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDgpLEQoMiwiTmFOIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtTmFOcywiIil9fWZ1bmN0aW9uIFQyZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxEKDIsIi1cdTIyMWUiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUluZnMsIiIpfX1mdW5jdGlvbiBEMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsOCksRCgyLCIrXHUyMjFlIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gQTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIi0iKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBJMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsMTApLEQoMiwiMCIpLHYoKSxnKDMsInNwYW4iLDkpLEQoNCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDQpLHFlKCJceGQ3IixlLm51bVplcm9zLCIiKX19ZnVuY3Rpb24gUDJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIisiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBSMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSksRSgxLEUyZSw1LDEsImRpdiIsNiksRSgyLFQyZSw1LDEsImRpdiIsNiksRSgzLEQyZSw1LDEsImRpdiIsNiksRSg0LEEyZSw1LDEsImRpdiIsNiksRSg1LEkyZSw1LDEsImRpdiIsNiksRSg2LFAyZSw1LDEsImRpdiIsNiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmFOcyYmZS5udW1OYU5zPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUluZnMmJmUubnVtTmVnYXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1Qb3NpdGl2ZUluZnMmJmUubnVtUG9zaXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUZpbml0ZXMmJmUubnVtTmVnYXRpdmVGaW5pdGVzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1aZXJvcyYmZS5udW1aZXJvcz4wKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVGaW5pdGVzJiZlLm51bVBvc2l0aXZlRmluaXRlcz4wKX19dmFyIE8yZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbnRhaW5lciIsbl19O2Z1bmN0aW9uIGsyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDUpLDImbiYmYigiZHR5cGUiLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmR0eXBlKX1mdW5jdGlvbiBGMmUobix0KXsxJm4mJk4oMCwiZGVidWctdGVuc29yLXJhbmsiLDYpLDImbiYmYigicmFuayIsTSgpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gTjJlKG4sdCl7MSZuJiZOKDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZuJiZiKCJzaGFwZSIsTSgpLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpfWZ1bmN0aW9uIEwyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDgpLDImbiYmYigiaGFzSW5mT3JOYU4iLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKX1mdW5jdGlvbiBCMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw5KSwyJm4pe2xldCBlPU0oKTt4cigic2l6ZSIsZS5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpLGIoIm51bU5lZ2F0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcykoIm51bVBvc2l0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcykoIm51bU5hTnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zKSgibnVtTmVnYXRpdmVGaW5pdGVzIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzKSgibnVtWmVyb3MiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcykoIm51bVBvc2l0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyl9fXZhciBWMmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiICIsaS5kdHlwZSwiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLEgyZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRCgwKSwyJmUmJnFlKCIgIixpLnJhbmssIkQgIil9LHN0eWxlczpbVTVdfSksbn0pKCksVTJlPSgoKT0+e2NsYXNzIG57Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKGU9PnZvaWQgMD09PWU/Ij8iOlN0cmluZyhlKSkuam9pbigiLCIpKyJdIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiIHNoYXBlOiIsaS5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLHoyZT0oKCk9PntjbGFzcyBue2dldCBicmVha2Rvd25FeGlzdHMoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5udW1OYU5zfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVGaW5pdGVzfHx2b2lkIDAhPT10aGlzLm51bVplcm9zfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlRmluaXRlc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJzcGFuIiksRCgyLCJzaXplOiIpLHYoKSxnKDMsInNwYW4iLDEpLEQoNCksdigpKCksRSg1LFMyZSwxLDAsImRpdiIsMiksRSg2LFIyZSw3LDYsImRpdiIsMykpLDImZSYmKHgoNCkseXQoaS5zaXplKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSl9LGRlcGVuZGVuY2llczpbWGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnNpemVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIG1hcmdpbjogMCAzcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuYnJlYWtkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnlbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIGhlaWd0aDogMTAwJTtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5LXRhZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgICAgfVxuICAgICAgLmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH0iXX0pLG59KSgpLGoyZT0oKCk9PntjbGFzcyBue2dldCBpbmZvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaGFzSW5mT3JOYU4/IkhhcyBcdTIyMWUvTmFOIjoiTm8gXHUyMjFlL05hTiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRCgxKSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLEhuKDIsTzJlLGkuaGFzSW5mT3JOYU4/Imhhcy1pbmYtb3ItbmFuIjoiIikpLHgoMSkscWUoIiAiLGkuaW5mb1N0cmluZywiICIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuaGFzLWluZi1vci1uYW5bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxxST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxrMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDApLEUoMSxGMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItcmFuayIsMSksRSgyLE4yZSwxLDEsImRlYnVnLXRlbnNvci1zaGFwZSIsMiksRSgzLEwyZSwxLDEsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsMyksRSg0LEIyZSwxLDcsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsNCkpLDImZSYmKGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUucmFuaykseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpLHgoMSksYigibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSl9LGRlcGVuZGVuY2llczpbWGUsVjJlLGoyZSx6MmUsSDJlLFUyZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBHMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTIpLEQoMSwiXHUyNWI2IiksdigpKX12YXIgVzJlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBxMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oMik7YigiZGVidWdUZW5zb3JWYWx1ZSIsaS5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMSxXMmUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0udGVuc29yX2RlYnVnX21vZGUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKSkpfX1mdW5jdGlvbiBZMmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSgxLCJkaXYiLDEzKSgyLCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0LG89TSgyKTtyZXR1cm4gb2Uoby5vblRlbnNvck5hbWVDbGljay5lbWl0KHtpbmRleDpyLGdyYXBoX2lkOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLmdyYXBoX2lkLG9wX25hbWU6by5ncmFwaEV4ZWN1dGlvbkRhdGFbcl0ub3BfbmFtZX0pKX0pLEQoMyksdigpLGcoNCwiZGl2IiwxNSksRCg1KSx2KCkoKSxFKDYscTJlLDEsNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNiksdigpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7eCgyKSx4cigidGl0bGUiLGkuZ2V0VGVuc29yTmFtZShlKSkseCgxKSxxZSgiICIsaS5nZXRUZW5zb3JOYW1lKGUpLCIgIikseCgyKSx5dChpLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF90eXBlKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5kZWJ1Z190ZW5zb3JfdmFsdWUpfX1mdW5jdGlvbiBYMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTgpLEQoMSwiIExvYWRpbmcuLi4gIiksdigpKX12YXIgUTJlPWZ1bmN0aW9uKG4pe3JldHVybnsiaW5wdXQtb2YtZm9jdXMiOm59fTtmdW5jdGlvbiBLMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSgyLCJkaXYiLDcpLEUoMyxHMmUsMiwwLCJkaXYiLDgpLEQoNCksdigpLEUoNSxZMmUsNyw0LCJkaXYiLDkpLEUoNixYMmUsMiwwLCJuZy10ZW1wbGF0ZSIsMTAsMTEsZW4pLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoNykscj1NKDIpO3goMSksYigibmdDbGFzcyIsSG4oNSxRMmUsci5pc0lucHV0T2ZGb2N1cyhlKSkpLHgoMiksYigibmdJZiIsZT09PXIuZm9jdXNJbmRleCkseCgxKSxxZSgiICIsZSwiICIpLHgoMSksYigibmdJZiIsci5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0pKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIFoyZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMyksUCgic2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChyKSl9KSxFKDEsSzJlLDgsNywiZGl2Iiw0KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJjZGtWaXJ0dWFsRm9yT2YiLGUuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19dmFyIEl0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblNjcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IEcsdGhpcy5vblRlbnNvck5hbWVDbGljaz1uZXcgRyx0aGlzLnBhcnNlRGVidWdUZW5zb3JWYWx1ZT1XSSx0aGlzLlRFU1RfT05MWT17Z2V0Vmlld1BvcnQ6KCk9PnRoaXMudmlld1BvcnR9fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMudmlld1BvcnQmJmUuZm9jdXNJbmRleCYmbnVsbCE9PWUuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUpe2xldCBpPXRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLHI9ZS5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSxvPU1hdGgucm91bmQoKGkuZW5kLWkuc3RhcnQpLzMpLHM9TWF0aC5tYXgoci1vLDApO3RoaXMudmlld1BvcnQuc2Nyb2xsVG9JbmRleChzLHI+PWkuc3RhcnQmJnI8aS5lbmQ/InNtb290aCI6dm9pZCAwKX19Z2V0VGVuc29yTmFtZShlKXtyZXR1cm5gJHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF9uYW1lfToke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm91dHB1dF9zbG90fWB9aXNJbnB1dE9mRm9jdXMoZSl7cmV0dXJuIG51bGwhPT10aGlzLmZvY3VzSW5wdXRJbmRpY2VzJiZ0aGlzLmZvY3VzSW5wdXRJbmRpY2VzLmluY2x1ZGVzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHFDLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkudmlld1BvcnQ9ci5maXJzdCl9fSxpbnB1dHM6e251bUdyYXBoRXhlY3V0aW9uczoibnVtR3JhcGhFeGVjdXRpb25zIixncmFwaEV4ZWN1dGlvbkRhdGE6ImdyYXBoRXhlY3V0aW9uRGF0YSIsZ3JhcGhFeGVjdXRpb25JbmRpY2VzOiJncmFwaEV4ZWN1dGlvbkluZGljZXMiLGZvY3VzSW5kZXg6ImZvY3VzSW5kZXgiLGZvY3VzSW5wdXRJbmRpY2VzOiJmb2N1c0lucHV0SW5kaWNlcyJ9LG91dHB1dHM6e29uU2Nyb2xsZWRJbmRleENoYW5nZToib25TY3JvbGxlZEluZGV4Q2hhbmdlIixvblRlbnNvck5hbWVDbGljazoib25UZW5zb3JOYW1lQ2xpY2sifSxmZWF0dXJlczpbenRdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyIl0sWzEsImdyYXBoLWV4ZWN1dGlvbnMtdGl0bGUiXSxbIml0ZW1TaXplIiwiMzgiLCJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiLDQsIm5nSWYiXSxbIml0ZW1TaXplIiwiMzgiLDEsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiXSxbImNsYXNzIiwidGVuc29yLWNvbnRhaW5lciIsNCwiY2RrVmlydHVhbEZvciIsImNka1ZpcnR1YWxGb3JPZiJdLFsxLCJ0ZW5zb3ItY29udGFpbmVyIl0sWzEsInRlbnNvci1pdGVtIiwzLCJuZ0NsYXNzIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1pbmRleCJdLFsiY2xhc3MiLCJncmFwaC1leGVjdXRpb24tZm9jdXMiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJjbGFzcyIsInRlbnNvci1pdGVtIl0sWyJkYXRhTG9hZGluZyIsIiJdLFsxLCJncmFwaC1leGVjdXRpb24tZm9jdXMiXSxbMSwidGVuc29yLW5hbWUtYW5kLW9wLXR5cGUiXSxbMSwidGVuc29yLW5hbWUiLDMsInRpdGxlIiwiY2xpY2siXSxbMSwib3AtdHlwZSJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIiw0LCJuZ0lmIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXSxbMSwibG9hZGluZy1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRCgyKSx2KCksRSgzLFoyZSwyLDEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMiksdigpKSwyJmUmJih4KDIpLHFlKCIgR3JhcGggRXhlY3V0aW9ucyAoIixpLm51bUdyYXBoRXhlY3V0aW9ucywiKSAiKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLm51bUdyYXBoRXhlY3V0aW9ucyYmaS5udW1HcmFwaEV4ZWN1dGlvbnM+MCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLHFJLHBKLGhKLHFDXSxzdHlsZXM6WycuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmctbGVmdDoxMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LmdyYXBoLWV4ZWN1dGlvbi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXJpZ2h0OjRweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncmFwaC1leGVjdXRpb25zLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206NXB4fS5ncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtmb250LXNpemU6MTJweDt3aWR0aDoxMDAlO292ZXJmbG93LXg6aGlkZGVufS5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5sb2FkaW5nLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlY2VmZjE7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7cGFkZGluZzoxcHggM3B4O3dpZHRoOm1heC1jb250ZW50O2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS50ZW5zb3ItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MzhweDtsaW5lLWhlaWdodDozOHB4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjpub25lO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O21hcmdpbjoycHggMCAxcHg7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDJweCk7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAycHg7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZToxcHggc29saWQgI2M2Y2FkMX0udGVuc29yLW5hbWUtYW5kLW9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2RpcmVjdGlvbjpydGw7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctcmlnaHQ6OHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjQwcHh9ZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxQdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1HcmFwaEV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihtdykpLHRoaXMuZ3JhcGhFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oUjUpKSx0aGlzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkobXcsaT0+MD09PWk/bnVsbDpBcnJheS5mcm9tKHtsZW5ndGg6aX0pLm1hcCgocixvKT0+bykpKSksdGhpcy5mb2N1c0luZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oTzUpKSx0aGlzLmZvY3VzSW5wdXRJbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUoZm4odnRlKSl9b25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godHYoe2luZGV4OmV9KSl9b25UZW5zb3JOYW1lQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChudihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJudW1HcmFwaEV4ZWN1dGlvbnMiLCJncmFwaEV4ZWN1dGlvbkRhdGEiLCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLCJmb2N1c0luZGV4IiwiZm9jdXNJbnB1dEluZGljZXMiLCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLCJvblRlbnNvck5hbWVDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLDApLFAoIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY3JvbGxlZEluZGV4Q2hhbmdlKG8pfSkoIm9uVGVuc29yTmFtZUNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRlbnNvck5hbWVDbGljayhvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUdyYXBoRXhlY3V0aW9ucyIsVygxLDUsaS5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsVygyLDcsaS5ncmFwaEV4ZWN1dGlvbkRhdGEkKSkoImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsVygzLDksaS5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLFcoNCwxMSxpLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixXKDUsMTMsaS5mb2N1c0lucHV0SW5kaWNlcyQpKX0sZGVwZW5kZW5jaWVzOltJdGUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIGVPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIE91dHB1dCAiKSx2KCkpfWZ1bmN0aW9uIHRPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIElucHV0ICIpLHYoKSl9ZnVuY3Rpb24gbk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpKDEsInNwYW4iLDcpLEUoMixlT2UsMiwwLCJzcGFuIiw4KSxFKDMsdE9lLDIsMCwic3BhbiIsOCksdigpLEQoNCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nU3dpdGNoIixlLmtpbmQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiaW5wdXQiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImNvbnN1bWVyIikseCgxKSxxZSgiIHNsb3Q6ICIsZS5zbG90LCIgIil9fWZ1bmN0aW9uIGlPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiICIsZS5vcERhdGEub3BfdHlwZSwiICIpfX1mdW5jdGlvbiByT2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDEwKSxEKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLHYoKSl9dmFyIG9PZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LFJ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbk9wTmFtZUNsaWNrPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1vcCJdXSxpbnB1dHM6e2tpbmQ6ImtpbmQiLG9wTmFtZToib3BOYW1lIixzbG90OiJzbG90IixvcERhdGE6Im9wRGF0YSJ9LG91dHB1dHM6e29uT3BOYW1lQ2xpY2s6Im9uT3BOYW1lQ2xpY2sifSxkZWNsczo5LHZhcnM6Nyxjb25zdHM6W1sxLCJvcC1jb250YWluZXIiXSxbMSwiaW5wdXQtdGVuc29yLW5hbWUiXSxbMSwib3AtbmFtZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInNsb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWzEsInNsb3QiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm9wLXR5cGUiXSxbMSwib3AtaW5mby1taXNzaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJidXR0b24iLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk9wTmFtZUNsaWNrLmVtaXQoe29wX25hbWU6aS5vcE5hbWV9KX0pLGcoMywic3BhbiIpLEQoNCksdigpKCksRSg1LG5PZSw1LDQsImRpdiIsMyksdigpLEUoNixpT2UsMiwxLCJkaXYiLDQpLEUoNyxyT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSxiKCJuZ0NsYXNzIixIbig1LG9PZSwic2VsZiI9PT1pLmtpbmQ/InNlbGYtb3AtbmFtZSI6IiIpKSx4KDIpLHl0KGkub3BOYW1lKSx4KDEpLGIoIm5nSWYiLCJzZWxmIiE9PWkua2luZCkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLm9wRGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbUG4sWGUsaHIsSXJdLHN0eWxlczpbJy5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjJweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MXB4IDNweCAjZWVlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweCAwIDA7cGFkZGluZzoycHggNnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjAwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzoxcHggM3B4ICM3NTc1NzV9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTowfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlcjoycHggc29saWQgI2ZmZDNiMn0ub3AtaW5mby1taXNzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdy13cmFwOmFueXdoZXJlO3BhZGRpbmc6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zZWxmLW9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xvdFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J119KSxufSkoKTtmdW5jdGlvbiBhT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxEKDIpLHYoKSxnKDMsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgzKTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleDt4KDIpLHFlKCJJbnB1dCBzbG90ICIsaSwiOiIpLHgoMSksYigia2luZCIsImlucHV0IikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5vdXRwdXRfc2xvdCkoIm9wRGF0YSIsZS5kYXRhKX19ZnVuY3Rpb24gbE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDExKSgxLCJkaXYiKSxFKDIsYU9lLDQsNSwiZGl2IiwxMiksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nRm9yT2YiLGUuaW5wdXRPcHMpfX1mdW5jdGlvbiBjT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMTYpLEQoMSwiIChUaGlzIG9wIGhhcyBubyBpbnB1dCB0ZW5zb3IuKSAiKSx2KCkpfWZ1bmN0aW9uIHVPZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjMpKDEsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSg0KTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5pbnB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBkT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTkpKDEsImRpdiIsMjApLEQoMiksZygzLCJzcGFuIiksWUUoNCwyMSksdigpLEQoNSwiKSAiKSx2KCksRSg2LHVPZSwyLDQsImRpdiIsMjIpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7eCgyKSxhcCgiIE91dHB1dCBzbG90ICIsaSwiOiAoIixlLmxlbmd0aCwiICIpLHgoMiksT2IoZS5sZW5ndGgpLFhFKDQpLHgoMiksYigibmdGb3JPZiIsZSl9fWZ1bmN0aW9uIHBPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNykoMSwiZGl2IiksRSgyLGRPZSw3LDQsImRpdiIsMTgpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCgyKSxiKCJuZ0Zvck9mIixlLmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gaE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI0KSxEKDEpLGcoMiwic3BhbiIpLFlFKDMsMjUpLHYoKSxEKDQsIiBhbmQgbm8gY29uc3VtZXIuKSAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHFlKCIgKFRoaXMgb3AgaGFzICIsZS5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSx4KDIpLE9iKGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgpLFhFKDMpfX1mdW5jdGlvbiBmT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSxFKDEsbE9lLDMsMSwiZGl2Iiw0KSxFKDIsY09lLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxlbiksZyg0LCJkaXYiLDYpKDUsImRpdiIsNyksRCg2LCJPcDoiKSx2KCksZyg3LCJncmFwaC1vcCIsOCksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLHYoKSgpLEUoOCxwT2UsMywxLCJkaXYiLDkpLEUoOSxoT2UsNSwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxlbiksdigpfWlmKDImbil7bGV0IGU9c3QoMyksaT1zdCgxMCkscj1NKCk7eCgxKSxiKCJuZ0lmIixyLmlucHV0T3BzLmxlbmd0aD4wKSgibmdJZkVsc2UiLGUpLHgoNiksYigia2luZCIsInNlbGYiKSgib3BOYW1lIixyLm9wSW5mby5vcF9uYW1lKSgib3BEYXRhIixyLm9wSW5mbykseCgxKSxiKCJuZ0lmIixyLnRvdGFsTnVtQ29uc3VtZXJzPjApKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIG1PZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMjYpLEQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksdigpKX1mdW5jdGlvbiBnT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMjcpLEQoMSwiIE5vIGdyYXBoIG9wIHNlbGVjdGVkLiBDbGljayBhIHRlbnNvciBuYW1lIGluIHRoZSBHcmFwaCBFeGVjdXRpb25zIHRhYmxlIHRvIHZpZXcgdGhlIG5laWdoYm9yaG9vZCBvZiB0aGUgdGVuc29yJ3Mgb3AgaW4gaXRzIGdyYXBoLiAiKSx2KCkpfXZhciBPdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25HcmFwaE9wTmF2aWdhdGU9bmV3IEd9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKChlLGkpPT5lK2kubGVuZ3RoLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscjtyZXR1cm4gdD0kbG9jYWxpemVgOuKQn2ZlNTVmOWIxOTNlYTIwYWFlNWI1NjM1ZTY4ZDkzODY1MDM4NDc3NDbikJ80OTU1MTMzNzQwODQxMjk5ODUxOntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHtjb25zdW1lcn0gPTEge2NvbnN1bWVyfSBvdGhlciB7Y29uc3VtZXJzfX1gLHQ9UUUodCx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxlPSRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsaT0kbG9jYWxpemVgOuKQnzZhYTc1ZjYyN2UwZGMxNjE1MGVmNDQ4NDY0ZTBjODU3YWFhMGRjMTjikJ81MTU2NzEyOTM1MTUwNTg2ODc4OntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHt0ZW5zb3J9ID0xIHt0ZW5zb3J9IG90aGVyIHt0ZW5zb3JzfX1gLGk9UUUoaSx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxyPSRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtpfTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLHIsWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IikoMSwiZGl2IiksRCgyLCJHcmFwaCBTdHJ1Y3R1cmUiKSx2KCksZygzLCJkaXYiLDApLEUoNCxmT2UsMTEsNywiZGl2IiwxKSx2KCksRSg1LG1PZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLEUoNyxnT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCg0KSxiKCJuZ0lmIixudWxsIT1pLm9wSW5mbykoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbeW4sWGUsUnRlXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde292ZXJmbG93LXk6YXV0b30uY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206NXB4O292ZXJmbG93LXg6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmNvbnN1bWVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjVweCAwfS5ncmFwaC1zdHJ1Y3R1cmUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtvdmVyZmxvdy15OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7bWFyZ2luLXRvcDo1cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmctYm90dG9tOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1vcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctYm90dG9tOjVweH0uaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OTttYXJnaW4tYm90dG9tOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0uaW5wdXQtdGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5uby1vcC1mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5O2ZvbnQtZmFtaWx5OiJSb2JvdG8iLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3doaXRlLXNwYWNlOm5vcm1hbH0uc2VsZi1vcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbTo1cHh9LnNlbGYtb3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZy1ib3R0b206NXB4fS5zbG90LWNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy10b3A6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH0uc2xvdC1jb25zdW1lcnMtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxrdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5vcEluZm8kPXRoaXMuc3RvcmUucGlwZShmbihGNSkpLHRoaXMuaW5wdXRPcHMkPXRoaXMuc3RvcmUucGlwZShmbihONSkpLHRoaXMuY29uc3VtZXJPcHMkPXRoaXMuc3RvcmUucGlwZShmbih5dGUpKX1vbkdyYXBoT3BOYXZpZ2F0ZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGl2KGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm9wSW5mbyIsImlucHV0T3BzIiwiY29uc3VtZXJPcHMiLCJvbkdyYXBoT3BOYXZpZ2F0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtY29tcG9uZW50IiwwKSxQKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25HcmFwaE9wTmF2aWdhdGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigib3BJbmZvIixXKDEsMyxpLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFcoMiw1LGkuaW5wdXRPcHMkKSkoImNvbnN1bWVyT3BzIixXKDMsNyxpLmNvbnN1bWVyT3BzJCkpfSxkZXBlbmRlbmNpZXM6W090ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRnRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEQoMiwiRGVidWdnZXIgVjIgaXMgaW5hY3RpdmUgYmVjYXVzZSBubyBkYXRhIGlzIGF2YWlsYWJsZS4iKSx2KCksZygzLCJkaXYiKSxEKDQsIlRvIHVzZSB0aGUgZGVidWdnZXIsIiksdigpLGcoNSwiZGl2IikoNiwib2wiKSg3LCJsaSIpLEQoOCwiIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB5b3VyIHByb2dyYW06ICIpLGcoOSwiZGl2IiwyKSgxMCwic3BhbiIpLEQoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSx2KCksZygxMiwic3BhbiIsMyksRCgxMywibG9nZGlyIiksdigpLEQoMTQsIiwgIiksZygxNSwic3BhbiIsMyksRCgxNiwndGVuc29yX2RlYnVnX21vZGU9IkZVTExfSEVBTFRIIicpLHYoKSxEKDE3LCIsICIpLGcoMTgsInNwYW4iLDMpLEQoMTksImNpcmN1bGFyX2J1ZmZlcl9zaXplPS0xIiksdigpLGcoMjAsInNwYW4iKSxEKDIxLCIpIiksdigpKCkoKSxnKDIyLCJsaSIpLEQoMjMsIlJlLXJ1biB0aGUgcHJvZ3JhbS4iKSx2KCkoKSgpLGcoMjQsImRpdiIsNCkoMjUsImRpdiIsNSkoMjYsImRpdiIsNiksTigyNywiaW1nIiw3KSx2KCksZygyOCwiZGl2Iiw4KSxEKDI5LCJBdXRvLWFsZXJ0cyBmb3IgcHJvYmxlbXMgZm91bmQiKSx2KCkoKSxnKDMwLCJkaXYiLDUpKDMxLCJkaXYiLDYpLE4oMzIsImltZyIsOSksdigpLGcoMzMsImRpdiIsOCksRCgzNCwiIEludGVncmF0ZWQgZGVidWdnaW5nIHRvIHRyYWNlIHByb2JsZW1zIHRvIHRoZWlyIGNhdXNlcyAiKSx2KCkoKSxnKDM1LCJkaXYiLDUpKDM2LCJkaXYiLDYpLE4oMzcsImltZyIsMTApLHYoKSxnKDM4LCJkaXYiLDgpLEQoMzksIkxpbmsgbG9nIHRvIGNvZGUiKSx2KCkoKSgpLGcoNDAsImRpdiIsMTEpKDQxLCJkaXYiLDEyKSxEKDQyLCIgVGhlIGxvZyBkaXJlY3RvcnkgbXVzdCBjb250YWluIFRlbnNvckZsb3cgRGVidWdnZXIgKFYyKSBkYXRhLiB0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oKSB3aWxsIGNvbGxlY3QgdGVuc29yIGRhdGEsIGdyYXBoIHN0cnVjdHVyZXMsIHRoZSBhc3NvY2lhdGVkIHN0YWNrIHRyYWNlcywgYW5kIHNvdXJjZSBjb2RlIHRvIHRoZSBzcGVjaWZpY2VkIGRpcmVjdG9yeSBsb2dkaXIgYXMgdGhlIGluc3RydW1lbnRlZCBUZW5zb3JGbG93IHByb2dyYW0gZXhlY3V0ZXMuICIpLHYoKSxnKDQzLCJkaXYiLDEyKSg0NCwiZGl2IiksRCg0NSwiIFNlZSAiKSxnKDQ2LCJhIiwxMyksRCg0NywiIGRvY3VtZW50YXRpb24gIiksdigpLEQoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksdigpLGcoNDksImRpdiIpLEQoNTAsIiBTZWUgIiksZyg1MSwiYSIsMTQpLEQoNTIsIiBoZXJlICIpLHYoKSxEKDUzLCIgZm9yIG90aGVyIFRlbnNvckZsb3cgZGVidWdnaW5nIEFQSXMuICIpLHYoKSgpKCkoKSl9LHN0eWxlczpbIi5hcmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgY29sb3I6IGxpZ2h0Ymx1ZTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBtYXJnaW46IDJweDtcbn1cblxuLmNvZGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IFJvYm90bztcbiAgZm9udC1zaXplOiAxNXB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiA1MHB4O1xufVxuXG4uZGV0YWlscy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB3aWR0aDogNTAlO1xufVxuXG4uZXhoaWJpdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuZGVzY3JpcHRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuc2NyZWVuc2hvdFtfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAyMDBweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksbn0pKCksTnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk4oMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRlcGVuZGVuY2llczpbRnRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxCdGVfZ2V0V2luZG93PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd307ZnVuY3Rpb24gTHRlKG4pe2xldCB0PUJ0ZV9nZXRXaW5kb3coKS5yZXF1aXJlO3JldHVybiBuZXcgUHJvbWlzZShlPT57dChuLGUpfSl9dmFyIGo1X2xvYWRNb25hY289YXN5bmMgZnVuY3Rpb24oKXtsZXQgbj1CdGVfZ2V0V2luZG93KCk7aWYodm9pZCAwPT09bi5tb25hY28pe2lmKCFuLnJlcXVpcmUpdGhyb3cgbmV3IEVycm9yKCJsb2FkTW9uYWNvKCkgZmFpbGVkIGJlY2F1c2UgZnVuY3Rpb24gcmVxdWlyZSgpIGlzIHVuYXZhaWxhYmxlIik7bi5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOiIvdGYtaW1wb3J0cy92cyJ9fSksYXdhaXQgTHRlKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0pLGF3YWl0IEx0ZShbInZzL3B5dGhvbi9weXRob24uY29udHJpYnV0aW9uIl0pfX07ZnVuY3Rpb24gWUkobil7cmV0dXJuIG4/InZzLWRhcmsiOiJ2cyJ9dmFyIF9tPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5yZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5Ncz0xMDAsdGhpcy5vblJlc2l6ZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uUmVzaXplJD1uZXcgVGU7bGV0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5vblJlc2l6ZSQubmV4dCgpfSk7aS5vYnNlcnZlKGUubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCk9PntpLnVub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpfSl9bmdPbkluaXQoKXt0aGlzLm9uUmVzaXplJC5waXBlKENhKDEpLEFyKHRoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMpLG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm9uUmVzaXplLmVtaXQoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlJC5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImRldGVjdFJlc2l6ZSIsIiJdXSxpbnB1dHM6e3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOiJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyJ9LG91dHB1dHM6e29uUmVzaXplOiJvblJlc2l6ZSJ9fSksbn0pKCksTU9lPVsiY29kZVZpZXdlckNvbnRhaW5lciJdLHp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKGUpe2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47bGV0IGk9ZS5tb25hY28mJm51bGw9PT10aGlzLmVkaXRvcjtudWxsPT09dGhpcy5lZGl0b3ImJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHt2YWx1ZToodGhpcy5saW5lcz8/W10pLmpvaW4oIlxuIiksbGFuZ3VhZ2U6InB5dGhvbiIscmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0sdGhlbWU6WUkodGhpcy51c2VEYXJrTW9kZSl9KSksZS5saW5lcyYmdGhpcy5saW5lcyYmdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5saW5lcy5qb2luKCJcbiIpKTtsZXQgcj1pfHxlLmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYociYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKHIsdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtsZXQgbz10aGlzLmxpbmVzW3ItMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEscixvKzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX1lLnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUoWUkodGhpcy51c2VEYXJrTW9kZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChNT2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5jb2RlVmlld2VyQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLG1vbmFjbzoibW9uYWNvIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLDEsImNvZGUtdmlld2VyLWNvbnRhaW5lciIsMywicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY29kZVZpZXdlckNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSx2KCkpLDImZSYmYigicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLGkuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGVwZW5kZW5jaWVzOltfbV0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksanRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLm1vbmFjbyQ9bnVsbH1uZ09uSW5pdCgpe3RoaXMubW9uYWNvJD1sbyhqNV9sb2FkTW9uYWNvKCkpLnBpcGUoQigoKT0+d2luZG93Lm1vbmFjbykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZSJdXSxpbnB1dHM6e2xpbmVzOiJsaW5lcyIsZm9jdXNlZExpbmVubzoiZm9jdXNlZExpbmVubyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6Mix2YXJzOjYsY29uc3RzOltbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwibW9uYWNvIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsInNvdXJjZS1jb2RlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImxpbmVzIixpLmxpbmVzKSgiZm9jdXNlZExpbmVubyIsaS5mb2N1c2VkTGluZW5vKSgibW9uYWNvIixXKDEsNCxpLm1vbmFjbyQpKSgidXNlRGFya01vZGUiLGkudXNlRGFya01vZGUpfSxkZXBlbmRlbmNpZXM6W3p0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gVE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIgIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5maWxlX3BhdGgsIiAiKX19ZnVuY3Rpb24gRE9lKG4sdCl7MSZuJiYoZygwLCJkaXYiLDcpLEQoMSwiIE5vIGZpbGUgc2VsZWN0ZWQuIENsaWNrIGEgbGluZSBudW1iZXIgaW4gdGhlIFN0YWNrIFRyYWNlIHNlY3Rpb24gdG8gc2hvdyB0aGUgc291cmNlIGNvZGUuICIpLHYoKSl9ZnVuY3Rpb24gQU9lKG4sdCl7aWYoMSZuJiZOKDAsInNvdXJjZS1jb2RlIiw4KSwyJm4pe2xldCBlPU0oKTtiKCJsaW5lcyIsZS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpKCJmb2N1c2VkTGluZW5vIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5saW5lbm8pKCJ1c2VEYXJrTW9kZSIsZS51c2VEYXJrTW9kZSl9fXZhciBHdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJkaXYiLDIpLEQoMywiU291cmNlIENvZGUiKSx2KCksRSg0LFRPZSwyLDEsImRpdiIsMyksRSg1LERPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsQU9lLDEsMywic291cmNlLWNvZGUiLDUpLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDQpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIixyKSx4KDMpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJiZudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpfX0sZGVwZW5kZW5jaWVzOltYZSxqdGVdLHN0eWxlczpbJy5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI0cHg7cGFkZGluZy1ib3R0b206NnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtvdmVyZmxvdy15OmF1dG87cGFkZGluZzowIDIwcHh9Lm5vLWZpbGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiM2NjY7cGFkZGluZzowIDIwcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zb3VyY2UtZmlsZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxMDAlfS50aXRsZS10YWdbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjEwMCU7cGFkZGluZy1sZWZ0OjZweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9c291cmNlLWNvZGVbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3dpZHRoOjEwMCV9J119KSxufSkoKSxXdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkPXRoaXMuc3RvcmUuc2VsZWN0KGpJKSx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQ9dGhpcy5zdG9yZS5zZWxlY3QoR0kpLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLCJmb2N1c2VkU291cmNlTGluZVNwZWMiLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwic291cmNlLWZpbGVzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IixXKDEsMyxpLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQpKSgiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIixXKDIsNSxpLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQpKSgidXNlRGFya01vZGUiLFcoMyw3LGkudXNlRGFya01vZGUkKSl9LGRlcGVuZGVuY2llczpbR3RlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxST2U9WyJzdGFja0ZyYW1lQXJyYXkiXTtmdW5jdGlvbiBPT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEzKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAjIixlLmV4ZWN1dGlvbkluZGV4LCI6ICIpfX1mdW5jdGlvbiBrT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE0KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIEZPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRCgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLEUoMixPT2UsMiwxLCJzcGFuIiwxMSksRSgzLGtPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wVHlwZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBOT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE2KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoJyAiJyxlLm9wTmFtZSwnIiAnKX19ZnVuY3Rpb24gTE9lKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwxNCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgzKTt4KDEpLHFlKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBCT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLEUoMixOT2UsMiwxLCJzcGFuIiwxNSksRSgzLExPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wTmFtZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBWT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkscWUoIiAoSG9zdCBuYW1lOiAiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5WzBdLmhvc3RfbmFtZSwiKSAiKX19ZnVuY3Rpb24gSE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iKSgyLCJzcGFuIiw4KSxFKDMsRk9lLDQsMiwiZGl2Iiw5KSxFKDQsQk9lLDQsMiwiZGl2Iiw5KSx2KCkoKSxnKDUsImRpdiIpLEUoNixWT2UsMiwxLCJzcGFuIiwxMCksdigpKCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdTd2l0Y2giLGUuY29kZUxvY2F0aW9uVHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuR1JBUEhfT1BfQ1JFQVRJT04pLHgoMiksYigibmdJZiIsbnVsbCE9PWUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZlLnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFVPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxOCksRCgxLCIgQ2xpY2sgYW4gZWFnZXIgZXhlY3V0aW9uIG9yIGdyYXBoIG9wIHRvIHNob3cgaXRzIG9yaWdpbmFsIHN0YWNrIHRyYWNlLiAiKSx2KCkpfWZ1bmN0aW9uIHpPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwyOCksRCgxLCIgXHUyOTEzICIpLHYoKSl9dmFyIGpPZT1mdW5jdGlvbihuLHQpe3JldHVybltuLHRdfTtmdW5jdGlvbiBHT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIyKSgxLCJkaXYiLDIzKSxEKDIpLHYoKSxnKDMsImRpdiIsMjQpLEUoNCx6T2UsMiwwLCJkaXYiLDI1KSxnKDUsImRpdiIsMjYpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5vblNvdXJjZUxpbmVDbGlja2VkLmVtaXQobykpfSksRCg2KSx2KCksZyg3LCJkaXYiLDI3KSxEKDgpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixqT2UsZS5iZWxvbmdzVG9Gb2N1c2VkRmlsZT8iZm9jdXNlZC1maWxlIjoiIixlLmZvY3VzZWQ/ImZvY3VzZWQtc3RhY2stZnJhbWUiOiIiKSkseCgxKSx4cigidGl0bGUiLGUuZmlsZV9wYXRoKSx4KDEpLHFlKCIgIixlLmNvbmNpc2VfZmlsZV9wYXRoLCIgIikseCgyKSxiKCJuZ0lmIixpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJiZlLmZvY3VzZWQpLHgoMikscWUoIiBMaW5lICIsZS5saW5lbm8sIiAiKSx4KDIpLHFlKCIgIixlLmZ1bmN0aW9uX25hbWUsIiAiKX19ZnVuY3Rpb24gV09lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5LDIwKSxFKDIsR09lLDksOSwiZGl2IiwyMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDIpLGIoIm5nRm9yT2YiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KX19ZnVuY3Rpb24gcU9lKG4sdCl7fXZhciBxdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5PW51bGwsdGhpcy5vblNvdXJjZUxpbmVDbGlja2VkPW5ldyBHLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT10c31uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47bGV0IGU9dGhpcy5zdGFja0ZyYW1lQXJyYXkubmF0aXZlRWxlbWVudCxpPWUucXVlcnlTZWxlY3RvcigiLmZvY3VzZWQtc3RhY2stZnJhbWUiKTtpZihudWxsIT09aSlyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChlLGkpO2xldCByPWUucXVlcnlTZWxlY3RvcigiLnN0YWNrLWZyYW1lLWNvbnRhaW5lcjpsYXN0LWNoaWxkIik7bnVsbCE9PXImJnRoaXMuc2Nyb2xsVG9FbGVtZW50KGUscil9c2Nyb2xsVG9FbGVtZW50KGUsaSl7ZS5zY3JvbGxUb3A9aS5vZmZzZXRUb3B9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInN0YWNrLXRyYWNlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KFJPZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YWNrRnJhbWVBcnJheT1yLmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxEKDMsIiBTdGFjayBUcmFjZSAiKSx2KCksRSg0LEhPZSw3LDQsImRpdiIsMyksRSg1LFVPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsV09lLDMsMSwiZGl2Iiw1KSxFKDgscU9lLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKSwyJmUpe2xldCByPXN0KDYpLG89c3QoOSk7eCg0KSxiKCJuZ0lmIixudWxsIT09aS5jb2RlTG9jYXRpb25UeXBlKSgibmdJZkVsc2UiLHIpLHgoMyksYigibmdJZiIsbnVsbCE9PWkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KSgibmdJZkVsc2UiLG8pfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxocixJcl0sc3R5bGVzOlsnLmZvY3VzZWQtZmlsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uZm9jdXNlZC1zdGFjay1mcmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTEsMCwuMyl9Lm5vLXN0YWNrLXRyYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YW55d2hlcmV9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc3RhY2stZnJhbWUtYXJyYXlbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpfS5zdGFjay1mcmFtZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNhMGEwYTB9LnN0YWNrLWZyYW1lLWZpbGUtcGF0aFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjE4MHB4O3dpZHRoOjE4MHB4fS5zdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGFjay1mcmFtZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmctbGVmdDoxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6MjAwcHg7d29yZC13cmFwOmFueXdoZXJlfS5zdGFjay1mcmFtZS1saW5lbm9bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDo4MHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3dpZHRoOjgwcHh9LnN0YWNrLXRyYWNlLWF1eC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE1cHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDttYXgtaGVpZ2h0OjM2MHB4O292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuO3BhZGRpbmctbGVmdDo4cHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnN0YWNrLXRyYWNlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjNweH0uc3RhY2stdHJhY2UtaG9zdC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5zdGFjay10cmFjZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uc3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEycHg7cGFkZGluZy1yaWdodDozcHh9J119KSxufSkoKSxZdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jb2RlTG9jYXRpb25UeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oWShndyxpPT5udWxsPT09aT9udWxsOmkuY29kZUxvY2F0aW9uVHlwZSkpKSx0aGlzLm9wVHlwZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWk/bnVsbDppLm9wVHlwZSkpKSx0aGlzLm9wTmFtZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkdSQVBIX09QX0NSRUFUSU9OP251bGw6aS5vcE5hbWUpKSksdGhpcy5leGVjdXRpb25JbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkVYRUNVVElPTj9udWxsOmkuZXhlY3V0aW9uSW5kZXgpKSksdGhpcy5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFN0ZSkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh3dGUsR0ksKGkscik9PntpZihudWxsPT09aSlyZXR1cm4gbnVsbDtsZXQgbz1bXTtmb3IobGV0IHMgb2YgaSl7bGV0e2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6dX09cyxkPWwuc3BsaXQoIi8iKSxoPW51bGwhPT1yJiZhPT09ci5ob3N0X25hbWUmJmw9PT1yLmZpbGVfcGF0aDtvLnB1c2goe2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGNvbmNpc2VfZmlsZV9wYXRoOmRbZC5sZW5ndGgtMV0sbGluZW5vOmMsZnVuY3Rpb25fbmFtZTp1LGJlbG9uZ3NUb0ZvY3VzZWRGaWxlOmgsZm9jdXNlZDpoJiZjPT09ci5saW5lbm99KX1yZXR1cm4gb30pKSl9b25Tb3VyY2VMaW5lQ2xpY2tlZChlKXtsZXR7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTpzfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2gocnYoe3N0YWNrRnJhbWU6e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c319KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSJdXSxkZWNsczo3LHZhcnM6MTgsY29uc3RzOltbMywiY29kZUxvY2F0aW9uVHlwZSIsIm9wVHlwZSIsIm9wTmFtZSIsImV4ZWN1dGlvbkluZGV4Iiwic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLCJvblNvdXJjZUxpbmVDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzdGFjay10cmFjZS1jb21wb25lbnQiLDApLFAoIm9uU291cmNlTGluZUNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU291cmNlTGluZUNsaWNrZWQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY29kZUxvY2F0aW9uVHlwZSIsVygxLDYsaS5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFcoMiw4LGkub3BUeXBlJCkpKCJvcE5hbWUiLFcoMywxMCxpLm9wTmFtZSQpKSgiZXhlY3V0aW9uSW5kZXgiLFcoNCwxMixpLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsVyg1LDE0LGkuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkKSkoInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsVyg2LDE2LGkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JCkpfSxkZXBlbmRlbmNpZXM6W3F0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUU9lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBLT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLGcoMywiZGl2IiwxNCksTig0LCJkZWJ1Zy10ZW5zb3ItdmFsdWUiLDE1KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDMpO3goMikscWUoIk91dHB1dCBzbG90ICIsaSwiOiIpLHgoMiksYigiZGVidWdUZW5zb3JWYWx1ZSIsci5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMixRT2Usci50ZW5zb3JEZWJ1Z01vZGUsZSkpKX19ZnVuY3Rpb24gWk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEwKSxFKDEsS09lLDUsNSwiZGl2IiwxMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmRlYnVnVGVuc29yVmFsdWVzKX19ZnVuY3Rpb24gSk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSgxLCJkaXYiKSgyLCJkaXYiLDMpKDMsInNwYW4iLDQpLEQoNCwiIE9wOiAiKSx2KCksZyg1LCJzcGFuIiw1KSxEKDYpLHYoKSgpLGcoNywiZGl2IiwzKSg4LCJzcGFuIiw0KSxEKDksIiAjIG9mIGlucHV0IHRlbnNvcnM6ICIpLHYoKSxnKDEwLCJzcGFuIiw2KSxEKDExKSx2KCkoKSxnKDEyLCJkaXYiLDMpKDEzLCJzcGFuIiw0KSxEKDE0LCIgIyBvZiBvdXRwdXQgdGVuc29yczogIiksdigpLGcoMTUsInNwYW4iLDcpLEQoMTYpLHYoKSxnKDE3LCJzcGFuIiw4KSxEKDE4KSx2KCkoKSxFKDE5LFpPZSwyLDEsImRpdiIsOSksdigpKCkpLDImbil7bGV0IGU9TSgpO3goNikscWUoIiAiLGUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3BfdHlwZSwiICIpLHgoNSkscWUoIiAiLG51bGw9PWUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDUpLHFlKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLm91dHB1dF90ZW5zb3JfaWRzPzA6ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDIpLHFlKCIgKGRlYnVnIG1vZGU6ICIsZS5UZW5zb3JEZWJ1Z01vZGVbZS50ZW5zb3JEZWJ1Z01vZGVdLCIpICIpLHgoMSksYigibmdJZiIsZS5oYXNEZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uICRPZShuLHQpe312YXIgWHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRlbnNvckRlYnVnTW9kZT16by5VTlNQRUNJRklFRCx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzPSExLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXM9bnVsbCx0aGlzLmRlYnVnVGVuc29yRHR5cGVzPW51bGwsdGhpcy5UZW5zb3JEZWJ1Z01vZGU9em8sdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9V0l9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiKSgyLCJzcGFuIiksRCgzKSx2KCkoKSxFKDQsSk9lLDIwLDUsImRpdiIsMSksRSg1LCRPZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDMpLHFlKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLHFJXSxzdHlsZXM6WycuZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSxufSkoKSxRdGU9IlVua25vd24gZHR5cGUiLEt0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oZ20pKSx0aGlzLnRlbnNvckRlYnVnTW9kZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/em8uVU5TUEVDSUZJRUQ6aS50ZW5zb3JfZGVidWdfbW9kZSkpKSx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShnbSxpPT57aWYobnVsbD09PWl8fG51bGw9PT1pLmRlYnVnX3RlbnNvcl92YWx1ZXMpcmV0dXJuITE7Zm9yKGxldCByIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsIT09ciYmci5sZW5ndGg+MClyZXR1cm4hMDtyZXR1cm4hMX0pKSksdGhpcy5kZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/bnVsbDppLmRlYnVnX3RlbnNvcl92YWx1ZXMpKSksdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzfHxpLnRlbnNvcl9kZWJ1Z19tb2RlIT09em8uRlVMTF9IRUFMVEgmJmkudGVuc29yX2RlYnVnX21vZGUhPT16by5TSEFQRSlyZXR1cm4gbnVsbDtsZXQgcj1bXTtmb3IobGV0IG8gb2YgaS5kZWJ1Z190ZW5zb3JfdmFsdWVzKWlmKG51bGw9PT1vKXIucHVzaChRdGUpO2Vsc2V7bGV0IHM9U3RyaW5nKGkudGVuc29yX2RlYnVnX21vZGU9PT16by5GVUxMX0hFQUxUSD9vWzJdOm9bMV0pO3IucHVzaChfd1tzXXx8UXRlKX1yZXR1cm4gcn0pKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4In0sZGVjbHM6Nix2YXJzOjE2LGNvbnN0czpbWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EYXRhIiwidGVuc29yRGVidWdNb2RlIiwiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yRHR5cGVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCkoImZvY3VzZWRFeGVjdXRpb25EYXRhIixXKDEsNixpLmZvY3VzZWRFeGVjdXRpb25EYXRhJCkpKCJ0ZW5zb3JEZWJ1Z01vZGUiLFcoMiw4LGkudGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsVygzLDEwLGkuaGFzRGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yVmFsdWVzIixXKDQsMTIsaS5kZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JEdHlwZXMiLFcoNSwxNCxpLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkZXBlbmRlbmNpZXM6W1h0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkscmtlPVsic2xpZGVyV3JhcHBlciJdLFBsPU5zKHtwYXNzaXZlOiExfSksY2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5UZCksbXVsdGk6ITB9LHVrZT1xcChwcyhnbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksImFjY2VudCIpKSxUZD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdWtle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWMsdGhpcy5faW52ZXJ0PSExLHRoaXMuX21heD0xMDAsdGhpcy5fbWluPTAsdGhpcy5fc3RlcD0xLHRoaXMuX3RodW1iTGFiZWw9ITEsdGhpcy5fdGlja0ludGVydmFsPTAsdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmlucHV0PW5ldyBHLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3BlcmNlbnQ9MCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9wb2ludGVyRG93bj11PT57dGhpcy5kaXNhYmxlZHx8dGhpcy5faXNTbGlkaW5nfHwhdncodSkmJjAhPT11LmJ1dHRvbnx8dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX3RvdWNoSWQ9dncodSk/ZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4udG91Y2hlcy5sZW5ndGg7ZSsrKXtsZXQgaT1uLnRvdWNoZXNbZV0udGFyZ2V0O2lmKHQ9PT1pfHx0LmNvbnRhaW5zKGkpKXJldHVybiBuLnRvdWNoZXNbZV0uaWRlbnRpZmllcn19KHUsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTp2b2lkIDA7bGV0IGQ9SnRlKHUsdGhpcy5fdG91Y2hJZCk7aWYoZCl7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9pc1NsaWRpbmc9InBvaW50ZXIiLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fb25Nb3VzZWVudGVyKCksdGhpcy5fYmluZEdsb2JhbEV2ZW50cyh1KSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9cCx1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX0pfSx0aGlzLl9wb2ludGVyTW92ZT11PT57aWYoInBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nKXtsZXQgZD1KdGUodSx0aGlzLl90b3VjaElkKTtpZihkKXt1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKTtsZXQgcD10aGlzLnZhbHVlO3RoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihkKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX19LHRoaXMuX3BvaW50ZXJVcD11PT57InBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nJiYoIXZ3KHUpfHwibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3RvdWNoSWR8fFc1KHUuY2hhbmdlZFRvdWNoZXMsdGhpcy5fdG91Y2hJZCkpJiYodS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5fdG91Y2hJZD12b2lkIDAsdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQhPXRoaXMudmFsdWUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpfSx0aGlzLl93aW5kb3dCbHVyPSgpPT57dGhpcy5fbGFzdFBvaW50ZXJFdmVudCYmdGhpcy5fcG9pbnRlclVwKHRoaXMuX2xhc3RQb2ludGVyRXZlbnQpfSx0aGlzLl9kb2N1bWVudD1sLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocyl8fDAsYS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCB1PWUubmF0aXZlRWxlbWVudDt1LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpfSl9Z2V0IGludmVydCgpe3JldHVybiB0aGlzLl9pbnZlcnR9c2V0IGludmVydChlKXt0aGlzLl9pbnZlcnQ9V3QoZSl9Z2V0IG1heCgpe3JldHVybiB0aGlzLl9tYXh9c2V0IG1heChlKXt0aGlzLl9tYXg9UGkoZSx0aGlzLl9tYXgpLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IG1pbigpe3JldHVybiB0aGlzLl9taW59c2V0IG1pbihlKXt0aGlzLl9taW49UGkoZSx0aGlzLl9taW4pLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcH1zZXQgc3RlcChlKXt0aGlzLl9zdGVwPVBpKGUsdGhpcy5fc3RlcCksdGhpcy5fc3RlcCUxIT0wJiYodGhpcy5fcm91bmRUb0RlY2ltYWw9dGhpcy5fc3RlcC50b1N0cmluZygpLnNwbGl0KCIuIikucG9wKCkubGVuZ3RoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgdGh1bWJMYWJlbCgpe3JldHVybiB0aGlzLl90aHVtYkxhYmVsfXNldCB0aHVtYkxhYmVsKGUpe3RoaXMuX3RodW1iTGFiZWw9V3QoZSl9Z2V0IHRpY2tJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90aWNrSW50ZXJ2YWx9c2V0IHRpY2tJbnRlcnZhbChlKXt0aGlzLl90aWNrSW50ZXJ2YWw9ImF1dG8iPT09ZT8iYXV0byI6Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGU/UGkoZSx0aGlzLl90aWNrSW50ZXJ2YWwpOjB9Z2V0IHZhbHVlKCl7cmV0dXJuIG51bGw9PT10aGlzLl92YWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5fbWluKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7aWYoZSE9PXRoaXMuX3ZhbHVlKXtsZXQgaT1QaShlLDApO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZpIT09dGhpcy5taW4mJmkhPT10aGlzLm1heCYmKGk9cGFyc2VGbG9hdChpLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9aSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKGUpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoZSl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtsZXQgaT10aGlzLnZlcnRpY2FsP2AxLCAkezEtdGhpcy5wZXJjZW50fSwgMWA6MS10aGlzLnBlcmNlbnQrIiwgMSwgMSI7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iLSI6IiJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7aX0pYH19X2dldFRyYWNrRmlsbFN0eWxlcygpe2xldCBlPXRoaXMucGVyY2VudCxyPXRoaXMudmVydGljYWw/YDEsICR7ZX0sIDFgOmAke2V9LCAxLCAxYDtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyIiOiItIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtyfSlgLGRpc3BsYXk6MD09PWU/Im5vbmUiOiIifX1fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKXtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/Ii0iOiIifSR7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudC8yKjEwMH0lKWB9fV9nZXRUaWNrc1N0eWxlcygpe2xldCBlPTEwMCp0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LGE9e2JhY2tncm91bmRTaXplOnRoaXMudmVydGljYWw/YDJweCAke2V9JWA6YCR7ZX0lIDJweGAsdHJhbnNmb3JtOmB0cmFuc2xhdGVaKDApIHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiLSJ9JHtlLzJ9JSkke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiIHJvdGF0ZSgxODBkZWcpIn1gfTtpZih0aGlzLl9pc01pblZhbHVlKCkmJnRoaXMuX2dldFRodW1iR2FwKCkpe2xldCBjLGw9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO2M9dGhpcy52ZXJ0aWNhbD9sPyJCb3R0b20iOiJUb3AiOmw/IlJpZ2h0IjoiTGVmdCIsYVtgcGFkZGluZyR7Y31gXT1gJHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4YH1yZXR1cm4gYX1fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKXtsZXQgZT10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlKT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybiJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlfV9nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57dGhpcy5faXNBY3RpdmU9ISFlJiYia2V5Ym9hcmQiIT09ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9kaXImJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5fZGlyLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9bnVsbCx0aGlzLl9yZW1vdmVHbG9iYWxFdmVudHMoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X29uTW91c2VlbnRlcigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCkpfV9vbkZvY3VzKCl7dGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpfV9vbkJsdXIoKXt0aGlzLm9uVG91Y2hlZCgpfV9vbktleWRvd24oZSl7aWYodGhpcy5kaXNhYmxlZHx8TXIoZSl8fHRoaXMuX2lzU2xpZGluZyYmImtleWJvYXJkIiE9PXRoaXMuX2lzU2xpZGluZylyZXR1cm47bGV0IGk9dGhpcy52YWx1ZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDMzOnRoaXMuX2luY3JlbWVudCgxMCk7YnJlYWs7Y2FzZSAzNDp0aGlzLl9pbmNyZW1lbnQoLTEwKTticmVhaztjYXNlIDM1OnRoaXMudmFsdWU9dGhpcy5tYXg7YnJlYWs7Y2FzZSAzNjp0aGlzLnZhbHVlPXRoaXMubWluO2JyZWFrO2Nhc2UgMzc6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8xOi0xKTticmVhaztjYXNlIDM4OnRoaXMuX2luY3JlbWVudCgxKTticmVhaztjYXNlIDM5OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/LTE6MSk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9pbmNyZW1lbnQoLTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWkhPXRoaXMudmFsdWUmJih0aGlzLl9lbWl0SW5wdXRFdmVudCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKSx0aGlzLl9pc1NsaWRpbmc9ImtleWJvYXJkIixlLnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXsia2V5Ym9hcmQiPT09dGhpcy5faXNTbGlkaW5nJiYodGhpcy5faXNTbGlkaW5nPW51bGwpfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fYmluZEdsb2JhbEV2ZW50cyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudCxyPXZ3KGUpLHM9cj8idG91Y2hlbmQiOiJtb3VzZXVwIjtpLmFkZEV2ZW50TGlzdGVuZXIocj8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxQbCksaS5hZGRFdmVudExpc3RlbmVyKHMsdGhpcy5fcG9pbnRlclVwLFBsKSxyJiZpLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsUGwpO2xldCBhPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBhPCJ1IiYmYSYmYS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1fcmVtb3ZlR2xvYmFsRXZlbnRzKCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCxQbCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAsUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxQbCk7bGV0IGk9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGk8InUiJiZpJiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQoZSl7bGV0IGk9dGhpcy5fY2xhbXAodGhpcy52YWx1ZXx8MCx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy52YWx1ZT10aGlzLl9jbGFtcChpK3RoaXMuc3RlcCplLHRoaXMubWluLHRoaXMubWF4KX1fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZSl7aWYoIXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBzPXRoaXMuX2NsYW1wKCgodGhpcy52ZXJ0aWNhbD9lLnk6ZS54KS0odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLnRvcDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLmxlZnQpKS8odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoKSk7aWYodGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSYmKHM9MS1zKSwwPT09cyl0aGlzLnZhbHVlPXRoaXMubWluO2Vsc2UgaWYoMT09PXMpdGhpcy52YWx1ZT10aGlzLm1heDtlbHNle2xldCBhPXRoaXMuX2NhbGN1bGF0ZVZhbHVlKHMpLGw9TWF0aC5yb3VuZCgoYS10aGlzLm1pbikvdGhpcy5zdGVwKSp0aGlzLnN0ZXArdGhpcy5taW47dGhpcy52YWx1ZT10aGlzLl9jbGFtcChsLHRoaXMubWluLHRoaXMubWF4KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy52YWx1ZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X2VtaXRJbnB1dEV2ZW50KCl7dGhpcy5pbnB1dC5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl7aWYoIXRoaXMudGlja0ludGVydmFsfHwhdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU7aWYoImF1dG8iPT10aGlzLnRpY2tJbnRlcnZhbCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoO2U9TWF0aC5jZWlsKDMwLyhpKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pKSkqdGhpcy5zdGVwL2l9ZWxzZSBlPXRoaXMudGlja0ludGVydmFsKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9WnRlKGUpP2U6MH1fY3JlYXRlQ2hhbmdlRXZlbnQoZT10aGlzLnZhbHVlKXtsZXQgaT1uZXcgY2xhc3N7fTtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLnZhbHVlPWUsaX1fY2FsY3VsYXRlUGVyY2VudGFnZShlKXtsZXQgaT0oKGV8fDApLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pO3JldHVybiBadGUoaSk/aTowfV9jYWxjdWxhdGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5taW4rZSoodGhpcy5tYXgtdGhpcy5taW4pfV9jbGFtcChlLGk9MCxyPTEpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKGUscikpfV9nZXRTbGlkZXJEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX3NsaWRlcldyYXBwZXI/dGhpcy5fc2xpZGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGx9X2ZvY3VzSG9zdEVsZW1lbnQoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9ibHVySG9zdEVsZW1lbnQoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoenIpLHcobm4pLHcoaXIsOCksS28oInRhYmluZGV4IiksdyhwdCksdyhCdCksdyhMaSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNsaWRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJrZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9zbGlkZXJXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInNsaWRlciIsMSwibWF0LXNsaWRlciIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoyOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uS2V5ZG93bihvKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25LZXl1cCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTW91c2VlbnRlcigpfSkoInNlbGVjdHN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksMiZlJiYoQWEoInRhYkluZGV4IixpLnRhYkluZGV4KSx6ZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImFyaWEtdmFsdWVtYXgiLGkubWF4KSgiYXJpYS12YWx1ZW1pbiIsaS5taW4pKCJhcmlhLXZhbHVlbm93IixpLnZhbHVlKSgiYXJpYS12YWx1ZXRleHQiLG51bGw9PWkudmFsdWVUZXh0P2kuZGlzcGxheVZhbHVlOmkudmFsdWVUZXh0KSgiYXJpYS1vcmllbnRhdGlvbiIsaS52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIiksYXQoIm1hdC1zbGlkZXItZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtc2xpZGVyLWhhcy10aWNrcyIsaS50aWNrSW50ZXJ2YWwpKCJtYXQtc2xpZGVyLWhvcml6b250YWwiLCFpLnZlcnRpY2FsKSgibWF0LXNsaWRlci1heGlzLWludmVydGVkIixpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJtYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHMiLGkuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkpKCJtYXQtc2xpZGVyLXNsaWRpbmciLGkuX2lzU2xpZGluZykoIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyIsaS50aHVtYkxhYmVsKSgibWF0LXNsaWRlci12ZXJ0aWNhbCIsaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItbWluLXZhbHVlIixpLl9pc01pblZhbHVlKCkpKCJtYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrIixpLmRpc2FibGVkfHxpLl9pc01pblZhbHVlKCkmJmkuX2dldFRodW1iR2FwKCkmJmkuX3Nob3VsZEludmVydEF4aXMoKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLGludmVydDoiaW52ZXJ0IixtYXg6Im1heCIsbWluOiJtaW4iLHN0ZXA6InN0ZXAiLHRodW1iTGFiZWw6InRodW1iTGFiZWwiLHRpY2tJbnRlcnZhbDoidGlja0ludGVydmFsIix2YWx1ZToidmFsdWUiLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsdmFsdWVUZXh0OiJ2YWx1ZVRleHQiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIixpbnB1dDoiaW5wdXQiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U2xpZGVyIl0sZmVhdHVyZXM6WyR0KFtja2VdKSx0dF0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsIm1hdC1zbGlkZXItd3JhcHBlciJdLFsic2xpZGVyV3JhcHBlciIsIiJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXIiXSxbMSwibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stZmlsbCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItZm9jdXMtcmluZyJdLFsxLCJtYXQtc2xpZGVyLXRodW1iIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwiXSxbMSwibWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSkoMiwiZGl2IiwyKSxOKDMsImRpdiIsMykoNCwiZGl2Iiw0KSx2KCksZyg1LCJkaXYiLDUpLE4oNiwiZGl2Iiw2KSx2KCksZyg3LCJkaXYiLDcpLE4oOCwiZGl2Iiw4KSg5LCJkaXYiLDkpLGcoMTAsImRpdiIsMTApKDExLCJzcGFuIiwxMSksRCgxMiksdigpKCkoKSgpKSwyJmUmJih4KDMpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrQmFja2dyb3VuZFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrRmlsbFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCkpLHgoMSksYigibmdTdHlsZSIsaS5fZ2V0VGlja3NTdHlsZXMoKSkseCgxKSxiKCJuZ1N0eWxlIixpLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSx4KDUpLHl0KGkuZGlzcGxheVZhbHVlKSl9LGRlcGVuZGVuY2llczpbd3BdLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVyey13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3std2Via2l0LWJhY2tncm91bmQtY2xpcDpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOmdyYWJ9Lm1hdC1zbGlkZXItdGh1bWJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7Ym90dG9tOi0xMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlcjozcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gWnRlKG4pe3JldHVybiFpc05hTihuKSYmaXNGaW5pdGUobil9ZnVuY3Rpb24gdncobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIEp0ZShuLHQpe2xldCBlO3JldHVybiBlPXZ3KG4pPyJudW1iZXIiPT10eXBlb2YgdD9XNShuLnRvdWNoZXMsdCl8fFc1KG4uY2hhbmdlZFRvdWNoZXMsdCk6bi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzWzBdOm4sZT97eDplLmNsaWVudFgseTplLmNsaWVudFl9OnZvaWQgMH1mdW5jdGlvbiBXNShuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0uaWRlbnRpZmllcj09PXQpcmV0dXJuIG5bZV19dmFyIGloPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkbixkbl19KSxufSkoKTtmdW5jdGlvbiBwa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtc2xpZGVyIiwxMSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVyQ2hhbmdlLmVtaXQoci52YWx1ZSkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJtaW4iLDApKCJtYXgiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQpKCJ2YWx1ZSIsZS5zY3JvbGxCZWdpbkluZGV4KX19ZnVuY3Rpb24gaGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSgxLCJidXR0b24iLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25OYXZpZ2F0ZUxlZnQuZW1pdCgpKX0pLEQoMiwiIDwgIiksdigpLGcoMywiZGl2Iiw4KSxEKDQpLHYoKSxnKDUsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk5hdmlnYXRlUmlnaHQuZW1pdCgpKX0pLEQoNiwiID4gIiksdigpLEUoNyxwa2UsMSwzLCJtYXQtc2xpZGVyIiwxMCksdigpfWlmKDImbil7bGV0IGU9TSgpO3goNCksV0UoIiAiLGUuc2Nyb2xsQmVnaW5JbmRleCwiIH4gIixlLnNjcm9sbEJlZ2luSW5kZXgrZS5kaXNwbGF5Q291bnQtMSwiIG9mICIsZS5udW1FeGVjdXRpb25zLCIgIikseCgzKSxiKCJuZ0lmIixlLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PjApfX12YXIgZmtlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm5bbix0LGVdfTtmdW5jdGlvbiBta2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChvKSl9KSxnKDEsImRpdiIsMTUpLEQoMiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDIpO3goMSkseHIoInRpdGxlIixlLm9wX3R5cGUpLGIoIm5nQ2xhc3MiLGtiKDMsZmtlLGUuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixpPT09ci5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixyLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tpXXx8IiIpKSx4KDEpLHFlKCIgIixlLnNob3J0X29wX3R5cGUsIiAiKX19ZnVuY3Rpb24gZ2tlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEyKSxFKDEsbWtlLDMsNywiZGl2IiwxMyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nRm9yT2YiLGUuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMpfX1mdW5jdGlvbiBfa2Uobix0KXtpZigxJm4mJihLdCgwKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIiwxNiksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGUuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19dmFyICR0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmVSdW5JZD1udWxsLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnM9ITEsdGhpcy5udW1FeGVjdXRpb25zPTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4PTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD0wLHRoaXMucGFnZVNpemU9MCx0aGlzLmRpc3BsYXlDb3VudD0wLHRoaXMuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM9W10sdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM9W10sdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhPW51bGwsdGhpcy5vbk5hdmlnYXRlTGVmdD1uZXcgRyx0aGlzLm9uTmF2aWdhdGVSaWdodD1uZXcgRyx0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZD1uZXcgRyx0aGlzLm9uU2xpZGVyQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0aW1lbGluZS1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVSdW5JZDoiYWN0aXZlUnVuSWQiLGxvYWRpbmdOdW1FeGVjdXRpb25zOiJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsbnVtRXhlY3V0aW9uczoibnVtRXhlY3V0aW9ucyIsc2Nyb2xsQmVnaW5JbmRleDoic2Nyb2xsQmVnaW5JbmRleCIsc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ6InNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixwYWdlU2l6ZToicGFnZVNpemUiLGRpc3BsYXlDb3VudDoiZGlzcGxheUNvdW50IixkaXNwbGF5RXhlY3V0aW9uRGlnZXN0czoiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLGRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlczoiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIn0sb3V0cHV0czp7b25OYXZpZ2F0ZUxlZnQ6Im9uTmF2aWdhdGVMZWZ0Iixvbk5hdmlnYXRlUmlnaHQ6Im9uTmF2aWdhdGVSaWdodCIsb25FeGVjdXRpb25EaWdlc3RDbGlja2VkOiJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLG9uU2xpZGVyQ2hhbmdlOiJvblNsaWRlckNoYW5nZSJ9LGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzEsInRpbWVsaW5lLXRpdGxlIl0sWzEsImV4ZWN1dGlvbi1jb3VudCJdLFsxLCJ0b3AtbGV2ZWwtZXhlY3V0aW9ucyJdLFsiY2xhc3MiLCJuYXZpZ2F0aW9uLXNlY3Rpb24iLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhlY3V0aW9uLXRpbWVsaW5lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibmF2aWdhdGlvbi1zZWN0aW9uIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1sZWZ0IiwzLCJjbGljayJdLFsxLCJuYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm8iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLXJpZ2h0IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ0aW1lbGluZS1zbGlkZXIiLCJzdGVwIiwiMSIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiJdLFsic3RlcCIsIjEiLDEsInRpbWVsaW5lLXNsaWRlciIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCJdLFsxLCJleGVjdXRpb24tdGltZWxpbmUiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJleGVjdXRpb24tZGlnZXN0IiwzLCJuZ0NsYXNzIiwidGl0bGUiXSxbMywiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSgxLCJkaXYiLDApLEQoMiwiIFB5dGhvbiBFeGVjdXRpb24gVGltZWxpbmUgIiksZygzLCJzcGFuIiwxKSxEKDQpLHYoKSgpLGcoNSwiZGl2IiwyKSxFKDYsaGtlLDgsNCwiZGl2IiwzKSxFKDcsZ2tlLDIsMSwiZGl2Iiw0KSxFKDgsX2tlLDIsMSwibmctY29udGFpbmVyIiw1KSx2KCkoKSksMiZlJiYoeCg0KSxxZSgiICgiLGkubnVtRXhlY3V0aW9ucywiKSAiKSx4KDIpLGIoIm5nSWYiLGkubnVtRXhlY3V0aW9ucykseCgxKSxiKCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuYWN0aXZlUnVuSWQmJm51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25JbmRleCkpfSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLEt0ZSwkbixUZF0sc3R5bGVzOlsiLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgY29sb3I6ICM0MjUwNjY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMHB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZnVuYy1ncmFwaC1leGVjdXRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZGJmNTtcbiAgY29sb3I6ICM0ZTU2NjQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ0YjM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5JbmZOYW5BbGVydFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuXG4uZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV06aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnRpbWVsaW5lLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogNDhweDtcbiAgbGVmdDogMzQwcHg7IFxuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA0MHB4O1xufVxuXG4gIC50aW1lbGluZS1zbGlkZXIgLm1hdC1zbGlkZXItdGh1bWIge1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHJpZ2h0OiAtNDBweDtcbiAgd2lkdGg6IDgwcHg7XG59XG5cblxuLm5hdmlnYXRpb24tcG9zaXRpb24taW5mb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm5hdmlnYXRpb24tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseWtlPVsiX19mb3J3YXJkXyIsIl9fYmFja3dhcmRfIiwiX19pbmZlcmVuY2VfIl0sZW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZShmbihtcykpLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihZKEhJLGk9Pmkuc3RhdGU9PUVlLkxPQURJTkcpKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oZncpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh0aCxsdiwoaSxyKT0+TWF0aC5tYXgoMCxpLXIpKSkpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShmbihhdikpLHRoaXMuZGlzcGxheUNvdW50JD10aGlzLnN0b3JlLnBpcGUoZm4obHYpKSx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShkdGUsaT0+aS5tYXAocj0+ZnVuY3Rpb24obix0PTEpe2lmKCFuKXJldHVybntvcF90eXBlOiIoTi9BKSIsc2hvcnRfb3BfdHlwZToiLi4iLGlzX2dyYXBoOiExfTtsZXQgZT15a2UuZmlsdGVyKGk9Pm4ub3BfdHlwZS5zdGFydHNXaXRoKGkpKTtpZihlLmxlbmd0aCl7bGV0IGk9bi5vcF90eXBlLnNsaWNlKGVbMF0ubGVuZ3RoKTtyZXR1cm57b3BfdHlwZTpuLm9wX3R5cGUsc2hvcnRfb3BfdHlwZTppLnNsaWNlKDAsdCksaXNfZ3JhcGg6ITB9fXJldHVybntvcF90eXBlOm4ub3BfdHlwZSxzaG9ydF9vcF90eXBlOm4ub3BfdHlwZS5zbGljZSgwLHQpLGlzX2dyYXBoOiExfX0ocikpKSkpLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJD10aGlzLnN0b3JlLnBpcGUoZm4oYnRlKSksdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShmbihMNSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKHh0ZSkpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKGZuKHRoKSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFpfKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSl8oKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZXYoe2Rpc3BsYXlJbmRleDplfSkpfW9uU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJF8oe2luZGV4OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLFAoIm9uTmF2aWdhdGVMZWZ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVMZWZ0KCl9KSgib25OYXZpZ2F0ZVJpZ2h0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVSaWdodCgpfSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKG8pfSkoIm9uU2xpZGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNsaWRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiYWN0aXZlUnVuSWQiLFcoMSwxMSxpLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsVygyLDEzLGkubG9hZGluZ051bUV4ZWN1dGlvbnMkKSkoIm51bUV4ZWN1dGlvbnMiLFcoMywxNSxpLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLFcoNCwxNyxpLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixXKDUsMTksaS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQpKSgicGFnZVNpemUiLFcoNiwyMSxpLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLFcoNywyMyxpLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFcoOCwyNSxpLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJCkpKCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLFcoOSwyNyxpLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixXKDEwLDI5LGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixXKDExLDMxLGkuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQpKX0sZGVwZW5kZW5jaWVzOlskdGUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIENrZShuLHQpezEmbiYmTigwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIpfWZ1bmN0aW9uIHdrZShuLHQpezEmbiYmKGcoMCwiZGl2IiwzKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyIpLGcoMiwiZGl2Iiw0KSxOKDMsInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIikoNCwidGYtZGVidWdnZXItdjItZ3JhcGgiKSx2KCksTig1LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIiksdigpLGcoNiwiZGl2Iiw1KSxOKDcsInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyIpKDgsInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIiksdigpKX12YXIgdG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJ1bnM9e30sdGhpcy5ydW5JZHM9W10sdGhpcy5hY3RpdmVSdW5JZD1udWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Z2dlci1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixydW5JZHM6InJ1bklkcyIsYWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIn0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZGVidWdnZXItY29udGFpbmVyIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZGF0YUF2YWlsYWJsZSIsIiJdLFsxLCJ0b3Atc2VjdGlvbiJdLFsxLCJ0b3AtY2VudGVyLXNlY3Rpb24iXSxbMSwiYm90dG9tLXNlY3Rpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCksRSgxLENrZSwxLDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIiwxKSxFKDIsd2tlLDksMCwibmctdGVtcGxhdGUiLG51bGwsMixlbiksdigpKSwyJmUpe2xldCByPXN0KDMpO3goMSksYigibmdJZiIsMD09PWkucnVuSWRzLmxlbmd0aCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRHRlLFhlLFB0ZSxrdGUsTnRlLFd0ZSxZdGUsZW5lXSxzdHlsZXM6WyIuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG5uZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJ1bnMkPXRoaXMuc3RvcmUucGlwZShmbihmbSkpLHRoaXMucnVuc0lkcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZm0saT0+T2JqZWN0LmtleXMoaSkpKSksdGhpcy5hY3RpdmVSdW5JZCQ9dGhpcy5zdG9yZS5waXBlKGZuKG1zKSl9bmdPbkluaXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF9JKCkpfW5nT25EZXN0cm95KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh2SSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bnMiLCJydW5JZHMiLCJhY3RpdmVSdW5JZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiZGVidWdnZXItY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSksMiZlJiZiKCJydW5zIixXKDEsMyxpLnJ1bnMkKSkoInJ1bklkcyIsVygyLDUsaS5ydW5zSWRzJCkpKCJhY3RpdmVSdW5JZCIsVygzLDcsaS5hY3RpdmVSdW5JZCQpKX0sZGVwZW5kZW5jaWVzOlt0bmUsZnRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdfSksbn0pKCksS0k9ImRlYnVnZ2VyLXYyIjtmdW5jdGlvbiBxNShuLHQsZSxpLHIpe2lmKGU8PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYWdlU2l6ZTogJHtlfWApO2lmKHQ+aSl0aHJvdyBuZXcgRXJyb3IoYGVuZCBpbmRleCAoJHt0fSkgZXhjZWVkcyB0b3RhbCBudW1iZXIgb2YgaXRlbXMgKCR7aX0pYCk7aWYodC1uPmUpdGhyb3cgbmV3IEVycm9yKCJiZWdpbi1lbmQgc3BhbiBleGNlZWRzIHBhZ2Ugc2l6ZSwgd2hpY2ggaXMgbm90IGFsbG93ZWQiKTtsZXQgbz1bXSxzPU1hdGguZmxvb3Iobi9lKTsoIShzIGluIHIpfHxyW3NdPGUmJnMqZStyW3NdPGkpJiZvLnB1c2gocyk7bGV0IGE9TWF0aC5mbG9vcigodC0xKS9lKTtyZXR1cm4gYSE9PXMmJighKGEgaW4gcil8fGEqZStyW2FdPHQmJnQ8aSkmJm8ucHVzaChhKSxvfXZhciBvbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmxvYWREYXRhJD1VcigoKT0+e2xldCBvPXRoaXMubG9hZERlYnVnZ2VyUnVucyh1bih0aGlzLm9uRGVidWdnZXJEYXRhUG9sbCgpLHRoaXMub25Db3JlUmVsb2FkKCkpKS5waXBlKFhzKCkpLHM9dGhpcy5sb2FkU291cmNlRmlsZUxpc3QobyksYT10aGlzLmNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihvKSxsPXRoaXMuY3JlYXRlTnVtQWxlcnRzQW5kQnJlYWtkb3duTG9hZGVyKG8pLGM9dGhpcy5vbkFsZXJ0VHlwZUZvY3VzZWQoKSx1PXRoaXMuZmV0Y2hFeGVjdXRpb25EaWdlc3RzRm9yQWxlcnRUeXBlRm9jdXMoYyksZD10aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihhKS5waXBlKFhzKCkpLHA9dGhpcy5jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIodW4odGhpcy5vbkV4ZWN1dGlvblNjcm9sbCgpLHRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRpZ2VzdChkKSx1KSksaD10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcih1bih0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpLGQucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QoQjUpKSxCKChbLHksSV0pPT4oe2FjdGl2ZVJ1bklkOnksbG9hZGVkRXhlY3V0aW9uRGF0YTpJLGZvY3VzSW5kZXg6MH0pKSkpKTtyZXR1cm4gdW4obCxwLGgsdGhpcy5jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihvKSxzLHRoaXMub25Tb3VyY2VGaWxlRm9jdXNlZCgpLHRoaXMubG9hZEdyYXBoRXhlY3V0aW9uUGFnZXModGhpcy5vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCkpLHRoaXMubG9hZEdyYXBoT3BTdGFja0ZyYW1lcyh0aGlzLmxvYWRHcmFwaE9wSW5mbygpKSkucGlwZShCKCgpPT4oe30pKSl9LHtkaXNwYXRjaDohMX0pfW9uRGVidWdnZXJEYXRhUG9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoX0kpLHZpKGU9PmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpLG8scj0hMSxzPSExLGE9ITEsbD0oKT0+YSYmcyYmKGUuY29tcGxldGUoKSwhMCksdT0oKT0+e2E9ITEsaT10LnN1YnNjcmliZShMdChlLHZvaWQgMCwoKT0+e2E9ITAsIWwoKSYmKG98fChvPW5ldyBUZSxuKG8pLnN1YnNjcmliZShMdChlLCgpPT57aT91KCk6cj0hMH0sKCk9PntzPSEwLGwoKX0pKSksbykubmV4dCgpfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLHI9ITEsdSgpKX07dSgpfSl9KGk9PmkucGlwZShHdCh0KSx2ZygoWyxyXSk9PnhhKHIpKSkpLG90KGUpLEIoKCk9Pnt9KSl9KGp0KGUpLHRoaXMuc3RvcmUuc2VsZWN0KHN0ZSkucGlwZShCKGk9PmZ1bmN0aW9uKG4pe3JldHVybiBuPjZlND82ZTQ6bj40ZTM/bjoyZTN9KGkpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKHZJKSkpKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChsdygpKSksQigoKT0+e30pKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gdW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKHdsLEhhKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKF91KSkucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLGVdKT0+ZS5zdGF0ZT09PUVlLk5PVF9MT0FERUR8fGUuc3RhdGU9PT1FZS5GQUlMRUQmJm51bGw9PT1lLmxhc3RMb2FkZWRUaW1lSW5NcykpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssZV0pPT5lPT09S0kpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGx3KCkpKSxCKCgpPT57fSkpfWxvYWREZWJ1Z2dlclJ1bnMoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLHtzdGF0ZTppfV0pPT5pIT09RWUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goeUkoKSkpLF9uKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShOdChpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChiSSh7cnVuczppfSkpfSksQigoKT0+e30pKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChISSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHdJKCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChNSSh7bnVtRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksQigoKT0+e30pKX0pKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChwdGUpKSxIZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChESSgpKSksX24oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChBSSh7bnVtR3JhcGhFeGVjdXRpb25zOmEubnVtX2RpZ2VzdHN9KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChQNSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKHIsMCwwKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhJKHtudW1BbGVydHM6YS5udW1fYWxlcnRzLGFsZXJ0c0JyZWFrZG93bjphLmFsZXJ0c19icmVha2Rvd259KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHRoKSx0aGlzLnN0b3JlLnNlbGVjdChodykpLEhlKChbLGkscl0pPT5pPjAmJjA9PT1PYmplY3Qua2V5cyhyLnBhZ2VMb2FkZWRTaXplcykubGVuZ3RoKSxCKCgpPT57fSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFssLGldKT0+bnVsbCE9PWkpLEIoKFssaSxyLG9dKT0+KHtiZWdpbjowLGVuZDpNYXRoLm1pbihpLG8pLHJ1bklkOnJ9KSkpfW9uRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaShaXyxKXywkXyksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGZ3KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobHYpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFtlXSk9Pm51bGwhPT1lKSxCKChbLGUsaSxyLG8sc10pPT4oe3J1bklkOmUsYmVnaW46aSxlbmQ6TWF0aC5taW4ocixpK28pLHBhZ2VTaXplOnN9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxCKChbZSxpXSk9Pih7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cTUoZS5iZWdpbixlLmVuZCxlLnBhZ2VTaXplLGkubnVtRXhlY3V0aW9ucyxpLnBhZ2VMb2FkZWRTaXplcyl9KSksSGUoKHttaXNzaW5nUGFnZXM6ZX0pPT5lLmxlbmd0aD4wKSxCKCh7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cn0pPT57bGV0e3J1bklkOm8scGFnZVNpemU6c309ZTtyZXR1cm57YmVnaW46clswXSpzLGVuZDpNYXRoLm1pbihpLm51bUV4ZWN1dGlvbnMsKHJbci5sZW5ndGgtMV0rMSkqcykscnVuSWQ6b319KSl9Y3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxIZSgoW3tiZWdpbjppLGVuZDpyfSxvXSk9PnI+aSYmIWZ1bmN0aW9uKG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybi0xIT09bi5maW5kSW5kZXgoaT0+aS5iZWdpbj49dCYmaS5lbmQ8PWUpfShvLmxvYWRpbmdSYW5nZXMsaSxyKSksTnQoKFt7YmVnaW46aSxlbmQ6cn1dKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goU0koe2JlZ2luOmksZW5kOnJ9KSl9KSxfbigoW3tydW5JZDppLGJlZ2luOnIsZW5kOm99XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoaSxyLG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRUkocykpfSksQigoKT0+e30pKSkpfW9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoZXYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChCNSksdGhpcy5zdG9yZS5zZWxlY3QoZncpKSxCKChbZSxpLHIsb10pPT4oe2FjdGl2ZVJ1bklkOmksbG9hZGVkRXhlY3V0aW9uRGF0YTpyLGZvY3VzSW5kZXg6bytlLmRpc3BsYXlJbmRleH0pKSl9Y3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoSGUoKHthY3RpdmVSdW5JZDppLGxvYWRlZEV4ZWN1dGlvbkRhdGE6cixmb2N1c0luZGV4Om99KT0+bnVsbCE9PWkmJm51bGwhPT1vJiZ2b2lkIDA9PT1yW29dKSxfbigoe2FjdGl2ZVJ1bklkOmksZm9jdXNJbmRleDpyfSk9PntsZXQgbz1yLHM9bysxO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EYXRhKGksbyxzKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRJKGEpKX0pLEIoYT0+KHtleGVjdXRpb25EYXRhOmEsYmVnaW46byxlbmQ6c30pKSl9KSxCKCh7ZXhlY3V0aW9uRGF0YTppfSk9PmkuZXhlY3V0aW9uc1swXSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksSGUoKFtpLHIsb10pPT57aWYobnVsbD09PXIpcmV0dXJuITE7Zm9yKGxldCBzIG9mIGkuc3RhY2tfZnJhbWVfaWRzKWlmKHZvaWQgMD09PW9bc10pcmV0dXJuITA7cmV0dXJuITF9KSxfbigoW2kscl0pPT57bGV0IG89aS5zdGFja19mcmFtZV9pZHM7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKHIsbykucGlwZShOdChzPT57bGV0IGE9e307Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDsrK2wpYVtvW2xdXT1zLnN0YWNrX2ZyYW1lc1tsXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczphfSkpfSksQigoKT0+e30pKX0pKX1vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaSh0diksQXIoMTAwKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QobXcpLHRoaXMuc3RvcmUuc2VsZWN0KGh0ZSkpLEhlKChbLGUsaV0pPT5udWxsIT09ZSYmaT4wKSxCKChbLGUsaSxyXSk9Pih7cnVuSWQ6ZSxudW1HcmFwaEV4ZWN1dGlvbnM6aSxzY3JvbGxCZWdpbkluZGV4OnJ9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXRlKSx0aGlzLnN0b3JlLnNlbGVjdChmdGUpLHRoaXMuc3RvcmUuc2VsZWN0KGd0ZSksdGhpcy5zdG9yZS5zZWxlY3QoX3RlKSksQigoW3tydW5JZDplLG51bUdyYXBoRXhlY3V0aW9uczppLHNjcm9sbEJlZ2luSW5kZXg6cn0sbyxzLGEsbF0pPT57bGV0IGM9cTUocixNYXRoLm1pbihyK3MsaSksbyxpLGwpO3JldHVybiBjPWMuZmlsdGVyKHU9Pi0xPT09YS5pbmRleE9mKHUpKSx7cnVuSWQ6ZSxtaXNzaW5nUGFnZXM6YyxwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczppfX0pKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyhlKXtyZXR1cm4gZS5waXBlKEhlKCh7bWlzc2luZ1BhZ2VzOml9KT0+aS5sZW5ndGg+MCksTnQoKHttaXNzaW5nUGFnZXM6aX0pPT57aS5mb3JFYWNoKHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKElJKHtwYWdlSW5kZXg6cn0pKX0pfSksX24oKHtydW5JZDppLG1pc3NpbmdQYWdlczpyLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOnN9KT0+e2xldCBhPXJbMF0qbyxsPU1hdGgubWluKChyW3IubGVuZ3RoLTFdKzEpKm8scyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShpLGEsbCkucGlwZShOdChjPT57dGhpcy5zdG9yZS5kaXNwYXRjaChQSShjKSl9KSxCKCgpPT57fSkpfSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoaXYsbnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChDdGUpKSxIZSgoW2UsaSxyXSk9PntsZXR7Z3JhcGhfaWQ6byxvcF9uYW1lOnN9PWU7cmV0dXJuIShudWxsPT09aXx8dm9pZCAwIT09cltvXSYmcltvXS5oYXMocykmJihyW29dLmdldChzKT09PUVlLkxPQURJTkd8fHJbb10uZ2V0KHMpPT09RWUuTE9BREVEKSl9KSxOdCgoW3tncmFwaF9pZDplLG9wX25hbWU6aX1dKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChSSSh7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9KSkpLF9uKChbZSxpXSk9PntsZXR7Z3JhcGhfaWQ6cixvcF9uYW1lOm99PWU7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoT3BJbmZvKGkscixvKS5waXBlKE50KHM9PnRoaXMuc3RvcmUuZGlzcGF0Y2goT0koe2dyYXBoT3BJbmZvUmVzcG9uc2U6c30pKSksQihzPT4oe3J1bklkOmksc3RhY2tGcmFtZUlkczpzLnN0YWNrX2ZyYW1lX2lkc30pKSl9KSl9bG9hZEdyYXBoT3BTdGFja0ZyYW1lcyhlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksQigoW3tydW5JZDppLHN0YWNrRnJhbWVJZHM6cn0sb10pPT4oe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6ci5maWx0ZXIoYT0+dm9pZCAwPT09b1thXSl9KSksSGUoKHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnJ9KT0+bnVsbCE9PWkmJnIubGVuZ3RoPjApLF9uKCh7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKGkscikucGlwZShOdChvPT57bGV0IHM9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDsrK2Epc1tyW2FdXT1vLnN0YWNrX2ZyYW1lc1thXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczpzfSkpfSksQigoKT0+e30pKSkpfW9uQWxlcnRUeXBlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoS18pLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChWSSksdGhpcy5zdG9yZS5zZWxlY3QobHRlKSx0aGlzLnN0b3JlLnNlbGVjdChjdGUpLHRoaXMuc3RvcmUuc2VsZWN0KFA1KSksSGUoKFssZSxpLHIsbyxzXSk9Pm51bGwhPT1lJiZudWxsIT09aSYmcj4wJiYobnVsbD09PW98fE9iamVjdC5rZXlzKG8pLmxlbmd0aDxyKSYmcy5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxlLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKGUsMCwtMSxpKSksTnQoKHtudW1fYWxlcnRzOmUsYWxlcnRzX2JyZWFrZG93bjppLGFsZXJ0X3R5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENJKHtudW1BbGVydHM6ZSxhbGVydHNCcmVha2Rvd246aSxhbGVydFR5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSkpfSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoYXYpLHRoaXMuc3RvcmUuc2VsZWN0KGx2KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QoaHcpLHRoaXMuc3RvcmUuc2VsZWN0KG1zKSksQigoW2kscixvLHMsYSxsXSk9PntsZXQgdT1pLmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgsZD1xNShNYXRoLm1heCgwLHUtTWF0aC5mbG9vcihvLzIpKSxNYXRoLm1pbih1K01hdGguZmxvb3Ioby8yKSxzKSxyLHMsYS5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09ZC5sZW5ndGg/e3J1bklkOmwsYmVnaW46MCxlbmQ6MH06e3J1bklkOmwsYmVnaW46ZFswXSpyLGVuZDpNYXRoLm1pbihhLm51bUV4ZWN1dGlvbnMsKGRbZC5sZW5ndGgtMV0rMSkqcil9fSkpfWxvYWRTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChNdGUpKSxIZSgoWyxpLHJdKT0+bnVsbCE9PWkmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChrSSgpKSksX24oKFssaV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlTGlzdChpKS5waXBlKE50KHI9PntsZXQgbz1bXTtyLmZvckVhY2goKFtzLGFdKT0+e28ucHVzaCh7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmF9KX0pLHRoaXMuc3RvcmUuZGlzcGF0Y2goRkkoe3NvdXJjZUZpbGVzOm99KSl9KSxCKCgpPT57fSkpKSl9b25Tb3VyY2VGaWxlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkocnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChINSksdGhpcy5zdG9yZS5zZWxlY3QoakkpKSxCKChbZSxpLHIsb10pPT4oe3J1bklkOmksc3RhY2tGcmFtZTplLnN0YWNrRnJhbWUsZmlsZUluZGV4OnIsZmlsZUNvbnRlbnQ6b30pKSxIZSgoe3J1bklkOmUsZmlsZUNvbnRlbnQ6aX0pPT5udWxsIT09ZSYmbnVsbCE9PWkmJmkubG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRCksTnQoKHtzdGFja0ZyYW1lOmV9KT0+dGhpcy5zdG9yZS5kaXNwYXRjaChOSSh7aG9zdF9uYW1lOmUuaG9zdF9uYW1lLGZpbGVfcGF0aDplLmZpbGVfcGF0aH0pKSksX24oKHtmaWxlSW5kZXg6ZSxydW5JZDppfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGUoaSxlKS5waXBlKE50KHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKExJKHIpKX0pLEIoKCk9Pnt9KSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihnSSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHNuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksYW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZV19KSxufSkoKSxaST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksbG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxaSSxDZF19KSxufSkoKSxjbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHJoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxKST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UscmhdfSksbn0pKCksdW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxKSV19KSxufSkoKSxkbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLEpJXX0pLG59KSgpLHBuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsWkldfSksbn0pKCksaG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxwbmUsUmksaWhdfSksbn0pKCksZm5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltzbmUsa2UsTWwsbG5lLGFuZSxjbmUsdW5lLGRuZSxldGUsaG5lLFJyLmZvckZlYXR1cmUoZHcsb3RlKSxMby5mb3JGZWF0dXJlKFtvbmVdKSxSdS5mb3JQbHVnaW4oS0ksbm5lKV19KSxufSkoKSwkST13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBDbG9zZWQiKSxlUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBUb2dnbGVkIiksdFA9d2UoIltNZXRyaWNzXSBTbGlkZSBvdXQgc2V0dGluZ3MgbWVudSB0b2dnbGVkIiksblA9d2UoIltNZXRyaWNzXSBVc2VyIHJlcXVlc3RlZCB0byBvcGVuIHRoZSBzbGlkZSBvdXQgbWVudSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlQPXdlKCJbTWV0cmljc10gVXNlciBjaGFuZ2VkIHRoZSB0YWIgaW4gdGhlIHRhYmxlIGVkaXRvciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHJQPXdlKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgY2xvc2VkIiksb1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBSZXF1ZXN0ZWQiKSxzUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgRmFpbGVkIiksbFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIENhcmQgU3RhdGUgVXBkYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGN2PXdlKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIEZ1bGwgU2l6ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIENoYW5nZSBUb29sdGlwIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdVA9KHdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBUb2dnbGUgU2hvdyBEYXRhIERvd25sb2FkIiksd2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgVG9nZ2xlIElnbm9yZSBPdXRsaWVyIikpLGRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBDYXJkIFdpZHRoIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUmVzZXQgQ2FyZCBXaWR0aCIpLGZQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbVA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksZ1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2UD13ZSgiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLHlQPXdlKCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLGJQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIikseFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ1A9d2UoIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3UD13ZSgiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTVA9d2UoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx1dj13ZSgiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1A9d2UoIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxFUD13ZSgiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdj13ZSgiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxEUD13ZSgiW01ldHJpY3NdIFRvZ2dsZSBWaXNpYmxlIFBsdWdpbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEFQPXdlKCJbTWV0cmljc10gVG9nZ2xlIFNob3cgQWxsIFBsdWdpbnMiKSxvaD13ZSgiW01ldHJpY3NdIFRpbWUgU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUD13ZSgiW01ldHJpY3NdIENhcmQgVmlldyBCb3ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1uZT13ZSgiW01ldHJpY3NdIExpbmtlZCBUaW1lIFNlbGVjdGlvbiBDbGVhcmVkIiksUFA9d2UoIltNZXRyaWNzXSBMaW5rZWQgVGltZSBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ25lPXdlKCJbTWV0cmljc10gU29ydGluZyBEYXRhIFRhYmxlIEJ5IEhlYWRlciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHB2PXdlKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSUD13ZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc2g9d2UoIltNZXRyaWNzXSBUaW1lIFNlbGVjdG9yIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPUD13ZSgiW01ldHJpY3NdIFJhbmdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX25lPXdlKCJbTWV0cmljc10gSGlkZSBFbXB0eSBDYXJkcyBDaGFuZ2VkIik7ZnVuY3Rpb24geXcobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIEdvPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uU0VUVElOR1NfVEVYVD0ic2V0dGluZ3NUZXh0IixuLlNFVFRJTkdTX1NMSURFUj0ic2V0dGluZ3NTbGlkZXIiLG4uQ0hBTkdFX1RPX1NJTkdMRT0iY2hhbmdlVG9TaW5nbGUiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KEdvfHwoR289e30pKSxHbykpKCksV2E9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShXYXx8KFdhPXt9KSksV2EpKSgpLFZzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0oVnN8fChWcz17fSkpLFZzKSkoKTtmdW5jdGlvbiBrUChuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9PmJ3KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUFrZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gQWtlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiBidyhuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYodm0obltlXSkmJnZtKHRbaV0pKXtsZXQgcj1lLG89aTtlPXZuZShuLGUrMSksaT12bmUodCxpKzEpO2xldCBzPU51bWJlcihuLnNsaWNlKHIsZSkpLGE9TnVtYmVyKHQuc2xpY2UobyxpKSk7aWYoczxhKXJldHVybi0xO2lmKHM+YSlyZXR1cm4gMX1lbHNle2lmKFk1KG5bZV0pKXtpZighWTUodFtpXSkpcmV0dXJuLTF9ZWxzZXtpZihZNSh0W2ldKSlyZXR1cm4gMTtpZihuW2VdPHRbaV0pcmV0dXJuLTE7aWYobltlXT50W2ldKXJldHVybiAxfWUrKyxpKyt9fX1mdW5jdGlvbiB2bmUobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighdm0obltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIXZtKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIXZtKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhdm0obltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gdm0obil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gWTUobil7cmV0dXJuIi8iPT09bnx8dm0obil9dmFyIGZ2PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oZnZ8fChmdj17fSkpLGZ2KSkoKSxtdD0oKCk9PihmdW5jdGlvbihuKXtuLkNPTE9SPSJDT0xPUiIsbi5SRUxBVElWRV9USU1FPSJSRUxBVElWRV9USU1FIixuLlJVTj0iUlVOIixuLlNURVA9IlNURVAiLG4uVElNRT0iVElNRSIsbi5WQUxVRT0iVkFMVUUiLG4uU01PT1RIRUQ9IlNNT09USEVEIixuLlZBTFVFX0NIQU5HRT0iVkFMVUVfQ0hBTkdFIixuLlNUQVJUX1NURVA9IlNUQVJUX1NURVAiLG4uRU5EX1NURVA9IkVORF9TVEVQIixuLlNUQVJUX1ZBTFVFPSJTVEFSVF9WQUxVRSIsbi5FTkRfVkFMVUU9IkVORF9WQUxVRSIsbi5NSU5fVkFMVUU9Ik1JTl9WQUxVRSIsbi5NQVhfVkFMVUU9Ik1BWF9WQUxVRSIsbi5QRVJDRU5UQUdFX0NIQU5HRT0iUEVSQ0VOVEFHRV9DSEFOR0UiLG4uU1RFUF9BVF9NQVg9IlNURVBfQVRfTUFYIixuLlNURVBfQVRfTUlOPSJTVEVQX0FUX01JTiIsbi5NRUFOPSJNRUFOIixuLlJBV19DSEFOR0U9IlJBV19DSEFOR0UifShtdHx8KG10PXt9KSksbXQpKSgpLF9vPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TSU5HTEU9MF09IlNJTkdMRSIsbltuLlJBTkdFPTFdPSJSQU5HRSJ9KF9vfHwoX289e30pKSxfbykpKCkscWE9KCgpPT4oZnVuY3Rpb24obil7bltuLkFTQ0VORElORz0wXT0iQVNDRU5ESU5HIixuW24uREVTQ0VORElORz0xXT0iREVTQ0VORElORyJ9KHFhfHwocWE9e30pKSxxYSkpKCk7ZnVuY3Rpb24gWDUobix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9X2QoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIFBrZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPVg1KG8sbixlKTtpZihudWxsPT09cyljb250aW51ZTtsZXQgYT10Lmhhc093blByb3BlcnR5KG8pP3Rbb10uaW5kZXg6bnVsbCxsPVg1KG8sbixpKSxjPW51bGwhPT1hJiZhPT09bDsobnVsbCE9PWEmJmE+c3x8bnVsbD09PWF8fGMpJiYocltvXT17aW5kZXg6cyxpc0Nsb3Nlc3Q6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiB5bmUobil7bGV0IHQ9eXcobi5ydW5Ub0xvYWRTdGF0ZSxlPT5lPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQpO3JldHVybnsuLi5uLHJ1blRvTG9hZFN0YXRlOnR9fWZ1bmN0aW9uIGJuZShuLHQsZSxpKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW24sdCxlfHwiIixpXSl9dmFye2luaXRpYWxTdGF0ZTpDbmUscmVkdWNlcnM6UmtlfT1ZZih7dGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRUb1Bpbm5lZENvcHk6bmV3IE1hcCxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6bmV3IE1hcCxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuZXcgTWFwLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOltdLGNhcmRNZXRhZGF0YU1hcDp7fSxjYXJkU3RhdGVNYXA6e30sY2FyZFN0ZXBJbmRleDp7fSx0YWdGaWx0ZXI6IiIsdGFnR3JvdXBFeHBhbmRlZDpuZXcgTWFwLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbCxsaW5rZWRUaW1lRW5hYmxlZDohMSxzdGVwU2VsZWN0b3JFbmFibGVkOiExLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDohMSxzaW5nbGVTZWxlY3Rpb25IZWFkZXJzOlt7dHlwZTptdC5SVU4sbmFtZToicnVuIixkaXNwbGF5TmFtZToiUnVuIixlbmFibGVkOiEwfSx7dHlwZTptdC5TTU9PVEhFRCxuYW1lOiJzbW9vdGhlZCIsZGlzcGxheU5hbWU6IlNtb290aGVkIixlbmFibGVkOiEwfSx7dHlwZTptdC5WQUxVRSxuYW1lOiJ2YWx1ZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5TVEVQLG5hbWU6InN0ZXAiLGRpc3BsYXlOYW1lOiJTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5SRUxBVElWRV9USU1FLG5hbWU6InJlbGF0aXZlIixkaXNwbGF5TmFtZToiUmVsYXRpdmUiLGVuYWJsZWQ6ITB9XSxyYW5nZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOm10LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1JTl9WQUxVRSxuYW1lOiJtaW4iLGRpc3BsYXlOYW1lOiJNaW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1BWF9WQUxVRSxuYW1lOiJtYXgiLGRpc3BsYXlOYW1lOiJNYXgiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNUQVJUX1ZBTFVFLG5hbWU6InN0YXJ0IixkaXNwbGF5TmFtZToiU3RhcnQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LkVORF9WQUxVRSxuYW1lOiJlbmQiLGRpc3BsYXlOYW1lOiJFbmQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlZBTFVFX0NIQU5HRSxuYW1lOiJ2YWx1ZUNoYW5nZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5QRVJDRU5UQUdFX0NIQU5HRSxuYW1lOiJwZXJjZW50YWdlQ2hhbmdlIixkaXNwbGF5TmFtZToiJSIsZW5hYmxlZDohMH0se3R5cGU6bXQuU1RBUlRfU1RFUCxuYW1lOiJzdGFydFN0ZXAiLGRpc3BsYXlOYW1lOiJTdGFydCBTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5FTkRfU1RFUCxuYW1lOiJlbmRTdGVwIixkaXNwbGF5TmFtZToiRW5kIFN0ZXAiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNURVBfQVRfTUFYLG5hbWU6InN0ZXBBdE1heCIsZGlzcGxheU5hbWU6IlN0ZXAgQXQgTWF4IixlbmFibGVkOiExfSx7dHlwZTptdC5TVEVQX0FUX01JTixuYW1lOiJzdGVwQXRNaW4iLGRpc3BsYXlOYW1lOiJTdGVwIEF0IE1pbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuTUVBTixuYW1lOiJtZWFuIixkaXNwbGF5TmFtZToiTWVhbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuUkFXX0NIQU5HRSxuYW1lOiJyYXdDaGFuZ2UiLGRpc3BsYXlOYW1lOiJSYXciLGVuYWJsZWQ6ITF9XSxmaWx0ZXJlZFBsdWdpblR5cGVzOm5ldyBTZXQsc3RlcE1pbk1heDp7bWluOjEvMCxtYXg6LTEvMH19LHtpc1NldHRpbmdzUGFuZU9wZW46ITAsaXNTbGlkZW91dE1lbnVPcGVuOiExLHRhYmxlRWRpdG9yU2VsZWN0ZWRUYWI6X28uU0lOR0xFLHRpbWVTZXJpZXNEYXRhOntzY2FsYXJzOnt9LGhpc3RvZ3JhbXM6e30saW1hZ2VzOnt9fSxzZXR0aW5nczpxRCxzZXR0aW5nT3ZlcnJpZGVzOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9LChuLHQsZSk9PnVzKHQsZSk/bjp7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZE1ldGFkYXRhTWFwOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9KSxRNT1DbmUsT2tlPXdyKENuZSxTZShLMCwobix7cm91dGVLaW5kOnQscGFydGlhbFN0YXRlOmV9KT0+e2lmKHQhPT1maS5FWFBFUklNRU5UJiZ0IT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybiBuO2xldCBpPW5ldyBTZXQ7Zm9yKGxldCB1IG9mIG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwua2V5cygpKXtsZXR7cGx1Z2luOmQsdGFnOnAscnVuSWQ6aCxzYW1wbGU6Zn09bi5jYXJkTWV0YWRhdGFNYXBbdV07aS5hZGQoYm5lKGQscCxoLGYpKX1sZXQgcj1lLG89W107Zm9yKGxldCB1IG9mWy4uLm4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsLi4uci5tZXRyaWNzLnBpbm5lZENhcmRzXSl7bGV0IGQ9Ym5lKHUucGx1Z2luLHUudGFnLHUucnVuSWQsdS5zYW1wbGUpO2kuaGFzKGQpfHwoaS5hZGQoZCksby5wdXNoKHUpKX1sZXQgcz12VihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxhPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKGEpJiZudWxsIT09YSl7bGV0IHU9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihhLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dX19bGV0IGM9ey4uLm4sLi4ucyxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMobW8pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQscz10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLGE9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOnMsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczphLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLFNlKEhhLHdsLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQsZT15dyhuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT55dyhpLG89PlVhKHIpP3l3KG8scz0+eW5lKHMpKTp5bmUobykpKTtyZXR1cm57Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTp0fSx0aW1lU2VyaWVzRGF0YTplfX0pLFNlKG9QLG49Pih7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FESU5HfX0pKSxTZShhUCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6RWUuRkFJTEVEfX0pKSxTZShzUCwobix7dGFnTWV0YWRhdGE6dH0pPT57bGV0IGU9e3NjYWxhcnM6eG5lKHQsV24uU0NBTEFSUyksaGlzdG9ncmFtczp4bmUodCxXbi5ISVNUT0dSQU1TKSxpbWFnZXM6dFtXbi5JTUFHRVNdfSxpPXt9LHI9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcixpPWU7aWYoVWEoaSkpe2lmKCF6YShpKSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXJ1biwgc2FtcGxlZCBwbHVnaW4gc3VwcG9ydCBub3QgeWV0IGltcGxlbWVudGVkIik7e2xldCBvPW5baV0udGFnUnVuU2FtcGxlZEluZm87Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKG8pKWZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvW3NdKSl7bGV0e21heFNhbXBsZXNQZXJTdGVwOmx9PW9bc11bYV07Zm9yKGxldCBjPTA7YzxsO2MrKyl0LnB1c2goe3BsdWdpbjppLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmMsbnVtU2FtcGxlOmx9KX19fWVsc2UgaWYoemEoaSkpe3I9bltpXS50YWdUb1J1bnM7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHIpKWZvcihsZXQgcyBvZiByW29dKXQucHVzaCh7cGx1Z2luOmksdGFnOm8scnVuSWQ6c30pfWVsc2V7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDpudWxsfSl9fXJldHVybiB0fShlKSxvPVtdO2ZvcihsZXQgaCBvZiByKXtsZXQgZj1fVihoKTtpW2ZdPWgsby5wdXNoKGYpfWxldCBzPW4udGFnR3JvdXBFeHBhbmRlZDtpZigwPT09bi50YWdHcm91cEV4cGFuZGVkLnNpemUpe2xldCBmPWtQKG8ubWFwKG09Pih7Li4uaVttXSxjYXJkSWQ6bX0pKS5maWx0ZXIoQm9vbGVhbikpO3M9bmV3IE1hcChuLnRhZ0dyb3VwRXhwYW5kZWQpO2ZvcihsZXQgbSBvZiBmLnNsaWNlKDAsMikpcy5zZXQobS5ncm91cE5hbWUsITApfWxldHtuZXh0Q2FyZFRvUGlubmVkQ29weTphLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpsLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpjfT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IE1hcCxyPW5ldyBNYXAsbz17fTtyZXR1cm4gbi5mb3JFYWNoKChzLGEpPT57LTEhPT1lLmluZGV4T2YoYSkmJihpLnNldChhLHMpLHIuc2V0KHMsYSksb1tzXT10W2FdKX0pLHtuZXh0Q2FyZFRvUGlubmVkQ29weTppLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpyLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpvfX0obi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsaSxvKSx1PXsuLi5pLC4uLmN9LGQ9ZnVuY3Rpb24obix0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW2kscl0pPT57dFtpXSYmKGVbaV09cil9KSxlfShuLmNhcmRTdGVwSW5kZXgsdSkscD12VihuLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLG8sdSxhLG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLGwsZCxuLmNhcmRTdGF0ZU1hcCk7cmV0dXJuey4uLm4sLi4ucCx0YWdHcm91cEV4cGFuZGVkOnMsdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sdGFnTWV0YWRhdGE6ZSxjYXJkTGlzdDpvfX0pLFNlKGxQLChuLHtjYXJkSWQ6dCxzZXR0aW5nczplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLC4uLmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKGN2LChuLHtjYXJkSWQ6dH0pPT57bGV0IGU9ey4uLm4uY2FyZFN0YXRlTWFwfTtyZXR1cm4gZVt0XT17Li4uZVt0XSxmdWxsV2lkdGg6IWVbdF0/LmZ1bGxXaWR0aCx0YWJsZUV4cGFuZGVkOiFlW3RdPy5mdWxsV2lkdGh9LHsuLi5uLGNhcmRTdGF0ZU1hcDplfX0pLFNlKEVQLChuLHt0YWdGaWx0ZXI6dH0pPT4oey4uLm4sdGFnRmlsdGVyOnR9KSksU2UoY1AsKG4se3NvcnQ6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHRvb2x0aXBTb3J0OnR9fSkpLFNlKHVQLG49PntsZXQgdD0hKG4uc2V0dGluZ092ZXJyaWRlcy5pZ25vcmVPdXRsaWVycz8/bi5zZXR0aW5ncy5pZ25vcmVPdXRsaWVycyk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGlnbm9yZU91dGxpZXJzOnR9fX0pLFNlKGRQLChuLHt4QXhpc1R5cGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHhBeGlzVHlwZTp0fX0pKSxTZShmUCwobix7c21vb3RoaW5nOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dH19KSksU2UobVAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g/P24uc2V0dGluZ3Muc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6dH19fSksU2UoZ1AsKG4se2JyaWdodG5lc3NJbk1pbGxpOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnR9fSkpLFNlKF9QLChuLHtjb250cmFzdEluTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQ29udHJhc3RJbk1pbGxpOnR9fSkpLFNlKHZQLG49PntsZXR7aW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoeVAsbj0+e2xldHtpbWFnZUNvbnRyYXN0SW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoYlAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmltYWdlU2hvd0FjdHVhbFNpemU/P24uc2V0dGluZ3MuaW1hZ2VTaG93QWN0dWFsU2l6ZSk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlU2hvd0FjdHVhbFNpemU6dH19fSksU2UoeFAsKG4se2hpc3RvZ3JhbU1vZGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpc3RvZ3JhbU1vZGU6dH19KSksU2UocFAsKG4se2NhcmRNaW5XaWR0aDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOnR9fSkpLFNlKGhQLG49Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOm51bGx9fSkpLFNlKF9uZSxuPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpZGVFbXB0eUNhcmRzOiFuLnNldHRpbmdPdmVycmlkZXMuaGlkZUVtcHR5Q2FyZHN9fSkpLFNlKENQLChuLHtyZXF1ZXN0czp0fSk9PntpZighdC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4udGltZVNlcmllc0RhdGF9O2ZvcihsZXQgaSBvZiB0KXtsZXR7cGx1Z2luOnIsdGFnOm8sc2FtcGxlOnN9PWk7ZVtyXT1ZRChlLHIsbyxzKTtsZXQgYT1fZChlLHIsbyxzKSxsPXVWKGkpP1tpLnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLHIsbyxzKTthLnJ1blRvTG9hZFN0YXRlPVhEKEVlLkxPQURJTkcsbCxhLnJ1blRvTG9hZFN0YXRlKX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKHdQLChuLHtyZXF1ZXN0OnR9KT0+e2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfSx7cGx1Z2luOmksdGFnOnIsc2FtcGxlOm99PXQ7ZVtpXT1ZRChlLGkscixvKTtsZXQgcz1fZChlLGkscixvKSxhPXVWKHQpP1t0LnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLGkscixvKTtyZXR1cm4gcy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsYSxzLnJ1blRvTG9hZFN0YXRlKSx7Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKE1QLChuLHtyZXNwb25zZTp0fSk9PntsZXQgZT17Li4ubi5zdGVwTWluTWF4fSxpPXsuLi5uLmNhcmRTdGF0ZU1hcH0scj17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjpvLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmx9PXQ7cltvXT1ZRChyLG8scyxsKTtsZXQgYz1fZChyLG8scyxsKTtpZihIRCh0KSl7bGV0IGQ9YT9bYV06cF8obi50YWdNZXRhZGF0YSxvLHMsbCk7Yy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsZCxjLnJ1blRvTG9hZFN0YXRlKX1lbHNle2xldCBkPXQucnVuVG9TZXJpZXM7Yy5ydW5Ub1Nlcmllcz17Li4uYy5ydW5Ub1Nlcmllc30sYy5ydW5Ub0xvYWRTdGF0ZT17Li4uYy5ydW5Ub0xvYWRTdGF0ZX07Zm9yKGxldCBwIGluIGQpaWYoZC5oYXNPd25Qcm9wZXJ0eShwKSl7Yy5ydW5Ub1Nlcmllc1twXT1kW3BdLGMucnVuVG9Mb2FkU3RhdGVbcF09RWUuTE9BREVEO2ZvcihsZXQgaCBvZiBkW3BdKWUubWluPU1hdGgubWluKGUubWluLGguc3RlcCksZS5tYXg9TWF0aC5tYXgoZS5tYXgsaC5zdGVwKX19aWYodC5ydW5Ub1NlcmllcyYmdC5wbHVnaW49PT1Xbi5TQ0FMQVJTKXtsZXQgZD1fVih7cGx1Z2luOm8sdGFnOnMscnVuSWQ6bnVsbH0pLHA9ZnVuY3Rpb24obil7bGV0IHQ9T2JqZWN0LnZhbHVlcyhuKS5mbGF0KCkubWFwKGU9PmUuc3RlcCk7cmV0dXJue21pblN0ZXA6TWF0aC5taW4oLi4udCksbWF4U3RlcDpNYXRoLm1heCguLi50KX19KGMucnVuVG9TZXJpZXMpO2lbZF09ey4uLmlbZF0sZGF0YU1pbk1heDpwfTtsZXQgaD1uLmNhcmRUb1Bpbm5lZENvcHkuZ2V0KGQpO2gmJihpW2hdPXsuLi5pW2hdLGRhdGFNaW5NYXg6cH0pfXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOnIsY2FyZFN0ZXBJbmRleDpQa2Uobi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkU3RlcEluZGV4LHIsbi50aW1lU2VyaWVzRGF0YSksc3RlcE1pbk1heDplLGNhcmRTdGF0ZU1hcDppfX0pLFNlKFNQLChuLHtjYXJkSWQ6dCxzdGVwSW5kZXg6ZX0pPT57bGV0IGk9WDUodCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhKSxyPWU7cmV0dXJuIG51bGw9PT1pP3I9bnVsbDplPmkmJihyPWkpLHsuLi5uLGNhcmRTdGVwSW5kZXg6ey4uLm4uY2FyZFN0ZXBJbmRleCxbdF06e2luZGV4OnIsaXNDbG9zZXN0OiExfX19fSksU2UoVFAsKG4se3RhZ0dyb3VwOnR9KT0+e2xldCBlPW5ldyBNYXAobi50YWdHcm91cEV4cGFuZGVkKTtyZXR1cm4gZS5zZXQodCwhZS5nZXQodCkpLHsuLi5uLHRhZ0dyb3VwRXhwYW5kZWQ6ZX19KSxTZSh1diwobix7ZW50ZXJlZENhcmRzOnQsZXhpdGVkQ2FyZHM6ZX0pPT57aWYoIXQubGVuZ3RoJiYhZS5sZW5ndGgpcmV0dXJuIG47bGV0IGk9bmV3IE1hcChuLnZpc2libGVDYXJkTWFwKTtyZXR1cm4gdC5mb3JFYWNoKCh7ZWxlbWVudElkOnIsY2FyZElkOm99KT0+e2xldCBzPWkuZ2V0KHIpPz9udWxsO2lmKG51bGwhPT1zJiZzIT09byl0aHJvdyBuZXcgRXJyb3IoIkEgRE9NIGVsZW1lbnQgY2Fubm90IGJlIHJldXNlZCBmb3IgbW9yZSB0aGFuIDEgdW5pcXVlIGNhcmQgbWV0YWRhdGEiKTtpLnNldChyLG8pfSksZS5mb3JFYWNoKCh7ZWxlbWVudElkOnJ9KT0+e2kuZGVsZXRlKHIpfSksey4uLm4sdmlzaWJsZUNhcmRNYXA6aX19KSxTZShkdiwobix7Y2FyZElkOnR9KT0+e2xldCBlPW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKHQpLGk9IWUmJiFuLmNhcmRUb1Bpbm5lZENvcHkuaGFzKHQpO2lmKGkmJiFRRChuKSlyZXR1cm4gbjtsZXQgcj1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weSksbz1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weUNhY2hlKSxzPW5ldyBNYXAobi5waW5uZWRDYXJkVG9PcmlnaW5hbCksYT17Li4ubi5jYXJkTWV0YWRhdGFNYXB9LGw9ey4uLm4uY2FyZFN0ZXBJbmRleH0sYz17Li4ubi5jYXJkU3RhdGVNYXB9O2lmKGUpe2xldCB1PW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuZ2V0KHQpO3IuZGVsZXRlKHUpLG8uZGVsZXRlKHUpLHMuZGVsZXRlKHQpLGRlbGV0ZSBhW3RdLGRlbGV0ZSBsW3RdLGRlbGV0ZSBjW3RdfWVsc2UgaWYoaSl7bGV0IHU9eVYodCxyLG8scyxsLGEsYyk7cj11LmNhcmRUb1Bpbm5lZENvcHksbz11LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxzPXUucGlubmVkQ2FyZFRvT3JpZ2luYWwsYT11LmNhcmRNZXRhZGF0YU1hcCxsPXUuY2FyZFN0ZXBJbmRleCxjPXUuY2FyZFN0YXRlTWFwfWVsc2V7bGV0IHU9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh0KTtyLmRlbGV0ZSh0KSxvLmRlbGV0ZSh0KSxzLmRlbGV0ZSh1KSxkZWxldGUgYVt1XSxkZWxldGUgbFt1XSxkZWxldGUgY1t0XX1yZXR1cm57Li4ubixjYXJkTWV0YWRhdGFNYXA6YSxjYXJkU3RhdGVNYXA6YyxjYXJkU3RlcEluZGV4OmwsY2FyZFRvUGlubmVkQ29weTpyLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOnN9fSksU2UoUFAsbj0+e2xldCB0PSFuLmxpbmtlZFRpbWVFbmFibGVkLGU9ey4uLm4uY2FyZFN0ZXBJbmRleH0saT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24scj1uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtpZih0KXtsZXR7bWluOnN9PW4uc3RlcE1pbk1heCxhPXM9PT0xLzA/MDpzO2k9bi5saW5rZWRUaW1lU2VsZWN0aW9uPz97c3RhcnQ6e3N0ZXA6YX0sZW5kOm51bGx9LGU9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsaSkscj10LG89Qm9vbGVhbihpLmVuZCl9cmV0dXJuey4uLm4sY2FyZFN0ZXBJbmRleDplLGxpbmtlZFRpbWVFbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6cixyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6b319KSxTZShPUCxuPT57bGV0IHQ9IW4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLGU9bi5zdGVwU2VsZWN0b3JFbmFibGVkLGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9T2JqZWN0LmVudHJpZXMobi5jYXJkU3RhdGVNYXApLnJlZHVjZSgobyxbcyxhXSk9PihvW3NdPXsuLi5hLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FLHJhbmdlU2VsZWN0aW9uT3ZlcnJpZGU6c2EuTk9ORX0sbykse30pO3JldHVybiB0PyhlPXQsaXx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDp7c3RlcDpuLnN0ZXBNaW5NYXgubWF4fX0pLGkuZW5kfHwoaT17Li4uaSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSk6aSYmKGk9ey4uLmksZW5kOm51bGx9KSx7Li4ubixzdGVwU2VsZWN0b3JFbmFibGVkOmUscmFuZ2VTZWxlY3Rpb25FbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLGNhcmRTdGF0ZU1hcDpyfX0pLFNlKG9oLChuLHQpPT57bGV0e2NhcmRJZDplLHRpbWVTZWxlY3Rpb246aX09dCxyPWkuc3RhcnQuc3RlcCxvPWkuZW5kPy5zdGVwLGE9bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7bi5saW5rZWRUaW1lRW5hYmxlZCYmKGE9dm9pZCAwIT09byk7bGV0IGw9e3N0YXJ0OntzdGVwOnJ9LGVuZDp2b2lkIDA9PT1vP251bGw6e3N0ZXA6cj5vP3I6b319LGM9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsbCksdT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlJiYodVtlXT17Li4udVtlXSx0aW1lU2VsZWN0aW9uOmwsc3RlcFNlbGVjdGlvbk92ZXJyaWRlOnNhLk9WRVJSSURFX0FTX0VOQUJMRUQscmFuZ2VTZWxlY3Rpb25PdmVycmlkZTp2b2lkIDA9PT1sLmVuZD8uc3RlcD9zYS5PVkVSUklERV9BU19ESVNBQkxFRDpzYS5PVkVSUklERV9BU19FTkFCTEVEfSksey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpsLGNhcmRTdGVwSW5kZXg6YyxjYXJkU3RhdGVNYXA6dSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6YX19KSxTZShJUCwobix7Y2FyZElkOnQsdmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKHNoLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246YSwuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9PntpW2FdPXsuLi5pW2FdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09V2EuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxzPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzLGNhcmRTdGF0ZU1hcDppfX0pLFNlKG1uZSxuPT4oey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpudWxsfSkpLFNlKGlQLChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLFNlKHB2LChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PV9vLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSxTZShSUCwobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlclR5cGU6ZX0pPT57bGV0IGk9dD09PV9vLlJBTkdFP24ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyxyPWkuZmluZEluZGV4KGE9PmEudHlwZT09PWUpLG89ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGkpO2lbcl0uZW5hYmxlZCYmby0tO2xldCBzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KHIsbyxpKTtyZXR1cm4gc1tvXT17Li4uc1tvXSxlbmFibGVkOiFzW29dLmVuYWJsZWR9LHQ9PT1fby5SQU5HRT97Li4ubixyYW5nZVNlbGVjdGlvbkhlYWRlcnM6c306ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczpzfX0pLFNlKERQLChuLHtwbHVnaW46dH0pPT57bGV0IGU9bmV3IFNldChuLmZpbHRlcmVkUGx1Z2luVHlwZXMpO3JldHVybiBlLmhhcyh0KT9lLmRlbGV0ZSh0KTplLmFkZCh0KSxPYmplY3QudmFsdWVzKFduKS5ldmVyeShpPT5lLmhhcyhpKSkmJihlPW5ldyBTZXQpLHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6ZX19KSxTZShBUCxuPT4oey4uLm4sZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0fSkpLFNlKGVQLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46IW4uaXNTZXR0aW5nc1BhbmVPcGVufSkpLFNlKCRJLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46ITF9KSksU2UodFAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3Blbjohbi5pc1NsaWRlb3V0TWVudU9wZW59KSksU2UoblAsKG4se21vZGU6dH0pPT4oey4uLm4saXNTbGlkZW91dE1lbnVPcGVuOiEwLGlzU2V0dGluZ3NQYW5lT3BlbjohMCx0YWJsZUVkaXRvclNlbGVjdGVkVGFiOnR9KSksU2UoclAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMX0pKSk7ZnVuY3Rpb24gd25lKG4sdCl7cmV0dXJuIFhmKE9rZSxSa2UpKG4sdCl9ZnVuY3Rpb24geG5lKG4sdCl7cmV0dXJue3RhZ0Rlc2NyaXB0aW9uczpuW3RdLnRhZ0Rlc2NyaXB0aW9ucyx0YWdUb1J1bnM6a2tlKG5bdF0ucnVuVGFnSW5mbyl9fWZ1bmN0aW9uIGtrZShuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbilmb3IobGV0IGkgb2YgbltlXSl0W2ldPVsuLi50W2ldfHxbXSxlXTtyZXR1cm4gdH12YXIgTGtlPVkoTnAsU2wsKG4sdCxlKT0+dD97Li4udCxsb2FkU3RhdGU6bixpZDplfTpudWxsKSxNbmU9d2UoIltNZXRyaWNzIEVmZmVjdHNdIEluaXQiKSxTbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZShUaShNbmUsX3UscWYseGwpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSx0aGlzLnN0b3JlLnNlbGVjdChTQykpLEhlKChbLG8sc10pPT5vPT09Q0MmJnMuc3RhdGU9PT1FZS5OT1RfTE9BREVEKSksdGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJD10aGlzLmFjdGlvbnMkLnBpcGUoVGkoSGEsd2wpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssb10pPT5vPT09Q0MpKSx0aGlzLmxvYWRUYWdNZXRhZGF0YSQ9dW4odGhpcy5kYXNoYm9hcmRTaG93bldpdGhvdXREYXRhJCx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFNDKSx0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG8sc10pPT5vLnN0YXRlIT09RWUuTE9BRElORyYmbnVsbCE9PXMpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChvUCgpKX0pLHZpKChbLCxvXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goc1Aoe3RhZ01ldGFkYXRhOnN9KSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goYVAoKSksanQobnVsbCkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHV2KSxHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGU9PT1FZS5OT1RfTE9BREVEKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZShHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGUhPT1FZS5MT0FESU5HKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPXVuKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShIZShvPT5vLmxlbmd0aD4wKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykucGlwZShIZShvPT5udWxsIT09bykpKSxfbigoW28sc10pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKG8scykpKSx0aGlzLmRhdGFFZmZlY3RzJD1VcigoKT0+dW4odGhpcy5sb2FkVGFnTWV0YWRhdGEkLHRoaXMubG9hZFRpbWVTZXJpZXMkKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBNbmUoKX1nZXRWaXNpYmxlQ2FyZEZldGNoSW5mb3MoKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3Qob1opLnBpcGUodmkoaT0+aS5zaXplP3hvKFsuLi5pXS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoTGtlLG8pLnBpcGUoSHQoMSkpKSk6anQoW10pKSxCKGk9PmkuZmlsdGVyKEJvb2xlYW4pKSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hUaW1lU2VyaWVzKFtlXSkucGlwZShOdChpPT57bGV0IHI9aS5maWx0ZXIoSEQpO3IubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUaW1lIHNlcmllcyByZXNwb25zZSBjb250YWluZWQgZXJyb3JzOiIsciksdGhpcy5zdG9yZS5kaXNwYXRjaChNUCh7cmVzcG9uc2U6aVswXX0pKX0pLENvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaCh3UCh7cmVxdWVzdDplfSkpLGp0KG51bGwpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKGUsaSl7cmV0dXJuIGp0KGUubWFwKG89PntsZXR7cGx1Z2luOnMsdGFnOmEscnVuSWQ6bCxzYW1wbGU6Y309byx1PXphKHMpP3twbHVnaW46cyx0YWc6YSxydW5JZDpsfTp7cGx1Z2luOnMsdGFnOmEsZXhwZXJpbWVudElkczppfTtyZXR1cm4gdm9pZCAwIT09YyYmKHUuc2FtcGxlPWMpLHV9KSkucGlwZShOdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaChDUCh7cmVxdWVzdHM6b30pKX0pLF9uKG89PnVuKC4uLm8ubWFwKGE9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzKGEpKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUih5dSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEs1PW5ldyBzZSgiTWV0cmljcyBTdG9yZSBDb25maWciKSxaNT1uZXcgc2UoIk1ldHJpY3MgSW5pdGlhbCBTZXR0aW5ncyBDb25maWciKTtmdW5jdGlvbiBFbmUobil7cmV0dXJuIG4/e2luaXRpYWxTdGF0ZTp7Li4uUTUsc2V0dGluZ3M6bn19Ontpbml0aWFsU3RhdGU6UTV9fXZhciBZYT0oKCk9PihmdW5jdGlvbihuKXtuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCIsbltuLk1JRERMRT00XT0iTUlERExFIixuW24uRk9VUlRIPThdPSJGT1VSVEgiLG5bbi5GSUZUSD0zMl09IkZJRlRIIn0oWWF8fChZYT17fSkpLFlhKSkoKSxUbmU9MDtmdW5jdGlvbiBCa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuZXhwYW5kU2lkZWJhcigpKX0pLE4oMSwibWF0LWljb24iLDQpLHYoKX19ZnVuY3Rpb24gVmtlKG4sdCl7aWYoMSZuJiYoZygwLCJuYXYiLDUpLGooMSwiYXN5bmMiKSxObigyLDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7T3QoIndpZHRoIixXKDEsNCxlLndpZHRoJCksIiUiKSgibWluLXdpZHRoIixlLk1JTklNVU1fU0lERUJBUl9XSURUSF9JTl9QWCwicHgiKX19ZnVuY3Rpb24gSGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5yZXNpemVHcmFiYmVkKCkpfSksdigpfX12YXIgVWtlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLHprZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLEFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMud2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHhEKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMucmVzaXppbmc9ITEsdGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg9NzUsbGkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoKCk9PnRoaXMucmVzaXppbmcpKS5zdWJzY3JpYmUocj0+e2lmKChyLmJ1dHRvbnMmWWEuTEVGVCkhPT1ZYS5MRUZUKXJldHVybiB2b2lkKHRoaXMucmVzaXppbmc9ITEpO3IucHJldmVudERlZmF1bHQoKTtsZXR7d2lkdGg6b309aS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RvcmUuZGlzcGF0Y2gocl8oe3dpZHRoSW5QZXJjZW50OnIuY2xpZW50WDw9dGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg/MDpyLmNsaWVudFgvbyoxMDB9KSl9KSxsaShpLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlc2l6aW5nPSExfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfWV4cGFuZFNpZGViYXIoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJfKHt3aWR0aEluUGVyY2VudDoyMH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhc2hib2FyZC1sYXlvdXQiXV0sbmdDb250ZW50U2VsZWN0b3JzOnprZSxkZWNsczo3LHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJleHBhbmQiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDMsIndpZHRoIiwibWluV2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koVWtlKSxFKDAsQmtlLDIsMCwiYnV0dG9uIiwwKSxqKDEsImFzeW5jIiksRSgyLFZrZSwzLDYsIm5hdiIsMSksaigzLCJhc3luYyIpLEUoNCxIa2UsMSwwLCJkaXYiLDIpLGooNSwiYXN5bmMiKSxObig2KSksMiZlJiYoYigibmdJZiIsMD09PVcoMSwzLGkud2lkdGgkKSkseCgyKSxiKCJuZ0lmIixXKDMsNSxpLndpZHRoJCk+MCkseCgyKSxiKCJuZ0lmIixXKDUsNyxpLndpZHRoJCk+MCkpfSxkZXBlbmRlbmNpZXM6W1hlLFpuLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjgwdnd9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleDowIDA7anVzdGlmeS1zZWxmOnN0cmV0Y2h9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4O2N1cnNvcjpldy1yZXNpemU7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNofS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjY2M7b3V0bGluZTozcHggc29saWQgI2NjYzt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3V0bGluZS1jb2xvcjojNzc3O2JvcmRlci1jb2xvcjojNzc3fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDFweCAwIDA7Y29sb3I6aW5oZXJpdDtjb250YWluOmNvbnRlbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKNT1uZXcgV2Vha01hcCx4dz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBXZWFrU2V0fWluaXRpYWxpemUodCl7aWYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcilyZXR1cm47dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10O2xldCBlPXt0aHJlc2hvbGQ6MCxyb290OnRoaXMucm9vdD8/bnVsbH07dGhpcy5idWZmZXImJihlLnJvb3RNYXJnaW49dGhpcy5idWZmZXIpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksZSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKHIsbyk9PnIudGltZS1vLnRpbWUpO2xldCBlPW5ldyBTZXQsaT1uZXcgU2V0O2ZvcihsZXR7aXNJbnRlcnNlY3Rpbmc6cix0YXJnZXQ6b31vZiB0KXI/KGUuYWRkKG8pLGkuZGVsZXRlKG8pKTooZS5kZWxldGUobyksaS5hZGQobykpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXMobykmJiFyJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZShvKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShvKSk7dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLGkpfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fSxJbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaCh1dih7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O0o1LnNldChlLHtlbGVtZW50SWQ6KFRuZSsrLFN5bWJvbChUbmUpKSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSx0aGlzLmNhcmRPYnNlcnZlcnx8KHRoaXMuY2FyZE9ic2VydmVyPW5ldyB4dyksdGhpcy5jYXJkT2JzZXJ2ZXIuaW5pdGlhbGl6ZSh0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpKSx0aGlzLmNhcmRPYnNlcnZlci5hZGQoZSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjYXJkTGF6eUxvYWRlciIsIiJdXSxpbnB1dHM6e2NhcmRJZDpbImNhcmRMYXp5TG9hZGVyIiwiY2FyZElkIl0sY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifX0pLG59KSgpO2Z1bmN0aW9uIFdrZShuLHQpezEmbiYmKEt0KDApLE5uKDEpLFp0KCkpfXZhciBxa2U9WyIqIl0sUG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhFbykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpxa2UsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLFdrZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmYigibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltYZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWGtlPVsiYnV0dG9uIl0sUWtlPVsiKiJdLFJuZT1uZXcgc2UoIk1BVF9CVVRUT05fVE9HR0xFX0RFRkFVTFRfT1BUSU9OUyIpLE9uZT1uZXcgc2UoIk1hdEJ1dHRvblRvZ2dsZUdyb3VwIiksS2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT4kNSksbXVsdGk6ITB9LGtuZT0wLEZQPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSwkNT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX25hbWU9Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLSIra25lKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBGXyh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuX2J1dHRvblRvZ2dsZXMuZmlsdGVyKGU9PmUuY2hlY2tlZCkpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV9lbWl0Q2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IEZQKGUsdGhpcy52YWx1ZSk7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbihpLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KGkpfV9zeW5jQnV0dG9uVG9nZ2xlKGUsaSxyPSExLG89ITEpeyF0aGlzLm11bHRpcGxlJiZ0aGlzLnNlbGVjdGVkJiYhZS5jaGVja2VkJiYodGhpcy5zZWxlY3RlZC5jaGVja2VkPSExKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbD9pP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKTpvPSEwLG8/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5fdXBkYXRlTW9kZWxWYWx1ZShlLHIpKTp0aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscil9X2lzU2VsZWN0ZWQoZSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpfV9pc1ByZWNoZWNrZWQoZSl7cmV0dXJuISh0eXBlb2YgdGhpcy5fcmF3VmFsdWU+InUiKSYmKHRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpP3RoaXMuX3Jhd1ZhbHVlLnNvbWUoaT0+bnVsbCE9ZS52YWx1ZSYmaT09PWUudmFsdWUpOmUudmFsdWU9PT10aGlzLl9yYXdWYWx1ZSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSl7dGhpcy5fcmF3VmFsdWU9ZSx0aGlzLl9idXR0b25Ub2dnbGVzJiYodGhpcy5tdWx0aXBsZSYmZT8oQXJyYXkuaXNBcnJheShlKSx0aGlzLl9jbGVhclNlbGVjdGlvbigpLGUuZm9yRWFjaChpPT50aGlzLl9zZWxlY3RWYWx1ZShpKSkpOih0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuX3NlbGVjdFZhbHVlKGUpKSl9X2NsZWFyU2VsZWN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLl9idXR0b25Ub2dnbGVzLmZvckVhY2goZT0+ZS5jaGVja2VkPSExKX1fc2VsZWN0VmFsdWUoZSl7bGV0IGk9dGhpcy5fYnV0dG9uVG9nZ2xlcy5maW5kKHI9Pm51bGwhPXIudmFsdWUmJnIudmFsdWU9PT1lKTtpJiYoaS5jaGVja2VkPSEwLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSl9X3VwZGF0ZU1vZGVsVmFsdWUoZSxpKXtpJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfV9tYXJrQnV0dG9uc0ZvckNoZWNrKCl7dGhpcy5fYnV0dG9uVG9nZ2xlcz8uZm9yRWFjaChlPT5lLl9tYXJrRm9yQ2hlY2soKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoUm5lLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmTmkocixKa2UsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYnV0dG9uVG9nZ2xlcz1vKX19LGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09aS5hcHBlYXJhbmNlKSl9LGlucHV0czp7YXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsbmFtZToibmFtZSIsdmVydGljYWw6InZlcnRpY2FsIix2YWx1ZToidmFsdWUiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlR3JvdXAiXSxmZWF0dXJlczpbJHQoW0trZSx7cHJvdmlkZTpPbmUsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxaa2U9THMoY2xhc3N7fSksSmtlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaa2V7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEc7bGV0IGw9TnVtYmVyKHMpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9YSYmYS5hcHBlYXJhbmNlP2EuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBidXR0b25JZCgpe3JldHVybmAke3RoaXMuaWR9LWJ1dHRvbmB9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmFwcGVhcmFuY2U6dGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXt0aGlzLl9hcHBlYXJhbmNlPWV9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9pc1NlbGVjdGVkKHRoaXMpOnRoaXMuX2NoZWNrZWR9c2V0IGNoZWNrZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpfW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK2tuZSsrLGUmJihlLl9pc1ByZWNoZWNrZWQodGhpcyk/dGhpcy5jaGVja2VkPSEwOmUuX2lzU2VsZWN0ZWQodGhpcykhPT10aGlzLl9jaGVja2VkJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksZSYmZS5faXNTZWxlY3RlZCh0aGlzKSYmZS5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLCExLCExLCEwKX1mb2N1cyhlKXt0aGlzLl9idXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X29uQnV0dG9uQ2xpY2soKXtsZXQgZT0hIXRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKXx8IXRoaXMuX2NoZWNrZWQ7ZSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWUsdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmKHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkLCEwKSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9vblRvdWNoZWQoKSkpLHRoaXMuY2hhbmdlLmVtaXQobmV3IEZQKHRoaXMsdGhpcy52YWx1ZSkpfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fZ2V0QnV0dG9uTmFtZSgpe3JldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdG9yKCk/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5uYW1lOnRoaXMubmFtZXx8bnVsbH1faXNTaW5nbGVTZWxlY3Rvcigpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYhdGhpcy5idXR0b25Ub2dnbGVHcm91cC5tdWx0aXBsZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPbmUsOCksdyhubiksdyhBZSksdyh6ciksS28oInRhYmluZGV4IiksdyhSbmUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoWGtlLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKHplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpRa2UsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJidXR0b24iLDAsMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGcoMiwic3BhbiIsMiksTm4oMyksdigpKCksTig0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj1zdCgxKTtiKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSx6ZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLHgoNSksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOltlc10sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLHhjLGRuXX0pLG59KSgpO2Z1bmN0aW9uIGVGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJhbmltYXRpb24tbmFtZSIsIm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtIitlLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIHRGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fXZhciBpRmU9cHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxyRmU9bmV3IHNlKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RpYW1ldGVyOjEwMH19fSksdm89Y2xhc3MgZXh0ZW5kcyBpRmV7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXtzdXBlcih0KSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2RpYW1ldGVyPTEwMCx0aGlzLl92YWx1ZT0wLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLm1vZGU9ImRldGVybWluYXRlIjtsZXQgYz12by5fZGlhbWV0ZXJzO3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSxjLmhhcyhpLmhlYWQpfHxjLnNldChpLmhlYWQsbmV3IFNldChbMTAwXSkpLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1yJiYhIW8mJiFvLl9mb3JjZUFuaW1hdGlvbnMsIm1hdC1zcGlubmVyIj09PXQubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYodGhpcy5tb2RlPSJpbmRldGVybWluYXRlIiksbyYmKG8uY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPW8uY29sb3IpLG8uZGlhbWV0ZXImJih0aGlzLmRpYW1ldGVyPW8uZGlhbWV0ZXIpLG8uc3Ryb2tlV2lkdGgmJih0aGlzLnN0cm9rZVdpZHRoPW8uc3Ryb2tlV2lkdGgpKSxlLmlzQnJvd3NlciYmZS5TQUZBUkkmJmEmJnMmJmwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249YS5jaGFuZ2UoMTUwKS5zdWJzY3JpYmUoKCk9PnsiaW5kZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGUmJmwucnVuKCgpPT5zLm1hcmtGb3JDaGVjaygpKX0pKX1nZXQgZGlhbWV0ZXIoKXtyZXR1cm4gdGhpcy5fZGlhbWV0ZXJ9c2V0IGRpYW1ldGVyKHQpe3RoaXMuX2RpYW1ldGVyPVBpKHQpLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSx0aGlzLl9zdHlsZVJvb3QmJnRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpfWdldCBzdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLl9zdHJva2VXaWR0aHx8dGhpcy5kaWFtZXRlci8xMH1zZXQgc3Ryb2tlV2lkdGgodCl7dGhpcy5fc3Ryb2tlV2lkdGg9UGkodCl9Z2V0IHZhbHVlKCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl92YWx1ZTowfXNldCB2YWx1ZSh0KXt0aGlzLl92YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCxQaSh0KSkpfW5nT25Jbml0KCl7bGV0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3N0eWxlUm9vdD1NQSh0KXx8dGhpcy5fZG9jdW1lbnQuaGVhZCx0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKSx0LmNsYXNzTGlzdC5hZGQoIm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uIil9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fZ2V0Q2lyY2xlUmFkaXVzKCl7cmV0dXJuKHRoaXMuZGlhbWV0ZXItMTApLzJ9X2dldFZpZXdCb3goKXtsZXQgdD0yKnRoaXMuX2dldENpcmNsZVJhZGl1cygpK3RoaXMuc3Ryb2tlV2lkdGg7cmV0dXJuYDAgMCAke3R9ICR7dH1gfV9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCl7cmV0dXJuIDIqTWF0aC5QSSp0aGlzLl9nZXRDaXJjbGVSYWRpdXMoKX1fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpKigxMDAtdGhpcy5fdmFsdWUpLzEwMDpudWxsfV9nZXRDaXJjbGVTdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLnN0cm9rZVdpZHRoL3RoaXMuZGlhbWV0ZXIqMTAwfV9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4odCl7bGV0IGU9NTAqKHQuY3VycmVudFNjYWxlPz8xKTtyZXR1cm5gJHtlfSUgJHtlfSVgfV9hdHRhY2hTdHlsZU5vZGUoKXtsZXQgdD10aGlzLl9zdHlsZVJvb3QsZT10aGlzLl9kaWFtZXRlcixpPXZvLl9kaWFtZXRlcnMscj1pLmdldCh0KTtpZighcnx8IXIuaGFzKGUpKXtsZXQgbz10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO28uc2V0QXR0cmlidXRlKCJtYXQtc3Bpbm5lci1hbmltYXRpb24iLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbCksby50ZXh0Q29udGVudD10aGlzLl9nZXRBbmltYXRpb25UZXh0KCksdC5hcHBlbmRDaGlsZChvKSxyfHwocj1uZXcgU2V0LGkuc2V0KHQscikpLHIuYWRkKGUpfX1fZ2V0QW5pbWF0aW9uVGV4dCgpe2xldCB0PXRoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKTtyZXR1cm4iXG4gQGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLURJQU1FVEVSIHtcbiAgICAwJSAgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cbiAgICAyNSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG5cbiAgICAyNS4wMDAxJSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuICAgIDUwJSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG5cbiAgICA1MC4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG4gICAgNzUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cblxuICAgIDc1LjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gICAgMTAwJSAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgfVxuIi5yZXBsYWNlKC9TVEFSVF9WQUxVRS9nLCIiKy45NSp0KS5yZXBsYWNlKC9FTkRfVkFMVUUvZywiIisuMip0KS5yZXBsYWNlKC9ESUFNRVRFUi9nLGAke3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbH1gKX1fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuZGlhbWV0ZXIudG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiXyIpfX07dm8uX2RpYW1ldGVycz1uZXcgV2Vha01hcCx2by5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHx2bykodyhBZSksdyh1aSksdyhCdCw4KSx3KExpLDgpLHcockZlKSx3KG5uKSx3KGRhKSx3KHB0KSl9LHZvLlx1MDI3NWNtcD1rKHt0eXBlOnZvLHNlbGVjdG9yczpbWyJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLFsibWF0LXNwaW5uZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsInByb2dyZXNzYmFyIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXByb2dyZXNzLXNwaW5uZXIiLCJtYXQtc3Bpbm5lciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LGUpezImdCYmKHplKCJhcmlhLXZhbHVlbWluIiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlPzA6bnVsbCkoImFyaWEtdmFsdWVtYXgiLCJkZXRlcm1pbmF0ZSI9PT1lLm1vZGU/MTAwOm51bGwpKCJhcmlhLXZhbHVlbm93IiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlP2UudmFsdWU6bnVsbCkoIm1vZGUiLGUubW9kZSksT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixlLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgiLG1vZGU6Im1vZGUiLHZhbHVlOiJ2YWx1ZSJ9LGV4cG9ydEFzOlsibWF0UHJvZ3Jlc3NTcGlubmVyIl0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6OCxjb25zdHM6W1sicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiLCJmb2N1c2FibGUiLCJmYWxzZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywibmdTd2l0Y2giXSxbInN2ZyIsIiJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMywiYW5pbWF0aW9uLW5hbWUiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLCJ0cmFuc2Zvcm0tb3JpZ2luIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsInRyYW5zZm9ybS1vcmlnaW4iLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LGUpezEmdCYmKGpuKCksZygwLCJzdmciLDAsMSksRSgyLGVGZSwxLDExLCJjaXJjbGUiLDIpLEUoMyx0RmUsMSw5LCJjaXJjbGUiLDMpLHYoKSksMiZ0JiYoT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYigibmdTd2l0Y2giLCJpbmRldGVybWluYXRlIj09PWUubW9kZSksemUoInZpZXdCb3giLGUuX2dldFZpZXdCb3goKSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsITEpKX0sZGVwZW5kZW5jaWVzOltocixJcl0sc3R5bGVzOlsiLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgMjI1bXMgbGluZWFyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzdmcsLm1hdC1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIGNpcmNsZXthbmltYXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSk7dmFyIGt1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbixrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBhRmUobix0KXtpZigxJm4mJihnKDAsImIiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCkuJGltcGxpY2l0O3goMSkscWUoIiIsZS5kaXNwbGF5QWxpYXMsIjoiKX19ZnVuY3Rpb24gbEZlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwyKSgxLCJzcGFuIiwzKSxFKDIsYUZlLDIsMSwiYiIsNCksRCgzKSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJ2YWx1ZSIsZS52YWx1ZSkoImRpc2FibGVkIixlLmRpc2FibGVkKSx4KDEpLEdFKCJ0aXRsZSIsIiIsZS5kaXNwbGF5QWxpYXMsIjogIixlLmRpc3BsYXlUZXh0LCIiKSx4KDEpLGIoIm5nSWYiLGUuZGlzcGxheUFsaWFzKSx4KDEpLHFlKCIgIixlLmRpc3BsYXlUZXh0LCIgIil9fXZhciBGbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXSxbMSwib3B0aW9uLWNvbnRlbnQiLDMsInRpdGxlIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC1zZWxlY3QiLDApLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoby52YWx1ZSl9KSxFKDEsbEZlLDQsNiwibWF0LW9wdGlvbiIsMSksdigpKSwyJmUmJihiKCJ2YWx1ZSIsaS52YWx1ZSkseCgxKSxiKCJuZ0Zvck9mIixpLm9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSxKcCx1YV0sc3R5bGVzOlsibWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweH1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG99ICAubWF0LXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW9wdGlvbntoZWlnaHQ6YXV0b30gIC5tYXQtb3B0aW9uLXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5vcHRpb24tY29udGVudFtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSJdfSksbn0pKCk7ZnVuY3Rpb24gdUZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzMikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLnJhbmdlU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgUmFuZ2UgU2VsZWN0aW9uICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKTt4KDEpLGIoImNoZWNrZWQiLGUuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSl9fWZ1bmN0aW9uIGRGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzMpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5saW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksRCgyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJjaGVja2VkIixlLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSkseCgxKSxxZSgiTGluayBieSBzdGVwICIsZS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKX19dmFyIHBGZT1mdW5jdGlvbihuKXtyZXR1cm57ImNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlIjohMCwidG9nZ2xlLW9wZW5lZCI6bn19O2Z1bmN0aW9uIGhGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMzQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVPdXRUb2dnbGVkLmVtaXQoKSl9KSxOKDEsIm1hdC1pY29uIiwzNSksRCgyLCIgRWRpdCBUYWJsZSBDb2x1bW5zICIpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigibmdDbGFzcyIsSG4oMSxwRmUsZS5pc1NsaWRlT3V0TWVudU9wZW4pKX19ZnVuY3Rpb24gZkZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwyNikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuc3RlcFNlbGVjdG9yVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgc3RlcCBzZWxlY3Rpb24gYW5kIGRhdGEgdGFibGUgIiksdigpLGcoMywic3BhbiIsMjgpLEQoNCwiKFNjYWxhcnMgb25seSkiKSx2KCksRSg1LHVGZSwzLDIsImRpdiIsMjkpLEUoNixkRmUsMywzLCJkaXYiLDMwKSxFKDcsaEZlLDMsMywiYnV0dG9uIiwzMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoInRpdGxlIixlLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIikseCgxKSxiKCJjaGVja2VkIixlLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhZS5pc0F4aXNUeXBlU3RlcCgpKSx4KDQpLGIoIm5nSWYiLGUuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQpLHgoMSksYigibmdJZiIsZS5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCkseCgxKSxiKCJuZ0lmIixlLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpfX1mdW5jdGlvbiBtRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzZWN0aW9uIiwzNikoMSwiaDMiLDEpLEQoMiwiSW1hZ2VzIiksdigpLGcoMywiZGl2IiwzNykoNCwiZGl2IiwzOCksRCg1LCJCcmlnaHRuZXNzIiksdigpLGcoNiwiZGl2Iiw4KSg3LCJtYXQtc2xpZGVyIiwzOSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSx2KCksZyg4LCJidXR0b24iLDQwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQnJpZ2h0bmVzc1Jlc2V0LmVtaXQoKSl9KSxOKDksIm1hdC1pY29uIiwxMSksdigpKCkoKSxnKDEwLCJkaXYiLDQxKSgxMSwiZGl2Iiw0MiksRCgxMiwiQ29udHJhc3QiKSx2KCksZygxMywiZGl2Iiw4KSgxNCwibWF0LXNsaWRlciIsNDMpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5lbWl0KHIudmFsdWUpKX0pLHYoKSxnKDE1LCJidXR0b24iLDQ0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RSZXNldC5lbWl0KCkpfSksTigxNiwibWF0LWljb24iLDExKSx2KCkoKSgpLGcoMTcsImRpdiIsNDUpKDE4LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLEQoMTksIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goNyksYigibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpKCJ0aHVtYkxhYmVsIiwhMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLHgoNyksYigibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSx4KDQpLGIoImNoZWNrZWQiLGUuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fXZhciBMbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmxvY2FsZT1lLHRoaXMubGlua2VkVGltZVRvZ2dsZWQ9bmV3IEcsdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLnN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEcsdGhpcy5yYW5nZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5vblNsaWRlT3V0VG9nZ2xlZD1uZXcgRyx0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6bW8uQUxQSEFCRVRJQ0FMLGRpc3BsYXlUZXh0OiJBbHBoYWJldGljYWwifSx7dmFsdWU6bW8uQVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJBc2NlbmRpbmcifSx7dmFsdWU6bW8uREVTQ0VORElORyxkaXNwbGF5VGV4dDoiRGVzY2VuZGluZyJ9LHt2YWx1ZTptby5ORUFSRVNULGRpc3BsYXlUZXh0OiJOZWFyZXN0IFBpeGVsIn0se3ZhbHVlOm1vLk5FQVJFU1RfWSxkaXNwbGF5VGV4dDoiTmVhcmVzdCBZIn1dLHRoaXMudG9vbHRpcFNvcnRDaGFuZ2VkPW5ldyBHLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBHLHRoaXMuWEF4aXNUeXBlPVlpLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6WWkuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpZaS5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6WWkuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT03MzUsdGhpcy5NSU5fQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9MzM1LHRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5jYXJkV2lkdGhDaGFuZ2VkPXRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLmNhcmRXaWR0aFJlc2V0PW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOk9yLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOk9yLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgRyx0aGlzLnNjYWxhclNtb290aGluZ0NoYW5nZWQ9dGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkPW5ldyBHLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUoemMoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKHpjKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBHLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEd9b25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKXtsZXQgaT1lLnRhcmdldDtpZighaS52YWx1ZSlyZXR1cm47bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGkudmFsdWUpKSwuOTk5KTtyIT09cGFyc2VGbG9hdChpLnZhbHVlKSYmKGkudmFsdWU9U3RyaW5nKHIpKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KHIpfWZvcm1hdE1pbGxpVG9aZXJvdGgoZSl7cmV0dXJuIEEzKGUvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfWdldExpbmtlZFRpbWVTZWxlY3Rpb25TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkfHxudWxsPT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHxudWxsIT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8iIjp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcH1pc0F4aXNUeXBlU3RlcCgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVlpLlNURVB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZDoiaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQiLGlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkOiJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsaXNMaW5rZWRUaW1lRW5hYmxlZDoiaXNMaW5rZWRUaW1lRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsc3RlcE1pbk1heDoic3RlcE1pbk1heCIsaXNTbGlkZU91dE1lbnVPcGVuOiJpc1NsaWRlT3V0TWVudU9wZW4iLGlzSW1hZ2VTdXBwb3J0RW5hYmxlZDoiaXNJbWFnZVN1cHBvcnRFbmFibGVkIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLGNhcmRNaW5XaWR0aDoiY2FyZE1pbldpZHRoIixoaXN0b2dyYW1Nb2RlOiJoaXN0b2dyYW1Nb2RlIixzY2FsYXJTbW9vdGhpbmc6InNjYWxhclNtb290aGluZyIsc2NhbGFyUGFydGl0aW9uWDoic2NhbGFyUGFydGl0aW9uWCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsaW1hZ2VDb250cmFzdEluTWlsbGk6ImltYWdlQ29udHJhc3RJbk1pbGxpIixpbWFnZVNob3dBY3R1YWxTaXplOiJpbWFnZVNob3dBY3R1YWxTaXplIn0sb3V0cHV0czp7bGlua2VkVGltZVRvZ2dsZWQ6ImxpbmtlZFRpbWVUb2dnbGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZDoibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NDMsdmFyczoyMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGNhcmQgd2lkdGgiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsInNjYWxhcnMiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXNtb290aGluZyJdLFsiaWQiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIwIiwic3RlcCIsIjAuMDAxIiwxLCJzbGlkZXItaW5wdXQiLDMsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udHJvbC1yb3ciLCJ0b29sdGlwLXNvcnQiXSxbMSwiY29udHJvbC1uYW1lIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1pZ25vcmUtb3V0bGllcnMiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtcGFydGl0aW9uLXgiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCIsInRpdGxlIiwiTm9uLW1vbm90b25pYyBzdGVwcyBjYW4gb2NjdXIgd2hlbiByZXVzaW5nIGEgbG9nZGlyIHdpdGggbXVsdGlwbGUgc3VtbWFyeSB3cml0ZXJzIGFuZCBvdmVybGFwcGluZyBzdGVwcy4gTGluZSBjaGFydHMsIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCwgY2FuIGFwcGVhciB6aWcgemFnZ2VkLiBUaGlzIGlzIGNvbW1vbiB3aGVuIHJlc3RhcnRpbmcgZnJvbSBhIGNoZWNrcG9pbnQuXG5cbldoZW4gZW5hYmxlZCwgYSBub24tbW9ub3RvbmljIHRpbWUgc2VyaWVzIGNvbXBvc2VkIG9mIE4gbW9ub3RvbmljIHBpZWNlcyB3aWxsIGJlIHNob3duIGFzIE4gbW9ub3RvbmljIGxpbmVzLiIsMSwiaW5mbyJdLFsxLCJIaXN0b2dyYW1zIl0sWzEsImNvbnRyb2wtcm93IiwiaGlzdG9ncmFtLW1vZGUiXSxbImNsYXNzIiwiaW1hZ2UiLDQsIm5nSWYiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIl0sWzMsImNoZWNrZWQiLCJkaXNhYmxlZCIsImNoYW5nZSJdLFsxLCJpbmRlbnQiXSxbImNsYXNzIiwiaW5kZW50IHJhbmdlLXNlbGVjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBsaW5rZWQtdGltZSBpbmRlbnQiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1jb250cmFzdCJdLFsiaWQiLCJpbWFnZS1jb25zdHJhc3QtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZXNldCBjb250cmFzdCIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLXNob3ctYWN0dWFsLXNpemUiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzZWN0aW9uIiwwKSgxLCJoMyIsMSksRCgyLCJHZW5lcmFsIiksdigpLGcoMywiZGl2IiwyKSg0LCJkaXYiLDMpLEQoNSwiSG9yaXpvbnRhbCBBeGlzIiksdigpLGcoNiwidGItZHJvcGRvd24iLDQpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkueEF4aXNUeXBlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCksRSg3LGZGZSw4LDYsImRpdiIsNSksZyg4LCJkaXYiLDYpKDksImRpdiIsNyksRCgxMCwiQ2FyZCBXaWR0aCIpLHYoKSxnKDExLCJkaXYiLDgpKDEyLCJtYXQtc2xpZGVyIiw5KSxQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDEzLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jYXJkV2lkdGhSZXNldC5lbWl0KCl9KSxOKDE0LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCkoKSxnKDE1LCJzZWN0aW9uIiwxMikoMTYsImgzIiwxKSxEKDE3LCJTY2FsYXJzIiksdigpLGcoMTgsImRpdiIsMTMpKDE5LCJkaXYiLDE0KSxEKDIwLCJTbW9vdGhpbmciKSx2KCksZygyMSwiZGl2Iiw4KSgyMiwibWF0LXNsaWRlciIsMTUpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDIzLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksdigpKCkoKSxnKDI0LCJkaXYiLDE3KSgyNSwiZGl2IiwxOCksRCgyNiwiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLHYoKSxnKDI3LCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLHYoKSgpLGcoMjgsImRpdiIsMTkpKDI5LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxEKDMwLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLHYoKSgpLGcoMzEsImRpdiIsMjEpKDMyLCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksRCgzMywiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksdigpLE4oMzQsIm1hdC1pY29uIiwyMiksdigpKCksZygzNSwic2VjdGlvbiIsMjMpKDM2LCJoMyIsMSksRCgzNywiSGlzdG9ncmFtcyIpLHYoKSxnKDM4LCJkaXYiLDI0KSgzOSwiZGl2IiwxOCksRCg0MCwiTW9kZSIpLHYoKSxnKDQxLCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCkoKSxFKDQyLG1GZSwyMCwxMywic2VjdGlvbiIsMjUpKSwyJmUmJih4KDYpLGIoInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCkseCg1KSxiKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLHgoMTApLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSx4KDEpLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx4KDQpLGIoInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucykseCgyKSxiKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSx4KDMpLGIoImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCkseCg5KSxiKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsRm5lLCRuLEVkLFpuLFRkXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowIDAgMTJweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbToxMnB4fS5jb250cm9sLW5hbWVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyOHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNldC1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjZweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjEycHg7cGFkZGluZzowIDRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM0MjUwNjZ9LnNjYWxhcnMtc21vb3RoaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTt3aWR0aDo1ZW19LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVdICAgLmluZm9bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O21hcmdpbi1sZWZ0OjVweDt3aWR0aDoxNXB4O21pbi13aWR0aDoxNXB4fW1hdC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDotOHB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MjhweDtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6MTJweH0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUubWF0LWJ1dHRvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE1cHg7bWFyZ2luLXJpZ2h0OjZweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30ubGlua2VkLXRpbWVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NXB4IDB9LmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmRlbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjI1cHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxiRmU9T2JqZWN0LmZyZWV6ZSh7U0xJREVSOkdvLlNFVFRJTkdTX1NMSURFUixURVhUOkdvLlNFVFRJTkdTX1RFWFQsVEVYVF9ERUxFVEVEOkdvLkNIQU5HRV9UT19TSU5HTEV9KSxCbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3Qob0spLHRoaXMuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGNLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGFLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVEMpLHRoaXMuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEhwKSx0aGlzLmlzTGlua2VkVGltZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KFZwKSx0aGlzLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEVWKSx0aGlzLnN0ZXBNaW5NYXgkPXRoaXMuc3RvcmUuc2VsZWN0KFNWKSx0aGlzLmlzU2xpZGVPdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3Qob0EpLHRoaXMuaXNJbWFnZVN1cHBvcnRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssaV0pPT5pKSksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KG1fKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYnUpLHRoaXMuY2FyZE1pbldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChoXyksdGhpcy5oaXN0b2dyYW1Nb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy5zY2FsYXJTbW9vdGhpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHZkKSx0aGlzLnNjYWxhclBhcnRpdGlvblgkPXRoaXMuc3RvcmUuc2VsZWN0KCREKSx0aGlzLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdCh0QSksdGhpcy5pbWFnZVNob3dBY3R1YWxTaXplJD10aGlzLnN0b3JlLnNlbGVjdChuQSl9b25Ub29sdGlwU29ydENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChjUCh7c29ydDplfSkpfW9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1UCgpKX1vblhBeGlzVHlwZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChkUCh7eEF4aXNUeXBlOmV9KSl9b25DYXJkV2lkdGhDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocFAoe2NhcmRNaW5XaWR0aDplfSkpfW9uQ2FyZFdpZHRoUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGhQKCkpfW9uSGlzdG9ncmFtTW9kZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh4UCh7aGlzdG9ncmFtTW9kZTplfSkpfW9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGZQKHtzbW9vdGhpbmc6ZX0pKX1vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChtUCgpKX1vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1Aoe2JyaWdodG5lc3NJbk1pbGxpOmV9KSl9b25JbWFnZUJyaWdodG5lc3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godlAoKSl9b25JbWFnZUNvbnRyYXN0UmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHlQKCkpfW9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX1Aoe2NvbnRyYXN0SW5NaWxsaTplfSkpfW9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJQKCkpfW9uTGlua2VkVGltZVRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFBQKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblJhbmdlU2VsZWN0aW9uVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT1Aoe2FmZm9yZGFuY2U6V2EuQ0hFQ0tfQk9YfSkpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoe3RpbWVTZWxlY3Rpb246ZSxzb3VyY2U6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goe3RpbWVTZWxlY3Rpb246ZSxhZmZvcmRhbmNlOmJGZVtpXX0pKX1vblNsaWRlT3V0VG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFAoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoyMix2YXJzOjYzLGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJjYXJkTWluV2lkdGgiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIiwiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIiwiaXNMaW5rZWRUaW1lRW5hYmxlZCIsImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE1pbk1heCIsImlzU2xpZGVPdXRNZW51T3BlbiIsInRvb2x0aXBTb3J0Q2hhbmdlZCIsImlnbm9yZU91dGxpZXJzQ2hhbmdlZCIsInhBeGlzVHlwZUNoYW5nZWQiLCJjYXJkV2lkdGhDaGFuZ2VkIiwiY2FyZFdpZHRoUmVzZXQiLCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsInNjYWxhclNtb290aGluZ0NoYW5nZWQiLCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLCJpbWFnZUNvbnRyYXN0UmVzZXQiLCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsImxpbmtlZFRpbWVUb2dnbGVkIiwibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJzdGVwU2VsZWN0b3JUb2dnbGVkIiwicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIiwib25TbGlkZU91dFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCIsMCksUCgidG9vbHRpcFNvcnRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvb2x0aXBTb3J0Q2hhbmdlZChvKX0pKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKCJ4QXhpc1R5cGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblhBeGlzVHlwZUNoYW5nZWQobyl9KSgiY2FyZFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DYXJkV2lkdGhDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2FyZFdpZHRoUmVzZXQoKX0pKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChvKX0pKCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0NoYW5nZWQobyl9KSgic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpfSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQnJpZ2h0bmVzc1Jlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKX0pKCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQ29udHJhc3RSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkoImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKX0pKCJsaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSgibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgic3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKX0pKCJyYW5nZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKX0pKCJvblNsaWRlT3V0VG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNsaWRlT3V0VG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksdigpKSwyJmUmJmIoImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsVygxLDIxLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsVygyLDIzLGkudG9vbHRpcFNvcnQkKSkoImlnbm9yZU91dGxpZXJzIixXKDMsMjUsaS5pZ25vcmVPdXRsaWVycyQpKSgieEF4aXNUeXBlIixXKDQsMjcsaS54QXhpc1R5cGUkKSkoImNhcmRNaW5XaWR0aCIsVyg1LDI5LGkuY2FyZE1pbldpZHRoJCkpKCJoaXN0b2dyYW1Nb2RlIixXKDYsMzEsaS5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFcoNywzMyxpLnNjYWxhclNtb290aGluZyQpKSgic2NhbGFyUGFydGl0aW9uWCIsVyg4LDM1LGkuc2NhbGFyUGFydGl0aW9uWCQpKSgiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsVyg5LDM3LGkuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFcoMTAsMzksaS5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsVygxMSw0MSxpLmltYWdlU2hvd0FjdHVhbFNpemUkKSkoImlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkIixXKDEyLDQzLGkuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQkKSkoImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIixXKDEzLDQ1LGkuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLFcoMTQsNDcsaS5pc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLFcoMTUsNDksaS5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixXKDE2LDUxLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkKSkoImlzTGlua2VkVGltZUVuYWJsZWQiLFcoMTcsNTMsaS5pc0xpbmtlZFRpbWVFbmFibGVkJCkpKCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixXKDE4LDU1LGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxOSw1NyxpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInN0ZXBNaW5NYXgiLFcoMjAsNTksaS5zdGVwTWluTWF4JCkpKCJpc1NsaWRlT3V0TWVudU9wZW4iLFcoMjEsNjEsaS5pc1NsaWRlT3V0TWVudU9wZW4kKSl9LGRlcGVuZGVuY2llczpbTG5lLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxWbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTigwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkZXBlbmRlbmNpZXM6W0JuZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gd0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBNRmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIFNGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gRUZlKG4sdCl7MSZuJiZOKDAsImRpdiIsNSl9dmFyIEJQPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkNvbHVtbkhlYWRlclR5cGU9bXR9Z2V0SGVhZGVyVGV4dENvbHVtbihlKXtzd2l0Y2goZSl7Y2FzZSBtdC5SVU46cmV0dXJuIlJ1biI7Y2FzZSBtdC5WQUxVRTpyZXR1cm4iVmFsdWUiO2Nhc2UgbXQuU1RFUDpyZXR1cm4iU3RlcCI7Y2FzZSBtdC5USU1FOnJldHVybiJUaW1lIjtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIlJlbGF0aXZlIjtjYXNlIG10LlNNT09USEVEOnJldHVybiJTbW9vdGhlZCI7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIlZhbHVlIjtjYXNlIG10LlNUQVJUX1NURVA6cmV0dXJuIlN0YXJ0IFN0ZXAiO2Nhc2UgbXQuRU5EX1NURVA6cmV0dXJuIkVuZCBTdGVwIjtjYXNlIG10LlNUQVJUX1ZBTFVFOnJldHVybiJTdGFydCBWYWx1ZSI7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIkVuZCBWYWx1ZSI7Y2FzZSBtdC5NSU5fVkFMVUU6cmV0dXJuIk1pbiI7Y2FzZSBtdC5NQVhfVkFMVUU6cmV0dXJuIk1heCI7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4iJSI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4iU3RlcCBhdCBNYXgiO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIlN0ZXAgYXQgTWluIjtjYXNlIG10Lk1FQU46cmV0dXJuIk1lYW4iO2Nhc2UgbXQuUkFXX0NIQU5HRTpyZXR1cm4iUmVhbCBWYWx1ZSI7ZGVmYXVsdDpyZXR1cm4iIn19Z2V0U3BlY2lhbFR5cGVDbGFzc2VzKGUpe3N3aXRjaChlKXtjYXNlIG10LlNURVBfQVRfTUlOOnJldHVybiJzdGVwLWF0LW1pbiI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4ic3RlcC1hdC1tYXgiO2RlZmF1bHQ6cmV0dXJuIiJ9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXRhLXRhYmxlLWhlYWRlciJdXSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIn0sZGVjbHM6Nyx2YXJzOjYsY29uc3RzOltbMSwiaGVhZGVyLWNvbnRhaW5lciIsMywibmdTd2l0Y2giXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZXh0cmEtcmlnaHQtcGFkZGluZyIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Il0sWzEsImV4dHJhLXJpZ2h0LXBhZGRpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRSgxLHdGZSwxLDAsIm1hdC1pY29uIiwxKSxFKDIsTUZlLDEsMCwibWF0LWljb24iLDEpLEUoMyxTRmUsMSwwLCJtYXQtaWNvbiIsMSksRSg0LEVGZSwxLDAsImRpdiIsMiksZyg1LCJzcGFuIiwzKSxEKDYpLHYoKSgpKSwyJmUmJihiKCJuZ1N3aXRjaCIsaS5oZWFkZXIudHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5WQUxVRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUEVSQ0VOVEFHRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUkFXX0NIQU5HRSkseCgyKSxiKCJuZ0NsYXNzIixpLmdldFNwZWNpYWxUeXBlQ2xhc3NlcyhpLmhlYWRlci50eXBlKSkseCgxKSx5dChpLmdldEhlYWRlclRleHRDb2x1bW4oaS5oZWFkZXIudHlwZSkpKX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxabl0sc3R5bGVzOlsiLmhlYWRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjEycHh9LnN0ZXAtYXQtbWluW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MzdweH0uc3RlcC1hdC1tYXhbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo0MHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gVEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw5KSxQKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmRyYWdTdGFydChvKSl9KSgiZHJhZ2VuZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbmQocikpfSkoImRyYWdlbnRlciIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQscz1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbnRlcihvLHMpKX0pLGcoMSwibWF0LWNoZWNrYm94IiwxMCksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oKS5kYXRhVGFibGVNb2RlO3JldHVybiBvZShNKCkudG9nZ2xlSGVhZGVyKG8scykpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMTEpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigibmdDbGFzcyIsTSgyKS5nZXRIaWdobGlnaHRDbGFzc2VzKGUpKSx4KDEpLGIoImNoZWNrZWQiLGUuZW5hYmxlZCkseCgxKSxiKCJoZWFkZXIiLGUpfX1mdW5jdGlvbiBERmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNyksRSgxLFRGZSwzLDMsImRpdiIsOCksdigpKSwyJm4pe2xldCBlPXQuaGVhZGVyczt4KDEpLGIoIm5nRm9yT2YiLGUpfX12YXIgVW5lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue2hlYWRlcnM6bixkYXRhVGFibGVNb2RlOnR9fSx0SD1uPT57bi5wcmV2ZW50RGVmYXVsdCgpfSxBRmU9KG4sdCxlKT0+e2xldCBpPVsuLi5lXTtyZXR1cm4gaS5zcGxpY2UobiwxKSxpLnNwbGljZSh0LDAsZVtuXSksaX0sVlA9KG4sdCk9PnQuZmluZEluZGV4KGU9PmUudHlwZT09PW4pLGFoPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5UT1A9MF09IlRPUCIsbltuLkJPVFRPTT0xXT0iQk9UVE9NIn0oYWh8fChhaD17fSkpLGFoKSkoKSx6bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5EYXRhVGFibGVNb2RlPV9vLHRoaXMuaGlnaGxpZ2h0RWRnZT1haC5UT1AsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdD1uZXcgRyx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBHLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZD1uZXcgRyx0aGlzLm9uVGFiQ2hhbmdlPW5ldyBHfW5nT25EZXN0cm95KCl7dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9dGFiQ2hhbmdlKGUpe3RoaXMub25UYWJDaGFuZ2UuZW1pdCgwPT09ZS5pbmRleD9fby5TSU5HTEU6X28uUkFOR0UpfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VuZChlKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGV8fCF0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSlyZXR1cm47bGV0IGk9dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShlKTt0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0LmVtaXQoe2RhdGFUYWJsZU1vZGU6ZSxoZWFkZXJzOkFGZShWUCh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSxpKSxWUCh0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSxpKSxpKX0pLHRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlPXZvaWQgMCx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT12b2lkIDAsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VudGVyKGUsaSl7aWYoIXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlKXJldHVybjtsZXQgcj10aGlzLmdldEhlYWRlcnNGb3JNb2RlKGkpO3RoaXMuaGlnaGxpZ2h0RWRnZT1WUChlLnR5cGUscik8VlAodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUscik/YWguVE9QOmFoLkJPVFRPTSx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT1lLnR5cGV9dG9nZ2xlSGVhZGVyKGUsaSl7dGhpcy5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZC5lbWl0KHtkYXRhVGFibGVNb2RlOmksaGVhZGVyVHlwZTplLnR5cGV9KX1nZXRIaWdobGlnaHRDbGFzc2VzKGUpe3JldHVybiBlLnR5cGUhPT10aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT97fTp7aGlnaGxpZ2h0ZWQ6ITAsImhpZ2hsaWdodC10b3AiOnRoaXMuaGlnaGxpZ2h0RWRnZT09PWFoLlRPUCwiaGlnaGxpZ2h0LWJvdHRvbSI6dGhpcy5oaWdobGlnaHRFZGdlPT09YWguQk9UVE9NfX1nZXRTZWxlY3RlZFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWI9PT1fby5TSU5HTEU/MDoxfWdldEhlYWRlcnNGb3JNb2RlKGUpe3JldHVybiBlPT09X28uU0lOR0xFP3RoaXMuc2luZ2xlSGVhZGVyczp0aGlzLnJhbmdlSGVhZGVyc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMiLHNlbGVjdGVkVGFiOiJzZWxlY3RlZFRhYiJ9LG91dHB1dHM6e29uU2NhbGFyVGFibGVDb2x1bW5FZGl0OiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsb25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ6Im9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkOiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixvblRhYkNoYW5nZToib25UYWJDaGFuZ2UifSxkZWNsczoxMSx2YXJzOjEzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIGNvbHVtbiBlZGl0b3Iu4pCfY2I2MTZjZTliNDMyN2I0MWU2YmRiOTM0NDY2OWJhN2M3MmUyYzcwZeKQnzcyMDU2MzU3NjQ3MTMwMzQ4NDI6Q2xvc2UgY29sdW1uIGVkaXRvcmAsW1sxLCJlZGl0b3ItY29udHJvbHMiXSxbMSwidGFiLWdyb3VwIiwzLCJzZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxbMywibGFiZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImZvb3RlciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsiaGVhZGVyTGlzdCIsIiJdLFsxLCJoZWFkZXItbGlzdCJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiwiZHJhZ2dhYmxlIiwidHJ1ZSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZHJhZ2dhYmxlIiwidHJ1ZSIsMSwiaGVhZGVyLWxpc3QtaXRlbSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFszLCJoZWFkZXIiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsIm1hdC10YWItZ3JvdXAiLDEpLFAoInNlbGVjdGVkVGFiQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50YWJDaGFuZ2Uobyl9KSxnKDIsIm1hdC10YWIiLDIpLE4oMywibmdDb250ZXh0IiwzKSx2KCksZyg0LCJtYXQtdGFiIiwyKSxOKDUsIm5nQ29udGV4dCIsMyksdigpKCkoKSxnKDYsImRpdiIsNCkoNywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkLmVtaXQoKX0pLEQoOCwiIENsb3NlICIpLHYoKSgpLEUoOSxERmUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSksMiZlKXtsZXQgcj1zdCgxMCk7eCgxKSxiKCJzZWxlY3RlZEluZGV4IixpLmdldFNlbGVjdGVkVGFiSW5kZXgoKSkseCgxKSxiKCJsYWJlbCIsIlNpbmdsZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0byg3LFVuZSxpLnNpbmdsZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlNJTkdMRSkpLHgoMSksYigibGFiZWwiLCJSYW5nZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0bygxMCxVbmUsaS5yYW5nZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlJBTkdFKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLE5vLEJQLEVkLGhJLGF3LCRuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgICAubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6MDtwYWRkaW5nOjAgMzBweH0uZWRpdG9yLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gNDVweCl9LnRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowO2hlaWdodDoxMDAlfS5oZWFkZXItbGlzdFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1JTttYXJnaW4tbGVmdDo1JX0uaGVhZGVyLWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9LmhpZ2hsaWdodGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LmhpZ2hsaWdodC1ib3R0b21bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNmZjk4MDB9LmhpZ2hsaWdodC10b3BbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MnB4IHNvbGlkICNmZjk4MDB9LmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6NHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5mb290ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2lkdGg6ODRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9ICAubWF0LXRhYi1ib2R5LXdyYXBwZXJ7ZmxleDoxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksam5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2luZ2xlSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMucmFuZ2VIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChfXyksdGhpcy5zZWxlY3RlZFRhYiQ9dGhpcy5zdG9yZS5zZWxlY3QocFopfW9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUlAoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0KGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJQKCkpfW9uVGFiQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaVAoe3RhYjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJzaW5nbGVIZWFkZXJzIiwicmFuZ2VIZWFkZXJzIiwic2VsZWN0ZWRUYWIiLCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0Iiwib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsIm9uVGFiQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yLWNvbXBvbmVudCIsMCksUCgib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKG8pfSkoIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdChvKX0pKCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKX0pKCJvblRhYkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UYWJDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigic2luZ2xlSGVhZGVycyIsVygxLDMsaS5zaW5nbGVIZWFkZXJzJCkpKCJyYW5nZUhlYWRlcnMiLFcoMiw1LGkucmFuZ2VIZWFkZXJzJCkpKCJzZWxlY3RlZFRhYiIsVygzLDcsaS5zZWxlY3RlZFRhYiQpKX0sZGVwZW5kZW5jaWVzOlt6bmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJGZT1ZKHJaLGVtLChuLHQpPT5uZXcgU2V0KE9iamVjdC5lbnRyaWVzKG4uc2NhbGFycy50YWdUb1J1bnMpLmZpbHRlcigoWyxlXSk9PiF0fHwhdC5zaXplfHxlLnNvbWUoaT0+dD8uZ2V0KGkpKSkubWFwKChbZV0pPT5lKSkpLE9GZT1ZKFpELGVtLGRaLFJGZSwobix0LGUsaSk9PntsZXQgcj1BcnJheS5mcm9tKHQ/LnZhbHVlcygpfHxbXSkuc29tZShCb29sZWFuKTtyZXR1cm4gbi5maWx0ZXIobz0+emEoby5wbHVnaW4pP0Jvb2xlYW4odCYmdC5nZXQoby5ydW5JZCkpOiFlfHwhcnx8by5wbHVnaW4hPT1Xbi5TQ0FMQVJTfHxpLmhhcyhvLnRhZykpfSkseW09WShPRmUsbj0+bi5zb3J0KCh0LGUpPT5idyh0LnRhZyxlLnRhZykpKSxtdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5yZWY9ZSx0aGlzLmNka1Njcm9sbGFibGU9aSx0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uRXZlbnQkPW5ldyBUZX1uZ09uSW5pdCgpe2xldCBlPXtyb290OnRoaXMuY2RrU2Nyb2xsYWJsZT90aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ6bnVsbH07dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiYmKGUucm9vdE1hcmdpbj10aGlzLmludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luKTtsZXQgaT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocj0+e3RoaXMub25FdmVudCQubmV4dChyKX0sZSk7aS5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUodGhpcy5yZWYubmF0aXZlRWxlbWVudCl9KSx0aGlzLm9uRXZlbnQkLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShyPT57bGV0IG89ci5zbGljZSgtMSlbMF07dGhpcy5vblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7dmlzaWJsZTpvLmlzSW50ZXJzZWN0aW5nfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX13YWl0Rm9yRXZlbnRGb3JUZXN0T25seSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT50aGlzLm9uRXZlbnQkLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e2UoKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhZcCw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiXV0saW5wdXRzOntpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbjoiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4ifSxvdXRwdXRzOntvblZpc2liaWxpdHlDaGFuZ2U6Im9uVmlzaWJpbGl0eUNoYW5nZSJ9fSksbn0pKCksR25lPSIvc2NhbGFyX3N1bW1hcnkiO2Z1bmN0aW9uIGd2KG4sdCl7bGV0IGU9bjtyZXR1cm4gdCYmbi5zdGFydHNXaXRoKHQrIi8iKSYmKGU9bi5zbGljZSh0Lmxlbmd0aCsxKSksZS5lbmRzV2l0aChHbmUpJiYoZT1lLnNsaWNlKDAsLUduZS5sZW5ndGgpKSxlfHxufXZhciBIUD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmhyZWZBdHRyPXZvaWQgMCx0aGlzLnNyY0F0dHI9dm9pZCAwLHRoaXMuaW5jbHVkZUZlYXR1cmVGbGFncz0hMH1nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChuXykucGlwZShCKGk9PntpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyIsSlNPTi5zdHJpbmdpZnkoaSldXSksbz1lLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm4gZStvK1N0cmluZyhyKX1yZXR1cm4gZX0pKX1zZXQgaHJlZihlKXtlJiZQUyh0aGlzLmdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSkpLnRoZW4oaT0+e3RoaXMuaHJlZkF0dHI9aX0pfXNldCBzcmMoZSl7ZSYmUFModGhpcy5nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpKS50aGVuKGk9Pnt0aGlzLnNyY0F0dHI9aX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl0sWyJpbWciLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaHJlZiIsaS5ocmVmQXR0cixkbCkoInNyYyIsaS5zcmNBdHRyLGRsKX0saW5wdXRzOntpbmNsdWRlRmVhdHVyZUZsYWdzOiJpbmNsdWRlRmVhdHVyZUZsYWdzIixocmVmOiJocmVmIixzcmM6InNyYyJ9fSksbn0pKCksa0ZlPVsibWVhc3VyZXIiXSxGRmU9WyJpbnB1dCJdLHFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuc3R5bGU9ImRlZmF1bHQiLHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAoIi4qIiksdGhpcy5pc1ZhbGlkPSEwLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmJsdXI9bmV3IEcsdGhpcy5mb2N1cz1uZXcgRyx0aGlzLmtleWRvd249bmV3IEcsdGhpcy5rZXl1cD1uZXcgRyx0aGlzLmludGVybmFsVmFsdWU9IiIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXI9dGhpcy51cGRhdGVJbnB1dFdpZHRoLmJpbmQodGhpcyl9bmdPbkluaXQoKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uRGVzdHJveSgpe2RvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkaW5nZG9uZSIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXIpfW5nT25DaGFuZ2VzKGUpe2UucGF0dGVybiYmKHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuPz8iIikpLGUudmFsdWUmJih0aGlzLmludGVybmFsVmFsdWU9dGhpcy52YWx1ZSksdGhpcy5pc1ZhbGlkPXRoaXMucGF0dGVyblJlZ2V4LnRlc3QodGhpcy5pbnRlcm5hbFZhbHVlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX1vbklucHV0KGUpe2xldCBpPXRoaXMuaW50ZXJuYWxWYWx1ZTt0aGlzLmludGVybmFsVmFsdWU9dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5pbnRlcm5hbFZhbHVlIT09aSYmKHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSksdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3ZhbHVlOnRoaXMuaW50ZXJuYWxWYWx1ZX0pfXVwZGF0ZUlucHV0V2lkdGgoKXtsZXR7d2lkdGg6ZX09dGhpcy5tZWFzdXJlckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjb250ZW50LXdyYXBwaW5nLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGtGZSw3LEFlKSxsdChGRmUsNyxBZSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWVhc3VyZXJFbFJlZj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5pbnB1dEVsUmVmPXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmVhKGkuc3R5bGUpfSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixzdHlsZToic3R5bGUiLHBhdHRlcm46InBhdHRlcm4ifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIixibHVyOiJibHVyIixmb2N1czoiZm9jdXMiLGtleWRvd246ImtleWRvd24iLGtleXVwOiJrZXl1cCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWVhc3VyZXIiXSxbIm1lYXN1cmVyIiwiIl0sWyJhdXRvY29tcGxldGUiLCJvZmYiLCJzcGVsbGNoZWNrIiwiZmFsc2UiLCJ0eXBlIiwidGV4dCIsMywidmFsdWUiLCJwbGFjZWhvbGRlciIsImJsdXIiLCJmb2N1cyIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwic3BhbiIpKDEsInNwYW4iLDAsMSksRCgzKSx2KCksZyg0LCJpbnB1dCIsMiwzKSxQKCJibHVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5ibHVyLmVtaXQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZvY3VzLmVtaXQobyl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5ZG93bi5lbWl0KG8pfSkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5rZXl1cC5lbWl0KG8pfSksdigpKCkpLDImZSYmKGF0KCJjb250YWluZXIiLCEwKSgiaXMtdmFsaWQiLGkuaXNWYWxpZCkseCgzKSx5dChpLmludGVybmFsVmFsdWV8fGkucGxhY2Vob2xkZXIpLHgoMSksYigidmFsdWUiLGkudmFsdWUpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6bWF4LWNvbnRlbnR9W19uZ2hvc3QtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2Y1N2MwMH0uZGVmYXVsdFtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYn0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKXtib3JkZXItY29sb3I6I2VmOWE5YX0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIC5lcnJvcltfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpob3ZlciwgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOm5vdCguaXMtdmFsaWQpOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6I2VmOWE5YX0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2JkYmRiZH0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItY29sb3I6Izc1NzU3NX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7cGFkZGluZzoxcHggMnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZWFzdXJlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbn0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdLCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzowO3doaXRlLXNwYWNlOnByZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5LCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7d2lkdGg6MmNofWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdDtvdXRsaW5lOjB9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze3BhZGRpbmctcmlnaHQ6MWNofSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiY29udGVudC13cmFwcGluZy1pbnB1dCIsMyksUCgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5hbGlhc0NoYW5nZWQuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7cGwoZS5pc0FsaWFzTmFtZUxlZ2FsPyJoaWdoLWNvbnRyYXN0IjoiZXJyb3IiKSxiKCJ2YWx1ZSIsZS5hbGlhcy5hbGlhc1RleHQpfX1mdW5jdGlvbiBCRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTthdCgiaWxsZWdhbCIsIWUuaXNBbGlhc05hbWVMZWdhbCksYigidGl0bGUiLGUudGl0bGUpLHgoMSkseXQoZS5hbGlhcy5hbGlhc1RleHQpfX12YXIgX3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNBbGlhc05hbWVMZWdhbD0hMCx0aGlzLmFsaWFzQ2hhbmdlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZXhwZXJpbWVudC1hbGlhcyJdXSxpbnB1dHM6e2FsaWFzOiJhbGlhcyIsYWxpYXNFZGl0YWJsZToiYWxpYXNFZGl0YWJsZSIsdGl0bGU6InRpdGxlIixpc0FsaWFzTmFtZUxlZ2FsOiJpc0FsaWFzTmFtZUxlZ2FsIn0sb3V0cHV0czp7YWxpYXNDaGFuZ2VkOiJhbGlhc0NoYW5nZWQifSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJhbGlhcy1udW1iZXIiXSxbInBsYWNlaG9sZGVyIiwiQWxpYXMgZm9yIGV4cGVyaW1lbnQiLDMsInN0eWxlIiwidmFsdWUiLCJvblZhbHVlQ2hhbmdlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRWRpdEFsaWFzTmFtZSIsIiJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywidmFsdWUiLCJvblZhbHVlQ2hhbmdlIl0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsTEZlLDEsMywiY29udGVudC13cmFwcGluZy1pbnB1dCIsMSksRSgzLEJGZSwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUpe2xldCByPXN0KDQpO3goMSkseXQoaS5hbGlhcy5hbGlhc051bWJlcikseCgxKSxiKCJuZ0lmIixpLmFsaWFzRWRpdGFibGUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLHFuZV0sc3R5bGVzOlsiLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojMjEyMTIxO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoycHg7cGFkZGluZzowIDJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfSJdfSksbn0pKCk7ZnVuY3Rpb24gVkZlKG4sdCl7MSZuJiZOKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDIpLDImbiYmYigiYWxpYXMiLE0oKS5leHBlcmltZW50QWxpYXMpfWZ1bmN0aW9uIEhGZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiLyIpLHYoKSl9dmFyIFluZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxWRmUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxFKDEsSEZlLDIsMCwic3BhbiIsMSksZygyLCJzcGFuIiksRCgzKSx2KCkpLDImZSYmKGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDEpLGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDIpLHl0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W1hlLF92XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVVA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChjQSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShCKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpXSkucGlwZShCKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJihiKCJuYW1lIixXKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVygzLDcsaS5leHBlcmltZW50QWxpYXMkKSksemUoInRpdGxlIixXKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6W1luZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gekZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLmZpcnN0VGV4dFBhcnQoKSl9fXZhciB2dj0oKCk9PntjbGFzcyBue3BhcnNlVmFsdWUoKXtsZXQgZT10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lP3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCxlKSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZShlKX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXRydW5jYXRlZC1wYXRoIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiZmlyc3QtdGV4dC1wYXJ0Iiw0LCJuZ0lmIl0sWzEsInNlY29uZC10ZXh0LXBhcnQiXSxbMSwiZmlyc3QtdGV4dC1wYXJ0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLHpGZSwyLDEsInNwYW4iLDApLGcoMSwic3BhbiIsMSksRCgyKSx2KCkpLDImZSYmKGIoIm5nSWYiLGkuZmlyc3RUZXh0UGFydCgpLmxlbmd0aD4wKSx4KDIpLHl0KGkuc2Vjb25kVGV4dFBhcnQoKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLG59KSgpO2Z1bmN0aW9uIGpGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMil9ZnVuY3Rpb24gR0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwzKX12YXIgeXY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNDbGlwcGVkPSExLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciXV0saW5wdXRzOntpc0NsaXBwZWQ6ImlzQ2xpcHBlZCIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siZGF0YS12YWx1ZSIsImNsaXBwZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJEYXRhIGlzIG5vdCBmb3VuZCBvbiBzZWxlY3RlZCBzdGVwLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIiw0LCJuZ0lmIl0sWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsakZlLDEsMCwibWF0LWljb24iLDApLEUoMSxHRmUsMSwwLCJtYXQtaWNvbiIsMSkpLDImZSYmKGIoIm5nSWYiLGkuaXNDbGlwcGVkKSx4KDEpLGIoIm5nSWYiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSl9LGRlcGVuZGVuY2llczpbWGUsWm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZjtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjA7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZn1bX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBXRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE5KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJTdGVwICIsVygyLDEsZS5zdGVwc1tlLnN0ZXBJbmRleF0pLCIiKX19ZnVuY3Rpb24gcUZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMCksRCgxKSxqKDIsIm51bWJlciIpLGooMywibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGFwKCJTYW1wbGUgIixXKDIsMixlLnNhbXBsZSsxKSwiLyIsVygzLDQsZS5udW1TYW1wbGUpLCIiKX19ZnVuY3Rpb24gWUZlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyMSl9ZnVuY3Rpb24gWEZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJzcGFuIiwzMCkoMiwic3BhbiIsMzEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMiksT3QoImxlZnQiLGUuc2xpZGVyU3RhcnRQb3NpdGlvbikoIndpZHRoIixlLnNsaWRlclRyYWNrV2lkdGgpfX1mdW5jdGlvbiBRRmUobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzMiksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMyk7T3QoImxlZnQiLGkuZ2V0TGlua2VkVGltZVRpY2tMZWZ0U3R5bGUoZSkpKCJtYXJnaW4tbGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja01hcmdpbkxlZnRTdHlsZShlKSl9fWZ1bmN0aW9uIEtGZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyNyksRSgxLFhGZSwzLDQsInNwYW4iLDI4KSxFKDIsUUZlLDEsNCwiZGl2IiwyOSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0lmIixudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApLHgoMSksYigibmdGb3JPZiIsZS5zZWxlY3RlZFN0ZXBzKX19dmFyIFpGZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LEpGZT1mdW5jdGlvbihuKXtyZXR1cm57ZmlsdGVyOm59fTtmdW5jdGlvbiAkRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDIyKSgyLCJtYXQtc2xpZGVyIiwyMyksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25TbGlkZXJJbnB1dChyKSl9KSx2KCksRSgzLEtGZSwzLDIsImRpdiIsMjQpLHYoKSxnKDQsImRpdiIsMjUpLE4oNSwiaW1nIiwyNiksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgyKSxiKCJuZ0NsYXNzIixIbigxMSxaRmUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSx4KDEpLGIoIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbikseCgyKSxQYigiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSx4cigic3JjIixlLmltYWdlVXJsLGRsKSxiKCJuZ1N0eWxlIixIbigxMyxKRmUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBlTmUobix0KXsxJm4mJihnKDAsImRpdiIsMzQpLEQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24gdE5lKG4sdCl7aWYoMSZuJiZFKDAsZU5lLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT1NKCk7YigibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIG5OZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxRbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1FZSx0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249IiIsdGhpcy5zbGlkZXJUcmFja1dpZHRoPSIiLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbj1udWxsLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBHLHRoaXMuc3RlcEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHfWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KGUpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQoZS52YWx1ZSl9Y2hhbmdlRGlzdGluY3QoZSl7cmV0dXJuIGUuY3VycmVudFZhbHVlIT09ZS5wcmV2aW91c1ZhbHVlfW5nT25DaGFuZ2VzKGUpeyhlLnNlbGVjdGVkU3RlcHMmJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5zZWxlY3RlZFN0ZXBzKXx8ZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZ0aGlzLmNoYW5nZURpc3RpbmN0KGUubGlua2VkVGltZVNlbGVjdGlvbikpJiZ0aGlzLnJlbmRlclJhbmdlU2xpZGVyKCl9cmVuZGVyUmFuZ2VTbGlkZXIoKXtpZighdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHwhdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApcmV0dXJuO2xldCBlPXRoaXMuc3RlcHMubGVuZ3RoLTEsaT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwPHRoaXMuc3RlcHNbMF0/dGhpcy5zdGVwc1swXTp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwLHI9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA+dGhpcy5zdGVwc1tlXT90aGlzLnN0ZXBzW2VdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwLHtzdGFydFBvc2l0aW9uOm8sd2lkdGg6c309dGhpcy5nZXRUcmFja1N0YXJ0UG9zaXRpb25BbmRXaWR0aChpLHIsZSk7dGhpcy5zbGlkZXJTdGFydFBvc2l0aW9uPTEwMCpvKyIlIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9MTAwKnMrIiUifWdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGUsaSxyKXtsZXQgbz0xL3Iscz0wLGE9MCxsPTA7Zm9yKDtsPHRoaXMuc3RlcHMubGVuZ3RoLTE7bCsrKXtsZXQgYz10aGlzLnN0ZXBzW2xdLHU9dGhpcy5zdGVwc1tsKzFdO2lmKGM8PWUmJmU8PXUpe3MrPShlLWMpLyh1LWMpO2JyZWFrfX1mb3Iocz0ocytsKSpvO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sdT10aGlzLnN0ZXBzW2wrMV07aWYoZT49YyYmaTw9dSl7YT0oaS1lKS8odS1jKTticmVha31pZihlPj1jJiZpPj11KWErPSh1LWUpLyh1LWMpO2Vsc2V7aWYoIShpPj11KSl7YSs9KGktYykvKHUtYyk7YnJlYWt9YSs9MX19cmV0dXJuIGEqPW8sKHM+MXx8czwwKSYmKHM9MCkse3N0YXJ0UG9zaXRpb246cyx3aWR0aDphfX1nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKXtpZigtMT09dGhpcy5zdGVwcy5pbmRleE9mKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGVwSW5kZXg6IHN0ZXBJbmRleCB2YWx1ZSBpcyBub3QgaW5jbHVkZWQgaW4gc3RlcHMiKTtyZXR1cm4gdGhpcy5zdGVwcy5pbmRleE9mKGUpLyh0aGlzLnN0ZXBzLmxlbmd0aC0xKSoxMDArIiUifWdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybmAtJHt0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjE0fXB4YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZC1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJhY3R1YWwtc2l6ZSIsaS5zaG93QWN0dWFsU2l6ZSl9LGlucHV0czp7bG9hZFN0YXRlOiJsb2FkU3RhdGUiLHRpdGxlOiJ0aXRsZSIsdGFnOiJ0YWciLHJ1bklkOiJydW5JZCIsc2FtcGxlOiJzYW1wbGUiLG51bVNhbXBsZToibnVtU2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwczoic3RlcHMiLGJyaWdodG5lc3NJbk1pbGxpOiJicmlnaHRuZXNzSW5NaWxsaSIsY29udHJhc3RJbk1pbGxpOiJjb250cmFzdEluTWlsbGkiLHNob3dBY3R1YWxTaXplOiJzaG93QWN0dWFsU2l6ZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsYWxsb3dUb2dnbGVBY3R1YWxTaXplOiJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsc2VsZWN0ZWRTdGVwczoic2VsZWN0ZWRTdGVwcyIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMSx2YXJzOjE2LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYW4gaW1hZ2UgY2FyZCB0aGF0IHRvZ2dsZXMgYWN0dWFsIGltYWdlIHNpemUu4pCfM2NhMDVlZjNhNmUzYTM3MDY1ZjVlMGY2OWM1ZDVhMjE3OGQ5MDc5MeKQnzc2MzUxMDE5MzY2NjQ3ODkxNDA6VG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplYCxbWzEsImhlYWRpbmciXSxbMSwibGluZSJdLFsxLCJ0YWciXSxbMSwidGFnLXBhdGgiLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwiaW1hZ2Vfc2VhcmNoXzI0cHgiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwibWV0YWRhdGEiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYW1wbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ltYWdlRGF0YSIsIiJdLFsxLCJzdGVwIl0sWzEsInNhbXBsZSJdLFsiZGlhbWV0ZXIiLCIxOCIsMSwibG9hZGluZyJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidGlja0ludGVydmFsIiwidmFsdWUiLCJpbnB1dCJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiXSxbMSwibGlua2VkLXRpbWUtd3JhcHBlciJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImxpbmtlZC10aW1lLXRpY2siLDMsImxlZnQiLCJtYXJnaW4tbGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJsaW5rZWQtdGltZS10aWNrIl0sWyJjbGFzcyIsImVtcHR5LW1lc3NhZ2UiLDQsIm5nSWYiXSxbMSwiZW1wdHktbWVzc2FnZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTig3LCJtYXQtaWNvbiIsNyksdigpLGcoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFjdHVhbFNpemVUb2dnbGUuZW1pdCgpfSksTig5LCJtYXQtaWNvbiIsOSksdigpKCkoKSxnKDEwLCJkaXYiLDEpKDExLCJzcGFuIiwxMCksTigxMiwic3BhbiIsMTEpKDEzLCJjYXJkLXJ1bi1uYW1lIiwxMiksdigpLGcoMTQsImRpdiIsMTMpLEUoMTUsV0ZlLDMsMywic3BhbiIsMTQpLEUoMTYscUZlLDQsNiwic3BhbiIsMTUpLEUoMTcsWUZlLDEsMCwibWF0LXNwaW5uZXIiLDE2KSx2KCkoKSgpLEUoMTgsJEZlLDYsMTUsIm5nLWNvbnRhaW5lciIsMTcpLEUoMTksdE5lLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTgsZW4pKSwyJmUpe2xldCByPXN0KDIwKTt4KDMpLHhyKCJ0aXRsZSIsaS50YWcpLHhyKCJ2YWx1ZSIsaS50aXRsZSkseCgxKSxiKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSx4KDIpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMSksYigiZGlzYWJsZWQiLCFpLmFsbG93VG9nZ2xlQWN0dWFsU2l6ZSkseCg0KSxiKCJuZ1N0eWxlIixIbigxNCxuTmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLGkubnVtU2FtcGxlPjEpLHgoMSksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSx3cCxIUCwkbixabix2byxUZCxVUCx2dix5dix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVde2hlaWdodDphdXRvfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHg7cG9zaXRpb246cmVsYXRpdmV9LmxpbmVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBtYXgtY29udGVudH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDo1cHh9Lm1ldGFkYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LXdpZHRoOjE3NXB4O3RleHQtYWxpZ246ZW5kfS50YWctcGF0aFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOmJhc2VsaW5lO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdLCAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RlcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdy15OmF1dG87cG9zaXRpb246cmVsYXRpdmV9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtpbWFnZS1yZW5kZXJpbmc6LW1vei1jcmlzcC1lZGdlcztpbWFnZS1yZW5kZXJpbmc6cGl4ZWxhdGVkfS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV0gICAuaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bztmbGV4Om5vbmV9W19uZ2hvc3QtJUNPTVAlXTpub3QoLmFjdHVhbC1zaXplKSAgIGltZ1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWF4LWhlaWdodDoxMDAlO21heC13aWR0aDoxMDAlO3dpZHRoOmF1dG87aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb250YWlufS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGVwLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfVtfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDowfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0ubGlua2VkLXRpbWUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDt3aWR0aDoxMDAlfS5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjE0cHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjF9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjJweDt0b3A6NnB4O3Bvc2l0aW9uOmFic29sdXRlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2xlZnQ6N3B4O3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksS25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPWksdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QodEEpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KG5BKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IFZyKHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1vblN0ZXBJbmRleENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChTUCh7Y2FyZElkOnRoaXMuY2FyZElkLHN0ZXBJbmRleDplfSkpfWlzSW1hZ2VDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09V24uSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtwbihbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbbCxjXSk9Pnt0aGlzLnNob3dBY3R1YWxTaXplPWx8fGMsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93QWN0dWFsU2l6ZSl9KSkuc3Vic2NyaWJlKCgpPT57fSk7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoU2wsdGhpcy5jYXJkSWQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxIZShsPT4hIWwmJnRoaXMuaXNJbWFnZUNhcmRNZXRhZGF0YShsKSksQihsPT5sKSxRcygxKSksbz1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksQigoW2wsY10pPT57bGV0IHU9bC5ydW5JZDtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eSh1KT9jW3VdOltdfSksZGkoKGwsYyk9PmwubGVuZ3RoPT09Yy5sZW5ndGgmJjA9PT1sLmxlbmd0aHx8bD09PWMpLFFzKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QoTVYsdGhpcy5jYXJkSWQpLnBpcGUoQihsPT5sP2wuaW5kZXg6bnVsbCkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD10aGlzLnN0b3JlLnNlbGVjdChNVix0aGlzLmNhcmRJZCkucGlwZShCKGw9PiEhbCYmbC5pc0Nsb3Nlc3QpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihsPT5sLnJ1bklkKSksdGhpcy5zYW1wbGUkPWkucGlwZShCKGw9Pmwuc2FtcGxlKSksdGhpcy5udW1TYW1wbGUkPWkucGlwZShCKGw9PmwubnVtU2FtcGxlKSksdGhpcy5zdGVwcyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc1osdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KFVwKS5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/Y18obCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcih1PT51Pj1sLnN0YXJ0U3RlcCYmdTw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPXBuKFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoQigoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoQihsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpLHcoeXUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksUCgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFcoMywyMixpLnRhZyQpKSgicnVuSWQiLFcoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFcoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixXKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixXKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixXKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixXKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixXKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVygxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFcoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVcoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFcoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFcoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W1FuZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHJyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KHJyfHwocnI9e30pKSxycikpKCksU3I9KCgpPT4oZnVuY3Rpb24obil7bltuLkxJTkVBUj0wXT0iTElORUFSIixuW24uTE9HMTA9MV09IkxPRzEwIixuW24uVElNRT0yXT0iVElNRSJ9KFNyfHwoU3I9e30pKSxTcikpKCksa3I9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJOT05FIixuLkRSQUdfWk9PTUlORz0iRFJBR19aT09NSU5HIixuLlNDUk9MTF9aT09NSU5HPSJTQ1JPTExfWk9PTUlORyIsbi5QQU5OSU5HPSJQQU5OSU5HIn0oa3J8fChrcj17fSkpLGtyKSkoKTtmdW5jdGlvbiBzTmUobix0KXsxJm4mJihnKDAsInNwYW4iKSxEKDEsInNjYWxhciIpLHYoKSl9ZnVuY3Rpb24gYU5lKG4sdCl7MSZuJiYoZygwLCJzcGFuIiksRCgxLCJoaXN0b2dyYW0iKSx2KCkpfWZ1bmN0aW9uIGxOZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwidW5rbm93biIpLHYoKSl9ZnVuY3Rpb24gY05lKG4sdCl7aWYoMSZuJiYoS3QoMCwxMyksRSgxLHNOZSwyLDAsInNwYW4iLDE0KSxFKDIsYU5lLDIsMCwic3BhbiIsMTQpLEUoMyxsTmUsMiwwLCJzcGFuIiwxNSksWnQoKSksMiZuKXtsZXQgZT1NKDIpO2IoIm5nU3dpdGNoIixlLmNhcmRNZXRhZGF0YS5wbHVnaW4pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUykseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gdU5lKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBkTmUobix0KXtpZigxJm4mJihnKDAsIm9wdGlvbiIsMTYpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx4KDEpLHl0KGUubmFtZSl9fWZ1bmN0aW9uIHBOZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImgyIiksRSgyLGNOZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLGcoNCwic3BhbiIpLEQoNSwiRG93bmxvYWRceGEwIiksdigpLEUoNix1TmUsMSwwLCJuZy1jb250YWluZXIiLDMpLGcoNywic3BhbiIpLEQoOCwiXHhhMGRhdGEgZm9yXHhhMCIpLHYoKSxnKDksImNvZGUiLDQpLEQoMTApLHYoKSgpLGcoMTEsIm1hdC1kaWFsb2ctY29udGVudCIpKDEyLCJtYXQtZm9ybS1maWVsZCIsNSkoMTMsIm1hdC1sYWJlbCIpLEQoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksdigpLGcoMTUsInNlbGVjdCIsNiksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLGcoMTYsIm9wdGlvbiIsNyksRCgxNywiLSIpLHYoKSxFKDE4LGROZSwyLDIsIm9wdGlvbiIsOCksdigpKCksZygxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLEQoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksdigpLEQoMjIsIlx4YTAiKSxnKDIzLCJhIiwxMCksRCgyNCwiSlNPTiIpLHYoKSxnKDI1LCJhIiwxMCksRCgyNiwiQ1NWIiksdigpKCkoKSxnKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksRCgyOSwiQ2xvc2UiKSx2KCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoMyksaT1NKCk7eCg2KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlKSx4KDMpLGIoInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLHgoMSkseXQoaS5jYXJkTWV0YWRhdGEudGFnKSx4KDUpLGIoInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSx4KDEpLGIoInZhbHVlIiwiIikseCgyKSxiKCJuZ0Zvck9mIixpLnJ1bnMpLHgoNSksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24sZGwpLHgoMiksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSkoImhyZWYiLGkuZG93bmxvYWRVcmxDc3YsZGwpfX1mdW5jdGlvbiBoTmUobix0KXsxJm4mJkQoMCwiTG9hZGluZy4uLiIpfXZhciBKbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEcsdGhpcy5QbHVnaW5UeXBlPVdufWdldERvd25sb2FkTmFtZShlKXtsZXQgaT10aGlzLnJ1bnMuZmluZChyPT5yLmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKTtyZXR1cm4gaT9gJHtpLm5hbWV9LiR7ZX1gOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCIsImhyZWYiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIl0sWyJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIk5nU3dpdGNoRGVmYXVsdCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEUoMCxwTmUsMzAsMTIsIm5nLWNvbnRhaW5lciIsMCksRSgxLGhOZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDEsZW4pKSwyJmUpe2xldCByPXN0KDIpO2IoIm5nSWYiLGkuY2FyZE1ldGFkYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxObyxocixJcixIUCxBJCxQJCwkbixGQSxqQSxHQSxXQSxEdSx6XyxRX10sc3R5bGVzOlsiaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksJG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IFZyKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD1lLnNlbGVjdChTbCxyLmNhcmRJZCkucGlwZShIZShvPT5Cb29sZWFuKG8pKSksdGhpcy5kb3dubG9hZFVybENzdiQ9cG4oW2Uuc2VsZWN0KFNsLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShCKChbbyxzXSk9Pm8mJnM/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxzLCJjc3YiKTpudWxsKSxWbihudWxsKSksdGhpcy5kb3dubG9hZFVybEpzb24kPXBuKFtlLnNlbGVjdChTbCxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoQigoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywianNvbiIpOm51bGwpLFZuKG51bGwpKSx0aGlzLnJ1bnMkPXBuKFtlLnNlbGVjdChDWiksZS5zZWxlY3QoTHAsci5jYXJkSWQpXSkucGlwZShCKChbbyxzXSk9PnM/T2JqZWN0LmtleXMocykubWFwKGE9Pm8uZ2V0KGEpKS5maWx0ZXIoQm9vbGVhbik6W10pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyh5dSksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksUCgicnVuU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkUnVuSWQkLm5leHQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLHYoKSksMiZlJiZiKCJjYXJkTWV0YWRhdGEiLFcoMSw1LGkuY2FyZE1ldGFkYXRhJCkpKCJydW5zIixXKDIsNyxpLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFcoMyw5LGkuc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLFcoNCwxMSxpLmRvd25sb2FkVXJsQ3N2JCkpKCJkb3dubG9hZFVybEpzb24iLFcoNSwxMyxpLmRvd25sb2FkVXJsSnNvbiQpKX0sZGVwZW5kZW5jaWVzOltKbmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJsKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIHd3KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBSbChuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgRnU9d3coUmwpLnJpZ2h0LHNIPU1hdGguc3FydCg1MCksYUg9TWF0aC5zcXJ0KDEwKSxsSD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gTXcobix0LGUpe3ZhciBpLG8scyxhLHI9LTE7aWYoZT0rZSwobj0rbik9PSh0PSt0KSYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYobz1uLG49dCx0PW8pLDA9PT0oYT1idihuLHQsZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtbisxKSk7KytyPG87KXNbcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKG4tdCsxKSk7KytyPG87KXNbcl09KG4tcikvYTtyZXR1cm4gaSYmcy5yZXZlcnNlKCksc31mdW5jdGlvbiBidihuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PXNIPzEwOm8+PWFIPzU6bz49bEg/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj1zSD8xMDpvPj1hSD81Om8+PWxIPzI6MSl9ZnVuY3Rpb24gRGQobix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PXNIP3IqPTEwOm8+PWFIP3IqPTU6bz49bEgmJihyKj0yKSx0PG4/LXI6cn12YXIgalA9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIG9pZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNTmUobil7cmV0dXJuInRyYW5zbGF0ZSgiKyhuKy41KSsiLDApIn1mdW5jdGlvbiBTTmUobil7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKG4rLjUpKyIpIn1mdW5jdGlvbiBFTmUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybituKHQpfX1mdW5jdGlvbiBUTmUobil7dmFyIHQ9TWF0aC5tYXgoMCxuLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIG4ucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24oZSl7cmV0dXJuK24oZSkrdH19ZnVuY3Rpb24gRE5lKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGFpZShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD0xPT09bnx8ND09PW4/LTE6MSxjPTQ9PT1ufHwyPT09bj8ieCI6InkiLHU9MT09PW58fDM9PT1uP01OZTpTTmU7ZnVuY3Rpb24gZChwKXt2YXIgaD1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksZj1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOm9pZSksbT1NYXRoLm1heChvLDApK2EsQz10LnJhbmdlKCksXz0rQ1swXSsuNSx5PStDW0MubGVuZ3RoLTFdKy41LEk9KHQuYmFuZHdpZHRoP1ROZTpFTmUpKHQuY29weSgpKSxBPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxPPUEuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLGVlPUEuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCx0KS5vcmRlcigpLFg9ZWUuZXhpdCgpLHhlPWVlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksZmU9ZWUuc2VsZWN0KCJsaW5lIiksdmU9ZWUuc2VsZWN0KCJ0ZXh0Iik7Tz1PLm1lcmdlKE8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLGVlPWVlLm1lcmdlKHhlKSxmZT1mZS5tZXJnZSh4ZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLHZlPXZlLm1lcmdlKHhlLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCptKS5hdHRyKCJkeSIsMT09PW4/IjBlbSI6Mz09PW4/IjAuNzFlbSI6IjAuMzJlbSIpKSxwIT09QSYmKE89Ty50cmFuc2l0aW9uKHApLGVlPWVlLnRyYW5zaXRpb24ocCksZmU9ZmUudHJhbnNpdGlvbihwKSx2ZT12ZS50cmFuc2l0aW9uKHApLFg9WC50cmFuc2l0aW9uKHApLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVCl7cmV0dXJuIGlzRmluaXRlKFQ9SShUKSk/dShUKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSx4ZS5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFQpe3ZhciBuZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KG5lJiZpc0Zpbml0ZShuZT1uZShUKSk/bmU6SShUKSl9KSksWC5yZW1vdmUoKSxPLmF0dHIoImQiLDQ9PT1ufHwyPT1uP3M/Ik0iK2wqcysiLCIrXysiSDAuNVYiK3krIkgiK2wqczoiTTAuNSwiK18rIlYiK3k6cz8iTSIrXysiLCIrbCpzKyJWMC41SCIreSsiViIrbCpzOiJNIitfKyIsMC41SCIreSksZWUuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihUKXtyZXR1cm4gdShJKFQpKX0pLGZlLmF0dHIoYysiMiIsbCpvKSx2ZS5hdHRyKGMsbCptKS50ZXh0KGYpLEEuZmlsdGVyKEROZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PW4/InN0YXJ0Ijo0PT09bj8iZW5kIjoibWlkZGxlIiksQS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9SX0pfXJldHVybiBkLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXAsZCk6dH0sZC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPWpQLmNhbGwoYXJndW1lbnRzKSxkfSxkLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09cD9bXTpqUC5jYWxsKHApLGQpOmUuc2xpY2UoKX0sZC50aWNrVmFsdWVzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXA/bnVsbDpqUC5jYWxsKHApLGQpOmkmJmkuc2xpY2UoKX0sZC50aWNrRm9ybWF0PWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZCk6cn0sZC50aWNrU2l6ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPStwLGQpOm99LGQudGlja1NpemVJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rcCxkKTpvfSxkLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3AsZCk6c30sZC50aWNrUGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rcCxkKTphfSxkfXZhciBBTmU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gY2llKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IHFQKGUpfWZ1bmN0aW9uIHFQKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIElOZShuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfWZ1bmN0aW9uIFBOZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGxpZShuLHQsZSl7Zm9yKHZhciBpPTAscj1uLmxlbmd0aDtpPHI7KytpKWlmKG5baV0ubmFtZT09PXQpe25baV09QU5lLG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn1xUC5wcm90b3R5cGU9Y2llLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cVAsb246ZnVuY3Rpb24obix0KXt2YXIgcixlPXRoaXMuXyxpPUlOZShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZihudWxsPT10KWZvcihyIGluIGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288czspaWYoKHI9KG49aVtvXSkudHlwZSkmJihyPVBOZShlW3JdLG4ubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sdD10aGlzLl87Zm9yKHZhciBlIGluIHQpbltlXT10W2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBxUChuKX0sY2FsbDpmdW5jdGlvbihuLHQpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbyxlPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSllW2ldPWFyZ3VtZW50c1tpKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKGk9MCxyPShvPXRoaXMuX1tuXSkubGVuZ3RoO2k8cjsrK2kpb1tpXS52YWx1ZS5hcHBseSh0LGUpfSxhcHBseTpmdW5jdGlvbihuLHQsZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IodmFyIGk9dGhpcy5fW25dLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseSh0LGUpfX07dmFyIGZIPWNpZSxZUD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbUg9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOllQLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gQWQobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksbUguaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOm1IW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gUk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09WVAmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVlQP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBPTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gWFAobil7dmFyIHQ9QWQobik7cmV0dXJuKHQubG9jYWw/T05lOlJOZSkodCl9ZnVuY3Rpb24ga05lKCl7fWZ1bmN0aW9uIGJtKG4pe3JldHVybiBudWxsPT1uP2tOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIEZOZSgpe3JldHVybltdfWZ1bmN0aW9uIEV3KG4pe3JldHVybiBudWxsPT1uP0ZOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIFR3KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIFFQKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIER3KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWZ1bmN0aW9uIE5OZShuLHQsZSxpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPXQubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT10W3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6ZVtzXT1uZXcgRHcobixvW3NdKTtmb3IoO3M8bDsrK3MpKGE9dFtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIExOZShuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGgsYz17fSx1PXQubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkodSk7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYocFthXT1oPSIkIitzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksaCBpbiBjP3JbYV09bDpjW2hdPWwpO2ZvcihhPTA7YTxkOysrYSkobD1jW2g9IiQiK3MuY2FsbChuLG9bYV0sYSxvKV0pPyhpW2FdPWwsbC5fX2RhdGFfXz1vW2FdLGNbaF09bnVsbCk6ZVthXT1uZXcgRHcobixvW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbcFthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBCTmUobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gVk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBITmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBVTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiB6TmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX19ZnVuY3Rpb24gak5lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0dHJpYnV0ZShuLGUpfX1mdW5jdGlvbiBHTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gS1Aobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFdOZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBxTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBZTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4saSxlKX19ZnVuY3Rpb24gbGgobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxLUChuKS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBYTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uIFFOZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gS05lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9fWZ1bmN0aW9uIFBpZShuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZ0gobil7cmV0dXJuIG4uY2xhc3NMaXN0fHxuZXcgUmllKG4pfWZ1bmN0aW9uIFJpZShuKXt0aGlzLl9ub2RlPW4sdGhpcy5fbmFtZXM9UGllKG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gT2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24ga2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gWk5lKG4pe3JldHVybiBmdW5jdGlvbigpe09pZSh0aGlzLG4pfX1mdW5jdGlvbiBKTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7a2llKHRoaXMsbil9fWZ1bmN0aW9uICROZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9PaWU6a2llKSh0aGlzLG4pfX1mdW5jdGlvbiBlTGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHRMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIG5MZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX1mdW5jdGlvbiBpTGUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiByTGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gb0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ/PyIifX1mdW5jdGlvbiBzTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gYUxlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY0xlKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdUxlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBkTGUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufUR3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RHcsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX0sUmllLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRoaXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIHFpZT17fSxfSD1udWxsO2Z1bmN0aW9uIHBMZShuLHQsZSl7cmV0dXJuIG49WWllKG4sdCxlKSxmdW5jdGlvbihpKXt2YXIgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHxyIT09dGhpcyYmISg4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpKSYmbi5jYWxsKHRoaXMsaSl9fWZ1bmN0aW9uIFlpZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPV9IO19IPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e19IPXJ9fX1mdW5jdGlvbiBoTGUobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixpPXQuaW5kZXhPZigiLiIpO3JldHVybiBpPj0wJiYoZT10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHt0eXBlOnQsbmFtZTplfX0pfWZ1bmN0aW9uIGZMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBvLGU9MCxpPS0xLHI9dC5sZW5ndGg7ZTxyOysrZSlvPXRbZV0sbi50eXBlJiZvLnR5cGUhPT1uLnR5cGV8fG8ubmFtZSE9PW4ubmFtZT90WysraV09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gbUxlKG4sdCxlKXt2YXIgaT1xaWUuaGFzT3duUHJvcGVydHkobi50eXBlKT9wTGU6WWllO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgdT0wLGQ9YS5sZW5ndGg7dTxkOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFpZShuLHQsZSl7dmFyIGk9S1Aobikscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gZ0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFpZSh0aGlzLG4sdCl9fWZ1bmN0aW9uIF9MZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRaWUodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwocWllPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdkg9W251bGxdO2Z1bmN0aW9uIFFyKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFppZSgpe3JldHVybiBuZXcgUXIoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx2SCl9UXIucHJvdG90eXBlPVppZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFyLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Ym0obikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KShsPW9bdV0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbdV09Yyk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPUV3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBRcihpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVR3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGg9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihlZSl7aFsrK2NdPWVlfSksaDt2YXIgZT10P0xOZTpOTmUsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KG4pKTtmb3IodmFyIG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PWlbY10sZD1yW2NdLHA9ZC5sZW5ndGgsaD1uLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsaSksZj1oLmxlbmd0aCxtPWFbY109bmV3IEFycmF5KGYpLEM9c1tjXT1uZXcgQXJyYXkoZik7ZSh1LGQsbSxDLGxbY109bmV3IEFycmF5KHApLGgsdCk7Zm9yKHZhciBBLE8seT0wLEk9MDt5PGY7Kyt5KWlmKEE9bVt5XSl7Zm9yKHk+PUkmJihJPXkrMSk7IShPPUNbSV0pJiYrK0k8ZjspO0EuX25leHQ9T3x8bnVsbH19cmV0dXJuKHM9bmV3IFFyKHMsaSkpLl9lbnRlcj1hLHMuX2V4aXQ9bCxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgUXIodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoUVApLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRcih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFFQKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24oaSk6aS5hcHBlbmQobisiIiksbnVsbCE9dCYmKHI9dChyKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgUXIocyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9LTEsZT1uLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciBzLGk9blt0XSxyPWkubGVuZ3RoLTEsbz1pW3JdOy0tcj49MDspKHM9aVtyXSkmJihvJiY0XnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxvKSxvPXMpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQoZCxwKXtyZXR1cm4gZCYmcD9uKGQuX19kYXRhX18scC5fX2RhdGFfXyk6IWQtIXB9bnx8KG49Qk5lKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYyxzPWVbb10sYT1zLmxlbmd0aCxsPXJbb109bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KShjPXNbdV0pJiYobFt1XT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBRcihyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIHM9aVtyXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsaT10Lmxlbmd0aDtlPGk7KytlKWZvcih2YXIgYSxyPXRbZV0sbz0wLHM9ci5sZW5ndGg7bzxzOysrbykoYT1yW29dKSYmbi5jYWxsKGEsYS5fX2RhdGFfXyxvLHIpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9QWQobik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9lLmxvY2FsP0hOZTpWTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZS5sb2NhbD9HTmU6ak5lOmUubG9jYWw/ek5lOlVOZSkoZSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9XTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/WU5lOnFOZSkobix0LGU/PyIiKSk6bGgodGhpcy5ub2RlKCksbil9LHByb3BlcnR5OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/WE5lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P0tOZTpRTmUpKG4sdCkpOnRoaXMubm9kZSgpW25dfSxjbGFzc2VkOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UGllKG4rIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPWdIKHRoaXMubm9kZSgpKSxyPS0xLG89ZS5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKGVbcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyROZTp0P1pOZTpKTmUpKGUsdCkpfSx0ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2VMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/bkxlOnRMZSkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2lMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/b0xlOnJMZSkobikpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHNMZSl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChhTGUpfSxhcHBlbmQ6ZnVuY3Rpb24obil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKSxpPW51bGw9PXQ/bExlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Ym0odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGNMZSl9LGNsb25lOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNlbGVjdChuP2RMZTp1TGUpfSxkYXR1bTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbik6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKG4sdCxlKXt2YXIgcixzLGk9aExlKG4rIiIpLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT10P21MZTpmTGUsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChhKGlbcl0sdCxlKSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKWZvcih2YXIgdSxsPTAsYz1hLmxlbmd0aDtsPGM7KytsKWZvcihyPTAsdT1hW2xdO3I8bzsrK3IpaWYoKHM9aVtyXSkudHlwZT09PXUudHlwZSYmcy5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P19MZTpnTGUpKG4sdCkpfX07dmFyIElkPVppZTtmdW5jdGlvbiBaUChuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bmV3IFFyKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUXIoW1tuXV0sdkgpfWZ1bmN0aW9uIHhtKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiB4dihuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBjaCgpe312YXIgJFA9MS8uNyxDdj0iXFxzKihbKy1dP1xcZCspXFxzKiIsSXc9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTHU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHZMZT0vXiMoWzAtOWEtZl17Myw4fSkkLyx5TGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0N2LEN2LEN2XSsiXFwpJCIpLGJMZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTHUsTHUsTHVdKyJcXCkkIikseExlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQ3YsQ3YsQ3YsSXddKyJcXCkkIiksQ0xlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTHUsTHUsTHUsSXddKyJcXCkkIiksd0xlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tJdyxMdSxMdV0rIlxcKSQiKSxNTGU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tJdyxMdSxMdSxJd10rIlxcKSQiKSxKaWU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gJGllKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gZXJlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVGMobil7dmFyIHQsZTtyZXR1cm4gbj0obisiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dkxlLmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksNj09PWU/dHJlKHQpOjM9PT1lP25ldyBncyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKDE1JnQpPDw0fDE1JnQsMSk6OD09PWU/SlAodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwoMjU1JnQpLzI1NSk6ND09PWU/SlAodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgoMTUmdCk8PDR8MTUmdCkvMjU1KTpudWxsKToodD15TGUuZXhlYyhuKSk/bmV3IGdzKHRbMV0sdFsyXSx0WzNdLDEpOih0PWJMZS5leGVjKG4pKT9uZXcgZ3MoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFszXS8xMDAsMSk6KHQ9eExlLmV4ZWMobikpP0pQKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PUNMZS5leGVjKG4pKT9KUCgyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCx0WzRdKToodD13TGUuZXhlYyhuKSk/cnJlKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9TUxlLmV4ZWMobikpP3JyZSh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkppZS5oYXNPd25Qcm9wZXJ0eShuKT90cmUoSmllW25dKToidHJhbnNwYXJlbnQiPT09bj9uZXcgZ3MoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB0cmUobil7cmV0dXJuIG5ldyBncyhuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm4sMSl9ZnVuY3Rpb24gSlAobix0LGUsaSl7cmV0dXJuIGk8PTAmJihuPXQ9ZT1OYU4pLG5ldyBncyhuLHQsZSxpKX1mdW5jdGlvbiB4SChuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNofHwobj1UYyhuKSksbj9uZXcgZ3MoKG49bi5yZ2IoKSkucixuLmcsbi5iLG4ub3BhY2l0eSk6bmV3IGdzfWZ1bmN0aW9uIHd2KG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94SChuKTpuZXcgZ3Mobix0LGUsaT8/MSl9ZnVuY3Rpb24gZ3Mobix0LGUsaSl7dGhpcy5yPStuLHRoaXMuZz0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIG5yZSgpe3JldHVybiIjIit5SCh0aGlzLnIpK3lIKHRoaXMuZykreUgodGhpcy5iKX1mdW5jdGlvbiBpcmUoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT1uPyIpIjoiLCAiK24rIikiKX1mdW5jdGlvbiB5SChuKXtyZXR1cm4oKG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpKTwxNj8iMCI6IiIpK24udG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHJyZShuLHQsZSxpKXtyZXR1cm4gaTw9MD9uPXQ9ZT1OYU46ZTw9MHx8ZT49MT9uPXQ9TmFOOnQ8PTAmJihuPU5hTiksbmV3IE51KG4sdCxlLGkpfWZ1bmN0aW9uIG9yZShuKXtpZihuIGluc3RhbmNlb2YgTnUpcmV0dXJuIG5ldyBOdShuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBjaHx8KG49VGMobikpLCFuKXJldHVybiBuZXcgTnU7aWYobiBpbnN0YW5jZW9mIE51KXJldHVybiBuO3ZhciB0PShuPW4ucmdiKCkpLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSksbz1NYXRoLm1heCh0LGUsaSkscz1OYU4sYT1vLXIsbD0obytyKS8yO3JldHVybiBhPyhzPXQ9PT1vPyhlLWkpL2ErNiooZTxpKTplPT09bz8oaS10KS9hKzI6KHQtZSkvYSs0LGEvPWw8LjU/bytyOjItby1yLHMqPTYwKTphPWw+MCYmbDwxPzA6cyxuZXcgTnUocyxhLGwsbi5vcGFjaXR5KX1mdW5jdGlvbiBDbShuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/b3JlKG4pOm5ldyBOdShuLHQsZSxpPz8xKX1mdW5jdGlvbiBOdShuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5zPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gYkgobix0LGUpe3JldHVybiAyNTUqKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpfXhtKGNoLFRjLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiRpZSxmb3JtYXRIZXg6JGllLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBvcmUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjplcmUsdG9TdHJpbmc6ZXJlfSkseG0oZ3Msd3YseHYoY2gse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/JFA6TWF0aC5wb3coJFAsbiksbmV3IGdzKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBncyh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Om5yZSxmb3JtYXRIZXg6bnJlLGZvcm1hdFJnYjppcmUsdG9TdHJpbmc6aXJlfSkpLHhtKE51LENtLHh2KGNoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPyRQOk1hdGgucG93KCRQLG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IGdzKGJIKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLGJIKG4scixpKSxiSChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09bj8iKSI6IiwgIituKyIpIil9fSkpO3ZhciBzcmU9TWF0aC5QSS8xODAsYXJlPTE4MC9NYXRoLlBJLGRyZT00LzI5LE12PTYvMjkscHJlPTMqTXYqTXY7ZnVuY3Rpb24gaHJlKG4pe2lmKG4gaW5zdGFuY2VvZiBCdSlyZXR1cm4gbmV3IEJ1KG4ubCxuLmEsbi5iLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIFBkKXJldHVybiBmcmUobik7biBpbnN0YW5jZW9mIGdzfHwobj14SChuKSk7dmFyIG8scyx0PVNIKG4uciksZT1TSChuLmcpLGk9U0gobi5iKSxyPUNIKCguMjIyNTA0NSp0Ky43MTY4Nzg2KmUrLjA2MDYxNjkqaSkvMSk7cmV0dXJuIHQ9PT1lJiZlPT09aT9vPXM9cjoobz1DSCgoLjQzNjA3NDcqdCsuMzg1MDY0OSplKy4xNDMwODA0KmkpLy45NjQyMikscz1DSCgoLjAxMzkzMjIqdCsuMDk3MTA0NSplKy43MTQxNzMzKmkpLy44MjUyMSkpLG5ldyBCdSgxMTYqci0xNiw1MDAqKG8tciksMjAwKihyLXMpLG4ub3BhY2l0eSl9ZnVuY3Rpb24gQnUobix0LGUsaSl7dGhpcy5sPStuLHRoaXMuYT0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIENIKG4pe3JldHVybiBuPi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3cobiwxLzMpOm4vcHJlK2RyZX1mdW5jdGlvbiB3SChuKXtyZXR1cm4gbj5Ndj9uKm4qbjpwcmUqKG4tZHJlKX1mdW5jdGlvbiBNSChuKXtyZXR1cm4gMjU1KihuPD0uMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFNIKG4pe3JldHVybihuLz0yNTUpPD0uMDQwNDU/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFRMZShuKXtpZihuIGluc3RhbmNlb2YgUGQpcmV0dXJuIG5ldyBQZChuLmgsbi5jLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBCdXx8KG49aHJlKG4pKSwwPT09bi5hJiYwPT09bi5iKXJldHVybiBuZXcgUGQoTmFOLDA8bi5sJiZuLmw8MTAwPzA6TmFOLG4ubCxuLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIobi5iLG4uYSkqYXJlO3JldHVybiBuZXcgUGQodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KG4uYSpuLmErbi5iKm4uYiksbi5sLG4ub3BhY2l0eSl9ZnVuY3Rpb24gd20obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1RMZShuKTpuZXcgUGQobix0LGUsaT8/MSl9ZnVuY3Rpb24gUGQobix0LGUsaSl7dGhpcy5oPStuLHRoaXMuYz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGZyZShuKXtpZihpc05hTihuLmgpKXJldHVybiBuZXcgQnUobi5sLDAsMCxuLm9wYWNpdHkpO3ZhciB0PW4uaCpzcmU7cmV0dXJuIG5ldyBCdShuLmwsTWF0aC5jb3ModCkqbi5jLE1hdGguc2luKHQpKm4uYyxuLm9wYWNpdHkpfWZ1bmN0aW9uIFRIKG4sdCxlLGkscil7dmFyIG89bipuLHM9bypuO3JldHVybigoMS0zKm4rMypvLXMpKnQrKDQtNipvKzMqcykqZSsoMSszKm4rMypvLTMqcykqaStzKnIpLzZ9ZnVuY3Rpb24gU3Yobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIF9yZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbitlKnR9fWZ1bmN0aW9uIHRSKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP19yZShuLGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6U3YoaXNOYU4obik/dDpuKX1mdW5jdGlvbiBmYShuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9fcmUobixlKTpTdihpc05hTihuKT90Om4pfXhtKEJ1LGZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ocmUobik6bmV3IEJ1KG4sdCxlLGk/PzEpfSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBCdSh0aGlzLmwrMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgQnUodGhpcy5sLTE4KihuPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPSh0aGlzLmwrMTYpLzExNix0PWlzTmFOKHRoaXMuYSk/bjpuK3RoaXMuYS81MDAsZT1pc05hTih0aGlzLmIpP246bi10aGlzLmIvMjAwO3JldHVybiBuZXcgZ3MoTUgoMy4xMzM4NTYxKih0PS45NjQyMip3SCh0KSktMS42MTY4NjY3KihuPTEqd0gobikpLS40OTA2MTQ2KihlPS44MjUyMSp3SChlKSkpLE1IKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSpuKy4wMzM0NTQqZSksTUgoLjA3MTk0NTMqdC0uMjI4OTkxNCpuKzEuNDA1MjQyNyplKSx0aGlzLm9wYWNpdHkpfX0pKSx4bShQZCx3bSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQZCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobj8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUGQodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG4/PzEpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBmcmUodGhpcykucmdiKCl9fSkpO3ZhciBNbT1mdW5jdGlvbiBuKHQpe3ZhciBlPWZ1bmN0aW9uKG4pe3JldHVybiAxPT0obj0rbik/ZmE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10P2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbj1NYXRoLnBvdyhuLGUpLHQ9TWF0aC5wb3codCxlKS1uLGU9MS9lLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyhuK2kqdCxlKX19KHQsZSxuKTpTdihpc05hTih0KT9lOnQpfX0odCk7ZnVuY3Rpb24gaShyLG8pe3ZhciBzPWUoKHI9d3YocikpLnIsKG89d3YobykpLnIpLGE9ZShyLmcsby5nKSxsPWUoci5iLG8uYiksYz1mYShyLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHIucj1zKHUpLHIuZz1hKHUpLHIuYj1sKHUpLHIub3BhY2l0eT1jKHUpLHIrIiJ9fXJldHVybiBpLmdhbW1hPW4saX0oMSk7ZnVuY3Rpb24geXJlKG4pe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcyxhLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSk7Zm9yKHM9MDtzPGU7KytzKWE9d3YodFtzXSksaVtzXT1hLnJ8fDAscltzXT1hLmd8fDAsb1tzXT1hLmJ8fDA7cmV0dXJuIGk9bihpKSxyPW4ociksbz1uKG8pLGEub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBhLnI9aShsKSxhLmc9cihsKSxhLmI9byhsKSxhKyIifX19ZnVuY3Rpb24gYnJlKG4sdCl7dHx8KHQ9W10pO3ZhciByLGU9bj9NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCk6MCxpPXQuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1vKSt0W3JdKm87cmV0dXJuIGl9fWZ1bmN0aW9uIENyZShuLHQpe3ZhciBzLGU9dD90Lmxlbmd0aDowLGk9bj9NYXRoLm1pbihlLG4ubGVuZ3RoKTowLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGUpO2ZvcihzPTA7czxpOysrcylyW3NdPVNtKG5bc10sdFtzXSk7Zm9yKDtzPGU7KytzKW9bc109dFtzXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHM9MDtzPGk7KytzKW9bc109cltzXShhKTtyZXR1cm4gb319ZnVuY3Rpb24gd3JlKG4sdCl7dmFyIGU9bmV3IERhdGU7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gZS5zZXRUaW1lKG4qKDEtaSkrdCppKSxlfX1mdW5jdGlvbiBucyhuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIG4qKDEtZSkrdCplfX1mdW5jdGlvbiBNcmUobix0KXt2YXIgcixlPXt9LGk9e307Zm9yKHIgaW4obnVsbD09PW58fCJvYmplY3QiIT10eXBlb2YgbikmJihuPXt9KSwobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJih0PXt9KSx0KXIgaW4gbj9lW3JdPVNtKG5bcl0sdFtyXSk6aVtyXT10W3JdO3JldHVybiBmdW5jdGlvbihvKXtmb3IociBpbiBlKWlbcl09ZVtyXShvKTtyZXR1cm4gaX19eXJlKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0sbz1uW2krMV07cmV0dXJuIFRIKChlLWkvdCkqdCxpPjA/bltpLTFdOjIqci1vLHIsbyxpPHQtMT9uW2krMl06MipvLXIpfX0pLHlyZShmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBUSCgoZS1pL3QpKnQsblsoaSt0LTEpJXRdLG5baSV0XSxuWyhpKzEpJXRdLG5bKGkrMikldF0pfX0pO3ZhciBBSD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csREg9bmV3IFJlZ0V4cChBSC5zb3VyY2UsImciKTtmdW5jdGlvbiBQdyhuLHQpe3ZhciBpLHIsbyxlPUFILmxhc3RJbmRleD1ESC5sYXN0SW5kZXg9MCxzPS0xLGE9W10sbD1bXTtmb3Iobis9IiIsdCs9IiI7KGk9QUguZXhlYyhuKSkmJihyPURILmV4ZWModCkpOykobz1yLmluZGV4KT5lJiYobz10LnNsaWNlKGUsbyksYVtzXT9hW3NdKz1vOmFbKytzXT1vKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbc10/YVtzXSs9cjphWysrc109cjooYVsrK3NdPW51bGwsbC5wdXNoKHtpOnMseDpucyhpLHIpfSkpLGU9REgubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYobz10LnNsaWNlKGUpLGFbc10/YVtzXSs9bzphWysrc109byksYS5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIGQsdT0wO3U8dDsrK3UpYVsoZD1sW3VdKS5pXT1kLngoYyk7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlvbiBTbShuLHQpe3ZhciBpLGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWU/U3YodCk6KCJudW1iZXIiPT09ZT9uczoic3RyaW5nIj09PWU/KGk9VGModCkpPyh0PWksTW0pOlB3OnQgaW5zdGFuY2VvZiBUYz9NbTp0IGluc3RhbmNlb2YgRGF0ZT93cmU6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT9icmU6QXJyYXkuaXNBcnJheSh0KT9DcmU6ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmd8fGlzTmFOKHQpP01yZTpucykobix0KX1mdW5jdGlvbiBJSChuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgUncsUkgsRXJlLGlSLFNyZT0xODAvTWF0aC5QSSxuUj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBQSChuLHQsZSxpLHIsbyl7dmFyIHMsYSxsO3JldHVybihzPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1zLHQvPXMpLChsPW4qZSt0KmkpJiYoZS09bipsLGktPXQqbCksKGE9TWF0aC5zcXJ0KGUqZStpKmkpKSYmKGUvPWEsaS89YSxsLz1hKSxuKmk8dCplJiYobj0tbix0PS10LGw9LWwscz0tcykse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxuKSpTcmUsc2tld1g6TWF0aC5hdGFuKGwpKlNyZSxzY2FsZVg6cyxzY2FsZVk6YX19ZnVuY3Rpb24gQXJlKG4sdCxlLGkpe2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBkPVtdLHA9W107cmV0dXJuIGM9bihjKSx1PW4odSksZnVuY3Rpb24oYyx1LGQscCxoLGYpe2lmKGMhPT1kfHx1IT09cCl7dmFyIG09aC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTtmLnB1c2goe2k6bS00LHg6bnMoYyxkKX0se2k6bS0yLHg6bnModSxwKX0pfWVsc2UoZHx8cCkmJmgucHVzaCgidHJhbnNsYXRlKCIrZCt0K3ArZSl9KGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxkLHApLGZ1bmN0aW9uKGMsdSxkLHApe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKHIoZCkrInJvdGF0ZSgiLG51bGwsaSktMix4Om5zKGMsdSl9KSk6dSYmZC5wdXNoKHIoZCkrInJvdGF0ZSgiK3UraSl9KGMucm90YXRlLHUucm90YXRlLGQscCksZnVuY3Rpb24oYyx1LGQscCl7YyE9PXU/cC5wdXNoKHtpOmQucHVzaChyKGQpKyJza2V3WCgiLG51bGwsaSktMix4Om5zKGMsdSl9KTp1JiZkLnB1c2gocihkKSsic2tld1goIit1K2kpfShjLnNrZXdYLHUuc2tld1gsZCxwKSxmdW5jdGlvbihjLHUsZCxwLGgsZil7aWYoYyE9PWR8fHUhPT1wKXt2YXIgbT1oLnB1c2gocihoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zi5wdXNoKHtpOm0tNCx4Om5zKGMsZCl9LHtpOm0tMix4Om5zKHUscCl9KX1lbHNlKDEhPT1kfHwxIT09cCkmJmgucHVzaChyKGgpKyJzY2FsZSgiK2QrIiwiK3ArIikiKX0oYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksZCxwKSxjPXU9bnVsbCxmdW5jdGlvbihoKXtmb3IodmFyIEMsZj0tMSxtPXAubGVuZ3RoOysrZjxtOylkWyhDPXBbZl0pLmldPUMueChoKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBPSD1BcmUoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9uUjooUnd8fChSdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxSSD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRXJlPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxSdy5zdHlsZS50cmFuc2Zvcm09bixuPUVyZS5nZXRDb21wdXRlZFN0eWxlKFJILmFwcGVuZENoaWxkKFJ3KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxSSC5yZW1vdmVDaGlsZChSdyksUEgoKyhuPW4uc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksa0g9QXJlKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP25SOihpUnx8KGlSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGlSLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1pUi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9QSCgobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTpuUil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gSXJlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9Q20odCkpLmgsKGU9Q20oZSkpLmgpLHI9ZmEodC5zLGUucyksbz1mYSh0LmwsZS5sKSxzPWZhKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gdC5oPWkoYSksdC5zPXIoYSksdC5sPW8oYSksdC5vcGFjaXR5PXMoYSksdCsiIn19fXZhciBGSD1JcmUodFIpO2Z1bmN0aW9uIFByZShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PXdtKHQpKS5oLChlPXdtKGUpKS5oKSxyPWZhKHQuYyxlLmMpLG89ZmEodC5sLGUubCkscz1mYSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX1JcmUoZmEpO3ZhciByUixGdyxOSD1QcmUodFIpLEV2PShQcmUoZmEpLDApLGt3PTAsT3c9MCxvUj0wLEVtPTAsc1I9MCxOdz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxrcmU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24gVHYoKXtyZXR1cm4gRW18fChrcmUoRkxlKSxFbT1Ody5ub3coKStzUil9ZnVuY3Rpb24gRkxlKCl7RW09MH1mdW5jdGlvbiBMdygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gYVIobix0LGUpe3ZhciBpPW5ldyBMdztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIFJyZSgpe0VtPShvUj1Ody5ub3coKSkrc1IsRXY9a3c9MDt0cnl7IWZ1bmN0aW9uKCl7VHYoKSwrK0V2O2Zvcih2YXIgdCxuPXJSO247KSh0PUVtLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1Fdn0oKX1maW5hbGx5e0V2PTAsZnVuY3Rpb24oKXtmb3IodmFyIG4sZSx0PXJSLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpyUj1lKTtGdz1uLExIKGkpfSgpLEVtPTB9fWZ1bmN0aW9uIE5MZSgpe3ZhciBuPU53Lm5vdygpLHQ9bi1vUjt0PjFlMyYmKHNSLT10LG9SPW4pfWZ1bmN0aW9uIExIKG4pe0V2fHwoa3cmJihrdz1jbGVhclRpbWVvdXQoa3cpKSxuLUVtPjI0PyhuPDEvMCYmKGt3PXNldFRpbWVvdXQoUnJlLG4tTncubm93KCktc1IpKSxPdyYmKE93PWNsZWFySW50ZXJ2YWwoT3cpKSk6KE93fHwob1I9Tncubm93KCksT3c9c2V0SW50ZXJ2YWwoTkxlLDFlMykpLEV2PTEsa3JlKFJyZSkpKX1mdW5jdGlvbiBsUihuLHQsZSl7dmFyIGk9bmV3IEx3O3JldHVybiBpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0PW51bGw9PXQ/MDordCxlKSxpfUx3LnByb3RvdHlwZT1hUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkx3LHJlc3RhcnQ6ZnVuY3Rpb24obix0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT9UdigpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmRnchPT10aGlzJiYoRnc/RncuX25leHQ9dGhpczpyUj10aGlzLEZ3PXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsTEgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsTEgoKSl9fTt2YXIgQkxlPWZIKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFZMZT1bXTtmdW5jdGlvbiB1aChuLHQsZSxpLHIsbyl7dmFyIHM9bi5fX3RyYW5zaXRpb247aWYocyl7aWYoZSBpbiBzKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbihuLHQsZSl7dmFyIHIsaT1uLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBzKGMpe3ZhciB1LGQscCxoO2lmKDEhPT1lLnN0YXRlKXJldHVybiBsKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09ZS5uYW1lKXtpZigzPT09aC5zdGF0ZSlyZXR1cm4gbFIocyk7ND09PWguc3RhdGU/KGguc3RhdGU9NixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PHQmJihoLnN0YXRlPTYsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihsUihmdW5jdGlvbigpezM9PT1lLnN0YXRlJiYoZS5zdGF0ZT00LGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxhKGMpKX0pLGUuc3RhdGU9MixlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSwyPT09ZS5zdGF0ZSl7Zm9yKGUuc3RhdGU9MyxyPW5ldyBBcnJheShwPWUudHdlZW4ubGVuZ3RoKSx1PTAsZD0tMTt1PHA7Kyt1KShoPWUudHdlZW5bdV0udmFsdWUuY2FsbChuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrZF09aCk7ci5sZW5ndGg9ZCsxfX1mdW5jdGlvbiBhKGMpe2Zvcih2YXIgdT1jPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxjL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobCksZS5zdGF0ZT01LDEpLGQ9LTEscD1yLmxlbmd0aDsrK2Q8cDspcltkXS5jYWxsKG4sdSk7NT09PWUuc3RhdGUmJihlLm9uLmNhbGwoImVuZCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBjIGluIGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVt0XSxpKXJldHVybjtkZWxldGUgbi5fX3RyYW5zaXRpb259aVt0XT1lLGUudGltZXI9YVIoZnVuY3Rpb24oYyl7ZS5zdGF0ZT0xLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOkJMZSx0d2VlbjpWTGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIFZ3KG4sdCl7dmFyIGU9RG8obix0KTtpZihlLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBIcyhuLHQpe3ZhciBlPURvKG4sdCk7aWYoZS5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIERvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gVUxlKG4sdCl7dmFyIGUsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLG4pLG89ci50d2VlbjtpZihvIT09ZSlmb3IodmFyIHM9MCxhPShpPWU9bykubGVuZ3RoO3M8YTsrK3MpaWYoaVtzXS5uYW1lPT09dCl7KGk9aS5zbGljZSgpKS5zcGxpY2UocywxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIHpMZShuLHQsZSl7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SHModGhpcyxuKSxzPW8udHdlZW47aWYocyE9PWkpe3I9KGk9cykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfW8udHdlZW49cn19ZnVuY3Rpb24gRHYobix0LGUpe3ZhciBpPW4uX2lkO3JldHVybiBuLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLGkpOyhyLnZhbHVlfHwoci52YWx1ZT17fSkpW3RdPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24ocil7cmV0dXJuIERvKHIsaSkudmFsdWVbdF19fWZ1bmN0aW9uIHBSKG4sdCl7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgdD9uczp0IGluc3RhbmNlb2YgVGM/TW06KGU9VGModCkpPyh0PWUsTW0pOlB3KShuLHQpfWZ1bmN0aW9uIGpMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gR0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gV0xlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZShuKTtyZXR1cm4gcz09PXI/bnVsbDpzPT09aT9vOm89dChpPXMsZSl9fWZ1bmN0aW9uIHFMZShuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gWUxlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToocz10aGlzLmdldEF0dHJpYnV0ZShuKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFhMZShuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGwsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOihzPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFFMZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gS0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gWkxlKG4sdCl7dmFyIGUsaTtmdW5jdGlvbiByKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1pJiYoZT0oaT1vKSYmS0xlKG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBKTGUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiZRTGUobixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uICRMZShuLHQpe3JldHVybiBmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBlM2Uobix0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9dH19ZnVuY3Rpb24gdDNlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4zZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBpM2Uobix0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5lYXNlPXR9fWZ1bmN0aW9uIG8zZShuLHQsZSl7dmFyIGkscixvPWZ1bmN0aW9uKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KHQpP1Z3OkhzO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPW8odGhpcyxuKSxhPXMub247YSE9PWkmJihyPShpPWEpLmNvcHkoKSkub24odCxlKSxzLm9uPXJ9fXZhciBhM2U9SWQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEpyZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBwM2Uobix0LGUpe3JldHVybiBmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdC5jYWxsKHRoaXMsaSksZSl9fWZ1bmN0aW9uIGgzZShuLHQsZSl7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMhPT1yJiYoaT0ocj1zKSYmcDNlKG4scyxlKSksaX1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIGczZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1uLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gXzNlKG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJmczZShyKSksdH1yZXR1cm4gaS5fdmFsdWU9bixpfXZhciB2M2U9MDtmdW5jdGlvbiBfcyhuLHQsZSxpKXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1lLHRoaXMuX2lkPWl9ZnVuY3Rpb24gaFIoKXtyZXR1cm4rK3YzZX12YXIgQXY9SWQucHJvdG90eXBlO19zLnByb3RvdHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gSWQoKS50cmFuc2l0aW9uKG4pfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9zLHNlbGVjdDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWJtKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkocikscz0wO3M8cjsrK3MpZm9yKHZhciB1LGQsYT1pW3NdLGw9YS5sZW5ndGgsYz1vW3NdPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCkodT1hW3BdKSYmKGQ9bi5jYWxsKHUsdS5fX2RhdGFfXyxwLGEpKSYmKCJfX2RhdGFfXyJpbiB1JiYoZC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW3BdPWQsdWgoY1twXSx0LGUscCxjLERvKHUsZSkpKTtyZXR1cm4gbmV3IF9zKG8sdGhpcy5fcGFyZW50cyx0LGUpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1FdyhuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10scz1bXSxhPTA7YTxyOysrYSlmb3IodmFyIHUsbD1pW2FdLGM9bC5sZW5ndGgsZD0wO2Q8YzsrK2QpaWYodT1sW2RdKXtmb3IodmFyIGgscD1uLmNhbGwodSx1Ll9fZGF0YV9fLGQsbCksZj1Ebyh1LGUpLG09MCxDPXAubGVuZ3RoO208QzsrK20pKGg9cFttXSkmJnVoKGgsdCxlLG0scCxmKTtvLnB1c2gocCkscy5wdXNoKHUpfXJldHVybiBuZXcgX3MobyxzLHQsZSl9LGZpbHRlcjpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49VHcobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsbz10W3JdLHM9by5sZW5ndGgsYT1pW3JdPVtdLGM9MDtjPHM7KytjKShsPW9bY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJmEucHVzaChsKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24obil7aWYobi5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgX3Mocyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEzZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fbmFtZSx0PXRoaXMuX2lkLGU9aFIoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYylpZihsPXNbY10pe3ZhciB1PURvKGwsdCk7dWgobCxuLGUsYyxzLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBfcyhpLHRoaXMuX3BhcmVudHMsbixlKX0sY2FsbDpBdi5jYWxsLG5vZGVzOkF2Lm5vZGVzLG5vZGU6QXYubm9kZSxzaXplOkF2LnNpemUsZW1wdHk6QXYuZW1wdHksZWFjaDpBdi5lYWNoLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9Ebyh0aGlzLm5vZGUoKSxlKS5vbi5vbihuKTp0aGlzLmVhY2gobzNlKGUsbix0KSl9LGF0dHI6ZnVuY3Rpb24obix0KXt2YXIgZT1BZChuKSxpPSJ0cmFuc2Zvcm0iPT09ZT9rSDpwUjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4obiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZS5sb2NhbD9YTGU6WUxlKShlLGksRHYodGhpcywiYXR0ci4iK24sdCkpOm51bGw9PXQ/KGUubG9jYWw/R0xlOmpMZSkoZSk6KGUubG9jYWw/cUxlOldMZSkoZSxpLHQpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImF0dHIuIituO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjt2YXIgaT1BZChuKTtyZXR1cm4gdGhpcy50d2VlbihlLChpLmxvY2FsP1pMZTpKTGUpKGksdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InRyYW5zZm9ybSI9PShuKz0iIik/T0g6cFI7cmV0dXJuIG51bGw9PXQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bGgodGhpcyxuKSxzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGxoKHRoaXMsbikpO3JldHVybiBvPT09cz9udWxsOm89PT1lJiZzPT09aT9yOnI9dChlPW8saT1zKX19KG4saSkpLm9uKCJlbmQuc3R5bGUuIituLEpyZShuKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pLGE9ZSh0aGlzKSxsPWErIiI7cmV0dXJuIG51bGw9PWEmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGw9YT1saCh0aGlzLG4pKSxzPT09bD9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fShuLGksRHYodGhpcywic3R5bGUuIituLHQpKSkuZWFjaChmdW5jdGlvbihuLHQpe3ZhciBlLGkscixhLG89InN0eWxlLiIrdCxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUhzKHRoaXMsbiksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVtvXT9hfHwoYT1KcmUodCkpOnZvaWQgMDsoYyE9PWV8fHIhPT11KSYmKGk9KGU9YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0odGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InN0eWxlLiIrKG4rPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxoM2Uobix0LGU/PyIiKSl9LHRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19KER2KHRoaXMsInRleHQiLG4pKTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fShudWxsPT1uPyIiOm4rIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKG4pe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxfM2UobikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuX2lkO2lmKG4rPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBzLGk9RG8odGhpcy5ub2RlKCksZSkudHdlZW4scj0wLG89aS5sZW5ndGg7cjxvOysrcilpZigocz1pW3JdKS5uYW1lPT09bilyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P1VMZTp6TGUpKGUsbix0KSl9LGRlbGF5OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/JExlOmUzZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/dDNlOm4zZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGkzZSh0LG4pKTpEbyh0aGlzLm5vZGUoKSx0KS5lYXNlfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgbix0LGU9dGhpcyxpPWUuX2lkLHI9ZS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scyl7dmFyIGE9e3ZhbHVlOnN9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1yJiZvKCl9fTtlLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1Icyh0aGlzLGkpLHU9Yy5vbjt1IT09biYmKCh0PShuPXUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChhKSx0Ll8uaW50ZXJydXB0LnB1c2goYSksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfX07dmFyIEhIPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbihuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn19O2Z1bmN0aW9uIHkzZShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBISC50aW1lPVR2KCksSEg7cmV0dXJuIGV9ZnVuY3Rpb24gVUgobil7cmV0dXJue3R5cGU6bn19SWQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG4sdCl7dmFyIGkscixzLGU9bi5fX3RyYW5zaXRpb24sbz0hMDtpZihlKXtmb3IocyBpbiB0PW51bGw9PXQ/bnVsbDp0KyIiLGUpKGk9ZVtzXSkubmFtZT09PXQ/KHI9aS5zdGF0ZT4yJiZpLnN0YXRlPDUsaS5zdGF0ZT02LGkudGltZXIuc3RvcCgpLGkub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLG4sbi5fX2RhdGFfXyxpLmluZGV4LGkuZ3JvdXApLGRlbGV0ZSBlW3NdKTpvPSExO28mJmRlbGV0ZSBuLl9fdHJhbnNpdGlvbn19KHRoaXMsbil9KX0sSWQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24obil7dmFyIHQsZTtuIGluc3RhbmNlb2YgX3M/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1oUigpLChlPUhIKS50aW1lPVR2KCksbj1udWxsPT1uP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmdWgobCxuLHQsYyxzLGV8fHkzZShsLHQpKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyxuLHQpfSxbInciLCJlIl0ubWFwKFVIKSxbIm4iLCJzIl0ubWFwKFVIKSxbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChVSCksTWF0aDt2YXIgWGE9IiQiO2Z1bmN0aW9uIG1SKCl7fWZ1bmN0aW9uIGxvZShuLHQpe3ZhciBlPW5ldyBtUjtpZihuIGluc3RhbmNlb2YgbVIpbi5lYWNoKGZ1bmN0aW9uKGEsbCl7ZS5zZXQobCxhKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIG8saT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5zZXQoaSxuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuc2V0KHQobz1uW2ldLGksbiksbyl9ZWxzZSBpZihuKWZvcih2YXIgcyBpbiBuKWUuc2V0KHMsbltzXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZ1IoKXt9bVIucHJvdG90eXBlPWxvZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1SLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gWGErbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbWGErbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW1hhK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PVhhK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PVhhJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1YYSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07dmFyIERtPWxvZS5wcm90b3R5cGU7ZnVuY3Rpb24gQW0obix0KXtpZigoZT0obj10P24udG9FeHBvbmVudGlhbCh0LTEpOm4udG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGUsaT1uLnNsaWNlKDAsZSk7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK24uc2xpY2UoZSsxKV19ZnVuY3Rpb24gVnUobil7cmV0dXJuKG49QW0oTWF0aC5hYnMobikpKT9uWzFdOk5hTn1nUi5wcm90b3R5cGU9ZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgZ1I7aWYobiBpbnN0YW5jZW9mIGdSKW4uZWFjaChmdW5jdGlvbihvKXtlLmFkZChvKX0pO2Vsc2UgaWYobil7dmFyIGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuYWRkKG5baV0pO2Vsc2UgZm9yKDsrK2k8cjspZS5hZGQodChuW2ldLGksbikpfXJldHVybiBlfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdSLGhhczpEbS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW1hhKyhuKz0iIildPW4sdGhpc30scmVtb3ZlOkRtLnJlbW92ZSxjbGVhcjpEbS5jbGVhcix2YWx1ZXM6RG0ua2V5cyxzaXplOkRtLnNpemUsZW1wdHk6RG0uZW1wdHksZWFjaDpEbS5lYWNofSxNYXRoLE1hdGguc3FydCg1KTt2YXIgekgsRDNlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGRoKG4pe2lmKCEodD1EM2UuZXhlYyhuKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIituKTt2YXIgdDtyZXR1cm4gbmV3IF9SKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIF9SKG4pe3RoaXMuZmlsbD12b2lkIDA9PT1uLmZpbGw/IiAiOm4uZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PW4uYWxpZ24/Ij4iOm4uYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PW4uc2lnbj8iLSI6bi5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PW4uc3ltYm9sPyIiOm4uc3ltYm9sKyIiLHRoaXMuemVybz0hIW4uemVybyx0aGlzLndpZHRoPXZvaWQgMD09PW4ud2lkdGg/dm9pZCAwOituLndpZHRoLHRoaXMuY29tbWE9ISFuLmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PW4ucHJlY2lzaW9uP3ZvaWQgMDorbi5wcmVjaXNpb24sdGhpcy50cmltPSEhbi50cmltLHRoaXMudHlwZT12b2lkIDA9PT1uLnR5cGU/IiI6bi50eXBlKyIifWZ1bmN0aW9uIGpIKG4sdCl7dmFyIGU9QW0obix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1kaC5wcm90b3R5cGU9X1IucHJvdG90eXBlLF9SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBHSD17IiUiOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKDEwMCpuKS50b0ZpeGVkKHQpfSxiOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKG4pe3JldHVybiBuKyIifSxkOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gakgoMTAwKm4sdCl9LHI6akgsczpmdW5jdGlvbihuLHQpe3ZhciBlPUFtKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV0sbz1yLSh6SD0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyLzMpKSkpKzEscz1pLmxlbmd0aDtyZXR1cm4gbz09PXM/aTpvPnM/aStuZXcgQXJyYXkoby1zKzEpLmpvaW4oIjAiKTpvPjA/aS5zbGljZSgwLG8pKyIuIitpLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK0FtKG4sTWF0aC5tYXgoMCx0K28tMSkpWzBdfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIFdIKG4pe3JldHVybiBufXZhciB2Uixybyx5Uixnb2U9QXJyYXkucHJvdG90eXBlLm1hcCxfb2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gT2woKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12Uj1mdW5jdGlvbihuKXt2YXIgdD12b2lkIDA9PT1uLmdyb3VwaW5nfHx2b2lkIDA9PT1uLnRob3VzYW5kcz9XSDpmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxvPVtdLHM9MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW3M9KHMrMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX0oZ29lLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVsxXSsiIixyPXZvaWQgMD09PW4uZGVjaW1hbD8iLiI6bi5kZWNpbWFsKyIiLG89dm9pZCAwPT09bi5udW1lcmFscz9XSDpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19KGdvZS5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSkscz12b2lkIDA9PT1uLnBlcmNlbnQ/IiUiOm4ucGVyY2VudCsiIixhPXZvaWQgMD09PW4ubWludXM/Ii0iOm4ubWludXMrIiIsbD12b2lkIDA9PT1uLm5hbj8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGQpe3ZhciBwPShkPWRoKGQpKS5maWxsLGg9ZC5hbGlnbixmPWQuc2lnbixtPWQuc3ltYm9sLEM9ZC56ZXJvLF89ZC53aWR0aCx5PWQuY29tbWEsST1kLnByZWNpc2lvbixBPWQudHJpbSxPPWQudHlwZTsibiI9PT1PPyh5PSEwLE89ImciKTpHSFtPXXx8KHZvaWQgMD09PUkmJihJPTEyKSxBPSEwLE89ImciKSwoQ3x8IjAiPT09cCYmIj0iPT09aCkmJihDPSEwLHA9IjAiLGg9Ij0iKTt2YXIgZWU9IiQiPT09bT9lOiIjIj09PW0mJi9bYm94WF0vLnRlc3QoTyk/IjAiK08udG9Mb3dlckNhc2UoKToiIixYPSIkIj09PW0/aTovWyVwXS8udGVzdChPKT9zOiIiLHhlPUdIW09dLGZlPS9bZGVmZ3BycyVdLy50ZXN0KE8pO2Z1bmN0aW9uIHZlKFQpe3ZhciBoZSx5ZSxKLG5lPWVlLGxlPVg7aWYoImMiPT09TylsZT14ZShUKStsZSxUPSIiO2Vsc2V7dmFyIGFlPShUPStUKTwwfHwxL1Q8MDtpZihUPWlzTmFOKFQpP2w6eGUoTWF0aC5hYnMoVCksSSksQSYmKFQ9ZnVuY3Rpb24obil7ZTpmb3IodmFyIHIsdD1uLmxlbmd0aCxlPTEsaT0tMTtlPHQ7KytlKXN3aXRjaChuW2VdKXtjYXNlIi4iOmk9cj1lO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPWUpLHI9ZTticmVhaztkZWZhdWx0OmlmKCErbltlXSlicmVhayBlO2k+MCYmKGk9MCl9cmV0dXJuIGk+MD9uLnNsaWNlKDAsaSkrbi5zbGljZShyKzEpOm59KFQpKSxhZSYmMD09K1QmJiIrIiE9PWYmJihhZT0hMSksbmU9KGFlPyIoIj09PWY/ZjphOiItIj09PWZ8fCIoIj09PWY/IiI6ZikrbmUsbGU9KCJzIj09PU8/X29lWzgrekgvM106IiIpK2xlKyhhZSYmIigiPT09Zj8iKSI6IiIpLGZlKWZvcihoZT0tMSx5ZT1ULmxlbmd0aDsrK2hlPHllOylpZig0OD4oSj1ULmNoYXJDb2RlQXQoaGUpKXx8Sj41Nyl7bGU9KDQ2PT09Sj9yK1Quc2xpY2UoaGUrMSk6VC5zbGljZShoZSkpK2xlLFQ9VC5zbGljZSgwLGhlKTticmVha319eSYmIUMmJihUPXQoVCwxLzApKTt2YXIgbWU9bmUubGVuZ3RoK1QubGVuZ3RoK2xlLmxlbmd0aCxqZT1tZTxfP25ldyBBcnJheShfLW1lKzEpLmpvaW4ocCk6IiI7c3dpdGNoKHkmJkMmJihUPXQoamUrVCxqZS5sZW5ndGg/Xy1sZS5sZW5ndGg6MS8wKSxqZT0iIiksaCl7Y2FzZSI8IjpUPW5lK1QrbGUramU7YnJlYWs7Y2FzZSI9IjpUPW5lK2plK1QrbGU7YnJlYWs7Y2FzZSJeIjpUPWplLnNsaWNlKDAsbWU9amUubGVuZ3RoPj4xKStuZStUK2xlK2plLnNsaWNlKG1lKTticmVhaztkZWZhdWx0OlQ9amUrbmUrVCtsZX1yZXR1cm4gbyhUKX1yZXR1cm4gST12b2lkIDA9PT1JPzY6L1tncHJzXS8udGVzdChPKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLEkpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEkpKSx2ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBkKyIifSx2ZX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKGQscCl7dmFyIGg9YygoKGQ9ZGgoZCkpLnR5cGU9ImYiLGQpKSxmPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFZ1KHApLzMpKSksbT1NYXRoLnBvdygxMCwtZiksQz1fb2VbOCtmLzNdO3JldHVybiBmdW5jdGlvbihfKXtyZXR1cm4gaChtKl8pK0N9fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxybz12Ui5mb3JtYXQseVI9dlIuZm9ybWF0UHJlZml4LGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpPW51bGw9PWk/MDoraSxyPW51bGw9PXI/MTorciwxPT09YXJndW1lbnRzLmxlbmd0aD8ocj1pLGk9MCk6ci09aSxmdW5jdGlvbigpe3JldHVybiB0KCkqcitpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCk7dmFyIEtIPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3ZhciBvLHM7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9bylhPW8sbz1udWxsO2Vsc2UgZG97bz0yKnQoKS0xLGE9Mip0KCktMSxzPW8qbythKmF9d2hpbGUoIXN8fHM+MSk7cmV0dXJuIGkrciphKk1hdGguc3FydCgtMipNYXRoLmxvZyhzKS9zKX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpLFpIPShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXt2YXIgaT1LSC5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChpKCkpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj0wLG89MDtvPGk7KytvKXIrPXQoKTtyZXR1cm4gcn19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpKTtmdW5jdGlvbiBtYShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKX1yZXR1cm4gdGhpc30oZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPVpILnNvdXJjZSh0KShpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpO3ZhciB5b2U9QXJyYXkucHJvdG90eXBlLHp3PXlvZS5tYXAsSW09eW9lLnNsaWNlO2Z1bmN0aW9uIEpIKG4pe3JldHVybitufXZhciB4b2U9WzAsMV07ZnVuY3Rpb24gZ2Eobil7cmV0dXJuIG59ZnVuY3Rpb24gJEgobix0KXtyZXR1cm4odC09bj0rbik/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH06ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIENvZShuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIGszZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPSRIKHIsaSksbz1lKHMsbykpOihpPSRIKGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBGM2Uobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPSRIKG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1GdShuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBwaChuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiBqdygpe3ZhciBpLHIsbyxhLGwsYyxuPXhvZSx0PXhvZSxlPVNtLHM9Z2E7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP0YzZTprM2UsbD1jPW51bGwsZH1mdW5jdGlvbiBkKHApe3JldHVybiBpc05hTihwPStwKT9vOihsfHwobD1hKG4ubWFwKGkpLHQsZSkpKShpKHMocCkpKX1yZXR1cm4gZC5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHMocigoY3x8KGM9YSh0LG4ubWFwKGkpLG5zKSkpKHApKSl9LGQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXp3LmNhbGwocCxKSCkscz09PWdhfHwocz1Db2UobikpLHUoKSk6bi5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUltLmNhbGwocCksdSgpKTp0LnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD1JbS5jYWxsKHApLGU9SUgsdSgpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/Q29lKG4pOmdhLGQpOnMhPT1nYX0sZC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLHUoKSk6ZX0sZC51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsZCk6b30sZnVuY3Rpb24ocCxoKXtyZXR1cm4gaT1wLHI9aCx1KCl9fWZ1bmN0aW9uIEd3KG4sdCl7cmV0dXJuIGp3KCkobix0KX1mdW5jdGlvbiBQbShuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIE13KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj1EZChuLHQsZSk7c3dpdGNoKChpPWRoKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoVnUodCkvMykpKS1WdShNYXRoLmFicyhuKSkpfShyLHMpKSYmKGkucHJlY2lzaW9uPW8pLHlSKGkscyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsVnUodCktVnUobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC1WdShNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiBybyhpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEscz1pW3JdLGE9aVtvXTtyZXR1cm4gYTxzJiYobD1zLHM9YSxhPWwsbD1yLHI9byxvPWwpLChsPWJ2KHMsYSxlKSk+MD9sPWJ2KHM9TWF0aC5mbG9vcihzL2wpKmwsYT1NYXRoLmNlaWwoYS9sKSpsLGUpOmw8MCYmKGw9YnYocz1NYXRoLmNlaWwocypsKS9sLGE9TWF0aC5mbG9vcihhKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKHMvbCkqbCxpW29dPU1hdGguY2VpbChhL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwocypsKS9sLGlbb109TWF0aC5mbG9vcihhKmwpL2wsdChpKSksbn0sbn1mdW5jdGlvbiBEYygpe3ZhciBuPUd3KGdhLGdhKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKG4sRGMoKSl9LG1hLmFwcGx5KG4sYXJndW1lbnRzKSxQbShuKX1mdW5jdGlvbiBiUihuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIHdvZShuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gTW9lKG4pe3JldHVybiBNYXRoLmV4cChuKX1mdW5jdGlvbiBOM2Uobil7cmV0dXJuLU1hdGgubG9nKC1uKX1mdW5jdGlvbiBMM2Uobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiBCM2Uobil7cmV0dXJuIGlzRmluaXRlKG4pPysoIjFlIituKTpuPDA/MDpufWZ1bmN0aW9uIFNvZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiB0NChuKXt2YXIgcixvLHQ9bih3b2UsTW9lKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP0IzZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9U29lKHIpLG89U29lKG8pLG4oTjNlLEwzZSkpOm4od29lLE1vZSksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSthLHMoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUoYSkscygpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24oYSl7dmFyIGQsbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXTsoZD11PGMpJiYocD1jLGM9dSx1PXApO3ZhciBmLG0sQyxwPXIoYyksaD1yKHUpLF89bnVsbD09YT8xMDorYSx5PVtdO2lmKCEoaSUxKSYmaC1wPF8pe2lmKHA9TWF0aC5yb3VuZChwKS0xLGg9TWF0aC5yb3VuZChoKSsxLGM+MCl7Zm9yKDtwPGg7KytwKWZvcihtPTEsZj1vKHApO208aTsrK20paWYoISgoQz1mKm0pPGMpKXtpZihDPnUpYnJlYWs7eS5wdXNoKEMpfX1lbHNlIGZvcig7cDxoOysrcClmb3IobT1pLTEsZj1vKHApO20+PTE7LS1tKWlmKCEoKEM9ZiptKTxjKSl7aWYoQz51KWJyZWFrO3kucHVzaChDKX19ZWxzZSB5PU13KHAsaCxNYXRoLm1pbihoLXAsXykpLm1hcChvKTtyZXR1cm4gZD95LnJldmVyc2UoKTp5fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9cm8obCkpLGE9PT0xLzApcmV0dXJuIGw7bnVsbD09YSYmKGE9MTApO3ZhciBjPU1hdGgubWF4KDEsaSphL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgZD11L28oTWF0aC5yb3VuZChyKHUpKSk7cmV0dXJuIGQqaTxpLS41JiYoZCo9aSksZDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUoYlIoZSgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIoYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmNlaWwocihhKSkpfX0pKX0sdH1mdW5jdGlvbiBXdygpe3ZhciBuPXQ0KGp3KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcGgobixXdygpKS5iYXNlKG4uYmFzZSgpKX0sbWEuYXBwbHkobixhcmd1bWVudHMpLG59dmFyIG40PW5ldyBEYXRlLGk0PW5ldyBEYXRlO2Z1bmN0aW9uIHVyKG4sdCxlLGkpe2Z1bmN0aW9uIHIobyl7cmV0dXJuIG4obz0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZSgrbykpLG99LHIuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxuKG8pLG99LHIucm91bmQ9ZnVuY3Rpb24obyl7dmFyIHM9cihvKSxhPXIuY2VpbChvKTtyZXR1cm4gby1zPGEtbz9zOmF9LHIub2Zmc2V0PWZ1bmN0aW9uKG8scyl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksbnVsbD09cz8xOk1hdGguZmxvb3IocykpLG99LHIucmFuZ2U9ZnVuY3Rpb24obyxzLGEpe3ZhciBjLGw9W107aWYobz1yLmNlaWwobyksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG88cyYmYT4wKSlyZXR1cm4gbDtkb3tsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxhKSxuKG8pfXdoaWxlKGM8byYmbzxzKTtyZXR1cm4gbH0sci5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHVyKGZ1bmN0aW9uKHMpe2lmKHM+PXMpZm9yKDtuKHMpLCFvKHMpOylzLnNldFRpbWUocy0xKX0sZnVuY3Rpb24ocyxhKXtpZihzPj1zKWlmKGE8MClmb3IoOysrYTw9MDspZm9yKDt0KHMsLTEpLCFvKHMpOyk7ZWxzZSBmb3IoOy0tYT49MDspZm9yKDt0KHMsMSksIW8ocyk7KTt9KX0sZSYmKHIuY291bnQ9ZnVuY3Rpb24obyxzKXtyZXR1cm4gbjQuc2V0VGltZSgrbyksaTQuc2V0VGltZSgrcyksbihuNCksbihpNCksTWF0aC5mbG9vcihlKG40LGk0KSl9LHIuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSxpc0Zpbml0ZShvKSYmbz4wP28+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKHMpe3JldHVybiBpKHMpJW89PTB9OmZ1bmN0aW9uKHMpe3JldHVybiByLmNvdW50KDAscyklbz09MH0pOnI6bnVsbH0pLHJ9dmFyIHhSPXVyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC1ufSk7eFIuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5mbG9vcihuKSxpc0Zpbml0ZShuKSYmbj4wP24+MT91cihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L24pKm4pfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKm4pfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL259KTp4UjpudWxsfTt2YXIgQ1I9eFIsUmQ9NmU0LE1SPTYwNDhlNSxUb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLFNSPVRvZSxBb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKS0xZTMqbi5nZXRTZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlJkKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9SZH0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksbzQ9QW9lLElvZT11cihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSpSZCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLHM0PUlvZSxQb2U9dXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqUmQpLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLEl2PVBvZTtmdW5jdGlvbiBPbShuKXtyZXR1cm4gdXIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpSZCkvTVJ9KX12YXIga209T20oMCksUHY9T20oMSksaGg9KE9tKDIpLE9tKDMpLE9tKDQpKSxMb2U9KE9tKDUpLE9tKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0RGF0ZSgxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldE1vbnRoKCktbi5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pKSxhND1Mb2UsbDQ9dXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtsNC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP3VyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciBPZD1sNCxCb2U9dXIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksRVI9Qm9lO2Z1bmN0aW9uIEZtKG4pe3JldHVybiB1cihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1uKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL01SfSl9dmFyIHF3PUZtKDApLFJ2PUZtKDEpLGZoPShGbSgyKSxGbSgzKSxGbSg0KSksYzQ9KEZtKDUpLEZtKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSkpO2M0LmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBpc0Zpbml0ZShuPU1hdGguZmxvb3IobikpJiZuPjA/dXIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9uKSpuKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKm4pfSk6bnVsbH07dmFyIE5tPWM0O2Z1bmN0aW9uIHU0KG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKX1mdW5jdGlvbiBkNChuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKX1mdW5jdGlvbiBZdyhuLHQsZSl7cmV0dXJue3k6bixtOnQsZDplLEg6MCxNOjAsUzowLEw6MH19dmFyIE92LGt2LEdvZT17Ii0iOiIiLF86IiAiLDA6IjAifSxXbz0vXlxzKlxkKy8sc0JlPS9eJS8sYUJlPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBIaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBsQmUobil7cmV0dXJuIG4ucmVwbGFjZShhQmUsIlxcJCYiKX1mdW5jdGlvbiBYdyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAobEJlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUXcobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gY0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZkJlKG4sdCxlKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPTMqaVswXS0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ubT1pWzBdLTEsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9CZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdkJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENCZShuLHQsZSl7dmFyIGk9c0JlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gd0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUW9lKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gU0JlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIEVCZShuLHQpe3JldHVybiBIaShuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gVEJlKG4sdCl7cmV0dXJuIEhpKDErSXYuY291bnQoT2QobiksbiksdCwzKX1mdW5jdGlvbiBlc2Uobix0KXtyZXR1cm4gSGkobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIERCZShuLHQpe3JldHVybiBlc2Uobix0KSsiMDAwIn1mdW5jdGlvbiBBQmUobix0KXtyZXR1cm4gSGkobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBJQmUobix0KXtyZXR1cm4gSGkobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBQQmUobix0KXtyZXR1cm4gSGkobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBSQmUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIE9CZShuLHQpe3JldHVybiBIaShrbS5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gdHNlKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P2hoKG4pOmhoLmNlaWwobil9ZnVuY3Rpb24ga0JlKG4sdCl7cmV0dXJuIG49dHNlKG4pLEhpKGhoLmNvdW50KE9kKG4pLG4pKyg0PT09T2QobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gRkJlKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIE5CZShuLHQpe3JldHVybiBIaShQdi5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gTEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBCQmUobix0KXtyZXR1cm4gSGkoKG49dHNlKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFZCZShuLHQpe3JldHVybiBIaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSEJlKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gSGkoKG49ZT49NHx8MD09PWU/aGgobik6aGguY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBVQmUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStIaSh0LzYwfDAsIjAiLDIpK0hpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIEtvZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHpCZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiBqQmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIEdCZShuLHQpe3JldHVybiBIaSgxK0VSLmNvdW50KE5tKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbnNlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBXQmUobix0KXtyZXR1cm4gbnNlKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gcUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gWEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gUUJlKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBLQmUobix0KXtyZXR1cm4gSGkocXcuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGlzZShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHwwPT09dD9maChuKTpmaC5jZWlsKG4pfWZ1bmN0aW9uIFpCZShuLHQpe3JldHVybiBuPWlzZShuKSxIaShmaC5jb3VudChObShuKSxuKSsoND09PU5tKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIEpCZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiAkQmUobix0KXtyZXR1cm4gSGkoUnYuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGVWZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdFZlKG4sdCl7cmV0dXJuIEhpKChuPWlzZShuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBuVmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGlWZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEhpKChuPWU+PTR8fDA9PT1lP2ZoKG4pOmZoLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gclZlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBab2UoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gSm9lKG4pe3JldHVybitufWZ1bmN0aW9uICRvZShuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfU92PWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMscz1uLnNob3J0RGF5cyxhPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPVh3KHIpLHU9UXcociksZD1YdyhvKSxwPVF3KG8pLGg9WHcocyksZj1RdyhzKSxtPVh3KGEpLEM9UXcoYSksXz1YdyhsKSx5PVF3KGwpLEk9e2E6ZnVuY3Rpb24oQ2Upe3JldHVybiBzW0NlLmdldERheSgpXX0sQTpmdW5jdGlvbihDZSl7cmV0dXJuIG9bQ2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKENlKXtyZXR1cm4gbFtDZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihDZSl7cmV0dXJuIGFbQ2UuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlFvZSxlOlFvZSxmOkRCZSxnOkJCZSxHOkhCZSxIOlNCZSxJOkVCZSxqOlRCZSxMOmVzZSxtOkFCZSxNOklCZSxwOmZ1bmN0aW9uKENlKXtyZXR1cm4gclsrKENlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24oQ2Upe3JldHVybiAxK35+KENlLmdldE1vbnRoKCkvMyl9LFE6Sm9lLHM6JG9lLFM6UEJlLHU6UkJlLFU6T0JlLFY6a0JlLHc6RkJlLFc6TkJlLHg6bnVsbCxYOm51bGwseTpMQmUsWTpWQmUsWjpVQmUsIiUiOlpvZX0sQT17YTpmdW5jdGlvbihDZSl7cmV0dXJuIHNbQ2UuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKENlKXtyZXR1cm4gb1tDZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24oQ2Upe3JldHVybiBsW0NlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKENlKXtyZXR1cm4gYVtDZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6S29lLGU6S29lLGY6V0JlLGc6dFZlLEc6aVZlLEg6ekJlLEk6akJlLGo6R0JlLEw6bnNlLG06cUJlLE06WUJlLHA6ZnVuY3Rpb24oQ2Upe3JldHVybiByWysoQ2UuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihDZSl7cmV0dXJuIDErfn4oQ2UuZ2V0VVRDTW9udGgoKS8zKX0sUTpKb2Usczokb2UsUzpYQmUsdTpRQmUsVTpLQmUsVjpaQmUsdzpKQmUsVzokQmUseDpudWxsLFg6bnVsbCx5OmVWZSxZOm5WZSxaOnJWZSwiJSI6Wm9lfSxPPXthOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9aC5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS53PWZbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbihDZSx2dCxfdCl7dmFyIGllPWQuZXhlYyh2dC5zbGljZShfdCkpO3JldHVybiBpZT8oQ2Uudz1wW2llWzBdLnRvTG93ZXJDYXNlKCldLF90K2llWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oQ2UsdnQsX3Qpe3ZhciBpZT1fLmV4ZWModnQuc2xpY2UoX3QpKTtyZXR1cm4gaWU/KENlLm09eVtpZVswXS50b0xvd2VyQ2FzZSgpXSxfdCtpZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9bS5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5tPUNbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLHQsdnQsX3QpfSxkOllvZSxlOllvZSxmOnhCZSxnOnFvZSxHOldvZSxIOlhvZSxJOlhvZSxqOl9CZSxMOmJCZSxtOmdCZSxNOnZCZSxwOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9Yy5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5wPXVbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0scTptQmUsUTp3QmUsczpNQmUsUzp5QmUsdTp1QmUsVTpkQmUsVjpwQmUsdzpjQmUsVzpoQmUseDpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLGUsdnQsX3QpfSxYOmZ1bmN0aW9uKENlLHZ0LF90KXtyZXR1cm4geGUoQ2UsaSx2dCxfdCl9LHk6cW9lLFk6V29lLFo6ZkJlLCIlIjpDQmV9O2Z1bmN0aW9uIGVlKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBodCxzbixTbixpZT1bXSxjdD0tMSxZZT0wLHh0PUNlLmxlbmd0aDtmb3IoX3QgaW5zdGFuY2VvZiBEYXRlfHwoX3Q9bmV3IERhdGUoK190KSk7KytjdDx4dDspMzc9PT1DZS5jaGFyQ29kZUF0KGN0KSYmKGllLnB1c2goQ2Uuc2xpY2UoWWUsY3QpKSxudWxsIT0oc249R29lW2h0PUNlLmNoYXJBdCgrK2N0KV0pP2h0PUNlLmNoYXJBdCgrK2N0KTpzbj0iZSI9PT1odD8iICI6IjAiLChTbj12dFtodF0pJiYoaHQ9U24oX3Qsc24pKSxpZS5wdXNoKGh0KSxZZT1jdCsxKTtyZXR1cm4gaWUucHVzaChDZS5zbGljZShZZSxjdCkpLGllLmpvaW4oIiIpfX1mdW5jdGlvbiBYKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBZZSx4dCxpZT1ZdygxOTAwLHZvaWQgMCwxKTtpZih4ZShpZSxDZSxfdCs9IiIsMCkhPV90Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBpZSlyZXR1cm4gbmV3IERhdGUoaWUuUSk7aWYoInMiaW4gaWUpcmV0dXJuIG5ldyBEYXRlKDFlMyppZS5zKygiTCJpbiBpZT9pZS5MOjApKTtpZih2dCYmISgiWiJpbiBpZSkmJihpZS5aPTApLCJwImluIGllJiYoaWUuSD1pZS5IJTEyKzEyKmllLnApLHZvaWQgMD09PWllLm0mJihpZS5tPSJxImluIGllP2llLnE6MCksIlYiaW4gaWUpe2lmKGllLlY8MXx8aWUuVj41MylyZXR1cm4gbnVsbDsidyJpbiBpZXx8KGllLnc9MSksIloiaW4gaWU/KHh0PShZZT1kNChZdyhpZS55LDAsMSkpKS5nZXRVVENEYXkoKSxZZT14dD40fHwwPT09eHQ/UnYuY2VpbChZZSk6UnYoWWUpLFllPUVSLm9mZnNldChZZSw3KihpZS5WLTEpKSxpZS55PVllLmdldFVUQ0Z1bGxZZWFyKCksaWUubT1ZZS5nZXRVVENNb250aCgpLGllLmQ9WWUuZ2V0VVRDRGF0ZSgpKyhpZS53KzYpJTcpOih4dD0oWWU9dTQoWXcoaWUueSwwLDEpKSkuZ2V0RGF5KCksWWU9eHQ+NHx8MD09PXh0P1B2LmNlaWwoWWUpOlB2KFllKSxZZT1Jdi5vZmZzZXQoWWUsNyooaWUuVi0xKSksaWUueT1ZZS5nZXRGdWxsWWVhcigpLGllLm09WWUuZ2V0TW9udGgoKSxpZS5kPVllLmdldERhdGUoKSsoaWUudys2KSU3KX1lbHNlKCJXImluIGllfHwiVSJpbiBpZSkmJigidyJpbiBpZXx8KGllLnc9InUiaW4gaWU/aWUudSU3OiJXImluIGllPzE6MCkseHQ9IloiaW4gaWU/ZDQoWXcoaWUueSwwLDEpKS5nZXRVVENEYXkoKTp1NChZdyhpZS55LDAsMSkpLmdldERheSgpLGllLm09MCxpZS5kPSJXImluIGllPyhpZS53KzYpJTcrNyppZS5XLSh4dCs1KSU3OmllLncrNyppZS5VLSh4dCs2KSU3KTtyZXR1cm4iWiJpbiBpZT8oaWUuSCs9aWUuWi8xMDB8MCxpZS5NKz1pZS5aJTEwMCxkNChpZSkpOnU0KGllKX19ZnVuY3Rpb24geGUoQ2UsdnQsX3QsaWUpe2Zvcih2YXIgaHQsc24sY3Q9MCxZZT12dC5sZW5ndGgseHQ9X3QubGVuZ3RoO2N0PFllOyl7aWYoaWU+PXh0KXJldHVybi0xO2lmKDM3PT09KGh0PXZ0LmNoYXJDb2RlQXQoY3QrKykpKXtpZihodD12dC5jaGFyQXQoY3QrKyksIShzbj1PW2h0IGluIEdvZT92dC5jaGFyQXQoY3QrKyk6aHRdKXx8KGllPXNuKENlLF90LGllKSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1fdC5jaGFyQ29kZUF0KGllKyspKXJldHVybi0xfXJldHVybiBpZX1yZXR1cm4gSS54PWVlKGUsSSksSS5YPWVlKGksSSksSS5jPWVlKHQsSSksQS54PWVlKGUsQSksQS5YPWVlKGksQSksQS5jPWVlKHQsQSkse2Zvcm1hdDpmdW5jdGlvbihDZSl7dmFyIHZ0PWVlKENlKz0iIixJKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSxwYXJzZTpmdW5jdGlvbihDZSl7dmFyIHZ0PVgoQ2UrPSIiLCExKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1lZShDZSs9IiIsQSk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH0sdXRjUGFyc2U6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1YKENlKz0iIiwhMCk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLGt2PU92LmZvcm1hdDt2YXIgWnc9NmU0LEp3PTYwKlp3LCR3PTI0Kkp3LGY0PTM2NSokdztmdW5jdGlvbiBzVmUobil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIGFWZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGU/K246K25ldyBEYXRlKCtuKX1mdW5jdGlvbiBtNChuLHQsZSxpLHIsbyxzLGEsbCl7dmFyIGM9R3coZ2EsZ2EpLHU9Yy5pbnZlcnQsZD1jLmRvbWFpbixwPWwoIi4lTCIpLGg9bCgiOiVTIiksZj1sKCIlSTolTSIpLG09bCgiJUkgJXAiKSxDPWwoIiVhICVkIiksXz1sKCIlYiAlZCIpLHk9bCgiJUIiKSxJPWwoIiVZIiksQT1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsWnddLFtvLDUsNSpad10sW28sMTUsMTUqWnddLFtvLDMwLDMwKlp3XSxbciwxLEp3XSxbciwzLDMqSnddLFtyLDYsNipKd10sW3IsMTIsMTIqSnddLFtpLDEsJHddLFtpLDIsMiokd10sW2UsMSw2MDQ4ZTVdLFt0LDEsMjU5MmU2XSxbdCwzLDc3NzZlNl0sW24sMSxmNF1dO2Z1bmN0aW9uIE8oWCl7cmV0dXJuKHMoWCk8WD9wOm8oWCk8WD9oOnIoWCk8WD9mOmkoWCk8WD9tOnQoWCk8WD9lKFgpPFg/QzpfOm4oWCk8WD95OkkpKFgpfWZ1bmN0aW9uIGVlKFgseGUsZmUsdmUpe2lmKG51bGw9PVgmJihYPTEwKSwibnVtYmVyIj09dHlwZW9mIFgpe3ZhciBUPU1hdGguYWJzKGZlLXhlKS9YLG5lPXd3KGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGVbMl19KS5yaWdodChBLFQpO25lPT09QS5sZW5ndGg/KHZlPURkKHhlL2Y0LGZlL2Y0LFgpLFg9bik6bmU/KHZlPShuZT1BW1QvQVtuZS0xXVsyXTxBW25lXVsyXS9UP25lLTE6bmVdKVsxXSxYPW5lWzBdKToodmU9TWF0aC5tYXgoRGQoeGUsZmUsWCksMSksWD1hKX1yZXR1cm4gbnVsbD09dmU/WDpYLmV2ZXJ5KHZlKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBEYXRlKHUoWCkpfSxjLmRvbWFpbj1mdW5jdGlvbihYKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9kKHp3LmNhbGwoWCxhVmUpKTpkKCkubWFwKHNWZSl9LGMudGlja3M9ZnVuY3Rpb24oWCx4ZSl7dmFyIGxlLGZlPWQoKSx2ZT1mZVswXSxUPWZlW2ZlLmxlbmd0aC0xXSxuZT1UPHZlO3JldHVybiBuZSYmKGxlPXZlLHZlPVQsVD1sZSksbGU9KGxlPWVlKFgsdmUsVCx4ZSkpP2xlLnJhbmdlKHZlLFQrMSk6W10sbmU/bGUucmV2ZXJzZSgpOmxlfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oWCx4ZSl7cmV0dXJuIG51bGw9PXhlP086bCh4ZSl9LGMubmljZT1mdW5jdGlvbihYLHhlKXt2YXIgZmU9ZCgpO3JldHVybihYPWVlKFgsZmVbMF0sZmVbZmUubGVuZ3RoLTFdLHhlKSk/ZChiUihmZSxYKSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKGMsbTQobix0LGUsaSxyLG8scyxhLGwpKX0sY31mdW5jdGlvbiBMbSgpe3JldHVybiBtYS5hcHBseShtNChPZCxhNCxrbSxJdixzNCxvNCxTUixDUixrdikuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZzQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBGdihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIGVNKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiB0TShuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY3NlKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1nNC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmc0LGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y3NlKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoZU0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsdE0odGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYodE0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsZU0odGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8scyx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9jc2Uocik6aTpyLHQ/dC5MPT09bj90Lkw9bzp0LlI9bzp0aGlzLl89byxpJiZyPyhzPW8uQyxvLkM9bi5DLG8uTD1pLGkuVT1vLG8hPT1yPyh0PW8uVSxvLlU9bi5VLHQuTD1uPW8uUixvLlI9cixyLlU9byk6KG8uVT10LHQ9byxuPW8uUikpOihzPW4uQyxuPW8pLG4mJihuLlU9dCksIXMpe2lmKG4mJm4uQylyZXR1cm4gdm9pZChuLkM9ITEpO2Rve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoKGU9dC5SKS5DJiYoZS5DPSExLHQuQz0hMCxlTSh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCx0TSh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSxlTSh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPXQuTCkuQyYmKGUuQz0hMSx0LkM9ITAsdE0odGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsZU0odGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsdE0odGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O3ZhciBfND1nNDtmdW5jdGlvbiBOdihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxvPXFvLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJm5NKHIsbix0LGUpLGkmJm5NKHIsdCxuLGkpLFVzW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFVzW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLHJ9ZnVuY3Rpb24gTHYobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIG5NKG4sdCxlLGkpe25bMF18fG5bMV0/bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pOihuWzBdPWksbi5sZWZ0PXQsbi5yaWdodD1lKX1mdW5jdGlvbiB1VmUobix0LGUsaSxyKXt2YXIgbSxvPW5bMF0scz1uWzFdLGE9b1swXSxsPW9bMV0sZD0wLHA9MSxoPXNbMF0tYSxmPXNbMV0tbDtpZihtPXQtYSxofHwhKG0+MCkpe2lmKG0vPWgsaDwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihoPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPWktYSxofHwhKG08MCkpe2lmKG0vPWgsaDwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihoPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1pZihtPWUtbCxmfHwhKG0+MCkpe2lmKG0vPWYsZjwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihmPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPXItbCxmfHwhKG08MCkpe2lmKG0vPWYsZjwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihmPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1yZXR1cm4hKGQ+MCkmJiEocDwxKXx8KGQ+MCYmKG5bMF09W2ErZCpoLGwrZCpmXSkscDwxJiYoblsxXT1bYStwKmgsbCtwKmZdKSksITB9fX19fWZ1bmN0aW9uIGRWZShuLHQsZSxpLHIpe3ZhciBvPW5bMV07aWYobylyZXR1cm4hMDt2YXIgbSxDLHM9blswXSxhPW4ubGVmdCxsPW4ucmlnaHQsYz1hWzBdLHU9YVsxXSxkPWxbMF0scD1sWzFdLGg9KGMrZCkvMjtpZihwPT09dSl7aWYoaDx0fHxoPj1pKXJldHVybjtpZihjPmQpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1baCxlXTtvPVtoLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9W2gscl07bz1baCxlXX19ZWxzZSBpZihDPSh1K3ApLzItKG09KGMtZCkvKHAtdSkpKmgsbTwtMXx8bT4xKWlmKGM+ZCl7aWYocyl7aWYoc1sxXT49cilyZXR1cm59ZWxzZSBzPVsoZS1DKS9tLGVdO289WyhyLUMpL20scl19ZWxzZXtpZihzKXtpZihzWzFdPGUpcmV0dXJufWVsc2Ugcz1bKHItQykvbSxyXTtvPVsoZS1DKS9tLGVdfWVsc2UgaWYodTxwKXtpZihzKXtpZihzWzBdPj1pKXJldHVybn1lbHNlIHM9W3QsbSp0K0NdO289W2ksbSppK0NdfWVsc2V7aWYocyl7aWYoc1swXTx0KXJldHVybn1lbHNlIHM9W2ksbSppK0NdO289W3QsbSp0K0NdfXJldHVybiBuWzBdPXMsblsxXT1vLCEwfWZ1bmN0aW9uIHBWZShuLHQpe3ZhciBlPW4uc2l0ZSxpPXQubGVmdCxyPXQucmlnaHQ7cmV0dXJuIGU9PT1yJiYocj1pLGk9ZSkscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihlPT09aT8oaT10WzFdLHI9dFswXSk6KGk9dFswXSxyPXRbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uIHY0KG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQhPT1uLnNpdGUpXX1mdW5jdGlvbiBoVmUobix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfXZhciBUUixmc2U9W107ZnVuY3Rpb24gZlZlKCl7RnYodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEJtKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLHU9b1swXS1zLGQ9b1sxXS1hLHA9MioobCpkLWMqdSk7aWYoIShwPj0tbXNlKSl7dmFyIGg9bCpsK2MqYyxmPXUqdStkKmQsbT0oZCpoLWMqZikvcCxDPShsKmYtdSpoKS9wLF89ZnNlLnBvcCgpfHxuZXcgZlZlO18uYXJjPW4sXy5zaXRlPXIsXy54PW0rcyxfLnk9KF8uY3k9QythKStNYXRoLnNxcnQobSptK0MqQyksbi5jaXJjbGU9Xztmb3IodmFyIHk9bnVsbCxJPUJ2Ll87STspaWYoXy55PEkueXx8Xy55PT09SS55JiZfLng8PUkueCl7aWYoIUkuTCl7eT1JLlA7YnJlYWt9ST1JLkx9ZWxzZXtpZighSS5SKXt5PUk7YnJlYWt9ST1JLlJ9QnYuaW5zZXJ0KHksXykseXx8KFRSPV8pfX19fWZ1bmN0aW9uIFZtKG4pe3ZhciB0PW4uY2lyY2xlO3QmJih0LlB8fChUUj10Lk4pLEJ2LnJlbW92ZSh0KSxmc2UucHVzaCh0KSxGdih0KSxuLmNpcmNsZT1udWxsKX12YXIgX3NlPVtdO2Z1bmN0aW9uIG1WZSgpe0Z2KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBnc2Uobil7dmFyIHQ9X3NlLnBvcCgpfHxuZXcgbVZlO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIHk0KG4pe1ZtKG4pLEhtLnJlbW92ZShuKSxfc2UucHVzaChuKSxGdihuKX1mdW5jdGlvbiB2c2Uobil7dmFyIHQ9bi5jaXJjbGUsZT10LngsaT10LmN5LHI9W2UsaV0sbz1uLlAscz1uLk4sYT1bbl07eTQobik7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKGUtbC5jaXJjbGUueCk8b3ImJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPG9yOylvPWwuUCxhLnVuc2hpZnQobCkseTQobCksbD1vO2EudW5zaGlmdChsKSxWbShsKTtmb3IodmFyIGM9cztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxvciYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8b3I7KXM9Yy5OLGEucHVzaChjKSx5NChjKSxjPXM7YS5wdXNoKGMpLFZtKGMpO3ZhciBkLHU9YS5sZW5ndGg7Zm9yKGQ9MTtkPHU7KytkKW5NKChjPWFbZF0pLmVkZ2UsKGw9YVtkLTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1hW3UtMV0pLmVkZ2U9TnYoKGw9YVswXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxCbShsKSxCbShjKX1mdW5jdGlvbiB5c2Uobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1IbS5fO2E7KWlmKChvPWJzZShhLGUpLXQpPm9yKWE9YS5MO2Vsc2V7aWYoISgocz10LWdWZShhLGUpKT5vcikpe28+LW9yPyhpPWEuUCxyPWEpOnM+LW9yPyhpPWEscj1hLk4pOmk9cj1hO2JyZWFrfWlmKCFhLlIpe2k9YTticmVha31hPWEuUn0hZnVuY3Rpb24obil7VXNbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1nc2Uobik7aWYoSG0uaW5zZXJ0KGksbCksaXx8cil7aWYoaT09PXIpcmV0dXJuIFZtKGkpLHI9Z3NlKGkuc2l0ZSksSG0uaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSxCbShpKSx2b2lkIEJtKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSk7Vm0oaSksVm0ocik7dmFyIGM9aS5zaXRlLHU9Y1swXSxkPWNbMV0scD1uWzBdLXUsaD1uWzFdLWQsZj1yLnNpdGUsbT1mWzBdLXUsQz1mWzFdLWQsXz0yKihwKkMtaCptKSx5PXAqcCtoKmgsST1tKm0rQypDLEE9WyhDKnktaCpJKS9fK3UsKHAqSS1tKnkpL18rZF07bk0oci5lZGdlLGMsZixBKSxsLmVkZ2U9TnYoYyxuLG51bGwsQSksci5lZGdlPU52KG4sZixudWxsLEEpLEJtKGkpLEJtKHIpfX1mdW5jdGlvbiBic2Uobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgcz1uLlA7aWYoIXMpcmV0dXJuLTEvMDt2YXIgYT0oZT1zLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksZD0xL28tMS9jLHA9dS9jO3JldHVybiBkPygtcCtNYXRoLnNxcnQocCpwLTIqZCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9kK2k6KGkrYSkvMn1mdW5jdGlvbiBnVmUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gYnNlKGUsdCk7dmFyIGk9bi5zaXRlO3JldHVybiBpWzFdPT09dD9pWzBdOjEvMH12YXIgSG0sVXMsQnYscW8sb3I9MWUtNixtc2U9MWUtMTI7ZnVuY3Rpb24gX1ZlKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiB2VmUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gRFIobix0KXt2YXIgaSxyLG8sZT1uLnNvcnQodlZlKS5wb3AoKTtmb3IocW89W10sVXM9bmV3IEFycmF5KG4ubGVuZ3RoKSxIbT1uZXcgXzQsQnY9bmV3IF80OzspaWYobz1UUixlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih5c2UoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7dnNlKG8uYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgZSxpLHIsbyxuPTAsdD1Vcy5sZW5ndGg7bjx0OysrbilpZigoZT1Vc1tuXSkmJihvPShpPWUuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgcz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPG87KytyKXNbcl09cixhW3JdPXBWZShlLHFvW2lbcl1dKTtmb3Iocy5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGFbY10tYVtsXX0pLHI9MDtyPG87KytyKWFbcl09aVtzW3JdXTtmb3Iocj0wO3I8bzsrK3IpaVtyXT1hW3JdfX0oKSx0KXt2YXIgcz0rdFswXVswXSxhPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTsoZnVuY3Rpb24obix0LGUsaSl7Zm9yKHZhciBvLHI9cW8ubGVuZ3RoO3ItLTspZFZlKG89cW9bcl0sbix0LGUsaSkmJnVWZShvLG4sdCxlLGkpJiYoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5vcnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5vcil8fGRlbGV0ZSBxb1tyXX0pKHMsYSxsLGMpLGZ1bmN0aW9uKG4sdCxlLGkpe3ZhciBvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxyPVVzLmxlbmd0aCxfPSEwO2ZvcihvPTA7bzxyOysrbylpZihzPVVzW29dKXtmb3IoYT1zLnNpdGUsbD0oYz1zLmhhbGZlZGdlcykubGVuZ3RoO2wtLTspcW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspbT0oZj1oVmUocyxxb1tjW2xdXSkpWzBdLEM9ZlsxXSxwPShkPXY0KHMscW9bY1srK2wldV1dKSlbMF0saD1kWzFdLChNYXRoLmFicyhtLXApPm9yfHxNYXRoLmFicyhDLWgpPm9yKSYmKGMuc3BsaWNlKGwsMCxxby5wdXNoKEx2KGEsZixNYXRoLmFicyhtLW4pPG9yJiZpLUM+b3I/W24sTWF0aC5hYnMocC1uKTxvcj9oOmldOk1hdGguYWJzKEMtaSk8b3ImJmUtbT5vcj9bTWF0aC5hYnMoaC1pKTxvcj9wOmUsaV06TWF0aC5hYnMobS1lKTxvciYmQy10Pm9yP1tlLE1hdGguYWJzKHAtZSk8b3I/aDp0XTpNYXRoLmFicyhDLXQpPG9yJiZtLW4+b3I/W01hdGguYWJzKGgtdCk8b3I/cDpuLHRdOm51bGwpKS0xKSwrK3UpO3UmJihfPSExKX1pZihfKXt2YXIgeSxJLEEsTz0xLzA7Zm9yKG89MCxfPW51bGw7bzxyOysrbykocz1Vc1tvXSkmJihBPSh5PShhPXMuc2l0ZSlbMF0tbikqeSsoST1hWzFdLXQpKkkpPE8mJihPPUEsXz1zKTtpZihfKXt2YXIgZWU9W24sdF0sWD1bbixpXSx4ZT1bZSxpXSxmZT1bZSx0XTtfLmhhbGZlZGdlcy5wdXNoKHFvLnB1c2goTHYoYT1fLnNpdGUsZWUsWCkpLTEscW8ucHVzaChMdihhLFgseGUpKS0xLHFvLnB1c2goTHYoYSx4ZSxmZSkpLTEscW8ucHVzaChMdihhLGZlLGVlKSktMSl9fWZvcihvPTA7bzxyOysrbykocz1Vc1tvXSkmJihzLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBVc1tvXSl9KHMsYSxsLGMpfXRoaXMuZWRnZXM9cW8sdGhpcy5jZWxscz1VcyxIbT1Cdj1xbz1Vcz1udWxsfWZ1bmN0aW9uIFVtKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1EUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRSLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB2NCh0LG5baV0pfSk7cmV0dXJuIGUuZGF0YT10LnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBuPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7aWYoYT0obz1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgbyxhLGwscj1lLnNpdGUscz0tMSxjPXRbb1thLTFdXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQ7KytzPGE7KWw9dSx1PShjPXRbb1tzXV0pLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJmk8bC5pbmRleCYmaTx1LmluZGV4JiZfVmUocixsLHUpPDAmJm4ucHVzaChbci5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLG59LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybntzb3VyY2U6bi5sZWZ0LmRhdGEsdGFyZ2V0Om4ucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihuLHQsZSl7Zm9yKHZhciByLGEsaT10aGlzLG89aS5fZm91bmR8fDAscz1pLmNlbGxzLmxlbmd0aDshKGE9aS5jZWxsc1tvXSk7KWlmKCsrbz49cylyZXR1cm4gbnVsbDt2YXIgbD1uLWEuc2l0ZVswXSxjPXQtYS5zaXRlWzFdLHU9bCpsK2MqYztkb3thPWkuY2VsbHNbcj1vXSxvPW51bGwsYS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2VzW2RdLGg9cC5sZWZ0O2lmKGghPT1hLnNpdGUmJmh8fChoPXAucmlnaHQpKXt2YXIgZj1uLWhbMF0sbT10LWhbMV0sQz1mKmYrbSptO0M8dSYmKHU9QyxvPWguaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gaS5fZm91bmQ9cixudWxsPT1lfHx1PD1lKmU/YS5zaXRlOm51bGx9fSxVbS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVtLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiAxPT09bj90aGlzOm5ldyBVbSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1uJjA9PT10P3RoaXM6bmV3IFVtKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IFVtKDEsMCwwKTt2YXIgTXNlPXJvKCIuMn5lIikseVZlPXJvKCIuNH5yIikseHNlPXJvKCIsfiIpO2Z1bmN0aW9uIENzZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp5VmUobil9dmFyIHptPXtmb3JtYXRUaWNrOkNzZSxmb3JtYXRTaG9ydDpDc2UsZm9ybWF0UmVhZGFibGUobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp4c2Uobil9LGZvcm1hdExvbmc6eHNlfSxiVmU9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTtmdW5jdGlvbiBBUihuKXtyZXR1cm4gYlZlLmZvcm1hdChuKX12YXIgdnM9e2Zvcm1hdFRpY2s6QVIsZm9ybWF0U2hvcnQ6QVIsZm9ybWF0UmVhZGFibGU6QVIsZm9ybWF0TG9uZzpBUn0seFZlPXJvKCIwLjN+cyIpLENWZT1ybygiLC4zfmYiKTtmdW5jdGlvbiBJUihuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49MWU0fHx0PC4wMDE/eFZlKG4pOkNWZShuKX12YXIgU3NlPXtmb3JtYXRUaWNrOklSLGZvcm1hdFNob3J0OklSLGZvcm1hdFJlYWRhYmxlOklSLGZvcm1hdExvbmc6SVJ9LEU0PTM2ZTUsVnY9cm8oIi40fiIpO2Z1bmN0aW9uIFBSKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTwxZTM/YCR7VnYoZSl9IG1zYDplPDZlND9gJHtWdihlLzFlMyl9IHNlY2A6ZTxFND9gJHtWdihlLzZlNCl9IG1pbmA6ZTw4NjRlNT9gJHtWdihlL0U0KX0gaHJgOmU8MzE1MzZlNj9gJHtWdihlLzg2NGU1KX0gZGF5YDpgJHtWdihlLzMxNTM2ZTYpfSB5cmAsdH12YXIgdzQsaU09e2Zvcm1hdFRpY2s6UFIsZm9ybWF0U2hvcnQ6UFIsZm9ybWF0UmVhZGFibGU6UFIsZm9ybWF0TG9uZzpQUn0sd1ZlPUxtKCkudGlja0Zvcm1hdCgpLEVzZT17Zm9ybWF0VGljazpuPT53VmUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcodzQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIEFjKG4pe3N3aXRjaChuKXtjYXNlIFNyLkxJTkVBUjpyZXR1cm4gbmV3IHJNO2Nhc2UgU3IuTE9HMTA6cmV0dXJuIG5ldyBJNDtjYXNlIFNyLlRJTUU6cmV0dXJuIG5ldyBvTTtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgck09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1EYygpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIERjKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSTQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbCxkPWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSxkLyh1K051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybSh1LyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1XdygpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sb009Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPUxtKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUVzZX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sUDQ9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57UDQ9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO1A0PUJvb2xlYW4odCl9dmFyIEljX2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxJY19pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiBQNH0sSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtpZighc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIikpcmV0dXJuITE7bGV0IG49bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIpO3JldHVybiBCb29sZWFuKG4pfSxJY19hcmVQb2x5bGluZXNFcXVhbD1mdW5jdGlvbihuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9LEh2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy54U2NhbGU9QWMoU3IuTElORUFSKSx0aGlzLnlTY2FsZT1BYyhTci5MSU5FQVIpLHRoaXMuZG9tQ29udGFpbmVyUmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX19Z2V0VXBkYXRlSWRlbnRpZmllcigpe3JldHVybiB0aGlzLmxhc3RVcGRhdGVkfXVwZGF0ZUlkZW50aWZpZXIoKXt0aGlzLmxhc3RVcGRhdGVkKyt9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITB9c2V0WFNjYWxlKHQpe3RoaXMueFNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0WVNjYWxlKHQpe3RoaXMueVNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9Z2V0Q3VycmVudFZpZXdCb3hSZWN0KCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXdCb3hSZWN0fXNldFZpZXdCb3hSZWN0KHQpe3RoaXMuY3VycmVudFZpZXdCb3hSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXt0aGlzLmRvbUNvbnRhaW5lclJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX10cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsZSl7bGV0IGk9dCxyPUljX2NvbnZlcnRSZWN0VG9FeHRlbnQodGhpcy5jdXJyZW50Vmlld0JveFJlY3QpO3JldHVyblt0aGlzLnhTY2FsZS5mb3J3YXJkKHIueCxbaS54LGkueCtpLndpZHRoXSxlWzBdKSx0aGlzLnlTY2FsZS5mb3J3YXJkKHIueSx0aGlzLmlzWUF4aXNQb2ludGVkRG93bigpP1tpLnkraS5oZWlnaHQsaS55XTpbaS55LGkueStpLmhlaWdodF0sZVsxXSldfX07ZnVuY3Rpb24gUlIobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpvLG9wYWNpdHk6c309aSxhPW47cmV0dXJuIGF8fG8/KGE9YT8/dCgpLGE9ZShhKSxhLnN0eWxlLmRpc3BsYXk9bz8iIjoibm9uZSIsYS5zdHlsZS5zdHJva2U9cixhLnN0eWxlLm9wYWNpdHk9U3RyaW5nKHM/PzEpLGEpOm51bGx9dmFyIFphPTEwMDEsSW89MTAwMyxicz0xMDA2LFNoPTEwMDksd009MTAxMixZbT0xMDE1LHV5PTEwMTYsZHk9MTAyMCx6cz0xMDIzLFFtPTEwMjYsbXk9MTAyNyxheT0yNDAwLGx5PTI0MDEsRGg9M2UzLEZyPTMwMDEsTU09MzUwNDQsZzI9MzUwNDgsSGQ9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PWlbdF0mJihpW3RdPVtdKSwtMT09PWlbdF0uaW5kZXhPZihlKSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1pW3RdJiYtMSE9PWlbdF0uaW5kZXhPZihlKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnNbdF07aWYodm9pZCAwIT09cil7bGV0IG89ci5pbmRleE9mKGUpOy0xIT09byYmci5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKHZvaWQgMCE9PWkpe3QudGFyZ2V0PXRoaXM7bGV0IHI9aS5zbGljZSgwKTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxpcz1bXTtmb3IobGV0IG49MDtuPDI1NjtuKyspaXNbbl09KG48MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KTt2YXIgQjQ9TWF0aC5QSS8xODAsd1U9MTgwL01hdGguUEk7ZnVuY3Rpb24gRmMoKXtsZXQgbj00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCx0PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsaT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oaXNbMjU1Jm5dK2lzW24+PjgmMjU1XStpc1tuPj4xNiYyNTVdK2lzW24+PjI0JjI1NV0rIi0iK2lzWzI1NSZ0XStpc1t0Pj44JjI1NV0rIi0iK2lzW3Q+PjE2JjE1fDY0XStpc1t0Pj4yNCYyNTVdKyItIitpc1s2MyZlfDEyOF0raXNbZT4+OCYyNTVdKyItIitpc1tlPj4xNiYyNTVdK2lzW2U+PjI0JjI1NV0raXNbMjU1JmldK2lzW2k+PjgmMjU1XStpc1tpPj4xNiYyNTVdK2lzW2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gX2Eobix0LGUpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfWZ1bmN0aW9uIFY0KG4sdCxlKXtyZXR1cm4oMS1lKSpuK2UqdH1mdW5jdGlvbiBpYWUobil7cmV0dXJuIDA9PShuJm4tMSkmJjAhPT1ufWZ1bmN0aW9uIEE1ZShuKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4yKSl9dmFyIEplPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPXRoaXMueC10Lngscz10aGlzLnktdC55O3JldHVybiB0aGlzLng9byppLXMqcit0LngsdGhpcy55PW8qcitzKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0plLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIFBvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPW8sdVs1XT1sLHVbNl09aSx1WzddPXMsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxkPWlbN10scD1pWzJdLGg9aVs1XSxmPWlbOF0sbT1yWzBdLEM9clszXSxfPXJbNl0seT1yWzFdLEk9cls0XSxBPXJbN10sTz1yWzJdLGVlPXJbNV0sWD1yWzhdO3JldHVybiBvWzBdPXMqbSthKnkrbCpPLG9bM109cypDK2EqSStsKmVlLG9bNl09cypfK2EqQStsKlgsb1sxXT1jKm0rdSp5K2QqTyxvWzRdPWMqQyt1KkkrZCplZSxvWzddPWMqXyt1KkErZCpYLG9bMl09cCptK2gqeStmKk8sb1s1XT1wKkMraCpJK2YqZWUsb1s4XT1wKl8raCpBK2YqWCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVszXSo9dCxlWzZdKj10LGVbMV0qPXQsZVs0XSo9dCxlWzddKj10LGVbMl0qPXQsZVs1XSo9dCxlWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdO3JldHVybiBlKnMqdS1lKmEqYy1pKm8qdStpKmEqbCtyKm8qYy1yKnMqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGQ9dSpzLWEqYyxwPWEqbC11Km8saD1jKm8tcypsLGY9ZSpkK2kqcCtyKmg7aWYoMD09PWYpcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgbT0xL2Y7cmV0dXJuIHRbMF09ZCptLHRbMV09KHIqYy11KmkpKm0sdFsyXT0oYSppLXIqcykqbSx0WzNdPXAqbSx0WzRdPSh1KmUtcipsKSptLHRbNV09KHIqby1hKmUpKm0sdFs2XT1oKm0sdFs3XT0oaSpsLWMqZSkqbSx0WzhdPShzKmUtaSpvKSptLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQsZT10aGlzLmVsZW1lbnRzO3JldHVybiB0PWVbMV0sZVsxXT1lWzNdLGVbM109dCx0PWVbMl0sZVsyXT1lWzZdLGVbNl09dCx0PWVbNV0sZVs1XT1lWzddLGVbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxyLG8scyxhKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChpKmwsaSpjLC1pKihsKnMrYyphKStzK3QsLXIqYyxyKmwsLXIqKC1jKnMrbCphKSthK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKj10LGlbM10qPXQsaVs2XSo9dCxpWzFdKj1lLGlbNF0qPWUsaVs3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLHI9dGhpcy5lbGVtZW50cyxvPXJbMF0scz1yWzNdLGE9cls2XSxsPXJbMV0sYz1yWzRdLHU9cls3XTtyZXR1cm4gclswXT1lKm8raSpsLHJbM109ZSpzK2kqYyxyWzZdPWUqYStpKnUsclsxXT0taSpvK2UqbCxyWzRdPS1pKnMrZSpjLHJbN109LWkqYStlKnUsdGhpc310cmFuc2xhdGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKz10KmlbMl0saVszXSs9dCppWzVdLGlbNl0rPXQqaVs4XSxpWzFdKz1lKmlbMl0saVs0XSs9ZSppWzVdLGlbN10rPWUqaVs4XSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZnVuY3Rpb24gbWxlKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gU00obil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9UG8ucHJvdG90eXBlLmlzTWF0cml4Mz0hMDt2YXIgcmFlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LFBjPXtoOjAsczowLGw6MH0sT1I9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBINChuLHQsZSl7cmV0dXJuIGU8MCYmKGUrPTEpLGU+MSYmKGUtPTEpLGU8MS82P24rNioodC1uKSplOmU8LjU/dDplPDIvMz9uKzYqKHQtbikqKDIvMy1lKTpufWZ1bmN0aW9uIHB5KG4pe3JldHVybiBuPC4wNDA0NT8uMDc3Mzk5MzgwOCpuOk1hdGgucG93KC45NDc4NjcyOTg2Km4rLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBVNChuKXtyZXR1cm4gbjwuMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sLjQxNjY2KS0uMDU1fXZhciBhbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXtyZXR1cm4gdm9pZCAwPT09aSYmdm9pZCAwPT09cj90aGlzLnNldChlKTp0aGlzLnNldFJHQihlLGkscil9c2V0KGUpe3JldHVybiBlJiZlLmlzQ29sb3I/dGhpcy5jb3B5KGUpOiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnNldEhleChlKToic3RyaW5nIj09dHlwZW9mIGUmJnRoaXMuc2V0U3R5bGUoZSksdGhpc31zZXRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1lLHRoaXMuYj1lLHRoaXN9c2V0SGV4KGUpe3JldHVybiBlPU1hdGguZmxvb3IoZSksdGhpcy5yPShlPj4xNiYyNTUpLzI1NSx0aGlzLmc9KGU+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmZSkvMjU1LHRoaXN9c2V0UkdCKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUsdGhpcy5nPWksdGhpcy5iPXIsdGhpc31zZXRIU0woZSxpLHIpe2lmKGU9ZnVuY3Rpb24obix0KXtyZXR1cm4obiUxKzEpJTF9KGUpLGk9X2EoaSwwLDEpLHI9X2EociwwLDEpLDA9PT1pKXRoaXMucj10aGlzLmc9dGhpcy5iPXI7ZWxzZXtsZXQgbz1yPD0uNT9yKigxK2kpOnIraS1yKmkscz0yKnItbzt0aGlzLnI9SDQocyxvLGUrMS8zKSx0aGlzLmc9SDQocyxvLGUpLHRoaXMuYj1INChzLG8sZS0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKGUpe2Z1bmN0aW9uIGkobyl7dm9pZCAwIT09byYmcGFyc2VGbG9hdChvKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIitlKyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCByO2lmKHI9L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWMoZSkpe2xldCBvLGE9clsyXTtzd2l0Y2goclsxXSl7Y2FzZSJyZ2IiOmNhc2UicmdiYSI6aWYobz0vXlxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChvWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQob1szXSwxMCkpLzI1NSxpKG9bNF0pLHRoaXM7aWYobz0vXlxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bMV0sMTApKS8xMDAsdGhpcy5nPU1hdGgubWluKDEwMCxwYXJzZUludChvWzJdLDEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQob1szXSwxMCkpLzEwMCxpKG9bNF0pLHRoaXM7YnJlYWs7Y2FzZSJoc2wiOmNhc2UiaHNsYSI6aWYobz0vXlxzKihcZCpcLj9cZCspXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSl7bGV0IGw9cGFyc2VGbG9hdChvWzFdKS8zNjAsYz1wYXJzZUludChvWzJdLDEwKS8xMDAsdT1wYXJzZUludChvWzNdLDEwKS8xMDA7cmV0dXJuIGkob1s0XSksdGhpcy5zZXRIU0wobCxjLHUpfX19ZWxzZSBpZihyPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyhlKSl7bGV0IG89clsxXSxzPW8ubGVuZ3RoO2lmKDM9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMSkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoNCkrby5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiBlJiZlLmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKGUpOnRoaXN9c2V0Q29sb3JOYW1lKGUpe2xldCBpPXJhZVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB2b2lkIDAhPT1pP3RoaXMuc2V0SGV4KGkpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIitlKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KGUpe3JldHVybiB0aGlzLnI9ZS5yLHRoaXMuZz1lLmcsdGhpcy5iPWUuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIoZSl7cmV0dXJuIHRoaXMucj1weShlLnIpLHRoaXMuZz1weShlLmcpLHRoaXMuYj1weShlLmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQihlKXtyZXR1cm4gdGhpcy5yPVU0KGUuciksdGhpcy5nPVU0KGUuZyksdGhpcy5iPVU0KGUuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0woZSl7bGV0IGwsYyxpPXRoaXMucixyPXRoaXMuZyxvPXRoaXMuYixzPU1hdGgubWF4KGkscixvKSxhPU1hdGgubWluKGkscixvKSx1PShhK3MpLzI7aWYoYT09PXMpbD0wLGM9MDtlbHNle2xldCBkPXMtYTtzd2l0Y2goYz11PD0uNT9kLyhzK2EpOmQvKDItcy1hKSxzKXtjYXNlIGk6bD0oci1vKS9kKyhyPG8/NjowKTticmVhaztjYXNlIHI6bD0oby1pKS9kKzI7YnJlYWs7Y2FzZSBvOmw9KGktcikvZCs0fWwvPTZ9cmV0dXJuIGUuaD1sLGUucz1jLGUubD11LGV9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9b2Zmc2V0SFNMKGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRIU0woUGMpLFBjLmgrPWUsUGMucys9aSxQYy5sKz1yLHRoaXMuc2V0SFNMKFBjLmgsUGMucyxQYy5sKSx0aGlzfWFkZChlKXtyZXR1cm4gdGhpcy5yKz1lLnIsdGhpcy5nKz1lLmcsdGhpcy5iKz1lLmIsdGhpc31hZGRDb2xvcnMoZSxpKXtyZXR1cm4gdGhpcy5yPWUucitpLnIsdGhpcy5nPWUuZytpLmcsdGhpcy5iPWUuYitpLmIsdGhpc31hZGRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucis9ZSx0aGlzLmcrPWUsdGhpcy5iKz1lLHRoaXN9c3ViKGUpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItZS5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctZS5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItZS5iKSx0aGlzfW11bHRpcGx5KGUpe3JldHVybiB0aGlzLnIqPWUucix0aGlzLmcqPWUuZyx0aGlzLmIqPWUuYix0aGlzfW11bHRpcGx5U2NhbGFyKGUpe3JldHVybiB0aGlzLnIqPWUsdGhpcy5nKj1lLHRoaXMuYio9ZSx0aGlzfWxlcnAoZSxpKXtyZXR1cm4gdGhpcy5yKz0oZS5yLXRoaXMucikqaSx0aGlzLmcrPShlLmctdGhpcy5nKSppLHRoaXMuYis9KGUuYi10aGlzLmIpKmksdGhpc31sZXJwQ29sb3JzKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUucisoaS5yLWUucikqcix0aGlzLmc9ZS5nKyhpLmctZS5nKSpyLHRoaXMuYj1lLmIrKGkuYi1lLmIpKnIsdGhpc31sZXJwSFNMKGUsaSl7dGhpcy5nZXRIU0woUGMpLGUuZ2V0SFNMKE9SKTtsZXQgcj1WNChQYy5oLE9SLmgsaSksbz1WNChQYy5zLE9SLnMsaSkscz1WNChQYy5sLE9SLmwsaSk7cmV0dXJuIHRoaXMuc2V0SFNMKHIsbyxzKSx0aGlzfWVxdWFscyhlKXtyZXR1cm4gZS5yPT09dGhpcy5yJiZlLmc9PT10aGlzLmcmJmUuYj09PXRoaXMuYn1mcm9tQXJyYXkoZSxpPTApe3JldHVybiB0aGlzLnI9ZVtpXSx0aGlzLmc9ZVtpKzFdLHRoaXMuYj1lW2krMl0sdGhpc310b0FycmF5KGU9W10saT0wKXtyZXR1cm4gZVtpXT10aGlzLnIsZVtpKzFdPXRoaXMuZyxlW2krMl09dGhpcy5iLGV9ZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGkpe3JldHVybiB0aGlzLnI9ZS5nZXRYKGkpLHRoaXMuZz1lLmdldFkoaSksdGhpcy5iPWUuZ2V0WihpKSwhMD09PWUubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1yZXR1cm4gbi5OQU1FUz1yYWUsbn0pKCk7YW4ucHJvdG90eXBlLmlzQ29sb3I9ITAsYW4ucHJvdG90eXBlLnI9MSxhbi5wcm90b3R5cGUuZz0xLGFuLnByb3RvdHlwZS5iPTE7dmFyIFV2LFVkPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PiJ1IilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ZvaWQgMD09PVV2JiYoVXY9U00oImNhbnZhcyIpKSxVdi53aWR0aD10LndpZHRoLFV2LmhlaWdodD10LmhlaWdodDtsZXQgaT1Vdi5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9VXZ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1TTSgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCksbz1yLmRhdGE7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspb1tzXT0yNTUqcHkob1tzXS8yNTUpO3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1pZih0LmRhdGEpe2xldCBlPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyllW2ldPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/TWF0aC5mbG9vcigyNTUqcHkoZVtpXS8yNTUpKTpweShlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LEk1ZT0wLGJvPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodD1iby5ERUZBVUxUX0lNQUdFLGU9Ym8uREVGQVVMVF9NQVBQSU5HLGk9WmEscj1aYSxvPWJzLHM9MTAwOCxhPXpzLGw9U2gsYz0xLHU9RGgpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6STVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9ZSx0aGlzLndyYXBTPWksdGhpcy53cmFwVD1yLHRoaXMubWFnRmlsdGVyPW8sdGhpcy5taW5GaWx0ZXI9cyx0aGlzLmFuaXNvdHJvcHk9Yyx0aGlzLmZvcm1hdD1hLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9bCx0aGlzLm9mZnNldD1uZXcgSmUoMCwwKSx0aGlzLnJlcGVhdD1uZXcgSmUoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSmUoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBQbyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMCx0aGlzLnByZW11bHRpcGx5QWxwaGE9ITEsdGhpcy5mbGlwWT0hMCx0aGlzLnVucGFja0FsaWdubWVudD00LHRoaXMuZW5jb2Rpbmc9dSx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMSx0aGlzLm5lZWRzUE1SRU1VcGRhdGU9ITF9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7aWYoIWUmJnZvaWQgMCE9PXQudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih2b2lkIDAhPT10aGlzLmltYWdlKXtsZXQgcj10aGlzLmltYWdlO2lmKHZvaWQgMD09PXIudXVpZCYmKHIudXVpZD1GYygpKSwhZSYmdm9pZCAwPT09dC5pbWFnZXNbci51dWlkXSl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShyKSl7bz1bXTtmb3IobGV0IHM9MCxhPXIubGVuZ3RoO3M8YTtzKyspby5wdXNoKHo0KHJbc10uaXNEYXRhVGV4dHVyZT9yW3NdLmltYWdlOnJbc10pKX1lbHNlIG89ejQocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOm99fWkuaW1hZ2U9ci51dWlkfXJldHVybiJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1pKSxpfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9dHJhbnNmb3JtVXYodCl7aWYoMzAwIT09dGhpcy5tYXBwaW5nKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgMWUzOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgWmE6dC54PXQueDwwPzA6MTticmVhaztjYXNlIDEwMDI6dC54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik/TWF0aC5jZWlsKHQueCktdC54OnQueC1NYXRoLmZsb29yKHQueCl9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIDFlMzp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFphOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAxMDAyOnQueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpP01hdGguY2VpbCh0LnkpLXQueTp0LnktTWF0aC5mbG9vcih0LnkpfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07ZnVuY3Rpb24gejQobil7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmbiBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmbiBpbnN0YW5jZW9mIEltYWdlQml0bWFwP1VkLmdldERhdGFVUkwobik6bi5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4uZGF0YSksd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsdHlwZTpuLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX1iby5ERUZBVUxUX0lNQUdFPXZvaWQgMCxiby5ERUZBVUxUX01BUFBJTkc9MzAwLGJvLnByb3RvdHlwZS5pc1RleHR1cmU9ITA7dmFyIHRyPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9MSl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpcy53PXJ9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dm9pZCAwIT09dC53P3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXRoaXMudyxzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1s0XSppK3NbOF0qcitzWzEyXSpvLHRoaXMueT1zWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSpvLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIrc1sxNF0qbyx0aGlzLnc9c1szXSplK3NbN10qaStzWzExXSpyK3NbMTVdKm8sdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgZT1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gZTwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10LngvZSx0aGlzLnk9dC55L2UsdGhpcy56PXQuei9lKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZSxpLHIsbyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxkPWxbOF0scD1sWzFdLGg9bFs1XSxmPWxbOV0sbT1sWzJdLEM9bFs2XSxfPWxbMTBdO2lmKE1hdGguYWJzKHUtcCk8LjAxJiZNYXRoLmFicyhkLW0pPC4wMSYmTWF0aC5hYnMoZi1DKTwuMDEpe2lmKE1hdGguYWJzKHUrcCk8LjEmJk1hdGguYWJzKGQrbSk8LjEmJk1hdGguYWJzKGYrQyk8LjEmJk1hdGguYWJzKGMraCtfLTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtsZXQgST0oYysxKS8yLEE9KGgrMSkvMixPPShfKzEpLzIsZWU9KHUrcCkvNCxYPShkK20pLzQseGU9KGYrQykvNDtyZXR1cm4gST5BJiZJPk8/STwuMDE/KGk9MCxyPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoSSkscj1lZS9pLG89WC9pKTpBPk8/QTwuMDE/KGk9LjcwNzEwNjc4MSxyPTAsbz0uNzA3MTA2NzgxKToocj1NYXRoLnNxcnQoQSksaT1lZS9yLG89eGUvcik6TzwuMDE/KGk9LjcwNzEwNjc4MSxyPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoTyksaT1YL28scj14ZS9vKSx0aGlzLnNldChpLHIsbyxlKSx0aGlzfWxldCB5PU1hdGguc3FydCgoQy1mKSooQy1mKSsoZC1tKSooZC1tKSsocC11KSoocC11KSk7cmV0dXJuIE1hdGguYWJzKHkpPC4wMDEmJih5PTEpLHRoaXMueD0oQy1mKS95LHRoaXMueT0oZC1tKS95LHRoaXMuej0ocC11KS95LHRoaXMudz1NYXRoLmFjb3MoKGMraCtfLTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oZS53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzLnc9dC53KyhlLnctdC53KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O3RyLnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIHZhPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgdHIoMCwwLHQsZSksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyB0cigwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IGJvKHZvaWQgMCxpLm1hcHBpbmcsaS53cmFwUyxpLndyYXBULGkubWFnRmlsdGVyLGkubWluRmlsdGVyLGkuZm9ybWF0LGkudHlwZSxpLmFuaXNvdHJvcHksaS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1pLmdlbmVyYXRlTWlwbWFwcyYmaS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PXZvaWQgMCE9PWkuaW50ZXJuYWxGb3JtYXQ/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09aS5taW5GaWx0ZXI/aS5taW5GaWx0ZXI6YnMsdGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDA9PT1pLmRlcHRoQnVmZmVyfHxpLmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj12b2lkIDAhPT1pLnN0ZW5jaWxCdWZmZXImJmkuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT12b2lkIDAhPT1pLmRlcHRoVGV4dHVyZT9pLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LGUsaT0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9aSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt2YS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMCxjbGFzcyBleHRlbmRzIHZhe2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBvPTA7bzxpO28rKyl0aGlzLnRleHR1cmVbb109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxvPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxvO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgRU09Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9dm9pZCAwPT09aS5pZ25vcmVEZXB0aHx8aS5pZ25vcmVEZXB0aCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT12b2lkIDAhPT1pLnVzZVJlbmRlclRvVGV4dHVyZSYmaS51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9ITE9PT10aGlzLnVzZVJlbmRlclRvVGV4dHVyZX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtFTS5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciBDcz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cn1zdGF0aWMgc2xlcnAodCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLGkuc2xlcnBRdWF0ZXJuaW9ucyh0LGUscil9c3RhdGljIHNsZXJwRmxhdCh0LGUsaSxyLG8scyxhKXtsZXQgbD1pW3IrMF0sYz1pW3IrMV0sdT1pW3IrMl0sZD1pW3IrM10scD1vW3MrMF0saD1vW3MrMV0sZj1vW3MrMl0sbT1vW3MrM107aWYoMD09PWEpcmV0dXJuIHRbZSswXT1sLHRbZSsxXT1jLHRbZSsyXT11LHZvaWQodFtlKzNdPWQpO2lmKDE9PT1hKXJldHVybiB0W2UrMF09cCx0W2UrMV09aCx0W2UrMl09Zix2b2lkKHRbZSszXT1tKTtpZihkIT09bXx8bCE9PXB8fGMhPT1ofHx1IT09Zil7bGV0IEM9MS1hLF89bCpwK2MqaCt1KmYrZCptLHk9Xz49MD8xOi0xLEk9MS1fKl87aWYoST5OdW1iZXIuRVBTSUxPTil7bGV0IE89TWF0aC5zcXJ0KEkpLGVlPU1hdGguYXRhbjIoTyxfKnkpO0M9TWF0aC5zaW4oQyplZSkvTyxhPU1hdGguc2luKGEqZWUpL099bGV0IEE9YSp5O2lmKGw9bCpDK3AqQSxjPWMqQytoKkEsdT11KkMrZipBLGQ9ZCpDK20qQSxDPT09MS1hKXtsZXQgTz0xL01hdGguc3FydChsKmwrYypjK3UqdStkKmQpO2wqPU8sYyo9Tyx1Kj1PLGQqPU99fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109ZH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixvLHMpe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10sZD1vW3NdLHA9b1tzKzFdLGg9b1tzKzJdLGY9b1tzKzNdO3JldHVybiB0W2VdPWEqZit1KmQrbCpoLWMqcCx0W2UrMV09bCpmK3UqcCtjKmQtYSpoLHRbZSsyXT1jKmYrdSpoK2EqcC1sKmQsdFtlKzNdPXUqZi1hKmQtbCpwLWMqaCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighdHx8IXQuaXNFdWxlcil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX29yZGVyLGE9TWF0aC5jb3MsbD1NYXRoLnNpbixjPWEoaS8yKSx1PWEoci8yKSxkPWEoby8yKSxwPWwoaS8yKSxoPWwoci8yKSxmPWwoby8yKTtzd2l0Y2gocyl7Y2FzZSJYWVoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK3MpfXJldHVybiExIT09ZSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LGUpe2xldCBpPWUvMixyPU1hdGguc2luKGkpO3JldHVybiB0aGlzLl94PXQueCpyLHRoaXMuX3k9dC55KnIsdGhpcy5fej10Lnoqcix0aGlzLl93PU1hdGguY29zKGkpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZT10LmVsZW1lbnRzLGk9ZVswXSxyPWVbNF0sbz1lWzhdLHM9ZVsxXSxhPWVbNV0sbD1lWzldLGM9ZVsyXSx1PWVbNl0sZD1lWzEwXSxwPWkrYStkO2lmKHA+MCl7bGV0IGg9LjUvTWF0aC5zcXJ0KHArMSk7dGhpcy5fdz0uMjUvaCx0aGlzLl94PSh1LWwpKmgsdGhpcy5feT0oby1jKSpoLHRoaXMuX3o9KHMtcikqaH1lbHNlIGlmKGk+YSYmaT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2ktYS1kKTt0aGlzLl93PSh1LWwpL2gsdGhpcy5feD0uMjUqaCx0aGlzLl95PShyK3MpL2gsdGhpcy5fej0obytjKS9ofWVsc2UgaWYoYT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2EtaS1kKTt0aGlzLl93PShvLWMpL2gsdGhpcy5feD0ocitzKS9oLHRoaXMuX3k9LjI1KmgsdGhpcy5fej0obCt1KS9ofWVsc2V7bGV0IGg9MipNYXRoLnNxcnQoMStkLWktYSk7dGhpcy5fdz0ocy1yKS9oLHRoaXMuX3g9KG8rYykvaCx0aGlzLl95PShsK3UpL2gsdGhpcy5fej0uMjUqaH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQsZSl7bGV0IGk9dC5kb3QoZSkrMTtyZXR1cm4gaTxOdW1iZXIuRVBTSUxPTj8oaT0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PWkpOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9aSkpOih0aGlzLl94PXQueSplLnotdC56KmUueSx0aGlzLl95PXQueiplLngtdC54KmUueix0aGlzLl96PXQueCplLnktdC55KmUueCx0aGlzLl93PWkpLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoX2EodGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQsZSl7bGV0IGk9dGhpcy5hbmdsZVRvKHQpO2lmKDA9PT1pKXJldHVybiB0aGlzO2xldCByPU1hdGgubWluKDEsZS9pKTtyZXR1cm4gdGhpcy5zbGVycCh0LHIpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gMD09PXQ/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpe2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX3csYT1lLl94LGw9ZS5feSxjPWUuX3osdT1lLl93O3JldHVybiB0aGlzLl94PWkqdStzKmErcipjLW8qbCx0aGlzLl95PXIqdStzKmwrbyphLWkqYyx0aGlzLl96PW8qdStzKmMraSpsLXIqYSx0aGlzLl93PXMqdS1pKmEtcipsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IGk9dGhpcy5feCxyPXRoaXMuX3ksbz10aGlzLl96LHM9dGhpcy5fdyxhPXMqdC5fdytpKnQuX3grcip0Ll95K28qdC5fejtpZihhPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3osYT0tYSk6dGhpcy5jb3B5KHQpLGE+PTEpcmV0dXJuIHRoaXMuX3c9cyx0aGlzLl94PWksdGhpcy5feT1yLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtYSphO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgaD0xLWU7cmV0dXJuIHRoaXMuX3c9aCpzK2UqdGhpcy5fdyx0aGlzLl94PWgqaStlKnRoaXMuX3gsdGhpcy5feT1oKnIrZSp0aGlzLl95LHRoaXMuX3o9aCpvK2UqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxhKSxkPU1hdGguc2luKCgxLWUpKnUpL2MscD1NYXRoLnNpbihlKnUpL2M7cmV0dXJuIHRoaXMuX3c9cypkK3RoaXMuX3cqcCx0aGlzLl94PWkqZCt0aGlzLl94KnAsdGhpcy5feT1yKmQrdGhpcy5feSpwLHRoaXMuX3o9bypkK3RoaXMuX3oqcCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQsZSxpKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKGUsaSl9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxlPU1hdGguc3FydCgxLXQpLGk9TWF0aC5zcXJ0KHQpLHI9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQoZSpNYXRoLmNvcyhyKSxpKk1hdGguc2luKG8pLGkqTWF0aC5jb3MobyksZSpNYXRoLnNpbihyKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLl94PXRbZV0sdGhpcy5feT10W2UrMV0sdGhpcy5fej10W2UrMl0sdGhpcy5fdz10W2UrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5feD10LmdldFgoZSksdGhpcy5feT10LmdldFkoZSksdGhpcy5fej10LmdldFooZSksdGhpcy5fdz10LmdldFcoZSksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07Q3MucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgJD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWl9c2V0KHQsZSxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxlKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54KmUueCx0aGlzLnk9dC55KmUueSx0aGlzLno9dC56KmUueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bM10qaStvWzZdKnIsdGhpcy55PW9bMV0qZStvWzRdKmkrb1s3XSpyLHRoaXMuej1vWzJdKmUrb1s1XSppK29bOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dC5lbGVtZW50cyxzPTEvKG9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0pKnMsdGhpcy55PShvWzFdKmUrb1s1XSppK29bOV0qcitvWzEzXSkqcyx0aGlzLno9KG9bMl0qZStvWzZdKmkrb1sxMF0qcitvWzE0XSkqcyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10Lngscz10LnksYT10LnosbD10LncsYz1sKmUrcypyLWEqaSx1PWwqaSthKmUtbypyLGQ9bCpyK28qaS1zKmUscD0tbyplLXMqaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrcCotbyt1Ki1hLWQqLXMsdGhpcy55PXUqbCtwKi1zK2QqLW8tYyotYSx0aGlzLno9ZCpsK3AqLWErYyotcy11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIsdGhpcy55PW9bMV0qZStvWzVdKmkrb1s5XSpyLHRoaXMuej1vWzJdKmUrb1s2XSppK29bMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1vKmEsdGhpcy55PW8qcy1pKmwsdGhpcy56PWkqYS1yKnMsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKDA9PT1lKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqNC5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihqNCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoajQuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoMD09PWUpcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoX2EoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyw0KmUpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsMyplKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiB2b2lkIDAhPT1pJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PTIqKE1hdGgucmFuZG9tKCktLjUpLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS10KioyKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19OyQucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgajQ9bmV3ICQsb2FlPW5ldyBDcyxKYT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkKDEvMCwxLzAsMS8wKSxlPW5ldyAkKC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5sZW5ndGg7bDxjO2wrPTMpe2xldCB1PXRbbF0sZD10W2wrMV0scD10W2wrMl07dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5jb3VudDtsPGM7bCsrKXtsZXQgdT10LmdldFgobCksZD10LmdldFkobCkscD10LmdldFoobCk7dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9am0uY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9c2V0RnJvbU9iamVjdCh0LGU9ITEpe3JldHVybiB0aGlzLm1ha2VFbXB0eSgpLHRoaXMuZXhwYW5kQnlPYmplY3QodCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYodm9pZCAwIT09aSlpZihlJiZudWxsIT1pLmF0dHJpYnV0ZXMmJnZvaWQgMCE9PWkuYXR0cmlidXRlcy5wb3NpdGlvbil7bGV0IG89aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGE9by5jb3VudDtzPGE7cysrKWptLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KGptKX1lbHNlIG51bGw9PT1pLmJvdW5kaW5nQm94JiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLEc0LmNvcHkoaS5ib3VuZGluZ0JveCksRzQuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oRzQpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltvXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLGptKSxqbS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoYU0pLGtSLnN1YlZlY3RvcnModGhpcy5tYXgsYU0pLHp2LnN1YlZlY3RvcnModC5hLGFNKSxqdi5zdWJWZWN0b3JzKHQuYixhTSksR3Yuc3ViVmVjdG9ycyh0LmMsYU0pLG1oLnN1YlZlY3RvcnMoanYsenYpLGdoLnN1YlZlY3RvcnMoR3YsanYpLEdtLnN1YlZlY3RvcnMoenYsR3YpO2xldCBlPVswLC1taC56LG1oLnksMCwtZ2gueixnaC55LDAsLUdtLnosR20ueSxtaC56LDAsLW1oLngsZ2gueiwwLC1naC54LEdtLnosMCwtR20ueCwtbWgueSxtaC54LDAsLWdoLnksZ2gueCwwLC1HbS55LEdtLngsMF07cmV0dXJuISghVzQoZSx6dixqdixHdixrUil8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIVc0KGUsenYsanYsR3Ysa1IpKSkmJihGUi5jcm9zc1ZlY3RvcnMobWgsZ2gpLGU9W0ZSLngsRlIueSxGUi56XSxXNChlLHp2LGp2LEd2LGtSKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gam0uY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGptKS5sZW5ndGgoKSx0fWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCl8fChrZFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoa2QpKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0phLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIGtkPVtuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJF0sam09bmV3ICQsRzQ9bmV3IEphLHp2PW5ldyAkLGp2PW5ldyAkLEd2PW5ldyAkLG1oPW5ldyAkLGdoPW5ldyAkLEdtPW5ldyAkLGFNPW5ldyAkLGtSPW5ldyAkLEZSPW5ldyAkLFdtPW5ldyAkO2Z1bmN0aW9uIFc0KG4sdCxlLGkscil7Zm9yKGxldCBvPTAscz1uLmxlbmd0aC0zO288PXM7bys9Myl7V20uZnJvbUFycmF5KG4sbyk7bGV0IGE9ci54Kk1hdGguYWJzKFdtLngpK3IueSpNYXRoLmFicyhXbS55KStyLnoqTWF0aC5hYnMoV20ueiksbD10LmRvdChXbSksYz1lLmRvdChXbSksdT1pLmRvdChXbSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIFA1ZT1uZXcgSmEsc2FlPW5ldyAkLE5SPW5ldyAkLHE0PW5ldyAkLEFoPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7dm9pZCAwIT09ZT9pLmNvcHkoZSk6UDVlLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10Lmxlbmd0aDtvPHM7bysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7cTQuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1xNC5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPS41KihpLXRoaXMucmFkaXVzKTt0aGlzLmNlbnRlci5hZGQocTQubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuITA9PT10aGlzLmNlbnRlci5lcXVhbHModC5jZW50ZXIpP05SLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOk5SLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoc2FlLmNvcHkodC5jZW50ZXIpLmFkZChOUikpLHRoaXMuZXhwYW5kQnlQb2ludChzYWUuY29weSh0LmNlbnRlcikuc3ViKE5SKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSxGZD1uZXcgJCxZND1uZXcgJCxMUj1uZXcgJCxfaD1uZXcgJCxYND1uZXcgJCxCUj1uZXcgJCxRND1uZXcgJCxJaD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsRmQpKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9RmQuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KEZkLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksRmQuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7WTQuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLExSLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLF9oLmNvcHkodGhpcy5vcmlnaW4pLnN1YihZNCk7bGV0IGQscCxoLGYsbz0uNSp0LmRpc3RhbmNlVG8oZSkscz0tdGhpcy5kaXJlY3Rpb24uZG90KExSKSxhPV9oLmRvdCh0aGlzLmRpcmVjdGlvbiksbD0tX2guZG90KExSKSxjPV9oLmxlbmd0aFNxKCksdT1NYXRoLmFicygxLXMqcyk7aWYodT4wKWlmKGQ9cypsLWEscD1zKmEtbCxmPW8qdSxkPj0wKWlmKHA+PS1mKWlmKHA8PWYpe2xldCBtPTEvdTtkKj1tLHAqPW0saD1kKihkK3MqcCsyKmEpK3AqKHMqZCtwKzIqbCkrY31lbHNlIHA9byxkPU1hdGgubWF4KDAsLShzKnArYSkpLGg9LWQqZCtwKihwKzIqbCkrYztlbHNlIHA9LW8sZD1NYXRoLm1heCgwLC0ocypwK2EpKSxoPS1kKmQrcCoocCsyKmwpK2M7ZWxzZSBwPD0tZj8oZD1NYXRoLm1heCgwLC0oLXMqbythKSkscD1kPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk6cDw9Zj8oZD0wLHA9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9cCoocCsyKmwpK2MpOihkPU1hdGgubWF4KDAsLShzKm8rYSkpLHA9ZD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk7ZWxzZSBwPXM+MD8tbzpvLGQ9TWF0aC5tYXgoMCwtKHMqcCthKSksaD0tZCpkK3AqKHArMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KExSKS5tdWx0aXBseVNjYWxhcihwKS5hZGQoWTQpLGh9aW50ZXJzZWN0U3BoZXJlKHQsZSl7RmQuc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9RmQuZG90KHRoaXMuZGlyZWN0aW9uKSxyPUZkLmRvdChGZCktaSppLG89dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5vKXJldHVybiBudWxsO2xldCBzPU1hdGguc3FydChvLXIpLGE9aS1zLGw9aStzO3JldHVybiBhPDAmJmw8MD9udWxsOnRoaXMuYXQoYTwwP2w6YSxlKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCBlPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWUpcmV0dXJuIDA9PT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2xldCBpPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9lO3JldHVybiBpPj0wP2k6bnVsbH1pbnRlcnNlY3RQbGFuZSh0LGUpe2xldCBpPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBudWxsPT09aT9udWxsOnRoaXMuYXQoaSxlKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGU9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiAwPT09ZXx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSplPDB9aW50ZXJzZWN0Qm94KHQsZSl7bGV0IGkscixvLHMsYSxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGQ9MS90aGlzLmRpcmVjdGlvbi56LHA9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KGk9KHQubWluLngtcC54KSpjLHI9KHQubWF4LngtcC54KSpjKTooaT0odC5tYXgueC1wLngpKmMscj0odC5taW4ueC1wLngpKmMpLHU+PTA/KG89KHQubWluLnktcC55KSp1LHM9KHQubWF4LnktcC55KSp1KToobz0odC5tYXgueS1wLnkpKnUscz0odC5taW4ueS1wLnkpKnUpLGk+c3x8bz5yfHwoKG8+aXx8aSE9aSkmJihpPW8pLChzPHJ8fHIhPXIpJiYocj1zKSxkPj0wPyhhPSh0Lm1pbi56LXAueikqZCxsPSh0Lm1heC56LXAueikqZCk6KGE9KHQubWF4LnotcC56KSpkLGw9KHQubWluLnotcC56KSpkKSxpPmx8fGE+cil8fCgoYT5pfHxpIT1pKSYmKGk9YSksKGw8cnx8ciE9cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveCh0LEZkKX1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLG8pe1g0LnN1YlZlY3RvcnMoZSx0KSxCUi5zdWJWZWN0b3JzKGksdCksUTQuY3Jvc3NWZWN0b3JzKFg0LEJSKTtsZXQgYSxzPXRoaXMuZGlyZWN0aW9uLmRvdChRNCk7aWYocz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNle2lmKCEoczwwKSlyZXR1cm4gbnVsbDthPS0xLHM9LXN9X2guc3ViVmVjdG9ycyh0aGlzLm9yaWdpbix0KTtsZXQgbD1hKnRoaXMuZGlyZWN0aW9uLmRvdChCUi5jcm9zc1ZlY3RvcnMoX2gsQlIpKTtpZihsPDApcmV0dXJuIG51bGw7bGV0IGM9YSp0aGlzLmRpcmVjdGlvbi5kb3QoWDQuY3Jvc3MoX2gpKTtpZihjPDB8fGwrYz5zKXJldHVybiBudWxsO2xldCB1PS1hKl9oLmRvdChRNCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9zLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19LE1uPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtsZXQgXz10aGlzLmVsZW1lbnRzO3JldHVybiBfWzBdPXQsX1s0XT1lLF9bOF09aSxfWzEyXT1yLF9bMV09byxfWzVdPXMsX1s5XT1hLF9bMTNdPWwsX1syXT1jLF9bNl09dSxfWzEwXT1kLF9bMTRdPXAsX1szXT1oLF9bN109ZixfWzExXT1tLF9bMTVdPUMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyBNbikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLGVbOV09aVs5XSxlWzEwXT1pWzEwXSxlWzExXT1pWzExXSxlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSxlWzE1XT1pWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxpLngsMCx0LnksZS55LGkueSwwLHQueixlLnosaS56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHMscj0xL1d2LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxvPTEvV3Yuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHM9MS9Xdi5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIGVbMF09aVswXSpyLGVbMV09aVsxXSpyLGVbMl09aVsyXSpyLGVbM109MCxlWzRdPWlbNF0qbyxlWzVdPWlbNV0qbyxlWzZdPWlbNl0qbyxlWzddPTAsZVs4XT1pWzhdKnMsZVs5XT1pWzldKnMsZVsxMF09aVsxMF0qcyxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lnoscz1NYXRoLmNvcyhpKSxhPU1hdGguc2luKGkpLGw9TWF0aC5jb3MociksYz1NYXRoLnNpbihyKSx1PU1hdGguY29zKG8pLGQ9TWF0aC5zaW4obyk7aWYoIlhZWiI9PT10Lm9yZGVyKXtsZXQgcD1zKnUsaD1zKmQsZj1hKnUsbT1hKmQ7ZVswXT1sKnUsZVs0XT0tbCpkLGVbOF09YyxlWzFdPWgrZipjLGVbNV09cC1tKmMsZVs5XT0tYSpsLGVbMl09bS1wKmMsZVs2XT1mK2gqYyxlWzEwXT1zKmx9ZWxzZSBpZigiWVhaIj09PXQub3JkZXIpe2xldCBwPWwqdSxoPWwqZCxmPWMqdSxtPWMqZDtlWzBdPXArbSphLGVbNF09ZiphLWgsZVs4XT1zKmMsZVsxXT1zKmQsZVs1XT1zKnUsZVs5XT0tYSxlWzJdPWgqYS1mLGVbNl09bStwKmEsZVsxMF09cypsfWVsc2UgaWYoIlpYWSI9PT10Lm9yZGVyKXtsZXQgcD1sKnUsaD1sKmQsZj1jKnUsbT1jKmQ7ZVswXT1wLW0qYSxlWzRdPS1zKmQsZVs4XT1mK2gqYSxlWzFdPWgrZiphLGVbNV09cyp1LGVbOV09bS1wKmEsZVsyXT0tcypjLGVbNl09YSxlWzEwXT1zKmx9ZWxzZSBpZigiWllYIj09PXQub3JkZXIpe2xldCBwPXMqdSxoPXMqZCxmPWEqdSxtPWEqZDtlWzBdPWwqdSxlWzRdPWYqYy1oLGVbOF09cCpjK20sZVsxXT1sKmQsZVs1XT1tKmMrcCxlWzldPWgqYy1mLGVbMl09LWMsZVs2XT1hKmwsZVsxMF09cypsfWVsc2UgaWYoIllaWCI9PT10Lm9yZGVyKXtsZXQgcD1zKmwsaD1zKmMsZj1hKmwsbT1hKmM7ZVswXT1sKnUsZVs0XT1tLXAqZCxlWzhdPWYqZCtoLGVbMV09ZCxlWzVdPXMqdSxlWzldPS1hKnUsZVsyXT0tYyp1LGVbNl09aCpkK2YsZVsxMF09cC1tKmR9ZWxzZSBpZigiWFpZIj09PXQub3JkZXIpe2xldCBwPXMqbCxoPXMqYyxmPWEqbCxtPWEqYztlWzBdPWwqdSxlWzRdPS1kLGVbOF09Yyp1LGVbMV09cCpkK20sZVs1XT1zKnUsZVs5XT1oKmQtZixlWzJdPWYqZC1oLGVbNl09YSp1LGVbMTBdPW0qZCtwfXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UoUjVlLHQsTzVlKX1sb29rQXQodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIFFhLnN1YlZlY3RvcnModCxlKSwwPT09UWEubGVuZ3RoU3EoKSYmKFFhLno9MSksUWEubm9ybWFsaXplKCksdmguY3Jvc3NWZWN0b3JzKGksUWEpLDA9PT12aC5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKGkueik/UWEueCs9MWUtNDpRYS56Kz0xZS00LFFhLm5vcm1hbGl6ZSgpLHZoLmNyb3NzVmVjdG9ycyhpLFFhKSksdmgubm9ybWFsaXplKCksVlIuY3Jvc3NWZWN0b3JzKFFhLHZoKSxyWzBdPXZoLngscls0XT1WUi54LHJbOF09UWEueCxyWzFdPXZoLnkscls1XT1WUi55LHJbOV09UWEueSxyWzJdPXZoLnoscls2XT1WUi56LHJbMTBdPVFhLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LGUpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxzPWlbMF0sYT1pWzRdLGw9aVs4XSxjPWlbMTJdLHU9aVsxXSxkPWlbNV0scD1pWzldLGg9aVsxM10sZj1pWzJdLG09aVs2XSxDPWlbMTBdLF89aVsxNF0seT1pWzNdLEk9aVs3XSxBPWlbMTFdLE89aVsxNV0sZWU9clswXSxYPXJbNF0seGU9cls4XSxmZT1yWzEyXSx2ZT1yWzFdLFQ9cls1XSxuZT1yWzldLGxlPXJbMTNdLGhlPXJbMl0seWU9cls2XSxKPXJbMTBdLGFlPXJbMTRdLG1lPXJbM10samU9cls3XSxNZT1yWzExXSxGZT1yWzE1XTtyZXR1cm4gb1swXT1zKmVlK2EqdmUrbCpoZStjKm1lLG9bNF09cypYK2EqVCtsKnllK2MqamUsb1s4XT1zKnhlK2EqbmUrbCpKK2MqTWUsb1sxMl09cypmZSthKmxlK2wqYWUrYypGZSxvWzFdPXUqZWUrZCp2ZStwKmhlK2gqbWUsb1s1XT11KlgrZCpUK3AqeWUraCpqZSxvWzldPXUqeGUrZCpuZStwKkoraCpNZSxvWzEzXT11KmZlK2QqbGUrcCphZStoKkZlLG9bMl09ZiplZSttKnZlK0MqaGUrXyptZSxvWzZdPWYqWCttKlQrQyp5ZStfKmplLG9bMTBdPWYqeGUrbSpuZStDKkorXypNZSxvWzE0XT1mKmZlK20qbGUrQyphZStfKkZlLG9bM109eSplZStJKnZlK0EqaGUrTyptZSxvWzddPXkqWCtJKlQrQSp5ZStPKmplLG9bMTFdPXkqeGUrSSpuZStBKkorTypNZSxvWzE1XT15KmZlK0kqbGUrQSphZStPKkZlLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGQ9dFs2XSxwPXRbMTBdLGg9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqZC1yKmMqZC1vKmEqcCtpKmMqcCtyKmEqaC1pKmwqaCkrdFs3XSooK2UqbCpoLWUqYypwK28qcypwLXIqcypoK3IqYyp1LW8qbCp1KSt0WzExXSooK2UqYypkLWUqYSpoLW8qcypkK2kqcypoK28qYSp1LWkqYyp1KSt0WzE1XSooLXIqYSp1LWUqbCpkK2UqYSpwK3IqcypkLWkqcypwK2kqbCp1KX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGY9dFsxMl0sbT10WzEzXSxDPXRbMTRdLF89dFsxNV0seT1kKkMqYy1tKnAqYyttKmwqaC1hKkMqaC1kKmwqXythKnAqXyxJPWYqcCpjLXUqQypjLWYqbCpoK3MqQypoK3UqbCpfLXMqcCpfLEE9dSptKmMtZipkKmMrZiphKmgtcyptKmgtdSphKl8rcypkKl8sTz1mKmQqbC11Km0qbC1mKmEqcCtzKm0qcCt1KmEqQy1zKmQqQyxlZT1lKnkraSpJK3IqQStvKk87aWYoMD09PWVlKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgWD0xL2VlO3JldHVybiB0WzBdPXkqWCx0WzFdPShtKnAqby1kKkMqby1tKnIqaCtpKkMqaCtkKnIqXy1pKnAqXykqWCx0WzJdPShhKkMqby1tKmwqbyttKnIqYy1pKkMqYy1hKnIqXytpKmwqXykqWCx0WzNdPShkKmwqby1hKnAqby1kKnIqYytpKnAqYythKnIqaC1pKmwqaCkqWCx0WzRdPUkqWCx0WzVdPSh1KkMqby1mKnAqbytmKnIqaC1lKkMqaC11KnIqXytlKnAqXykqWCx0WzZdPShmKmwqby1zKkMqby1mKnIqYytlKkMqYytzKnIqXy1lKmwqXykqWCx0WzddPShzKnAqby11Kmwqbyt1KnIqYy1lKnAqYy1zKnIqaCtlKmwqaCkqWCx0WzhdPUEqWCx0WzldPShmKmQqby11Km0qby1mKmkqaCtlKm0qaCt1KmkqXy1lKmQqXykqWCx0WzEwXT0ocyptKm8tZiphKm8rZippKmMtZSptKmMtcyppKl8rZSphKl8pKlgsdFsxMV09KHUqYSpvLXMqZCpvLXUqaSpjK2UqZCpjK3MqaSpoLWUqYSpoKSpYLHRbMTJdPU8qWCx0WzEzXT0odSptKnItZipkKnIrZippKnAtZSptKnAtdSppKkMrZSpkKkMpKlgsdFsxNF09KGYqYSpyLXMqbSpyLWYqaSpsK2UqbSpsK3MqaSpDLWUqYSpDKSpYLHRbMTVdPShzKmQqci11KmEqcit1KmkqbC1lKmQqbC1zKmkqcCtlKmEqcCkqWCx0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyx1PW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCx1KmEraSx1KmwtcipzLDAsYypsLXIqYSx1KmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyx1PXMrcyxkPWErYSxwPW8qYyxoPW8qdSxmPW8qZCxtPXMqdSxDPXMqZCxfPWEqZCx5PWwqYyxJPWwqdSxBPWwqZCxPPWkueCxlZT1pLnksWD1pLno7cmV0dXJuIHJbMF09KDEtKG0rXykpKk8sclsxXT0oaCtBKSpPLHJbMl09KGYtSSkqTyxyWzNdPTAscls0XT0oaC1BKSplZSxyWzVdPSgxLShwK18pKSplZSxyWzZdPShDK3kpKmVlLHJbN109MCxyWzhdPShmK0kpKlgscls5XT0oQy15KSpYLHJbMTBdPSgxLShwK20pKSpYLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPVd2LnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCkscz1Xdi5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9V3Yuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxSYy5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvcyxkPTEvYTtyZXR1cm4gUmMuZWxlbWVudHNbMF0qPWMsUmMuZWxlbWVudHNbMV0qPWMsUmMuZWxlbWVudHNbMl0qPWMsUmMuZWxlbWVudHNbNF0qPXUsUmMuZWxlbWVudHNbNV0qPXUsUmMuZWxlbWVudHNbNl0qPXUsUmMuZWxlbWVudHNbOF0qPWQsUmMuZWxlbWVudHNbOV0qPWQsUmMuZWxlbWVudHNbMTBdKj1kLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJjKSxpLng9byxpLnk9cyxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLG8scyl7dm9pZCAwPT09cyYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxjPTIqby8oaS1yKSx1PShlK3QpLyhlLXQpLGQ9KGkrcikvKGktcikscD0tKHMrbykvKHMtbyksaD0tMipzKm8vKHMtbyk7cmV0dXJuIGFbMF09MipvLyhlLXQpLGFbNF09MCxhWzhdPXUsYVsxMl09MCxhWzFdPTAsYVs1XT1jLGFbOV09ZCxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09cCxhWzE0XT1oLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLGkscixvLHMpe2xldCBhPXRoaXMuZWxlbWVudHMsbD0xLyhlLXQpLGM9MS8oaS1yKSx1PTEvKHMtbyksZD0oZSt0KSpsLHA9KGkrcikqYyxoPShzK28pKnU7cmV0dXJuIGFbMF09MipsLGFbNF09MCxhWzhdPTAsYVsxMl09LWQsYVsxXT0wLGFbNV09MipjLGFbOV09MCxhWzEzXT0tcCxhWzJdPTAsYVs2XT0wLGFbMTBdPS0yKnUsYVsxNF09LWgsYVszXT0wLGFbN109MCxhWzExXT0wLGFbMTVdPTEsdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjwxNjtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDE2O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdFtlKzldPWlbOV0sdFtlKzEwXT1pWzEwXSx0W2UrMTFdPWlbMTFdLHRbZSsxMl09aVsxMl0sdFtlKzEzXT1pWzEzXSx0W2UrMTRdPWlbMTRdLHRbZSsxNV09aVsxNV0sdH19O01uLnByb3RvdHlwZS5pc01hdHJpeDQ9ITA7dmFyIFd2PW5ldyAkLFJjPW5ldyBNbixSNWU9bmV3ICQoMCwwLDApLE81ZT1uZXcgJCgxLDEsMSksdmg9bmV3ICQsVlI9bmV3ICQsUWE9bmV3ICQsYWFlPW5ldyBNbixsYWU9bmV3IENzLFBoPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9UGguRGVmYXVsdE9yZGVyKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX29yZGVyKX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQuX3gsdGhpcy5feT10Ll95LHRoaXMuX3o9dC5feix0aGlzLl9vcmRlcj10Ll9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCxlPXRoaXMuX29yZGVyLGk9ITApe2xldCByPXQuZWxlbWVudHMsbz1yWzBdLHM9cls0XSxhPXJbOF0sbD1yWzFdLGM9cls1XSx1PXJbOV0sZD1yWzJdLHA9cls2XSxoPXJbMTBdO3N3aXRjaChlKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4oX2EoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxoKSx0aGlzLl96PU1hdGguYXRhbjIoLXMsbykpOih0aGlzLl94PU1hdGguYXRhbjIocCxjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtX2EodSwtMSwxKSksTWF0aC5hYnModSk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMihhLGgpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGMpKToodGhpcy5feT1NYXRoLmF0YW4yKC1kLG8pLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9TWF0aC5hc2luKF9hKHAsLTEsMSkpLE1hdGguYWJzKHApPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLWQsaCksdGhpcy5fej1NYXRoLmF0YW4yKC1zLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLV9hKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxoKSx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLXMsYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihfYShsLC0xLDEpKSxNYXRoLmFicyhsKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGMpLHRoaXMuX3k9TWF0aC5hdGFuMigtZCxvKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoYSxoKSk7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3o9TWF0aC5hc2luKC1fYShzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5feT1NYXRoLmF0YW4yKGEsbykpOih0aGlzLl94PU1hdGguYXRhbjIoLXUsaCksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLCEwPT09aSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLGkpe3JldHVybiBhYWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoYWFlLGUsaSl9c2V0RnJvbVZlY3RvcjModCxlPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5zZXQodC54LHQueSx0LnosZSl9cmVvcmRlcih0KXtyZXR1cm4gbGFlLnNldEZyb21FdWxlcih0aGlzKSx0aGlzLnNldEZyb21RdWF0ZXJuaW9uKGxhZSx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx2b2lkIDAhPT10WzNdJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyAkKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07UGgucHJvdG90eXBlLmlzRXVsZXI9ITAsUGguRGVmYXVsdE9yZGVyPSJYWVoiLFBoLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIF8yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxrNWU9MCxjYWU9bmV3ICQscXY9bmV3IENzLE5kPW5ldyBNbixIUj1uZXcgJCxsTT1uZXcgJCxGNWU9bmV3ICQsTjVlPW5ldyBDcyx1YWU9bmV3ICQoMSwwLDApLGRhZT1uZXcgJCgwLDEsMCkscGFlPW5ldyAkKDAsMCwxKSxMNWU9e3R5cGU6ImFkZGVkIn0saGFlPXt0eXBlOiJyZW1vdmVkIn0sR2k9Y2xhc3MgZXh0ZW5kcyBIZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6azVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJPYmplY3QzRCIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMudXA9R2kuRGVmYXVsdFVwLmNsb25lKCk7bGV0IHQ9bmV3ICQsZT1uZXcgUGgsaT1uZXcgQ3Mscj1uZXcgJCgxLDEsMSk7ZS5fb25DaGFuZ2UoZnVuY3Rpb24oKXtpLnNldEZyb21FdWxlcihlLCExKX0pLGkuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBNbn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgUG99fSksdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMubWF0cml4V29ybGQ9bmV3IE1uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT1HaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IF8yLHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319b25CZWZvcmVSZW5kZXIoKXt9b25BZnRlclJlbmRlcigpe31hcHBseU1hdHJpeDQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX1hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0KSx0aGlzfXNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZSh0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9c2V0Um90YXRpb25Gcm9tRXVsZXIodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX1zZXRSb3RhdGlvbkZyb21NYXRyaXgodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KX1zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfXJvdGF0ZU9uQXhpcyh0LGUpe3JldHVybiBxdi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KHF2KSx0aGlzfXJvdGF0ZU9uV29ybGRBeGlzKHQsZSl7cmV0dXJuIHF2LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXModWFlLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGRhZSx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhwYWUsdCl9dHJhbnNsYXRlT25BeGlzKHQsZSl7cmV0dXJuIGNhZS5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGNhZS5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1YWUsdCl9dHJhbnNsYXRlWSh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoZGFlLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHBhZSx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9IUi5jb3B5KHQpOkhSLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksbE0uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9OZC5sb29rQXQobE0sSFIsdGhpcy51cCk6TmQubG9va0F0KEhSLGxNLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoTmQpLHImJihOZC5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCkscXYuc2V0RnJvbVJvdGF0aW9uTWF0cml4KE5kKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChMNWUpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7cmV0dXJuIHRoaXN9bGV0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoaGFlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIG51bGwhPT10JiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCBlPXRoaXMuY2hpbGRyZW5bdF07ZS5wYXJlbnQ9bnVsbCxlLmRpc3BhdGNoRXZlbnQoaGFlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChOZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSx0LEY1ZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSxONWUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksdT1zKHQuaW1hZ2VzKSxkPXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksaD1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGQubGVuZ3RoPjAmJihpLnNoYXBlcz1kKSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksaC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1oKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07R2kuRGVmYXVsdFVwPW5ldyAkKDAsMSwwKSxHaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMCxHaS5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgT2M9bmV3ICQsTGQ9bmV3ICQsSzQ9bmV3ICQsQmQ9bmV3ICQsWXY9bmV3ICQsWHY9bmV3ICQsZmFlPW5ldyAkLFo0PW5ldyAkLEo0PW5ldyAkLCQ0PW5ldyAkLEtyPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLE9jLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKE9jKTtsZXQgbz1yLmxlbmd0aFNxKCk7cmV0dXJuIG8+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KG8pKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLG8pe09jLnN1YlZlY3RvcnMocixlKSxMZC5zdWJWZWN0b3JzKGksZSksSzQuc3ViVmVjdG9ycyh0LGUpO2xldCBzPU9jLmRvdChPYyksYT1PYy5kb3QoTGQpLGw9T2MuZG90KEs0KSxjPUxkLmRvdChMZCksdT1MZC5kb3QoSzQpLGQ9cypjLWEqYTtpZigwPT09ZClyZXR1cm4gby5zZXQoLTIsLTEsLTEpO2xldCBwPTEvZCxoPShjKmwtYSp1KSpwLGY9KHMqdS1hKmwpKnA7cmV0dXJuIG8uc2V0KDEtaC1mLGYsaCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsQmQpLEJkLng+PTAmJkJkLnk+PTAmJkJkLngrQmQueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixCZCksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihvLEJkLngpLGwuYWRkU2NhbGVkVmVjdG9yKHMsQmQueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxCZC56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBPYy5zdWJWZWN0b3JzKGksZSksTGQuc3ViVmVjdG9ycyh0LGUpLE9jLmNyb3NzKExkKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBPYy5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLExkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksLjUqT2MuY3Jvc3MoTGQpLmxlbmd0aCgpfWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIEtyLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiBLci5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlKX1nZXRVVih0LGUsaSxyLG8pe3JldHVybiBLci5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsaSxyLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIEtyLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gS3IuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7bGV0IHMsYSxpPXRoaXMuYSxyPXRoaXMuYixvPXRoaXMuYztZdi5zdWJWZWN0b3JzKHIsaSksWHYuc3ViVmVjdG9ycyhvLGkpLFo0LnN1YlZlY3RvcnModCxpKTtsZXQgbD1Zdi5kb3QoWjQpLGM9WHYuZG90KFo0KTtpZihsPD0wJiZjPD0wKXJldHVybiBlLmNvcHkoaSk7SjQuc3ViVmVjdG9ycyh0LHIpO2xldCB1PVl2LmRvdChKNCksZD1Ydi5kb3QoSjQpO2lmKHU+PTAmJmQ8PXUpcmV0dXJuIGUuY29weShyKTtsZXQgcD1sKmQtdSpjO2lmKHA8PTAmJmw+PTAmJnU8PTApcmV0dXJuIHM9bC8obC11KSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpOyQ0LnN1YlZlY3RvcnModCxvKTtsZXQgaD1Zdi5kb3QoJDQpLGY9WHYuZG90KCQ0KTtpZihmPj0wJiZoPD1mKXJldHVybiBlLmNvcHkobyk7bGV0IG09aCpjLWwqZjtpZihtPD0wJiZjPj0wJiZmPD0wKXJldHVybiBhPWMvKGMtZiksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihYdixhKTtsZXQgQz11KmYtaCpkO2lmKEM8PTAmJmQtdT49MCYmaC1mPj0wKXJldHVybiBmYWUuc3ViVmVjdG9ycyhvLHIpLGE9KGQtdSkvKGQtdSsoaC1mKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihmYWUsYSk7bGV0IF89MS8oQyttK3ApO3JldHVybiBzPW0qXyxhPXAqXyxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpLmFkZFNjYWxlZFZlY3RvcihYdixhKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxCNWU9MCxYbz1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpCNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPTEsdGhpcy5zaWRlPTAsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPTIwNCx0aGlzLmJsZW5kRHN0PTIwNSx0aGlzLmJsZW5kRXF1YXRpb249MTAwLHRoaXMuYmxlbmRTcmNBbHBoYT1udWxsLHRoaXMuYmxlbmREc3RBbHBoYT1udWxsLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPW51bGwsdGhpcy5kZXB0aEZ1bmM9Myx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD03NjgwLHRoaXMuc3RlbmNpbFpGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWlBhc3M9NzY4MCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih2b2lkIDAhPT10KWZvcihsZXQgZSBpbiB0KXtsZXQgaT10W2VdO2lmKHZvaWQgMD09PWkpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1pO2NvbnRpbnVlfWxldCByPXRoaXNbZV07dm9pZCAwIT09cj9yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWk6Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2Z1bmN0aW9uIHIobyl7bGV0IHM9W107Zm9yKGxldCBhIGluIG8pe2xldCBsPW9bYV07ZGVsZXRlIGwubWV0YWRhdGEscy5wdXNoKGwpfXJldHVybiBzfWlmKGkudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdm9pZCAwIT09dGhpcy5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdm9pZCAwIT09dGhpcy5zaGVlbiYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hlZW5Sb3VnaG5lc3MmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zcGVjdWxhckludGVuc2l0eSYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0JiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx2b2lkIDAhPT10aGlzLmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10aGlzLnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10aGlzLnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy50cmFuc21pc3Npb24mJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRoaWNrbmVzcyYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25Db2xvciYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2l6ZSYmKGkuc2l6ZT10aGlzLnNpemUpLG51bGwhPT10aGlzLnNoYWRvd1NpZGUmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSwxIT09dGhpcy5ibGVuZGluZyYmKGkuYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksMCE9PXRoaXMuc2lkZSYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksITA9PT10aGlzLnRyYW5zcGFyZW50JiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiYwIT09dGhpcy5yb3RhdGlvbiYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJihpLnBvbHlnb25PZmZzZXQ9ITApLDAhPT10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3ImJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJjEhPT10aGlzLmxpbmV3aWR0aCYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx2b2lkIDAhPT10aGlzLmRhc2hTaXplJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx2b2lkIDAhPT10aGlzLmdhcFNpemUmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx2b2lkIDAhPT10aGlzLnNjYWxlJiYoaS5zY2FsZT10aGlzLnNjYWxlKSwhMD09PXRoaXMuZGl0aGVyaW5nJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksITA9PT10aGlzLmFscGhhVG9Db3ZlcmFnZSYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSwhMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLCEwPT09dGhpcy53aXJlZnJhbWUmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLCEwPT09dGhpcy5mbGF0U2hhZGluZyYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksITE9PT10aGlzLnZpc2libGUmJihpLnZpc2libGU9ITEpLCExPT09dGhpcy50b25lTWFwcGVkJiYoaS50b25lTWFwcGVkPSExKSwie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGUpe2xldCBvPXIodC50ZXh0dXJlcykscz1yKHQuaW1hZ2VzKTtvLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1vKSxzLmxlbmd0aD4wJiYoaS5pbWFnZXM9cyl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgZT10LmNsaXBwaW5nUGxhbmVzLGk9bnVsbDtpZihudWxsIT09ZSl7bGV0IHI9ZS5sZW5ndGg7aT1uZXcgQXJyYXkocik7Zm9yKGxldCBvPTA7byE9PXI7KytvKWlbb109ZVtvXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPWksdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O1hvLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBLbT1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtLbS5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgZnI9bmV3ICQsVVI9bmV3IEplLExyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9TU0sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgYW4pLGVbaSsrXT1zLnIsZVtpKytdPXMuZyxlW2krK109cy5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgSmUpLGVbaSsrXT1zLngsZVtpKytdPXMueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3ICQpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgdHIpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56LGVbaSsrXT1zLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKDI9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKVVSLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxVUi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLFVSLngsVVIueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksZnIuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsZnIueCxmci55LGZyLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci54PXRoaXMuZ2V0WChlKSxmci55PXRoaXMuZ2V0WShlKSxmci56PXRoaXMuZ2V0WihlKSxmci5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspZnIueD10aGlzLmdldFgoZSksZnIueT10aGlzLmdldFkoZSksZnIuej10aGlzLmdldFooZSksZnIuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWZyLng9dGhpcy5nZXRYKGUpLGZyLnk9dGhpcy5nZXRZKGUpLGZyLno9dGhpcy5nZXRaKGUpLGZyLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLGZyLngsZnIueSxmci56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIsbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PU1NJiYodC51c2FnZT10aGlzLnVzYWdlKSwoMCE9PXRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0fHwtMSE9PXRoaXMudXBkYXRlUmFuZ2UuY291bnQpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07THIucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciB2Mj1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19LHkyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxlLGkpfX07KGNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0pLnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19LFY1ZT0wLGtsPW5ldyBNbixlVT1uZXcgR2ksUXY9bmV3ICQsS2E9bmV3IEphLGNNPW5ldyBKYSxZbz1uZXcgJCxLaT1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpWNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhtbGUodCk/eTI6djIpKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgUG8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31yb3RhdGVZKHQpe3JldHVybiBrbC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGtsKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIGtsLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4ga2wubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIGtsLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9bG9va0F0KHQpe3JldHVybiBlVS5sb29rQXQodCksZVUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoZVUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKFF2KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShRdi54LFF2LnksUXYueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgSmEpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3ICQoLTEvMCwtMS8wLC0xLzApLG5ldyAkKDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKUthLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtpXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixLYS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbyksWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxLYS5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgQWgpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3ICQsMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihLYS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAscz1lLmxlbmd0aDtvPHM7bysrKWNNLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyhLYS5taW4sY00ubWluKSxLYS5leHBhbmRCeVBvaW50KFlvKSxZby5hZGRWZWN0b3JzKEthLm1heCxjTS5tYXgpLEthLmV4cGFuZEJ5UG9pbnQoWW8pKTooS2EuZXhwYW5kQnlQb2ludChjTS5taW4pLEthLmV4cGFuZEJ5UG9pbnQoY00ubWF4KSk7S2EuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10LmNvdW50O288cztvKyspWW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSk7aWYoZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspe2xldCBhPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9YS5jb3VudDtjPHU7YysrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxsJiYoUXYuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLFlvLmFkZChRdikpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXkscz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgTHIobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgdmU9MDt2ZTxhO3ZlKyspY1t2ZV09bmV3ICQsdVt2ZV09bmV3ICQ7bGV0IGQ9bmV3ICQscD1uZXcgJCxoPW5ldyAkLGY9bmV3IEplLG09bmV3IEplLEM9bmV3IEplLF89bmV3ICQseT1uZXcgJDtmdW5jdGlvbiBJKHZlLFQsbmUpe2QuZnJvbUFycmF5KHIsMyp2ZSkscC5mcm9tQXJyYXkociwzKlQpLGguZnJvbUFycmF5KHIsMypuZSksZi5mcm9tQXJyYXkocywyKnZlKSxtLmZyb21BcnJheShzLDIqVCksQy5mcm9tQXJyYXkocywyKm5lKSxwLnN1YihkKSxoLnN1YihkKSxtLnN1YihmKSxDLnN1YihmKTtsZXQgbGU9MS8obS54KkMueS1DLngqbS55KTshaXNGaW5pdGUobGUpfHwoXy5jb3B5KHApLm11bHRpcGx5U2NhbGFyKEMueSkuYWRkU2NhbGVkVmVjdG9yKGgsLW0ueSkubXVsdGlwbHlTY2FsYXIobGUpLHkuY29weShoKS5tdWx0aXBseVNjYWxhcihtLngpLmFkZFNjYWxlZFZlY3RvcihwLC1DLngpLm11bHRpcGx5U2NhbGFyKGxlKSxjW3ZlXS5hZGQoXyksY1tUXS5hZGQoXyksY1tuZV0uYWRkKF8pLHVbdmVdLmFkZCh5KSx1W1RdLmFkZCh5KSx1W25lXS5hZGQoeSkpfWxldCBBPXRoaXMuZ3JvdXBzOzA9PT1BLmxlbmd0aCYmKEE9W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgdmU9MCxUPUEubGVuZ3RoO3ZlPFQ7Kyt2ZSl7bGV0IG5lPUFbdmVdLGxlPW5lLnN0YXJ0O2ZvcihsZXQgeWU9bGUsSj1sZStuZS5jb3VudDt5ZTxKO3llKz0zKUkoaVt5ZSswXSxpW3llKzFdLGlbeWUrMl0pfWxldCBPPW5ldyAkLGVlPW5ldyAkLFg9bmV3ICQseGU9bmV3ICQ7ZnVuY3Rpb24gZmUodmUpe1guZnJvbUFycmF5KG8sMyp2ZSkseGUuY29weShYKTtsZXQgVD1jW3ZlXTtPLmNvcHkoVCksTy5zdWIoWC5tdWx0aXBseVNjYWxhcihYLmRvdChUKSkpLm5vcm1hbGl6ZSgpLGVlLmNyb3NzVmVjdG9ycyh4ZSxUKTtsZXQgbGU9ZWUuZG90KHVbdmVdKTwwPy0xOjE7bFs0KnZlXT1PLngsbFs0KnZlKzFdPU8ueSxsWzQqdmUrMl09Ty56LGxbNCp2ZSszXT1sZX1mb3IobGV0IHZlPTAsVD1BLmxlbmd0aDt2ZTxUOysrdmUpe2xldCBuZT1BW3ZlXSxsZT1uZS5zdGFydDtmb3IobGV0IHllPWxlLEo9bGUrbmUuY291bnQ7eWU8Sjt5ZSs9MylmZShpW3llKzBdKSxmZShpW3llKzFdKSxmZShpW3llKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgTHIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsaD1pLmNvdW50O3A8aDtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3ICQsbz1uZXcgJCxzPW5ldyAkLGE9bmV3ICQsbD1uZXcgJCxjPW5ldyAkLHU9bmV3ICQsZD1uZXcgJDtpZih0KWZvcihsZXQgcD0wLGg9dC5jb3VudDtwPGg7cCs9Myl7bGV0IGY9dC5nZXRYKHArMCksbT10LmdldFgocCsxKSxDPXQuZ2V0WChwKzIpO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLEMpLHUuc3ViVmVjdG9ycyhzLG8pLGQuc3ViVmVjdG9ycyhyLG8pLHUuY3Jvc3MoZCksYS5mcm9tQnVmZmVyQXR0cmlidXRlKGksZiksbC5mcm9tQnVmZmVyQXR0cmlidXRlKGksbSksYy5mcm9tQnVmZmVyQXR0cmlidXRlKGksQyksYS5hZGQodSksbC5hZGQodSksYy5hZGQodSksaS5zZXRYWVooZixhLngsYS55LGEueiksaS5zZXRYWVoobSxsLngsbC55LGwueiksaS5zZXRYWVooQyxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IHA9MCxoPWUuY291bnQ7cDxoO3ArPTMpci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzEpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMiksdS5zdWJWZWN0b3JzKHMsbyksZC5zdWJWZWN0b3JzKHIsbyksdS5jcm9zcyhkKSxpLnNldFhZWihwKzAsdS54LHUueSx1LnopLGkuc2V0WFlaKHArMSx1LngsdS55LHUueiksaS5zZXRYWVoocCsyLHUueCx1LnksdS56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxpLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgciBpbiBpKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbcl0pY29udGludWU7bGV0IHM9aVtyXS5hcnJheSxhPXQuYXR0cmlidXRlc1tyXSxsPWEuYXJyYXksYz1hLml0ZW1TaXplKmUsdT1NYXRoLm1pbihsLmxlbmd0aCxzLmxlbmd0aC1jKTtmb3IobGV0IGQ9MCxwPWM7ZDx1O2QrKyxwKyspc1twXT1sW2RdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLGk9dC5jb3VudDtlPGk7ZSsrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxZby5ub3JtYWxpemUoKSx0LnNldFhZWihlLFlvLngsWW8ueSxZby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KGEsbCl7bGV0IGM9YS5hcnJheSx1PWEuaXRlbVNpemUsZD1hLm5vcm1hbGl6ZWQscD1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCp1KSxoPTAsZj0wO2ZvcihsZXQgbT0wLEM9bC5sZW5ndGg7bTxDO20rKyl7aD1hLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bFttXSphLmRhdGEuc3RyaWRlK2Eub2Zmc2V0OmxbbV0qdTtmb3IobGV0IF89MDtfPHU7XysrKXBbZisrXT1jW2grK119cmV0dXJuIG5ldyBMcihwLHUsZCl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgS2ksaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgYz10KHJbYV0saSk7ZS5zZXRBdHRyaWJ1dGUoYSxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGEgaW4gbyl7bGV0IGw9W10sYz1vW2FdO2ZvcihsZXQgdT0wLGQ9Yy5sZW5ndGg7dTxkO3UrKyl7bGV0IGg9dChjW3VdLGkpO2wucHVzaChoKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgcz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2E8bDthKyspe2xldCBjPXNbYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpdm9pZCAwIT09bFtjXSYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl0LmRhdGEuYXR0cmlidXRlc1tsXT1pW2xdLnRvSlNPTih0LmRhdGEpO2xldCByPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgZD0wLHA9Yy5sZW5ndGg7ZDxwO2QrKyl1LnB1c2goY1tkXS50b0pTT04odC5kYXRhKSk7dS5sZW5ndGg+MCYmKHJbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgcz10aGlzLmdyb3VwcztzLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMpKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWEmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7bnVsbCE9PWkmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXRoaXMuc2V0QXR0cmlidXRlKGMscltjXS5jbG9uZShlKSk7bGV0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIG8pe2xldCB1PVtdLGQ9b1tjXTtmb3IobGV0IHA9MCxoPWQubGVuZ3RoO3A8aDtwKyspdS5wdXNoKGRbcF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPXV9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrKyl7bGV0IGQ9c1tjXTt0aGlzLmFkZEdyb3VwKGQuc3RhcnQsZC5jb3VudCxkLm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7bnVsbCE9PWEmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHZvaWQgMCE9PXQucGFyYW1ldGVycyYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O0tpLnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBtYWU9bmV3IE1uLEt2PW5ldyBJaCx0VT1uZXcgQWgseWg9bmV3ICQsYmg9bmV3ICQseGg9bmV3ICQsblU9bmV3ICQsaVU9bmV3ICQsclU9bmV3ICQselI9bmV3ICQsalI9bmV3ICQsR1I9bmV3ICQsV1I9bmV3IEplLHFSPW5ldyBKZSxZUj1uZXcgSmUsb1U9bmV3ICQsWFI9bmV3ICQseW89Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBLbSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgcyxpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdGVyaWFsLG89dGhpcy5tYXRyaXhXb3JsZDtpZih2b2lkIDAhPT1yJiYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdFUuY29weShpLmJvdW5kaW5nU3BoZXJlKSx0VS5hcHBseU1hdHJpeDQobyksITEhPT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKHRVKSkmJihtYWUuY29weShvKS5pbnZlcnQoKSxLdi5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQobWFlKSxudWxsPT09aS5ib3VuZGluZ0JveHx8ITEhPT1Ldi5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpKSlpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsZD1pLmF0dHJpYnV0ZXMudXYscD1pLmF0dHJpYnV0ZXMudXYyLGg9aS5ncm91cHMsZj1pLmRyYXdSYW5nZTtpZihudWxsIT09YSlpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbT0wLEM9aC5sZW5ndGg7bTxDO20rKyl7bGV0IF89aFttXSx5PXJbXy5tYXRlcmlhbEluZGV4XTtmb3IobGV0IE89TWF0aC5tYXgoXy5zdGFydCxmLnN0YXJ0KSxlZT1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKF8uc3RhcnQrXy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtPPGVlO08rPTMpe2xldCBYPWEuZ2V0WChPKSx4ZT1hLmdldFgoTysxKSxmZT1hLmdldFgoTysyKTtzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxYLHhlLGZlKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihPLzMpLHMuZmFjZS5tYXRlcmlhbEluZGV4PV8ubWF0ZXJpYWxJbmRleCxlLnB1c2gocykpfX1lbHNlIGZvcihsZXQgXz1NYXRoLm1heCgwLGYuc3RhcnQpLHk9TWF0aC5taW4oYS5jb3VudCxmLnN0YXJ0K2YuY291bnQpO188eTtfKz0zKXtsZXQgST1hLmdldFgoXyksQT1hLmdldFgoXysxKSxPPWEuZ2V0WChfKzIpO3M9UVIodGhpcyxyLHQsS3YsbCxjLHUsZCxwLEksQSxPKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihfLzMpLGUucHVzaChzKSl9ZWxzZSBpZih2b2lkIDAhPT1sKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBtPTAsQz1oLmxlbmd0aDttPEM7bSsrKXtsZXQgXz1oW21dLHk9cltfLm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgTz1NYXRoLm1heChfLnN0YXJ0LGYuc3RhcnQpLGVlPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oXy5zdGFydCtfLmNvdW50LGYuc3RhcnQrZi5jb3VudCkpO088ZWU7Tys9MylzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxPLE8rMSxPKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKE8vMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Xy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IF89TWF0aC5tYXgoMCxmLnN0YXJ0KSx5PU1hdGgubWluKGwuY291bnQsZi5zdGFydCtmLmNvdW50KTtfPHk7Xys9MylzPVFSKHRoaXMscix0LEt2LGwsYyx1LGQscCxfLF8rMSxfKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKF8vMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIFFSKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkKXt5aC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksYmguZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLHhoLmZyb21CdWZmZXJBdHRyaWJ1dGUocixkKTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXt6Ui5zZXQoMCwwLDApLGpSLnNldCgwLDAsMCksR1Iuc2V0KDAsMCwwKTtmb3IobGV0IGY9MCxtPW8ubGVuZ3RoO2Y8bTtmKyspe2xldCBDPXBbZl0sXz1vW2ZdOzAhPT1DJiYoblUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGMpLGlVLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyx1KSxyVS5mcm9tQnVmZmVyQXR0cmlidXRlKF8sZCkscz8oelIuYWRkU2NhbGVkVmVjdG9yKG5VLEMpLGpSLmFkZFNjYWxlZFZlY3RvcihpVSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUsQykpOih6Ui5hZGRTY2FsZWRWZWN0b3IoblUuc3ViKHloKSxDKSxqUi5hZGRTY2FsZWRWZWN0b3IoaVUuc3ViKGJoKSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUuc3ViKHhoKSxDKSkpfXloLmFkZCh6UiksYmguYWRkKGpSKSx4aC5hZGQoR1IpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLHloKSxuLmJvbmVUcmFuc2Zvcm0odSxiaCksbi5ib25lVHJhbnNmb3JtKGQseGgpKTtsZXQgaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9MT09PXQuc2lkZT9pLmludGVyc2VjdFRyaWFuZ2xlKHMsbyxyLCEwLGEpOmkuaW50ZXJzZWN0VHJpYW5nbGUocixvLHMsMiE9PXQuc2lkZSxhKSxudWxsPT09bClyZXR1cm4gbnVsbDtYUi5jb3B5KGEpLFhSLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhYUik7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6WFIuY2xvbmUoKSxvYmplY3Q6bn19KG4sdCxlLGkseWgsYmgseGgsb1UpO2lmKGgpe2EmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxkKSxoLnV2PUtyLmdldFVWKG9VLHloLGJoLHhoLFdSLHFSLFlSLG5ldyBKZSkpLGwmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxkKSxoLnV2Mj1Lci5nZXRVVihvVSx5aCxiaCx4aCxXUixxUixZUixuZXcgSmUpKTtsZXQgZj17YTpjLGI6dSxjOmQsbm9ybWFsOm5ldyAkLG1hdGVyaWFsSW5kZXg6MH07S3IuZ2V0Tm9ybWFsKHloLGJoLHhoLGYubm9ybWFsKSxoLmZhY2U9Zn1yZXR1cm4gaH15by5wcm90b3R5cGUuaXNNZXNoPSEwO3ZhciBabT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxvPTEscz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6c307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iociksbz1NYXRoLmZsb29yKG8pLHM9TWF0aC5mbG9vcihzKTtsZXQgbD1bXSxjPVtdLHU9W10sZD1bXSxwPTAsaD0wO2Z1bmN0aW9uIGYobSxDLF8seSxJLEEsTyxlZSxYLHhlLGZlKXtsZXQgdmU9QS9YLFQ9Ty94ZSxuZT1BLzIsbGU9Ty8yLGhlPWVlLzIseWU9WCsxLEo9eGUrMSxhZT0wLG1lPTAsamU9bmV3ICQ7Zm9yKGxldCBNZT0wO01lPEo7TWUrKyl7bGV0IEZlPU1lKlQtbGU7Zm9yKGxldCB1dD0wO3V0PHllO3V0KyspamVbbV09KHV0KnZlLW5lKSp5LGplW0NdPUZlKkksamVbX109aGUsYy5wdXNoKGplLngsamUueSxqZS56KSxqZVttXT0wLGplW0NdPTAsamVbX109ZWU+MD8xOi0xLHUucHVzaChqZS54LGplLnksamUueiksZC5wdXNoKHV0L1gpLGQucHVzaCgxLU1lL3hlKSxhZSs9MX1mb3IobGV0IE1lPTA7TWU8eGU7TWUrKylmb3IobGV0IEZlPTA7RmU8WDtGZSsrKXtsZXQgU3Q9cCtGZSt5ZSooTWUrMSksZ3Q9cCsoRmUrMSkreWUqKE1lKzEpLFJlPXArKEZlKzEpK3llKk1lO2wucHVzaChwK0ZlK3llKk1lLFN0LFJlKSxsLnB1c2goU3QsZ3QsUmUpLG1lKz02fWEuYWRkR3JvdXAoaCxtZSxmZSksaCs9bWUscCs9YWV9ZigieiIsInkiLCJ4IiwtMSwtMSxpLGUsdCxzLG8sMCksZigieiIsInkiLCJ4IiwxLC0xLGksZSwtdCxzLG8sMSksZigieCIsInoiLCJ5IiwxLDEsdCxpLGUscixzLDIpLGYoIngiLCJ6IiwieSIsMSwtMSx0LGksLWUscixzLDMpLGYoIngiLCJ5IiwieiIsMSwtMSx0LGUsaSxyLG8sNCksZigieCIsInkiLCJ6IiwtMSwtMSx0LGUsLWkscixvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKGQsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFptKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gZ3kobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07dFtlXVtpXT1yJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlfHxyLmlzUXVhdGVybmlvbik/ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOnJ9fXJldHVybiB0fWZ1bmN0aW9uIHlzKG4pe2xldCB0PXt9O2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1neShuW2VdKTtmb3IobGV0IHIgaW4gaSl0W3JdPWlbcl19cmV0dXJuIHR9dmFyIFU1ZT17Y2xvbmU6Z3ksbWVyZ2U6eXN9LHpkPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59Iix0aGlzLmZyYWdtZW50U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApO1xufSIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdm9pZCAwIT09dCYmKHZvaWQgMCE9PXQuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9Z3kodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgcz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO2UudW5pZm9ybXNbcl09cyYmcy5pc1RleHR1cmU/e3R5cGU6InQiLHZhbHVlOnMudG9KU09OKHQpLnV1aWR9OnMmJnMuaXNDb2xvcj97dHlwZToiYyIsdmFsdWU6cy5nZXRIZXgoKX06cyYmcy5pc1ZlY3RvcjI/e3R5cGU6InYyIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjM/e3R5cGU6InYzIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjQ/e3R5cGU6InY0Iix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTpzLnRvQXJyYXkoKX06e3ZhbHVlOnN9fU9iamVjdC5rZXlzKHRoaXMuZGVmaW5lcykubGVuZ3RoPjAmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKSxlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcixlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7bGV0IGk9e307Zm9yKGxldCByIGluIHRoaXMuZXh0ZW5zaW9ucykhMD09PXRoaXMuZXh0ZW5zaW9uc1tyXSYmKGlbcl09ITApO3JldHVybiBPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmKGUuZXh0ZW5zaW9ucz1pKSxlfX07emQucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWw9ITA7dmFyIFRNPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ2FtZXJhIix0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgTW4sdGhpcy5wcm9qZWN0aW9uTWF0cml4PW5ldyBNbix0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlPW5ldyBNbn1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHQubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLnByb2plY3Rpb25NYXRyaXguY29weSh0LnByb2plY3Rpb25NYXRyaXgpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSx0aGlzfWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KC1lWzhdLC1lWzldLC1lWzEwXSkubm9ybWFsaXplKCl9dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe3N1cGVyLnVwZGF0ZVdvcmxkTWF0cml4KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O1RNLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgeHM9Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj0yKndVKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKC41KkI0KnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiAyKndVKk1hdGguYXRhbihNYXRoLnRhbiguNSpCNCp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQsZSxpLHIsbyxzKXt0aGlzLmFzcGVjdD10L2UsbnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIsZT10Kk1hdGgudGFuKC41KkI0KnRoaXMuZm92KS90aGlzLnpvb20saT0yKmUscj10aGlzLmFzcGVjdCppLG89LS41KnIscz10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPXMuZnVsbFdpZHRoLGM9cy5mdWxsSGVpZ2h0O28rPXMub2Zmc2V0WCpyL2wsZS09cy5vZmZzZXRZKmkvYyxyKj1zLndpZHRoL2wsaSo9cy5oZWlnaHQvY31sZXQgYT10aGlzLmZpbG1PZmZzZXQ7MCE9PWEmJihvKz10KmEvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8rcixlLGUtaSx0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5mb3Y9dGhpcy5mb3YsZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLGUub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsZS5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZS5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLGUub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LGV9fTt4cy5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgRE09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLCEwIT09aS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTt0aGlzLnJlbmRlclRhcmdldD1pO2xldCByPW5ldyB4cyg5MCwxLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgJCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBvPW5ldyB4cyg5MCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgJCgtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgcz1uZXcgeHMoOTAsMSx0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsMCwxKSxzLmxvb2tBdChuZXcgJCgwLDEsMCkpLHRoaXMuYWRkKHMpO2xldCBhPW5ldyB4cyg5MCwxLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgJCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgeHMoOTAsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3ICQoMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgeHMoOTAsMSx0LGUpO2MubGF5ZXJzPXRoaXMubGF5ZXJzLGMudXAuc2V0KDAsLTEsMCksYy5sb29rQXQobmV3ICQoMCwwLC0xKSksdGhpcy5hZGQoYyl9dXBkYXRlKHQsZSl7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IGk9dGhpcy5yZW5kZXJUYXJnZXQsW3IsbyxzLGEsbCxjXT10aGlzLmNoaWxkcmVuLHU9dC54ci5lbmFibGVkLGQ9dC5nZXRSZW5kZXJUYXJnZXQoKTt0LnhyLmVuYWJsZWQ9ITE7bGV0IHA9aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExLHQuc2V0UmVuZGVyVGFyZ2V0KGksMCksdC5yZW5kZXIoZSxyKSx0LnNldFJlbmRlclRhcmdldChpLDEpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwyKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMyksdC5yZW5kZXIoZSxhKSx0LnNldFJlbmRlclRhcmdldChpLDQpLHQucmVuZGVyKGUsbCksaS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1wLHQuc2V0UmVuZGVyVGFyZ2V0KGksNSksdC5yZW5kZXIoZSxjKSx0LnNldFJlbmRlclRhcmdldChkKSx0LnhyLmVuYWJsZWQ9dSxpLnRleHR1cmUubmVlZHNQTVJFTVVwZGF0ZT0hMH19LF95PWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIodD12b2lkIDAhPT10P3Q6W10sZT12b2lkIDAhPT1lP2U6MzAxLGkscixvLHMsYSxsLGMsdSksdGhpcy5mbGlwWT0hMX1nZXQgaW1hZ2VzKCl7cmV0dXJuIHRoaXMuaW1hZ2V9c2V0IGltYWdlcyh0KXt0aGlzLmltYWdlPXR9fTtfeS5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMDt2YXIgYjI9Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApIiksZT1pKSxzdXBlcih0LHQsZSksdGhpcy50ZXh0dXJlPW5ldyBfeSh2b2lkIDAsKGU9ZXx8e30pLm1hcHBpbmcsZS53cmFwUyxlLndyYXBULGUubWFnRmlsdGVyLGUubWluRmlsdGVyLGUuZm9ybWF0LGUudHlwZSxlLmFuaXNvdHJvcHksZS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PWUuZ2VuZXJhdGVNaXBtYXBzJiZlLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWUubWluRmlsdGVyP2UubWluRmlsdGVyOmJzfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9enMsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGlfdW5pZm9ybXM9e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LGlfdmVydGV4U2hhZGVyPSJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsaV9mcmFnbWVudFNoYWRlcj0iXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHI9bmV3IFptKDUsNSw1KSxvPW5ldyB6ZCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6Z3koaV91bmlmb3JtcyksdmVydGV4U2hhZGVyOmlfdmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmlfZnJhZ21lbnRTaGFkZXIsc2lkZToxLGJsZW5kaW5nOjB9KTtvLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZT1lO2xldCBzPW5ldyB5byhyLG8pLGE9ZS5taW5GaWx0ZXI7cmV0dXJuIDEwMDg9PT1lLm1pbkZpbHRlciYmKGUubWluRmlsdGVyPWJzKSxuZXcgRE0oMSwxMCx0aGlzKS51cGRhdGUodCxzKSxlLm1pbkZpbHRlcj1hLHMuZ2VvbWV0cnkuZGlzcG9zZSgpLHMubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IHM9MDtzPDY7cysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMscyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtiMi5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIHNVPW5ldyAkLEc1ZT1uZXcgJCxXNWU9bmV3IFBvLGtjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9c1Uuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKEc1ZS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoc1UpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKDA9PT1yKXJldHVybiAwPT09dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCk/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gbzwwfHxvPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8VzVlLmdldE5vcm1hbE1hdHJpeCh0KSxyPXRoaXMuY29wbGFuYXJQb2ludChzVSkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1yLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O2tjLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciAkdj1uZXcgQWgsS1I9bmV3ICQsdnk9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcga2MsZT1uZXcga2MsaT1uZXcga2Mscj1uZXcga2Msbz1uZXcga2Mscz1uZXcga2Mpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGQ9aVs3XSxwPWlbOF0saD1pWzldLGY9aVsxMF0sbT1pWzExXSxDPWlbMTJdLF89aVsxM10seT1pWzE0XSxJPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGQtbCxtLXAsSS1DKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGQrbCxtK3AsSStDKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLGQrYyxtK2gsSStfKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLGQtYyxtLWgsSS1fKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLGQtdSxtLWYsSS15KS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLGQrdSxtK2YsSSt5KS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksJHYuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCR2KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiAkdi5jZW50ZXIuc2V0KDAsMCwwKSwkdi5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsJHYuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSgkdil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoS1IueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LEtSLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxLUi56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoS1IpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBnbGUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIHE1ZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgZD1pLmdldChjKTt2b2lkIDA9PT1kP2kuc2V0KGMsZnVuY3Rpb24oYyx1KXtsZXQgZD1jLmFycmF5LHA9Yy51c2FnZSxoPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsaCksbi5idWZmZXJEYXRhKHUsZCxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZj01MTI2O3JldHVybiBkIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Y9NTEyNjpkIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpkIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9mPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmY9NTEyMzpkIGluc3RhbmNlb2YgSW50MTZBcnJheT9mPTUxMjI6ZCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Y9NTEyNTpkIGluc3RhbmNlb2YgSW50MzJBcnJheT9mPTUxMjQ6ZCBpbnN0YW5jZW9mIEludDhBcnJheT9mPTUxMjA6KGQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxkIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZj01MTIxKSx7YnVmZmVyOmgsdHlwZTpmLGJ5dGVzUGVyRWxlbWVudDpkLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyx1KSk6ZC52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsdSxkKXtsZXQgcD11LmFycmF5LGg9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoZCxjKSwtMT09PWguY291bnQ/bi5idWZmZXJTdWJEYXRhKGQsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEoZCxoLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsaC5vZmZzZXQsaC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGQsaC5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K2guY291bnQpKSxoLmNvdW50PS0xKX0oZC5idWZmZXIsYyx1KSxkLnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBBTT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsdT1sKzEsZD10L2EscD1lL2wsaD1bXSxmPVtdLG09W10sQz1bXTtmb3IobGV0IF89MDtfPHU7XysrKXtsZXQgeT1fKnAtcztmb3IobGV0IEk9MDtJPGM7SSsrKWYucHVzaChJKmQtbywteSwwKSxtLnB1c2goMCwwLDEpLEMucHVzaChJL2EpLEMucHVzaCgxLV8vbCl9Zm9yKGxldCBfPTA7XzxsO18rKylmb3IobGV0IHk9MDt5PGE7eSsrKXtsZXQgQT15K2MqKF8rMSksTz15KzErYyooXysxKSxlZT15KzErYypfO2gucHVzaCh5K2MqXyxBLGVlKSxoLnB1c2goQSxPLGVlKX10aGlzLnNldEluZGV4KGgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBHcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBHcihDLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBBTSh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LGJpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sUHQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBQb30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEplKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBKZSguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99fX0sVXU9e2Jhc2ljOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuc3BlY3VsYXJtYXAsUHQuZW52bWFwLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmZvZyxQdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5lbWlzc2l2ZW1hcCxQdC5idW1wbWFwLFB0Lm5vcm1hbG1hcCxQdC5kaXNwbGFjZW1lbnRtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBhbigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5lbnZtYXAsUHQuYW9tYXAsUHQubGlnaHRtYXAsUHQuZW1pc3NpdmVtYXAsUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LnJvdWdobmVzc21hcCxQdC5tZXRhbG5lc3NtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmJ1bXBtYXAsUHQubm9ybWFsbWFwLFB0LmRpc3BsYWNlbWVudG1hcCxQdC5ncmFkaWVudG1hcCxQdC5mb2csUHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGFuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3Jtczp5cyhbUHQucG9pbnRzLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpiaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6YmkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3Jtczp5cyhbUHQuc3ByaXRlLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpiaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3Jtczp5cyhbUHQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YmkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3ICR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOnlzKFtQdC5saWdodHMsUHQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IGFuKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6Ymkuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6Ymkuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiB5VWUobix0LGUsaSxyLG8pe2xldCBsLGMscz1uZXcgYW4oMCksYT0hMD09PXI/MDoxLHU9bnVsbCxkPTAscD1udWxsO2Z1bmN0aW9uIGYobSxDKXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIobS5yLG0uZyxtLmIsQyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKG0sQz0xKXtzLnNldChtKSxhPUMsZihzLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24obSl7YT1tLGYocyxhKX0scmVuZGVyOmZ1bmN0aW9uKG0sQyl7bGV0IF89ITEseT0hMD09PUMuaXNTY2VuZT9DLmJhY2tncm91bmQ6bnVsbDt5JiZ5LmlzVGV4dHVyZSYmKHk9dC5nZXQoeSkpO2xldCBJPW4ueHIsQT1JLmdldFNlc3Npb24mJkkuZ2V0U2Vzc2lvbigpO0EmJiJhZGRpdGl2ZSI9PT1BLmVudmlyb25tZW50QmxlbmRNb2RlJiYoeT1udWxsKSxudWxsPT09eT9mKHMsYSk6eSYmeS5pc0NvbG9yJiYoZih5LDEpLF89ITApLChuLmF1dG9DbGVhcnx8XykmJm4uY2xlYXIobi5hdXRvQ2xlYXJDb2xvcixuLmF1dG9DbGVhckRlcHRoLG4uYXV0b0NsZWFyU3RlbmNpbCkseSYmKHkuaXNDdWJlVGV4dHVyZXx8MzA2PT09eS5tYXBwaW5nKT8odm9pZCAwPT09YyYmKGM9bmV3IHlvKG5ldyBabSgxLDEsMSksbmV3IHpkKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpneShVdS5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6VXUuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6VXUuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKE8sZWUsWCl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oWC5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXksYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXkuaXNDdWJlVGV4dHVyZSYmITE9PT15LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTp5JiZ5LmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyB5byhuZXcgQU0oMiwyKSxuZXcgemQoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6Z3koVXUuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOlV1LmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlV1LmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxpLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9eSwhMD09PXkubWF0cml4QXV0b1VwZGF0ZSYmeS51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoeS5tYXRyaXgpLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIGJVZShuLHQsZSxpKXtsZXQgcj1uLmdldFBhcmFtZXRlcigzNDkyMSksbz1pLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikscz1pLmlzV2ViR0wyfHxudWxsIT09byxhPXt9LGw9bShudWxsKSxjPWw7ZnVuY3Rpb24gcChsZSl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkobGUpOm8uYmluZFZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBoKGxlKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KGxlKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBtKGxlKXtsZXQgaGU9W10seWU9W10sSj1bXTtmb3IobGV0IGFlPTA7YWU8cjthZSsrKWhlW2FlXT0wLHllW2FlXT0wLEpbYWVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmhlLGVuYWJsZWRBdHRyaWJ1dGVzOnllLGF0dHJpYnV0ZURpdmlzb3JzOkosb2JqZWN0OmxlLGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24geSgpe2xldCBsZT1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKWxlW2hlXT0wfWZ1bmN0aW9uIEkobGUpe0EobGUsMCl9ZnVuY3Rpb24gQShsZSxoZSl7bGV0IEo9Yy5lbmFibGVkQXR0cmlidXRlcyxhZT1jLmF0dHJpYnV0ZURpdmlzb3JzO2MubmV3QXR0cmlidXRlc1tsZV09MSwwPT09SltsZV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxlKSxKW2xlXT0xKSxhZVtsZV0hPT1oZSYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKGxlLGhlKSxhZVtsZV09aGUpfWZ1bmN0aW9uIE8oKXtsZXQgbGU9Yy5uZXdBdHRyaWJ1dGVzLGhlPWMuZW5hYmxlZEF0dHJpYnV0ZXM7Zm9yKGxldCB5ZT0wLEo9aGUubGVuZ3RoO3llPEo7eWUrKyloZVt5ZV0hPT1sZVt5ZV0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh5ZSksaGVbeWVdPTApfWZ1bmN0aW9uIGVlKGxlLGhlLHllLEosYWUsbWUpeyEwIT09aS5pc1dlYkdMMnx8NTEyNCE9PXllJiY1MTI1IT09eWU/bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxlLGhlLHllLEosYWUsbWUpOm4udmVydGV4QXR0cmliSVBvaW50ZXIobGUsaGUseWUsYWUsbWUpfWZ1bmN0aW9uIFQoKXtuZSgpLGMhPT1sJiYoYz1sLHAoYy5vYmplY3QpKX1mdW5jdGlvbiBuZSgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24obGUsaGUseWUsSixhZSl7bGV0IG1lPSExO2lmKHMpe2xldCBqZT1mdW5jdGlvbihsZSxoZSx5ZSl7bGV0IEo9ITA9PT15ZS53aXJlZnJhbWUsYWU9YVtsZS5pZF07dm9pZCAwPT09YWUmJihhZT17fSxhW2xlLmlkXT1hZSk7bGV0IG1lPWFlW2hlLmlkXTt2b2lkIDA9PT1tZSYmKG1lPXt9LGFlW2hlLmlkXT1tZSk7bGV0IGplPW1lW0pdO3JldHVybiB2b2lkIDA9PT1qZSYmKGplPW0oaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6by5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKSxtZVtKXT1qZSksamV9KEoseWUsaGUpO2MhPT1qZSYmKGM9amUscChjLm9iamVjdCkpLG1lPWZ1bmN0aW9uKGxlLGhlKXtsZXQgeWU9Yy5hdHRyaWJ1dGVzLEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPXllW21lXSxNZT1KW21lXTtpZih2b2lkIDA9PT1qZXx8amUuYXR0cmlidXRlIT09TWV8fGplLmRhdGEhPT1NZS5kYXRhKXJldHVybiEwO2FlKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PWFlfHxjLmluZGV4IT09aGV9KEosYWUpLG1lJiZmdW5jdGlvbihsZSxoZSl7bGV0IHllPXt9LEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPUpbbWVdLE1lPXt9O01lLmF0dHJpYnV0ZT1qZSxqZS5kYXRhJiYoTWUuZGF0YT1qZS5kYXRhKSx5ZVttZV09TWUsYWUrK31jLmF0dHJpYnV0ZXM9eWUsYy5hdHRyaWJ1dGVzTnVtPWFlLGMuaW5kZXg9aGV9KEosYWUpfWVsc2V7bGV0IGplPSEwPT09aGUud2lyZWZyYW1lOyhjLmdlb21ldHJ5IT09Si5pZHx8Yy5wcm9ncmFtIT09eWUuaWR8fGMud2lyZWZyYW1lIT09amUpJiYoYy5nZW9tZXRyeT1KLmlkLGMucHJvZ3JhbT15ZS5pZCxjLndpcmVmcmFtZT1qZSxtZT0hMCl9ITA9PT1sZS5pc0luc3RhbmNlZE1lc2gmJihtZT0hMCksbnVsbCE9PWFlJiZlLnVwZGF0ZShhZSwzNDk2MyksbWUmJihmdW5jdGlvbihsZSxoZSx5ZSxKKXtpZighMT09PWkuaXNXZWJHTDImJihsZS5pc0luc3RhbmNlZE1lc2h8fEouaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjt5KCk7bGV0IGFlPUouYXR0cmlidXRlcyxtZT15ZS5nZXRBdHRyaWJ1dGVzKCksamU9aGUuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IE1lIGluIG1lKXtsZXQgRmU9bWVbTWVdO2lmKEZlLmxvY2F0aW9uPj0wKXtsZXQgdXQ9YWVbTWVdO2lmKHZvaWQgMD09PXV0JiYoImluc3RhbmNlTWF0cml4Ij09PU1lJiZsZS5pbnN0YW5jZU1hdHJpeCYmKHV0PWxlLmluc3RhbmNlTWF0cml4KSwiaW5zdGFuY2VDb2xvciI9PT1NZSYmbGUuaW5zdGFuY2VDb2xvciYmKHV0PWxlLmluc3RhbmNlQ29sb3IpKSx2b2lkIDAhPT11dCl7bGV0IFN0PXV0Lm5vcm1hbGl6ZWQsZ3Q9dXQuaXRlbVNpemUsUmU9ZS5nZXQodXQpO2lmKHZvaWQgMD09PVJlKWNvbnRpbnVlO2xldCBBbj1SZS5idWZmZXIsRXQ9UmUudHlwZSxvbj1SZS5ieXRlc1BlckVsZW1lbnQ7aWYodXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IENlPXV0LmRhdGEsdnQ9Q2Uuc3RyaWRlLF90PXV0Lm9mZnNldDtpZihDZSYmQ2UuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcil7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUEoRmUubG9jYXRpb24raWUsQ2UubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PUNlLm1lc2hQZXJBdHRyaWJ1dGUqQ2UuY291bnQpfWVsc2UgZm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUkoRmUubG9jYXRpb24raWUpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKWVlKEZlLmxvY2F0aW9uK2llLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCx2dCpvbiwoX3QrZ3QvRmUubG9jYXRpb25TaXplKmllKSpvbil9ZWxzZXtpZih1dC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUEoRmUubG9jYXRpb24rQ2UsdXQubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PXV0Lm1lc2hQZXJBdHRyaWJ1dGUqdXQuY291bnQpfWVsc2UgZm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUkoRmUubG9jYXRpb24rQ2UpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKWVlKEZlLmxvY2F0aW9uK0NlLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCxndCpvbixndC9GZS5sb2NhdGlvblNpemUqQ2Uqb24pfX1lbHNlIGlmKHZvaWQgMCE9PWplKXtsZXQgU3Q9amVbTWVdO2lmKHZvaWQgMCE9PVN0KXN3aXRjaChTdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihGZS5sb2NhdGlvbixTdCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KEZlLmxvY2F0aW9uLFN0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoRmUubG9jYXRpb24sU3QpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoRmUubG9jYXRpb24sU3QpfX19fU8oKX0obGUsaGUseWUsSiksbnVsbCE9PWFlJiZuLmJpbmRCdWZmZXIoMzQ5NjMsZS5nZXQoYWUpLmJ1ZmZlcikpfSxyZXNldDpULHJlc2V0RGVmYXVsdFN0YXRlOm5lLGRpc3Bvc2U6ZnVuY3Rpb24oKXtUKCk7Zm9yKGxldCBsZSBpbiBhKXtsZXQgaGU9YVtsZV07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGVdfX0scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6ZnVuY3Rpb24obGUpe2lmKHZvaWQgMD09PWFbbGUuaWRdKXJldHVybjtsZXQgaGU9YVtsZS5pZF07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGUuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKGxlKXtmb3IobGV0IGhlIGluIGEpe2xldCB5ZT1hW2hlXTtpZih2b2lkIDA9PT15ZVtsZS5pZF0pY29udGludWU7bGV0IEo9eWVbbGUuaWRdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSB5ZVtsZS5pZF19fSxpbml0QXR0cmlidXRlczp5LGVuYWJsZUF0dHJpYnV0ZTpJLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOk99fWZ1bmN0aW9uIHhVZShuLHQsZSxpKXtsZXQgbyxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGMpe289Y30sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oYyx1KXtuLmRyYXdBcnJheXMobyxjLHUpLGUudXBkYXRlKHUsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oYyx1LGQpe2lmKDA9PT1kKXJldHVybjtsZXQgcCxoO2lmKHIpcD1uLGg9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYocD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGg9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXApcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cFtoXShvLGMsdSxkKSxlLnVwZGF0ZSh1LG8sZCl9fWZ1bmN0aW9uIENVZShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gbyhYKXtpZigiaGlnaHAiPT09WCl7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtYPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1YJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBzPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPXZvaWQgMCE9PWUucHJlY2lzaW9uP2UucHJlY2lzaW9uOiJoaWdocCIsbD1vKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1zfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT0hMD09PWUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixkPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxwPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGY9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLG09bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLEM9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLF89bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLHk9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLEk9cD4wLEE9c3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cmV0dXJue2lzV2ViR0wyOnMsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09aSlyZXR1cm4gaTtpZighMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IFg9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2k9bi5nZXRQYXJhbWV0ZXIoWC5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpfWVsc2UgaT0wO3JldHVybiBpfSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6ZCxtYXhWZXJ0ZXhUZXh0dXJlczpwLG1heFRleHR1cmVTaXplOmgsbWF4Q3ViZW1hcFNpemU6ZixtYXhBdHRyaWJ1dGVzOm0sbWF4VmVydGV4VW5pZm9ybXM6QyxtYXhWYXJ5aW5nczpfLG1heEZyYWdtZW50VW5pZm9ybXM6eSx2ZXJ0ZXhUZXh0dXJlczpJLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpBLGZsb2F0VmVydGV4VGV4dHVyZXM6SSYmQSxtYXhTYW1wbGVzOnM/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjB9fWZ1bmN0aW9uIHdVZShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxvPSExLHM9bmV3IGtjLGE9bmV3IFBvLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoZCxwLGgsZil7bGV0IG09bnVsbCE9PWQ/ZC5sZW5ndGg6MCxDPW51bGw7aWYoMCE9PW0pe2lmKEM9bC52YWx1ZSwhMCE9PWZ8fG51bGw9PT1DKXtsZXQgXz1oKzQqbSx5PXAubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHkpLChudWxsPT09Q3x8Qy5sZW5ndGg8XykmJihDPW5ldyBGbG9hdDMyQXJyYXkoXykpO2ZvcihsZXQgST0wLEE9aDtJIT09bTsrK0ksQSs9NClzLmNvcHkoZFtJXSkuYXBwbHlNYXRyaXg0KHksYSkscy5ub3JtYWwudG9BcnJheShDLEEpLENbQSszXT1zLmNvbnN0YW50fWwudmFsdWU9QyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1tLHQubnVtSW50ZXJzZWN0aW9uPTAsQ310aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGQscCxoKXtsZXQgZj0wIT09ZC5sZW5ndGh8fHB8fDAhPT1pfHxyO3JldHVybiByPXAsZT11KGQsaCwwKSxpPWQubGVuZ3RoLGZ9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihkLHAsaCl7bGV0IGY9ZC5jbGlwcGluZ1BsYW5lcyxtPWQuY2xpcEludGVyc2VjdGlvbixDPWQuY2xpcFNoYWRvd3MsXz1uLmdldChkKTtpZighcnx8bnVsbD09PWZ8fDA9PT1mLmxlbmd0aHx8byYmIUMpbz91KG51bGwpOmMoKTtlbHNle2xldCB5PW8/MDppLEk9NCp5LEE9Xy5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9QSxBPXUoZixwLEksaCk7Zm9yKGxldCBPPTA7TyE9PUk7KytPKUFbT109ZVtPXTtfLmNsaXBwaW5nU3RhdGU9QSx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXl9fX1mdW5jdGlvbiBNVWUobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShzLGEpe3JldHVybiAzMDM9PT1hP3MubWFwcGluZz0zMDE6MzA0PT09YSYmKHMubWFwcGluZz0zMDIpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKDMwMz09PWF8fDMwND09PWEpe2lmKHQuaGFzKHMpKXJldHVybiBlKHQuZ2V0KHMpLnRleHR1cmUscy5tYXBwaW5nKTt7bGV0IGw9cy5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgYjIobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixzKSx0LnNldChzLGMpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUscy5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcH19fVV1LnBoeXNpY2FsPXt1bmlmb3Jtczp5cyhbVXUuc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBKZSgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgSmV9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IGFuKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfTt2YXIgSm09Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxvPS4xLHM9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1vLHRoaXMuZmFyPXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsbz1pLXQscz1pK3QsYT1yK2UsbD1yLWU7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtvKz1jKnRoaXMudmlldy5vZmZzZXRYLHM9bytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMobyxzLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07Sm0ucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciB5eT1jbGFzcyBleHRlbmRzIHpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07eXkucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIEh1PU1hdGgucG93KDIsOCksX2xlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSx2bGU9NStfbGUubGVuZ3RoLGFVPW5ldyBKbSx7X2xvZFBsYW5lczp1TSxfc2l6ZUxvZHM6Z2FlLF9zaWdtYXM6WlJ9PVNVZSgpLF9hZT1uZXcgYW4sbFU9bnVsbCxxbT0oMStNYXRoLnNxcnQoNSkpLzIsdHk9MS9xbSx2YWU9W25ldyAkKDEsMSwxKSxuZXcgJCgtMSwxLDEpLG5ldyAkKDEsMSwtMSksbmV3ICQoLTEsMSwtMSksbmV3ICQoMCxxbSx0eSksbmV3ICQoMCxxbSwtdHkpLG5ldyAkKHR5LDAscW0pLG5ldyAkKC10eSwwLHFtKSxuZXcgJChxbSx0eSwwKSxuZXcgJCgtcW0sdHksMCldLHgyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IEZsb2F0MzJBcnJheSgyMCksZT1uZXcgJCgwLDEsMCk7cmV0dXJuIG5ldyB5eSh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOjIwfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSBpbnQgc2FtcGxlcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdO1xuXHRcdFx0dW5pZm9ybSBib29sIGxhdGl0dWRpbmFsO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBkVGhldGE7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1pcEludDtcblx0XHRcdHVuaWZvcm0gdmVjMyBwb2xlQXhpcztcblxuXHRcdFx0I2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0XHQjaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuXG5cdFx0XHR2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHtcblxuXHRcdFx0XHRmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTtcblx0XHRcdFx0Ly8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uXG5cdFx0XHRcdHZlYzMgc2FtcGxlRGlyZWN0aW9uID0gdk91dHB1dERpcmVjdGlvbiAqIGNvc1RoZXRhXG5cdFx0XHRcdFx0KyBjcm9zcyggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogc2luKCB0aGV0YSApXG5cdFx0XHRcdFx0KyBheGlzICogZG90KCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiAoIDEuMCAtIGNvc1RoZXRhICk7XG5cblx0XHRcdFx0cmV0dXJuIGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpcmVjdGlvbiwgbWlwSW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdHZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHtcblxuXHRcdFx0XHRcdGF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7XG5cblx0XHRcdFx0Zm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBpID49IHNhbXBsZXMgKSB7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmxvYXQgdGhldGEgPSBkVGhldGEgKiBmbG9hdCggaSApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCAtMS4wICogdGhldGEsIGF4aXMgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggdGhldGEsIGF4aXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX0oKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIsbyksZT4wJiZ0aGlzLl9ibHVyKG8sMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe251bGw9PT10aGlzLl9jdWJlbWFwU2hhZGVyJiYodGhpcy5fY3ViZW1hcFNoYWRlcj14YWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXtudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fY3ViZW1hcFNoYWRlciYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDx1TS5sZW5ndGg7dCsrKXVNW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQobFUpLHQuc2Npc3NvclRlc3Q9ITEsSlIodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQsZSl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IGk9ZXx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxpKSx0aGlzLl9hcHBseVBNUkVNKGkpLHRoaXMuX2NsZWFudXAoaSksaX1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCBlPXttYWdGaWx0ZXI6YnMsbWluRmlsdGVyOmJzLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOnV5LGZvcm1hdDp6cyxlbmNvZGluZzpEaCxkZXB0aEJ1ZmZlcjohMX0saT15YWUoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsbnVsbD09PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWFlKGUpKSxpfV9jb21waWxlTWF0ZXJpYWwodCl7bGV0IGU9bmV3IHlvKHVNWzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUoZSxhVSl9X3NjZW5lVG9DdWJlVVYodCxlLGkscil7bGV0IGE9bmV3IHhzKDkwLDEsZSxpKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGQ9dS5hdXRvQ2xlYXIscD11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihfYWUpLHUudG9uZU1hcHBpbmc9MCx1LmF1dG9DbGVhcj0hMTtsZXQgaD1uZXcgS20oe25hbWU6IlBNUkVNLkJhY2tncm91bmQiLHNpZGU6MSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGY9bmV3IHlvKG5ldyBabSxoKSxtPSExLEM9dC5iYWNrZ3JvdW5kO0M/Qy5pc0NvbG9yJiYoaC5jb2xvci5jb3B5KEMpLHQuYmFja2dyb3VuZD1udWxsLG09ITApOihoLmNvbG9yLmNvcHkoX2FlKSxtPSEwKTtmb3IobGV0IF89MDtfPDY7XysrKXtsZXQgeT1fJTM7MD09PXk/KGEudXAuc2V0KDAsbFtfXSwwKSxhLmxvb2tBdChjW19dLDAsMCkpOjE9PT15PyhhLnVwLnNldCgwLDAsbFtfXSksYS5sb29rQXQoMCxjW19dLDApKTooYS51cC5zZXQoMCxsW19dLDApLGEubG9va0F0KDAsMCxjW19dKSksSlIocix5Kkh1LF8+Mj9IdTowLEh1LEh1KSx1LnNldFJlbmRlclRhcmdldChyKSxtJiZ1LnJlbmRlcihmLGEpLHUucmVuZGVyKHQsYSl9Zi5nZW9tZXRyeS5kaXNwb3NlKCksZi5tYXRlcmlhbC5kaXNwb3NlKCksdS50b25lTWFwcGluZz1wLHUuYXV0b0NsZWFyPWQsdC5iYWNrZ3JvdW5kPUN9X3RleHR1cmVUb0N1YmVVVih0LGUpe2xldCBpPXRoaXMuX3JlbmRlcmVyLHI9MzAxPT09dC5tYXBwaW5nfHwzMDI9PT10Lm1hcHBpbmc7cj8obnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXhhZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9ITE9PT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxKTpudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSk7bGV0IG89cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLHM9bmV3IHlvKHVNWzBdLG8pLGE9by51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSlIoZSwwLDAsMypIdSwyKkh1KSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihzLGFVKX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8dmxlO3IrKyl7bGV0IG89TWF0aC5zcXJ0KFpSW3JdKlpSW3JdLVpSW3ItMV0qWlJbci0xXSk7dGhpcy5fYmx1cih0LHItMSxyLG8sdmFlWyhyLTEpJXZhZS5sZW5ndGhdKX1lLmF1dG9DbGVhcj1pfV9ibHVyKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxzLGUsaSxyLCJsYXRpdHVkaW5hbCIsbyksdGhpcy5faGFsZkJsdXIocyx0LGksaSxyLCJsb25naXR1ZGluYWwiLG8pfV9oYWxmQmx1cih0LGUsaSxyLG8scyxhKXtsZXQgbD10aGlzLl9yZW5kZXJlcixjPXRoaXMuX2JsdXJNYXRlcmlhbDsibGF0aXR1ZGluYWwiIT09cyYmImxvbmdpdHVkaW5hbCIhPT1zJiZjb25zb2xlLmVycm9yKCJibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhIik7bGV0IGQ9bmV3IHlvKHVNW3JdLGMpLHA9Yy51bmlmb3JtcyxoPWdhZVtpXS0xLGY9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipoKToyKk1hdGguUEkvMzksbT1vL2YsQz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IoMyptKToyMDtDPjIwJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke0N9IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gMjBgKTtsZXQgXz1bXSx5PTA7Zm9yKGxldCBlZT0wO2VlPDIwOysrZWUpe2xldCBYPWVlL20seGU9TWF0aC5leHAoLVgqWC8yKTtfLnB1c2goeGUpLDA9PT1lZT95Kz14ZTplZTxDJiYoeSs9Mip4ZSl9Zm9yKGxldCBlZT0wO2VlPF8ubGVuZ3RoO2VlKyspX1tlZV09X1tlZV0veTtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPUMscC53ZWlnaHRzLnZhbHVlPV8scC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1mLHAubWlwSW50LnZhbHVlPTgtaTtsZXQgST1nYWVbcl07SlIoZSwzKk1hdGgubWF4KDAsSHUtMipJKSwoMD09PXI/MDoyKkh1KSsyKkkqKHI+ND9yLTgrNDowKSwzKkksMipJKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihkLGFVKX19O2Z1bmN0aW9uIFNVZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPTg7Zm9yKGxldCByPTA7cjx2bGU7cisrKXtsZXQgbz1NYXRoLnBvdygyLGkpO3QucHVzaChvKTtsZXQgcz0xL287cj40P3M9X2xlW3ItOCs0LTFdOjA9PT1yJiYocz0wKSxlLnB1c2gocyk7bGV0IGE9MS8oby0xKSxsPS1hLzIsYz0xK2EvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10sZD02LHA9NixoPTMsZj0yLG09MSxDPW5ldyBGbG9hdDMyQXJyYXkoaCpwKmQpLF89bmV3IEZsb2F0MzJBcnJheShmKnAqZCkseT1uZXcgRmxvYXQzMkFycmF5KG0qcCpkKTtmb3IobGV0IEE9MDtBPGQ7QSsrKXtsZXQgTz1BJTMqMi8zLTEsZWU9QT4yPzA6LTE7Qy5zZXQoW08sZWUsMCxPKzIvMyxlZSwwLE8rMi8zLGVlKzEsMCxPLGVlLDAsTysyLzMsZWUrMSwwLE8sZWUrMSwwXSxoKnAqQSksXy5zZXQodSxmKnAqQSkseS5zZXQoW0EsQSxBLEEsQSxBXSxtKnAqQSl9bGV0IEk9bmV3IEtpO0kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKEMsaCkpLEkuc2V0QXR0cmlidXRlKCJ1diIsbmV3IExyKF8sZikpLEkuc2V0QXR0cmlidXRlKCJmYWNlSW5kZXgiLG5ldyBMcih5LG0pKSxuLnB1c2goSSksaT40JiZpLS19cmV0dXJue19sb2RQbGFuZXM6bixfc2l6ZUxvZHM6dCxfc2lnbWFzOmV9fWZ1bmN0aW9uIHlhZShuKXtsZXQgdD1uZXcgdmEoMypIdSwzKkh1LG4pO3JldHVybiB0LnRleHR1cmUubWFwcGluZz0zMDYsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEpSKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBiYWUoKXtsZXQgbj1uZXcgSmUoMSwxKTtyZXR1cm4gbmV3IHl5KHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpufX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuXG5cdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cblx0XHRcdFx0dmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTtcblx0XHRcdFx0dmVjMiB1diA9IGVxdWlyZWN0VXYoIG91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAvIHRleGVsU2l6ZSAtIDAuNSApO1xuXHRcdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0XHR2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCArPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54IC09IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblxuXHRcdFx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdFx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24geGFlKCl7cmV0dXJuIG5ldyB5eSh7bmFtZToiQ3ViZW1hcFRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gVFVlKG4pe2xldCB0PW5ldyBXZWFrTWFwLGU9bnVsbDtmdW5jdGlvbiBvKGEpe2xldCBsPWEudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7dm9pZCAwIT09YyYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2lmKGEmJmEuaXNUZXh0dXJlKXtsZXQgbD1hLm1hcHBpbmcsYz0zMDM9PT1sfHwzMDQ9PT1sLHU9MzAxPT09bHx8MzAyPT09bDtpZihjfHx1KXtpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmITA9PT1hLm5lZWRzUE1SRU1VcGRhdGUpe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgZD10LmdldChhKTtyZXR1cm4gbnVsbD09PWUmJihlPW5ldyB4MihuKSksZD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGQpOmUuZnJvbUN1YmVtYXAoYSxkKSx0LnNldChhLGQpLGQudGV4dHVyZX1pZih0LmhhcyhhKSlyZXR1cm4gdC5nZXQoYSkudGV4dHVyZTt7bGV0IGQ9YS5pbWFnZTtpZihjJiZkJiZkLmhlaWdodD4wfHx1JiZkJiZmdW5jdGlvbihhKXtsZXQgbD0wO2ZvcihsZXQgdT0wO3U8Njt1Kyspdm9pZCAwIT09YVt1XSYmbCsrO3JldHVybiA2PT09bH0oZCkpe251bGw9PT1lJiYoZT1uZXcgeDIobikpO2xldCBwPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEscCksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxwLnRleHR1cmV9cmV0dXJuIG51bGx9fX1yZXR1cm4gYX0sZGlzcG9zZTpmdW5jdGlvbigpe3Q9bmV3IFdlYWtNYXAsbnVsbCE9PWUmJihlLmRpc3Bvc2UoKSxlPW51bGwpfX19ZnVuY3Rpb24gRFVlKG4pe2xldCB0PXt9O2Z1bmN0aW9uIGUoaSl7aWYodm9pZCAwIT09dFtpXSlyZXR1cm4gdFtpXTtsZXQgcjtzd2l0Y2goaSl7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6cj1uLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6cj1uLmdldEV4dGVuc2lvbihpKX1yZXR1cm4gdFtpXT1yLHJ9cmV0dXJue2hhczpmdW5jdGlvbihpKXtyZXR1cm4gbnVsbCE9PWUoaSl9LGluaXQ6ZnVuY3Rpb24oaSl7aS5pc1dlYkdMMj9lKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KGUoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxlKCJPRVNfdGV4dHVyZV9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLGUoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLGUoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxlKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGUoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSksZSgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiksZSgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiksZSgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihpKXtsZXQgcj1lKGkpO3JldHVybiBudWxsPT09ciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2krIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxyfX19ZnVuY3Rpb24gQVVlKG4sdCxlLGkpe2xldCByPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcyhkKXtsZXQgcD1kLnRhcmdldDtudWxsIT09cC5pbmRleCYmdC5yZW1vdmUocC5pbmRleCk7Zm9yKGxldCBmIGluIHAuYXR0cmlidXRlcyl0LnJlbW92ZShwLmF0dHJpYnV0ZXNbZl0pO3AucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZGVsZXRlIHJbcC5pZF07bGV0IGg9by5nZXQocCk7aCYmKHQucmVtb3ZlKGgpLG8uZGVsZXRlKHApKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KHApLCEwPT09cC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiZkZWxldGUgcC5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYyhkKXtsZXQgcD1bXSxoPWQuaW5kZXgsZj1kLmF0dHJpYnV0ZXMucG9zaXRpb24sbT0wO2lmKG51bGwhPT1oKXtsZXQgeT1oLmFycmF5O209aC52ZXJzaW9uO2ZvcihsZXQgST0wLEE9eS5sZW5ndGg7STxBO0krPTMpe2xldCBPPXlbSSswXSxlZT15W0krMV0sWD15W0krMl07cC5wdXNoKE8sZWUsZWUsWCxYLE8pfX1lbHNle209Zi52ZXJzaW9uO2ZvcihsZXQgST0wLEE9Zi5hcnJheS5sZW5ndGgvMy0xO0k8QTtJKz0zKXtsZXQgTz1JKzAsZWU9SSsxLFg9SSsyO3AucHVzaChPLGVlLGVlLFgsWCxPKX19bGV0IEM9bmV3KG1sZShwKT95Mjp2MikocCwxKTtDLnZlcnNpb249bTtsZXQgXz1vLmdldChkKTtfJiZ0LnJlbW92ZShfKSxvLnNldChkLEMpfXJldHVybntnZXQ6ZnVuY3Rpb24oZCxwKXtyZXR1cm4hMD09PXJbcC5pZF18fChwLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHJbcC5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxwfSx1cGRhdGU6ZnVuY3Rpb24oZCl7bGV0IHA9ZC5hdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBwKXQudXBkYXRlKHBbZl0sMzQ5NjIpO2xldCBoPWQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBoKXtsZXQgbT1oW2ZdO2ZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl0LnVwZGF0ZShtW0NdLDM0OTYyKX19LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihkKXtsZXQgcD1vLmdldChkKTtpZihwKXtsZXQgaD1kLmluZGV4O251bGwhPT1oJiZwLnZlcnNpb248aC52ZXJzaW9uJiZjKGQpfWVsc2UgYyhkKTtyZXR1cm4gby5nZXQoZCl9fX1mdW5jdGlvbiBJVWUobix0LGUsaSl7bGV0IG8sYSxsLHI9aS5pc1dlYkdMMjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24ocCl7bz1wfSx0aGlzLnNldEluZGV4PWZ1bmN0aW9uKHApe2E9cC50eXBlLGw9cC5ieXRlc1BlckVsZW1lbnR9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKHAsaCl7bi5kcmF3RWxlbWVudHMobyxoLGEscCpsKSxlLnVwZGF0ZShoLG8sMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKHAsaCxmKXtpZigwPT09ZilyZXR1cm47bGV0IG0sQztpZihyKW09bixDPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYobT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLEM9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixudWxsPT09bSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7bVtDXShvLGgsYSxwKmwsZiksZS51cGRhdGUoaCxvLGYpfX1mdW5jdGlvbiBQVWUobil7bGV0IGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24oKXtlLmZyYW1lKyssZS5jYWxscz0wLGUudHJpYW5nbGVzPTAsZS5wb2ludHM9MCxlLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7c3dpdGNoKGUuY2FsbHMrKyxzKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKG8vMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKG8vMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKG8tMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqbzticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqbzticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixzKX19fX12YXIgSU09Y2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPUlvLHRoaXMubWluRmlsdGVyPUlvLHRoaXMud3JhcFI9WmEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07ZnVuY3Rpb24gUlVlKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBPVWUobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gQ2FlKG4sdCl7bGV0IGU9MSxpPXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT90LmRhdGEuYXJyYXk6dC5hcnJheTtpIGluc3RhbmNlb2YgSW50OEFycmF5P2U9MTI3OmkgaW5zdGFuY2VvZiBJbnQxNkFycmF5P2U9MzI3Njc6aSBpbnN0YW5jZW9mIEludDMyQXJyYXk/ZT0yMTQ3NDgzNjQ3OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMTW9ycGh0YXJnZXRzOiBVbnN1cHBvcnRlZCBtb3JwaCBhdHRyaWJ1dGUgZGF0YSB0eXBlOiAiLGkpLG4uZGl2aWRlU2NhbGFyKGUpfWZ1bmN0aW9uIGtVZShuLHQsZSl7bGV0IGk9e30scj1uZXcgRmxvYXQzMkFycmF5KDgpLG89bmV3IFdlYWtNYXAscz1uZXcgJCxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGMsdSxkLHApe2xldCBoPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKCEwPT09dC5pc1dlYkdMMil7bGV0IGY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLG09by5nZXQodSk7aWYodm9pZCAwPT09bXx8bS5jb3VudCE9PWYpe2xldCBuZT1mdW5jdGlvbigpe3ZlLmRpc3Bvc2UoKSxvLmRlbGV0ZSh1KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX07dm9pZCAwIT09bSYmbS50ZXh0dXJlLmRpc3Bvc2UoKTtsZXQgeT12b2lkIDAhPT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsST11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixBPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbHx8W10sZWU9ITA9PT15PzI6MSxYPXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCplZSx4ZT0xO1g+dC5tYXhUZXh0dXJlU2l6ZSYmKHhlPU1hdGguY2VpbChYL3QubWF4VGV4dHVyZVNpemUpLFg9dC5tYXhUZXh0dXJlU2l6ZSk7bGV0IGZlPW5ldyBGbG9hdDMyQXJyYXkoWCp4ZSo0KmYpLHZlPW5ldyBJTShmZSxYLHhlLGYpO3ZlLmZvcm1hdD16cyx2ZS50eXBlPVltLHZlLm5lZWRzVXBkYXRlPSEwO2xldCBUPTQqZWU7Zm9yKGxldCBsZT0wO2xlPGY7bGUrKyl7bGV0IGhlPUlbbGVdLHllPUFbbGVdLEo9WCp4ZSo0KmxlO2ZvcihsZXQgYWU9MDthZTxoZS5jb3VudDthZSsrKXtzLmZyb21CdWZmZXJBdHRyaWJ1dGUoaGUsYWUpLCEwPT09aGUubm9ybWFsaXplZCYmQ2FlKHMsaGUpO2xldCBtZT1hZSpUO2ZlW0orbWUrMF09cy54LGZlW0orbWUrMV09cy55LGZlW0orbWUrMl09cy56LGZlW0orbWUrM109MCwhMD09PXkmJihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoeWUsYWUpLCEwPT09eWUubm9ybWFsaXplZCYmQ2FlKHMseWUpLGZlW0orbWUrNF09cy54LGZlW0orbWUrNV09cy55LGZlW0orbWUrNl09cy56LGZlW0orbWUrN109MCl9fW09e2NvdW50OmYsdGV4dHVyZTp2ZSxzaXplOm5ldyBKZShYLHhlKX0sby5zZXQodSxtKSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX1sZXQgQz0wO2ZvcihsZXQgeT0wO3k8aC5sZW5ndGg7eSsrKUMrPWhbeV07bGV0IF89dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtQztwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixfKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixoKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZSIsbS50ZXh0dXJlLGUpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZSIsbS5zaXplKX1lbHNle2xldCBmPXZvaWQgMD09PWg/MDpoLmxlbmd0aCxtPWlbdS5pZF07aWYodm9pZCAwPT09bXx8bS5sZW5ndGghPT1mKXttPVtdO2ZvcihsZXQgQT0wO0E8ZjtBKyspbVtBXT1bQSwwXTtpW3UuaWRdPW19Zm9yKGxldCBBPTA7QTxmO0ErKyl7bGV0IE89bVtBXTtPWzBdPUEsT1sxXT1oW0FdfW0uc29ydChPVWUpO2ZvcihsZXQgQT0wO0E8ODtBKyspQTxmJiZtW0FdWzFdPyhhW0FdWzBdPW1bQV1bMF0sYVtBXVsxXT1tW0FdWzFdKTooYVtBXVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixhW0FdWzFdPTApO2Euc29ydChSVWUpO2xldCBDPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLF89dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHk9MDtmb3IobGV0IEE9MDtBPDg7QSsrKXtsZXQgTz1hW0FdLGVlPU9bMF0sWD1PWzFdO2VlIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJlg/KEMmJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkhPT1DW2VlXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitBLENbZWVdKSxfJiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpIT09X1tlZV0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrQSxfW2VlXSkscltBXT1YLHkrPVgpOihDJiYhMD09PXUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSksXyYmITA9PT11Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpLHJbQV09MCl9bGV0IEk9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEteTtwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixJKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19fX1mdW5jdGlvbiBGVWUobix0LGUsaSl7bGV0IHI9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT1jLmluc3RhbmNlQ29sb3ImJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihsKXtsZXQgYz1pLnJlbmRlci5mcmFtZSxkPXQuZ2V0KGwsbC5nZW9tZXRyeSk7cmV0dXJuIHIuZ2V0KGQpIT09YyYmKHQudXBkYXRlKGQpLHIuc2V0KGQsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYoITE9PT1sLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLG51bGwhPT1sLmluc3RhbmNlQ29sb3ImJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGR9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtyPW5ldyBXZWFrTWFwfX19SU0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO3ZhciBDMj1jbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy53cmFwUj1aYSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtDMi5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEPSEwO3ZhciB5bGU9bmV3IGJvLGJsZT1uZXcgSU0seGxlPW5ldyBDMixDbGU9bmV3IF95LHdhZT1bXSxNYWU9W10sU2FlPW5ldyBGbG9hdDMyQXJyYXkoMTYpLEVhZT1uZXcgRmxvYXQzMkFycmF5KDkpLFRhZT1uZXcgRmxvYXQzMkFycmF5KDQpO2Z1bmN0aW9uIER5KG4sdCxlKXtsZXQgaT1uWzBdO2lmKGk8PTB8fGk+MClyZXR1cm4gbjtsZXQgcj10KmUsbz13YWVbcl07aWYodm9pZCAwPT09byYmKG89bmV3IEZsb2F0MzJBcnJheShyKSx3YWVbcl09byksMCE9PXQpe2kudG9BcnJheShvLDApO2ZvcihsZXQgcz0xLGE9MDtzIT09dDsrK3MpYSs9ZSxuW3NdLnRvQXJyYXkobyxhKX1yZXR1cm4gb31mdW5jdGlvbiBqcyhuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHdzKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBXMihuLHQpe2xldCBlPU1hZVt0XTt2b2lkIDA9PT1lJiYoZT1uZXcgSW50MzJBcnJheSh0KSxNYWVbdF09ZSk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKWVbaV09bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIGV9ZnVuY3Rpb24gTlVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIExVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55KSYmKG4udW5pZm9ybTJmKHRoaXMuYWRkcix0LngsdC55KSxlWzBdPXQueCxlWzFdPXQueSk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm0yZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEJVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56KSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LngsdC55LHQueiksZVswXT10LngsZVsxXT10LnksZVsyXT10LnopO2Vsc2UgaWYodm9pZCAwIT09dC5yKShlWzBdIT09dC5yfHxlWzFdIT09dC5nfHxlWzJdIT09dC5iKSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LnIsdC5nLHQuYiksZVswXT10LnIsZVsxXT10LmcsZVsyXT10LmIpO2Vsc2V7aWYoanMoZSx0KSlyZXR1cm47bi51bmlmb3JtM2Z2KHRoaXMuYWRkcix0KSx3cyhlLHQpfX1mdW5jdGlvbiBWVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1RhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxUYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIFVVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO0VhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxFYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIHpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1NhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxTYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIGpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBHVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2pzKGUsdCl8fChuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFdVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksd3MoZSx0KSl9ZnVuY3Rpb24gcVVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtqcyhlLHQpfHwobi51bmlmb3JtNGl2KHRoaXMuYWRkcix0KSx3cyhlLHQpKX1mdW5jdGlvbiBZVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMXVpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIFhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFFVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIEtVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFpVZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHlsZSxyKX1mdW5jdGlvbiBKVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTNEKHR8fHhsZSxyKX1mdW5jdGlvbiAkVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmVDdWJlKHR8fENsZSxyKX1mdW5jdGlvbiBlemUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8YmxlLHIpfWZ1bmN0aW9uIG56ZShuLHQpe24udW5pZm9ybTFmdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaXplKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsMik7bi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiByemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIG96ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDQpO24udW5pZm9ybTRmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gc3plKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsNCk7bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBhemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGx6ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDE2KTtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGN6ZShuLHQpe24udW5pZm9ybTFpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gdXplKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBkemUobix0KXtuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHB6ZShuLHQpe24udW5pZm9ybTRpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaHplKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZnplKG4sdCl7bi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gbXplKG4sdCl7bi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZ3plKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gX3plKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZTJEKHRbb118fHlsZSxyW29dKX1mdW5jdGlvbiB2emUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9VzIoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUzRCh0W29dfHx4bGUscltvXSl9ZnVuY3Rpb24geXplKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZUN1YmUodFtvXXx8Q2xlLHJbb10pfWZ1bmN0aW9uIGJ6ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1XMihlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2V0VGV4dHVyZTJEQXJyYXkodFtvXXx8YmxlLHJbb10pfWZ1bmN0aW9uIEN6ZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBOVWU7Y2FzZSAzNTY2NDpyZXR1cm4gTFVlO2Nhc2UgMzU2NjU6cmV0dXJuIEJVZTtjYXNlIDM1NjY2OnJldHVybiBWVWU7Y2FzZSAzNTY3NDpyZXR1cm4gSFVlO2Nhc2UgMzU2NzU6cmV0dXJuIFVVZTtjYXNlIDM1Njc2OnJldHVybiB6VWU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGpVZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEdVZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIFdVZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHFVZTtjYXNlIDUxMjU6cmV0dXJuIFlVZTtjYXNlIDM2Mjk0OnJldHVybiBYVWU7Y2FzZSAzNjI5NTpyZXR1cm4gUVVlO2Nhc2UgMzYyOTY6cmV0dXJuIEtVZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFpVZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gSlVlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuICRVZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBlemV9fSh0LnR5cGUpfWZ1bmN0aW9uIHdsZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIG56ZTtjYXNlIDM1NjY0OnJldHVybiBpemU7Y2FzZSAzNTY2NTpyZXR1cm4gcnplO2Nhc2UgMzU2NjY6cmV0dXJuIG96ZTtjYXNlIDM1Njc0OnJldHVybiBzemU7Y2FzZSAzNTY3NTpyZXR1cm4gYXplO2Nhc2UgMzU2NzY6cmV0dXJuIGx6ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gY3plO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gdXplO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gZHplO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gcHplO2Nhc2UgNTEyNTpyZXR1cm4gaHplO2Nhc2UgMzYyOTQ6cmV0dXJuIGZ6ZTtjYXNlIDM2Mjk1OnJldHVybiBtemU7Y2FzZSAzNjI5NjpyZXR1cm4gZ3plO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gX3plO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB2emU7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4geXplO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIGJ6ZX19KHQudHlwZSl9ZnVuY3Rpb24gTWxlKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX13bGUucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLHdzKHQsbil9LE1sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLG89aS5sZW5ndGg7ciE9PW87KytyKXtsZXQgcz1pW3JdO3Muc2V0VmFsdWUobix0W3MuaWRdLGUpfX07dmFyIGNVPS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBEYWUobix0KXtuLnNlcS5wdXNoKHQpLG4ubWFwW3QuaWRdPXR9ZnVuY3Rpb24gd3plKG4sdCxlKXtsZXQgaT1uLm5hbWUscj1pLmxlbmd0aDtmb3IoY1UubGFzdEluZGV4PTA7Oyl7bGV0IG89Y1UuZXhlYyhpKSxzPWNVLmxhc3RJbmRleCxhPW9bMV0sYz1vWzNdO2lmKCJdIj09PW9bMl0mJihhfD0wKSx2b2lkIDA9PT1jfHwiWyI9PT1jJiZzKzI9PT1yKXtEYWUoZSx2b2lkIDA9PT1jP25ldyBDemUoYSxuLHQpOm5ldyB3bGUoYSxuLHQpKTticmVha317bGV0IGQ9ZS5tYXBbYV07dm9pZCAwPT09ZCYmKGQ9bmV3IE1sZShhKSxEYWUoZSxkKSksZT1kfX19ZnVuY3Rpb24gVGgobix0KXt0aGlzLnNlcT1bXSx0aGlzLm1hcD17fTtsZXQgZT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcxOCk7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHI9bi5nZXRBY3RpdmVVbmlmb3JtKHQsaSk7d3plKHIsbi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBBYWUobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfVRoLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTt2b2lkIDAhPT1yJiZyLnNldFZhbHVlKG4sZSxpKX0sVGgucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO3ZvaWQgMCE9PWkmJnRoaXMuc2V0VmFsdWUobixlLGkpfSxUaC51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyIT09bzsrK3Ipe2xldCBzPXRbcl0sYT1lW3MuaWRdOyExIT09YS5uZWVkc1VwZGF0ZSYmcy5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fSxUaC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IG89bltpXTtvLmlkIGluIHQmJmUucHVzaChvKX1yZXR1cm4gZX07dmFyIE16ZT0wO2Z1bmN0aW9uIElhZShuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiYiIj09PXI/IiI6ZS50b1VwcGVyQ2FzZSgpKyJcblxuIityKyJcblxuIitmdW5jdGlvbihuKXtsZXQgdD1uLnNwbGl0KCJcbiIpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKCJcbiIpfShuLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24gVHplKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgRGg6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIEZyOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fSh0KTtyZXR1cm4idmVjNCAiK24rIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitlWzBdK2VbMV0rIjsgfSJ9ZnVuY3Rpb24gRHplKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMTplPSJMaW5lYXIiO2JyZWFrO2Nhc2UgMjplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSAzOmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA0OmU9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgNTplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIF9NKG4pe3JldHVybiIiIT09bn1mdW5jdGlvbiBQYWUobix0KXtyZXR1cm4gbi5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLHQubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyx0Lm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csdC5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLHQubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLHQubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csdC5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csdC5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gUmFlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgUnplPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gRVUobil7cmV0dXJuIG4ucmVwbGFjZShSemUsT3plKX1mdW5jdGlvbiBPemUobix0KXtsZXQgZT1iaVt0XTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gRVUoZSl9dmFyIGt6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSBcPSAoXGQrKVw7IGkgPCAoXGQrKVw7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLEZ6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIE9hZShuKXtyZXR1cm4gbi5yZXBsYWNlKEZ6ZSxTbGUpLnJlcGxhY2Uoa3plLE56ZSl9ZnVuY3Rpb24gTnplKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxTbGUoMCx0LGUsaSl9ZnVuY3Rpb24gU2xlKG4sdCxlLGkpe2xldCByPSIiO2ZvcihsZXQgbz1wYXJzZUludCh0KTtvPHBhcnNlSW50KGUpO28rKylyKz1pLnJlcGxhY2UoL1xbXHMqaVxzKlxdL2csIlsgIitvKyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyxvKTtyZXR1cm4gcn1mdW5jdGlvbiBrYWUobil7bGV0IHQ9InByZWNpc2lvbiAiK24ucHJlY2lzaW9uKyIgZmxvYXQ7XG5wcmVjaXNpb24gIituLnByZWNpc2lvbisiIGludDsiO3JldHVybiJoaWdocCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoibWVkaXVtcCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04iOiJsb3dwIj09PW4ucHJlY2lzaW9uJiYodCs9IlxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OIiksdH1mdW5jdGlvbiBVemUobix0LGUsaSl7bGV0IG0sQyxyPW4uZ2V0Q29udGV4dCgpLG89ZS5kZWZpbmVzLHM9ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9ZnVuY3Rpb24obil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gMT09PW4uc2hhZG93TWFwVHlwZT90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT1uLnNoYWRvd01hcFR5cGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOjM9PT1uLnNoYWRvd01hcFR5cGUmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fShlKSxjPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIDMwMTpjYXNlIDMwMjp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gdH0oZSksdT1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX01PREVfUkVGTEVDVElPTiI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSAzMDI6Y2FzZSAzMDc6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiJ9cmV0dXJuIHR9KGUpLGQ9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIDA6dD0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOnQ9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiB0fShlKSxwPWUuaXNXZWJHTDI/IiI6ZnVuY3Rpb24obil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8InBoeXNpY2FsIj09PW4uc2hhZGVySUQ/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihfTSkuam9pbigiXG4iKX0oZSksaD1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTshMSE9PWkmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oIlxuIil9KG8pLGY9ci5jcmVhdGVQcm9ncmFtKCksXz1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rIlxuIjoiIjtlLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KG09W2hdLmZpbHRlcihfTSkuam9pbigiXG4iKSxtLmxlbmd0aD4wJiYobSs9IlxuIiksQz1bcCxoXS5maWx0ZXIoX00pLmpvaW4oIlxuIiksQy5sZW5ndGg+MCYmKEMrPSJcbiIpKToobT1ba2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiYhMT09PWUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIlx0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCJcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIlx0YXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpLEM9W3Asa2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsMCE9PWUudG9uZU1hcHBpbmc/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIiwwIT09ZS50b25lTWFwcGluZz9iaS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1lLnRvbmVNYXBwaW5nP0R6ZSgidG9uZU1hcHBpbmciLGUudG9uZU1hcHBpbmcpOiIiLGUuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsZS5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsYmkuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsVHplKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpKSxzPUVVKHMpLHM9UGFlKHMsZSkscz1SYWUocyxlKSxhPUVVKGEpLGE9UGFlKGEsZSksYT1SYWUoYSxlKSxzPU9hZShzKSxhPU9hZShhKSxlLmlzV2ViR0wyJiYhMCE9PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKF89IiN2ZXJzaW9uIDMwMCBlc1xuIixtPVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIittLEM9WyIjZGVmaW5lIHZhcnlpbmcgaW4iLCIzMDAgZXMiPT09ZS5nbHNsVmVyc2lvbj8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsIjMwMCBlcyI9PT1lLmdsc2xWZXJzaW9uPyIiOiIjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3IiLCIjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qIiwiI2RlZmluZSB0ZXh0dXJlMkRMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJER3JhZEVYVCB0ZXh0dXJlR3JhZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQiXS5qb2luKCJcbiIpKyJcbiIrQyk7bGV0IGVlLFgsST1fK0MrYSxBPUFhZShyLDM1NjMzLF8rbStzKSxPPUFhZShyLDM1NjMyLEkpO2lmKHIuYXR0YWNoU2hhZGVyKGYsQSksci5hdHRhY2hTaGFkZXIoZixPKSx2b2lkIDAhPT1lLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1lLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZiksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IHhlPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZikudHJpbSgpLGZlPXIuZ2V0U2hhZGVySW5mb0xvZyhBKS50cmltKCksdmU9ci5nZXRTaGFkZXJJbmZvTG9nKE8pLnRyaW0oKSxUPSEwLG5lPSEwO2lmKCExPT09ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGYsMzU3MTQpKXtUPSExO2xldCBsZT1JYWUocixBLCJ2ZXJ0ZXgiKSxoZT1JYWUocixPLCJmcmFnbWVudCIpO2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICIrci5nZXRFcnJvcigpKyIgLSBWQUxJREFURV9TVEFUVVMgIityLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNSkrIlxuXG5Qcm9ncmFtIEluZm8gTG9nOiAiK3hlKyJcbiIrbGUrIlxuIitoZSl9ZWxzZSIiIT09eGU/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6Iix4ZSk6KCIiPT09ZmV8fCIiPT09dmUpJiYobmU9ITEpO25lJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6VCxwcm9ncmFtTG9nOnhlLHZlcnRleFNoYWRlcjp7bG9nOmZlLHByZWZpeDptfSxmcmFnbWVudFNoYWRlcjp7bG9nOnZlLHByZWZpeDpDfX0pfXJldHVybiByLmRlbGV0ZVNoYWRlcihBKSxyLmRlbGV0ZVNoYWRlcihPKSx0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWVlJiYoZWU9bmV3IFRoKHIsZikpLGVlfSx0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9ZnVuY3Rpb24obix0KXtsZXQgZT17fSxpPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzIxKTtmb3IobGV0IHI9MDtyPGk7cisrKXtsZXQgbz1uLmdldEFjdGl2ZUF0dHJpYih0LHIpLHM9by5uYW1lLGE9MTszNTY3ND09PW8udHlwZSYmKGE9MiksMzU2NzU9PT1vLnR5cGUmJihhPTMpLDM1Njc2PT09by50eXBlJiYoYT00KSxlW3NdPXt0eXBlOm8udHlwZSxsb2NhdGlvbjpuLmdldEF0dHJpYkxvY2F0aW9uKHQscyksbG9jYXRpb25TaXplOmF9fXJldHVybiBlfShyLGYpKSxYfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksci5kZWxldGVQcm9ncmFtKGYpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1lLnNoYWRlck5hbWUsdGhpcy5pZD1NemUrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09Zix0aGlzLnZlcnRleFNoYWRlcj1BLHRoaXMuZnJhZ21lbnRTaGFkZXI9Tyx0aGlzfXZhciB6emU9MDtmdW5jdGlvbiBqemUobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IF8yLGw9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSkscz10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09cy5oYXMocikmJihzLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PXMuaGFzKG8pJiYocy5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD16emUrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZS5zZXQodCxpKX1yZXR1cm4gZS5nZXQodCl9fSxjPVtdLHU9ci5pc1dlYkdMMixkPXIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixwPXIuZmxvYXRWZXJ0ZXhUZXh0dXJlcyxoPXIubWF4VmVydGV4VW5pZm9ybXMsZj1yLnZlcnRleFRleHR1cmVzLG09ci5wcmVjaXNpb24sQz17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9O3JldHVybntnZXRQYXJhbWV0ZXJzOmZ1bmN0aW9uKFQsbmUsbGUsaGUseWUpe2xldCBGZSx1dCxTdCxndCxKPWhlLmZvZyxtZT0oVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KFQuZW52TWFwfHwoVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2hlLmVudmlyb25tZW50Om51bGwpKSxqZT1DW1QudHlwZV0sTWU9eWUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbihUKXtsZXQgbGU9VC5za2VsZXRvbi5ib25lcztpZihwKXJldHVybiAxMDI0O3tsZXQgeWU9TWF0aC5mbG9vcigoaC0yMCkvNCksSj1NYXRoLm1pbih5ZSxsZS5sZW5ndGgpO3JldHVybiBKPGxlLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitsZS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitKKyIuIiksMCk6Sn19KHllKTowO2lmKG51bGwhPT1ULnByZWNpc2lvbiYmKG09ci5nZXRNYXhQcmVjaXNpb24oVC5wcmVjaXNpb24pLG0hPT1ULnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLFQucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsbSwiaW5zdGVhZC4iKSksamUpe2xldCBDZT1VdVtqZV07RmU9Q2UudmVydGV4U2hhZGVyLHV0PUNlLmZyYWdtZW50U2hhZGVyfWVsc2UgRmU9VC52ZXJ0ZXhTaGFkZXIsdXQ9VC5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShUKSxTdD1sLmdldFZlcnRleFNoYWRlcklEKFQpLGd0PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChUKTtsZXQgUmU9bi5nZXRSZW5kZXJUYXJnZXQoKSxFdD1ULmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmplLHNoYWRlck5hbWU6VC50eXBlLHZlcnRleFNoYWRlcjpGZSxmcmFnbWVudFNoYWRlcjp1dCxkZWZpbmVzOlQuZGVmaW5lcyxjdXN0b21WZXJ0ZXhTaGFkZXJJRDpTdCxjdXN0b21GcmFnbWVudFNoYWRlcklEOmd0LGlzUmF3U2hhZGVyTWF0ZXJpYWw6ITA9PT1ULmlzUmF3U2hhZGVyTWF0ZXJpYWwsZ2xzbFZlcnNpb246VC5nbHNsVmVyc2lvbixwcmVjaXNpb246bSxpbnN0YW5jaW5nOiEwPT09eWUuaXNJbnN0YW5jZWRNZXNoLGluc3RhbmNpbmdDb2xvcjohMD09PXllLmlzSW5zdGFuY2VkTWVzaCYmbnVsbCE9PXllLmluc3RhbmNlQ29sb3Isc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczpmLG91dHB1dEVuY29kaW5nOm51bGw9PT1SZT9uLm91dHB1dEVuY29kaW5nOiEwPT09UmUuaXNYUlJlbmRlclRhcmdldD9SZS50ZXh0dXJlLmVuY29kaW5nOkRoLG1hcDohIVQubWFwLG1hdGNhcDohIVQubWF0Y2FwLGVudk1hcDohIW1lLGVudk1hcE1vZGU6bWUmJm1lLm1hcHBpbmcsZW52TWFwQ3ViZVVWOiEhbWUmJigzMDY9PT1tZS5tYXBwaW5nfHwzMDc9PT1tZS5tYXBwaW5nKSxsaWdodE1hcDohIVQubGlnaHRNYXAsYW9NYXA6ISFULmFvTWFwLGVtaXNzaXZlTWFwOiEhVC5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhVC5idW1wTWFwLG5vcm1hbE1hcDohIVQubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOjE9PT1ULm5vcm1hbE1hcFR5cGUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOjA9PT1ULm5vcm1hbE1hcFR5cGUsZGVjb2RlVmlkZW9UZXh0dXJlOiEhVC5tYXAmJiEwPT09VC5tYXAuaXNWaWRlb1RleHR1cmUmJlQubWFwLmVuY29kaW5nPT09RnIsY2xlYXJjb2F0OkV0LGNsZWFyY29hdE1hcDpFdCYmISFULmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6RXQmJiEhVC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOkV0JiYhIVQuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIVQuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIVQucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIVQubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhVC5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIVQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIVQuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIVQuYWxwaGFNYXAsYWxwaGFUZXN0OlQuYWxwaGFUZXN0PjAsYWxwaGFXcml0ZTpULmFscGhhV3JpdGV8fFQudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISFULmdyYWRpZW50TWFwLHNoZWVuOlQuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEhVC5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEhVC5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246VC50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISFULnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISFULnRoaWNrbmVzc01hcCxjb21iaW5lOlQuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIVQubm9ybWFsTWFwJiYhIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6VC52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOiEwPT09VC52ZXJ0ZXhDb2xvcnMmJiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmND09PXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUsdmVydGV4VXZzOiEhKFQubWFwfHxULmJ1bXBNYXB8fFQubm9ybWFsTWFwfHxULnNwZWN1bGFyTWFwfHxULmFscGhhTWFwfHxULmVtaXNzaXZlTWFwfHxULnJvdWdobmVzc01hcHx8VC5tZXRhbG5lc3NNYXB8fFQuY2xlYXJjb2F0TWFwfHxULmNsZWFyY29hdFJvdWdobmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQuZGlzcGxhY2VtZW50TWFwfHxULnRyYW5zbWlzc2lvbk1hcHx8VC50aGlja25lc3NNYXB8fFQuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fFQuc3BlY3VsYXJDb2xvck1hcHx8VC5zaGVlbkNvbG9yTWFwfHxULnNoZWVuUm91Z2huZXNzTWFwKSx1dnNWZXJ0ZXhPbmx5OiEoVC5tYXB8fFQuYnVtcE1hcHx8VC5ub3JtYWxNYXB8fFQuc3BlY3VsYXJNYXB8fFQuYWxwaGFNYXB8fFQuZW1pc3NpdmVNYXB8fFQucm91Z2huZXNzTWFwfHxULm1ldGFsbmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQudHJhbnNtaXNzaW9uPjB8fFQudHJhbnNtaXNzaW9uTWFwfHxULnRoaWNrbmVzc01hcHx8VC5zcGVjdWxhckludGVuc2l0eU1hcHx8VC5zcGVjdWxhckNvbG9yTWFwfHxULnNoZWVuPjB8fFQuc2hlZW5Db2xvck1hcHx8VC5zaGVlblJvdWdobmVzc01hcHx8IVQuZGlzcGxhY2VtZW50TWFwKSxmb2c6ISFKLHVzZUZvZzpULmZvZyxmb2dFeHAyOkomJkouaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhVC5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246VC5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpkLHNraW5uaW5nOiEwPT09eWUuaXNTa2lubmVkTWVzaCYmTWU+MCxtYXhCb25lczpNZSx1c2VWZXJ0ZXhUZXh0dXJlOnAsbW9ycGhUYXJnZXRzOiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6eWUuZ2VvbWV0cnkmJnllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj95ZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsbnVtRGlyTGlnaHRzOm5lLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpuZS5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpuZS5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpuZS5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpuZS5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6bmUuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOm5lLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOm5lLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOnMubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246cy5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOlQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6bi5zaGFkb3dNYXAuZW5hYmxlZCYmbGUubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTpuLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOlQudG9uZU1hcHBlZD9uLnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6bi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6VC5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6Mj09PVQuc2lkZSxmbGlwU2lkZWQ6MT09PVQuc2lkZSxkZXB0aFBhY2tpbmc6dm9pZCAwIT09VC5kZXB0aFBhY2tpbmcmJlQuZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6VC5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOlQuZXh0ZW5zaW9ucyYmVC5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6VC5leHRlbnNpb25zJiZULmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpULmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uKFQpe2xldCBuZT1bXTtpZihULnNoYWRlcklEP25lLnB1c2goVC5zaGFkZXJJRCk6KG5lLnB1c2goVC5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksbmUucHVzaChULmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSx2b2lkIDAhPT1ULmRlZmluZXMpZm9yKGxldCBsZSBpbiBULmRlZmluZXMpbmUucHVzaChsZSksbmUucHVzaChULmRlZmluZXNbbGVdKTtyZXR1cm4hMT09PVQuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKGZ1bmN0aW9uKFQsbmUpe1QucHVzaChuZS5wcmVjaXNpb24pLFQucHVzaChuZS5vdXRwdXRFbmNvZGluZyksVC5wdXNoKG5lLmVudk1hcE1vZGUpLFQucHVzaChuZS5jb21iaW5lKSxULnB1c2gobmUudmVydGV4VXZzKSxULnB1c2gobmUuZm9nRXhwMiksVC5wdXNoKG5lLnNpemVBdHRlbnVhdGlvbiksVC5wdXNoKG5lLm1heEJvbmVzKSxULnB1c2gobmUubW9ycGhUYXJnZXRzQ291bnQpLFQucHVzaChuZS5udW1EaXJMaWdodHMpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodHMpLFQucHVzaChuZS5udW1IZW1pTGlnaHRzKSxULnB1c2gobmUubnVtUmVjdEFyZWFMaWdodHMpLFQucHVzaChuZS5udW1EaXJMaWdodFNoYWRvd3MpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0U2hhZG93cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodFNoYWRvd3MpLFQucHVzaChuZS5zaGFkb3dNYXBUeXBlKSxULnB1c2gobmUudG9uZU1hcHBpbmcpLFQucHVzaChuZS5udW1DbGlwcGluZ1BsYW5lcyksVC5wdXNoKG5lLm51bUNsaXBJbnRlcnNlY3Rpb24pLFQucHVzaChuZS5hbHBoYVdyaXRlKX0obmUsVCksZnVuY3Rpb24oVCxuZSl7YS5kaXNhYmxlQWxsKCksbmUuaXNXZWJHTDImJmEuZW5hYmxlKDApLG5lLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJmEuZW5hYmxlKDEpLG5lLmluc3RhbmNpbmcmJmEuZW5hYmxlKDIpLG5lLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksbmUubWFwJiZhLmVuYWJsZSg0KSxuZS5tYXRjYXAmJmEuZW5hYmxlKDUpLG5lLmVudk1hcCYmYS5lbmFibGUoNiksbmUuZW52TWFwQ3ViZVVWJiZhLmVuYWJsZSg3KSxuZS5saWdodE1hcCYmYS5lbmFibGUoOCksbmUuYW9NYXAmJmEuZW5hYmxlKDkpLG5lLmVtaXNzaXZlTWFwJiZhLmVuYWJsZSgxMCksbmUuYnVtcE1hcCYmYS5lbmFibGUoMTEpLG5lLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLG5lLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxMyksbmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxNCksbmUuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksbmUuY2xlYXJjb2F0TWFwJiZhLmVuYWJsZSgxNiksbmUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZhLmVuYWJsZSgxNyksbmUuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksbmUuZGlzcGxhY2VtZW50TWFwJiZhLmVuYWJsZSgxOSksbmUuc3BlY3VsYXJNYXAmJmEuZW5hYmxlKDIwKSxuZS5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxuZS5tZXRhbG5lc3NNYXAmJmEuZW5hYmxlKDIyKSxuZS5ncmFkaWVudE1hcCYmYS5lbmFibGUoMjMpLG5lLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksbmUuYWxwaGFUZXN0JiZhLmVuYWJsZSgyNSksbmUudmVydGV4Q29sb3JzJiZhLmVuYWJsZSgyNiksbmUudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksbmUudmVydGV4VXZzJiZhLmVuYWJsZSgyOCksbmUudmVydGV4VGFuZ2VudHMmJmEuZW5hYmxlKDI5KSxuZS51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksbmUuZm9nJiZhLmVuYWJsZSgzMSksVC5wdXNoKGEubWFzayksYS5kaXNhYmxlQWxsKCksbmUudXNlRm9nJiZhLmVuYWJsZSgwKSxuZS5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksbmUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5lbmFibGUoMiksbmUuc2tpbm5pbmcmJmEuZW5hYmxlKDMpLG5lLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLG5lLm1vcnBoVGFyZ2V0cyYmYS5lbmFibGUoNSksbmUubW9ycGhOb3JtYWxzJiZhLmVuYWJsZSg2KSxuZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLG5lLnNoYWRvd01hcEVuYWJsZWQmJmEuZW5hYmxlKDgpLG5lLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzJiZhLmVuYWJsZSg5KSxuZS5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLG5lLmZsaXBTaWRlZCYmYS5lbmFibGUoMTEpLG5lLmRlcHRoUGFja2luZyYmYS5lbmFibGUoMTIpLG5lLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLG5lLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZhLmVuYWJsZSgxNCksbmUuc3BlY3VsYXJDb2xvck1hcCYmYS5lbmFibGUoMTUpLG5lLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLG5lLnRyYW5zbWlzc2lvbk1hcCYmYS5lbmFibGUoMTcpLG5lLnRoaWNrbmVzc01hcCYmYS5lbmFibGUoMTgpLG5lLnNoZWVuJiZhLmVuYWJsZSgxOSksbmUuc2hlZW5Db2xvck1hcCYmYS5lbmFibGUoMjApLG5lLnNoZWVuUm91Z2huZXNzTWFwJiZhLmVuYWJsZSgyMSksbmUuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMiksVC5wdXNoKGEubWFzayl9KG5lLFQpLG5lLnB1c2gobi5vdXRwdXRFbmNvZGluZykpLG5lLnB1c2goVC5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLG5lLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24oVCl7bGV0IGxlLG5lPUNbVC50eXBlXTtyZXR1cm4gbGU9bmU/VTVlLmNsb25lKFV1W25lXS51bmlmb3Jtcyk6VC51bmlmb3JtcyxsZX0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24oVCxuZSl7bGV0IGxlO2ZvcihsZXQgaGU9MCx5ZT1jLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1jW2hlXTtpZihKLmNhY2hlS2V5PT09bmUpe2xlPUosKytsZS51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1sZSYmKGxlPW5ldyBVemUobixuZSxULG8pLGMucHVzaChsZSkpLGxlfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbihUKXtpZigwPT0tLVQudXNlZFRpbWVzKXtsZXQgbmU9Yy5pbmRleE9mKFQpO2NbbmVdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxULmRlc3Ryb3koKX19LHJlbGVhc2VTaGFkZXJDYWNoZTpmdW5jdGlvbihUKXtsLnJlbW92ZShUKX0scHJvZ3JhbXM6YyxkaXNwb3NlOmZ1bmN0aW9uKCl7bC5kaXNwb3NlKCl9fX1mdW5jdGlvbiBHemUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8pe2xldCBzPW4uZ2V0KG8pO3JldHVybiB2b2lkIDA9PT1zJiYocz17fSxuLnNldChvLHMpKSxzfSxyZW1vdmU6ZnVuY3Rpb24obyl7bi5kZWxldGUobyl9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7bi5nZXQobylbc109YX0sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBXemUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ubWF0ZXJpYWwuaWQhPT10Lm1hdGVyaWFsLmlkP24ubWF0ZXJpYWwuaWQtdC5tYXRlcmlhbC5pZDpuLnohPT10Lno/bi56LXQuejpuLmlkLXQuaWR9ZnVuY3Rpb24gRmFlKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLnohPT10Lno/dC56LW4uejpuLmlkLXQuaWR9ZnVuY3Rpb24gTmFlKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoZCxwLGgsZixtLEMpe2xldCBfPW5bdF07cmV0dXJuIHZvaWQgMD09PV8/KF89e2lkOmQuaWQsb2JqZWN0OmQsZ2VvbWV0cnk6cCxtYXRlcmlhbDpoLGdyb3VwT3JkZXI6ZixyZW5kZXJPcmRlcjpkLnJlbmRlck9yZGVyLHo6bSxncm91cDpDfSxuW3RdPV8pOihfLmlkPWQuaWQsXy5vYmplY3Q9ZCxfLmdlb21ldHJ5PXAsXy5tYXRlcmlhbD1oLF8uZ3JvdXBPcmRlcj1mLF8ucmVuZGVyT3JkZXI9ZC5yZW5kZXJPcmRlcixfLno9bSxfLmdyb3VwPUMpLHQrKyxffXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6ZnVuY3Rpb24oKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24oZCxwLGgsZixtLEMpe2xldCBfPXMoZCxwLGgsZixtLEMpO2gudHJhbnNtaXNzaW9uPjA/aS5wdXNoKF8pOiEwPT09aC50cmFuc3BhcmVudD9yLnB1c2goXyk6ZS5wdXNoKF8pfSx1bnNoaWZ0OmZ1bmN0aW9uKGQscCxoLGYsbSxDKXtsZXQgXz1zKGQscCxoLGYsbSxDKTtoLnRyYW5zbWlzc2lvbj4wP2kudW5zaGlmdChfKTohMD09PWgudHJhbnNwYXJlbnQ/ci51bnNoaWZ0KF8pOmUudW5zaGlmdChfKX0sZmluaXNoOmZ1bmN0aW9uKCl7Zm9yKGxldCBkPXQscD1uLmxlbmd0aDtkPHA7ZCsrKXtsZXQgaD1uW2RdO2lmKG51bGw9PT1oLmlkKWJyZWFrO2guaWQ9bnVsbCxoLm9iamVjdD1udWxsLGguZ2VvbWV0cnk9bnVsbCxoLm1hdGVyaWFsPW51bGwsaC5ncm91cD1udWxsfX0sc29ydDpmdW5jdGlvbihkLHApe2UubGVuZ3RoPjEmJmUuc29ydChkfHxXemUpLGkubGVuZ3RoPjEmJmkuc29ydChwfHxGYWUpLHIubGVuZ3RoPjEmJnIuc29ydChwfHxGYWUpfX19ZnVuY3Rpb24gcXplKCl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihpLHIpe2xldCBvO3JldHVybiExPT09bi5oYXMoaSk/KG89bmV3IE5hZSxuLnNldChpLFtvXSkpOnI+PW4uZ2V0KGkpLmxlbmd0aD8obz1uZXcgTmFlLG4uZ2V0KGkpLnB1c2gobykpOm89bi5nZXQoaSlbcl0sb30sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBZemUoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3ICQsY29sb3I6bmV3IGFufTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsZGlyZWN0aW9uOm5ldyAkLGNvbG9yOm5ldyBhbixkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsY29sb3I6bmV3IGFuLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgJCxza3lDb2xvcjpuZXcgYW4sZ3JvdW5kQ29sb3I6bmV3IGFufTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBhbixwb3NpdGlvbjpuZXcgJCxoYWxmV2lkdGg6bmV3ICQsaGFsZkhlaWdodDpuZXcgJH19cmV0dXJuIG5bdC5pZF09ZSxlfX19dmFyIFF6ZT0wO2Z1bmN0aW9uIEt6ZShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gWnplKG4sdCl7bGV0IGU9bmV3IFl6ZSxpPWZ1bmN0aW9uKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgSmV9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBKZSxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIG5bdC5pZF09ZSxlfX19KCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgJCk7bGV0IG89bmV3ICQscz1uZXcgTW4sYT1uZXcgTW47cmV0dXJue3NldHVwOmZ1bmN0aW9uKHUsZCl7bGV0IHA9MCxoPTAsZj0wO2ZvcihsZXQgZmU9MDtmZTw5O2ZlKyspci5wcm9iZVtmZV0uc2V0KDAsMCwwKTtsZXQgbT0wLEM9MCxfPTAseT0wLEk9MCxBPTAsTz0wLGVlPTA7dS5zb3J0KEt6ZSk7bGV0IFg9ITAhPT1kP01hdGguUEk6MTtmb3IobGV0IGZlPTAsdmU9dS5sZW5ndGg7ZmU8dmU7ZmUrKyl7bGV0IFQ9dVtmZV0sbmU9VC5jb2xvcixsZT1ULmludGVuc2l0eSxoZT1ULmRpc3RhbmNlLHllPVQuc2hhZG93JiZULnNoYWRvdy5tYXA/VC5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihULmlzQW1iaWVudExpZ2h0KXArPW5lLnIqbGUqWCxoKz1uZS5nKmxlKlgsZis9bmUuYipsZSpYO2Vsc2UgaWYoVC5pc0xpZ2h0UHJvYmUpZm9yKGxldCBKPTA7Sjw5O0orKylyLnByb2JlW0pdLmFkZFNjYWxlZFZlY3RvcihULnNoLmNvZWZmaWNpZW50c1tKXSxsZSk7ZWxzZSBpZihULmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5jb2xvci5jb3B5KFQuY29sb3IpLm11bHRpcGx5U2NhbGFyKFQuaW50ZW5zaXR5KlgpLFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1ttXT1tZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW21dPXllLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbbV09VC5zaGFkb3cubWF0cml4LEErK31yLmRpcmVjdGlvbmFsW21dPUosbSsrfWVsc2UgaWYoVC5pc1Nwb3RMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksSi5jb2xvci5jb3B5KG5lKS5tdWx0aXBseVNjYWxhcihsZSpYKSxKLmRpc3RhbmNlPWhlLEouY29uZUNvcz1NYXRoLmNvcyhULmFuZ2xlKSxKLnBlbnVtYnJhQ29zPU1hdGguY29zKFQuYW5nbGUqKDEtVC5wZW51bWJyYSkpLEouZGVjYXk9VC5kZWNheSxULmNhc3RTaGFkb3cpe2xldCBhZT1ULnNoYWRvdyxtZT1pLmdldChUKTttZS5zaGFkb3dCaWFzPWFlLmJpYXMsbWUuc2hhZG93Tm9ybWFsQmlhcz1hZS5ub3JtYWxCaWFzLG1lLnNoYWRvd1JhZGl1cz1hZS5yYWRpdXMsbWUuc2hhZG93TWFwU2l6ZT1hZS5tYXBTaXplLHIuc3BvdFNoYWRvd1tfXT1tZSxyLnNwb3RTaGFkb3dNYXBbX109eWUsci5zcG90U2hhZG93TWF0cml4W19dPVQuc2hhZG93Lm1hdHJpeCxlZSsrfXIuc3BvdFtfXT1KLF8rK31lbHNlIGlmKFQuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLmNvbG9yLmNvcHkobmUpLm11bHRpcGx5U2NhbGFyKGxlKSxKLmhhbGZXaWR0aC5zZXQoLjUqVC53aWR0aCwwLDApLEouaGFsZkhlaWdodC5zZXQoMCwuNSpULmhlaWdodCwwKSxyLnJlY3RBcmVhW3ldPUoseSsrfWVsc2UgaWYoVC5pc1BvaW50TGlnaHQpe2xldCBKPWUuZ2V0KFQpO2lmKEouY29sb3IuY29weShULmNvbG9yKS5tdWx0aXBseVNjYWxhcihULmludGVuc2l0eSpYKSxKLmRpc3RhbmNlPVQuZGlzdGFuY2UsSi5kZWNheT1ULmRlY2F5LFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsbWUuc2hhZG93Q2FtZXJhTmVhcj1hZS5jYW1lcmEubmVhcixtZS5zaGFkb3dDYW1lcmFGYXI9YWUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W0NdPW1lLHIucG9pbnRTaGFkb3dNYXBbQ109eWUsci5wb2ludFNoYWRvd01hdHJpeFtDXT1ULnNoYWRvdy5tYXRyaXgsTysrfXIucG9pbnRbQ109SixDKyt9ZWxzZSBpZihULmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLnNreUNvbG9yLmNvcHkoVC5jb2xvcikubXVsdGlwbHlTY2FsYXIobGUqWCksSi5ncm91bmRDb2xvci5jb3B5KFQuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKGxlKlgpLHIuaGVtaVtJXT1KLEkrK319eT4wJiYodC5pc1dlYkdMMnx8ITA9PT1uLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPVB0LkxUQ19GTE9BVF8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19GTE9BVF8yKTohMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPyhyLnJlY3RBcmVhTFRDMT1QdC5MVENfSEFMRl8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxyLmFtYmllbnRbMF09cCxyLmFtYmllbnRbMV09aCxyLmFtYmllbnRbMl09ZjtsZXQgeGU9ci5oYXNoOyh4ZS5kaXJlY3Rpb25hbExlbmd0aCE9PW18fHhlLnBvaW50TGVuZ3RoIT09Q3x8eGUuc3BvdExlbmd0aCE9PV98fHhlLnJlY3RBcmVhTGVuZ3RoIT09eXx8eGUuaGVtaUxlbmd0aCE9PUl8fHhlLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PUF8fHhlLm51bVBvaW50U2hhZG93cyE9PU98fHhlLm51bVNwb3RTaGFkb3dzIT09ZWUpJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9bSxyLnNwb3QubGVuZ3RoPV8sci5yZWN0QXJlYS5sZW5ndGg9eSxyLnBvaW50Lmxlbmd0aD1DLHIuaGVtaS5sZW5ndGg9SSxyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1BLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPUEsci5wb2ludFNoYWRvdy5sZW5ndGg9TyxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1PLHIuc3BvdFNoYWRvdy5sZW5ndGg9ZWUsci5zcG90U2hhZG93TWFwLmxlbmd0aD1lZSxyLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1BLHIucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPU8sci5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1lZSx4ZS5kaXJlY3Rpb25hbExlbmd0aD1tLHhlLnBvaW50TGVuZ3RoPUMseGUuc3BvdExlbmd0aD1fLHhlLnJlY3RBcmVhTGVuZ3RoPXkseGUuaGVtaUxlbmd0aD1JLHhlLm51bURpcmVjdGlvbmFsU2hhZG93cz1BLHhlLm51bVBvaW50U2hhZG93cz1PLHhlLm51bVNwb3RTaGFkb3dzPWVlLHIudmVyc2lvbj1RemUrKyl9LHNldHVwVmlldzpmdW5jdGlvbih1LGQpe2xldCBwPTAsaD0wLGY9MCxtPTAsQz0wLF89ZC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB5PTAsST11Lmxlbmd0aDt5PEk7eSsrKXtsZXQgQT11W3ldO2lmKEEuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTz1yLmRpcmVjdGlvbmFsW3BdO08uZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLnRhcmdldC5tYXRyaXhXb3JsZCksTy5kaXJlY3Rpb24uc3ViKG8pLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxwKyt9ZWxzZSBpZihBLmlzU3BvdExpZ2h0KXtsZXQgTz1yLnNwb3RbZl07Ty5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksTy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoXyksTy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmRpcmVjdGlvbi5zdWIobyksTy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKF8pLGYrK31lbHNlIGlmKEEuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgTz1yLnJlY3RBcmVhW21dO08ucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8ucG9zaXRpb24uYXBwbHlNYXRyaXg0KF8pLGEuaWRlbnRpdHkoKSxzLmNvcHkoQS5tYXRyaXhXb3JsZCkscy5wcmVtdWx0aXBseShfKSxhLmV4dHJhY3RSb3RhdGlvbihzKSxPLmhhbGZXaWR0aC5zZXQoLjUqQS53aWR0aCwwLDApLE8uaGFsZkhlaWdodC5zZXQoMCwuNSpBLmhlaWdodCwwKSxPLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksTy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSxtKyt9ZWxzZSBpZihBLmlzUG9pbnRMaWdodCl7bGV0IE89ci5wb2ludFtoXTtPLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxPLnBvc2l0aW9uLmFwcGx5TWF0cml4NChfKSxoKyt9ZWxzZSBpZihBLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgTz1yLmhlbWlbQ107Ty5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxPLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxDKyt9fX0sc3RhdGU6cn19ZnVuY3Rpb24gTGFlKG4sdCl7bGV0IGU9bmV3IFp6ZShuLHQpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbigpe2kubGVuZ3RoPTAsci5sZW5ndGg9MH0sc3RhdGU6e2xpZ2h0c0FycmF5Omksc2hhZG93c0FycmF5OnIsbGlnaHRzOmV9LHNldHVwTGlnaHRzOmZ1bmN0aW9uKGQpe2Uuc2V0dXAoaSxkKX0sc2V0dXBMaWdodHNWaWV3OmZ1bmN0aW9uKGQpe2Uuc2V0dXBWaWV3KGksZCl9LHB1c2hMaWdodDpmdW5jdGlvbihkKXtpLnB1c2goZCl9LHB1c2hTaGFkb3c6ZnVuY3Rpb24oZCl7ci5wdXNoKGQpfX19ZnVuY3Rpb24gSnplKG4sdCl7bGV0IGU9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihvLHM9MCl7bGV0IGE7cmV0dXJuITE9PT1lLmhhcyhvKT8oYT1uZXcgTGFlKG4sdCksZS5zZXQobyxbYV0pKTpzPj1lLmdldChvKS5sZW5ndGg/KGE9bmV3IExhZShuLHQpLGUuZ2V0KG8pLnB1c2goYSkpOmE9ZS5nZXQobylbc10sYX0sZGlzcG9zZTpmdW5jdGlvbigpe2U9bmV3IFdlYWtNYXB9fX12YXIgdzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPTMyMDAsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVwdGhQYWNraW5nPXQuZGVwdGhQYWNraW5nLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfX07dzIucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7dmFyIE0yPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEaXN0YW5jZU1hdGVyaWFsIix0aGlzLnJlZmVyZW5jZVBvc2l0aW9uPW5ldyAkLHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX07ZnVuY3Rpb24gRWxlKG4sdCxlKXtsZXQgaT1uZXcgdnkscj1uZXcgSmUsbz1uZXcgSmUscz1uZXcgdHIsYT1uZXcgdzIoe2RlcHRoUGFja2luZzozMjAxfSksbD1uZXcgTTIsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsZD17MDoxLDE6MCwyOjJ9LHA9bmV3IHpkKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBKZX0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6InVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG51bmlmb3JtIGZsb2F0IHJhZGl1cztcbiNpbmNsdWRlIDxwYWNraW5nPlxudm9pZCBtYWluKCkge1xuXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xuXHRmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDtcblx0Zm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7XG5cdFx0ZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlO1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGVwdGg7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcblx0XHQjZW5kaWZcblx0fVxuXHRtZWFuID0gbWVhbiAvIHNhbXBsZXM7XG5cdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7XG5cdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xufSJ9KSxoPXAuY2xvbmUoKTtoLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGY9bmV3IEtpO2Yuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgbT1uZXcgeW8oZixwKSxDPXRoaXM7ZnVuY3Rpb24gXyhBLE8pe2xldCBlZT10LnVwZGF0ZShtKTtwLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1BLmJsdXJTYW1wbGVzJiYocC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMsaC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMscC5uZWVkc1VwZGF0ZT0hMCxoLm5lZWRzVXBkYXRlPSEwKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUEubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcFBhc3MpLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChPLG51bGwsZWUscCxtLG51bGwpLGgudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9QS5tYXBQYXNzLnRleHR1cmUsaC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxoLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KE8sbnVsbCxlZSxoLG0sbnVsbCl9ZnVuY3Rpb24geShBLE8sZWUsWCx4ZSxmZSx2ZSl7bGV0IFQ9bnVsbCxuZT0hMD09PVguaXNQb2ludExpZ2h0P0EuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpBLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoVD12b2lkIDAhPT1uZT9uZTohMD09PVguaXNQb2ludExpZ2h0P2w6YSxuLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PWVlLmNsaXBTaGFkb3dzJiYwIT09ZWUuY2xpcHBpbmdQbGFuZXMubGVuZ3RofHxlZS5kaXNwbGFjZW1lbnRNYXAmJjAhPT1lZS5kaXNwbGFjZW1lbnRTY2FsZXx8ZWUuYWxwaGFNYXAmJmVlLmFscGhhVGVzdD4wKXtsZXQgbGU9VC51dWlkLGhlPWVlLnV1aWQseWU9Y1tsZV07dm9pZCAwPT09eWUmJih5ZT17fSxjW2xlXT15ZSk7bGV0IEo9eWVbaGVdO3ZvaWQgMD09PUomJihKPVQuY2xvbmUoKSx5ZVtoZV09SiksVD1KfXJldHVybiBULnZpc2libGU9ZWUudmlzaWJsZSxULndpcmVmcmFtZT1lZS53aXJlZnJhbWUsVC5zaWRlPTM9PT12ZT9udWxsIT09ZWUuc2hhZG93U2lkZT9lZS5zaGFkb3dTaWRlOmVlLnNpZGU6bnVsbCE9PWVlLnNoYWRvd1NpZGU/ZWUuc2hhZG93U2lkZTpkW2VlLnNpZGVdLFQuYWxwaGFNYXA9ZWUuYWxwaGFNYXAsVC5hbHBoYVRlc3Q9ZWUuYWxwaGFUZXN0LFQuY2xpcFNoYWRvd3M9ZWUuY2xpcFNoYWRvd3MsVC5jbGlwcGluZ1BsYW5lcz1lZS5jbGlwcGluZ1BsYW5lcyxULmNsaXBJbnRlcnNlY3Rpb249ZWUuY2xpcEludGVyc2VjdGlvbixULmRpc3BsYWNlbWVudE1hcD1lZS5kaXNwbGFjZW1lbnRNYXAsVC5kaXNwbGFjZW1lbnRTY2FsZT1lZS5kaXNwbGFjZW1lbnRTY2FsZSxULmRpc3BsYWNlbWVudEJpYXM9ZWUuZGlzcGxhY2VtZW50QmlhcyxULndpcmVmcmFtZUxpbmV3aWR0aD1lZS53aXJlZnJhbWVMaW5ld2lkdGgsVC5saW5ld2lkdGg9ZWUubGluZXdpZHRoLCEwPT09WC5pc1BvaW50TGlnaHQmJiEwPT09VC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoVC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oWC5tYXRyaXhXb3JsZCksVC5uZWFyRGlzdGFuY2U9eGUsVC5mYXJEaXN0YW5jZT1mZSksVH1mdW5jdGlvbiBJKEEsTyxlZSxYLHhlKXtpZighMT09PUEudmlzaWJsZSlyZXR1cm47aWYoQS5sYXllcnMudGVzdChPLmxheWVycykmJihBLmlzTWVzaHx8QS5pc0xpbmV8fEEuaXNQb2ludHMpJiYoQS5jYXN0U2hhZG93fHxBLnJlY2VpdmVTaGFkb3cmJjM9PT14ZSkmJighQS5mcnVzdHVtQ3VsbGVkfHxpLmludGVyc2VjdHNPYmplY3QoQSkpKXtBLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGVlLm1hdHJpeFdvcmxkSW52ZXJzZSxBLm1hdHJpeFdvcmxkKTtsZXQgVD10LnVwZGF0ZShBKSxuZT1BLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobmUpKXtsZXQgbGU9VC5ncm91cHM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1sZVtoZV0sYWU9bmVbSi5tYXRlcmlhbEluZGV4XTtpZihhZSYmYWUudmlzaWJsZSl7bGV0IG1lPXkoQSwwLGFlLFgsZWUubmVhcixlZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KGVlLG51bGwsVCxtZSxBLEopfX19ZWxzZSBpZihuZS52aXNpYmxlKXtsZXQgbGU9eShBLDAsbmUsWCxlZS5uZWFyLGVlLmZhcix4ZSk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoZWUsbnVsbCxULGxlLEEsbnVsbCl9fWxldCB2ZT1BLmNoaWxkcmVuO2ZvcihsZXQgVD0wLG5lPXZlLmxlbmd0aDtUPG5lO1QrKylJKHZlW1RdLE8sZWUsWCx4ZSl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT0xLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEEsTyxlZSl7aWYoITE9PT1DLmVuYWJsZWR8fCExPT09Qy5hdXRvVXBkYXRlJiYhMT09PUMubmVlZHNVcGRhdGV8fDA9PT1BLmxlbmd0aClyZXR1cm47bGV0IFg9bi5nZXRSZW5kZXJUYXJnZXQoKSx4ZT1uLmdldEFjdGl2ZUN1YmVGYWNlKCksZmU9bi5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLHZlPW4uc3RhdGU7dmUuc2V0QmxlbmRpbmcoMCksdmUuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSx2ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLHZlLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IFQ9MCxuZT1BLmxlbmd0aDtUPG5lO1QrKyl7bGV0IGxlPUFbVF0saGU9bGUuc2hhZG93O2lmKHZvaWQgMD09PWhlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsbGUsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oZS5hdXRvVXBkYXRlJiYhMT09PWhlLm5lZWRzVXBkYXRlKWNvbnRpbnVlO3IuY29weShoZS5tYXBTaXplKTtsZXQgeWU9aGUuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseSh5ZSksby5jb3B5KGhlLm1hcFNpemUpLChyLng+dXx8ci55PnUpJiYoci54PnUmJihvLng9TWF0aC5mbG9vcih1L3llLngpLHIueD1vLngqeWUueCxoZS5tYXBTaXplLng9by54KSxyLnk+dSYmKG8ueT1NYXRoLmZsb29yKHUveWUueSksci55PW8ueSp5ZS55LGhlLm1hcFNpemUueT1vLnkpKSxudWxsPT09aGUubWFwJiYhaGUuaXNQb2ludExpZ2h0U2hhZG93JiYzPT09dGhpcy50eXBlKXtsZXQgYWU9e21pbkZpbHRlcjpicyxtYWdGaWx0ZXI6YnMsZm9ybWF0OnpzfTtoZS5tYXA9bmV3IHZhKHIueCxyLnksYWUpLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUubWFwUGFzcz1uZXcgdmEoci54LHIueSxhZSksaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1udWxsPT09aGUubWFwJiYoaGUubWFwPW5ldyB2YShyLngsci55LHttaW5GaWx0ZXI6SW8sbWFnRmlsdGVyOklvLGZvcm1hdDp6c30pLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksbi5zZXRSZW5kZXJUYXJnZXQoaGUubWFwKSxuLmNsZWFyKCk7bGV0IEo9aGUuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgYWU9MDthZTxKO2FlKyspe2xldCBtZT1oZS5nZXRWaWV3cG9ydChhZSk7cy5zZXQoby54Km1lLngsby55Km1lLnksby54Km1lLnosby55Km1lLncpLHZlLnZpZXdwb3J0KHMpLGhlLnVwZGF0ZU1hdHJpY2VzKGxlLGFlKSxpPWhlLmdldEZydXN0dW0oKSxJKE8sZWUsaGUuY2FtZXJhLGxlLHRoaXMudHlwZSl9IWhlLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSYmXyhoZSxlZSksaGUubmVlZHNVcGRhdGU9ITF9Qy5uZWVkc1VwZGF0ZT0hMSxuLnNldFJlbmRlclRhcmdldChYLHhlLGZlKX19ZnVuY3Rpb24gdDhlKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyLGE9bmV3IGZ1bmN0aW9uKCl7bGV0IHVlPSExLEp0PW5ldyB0cixVdD1udWxsLFRuPW5ldyB0cigwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihHZSl7VXQhPT1HZSYmIXVlJiYobi5jb2xvck1hc2soR2UsR2UsR2UsR2UpLFV0PUdlKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2UsQ24sbWksbXIsb3MpeyEwPT09b3MmJihHZSo9bXIsQ24qPW1yLG1pKj1tciksSnQuc2V0KEdlLENuLG1pLG1yKSwhMT09PVRuLmVxdWFscyhKdCkmJihuLmNsZWFyQ29sb3IoR2UsQ24sbWksbXIpLFRuLmNvcHkoSnQpKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxVdD1udWxsLFRuLnNldCgtMSwwLDAsMCl9fX0sbD1uZXcgZnVuY3Rpb24oKXtsZXQgdWU9ITEsSnQ9bnVsbCxVdD1udWxsLFRuPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oR2Upe0dlP1JlKDI5MjkpOkFuKDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKEdlKXtKdCE9PUdlJiYhdWUmJihuLmRlcHRoTWFzayhHZSksSnQ9R2UpfSxzZXRGdW5jOmZ1bmN0aW9uKEdlKXtpZihVdCE9PUdlKXtpZihHZSlzd2l0Y2goR2Upe2Nhc2UgMDpuLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgMTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgMjpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgMzpkZWZhdWx0Om4uZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSA0Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSA1Om4uZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSA2Om4uZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSA3Om4uZGVwdGhGdW5jKDUxNyl9ZWxzZSBuLmRlcHRoRnVuYyg1MTUpO1V0PUdlfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2Upe1RuIT09R2UmJihuLmNsZWFyRGVwdGgoR2UpLFRuPUdlKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbH19fSxjPW5ldyBmdW5jdGlvbigpe2xldCB1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oVHIpe3VlfHwoVHI/UmUoMjk2MCk6QW4oMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKFRyKXtKdCE9PVRyJiYhdWUmJihuLnN0ZW5jaWxNYXNrKFRyKSxKdD1Ucil9LHNldEZ1bmM6ZnVuY3Rpb24oVHIsZWwsV3MpeyhVdCE9PVRyfHxUbiE9PWVsfHxHZSE9PVdzKSYmKG4uc3RlbmNpbEZ1bmMoVHIsZWwsV3MpLFV0PVRyLFRuPWVsLEdlPVdzKX0sc2V0T3A6ZnVuY3Rpb24oVHIsZWwsV3MpeyhDbiE9PVRyfHxtaSE9PWVsfHxtciE9PVdzKSYmKG4uc3RlbmNpbE9wKFRyLGVsLFdzKSxDbj1UcixtaT1lbCxtcj1Xcyl9LHNldExvY2tlZDpmdW5jdGlvbihUcil7dWU9VHJ9LHNldENsZWFyOmZ1bmN0aW9uKFRyKXtvcyE9PVRyJiYobi5jbGVhclN0ZW5jaWwoVHIpLG9zPVRyKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGx9fX0sdT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsbGU9bi5nZXRQYXJhbWV0ZXIoMzU2NjEpLGhlPSExLHllPTAsSj1uLmdldFBhcmFtZXRlcig3OTM4KTstMSE9PUouaW5kZXhPZigiV2ViR0wiKT8oeWU9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0xKTotMSE9PUouaW5kZXhPZigiT3BlbkdMIEVTIikmJih5ZT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0yKTtsZXQgYWU9bnVsbCxtZT17fSxqZT1uLmdldFBhcmFtZXRlcigzMDg4KSxNZT1uLmdldFBhcmFtZXRlcigyOTc4KSxGZT0obmV3IHRyKS5mcm9tQXJyYXkoamUpLHV0PShuZXcgdHIpLmZyb21BcnJheShNZSk7ZnVuY3Rpb24gU3QodWUsSnQsVXQpe2xldCBUbj1uZXcgVWludDhBcnJheSg0KSxHZT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKHVlLEdlKSxuLnRleFBhcmFtZXRlcmkodWUsMTAyNDEsOTcyOCksbi50ZXhQYXJhbWV0ZXJpKHVlLDEwMjQwLDk3MjgpO2ZvcihsZXQgQ249MDtDbjxVdDtDbisrKW4udGV4SW1hZ2UyRChKdCtDbiwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLFRuKTtyZXR1cm4gR2V9bGV0IGd0PXt9O2Z1bmN0aW9uIFJlKHVlKXshMCE9PXVbdWVdJiYobi5lbmFibGUodWUpLHVbdWVdPSEwKX1mdW5jdGlvbiBBbih1ZSl7ITEhPT11W3VlXSYmKG4uZGlzYWJsZSh1ZSksdVt1ZV09ITEpfWd0WzM1NTNdPVN0KDM1NTMsMzU1MywxKSxndFszNDA2N109U3QoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksUmUoMjkyOSksbC5zZXRGdW5jKDMpLFllKCExKSx4dCgxKSxSZSgyODg0KSxpZSgwKTtsZXQgdnQ9ezEwMDozMjc3NCwxMDE6MzI3NzgsMTAyOjMyNzc5fTtpZihpKXZ0WzEwM109MzI3NzUsdnRbMTA0XT0zMjc3NjtlbHNle2xldCB1ZT10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT11ZSYmKHZ0WzEwM109dWUuTUlOX0VYVCx2dFsxMDRdPXVlLk1BWF9FWFQpfWxldCBfdD17MjAwOjAsMjAxOjEsMjAyOjc2OCwyMDQ6NzcwLDIxMDo3NzYsMjA4Ojc3NCwyMDY6NzcyLDIwMzo3NjksMjA1Ojc3MSwyMDk6Nzc1LDIwNzo3NzN9O2Z1bmN0aW9uIGllKHVlLEp0LFV0LFRuLEdlLENuLG1pLG1yKXtpZigwIT09dWUpe2lmKCExPT09bSYmKFJlKDMwNDIpLG09ITApLDU9PT11ZSlHZT1HZXx8SnQsQ249Q258fFV0LG1pPW1pfHxUbiwoSnQhPT1ffHxHZSE9PUEpJiYobi5ibGVuZEVxdWF0aW9uU2VwYXJhdGUodnRbSnRdLHZ0W0dlXSksXz1KdCxBPUdlKSwoVXQhPT15fHxUbiE9PUl8fENuIT09T3x8bWkhPT1lZSkmJihuLmJsZW5kRnVuY1NlcGFyYXRlKF90W1V0XSxfdFtUbl0sX3RbQ25dLF90W21pXSkseT1VdCxJPVRuLE89Q24sZWU9bWkpLEM9dWUsWD1udWxsO2Vsc2UgaWYodWUhPT1DfHxtciE9PVgpe2lmKCgxMDAhPT1ffHwxMDAhPT1BKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksXz0xMDAsQT0xMDApLG1yKXN3aXRjaCh1ZSl7Y2FzZSAxOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSA0Om4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9ZWxzZSBzd2l0Y2godWUpe2Nhc2UgMTpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIDQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9eT1udWxsLEk9bnVsbCxPPW51bGwsZWU9bnVsbCxDPXVlLFg9bXJ9fWVsc2UhMD09PW0mJihBbigzMDQyKSxtPSExKX1mdW5jdGlvbiBZZSh1ZSl7eGUhPT11ZSYmKG4uZnJvbnRGYWNlKHVlPzIzMDQ6MjMwNSkseGU9dWUpfWZ1bmN0aW9uIHh0KHVlKXswIT09dWU/KFJlKDI4ODQpLHVlIT09ZmUmJm4uY3VsbEZhY2UoMT09PXVlPzEwMjk6Mj09PXVlPzEwMjg6MTAzMikpOkFuKDI4ODQpLGZlPXVlfWZ1bmN0aW9uIHNuKHVlLEp0LFV0KXt1ZT8oUmUoMzI4MjMpLChUIT09SnR8fG5lIT09VXQpJiYobi5wb2x5Z29uT2Zmc2V0KEp0LFV0KSxUPUp0LG5lPVV0KSk6QW4oMzI4MjMpfWZ1bmN0aW9uIG9pKHVlKXt2b2lkIDA9PT11ZSYmKHVlPTMzOTg0K2xlLTEpLGFlIT09dWUmJihuLmFjdGl2ZVRleHR1cmUodWUpLGFlPXVlKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOlJlLGRpc2FibGU6QW4sYmluZEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHVlLEp0KXtyZXR1cm4gZFt1ZV0hPT1KdCYmKG4uYmluZEZyYW1lYnVmZmVyKHVlLEp0KSxkW3VlXT1KdCxpJiYoMzYwMDk9PT11ZSYmKGRbMzYxNjBdPUp0KSwzNjE2MD09PXVlJiYoZFszNjAwOV09SnQpKSwhMCl9LGRyYXdCdWZmZXJzOmZ1bmN0aW9uKHVlLEp0KXtsZXQgVXQ9aCxUbj0hMTtpZih1ZSlpZihVdD1wLmdldChKdCksdm9pZCAwPT09VXQmJihVdD1bXSxwLnNldChKdCxVdCkpLHVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpe2xldCBHZT11ZS50ZXh0dXJlO2lmKFV0Lmxlbmd0aCE9PUdlLmxlbmd0aHx8MzYwNjQhPT1VdFswXSl7Zm9yKGxldCBDbj0wLG1pPUdlLmxlbmd0aDtDbjxtaTtDbisrKVV0W0NuXT0zNjA2NCtDbjtVdC5sZW5ndGg9R2UubGVuZ3RoLFRuPSEwfX1lbHNlIDM2MDY0IT09VXRbMF0mJihVdFswXT0zNjA2NCxUbj0hMCk7ZWxzZSAxMDI5IT09VXRbMF0mJihVdFswXT0xMDI5LFRuPSEwKTtUbiYmKGUuaXNXZWJHTDI/bi5kcmF3QnVmZmVycyhVdCk6dC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpLmRyYXdCdWZmZXJzV0VCR0woVXQpKX0sdXNlUHJvZ3JhbTpmdW5jdGlvbih1ZSl7cmV0dXJuIGYhPT11ZSYmKG4udXNlUHJvZ3JhbSh1ZSksZj11ZSwhMCl9LHNldEJsZW5kaW5nOmllLHNldE1hdGVyaWFsOmZ1bmN0aW9uKHVlLEp0KXsyPT09dWUuc2lkZT9BbigyODg0KTpSZSgyODg0KTtsZXQgVXQ9MT09PXVlLnNpZGU7SnQmJihVdD0hVXQpLFllKFV0KSwxPT09dWUuYmxlbmRpbmcmJiExPT09dWUudHJhbnNwYXJlbnQ/aWUoMCk6aWUodWUuYmxlbmRpbmcsdWUuYmxlbmRFcXVhdGlvbix1ZS5ibGVuZFNyYyx1ZS5ibGVuZERzdCx1ZS5ibGVuZEVxdWF0aW9uQWxwaGEsdWUuYmxlbmRTcmNBbHBoYSx1ZS5ibGVuZERzdEFscGhhLHVlLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKHVlLmRlcHRoRnVuYyksbC5zZXRUZXN0KHVlLmRlcHRoVGVzdCksbC5zZXRNYXNrKHVlLmRlcHRoV3JpdGUpLGEuc2V0TWFzayh1ZS5jb2xvcldyaXRlKTtsZXQgVG49dWUuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChUbiksVG4mJihjLnNldE1hc2sodWUuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKHVlLnN0ZW5jaWxGdW5jLHVlLnN0ZW5jaWxSZWYsdWUuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKHVlLnN0ZW5jaWxGYWlsLHVlLnN0ZW5jaWxaRmFpbCx1ZS5zdGVuY2lsWlBhc3MpKSxzbih1ZS5wb2x5Z29uT2Zmc2V0LHVlLnBvbHlnb25PZmZzZXRGYWN0b3IsdWUucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PXVlLmFscGhhVG9Db3ZlcmFnZT9SZSgzMjkyNik6QW4oMzI5MjYpfSxzZXRGbGlwU2lkZWQ6WWUsc2V0Q3VsbEZhY2U6eHQsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKHVlKXt1ZSE9PXZlJiYoaGUmJm4ubGluZVdpZHRoKHVlKSx2ZT11ZSl9LHNldFBvbHlnb25PZmZzZXQ6c24sc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24odWUpe3VlP1JlKDMwODkpOkFuKDMwODkpfSxhY3RpdmVUZXh0dXJlOm9pLGJpbmRUZXh0dXJlOmZ1bmN0aW9uKHVlLEp0KXtudWxsPT09YWUmJm9pKCk7bGV0IFV0PW1lW2FlXTt2b2lkIDA9PT1VdCYmKFV0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sbWVbYWVdPVV0KSwoVXQudHlwZSE9PXVlfHxVdC50ZXh0dXJlIT09SnQpJiYobi5iaW5kVGV4dHVyZSh1ZSxKdHx8Z3RbdWVdKSxVdC50eXBlPXVlLFV0LnRleHR1cmU9SnQpfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uKCl7bGV0IHVlPW1lW2FlXTt2b2lkIDAhPT11ZSYmdm9pZCAwIT09dWUudHlwZSYmKG4uYmluZFRleHR1cmUodWUudHlwZSxudWxsKSx1ZS50eXBlPXZvaWQgMCx1ZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4U3RvcmFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3RvcmFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHRleFN0b3JhZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTNEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHNjaXNzb3I6ZnVuY3Rpb24odWUpeyExPT09RmUuZXF1YWxzKHVlKSYmKG4uc2Npc3Nvcih1ZS54LHVlLnksdWUueix1ZS53KSxGZS5jb3B5KHVlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKHVlKXshMT09PXV0LmVxdWFscyh1ZSkmJihuLnZpZXdwb3J0KHVlLngsdWUueSx1ZS56LHVlLncpLHV0LmNvcHkodWUpKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PWkmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHU9e30sYWU9bnVsbCxtZT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsRmUuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHV0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX19fWZ1bmN0aW9uIG44ZShuLHQsZSxpLHIsbyxzKXtsZXQgbSxhPXIuaXNXZWJHTDIsbD1yLm1heFRleHR1cmVzLGM9ci5tYXhDdWJlbWFwU2l6ZSx1PXIubWF4VGV4dHVyZVNpemUsZD1yLm1heFNhbXBsZXMsaD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxmPW5ldyBXZWFrTWFwLEM9ITE7dHJ5e0M9dHlwZW9mIE9mZnNjcmVlbkNhbnZhczwidSImJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaHt9ZnVuY3Rpb24gXyhRLEYpe3JldHVybiBDP25ldyBPZmZzY3JlZW5DYW52YXMoUSxGKTpTTSgiY2FudmFzIil9ZnVuY3Rpb24geShRLEYsVmUsQ3Qpe2xldCB0bj0xO2lmKChRLndpZHRoPkN0fHxRLmhlaWdodD5DdCkmJih0bj1DdC9NYXRoLm1heChRLndpZHRoLFEuaGVpZ2h0KSksdG48MXx8ITA9PT1GKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJlEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZRIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJlEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IEJlPUY/QTVlOk1hdGguZmxvb3IsZ249QmUodG4qUS53aWR0aCksbG49QmUodG4qUS5oZWlnaHQpO3ZvaWQgMD09PW0mJihtPV8oZ24sbG4pKTtsZXQgRnQ9VmU/Xyhnbixsbik6bTtyZXR1cm4gRnQud2lkdGg9Z24sRnQuaGVpZ2h0PWxuLEZ0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKFEsMCwwLGduLGxuKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK1Eud2lkdGgrIngiK1EuaGVpZ2h0KyIpIHRvICgiK2duKyJ4IitsbisiKS4iKSxGdH1yZXR1cm4iZGF0YSJpbiBRJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrUS53aWR0aCsieCIrUS5oZWlnaHQrIikuIiksUX1yZXR1cm4gUX1mdW5jdGlvbiBJKFEpe3JldHVybiBpYWUoUS53aWR0aCkmJmlhZShRLmhlaWdodCl9ZnVuY3Rpb24gTyhRLEYpe3JldHVybiBRLmdlbmVyYXRlTWlwbWFwcyYmRiYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1ic31mdW5jdGlvbiBlZShRKXtuLmdlbmVyYXRlTWlwbWFwKFEpfWZ1bmN0aW9uIFgoUSxGLFZlLEN0LHRuPSExKXtpZighMT09PWEpcmV0dXJuIEY7aWYobnVsbCE9PVEpe2lmKHZvaWQgMCE9PW5bUV0pcmV0dXJuIG5bUV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK1ErIiciKX1sZXQgQmU9RjtyZXR1cm4gNjQwMz09PUYmJig1MTI2PT09VmUmJihCZT0zMzMyNiksNTEzMT09PVZlJiYoQmU9MzMzMjUpLDUxMjE9PT1WZSYmKEJlPTMzMzIxKSksMzMzMTk9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzMzMjgpLDUxMzE9PT1WZSYmKEJlPTMzMzI3KSw1MTIxPT09VmUmJihCZT0zMzMyMykpLDY0MDg9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzQ4MzYpLDUxMzE9PT1WZSYmKEJlPTM0ODQyKSw1MTIxPT09VmUmJihCZT1DdD09PUZyJiYhMT09PXRuPzM1OTA3OjMyODU2KSwzMjgxOT09PVZlJiYoQmU9MzI4NTQpLDMyODIwPT09VmUmJihCZT0zMjg1NSkpLCgzMzMyNT09PUJlfHwzMzMyNj09PUJlfHwzMzMyNz09PUJlfHwzMzMyOD09PUJlfHwzNDg0Mj09PUJlfHwzNDgzNj09PUJlKSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxCZX1mdW5jdGlvbiB4ZShRLEYsVmUpe3JldHVybiEwPT09TyhRLFZlKXx8US5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icz9NYXRoLmxvZzIoTWF0aC5tYXgoRi53aWR0aCxGLmhlaWdodCkpKzE6dm9pZCAwIT09US5taXBtYXBzJiZRLm1pcG1hcHMubGVuZ3RoPjA/US5taXBtYXBzLmxlbmd0aDpRLmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkoUS5pbWFnZSk/Ri5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIGZlKFEpe3JldHVybiBRPT09SW98fDEwMDQ9PT1RfHwxMDA1PT09UT85NzI4Ojk3Mjl9ZnVuY3Rpb24gdmUoUSl7bGV0IEY9US50YXJnZXQ7Ri5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix2ZSksZnVuY3Rpb24oUSl7bGV0IEY9aS5nZXQoUSk7dm9pZCAwIT09Ri5fX3dlYmdsSW5pdCYmKG4uZGVsZXRlVGV4dHVyZShGLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShRKSl9KEYpLEYuaXNWaWRlb1RleHR1cmUmJmYuZGVsZXRlKEYpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gVChRKXtsZXQgRj1RLnRhcmdldDtGLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFQpLGZ1bmN0aW9uKFEpe2xldCBGPVEudGV4dHVyZSxWZT1pLmdldChRKSxDdD1pLmdldChGKTtpZihRKXtpZih2b2lkIDAhPT1DdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShDdC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksUS5kZXB0aFRleHR1cmUmJlEuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgdG49MDt0bjw2O3RuKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXJbdG5dKSxWZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlclt0bl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXIpLFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoVmUuX193ZWJnbERlcHRoYnVmZmVyKSxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoVmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihWZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKFEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IHRuPTAsQmU9Ri5sZW5ndGg7dG48QmU7dG4rKyl7bGV0IGduPWkuZ2V0KEZbdG5dKTtnbi5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShnbi5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUoRlt0bl0pfWkucmVtb3ZlKEYpLGkucmVtb3ZlKFEpfX0oRil9bGV0IGhlPTA7ZnVuY3Rpb24gYWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7aWYoUS5pc1ZpZGVvVGV4dHVyZSYmZnVuY3Rpb24oUSl7bGV0IEY9cy5yZW5kZXIuZnJhbWU7Zi5nZXQoUSkhPT1GJiYoZi5zZXQoUSxGKSxRLnVwZGF0ZSgpKX0oUSksUS52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbil7bGV0IEN0PVEuaW1hZ2U7aWYodm9pZCAwPT09Q3QpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09Q3QuY29tcGxldGUpcmV0dXJuIHZvaWQgUmUoVmUsUSxGKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU1MyxWZS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gTWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9mdW5jdGlvbihRLEYsVmUpe2lmKDYhPT1GLmltYWdlLmxlbmd0aClyZXR1cm47Z3QoUSxGKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUoMzQwNjcsUS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxGLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEYucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEYudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBDdD1GJiYoRi5pc0NvbXByZXNzZWRUZXh0dXJlfHxGLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLHRuPUYuaW1hZ2VbMF0mJkYuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxCZT1bXTtmb3IobGV0IEdlPTA7R2U8NjtHZSsrKUJlW0dlXT1DdHx8dG4/dG4/Ri5pbWFnZVtHZV0uaW1hZ2U6Ri5pbWFnZVtHZV06eShGLmltYWdlW0dlXSwhMSwhMCxjKSxCZVtHZV09c24oRixCZVtHZV0pO2xldCBUbixnbj1CZVswXSxsbj1JKGduKXx8YSxGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPWEmJiEwIT09Ri5pc1ZpZGVvVGV4dHVyZSxKdD12b2lkIDA9PT1RLl9fdmVyc2lvbixVdD14ZShGLGduLGxuKTtpZihTdCgzNDA2NyxGLGxuKSxDdCl7dWUmJkp0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxVdCxMbixnbi53aWR0aCxnbi5oZWlnaHQpO2ZvcihsZXQgR2U9MDtHZTw2O0dlKyspe1RuPUJlW0dlXS5taXBtYXBzO2ZvcihsZXQgQ249MDtDbjxUbi5sZW5ndGg7Q24rKyl7bGV0IG1pPVRuW0NuXTtGLmZvcm1hdCE9PXpzP251bGwhPT1GdD91ZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsbWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStHZSxDbixMbixtaS53aWR0aCxtaS5oZWlnaHQsMCxtaS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsa3QsbWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuLExuLG1pLndpZHRoLG1pLmhlaWdodCwwLEZ0LGt0LG1pLmRhdGEpfX19ZWxzZXtUbj1GLm1pcG1hcHMsdWUmJkp0JiYoVG4ubGVuZ3RoPjAmJlV0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsVXQsTG4sQmVbMF0ud2lkdGgsQmVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBHZT0wO0dlPDY7R2UrKylpZih0bil7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEJlW0dlXS53aWR0aCxCZVtHZV0uaGVpZ2h0LEZ0LGt0LEJlW0dlXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrR2UsMCxMbixCZVtHZV0ud2lkdGgsQmVbR2VdLmhlaWdodCwwLEZ0LGt0LEJlW0dlXS5kYXRhKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtcj1UbltDbl0uaW1hZ2VbR2VdLmltYWdlO3VlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStHZSxDbisxLDAsMCxtci53aWR0aCxtci5oZWlnaHQsRnQsa3QsbXIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sbXIud2lkdGgsbXIuaGVpZ2h0LDAsRnQsa3QsbXIuZGF0YSl9fWVsc2V7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEZ0LGt0LEJlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLDAsTG4sRnQsa3QsQmVbR2VdKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtaT1UbltDbl07dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuKzEsMCwwLEZ0LGt0LG1pLmltYWdlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sRnQsa3QsbWkuaW1hZ2VbR2VdKX19fU8oRixsbikmJmVlKDM0MDY3KSxRLl9fdmVyc2lvbj1GLnZlcnNpb24sRi5vblVwZGF0ZSYmRi5vblVwZGF0ZShGKX0oVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzQwNjcsVmUuX193ZWJnbFRleHR1cmUpKX1sZXQgRmU9ezFlMzoxMDQ5NyxbWmFdOjMzMDcxLDEwMDI6MzM2NDh9LHV0PXtbSW9dOjk3MjgsMTAwNDo5OTg0LDEwMDU6OTk4NixbYnNdOjk3MjksMTAwNzo5OTg1LDEwMDg6OTk4N307ZnVuY3Rpb24gU3QoUSxGLFZlKXtpZihWZT8obi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsRmVbRi53cmFwU10pLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLEZlW0Yud3JhcFRdKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MixGZVtGLndyYXBSXSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDAsdXRbRi5tYWdGaWx0ZXJdKSxuLnRleFBhcmFtZXRlcmkoUSwxMDI0MSx1dFtGLm1pbkZpbHRlcl0pKToobi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsMzMwNzEpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLDMzMDcxKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MiwzMzA3MSksKEYud3JhcFMhPT1aYXx8Ri53cmFwVCE9PVphKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQwLGZlKEYubWFnRmlsdGVyKSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDEsZmUoRi5taW5GaWx0ZXIpKSxGLm1pbkZpbHRlciE9PUlvJiZGLm1pbkZpbHRlciE9PWJzJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksITA9PT10LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2xldCBDdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoRi50eXBlPT09WW0mJiExPT09dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwhMT09PWEmJkYudHlwZT09PXV5JiYhMT09PXQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXJldHVybjsoRi5hbmlzb3Ryb3B5PjF8fGkuZ2V0KEYpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYobi50ZXhQYXJhbWV0ZXJmKFEsQ3QuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsTWF0aC5taW4oRi5hbmlzb3Ryb3B5LHIuZ2V0TWF4QW5pc290cm9weSgpKSksaS5nZXQoRikuX19jdXJyZW50QW5pc290cm9weT1GLmFuaXNvdHJvcHkpfX1mdW5jdGlvbiBndChRLEYpe3ZvaWQgMD09PVEuX193ZWJnbEluaXQmJihRLl9fd2ViZ2xJbml0PSEwLEYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdmUpLFEuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gUmUoUSxGLFZlKXtsZXQgQ3Q9MzU1MztGLmlzRGF0YVRleHR1cmUyREFycmF5JiYoQ3Q9MzU4NjYpLEYuaXNEYXRhVGV4dHVyZTNEJiYoQ3Q9MzI4NzkpLGd0KFEsRiksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1ZlKSxlLmJpbmRUZXh0dXJlKEN0LFEuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsRi5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSxGLnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyxGLnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgdG49ZnVuY3Rpb24oUSl7cmV0dXJuIWEmJihRLndyYXBTIT09WmF8fFEud3JhcFQhPT1aYXx8US5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icyl9KEYpJiYhMT09PUkoRi5pbWFnZSksQmU9eShGLmltYWdlLHRuLCExLHUpO0JlPXNuKEYsQmUpO2xldCBnbj1JKEJlKXx8YSxsbj1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksRnQ9by5jb252ZXJ0KEYudHlwZSksa3Q9WChGLmludGVybmFsRm9ybWF0LGxuLEZ0LEYuZW5jb2RpbmcsRi5pc1ZpZGVvVGV4dHVyZSk7U3QoQ3QsRixnbik7bGV0IExuLHVlPUYubWlwbWFwcyxKdD1hJiYhMCE9PUYuaXNWaWRlb1RleHR1cmUsVXQ9dm9pZCAwPT09US5fX3ZlcnNpb24sVG49eGUoRixCZSxnbik7aWYoRi5pc0RlcHRoVGV4dHVyZSlrdD02NDAyLGE/a3Q9Ri50eXBlPT09WW0/MzYwMTI6MTAxND09PUYudHlwZT8zMzE5MDpGLnR5cGU9PT1keT8zNTA1NjozMzE4OTpGLnR5cGU9PT1ZbSYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksRi5mb3JtYXQ9PT1RbSYmNjQwMj09PWt0JiZGLnR5cGUhPT13TSYmMTAxNCE9PUYudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLEYudHlwZT13TSxGdD1vLmNvbnZlcnQoRi50eXBlKSksRi5mb3JtYXQ9PT1teSYmNjQwMj09PWt0JiYoa3Q9MzQwNDEsRi50eXBlIT09ZHkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksRi50eXBlPWR5LEZ0PW8uY29udmVydChGLnR5cGUpKSksSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxrdCxCZS53aWR0aCxCZS5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LDAsbG4sRnQsbnVsbCk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUpaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKTtGLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIEp0PyhVdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNDb21wcmVzc2VkVGV4dHVyZSl7SnQmJlV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LHVlWzBdLndpZHRoLHVlWzBdLmhlaWdodCk7Zm9yKGxldCBHZT0wLENuPXVlLmxlbmd0aDtHZTxDbjtHZSsrKUxuPXVlW0dlXSxGLmZvcm1hdCE9PXpzP251bGwhPT1sbj9KdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixMbi5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM1NTMsR2Usa3QsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsTG4uZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6SnQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKX1lbHNlIGlmKEYuaXNEYXRhVGV4dHVyZTJEQXJyYXkpSnQ/KFV0JiZlLnRleFN0b3JhZ2UzRCgzNTg2NixUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzNTg2NiwwLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLDAsbG4sRnQsQmUuZGF0YSk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUzRClKdD8oVXQmJmUudGV4U3RvcmFnZTNEKDMyODc5LFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLGxuLEZ0LEJlLmRhdGEpKTplLnRleEltYWdlM0QoMzI4NzksMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNGcmFtZWJ1ZmZlclRleHR1cmUpSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsQmUud2lkdGgsQmUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGt0LEJlLndpZHRoLEJlLmhlaWdodCwwLGxuLEZ0LG51bGwpO2Vsc2UgaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLEdlLDAsMCxsbixGdCxMbik6ZS50ZXhJbWFnZTJEKDM1NTMsR2Usa3QsbG4sRnQsTG4pO0YuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgSnQ/KFV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsbG4sRnQsQmUpKTplLnRleEltYWdlMkQoMzU1MywwLGt0LGxuLEZ0LEJlKTtPKEYsZ24pJiZlZShDdCksUS5fX3ZlcnNpb249Ri52ZXJzaW9uLEYub25VcGRhdGUmJkYub25VcGRhdGUoRil9ZnVuY3Rpb24gRXQoUSxGLFZlLEN0LHRuKXtsZXQgQmU9by5jb252ZXJ0KFZlLmZvcm1hdCxWZS5lbmNvZGluZyksZ249by5jb252ZXJ0KFZlLnR5cGUpLGxuPVgoVmUuaW50ZXJuYWxGb3JtYXQsQmUsZ24sVmUuZW5jb2RpbmcpO2kuZ2V0KEYpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KDMyODc5PT09dG58fDM1ODY2PT09dG4/ZS50ZXhJbWFnZTNEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCxGLmRlcHRoLDAsQmUsZ24sbnVsbCk6ZS50ZXhJbWFnZTJEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCwwLEJlLGduLG51bGwpKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxRKSxGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDAseHQoRikpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDApLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIG9uKFEsRixWZSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLFEpLEYuZGVwdGhCdWZmZXImJiFGLnN0ZW5jaWxCdWZmZXIpe2xldCBDdD0zMzE4OTtpZihWZXx8Ri51c2VSZW5kZXJUb1RleHR1cmUpe2xldCB0bj1GLmRlcHRoVGV4dHVyZTt0biYmdG4uaXNEZXB0aFRleHR1cmUmJih0bi50eXBlPT09WW0/Q3Q9MzYwMTI6MTAxND09PXRuLnR5cGUmJihDdD0zMzE5MCkpO2xldCBCZT14dChGKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KX1lbHNlIG4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxDdCxGLndpZHRoLEYuaGVpZ2h0KTtuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLFEpfWVsc2UgaWYoRi5kZXB0aEJ1ZmZlciYmRi5zdGVuY2lsQnVmZmVyKXtsZXQgQ3Q9eHQoRik7VmUmJkYudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOkYudXNlUmVuZGVyVG9UZXh0dXJlP2gucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSxGLndpZHRoLEYuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLFEpfWVsc2V7bGV0IEN0PSEwPT09Ri5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP0YudGV4dHVyZVswXTpGLnRleHR1cmUsdG49by5jb252ZXJ0KEN0LmZvcm1hdCxDdC5lbmNvZGluZyksQmU9by5jb252ZXJ0KEN0LnR5cGUpLGduPVgoQ3QuaW50ZXJuYWxGb3JtYXQsdG4sQmUsQ3QuZW5jb2RpbmcpLGxuPXh0KEYpO1ZlJiZGLnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZ24sRi53aWR0aCxGLmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIHZ0KFEpe2xldCBGPWkuZ2V0KFEpLFZlPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihRLmRlcHRoVGV4dHVyZSYmIUYuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYoVmUpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpOyFmdW5jdGlvbihRLEYpe2lmKEYmJkYuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUSksIUYuZGVwdGhUZXh0dXJlfHwhRi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7KCFpLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmV8fEYuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoIT09Ri53aWR0aHx8Ri5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0IT09Ri5oZWlnaHQpJiYoRi5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9Ri53aWR0aCxGLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9Ri5oZWlnaHQsRi5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLGFlKEYuZGVwdGhUZXh0dXJlLDApO2xldCBDdD1pLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsdG49eHQoRik7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0PT09UW0pRi51c2VSZW5kZXJUb1RleHR1cmU/aC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsQ3QsMCx0bik6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLEN0LDApO2Vsc2V7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0IT09bXkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzMzMDYsMzU1MyxDdCwwLHRuKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsQ3QsMCl9fShGLl9fd2ViZ2xGcmFtZWJ1ZmZlcixRKX1lbHNlIGlmKFZlKXtGLl9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IEN0PTA7Q3Q8NjtDdCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEYuX193ZWJnbEZyYW1lYnVmZmVyW0N0XSksRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdLFEsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRi5fX3dlYmdsRnJhbWVidWZmZXIpLEYuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXIsUSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24geHQoUSl7cmV0dXJuIGEmJihRLnVzZVJlbmRlcmJ1ZmZlcnx8US51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGQsUS5zYW1wbGVzKTowfWZ1bmN0aW9uIHNuKFEsRil7bGV0IFZlPVEuZW5jb2RpbmcsQ3Q9US5mb3JtYXQsdG49US50eXBlO3JldHVybiEwPT09US5pc0NvbXByZXNzZWRUZXh0dXJlfHwhMD09PVEuaXNWaWRlb1RleHR1cmV8fDEwMzU9PT1RLmZvcm1hdHx8VmUhPT1EaCYmKFZlPT09RnI/ITE9PT1hPyEwPT09dC5oYXMoIkVYVF9zUkdCIikmJkN0PT09enM/KFEuZm9ybWF0PTEwMzUsUS5taW5GaWx0ZXI9YnMsUS5nZW5lcmF0ZU1pcG1hcHM9ITEpOkY9VWQuc1JHQlRvTGluZWFyKEYpOihDdCE9PXpzfHx0biE9PVNoKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsVmUpKSxGfWxldCBTbj0hMSxvaT0hMTt0aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtsZXQgUT1oZTtyZXR1cm4gUT49bCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICIrUSsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLGhlKz0xLFF9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24oKXtoZT0wfSx0aGlzLnNldFRleHR1cmUyRD1hZSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKFEsRil7bGV0IFZlPWkuZ2V0KFEpO1EudmVyc2lvbj4wJiZWZS5fX3ZlcnNpb24hPT1RLnZlcnNpb24/UmUoVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU4NjYsVmUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlM0Q9ZnVuY3Rpb24oUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9SZShWZSxRLEYpOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrRiksZS5iaW5kVGV4dHVyZSgzMjg3OSxWZS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmVDdWJlPU1lLHRoaXMucmViaW5kVGV4dHVyZXM9ZnVuY3Rpb24oUSxGLFZlKXtsZXQgQ3Q9aS5nZXQoUSk7dm9pZCAwIT09RiYmRXQoQ3QuX193ZWJnbEZyYW1lYnVmZmVyLFEsUS50ZXh0dXJlLDM2MDY0LDM1NTMpLHZvaWQgMCE9PVZlJiZ2dChRKX0sdGhpcy5zZXR1cFJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtsZXQgRj1RLnRleHR1cmUsVmU9aS5nZXQoUSksQ3Q9aS5nZXQoRik7US5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixUKSwhMCE9PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyYmKHZvaWQgMD09PUN0Ll9fd2ViZ2xUZXh0dXJlJiYoQ3QuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkpLEN0Ll9fdmVyc2lvbj1GLnZlcnNpb24scy5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IHRuPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCxCZT0hMD09PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyxnbj1GLmlzRGF0YVRleHR1cmUzRHx8Ri5pc0RhdGFUZXh0dXJlMkRBcnJheSxsbj1JKFEpfHxhO2lmKHRuKXtWZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBGdD0wO0Z0PDY7RnQrKylWZS5fX3dlYmdsRnJhbWVidWZmZXJbRnRdPW4uY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCksQmUpaWYoci5kcmF3QnVmZmVycyl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1pLmdldChGdFtrdF0pO3ZvaWQgMD09PXVlLl9fd2ViZ2xUZXh0dXJlJiYodWUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPXh0KFEpO24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHVlLExuLFEud2lkdGgsUS5oZWlnaHQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLFZlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSxRLmRlcHRoQnVmZmVyJiYoVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLFEsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKHRuKXtlLmJpbmRUZXh0dXJlKDM0MDY3LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdCgzNDA2NyxGLGxuKTtmb3IobGV0IEZ0PTA7RnQ8NjtGdCsrKUV0KFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltGdF0sUSxGLDM2MDY0LDM0MDY5K0Z0KTtPKEYsbG4pJiZlZSgzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihCZSl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1GdFtrdF0sSnQ9aS5nZXQodWUpO2UuYmluZFRleHR1cmUoMzU1MyxKdC5fX3dlYmdsVGV4dHVyZSksU3QoMzU1Myx1ZSxsbiksRXQoVmUuX193ZWJnbEZyYW1lYnVmZmVyLFEsdWUsMzYwNjQra3QsMzU1MyksTyh1ZSxsbikmJmVlKDM1NTMpfWUudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IEZ0PTM1NTM7Z24mJihhP0Z0PUYuaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxlLmJpbmRUZXh0dXJlKEZ0LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdChGdCxGLGxuKSxFdChWZS5fX3dlYmdsRnJhbWVidWZmZXIsUSxGLDM2MDY0LEZ0KSxPKEYsbG4pJiZlZShGdCksZS51bmJpbmRUZXh0dXJlKCl9US5kZXB0aEJ1ZmZlciYmdnQoUSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKFEpe2xldCBGPUkoUSl8fGEsVmU9ITA9PT1RLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/US50ZXh0dXJlOltRLnRleHR1cmVdO2ZvcihsZXQgQ3Q9MCx0bj1WZS5sZW5ndGg7Q3Q8dG47Q3QrKyl7bGV0IEJlPVZlW0N0XTtpZihPKEJlLEYpKXtsZXQgZ249US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLGxuPWkuZ2V0KEJlKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKGduLGxuKSxlZShnbiksZS51bmJpbmRUZXh0dXJlKCl9fX0sdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtsZXQgRj1RLndpZHRoLFZlPVEuaGVpZ2h0LEN0PTE2Mzg0LHRuPVszNjA2NF0sQmU9US5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O1EuZGVwdGhCdWZmZXImJnRuLnB1c2goQmUpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fChRLmRlcHRoQnVmZmVyJiYoQ3R8PTI1NiksUS5zdGVuY2lsQnVmZmVyJiYoQ3R8PTEwMjQpKTtsZXQgZ249aS5nZXQoUSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsZ24uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxnbi5fX3dlYmdsRnJhbWVidWZmZXIpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkmJihuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxbQmVdKSxuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOSxbQmVdKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLEYsVmUsMCwwLEYsVmUsQ3QsOTcyOCksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsdG4pLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LGduLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX0sdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPXZ0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9RXQsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWZ1bmN0aW9uKFEsRil7USYmUS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1TbiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLFNuPSEwKSxRPVEudGV4dHVyZSksYWUoUSxGKX0sdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oUSxGKXtRJiZRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoITE9PT1vaSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxvaT0hMCksUT1RLnRleHR1cmUpLE1lKFEsRil9fWZ1bmN0aW9uIGk4ZShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtyZXR1cm57Y29udmVydDpmdW5jdGlvbihvLHM9bnVsbCl7bGV0IGE7aWYobz09PVNoKXJldHVybiA1MTIxO2lmKDEwMTc9PT1vKXJldHVybiAzMjgxOTtpZigxMDE4PT09bylyZXR1cm4gMzI4MjA7aWYoMTAxMD09PW8pcmV0dXJuIDUxMjA7aWYoMTAxMT09PW8pcmV0dXJuIDUxMjI7aWYobz09PXdNKXJldHVybiA1MTIzO2lmKDEwMTM9PT1vKXJldHVybiA1MTI0O2lmKDEwMTQ9PT1vKXJldHVybiA1MTI1O2lmKG89PT1ZbSlyZXR1cm4gNTEyNjtpZihvPT09dXkpcmV0dXJuIGk/NTEzMTooYT10LmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1hP2EuSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYoMTAyMT09PW8pcmV0dXJuIDY0MDY7aWYobz09PXpzKXJldHVybiA2NDA4O2lmKDEwMjQ9PT1vKXJldHVybiA2NDA5O2lmKDEwMjU9PT1vKXJldHVybiA2NDEwO2lmKG89PT1RbSlyZXR1cm4gNjQwMjtpZihvPT09bXkpcmV0dXJuIDM0MDQxO2lmKDEwMjg9PT1vKXJldHVybiA2NDAzO2lmKDEwMzU9PT1vKXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLG51bGwhPT1hP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZigxMDI5PT09bylyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PW8pcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT1vKXJldHVybiAzMzMyMDtpZigxMDMzPT09bylyZXR1cm4gMzYyNDk7aWYoMzM3NzY9PT1vfHwzMzc3Nz09PW98fDMzNzc4PT09b3x8MzM3Nzk9PT1vKWlmKHM9PT1Gcil7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDMzNzc2PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNle2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzM3NzY9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzc9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKDMzNzc4PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigzMzc3OT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9aWYoMzU4NDA9PT1vfHwzNTg0MT09PW98fDM1ODQyPT09b3x8MzU4NDM9PT1vKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNTg0MD09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0MT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZigzNTg0Mj09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDM9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWlmKDM2MTk2PT09bylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YT9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZigzNzQ5Mj09PW98fDM3NDk2PT09byl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDM3NDkyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYoMzc0OTY9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9aWYoMzc4MDg9PT1vfHwzNzgwOT09PW98fDM3ODEwPT09b3x8Mzc4MTE9PT1vfHwzNzgxMj09PW98fDM3ODEzPT09b3x8Mzc4MTQ9PT1vfHwzNzgxNT09PW98fDM3ODE2PT09b3x8Mzc4MTc9PT1vfHwzNzgxOD09PW98fDM3ODE5PT09b3x8Mzc4MjA9PT1vfHwzNzgyMT09PW8pe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzc4MDg9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO2lmKDM3ODA5PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZigzNzgxMD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYoMzc4MTE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO2lmKDM3ODEyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZigzNzgxMz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYoMzc4MTQ9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO2lmKDM3ODE1PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZigzNzgxNj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZigzNzgxNz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtpZigzNzgxOD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZigzNzgxOT09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKDM3ODIwPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7aWYoMzc4MjE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1pZigzNjQ5Mj09PW8pe2lmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNjQ5Mj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1yZXR1cm4gbz09PWR5P2k/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09YT9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fU0yLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTMj1jbGFzcyBleHRlbmRzIHhze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtTMi5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgWG09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtYbS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgcjhlPXt0eXBlOiJtb3ZlIn0seU09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IFhtLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgWG0sdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3ICQpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBYbSx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgJCksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxpKXtsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PWEmJihyPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLGkpLG51bGwhPT1yJiYoYS5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCksYS5tYXRyaXguZGVjb21wb3NlKGEucG9zaXRpb24sYS5yb3RhdGlvbixhLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhhLmhhc0xpbmVhclZlbG9jaXR5PSEwLGEubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6YS5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8oYS5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsYS5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOmEuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChyOGUpKSksYyYmdC5oYW5kKXtzPSEwO2ZvcihsZXQgbSBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBDPWUuZ2V0Sm9pbnRQb3NlKG0saSk7aWYodm9pZCAwPT09Yy5qb2ludHNbbS5qb2ludE5hbWVdKXtsZXQgeT1uZXcgWG07eS5tYXRyaXhBdXRvVXBkYXRlPSExLHkudmlzaWJsZT0hMSxjLmpvaW50c1ttLmpvaW50TmFtZV09eSxjLmFkZCh5KX1sZXQgXz1jLmpvaW50c1ttLmpvaW50TmFtZV07bnVsbCE9PUMmJihfLm1hdHJpeC5mcm9tQXJyYXkoQy50cmFuc2Zvcm0ubWF0cml4KSxfLm1hdHJpeC5kZWNvbXBvc2UoXy5wb3NpdGlvbixfLnJvdGF0aW9uLF8uc2NhbGUpLF8uam9pbnRSYWRpdXM9Qy5yYWRpdXMpLF8udmlzaWJsZT1udWxsIT09Q31sZXQgcD1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLnBvc2l0aW9uLmRpc3RhbmNlVG8oYy5qb2ludHNbInRodW1iLXRpcCJdLnBvc2l0aW9uKSxoPS4wMixmPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPmgrZj8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJnA8PWgtZiYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbnVsbCE9PWwmJnQuZ3JpcFNwYWNlJiYobz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSksbnVsbCE9PW8mJihsLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLG8ubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KG8ubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLG8uYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KG8uYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PXIpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09YyYmKGMudmlzaWJsZT1udWxsIT09cyksdGhpc319LFBNPWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7aWYoKHU9dm9pZCAwIT09dT91OlFtKSE9PVFtJiZ1IT09bXkpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWkmJnU9PT1RbSYmKGk9d00pLHZvaWQgMD09PWkmJnU9PT1teSYmKGk9ZHkpLHN1cGVyKG51bGwscixvLHMsYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1hP2E6SW8sdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bD9sOklvLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtQTS5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIEFVPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLG89MSxzPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxkPW51bGwscD1udWxsLGg9ITEsZj1udWxsLG09ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLEM9bnVsbCxfPW51bGwseT1bXSxJPW5ldyBNYXAsQT1uZXcgeHM7QS5sYXllcnMuZW5hYmxlKDEpLEEudmlld3BvcnQ9bmV3IHRyO2xldCBPPW5ldyB4cztPLmxheWVycy5lbmFibGUoMiksTy52aWV3cG9ydD1uZXcgdHI7bGV0IGVlPVtBLE9dLFg9bmV3IFMyO1gubGF5ZXJzLmVuYWJsZSgxKSxYLmxheWVycy5lbmFibGUoMik7bGV0IHhlPW51bGwsZmU9bnVsbDtmdW5jdGlvbiB2ZShNZSl7bGV0IEZlPUkuZ2V0KE1lLmlucHV0U291cmNlKTtGZSYmRmUuZGlzcGF0Y2hFdmVudCh7dHlwZTpNZS50eXBlLGRhdGE6TWUuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBUKCl7SS5mb3JFYWNoKGZ1bmN0aW9uKE1lLEZlKXtNZS5kaXNjb25uZWN0KEZlKX0pLEkuY2xlYXIoKSx4ZT1udWxsLGZlPW51bGwsdC5zZXRSZW5kZXJUYXJnZXQoQykscD1udWxsLGQ9bnVsbCx1PW51bGwscj1udWxsLF89bnVsbCxqZS5zdG9wKCksaS5pc1ByZXNlbnRpbmc9ITEsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uZW5kIn0pfWZ1bmN0aW9uIG5lKE1lKXtsZXQgRmU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCB1dD0wO3V0PHkubGVuZ3RoO3V0KyspSS5zZXQoRmVbdXRdLHlbdXRdKTtmb3IobGV0IHV0PTA7dXQ8TWUucmVtb3ZlZC5sZW5ndGg7dXQrKyl7bGV0IFN0PU1lLnJlbW92ZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmKGd0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpTdH0pLEkuZGVsZXRlKFN0KSl9Zm9yKGxldCB1dD0wO3V0PE1lLmFkZGVkLmxlbmd0aDt1dCsrKXtsZXQgU3Q9TWUuYWRkZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmZ3QuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOlN0fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKE1lKXtvPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKE1lKXthPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZDpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKE1lKXtpZihyPU1lLG51bGwhPT1yKXtpZihDPXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0Iix2ZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIixUKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIsbmUpLCEwIT09bS54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PXIucmVuZGVyU3RhdGUubGF5ZXJzfHwhMT09PXQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKXA9bmV3IFhSV2ViR0xMYXllcihyLGUse2FudGlhbGlhczp2b2lkIDAhPT1yLnJlbmRlclN0YXRlLmxheWVyc3x8bS5hbnRpYWxpYXMsYWxwaGE6bS5hbHBoYSxkZXB0aDptLmRlcHRoLHN0ZW5jaWw6bS5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpwfSksXz1uZXcgdmEocC5mcmFtZWJ1ZmZlcldpZHRoLHAuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTtlbHNle2g9bS5hbnRpYWxpYXM7bGV0IEZlPW51bGwsdXQ9bnVsbCxTdD1udWxsO20uZGVwdGgmJihTdD1tLnN0ZW5jaWw/MzUwNTY6MzMxOTAsRmU9bS5zdGVuY2lsP215OlFtLHV0PW0uc3RlbmNpbD9keTp3TSk7bGV0IGd0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09RnI/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6U3Qsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxkPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKGd0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2RdfSksXz1oP25ldyBFTShkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGRlcHRoVGV4dHVyZTpuZXcgUE0oZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHV0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEZlKSxzdGVuY2lsQnVmZmVyOm0uc3RlbmNpbCxpZ25vcmVEZXB0aDpkLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTpuZXcgdmEoZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6enMsdHlwZTpTaCxkZXB0aFRleHR1cmU6bmV3IFBNKGQudGV4dHVyZVdpZHRoLGQudGV4dHVyZUhlaWdodCx1dCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZSksc3RlbmNpbEJ1ZmZlcjptLnN0ZW5jaWwsaWdub3JlRGVwdGg6ZC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9Xy5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLHM9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksamUuc2V0Q29udGV4dChyKSxqZS5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07bGV0IGxlPW5ldyAkLGhlPW5ldyAkO2Z1bmN0aW9uIEooTWUsRmUpe251bGw9PT1GZT9NZS5tYXRyaXhXb3JsZC5jb3B5KE1lLm1hdHJpeCk6TWUubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhGZS5tYXRyaXhXb3JsZCxNZS5tYXRyaXgpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihNZSl7aWYobnVsbD09PXIpcmV0dXJuO1gubmVhcj1PLm5lYXI9QS5uZWFyPU1lLm5lYXIsWC5mYXI9Ty5mYXI9QS5mYXI9TWUuZmFyLCh4ZSE9PVgubmVhcnx8ZmUhPT1YLmZhcikmJihyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6WC5uZWFyLGRlcHRoRmFyOlguZmFyfSkseGU9WC5uZWFyLGZlPVguZmFyKTtsZXQgRmU9TWUucGFyZW50LHV0PVguY2FtZXJhcztKKFgsRmUpO2ZvcihsZXQgZ3Q9MDtndDx1dC5sZW5ndGg7Z3QrKylKKHV0W2d0XSxGZSk7WC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoWC5wb3NpdGlvbixYLnF1YXRlcm5pb24sWC5zY2FsZSksTWUucG9zaXRpb24uY29weShYLnBvc2l0aW9uKSxNZS5xdWF0ZXJuaW9uLmNvcHkoWC5xdWF0ZXJuaW9uKSxNZS5zY2FsZS5jb3B5KFguc2NhbGUpLE1lLm1hdHJpeC5jb3B5KFgubWF0cml4KSxNZS5tYXRyaXhXb3JsZC5jb3B5KFgubWF0cml4V29ybGQpO2xldCBTdD1NZS5jaGlsZHJlbjtmb3IobGV0IGd0PTAsUmU9U3QubGVuZ3RoO2d0PFJlO2d0KyspU3RbZ3RdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09dXQubGVuZ3RoP2Z1bmN0aW9uKE1lLEZlLHV0KXtsZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oRmUubWF0cml4V29ybGQpLGhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih1dC5tYXRyaXhXb3JsZCk7bGV0IFN0PWxlLmRpc3RhbmNlVG8oaGUpLGd0PUZlLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsUmU9dXQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxBbj1ndFsxNF0vKGd0WzEwXS0xKSxFdD1ndFsxNF0vKGd0WzEwXSsxKSxvbj0oZ3RbOV0rMSkvZ3RbNV0sQ2U9KGd0WzldLTEpL2d0WzVdLHZ0PShndFs4XS0xKS9ndFswXSxfdD0oUmVbOF0rMSkvUmVbMF0saWU9QW4qdnQsY3Q9QW4qX3QsWWU9U3QvKC12dCtfdCkseHQ9WWUqLXZ0O0ZlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShNZS5wb3NpdGlvbixNZS5xdWF0ZXJuaW9uLE1lLnNjYWxlKSxNZS50cmFuc2xhdGVYKHh0KSxNZS50cmFuc2xhdGVaKFllKSxNZS5tYXRyaXhXb3JsZC5jb21wb3NlKE1lLnBvc2l0aW9uLE1lLnF1YXRlcm5pb24sTWUuc2NhbGUpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgaHQ9QW4rWWUsc249RXQrWWU7TWUucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoaWUteHQsY3QrKFN0LXh0KSxvbipFdC9zbipodCxDZSpFdC9zbipodCxodCxzbil9KFgsQSxPKTpYLnByb2plY3Rpb25NYXRyaXguY29weShBLnByb2plY3Rpb25NYXRyaXgpfSx0aGlzLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiBYfSx0aGlzLmdldEZvdmVhdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT09ZD9kLmZpeGVkRm92ZWF0aW9uOm51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246dm9pZCAwfSx0aGlzLnNldEZvdmVhdGlvbj1mdW5jdGlvbihNZSl7bnVsbCE9PWQmJihkLmZpeGVkRm92ZWF0aW9uPU1lKSxudWxsIT09cCYmdm9pZCAwIT09cC5maXhlZEZvdmVhdGlvbiYmKHAuZml4ZWRGb3ZlYXRpb249TWUpfTtsZXQgYWU9bnVsbCxqZT1uZXcgZ2xlO2plLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oTWUsRmUpe2lmKGM9RmUuZ2V0Vmlld2VyUG9zZShzKSxmPUZlLG51bGwhPT1jKXtsZXQgU3Q9Yy52aWV3cztudWxsIT09cCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIoXyxwLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldChfKSk7bGV0IGd0PSExO1N0Lmxlbmd0aCE9PVguY2FtZXJhcy5sZW5ndGgmJihYLmNhbWVyYXMubGVuZ3RoPTAsZ3Q9ITApO2ZvcihsZXQgUmU9MDtSZTxTdC5sZW5ndGg7UmUrKyl7bGV0IEFuPVN0W1JlXSxFdD1udWxsO2lmKG51bGwhPT1wKUV0PXAuZ2V0Vmlld3BvcnQoQW4pO2Vsc2V7bGV0IENlPXUuZ2V0Vmlld1N1YkltYWdlKGQsQW4pO0V0PUNlLnZpZXdwb3J0LDA9PT1SZSYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoXyxDZS5jb2xvclRleHR1cmUsZC5pZ25vcmVEZXB0aFZhbHVlcz92b2lkIDA6Q2UuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoXykpfWxldCBvbj1lZVtSZV07b24ubWF0cml4LmZyb21BcnJheShBbi50cmFuc2Zvcm0ubWF0cml4KSxvbi5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShBbi5wcm9qZWN0aW9uTWF0cml4KSxvbi52aWV3cG9ydC5zZXQoRXQueCxFdC55LEV0LndpZHRoLEV0LmhlaWdodCksMD09PVJlJiZYLm1hdHJpeC5jb3B5KG9uLm1hdHJpeCksITA9PT1ndCYmWC5jYW1lcmFzLnB1c2gob24pfX1sZXQgdXQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBTdD0wO1N0PHkubGVuZ3RoO1N0KyspeVtTdF0udXBkYXRlKHV0W1N0XSxGZSxzKTthZSYmYWUoTWUsRmUpLGY9bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihNZSl7YWU9TWV9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBvOGUobil7ZnVuY3Rpb24gaShfLHkpe18ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHkseS5jb2xvciYmXy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvcikseS5lbWlzc2l2ZSYmXy5lbWlzc2l2ZS52YWx1ZS5jb3B5KHkuZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHkuZW1pc3NpdmVJbnRlbnNpdHkpLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuc3BlY3VsYXJNYXAmJihfLnNwZWN1bGFyTWFwLnZhbHVlPXkuc3BlY3VsYXJNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCk7bGV0IEEsTyxJPW4uZ2V0KHkpLmVudk1hcDtJJiYoXy5lbnZNYXAudmFsdWU9SSxfLmZsaXBFbnZNYXAudmFsdWU9SS5pc0N1YmVUZXh0dXJlJiYhMT09PUkuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsXy5yZWZsZWN0aXZpdHkudmFsdWU9eS5yZWZsZWN0aXZpdHksXy5pb3IudmFsdWU9eS5pb3IsXy5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eS5yZWZyYWN0aW9uUmF0aW8pLHkubGlnaHRNYXAmJihfLmxpZ2h0TWFwLnZhbHVlPXkubGlnaHRNYXAsXy5saWdodE1hcEludGVuc2l0eS52YWx1ZT15LmxpZ2h0TWFwSW50ZW5zaXR5KSx5LmFvTWFwJiYoXy5hb01hcC52YWx1ZT15LmFvTWFwLF8uYW9NYXBJbnRlbnNpdHkudmFsdWU9eS5hb01hcEludGVuc2l0eSkseS5tYXA/QT15Lm1hcDp5LnNwZWN1bGFyTWFwP0E9eS5zcGVjdWxhck1hcDp5LmRpc3BsYWNlbWVudE1hcD9BPXkuZGlzcGxhY2VtZW50TWFwOnkubm9ybWFsTWFwP0E9eS5ub3JtYWxNYXA6eS5idW1wTWFwP0E9eS5idW1wTWFwOnkucm91Z2huZXNzTWFwP0E9eS5yb3VnaG5lc3NNYXA6eS5tZXRhbG5lc3NNYXA/QT15Lm1ldGFsbmVzc01hcDp5LmFscGhhTWFwP0E9eS5hbHBoYU1hcDp5LmVtaXNzaXZlTWFwP0E9eS5lbWlzc2l2ZU1hcDp5LmNsZWFyY29hdE1hcD9BPXkuY2xlYXJjb2F0TWFwOnkuY2xlYXJjb2F0Tm9ybWFsTWFwP0E9eS5jbGVhcmNvYXROb3JtYWxNYXA6eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/QT15LmNsZWFyY29hdFJvdWdobmVzc01hcDp5LnNwZWN1bGFySW50ZW5zaXR5TWFwP0E9eS5zcGVjdWxhckludGVuc2l0eU1hcDp5LnNwZWN1bGFyQ29sb3JNYXA/QT15LnNwZWN1bGFyQ29sb3JNYXA6eS50cmFuc21pc3Npb25NYXA/QT15LnRyYW5zbWlzc2lvbk1hcDp5LnRoaWNrbmVzc01hcD9BPXkudGhpY2tuZXNzTWFwOnkuc2hlZW5Db2xvck1hcD9BPXkuc2hlZW5Db2xvck1hcDp5LnNoZWVuUm91Z2huZXNzTWFwJiYoQT15LnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1BJiYoQS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoQT1BLnRleHR1cmUpLCEwPT09QS5tYXRyaXhBdXRvVXBkYXRlJiZBLnVwZGF0ZU1hdHJpeCgpLF8udXZUcmFuc2Zvcm0udmFsdWUuY29weShBLm1hdHJpeCkpLHkuYW9NYXA/Tz15LmFvTWFwOnkubGlnaHRNYXAmJihPPXkubGlnaHRNYXApLHZvaWQgMCE9PU8mJihPLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihPPU8udGV4dHVyZSksITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51djJUcmFuc2Zvcm0udmFsdWUuY29weShPLm1hdHJpeCkpfWZ1bmN0aW9uIGQoXyx5KXtfLnJvdWdobmVzcy52YWx1ZT15LnJvdWdobmVzcyxfLm1ldGFsbmVzcy52YWx1ZT15Lm1ldGFsbmVzcyx5LnJvdWdobmVzc01hcCYmKF8ucm91Z2huZXNzTWFwLnZhbHVlPXkucm91Z2huZXNzTWFwKSx5Lm1ldGFsbmVzc01hcCYmKF8ubWV0YWxuZXNzTWFwLnZhbHVlPXkubWV0YWxuZXNzTWFwKSx5LmVtaXNzaXZlTWFwJiYoXy5lbWlzc2l2ZU1hcC52YWx1ZT15LmVtaXNzaXZlTWFwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldCh5KS5lbnZNYXAmJihfLmVudk1hcEludGVuc2l0eS52YWx1ZT15LmVudk1hcEludGVuc2l0eSl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3JtczpmdW5jdGlvbihfLHkpe18uZm9nQ29sb3IudmFsdWUuY29weSh5LmNvbG9yKSx5LmlzRm9nPyhfLmZvZ05lYXIudmFsdWU9eS5uZWFyLF8uZm9nRmFyLnZhbHVlPXkuZmFyKTp5LmlzRm9nRXhwMiYmKF8uZm9nRGVuc2l0eS52YWx1ZT15LmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbihfLHksSSxBLE8pe3kuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKF8seSk6eS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkoXyx5KSxmdW5jdGlvbihfLHkpe3kuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApfShfLHkpKTp5LmlzTWVzaFRvb25NYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7eS5ncmFkaWVudE1hcCYmKF8uZ3JhZGllbnRNYXAudmFsdWU9eS5ncmFkaWVudE1hcCkseS5lbWlzc2l2ZU1hcCYmKF8uZW1pc3NpdmVNYXAudmFsdWU9eS5lbWlzc2l2ZU1hcCkseS5idW1wTWFwJiYoXy5idW1wTWFwLnZhbHVlPXkuYnVtcE1hcCxfLmJ1bXBTY2FsZS52YWx1ZT15LmJ1bXBTY2FsZSwxPT09eS5zaWRlJiYoXy5idW1wU2NhbGUudmFsdWUqPS0xKSkseS5ub3JtYWxNYXAmJihfLm5vcm1hbE1hcC52YWx1ZT15Lm5vcm1hbE1hcCxfLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeS5ub3JtYWxTY2FsZSksMT09PXkuc2lkZSYmXy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseS5kaXNwbGFjZW1lbnRNYXAmJihfLmRpc3BsYWNlbWVudE1hcC52YWx1ZT15LmRpc3BsYWNlbWVudE1hcCxfLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXkuZGlzcGxhY2VtZW50U2NhbGUsXy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXkuZGlzcGxhY2VtZW50Qmlhcyl9KF8seSkpOnkuaXNNZXNoUGhvbmdNYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7Xy5zcGVjdWxhci52YWx1ZS5jb3B5KHkuc3BlY3VsYXIpLF8uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHkuc2hpbmluZXNzLDFlLTQpLHkuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApLHkuYnVtcE1hcCYmKF8uYnVtcE1hcC52YWx1ZT15LmJ1bXBNYXAsXy5idW1wU2NhbGUudmFsdWU9eS5idW1wU2NhbGUsMT09PXkuc2lkZSYmKF8uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHkubm9ybWFsTWFwJiYoXy5ub3JtYWxNYXAudmFsdWU9eS5ub3JtYWxNYXAsXy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkubm9ybWFsU2NhbGUpLDE9PT15LnNpZGUmJl8ubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHkuZGlzcGxhY2VtZW50TWFwJiYoXy5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eS5kaXNwbGFjZW1lbnRNYXAsXy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT15LmRpc3BsYWNlbWVudFNjYWxlLF8uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT15LmRpc3BsYWNlbWVudEJpYXMpfShfLHkpKTp5LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoXyx5KSx5LmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEkpe2QoXyx5KSxfLmlvci52YWx1ZT15Lmlvcix5LnNoZWVuPjAmJihfLnNoZWVuQ29sb3IudmFsdWUuY29weSh5LnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHkuc2hlZW4pLF8uc2hlZW5Sb3VnaG5lc3MudmFsdWU9eS5zaGVlblJvdWdobmVzcyx5LnNoZWVuQ29sb3JNYXAmJihfLnNoZWVuQ29sb3JNYXAudmFsdWU9eS5zaGVlbkNvbG9yTWFwKSx5LnNoZWVuUm91Z2huZXNzTWFwJiYoXy5zaGVlblJvdWdobmVzc01hcC52YWx1ZT15LnNoZWVuUm91Z2huZXNzTWFwKSkseS5jbGVhcmNvYXQ+MCYmKF8uY2xlYXJjb2F0LnZhbHVlPXkuY2xlYXJjb2F0LF8uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXkuY2xlYXJjb2F0Um91Z2huZXNzLHkuY2xlYXJjb2F0TWFwJiYoXy5jbGVhcmNvYXRNYXAudmFsdWU9eS5jbGVhcmNvYXRNYXApLHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoXy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHkuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoXy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLF8uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXkuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT15LnNpZGUmJl8uY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSx5LnRyYW5zbWlzc2lvbj4wJiYoXy50cmFuc21pc3Npb24udmFsdWU9eS50cmFuc21pc3Npb24sXy50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPUkudGV4dHVyZSxfLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChJLndpZHRoLEkuaGVpZ2h0KSx5LnRyYW5zbWlzc2lvbk1hcCYmKF8udHJhbnNtaXNzaW9uTWFwLnZhbHVlPXkudHJhbnNtaXNzaW9uTWFwKSxfLnRoaWNrbmVzcy52YWx1ZT15LnRoaWNrbmVzcyx5LnRoaWNrbmVzc01hcCYmKF8udGhpY2tuZXNzTWFwLnZhbHVlPXkudGhpY2tuZXNzTWFwKSxfLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9eS5hdHRlbnVhdGlvbkRpc3RhbmNlLF8uYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHkuYXR0ZW51YXRpb25Db2xvcikpLF8uc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9eS5zcGVjdWxhckludGVuc2l0eSxfLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSh5LnNwZWN1bGFyQ29sb3IpLHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihfLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXkuc3BlY3VsYXJJbnRlbnNpdHlNYXApLHkuc3BlY3VsYXJDb2xvck1hcCYmKF8uc3BlY3VsYXJDb2xvck1hcC52YWx1ZT15LnNwZWN1bGFyQ29sb3JNYXApfShfLHksTyk6ZChfLHkpKTp5LmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5Lm1hdGNhcCYmKF8ubWF0Y2FwLnZhbHVlPXkubWF0Y2FwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxfLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeS5yZWZlcmVuY2VQb3NpdGlvbiksXy5uZWFyRGlzdGFuY2UudmFsdWU9eS5uZWFyRGlzdGFuY2UsXy5mYXJEaXN0YW5jZS52YWx1ZT15LmZhckRpc3RhbmNlfShfLHkpKTp5LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc0xpbmVCYXNpY01hdGVyaWFsPyhmdW5jdGlvbihfLHkpe18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHl9KF8seSkseS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmZnVuY3Rpb24oXyx5KXtfLmRhc2hTaXplLnZhbHVlPXkuZGFzaFNpemUsXy50b3RhbFNpemUudmFsdWU9eS5kYXNoU2l6ZSt5LmdhcFNpemUsXy5zY2FsZS52YWx1ZT15LnNjYWxlfShfLHkpKTp5LmlzUG9pbnRzTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEksQSl7bGV0IE87Xy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSxfLnNpemUudmFsdWU9eS5zaXplKkksXy5zY2FsZS52YWx1ZT0uNSpBLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/Tz15Lm1hcDp5LmFscGhhTWFwJiYoTz15LmFscGhhTWFwKSx2b2lkIDAhPT1PJiYoITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KE8ubWF0cml4KSl9KF8seSxJLEEpOnkuaXNTcHJpdGVNYXRlcmlhbD9mdW5jdGlvbihfLHkpe2xldCBJO18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHksXy5yb3RhdGlvbi52YWx1ZT15LnJvdGF0aW9uLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/ST15Lm1hcDp5LmFscGhhTWFwJiYoST15LmFscGhhTWFwKSx2b2lkIDAhPT1JJiYoITA9PT1JLm1hdHJpeEF1dG9VcGRhdGUmJkkudXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEkubWF0cml4KSl9KF8seSk6eS5pc1NoYWRvd01hdGVyaWFsPyhfLmNvbG9yLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSk6eS5pc1NoYWRlck1hdGVyaWFsJiYoeS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gWmkobj17fSl7bGV0IHQ9dm9pZCAwIT09bi5jYW52YXM/bi5jYW52YXM6ZnVuY3Rpb24oKXtsZXQgbj1TTSgiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59KCksZT12b2lkIDAhPT1uLmNvbnRleHQ/bi5jb250ZXh0Om51bGwsaT12b2lkIDAhPT1uLmFscGhhJiZuLmFscGhhLHI9dm9pZCAwPT09bi5kZXB0aHx8bi5kZXB0aCxvPXZvaWQgMD09PW4uc3RlbmNpbHx8bi5zdGVuY2lsLHM9dm9pZCAwIT09bi5hbnRpYWxpYXMmJm4uYW50aWFsaWFzLGE9dm9pZCAwPT09bi5wcmVtdWx0aXBsaWVkQWxwaGF8fG4ucHJlbXVsdGlwbGllZEFscGhhLGw9dm9pZCAwIT09bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJm4ucHJlc2VydmVEcmF3aW5nQnVmZmVyLGM9dm9pZCAwIT09bi5wb3dlclByZWZlcmVuY2U/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9dm9pZCAwIT09bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsZD1udWxsLHA9bnVsbCxoPVtdLGY9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1EaCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9MCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgbT10aGlzLEM9ITEsXz0wLHk9MCxJPW51bGwsQT0tMSxPPW51bGwsZWU9bmV3IHRyLFg9bmV3IHRyLHhlPW51bGwsZmU9dC53aWR0aCx2ZT10LmhlaWdodCxUPTEsbmU9bnVsbCxsZT1udWxsLGhlPW5ldyB0cigwLDAsZmUsdmUpLHllPW5ldyB0cigwLDAsZmUsdmUpLEo9ITEsYWU9bmV3IHZ5LG1lPSExLGplPSExLE1lPW51bGwsRmU9bmV3IE1uLHV0PW5ldyAkLFN0PXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gZ3QoKXtyZXR1cm4gbnVsbD09PUk/VDoxfWxldCBFdCxvbixDZSx2dCxfdCxpZSxjdCxZZSx4dCxodCxzbixTbixvaSxVaSx6aSxRLEYsVmUsQ3QsdG4sQmUsZ24sbG4sUmU9ZTtmdW5jdGlvbiBBbihTLEwpe2ZvcihsZXQgcT0wO3E8Uy5sZW5ndGg7cSsrKXtsZXQgY2U9dC5nZXRDb250ZXh0KFNbcV0sTCk7aWYobnVsbCE9PWNlKXJldHVybiBjZX1yZXR1cm4gbnVsbH10cnl7bGV0IFM9e2FscGhhOiEwLGRlcHRoOnIsc3RlbmNpbDpvLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTphLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLCJ0aHJlZS5qcyByMTM3IiksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdWUsITEpLG51bGw9PT1SZSl7bGV0IEw9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKCEwPT09bS5pc1dlYkdMMVJlbmRlcmVyJiZMLnNoaWZ0KCksUmU9QW4oTCxTKSxudWxsPT09UmUpdGhyb3cgQW4oTCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX12b2lkIDA9PT1SZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQmJihSZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKFMpe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrUy5tZXNzYWdlKSxTfWZ1bmN0aW9uIEZ0KCl7RXQ9bmV3IERVZShSZSksb249bmV3IENVZShSZSxFdCxuKSxFdC5pbml0KG9uKSxnbj1uZXcgaThlKFJlLEV0LG9uKSxDZT1uZXcgdDhlKFJlLEV0LG9uKSx2dD1uZXcgUFVlKFJlKSxfdD1uZXcgR3plLGllPW5ldyBuOGUoUmUsRXQsQ2UsX3Qsb24sZ24sdnQpLGN0PW5ldyBNVWUobSksWWU9bmV3IFRVZShtKSx4dD1uZXcgcTVlKFJlLG9uKSxsbj1uZXcgYlVlKFJlLEV0LHh0LG9uKSxodD1uZXcgQVVlKFJlLHh0LHZ0LGxuKSxzbj1uZXcgRlVlKFJlLGh0LHh0LHZ0KSxDdD1uZXcga1VlKFJlLG9uLGllKSxRPW5ldyB3VWUoX3QpLFNuPW5ldyBqemUobSxjdCxZZSxFdCxvbixsbixRKSxvaT1uZXcgbzhlKF90KSxVaT1uZXcgcXplLHppPW5ldyBKemUoRXQsb24pLFZlPW5ldyB5VWUobSxjdCxDZSxzbixpLGEpLEY9bmV3IEVsZShtLHNuLG9uKSx0bj1uZXcgeFVlKFJlLEV0LHZ0LG9uKSxCZT1uZXcgSVVlKFJlLEV0LHZ0LG9uKSx2dC5wcm9ncmFtcz1Tbi5wcm9ncmFtcyxtLmNhcGFiaWxpdGllcz1vbixtLmV4dGVuc2lvbnM9RXQsbS5wcm9wZXJ0aWVzPV90LG0ucmVuZGVyTGlzdHM9VWksbS5zaGFkb3dNYXA9RixtLnN0YXRlPUNlLG0uaW5mbz12dH1GdCgpO2xldCBrdD1uZXcgQVUobSxSZSk7ZnVuY3Rpb24gTG4oUyl7Uy5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksQz0hMH1mdW5jdGlvbiB1ZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLEM9ITE7bGV0IFM9dnQuYXV0b1Jlc2V0LEw9Ri5lbmFibGVkLHE9Ri5hdXRvVXBkYXRlLFo9Ri5uZWVkc1VwZGF0ZSxjZT1GLnR5cGU7RnQoKSx2dC5hdXRvUmVzZXQ9UyxGLmVuYWJsZWQ9TCxGLmF1dG9VcGRhdGU9cSxGLm5lZWRzVXBkYXRlPVosRi50eXBlPWNlfWZ1bmN0aW9uIEp0KFMpe2xldCBMPVMudGFyZ2V0O0wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSnQpLGZ1bmN0aW9uKFMpeyhmdW5jdGlvbihTKXtsZXQgTD1fdC5nZXQoUykucHJvZ3JhbXM7dm9pZCAwIT09TCYmKEwuZm9yRWFjaChmdW5jdGlvbihxKXtTbi5yZWxlYXNlUHJvZ3JhbShxKX0pLFMuaXNTaGFkZXJNYXRlcmlhbCYmU24ucmVsZWFzZVNoYWRlckNhY2hlKFMpKX0pKFMpLF90LnJlbW92ZShTKX0oTCl9dGhpcy54cj1rdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUmV9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gUmUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IFM9RXQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtTJiZTLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBTPUV0LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7UyYmUy5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gVH0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKFMpe3ZvaWQgMCE9PVMmJihUPVMsdGhpcy5zZXRTaXplKGZlLHZlLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihTKXtyZXR1cm4gUy5zZXQoZmUsdmUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oUyxMLHEpe2t0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihmZT1TLHZlPUwsdC53aWR0aD1NYXRoLmZsb29yKFMqVCksdC5oZWlnaHQ9TWF0aC5mbG9vcihMKlQpLCExIT09cSYmKHQuc3R5bGUud2lkdGg9UysicHgiLHQuc3R5bGUuaGVpZ2h0PUwrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuc2V0KGZlKlQsdmUqVCkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihTLEwscSl7ZmU9Uyx2ZT1MLFQ9cSx0LndpZHRoPU1hdGguZmxvb3IoUypxKSx0LmhlaWdodD1NYXRoLmZsb29yKEwqcSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShlZSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShoZSl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyxMLHEsWil7Uy5pc1ZlY3RvcjQ/aGUuc2V0KFMueCxTLnksUy56LFMudyk6aGUuc2V0KFMsTCxxLFopLENlLnZpZXdwb3J0KGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weSh5ZSl9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihTLEwscSxaKXtTLmlzVmVjdG9yND95ZS5zZXQoUy54LFMueSxTLnosUy53KTp5ZS5zZXQoUyxMLHEsWiksQ2Uuc2Npc3NvcihYLmNvcHkoeWUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIEp9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oUyl7Q2Uuc2V0U2Npc3NvclRlc3QoSj1TKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKFMpe25lPVN9LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKFMpe2xlPVN9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihTKXtyZXR1cm4gUy5jb3B5KFZlLmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe1ZlLnNldENsZWFyQ29sb3IuYXBwbHkoVmUsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIFZlLmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7VmUuc2V0Q2xlYXJBbHBoYS5hcHBseShWZSxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKFMsTCxxKXtsZXQgWj0wOyh2b2lkIDA9PT1TfHxTKSYmKFp8PTE2Mzg0KSwodm9pZCAwPT09THx8TCkmJihafD0yNTYpLCh2b2lkIDA9PT1xfHxxKSYmKFp8PTEwMjQpLFJlLmNsZWFyKFopfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsTG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHVlLCExKSxVaS5kaXNwb3NlKCksemkuZGlzcG9zZSgpLF90LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksWWUuZGlzcG9zZSgpLHNuLmRpc3Bvc2UoKSxsbi5kaXNwb3NlKCksU24uZGlzcG9zZSgpLGt0LmRpc3Bvc2UoKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLG1pKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixtciksTWUmJihNZS5kaXNwb3NlKCksTWU9bnVsbCksb3Muc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihTLEwscSxaLGNlLFVlKXtudWxsPT09TCYmKEw9U3QpO2xldCAkZT1jZS5pc01lc2gmJmNlLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxXZT1mdW5jdGlvbihTLEwscSxaLGNlKXshMCE9PUwuaXNTY2VuZSYmKEw9U3QpLGllLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFVlPUwuZm9nLFdlPW51bGw9PT1JP20ub3V0cHV0RW5jb2Rpbmc6ITA9PT1JLmlzWFJSZW5kZXJUYXJnZXQ/SS50ZXh0dXJlLmVuY29kaW5nOkRoLHJ0PShaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/WWU6Y3QpLmdldChaLmVudk1hcHx8KFouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9MLmVudmlyb25tZW50Om51bGwpKSxkdD0hMD09PVoudmVydGV4Q29sb3JzJiYhIXEuYXR0cmlidXRlcy5jb2xvciYmND09PXEuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxUdD0hIVoubm9ybWFsTWFwJiYhIXEuYXR0cmlidXRlcy50YW5nZW50LEF0PSEhcS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sY249ISFxLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsSmk9cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAseGk9Wi50b25lTWFwcGVkP20udG9uZU1hcHBpbmc6MCxtbj1fdC5nZXQoWiksUm49cC5zdGF0ZS5saWdodHM7ITAhPT1tZXx8ITAhPT1qZSYmUz09PU98fFEuc2V0U3RhdGUoWixTLFM9PT1PJiZaLmlkPT09QSk7bGV0IER0PSExO1oudmVyc2lvbj09PW1uLl9fdmVyc2lvbj8obW4ubmVlZHNMaWdodHMmJm1uLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PVJuLnN0YXRlLnZlcnNpb258fG1uLm91dHB1dEVuY29kaW5nIT09V2V8fGNlLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1tbi5pbnN0YW5jaW5nfHwhY2UuaXNJbnN0YW5jZWRNZXNoJiYhMD09PW1uLmluc3RhbmNpbmd8fGNlLmlzU2tpbm5lZE1lc2gmJiExPT09bW4uc2tpbm5pbmd8fCFjZS5pc1NraW5uZWRNZXNoJiYhMD09PW1uLnNraW5uaW5nfHxtbi5lbnZNYXAhPT1ydHx8Wi5mb2cmJm1uLmZvZyE9PVVlfHx2b2lkIDAhPT1tbi5udW1DbGlwcGluZ1BsYW5lcyYmKG1uLm51bUNsaXBwaW5nUGxhbmVzIT09US5udW1QbGFuZXN8fG1uLm51bUludGVyc2VjdGlvbiE9PVEubnVtSW50ZXJzZWN0aW9uKXx8bW4udmVydGV4QWxwaGFzIT09ZHR8fG1uLnZlcnRleFRhbmdlbnRzIT09VHR8fG1uLm1vcnBoVGFyZ2V0cyE9PUF0fHxtbi5tb3JwaE5vcm1hbHMhPT1jbnx8bW4udG9uZU1hcHBpbmchPT14aXx8ITA9PT1vbi5pc1dlYkdMMiYmbW4ubW9ycGhUYXJnZXRzQ291bnQhPT1KaSkmJihEdD0hMCk6KER0PSEwLG1uLl9fdmVyc2lvbj1aLnZlcnNpb24pO2xldCBnaT1tbi5jdXJyZW50UHJvZ3JhbTshMD09PUR0JiYoZ2k9QnkoWixMLGNlKSk7bGV0IGVpPSExLFVuPSExLFhuPSExLFZ0PWdpLmdldFVuaWZvcm1zKCksamk9bW4udW5pZm9ybXM7aWYoQ2UudXNlUHJvZ3JhbShnaS5wcm9ncmFtKSYmKGVpPSEwLFVuPSEwLFhuPSEwKSxaLmlkIT09QSYmKEE9Wi5pZCxVbj0hMCksZWl8fE8hPT1TKXtpZihWdC5zZXRWYWx1ZShSZSwicHJvamVjdGlvbk1hdHJpeCIsUy5wcm9qZWN0aW9uTWF0cml4KSxvbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZWdC5zZXRWYWx1ZShSZSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coUy5mYXIrMSkvTWF0aC5MTjIpKSxPIT09UyYmKE89UyxVbj0hMCxYbj0hMCksWi5pc1NoYWRlck1hdGVyaWFsfHxaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouZW52TWFwKXtsZXQgd249VnQubWFwLmNhbWVyYVBvc2l0aW9uO3ZvaWQgMCE9PXduJiZ3bi5zZXRWYWx1ZShSZSx1dC5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCkpfShaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Wi5pc01lc2hCYXNpY01hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouaXNTaGFkZXJNYXRlcmlhbCkmJlZ0LnNldFZhbHVlKFJlLCJpc09ydGhvZ3JhcGhpYyIsITA9PT1TLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwoWi5pc01lc2hQaG9uZ01hdGVyaWFsfHxaLmlzTWVzaFRvb25NYXRlcmlhbHx8Wi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fFouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Wi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxaLmlzU2hhZGVyTWF0ZXJpYWx8fFouaXNTaGFkb3dNYXRlcmlhbHx8Y2UuaXNTa2lubmVkTWVzaCkmJlZ0LnNldFZhbHVlKFJlLCJ2aWV3TWF0cml4IixTLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoY2UuaXNTa2lubmVkTWVzaCl7VnQuc2V0T3B0aW9uYWwoUmUsY2UsImJpbmRNYXRyaXgiKSxWdC5zZXRPcHRpb25hbChSZSxjZSwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgd249Y2Uuc2tlbGV0b247d24mJihvbi5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09d24uYm9uZVRleHR1cmUmJnduLmNvbXB1dGVCb25lVGV4dHVyZSgpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZSIsd24uYm9uZVRleHR1cmUsaWUpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZVNpemUiLHduLmJvbmVUZXh0dXJlU2l6ZSkpOlZ0LnNldE9wdGlvbmFsKFJlLHduLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFxJiYodm9pZCAwIT09cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb258fHZvaWQgMCE9PXEubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCkmJkN0LnVwZGF0ZShjZSxxLFosZ2kpLChVbnx8bW4ucmVjZWl2ZVNoYWRvdyE9PWNlLnJlY2VpdmVTaGFkb3cpJiYobW4ucmVjZWl2ZVNoYWRvdz1jZS5yZWNlaXZlU2hhZG93LFZ0LnNldFZhbHVlKFJlLCJyZWNlaXZlU2hhZG93IixjZS5yZWNlaXZlU2hhZG93KSksVW4mJihWdC5zZXRWYWx1ZShSZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxtbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oUyxMKXtTLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPUwsUy5saWdodFByb2JlLm5lZWRzVXBkYXRlPUwsUy5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9TCxTLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPUwsUy5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9TCxTLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9TH0oamksWG4pLFVlJiZaLmZvZyYmb2kucmVmcmVzaEZvZ1VuaWZvcm1zKGppLFVlKSxvaS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhqaSxaLFQsdmUsTWUpLFRoLnVwbG9hZChSZSxtbi51bmlmb3Jtc0xpc3QsamksaWUpKSxaLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09Wi51bmlmb3Jtc05lZWRVcGRhdGUmJihUaC51cGxvYWQoUmUsbW4udW5pZm9ybXNMaXN0LGppLGllKSxaLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksWi5pc1Nwcml0ZU1hdGVyaWFsJiZWdC5zZXRWYWx1ZShSZSwiY2VudGVyIixjZS5jZW50ZXIpLFZ0LnNldFZhbHVlKFJlLCJtb2RlbFZpZXdNYXRyaXgiLGNlLm1vZGVsVmlld01hdHJpeCksVnQuc2V0VmFsdWUoUmUsIm5vcm1hbE1hdHJpeCIsY2Uubm9ybWFsTWF0cml4KSxWdC5zZXRWYWx1ZShSZSwibW9kZWxNYXRyaXgiLGNlLm1hdHJpeFdvcmxkKSxnaX0oUyxMLHEsWixjZSk7Q2Uuc2V0TWF0ZXJpYWwoWiwkZSk7bGV0IHJ0PXEuaW5kZXgsZHQ9cS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1ydCl7aWYodm9pZCAwPT09ZHR8fDA9PT1kdC5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09cnQuY291bnQpcmV0dXJuO2xldCBUdD0xOyEwPT09Wi53aXJlZnJhbWUmJihydD1odC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUocSksVHQ9MiksbG4uc2V0dXAoY2UsWixXZSxxLHJ0KTtsZXQgQXQsY249dG47bnVsbCE9PXJ0JiYoQXQ9eHQuZ2V0KHJ0KSxjbj1CZSxjbi5zZXRJbmRleChBdCkpO2xldCBKaT1udWxsIT09cnQ/cnQuY291bnQ6ZHQuY291bnQseGk9cS5kcmF3UmFuZ2Uuc3RhcnQqVHQsbW49cS5kcmF3UmFuZ2UuY291bnQqVHQsUm49bnVsbCE9PVVlP1VlLnN0YXJ0KlR0OjAsRHQ9bnVsbCE9PVVlP1VlLmNvdW50KlR0OjEvMCxnaT1NYXRoLm1heCh4aSxSbiksZWk9TWF0aC5taW4oSmkseGkrbW4sUm4rRHQpLTEsVW49TWF0aC5tYXgoMCxlaS1naSsxKTtpZigwIT09VW4pe2lmKGNlLmlzTWVzaCkhMD09PVoud2lyZWZyYW1lPyhDZS5zZXRMaW5lV2lkdGgoWi53aXJlZnJhbWVMaW5ld2lkdGgqZ3QoKSksY24uc2V0TW9kZSgxKSk6Y24uc2V0TW9kZSg0KTtlbHNlIGlmKGNlLmlzTGluZSl7bGV0IFhuPVoubGluZXdpZHRoO3ZvaWQgMD09PVhuJiYoWG49MSksQ2Uuc2V0TGluZVdpZHRoKFhuKmd0KCkpLGNuLnNldE1vZGUoY2UuaXNMaW5lU2VnbWVudHM/MTpjZS5pc0xpbmVMb29wPzI6Myl9ZWxzZSBjZS5pc1BvaW50cz9jbi5zZXRNb2RlKDApOmNlLmlzU3ByaXRlJiZjbi5zZXRNb2RlKDQpO2lmKGNlLmlzSW5zdGFuY2VkTWVzaCljbi5yZW5kZXJJbnN0YW5jZXMoZ2ksVW4sY2UuY291bnQpO2Vsc2UgaWYocS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgWG49TWF0aC5taW4ocS5pbnN0YW5jZUNvdW50LHEuX21heEluc3RhbmNlQ291bnQpO2NuLnJlbmRlckluc3RhbmNlcyhnaSxVbixYbil9ZWxzZSBjbi5yZW5kZXIoZ2ksVW4pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKFMsTCl7cD16aS5nZXQoUykscC5pbml0KCksZi5wdXNoKHApLFMudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKHEpe3EuaXNMaWdodCYmcS5sYXllcnMudGVzdChMLmxheWVycykmJihwLnB1c2hMaWdodChxKSxxLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhxKSl9KSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLFMudHJhdmVyc2UoZnVuY3Rpb24ocSl7bGV0IFo9cS5tYXRlcmlhbDtpZihaKWlmKEFycmF5LmlzQXJyYXkoWikpZm9yKGxldCBjZT0wO2NlPFoubGVuZ3RoO2NlKyspQnkoWltjZV0sUyxxKTtlbHNlIEJ5KFosUyxxKX0pLGYucG9wKCkscD1udWxsfTtsZXQgR2U9bnVsbDtmdW5jdGlvbiBtaSgpe29zLnN0b3AoKX1mdW5jdGlvbiBtcigpe29zLnN0YXJ0KCl9bGV0IG9zPW5ldyBnbGU7ZnVuY3Rpb24gVHIoUyxMLHEsWil7aWYoITE9PT1TLnZpc2libGUpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoTC5sYXllcnMpKWlmKFMuaXNHcm91cClxPVMucmVuZGVyT3JkZXI7ZWxzZSBpZihTLmlzTE9EKSEwPT09Uy5hdXRvVXBkYXRlJiZTLnVwZGF0ZShMKTtlbHNlIGlmKFMuaXNMaWdodClwLnB1c2hMaWdodChTKSxTLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhTKTtlbHNlIGlmKFMuaXNTcHJpdGUpe2lmKCFTLmZydXN0dW1DdWxsZWR8fGFlLmludGVyc2VjdHNTcHJpdGUoUykpe1omJnV0LnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRmUpO2xldCAkZT1zbi51cGRhdGUoUyksV2U9Uy5tYXRlcmlhbDtXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9fWVsc2UgaWYoKFMuaXNNZXNofHxTLmlzTGluZXx8Uy5pc1BvaW50cykmJihTLmlzU2tpbm5lZE1lc2gmJlMuc2tlbGV0b24uZnJhbWUhPT12dC5yZW5kZXIuZnJhbWUmJihTLnNrZWxldG9uLnVwZGF0ZSgpLFMuc2tlbGV0b24uZnJhbWU9dnQucmVuZGVyLmZyYW1lKSwhUy5mcnVzdHVtQ3VsbGVkfHxhZS5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7WiYmdXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChGZSk7bGV0ICRlPXNuLnVwZGF0ZShTKSxXZT1TLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoV2UpKXtsZXQgcnQ9JGUuZ3JvdXBzO2ZvcihsZXQgZHQ9MCxUdD1ydC5sZW5ndGg7ZHQ8VHQ7ZHQrKyl7bGV0IEF0PXJ0W2R0XSxjbj1XZVtBdC5tYXRlcmlhbEluZGV4XTtjbiYmY24udmlzaWJsZSYmZC5wdXNoKFMsJGUsY24scSx1dC56LEF0KX19ZWxzZSBXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9bGV0IFVlPVMuY2hpbGRyZW47Zm9yKGxldCAkZT0wLFdlPVVlLmxlbmd0aDskZTxXZTskZSsrKVRyKFVlWyRlXSxMLHEsWil9ZnVuY3Rpb24gZWwoUyxMLHEsWil7bGV0IGNlPVMub3BhcXVlLFVlPVMudHJhbnNtaXNzaXZlLCRlPVMudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcocSksVWUubGVuZ3RoPjAmJmZ1bmN0aW9uKFMsTCxxKXtudWxsPT09TWUmJihNZT1uZXcoITA9PT1zJiYhMD09PW9uLmlzV2ViR0wyP0VNOnZhKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT1nbi5jb252ZXJ0KHV5KT91eTpTaCxtaW5GaWx0ZXI6MTAwOCxtYWdGaWx0ZXI6SW8sd3JhcFM6WmEsd3JhcFQ6WmEsdXNlUmVuZGVyVG9UZXh0dXJlOkV0LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KSk7bGV0IFo9bS5nZXRSZW5kZXJUYXJnZXQoKTttLnNldFJlbmRlclRhcmdldChNZSksbS5jbGVhcigpO2xldCBjZT1tLnRvbmVNYXBwaW5nO20udG9uZU1hcHBpbmc9MCxWbChTLEwscSksbS50b25lTWFwcGluZz1jZSxpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChNZSksaWUudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKE1lKSxtLnNldFJlbmRlclRhcmdldChaKX0oY2UsTCxxKSxaJiZDZS52aWV3cG9ydChlZS5jb3B5KFopKSxjZS5sZW5ndGg+MCYmVmwoY2UsTCxxKSxVZS5sZW5ndGg+MCYmVmwoVWUsTCxxKSwkZS5sZW5ndGg+MCYmVmwoJGUsTCxxKX1mdW5jdGlvbiBWbChTLEwscSl7bGV0IFo9ITA9PT1MLmlzU2NlbmU/TC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBjZT0wLFVlPVMubGVuZ3RoO2NlPFVlO2NlKyspe2xldCAkZT1TW2NlXSxXZT0kZS5vYmplY3QscnQ9JGUuZ2VvbWV0cnksZHQ9bnVsbD09PVo/JGUubWF0ZXJpYWw6WixUdD0kZS5ncm91cDtXZS5sYXllcnMudGVzdChxLmxheWVycykmJkNPKFdlLEwscSxydCxkdCxUdCl9fWZ1bmN0aW9uIENPKFMsTCxxLFosY2UsVWUpe1Mub25CZWZvcmVSZW5kZXIobSxMLHEsWixjZSxVZSksUy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhxLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKSxTLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoUy5tb2RlbFZpZXdNYXRyaXgpLGNlLm9uQmVmb3JlUmVuZGVyKG0sTCxxLFosUyxVZSksITA9PT1jZS50cmFuc3BhcmVudCYmMj09PWNlLnNpZGU/KGNlLnNpZGU9MSxjZS5uZWVkc1VwZGF0ZT0hMCxtLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxjZS5zaWRlPTAsY2UubmVlZHNVcGRhdGU9ITAsbS5yZW5kZXJCdWZmZXJEaXJlY3QocSxMLFosY2UsUyxVZSksY2Uuc2lkZT0yKTptLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxTLm9uQWZ0ZXJSZW5kZXIobSxMLHEsWixjZSxVZSl9ZnVuY3Rpb24gQnkoUyxMLHEpeyEwIT09TC5pc1NjZW5lJiYoTD1TdCk7bGV0IFo9X3QuZ2V0KFMpLGNlPXAuc3RhdGUubGlnaHRzLCRlPWNlLnN0YXRlLnZlcnNpb24sV2U9U24uZ2V0UGFyYW1ldGVycyhTLGNlLnN0YXRlLHAuc3RhdGUuc2hhZG93c0FycmF5LEwscSkscnQ9U24uZ2V0UHJvZ3JhbUNhY2hlS2V5KFdlKSxkdD1aLnByb2dyYW1zO1ouZW52aXJvbm1lbnQ9Uy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0wuZW52aXJvbm1lbnQ6bnVsbCxaLmZvZz1MLmZvZyxaLmVudk1hcD0oUy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1llOmN0KS5nZXQoUy5lbnZNYXB8fFouZW52aXJvbm1lbnQpLHZvaWQgMD09PWR0JiYoUy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZHQ9bmV3IE1hcCxaLnByb2dyYW1zPWR0KTtsZXQgVHQ9ZHQuZ2V0KHJ0KTtpZih2b2lkIDAhPT1UdCl7aWYoWi5jdXJyZW50UHJvZ3JhbT09PVR0JiZaLmxpZ2h0c1N0YXRlVmVyc2lvbj09PSRlKXJldHVybiBuUyhTLFdlKSxUdH1lbHNlIFdlLnVuaWZvcm1zPVNuLmdldFVuaWZvcm1zKFMpLFMub25CdWlsZChxLFdlLG0pLFMub25CZWZvcmVDb21waWxlKFdlLG0pLFR0PVNuLmFjcXVpcmVQcm9ncmFtKFdlLHJ0KSxkdC5zZXQocnQsVHQpLFoudW5pZm9ybXM9V2UudW5pZm9ybXM7bGV0IEF0PVoudW5pZm9ybXM7KCFTLmlzU2hhZGVyTWF0ZXJpYWwmJiFTLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09Uy5jbGlwcGluZykmJihBdC5jbGlwcGluZ1BsYW5lcz1RLnVuaWZvcm0pLG5TKFMsV2UpLFoubmVlZHNMaWdodHM9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxTLmlzTWVzaFRvb25NYXRlcmlhbHx8Uy5pc01lc2hQaG9uZ01hdGVyaWFsfHxTLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFMuaXNTaGFkb3dNYXRlcmlhbHx8Uy5pc1NoYWRlck1hdGVyaWFsJiYhMD09PVMubGlnaHRzfShTKSxaLmxpZ2h0c1N0YXRlVmVyc2lvbj0kZSxaLm5lZWRzTGlnaHRzJiYoQXQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9Y2Uuc3RhdGUuYW1iaWVudCxBdC5saWdodFByb2JlLnZhbHVlPWNlLnN0YXRlLnByb2JlLEF0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsLEF0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LEF0LnNwb3RMaWdodHMudmFsdWU9Y2Uuc3RhdGUuc3BvdCxBdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLnNwb3RTaGFkb3csQXQucmVjdEFyZWFMaWdodHMudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWEsQXQubHRjXzEudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWFMVEMxLEF0Lmx0Y18yLnZhbHVlPWNlLnN0YXRlLnJlY3RBcmVhTFRDMixBdC5wb2ludExpZ2h0cy52YWx1ZT1jZS5zdGF0ZS5wb2ludCxBdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvdyxBdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmhlbWksQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsQXQuc3BvdFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5zcG90U2hhZG93TWFwLEF0LnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxBdC5wb2ludFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hcCxBdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IGNuPVR0LmdldFVuaWZvcm1zKCksSmk9VGguc2VxV2l0aFZhbHVlKGNuLnNlcSxBdCk7cmV0dXJuIFouY3VycmVudFByb2dyYW09VHQsWi51bmlmb3Jtc0xpc3Q9SmksVHR9ZnVuY3Rpb24gblMoUyxMKXtsZXQgcT1fdC5nZXQoUyk7cS5vdXRwdXRFbmNvZGluZz1MLm91dHB1dEVuY29kaW5nLHEuaW5zdGFuY2luZz1MLmluc3RhbmNpbmcscS5za2lubmluZz1MLnNraW5uaW5nLHEubW9ycGhUYXJnZXRzPUwubW9ycGhUYXJnZXRzLHEubW9ycGhOb3JtYWxzPUwubW9ycGhOb3JtYWxzLHEubW9ycGhUYXJnZXRzQ291bnQ9TC5tb3JwaFRhcmdldHNDb3VudCxxLm51bUNsaXBwaW5nUGxhbmVzPUwubnVtQ2xpcHBpbmdQbGFuZXMscS5udW1JbnRlcnNlY3Rpb249TC5udW1DbGlwSW50ZXJzZWN0aW9uLHEudmVydGV4QWxwaGFzPUwudmVydGV4QWxwaGFzLHEudmVydGV4VGFuZ2VudHM9TC52ZXJ0ZXhUYW5nZW50cyxxLnRvbmVNYXBwaW5nPUwudG9uZU1hcHBpbmd9b3Muc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihTKXtHZSYmR2UoUyl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmb3Muc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihTKXtHZT1TLGt0LnNldEFuaW1hdGlvbkxvb3AoUyksbnVsbD09PVM/b3Muc3RvcCgpOm9zLnN0YXJ0KCl9LGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsbWkpLGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLG1yKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEwpe2lmKHZvaWQgMD09PUx8fCEwPT09TC5pc0NhbWVyYSl7aWYoITAhPT1DKXtpZighMD09PVMuYXV0b1VwZGF0ZSYmUy51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1MLnBhcmVudCYmTC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09a3QuZW5hYmxlZCYmITA9PT1rdC5pc1ByZXNlbnRpbmcmJighMD09PWt0LmNhbWVyYUF1dG9VcGRhdGUmJmt0LnVwZGF0ZUNhbWVyYShMKSxMPWt0LmdldENhbWVyYSgpKSwhMD09PVMuaXNTY2VuZSYmUy5vbkJlZm9yZVJlbmRlcihtLFMsTCxJKSxwPXppLmdldChTLGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksRmUubXVsdGlwbHlNYXRyaWNlcyhMLnByb2plY3Rpb25NYXRyaXgsTC5tYXRyaXhXb3JsZEludmVyc2UpLGFlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KEZlKSxqZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLG1lPVEuaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLGplLEwpLGQ9VWkuZ2V0KFMsaC5sZW5ndGgpLGQuaW5pdCgpLGgucHVzaChkKSxUcihTLEwsMCxtLnNvcnRPYmplY3RzKSxkLmZpbmlzaCgpLCEwPT09bS5zb3J0T2JqZWN0cyYmZC5zb3J0KG5lLGxlKSwhMD09PW1lJiZRLmJlZ2luU2hhZG93cygpLEYucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LFMsTCksITA9PT1tZSYmUS5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSxWZS5yZW5kZXIoZCxTKSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEwuaXNBcnJheUNhbWVyYSl7bGV0IFo9TC5jYW1lcmFzO2ZvcihsZXQgY2U9MCxVZT1aLmxlbmd0aDtjZTxVZTtjZSsrKXtsZXQgJGU9WltjZV07ZWwoZCxTLCRlLCRlLnZpZXdwb3J0KX19ZWxzZSBlbChkLFMsTCk7bnVsbCE9PUkmJihpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChJKSxpZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoSSkpLCEwPT09Uy5pc1NjZW5lJiZTLm9uQWZ0ZXJSZW5kZXIobSxTLEwpLENlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQ2UuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxDZS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLENlLnNldFBvbHlnb25PZmZzZXQoITEpLGxuLnJlc2V0RGVmYXVsdFN0YXRlKCksQT0tMSxPPW51bGwsZi5wb3AoKSxwPWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLGgucG9wKCksZD1oLmxlbmd0aD4wP2hbaC5sZW5ndGgtMV06bnVsbH19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gX30sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKFMsTCxxKXtfdC5nZXQoUy50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1MLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9cTtsZXQgWj1fdC5nZXQoUyk7Wi5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsWi5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9dm9pZCAwPT09cSxaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fFMudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxTLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxTLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKFMsTCl7bGV0IHE9X3QuZ2V0KFMpO3EuX193ZWJnbEZyYW1lYnVmZmVyPUwscS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1MfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihTLEw9MCxxPTApe0k9UyxfPUwseT1xO2xldCBaPSEwO2lmKFMpe2xldCBydD1fdC5nZXQoUyk7dm9pZCAwIT09cnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXI/KENlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxaPSExKTp2b2lkIDA9PT1ydC5fX3dlYmdsRnJhbWVidWZmZXI/aWUuc2V0dXBSZW5kZXJUYXJnZXQoUyk6cnQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiZpZS5yZWJpbmRUZXh0dXJlcyhTLF90LmdldChTLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBjZT1udWxsLFVlPSExLCRlPSExO2lmKFMpe2xldCBydD1TLnRleHR1cmU7KHJ0LmlzRGF0YVRleHR1cmUzRHx8cnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoJGU9ITApO2xldCBkdD1fdC5nZXQoUykuX193ZWJnbEZyYW1lYnVmZmVyO1MuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGNlPWR0W0xdLFVlPSEwKTpjZT1TLnVzZVJlbmRlcmJ1ZmZlcj9fdC5nZXQoUykuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOmR0LGVlLmNvcHkoUy52aWV3cG9ydCksWC5jb3B5KFMuc2Npc3NvcikseGU9Uy5zY2lzc29yVGVzdH1lbHNlIGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCksWC5jb3B5KHllKS5tdWx0aXBseVNjYWxhcihUKS5mbG9vcigpLHhlPUo7aWYoQ2UuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGNlKSYmb24uZHJhd0J1ZmZlcnMmJlomJkNlLmRyYXdCdWZmZXJzKFMsY2UpLENlLnZpZXdwb3J0KGVlKSxDZS5zY2lzc29yKFgpLENlLnNldFNjaXNzb3JUZXN0KHhlKSxVZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5K0wscnQuX193ZWJnbFRleHR1cmUscSl9ZWxzZSBpZigkZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LHJ0Ll9fd2ViZ2xUZXh0dXJlLHF8fDAsTHx8MCl9QT0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKFMsTCxxLFosY2UsVWUsJGUpe2lmKCFTfHwhUy5pc1dlYkdMUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4iKTtsZXQgV2U9X3QuZ2V0KFMpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihTLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT0kZSYmKFdlPVdlWyRlXSksV2Upe0NlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXZSk7dHJ5e2xldCBydD1TLnRleHR1cmUsZHQ9cnQuZm9ybWF0LFR0PXJ0LnR5cGU7aWYoZHQhPT16cyYmZ24uY29udmVydChkdCkhPT1SZS5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2xldCBBdD1UdD09PXV5JiYoRXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8b24uaXNXZWJHTDImJkV0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZighKFR0PT09U2h8fGduLmNvbnZlcnQoVHQpPT09UmUuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8VHQ9PT1ZbSYmKG9uLmlzV2ViR0wyfHxFdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fEV0LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxBdCkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09UmUuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/TD49MCYmTDw9Uy53aWR0aC1aJiZxPj0wJiZxPD1TLmhlaWdodC1jZSYmUmUucmVhZFBpeGVscyhMLHEsWixjZSxnbi5jb252ZXJ0KGR0KSxnbi5jb252ZXJ0KFR0KSxVZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IHJ0PW51bGwhPT1JP190LmdldChJKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtDZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAscnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxPTApe2lmKCEwIT09TC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO2xldCBaPU1hdGgucG93KDIsLXEpLGNlPU1hdGguZmxvb3IoTC5pbWFnZS53aWR0aCpaKSxVZT1NYXRoLmZsb29yKEwuaW1hZ2UuaGVpZ2h0KlopO2llLnNldFRleHR1cmUyRChMLDApLFJlLmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMscSwwLDAsUy54LFMueSxjZSxVZSksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxLFo9MCl7bGV0IGNlPUwuaW1hZ2Uud2lkdGgsVWU9TC5pbWFnZS5oZWlnaHQsJGU9Z24uY29udmVydChxLmZvcm1hdCksV2U9Z24uY29udmVydChxLnR5cGUpO2llLnNldFRleHR1cmUyRChxLDApLFJlLnBpeGVsU3RvcmVpKDM3NDQwLHEuZmxpcFkpLFJlLnBpeGVsU3RvcmVpKDM3NDQxLHEucHJlbXVsdGlwbHlBbHBoYSksUmUucGl4ZWxTdG9yZWkoMzMxNyxxLnVucGFja0FsaWdubWVudCksTC5pc0RhdGFUZXh0dXJlP1JlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksY2UsVWUsJGUsV2UsTC5pbWFnZS5kYXRhKTpMLmlzQ29tcHJlc3NlZFRleHR1cmU/UmUuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksTC5taXBtYXBzWzBdLndpZHRoLEwubWlwbWFwc1swXS5oZWlnaHQsJGUsTC5taXBtYXBzWzBdLmRhdGEpOlJlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksJGUsV2UsTC5pbWFnZSksMD09PVomJnEuZ2VuZXJhdGVNaXBtYXBzJiZSZS5nZW5lcmF0ZU1pcG1hcCgzNTUzKSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihTLEwscSxaLGNlPTApe2lmKG0uaXNXZWJHTDFSZW5kZXJlcilyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtsZXQgVHQsVWU9Uy5tYXgueC1TLm1pbi54KzEsJGU9Uy5tYXgueS1TLm1pbi55KzEsV2U9Uy5tYXguei1TLm1pbi56KzEscnQ9Z24uY29udmVydChaLmZvcm1hdCksZHQ9Z24uY29udmVydChaLnR5cGUpO2lmKFouaXNEYXRhVGV4dHVyZTNEKWllLnNldFRleHR1cmUzRChaLDApLFR0PTMyODc5O2Vsc2V7aWYoIVouaXNEYXRhVGV4dHVyZTJEQXJyYXkpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO2llLnNldFRleHR1cmUyREFycmF5KFosMCksVHQ9MzU4NjZ9UmUucGl4ZWxTdG9yZWkoMzc0NDAsWi5mbGlwWSksUmUucGl4ZWxTdG9yZWkoMzc0NDEsWi5wcmVtdWx0aXBseUFscGhhKSxSZS5waXhlbFN0b3JlaSgzMzE3LFoudW5wYWNrQWxpZ25tZW50KTtsZXQgQXQ9UmUuZ2V0UGFyYW1ldGVyKDMzMTQpLGNuPVJlLmdldFBhcmFtZXRlcigzMjg3OCksSmk9UmUuZ2V0UGFyYW1ldGVyKDMzMTYpLHhpPVJlLmdldFBhcmFtZXRlcigzMzE1KSxtbj1SZS5nZXRQYXJhbWV0ZXIoMzI4NzcpLFJuPXEuaXNDb21wcmVzc2VkVGV4dHVyZT9xLm1pcG1hcHNbMF06cS5pbWFnZTtSZS5waXhlbFN0b3JlaSgzMzE0LFJuLndpZHRoKSxSZS5waXhlbFN0b3JlaSgzMjg3OCxSbi5oZWlnaHQpLFJlLnBpeGVsU3RvcmVpKDMzMTYsUy5taW4ueCksUmUucGl4ZWxTdG9yZWkoMzMxNSxTLm1pbi55KSxSZS5waXhlbFN0b3JlaSgzMjg3NyxTLm1pbi56KSxxLmlzRGF0YVRleHR1cmV8fHEuaXNEYXRhVGV4dHVyZTNEP1JlLnRleFN1YkltYWdlM0QoVHQsY2UsTC54LEwueSxMLnosVWUsJGUsV2UscnQsZHQsUm4uZGF0YSk6cS5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLFJlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LFJuLmRhdGEpKTpSZS50ZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LGR0LFJuKSxSZS5waXhlbFN0b3JlaSgzMzE0LEF0KSxSZS5waXhlbFN0b3JlaSgzMjg3OCxjbiksUmUucGl4ZWxTdG9yZWkoMzMxNixKaSksUmUucGl4ZWxTdG9yZWkoMzMxNSx4aSksUmUucGl4ZWxTdG9yZWkoMzI4NzcsbW4pLDA9PT1jZSYmWi5nZW5lcmF0ZU1pcG1hcHMmJlJlLmdlbmVyYXRlTWlwbWFwKFR0KSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oUyl7aWUuc2V0VGV4dHVyZTJEKFMsMCksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXtfPTAseT0wLEk9bnVsbCxDZS5yZXNldCgpLGxuLnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1aaS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwLGNsYXNzIGV4dGVuZHMgWml7fS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgUk09Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IFJNKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtSTS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBPTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGFuKHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IE9NKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtPTS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIGJ5PWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07YnkucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyICRtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPU1NLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9RmMoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLG89dGhpcy5zdHJpZGU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07JG0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIG9vPW5ldyAkLGVnPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1yfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspb28ueD10aGlzLmdldFgoZSksb28ueT10aGlzLmdldFkoZSksb28uej10aGlzLmdldFooZSksb28uYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKW9vLng9dGhpcy5nZXRYKGUpLG9vLnk9dGhpcy5nZXRZKGUpLG9vLno9dGhpcy5nZXRaKGUpLG9vLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylvby54PXRoaXMuZ2V0WChlKSxvby55PXRoaXMuZ2V0WShlKSxvby56PXRoaXMuZ2V0WihlKSxvby50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxvby54LG9vLnksb28ueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLG8pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitvXSl9cmV0dXJuIG5ldyBMcihuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBlZyh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmUsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fTtlZy5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgRTI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnJvdGF0aW9uPTAsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtFMi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDt2YXIgbnksZE09bmV3ICQsaXk9bmV3ICQscnk9bmV3ICQsb3k9bmV3IEplLHBNPW5ldyBKZSxUbGU9bmV3IE1uLCRSPW5ldyAkLGhNPW5ldyAkLGUyPW5ldyAkLEJhZT1uZXcgSmUsdVU9bmV3IEplLFZhZT1uZXcgSmU7ZnVuY3Rpb24gdDIobix0LGUsaSxyLG8pe295LnN1YlZlY3RvcnMobixlKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KGkpLHZvaWQgMCE9PXI/KHBNLng9bypveS54LXIqb3kueSxwTS55PXIqb3kueCtvKm95LnkpOnBNLmNvcHkob3kpLG4uY29weSh0KSxuLngrPXBNLngsbi55Kz1wTS55LG4uYXBwbHlNYXRyaXg0KFRsZSl9KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZSIsdm9pZCAwPT09bnkpe255PW5ldyBLaTtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxpPW5ldyAkbShlLDUpO255LnNldEluZGV4KFswLDEsMiwwLDIsM10pLG55LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZyhpLDMsMCwhMSkpLG55LnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZyhpLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9bnksdGhpcy5tYXRlcmlhbD12b2lkIDAhPT10P3Q6bmV3IEUyLHRoaXMuY2VudGVyPW5ldyBKZSguNSwuNSl9cmF5Y2FzdCh0LGUpe251bGw9PT10LmNhbWVyYSYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLGl5LnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxUbGUuY29weSh0LmNhbWVyYS5tYXRyaXhXb3JsZCksdGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsdGhpcy5tYXRyaXhXb3JsZCkscnkuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubW9kZWxWaWV3TWF0cml4KSx0LmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhJiYhMT09PXRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uJiZpeS5tdWx0aXBseVNjYWxhcigtcnkueik7bGV0IHIsbyxpPXRoaXMubWF0ZXJpYWwucm90YXRpb247MCE9PWkmJihvPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkpO2xldCBzPXRoaXMuY2VudGVyO3QyKCRSLnNldCgtLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihoTS5zZXQoLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihlMi5zZXQoLjUsLjUsMCkscnkscyxpeSxyLG8pLEJhZS5zZXQoMCwwKSx1VS5zZXQoMSwwKSxWYWUuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoJFIsaE0sZTIsITEsZE0pO2lmKG51bGw9PT1hJiYodDIoaE0uc2V0KC0uNSwuNSwwKSxyeSxzLGl5LHIsbyksdVUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZSgkUixlMixoTSwhMSxkTSksbnVsbD09PWEpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhkTSk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpkTS5jbG9uZSgpLHV2OktyLmdldFVWKGRNLCRSLGhNLGUyLEJhZSx1VSxWYWUsbmV3IEplKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQuY2VudGVyJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319KS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7dmFyIEhhZT1uZXcgJCxVYWU9bmV3IHRyLHphZT1uZXcgdHIsYThlPW5ldyAkLGphZT1uZXcgTW4sVDI9Y2xhc3MgZXh0ZW5kcyB5b3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgTW4sdGhpcy5iaW5kTWF0cml4SW52ZXJzZT1uZXcgTW59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2xldCB0PW5ldyB0cixlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgaT0wLHI9ZS5jb3VudDtpPHI7aSsrKXt0Lng9ZS5nZXRYKGkpLHQueT1lLmdldFkoaSksdC56PWUuZ2V0WihpKSx0Lnc9ZS5nZXRXKGkpO2xldCBvPTEvdC5tYW5oYXR0YW5MZW5ndGgoKTtvIT09MS8wP3QubXVsdGlwbHlTY2FsYXIobyk6dC5zZXQoMSwwLDAsMCksZS5zZXRYWVpXKGksdC54LHQueSx0LnosdC53KX19dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX1ib25lVHJhbnNmb3JtKHQsZSl7bGV0IGk9dGhpcy5za2VsZXRvbixyPXRoaXMuZ2VvbWV0cnk7VWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSx6YWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxIYWUuY29weShlKS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCBvPTA7bzw0O28rKyl7bGV0IHM9emFlLmdldENvbXBvbmVudChvKTtpZigwIT09cyl7bGV0IGE9VWFlLmdldENvbXBvbmVudChvKTtqYWUubXVsdGlwbHlNYXRyaWNlcyhpLmJvbmVzW2FdLm1hdHJpeFdvcmxkLGkuYm9uZUludmVyc2VzW2FdKSxlLmFkZFNjYWxlZFZlY3RvcihhOGUuY29weShIYWUpLmFwcGx5TWF0cml4NChqYWUpLHMpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fTtUMi5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMCxjbGFzcyBleHRlbmRzIEdpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIsbyxzLGEsbCxjPUlvLHU9SW8sZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBrTT1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7Im51bWJlciI9PXR5cGVvZiBpJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtrTS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdhZT1uZXcgTW4sV2FlPW5ldyBNbixuMj1bXSxmTT1uZXcgeW87KGNsYXNzIGV4dGVuZHMgeW97Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcga00obmV3IEZsb2F0MzJBcnJheSgxNippKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihmTS5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LGZNLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09Zk0ubWF0ZXJpYWwpZm9yKGxldCBvPTA7bzxyO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLEdhZSksV2FlLm11bHRpcGx5TWF0cmljZXMoaSxHYWUpLGZNLm1hdHJpeFdvcmxkPVdhZSxmTS5yYXljYXN0KHQsbjIpO2ZvcihsZXQgcz0wLGE9bjIubGVuZ3RoO3M8YTtzKyspe2xldCBsPW4yW3NdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfW4yLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcga00obmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBqZD1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtqZC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgcWFlPW5ldyAkLFlhZT1uZXcgJCxYYWU9bmV3IE1uLGRVPW5ldyBJaCxpMj1uZXcgQWgsRk09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBqZCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bMF07Zm9yKGxldCByPTEsbz1lLmNvdW50O3I8bztyKyspcWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyLTEpLFlhZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWFlLmRpc3RhbmNlVG8oWWFlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgR3IoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGkyLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksaTIuYXBwbHlNYXRyaXg0KHIpLGkyLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoaTIpKXJldHVybjtYYWUuY29weShyKS5pbnZlcnQoKSxkVS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWGFlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphLGM9bmV3ICQsdT1uZXcgJCxkPW5ldyAkLHA9bmV3ICQsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBmPWkuaW5kZXgsQz1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWYpZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihmLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7bGV0IE89Zi5nZXRYKEkpLGVlPWYuZ2V0WChJKzEpO2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLE8pLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLGVlKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IHhlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO3hlPHQubmVhcnx8eGU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6eGUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfWVsc2UgZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihDLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSksdS5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSsxKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IGVlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO2VlPHQubmVhcnx8ZWU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6ZWUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtGTS5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBRYWU9bmV3ICQsS2FlPW5ldyAkLE5NPWNsYXNzIGV4dGVuZHMgRk17Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bXTtmb3IobGV0IHI9MCxvPWUuY291bnQ7cjxvO3IrPTIpUWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxLYWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT0wPT09cj8wOmlbci0xXSxpW3IrMV09aVtyXStRYWUuZGlzdGFuY2VUbyhLYWUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBHcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O05NLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMCxjbGFzcyBleHRlbmRzIEZNe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBEMj1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtEMi5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgWmFlPW5ldyBNbixOVT1uZXcgSWgscjI9bmV3IEFoLG8yPW5ldyAkO2Z1bmN0aW9uIEphZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1OVS5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyAkO05VLmNsb3Nlc3RQb2ludFRvUG9pbnQobixsKSxsLmFwcGx5TWF0cml4NChpKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPHIubmVhcnx8Yz5yLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KGEpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OnN9KX19KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodD1uZXcgS2ksZT1uZXcgRDIpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkLHM9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCkscjIuY29weShpLmJvdW5kaW5nU3BoZXJlKSxyMi5hcHBseU1hdHJpeDQocikscjIucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShyMikpcmV0dXJuO1phZS5jb3B5KHIpLmludmVydCgpLE5VLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChaYWUpO2xldCBhPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1pLmluZGV4LGQ9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1jKWZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oYy5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspe2xldCBDPWMuZ2V0WChmKTtvMi5mcm9tQnVmZmVyQXR0cmlidXRlKGQsQyksSmFlKG8yLEMsbCxyLHQsZSx0aGlzKX1lbHNlIGZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oZC5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspbzIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShkLGYpLEphZShvMixmLGwscix0LGUsdGhpcyl9ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSkucHJvdG90eXBlLmlzUG9pbnRzPSEwLGNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1zP3M6YnMsdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09bz9vOmJzLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGZ1bmN0aW9uIGQoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhkKX0pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuaW1hZ2UpLmNvcHkodGhpcyl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5pbWFnZTsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0PT0wJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19LnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXMuZm9ybWF0PWksdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH19LnByb3RvdHlwZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX0ucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7c3VwZXIodCxlLGkscixvLHMsYSxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciB4eT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTgsaT0wLHI9MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmksdGhldGFMZW5ndGg6cn0sZT1NYXRoLm1heCgzLGUpO2xldCBvPVtdLHM9W10sYT1bXSxsPVtdLGM9bmV3ICQsdT1uZXcgSmU7cy5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBkPTAscD0zO2Q8PWU7ZCsrLHArPTMpe2xldCBoPWkrZC9lKnI7Yy54PXQqTWF0aC5jb3MoaCksYy55PXQqTWF0aC5zaW4oaCkscy5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0oc1twXS90KzEpLzIsdS55PShzW3ArMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGQ9MTtkPD1lO2QrKylvLnB1c2goZCxkKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgR3IoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgR3IobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgeHkodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSx5YT0obmV3ICQsbmV3ICQsbmV3ICQsbmV3IEtyLGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KGksZSl9Z2V0UG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIGV9Z2V0U3BhY2VkUG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChpL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1nZXRMZW5ndGhzKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpe2lmKHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2xldCBpLGU9W10scj10aGlzLmdldFBvaW50KDApLG89MDtlLnB1c2goMCk7Zm9yKGxldCBzPTE7czw9dDtzKyspaT10aGlzLmdldFBvaW50KHMvdCksbys9aS5kaXN0YW5jZVRvKHIpLGUucHVzaChvKSxyPWk7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX1nZXRVdG9UbWFwcGluZyh0LGUpe2xldCBzLGk9dGhpcy5nZXRMZW5ndGhzKCkscj0wLG89aS5sZW5ndGg7cz1lfHx0Kmlbby0xXTtsZXQgYyxhPTAsbD1vLTE7Zm9yKDthPD1sOylpZihyPU1hdGguZmxvb3IoYSsobC1hKS8yKSxjPWlbcl0tcyxjPDApYT1yKzE7ZWxzZXtpZighKGM+MCkpe2w9cjticmVha31sPXItMX1pZihyPWwsaVtyXT09PXMpcmV0dXJuIHIvKG8tMSk7bGV0IHU9aVtyXTtyZXR1cm4ocisocy11KS8oaVtyKzFdLXUpKS8oby0xKX1nZXRUYW5nZW50KHQsZSl7bGV0IHI9dC0xZS00LG89dCsxZS00O3I8MCYmKHI9MCksbz4xJiYobz0xKTtsZXQgcz10aGlzLmdldFBvaW50KHIpLGE9dGhpcy5nZXRQb2ludChvKSxsPWV8fChzLmlzVmVjdG9yMj9uZXcgSmU6bmV3ICQpO3JldHVybiBsLmNvcHkoYSkuc3ViKHMpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyAkLHI9W10sbz1bXSxzPVtdLGE9bmV3ICQsbD1uZXcgTW47Zm9yKGxldCBoPTA7aDw9dDtoKyspcltoXT10aGlzLmdldFRhbmdlbnRBdChoL3QsbmV3ICQpO29bMF09bmV3ICQsc1swXT1uZXcgJDtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoclswXS54KSxkPU1hdGguYWJzKHJbMF0ueSkscD1NYXRoLmFicyhyWzBdLnopO3U8PWMmJihjPXUsaS5zZXQoMSwwLDApKSxkPD1jJiYoYz1kLGkuc2V0KDAsMSwwKSkscDw9YyYmaS5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKHJbMF0saSkubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxhKSxzWzBdLmNyb3NzVmVjdG9ycyhyWzBdLG9bMF0pO2ZvcihsZXQgaD0xO2g8PXQ7aCsrKXtpZihvW2hdPW9baC0xXS5jbG9uZSgpLHNbaF09c1toLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMocltoLTFdLHJbaF0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7bGV0IGY9TWF0aC5hY29zKF9hKHJbaC0xXS5kb3QocltoXSksLTEsMSkpO29baF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhhLGYpKX1zW2hdLmNyb3NzVmVjdG9ycyhyW2hdLG9baF0pfWlmKCEwPT09ZSl7bGV0IGg9TWF0aC5hY29zKF9hKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtoLz10LHJbMF0uZG90KGEuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihoPS1oKTtmb3IobGV0IGY9MTtmPD10O2YrKylvW2ZdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMocltmXSxoKmYpKSxzW2ZdLmNyb3NzVmVjdG9ycyhyW2ZdLG9bZl0pfXJldHVybnt0YW5nZW50czpyLG5vcm1hbHM6byxiaW5vcm1hbHM6c319Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0pLEN5PWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD0wLGU9MCxpPTEscj0xLG89MCxzPTIqTWF0aC5QSSxhPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9ZSx0aGlzLnhSYWRpdXM9aSx0aGlzLnlSYWRpdXM9cix0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9cyx0aGlzLmFDbG9ja3dpc2U9YSx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplLHI9MipNYXRoLlBJLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxzPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1yO2Zvcig7bz5yOylvLT1yO288TnVtYmVyLkVQU0lMT04mJihvPXM/MDpyKSwhMD09PXRoaXMuYUNsb2Nrd2lzZSYmIXMmJihvPT09cj9vPS1yOm8tPXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZigwIT09dGhpcy5hUm90YXRpb24pe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxkPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxwPWwtdGhpcy5hWCxoPWMtdGhpcy5hWTtsPXAqdS1oKmQrdGhpcy5hWCxjPXAqZCtoKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtDeS5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIEEyPWNsYXNzIGV4dGVuZHMgQ3l7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpLGkscixvLHMpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07ZnVuY3Rpb24gRnooKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIobyxzLGEsbCl7bj1vLHQ9YSxlPS0zKm8rMypzLTIqYS1sLGk9MipvLTIqcythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyl7cihzLGEsYyooYS1vKSxjKihsLXMpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyx1LGQpe2xldCBwPShzLW8pL2MtKGEtbykvKGMrdSkrKGEtcykvdSxoPShhLXMpL3UtKGwtcykvKHUrZCkrKGwtYSkvZDtwKj11LGgqPXUscihzLGEscCxoKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgcz1vKm87cmV0dXJuIG4rdCpvK2UqcytpKihzKm8pfX19QTIucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7dmFyIHMyPW5ldyAkLHBVPW5ldyBGeixoVT1uZXcgRnosZlU9bmV3IEZ6LEkyPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD1bXSxlPSExLGk9ImNlbnRyaXBldGFsIixyPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPWksdGhpcy50ZW5zaW9uPXJ9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgYyx1LGk9ZSxyPXRoaXMucG9pbnRzLG89ci5sZW5ndGgscz0oby0odGhpcy5jbG9zZWQ/MDoxKSkqdCxhPU1hdGguZmxvb3IocyksbD1zLWE7dGhpcy5jbG9zZWQ/YSs9YT4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMoYSkvbykrMSkqbzowPT09bCYmYT09PW8tMSYmKGE9by0yLGw9MSksdGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklb106KHMyLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1zMik7bGV0IGQ9clthJW9dLHA9clsoYSsxKSVvXTtpZih0aGlzLmNsb3NlZHx8YSsyPG8/dT1yWyhhKzIpJW9dOihzMi5zdWJWZWN0b3JzKHJbby0xXSxyW28tMl0pLmFkZChyW28tMV0pLHU9czIpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2xldCBoPSJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlPy41Oi4yNSxmPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoZCksaCksbT1NYXRoLnBvdyhkLmRpc3RhbmNlVG9TcXVhcmVkKHApLGgpLEM9TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZCh1KSxoKTttPDFlLTQmJihtPTEpLGY8MWUtNCYmKGY9bSksQzwxZS00JiYoQz1tKSxwVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGQueCxwLngsdS54LGYsbSxDKSxoVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGQueSxwLnksdS55LGYsbSxDKSxmVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGQueixwLnosdS56LGYsbSxDKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihwVS5pbml0Q2F0bXVsbFJvbShjLngsZC54LHAueCx1LngsdGhpcy50ZW5zaW9uKSxoVS5pbml0Q2F0bXVsbFJvbShjLnksZC55LHAueSx1LnksdGhpcy50ZW5zaW9uKSxmVS5pbml0Q2F0bXVsbFJvbShjLnosZC56LHAueix1LnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIGkuc2V0KHBVLmNhbGMobCksaFUuY2FsYyhsKSxmVS5jYWxjKGwpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyAkKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fTtmdW5jdGlvbiAkYWUobix0LGUsaSxyKXtsZXQgbz0uNSooaS10KSxzPS41KihyLWUpLGE9bipuO3JldHVybigyKmUtMippK28rcykqKG4qYSkrKC0zKmUrMyppLTIqby1zKSphK28qbitlfWZ1bmN0aW9uIGJNKG4sdCxlLGkpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtyZXR1cm4gMiooMS1uKSpuKnR9KG4sZSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKnR9KG4saSl9ZnVuY3Rpb24geE0obix0LGUsaSxyKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIDMqZSplKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiAzKigxLW4pKm4qbip0fShuLGkpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIG4qbipuKnR9KG4scil9STIucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDt2YXIgTE09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyBKZSxlPW5ldyBKZSxpPW5ldyBKZSxyPW5ldyBKZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEplKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQoeE0odCxyLngsby54LHMueCxhLngpLHhNKHQsci55LG8ueSxzLnksYS55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtMTS5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwO3ZhciBQMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkLHI9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHhNKHQsci54LG8ueCxzLngsYS54KSx4TSh0LHIueSxvLnkscy55LGEueSkseE0odCxyLnosby56LHMueixhLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O1AyLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwO3ZhciB3eT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWU7cmV0dXJuIDE9PT10P2kuY29weSh0aGlzLnYyKTooaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksaX1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1nZXRUYW5nZW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplO3JldHVybiBpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07d3kucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwO3ZhciBCTT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplLGk9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O0JNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciBSMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpLGJNKHQsci56LG8ueixzLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1IyLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgVk09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBKZSl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLG89KHIubGVuZ3RoLTEpKnQscz1NYXRoLmZsb29yKG8pLGE9by1zLGw9clswPT09cz9zOnMtMV0sYz1yW3NdLHU9cltzPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpzKzFdLGQ9cltzPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpzKzJdO3JldHVybiBpLnNldCgkYWUoYSxsLngsYy54LHUueCxkLngpLCRhZShhLGwueSxjLnksdS55LGQueSkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgSmUpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTtWTS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgRGxlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOkEyLENhdG11bGxSb21DdXJ2ZTM6STIsQ3ViaWNCZXppZXJDdXJ2ZTpMTSxDdWJpY0JlemllckN1cnZlMzpQMixFbGxpcHNlQ3VydmU6Q3ksTGluZUN1cnZlOnd5LExpbmVDdXJ2ZTM6Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZTtyZXR1cm4gMT09PXQ/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LFF1YWRyYXRpY0JlemllckN1cnZlOkJNLFF1YWRyYXRpY0JlemllckN1cnZlMzpSMixTcGxpbmVDdXJ2ZTpWTX0pLGpVPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtsZXQgdD10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTt0LmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgd3koZSx0KSl9Z2V0UG9pbnQodCxlKXtsZXQgaT10KnRoaXMuZ2V0TGVuZ3RoKCkscj10aGlzLmdldEN1cnZlTGVuZ3RocygpLG89MDtmb3IoO288ci5sZW5ndGg7KXtpZihyW29dPj1pKXtsZXQgcz1yW29dLWksYT10aGlzLmN1cnZlc1tvXSxsPWEuZ2V0TGVuZ3RoKCk7cmV0dXJuIGEuZ2V0UG9pbnRBdCgwPT09bD8wOjEtcy9sLGUpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxlPTA7Zm9yKGxldCBpPTAscj10aGlzLmN1cnZlcy5sZW5ndGg7aTxyO2krKyllKz10aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLnB1c2goZVswXSksZX1nZXRQb2ludHModD0xMil7bGV0IGksZT1bXTtmb3IobGV0IHI9MCxvPXRoaXMuY3VydmVzO3I8by5sZW5ndGg7cisrKXtsZXQgcz1vW3JdLGw9cy5nZXRQb2ludHMocyYmcy5pc0VsbGlwc2VDdXJ2ZT8yKnQ6cyYmKHMuaXNMaW5lQ3VydmV8fHMuaXNMaW5lQ3VydmUzKT8xOnMmJnMuaXNTcGxpbmVDdXJ2ZT90KnMucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXQuY3VydmVzLnB1c2godGhpcy5jdXJ2ZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sSE09Y2xhc3MgZXh0ZW5kcyBqVXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEplLHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtsZXQgaT1uZXcgd3kodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSmUodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBvPW5ldyBCTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQoaSxyKSx0aGlzfWJlemllckN1cnZlVG8odCxlLGkscixvLHMpe2xldCBhPW5ldyBMTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpLG5ldyBKZShvLHMpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChhKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxzKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxpPW5ldyBWTShlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxzKSx0aGlzfWFic2FyYyh0LGUsaSxyLG8scyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsaSxpLHIsbyxzKSx0aGlzfWVsbGlwc2UodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaSxyLG8scyxhLGwpLHRoaXN9YWJzZWxsaXBzZSh0LGUsaSxyLG8scyxhLGwpe2xldCBjPW5ldyBDeSh0LGUsaSxyLG8scyxhLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgZD1jLmdldFBvaW50KDApO2QuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oZC54LGQueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sR2Q9Y2xhc3MgZXh0ZW5kcyBITXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dGhpcy5ob2xlcy5sZW5ndGg7aTxyO2krKyllW2ldPXRoaXMuaG9sZXNbaV0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmhvbGVzLnB1c2godC5ob2xlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IEhNKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBBbGUobix0LGUsaSxyKXtsZXQgbyxzO2lmKHI9PT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0wO2ZvcihsZXQgbz10LHM9ZS1pO288ZTtvKz1pKXIrPShuW3NdLW5bb10pKihuW28rMV0rbltzKzFdKSxzPW87cmV0dXJuIHJ9KG4sdCxlLGkpPjApZm9yKG89dDtvPGU7bys9aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO2Vsc2UgZm9yKG89ZS1pO28+PXQ7by09aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO3JldHVybiBzJiZxMihzLHMubmV4dCkmJihqTShzKSxzPXMubmV4dCksc31mdW5jdGlvbiBSaChuLHQpe2lmKCFuKXJldHVybiBuO3R8fCh0PW4pO2xldCBpLGU9bjtkb3tpZihpPSExLGUuc3RlaW5lcnx8IXEyKGUsZS5uZXh0KSYmMCE9PWpyKGUucHJldixlLGUubmV4dCkpZT1lLm5leHQ7ZWxzZXtpZihqTShlKSxlPXQ9ZS5wcmV2LGU9PT1lLm5leHQpYnJlYWs7aT0hMH19d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIFVNKG4sdCxlLGkscixvLHMpe2lmKCFuKXJldHVybjshcyYmbyYmZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bjtkb3tudWxsPT09ci56JiYoci56PUdVKHIueCxyLnksdCxlLGkpKSxyLnByZXZaPXIucHJldixyLm5leHRaPXIubmV4dCxyPXIubmV4dH13aGlsZShyIT09bik7ci5wcmV2Wi5uZXh0Wj1udWxsLHIucHJldlo9bnVsbCxmdW5jdGlvbihuKXtsZXQgdCxlLGkscixvLHMsYSxsLGM9MTtkb3tmb3IoZT1uLG49bnVsbCxvPW51bGwscz0wO2U7KXtmb3IocysrLGk9ZSxhPTAsdD0wO3Q8YyYmKGErKyxpPWkubmV4dFosaSk7dCsrKTtmb3IobD1jO2E+MHx8bD4wJiZpOykwIT09YSYmKDA9PT1sfHwhaXx8ZS56PD1pLnopPyhyPWUsZT1lLm5leHRaLGEtLSk6KHI9aSxpPWkubmV4dFosbC0tKSxvP28ubmV4dFo9cjpuPXIsci5wcmV2Wj1vLG89cjtlPWl9by5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUocz4xKX0ocil9KG4saSxyLG8pO2xldCBsLGMsYT1uO2Zvcig7bi5wcmV2IT09bi5uZXh0OylpZihsPW4ucHJldixjPW4ubmV4dCxvP184ZShuLGkscixvKTpnOGUobikpdC5wdXNoKGwuaS9lKSx0LnB1c2gobi5pL2UpLHQucHVzaChjLmkvZSksak0obiksbj1jLm5leHQsYT1jLm5leHQ7ZWxzZSBpZigobj1jKT09PWEpe3M/MT09PXM/VU0obj12OGUoUmgobiksdCxlKSx0LGUsaSxyLG8sMik6Mj09PXMmJnk4ZShuLHQsZSxpLHIsbyk6VU0oUmgobiksdCxlLGkscixvLDEpO2JyZWFrfX1mdW5jdGlvbiBnOGUobil7bGV0IHQ9bi5wcmV2LGU9bixpPW4ubmV4dDtpZihqcih0LGUsaSk+PTApcmV0dXJuITE7bGV0IHI9bi5uZXh0Lm5leHQ7Zm9yKDtyIT09bi5wcmV2Oyl7aWYoY3kodC54LHQueSxlLngsZS55LGkueCxpLnksci54LHIueSkmJmpyKHIucHJldixyLHIubmV4dCk+PTApcmV0dXJuITE7cj1yLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gXzhlKG4sdCxlLGkpe2xldCByPW4ucHJldixvPW4scz1uLm5leHQ7aWYoanIocixvLHMpPj0wKXJldHVybiExO2xldCBjPXIueD5vLng/ci54PnMueD9yLng6cy54Om8ueD5zLng/by54OnMueCx1PXIueT5vLnk/ci55PnMueT9yLnk6cy55Om8ueT5zLnk/by55OnMueSxkPUdVKHIueDxvLng/ci54PHMueD9yLng6cy54Om8ueDxzLng/by54OnMueCxyLnk8by55P3IueTxzLnk/ci55OnMueTpvLnk8cy55P28ueTpzLnksdCxlLGkpLHA9R1UoYyx1LHQsZSxpKSxoPW4ucHJldlosZj1uLm5leHRaO2Zvcig7aCYmaC56Pj1kJiZmJiZmLno8PXA7KXtpZihoIT09bi5wcmV2JiZoIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxoLngsaC55KSYmanIoaC5wcmV2LGgsaC5uZXh0KT49MHx8KGg9aC5wcmV2WixmIT09bi5wcmV2JiZmIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxmLngsZi55KSYmanIoZi5wcmV2LGYsZi5uZXh0KT49MCkpcmV0dXJuITE7Zj1mLm5leHRafWZvcig7aCYmaC56Pj1kOyl7aWYoaCE9PW4ucHJldiYmaCE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksaC54LGgueSkmJmpyKGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7ZiYmZi56PD1wOyl7aWYoZiE9PW4ucHJldiYmZiE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksZi54LGYueSkmJmpyKGYucHJldixmLGYubmV4dCk+PTApcmV0dXJuITE7Zj1mLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHY4ZShuLHQsZSl7bGV0IGk9bjtkb3tsZXQgcj1pLnByZXYsbz1pLm5leHQubmV4dDshcTIocixvKSYmSWxlKHIsaSxpLm5leHQsbykmJnpNKHIsbykmJnpNKG8scikmJih0LnB1c2goci5pL2UpLHQucHVzaChpLmkvZSksdC5wdXNoKG8uaS9lKSxqTShpKSxqTShpLm5leHQpLGk9bj1vKSxpPWkubmV4dH13aGlsZShpIT09bik7cmV0dXJuIFJoKGkpfWZ1bmN0aW9uIHk4ZShuLHQsZSxpLHIsbyl7bGV0IHM9bjtkb3tsZXQgYT1zLm5leHQubmV4dDtmb3IoO2EhPT1zLnByZXY7KXtpZihzLmkhPT1hLmkmJkQ4ZShzLGEpKXtsZXQgbD1QbGUocyxhKTtyZXR1cm4gcz1SaChzLHMubmV4dCksbD1SaChsLGwubmV4dCksVU0ocyx0LGUsaSxyLG8pLHZvaWQgVU0obCx0LGUsaSxyLG8pfWE9YS5uZXh0fXM9cy5uZXh0fXdoaWxlKHMhPT1uKX1mdW5jdGlvbiB4OGUobix0KXtyZXR1cm4gbi54LXQueH1mdW5jdGlvbiBDOGUobix0KXtpZih0PWZ1bmN0aW9uKG4sdCl7bGV0IHMsZT10LGk9bi54LHI9bi55LG89LTEvMDtkb3tpZihyPD1lLnkmJnI+PWUubmV4dC55JiZlLm5leHQueSE9PWUueSl7bGV0IHA9ZS54KyhyLWUueSkqKGUubmV4dC54LWUueCkvKGUubmV4dC55LWUueSk7aWYocDw9aSYmcD5vKXtpZihvPXAscD09PWkpe2lmKHI9PT1lLnkpcmV0dXJuIGU7aWYocj09PWUubmV4dC55KXJldHVybiBlLm5leHR9cz1lLng8ZS5uZXh0Lng/ZTplLm5leHR9fWU9ZS5uZXh0fXdoaWxlKGUhPT10KTtpZighcylyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcztsZXQgZCxhPXMsbD1zLngsYz1zLnksdT0xLzA7ZT1zO2Rve2k+PWUueCYmZS54Pj1sJiZpIT09ZS54JiZjeShyPGM/aTpvLHIsbCxjLHI8Yz9vOmkscixlLngsZS55KSYmKGQ9TWF0aC5hYnMoci1lLnkpLyhpLWUueCksek0oZSxuKSYmKGQ8dXx8ZD09PXUmJihlLng+cy54fHxlLng9PT1zLngmJk04ZShzLGUpKSkmJihzPWUsdT1kKSksZT1lLm5leHR9d2hpbGUoZSE9PWEpO3JldHVybiBzfShuLHQpLHQpe2xldCBlPVBsZSh0LG4pO1JoKHQsdC5uZXh0KSxSaChlLGUubmV4dCl9fWZ1bmN0aW9uIE04ZShuLHQpe3JldHVybiBqcihuLnByZXYsbix0LnByZXYpPDAmJmpyKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBHVShuLHQsZSxpLHIpe3JldHVybihuPTE0MzE2NTU3NjUmKChuPTg1ODk5MzQ1OSYoKG49MjUyNjQ1MTM1Jigobj0xNjcxMTkzNSYoKG49MzI3NjcqKG4tZSkqcil8bjw8OCkpfG48PDQpKXxuPDwyKSl8bjw8MSkpfCh0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtaSkqcil8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpPDwxfWZ1bmN0aW9uIFQ4ZShuKXtsZXQgdD1uLGU9bjtkb3sodC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHR9d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIGN5KG4sdCxlLGkscixvLHMsYSl7cmV0dXJuKHItcykqKHQtYSktKG4tcykqKG8tYSk+PTAmJihuLXMpKihpLWEpLShlLXMpKih0LWEpPj0wJiYoZS1zKSooby1hKS0oci1zKSooaS1hKT49MH1mdW5jdGlvbiBEOGUobix0KXtyZXR1cm4gbi5uZXh0LmkhPT10LmkmJm4ucHJldi5pIT09dC5pJiYhZnVuY3Rpb24obix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJklsZShlLGUubmV4dCxuLHQpKXJldHVybiEwO2U9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4hMX0obix0KSYmKHpNKG4sdCkmJnpNKHQsbikmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bixpPSExLHI9KG4ueCt0LngpLzIsbz0obi55K3QueSkvMjtkb3tlLnk+byE9ZS5uZXh0Lnk+byYmZS5uZXh0LnkhPT1lLnkmJnI8KGUubmV4dC54LWUueCkqKG8tZS55KS8oZS5uZXh0LnktZS55KStlLngmJihpPSFpKSxlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuIGl9KG4sdCkmJihqcihuLnByZXYsbix0LnByZXYpfHxqcihuLHQucHJldix0KSl8fHEyKG4sdCkmJmpyKG4ucHJldixuLG4ubmV4dCk+MCYmanIodC5wcmV2LHQsdC5uZXh0KT4wKX1mdW5jdGlvbiBqcihuLHQsZSl7cmV0dXJuKHQueS1uLnkpKihlLngtdC54KS0odC54LW4ueCkqKGUueS10LnkpfWZ1bmN0aW9uIHEyKG4sdCl7cmV0dXJuIG4ueD09PXQueCYmbi55PT09dC55fWZ1bmN0aW9uIElsZShuLHQsZSxpKXtsZXQgcj1sMihqcihuLHQsZSkpLG89bDIoanIobix0LGkpKSxzPWwyKGpyKGUsaSxuKSksYT1sMihqcihlLGksdCkpO3JldHVybiEhKHIhPT1vJiZzIT09YXx8MD09PXImJmEyKG4sZSx0KXx8MD09PW8mJmEyKG4saSx0KXx8MD09PXMmJmEyKGUsbixpKXx8MD09PWEmJmEyKGUsdCxpKSl9ZnVuY3Rpb24gYTIobix0LGUpe3JldHVybiB0Lng8PU1hdGgubWF4KG4ueCxlLngpJiZ0Lng+PU1hdGgubWluKG4ueCxlLngpJiZ0Lnk8PU1hdGgubWF4KG4ueSxlLnkpJiZ0Lnk+PU1hdGgubWluKG4ueSxlLnkpfWZ1bmN0aW9uIGwyKG4pe3JldHVybiBuPjA/MTpuPDA/LTE6MH1mdW5jdGlvbiB6TShuLHQpe3JldHVybiBqcihuLnByZXYsbixuLm5leHQpPDA/anIobix0LG4ubmV4dCk+PTAmJmpyKG4sbi5wcmV2LHQpPj0wOmpyKG4sdCxuLnByZXYpPDB8fGpyKG4sbi5uZXh0LHQpPDB9ZnVuY3Rpb24gUGxlKG4sdCl7bGV0IGU9bmV3IFdVKG4uaSxuLngsbi55KSxpPW5ldyBXVSh0LmksdC54LHQueSkscj1uLm5leHQsbz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLG8ubmV4dD1pLGkucHJldj1vLGl9ZnVuY3Rpb24gZWxlKG4sdCxlLGkpe2xldCByPW5ldyBXVShuLHQsZSk7cmV0dXJuIGk/KHIubmV4dD1pLm5leHQsci5wcmV2PWksaS5uZXh0LnByZXY9cixpLm5leHQ9cik6KHIucHJldj1yLHIubmV4dD1yKSxyfWZ1bmN0aW9uIGpNKG4pe24ubmV4dC5wcmV2PW4ucHJldixuLnByZXYubmV4dD1uLm5leHQsbi5wcmV2WiYmKG4ucHJldloubmV4dFo9bi5uZXh0Wiksbi5uZXh0WiYmKG4ubmV4dFoucHJldlo9bi5wcmV2Wil9ZnVuY3Rpb24gV1Uobix0LGUpe3RoaXMuaT1uLHRoaXMueD10LHRoaXMueT1lLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfXZhciB6dT1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxvPTA7bzxlO3I9bysrKWkrPXRbcl0ueCp0W29dLnktdFtvXS54KnRbcl0ueTtyZXR1cm4uNSppfXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4genUuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7bGV0IGk9W10scj1bXSxvPVtdO3RsZSh0KSxubGUoaSx0KTtsZXQgcz10Lmxlbmd0aDtlLmZvckVhY2godGxlKTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrKylyLnB1c2gocykscys9ZVtsXS5sZW5ndGgsbmxlKGksZVtsXSk7bGV0IGE9ZnVuY3Rpb24obix0LGU9Mil7bGV0IGEsbCxjLHUsZCxwLGgsaT10JiZ0Lmxlbmd0aCxyPWk/dFswXSplOm4ubGVuZ3RoLG89QWxlKG4sMCxyLGUsITApLHM9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gcztpZihpJiYobz1mdW5jdGlvbihuLHQsZSxpKXtsZXQgbyxzLGEsbCxjLHI9W107Zm9yKG89MCxzPXQubGVuZ3RoO288cztvKyspYT10W29dKmksbD1vPHMtMT90W28rMV0qaTpuLmxlbmd0aCxjPUFsZShuLGEsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2goVDhlKGMpKTtmb3Ioci5zb3J0KHg4ZSksbz0wO288ci5sZW5ndGg7bysrKUM4ZShyW29dLGUpLGU9UmgoZSxlLm5leHQpO3JldHVybiBlfShuLHQsbyxlKSksbi5sZW5ndGg+ODAqZSl7YT1jPW5bMF0sbD11PW5bMV07Zm9yKGxldCBmPWU7ZjxyO2YrPWUpZD1uW2ZdLHA9bltmKzFdLGQ8YSYmKGE9ZCkscDxsJiYobD1wKSxkPmMmJihjPWQpLHA+dSYmKHU9cCk7aD1NYXRoLm1heChjLWEsdS1sKSxoPTAhPT1oPzEvaDowfXJldHVybiBVTShvLHMsZSxhLGwsaCksc30oaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpby5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIHRsZShuKXtsZXQgdD1uLmxlbmd0aDt0PjImJm5bdC0xXS5lcXVhbHMoblswXSkmJm4ucG9wKCl9ZnVuY3Rpb24gbmxlKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKHRbZV0ueCksbi5wdXNoKHRbZV0ueSl9dmFyIE9oPWNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IodD1uZXcgR2QoW25ldyBKZSguNSwuNSksbmV3IEplKC0uNSwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10sbz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspcyh0W2FdKTtmdW5jdGlvbiBzKGEpe2xldCBsPVtdLGM9dm9pZCAwIT09ZS5jdXJ2ZVNlZ21lbnRzP2UuY3VydmVTZWdtZW50czoxMix1PXZvaWQgMCE9PWUuc3RlcHM/ZS5zdGVwczoxLGQ9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEscD12b2lkIDA9PT1lLmJldmVsRW5hYmxlZHx8ZS5iZXZlbEVuYWJsZWQsaD12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6LjIsZj12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTpoLS4xLG09dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsQz12b2lkIDAhPT1lLmJldmVsU2VnbWVudHM/ZS5iZXZlbFNlZ21lbnRzOjMsXz1lLmV4dHJ1ZGVQYXRoLHk9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOlI4ZTt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxkPWUuYW1vdW50KTtsZXQgSSxPLGVlLFgseGUsQT0hMTtfJiYoST1fLmdldFNwYWNlZFBvaW50cyh1KSxBPSEwLHA9ITEsTz1fLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksZWU9bmV3ICQsWD1uZXcgJCx4ZT1uZXcgJCkscHx8KEM9MCxoPTAsZj0wLG09MCk7bGV0IGZlPWEuZXh0cmFjdFBvaW50cyhjKSx2ZT1mZS5zaGFwZSxUPWZlLmhvbGVzO2lmKCF6dS5pc0Nsb2NrV2lzZSh2ZSkpe3ZlPXZlLnJldmVyc2UoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO3p1LmlzQ2xvY2tXaXNlKFllKSYmKFRbaWVdPVllLnJldmVyc2UoKSl9fWxldCBsZT16dS50cmlhbmd1bGF0ZVNoYXBlKHZlLFQpLGhlPXZlO2ZvcihsZXQgaWU9MCxjdD1ULmxlbmd0aDtpZTxjdDtpZSsrKXZlPXZlLmNvbmNhdChUW2llXSk7ZnVuY3Rpb24geWUoaWUsY3QsWWUpe3JldHVybiBjdHx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxjdC5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKFllKS5hZGQoaWUpfWxldCBKPXZlLmxlbmd0aCxhZT1sZS5sZW5ndGg7ZnVuY3Rpb24gbWUoaWUsY3QsWWUpe2xldCB4dCxodCxzbixTbj1pZS54LWN0Lngsb2k9aWUueS1jdC55LFVpPVllLngtaWUueCx6aT1ZZS55LWllLnksUT1TbipTbitvaSpvaTtpZihNYXRoLmFicyhTbip6aS1vaSpVaSk+TnVtYmVyLkVQU0lMT04pe2xldCBWZT1NYXRoLnNxcnQoUSksQ3Q9TWF0aC5zcXJ0KFVpKlVpK3ppKnppKSx0bj1jdC54LW9pL1ZlLEJlPWN0LnkrU24vVmUsRnQ9KChZZS54LXppL0N0LXRuKSp6aS0oWWUueStVaS9DdC1CZSkqVWkpLyhTbip6aS1vaSpVaSk7eHQ9dG4rU24qRnQtaWUueCxodD1CZStvaSpGdC1pZS55O2xldCBrdD14dCp4dCtodCpodDtpZihrdDw9MilyZXR1cm4gbmV3IEplKHh0LGh0KTtzbj1NYXRoLnNxcnQoa3QvMil9ZWxzZXtsZXQgVmU9ITE7U24+TnVtYmVyLkVQU0lMT04/VWk+TnVtYmVyLkVQU0lMT04mJihWZT0hMCk6U248LU51bWJlci5FUFNJTE9OP1VpPC1OdW1iZXIuRVBTSUxPTiYmKFZlPSEwKTpNYXRoLnNpZ24ob2kpPT09TWF0aC5zaWduKHppKSYmKFZlPSEwKSxWZT8oeHQ9LW9pLGh0PVNuLHNuPU1hdGguc3FydChRKSk6KHh0PVNuLGh0PW9pLHNuPU1hdGguc3FydChRLzIpKX1yZXR1cm4gbmV3IEplKHh0L3NuLGh0L3NuKX1sZXQgamU9W107Zm9yKGxldCBpZT0wLGN0PWhlLmxlbmd0aCxZZT1jdC0xLHh0PWllKzE7aWU8Y3Q7aWUrKyxZZSsrLHh0KyspWWU9PT1jdCYmKFllPTApLHh0PT09Y3QmJih4dD0wKSxqZVtpZV09bWUoaGVbaWVdLGhlW1llXSxoZVt4dF0pO2xldCBGZSxNZT1bXSx1dD1qZS5jb25jYXQoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO0ZlPVtdO2ZvcihsZXQgeHQ9MCxodD1ZZS5sZW5ndGgsc249aHQtMSxTbj14dCsxO3h0PGh0O3h0Kyssc24rKyxTbisrKXNuPT09aHQmJihzbj0wKSxTbj09PWh0JiYoU249MCksRmVbeHRdPW1lKFllW3h0XSxZZVtzbl0sWWVbU25dKTtNZS5wdXNoKEZlKSx1dD11dC5jb25jYXQoRmUpfWZvcihsZXQgaWU9MDtpZTxDO2llKyspe2xldCBjdD1pZS9DLFllPWgqTWF0aC5jb3MoY3QqTWF0aC5QSS8yKSx4dD1mKk1hdGguc2luKGN0Kk1hdGguUEkvMikrbTtmb3IobGV0IGh0PTAsc249aGUubGVuZ3RoO2h0PHNuO2h0Kyspe2xldCBTbj15ZShoZVtodF0samVbaHRdLHh0KTtFdChTbi54LFNuLnksLVllKX1mb3IobGV0IGh0PTAsc249VC5sZW5ndGg7aHQ8c247aHQrKyl7bGV0IFNuPVRbaHRdO0ZlPU1lW2h0XTtmb3IobGV0IG9pPTAsVWk9U24ubGVuZ3RoO29pPFVpO29pKyspe2xldCB6aT15ZShTbltvaV0sRmVbb2ldLHh0KTtFdCh6aS54LHppLnksLVllKX19fWxldCBTdD1mK207Zm9yKGxldCBpZT0wO2llPEo7aWUrKyl7bGV0IGN0PXA/eWUodmVbaWVdLHV0W2llXSxTdCk6dmVbaWVdO0E/KFguY29weShPLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LngpLGVlLmNvcHkoTy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LnkpLHhlLmNvcHkoSVswXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChjdC54LGN0LnksMCl9Zm9yKGxldCBpZT0xO2llPD11O2llKyspZm9yKGxldCBjdD0wO2N0PEo7Y3QrKyl7bGV0IFllPXA/eWUodmVbY3RdLHV0W2N0XSxTdCk6dmVbY3RdO0E/KFguY29weShPLm5vcm1hbHNbaWVdKS5tdWx0aXBseVNjYWxhcihZZS54KSxlZS5jb3B5KE8uYmlub3JtYWxzW2llXSkubXVsdGlwbHlTY2FsYXIoWWUueSkseGUuY29weShJW2llXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChZZS54LFllLnksZC91KmllKX1mb3IobGV0IGllPUMtMTtpZT49MDtpZS0tKXtsZXQgY3Q9aWUvQyxZZT1oKk1hdGguY29zKGN0Kk1hdGguUEkvMikseHQ9ZipNYXRoLnNpbihjdCpNYXRoLlBJLzIpK207Zm9yKGxldCBodD0wLHNuPWhlLmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249eWUoaGVbaHRdLGplW2h0XSx4dCk7RXQoU24ueCxTbi55LGQrWWUpfWZvcihsZXQgaHQ9MCxzbj1ULmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249VFtodF07RmU9TWVbaHRdO2ZvcihsZXQgb2k9MCxVaT1Tbi5sZW5ndGg7b2k8VWk7b2krKyl7bGV0IHppPXllKFNuW29pXSxGZVtvaV0seHQpO0E/RXQoemkueCx6aS55K0lbdS0xXS55LElbdS0xXS54K1llKTpFdCh6aS54LHppLnksZCtZZSl9fX1mdW5jdGlvbiBBbihpZSxjdCl7bGV0IFllPWllLmxlbmd0aDtmb3IoOy0tWWU+PTA7KXtsZXQgeHQ9WWUsaHQ9WWUtMTtodDwwJiYoaHQ9aWUubGVuZ3RoLTEpO2ZvcihsZXQgc249MCxTbj11KzIqQztzbjxTbjtzbisrKXtsZXQgb2k9SipzbixVaT1KKihzbisxKTtDZShjdCt4dCtvaSxjdCtodCtvaSxjdCtodCtVaSxjdCt4dCtVaSl9fX1mdW5jdGlvbiBFdChpZSxjdCxZZSl7bC5wdXNoKGllKSxsLnB1c2goY3QpLGwucHVzaChZZSl9ZnVuY3Rpb24gb24oaWUsY3QsWWUpe3Z0KGllKSx2dChjdCksdnQoWWUpO2xldCB4dD1yLmxlbmd0aC8zLGh0PXkuZ2VuZXJhdGVUb3BVVihpLHIseHQtMyx4dC0yLHh0LTEpO190KGh0WzBdKSxfdChodFsxXSksX3QoaHRbMl0pfWZ1bmN0aW9uIENlKGllLGN0LFllLHh0KXt2dChpZSksdnQoY3QpLHZ0KHh0KSx2dChjdCksdnQoWWUpLHZ0KHh0KTtsZXQgaHQ9ci5sZW5ndGgvMyxzbj15LmdlbmVyYXRlU2lkZVdhbGxVVihpLHIsaHQtNixodC0zLGh0LTIsaHQtMSk7X3Qoc25bMF0pLF90KHNuWzFdKSxfdChzblszXSksX3Qoc25bMV0pLF90KHNuWzJdKSxfdChzblszXSl9ZnVuY3Rpb24gdnQoaWUpe3IucHVzaChsWzMqaWUrMF0pLHIucHVzaChsWzMqaWUrMV0pLHIucHVzaChsWzMqaWUrMl0pfWZ1bmN0aW9uIF90KGllKXtvLnB1c2goaWUueCksby5wdXNoKGllLnkpfShmdW5jdGlvbigpe2xldCBpZT1yLmxlbmd0aC8zO2lmKHApe2xldCBjdD0wLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMl0rWWUsaHRbMV0rWWUsaHRbMF0rWWUpfWN0PXUrMipDLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMF0rWWUsaHRbMV0rWWUsaHRbMl0rWWUpfX1lbHNle2ZvcihsZXQgY3Q9MDtjdDxhZTtjdCsrKXtsZXQgWWU9bGVbY3RdO29uKFllWzJdLFllWzFdLFllWzBdKX1mb3IobGV0IGN0PTA7Y3Q8YWU7Y3QrKyl7bGV0IFllPWxlW2N0XTtvbihZZVswXStKKnUsWWVbMV0rSip1LFllWzJdK0oqdSl9fWkuYWRkR3JvdXAoaWUsci5sZW5ndGgvMy1pZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgaWU9ci5sZW5ndGgvMyxjdD0wO0FuKGhlLGN0KSxjdCs9aGUubGVuZ3RoO2ZvcihsZXQgWWU9MCx4dD1ULmxlbmd0aDtZZTx4dDtZZSsrKXtsZXQgaHQ9VFtZZV07QW4oaHQsY3QpLGN0Kz1odC5sZW5ndGh9aS5hZGRHcm91cChpZSxyLmxlbmd0aC8zLWllLDEpfSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKG8sMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2lmKGUuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBpPTAscj1uLmxlbmd0aDtpPHI7aSsrKWUuc2hhcGVzLnB1c2gobltpXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdm9pZCAwIT09dC5leHRydWRlUGF0aCYmKGUub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxlfSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgbz0wLHM9dC5zaGFwZXMubGVuZ3RoO288cztvKyspaS5wdXNoKGVbdC5zaGFwZXNbb11dKTtsZXQgcj10Lm9wdGlvbnMuZXh0cnVkZVBhdGg7cmV0dXJuIHZvaWQgMCE9PXImJih0Lm9wdGlvbnMuZXh0cnVkZVBhdGg9KG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpLG5ldyBPaChpLHQub3B0aW9ucyl9fSxSOGU9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgYT10WzMqaV0sbD10WzMqaSsxXSxjPXRbMypyXSx1PXRbMypyKzFdO3JldHVybltuZXcgSmUodFszKmVdLHRbMyplKzFdKSxuZXcgSmUoYSxsKSxuZXcgSmUoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9dFszKmVdLGE9dFszKmUrMV0sbD10WzMqZSsyXSxjPXRbMyppXSx1PXRbMyppKzFdLGQ9dFszKmkrMl0scD10WzMqcl0saD10WzMqcisxXSxmPXRbMypyKzJdLG09dFszKm9dLEM9dFszKm8rMV0sXz10WzMqbysyXTtyZXR1cm4gTWF0aC5hYnMoYS11KTxNYXRoLmFicyhzLWMpP1tuZXcgSmUocywxLWwpLG5ldyBKZShjLDEtZCksbmV3IEplKHAsMS1mKSxuZXcgSmUobSwxLV8pXTpbbmV3IEplKGEsMS1sKSxuZXcgSmUodSwxLWQpLG5ldyBKZShoLDEtZiksbmV3IEplKEMsMS1fKV19fSx0Zz1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9bmV3IEdkKFtuZXcgSmUoMCwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtsZXQgaT1bXSxyPVtdLG89W10scz1bXSxhPTAsbD0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSljKHQpO2Vsc2UgZm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspYyh0W3VdKSx0aGlzLmFkZEdyb3VwKGEsbCx1KSxhKz1sLGw9MDtmdW5jdGlvbiBjKHUpe2xldCBkPXIubGVuZ3RoLzMscD11LmV4dHJhY3RQb2ludHMoZSksaD1wLnNoYXBlLGY9cC5ob2xlczshMT09PXp1LmlzQ2xvY2tXaXNlKGgpJiYoaD1oLnJldmVyc2UoKSk7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKXtsZXQgeT1mW0NdOyEwPT09enUuaXNDbG9ja1dpc2UoeSkmJihmW0NdPXkucmV2ZXJzZSgpKX1sZXQgbT16dS50cmlhbmd1bGF0ZVNoYXBlKGgsZik7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKWg9aC5jb25jYXQoZltDXSk7Zm9yKGxldCBDPTAsXz1oLmxlbmd0aDtDPF87QysrKXtsZXQgeT1oW0NdO3IucHVzaCh5LngseS55LDApLG8ucHVzaCgwLDAsMSkscy5wdXNoKHkueCx5LnkpfWZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl7bGV0IHk9bVtDXTtpLnB1c2goeVswXStkLHlbMV0rZCx5WzJdK2QpLGwrPTN9fXRoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKHMsMikpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXQuc2hhcGVzLnB1c2gobltlXS51dWlkKTtlbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxvPXQuc2hhcGVzLmxlbmd0aDtyPG87cisrKWkucHVzaChlW3Quc2hhcGVzW3JdXSk7cmV0dXJuIG5ldyB0ZyhpLHQuY3VydmVTZWdtZW50cyl9fTsoY2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319KS5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgTzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtPMi5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIE8ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMuaW9yPTEuNSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmVmbGVjdGl2aXR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9hKDIuNSoodGhpcy5pb3ItMSkvKHRoaXMuaW9yKzEpLDAsMSl9LHNldDpmdW5jdGlvbihlKXt0aGlzLmlvcj0oMSsuNCplKS8oMS0uNCplKX19KSx0aGlzLnNoZWVuQ29sb3I9bmV3IGFuKDApLHRoaXMuc2hlZW5Db2xvck1hcD1udWxsLHRoaXMuc2hlZW5Sb3VnaG5lc3M9MSx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPW51bGwsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnRoaWNrbmVzcz0wLHRoaXMudGhpY2tuZXNzTWFwPW51bGwsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPTAsdGhpcy5hdHRlbnVhdGlvbkNvbG9yPW5ldyBhbigxLDEsMSksdGhpcy5zcGVjdWxhckludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bnVsbCx0aGlzLnNwZWN1bGFyQ29sb3I9bmV3IGFuKDEsMSwxKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9bnVsbCx0aGlzLl9zaGVlbj0wLHRoaXMuX2NsZWFyY29hdD0wLHRoaXMuX3RyYW5zbWlzc2lvbj0wLHRoaXMuc2V0VmFsdWVzKHQpfWdldCBzaGVlbigpe3JldHVybiB0aGlzLl9zaGVlbn1zZXQgc2hlZW4odCl7dGhpcy5fc2hlZW4+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9zaGVlbj10fWdldCBjbGVhcmNvYXQoKXtyZXR1cm4gdGhpcy5fY2xlYXJjb2F0fXNldCBjbGVhcmNvYXQodCl7dGhpcy5fY2xlYXJjb2F0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fY2xlYXJjb2F0PXR9Z2V0IHRyYW5zbWlzc2lvbigpe3JldHVybiB0aGlzLl90cmFuc21pc3Npb259c2V0IHRyYW5zbWlzc2lvbih0KXt0aGlzLl90cmFuc21pc3Npb24+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl90cmFuc21pc3Npb249dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLmlvcj10Lmlvcix0aGlzLnNoZWVuPXQuc2hlZW4sdGhpcy5zaGVlbkNvbG9yLmNvcHkodC5zaGVlbkNvbG9yKSx0aGlzLnNoZWVuQ29sb3JNYXA9dC5zaGVlbkNvbG9yTWFwLHRoaXMuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPXQuc2hlZW5Sb3VnaG5lc3NNYXAsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpcy50aGlja25lc3M9dC50aGlja25lc3MsdGhpcy50aGlja25lc3NNYXA9dC50aGlja25lc3NNYXAsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPXQuYXR0ZW51YXRpb25EaXN0YW5jZSx0aGlzLmF0dGVudWF0aW9uQ29sb3IuY29weSh0LmF0dGVudWF0aW9uQ29sb3IpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPXQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsdGhpcy5zcGVjdWxhckNvbG9yLmNvcHkodC5zcGVjdWxhckNvbG9yKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9dC5zcGVjdWxhckNvbG9yTWFwLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGFuKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgTnI9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBOci5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LHZvaWQgMCE9PWU/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246Im51bWJlciI9PXR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2xldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydChmdW5jdGlvbihyLG8pe3JldHVybiBuW3JdLW5bb119KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IG89MCxzPTA7cyE9PWk7KytvKXtsZXQgYT1lW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbcysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEsbz1uWzBdO2Zvcig7dm9pZCAwIT09byYmdm9pZCAwPT09b1tpXTspbz1uW3IrK107aWYodm9pZCAwPT09bylyZXR1cm47bGV0IHM9b1tpXTtpZih2b2lkIDAhPT1zKWlmKEFycmF5LmlzQXJyYXkocykpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2guYXBwbHkoZSxzKSksbz1uW3IrK119d2hpbGUodm9pZCAwIT09byk7ZWxzZSBpZih2b2lkIDAhPT1zLnRvQXJyYXkpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxzLnRvQXJyYXkoZSxlLmxlbmd0aCkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2gocykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IG89bi5jbG9uZSgpO28ubmFtZT10O2xldCBzPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGQ9W10scD1bXTtmb3IobGV0IGg9MDtoPGMudGltZXMubGVuZ3RoOysraCl7bGV0IGY9Yy50aW1lc1toXSpyO2lmKCEoZjxlfHxmPj1pKSl7ZC5wdXNoKGMudGltZXNbaF0pO2ZvcihsZXQgbT0wO208dTsrK20pcC5wdXNoKGMudmFsdWVzW2gqdSttXSl9fTAhPT1kLmxlbmd0aCYmKGMudGltZXM9TnIuY29udmVydEFycmF5KGQsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9TnIuY29udmVydEFycmF5KHAsYy52YWx1ZXMuY29uc3RydWN0b3IpLHMucHVzaChjKSl9by50cmFja3M9cztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKWE+by50cmFja3NbbF0udGltZXNbMF0mJihhPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgsbz10L2k7Zm9yKGxldCBzPTA7czxyOysrcyl7bGV0IGE9ZS50cmFja3Nbc10sbD1hLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09bHx8InN0cmluZyI9PT1sKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24oXyl7cmV0dXJuIF8ubmFtZT09PWEubmFtZSYmXy5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKHZvaWQgMD09PWMpY29udGludWU7bGV0IHU9MCxkPWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9ZC8zKTtsZXQgcD0wLGg9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYocD1oLzMpO2xldCBtLGY9YS50aW1lcy5sZW5ndGgtMTtpZihvPD1hLnRpbWVzWzBdKW09TnIuYXJyYXlTbGljZShhLnZhbHVlcyx1LGQtdSk7ZWxzZSBpZihvPj1hLnRpbWVzW2ZdKXtsZXQgXz1mKmQrdTttPU5yLmFycmF5U2xpY2UoYS52YWx1ZXMsXyxfK2QtdSl9ZWxzZXtsZXQgXz1hLmNyZWF0ZUludGVycG9sYW50KCkseT11LEk9ZC11O18uZXZhbHVhdGUobyksbT1Oci5hcnJheVNsaWNlKF8ucmVzdWx0QnVmZmVyLHksSSl9InF1YXRlcm5pb24iPT09bCYmKG5ldyBDcykuZnJvbUFycmF5KG0pLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkobSk7bGV0IEM9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBfPTA7XzxDOysrXyl7bGV0IHk9XypoK3A7aWYoInF1YXRlcm5pb24iPT09bClDcy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyx5LG0sMCxjLnZhbHVlcyx5KTtlbHNle2xldCBJPWgtMipwO2ZvcihsZXQgQT0wO0E8STsrK0EpYy52YWx1ZXNbeStBXS09bVtBXX19fXJldHVybiBuLmJsZW5kTW9kZT0yNTAxLG59fSxqdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9dm9pZCAwIT09cj9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLG89ZVtpLTFdO2U6e3Q6e2xldCBzO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHZvaWQgMD09PXIpe2lmKHQ8bylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQsbyl9aWYoaT09PWEpYnJlYWs7aWYobz1yLHI9ZVsrK2ldLHQ8cilicmVhayB0fXM9ZS5sZW5ndGg7YnJlYWsgbn1pZih0Pj1vKWJyZWFrIGU7e2xldCBhPWVbMV07dDxhJiYoaT0yLG89YSk7Zm9yKGxldCBsPWktMjs7KXtpZih2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihpPT09bClicmVhaztpZihyPW8sbz1lWy0taS0xXSx0Pj1vKWJyZWFrIHR9cz1pLGk9MH19Zm9yKDtpPHM7KXtsZXQgYT1pK3M+Pj4xO3Q8ZVthXT9zPWE6aT1hKzF9aWYocj1lW2ldLG89ZVtpLTFdLHZvaWQgMD09PW8pcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKHZvaWQgMD09PXIpcmV0dXJuIGk9ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmFmdGVyRW5kXyhpLTEsbyx0KX10aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhpLG8scil9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKGksbyx0LHIpfWdldFNldHRpbmdzXygpe3JldHVybiB0aGlzLnNldHRpbmdzfHx0aGlzLkRlZmF1bHRTZXR0aW5nc199Y29weVNhbXBsZVZhbHVlXyh0KXtsZXQgZT10aGlzLnJlc3VsdEJ1ZmZlcixpPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUsbz10KnI7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWVbc109aVtvK3NdO3JldHVybiBlfWludGVycG9sYXRlXygpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX1pbnRlcnZhbENoYW5nZWRfKCl7fX07anUucHJvdG90eXBlLmJlZm9yZVN0YXJ0Xz1qdS5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXyxqdS5wcm90b3R5cGUuYWZ0ZXJFbmRfPWp1LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3ZhciBlej1jbGFzcyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpLHRoaXMuX3dlaWdodFByZXY9LTAsdGhpcy5fb2Zmc2V0UHJldj0tMCx0aGlzLl93ZWlnaHROZXh0PS0wLHRoaXMuX29mZnNldE5leHQ9LTAsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXtlbmRpbmdTdGFydDpheSxlbmRpbmdFbmQ6YXl9fWludGVydmFsQ2hhbmdlZF8odCxlLGkpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG89dC0yLHM9dCsxLGE9cltvXSxsPXJbc107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBseTpvPXQsYT0yKmUtaTticmVhaztjYXNlIDI0MDI6bz1yLmxlbmd0aC0yLGE9ZStyW29dLXJbbysxXTticmVhaztkZWZhdWx0Om89dCxhPWl9aWYodm9pZCAwPT09bClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgbHk6cz10LGw9MippLWU7YnJlYWs7Y2FzZSAyNDAyOnM9MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6cz10LTEsbD1lfWxldCBjPS41KihpLWUpLHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PXMqdX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIscz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLHU9dGhpcy5fb2Zmc2V0UHJldixkPXRoaXMuX29mZnNldE5leHQscD10aGlzLl93ZWlnaHRQcmV2LGg9dGhpcy5fd2VpZ2h0TmV4dCxmPShpLWUpLyhyLWUpLG09ZipmLEM9bSpmLF89LXAqQysyKnAqbS1wKmYseT0oMStwKSpDKygtMS41LTIqcCkqbSsoLS41K3ApKmYrMSxJPSgtMS1oKSpDKygxLjUraCkqbSsuNSpmLEE9aCpDLWgqbTtmb3IobGV0IE89MDtPIT09YTsrK08pb1tPXT1fKnNbdStPXSt5KnNbYytPXStJKnNbbCtPXStBKnNbZCtPXTtyZXR1cm4gb319LGsyPWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PShpLWUpLyhyLWUpLGQ9MS11O2ZvcihsZXQgcD0wO3AhPT1hOysrcClvW3BdPXNbYytwXSpkK3NbbCtwXSp1O3JldHVybiBvfX0sdHo9Y2xhc3MgZXh0ZW5kcyBqdXtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Oci5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Oci5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGksZT10LmNvbnN0cnVjdG9yO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOk5yLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6TnIuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IHR6KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBrMih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgZXoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMjMwMDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7aWYodD09PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiIsaSksdGhpc31yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGFudD1lLHRoaXN9Z2V0SW50ZXJwb2xhdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIDIzMDA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gMjMwMTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiAyMzAyfX1nZXRWYWx1ZVNpemUoKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoL3RoaXMudGltZXMubGVuZ3RofXNoaWZ0KHQpe2lmKDAhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0rPXR9cmV0dXJuIHRoaXN9c2NhbGUodCl7aWYoMSE9PXQpe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7bGV0IGk9dGhpcy50aW1lcyxyPWkubGVuZ3RoLG89MCxzPXItMTtmb3IoO28hPT1yJiZpW29dPHQ7KSsrbztmb3IoOy0xIT09cyYmaVtzXT5lOyktLXM7aWYoKytzLDAhPT1vfHxzIT09cil7bz49cyYmKHM9TWF0aC5tYXgocywxKSxvPXMtMSk7bGV0IGE9dGhpcy5nZXRWYWx1ZVNpemUoKTt0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UoaSxvLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsbyphLHMqYSl9cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMCxlPXRoaXMuZ2V0VmFsdWVTaXplKCk7ZS1NYXRoLmZsb29yKGUpIT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLG89aS5sZW5ndGg7MD09PW8mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBzPW51bGw7Zm9yKGxldCBhPTA7YSE9PW87YSsrKXtsZXQgbD1pW2FdO2lmKCJudW1iZXIiPT10eXBlb2YgbCYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobnVsbCE9PXMmJnM+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxzKSx0PSExO2JyZWFrfXM9bH1pZih2b2lkIDAhPT1yJiZOci5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1Oci5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj0yMzAyPT09dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCksbz10Lmxlbmd0aC0xLHM9MTtmb3IobGV0IGE9MTthPG87KythKXtsZXQgbD0hMSxjPXRbYV07aWYoYyE9PXRbYSsxXSYmKDEhPT1hfHxjIT09dFswXSkpaWYocilsPSEwO2Vsc2V7bGV0IGQ9YSppLHA9ZC1pLGg9ZCtpO2ZvcihsZXQgZj0wO2YhPT1pOysrZil7bGV0IG09ZVtkK2ZdO2lmKG0hPT1lW3ArZl18fG0hPT1lW2grZl0pe2w9ITA7YnJlYWt9fX1pZihsKXtpZihhIT09cyl7dFtzXT10W2FdO2xldCBkPWEqaSxwPXMqaTtmb3IobGV0IGg9MDtoIT09aTsrK2gpZVtwK2hdPWVbZCtoXX0rK3N9fWlmKG8+MCl7dFtzXT10W29dO2ZvcihsZXQgYT1vKmksbD1zKmksYz0wO2MhPT1pOysrYyllW2wrY109ZVthK2NdOysrc31yZXR1cm4gcyE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UodCwwLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UoZSwwLHMqaSkpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc31jbG9uZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcywwKSxlPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCkscj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtGbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxO3ZhciBraD1jbGFzcyBleHRlbmRzIEZse307a2gucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiLGtoLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksa2gucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEYyPWNsYXNzIGV4dGVuZHMgRmx7fTtGMi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO3ZhciBNeT1jbGFzcyBleHRlbmRzIEZse307TXkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9Im51bWJlciI7dmFyIG56PWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPShpLWUpLyhyLWUpLGM9dCphO2ZvcihsZXQgdT1jK2E7YyE9PXU7Yys9NClDcy5zbGVycEZsYXQobywwLHMsYy1hLHMsYyxsKTtyZXR1cm4gb319LG5nPWNsYXNzIGV4dGVuZHMgRmx7SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgbnoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfX07bmcucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InF1YXRlcm5pb24iLG5nLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxLG5nLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBGaD1jbGFzcyBleHRlbmRzIEZse307RmgucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyIsRmgucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheSxGaC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgU3k9Y2xhc3MgZXh0ZW5kcyBGbHt9O1N5LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBOMj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPTI1MDApe3RoaXMubmFtZT10LHRoaXMudHJhY2tzPWksdGhpcy5kdXJhdGlvbj1lLHRoaXMuYmxlbmRNb2RlPXIsdGhpcy51dWlkPUZjKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7bGV0IGU9W10saT10LnRyYWNrcyxyPTEvKHQuZnBzfHwxKTtmb3IobGV0IHM9MCxhPWkubGVuZ3RoO3MhPT1hOysrcyllLnB1c2goTjhlKGlbc10pLnNjYWxlKHIpKTtsZXQgbz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gby51dWlkPXQudXVpZCxvfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBvPTAscz1pLmxlbmd0aDtvIT09czsrK28pZS5wdXNoKEZsLnRvSlNPTihpW29dKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBvPWUubGVuZ3RoLHM9W107Zm9yKGxldCBhPTA7YTxvO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErby0xKSVvLGEsKGErMSklbyksYy5wdXNoKDAsMSwwKTtsZXQgdT1Oci5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9TnIuc29ydGVkQXJyYXkobCwxLHUpLGM9TnIuc29ydGVkQXJyYXkoYywxLHUpLCFyJiYwPT09bFswXSYmKGwucHVzaChvKSxjLnB1c2goY1swXSkpLHMucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEscyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtsZXQgcj10O2k9ci5nZW9tZXRyeSYmci5nZW9tZXRyeS5hbmltYXRpb25zfHxyLmFuaW1hdGlvbnN9Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LG89L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXtsZXQgYz10W2FdLHU9Yy5uYW1lLm1hdGNoKG8pO2lmKHUmJnUubGVuZ3RoPjEpe2xldCBkPXVbMV0scD1yW2RdO3B8fChyW2RdPXA9W10pLHAucHVzaChjKX19bGV0IHM9W107Zm9yKGxldCBhIGluIHIpcy5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoYSxyW2FdLGUsaSkpO3JldHVybiBzfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24oZCxwLGgsZixtKXtpZigwIT09aC5sZW5ndGgpe2xldCBDPVtdLF89W107TnIuZmxhdHRlbkpTT04oaCxDLF8sZiksMCE9PUMubGVuZ3RoJiZtLnB1c2gobmV3IGQocCxDLF8pKX19LHI9W10sbz10Lm5hbWV8fCJkZWZhdWx0IixzPXQuZnBzfHwzMCxhPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgcD1jW2RdLmtleXM7aWYocCYmMCE9PXAubGVuZ3RoKWlmKHBbMF0ubW9ycGhUYXJnZXRzKXtsZXQgZixoPXt9O2ZvcihmPTA7ZjxwLmxlbmd0aDtmKyspaWYocFtmXS5tb3JwaFRhcmdldHMpZm9yKGxldCBtPTA7bTxwW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7bSsrKWhbcFtmXS5tb3JwaFRhcmdldHNbbV1dPS0xO2ZvcihsZXQgbSBpbiBoKXtsZXQgQz1bXSxfPVtdO2ZvcihsZXQgeT0wO3khPT1wW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt5KXtsZXQgST1wW2ZdO0MucHVzaChJLnRpbWUpLF8ucHVzaChJLm1vcnBoVGFyZ2V0PT09bT8xOjApfXIucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK20rIl0iLEMsXykpfWw9aC5sZW5ndGgqKHN8fDEpfWVsc2V7bGV0IGg9Ii5ib25lc1siK2VbZF0ubmFtZSsiXSI7aShTeSxoKyIucG9zaXRpb24iLHAsInBvcyIsciksaShuZyxoKyIucXVhdGVybmlvbiIscCwicm90IixyKSxpKFN5LGgrIi5zY2FsZSIscCwic2NsIixyKX19cmV0dXJuIDA9PT1yLmxlbmd0aD9udWxsOm5ldyB0aGlzKG8sbCxyLGEpfXJlc2V0RHVyYXRpb24oKXtsZXQgZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy50cmFja3MubGVuZ3RoO2khPT1yOysraSl7bGV0IG89dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIE44ZShuKXtpZih2b2lkIDA9PT1uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO2xldCB0PWZ1bmN0aW9uKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIE15O2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gU3k7Y2FzZSJjb2xvciI6cmV0dXJuIEYyO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIG5nO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4ga2g7Y2FzZSJzdHJpbmciOnJldHVybiBGaH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfShuLnR5cGUpO2lmKHZvaWQgMD09PW4udGltZXMpe2xldCBlPVtdLGk9W107TnIuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdm9pZCAwIT09dC5wYXJzZT90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIEV5PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEw4ZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCBsLHI9dGhpcyxvPSExLHM9MCxhPTAsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPWUsdGhpcy5vbkVycm9yPWksdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24odSl7YSsrLCExPT09byYmdm9pZCAwIT09ci5vblN0YXJ0JiZyLm9uU3RhcnQodSxzLGEpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbih1KXtzKyssdm9pZCAwIT09ci5vblByb2dyZXNzJiZyLm9uUHJvZ3Jlc3ModSxzLGEpLHM9PT1hJiYobz0hMSx2b2lkIDAhPT1yLm9uTG9hZCYmci5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKHUpe3ZvaWQgMCE9PXIub25FcnJvciYmci5vbkVycm9yKHUpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24odSl7cmV0dXJuIGw/bCh1KTp1fSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKHUpe3JldHVybiBsPXUsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKHUsZCl7cmV0dXJuIGMucHVzaCh1LGQpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbih1KXtsZXQgZD1jLmluZGV4T2YodSk7cmV0dXJuLTEhPT1kJiZjLnNwbGljZShkLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGQ9MCxwPWMubGVuZ3RoO2Q8cDtkKz0yKXtsZXQgaD1jW2RdLGY9Y1tkKzFdO2lmKGguZ2xvYmFsJiYoaC5sYXN0SW5kZXg9MCksaC50ZXN0KHUpKXJldHVybiBmfXJldHVybiBudWxsfX19LEd1PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6TDhlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7aS5sb2FkKHQscixlLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LFZkPXt9LHJ6PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz1FeS5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZih2b2lkIDAhPT1WZFt0XSlyZXR1cm4gdm9pZCBWZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7VmRbdF09W10sVmRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO2xldCBzPW5ldyBSZXF1ZXN0KHQse2hlYWRlcnM6bmV3IEhlYWRlcnModGhpcy5yZXF1ZXN0SGVhZGVyKSxjcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscz8iaW5jbHVkZSI6InNhbWUtb3JpZ2luIn0pLGE9dGhpcy5taW1lVHlwZSxsPXRoaXMucmVzcG9uc2VUeXBlO2ZldGNoKHMpLnRoZW4oYz0+e2lmKDIwMD09PWMuc3RhdHVzfHwwPT09Yy5zdGF0dXMpe2lmKDA9PT1jLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHR5cGVvZiBSZWFkYWJsZVN0cmVhbT4idSJ8fHZvaWQgMD09PWMuYm9keS5nZXRSZWFkZXIpcmV0dXJuIGM7bGV0IHU9VmRbdF0sZD1jLmJvZHkuZ2V0UmVhZGVyKCkscD1jLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpLGg9cD9wYXJzZUludChwKTowLGY9MCE9PWgsbT0wLEM9bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydChfKXshZnVuY3Rpb24geSgpe2QucmVhZCgpLnRoZW4oKHtkb25lOkksdmFsdWU6QX0pPT57aWYoSSlfLmNsb3NlKCk7ZWxzZXttKz1BLmJ5dGVMZW5ndGg7bGV0IE89bmV3IFByb2dyZXNzRXZlbnQoInByb2dyZXNzIix7bGVuZ3RoQ29tcHV0YWJsZTpmLGxvYWRlZDptLHRvdGFsOmh9KTtmb3IobGV0IGVlPTAsWD11Lmxlbmd0aDtlZTxYO2VlKyspe2xldCB4ZT11W2VlXTt4ZS5vblByb2dyZXNzJiZ4ZS5vblByb2dyZXNzKE8pfV8uZW5xdWV1ZShBKSx5KCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZShDKX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PWEpcmV0dXJuIGMudGV4dCgpO3tsZXQgZD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSkscD1kJiZkWzFdP2RbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsaD1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGY9PmguZGVjb2RlKGYpKX19fSkudGhlbihjPT57RXkuYWRkKHQsYyk7bGV0IHU9VmRbdF07ZGVsZXRlIFZkW3RdO2ZvcihsZXQgZD0wLHA9dS5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9dVtkXTtoLm9uTG9hZCYmaC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVZkW3RdO2lmKHZvaWQgMD09PXUpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBWZFt0XTtmb3IobGV0IGQ9MCxwPXUubGVuZ3RoO2Q8cDtkKyspe2xldCBoPXVbZF07aC5vbkVycm9yJiZoLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sTDI9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPVNNKCJpbWciKTtmdW5jdGlvbiBsKCl7dSgpLEV5LmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyhkKXt1KCksciYmcihkKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIHUoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoYS5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLGEuc3JjPXQsYX19LG96PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgX3kscz1uZXcgTDIodGhpcy5tYW5hZ2VyKTtzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBhPTA7ZnVuY3Rpb24gbChjKXtzLmxvYWQodFtjXSxmdW5jdGlvbih1KXtvLmltYWdlc1tjXT11LGErKyw2PT09YSYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sc3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBibyxzPW5ldyBMMih0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMubG9hZCh0LGZ1bmN0aW9uKGEpe28uaW1hZ2U9YSxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LE5sPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O05sLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgYW4oZSl9Y29weSh0KXtyZXR1cm4gTmwucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBpbGU9bmV3IE1uLHJsZT1uZXcgJCxvbGU9bmV3ICQsR009Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEplKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHZ5LHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSmUoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgdHIoMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeDtybGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShybGUpLG9sZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLGUubG9va0F0KG9sZSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLGlsZS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChpbGUpLGkuc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLGkubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KSxpLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIDAhPT10aGlzLmJpYXMmJih0LmJpYXM9dGhpcy5iaWFzKSwwIT09dGhpcy5ub3JtYWxCaWFzJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksMSE9PXRoaXMucmFkaXVzJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCg1MTIhPT10aGlzLm1hcFNpemUueHx8NTEyIT09dGhpcy5tYXBTaXplLnkpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LEIyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT0yKndVKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LG89dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxvIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPW8sZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtCMi5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBObHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLG89MCxzPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9cyx0aGlzLnNoYWRvdz1uZXcgQjJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBzbGU9bmV3IE1uLG1NPW5ldyAkLG1VPW5ldyAkLFYyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEplKDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IHRyKDIsMSwxLDEpLG5ldyB0cigwLDEsMSwxKSxuZXcgdHIoMywxLDEsMSksbmV3IHRyKDEsMSwxLDEpLG5ldyB0cigzLDAsMSwxKSxuZXcgdHIoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgJCgxLDAsMCksbmV3ICQoLTEsMCwwKSxuZXcgJCgwLDAsMSksbmV3ICQoMCwwLC0xKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3ICQoMCwxLDApLG5ldyAkKDAsMSwwKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwxLDApLG5ldyAkKDAsMCwxKSxuZXcgJCgwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7bGV0IGk9dGhpcy5jYW1lcmEscj10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fGkuZmFyO28hPT1pLmZhciYmKGkuZmFyPW8saS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLG1NLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxpLnBvc2l0aW9uLmNvcHkobU0pLG1VLmNvcHkoaS5wb3NpdGlvbiksbVUuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxpLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksaS5sb29rQXQobVUpLGkudXBkYXRlTWF0cml4V29ybGQoKSxyLm1ha2VUcmFuc2xhdGlvbigtbU0ueCwtbU0ueSwtbU0ueiksc2xlLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHNsZSl9fTtWMi5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBWMn1nZXQgcG93ZXIoKXtyZXR1cm4gNCp0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIEgyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgSm0oLTUsNSw1LC01LC41LDUwMCkpfX07SDIucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuc2hhZG93PW5ldyBIMn1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIFUyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyAkKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzJdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0saSpyKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLHIqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s2XSwuMzE1MzkyKigzKm8qby0xKSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSxpKm8qMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShzWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihzWzFdLDEuMDIzMzI4KnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sMS4wMjMzMjgqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwxLjAyMzMyOCppKSxlLmFkZFNjYWxlZFZlY3RvcihzWzRdLC44NTgwODYqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLC44NTgwODYqcipvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbN10sLjg1ODA4NippKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0uZnJvbUFycmF5KHQsZSszKnIpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS50b0FycmF5KHQsZSszKnIpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqcixlWzJdPS40ODg2MDMqbyxlWzNdPS40ODg2MDMqaSxlWzRdPTEuMDkyNTQ4KmkqcixlWzVdPTEuMDkyNTQ4KnIqbyxlWzZdPS4zMTUzOTIqKDMqbypvLTEpLGVbN109MS4wOTI1NDgqaSpvLGVbOF09LjU0NjI3NCooaSppLXIqcil9fTtVMi5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciBXTT1jbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQ9bmV3IFUyLGU9MSl7c3VwZXIodm9pZCAwLGUpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLGV9fTtXTS5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBoej1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8IiI9PT10PyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChlKSYmL15cLy8udGVzdCh0KSYmKGU9ZS5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDplK3QpfX07KGNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLGNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD4idSImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPXt9O2EuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLGEuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxhKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7RXkuYWRkKHQsbCksZSYmZShsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe3ImJnIobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgYzIsZ3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPXRoaXMscz1uZXcgcnoodGhpcy5tYW5hZ2VyKTtzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscykscy5sb2FkKHQsZnVuY3Rpb24oYSl7dHJ5e2xldCBsPWEuc2xpY2UoMCk7KHZvaWQgMD09PWMyJiYoYzI9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxjMikuZGVjb2RlQXVkaW9EYXRhKGwsZnVuY3Rpb24odSl7ZSh1KX0pfWNhdGNoKGwpe3I/cihsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxpLHIpfX07KGNsYXNzIGV4dGVuZHMgV017Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPShuZXcgYW4pLnNldCh0KSxvPShuZXcgYW4pLnNldChlKSxzPW5ldyAkKHIucixyLmcsci5iKSxhPW5ldyAkKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShzKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShzKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIoYyl9fSkucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITAsY2xhc3MgZXh0ZW5kcyBXTXtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPShuZXcgYW4pLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB4ej1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHIsbyxzO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pLGUpe2Nhc2UicXVhdGVybmlvbiI6cj10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqaSksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6cj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3Qscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqaSk7YnJlYWs7ZGVmYXVsdDpyPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqaSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPXIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1zLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxlKXtsZXQgaT10aGlzLmJ1ZmZlcixyPXRoaXMudmFsdWVTaXplLG89dCpyK3Iscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PXMpe2ZvcihsZXQgYT0wO2EhPT1yOysrYSlpW28rYV09aVthXTtzPWV9ZWxzZSBzKz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLG8sMCxlL3Mscik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PXN9YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4OzA9PT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLGE9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsbzwxJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGUqdGhpcy5fb3JpZ0luZGV4LDEtbyxlKSxzPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGUscik7Zm9yKGxldCBvPWkscz1yO28hPT1zOysrbyllW29dPWVbcitvJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixvKXtpZihyPj0uNSlmb3IobGV0IHM9MDtzIT09bzsrK3MpdFtlK3NdPXRbaStzXX1fc2xlcnAodCxlLGkscil7Q3Muc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fd29ya0luZGV4Km87Q3MubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxzLHQsZSx0LGkpLENzLnNsZXJwRmxhdCh0LGUsdCxlLHQscyxyKX1fbGVycCh0LGUsaSxyLG8pe2xldCBzPTEtcjtmb3IobGV0IGE9MDthIT09bzsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qcyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2ZvcihsZXQgcz0wO3MhPT1vOysrcyl7bGV0IGE9ZStzO3RbYV09dFthXSt0W2krc10qcn19fSxOej0iXFxbXFxdXFwuOlxcLyIsVjhlPW5ldyBSZWdFeHAoIlsiK056KyJdIiwiZyIpLEx6PSJbXiIrTnorIl0iLEg4ZT0iW14iK056LnJlcGxhY2UoIlxcLiIsIiIpKyJdIixVOGU9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixMeiksejhlPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLEg4ZSksajhlPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxHOGU9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxXOGU9bmV3IFJlZ0V4cCgiXiIrVThlK3o4ZStqOGUrRzhlKyIkIikscThlPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLEN6PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj1pfHxFci5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLHIpfWdldFZhbHVlKHQsZSl7dGhpcy5iaW5kKCk7bGV0IHI9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1yJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG89aS5sZW5ndGg7ciE9PW87KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxFcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnBhdGg9aSx0aGlzLnBhcnNlZFBhdGg9cnx8bi5wYXJzZVRyYWNrTmFtZShpKSx0aGlzLm5vZGU9bi5maW5kTm9kZShlLHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fGUsdGhpcy5yb290Tm9kZT1lLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZShlLGkscil7cmV0dXJuIGUmJmUuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgbi5Db21wb3NpdGUoZSxpLHIpOm5ldyBuKGUsaSxyKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShWOGUsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZShlKXtsZXQgaT1XOGUuZXhlYyhlKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitlKTtsZXQgcj17bm9kZU5hbWU6aVsyXSxvYmplY3ROYW1lOmlbM10sb2JqZWN0SW5kZXg6aVs0XSxwcm9wZXJ0eU5hbWU6aVs1XSxwcm9wZXJ0eUluZGV4OmlbNl19LG89ci5ub2RlTmFtZSYmci5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PW8mJi0xIT09byl7bGV0IHM9ci5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PXE4ZS5pbmRleE9mKHMpJiYoci5ub2RlTmFtZT1yLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLHIub2JqZWN0TmFtZT1zKX1pZihudWxsPT09ci5wcm9wZXJ0eU5hbWV8fDA9PT1yLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2UpO3JldHVybiByfXN0YXRpYyBmaW5kTm9kZShlLGkpe2lmKCFpfHwiIj09PWl8fCIuIj09PWl8fC0xPT09aXx8aT09PWUubmFtZXx8aT09PWUudXVpZClyZXR1cm4gZTtpZihlLnNrZWxldG9uKXtsZXQgcj1lLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoaSk7aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihlLmNoaWxkcmVuKXtsZXQgcj1mdW5jdGlvbihzKXtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErKyl7bGV0IGw9c1thXTtpZihsLm5hbWU9PT1pfHxsLnV1aWQ9PT1pKXJldHVybiBsO2xldCBjPXIobC5jaGlsZHJlbik7aWYoYylyZXR1cm4gY31yZXR1cm4gbnVsbH0sbz1yKGUuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KGUsaSl7ZVtpXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKWVbaSsrXT1yW29dfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXtlW2ldPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkoZSxpKX1fc2V0VmFsdWVfZGlyZWN0KGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKGUsaSl9X3NldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKGUsaSl9YmluZCgpe2xldCBlPXRoaXMubm9kZSxpPXRoaXMucGFyc2VkUGF0aCxyPWkub2JqZWN0TmFtZSxvPWkucHJvcGVydHlOYW1lLHM9aS5wcm9wZXJ0eUluZGV4O2lmKGV8fChlPW4uZmluZE5vZGUodGhpcy5yb290Tm9kZSxpLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9ZSksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCFlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKHIpe2xldCB1PWkub2JqZWN0SW5kZXg7c3dpdGNoKHIpe2Nhc2UibWF0ZXJpYWxzIjppZighZS5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCFlLm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7ZT1lLm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighZS5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO2U9ZS5za2VsZXRvbi5ib25lcztmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylpZihlW2RdLm5hbWU9PT11KXt1PWQ7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1lW3JdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtlPWVbcl19aWYodm9pZCAwIT09dSl7aWYodm9pZCAwPT09ZVt1XSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLGUpO2U9ZVt1XX19bGV0IGE9ZVtvXTtpZih2b2lkIDA9PT1hKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIraS5ub2RlTmFtZSsiLiIrbysiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIixlKTtsZXQgbD10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD1lLHZvaWQgMCE9PWUubmVlZHNVcGRhdGU/bD10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dm9pZCAwIT09ZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlJiYobD10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGM9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYodm9pZCAwIT09cyl7aWYoIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyI9PT1vKXtpZighZS5nZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTt2b2lkIDAhPT1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSYmKHM9ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10pfWM9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEsdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSB2b2lkIDAhPT1hLmZyb21BcnJheSYmdm9pZCAwIT09YS50b0FycmF5PyhjPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOkFycmF5LmlzQXJyYXkoYSk/KGM9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6dGhpcy5wcm9wZXJ0eU5hbWU9bzt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtjXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbY11bbF19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19cmV0dXJuIG4uQ29tcG9zaXRlPUN6LG59KSgpO0VyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxFci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxFci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxFci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxFci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldLEVyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtFci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXSxjbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLG89ci5sZW5ndGgscz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt2b2lkIDA9PT11JiYodT17fSxjW2xdPXUpO2ZvcihsZXQgZD0wO2QhPT1vOysrZCl7bGV0IHA9cltkXSxoPXAubmFtZSxmPXVbaF07aWYodm9pZCAwIT09ZikrK2YucmVmZXJlbmNlQ291bnQsc1tkXT1mO2Vsc2V7aWYoZj1zW2RdLHZvaWQgMCE9PWYpe251bGw9PT1mLl9jYWNoZUluZGV4JiYoKytmLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhmLGwsaCkpO2NvbnRpbnVlfWY9bmV3IHh6KEVyLmNyZWF0ZShpLGgsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1tkXS5iaW5kaW5nLnBhcnNlZFBhdGgpLHAuVmFsdWVUeXBlTmFtZSxwLmdldFZhbHVlU2l6ZSgpKSwrK2YucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGYsbCxoKSxzW2RdPWZ9YVtkXS5yZXN1bHRCdWZmZXI9Zi5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PW8udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnVzZUNvdW50JiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1vW2VdO2lmKHZvaWQgMD09PXMpcz17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW2VdPXM7ZWxzZXtsZXQgYT1zLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PWEubGVuZ3RoLGEucHVzaCh0KX10Ll9jYWNoZUluZGV4PXIubGVuZ3RoLHIucHVzaCh0KSxzLmFjdGlvbkJ5Um9vdFtpXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9ZVtlLmxlbmd0aC0xXSxyPXQuX2NhY2hlSW5kZXg7aS5fY2FjaGVJbmRleD1yLGVbcl09aSxlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQscz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9c1tvXSxsPWEua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgYS5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PWwubGVuZ3RoJiZkZWxldGUgc1tvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz10aGlzLl9iaW5kaW5ncyxzPXJbZV07dm9pZCAwPT09cyYmKHM9e30scltlXT1zKSxzW2ldPXQsdC5fY2FjaGVJbmRleD1vLmxlbmd0aCxvLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxvPWkucGF0aCxzPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPXNbcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbb10sMD09PU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmZGVsZXRlIHNbcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgazIobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsbz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LG8uX19jYWNoZUluZGV4PWksZVtpXT1vfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qsbz1yLnV1aWQscz0ic3RyaW5nIj09dHlwZW9mIHQ/TjIuZmluZEJ5TmFtZShyLHQpOnQsYT1udWxsIT09cz9zLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKHZvaWQgMD09PWkmJihpPW51bGwhPT1zP3MuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PWwpe2xldCBkPWwuYWN0aW9uQnlSb290W29dO2lmKHZvaWQgMCE9PWQmJmQuYmxlbmRNb2RlPT09aSlyZXR1cm4gZDtjPWwua25vd25BY3Rpb25zWzBdLG51bGw9PT1zJiYocz1jLl9jbGlwKX1pZihudWxsPT09cylyZXR1cm4gbnVsbDtsZXQgdT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBvPWUudHJhY2tzLHM9by5sZW5ndGgsYT1uZXcgQXJyYXkocyksbD17ZW5kaW5nU3RhcnQ6YXksZW5kaW5nRW5kOmF5fTtmb3IobGV0IGM9MDtjIT09czsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkocyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPTIyMDEsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJjAhPT10aGlzLnRpbWVTY2FsZSYmbnVsbD09PXRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixhPXIvbzt0LndhcnAoMSxvL3IsZSksdGhpcy53YXJwKGEsMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsaSl7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaSl9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUscz10aGlzLnRpbWVTY2FsZSxhPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1hJiYoYT1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9YSk7bGV0IGw9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1hLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytpLGNbMF09dC9zLGNbMV09ZS9zLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLGkscil7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1vKXtsZXQgbD0odC1vKSppO2lmKGw8MHx8MD09PWkpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgcz10aGlzLl91cGRhdGVUaW1lKGUpLGE9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKGE+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztpZigyNTAxPT09dGhpcy5ibGVuZE1vZGUpZm9yKGxldCB1PTAsZD1sLmxlbmd0aDt1IT09ZDsrK3UpbFt1XS5ldmFsdWF0ZShzKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShhKTtlbHNlIGZvcihsZXQgdT0wLGQ9bC5sZW5ndGg7dSE9PWQ7Kyt1KWxbdV0uZXZhbHVhdGUocyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWkpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PXImJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09aSYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LHM9MjIwMj09PWk7aWYoMD09PXQpcmV0dXJuLTE9PT1vP3I6cyYmMT09KDEmbyk/ZS1yOnI7aWYoMjIwMD09PWkpey0xPT09byYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTtlOntpZihyPj1lKXI9ZTtlbHNle2lmKCEocjwwKSl7dGhpcy50aW1lPXI7YnJlYWsgZX1yPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09byYmKHQ+PTA/KG89MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLHMpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLHMpKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEsbys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1vO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1sKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLHMpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxzKTt0aGlzLl9sb29wQ291bnQ9byx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKHMmJjE9PSgxJm8pKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD1seSxyLmVuZGluZ0VuZD1seSk6KHIuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/bHk6YXk6MjQwMixyLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/bHk6YXk6MjQwMil9X3NjaGVkdWxlRmFkaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxzPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1zJiYocz1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9cyk7bGV0IGE9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1zLnNhbXBsZVZhbHVlcztyZXR1cm4gYVswXT1vLGxbMF09ZSxhWzFdPW8rdCxsWzFdPWksdGhpc319KHRoaXMscyxlLGkpO3JldHVybiB0aGlzLl9iaW5kQWN0aW9uKHUsYyksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odSxhLG8pLHV9ZXhpc3RpbmdBY3Rpb24odCxlKXtsZXQgaT1lfHx0aGlzLl9yb290LHI9aS51dWlkLG89InN0cmluZyI9PXR5cGVvZiB0P04yLmZpbmRCeU5hbWUoaSx0KTp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvP28udXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09YSYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBpPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUsbz1NYXRoLnNpZ24odCkscz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQsbyxzKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShzKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1yW2ldO2lmKHZvaWQgMCE9PW8pe2xldCBzPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9cy5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1zW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxkPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkLl9jYWNoZUluZGV4PXUsZVt1XT1kLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXS5hY3Rpb25CeVJvb3RbZV07dm9pZCAwIT09bCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihsZXQgcyBpbiBvKXtsZXQgYT1vW3NdO2EucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9fXVuY2FjaGVBY3Rpb24odCxlKXtsZXQgaT10aGlzLmV4aXN0aW5nQWN0aW9uKHQsZSk7bnVsbCE9PWkmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGkpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGkpKX19LnByb3RvdHlwZS5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcj1uZXcgRmxvYXQzMkFycmF5KDEpO3ZhciBxTT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgcU0odm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fTsoY2xhc3MgZXh0ZW5kcyAkbXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgYWxlPW5ldyBKZSxpZz1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBKZSgxLzAsMS8wKSxlPW5ldyBKZSgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9YWxlLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBhbGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O2lnLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIENoPW5ldyAkLGQyPW5ldyBNbixnVT1uZXcgTW47ZnVuY3Rpb24gUmxlKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsUmxlKG4uY2hpbGRyZW5bZV0pKTtyZXR1cm4gdH12YXIgWThlPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gQnoobix0LGUpe2lmKDE9PT1lKXJldHVybiBuZXcgYW4odCk7bGV0IGk9Q20odCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHt0fWApO3JldHVybiBuZXcgYW4oRkgoaSxuKSgxLWUpKX1uZXcgSW50MzJBcnJheShZOGUuYnVmZmVyKSx5YS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHlhLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59LEhNLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX0sY2xhc3MgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsaT00NDczOTI0LHI9ODk0Nzg0OCl7aT1uZXcgYW4oaSkscj1uZXcgYW4ocik7bGV0IG89ZS8yLHM9dC9lLGE9dC8yLGw9W10sYz1bXTtmb3IobGV0IHA9MCxoPTAsZj0tYTtwPD1lO3ArKyxmKz1zKXtsLnB1c2goLWEsMCxmLGEsMCxmKSxsLnB1c2goZiwwLC1hLGYsMCxhKTtsZXQgbT1wPT09bz9pOnI7bS50b0FycmF5KGMsaCksaCs9MyxtLnRvQXJyYXkoYyxoKSxoKz0zLG0udG9BcnJheShjLGgpLGgrPTMsbS50b0FycmF5KGMsaCksaCs9M31sZXQgdT1uZXcgS2k7dS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IobCwzKSksdS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IoYywzKSksc3VwZXIodSxuZXcgamQoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfSxjbGFzcyBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKHQpe2xldCBlPVJsZSh0KSxpPW5ldyBLaSxyPVtdLG89W10scz1uZXcgYW4oMCwwLDEpLGE9bmV3IGFuKDAsMSwwKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7bGV0IHU9ZVtjXTt1LnBhcmVudCYmdS5wYXJlbnQuaXNCb25lJiYoci5wdXNoKDAsMCwwKSxyLnB1c2goMCwwLDApLG8ucHVzaChzLnIscy5nLHMuYiksby5wdXNoKGEucixhLmcsYS5iKSl9aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IobywzKSksc3VwZXIoaSxuZXcgamQoe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSkpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtnVS5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAscz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dO2EucGFyZW50JiZhLnBhcmVudC5pc0JvbmUmJihkMi5tdWx0aXBseU1hdHJpY2VzKGdVLGEubWF0cml4V29ybGQpLENoLnNldEZyb21NYXRyaXhQb3NpdGlvbihkMiksci5zZXRYWVoocyxDaC54LENoLnksQ2gueiksZDIubXVsdGlwbHlNYXRyaWNlcyhnVSxhLnBhcmVudC5tYXRyaXhXb3JsZCksQ2guc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQyKSxyLnNldFhZWihzKzEsQ2gueCxDaC55LENoLnopLHMrPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfSxHdS5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLGh6LmV4dHJhY3RVcmxCYXNlKG4pfSxHdS5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX0saWcucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LGlnLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0saWcucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LGlnLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sSmEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LEphLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sSmEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEphLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxKYS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9LEFoLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx2eS5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX0sUG8ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sUG8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFBvLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxQby5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfSxNbi5wcm90b3R5cGUuZXh0cmFjdFBvc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKSx0aGlzLmNvcHlQb3NpdGlvbihuKX0sTW4ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sTW4ucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgJCkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxNbi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sTW4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxNbi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LE1uLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LGtjLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LENzLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LENzLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sSWgucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sS3IucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LEtyLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LEtyLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxLci5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sS3IucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LEtyLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksS3IuZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LEtyLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLEtyLmdldE5vcm1hbChuLHQsZSxpKX0sR2QucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LEdkLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBPaCh0aGlzLG4pfSxHZC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyB0Zyh0aGlzLG4pfSxKZS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sSmUucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSxKZS5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LCQucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUobil9LCQucHJvdG90eXBlLmdldENvbHVtbkZyb21NYXRyaXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCxuKX0sJC5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LCQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LCQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSwkLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sdHIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LHRyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sR2kucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0sR2kucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LEdpLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0sR2kucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxHaS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHaS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLHlvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHlvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksVDIucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4cy5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTmwucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTHIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09ZzJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShnMil9fX0pLExyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9nMjpNTSksdGhpc30sTHIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTHIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sS2kucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sS2kucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBMcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxLaS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxLaS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxLaS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxLaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LEtpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEtpLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksJG0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/ZzI6TU0pLHRoaXN9LCRtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sT2gucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE9oLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGJ5LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scU0ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWG8ucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBhbn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoemQucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxaaS5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxaaS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxaaS5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxaaS5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0sWmkucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxaaS5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LFppLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxaaS5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LFppLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxaaS5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sWmkucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFppLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP0ZyOkRofX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRWxlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2YS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IGd6KS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxETS5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxETS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0sVWQuY3Jvc3NPcmlnaW49dm9pZCAwLFVkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IHN6O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30sVWQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgb3o7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxVZC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFVkLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246IjEzNyJ9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSIxMzciKTt2YXIgTmM9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0oTmN8fChOYz17fSkpLE5jKSkoKTtmdW5jdGlvbiBrbGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBMcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBGbGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLHM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghc3x8cy5jb3VudCE9PXIpJiYocz1uZXcgTHIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLHMpKTtsZXQgYT1zLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsZCxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxoPW5ldyBKZShjLHUpLGY9bmV3IEplKGQscCksbT1uZXcgSmUoZC1jLHAtdSksQz1uZXcgSmUoLW0ueSxtLngpLnNldExlbmd0aChlLzIpLF89aC5jbG9uZSgpLmFkZChDKSx5PWguY2xvbmUoKS5zdWIoQyksST1mLmNsb25lKCkuYWRkKEMpLEE9Zi5jbG9uZSgpLnN1YihDKSxPPVtfLngsXy55LDAseS54LHkueSwwLEkueCxJLnksMCxJLngsSS55LDAseS54LHkueSwwLEEueCxBLnksMF07YS5zZXQoTyxsKk8ubGVuZ3RoKX1zLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBZMihuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTpzfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1CeihuLG8scz8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgUTI9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sc109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09c319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LEF5PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0oQXl8fChBeT17fSkpLEF5KSkoKSxLMj1jbGFzcyBleHRlbmRzIFEye3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6QXkuTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkF5Lk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxzPXt4Om9bMF0seTpvWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGQ9aXNOYU4oYyl8fGlzTmFOKHUpO2QhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PWE/e3g6Yyx5OnV9OmEpKSxpPWwpLGR8fChhPXt4OmMseTp1fSkscj1kfXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYT8/cykpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6cyxwb2x5bGluZTphfV1vZiByLmVudHJpZXMoKSlpZihzPT09QXkuTlVNQkVSKTI9PT1hLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDphWzBdLHk6YVsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLGEse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsYVtsXSxhW2wrMV1dKSx7eDphW2xdLHk6YVtsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sWjI9Y2xhc3MgZXh0ZW5kcyBIdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IEptKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxKMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIHJyLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBIdix0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9UlIodD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixzKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFJY19hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgcz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixzKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWkscz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrcy8zLGUueCtyLzIsZS55K3MvMyxlLngsZS55LTIqcy8zXSksbD1SUih0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWkscz1SUih0Py5kb20sKCk9PntsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGEpLGF9LGE9PihhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxhKSxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDp7ZG9tOnMsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOnN9PXIsYT0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LWEvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCthLzIsaS55K28vMl0pLGM9UlIodD8uZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx1fSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPXMse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSByci5XRUJHTDp7bGV0IGU9bmV3IFoyO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgYnksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLEljX2lzV2ViR2wyT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IFppKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2YgeW8pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IHU9QnoodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLGQ9bmV3IEtpLHA9bmV3IGpkKHtjb2xvcjp1fSksaD1uZXcgeW8oZCxwKTtyZXR1cm4gcC52aXNpYmxlPXIsRmxlKGQsZSxvKSx0aGlzLnNjZW5lLmFkZChoKSx7dHlwZTpOYy5MSU5FLGRhdGE6ZSxvYmozZDpoLHdpZHRoOm99fWxldHtkYXRhOnMsb2JqM2Q6YSx3aWR0aDpsfT10O3JldHVybiBZMih0aGlzLmJhY2tncm91bmRDb2xvcixhLHU9PigobyE9PWx8fCFzfHwhSWNfYXJlUG9seWxpbmVzRXF1YWwocyxlKSkmJkZsZSh1LGUsbyksdSksaSk/e3R5cGU6TmMuTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUscz1Ceih0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLGE9bmV3IEttKHtjb2xvcjpzLHZpc2libGU6aX0pO3JldHVybiBuZXcgeW8odCxhKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixzPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgS2k7a2xlKGwscyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KGtsZShsLHMpLGwpLGkpP3t0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgeHkoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gWTIodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIscz0yL01hdGguc3FydCgzKSpvLGE9bmV3IEdkKFtuZXcgSmUoZS54LXMvMixlLnktby8yKSxuZXcgSmUoZS54LGUueStvLzIpLG5ldyBKZShpLngsaS55K28vMiksbmV3IEplKGkueCtzLzIsaS55LW8vMildKTthLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgdGcoYSk7aWYoIXQpe2xldCB1PXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09dT9udWxsOih0aGlzLnNjZW5lLmFkZCh1KSx7dHlwZTpOYy5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp1fSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6TmMuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgSzIoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoQWModCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShBYyh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSwkYT0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KCRhfHwoJGE9e30pKSwkYSkpKCksSXk9KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KEl5fHwoSXk9e30pKSxJeSkpKCk7ZnVuY3Rpb24gTGxlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciByZz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1yci5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtyclt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9cmcud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6JGEuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTokYS5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8scyk9Pm8rcy5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgcz0wO3M8by5wb2ludHMubGVuZ3RoO3MrKylpW2UrK109by5wb2ludHNbc10ueCxpW2UrK109by5wb2ludHNbc10ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBJeS5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgSXkuT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBXdShuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uIEtNKG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBlTyhuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fXJnLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPUxsZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9MmMxZTcxYzUiKTt2YXIgSHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtmdW5jdGlvbiBVbGUobil7Zm9yKGxldCB0IG9mIG4paWYoU3RyaW5nKHQpLmluY2x1ZGVzKCJlIikpcmV0dXJuITA7cmV0dXJuITF9dmFyIFpNPXtnZXRTdGFuZGFyZFRpY2tzOmVPLGdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLHM9bi50aWNrcyhpLDIpO2lmKG8tcj49ODY0ZTV8fHMubGVuZ3RoPjIpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBhPW4udGlja3MoaSxlKTtyZXR1cm57bWFqb3I6cy5tYXAobD0+KHtzdGFydDpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRTaG9ydChsKX0pKSxtaW5vcjphLm1hcChsPT4oe3ZhbHVlOmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobCl9KSl9fSxnZXRUaWNrc0ZvckxpbmVhclNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWkscz1NYXRoLmFicyhvLXIpO2lmKHM+LjAwMSlyZXR1cm4gZU8obix0LGUsaSk7bGV0IGE9bi50aWNrcyhbcixvXSxlKSxsPW4udGlja3MoW3Isb10sMik7aWYoVWxlKGEpfHxVbGUobCkpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBjPVtdLHU9ZnVuY3Rpb24obil7bGV0IHQ9bi50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PXQubGVuZ3RoP051bWJlcih0WzFdKS0xOjB9KHMpO3M8MSYmbC5ldmVyeShoPT57bGV0IGY9TWF0aC5hYnMoaCk7cmV0dXJuIGY+PTAmJmY8MX0pJiYodSs9MSk7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGggb2YgbCl7bGV0W2YsbT0iIl09U3RyaW5nKGgpLnNwbGl0KCIuIiwyKSxDPU51bWJlcihmKyIuIittLnNsaWNlKDAsdSkpO2Quc2V0KEMse3N0YXJ0OkMsdGlja0Zvcm1hdHRlZFN0cmluZzowPT09Qz8iXHUyMDE0Ijp0LmZvcm1hdFJlYWRhYmxlKEMpfSl9bGV0IHA9MTAqTWF0aC5wb3coMTAsLXUpO2ZvcihsZXQgaCBvZiBhKWZvcihsZXQgZiBvZlsuLi5kLmtleXMoKV0ucmV2ZXJzZSgpKXtsZXQgbT1oLWY7aWYobT49MCYmbTxwKXtpZigwPT09ZiljLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2soaCl9KTtlbHNle2xldCBDPVN0cmluZyhoKS5zbGljZShTdHJpbmcoZikubGVuZ3RoKTtjLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzpgXHUyMDI2JHtDfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbShkLnZhbHVlcygpKSxtaW5vcjpjfX0sZmlsdGVyVGlja3NCeVZpc2liaWxpdHk6ZnVuY3Rpb24obix0LGUsaSxyPTUpe2lmKCFuLmxlbmd0aHx8IUh6KXJldHVybiBuO2xldCBvPSJ4Ij09PWU/MTotMSxzPW51bGw7cmV0dXJuIG4uZmlsdGVyKGE9PntsZXQgbD10KGEpO0h6LmZvbnQ9aTtsZXQgYz1Iei5tZWFzdXJlVGV4dChhLnRpY2tGb3JtYXR0ZWRTdHJpbmcpLHU9IngiPT09ZT9jLndpZHRoOmMuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQtYy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7cmV0dXJuIG51bGw9PT1zPyEobCtvKnU8MHx8KHM9bCtvKnUsMCkpOiEobyoocytvKnItbCk+MHx8KHM9bCtvKnUsMCkpfSl9fTtmdW5jdGlvbiBlamUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsMTcpKDEsInRleHQiKSxEKDIpLHYoKSxnKDMsInRpdGxlIiksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLE90KCJmb250IixpLmF4aXNGb250KSx6ZSgieCIsaS50ZXh0WFBvc2l0aW9uKGUudmFsdWUpKSgieSIsaS50ZXh0WVBvc2l0aW9uKGUudmFsdWUpKSx4KDEpLHFlKCIgIixlLnRpY2tGb3JtYXR0ZWRTdHJpbmcsIiAiKSx4KDIpLHl0KGkuZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnZhbHVlKSl9fWZ1bmN0aW9uIHRqZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjApKDEsInNwYW4iKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXQubGFzdCxvPU0oMik7T3QoImxlZnQiLG8uZ2V0TWFqb3JYUG9zaXRpb24oZSksInB4IikoIndpZHRoIixvLmdldE1ham9yV2lkdGhTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImJvdHRvbSIsby5nZXRNYWpvcllQb3NpdGlvbihlKSwicHgiKSgiaGVpZ2h0IixvLmdldE1ham9ySGVpZ2h0U3RyaW5nKGUscixvLm1ham9yVGlja3NbaSsxXSkpKCJmb250IixvLmF4aXNGb250KSxhdCgibWFqb3ItbGFiZWwiLCEwKSgibGFzdCIsciksYigidGl0bGUiLG8uZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnN0YXJ0KSkseCgyKSx5dChlLnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiBuamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSx0amUsMywxNiwic3BhbiIsMTkpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLm1ham9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ham9yVGljayl9fXZhciB6bGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBHLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCBlPW51bGwscj1LTSgieCI9PT10aGlzLmF4aXM/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMuZ3JpZENvdW50KTtlPXRoaXMuc2NhbGUgaW5zdGFuY2VvZiByTT9aTS5nZXRUaWNrc0ZvckxpbmVhclNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIG9NP1pNLmdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZSh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpOlpNLmdldFN0YW5kYXJkVGlja3ModGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KSx0aGlzLm1ham9yVGlja3M9ZS5tYWpvcix0aGlzLm1pbm9yVGlja3M9Wk0uZmlsdGVyVGlja3NCeVZpc2liaWxpdHkoZS5taW5vcixvPT50aGlzLmdldERvbVBvcyhvLnZhbHVlKSx0aGlzLmF4aXMsIjExcHggUm9ib3RvLCBzYW5zLXNlcmlmIil9Z2V0Rm9ybWF0dGVyKCl7cmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyPz90aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayhlKXtyZXR1cm4gZS52YWx1ZX10cmFja0J5TWFqb3JUaWNrKGUpe3JldHVybiBlLnN0YXJ0fWdldERvbVBvcyhlKXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxXdSh0aGlzLmRvbURpbSx0aGlzLmF4aXMpLGUpfXRleHRYUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzP1N0cmluZyh0aGlzLmdldERvbVBvcyhlKSk6IjEwMCUifXRleHRZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOlN0cmluZyh0aGlzLmdldERvbVBvcyhlKSl9Z2V0TWFqb3JYUG9zaXRpb24oZSl7cmV0dXJuInkiPT09dGhpcy5heGlzPzA6TWF0aC5taW4odGhpcy5kb21EaW0ud2lkdGgsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9yV2lkdGhTdHJpbmcoZSxpLHIpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5nZXRNYWpvclhQb3NpdGlvbihyKSktdGhpcy5nZXRNYWpvclhQb3NpdGlvbihlKSsicHgifWdldE1ham9yWVBvc2l0aW9uKGUpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8wOnRoaXMuZG9tRGltLmhlaWdodC1NYXRoLm1pbih0aGlzLmRvbURpbS5oZWlnaHQsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9ySGVpZ2h0U3RyaW5nKGUsaSxyKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6KGl8fCFyP3RoaXMuZG9tRGltLmhlaWdodDp0aGlzLmdldE1ham9yWVBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWVBvc2l0aW9uKGUpKyJweCJ9a2V5ZG93blByZXZlbnRDbG9zZShlKXsiRXNjYXBlIiE9PWUua2V5JiZlLnN0b3BQcm9wYWdhdGlvbigpfWV4dGVudENoYW5nZWQoZSxpKXtsZXQgcj1OdW1iZXIoZSksbz1OdW1iZXIoaSk7aWYobzxyKXtsZXQgcz1yO3I9byxvPXN9IU51bWJlci5pc0Zpbml0ZShyKXx8IU51bWJlci5pc0Zpbml0ZShvKXx8dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdChbcixvXSl9b25BeGlzVXBkYXRlTWVudU9wZW4oZSxpLHIpe2UudmFsdWU9U3RyaW5nKHJbMF0pLGkudmFsdWU9U3RyaW5nKHJbMV0pLGUuZm9jdXMoKX1zZXRFZGl0TWVudU9wZW5lZChlKXt0aGlzLmVkaXRNZW51T3BlbmVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyNix2YXJzOjEzLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnVPcGVuZWQiLCJtZW51Q2xvc2VkIl0sWyJtYXRNZW51VHJpZ2dlciIsIm1hdE1lbnVUcmlnZ2VyIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm1ham9yIHRpY2tzIiw0LCJuZ0lmIl0sWyJ4UG9zaXRpb24iLCJiZWZvcmUiLDMsInlQb3NpdGlvbiJdLFsibWFudWFsQ29udHJvbCIsIm1hdE1lbnUiXSxbMSwiZXh0ZW50LWVkaXQtaW5wdXQiLDMsImNsaWNrIiwia2V5ZG93biJdLFsidHlwZSIsIm51bWJlciIsMywidmFsdWUiXSxbIm1pbklucHV0IiwiIl0sWyJtYXhJbnB1dCIsIiJdLFsxLCJleHRlbnQtZWRpdC1jb250cm9sIiwzLCJrZXlkb3duIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsMSwiZXh0ZW50LWVkaXQtY2hhbmdlIiwzLCJjbGljayJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwxLCJleHRlbnQtZWRpdC1jYW5jZWwiLDMsImNsaWNrIl0sWzEsIm1pbm9yLXRpY2stbGFiZWwiXSxbMSwibWFqb3IiLCJ0aWNrcyJdLFszLCJtYWpvci1sYWJlbCIsImxhc3QiLCJsZWZ0Iiwid2lkdGgiLCJib3R0b20iLCJoZWlnaHQiLCJmb250IiwidGl0bGUiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFszLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIpLE4oMSwiZGl2IiwwKSxnKDIsImRpdiIsMSksam4oKSxnKDMsInN2ZyIsMiksRSg0LGVqZSw1LDYsImciLDMpLHYoKSxTYSgpLGcoNSwiYnV0dG9uIiw0LDUpLFAoIm1lbnVPcGVuZWQiLGZ1bmN0aW9uKCl7cmUocik7bGV0IHM9c3QoMTUpLGE9c3QoMjApO3JldHVybiBpLm9uQXhpc1VwZGF0ZU1lbnVPcGVuKHMsYSxpLmF4aXNFeHRlbnQpLG9lKGkuc2V0RWRpdE1lbnVPcGVuZWQoITApKX0pKCJtZW51Q2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLnNldEVkaXRNZW51T3BlbmVkKCExKX0pLE4oNywibWF0LWljb24iLDYpLHYoKSgpLEUoOCxuamUsMiwyLCJkaXYiLDcpLHYoKSxnKDksIm1hdC1tZW51Iiw4LDkpKDExLCJkaXYiLDEwKSxQKCJjbGljayIsZnVuY3Rpb24ocyl7cmV0dXJuIHMuc3RvcFByb3BhZ2F0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMTIsImxhYmVsIiksRCgxMywibWluIiksdigpLE4oMTQsImlucHV0IiwxMSwxMiksdigpLGcoMTYsImRpdiIsMTApLFAoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksZygxNywibGFiZWwiKSxEKDE4LCJtYXgiKSx2KCksTigxOSwiaW5wdXQiLDExLDEzKSx2KCksZygyMSwiZGl2IiwxNCksUCgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMjIsImJ1dHRvbiIsMTUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDE1KSxhPXN0KDIwKSxsPXN0KDYpO3JldHVybiBpLmV4dGVudENoYW5nZWQocy52YWx1ZSxhLnZhbHVlKSxvZShsLmNsb3NlTWVudSgpKX0pLEQoMjMsIiBDaGFuZ2UgIiksdigpLGcoMjQsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShyKSxvZShzdCg2KS5jbG9zZU1lbnUoKSl9KSxEKDI1LCIgQ2FuY2VsICIpLHYoKSgpKCl9aWYoMiZlKXtsZXQgcj1zdCgxMCk7ZWEoaS5heGlzKyItYXhpcyBheGlzIikseCg0KSxiKCJuZ0Zvck9mIixpLm1pbm9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeU1pbm9yVGljaykseCgxKSxhdCgiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixpLmVkaXRNZW51T3BlbmVkKSxiKCJtYXRNZW51VHJpZ2dlckZvciIscikseCgzKSxiKCJuZ0lmIixpLm1ham9yVGlja3MubGVuZ3RoKSx4KDEpLGIoInlQb3NpdGlvbiIsInkiPT09aS5heGlzPyJhYm92ZSI6ImJlbG93IikseCg1KSxiKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzBdKSx4KDUpLGIoInZhbHVlIixpLmF4aXNFeHRlbnRbMV0pfX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixabixJdSxQdV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZToxMXB4O3VzZXItc2VsZWN0Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0sIC5taW5vcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDA7b3ZlcmZsb3c6aGlkZGVufS5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7ZmxleDowIDAgMXB4O2p1c3RpZnktY29udGVudDpzdHJldGNofS50aWNrc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTozcHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTp0ZXh0LWJlZm9yZS1lZGdlO3RleHQtYW5jaG9yOm1pZGRsZX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NXB4fS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDt0ZXh0LWFuY2hvcjplbmR9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2ZvbnQtc2l6ZTowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDo1cHg7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjRweH0uZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDo1cHg7ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxMnB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczozMHB4IG1pbm1heChhdXRvLCAxMDBweCk7aGVpZ2h0OjMwcHg7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItc3R5bGU6c29saWQ7Y29sb3I6aW5oZXJpdH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjEuNDttYXJnaW4tbGVmdDo1cHg7cGFkZGluZzowIDEwcHh9LmF4aXNbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4dGVudC1lZGl0LW1lbnUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OnZpc2libGV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Y29udGFpbjpzdHJpY3R9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzllOWU5ZTtwYWRkaW5nOjAgNXB4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzllOWU5ZTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjVweCAwO3dpZHRoOjEwMCV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBKTShuLHQpe2xldCBlPU1hdGgubWluKEZ1KG4ubWFwKCh7eDpvfSk9Pm8pLHQpLG4ubGVuZ3RoLTEpLGk9TWF0aC5tYXgoMCxlLTEpO3JldHVybiBNYXRoLmFicyhuW2ldLngtdCktTWF0aC5hYnMobltlXS54LXQpPD0wP2k6ZX1mdW5jdGlvbiBqbGUobix0LGUsaSxyLG8pe2xldCBzO3N3aXRjaChuLmRlbHRhTW9kZSl7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTDpzPTE7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FOnM9ODticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0U6cz0yMDticmVhaztkZWZhdWx0OnM9MSxjb25zb2xlLndhcm4oYFVua25vd24gV2hlZWxFdmVudCBkZWx0YU1vZGU6ICR7bi5kZWx0YU1vZGV9LmApfWxldCBhPW4uZGVsdGFZKnMsbD1hPDA/TWF0aC5tYXgoYSppLC0uOTUpOmEqaSx7d2lkdGg6YyxoZWlnaHQ6dX09ZSxkPVtyLnJldmVyc2UodC54LFswLGNdLC1uLm9mZnNldFgqbCksci5yZXZlcnNlKHQueCxbMCxjXSxjKyhjLW4ub2Zmc2V0WCkqbCldLHA9W28ucmV2ZXJzZSh0LnksW3UsMF0sLW4ub2Zmc2V0WSpsKSxvLnJldmVyc2UodC55LFt1LDBdLHUrKHUtbi5vZmZzZXRZKSpsKV07cmV0dXJue3g6ZFsxXTxkWzBdP1tkWzFdLGRbMF1dOmQseTpwWzFdPHBbMF0/W3BbMV0scFswXV06cH19dmFyIG9qZT1bImRvdHMiXTtmdW5jdGlvbiBzamUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwxMikpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7emUoImN4IixpLmdldERvbVgoZS5kYXRhUG9pbnQueCkpKCJjeSIsaS5nZXREb21ZKGUuZGF0YVBvaW50LnkpKSgiZmlsbCIsZS5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIGFqZShuLHQpe2lmKDEmbiYmKGpuKCksS3QoMCksRSgxLHNqZSwxLDMsImNpcmNsZSIsMTEpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO3goMSksYigibmdJZiIsaS5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQoZS5kYXRhUG9pbnQpKX19ZnVuY3Rpb24gbGplKG4sdCl7aWYoMSZuJiYoam4oKSxLdCgwKSxFKDEsYWplLDIsMSwibmctY29udGFpbmVyIiwxMCksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLmN1cnNvcmVkRGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5U2VyaWVzTmFtZSl9fWZ1bmN0aW9uIGNqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJyZWN0IiwxMykpLDImbil7bGV0IGU9TSgpO3plKCJ4IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS54KSgid2lkdGgiLGUuem9vbUJveEluVWlDb29yZGluYXRlLndpZHRoKSgieSIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUueSkoImhlaWdodCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUuaGVpZ2h0KX19dmFyIHVqZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJue2RhdGE6bixjdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkOnQsY3Vyc29yTG9jYXRpb246ZX19O2Z1bmN0aW9uIGRqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNCksQWkoMSwxNSksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDExKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUudG9vbHRpcFRlbXBsYXRlP2UudG9vbHRpcFRlbXBsYXRlOmkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsa2IoMix1amUsZS5jdXJzb3JlZERhdGEsZS5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLGUuY3Vyc29yTG9jYXRpb24pKX19ZnVuY3Rpb24gcGplKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMTcpKDIsInRkIiwxOCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDE5KSxEKDUpLHYoKSxnKDYsInRkIiksRCg3KSx2KCksZyg4LCJ0ZCIpLEQoOSksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt4KDMpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLHl0KGUubWV0YWRhdGEuZGlzcGxheU5hbWUpLHgoMikseXQoZS5kYXRhUG9pbnQueSkseCgyKSx5dChlLmRhdGFQb2ludC54KX19ZnVuY3Rpb24gaGplKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIpKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwxNiksZyg0LCJ0aCIpLEQoNSwiTmFtZSIpLHYoKSxnKDYsInRoIiksRCg3LCJZIiksdigpLGcoOCwidGgiKSxEKDksIlgiKSx2KCkoKSgpLGcoMTAsInRib2R5IiksRSgxMSxwamUsMTAsNSwibmctY29udGFpbmVyIiwxMCksdigpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9TSgpO3goMTEpLGIoIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBtamUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIEdsZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgRyx0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBHLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBHLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1rcix0aGlzLnN0YXRlPW5ldyBWcihrci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUoQigoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9rci5QQU5OSU5HOmtyLkRSQUdfWk9PTUlORztpPT09a3IuTk9ORSYmcj09PWtyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09a3IuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxzPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLGE9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sc10seTpbYSxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChrci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBrci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoa3IuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBrci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2Uga3IuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDpzfT10aGlzLmRvbURpbSxhPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKHMrciksdT10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W2EsbF0seTpbYyx1XX19KTticmVha31jYXNlIGtyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLGxpKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksdmkoZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLGp0KGUpKTp4YSgzZTMpLnBpcGUoTnQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLEIoKCk9Pm51bGwpKX0pLEhlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6amxlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChrci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZULG89KGUuYnV0dG9ucyZZYS5NSURETEUpPT09WWEuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsV3UodGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxXdSh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksV3UodGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89Sk0oaS5wb2ludHMsZS54KSxzPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OnMsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKHMueCkseTp0aGlzLmdldERvbVkocy55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhubiksdyhvbSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChvamUsNyxBZSksbHQoUXAsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUifSxvdXRwdXRzOntvblZpZXdFeHRlbnRDaGFuZ2U6Im9uVmlld0V4dGVudENoYW5nZSIsb25WaWV3RXh0ZW50UmVzZXQ6Im9uVmlld0V4dGVudFJlc2V0IixvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2U6Im9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6b20sdXNlRmFjdG9yeTptamUsZGVwczpbUWldfV0pLHp0XSxkZWNsczoxMix2YXJzOjE1LGNvbnN0czpbWzEsImRvdHMiXSxbImRvdHMiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJ6b29tLWJveCIsNCwibmdJZiJdLFsxLCJ6b29tLWluc3RydWN0aW9uIl0sWzEsImluc3RydWN0aW9uLWNvbnRlbnQiXSxbImNka092ZXJsYXlPcmlnaW4iLCIiLDEsInRvb2x0aXAtb3JpZ2luIl0sWyJ0b29sdGlwT3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJkZXRhY2giXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWzEsInRvb2x0aXAtY29udGFpbmVyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzEsInRvb2x0aXAtcm93Il0sWzEsInRvb2x0aXAtcm93LWNpcmNsZSJdLFsxLCJuYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoam4oKSxnKDAsInN2ZyIsMCwxKSxFKDIsbGplLDIsMiwibmctY29udGFpbmVyIiwyKSxFKDMsY2plLDEsNCwicmVjdCIsMyksdigpLFNhKCksZyg0LCJkaXYiLDQpKDUsInNwYW4iLDUpLEQoNiwiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSx2KCkoKSxOKDcsImRpdiIsNiw3KSxFKDksZGplLDIsNiwibmctdGVtcGxhdGUiLDgpLFAoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKX0pLEUoMTAsaGplLDEyLDIsIm5nLXRlbXBsYXRlIixudWxsLDksZW4pKSwyJmUmJihhdCgicGFubmFibGUiLGkuc3BlY2lhbEtleVByZXNzZWQpKCJkcmFnZ2FibGUiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FfHxpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuRFJBR19aT09NSU5HKSgicGFubmluZyIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLlBBTk5JTkcpLHgoMiksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkUpLHgoMSksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykseCg2KSxiKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixpLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixpLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixpLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCkpfSxkZXBlbmRlbmNpZXM6W3luLFhlLE5vLFFwLHNtXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTt1c2VyLXNlbGVjdDpub25lfS5kb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5kb3RzLmRyYWdnYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmNyb3NzaGFpcn0uZG90cy5wYW5uYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJ9LmRvdHMucGFubmluZ1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJiaW5nfS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjYpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXAtb3JpZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udG9vbHRpcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuODUpO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Y29udGFpbjpwYWludCBzdHlsZSBsYXlvdXQ7Zm9udC1zaXplOi45ZW07b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjVweDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCV9dGhbX25nY29udGVudC0lQ09NUCVdLCB0ZFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggNXB4O3RleHQtYWxpZ246bGVmdH10aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmctYm90dG9tOjVweH0uem9vbS1ib3hbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTouMDM7ZmlsbDojMDAwO3N0cm9rZTojY2NjfS56b29tLWluc3RydWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDowO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEwcHg7dHJhbnNpdGlvbjpvcGFjaXR5IC41czt6LWluZGV4OjF9Lmluc3RydWN0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNob3ctem9vbS1pbnN0cnVjdGlvbltfbmdob3N0LSVDT01QJV0gICAuem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gX2plKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImxpbmUiLDIpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO2F0KCJ6ZXJvIiwwPT09ZSksemUoIngxIixpLmdldERvbVgoZSkpKCJ4MiIsaS5nZXREb21YKGUpKSgieTIiLGkuZG9tRGltLmhlaWdodCl9fWZ1bmN0aW9uIHZqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJsaW5lIiwzKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTthdCgiemVybyIsMD09PWUpLHplKCJ5MSIsaS5nZXREb21ZKGUpKSgieDIiLGkuZG9tRGltLndpZHRoKSgieTIiLGkuZ2V0RG9tWShlKSl9fXZhciBXbGU9KCgpPT57Y2xhc3MgbntnZXREb21YKGUpe3JldHVybiB0aGlzLnhTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC54LFd1KHRoaXMuZG9tRGltLCJ4IiksZSl9Z2V0RG9tWShlKXtyZXR1cm4gdGhpcy55U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfWdldFhUaWNrcygpe3JldHVybiB0aGlzLnhTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueCxLTSh0aGlzLmRvbURpbS53aWR0aCx0aGlzLnhHcmlkQ291bnQpKX1nZXRZVGlja3MoKXtyZXR1cm4gdGhpcy55U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LnksS00odGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMueUdyaWRDb3VudCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0LWdyaWQtdmlldyJdXSxpbnB1dHM6e3ZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix4R3JpZENvdW50OiJ4R3JpZENvdW50Iix5U2NhbGU6InlTY2FsZSIseUdyaWRDb3VudDoieUdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0ifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sieTEiLCIwIiwzLCJ6ZXJvIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIngxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ5MSIsIjAiXSxbIngxIiwiMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGpuKCksZygwLCJzdmciKSxFKDEsX2plLDEsNSwibGluZSIsMCksRSgyLHZqZSwxLDUsImxpbmUiLDEpLHYoKSksMiZlJiYoeCgxKSxiKCJuZ0Zvck9mIixpLmdldFhUaWNrcygpKSx4KDEpLGIoIm5nRm9yT2YiLGkuZ2V0WVRpY2tzKCkpKX0sZGVwZW5kZW5jaWVzOlt5bl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2NjYztcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC56ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGJqZT1bInNlcmllc1ZpZXciXSx4amU9WyJ4QXhpcyJdLENqZT1bInlBeGlzIl0sd2plPVsiY2hhcnRFbCJdO2Z1bmN0aW9uIE1qZShuLHQpe2lmKDEmbiYmTigwLCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsMTYpLDImbil7bGV0IGU9TSgpO2IoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgieEdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJ5R3JpZENvdW50IixlLllfR1JJRF9DT1VOVCkoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLm1haW4pfX1mdW5jdGlvbiBTamUobix0KXsxJm4mJihqbigpLE4oMCwic3ZnIixudWxsLDE3KSl9ZnVuY3Rpb24gRWplKG4sdCl7MSZuJiZOKDAsImNhbnZhcyIsbnVsbCwxNyl9ZnVuY3Rpb24gVGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFNqZSwyLDAsInN2ZyIsNSksRSgyLEVqZSwyLDAsImNhbnZhcyIsNSksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuU1ZHKSx4KDEpLGIoIm5nSWYiLGUuZ2V0UmVuZGVyZXJUeXBlKCk9PT1lLlJlbmRlcmVyVHlwZS5XRUJHTCl9fWZ1bmN0aW9uIERqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsMTgpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkKHIpKX0pKCJvblZpZXdFeHRlbnRSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLnZpZXdCb3hSZXNldCgpKX0pKCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKSxpPXN0KDEpO2IoInNlcmllc0RhdGEiLGUuc2VyaWVzRGF0YSkoInNlcmllc01ldGFkYXRhTWFwIixlLnNlcmllc01ldGFkYXRhTWFwKSgidmlld0V4dGVudCIsZS52aWV3Qm94KSgieFNjYWxlIixlLnhTY2FsZSkoInlTY2FsZSIsZS55U2NhbGUpKCJ0b29sdGlwT3JpZ2luRWwiLGkpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKSgidG9vbHRpcFRlbXBsYXRlIixlLnRvb2x0aXBUZW1wbGF0ZSl9fXZhciBBamU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIElqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOSksQWkoMSwyMCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbU4oMixBamUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIFBqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMociwieSIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJheGlzRXh0ZW50IixlLnZpZXdCb3gueSkoImN1c3RvbUZvcm1hdHRlciIsZS5jdXN0b21ZRm9ybWF0dGVyKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMueUF4aXMpKCJncmlkQ291bnQiLGUuWV9HUklEX0NPVU5UKSgic2NhbGUiLGUueVNjYWxlKX19ZnVuY3Rpb24gUmplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibGluZS1jaGFydC1heGlzIiwyMiksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhyLCJ4IikpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImF4aXNFeHRlbnQiLGUudmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIixlLmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJzY2FsZSIsZS54U2NhbGUpfX1mdW5jdGlvbiBPamUobix0KXsxJm4mJihnKDAsImRpdiIsMjMpLE4oMSwic3BhbiIsMjQpLHYoKSl9dmFyIGtqZT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybnt4U2NhbGU6bix5U2NhbGU6dCxkb21EaW1lbnNpb246ZSx2aWV3RXh0ZW50OmksaW50ZXJhY3Rpb25TdGF0ZTpyfX07ZnVuY3Rpb24gRmplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI1LDI2KSxBaSgyLDIwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixnTigyLGtqZSxlLnhTY2FsZSxlLnlTY2FsZSxlLmRvbURpbWVuc2lvbnMubWFpbixlLnZpZXdCb3gsZS5pbnRlcmFjdGlvblN0YXRlKSl9fXZhciBOamU9ZnVuY3Rpb24obix0KXtyZXR1cm57Y29udGFpbmVyOiEwLCJkYXJrLW1vZGUiOm4sImxpbmUtb25seS1tb2RlIjp0LCJsaW5lLWNoYXJ0IjohMH19LFV6PXt4OlswLDFdLHk6WzAsMV19LHRPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuUmVuZGVyZXJUeXBlPXJyLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGU9cnIuV0VCR0wsdGhpcy54U2NhbGVUeXBlPVNyLkxJTkVBUix0aGlzLnlTY2FsZVR5cGU9U3IuTElORUFSLHRoaXMubGluZU9ubHk9ITEsdGhpcy52aWV3Qm94Q2hhbmdlZD1uZXcgRyx0aGlzLm9uVmlld0JveE92ZXJyaWRkZW49bmV3IFVoKDEpLHRoaXMuaWdub3JlWU91dGxpZXJzPSExLHRoaXMuWV9HUklEX0NPVU5UPTYsdGhpcy5YX0dSSURfQ09VTlQ9MTAsdGhpcy54U2NhbGU9QWModGhpcy54U2NhbGVUeXBlKSx0aGlzLnlTY2FsZT1BYyh0aGlzLnhTY2FsZVR5cGUpLHRoaXMudmlld0JveD1Veix0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOjAsaGVpZ2h0OjB9LHhBeGlzOnt3aWR0aDowLGhlaWdodDowfSx5QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH19LHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuaW50ZXJhY3Rpb25TdGF0ZT1rci5OT05FLHRoaXMubGluZUNoYXJ0PW51bGwsdGhpcy5pc0RhdGFVcGRhdGVkPSExLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnNjYWxlVXBkYXRlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITF9bmdPbkluaXQoKXt0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dCh0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4pfW5nT25DaGFuZ2VzKGUpe2UueFNjYWxlVHlwZSYmKHRoaXMueFNjYWxlPUFjKHRoaXMueFNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUueVNjYWxlVHlwZSYmKHRoaXMueVNjYWxlPUFjKHRoaXMueVNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUuc2VyaWVzRGF0YSYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMCksZS5maXhlZFZpZXdCb3gmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMCksZS5zZXJpZXNNZXRhZGF0YU1hcCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITApLGUudXNlRGFya01vZGUmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMCksdGhpcy5zY2FsZVVwZGF0ZWQmJnRoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPXRoaXMuaXNWaWV3Qm94Q2hhbmdlZHx8dGhpcy5zY2FsZVVwZGF0ZWR8fCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuc2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3goZSksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMudXBkYXRlTGluZUNoYXJ0KCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9cmVjb3ZlclJlbmRlcmVySWZOZWVkZWQoKXshdGhpcy5pc1JlbmRlcmluZ0NvbnRleHRMb3N0fHx0aGlzLmRpc2FibGVVcGRhdGV8fCh0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMCx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITAsdGhpcy5pc0RhdGFVcGRhdGVkPSEwLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwLHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITEpfW9uVmlld1Jlc2l6ZSgpeyF0aGlzLmxpbmVDaGFydHx8KHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSx0aGlzLmxpbmVDaGFydC5yZXNpemUodGhpcy5kb21EaW1lbnNpb25zLm1haW4pLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKXtpZihlLnhTY2FsZVR5cGV8fGUueVNjYWxlVHlwZXx8ZS5pZ25vcmVZT3V0bGllcnN8fGUuc2VyaWVzRGF0YSlyZXR1cm4hMDtsZXQgcj1lLnNlcmllc01ldGFkYXRhTWFwO2lmKHIpe2xldCBvPXIucHJldmlvdXNWYWx1ZTtpZihPYmplY3Qua2V5cyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKS5sZW5ndGghPT1PYmplY3Qua2V5cyhvPz97fSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXRbcyxhXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKXtsZXQgbD1vJiZvW3NdO2lmKCFsfHxhLnZpc2libGUhPT1sLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfW9uQ29udGV4dExvc3QoKXt0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITAsdGhpcy5saW5lQ2hhcnQmJih0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCksdGhpcy5saW5lQ2hhcnQ9bnVsbCl9dHJpZ2dlckNvbnRleHRMb3N0Rm9yVGVzdCgpe3RoaXMub25Db250ZXh0TG9zdCgpfWdldExpbmVDaGFydEZvclRlc3QoKXtyZXR1cm4gdGhpcy5saW5lQ2hhcnR9aW5pdGlhbGl6ZUNoYXJ0KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKTtsZXQgZT10aGlzLmdldFJlbmRlcmVyVHlwZSgpLGk9e29uRHJhd0VuZDooKT0+e30sb25Db250ZXh0TG9zdDp0aGlzLm9uQ29udGV4dExvc3QuYmluZCh0aGlzKX0scj1udWxsO3N3aXRjaCh0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksZSl7Y2FzZSByci5TVkc6cj17dHlwZTpyci5TVkcsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGNhbGxiYWNrczppLGRvbURpbWVuc2lvbjp0aGlzLmRvbURpbWVuc2lvbnMubWFpbix1c2VEYXJrTW9kZTp0aGlzLnVzZURhcmtNb2RlfTticmVhaztjYXNlIHJyLldFQkdMOnI9e3R5cGU6cnIuV0VCR0wsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGA8bGluZS1jaGFydD4gZG9lcyBub3QgeWV0IHN1cHBvcnQgcmVuZGVyZXJUeXBlOiAke2V9YCl9bGV0IHM9ZSE9PXJyLlNWRyYmSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKT9yZzpKMjt0aGlzLmxpbmVDaGFydD1uZXcgcyhyKX1uZ09uRGVzdHJveSgpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCl9Z2V0UmVuZGVyZXJUeXBlKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIHJyLlNWRzpyZXR1cm4gcnIuU1ZHO2Nhc2UgcnIuV0VCR0w6cmV0dXJuIEljX2lzV2ViR2wyU3VwcG9ydGVkKCk/cnIuV0VCR0w6cnIuU1ZHO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbmRlcmVyVHlwZTogJHtufWApfX0odGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGUpfXJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCl7dGhpcy5kb21EaW1lbnNpb25zPXttYWluOnt3aWR0aDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy5zZXJpZXNWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx4QXhpczp7d2lkdGg6dGhpcy54QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx5QXhpczp7d2lkdGg6dGhpcy55QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fX19dXBkYXRlTGluZUNoYXJ0KCl7aWYodGhpcy5yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpLHRoaXMubGluZUNoYXJ0JiYhdGhpcy5kaXNhYmxlVXBkYXRlKXtpZih0aGlzLnNjYWxlVXBkYXRlZCYmKHRoaXMuc2NhbGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFhTY2FsZVR5cGUodGhpcy54U2NhbGVUeXBlKSx0aGlzLmxpbmVDaGFydC5zZXRZU2NhbGVUeXBlKHRoaXMueVNjYWxlVHlwZSkpLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQmJih0aGlzLmlzTWV0YWRhdGFVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldE1ldGFkYXRhKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKSx0aGlzLmlzRGF0YVVwZGF0ZWQmJih0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0RGF0YSh0aGlzLnNlcmllc0RhdGEpKSx0aGlzLnVzZURhcmtNb2RlVXBkYXRlZCYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFVzZURhcmtNb2RlKHRoaXMudXNlRGFya01vZGUpKSwhdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmZpeGVkVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy5maXhlZFZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmlzVmlld0JveENoYW5nZWQpe2xldCBpPWZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89bnVsbCxzPW51bGwsYT1bXTtmb3IobGV0e2lkOmQscG9pbnRzOnB9b2Ygbil7bGV0IGg9dFtkXTtpZihoJiYhaC5hdXgmJmgudmlzaWJsZSlmb3IobGV0IGY9MDtmPHAubGVuZ3RoO2YrKyl7bGV0e3g6bSx5OkN9PXBbZl07aShtKSYmKG89bnVsbD09PW98fG08bz9tOm8scz1udWxsPT09c3x8bT5zP206cykscihDKSYmYS5wdXNoKEMpfX1hLnNvcnQoUmwpO2xldCBjPWFbMF0sdT1hW2EubGVuZ3RoLTFdO3JldHVybiBlJiZhLmxlbmd0aD4yJiYoYz1hW01hdGguY2VpbCguMDUqKGEubGVuZ3RoLTEpKV0sdT1hW01hdGguZmxvb3IoLjk1KihhLmxlbmd0aC0xKSldKSx7eDpudWxsIT09byYmbnVsbCE9PXM/W28sc106dm9pZCAwLHk6dm9pZCAwIT09YyYmdm9pZCAwIT09dT9bYyx1XTp2b2lkIDB9fSh0aGlzLnNlcmllc0RhdGEsdGhpcy5zZXJpZXNNZXRhZGF0YU1hcCx0aGlzLmlnbm9yZVlPdXRsaWVycyx0aGlzLnhTY2FsZS5pc1NhZmVOdW1iZXIsdGhpcy55U2NhbGUuaXNTYWZlTnVtYmVyKTt0aGlzLnZpZXdCb3g9e3g6dGhpcy54U2NhbGUubmljZURvbWFpbihpLng/P1V6LngpLHk6dGhpcy55U2NhbGUubmljZURvbWFpbihpLnk/P1V6LnkpfX0odGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWR8fHRoaXMuaXNWaWV3Qm94Q2hhbmdlZCkmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0Vmlld0JveCh0aGlzLnZpZXdCb3gpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX19b25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDplfSl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCEwKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy52aWV3Qm94PWUsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQoZSl9dmlld0JveFJlc2V0KCl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQodGhpcy52aWV3Qm94KX1zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKGUpe2xldCBpPXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbjt0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ZSxpIT09ZSYmdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQoZSl9b25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKGUpe3RoaXMuaW50ZXJhY3Rpb25TdGF0ZT1lfWdldElzVmlld0JveE92ZXJyaWRkZW4oKXtyZXR1cm4gdGhpcy5vblZpZXdCb3hPdmVycmlkZGVufW9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhlLGkpe2xldCByPXsuLi50aGlzLnZpZXdCb3gsW2ldOmV9O3RoaXMub25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDpyfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGJqZSw3LEFlKSxsdCh4amUsNyxBZSksbHQoQ2plLDcsQWUpLGx0KHdqZSw1LEFlKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zZXJpZXNWaWV3PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNoYXJ0RWw9ci5maXJzdCl9fSxpbnB1dHM6e2N1c3RvbVZpc1RlbXBsYXRlOiJjdXN0b21WaXNUZW1wbGF0ZSIsY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGU6ImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLHByZWZlcnJlZFJlbmRlcmVyVHlwZToicHJlZmVycmVkUmVuZGVyZXJUeXBlIixzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixmaXhlZFZpZXdCb3g6ImZpeGVkVmlld0JveCIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix5U2NhbGVUeXBlOiJ5U2NhbGVUeXBlIixjdXN0b21YRm9ybWF0dGVyOiJjdXN0b21YRm9ybWF0dGVyIixjdXN0b21ZRm9ybWF0dGVyOiJjdXN0b21ZRm9ybWF0dGVyIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSIsbGluZU9ubHk6ImxpbmVPbmx5IixkaXNhYmxlVXBkYXRlOiJkaXNhYmxlVXBkYXRlIixpZ25vcmVZT3V0bGllcnM6Imlnbm9yZVlPdXRsaWVycyJ9LG91dHB1dHM6e3ZpZXdCb3hDaGFuZ2VkOiJ2aWV3Qm94Q2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTYsdmFyczoxMyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMywibmdDbGFzcyIsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbIm92ZXJsYXlUYXJnZXQiLCJjZGtPdmVybGF5T3JpZ2luIl0sWzEsInNlcmllcy12aWV3Il0sWyJzZXJpZXNWaWV3IiwiIl0sWzMsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4R3JpZENvdW50IiwieUdyaWRDb3VudCIsImRvbURpbSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIiw0LCJuZ0lmIl0sWzEsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLDQsIm5nSWYiXSxbMSwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwiY3VzdG9tLXZpcyBjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiLDQsIm5nSWYiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIl0sWyJjaGFydEVsIiwiIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJdLFsxLCJjdXN0b20tdmlzIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsxLCJkb3QiXSxbMSwicmVjdCJdLFsxLCJjdXN0b20tdmlzIiwiY3VzdG9tLWNoYXJ0LW92ZXJsYXktdmlzIl0sWyJjdXN0b21DaGFydE92ZXJsYXkiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblZpZXdSZXNpemUoKX0pLGcoMiwiZGl2IiwyLDMpLEUoNCxNamUsMSw2LCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsNCksRSg1LFRqZSwzLDIsIm5nLWNvbnRhaW5lciIsNSksRSg2LERqZSwxLDgsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsNiksRSg3LElqZSwyLDcsImRpdiIsNyksdigpLGcoOCwiZGl2Iiw4LDkpLEUoMTAsUGplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMCksdigpLGcoMTEsImRpdiIsMTEsMTIpLEUoMTMsUmplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMyksdigpLEUoMTQsT2plLDIsMCwiZGl2IiwxNCksRSgxNSxGamUsMyw4LCJkaXYiLDE1KSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLHRvKDEwLE5qZSxpLnVzZURhcmtNb2RlLGkubGluZU9ubHkpKSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLDApLHgoNCksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQpLHgoMSksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5jdXN0b21WaXNUZW1wbGF0ZSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIixpLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsTm8sc20semxlLEdsZSxXbGUsX21dLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1bX25naG9zdC0lQ09NUCVdICAgICAubGluZS1jaGFydDpoYXMoLmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYTpob3ZlcikgLngtYXhpcyAuZXh0ZW50LWVkaXQtYnV0dG9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bX25naG9zdC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtmbGV4LWdyb3c6MTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiICIuIGN1c3RvbUNoYXJ0T3ZlcmxheSI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjUwcHggMWZyO2dyaWQtYXV0by1yb3dzOjFmciAzMHB4IDBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uY29udGFpbmVyLmxpbmUtb25seS1tb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDB9LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2VyaWVzO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWdyaWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzO3Bvc2l0aW9uOnJlbGF0aXZlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9LmN1c3RvbS1jaGFydC1vdmVybGF5LXZpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmN1c3RvbUNoYXJ0T3ZlcmxheTtncmlkLXJvdy1lbmQ6MjtncmlkLXJvdy1zdGFydDoxfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gQmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMCksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gVmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gSGplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwidGgiLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5oZWFkZXJDbGlja2VkKHIudHlwZSkpfSksZygxLCJkaXYiLDUpLFAoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkuZHJhZ1N0YXJ0KHIpKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLmRyYWdFbmQoKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5kcmFnRW50ZXIocikpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsNiksZygzLCJkaXYiLDcpLEUoNCxCamUsMSwxLCJtYXQtaWNvbiIsOCksRSg1LFZqZSwxLDEsIm1hdC1pY29uIiw5KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoImRyYWdnYWJsZSIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoIm5nQ2xhc3MiLGkuZ2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZS50eXBlKSkseCgxKSxiKCJoZWFkZXIiLGUpLHgoMiksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS50eXBlIT09aS5zb3J0aW5nSW5mby5oZWFkZXIpLHgoMSksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkRFU0NFTkRJTkcmJmUudHlwZT09PWkuc29ydGluZ0luZm8uaGVhZGVyKX19ZnVuY3Rpb24gVWplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEhqZSw2LDUsInRoIiwzKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO3goMSksYigibmdJZiIsaS5zaG93Q29sdW1uKGUpKX19ZnVuY3Rpb24gemplKG4sdCl7MSZuJiZBaSgwKX12YXIgcWxlPWZ1bmN0aW9uKG4pe3JldHVybnskaW1wbGljaXQ6bn19O2Z1bmN0aW9uIGpqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOCksRSgxLHpqZSwxLDAsIm5nLWNvbnRhaW5lciIsMTkpLEQoMiksdigpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0LGk9TSgpLiRpbXBsaWNpdCxyPU0oKSxvPXN0KDkpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsbykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixIbigzLHFsZSxpLlZBTFVFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gR2plKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBXamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSxHamUsMSwwLCJuZy1jb250YWluZXIiLDE5KSxEKDIpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCksbz1zdCg5KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMyxxbGUsaS5QRVJDRU5UQUdFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gcWplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDIwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCk7eCgxKSxxZSgiICIsci5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKGUudHlwZSxpKSwiICIpfX1mdW5jdGlvbiBZamUobix0KXtpZigxJm4mJihnKDAsInRkIiwxNSksRSgxLGpqZSwzLDUsImRpdiIsMTYpLEUoMixXamUsMyw1LCJkaXYiLDE2KSxFKDMscWplLDIsMSwiZGl2IiwxNyksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO2IoIm5nU3dpdGNoIixlLnR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlcnMuVkFMVUVfQ0hBTkdFKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJzLlBFUkNFTlRBR0VfQ0hBTkdFKX19ZnVuY3Rpb24gWGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFlqZSw0LDMsInRkIiwxNCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxiKCJuZ0lmIixpLnNob3dDb2x1bW4oZSkpfX1mdW5jdGlvbiBRamUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsInRyIiwxMikoMiwidGQiLDEzKSxOKDMsInNwYW4iKSx2KCksRSg0LFhqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7eCgzKSxPdCgiYmFja2dyb3VuZC1jb2xvciIsZS5DT0xPUikseCgxKSxiKCJuZ0Zvck9mIixpLmhlYWRlcnMpfX1mdW5jdGlvbiBLamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDIzKX1mdW5jdGlvbiBaamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDI0KX1mdW5jdGlvbiBKamUobix0KXtpZigxJm4mJihFKDAsS2plLDEsMCwibWF0LWljb24iLDIxKSxFKDEsWmplLDEsMCwibWF0LWljb24iLDIyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ0lmIixlPj0wKSx4KDEpLGIoIm5nSWYiLGU8MCl9fXZhciBXZD0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KFdkfHwoV2Q9e30pKSxXZCkpKCkseno9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSxZbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRyx0aGlzLkNvbHVtbkhlYWRlcnM9bXQsdGhpcy5Tb3J0aW5nT3JkZXI9cWEsdGhpcy5TaWRlPVdkLHRoaXMuaGlnaGxpZ2h0U2lkZT1XZC5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix6eil9Z2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLGkpe3N3aXRjaChlKXtjYXNlIG10LlJVTjpyZXR1cm4gdm9pZCAwPT09aS5SVU4/IiI6aS5SVU47Y2FzZSBtdC5WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLlZBTFVFKTtjYXNlIG10LlNURVA6cmV0dXJuIHZvaWQgMD09PWkuU1RFUD8iIjp2cy5mb3JtYXRTaG9ydChpLlNURVApO2Nhc2UgbXQuVElNRTpyZXR1cm4gdm9pZCAwPT09aS5USU1FPyIiOm5ldyBEYXRlKGkuVElNRSkudG9JU09TdHJpbmcoKTtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIHZvaWQgMD09PWkuUkVMQVRJVkVfVElNRT8iIjppTS5mb3JtYXRSZWFkYWJsZShpLlJFTEFUSVZFX1RJTUUpO2Nhc2UgbXQuU01PT1RIRUQ6cmV0dXJuIHZvaWQgMD09PWkuU01PT1RIRUQ/IiI6dnMuZm9ybWF0U2hvcnQoaS5TTU9PVEhFRCk7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuVkFMVUVfQ0hBTkdFPyIiOnZzLmZvcm1hdFNob3J0KE1hdGguYWJzKGkuVkFMVUVfQ0hBTkdFKSk7Y2FzZSBtdC5TVEFSVF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLlNUQVJUX1NURVA/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9TVEVQKTtjYXNlIG10LkVORF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLkVORF9TVEVQPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1NURVApO2Nhc2UgbXQuU1RBUlRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuU1RBUlRfVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9WQUxVRSk7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuRU5EX1ZBTFVFPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1ZBTFVFKTtjYXNlIG10Lk1JTl9WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5NSU5fVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5NSU5fVkFMVUUpO2Nhc2UgbXQuTUFYX1ZBTFVFOnJldHVybiB2b2lkIDA9PT1pLk1BWF9WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLk1BWF9WQUxVRSk7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4gdm9pZCAwPT09aS5QRVJDRU5UQUdFX0NIQU5HRT8iIjpNYXRoLnJvdW5kKDEwMCppLlBFUkNFTlRBR0VfQ0hBTkdFKS50b1N0cmluZygpKyIlIjtjYXNlIG10LlNURVBfQVRfTUFYOnJldHVybiB2b2lkIDA9PT1pLlNURVBfQVRfTUFYPyIiOnZzLmZvcm1hdFNob3J0KGkuU1RFUF9BVF9NQVgpO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIHZvaWQgMD09PWkuU1RFUF9BVF9NSU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEVQX0FUX01JTik7Y2FzZSBtdC5NRUFOOnJldHVybiB2b2lkIDA9PT1pLk1FQU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5NRUFOKTtjYXNlIG10LlJBV19DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuUkFXX0NIQU5HRT8iIjp6bS5mb3JtYXRTaG9ydChNYXRoLmFicyhpLlJBV19DSEFOR0UpKTtkZWZhdWx0OnJldHVybiIifX1oZWFkZXJDbGlja2VkKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8uaGVhZGVyIT09ZXx8dGhpcy5zb3J0aW5nSW5mby5vcmRlciE9PXFhLkFTQ0VORElORz97aGVhZGVyOmUsb3JkZXI6cWEuQVNDRU5ESU5HfTp7aGVhZGVyOmUsb3JkZXI6cWEuREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHp6KX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZSh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsenopKX1kcmFnRW50ZXIoZSl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwodGhpcy5oaWdobGlnaHRTaWRlPXRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhUeXBlKGUudHlwZSk8dGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUpP1dkLkxFRlQ6V2QuUklHSFQsdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGU9ZS50eXBlKX1tb3ZlSGVhZGVyKGUsaSl7bGV0IHI9Wy4uLnRoaXMuaGVhZGVyc107cmV0dXJuIHIuc3BsaWNlKGUsMSksci5zcGxpY2UoaSwwLHRoaXMuaGVhZGVyc1tlXSkscn1nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShlKXtyZXR1cm4gZSE9PXRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlP3t9OntoaWdobGlnaHQ6ITAsImhpZ2hsaWdodC1ib3JkZXItcmlnaHQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLlJJR0hULCJoaWdobGlnaHQtYm9yZGVyLWxlZnQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLkxFRlR9fXNob3dDb2x1bW4oZSl7cmV0dXJuIGUuZW5hYmxlZCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8ZS50eXBlIT09bXQuU01PT1RIRUQpfWdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZShlKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmZpbmRJbmRleChpPT5lPT09aS50eXBlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMifSxkZWNsczoxMCx2YXJzOjIsY29uc3RzOltbMSwiZGF0YS10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFycm93IiwiIl0sWzMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImNlbGwiLDMsImRyYWdnYWJsZSIsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImhlYWRlciJdLFsxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWzEsInJvdyJdLFsxLCJyb3ctY2lyY2xlIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsxLCJjZWxsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjZWxsIiwiZXh0cmEtcmlnaHQtcGFkZGluZyJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Iiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IikoMSwidGFibGUiLDApKDIsInRoZWFkIikoMywidHIiKSxOKDQsInRoIiksRSg1LFVqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpKCksZyg2LCJ0Ym9keSIpLEUoNyxRamUsNSwzLCJuZy1jb250YWluZXIiLDEpLHYoKSgpKCksRSg4LEpqZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUmJih4KDUpLGIoIm5nRm9yT2YiLGkuaGVhZGVycykseCgyKSxiKCJuZ0Zvck9mIixpLmRhdGEpKX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxObyxocixJcixDcCxabixCUF0sc3R5bGVzOlsiLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweDt3aWR0aDoxMDAlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246c3RpY2t5O3RleHQtYWxpZ246bGVmdDt0b3A6MDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc29ydGluZy1pY29uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTJweDtoZWlnaHQ6MTJweDtib3JkZXItcmFkaXVzOjVweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc2hvd1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjN9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHQtYm9yZGVyLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZjk4MDB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodC1ib3JkZXItbGVmdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmZjk4MDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxRbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHfWdldE1pblBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LHM9ZVtpXTtmb3IobGV0IGE9aTthPD1yO2ErKylvPmVbYV0ueSYmKG89ZVthXS55LHM9ZVthXSk7cmV0dXJuIHN9Z2V0TWF4UG9pbnRJblJhbmdlKGUsaSxyKXtsZXQgbz1lW2ldLnkscz1lW2ldO2ZvcihsZXQgYT1pO2E8PXI7YSsrKW88ZVthXS55JiYobz1lW2FdLnkscz1lW2FdKTtyZXR1cm4gc31nZXRNZWFuKGUsaSxyKXtsZXQgbz0wO2ZvcihsZXQgcz1pO3M8PXI7cysrKW8rPWVbc10udmFsdWU7cmV0dXJuIG8vKHItaSsxKX1nZXRUaW1lU2VsZWN0aW9uVGFibGVEYXRhKCl7aWYoIXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbilyZXR1cm5bXTtsZXQgZT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxpPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAscj10aGlzLmRhdGFTZXJpZXMuZmlsdGVyKG89PkJEKG8sdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubWFwKG89PntsZXQgcz10aGlzLmNoYXJ0TWV0YWRhdGFNYXBbby5pZF0sYT1KTShvLnBvaW50cyxlKSxsPW8ucG9pbnRzW2FdLGM9bnVsbCx1PW51bGw7bnVsbCE9aSYmKHU9Sk0oby5wb2ludHMsaSksYz1vLnBvaW50c1t1XSk7bGV0IGQ9e2lkOm8uaWR9O2QuQ09MT1I9cy5jb2xvcjtmb3IobGV0IHAgb2YgdGhpcy5jb2x1bW5IZWFkZXJzKXN3aXRjaChwLnR5cGUpe2Nhc2UgbXQuUlVOOmxldCBoPSIiO3MuYWxpYXMmJihoPWAke3MuYWxpYXMuYWxpYXNOdW1iZXJ9ICR7cy5hbGlhcy5hbGlhc1RleHR9L2ApLGQuUlVOPWAke2h9JHtzLmRpc3BsYXlOYW1lfWA7Y29udGludWU7Y2FzZSBtdC5TVEVQOmQuU1RFUD1sLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5WQUxVRTpkLlZBTFVFPWwudmFsdWU7Y29udGludWU7Y2FzZSBtdC5SRUxBVElWRV9USU1FOmQuUkVMQVRJVkVfVElNRT1sLnJlbGF0aXZlVGltZUluTXM7Y29udGludWU7Y2FzZSBtdC5TTU9PVEhFRDpkLlNNT09USEVEPWwueTtjb250aW51ZTtjYXNlIG10LlZBTFVFX0NIQU5HRTppZighYyljb250aW51ZTtkLlZBTFVFX0NIQU5HRT1jLnktbC55O2NvbnRpbnVlO2Nhc2UgbXQuU1RBUlRfU1RFUDpkLlNUQVJUX1NURVA9bC5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuRU5EX1NURVA6aWYoIWMpY29udGludWU7ZC5FTkRfU1RFUD1jLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5TVEFSVF9WQUxVRTpkLlNUQVJUX1ZBTFVFPWwueTtjb250aW51ZTtjYXNlIG10LkVORF9WQUxVRTppZighYyljb250aW51ZTtkLkVORF9WQUxVRT1jLnk7Y29udGludWU7Y2FzZSBtdC5NSU5fVkFMVUU6aWYoIXUpY29udGludWU7ZC5NSU5fVkFMVUU9dGhpcy5nZXRNaW5Qb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS55O2NvbnRpbnVlO2Nhc2UgbXQuTUFYX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO2QuTUFYX1ZBTFVFPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKG8ucG9pbnRzLGEsdSkueTtjb250aW51ZTtjYXNlIG10LlBFUkNFTlRBR0VfQ0hBTkdFOmlmKCFjKWNvbnRpbnVlO2QuUEVSQ0VOVEFHRV9DSEFOR0U9KGMueS1sLnkpL2wueTtjb250aW51ZTtjYXNlIG10LlNURVBfQVRfTUFYOmlmKCF1KWNvbnRpbnVlO2QuU1RFUF9BVF9NQVg9dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuU1RFUF9BVF9NSU46aWYoIXUpY29udGludWU7ZC5TVEVQX0FUX01JTj10aGlzLmdldE1pblBvaW50SW5SYW5nZShvLnBvaW50cyxhLHUpLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5NRUFOOmlmKCF1KWNvbnRpbnVlO2QuTUVBTj10aGlzLmdldE1lYW4oby5wb2ludHMsYSx1KTtjb250aW51ZTtjYXNlIG10LlJBV19DSEFOR0U6aWYoIWMpY29udGludWU7ZC5SQVdfQ0hBTkdFPWMudmFsdWUtbC52YWx1ZTtjb250aW51ZTtkZWZhdWx0OmNvbnRpbnVlfXJldHVybiBkfSk7cmV0dXJuIHIuc29ydCgobyxzKT0+e2xldCBhPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShvLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKSxsPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKTtyZXR1cm4gYTxsP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT1xYS5BU0NFTkRJTkc/LTE6MTphPmw/dGhpcy5zb3J0aW5nSW5mby5vcmRlcj09PXFhLkFTQ0VORElORz8xOi0xOjB9KSxyfWdldFNvcnRhYmxlVmFsdWUoZSxpKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIE51bWJlci5pc05hTihuKXx8Ik5hTiI9PT1ufHxudWxsPT1uPy0xLzA6bn0oaT09PW10LlJVTj90aGlzLmNoYXJ0TWV0YWRhdGFNYXBbZS5pZF0uZGlzcGxheU5hbWU6ZVtpXSl9b3JkZXJDb2x1bW5zKGUpe3RoaXMuZWRpdENvbHVtbkhlYWRlcnMuZW1pdCh7aGVhZGVyczplLGRhdGFUYWJsZU1vZGU6dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9fby5SQU5HRTpfby5TSU5HTEV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2NoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLHN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb246InN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGNvbHVtbkhlYWRlcnM6ImNvbHVtbkhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIn0sZGVjbHM6MSx2YXJzOjUsY29uc3RzOltbMywiaGVhZGVycyIsImRhdGEiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInRiLWRhdGEtdGFibGUiLDApLFAoInNvcnREYXRhQnkiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNvcnREYXRhQnkuZW1pdChvKX0pKCJvcmRlckNvbHVtbnMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9yZGVyQ29sdW1ucyhvKX0pLHYoKSksMiZlJiZiKCJoZWFkZXJzIixpLmNvbHVtbkhlYWRlcnMpKCJkYXRhIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixpLnNtb290aGluZ0VuYWJsZWQpfSxkZXBlbmRlbmNpZXM6W1lsZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7dmFyIHRHZT1bInN0ZXBTcGFuIl07ZnVuY3Rpb24gbkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDUpLHYoKX19ZnVuY3Rpb24gaUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDYpLHYoKX19dmFyIHJHZT1mdW5jdGlvbihuLHQpe3JldHVybntmb2I6ITAsdW5yZW1vdmFibGU6bixwcm9zcGVjdGl2ZTp0fX0sS2xlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsbG93UmVtb3ZhbD0hMCx0aGlzLmlzUHJvc3BlY3RpdmU9ITEsdGhpcy5zdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmZvYlJlbW92ZWQ9bmV3IEd9bmdPbkNoYW5nZXMoZSl7ZS5zdGVwJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50JiZ0aGlzLnN0ZXBTcGFuLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXZhbGlkYXRlU3RlcChlKXtsZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpOygiICI9PT1lLmtleXx8aXNOYU4oTnVtYmVyKGkpKSkmJmUucHJldmVudERlZmF1bHQoKX1zdGVwVHlwZWQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPWUudGFyZ2V0LmlubmVyVGV4dDt0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoIiIhPT1pP051bWJlcihpKTpudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh0R2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGVwU3Bhbj1yLmZpcnN0KX19LGlucHV0czp7c3RlcDoic3RlcCIsYWxsb3dSZW1vdmFsOiJhbGxvd1JlbW92YWwiLGlzUHJvc3BlY3RpdmU6ImlzUHJvc3BlY3RpdmUifSxvdXRwdXRzOntzdGVwQ2hhbmdlZDoic3RlcENoYW5nZWQiLGZvYlJlbW92ZWQ6ImZvYlJlbW92ZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjUsdmFyczo3LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbImNvbnRlbnRlZGl0YWJsZSIsIiIsInJvbGUiLCJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCIsIkVkaXQgc3RlcCIsMywiaW5uZXJIVE1MIiwiYmx1ciIsImtleXByZXNzIiwia2V5ZG93bi5lbnRlciIsImtleWRvd24uc2hpZnQuZW50ZXIiXSxbInN0ZXBTcGFuIiwiIl0sWyJhcmlhLWxhYmVsIiwiRGVzZWxlY3QgZm9iIiwzLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEsMiksUCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleXByZXNzIixmdW5jdGlvbihvKXtyZXR1cm4gaS52YWxpZGF0ZVN0ZXAobyl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleWRvd24uc2hpZnQuZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBvLnByZXZlbnREZWZhdWx0KCl9KSx2KCksRSgzLG5HZSwyLDAsImJ1dHRvbiIsMyksRSg0LGlHZSwyLDAsImJ1dHRvbiIsMyksdigpKSwyJmUmJihiKCJuZ0NsYXNzIix0byg0LHJHZSwhaS5hbGxvd1JlbW92YWwsaS5pc1Byb3NwZWN0aXZlKSkseCgxKSxiKCJpbm5lckhUTUwiLGkuc3RlcCxYRikseCgyKSxiKCJuZ0lmIixpLmFsbG93UmVtb3ZhbCkseCgxKSxiKCJuZ0lmIixpLmlzUHJvc3BlY3RpdmUpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7cGFkZGluZzoycHggMnB4IDJweCA0cHg7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6bWluLWNvbnRlbnR9LmZvYltfbmdjb250ZW50LSVDT01QJV0gPiAucHJvc3BlY3RpdmVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctdG9wOjFweH0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6Z3JhYn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlci5wcm9zcGVjdGl2ZXtjdXJzb3I6cG9pbnRlcn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS5mb2IudW5yZW1vdmFibGVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDRweH0uZm9iLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggZGFzaGVkICM5ZTllOWU7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTdweH1zcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtmb250LXNpemU6MTFweDt3aWR0aDoxMXB4O2hlaWdodDoxMXB4O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjb2xvcjppbmhlcml0fWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjExMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOWU5ZTllO2NvbG9yOiNlZWU7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2UwZTBlMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHNHZT1bInN0YXJ0Rm9iV3JhcHBlciJdLGFHZT1bImVuZEZvYldyYXBwZXIiXSxsR2U9WyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiXTtmdW5jdGlvbiBjR2Uobix0KXsxJm4mJk4oMCwiZGl2Iiw3KX1mdW5jdGlvbiB1R2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMyw0KSxFKDIsY0dlLDEsMCwiZGl2Iiw1KSxOKDMsImNhcmQtZm9iIiw2KSx2KCkpLDImbil7bGV0IGU9TSgyKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gZEdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLEUoMSx1R2UsNCw3LCJkaXYiLDEpLGcoMiwiZGl2IiwyKSxQKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkubW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKHIpKX0pKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5wcm9zcGVjdGl2ZUZvYkNsaWNrZWQocikpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKSl9KSx2KCksWnQoKX1pZigyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLG51bGwhPT1lLnByb3NwZWN0aXZlU3RlcCkseCgxKSxiKCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpfX1mdW5jdGlvbiBwR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMik7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRVhURU5ERURfTElORSxyKSl9KSx2KCl9fWZ1bmN0aW9uIGhHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMyw4KSxFKDIscEdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMCksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gZkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxMSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDIpO3JldHVybiBvZShvLnN0YXJ0RHJhZyhvLkZvYi5FTkQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLHYoKX19ZnVuY3Rpb24gbUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzLDEyKSxFKDIsZkdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMyksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKTtyZXR1cm4gb2Uoci5vbkZvYlJlbW92ZWQoci5Gb2IuRU5EKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCkpLHgoMiksYigibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSx4KDEpLGIoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX12YXIgQnI9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5TVEFSVD0xXT0iU1RBUlQiLG5bbi5FTkQ9Ml09IkVORCJ9KEJyfHwoQnI9e30pKSxCcikpKCksZ0dlPXtzdGFydDpCci5TVEFSVCxlbmQ6QnIuRU5EfSxuTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lLHRoaXMuc2hvd0V4dGVuZGVkTGluZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZD0hMSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsLHRoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uPW51bGwsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRyx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmhhc0ZvYk1vdmVkPSExLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPUJyLk5PTkUsdGhpcy5hZmZvcmRhbmNlPUdvLk5PTkUsdGhpcy5tb3VzZUxpc3RlbmVyPXRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksdGhpcy5zdG9wTGlzdGVuZXI9dGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpLHRoaXMuRm9iPUJyLHRoaXMuVGltZVNlbGVjdGlvbkFmZm9yZGFuY2U9R299Z2V0Q3NzVHJhbnNsYXRlUHhGb3JTdGFydEZvYigpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbj8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvclByb3NwZWN0aXZlRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9c3RvcEV2ZW50UHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9c3RhcnREcmFnKGUsaSxyKXtpIT09R28uRk9CJiZ0aGlzLnN0b3BFdmVudFByb3BhZ2F0aW9uKHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9ZSx0aGlzLmFmZm9yZGFuY2U9aX1zdG9wRHJhZygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9QnIuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkJiZ0aGlzLnRpbWVTZWxlY3Rpb24mJnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnRoaXMudGltZVNlbGVjdGlvbixhZmZvcmRhbmNlOnRoaXMuYWZmb3JkYW5jZX0pLHRoaXMuYWZmb3JkYW5jZT1Hby5OT05FLHRoaXMuaGFzRm9iTW92ZWQ9ITF9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTH1zaG91bGRTd2FwRm9icyhlKXtyZXR1cm4hKCF0aGlzLnRpbWVTZWxlY3Rpb258fCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKSYmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP2U8dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA6dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5TVEFSVCYmZT50aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldE5ld1RpbWVTZWxlY3Rpb24oZSxpKXtsZXQgcj17Li4uaX07aWYoIXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm4gcjtpZighdGhpcy50aW1lU2VsZWN0aW9uLmVuZClyZXR1cm4gci5zdGFydD17c3RlcDplfSxyO2lmKHRoaXMuc2hvdWxkU3dhcEZvYnMoZSkpe2xldFtvLHNdPXRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl07cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPWdHZVtzXSxyW29dPXRoaXMudGltZVNlbGVjdGlvbltzXSxyW3NdPXtzdGVwOmV9LHJ9cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EPyhyLmVuZD17c3RlcDplfSxyKTooci5zdGFydD17c3RlcDplfSxyKX1nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSl7bGV0IGk9bnVsbCxyPXRoaXMuZ2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKSxvPXRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2UubW92ZW1lbnRZOmUubW92ZW1lbnRYO3JldHVybiB0aGlzLmlzTW92aW5nSGlnaGVyKHIsbyk/aT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24ocik6dGhpcy5pc01vdmluZ0xvd2VyKHIsbykmJihpPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKHIpKSxudWxsPT09aT9udWxsOml9bW91c2VNb3ZlKGUpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSlyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7aWYobnVsbD09PWl8fCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuO2xldCByPXRoaXMuZ2V0TmV3VGltZVNlbGVjdGlvbihpLHRoaXMudGltZVNlbGVjdGlvbik7dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cn0pLHRoaXMuaGFzRm9iTW92ZWQ9ITB9bW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKGUpe2lmKG51bGwhPXRoaXMudGltZVNlbGVjdGlvbj8uZW5kKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtudWxsIT09aSYmdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChpKX1pc01vdmluZ0xvd2VyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPHRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaTwwJiZyPnRoaXMubG93ZXN0U3RlcH1pc01vdmluZ0hpZ2hlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZT50aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk+MCYmcjx0aGlzLmhpZ2hlc3RTdGVwfWdldERyYWdnaW5nRm9iQ2VudGVyKCl7bGV0IGU9dGhpcy5nZXRDdXJyZW50Rm9iKCk/Lm5hdGl2ZUVsZW1lbnQ7aWYoIWUpcmV0dXJuIDA7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ascj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2ktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnItdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1nZXRDdXJyZW50Rm9iKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnN0YXJ0Rm9iV3JhcHBlcjtjYXNlIEJyLkVORDpyZXR1cm4gdGhpcy5lbmRGb2JXcmFwcGVyO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZUZvYldyYXBwZXJ9fWdldEN1cnJlbnRGb2JTdGVwKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA7Y2FzZSBCci5FTkQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZVN0ZXA/P3ZvaWQgMH19Z2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09VnMuVkVSVElDQUw/ZS5jbGllbnRZLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLmNsaWVudFgtdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1zdGVwVHlwZWQoZSxpKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZCYmdGhpcy5vbkZvYlJlbW92ZWQoZSkpO2xldCByPXsuLi50aGlzLnRpbWVTZWxlY3Rpb259O2U9PT1Cci5TVEFSVD9yLnN0YXJ0PXtzdGVwOml9OmU9PT1Cci5FTkQmJihyLmVuZD17c3RlcDppfSksbnVsbCE9PXIuZW5kJiZyLnN0YXJ0LnN0ZXA+ci5lbmQuc3RlcCYmKHI9e3N0YXJ0OnIuZW5kLGVuZDpyLnN0YXJ0fSksdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cixhZmZvcmRhbmNlOkdvLkZPQl9URVhUfSl9cHJvc3BlY3RpdmVGb2JDbGlja2VkKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGk9dGhpcy5nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKTshaXx8KHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9BRERFRCx0aW1lU2VsZWN0aW9uOml9KSx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpKX1nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKXtpZih0aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3tzdGFydDp7c3RlcDpNYXRoLm1pbih0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9LGVuZDp7c3RlcDpNYXRoLm1heCh0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9fTp7c3RhcnQ6e3N0ZXA6dGhpcy5wcm9zcGVjdGl2ZVN0ZXB9LGVuZDpudWxsfX1vbkZvYlJlbW92ZWQoZSl7ZSE9PUJyLkVORD9udWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246e3N0YXJ0OnRoaXMudGltZVNlbGVjdGlvbi5lbmQsZW5kOm51bGx9fSk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6R28uRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7Li4udGhpcy50aW1lU2VsZWN0aW9uLGVuZDpudWxsfX0pfW9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpe3RoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLWZvYi1jb250cm9sbGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHNHZSw1KSxsdChhR2UsNSksbHQobEdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YXJ0Rm9iV3JhcHBlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5lbmRGb2JXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnByb3NwZWN0aXZlRm9iV3JhcHBlcj1yLmZpcnN0KX19LGlucHV0czp7YXhpc0RpcmVjdGlvbjoiYXhpc0RpcmVjdGlvbiIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsY2FyZEZvYkhlbHBlcjoiY2FyZEZvYkhlbHBlciIsc3RhcnRTdGVwQXhpc1Bvc2l0aW9uOiJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGVuZFN0ZXBBeGlzUG9zaXRpb246ImVuZFN0ZXBBeGlzUG9zaXRpb24iLGhpZ2hlc3RTdGVwOiJoaWdoZXN0U3RlcCIsbG93ZXN0U3RlcDoibG93ZXN0U3RlcCIsc2hvd0V4dGVuZGVkTGluZToic2hvd0V4dGVuZGVkTGluZSIsaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkOiJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLHByb3NwZWN0aXZlU3RlcDoicHJvc3BlY3RpdmVTdGVwIixwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb246InByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLG9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZDoib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSxFKDEsZEdlLDMsMiwibmctY29udGFpbmVyIiwwKSxFKDIsaEdlLDQsNSwiZGl2IiwxKSxFKDMsbUdlLDQsNSwiZGl2IiwxKSx2KCkpLDImZSYmKHgoMSksYigibmdJZiIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpLHgoMSksYigibmdJZiIsaS50aW1lU2VsZWN0aW9uKSx4KDEpLGIoIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLEtsZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkPSExLHRoaXMuZGlzYWJsZUludGVyYWN0aW9uPSExLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLkhPUklaT05UQUwsdGhpcy5jYXJkRm9iSGVscGVyPXtnZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyksZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKX0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCk6IiJ9Z2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQuc3RlcD8/dGhpcy5taW5NYXhTdGVwLm1heFN0ZXApOm51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/bnVsbDp0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnByb3NwZWN0aXZlU3RlcCl9b25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKGUpe3RoaXMucHJvc3BlY3RpdmVTdGVwPWV9Z2V0SGlnaGVzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1heFN0ZXB9Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWluU3RlcH1nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpe2xldCBpPU1hdGgucm91bmQodGhpcy5zY2FsZS5yZXZlcnNlKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sZSkpO3JldHVybiBpPnRoaXMuZ2V0SGlnaGVzdFN0ZXAoKT90aGlzLmdldEhpZ2hlc3RTdGVwKCk6aTx0aGlzLmdldExvd2VzdFN0ZXAoKT90aGlzLmdldExvd2VzdFN0ZXAoKTppfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3RpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLHNjYWxlOiJzY2FsZSIsbWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQ6Im1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIixheGlzU2l6ZToiYXhpc1NpemUiLGlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZDoiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixkaXNhYmxlSW50ZXJhY3Rpb246ImRpc2FibGVJbnRlcmFjdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6MTMsY29uc3RzOltbMywiYXhpc0RpcmVjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLCJlbmRTdGVwQXhpc1Bvc2l0aW9uIiwicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIiwiaGlnaGVzdFN0ZXAiLCJsb3dlc3RTdGVwIiwicHJvc3BlY3RpdmVTdGVwIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiY2FyZEZvYkhlbHBlciIsInNob3dFeHRlbmRlZExpbmUiLCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiY2FyZC1mb2ItY29udHJvbGxlciIsMCksUCgib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdChvKX0pLHYoKSksMiZlJiYoT3QoInBvaW50ZXItZXZlbnRzIixpLmRpc2FibGVJbnRlcmFjdGlvbj8ibm9uZSI6ImFsbCIpLGIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpKSgiaGlnaGVzdFN0ZXAiLGkuZ2V0SGlnaGVzdFN0ZXAoKSkoImxvd2VzdFN0ZXAiLGkuZ2V0TG93ZXN0U3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwIixpLnByb3NwZWN0aXZlU3RlcCkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpKCJzaG93RXh0ZW5kZWRMaW5lIiwhMCkpfSxkZXBlbmRlbmNpZXM6W25PXSxzdHlsZXM6WyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciAudGltZS1mb2Itd3JhcHBlcntoZWlnaHQ6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHZHZT1bImRhdGFUYWJsZUNvbnRhaW5lciJdO2Z1bmN0aW9uIHlHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMjcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub3BlblRhYmxlRWRpdE1lbnUoKSl9KSxOKDEsIm1hdC1pY29uIiwyOCksZygyLCJzcGFuIiksRCgzLCJFZGl0IFRhYmxlIENvbHVtbnMiKSx2KCkoKX19ZnVuY3Rpb24gYkdlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyOSl9ZnVuY3Rpb24geEdlKG4sdCl7MSZuJiYoZygwLCJ0aCIpLEQoMSwiU21vb3RoZWQiKSx2KCkpfWZ1bmN0aW9uIENHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMzUpLEQoMiwiLyIpLFp0KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDEpLGIoImFsaWFzIixlLm1ldGFkYXRhLmFsaWFzKX19ZnVuY3Rpb24gd0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0ZCIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO3goMSkscWUoIiAiLGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQueSksIiAiKX19ZnVuY3Rpb24gTUdlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMzMpKDIsInRkIiwzNCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDIpLEUoNSxDR2UsMywxLCJuZy1jb250YWluZXIiLDI0KSxEKDYpLHYoKSxFKDcsd0dlLDIsMSwidGQiLDI0KSxnKDgsInRkIiksRCg5KSx2KCksZygxMCwidGQiKSxEKDExKSx2KCksZygxMiwidGQiKSxEKDEzKSxqKDE0LCJkYXRlIiksdigpLGcoMTUsInRkIiksRCgxNiksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxhdCgiY2xvc2VzdCIsZS5tZXRhZGF0YS5jbG9zZXN0KSx4KDIpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLGIoIm5nSWYiLGUubWV0YWRhdGEuYWxpYXMpLHgoMSkscWUoIiIsZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSwiICIpLHgoMSksYigibmdJZiIsaS5zbW9vdGhpbmdFbmFibGVkKSx4KDIpLHl0KGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQudmFsdWUpKSx4KDIpLHl0KGkuc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC5zdGVwKSkseCgyKSx5dChuZigxNCwxMSxlLmRhdGFQb2ludC53YWxsVGltZSwic2hvcnQiKSkseCgzKSxxZSgiICIsaS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUoZS5kYXRhUG9pbnQucmVsYXRpdmVUaW1lSW5NcyksIiAiKX19ZnVuY3Rpb24gU0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwzMSksZyg0LCJ0aCIpLEQoNSwiUnVuIiksdigpLEUoNix4R2UsMiwwLCJ0aCIsMjQpLGcoNywidGgiKSxEKDgsIlZhbHVlIiksdigpLGcoOSwidGgiKSxEKDEwLCJTdGVwIiksdigpLGcoMTEsInRoIiksRCgxMiwiVGltZSIpLHYoKSxnKDEzLCJ0aCIpLEQoMTQsIlJlbGF0aXZlIiksdigpKCkoKSxnKDE1LCJ0Ym9keSIpLEUoMTYsTUdlLDE3LDE0LCJuZy1jb250YWluZXIiLDMyKSx2KCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT10LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQscj10LmN1cnNvckxvY2F0aW9uLG89TSgpO3goNiksYigibmdJZiIsby5zbW9vdGhpbmdFbmFibGVkKSx4KDEwKSxiKCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpKSgibmdGb3JUcmFja0J5IixvLnRyYWNrQnlUb29sdGlwRGF0dW0pfX1mdW5jdGlvbiBFR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDQxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS50b2dnbGVUYWJsZUV4cGFuZGVkKCkpfSksTigxLCJtYXQtaWNvbiIsOSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJ0aXRsZSIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJFeHBhbmQgVGFibGUiOiJDb2xsYXBzZSBUYWJsZSIpLHgoMSksYigic3ZnSWNvbiIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJleHBhbmRfbW9yZV8yNHB4IjoiZXhwYW5kX2xlc3NfMjRweCIpfX12YXIgVEdlPWZ1bmN0aW9uKG4pe3JldHVybnsiZGF0YS10YWJsZS1jb250YWluZXIiOiEwLGV4cGFuZGVkOm59fTtmdW5jdGlvbiBER2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDM2LDM3KSgzLCJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIiwzOCksUCgic29ydERhdGFCeSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5zb3J0RGF0YUJ5KHIpKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHIpKX0pLHYoKSgpLGcoNCwiZGl2IiwzOSksRSg1LEVHZSwyLDIsImJ1dHRvbiIsNDApLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibmdDbGFzcyIsSG4oOSxUR2UsZS5jYXJkU3RhdGUudGFibGVFeHBhbmRlZCkpLHgoMiksYigiY2hhcnRNZXRhZGF0YU1hcCIsZS5jaGFydE1ldGFkYXRhTWFwKSgiZGF0YVNlcmllcyIsZS5kYXRhU2VyaWVzKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsZS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgiY29sdW1uSGVhZGVycyIsZS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGUuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsZS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoInNtb290aGluZ0VuYWJsZWQiLGUuc21vb3RoaW5nRW5hYmxlZCkseCgyKSxiKCJuZ0lmIixlLmNhbkV4cGFuZFRhYmxlKCkpfX12YXIgQUdlPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSxJR2U9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBQR2Uobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzNiksMiZuKXtsZXQgZT1NKDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTtPdCgibGVmdCIsby5mb3J3YXJkKGkueCxIbigzLEFHZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSxiKCJuZ0NsYXNzIixscCg1LElHZSkpfX12YXIgUkdlPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSxPR2U9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIGtHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwiZGl2IiwzNiksRSgyLFBHZSwxLDYsImRpdiIsNDIpLFp0KCkpLDImbil7bGV0IGU9TSgpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTt4KDEpLE90KCJyaWdodCIsby5mb3J3YXJkKGkueCxIbig0LFJHZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IiksYigibmdDbGFzcyIsSG4oNixPR2UsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLHgoMSksYigibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIEZHZShuLHQpezEmbiYmRSgwLGtHZSwzLDgsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIE5HZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiw0MyksUCgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uRm9iUmVtb3ZlZCgpKX0pLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpLGk9ZS5pbnRlcmFjdGlvblN0YXRlLHI9ZS54U2NhbGUsbz1lLnZpZXdFeHRlbnQscz1lLmRvbURpbWVuc2lvbixhPU0oKTt4KDEpLGIoImRpc2FibGVJbnRlcmFjdGlvbiIsIk5PTkUiIT09aSkoInRpbWVTZWxlY3Rpb24iLGEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoInNjYWxlIixyKSgibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG8ueCkoIm1pbk1heFN0ZXAiLGEubWluTWF4U3RlcCkoImF4aXNTaXplIixzLndpZHRoKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixhLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fWZ1bmN0aW9uIExHZShuLHQpezEmbiYmRSgwLE5HZSwyLDcsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciAkbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5SZW5kZXJlclR5cGU9cnIsdGhpcy5TY2FsZVR5cGU9U3IsdGhpcy5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ9ITEsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgRyx0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHLHRoaXMub3BlblRhYmxlRWRpdE1lbnVUb01vZGU9bmV3IEcsdGhpcy5vbkxpbmVDaGFydFpvb209bmV3IEcsdGhpcy5vbkNhcmRTdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5zb3J0aW5nSW5mbz17aGVhZGVyOm10LlJVTixvcmRlcjpxYS5BU0NFTkRJTkd9LHRoaXMueVNjYWxlVHlwZT1Tci5MSU5FQVIsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMucmVsYXRpdmVYRm9ybWF0dGVyPWlNLHRoaXMudmFsdWVGb3JtYXR0ZXI9em0sdGhpcy5zdGVwRm9ybWF0dGVyPXZzfXRvZ2dsZVlTY2FsZVR5cGUoKXt0aGlzLnlTY2FsZVR5cGU9dGhpcy55U2NhbGVUeXBlPT09U3IuTElORUFSP1NyLkxPRzEwOlNyLkxJTkVBUn1zb3J0RGF0YUJ5KGUpe3RoaXMuc29ydGluZ0luZm89ZSx0aGlzLm9uRGF0YVRhYmxlU29ydGluZy5lbWl0KGUpfXJlc2V0RG9tYWluKCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LnZpZXdCb3hSZXNldCgpfXRyYWNrQnlUb29sdGlwRGF0dW0oZSxpKXtyZXR1cm4gaS5pZH1nZXRDdXN0b21YRm9ybWF0dGVyKCl7c3dpdGNoKHRoaXMueEF4aXNUeXBlKXtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBpTTtjYXNlIFlpLlNURVA6cmV0dXJuIFNzZTtkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YShlLGkscil7bGV0IG89ZS5tYXAobD0+KHsuLi5sLG1ldGFkYXRhOnsuLi5sLm1ldGFkYXRhLGNsb3Nlc3Q6ITEsZGlzdFRvQ3Vyc29yUGl4ZWxzOk1hdGguaHlwb3QobC5kb21Qb2ludC54LXIueCxsLmRvbVBvaW50Lnktci55KSxkaXN0VG9DdXJzb3JYOmwuZGF0YVBvaW50LngtaS54LGRpc3RUb0N1cnNvclk6bC5kYXRhUG9pbnQueS1pLnl9fSkpLHM9MS8wLGE9MDtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoO2wrKylzPm9bbF0ubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzJiYocz1vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyxhPWwpO3N3aXRjaChvLmxlbmd0aCYmKG9bYV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBtby5BU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5kYXRhUG9pbnQueS1jLmRhdGFQb2ludC55KTtjYXNlIG1vLkRFU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+Yy5kYXRhUG9pbnQueS1sLmRhdGFQb2ludC55KTtjYXNlIG1vLk5FQVJFU1Q6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMtYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMpO2Nhc2UgbW8uTkVBUkVTVF9ZOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yWS1jLm1ldGFkYXRhLmRpc3RUb0N1cnNvclkpO2Nhc2UgbW8uREVGQVVMVDpjYXNlIG1vLkFMUEhBQkVUSUNBTDpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3BsYXlOYW1lPGMubWV0YWRhdGEuZGlzcGxheU5hbWU/LTE6bC5tZXRhZGF0YS5kaXNwbGF5TmFtZT5jLm1ldGFkYXRhLmRpc3BsYXlOYW1lPzE6MCl9fW9wZW5EYXRhRG93bmxvYWREaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50LHtkYXRhOntjYXJkSWQ6dGhpcy5jYXJkSWR9fSl9b25Gb2JSZW1vdmVkKCl7dGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdChXYS5GT0JfREVTRUxFQ1QpfXNob3dEYXRhVGFibGUoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb259c2hvd0ZvYkNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLm1pbk1heFN0ZXAmJih0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb258fHRoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkKX1jYW5FeHBhbmRUYWJsZSgpe3JldHVybiB0aGlzLmRhdGFTZXJpZXMuZmlsdGVyKGk9PkJEKGksdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubGVuZ3RoPjN9c2hvdWxkRXhwYW5kVGFibGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHR8fCF0aGlzLmNhcmRTdGF0ZT8udGFibGVFeHBhbmRlZCl9dG9nZ2xlVGFibGVFeHBhbmRlZCgpe3RoaXMub25DYXJkU3RhdGVDaGFuZ2VkLmVtaXQoey4uLnRoaXMuY2FyZFN0YXRlLHRhYmxlRXhwYW5kZWQ6dGhpcy5zaG91bGRFeHBhbmRUYWJsZSgpfSksdGhpcy5kYXRhVGFibGVDb250YWluZXImJih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodD0iIil9b3BlblRhYmxlRWRpdE1lbnUoKXt0aGlzLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlLmVtaXQodGhpcy5yYW5nZUVuYWJsZWQ/X28uUkFOR0U6X28uU0lOR0xFKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhNYykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdCh0Tyw1KSxsdCh2R2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubGluZUNoYXJ0PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmRhdGFUYWJsZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGNoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGNhcmRTdGF0ZToiY2FyZFN0YXRlIixEYXRhRG93bmxvYWRDb21wb25lbnQ6IkRhdGFEb3dubG9hZENvbXBvbmVudCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIixpc0NhcmRWaXNpYmxlOiJpc0NhcmRWaXNpYmxlIixpc1Bpbm5lZDoiaXNQaW5uZWQiLGxvYWRTdGF0ZToibG9hZFN0YXRlIixzaG93RnVsbFdpZHRoOiJzaG93RnVsbFdpZHRoIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIix0YWc6InRhZyIsdGl0bGU6InRpdGxlIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLHhBeGlzVHlwZToieEF4aXNUeXBlIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLGZvcmNlU3ZnOiJmb3JjZVN2ZyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ6ImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIscmFuZ2VFbmFibGVkOiJyYW5nZUVuYWJsZWQifSxvdXRwdXRzOntvbkZ1bGxTaXplVG9nZ2xlOiJvbkZ1bGxTaXplVG9nZ2xlIixvblBpbkNsaWNrZWQ6Im9uUGluQ2xpY2tlZCIsb25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25TdGVwU2VsZWN0b3JUb2dnbGVkOiJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLG9uRGF0YVRhYmxlU29ydGluZzoib25EYXRhVGFibGVTb3J0aW5nIixlZGl0Q29sdW1uSGVhZGVyczoiZWRpdENvbHVtbkhlYWRlcnMiLG9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlOiJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsb25MaW5lQ2hhcnRab29tOiJvbkxpbmVDaGFydFpvb20iLG9uQ2FyZFN0YXRlQ2hhbmdlZDoib25DYXJkU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MzgsdmFyczoyOCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscixvLHM7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGk9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAscj0kbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxvPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAscz0kbG9jYWxpemVgOkV4cGFuZCBUYWJsZeKQnzllNTlmZjUwYmZjYjQ3OTI3MmUyYjEwM2UxZTliMTE1MThlMmU0Y2XikJ82Mzc0ODgwMzQxMzkzMDIwNjEwOkV4cGFuZCBUYWJsZWAsW1sxLCJhbHdheXMtdmlzaWJsZSJdLFsxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsInRpdGxlIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsciwidGl0bGUiLCJNb3JlIGxpbmUgY2hhcnQgb3B0aW9ucyIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIixvLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibGluZV93ZWlnaHRfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIGRpYWxvZyB0byBkb3dubG9hZCBkYXRhIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImdldF9hcHBfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUgdG8gZWRpdCBkYXRhIHRhYmxlIGNvbHVtbnMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsiY2hhcnRDb250YWluZXIiLCIiXSxbImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbMywiZGlzYWJsZVVwZGF0ZSIsInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInhTY2FsZVR5cGUiLCJ5U2NhbGVUeXBlIiwiY3VzdG9tWEZvcm1hdHRlciIsImlnbm9yZVlPdXRsaWVycyIsInRvb2x0aXBUZW1wbGF0ZSIsInVzZURhcmtNb2RlIiwiY3VzdG9tVmlzVGVtcGxhdGUiLCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iLCJ2aWV3Qm94Q2hhbmdlZCJdLFsidG9vbHRpcCIsIiJdLFs0LCJuZ0lmIl0sWyJsaW5lQ2hhcnRDdXN0b21WaXMiLCIiXSxbImxpbmVDaGFydEN1c3RvbVhBeGlzVmlzIiwiIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSB0byBlZGl0IGRhdGEgdGFibGUgY29sdW1ucyIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImRpYW1ldGVyIiwiMTgiXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMywiYWxpYXMiXSxbMywibmdDbGFzcyJdLFsiZGF0YVRhYmxlQ29udGFpbmVyIiwiIl0sWzMsImNoYXJ0TWV0YWRhdGFNYXAiLCJkYXRhU2VyaWVzIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImNvbHVtbkhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJlZGl0Q29sdW1uSGVhZGVycyJdLFsxLCJib3R0b20tYXJlYSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiY2xhc3MiLCJleHBhbmQtYnV0dG9uIiwiYXJpYS1sYWJlbCIscywzLCJ0aXRsZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixzLDEsImV4cGFuZC1idXR0b24iLDMsInRpdGxlIiwiY2xpY2siXSxbMywibmdDbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMywiZGlzYWJsZUludGVyYWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInNjYWxlIiwibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLCJtaW5NYXhTdGVwIiwiYXhpc1NpemUiLCJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzZXREb21haW4oKX0pLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksTig5LCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTigxMSwibWF0LWljb24iLDkpLHYoKSxnKDEyLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLE4oMTMsIm1hdC1pY29uIiw5KSx2KCksZygxNCwiYnV0dG9uIiwxMSksTigxNSwibWF0LWljb24iLDEyKSx2KCksZygxNiwibWF0LW1lbnUiLG51bGwsMTMpKDE4LCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVZU2NhbGVUeXBlKCl9KSxOKDE5LCJtYXQtaWNvbiIsMTUpLGcoMjAsInNwYW4iKSxEKDIxLCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSIpLHYoKSgpLGcoMjIsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EYXRhRG93bmxvYWREaWFsb2coKX0pLE4oMjMsIm1hdC1pY29uIiwxNyksZygyNCwic3BhbiIpLEQoMjUsIkRvd25sb2FkIGRhdGEiKSx2KCkoKSxFKDI2LHlHZSw0LDAsImJ1dHRvbiIsMTgpLHYoKSgpKCksZygyNywiZGl2IiwxOSwyMCksRSgyOSxiR2UsMSwwLCJtYXQtc3Bpbm5lciIsMjEpLGcoMzAsImxpbmUtY2hhcnQiLDIyKSxQKCJvblZpZXdCb3hPdmVycmlkZGVuIixmdW5jdGlvbihvKXtyZXR1cm4gaS5pc1ZpZXdCb3hPdmVycmlkZGVuPW99KSgidmlld0JveENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbS5lbWl0KG8pfSksdigpLEUoMzEsU0dlLDE3LDMsIm5nLXRlbXBsYXRlIixudWxsLDIzLGVuKSx2KCkoKSxFKDMzLERHZSw2LDExLCJuZy1jb250YWluZXIiLDI0KSxFKDM0LEZHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI1LGVuKSxFKDM2LExHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI2LGVuKSksMiZlKXtsZXQgcj1zdCgxNyksbz1zdCgzMikscz1zdCgzNSksYT1zdCgzNyk7eCgzKSx4cigidGl0bGUiLGkudGFnKSx4cigidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSx4KDIpLGIoImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFXKDcsMjQsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVyg4LDI2LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSx4KDQpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMiksYigic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLHgoMSksYigibWF0TWVudVRyaWdnZXJGb3IiLHIpLHgoMTIpLGIoIm5nSWYiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpLHgoMyksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgiY3VzdG9tVmlzVGVtcGxhdGUiLHMpKCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsYSkseCgzKSxiKCJuZ0lmIixpLnNob3dEYXRhVGFibGUoKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLF92LHRPLCRuLFpuLEl1LEVjLFB1LHZvLHZ2LHl2LFFsZSxKbGUsZnQsVTBdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH1bX25naG9zdC0lQ09NUCVdOmhhcyguZXhwYW5kLWJ1dHRvbil7cGFkZGluZzo0cHggMTZweCAwfS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWJhc2lzOjI5OHB4fS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoLmV4cGFuZC1idXR0b24pKXtmbGV4LWdyb3c6MX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6NXB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIGF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEuMmVtO2xpbmUtaGVpZ2h0OjB9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOnZlcnRpY2FsfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjExcHg7dG9wOjExcHh9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMHB4O21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDo1MGVtO292ZXJmbG93OmF1dG87cmVzaXplOnZlcnRpY2FsfS5kYXRhLXRhYmxlLWNvbnRhaW5lci5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uYm90dG9tLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBWR2Uobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxpKT0+e2xldCByPXRbaV0sbz1lLnBvaW50cyxzPXIucG9pbnRzO3JldHVybiBlLnJ1bklkPT09ci5ydW5JZCYmby5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+e2xldCBjPXNbbF07cmV0dXJuIGEueD09PWMueCYmYS55PT09Yy55fSl9KX12YXIgZWNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PSRuZSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRyx0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodUspLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChtXyksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChidSksdGhpcy5mb3JjZVN2ZyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc0spLHRoaXMuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLnhTY2FsZVR5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KS5waXBlKEIoaT0+e3N3aXRjaChpKXtjYXNlIFlpLlNURVA6Y2FzZSBZaS5SRUxBVElWRTpyZXR1cm4gU3IuTElORUFSO2Nhc2UgWWkuV0FMTF9USU1FOnJldHVybiBTci5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHtpfWApfX0pKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLnBpcGUoQihpPT5pPjApKSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksQihsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KExwLHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUobD0+Qm9vbGVhbihsKSksQihsPT5sKSxRcygxKSkucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLGRpKFZHZSkpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoJEQpKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEIoKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcCh1PT4oey4uLnUsc2VyaWVzSWQ6dS5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksQihsPT5sLm1hcChjPT57bGV0IHU9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAoZD0+KHsuLi5kLHJlbGF0aXZlVGltZUluTXM6ZC53YWxsVGltZS11fSkpfX0pKSxzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+bC5tYXAodT0+KHsuLi51LHBvaW50czp1LnBvaW50cy5tYXAoZD0+e2xldCBwO3N3aXRjaChjKXtjYXNlIFlpLlJFTEFUSVZFOnA9ZC5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgWWkuV0FMTF9USU1FOnA9ZC53YWxsVGltZTticmVhaztkZWZhdWx0OnA9ZC5zdGVwfXJldHVybnsuLi5kLHg6cH19KX0pKSksUXMoMSkpO3RoaXMubWluTWF4U3RlcHMkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChmWix0aGlzLmNhcmRJZCksdGhpcy5zdG9yZS5zZWxlY3QobVosdGhpcy5jYXJkSWQpXSkucGlwZShCKChbbCxjXSk9PntpZihsJiZjKXJldHVybnttaW5TdGVwOk1hdGgubWF4KGw/Lm1pblN0ZXAsYz8ubWluU3RlcCksbWF4U3RlcDpNYXRoLm1pbihsPy5tYXhTdGVwLGM/Lm1heFN0ZXApfX0pKSx0aGlzLmRhdGFTZXJpZXMkPWEucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdCh2ZCkpLHZpKChbbCxjXSk9PntsZXQgdT1sLm1hcCgoe3Nlcmllc0lkOmQscG9pbnRzOnB9KT0+KHtpZDpkLHBvaW50czpwfSkpO3JldHVybiBjPD0wP2p0KHUpOmxvKGFzeW5jIGZ1bmN0aW9uKG4sdCl7TnVtYmVyLmlzRmluaXRlKHQpfHwodD0wKSx0PU1hdGgubWF4KDAsTWF0aC5taW4odCwxKSk7bGV0IGU9W107Zm9yKGxldCBpIG9mIG4pe2xldCByPWkucG9pbnRzWzBdPy55O2lmKGkucG9pbnRzLmV2ZXJ5KGM9PmMueT09cikpe2UucHVzaChpKTtjb250aW51ZX1sZXQgcz1pLnBvaW50cy5sZW5ndGg+MD8wOk5hTixhPTAsbD1pLnBvaW50cy5tYXAoYz0+e2xldCB1PWMueTtpZihOdW1iZXIuaXNGaW5pdGUodSkpe3M9cyp0KygxLXQpKnUsYSsrO2xldCBkPTE9PT10PzE6MS1NYXRoLnBvdyh0LGEpO3JldHVybnt4OmMueCx5OnMvZH19cmV0dXJue3g6Yy54LHk6dX19KTtlLnB1c2goe2lkOmkuaWQscG9pbnRzOmx9KX1yZXR1cm4gZX0odSxjKSkucGlwZShCKGQ9PntsZXQgcD11Lm1hcCgoaCxmKT0+KHtpZDpzKGguaWQpLHBvaW50czpkW2ZdLnBvaW50cy5tYXAoKHt5Om19LEMpPT4oey4uLmgucG9pbnRzW0NdLHk6bX0pKX0pKTtyZXR1cm5bLi4udSwuLi5wXX0pKX0pLFZuKFtdKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1wbihbdGhpcy5taW5NYXhTdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoVnApLHRoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0b3JlLnNlbGVjdChidSldKS5waXBlKEIoKFtsLGMsdSxkXSk9PmwmJmMmJmQ9PT1ZaS5TVEVQJiZ1P2NfKHUsbC5taW5TdGVwLGwubWF4U3RlcCk6bnVsbCkpLHRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoZ1osdGhpcy5jYXJkSWQpLHRoaXMuY29sdW1uSGVhZGVycyQ9cG4oW3RoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMuc3RvcmUuc2VsZWN0KF9fKV0pLnBpcGUoQigoW2wsYyx1XSk9PmwmJm51bGwhPT1sLmVuZD91OmMpKSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXAkPWEucGlwZSh2aShsPT5wbihsLm1hcChjPT50aGlzLmdldFJ1bkRpc3BsYXlOYW1lQW5kQWxpYXMoYy5ydW5JZCkucGlwZShCKHU9Pih7Li4uYywuLi51fSkpKSkpKSxzcih0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KHZkKSksQXIoMCksQigoW2wsYyx1LGRdKT0+e2xldCBwPXt9LGg9ZD4wO2ZvcihsZXQgZiBvZiBsKXtsZXR7c2VyaWVzSWQ6bSxydW5JZDpDLGRpc3BsYXlOYW1lOl8sYWxpYXM6eSxwYXJ0aXRpb25JbmRleDpJLHBhcnRpdGlvblNpemU6QX09ZjtwW21dPXt0eXBlOmZ2Lk9SSUdJTkFMLGlkOm0sYWxpYXM6eSxkaXNwbGF5TmFtZTpBPjE/YCR7X306ICR7SX1gOl8sdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KEMpKSxjb2xvcjp1W0NdPz8iI2ZmZiIsYXV4OiExLG9wYWNpdHk6MX19aWYoIWgpcmV0dXJuIHA7Zm9yKGxldFtmLG1db2YgT2JqZWN0LmVudHJpZXMocCkpe2xldCBDPXMoZik7cFtDXT17Li4ubSxpZDpDLHR5cGU6ZnYuREVSSVZFRCxhdXg6ITEsb3JpZ2luYWxTZXJpZXNJZDpmfSxtLmF1eD0hMCxtLm9wYWNpdHk9LjI1fXJldHVybiBwfSksVm4oe30pKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMuY2FyZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChtYykucGlwZShCKGw9PmxbdGhpcy5jYXJkSWRdfHx7fSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChCcCx0aGlzLmNhcmRJZCksdGhpcy5yYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGhaLHRoaXMuY2FyZElkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0UnVuRGlzcGxheU5hbWVBbmRBbGlhcyhlKXtyZXR1cm4gcG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpLHRoaXMuc3RvcmUuc2VsZWN0KGNBLHtydW5JZDplfSldKS5waXBlKEIoKFtpLHIsb10pPT57bGV0IHM9bnVsbCE9PWk/cltpXT8/bnVsbDpudWxsO3JldHVybntkaXNwbGF5TmFtZTpvfHxzP28/Lm5hbWU/PyIuLi4iOmUsYWxpYXM6c319KSl9c3RlcFNlcmllc1RvTGluZVNlcmllcyhlLGkpe2xldCByPWk9PT1ZaS5TVEVQO3JldHVybiBlLm1hcChvPT57bGV0IHM9MWUzKm8ud2FsbFRpbWU7cmV0dXJuey4uLm8seDpyP28uc3RlcDpzLHk6by52YWx1ZSx3YWxsVGltZTpzLHJlbGF0aXZlVGltZUluTXM6MH19KX1vbkRhdGFUYWJsZVNvcnRpbmcoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChnbmUoZSkpfW9uQ2FyZFN0YXRlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxQKHtjYXJkSWQ6dGhpcy5jYXJkSWQsc2V0dGluZ3M6ZX0pKX1vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goey4uLmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uU3RlcFNlbGVjdG9yVG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uTGluZUNoYXJ0Wm9vbShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElQKHt2aWV3Qm94OmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfWVkaXRDb2x1bW5IZWFkZXJzKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goblAoe21vZGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MjMsdmFyczo2OSxjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywiY2FyZElkIiwiY2hhcnRNZXRhZGF0YU1hcCIsIkRhdGFEb3dubG9hZENvbXBvbmVudCIsImRhdGFTZXJpZXMiLCJpZ25vcmVPdXRsaWVycyIsImlzQ2FyZFZpc2libGUiLCJpc1Bpbm5lZCIsImxvYWRTdGF0ZSIsInNob3dGdWxsV2lkdGgiLCJzbW9vdGhpbmdFbmFibGVkIiwidGFnIiwidGl0bGUiLCJjYXJkU3RhdGUiLCJ0b29sdGlwU29ydCIsInhBeGlzVHlwZSIsInhTY2FsZVR5cGUiLCJ1c2VEYXJrTW9kZSIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiZm9yY2VTdmciLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsIm1pbk1heFN0ZXAiLCJjb2x1bW5IZWFkZXJzIiwicmFuZ2VFbmFibGVkIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLCJvbkRhdGFUYWJsZVNvcnRpbmciLCJvbkxpbmVDaGFydFpvb20iLCJlZGl0Q29sdW1uSGVhZGVycyIsIm9uQ2FyZFN0YXRlQ2hhbmdlZCIsIm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzY2FsYXItY2FyZC1jb21wb25lbnQiLDApLFAoIm9uRnVsbFNpemVUb2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSgib25WaXNpYmlsaXR5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZpc2liaWxpdHlDaGFuZ2Uobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZChvKX0pKCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZChvKX0pKCJvbkRhdGFUYWJsZVNvcnRpbmciLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRGF0YVRhYmxlU29ydGluZyhvKX0pKCJvbkxpbmVDaGFydFpvb20iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbShvKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24obyl7cmV0dXJuIGkuZWRpdENvbHVtbkhlYWRlcnMobyl9KSgib25DYXJkU3RhdGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNhcmRTdGF0ZUNoYW5nZWQobyl9KSgib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksaigyMiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY2FyZElkIixpLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFcoMSwyNSxpLmNoYXJ0TWV0YWRhdGFNYXAkKSkoIkRhdGFEb3dubG9hZENvbXBvbmVudCIsaS5EYXRhRG93bmxvYWRDb21wb25lbnQpKCJkYXRhU2VyaWVzIixXKDIsMjcsaS5kYXRhU2VyaWVzJCkpKCJpZ25vcmVPdXRsaWVycyIsVygzLDI5LGkuaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLGkuaXNWaXNpYmxlKSgiaXNQaW5uZWQiLFcoNCwzMSxpLmlzUGlubmVkJCkpKCJsb2FkU3RhdGUiLFcoNSwzMyxpLmxvYWRTdGF0ZSQpKSgic2hvd0Z1bGxXaWR0aCIsVyg2LDM1LGkuc2hvd0Z1bGxXaWR0aCQpKSgic21vb3RoaW5nRW5hYmxlZCIsVyg3LDM3LGkuc21vb3RoaW5nRW5hYmxlZCQpKSgidGFnIixXKDgsMzksaS50YWckKSkoInRpdGxlIixXKDksNDEsaS50aXRsZSQpKSgiY2FyZFN0YXRlIixXKDEwLDQzLGkuY2FyZFN0YXRlJCkpKCJ0b29sdGlwU29ydCIsVygxMSw0NSxpLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFcoMTIsNDcsaS54QXhpc1R5cGUkKSkoInhTY2FsZVR5cGUiLFcoMTMsNDksaS54U2NhbGVUeXBlJCkpKCJ1c2VEYXJrTW9kZSIsVygxNCw1MSxpLnVzZURhcmtNb2RlJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE1LDUzLGkubGlua2VkVGltZVNlbGVjdGlvbiQpKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsVygxNiw1NSxpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsVygxNyw1NyxpLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQpKSgiZm9yY2VTdmciLFcoMTgsNTksaS5mb3JjZVN2ZyQpKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLFcoMTksNjEsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibWluTWF4U3RlcCIsVygyMCw2MyxpLm1pbk1heFN0ZXBzJCkpKCJjb2x1bW5IZWFkZXJzIixXKDIxLDY1LGkuY29sdW1uSGVhZGVycyQpKSgicmFuZ2VFbmFibGVkIixXKDIyLDY3LGkucmFuZ2VFbmFibGVkJCkpfSxkZXBlbmRlbmNpZXM6W212LCRsZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB6R2Uobix0LGUpe2xldCBpPVtdLHtsZWZ0OnIscmlnaHQ6b309dCxzPShvLXIpL2UsYT0wLGw9MDtmb3IobGV0IGM9MDtjPGU7YysrKXtsZXQgdT1yK2MqcyxkPXUrcyxwPWM9PT1lLTEsaD1sO2ZvcihsPTA7YTxuLmxlbmd0aDspe2xldCBmPW5bYV0sbT1qR2UoZix1LGQsIXApO2lmKGgrPW0uY3VycixsKz1tLm5leHQsZi54K2YuZHg+ZClicmVhazthKyt9aS5wdXNoKHt4OnUsZHg6cyx5Omh9KX1yZXR1cm4gaX1mdW5jdGlvbiBqR2Uobix0LGUsaSl7bGV0IHI9bi54LG89bi54K24uZHg7aWYocj5lfHxvPHQpcmV0dXJue2N1cnI6MCxuZXh0OjB9O2lmKDA9PT1uLmR4KXJldHVybiBpJiZvPj1lP3tjdXJyOjAsbmV4dDpuLnl9OntjdXJyOm4ueSxuZXh0OjB9O2xldCBzPU1hdGgubWluKG8sZSktTWF0aC5tYXgocix0KTtyZXR1cm57Y3VycjpuLnkqcy9uLmR4LG5leHQ6MH19dmFyIHFHZT1ybygiLjJ+cyIpLFlHZT1ybygiLjR+ciIpLFhHZT1ybygiLjJ+ZSIpO2Z1bmN0aW9uIG5jZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlND9xR2Uobik6dDwuMDAxP1hHZShuKTpZR2Uobil9dmFyIFFHZT1bIm1haW4iXSxLR2U9WyJ4QXhpcyJdLFpHZT1bInlBeGlzIl0sSkdlPVsiY29udGVudCJdLCRHZT1bImhpc3RvZ3JhbXMiXTtmdW5jdGlvbiBlNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIpKDEsInRleHQiKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLHgoMikseXQoZS50b29sdGlwRGF0YS54QXhpcy5sYWJlbCl9fWZ1bmN0aW9uIHQ2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIikoMSwidGV4dCIpLEQoMiksdigpKCkpLDImbil7bGV0IGU9TSgpO090KCJ0cmFuc2Zvcm0iLGUuZ2V0R3JvdXBUcmFuc2Zvcm0oZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSx4KDEpLHplKCJ5IixlLnRvb2x0aXBEYXRhLnlBeGlzLnBvc2l0aW9uKSx4KDEpLHFlKCIgIixlLnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIG42ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLFNhKCksS3QoMCksZygxLCJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciIsMTYpLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJ0aW1lU2VsZWN0aW9uIixlLnRpbWVTZWxlY3Rpb24pKCJzdGVwcyIsZS5nZXRTdGVwcygpKSgidGVtcG9yYWxTY2FsZSIsZS5zY2FsZXMudGVtcG9yYWxTY2FsZSl9fWZ1bmN0aW9uIGk2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIiksTigxLCJsaW5lIiwxNyksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O090KCJ0cmFuc2Zvcm0iLE0oKS5nZXRDc3NUcmFuc2xhdGVQeCgwLGUpKX19ZnVuY3Rpb24gcjZlKG4sdCl7MSZuJiYoam4oKSxOKDAsImxpbmUiLDIxKSl9ZnVuY3Rpb24gbzZlKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7T3QoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeChpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLngsaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS55KSl9fWZ1bmN0aW9uIHM2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLGcoMCwiZyIsMTgpLFAoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHIpe2xldCBzPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLHMsITApKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKG8pKX0pLEUoMSxyNmUsMSwwLCJsaW5lIiwxOSksTigyLCJwYXRoIiksRSgzLG82ZSwxLDIsImNpcmNsZSIsMjApLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO090KCJ0cmFuc2Zvcm0iLGkuZ2V0R3JvdXBUcmFuc2Zvcm0oZSkpKCJjb2xvciIsaS5nZXRIaXN0b2dyYW1GaWxsKGUpKSxhdCgiaGlzdG9ncmFtIiwhMCkoIm5vLWNvbG9yIiwhaS5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSkpLHgoMSksYigibmdJZiIsaS5tb2RlPT09aS5IaXN0b2dyYW1Nb2RlLk9GRlNFVCkseCgxKSx6ZSgiZCIsaS5nZXRIaXN0b2dyYW1QYXRoKGUpKSx4KDEpLGIoIm5nSWYiLGkudG9vbHRpcERhdGEpfX1mdW5jdGlvbiBhNmUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9TSgyKTt6ZSgiY3giLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBsNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsNCkoMSwiZyIpLE4oMiwicGF0aCIpLEUoMyxhNmUsMSwyLCJjaXJjbGUiLDIzKSx2KCksZyg0LCJnIiwyNCkoNSwidGV4dCIsMjUpLEQoNiksdigpKCkoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxPdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSx6ZSgiZCIsZS5nZXRIaXN0b2dyYW1QYXRoKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSxiKCJuZ0lmIixlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLHgoMSksT3QoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLngsZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi55KSkseCgyKSx5dChlLnRvb2x0aXBEYXRhLnZhbHVlLmxhYmVsKX19dmFyIGlPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMubW9kZT1Pci5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9Zm8uU1RFUCx0aGlzLnRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZT1Pcix0aGlzLlRpbWVQcm9wZXJ0eT1mbyx0aGlzLnRvb2x0aXBEYXRhPW51bGwsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOm5jZSxjb3VudDpybygiLjNuIiksd2FsbFRpbWU6a3YoIiVtLyVkICVYIiksc3RlcDpybygiLjBmIikscmVsYXRpdmU6aT0+cm8oIi4xciIpKGkvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe2xpKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+dGhpcy5vbk1vdXNlTW92ZShlKSl9Z2V0Q3NzVHJhbnNsYXRlUHgoZSxpKXtyZXR1cm5gdHJhbnNsYXRlKCR7ZX1weCwgJHtpfXB4KWB9Z2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaSl7aWYoIWUuYmlucy5sZW5ndGgpcmV0dXJue3g6MCxkeDowLHk6MH07bGV0IHI9ZS5iaW5zWzBdLG89ZS5iaW5zLnNsaWNlKC0xKVswXTtyZXR1cm4gaTxyLng/cjppPj1vLngrby5keD9vOmUuYmlucy5maW5kKGE9PmEueDw9aSYmaTxhLngrYS5keCl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZSgkTShlKSkseTp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKGUueSl9Ont4OjAseTowfX1nZXRIaXN0b2dyYW1QYXRoKGUpe2lmKCF0aGlzLnNjYWxlc3x8IWUuYmlucy5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUscj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89ZS5iaW5zWzBdLHM9ZS5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7aSgkTShvKSl9LCR7cigwKX1gXTtmb3IobGV0IGwgb2YgZS5iaW5zKWEucHVzaChgTCR7aSgkTShsKSl9LCR7cihsLnkpfWApO3JldHVybiBhLnB1c2goYEwke2koJE0ocykpfSwke3IoMCl9YCksYS5qb2luKCIiKX10cmFja0J5V2FsbFRpbWUoZSl7cmV0dXJuIGUud2FsbFRpbWV9Z2V0R3JvdXBUcmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuc2NhbGVzJiZ0aGlzLm1vZGUhPT1Pci5PVkVSTEFZP3RoaXMuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKSk6IiJ9Z2V0U3RlcHMoKXtyZXR1cm4gdGhpcy5kYXRhLm1hcChlPT5lLnN0ZXApfWlzVGltZVNlbGVjdGlvbkVuYWJsZWQoZSl7cmV0dXJuIEJvb2xlYW4odGhpcy5tb2RlPT09T3IuT0ZGU0VUJiZ0aGlzLnRpbWVQcm9wZXJ0eT09PWZvLlNURVAmJnRoaXMuc2NhbGVzJiZlKX1pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSl7cmV0dXJuIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHwobnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA9PT1lLnN0ZXA6dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA8PWUuc3RlcCYmdGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwPj1lLnN0ZXApfWdldEhpc3RvZ3JhbUZpbGwoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSk6IiJ9dXBkYXRlQ29sb3JPbkhvdmVyKGUsaSxyKXshdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fHRoaXMuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGkpfHwocj9lLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJuby1jb2xvciIpOmUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm5vLWNvbG9yIikpfWdldEdyaWRUaWNrWUxvY3MoKXtpZighdGhpcy5zY2FsZXN8fHRoaXMubW9kZT09PU9yLk9GRlNFVClyZXR1cm5bXTtsZXQgZT10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiBlLnRpY2tzKCkubWFwKGk9PmUoaSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuZG9tVmlzaWJsZT1lLGUmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQoZSl7aWYoIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pKXJldHVybjtsZXQgaT10aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxyPXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAsbz1lLnN0ZXA8aT9lLnN0ZXA6aSxzPXI7cz12b2lkIDA9PT1zP2Uuc3RlcD5pP2Uuc3RlcDppOmUuc3RlcD5zP2Uuc3RlcDpzLChvIT09aXx8cyE9PXIpJiZvIT09cyYmdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOm99LGVuZDp7c3RlcDpzfX0sYWZmb3JkYW5jZTpHby5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0V9KX1nZXRUaW1lVmFsdWUoZSl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIGZvLldBTExfVElNRTpyZXR1cm4gZS53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIGUuc3RlcDtjYXNlIGZvLlJFTEFUSVZFOnJldHVybiBlLndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXshdGhpcy5kb21WaXNpYmxlfHwodGhpcy5zY2FsZXM9dGhpcy5jb21wdXRlU2NhbGVzKHRoaXMuZGF0YSksdGhpcy5yZW5kZXJYQXhpcygpLHRoaXMucmVuZGVyWUF4aXMoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9Y29tcHV0ZVNjYWxlcyhlKXtsZXR7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDpzfT1pY2UoZSxfPT5mdW5jdGlvbihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5taW4oZSxpLngpLDEvMCl9KF8uYmlucyksXz0+anooXy5iaW5zLCh7eDp5LGR4Okl9KT0+eStJKSksYT1qeihlLF89Pmp6KF8uYmlucywoe3k6eX0pPT55KSksbD1EYygpLmRvbWFpbihbbyxzXSkubmljZSgpLGM9dGhpcy5tb2RlIT09T3IuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PWZvLldBTExfVElNRT9MbSgpOkRjKCksdT1lLm1hcChfPT50aGlzLmdldFRpbWVWYWx1ZShfKSkse21pbjpkLG1heDpwfT1pY2UodSxfPT5fKSxoPVtkLHBdO2MuZG9tYWluKGgpO2xldCBmPURjKCk7Zi5kb21haW4oWzAsYV0pO2xldCBtPXdtKHRoaXMuY29sb3J8fCIjMDAwIiksQz1EYygpO3JldHVybiBDLmRvbWFpbihoKSxsLnJhbmdlKFswLGldKSxDLnJhbmdlKFttLmJyaWdodGVyKCksbS5kYXJrZXIoKV0pLEMuaW50ZXJwb2xhdGUoTkgpLHRoaXMubW9kZT09PU9yLk9WRVJMQVk/KGMucmFuZ2UoW3Iscl0pLGYucmFuZ2UoW3IsMF0pKTooYy5yYW5nZShbci0odGhpcy5tb2RlPT09T3IuT0ZGU0VUP3ItdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLHJdKSxmLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOmwsZDNDb2xvclNjYWxlOkMsY291bnRTY2FsZTpmLHRlbXBvcmFsU2NhbGU6Y319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldHt3aWR0aDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxpPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMyxuKX0odGhpcy5zY2FsZXMuYmluU2NhbGUpLnRpY2tzKE1hdGgubWF4KDIsZS8yMCkpO2kudGlja0Zvcm1hdCh0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKSxpKFpQKHRoaXMueEF4aXMubmF0aXZlRWxlbWVudCkpfWdldFlBeGlzRm9ybWF0dGVyKCl7aWYodGhpcy5tb2RlPT09T3IuT1ZFUkxBWSlyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLmNvdW50O3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBmby5XQUxMX1RJTUU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5zdGVwO2Nhc2UgZm8uUkVMQVRJVkU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5yZWxhdGl2ZTtkZWZhdWx0OnRocm93IFJhbmdlRXJyb3IoYFkgYXhpcyBmb3JtYXR0ZXIgZm9yICR7dGhpcy50aW1lUHJvcGVydHl9IG11c3QgYmUgaW1wbGVtZW50ZWRgKX19Z2V0TWF4VGlja3MoZSl7bGV0e2hlaWdodDppfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxyPWkvMTU7aWYodGhpcy50aW1lUHJvcGVydHk9PT1mby5TVEVQKXtsZXRbbyxzXT1lLmRvbWFpbigpLGE9TWF0aC5tYXgocy1vKzEsMSk7cmV0dXJuIE1hdGgubWluKGEscil9cmV0dXJuIHJ9cmVuZGVyWUF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBlPXRoaXMubW9kZT09PU9yLk9WRVJMQVk/dGhpcy5zY2FsZXMuY291bnRTY2FsZTp0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlLGk9dGhpcy5nZXRNYXhUaWNrcyhlKSxyPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMixuKX0oZSkudGlja3MoTWF0aC5tYXgoMixpKSk7ci50aWNrRm9ybWF0KHRoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSkscihaUCh0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQpKX1maW5kQ2xvc2VzdERhdHVtSW5kZXgoZSl7bGV0IGk9ZS50YXJnZXQscj1pO2Zvcig7aSYmaSE9PXRoaXMuaGlzdG9ncmFtcy5uYXRpdmVFbGVtZW50OylyPWksaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGk/QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpOi0xfW9uTW91c2VNb3ZlRm9yVGVzdE9ubHkoZSl7cmV0dXJuIHRoaXMub25Nb3VzZU1vdmUoZSl9b25Nb3VzZU1vdmUoZSl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgaT1lLm9mZnNldFgscj1lLm9mZnNldFksbz10aGlzLmZpbmRDbG9zZXN0RGF0dW1JbmRleChlKTtpZihvPDApcmV0dXJuO2xldCBzPXRoaXMuc2NhbGVzLmJpblNjYWxlLmludmVydChpKSxhPXRoaXMuZGF0YVtvXSxsPXRoaXMuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGEscyk7dGhpcy50b29sdGlwRGF0YT17dmFsdWU6e3Bvc2l0aW9uOnt4OmkseTpyfSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5mb3JtYXR0ZXJzLmNvdW50KGwueSk6YFN0ZXA6ICR7dGhpcy5mb3JtYXR0ZXJzLnN0ZXAoYS5zdGVwKX1gfSx4QXhpczp7cG9zaXRpb246dGhpcy5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQobCkueCxsYWJlbDp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKCRNKGwpKX0seUF4aXM6e3Bvc2l0aW9uOnRoaXMuc2NhbGVzLmNvdW50U2NhbGUodGhpcy5tb2RlPT09T3IuT0ZGU0VUPzA6bC55KSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKHRoaXMuZ2V0VGltZVZhbHVlKGEpKTp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKGwueSl9LHhQb3NpdGlvbkluQmluQ29vcmQ6cyxjbG9zZXN0RGF0dW06YSxjbG9zZXN0QmluOmx9LHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFFHZSw1KSxsdChLR2UsNSksbHQoWkdlLDUpLGx0KEpHZSw1KSxsdCgkR2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWFpbj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS54QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS55QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5jb250ZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmhpc3RvZ3JhbXM9ci5maXJzdCl9fSxpbnB1dHM6e21vZGU6Im1vZGUiLHRpbWVQcm9wZXJ0eToidGltZVByb3BlcnR5Iixjb2xvcjoiY29sb3IiLGRhdGE6ImRhdGEiLHRpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24ifSxvdXRwdXRzOntvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMix2YXJzOjE1LGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJvblJlc2l6ZSIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdLFsibWFpbiIsIiJdLFsxLCJheGlzIiwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsxLCJ0b29sdGlwIl0sWzMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsxLCJheGlzIiwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbMSwiZ3JpZCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiaGlzdG9ncmFtcyIsIiJdLFszLCJ0cmFuc2Zvcm0iLCJoaXN0b2dyYW0iLCJuby1jb2xvciIsImNvbG9yIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsInRvb2x0aXAiLDQsIm5nSWYiXSxbMSwiaGlzdG9ncmFtLWNhcmQtZm9iIiwzLCJ0aW1lU2VsZWN0aW9uIiwic3RlcHMiLCJ0ZW1wb3JhbFNjYWxlIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXSxbIngyIiwiMTAwJSIsMSwidGljayJdLFszLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIl0sWyJjbGFzcyIsImJhc2VsaW5lIiwieDIiLCIxMDAlIiw0LCJuZ0lmIl0sWyJyIiwiMiIsMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWyJ4MiIsIjEwMCUiLDEsImJhc2VsaW5lIl0sWyJyIiwiMiJdLFsiciIsIjIiLDQsIm5nSWYiXSxbMSwidmFsdWUtbGFiZWwiXSxbIngiLCIzIiwieSIsIi0zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSksUCgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGpuKCksZygyLCJzdmciLDIpLE4oMywiZyIsbnVsbCwzKSxnKDUsImciLDQpLEUoNixlNmUsMywzLCJnIiw1KSx2KCkoKSxTYSgpLGcoNywiZGl2Iiw2KSxqbigpLGcoOCwic3ZnIiksTig5LCJnIixudWxsLDcpLGcoMTEsImciLDQpLEUoMTIsdDZlLDMsNCwiZyIsNSksdigpKCksRSgxMyxuNmUsMiwzLCJuZy1jb250YWluZXIiLDgpLHYoKSxnKDE0LCJzdmciLDksMTApKDE2LCJnIiwxMSksRSgxNyxpNmUsMiwyLCJnIiwxMiksdigpLGcoMTgsImciLG51bGwsMTMpLEUoMjAsczZlLDQsMTEsImciLDE0KSx2KCksRSgyMSxsNmUsNyw3LCJnIiwxNSksdigpKCkpLDImZSYmKGVhKCJtYWluICIraS5tb2RlKyIgIitpLnRpbWVQcm9wZXJ0eSkseCg2KSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDUpLE90KCJ0cmFuc2Zvcm0iLGkuZ2V0Q3NzVHJhbnNsYXRlUHgoOSwwKSkseCgxKSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDEpLGIoIm5nSWYiLGkuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZChpLnRpbWVTZWxlY3Rpb24pKSx4KDQpLGIoIm5nRm9yT2YiLGkuZ2V0R3JpZFRpY2tZTG9jcygpKSx4KDEpLGF0KCJoaXN0b2dyYW1zIiwhMCkoImxpbmtlZC10aW1lLXNpbmdsZS1zdGVwIixpLnRpbWVTZWxlY3Rpb24mJiFpLnRpbWVTZWxlY3Rpb24uZW5kKSx4KDIpLGIoIm5nRm9yT2YiLGkuZGF0YSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5V2FsbFRpbWUpLHgoMSksYigibmdJZiIsaS50b29sdGlwRGF0YSkpfSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX1bX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjEwcHh9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJjb250ZW50IHktYXhpcyIgIngtYXhpcyAuIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDUwcHg7Z3JpZC10ZW1wbGF0ZS1yb3dzOjFmciAzMHB4fS5tYWluLndhbGxfdGltZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA3NXB4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEwcHh9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aWRlb2dyYXBoaWM7dGV4dC1hbmNob3I6c3RhcnR9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjojNjE2MTYxO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBnW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOngtYXhpc30ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpoYW5naW5nO3RleHQtYW5jaG9yOm1pZGRsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eS1heGlzO292ZXJmbG93OmNsaXAgdmlzaWJsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTptaWRkbGU7dGV4dC1hbmNob3I6c3RhcnR9Lmhpc3RvZ3JhbS1jYXJkLWZvYltfbmdjb250ZW50LSVDT01QJV17bGVmdDo5cHg7cG9zaXRpb246YWJzb2x1dGV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiNkZGR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5lLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiM1NTV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjb250ZW50O292ZXJmbG93OnZpc2libGU7ei1pbmRleDoxfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1kYXNoYXJyYXk6Mn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utb3BhY2l0eTouNjtzdHJva2Utd2lkdGg6MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjYpKTtzdHJva2U6I2ZmZjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZTpjdXJyZW50Q29sb3I7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eToxO3N0cm9rZTpjdXJyZW50Q29sb3I7ZmlsbDpyZ2JhKDAsMCwwLDApfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyMjEsMjIxLDIyMSwuNCkgIWltcG9ydGFudH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDUxLDUxLDUxLC40KSAhaW1wb3J0YW50fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGp6KG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkpPT5NYXRoLm1heChlLHQoaSkpLC0xLzApfWZ1bmN0aW9uIGljZShuLHQsZSl7ZXx8KGU9dCk7bGV0IGk9MS8wLHI9LTEvMDtmb3IobGV0IG8gb2YgbilpPU1hdGgubWluKGksdChvKSkscj1NYXRoLm1heChyLGUobykpO3JldHVybnttaW46aSxtYXg6cn19ZnVuY3Rpb24gJE0obil7cmV0dXJuIG4ueCsuNSpuLmR4fWZ1bmN0aW9uIGQ2ZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMTQpLE4oMSwibWF0LXNwaW5uZXIiLDE1KSx2KCkpfWZ1bmN0aW9uIHA2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInRiLWhpc3RvZ3JhbSIsMTYpLFAoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvbkxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImRhdGEiLGUuZGF0YSkoIm1vZGUiLGUubW9kZSkoInRpbWVQcm9wZXJ0eSIsZS50aW1lUHJvcGVydHkoZS54QXhpc1R5cGUpKSgiY29sb3IiLGUucnVuQ29sb3JTY2FsZShlLnJ1bklkKSkoInRpbWVTZWxlY3Rpb24iLGUuY29udmVydFRvVGltZVNlbGVjdGlvbihlLmxpbmtlZFRpbWVTZWxlY3Rpb24pKX19ZnVuY3Rpb24gaDZlKG4sdCl7MSZuJiYoZygwLCJkaXYiLDE4KSxEKDEsIiBEYXRhIGZhaWxlZCB0byBsb2FkLiAiKSx2KCkpfWZ1bmN0aW9uIGY2ZShuLHQpe2lmKDEmbiYmRSgwLGg2ZSwyLDAsImRpdiIsMTcpLDImbil7bGV0IGU9TSgpO2IoIm5nSWYiLGUubG9hZFN0YXRlPT09ZS5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fXZhciBtNmU9ZnVuY3Rpb24obil7cmV0dXJue2JhY2tncm91bmRDb2xvcjpufX0scmNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uTGlua2VkVGltZVRvZ2dsZWQ9bmV3IEd9dGltZVByb3BlcnR5KGUpe3N3aXRjaChlKXtjYXNlIFlpLlNURVA6cmV0dXJuIGZvLlNURVA7Y2FzZSBZaS5XQUxMX1RJTUU6cmV0dXJuIGZvLldBTExfVElNRTtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBmby5SRUxBVElWRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCB4QXhpc1R5cGUgZm9yIGhpc3RvZ3JhbSB0aW1lIHByb3BlcnR5LiIpfX1jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9udWxsOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcH0sZW5kOmUuZW5kU3RlcD97c3RlcDplLmVuZFN0ZXB9Om51bGx9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiXV0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksTigyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSx2KCksZyg0LCJkaXYiLDQpLE4oNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksdigpLGcoNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxOKDksIm1hdC1pY29uIiw5KSx2KCksZygxMCwiYnV0dG9uIiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxOKDExLCJtYXQtaWNvbiIsOSksdigpKCksRSgxMixkNmUsMiwwLCJzcGFuIiwxMSksdigpLEUoMTMscDZlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksRSgxNCxmNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxlbikpLDImZSl7bGV0IHI9c3QoMTUpO3goMiksYigidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCkseCgyKSxiKCJuZ1N0eWxlIixIbigxMixtNmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSx6ZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLHgoMSksYigic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSx4KDIpLGIoInN2Z0ljb24iLGkuc2hvd0Z1bGxXaWR0aD8iZnVsbHNjcmVlbl9leGl0XzI0cHgiOiJmdWxsc2NyZWVuXzI0cHgiKSx4KDEpLGIoIm5nSWYiLGkubG9hZFN0YXRlPT09aS5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHgoMSksYigibmdJZiIsaS5kYXRhJiZpLmRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSx3cCxpTywkbixabix2byxVUCx2dix5dl0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJ0YWcgY29udHJvbHMiICJydW4gc3Bpbm5lciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweDtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjB9LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpydW47ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2dyaWQtYXJlYTpjb250cm9scztqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpzcGlubmVyO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9bWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3RvcDowO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9dGItaGlzdG9ncmFtW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxvY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5tb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpfWlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLkhJU1RPR1JBTVN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKG89PiEhbyYmdGhpcy5pc0hpc3RvZ3JhbUNhcmRNZXRhZGF0YShvKSksQihvPT5vKSkscj1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKTt0aGlzLmRhdGEkPXIucGlwZShCKChbbyxzXSk9PntsZXQgYT1vLnJ1bklkO3JldHVybiBzJiZzLmhhc093blByb3BlcnR5KGEpP2Z1bmN0aW9uKG4sdD0zMCl7aWYoIW4ubGVuZ3RofHx0PDEpcmV0dXJuW107bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bnVsbCxlPW51bGw7Zm9yKGxldHtiaW5zOml9b2Ygbil7aWYoIWkubGVuZ3RoKWNvbnRpbnVlO2xldCByPWlbaS5sZW5ndGgtMV0sbz1pWzBdLngscz1yLngrci5keDsobnVsbD09PXR8fG88dCkmJih0PW8pLChudWxsPT09ZXx8cz5lKSYmKGU9cyl9cmV0dXJuIG51bGw9PT10fHxudWxsPT09ZT9udWxsOntsZWZ0OnQscmlnaHQ6ZX19KG4pO3JldHVybiBlJiZlLmxlZnQ9PT1lLnJpZ2h0JiYoZS5yaWdodD0xLjEqZS5yaWdodCsxLGUubGVmdD1lLmxlZnQvMS4xLTEpLG4ubWFwKGk9Pih7c3RlcDppLnN0ZXAsd2FsbFRpbWU6aS53YWxsVGltZSxiaW5zOmU/ekdlKGkuYmlucyxlLHQpOltdfSkpfShzW2FdLm1hcCh1PT57bGV0e3dhbGxUaW1lOmQsc3RlcDpwfT11O3JldHVybnt3YWxsVGltZTpkLHN0ZXA6cCxiaW5zOnUuYmlucy5tYXAoZj0+KHt4OmYubWluLGR4OmYubWF4LWYubWluLHk6Zi5jb3VudH0pKX19KSk6W119KSksdGhpcy5zdGVwcyQ9dGhpcy5kYXRhJC5waXBlKEIobz0+by5tYXAocz0+cy5zdGVwKSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0ZXBzJCx0aGlzLnN0b3JlLnNlbGVjdChIcCldKS5waXBlKEIoKFtvLHMsYV0pPT57aWYoIW8pcmV0dXJuIG51bGw7bGV0IGw9MS8wLGM9LTEvMDtmb3IobGV0IHAgb2YgcylsPU1hdGgubWluKHAsbCksYz1NYXRoLm1heChwLGMpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKG51bGwhPT1uLmVuZFN0ZXApcmV0dXJuIG47bGV0IGU9ZnVuY3Rpb24obix0KXtsZXQgZT0xLzAsaT1udWxsO2ZvcihsZXQgciBvZiB0KXtsZXQgbz1NYXRoLmFicyhuLXIpO288ZSYmKGU9byxpPXIpfXJldHVybiBpfShuLnN0YXJ0U3RlcCx0KTtyZXR1cm4gbnVsbCE9PWU/ey4uLm4sc3RhcnRTdGVwOmV9Om59KGNfKGxWKG8sYSksbCxjKSxzKX0pKSx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kXSkucGlwZShCKChbbyxzXSk9Pm8mJnMmJiFzLmNsaXBwZWQmJm51bGw9PT1vLmVuZCYmby5zdGFydC5zdGVwIT09cy5zdGFydFN0ZXApKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihvPT5vLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobz0+Z3Yobyx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihvPT5vLnJ1bklkKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQnAsdGhpcy5jYXJkSWQpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChvaChlKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goc2goe2FmZm9yZGFuY2U6V2EuRk9CX0RFU0VMRUNUfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGlzdG9ncmFtLWNhcmQiXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjEyLHZhcnM6MzQsY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsImRhdGEiLCJtb2RlIiwieEF4aXNUeXBlIiwicnVuQ29sb3JTY2FsZSIsInNob3dGdWxsV2lkdGgiLCJpc1Bpbm5lZCIsImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJvbkZ1bGxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCIsMCksUCgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25MaW5rZWRUaW1lVG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxMixpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwxNCxpLnRpdGxlJCkpKCJ0YWciLFcoMywxNixpLnRhZyQpKSgicnVuSWQiLFcoNCwxOCxpLnJ1bklkJCkpKCJkYXRhIixXKDUsMjAsaS5kYXRhJCkpKCJtb2RlIixXKDYsMjIsaS5tb2RlJCkpKCJ4QXhpc1R5cGUiLFcoNywyNCxpLnhBeGlzVHlwZSQpKSgicnVuQ29sb3JTY2FsZSIsaS5ydW5Db2xvclNjYWxlKSgic2hvd0Z1bGxXaWR0aCIsVyg4LDI2LGkuc2hvd0Z1bGxXaWR0aCQpKSgiaXNQaW5uZWQiLFcoOSwyOCxpLmlzUGlubmVkJCkpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLFcoMTAsMzAsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTEsMzIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpfSxkZXBlbmRlbmNpZXM6W3JjZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImltYWdlLWNhcmQiLDYpLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uUGluU3RhdGVDaGFuZ2VkKCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLGUucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIHk2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNjYWxhci1jYXJkIiw3KSxQKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMikub25QaW5TdGF0ZUNoYW5nZWQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19ZnVuY3Rpb24gYjZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaGlzdG9ncmFtLWNhcmQiLDgpLFAoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiB4NmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxxZSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLGUuY2FyZElkLCIiKX19ZnVuY3Rpb24gQzZlKG4sdCl7aWYoMSZuJiYoS3QoMCwxKSxFKDEsdjZlLDEsMywiaW1hZ2UtY2FyZCIsMiksRSgyLHk2ZSwxLDIsInNjYWxhci1jYXJkIiwzKSxFKDMsYjZlLDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLEUoNCx4NmUsMiwxLCJkaXYiLDUpLFp0KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpblR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSU1BR0VTKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLlNDQUxBUlMpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fXZhciBzY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgR31vbkZ1bGxXaWR0aENoYW5nZWQoZSl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlKXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQoZSl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0V2ZXJWaXNpYmxlOiJpc0V2ZXJWaXNpYmxlIixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAsQzZlLDUsNCwibmctY29udGFpbmVyIiwwKSwyJmUmJmIoIm5nSWYiLGkuaXNFdmVyVmlzaWJsZSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsQ3AsS25lLGVjZSxvY2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGFjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzRXZlclZpc2libGU9ITEsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEcsdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdCh2XykucGlwZShiZygzNTAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSksQihpPT5yPT5pLmhhc093blByb3BlcnR5KHIpP2lbcl06IiNmZmYiKSl9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzRXZlclZpc2libGU9dGhpcy5pc0V2ZXJWaXNpYmxlfHxlfW9uRnVsbFdpZHRoQ2hhbmdlZChlKXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdChlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdChlKX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKS5waXBlKEh0KDEpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGNaKSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkdih7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6aSx3YXNQaW5uZWQ6ZX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRnVsbFdpZHRoQ2hhbmdlZChvKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsSGVpZ2h0Q2hhbmdlZChvKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiaXNFdmVyVmlzaWJsZSIsaS5pc0V2ZXJWaXNpYmxlKSgiY2FyZElkIixpLmNhcmRJZCkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIixpLnBsdWdpblR5cGUpKCJydW5Db2xvclNjYWxlIixXKDEsNSxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbbXYsc2NlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gRTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgVDZlPWZ1bmN0aW9uKG4sdCl7cmV0dXJueyJmdWxsLXdpZHRoIjpuLCJmdWxsLWhlaWdodCI6dH19O2Z1bmN0aW9uIEQ2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNSkoMSwiY2FyZC12aWV3Iiw2KSxQKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocy5jYXJkSWQscikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixUNmUsaS5jYXJkc0F0RnVsbFdpZHRoLmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0uZnVsbFdpZHRoKSxpLmNhcmRzQXRGdWxsSGVpZ2h0LmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0udGFibGVFeHBhbmRlZCkpKSx4KDEpLGIoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGkuZ3JvdXBOYW1lKSgicGx1Z2luVHlwZSIsZS5wbHVnaW4pKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZExhenlMb2FkZXIiLGUuY2FyZElkKX19ZnVuY3Rpb24gQTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgSTZlPWZ1bmN0aW9uKCl7cmV0dXJue2lzQm90dG9tQ29udHJvbDohMX19LFA2ZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITB9fTtmdW5jdGlvbiBSNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEUoMSxFNmUsMSwwLCJuZy1jb250YWluZXIiLDIpLGcoMiwiZGl2IiwzKSxFKDMsRDZlLDIsOSwiZGl2Iiw0KSx2KCksRSg0LEE2ZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDIpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCg4LEk2ZSkpLHgoMSksT3QoImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsZS5ncmlkVGVtcGxhdGVDb2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlDYXJkcykseCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDksUDZlKSl9fWZ1bmN0aW9uIE82ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMTIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDMpO3JldHVybiBvZShvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgtMSxyLnRhcmdldCkpfSksRCgxLCIgUHJldmlvdXMgIiksdigpfTImbiYmYigiZGlzYWJsZWQiLDA9PT1NKDMpLnBhZ2VJbmRleCl9ZnVuY3Rpb24gazZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwic3BhbiIsMTUpKDEsImlucHV0IiwxNiksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pLHYoKSxEKDIpLHYoKX1pZigyJm4pe2xldCBlPU0oNCk7eCgxKSxiKCJ2YWx1ZSIsZS5wYWdlSW5kZXgrMSkoIm1heCIsZS5udW1QYWdlcykseCgxKSxxZSgiIG9mICIsZS5udW1QYWdlcywiIil9fWZ1bmN0aW9uIEY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iKSxFKDEsazZlLDMsMywic3BhbiIsMTMpLGcoMiwiYnV0dG9uIiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMyk7cmV0dXJuIG9lKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleCsxLHIudGFyZ2V0KSl9KSxEKDMsIiBOZXh0ICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pc0JvdHRvbUNvbnRyb2wsaT1NKCk7eCgxKSxiKCJuZ0lmIixpLnNob3dQYWdpbmF0aW9uSW5wdXQoZSkpLHgoMSksYigiZGlzYWJsZWQiLGkucGFnZUluZGV4KzE+PWkubnVtUGFnZXMpfX1mdW5jdGlvbiBONmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsOCkoMSwic3BhbiIsOSksRSgyLE82ZSwyLDEsImJ1dHRvbiIsMTApLHYoKSxnKDMsInNwYW4iLDExKSxFKDQsRjZlLDQsMiwic3BhbiIsMCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scykseCgyKSxiKCJuZ0lmIixlLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfX1mdW5jdGlvbiBMNmUobix0KXsxJm4mJkUoMCxONmUsNSwyLCJkaXYiLDcpLDImbiYmYigibmdJZiIsTSgpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfXZhciBsY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNka1Njcm9sbGFibGU9ZSx0aGlzLlBsdWdpblR5cGU9V24sdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiIsdGhpcy5jYXJkc0F0RnVsbFdpZHRoPW5ldyBTZXQsdGhpcy5jYXJkc0F0RnVsbEhlaWdodD1uZXcgU2V0LHRoaXMucGFnZUluZGV4Q2hhbmdlZD1uZXcgR31uZ09uSW5pdCgpe3RoaXMuaXNDYXJkV2lkdGhWYWxpZCh0aGlzLmNhcmRNaW5XaWR0aCkmJih0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5jYXJkTWluV2lkdGgpe2xldCBpPWUuY2FyZE1pbldpZHRoLmN1cnJlbnRWYWx1ZTt0aGlzLmlzQ2FyZFdpZHRoVmFsaWQoaSk/KHRoaXMuY2FyZE1pbldpZHRoPWksdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49YHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgke3RoaXMuY2FyZE1pbldpZHRofXB4LCAxZnIpKWApOnRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPSIifX1pc0NhcmRXaWR0aFZhbGlkKGUpe3JldHVybiBlJiZlPj0zMzUmJmU8PTczNX1zaG93UGFnaW5hdGlvbklucHV0KGUpe3JldHVybiBlfWhhbmRsZVBhZ2VDaGFuZ2UoZSxpKXtsZXQgcj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtzZXRUaW1lb3V0KCgpPT57dGhpcy5zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihpLHIpfSwwKSx0aGlzLnBhZ2VJbmRleENoYW5nZWQuZW1pdChlKX1zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihlLGkpe2xldCByPXRoaXMuY2RrU2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ciYmci5zY3JvbGxUbygwLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWkrci5zY3JvbGxUb3ApfXRyYWNrQnlDYXJkcyhlLGkpe3JldHVybiBpLmNhcmRJZH1vblBhZ2luYXRpb25JbnB1dENoYW5nZShlKXtsZXQgaT1lLnRhcmdldDtpZigiaW5wdXQiPT09ZS50eXBlJiYiIj09PWkudmFsdWUpcmV0dXJuO2xldCByPU51bWJlcihpLnZhbHVlKS0xLG89TWF0aC5taW4oTWF0aC5tYXgoMCxyKSx0aGlzLm51bVBhZ2VzLTEpO2kudmFsdWUhPT1TdHJpbmcobysxKSYmKGkudmFsdWU9U3RyaW5nKG8rMSkpLHRoaXMuaGFuZGxlUGFnZUNoYW5nZShvLGkpfW9uRnVsbFdpZHRoQ2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbFdpZHRoLmFkZChlKTp0aGlzLmNhcmRzQXRGdWxsV2lkdGguZGVsZXRlKGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSxpKXtpP3RoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuZGVsZXRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFlwLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiXV0saW5wdXRzOntpc0dyb3VwRXhwYW5kZWQ6ImlzR3JvdXBFeHBhbmRlZCIscGFnZUluZGV4OiJwYWdlSW5kZXgiLG51bVBhZ2VzOiJudW1QYWdlcyIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixzaG93UGFnaW5hdGlvbkNvbnRyb2xzOiJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixjYXJkU3RhdGVNYXA6ImNhcmRTdGF0ZU1hcCJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjMsdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdJZiJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWyJjbGFzcyIsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLXNwYWNlIiwzLCJuZ0NsYXNzIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInByZXYiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFI2ZSw1LDEwLCJkaXYiLDApLEUoMSxMNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGVuKSksMiZlJiZiKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCl9LGRlcGVuZGVuY2llczpbSW5lLGFjZSxQbix5bixYZSxObywkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOmNvbnRlbnR9LmNhcmQtZ3JpZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzM1cHgsIDFmcikpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH0uY2FyZC1zcGFjZS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWNvbHVtbi1zdGFydDoxO2dyaWQtY29sdW1uLWVuZDotMX0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo0ODBweH0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfWNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250YWluOmxheW91dCBwYWludDtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MzIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpjZW50ZXI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0fS5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNjE2MTYxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmdyb3VwTmFtZSQ9bmV3IFZyKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgVnIoMCksdGhpcy5pdGVtcyQ9bmV3IFZyKFtdKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMuY2FyZFN0YXRlTWFwJD10aGlzLnN0b3JlLnNlbGVjdChtYyksdGhpcy5udW1QYWdlcyQ9cG4oW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KGFhLmdldFBhZ2VTaXplKV0pLnBpcGUoQigoW2kscl0pPT5NYXRoLmNlaWwoaS5sZW5ndGgvcikpKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9dGhpcy5ncm91cE5hbWUkLnBpcGUodmkoaT0+bnVsbCE9PWk/dGhpcy5zdG9yZS5zZWxlY3QoaUEsaSk6anQoITApKSksdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJD10aGlzLm51bVBhZ2VzJC5waXBlKEIoaT0+aT4xKSksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JD1wbihbdGhpcy5wYWdlSW5kZXgkLHRoaXMubnVtUGFnZXMkXSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbaSxyXSk9PnswIT09ciYmKGk+PXI/dGhpcy5wYWdlSW5kZXgkLm5leHQoci0xKTppPDAmJnRoaXMucGFnZUluZGV4JC5uZXh0KDApKX0pLEIoKFtpLHJdKT0+TWF0aC5taW4oTWF0aC5tYXgoaSwwKSxyLTEpKSxRcygxKSksdGhpcy5wYWdlZEl0ZW1zJD1wbihbdGhpcy5pdGVtcyQsdGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0UGFnZVNpemUpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQsdGhpcy5pc0dyb3VwRXhwYW5kZWQkXSkucGlwZShCKChbaSxyLG8sc10pPT5pLnNsaWNlKHIqbyxyKm8rKHM/cjowKSkpKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoaF8pfW5nT25DaGFuZ2VzKGUpe2UuY2FyZElkc1dpdGhNZXRhZGF0YSYmdGhpcy5pdGVtcyQubmV4dCh0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEpLGUuZ3JvdXBOYW1lJiZ0aGlzLmdyb3VwTmFtZSQubmV4dCh0aGlzLmdyb3VwTmFtZSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW9uUGFnZUluZGV4Q2hhbmdlZChlKXt0aGlzLnBhZ2VJbmRleCQubmV4dChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkIl1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZmVhdHVyZXM6W3p0XSxkZWNsczo4LHZhcnM6MjIsY29uc3RzOltbMywiaXNHcm91cEV4cGFuZGVkIiwicGFnZUluZGV4IiwibnVtUGFnZXMiLCJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRNaW5XaWR0aCIsImNhcmRPYnNlcnZlciIsImNhcmRTdGF0ZU1hcCIsInBhZ2VJbmRleENoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCIsMCksUCgicGFnZUluZGV4Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlSW5kZXhDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLHYoKSksMiZlJiZiKCJpc0dyb3VwRXhwYW5kZWQiLFcoMSw4LGkuaXNHcm91cEV4cGFuZGVkJCkpKCJwYWdlSW5kZXgiLFcoMiwxMCxpLm5vcm1hbGl6ZWRQYWdlSW5kZXgkKSkoIm51bVBhZ2VzIixXKDMsMTIsaS5udW1QYWdlcyQpKSgic2hvd1BhZ2luYXRpb25Db250cm9scyIsVyg0LDE0LGkuc2hvd1BhZ2luYXRpb25Db250cm9scyQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVyg1LDE2LGkucGFnZWRJdGVtcyQpKSgiY2FyZE1pbldpZHRoIixXKDYsMTgsaS5jYXJkTWluV2lkdGgkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJjYXJkU3RhdGVNYXAiLFcoNywyMCxpLmNhcmRTdGF0ZU1hcCQpKX0sZGVwZW5kZW5jaWVzOltsY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFU2ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNyksRCgxKSxqKDIsIm51bWJlciIpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIixXKDIsMSxlLm51bWJlck9mQ2FyZHMpLCIgY2FyZHMiKX19ZnVuY3Rpb24gejZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBqNmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDkpfXZhciBjY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhci1jb21wb25lbnQiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyIsaXNHcm91cEV4cGFuZGVkOiJpc0dyb3VwRXhwYW5kZWQifSxvdXRwdXRzOntncm91cEV4cGFuc2lvblRvZ2dsZWQ6Imdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJ9LGRlY2xzOjksdmFyczo1LGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBhbGxvd3MgdXNlciB0byBleHBhbmQgYSB0YWcgZ3JvdXAu4pCfZmZhYTExNDcxYjg3OGE2ZGZmZTJlNjhjNmYzNzA2NGE5ZTA3NDg1M+KQnzUzODYwNTQzMjUyNzQ3NzkyNTg6RXhwYW5kIGdyb3VwYCxbWyJhcmlhLWxhYmVsIix0LDEsImdyb3VwLXRvb2xiYXIiLDMsImNsaWNrIl0sWzEsImdyb3VwLXRpdGxlLXdyYXBwZXIiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiLDMsInRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbMSwiZXhwYW5kLWdyb3VwLWljb24iXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImV4cGFuZE1vcmUiLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsic3ZnSWNvbiIsImV4cGFuZF9sZXNzXzI0cHgiXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiYnV0dG9uIiwwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5ncm91cEV4cGFuc2lvblRvZ2dsZWQuZW1pdCgpfSksZygxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxEKDMpLHYoKSxFKDQsVTZlLDMsMywic3BhbiIsMyksdigpLGcoNSwic3BhbiIsNCksRSg2LHo2ZSwxLDAsIm1hdC1pY29uIiw1KSxFKDcsajZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSx4cigidGl0bGUiLGkuZ3JvdXBOYW1lKSx4KDEpLHl0KGkuZ3JvdXBOYW1lKSx4KDEpLGIoIm5nSWYiLGkubnVtYmVyT2ZDYXJkcz4xKSx4KDIpLGIoIm5nSWYiLGkuaXNHcm91cEV4cGFuZGVkKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSxabix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7Y29sb3I6IzIxMjEyMTt0b3A6LTFweDtkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtmb250OmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNhcmQtZ3JvdXA6Zmlyc3Qtb2YtdHlwZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDowfVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNzU3NTc1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX0uZ3JvdXAtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7dGV4dC1hbGlnbjpsZWZ0fS5ncm91cC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYxNjE2MTttYXJnaW4tbGVmdDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1Y2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9anQoITEpfW5nT25Jbml0KCl7dGhpcy5pc0dyb3VwRXhwYW5kZWQkPW51bGwhPT10aGlzLmdyb3VwTmFtZT90aGlzLnN0b3JlLnNlbGVjdChpQSx0aGlzLmdyb3VwTmFtZSk6anQoITEpfW9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl7aWYobnVsbD09PXRoaXMuZ3JvdXBOYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IGV4cGFuc2lvbiBjYW5ub3QgYmUgdG9nZ2xlZCB3aGVuIGdyb3VwTmFtZSBpcyBudWxsIik7dGhpcy5zdG9yZS5kaXNwYXRjaChUUCh7dGFnR3JvdXA6dGhpcy5ncm91cE5hbWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixudW1iZXJPZkNhcmRzOiJudW1iZXJPZkNhcmRzIn0sZGVjbHM6Mix2YXJzOjUsY29uc3RzOltbMywibnVtYmVyT2ZDYXJkcyIsImlzR3JvdXBFeHBhbmRlZCIsImdyb3VwTmFtZSIsImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50IiwwKSxQKCJncm91cEV4cGFuc2lvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEV4cGFuc2lvblRvZ2dsZWQoKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigibnVtYmVyT2ZDYXJkcyIsaS5udW1iZXJPZkNhcmRzKSgiaXNHcm91cEV4cGFuZGVkIixXKDEsMyxpLmlzR3JvdXBFeHBhbmRlZCQpKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSl9LGRlcGVuZGVuY2llczpbY2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBxNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMSksTigxLCJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciIsMikoMiwibWV0cmljcy1jYXJkLWdyaWQiLDMpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoIm51bWJlck9mQ2FyZHMiLGUuaXRlbXMubGVuZ3RoKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkseCgxKSxiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixlLml0ZW1zKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX12YXIgZGNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9V259dHJhY2tCeUdyb3VwKGUsaSl7cmV0dXJuIGkuZ3JvdXBOYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRHcm91cHM6ImNhcmRHcm91cHMiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6MSx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiY2FyZC1ncm91cCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNhcmQtZ3JvdXAiXSxbMywibnVtYmVyT2ZDYXJkcyIsImdyb3VwTmFtZSJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIiwiZ3JvdXBOYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAscTZlLDMsNSwiZGl2IiwwKSwyJmUmJmIoIm5nRm9yT2YiLGkuY2FyZEdyb3VwcykoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5R3JvdXApfSxkZXBlbmRlbmNpZXM6W3luLFB5LHVjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRHcm91cHMkPXRoaXMuc3RvcmUuc2VsZWN0KHltKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxCKGk9PmtQKGkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzIl1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJjYXJkR3JvdXBzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImNhcmRHcm91cHMiLFcoMSwyLGkuY2FyZEdyb3VwcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbZGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBRNmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIGFuZCAiLGUuZ2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlLnBsdWdpblR5cGVzKSwiIHZpc3VhbGl6YXRpb24gZmlsdGVyIil9fXZhciBoY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmxpc3RGb3JtYXR0ZXI9bmV3IEludGwuTGlzdEZvcm1hdCh2b2lkIDAse3N0eWxlOiJsb25nIix0eXBlOiJkaXNqdW5jdGlvbiJ9KX1nZXRQbHVnaW5UeXBlRmlsdGVyU3RyaW5nKGUpe2xldCBpPVsuLi5lXS5tYXAocj0+e3N3aXRjaChyKXtjYXNlIFduLlNDQUxBUlM6cmV0dXJuInNjYWxhciI7Y2FzZSBXbi5JTUFHRVM6cmV0dXJuImltYWdlIjtjYXNlIFduLkhJU1RPR1JBTVM6cmV0dXJuImhpc3RvZ3JhbSI7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUGxlYXNlIGltcGxlbWVudCBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBwbHVnaW4gdHlwZTogJHtyfWApfX0pO3JldHVybiB0aGlzLmxpc3RGb3JtYXR0ZXIuZm9ybWF0KGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiXV0saW5wdXRzOntwbHVnaW5UeXBlczoicGx1Z2luVHlwZXMiLHRhZ0ZpbHRlclJlZ2V4OiJ0YWdGaWx0ZXJSZWdleCIsdGFnQ291bnRzOiJ0YWdDb3VudHMifSxkZWNsczo2LHZhcnM6NSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRCgwLCJObyBtYXRjaGVzIGZvciB0YWcgZmlsdGVyICIpLGcoMSwiY29kZSIpLEQoMiksdigpLEUoMyxRNmUsMiwxLCJzcGFuIiwwKSxEKDQpLGooNSwibnVtYmVyIikpLDImZSYmKHgoMikscWUoIi8iLGkudGFnRmlsdGVyUmVnZXgsIi8iKSx4KDEpLGIoIm5nSWYiLGkucGx1Z2luVHlwZXMuc2l6ZSkseCgxKSxxZSgiIG91dCBvZiAiLFcoNSwzLGkudGFnQ291bnRzKSwiIHRhZ3MuIikpfSxkZXBlbmRlbmNpZXM6W1hlLHZsXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5wbHVnaW5UeXBlcyQ9dGhpcy5zdG9yZS5zZWxlY3QoeHUpLHRoaXMudGFnRmlsdGVyUmVnZXgkPXRoaXMuc3RvcmUuc2VsZWN0KF9jKSx0aGlzLnRhZ0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoQihpPT5uZXcgU2V0KGkubWFwKCh7dGFnOnJ9KT0+cikpLnNpemUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInBsdWdpblR5cGVzIiwidGFnRmlsdGVyUmVnZXgiLCJ0YWdDb3VudHMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigicGx1Z2luVHlwZXMiLFcoMSwzLGkucGx1Z2luVHlwZXMkKSkoInRhZ0ZpbHRlclJlZ2V4IixXKDIsNSxpLnRhZ0ZpbHRlclJlZ2V4JCkpKCJ0YWdDb3VudHMiLFcoMyw3LGkudGFnQ291bnRzJCkpfSxkZXBlbmRlbmNpZXM6W2hjZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gSjZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiw2KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLFcoMiwxLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpLCIgY2FyZHMiKX19ZnVuY3Rpb24gJDZlKG4sdCl7MSZuJiZOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIiw3KX12YXIgbWNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0VtcHR5TWF0Y2g6ImlzRW1wdHlNYXRjaCIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEifSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJncm91cC10b29sYmFyIl0sWzEsImdyb3VwLXRleHQiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiXSxbImNsYXNzIiwiZ3JvdXAtY2FyZC1jb3VudCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ3YXJuIiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsxLCJ3YXJuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEpKDIsInNwYW4iLDIpLEQoMywiVGFncyBtYXRjaGluZyBmaWx0ZXIiKSx2KCksRSg0LEo2ZSwzLDMsInNwYW4iLDMpLHYoKSgpLEUoNSwkNmUsMSwwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNCksTig2LCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSkpLDImZSYmKHgoNCksYigibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSx4KDEpLGIoIm5nSWYiLGkuaXNFbXB0eU1hdGNoKSx4KDEpLGIoImNhcmRJZHNXaXRoTWV0YWRhdGEiLGkuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKX0sZGVwZW5kZW5jaWVzOltYZSxQeSxmY2UsdmxdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfW1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWV0cmljcy1lbXB0eS10YWctbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeHUpKSxCKChbaSxyXSk9PnIuc2l6ZT9pLmZpbHRlcihvPT5yLmhhcyhvLnBsdWdpbikpOmkpLHNyKHRoaXMuc3RvcmUuc2VsZWN0KF9jKSksQXIoMjAwKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJue2NhcmRMaXN0OmkscmVnZXg6bmV3IFJlZ0V4cChyLCJpIil9fWNhdGNoe3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om51bGx9fX0pLEhlKCh7cmVnZXg6aX0pPT5udWxsIT09aSksQigoe2NhcmRMaXN0OmkscmVnZXg6cn0pPT5pLmZpbHRlcigoe3RhZzpvfSk9PnIudGVzdChvKSkpLGRpKChpLHIpPT5pLmxlbmd0aD09PXIubGVuZ3RoJiZpLmV2ZXJ5KChvLHMpPT5vLmNhcmRJZD09PXJbc10uY2FyZElkKSksWHMoKSxWbihbXSkpLHRoaXMuaXNFbXB0eU1hdGNoJD10aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeW0pKSxCKChbaSxyXSk9PkJvb2xlYW4oci5sZW5ndGgpJiYwPT09aS5sZW5ndGgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiaXNFbXB0eU1hdGNoIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJpc0VtcHR5TWF0Y2giLFcoMSwzLGkuaXNFbXB0eU1hdGNoJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDIsNSxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W21jZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaVdlPVsicGFuZWwiXTtmdW5jdGlvbiByV2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMCwxKSxObigyKSx2KCkpLDImbil7bGV0IGU9dC5pZCxpPU0oKTtiKCJpZCIsaS5pZCkoIm5nQ2xhc3MiLGkuX2NsYXNzTGlzdCksemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGUpKX19dmFyIG9XZT1bIioiXSxzV2U9MCxhV2U9THMoY2xhc3N7fSksX2NlPW5ldyBzZSgibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMSxhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiExfX19KSxjV2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGFXZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5zaG93UGFuZWw9ITEsdGhpcy5faXNPcGVuPSExLHRoaXMuZGlzcGxheVdpdGg9bnVsbCx0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBHLHRoaXMub3BlbmVkPW5ldyBHLHRoaXMuY2xvc2VkPW5ldyBHLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBHLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrc1dlKyssdGhpcy5pbmVydEdyb3Vwcz1vPy5TQUZBUkl8fCExLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIXIuYXV0b0FjdGl2ZUZpcnN0T3B0aW9uLHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249ISFyLmF1dG9TZWxlY3RBY3RpdmVPcHRpb259Z2V0IGlzT3Blbigpe3JldHVybiB0aGlzLl9pc09wZW4mJnRoaXMuc2hvd1BhbmVsfWdldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9ufXNldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oZSl7dGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9uPVd0KGUpfWdldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb259c2V0IGF1dG9TZWxlY3RBY3RpdmVPcHRpb24oZSl7dGhpcy5fYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbj1XdChlKX1zZXQgY2xhc3NMaXN0KGUpe3RoaXMuX2NsYXNzTGlzdD1lJiZlLmxlbmd0aD9mdW5jdGlvbihuLHQ9L1xzKy8pe2xldCBlPVtdO2lmKG51bGwhPW4pe2xldCBpPUFycmF5LmlzQXJyYXkobik/bjpgJHtufWAuc3BsaXQodCk7Zm9yKGxldCByIG9mIGkpe2xldCBvPWAke3J9YC50cmltKCk7byYmZS5wdXNoKG8pfX1yZXR1cm4gZX0oZSkucmVkdWNlKChpLHIpPT4oaVtyXT0hMCxpKSx7fSk6e30sdGhpcy5fc2V0VmlzaWJpbGl0eUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IERfKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pc09wZW4mJnRoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdfHxudWxsfSl9KSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCl9X3NldFNjcm9sbFRvcChlKXt0aGlzLnBhbmVsJiYodGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD1lKX1fZ2V0U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMucGFuZWw/dGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDowfV9zZXRWaXNpYmlsaXR5KCl7dGhpcy5zaG93UGFuZWw9ISF0aGlzLm9wdGlvbnMubGVuZ3RoLHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2VtaXRTZWxlY3RFdmVudChlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9fSh0aGlzLGUpO3RoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChpKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShlKXtyZXR1cm4gdGhpcy5hcmlhTGFiZWw/bnVsbDp0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X3NldFZpc2liaWxpdHlDbGFzc2VzKGUpe2VbdGhpcy5fdmlzaWJsZUNsYXNzXT10aGlzLnNob3dQYW5lbCxlW3RoaXMuX2hpZGRlbkNsYXNzXT0hdGhpcy5zaG93UGFuZWx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoQWUpLHcoX2NlKSx3KHVpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoT2ksNyksbHQoaVdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnRlbXBsYXRlPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsYXV0b0FjdGl2ZUZpcnN0T3B0aW9uOiJhdXRvQWN0aXZlRmlyc3RPcHRpb24iLGF1dG9TZWxlY3RBY3RpdmVPcHRpb246ImF1dG9TZWxlY3RBY3RpdmVPcHRpb24iLHBhbmVsV2lkdGg6InBhbmVsV2lkdGgiLGNsYXNzTGlzdDpbImNsYXNzIiwiY2xhc3NMaXN0Il19LG91dHB1dHM6e29wdGlvblNlbGVjdGVkOiJvcHRpb25TZWxlY3RlZCIsb3BlbmVkOiJvcGVuZWQiLGNsb3NlZDoiY2xvc2VkIixvcHRpb25BY3RpdmF0ZWQ6Im9wdGlvbkFjdGl2YXRlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx2Y2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNXZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLEdDLDUpLE5pKHIsdWEsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLE5lKG89TGUoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOm9XZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1hdXRvY29tcGxldGUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxyV2UsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHljZT1uZXcgc2UoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksZFdlPXtwcm92aWRlOnljZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LHBXZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ZVMpLG11bHRpOiEwfSxoV2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PXUsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcgVGUsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9YmEoKCk9PntsZXQgaD10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGg/aC5jaGFuZ2VzLnBpcGUoVm4oaCksdmkoKCk9PnVuKC4uLmgubWFwKGY9PmYub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShIdCgxKSx2aSgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5lLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSl9bmdPbkNoYW5nZXMoZSl7ZS5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKX0pLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSExLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJih0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZHx8dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfWdldCBwYW5lbENsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIHVuKHRoaXMub3B0aW9uU2VsZWN0aW9ucyx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci50YWJPdXQucGlwZShIZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKEhlKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKTpqdCgpKS5waXBlKEIoZT0+ZSBpbnN0YW5jZW9mIHpDP2U6bnVsbCkpfWdldCBhY3RpdmVPcHRpb24oKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW06bnVsbH1fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCl7cmV0dXJuIHVuKGxpKHRoaXMuX2RvY3VtZW50LCJjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJhdXhjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJ0b3VjaGVuZCIpKS5waXBlKEhlKGU9PntsZXQgaT12YyhlKSxyPXRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsLG89dGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJmkhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJighcnx8IXIuY29udGFpbnMoaSkpJiYoIW98fCFvLmNvbnRhaW5zKGkpKSYmISF0aGlzLl9vdmVybGF5UmVmJiYhdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhpKX0pKX13cml0ZVZhbHVlKGUpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT50aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShlKSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPWV9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9TXIoZSk7aWYoMjc9PT1pJiYhciYmZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiYxMz09PWkmJnRoaXMucGFuZWxPcGVuJiYhcil0aGlzLmFjdGl2ZU9wdGlvbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih0aGlzLmF1dG9jb21wbGV0ZSl7bGV0IG89dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSxzPTM4PT09aXx8NDA9PT1pOzk9PT1pfHxzJiYhciYmdGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKGUpOnMmJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwoc3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW8pJiYodGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKSx0aGlzLmF1dG9jb21wbGV0ZS5hdXRvU2VsZWN0QWN0aXZlT3B0aW9uJiZ0aGlzLmFjdGl2ZU9wdGlvbiYmKHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb258fCh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb249dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPXRoaXMuYWN0aXZlT3B0aW9uLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlKSkpfX1faGFuZGxlSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQscj1pLnZhbHVlOyJudW1iZXIiPT09aS50eXBlJiYocj0iIj09cj9udWxsOnBhcnNlRmxvYXQocikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1yJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1yLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vbkNoYW5nZShyKSx0aGlzLl9jYW5PcGVuKCkmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lLnRhcmdldCYmdGhpcy5vcGVuUGFuZWwoKSl9X2hhbmRsZUZvY3VzKCl7dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzP3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCEwKSk6dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwfV9oYW5kbGVDbGljaygpe3RoaXMuX2Nhbk9wZW4oKSYmIXRoaXMucGFuZWxPcGVuJiZ0aGlzLm9wZW5QYW5lbCgpfV9mbG9hdExhYmVsKGU9ITEpe3RoaXMuX2Zvcm1GaWVsZCYmImF1dG8iPT09dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWwmJihlP3RoaXMuX2Zvcm1GaWVsZC5fYW5pbWF0ZUFuZExvY2tMYWJlbCgpOnRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMCl9X3Jlc2V0TGFiZWwoKXt0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWwmJih0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYXV0byIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiB1bih0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKE50KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSksbmwoMCkpKS5waXBlKHZpKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSxIdCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGhzKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgcyxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07cz0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKHMpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9V0MoZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBzPW8uX2dldEhvc3RFbGVtZW50KCksYT1rQShzLm9mZnNldFRvcCxzLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3AoYSl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIU1yKGkpfHwzOD09PWkua2V5Q29kZSYmTXIoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoUWkpLHcoeWkpLHcocHQpLHcobm4pLHcoeWNlKSx3KGlyLDgpLHcodW0sOSksdyhCdCw4KSx3KGRhKSx3KF9jZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLGVTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoV2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1c2luIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uVG91Y2hlZCgpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSwyJmUmJnplKCJhdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5wYW5lbE9wZW4mJmkuYWN0aXZlT3B0aW9uP2kuYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6aS5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsaS5hdXRvY29tcGxldGVEaXNhYmxlZHx8IWkucGFuZWxPcGVufHxudWxsPT1pLmF1dG9jb21wbGV0ZT9udWxsOmkuYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0Ym94Iil9LGV4cG9ydEFzOlsibWF0QXV0b2NvbXBsZXRlVHJpZ2dlciJdLGZlYXR1cmVzOlskdChbcFdlXSksdHRdfSksbn0pKCksck89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbZFdlXSxpbXBvcnRzOltWbyxPXyxkbixrZSxTdSxPXyxkbl19KSxufSkoKSxvTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLnBsYWNlaG9sZGVyPSIifW9uSW5wdXRLZXlVcChlKXsiRW50ZXIiPT09ZS5rZXkmJnRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGVTLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuYXV0b2NvbXBsZXRlVHJpZ2dlcj1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixtYXRBdXRvY29tcGxldGU6Im1hdEF1dG9jb21wbGV0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsInBsYWNlaG9sZGVyIiwibWF0QXV0b2NvbXBsZXRlIiwibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJ2YWx1ZSIsImtleXVwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtYXQtaWNvbiIsMCksZygxLCJpbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXRLZXlVcChvKX0pLHYoKSksMiZlJiYoeCgxKSxiKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikoIm1hdEF1dG9jb21wbGV0ZSIsaS5tYXRBdXRvY29tcGxldGUpKCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsIWkubWF0QXV0b2NvbXBsZXRlKSgidmFsdWUiLGkudmFsdWUpKX0sZGVwZW5kZW5jaWVzOltlUyxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCk7ZnVuY3Rpb24gZldlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBtV2Uobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlKSx6ZSgidGl0bGUiLGUpLHgoMSkseXQoZSl9fWZ1bmN0aW9uIGdXZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSgxLCJlbSIpLEQoMiksaigzLCJudW1iZXIiKSx2KCkoKSksMiZuKXtsZXQgZT1NKCk7eCgyKSxxZSgiYW5kICIsVygzLDEsZS5jb21wbGV0aW9ucy5sZW5ndGgtMjUpLCIgbW9yZSB0YWdzIG1hdGNoZWQiKX19dmFyIENjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9b25Db21wbGV0aW9uQWNjZXB0ZWQoZSl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKFBEZSwiXFwkJiIpfShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJ2YWxpZCIsaS5pc1JlZ2V4RmlsdGVyVmFsaWQpfSxpbnB1dHM6e3JlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIixjb21wbGV0aW9uczoiY29tcGxldGlvbnMifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjcsdmFyczo1LGNvbnN0czpbWzEsInRhZy1maWx0ZXIiXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHRhZ3MgKHJlZ2V4KSIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJjbGFzcyIsImVycm9yLWljb24iLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbMSwidGFnLW9wdGlvbnMiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWyJjbGFzcyIsIm9wdGlvbiIsMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJhbmQtbW9yZSIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMSwib3B0aW9uIiwzLCJ2YWx1ZSJdLFsxLCJhbmQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChvLnRhcmdldC52YWx1ZSl9KSx2KCksRSgyLGZXZSwxLDAsIm1hdC1pY29uIiwyKSx2KCksZygzLCJtYXQtYXV0b2NvbXBsZXRlIiwzLDQpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbXBsZXRpb25BY2NlcHRlZChvLm9wdGlvbi52YWx1ZSl9KSxFKDUsbVdlLDIsMywibWF0LW9wdGlvbiIsNSksRSg2LGdXZSw0LDMsImRpdiIsNiksdigpKSwyJmUpe2xldCByPXN0KDQpO3goMSksYigidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIscikseCgxKSxiKCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLHgoMyksYigibmdGb3JPZiIsbnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLHgoMSksYigibmdJZiIsKG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLmxlbmd0aCk+MjUpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxvTyx2Y2UsdWEsWm4sdmxdLHN0eWxlczpbIi50YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9dGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX1bX25naG9zdC0lQ09NUCVde2NvbG9yOiMyMTIxMjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICAuZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2M2MjgyODtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfSAgLnRhZy1vcHRpb25zIC5vcHRpb24sICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjM7ZGlzcGxheTotd2Via2l0LWJveDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzo4cHggMTZweH0gIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHdjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShCKGk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoaSksITB9Y2F0Y2h7cmV0dXJuITF9fSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpEKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5pLmZpbHRlcigoe3BsdWdpbjpvfSk9PiFyLnNpemV8fHIuaGFzKG8pKS5tYXAoKHt0YWc6b30pPT5vKSksQihpPT5bLi4ubmV3IFNldChpKV0pLEIoaT0+aS5zb3J0KGJ3KSksc3IodGhpcy5zdG9yZS5zZWxlY3QoX2MpKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJuW2ksbmV3IFJlZ0V4cChyLCJpIildfWNhdGNoe3JldHVybltpLG51bGxdfX0pLEhlKChbLGldKT0+bnVsbCE9PWkpLEIoKFtpLHJdKT0+aS5maWx0ZXIobz0+ci50ZXN0KG8pKSkpfW9uVGFnRmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRVAoe3RhZ0ZpbHRlcjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJjb21wbGV0aW9ucyIsIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCIsMCksUCgib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRhZ0ZpbHRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWdleEZpbHRlclZhbHVlIixXKDEsMyxpLnRhZ0ZpbHRlciQpKSgiaXNSZWdleEZpbHRlclZhbGlkIixXKDIsNSxpLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQpKSgiY29tcGxldGlvbnMiLFcoMyw3LGkuY29tcGxldGlvbnMkKSl9LGRlcGVuZGVuY2llczpbQ2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB5V2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgsIiBjYXJkcyIpfX1mdW5jdGlvbiBiV2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDkpLEQoMSwiTmV3IGNhcmQgcGlubmVkIiksdigpKSwyJm4mJnplKCJkYXRhLWlkIix0LiRpbXBsaWNpdCl9ZnVuY3Rpb24geFdlKG4sdCl7aWYoMSZuJiZOKDAsIm1ldHJpY3MtY2FyZC1ncmlkIiwxMCksMiZuKXtsZXQgZT1NKCk7YigiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixlLmNhcmRPYnNlcnZlcil9fWZ1bmN0aW9uIENXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxMSksRCgxLCJQaW4gY2FyZHMgZm9yIGEgcXVpY2sgdmlldyBhbmQgY29tcGFyaXNvbiIpLHYoKSl9dmFyIE1jZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixuZXdDYXJkUGlubmVkSWRzOiJuZXdDYXJkUGlubmVkSWRzIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbInN2Z0ljb24iLCJrZWVwXzI0cHgiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5ldy1jYXJkLXBpbm5lZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZW1wdHlQaW5uZWRWaWV3IiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwibmV3LWNhcmQtcGlubmVkIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZW1wdHktbWVzc2FnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSxOKDEsIm1hdC1pY29uIiwxKSxnKDIsInNwYW4iLDIpKDMsInNwYW4iLDMpLEQoNCwiUGlubmVkIiksdigpLEUoNSx5V2UsMiwxLCJzcGFuIiw0KSxFKDYsYldlLDIsMSwic3BhbiIsNSksdigpKCksRSg3LHhXZSwxLDIsIm1ldHJpY3MtY2FyZC1ncmlkIiw2KSxFKDgsQ1dlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNyxlbikpLDImZSl7bGV0IHI9c3QoOSk7eCg1KSxiKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLHgoMSksYigibmdGb3JPZiIsaS5uZXdDYXJkUGlubmVkSWRzKSx4KDEpLGIoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLFpuLFB5XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Z2FwOjZweH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5uZXctY2FyZC1waW5uZWRbX25nY29udGVudC0lQ09NUCVde2FuaW1hdGlvbjpwaW5uZWQtdmlldy1mYWRlLW91dCAzcyBsaW5lYXI7YmFja2dyb3VuZDojZjQ0MzM2O2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTowO3BhZGRpbmc6M3B4IDVweH1Aa2V5ZnJhbWVzIHBpbm5lZC12aWV3LWZhZGUtb3V0e2Zyb217b3BhY2l0eToxfTY2JXtvcGFjaXR5Oi45OX10b3tvcGFjaXR5OjB9fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoRUMpLnBpcGUoVm4oW10pKSx0aGlzLm5ld0NhcmRQaW5uZWRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KEVDKS5waXBlKENhKDEpLEIoaT0+aS5tYXAocj0+ci5jYXJkSWQpKSx5ZygpLEIoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQoaSkscz1uZXcgU2V0KHIpO2ZvcihsZXQgYSBvZiBzKWlmKCFvLmhhcyhhKSlyZXR1cm4gRGF0ZS5ub3coKTtyZXR1cm4gbnVsbH0pLFZuKG51bGwpLHlnKCksQigoW2kscl0pPT5udWxsPT09aSYmbnVsbD09PXI/bnVsbDpudWxsPT09cj9baV06W3JdKSxIZShpPT5udWxsIT09aSksQihpPT5baVswXV0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJuZXdDYXJkUGlubmVkSWRzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDEsMyxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoIm5ld0NhcmRQaW5uZWRJZHMiLFcoMiw1LGkubmV3Q2FyZFBpbm5lZElkcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbTWNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBTV2Uobix0KXsxJm4mJk4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMyksMiZuJiZiKCJjYXJkT2JzZXJ2ZXIiLE0oKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIEVXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNyksTigxLCJtYXQtc3Bpbm5lciIsMTgpLHYoKSl9dmFyIFRXZT1mdW5jdGlvbihuKXtyZXR1cm57InNsaWRlLW91dC1tZW51LWV4cGFuZGVkIjpufX07ZnVuY3Rpb24gRFdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5KSxOKDEsIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiKSx2KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nQ2xhc3MiLEhuKDEsVFdlLGUuc2xpZGVPdXRNZW51T3BlbikpfX1mdW5jdGlvbiBBV2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIwKSgxLCJkaXYiLDIxKSgyLCJoMiIsMjIpLEQoMywiU2V0dGluZ3MiKSx2KCksZyg0LCJidXR0b24iLDIzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQuZW1pdCgpKX0pLE4oNSwibWF0LWljb24iLDI0KSx2KCkoKSxOKDYsIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiKSx2KCl9fXZhciBJV2U9ZnVuY3Rpb24obil7cmV0dXJue2NoZWNrZWQ6biwic2V0dGluZ3MtYnV0dG9uIjohMH19LFBXZT1uZXcgc2UoIkN1c3RvbWl6YWJsZSBTaGFyZSBCdXR0b24iKSxFY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuY3VzdG9tU2hhcmVCdXR0b249aSx0aGlzLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkPW5ldyBHLHRoaXMub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZD1uZXcgRyx0aGlzLm9uUGx1Z2luVHlwZVRvZ2dsZWQ9bmV3IEcsdGhpcy5vblBsdWdpblR5cGVBbGxUb2dnbGVkPW5ldyBHLHRoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeHcodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIjYwMHB4IDBweCA2MDBweCAwcHgiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQV2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e3Nob3dGaWx0ZXJlZFZpZXc6InNob3dGaWx0ZXJlZFZpZXciLGlzU2lkZXBhbmVPcGVuOiJpc1NpZGVwYW5lT3BlbiIsZmlsdGVyZWRQbHVnaW5UeXBlczoiZmlsdGVyZWRQbHVnaW5UeXBlcyIsaW5pdGlhbFRhZ3NMb2FkaW5nOiJpbml0aWFsVGFnc0xvYWRpbmciLHNsaWRlT3V0TWVudU9wZW46InNsaWRlT3V0TWVudU9wZW4ifSxvdXRwdXRzOntvblNldHRpbmdzQnV0dG9uQ2xpY2tlZDoib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ6Im9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLG9uUGx1Z2luVHlwZVRvZ2dsZWQ6Im9uUGx1Z2luVHlwZVRvZ2dsZWQiLG9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQ6Im9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQifSxkZWNsczoyNCx2YXJzOjIzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBvbiBhIHRvb2xiYXIgYnV0dG9uIHRvIHRvZ2dsZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQn2QzNTE2ZGI2YmJlNjg2MGE1NWJlYWI2NmU0OTY5ZGFjNjI1YjhkNzLikJ83NjU5Mjg1NDQ1NTgwODM4OTI1OlRvZ2dsZSBzZXR0aW5ncyBzaWRlIHBhbmVgLGU9JGxvY2FsaXplYDpMYWJlbCBvbiBhIGJ1dHRvbiB0byBjbG9zZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQnzA0NTIxZGMwYjZhNjVjZjVjMzgyOTQ0YzlhOGI0Yjg0NGEzZTk1OTjikJ84MTU2NzY2OTk3NzQ3MTY1ODcxOkNsb3NlIHNpZGUgcGFuZWAsW1sxLCJ0b29sYmFyIl0sWyJtdWx0aXBsZSIsIiIsImFwcGVhcmFuY2UiLCJzdGFuZGFyZCIsMSwiZmlsdGVyLXZpZXciXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiYWxsIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsInNjYWxhcnMiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaW1hZ2UiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaGlzdG9ncmFtIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWzMsImN1c3RvbWl6YWJsZUNvbXBvbmVudCJdLFsxLCJyaWdodC1pdGVtcyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il0sWzEsInNwbGl0LWNvbnRlbnQiXSxbImNka1Njcm9sbGFibGUiLCIiXSxbMywiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIl0sWzMsImNhcmRPYnNlcnZlciJdLFsiY2xhc3MiLCJsb2FkaW5nLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiw0LCJuZ0lmIl0sWzEsImxvYWRpbmctY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjM2Il0sWzEsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIl0sWzEsInNpZGViYXIiXSxbMSwiaGVhZGVyIl0sWzEsInRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksTigxLCJtZXRyaWNzLXRhZy1maWx0ZXIiKSxnKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSgzLCJidXR0b24iLDIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSksRCg0LCIgQWxsICIpLHYoKSxnKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5TQ0FMQVJTKX0pLEQoNiwiIFNjYWxhcnMgIiksdigpLGcoNywiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLklNQUdFUyl9KSxEKDgsIiBJbWFnZSAiKSx2KCksZyg5LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSxEKDEwLCIgSGlzdG9ncmFtICIpLHYoKSgpLE4oMTEsInRiLWN1c3RvbWl6YXRpb24iLDYpLGcoMTIsImRpdiIsNykoMTMsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSksTigxNCwibWF0LWljb24iLDkpLEQoMTUsIiBTZXR0aW5ncyAiKSx2KCkoKSgpLGcoMTYsImRpdiIsMTApKDE3LCJkaXYiLDExKSxFKDE4LFNXZSwxLDEsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsMTIpLE4oMTksIm1ldHJpY3MtcGlubmVkLXZpZXciLDEzKSxFKDIwLEVXZSwyLDAsImRpdiIsMTQpLE4oMjEsIm1ldHJpY3MtY2FyZC1ncm91cHMiLDEzKSx2KCksRSgyMixEV2UsMiwzLCJkaXYiLDE1KSxFKDIzLEFXZSw3LDAsImRpdiIsMTYpLHYoKSksMiZlJiYoeCgzKSx6ZSgiYXJpYS1jaGVja2VkIiwwPT09aS5maWx0ZXJlZFBsdWdpblR5cGVzLnNpemUpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuU0NBTEFSUykpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuSU1BR0VTKSkseCgyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKSkseCgyKSxiKCJjdXN0b21pemFibGVDb21wb25lbnQiLGkuY3VzdG9tU2hhcmVCdXR0b24pLHgoMiksYigibmdDbGFzcyIsSG4oMjEsSVdlLGkuaXNTaWRlcGFuZU9wZW4pKSx6ZSgiYXJpYS1wcmVzc2VkIixpLmlzU2lkZXBhbmVPcGVuKSx4KDQpLGF0KCJtYWluIiwhMCkoImZpbHRlci12aWV3IixpLnNob3dGaWx0ZXJlZFZpZXcpLHgoMSksYigibmdJZiIsaS5zaG93RmlsdGVyZWRWaWV3KSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaW5pdGlhbFRhZ3NMb2FkaW5nKSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pLHgoMSksYigibmdJZiIsaS5pc1NpZGVwYW5lT3BlbikpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLFBuZSxZcCwkbiwkNSxabix2byxWbmUsam5lLHBjZSxnY2Usd2NlLFNjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy10YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAxMDBweH0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO21hcmdpbi1sZWZ0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweDttaW4td2lkdGg6dW5zZXQ7cGFkZGluZzowIDEycHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9LnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OmNhbGMoMTAwJSAtIDQ5cHgpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjUwcHg7dG9wOjQ5cHg7dHJhbnNpdGlvbjphbGwgLjc1cyBlYXNlO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjIwMHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LnNsaWRlLW91dC1tZW51LWV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtyaWdodDoyNTBweDt2aXNpYmlsaXR5OnZpc2libGV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxUY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc1NpZGVwYW5lT3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QockEpLHRoaXMuaW5pdGlhbFRhZ3NMb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdChTQykucGlwZShZeShpPT5udWxsPT09aS5sYXN0TG9hZGVkVGltZUluTXMsITApLEIoaT0+aS5zdGF0ZT09PUVlLkxPQURJTkcmJm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcykpLHRoaXMuc2hvd0ZpbHRlcmVkVmlldyQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLnBpcGUoQihpPT5pLmxlbmd0aD4wKSksdGhpcy5maWx0ZXJlZFBsdWdpblR5cGVzJD10aGlzLnN0b3JlLnNlbGVjdCh4dSksdGhpcy5pc1NsaWRlb3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KG9BKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZVAoKSl9b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJEkoKSl9b25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKERQKHtwbHVnaW46ZX0pKX1vblNob3dBbGxQbHVnaW5zKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChBUCgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3Il1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJpbml0aWFsVGFnc0xvYWRpbmciLCJmaWx0ZXJlZFBsdWdpblR5cGVzIiwic2xpZGVPdXRNZW51T3BlbiIsIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsIm9uUGx1Z2luVHlwZVRvZ2dsZWQiLCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiLDApLFAoIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSgib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl9KSgib25QbHVnaW5UeXBlVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChvKX0pKCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2hvd0FsbFBsdWdpbnMoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoInNob3dGaWx0ZXJlZFZpZXciLFcoMSw1LGkuc2hvd0ZpbHRlcmVkVmlldyQpKSgiaXNTaWRlcGFuZU9wZW4iLFcoMiw3LGkuaXNTaWRlcGFuZU9wZW4kKSkoImluaXRpYWxUYWdzTG9hZGluZyIsVygzLDksaS5pbml0aWFsVGFnc0xvYWRpbmckKSkoImZpbHRlcmVkUGx1Z2luVHlwZXMiLFcoNCwxMSxpLmZpbHRlcmVkUGx1Z2luVHlwZXMkKSkoInNsaWRlT3V0TWVudU9wZW4iLFcoNSwxMyxpLmlzU2xpZGVvdXRNZW51T3BlbiQpKX0sZGVwZW5kZW5jaWVzOltFY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEdzPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ0hFQ0tCT1g9ImNoZWNrYm94IixuLlJVTl9OQU1FPSJydW5fbmFtZSIsbi5FWFBFUklNRU5UX05BTUU9ImV4cGVyaW1lbnRfbmFtZSIsbi5SVU5fQ09MT1I9InJ1bl9jb2xvciJ9KEdzfHwoR3M9e30pKSxHcykpKCksTmg9e307U08oTmgse2dldEV4cGVyaW1lbnRzSHBhcmFtc0FuZE1ldHJpY3NTcGVjczooKT0+eldlLGdldEhwYXJhbUZpbHRlck1hcDooKT0+TldlLGdldEhwYXJhbUZpbHRlck1hcEZyb21FeHBlcmltZW50SWRzOigpPT5MV2UsZ2V0TWV0cmljRmlsdGVyTWFwOigpPT5IV2UsZ2V0TWV0cmljRmlsdGVyTWFwRnJvbUV4cGVyaW1lbnRJZHM6KCk9PlVXZX0pO3ZhciBxZD1QcihSRCk7ZnVuY3Rpb24gQWNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLmhwYXJhbS5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIHhDKGUpfXZhciBrV2U9WShxZCxBY2UpO2Z1bmN0aW9uIEljZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5ocGFyYW1zPz9bXV0pfXZhciBOV2U9WShxZCxrV2UsSWNlKTtmdW5jdGlvbiBMV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+QWNlKHQsbikpfShuKSwodCxlKT0+SWNlKHQsZSxuKSl9ZnVuY3Rpb24gUGNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLm1ldHJpYy5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIFBEKGUpfXZhciBCV2U9WShxZCxQY2UpO2Z1bmN0aW9uIFJjZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5tZXRyaWNzPz9bXV0pfXZhciBIV2U9WShxZCxCV2UsUmNlKTtmdW5jdGlvbiBVV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+UGNlKHQsbikpfShuKSwodCxlKT0+UmNlKHQsZSxuKSl9dmFyIHpXZT1ZKHFkLChuLHQpPT5mdW5jdGlvbiguLi5uKXtsZXQgdD1uZXcgTWFwLGU9bmV3IE1hcCxpPW5ldyBNYXAscj1uZXcgTWFwLG89W107Zm9yKGxldCBzIG9mIG4pe2ZvcihsZXQgYSBvZiBzLmhwYXJhbXMpaWYoZS5oYXMoYS5uYW1lKXx8ZS5zZXQoYS5uYW1lLG5ldyBTZXQpLGUuZ2V0KGEubmFtZSkuYWRkKGEuZGlzcGxheU5hbWUpLHQuaGFzKGEubmFtZSkpe2xldCBsPXQuZ2V0KGEubmFtZSksYz1hO2lmKGwudHlwZSE9PWMudHlwZSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgdHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wudHlwZX0gdnMuICR7Yy50eXBlfWApLGwuZG9tYWluLnR5cGU9PT1Lbi5JTlRFUlZBTCYmYy5kb21haW4udHlwZT09PUtuLklOVEVSVkFMKShsLmRvbWFpbi5taW5WYWx1ZSE9PWMuZG9tYWluLm1pblZhbHVlfHxsLmRvbWFpbi5tYXhWYWx1ZSE9PWMuZG9tYWluLm1heFZhbHVlKSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC5kb21haW59IHZzLiAke2MuZG9tYWlufWApO2Vsc2UgaWYobC5kb21haW4udHlwZT09PUtuLkRJU0NSRVRFJiZjLmRvbWFpbi50eXBlPT09S24uRElTQ1JFVEUpe2xldCB1PW5ldyBTZXQoWy4uLmwuZG9tYWluLnZhbHVlcywuLi5jLmRvbWFpbi52YWx1ZXNdKTsobC5kb21haW4udmFsdWVzLmxlbmd0aCE9PWMuZG9tYWluLnZhbHVlcy5sZW5ndGh8fGwuZG9tYWluLnZhbHVlcy5sZW5ndGghPT11LnNpemUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSBvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSB0LnNldChhLm5hbWUsey4uLmF9KTtmb3IobGV0IGEgb2Ygcy5tZXRyaWNzKWlmKHIuaGFzKGEudGFnKXx8ci5zZXQoYS50YWcsbmV3IFNldCksci5nZXQoYS50YWcpLmFkZChhLmRpc3BsYXlOYW1lKSxpLmhhcyhhLnRhZykpe2xldCBsPWkuZ2V0KGEudGFnKSxjPWE7bC5kYXRhc2V0VHlwZSE9PWMuZGF0YXNldFR5cGUmJm8ucHVzaChgTWV0cmljLCAke2MudGFnfSwgZGF0YXNldFR5cGVzIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRhdGFzZXRUeXBlfSB2cy4gJHtjLmRhdGFzZXRUeXBlfWApfWVsc2UgaS5zZXQoYS50YWcsey4uLmF9KX1pZihvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZXJyb3I6XG4ke28uam9pbigiXG4iKX1gKTtyZXR1cm57aHBhcmFtczpbLi4udF0ubWFwKChbcyxhXSk9Pih7Li4uYSxkaXNwbGF5TmFtZTpbLi4uZS5nZXQocyldLmpvaW4oIiBvciAiKX0pKSxtZXRyaWNzOlsuLi5pXS5tYXAoKFtzLGFdKT0+KHsuLi5hLGRpc3BsYXlOYW1lOlsuLi5yLmdldChzKV0uam9pbigiIG9yICIpfSkpfX0oLi4udC5leHBlcmltZW50SWRzLm1hcChlPT57bGV0IGk9bi5zcGVjc1tlXTtyZXR1cm4gaT97aHBhcmFtczppLmhwYXJhbS5zcGVjcyxtZXRyaWNzOmkubWV0cmljLnNwZWNzfTpudWxsfSkuZmlsdGVyKEJvb2xlYW4pKSksaldlPVsidG9vbHRpcCJdLE9jZT0idG9vbHRpcC1wYW5lbCIsa2NlPU5zKHtwYXNzaXZlOiEwfSksRmNlPW5ldyBzZSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksWVdlPXtwcm92aWRlOkZjZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oe3Njcm9sbFRocm90dGxlOjIwfSl9fSxYV2U9bmV3IHNlKCJtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dEZWxheTowLGhpZGVEZWxheTowLHRvdWNoZW5kSGlkZURlbGF5OjE1MDB9fX0pLEtXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX3Njcm9sbERpc3BhdGNoZXI9cix0aGlzLl92aWV3Q29udGFpbmVyUmVmPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZGlyPWQsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cCx0aGlzLl9wb3NpdGlvbj0iYmVsb3ciLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5fc2hvd0RlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLnNob3dEZWxheSx0aGlzLl9oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgVGUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9dSx0aGlzLl9kb2N1bWVudD1oLHAmJihwLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1wLnBvc2l0aW9uKSxwLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9cC50b3VjaEdlc3R1cmVzKSksZC5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKX0pfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7ZSE9PXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249ZSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZiksdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5zaG93KDApLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5oaWRlKDApOnRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKX1nZXQgc2hvd0RlbGF5KCl7cmV0dXJuIHRoaXMuX3Nob3dEZWxheX1zZXQgc2hvd0RlbGF5KGUpe3RoaXMuX3Nob3dEZWxheT1QaShlKX1nZXQgaGlkZURlbGF5KCl7cmV0dXJuIHRoaXMuX2hpZGVEZWxheX1zZXQgaGlkZURlbGF5KGUpe3RoaXMuX2hpZGVEZWxheT1QaShlKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5KX1nZXQgbWVzc2FnZSgpe3JldHVybiB0aGlzLl9tZXNzYWdlfXNldCBtZXNzYWdlKGUpe3RoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMuX21lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9tZXNzYWdlPW51bGwhPWU/U3RyaW5nKGUpLnRyaW0oKToiIiwhdGhpcy5fbWVzc2FnZSYmdGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgwKToodGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2FyaWFEZXNjcmliZXIuZGVzY3JpYmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMubWVzc2FnZSwidG9vbHRpcCIpfSl9KSl9Z2V0IHRvb2x0aXBDbGFzcygpe3JldHVybiB0aGlzLl90b29sdGlwQ2xhc3N9c2V0IHRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwQ2xhc3M9ZSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2U/ImtleWJvYXJkIj09PWUmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuc2hvdygpKTp0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMuZm9yRWFjaCgoW2kscl0pPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscixrY2UpfSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGg9MCx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oZSx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcoZSl9c2hvdyhlPXRoaXMuc2hvd0RlbGF5KXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHx0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKTtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KCk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IENjKHRoaXMuX3Rvb2x0aXBDb21wb25lbnQsdGhpcy5fdmlld0NvbnRhaW5lclJlZik7bGV0IHI9dGhpcy5fdG9vbHRpcEluc3RhbmNlPWkuYXR0YWNoKHRoaXMuX3BvcnRhbCkuaW5zdGFuY2U7ci5fdHJpZ2dlckVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHIuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5LHIuYWZ0ZXJIaWRkZW4oKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksci5zaG93KGUpfWhpZGUoZT10aGlzLmhpZGVEZWxheSl7bGV0IGk9dGhpcy5fdG9vbHRpcEluc3RhbmNlO2kmJihpLmlzVmlzaWJsZSgpP2kuaGlkZShlKTooaS5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9kZXRhY2goKSkpfXRvZ2dsZSgpe3RoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX1faXNUb29sdGlwVmlzaWJsZSgpe3JldHVybiEhdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCl9X2NyZWF0ZU92ZXJsYXkoKXtpZih0aGlzLl9vdmVybGF5UmVmKXJldHVybiB0aGlzLl9vdmVybGF5UmVmO2xldCBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLGk9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKGAuJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcGApLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLl92aWV3cG9ydE1hcmdpbikud2l0aFNjcm9sbGFibGVDb250YWluZXJzKGUpO3JldHVybiBpLnBvc2l0aW9uQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5fdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3Moci5jb25uZWN0aW9uUGFpciksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZyLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCkmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuaGlkZSgwKSl9KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6aSxwYW5lbENsYXNzOmAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX1gLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2RldGFjaCgpKSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpJiYyNz09PXIua2V5Q29kZSYmIU1yKHIpJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKSl9KSx0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZVRvb2x0aXBJbnRlcmFjdGl2aXR5JiZ0aGlzLl9vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXAtcGFuZWwtbm9uLWludGVyYWN0aXZlYCksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbihlKXtsZXQgaT1lLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kscj10aGlzLl9nZXRPcmlnaW4oKSxvPXRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpO2kud2l0aFBvc2l0aW9ucyhbdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLm1haW4sLi4uby5tYWlufSksdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLmZhbGxiYWNrLC4uLm8uZmFsbGJhY2t9KV0pfV9hZGRPZmZzZXQoZSl7cmV0dXJuIGV9X2dldE9yaWdpbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aXx8ImJlbG93Ij09aT9yPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09aT8idG9wIjoiYm90dG9tIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm9yaWdpblgsci5vcmlnaW5ZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvcmlnaW5YOm8sb3JpZ2luWTpzfX19X2dldE92ZXJsYXlQb3NpdGlvbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToiYm90dG9tIn06ImJlbG93Ij09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToidG9wIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e292ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImNlbnRlciJ9KTtsZXR7eDpvLHk6c309dGhpcy5faW52ZXJ0UG9zaXRpb24oci5vdmVybGF5WCxyLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOnN9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKEh0KDEpLG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpfV9zZXRUb29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCkpfV9pbnZlcnRQb3NpdGlvbihlLGkpe3JldHVybiJhYm92ZSI9PT10aGlzLnBvc2l0aW9ufHwiYmVsb3ciPT09dGhpcy5wb3NpdGlvbj8idG9wIj09PWk/aT0iYm90dG9tIjoiYm90dG9tIj09PWkmJihpPSJ0b3AiKToiZW5kIj09PWU/ZT0ic3RhcnQiOiJzdGFydCI9PT1lJiYoZT0iZW5kIikse3g6ZSx5Oml9fV91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhlKXtsZXQgcyx7b3ZlcmxheVk6aSxvcmlnaW5YOnIsb3JpZ2luWTpvfT1lO2lmKHM9ImNlbnRlciI9PT1pP3RoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ImVuZCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJzdGFydCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJib3R0b20iPT09aSYmInRvcCI9PT1vPyJhYm92ZSI6ImJlbG93IixzIT09dGhpcy5fY3VycmVudFBvc2l0aW9uKXtsZXQgYT10aGlzLl9vdmVybGF5UmVmO2lmKGEpe2xldCBsPWAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX0tYDthLnJlbW92ZVBhbmVsQ2xhc3MobCt0aGlzLl9jdXJyZW50UG9zaXRpb24pLGEuYWRkUGFuZWxDbGFzcyhsK3MpfXRoaXMuX2N1cnJlbnRQb3NpdGlvbj1zfX1fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpe3RoaXMuX2Rpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHwhdGhpcy5fdmlld0luaXRpYWxpemVkfHx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aHx8KHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpP3RoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbIm1vdXNlZW50ZXIiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksdGhpcy5zaG93KCl9XSk6Im9mZiIhPT10aGlzLnRvdWNoR2VzdHVyZXMmJih0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbInRvdWNoc3RhcnQiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl90b3VjaHN0YXJ0VGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLnNob3coKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2xldCBlPVtdO2lmKHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpKWUucHVzaChbIm1vdXNlbGVhdmUiLGk9PntsZXQgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHwhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocikpJiZ0aGlzLmhpZGUoKX1dLFsid2hlZWwiLGk9PnRoaXMuX3doZWVsTGlzdGVuZXIoaSldKTtlbHNlIGlmKCJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzKXt0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO2xldCBpPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTtlLnB1c2goWyJ0b3VjaGVuZCIsaV0sWyJ0b3VjaGNhbmNlbCIsaV0pfXRoaXMuX2FkZExpc3RlbmVycyhlKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZSl9X2FkZExpc3RlbmVycyhlKXtlLmZvckVhY2goKFtpLHJdKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGkscixrY2UpfSl9X3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpe3JldHVybiF0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9wbGF0Zm9ybS5BTkRST0lEfV93aGVlbExpc3RlbmVyKGUpe2lmKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpIT09ciYmIXIuY29udGFpbnMoaSkmJnRoaXMuaGlkZSgpfX1fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKXtsZXQgZT10aGlzLnRvdWNoR2VzdHVyZXM7aWYoIm9mZiIhPT1lKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQscj1pLnN0eWxlOygib24iPT09ZXx8IklOUFVUIiE9PWkubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1pLm5vZGVOYW1lKSYmKHIudXNlclNlbGVjdD1yLm1zVXNlclNlbGVjdD1yLndlYmtpdFVzZXJTZWxlY3Q9ci5Nb3pVc2VyU2VsZWN0PSJub25lIiksKCJvbiI9PT1lfHwhaS5kcmFnZ2FibGUpJiYoci53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLHIudG91Y2hBY3Rpb249Im5vbmUiLHIud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7cG9zaXRpb246WyJtYXRUb29sdGlwUG9zaXRpb24iLCJwb3NpdGlvbiJdLGRpc2FibGVkOlsibWF0VG9vbHRpcERpc2FibGVkIiwiZGlzYWJsZWQiXSxzaG93RGVsYXk6WyJtYXRUb29sdGlwU2hvd0RlbGF5Iiwic2hvd0RlbGF5Il0saGlkZURlbGF5OlsibWF0VG9vbHRpcEhpZGVEZWxheSIsImhpZGVEZWxheSJdLHRvdWNoR2VzdHVyZXM6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsInRvdWNoR2VzdHVyZXMiXSxtZXNzYWdlOlsibWF0VG9vbHRpcCIsIm1lc3NhZ2UiXSx0b29sdGlwQ2xhc3M6WyJtYXRUb29sdGlwQ2xhc3MiLCJ0b29sdGlwQ2xhc3MiXX19KSxufSkoKSxOY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEtXZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7c3VwZXIoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpLHRoaXMuX3Rvb2x0aXBDb21wb25lbnQ9SldlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KGltKSx3KHlpKSx3KHB0KSx3KHVpKSx3KElBKSx3KHpyKSx3KEZjZSksdyhpciw4KSx3KFhXZSw4KSx3KEJ0KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRvb2x0aXAiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLFpXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgVGUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IHM9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpufSksbn0pKCksSldlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaV2V7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWksdGhpcy5faXNIYW5kc2V0PXRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKCIobWF4LXdpZHRoOiA1OTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIpLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC10b29sdGlwLXNob3ciLHRoaXMuX2hpZGVBbmltYXRpb249Im1hdC10b29sdGlwLWhpZGUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSx3KG5tKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbHRpcC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChqV2UsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fdG9vbHRpcD1yLmZpcnN0KX19LGhvc3RBdHRyczpbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJtb3VzZWxlYXZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlTW91c2VMZWF2ZShvKX0pLDImZSYmT3QoInpvb20iLGkuaXNWaXNpYmxlKCk/MTpudWxsKX0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtdG9vbHRpcCIsMywibmdDbGFzcyIsImFuaW1hdGlvbmVuZCJdLFsidG9vbHRpcCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoImFuaW1hdGlvbmVuZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUFuaW1hdGlvbkVuZChvKX0pLGooMiwiYXN5bmMiKSxEKDMpLHYoKSksMiZlKXtsZXQgcjthdCgibWF0LXRvb2x0aXAtaGFuZHNldCIsbnVsbD09KHI9VygyLDQsaS5faXNIYW5kc2V0KSk/bnVsbDpyLm1hdGNoZXMpLGIoIm5nQ2xhc3MiLGkudG9vbHRpcENsYXNzKSx4KDMpLHl0KGkubWVzc2FnZSl9fSxkZXBlbmRlbmNpZXM6W1BuLGZ0XSxzdHlsZXM6WyIubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC10b29sdGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle2FuaW1hdGlvbjpub25lO3RyYW5zZm9ybTpzY2FsZSgxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbHRpcHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2x0aXAtaGFuZHNldHttYXJnaW46MjRweDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9Lm1hdC10b29sdGlwLXBhbmVsLW5vbi1pbnRlcmFjdGl2ZXtwb2ludGVyLWV2ZW50czpub25lfUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDApfTUwJXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpzY2FsZSgwLjk5KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtaGlkZXswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm1hdC10b29sdGlwLXNob3d7YW5pbWF0aW9uOm1hdC10b29sdGlwLXNob3cgMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Lm1hdC10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC10b29sdGlwLWhpZGUgMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTGNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1lXZV0saW1wb3J0czpbUF8sa2UsVm8sZG4sZG4sU3VdfSksbn0pKCk7ZnVuY3Rpb24gZTdlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwxOSksRCgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigidmFsdWUiLGUpLHgoMSkscWUoIiAiLGUsIiAiKX19ZnVuY3Rpb24gdDdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDE2KSgxLCJtYXQtc2VsZWN0IiwxNyksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5fY2hhbmdlUGFnZVNpemUoci52YWx1ZSkpfSksRSgyLGU3ZSwyLDIsIm1hdC1vcHRpb24iLDE4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7YigiYXBwZWFyYW5jZSIsZS5fZm9ybUZpZWxkQXBwZWFyYW5jZSkoImNvbG9yIixlLmNvbG9yKSx4KDEpLGIoInZhbHVlIixlLnBhZ2VTaXplKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJwYW5lbENsYXNzIixlLnNlbGVjdENvbmZpZy5wYW5lbENsYXNzfHwiIikoImRpc2FibGVPcHRpb25DZW50ZXJpbmciLGUuc2VsZWN0Q29uZmlnLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpKCJhcmlhLWxhYmVsIixlLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsKSx4KDEpLGIoIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIG43ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHl0KGUucGFnZVNpemUpfX1mdW5jdGlvbiBpN2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLEUoMyx0N2UsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLEUoNCxuN2UsMiwxLCJkaXYiLDE1KSx2KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSx4KDEpLGIoIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSkseCgxKSxiKCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gcjdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiwyMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5maXJzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDIyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKX19ZnVuY3Rpb24gbzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2puKCksU2EoKSxnKDAsImJ1dHRvbiIsMjMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkubGFzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDI0KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpfX1Icigic3RhdGUiLFtFaSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkifSkpLEVpKCJ2aXNpYmxlIixybih7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSksSWkoIiogPT4gdmlzaWJsZSIsVmkoIjIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixPZihbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIixvZmZzZXQ6MH0pLHJuKHtvcGFjaXR5Oi41LHRyYW5zZm9ybToic2NhbGUoMC45OSkiLG9mZnNldDouNX0pLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSIsb2Zmc2V0OjF9KV0pKSksSWkoIiogPT4gaGlkZGVuIixWaSgiMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSk7dmFyIG9nPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IFRlLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9KGUsaSxyKT0+e2lmKDA9PXJ8fDA9PWkpcmV0dXJuYDAgb2YgJHtyfWA7bGV0IG89ZSppO3JldHVybmAke28rMX0gXHUyMDEzICR7bzwocj1NYXRoLm1heChyLDApKT9NYXRoLm1pbihvK2kscik6bytpfSBvZiAke3J9YH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGE3ZT17cHJvdmlkZTpvZyxkZXBzOltbbmV3IE9vLG5ldyBUYSxvZ11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBvZ319LGM3ZT1uZXcgc2UoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksdTdlPWdvKE9BKGNsYXNze30pKSxkN2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHU3ZXtjb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRyx0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoUGkoZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9UGkoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChQaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5QaShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9V3QoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1XdChlKX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4KzEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1wcmV2aW91c1BhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5wYWdlSW5kZXgtMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWZpcnN0UGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLmdldE51bWJlck9mUGFnZXMoKS0xLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4Pj0xJiYwIT10aGlzLnBhZ2VTaXplfWhhc05leHRQYWdlKCl7bGV0IGU9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMTtyZXR1cm4gdGhpcy5wYWdlSW5kZXg8ZSYmMCE9dGhpcy5wYWdlU2l6ZX1nZXROdW1iZXJPZlBhZ2VzKCl7cmV0dXJuIHRoaXMucGFnZVNpemU/TWF0aC5jZWlsKHRoaXMubGVuZ3RoL3RoaXMucGFnZVNpemUpOjB9X2NoYW5nZVBhZ2VTaXplKGUpe2xldCByPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS9lKXx8MCx0aGlzLnBhZ2VTaXplPWUsdGhpcy5fZW1pdFBhZ2VFdmVudChyKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7IXRoaXMuX2luaXRpYWxpemVkfHwodGhpcy5wYWdlU2l6ZXx8KHRoaXMuX3BhZ2VTaXplPTAhPXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aD90aGlzLnBhZ2VTaXplT3B0aW9uc1swXTo1MCksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zPXRoaXMucGFnZVNpemVPcHRpb25zLnNsaWNlKCksLTE9PT10aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuaW5kZXhPZih0aGlzLnBhZ2VTaXplKSYmdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5wYWdlU2l6ZSksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGUsaSk9PmUtaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9lbWl0UGFnZUV2ZW50KGUpe3RoaXMucGFnZS5lbWl0KHtwcmV2aW91c1BhZ2VJbmRleDplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLGxlbmd0aDp0aGlzLmxlbmd0aH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7SmwoKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2NvbG9yOiJjb2xvciIscGFnZUluZGV4OiJwYWdlSW5kZXgiLGxlbmd0aDoibGVuZ3RoIixwYWdlU2l6ZToicGFnZVNpemUiLHBhZ2VTaXplT3B0aW9uczoicGFnZVNpemVPcHRpb25zIixoaWRlUGFnZVNpemU6ImhpZGVQYWdlU2l6ZSIsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6InNob3dGaXJzdExhc3RCdXR0b25zIixzZWxlY3RDb25maWc6InNlbGVjdENvbmZpZyJ9LG91dHB1dHM6e3BhZ2U6InBhZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksc089KCgpPT57Y2xhc3MgbiBleHRlbmRzIGQ3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpLHImJm51bGwhPXIuZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9ci5mb3JtRmllbGRBcHBlYXJhbmNlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhvZyksdyhubiksdyhjN2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwicGFuZWxDbGFzcyIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJhcmlhLWxhYmVsIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRSgyLGk3ZSw1LDMsImRpdiIsMiksZygzLCJkaXYiLDMpKDQsImRpdiIsNCksRCg1KSx2KCksRSg2LHI3ZSwzLDUsImJ1dHRvbiIsNSksZyg3LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksam4oKSxnKDgsInN2ZyIsNyksTig5LCJwYXRoIiw4KSx2KCkoKSxTYSgpLGcoMTAsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLGpuKCksZygxMSwic3ZnIiw3KSxOKDEyLCJwYXRoIiwxMCksdigpKCksRSgxMyxvN2UsMyw1LCJidXR0b24iLDExKSx2KCkoKSgpKSwyJmUmJih4KDIpLGIoIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSkseCgzKSxxZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIikseCgxKSxiKCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSx4KDEpLGIoIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksemUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLHgoMyksYigibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSx6ZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSx4KDMpLGIoIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixEdSxKcCx1YSxOY2VdLHN0eWxlczpbIi5tYXQtcGFnaW5hdG9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzowIDhweDtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlO3dpZHRoOjEwMCV9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbHttYXJnaW46MCA0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdHttYXJnaW46NnB4IDRweCAwIDRweDt3aWR0aDo1NnB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5le3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGx7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25ze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1wYWdpbmF0b3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyOHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcGFnaW5hdG9yLWljb257ZmlsbDpDYW52YXNUZXh0fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEJjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthN2VdLGltcG9ydHM6W2tlLFJpLElsLExjZSxkbl19KSxufSkoKSxoN2U9WyJtYXQtc29ydC1oZWFkZXIiLCIiXTtmdW5jdGlvbiBmN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDMpLFAoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfSkoIkBhcnJvd1Bvc2l0aW9uLmRvbmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSl9KSxOKDEsImRpdiIsNCksZygyLCJkaXYiLDUpLE4oMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsImRpdiIsOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQGFycm93T3BhY2l0eSIsZS5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhcnJvd1Bvc2l0aW9uIixlLl9nZXRBcnJvd1ZpZXdTdGF0ZSgpKSgiQGFsbG93Q2hpbGRyZW4iLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSkseCgyKSxiKCJAaW5kaWNhdG9yIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQGxlZnRQb2ludGVyIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQHJpZ2h0UG9pbnRlciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKX19dmFyIG03ZT1bIioiXSxWY2U9bmV3IHNlKCJNQVRfU09SVF9ERUZBVUxUX09QVElPTlMiKSxnN2U9T0EoZ28oY2xhc3N7fSkpLHRTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBnN2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1lLHRoaXMuc29ydGFibGVzPW5ldyBNYXAsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZSx0aGlzLnN0YXJ0PSJhc2MiLHRoaXMuX2RpcmVjdGlvbj0iIix0aGlzLnNvcnRDaGFuZ2U9bmV3IEd9Z2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259c2V0IGRpcmVjdGlvbihlKXt0aGlzLl9kaXJlY3Rpb249ZX1nZXQgZGlzYWJsZUNsZWFyKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbGVhcn1zZXQgZGlzYWJsZUNsZWFyKGUpe3RoaXMuX2Rpc2FibGVDbGVhcj1XdChlKX1yZWdpc3RlcihlKXt0aGlzLnNvcnRhYmxlcy5zZXQoZS5pZCxlKX1kZXJlZ2lzdGVyKGUpe3RoaXMuc29ydGFibGVzLmRlbGV0ZShlLmlkKX1zb3J0KGUpe3RoaXMuYWN0aXZlIT1lLmlkPyh0aGlzLmFjdGl2ZT1lLmlkLHRoaXMuZGlyZWN0aW9uPWUuc3RhcnQ/ZS5zdGFydDp0aGlzLnN0YXJ0KTp0aGlzLmRpcmVjdGlvbj10aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKGUpLHRoaXMuc29ydENoYW5nZS5lbWl0KHthY3RpdmU6dGhpcy5hY3RpdmUsZGlyZWN0aW9uOnRoaXMuZGlyZWN0aW9ufSl9Z2V0TmV4dFNvcnREaXJlY3Rpb24oZSl7aWYoIWUpcmV0dXJuIiI7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1bImFzYyIsImRlc2MiXTtyZXR1cm4iZGVzYyI9PW4mJmUucmV2ZXJzZSgpLHR8fGUucHVzaCgiIiksZX0oZS5zdGFydHx8dGhpcy5zdGFydCxlPy5kaXNhYmxlQ2xlYXI/P3RoaXMuZGlzYWJsZUNsZWFyPz8hIXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlQ2xlYXIpLG89ci5pbmRleE9mKHRoaXMuZGlyZWN0aW9uKSsxO3JldHVybiBvPj1yLmxlbmd0aCYmKG89MCkscltvXX1uZ09uSW5pdCgpe3RoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFZjZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFNvcnQiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc29ydCJdLGlucHV0czp7ZGlzYWJsZWQ6WyJtYXRTb3J0RGlzYWJsZWQiLCJkaXNhYmxlZCJdLGFjdGl2ZTpbIm1hdFNvcnRBY3RpdmUiLCJhY3RpdmUiXSxzdGFydDpbIm1hdFNvcnRTdGFydCIsInN0YXJ0Il0sZGlyZWN0aW9uOlsibWF0U29ydERpcmVjdGlvbiIsImRpcmVjdGlvbiJdLGRpc2FibGVDbGVhcjpbIm1hdFNvcnREaXNhYmxlQ2xlYXIiLCJkaXNhYmxlQ2xlYXIiXX0sb3V0cHV0czp7c29ydENoYW5nZToibWF0U29ydENoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U29ydCJdLGZlYXR1cmVzOlt0dCx6dF19KSxufSkoKSxMaD1ySi5FTlRFUklORysiICIraUouU1RBTkRBUkRfQ1VSVkUsUnk9e2luZGljYXRvcjpIcigiaW5kaWNhdG9yIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwcHgpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTBweCkifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLGxlZnRQb2ludGVyOkhyKCJsZWZ0UG9pbnRlciIsW0VpKCJhY3RpdmUtYXNjLCBhc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLHJpZ2h0UG9pbnRlcjpIcigicmlnaHRQb2ludGVyIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksRWkoImFjdGl2ZS1kZXNjLCBkZXNjIixybih7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksSWkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixWaShMaCkpXSksYXJyb3dPcGFjaXR5OkhyKCJhcnJvd09wYWNpdHkiLFtFaSgiZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe29wYWNpdHk6MX0pKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCIscm4oe29wYWNpdHk6LjU0fSkpLEVpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjLCBoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjLCB2b2lkIixybih7b3BhY2l0eTowfSkpLElpKCIqID0+IGFzYywgKiA9PiBkZXNjLCAqID0+IGFjdGl2ZSwgKiA9PiBoaW50LCAqID0+IHZvaWQiLFZpKCIwbXMiKSksSWkoIiogPD0+ICoiLFZpKExoKSldKSxhcnJvd1Bvc2l0aW9uOkhyKCJhcnJvd1Bvc2l0aW9uIixbSWkoIiogPT4gZGVzYy10by1oaW50LCAqID0+IGRlc2MtdG8tYWN0aXZlIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWRlc2MsICogPT4gYWN0aXZlLXRvLWRlc2MiLFZpKExoLE9mKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KV0pKSksSWkoIiogPT4gYXNjLXRvLWhpbnQsICogPT4gYXNjLXRvLWFjdGl2ZSIsVmkoTGgsT2YoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWFzYywgKiA9PiBhY3RpdmUtdG8tYXNjIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pXSkpKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCwgZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSksRWkoImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSkpLEVpKCJoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSkpXSksYWxsb3dDaGlsZHJlbjpIcigiYWxsb3dDaGlsZHJlbiIsW0lpKCIqIDw9PiAqIixbRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSldKX0sYU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcgVGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHk3ZT17cHJvdmlkZTphTyxkZXBzOltbbmV3IE9vLG5ldyBUYSxhT11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBhT319LGI3ZT1nbyhjbGFzc3t9KSxIY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGI3ZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5faW50bD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc29ydD1yLHRoaXMuX2NvbHVtbkRlZj1vLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEsdGhpcy5fdmlld1N0YXRlPXt9LHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPSJTb3J0IixjPy5hcnJvd1Bvc2l0aW9uJiYodGhpcy5hcnJvd1Bvc2l0aW9uPWM/LmFycm93UG9zaXRpb24pLHRoaXMuX2hhbmRsZVN0YXRlQ2hhbmdlcygpfWdldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuaWQmJnRoaXMuX2NvbHVtbkRlZiYmKHRoaXMuaWQ9dGhpcy5fY29sdW1uRGVmLm5hbWUpLHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHt0b1N0YXRlOnRoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZSI6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSx0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpLHRoaXMuX3NvcnRCdXR0b249dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiksdGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntsZXQgaT0hIWU7aSE9PXRoaXMuX3Nob3dJbmRpY2F0b3JIaW50JiYodGhpcy5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKGUpe3RoaXMuX2lzRGlzYWJsZWQoKSYmZXx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PWUsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoZSl7dGhpcy5fdmlld1N0YXRlPWV8fHt9LHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24mJih0aGlzLl92aWV3U3RhdGU9e3RvU3RhdGU6ZS50b1N0YXRlfSl9X3RvZ2dsZU9uSW50ZXJhY3Rpb24oKXt0aGlzLl9zb3J0LnNvcnQodGhpcyksKCJoaW50Ij09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlKSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKGUpeyF0aGlzLl9pc0Rpc2FibGVkKCkmJigzMj09PWUua2V5Q29kZXx8MTM9PT1lLmtleUNvZGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2xldCBlPXRoaXMuX3ZpZXdTdGF0ZS5mcm9tU3RhdGU7cmV0dXJuKGU/YCR7ZX0tdG8tYDoiIikrdGhpcy5fdmlld1N0YXRlLnRvU3RhdGV9X3VwZGF0ZUFycm93RGlyZWN0aW9uKCl7dGhpcy5fYXJyb3dEaXJlY3Rpb249dGhpcy5faXNTb3J0ZWQoKT90aGlzLl9zb3J0LmRpcmVjdGlvbjp0aGlzLnN0YXJ0fHx0aGlzLl9zb3J0LnN0YXJ0fV9pc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZWR9X2dldEFyaWFTb3J0QXR0cmlidXRlKCl7cmV0dXJuIHRoaXMuX2lzU29ydGVkKCk/ImFzYyI9PXRoaXMuX3NvcnQuZGlyZWN0aW9uPyJhc2NlbmRpbmciOiJkZXNjZW5kaW5nIjoibm9uZSJ9X3JlbmRlckFycm93KCl7cmV0dXJuIXRoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5faXNTb3J0ZWQoKX1fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpe3RoaXMuX3NvcnRCdXR0b24mJih0aGlzLl9hcmlhRGVzY3JpYmVyPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9zb3J0QnV0dG9uLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbiksdGhpcy5fYXJpYURlc2NyaWJlcj8uZGVzY3JpYmUodGhpcy5fc29ydEJ1dHRvbixlKSksdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPWV9X2hhbmRsZVN0YXRlQ2hhbmdlcygpe3RoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uPXVuKHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0Ll9zdGF0ZUNoYW5nZXMsdGhpcy5faW50bC5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc1NvcnRlZCgpJiYodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYU8pLHcobm4pLHcodFMsOCksdygiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLDgpLHcoenIpLHcoQWUpLHcoSUEsOCksdyhWY2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSksMiZlJiYoemUoImFyaWEtc29ydCIsaS5fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSksYXQoIm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCIsaS5faXNEaXNhYmxlZCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDpbIm1hdC1zb3J0LWhlYWRlciIsImlkIl0sYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsc3RhcnQ6InN0YXJ0Iixzb3J0QWN0aW9uRGVzY3JpcHRpb246InNvcnRBY3Rpb25EZXNjcmlwdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmg3ZSxuZ0NvbnRlbnRTZWxlY3RvcnM6bTdlLGRlY2xzOjQsdmFyczo3LGNvbnN0czpbWzEsIm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1jb250ZW50Il0sWyJjbGFzcyIsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyIsNCwibmdJZiJdLFsxLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciXSxbMSwibWF0LXNvcnQtaGVhZGVyLXN0ZW0iXSxbMSwibWF0LXNvcnQtaGVhZGVyLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDApKDEsImRpdiIsMSksTm4oMiksdigpLEUoMyxmN2UsNiw2LCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLGkuX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09PWkuYXJyb3dQb3NpdGlvbiksemUoInRhYmluZGV4IixpLl9pc0Rpc2FibGVkKCk/bnVsbDowKSgicm9sZSIsaS5faXNEaXNhYmxlZCgpP251bGw6ImJ1dHRvbiIpLHgoMyksYigibmdJZiIsaS5fcmVuZGVyQXJyb3coKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc29ydC1oZWFkZXItY29udGVudHt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3Jle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7b3BhY2l0eTowfS5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgMCAwIDZweH0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDZweCAwIDB9Lm1hdC1zb3J0LWhlYWRlci1zdGVte2JhY2tncm91bmQ6Y3VycmVudENvbG9yO2hlaWdodDoxMHB4O3dpZHRoOjJweDttYXJnaW46YXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1zdGVte3dpZHRoOjA7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItaW5kaWNhdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle21hcmdpbjphdXRvO2hlaWdodDoycHg7d2lkdGg6MnB4O2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXt3aWR0aDowO2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7d2lkdGg6NnB4O2hlaWdodDoycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OnNvbGlkIDZweDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0O2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0O3JpZ2h0OjB9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUnkuaW5kaWNhdG9yLFJ5LmxlZnRQb2ludGVyLFJ5LnJpZ2h0UG9pbnRlcixSeS5hcnJvd09wYWNpdHksUnkuYXJyb3dQb3NpdGlvbixSeS5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxVY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbeTdlXSxpbXBvcnRzOltrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBReihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3N0aWNreT0hMSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfWdldCBzdGlja3koKXtyZXR1cm4gdGhpcy5fc3RpY2t5fXNldCBzdGlja3kodCl7bGV0IGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1XdCh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9aGFzU3RpY2t5Q2hhbmdlZCgpe2xldCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19dmFyIEt6PW5ldyBzZSgiQ0RLX1RBQkxFIiksemNlPShuZXcgc2UoInRleHQtY29sdW1uLW9wdGlvbnMiKSxReihjbGFzc3t9KSxuZXcgc2UoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIiksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPWl9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuX2NvbHVtbnNEaWZmZXIpe2xldCBpPWUuY29sdW1ucyYmZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoaSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGkpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgamNlP2UuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgR2NlP2UuZm9vdGVyQ2VsbC50ZW1wbGF0ZTplLmNlbGwudGVtcGxhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCkpLHc3ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxqY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHc3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLE03ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxHY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE03ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLFdjZT0obmV3IHNlKCJDREtfU1BMIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0NkXX0pLG59KSgpKSxxY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1djZSxkbixkbl19KSxufSkoKSxaej1jbGFzcyBleHRlbmRzIGtfe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgVnIoW10pLHRoaXMuX2ZpbHRlcj1uZXcgVnIoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IFRlLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKE5WKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLHU9dHlwZW9mIGwsZD10eXBlb2YgYzt1IT09ZCYmKCJudW1iZXIiPT09dSYmKGwrPSIiKSwibnVtYmVyIj09PWQmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBWcih0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfXNldCBkYXRhKHQpe3Q9QXJyYXkuaXNBcnJheSh0KT90OltdLHRoaXMuX2RhdGEubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHQpfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5fZmlsdGVyLnZhbHVlfXNldCBmaWx0ZXIodCl7dGhpcy5fZmlsdGVyLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0aGlzLmRhdGEpfWdldCBzb3J0KCl7cmV0dXJuIHRoaXMuX3NvcnR9c2V0IHNvcnQodCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBwYWdpbmF0b3IoKXtyZXR1cm4gdGhpcy5fcGFnaW5hdG9yfXNldCBwYWdpbmF0b3IodCl7dGhpcy5fcGFnaW5hdG9yPXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9X3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpe2xldCB0PXRoaXMuX3NvcnQ/dW4odGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOmp0KG51bGwpLGU9dGhpcy5fcGFnaW5hdG9yP3VuKHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpqdChudWxsKSxyPXBuKFt0aGlzLl9kYXRhLHRoaXMuX2ZpbHRlcl0pLnBpcGUoQigoW2FdKT0+dGhpcy5fZmlsdGVyRGF0YShhKSkpLG89cG4oW3IsdF0pLnBpcGUoQigoW2FdKT0+dGhpcy5fb3JkZXJEYXRhKGEpKSkscz1wbihbbyxlXSkucGlwZShCKChbYV0pPT50aGlzLl9wYWdlRGF0YShhKSkpO3RoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1zLnN1YnNjcmliZShhPT50aGlzLl9yZW5kZXJEYXRhLm5leHQoYSkpfV9maWx0ZXJEYXRhKHQpe3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT1udWxsPT10aGlzLmZpbHRlcnx8IiI9PT10aGlzLmZpbHRlcj90OnQuZmlsdGVyKGU9PnRoaXMuZmlsdGVyUHJlZGljYXRlKGUsdGhpcy5maWx0ZXIpKSx0aGlzLnBhZ2luYXRvciYmdGhpcy5fdXBkYXRlUGFnaW5hdG9yKHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCksdGhpcy5maWx0ZXJlZERhdGF9X29yZGVyRGF0YSh0KXtyZXR1cm4gdGhpcy5zb3J0P3RoaXMuc29ydERhdGEodC5zbGljZSgpLHRoaXMuc29ydCk6dH1fcGFnZURhdGEodCl7aWYoIXRoaXMucGFnaW5hdG9yKXJldHVybiB0O2xldCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtsZXQgaT1NYXRoLmNlaWwoZS5sZW5ndGgvZS5wYWdlU2l6ZSktMXx8MCxyPU1hdGgubWluKGUucGFnZUluZGV4LGkpO3IhPT1lLnBhZ2VJbmRleCYmKGUucGFnZUluZGV4PXIsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcy5uZXh0KCkpfX0pfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPW51bGx9fSxsTz1jbGFzcyBleHRlbmRzIFp6e30sVDdlPVsiZGlhbG9nUG9wdXAiXSxEN2U9WyJodWVTbGlkZXIiXSxBN2U9WyJhbHBoYVNsaWRlciJdO2Z1bmN0aW9uIEk3ZShuLHQpe2lmKDEmbiYmTigwLCJkaXYiKSwyJm4pe2xldCBlPU0oKTtSYigiYXJyb3cgYXJyb3ctIixlLmNwVXNlUG9zaXRpb24sIiIpLE90KCJ0b3AiLGUuYXJyb3dUb3AsInB4Iil9fWZ1bmN0aW9uIFA3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25EcmFnRW5kKCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pLE4oMSwiZGl2IiwxNCksdigpfWlmKDImbil7bGV0IGU9TSgpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmh1ZVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpKCJyZ1kiLDEpLHgoMSksT3QoInRvcCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIFI3ZShuLHQpezEmbiYmKGpuKCksZygwLCJzdmciLDI5KSxOKDEsInBhdGgiLDMwKSgyLCJwYXRoIiwzMSksdigpKX1mdW5jdGlvbiBPN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2VhKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSxiKCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLHgoMSkscWUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gazdlKG4sdCl7MSZuJiZOKDAsImRpdiIsMzMpfWZ1bmN0aW9uIEY3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gTjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEw3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzQpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25DeWFuSW5wdXQocikpfSksdigpLGcoMywiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk1hZ2VudGFJbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uWWVsbG93SW5wdXQocikpfSksdigpLGcoNSwiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkJsYWNrSW5wdXQocikpfSksdigpLEUoNixGN2UsMSwyLCJpbnB1dCIsMzcpLHYoKSxnKDcsImRpdiIsMzUpKDgsImRpdiIpLEQoOSwiQyIpLHYoKSxnKDEwLCJkaXYiKSxEKDExLCJNIiksdigpLGcoMTIsImRpdiIpLEQoMTMsIlkiKSx2KCksZygxNCwiZGl2IiksRCgxNSwiSyIpLHYoKSxFKDE2LE43ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLHgoMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSkseCgxKSxiKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDEwKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIEI3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gVjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IdWVJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLHYoKSxnKDQsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaWdodG5lc3NJbnB1dChyKSl9KSx2KCksRSg1LEI3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNiwiZGl2IiwzNSkoNywiZGl2IiksRCg4LCJIIiksdigpLGcoOSwiZGl2IiksRCgxMCwiUyIpLHYoKSxnKDExLCJkaXYiKSxEKDEyLCJMIiksdigpLEUoMTMsVjdlLDIsMCwiZGl2IiwzOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7T3QoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIikseCgyKSxiKCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCkseCgxKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCkseCg4KSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFU3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gejdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIGo3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDIpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MyksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25SZWRJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uR3JlZW5JbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQmx1ZUlucHV0KHIpKX0pLHYoKSxFKDUsVTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg2LCJkaXYiLDM1KSg3LCJkaXYiKSxEKDgsIlIiKSx2KCksZyg5LCJkaXYiKSxEKDEwLCJHIiksdigpLGcoMTEsImRpdiIpLEQoMTIsIkIiKSx2KCksRSgxMyx6N2UsMiwwLCJkaXYiLDM4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgiZGlzcGxheSIsMSE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSx4KDIpLGIoInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQucikseCgxKSxiKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmcpLHgoMSksYigicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5iKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDgpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gRzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaW5wdXQiLDM5KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWxwaGFJbnB1dChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBXN2Uobix0KXsxJm4mJihnKDAsImRpdiIpLEQoMSwiQSIpLHYoKSl9ZnVuY3Rpb24gcTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxQKCJibHVyIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChudWxsKSl9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChyKSl9KSx2KCksRSgzLEc3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNCwiZGl2IiwzNSkoNSwiZGl2IiksRCg2LCJIZXgiKSx2KCksRSg3LFc3ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGF0KCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCgyKSxiKCJ2YWx1ZSIsZS5oZXhUZXh0KSx4KDEpLGIoIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCg0KSxiKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBZN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJpbnB1dCIsMzkpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BbHBoYUlucHV0KHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIFg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25WYWx1ZUlucHV0KHIpKX0pLHYoKSxFKDMsWTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg0LCJkaXYiLDM1KSg1LCJkaXYiKSxEKDYsIlYiKSx2KCksZyg3LCJkaXYiKSxEKDgsIkEiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gUTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NykoMSwic3BhbiIsNDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLHYoKSxnKDIsInNwYW4iLDQ4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLHYoKSgpfX1mdW5jdGlvbiBLN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1NSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykub25SZW1vdmVQcmVzZXRDb2xvcihyLG8pKX0pLHYoKX0yJm4mJmVhKE0oNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBaN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDUzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLEUoMSxLN2UsMSwzLCJzcGFuIiw1NCksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDMpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIEo3ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRSgxLFo3ZSwyLDMsImRpdiIsNTIpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRDb2xvcnNDbGFzcykseCgxKSxiKCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gJDdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcykseCgxKSx5dChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gZTllKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDQ5KSxOKDEsImhyIiksZygyLCJkaXYiLDUwKSxEKDMpLHYoKSxFKDQsSjdlLDIsNCwiZGl2Iiw1MSksRSg1LCQ3ZSwyLDQsImRpdiIsNTEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgzKSx5dChlLmNwUHJlc2V0TGFiZWwpLHgoMSksYigibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiB0OWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDU4KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25DYW5jZWxDb2xvcihyKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7ZWEoZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gbjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw1OCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSksRCgxKSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BPS0J1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BPS0J1dHRvblRleHQpfX1mdW5jdGlvbiBpOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTYpLEUoMSx0OWUsMiw0LCJidXR0b24iLDU3KSxFKDIsbjllLDIsNCwiYnV0dG9uIiw1NyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLGUuY3BDYW5jZWxCdXR0b24pLHgoMSksYigibmdJZiIsZS5jcE9LQnV0dG9uKX19ZnVuY3Rpb24gcjllKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBvOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTkpLEUoMSxyOWUsMSwwLCJuZy1jb250YWluZXIiLDYwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jcEV4dHJhVGVtcGxhdGUpfX12YXIgcnM9KCgpPT4oZnVuY3Rpb24obil7bltuLkhFWD0wXT0iSEVYIixuW24uUkdCQT0xXT0iUkdCQSIsbltuLkhTTEE9Ml09IkhTTEEiLG5bbi5DTVlLPTNdPSJDTVlLIn0ocnN8fChycz17fSkpLHJzKSkoKSxMYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzLmE9cn19LE95PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sWWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy5sPWksdGhpcy5hPXJ9fSxzZz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PWksdGhpcy5rPXIsdGhpcy5hPW99fSxsOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEd9aW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoaSk7ZWxzZXtsZXQgcj1wYXJzZUZsb2F0KGkpO3RoaXMubmV3VmFsdWUuZW1pdCh7djpyLHJnOnRoaXMucmd9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJ0ZXh0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlucHV0Q2hhbmdlKG8pfSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsUmVmPWUsdGhpcy5kcmFnRW5kPW5ldyBHLHRoaXMuZHJhZ1N0YXJ0PW5ldyBHLHRoaXMubmV3VmFsdWU9bmV3IEcsdGhpcy5saXN0ZW5lck1vdmU9aT0+dGhpcy5tb3ZlKGkpLHRoaXMubGlzdGVuZXJTdG9wPSgpPT50aGlzLnN0b3AoKX1tb3VzZURvd24oZSl7dGhpcy5zdGFydChlKX10b3VjaFN0YXJ0KGUpe3RoaXMuc3RhcnQoZSl9bW92ZShlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDdXJzb3IoZSl9c3RhcnQoZSl7dGhpcy5zZXRDdXJzb3IoZSksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdTdGFydC5lbWl0KCl9c3RvcCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ0VuZC5lbWl0KCl9Z2V0WChlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVg/ZS5wYWdlWDplLnRvdWNoZXNbMF0ucGFnZVgpLWkubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WShlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVk/ZS5wYWdlWTplLnRvdWNoZXNbMF0ucGFnZVkpLWkudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHI9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxvPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRYKGUpLGkpKSxzPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRZKGUpLHIpKTt2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHtzOm8vaSx2OjEtcy9yLHJnWDp0aGlzLnJnWCxyZ1k6dGhpcy5yZ1l9KTp2b2lkIDA9PT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnMvcixyZ1k6dGhpcy5yZ1l9KTp2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwPT09dGhpcy5yZ1kmJnRoaXMubmV3VmFsdWUuZW1pdCh7djpvL2kscmdYOnRoaXMucmdYfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZURvd24obyl9KSgidG91Y2hzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIGkudG91Y2hTdGFydChvKX0pfSxpbnB1dHM6e3JnWDoicmdYIixyZ1k6InJnWSIsc2xpZGVyOiJzbGlkZXIifSxvdXRwdXRzOntkcmFnRW5kOiJkcmFnRW5kIixkcmFnU3RhcnQ6ImRyYWdTdGFydCIsbmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjTz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LHVPPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sSno9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKGUpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PWUmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPWV9aHN2YTJoc2xhKGUpe2xldCBpPWUuaCxyPWUucyxvPWUudixzPWUuYTtpZigwPT09bylyZXR1cm4gbmV3IFlkKGksMCwwLHMpO2lmKDA9PT1yJiYxPT09bylyZXR1cm4gbmV3IFlkKGksMSwxLHMpO3tsZXQgYT1vKigyLXIpLzI7cmV0dXJuIG5ldyBZZChpLG8qci8oMS1NYXRoLmFicygyKmEtMSkpLGEscyl9fWhzbGEyaHN2YShlKXtsZXQgaT1NYXRoLm1pbihlLmgsMSkscj1NYXRoLm1pbihlLnMsMSksbz1NYXRoLm1pbihlLmwsMSkscz1NYXRoLm1pbihlLmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyBPeShpLDAsMCxzKTt7bGV0IGE9bytyKigxLU1hdGguYWJzKDIqby0xKSkvMjtyZXR1cm4gbmV3IE95KGksMiooYS1vKS9hLGEscyl9fWhzdmFUb1JnYmEoZSl7bGV0IGkscixvLHM9ZS5oLGE9ZS5zLGw9ZS52LGM9ZS5hLHU9TWF0aC5mbG9vcig2KnMpLGQ9NipzLXUscD1sKigxLWEpLGg9bCooMS1kKmEpLGY9bCooMS0oMS1kKSphKTtzd2l0Y2godSU2KXtjYXNlIDA6aT1sLHI9ZixvPXA7YnJlYWs7Y2FzZSAxOmk9aCxyPWwsbz1wO2JyZWFrO2Nhc2UgMjppPXAscj1sLG89ZjticmVhaztjYXNlIDM6aT1wLHI9aCxvPWw7YnJlYWs7Y2FzZSA0Omk9ZixyPXAsbz1sO2JyZWFrO2Nhc2UgNTppPWwscj1wLG89aDticmVhaztkZWZhdWx0Omk9MCxyPTAsbz0wfXJldHVybiBuZXcgTGMoaSxyLG8sYyl9Y215a1RvUmdiKGUpe3JldHVybiBuZXcgTGMoKDEtZS5jKSooMS1lLmspLCgxLWUubSkqKDEtZS5rKSwoMS1lLnkpKigxLWUuayksZS5hKX1yZ2JhVG9DbXlrKGUpe2xldCBpPTEtTWF0aC5tYXgoZS5yLGUuZyxlLmIpO3JldHVybiAxPT09aT9uZXcgc2coMCwwLDAsMSxlLmEpOm5ldyBzZygoMS1lLnItaSkvKDEtaSksKDEtZS5nLWkpLygxLWkpLCgxLWUuYi1pKS8oMS1pKSxpLGUuYSl9cmdiYVRvSHN2YShlKXtsZXQgaSxyLG89TWF0aC5taW4oZS5yLDEpLHM9TWF0aC5taW4oZS5nLDEpLGE9TWF0aC5taW4oZS5iLDEpLGw9TWF0aC5taW4oZS5hLDEpLGM9TWF0aC5tYXgobyxzLGEpLHU9TWF0aC5taW4obyxzLGEpLGQ9YyxwPWMtdTtpZihyPTA9PT1jPzA6cC9jLGM9PT11KWk9MDtlbHNle3N3aXRjaChjKXtjYXNlIG86aT0ocy1hKS9wKyhzPGE/NjowKTticmVhaztjYXNlIHM6aT0oYS1vKS9wKzI7YnJlYWs7Y2FzZSBhOmk9KG8tcykvcCs0O2JyZWFrO2RlZmF1bHQ6aT0wfWkvPTZ9cmV0dXJuIG5ldyBPeShpLHIsZCxsKX1yZ2JhVG9IZXgoZSxpKXtsZXQgcj0iIyIrKDE2Nzc3MjE2fGUucjw8MTZ8ZS5nPDw4fGUuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gaSYmKHIrPSgyNTZ8TWF0aC5yb3VuZCgyNTUqZS5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkscn1ub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgc2coZS5jLzEwMCxlLm0vMTAwLGUueS8xMDAsZS5rLzEwMCxlLmEpfWRlbm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IHNnKE1hdGguZmxvb3IoMTAwKmUuYyksTWF0aC5mbG9vcigxMDAqZS5tKSxNYXRoLmZsb29yKDEwMCplLnkpLE1hdGguZmxvb3IoMTAwKmUuayksZS5hKX1kZW5vcm1hbGl6ZVJHQkEoZSl7cmV0dXJuIG5ldyBMYyhNYXRoLnJvdW5kKDI1NSplLnIpLE1hdGgucm91bmQoMjU1KmUuZyksTWF0aC5yb3VuZCgyNTUqZS5iKSxlLmEpfXN0cmluZ1RvSHN2YShlPSIiLGk9ITEpe2xldCByPW51bGw7ZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCk7bGV0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgTGMocGFyc2VJbnQoc1syXSwxMCkvMjU1LHBhcnNlSW50KHNbM10sMTApLzI1NSxwYXJzZUludChzWzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IFlkKHBhcnNlSW50KHNbMl0sMTApLzM2MCxwYXJzZUludChzWzNdLDEwKS8xMDAscGFyc2VJbnQoc1s0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQoc1s1XSkpPzE6cGFyc2VGbG9hdChzWzVdKSl9fV07by5wdXNoKGk/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LHBhcnNlSW50KHNbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0rc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0rc1syXSwxNikvMjU1LHBhcnNlSW50KHNbM10rc1szXSwxNikvMjU1LDEpfX0pO2ZvcihsZXQgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykpe2xldCBhPW9bc10sbD1hLnJlLmV4ZWMoZSksYz1sJiZhLnBhcnNlKGwpO2lmKGMpcmV0dXJuIGMgaW5zdGFuY2VvZiBMYz9yPXRoaXMucmdiYVRvSHN2YShjKTpjIGluc3RhbmNlb2YgWWQmJihyPXRoaXMuaHNsYTJoc3ZhKGMpKSxyfXJldHVybiByfW91dHB1dEZvcm1hdChlLGkscil7c3dpdGNoKCJhdXRvIj09PWkmJihpPWUuYTwxPyJyZ2JhIjoiaGV4IiksaSl7Y2FzZSJoc2xhIjpsZXQgbz10aGlzLmhzdmEyaHNsYShlKSxzPW5ldyBZZChNYXRoLnJvdW5kKDM2MCpvLmgpLE1hdGgucm91bmQoMTAwKm8ucyksTWF0aC5yb3VuZCgxMDAqby5sKSxNYXRoLnJvdW5kKDEwMCpvLmEpLzEwMCk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/ImhzbGEoIitzLmgrIiwiK3MucysiJSwiK3MubCsiJSwiK3MuYSsiKSI6ImhzbCgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlKSI7Y2FzZSJyZ2JhIjpsZXQgYT10aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIrTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDArIikiOiJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIjtkZWZhdWx0OmxldCBsPSJhbHdheXMiPT09cnx8ImZvcmNlZCI9PT1yO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpLGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWWNlPXR5cGVvZiB3aW5kb3c8InUiJiYib250b3VjaHN0YXJ0ImluIHdpbmRvdyx1OWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5uZ1pvbmU9ZSx0aGlzLmVsUmVmPWksdGhpcy5jZFJlZj1yLHRoaXMuZG9jdW1lbnQ9byx0aGlzLnBsYXRmb3JtSWQ9cyx0aGlzLnNlcnZpY2U9YSx0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W3JzLkhFWCxycy5SR0JBLHJzLkhTTEEscnMuQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmV5ZURyb3BwZXJTdXBwb3J0ZWQ9cFQodGhpcy5wbGF0Zm9ybUlkKSYmIkV5ZURyb3BwZXIiaW4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld31oYW5kbGVFc2MoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcihlKX1oYW5kbGVFbnRlcihlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKGUpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3IGNPKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyB1Tyh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP3JzLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9ycy5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/cnMuSFNMQTpycy5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj1yPT57dGhpcy5vbk1vdXNlRG93bihyKX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgdU8odGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKGUsaT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IoZSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSxpKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2coZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyx5LEksQSxPLGVlLFgseGUsZmUsdmUsVCxuZSxsZSxoZSx5ZSxKLGFlLG1lLGplLE1lLEZlLHV0LFN0KXt0aGlzLnNldEluaXRpYWxDb2xvcihyKSx0aGlzLnNldENvbG9yTW9kZShjKSx0aGlzLmlzSUUxMD0xMD09PWZ1bmN0aW9uKCl7bGV0IG49IiI7dHlwZW9mIG5hdmlnYXRvcjwidSImJihuPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7bGV0IHQ9bi5pbmRleE9mKCJtc2llICIpO3JldHVybiB0PjAmJnBhcnNlSW50KG4uc3Vic3RyaW5nKHQrNSxuLmluZGV4T2YoIi4iLHQpKSwxMCl9KCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZT1lLHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZj1pLHRoaXMuY3BEaXNhYmxlSW5wdXQ9aCx0aGlzLmNwQ215a0VuYWJsZWQ9dSx0aGlzLmNwQWxwaGFDaGFubmVsPWQsdGhpcy5jcE91dHB1dEZvcm1hdD1wLHRoaXMuY3BEaWFsb2dEaXNwbGF5PWEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1mLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPW0sdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPUMsdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj1fLHRoaXMud2lkdGg9dGhpcy5jcFdpZHRoPXBhcnNlSW50KG8sMTApLHRoaXMuaGVpZ2h0PXRoaXMuY3BIZWlnaHQ9cGFyc2VJbnQocywxMCksdGhpcy5jcFBvc2l0aW9uPXksdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PXBhcnNlSW50KEksMTApLHRoaXMuY3BPS0J1dHRvbj1ULHRoaXMuY3BPS0J1dHRvblRleHQ9bGUsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9bmUsdGhpcy5jcENhbmNlbEJ1dHRvbj1oZSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD1KLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz15ZSx0aGlzLmNwRXllRHJvcHBlcj1GZSx0aGlzLmZhbGxiYWNrQ29sb3I9bHx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKE8sZWUpLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz1YLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9eGUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT1mZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9dmUsdGhpcy5jcEFkZENvbG9yQnV0dG9uPWFlLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQ9amUsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9bWUsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9TWUsdGhpcy5jcFRyaWdnZXJFbGVtZW50PXV0LHRoaXMuY3BFeHRyYVRlbXBsYXRlPVN0LEF8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09YSYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PXAmJiJhbHdheXMiIT09ZCYmImZvcmNlZCIhPT1kJiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUoZSl7c3dpdGNoKGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6ZGVmYXVsdDp0aGlzLmNwQ29sb3JNb2RlPTE7YnJlYWs7Y2FzZSIyIjpjYXNlIkciOmNhc2UiR1JBWVNDQUxFIjp0aGlzLmNwQ29sb3JNb2RlPTI7YnJlYWs7Y2FzZSIzIjpjYXNlIlAiOmNhc2UiUFJFU0VUUyI6dGhpcy5jcENvbG9yTW9kZT0zfX1zZXRJbml0aWFsQ29sb3IoZSl7dGhpcy5pbml0aWFsQ29sb3I9ZX1zZXRQcmVzZXRDb25maWcoZSxpKXt0aGlzLmNwUHJlc2V0TGFiZWw9ZSx0aGlzLmNwUHJlc2V0Q29sb3JzPWl9c2V0Q29sb3JGcm9tU3RyaW5nKGUsaT0hMCxyPSEwKXtsZXQgbzsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbD8obz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITApLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpKSk6bz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoaSxyKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6ZSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24oZSl7dGhpcy5zaG93JiYhdGhpcy5pc0lFMTAmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmZS50YXJnZXQhPT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCYmIXRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJjA9PT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcihpPT5pPT09ZS50YXJnZXQpLmxlbmd0aCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jcFNhdmVDbGlja091dHNpZGU/dGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpOih0aGlzLmhzdmE9bnVsbCx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMSksdGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNhbmNlbGVkKCkpLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9KX1vbkFjY2VwdENvbG9yKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcihlKXt0aGlzLmhzdmE9bnVsbCxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25FeWVEcm9wcGVyKCl7dGhpcy5leWVEcm9wcGVyU3VwcG9ydGVkJiYobmV3IHdpbmRvdy5FeWVEcm9wcGVyKS5vcGVuKCkudGhlbihpPT57dGhpcy5zZXRDb2xvckZyb21TdHJpbmcoaS5zUkdCSGV4LCEwKX0pfW9uRm9ybWF0VG9nZ2xlKGUpe2xldCBpPXRoaXMuZGlhbG9nSW5wdXRGaWVsZHMubGVuZ3RoLSh0aGlzLmNwQ215a0VuYWJsZWQ/MDoxKSxyPSgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KStlKSVpK2kpJWk7dGhpcy5mb3JtYXQ9dGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tyXX1vbkNvbG9yQ2hhbmdlKGUpe3RoaXMuaHN2YS5zPWUucy9lLnJnWCx0aGlzLmhzdmEudj1lLnYvZS5yZ1ksdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJsaWdodG5lc3MiLHZhbHVlOnRoaXMuaHN2YS52LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoic2F0dXJhdGlvbiIsdmFsdWU6dGhpcy5oc3ZhLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS5oPWUudi9lLnJnWCx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJodWUiLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS52PWUudi9lLnJnWCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InZhbHVlIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUNoYW5nZShlKXt0aGlzLmhzdmEuYT1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJhbHBoYSIsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSGV4SW5wdXQoZSl7aWYobnVsbD09PWUpdGhpcy51cGRhdGVDb2xvclBpY2tlcigpO2Vsc2V7ZSYmIiMiIT09ZVswXSYmKGU9IiMiK2UpO2xldCBpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fSkkL2dpOyJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGk9L14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2kpO2xldCByPWkudGVzdChlKTtyJiYoZS5sZW5ndGg8NSYmKGU9IiMiK2Uuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAobz0+bytvKS5qb2luKCIiKSksImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYoZSs9TWF0aC5yb3VuZCgyNTUqdGhpcy5oc3ZhLmEpLnRvU3RyaW5nKDE2KSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSwhMCwhMSkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaGV4Iix2YWxpZDpyLHZhbHVlOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfX1vblJlZElucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkucj1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJyZWQiLHZhbGlkOnIsdmFsdWU6aS5yLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsdWVJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6cix2YWx1ZTppLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmc9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiZ3JlZW4iLHZhbGlkOnIsdmFsdWU6aS5nLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmg9ZS52L2UucmcsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJodWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLmgsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uVmFsdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS52PWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmE9ZS52L2UucmcsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImFscGhhIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkxpZ2h0bmVzc0lucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5sPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibGlnaHRuZXNzIix2YWxpZDpyLHZhbHVlOmkubCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25TYXR1cmF0aW9uSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnM9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpyLHZhbHVlOmkucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLmM9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsubT1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLnk9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsuaz1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcihyPT5yPT09aSkubGVuZ3RofHwodGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmNvbmNhdChpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycykpfW9uUmVtb3ZlUHJlc2V0Q29sb3IoZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+ciE9PWkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuQ29sb3JQaWNrZXIoKXt0aGlzLnNob3d8fCh0aGlzLnNob3c9ITAsdGhpcy5oaWRkZW49ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaGlkZGVuPSExLHRoaXMuc2V0RGlhbG9nUG9zaXRpb24oKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKX0sMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1ljZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoWWNlP2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMubGlzdGVuZXJNb3VzZURvd24pOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpLHRoaXMuY2RSZWYuZGVzdHJveWVkfHx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlQ29sb3JQaWNrZXIoZT0hMCxpPSEwLHI9ITEpe2lmKHRoaXMuc2xpZGVyRGltTWF4KXsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2xldCBvLHMsYSxsPXRoaXMub3V0cHV0Q29sb3I7aWYocz10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksdGhpcy5jcENteWtFbmFibGVkPyhyPyhhPXRoaXMuc2VydmljZS5jbXlrVG9SZ2IodGhpcy5zZXJ2aWNlLm5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSksdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGEpKTooYT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHRoaXMuY215az10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVDTVlLKHRoaXMuc2VydmljZS5yZ2JhVG9DbXlrKGEpKSksYT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKGEpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCk6YT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpLG89dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYShuZXcgT3kodGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCwxLDEsMSkpKSxpJiYodGhpcy5oc2xhVGV4dD1uZXcgWWQoTWF0aC5yb3VuZCgzNjAqcy5oKSxNYXRoLnJvdW5kKDEwMCpzLnMpLE1hdGgucm91bmQoMTAwKnMubCksTWF0aC5yb3VuZCgxMDAqcy5hKS8xMDApLHRoaXMucmdiYVRleHQ9bmV3IExjKGEucixhLmcsYS5iLE1hdGgucm91bmQoMTAwKmEuYSkvMTAwKSx0aGlzLmNwQ215a0VuYWJsZWQmJih0aGlzLmNteWtUZXh0PW5ldyBzZyh0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuayxNYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwKSksdGhpcy5oZXhUZXh0PXRoaXMuc2VydmljZS5yZ2JhVG9IZXgoYSwiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuaGV4QWxwaGE9dGhpcy5yZ2JhVGV4dC5hKSwiYXV0byI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiZ0aGlzLmZvcm1hdCE9PXJzLlJHQkEmJnRoaXMuZm9ybWF0IT09cnMuQ01ZSyYmdGhpcy5mb3JtYXQhPT1ycy5IU0xBJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT9ycy5SR0JBOnJzLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PXJzLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7bGV0IGM9TWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMDt0aGlzLmNteWtDb2xvcj1gY215a2EoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30sJHtjfSlgfWVsc2UgdGhpcy5jbXlrQ29sb3I9YGNteWsoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30pYDt0aGlzLnNsaWRlcj1uZXcgY08oKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgpKnRoaXMuc2xpZGVyRGltTWF4LmgtOCx0aGlzLmhzdmEucyp0aGlzLnNsaWRlckRpbU1heC5zLTgsKDEtdGhpcy5oc3ZhLnYpKnRoaXMuc2xpZGVyRGltTWF4LnYtOCx0aGlzLmhzdmEuYSp0aGlzLnNsaWRlckRpbU1heC5hLTgpLGUmJmwhPT10aGlzLm91dHB1dENvbG9yJiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKSl9fXNldERpYWxvZ1Bvc2l0aW9uKCl7aWYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSl0aGlzLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZWxzZXtsZXQgcixlPSJzdGF0aWMiLGk9IiIsbz1udWxsLHM9bnVsbCxhPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsbD10aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7Zm9yKDtudWxsIT09YSYmIkhUTUwiIT09YS50YWdOYW1lOyl7aWYocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKSxlPXIuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSxpPXIuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksInN0YXRpYyIhPT1lJiZudWxsPT09byYmKG89YSksaSYmIm5vbmUiIT09aSYmbnVsbD09PXMmJihzPWEpLCJmaXhlZCI9PT1lKXtvPXM7YnJlYWt9YT1hLnBhcmVudE5vZGV9bGV0IGM9dGhpcy5jcmVhdGVEaWFsb2dCb3godGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImZpeGVkIiE9PWUpO2lmKHRoaXMudXNlUm9vdFZpZXdDb250YWluZXJ8fCJmaXhlZCI9PT1lJiYoIW98fG8gaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpKXRoaXMudG9wPWMudG9wLHRoaXMubGVmdD1jLmxlZnQ7ZWxzZXtudWxsPT09byYmKG89YSk7bGV0IGQ9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9Yy50b3AtZC50b3AsdGhpcy5sZWZ0PWMubGVmdC1kLmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCB1PXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJih1PWZ1bmN0aW9uKG4sdCl7bGV0IGU9InJpZ2h0IixpPSJib3R0b20iLHtoZWlnaHQ6cix3aWR0aDpvfT1uLHt0b3A6cyxsZWZ0OmF9PXQsbD1zK3QuaGVpZ2h0LGM9YSt0LndpZHRoLHU9cy1yPDAsZD1sK3I+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkscD1hLW88MCxoPWMrbz4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIGQmJihpPSJ0b3AiKSx1JiYoaT0iYm90dG9tIikscCYmKGU9InJpZ2h0IiksaCYmKGU9ImxlZnQiKSx1JiZkJiZwJiZoP1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKChDLF8pPT5uW0NdPm5bX10/QzpfKTpwJiZoP3U/ImJvdHRvbSI6ZHx8cz5sPyJ0b3AiOiJib3R0b20iOnUmJmQ/cD8icmlnaHQiOmh8fGE+Yz8ibGVmdCI6InJpZ2h0IjpgJHtpfS0ke2V9YH0odGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jcFRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PXU/KHRoaXMuYXJyb3dUb3A9bC0xLHRoaXMudG9wLT1sK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT11fHwibGVmdC10b3AiPT09dT8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09dXx8InJpZ2h0LXRvcCI9PT11Pyh0aGlzLnRvcC09bC1jLmhlaWdodCtjLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9Yy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PXV8fCJib3R0b20tbGVmdCI9PT11fHwibGVmdC1ib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMiksdGhpcy5jcFVzZVBvc2l0aW9uPXV9fWlzRGVzY2VuZGFudChlLGkpe2xldCByPWkucGFyZW50Tm9kZTtmb3IoO251bGwhPT1yOyl7aWYocj09PWUpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KGUsaSl7bGV0e3RvcDpyLGxlZnQ6b309ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnIrKGk/d2luZG93LnBhZ2VZT2Zmc2V0OjApLGxlZnQ6bysoaT93aW5kb3cucGFnZVhPZmZzZXQ6MCksd2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KEJ0KSx3KGlkKSx3KEp6KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY29sb3ItcGlja2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFQ3ZSw3KSxsdChEN2UsNyksbHQoQTdlLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmRpYWxvZ0VsZW1lbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuaHVlU2xpZGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmFscGhhU2xpZGVyPXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJrZXl1cC5lc2MiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUVzYyhvKX0sMCxGRSkoImtleXVwLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFbnRlcihvKX0sITEsRkUpfSxkZWNsczozMCx2YXJzOjUxLGNvbnN0czpbWzEsImNvbG9yLXBpY2tlciIsMywiY2xpY2siXSxbImRpYWxvZ1BvcHVwIiwiIl0sWzMsImNsYXNzIiwidG9wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJiYWNrZ3JvdW5kLWNvbG9yIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIiw0LCJuZ0lmIl0sWzEsImh1ZS1hbHBoYSIsImJveCJdLFsxLCJsZWZ0Il0sWzEsInNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmQiXSxbMSwic2VsZWN0ZWQtY29sb3IiLDMsImNsaWNrIl0sWyJjbGFzcyIsImV5ZWRyb3BwZXItaWNvbiIsInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4dHJhLXRlbXBsYXRlIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiwxLCJleWVkcm9wcGVyLWljb24iXSxbImQiLCJNMCAwaDI0djI0SDBWMHoiLCJmaWxsIiwibm9uZSJdLFsiZCIsIk0xNy42NiA1LjQxbC45Mi45Mi0yLjY5IDIuNjktLjkyLS45MiAyLjY5LTIuNjlNMTcuNjcgM2MtLjI2IDAtLjUxLjEtLjcxLjI5bC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJsLTIuMzQtMi4zNGMtLjItLjE5LS40NS0uMjktLjctLjI5ek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiJdLFsidHlwZSIsImJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsyLCJoZWlnaHQiLCIxNnB4Il0sWzEsImNteWstdGV4dCJdLFsxLCJib3giXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjEwMCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJoc2xhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjM2MCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInJnYmEtdGV4dCJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSoiLCJtaW4iLCIwIiwibWF4IiwiMjU1IiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaGV4LXRleHQiXSxbMywidGV4dCIsInZhbHVlIiwiYmx1ciIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwidmFsdWUtdGV4dCJdLFsxLCJ0eXBlLXBvbGljeSJdLFsxLCJ0eXBlLXBvbGljeS1hcnJvdyIsMywiY2xpY2siXSxbMSwicHJlc2V0LWFyZWEiXSxbMSwicHJlc2V0LWxhYmVsIl0sWzMsImNsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1jb2xvciIsMywiYmFja2dyb3VuZENvbG9yIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJwcmVzZXQtY29sb3IiLDMsImNsaWNrIl0sWzMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwiYnV0dG9uLWFyZWEiXSxbInR5cGUiLCJidXR0b24iLDMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDMsImNsaWNrIl0sWzEsImV4dHJhLXRlbXBsYXRlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RvcFByb3BhZ2F0aW9uKCl9KSxFKDIsSTdlLDEsNSwiZGl2IiwyKSxFKDMsUDdlLDIsOCwiZGl2IiwzKSxnKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxOKDYsImRpdiIsNiksZyg3LCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyJiZpLm9uRXllRHJvcHBlcigpfSksRSg4LFI3ZSwzLDAsInN2ZyIsOCksdigpLEUoOSxPN2UsMiw1LCJidXR0b24iLDkpLHYoKSxnKDEwLCJkaXYiLDEwKSxFKDExLGs3ZSwxLDAsImRpdiIsMTEpLGcoMTIsImRpdiIsMTIsMTMpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkh1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoImh1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJodWUiKX0pLE4oMTQsImRpdiIsMTQpLHYoKSxnKDE1LCJkaXYiLDE1LDE2KSxQKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoInZhbHVlIil9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdFbmQoInZhbHVlIil9KSxOKDE3LCJkaXYiLDE0KSx2KCksZygxOCwiZGl2IiwxNywxOCksUCgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxwaGFDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJhbHBoYSIpfSksTigyMCwiZGl2IiwxNCksdigpKCkoKSxFKDIxLEw3ZSwxNywxMiwiZGl2IiwxOSksRSgyMixIN2UsMTQsMTAsImRpdiIsMjApLEUoMjMsajdlLDE0LDEwLCJkaXYiLDIxKSxFKDI0LHE3ZSw4LDcsImRpdiIsMjIpLEUoMjUsWDdlLDksMywiZGl2IiwyMyksRSgyNixRN2UsMywwLCJkaXYiLDI0KSxFKDI3LGU5ZSw2LDMsImRpdiIsMjUpLEUoMjgsaTllLDMsMiwiZGl2IiwyNiksRSgyOSxvOWUsMiwxLCJkaXYiLDI3KSx2KCkpLDImZSYmKE90KCJkaXNwbGF5IixpLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixpLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLGkudG9wLCJweCIpKCJsZWZ0IixpLmxlZnQsInB4IikoInBvc2l0aW9uIixpLnBvc2l0aW9uKSgiaGVpZ2h0IixpLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsaS5jcFdpZHRoLCJweCIpLGF0KCJvcGVuIixpLnNob3cpLHgoMiksYigibmdJZiIsInBvcHVwIj09PWkuY3BEaWFsb2dEaXNwbGF5KSx4KDEpLGIoIm5nSWYiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSkpLHgoNCksT3QoImJhY2tncm91bmQtY29sb3IiLGkuc2VsZWN0ZWRDb2xvcikoImN1cnNvciIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlcj8icG9pbnRlciI6bnVsbCkseCgxKSxiKCJuZ0lmIixpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbikseCgyKSxiKCJuZ0lmIiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbCkseCgxKSxPdCgiZGlzcGxheSIsMT09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmgsInB4IikseCgxKSxPdCgiZGlzcGxheSIsMj09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJyaWdodCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci52LCJweCIpLHgoMSksT3QoImRpc3BsYXkiLCJkaXNhYmxlZCI9PT1pLmNwQWxwaGFDaGFubmVsPyJub25lIjoiYmxvY2siKSgiYmFja2dyb3VuZC1jb2xvciIsaS5hbHBoYVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpLHgoMiksT3QoImxlZnQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIuYSwicHgiKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYyPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLChudWxsPT1pLmNwUHJlc2V0Q29sb3JzP251bGw6aS5jcFByZXNldENvbG9ycy5sZW5ndGgpfHxpLmNwQWRkQ29sb3JCdXR0b24pLHgoMSksYigibmdJZiIsaS5jcE9LQnV0dG9ufHxpLmNwQ2FuY2VsQnV0dG9uKSx4KDEpLGIoIm5nSWYiLGkuY3BFeHRyYVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbeW4sWGUsTm8sbDllLGM5ZV0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7d2lkdGg6MjMwcHg7aGVpZ2h0OmF1dG87Ym9yZGVyOiM3Nzcgc29saWQgMXB4O2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgaW5wdXR7d2lkdGg6MDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAwfS5jb2xvci1waWNrZXIgaW5wdXQ6aW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnttYXJnaW46MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY29sb3ItcGlja2VyIC5hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTk5OTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjojNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXt0b3A6LTIwcHg7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9we3JpZ2h0Oi0yMXB4O2JvdHRvbTo4cHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3B7Ym90dG9tOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9tLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1sZWZ0e3RvcDo4cHg7cmlnaHQ6LTIxcHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHR7dG9wOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5jdXJzb3J7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6IzIyMiBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOmRlZmF1bHR9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE2cHggOHB4fS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7cGFkZGluZzo0cHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtib3JkZXI6I2E5YTlhOSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXJ9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjhweDtmb250LXN0eWxlOml0YWxpYzt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4IDhweDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7ZmxvYXQ6bGVmdDtmbGV4OjEgMSBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7Y2xlYXI6bGVmdH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxcHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzU1NX0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2Zsb2F0OmxlZnQ7ZmxleDoxO3BhZGRpbmc6MXB4O21hcmdpbjowIDhweCAwIDA7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC52YWx1ZXtkaXJlY3Rpb246cnRsO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSl9LmNvbG9yLXBpY2tlciAuYWxwaGF7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd1lRbFpNYTNnQUFBV1ZKUkVGVWFON3RtRUdPNmpBUVJDc09BckhnQnB5QUpZR2pjR29jeEFtNEEySUhwbW9XRTBlQkgrZXptRmxOdlUwNnNoSjNXNlZFZWxXTVVRQUlJRjlmNnFacGltc0ExTFl0UzJ1RjUxL3UyN1lWQUZaVlJVa0VvR0hkUFYvc0ljYklFSUlrVWRJLzlYYTduZXl2NjErU1dGVVZBVkNTY3QwMFRXbjJmdjZ1MytFY2ZkM3RYenkvMCtuRVV1K1NQam8va3F6cm1pUXBTY042djk4WGV3ZkE4L2xNa2lMSjJXeEdTVW9wY1Q2Zk02VTBOWDkvZnJmYmpldjFXdGZybFpmTGhZZkRRUUhHL0FJT2xuR3dqSU5sSEN4akhDempZSm0vVEpXZEN3cXVKWHNlRkZ6R3dETk5laUtNT0pUTzh4UWREUWFlQjI5K0s5ZWZlTGFCbzlKN3ZkdnRKajFSakZGamZpdjdxdjk1dGp4LzdsZVNRZ2g5M2UxZmZNZUlwNk8rWVFqaG8vTjc5MXQxWFZPU1NJN04vL0srNC9Hb3hXTEJ4K1BCNS9PcDVYTEorLzNPbEpKV3F4VTNtODNvdnY1aUdmOEtqWU5sSEN4akhDempZQmtIeTVnZjVndXN2UVU3VTM3alRBQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjE4cHg7cmlnaHQ6MTJweDt3aWR0aDoxNnB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcn0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeSAudHlwZS1wb2xpY3ktYXJyb3d7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7bGVmdDo4cHg7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3ItYmFja2dyb3VuZHt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjEzMHB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU9ZQUFBQ0NDQVlBQUFCU0Q3VDNBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a3NQV1I2bGdBQUlBQkpSRUZVZU5ydG5WdVQ0N2dSckFITitQLy9Pci82MVk1d09OWjdtWjF1M1hBZUxNakpaR1pWZ2RLc2ZjNXhSM1MwUklJVVcrQ0h6Q3BjMk1jWW83WEd2M2V4N1VpWmQ1N3JqeXp6dit2KzMzWC9SLyszci9mN3ZSMzg2WStUdktOY2Yvd2RoVExQY3Y5cVUyd1pkNzR1dGgwdDE4MjFqa0laTFBjc0kvNm5XYTRYdnV0cXVVMFo4NW1ueDgwUy9aemdwbkxuT3RITnQ3L29meDFUS1hjU056Ti83cWJNUTNqdTdyTlFtTVlZZC80czJqOWFhK1ArZ0dhTWNacmIxTS90ZHJ2ZjcvZDJ2OTlQOS90OTNPLzNjYnZkeHUxMkc5ZnJkVnd1bDNFK244Yy8vL25QKzIrLy9YYjY2YWVmeGwvLyt0Zng1ei8vMllLNUFsMnJndmY0VXNicGRHckI1MmJBdkFyWHB1emptaXFBVlNHejVlRG1HWVh6aGJBWm1Dcm5temRkcFVVKzhZMWRBT1llWEN0RFV3VndWN1lDR0g2dUFteU1jWjlsNXZrVWFCUEdNVVo3L0o1dy83OTIvZnZ2OVhxOTMyNjNkci9mVHhQRUNlTUU4bks1ak0vUHovSFRUei9kdjMzN2R2cmxsMS9HUC83eGovRzN2LzF0L09VdmZ3a1Zzd29uZ2pkT3A5UHpIM1UzRDN6bVdHblpWWG40akNxczd3QzJCS1A0Lzh0QXprWnNvV3g2WHJxZUhaeW12cDRBQkNCSmhUUXdLZkRUOGd6clpDSXFpNUFoaUFDakJmRUIyclA4L1g2M01NN2Y2L1Y2djkvdjdYYTdiWUM4M1c3amNybHNWSElxNWZmdjMwKy8vZmJiK09XWFg4WlBQLzAwL3Y3M3Y0K2ZmLzc1SlN2YmV1K2JMMldNTWFGYkFscEJOTTg1UVgrY3Q2cW9TcWtQQXd1UWxCVktxR05GU1VPQUEzQm11N2dDNWhOT2QxNW5Td3ZBT1VXN0M0Z2lVQ1Y4U2duNUw5aE5GSXFUc3AwR3hJMHlzaW95akFqa1kvdEdKVkVweitmeitPV1hYKzdmdjM4Ly9mNzc3K1BidDIvajExOS9IVC8vL1BQNDlkZGZ4OGZIUndybVRqVjc3OUVYdTJweDJ4aGp3dGRKWlFjQVdRSVBMUElTc01KYVN3aUQ4Z3pJS3J3U3lBVEU1ajVuQWJSNWMxZEJVd0Jsc0VXVzBoNkxxaVlzcUZQQVF4Q3lSWjN3T1NBUnhtbFhNWDVrNjRwUWZ2djI3Zjc1K2RrK1BqNU9IeDhmNC92MzcrUGJ0Mi9qdDk5K0c5KytmUnNmSHgvamNybVVGTE8zMWdZRFdibHhSSXMvVHFmVDdvdXN4SnNBeFhBMkdjN1RBOVhkZ2Zkb0hiRnNqNzZYMisxV0FyZ0kxYWdlR3dBM3F1cHFvSHNtY2JJNkZ1OTNxdWdnRmE5ZDdMZUR0Z0tmQUZIQkorTkVCeUlrY0o1S2VydmRUbWhoR2NnSkpTWjV2bi8vZmorZnorMThQcDgrUHovSDUrZm5tR0QrL3Z2djQvdjM3K1BqNDJOOGZuNk8yKzFXczdKampQNndyYU1JNUU0Ulo4eDJ2VjVUU3drcXVvdFY3L2Q3VHo2SEZXc0QvcU5jZHcwQ1EzcS8zMjFjNjg2VHdEVklkYnV5NzN6TmxkaFNIYjhJMmtsWnpubStJbkJTNFU2bjAzMDJhQkZzTGhIREFLSlZKVmdsZkk5amh2dTUzVzUzc0xBTllOeEFpREE2TUNlVUh4OGY5K3YxMmk2WFM3dGNMcWNaVzU3UDV5ZVk4L2Z6ODNPY3orZm5zU21ZVXlrbldFRzg1V0JzdDlzdHpTTHlNZGZyOVFpMDhpWTE1VVowTGxER0xoUjNvNXpLMmo3T1BVVEQwRStuVTN0azdYYi8xNk5GYmhsb0FNdVkxempMVU9PM0JLZUlEZStaOHMzL0o0Z0ZvNFRNNWpQbXVSZzI4Zm9VS0tWU3dvMTZUZ0E1bnB5d2NXTEhnWWwvUHo4LzczLzYwNS9hYjcvOTFtNjNXN3RjTGllMHNaajRtYW81Z1R5Zno4OEUwZjErajhFY1l6d1RQRUcyY3FqeWZITkYwTThmdXFFaWFPVm5SelpaUU5oNWZ3UXlIZy9IREdmSm84OVExemIvcXV1NVhDNjc3M0kyWEtmVHFkL3Y5K2Qzd3VxV3ZhL1lUZFVkRVYzZmhJdi9WaXlwczZZRTN4M3I0M0s1YkpRUzY2emF4VkdGc3ZkKy8vajRhRisvZm0zZnYzOXZ0OXV0ZmYzNnRmMysrKy90ZHJ1ZHZuMzdadU5MQmFhQ01nVXpDK3JaUmlGb3d4VXVKSThZTXFjQ3A5T3BxNXZhZ2FZVTZsR0pBMVhRcWVqY2h3NkNqMEd3NW5ZQnJHdzAxQTJPMjA2bjA0QkdvdU5OeVRmcC9Gd0VsaFVleTZuWHJJS3c3UVFXZGR4dU4ybGRMNWZMODM5Z1NQRjhhaHUvSnZCTzQ4Q1BTdXFNZjhWcDkvUDUzTDU4K2RMdTkzczduOC90ZnI4LzM5L3Y5L2I1K1RraFBKM1A1Nm1RNDM2L2orL2Z2Ky9pU2diemVyMCtBWngvNSs4OGJ2Nk9NZGE2UzV6NmtkMjFmWUM5ZHh2N2NJSkoyZDlBT1MzMGZQTXp5SGlUTThCNERGNlhVbFlIcDRLUVczVysxdDc3TU5CMXZHSHhXcTdYYTd2Zjc4K3k1L041QStIMWV0Mjl4dVA1ZGJZdHlhUnU0QWtzYlBxNjkzNmZqUnpYUnhCYlByL2IrYjE4K2ZLbGpUSGFCQkJmbjgvbjAvMStIMSsrZkJubjh6bTBzQjhmSDV1NGNyNUd1QmhNVmswRUVuOVJzY3RnVmhNK2l4bEp0TUEyM1I4QjZ5eXNBc3RCT2dGWElLS0NNSWdUb01xTkV1MmZZTUg3enRjNzMyZFFLa0NqMXl0QVp0WTBLeDhwSXI4R0dKK0FUM1YrMkhpcmhsKytmQm1YeTJXejczdytiMTdQOHArZm44L3RVd0dWbGVWa1R5VWI2OERrZmF5V1k0enhOUmloVTRFcExKUFpWcksrdTdKNC9tZ2ZLcWVMVzlYMlJFV2xJdEwxZGl5bmJERGIzK2pYZ1lqUXFuMHJyeFdjK05rSUxQN0Y3eEliTXZ4N3ZWNTN4NDB4bmxiV0pGMTJaU2FnL04wcFc2dCtaem1PTXpIamFqS3dEZm9uZDc4ellUZGZxMTh1cDk3enIycTh2M0lpb0JwclJ0QmwwRVo5b2c1V0JSR09kT0hqSWpYRjdVb3RGYmdPV25YeklKeXpZdmpHNUlZZ3NtTU94SGt6OE9zTVNyVk5XZXE1VDhEYU9jYkV2MU9kNXJiczlhTzdZdk1ldDYzRWtGKytmTUV4cStNUmw0L0w1YkxaTi8rZXorZm5aNkthenVNcVhTUVZPNXNwSlhmbEhBSXplcy94SnNlY2tSSmlETW9nOWQ2VmZScnFYTXI2S3BWVjI3alJ3SmFjR292T0FNMXpNZFFNbndLMUF1Yks2M2tkQ0NodkkxQzdnMHo5bmYvRCtYemUyVmo4SDdHeDRQOWR1UWxzWUNycXlOOFhxRzNIbS8xME9qM2p3L24rY3Jsc3R1TStqUG1teFQyZFR1UHo4M1B6dDJwbjFYc0VIWC9iblBhVnFWbWgweHdPdDBvNlhMTEFIZVBVVTIwM3dIZmNyc3BDd21WM1RyeUI1czBNc2VlZzk3eC9Cd3pDakJsYkIrcFJBUGxhMEJWUXVUNlY2UUhkQmxqM2QwS0cxNDdiK0RxeFFlVXltRE80M1c0ZFFhcitUSWp3bUFkMHo4L2g2NXZmMC95THYzUGI1WExwcnUveWREbzlzN0VUMEkrUGo2ZEtLOVZVRUllS1dRV1BBT3JKOExLZDR2RSt0OTFZM2U3VUZsV2F0ZzJWd0puYitIUG10dm0vc2ZLNTkvT2FXRjN4L2VQMVVQSHZBNUREWURwWVhmYjBkcnYxVjJEa0JreHR3L3RFV1ZWbFhXZEM5cEZZczUvamZoOWRTLzE2dlc3czZsVEcrVGZxc3hTSkh4a1hYcS9YZHIxZXU0THNmRDZQM3ZzVDNONzdEa0wrelBtNWpTZEtMNHpSM0F4UWQ2ckhrTGtZbFNvd3NycTd6bnp1NndTd2RzTUpPWG1BNWZCY2p4dGdNR0JZSGxyNXpva2h0c01DVGdYTFFPVzRYQzZkRXlFTXByTDhtQVF6WFJnZHVpeDJ5WnpvcnhrWXNEbjNoQjFWZU1MR3NYc1Z0Z2wycFc4UzNzdmswdnc3UjRoTmFIdnY0Y0FDbDVIRnp3SUgwS2M2enU0WGpEUFIvanBBVnhXek8xWGsyRERiM3ZUY3hlR1UxaVdaSGttSURXemlXS3ZpckNKNERyYXZzNklKL0dHNmNUcVdkWER5K2ZBclFEVlZrTHFrVmpBb1pJSVRkbW1JcVh3cWE5NU4zK01HWW9aUWRSVk5PNTNZMXhSa2hPMTZ2WTdldTUwN0NhOWxKbmJHcHhPZW1RaFN3L0FRc21tcDV6VTlCaVU4RzZ3dlg3Nk02L1U2UGo0K2RvMEJ6NENwZ2lrblRVZURxd2xLQm1nM3U0T1ZqcloxQStyQWNnYWVqV3E2ZUpDdkNZRkRPTlN3T2dIWDRFUVJ3OGx4YnpET2RFSzZnWjNIazFiKzhnMm8xSkZ0S1h5di9mRWRUWHVXaldYZEFaaUJwNkFEZURyQ0ZpaW03QjZaRm5lZUk3R3ZtL1BNa1VEWDY3Vzd4SThiMEQ3L3Y4ZEE5cWZONW9hQ2Y3NFdaakgwbWYxY21mWTFZMEpVRm1WclRXdTh1emtOY0x0RWo3dTVGWEJUa2ZDNkdPQTVxOFlNeE84S1Z2RjZzQVZHZGNyVWJzS09EY1FLa0xNT01kbWx4dW02NDJZclBtMjZBbGhaVzFZQjFSK3JyR3N3RThUYVlBV2VVTXhkZitXandTdloyRWYzeXRPeWZuNStQcFZQQWFxT240M010TkJxdm1qanhiak00bFpqWlk0Z3FOTUk1a3RhVy9zWUtOd1MrOWxGUXpHaWhtTUNLUGE3K1owVjZFYjBHUm1vYnRwWDhKbGpXdTVGTUxONWphNmhHOWt3UWdacWY1KzFOSDVVeHprRlJlQ2RXaEo4WGRsR1VreE83SFJsWVJtNG1WTzQzVzd0ZXIxMlRQSkV3L3JtRU4zTDVTS0hJV1pnOW16K3BVb0tPWXE1YkpUSmRYMmdtZTFVY3hNWlFGYUVRSWxIY3QzMk0rWTFCekdrR3V6Zml5QU45eit1Z3BsWjFzeW1DckRDWVlrR3hEVHBJOVJ6Qnkwckh5ZURVQzFuV2FlVWFEOW40eGtOeVlNQkRadHpaM0IrK2ZKbFkyMVhGRE9jQVJKbGFiT3lpUzN1Q3BMSTlqclpqQ0RrYVZ2Y0NDandvZ25LU2hXZHpYWldsWk12VlRnRDhMcHFsQ0xycWdiY0IrcVl3cmdLWXBUMGNjQ3FiS3lDVmFsa0VhYm4vRnlub2dDclBLZnFmNTF4SjdzR0IyWlhjWm14b1NPenRqeDMwMERaaTdhMC8yQUlSMFVsQmFnOVN1RHc2S2NBemxhQjd2SFp2V3BqSzkwZHlycTZiS3lEVVpRYlIwQjA1YmlMUWtISWNTVW1nSUsrU3d1cWdIQ25vaW8yUlFVMXlqK0JuQnk5cHBoVktMR3lDN1p6RksxcHhXSytFOEloVkNXTE4vdUx0blVVNGF5b1lMb2FBTno4RmR0YVN2WTRwVjBCRVcybHM2MWN6cWxsQktwVHlLZ01BaHJaMWNkYzFSUk90UG12V05rZGNLWjdaS3hhV2ppUExKTXBwN09aS3hBK3JxRy9vSkxqeGYwcG5KbHFMb0RabzNneVUwbUtHeXMydGFLZWNqL2QxQytySlNwbEJxbFR5QXFnUitEOEtqS2xtUkwyZ3RVY0FkQ3RzTCtpakNOVDFvcXFxa0gyT0hFYkc1c0RGblVnNUFhK3lMb3UyVlUxcHRqMVMyWlFxdjFPUlpOOUlXelJmZ2FSQnhLb0JFOFVXeXFsSkZ0ckljMEF4TmpTamVkOTlDVFkvWERmU3pDejVNMElab1ZFc1duUEZOVHNsOG9vVkMxVHpiR2dxRlpORFNnVndLSysxc0dETUtxeFpDV0dWTUR5c2lFcjFqVlNRSlVZd2o1aUhPbFRoZEh0NDRTUWc5Q04rbmw4RDkwTk1JZ0FkZ3I0NkpxUmlSOUk4dlJkRnZicjE3bS95eFVNS2pOTE1pVlVBRHd1MkNXR2hoaStGNTVUV005TTljb2d6bXMxZG5NNHVPRi9MQUVZV2RjcW5NN3lGbXlxM0lmd21PUk9kN1kxaUZXdE9qb1k4VG80MW1UVjVJeXNnRkZ1UnpzYldGR2JOSUlKQ0R2MWRPbzRsWkc3aldCd1JGdFZUS3VXeWVDQnlKS09hbjhvWjNlcDlYZGRObDB0RHVheXdMejljWFBZZURBQTBTcGtCTzlzYlZjVE9WV2xkUHY0dXl6RWt6eEh0anZvbkhvU2tGRVdOb28xZDhEaGNRcHV0ZDJwcE5vbjRCem9BaUoxaEJGUWcwZFZ0ZGJHSEhEUVd1c2htTkVRdWtMTTJRTzFHMlk4YmdUWHFGaGNCSmo3RWpQZ2NQdHM4VVM4cVBwUEIvZFh6bk9oNVo0Mzh0ekg1ZWM2UWdyT0tyUlJmS215c0JtVURCK1BoWWFiTWxWUEVSK0dDU0lUVHpyN2FtMnRBckgzYmdjRXpQSm0rY3I1ako0Tm5ITkZEVnJGWGNJNUxlOWs1Sm53K2JlZGJWK0ZmUnpaSUhhT09hT3NMWTAvN1VHczU4RGpyR3dLTUlNRklHek9FVzEvakdzZEF0Q042aEVBSTRoQmU5WVhlUlJPQlNWUEFWUEFxdklNNWJ4NWhWS1dBTVA2ekJSeTNpZXNjcmlkVmRGQmluQnhYRG5HMkdSWTJYYkN2cDFsaHZHdE85Qnh1NWg5MDhYUXU0MmxuU0FyTUZkaXpNaW04dXdSQ3hQR25uT1M4bHdwbmJPaURxVEFqc3JSTi9QY29BU2NDYmFBQ3FWTTQweWxuampUQnMrYndXbEFHMjMvVUtiZGtpd0tXSVFQR3pXYWN6cG9TbHhQRWo4MjJjTldrcFM3Rnl6c0RycXBmZ3BHM2phaHcydmdiYVNRQXh1TFdaWXQ3Snp5TmU4Sm9acE5BY3ZERk9kdzB3cVlUOUFLMXJaei9EZGJTbExQcDByeUl4Z1FKbEs5QVpsRXE3SU9YcG9oZzlQSWhyQ25nODhKc094aVY0WldBWWZnNHNpa3gvOGt5Mlo5bDg2MnVxd3Jmc2NJSDgrdWdUbVZHeWlkZGVWWVVnRU1uNEdaemcxNEV3SXNoOXN4MmNLS2lXWFJldU9FNWd6R09RZ2RsUktWVmRsZXZxYjI3OVhxMFFuc3RzMlZEYUJPMGNvZXpzcnVXdEhBcHU2c0tHNElCaE4wYUdVMmtMck1LR1JUTjNIbWJDRHdLVjE0enZrTUVERzRRZlpWc3BWbGFOVTJtaGM1VEVaM04xaC96cVRoZXVMcFcwNVpXVEdWamIzZGJuTm14S1pCbk44SnFpZGFWTEtBT3lBUk5MUytNQjU0WjIrVmFxb01MS3JvVkJsbmdlZm5UUEFjb0hOV0NTdmxmQThDSTBIRW1CTkJuQmxYeU1yelU3QTdXVm05NFBQcVEyZ21xS3grV0RHc252aWxtY1NPQkpxT0sxbll5QUl6dUF5ZXNxM1VkU0szS2ZXY1lLRDk1SG1mWU9VM3FzZXIyQ3RZRVVBK0ZwZnFkTnZnUEJaVUJoRHJHT05SVmxRc2g4ckxjYVVDeWtIRzBPT1V3VGxMQnJzaDVzb0VNR2V6aTFFNEhSVnQxaWNwNXdaRUZYZGliQ2tHOFk4dlg3NXNiTzRFMGlvbTl6K2hqU2lPZnkzRGhwWEl0cFZoRStVR1Fkdm9XanRDaG1yR0hmNFlBektnQk5uR3R1SnhGQ2VHZGhVQWZRTExLOGtCWUFQNmd2RkpaYWpNRzNYa3ljeThLdUMwcTRFeXltd3R3ZHhkdjJNMG1JQnRLMExLbmY2NDBqMDBBdXE0Z1VrZFdHbGhzMjJxSmM2ZFpDc0wxOW94bmxUSkc0U1lWUklHcEQ4VFBGQnVNNk9FbGJTMXBsZGlkNG1HQXlONlpJdXBiQzViWEpOOWZkcGJUaFN4TFVhSThJRzFYSVlCeFczVGpzNktRb3NLY3hmeGNRbWRud1JHTTEwR25GY0N5MlhZdW5MTXlBa2RnazRtZVBpY3pzTHlndGhjQnV0NmdvT3FTN1lWRlhBRExqYW9zQjZzNm9mY1pXQVpTSVJZcVNVa2l6WXd0dFlhYjN2VU9ROXcySFJ4SUlnOFd3UlZlRTY4eGk0VXRMM3pScGh4cGx6d3VacmNxWUNxMUkzalBJNWRuSkl5Z0VvaE1iUHFWSlN6cnd6eEJKVHM1ek4rUmVVU2d4aWtQUVZGM0pWQmVOUXhiSEVOckVNTnZFZEZaVlY5bEg5K09SR0VzTlpRcHlUTmM0QzNBRzdYRjRuZ3pxK0RyTzJ6YnVhYU9YZ2RhRmNka0VvdG9TRkJWWDJxSjBDOE9XWmVHNEtHbHBnaEEwWGZUT1BDcVYycXF3UTI2UVdmRjJQTUxoSTJ3MWxWQWEyYVBzWWQwemEyNU1RUndnY1pONnVRRENpK1p4aUQ0WEVNMmtaeE9UNDFGblpuYVJsY3Bab3V6bFJxcWRiUVZXb3BRb1NCNThSVjUwbEJOckhpL0F3WFM1THJ3RFZscFkzRmMzQnlpWUdjNTJUcmlzdDZrT1hkd0luQVF0SnBwNVFjaHlhcXVZT1Y3U3UrZnhWTWFWM2RjMFJFMlM2bVVZMGdMdDJwTWNZcXJLSVE5dzJsMWdwUVVNdFFZY21tYnQ1RFROeGRoblVDalFxdGJLOVNVU3p2ckMwbW1oaEUxZTJGUzIrb3h5cHkvWkFTdXRrbXRqeDN2Y0JDMjRQWDY1bmJxa0JDUmhmalM5a0lZUG5lZThjTWFnVk9oSS8zVDFmQW1kdEFXWnNDc3dUSkNrUVZOYTBxV0tTS1BPcEhBVWhEOURyYlZjeW9Za3dxaHZoMTd2WUFheVhMUXlLR1lkeGxVREZwNDk0ckJYUmpZZ08xN0REWWV0TklVai9lenA2UzBsbmxwRXdzV21KTWtPd3NLWGVaS0VBaklIbjBFUUpJU2FSQmNPNlVNSU56N3AvYkVqam53NGZ0K3htRHZrc3hYNEcycklyaXM3cWFlS3dBRk1QMk9pN240Y3JpdVp3dHBTVXdwZkx4U25PUlNySXF1c2M1WkZhWHlzcVJXamlaMkR5QVdFSUwzNXRWU29RRWxGQUNqT2VHR1NFN0FIRVFnZG8vTFN2Q09nR0J2a3hzbURidmxTM0ZwNXZoYUIyVEFHcVJLcktLTXJoTFZwYUd6RVZqWjBPUXhEaGFDVEErUXlSUjFkMTVhUXpySm50TDNSaWJzaXBqRzZqbGdMNHlxYlMwc05ZZzFlODR2aGJCVnJFbEs2NENVY1dZWERmS3hocEl1eGlWSlpVeHNiTXkvdVJCS1ROUlE0a1EzTGRSWUxTMHJKalJQbFRQcVk2Z2RKc0VEYythUVhBbitIZ3NOVUNiUnVGME9qMHp3bkE3YldEa2JoTzVFbnMwMHFlUWhTMWxhQk1sNU0vY0FheHNMRjhyS3lxbCtUZjdFTExFR3UvaXhpaW1kQ3ZvMFRqZnBqS3dhZ2dlbjRlaDV2N0xva0xLYkx1eXZIaGNaRzhkaEdyRUR4N0hnOTNacHBKRjdxQnFPM2lWdmVYRURRTkluemVvZThZcTZlUGFaQloySnZpTTNXMlVBR290ZWtSQ0FHcTRFa0YxWDNET25SMTF5UnNCTDF0UmEwUFZjWmlORlhaMmMzNEZza3ZvbUluUVE2bHpwSm9aYkp4azQzTndLSkZCcXVKU3NyQnlIeWR4S09uVHhRQVNCbVMzaitKTW5zSFNsYTNFYzZLOVZXb0pWbjl6Zmp3T003aHFZQUFxSlF3RTJhM25BNDhKMlFHZWdSa3BaTml2U1kreXMzRWtLZDRvSkl3c3ZJSGwzY1dnTHQ1azROSDZPbXRMV2RwdXJPa3dFTXVwWWM3ZU10RFJoT2NJMnVpNUpoVkl6WHpMeXRvL0dBUHVab3lvOHdrb2R1VmdKZ2xDdDdPaEdiZ0lENE1xNHNpKzYzelVTMUZ1RkZYRmxxeWFqMmVtSGxMTWNCcVl1MEZNdVIyOEJiQjdsT3hSTVNpQ1FYRmhDS3V3a2haK3BZRGlHU2dic0tLVjhNaVNSc3VIU0lXTTlya2xSaUlsWlp1cVhqc1FLOG9vWUpNZ3EzSktXVmtoSGJoc1Z4RlV6dGhPV1BrWWlqY2J4NTRJS3NTZFQrdUxyM2NyR0t5b1lnRmlHUjlpQms0a2Zsb1VYK0pJbFFSUXFhYm1wZ25ocXRwUXBiNlJWUTFXSDVEbnJTNGhFb0dacWFlclEyZGhGYno4WGVQeFNobURibzcwZUlTam9vck8ydks4U0pYSTRTVW1FVTR6V0tEelVEdFdUWXc3eFhsYlNURWo0RlJnN3pLbktvR1JBTHYwR3M5VGdjMUJwQ3l3R1pSUUF0cVZ6MnhyQmNBTXpFcGZad0ZTYTJHNVcwUUJGalNNYXBXQUVGYTNIY0dON0N4RHpFQ3lJa0o5N3F3cnFXTlRXVm84NzZQUHNqUGtqMnd2Z3JvTTVsTFpLTUVUS1ZxbC9Ddm5XVkZpRmEvU3pKVVF3a29ac3I2N1k2dmxTUlYzLzJ0bU5UT1kzdm5heFl3TXVvUEtxZHpSMXc3SXFIeW1sUHhhQVRoZlU3S28yWlhZajRBWUpITCtrTmRLd1JRWUVTVFJhNWZzVVovclZDMVRNVHlXVnlZb3FOdHV6YUhzTXl2MnR2b2FyeGRmcXdZZ1UxYXhGby9jbnFsMUZHc3FLK3VBUk9WOEJYNEdVOFdjWlRBVGkycTdRY3lpME8wVitHaFdCTU5SVWtuOEgxU3NXVkU1QnkzR2kwRUNxVWVKb0JmQXREYTRhbWtkWEczN0FHUDVHZ2ViODRwN1VhenBvS1J6ZEZ6ZVE4SGtvSEd4cHJLeS9IcG01dDEycDQ3SjZ4VFlERXo3dUlORVhTdXhZWHZGc2tZQWMreVN4SDlzZjVmdEt6VTZJYndWQmNVR2c1ZTVGTUNFWFNFclpSMHdHYXlWMTl3b005Z3VQalRxSmRWVHFSNHVFNG5KbkxsZFdWa0VDQ1pMZDJWTEYreHRhbWV4N0lwaXJpU0RVcHZycG45bHJ3R01DSHlwcE1IK3BzNkxJTHN1RkdVajFYRU9YaXFicVNIUFVLbkNscFdWNjhrcXRVUlZORFk0VE5hb2N5a29ZZVRVNW5nR0VRYS9TMURubkU0QWVYTWNLakhQQW1GVmpDQkVOYWV5TFZOSGZyM3B4OHhVc3RKOTRoSXBmSDRIS0UvZURhQXJLNmxTeVZWRmJkdDFneFRJVmszcHBwVmxGWGk0cEVoVkJUT2JxdW9oVTg1TUxYbjFpYWh2VWtISmpTQ01jMDF0TEZ2ZVZWQngwRG9kTTZqZnRDdTdET3RJell4cmMwcXAxSkdQMmF5WUZ6MkdiNkh2TXJPOGNuR3RWNkdqbTN1SW1TZkQyR3BXSzZ1b3diWkdNeEZLUUNvMXBPTXRjTVhGcFJzdCtoWEdvQW9tRjNzU1RCR2dUZ2xiQktXd3NRM3RacWFZU3AwWjFDaW1SRFdGY0NKVVBZSjAwQkk1RmtLWU5vaWZ1UXhtTjg4U1dWWFdMTWFVcXFxZ0MwQm1RSlI2c2szdTlOQ2Y2allMWHhBZnFzWUVnVkxBaFJZMkF0Z3RmbFpORm1GeWh4ZHJMa0FkV2xrNEQ4OE0yaXhIeWVwSWRoTUhyRy9pUjFaR3RxME1HcGJEYlJQWU9YZVNZMU02Tnk0WnN0dkdTa3RLK1hiRlBBVGoyRDM3MXNhUEVzQU1YaFhyc1owa20vWFN0a2hoTXlCZnNhNnVYRlplMlZDZStZTXIxK0dLZ3dyUXlOWXExVlJyQitFaXpBb3c2TnNkTktjeVZFa1llTTczeXM2cTRrQUhwNkJpRmtsVGtJclZDNW9ZVjd1endPR0N6NFVKMFN0cTJsV01KeTR3dGIrUmV0TDZ0WkZpY25KbUJ3NVVqQ3ZYWE1aVkpYMk1Ra2JmK1hONUVXZDc4Vno4L0pFc01aVEJpS056c20xaW5MUlVRNzRINE5pZGFxSTY4ajVzQUZneGNSdmVDN2llTEpYZlFZeGpaWjJDc2lXRmV3WlhKbUJJbFoxdGR0clg0aFN1YXRlS3NvL1JaT3RPS1cybm1xMW9UemVLNmRSV0FXdTJOUlZiNGhxMFNYbTFHdnR1Z0hyYnI1SVhxbVNrdGc1Q3VERTJNU2xQd3NZNWtORTJXcDNBcWlaYldWTEF4aUJGKzJpQlpidU5qNk1CNnJzTUxDN0Z5YXNhWUR5bzdLa29QeUV0dzNwRU1YZlB2eEFKaTJqQVFRZ2pyejByTElaU1dabElvTmh3ZDV4SzRBUjltWU5qV0FhTHJudUltSmVCVk45ekJPUk9iVnZicittVFRmRlNFSkxTUm5IbzdoRUpvSWk4TUZxanhtdmdtRjVVUlp6NHpMRmdaWjhDdHUyWDdnZ1ZjY0ttOWdWeElzT0hxeFhnTk1LbkZXWlluZjFkQm5PaGF5WHExN1F3RmxXVzA5ZU5LeVZKRm1YcWFPTkdBNWFDZWdNYkozVVVrR1kxaWMzbktXZ2pxOHFmVllHUUcxZ1J0NnJzNjJhNkhpcXFVT3FkZXNLNU5tWDRuR29mSm9pRTFkMGRGOWxWVmt2VDEva0VFYWFDb1lPd0ZwY1Zjb0xNKzc2NjlQeEM5cldxa3RIMHNXVVlsZDBWQ3B1Qlovc3RWUmNHZ3k5V1gyK1UxUXRoaTlTekFxU3h6WnN5K09pRnpCWW55U0dWNkdrdTQ0ckQ4QkNPWkJWM0J2RDUrQUtSSE53TUVzQjZFekhuSnBrVEFlaVVsRUdrY0VDZUI2R0RaVHA1WUVKVGx2ZHJrbnhZalRsbE1rZk50WHdEak03dVZqSzVKWFVVbjQzcnJxcEsyanl0YXhIVzBNNUc4REM4cnRITVlzN0tTZ2R1VlFNR1RZRnFGdlZTNnJrRDNzREo0NmFmZFlGd29xMTFBT0tDQkxodndvVWdjOElHQU55Y1I2a25acmRKUGRzdXhueWpmZDNGb3ZUbFJNZEVkdE9sNUNNVjVFSHNYUUJpczdUT3d2SURaYUdqMlZucGJoN2NwSzYzVndZRU1Md3Fianp5bDY5OXNhd0ZGa0YxeXFqVVUzMUhmQzZzVzFaRlZGdVhWWFZnejlrZUVhdzB5czFsV2ZtK2F6UUFRU1dBK2hLWVZmc1pqUG5jQWNVQjlvSWF5eS9VWlhSTmNrREdqaTc3R3NXYnZCbzZ0UHJXUHFPeVZrQlVxK0lOZXFwek5kWXMvdTBpZmg1cW1wcUlXKzMzSlZTVWN3WTcwS0w0VTlsWWRVNmxqdFNsczdsbWZpOWczWXplUWZWa2FHRmFWM09EQ25hRDJOOHdzRURGa2xFM1J6TTNaZ2hkWWtXSHNzenE3MEZJZWNuS2tWa3Q4ZXpNelJxOWJrR3VLb2pSTEJWU29kM1kxeVBxS2dZVzdKUlFUUFZ5eTV4SVlMak9neGdUNTJSS0pVWTFkT3JJaVJkNGZ1dFF4L0E1QWNTbUVqejB2Rldya0x6dmJXQXU5SE9XYkdneEZrMVZOVHBuQktrNlRnd2lzSS9IY3hZWFAxdUFXTzcyVUxGbEJUcSthU3UyVlRVczZocnhNMkNGK2hFb3IxVklBOVptRlVhYWIxbFNTZ1pzVnM0c3h6SGxWTG9KSHI5SDREaE9OVGtJMVhDMC93aVkyTm9XQUc1UmxuSEZucTZvTGNjcFFkZE11Si9PMTdKVkE1T0hMaTBCcUN6dHE3WTErK3VjQ2Q5OHFMSThNSUhCVi9jS2p4UVRtZTNoRkJTM015Q3FuRHN1eW0ybzgwSGp2RkZUdHJVUm1OYUdKc21WYWhJbWpUc1VYS3RRWlRBVnM3TXZ2OC8rZnpVclpBWGNMSjZNNGtvZTZYUDBiNlNtV1dORHp5VXBROGJsK0x0V3g0dHVxWjM2Y1JZVjN5dVZ4UE53dklpcWlRQ1NtdTdzcmdUelI2bmt5aHBDYXJYd0Z5MXZHZDVpUDJjWTA2bEZyNU5qaGhnMVk2K05CMjhmdGJLODNzOHJmN2tMSmJLd0RGUGJMZzI1YTBBZFpKRWlxcjVwaGl4S01EbFJVdGNzc3ExaHJpTHFHb0gremVOZ1ZtOU9lbWpzRVRWOEpkRjBOSG5rSUZ4V1kxT0I0WXJwN3J0V0o3TmdBQUFQWGtsRVFWUTNvTnM1bnBseVZmOHUyRm9MdTFKckh2ZWFaV1FqcUFrc2h0RmEyZ3pzU0czWnBrYnZnM0hhZkY5c2xQUGxsZGpGbEs4MEd5c204TXI0TVBobmVOV0VOUEdqQUlwbWlsVFBBVGRUUlRYbENCWUhZQVF1UHdBMzZ4SXBXdEdONHEzWTJNaGlHc1VwdVNTbmxFSlJEOFBvckM3Q0ZZVncrRjUxcVRoZ2FieHNUeFd6Q0dZMFpTc2IzbGZxQXkwT1BOak55OHhpUVFLc0hZRlEySEJaVnZWYkJ1cTNtMW9XS2FqcWFvbnNNNnVaVXI2Q2pYV05aMGw1RTNoM2pVUm1hNmtQM01KSWl5MUxtK2thaFFxNDFOMmlaamE1c2p0bExZTlpIWnJINnFVR200dk1iRHA2UncyQ0ZtdnV5RmtyQmNDeU10RnFCYUVDbXNIb0s5QloyTEEvbEpjUnFTYURxbmFXYnJaZEdhejNETGdJdkJsbjR3b0d6dGJ5Skdxc2x3eGtoaEhyVGpUWUZYQ3RPb0tTOHVMZG9mVmRBYk95bEdVNm5sWXBYV1p0czRuWEJxNld4Sml0TU5va0hVSm5ibkpwbFFtK2FHcFkyYTVHTVYyUUQxaFJ1YkJQRktkdW1mNU9Ia0xIejBGOWx1RTVrakJqUmEwbkZFNUNVR3FIdzMyTW1qWjZ4a2dJTlZuU25aMVZaU3RLMnFLbFJhTGxRZ0s3dVRxN0pGWEp3TSszU09FS3loWk5JK3RKMEk1cU1ZeTlrMnFKRDdkVldkcUtYYTBDS05SMENjamcrQjJJWXUyZmNCWkpaa01GZ00xMXIwWDkyd2lsZ2hGR2d6Vm5leGxxQjd4TDltUzI5U2lZVVZZMm5YT1pqTkJSc3lEc1FQUldXNWhyWjRYY2RDNEhWV1JiamdKcjRzRm9mSzVTempRN3JoSTFVZWJkUGRFYmo2c3FJdlRaUVo1dmEwOHJBQnNBVzBVeGVXeXRBazdBMktKOVpweHpDaW9CMjRYRnRZQWVYWXhyNmFuU3FoTGdwcEVxV2JHd0x1blRnclYrSWpXbEwyOWxqYUFsNEVRTUdzRXJwNGFwZVppcXV3UlhMWEFxT0NlcnUzMm1teWRjNm9XVFNXcEZBR2R6ZVRCOFJUSFZNRXRsTTkwQ2JiUUNZaFBqcTNlZ1lyMUZHZFlJUWppdURHWjV6Wi9Bem9iS0dPeUx4dGk2YzRSd3R2MmFueVdsTElDbmxMaHhKUlh0NkE1ZWJEQldGTk9OYnhXWjJkMDJtbnU0UzlZRUNwZXBwVjF6U1dSQld4SFl6Vkl2MUNYU291d3FxWDNqQkJCRFpkWVFicFRRVzRaUWxTOHI1a0g0c3VTUm1nMisrM0pOMTB4MVBhQW1Fa210WWxFZGVHcEpFTTZrT3VDcUNSMjJvU3VqajVJVjJIZFQwemo1cHJMS1RqWEZBUGpkUWx5cTd4SUJ4QVFQNXlNY3pHNFZ4QUt3MG42aWxaMlFCY2UycEx1bGt1eHhxbm9JekZmZ3F5cWppbDlTMVZOd0JyRm1leWVvcHM4eU9qWlV5YlpkZlM4Q3VhVElKdW16czV0T0RhTnRMcEZEUS9QY0pHd2VMaG1lTDFuQjBLcWlVRFNjc2lVVkQ4OURpM0h0ckt0U1VMdzNSTGl5Z1pEKzdzRjhKVE9iZ1lzckd2RE5VRlJHbDFpeTBMbDFZa1VjMmFKWU1vZzkyMEk4cVc2WURDZzFNcWswSkhKRktYa2JnYlJyZUkrcXBZTk9aSHJWY0RVYmE3cGpzcGhTSk50SzZ1cGdSTkFWb09TMG11Z0JlTjRiSVpnSGh1UFovczFFTmFYNktzVnIrWU5yaDFOYjdpcFIwUEU1emJOUmVnQ2JySFJVdzZZZjA3ZExCSmwxZjhLQjlhczJWMW5OcUFzbDYyTEJCaGVod2FsZXJrSG1CMUpGSUVaS1NFdXNkbDVKUWoxbkpsSFhTQ0YzNDJnSjlDWUdyWGVsa25KSVhxVlA4c0QrcXRwbENSM1hIMnFmS3EweWdNcCtLblZrS3hObFo4bTJZa0lsVk1pQ25YVXdsN3F6bkJLU3ZRejNtM1B0Nm9RYlhPNWI1Rml4Q2gvZkh4VVFXL0FFY0s2ekNOcUtRbkw5c3l3cW1LdXd2cVNZelQvYVBWTk5wVnlodlJXMjFhcWNpQ3NqZFd2QndJTFV2aDVWeUN6YldvQzFwSmpKNjgwQ1dzbCt1ZEtCNlQ1UndHMW1sb2hubHBiZzQ3aXo1VTloYTBGR3RtUkxGWUJ0Tzk5eTk3QXAweitaRFRBb2c2a1NMWnNNSGcvSUZra2dwNkNwdlUyVTBjWVZTZG5ta2p3QmRPbVhieFRXTld6dUliaXBNaW9WeEVja1pFb2FoU09peTJNM0swamNDMUxoVkR3YXFHMFp2a2NXcUNuckc0R0l4eWtycWxiV2R3NkxReUJhWlI4SG1MUkloUVdzSHN3RDQyWlhWTE5rZjlsK0ZsVzBIVlEybHdGc0MvWjFGZHpsUVIwS2FQZm8rRmRmdSsvZHdWUklDdTFDR1I3QUVJaUFoYytBWlVGMGtPQmFQeG1VcWc0aTY0dlFuVTRuRkRZSjlOeisxZlZYdmVIOXFtcitrUElMeDhvS2NSVi9CRmJ4YkUwSk1UMGtTRDR3NkwvbE5ZOG9jc3FhZ1ZkVTNBM01qeGh4Y0d1cXpzUEg0aXJwYW93MXE2T3lyVmp2cDlOcGM1OUU5MUxsZGJvWVZ6SldkaW1XZkFXMlNORUtjRGFYMkZtQkxMQS91S3hsbWhoNjEzSXMxVVJRQXBiS2Z0dHd4TDAycTZPbng1cFF4U2JQb2pBZyt2NWhBbk42TEhWUkRYSXN2S3RSamlTMHFKVXlaVEFYVmJBSzgyRWxGSldhUWRWb3FVQzFVbnQ3QlZhVFF1ZE02U3VxZXhqUUpONCswaWNheHYvdXRiS3Y4M0VUYlQ4SDhnamNPS3hPSm1iVWE2T09WWGh0M2RGWTZySHY5WG9OekZMY2VFQTFvOCtwS20wTEFIUEhaMnJZS2pGcTBoZlpGaXhzcUhKZ0QzZUQ1bitVMGtiMW1GalhrbjJsdk1TU09zTkUvQ2RJQUtGMFN5dHE2dXJPSFVONWd3ZzRHWm9zZ2JtZ2dNNXVjcmEycXJTMklnMWNiaUJCY3hZemd6VUROTEN2TDhHYlpYTnA2T1J5M0xtUytLazgzelJJQUs2QTFpb0thMkk5TmFwSXVpVUZkZkM5NzY2UEZaVXRxVXI2S2JXayt6WlUxYS9acklYRXp0cmpUT2Z6N2h3S3ppQ2VYSWFyYUh0YlpJTXorMnBHZ2F6Q213NHFXQUZ2RWRob2RZcDBYcTBwVjdHMVlXWVdiTzRxaEdxNDIrWjhCWXRyTFd2bHVOUHBaQWVhRkZTMXZ1YlBnYmd4c3FjcG5BYXN6Qm92S2FGb0RROEJHdGpmVU9sNE5BRzJubVFWMDRmZUpndW12WDJmc3JRRVdaZ2hMMEpuVmRZa24zRE9aSWVSTjg2UnFQV0Ntc3ZHVnFFTVJud3hRQXh3UzhFTVlvM0l6bVkyK0JDY0xwNE1LaXV5dWhJbWFtbGJaRmNOb05sN3RwK1JIZDE4WmpRSVJLeVhkRlJoTjk4L2h5S3F3WFdObzdPMXdpYVhvSE4xMDhSRVpaV0VxNmdybklmanplZzhqZFJmMVhFTDRra1hhNWJCakt4b0thbGpCamVIbFZ4UTRHYXljcFc0bERPQUt0blR4SEF0T2Z6T3Rad0hBTTdzcVZYa1Y2eXU2a2FwMW5Ia1hLcVdGLzRYSHFqZW5OS3FCanBSM2wxY2gzRWpnMStFc2dkUWhzZEcwQjRGTTlzV0FWV3B1QXlpd1RQbGVaeHQ5VnlaVlMycVhmUmVXcVRBaWxwcjlBcG9XVGp4eW1pdDdOd1Y0SlRyaVp5T0E5QjBrN0hGZlVMb3VybUtZSFZuUlF2cUdMNUhNSGRxRmNSMnFXcG1jSzZlVHd4MmRpcFdydmlEaWxyK2ZLV3EzT1dSV2RIS3dBNGV1OHdqY2hiZVJ6RmlscWpqWk4zdWZDcGZrSjAvc2NWcG5ZazZMMFBJNzdseGRXQ1o4N1dpV203Qi9BR3F1UVNudWpHS3NCOENKbWlKcThxMXBLSVZXeXFPaVRLNjZyMThCTjhyNzQvQUU3MWZkQzN5UFMyTXhkT3BuRTF0bFZ4RDlKbVZPb2dnTityNFBqQVhWRlBhM0VnNWpWSkdGVlVHTm9sSDIwR1ZyVUI3Qk95U1dxNldxWVFkV1I5MnBjRk1ZTXdja2JTZ0NLQ3FENjdEaWlXdTFnOE1RQzlCeWZjRnFXMUwrakw3MTRxTkN1em5vU3h0MGRhMmd0V04xRzhGMEJLME5OMG51aW1lbFVGOWRJZEFmak80NFVUM0NqUUxvVWVMSEpGVE8zZ21wUnVJSU92d0JRQ2JxTmVvM3F0WjlpRjZ4VksxM0dSbG80enFpbXErQ0dkVGlSMXVSWThvcWdFMDJoWkJhNzlrWlhQTXF1eFJIS2xhMnNhWldONG1ScVpVajB2TENLaGtqS25xT1FITnVTWlZKb0t2QXFTMXdwRXF1dldEQzFCMnlwd3JDUHNSTUVQVlRPRE1MSk1EdjZxZUtYd2kySllWNVNxNHFLeXZnR3NIQ0xpdWoyalI1OVY4Z01xU0oyRkpaUlhFSFZSSGozc0ZQcmN0Nk9wcWxXMUdwYXRRZHQwR3Z3Zk02bjYzSW5zR1ZGaEpHYUJxZ3FxSVY2SXNYbGxaZ3lTUHE0UjNibnQzd2k1Y3YrY04yeXFRTFcxVDk1S1lWc1dXdEtrNGNCOVc1M1dRUWZsUVlSNldsNEhhSlpqdlZFMEQ1eXZxK1JLZ1pDczVxZEJFUDVzRDk0Y0F2UUxsU2dOYVNNQXRIeDg4QnVOUTQxemRGc1gzMHpLYmNzME1MRC9paGtwUXpsMHdpVHFLTFRmYkttQ215WUlDbkswSWJhaWVDNENHOWlTeUxRN2NJTUdRd2F1NlRLb3E2MEFwbDNXTjQwTFpwY2ExQ0tLSzlWUXl5SUVuOHcwRjhGNkNMMmg4bzNpeEd3QzdzN0VXekNPcW1jQXBZeFlENGpzQXpWUzBzbDJ0OThwQTd2cktvcGhDVlNvbmJZcGdINm12U24yNHBUQlY0c2R0VjNCdE1xNWs4MnkrSUFEdlVKMHVBbGtDVlR4SWFQbStVTnUvcWtWNEYxVHpIWENHclhJQXFJdEJLeXBxSzk5VnRBT1ZzNjRPNE9iWDdwSExWQ3BZSGNSbXd2TFI3VHZZQUtCQk41OExHVnpEdUZ6K2hRYldnbmNReUNaQWsrVmJzUFNvdWY5MzI2MWlaZ21mQ3B3UmJBdnFtU3FyaVUyUHdoamFvT3lZcXRJZWdWWFZpVHNteXRhNmJHeVNwWTNneVJycEl5QWVhV0REeHRwc1h3S3lhbE1ES05QN1lCWE1xRXNrVXNpMnVDOEZOQVB4QUtUVmZUMW82VnpNMEUwakYrMXJXY1V1SHZkeWc3dmdvRnBsWDhIcHZIcE1DT01SVVBIelprSW5zcWxGS05YL0VJTzUyRTBTeFN6T3dvYjJWbVJMVzVEMVhJVTByYmdNMUF6V2d5QzdmZThHN3hVQUsvdGFFQmF0N2x1cXR5UDdFbXNhSlFPajVGK21yblpmQ3VZQ2ZCVUFXd1NoeWQ2cE1ZL3ZBSEcxVXFPWXBiSS9neTVUMENNS20rVU8zZ0Z1Qzg1ZGdmRFZlZ3VQRGZJVHJJQkxzTHJjZ2RoM0NGZ0ZaamFLSjRJdjNGOEFORXF2dXhSMXRWS09nTG9DYTFqeGJvQkFrajZ2N2ovaWNGYkE3ZjRyZlJuUURMUlZpRzEzaTB2cUJRcllWcUJiQURaVDBacGlIb1N6dlFwb3BLSUZTM3NFMUhmQldsSFhkMEg3TG5BcnF2b3VnTXRsakhCZ1puaDNFb3ovQktqTE1MNFoyQXEwK2hFSnI5amFWVUJidk56Q0lVaXJvQzdBV21tRnc0bzVBSzNNdEI1VnlwWk1TRmdzMDVKeUdWd2x3QnFzRUdBQWEyWlUxQ2pVZXhYR3NFNHJLcmlpbEJ2RnpPS0tvM0F1QXJvRTZRRlFVM3U4WXBOWHdTNWsrMVRadDVVcndvdU40S2lVRXcrazNaV0RwMVJYSE5ScVhiMjFUczM5OTQ1eVpTZzNWblpGTlE5Q0YzWGVaeXI1RGdCWEtpd0NNYTJNeGVURFlYZ1AxRnNmOVFOS1pjMGs4MVJKazNyNkVRM3JDbUJWeUxMNzVFaloxcElWREhvRnRpT0FIb0IwQmRUVnlscUJzS0tLUytBZUJYSlZMWStDWEFTdUd2Ty9BdXE3R3VFakRmR0tnMW9LYTF6L2RtbWk5STlTVUdOaGwwQXRmdWxIQWF3b1lyblNrbU5YQVZ1R0VockVWWHZVRitBNUN0MlBxTk9qRGV0eW5hNENtZVVvbG1lWExONEFxN0M1U2oxMFE3eWpnbCt0NkNOeFNSSG1JNVgrQ3B3cmVZQjNRZmRxbmE0cTIxS2RCdWM0R29ac240OVpPT2lWaW53SHFLOVd6anZnZXdlRWgyQVU1K3Z0eFo5Q2Q5V3FraDQ5VjE4RTVvajZ2VnluMFJTdEF5R0lPNWVkWFJLZDVCMFZHVlhxMnlyM3hZcCs1VXQrQzRRSjRQMU4zMzlwUU1qUmVqajR2Yi9EY3I2clFjM08vMHJqbXRacGVZQ0JpQ0hmQ2VtUmJOaGJLL3BOVVBjM3dmS3k1ZjJEN09sTDMvdVBodmUvb1U0VDBGOGYrVk5NMnZ5b2l2MGpLK0tIUWZkSHErMGJuY3o0b3o3My8rWTZMYkt3MW8vNUI3ZU9mMVJsLzBkdTlCOXRuLzlidnJmL2ordjBoNnR0bjJ0cC9yLzQ4MTl5NC96djUzOTF1dnp6ZndEaWZ6NnBoVDFNUGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmU7cGFkZGluZzowO21hcmdpbjozcHggLTNweDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojOTk5fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTVweDtyaWdodDotNXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2NvbnRlbnQ6IngiO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozLjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweH0uY29sb3ItcGlja2VyIC5leWVkcm9wcGVyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7ZmlsbDojZmZmO21peC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn1cbiddLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFhjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLmluamVjdG9yPWUsdGhpcy5jZnI9aSx0aGlzLmFwcFJlZj1yLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPXMsdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcEV5ZURyb3BwZXI9ITEsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwVG9nZ2xlQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgRyghMCksdGhpcy5jcFNsaWRlckRyYWdTdGFydD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlck9wZW49bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNhbmNlbD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlclNlbGVjdD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgRyghMSksdGhpcy5jcENteWtDb2xvckNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFByZXNldENvbG9yc0NoYW5nZT1uZXcgRyghMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KGUpe3RoaXMuaW5wdXRDaGFuZ2UoZSl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKGUpe2UuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJihlLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTplLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSxlLmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKGUuY3BQcmVzZXRMYWJlbHx8ZS5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgZT10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7bGV0IG89dGhpcy5pbmplY3Rvci5nZXQodGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0sem4uTlVMTCk7byE9PXpuLk5VTEw/ZT1vLnZjUmVmfHxvLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWY6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1sZXQgaT10aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh1OWUpO2lmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYpdGhpcy5jbXBSZWY9aS5jcmVhdGUodGhpcy5pbmplY3RvciksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNtcFJlZi5ob3N0Vmlldy5yb290Tm9kZXNbMF0pO2Vsc2V7bGV0IHI9em4uY3JlYXRlKHtwcm92aWRlcnM6W10scGFyZW50OmUuaW5qZWN0b3J9KTt0aGlzLmNtcFJlZj1lLmNyZWF0ZUNvbXBvbmVudChpLDAscixbXSl9dGhpcy5jbXBSZWYuaW5zdGFuY2Uuc2V0dXBEaWFsb2codGhpcyx0aGlzLmVsUmVmLHRoaXMuY29sb3JQaWNrZXIsdGhpcy5jcFdpZHRoLHRoaXMuY3BIZWlnaHQsdGhpcy5jcERpYWxvZ0Rpc3BsYXksdGhpcy5jcEZhbGxiYWNrQ29sb3IsdGhpcy5jcENvbG9yTW9kZSx0aGlzLmNwQ215a0VuYWJsZWQsdGhpcy5jcEFscGhhQ2hhbm5lbCx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BEaXNhYmxlSW5wdXQsdGhpcy5jcElnbm9yZWRFbGVtZW50cyx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyLHRoaXMuY3BQb3NpdGlvbix0aGlzLmNwUG9zaXRpb25PZmZzZXQsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93LHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcyx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzLHRoaXMuY3BPS0J1dHRvbix0aGlzLmNwT0tCdXR0b25DbGFzcyx0aGlzLmNwT0tCdXR0b25UZXh0LHRoaXMuY3BDYW5jZWxCdXR0b24sdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0LHRoaXMuY3BBZGRDb2xvckJ1dHRvbix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0LHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BFeWVEcm9wcGVyLHRoaXMuZWxSZWYsdGhpcy5jcEV4dHJhVGVtcGxhdGUpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT1lJiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZChlKXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQoZSl9c3RhdGVDaGFuZ2VkKGUpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdChlKSxlP3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKGUsaT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWksdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KGUpfWNvbG9yU2VsZWN0ZWQoZSl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KGUpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7bGV0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIocj0+cj09PWUpOyF0aGlzLmNwRGlzYWJsZWQmJiFpLmxlbmd0aCYmKHR5cGVvZiBkb2N1bWVudDwidSImJmU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50P3RoaXMub3BlbkRpYWxvZygpOnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zaG93P3RoaXMuY2xvc2VEaWFsb2coKTp0aGlzLm9wZW5EaWFsb2coKSl9aW5wdXRDaGFuZ2UoZSl7dGhpcy5kaWFsb2c/dGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUudGFyZ2V0LnZhbHVlLCEwKToodGhpcy5jb2xvclBpY2tlcj1lLnRhcmdldC52YWx1ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodGhpcy5jb2xvclBpY2tlcikpfWlucHV0Q2hhbmdlZChlKXt0aGlzLmNwSW5wdXRDaGFuZ2UuZW1pdChlKX1zbGlkZXJDaGFuZ2VkKGUpe3RoaXMuY3BTbGlkZXJDaGFuZ2UuZW1pdChlKX1zbGlkZXJEcmFnRW5kKGUpe3RoaXMuY3BTbGlkZXJEcmFnRW5kLmVtaXQoZSl9c2xpZGVyRHJhZ1N0YXJ0KGUpe3RoaXMuY3BTbGlkZXJEcmFnU3RhcnQuZW1pdChlKX1wcmVzZXRDb2xvcnNDaGFuZ2VkKGUpe3RoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2UuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6biksdyhFbyksdyhKYyksdyh5aSksdyhBZSksdyhKeikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjb2xvclBpY2tlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUNsaWNrKCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXMoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXQobyl9KX0saW5wdXRzOntjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BFeWVEcm9wcGVyOiJjcEV5ZURyb3BwZXIiLGNwUHJlc2V0TGFiZWw6ImNwUHJlc2V0TGFiZWwiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjcEV4dHJhVGVtcGxhdGU6ImNwRXh0cmFUZW1wbGF0ZSJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLFFjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltKel0saW1wb3J0czpba2VdfSksbn0pKCksaDllPVsiY29udGFpbmVyIl07ZnVuY3Rpb24gZjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNsaWRlciIsNCksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKHIudmFsdWUpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJkaXNhYmxlZCIsIWUuZW5hYmxlZCkoIm1pbiIsZS5taW4pKCJtYXgiLGUubWF4KSgic3RlcCIsMSkoInZhbHVlIixlLmxvd2VyVmFsdWUpfX1mdW5jdGlvbiBtOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1LDYpLE4oMiwic3BhbiIsNykoMywic3BhbiIsOCksZyg0LCJzcGFuIiw5KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLkxFRlQpKX0pLHYoKSxnKDUsInNwYW4iLDkpLFAoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLmhhbmRsZU1vdXNlRG93bihyLG8uUG9zaXRpb24uUklHSFQpKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLmxvd2VyVmFsdWUpKSgid2lkdGgiLGUuZ2V0VHJhY2tXaWR0aCgpKSx4KDEpLE90KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSksYXQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uTEVGVCkpLHgoMSksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLnVwcGVyVmFsdWUpKSxhdCgiYWN0aXZlIixlLmlzVGh1bWJBY3RpdmUoZS5Qb3NpdGlvbi5SSUdIVCkpfX12YXIgTGw9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5MRUZUPTFdPSJMRUZUIixuW24uUklHSFQ9Ml09IlJJR0hUIn0oTGx8fChMbD17fSkpLExsKSkoKSxLY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy50aWNrQ291bnQ9MjAsdGhpcy5lbmFibGVkPSEwLHRoaXMucmV0dXJuSW50ZWdlcnM9ITEsdGhpcy5yYW5nZVZhbHVlc0NoYW5nZWQ9bmV3IEcsdGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQ9bmV3IEcsdGhpcy5Qb3NpdGlvbj1MbCx0aGlzLmFjdGl2ZVRodW1iPUxsLk5PTkUsdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9MCx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfWdldFRodW1iUG9zaXRpb24oZSl7bGV0IGk9dGhpcy5nZXRDbGlwcGVkVmFsdWUoZSkscj10aGlzLm1heC10aGlzLm1pbjtyZXR1cm4gcjw9MD8iNTAlIjooaS10aGlzLm1pbikvcioxMDArIiUifWdldFRyYWNrV2lkdGgoKXtpZihudWxsPT09dGhpcy51cHBlclZhbHVlKXJldHVybiIwJSI7bGV0IGU9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIGU8PTA/IjAlIjoodGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy51cHBlclZhbHVlKS10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLmxvd2VyVmFsdWUpKS9lKjEwMCsiJSJ9Z2V0Q2xpcHBlZFZhbHVlKGUpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLHRoaXMubWluKSx0aGlzLm1heCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25Jbml0KCl7bGkoZG9jdW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU1vdmUoZSl9KSxsaShkb2N1bWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU91dChlKX0pfWhhbmRsZU1vdXNlRG93bihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlVGh1bWI9aSx0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYj02LWUub2Zmc2V0WH1jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpe2xldCBhLHtsZWZ0OmkscmlnaHQ6cn09dGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWUuY2xpZW50WC1pK3RoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iO2lmKG51bGwhPT10aGlzLnRpY2tDb3VudCYmdGhpcy50aWNrQ291bnQ+MCl7bGV0IGM9KHItaSkvdGhpcy50aWNrQ291bnQ7YT1NYXRoLnJvdW5kKHMvYykqYy8oci1pKX1lbHNlIGE9cy8oci1pKTtsZXQgbD10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLm1pbisodGhpcy5tYXgtdGhpcy5taW4pKmEpO3JldHVybiB0aGlzLnJldHVybkludGVnZXJzP01hdGgucm91bmQobCk6TnVtYmVyKGwudG9GaXhlZCgxMCkpfWhhbmRsZU1vdXNlTW92ZShlKXtpZih0aGlzLmFjdGl2ZVRodW1iPT09TGwuTk9ORXx8bnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm47bGV0IGk9dGhpcy5jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpLHI9W3RoaXMubG93ZXJWYWx1ZSx0aGlzLnVwcGVyVmFsdWVdO3RoaXMuYWN0aXZlVGh1bWI9PT1MbC5MRUZUPyhpPnRoaXMudXBwZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuUklHSFQpLHI9W2ksdGhpcy51cHBlclZhbHVlXSk6KGk8dGhpcy5sb3dlclZhbHVlJiYodGhpcy5hY3RpdmVUaHVtYj1MbC5MRUZUKSxyPVt0aGlzLmxvd2VyVmFsdWUsaV0pLHRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMociwiU0xJREVSIiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX1tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhlLGkpe2xldFtyLG9dPWUuc29ydCgocyxhKT0+cy1hKTsodGhpcy5sb3dlclZhbHVlIT09cnx8dGhpcy51cHBlclZhbHVlIT09bykmJnRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkLmVtaXQoe2xvd2VyVmFsdWU6cix1cHBlclZhbHVlOm8sc291cmNlOml9KX1oYW5kbGVNb3VzZU91dChlKXt0aGlzLmFjdGl2ZVRodW1iIT09TGwuTk9ORSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX1oYW5kbGVTaW5nbGVTbGlkZXJDaGFuZ2UoZSl7dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6ZSxzb3VyY2U6IlNMSURFUiJ9KX1oYW5kbGVJbnB1dENoYW5nZShlLGkpe2xldCByPWUudGFyZ2V0LG89dGhpcy5nZXRDbGlwcGVkVmFsdWUoTnVtYmVyKHIudmFsdWUpKTtpc05hTihvKXx8KGk9PT1MbC5MRUZUP251bGw9PT10aGlzLnVwcGVyVmFsdWU/dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6byxzb3VyY2U6IlRFWFQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbbyx0aGlzLnVwcGVyVmFsdWVdLCJURVhUIik6IiI9PT1yLnZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOnRoaXMubG93ZXJWYWx1ZSxzb3VyY2U6IlRFWFRfREVMRVRFRCJ9KTp0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKFt0aGlzLmxvd2VyVmFsdWUsb10sIlRFWFQiKSl9aXNUaHVtYkFjdGl2ZShlKXtyZXR1cm4gdGhpcy5hY3RpdmVUaHVtYj09PWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1yYW5nZS1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGg5ZSw1LEFlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7bWluOiJtaW4iLG1heDoibWF4Iixsb3dlclZhbHVlOiJsb3dlclZhbHVlIix1cHBlclZhbHVlOiJ1cHBlclZhbHVlIix0aWNrQ291bnQ6InRpY2tDb3VudCIsZW5hYmxlZDoiZW5hYmxlZCIscmV0dXJuSW50ZWdlcnM6InJldHVybkludGVnZXJzIn0sb3V0cHV0czp7cmFuZ2VWYWx1ZXNDaGFuZ2VkOiJyYW5nZVZhbHVlc0NoYW5nZWQiLHNpbmdsZVZhbHVlQ2hhbmdlZDoic2luZ2xlVmFsdWVDaGFuZ2VkIn0sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbInR5cGUiLCJudW1iZXIiLDEsImxvd2VyLWlucHV0IiwzLCJkaXNhYmxlZCIsInZhbHVlIiwiY2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwxLCJ1cHBlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsiY2xhc3MiLCJzaW5nbGUtc2xpZGVyIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbInJhbmdlIiwiIl0sWyJjb2xvciIsInByaW1hcnkiLDEsInNpbmdsZS1zbGlkZXIiLDMsImRpc2FibGVkIiwibWluIiwibWF4Iiwic3RlcCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udGFpbmVyIl0sWyJjb250YWluZXIiLCIiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsInRodW1iIiwzLCJtb3VzZWRvd24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImlucHV0IiwwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5MRUZUKX0pLHYoKSxnKDEsImlucHV0IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5SSUdIVCl9KSx2KCksRSgyLGY5ZSwxLDUsIm1hdC1zbGlkZXIiLDIpLEUoMyxtOWUsNiwxMiwibmctdGVtcGxhdGUiLG51bGwsMyxlbikpLDImZSl7bGV0IHI9c3QoNCk7YigiZGlzYWJsZWQiLCFpLmVuYWJsZWQpKCJ2YWx1ZSIsaS5sb3dlclZhbHVlKSx4KDEpLGIoImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLG51bGwhPT1pLnVwcGVyVmFsdWU/aS51cHBlclZhbHVlOiIiKSx4KDEpLGIoIm5nSWYiLG51bGw9PT1pLnVwcGVyVmFsdWUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLFRkXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ncmlkO2dyaWQtZ2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1hcmVhczoibG93ZXItaW5wdXQgdXBwZXItaW5wdXQiICJzbGlkZXIgc2xpZGVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtmb250LXNpemU6MDttaW4td2lkdGg6MTAwcHg7cGFkZGluZzo2cHh9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9Lmxvd2VyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6bG93ZXItaW5wdXR9LnVwcGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dXBwZXItaW5wdXQ7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO3BhZGRpbmc6MHB4fS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItd3JhcHBlcnt0b3A6NXB4O2xlZnQ6MHB4O3JpZ2h0OjBweH0gIC5zaW5nbGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6MTJweH0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjJweH0udGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMCwwLDAsLjI2KTtib3JkZXItcmFkaXVzOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZTt3aWR0aDoxMnB4O3dpbGwtY2hhbmdlOnRyYW5zZm9ybX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjMpfS50aHVtYltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOmdyYWJ9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS50aHVtYi5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpzY2FsZSgxLjIpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdjllPVsicmVnZXhTdHJpbmdJbnB1dCJdO2Z1bmN0aW9uIHk5ZShuLHQpe2lmKDEmbiYmKEt0KDApLGcoMSwibGkiLDIyKSxEKDIpLHYoKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigidGl0bGUiLGUubmFtZSkseCgxKSx5dChlLm5hbWUpfX1mdW5jdGlvbiBiOWUobix0KXtpZigxJm4mJihnKDAsImxpIiwyMykoMSwiZW0iKSxEKDIpLGooMywibnVtYmVyIiksdigpKCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDIpLHFlKCJhbmQgIixXKDMsMSxlLnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiB4OWUobix0KXsxJm4mJihnKDAsImxpIiwyNCkoMSwiZW0iKSxEKDIsIk5vIHJ1bnMgYXJlIGluIHRoZSBncm91cCIpLHYoKSgpKX12YXIgQzllPWZ1bmN0aW9uKG4pe3JldHVybntib3JkZXJDb2xvcjpufX0sdzllPWZ1bmN0aW9uKG4pe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6bn19O2Z1bmN0aW9uIE05ZShuLHQpe2lmKDEmbiYmKGcoMCwidWwiLDE2KSgxLCJsaSIpKDIsImxhYmVsIiksTigzLCJzcGFuIiwxNyksZyg0LCJjb2RlIiwxOCksRCg1KSx2KCkoKSxnKDYsInVsIiksRSg3LHk5ZSwzLDIsIm5nLWNvbnRhaW5lciIsMTkpLGooOCwic2xpY2UiKSxFKDksYjllLDQsMywibGkiLDIwKSxFKDEwLHg5ZSwzLDAsImxpIiwyMSksdigpKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ1N0eWxlIixIbigxMSxDOWUsZS5jb2xvcikpLHgoMyksYigibmdTdHlsZSIsSG4oMTMsdzllLGUuY29sb3IpKSx4KDEpLGIoInRpdGxlIixlLmdyb3VwSWQpLHgoMSkseXQoZS5ncm91cElkKSx4KDIpLGIoIm5nRm9yT2YiLF9OKDgsNyxlLnJ1bnMsMCw1KSkseCgyKSxiKCJuZ0lmIixlLnJ1bnMubGVuZ3RoPjUpLHgoMSksYigibmdJZiIsMD09PWUucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBTOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTQpLEUoMSxNOWUsMTEsMTUsInVsIiwxNSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmNvbG9yUnVuUGFpckxpc3QpfX1mdW5jdGlvbiBFOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLEQoMSwiIFRoZXJlIGFyZSBubyBydW5zIG1hdGNoaW5nIHRoZSByZWdleCwgIiksZygyLCJjb2RlIiksRCgzKSx2KCksRCg0LCIuIFBsZWFzZSBjaGVjayBpZiB5b3VyIHJlZ2V4IHN0cmluZyBpcyBjb3JyZWN0LiAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDMpLHFlKCIvIixlLnJlZ2V4U3RyaW5nLCIvIil9fWZ1bmN0aW9uIFQ5ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxMCkoMSwiaDQiKSxEKDIsIkNvbG9yIGdyb3VwIHByZXZpZXciKSx2KCksZygzLCJkaXYiLDExKSxFKDQsUzllLDIsMSwiZGl2IiwxMiksRSg1LEU5ZSw1LDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLGVuKSx2KCkoKSksMiZuKXtsZXQgZT1zdCg2KSxpPU0oKTt4KDQpLGIoIm5nSWYiLGkuY29sb3JSdW5QYWlyTGlzdC5sZW5ndGgpKCJuZ0lmRWxzZSIsZSl9fXZhciBaY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5ob3N0RWxSZWY9aSx0aGlzLm9uU2F2ZT1uZXcgRyx0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZT1uZXcgRyx0aGlzLnRpbWVPdXRJZD0wfXJlc2V0Rm9jdXMoKXt0aGlzLmhvc3RFbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlZ2V4U3RyaW5nSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRW50ZXIoZSl7dGhpcy5vblNhdmVDbGljayhlKSx0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfW9uU2F2ZUNsaWNrKGUpe3RoaXMub25TYXZlLmVtaXQoZSl9ZmlsbEV4YW1wbGUoZSl7dGhpcy5yZWdleFN0cmluZz1lLHRoaXMucmVnZXhJbnB1dENoYW5nZShlKX1yZWdleElucHV0Q2hhbmdlKGUpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQoZSl9aGFuZGxlRm9jdXNPdXQoKXtjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpLHRoaXMudGltZU91dElkPXNldFRpbWVvdXQodGhpcy5yZXNldEZvY3VzLmJpbmQodGhpcyksMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTWQpLHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh2OWUsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yZWdleFN0cmluZ0lucHV0PXIuZmlyc3QpfX0saW5wdXRzOntyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLGNvbG9yUnVuUGFpckxpc3Q6ImNvbG9yUnVuUGFpckxpc3QifSxvdXRwdXRzOntvblNhdmU6Im9uU2F2ZSIscmVnZXhJbnB1dE9uQ2hhbmdlOiJyZWdleElucHV0T25DaGFuZ2UifSxkZWNsczozMCx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpDb2xvciBSdW5zIGJ5IFJlZ2V4IFF1ZXJ54pCfMTVlZDlmNmZkMmQ0OTA2YTQ4MDNmYzEyNTVkZTNjNWRiMmM1NjUzMOKQnzkwODg5ODUxMTM5NjAzMTI4MDg6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeWAsW1sxLCJyZWdleC1lZGl0LWRpYWxvZyIsMywiZm9jdXNvdXQiXSxbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMywiY2xpY2siXSxbMSwiZ3JvdXAtY29udGFpbmVyIl0sWzEsImdyb3VwaW5nLXByZXZpZXciXSxbImNsYXNzIiwibWF0Y2gtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImVtcHR5IiwiIl0sWzEsIm1hdGNoLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJncm91cCIsMywibmdTdHlsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImdyb3VwIiwzLCJuZ1N0eWxlIl0sWzEsImNvbG9yLXN3YXRjaCIsMywibmdTdHlsZSJdLFsxLCJncm91cC1pZCIsMywidGl0bGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vcmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2giLDQsIm5nSWYiXSxbMywidGl0bGUiXSxbMSwibW9yZSJdLFsxLCJuby1tYXRjaCJdLFsxLCJ3YXJuaW5nIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIsMCksUCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXNPdXQoKX0pLGcoMSwiaDEiLDEpLEQoMiwiQ29sb3IgcnVucyBieSByZWdleCIpLHYoKSxnKDMsIm1hdC1kaWFsb2ctY29udGVudCIpKDQsInAiKSxEKDUsIkVudGVyIGEgcmVnZXggd2l0aCBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFnYWluc3QgcnVuIG5hbWVzOiIpLHYoKSxnKDYsIm1hdC1mb3JtLWZpZWxkIikoNywiaW5wdXQiLDIsMyksUCgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24ocyl7cmV0dXJuIGkub25FbnRlcihzLnRhcmdldC52YWx1ZSl9KSgiaW5wdXQiLGZ1bmN0aW9uKHMpe3JldHVybiBpLnJlZ2V4SW5wdXRDaGFuZ2Uocy50YXJnZXQudmFsdWUpfSksdigpKCkoKSxnKDksImRpdiIsNCkoMTAsInAiKSxEKDExLCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLE4oMTIsImJyIiksZygxMywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSxEKDE0LCIgVHJ5ICIpLGcoMTUsImNvZGUiKSxEKDE2LCIodHJhaW58ZXZhbCkiKSx2KCkoKSxEKDE3LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygxOCwiY29kZSIpLEQoMTksInRyYWluIiksdigpLEQoMjAsIiB0byBvbmUgY29sb3IgYW5kIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygyMSwiY29kZSIpLEQoMjIsImV2YWwiKSx2KCksRCgyMywiIHRvIGFub3RoZXIgY29sb3IuICIpLHYoKSgpLEUoMjQsVDllLDcsMiwiZGl2Iiw2KSxnKDI1LCJkaXYiLDcpKDI2LCJidXR0b24iLDgpLEQoMjcsIkNhbmNlbCIpLHYoKSxnKDI4LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDgpO3JldHVybiBvZShpLm9uU2F2ZUNsaWNrKHMudmFsdWUpKX0pLEQoMjksIiBTYXZlICIpLHYoKSgpKCl9MiZlJiYoeCg3KSx4cigidmFsdWUiLGkucmVnZXhTdHJpbmcpLHgoMTcpLGIoIm5nSWYiLGkucmVnZXhTdHJpbmcpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSx3cCxEdSwkbixqQSxGSixHQSxXQSxRXyxCWSx2bF0sc3R5bGVzOlsiLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwfS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTBweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO21heC1oZWlnaHQ6NTB2aDtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0ubWF0Y2gtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6Z3JpZDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsIG1pbm1heCg1MCUsIDFmcikpfS5jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6MCAwIDJweCAjMDAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNXB4O3dpZHRoOjE1cHh9dWxbX25nY29udGVudC0lQ09NUCVde2xpc3Qtc3R5bGUtdHlwZTpub25lO3BhZGRpbmc6MH1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDttYXJnaW46MDtwYWRkaW5nOjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1heC1jb250ZW50IGF1dG87cGFkZGluZzo1cHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ncm91cC1pZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45NWVtO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgdWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV0gICBsaVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubW9yZVtfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nUmVmPWksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQ9bmV3IFRlLHRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJD1iYSgoKT0+dW4odGhpcy5zdG9yZS5zZWxlY3QodUEpLnBpcGUoSHQoMSkpLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckKSkucGlwZShWbigiIikpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9YmEoKCk9PnRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJC5waXBlKEFyKDUwMCksSGUobz0+e3RyeXtsZXQgcz1uZXcgUmVnRXhwKG8pO3JldHVybiBCb29sZWFuKHMpfWNhdGNoe3JldHVybiExfX0pLHNyKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCx0aGlzLnN0b3JlLnNlbGVjdChhYS5nZXRDb2xvclBhbGV0dGUpLHRoaXMuc3RvcmUuc2VsZWN0KG11KSksQigoW28scyxhLGwsY10pPT57bGV0IGQ9QUMoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzpvfSxzLGEpLHA9bmV3IE1hcCxoPVtdO2ZvcihsZXRbZixtXW9mIE9iamVjdC5lbnRyaWVzKGQubWF0Y2hlcykpe2xldCBDPXAuZ2V0KGYpO2lmKCFDKXtsZXQgXz1sLmNvbG9yc1twLnNpemUlbC5jb2xvcnMubGVuZ3RoXTtDPWM/Xy5kYXJrSGV4Ol8ubGlnaHRIZXgscC5zZXQoZixDKX1oLnB1c2goe2dyb3VwSWQ6Zixjb2xvcjpDLHJ1bnM6bX0pfXJldHVybiBofSkpKS5waXBlKFZuKFtdKSksdGhpcy5leHBlcmltZW50SWRzPXIuZXhwZXJpbWVudElkcyx0aGlzLnJ1bklkVG9FaWQkPXBuKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoeFose2V4cGVyaW1lbnRJZDpvfSkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkOm8scnVuSWRzOnN9KSkpKSkucGlwZShCKG89PntsZXQgcz17fTtmb3IobGV0e3J1bklkczphLGV4cGVyaW1lbnRJZDpsfW9mIG8pZm9yKGxldCBjIG9mIGEpc1tjXT1sO3JldHVybiBzfSkpLHRoaXMuYWxsUnVucyQ9cG4odGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoQihvPT5vLmZsYXQoKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQoZSl9b25TYXZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobF8oe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTplci5SRUdFWCxyZWdleFN0cmluZzplfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhNZCksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwiY29sb3JSdW5QYWlyTGlzdCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IiwwKSxQKCJvblNhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2F2ZShvKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSwyLGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixXKDIsNCxpLmNvbG9yUnVuUGFpckxpc3QkKSl9LGRlcGVuZGVuY2llczpbWmNlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBJOWUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBQOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDEzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpyLkdyb3VwQnlLZXkuRVhQRVJJTUVOVH0pKX0pLGcoMSwic3BhbiIpLEUoMixJOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMywibGFiZWwiKSxEKDQsIkV4cGVyaW1lbnQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTt6ZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCkseCgyKSxiKCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIFI5ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIE85ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGs5ZShuLHQpe2lmKDEmbiYmKGcoMCwibGFiZWwiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24gRjllKG4sdCl7MSZuJiYoZygwLCJsYWJlbCIsMTUpLEQoMSwiKG5vbmUgc2V0KSIpLHYoKSl9dmFyICRjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWUsdGhpcy5Hcm91cEJ5S2V5PWVyLHRoaXMub25Hcm91cEJ5Q2hhbmdlPW5ldyBHfW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihKY2Use21heEhlaWdodDoiOTV2aCIsbWF4V2lkdGg6IjgwdnciLGRhdGE6e2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfX0pfW9uR3JvdXBCeVJlZ2V4Q2xpY2soKXt0aGlzLnJlZ2V4U3RyaW5nP3RoaXMub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzp0aGlzLnJlZ2V4U3RyaW5nfSk6dGhpcy5vblJlZ2V4U3RyaW5nRWRpdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RXhwZXJpbWVudHNHcm91cEJ5OiJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoyMix2YXJzOjgsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ29sb3IgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJleHBlcmltZW50IiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsInJ1biIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJyZWdleCIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJkYXRhLXZhbHVlIiwicmVnZXgtZWRpdCIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiXSxbMSwibm9uZS1zZXQtc3RyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLE4oMSwibWF0LWljb24iLDEpLHYoKSxnKDIsIm1hdC1tZW51IiwyLDMpKDQsImRpdiIsNCksRCg1LCJDb2xvciBydW5zIGJ5IiksdigpLEUoNixQOWUsNSwyLCJidXR0b24iLDUpLGcoNywiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OmkuR3JvdXBCeUtleS5SVU59KX0pLGcoOCwic3BhbiIpLEUoOSxSOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImxhYmVsIiksRCgxMSwiUnVuIiksdigpKCksZygxMiwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSxnKDEzLCJzcGFuIiksRSgxNCxPOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTUsImxhYmVsIiksRCgxNiwiUmVnZXgiKSx2KCkoKSxnKDE3LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVnZXhTdHJpbmdFZGl0KCl9KSxnKDE4LCJzcGFuIiksTigxOSwibWF0LWljb24iLDEwKSx2KCksRSgyMCxrOWUsMiwxLCJsYWJlbCIsMTEpLEUoMjEsRjllLDIsMCwibGFiZWwiLDEyKSx2KCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDMpKSx4KDYpLGIoIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSkseCgxKSx6ZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLHgoMyksemUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCkseCg2KSxiKCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSx4KDEpLGIoIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbWGUsJG4sWm4sSXUsRWMsUHVdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgYnV0dG9ue2Rpc3BsYXk6Z3JpZDtnYXA6MnB4IDEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjIwcHggYXV0b30gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoRlEpLnBpcGUoQihpPT5pLmhhcyhmaS5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KHdaKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodUEpfW9uR3JvdXBCeUNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxfKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIl1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJyZWdleFN0cmluZyIsInNlbGVjdGVkR3JvdXBCeSIsInNob3dFeHBlcmltZW50c0dyb3VwQnkiLCJleHBlcmltZW50SWRzIiwib25Hcm91cEJ5Q2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudCIsMCksUCgib25Hcm91cEJ5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSw0LGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJzZWxlY3RlZEdyb3VwQnkiLFcoMiw2LGkuc2VsZWN0ZWRHcm91cEJ5JCkpKCJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixXKDMsOCxpLnNob3dFeHBlcmltZW50c0dyb3VwQnkkKSkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcyl9LGRlcGVuZGVuY2llczpbJGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCOWU9WyJmaWx0ZXIiXTtmdW5jdGlvbiBWOWUobix0KXsxJm4mJkFpKDApfWZ1bmN0aW9uIEg5ZShuLHQpezEmbiYmQWkoMCl9dmFyIFU5ZT1mdW5jdGlvbihuKXtyZXR1cm57aXRlbTpufX07ZnVuY3Rpb24gejllKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEg5ZSwxLDAsIm5nLWNvbnRhaW5lciIsMTIpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7TSgpO2xldCBpPXN0KDE0KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMixVOWUsZSkpfX1mdW5jdGlvbiBqOWUobix0KXsxJm4mJihnKDAsImRpdiIsMTMpLE4oMSwibWF0LXNwaW5uZXIiLDE0KSx2KCkpfWZ1bmN0aW9uIEc5ZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNSksRCgxLCJObyBSdW5zIiksdigpKX1mdW5jdGlvbiBXOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTUpKDEsInNwYW4iKSxEKDIsJ05vIHJ1bnMgbWF0Y2ggIicpLGcoMywiY29kZSIpLEQoNCksdigpLEQoNSwnIicpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTt4KDQpLHl0KGUucmVnZXhGaWx0ZXIpfX12YXIgcTllPWZ1bmN0aW9uKCl7cmV0dXJuWzUsMTAsMjBdfTtmdW5jdGlvbiBZOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtcGFnaW5hdG9yIiwxNiksUCgicGFnZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblBhZ2luYXRpb25DaGFuZ2UuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7YigicGFnZVNpemVPcHRpb25zIixscCg0LHE5ZSkpKCJwYWdlSW5kZXgiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlSW5kZXgpKCJwYWdlU2l6ZSIsZS5wYWdpbmF0aW9uT3B0aW9uLnBhZ2VTaXplKSgibGVuZ3RoIixlLmZpbHRlcmVkSXRlbXNMZW5ndGgpfX1mdW5jdGlvbiBYOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtY2hlY2tib3giLDI2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMykuaGFuZGxlUGFnZVRvZ2dsZSgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMyk7YigiY2hlY2tlZCIsZS5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpKSgiaW5kZXRlcm1pbmF0ZSIsIWUuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSYmZS5zb21lUGFnZUl0ZW1zU2VsZWN0ZWQoKSl9fXZhciB0dWU9ZnVuY3Rpb24obil7cmV0dXJue3R5cGU6bn19O2Z1bmN0aW9uIFE5ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjcpLEQoMSwiRXhwZXJpbWVudCIpLHYoKSksMiZuKXtsZXQgZT1NKDMpO2IoIm1hdC1zb3J0LWhlYWRlciIsSG4oMSx0dWUsZS5Tb3J0VHlwZS5FWFBFUklNRU5UX05BTUUpKX19ZnVuY3Rpb24gSzllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyNyksRCgxLCJSdW4iKSx2KCkpLDImbil7bGV0IGU9TSgzKTtiKCJtYXQtc29ydC1oZWFkZXIiLEhuKDEsdHVlLGUuU29ydFR5cGUuUlVOX05BTUUpKX19ZnVuY3Rpb24gWjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwyOCksdigpKSwyJm4pe2xldCBlPU0oMyk7eCgxKSxiKCJleHBlcmltZW50SWRzIixlLmV4cGVyaW1lbnRJZHMpfX12YXIgbnVlPWZ1bmN0aW9uKG4pe3JldHVyblsiY29sdW1uIixuXX07ZnVuY3Rpb24gSjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMSksS3QoMSwyMiksRSgyLFg5ZSwxLDIsIm1hdC1jaGVja2JveCIsMjMpLEUoMyxROWUsMiwzLCJzcGFuIiwyNCksRSg0LEs5ZSwyLDMsInNwYW4iLDI0KSxFKDUsWjllLDIsMSwic3BhbiIsMjUpLFp0KCksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgyKTtiKCJuZ0NsYXNzIixIbig2LG51ZSwidGItY29sdW1uLSIrZSkpLHgoMSksYigibmdTd2l0Y2giLGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5DSEVDS0JPWCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkVYUEVSSU1FTlRfTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX0NPTE9SKX19ZnVuY3Rpb24gJDllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLGcoMSwiZGl2IiwzNyksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZygyLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgyKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKG8scikpfSksdigpKCksWnQoKX1pZigyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMiksYigibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fWZ1bmN0aW9uIGVxZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoMSwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oMykuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChzLG8pKX0pLGcoMiwic3BhbiIpLEQoMyksdigpKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgzKS4kaW1wbGljaXQ7eCgxKSxiKCJjaGVja2VkIixpLmZpbHRlci5maWx0ZXJWYWx1ZXMuaW5jbHVkZXMoZSkpLHgoMikseXQoZSl9fWZ1bmN0aW9uIHRxZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxlcWUsNCwyLCJkaXYiLDM5KSxadCgpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMSksYigibmdGb3JPZiIsZS5maWx0ZXIucG9zc2libGVWYWx1ZXMpfX1mdW5jdGlvbiBucWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxOKDIsIm1hdC1pY29uIiwzMyksdigpLGcoMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoNiwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQocikpfSksZyg3LCJzcGFuIiksRCg4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSx2KCkoKSgpLEUoOSwkOWUsMyw0LCJuZy1jb250YWluZXIiLDMxKSxFKDEwLHRxZSwyLDEsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0LHI9TSgyKTt4KDEpLGIoIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSx6ZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBocGFyYW0gIisoaS5kaXNwbGF5TmFtZXx8aS5uYW1lKSkseCg1KSxiKCJjaGVja2VkIixpLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkKSx4KDMpLGIoIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1yLkRvbWFpblR5cGUuSU5URVJWQUwpLHgoMSksYigibmdJZiIsaS5maWx0ZXIudHlwZT09PXIuRG9tYWluVHlwZS5ESVNDUkVURSl9fXZhciBpcWU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLG5hbWU6dH19O2Z1bmN0aW9uIHJxZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjkpKDEsInNwYW4iLDMwKSxEKDIpLHYoKSxFKDMsbnFlLDExLDUsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibWF0LXNvcnQtaGVhZGVyIix0bygzLGlxZSxpLlNvcnRUeXBlLkhQQVJBTSxlLm5hbWUpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUubmFtZSkseCgxKSxiKCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIG9xZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImJ1dHRvbiIsMzIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLE4oMiwibWF0LWljb24iLDMzKSx2KCksZygzLCJtYXQtbWVudSIsbnVsbCwzNCkoNSwiZGl2IiwzNSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZyg2LCJtYXQtY2hlY2tib3giLDM2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmUoZSk7bGV0IHI9TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChyKSl9KSxnKDcsInNwYW4iKSxEKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLHYoKSgpKCksZyg5LCJkaXYiLDM3KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxnKDEwLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKG8scikpfSksdigpKCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0O3goMSksYigibWF0TWVudVRyaWdnZXJGb3IiLGUpLHplKCJhcmlhLWxhYmVsIiwiRmlsdGVyIG1ldHJpYyAiKyhpLmRpc3BsYXlOYW1lfHxpLnRhZykpLHgoNSksYigiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCkseCg0KSxiKCJtaW4iLGkuZmlsdGVyLm1pblZhbHVlKSgibWF4IixpLmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLGkuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIixpLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19dmFyIHNxZT1mdW5jdGlvbihuLHQpe3JldHVybnt0eXBlOm4sdGFnOnR9fTtmdW5jdGlvbiBhcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksRCgyKSx2KCksRSgzLG9xZSwxMSw3LCJuZy1jb250YWluZXIiLDMxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO2IoIm1hdC1zb3J0LWhlYWRlciIsdG8oMyxzcWUsaS5Tb3J0VHlwZS5NRVRSSUMsZS50YWcpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUudGFnKSx4KDEpLGIoIm5nSWYiLGUuZmlsdGVyKX19ZnVuY3Rpb24gbHFlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxNykoMSwiZGl2IiwxOCksUCgibWF0U29ydENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5oYW5kbGVTb3J0Q2hhbmdlKHIpKX0pLEUoMixKOWUsNiw4LCJzcGFuIiwxOSksRSgzLHJxZSw0LDYsInNwYW4iLDIwKSxFKDQsYXFlLDQsNiwic3BhbiIsMjApLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibWF0U29ydEFjdGl2ZSIsZS5zb3J0T3B0aW9uLmNvbHVtbikseCgxKSxiKCJuZ0Zvck9mIixlLmNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsZS5ocGFyYW1Db2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlIcGFyYW1Db2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5tZXRyaWNDb2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlNZXRyaWNDb2x1bW4pfX1mdW5jdGlvbiBjcWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwibWF0LWNoZWNrYm94Iiw0NyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQocikpfSkoImRibGNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChyKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMikuaXRlbTt4KDEpLGIoImNoZWNrZWQiLGUuc2VsZWN0ZWQpfX1mdW5jdGlvbiB1cWUobix0KXtpZigxJm4mJk4oMCwidGItZXhwZXJpbWVudC1hbGlhcyIsNDgpLDImbil7bGV0IGU9TSgyKS5pdGVtO2IoImFsaWFzIixlLmV4cGVyaW1lbnRBbGlhcykoInRpdGxlIixlLmV4cGVyaW1lbnROYW1lKX19ZnVuY3Rpb24gZHFlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwzMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSkseXQoZS5ydW4ubmFtZSl9fXZhciBwcWU9ZnVuY3Rpb24obil7cmV0dXJueyJydW4tY29sb3Itc3dhdGNoIjohMCwibm8tY29sb3IiOm59fTtmdW5jdGlvbiBocWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwiYnV0dG9uIiw0OSksUCgiY29sb3JQaWNrZXJDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5ydW4uaWQsbmV3Q29sb3I6cn0pKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSksT3QoImJhY2tncm91bmQiLGUucnVuQ29sb3IpLGIoIm5nQ2xhc3MiLEhuKDgscHFlLCFlLnJ1bkNvbG9yKSkoImNvbG9yUGlja2VyIixlLnJ1bkNvbG9yKSgiY3BEaWFsb2dEaXNwbGF5IiwicG9wdXAiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBmcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQ0KSxLdCgxLDIyKSxFKDIsY3FlLDIsMSwic3BhbiIsMjUpLEUoMyx1cWUsMSwyLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0NSksRSg0LGRxZSwyLDEsInNwYW4iLDQ2KSxFKDUsaHFlLDIsMTAsInNwYW4iLDI1KSxadCgpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsSG4oNixudWUsInRiLWNvbHVtbi0iK2UpKSx4KDEpLGIoIm5nU3dpdGNoIixlKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIG1xZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNTApLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpLml0ZW07eCgxKSx5dChpLmhwYXJhbXMuZ2V0KGUubmFtZSkpfX1mdW5jdGlvbiBncWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDUwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKS5pdGVtO3goMSkseXQoaS5tZXRyaWNzLmdldChlLnRhZykpfX1mdW5jdGlvbiBfcWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNDEpLEUoMSxmcWUsNiw4LCJzcGFuIiw0MiksRSgyLG1xZSwyLDEsInNwYW4iLDQzKSxFKDMsZ3FlLDIsMSwic3BhbiIsNDMpLHYoKSksMiZuKXtsZXQgZT10Lml0ZW0saT1NKCk7emUoImRhdGEtaWQiLGUucnVuLmlkKSx4KDEpLGIoIm5nRm9yT2YiLGkuY29sdW1ucykseCgxKSxiKCJuZ0Zvck9mIixpLmhwYXJhbUNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsaS5tZXRyaWNDb2x1bW5zKX19dmFyIHZxZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgb2d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9IlNob3cgcnVuczoifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRhdGFTb3VyY2U9bmV3IGxPLHRoaXMuRG9tYWluVHlwZT1Lbix0aGlzLlJ1bnNUYWJsZUNvbHVtbj1Hcyx0aGlzLlNvcnRUeXBlPUN1LHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRyx0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBHLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRyx0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgRyx0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgRyx0aGlzLm9uU29ydENoYW5nZT1uZXcgRyx0aGlzLm9uUnVuQ29sb3JDaGFuZ2U9bmV3IEcsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgRyx0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkPW5ldyBHLHRoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkPW5ldyBHfW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQoZSl7cmV0dXJuYGg6JHtlLm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZChlKXtyZXR1cm5gbToke2UudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoZT0+ZS5zZWxlY3RlZCl9c29tZVBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMucGFnZUl0ZW1zLnNvbWUoZT0+ZS5zZWxlY3RlZCl9aGFuZGxlUGFnZVRvZ2dsZSgpe3RoaXMub25QYWdlU2VsZWN0aW9uVG9nZ2xlLmVtaXQoe2l0ZW1zOnRoaXMucGFnZUl0ZW1zfSl9aGFuZGxlU29ydENoYW5nZShlKXtsZXQgaTtzd2l0Y2goZS5kaXJlY3Rpb24pe2Nhc2UiYXNjIjppPUVsLkFTQzticmVhaztjYXNlImRlc2MiOmk9RWwuREVTQzticmVhaztkZWZhdWx0Omk9RWwuVU5TRVR9dGhpcy5vblNvcnRDaGFuZ2UuZW1pdCh7a2V5OmUuYWN0aXZlLGRpcmVjdGlvbjppfSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9dGFibGVUcmFja0J5KGUsaSl7cmV0dXJuIGkucnVuLmlkfWhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKGUpe2xldHtuYW1lOmksZmlsdGVyOnJ9PWU7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3IudHlwZT09PUtuLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6IXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6ci5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6cixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChlLGkpe2xldHtuYW1lOnIsZmlsdGVyOm99PWU7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO2lmKG8udHlwZSE9PUtuLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGV4cGVjdGVkIGRpc2NyZXRlIGRvbWFpbiBmb3IgJHtyfWApO2xldCBzPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7cy5oYXMoaSk/cy5kZWxldGUoaSk6cy5hZGQoaSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5zXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKGUpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOiFlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKGUsaSl7aWYoIWUuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUudGFnLGluY2x1ZGVVbmRlZmluZWQ6ZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4oZSl7cmV0dXJuIGUubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKGUpe3JldHVybiBlLnRhZ319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy10YWJsZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQjllLDcsQWUpLGx0KHNPLDcpLGx0KHRTLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmZpbHRlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5wYWdpbmF0b3I9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuc29ydD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dFeHBlcmltZW50TmFtZToic2hvd0V4cGVyaW1lbnROYW1lIixjb2x1bW5zOiJjb2x1bW5zIixocGFyYW1Db2x1bW5zOiJocGFyYW1Db2x1bW5zIixtZXRyaWNDb2x1bW5zOiJtZXRyaWNDb2x1bW5zIixhbGxJdGVtc0xlbmd0aDoiYWxsSXRlbXNMZW5ndGgiLGZpbHRlcmVkSXRlbXNMZW5ndGg6ImZpbHRlcmVkSXRlbXNMZW5ndGgiLHVzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIscGFnZUl0ZW1zOiJwYWdlSXRlbXMiLGxvYWRpbmc6ImxvYWRpbmciLG51bVNlbGVjdGVkSXRlbXM6Im51bVNlbGVjdGVkSXRlbXMiLHNvcnRPcHRpb246InNvcnRPcHRpb24iLHBhZ2luYXRpb25PcHRpb246InBhZ2luYXRpb25PcHRpb24iLHJlZ2V4RmlsdGVyOiJyZWdleEZpbHRlciJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJDaGFuZ2UiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25TZWxlY3Rpb25EYmxDbGljazoib25TZWxlY3Rpb25EYmxDbGljayIsb25QYWdlU2VsZWN0aW9uVG9nZ2xlOiJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLG9uUGFnaW5hdGlvbkNoYW5nZToib25QYWdpbmF0aW9uQ2hhbmdlIixvblNvcnRDaGFuZ2U6Im9uU29ydENoYW5nZSIsb25SdW5Db2xvckNoYW5nZToib25SdW5Db2xvckNoYW5nZSIsb25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDoib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpvZyx1c2VDbGFzczp2cWV9XSksenRdLGRlY2xzOjE1LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJyb2xlIiwidGFibGUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJyb3dzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJsb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXJ1bnMiLDQsIm5nSWYiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiLDQsIm5nSWYiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJoZWFkZXIiXSxbIm1hdFNvcnQiLCIiLCJyb2xlIiwicm93IiwzLCJtYXRTb3J0QWN0aXZlIiwibWF0U29ydENoYW5nZSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJjbGFzcyIsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbInJvbGUiLCJyb3ciXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwiY2xhc3MiLCJjb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiXSxbMywiYWxpYXMiLCJ0aXRsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm5hbWUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsidGl0bGUiLCJDbGljayB0byB0b2dnbGUgcnVuIHNlbGVjdGlvbiBvciBkb3VibGUgY2xpY2sgdG8gc2VsZWN0IG9ubHkgdGhpcyBydW4uIiwzLCJjaGVja2VkIiwiY2hhbmdlIiwiZGJsY2xpY2siXSxbMywiYWxpYXMiLCJ0aXRsZSJdLFszLCJuZ0NsYXNzIiwiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbInJvbGUiLCJjZWxsIiwxLCJjb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxQKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GaWx0ZXJLZXlVcChvKX0pLHYoKSgpLGcoMiwiZGl2IiwyKSgzLCJkaXYiLDMpLEUoNCxWOWUsMSwwLCJuZy1jb250YWluZXIiLDQpLGcoNSwiZGl2Iiw1KSxFKDYsejllLDIsNCwibmctY29udGFpbmVyIiw2KSx2KCkoKSxFKDcsajllLDIsMCwiZGl2Iiw3KSxFKDgsRzllLDIsMCwiZGl2Iiw4KSxFKDksVzllLDYsMSwiZGl2Iiw4KSx2KCksRSgxMCxZOWUsMSw1LCJtYXQtcGFnaW5hdG9yIiw5KSxFKDExLGxxZSw1LDYsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSxFKDEzLF9xZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDExLGVuKSksMiZlKXtsZXQgcj1zdCgxMik7eCgxKSx4cigidmFsdWUiLGkucmVnZXhGaWx0ZXIpLHgoMyksYigibmdUZW1wbGF0ZU91dGxldCIscikseCgyKSxiKCJuZ0Zvck9mIixpLnBhZ2VJdGVtcykoIm5nRm9yVHJhY2tCeSIsaS50YWJsZVRyYWNrQnkpLHgoMSksYigibmdJZiIsaS5sb2FkaW5nKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJjA9PT1pLmFsbEl0ZW1zTGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJmkuYWxsSXRlbXNMZW5ndGg+MCYmMD09PWkuZmlsdGVyZWRJdGVtc0xlbmd0aCkseCgxKSxiKCJuZ0lmIixpLnVzZVBhZ2luYXRpb24pfX0sZGVwZW5kZW5jaWVzOltYY2UsUG4seW4sWGUsTm8saHIsSXIsX3Ysb08sJG4sRWQsWm4sSXUsRWMsUHUsc08sdm8sdFMsSGNlLEtjZSxldWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmctYm90dG9tOjEycHh9Ym9keS5kYXJrLW1vZGUgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6dGFibGUtcm93O2hlaWdodDo0M3B4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bcm9sZT1yb3dncm91cF1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfVtyb2xlPXJvd2dyb3VwXS5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNlbGVjdC1hbGxbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEycHg7cGFkZGluZy10b3A6MTJweH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpsZWZ0fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDRweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4IDAgMjFweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRiLWNvbHVtbi1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0sIC50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0ucnVuLWNvbG9yLXN3YXRjaC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNjNmNhZDE7Ym9yZGVyLXdpZHRoOjJweH0ucmFuZ2UtaW5wdXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6YXV0b31bX25naG9zdC0lQ09NUCVdICAgICBtYXQtcGFnaW5hdG9yIG1hdC1mb3JtLWZpZWxke21hcmdpbjowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcn0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWxhYmVse292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxicWU9WShJQyxuPT5uLnN0YXRlPT09RWUuTE9BRElORyk7ZnVuY3Rpb24gcnVlKG4sdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBDdS5FWFBFUklNRU5UX05BTUU6cmV0dXJuW24uZXhwZXJpbWVudEFsaWFzLG4ucnVuLm5hbWUsbi5ydW4uaWRdO2Nhc2UgQ3UuUlVOX05BTUU6cmV0dXJuW24ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgQ3UuSFBBUkFNOnJldHVybltuLmhwYXJhbXMuZ2V0KHQubmFtZSksbi5ydW4ubmFtZSxuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5pZF07Y2FzZSBDdS5NRVRSSUM6cmV0dXJuW24ubWV0cmljcy5nZXQodC50YWcpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke3R9YCl9fWZ1bmN0aW9uIG91ZShuLHQpe3JldHVybiB2b2lkIDA9PT10P24uaW5jbHVkZVVuZGVmaW5lZDpuLnR5cGU9PT1Lbi5ESVNDUkVURT9uLmZpbHRlclZhbHVlcy5pbmNsdWRlcyh0KTpuLnR5cGU9PT1Lbi5JTlRFUlZBTCYmbi5maWx0ZXJMb3dlclZhbHVlPD10JiZ0PD1uLmZpbHRlclVwcGVyVmFsdWV9dmFyIHN1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmxvYWRpbmckPW51bGwsdGhpcy5ocGFyYW1Db2x1bW5zJD1qdChbXSksdGhpcy5tZXRyaWNDb2x1bW5zJD1qdChbXSksdGhpcy51c2VGbGV4aWJsZUxheW91dD0hMSx0aGlzLnVzZVBhZ2luYXRpb249ITEsdGhpcy5jb2x1bW5zPVtHcy5SVU5fTkFNRV0sdGhpcy5zaG93SHBhcmFtc0FuZE1ldHJpY3M9ITEsdGhpcy5zb3J0T3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChJViksdGhpcy5wYWdpbmF0aW9uT3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChBViksdGhpcy5yZWdleEZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmYpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9aXNFeHBlcmltZW50TmFtZVZpc2libGUoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLnNvbWUoZT0+ZT09PUdzLkVYUEVSSU1FTlRfTkFNRSl9bmdPbkluaXQoKXtsZXQgaT1wbih0aGlzLmV4cGVyaW1lbnRJZHMubWFwKHM9PnRoaXMuZ2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQocykpKS5waXBlKEIocz0+W10uY29uY2F0KC4uLnMpKSk7dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkPWkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFFzKDEpKSx0aGlzLmFsbEl0ZW1zTGVuZ3RoJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShCKHM9PnMubGVuZ3RoKSk7bGV0IHI9dGhpcy5nZXRGaWx0ZXJlZEl0ZW1zJCh0aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxRcygxKSk7dGhpcy5maWx0ZXJlZEl0ZW1zTGVuZ3RoJD1yLnBpcGUoQihzPT5zLmxlbmd0aCkpLHRoaXMucGFnZUl0ZW1zJD10aGlzLnNvcnRlZEFuZFNsaWNlZEl0ZW1zJChyKSx0aGlzLm51bVNlbGVjdGVkSXRlbXMkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKEIocz0+cy5yZWR1Y2UoKGEsbCk9PmErTnVtYmVyKGwuc2VsZWN0ZWQpLDApKSk7bGV0IG89dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLnN0b3JlLnNlbGVjdChicWUse2V4cGVyaW1lbnRJZDpzfSkpO2lmKHRoaXMubG9hZGluZyQ9cG4obykucGlwZShCKHM9PnMuc29tZShhPT5hKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtsZXQgcz10aGlzLnN0b3JlLnNlbGVjdChOaC5nZXRFeHBlcmltZW50c0hwYXJhbXNBbmRNZXRyaWNzU3BlY3Mse2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSk7dGhpcy5ocGFyYW1Db2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0SHBhcmFtRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese2hwYXJhbXM6bH1dKT0+bC5tYXAoKHtuYW1lOmMsZGlzcGxheU5hbWU6dX0pPT57bGV0IHA9YS5nZXQoYyk7aWYoIXApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBocGFyYW0gZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOnUsbmFtZTpjLGZpbHRlcjpwfX0pKSksdGhpcy5tZXRyaWNDb2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0TWV0cmljRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese21ldHJpY3M6bH1dKT0+bC5tYXAoKHt0YWc6YyxkaXNwbGF5TmFtZTp1fSk9PntsZXQgZD1hLmdldChjKTtpZighZCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtjfSBtdXN0IGV4aXN0IHdoZW4gdGhlIG1ldHJpYyBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6dSx0YWc6YyxmaWx0ZXI6ZH19KSkpfXRoaXMuY29sdW1ucy5pbmNsdWRlcyhHcy5DSEVDS0JPWCkmJnRoaXMuc3RvcmUuc2VsZWN0KHJhKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksZGkoKGEsbCk9PnVzKGEsbCkpLHZpKCgpPT5pLnBpcGUoSGUoYT0+YS5sZW5ndGg+NTAwKSxIdCgxKSkpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhfKHtsb2NhbGl6ZWRNZXNzYWdlOiJUaGUgbnVtYmVyIG9mIHJ1bnMgZXhjZWVkcyA1MDAuIE5ldyBydW5zIGFyZSB1bnNlbGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiJ9KSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKEFEKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQoZSl7cmV0dXJuIHBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KEpmKV0pLnBpcGUoQigoW2kscl0pPT57aWYoIXIpcmV0dXJuIGk7bGV0IG89dGhpcy5jb2x1bW5zLmluY2x1ZGVzKEdzLkVYUEVSSU1FTlRfTkFNRSk7cmV0dXJuIGkuZmlsdGVyKHM9Pm1BKHtydW5OYW1lOnMucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOnMuZXhwZXJpbWVudEFsaWFzfSxyLG8pKX0pLHZpKGk9PnRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzP3BuKHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpKS5waXBlKEIoKFtyLG9dKT0+aS5maWx0ZXIoKHtocGFyYW1zOnMsbWV0cmljczphfSk9PlsuLi5yLmVudHJpZXMoKV0uZXZlcnkoKFtjLHVdKT0+b3VlKHUscy5nZXQoYykpKSYmWy4uLm8uZW50cmllcygpXS5ldmVyeSgoW2MsdV0pPT5vdWUodSxhLmdldChjKSkpKSkpOmp0KGkpKSl9c29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpe2xldCBpPXBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KElWKV0pLnBpcGUoQigoW28sc10pPT5mdW5jdGlvbihuLHQpe2xldCBlPXQua2V5LGk9Wy4uLm5dO3JldHVybiBudWxsPT09ZXx8dC5kaXJlY3Rpb249PT1FbC5VTlNFVHx8aS5zb3J0KChyLG8pPT57bGV0IHM9cnVlKHIsZSksYT1ydWUobyxlKTtpZihzLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGdpdmVuIHNvcnQgc2hvdWxkIHJlc3VsdCBpbiBzYW1lIG51bWJlciBvZiBpdGVtczogJHt0fWApO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdLHU9YVtsXTtpZihjIT09dSl7aWYodm9pZCAwPT09Y3x8dm9pZCAwPT09dSlyZXR1cm4gdm9pZCAwPT09dT8tMToxO2lmKHR5cGVvZiBjIT10eXBlb2YgdSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21wYXJlIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXM6ICR7dHlwZW9mIGN9IHZzLiAke3R5cGVvZiB1fWApO3JldHVybiBjPHU9PSh0LmRpcmVjdGlvbj09PUVsLkFTQyk/LTE6MX19cmV0dXJuIDB9KSxpfShvLHMpKSk7cmV0dXJuIHBuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KEFWKV0pLnBpcGUoQigoW28sc10pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gby5zbGljZSgpO2xldHtwYWdlU2l6ZTphLHBhZ2VJbmRleDpsfT1zO3JldHVybiBvLnNsaWNlKGwqYSwobCsxKSphKX0pLFZuKFtdKSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQoZSl7cmV0dXJuIHBuKFt0aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KGh1KV0pLnBpcGUoQigoW2kscixvLHMsYV0pPT5pLm1hcChsPT57bGV0IGM9bmV3IE1hcDsobC5ocGFyYW1zfHxbXSkuZm9yRWFjaChkPT57Yy5zZXQoZC5uYW1lLGQudmFsdWUpfSk7bGV0IHU9bmV3IE1hcDtyZXR1cm4obC5tZXRyaWNzfHxbXSkuZm9yRWFjaChkPT57dS5zZXQoZC50YWcsZC52YWx1ZSl9KSx7cnVuOmwsZXhwZXJpbWVudE5hbWU6cj8ubmFtZXx8IiIsZXhwZXJpbWVudEFsaWFzOmFbZV0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChsLmlkKSkscnVuQ29sb3I6c1tsLmlkXSxocGFyYW1zOmMsbWV0cmljczp1fX0pKSl9b25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3RCh7cnVuSWQ6ZS5ydW4uaWR9KSl9b25SdW5TZWxlY3Rpb25EYmxDbGljayhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1EKHtydW5JZDplLnJ1bi5pZH0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUoZSl7bGV0e2l0ZW1zOml9PWUscj1pLm1hcCgoe3J1bjpvfSk9Pm8uaWQpO3RoaXMuc3RvcmUuZGlzcGF0Y2goU0Qoe3J1bklkczpyfSkpfW9uUGFnaW5hdGlvbkNoYW5nZShlKXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7bGV0e3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChFRCh7cGFnZUluZGV4OmkscGFnZVNpemU6cn0pKX1vblNvcnRDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChURChlKSl9b25SZWdleEZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJDKHtyZWdleFN0cmluZzplfSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOmUsbmV3Q29sb3I6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goREQoe3J1bklkOmUsbmV3Q29sb3I6aX0pKX1vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtsZXR7aHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99KSl9b25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c30pKX1vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxtZXRyaWNUYWc6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c30pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtdGFibGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJmbGV4LWxheW91dCIsaS51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7dXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixjb2x1bW5zOiJjb2x1bW5zIixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93SHBhcmFtc0FuZE1ldHJpY3M6InNob3dIcGFyYW1zQW5kTWV0cmljcyJ9LGRlY2xzOjExLHZhcnM6MzUsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsInVzZUZsZXhpYmxlTGF5b3V0IiwibnVtU2VsZWN0ZWRJdGVtcyIsImNvbHVtbnMiLCJocGFyYW1Db2x1bW5zIiwibWV0cmljQ29sdW1ucyIsInNob3dFeHBlcmltZW50TmFtZSIsInBhZ2VJdGVtcyIsImZpbHRlcmVkSXRlbXNMZW5ndGgiLCJhbGxJdGVtc0xlbmd0aCIsImxvYWRpbmciLCJwYWdpbmF0aW9uT3B0aW9uIiwicmVnZXhGaWx0ZXIiLCJzb3J0T3B0aW9uIiwidXNlUGFnaW5hdGlvbiIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25TZWxlY3Rpb25EYmxDbGljayIsIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNvcnRDaGFuZ2UiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicnVucy10YWJsZS1jb21wb25lbnQiLDApLFAoIm9uU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvblRvZ2dsZShvKX0pKCJvblNlbGVjdGlvbkRibENsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvbkRibENsaWNrKG8pfSkoIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlU2VsZWN0aW9uVG9nZ2xlKG8pfSkoIm9uUGFnaW5hdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdpbmF0aW9uQ2hhbmdlKG8pfSkoIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhGaWx0ZXJDaGFuZ2Uobyl9KSgib25Tb3J0Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNvcnRDaGFuZ2Uobyl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5Db2xvckNoYW5nZShvKX0pKCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQobyl9KSgib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKG8pfSkoIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25NZXRyaWNGaWx0ZXJDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSx2KCkpLDImZSYmYigiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgidXNlRmxleGlibGVMYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpKCJudW1TZWxlY3RlZEl0ZW1zIixXKDEsMTUsaS5udW1TZWxlY3RlZEl0ZW1zJCkpKCJjb2x1bW5zIixpLmNvbHVtbnMpKCJocGFyYW1Db2x1bW5zIixXKDIsMTcsaS5ocGFyYW1Db2x1bW5zJCkpKCJtZXRyaWNDb2x1bW5zIixXKDMsMTksaS5tZXRyaWNDb2x1bW5zJCkpKCJzaG93RXhwZXJpbWVudE5hbWUiLGkuaXNFeHBlcmltZW50TmFtZVZpc2libGUoKSkoInBhZ2VJdGVtcyIsVyg0LDIxLGkucGFnZUl0ZW1zJCkpKCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIixXKDUsMjMsaS5maWx0ZXJlZEl0ZW1zTGVuZ3RoJCkpKCJhbGxJdGVtc0xlbmd0aCIsVyg2LDI1LGkuYWxsSXRlbXNMZW5ndGgkKSkoImxvYWRpbmciLFcoNywyNyxpLmxvYWRpbmckKSkoInBhZ2luYXRpb25PcHRpb24iLFcoOCwyOSxpLnBhZ2luYXRpb25PcHRpb24kKSkoInJlZ2V4RmlsdGVyIixXKDksMzEsaS5yZWdleEZpbHRlciQpKSgic29ydE9wdGlvbiIsVygxMCwzMyxpLnNvcnRPcHRpb24kKSkoInVzZVBhZ2luYXRpb24iLGkudXNlUGFnaW5hdGlvbil9LGRlcGVuZGVuY2llczpbaXVlLGZ0XSxzdHlsZXM6WyIuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgICA+IHJ1bnMtdGFibGUtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Il1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGNvbHVtbnM6ImNvbHVtbnMifSxkZWNsczoxLHZhcnM6NCxjb25zdHM6W1szLCJ1c2VGbGV4aWJsZUxheW91dCIsImNvbHVtbnMiLCJleHBlcmltZW50SWRzIiwic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInJ1bnMtdGFibGUiLDApLDImZSYmYigidXNlRmxleGlibGVMYXlvdXQiLCEwKSgiY29sdW1ucyIsaS5jb2x1bW5zKSgiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixpLnNob3dIcGFyYW1zQW5kTWV0cmljcyl9LGRlcGVuZGVuY2llczpbc3VlXSxzdHlsZXM6WyJydW5zLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGx1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmV4cGVyaW1lbnRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+aT8/W10pKSx0aGlzLmNvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+W0dzLkNIRUNLQk9YLEdzLlJVTl9OQU1FLGkmJmkubGVuZ3RoPjE/R3MuRVhQRVJJTUVOVF9OQU1FOm51bGwsR3MuUlVOX0NPTE9SXS5maWx0ZXIocj0+bnVsbCE9PXIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmYigiZXhwZXJpbWVudElkcyIsVygxLDMsaS5leHBlcmltZW50SWRzJCkpKCJjb2x1bW5zIixXKDIsNSxpLmNvbHVtbnMkKSkoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W2F1ZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksY3VlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzJD10aGlzLnN0b3JlLnNlbGVjdChkSyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZCJdXSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sic2lkZWJhciIsIiIsMywic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl0sWyJtYWluIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0Yi1kYXNoYm9hcmQtbGF5b3V0IiksTigxLCJydW5zLXNlbGVjdG9yIiwwKSxqKDIsImFzeW5jIiksTigzLCJtZXRyaWNzLW1haW4tdmlldyIsMSksdigpKSwyJmUmJih4KDEpLGIoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsVygyLDEsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MkKSkpfSxkZXBlbmRlbmNpZXM6W0FuZSxUY2UsbHVlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7b3ZlcmZsb3c6aGlkZGVufS5ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjQ1LDE1NywuODUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmViM2I7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwfXRiLWRhc2hib2FyZC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxO292ZXJmbG93OmhpZGRlbn1uYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO3dpZHRoOjM0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2JvcmRlci1yaWdodC1jb2xvcjojNTU1fW1ldHJpY3MtbWFpbi12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCR6PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaSxSaV19KSxufSkoKSxkTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksdXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxreT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsdXVlXX0pLG59KSgpLHBPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxyTyxTaV19KSxufSkoKSxoTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsaWhdfSksbn0pKCksZHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltRY2Usa2Usa3kscE8sZG0sUmksJHAsSF8sQXUsU2ksZWgsQmNlLGt1LFVjZSxxY2UsaE8sekFdfSksbn0pKCkscHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkdWVdfSksbn0pKCksRnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaV19KSxufSkoKSxodWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksdigpKSwyJmUmJmIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W25PXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZPLGtlLHJoLEZ5XX0pLG59KSgpO2JiKGlPLFt5bixYZSxfbSxtdixodWVdLFtdKTt2YXIgTnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlXX0pLG59KSgpLG1PPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxreV19KSxufSkoKSxMeT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ldfSksbn0pKCksbXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxmdWUsUmksU2ksa3UsbU8sTnksTHldfSksbn0pKCksZ089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGd1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZ08sUmksU2ksa3UsaWgsbU8sTnksTHldfSksbn0pKCksX089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFNpXX0pLG59KSgpLF91ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ksX09dfSksbn0pKCksdnVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxWbyxSaSxTaSxBdSxlaF19KSxufSkoKSx5dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFZvLHZ1ZSxyaF19KSxufSkoKSxidWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGdPLHJJLFJpLEhfLEF1LElsLEdEXX0pLG59KSgpLHh1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZk8sa2UsYnVlLF91ZSxreSxGeSx5dWUsUmksU2ksZWgsa3UscmgsTnksTHldfSksbn0pKCksQ3VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxndWUseHVlLG11ZSxGeV19KSxufSkoKSx3dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLElsXX0pLG59KSgpLHZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSx3dWUsUmksTlAsJHAsU2ksSWwsaWgsZF8saE9dfSksbn0pKCksTXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxfTywkcCxmSSxTaSxSaV19KSxufSkoKSxTdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0N1ZSxrZSxkTyxwTyxyTyxSaSxOUCxTaSxBdSxrdSx2TyxNdWUsQ2RdfSksbn0pKCksRXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkTywkeixTdWUsU2ksdk8scHVlXX0pLG59KSgpO2Z1bmN0aW9uIEVxZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpkdixhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZToiTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIifX19XX1mdW5jdGlvbiBUcWUoKXtyZXR1cm4gWSh2ZCxuPT4oe3NjYWxhclNtb290aGluZzpufSkpfWZ1bmN0aW9uIERxZSgpe3JldHVybiBZKG1fLG49Pih7aWdub3JlT3V0bGllcnM6bn0pKX1mdW5jdGlvbiBBcWUoKXtyZXR1cm4gWShmXyxuPT4oe3Rvb2x0aXBTb3J0OlN0cmluZyhuKX0pKX1mdW5jdGlvbiBJcWUoKXtyZXR1cm4gWShyQSxuPT4oe3RpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ6bn0pKX1mdW5jdGlvbiBQcWUoKXtyZXR1cm4gWShoXyxuPT4oe3RpbWVTZXJpZXNDYXJkTWluV2lkdGg6bn0pKX1mdW5jdGlvbiBScWUoKXtyZXR1cm4gWShUQyxuPT4oe3N0ZXBTZWxlY3RvckVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBPcWUoKXtyZXR1cm4gWShIcCxuPT4oe3JhbmdlU2VsZWN0aW9uRW5hYmxlZDpufSkpfWZ1bmN0aW9uIGtxZSgpe3JldHVybiBZKFZwLG49Pih7bGlua2VkVGltZUVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBGcWUoKXtyZXR1cm4gWShnXyxuPT4oe3NpbmdsZVNlbGVjdGlvbkhlYWRlcnM6bn0pKX1mdW5jdGlvbiBOcWUoKXtyZXR1cm4gWShfXyxuPT4oe3JhbmdlU2VsZWN0aW9uSGVhZGVyczpufSkpfXZhciBUdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6SzUsdXNlRmFjdG9yeTpFbmUsZGVwczpbWjVdfSx7cHJvdmlkZTpaNSx1c2VWYWx1ZTpxRH1dLGltcG9ydHM6W2tlLCQwLE1sLFJ1LmZvclBsdWdpbihDQyxjdWUpLEdELEV1ZSxSci5mb3JGZWF0dXJlKFdELHduZSxLNSksTG8uZm9yRmVhdHVyZShbU25lXSksdnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoRXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKFRxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhEcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoQXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKElxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhQcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoUnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE9xZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhrcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoRnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE5xZSldfSksbn0pKCksRHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltmbmUsVHVlXX0pLG59KSgpLFhkPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ1VTVE9NX0VMRU1FTlQ9IkNVU1RPTV9FTEVNRU5UIixuLklGUkFNRT0iSUZSQU1FIixuLk5HX0NPTVBPTkVOVD0iTkdfQ09NUE9ORU5UIixuLk5PTkU9Ik5PTkUifShYZHx8KFhkPXt9KSksWGQpKSgpLExxZT1bInBsdWdpbkNvbnRhaW5lciJdLEJxZT1bIm5nUGx1Z2luQ29udGFpbmVyIl07ZnVuY3Rpb24gVnFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBIcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsVnFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIFVxZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24genFlKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFVxZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksWnQoKSksMiZuKXtsZXQgZT1NKDIpLGk9c3QoNik7eCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZTppKX19ZnVuY3Rpb24ganFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBHcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsanFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlP2UuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOmkpfX1mdW5jdGlvbiBXcWUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsImgzIiwxMCksRCgyLCIgVGhlcmVcdTIwMTlzIG5vIGRhc2hib2FyZCBieSB0aGUgbmFtZSBvZiBcdTIwMWMiKSxnKDMsImNvZGUiKSxEKDQpLHYoKSxEKDUsIlx1MjAxZC4gIiksdigpLGcoNiwicCIpLEQoNywiWW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS4iKSx2KCksZyg4LCJwIiksQWkoOSwxMSksdigpLFp0KCkpLDImbil7bGV0IGU9TSgyKSxpPXN0KDgpO3goNCkseXQoZS5hY3RpdmVQbHVnaW5JZCkseCg1KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKX19ZnVuY3Rpb24gcXFlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJoMyIsMTIpLEQoMiwiIE5vIGRhc2hib2FyZHMgYXJlIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZGF0YSBzZXQuICIpLHYoKSxnKDMsInAiKSxEKDQsIlByb2JhYmxlIGNhdXNlczoiKSx2KCksZyg1LCJ1bCIpKDYsImxpIiksRCg3LCJZb3UgaGF2ZW5cdTIwMTl0IHdyaXR0ZW4gYW55IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4iKSx2KCksZyg4LCJsaSIpLEQoOSwiVGVuc29yQm9hcmQgY2FuXHUyMDE5dCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuIiksdigpKCksRCgxMCwiIElmIHlvdVx1MjAxOXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZSAiKSxnKDExLCJhIiwxMyksRCgxMiwiUkVBRE1FIiksdigpLEQoMTMsIiBhbmQgcGVyaGFwcyB0aGUgIiksZygxNCwiYSIsMTQpLEQoMTUsIlRlbnNvckJvYXJkIHR1dG9yaWFsIiksdigpLEQoMTYsIi4gIiksZygxNywicCIpLEQoMTgsIiBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZSAiKSxnKDE5LCJhIiwxNSksRCgyMCwidGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtcyIpLHYoKSxEKDIxLCIgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuICIpLHYoKSxnKDIyLCJwIiksQWkoMjMsMTEpLHYoKSxadCgpKSwyJm4pe00oMik7bGV0IGU9c3QoOCk7eCgyMyksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFlxZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw2KSgxLCJkaXYiLDcpLEUoMixIcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoMyx6cWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNCxHcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNSxXcWUsMTAsMiwibmctY29udGFpbmVyIiw4KSxFKDYscXFlLDI0LDEsIm5nLWNvbnRhaW5lciIsOCksdigpKCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpbkxvYWRTdGF0ZSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTikseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLlVOS05PV05fUExVR0lOX0lEKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuTk9fRU5BQkxFRF9QTFVHSU5TKX19ZnVuY3Rpb24gWHFlKG4sdCl7aWYoMSZuJiYoZygwLCJoMyIsMTYpLEQoMSwiRGF0YSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpLHYoKSxnKDIsInAiKSxEKDMsIlRoZSBUZW5zb3JCb2FyZCBzZXJ2ZXIgbWF5IGJlIGRvd24gb3IgaW5hY2Nlc3NpYmxlLiIpLHYoKSxnKDQsInAiKSxBaSg1LDExKSx2KCkpLDImbil7TSgpO2xldCBlPXN0KDgpO3goNSksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFFxZShuLHQpe2lmKDEmbiYmKGcoMCwicCIsMTkpKDEsImkiKSxEKDIsIkxvZyBkaXJlY3Rvcnk6ICIpLGcoMywic3BhbiIpLEQoNCksdigpKCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkseXQoZS5kYXRhTG9jYXRpb24pfX1mdW5jdGlvbiBLcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLGooMiwiZGF0ZSIpLHYoKSxFKDMsUXFlLDUsMSwicCIsMTgpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJMYXN0IHJlbG9hZDogIixuZigyLDIsZS5sYXN0VXBkYXRlZCwibWVkaXVtIiksIiIpLHgoMiksYigibmdJZiIsZS5kYXRhTG9jYXRpb24pfX12YXIgWnFlPWZ1bmN0aW9uKG4pe3JldHVybntwbHVnaW5zOiEwLCJpcy1maXJzdC1wYXJ0eS1wbHVnaW4iOm59fSxCbD0oKCk9PihmdW5jdGlvbihuKXtuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ9MF09IkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EIixuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRD0xXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTj0yXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOIixuW24uTk9fRU5BQkxFRF9QTFVHSU5TPTNdPSJOT19FTkFCTEVEX1BMVUdJTlMiLG5bbi5VTktOT1dOX1BMVUdJTl9JRD00XT0iVU5LTk9XTl9QTFVHSU5fSUQiLG5bbi5MT0FERUQ9NV09IkxPQURFRCIsbltuLkxPQURJTkc9Nl09IkxPQURJTkcifShCbHx8KEJsPXt9KSksQmwpKSgpLEF1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMucGx1Z2luUmVnaXN0cnk9aSx0aGlzLnBsdWdpbkFwaUhvc3Q9cix0aGlzLlBsdWdpbkxvYWRTdGF0ZT1CbCx0aGlzLkxvYWRpbmdNZWNoYW5pc21UeXBlPVhkLHRoaXMucGx1Z2luSW5zdGFuY2VzPW5ldyBNYXB9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fCF0aGlzLmFjdGl2ZUtub3duUGx1Z2lufHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRHx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLkxPQURJTkcpcmV0dXJuO2xldCBpPUJvb2xlYW4odGhpcy5hY3RpdmVLbm93blBsdWdpbiYmIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkKSk7aWYoZS5hY3RpdmVLbm93blBsdWdpbnx8ZS5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8ZS5zZXR0aW5nc0xvYWRTdGF0ZSl7bGV0IHI9ZS5hY3RpdmVLbm93blBsdWdpbj8ucHJldmlvdXNWYWx1ZTtpZihyJiZyLmlkIT09dGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCYmdGhpcy5oaWRlUGx1Z2luKHIpLGkpe2xldCBvPXRoaXMuY3JlYXRlUGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pO28mJnRoaXMucGx1Z2luSW5zdGFuY2VzLnNldCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkLG8pfWVsc2UgdGhpcy5zaG93UGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pfShpfHxlLmxhc3RVcGRhdGVkKSYmdGhpcy5yZWxvYWQodGhpcy5hY3RpdmVLbm93blBsdWdpbixpKX1oaWRlUGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDowLG92ZXJmbG93OiJoaWRkZW4iLHZpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pfXNob3dQbHVnaW4oZSl7aWYoIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyhlLmlkKSlyZXR1cm47bGV0IGk9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO09iamVjdC5hc3NpZ24oaS5zdHlsZSx7bWF4SGVpZ2h0Om51bGwsb3ZlcmZsb3c6bnVsbCx2aXNpYmlsaXR5Om51bGwscG9zaXRpb246bnVsbH0pfWNyZWF0ZVBsdWdpbihlKXtsZXQgaT1udWxsO3N3aXRjaChlLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgWGQuQ1VTVE9NX0VMRU1FTlQ6aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUubG9hZGluZ19tZWNoYW5pc20uZWxlbWVudF9uYW1lKSxpLnJlbG9hZE9uUmVhZHk9ITEsaS5mZWF0dXJlRmxhZ3M9dGhpcy5mZWF0dXJlRmxhZ3MsdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5JRlJBTUU6aWYoIXRoaXMucGx1Z2luQXBpSG9zdCl0aHJvdyBFcnJvcihgSUZSQU1FLWJhc2VkIHBsdWdpbnMgbm90IHN1cHBvcnRlZDogJHtlLmlkfWApO2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksaS5zZXRBdHRyaWJ1dGUoInNyYyIsYGRhdGEvcGx1Z2luX2VudHJ5Lmh0bWw/bmFtZT0ke2UuaWR9YCksdGhpcy5wbHVnaW5BcGlIb3N0LnJlZ2lzdGVyUGx1Z2luSWZyYW1lKGksZS5pZCksdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5OR19DT01QT05FTlQ6bGV0IHI9dGhpcy5wbHVnaW5SZWdpc3RyeS5nZXRDb21wb25lbnQoZS5pZCk7aWYocil7bGV0IG89dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkocik7aT10aGlzLm5nUGx1Z2luQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChvKS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50fWVsc2UgY29uc29sZS5lcnJvcihgTm8gcmVnaXN0ZXJlZCBBbmd1bGFyIGNvbXBvbmVudCBmb3IgcGx1Z2luOiAke2UuaWR9YCk7YnJlYWs7Y2FzZSBYZC5OT05FOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBwbHVnaW4iKX1yZXR1cm4gaX1yZWxvYWQoZSxpKXtpZighaSYmZS5kaXNhYmxlX3JlbG9hZClyZXR1cm47bGV0IHI9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO3ImJnIucmVsb2FkJiZyLnJlbG9hZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEVvKSx3KFJ1KSx3KHhBLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwbHVnaW5zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChMcWUsNyxBZSksbHQoQnFlLDcseWkpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnBsdWdpbnNDb250YWluZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkubmdQbHVnaW5Db250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCIsYWN0aXZlS25vd25QbHVnaW46ImFjdGl2ZUtub3duUGx1Z2luIixwbHVnaW5Mb2FkU3RhdGU6InBsdWdpbkxvYWRTdGF0ZSIsZGF0YUxvY2F0aW9uOiJkYXRhTG9jYXRpb24iLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsc2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIixmZWF0dXJlRmxhZ3M6ImZlYXR1cmVGbGFncyIsbGFzdFVwZGF0ZWQ6Imxhc3RVcGRhdGVkIixlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbInBsdWdpbkNvbnRhaW5lciIsIiJdLFsibmdQbHVnaW5Db250YWluZXIiLCIiXSxbImNsYXNzIiwid2FybmluZyIsMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImVudmlyb25tZW50RmFpbHVyZURlZmF1bHRUZW1wbGF0ZSIsIiJdLFsiZGF0ZUFuZERhdGFMb2NhdGlvbiIsIiJdLFsxLCJ3YXJuaW5nIiwzLCJuZ1N3aXRjaCJdLFsxLCJ3YXJuaW5nLW1lc3NhZ2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidW5rbm93bi1wbHVnaW4iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJuby1hY3RpdmUtcGx1Z2luIl0sWyJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciXSxbMSwiZW52aXJvbm1lbnQtbm90LWxvYWRlZCJdLFsxLCJsYXN0LXJlbG9hZC10aW1lIl0sWyJjbGFzcyIsImRhdGEtbG9jYXRpb24iLDQsIm5nSWYiXSxbMSwiZGF0YS1sb2NhdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLEFpKDIsbnVsbCwyKSx2KCksRSg0LFlxZSw3LDYsImRpdiIsMyksRSg1LFhxZSw2LDEsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLEUoNyxLcWUsNCw1LCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSksMiZlJiYoYigibmdDbGFzcyIsSG4oMixacWUsKG51bGw9PWkuYWN0aXZlS25vd25QbHVnaW4/bnVsbDppLmFjdGl2ZUtub3duUGx1Z2luLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpIT09aS5Mb2FkaW5nTWVjaGFuaXNtVHlwZS5JRlJBTUUpKSx4KDQpLGIoIm5nSWYiLGkucGx1Z2luTG9hZFN0YXRlIT09aS5QbHVnaW5Mb2FkU3RhdGUuTE9BREVEJiZpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURJTkcpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxObyxocixJcixVMF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wbHVnaW5zLmlzLWZpcnN0LXBhcnR5LXBsdWdpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmZmY7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzAzMDMwfS53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7bWFyZ2luOjgwcHggYXV0byAwO21heC13aWR0aDo1NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGFzdC1yZWxvYWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zdHlsZTppdGFsaWN9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdICAgICBpZnJhbWV7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSnFlPVkoc18sZHMsKG4sdCk9PnQmJm5bdF0/T2JqZWN0LmFzc2lnbih7aWQ6dH0sblt0XSk6bnVsbCkseU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVLbm93blBsdWdpbiQ9dGhpcy5zdG9yZS5zZWxlY3QoSnFlKSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnNlbGVjdChkcyksdGhpcy5wbHVnaW5Mb2FkU3RhdGUkPXBuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4kLHRoaXMuYWN0aXZlUGx1Z2luSWQkLHRoaXMuc3RvcmUuc2VsZWN0KHlEKSkucGlwZShCKChbaSxyLG9dKT0+bnVsbCE9PW8uZmFpbHVyZUNvZGU/by5mYWlsdXJlQ29kZT09PUNsLk5PVF9GT1VORD9CbC5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORDpvLmZhaWx1cmVDb2RlPT09Q2wuUEVSTUlTU0lPTl9ERU5JRUQ/QmwuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRDpCbC5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV046bnVsbCE9PWk/QmwuTE9BREVEOm51bGw9PT1vLmxhc3RMb2FkZWRUaW1lSW5NcyYmby5zdGF0ZT09PUVlLkxPQURJTkc/QmwuTE9BRElORzpyP0JsLlVOS05PV05fUExVR0lOX0lEOkJsLk5PX0VOQUJMRURfUExVR0lOUykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyksdGhpcy5kYXRhTG9jYXRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KGJEKS5waXBlKEIoaT0+aS5kYXRhX2xvY2F0aW9uKSksdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoUHApLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChCbyksdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0U2V0dGluZ3NMb2FkU3RhdGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucyJdXSxpbnB1dHM6e2Vudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJ9LGRlY2xzOjksdmFyczoyNyxjb25zdHM6W1szLCJhY3RpdmVLbm93blBsdWdpbiIsImFjdGl2ZVBsdWdpbklkIiwiZGF0YUxvY2F0aW9uIiwibGFzdFVwZGF0ZWQiLCJwbHVnaW5Mb2FkU3RhdGUiLCJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsInNldHRpbmdzTG9hZFN0YXRlIiwiZmVhdHVyZUZsYWdzIiwiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicGx1Z2lucy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIikpLDImZSYmYigiYWN0aXZlS25vd25QbHVnaW4iLFcoMSwxMSxpLmFjdGl2ZUtub3duUGx1Z2luJCkpKCJhY3RpdmVQbHVnaW5JZCIsVygyLDEzLGkuYWN0aXZlUGx1Z2luSWQkKSkoImRhdGFMb2NhdGlvbiIsVygzLDE1LGkuZGF0YUxvY2F0aW9uJCkpKCJsYXN0VXBkYXRlZCIsVyg0LDE3LGkubGFzdExvYWRlZFRpbWVJbk1zJCkpKCJwbHVnaW5Mb2FkU3RhdGUiLFcoNSwxOSxpLnBsdWdpbkxvYWRTdGF0ZSQpKSgiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLFcoNiwyMSxpLmlzRmVhdHVyZUZsYWdzTG9hZGVkJCkpKCJzZXR0aW5nc0xvYWRTdGF0ZSIsVyg3LDIzLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSkoImZlYXR1cmVGbGFncyIsVyg4LDI1LGkuZmVhdHVyZUZsYWdzJCkpKCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUpKCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGkuZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSl9LHN0eWxlczpbInBsdWdpbnMtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7IGhlaWdodDogMTAwJTsgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYk89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W01sLGtlLFJ1XX0pLG59KSgpO2JiKHlPLFtBdWVdLFtmdF0pO3ZhciBJdWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRvY3VtZW50PWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9dGhpcy5vblZpc2liaWxpdHlDaGFuZ2VJbXBsLmJpbmQodGhpcyksdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnBpcGUoZm4oYWEuZ2V0UmVsb2FkRW5hYmxlZCkpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5waXBlKGZuKGFhLmdldFJlbG9hZFBlcmlvZEluTXMpKSx0aGlzLnJlbG9hZFRpbWVySWQ9bnVsbCx0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UpLHBuKHRoaXMucmVsb2FkRW5hYmxlZCQucGlwZShkaSgpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkLnBpcGUoZGkoKSkpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLmNhbmNlbExvYWQoKSxlJiZ0aGlzLmxvYWQoaSl9KX1vblZpc2liaWxpdHlDaGFuZ2VJbXBsKCl7InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJnRoaXMubWlzc2VkQXV0b1JlbG9hZCYmKHRoaXMubWlzc2VkQXV0b1JlbG9hZD0hMSx0aGlzLnN0b3JlLmRpc3BhdGNoKEhhKCkpKX1sb2FkKGUpe3RoaXMucmVsb2FkVGltZXJJZD1zZXRUaW1lb3V0KCgpPT57InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5zdG9yZS5kaXNwYXRjaChIYSgpKTp0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITAsdGhpcy5sb2FkKGUpfSxlKX1jYW5jZWxMb2FkKCl7bnVsbCE9PXRoaXMucmVsb2FkVGltZXJJZCYmY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXJJZCksdGhpcy5yZWxvYWRUaW1lcklkPW51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLmNhbmNlbExvYWQoKSx0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSx0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KEJ0KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicmVsb2FkZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFB1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCJdXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJwbHVnaW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInBsdWdpbnMiLDApKDEsInJlbG9hZGVyIil9LGRlcGVuZGVuY2llczpbeU8sSXVlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksZTg9InNtb290aGluZyIsdDg9InJ1bkNvbG9yR3JvdXAiLG44PSJ0YWdGaWx0ZXIiLGk4PSJydW5GaWx0ZXIiLHI4PSJyZWdleDoiLHhPPWNsYXNzIGV4dGVuZHMgUnVle2dldE1ldHJpY3NQaW5uZWRDYXJkcyh0KXtyZXR1cm4gcG4oW3Quc2VsZWN0KEVDKSx0LnNlbGVjdChsWildKS5waXBlKEIoKFtlLGldKT0+e2lmKCFlLmxlbmd0aCYmIWkubGVuZ3RoKXJldHVybltdO2xldCBvPVsuLi5lLm1hcCgoe3BsdWdpbjpzLHRhZzphLHNhbXBsZTpsLHJ1bklkOmN9KT0+e2xldCB1PXtwbHVnaW46cyx0YWc6YX07cmV0dXJuIHphKHMpJiYodS5ydW5JZD1jKSxVYShzKSYmKHUuc2FtcGxlPWwpLHV9KSwuLi5pXTtyZXR1cm5be2tleToicGlubmVkQ2FyZHMiLHZhbHVlOkpTT04uc3RyaW5naWZ5KG8pfV19KSl9c2VyaWFsaXplU3RhdGVUb1F1ZXJ5UGFyYW1zKHQpe3JldHVybiBwbihbdGhpcy5nZXRNZXRyaWNzUGlubmVkQ2FyZHModCksdC5zZWxlY3QoX2MpLnBpcGUoQihlPT5lP1t7a2V5Om44LHZhbHVlOmV9XTpbXSkpLHBuKFt0LnNlbGVjdChnQyksdC5zZWxlY3QoV2YpXSkucGlwZShCKChbZSxpXSk9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT57aWYodm9pZCAwPT09aSlyZXR1cm57fTtsZXQgcj10W2VdO3JldHVybiByJiZyLnF1ZXJ5UGFyYW1PdmVycmlkZT97a2V5OnIucXVlcnlQYXJhbU92ZXJyaWRlLHZhbHVlOmk/LnRvU3RyaW5nKCl9Ont9fSkuZmlsdGVyKCh7a2V5OmUsdmFsdWU6aX0pPT5lJiZ2b2lkIDAhPT1pKX0oZSxpKSkpLHQuc2VsZWN0KHVaKS5waXBlKEIoZT0+TnVtYmVyLmlzRmluaXRlKGUuc2NhbGFyU21vb3RoaW5nKT9be2tleTplOCx2YWx1ZTpTdHJpbmcoZS5zY2FsYXJTbW9vdGhpbmcpfV06W10pKSx0LnNlbGVjdChUVikucGlwZShCKGU9PntpZighZSlyZXR1cm5bXTtsZXQgaTtzd2l0Y2goZS5rZXkpe2Nhc2UgZXIuRVhQRVJJTUVOVDppPSJleHBlcmltZW50IjticmVhaztjYXNlIGVyLlJVTjppPSJydW4iO2JyZWFrO2Nhc2UgZXIuUkVHRVg6aT1gJHtyOH0ke2UucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5OnQ4LHZhbHVlOml9XX0pKSx0LnNlbGVjdChKZikucGlwZShCKGU9PmU/W3trZXk6aTgsdmFsdWU6ZX1dOltdKSldKS5waXBlKEIoZT0+ZS5mbGF0KCkpKX1kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHQpe2xldCBlPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwscz1udWxsO2ZvcihsZXR7a2V5OmEsdmFsdWU6bH1vZiB0KXN3aXRjaChhKXtjYXNlInBpbm5lZENhcmRzIjplPXRZZShsKTticmVhaztjYXNlIGU4Omk9TnVtYmVyKGwpO2JyZWFrO2Nhc2UgdDg6c3dpdGNoKGwpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OmVyLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6ZXIuUlVOfX1pZihsLnN0YXJ0c1dpdGgocjgpKXtsZXQgYz1sLnNsaWNlKHI4Lmxlbmd0aCk7bz17a2V5OmVyLlJFR0VYLHJlZ2V4U3RyaW5nOmN9fWJyZWFrO2Nhc2Ugbjg6cj1sO2JyZWFrO2Nhc2UgaTg6cz1sfXJldHVybnttZXRyaWNzOntwaW5uZWRDYXJkczplfHxbXSxzbW9vdGhpbmc6aSx0YWdGaWx0ZXI6cn0scnVuczp7Z3JvdXBCeTpvLHJlZ2V4RmlsdGVyOnN9fX19O2Z1bmN0aW9uIHRZZShuKXtsZXQgdDt0cnl7dD1KU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBudWxsO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIGkucnVuSWQscz0ibnVtYmVyIj09dHlwZW9mIGkuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiBpLnRhZyxsPW98fHR5cGVvZiBpLnJ1bklkPiJ1IixjPXN8fHR5cGVvZiBpLnNhbXBsZT4idSI7aWYoISgic3RyaW5nIj09dHlwZW9mIGkucGx1Z2luJiZhJiZsJiZjJiZMSyhpLnBsdWdpbikmJmkudGFnKSljb250aW51ZTtpZih6YShpLnBsdWdpbikpe2lmKCFpLnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYoaS5ydW5JZCljb250aW51ZTtpZihzJiYoIVVhKGkucGx1Z2luKXx8IU51bWJlci5pc0ludGVnZXIoaS5zYW1wbGUpfHxpLnNhbXBsZTwwKSljb250aW51ZTtsZXQgdT17cGx1Z2luOmkucGx1Z2luLHRhZzppLnRhZ307byYmKHUucnVuSWQ9aS5ydW5JZCkscyYmKHUuc2FtcGxlPWkuc2FtcGxlKSxlLnB1c2godSl9cmV0dXJuIGV9ZnVuY3Rpb24ga3VlKCl7cmV0dXJuW3tyb3V0ZUtpbmQ6ZmkuRVhQRVJJTUVOVCxwYXRoOiIvIixuZ0NvbXBvbmVudDpQdWUsZGVmYXVsdFJvdXRlOiEwLGRlZXBMaW5rUHJvdmlkZXI6bmV3IHhPfV19ZnVuY3Rpb24gblllKG4pe3JldHVybih0LGUpPT57bGV0IGk9bih0LGUpO3JldHVybiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGUudHlwZSksY29uc29sZS5sb2coInByZXYgc3RhdGUiLHQpLGNvbnNvbGUubG9nKCJhY3Rpb24iLGUpLGNvbnNvbGUubG9nKCJuZXh0IHN0YXRlIixpKSxjb25zb2xlLmdyb3VwRW5kKCksaX19ZnVuY3Rpb24gRnVlKCl7cmV0dXJuIEJiKCk/blllOm49Pih0LGUpPT5uKHQsZSl9eE89WTgoW0g2KCldLHhPKTt2YXIgTnVlPW5ldyBzZSgiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KSxMdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VzAsdXNlRmFjdG9yeTpGdWUsbXVsdGk6ITB9XSxpbXBvcnRzOltSci5mb3JSb290KE51ZSx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxMby5mb3JSb290KFtdKV19KSxufSkoKSxCdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFZ1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsYk8sQnVlXX0pLG59KSgpLG84PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm4sYm9vdHN0cmFwOltWZWVdfSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZF8sUWVlLHlULE5YLCQwLEhlZSxoYy5yZWdpc3RlclJvdXRlcyhrdWUpLHpBLFVBLFVlZSxWdWUsTWwsWWVlLGplZSxaZWUsT0QsSmVlLEdlZSxZQix4QSxiTyxnQSxtSSxMdWUsRHVlXX0pLG59KSgpOyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/QjMoKS5ib290c3RyYXBNb2R1bGUobzgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKT0+e0IzKCkuYm9vdHN0cmFwTW9kdWxlKG84KX0pLGZ1bmN0aW9uKCl7aWYoajcpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTt6Nz0hMX0oKX0pKCk7Ci8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAogKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4zLjYgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuCiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9ibG9iL21hc3Rlci9MSUNFTlNFCiAqLwovL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5MiwgYW5kIGNhdXNlcwovL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4KLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCi8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KCnZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKGZ1bmN0aW9uIChnbG9iYWwsIHNldFRpbWVvdXQpIHsKICAgIHZhciByZXEsIHMsIGhlYWQsIGJhc2VFbGVtZW50LCBkYXRhTWFpbiwgc3JjLAogICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCiAgICAgICAgdmVyc2lvbiA9ICcyLjMuNicsCiAgICAgICAgY29tbWVudFJlZ0V4cCA9IC9cL1wqW1xzXFNdKj9cKlwvfChbXjoiJz1dfF4pXC9cLy4qJC9tZywKICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAogICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKICAgICAgICBjdXJyRGlyUmVnRXhwID0gL15cLlwvLywKICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCiAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAogICAgICAgIGhhc093biA9IG9wLmhhc093blByb3BlcnR5LAogICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGUKICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAogICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRlLCBidXQgbm90IHN1cmUgaG93CiAgICAgICAgLy90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCiAgICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwogICAgICAgICAgICAgICAgICAgICAgL15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAogICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAogICAgICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCiAgICAgICAgaXNPcGVyYSA9IHR5cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT3BlcmFdJywKICAgICAgICBjb250ZXh0cyA9IHt9LAogICAgICAgIGNmZyA9IHt9LAogICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCiAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKCiAgICAvL0NvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlICcpLy9jb21tZW50JywgZG8gbm90IGxvc2UgdGhlIHByZWZpeCB0byBjb21tZW50LgogICAgZnVuY3Rpb24gY29tbWVudFJlcGxhY2UobWF0Y2gsIHNpbmdsZVByZWZpeCkgewogICAgICAgIHJldHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKICAgICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCiAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOwogICAgfQoKICAgIC8qKgogICAgICogQ3ljbGVzIG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gKICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKICAgICAgICB2YXIgcHJvcDsKICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7CiAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKICAgICAgICAgICAgICAgIGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgewogICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFpc0FycmF5KHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZhbHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAogICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgogICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihlcnIpIHsKICAgICAgICB0aHJvdyBlcnI7CiAgICB9CgogICAgLy9BbGxvdyBnZXR0aW5nIGEgZ2xvYmFsIHRoYXQgaXMgZXhwcmVzc2VkIGluCiAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgogICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHZhciBnID0gZ2xvYmFsOwogICAgICAgIGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKICAgICAgICAgICAgZyA9IGdbcGFydF07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGVycm9yIElEIHRoYXQgbWFwcyB0byBhbiBJRCBvbiBhIHdlYiBwYWdlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KICAgICAqCiAgICAgKiBAcmV0dXJucyB7RXJyb3J9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihpZCwgbXNnLCBlcnIsIHJlcXVpcmVNb2R1bGVzKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0cHM6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjJyArIGlkKTsKICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7CiAgICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZTsKICAgIH0KCiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAogICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVvZiByZXF1aXJlanMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkgewogICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3RhbmNlLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNmZyA9IHJlcXVpcmVqczsKICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKICAgICAgICAvL2Fzc3VtZSBpdCBpcyBhIGNvbmZpZyBvYmplY3QuCiAgICAgICAgY2ZnID0gcmVxdWlyZTsKICAgICAgICByZXF1aXJlID0gdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKICAgICAgICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0LCBoYW5kbGVycywKICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCiAgICAgICAgICAgIGNvbmZpZyA9IHsKICAgICAgICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBkZWZhdWx0IGZvciBtYXAKICAgICAgICAgICAgICAgIC8vY29uZmlnIHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAogICAgICAgICAgICAgICAgLy93aWxsIHJ1biBmYXN0ZXIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KICAgICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAogICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHt9LAogICAgICAgICAgICAgICAgcGtnczoge30sCiAgICAgICAgICAgICAgICBzaGltOiB7fSwKICAgICAgICAgICAgICAgIGNvbmZpZzoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgLy9yZWdpc3RyeSBvZiBqdXN0IGVuYWJsZWQgbW9kdWxlcywgdG8gc3BlZWQKICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCiAgICAgICAgICAgIC8vYXJlIHJlZ2lzdGVyZWQsIGJ1dCBub3QgYWN0aXZhdGVkLgogICAgICAgICAgICBlbmFibGVkUmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKICAgICAgICAgICAgZGVmUXVldWUgPSBbXSwKICAgICAgICAgICAgZGVmaW5lZCA9IHt9LAogICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCiAgICAgICAgICAgIGJ1bmRsZXNNYXAgPSB7fSwKICAgICAgICAgICAgcmVxdWlyZUNvdW50ZXIgPSAxLAogICAgICAgICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lCiAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCiAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKICAgICAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgogICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS4KICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpLCBwYXJ0OwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwogICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgewogICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLiwKICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CiAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgd29yayB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGgsIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnQKICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgogICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChpID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCiAgICAgICAgICogdG8uCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcCBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgdmFsdWUuIFNob3VsZAogICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciBwa2dNYWluLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwgbGFzdEluZGV4LAogICAgICAgICAgICAgICAgZm91bmRNYXAsIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgbm9ybWFsaXplZEJhc2VQYXJ0cywKICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpKSwKICAgICAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsCiAgICAgICAgICAgICAgICBzdGFyTWFwID0gbWFwICYmIG1hcFsnKiddOwoKICAgICAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKCiAgICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQgY29tcGF0aWJpbGl0eSwgc3RyaXAgLmpzIGZyb20gZW5kCiAgICAgICAgICAgICAgICAvLyBvZiBJRHMuIEhhdmUgdG8gZG8gdGhpcyBoZXJlLCBhbmQgbm90IGluIG5hbWVUb1VybAogICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBub2RlIGFsbG93cyBlaXRoZXIgLmpzIG9yIG5vbiAuanMgdG8gbWFwCiAgICAgICAgICAgICAgICAvLyB0byBzYW1lIGZpbGUuCiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm5vZGVJZENvbXBhdCAmJiBqc1N1ZmZpeFJlZ0V4cC50ZXN0KG5hbWVbbGFzdEluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lW2xhc3RJbmRleF0gPSBuYW1lW2xhc3RJbmRleF0ucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lCiAgICAgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCiAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwogICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bwogICAgICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yCiAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuam9pbignLycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgogICAgICAgICAgICBpZiAoYXBwbHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1hcCkpIHsKICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKCiAgICAgICAgICAgICAgICBvdXRlckxvb3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lU2VnbWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24gdGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJMb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBmb3IgYSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCwKICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rhck1hcCAmJiBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3VuZFN0YXJNYXApIHsKICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmFtZSBwb2ludHMgdG8gYSBwYWNrYWdlJ3MgbmFtZSwgdXNlCiAgICAgICAgICAgIC8vIHRoZSBwYWNrYWdlIG1haW4gaW5zdGVhZC4KICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbmFtZSk7CgogICAgICAgICAgICByZXR1cm4gcGtnTWFpbiA/IHBrZ01haW4gOiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KG5hbWUpIHsKICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKSA9PT0gbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYXNQYXRoRmFsbGJhY2soaWQpIHsKICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CiAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJyYXkocGF0aENvbmZpZykgJiYgcGF0aENvbmZpZy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvL1BvcCBvZmYgdGhlIGZpcnN0IGFycmF5IHZhbHVlLCBzaW5jZSBpdCBmYWlsZWQsIGFuZAogICAgICAgICAgICAgICAgLy9yZXRyeQogICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOwogICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlLnVuZGVmKGlkKTsKCiAgICAgICAgICAgICAgICAvL0N1c3RvbSByZXF1aXJlIHRoYXQgZG9lcyBub3QgZG8gbWFwIHRyYW5zbGF0aW9uLCBzaW5jZQogICAgICAgICAgICAgICAgLy9JRCBpcyAiYWJzb2x1dGUiLCBhbHJlYWR5IG1hcHBlZC9yZXNvbHZlZC4KICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUobnVsbCwgewogICAgICAgICAgICAgICAgICAgIHNraXBNYXA6IHRydWUKICAgICAgICAgICAgICAgIH0pKFtpZF0pOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL1R1cm5zIGEgcGx1Z2luIXJlc291cmNlIHRvIFtwbHVnaW4sIHJlc291cmNlXQogICAgICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQogICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KICAgICAgICBmdW5jdGlvbiBzcGxpdFByZWZpeChuYW1lKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXgsCiAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVmaXgsIG1vZHVsZQogICAgICAgICAqIG5hbWUsIGFuZCBwYXRoLiBJZiBwYXJlbnRNb2R1bGVNYXAgaXMgcHJvdmlkZWQgaXQgd2lsbAogICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbW9kdWxlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKICAgICAgICAgKiBmb3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc05vcm1hbGl6ZWQ6IGlzIHRoZSBJRCBhbHJlYWR5IG5vcm1hbGl6ZWQuCiAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCiAgICAgICAgICogU2hvdWxkIG9ubHkgYmUgdHJ1ZSBpZiB0aGlzIG1hcCBpcyBmb3IgYSBkZXBlbmRlbmN5LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRzLAogICAgICAgICAgICAgICAgcHJlZml4ID0gbnVsbCwKICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSB0cnVlLAogICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKCiAgICAgICAgICAgIC8vSWYgbm8gbmFtZSwgdGhlbiBpdCBtZWFucyBpdCBpcyBhIHJlcXVpcmUgY2FsbCwgZ2VuZXJhdGUgYW4KICAgICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgogICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOwogICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHNbMV07CgogICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBub3JtYWxpemUocHJlZml4LCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbk1vZHVsZSAmJiBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXN0ZWQgcGx1Z2luIHJlZmVyZW5jZXMsIHRoZW4gZG8gbm90IHRyeSB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFzIGl0IHdpbGwgbm90IG5vcm1hbGl6ZSBjb3JyZWN0bHkuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGxhY2VzIGEgcmVzdHJpY3Rpb24gb24gcmVzb3VyY2VJZHMsIGFuZCB0aGUgbG9uZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm0gc29sdXRpb24gaXMgbm90IHRvIG5vcm1hbGl6ZSB1bnRpbCBwbHVnaW5zIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgYW5kIGFsbCBub3JtYWxpemF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGluZyBvZiBhIGxvYWRlciBwbHVnaW4uIEJ1dCBmb3Igbm93LCBmaXhlcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIHVzZXMuIERldGFpbHMgaW4gIzExMzEKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lLmluZGV4T2YoJyEnKSA9PT0gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgcmVndWxhciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwoKICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZWQgbmFtZSBtYXkgYmUgYSBwbHVnaW4gSUQgZHVlIHRvIG1hcCBjb25maWcKICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QKICAgICAgICAgICAgICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQuCiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKICAgICAgICAgICAgICAgICAgICBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgdGhlIGlkIGlzIGEgcGx1Z2luIGlkIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgaXQgbmVlZHMKICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQogICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUuCiAgICAgICAgICAgIHN1ZmZpeCA9IHByZWZpeCAmJiAhcGx1Z2luTW9kdWxlICYmICFpc05vcm1hbGl6ZWQgPwogICAgICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CiAgICAgICAgICAgICAgICAgICAgICcnOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAogICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsCiAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgsCiAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAogICAgICAgICAgICAgICAgaWQ6IChwcmVmaXggPwogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0TW9kdWxlKGRlcE1hcCkgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1vZDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwgbmFtZSwgZm4pIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoaGFzUHJvcChkZWZpbmVkLCBpZCkgJiYKICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgewogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgIGZuKGRlZmluZWRbaWRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1vZCA9IGdldE1vZHVsZShkZXBNYXApOwogICAgICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIsIGVycmJhY2spIHsKICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRoaXMgY29udGV4dCdzCiAgICAgICAgICogZGVmUXVldWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgewogICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZRdWV1ZSBpdGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgZWFjaChnbG9iYWxEZWZRdWV1ZSwgZnVuY3Rpb24ocXVldWVJdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gcXVldWVJdGVtWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBoYW5kbGVycyA9IHsKICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLnJlcXVpcmUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1vZC5tYXApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2V4cG9ydHMnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5leHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFttb2QubWFwLmlkXSA9IG1vZC5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5leHBvcnRzID0gZGVmaW5lZFttb2QubWFwLmlkXSA9IHt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QubW9kdWxlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtb2QubWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCkgfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1vZC5leHBvcnRzIHx8IChtb2QuZXhwb3J0cyA9IHt9KQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgewogICAgICAgICAgICAvL0NsZWFuIHVwIG1hY2hpbmVyeSB1c2VkIGZvciB3YWl0aW5nIG1vZHVsZXMuCiAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CiAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7CiAgICAgICAgICAgIHZhciBpZCA9IG1vZC5tYXAuaWQ7CgogICAgICAgICAgICBpZiAobW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICBlYWNoKG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7CiAgICAgICAgICAgIHZhciBlcnIsIHVzaW5nUGF0aEZhbGxiYWNrLAogICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwKICAgICAgICAgICAgICAgIC8vSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0U2Vjb25kcyBvZiAwLgogICAgICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCiAgICAgICAgICAgICAgICByZXFDYWxscyA9IFtdLAogICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7CgogICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgogICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgogICAgICAgICAgICBlYWNoUHJvcChlbmFibGVkUmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtb2QubWFwLAogICAgICAgICAgICAgICAgICAgIG1vZElkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNob3VsZCBiZSBleGVjdXRlZCwgYW5kIGl0IGhhcyBub3QKICAgICAgICAgICAgICAgICAgICAvL2JlZW4gaW5pdGVkIGFuZCB0aW1lIGlzIHVwLCByZW1lbWJlciBpdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQYXRoRmFsbGJhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTG9hZHMucHVzaChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW9kLmluaXRlZCAmJiBtb2QuZmV0Y2hlZCAmJiBtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAucHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vIHJlYXNvbiB0byBrZWVwIGxvb2tpbmcgZm9yIHVuZmluaXNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmVjYXVzZSBpdCBtYXkgYmUgdGhhdCBhIHBsdWdpbiByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5Y2xlQ2hlY2sgPSBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGV4cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vSWYgd2FpdCB0aW1lIGV4cGlyZWQsIHRocm93IGVycm9yIG9mIHVubG9hZGVkIG1vZHVsZXMuCiAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CiAgICAgICAgICAgICAgICBlcnIuY29udGV4dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Ob3QgZXhwaXJlZCwgY2hlY2sgZm9yIGEgY3ljbGUuCiAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgewogICAgICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUobW9kLCB7fSwge30pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCiAgICAgICAgICAgIC8vb3RoZXIgdGhhbiBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5kaW5nCiAgICAgICAgICAgIC8vc2NyaXB0cywgdGhlbiBqdXN0IHRyeSBiYWNrIGxhdGVyLgogICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcgdG8gbG9hZC4gV2FpdCBmb3IgaXQsIGJ1dCBvbmx5CiAgICAgICAgICAgICAgICAvL2lmIGEgdGltZW91dCBpcyBub3QgYWxyZWFkeSBpbiBlZmZlY3QuCiAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTW9kdWxlID0gZnVuY3Rpb24gKG1hcCkgewogICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7CiAgICAgICAgICAgIHRoaXMuc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbWFwLmlkKTsKICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWQgPSBbXTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CiAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOwoKICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQogICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXSwKICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkLCB0aGlzLmZldGNoZWQKICAgICAgICAgICAgKi8KICAgICAgICB9OwoKICAgICAgICBNb2R1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENhbiBoYXBwZW4gaWYgdGhlcmUKICAgICAgICAgICAgICAgIC8vYXJlIG11bHRpcGxlIGRlZmluZSBjYWxscyBmb3IgdGhlIHNhbWUgbW9kdWxlLiBUaGF0IGlzIG5vdAogICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ2lzdGVyIGZvciBlcnJvcnMgb24gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG5vIGVycmJhY2sgYWxyZWFkeSwgYnV0IHRoZXJlIGFyZSBlcnJvciBsaXN0ZW5lcnMKICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgogICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKICAgICAgICAgICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3IgZXhhbXBsZQogICAgICAgICAgICAgICAgLy8ic2hpbSIgZGVwcyBhcmUgcGFzc2VkIGluIGhlcmUgZGlyZWN0bHksIGFuZAogICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0IHRoYXQgY29uZmlnLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gZGVwTWFwcyAmJiBkZXBNYXBzLnNsaWNlKDApOwoKICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJhY2s7CgogICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwoKICAgICAgICAgICAgICAgIC8vQ291bGQgaGF2ZSBvcHRpb24gdG8gaW5pdCB0aGlzIG1vZHVsZSBpbiBlbmFibGVkIG1vZGUsCiAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAogICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCiAgICAgICAgICAgICAgICAvL2lmIGVuYWJsZWQgcHJldmlvdXNseSwgbm93IHRyaWdnZXIgZGVwZW5kZW5jaWVzIGFzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgLy9XaWxsIGNhbGwgdGhpcy5jaGVjaygpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxsYmFjayBmb3IgYSBnaXZlbgogICAgICAgICAgICAgICAgLy9leHBvcnQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50IC09IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5mZXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5mZXRjaGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOwoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1hbmFnZXIgaXMgZm9yIGEgcGx1Z2luIG1hbmFnZWQgcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUodGhpcy5tYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8IFtdLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMubWFwLnVybDsKCiAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgIGlmICghdXJsRmV0Y2hlZFt1cmxdKSB7CiAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAogICAgICAgICAgICAgKiBkZWZpbmUgaXQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgdGhpcy5lbmFibGluZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZXJyLCBjanNNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICBkZXBFeHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCBpZiBub3QgYWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGNvbnRleHQuZGVmUXVldWVNYXAsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykgewogICAgICAgICAgICAgICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2FsbAogICAgICAgICAgICAgICAgICAgIC8vdGhhdCB3b3VsZCByZXN1bHQgaW4gY2hlY2tpbmcgdGhpcyBtb2R1bGUgdG8KICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5nIHRoYXQsIHNraXAgdGhpcyB3b3JrLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYgIXRoaXMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmYWN0b3J5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29ubHkgZG8gaXQgZm9yIGRlZmluZSgpJ2QgIG1vZHVsZXMuIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25FcnJvciBpcyBzZXQsIHVzZSB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvciAhPT0gZGVmYXVsdE9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF2b3IgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cy4gSWYgbm9kZS9janMgaW4gcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIEZhdm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBhc3NpZ25tZW50IG92ZXIgZXhwb3J0cyBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgZXhwb3J0cyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzaW5nRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IHRoaXMubWFwLmlzRGVmaW5lID8gW3RoaXMubWFwLmlkXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIGxpdGVyYWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmICF0aGlzLmlnbm9yZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEub25SZXNvdXJjZUxvYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1hcHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNMb2FkTWFwcy5wdXNoKGRlcE1hcC5ub3JtYWxpemVkTWFwIHx8IGRlcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCByZXNMb2FkTWFwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBjYWxsaW5nIGNoZWNrIGFnYWluCiAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBhCiAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCwKICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXgpOwoKICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CgogICAgICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCB0aGlzLm1hcC5pZCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLm1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vSWYgY3VycmVudCBtYXAgaXMgbm90IG5vcm1hbGl6ZWQsIHdhaXQgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBpZiB0aGUgcGx1Z2luIGFsbG93cyBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4ICsgJyEnICsgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5ub3JtYWxpemVkTWFwID0gbm9ybWFsaXplZE1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZCA9IGdldE93bihyZWdpc3RyeSwgbm9ybWFsaXplZE1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0lmIGEgcGF0aHMgY29uZmlnLCB0aGVuIGp1c3QgbG9hZCB0aGF0IGZpbGUgaW5zdGVhZCB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVzb2x2ZSB0aGUgcGx1Z2luLCBhcyBpdCBpcyBidWlsdCBpbnRvIHRoYXQgcGF0aHMgbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnVybCA9IGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRlbXAgdW5ub3JtYWxpemVkIG1vZHVsZXMgZm9yIHRoaXMgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaWQuaW5kZXhPZihpZCArICdfdW5ub3JtYWxpemVkJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQogICAgICAgICAgICAgICAgICAgIC8vY29udGV4dCBvciBob3cgdG8gJ2NvbXBsZXRlJyB0aGUgbG9hZC4KICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byByZWluZm9yY2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zdXBwb3J0IG9sZCBzdHlsZSBvZiBwYXNzaW5nIG1vZHVsZU5hbWUgYnV0IGRpc2NhcmQKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGludGVybmFsIHJlZi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QWx0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb2ZmIGludGVyYWN0aXZlIHNjcmlwdCBtYXRjaGluZyBmb3IgSUUgZm9yIGFueSBkZWZpbmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1ByaW1lIHRoZSBzeXN0ZW0gYnkgY3JlYXRpbmcgYSBtb2R1bGUgaW5zdGFuY2UgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jb25maWdbbW9kdWxlTmFtZV0gPSBjb25maWcuY29uZmlnW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ2Zyb210ZXh0ZXZhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBldmFsIGZvciAnICsgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2luCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3VwcG9ydCBhbm9ueW1vdXMgbW9kdWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIHZhbHVlIG9mIHRoYXQgbW9kdWxlIHRvIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKICAgICAgICAgICAgICAgICAgICAvL2NvdWxkIGJlIHNvbWUgd2VpcmQgc3RyaW5nIHdpdGggbm8gcGF0aCB0aGF0IGFjdHVhbGx5IHdhbnRzIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwc1twbHVnaW5NYXAuaWRdID0gcGx1Z2luTWFwOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBlbmFibGVkUmVnaXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhlIG1vZHVsZSBpcyBlbmFibGluZywKICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAvL2ZvciBkZXBlbmRlbmNpZXMgZG8gbm90IHRyaWdnZXIgaW5hZHZlcnRlbnQgbG9hZAogICAgICAgICAgICAgICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtb2QsIGhhbmRsZXI7CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0RlcGVuZGVuY3kgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgZGVwTWFwCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdpcmVkIHVwIHRvIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXAuaXNEZWZpbmUgPyB0aGlzLm1hcCA6IHRoaXMubWFwLnBhcmVudE1hcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwc1tpXSA9IGRlcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCArPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuZGVmZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIHRoaXMuZXJyYmFjaykpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkaXJlY3QgZXJyYmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpcyBsaXN0ZW5pbmcgZm9yIGVycm9ycywgc28gYmUgc3VyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvciBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOwogICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9kdWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJwogICAgICAgICAgICAgICAgICAgIC8vQWxzbywgZG9uJ3QgY2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAogICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYgbW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShkZXBNYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoUHJvcCh0aGlzLnBsdWdpbk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsKICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIGlmICghY2JzKSB7CiAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNbbmFtZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNicy5wdXNoKGNiKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHsKICAgICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9uIChjYikgewogICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMgYnJva2VuIE1vZHVsZSBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZvciBhIHdoaWxlIGluIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgogICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKGFyZ3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsKICAgICAgICAgICAgLy9GYXZvciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQogICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZlbnQvYWRkRXZlbnRMaXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQogICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCB3aGljaCB3aWxsIGJlCiAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgogICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5vZGUuZGV0YWNoRXZlbnQoaWVOYW1lLCBmdW5jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAogICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgbm9kZS4KICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7CiAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQ7CgogICAgICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOwogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGludGFrZURlZmluZXMoKSB7CiAgICAgICAgICAgIHZhciBhcmdzOwoKICAgICAgICAgICAgLy9BbnkgZGVmaW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCiAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogJyArCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXplZCBieSB0aGUKICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgY29uZmlnOiBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSwKICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAogICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVkLAogICAgICAgICAgICB1cmxGZXRjaGVkOiB1cmxGZXRjaGVkLAogICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCiAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKICAgICAgICAgICAgTW9kdWxlOiBNb2R1bGUsCiAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCiAgICAgICAgICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCiAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogU2V0IGEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb25maWd1cmU6IGZ1bmN0aW9uIChjZmcpIHsKICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybC5jaGFyQXQoY2ZnLmJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgb2xkIHN0eWxlIHVybEFyZ3Mgc3RyaW5nIHRvIGEgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNmZy51cmxBcmdzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHZhciB1cmxBcmdzID0gY2ZnLnVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgY2ZnLnVybEFyZ3MgPSBmdW5jdGlvbihpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJnczsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcsCiAgICAgICAgICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgogICAgICAgICAgICAgICAgdmFyIHNoaW0gPSBjb25maWcuc2hpbSwKICAgICAgICAgICAgICAgICAgICBvYmpzID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9ianNbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhlIGJ1bmRsZXMKICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5idW5kbGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlc01hcFt2XSA9IHByb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQogICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLnNoaW0sIGZ1bmN0aW9uICh2YWx1ZSwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hpbSA9IHNoaW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9BZGp1c3QgcGFja2FnZXMgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiwgbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBwa2dPYmo7CgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGtnT2JqLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1tuYW1lXSA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TYXZlIHBvaW50ZXIgdG8gbWFpbiBtb2R1bGUgSUQgZm9yIHBrZyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWluIHBhdGhzIGFyZSBub3JtYWxpemVkLAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmlsZSBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGtnc1tuYW1lXSA9IHBrZ09iai5uYW1lICsgJy8nICsgKHBrZ09iai5tYWluIHx8ICdtYWluJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAvL3VwZGF0ZSB0aGUgbWFwcyBmb3IgdGhlbSwgc2luY2UgdGhlaXIgaW5mbywgbGlrZSBVUkxzIHRvIGxvYWQsCiAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG1vZHVsZSBhbHJlYWR5IGhhcyBpbml0IGNhbGxlZCwgc2luY2UgaXQgaXMgdG9vCiAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCiAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmICFtb2QubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKICAgICAgICAgICAgICAgIC8vcmVxdWlyZSB3aXRoIHRob3NlIGFyZ3MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmVxdWlyZSBpcyBkZWZpbmVkIGFzIGEKICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlKGNmZy5kZXBzIHx8IFtdLCBjZmcuY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmbjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VSZXF1aXJlOiBmdW5jdGlvbiAocmVsTWFwLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2NhbFJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQnVpbGRDYWxsYmFjayAmJiBjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ludmFsaWQgY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZlYXQ6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBvbmx5IHdvcmtzIHdoaWxlIG1vZHVsZSBpcyBiZWluZyBkZWZpbmVkLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYXZhaWxhYmxlIChhcyBpbiB0aGUgTm9kZSBhZGFwdGVyKSwgcHJlZmVyIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxNYXAsIGxvY2FsUmVxdWlyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVsZSBuYW1lLCBpZiBpdCBjb250YWlucyAuIG9yIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwcywgcmVsTWFwLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQgZm9yIGNvbnRleHQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbE1hcCA/ICcnIDogJy4gVXNlIHJlcXVpcmUoW10pJykpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCiAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU29tZSBkZWZpbmVzIGNvdWxkIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KICAgICAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdG9yZSBpZiBtYXAgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9ucy5za2lwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBtaXhpbihsb2NhbFJlcXVpcmUsIHsKICAgICAgICAgICAgICAgICAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlciwKCiAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSArIC5leHRlbnNpb24gaW50byBhbiBVUkwgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIHBsYWluIFVSTHMgbGlrZSBuYW1lVG9VcmwuCiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtb2R1bGVOYW1lUGx1c0V4dC5sYXN0SW5kZXhPZignLicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQgPT09ICcuLic7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBleHQsICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIGlkKSB8fCBoYXNQcm9wKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCiAgICAgICAgICAgICAgICBpZiAoIXJlbE1hcCkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZS51bmRlZiA9IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZpeCBmb3IgIzQwOAogICAgICAgICAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIHRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBtb2QudW5kZWZlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cmxGZXRjaGVkW21hcC51cmxdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiBxdWV1ZWQgZGVmaW5lcyB0b28uIEdvIGJhY2t3YXJkcwogICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWVzcyB1cCB0aGUgaXRlcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUmV2ZXJzZShkZWZRdWV1ZSwgZnVuY3Rpb24oYXJncywgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gYmUgcmVsb2FkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmRXZlbnRzW2lkXSA9IG1vZC5ldmVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGVkIHRvIGVuYWJsZSBhIG1vZHVsZSBpZiBpdCBpcyBzdGlsbCBpbiB0aGUgcmVnaXN0cnkKICAgICAgICAgICAgICogYXdhaXRpbmcgZW5hYmxlbWVudC4gQSBzZWNvbmQgYXJnLCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAogICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieQogICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qgc2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCiAgICAgICAgICAgICAqIEEgbG9hZCBldmVudCBjb3VsZCBiZSBhIHNjcmlwdCBsb2FkIG9yIGp1c3QgYSBsb2FkIHBhc3MgZnJvbSBhIHN5bmNocm9ub3VzCiAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAogICAgICAgICAgICAgICAgICAgIHNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1vZHVsZU5hbWUpIHx8IHt9LAogICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKCiAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYWxyZWFkeSBmb3VuZCBhbiBhbm9ueW1vdXMgbW9kdWxlIGFuZCBib3VuZCBpdAogICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIHRoaXMgYWZ0ZXIgdGhlIGN5Y2xlIG9mIGNhbGxHZXRNb2R1bGUgaW4gY2FzZSB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub2RlZmluZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9BIHNjcmlwdCB0aGF0IGRvZXMgbm90IGNhbGwgZGVmaW5lKCksIHNvIGp1c3Qgc2ltdWxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCiAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgogICAgICAgICAgICAgKiBOb3RlIHRoYXQgaXQgKipkb2VzIG5vdCoqIGNhbGwgbm9ybWFsaXplIG9uIHRoZSBtb2R1bGVOYW1lLAogICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CiAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAogICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGgsIGJ1bmRsZUlkLAogICAgICAgICAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChwa2dNYWluKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBrZ01haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkLCBleHQsIHNraXBFeHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgYSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMgYSBwcm90b2NvbCBpcyB1c2VkIGFuZCBpdCBpcyBqdXN0CiAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCiAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMsIHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4KICAgICAgICAgICAgICAgIC8vVGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wtbGVzcyBVUkxzIGFzIHdlbGwgYXMgZnVsbCBwYXRocy4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0LgogICAgICAgICAgICAgICAgICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRlZC4gVGhpcyBpcyBhIGJpdCB3b25reSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCiAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0IHx8ICcnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7CgogICAgICAgICAgICAgICAgICAgIHN5bXMgPSBtb2R1bGVOYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKICAgICAgICAgICAgICAgICAgICAvL2FuZCB3b3JrIHVwIGZyb20gaXQuCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbiBhcnJheSwgaXQgbWVhbnMgdGhlcmUgYXJlIGEgZmV3IGNob2ljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gcGFyZW50UGF0aFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSm9pbiB0aGUgcGF0aCBwYXJ0cyB0b2dldGhlciwgdGhlbiBmaWd1cmUgb3V0IGlmIGJhc2VVcmwgaXMgbmVlZGVkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwogICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDogJy5qcycpKTsKICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVybCkgKyB1cmw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdzICYmICEvXmJsb2JcOi8udGVzdCh1cmwpID8KICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJncyhtb2R1bGVOYW1lLCB1cmwpIDogdXJsOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bwogICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4KICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxiYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAogICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgYXJncywgZXhwb3J0cykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIGNhbGxiYWNrIGZvciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAogICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2FkZWQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19AcicpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBNYXAuaWQgPT09IGRhdGEuaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdzY3JpcHRlcnJvcicsICdTY3JpcHQgZXJyb3IgZm9yICInICsgZGF0YS5pZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciLCBuZWVkZWQgYnk6ICcgKyBwYXJlbnRzLmpvaW4oJywgJykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIicpLCBldnQsIFtkYXRhLmlkXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOwogICAgICAgIHJldHVybiBjb250ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogTWFpbiBlbnRyeSBwb2ludC4KICAgICAqCiAgICAgKiBJZiB0aGUgb25seSBhcmd1bWVudCB0byByZXF1aXJlIGlzIGEgc3RyaW5nLCB0aGVuIHRoZSBtb2R1bGUgdGhhdAogICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGVuIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBhcnJheQogICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgogICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCiAgICAgKgogICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAogICAgICogbmFtZSBmb3IgbWluaWZpY2F0aW9uL2xvY2FsIHNjb3BlIHVzZS4KICAgICAqLwogICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgewoKICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CiAgICAgICAgdmFyIGNvbnRleHQsIGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBkZWZDb250ZXh0TmFtZTsKCiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykgJiYgdHlwZW9mIGRlcHMgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0CiAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJiYWNrOwogICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CiAgICAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcpIHsKICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spOwogICAgfTsKCiAgICAvKioKICAgICAqIFN1cHBvcnQgcmVxdWlyZS5jb25maWcoKSB0byBtYWtlIGl0IGVhc2llciB0byBjb29wZXJhdGUgd2l0aCBvdGhlcgogICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgogICAgICovCiAgICByZXEuY29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykgewogICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNrCiAgICAgKiBvZiB0aGUgZXZlbnQgbG9vcC4gT3ZlcnJpZGUgZm9yIG90aGVyIGVudnMKICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KICAgICAqLwogICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CiAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CiAgICB9IDogZnVuY3Rpb24gKGZuKSB7IGZuKCk7IH07CgogICAgLyoqCiAgICAgKiBFeHBvcnQgcmVxdWlyZSBhcyBhIGdsb2JhbCwgYnV0IG9ubHkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAqLwogICAgaWYgKCFyZXF1aXJlKSB7CiAgICAgICAgcmVxdWlyZSA9IHJlcTsKICAgIH0KCiAgICByZXEudmVyc2lvbiA9IHZlcnNpb247CgogICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCiAgICByZXEuanNFeHRSZWdFeHAgPSAvXlwvfDp8XD98XC5qcyQvOwogICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKICAgIHMgPSByZXEucyA9IHsKICAgICAgICBjb250ZXh0czogY29udGV4dHMsCiAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAogICAgfTsKCiAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCiAgICByZXEoe30pOwoKICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCiAgICBlYWNoKFsKICAgICAgICAndG9VcmwnLAogICAgICAgICd1bmRlZicsCiAgICAgICAgJ2RlZmluZWQnLAogICAgICAgICdzcGVjaWZpZWQnCiAgICBdLCBmdW5jdGlvbiAocHJvcCkgewogICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKICAgICAgICAvL3NvIHRoYXQgZHVyaW5nIGJ1aWxkcywgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBjb250ZXh0CiAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgogICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IGNvbnRleHRzW2RlZkNvbnRleHROYW1lXTsKICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfSk7CgogICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgIGhlYWQgPSBzLmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwogICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCiAgICAgICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1ZXJ5IGJ1ZzoKICAgICAgICAvL2h0dHA6Ly9kZXYuanF1ZXJ5LmNvbS90aWNrZXQvMjcwOQogICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGJhc2VFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcwogICAgICogZnVuY3Rpb24uIEludGVyY2VwdC9vdmVycmlkZSBpdCBpZiB5b3Ugd2FudCBjdXN0b20gZXJyb3IgaGFuZGxpbmcuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KICAgICAqLwogICAgcmVxLm9uRXJyb3IgPSBkZWZhdWx0T25FcnJvcjsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIG5vZGUgZm9yIHRoZSBsb2FkIGNvbW1hbmQuIE9ubHkgdXNlZCBpbiBicm93c2VyIGVudnMuCiAgICAgKi8KICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIG5vZGUgPSBjb25maWcueGh0bWwgPwogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgbm9kZS50eXBlID0gY29uZmlnLnNjcmlwdFR5cGUgfHwgJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKICAgICAgICBub2RlLmFzeW5jID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCiAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBlbnZpcm9ubWVudHMKICAgICAqIHRvIG92ZXJyaWRlIGl0LgogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KICAgICAqLwogICAgcmVxLmxvYWQgPSBmdW5jdGlvbiAoY29udGV4dCwgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwogICAgICAgICAgICBub2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwoKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKICAgICAgICAgICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBmaXJpbmdzCiAgICAgICAgICAgIC8vdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGFsbCBvdGhlciBicm93c2VycyB3aXRoCiAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKICAgICAgICAgICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKICAgICAgICAgICAgLy9odHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzY0ODA1Ny9zY3JpcHQtb25sb2FkLWV2ZW50LWlzLW5vdC1maXJlZC1pbW1lZGlhdGVseS1hZnRlci1zY3JpcHQtZXhlY3V0aW9uCiAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAogICAgICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNoRXZlbnQgJiYKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKICAgICAgICAgICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCiAgICAgICAgICAgICAgICAgICAgLy9yZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8xODcKICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgICAgICAgIC8vaW4gSUU4LCBub2RlLmF0dGFjaEV2ZW50IGRvZXMgbm90IGhhdmUgdG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6CiAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMjczCiAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCiAgICAgICAgICAgICAgICAgICAgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJlCiAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCiAgICAgICAgICAgICAgICAvL3dlIGNhbm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCiAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElFIHJlcG9ydHMgdGhlIHNjcmlwdCBhcyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCiAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgogICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAogICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2ZXIsIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aWxsIGZpcmUgYmVmb3JlCiAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJRSB3aWxsIGZpcmUgZXJyb3IgYmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCiAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3JpcHQgbG9hZCBldmVudCBsaXN0ZW5lciBiZWZvcmUgZXhlY3V0ZQogICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4KICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCiAgICAgICAgICAgICAgICAvL2FuZCB0aGVuIGRlc3Ryb3lzIGFsbCBpbnN0YWxscyBvZiBJRSA2LTkuCiAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29udGV4dC5vblNjcmlwdExvYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKCiAgICAgICAgICAgIC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlIGhhdmUgYmVlbgogICAgICAgICAgICAvL3NldCwgYnV0IGJlZm9yZSBpdCBpcyBwbGFjZWQgaW4gdGhlIERPTS4KICAgICAgICAgICAgaWYgKGNvbmZpZy5vbk5vZGVDcmVhdGVkKSB7CiAgICAgICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCiAgICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlvbiwgc28gdG8gdGllIGFuIGFub255bW91cyBkZWZpbmUKICAgICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgogICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBub2RlOwogICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VFbGVtZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CiAgICAgICAgICAgICAgICAvL2VmZmljaWVudCB1c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2NrIHVudGlsCiAgICAgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVhdGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycwogICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25lIHNvCiAgICAgICAgICAgICAgICAvL3RoYXQgb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMgbWF5IG5lZWQKICAgICAgICAgICAgICAgIC8vdG8gYmUgcmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNhc2VzIGJlY29tZSBjb21tb24uCgogICAgICAgICAgICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGV2ZW50IGxvb3AgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2ViS2l0CiAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMgZ2FyYmFnZS1jb2xsZWN0ZWQgYWZ0ZXIgY2FsbGluZwogICAgICAgICAgICAgICAgLy8gaW1wb3J0U2NyaXB0cygpOiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTMzMTcKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgMCk7CiAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CgogICAgICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihtYWtlRXJyb3IoJ2ltcG9ydHNjcmlwdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKSB7CiAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgICAgIH0KCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICB9CgogICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KICAgIGlmIChpc0Jyb3dzZXIgJiYgIWNmZy5za2lwRGF0YU1haW4pIHsKICAgICAgICAvL0ZpZ3VyZSBvdXQgYmFzZVVybC4gR2V0IGl0IGZyb20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0LgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKICAgICAgICAgICAgLy91c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgogICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgIGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQogICAgICAgICAgICAvL3RvIGxvYWQuIElmIGl0IGlzIHRoZXJlLCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYWluJyk7CiAgICAgICAgICAgIGlmIChkYXRhTWFpbikgewogICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CgogICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCiAgICAgICAgICAgICAgICAvL2J1dCBvbmx5IGRvIHNvIGlmIHRoZSBkYXRhLW1haW4gdmFsdWUgaXMgbm90IGEgbG9hZGVyIHBsdWdpbgogICAgICAgICAgICAgICAgLy9tb2R1bGUgSUQuCiAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9yIHVzZSBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2Jhc2VVcmwuCiAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IHNyYy5sZW5ndGggPyBzcmMuam9pbignLycpICArICcvJyA6ICcuLyc7CgogICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3JpcHQgaXMgbm93CiAgICAgICAgICAgICAgICAvL2xpa2UgYSBtb2R1bGUgbmFtZS4KICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKCiAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkgewogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4KICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcuZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCiAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAogICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAogICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRoZSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncwogICAgICogbmFtZS4KICAgICAqLwogICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7CgogICAgICAgIC8vQWxsb3cgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbmFtZTsKICAgICAgICAgICAgbmFtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBhCiAgICAgICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVuY2llcy4KICAgICAgICBpZiAoIWRlcHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICAvL1JlbW92ZSBjb21tZW50cyBmcm9tIHRoZSBjYWxsYmFjayBzdHJpbmcsCiAgICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCiAgICAgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UmVnRXhwLCBjb21tZW50UmVwbGFjZSkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKICAgICAgICAgICAgICAgIC8vY291bGQgdXNlIGV4cG9ydHMsIGFuZCBtb2R1bGUuIEF2b2lkIGRvaW5nIGV4cG9ydHMgYW5kIG1vZHVsZQogICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUuCiAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKICAgICAgICAgICAgICAgIC8vb3JkZXIgbGlzdGVkIGJlbG93LgogICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBbJ3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVwcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQogICAgICAgIC8vd29yay4KICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOwogICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KICAgICAgICAvL1RoaXMgYWxsb3dzIG11bHRpcGxlIG1vZHVsZXMgdG8gYmUgaW4gYSBmaWxlIHdpdGhvdXQgcHJlbWF0dXJlbHkKICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZvciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCiAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CiAgICAgICAgLy9vY2N1cnMuIElmIG5vIGNvbnRleHQsIHVzZSB0aGUgZ2xvYmFsIHF1ZXVlLCBhbmQgZ2V0IGl0IHByb2Nlc3NlZAogICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCiAgICAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW25hbWVdID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgIH0KICAgIH07CgogICAgZGVmaW5lLmFtZCA9IHsKICAgICAgICBqUXVlcnk6IHRydWUKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyB0aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1lbnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwogICAgICogbG9hZGVyIHBsdWdpbnMsIG5vdCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZhbHVhdGUuCiAgICAgKi8KICAgIHJlcS5leGVjID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7CiAgICB9OwoKICAgIC8vU2V0IHVwIHdpdGggY29uZmlnIGluZm8uCiAgICByZXEoY2ZnKTsKfSh0aGlzLCAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogc2V0VGltZW91dCkpKTsKCg==","headers":[["content-type","text/javascript; charset=utf-8"]],"ok":true,"status":200,"status_text":""}}},"executionInfo":{"elapsed":299,"status":"ok","timestamp":1695286012665,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"z54EU64egkCp","outputId":"083545da-4c72-48b9-f3d6-b92014981564"},"outputs":[{"data":{"text/plain":["Output hidden; open in https://colab.research.google.com to view."]},"metadata":{},"output_type":"display_data"}],"source":["#%load_ext tensorboard\n","%reload_ext tensorboard\n","%tensorboard --logdir logs"]},{"cell_type":"code","execution_count":119,"metadata":{"executionInfo":{"elapsed":361,"status":"ok","timestamp":1695286714300,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"eNks2RKujFYM"},"outputs":[],"source":["# tensorboard\n","from torch.utils.tensorboard import SummaryWriter\n","writer = SummaryWriter('./logs/experimental_interface_original_single_node_{}_BS{}_ldata{}'.format(unique_id_stand_alone, BS, ldata), flush_secs=5)"]},{"cell_type":"code","execution_count":120,"metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1695286715139,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"nLw2lNuRjFip"},"outputs":[],"source":["def write_metric(node_name, task_name, metric_name, metric, round_number):\n"," writer.add_scalar(\"{}/{}/{}\".format(node_name, task_name, metric_name),\n"," metric, round_number)"]},{"cell_type":"code","execution_count":121,"metadata":{"executionInfo":{"elapsed":295,"status":"ok","timestamp":1695286717930,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"j8FNf16hjFrS"},"outputs":[],"source":["# Model defintion\n","class GNN(torch.nn.Module):\n"," def __init__(\n"," self,\n"," in_features: int = 32,\n"," out_features: int = 1, # it should be dataset[0].y.numel()).to(device)\n"," hidden: int = 512,\n"," num_layers: int = 3):\n"," super(GNN, self).__init__()\n"," # Initial layer to map features -> hidden\n"," self.lin0 = nn.Linear(in_features, hidden)\n"," # Define GNN layers\n"," self.convs = nn.ModuleList([GCNConv(hidden * 2, hidden) for _ in range(num_layers)])\n"," # Define norm layers\n"," self.norms = nn.ModuleList([LayerNorm(hidden) for _ in range(num_layers)])\n"," # Final linear layers\n"," self.lin1 = nn.Linear(hidden * 2, hidden * 4)\n"," self.lin2 = nn.Linear(hidden * 4, hidden * 4)\n"," self.lin3 = nn.Linear(hidden * 4, out_features)\n","\n"," def forward(self, x, edge_index, edge_attr, batch):\n"," # First feature transform layer\n"," x = F.leaky_relu(self.lin0(x))\n"," for i, conv in enumerate(self.convs):\n"," x_glob = torch.index_select(gap(x, batch), 0, batch) # Virtual global node\n"," x = torch.cat((x, x_glob), dim=1)\n"," x = conv(x=x, edge_index=edge_index)\n"," x = self.norms[i](x, batch)\n"," x = F.leaky_relu(x)\n"," if i == 0:\n"," x_pooled = torch.cat([gmp(x, batch), gap(x, batch)], dim=1) # Global pooling after each layer\n"," else:\n"," x_pooled = x_pooled + torch.cat([gmp(x, batch), gap(x, batch)], dim=1)\n"," x = F.leaky_relu(self.lin1(x_pooled))\n"," x = F.dropout(x, p=0.5, training=self.training)\n"," x = F.leaky_relu(self.lin2(x))\n"," x = F.dropout(x, p=0.5, training=self.training)\n"," x = self.lin3(x) # shape: (batch_size, out_features)\n"," x = torch.sigmoid(x)\n"," return x"]},{"cell_type":"code","execution_count":122,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1695286718982,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"7kYvtK81jFxP"},"outputs":[],"source":["# loss function definition and metrics\n","def myloss(output, target):\n"," return (output - target).abs().mean() #torch.mul((output - target), target*10).abs().mean()\n"," #return torch.mul((output - target), (1 + target*40)).abs().mean()\n","\n","def true_pos(y_true, y_pred):\n"," return (y_pred * y_true).sum()\n","\n","def precision(y_true, y_pred): #Precision = TruePositives / (TruePositives + FalsePositives)\n"," true_positives = true_pos(y_true, y_pred)\n"," predicted_positives = y_pred.sum()\n"," return true_positives / (predicted_positives + 1e-8)\n","\n","def recall(y_true, y_pred): #Recall = TruePositives / (TruePositives + FalseNegatives)\n"," true_positives = true_pos(y_true, y_pred)\n"," actual_positives = y_true.sum()\n"," return true_positives / (actual_positives + 1e-8)\n","\n","def f1_score(y_true, y_pred):\n"," prec = precision(y_true, y_pred)\n"," rec = recall(y_true, y_pred)\n"," return 2 * (prec * rec) / (prec + rec + 1e-8)"]},{"cell_type":"code","execution_count":123,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1695286719247,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"mA0_pZkajF0x"},"outputs":[],"source":["# evaluation/test function\n","def inference(network, test_loader):\n"," network.eval()\n"," total_error = 0\n"," correct = 0\n"," for data in test_loader:\n"," data = data.to(device)\n"," out = network(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n"," total_error += (out - data.y).abs().sum().item()\n"," correct += ((out.data - data.y).abs() < 0.5).sum() # binary classification\n"," accuracy = correct / len(test_loader.dataset)\n"," print(\"###################### Eval/Test accuracy is: \", accuracy)\n"," return total_error / len(test_loader.dataset)"]},{"cell_type":"code","execution_count":124,"metadata":{"executionInfo":{"elapsed":2,"status":"ok","timestamp":1695286719923,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"UzBqD2tojF4V"},"outputs":[],"source":["model = GNN(hidden=hidden,\n"," in_features=dataset.num_features,\n"," num_layers=3,\n"," out_features=dataset[0].y.numel()).to(device)\n","\n","optimizer = torch.optim.Adam(model.parameters(), lr=lr)\n"]},{"cell_type":"code","execution_count":125,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1695286720840,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"W3wvVvgvjF7n"},"outputs":[],"source":["def train(epoch):\n"," model.train()\n"," total_loss = 0\n"," for idx, data in enumerate(train_loader):\n"," data = data.to(device)\n"," optimizer.zero_grad()\n"," out = model(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n"," loss = myloss(out, data.y)\n"," loss.backward()\n"," total_loss += loss.item() * data.num_graphs\n"," optimizer.step()\n"," if idx % log_interval == 0:\n"," identity = \"Original\"\n"," write_metric(identity, \"train\", \"loss\", loss.item(), epoch * len(train_loader) + idx)\n"," print(\"Loss at epoch {} batch {} is: {}\".format(epoch, idx, loss.item()))\n","\n"," # metrics\n"," # predicted_labels = (out > 0.5).float()\n"," # labels = data.y\n"," # rcll = recall(labels, predicted_labels).item()\n"," # prcs = precision(labels, predicted_labels).item()\n"," # f1sc = f1_score(labels, predicted_labels).item()\n"," # correct = ((out.data - data.y).abs() < 0.5).sum() # binary classification\n"," # accuracy = correct / len(data)\n"," # print(\"Recall: {}\\nPrecision: {}\\nF1_Score: {}\\nAccuracy: {} \".format(\n"," # rcll, prcs, f1sc, accuracy))\n","\n"," # write_metric(identity, \"train\", \"recall\", rcll,\n"," # epoch * len(train_loader) + idx)\n"," # write_metric(identity, \"train\", \"precision\", prcs,\n"," # epoch * len(train_loader) + idx)\n"," # write_metric(identity, \"train\", \"f1_score\", f1sc,\n"," # epoch * len(train_loader) + idx)\n"," # write_metric(identity, \"train\", \"accuracy\", accuracy,\n"," # epoch * len(train_loader) + idx)\n","\n"," return total_loss / len(train_loader.dataset)"]},{"cell_type":"code","execution_count":126,"metadata":{"executionInfo":{"elapsed":4,"status":"ok","timestamp":1695286721782,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"nkLFPMFujF-m"},"outputs":[],"source":["@torch.no_grad()\n","def test(loader):\n"," model.eval()\n"," total_error = 0\n"," # correct = 0\n"," for data in loader:\n"," data = data.to(device)\n"," out = model(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n"," total_error += (out.squeeze() - data.y).abs().sum().item()\n"," return total_error / len(loader.dataset)\n"]},{"cell_type":"code","execution_count":127,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":333628,"status":"ok","timestamp":1695287056227,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"jkZXNm6OjGBO","outputId":"a555bbc3-7600-42a9-f39d-4039d13dbcc1"},"outputs":[{"name":"stdout","output_type":"stream","text":["Loss at epoch 0 batch 0 is: 0.428547739982605\n","Loss at epoch 0 batch 50 is: 0.07813026756048203\n","Loss at epoch 0 batch 100 is: 0.03906936198472977\n","Loss at epoch 0 batch 150 is: 0.04688066616654396\n","Loss at epoch 0 batch 200 is: 0.03906645625829697\n","Loss at epoch 0 batch 250 is: 0.031254466623067856\n","Epoch: 00, Loss: 0.0425, Val: 0.0331, Test: 0.0323\n","Loss at epoch 1 batch 0 is: 0.02344127744436264\n","Loss at epoch 1 batch 50 is: 0.03906482085585594\n","Loss at epoch 1 batch 100 is: 0.04687824845314026\n","Loss at epoch 1 batch 150 is: 0.023438552394509315\n","Loss at epoch 1 batch 200 is: 0.023439280688762665\n","Loss at epoch 1 batch 250 is: 0.039063479751348495\n","Epoch: 01, Loss: 0.0357, Val: 0.0331, Test: 0.0323\n","Loss at epoch 2 batch 0 is: 0.06250327080488205\n","Loss at epoch 2 batch 50 is: 0.01562645472586155\n","Loss at epoch 2 batch 100 is: 0.023438381031155586\n","Loss at epoch 2 batch 150 is: 0.07031331956386566\n","Loss at epoch 2 batch 200 is: 0.039063140749931335\n","Loss at epoch 2 batch 250 is: 0.0234382301568985\n","Epoch: 02, Loss: 0.0357, Val: 0.0331, Test: 0.0323\n","Loss at epoch 3 batch 0 is: 0.07812526077032089\n","Loss at epoch 3 batch 50 is: 3.739141902769916e-07\n","Loss at epoch 3 batch 100 is: 0.06250210851430893\n","Loss at epoch 3 batch 150 is: 0.023438112810254097\n","Loss at epoch 3 batch 200 is: 0.023438585922122\n","Loss at epoch 3 batch 250 is: 0.07812785357236862\n","Epoch: 03, Loss: 0.0357, Val: 0.0331, Test: 0.0323\n","Loss at epoch 4 batch 0 is: 0.04687589779496193\n","Loss at epoch 4 batch 50 is: 0.03125119209289551\n","Loss at epoch 4 batch 100 is: 0.03125026077032089\n","Loss at epoch 4 batch 150 is: 0.023437611758708954\n","Loss at epoch 4 batch 200 is: 0.04687529802322388\n","Loss at epoch 4 batch 250 is: 0.08593769371509552\n","Epoch: 04, Loss: 0.0357, Val: 0.0331, Test: 0.0323\n"]}],"source":["for epoch in range(0, n_epochs):\n"," loss = train(epoch)\n"," val_mae = test(val_loader)\n"," test_mae = test(test_loader)\n"," print(f'Epoch: {epoch:02d}, Loss: {loss:.4f}, Val: {val_mae:.4f}, '\n"," f'Test: {test_mae:.4f}')"]},{"cell_type":"markdown","metadata":{"id":"Ea0B58NNsJ-V"},"source":["#OpenFL"]},{"cell_type":"code","execution_count":128,"metadata":{"executionInfo":{"elapsed":276,"status":"ok","timestamp":1695287304288,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"HgmIP9F9s_FX"},"outputs":[],"source":["#openFL imports\n","from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n","from openfl.experimental.runtime import LocalRuntime\n","from openfl.experimental.placement import aggregator, collaborator"]},{"cell_type":"code","execution_count":129,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":440,"status":"ok","timestamp":1695287306033,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"dRrEK6UNsi73","outputId":"ceb3d7e8-1320-4a67-c60e-284a746463fb"},"outputs":[{"name":"stdout","output_type":"stream","text":["1705668\n"]}],"source":["unique_id_openfl = random.randint(10,2000000)\n","print(unique_id_openfl)"]},{"cell_type":"code","execution_count":130,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":295,"status":"ok","timestamp":1695287308231,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"6u8GL78cjGEP","outputId":"873c93a0-2456-4074-b7ba-4fc5693a330d"},"outputs":[{"name":"stdout","output_type":"stream","text":["\n"]}],"source":["writer = SummaryWriter('./logs/experimental_interface_openFL_{}_BS{}_ldata{}'.format(unique_id_openfl, BS, ldata), flush_secs=5)\n","print(writer)"]},{"cell_type":"code","execution_count":131,"metadata":{"executionInfo":{"elapsed":3,"status":"ok","timestamp":1695287309516,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"Yw9t2crsjGHF"},"outputs":[],"source":["# OpenFL: Averaging all parameter vectors\n","def FedAvg(models): \n"," new_model = models[0]\n"," state_dict_keys = new_model.state_dict().keys()\n"," model_dict_list = [mdl.state_dict() for mdl in models]\n"," state_dict = new_model.state_dict()\n"," num_models = len(models)\n"," for key in state_dict_keys:\n"," state_dict[key] = torch.sum(\n"," torch.stack(\n"," [mdldict[key]/num_models for mdldict in model_dict_list]), dim=0)\n"," new_model.load_state_dict(state_dict)\n"," return new_model"]},{"cell_type":"code","execution_count":132,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":531,"status":"ok","timestamp":1695287311290,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"d6yvOhPsjGKA","outputId":"4cc03019-3006-4da0-fa64-13da85eb1078"},"outputs":[{"name":"stdout","output_type":"stream","text":["Aggregator step \"start\" registered\n","Collaborator step \"aggregated_model_validation\" registered\n","Collaborator step \"train\" registered\n","Collaborator step \"local_model_validation\" registered\n","Aggregator step \"join\" registered\n","Aggregator step \"end\" registered\n"]}],"source":["#OpenFL: definition of compute flow\n","class FederatedFlow(FLSpec):\n"," def __init__(self, model = None, optimizer = None, rounds=3, **kwargs):\n"," super().__init__(**kwargs)\n"," if model is not None:\n"," self.model = model\n"," self.optimizer = optimizer \n"," else:\n"," self.model = Net() #assuming Net() is defined somewhere else.\n"," self.optimizer = optim.SGD(self.model.parameters(), lr=learning_rate,\n"," momentum=momentum)\n"," self.rounds = rounds\n"," self.aggr_training_value_list = []\n","\n"," @aggregator\n"," def start(self):\n"," print(f'Performing initialization for model')\n"," self.collaborators = self.runtime.collaborators\n"," self.private = 10\n"," self.current_round = 0\n"," self.next(self.aggregated_model_validation,foreach='collaborators',exclude=['private'])\n","\n"," @collaborator\n"," def aggregated_model_validation(self):\n"," print(f'########################## Performing aggregated model validation for collaborator {self.input}')\n"," self.agg_validation_score = inference(self.model, self.test_loader)\n"," #print(f'{self.input} value of {self.agg_validation_score}')\n"," self.next(self.train)\n","\n"," @collaborator\n"," def train(self):\n"," self.model.train()\n"," # self.optimizer = optim.SGD(self.model.parameters(), lr=learning_rate,\n"," # momentum=momentum)\n"," self.optimizer = optim.Adam(self.model.parameters(), lr=lr)\n"," # NOTE: optimizer seems to be defined here to be able to act on collaborator parameters\n"," total_loss = 0\n"," # print(\"Collaborator self.model params example BEFORE a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n","\n"," ll = len(self.train_loader)\n"," for batch_idx, data in enumerate(self.train_loader):\n"," data = data.to(device)\n"," self.optimizer.zero_grad()\n"," out = self.model(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n"," loss = myloss(out, data.y)\n"," loss.backward()\n"," total_loss += loss.item() #* data.num_graphs\n"," self.optimizer.step()\n"," if batch_idx % log_interval == 0:\n"," print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(self.current_round,\n"," batch_idx * len(data), len(self.train_loader.dataset),\n"," 100. * batch_idx / len(self.train_loader), loss.item()))\n"," self.loss = loss.item()\n"," # torch.save(self.model.state_dict(), 'model.pth')\n"," # torch.save(self.optimizer.state_dict(), 'optimizer.pth')\n"," write_metric(self.input, \"train\", \"loss\", loss.item(),\n"," self.current_round * ll + batch_idx)\n","\n"," print(\"Wrote TensorBoard information for collaborator \", self.input)\n","\n"," # print(\"Collaborator self.model params example AFTER a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n"," self.training_completed = True\n"," self.next(self.local_model_validation)\n","\n"," @collaborator\n"," def local_model_validation(self):\n"," self.local_validation_score = inference(self.model, self.test_loader)\n"," print(f'Doing local model validation for collaborator {self.input}: {self.local_validation_score}')\n"," self.next(self.join, exclude=['training_completed'])\n","\n"," @aggregator\n"," def join(self, inputs):\n"," print(f'############## AGGREGATOR NOW: time to join!! for Epoch {self.current_round}')\n"," self.average_loss = sum(input.loss for input in inputs)/len(inputs)\n"," self.aggr_training_value_list.append(self.average_loss)\n"," self.aggregated_model_accuracy = sum(input.agg_validation_score for input in inputs)/len(inputs)\n"," self.local_model_accuracy = sum(input.local_validation_score for input in inputs)/len(inputs)\n"," print(f'Average aggregated model validation values = {self.aggregated_model_accuracy}')\n"," print(f'Average training loss = {self.average_loss}')\n"," print(f'Average local model validation values = {self.local_model_accuracy}')\n","\n"," self.model = FedAvg([input.model for input in inputs])\n"," self.optimizer = [input.optimizer for input in inputs][0] # this is ok for sgd, for adaptive algos... maybe tricky\n","\n"," write_metric(\"Aggregator\", \"train\", \"avg_loss\", self.average_loss, self.current_round)\n"," print(\"Wrote TensorBoard information for Aggregator \")\n","\n"," self.current_round += 1\n"," if self.current_round < self.rounds:\n"," self.next(self.aggregated_model_validation, foreach='collaborators', exclude=['private'])\n"," else:\n"," self.next(self.end)\n","\n"," @aggregator\n"," def end(self):\n"," print(\"List of averaged training losses :\\n\", self.aggr_training_value_list)\n"," print(f'This is the end of the flow')\n"]},{"cell_type":"code","execution_count":133,"metadata":{"executionInfo":{"elapsed":320,"status":"ok","timestamp":1695287312701,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"Ys03u1oZjGMr"},"outputs":[],"source":["# Setup participants\n","aggregator = Aggregator()\n","aggregator.private_attributes = {}\n","\n","# Setup collaborators with private attributes\n","collaborator_names = ['Coll_1', 'Coll_2']\n","collaborators = [Collaborator(name=name) for name in collaborator_names]"]},{"cell_type":"code","execution_count":134,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":19815,"status":"ok","timestamp":1695287333716,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"TZtUP430tbR1","outputId":"e807d7fc-2310-4326-ed52-5eb96fc7e3fd"},"outputs":[{"name":"stdout","output_type":"stream","text":["Local runtime collaborators = ['Coll_1', 'Coll_2']\n"]}],"source":["for idx, collaborator in enumerate(collaborators):\n"," local_train = deepcopy(train_dataset)\n"," local_test = deepcopy(test_dataset)\n"," test_l = len(local_test)\n"," train_l = len(local_train)\n"," local_train = train_dataset[idx*train_l//2: (idx+1)*train_l//2] # this is ok only for 2 collaborators....\n"," local_test = test_dataset[idx*test_l//2: (idx+1)*test_l//2]\n"," collaborator.private_attributes = {\n"," 'train_loader': DataLoader(local_train, batch_size=BS, shuffle=True),\n"," 'test_loader': DataLoader(local_test, batch_size=BS)\n"," }\n","\n","local_runtime = LocalRuntime(aggregator=aggregator, collaborators=collaborators, backend='single_process')\n","print(f'Local runtime collaborators = {local_runtime.collaborators}')"]},{"cell_type":"code","execution_count":135,"metadata":{"executionInfo":{"elapsed":12,"status":"ok","timestamp":1695287333716,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"88N3GHTgtbcw"},"outputs":[],"source":["model = GNN(hidden=hidden,\n"," in_features=dataset.num_features,\n"," num_layers=3,\n"," out_features=dataset[0].y.numel()).to(device)\n","best_model = None"]},{"cell_type":"code","execution_count":136,"metadata":{"executionInfo":{"elapsed":12,"status":"ok","timestamp":1695287333717,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"bNZmmlIRtbmQ"},"outputs":[],"source":["optimizer = None\n","flflow = FederatedFlow(model, optimizer, rounds=n_epochs)\n","flflow.runtime = local_runtime"]},{"cell_type":"code","execution_count":137,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":188331,"status":"ok","timestamp":1695287522036,"user":{"displayName":"Andrea Zanetti","userId":"06472537082834906245"},"user_tz":-120},"id":"E_LT7sPhuZAE","outputId":"b53b90e5-c938-4c46-fae9-48168006d0d9"},"outputs":[{"name":"stdout","output_type":"stream","text":["NOW CALLING .run -----------------------------------------------------------------------------------------------------\n","\n","Calling start\n","Performing initialization for model\n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","###################### Eval/Test accuracy is: tensor(0.0321)\n","\n","Calling train\n","Train Epoch: 0 [0/16451 (0%)]\tLoss: 0.529439\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 0 [6400/16451 (39%)]\tLoss: 0.031274\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 0 [12800/16451 (78%)]\tLoss: 0.023450\n","Wrote TensorBoard information for collaborator Coll_1\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","Doing local model validation for collaborator Coll_1: 0.032101441284851706\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","###################### Eval/Test accuracy is: tensor(0.0331)\n","\n","Calling train\n","Train Epoch: 0 [0/16452 (0%)]\tLoss: 0.507747\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 0 [6400/16452 (39%)]\tLoss: 0.023451\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 0 [12800/16452 (78%)]\tLoss: 0.023443\n","Wrote TensorBoard information for collaborator Coll_2\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","Doing local model validation for collaborator Coll_2: 0.03258781672629091\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 0\n","Average aggregated model validation values = 0.5150767201811424\n","Average training loss = 0.023446740582585335\n","Average local model validation values = 0.03234462900557131\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","\n","Calling train\n","Train Epoch: 1 [0/16451 (0%)]\tLoss: 0.039068\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 1 [6400/16451 (39%)]\tLoss: 0.054688\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 1 [12800/16451 (78%)]\tLoss: 0.015625\n","Wrote TensorBoard information for collaborator Coll_1\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","Doing local model validation for collaborator Coll_1: 0.0321011673151751\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","\n","Calling train\n","Train Epoch: 1 [0/16452 (0%)]\tLoss: 0.031269\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 1 [6400/16452 (39%)]\tLoss: 0.023438\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 1 [12800/16452 (78%)]\tLoss: 0.031250\n","Wrote TensorBoard information for collaborator Coll_2\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","Doing local model validation for collaborator Coll_2: 0.032587548638132596\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 1\n","Average aggregated model validation values = 0.03234467505870538\n","Average training loss = 0.0234375\n","Average local model validation values = 0.032344357976653845\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","\n","Calling train\n","Train Epoch: 2 [0/16451 (0%)]\tLoss: 0.046875\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 2 [6400/16451 (39%)]\tLoss: 0.046875\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 2 [12800/16451 (78%)]\tLoss: 0.039062\n","Wrote TensorBoard information for collaborator Coll_1\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","Doing local model validation for collaborator Coll_1: 0.032101167315175094\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","\n","Calling train\n","Train Epoch: 2 [0/16452 (0%)]\tLoss: 0.039062\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 2 [6400/16452 (39%)]\tLoss: 0.015625\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 2 [12800/16452 (78%)]\tLoss: 0.031250\n","Wrote TensorBoard information for collaborator Coll_2\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","Doing local model validation for collaborator Coll_2: 0.0325875486381323\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 2\n","Average aggregated model validation values = 0.032344357976653776\n","Average training loss = 0.03515625\n","Average local model validation values = 0.03234435797665369\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","\n","Calling train\n","Train Epoch: 3 [0/16451 (0%)]\tLoss: 0.015625\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 3 [6400/16451 (39%)]\tLoss: 0.031250\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 3 [12800/16451 (78%)]\tLoss: 0.054688\n","Wrote TensorBoard information for collaborator Coll_1\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","Doing local model validation for collaborator Coll_1: 0.032101167315175094\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","\n","Calling train\n","Train Epoch: 3 [0/16452 (0%)]\tLoss: 0.054688\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 3 [6400/16452 (39%)]\tLoss: 0.015625\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 3 [12800/16452 (78%)]\tLoss: 0.062500\n","Wrote TensorBoard information for collaborator Coll_2\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","Doing local model validation for collaborator Coll_2: 0.0325875486381323\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 3\n","Average aggregated model validation values = 0.03234435797665369\n","Average training loss = 0.05859375\n","Average local model validation values = 0.03234435797665369\n","Wrote TensorBoard information for Aggregator \n","Sending state from aggregator to collaborators\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_1\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","\n","Calling train\n","Train Epoch: 4 [0/16451 (0%)]\tLoss: 0.070312\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 4 [6400/16451 (39%)]\tLoss: 0.039062\n","Wrote TensorBoard information for collaborator Coll_1\n","Train Epoch: 4 [12800/16451 (78%)]\tLoss: 0.039062\n","Wrote TensorBoard information for collaborator Coll_1\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9679)\n","Doing local model validation for collaborator Coll_1: 0.032101167315175094\n","Should transfer from local_model_validation to join\n","\n","Calling aggregated_model_validation\n","########################## Performing aggregated model validation for collaborator Coll_2\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","\n","Calling train\n","Train Epoch: 4 [0/16452 (0%)]\tLoss: 0.031250\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 4 [6400/16452 (39%)]\tLoss: 0.039062\n","Wrote TensorBoard information for collaborator Coll_2\n","Train Epoch: 4 [12800/16452 (78%)]\tLoss: 0.007812\n","Wrote TensorBoard information for collaborator Coll_2\n","\n","Calling local_model_validation\n","###################### Eval/Test accuracy is: tensor(0.9674)\n","Doing local model validation for collaborator Coll_2: 0.0325875486381323\n","Should transfer from local_model_validation to join\n","\n","Calling join\n","############## AGGREGATOR NOW: time to join!! for Epoch 4\n","Average aggregated model validation values = 0.03234435797665369\n","Average training loss = 0.0234375\n","Average local model validation values = 0.03234435797665369\n","Wrote TensorBoard information for Aggregator \n","\n","Calling end\n","List of averaged training losses :\n"," [0.023446740582585335, 0.0234375, 0.03515625, 0.05859375, 0.0234375]\n","This is the end of the flow\n",".run has finished-----------------------------------------------------------------------------------------------------\n","\n","Final aggregated model accuracy for 5 rounds of training: 0.03234435797665369\n"]}],"source":["print(\"NOW CALLING .run -----------------------------------------------------------------------------------------------------\")\n","flflow.run()\n","print(\".run has finished-----------------------------------------------------------------------------------------------------\")\n","\n","print(f'\\nFinal aggregated model accuracy for {flflow.rounds} rounds of training: {flflow.aggregated_model_accuracy}')\n","\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"y6QOFkL3u6Eh"},"outputs":[],"source":[]}],"metadata":{"colab":{"authorship_tag":"ABX9TyMXkR5CCf17dupZUmM/Nd1c","provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0} +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 2486, + "status": "ok", + "timestamp": 1695283908103, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "XCdkfSUzgZlp", + "outputId": "bc1b164b-6936-4bb2-cea2-e88cb1ea365f" + }, + "outputs": [], + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ejy9Lzq5n0Ho" + }, + "source": [ + "#OpenFL & PyG on HIV dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1ZZU_mAtgRIL" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "executionInfo": { + "elapsed": 33027, + "status": "ok", + "timestamp": 1695281467810, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "K8_d3Z6jgjZf", + "outputId": "28458b27-879b-449b-9ab2-40c60c08825a" + }, + "outputs": [], + "source": [ + "!pip install git+https://github.com/securefederatedai/openfl.git\n", + "!pip install -r workflow_interface_requirements.txt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 31851, + "status": "ok", + "timestamp": 1695281500648, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "mkjef0pMgjsA", + "outputId": "504c2bd2-3541-4bfd-b24d-dc6b19686eca" + }, + "outputs": [], + "source": [ + "!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", + "import os\n", + "os.environ[\"USERNAME\"] = \"colab\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 788, + "status": "ok", + "timestamp": 1695281508580, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "29G877N2gjvD", + "outputId": "aaacd16e-cdf4-4f58-ebaa-7c3dd9743843" + }, + "outputs": [], + "source": [ + "!curl https://raw.githubusercontent.com/protocolbuffers/protobuf/main/python/google/protobuf/internal/builder.py > /usr/local/lib/python3.10/dist-packages/google/protobuf/internal/builder.py\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 13011, + "status": "ok", + "timestamp": 1695281524369, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "ncC0JVBHgjxY", + "outputId": "a490bcbe-647b-4af0-a0a6-515b401e82ce" + }, + "outputs": [], + "source": [ + "!pip install rdkit" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 26944, + "status": "ok", + "timestamp": 1695281553610, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "Tgk-_h_thmq3", + "outputId": "e2868c0b-57eb-48c1-b470-814a2ddf8a02" + }, + "outputs": [], + "source": [ + "!pip install torch_geometric" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1695283923508, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "dwfp5aycttNI" + }, + "outputs": [], + "source": [ + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "import torch.optim as optim\n", + "import torch\n", + "import numpy as np\n", + "import random\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "from copy import deepcopy\n", + "\n", + "# GNN imports\n", + "from torch_geometric.nn import GCNConv\n", + "from torch_geometric.nn import global_mean_pool as gap\n", + "from torch_geometric.nn import global_max_pool as gmp\n", + "from torch_geometric.nn import LayerNorm\n", + "from torch_geometric.datasets import MoleculeNet\n", + "from torch_geometric.loader import DataLoader" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 288, + "status": "ok", + "timestamp": 1695283930495, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "mIPTAGD1tsgq", + "outputId": "d2bfbfc4-d10c-49b4-ef3d-70894a25bb82" + }, + "outputs": [], + "source": [ + "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", + "print(device)\n", + "# device='cpu'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 372, + "status": "ok", + "timestamp": 1695286686406, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "JdovcCFkw5CK" + }, + "outputs": [], + "source": [ + "# hyperparams\n", + "BS = 128 # 32 # 128\n", + "n_epochs = 5 # 15\n", + "momentum = 0.9\n", + "log_interval = 50\n", + "lr = 0.001\n", + "hidden = 32" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ui_eXWj54FpD" + }, + "outputs": [], + "source": [ + "# reproducibility...\n", + "# torch.backends.cudnn.enabled = False\n", + "def set_seed(seed):\n", + " torch.manual_seed(seed)\n", + " # torch.cuda.manual_seed_all(seed)\n", + " # torch.backends.cudnn.deterministic = True\n", + " # torch.backends.cudnn.benchmark = False\n", + " np.random.seed(seed)\n", + " random.seed(seed)\n", + "set_seed(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E6DVhokKhtMI" + }, + "source": [ + "#Stand-alone" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 272, + "status": "ok", + "timestamp": 1695286691577, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "_HOw-uiHgj4U", + "outputId": "8cc9e4ef-0e90-4501-88c9-605a4f302f4f" + }, + "outputs": [], + "source": [ + "import random\n", + "unique_id_stand_alone = random.randint(10,2000000) # random 'unique' id for tensorboard clarity\n", + "print(unique_id_stand_alone)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 276, + "status": "ok", + "timestamp": 1695286695369, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "HcWF8c4Sgj9p" + }, + "outputs": [], + "source": [ + "# device and data path\n", + "path = './data/'\n", + "dataset = MoleculeNet(path, name='HIV').shuffle() #MoleculeNet(path, name='PCBA').shuffle()\n", + "ldata = len(dataset)\n", + "dataset = dataset[:ldata] # reducing for test and local execution\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 7002, + "status": "ok", + "timestamp": 1695286705565, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "L29NhC3ylgjd" + }, + "outputs": [], + "source": [ + "# Dataset definitions\n", + "N = len(dataset) // 10\n", + "val_dataset = dataset[:N]\n", + "test_dataset = dataset[N:2 * N]\n", + "train_dataset = dataset[2 * N:]\n", + "\n", + "train_labels = train_dataset.y\n", + "valid_labels = val_dataset.y\n", + "train_loader = DataLoader(train_dataset, batch_size=BS, shuffle=True)\n", + "val_loader = DataLoader(val_dataset, batch_size=1) #BS\n", + "test_loader = DataLoader(test_dataset, batch_size=1) #BS\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 1431, + "status": "ok", + "timestamp": 1695288085090, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "Q-NrY9cxChCW", + "outputId": "24796247-2128-48ae-da14-ad1097cf4d31" + }, + "outputs": [], + "source": [ + "sum(train_labels ==1), sum(train_labels==0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 266, + "status": "ok", + "timestamp": 1695286710728, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "qyAnaFEuxL2a", + "outputId": "067751c9-ddd1-40c7-f06d-8687f67081cb" + }, + "outputs": [], + "source": [ + "print(len(dataset))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 839, + "output_embedded_package_id": "1RxgRU5v8s1RAuZsHvFQe52LsW8sJackl", + "resources": { + "https://localhost:6006/?tensorboardColab=true": { + "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMiwubWF0LXR5cG9ncmFwaHkgLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSBoM3tmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNCwubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IGg0e2ZvbnQ6NDAwIDE1cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg1LC5tYXQtdHlwb2dyYXBoeSBoNXtmb250OjQwMCBjYWxjKDE0cHggKiAwLjgzKS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNiwubWF0LXR5cG9ncmFwaHkgaDZ7Zm9udDo0MDAgY2FsYygxNHB4ICogMC42NykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtYm9keS1zdHJvbmcsLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS1zdHJvbmcsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5IHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IHB7bWFyZ2luOjAgMCAxMnB4fS5tYXQtc21hbGwsLm1hdC1jYXB0aW9uLC5tYXQtdHlwb2dyYXBoeSAubWF0LXNtYWxsLC5tYXQtdHlwb2dyYXBoeSAubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCByZ2JhKDAsMCwwLDApfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NWVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcnt0b3A6LTAuODQzNzVlbTtwYWRkaW5nLXRvcDouODQzNzVlbX0ubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye2ZvbnQtc2l6ZTo3NSU7bWFyZ2luLXRvcDouNjY2NjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjc5MTY2NjY2NjdlbSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjQzNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMXB4KTt3aWR0aDoxMzMuMzMzMzMzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTAxcHgpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIyZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjFlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTJlbSkgc2NhbGUoMC43NSl9fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjI1ZW0gMCAuNzVlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjA5Mzc1ZW07bWFyZ2luLXRvcDotMC41ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTAuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6MWVtIDAgMWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuODQzNzVlbTttYXJnaW4tdG9wOi0wLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuNTkzNzRlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM0MzMzMzMlfS5tYXQtZ3JpZC10aWxlLWhlYWRlciwubWF0LWdyaWQtdGlsZS1mb290ZXJ7Zm9udC1zaXplOjE0cHh9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9aW5wdXQubWF0LWlucHV0LWVsZW1lbnR7bWFyZ2luLXRvcDotMC4wNjI1ZW19Lm1hdC1tZW51LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHh9Lm1hdC1yYWRpby1idXR0b257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdC10cmlnZ2Vye2hlaWdodDoxLjEyNWVtfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXN0ZXBwZXItdmVydGljYWwsLm1hdC1zdGVwcGVyLWhvcml6b250YWx7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc3RlcC1sYWJlbHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1zdGVwLXN1Yi1sYWJlbC1lcnJvcntmb250LXdlaWdodDpub3JtYWx9Lm1hdC1zdGVwLWxhYmVsLWVycm9ye2ZvbnQtc2l6ZToxNHB4fS5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10YWItZ3JvdXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWxpbmt7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRvb2xiYXIsLm1hdC10b29sYmFyIGgxLC5tYXQtdG9vbGJhciBoMiwubWF0LXRvb2xiYXIgaDMsLm1hdC10b29sYmFyIGg0LC5tYXQtdG9vbGJhciBoNSwubWF0LXRvb2xiYXIgaDZ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjB9Lm1hdC10b29sdGlwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTBweDtwYWRkaW5nLXRvcDo2cHg7cGFkZGluZy1ib3R0b206NnB4fS5tYXQtdG9vbHRpcC1oYW5kc2V0e2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1saXN0LWl0ZW17Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxNHB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVte2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb257Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtc3ViaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1vcHRpb257Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNnB4fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1zaW1wbGUtc25hY2tiYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4fS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntsaW5lLWhlaWdodDoxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdHJlZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MTRweH0ubWF0LXJpcHBsZXtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1yaXBwbGUubWF0LXJpcHBsZS11bmJvdW5kZWR7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXJpcHBsZS1lbGVtZW50e3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NTAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5LHRyYW5zZm9ybSAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7dHJhbnNmb3JtOnNjYWxlM2QoMCwgMCwgMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItc3R5bGUsIHNvbGlkKSB2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOmZvY3VzOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheTogYmxvY2t9Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwNnB4KTt3aWR0aDoxMzMuMzMzMzkzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbDotd2Via2l0LWF1dG9maWxsKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyNWVtKSBzY2FsZSgwLjc1KSBwZXJzcGVjdGl2ZSgxMDBweCkgdHJhbnNsYXRlWigwLjAwMTA3cHgpO3dpZHRoOjEzMy4zMzM0MDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwOHB4KTt3aWR0aDoxMzMuMzMzNDEzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4yODEyNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcnttYXJnaW4tdG9wOi41NDE2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNjY2NjY2NjY2N2VtKX1AbWVkaWEgcHJpbnR7Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE2ZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMTVlbSkgc2NhbGUoMC43NSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE0ZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5MzcyZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNjMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS5tYXQtYmFkZ2V7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJhZGdlLWhpZGRlbiAubWF0LWJhZGdlLWNvbnRlbnR7ZGlzcGxheTpub25lfS5tYXQtYmFkZ2UtY29udGVudHtwb3NpdGlvbjphYnNvbHV0ZTt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAyMDBtcyBlYXNlLWluLW91dDt0cmFuc2Zvcm06c2NhbGUoMC42KTtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7cG9pbnRlci1ldmVudHM6bm9uZX0ubmctYW5pbWF0ZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnQsLm1hdC1iYWRnZS1jb250ZW50Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnQubWF0LWJhZGdlLWFjdGl2ZXt0cmFuc2Zvcm06bm9uZX0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotOHB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTZweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LThweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotOHB4fS5tYXQtYmFkZ2UtbWVkaXVtIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O2xpbmUtaGVpZ2h0OjIycHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlbG93IC5tYXQtYmFkZ2UtY29udGVudHtib3R0b206LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjJweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTExcHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTFweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTFweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWJvdmUgLm1hdC1iYWRnZS1jb250ZW50e3RvcDotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTI4cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yOHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0xNHB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6YXV0bztsZWZ0Oi0xNHB4fS5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y1N2MwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Lm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojYmRiZGJkO2NvbG9yOiM3NTc1NzV9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggI2UwZTBlMH1bZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMH0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fS5tYXQtY2FyZHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiNmZmZ9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6I2ZmZiAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciwubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzIxMjEyMTtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiM3NTc1NzV9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXByZXZpZXd7Y29sb3I6cmdiYSgwLDAsMCwuMjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjE4KX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ1LDEyNCwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9LmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsIDE1MiwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNmNTdjMDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNzU3NTc1fS5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6I2ZmZn19Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fS5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWhpbnR7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtaGludHtjb2xvcjojNjE2MTYxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjAyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNzU3NTc1fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlO2NvbG9yOiM3NTc1NzV9Lm1hdC1saXN0LW9wdGlvbjpob3ZlciwubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cywubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiMyMTIxMjF9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LW1lbnUtc3VibWVudS1pY29uLC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvciwubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkIHJnYmEoMCwwLDAsLjU0KX0ubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fS5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmRkZWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZlNWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmNkMGNkfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZmY5ODAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn0ubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6IzYxNjE2MX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1sYWJlbC1jb250ZW50e2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojMjEyMTIxfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNzU3NTc1fS5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojZmZmfS5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM3NTc1NzV9Lm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNil9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9Lm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjIpfS5tYXQtc2xpZGVyOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgwLjAwMDFkZWcsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpfS5tYXQtc3RlcC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkXSksLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPWZhbHNlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOmRlZmF1bHR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXN0ZXAtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6bm9uZX19Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtbGFiZWwsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtb3B0aW9uYWx7Y29sb3I6IzYxNjE2MX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6IzYxNjE2MTtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keS5kYXJrLW1vZGV7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiM0MmE1ZjV9Ym9keS5kYXJrLW1vZGUgYTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojYmE2OGM4fWJvZHkuZGFyay1tb2RlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtYXBwLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MHB4IDZweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MHB4IDlweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowcHggMTBweCAxNHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmY7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzIxMjEyMTtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6IzAwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym9yZGVyOnNvbGlkIDFweCAjNTk1OTU5fWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJke2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMzMDMwMzAgIWltcG9ydGFudH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGhlYWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Ym9keSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRmb290LGJvZHkuZGFyay1tb2RlIG1hdC1oZWFkZXItcm93LGJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgW21hdC1oZWFkZXItcm93XSxib2R5LmRhcmstbW9kZSBbbWF0LXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1mb290ZXItcm93XSxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgbWF0LXJvdyxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtZm9vdGVyLXJvdyxib2R5LmRhcmstbW9kZSB0aC5tYXQtaGVhZGVyLWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWNlbGwsYm9keS5kYXJrLW1vZGUgdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItbmV4dC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1wcmV2aW91cy1idXR0b257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlci1kaXZpZGVyOjphZnRlcntiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDQsNjcsNTQsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1AbWVkaWEoaG92ZXI6IGhvdmVyKXtib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjE1KX1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6bm90KC5tYXQtbmF0aXZlLXNlbGVjdC1pbmxpbmUpIG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb246ZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtYWNjZW50IC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtd2FybiAubWF0LWlucHV0LWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMik7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1vcHRpb246Zm9jdXMsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtc2luZ2xlLXNlbGVjdGVkLW9wdGlvbjpmb2N1c3tiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcixib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1kZWNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItaW5jcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWZpcnN0LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgxODksMTg5LDE4OSwuNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkOmhvdmVyIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWhvcml6b250YWwsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiNjNmM2YzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1ib3R0b206bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7YmFja2dyb3VuZDojZmFmYWZhO2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6aW5oZXJpdH0KPC9zdHlsZT4KCjxzdHlsZT4KICBodG1sLAogIGJvZHkgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKTsKCiAgICAvKiBMZWdhY3kgbWVjaGFuaXNtIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHN1YnBpeGVsIGFudGktYWxpYXNpbmcgb24gbWFjT1MuCiAgICAgKgogICAgICogSW4gdGhlIHBhc3QgWzFdLCBtYWNPUyBzdWJwaXhlbCBBQSBjYXVzZWQgZXhjZXNzaXZlIGJvbGRpbmcgZm9yIGxpZ2h0LW9uLWRhcmsgdGV4dDsgdGhpcyBydWxlCiAgICAgKiBhdm9pZHMgdGhhdCBieSByZXF1ZXN0aW5nIG5vbi1zdWJwaXhlbCBBQSBhbHdheXMsIHJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB3aGljaCBpcwogICAgICogdG8gdXNlIHN1YnBpeGVsIEFBIHdoZW4gYXZhaWxhYmxlLiBUaGUgb3JpZ2luYWwgaXNzdWUgd2FzICJmaXhlZCIgYnkgcmVtb3Zpbmcgc3VicGl4ZWwgQUEgaW4KICAgICAqIG1hY09TIDE0IChNb2phdmUpLCBidXQgZm9yIGxlZ2FjeSByZWFzb25zIHRoZXkgcHJlc2VydmVkIHRoZSBib2xkaW5nIGVmZmVjdCBhcyBhbiBvcHRpb24uCiAgICAgKiBDaHJvbWUgdGhlbiBpbiB0dXJuIHVwZGF0ZWQgaXRzIGZvbnQgcmVuZGVyaW5nIHRvIGFwcGx5IHRoYXQgYm9sZGluZyBlZmZlY3QgWzJdLCB3aGljaCBtZWFucwogICAgICogdGhhdCBldmVuIHRob3VnaCB0aGUgYC13ZWJraXQtZm9udC1zbW9vdGhpbmdgIGRvY3MgWzNdIHN1Z2dlc3QgdGhhdCBzZXR0aW5nIGBhbnRpYWxpYXNlZGAKICAgICAqIHdvdWxkIGhhdmUgbm8gZWZmZWN0IGZvciByZWNlbnQgdmVyc2lvbnMgb2YgbWFjT1MsIGl0IHN0aWxsIGlzIG5lZWRlZCB0byBhdm9pZCB0aGUgYm9sZGluZy4KICAgICAqCiAgICAgKiBbMV06IGh0dHA6Ly93d3cubGlnaHRlcnJhLmNvbS9hcnRpY2xlcy9tYWNvc3h0ZXh0YWFidWcvCiAgICAgKiBbMl06IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTg1ODg2MQogICAgICogWzNdOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZm9udC1zbW9vdGgKICAgICAqCiAgICAgKi8KCiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICB9CiAgbm9zY3JpcHQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIG1heC13aWR0aDogNjAwcHg7CiAgICBwYWRkaW5nOiAxMHB4OwogIH0KPC9zdHlsZT4KCjwvaGVhZD48Ym9keT48bm9zY3JpcHQ+CiAgICA8aDE+VGVuc29yQm9hcmQgcmVxdWlyZXMgSmF2YVNjcmlwdDwvaDE+CiAgICA8cD5QbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQgYW5kIHJlbG9hZCB0aGlzIHBhZ2UuPC9wPgogIDwvbm9zY3JpcHQ+PHRiLXdlYmFwcD48L3RiLXdlYmFwcD48c2NyaXB0IHNyYz0iaW5kZXguanM/X2ZpbGVfaGFzaD1jOWMyMGFkOSI+PC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4=", + "headers": [ + [ + "content-type", + "text/html; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/chart_worker.js?_file_hash=2c1e71c5": { + "data": "KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe2lmKCFzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKSlyZXR1cm4hMTtsZXQgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKDAsMCkuZ2V0Q29udGV4dCgid2ViZ2wyIik7cmV0dXJuIEJvb2xlYW4obil9ZnVuY3Rpb24gZXcobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIG53KG4sdCl7cmV0dXJuIG4ueFswXT09PXQueFswXSYmbi54WzFdPT09dC54WzFdJiZuLnlbMF09PT10LnlbMF0mJm4ueVsxXT09PXQueVsxXX12YXIgRGk9e2NvbnZlcnRSZWN0VG9FeHRlbnQ6UV8saXNXZWJHbDJTdXBwb3J0ZWQ6al8saXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dHcsYXJlUG9seWxpbmVzRXF1YWw6ZXcsYXJlRXh0ZW50c0VxdWFsOm53fTt2YXIgZHI9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1mcihvbi5MSU5FQVIpLHRoaXMueVNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9RGkuY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTt2YXIgVG47KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KShUbnx8KFRuPXt9KSk7ZnVuY3Rpb24geWEobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpzLG9wYWNpdHk6b309aSxhPW47cmV0dXJuIWEmJiFzP251bGw6KGE9YSE9bnVsbD9hOnQoKSxhPWUoYSksYS5zdHlsZS5kaXNwbGF5PXM/IiI6Im5vbmUiLGEuc3R5bGUuc3Ryb2tlPXIsYS5zdHlsZS5vcGFjaXR5PVN0cmluZyhvIT1udWxsP286MSksYSl9dmFyIE9zPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc3ZnPXR9Zmx1c2goKXt9b25SZXNpemUodCl7fWRlc3Ryb3lPYmplY3QodCl7dGhpcy5zdmcucmVtb3ZlQ2hpbGQodC5kb20pfXNldFVzZURhcmtNb2RlKHQpe31jcmVhdGVQYXRoRFN0cmluZyh0KXtpZighdC5sZW5ndGgpcmV0dXJuIiI7bGV0IGU9bmV3IEFycmF5KHQubGVuZ3RoLzIpO2VbMF09YE0ke3RbMF19LCR7dFsxXX1gO2ZvcihsZXQgaT0xO2k8dC5sZW5ndGgvMjtpKyspZVtpXT1gTCR7dFtpKjJdfSwke3RbaSoyKzFdfWA7cmV0dXJuIGUuam9pbigiIil9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXtsZXQgcj15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7cy5zdHlsZS5maWxsPSJub25lIjtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3JldHVybiBzLnNldEF0dHJpYnV0ZSgiZCIsbyksdGhpcy5zdmcuYXBwZW5kQ2hpbGQocyksc30scz0+e2lmKCEodCE9bnVsbCYmdC5kYXRhKXx8IURpLmFyZVBvbHlsaW5lc0VxdWFsKGUsdD09bnVsbD92b2lkIDA6dC5kYXRhKSl7bGV0IG89dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhlKTtzLnNldEF0dHJpYnV0ZSgiZCIsbyl9cmV0dXJuIHN9LGkpO3JldHVybiByPT09bnVsbD9udWxsOihyLnN0eWxlLnN0cm9rZVdpZHRoPVN0cmluZyhpLndpZHRoKSx7ZG9tOnIsZGF0YTplfSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cixjb2xvcjpzfT1pLG89cipNYXRoLnNxcnQoMykvMixhPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55K28vMyxlLngrci8yLGUueStvLzMsZS54LGUueS1vKjIvM10pLGw9eWEodD09bnVsbD92b2lkIDA6dC5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIGw9PT1udWxsP251bGw6KGwuc3R5bGUuZmlsbD1zLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOnN9PWksbz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtyZXR1cm4gYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYSksYX0sYT0+KGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcocykpLGEpLGkpO3JldHVybiBvPT09bnVsbD9udWxsOntkb206byxkYXRhOmV9fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnMsY29sb3I6b309cixhPTIvTWF0aC5zcXJ0KDMpKnMsbD1uZXcgRmxvYXQzMkFycmF5KFtlLngtYS8yLGUueStzLzIsZS54LGUueS1zLzIsaS54LGkueS1zLzIsaS54K2EvMixpLnkrcy8yXSksYz15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7dS5jbGFzc0xpc3QuYWRkKCJ0cmFwZXpvaWQiKSx1LnN0eWxlLmZpbGw9Im5vbmUiO2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQodSksdX0sdT0+e2xldCBoPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcobCk7cmV0dXJuIHUuc2V0QXR0cmlidXRlKCJkIixoKyJaIiksdX0scik7cmV0dXJuIGM9PT1udWxsP251bGw6KGMuc3R5bGUuZmlsbD1vLHtkb206YyxkYXRhOmx9KX1kaXNwb3NlKCl7fX07dmFyICRoPSIxMzciO3ZhciBpdz0wLEFtPTEscnc9Mjt2YXIgbDA9MSxzdz0yLEpzPTMsZW89MCxoZT0xLEhyPTIsYzA9MTt2YXIgam49MCxLcz0xLENtPTIsUm09MyxMbT00LG93PTUsSXI9MTAwLGF3PTEwMSxsdz0xMDIsUG09MTAzLERtPTEwNCxjdz0yMDAsdXc9MjAxLGh3PTIwMixmdz0yMDMsdTA9MjA0LGgwPTIwNSxkdz0yMDYscHc9MjA3LG13PTIwOCxndz0yMDkseHc9MjEwLHl3PTAsdnc9MSxfdz0yLHp1PTMsd3c9NCxNdz01LGJ3PTYsU3c9NyxDbD0wLEV3PTEsVHc9Mix0aT0wLEF3PTEsQ3c9MixSdz0zLEx3PTQsUHc9NSxmMD0zMDAsQW89MzAxLENvPTMwMixVdT0zMDMsQnU9MzA0LFJsPTMwNixLaD0zMDcsT3U9MWUzLFZlPTEwMDEsa3U9MTAwMixmZT0xMDAzLEltPTEwMDQ7dmFyIE5tPTEwMDU7dmFyIGJlPTEwMDYsRHc9MTAwNzt2YXIgTGw9MTAwODt2YXIgZWk9MTAwOSxJdz0xMDEwLE53PTEwMTEsbm89MTAxMixGdz0xMDEzLFFhPTEwMTQsVWk9MTAxNSxVcj0xMDE2LHp3PTEwMTcsVXc9MTAxOCxCcj0xMDIwLEJ3PTEwMjEsUmU9MTAyMyxPdz0xMDI0LGt3PTEwMjUsT2k9MTAyNixWcj0xMDI3LEh3PTEwMjgsVnc9MTAyOSxHdz0xMDMwLFd3PTEwMzEscXc9MTAzMyxLYz0zMzc3NixRYz0zMzc3NyxqYz0zMzc3OCx0dT0zMzc3OSxGbT0zNTg0MCx6bT0zNTg0MSxVbT0zNTg0MixCbT0zNTg0MyxYdz0zNjE5NixPbT0zNzQ5MixrbT0zNzQ5NixIbT0zNzgwOCxWbT0zNzgwOSxHbT0zNzgxMCxXbT0zNzgxMSxxbT0zNzgxMixYbT0zNzgxMyxZbT0zNzgxNCxabT0zNzgxNSxKbT0zNzgxNiwkbT0zNzgxNyxLbT0zNzgxOCxRbT0zNzgxOSxqbT0zNzgyMCx0Zz0zNzgyMSxlZz0zNjQ5MixZdz0yMjAwLFp3PTIyMDEsSnc9MjIwMixqYT0yMzAwLHRsPTIzMDEsZXU9MjMwMixOcj0yNDAwLEZyPTI0MDEsZWw9MjQwMixRaD0yNTAwLGQwPTI1MDEsJHc9MDt2YXIgcmk9M2UzLCR0PTMwMDEsS3c9MzIwMCxRdz0zMjAxLHRzPTAsanc9MTt2YXIgbnU9NzY4MDt2YXIgdE09NTE5LGlvPTM1MDQ0LG5sPTM1MDQ4O3ZhciBuZz0iMzAwIGVzIixIdT0xMDM1LEluPWNsYXNze2FkZEV2ZW50TGlzdGVuZXIodCxlKXt0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDAmJih0aGlzLl9saXN0ZW5lcnM9e30pO2xldCBpPXRoaXMuX2xpc3RlbmVycztpW3RdPT09dm9pZCAwJiYoaVt0XT1bXSksaVt0XS5pbmRleE9mKGUpPT09LTEmJmlbdF0ucHVzaChlKX1oYXNFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybiExO2xldCBpPXRoaXMuX2xpc3RlbmVycztyZXR1cm4gaVt0XSE9PXZvaWQgMCYmaVt0XS5pbmRleE9mKGUpIT09LTF9cmVtb3ZlRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzW3RdO2lmKHIhPT12b2lkIDApe2xldCBzPXIuaW5kZXhPZihlKTtzIT09LTEmJnIuc3BsaWNlKHMsMSl9fWRpc3BhdGNoRXZlbnQodCl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdC50eXBlXTtpZihpIT09dm9pZCAwKXt0LnRhcmdldD10aGlzO2xldCByPWkuc2xpY2UoMCk7Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10uY2FsbCh0aGlzLHQpO3QudGFyZ2V0PW51bGx9fX0sdmU9W107Zm9yKGxldCBuPTA7bjwyNTY7bisrKXZlW25dPShuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNik7dmFyIGl1PU1hdGguUEkvMTgwLFZ1PTE4MC9NYXRoLlBJO2Z1bmN0aW9uIHRuKCl7bGV0IG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGk9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKHZlW24mMjU1XSt2ZVtuPj44JjI1NV0rdmVbbj4+MTYmMjU1XSt2ZVtuPj4yNCYyNTVdKyItIit2ZVt0JjI1NV0rdmVbdD4+OCYyNTVdKyItIit2ZVt0Pj4xNiYxNXw2NF0rdmVbdD4+MjQmMjU1XSsiLSIrdmVbZSY2M3wxMjhdK3ZlW2U+PjgmMjU1XSsiLSIrdmVbZT4+MTYmMjU1XSt2ZVtlPj4yNCYyNTVdK3ZlW2kmMjU1XSt2ZVtpPj44JjI1NV0rdmVbaT4+MTYmMjU1XSt2ZVtpPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIEllKG4sdCxlKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihlLG4pKX1mdW5jdGlvbiBlTShuLHQpe3JldHVybihuJXQrdCkldH1mdW5jdGlvbiBydShuLHQsZSl7cmV0dXJuKDEtZSkqbitlKnR9ZnVuY3Rpb24gaWcobil7cmV0dXJuKG4mbi0xKT09PTAmJm4hPT0wfWZ1bmN0aW9uIG5NKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgSz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLng9dCx0aGlzLnk9ZX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LGUpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9clswXSplK3JbM10qaStyWzZdLHRoaXMueT1yWzFdKmUrcls0XSppK3JbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgZT10aGlzLngtdC54LGk9dGhpcy55LXQueTtyZXR1cm4gZSplK2kqaX1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMueCx0W2UrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz10aGlzLngtdC54LG89dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PXMqaS1vKnIrdC54LHRoaXMueT1zKnIrbyppK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtLLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGRlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixzLG8sYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPXMsdVs1XT1sLHVbNl09aSx1WzddPW8sdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxoPWlbN10sZj1pWzJdLGQ9aVs1XSxnPWlbOF0seD1yWzBdLHY9clszXSxtPXJbNl0scD1yWzFdLGI9cls0XSxfPXJbN10sUz1yWzJdLEw9cls1XSxBPXJbOF07cmV0dXJuIHNbMF09byp4K2EqcCtsKlMsc1szXT1vKnYrYSpiK2wqTCxzWzZdPW8qbSthKl8rbCpBLHNbMV09Yyp4K3UqcCtoKlMsc1s0XT1jKnYrdSpiK2gqTCxzWzddPWMqbSt1Kl8raCpBLHNbMl09Zip4K2QqcCtnKlMsc1s1XT1mKnYrZCpiK2cqTCxzWzhdPWYqbStkKl8rZypBLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzNdKj10LGVbNl0qPXQsZVsxXSo9dCxlWzRdKj10LGVbN10qPXQsZVsyXSo9dCxlWzVdKj10LGVbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIGUqbyp1LWUqYSpjLWkqcyp1K2kqYSpsK3IqcypjLXIqbypsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11Km8tYSpjLGY9YSpsLXUqcyxkPWMqcy1vKmwsZz1lKmgraSpmK3IqZDtpZihnPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCB4PTEvZztyZXR1cm4gdFswXT1oKngsdFsxXT0ocipjLXUqaSkqeCx0WzJdPShhKmktcipvKSp4LHRbM109Zip4LHRbNF09KHUqZS1yKmwpKngsdFs1XT0ocipzLWEqZSkqeCx0WzZdPWQqeCx0WzddPShpKmwtYyplKSp4LHRbOF09KG8qZS1pKnMpKngsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9ZVsxXSxlWzFdPWVbM10sZVszXT10LHQ9ZVsyXSxlWzJdPWVbNl0sZVs2XT10LHQ9ZVs1XSxlWzVdPWVbN10sZVs3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzNdLHRbMl09ZVs2XSx0WzNdPWVbMV0sdFs0XT1lWzRdLHRbNV09ZVs3XSx0WzZdPWVbMl0sdFs3XT1lWzVdLHRbOF09ZVs4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQsZSxpLHIscyxvLGEpe2xldCBsPU1hdGguY29zKHMpLGM9TWF0aC5zaW4ocyk7cmV0dXJuIHRoaXMuc2V0KGkqbCxpKmMsLWkqKGwqbytjKmEpK28rdCwtcipjLHIqbCwtciooLWMqbytsKmEpK2ErZSwwLDAsMSksdGhpc31zY2FsZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0qPXQsaVszXSo9dCxpWzZdKj10LGlbMV0qPWUsaVs0XSo9ZSxpWzddKj1lLHRoaXN9cm90YXRlKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCkscj10aGlzLmVsZW1lbnRzLHM9clswXSxvPXJbM10sYT1yWzZdLGw9clsxXSxjPXJbNF0sdT1yWzddO3JldHVybiByWzBdPWUqcytpKmwsclszXT1lKm8raSpjLHJbNl09ZSphK2kqdSxyWzFdPS1pKnMrZSpsLHJbNF09LWkqbytlKmMscls3XT0taSphK2UqdSx0aGlzfXRyYW5zbGF0ZSh0LGUpe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGlbMF0rPXQqaVsyXSxpWzNdKz10KmlbNV0saVs2XSs9dCppWzhdLGlbMV0rPWUqaVsyXSxpWzRdKz1lKmlbNV0saVs3XSs9ZSppWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZGUucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBwMChuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHJvKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfXZhciBtMD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSwkZT17aDowLHM6MCxsOjB9LHZhPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gc3Uobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKyh0LW4pKjYqZTplPDEvMj90OmU8Mi8zP24rKHQtbikqNiooMi8zLWUpOm59ZnVuY3Rpb24gT3Iobil7cmV0dXJuIG48LjA0MDQ1P24qLjA3NzM5OTM4MDg6TWF0aC5wb3cobiouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIG91KG4pe3JldHVybiBuPC4wMDMxMzA4P24qMTIuOTI6MS4wNTUqTWF0aC5wb3cobiwuNDE2NjYpLS4wNTV9dmFyIGZ0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtyZXR1cm4gZT09PXZvaWQgMCYmaT09PXZvaWQgMD90aGlzLnNldCh0KTp0aGlzLnNldFJHQih0LGUsaSl9c2V0KHQpe3JldHVybiB0JiZ0LmlzQ29sb3I/dGhpcy5jb3B5KHQpOnR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLnNldEhleCh0KTp0eXBlb2YgdD09InN0cmluZyImJnRoaXMuc2V0U3R5bGUodCksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMucj10LHRoaXMuZz10LHRoaXMuYj10LHRoaXN9c2V0SGV4KHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksdGhpcy5yPSh0Pj4xNiYyNTUpLzI1NSx0aGlzLmc9KHQ+PjgmMjU1KS8yNTUsdGhpcy5iPSh0JjI1NSkvMjU1LHRoaXN9c2V0UkdCKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPWksdGhpc31zZXRIU0wodCxlLGkpe2lmKHQ9ZU0odCwxKSxlPUllKGUsMCwxKSxpPUllKGksMCwxKSxlPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1pO2Vsc2V7bGV0IHI9aTw9LjU/aSooMStlKTppK2UtaSplLHM9MippLXI7dGhpcy5yPXN1KHMscix0KzEvMyksdGhpcy5nPXN1KHMscix0KSx0aGlzLmI9c3UocyxyLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiBlKHIpe3IhPT12b2lkIDAmJnBhcnNlRmxvYXQocik8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgaTtpZihpPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgcixzPWlbMV0sbz1pWzJdO3N3aXRjaChzKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihyPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChyWzNdLDEwKSkvMjU1LGUocls0XSksdGhpcztpZihyPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChyWzNdLDEwKSkvMTAwLGUocls0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihyPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKG8pKXtsZXQgYT1wYXJzZUZsb2F0KHJbMV0pLzM2MCxsPXBhcnNlSW50KHJbMl0sMTApLzEwMCxjPXBhcnNlSW50KHJbM10sMTApLzEwMDtyZXR1cm4gZShyWzRdKSx0aGlzLnNldEhTTChhLGwsYyl9YnJlYWt9fWVsc2UgaWYoaT0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCByPWlbMV0scz1yLmxlbmd0aDtpZihzPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDEpK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihzPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KHIuY2hhckF0KDApK3IuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KHIuY2hhckF0KDIpK3IuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KHIuY2hhckF0KDQpK3IuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgZT1tMFt0LnRvTG93ZXJDYXNlKCldO3JldHVybiBlIT09dm9pZCAwP3RoaXMuc2V0SGV4KGUpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1Pcih0LnIpLHRoaXMuZz1Pcih0LmcpLHRoaXMuYj1Pcih0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPW91KHQuciksdGhpcy5nPW91KHQuZyksdGhpcy5iPW91KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IGU9dGhpcy5yLGk9dGhpcy5nLHI9dGhpcy5iLHM9TWF0aC5tYXgoZSxpLHIpLG89TWF0aC5taW4oZSxpLHIpLGEsbCxjPShvK3MpLzI7aWYobz09PXMpYT0wLGw9MDtlbHNle2xldCB1PXMtbztzd2l0Y2gobD1jPD0uNT91LyhzK28pOnUvKDItcy1vKSxzKXtjYXNlIGU6YT0oaS1yKS91KyhpPHI/NjowKTticmVhaztjYXNlIGk6YT0oci1lKS91KzI7YnJlYWs7Y2FzZSByOmE9KGUtaSkvdSs0O2JyZWFrfWEvPTZ9cmV0dXJuIHQuaD1hLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQsZSxpKXtyZXR1cm4gdGhpcy5nZXRIU0woJGUpLCRlLmgrPXQsJGUucys9ZSwkZS5sKz1pLHRoaXMuc2V0SFNMKCRlLmgsJGUucywkZS5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxlKXtyZXR1cm4gdGhpcy5yPXQucitlLnIsdGhpcy5nPXQuZytlLmcsdGhpcy5iPXQuYitlLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxlKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqZSx0aGlzLmcrPSh0LmctdGhpcy5nKSplLHRoaXMuYis9KHQuYi10aGlzLmIpKmUsdGhpc31sZXJwQ29sb3JzKHQsZSxpKXtyZXR1cm4gdGhpcy5yPXQucisoZS5yLXQucikqaSx0aGlzLmc9dC5nKyhlLmctdC5nKSppLHRoaXMuYj10LmIrKGUuYi10LmIpKmksdGhpc31sZXJwSFNMKHQsZSl7dGhpcy5nZXRIU0woJGUpLHQuZ2V0SFNMKHZhKTtsZXQgaT1ydSgkZS5oLHZhLmgsZSkscj1ydSgkZS5zLHZhLnMsZSkscz1ydSgkZS5sLHZhLmwsZSk7cmV0dXJuIHRoaXMuc2V0SFNMKGkscixzKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLnI9dFtlXSx0aGlzLmc9dFtlKzFdLHRoaXMuYj10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLnIsdFtlKzFdPXRoaXMuZyx0W2UrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLnI9dC5nZXRYKGUpLHRoaXMuZz10LmdldFkoZSksdGhpcy5iPXQuZ2V0WihlKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07ZnQuTkFNRVM9bTA7ZnQucHJvdG90eXBlLmlzQ29sb3I9ITA7ZnQucHJvdG90eXBlLnI9MTtmdC5wcm90b3R5cGUuZz0xO2Z0LnByb3RvdHlwZS5iPTE7dmFyIHByLE5uPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PT0idW5kZWZpbmVkIilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ByPT09dm9pZCAwJiYocHI9cm8oImNhbnZhcyIpKSxwci53aWR0aD10LndpZHRoLHByLmhlaWdodD10LmhlaWdodDtsZXQgaT1wci5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9cHJ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1ybygiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCkscz1yLmRhdGE7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspc1tvXT1PcihzW29dLzI1NSkqMjU1O3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1lbHNlIGlmKHQuZGF0YSl7bGV0IGU9dC5kYXRhLnNsaWNlKDApO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/ZVtpXT1NYXRoLmZsb29yKE9yKGVbaV0vMjU1KSoyNTUpOmVbaV09T3IoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LGlNPTAsYWU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0PWFlLkRFRkFVTFRfSU1BR0UsZT1hZS5ERUZBVUxUX01BUFBJTkcsaT1WZSxyPVZlLHM9YmUsbz1MbCxhPVJlLGw9ZWksYz0xLHU9cmkpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1lLHRoaXMud3JhcFM9aSx0aGlzLndyYXBUPXIsdGhpcy5tYWdGaWx0ZXI9cyx0aGlzLm1pbkZpbHRlcj1vLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PWEsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBLKDAsMCksdGhpcy5yZXBlYXQ9bmV3IEsoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSygwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGRlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIWUmJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgcj10aGlzLmltYWdlO2lmKHIudXVpZD09PXZvaWQgMCYmKHIudXVpZD10bigpKSwhZSYmdC5pbWFnZXNbci51dWlkXT09PXZvaWQgMCl7bGV0IHM7aWYoQXJyYXkuaXNBcnJheShyKSl7cz1bXTtmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspcltvXS5pc0RhdGFUZXh0dXJlP3MucHVzaChhdShyW29dLmltYWdlKSk6cy5wdXNoKGF1KHJbb10pKX1lbHNlIHM9YXUocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOnN9fWkuaW1hZ2U9ci51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PWYwKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgT3U6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBWZTp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2Uga3U6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBPdTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFZlOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTthZS5ERUZBVUxUX0lNQUdFPXZvaWQgMDthZS5ERUZBVUxUX01BUFBJTkc9ZjA7YWUucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBhdShuKXtyZXR1cm4gdHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXA/Tm4uZ2V0RGF0YVVSTChuKTpuLmRhdGE/e2RhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobi5kYXRhKSx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCx0eXBlOm4uZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTooY29uc29sZS53YXJuKCJUSFJFRS5UZXh0dXJlOiBVbmFibGUgdG8gc2VyaWFsaXplIFRleHR1cmUuIikse30pfXZhciBXdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXQudyE9PXZvaWQgMD90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10aGlzLncsbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0qcyx0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIrb1sxM10qcyx0aGlzLno9b1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKnMsdGhpcy53PW9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSpzLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLHMsbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0saD1sWzhdLGY9bFsxXSxkPWxbNV0sZz1sWzldLHg9bFsyXSx2PWxbNl0sbT1sWzEwXTtpZihNYXRoLmFicyh1LWYpPC4wMSYmTWF0aC5hYnMoaC14KTwuMDEmJk1hdGguYWJzKGctdik8LjAxKXtpZihNYXRoLmFicyh1K2YpPC4xJiZNYXRoLmFicyhoK3gpPC4xJiZNYXRoLmFicyhnK3YpPC4xJiZNYXRoLmFicyhjK2QrbS0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IGI9KGMrMSkvMixfPShkKzEpLzIsUz0obSsxKS8yLEw9KHUrZikvNCxBPShoK3gpLzQsSD0oZyt2KS80O3JldHVybiBiPl8mJmI+Uz9iPC4wMT8oaT0wLHI9LjcwNzEwNjc4MSxzPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChiKSxyPUwvaSxzPUEvaSk6Xz5TP188LjAxPyhpPS43MDcxMDY3ODEscj0wLHM9LjcwNzEwNjc4MSk6KHI9TWF0aC5zcXJ0KF8pLGk9TC9yLHM9SC9yKTpTPC4wMT8oaT0uNzA3MTA2NzgxLHI9LjcwNzEwNjc4MSxzPTApOihzPU1hdGguc3FydChTKSxpPUEvcyxyPUgvcyksdGhpcy5zZXQoaSxyLHMsZSksdGhpc31sZXQgcD1NYXRoLnNxcnQoKHYtZykqKHYtZykrKGgteCkqKGgteCkrKGYtdSkqKGYtdSkpO3JldHVybiBNYXRoLmFicyhwKTwuMDAxJiYocD0xKSx0aGlzLng9KHYtZykvcCx0aGlzLnk9KGgteCkvcCx0aGlzLno9KGYtdSkvcCx0aGlzLnc9TWF0aC5hY29zKChjK2QrbS0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTtXdC5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBOZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IFd0KDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgV3QoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBhZSh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9aS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/aS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PWkuaW50ZXJuYWxGb3JtYXQhPT12b2lkIDA/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9aS5taW5GaWx0ZXIhPT12b2lkIDA/aS5taW5GaWx0ZXI6YmUsdGhpcy5kZXB0aEJ1ZmZlcj1pLmRlcHRoQnVmZmVyIT09dm9pZCAwP2kuZGVwdGhCdWZmZXI6ITAsdGhpcy5zdGVuY2lsQnVmZmVyPWkuc3RlbmNpbEJ1ZmZlciE9PXZvaWQgMD9pLnN0ZW5jaWxCdWZmZXI6ITEsdGhpcy5kZXB0aFRleHR1cmU9aS5kZXB0aFRleHR1cmUhPT12b2lkIDA/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5jb3B5KHQudmlld3BvcnQpLHRoaXMudGV4dHVyZT10LnRleHR1cmUuY2xvbmUoKSx0aGlzLnRleHR1cmUuaW1hZ2U9T2JqZWN0LmFzc2lnbih7fSx0LnRleHR1cmUuaW1hZ2UpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O05lLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyVGFyZ2V0PSEwO3ZhciBHdT1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBzPTA7czxpO3MrKyl0aGlzLnRleHR1cmVbc109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxzPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxzO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fTtHdS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgc289Y2xhc3MgZXh0ZW5kcyBOZXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9aS5pZ25vcmVEZXB0aCE9PXZvaWQgMD9pLmlnbm9yZURlcHRoOiEwLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPWkudXNlUmVuZGVyVG9UZXh0dXJlIT09dm9pZCAwP2kudXNlUmVuZGVyVG9UZXh0dXJlOiExLHRoaXMudXNlUmVuZGVyYnVmZmVyPXRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPT09ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07c28ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgRWU9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixzLG8sYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGg9aVtyKzNdLGY9c1tvKzBdLGQ9c1tvKzFdLGc9c1tvKzJdLHg9c1tvKzNdO2lmKGE9PT0wKXt0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aDtyZXR1cm59aWYoYT09PTEpe3RbZSswXT1mLHRbZSsxXT1kLHRbZSsyXT1nLHRbZSszXT14O3JldHVybn1pZihoIT09eHx8bCE9PWZ8fGMhPT1kfHx1IT09Zyl7bGV0IHY9MS1hLG09bCpmK2MqZCt1KmcraCp4LHA9bT49MD8xOi0xLGI9MS1tKm07aWYoYj5OdW1iZXIuRVBTSUxPTil7bGV0IFM9TWF0aC5zcXJ0KGIpLEw9TWF0aC5hdGFuMihTLG0qcCk7dj1NYXRoLnNpbih2KkwpL1MsYT1NYXRoLnNpbihhKkwpL1N9bGV0IF89YSpwO2lmKGw9bCp2K2YqXyxjPWMqditkKl8sdT11KnYrZypfLGg9aCp2K3gqXyx2PT09MS1hKXtsZXQgUz0xL01hdGguc3FydChsKmwrYypjK3UqdStoKmgpO2wqPVMsYyo9Uyx1Kj1TLGgqPVN9fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109aH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixzLG8pe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10saD1zW29dLGY9c1tvKzFdLGQ9c1tvKzJdLGc9c1tvKzNdO3JldHVybiB0W2VdPWEqZyt1KmgrbCpkLWMqZix0W2UrMV09bCpnK3UqZitjKmgtYSpkLHRbZSsyXT1jKmcrdSpkK2EqZi1sKmgsdFtlKzNdPXUqZy1hKmgtbCpmLWMqZCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighKHQmJnQuaXNFdWxlcikpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksaD1hKHMvMiksZj1sKGkvMiksZD1sKHIvMiksZz1sKHMvMik7c3dpdGNoKG8pe2Nhc2UiWFlaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PWYqdSpoK2MqZCpnLHRoaXMuX3k9YypkKmgrZip1KmcsdGhpcy5fej1jKnUqZy1mKmQqaCx0aGlzLl93PWMqdSpoLWYqZCpnO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PWYqdSpoLWMqZCpnLHRoaXMuX3k9YypkKmgtZip1KmcsdGhpcy5fej1jKnUqZytmKmQqaCx0aGlzLl93PWMqdSpoK2YqZCpnO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitvKX1yZXR1cm4gZSE9PSExJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tQXhpc0FuZ2xlKHQsZSl7bGV0IGk9ZS8yLHI9TWF0aC5zaW4oaSk7cmV0dXJuIHRoaXMuX3g9dC54KnIsdGhpcy5feT10Lnkqcix0aGlzLl96PXQueipyLHRoaXMuX3c9TWF0aC5jb3MoaSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCBlPXQuZWxlbWVudHMsaT1lWzBdLHI9ZVs0XSxzPWVbOF0sbz1lWzFdLGE9ZVs1XSxsPWVbOV0sYz1lWzJdLHU9ZVs2XSxoPWVbMTBdLGY9aSthK2g7aWYoZj4wKXtsZXQgZD0uNS9NYXRoLnNxcnQoZisxKTt0aGlzLl93PS4yNS9kLHRoaXMuX3g9KHUtbCkqZCx0aGlzLl95PShzLWMpKmQsdGhpcy5fej0oby1yKSpkfWVsc2UgaWYoaT5hJiZpPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDEraS1hLWgpO3RoaXMuX3c9KHUtbCkvZCx0aGlzLl94PS4yNSpkLHRoaXMuX3k9KHIrbykvZCx0aGlzLl96PShzK2MpL2R9ZWxzZSBpZihhPmgpe2xldCBkPTIqTWF0aC5zcXJ0KDErYS1pLWgpO3RoaXMuX3c9KHMtYykvZCx0aGlzLl94PShyK28pL2QsdGhpcy5feT0uMjUqZCx0aGlzLl96PShsK3UpL2R9ZWxzZXtsZXQgZD0yKk1hdGguc3FydCgxK2gtaS1hKTt0aGlzLl93PShvLXIpL2QsdGhpcy5feD0ocytjKS9kLHRoaXMuX3k9KGwrdSkvZCx0aGlzLl96PS4yNSpkfXJldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tVW5pdFZlY3RvcnModCxlKXtsZXQgaT10LmRvdChlKSsxO3JldHVybiBpPE51bWJlci5FUFNJTE9OPyhpPTAsTWF0aC5hYnModC54KT5NYXRoLmFicyh0LnopPyh0aGlzLl94PS10LnksdGhpcy5feT10LngsdGhpcy5fej0wLHRoaXMuX3c9aSk6KHRoaXMuX3g9MCx0aGlzLl95PS10LnosdGhpcy5fej10LnksdGhpcy5fdz1pKSk6KHRoaXMuX3g9dC55KmUuei10LnoqZS55LHRoaXMuX3k9dC56KmUueC10LngqZS56LHRoaXMuX3o9dC54KmUueS10LnkqZS54LHRoaXMuX3c9aSksdGhpcy5ub3JtYWxpemUoKX1hbmdsZVRvKHQpe3JldHVybiAyKk1hdGguYWNvcyhNYXRoLmFicyhJZSh0aGlzLmRvdCh0KSwtMSwxKSkpfXJvdGF0ZVRvd2FyZHModCxlKXtsZXQgaT10aGlzLmFuZ2xlVG8odCk7aWYoaT09PTApcmV0dXJuIHRoaXM7bGV0IHI9TWF0aC5taW4oMSxlL2kpO3JldHVybiB0aGlzLnNsZXJwKHQsciksdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgwLDAsMCwxKX1pbnZlcnQoKXtyZXR1cm4gdGhpcy5jb25qdWdhdGUoKX1jb25qdWdhdGUoKXtyZXR1cm4gdGhpcy5feCo9LTEsdGhpcy5feSo9LTEsdGhpcy5feio9LTEsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLl94KnQuX3grdGhpcy5feSp0Ll95K3RoaXMuX3oqdC5feit0aGlzLl93KnQuX3d9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy5feCp0aGlzLl94K3RoaXMuX3kqdGhpcy5feSt0aGlzLl96KnRoaXMuX3ordGhpcy5fdyp0aGlzLl93KX1ub3JtYWxpemUoKXtsZXQgdD10aGlzLmxlbmd0aCgpO3JldHVybiB0PT09MD8odGhpcy5feD0wLHRoaXMuX3k9MCx0aGlzLl96PTAsdGhpcy5fdz0xKToodD0xL3QsdGhpcy5feD10aGlzLl94KnQsdGhpcy5feT10aGlzLl95KnQsdGhpcy5fej10aGlzLl96KnQsdGhpcy5fdz10aGlzLl93KnQpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlRdWF0ZXJuaW9ucyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsZSkpOnRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCx0aGlzKX1tdWx0aXBseVF1YXRlcm5pb25zKHQsZSl7bGV0IGk9dC5feCxyPXQuX3kscz10Ll96LG89dC5fdyxhPWUuX3gsbD1lLl95LGM9ZS5feix1PWUuX3c7cmV0dXJuIHRoaXMuX3g9aSp1K28qYStyKmMtcypsLHRoaXMuX3k9cip1K28qbCtzKmEtaSpjLHRoaXMuX3o9cyp1K28qYytpKmwtciphLHRoaXMuX3c9byp1LWkqYS1yKmwtcypjLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwKHQsZSl7aWYoZT09PTApcmV0dXJuIHRoaXM7aWYoZT09PTEpcmV0dXJuIHRoaXMuY29weSh0KTtsZXQgaT10aGlzLl94LHI9dGhpcy5feSxzPXRoaXMuX3osbz10aGlzLl93LGE9byp0Ll93K2kqdC5feCtyKnQuX3krcyp0Ll96O2lmKGE8MD8odGhpcy5fdz0tdC5fdyx0aGlzLl94PS10Ll94LHRoaXMuX3k9LXQuX3ksdGhpcy5fej0tdC5feixhPS1hKTp0aGlzLmNvcHkodCksYT49MSlyZXR1cm4gdGhpcy5fdz1vLHRoaXMuX3g9aSx0aGlzLl95PXIsdGhpcy5fej1zLHRoaXM7bGV0IGw9MS1hKmE7aWYobDw9TnVtYmVyLkVQU0lMT04pe2xldCBkPTEtZTtyZXR1cm4gdGhpcy5fdz1kKm8rZSp0aGlzLl93LHRoaXMuX3g9ZCppK2UqdGhpcy5feCx0aGlzLl95PWQqcitlKnRoaXMuX3ksdGhpcy5fej1kKnMrZSp0aGlzLl96LHRoaXMubm9ybWFsaXplKCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bGV0IGM9TWF0aC5zcXJ0KGwpLHU9TWF0aC5hdGFuMihjLGEpLGg9TWF0aC5zaW4oKDEtZSkqdSkvYyxmPU1hdGguc2luKGUqdSkvYztyZXR1cm4gdGhpcy5fdz1vKmgrdGhpcy5fdypmLHRoaXMuX3g9aSpoK3RoaXMuX3gqZix0aGlzLl95PXIqaCt0aGlzLl95KmYsdGhpcy5fej1zKmgrdGhpcy5feipmLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNsZXJwUXVhdGVybmlvbnModCxlLGkpe3JldHVybiB0aGlzLmNvcHkodCkuc2xlcnAoZSxpKX1yYW5kb20oKXtsZXQgdD1NYXRoLnJhbmRvbSgpLGU9TWF0aC5zcXJ0KDEtdCksaT1NYXRoLnNxcnQodCkscj0yKk1hdGguUEkqTWF0aC5yYW5kb20oKSxzPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpO3JldHVybiB0aGlzLnNldChlKk1hdGguY29zKHIpLGkqTWF0aC5zaW4ocyksaSpNYXRoLmNvcyhzKSxlKk1hdGguc2luKHIpKX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX3c9PT10aGlzLl93fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMuX3g9dFtlXSx0aGlzLl95PXRbZSsxXSx0aGlzLl96PXRbZSsyXSx0aGlzLl93PXRbZSszXSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl93LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLl94PXQuZ2V0WChlKSx0aGlzLl95PXQuZ2V0WShlKSx0aGlzLl96PXQuZ2V0WihlKSx0aGlzLl93PXQuZ2V0VyhlKSx0aGlzfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTtFZS5wcm90b3R5cGUuaXNRdWF0ZXJuaW9uPSEwO3ZhciBUPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiBpPT09dm9pZCAwJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24ocmcuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LGUpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbM10qaStzWzZdKnIsdGhpcy55PXNbMV0qZStzWzRdKmkrc1s3XSpyLHRoaXMuej1zWzJdKmUrc1s1XSppK3NbOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LHM9dC5lbGVtZW50cyxvPTEvKHNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSk7cmV0dXJuIHRoaXMueD0oc1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0pKm8sdGhpcy55PShzWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSkqbyx0aGlzLno9KHNbMl0qZStzWzZdKmkrc1sxMF0qcitzWzE0XSkqbyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10Lngsbz10LnksYT10LnosbD10LncsYz1sKmUrbypyLWEqaSx1PWwqaSthKmUtcypyLGg9bCpyK3MqaS1vKmUsZj0tcyplLW8qaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrZiotcyt1Ki1hLWgqLW8sdGhpcy55PXUqbCtmKi1vK2gqLXMtYyotYSx0aGlzLno9aCpsK2YqLWErYyotby11Ki1zLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIsdGhpcy55PXNbMV0qZStzWzVdKmkrc1s5XSpyLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1zKmEsdGhpcy55PXMqby1pKmwsdGhpcy56PWkqYS1yKm8sdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKGU9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBsdS5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihsdSl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIobHUuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoZT09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoSWUoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsZSozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiBpIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS1jZih0LDIpKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O1QucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgbHU9bmV3IFQscmc9bmV3IEVlLEdlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMS8wLDEvMCwxLzApLGU9bmV3IFQoLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgZT0xLzAsaT0xLzAscj0xLzAscz0tMS8wLG89LTEvMCxhPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PGUmJihlPXUpLGg8aSYmKGk9aCksZjxyJiYocj1mKSx1PnMmJihzPXUpLGg+byYmKG89aCksZj5hJiYoYT1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KGUsaSxyKSx0aGlzLm1heC5zZXQocyxvLGEpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtlXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxlKXtsZXQgaT1JaS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31zZXRGcm9tT2JqZWN0KHQsZT0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LGUpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYoaSE9PXZvaWQgMClpZihlJiZpLmF0dHJpYnV0ZXMhPW51bGwmJmkuYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IHM9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgbz0wLGE9cy5jb3VudDtvPGE7bysrKUlpLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxvKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KElpKX1lbHNlIGkuYm91bmRpbmdCb3g9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGN1LmNvcHkoaS5ib3VuZGluZ0JveCksY3UuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oY3UpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltzXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLElpKSxJaS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoa3MpLF9hLnN1YlZlY3RvcnModGhpcy5tYXgsa3MpLG1yLnN1YlZlY3RvcnModC5hLGtzKSxnci5zdWJWZWN0b3JzKHQuYixrcykseHIuc3ViVmVjdG9ycyh0LmMsa3MpLHFuLnN1YlZlY3RvcnMoZ3IsbXIpLFhuLnN1YlZlY3RvcnMoeHIsZ3IpLE5pLnN1YlZlY3RvcnMobXIseHIpO2xldCBlPVswLC1xbi56LHFuLnksMCwtWG4ueixYbi55LDAsLU5pLnosTmkueSxxbi56LDAsLXFuLngsWG4ueiwwLC1Ybi54LE5pLnosMCwtTmkueCwtcW4ueSxxbi54LDAsLVhuLnksWG4ueCwwLC1OaS55LE5pLngsMF07cmV0dXJuIXV1KGUsbXIsZ3IseHIsX2EpfHwoZT1bMSwwLDAsMCwxLDAsMCwwLDFdLCF1dShlLG1yLGdyLHhyLF9hKSk/ITE6KHdhLmNyb3NzVmVjdG9ycyhxbixYbiksZT1bd2EueCx3YS55LHdhLnpdLHV1KGUsbXIsZ3IseHIsX2EpKX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBJaS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUoSWkpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihBblswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBblsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBblszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxBbls2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxBbls3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoQW4pLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0dlLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIEFuPVtuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVCxuZXcgVF0sSWk9bmV3IFQsY3U9bmV3IEdlLG1yPW5ldyBULGdyPW5ldyBULHhyPW5ldyBULHFuPW5ldyBULFhuPW5ldyBULE5pPW5ldyBULGtzPW5ldyBULF9hPW5ldyBULHdhPW5ldyBULEZpPW5ldyBUO2Z1bmN0aW9uIHV1KG4sdCxlLGkscil7Zm9yKGxldCBzPTAsbz1uLmxlbmd0aC0zO3M8PW87cys9Myl7RmkuZnJvbUFycmF5KG4scyk7bGV0IGE9ci54Kk1hdGguYWJzKEZpLngpK3IueSpNYXRoLmFicyhGaS55KStyLnoqTWF0aC5hYnMoRmkueiksbD10LmRvdChGaSksYz1lLmRvdChGaSksdT1pLmRvdChGaSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIHJNPW5ldyBHZSxzZz1uZXcgVCxNYT1uZXcgVCxodT1uZXcgVCxzaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9LTEpe3RoaXMuY2VudGVyPXQsdGhpcy5yYWRpdXM9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0KSx0aGlzLnJhZGl1cz1lLHRoaXN9c2V0RnJvbVBvaW50cyh0LGUpe2xldCBpPXRoaXMuY2VudGVyO2UhPT12b2lkIDA/aS5jb3B5KGUpOnJNLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBzPTAsbz10Lmxlbmd0aDtzPG87cysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbc10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7aHUuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1odS5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPShpLXRoaXMucmFkaXVzKSouNTt0aGlzLmNlbnRlci5hZGQoaHUubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9NYS5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpNYS5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLmFkZChNYSkpLHRoaXMuZXhwYW5kQnlQb2ludChzZy5jb3B5KHQuY2VudGVyKS5zdWIoTWEpKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxDbj1uZXcgVCxmdT1uZXcgVCxiYT1uZXcgVCxZbj1uZXcgVCxkdT1uZXcgVCxTYT1uZXcgVCxwdT1uZXcgVCxvaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsQ24pKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9Q24uc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KENuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksQ24uZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7ZnUuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLGJhLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLFluLmNvcHkodGhpcy5vcmlnaW4pLnN1YihmdSk7bGV0IHM9dC5kaXN0YW5jZVRvKGUpKi41LG89LXRoaXMuZGlyZWN0aW9uLmRvdChiYSksYT1Zbi5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LVluLmRvdChiYSksYz1Zbi5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1vKm8pLGgsZixkLGc7aWYodT4wKWlmKGg9bypsLWEsZj1vKmEtbCxnPXMqdSxoPj0wKWlmKGY+PS1nKWlmKGY8PWcpe2xldCB4PTEvdTtoKj14LGYqPXgsZD1oKihoK28qZisyKmEpK2YqKG8qaCtmKzIqbCkrY31lbHNlIGY9cyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LXMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZz8oaD1NYXRoLm1heCgwLC0oLW8qcythKSksZj1oPjA/LXM6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk6Zjw9Zz8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShvKnMrYSkpLGY9aD4wP3M6TWF0aC5taW4oTWF0aC5tYXgoLXMsLWwpLHMpLGQ9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPW8+MD8tczpzLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KGJhKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoZnUpLGR9aW50ZXJzZWN0U3BoZXJlKHQsZSl7Q24uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9Q24uZG90KHRoaXMuZGlyZWN0aW9uKSxyPUNuLmRvdChDbiktaSppLHM9dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5zKXJldHVybiBudWxsO2xldCBvPU1hdGguc3FydChzLXIpLGE9aS1vLGw9aStvO3JldHVybiBhPDAmJmw8MD9udWxsOmE8MD90aGlzLmF0KGwsZSk6dGhpcy5hdChhLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZihlPT09MClyZXR1cm4gdC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pPT09MD8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIGk9PT1udWxsP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIGU9PT0wfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLHMsbyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksaD0xL3RoaXMuZGlyZWN0aW9uLnosZj10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1mLngpKmMscj0odC5tYXgueC1mLngpKmMpOihpPSh0Lm1heC54LWYueCkqYyxyPSh0Lm1pbi54LWYueCkqYyksdT49MD8ocz0odC5taW4ueS1mLnkpKnUsbz0odC5tYXgueS1mLnkpKnUpOihzPSh0Lm1heC55LWYueSkqdSxvPSh0Lm1pbi55LWYueSkqdSksaT5vfHxzPnJ8fCgocz5pfHxpIT09aSkmJihpPXMpLChvPHJ8fHIhPT1yKSYmKHI9byksaD49MD8oYT0odC5taW4uei1mLnopKmgsbD0odC5tYXguei1mLnopKmgpOihhPSh0Lm1heC56LWYueikqaCxsPSh0Lm1pbi56LWYueikqaCksaT5sfHxhPnIpfHwoKGE+aXx8aSE9PWkpJiYoaT1hKSwobDxyfHxyIT09cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHRoaXMuaW50ZXJzZWN0Qm94KHQsQ24pIT09bnVsbH1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLHMpe2R1LnN1YlZlY3RvcnMoZSx0KSxTYS5zdWJWZWN0b3JzKGksdCkscHUuY3Jvc3NWZWN0b3JzKGR1LFNhKTtsZXQgbz10aGlzLmRpcmVjdGlvbi5kb3QocHUpLGE7aWYobz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNlIGlmKG88MClhPS0xLG89LW87ZWxzZSByZXR1cm4gbnVsbDtZbi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFNhLmNyb3NzVmVjdG9ycyhZbixTYSkpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChkdS5jcm9zcyhZbikpO2lmKGM8MHx8bCtjPm8pcmV0dXJuIG51bGw7bGV0IHU9LWEqWW4uZG90KHB1KTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L28scyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LHd0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2KXtsZXQgbT10aGlzLmVsZW1lbnRzO3JldHVybiBtWzBdPXQsbVs0XT1lLG1bOF09aSxtWzEyXT1yLG1bMV09cyxtWzVdPW8sbVs5XT1hLG1bMTNdPWwsbVsyXT1jLG1bNl09dSxtWzEwXT1oLG1bMTRdPWYsbVszXT1kLG1bN109ZyxtWzExXT14LG1bMTVdPXYsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB3dCgpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX1jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSxlWzldPWlbOV0sZVsxMF09aVsxMF0sZVsxMV09aVsxMV0sZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sZVsxNV09aVsxNV0sdGhpc31jb3B5UG9zaXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeDModCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzNdLGVbNl0sMCxlWzFdLGVbNF0sZVs3XSwwLGVbMl0sZVs1XSxlWzhdLDAsMCwwLDAsMSksdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywxKSxpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywyKSx0aGlzfW1ha2VCYXNpcyh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQueCxlLngsaS54LDAsdC55LGUueSxpLnksMCx0LnosZS56LGkueiwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdFJvdGF0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzLHI9MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCkscz0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxvPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiBlWzBdPWlbMF0qcixlWzFdPWlbMV0qcixlWzJdPWlbMl0qcixlWzNdPTAsZVs0XT1pWzRdKnMsZVs1XT1pWzVdKnMsZVs2XT1pWzZdKnMsZVs3XT0wLGVbOF09aVs4XSpvLGVbOV09aVs5XSpvLGVbMTBdPWlbMTBdKm8sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbUV1bGVyKHQpe3QmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm1ha2VSb3RhdGlvbkZyb21FdWxlcigpIG5vdyBleHBlY3RzIGEgRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56LG89TWF0aC5jb3MoaSksYT1NYXRoLnNpbihpKSxsPU1hdGguY29zKHIpLGM9TWF0aC5zaW4ociksdT1NYXRoLmNvcyhzKSxoPU1hdGguc2luKHMpO2lmKHQub3JkZXI9PT0iWFlaIil7bGV0IGY9byp1LGQ9bypoLGc9YSp1LHg9YSpoO2VbMF09bCp1LGVbNF09LWwqaCxlWzhdPWMsZVsxXT1kK2cqYyxlWzVdPWYteCpjLGVbOV09LWEqbCxlWzJdPXgtZipjLGVbNl09ZytkKmMsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWFoiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mK3gqYSxlWzRdPWcqYS1kLGVbOF09bypjLGVbMV09bypoLGVbNV09byp1LGVbOV09LWEsZVsyXT1kKmEtZyxlWzZdPXgrZiphLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWlhZIil7bGV0IGY9bCp1LGQ9bCpoLGc9Yyp1LHg9YypoO2VbMF09Zi14KmEsZVs0XT0tbypoLGVbOF09ZytkKmEsZVsxXT1kK2cqYSxlWzVdPW8qdSxlWzldPXgtZiphLGVbMl09LW8qYyxlWzZdPWEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWVgiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT1nKmMtZCxlWzhdPWYqYyt4LGVbMV09bCpoLGVbNV09eCpjK2YsZVs5XT1kKmMtZyxlWzJdPS1jLGVbNl09YSpsLGVbMTBdPW8qbH1lbHNlIGlmKHQub3JkZXI9PT0iWVpYIil7bGV0IGY9bypsLGQ9bypjLGc9YSpsLHg9YSpjO2VbMF09bCp1LGVbNF09eC1mKmgsZVs4XT1nKmgrZCxlWzFdPWgsZVs1XT1vKnUsZVs5XT0tYSp1LGVbMl09LWMqdSxlWzZdPWQqaCtnLGVbMTBdPWYteCpofWVsc2UgaWYodC5vcmRlcj09PSJYWlkiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT0taCxlWzhdPWMqdSxlWzFdPWYqaCt4LGVbNV09byp1LGVbOV09ZCpoLWcsZVsyXT1nKmgtZCxlWzZdPWEqdSxlWzEwXT14KmgrZn1yZXR1cm4gZVszXT0wLGVbN109MCxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5jb21wb3NlKHNNLHQsb00pfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4ga2Uuc3ViVmVjdG9ycyh0LGUpLGtlLmxlbmd0aFNxKCk9PT0wJiYoa2Uuej0xKSxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSksWm4ubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhpLnopPT09MT9rZS54Kz0xZS00OmtlLnorPTFlLTQsa2Uubm9ybWFsaXplKCksWm4uY3Jvc3NWZWN0b3JzKGksa2UpKSxabi5ub3JtYWxpemUoKSxFYS5jcm9zc1ZlY3RvcnMoa2UsWm4pLHJbMF09Wm4ueCxyWzRdPUVhLngscls4XT1rZS54LHJbMV09Wm4ueSxyWzVdPUVhLnkscls5XT1rZS55LHJbMl09Wm4ueixyWzZdPUVhLnosclsxMF09a2Uueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMscz10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGg9aVs1XSxmPWlbOV0sZD1pWzEzXSxnPWlbMl0seD1pWzZdLHY9aVsxMF0sbT1pWzE0XSxwPWlbM10sYj1pWzddLF89aVsxMV0sUz1pWzE1XSxMPXJbMF0sQT1yWzRdLEg9cls4XSx0dD1yWzEyXSxYPXJbMV0seT1yWzVdLFI9cls5XSxEPXJbMTNdLEY9clsyXSx6PXJbNl0sTj1yWzEwXSxWPXJbMTRdLFE9clszXSxhdD1yWzddLEc9clsxMV0sJD1yWzE1XTtyZXR1cm4gc1swXT1vKkwrYSpYK2wqRitjKlEsc1s0XT1vKkErYSp5K2wqeitjKmF0LHNbOF09bypIK2EqUitsKk4rYypHLHNbMTJdPW8qdHQrYSpEK2wqVitjKiQsc1sxXT11KkwraCpYK2YqRitkKlEsc1s1XT11KkEraCp5K2YqeitkKmF0LHNbOV09dSpIK2gqUitmKk4rZCpHLHNbMTNdPXUqdHQraCpEK2YqVitkKiQsc1syXT1nKkwreCpYK3YqRittKlEsc1s2XT1nKkEreCp5K3YqeittKmF0LHNbMTBdPWcqSCt4KlIrdipOK20qRyxzWzE0XT1nKnR0K3gqRCt2KlYrbSokLHNbM109cCpMK2IqWCtfKkYrUypRLHNbN109cCpBK2IqeStfKnorUyphdCxzWzExXT1wKkgrYipSK18qTitTKkcsc1sxNV09cCp0dCtiKkQrXypWK1MqJCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVs0XSo9dCxlWzhdKj10LGVbMTJdKj10LGVbMV0qPXQsZVs1XSo9dCxlWzldKj10LGVbMTNdKj10LGVbMl0qPXQsZVs2XSo9dCxlWzEwXSo9dCxlWzE0XSo9dCxlWzNdKj10LGVbN10qPXQsZVsxMV0qPXQsZVsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFs0XSxyPXRbOF0scz10WzEyXSxvPXRbMV0sYT10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxkPXRbMTRdLGc9dFszXSx4PXRbN10sdj10WzExXSxtPXRbMTVdO3JldHVybiBnKigrcypsKmgtcipjKmgtcyphKmYraSpjKmYrciphKmQtaSpsKmQpK3gqKCtlKmwqZC1lKmMqZitzKm8qZi1yKm8qZCtyKmMqdS1zKmwqdSkrdiooK2UqYypoLWUqYSpkLXMqbypoK2kqbypkK3MqYSp1LWkqYyp1KSttKigtciphKnUtZSpsKmgrZSphKmYrcipvKmgtaSpvKmYraSpsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMsZTtyZXR1cm4gZT10WzFdLHRbMV09dFs0XSx0WzRdPWUsZT10WzJdLHRbMl09dFs4XSx0WzhdPWUsZT10WzZdLHRbNl09dFs5XSx0WzldPWUsZT10WzNdLHRbM109dFsxMl0sdFsxMl09ZSxlPXRbN10sdFs3XT10WzEzXSx0WzEzXT1lLGU9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09ZSx0aGlzfXNldFBvc2l0aW9uKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnopOihyWzEyXT10LHJbMTNdPWUsclsxNF09aSksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLHM9dFszXSxvPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLGQ9dFsxMV0sZz10WzEyXSx4PXRbMTNdLHY9dFsxNF0sbT10WzE1XSxwPWgqdipjLXgqZipjK3gqbCpkLWEqdipkLWgqbCptK2EqZiptLGI9ZypmKmMtdSp2KmMtZypsKmQrbyp2KmQrdSpsKm0tbypmKm0sXz11KngqYy1nKmgqYytnKmEqZC1vKngqZC11KmEqbStvKmgqbSxTPWcqaCpsLXUqeCpsLWcqYSpmK28qeCpmK3UqYSp2LW8qaCp2LEw9ZSpwK2kqYityKl8rcypTO2lmKEw9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgQT0xL0w7cmV0dXJuIHRbMF09cCpBLHRbMV09KHgqZipzLWgqdipzLXgqcipkK2kqdipkK2gqciptLWkqZiptKSpBLHRbMl09KGEqdipzLXgqbCpzK3gqcipjLWkqdipjLWEqciptK2kqbCptKSpBLHRbM109KGgqbCpzLWEqZipzLWgqcipjK2kqZipjK2EqcipkLWkqbCpkKSpBLHRbNF09YipBLHRbNV09KHUqdipzLWcqZipzK2cqcipkLWUqdipkLXUqciptK2UqZiptKSpBLHRbNl09KGcqbCpzLW8qdipzLWcqcipjK2UqdipjK28qciptLWUqbCptKSpBLHRbN109KG8qZipzLXUqbCpzK3UqcipjLWUqZipjLW8qcipkK2UqbCpkKSpBLHRbOF09XypBLHRbOV09KGcqaCpzLXUqeCpzLWcqaSpkK2UqeCpkK3UqaSptLWUqaCptKSpBLHRbMTBdPShvKngqcy1nKmEqcytnKmkqYy1lKngqYy1vKmkqbStlKmEqbSkqQSx0WzExXT0odSphKnMtbypoKnMtdSppKmMrZSpoKmMrbyppKmQtZSphKmQpKkEsdFsxMl09UypBLHRbMTNdPSh1Kngqci1nKmgqcitnKmkqZi1lKngqZi11KmkqditlKmgqdikqQSx0WzE0XT0oZyphKnItbyp4KnItZyppKmwrZSp4KmwrbyppKnYtZSphKnYpKkEsdFsxNV09KG8qaCpyLXUqYSpyK3UqaSpsLWUqaCpsLW8qaSpmK2UqYSpmKSpBLHRoaXN9c2NhbGUodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxzPXQuejtyZXR1cm4gZVswXSo9aSxlWzRdKj1yLGVbOF0qPXMsZVsxXSo9aSxlWzVdKj1yLGVbOV0qPXMsZVsyXSo9aSxlWzZdKj1yLGVbMTBdKj1zLGVbM10qPWksZVs3XSo9cixlWzExXSo9cyx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLGk9dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0scj10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoZSxpLHIpKX1tYWtlVHJhbnNsYXRpb24odCxlLGkpe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLGUsMCwwLDEsaSwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLGUsLWksMCwwLGksZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLDAsaSwwLDAsMSwwLDAsLWksMCxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsLWksMCwwLGksZSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLHM9MS1pLG89dC54LGE9dC55LGw9dC56LGM9cypvLHU9cyphO3JldHVybiB0aGlzLnNldChjKm8raSxjKmEtcipsLGMqbCtyKmEsMCxjKmErcipsLHUqYStpLHUqbC1yKm8sMCxjKmwtciphLHUqbCtyKm8scypsKmwraSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLGUsMCwwLDAsMCxpLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxlLGkscixzLG8pe3JldHVybiB0aGlzLnNldCgxLGkscywwLHQsMSxvLDAsZSxyLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz1lLl94LG89ZS5feSxhPWUuX3osbD1lLl93LGM9cytzLHU9bytvLGg9YSthLGY9cypjLGQ9cyp1LGc9cypoLHg9byp1LHY9bypoLG09YSpoLHA9bCpjLGI9bCp1LF89bCpoLFM9aS54LEw9aS55LEE9aS56O3JldHVybiByWzBdPSgxLSh4K20pKSpTLHJbMV09KGQrXykqUyxyWzJdPShnLWIpKlMsclszXT0wLHJbNF09KGQtXykqTCxyWzVdPSgxLShmK20pKSpMLHJbNl09KHYrcCkqTCxyWzddPTAscls4XT0oZytiKSpBLHJbOV09KHYtcCkqQSxyWzEwXT0oMS0oZit4KSkqQSxyWzExXT0wLHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56LHJbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHMscz15ci5zZXQoclswXSxyWzFdLHJbMl0pLmxlbmd0aCgpLG89eXIuc2V0KHJbNF0scls1XSxyWzZdKS5sZW5ndGgoKSxhPXlyLnNldChyWzhdLHJbOV0sclsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYocz0tcyksdC54PXJbMTJdLHQueT1yWzEzXSx0Lno9clsxNF0sS2UuY29weSh0aGlzKTtsZXQgYz0xL3MsdT0xL28saD0xL2E7cmV0dXJuIEtlLmVsZW1lbnRzWzBdKj1jLEtlLmVsZW1lbnRzWzFdKj1jLEtlLmVsZW1lbnRzWzJdKj1jLEtlLmVsZW1lbnRzWzRdKj11LEtlLmVsZW1lbnRzWzVdKj11LEtlLmVsZW1lbnRzWzZdKj11LEtlLmVsZW1lbnRzWzhdKj1oLEtlLmVsZW1lbnRzWzldKj1oLEtlLmVsZW1lbnRzWzEwXSo9aCxlLnNldEZyb21Sb3RhdGlvbk1hdHJpeChLZSksaS54PXMsaS55PW8saS56PWEsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxlLGkscixzLG8pe289PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBhPXRoaXMuZWxlbWVudHMsbD0yKnMvKGUtdCksYz0yKnMvKGktciksdT0oZSt0KS8oZS10KSxoPShpK3IpLyhpLXIpLGY9LShvK3MpLyhvLXMpLGQ9LTIqbypzLyhvLXMpO3JldHVybiBhWzBdPWwsYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1oLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1mLGFbMTRdPWQsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8oby1zKSxoPShlK3QpKmwsZj0oaStyKSpjLGQ9KG8rcykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0taCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1mLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0tZCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07d3QucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgeXI9bmV3IFQsS2U9bmV3IHd0LHNNPW5ldyBUKDAsMCwwKSxvTT1uZXcgVCgxLDEsMSksWm49bmV3IFQsRWE9bmV3IFQsa2U9bmV3IFQsb2c9bmV3IHd0LGFnPW5ldyBFZSxhaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPWFpLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cn1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fb3JkZXI9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQsZT10aGlzLl9vcmRlcixpPSEwKXtsZXQgcj10LmVsZW1lbnRzLHM9clswXSxvPXJbNF0sYT1yWzhdLGw9clsxXSxjPXJbNV0sdT1yWzldLGg9clsyXSxmPXJbNl0sZD1yWzEwXTtzd2l0Y2goZSl7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKEllKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLUllKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoYSxkKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihJZShmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLGQpLHRoaXMuX3o9TWF0aC5hdGFuMigtbyxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1JZShoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsZCksdGhpcy5fej1NYXRoLmF0YW4yKGwscykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oSWUobCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgscykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKGEsZCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtSWUobywtMSwxKSksTWF0aC5hYnMobyk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihhLHMpKToodGhpcy5feD1NYXRoLmF0YW4yKC11LGQpLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitlKX1yZXR1cm4gdGhpcy5fb3JkZXI9ZSxpPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQsZSxpKXtyZXR1cm4gb2cubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgob2csZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBhZy5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihhZyx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx0WzNdIT09dm9pZCAwJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyBUKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07YWkucHJvdG90eXBlLmlzRXVsZXI9ITA7YWkuRGVmYXVsdE9yZGVyPSJYWVoiO2FpLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIGlsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4odGhpcy5tYXNrJnQubWFzaykhPT0wfWlzRW5hYmxlZCh0KXtyZXR1cm4odGhpcy5tYXNrJigxPDx0fDApKSE9PTB9fSxhTT0wLGxnPW5ldyBULHZyPW5ldyBFZSxSbj1uZXcgd3QsVGE9bmV3IFQsSHM9bmV3IFQsbE09bmV3IFQsY009bmV3IEVlLGNnPW5ldyBUKDEsMCwwKSx1Zz1uZXcgVCgwLDEsMCksaGc9bmV3IFQoMCwwLDEpLHVNPXt0eXBlOiJhZGRlZCJ9LGZnPXt0eXBlOiJyZW1vdmVkIn0sa3Q9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6YU0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1rdC5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgVCxlPW5ldyBhaSxpPW5ldyBFZSxyPW5ldyBUKDEsMSwxKTtmdW5jdGlvbiBzKCl7aS5zZXRGcm9tRXVsZXIoZSwhMSl9ZnVuY3Rpb24gbygpe2Uuc2V0RnJvbVF1YXRlcm5pb24oaSx2b2lkIDAsITEpfWUuX29uQ2hhbmdlKHMpLGkuX29uQ2hhbmdlKG8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZX0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnJ9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IHd0fSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBkZX19KSx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5tYXRyaXhXb3JsZD1uZXcgd3QsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPWt0LkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgaWwsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQsZSl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxlKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQsZSl7cmV0dXJuIHZyLnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkodnIpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ciksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhjZyx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh1Zyx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhoZyx0KX10cmFuc2xhdGVPbkF4aXModCxlKXtyZXR1cm4gbGcuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZChsZy5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhjZyx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1Zyx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhoZyx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9UYS5jb3B5KHQpOlRhLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9Sbi5sb29rQXQoSHMsVGEsdGhpcy51cCk6Um4ubG9va0F0KFRhLEhzLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHImJihSbi5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksdnIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJuKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodnIuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KHQucGFyZW50IT09bnVsbCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudCh1TSkpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW2ldKTtyZXR1cm4gdGhpc31sZXQgZT10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIGUhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoZmcpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IGU9dGhpcy5jaGlsZHJlblt0XTtlLnBhcmVudD1udWxsLGUuZGlzcGF0Y2hFdmVudChmZyl9cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoPTAsdGhpc31hdHRhY2godCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdC5wYXJlbnQhPT1udWxsJiYodC5wYXJlbnQudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLFJuLm11bHRpcGx5KHQucGFyZW50Lm1hdHJpeFdvcmxkKSksdC5hcHBseU1hdHJpeDQoUm4pLHRoaXMuYWRkKHQpLHQudXBkYXRlV29ybGRNYXRyaXgoITEsITApLHRoaXN9Z2V0T2JqZWN0QnlJZCh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJpZCIsdCl9Z2V0T2JqZWN0QnlOYW1lKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoIm5hbWUiLHQpfWdldE9iamVjdEJ5UHJvcGVydHkodCxlKXtpZih0aGlzW3RdPT09ZSlyZXR1cm4gdGhpcztmb3IobGV0IGk9MCxyPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO2k8cjtpKyspe2xldCBvPXRoaXMuY2hpbGRyZW5baV0uZ2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpO2lmKG8hPT12b2lkIDApcmV0dXJuIG99fWdldFdvcmxkUG9zaXRpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpfWdldFdvcmxkUXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoSHMsdCxsTSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyxjTSx0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KGVbOF0sZVs5XSxlWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCBlPXRoaXMucGFyZW50O2UhPT1udWxsJiYodChlKSxlLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7bGV0IGk9dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZpIT09bnVsbCYmaS51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksZT09PSEwKXtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKylyW3NdLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixpPXt9O2UmJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxpLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCByPXt9O3IudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHIubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoci5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKHIucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihyLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoci5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBzKGEsbCl7cmV0dXJuIGFbbC51dWlkXT09PXZvaWQgMCYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9yLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihyLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihyLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtyLmdlb21ldHJ5PXModC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBhPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihhIT09dm9pZCAwJiZhLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9YS5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107cyh0LnNoYXBlcyxoKX1lbHNlIHModC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKHIuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxyLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYocyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxyLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IGE9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKWEucHVzaChzKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtyLm1hdGVyaWFsPWF9ZWxzZSByLm1hdGVyaWFsPXModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7ci5jaGlsZHJlbj1bXTtmb3IobGV0IGE9MDthPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO2ErKylyLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlblthXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe3IuYW5pbWF0aW9ucz1bXTtmb3IobGV0IGE9MDthPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7YSsrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbYV07ci5hbmltYXRpb25zLnB1c2gocyh0LmFuaW1hdGlvbnMsbCkpfX1pZihlKXtsZXQgYT1vKHQuZ2VvbWV0cmllcyksbD1vKHQubWF0ZXJpYWxzKSxjPW8odC50ZXh0dXJlcyksdT1vKHQuaW1hZ2VzKSxoPW8odC5zaGFwZXMpLGY9byh0LnNrZWxldG9ucyksZD1vKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihpLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9ZiksZC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1kKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIG8oYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LGU9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxlPT09ITApZm9yKGxldCBpPTA7aTx0LmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCByPXQuY2hpbGRyZW5baV07dGhpcy5hZGQoci5jbG9uZSgpKX1yZXR1cm4gdGhpc319O2t0LkRlZmF1bHRVcD1uZXcgVCgwLDEsMCk7a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7a3QucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIFFlPW5ldyBULExuPW5ldyBULG11PW5ldyBULFBuPW5ldyBULF9yPW5ldyBULHdyPW5ldyBULGRnPW5ldyBULGd1PW5ldyBULHh1PW5ldyBULHl1PW5ldyBULHJlPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLFFlLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKFFlKTtsZXQgcz1yLmxlbmd0aFNxKCk7cmV0dXJuIHM+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KHMpKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLHMpe1FlLnN1YlZlY3RvcnMocixlKSxMbi5zdWJWZWN0b3JzKGksZSksbXUuc3ViVmVjdG9ycyh0LGUpO2xldCBvPVFlLmRvdChRZSksYT1RZS5kb3QoTG4pLGw9UWUuZG90KG11KSxjPUxuLmRvdChMbiksdT1Mbi5kb3QobXUpLGg9bypjLWEqYTtpZihoPT09MClyZXR1cm4gcy5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxkPShjKmwtYSp1KSpmLGc9KG8qdS1hKmwpKmY7cmV0dXJuIHMuc2V0KDEtZC1nLGcsZCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsUG4pLFBuLng+PTAmJlBuLnk+PTAmJlBuLngrUG4ueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixzLG8sYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihzLFBuLngpLGwuYWRkU2NhbGVkVmVjdG9yKG8sUG4ueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxQbi56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBRZS5zdWJWZWN0b3JzKGksZSksTG4uc3ViVmVjdG9ycyh0LGUpLFFlLmNyb3NzKExuKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gUWUuc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxMbi5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLFFlLmNyb3NzKExuKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiByZS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxlKXtyZXR1cm4gcmUuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSl9Z2V0VVYodCxlLGkscixzKXtyZXR1cm4gcmUuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlLGkscixzKX1jb250YWluc1BvaW50KHQpe3JldHVybiByZS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIHJlLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2xldCBpPXRoaXMuYSxyPXRoaXMuYixzPXRoaXMuYyxvLGE7X3Iuc3ViVmVjdG9ycyhyLGkpLHdyLnN1YlZlY3RvcnMocyxpKSxndS5zdWJWZWN0b3JzKHQsaSk7bGV0IGw9X3IuZG90KGd1KSxjPXdyLmRvdChndSk7aWYobDw9MCYmYzw9MClyZXR1cm4gZS5jb3B5KGkpO3h1LnN1YlZlY3RvcnModCxyKTtsZXQgdT1fci5kb3QoeHUpLGg9d3IuZG90KHh1KTtpZih1Pj0wJiZoPD11KXJldHVybiBlLmNvcHkocik7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBvPWwvKGwtdSksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKTt5dS5zdWJWZWN0b3JzKHQscyk7bGV0IGQ9X3IuZG90KHl1KSxnPXdyLmRvdCh5dSk7aWYoZz49MCYmZDw9ZylyZXR1cm4gZS5jb3B5KHMpO2xldCB4PWQqYy1sKmc7aWYoeDw9MCYmYz49MCYmZzw9MClyZXR1cm4gYT1jLyhjLWcpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSk7bGV0IHY9dSpnLWQqaDtpZih2PD0wJiZoLXU+PTAmJmQtZz49MClyZXR1cm4gZGcuc3ViVmVjdG9ycyhzLHIpLGE9KGgtdSkvKGgtdSsoZC1nKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihkZyxhKTtsZXQgbT0xLyh2K3grZik7cmV0dXJuIG89eCptLGE9ZiptLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoX3IsbykuYWRkU2NhbGVkVmVjdG9yKHdyLGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LGhNPTAseGU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6aE0rK30pLHRoaXMudXVpZD10bigpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPUtzLHRoaXMuc2lkZT1lbyx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9dTAsdGhpcy5ibGVuZERzdD1oMCx0aGlzLmJsZW5kRXF1YXRpb249SXIsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz16dSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPXRNLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW51LHRoaXMuc3RlbmNpbFpGYWlsPW51LHRoaXMuc3RlbmNpbFpQYXNzPW51LHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYoaT09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKGU9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9aT09PWMwO2NvbnRpbnVlfWxldCByPXRoaXNbZV07aWYocj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIik7Y29udGludWV9ciYmci5pc0NvbG9yP3Iuc2V0KGkpOnImJnIuaXNWZWN0b3IzJiZpJiZpLmlzVmVjdG9yMz9yLmNvcHkoaSk6dGhpc1tlXT1pfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2UmJih0PXt0ZXh0dXJlczp7fSxpbWFnZXM6e319KTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6Ik1hdGVyaWFsIixnZW5lcmF0b3I6Ik1hdGVyaWFsLnRvSlNPTiJ9fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNvbG9yJiZ0aGlzLmNvbG9yLmlzQ29sb3ImJihpLmNvbG9yPXRoaXMuY29sb3IuZ2V0SGV4KCkpLHRoaXMucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dGhpcy5yb3VnaG5lc3MpLHRoaXMubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dGhpcy5tZXRhbG5lc3MpLHRoaXMuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXRoaXMuc2hlZW4pLHRoaXMuc2hlZW5Db2xvciYmdGhpcy5zaGVlbkNvbG9yLmlzQ29sb3ImJihpLnNoZWVuQ29sb3I9dGhpcy5zaGVlbkNvbG9yLmdldEhleCgpKSx0aGlzLnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10aGlzLnNoZWVuUm91Z2huZXNzKSx0aGlzLmVtaXNzaXZlJiZ0aGlzLmVtaXNzaXZlLmlzQ29sb3ImJihpLmVtaXNzaXZlPXRoaXMuZW1pc3NpdmUuZ2V0SGV4KCkpLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJnRoaXMuZW1pc3NpdmVJbnRlbnNpdHkhPT0xJiYoaS5lbWlzc2l2ZUludGVuc2l0eT10aGlzLmVtaXNzaXZlSW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyJiZ0aGlzLnNwZWN1bGFyLmlzQ29sb3ImJihpLnNwZWN1bGFyPXRoaXMuc3BlY3VsYXIuZ2V0SGV4KCkpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHkhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5PXRoaXMuc3BlY3VsYXJJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXJDb2xvciYmdGhpcy5zcGVjdWxhckNvbG9yLmlzQ29sb3ImJihpLnNwZWN1bGFyQ29sb3I9dGhpcy5zcGVjdWxhckNvbG9yLmdldEhleCgpKSx0aGlzLnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXRoaXMuc2hpbmluZXNzKSx0aGlzLmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXRoaXMuY2xlYXJjb2F0KSx0aGlzLmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzKSx0aGlzLmNsZWFyY29hdE1hcCYmdGhpcy5jbGVhcmNvYXRNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRNYXA9dGhpcy5jbGVhcmNvYXRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZ0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD10aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAmJnRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Tm9ybWFsTWFwPXRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9dGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMubWFwJiZ0aGlzLm1hcC5pc1RleHR1cmUmJihpLm1hcD10aGlzLm1hcC50b0pTT04odCkudXVpZCksdGhpcy5tYXRjYXAmJnRoaXMubWF0Y2FwLmlzVGV4dHVyZSYmKGkubWF0Y2FwPXRoaXMubWF0Y2FwLnRvSlNPTih0KS51dWlkKSx0aGlzLmFscGhhTWFwJiZ0aGlzLmFscGhhTWFwLmlzVGV4dHVyZSYmKGkuYWxwaGFNYXA9dGhpcy5hbHBoYU1hcC50b0pTT04odCkudXVpZCksdGhpcy5saWdodE1hcCYmdGhpcy5saWdodE1hcC5pc1RleHR1cmUmJihpLmxpZ2h0TWFwPXRoaXMubGlnaHRNYXAudG9KU09OKHQpLnV1aWQsaS5saWdodE1hcEludGVuc2l0eT10aGlzLmxpZ2h0TWFwSW50ZW5zaXR5KSx0aGlzLmFvTWFwJiZ0aGlzLmFvTWFwLmlzVGV4dHVyZSYmKGkuYW9NYXA9dGhpcy5hb01hcC50b0pTT04odCkudXVpZCxpLmFvTWFwSW50ZW5zaXR5PXRoaXMuYW9NYXBJbnRlbnNpdHkpLHRoaXMuYnVtcE1hcCYmdGhpcy5idW1wTWFwLmlzVGV4dHVyZSYmKGkuYnVtcE1hcD10aGlzLmJ1bXBNYXAudG9KU09OKHQpLnV1aWQsaS5idW1wU2NhbGU9dGhpcy5idW1wU2NhbGUpLHRoaXMubm9ybWFsTWFwJiZ0aGlzLm5vcm1hbE1hcC5pc1RleHR1cmUmJihpLm5vcm1hbE1hcD10aGlzLm5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLm5vcm1hbE1hcFR5cGU9dGhpcy5ub3JtYWxNYXBUeXBlLGkubm9ybWFsU2NhbGU9dGhpcy5ub3JtYWxTY2FsZS50b0FycmF5KCkpLHRoaXMuZGlzcGxhY2VtZW50TWFwJiZ0aGlzLmRpc3BsYWNlbWVudE1hcC5pc1RleHR1cmUmJihpLmRpc3BsYWNlbWVudE1hcD10aGlzLmRpc3BsYWNlbWVudE1hcC50b0pTT04odCkudXVpZCxpLmRpc3BsYWNlbWVudFNjYWxlPXRoaXMuZGlzcGxhY2VtZW50U2NhbGUsaS5kaXNwbGFjZW1lbnRCaWFzPXRoaXMuZGlzcGxhY2VtZW50QmlhcyksdGhpcy5yb3VnaG5lc3NNYXAmJnRoaXMucm91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkucm91Z2huZXNzTWFwPXRoaXMucm91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1ldGFsbmVzc01hcCYmdGhpcy5tZXRhbG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5tZXRhbG5lc3NNYXA9dGhpcy5tZXRhbG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW1pc3NpdmVNYXAmJnRoaXMuZW1pc3NpdmVNYXAuaXNUZXh0dXJlJiYoaS5lbWlzc2l2ZU1hcD10aGlzLmVtaXNzaXZlTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyTWFwJiZ0aGlzLnNwZWN1bGFyTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJNYXA9dGhpcy5zcGVjdWxhck1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcCYmdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPXRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJDb2xvck1hcCYmdGhpcy5zcGVjdWxhckNvbG9yTWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJDb2xvck1hcD10aGlzLnNwZWN1bGFyQ29sb3JNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuZW52TWFwJiZ0aGlzLmVudk1hcC5pc1RleHR1cmUmJihpLmVudk1hcD10aGlzLmVudk1hcC50b0pTT04odCkudXVpZCx0aGlzLmNvbWJpbmUhPT12b2lkIDAmJihpLmNvbWJpbmU9dGhpcy5jb21iaW5lKSksdGhpcy5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10aGlzLmVudk1hcEludGVuc2l0eSksdGhpcy5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10aGlzLnJlZmxlY3Rpdml0eSksdGhpcy5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10aGlzLnJlZnJhY3Rpb25SYXRpbyksdGhpcy5ncmFkaWVudE1hcCYmdGhpcy5ncmFkaWVudE1hcC5pc1RleHR1cmUmJihpLmdyYWRpZW50TWFwPXRoaXMuZ3JhZGllbnRNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dGhpcy50cmFuc21pc3Npb24pLHRoaXMudHJhbnNtaXNzaW9uTWFwJiZ0aGlzLnRyYW5zbWlzc2lvbk1hcC5pc1RleHR1cmUmJihpLnRyYW5zbWlzc2lvbk1hcD10aGlzLnRyYW5zbWlzc2lvbk1hcC50b0pTT04odCkudXVpZCksdGhpcy50aGlja25lc3MhPT12b2lkIDAmJihpLnRoaWNrbmVzcz10aGlzLnRoaWNrbmVzcyksdGhpcy50aGlja25lc3NNYXAmJnRoaXMudGhpY2tuZXNzTWFwLmlzVGV4dHVyZSYmKGkudGhpY2tuZXNzTWFwPXRoaXMudGhpY2tuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0aGlzLmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uQ29sb3I9dGhpcy5hdHRlbnVhdGlvbkNvbG9yLmdldEhleCgpKSx0aGlzLnNpemUhPT12b2lkIDAmJihpLnNpemU9dGhpcy5zaXplKSx0aGlzLnNoYWRvd1NpZGUhPT1udWxsJiYoaS5zaGFkb3dTaWRlPXRoaXMuc2hhZG93U2lkZSksdGhpcy5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10aGlzLnNpemVBdHRlbnVhdGlvbiksdGhpcy5ibGVuZGluZyE9PUtzJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSx0aGlzLnNpZGUhPT1lbyYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksdGhpcy50cmFuc3BhcmVudD09PSEwJiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiZ0aGlzLnJvdGF0aW9uIT09MCYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksdGhpcy5wb2x5Z29uT2Zmc2V0PT09ITAmJihpLnBvbHlnb25PZmZzZXQ9ITApLHRoaXMucG9seWdvbk9mZnNldEZhY3RvciE9PTAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0aGlzLnBvbHlnb25PZmZzZXRVbml0cyE9PTAmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJnRoaXMubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx0aGlzLmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx0aGlzLmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx0aGlzLnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10aGlzLnNjYWxlKSx0aGlzLmRpdGhlcmluZz09PSEwJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksdGhpcy5hbHBoYVRvQ292ZXJhZ2U9PT0hMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT09PSEwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLHRoaXMud2lyZWZyYW1lPT09ITAmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSx0aGlzLndpcmVmcmFtZUxpbmVjYXAhPT0icm91bmQiJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksdGhpcy53aXJlZnJhbWVMaW5lam9pbiE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLHRoaXMuZmxhdFNoYWRpbmc9PT0hMCYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMudG9uZU1hcHBlZD09PSExJiYoaS50b25lTWFwcGVkPSExKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpO2Z1bmN0aW9uIHIocyl7bGV0IG89W107Zm9yKGxldCBhIGluIHMpe2xldCBsPXNbYV07ZGVsZXRlIGwubWV0YWRhdGEsby5wdXNoKGwpfXJldHVybiBvfWlmKGUpe2xldCBzPXIodC50ZXh0dXJlcyksbz1yKHQuaW1hZ2VzKTtzLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1zKSxvLmxlbmd0aD4wJiYoaS5pbWFnZXM9byl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5uYW1lPXQubmFtZSx0aGlzLmZvZz10LmZvZyx0aGlzLmJsZW5kaW5nPXQuYmxlbmRpbmcsdGhpcy5zaWRlPXQuc2lkZSx0aGlzLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyx0aGlzLm9wYWNpdHk9dC5vcGFjaXR5LHRoaXMudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCx0aGlzLmJsZW5kU3JjPXQuYmxlbmRTcmMsdGhpcy5ibGVuZERzdD10LmJsZW5kRHN0LHRoaXMuYmxlbmRFcXVhdGlvbj10LmJsZW5kRXF1YXRpb24sdGhpcy5ibGVuZFNyY0FscGhhPXQuYmxlbmRTcmNBbHBoYSx0aGlzLmJsZW5kRHN0QWxwaGE9dC5ibGVuZERzdEFscGhhLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPXQuYmxlbmRFcXVhdGlvbkFscGhhLHRoaXMuZGVwdGhGdW5jPXQuZGVwdGhGdW5jLHRoaXMuZGVwdGhUZXN0PXQuZGVwdGhUZXN0LHRoaXMuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayx0aGlzLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMsdGhpcy5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZix0aGlzLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayx0aGlzLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwsdGhpcy5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwsdGhpcy5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MsdGhpcy5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGU7bGV0IGU9dC5jbGlwcGluZ1BsYW5lcyxpPW51bGw7aWYoZSE9PW51bGwpe2xldCByPWUubGVuZ3RoO2k9bmV3IEFycmF5KHIpO2ZvcihsZXQgcz0wO3MhPT1yOysrcylpW3NdPWVbc10uY2xvbmUoKX1yZXR1cm4gdGhpcy5jbGlwcGluZ1BsYW5lcz1pLHRoaXMuY2xpcEludGVyc2VjdGlvbj10LmNsaXBJbnRlcnNlY3Rpb24sdGhpcy5jbGlwU2hhZG93cz10LmNsaXBTaGFkb3dzLHRoaXMuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUsdGhpcy5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSx0aGlzLmFscGhhV3JpdGU9dC5hbHBoYVdyaXRlLHRoaXMucHJlY2lzaW9uPXQucHJlY2lzaW9uLHRoaXMucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPXQucG9seWdvbk9mZnNldEZhY3Rvcix0aGlzLnBvbHlnb25PZmZzZXRVbml0cz10LnBvbHlnb25PZmZzZXRVbml0cyx0aGlzLmRpdGhlcmluZz10LmRpdGhlcmluZyx0aGlzLmFscGhhVGVzdD10LmFscGhhVGVzdCx0aGlzLmFscGhhVG9Db3ZlcmFnZT10LmFscGhhVG9Db3ZlcmFnZSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT10LnByZW11bHRpcGxpZWRBbHBoYSx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt4ZS5wcm90b3R5cGUuaXNNYXRlcmlhbD0hMDt2YXIga2k9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaEJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2tpLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBKdD1uZXcgVCxBYT1uZXcgSyxRdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9lOjAsdGhpcy5ub3JtYWxpemVkPWk9PT0hMCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5pdGVtU2l6ZSxpKj1lLml0ZW1TaXplO2ZvcihsZXQgcj0wLHM9dGhpcy5pdGVtU2l6ZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IGZ0KSxlW2krK109by5yLGVbaSsrXT1vLmcsZVtpKytdPW8uYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IEspLGVbaSsrXT1vLngsZVtpKytdPW8ueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2xldCBvPXRbcl07bz09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLG89bmV3IFQpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgV3QpLGVbaSsrXT1vLngsZVtpKytdPW8ueSxlW2krK109by56LGVbaSsrXT1vLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUFhLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxBYS5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLEFhLngsQWEueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSnQuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPXMsdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1pbyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1F0LnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgcmw9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fTt2YXIgc2w9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQzMkFycmF5KHQpLGUsaSl9fSxXdT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O1d1LnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGVlPWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19O3ZhciBmTT0wLHFlPW5ldyB3dCx2dT1uZXcga3QsTXI9bmV3IFQsSGU9bmV3IEdlLFZzPW5ldyBHZSxnZT1uZXcgVCxIdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpmTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KHAwKHQpP3NsOnJsKSh0LDEpOnRoaXMuaW5kZXg9dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdIT09dm9pZCAwfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO2UhPT12b2lkIDAmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKGkhPT12b2lkIDApe2xldCBzPW5ldyBkZSgpLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KHMpLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHIhPT12b2lkIDAmJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSx0aGlzLmJvdW5kaW5nQm94IT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nU3BoZXJlIT09bnVsbCYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVZKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHFlLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9bG9va0F0KHQpe3JldHVybiB2dS5sb29rQXQodCksdnUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQodnUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKE1yKS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShNci54LE1yLnksTXIueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dFtpXTtlLnB1c2gocy54LHMueSxzLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe3RoaXMuYm91bmRpbmdCb3g9PT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1uZXcgR2UpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdCb3guc2V0KG5ldyBUKC0xLzAsLTEvMCwtMS8wKSxuZXcgVCgxLzAsMS8wLDEvMCkpO3JldHVybn1pZih0IT09dm9pZCAwKXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspe2xldCBzPWVbaV07SGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShzKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSxnZS5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LEhlLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KGdlKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChIZS5tYXgpKX19ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe3RoaXMuYm91bmRpbmdTcGhlcmU9PT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgc2kpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7Y29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHRoaXMuYm91bmRpbmdTcGhlcmUuc2V0KG5ldyBULDEvMCk7cmV0dXJufWlmKHQpe2xldCBpPXRoaXMuYm91bmRpbmdTcGhlcmUuY2VudGVyO2lmKEhlLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKyspe2xldCBhPWVbc107VnMuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShhKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhnZS5hZGRWZWN0b3JzKEhlLm1pbixWcy5taW4pLEhlLmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnMoSGUubWF4LFZzLm1heCksSGUuZXhwYW5kQnlQb2ludChnZSkpOihIZS5leHBhbmRCeVBvaW50KFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChWcy5tYXgpKX1IZS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQuY291bnQ7czxvO3MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQscykscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKTtpZihlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXSxsPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7Zm9yKGxldCBjPTAsdT1hLmNvdW50O2M8dTtjKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLGwmJihNci5mcm9tQnVmZmVyQXR0cmlidXRlKHQsYyksZ2UuYWRkKE1yKSkscj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQoZ2UpKX10aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cz1NYXRoLnNxcnQociksaXNOYU4odGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXMpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogQ29tcHV0ZWQgcmFkaXVzIGlzIE5hTi4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX19Y29tcHV0ZVRhbmdlbnRzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuYXR0cmlidXRlcztpZih0PT09bnVsbHx8ZS5wb3NpdGlvbj09PXZvaWQgMHx8ZS5ub3JtYWw9PT12b2lkIDB8fGUudXY9PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO3JldHVybn1sZXQgaT10LmFycmF5LHI9ZS5wb3NpdGlvbi5hcnJheSxzPWUubm9ybWFsLmFycmF5LG89ZS51di5hcnJheSxhPXIubGVuZ3RoLzM7ZS50YW5nZW50PT09dm9pZCAwJiZ0aGlzLnNldEF0dHJpYnV0ZSgidGFuZ2VudCIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoNCphKSw0KSk7bGV0IGw9ZS50YW5nZW50LmFycmF5LGM9W10sdT1bXTtmb3IobGV0IFg9MDtYPGE7WCsrKWNbWF09bmV3IFQsdVtYXT1uZXcgVDtsZXQgaD1uZXcgVCxmPW5ldyBULGQ9bmV3IFQsZz1uZXcgSyx4PW5ldyBLLHY9bmV3IEssbT1uZXcgVCxwPW5ldyBUO2Z1bmN0aW9uIGIoWCx5LFIpe2guZnJvbUFycmF5KHIsWCozKSxmLmZyb21BcnJheShyLHkqMyksZC5mcm9tQXJyYXkocixSKjMpLGcuZnJvbUFycmF5KG8sWCoyKSx4LmZyb21BcnJheShvLHkqMiksdi5mcm9tQXJyYXkobyxSKjIpLGYuc3ViKGgpLGQuc3ViKGgpLHguc3ViKGcpLHYuc3ViKGcpO2xldCBEPTEvKHgueCp2Lnktdi54KngueSk7IWlzRmluaXRlKEQpfHwobS5jb3B5KGYpLm11bHRpcGx5U2NhbGFyKHYueSkuYWRkU2NhbGVkVmVjdG9yKGQsLXgueSkubXVsdGlwbHlTY2FsYXIoRCkscC5jb3B5KGQpLm11bHRpcGx5U2NhbGFyKHgueCkuYWRkU2NhbGVkVmVjdG9yKGYsLXYueCkubXVsdGlwbHlTY2FsYXIoRCksY1tYXS5hZGQobSksY1t5XS5hZGQobSksY1tSXS5hZGQobSksdVtYXS5hZGQocCksdVt5XS5hZGQocCksdVtSXS5hZGQocCkpfWxldCBfPXRoaXMuZ3JvdXBzO18ubGVuZ3RoPT09MCYmKF89W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKWIoaVt6KzBdLGlbeisxXSxpW3orMl0pfWxldCBTPW5ldyBULEw9bmV3IFQsQT1uZXcgVCxIPW5ldyBUO2Z1bmN0aW9uIHR0KFgpe0EuZnJvbUFycmF5KHMsWCozKSxILmNvcHkoQSk7bGV0IHk9Y1tYXTtTLmNvcHkoeSksUy5zdWIoQS5tdWx0aXBseVNjYWxhcihBLmRvdCh5KSkpLm5vcm1hbGl6ZSgpLEwuY3Jvc3NWZWN0b3JzKEgseSk7bGV0IEQ9TC5kb3QodVtYXSk8MD8tMToxO2xbWCo0XT1TLngsbFtYKjQrMV09Uy55LGxbWCo0KzJdPVMueixsW1gqNCszXT1EfWZvcihsZXQgWD0wLHk9Xy5sZW5ndGg7WDx5OysrWCl7bGV0IFI9X1tYXSxEPVIuc3RhcnQsRj1SLmNvdW50O2ZvcihsZXQgej1ELE49RCtGO3o8Tjt6Kz0zKXR0KGlbeiswXSksdHQoaVt6KzFdKSx0dChpW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihlIT09dm9pZCAwKXtsZXQgaT10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYoaT09PXZvaWQgMClpPW5ldyBRdChuZXcgRmxvYXQzMkFycmF5KGUuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsaSk7ZWxzZSBmb3IobGV0IGY9MCxkPWkuY291bnQ7ZjxkO2YrKylpLnNldFhZWihmLDAsMCwwKTtsZXQgcj1uZXcgVCxzPW5ldyBULG89bmV3IFQsYT1uZXcgVCxsPW5ldyBULGM9bmV3IFQsdT1uZXcgVCxoPW5ldyBUO2lmKHQpZm9yKGxldCBmPTAsZD10LmNvdW50O2Y8ZDtmKz0zKXtsZXQgZz10LmdldFgoZiswKSx4PXQuZ2V0WChmKzEpLHY9dC5nZXRYKGYrMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZykscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdiksdS5zdWJWZWN0b3JzKG8scyksaC5zdWJWZWN0b3JzKHIscyksdS5jcm9zcyhoKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxnKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx2KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihnLGEueCxhLnksYS56KSxpLnNldFhZWih4LGwueCxsLnksbC56KSxpLnNldFhZWih2LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLGQ9ZS5jb3VudDtmPGQ7Zis9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzApLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisyKSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGkuc2V0WFlaKGYrMCx1LngsdS55LHUueiksaS5zZXRYWVooZisxLHUueCx1LnksdS56KSxpLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59ZT09PXZvaWQgMCYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHQuYXR0cmlidXRlc1tyXT09PXZvaWQgMCljb250aW51ZTtsZXQgbz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLG8ubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylvW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspZ2UuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLGdlLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUsZ2UueCxnZS55LGdlLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxoPWEubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGQ9MCxnPTA7Zm9yKGxldCB4PTAsdj1sLmxlbmd0aDt4PHY7eCsrKXthLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/ZD1sW3hdKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6ZD1sW3hdKnU7Zm9yKGxldCBtPTA7bTx1O20rKylmW2crK109Y1tkKytdfXJldHVybiBuZXcgUXQoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IGU9bmV3IEh0LGk9dGhpcy5pbmRleC5hcnJheSxyPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGEgaW4gcil7bGV0IGw9clthXSxjPXQobCxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBzPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBzKXtsZXQgbD1bXSxjPXNbYV07Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLGQ9dChmLGkpO2wucHVzaChkKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPW8ubGVuZ3RoO2E8bDthKyspe2xldCBjPW9bYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O2UhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl7bGV0IGM9aVtsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCByPXt9LHM9ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9Y1toXTt1LnB1c2goZC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKHJbbF09dSxzPSEwKX1zJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgbz10aGlzLmdyb3VwcztvLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG8pKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gYSE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IGU9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgaT10LmluZGV4O2khPT1udWxsJiZ0aGlzLnNldEluZGV4KGkuY2xvbmUoZSkpO2xldCByPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gcil7bGV0IHU9cltjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUoZSkpfWxldCBzPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1bXSxoPXNbY107Zm9yKGxldCBmPTAsZD1oLmxlbmd0aDtmPGQ7ZisrKXUucHVzaChoW2ZdLmNsb25lKGUpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgbz10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PW8ubGVuZ3RoO2M8dTtjKyspe2xldCBoPW9bY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgYT10LmJvdW5kaW5nQm94O2EhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1hLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtIdC5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgcGc9bmV3IHd0LGJyPW5ldyBvaSxfdT1uZXcgc2ksSm49bmV3IFQsJG49bmV3IFQsS249bmV3IFQsd3U9bmV3IFQsTXU9bmV3IFQsYnU9bmV3IFQsQ2E9bmV3IFQsUmE9bmV3IFQsTGE9bmV3IFQsUGE9bmV3IEssRGE9bmV3IEssSWE9bmV3IEssU3U9bmV3IFQsTmE9bmV3IFQsb2U9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0PW5ldyBIdCxlPW5ldyBraSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYociE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXtsZXQgYT1yW3NdLm5hbWV8fFN0cmluZyhzKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPXN9fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0cztlIT09dm9pZCAwJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxzPXRoaXMubWF0cml4V29ybGQ7aWYocj09PXZvaWQgMHx8KGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLF91LmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksX3UuYXBwbHlNYXRyaXg0KHMpLHQucmF5LmludGVyc2VjdHNTcGhlcmUoX3UpPT09ITEpfHwocGcuY29weShzKS5pbnZlcnQoKSxici5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQocGcpLGkuYm91bmRpbmdCb3ghPT1udWxsJiZici5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgbztpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1pLmF0dHJpYnV0ZXMudXYsZj1pLmF0dHJpYnV0ZXMudXYyLGQ9aS5ncm91cHMsZz1pLmRyYXdSYW5nZTtpZihhIT09bnVsbClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPWEuZ2V0WChTKSxIPWEuZ2V0WChTKzEpLHR0PWEuZ2V0WChTKzIpO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4oYS5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9YS5nZXRYKG0pLF89YS5nZXRYKG0rMSksUz1hLmdldFgobSsyKTtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IHg9MCx2PWQubGVuZ3RoO3g8djt4Kyspe2xldCBtPWRbeF0scD1yW20ubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heChtLnN0YXJ0LGcuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbihtLnN0YXJ0K20uY291bnQsZy5zdGFydCtnLmNvdW50KSk7Zm9yKGxldCBTPWIsTD1fO1M8TDtTKz0zKXtsZXQgQT1TLEg9UysxLHR0PVMrMjtvPUZhKHRoaXMscCx0LGJyLGwsYyx1LGgsZixBLEgsdHQpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKFMvMyksby5mYWNlLm1hdGVyaWFsSW5kZXg9bS5tYXRlcmlhbEluZGV4LGUucHVzaChvKSl9fWVsc2V7bGV0IHg9TWF0aC5tYXgoMCxnLnN0YXJ0KSx2PU1hdGgubWluKGwuY291bnQsZy5zdGFydCtnLmNvdW50KTtmb3IobGV0IG09eCxwPXY7bTxwO20rPTMpe2xldCBiPW0sXz1tKzEsUz1tKzI7bz1GYSh0aGlzLHIsdCxicixsLGMsdSxoLGYsYixfLFMpLG8mJihvLmZhY2VJbmRleD1NYXRoLmZsb29yKG0vMyksZS5wdXNoKG8pKX19fWVsc2UgaS5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX07b2UucHJvdG90eXBlLmlzTWVzaD0hMDtmdW5jdGlvbiBkTShuLHQsZSxpLHIscyxvLGEpe2xldCBsO2lmKHQuc2lkZT09PWhlP2w9aS5pbnRlcnNlY3RUcmlhbmdsZShvLHMsciwhMCxhKTpsPWkuaW50ZXJzZWN0VHJpYW5nbGUocixzLG8sdC5zaWRlIT09SHIsYSksbD09PW51bGwpcmV0dXJuIG51bGw7TmEuY29weShhKSxOYS5hcHBseU1hdHJpeDQobi5tYXRyaXhXb3JsZCk7bGV0IGM9ZS5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTmEpO3JldHVybiBjPGUubmVhcnx8Yz5lLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50Ok5hLmNsb25lKCksb2JqZWN0Om59fWZ1bmN0aW9uIEZhKG4sdCxlLGkscixzLG8sYSxsLGMsdSxoKXtKbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksJG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLEtuLmZyb21CdWZmZXJBdHRyaWJ1dGUocixoKTtsZXQgZj1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihzJiZmKXtDYS5zZXQoMCwwLDApLFJhLnNldCgwLDAsMCksTGEuc2V0KDAsMCwwKTtmb3IobGV0IGc9MCx4PXMubGVuZ3RoO2c8eDtnKyspe2xldCB2PWZbZ10sbT1zW2ddO3YhPT0wJiYod3UuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLGMpLE11LmZyb21CdWZmZXJBdHRyaWJ1dGUobSx1KSxidS5mcm9tQnVmZmVyQXR0cmlidXRlKG0saCksbz8oQ2EuYWRkU2NhbGVkVmVjdG9yKHd1LHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUsdikpOihDYS5hZGRTY2FsZWRWZWN0b3Iod3Uuc3ViKEpuKSx2KSxSYS5hZGRTY2FsZWRWZWN0b3IoTXUuc3ViKCRuKSx2KSxMYS5hZGRTY2FsZWRWZWN0b3IoYnUuc3ViKEtuKSx2KSkpfUpuLmFkZChDYSksJG4uYWRkKFJhKSxLbi5hZGQoTGEpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLEpuKSxuLmJvbmVUcmFuc2Zvcm0odSwkbiksbi5ib25lVHJhbnNmb3JtKGgsS24pKTtsZXQgZD1kTShuLHQsZSxpLEpuLCRuLEtuLFN1KTtpZihkKXthJiYoUGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLGMpLERhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxJYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCksZC51dj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpLGwmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxkLnV2Mj1yZS5nZXRVVihTdSxKbiwkbixLbixQYSxEYSxJYSxuZXcgSykpO2xldCBnPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IFQsbWF0ZXJpYWxJbmRleDowfTtyZS5nZXROb3JtYWwoSm4sJG4sS24sZy5ub3JtYWwpLGQuZmFjZT1nfXJldHVybiBkfXZhciBIaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxzPTEsbz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpzLGRlcHRoU2VnbWVudHM6b307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iocikscz1NYXRoLmZsb29yKHMpLG89TWF0aC5mbG9vcihvKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAsZD0wO2coInoiLCJ5IiwieCIsLTEsLTEsaSxlLHQsbyxzLDApLGcoInoiLCJ5IiwieCIsMSwtMSxpLGUsLXQsbyxzLDEpLGcoIngiLCJ6IiwieSIsMSwxLHQsaSxlLHIsbywyKSxnKCJ4IiwieiIsInkiLDEsLTEsdCxpLC1lLHIsbywzKSxnKCJ4IiwieSIsInoiLDEsLTEsdCxlLGkscixzLDQpLGcoIngiLCJ5IiwieiIsLTEsLTEsdCxlLC1pLHIscyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShoLDIpKTtmdW5jdGlvbiBnKHgsdixtLHAsYixfLFMsTCxBLEgsdHQpe2xldCBYPV8vQSx5PVMvSCxSPV8vMixEPVMvMixGPUwvMix6PUErMSxOPUgrMSxWPTAsUT0wLGF0PW5ldyBUO2ZvcihsZXQgRz0wO0c8TjtHKyspe2xldCAkPUcqeS1EO2ZvcihsZXQgbHQ9MDtsdDx6O2x0Kyspe2xldCBkdD1sdCpYLVI7YXRbeF09ZHQqcCxhdFt2XT0kKmIsYXRbbV09RixjLnB1c2goYXQueCxhdC55LGF0LnopLGF0W3hdPTAsYXRbdl09MCxhdFttXT1MPjA/MTotMSx1LnB1c2goYXQueCxhdC55LGF0LnopLGgucHVzaChsdC9BKSxoLnB1c2goMS1HL0gpLFYrPTF9fWZvcihsZXQgRz0wO0c8SDtHKyspZm9yKGxldCAkPTA7JDxBOyQrKyl7bGV0IGx0PWYrJCt6KkcsZHQ9ZiskK3oqKEcrMSkseHQ9ZisoJCsxKSt6KihHKzEpLGs9ZisoJCsxKSt6Kkc7bC5wdXNoKGx0LGR0LGspLGwucHVzaChkdCx4dCxrKSxRKz02fWEuYWRkR3JvdXAoZCxRLHR0KSxkKz1RLGYrPVZ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEhpKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gR3Iobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07ciYmKHIuaXNDb2xvcnx8ci5pc01hdHJpeDN8fHIuaXNNYXRyaXg0fHxyLmlzVmVjdG9yMnx8ci5pc1ZlY3RvcjN8fHIuaXNWZWN0b3I0fHxyLmlzVGV4dHVyZXx8ci5pc1F1YXRlcm5pb24pP3RbZV1baV09ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/dFtlXVtpXT1yLnNsaWNlKCk6dFtlXVtpXT1yfX1yZXR1cm4gdH1mdW5jdGlvbiBNZShuKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9R3IobltlXSk7Zm9yKGxldCByIGluIGkpdFtyXT1pW3JdfXJldHVybiB0fXZhciBwTT17Y2xvbmU6R3IsbWVyZ2U6TWV9LG1NPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLGdNPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsRm49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPW1NLHRoaXMuZnJhZ21lbnRTaGFkZXI9Z00sdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9R3IodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgbz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO28mJm8uaXNUZXh0dXJlP2UudW5pZm9ybXNbcl09e3R5cGU6InQiLHZhbHVlOm8udG9KU09OKHQpLnV1aWR9Om8mJm8uaXNDb2xvcj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJjIix2YWx1ZTpvLmdldEhleCgpfTpvJiZvLmlzVmVjdG9yMj9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2MiIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNWZWN0b3IzP2UudW5pZm9ybXNbcl09e3R5cGU6InYzIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjQ/ZS51bmlmb3Jtc1tyXT17dHlwZToidjQiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzTWF0cml4Mz9lLnVuaWZvcm1zW3JdPXt0eXBlOiJtMyIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXg0P2UudW5pZm9ybXNbcl09e3R5cGU6Im00Iix2YWx1ZTpvLnRvQXJyYXkoKX06ZS51bmlmb3Jtc1tyXT17dmFsdWU6b319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tyXT09PSEwJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtGbi5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgb289Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyB3dCx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O29vLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgU2U9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1WdSoyKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKGl1Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gVnUqMipNYXRoLmF0YW4oTWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy5hc3BlY3Q9dC9lLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1lLHRoaXMudmlldy5vZmZzZXRYPWksdGhpcy52aWV3Lm9mZnNldFk9cix0aGlzLnZpZXcud2lkdGg9cyx0aGlzLnZpZXcuaGVpZ2h0PW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLGU9dCpNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tLGk9MiplLHI9dGhpcy5hc3BlY3QqaSxzPS0uNSpyLG89dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1vLmZ1bGxXaWR0aCxjPW8uZnVsbEhlaWdodDtzKz1vLm9mZnNldFgqci9sLGUtPW8ub2Zmc2V0WSppL2Mscio9by53aWR0aC9sLGkqPW8uaGVpZ2h0L2N9bGV0IGE9dGhpcy5maWxtT2Zmc2V0O2EhPT0wJiYocys9dCphL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUocyxzK3IsZSxlLWksdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuZm92PXRoaXMuZm92LGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcixlLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLGUub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGUub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxlLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxlfX07U2UucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFNyPTkwLEVyPTEsYW89Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLGkuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFNlKFNyLEVyLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgVCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBzPW5ldyBTZShTcixFcix0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsLTEsMCkscy5sb29rQXQobmV3IFQoLTEsMCwwKSksdGhpcy5hZGQocyk7bGV0IG89bmV3IFNlKFNyLEVyLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwwLDEpLG8ubG9va0F0KG5ldyBUKDAsMSwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFNlKFNyLEVyLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgVCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgU2UoU3IsRXIsdCxlKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBUKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFNlKFNyLEVyLHQsZSk7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgVCgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixzLG8sYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxzKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sV3I9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxlPWUhPT12b2lkIDA/ZTpBbyxzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O1dyLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBvbD1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSxlPWV8fHt9LHRoaXMudGV4dHVyZT1uZXcgV3Iodm9pZCAwLGUubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ZS5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlciE9PXZvaWQgMD9lLm1pbkZpbHRlcjpiZX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LGUpe3RoaXMudGV4dHVyZS50eXBlPWUudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVJlLHRoaXMudGV4dHVyZS5lbmNvZGluZz1lLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1lLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUubWFnRmlsdGVyO2xldCBpPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LHI9bmV3IEhpKDUsNSw1KSxzPW5ldyBGbih7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6R3IoaS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmkudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmkuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxibGVuZGluZzpqbn0pO3MudW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IG89bmV3IG9lKHIscyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gZS5taW5GaWx0ZXI9PT1MbCYmKGUubWluRmlsdGVyPWJlKSxuZXcgYW8oMSwxMCx0aGlzKS51cGRhdGUodCxvKSxlLm1pbkZpbHRlcj1hLG8uZ2VvbWV0cnkuZGlzcG9zZSgpLG8ubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IHM9dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IG89MDtvPDY7bysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsbyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQocyl9fTtvbC5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIEV1PW5ldyBULHhNPW5ldyBULHlNPW5ldyBkZSxqZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBUKDEsMCwwKSxlPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9ZSx0aGlzfXNldENvbXBvbmVudHModCxlLGkscil7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LGUsaSksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1lLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxlLGkpe2xldCByPUV1LnN1YlZlY3RvcnMoaSxlKS5jcm9zcyh4TS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoRXUpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKHI9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IHM9LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gczwwfHxzPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIocykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8eU0uZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEV1KS5hcHBseU1hdHJpeDQodCkscz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KHMpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2plLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciBUcj1uZXcgc2ksemE9bmV3IFQscXI9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgamUsZT1uZXcgamUsaT1uZXcgamUscj1uZXcgamUscz1uZXcgamUsbz1uZXcgamUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLHMsb119c2V0KHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShzKSxhWzVdLmNvcHkobyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLHM9aVsxXSxvPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGg9aVs3XSxmPWlbOF0sZD1pWzldLGc9aVsxMF0seD1pWzExXSx2PWlbMTJdLG09aVsxM10scD1pWzE0XSxiPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGgtbCx4LWYsYi12KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGgrbCx4K2YsYit2KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStzLGgrYyx4K2QsYittKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1zLGgtYyx4LWQsYi1tKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1vLGgtdSx4LWcsYi1wKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStvLGgrdSx4K2csYitwKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gZS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksVHIuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBUci5jZW50ZXIuc2V0KDAsMCwwKSxUci5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsVHIuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShUcil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgcz0wO3M8NjtzKyspaWYoZVtzXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoemEueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LHphLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSx6YS56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoemEpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07ZnVuY3Rpb24gZzAoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKHMsbyl7ZShzLG8pLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZlIT09bnVsbCYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24ocyl7ZT1zfSxzZXRDb250ZXh0OmZ1bmN0aW9uKHMpe249c319fWZ1bmN0aW9uIHZNKG4sdCl7bGV0IGU9dC5pc1dlYkdMMixpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxkPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsZCksbi5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZz01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2c9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9nPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmc9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9nPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2c9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9nPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9nPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZz01MTIxKSx7YnVmZmVyOmQsdHlwZTpnLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBzKGMsdSxoKXtsZXQgZj11LmFycmF5LGQ9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoaCxjKSxkLmNvdW50PT09LTE/bi5idWZmZXJTdWJEYXRhKGgsMCxmKTooZT9uLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYsZC5vZmZzZXQsZC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGgsZC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KGQub2Zmc2V0LGQub2Zmc2V0K2QuY291bnQpKSxkLmNvdW50PS0xKX1mdW5jdGlvbiBvKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9ZnVuY3Rpb24gYShjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9aS5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1pLmdldChjKTtoPT09dm9pZCAwP2kuc2V0KGMscihjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYocyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6byxyZW1vdmU6YSx1cGRhdGU6bH19dmFyIGxvPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpyfTtsZXQgcz10LzIsbz1lLzIsYT1NYXRoLmZsb29yKGkpLGw9TWF0aC5mbG9vcihyKSxjPWErMSx1PWwrMSxoPXQvYSxmPWUvbCxkPVtdLGc9W10seD1bXSx2PVtdO2ZvcihsZXQgbT0wO208dTttKyspe2xldCBwPW0qZi1vO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBfPWIqaC1zO2cucHVzaChfLC1wLDApLHgucHVzaCgwLDAsMSksdi5wdXNoKGIvYSksdi5wdXNoKDEtbS9sKX19Zm9yKGxldCBtPTA7bTxsO20rKylmb3IobGV0IHA9MDtwPGE7cCsrKXtsZXQgYj1wK2MqbSxfPXArYyoobSsxKSxTPXArMStjKihtKzEpLEw9cCsxK2MqbTtkLnB1c2goYixfLEwpLGQucHVzaChfLFMsTCl9dGhpcy5zZXRJbmRleChkKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShnLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoeCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUodiwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgbG8odC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfTT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdlV2ICkuZzsKI2VuZGlmYCx3TT1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsTU09YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCxiTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCXVuaWZvcm0gZmxvYXQgYWxwaGFUZXN0OwojZW5kaWZgLFNNPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsRU09YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxUTT0idmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMoIHBvc2l0aW9uICk7IixBTT1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLENNPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxSTT1gI2lmZGVmIFVTRV9CVU1QTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBidW1wTWFwOwoJdW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7Cgl2ZWMyIGRIZHh5X2Z3ZCgpIHsKCQl2ZWMyIGRTVGR4ID0gZEZkeCggdlV2ICk7CgkJdmVjMiBkU1RkeSA9IGRGZHkoIHZVdiApOwoJCWZsb2F0IEhsbCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICkueDsKCQlmbG9hdCBkQnggPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR4ICkueCAtIEhsbDsKCQlmbG9hdCBkQnkgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiArIGRTVGR5ICkueCAtIEhsbDsKCQlyZXR1cm4gdmVjMiggZEJ4LCBkQnkgKTsKCX0KCXZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZOID0gc3VyZl9ub3JtOwoJCXZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTsKCQl2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7CgkJZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247CgkJdmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApOwoJfQojZW5kaWZgLExNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsUE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxETT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKI2VuZGlmYCxJTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxOTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsRk09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCXZhcnlpbmcgdmVjMyB2Q29sb3I7CiNlbmRpZmAsek09YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxVTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsQk09YCNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMKI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODYKI2RlZmluZSBQSV9IQUxGIDEuNTcwNzk2MzI2Nzk0ODk2NgojZGVmaW5lIFJFQ0lQUk9DQUxfUEkgMC4zMTgzMDk4ODYxODM3OTA3CiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNQojZGVmaW5lIEVQU0lMT04gMWUtNgojaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKI2RlZmluZSB3aGl0ZUNvbXBsZW1lbnQoIGEgKSAoIDEuMCAtIHNhdHVyYXRlKCBhICkgKQpmbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9CmZsb2F0IHBvdzMoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4KngqeDsgfQpmbG9hdCBwb3c0KCBjb25zdCBpbiBmbG9hdCB4ICkgeyBmbG9hdCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9CmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfQpmbG9hdCBhdmVyYWdlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgeyByZXR1cm4gZG90KCBjb2xvciwgdmVjMyggMC4zMzMzICkgKTsgfQpoaWdocCBmbG9hdCByYW5kKCBjb25zdCBpbiB2ZWMyIHV2ICkgewoJY29uc3QgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTgsIGIgPSA3OC4yMzMsIGMgPSA0Mzc1OC41NDUzOwoJaGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7CglyZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTsKfQojaWZkZWYgSElHSF9QUkVDSVNJT04KCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9CiNlbHNlCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7CgkJZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTsKCQlyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7Cgl9CiNlbmRpZgpzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7Cgl2ZWMzIGNvbG9yOwoJdmVjMyBkaXJlY3Rpb247Cglib29sIHZpc2libGU7Cn07CnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7Cgl2ZWMzIGRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGRpcmVjdFNwZWN1bGFyOwoJdmVjMyBpbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIGluZGlyZWN0U3BlY3VsYXI7Cn07CnN0cnVjdCBHZW9tZXRyaWNDb250ZXh0IHsKCXZlYzMgcG9zaXRpb247Cgl2ZWMzIG5vcm1hbDsKCXZlYzMgdmlld0RpcjsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXZlYzMgY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKfTsKdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwp9CnZlYzMgaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCB2ZWM0KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7Cn0KbWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7CgltYXQzIHRtcDsKCXRtcFsgMCBdID0gdmVjMyggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApOwoJdG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7Cgl0bXBbIDIgXSA9IHZlYzMoIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTsKCXJldHVybiB0bXA7Cn0KZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsKCXZlYzMgd2VpZ2h0cyA9IHZlYzMoIDAuMjEyNiwgMC43MTUyLCAwLjA3MjIgKTsKCXJldHVybiBkb3QoIHdlaWdodHMsIGNvbG9yLnJnYiApOwp9CmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkgewoJcmV0dXJuIG1bIDIgXVsgMyBdID09IC0gMS4wOwp9CnZlYzIgZXF1aXJlY3RVdiggaW4gdmVjMyBkaXIgKSB7CglmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTsKCWZsb2F0IHYgPSBhc2luKCBjbGFtcCggZGlyLnksIC0gMS4wLCAxLjAgKSApICogUkVDSVBST0NBTF9QSSArIDAuNTsKCXJldHVybiB2ZWMyKCB1LCB2ICk7Cn1gLE9NPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLGtNPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxITT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50U2NhbGU7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudEJpYXM7CiNlbmRpZmAsVk09YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxXTT1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZW1pc3NpdmVNYXA7CiNlbmRpZmAscU09ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsWE09YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLFlNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZlYzMgY2FtZXJhVG9GcmFnOwoJCWlmICggaXNPcnRob2dyYXBoaWMgKSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZsZWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmcmFjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZWxzZQoJCXZlYzMgcmVmbGVjdFZlYyA9IHZSZWZsZWN0OwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogcmVmbGVjdFZlYy54LCByZWZsZWN0VmVjLnl6ICkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCXZlYzQgZW52Q29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIDAuMCApOwoJI2Vsc2UKCQl2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBvdXRnb2luZ0xpZ2h0ICogZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYICkKCQlvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19BREQgKQoJCW91dGdvaW5nTGlnaHQgKz0gZW52Q29sb3IueHl6ICogc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eTsKCSNlbmRpZgojZW5kaWZgLFpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLEpNPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLCRNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8ZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQkKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgojZW5kaWZgLEtNPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUU09YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxqTT1gI2lmZGVmIFVTRV9GT0cKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwojZW5kaWZgLHRiPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxlYj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxuYj1gI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZ3JhZGllbnRNYXA7CiNlbmRpZgp2ZWMzIGdldEdyYWRpZW50SXJyYWRpYW5jZSggdmVjMyBub3JtYWwsIHZlYzMgbGlnaHREaXJlY3Rpb24gKSB7CglmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApOwoJdmVjMiBjb29yZCA9IHZlYzIoIGRvdE5MICogMC41ICsgMC41LCAwLjAgKTsKCSNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCQlyZXR1cm4gdmVjMyggdGV4dHVyZTJEKCBncmFkaWVudE1hcCwgY29vcmQgKS5yICk7CgkjZWxzZQoJCXJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7CgkjZW5kaWYKfWAsaWI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxyYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHNiPWB2ZWMzIGRpZmZ1c2UgPSB2ZWMzKCAxLjAgKTsKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCAtbXZQb3NpdGlvbi54eXogKTsKR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7CmJhY2tHZW9tZXRyeS5wb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwpiYWNrR2VvbWV0cnkubm9ybWFsID0gLWdlb21ldHJ5Lm5vcm1hbDsKYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwp2TGlnaHRGcm9udCA9IHZlYzMoIDAuMCApOwp2SW5kaXJlY3RGcm9udCA9IHZlYzMoIDAuMCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2TGlnaHRCYWNrID0gdmVjMyggMC4wICk7Cgl2SW5kaXJlY3RCYWNrID0gdmVjMyggMC4wICk7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwpmbG9hdCBkb3ROTDsKdmVjMyBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CnZJbmRpcmVjdEZyb250ICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkluZGlyZWN0QmFjayArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJdkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwojZW5kaWYKI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJdkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZJbmRpcmVjdEJhY2sgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWZgLG9iPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGFiPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLGxiPWBUb29uTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7YCxjYj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCx1Yj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGhiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IEJsaW5uUGhvbmdNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyU2hpbmluZXNzOwoJZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKfTsKdm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9CbGlublBob25nCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZwojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxmYj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsZGI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxwYj1gCkdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uOwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCWdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CiNpZiAoIE5VTV9QT0lOVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVBvaW50TGlnaHQgcG9pbnRMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRzWyBpIF07CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgKQoJCXBvaW50TGlnaHRTaGFkb3cgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fU1BPVF9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCVNwb3RMaWdodCBzcG90TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0c1sgaSBdOwoJCWdldFNwb3RMaWdodEluZm8oIHNwb3RMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTICkKCQlzcG90TGlnaHRTaGFkb3cgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX0RJUl9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0ICkKCURpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodHNbIGkgXTsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fRElSX0xJR0hUX1NIQURPV1MgKQoJCWRpcmVjdGlvbmFsTGlnaHRTaGFkb3cgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwICkgJiYgZGVmaW5lZCggUkVfRGlyZWN0X1JlY3RBcmVhICkKCVJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9SRUNUX0FSRUFfTElHSFRTOyBpICsrICkgewoJCXJlY3RBcmVhTGlnaHQgPSByZWN0QXJlYUxpZ2h0c1sgaSBdOwoJCVJFX0RpcmVjdF9SZWN0QXJlYSggcmVjdEFyZWFMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJdmVjMyBpYmxJcnJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwoJaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CgkjaWYgKCBOVU1fSEVNSV9MSUdIVFMgPiAwICkKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCQlpcnJhZGlhbmNlICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJfQoJCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXZlYzMgcmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY2xlYXJjb2F0UmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmYCxtYj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLGdiPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAseGI9YCNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUICkKCWdsX0ZyYWdEZXB0aEVYVCA9IHZJc1BlcnNwZWN0aXZlID09IDAuMCA/IGdsX0ZyYWdDb29yZC56IDogbG9nMiggdkZyYWdEZXB0aCApICogbG9nRGVwdGhCdWZGQyAqIDAuNTsKI2VuZGlmYCx5Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCx2Yj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX2I9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7CgkJdklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7CgkjZWxzZQoJCWlmICggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICkgewoJCQlnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7CgkJCWdsX1Bvc2l0aW9uLnogKj0gZ2xfUG9zaXRpb24udzsKCQl9CgkjZW5kaWYKI2VuZGlmYCx3Yj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCxNYj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCxiYj1gI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKQoJdmVjMiB1diA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCBnbF9Qb2ludENvb3JkLngsIDEuMCAtIGdsX1BvaW50Q29vcmQueSwgMSApICkueHk7CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJZGlmZnVzZUNvbG9yLmEgKj0gdGV4dHVyZTJEKCBhbHBoYU1hcCwgdXYgKS5nOwojZW5kaWZgLFNiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsRWI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxUYj1gI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1ldGFsbmVzc01hcDsKI2VuZGlmYCxBYj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxDYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsUmI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl0cmFuc2Zvcm1lZCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDEgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZWxzZQoJCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAsIDIgKSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdOwoJCQkjZW5kaWYKCQl9CgkjZWxzZQoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0MyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdOwoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDQgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDcgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLExiPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsUGI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsRGI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsSWI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTmI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLEZiPWAjaWZkZWYgVVNFX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlOwojZW5kaWYKI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJdW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsKI2VuZGlmCiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApCgl2ZWMzIHBlcnR1cmJOb3JtYWwyQXJiKCB2ZWMzIGV5ZV9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMzIG1hcE4sIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7CgkJdmVjMyBxMCA9IHZlYzMoIGRGZHgoIGV5ZV9wb3MueCApLCBkRmR4KCBleWVfcG9zLnkgKSwgZEZkeCggZXllX3Bvcy56ICkgKTsKCQl2ZWMzIHExID0gdmVjMyggZEZkeSggZXllX3Bvcy54ICksIGRGZHkoIGV5ZV9wb3MueSApLCBkRmR5KCBleWVfcG9zLnogKSApOwoJCXZlYzIgc3QwID0gZEZkeCggdlV2LnN0ICk7CgkJdmVjMiBzdDEgPSBkRmR5KCB2VXYuc3QgKTsKCQl2ZWMzIE4gPSBzdXJmX25vcm07CgkJdmVjMyBxMXBlcnAgPSBjcm9zcyggcTEsIE4gKTsKCQl2ZWMzIHEwcGVycCA9IGNyb3NzKCBOLCBxMCApOwoJCXZlYzMgVCA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7CgkJdmVjMyBCID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTsKCQlmbG9hdCBkZXQgPSBtYXgoIGRvdCggVCwgVCApLCBkb3QoIEIsIEIgKSApOwoJCWZsb2F0IHNjYWxlID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApOwoJCXJldHVybiBub3JtYWxpemUoIFQgKiAoIG1hcE4ueCAqIHNjYWxlICkgKyBCICogKCBtYXBOLnkgKiBzY2FsZSApICsgTiAqIG1hcE4ueiApOwoJfQojZW5kaWZgLHpiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxVYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxCYj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Um91Z2huZXNzTWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXROb3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CiNlbmRpZmAsT2I9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCxrYj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxIYj1gI2lmZGVmIFBSRU1VTFRJUExJRURfQUxQSEEKCWdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7CiNlbmRpZmAsVmI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxHYj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFdiPWAjaWZkZWYgRElUSEVSSU5HCgl2ZWMzIGRpdGhlcmluZyggdmVjMyBjb2xvciApIHsKCQlmbG9hdCBncmlkX3Bvc2l0aW9uID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7CgkJdmVjMyBkaXRoZXJfc2hpZnRfUkdCID0gdmVjMyggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTsKCQlkaXRoZXJfc2hpZnRfUkdCID0gbWl4KCAyLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCAtMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgZ3JpZF9wb3NpdGlvbiApOwoJCXJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7Cgl9CiNlbmRpZmAscWI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxYYj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxZYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgZGlyZWN0aW9uYWxTaGFkb3dNYXBbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIHBvaW50U2hhZG93TWFwWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCWZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7CgkJcmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7Cgl9Cgl2ZWMyIHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diApIHsKCQlyZXR1cm4gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93LCB1diApICk7Cgl9CglmbG9hdCBWU01TaGFkb3cgKHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKXsKCQlmbG9hdCBvY2NsdXNpb24gPSAxLjA7CgkJdmVjMiBkaXN0cmlidXRpb24gPSB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNoYWRvdywgdXYgKTsKCQlmbG9hdCBoYXJkX3NoYWRvdyA9IHN0ZXAoIGNvbXBhcmUgLCBkaXN0cmlidXRpb24ueCApOwoJCWlmIChoYXJkX3NoYWRvdyAhPSAxLjAgKSB7CgkJCWZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDsKCQkJZmxvYXQgdmFyaWFuY2UgPSBtYXgoIDAuMDAwMDAsIGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKTsKCQkJZmxvYXQgc29mdG5lc3NfcHJvYmFiaWxpdHkgPSB2YXJpYW5jZSAvICh2YXJpYW5jZSArIGRpc3RhbmNlICogZGlzdGFuY2UgKTsJCQlzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IGNsYW1wKCAoIHNvZnRuZXNzX3Byb2JhYmlsaXR5IC0gMC4zICkgLyAoIDAuOTUgLSAwLjMgKSwgMC4wLCAxLjAgKTsJCQlvY2NsdXNpb24gPSBjbGFtcCggbWF4KCBoYXJkX3NoYWRvdywgc29mdG5lc3NfcHJvYmFiaWxpdHkgKSwgMC4wLCAxLjAgKTsKCQl9CgkJcmV0dXJuIG9jY2x1c2lvbjsKCX0KCWZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7CgkJZmxvYXQgc2hhZG93ID0gMS4wOwoJCXNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53OwoJCXNoYWRvd0Nvb3JkLnogKz0gc2hhZG93QmlhczsKCQlidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7CgkJYm9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApOwoJCWJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTsKCQlib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApOwoJCWlmICggZnJ1c3R1bVRlc3QgKSB7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeDAgPSAtIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDEgPSArIHRleGVsU2l6ZS54ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeTEgPSArIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzOwoJCQlmbG9hdCBkeDIgPSBkeDAgLyAyLjA7CgkJCWZsb2F0IGR5MiA9IGR5MCAvIDIuMDsKCQkJZmxvYXQgZHgzID0gZHgxIC8gMi4wOwoJCQlmbG9hdCBkeTMgPSBkeTEgLyAyLjA7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgxLCBkeTEgKSwgc2hhZG93Q29vcmQueiApCgkJCSkgKiAoIDEuMCAvIDE3LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApCgkJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBkeCA9IHRleGVsU2l6ZS54OwoJCQlmbG9hdCBkeSA9IHRleGVsU2l6ZS55OwoJCQl2ZWMyIHV2ID0gc2hhZG93Q29vcmQueHk7CgkJCXZlYzIgZiA9IGZyYWN0KCB1diAqIHNoYWRvd01hcFNpemUgKyAwLjUgKTsKCQkJdXYgLT0gZiAqIHRleGVsU2l6ZTsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCBkeSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi54ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnkgKSArCgkJCQltaXgoIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJCSAgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIGYueSApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXNoYWRvdyA9IFZTTVNoYWRvdyggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbHNlCgkJCXNoYWRvdyA9IHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZW5kaWYKCQl9CgkJcmV0dXJuIHNoYWRvdzsKCX0KCXZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHsKCQl2ZWMzIGFic1YgPSBhYnMoIHYgKTsKCQlmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTsKCQlhYnNWICo9IHNjYWxlVG9DdWJlOwoJCXYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTsKCQl2ZWMyIHBsYW5hciA9IHYueHk7CgkJZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTsKCQlmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7CgkJaWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkgewoJCQlpZiAoIHYueiA+IDAuMCApCgkJCQlwbGFuYXIueCA9IDQuMCAtIHYueDsKCQl9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWCA9IHNpZ24oIHYueCApOwoJCQlwbGFuYXIueCA9IHYueiAqIHNpZ25YICsgMi4wICogc2lnblg7CgkJfSBlbHNlIGlmICggYWJzVi55ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTsKCQkJcGxhbmFyLnggPSB2LnggKyAyLjAgKiBzaWduWSArIDIuMDsKCQkJcGxhbmFyLnkgPSB2LnogKiBzaWduWSAtIDIuMDsKCQl9CgkJcmV0dXJuIHZlYzIoIDAuMTI1LCAwLjI1ICkgKiBwbGFuYXIgKyB2ZWMyKCAwLjM3NSwgMC43NSApOwoJfQoJZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7CgkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTsKCQl2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejsKCQlmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApOwkJZHAgKz0gc2hhZG93QmlhczsKCQl2ZWMzIGJkM0QgPSBub3JtYWxpemUoIGxpZ2h0VG9Qb3NpdGlvbiApOwoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApCgkJCXZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTsKCQkJcmV0dXJuICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eHgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHgsIHRleGVsU2l6ZS55ICksIGRwICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsWmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsSmI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCwkYj1gZmxvYXQgZ2V0U2hhZG93TWFzaygpIHsKCWZsb2F0IHNoYWRvdyA9IDEuMDsKCSNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc3BvdExpZ2h0ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodC5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHQuc2hhZG93Qmlhcywgc3BvdExpZ2h0LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCglQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHQuc2hhZG93QmlhcywgcG9pbnRMaWdodC5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNlbmRpZgoJcmV0dXJuIHNoYWRvdzsKfWAsS2I9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLFFiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxqYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdmVjNCBza2luVmVydGV4ID0gYmluZE1hdHJpeCAqIHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCXZlYzQgc2tpbm5lZCA9IHZlYzQoIDAuMCApOwoJc2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7Cglza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueTsKCXNraW5uZWQgKz0gYm9uZU1hdFogKiBza2luVmVydGV4ICogc2tpbldlaWdodC56OwoJc2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7Cgl0cmFuc2Zvcm1lZCA9ICggYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6OwojZW5kaWZgLHQxPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLGUxPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLG4xPWAjaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhck1hcDsKI2VuZGlmYCxpMT1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxyMT1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHMxPWAjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJZmxvYXQgdHJhbnNtaXNzaW9uQWxwaGEgPSAxLjA7CglmbG9hdCB0cmFuc21pc3Npb25GYWN0b3IgPSB0cmFuc21pc3Npb247CglmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXRyYW5zbWlzc2lvbkZhY3RvciAqPSB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvbk1hcCwgdlV2ICkucjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7CgkjZW5kaWYKCXZlYzMgcG9zID0gdldvcmxkUG9zaXRpb247Cgl2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7Cgl2ZWMzIG4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzQgdHJhbnNtaXNzaW9uID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbigKCQluLCB2LCByb3VnaG5lc3NGYWN0b3IsIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsCgkJcG9zLCBtb2RlbE1hdHJpeCwgdmlld01hdHJpeCwgcHJvamVjdGlvbk1hdHJpeCwgaW9yLCB0aGlja25lc3NGYWN0b3IsCgkJYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJdG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApOwoJdHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIHRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgdHJhbnNtaXNzaW9uRmFjdG9yICk7CiNlbmRpZmAsbzE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsYTE9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxsMT1gI2lmZGVmIFVTRV9VVgoJI2lmZGVmIFVWU19WRVJURVhfT05MWQoJCXZlYzIgdlV2OwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzIgdlV2OwoJI2VuZGlmCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZmAsYzE9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsdTE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsaDE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJYXR0cmlidXRlIHZlYzIgdXYyOwoJdmFyeWluZyB2ZWMyIHZVdjI7Cgl1bmlmb3JtIG1hdDMgdXYyVHJhbnNmb3JtOwojZW5kaWZgLGYxPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsZDE9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAscDE9YHZhcnlpbmcgdmVjMiB2VXY7CnVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKdm9pZCBtYWluKCkgewoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24ueHksIDEuMCwgMS4wICk7Cn1gLG0xPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGcxPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCx4MT1gI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7Cgl2ZWMzIHZSZWZsZWN0ID0gdldvcmxkRGlyZWN0aW9uOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCWdsX0ZyYWdDb2xvciA9IGVudkNvbG9yOwoJZ2xfRnJhZ0NvbG9yLmEgKj0gb3BhY2l0eTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHkxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLHYxPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfMT1gI2RlZmluZSBESVNUQU5DRQp2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7Cn1gLHcxPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCxNMT1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLGIxPWB1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCXZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsUzE9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEUxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxUMT1gI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HICkKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsQTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQzE9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxSMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gKCBnbF9Gcm9udEZhY2luZyApID8gdkluZGlyZWN0RnJvbnQgOiB2SW5kaXJlY3RCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdkluZGlyZWN0RnJvbnQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxsaWdodG1hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKTsKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrOwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gdkxpZ2h0RnJvbnQ7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsTDE9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsUDE9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxEMT1gI2RlZmluZSBOT1JNQUwKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWYKfWAsSTE9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLE4xPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEYxPWAjZGVmaW5lIFBIT05HCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gdmVjMyBzcGVjdWxhcjsKdW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGhvbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsejE9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLFUxPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsQjE9YCNkZWZpbmUgVE9PTgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsTzE9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxrMT1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEgxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFYxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEcxPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVzE9YHVuaWZvcm0gZmxvYXQgcm90YXRpb247CnVuaWZvcm0gdmVjMiBjZW50ZXI7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJdmVjNCBtdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7Cgl2ZWMyIHNjYWxlOwoJc2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54LCBtb2RlbE1hdHJpeFsgMCBdLnksIG1vZGVsTWF0cml4WyAwIF0ueiApICk7CglzY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLngsIG1vZGVsTWF0cml4WyAxIF0ueSwgbW9kZWxNYXRyaXhbIDEgXS56ICkgKTsKCSNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejsKCSNlbmRpZgoJdmVjMiBhbGlnbmVkUG9zaXRpb24gPSAoIHBvc2l0aW9uLnh5IC0gKCBjZW50ZXIgLSB2ZWMyKCAwLjUgKSApICkgKiBzY2FsZTsKCXZlYzIgcm90YXRlZFBvc2l0aW9uOwoJcm90YXRlZFBvc2l0aW9uLnggPSBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCAtIHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJcm90YXRlZFBvc2l0aW9uLnkgPSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55OwoJbXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHExPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsUHQ9e2FscGhhbWFwX2ZyYWdtZW50Ol9NLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6d00sYWxwaGF0ZXN0X2ZyYWdtZW50Ok1NLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50OmJNLGFvbWFwX2ZyYWdtZW50OlNNLGFvbWFwX3BhcnNfZnJhZ21lbnQ6RU0sYmVnaW5fdmVydGV4OlRNLGJlZ2lubm9ybWFsX3ZlcnRleDpBTSxic2RmczpDTSxidW1wbWFwX3BhcnNfZnJhZ21lbnQ6Uk0sY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkxNLGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50OlBNLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpETSxjbGlwcGluZ19wbGFuZXNfdmVydGV4OklNLGNvbG9yX2ZyYWdtZW50Ok5NLGNvbG9yX3BhcnNfZnJhZ21lbnQ6Rk0sY29sb3JfcGFyc192ZXJ0ZXg6ek0sY29sb3JfdmVydGV4OlVNLGNvbW1vbjpCTSxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T00sZGVmYXVsdG5vcm1hbF92ZXJ0ZXg6a00sZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkhNLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6Vk0sZW1pc3NpdmVtYXBfZnJhZ21lbnQ6R00sZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpXTSxlbmNvZGluZ3NfZnJhZ21lbnQ6cU0sZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6WE0sZW52bWFwX2ZyYWdtZW50OllNLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpaTSxlbnZtYXBfcGFyc19mcmFnbWVudDpKTSxlbnZtYXBfcGFyc192ZXJ0ZXg6JE0sZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6YWIsZW52bWFwX3ZlcnRleDpLTSxmb2dfdmVydGV4OlFNLGZvZ19wYXJzX3ZlcnRleDpqTSxmb2dfZnJhZ21lbnQ6dGIsZm9nX3BhcnNfZnJhZ21lbnQ6ZWIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpuYixsaWdodG1hcF9mcmFnbWVudDppYixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OnJiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpzYixsaWdodHNfcGFyc19iZWdpbjpvYixsaWdodHNfdG9vbl9mcmFnbWVudDpsYixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmNiLGxpZ2h0c19waG9uZ19mcmFnbWVudDp1YixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpoYixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6ZmIsbGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6ZGIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOnBiLGxpZ2h0c19mcmFnbWVudF9tYXBzOm1iLGxpZ2h0c19mcmFnbWVudF9lbmQ6Z2IsbG9nZGVwdGhidWZfZnJhZ21lbnQ6eGIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDp5Yixsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleDp2Yixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X2IsbWFwX2ZyYWdtZW50OndiLG1hcF9wYXJzX2ZyYWdtZW50Ok1iLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDpiYixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpTYixtZXRhbG5lc3NtYXBfZnJhZ21lbnQ6RWIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6VGIsbW9ycGhub3JtYWxfdmVydGV4OkFiLG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4OkNiLG1vcnBodGFyZ2V0X3ZlcnRleDpSYixub3JtYWxfZnJhZ21lbnRfYmVnaW46TGIsbm9ybWFsX2ZyYWdtZW50X21hcHM6UGIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6RGIsbm9ybWFsX3BhcnNfdmVydGV4OkliLG5vcm1hbF92ZXJ0ZXg6TmIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6RmIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjp6YixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM6VWIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6QmIsb3V0cHV0X2ZyYWdtZW50Ok9iLHBhY2tpbmc6a2IscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpIYixwcm9qZWN0X3ZlcnRleDpWYixkaXRoZXJpbmdfZnJhZ21lbnQ6R2IsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6V2Iscm91Z2huZXNzbWFwX2ZyYWdtZW50OnFiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OlhiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OlliLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpaYixzaGFkb3dtYXBfdmVydGV4OkpiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDokYixza2luYmFzZV92ZXJ0ZXg6S2Isc2tpbm5pbmdfcGFyc192ZXJ0ZXg6UWIsc2tpbm5pbmdfdmVydGV4OmpiLHNraW5ub3JtYWxfdmVydGV4OnQxLHNwZWN1bGFybWFwX2ZyYWdtZW50OmUxLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6bjEsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6aTEsdG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDpyMSx0cmFuc21pc3Npb25fZnJhZ21lbnQ6czEsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bzEsdXZfcGFyc19mcmFnbWVudDphMSx1dl9wYXJzX3ZlcnRleDpsMSx1dl92ZXJ0ZXg6YzEsdXYyX3BhcnNfZnJhZ21lbnQ6dTEsdXYyX3BhcnNfdmVydGV4OmgxLHV2Ml92ZXJ0ZXg6ZjEsd29ybGRwb3NfdmVydGV4OmQxLGJhY2tncm91bmRfdmVydDpwMSxiYWNrZ3JvdW5kX2ZyYWc6bTEsY3ViZV92ZXJ0OmcxLGN1YmVfZnJhZzp4MSxkZXB0aF92ZXJ0OnkxLGRlcHRoX2ZyYWc6djEsZGlzdGFuY2VSR0JBX3ZlcnQ6XzEsZGlzdGFuY2VSR0JBX2ZyYWc6dzEsZXF1aXJlY3RfdmVydDpNMSxlcXVpcmVjdF9mcmFnOmIxLGxpbmVkYXNoZWRfdmVydDpTMSxsaW5lZGFzaGVkX2ZyYWc6RTEsbWVzaGJhc2ljX3ZlcnQ6VDEsbWVzaGJhc2ljX2ZyYWc6QTEsbWVzaGxhbWJlcnRfdmVydDpDMSxtZXNobGFtYmVydF9mcmFnOlIxLG1lc2htYXRjYXBfdmVydDpMMSxtZXNobWF0Y2FwX2ZyYWc6UDEsbWVzaG5vcm1hbF92ZXJ0OkQxLG1lc2hub3JtYWxfZnJhZzpJMSxtZXNocGhvbmdfdmVydDpOMSxtZXNocGhvbmdfZnJhZzpGMSxtZXNocGh5c2ljYWxfdmVydDp6MSxtZXNocGh5c2ljYWxfZnJhZzpVMSxtZXNodG9vbl92ZXJ0OkIxLG1lc2h0b29uX2ZyYWc6TzEscG9pbnRzX3ZlcnQ6azEscG9pbnRzX2ZyYWc6SDEsc2hhZG93X3ZlcnQ6VjEsc2hhZG93X2ZyYWc6RzEsc3ByaXRlX3ZlcnQ6VzEsc3ByaXRlX2ZyYWc6cTF9LG90PXtjb21tb246e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LG1hcDp7dmFsdWU6bnVsbH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdXYyVHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9fSxzcGVjdWxhcm1hcDp7c3BlY3VsYXJNYXA6e3ZhbHVlOm51bGx9fSxlbnZtYXA6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9LHJlZmxlY3Rpdml0eTp7dmFsdWU6MX0saW9yOnt2YWx1ZToxLjV9LHJlZnJhY3Rpb25SYXRpbzp7dmFsdWU6Ljk4fX0sYW9tYXA6e2FvTWFwOnt2YWx1ZTpudWxsfSxhb01hcEludGVuc2l0eTp7dmFsdWU6MX19LGxpZ2h0bWFwOntsaWdodE1hcDp7dmFsdWU6bnVsbH0sbGlnaHRNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxlbWlzc2l2ZW1hcDp7ZW1pc3NpdmVNYXA6e3ZhbHVlOm51bGx9fSxidW1wbWFwOntidW1wTWFwOnt2YWx1ZTpudWxsfSxidW1wU2NhbGU6e3ZhbHVlOjF9fSxub3JtYWxtYXA6e25vcm1hbE1hcDp7dmFsdWU6bnVsbH0sbm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgZnQoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBLKC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX19fSxmbj17YmFzaWM6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmZvZ10pLHZlcnRleFNoYWRlcjpQdC5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3Quc3BlY3VsYXJtYXAsb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IGZ0KDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3Qucm91Z2huZXNzbWFwLG90Lm1ldGFsbmVzc21hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmdyYWRpZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOk1lKFtvdC5wb2ludHMsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOlB0LmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpQdC5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOk1lKFtvdC5zcHJpdGUsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0LnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOk1lKFtvdC5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpQdC5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgVH0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6TWUoW290LmxpZ2h0cyxvdC5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5zaGFkb3dfZnJhZ319O2ZuLnBoeXNpY2FsPXt1bmlmb3JtczpNZShbZm4uc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBLKDEsMSl9LGNsZWFyY29hdE5vcm1hbE1hcDp7dmFsdWU6bnVsbH0sc2hlZW46e3ZhbHVlOjB9LHNoZWVuQ29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sc2hlZW5Db2xvck1hcDp7dmFsdWU6bnVsbH0sc2hlZW5Sb3VnaG5lc3M6e3ZhbHVlOjF9LHNoZWVuUm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb246e3ZhbHVlOjB9LHRyYW5zbWlzc2lvbk1hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uU2FtcGxlclNpemU6e3ZhbHVlOm5ldyBLfSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBmdCgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gWDEobix0LGUsaSxyLHMpe2xldCBvPW5ldyBmdCgwKSxhPXI9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIGQoeCx2KXtsZXQgbT0hMSxwPXYuaXNTY2VuZT09PSEwP3YuYmFja2dyb3VuZDpudWxsO3AmJnAuaXNUZXh0dXJlJiYocD10LmdldChwKSk7bGV0IGI9bi54cixfPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7XyYmXy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJihwPW51bGwpLHA9PT1udWxsP2cobyxhKTpwJiZwLmlzQ29sb3ImJihnKHAsMSksbT0hMCksKG4uYXV0b0NsZWFyfHxtKSYmbi5jbGVhcihuLmF1dG9DbGVhckNvbG9yLG4uYXV0b0NsZWFyRGVwdGgsbi5hdXRvQ2xlYXJTdGVuY2lsKSxwJiYocC5pc0N1YmVUZXh0dXJlfHxwLm1hcHBpbmc9PT1SbCk/KGM9PT12b2lkIDAmJihjPW5ldyBvZShuZXcgSGkoMSwxLDEpLG5ldyBGbih7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpoZSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oUyxMLEEpe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKEEubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLGkudXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT1wLGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT1wLmlzQ3ViZVRleHR1cmUmJnAuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6cCYmcC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgb2UobmV3IGxvKDIsMiksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOkdyKGZuLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjpmbi5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjpmbi5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6ZW8sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLGkudXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT1wLHAubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZwLnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weShwLm1hdHJpeCksKHUhPT1wfHxoIT09cC52ZXJzaW9ufHxmIT09bi50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9cCxoPXAudmVyc2lvbixmPW4udG9uZU1hcHBpbmcpLHgudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGcoeCx2KXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoeC5yLHguZyx4LmIsdixzKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBvfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKHgsdj0xKXtvLnNldCh4KSxhPXYsZyhvLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oeCl7YT14LGcobyxhKX0scmVuZGVyOmR9fWZ1bmN0aW9uIFkxKG4sdCxlLGkpe2xldCByPW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSxzPWkuaXNXZWJHTDI/bnVsbDp0LmdldCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxvPWkuaXNXZWJHTDJ8fHMhPT1udWxsLGE9e30sbD14KG51bGwpLGM9bDtmdW5jdGlvbiB1KEQsRix6LE4sVil7bGV0IFE9ITE7aWYobyl7bGV0IGF0PWcoTix6LEYpO2MhPT1hdCYmKGM9YXQsZihjLm9iamVjdCkpLFE9dihOLFYpLFEmJm0oTixWKX1lbHNle2xldCBhdD1GLndpcmVmcmFtZT09PSEwOyhjLmdlb21ldHJ5IT09Ti5pZHx8Yy5wcm9ncmFtIT09ei5pZHx8Yy53aXJlZnJhbWUhPT1hdCkmJihjLmdlb21ldHJ5PU4uaWQsYy5wcm9ncmFtPXouaWQsYy53aXJlZnJhbWU9YXQsUT0hMCl9RC5pc0luc3RhbmNlZE1lc2g9PT0hMCYmKFE9ITApLFYhPT1udWxsJiZlLnVwZGF0ZShWLDM0OTYzKSxRJiYoQShELEYseixOKSxWIT09bnVsbCYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KFYpLmJ1ZmZlcikpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6cy5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpfWZ1bmN0aW9uIGYoRCl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkoRCk6cy5iaW5kVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZChEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KEQpOnMuZGVsZXRlVmVydGV4QXJyYXlPRVMoRCl9ZnVuY3Rpb24gZyhELEYseil7bGV0IE49ei53aXJlZnJhbWU9PT0hMCxWPWFbRC5pZF07Vj09PXZvaWQgMCYmKFY9e30sYVtELmlkXT1WKTtsZXQgUT1WW0YuaWRdO1E9PT12b2lkIDAmJihRPXt9LFZbRi5pZF09USk7bGV0IGF0PVFbTl07cmV0dXJuIGF0PT09dm9pZCAwJiYoYXQ9eChoKCkpLFFbTl09YXQpLGF0fWZ1bmN0aW9uIHgoRCl7bGV0IEY9W10sej1bXSxOPVtdO2ZvcihsZXQgVj0wO1Y8cjtWKyspRltWXT0wLHpbVl09MCxOW1ZdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkYsZW5hYmxlZEF0dHJpYnV0ZXM6eixhdHRyaWJ1dGVEaXZpc29yczpOLG9iamVjdDpELGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24gdihELEYpe2xldCB6PWMuYXR0cmlidXRlcyxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD16W1FdLEc9TltRXTtpZihhdD09PXZvaWQgMHx8YXQuYXR0cmlidXRlIT09R3x8YXQuZGF0YSE9PUcuZGF0YSlyZXR1cm4hMDtWKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PVZ8fGMuaW5kZXghPT1GfWZ1bmN0aW9uIG0oRCxGKXtsZXQgej17fSxOPUQuYXR0cmlidXRlcyxWPTA7Zm9yKGxldCBRIGluIE4pe2xldCBhdD1OW1FdLEc9e307Ry5hdHRyaWJ1dGU9YXQsYXQuZGF0YSYmKEcuZGF0YT1hdC5kYXRhKSx6W1FdPUcsVisrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1WLGMuaW5kZXg9Rn1mdW5jdGlvbiBwKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKylEW0ZdPTB9ZnVuY3Rpb24gYihEKXtfKEQsMCl9ZnVuY3Rpb24gXyhELEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxOPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVj1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbRF09MSxOW0RdPT09MCYmKG4uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoRCksTltEXT0xKSxWW0RdIT09RiYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKEQsRiksVltEXT1GKX1mdW5jdGlvbiBTKCl7bGV0IEQ9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxOPUYubGVuZ3RoO3o8Tjt6KyspRlt6XSE9PURbel0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIEwoRCxGLHosTixWLFEpe2kuaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihELEYseixWLFEpOm4udmVydGV4QXR0cmliUG9pbnRlcihELEYseixOLFYsUSl9ZnVuY3Rpb24gQShELEYseixOKXtpZihpLmlzV2ViR0wyPT09ITEmJihELmlzSW5zdGFuY2VkTWVzaHx8Ti5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3AoKTtsZXQgVj1OLmF0dHJpYnV0ZXMsUT16LmdldEF0dHJpYnV0ZXMoKSxhdD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBHIGluIFEpe2xldCAkPVFbR107aWYoJC5sb2NhdGlvbj49MCl7bGV0IGx0PVZbR107aWYobHQ9PT12b2lkIDAmJihHPT09Imluc3RhbmNlTWF0cml4IiYmRC5pbnN0YW5jZU1hdHJpeCYmKGx0PUQuaW5zdGFuY2VNYXRyaXgpLEc9PT0iaW5zdGFuY2VDb2xvciImJkQuaW5zdGFuY2VDb2xvciYmKGx0PUQuaW5zdGFuY2VDb2xvcikpLGx0IT09dm9pZCAwKXtsZXQgZHQ9bHQubm9ybWFsaXplZCx4dD1sdC5pdGVtU2l6ZSxrPWUuZ2V0KGx0KTtpZihrPT09dm9pZCAwKWNvbnRpbnVlO2xldCBGdD1rLmJ1ZmZlcixtdD1rLnR5cGUsU3Q9ay5ieXRlc1BlckVsZW1lbnQ7aWYobHQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IEI9bHQuZGF0YSxzdD1CLnN0cmlkZSxudD1sdC5vZmZzZXQ7aWYoQiYmQi5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IEM9MDtDPCQubG9jYXRpb25TaXplO0MrKylfKCQubG9jYXRpb24rQyxCLm1lc2hQZXJBdHRyaWJ1dGUpO0QuaXNJbnN0YW5jZWRNZXNoIT09ITAmJk4uX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihOLl9tYXhJbnN0YW5jZUNvdW50PUIubWVzaFBlckF0dHJpYnV0ZSpCLmNvdW50KX1lbHNlIGZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKWIoJC5sb2NhdGlvbitDKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKUwoJC5sb2NhdGlvbitDLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHN0KlN0LChudCt4dC8kLmxvY2F0aW9uU2l6ZSpDKSpTdCl9ZWxzZXtpZihsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBCPTA7QjwkLmxvY2F0aW9uU2l6ZTtCKyspXygkLmxvY2F0aW9uK0IsbHQubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9bHQubWVzaFBlckF0dHJpYnV0ZSpsdC5jb3VudCl9ZWxzZSBmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKyliKCQubG9jYXRpb24rQik7bi5iaW5kQnVmZmVyKDM0OTYyLEZ0KTtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylMKCQubG9jYXRpb24rQix4dC8kLmxvY2F0aW9uU2l6ZSxtdCxkdCx4dCpTdCx4dC8kLmxvY2F0aW9uU2l6ZSpCKlN0KX19ZWxzZSBpZihhdCE9PXZvaWQgMCl7bGV0IGR0PWF0W0ddO2lmKGR0IT09dm9pZCAwKXN3aXRjaChkdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDM6bi52ZXJ0ZXhBdHRyaWIzZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7Y2FzZSA0Om4udmVydGV4QXR0cmliNGZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoJC5sb2NhdGlvbixkdCl9fX19UygpfWZ1bmN0aW9uIEgoKXt5KCk7Zm9yKGxldCBEIGluIGEpe2xldCBGPWFbRF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRF19fWZ1bmN0aW9uIHR0KEQpe2lmKGFbRC5pZF09PT12b2lkIDApcmV0dXJuO2xldCBGPWFbRC5pZF07Zm9yKGxldCB6IGluIEYpe2xldCBOPUZbel07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIEZbel19ZGVsZXRlIGFbRC5pZF19ZnVuY3Rpb24gWChEKXtmb3IobGV0IEYgaW4gYSl7bGV0IHo9YVtGXTtpZih6W0QuaWRdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBOPXpbRC5pZF07Zm9yKGxldCBWIGluIE4pZChOW1ZdLm9iamVjdCksZGVsZXRlIE5bVl07ZGVsZXRlIHpbRC5pZF19fWZ1bmN0aW9uIHkoKXtSKCksYyE9PWwmJihjPWwsZihjLm9iamVjdCkpfWZ1bmN0aW9uIFIoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOnUscmVzZXQ6eSxyZXNldERlZmF1bHRTdGF0ZTpSLGRpc3Bvc2U6SCxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTp0dCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOlgsaW5pdEF0dHJpYnV0ZXM6cCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpTfX1mdW5jdGlvbiBaMShuLHQsZSxpKXtsZXQgcj1pLmlzV2ViR0wyLHM7ZnVuY3Rpb24gbyhjKXtzPWN9ZnVuY3Rpb24gYShjLHUpe24uZHJhd0FycmF5cyhzLGMsdSksZS51cGRhdGUodSxzLDEpfWZ1bmN0aW9uIGwoYyx1LGgpe2lmKGg9PT0wKXJldHVybjtsZXQgZixkO2lmKHIpZj1uLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYoZj10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGQ9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsZj09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1mW2RdKHMsYyx1LGgpLGUudXBkYXRlKHUscyxoKX10aGlzLnNldE1vZGU9byx0aGlzLnJlbmRlcj1hLHRoaXMucmVuZGVySW5zdGFuY2VzPWx9ZnVuY3Rpb24gSjEobix0LGUpe2xldCBpO2Z1bmN0aW9uIHIoKXtpZihpIT09dm9pZCAwKXJldHVybiBpO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgQT10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aT1uLmdldFBhcmFtZXRlcihBLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBpPTA7cmV0dXJuIGl9ZnVuY3Rpb24gcyhBKXtpZihBPT09ImhpZ2hwIil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtBPSJtZWRpdW1wIn1yZXR1cm4gQT09PSJtZWRpdW1wIiYmbi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgbz10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQsYT1lLnByZWNpc2lvbiE9PXZvaWQgMD9lLnByZWNpc2lvbjoiaGlnaHAiLGw9cyhhKTtsIT09YSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLGEsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLGE9bCk7bGV0IGM9b3x8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1uLmdldFBhcmFtZXRlcigzNDkzMCksZj1uLmdldFBhcmFtZXRlcigzNTY2MCksZD1uLmdldFBhcmFtZXRlcigzMzc5KSxnPW4uZ2V0UGFyYW1ldGVyKDM0MDc2KSx4PW4uZ2V0UGFyYW1ldGVyKDM0OTIxKSx2PW4uZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtPW4uZ2V0UGFyYW1ldGVyKDM2MzQ4KSxwPW4uZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxfPW98fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLFM9YiYmXyxMPW8/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOm8sZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OnIsZ2V0TWF4UHJlY2lzaW9uOnMscHJlY2lzaW9uOmEsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpkLG1heEN1YmVtYXBTaXplOmcsbWF4QXR0cmlidXRlczp4LG1heFZlcnRleFVuaWZvcm1zOnYsbWF4VmFyeWluZ3M6bSxtYXhGcmFnbWVudFVuaWZvcm1zOnAsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6XyxmbG9hdFZlcnRleFRleHR1cmVzOlMsbWF4U2FtcGxlczpMfX1mdW5jdGlvbiAkMShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxzPSExLG89bmV3IGplLGE9bmV3IGRlLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWgubGVuZ3RoIT09MHx8Znx8aSE9PTB8fHI7cmV0dXJuIHI9ZixlPXUoaCxkLDApLGk9aC5sZW5ndGgsZ30sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtzPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe3M9ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixkKXtsZXQgZz1oLmNsaXBwaW5nUGxhbmVzLHg9aC5jbGlwSW50ZXJzZWN0aW9uLHY9aC5jbGlwU2hhZG93cyxtPW4uZ2V0KGgpO2lmKCFyfHxnPT09bnVsbHx8Zy5sZW5ndGg9PT0wfHxzJiYhdilzP3UobnVsbCk6YygpO2Vsc2V7bGV0IHA9cz8wOmksYj1wKjQsXz1tLmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1fLF89dShnLGYsYixkKTtmb3IobGV0IFM9MDtTIT09YjsrK1MpX1tTXT1lW1NdO20uY2xpcHBpbmdTdGF0ZT1fLHRoaXMubnVtSW50ZXJzZWN0aW9uPXg/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9cH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLGQsZyl7bGV0IHg9aCE9PW51bGw/aC5sZW5ndGg6MCx2PW51bGw7aWYoeCE9PTApe2lmKHY9bC52YWx1ZSxnIT09ITB8fHY9PT1udWxsKXtsZXQgbT1kK3gqNCxwPWYubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHApLCh2PT09bnVsbHx8di5sZW5ndGg8bSkmJih2PW5ldyBGbG9hdDMyQXJyYXkobSkpO2ZvcihsZXQgYj0wLF89ZDtiIT09eDsrK2IsXys9NClvLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHAsYSksby5ub3JtYWwudG9BcnJheSh2LF8pLHZbXyszXT1vLmNvbnN0YW50fWwudmFsdWU9dixsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz14LHQubnVtSW50ZXJzZWN0aW9uPTAsdn19ZnVuY3Rpb24gSzEobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShvLGEpe3JldHVybiBhPT09VXU/by5tYXBwaW5nPUFvOmE9PT1CdSYmKG8ubWFwcGluZz1Dbyksb31mdW5jdGlvbiBpKG8pe2lmKG8mJm8uaXNUZXh0dXJlJiZvLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExKXtsZXQgYT1vLm1hcHBpbmc7aWYoYT09PVV1fHxhPT09QnUpaWYodC5oYXMobykpe2xldCBsPXQuZ2V0KG8pLnRleHR1cmU7cmV0dXJuIGUobCxvLm1hcHBpbmcpfWVsc2V7bGV0IGw9by5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgb2wobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixvKSx0LnNldChvLGMpLG8uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUsby5tYXBwaW5nKX1lbHNlIHJldHVybiBudWxsfX1yZXR1cm4gb31mdW5jdGlvbiByKG8pe2xldCBhPW8udGFyZ2V0O2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscik7bGV0IGw9dC5nZXQoYSk7bCE9PXZvaWQgMCYmKHQuZGVsZXRlKGEpLGwuZGlzcG9zZSgpKX1mdW5jdGlvbiBzKCl7dD1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpzfX12YXIgVmk9Y2xhc3MgZXh0ZW5kcyBvb3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxzPS4xLG89MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1zLHRoaXMuZmFyPW8sdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLHMsbyl7dGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIscz1pLXQsbz1pK3QsYT1yK2UsbD1yLWU7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtzKz1jKnRoaXMudmlldy5vZmZzZXRYLG89cytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMocyxvLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsdGhpcy52aWV3IT09bnVsbCYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07VmkucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBYcj1jbGFzcyBleHRlbmRzIEZue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07WHIucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIGtyPTQsbmk9OCxobj1NYXRoLnBvdygyLG5pKSx4MD1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0seTA9bmkta3IrMSt4MC5sZW5ndGgsQXI9MjAsVHU9bmV3IFZpLHtfbG9kUGxhbmVzOkdzLF9zaXplTG9kczptZyxfc2lnbWFzOlVhfT1RMSgpLGdnPW5ldyBmdCxBdT1udWxsLHppPSgxK01hdGguc3FydCg1KSkvMixDcj0xL3ppLHhnPVtuZXcgVCgxLDEsMSksbmV3IFQoLTEsMSwxKSxuZXcgVCgxLDEsLTEpLG5ldyBUKC0xLDEsLTEpLG5ldyBUKDAsemksQ3IpLG5ldyBUKDAsemksLUNyKSxuZXcgVChDciwwLHppKSxuZXcgVCgtQ3IsMCx6aSksbmV3IFQoemksQ3IsMCksbmV3IFQoLXppLENyLDApXSxhbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWoxKEFyKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IHM9dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIscyksZT4wJiZ0aGlzLl9ibHVyKHMsMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0ocyksdGhpcy5fY2xlYW51cChzKSxzfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1fZygpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe3RoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8R3MubGVuZ3RoO3QrKylHc1t0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KEF1KSx0LnNjaXNzb3JUZXN0PSExLEJhKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LGUpe0F1PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBpPWV8fHRoaXMuX2FsbG9jYXRlVGFyZ2V0cyh0KTtyZXR1cm4gdGhpcy5fdGV4dHVyZVRvQ3ViZVVWKHQsaSksdGhpcy5fYXBwbHlQTVJFTShpKSx0aGlzLl9jbGVhbnVwKGkpLGl9X2FsbG9jYXRlVGFyZ2V0cyh0KXtsZXQgZT17bWFnRmlsdGVyOmJlLG1pbkZpbHRlcjpiZSxnZW5lcmF0ZU1pcG1hcHM6ITEsdHlwZTpVcixmb3JtYXQ6UmUsZW5jb2Rpbmc6cmksZGVwdGhCdWZmZXI6ITF9LGk9eWcoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWcoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgb2UoR3NbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFR1KX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgU2UoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsaD11LmF1dG9DbGVhcixmPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKGdnKSx1LnRvbmVNYXBwaW5nPXRpLHUuYXV0b0NsZWFyPSExO2xldCBkPW5ldyBraSh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpoZSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGc9bmV3IG9lKG5ldyBIaSxkKSx4PSExLHY9dC5iYWNrZ3JvdW5kO3Y/di5pc0NvbG9yJiYoZC5jb2xvci5jb3B5KHYpLHQuYmFja2dyb3VuZD1udWxsLHg9ITApOihkLmNvbG9yLmNvcHkoZ2cpLHg9ITApO2ZvcihsZXQgbT0wO208NjttKyspe2xldCBwPW0lMztwPT09MD8oYS51cC5zZXQoMCxsW21dLDApLGEubG9va0F0KGNbbV0sMCwwKSk6cD09PTE/KGEudXAuc2V0KDAsMCxsW21dKSxhLmxvb2tBdCgwLGNbbV0sMCkpOihhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoMCwwLGNbbV0pKSxCYShyLHAqaG4sbT4yP2huOjAsaG4saG4pLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLHgmJnUucmVuZGVyKGcsYSksdS5yZW5kZXIodCxhKX1nLmdlb21ldHJ5LmRpc3Bvc2UoKSxnLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9dn1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj10Lm1hcHBpbmc9PT1Bb3x8dC5tYXBwaW5nPT09Q287cj8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEpOnRoaXMuX2VxdWlyZWN0U2hhZGVyPT09bnVsbCYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPXZnKCkpO2xldCBzPXI/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixvPW5ldyBvZShHc1swXSxzKSxhPXMudW5pZm9ybXM7YS5lbnZNYXAudmFsdWU9dCxyfHxhLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLEJhKGUsMCwwLDMqaG4sMipobiksaS5zZXRSZW5kZXJUYXJnZXQoZSksaS5yZW5kZXIobyxUdSl9X2FwcGx5UE1SRU0odCl7bGV0IGU9dGhpcy5fcmVuZGVyZXIsaT1lLmF1dG9DbGVhcjtlLmF1dG9DbGVhcj0hMTtmb3IobGV0IHI9MTtyPHkwO3IrKyl7bGV0IHM9TWF0aC5zcXJ0KFVhW3JdKlVhW3JdLVVhW3ItMV0qVWFbci0xXSksbz14Z1soci0xKSV4Zy5sZW5ndGhdO3RoaXMuX2JsdXIodCxyLTEscixzLG8pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixzKXtsZXQgbz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LG8sZSxpLHIsImxhdGl0dWRpbmFsIixzKSx0aGlzLl9oYWxmQmx1cihvLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIscyl9X2hhbGZCbHVyKHQsZSxpLHIscyxvLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO28hPT0ibGF0aXR1ZGluYWwiJiZvIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IG9lKEdzW3JdLGMpLGY9Yy51bmlmb3JtcyxkPW1nW2ldLTEsZz1pc0Zpbml0ZShzKT9NYXRoLlBJLygyKmQpOjIqTWF0aC5QSS8oMipBci0xKSx4PXMvZyx2PWlzRmluaXRlKHMpPzErTWF0aC5mbG9vcih1KngpOkFyO3Y+QXImJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke3N9LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7dn0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAke0FyfWApO2xldCBtPVtdLHA9MDtmb3IobGV0IEw9MDtMPEFyOysrTCl7bGV0IEE9TC94LEg9TWF0aC5leHAoLUEqQS8yKTttLnB1c2goSCksTD09PTA/cCs9SDpMPHYmJihwKz0yKkgpfWZvcihsZXQgTD0wO0w8bS5sZW5ndGg7TCsrKW1bTF09bVtMXS9wO2YuZW52TWFwLnZhbHVlPXQudGV4dHVyZSxmLnNhbXBsZXMudmFsdWU9dixmLndlaWdodHMudmFsdWU9bSxmLmxhdGl0dWRpbmFsLnZhbHVlPW89PT0ibGF0aXR1ZGluYWwiLGEmJihmLnBvbGVBeGlzLnZhbHVlPWEpLGYuZFRoZXRhLnZhbHVlPWcsZi5taXBJbnQudmFsdWU9bmktaTtsZXQgYj1tZ1tyXSxfPTMqTWF0aC5tYXgoMCxobi0yKmIpLFM9KHI9PT0wPzA6MipobikrMipiKihyPm5pLWtyP3Itbmkra3I6MCk7QmEoZSxfLFMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQoZSksbC5yZW5kZXIoaCxUdSl9fTtmdW5jdGlvbiBRMSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPW5pO2ZvcihsZXQgcj0wO3I8eTA7cisrKXtsZXQgcz1NYXRoLnBvdygyLGkpO3QucHVzaChzKTtsZXQgbz0xL3M7cj5uaS1rcj9vPXgwW3Itbmkra3ItMV06cj09PTAmJihvPTApLGUucHVzaChvKTtsZXQgYT0xLyhzLTEpLGw9LWEvMixjPTErYS8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LGQ9MyxnPTIseD0xLHY9bmV3IEZsb2F0MzJBcnJheShkKmYqaCksbT1uZXcgRmxvYXQzMkFycmF5KGcqZipoKSxwPW5ldyBGbG9hdDMyQXJyYXkoeCpmKmgpO2ZvcihsZXQgXz0wO188aDtfKyspe2xldCBTPV8lMyoyLzMtMSxMPV8+Mj8wOi0xLEE9W1MsTCwwLFMrMi8zLEwsMCxTKzIvMyxMKzEsMCxTLEwsMCxTKzIvMyxMKzEsMCxTLEwrMSwwXTt2LnNldChBLGQqZipfKSxtLnNldCh1LGcqZipfKTtsZXQgSD1bXyxfLF8sXyxfLF9dO3Auc2V0KEgseCpmKl8pfWxldCBiPW5ldyBIdDtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBRdCh2LGQpKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBRdChtLGcpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgUXQocCx4KSksbi5wdXNoKGIpLGk+a3ImJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24geWcobil7bGV0IHQ9bmV3IE5lKDMqaG4sMypobixuKTtyZXR1cm4gdC50ZXh0dXJlLm1hcHBpbmc9UmwsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEJhKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBqMShuKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KG4pLGU9bmV3IFQoMCwxLDApO3JldHVybiBuZXcgWHIoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bn0sdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sc2FtcGxlczp7dmFsdWU6MX0sd2VpZ2h0czp7dmFsdWU6dH0sbGF0aXR1ZGluYWw6e3ZhbHVlOiExfSxkVGhldGE6e3ZhbHVlOjB9LG1pcEludDp7dmFsdWU6MH0scG9sZUF4aXM6e3ZhbHVlOmV9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gdmcoKXtsZXQgbj1uZXcgSygxLDEpO3JldHVybiBuZXcgWHIoe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBfZygpe3JldHVybiBuZXcgWHIoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6amgoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwOwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDsKCgkJCXZvaWQgbWFpbigpIHsKCgkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlQ3ViZSggZW52TWFwLCB2ZWMzKCBmbGlwRW52TWFwICogdk91dHB1dERpcmVjdGlvbi54LCB2T3V0cHV0RGlyZWN0aW9uLnl6ICkgKTsKCgkJCX0KCQlgLGJsZW5kaW5nOmpuLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gamgoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gdFMobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIGkoYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPWw9PT1VdXx8bD09PUJ1LHU9bD09PUFvfHxsPT09Q287aWYoY3x8dSlpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmYS5uZWVkc1BNUkVNVXBkYXRlPT09ITApe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChhKTtyZXR1cm4gZT09PW51bGwmJihlPW5ldyBhbChuKSksaD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGgpOmUuZnJvbUN1YmVtYXAoYSxoKSx0LnNldChhLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgaD1hLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJnIoaCkpe2U9PT1udWxsJiYoZT1uZXcgYWwobikpO2xldCBmPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEsZiksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBhfWZ1bmN0aW9uIHIoYSl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylhW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIHMoYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwLGUhPT1udWxsJiYoZS5kaXNwb3NlKCksZT1udWxsKX1yZXR1cm57Z2V0OmksZGlzcG9zZTpvfX1mdW5jdGlvbiBlUyhuKXtsZXQgdD17fTtmdW5jdGlvbiBlKGkpe2lmKHRbaV0hPT12b2lkIDApcmV0dXJuIHRbaV07bGV0IHI7c3dpdGNoKGkpe2Nhc2UiV0VCR0xfZGVwdGhfdGV4dHVyZSI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9kZXB0aF90ZXh0dXJlIik7YnJlYWs7Y2FzZSJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiOnI9bi5nZXRFeHRlbnNpb24oIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpO2JyZWFrO2Nhc2UiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTticmVhaztkZWZhdWx0OnI9bi5nZXRFeHRlbnNpb24oaSl9cmV0dXJuIHRbaV09cixyfXJldHVybntoYXM6ZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSkhPT1udWxsfSxpbml0OmZ1bmN0aW9uKGkpe2kuaXNXZWJHTDI/ZSgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOihlKCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksZSgiT0VTX3RleHR1cmVfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSxlKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSxlKCJPRVNfZWxlbWVudF9pbmRleF91aW50IiksZSgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSxlKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpLGUoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpLGUoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpLGUoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpfSxnZXQ6ZnVuY3Rpb24oaSl7bGV0IHI9ZShpKTtyZXR1cm4gcj09PW51bGwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitpKyIgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQuIikscn19fWZ1bmN0aW9uIG5TKG4sdCxlLGkpe2xldCByPXt9LHM9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gbyhoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBnIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZ10pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZGVsZXRlIHJbZi5pZF07bGV0IGQ9cy5nZXQoZik7ZCYmKHQucmVtb3ZlKGQpLHMuZGVsZXRlKGYpKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYShoLGYpe3JldHVybiByW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHJbZi5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBmKXQudXBkYXRlKGZbZ10sMzQ5NjIpO2xldCBkPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZyBpbiBkKXtsZXQgeD1kW2ddO2ZvcihsZXQgdj0wLG09eC5sZW5ndGg7djxtO3YrKyl0LnVwZGF0ZSh4W3ZdLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxkPWguaW5kZXgsZz1oLmF0dHJpYnV0ZXMucG9zaXRpb24seD0wO2lmKGQhPT1udWxsKXtsZXQgcD1kLmFycmF5O3g9ZC52ZXJzaW9uO2ZvcihsZXQgYj0wLF89cC5sZW5ndGg7YjxfO2IrPTMpe2xldCBTPXBbYiswXSxMPXBbYisxXSxBPXBbYisyXTtmLnB1c2goUyxMLEwsQSxBLFMpfX1lbHNle2xldCBwPWcuYXJyYXk7eD1nLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aC8zLTE7YjxfO2IrPTMpe2xldCBTPWIrMCxMPWIrMSxBPWIrMjtmLnB1c2goUyxMLEwsQSxBLFMpfX1sZXQgdj1uZXcocDAoZik/c2w6cmwpKGYsMSk7di52ZXJzaW9uPXg7bGV0IG09cy5nZXQoaCk7bSYmdC5yZW1vdmUobSkscy5zZXQoaCx2KX1mdW5jdGlvbiB1KGgpe2xldCBmPXMuZ2V0KGgpO2lmKGYpe2xldCBkPWguaW5kZXg7ZCE9PW51bGwmJmYudmVyc2lvbjxkLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBzLmdldChoKX1yZXR1cm57Z2V0OmEsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIGlTKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGYpe3M9Zn1sZXQgYSxsO2Z1bmN0aW9uIGMoZil7YT1mLnR5cGUsbD1mLmJ5dGVzUGVyRWxlbWVudH1mdW5jdGlvbiB1KGYsZCl7bi5kcmF3RWxlbWVudHMocyxkLGEsZipsKSxlLnVwZGF0ZShkLHMsMSl9ZnVuY3Rpb24gaChmLGQsZyl7aWYoZz09PTApcmV0dXJuO2xldCB4LHY7aWYocil4PW4sdj0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkIjtlbHNlIGlmKHg9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSx2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSIseD09PW51bGwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59eFt2XShzLGQsYSxmKmwsZyksZS51cGRhdGUoZCxzLGcpfXRoaXMuc2V0TW9kZT1vLHRoaXMuc2V0SW5kZXg9Yyx0aGlzLnJlbmRlcj11LHRoaXMucmVuZGVySW5zdGFuY2VzPWh9ZnVuY3Rpb24gclMobil7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxlPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gaShzLG8sYSl7c3dpdGNoKGUuY2FsbHMrKyxvKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKHMvMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKHMvMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKHMtMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqczticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqczticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixvKTticmVha319ZnVuY3Rpb24gcigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6cix1cGRhdGU6aX19dmFyIGNvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2NvLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBzUyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gb1Mobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gd2cobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gYVMobix0LGUpe2xldCBpPXt9LHI9bmV3IEZsb2F0MzJBcnJheSg4KSxzPW5ldyBXZWFrTWFwLG89bmV3IFQsYT1bXTtmb3IobGV0IGM9MDtjPDg7YysrKWFbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgZD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBnPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCx4PXMuZ2V0KHUpO2lmKHg9PT12b2lkIDB8fHguY291bnQhPT1nKXtsZXQgUj1mdW5jdGlvbigpe1guZGlzcG9zZSgpLHMuZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9O3ghPT12b2lkIDAmJngudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHA9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sXz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LEw9cD09PSEwPzI6MSxBPVMqTCxIPTE7QT50Lm1heFRleHR1cmVTaXplJiYoSD1NYXRoLmNlaWwoQS90Lm1heFRleHR1cmVTaXplKSxBPXQubWF4VGV4dHVyZVNpemUpO2xldCB0dD1uZXcgRmxvYXQzMkFycmF5KEEqSCo0KmcpLFg9bmV3IGNvKHR0LEEsSCxnKTtYLmZvcm1hdD1SZSxYLnR5cGU9VWksWC5uZWVkc1VwZGF0ZT0hMDtsZXQgeT1MKjQ7Zm9yKGxldCBEPTA7RDxnO0QrKyl7bGV0IEY9YltEXSx6PV9bRF0sTj1BKkgqNCpEO2ZvcihsZXQgVj0wO1Y8Ri5jb3VudDtWKyspe28uZnJvbUJ1ZmZlckF0dHJpYnV0ZShGLFYpLEYubm9ybWFsaXplZD09PSEwJiZ3ZyhvLEYpO2xldCBRPVYqeTt0dFtOK1ErMF09by54LHR0W04rUSsxXT1vLnksdHRbTitRKzJdPW8ueix0dFtOK1ErM109MCxwPT09ITAmJihvLmZyb21CdWZmZXJBdHRyaWJ1dGUoeixWKSx6Lm5vcm1hbGl6ZWQ9PT0hMCYmd2cobyx6KSx0dFtOK1ErNF09by54LHR0W04rUSs1XT1vLnksdHRbTitRKzZdPW8ueix0dFtOK1ErN109MCl9fXg9e2NvdW50OmcsdGV4dHVyZTpYLHNpemU6bmV3IEsoQSxIKX0scy5zZXQodSx4KSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFIpfWxldCB2PTA7Zm9yKGxldCBwPTA7cDxkLmxlbmd0aDtwKyspdis9ZFtwXTtsZXQgbT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS12O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLG0pLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGQpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlIix4LnRleHR1cmUsZSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIix4LnNpemUpfWVsc2V7bGV0IGc9ZD09PXZvaWQgMD8wOmQubGVuZ3RoLHg9aVt1LmlkXTtpZih4PT09dm9pZCAwfHx4Lmxlbmd0aCE9PWcpe3g9W107Zm9yKGxldCBfPTA7XzxnO18rKyl4W19dPVtfLDBdO2lbdS5pZF09eH1mb3IobGV0IF89MDtfPGc7XysrKXtsZXQgUz14W19dO1NbMF09XyxTWzFdPWRbX119eC5zb3J0KG9TKTtmb3IobGV0IF89MDtfPDg7XysrKV88ZyYmeFtfXVsxXT8oYVtfXVswXT14W19dWzBdLGFbX11bMV09eFtfXVsxXSk6KGFbX11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtfXVsxXT0wKTthLnNvcnQoc1MpO2xldCB2PXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHA9MDtmb3IobGV0IF89MDtfPDg7XysrKXtsZXQgUz1hW19dLEw9U1swXSxBPVNbMV07TCE9PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSJiZBPyh2JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pIT09dltMXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfLHZbTF0pLG0mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykhPT1tW0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18sbVtMXSkscltfXT1BLHArPUEpOih2JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyksbSYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pLHJbX109MCl9bGV0IGI9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtcDtmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixiKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19cmV0dXJue3VwZGF0ZTpsfX1mdW5jdGlvbiBsUyhuLHQsZSxpKXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGwpe2xldCBjPWkucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIHIuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLHIuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gbygpe3I9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpzLGRpc3Bvc2U6b319dmFyIGxsPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodD1udWxsLGU9MSxpPTEscj0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aSxkZXB0aDpyfSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLndyYXBSPVZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2xsLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIHYwPW5ldyBhZSxfMD1uZXcgY28sdzA9bmV3IGxsLE0wPW5ldyBXcixNZz1bXSxiZz1bXSxTZz1uZXcgRmxvYXQzMkFycmF5KDE2KSxFZz1uZXcgRmxvYXQzMkFycmF5KDkpLFRnPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gZXMobix0LGUpe2xldCBpPW5bMF07aWYoaTw9MHx8aT4wKXJldHVybiBuO2xldCByPXQqZSxzPU1nW3JdO2lmKHM9PT12b2lkIDAmJihzPW5ldyBGbG9hdDMyQXJyYXkociksTWdbcl09cyksdCE9PTApe2kudG9BcnJheShzLDApO2ZvcihsZXQgbz0xLGE9MDtvIT09dDsrK28pYSs9ZSxuW29dLnRvQXJyYXkocyxhKX1yZXR1cm4gc31mdW5jdGlvbiBMZShuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFRlKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBQbChuLHQpe2xldCBlPWJnW3RdO2U9PT12b2lkIDAmJihlPW5ldyBJbnQzMkFycmF5KHQpLGJnW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIGNTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHVTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKGVbMF0hPT10Lnh8fGVbMV0hPT10LnkpJiYobi51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLGVbMF09dC54LGVbMV09dC55KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTJmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gaFMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZlMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLFRlKGUsdCl9fWZ1bmN0aW9uIGRTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47VGcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsVGcpLFRlKGUsaSl9fWZ1bmN0aW9uIHBTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47RWcuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRWcpLFRlKGUsaSl9fWZ1bmN0aW9uIG1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZSxpPXQuZWxlbWVudHM7aWYoaT09PXZvaWQgMCl7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxUZShlLHQpfWVsc2V7aWYoTGUoZSxpKSlyZXR1cm47U2cuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsU2cpLFRlKGUsaSl9fWZ1bmN0aW9uIGdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHhTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB5UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gdlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIF9TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiB3UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIE1TKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gYlMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBTUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHYwLHIpfWZ1bmN0aW9uIEVTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHx3MCxyKX1mdW5jdGlvbiBUUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZUN1YmUodHx8TTAscil9ZnVuY3Rpb24gQVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8XzAscil9ZnVuY3Rpb24gQ1Mobil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gY1M7Y2FzZSAzNTY2NDpyZXR1cm4gdVM7Y2FzZSAzNTY2NTpyZXR1cm4gaFM7Y2FzZSAzNTY2NjpyZXR1cm4gZlM7Y2FzZSAzNTY3NDpyZXR1cm4gZFM7Y2FzZSAzNTY3NTpyZXR1cm4gcFM7Y2FzZSAzNTY3NjpyZXR1cm4gbVM7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGdTO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4geFM7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiB5UztjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHZTO2Nhc2UgNTEyNTpyZXR1cm4gX1M7Y2FzZSAzNjI5NDpyZXR1cm4gd1M7Y2FzZSAzNjI5NTpyZXR1cm4gTVM7Y2FzZSAzNjI5NjpyZXR1cm4gYlM7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBTUztjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gRVM7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gVFM7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gQVN9fWZ1bmN0aW9uIFJTKG4sdCl7bi51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBMUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gUFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIERTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtNGZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBJUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gTlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIEZTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMTYpO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gelMobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFVTKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCUyhuLHQpe24udW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT1Mobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGtTKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gSFMobix0KXtuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWUyhuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEdTKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gV1Mobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNhZmVTZXRUZXh0dXJlMkQodFtzXXx8djAscltzXSl9ZnVuY3Rpb24gcVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUzRCh0W3NdfHx3MCxyW3NdKX1mdW5jdGlvbiBYUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbc118fE0wLHJbc10pfWZ1bmN0aW9uIFlTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zZXRUZXh0dXJlMkRBcnJheSh0W3NdfHxfMCxyW3NdKX1mdW5jdGlvbiBaUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBSUztjYXNlIDM1NjY0OnJldHVybiBMUztjYXNlIDM1NjY1OnJldHVybiBQUztjYXNlIDM1NjY2OnJldHVybiBEUztjYXNlIDM1Njc0OnJldHVybiBJUztjYXNlIDM1Njc1OnJldHVybiBOUztjYXNlIDM1Njc2OnJldHVybiBGUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gelM7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBVUztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEJTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT1M7Y2FzZSA1MTI1OnJldHVybiBrUztjYXNlIDM2Mjk0OnJldHVybiBIUztjYXNlIDM2Mjk1OnJldHVybiBWUztjYXNlIDM2Mjk2OnJldHVybiBHUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFdTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBxUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBYUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBZU319ZnVuY3Rpb24gSlMobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9Q1ModC50eXBlKX1mdW5jdGlvbiBiMChuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVpTKHQudHlwZSl9YjAucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLFRlKHQsbil9O2Z1bmN0aW9uIFMwKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1TMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKXtsZXQgbz1pW3JdO28uc2V0VmFsdWUobix0W28uaWRdLGUpfX07dmFyIEN1PS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBBZyhuLHQpe24uc2VxLnB1c2godCksbi5tYXBbdC5pZF09dH1mdW5jdGlvbiAkUyhuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKEN1Lmxhc3RJbmRleD0wOzspe2xldCBzPUN1LmV4ZWMoaSksbz1DdS5sYXN0SW5kZXgsYT1zWzFdLGw9c1syXT09PSJdIixjPXNbM107aWYobCYmKGE9YXwwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZvKzI9PT1yKXtBZyhlLGM9PT12b2lkIDA/bmV3IEpTKGEsbix0KTpuZXcgYjAoYSxuLHQpKTticmVha31lbHNle2xldCBoPWUubWFwW2FdO2g9PT12b2lkIDAmJihoPW5ldyBTMChhKSxBZyhlLGgpKSxlPWh9fX1mdW5jdGlvbiBpaShuLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCBlPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcj1uLmdldEFjdGl2ZVVuaWZvcm0odCxpKSxzPW4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKTskUyhyLHMsdGhpcyl9fWlpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTtyIT09dm9pZCAwJiZyLnNldFZhbHVlKG4sZSxpKX07aWkucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO2khPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUobixlLGkpfTtpaS51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPXRbcl0sYT1lW28uaWRdO2EubmVlZHNVcGRhdGUhPT0hMSYmby5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fTtpaS5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9bltpXTtzLmlkIGluIHQmJmUucHVzaChzKX1yZXR1cm4gZX07ZnVuY3Rpb24gQ2cobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfXZhciBLUz0wO2Z1bmN0aW9uIFFTKG4pe2xldCB0PW4uc3BsaXQoYApgKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGpTKG4pe3N3aXRjaChuKXtjYXNlIHJpOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSAkdDpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX1mdW5jdGlvbiBSZyhuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiZyPT09IiI/IiI6ZS50b1VwcGVyQ2FzZSgpK2AKCmArcitgCgpgK1FTKG4uZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiB0RShuLHQpe2xldCBlPWpTKHQpO3JldHVybiJ2ZWM0ICIrbisiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK2VbMF0rZVsxXSsiOyB9In1mdW5jdGlvbiBlRShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIEF3OmU9IkxpbmVhciI7YnJlYWs7Y2FzZSBDdzplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBSdzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgTHc6ZT0iQUNFU0ZpbG1pYyI7YnJlYWs7Y2FzZSBQdzplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIG5FKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fG4uc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoJHMpLmpvaW4oYApgKX1mdW5jdGlvbiBpRShuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTtpIT09ITEmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiByRShuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBzPW4uZ2V0QWN0aXZlQXR0cmliKHQsciksbz1zLm5hbWUsYT0xO3MudHlwZT09PTM1Njc0JiYoYT0yKSxzLnR5cGU9PT0zNTY3NSYmKGE9Mykscy50eXBlPT09MzU2NzYmJihhPTQpLGVbb109e3R5cGU6cy50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxvKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9ZnVuY3Rpb24gJHMobil7cmV0dXJuIG4hPT0iIn1mdW5jdGlvbiBMZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBQZyhuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIHNFPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gcXUobil7cmV0dXJuIG4ucmVwbGFjZShzRSxvRSl9ZnVuY3Rpb24gb0Uobix0KXtsZXQgZT1QdFt0XTtpZihlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gcXUoZSl9dmFyIGFFPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csbEU9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBEZyhuKXtyZXR1cm4gbi5yZXBsYWNlKGxFLEUwKS5yZXBsYWNlKGFFLGNFKX1mdW5jdGlvbiBjRShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksRTAobix0LGUsaSl9ZnVuY3Rpb24gRTAobix0LGUsaSl7bGV0IHI9IiI7Zm9yKGxldCBzPXBhcnNlSW50KHQpO3M8cGFyc2VJbnQoZSk7cysrKXIrPWkucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK3MrIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLHMpO3JldHVybiByfWZ1bmN0aW9uIElnKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtuLnByZWNpc2lvbisiIGludDsiO3JldHVybiBuLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6bi5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gdUUobil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gbi5zaGFkb3dNYXBUeXBlPT09bDA/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjpuLnNoYWRvd01hcFR5cGU9PT1zdz90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6bi5zaGFkb3dNYXBUeXBlPT09SnMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGhFKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIEFvOmNhc2UgQ286dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSBSbDpjYXNlIEtoOnQ9IkVOVk1BUF9UWVBFX0NVQkVfVVYiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGZFKG4pe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIENvOmNhc2UgS2g6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZEUobil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIENsOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBFdzp0PSJFTlZNQVBfQkxFTkRJTkdfTUlYIjticmVhaztjYXNlIFR3OnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIHBFKG4sdCxlLGkpe2xldCByPW4uZ2V0Q29udGV4dCgpLHM9ZS5kZWZpbmVzLG89ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9dUUoZSksYz1oRShlKSx1PWZFKGUpLGg9ZEUoZSksZj1lLmlzV2ViR0wyPyIiOm5FKGUpLGQ9aUUocyksZz1yLmNyZWF0ZVByb2dyYW0oKSx4LHYsbT1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rYApgOiIiO2UuaXNSYXdTaGFkZXJNYXRlcmlhbD8oeD1bZF0uZmlsdGVyKCRzKS5qb2luKGAKYCkseC5sZW5ndGg+MCYmKHgrPWAKYCksdj1bZixkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2Lmxlbmd0aD4wJiYodis9YApgKSk6KHg9W0lnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiZlLmZsYXRTaGFkaW5nPT09ITE/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIglhdHRyaWJ1dGUgbWF0NCBpbnN0YW5jZU1hdHJpeDsiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IiLCIJYXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiCWF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiCWF0dHJpYnV0ZSB2ZWM0IGNvbG9yOyIsIiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIiwiCWF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MTsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiCSNpZmRlZiBVU0VfTU9SUEhOT1JNQUxTIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDI7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiCSNlbHNlIiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDY7IiwiCQlhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiCSNlbmRpZiIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfU0tJTk5JTkciLCIJYXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIglhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx2PVtmLElnKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGQsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsZS50b25lTWFwcGluZyE9PXRpPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsZS50b25lTWFwcGluZyE9PXRpP1B0LnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsZS50b25lTWFwcGluZyE9PXRpP2VFKCJ0b25lTWFwcGluZyIsZS50b25lTWFwcGluZyk6IiIsZS5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixlLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixQdC5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCx0RSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLGAKYF0uZmlsdGVyKCRzKS5qb2luKGAKYCkpLG89cXUobyksbz1MZyhvLGUpLG89UGcobyxlKSxhPXF1KGEpLGE9TGcoYSxlKSxhPVBnKGEsZSksbz1EZyhvKSxhPURnKGEpLGUuaXNXZWJHTDImJmUuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYobT1gI3ZlcnNpb24gMzAwIGVzCmAseD1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK3gsdj1bIiNkZWZpbmUgdmFyeWluZyBpbiIsZS5nbHNsVmVyc2lvbj09PW5nPyIiOiJsYXlvdXQobG9jYXRpb24gPSAwKSBvdXQgaGlnaHAgdmVjNCBwY19mcmFnQ29sb3I7IixlLmdsc2xWZXJzaW9uPT09bmc/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArdik7bGV0IHA9bSt4K28sYj1tK3YrYSxfPUNnKHIsMzU2MzMscCksUz1DZyhyLDM1NjMyLGIpO2lmKHIuYXR0YWNoU2hhZGVyKGcsXyksci5hdHRhY2hTaGFkZXIoZyxTKSxlLmluZGV4MEF0dHJpYnV0ZU5hbWUhPT12b2lkIDA/ci5iaW5kQXR0cmliTG9jYXRpb24oZywwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ZS5tb3JwaFRhcmdldHM9PT0hMCYmci5iaW5kQXR0cmliTG9jYXRpb24oZywwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZyksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IEg9ci5nZXRQcm9ncmFtSW5mb0xvZyhnKS50cmltKCksdHQ9ci5nZXRTaGFkZXJJbmZvTG9nKF8pLnRyaW0oKSxYPXIuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCkseT0hMCxSPSEwO2lmKHIuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE0KT09PSExKXt5PSExO2xldCBEPVJnKHIsXywidmVydGV4IiksRj1SZyhyLFMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIityLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK3IuZ2V0UHJvZ3JhbVBhcmFtZXRlcihnLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK0grYApgK0QrYApgK0YpfWVsc2UgSCE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsSCk6KHR0PT09IiJ8fFg9PT0iIikmJihSPSExKTtSJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6eSxwcm9ncmFtTG9nOkgsdmVydGV4U2hhZGVyOntsb2c6dHQscHJlZml4Onh9LGZyYWdtZW50U2hhZGVyOntsb2c6WCxwcmVmaXg6dn19KX1yLmRlbGV0ZVNoYWRlcihfKSxyLmRlbGV0ZVNoYWRlcihTKTtsZXQgTDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIEw9PT12b2lkIDAmJihMPW5ldyBpaShyLGcpKSxMfTtsZXQgQTtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIEE9PT12b2lkIDAmJihBPXJFKHIsZykpLEF9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZyksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUtTKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWcsdGhpcy52ZXJ0ZXhTaGFkZXI9Xyx0aGlzLmZyYWdtZW50U2hhZGVyPVMsdGhpc312YXIgbUU9MCxYdT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hhZGVyQ2FjaGU9bmV3IE1hcCx0aGlzLm1hdGVyaWFsQ2FjaGU9bmV3IE1hcH11cGRhdGUodCl7bGV0IGU9dC52ZXJ0ZXhTaGFkZXIsaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoZSkscz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxvPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuIG8uaGFzKHIpPT09ITEmJihvLmFkZChyKSxyLnVzZWRUaW1lcysrKSxvLmhhcyhzKT09PSExJiYoby5hZGQocykscy51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLGkudXNlZFRpbWVzPT09MCYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiBlLmhhcyh0KT09PSExJiZlLnNldCh0LG5ldyBTZXQpLGUuZ2V0KHQpfV9nZXRTaGFkZXJTdGFnZSh0KXtsZXQgZT10aGlzLnNoYWRlckNhY2hlO2lmKGUuaGFzKHQpPT09ITEpe2xldCBpPW5ldyBZdTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LFl1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1tRSsrLHRoaXMudXNlZFRpbWVzPTB9fTtmdW5jdGlvbiBnRShuLHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgaWwsbD1uZXcgWHUsYz1bXSx1PXIuaXNXZWJHTDIsaD1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1yLmZsb2F0VmVydGV4VGV4dHVyZXMsZD1yLm1heFZlcnRleFVuaWZvcm1zLGc9ci52ZXJ0ZXhUZXh0dXJlcyx4PXIucHJlY2lzaW9uLHY9e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiBtKHkpe2xldCBEPXkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigoZC0yMCkvNCksTj1NYXRoLm1pbih6LEQubGVuZ3RoKTtyZXR1cm4gTjxELmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitELmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK04rIi4iKSwwKTpOfX1mdW5jdGlvbiBwKHksUixELEYseil7bGV0IE49Ri5mb2csVj15LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFE9KHkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh5LmVudk1hcHx8ViksYXQ9dlt5LnR5cGVdLEc9ei5pc1NraW5uZWRNZXNoP20oeik6MDt5LnByZWNpc2lvbiE9PW51bGwmJih4PXIuZ2V0TWF4UHJlY2lzaW9uKHkucHJlY2lzaW9uKSx4IT09eS5wcmVjaXNpb24mJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtLmdldFBhcmFtZXRlcnM6Iix5LnByZWNpc2lvbiwibm90IHN1cHBvcnRlZCwgdXNpbmciLHgsImluc3RlYWQuIikpO2xldCAkLGx0LGR0LHh0O2lmKGF0KXtsZXQgQj1mblthdF07JD1CLnZlcnRleFNoYWRlcixsdD1CLmZyYWdtZW50U2hhZGVyfWVsc2UgJD15LnZlcnRleFNoYWRlcixsdD15LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHkpLGR0PWwuZ2V0VmVydGV4U2hhZGVySUQoeSkseHQ9bC5nZXRGcmFnbWVudFNoYWRlcklEKHkpO2xldCBrPW4uZ2V0UmVuZGVyVGFyZ2V0KCksRnQ9eS5hbHBoYVRlc3Q+MCxtdD15LmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmF0LHNoYWRlck5hbWU6eS50eXBlLHZlcnRleFNoYWRlcjokLGZyYWdtZW50U2hhZGVyOmx0LGRlZmluZXM6eS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmR0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6eHQsaXNSYXdTaGFkZXJNYXRlcmlhbDp5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjp5Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjp4LGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmcsb3V0cHV0RW5jb2Rpbmc6az09PW51bGw/bi5vdXRwdXRFbmNvZGluZzprLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9rLnRleHR1cmUuZW5jb2Rpbmc6cmksbWFwOiEheS5tYXAsbWF0Y2FwOiEheS5tYXRjYXAsZW52TWFwOiEhUSxlbnZNYXBNb2RlOlEmJlEubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFRJiYoUS5tYXBwaW5nPT09Umx8fFEubWFwcGluZz09PUtoKSxsaWdodE1hcDohIXkubGlnaHRNYXAsYW9NYXA6ISF5LmFvTWFwLGVtaXNzaXZlTWFwOiEheS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEheS5idW1wTWFwLG5vcm1hbE1hcDohIXkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PWp3LHRhbmdlbnRTcGFjZU5vcm1hbE1hcDp5Lm5vcm1hbE1hcFR5cGU9PT10cyxkZWNvZGVWaWRlb1RleHR1cmU6ISF5Lm1hcCYmeS5tYXAuaXNWaWRlb1RleHR1cmU9PT0hMCYmeS5tYXAuZW5jb2Rpbmc9PT0kdCxjbGVhcmNvYXQ6bXQsY2xlYXJjb2F0TWFwOm10JiYhIXkuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDptdCYmISF5LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6bXQmJiEheS5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEheS5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEheS5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEheS5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF5LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEheS5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEheS5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEheS5hbHBoYU1hcCxhbHBoYVRlc3Q6RnQsYWxwaGFXcml0ZTp5LmFscGhhV3JpdGV8fHkudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISF5LmdyYWRpZW50TWFwLHNoZWVuOnkuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEheS5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEheS5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246eS50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISF5LnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISF5LnRoaWNrbmVzc01hcCxjb21iaW5lOnkuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIXkubm9ybWFsTWFwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLnRhbmdlbnQsdmVydGV4Q29sb3JzOnkudmVydGV4Q29sb3JzLHZlcnRleEFscGhhczp5LnZlcnRleENvbG9ycz09PSEwJiYhIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiZ6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHZlcnRleFV2czohIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE1hcHx8ISF5LmNsZWFyY29hdFJvdWdobmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8ISF5LmRpc3BsYWNlbWVudE1hcHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCx1dnNWZXJ0ZXhPbmx5OiEoISF5Lm1hcHx8ISF5LmJ1bXBNYXB8fCEheS5ub3JtYWxNYXB8fCEheS5zcGVjdWxhck1hcHx8ISF5LmFscGhhTWFwfHwhIXkuZW1pc3NpdmVNYXB8fCEheS5yb3VnaG5lc3NNYXB8fCEheS5tZXRhbG5lc3NNYXB8fCEheS5jbGVhcmNvYXROb3JtYWxNYXB8fHkudHJhbnNtaXNzaW9uPjB8fCEheS50cmFuc21pc3Npb25NYXB8fCEheS50aGlja25lc3NNYXB8fCEheS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISF5LnNwZWN1bGFyQ29sb3JNYXB8fHkuc2hlZW4+MHx8ISF5LnNoZWVuQ29sb3JNYXB8fCEheS5zaGVlblJvdWdobmVzc01hcCkmJiEheS5kaXNwbGFjZW1lbnRNYXAsZm9nOiEhTix1c2VGb2c6eS5mb2csZm9nRXhwMjpOJiZOLmlzRm9nRXhwMixmbGF0U2hhZGluZzohIXkuZmxhdFNoYWRpbmcsc2l6ZUF0dGVudWF0aW9uOnkuc2l6ZUF0dGVudWF0aW9uLGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6aCxza2lubmluZzp6LmlzU2tpbm5lZE1lc2g9PT0hMCYmRz4wLG1heEJvbmVzOkcsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpSLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpSLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOlIuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6Ui5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpSLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpSLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpSLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOlIuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6by5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjpvLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6eS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDpuLnNoYWRvd01hcC5lbmFibGVkJiZELmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6bi5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzp5LnRvbmVNYXBwZWQ/bi50b25lTWFwcGluZzp0aSxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp5LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDp5LnNpZGU9PT1IcixmbGlwU2lkZWQ6eS5zaWRlPT09aGUsZGVwdGhQYWNraW5nOnkuZGVwdGhQYWNraW5nIT09dm9pZCAwP3kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6eS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTp5LmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKHkpe2xldCBSPVtdO2lmKHkuc2hhZGVySUQ/Ui5wdXNoKHkuc2hhZGVySUQpOihSLnB1c2goeS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksUi5wdXNoKHkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLHkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IEQgaW4geS5kZWZpbmVzKVIucHVzaChEKSxSLnB1c2goeS5kZWZpbmVzW0RdKTtyZXR1cm4geS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihfKFIseSksUyhSLHkpLFIucHVzaChuLm91dHB1dEVuY29kaW5nKSksUi5wdXNoKHkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxSLmpvaW4oKX1mdW5jdGlvbiBfKHksUil7eS5wdXNoKFIucHJlY2lzaW9uKSx5LnB1c2goUi5vdXRwdXRFbmNvZGluZykseS5wdXNoKFIuZW52TWFwTW9kZSkseS5wdXNoKFIuY29tYmluZSkseS5wdXNoKFIudmVydGV4VXZzKSx5LnB1c2goUi5mb2dFeHAyKSx5LnB1c2goUi5zaXplQXR0ZW51YXRpb24pLHkucHVzaChSLm1heEJvbmVzKSx5LnB1c2goUi5tb3JwaFRhcmdldHNDb3VudCkseS5wdXNoKFIubnVtRGlyTGlnaHRzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0cykseS5wdXNoKFIubnVtU3BvdExpZ2h0cykseS5wdXNoKFIubnVtSGVtaUxpZ2h0cykseS5wdXNoKFIubnVtUmVjdEFyZWFMaWdodHMpLHkucHVzaChSLm51bURpckxpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtUG9pbnRMaWdodFNoYWRvd3MpLHkucHVzaChSLm51bVNwb3RMaWdodFNoYWRvd3MpLHkucHVzaChSLnNoYWRvd01hcFR5cGUpLHkucHVzaChSLnRvbmVNYXBwaW5nKSx5LnB1c2goUi5udW1DbGlwcGluZ1BsYW5lcykseS5wdXNoKFIubnVtQ2xpcEludGVyc2VjdGlvbikseS5wdXNoKFIuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gUyh5LFIpe2EuZGlzYWJsZUFsbCgpLFIuaXNXZWJHTDImJmEuZW5hYmxlKDApLFIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksUi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxSLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksUi5tYXAmJmEuZW5hYmxlKDQpLFIubWF0Y2FwJiZhLmVuYWJsZSg1KSxSLmVudk1hcCYmYS5lbmFibGUoNiksUi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLFIubGlnaHRNYXAmJmEuZW5hYmxlKDgpLFIuYW9NYXAmJmEuZW5hYmxlKDkpLFIuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxSLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxSLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLFIub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxSLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLFIuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksUi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxSLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLFIuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksUi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxSLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksUi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxSLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLFIuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxSLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksUi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxSLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLFIudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksUi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxSLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksUi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksUi5mb2cmJmEuZW5hYmxlKDMxKSx5LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxSLnVzZUZvZyYmYS5lbmFibGUoMCksUi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksUi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxSLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxSLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLFIubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxSLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksUi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLFIuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksUi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksUi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLFIuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksUi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxSLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLFIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxSLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxSLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLFIudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksUi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxSLnNoZWVuJiZhLmVuYWJsZSgxOSksUi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksUi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMikseS5wdXNoKGEubWFzayl9ZnVuY3Rpb24gTCh5KXtsZXQgUj12W3kudHlwZV0sRDtpZihSKXtsZXQgRj1mbltSXTtEPXBNLmNsb25lKEYudW5pZm9ybXMpfWVsc2UgRD15LnVuaWZvcm1zO3JldHVybiBEfWZ1bmN0aW9uIEEoeSxSKXtsZXQgRDtmb3IobGV0IEY9MCx6PWMubGVuZ3RoO0Y8ejtGKyspe2xldCBOPWNbRl07aWYoTi5jYWNoZUtleT09PVIpe0Q9TiwrK0QudXNlZFRpbWVzO2JyZWFrfX1yZXR1cm4gRD09PXZvaWQgMCYmKEQ9bmV3IHBFKG4sUix5LHMpLGMucHVzaChEKSksRH1mdW5jdGlvbiBIKHkpe2lmKC0teS51c2VkVGltZXM9PT0wKXtsZXQgUj1jLmluZGV4T2YoeSk7Y1tSXT1jW2MubGVuZ3RoLTFdLGMucG9wKCkseS5kZXN0cm95KCl9fWZ1bmN0aW9uIHR0KHkpe2wucmVtb3ZlKHkpfWZ1bmN0aW9uIFgoKXtsLmRpc3Bvc2UoKX1yZXR1cm57Z2V0UGFyYW1ldGVyczpwLGdldFByb2dyYW1DYWNoZUtleTpiLGdldFVuaWZvcm1zOkwsYWNxdWlyZVByb2dyYW06QSxyZWxlYXNlUHJvZ3JhbTpILHJlbGVhc2VTaGFkZXJDYWNoZTp0dCxwcm9ncmFtczpjLGRpc3Bvc2U6WH19ZnVuY3Rpb24geEUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KHMpe2xldCBvPW4uZ2V0KHMpO3JldHVybiBvPT09dm9pZCAwJiYobz17fSxuLnNldChzLG8pKSxvfWZ1bmN0aW9uIGUocyl7bi5kZWxldGUocyl9ZnVuY3Rpb24gaShzLG8sYSl7bi5nZXQocylbb109YX1mdW5jdGlvbiByKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQscmVtb3ZlOmUsdXBkYXRlOmksZGlzcG9zZTpyfX1mdW5jdGlvbiB5RShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/bi5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOm4ueiE9PXQuej9uLnotdC56Om4uaWQtdC5pZH1mdW5jdGlvbiBOZyhuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIEZnKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoLGYsZCxnLHgsdil7bGV0IG09blt0XTtyZXR1cm4gbT09PXZvaWQgMD8obT17aWQ6aC5pZCxvYmplY3Q6aCxnZW9tZXRyeTpmLG1hdGVyaWFsOmQsZ3JvdXBPcmRlcjpnLHJlbmRlck9yZGVyOmgucmVuZGVyT3JkZXIsejp4LGdyb3VwOnZ9LG5bdF09bSk6KG0uaWQ9aC5pZCxtLm9iamVjdD1oLG0uZ2VvbWV0cnk9ZixtLm1hdGVyaWFsPWQsbS5ncm91cE9yZGVyPWcsbS5yZW5kZXJPcmRlcj1oLnJlbmRlck9yZGVyLG0uej14LG0uZ3JvdXA9diksdCsrLG19ZnVuY3Rpb24gYShoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnB1c2gobSk6ZC50cmFuc3BhcmVudD09PSEwP3IucHVzaChtKTplLnB1c2gobSl9ZnVuY3Rpb24gbChoLGYsZCxnLHgsdil7bGV0IG09byhoLGYsZCxnLHgsdik7ZC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQobSk6ZC50cmFuc3BhcmVudD09PSEwP3IudW5zaGlmdChtKTplLnVuc2hpZnQobSl9ZnVuY3Rpb24gYyhoLGYpe2UubGVuZ3RoPjEmJmUuc29ydChofHx5RSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fE5nKSxyLmxlbmd0aD4xJiZyLnNvcnQoZnx8TmcpfWZ1bmN0aW9uIHUoKXtmb3IobGV0IGg9dCxmPW4ubGVuZ3RoO2g8ZjtoKyspe2xldCBkPW5baF07aWYoZC5pZD09PW51bGwpYnJlYWs7ZC5pZD1udWxsLGQub2JqZWN0PW51bGwsZC5nZW9tZXRyeT1udWxsLGQubWF0ZXJpYWw9bnVsbCxkLmdyb3VwPW51bGx9fXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6cyxwdXNoOmEsdW5zaGlmdDpsLGZpbmlzaDp1LHNvcnQ6Y319ZnVuY3Rpb24gdkUoKXtsZXQgbj1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KGkscil7bGV0IHM7cmV0dXJuIG4uaGFzKGkpPT09ITE/KHM9bmV3IEZnLG4uc2V0KGksW3NdKSk6cj49bi5nZXQoaSkubGVuZ3RoPyhzPW5ldyBGZyxuLmdldChpKS5wdXNoKHMpKTpzPW4uZ2V0KGkpW3JdLHN9ZnVuY3Rpb24gZSgpe249bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LGRpc3Bvc2U6ZX19ZnVuY3Rpb24gX0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsZGlyZWN0aW9uOm5ldyBULGNvbG9yOm5ldyBmdCxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxza3lDb2xvcjpuZXcgZnQsZ3JvdW5kQ29sb3I6bmV3IGZ0fTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBmdCxwb3NpdGlvbjpuZXcgVCxoYWxmV2lkdGg6bmV3IFQsaGFsZkhlaWdodDpuZXcgVH07YnJlYWt9cmV0dXJuIG5bdC5pZF09ZSxlfX19ZnVuY3Rpb24gd0UoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKG5bdC5pZF0hPT12b2lkIDApcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEt9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBLLHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX12YXIgTUU9MDtmdW5jdGlvbiBiRShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gU0Uobix0KXtsZXQgZT1uZXcgX0UsaT13RSgpLHI9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylyLnByb2JlLnB1c2gobmV3IFQpO2xldCBzPW5ldyBULG89bmV3IHd0LGE9bmV3IHd0O2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLGQ9MCxnPTA7Zm9yKGxldCB0dD0wO3R0PDk7dHQrKylyLnByb2JlW3R0XS5zZXQoMCwwLDApO2xldCB4PTAsdj0wLG09MCxwPTAsYj0wLF89MCxTPTAsTD0wO3Uuc29ydChiRSk7bGV0IEE9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IHR0PTAsWD11Lmxlbmd0aDt0dDxYO3R0Kyspe2xldCB5PXVbdHRdLFI9eS5jb2xvcixEPXkuaW50ZW5zaXR5LEY9eS5kaXN0YW5jZSx6PXkuc2hhZG93JiZ5LnNoYWRvdy5tYXA/eS5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZih5LmlzQW1iaWVudExpZ2h0KWYrPVIucipEKkEsZCs9Ui5nKkQqQSxnKz1SLmIqRCpBO2Vsc2UgaWYoeS5pc0xpZ2h0UHJvYmUpZm9yKGxldCBOPTA7Tjw5O04rKylyLnByb2JlW05dLmFkZFNjYWxlZFZlY3Rvcih5LnNoLmNvZWZmaWNpZW50c1tOXSxEKTtlbHNlIGlmKHkuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuZGlyZWN0aW9uYWxTaGFkb3dbeF09USxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW3hdPXosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeFt4XT15LnNoYWRvdy5tYXRyaXgsXysrfXIuZGlyZWN0aW9uYWxbeF09Tix4Kyt9ZWxzZSBpZih5LmlzU3BvdExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbih5Lm1hdHJpeFdvcmxkKSxOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmRpc3RhbmNlPUYsTi5jb25lQ29zPU1hdGguY29zKHkuYW5nbGUpLE4ucGVudW1icmFDb3M9TWF0aC5jb3MoeS5hbmdsZSooMS15LnBlbnVtYnJhKSksTi5kZWNheT15LmRlY2F5LHkuY2FzdFNoYWRvdyl7bGV0IFY9eS5zaGFkb3csUT1pLmdldCh5KTtRLnNoYWRvd0JpYXM9Vi5iaWFzLFEuc2hhZG93Tm9ybWFsQmlhcz1WLm5vcm1hbEJpYXMsUS5zaGFkb3dSYWRpdXM9Vi5yYWRpdXMsUS5zaGFkb3dNYXBTaXplPVYubWFwU2l6ZSxyLnNwb3RTaGFkb3dbbV09USxyLnNwb3RTaGFkb3dNYXBbbV09eixyLnNwb3RTaGFkb3dNYXRyaXhbbV09eS5zaGFkb3cubWF0cml4LEwrK31yLnNwb3RbbV09TixtKyt9ZWxzZSBpZih5LmlzUmVjdEFyZWFMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5jb2xvci5jb3B5KFIpLm11bHRpcGx5U2NhbGFyKEQpLE4uaGFsZldpZHRoLnNldCh5LndpZHRoKi41LDAsMCksTi5oYWxmSGVpZ2h0LnNldCgwLHkuaGVpZ2h0Ki41LDApLHIucmVjdEFyZWFbcF09TixwKyt9ZWxzZSBpZih5LmlzUG9pbnRMaWdodCl7bGV0IE49ZS5nZXQoeSk7aWYoTi5jb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKHkuaW50ZW5zaXR5KkEpLE4uZGlzdGFuY2U9eS5kaXN0YW5jZSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLFEuc2hhZG93Q2FtZXJhTmVhcj1WLmNhbWVyYS5uZWFyLFEuc2hhZG93Q2FtZXJhRmFyPVYuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3ZdPVEsci5wb2ludFNoYWRvd01hcFt2XT16LHIucG9pbnRTaGFkb3dNYXRyaXhbdl09eS5zaGFkb3cubWF0cml4LFMrK31yLnBvaW50W3ZdPU4sdisrfWVsc2UgaWYoeS5pc0hlbWlzcGhlcmVMaWdodCl7bGV0IE49ZS5nZXQoeSk7Ti5za3lDb2xvci5jb3B5KHkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksTi5ncm91bmRDb2xvci5jb3B5KHkuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKEQqQSksci5oZW1pW2JdPU4sYisrfX1wPjAmJih0LmlzV2ViR0wyfHxuLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0ZMT0FUXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0ZMT0FUXzIpOm4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITA/KHIucmVjdEFyZWFMVEMxPW90LkxUQ19IQUxGXzEsci5yZWN0QXJlYUxUQzI9b3QuTFRDX0hBTEZfMik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVW5hYmxlIHRvIHVzZSBSZWN0QXJlYUxpZ2h0LiBNaXNzaW5nIFdlYkdMIGV4dGVuc2lvbnMuIikpLHIuYW1iaWVudFswXT1mLHIuYW1iaWVudFsxXT1kLHIuYW1iaWVudFsyXT1nO2xldCBIPXIuaGFzaDsoSC5kaXJlY3Rpb25hbExlbmd0aCE9PXh8fEgucG9pbnRMZW5ndGghPT12fHxILnNwb3RMZW5ndGghPT1tfHxILnJlY3RBcmVhTGVuZ3RoIT09cHx8SC5oZW1pTGVuZ3RoIT09Ynx8SC5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1ffHxILm51bVBvaW50U2hhZG93cyE9PVN8fEgubnVtU3BvdFNoYWRvd3MhPT1MKSYmKHIuZGlyZWN0aW9uYWwubGVuZ3RoPXgsci5zcG90Lmxlbmd0aD1tLHIucmVjdEFyZWEubGVuZ3RoPXAsci5wb2ludC5sZW5ndGg9dixyLmhlbWkubGVuZ3RoPWIsci5kaXJlY3Rpb25hbFNoYWRvdy5sZW5ndGg9XyxyLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aD1fLHIucG9pbnRTaGFkb3cubGVuZ3RoPVMsci5wb2ludFNoYWRvd01hcC5sZW5ndGg9UyxyLnNwb3RTaGFkb3cubGVuZ3RoPUwsci5zcG90U2hhZG93TWFwLmxlbmd0aD1MLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgubGVuZ3RoPV8sci5wb2ludFNoYWRvd01hdHJpeC5sZW5ndGg9UyxyLnNwb3RTaGFkb3dNYXRyaXgubGVuZ3RoPUwsSC5kaXJlY3Rpb25hbExlbmd0aD14LEgucG9pbnRMZW5ndGg9dixILnNwb3RMZW5ndGg9bSxILnJlY3RBcmVhTGVuZ3RoPXAsSC5oZW1pTGVuZ3RoPWIsSC5udW1EaXJlY3Rpb25hbFNoYWRvd3M9XyxILm51bVBvaW50U2hhZG93cz1TLEgubnVtU3BvdFNoYWRvd3M9TCxyLnZlcnNpb249TUUrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAsZD0wLGc9MCx4PTAsdj0wLG09aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCBwPTAsYj11Lmxlbmd0aDtwPGI7cCsrKXtsZXQgXz11W3BdO2lmKF8uaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgUz1yLmRpcmVjdGlvbmFsW2ZdO1MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxzLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLnRhcmdldC5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24uc3ViKHMpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxmKyt9ZWxzZSBpZihfLmlzU3BvdExpZ2h0KXtsZXQgUz1yLnNwb3RbZ107Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksUy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGcrK31lbHNlIGlmKF8uaXNSZWN0QXJlYUxpZ2h0KXtsZXQgUz1yLnJlY3RBcmVhW3hdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGEuaWRlbnRpdHkoKSxvLmNvcHkoXy5tYXRyaXhXb3JsZCksby5wcmVtdWx0aXBseShtKSxhLmV4dHJhY3RSb3RhdGlvbihvKSxTLmhhbGZXaWR0aC5zZXQoXy53aWR0aCouNSwwLDApLFMuaGFsZkhlaWdodC5zZXQoMCxfLmhlaWdodCouNSwwKSxTLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksUy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSx4Kyt9ZWxzZSBpZihfLmlzUG9pbnRMaWdodCl7bGV0IFM9ci5wb2ludFtkXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxkKyt9ZWxzZSBpZihfLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgUz1yLmhlbWlbdl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihtKSxTLmRpcmVjdGlvbi5ub3JtYWxpemUoKSx2Kyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTpyfX1mdW5jdGlvbiB6ZyhuLHQpe2xldCBlPW5ldyBTRShuLHQpLGk9W10scj1bXTtmdW5jdGlvbiBzKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfWZ1bmN0aW9uIG8oaCl7aS5wdXNoKGgpfWZ1bmN0aW9uIGEoaCl7ci5wdXNoKGgpfWZ1bmN0aW9uIGwoaCl7ZS5zZXR1cChpLGgpfWZ1bmN0aW9uIGMoaCl7ZS5zZXR1cFZpZXcoaSxoKX1yZXR1cm57aW5pdDpzLHN0YXRlOntsaWdodHNBcnJheTppLHNoYWRvd3NBcnJheTpyLGxpZ2h0czplfSxzZXR1cExpZ2h0czpsLHNldHVwTGlnaHRzVmlldzpjLHB1c2hMaWdodDpvLHB1c2hTaGFkb3c6YX19ZnVuY3Rpb24gRUUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKHMsbz0wKXtsZXQgYTtyZXR1cm4gZS5oYXMocyk9PT0hMT8oYT1uZXcgemcobix0KSxlLnNldChzLFthXSkpOm8+PWUuZ2V0KHMpLmxlbmd0aD8oYT1uZXcgemcobix0KSxlLmdldChzKS5wdXNoKGEpKTphPWUuZ2V0KHMpW29dLGF9ZnVuY3Rpb24gcigpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDppLGRpc3Bvc2U6cn19dmFyIGNsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEZXB0aE1hdGVyaWFsIix0aGlzLmRlcHRoUGFja2luZz1Ldyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtjbC5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgdWw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IFQsdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTt1bC5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgVEU9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxBRT1gdW5pZm9ybSBzYW1wbGVyMkQgc2hhZG93X3Bhc3M7CnVuaWZvcm0gdmVjMiByZXNvbHV0aW9uOwp1bmlmb3JtIGZsb2F0IHJhZGl1czsKI2luY2x1ZGUgPHBhY2tpbmc+CnZvaWQgbWFpbigpIHsKCWNvbnN0IGZsb2F0IHNhbXBsZXMgPSBmbG9hdCggVlNNX1NBTVBMRVMgKTsKCWZsb2F0IG1lYW4gPSAwLjA7CglmbG9hdCBzcXVhcmVkX21lYW4gPSAwLjA7CglmbG9hdCB1dlN0cmlkZSA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogMi4wIC8gKCBzYW1wbGVzIC0gMS4wICk7CglmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDsKCWZvciAoIGZsb2F0IGkgPSAwLjA7IGkgPCBzYW1wbGVzOyBpICsrICkgewoJCWZsb2F0IHV2T2Zmc2V0ID0gdXZTdGFydCArIGkgKiB1dlN0cmlkZTsKCQkjaWZkZWYgSE9SSVpPTlRBTF9QQVNTCgkJCXZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkaXN0cmlidXRpb24ueDsKCQkJc3F1YXJlZF9tZWFuICs9IGRpc3RyaWJ1dGlvbi55ICogZGlzdHJpYnV0aW9uLnkgKyBkaXN0cmlidXRpb24ueCAqIGRpc3RyaWJ1dGlvbi54OwoJCSNlbHNlCgkJCWZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTsKCQkJbWVhbiArPSBkZXB0aDsKCQkJc3F1YXJlZF9tZWFuICs9IGRlcHRoICogZGVwdGg7CgkJI2VuZGlmCgl9CgltZWFuID0gbWVhbiAvIHNhbXBsZXM7CglzcXVhcmVkX21lYW4gPSBzcXVhcmVkX21lYW4gLyBzYW1wbGVzOwoJZmxvYXQgc3RkX2RldiA9IHNxcnQoIHNxdWFyZWRfbWVhbiAtIG1lYW4gKiBtZWFuICk7CglnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApOwp9YDtmdW5jdGlvbiBUMChuLHQsZSl7bGV0IGk9bmV3IHFyLHI9bmV3IEsscz1uZXcgSyxvPW5ldyBXdCxhPW5ldyBjbCh7ZGVwdGhQYWNraW5nOlF3fSksbD1uZXcgdWwsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsaD17MDpoZSwxOmVvLDI6SHJ9LGY9bmV3IEZuKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBLfSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6VEUsZnJhZ21lbnRTaGFkZXI6QUV9KSxkPWYuY2xvbmUoKTtkLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGc9bmV3IEh0O2cuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgeD1uZXcgb2UoZyxmKSx2PXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1sMCx0aGlzLnJlbmRlcj1mdW5jdGlvbihfLFMsTCl7aWYodi5lbmFibGVkPT09ITF8fHYuYXV0b1VwZGF0ZT09PSExJiZ2Lm5lZWRzVXBkYXRlPT09ITF8fF8ubGVuZ3RoPT09MClyZXR1cm47bGV0IEE9bi5nZXRSZW5kZXJUYXJnZXQoKSxIPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx0dD1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksWD1uLnN0YXRlO1guc2V0QmxlbmRpbmcoam4pLFguYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxYLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksWC5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCB5PTAsUj1fLmxlbmd0aDt5PFI7eSsrKXtsZXQgRD1fW3ldLEY9RC5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLEQsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtyLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKHIubXVsdGlwbHkoeikscy5jb3B5KEYubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKHMueD1NYXRoLmZsb29yKHUvei54KSxyLng9cy54KnoueCxGLm1hcFNpemUueD1zLngpLHIueT51JiYocy55PU1hdGguZmxvb3IodS96LnkpLHIueT1zLnkqei55LEYubWFwU2l6ZS55PXMueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1Kcyl7bGV0IFY9e21pbkZpbHRlcjpiZSxtYWdGaWx0ZXI6YmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IE5lKHIueCxyLnksViksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFY9e21pbkZpbHRlcjpmZSxtYWdGaWx0ZXI6ZmUsZm9ybWF0OlJlfTtGLm1hcD1uZXcgTmUoci54LHIueSxWKSxGLm1hcC50ZXh0dXJlLm5hbWU9RC5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9bi5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLG4uY2xlYXIoKTtsZXQgTj1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFY9MDtWPE47VisrKXtsZXQgUT1GLmdldFZpZXdwb3J0KFYpO28uc2V0KHMueCpRLngscy55KlEueSxzLngqUS56LHMueSpRLncpLFgudmlld3BvcnQobyksRi51cGRhdGVNYXRyaWNlcyhELFYpLGk9Ri5nZXRGcnVzdHVtKCksYihTLEwsRi5jYW1lcmEsRCx0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09SnMmJm0oRixMKSxGLm5lZWRzVXBkYXRlPSExfXYubmVlZHNVcGRhdGU9ITEsbi5zZXRSZW5kZXJUYXJnZXQoQSxILHR0KX07ZnVuY3Rpb24gbShfLFMpe2xldCBMPXQudXBkYXRlKHgpO2YuZGVmaW5lcy5WU01fU0FNUExFUyE9PV8uYmx1clNhbXBsZXMmJihmLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxkLmRlZmluZXMuVlNNX1NBTVBMRVM9Xy5ibHVyU2FtcGxlcyxmLm5lZWRzVXBkYXRlPSEwLGQubmVlZHNVcGRhdGU9ITApLGYudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXAudGV4dHVyZSxmLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Xy5tYXBTaXplLGYudW5pZm9ybXMucmFkaXVzLnZhbHVlPV8ucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KF8ubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGYseCxudWxsKSxkLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPV8ubWFwUGFzcy50ZXh0dXJlLGQudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChTLG51bGwsTCxkLHgsbnVsbCl9ZnVuY3Rpb24gcChfLFMsTCxBLEgsdHQsWCl7bGV0IHk9bnVsbCxSPUEuaXNQb2ludExpZ2h0PT09ITA/Xy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOl8uY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihSIT09dm9pZCAwP3k9Ujp5PUEuaXNQb2ludExpZ2h0PT09ITA/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJkwuY2xpcFNoYWRvd3M9PT0hMCYmTC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxMLmRpc3BsYWNlbWVudE1hcCYmTC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fEwuYWxwaGFNYXAmJkwuYWxwaGFUZXN0PjApe2xldCBEPXkudXVpZCxGPUwudXVpZCx6PWNbRF07ej09PXZvaWQgMCYmKHo9e30sY1tEXT16KTtsZXQgTj16W0ZdO049PT12b2lkIDAmJihOPXkuY2xvbmUoKSx6W0ZdPU4pLHk9Tn1yZXR1cm4geS52aXNpYmxlPUwudmlzaWJsZSx5LndpcmVmcmFtZT1MLndpcmVmcmFtZSxYPT09SnM/eS5zaWRlPUwuc2hhZG93U2lkZSE9PW51bGw/TC5zaGFkb3dTaWRlOkwuc2lkZTp5LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6aFtMLnNpZGVdLHkuYWxwaGFNYXA9TC5hbHBoYU1hcCx5LmFscGhhVGVzdD1MLmFscGhhVGVzdCx5LmNsaXBTaGFkb3dzPUwuY2xpcFNoYWRvd3MseS5jbGlwcGluZ1BsYW5lcz1MLmNsaXBwaW5nUGxhbmVzLHkuY2xpcEludGVyc2VjdGlvbj1MLmNsaXBJbnRlcnNlY3Rpb24seS5kaXNwbGFjZW1lbnRNYXA9TC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZT1MLmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcz1MLmRpc3BsYWNlbWVudEJpYXMseS53aXJlZnJhbWVMaW5ld2lkdGg9TC53aXJlZnJhbWVMaW5ld2lkdGgseS5saW5ld2lkdGg9TC5saW5ld2lkdGgsQS5pc1BvaW50TGlnaHQ9PT0hMCYmeS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJih5LnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSx5Lm5lYXJEaXN0YW5jZT1ILHkuZmFyRGlzdGFuY2U9dHQpLHl9ZnVuY3Rpb24gYihfLFMsTCxBLEgpe2lmKF8udmlzaWJsZT09PSExKXJldHVybjtpZihfLmxheWVycy50ZXN0KFMubGF5ZXJzKSYmKF8uaXNNZXNofHxfLmlzTGluZXx8Xy5pc1BvaW50cykmJihfLmNhc3RTaGFkb3d8fF8ucmVjZWl2ZVNoYWRvdyYmSD09PUpzKSYmKCFfLmZydXN0dW1DdWxsZWR8fGkuaW50ZXJzZWN0c09iamVjdChfKSkpe18ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTC5tYXRyaXhXb3JsZEludmVyc2UsXy5tYXRyaXhXb3JsZCk7bGV0IHk9dC51cGRhdGUoXyksUj1fLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoUikpe2xldCBEPXkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9RC5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49RFtGXSxWPVJbTi5tYXRlcmlhbEluZGV4XTtpZihWJiZWLnZpc2libGUpe2xldCBRPXAoXyx5LFYsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksUSxfLE4pfX19ZWxzZSBpZihSLnZpc2libGUpe2xldCBEPXAoXyx5LFIsQSxMLm5lYXIsTC5mYXIsSCk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoTCxudWxsLHksRCxfLG51bGwpfX1sZXQgWD1fLmNoaWxkcmVuO2ZvcihsZXQgeT0wLFI9WC5sZW5ndGg7eTxSO3krKyliKFhbeV0sUyxMLEEsSCl9fWZ1bmN0aW9uIENFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIoKXtsZXQgUD0hMSxwdD1uZXcgV3QsaHQ9bnVsbCxFdD1uZXcgV3QoMCwwLDAsMCk7cmV0dXJue3NldE1hc2s6ZnVuY3Rpb24oWSl7aHQhPT1ZJiYhUCYmKG4uY29sb3JNYXNrKFksWSxZLFkpLGh0PVkpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZLE10LER0LGp0LHplKXt6ZT09PSEwJiYoWSo9anQsTXQqPWp0LER0Kj1qdCkscHQuc2V0KFksTXQsRHQsanQpLEV0LmVxdWFscyhwdCk9PT0hMSYmKG4uY2xlYXJDb2xvcihZLE10LER0LGp0KSxFdC5jb3B5KHB0KSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxodD1udWxsLEV0LnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBzKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oWSl7WT9rKDI5MjkpOkZ0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFkpe3B0IT09WSYmIVAmJihuLmRlcHRoTWFzayhZKSxwdD1ZKX0sc2V0RnVuYzpmdW5jdGlvbihZKXtpZihodCE9PVkpe2lmKFkpc3dpdGNoKFkpe2Nhc2UgeXc6bi5kZXB0aEZ1bmMoNTEyKTticmVhaztjYXNlIHZ3Om4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBfdzpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgenU6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHd3Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSBNdzpuLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgYnc6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIFN3Om4uZGVwdGhGdW5jKDUxNyk7YnJlYWs7ZGVmYXVsdDpuLmRlcHRoRnVuYyg1MTUpfWVsc2Ugbi5kZXB0aEZ1bmMoNTE1KTtodD1ZfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFkpe1A9WX0sc2V0Q2xlYXI6ZnVuY3Rpb24oWSl7RXQhPT1ZJiYobi5jbGVhckRlcHRoKFkpLEV0PVkpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGx9fX1mdW5jdGlvbiBvKCl7bGV0IFA9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24obmUpe1B8fChuZT9rKDI5NjApOkZ0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihuZSl7cHQhPT1uZSYmIVAmJihuLnN0ZW5jaWxNYXNrKG5lKSxwdD1uZSl9LHNldEZ1bmM6ZnVuY3Rpb24obmUsZW4seW4peyhodCE9PW5lfHxFdCE9PWVufHxZIT09eW4pJiYobi5zdGVuY2lsRnVuYyhuZSxlbix5biksaHQ9bmUsRXQ9ZW4sWT15bil9LHNldE9wOmZ1bmN0aW9uKG5lLGVuLHluKXsoTXQhPT1uZXx8RHQhPT1lbnx8anQhPT15bikmJihuLnN0ZW5jaWxPcChuZSxlbix5biksTXQ9bmUsRHQ9ZW4sanQ9eW4pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24obmUpe1A9bmV9LHNldENsZWFyOmZ1bmN0aW9uKG5lKXt6ZSE9PW5lJiYobi5jbGVhclN0ZW5jaWwobmUpLHplPW5lKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLHB0PW51bGwsaHQ9bnVsbCxFdD1udWxsLFk9bnVsbCxNdD1udWxsLER0PW51bGwsanQ9bnVsbCx6ZT1udWxsfX19bGV0IGE9bmV3IHIsbD1uZXcgcyxjPW5ldyBvLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsRD1uLmdldFBhcmFtZXRlcigzNTY2MSksRj0hMSx6PTAsTj1uLmdldFBhcmFtZXRlcig3OTM4KTtOLmluZGV4T2YoIldlYkdMIikhPT0tMT8oej1wYXJzZUZsb2F0KC9eV2ViR0wgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0xKTpOLmluZGV4T2YoIk9wZW5HTCBFUyIpIT09LTEmJih6PXBhcnNlRmxvYXQoL15PcGVuR0wgRVMgKFxkKS8uZXhlYyhOKVsxXSksRj16Pj0yKTtsZXQgVj1udWxsLFE9e30sYXQ9bi5nZXRQYXJhbWV0ZXIoMzA4OCksRz1uLmdldFBhcmFtZXRlcigyOTc4KSwkPW5ldyBXdCgpLmZyb21BcnJheShhdCksbHQ9bmV3IFd0KCkuZnJvbUFycmF5KEcpO2Z1bmN0aW9uIGR0KFAscHQsaHQpe2xldCBFdD1uZXcgVWludDhBcnJheSg0KSxZPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoUCxZKSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoUCwxMDI0MCw5NzI4KTtmb3IobGV0IE10PTA7TXQ8aHQ7TXQrKyluLnRleEltYWdlMkQocHQrTXQsMCw2NDA4LDEsMSwwLDY0MDgsNTEyMSxFdCk7cmV0dXJuIFl9bGV0IHh0PXt9O3h0WzM1NTNdPWR0KDM1NTMsMzU1MywxKSx4dFszNDA2N109ZHQoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksaygyOTI5KSxsLnNldEZ1bmMoenUpLEooITEpLGl0KEFtKSxrKDI4ODQpLEMoam4pO2Z1bmN0aW9uIGsoUCl7dVtQXSE9PSEwJiYobi5lbmFibGUoUCksdVtQXT0hMCl9ZnVuY3Rpb24gRnQoUCl7dVtQXSE9PSExJiYobi5kaXNhYmxlKFApLHVbUF09ITEpfWZ1bmN0aW9uIG10KFAscHQpe3JldHVybiBoW1BdIT09cHQ/KG4uYmluZEZyYW1lYnVmZmVyKFAscHQpLGhbUF09cHQsaSYmKFA9PT0zNjAwOSYmKGhbMzYxNjBdPXB0KSxQPT09MzYxNjAmJihoWzM2MDA5XT1wdCkpLCEwKTohMX1mdW5jdGlvbiBTdChQLHB0KXtsZXQgaHQ9ZCxFdD0hMTtpZihQKWlmKGh0PWYuZ2V0KHB0KSxodD09PXZvaWQgMCYmKGh0PVtdLGYuc2V0KHB0LGh0KSksUC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgWT1QLnRleHR1cmU7aWYoaHQubGVuZ3RoIT09WS5sZW5ndGh8fGh0WzBdIT09MzYwNjQpe2ZvcihsZXQgTXQ9MCxEdD1ZLmxlbmd0aDtNdDxEdDtNdCsrKWh0W010XT0zNjA2NCtNdDtodC5sZW5ndGg9WS5sZW5ndGgsRXQ9ITB9fWVsc2UgaHRbMF0hPT0zNjA2NCYmKGh0WzBdPTM2MDY0LEV0PSEwKTtlbHNlIGh0WzBdIT09MTAyOSYmKGh0WzBdPTEwMjksRXQ9ITApO0V0JiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKGh0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChodCkpfWZ1bmN0aW9uIEIoUCl7cmV0dXJuIGchPT1QPyhuLnVzZVByb2dyYW0oUCksZz1QLCEwKTohMX1sZXQgc3Q9e1tJcl06MzI3NzQsW2F3XTozMjc3OCxbbHddOjMyNzc5fTtpZihpKXN0W1BtXT0zMjc3NSxzdFtEbV09MzI3NzY7ZWxzZXtsZXQgUD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO1AhPT1udWxsJiYoc3RbUG1dPVAuTUlOX0VYVCxzdFtEbV09UC5NQVhfRVhUKX1sZXQgbnQ9e1tjd106MCxbdXddOjEsW2h3XTo3NjgsW3UwXTo3NzAsW3h3XTo3NzYsW213XTo3NzQsW2R3XTo3NzIsW2Z3XTo3NjksW2gwXTo3NzEsW2d3XTo3NzUsW3B3XTo3NzN9O2Z1bmN0aW9uIEMoUCxwdCxodCxFdCxZLE10LER0LGp0KXtpZihQPT09am4pe3g9PT0hMCYmKEZ0KDMwNDIpLHg9ITEpO3JldHVybn1pZih4PT09ITEmJihrKDMwNDIpLHg9ITApLFAhPT1vdyl7aWYoUCE9PXZ8fGp0IT09QSl7aWYoKG0hPT1Jcnx8XyE9PUlyKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksbT1JcixfPUlyKSxqdClzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIENtOm4uYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsUCk7YnJlYWt9ZWxzZSBzd2l0Y2goUCl7Y2FzZSBLczpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgUm06bi5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgTG06bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31wPW51bGwsYj1udWxsLFM9bnVsbCxMPW51bGwsdj1QLEE9anR9cmV0dXJufVk9WXx8cHQsTXQ9TXR8fGh0LER0PUR0fHxFdCwocHQhPT1tfHxZIT09XykmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShzdFtwdF0sc3RbWV0pLG09cHQsXz1ZKSwoaHQhPT1wfHxFdCE9PWJ8fE10IT09U3x8RHQhPT1MKSYmKG4uYmxlbmRGdW5jU2VwYXJhdGUobnRbaHRdLG50W0V0XSxudFtNdF0sbnRbRHRdKSxwPWh0LGI9RXQsUz1NdCxMPUR0KSx2PVAsQT1udWxsfWZ1bmN0aW9uIGooUCxwdCl7UC5zaWRlPT09SHI/RnQoMjg4NCk6aygyODg0KTtsZXQgaHQ9UC5zaWRlPT09aGU7cHQmJihodD0haHQpLEooaHQpLFAuYmxlbmRpbmc9PT1LcyYmUC50cmFuc3BhcmVudD09PSExP0Moam4pOkMoUC5ibGVuZGluZyxQLmJsZW5kRXF1YXRpb24sUC5ibGVuZFNyYyxQLmJsZW5kRHN0LFAuYmxlbmRFcXVhdGlvbkFscGhhLFAuYmxlbmRTcmNBbHBoYSxQLmJsZW5kRHN0QWxwaGEsUC5wcmVtdWx0aXBsaWVkQWxwaGEpLGwuc2V0RnVuYyhQLmRlcHRoRnVuYyksbC5zZXRUZXN0KFAuZGVwdGhUZXN0KSxsLnNldE1hc2soUC5kZXB0aFdyaXRlKSxhLnNldE1hc2soUC5jb2xvcldyaXRlKTtsZXQgRXQ9UC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KEV0KSxFdCYmKGMuc2V0TWFzayhQLnN0ZW5jaWxXcml0ZU1hc2spLGMuc2V0RnVuYyhQLnN0ZW5jaWxGdW5jLFAuc3RlbmNpbFJlZixQLnN0ZW5jaWxGdW5jTWFzayksYy5zZXRPcChQLnN0ZW5jaWxGYWlsLFAuc3RlbmNpbFpGYWlsLFAuc3RlbmNpbFpQYXNzKSksdnQoUC5wb2x5Z29uT2Zmc2V0LFAucG9seWdvbk9mZnNldEZhY3RvcixQLnBvbHlnb25PZmZzZXRVbml0cyksUC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9rKDMyOTI2KTpGdCgzMjkyNil9ZnVuY3Rpb24gSihQKXtIIT09UCYmKFA/bi5mcm9udEZhY2UoMjMwNCk6bi5mcm9udEZhY2UoMjMwNSksSD1QKX1mdW5jdGlvbiBpdChQKXtQIT09aXc/KGsoMjg4NCksUCE9PXR0JiYoUD09PUFtP24uY3VsbEZhY2UoMTAyOSk6UD09PXJ3P24uY3VsbEZhY2UoMTAyOCk6bi5jdWxsRmFjZSgxMDMyKSkpOkZ0KDI4ODQpLHR0PVB9ZnVuY3Rpb24gZXQoUCl7UCE9PVgmJihGJiZuLmxpbmVXaWR0aChQKSxYPVApfWZ1bmN0aW9uIHZ0KFAscHQsaHQpe1A/KGsoMzI4MjMpLCh5IT09cHR8fFIhPT1odCkmJihuLnBvbHlnb25PZmZzZXQocHQsaHQpLHk9cHQsUj1odCkpOkZ0KDMyODIzKX1mdW5jdGlvbiBidChQKXtQP2soMzA4OSk6RnQoMzA4OSl9ZnVuY3Rpb24gSXQoUCl7UD09PXZvaWQgMCYmKFA9MzM5ODQrRC0xKSxWIT09UCYmKG4uYWN0aXZlVGV4dHVyZShQKSxWPVApfWZ1bmN0aW9uIFp0KFAscHQpe1Y9PT1udWxsJiZJdCgpO2xldCBodD1RW1ZdO2h0PT09dm9pZCAwJiYoaHQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxRW1ZdPWh0KSwoaHQudHlwZSE9PVB8fGh0LnRleHR1cmUhPT1wdCkmJihuLmJpbmRUZXh0dXJlKFAscHR8fHh0W1BdKSxodC50eXBlPVAsaHQudGV4dHVyZT1wdCl9ZnVuY3Rpb24gcXQoKXtsZXQgUD1RW1ZdO1AhPT12b2lkIDAmJlAudHlwZSE9PXZvaWQgMCYmKG4uYmluZFRleHR1cmUoUC50eXBlLG51bGwpLFAudHlwZT12b2lkIDAsUC50ZXh0dXJlPXZvaWQgMCl9ZnVuY3Rpb24gRSgpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHcoKXt0cnl7bi50ZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHEoKXt0cnl7bi50ZXhTdWJJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHJ0KCl7dHJ5e24uY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gZ3QoKXt0cnl7bi50ZXhTdG9yYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gVygpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBfdCgpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24geXQoKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIHV0KFApeyQuZXF1YWxzKFApPT09ITEmJihuLnNjaXNzb3IoUC54LFAueSxQLnosUC53KSwkLmNvcHkoUCkpfWZ1bmN0aW9uIGN0KFApe2x0LmVxdWFscyhQKT09PSExJiYobi52aWV3cG9ydChQLngsUC55LFAueixQLncpLGx0LmNvcHkoUCkpfWZ1bmN0aW9uIEF0KCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksaT09PSEwJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LFY9bnVsbCxRPXt9LGg9e30sZj1uZXcgV2Vha01hcCxkPVtdLGc9bnVsbCx4PSExLHY9bnVsbCxtPW51bGwscD1udWxsLGI9bnVsbCxfPW51bGwsUz1udWxsLEw9bnVsbCxBPSExLEg9bnVsbCx0dD1udWxsLFg9bnVsbCx5PW51bGwsUj1udWxsLCQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGx0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmssZGlzYWJsZTpGdCxiaW5kRnJhbWVidWZmZXI6bXQsZHJhd0J1ZmZlcnM6U3QsdXNlUHJvZ3JhbTpCLHNldEJsZW5kaW5nOkMsc2V0TWF0ZXJpYWw6aixzZXRGbGlwU2lkZWQ6SixzZXRDdWxsRmFjZTppdCxzZXRMaW5lV2lkdGg6ZXQsc2V0UG9seWdvbk9mZnNldDp2dCxzZXRTY2lzc29yVGVzdDpidCxhY3RpdmVUZXh0dXJlOkl0LGJpbmRUZXh0dXJlOlp0LHVuYmluZFRleHR1cmU6cXQsY29tcHJlc3NlZFRleEltYWdlMkQ6RSx0ZXhJbWFnZTJEOl90LHRleEltYWdlM0Q6eXQsdGV4U3RvcmFnZTJEOmd0LHRleFN0b3JhZ2UzRDpXLHRleFN1YkltYWdlMkQ6dyx0ZXhTdWJJbWFnZTNEOnEsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6cnQsc2Npc3Nvcjp1dCx2aWV3cG9ydDpjdCxyZXNldDpBdH19ZnVuY3Rpb24gUkUobix0LGUsaSxyLHMsbyl7bGV0IGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXIubWF4U2FtcGxlcyxkPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGc9bmV3IFdlYWtNYXAseCx2PSExO3RyeXt2PXR5cGVvZiBPZmZzY3JlZW5DYW52YXMhPSJ1bmRlZmluZWQiJiZuZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKSE9PW51bGx9Y2F0Y2goRSl7fWZ1bmN0aW9uIG0oRSx3KXtyZXR1cm4gdj9uZXcgT2Zmc2NyZWVuQ2FudmFzKEUsdyk6cm8oImNhbnZhcyIpfWZ1bmN0aW9uIHAoRSx3LHEscnQpe2xldCBndD0xO2lmKChFLndpZHRoPnJ0fHxFLmhlaWdodD5ydCkmJihndD1ydC9NYXRoLm1heChFLndpZHRoLEUuaGVpZ2h0KSksZ3Q8MXx8dz09PSEwKWlmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJkUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgVz13P25NOk1hdGguZmxvb3IsX3Q9VyhndCpFLndpZHRoKSx5dD1XKGd0KkUuaGVpZ2h0KTt4PT09dm9pZCAwJiYoeD1tKF90LHl0KSk7bGV0IHV0PXE/bShfdCx5dCk6eDtyZXR1cm4gdXQud2lkdGg9X3QsdXQuaGVpZ2h0PXl0LHV0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKEUsMCwwLF90LHl0KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpIHRvICgiK190KyJ4Iit5dCsiKS4iKSx1dH1lbHNlIHJldHVybiJkYXRhImluIEUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIitFLndpZHRoKyJ4IitFLmhlaWdodCsiKS4iKSxFO3JldHVybiBFfWZ1bmN0aW9uIGIoRSl7cmV0dXJuIGlnKEUud2lkdGgpJiZpZyhFLmhlaWdodCl9ZnVuY3Rpb24gXyhFKXtyZXR1cm4gYT8hMTpFLndyYXBTIT09VmV8fEUud3JhcFQhPT1WZXx8RS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZX1mdW5jdGlvbiBTKEUsdyl7cmV0dXJuIEUuZ2VuZXJhdGVNaXBtYXBzJiZ3JiZFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIEwoRSl7bi5nZW5lcmF0ZU1pcG1hcChFKX1mdW5jdGlvbiBBKEUsdyxxLHJ0LGd0PSExKXtpZihhPT09ITEpcmV0dXJuIHc7aWYoRSE9PW51bGwpe2lmKG5bRV0hPT12b2lkIDApcmV0dXJuIG5bRV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK0UrIiciKX1sZXQgVz13O3JldHVybiB3PT09NjQwMyYmKHE9PT01MTI2JiYoVz0zMzMyNikscT09PTUxMzEmJihXPTMzMzI1KSxxPT09NTEyMSYmKFc9MzMzMjEpKSx3PT09MzMzMTkmJihxPT09NTEyNiYmKFc9MzMzMjgpLHE9PT01MTMxJiYoVz0zMzMyNykscT09PTUxMjEmJihXPTMzMzIzKSksdz09PTY0MDgmJihxPT09NTEyNiYmKFc9MzQ4MzYpLHE9PT01MTMxJiYoVz0zNDg0MikscT09PTUxMjEmJihXPXJ0PT09JHQmJmd0PT09ITE/MzU5MDc6MzI4NTYpLHE9PT0zMjgxOSYmKFc9MzI4NTQpLHE9PT0zMjgyMCYmKFc9MzI4NTUpKSwoVz09PTMzMzI1fHxXPT09MzMzMjZ8fFc9PT0zMzMyN3x8Vz09PTMzMzI4fHxXPT09MzQ4NDJ8fFc9PT0zNDgzNikmJnQuZ2V0KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiksV31mdW5jdGlvbiBIKEUsdyxxKXtyZXR1cm4gUyhFLHEpPT09ITB8fEUuaXNGcmFtZWJ1ZmZlclRleHR1cmUmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmU/TWF0aC5sb2cyKE1hdGgubWF4KHcud2lkdGgsdy5oZWlnaHQpKSsxOkUubWlwbWFwcyE9PXZvaWQgMCYmRS5taXBtYXBzLmxlbmd0aD4wP0UubWlwbWFwcy5sZW5ndGg6RS5pc0NvbXByZXNzZWRUZXh0dXJlJiZBcnJheS5pc0FycmF5KEUuaW1hZ2UpP3cubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiB0dChFKXtyZXR1cm4gRT09PWZlfHxFPT09SW18fEU9PT1ObT85NzI4Ojk3Mjl9ZnVuY3Rpb24gWChFKXtsZXQgdz1FLnRhcmdldDt3LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLFIodyksdy5pc1ZpZGVvVGV4dHVyZSYmZy5kZWxldGUodyksby5tZW1vcnkudGV4dHVyZXMtLX1mdW5jdGlvbiB5KEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRCh3KX1mdW5jdGlvbiBSKEUpe2xldCB3PWkuZ2V0KEUpO3cuX193ZWJnbEluaXQhPT12b2lkIDAmJihuLmRlbGV0ZVRleHR1cmUody5fX3dlYmdsVGV4dHVyZSksaS5yZW1vdmUoRSkpfWZ1bmN0aW9uIEQoRSl7bGV0IHc9RS50ZXh0dXJlLHE9aS5nZXQoRSkscnQ9aS5nZXQodyk7aWYoISFFKXtpZihydC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZShydC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksRS5kZXB0aFRleHR1cmUmJkUuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgZ3Q9MDtndDw2O2d0Kyspbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcltndF0pLHEuX193ZWJnbERlcHRoYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aGJ1ZmZlcltndF0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcikscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyKSxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmbi5kZWxldGVGcmFtZWJ1ZmZlcihxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcikscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGd0PTAsVz13Lmxlbmd0aDtndDxXO2d0Kyspe2xldCBfdD1pLmdldCh3W2d0XSk7X3QuX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUoX3QuX193ZWJnbFRleHR1cmUpLG8ubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKHdbZ3RdKX1pLnJlbW92ZSh3KSxpLnJlbW92ZShFKX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIE4oKXtsZXQgRT1GO3JldHVybiBFPj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIitFKyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSxFfWZ1bmN0aW9uIFYoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLmlzVmlkZW9UZXh0dXJlJiZldChFKSxFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2xldCBydD1FLmltYWdlO2lmKHJ0PT09dm9pZCAwKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgdW5kZWZpbmVkIik7ZWxzZSBpZihydC5jb21wbGV0ZT09PSExKWNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBtYXJrZWQgZm9yIHVwZGF0ZSBidXQgaW1hZ2UgaXMgaW5jb21wbGV0ZSIpO2Vsc2V7ayhxLEUsdyk7cmV0dXJufX1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTUzLHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFEoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe2socSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNTg2NixxLl9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBhdChFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDMyODc5LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIEcoRSx3KXtsZXQgcT1pLmdldChFKTtpZihFLnZlcnNpb24+MCYmcS5fX3ZlcnNpb24hPT1FLnZlcnNpb24pe0Z0KHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzQwNjcscS5fX3dlYmdsVGV4dHVyZSl9bGV0ICQ9e1tPdV06MTA0OTcsW1ZlXTozMzA3MSxba3VdOjMzNjQ4fSxsdD17W2ZlXTo5NzI4LFtJbV06OTk4NCxbTm1dOjk5ODYsW2JlXTo5NzI5LFtEd106OTk4NSxbTGxdOjk5ODd9O2Z1bmN0aW9uIGR0KEUsdyxxKXtpZihxPyhuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwkW3cud3JhcFNdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywkW3cud3JhcFRdKSwoRT09PTMyODc5fHxFPT09MzU4NjYpJiZuLnRleFBhcmFtZXRlcmkoRSwzMjg4MiwkW3cud3JhcFJdKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCxsdFt3Lm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLGx0W3cubWluRmlsdGVyXSkpOihuLnRleFBhcmFtZXRlcmkoRSwxMDI0MiwzMzA3MSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDMsMzMwNzEpLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLDMzMDcxKSwody53cmFwUyE9PVZlfHx3LndyYXBUIT09VmUpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDAsdHQody5tYWdGaWx0ZXIpKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MSx0dCh3Lm1pbkZpbHRlcikpLHcubWluRmlsdGVyIT09ZmUmJncubWluRmlsdGVyIT09YmUmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLm1pbkZpbHRlciBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLk5lYXJlc3RGaWx0ZXIgb3IgVEhSRUUuTGluZWFyRmlsdGVyLiIpKSx0LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik9PT0hMCl7bGV0IHJ0PXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpZih3LnR5cGU9PT1VaSYmdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITF8fGE9PT0hMSYmdy50eXBlPT09VXImJnQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPT09ITEpcmV0dXJuOyh3LmFuaXNvdHJvcHk+MXx8aS5nZXQodykuX19jdXJyZW50QW5pc290cm9weSkmJihuLnRleFBhcmFtZXRlcmYoRSxydC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbih3LmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5PXcuYW5pc290cm9weSl9fWZ1bmN0aW9uIHh0KEUsdyl7RS5fX3dlYmdsSW5pdD09PXZvaWQgMCYmKEUuX193ZWJnbEluaXQ9ITAsdy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixYKSxFLl9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpLG8ubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGsoRSx3LHEpe2xldCBydD0zNTUzO3cuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJihydD0zNTg2Niksdy5pc0RhdGFUZXh0dXJlM0QmJihydD0zMjg3OSkseHQoRSx3KSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrcSksZS5iaW5kVGV4dHVyZShydCxFLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLHcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsdy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsdy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGd0PV8odykmJmIody5pbWFnZSk9PT0hMSxXPXAody5pbWFnZSxndCwhMSx1KTtXPXZ0KHcsVyk7bGV0IF90PWIoVyl8fGEseXQ9cy5jb252ZXJ0KHcuZm9ybWF0LHcuZW5jb2RpbmcpLHV0PXMuY29udmVydCh3LnR5cGUpLGN0PUEody5pbnRlcm5hbEZvcm1hdCx5dCx1dCx3LmVuY29kaW5nLHcuaXNWaWRlb1RleHR1cmUpO2R0KHJ0LHcsX3QpO2xldCBBdCxQPXcubWlwbWFwcyxwdD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAsaHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsRXQ9SCh3LFcsX3QpO2lmKHcuaXNEZXB0aFRleHR1cmUpY3Q9NjQwMixhP3cudHlwZT09PVVpP2N0PTM2MDEyOncudHlwZT09PVFhP2N0PTMzMTkwOncudHlwZT09PUJyP2N0PTM1MDU2OmN0PTMzMTg5OncudHlwZT09PVVpJiZjb25zb2xlLmVycm9yKCJXZWJHTFJlbmRlcmVyOiBGbG9hdGluZyBwb2ludCBkZXB0aCB0ZXh0dXJlIHJlcXVpcmVzIFdlYkdMMi4iKSx3LmZvcm1hdD09PU9pJiZjdD09PTY0MDImJncudHlwZSE9PW5vJiZ3LnR5cGUhPT1RYSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLHcudHlwZT1ubyx1dD1zLmNvbnZlcnQody50eXBlKSksdy5mb3JtYXQ9PT1WciYmY3Q9PT02NDAyJiYoY3Q9MzQwNDEsdy50eXBlIT09QnImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPUJyLHV0PXMuY29udmVydCh3LnR5cGUpKSkscHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxjdCxXLndpZHRoLFcuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxudWxsKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZSlpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSk7dy5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBwdD8oaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVy53aWR0aCxXLmhlaWdodCx5dCx1dCxXLmRhdGEpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LFcud2lkdGgsVy5oZWlnaHQsMCx5dCx1dCxXLmRhdGEpO2Vsc2UgaWYody5pc0NvbXByZXNzZWRUZXh0dXJlKXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSx3LmZvcm1hdCE9PVJlP3l0IT09bnVsbD9wdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LEF0LmRhdGEpOmUuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLEF0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLEF0LndpZHRoLEF0LmhlaWdodCx5dCx1dCxBdC5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxZLGN0LEF0LndpZHRoLEF0LmhlaWdodCwwLHl0LHV0LEF0LmRhdGEpfWVsc2UgaWYody5pc0RhdGFUZXh0dXJlMkRBcnJheSlwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDM1ODY2LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzNTg2NiwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUzRClwdD8oaHQmJmUudGV4U3RvcmFnZTNEKDMyODc5LEV0LGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UzRCgzMjg3OSwwLGN0LFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzRnJhbWVidWZmZXJUZXh0dXJlKXB0JiZodD9lLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYoUC5sZW5ndGg+MCYmX3Qpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHB0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLFksMCwwLHl0LHV0LEF0KTplLnRleEltYWdlMkQoMzU1MyxZLGN0LHl0LHV0LEF0KTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCx5dCx1dCxXKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCx5dCx1dCxXKTtTKHcsX3QpJiZMKHJ0KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBGdChFLHcscSl7aWYody5pbWFnZS5sZW5ndGghPT02KXJldHVybjt4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKDM0MDY3LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgcnQ9dyYmKHcuaXNDb21wcmVzc2VkVGV4dHVyZXx8dy5pbWFnZVswXS5pc0NvbXByZXNzZWRUZXh0dXJlKSxndD13LmltYWdlWzBdJiZ3LmltYWdlWzBdLmlzRGF0YVRleHR1cmUsVz1bXTtmb3IobGV0IFk9MDtZPDY7WSsrKSFydCYmIWd0P1dbWV09cCh3LmltYWdlW1ldLCExLCEwLGMpOldbWV09Z3Q/dy5pbWFnZVtZXS5pbWFnZTp3LmltYWdlW1ldLFdbWV09dnQodyxXW1ldKTtsZXQgX3Q9V1swXSx5dD1iKF90KXx8YSx1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9YSYmdy5pc1ZpZGVvVGV4dHVyZSE9PSEwLHB0PUUuX192ZXJzaW9uPT09dm9pZCAwLGh0PUgodyxfdCx5dCk7ZHQoMzQwNjcsdyx5dCk7bGV0IEV0O2lmKHJ0KXtQJiZwdCYmZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsX3Qud2lkdGgsX3QuaGVpZ2h0KTtmb3IobGV0IFk9MDtZPDY7WSsrKXtFdD1XW1ldLm1pcG1hcHM7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQgRHQ9RXRbTXRdO3cuZm9ybWF0IT09UmU/dXQhPT1udWxsP1A/ZS5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsRHQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStZLE10LEF0LER0LndpZHRoLER0LmhlaWdodCwwLER0LmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnNldFRleHR1cmVDdWJlKCkiKTpQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10LDAsMCxEdC53aWR0aCxEdC5oZWlnaHQsdXQsY3QsRHQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsdXQsY3QsRHQuZGF0YSl9fX1lbHNle0V0PXcubWlwbWFwcyxQJiZwdCYmKEV0Lmxlbmd0aD4wJiZodCsrLGUudGV4U3RvcmFnZTJEKDM0MDY3LGh0LEF0LFdbMF0ud2lkdGgsV1swXS5oZWlnaHQpKTtmb3IobGV0IFk9MDtZPDY7WSsrKWlmKGd0KXtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLDAsMCwwLFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsdXQsY3QsV1tZXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LFdbWV0ud2lkdGgsV1tZXS5oZWlnaHQsMCx1dCxjdCxXW1ldLmRhdGEpO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IGp0PUV0W010XS5pbWFnZVtZXS5pbWFnZTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLGp0LndpZHRoLGp0LmhlaWdodCx1dCxjdCxqdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LGp0LndpZHRoLGp0LmhlaWdodCwwLHV0LGN0LGp0LmRhdGEpfX1lbHNle1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsdXQsY3QsV1tZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksMCxBdCx1dCxjdCxXW1ldKTtmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSxNdCsxLDAsMCx1dCxjdCxEdC5pbWFnZVtZXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1ksTXQrMSxBdCx1dCxjdCxEdC5pbWFnZVtZXSl9fX1TKHcseXQpJiZMKDM0MDY3KSxFLl9fdmVyc2lvbj13LnZlcnNpb24sdy5vblVwZGF0ZSYmdy5vblVwZGF0ZSh3KX1mdW5jdGlvbiBtdChFLHcscSxydCxndCl7bGV0IFc9cy5jb252ZXJ0KHEuZm9ybWF0LHEuZW5jb2RpbmcpLF90PXMuY29udmVydChxLnR5cGUpLHl0PUEocS5pbnRlcm5hbEZvcm1hdCxXLF90LHEuZW5jb2RpbmcpO2kuZ2V0KHcpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGd0PT09MzI4Nzl8fGd0PT09MzU4NjY/ZS50ZXhJbWFnZTNEKGd0LDAseXQsdy53aWR0aCx3LmhlaWdodCx3LmRlcHRoLDAsVyxfdCxudWxsKTplLnRleEltYWdlMkQoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LDAsVyxfdCxudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLHJ0LGd0LGkuZ2V0KHEpLl9fd2ViZ2xUZXh0dXJlLDAsaXQodykpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gU3QoRSx3LHEpe2lmKG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxFKSx3LmRlcHRoQnVmZmVyJiYhdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9MzMxODk7aWYocXx8dy51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBndD13LmRlcHRoVGV4dHVyZTtndCYmZ3QuaXNEZXB0aFRleHR1cmUmJihndC50eXBlPT09VWk/cnQ9MzYwMTI6Z3QudHlwZT09PVFhJiYocnQ9MzMxOTApKTtsZXQgVz1pdCh3KTt3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxXLHJ0LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEscnQsdy53aWR0aCx3LmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxFKX1lbHNlIGlmKHcuZGVwdGhCdWZmZXImJncuc3RlbmNpbEJ1ZmZlcil7bGV0IHJ0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHJ0LDM1MDU2LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSx3LndpZHRoLHcuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLEUpfWVsc2V7bGV0IHJ0PXcuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3cudGV4dHVyZVswXTp3LnRleHR1cmUsZ3Q9cy5jb252ZXJ0KHJ0LmZvcm1hdCxydC5lbmNvZGluZyksVz1zLmNvbnZlcnQocnQudHlwZSksX3Q9QShydC5pbnRlcm5hbEZvcm1hdCxndCxXLHJ0LmVuY29kaW5nKSx5dD1pdCh3KTtxJiZ3LnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTp3LnVzZVJlbmRlclRvVGV4dHVyZT9kLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5dCxfdCx3LndpZHRoLHcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsX3Qsdy53aWR0aCx3LmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIEIoRSx3KXtpZih3JiZ3LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXRocm93IG5ldyBFcnJvcigiRGVwdGggVGV4dHVyZSB3aXRoIGN1YmUgcmVuZGVyIHRhcmdldHMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEUpLCEody5kZXB0aFRleHR1cmUmJncuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIWkuZ2V0KHcuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8dy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT13LndpZHRofHx3LmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT13LmhlaWdodCkmJih3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD13LndpZHRoLHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD13LmhlaWdodCx3LmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVih3LmRlcHRoVGV4dHVyZSwwKTtsZXQgcnQ9aS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGd0PWl0KHcpO2lmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PU9pKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxydCwwKTtlbHNlIGlmKHcuZGVwdGhUZXh0dXJlLmZvcm1hdD09PVZyKXcudXNlUmVuZGVyVG9UZXh0dXJlP2QuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDAsZ3QpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxydCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gc3QoRSl7bGV0IHc9aS5nZXQoRSkscT1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYoRS5kZXB0aFRleHR1cmUmJiF3Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKHEpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO0Iody5fX3dlYmdsRnJhbWVidWZmZXIsRSl9ZWxzZSBpZihxKXt3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IHJ0PTA7cnQ8NjtydCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHcuX193ZWJnbEZyYW1lYnVmZmVyW3J0XSksdy5fX3dlYmdsRGVwdGhidWZmZXJbcnRdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXJbcnRdLEUsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXIpLHcuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3Qody5fX3dlYmdsRGVwdGhidWZmZXIsRSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gbnQoRSx3LHEpe2xldCBydD1pLmdldChFKTt3IT09dm9pZCAwJiZtdChydC5fX3dlYmdsRnJhbWVidWZmZXIsRSxFLnRleHR1cmUsMzYwNjQsMzU1MykscSE9PXZvaWQgMCYmc3QoRSl9ZnVuY3Rpb24gQyhFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtFLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHkpLEUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyE9PSEwJiYocnQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihydC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSkscnQuX192ZXJzaW9uPXcudmVyc2lvbixvLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgZ3Q9RS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFc9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITAsX3Q9dy5pc0RhdGFUZXh0dXJlM0R8fHcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseXQ9YihFKXx8YTtpZihndCl7cS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCB1dD0wO3V0PDY7dXQrKylxLl9fd2ViZ2xGcmFtZWJ1ZmZlclt1dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYocS5fX3dlYmdsRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFcpaWYoci5kcmF3QnVmZmVycyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPWkuZ2V0KHV0W2N0XSk7UC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKFAuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihFLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCkscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEscS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCB1dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksY3Q9cy5jb252ZXJ0KHcudHlwZSksQXQ9QSh3LmludGVybmFsRm9ybWF0LHV0LGN0LHcuZW5jb2RpbmcpLFA9aXQoRSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsUCxBdCxFLndpZHRoLEUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxxLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksbi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLEUuZGVwdGhCdWZmZXImJihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLFN0KHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLEUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKGd0KXtlLmJpbmRUZXh0dXJlKDM0MDY3LHJ0Ll9fd2ViZ2xUZXh0dXJlKSxkdCgzNDA2Nyx3LHl0KTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKW10KHEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XSxFLHcsMzYwNjQsMzQwNjkrdXQpO1Modyx5dCkmJkwoMzQwNjcpLGUudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVyl7bGV0IHV0PUUudGV4dHVyZTtmb3IobGV0IGN0PTAsQXQ9dXQubGVuZ3RoO2N0PEF0O2N0Kyspe2xldCBQPXV0W2N0XSxwdD1pLmdldChQKTtlLmJpbmRUZXh0dXJlKDM1NTMscHQuX193ZWJnbFRleHR1cmUpLGR0KDM1NTMsUCx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSxQLDM2MDY0K2N0LDM1NTMpLFMoUCx5dCkmJkwoMzU1Myl9ZS51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgdXQ9MzU1MztfdCYmKGE/dXQ9dy5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLGUuYmluZFRleHR1cmUodXQscnQuX193ZWJnbFRleHR1cmUpLGR0KHV0LHcseXQpLG10KHEuX193ZWJnbEZyYW1lYnVmZmVyLEUsdywzNjA2NCx1dCksUyh3LHl0KSYmTCh1dCksZS51bmJpbmRUZXh0dXJlKCl9RS5kZXB0aEJ1ZmZlciYmc3QoRSl9ZnVuY3Rpb24gaihFKXtsZXQgdz1iKEUpfHxhLHE9RS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/RS50ZXh0dXJlOltFLnRleHR1cmVdO2ZvcihsZXQgcnQ9MCxndD1xLmxlbmd0aDtydDxndDtydCsrKXtsZXQgVz1xW3J0XTtpZihTKFcsdykpe2xldCBfdD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PzM0MDY3OjM1NTMseXQ9aS5nZXQoVykuX193ZWJnbFRleHR1cmU7ZS5iaW5kVGV4dHVyZShfdCx5dCksTChfdCksZS51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBKKEUpe2lmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe2xldCB3PUUud2lkdGgscT1FLmhlaWdodCxydD0xNjM4NCxndD1bMzYwNjRdLFc9RS5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O0UuZGVwdGhCdWZmZXImJmd0LnB1c2goVyksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weXx8KEUuZGVwdGhCdWZmZXImJihydHw9MjU2KSxFLnN0ZW5jaWxCdWZmZXImJihydHw9MTAyNCkpO2xldCBfdD1pLmdldChFKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksRS5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtXXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1ddKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLHcscSwwLDAsdyxxLHJ0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGd0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxfdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gaXQoRSl7cmV0dXJuIGEmJihFLnVzZVJlbmRlcmJ1ZmZlcnx8RS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsRS5zYW1wbGVzKTowfWZ1bmN0aW9uIGV0KEUpe2xldCB3PW8ucmVuZGVyLmZyYW1lO2cuZ2V0KEUpIT09dyYmKGcuc2V0KEUsdyksRS51cGRhdGUoKSl9ZnVuY3Rpb24gdnQoRSx3KXtsZXQgcT1FLmVuY29kaW5nLHJ0PUUuZm9ybWF0LGd0PUUudHlwZTtyZXR1cm4gRS5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fEUuaXNWaWRlb1RleHR1cmU9PT0hMHx8RS5mb3JtYXQ9PT1IdXx8cSE9PXJpJiYocT09PSR0P2E9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiZydD09PVJlPyhFLmZvcm1hdD1IdSxFLm1pbkZpbHRlcj1iZSxFLmdlbmVyYXRlTWlwbWFwcz0hMSk6dz1Obi5zUkdCVG9MaW5lYXIodyk6KHJ0IT09UmV8fGd0IT09ZWkpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixxKSksd31sZXQgYnQ9ITEsSXQ9ITE7ZnVuY3Rpb24gWnQoRSx3KXtFJiZFLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihidD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlMkQ6IGRvbid0IHVzZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksYnQ9ITApLEU9RS50ZXh0dXJlKSxWKEUsdyl9ZnVuY3Rpb24gcXQoRSx3KXtFJiZFLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoSXQ9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxJdD0hMCksRT1FLnRleHR1cmUpLEcoRSx3KX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9Tix0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vix0aGlzLnNldFRleHR1cmUyREFycmF5PVEsdGhpcy5zZXRUZXh0dXJlM0Q9YXQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1HLHRoaXMucmViaW5kVGV4dHVyZXM9bnQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1DLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWosdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1KLHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1zdCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPW10LHRoaXMuc2FmZVNldFRleHR1cmUyRD1adCx0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1xdH1mdW5jdGlvbiBMRShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtmdW5jdGlvbiByKHMsbz1udWxsKXtsZXQgYTtpZihzPT09ZWkpcmV0dXJuIDUxMjE7aWYocz09PXp3KXJldHVybiAzMjgxOTtpZihzPT09VXcpcmV0dXJuIDMyODIwO2lmKHM9PT1JdylyZXR1cm4gNTEyMDtpZihzPT09TncpcmV0dXJuIDUxMjI7aWYocz09PW5vKXJldHVybiA1MTIzO2lmKHM9PT1GdylyZXR1cm4gNTEyNDtpZihzPT09UWEpcmV0dXJuIDUxMjU7aWYocz09PVVpKXJldHVybiA1MTI2O2lmKHM9PT1VcilyZXR1cm4gaT81MTMxOihhPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IiksYSE9PW51bGw/YS5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihzPT09QncpcmV0dXJuIDY0MDY7aWYocz09PVJlKXJldHVybiA2NDA4O2lmKHM9PT1PdylyZXR1cm4gNjQwOTtpZihzPT09a3cpcmV0dXJuIDY0MTA7aWYocz09PU9pKXJldHVybiA2NDAyO2lmKHM9PT1WcilyZXR1cm4gMzQwNDE7aWYocz09PUh3KXJldHVybiA2NDAzO2lmKHM9PT1IdSlyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxhIT09bnVsbD9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYocz09PVZ3KXJldHVybiAzNjI0NDtpZihzPT09R3cpcmV0dXJuIDMzMzE5O2lmKHM9PT1XdylyZXR1cm4gMzMzMjA7aWYocz09PXF3KXJldHVybiAzNjI0OTtpZihzPT09S2N8fHM9PT1RY3x8cz09PWpjfHxzPT09dHUpaWYobz09PSR0KWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxhIT09bnVsbCl7aWYocz09PUtjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7ZWxzZSBpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDtpZihzPT09UWMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7aWYocz09PWpjKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUO2lmKHM9PT10dSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1GbXx8cz09PXptfHxzPT09VW18fHM9PT1CbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxhIT09bnVsbCl7aWYocz09PUZtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PXptKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYocz09PVVtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKHM9PT1CbSlyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1YdylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxhIT09bnVsbD9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZihzPT09T218fHM9PT1rbSlpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIiksYSE9PW51bGwpe2lmKHM9PT1PbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYocz09PWttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09SG18fHM9PT1WbXx8cz09PUdtfHxzPT09V218fHM9PT1xbXx8cz09PVhtfHxzPT09WW18fHM9PT1abXx8cz09PUptfHxzPT09JG18fHM9PT1LbXx8cz09PVFtfHxzPT09am18fHM9PT10ZylpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLGEhPT1udWxsKXtpZihzPT09SG0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYocz09PVZtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKHM9PT1HbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUjtpZihzPT09V20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYocz09PXFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKHM9PT1YbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUjtpZihzPT09WW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYocz09PVptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKHM9PT1KbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDVfS0hSO2lmKHM9PT0kbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKHM9PT1LbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKHM9PT1RbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHgxMF9LSFI7aWYocz09PWptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihzPT09dGcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PWVnKWlmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxhIT09bnVsbCl7aWYocz09PWVnKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09QnIpcmV0dXJuIGk/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxhIT09bnVsbD9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0OnJ9fXZhciBobD1jbGFzcyBleHRlbmRzIFNle2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtobC5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgQmk9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtCaS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgUEU9e3R5cGU6Im1vdmUifSxRcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgQmksdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBCaSx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgVCksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IEJpLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBULHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwscz1udWxsLG89bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJmUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihhIT09bnVsbCYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksciE9PW51bGwmJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KFBFKSkpLGMmJnQuaGFuZCl7bz0hMDtmb3IobGV0IHggb2YgdC5oYW5kLnZhbHVlcygpKXtsZXQgdj1lLmdldEpvaW50UG9zZSh4LGkpO2lmKGMuam9pbnRzW3guam9pbnROYW1lXT09PXZvaWQgMCl7bGV0IHA9bmV3IEJpO3AubWF0cml4QXV0b1VwZGF0ZT0hMSxwLnZpc2libGU9ITEsYy5qb2ludHNbeC5qb2ludE5hbWVdPXAsYy5hZGQocCl9bGV0IG09Yy5qb2ludHNbeC5qb2ludE5hbWVdO3YhPT1udWxsJiYobS5tYXRyaXguZnJvbUFycmF5KHYudHJhbnNmb3JtLm1hdHJpeCksbS5tYXRyaXguZGVjb21wb3NlKG0ucG9zaXRpb24sbS5yb3RhdGlvbixtLnNjYWxlKSxtLmpvaW50UmFkaXVzPXYucmFkaXVzKSxtLnZpc2libGU9diE9PW51bGx9bGV0IHU9Yy5qb2ludHNbImluZGV4LWZpbmdlci10aXAiXSxoPWMuam9pbnRzWyJ0aHVtYi10aXAiXSxmPXUucG9zaXRpb24uZGlzdGFuY2VUbyhoLnBvc2l0aW9uKSxkPS4wMixnPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPmQrZz8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJmY8PWQtZyYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbCE9PW51bGwmJnQuZ3JpcFNwYWNlJiYocz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSkscyE9PW51bGwmJihsLm1hdHJpeC5mcm9tQXJyYXkocy50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLHMubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KHMubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLHMuYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHMuYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gYSE9PW51bGwmJihhLnZpc2libGU9ciE9PW51bGwpLGwhPT1udWxsJiYobC52aXNpYmxlPXMhPT1udWxsKSxjIT09bnVsbCYmKGMudmlzaWJsZT1vIT09bnVsbCksdGhpc319LHVvPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSl7aWYodT11IT09dm9pZCAwP3U6T2ksdSE9PU9pJiZ1IT09VnIpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO2k9PT12b2lkIDAmJnU9PT1PaSYmKGk9bm8pLGk9PT12b2lkIDAmJnU9PT1WciYmKGk9QnIpLHN1cGVyKG51bGwscixzLG8sYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj1hIT09dm9pZCAwP2E6ZmUsdGhpcy5taW5GaWx0ZXI9bCE9PXZvaWQgMD9sOmZlLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTt1by5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIFp1PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLHM9MSxvPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLGQ9ITEsZz1udWxsLHg9ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLHY9bnVsbCxtPW51bGwscD1bXSxiPW5ldyBNYXAsXz1uZXcgU2U7Xy5sYXllcnMuZW5hYmxlKDEpLF8udmlld3BvcnQ9bmV3IFd0O2xldCBTPW5ldyBTZTtTLmxheWVycy5lbmFibGUoMiksUy52aWV3cG9ydD1uZXcgV3Q7bGV0IEw9W18sU10sQT1uZXcgaGw7QS5sYXllcnMuZW5hYmxlKDEpLEEubGF5ZXJzLmVuYWJsZSgyKTtsZXQgSD1udWxsLHR0PW51bGw7dGhpcy5jYW1lcmFBdXRvVXBkYXRlPSEwLHRoaXMuZW5hYmxlZD0hMSx0aGlzLmlzUHJlc2VudGluZz0hMSx0aGlzLmdldENvbnRyb2xsZXI9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldEhhbmRTcGFjZSgpfTtmdW5jdGlvbiBYKEcpe2xldCAkPWIuZ2V0KEcuaW5wdXRTb3VyY2UpOyQmJiQuZGlzcGF0Y2hFdmVudCh7dHlwZTpHLnR5cGUsZGF0YTpHLmlucHV0U291cmNlfSl9ZnVuY3Rpb24geSgpe2IuZm9yRWFjaChmdW5jdGlvbihHLCQpe0cuZGlzY29ubmVjdCgkKX0pLGIuY2xlYXIoKSxIPW51bGwsdHQ9bnVsbCx0LnNldFJlbmRlclRhcmdldCh2KSxmPW51bGwsaD1udWxsLHU9bnVsbCxyPW51bGwsbT1udWxsLGF0LnN0b3AoKSxpLmlzUHJlc2VudGluZz0hMSxpLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKEcpe3M9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSBmcmFtZWJ1ZmZlciBzY2FsZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLnNldFJlZmVyZW5jZVNwYWNlVHlwZT1mdW5jdGlvbihHKXthPUcsaS5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBvfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiByfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24oRyl7cmV0dXJuIGhmKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtpZihyPUcsciE9PW51bGwpe2lmKHY9dC5nZXRSZW5kZXJUYXJnZXQoKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLFgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJlbmQiLHkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixSKSx4LnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgZS5tYWtlWFJDb21wYXRpYmxlKCkpLHIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgJD17YW50aWFsaWFzOnIucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP3guYW50aWFsaWFzOiEwLGFscGhhOnguYWxwaGEsZGVwdGg6eC5kZXB0aCxzdGVuY2lsOnguc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOnN9O2Y9bmV3IFhSV2ViR0xMYXllcihyLGUsJCksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOmZ9KSxtPW5ldyBOZShmLmZyYW1lYnVmZmVyV2lkdGgsZi5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pfWVsc2V7ZD14LmFudGlhbGlhcztsZXQgJD1udWxsLGx0PW51bGwsZHQ9bnVsbDt4LmRlcHRoJiYoZHQ9eC5zdGVuY2lsPzM1MDU2OjMzMTkwLCQ9eC5zdGVuY2lsP1ZyOk9pLGx0PXguc3RlbmNpbD9Ccjpubyk7bGV0IHh0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09JHQ/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6ZHQsc2NhbGVGYWN0b3I6c307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKHh0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSksZD9tPW5ldyBzbyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpSZSx0eXBlOmVpLGRlcHRoVGV4dHVyZTpuZXcgdW8oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LGx0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCQpLHN0ZW5jaWxCdWZmZXI6eC5zdGVuY2lsLGlnbm9yZURlcHRoOmguaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm09bmV3IE5lKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9bS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLG89eWllbGQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksYXQuc2V0Q29udGV4dChyKSxhdC5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBSKEcpe2xldCAkPXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgbHQ9MDtsdDxwLmxlbmd0aDtsdCsrKWIuc2V0KCRbbHRdLHBbbHRdKTtmb3IobGV0IGx0PTA7bHQ8Ry5yZW1vdmVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5yZW1vdmVkW2x0XSx4dD1iLmdldChkdCk7eHQmJih4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6ZHR9KSxiLmRlbGV0ZShkdCkpfWZvcihsZXQgbHQ9MDtsdDxHLmFkZGVkLmxlbmd0aDtsdCsrKXtsZXQgZHQ9Ry5hZGRlZFtsdF0seHQ9Yi5nZXQoZHQpO3h0JiZ4dC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6ZHR9KX19bGV0IEQ9bmV3IFQsRj1uZXcgVDtmdW5jdGlvbiB6KEcsJCxsdCl7RC5zZXRGcm9tTWF0cml4UG9zaXRpb24oJC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24obHQubWF0cml4V29ybGQpO2xldCBkdD1ELmRpc3RhbmNlVG8oRikseHQ9JC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLGs9bHQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxGdD14dFsxNF0vKHh0WzEwXS0xKSxtdD14dFsxNF0vKHh0WzEwXSsxKSxTdD0oeHRbOV0rMSkveHRbNV0sQj0oeHRbOV0tMSkveHRbNV0sc3Q9KHh0WzhdLTEpL3h0WzBdLG50PShrWzhdKzEpL2tbMF0sQz1GdCpzdCxqPUZ0Km50LEo9ZHQvKC1zdCtudCksaXQ9Siotc3Q7JC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy50cmFuc2xhdGVYKGl0KSxHLnRyYW5zbGF0ZVooSiksRy5tYXRyaXhXb3JsZC5jb21wb3NlKEcucG9zaXRpb24sRy5xdWF0ZXJuaW9uLEcuc2NhbGUpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGV0PUZ0K0osdnQ9bXQrSixidD1DLWl0LEl0PWorKGR0LWl0KSxadD1TdCptdC92dCpldCxxdD1CKm10L3Z0KmV0O0cucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoYnQsSXQsWnQscXQsZXQsdnQpfWZ1bmN0aW9uIE4oRywkKXskPT09bnVsbD9HLm1hdHJpeFdvcmxkLmNvcHkoRy5tYXRyaXgpOkcubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcygkLm1hdHJpeFdvcmxkLEcubWF0cml4KSxHLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KEcubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKEcpe2lmKHI9PT1udWxsKXJldHVybjtBLm5lYXI9Uy5uZWFyPV8ubmVhcj1HLm5lYXIsQS5mYXI9Uy5mYXI9Xy5mYXI9Ry5mYXIsKEghPT1BLm5lYXJ8fHR0IT09QS5mYXIpJiYoci51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOkEubmVhcixkZXB0aEZhcjpBLmZhcn0pLEg9QS5uZWFyLHR0PUEuZmFyKTtsZXQgJD1HLnBhcmVudCxsdD1BLmNhbWVyYXM7TihBLCQpO2ZvcihsZXQgeHQ9MDt4dDxsdC5sZW5ndGg7eHQrKylOKGx0W3h0XSwkKTtBLm1hdHJpeFdvcmxkLmRlY29tcG9zZShBLnBvc2l0aW9uLEEucXVhdGVybmlvbixBLnNjYWxlKSxHLnBvc2l0aW9uLmNvcHkoQS5wb3NpdGlvbiksRy5xdWF0ZXJuaW9uLmNvcHkoQS5xdWF0ZXJuaW9uKSxHLnNjYWxlLmNvcHkoQS5zY2FsZSksRy5tYXRyaXguY29weShBLm1hdHJpeCksRy5tYXRyaXhXb3JsZC5jb3B5KEEubWF0cml4V29ybGQpO2xldCBkdD1HLmNoaWxkcmVuO2ZvcihsZXQgeHQ9MCxrPWR0Lmxlbmd0aDt4dDxrO3h0KyspZHRbeHRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtsdC5sZW5ndGg9PT0yP3ooQSxfLFMpOkEucHJvamVjdGlvbk1hdHJpeC5jb3B5KF8ucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIEF9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKEcpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1HKSxmIT09bnVsbCYmZi5maXhlZEZvdmVhdGlvbiE9PXZvaWQgMCYmKGYuZml4ZWRGb3ZlYXRpb249Ryl9O2xldCBWPW51bGw7ZnVuY3Rpb24gUShHLCQpe2lmKGM9JC5nZXRWaWV3ZXJQb3NlKG8pLGc9JCxjIT09bnVsbCl7bGV0IGR0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKG0sZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQobSkpO2xldCB4dD0hMTtkdC5sZW5ndGghPT1BLmNhbWVyYXMubGVuZ3RoJiYoQS5jYW1lcmFzLmxlbmd0aD0wLHh0PSEwKTtmb3IobGV0IGs9MDtrPGR0Lmxlbmd0aDtrKyspe2xldCBGdD1kdFtrXSxtdD1udWxsO2lmKGYhPT1udWxsKW10PWYuZ2V0Vmlld3BvcnQoRnQpO2Vsc2V7bGV0IEI9dS5nZXRWaWV3U3ViSW1hZ2UoaCxGdCk7bXQ9Qi52aWV3cG9ydCxrPT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMobSxCLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpCLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KG0pKX1sZXQgU3Q9TFtrXTtTdC5tYXRyaXguZnJvbUFycmF5KEZ0LnRyYW5zZm9ybS5tYXRyaXgpLFN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEZ0LnByb2plY3Rpb25NYXRyaXgpLFN0LnZpZXdwb3J0LnNldChtdC54LG10LnksbXQud2lkdGgsbXQuaGVpZ2h0KSxrPT09MCYmQS5tYXRyaXguY29weShTdC5tYXRyaXgpLHh0PT09ITAmJkEuY2FtZXJhcy5wdXNoKFN0KX19bGV0IGx0PXIuaW5wdXRTb3VyY2VzO2ZvcihsZXQgZHQ9MDtkdDxwLmxlbmd0aDtkdCsrKXtsZXQgeHQ9cFtkdF0saz1sdFtkdF07eHQudXBkYXRlKGssJCxvKX1WJiZWKEcsJCksZz1udWxsfWxldCBhdD1uZXcgZzA7YXQuc2V0QW5pbWF0aW9uTG9vcChRKSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oRyl7Vj1HfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gREUobil7ZnVuY3Rpb24gdChtLHApe20uZm9nQ29sb3IudmFsdWUuY29weShwLmNvbG9yKSxwLmlzRm9nPyhtLmZvZ05lYXIudmFsdWU9cC5uZWFyLG0uZm9nRmFyLnZhbHVlPXAuZmFyKTpwLmlzRm9nRXhwMiYmKG0uZm9nRGVuc2l0eS52YWx1ZT1wLmRlbnNpdHkpfWZ1bmN0aW9uIGUobSxwLGIsXyxTKXtwLmlzTWVzaEJhc2ljTWF0ZXJpYWw/aShtLHApOnAuaXNNZXNoTGFtYmVydE1hdGVyaWFsPyhpKG0scCksbChtLHApKTpwLmlzTWVzaFRvb25NYXRlcmlhbD8oaShtLHApLHUobSxwKSk6cC5pc01lc2hQaG9uZ01hdGVyaWFsPyhpKG0scCksYyhtLHApKTpwLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkobSxwKSxwLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZihtLHAsUyk6aChtLHApKTpwLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKG0scCksZChtLHApKTpwLmlzTWVzaERlcHRoTWF0ZXJpYWw/KGkobSxwKSxnKG0scCkpOnAuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD8oaShtLHApLHgobSxwKSk6cC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oaShtLHApLHYobSxwKSk6cC5pc0xpbmVCYXNpY01hdGVyaWFsPyhyKG0scCkscC5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmcyhtLHApKTpwLmlzUG9pbnRzTWF0ZXJpYWw/byhtLHAsYixfKTpwLmlzU3ByaXRlTWF0ZXJpYWw/YShtLHApOnAuaXNTaGFkb3dNYXRlcmlhbD8obS5jb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHkpOnAuaXNTaGFkZXJNYXRlcmlhbCYmKHAudW5pZm9ybXNOZWVkVXBkYXRlPSExKX1mdW5jdGlvbiBpKG0scCl7bS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxwLmNvbG9yJiZtLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxwLmVtaXNzaXZlJiZtLmVtaXNzaXZlLnZhbHVlLmNvcHkocC5lbWlzc2l2ZSkubXVsdGlwbHlTY2FsYXIocC5lbWlzc2l2ZUludGVuc2l0eSkscC5tYXAmJihtLm1hcC52YWx1ZT1wLm1hcCkscC5hbHBoYU1hcCYmKG0uYWxwaGFNYXAudmFsdWU9cC5hbHBoYU1hcCkscC5zcGVjdWxhck1hcCYmKG0uc3BlY3VsYXJNYXAudmFsdWU9cC5zcGVjdWxhck1hcCkscC5hbHBoYVRlc3Q+MCYmKG0uYWxwaGFUZXN0LnZhbHVlPXAuYWxwaGFUZXN0KTtsZXQgYj1uLmdldChwKS5lbnZNYXA7YiYmKG0uZW52TWFwLnZhbHVlPWIsbS5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmYi5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLG0ucmVmbGVjdGl2aXR5LnZhbHVlPXAucmVmbGVjdGl2aXR5LG0uaW9yLnZhbHVlPXAuaW9yLG0ucmVmcmFjdGlvblJhdGlvLnZhbHVlPXAucmVmcmFjdGlvblJhdGlvKSxwLmxpZ2h0TWFwJiYobS5saWdodE1hcC52YWx1ZT1wLmxpZ2h0TWFwLG0ubGlnaHRNYXBJbnRlbnNpdHkudmFsdWU9cC5saWdodE1hcEludGVuc2l0eSkscC5hb01hcCYmKG0uYW9NYXAudmFsdWU9cC5hb01hcCxtLmFvTWFwSW50ZW5zaXR5LnZhbHVlPXAuYW9NYXBJbnRlbnNpdHkpO2xldCBfO3AubWFwP189cC5tYXA6cC5zcGVjdWxhck1hcD9fPXAuc3BlY3VsYXJNYXA6cC5kaXNwbGFjZW1lbnRNYXA/Xz1wLmRpc3BsYWNlbWVudE1hcDpwLm5vcm1hbE1hcD9fPXAubm9ybWFsTWFwOnAuYnVtcE1hcD9fPXAuYnVtcE1hcDpwLnJvdWdobmVzc01hcD9fPXAucm91Z2huZXNzTWFwOnAubWV0YWxuZXNzTWFwP189cC5tZXRhbG5lc3NNYXA6cC5hbHBoYU1hcD9fPXAuYWxwaGFNYXA6cC5lbWlzc2l2ZU1hcD9fPXAuZW1pc3NpdmVNYXA6cC5jbGVhcmNvYXRNYXA/Xz1wLmNsZWFyY29hdE1hcDpwLmNsZWFyY29hdE5vcm1hbE1hcD9fPXAuY2xlYXJjb2F0Tm9ybWFsTWFwOnAuY2xlYXJjb2F0Um91Z2huZXNzTWFwP189cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA6cC5zcGVjdWxhckludGVuc2l0eU1hcD9fPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXA6cC5zcGVjdWxhckNvbG9yTWFwP189cC5zcGVjdWxhckNvbG9yTWFwOnAudHJhbnNtaXNzaW9uTWFwP189cC50cmFuc21pc3Npb25NYXA6cC50aGlja25lc3NNYXA/Xz1wLnRoaWNrbmVzc01hcDpwLnNoZWVuQ29sb3JNYXA/Xz1wLnNoZWVuQ29sb3JNYXA6cC5zaGVlblJvdWdobmVzc01hcCYmKF89cC5zaGVlblJvdWdobmVzc01hcCksXyE9PXZvaWQgMCYmKF8uaXNXZWJHTFJlbmRlclRhcmdldCYmKF89Xy50ZXh0dXJlKSxfLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmXy51cGRhdGVNYXRyaXgoKSxtLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoXy5tYXRyaXgpKTtsZXQgUztwLmFvTWFwP1M9cC5hb01hcDpwLmxpZ2h0TWFwJiYoUz1wLmxpZ2h0TWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXYyVHJhbnNmb3JtLnZhbHVlLmNvcHkoUy5tYXRyaXgpKX1mdW5jdGlvbiByKG0scCl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eX1mdW5jdGlvbiBzKG0scCl7bS5kYXNoU2l6ZS52YWx1ZT1wLmRhc2hTaXplLG0udG90YWxTaXplLnZhbHVlPXAuZGFzaFNpemUrcC5nYXBTaXplLG0uc2NhbGUudmFsdWU9cC5zY2FsZX1mdW5jdGlvbiBvKG0scCxiLF8pe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5zaXplLnZhbHVlPXAuc2l6ZSpiLG0uc2NhbGUudmFsdWU9XyouNSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBTO3AubWFwP1M9cC5tYXA6cC5hbHBoYU1hcCYmKFM9cC5hbHBoYU1hcCksUyE9PXZvaWQgMCYmKFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIGEobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LG0ucm90YXRpb24udmFsdWU9cC5yb3RhdGlvbixwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiO3AubWFwP2I9cC5tYXA6cC5hbHBoYU1hcCYmKGI9cC5hbHBoYU1hcCksYiE9PXZvaWQgMCYmKGIubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZiLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShiLm1hdHJpeCkpfWZ1bmN0aW9uIGwobSxwKXtwLmVtaXNzaXZlTWFwJiYobS5lbWlzc2l2ZU1hcC52YWx1ZT1wLmVtaXNzaXZlTWFwKX1mdW5jdGlvbiBjKG0scCl7bS5zcGVjdWxhci52YWx1ZS5jb3B5KHAuc3BlY3VsYXIpLG0uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHAuc2hpbmluZXNzLDFlLTQpLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gdShtLHApe3AuZ3JhZGllbnRNYXAmJihtLmdyYWRpZW50TWFwLnZhbHVlPXAuZ3JhZGllbnRNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gaChtLHApe20ucm91Z2huZXNzLnZhbHVlPXAucm91Z2huZXNzLG0ubWV0YWxuZXNzLnZhbHVlPXAubWV0YWxuZXNzLHAucm91Z2huZXNzTWFwJiYobS5yb3VnaG5lc3NNYXAudmFsdWU9cC5yb3VnaG5lc3NNYXApLHAubWV0YWxuZXNzTWFwJiYobS5tZXRhbG5lc3NNYXAudmFsdWU9cC5tZXRhbG5lc3NNYXApLHAuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApLHAuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyksbi5nZXQocCkuZW52TWFwJiYobS5lbnZNYXBJbnRlbnNpdHkudmFsdWU9cC5lbnZNYXBJbnRlbnNpdHkpfWZ1bmN0aW9uIGYobSxwLGIpe2gobSxwKSxtLmlvci52YWx1ZT1wLmlvcixwLnNoZWVuPjAmJihtLnNoZWVuQ29sb3IudmFsdWUuY29weShwLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHAuc2hlZW4pLG0uc2hlZW5Sb3VnaG5lc3MudmFsdWU9cC5zaGVlblJvdWdobmVzcyxwLnNoZWVuQ29sb3JNYXAmJihtLnNoZWVuQ29sb3JNYXAudmFsdWU9cC5zaGVlbkNvbG9yTWFwKSxwLnNoZWVuUm91Z2huZXNzTWFwJiYobS5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1wLnNoZWVuUm91Z2huZXNzTWFwKSkscC5jbGVhcmNvYXQ+MCYmKG0uY2xlYXJjb2F0LnZhbHVlPXAuY2xlYXJjb2F0LG0uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXAuY2xlYXJjb2F0Um91Z2huZXNzLHAuY2xlYXJjb2F0TWFwJiYobS5jbGVhcmNvYXRNYXAudmFsdWU9cC5jbGVhcmNvYXRNYXApLHAuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYobS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHAuY2xlYXJjb2F0Tm9ybWFsTWFwJiYobS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLG0uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXAuY2xlYXJjb2F0Tm9ybWFsTWFwLHAuc2lkZT09PWhlJiZtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSkscC50cmFuc21pc3Npb24+MCYmKG0udHJhbnNtaXNzaW9uLnZhbHVlPXAudHJhbnNtaXNzaW9uLG0udHJhbnNtaXNzaW9uU2FtcGxlck1hcC52YWx1ZT1iLnRleHR1cmUsbS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS52YWx1ZS5zZXQoYi53aWR0aCxiLmhlaWdodCkscC50cmFuc21pc3Npb25NYXAmJihtLnRyYW5zbWlzc2lvbk1hcC52YWx1ZT1wLnRyYW5zbWlzc2lvbk1hcCksbS50aGlja25lc3MudmFsdWU9cC50aGlja25lc3MscC50aGlja25lc3NNYXAmJihtLnRoaWNrbmVzc01hcC52YWx1ZT1wLnRoaWNrbmVzc01hcCksbS5hdHRlbnVhdGlvbkRpc3RhbmNlLnZhbHVlPXAuYXR0ZW51YXRpb25EaXN0YW5jZSxtLmF0dGVudWF0aW9uQ29sb3IudmFsdWUuY29weShwLmF0dGVudWF0aW9uQ29sb3IpKSxtLnNwZWN1bGFySW50ZW5zaXR5LnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHksbS5zcGVjdWxhckNvbG9yLnZhbHVlLmNvcHkocC5zcGVjdWxhckNvbG9yKSxwLnNwZWN1bGFySW50ZW5zaXR5TWFwJiYobS5zcGVjdWxhckludGVuc2l0eU1hcC52YWx1ZT1wLnNwZWN1bGFySW50ZW5zaXR5TWFwKSxwLnNwZWN1bGFyQ29sb3JNYXAmJihtLnNwZWN1bGFyQ29sb3JNYXAudmFsdWU9cC5zcGVjdWxhckNvbG9yTWFwKX1mdW5jdGlvbiBkKG0scCl7cC5tYXRjYXAmJihtLm1hdGNhcC52YWx1ZT1wLm1hdGNhcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24geChtLHApe3AuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpLG0ucmVmZXJlbmNlUG9zaXRpb24udmFsdWUuY29weShwLnJlZmVyZW5jZVBvc2l0aW9uKSxtLm5lYXJEaXN0YW5jZS52YWx1ZT1wLm5lYXJEaXN0YW5jZSxtLmZhckRpc3RhbmNlLnZhbHVlPXAuZmFyRGlzdGFuY2V9ZnVuY3Rpb24gdihtLHApe3AuYnVtcE1hcCYmKG0uYnVtcE1hcC52YWx1ZT1wLmJ1bXBNYXAsbS5idW1wU2NhbGUudmFsdWU9cC5idW1wU2NhbGUscC5zaWRlPT09aGUmJihtLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxwLm5vcm1hbE1hcCYmKG0ubm9ybWFsTWFwLnZhbHVlPXAubm9ybWFsTWFwLG0ubm9ybWFsU2NhbGUudmFsdWUuY29weShwLm5vcm1hbFNjYWxlKSxwLnNpZGU9PT1oZSYmbS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkscC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50Qmlhcyl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3Jtczp0LHJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zOmV9fWZ1bmN0aW9uIElFKCl7bGV0IG49cm8oImNhbnZhcyIpO3JldHVybiBuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixufWZ1bmN0aW9uIFZ0KG49e30pe2xldCB0PW4uY2FudmFzIT09dm9pZCAwP24uY2FudmFzOklFKCksZT1uLmNvbnRleHQhPT12b2lkIDA/bi5jb250ZXh0Om51bGwsaT1uLmFscGhhIT09dm9pZCAwP24uYWxwaGE6ITEscj1uLmRlcHRoIT09dm9pZCAwP24uZGVwdGg6ITAscz1uLnN0ZW5jaWwhPT12b2lkIDA/bi5zdGVuY2lsOiEwLG89bi5hbnRpYWxpYXMhPT12b2lkIDA/bi5hbnRpYWxpYXM6ITEsYT1uLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9uLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPW4ucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP24ucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9bi5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP24uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLGQ9W10sZz1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPXJpLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz10aSx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgeD10aGlzLHY9ITEsbT0wLHA9MCxiPW51bGwsXz0tMSxTPW51bGwsTD1uZXcgV3QsQT1uZXcgV3QsSD1udWxsLHR0PXQud2lkdGgsWD10LmhlaWdodCx5PTEsUj1udWxsLEQ9bnVsbCxGPW5ldyBXdCgwLDAsdHQsWCksej1uZXcgV3QoMCwwLHR0LFgpLE49ITEsVj1uZXcgcXIsUT0hMSxhdD0hMSxHPW51bGwsJD1uZXcgd3QsbHQ9bmV3IFQsZHQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiB4dCgpe3JldHVybiBiPT09bnVsbD95OjF9bGV0IGs9ZTtmdW5jdGlvbiBGdChNLEkpe2ZvcihsZXQgTz0wO088TS5sZW5ndGg7TysrKXtsZXQgVT1NW09dLFo9dC5nZXRDb250ZXh0KFUsSSk7aWYoWiE9PW51bGwpcmV0dXJuIFp9cmV0dXJuIG51bGx9dHJ5e2xldCBNPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6cyxhbnRpYWxpYXM6byxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7JGh9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixBdCwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsUCwhMSksaz09PW51bGwpe2xldCBJPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZih4LmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmSS5zaGlmdCgpLGs9RnQoSSxNKSxrPT09bnVsbCl0aHJvdyBGdChJKT9uZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQgd2l0aCB5b3VyIHNlbGVjdGVkIGF0dHJpYnV0ZXMuIik6bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0LiIpfWsuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYoay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKE0pe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrTS5tZXNzYWdlKSxNfWxldCBtdCxTdCxCLHN0LG50LEMsaixKLGl0LGV0LHZ0LGJ0LEl0LFp0LHF0LEUsdyxxLHJ0LGd0LFcsX3QseXQ7ZnVuY3Rpb24gdXQoKXttdD1uZXcgZVMoayksU3Q9bmV3IEoxKGssbXQsbiksbXQuaW5pdChTdCksX3Q9bmV3IExFKGssbXQsU3QpLEI9bmV3IENFKGssbXQsU3QpLHN0PW5ldyByUyhrKSxudD1uZXcgeEUsQz1uZXcgUkUoayxtdCxCLG50LFN0LF90LHN0KSxqPW5ldyBLMSh4KSxKPW5ldyB0Uyh4KSxpdD1uZXcgdk0oayxTdCkseXQ9bmV3IFkxKGssbXQsaXQsU3QpLGV0PW5ldyBuUyhrLGl0LHN0LHl0KSx2dD1uZXcgbFMoayxldCxpdCxzdCkscnQ9bmV3IGFTKGssU3QsQyksRT1uZXcgJDEobnQpLGJ0PW5ldyBnRSh4LGosSixtdCxTdCx5dCxFKSxJdD1uZXcgREUobnQpLFp0PW5ldyB2RSxxdD1uZXcgRUUobXQsU3QpLHE9bmV3IFgxKHgsaixCLHZ0LGksYSksdz1uZXcgVDAoeCx2dCxTdCksZ3Q9bmV3IFoxKGssbXQsc3QsU3QpLFc9bmV3IGlTKGssbXQsc3QsU3QpLHN0LnByb2dyYW1zPWJ0LnByb2dyYW1zLHguY2FwYWJpbGl0aWVzPVN0LHguZXh0ZW5zaW9ucz1tdCx4LnByb3BlcnRpZXM9bnQseC5yZW5kZXJMaXN0cz1adCx4LnNoYWRvd01hcD13LHguc3RhdGU9Qix4LmluZm89c3R9dXQoKTtsZXQgY3Q9bmV3IFp1KHgsayk7dGhpcy54cj1jdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrLmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgTT1tdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO00mJk0ucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihNKXtNIT09dm9pZCAwJiYoeT1NLHRoaXMuc2V0U2l6ZSh0dCxYLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihNKXtyZXR1cm4gTS5zZXQodHQsWCl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihNLEksTyl7aWYoY3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn10dD1NLFg9SSx0LndpZHRoPU1hdGguZmxvb3IoTSp5KSx0LmhlaWdodD1NYXRoLmZsb29yKEkqeSksTyE9PSExJiYodC5zdHlsZS53aWR0aD1NKyJweCIsdC5zdHlsZS5oZWlnaHQ9SSsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCp5LFgqeSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihNLEksTyl7dHQ9TSxYPUkseT1PLHQud2lkdGg9TWF0aC5mbG9vcihNKk8pLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSpPKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxNLEkpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihNKXtyZXR1cm4gTS5jb3B5KEwpfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoRil9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSxJLE8sVSl7TS5pc1ZlY3RvcjQ/Ri5zZXQoTS54LE0ueSxNLnosTS53KTpGLnNldChNLEksTyxVKSxCLnZpZXdwb3J0KEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoeil9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND96LnNldChNLngsTS55LE0ueixNLncpOnouc2V0KE0sSSxPLFUpLEIuc2Npc3NvcihBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXtyZXR1cm4gTn0sdGhpcy5zZXRTY2lzc29yVGVzdD1mdW5jdGlvbihNKXtCLnNldFNjaXNzb3JUZXN0KE49TSl9LHRoaXMuc2V0T3BhcXVlU29ydD1mdW5jdGlvbihNKXtSPU19LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKE0pe0Q9TX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkocS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtxLnNldENsZWFyQ29sb3IuYXBwbHkocSxhcmd1bWVudHMpfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gcS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3Euc2V0Q2xlYXJBbHBoYS5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oTSxJLE8pe2xldCBVPTA7KE09PT12b2lkIDB8fE0pJiYoVXw9MTYzODQpLChJPT09dm9pZCAwfHxJKSYmKFV8PTI1NiksKE89PT12b2lkIDB8fE8pJiYoVXw9MTAyNCksay5jbGVhcihVKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMCwhMSwhMSl9LHRoaXMuY2xlYXJEZXB0aD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITAsITEpfSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITEsITEsITApfSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxadC5kaXNwb3NlKCkscXQuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxqLmRpc3Bvc2UoKSxKLmRpc3Bvc2UoKSx2dC5kaXNwb3NlKCkseXQuZGlzcG9zZSgpLGJ0LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0IixEdCksY3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIsanQpLEcmJihHLmRpc3Bvc2UoKSxHPW51bGwpLHplLnN0b3AoKX07ZnVuY3Rpb24gQXQoTSl7TS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksdj0hMH1mdW5jdGlvbiBQKCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksdj0hMTtsZXQgTT1zdC5hdXRvUmVzZXQsST13LmVuYWJsZWQsTz13LmF1dG9VcGRhdGUsVT13Lm5lZWRzVXBkYXRlLFo9dy50eXBlO3V0KCksc3QuYXV0b1Jlc2V0PU0sdy5lbmFibGVkPUksdy5hdXRvVXBkYXRlPU8sdy5uZWVkc1VwZGF0ZT1VLHcudHlwZT1afWZ1bmN0aW9uIHB0KE0pe2xldCBJPU0udGFyZ2V0O0kucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLGh0KEkpfWZ1bmN0aW9uIGh0KE0pe0V0KE0pLG50LnJlbW92ZShNKX1mdW5jdGlvbiBFdChNKXtsZXQgST1udC5nZXQoTSkucHJvZ3JhbXM7SSE9PXZvaWQgMCYmKEkuZm9yRWFjaChmdW5jdGlvbihPKXtidC5yZWxlYXNlUHJvZ3JhbShPKX0pLE0uaXNTaGFkZXJNYXRlcmlhbCYmYnQucmVsZWFzZVNoYWRlckNhY2hlKE0pKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihNLEksTyxVLFosVHQpe0k9PT1udWxsJiYoST1kdCk7bGV0IEN0PVouaXNNZXNoJiZaLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxMdD1CMChNLEksTyxVLFopO0Iuc2V0TWF0ZXJpYWwoVSxDdCk7bGV0IFJ0PU8uaW5kZXgsR3Q9Ty5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKFJ0PT09bnVsbCl7aWYoR3Q9PT12b2lkIDB8fEd0LmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihSdC5jb3VudD09PTApcmV0dXJuO2xldCB6dD0xO1Uud2lyZWZyYW1lPT09ITAmJihSdD1ldC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoTyksenQ9MikseXQuc2V0dXAoWixVLEx0LE8sUnQpO2xldCBVdCxpZT1ndDtSdCE9PW51bGwmJihVdD1pdC5nZXQoUnQpLGllPVcsaWUuc2V0SW5kZXgoVXQpKTtsZXQgZmk9UnQhPT1udWxsP1J0LmNvdW50Okd0LmNvdW50LFppPU8uZHJhd1JhbmdlLnN0YXJ0Knp0LE90PU8uZHJhd1JhbmdlLmNvdW50Knp0LG5uPVR0IT09bnVsbD9UdC5zdGFydCp6dDowLGxlPVR0IT09bnVsbD9UdC5jb3VudCp6dDoxLzAscm49TWF0aC5tYXgoWmksbm4pLElvPU1hdGgubWluKGZpLFppK090LG5uK2xlKS0xLHNuPU1hdGgubWF4KDAsSW8tcm4rMSk7aWYoc24hPT0wKXtpZihaLmlzTWVzaClVLndpcmVmcmFtZT09PSEwPyhCLnNldExpbmVXaWR0aChVLndpcmVmcmFtZUxpbmV3aWR0aCp4dCgpKSxpZS5zZXRNb2RlKDEpKTppZS5zZXRNb2RlKDQpO2Vsc2UgaWYoWi5pc0xpbmUpe2xldCB2bj1VLmxpbmV3aWR0aDt2bj09PXZvaWQgMCYmKHZuPTEpLEIuc2V0TGluZVdpZHRoKHZuKnh0KCkpLFouaXNMaW5lU2VnbWVudHM/aWUuc2V0TW9kZSgxKTpaLmlzTGluZUxvb3A/aWUuc2V0TW9kZSgyKTppZS5zZXRNb2RlKDMpfWVsc2UgWi5pc1BvaW50cz9pZS5zZXRNb2RlKDApOlouaXNTcHJpdGUmJmllLnNldE1vZGUoNCk7aWYoWi5pc0luc3RhbmNlZE1lc2gpaWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLFouY291bnQpO2Vsc2UgaWYoTy5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgdm49TWF0aC5taW4oTy5pbnN0YW5jZUNvdW50LE8uX21heEluc3RhbmNlQ291bnQpO2llLnJlbmRlckluc3RhbmNlcyhybixzbix2bil9ZWxzZSBpZS5yZW5kZXIocm4sc24pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKE0sSSl7Zj1xdC5nZXQoTSksZi5pbml0KCksZy5wdXNoKGYpLE0udHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKE8pe08uaXNMaWdodCYmTy5sYXllcnMudGVzdChJLmxheWVycykmJihmLnB1c2hMaWdodChPKSxPLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhPKSl9KSxmLnNldHVwTGlnaHRzKHgucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLE0udHJhdmVyc2UoZnVuY3Rpb24oTyl7bGV0IFU9Ty5tYXRlcmlhbDtpZihVKWlmKEFycmF5LmlzQXJyYXkoVSkpZm9yKGxldCBaPTA7WjxVLmxlbmd0aDtaKyspe2xldCBUdD1VW1pdO09sKFR0LE0sTyl9ZWxzZSBPbChVLE0sTyl9KSxnLnBvcCgpLGY9bnVsbH07bGV0IFk9bnVsbDtmdW5jdGlvbiBNdChNKXtZJiZZKE0pfWZ1bmN0aW9uIER0KCl7emUuc3RvcCgpfWZ1bmN0aW9uIGp0KCl7emUuc3RhcnQoKX1sZXQgemU9bmV3IGcwO3plLnNldEFuaW1hdGlvbkxvb3AoTXQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ6ZS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKE0pe1k9TSxjdC5zZXRBbmltYXRpb25Mb29wKE0pLE09PT1udWxsP3plLnN0b3AoKTp6ZS5zdGFydCgpfSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5hZGRFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oTSxJKXtpZihJIT09dm9pZCAwJiZJLmlzQ2FtZXJhIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4iKTtyZXR1cm59aWYodj09PSEwKXJldHVybjtNLmF1dG9VcGRhdGU9PT0hMCYmTS51cGRhdGVNYXRyaXhXb3JsZCgpLEkucGFyZW50PT09bnVsbCYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLGN0LmVuYWJsZWQ9PT0hMCYmY3QuaXNQcmVzZW50aW5nPT09ITAmJihjdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJmN0LnVwZGF0ZUNhbWVyYShJKSxJPWN0LmdldENhbWVyYSgpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkJlZm9yZVJlbmRlcih4LE0sSSxiKSxmPXF0LmdldChNLGcubGVuZ3RoKSxmLmluaXQoKSxnLnB1c2goZiksJC5tdWx0aXBseU1hdHJpY2VzKEkucHJvamVjdGlvbk1hdHJpeCxJLm1hdHJpeFdvcmxkSW52ZXJzZSksVi5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCgkKSxhdD10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLFE9RS5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMsYXQsSSksaD1adC5nZXQoTSxkLmxlbmd0aCksaC5pbml0KCksZC5wdXNoKGgpLG5lKE0sSSwwLHguc29ydE9iamVjdHMpLGguZmluaXNoKCkseC5zb3J0T2JqZWN0cz09PSEwJiZoLnNvcnQoUixEKSxRPT09ITAmJkUuYmVnaW5TaGFkb3dzKCk7bGV0IE89Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYody5yZW5kZXIoTyxNLEkpLFE9PT0hMCYmRS5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxxLnJlbmRlcihoLE0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksSS5pc0FycmF5Q2FtZXJhKXtsZXQgVT1JLmNhbWVyYXM7Zm9yKGxldCBaPTAsVHQ9VS5sZW5ndGg7WjxUdDtaKyspe2xldCBDdD1VW1pdO2VuKGgsTSxDdCxDdC52aWV3cG9ydCl9fWVsc2UgZW4oaCxNLEkpO2IhPT1udWxsJiYoQy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxDLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksTS5pc1NjZW5lPT09ITAmJk0ub25BZnRlclJlbmRlcih4LE0sSSksQi5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLEIuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxCLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksQi5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5dC5yZXNldERlZmF1bHRTdGF0ZSgpLF89LTEsUz1udWxsLGcucG9wKCksZy5sZW5ndGg+MD9mPWdbZy5sZW5ndGgtMV06Zj1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9oPWRbZC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBuZShNLEksTyxVKXtpZihNLnZpc2libGU9PT0hMSlyZXR1cm47aWYoTS5sYXllcnMudGVzdChJLmxheWVycykpe2lmKE0uaXNHcm91cClPPU0ucmVuZGVyT3JkZXI7ZWxzZSBpZihNLmlzTE9EKU0uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZShJKTtlbHNlIGlmKE0uaXNMaWdodClmLnB1c2hMaWdodChNKSxNLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhNKTtlbHNlIGlmKE0uaXNTcHJpdGUpe2lmKCFNLmZydXN0dW1DdWxsZWR8fFYuaW50ZXJzZWN0c1Nwcml0ZShNKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7THQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1lbHNlIGlmKChNLmlzTWVzaHx8TS5pc0xpbmV8fE0uaXNQb2ludHMpJiYoTS5pc1NraW5uZWRNZXNoJiZNLnNrZWxldG9uLmZyYW1lIT09c3QucmVuZGVyLmZyYW1lJiYoTS5za2VsZXRvbi51cGRhdGUoKSxNLnNrZWxldG9uLmZyYW1lPXN0LnJlbmRlci5mcmFtZSksIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzT2JqZWN0KE0pKSl7VSYmbHQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKE0ubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NCgkKTtsZXQgQ3Q9dnQudXBkYXRlKE0pLEx0PU0ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMdCkpe2xldCBSdD1DdC5ncm91cHM7Zm9yKGxldCBHdD0wLHp0PVJ0Lmxlbmd0aDtHdDx6dDtHdCsrKXtsZXQgVXQ9UnRbR3RdLGllPUx0W1V0Lm1hdGVyaWFsSW5kZXhdO2llJiZpZS52aXNpYmxlJiZoLnB1c2goTSxDdCxpZSxPLGx0LnosVXQpfX1lbHNlIEx0LnZpc2libGUmJmgucHVzaChNLEN0LEx0LE8sbHQueixudWxsKX19bGV0IFR0PU0uY2hpbGRyZW47Zm9yKGxldCBDdD0wLEx0PVR0Lmxlbmd0aDtDdDxMdDtDdCsrKW5lKFR0W0N0XSxJLE8sVSl9ZnVuY3Rpb24gZW4oTSxJLE8sVSl7bGV0IFo9TS5vcGFxdWUsVHQ9TS50cmFuc21pc3NpdmUsQ3Q9TS50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhPKSxUdC5sZW5ndGg+MCYmeW4oWixJLE8pLFUmJkIudmlld3BvcnQoTC5jb3B5KFUpKSxaLmxlbmd0aD4wJiZEbyhaLEksTyksVHQubGVuZ3RoPjAmJkRvKFR0LEksTyksQ3QubGVuZ3RoPjAmJkRvKEN0LEksTyl9ZnVuY3Rpb24geW4oTSxJLE8pe2lmKEc9PT1udWxsKXtsZXQgQ3Q9bz09PSEwJiZTdC5pc1dlYkdMMj09PSEwP3NvOk5lO0c9bmV3IEN0KDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6X3QuY29udmVydChVcikhPT1udWxsP1VyOmVpLG1pbkZpbHRlcjpMbCxtYWdGaWx0ZXI6ZmUsd3JhcFM6VmUsd3JhcFQ6VmUsdXNlUmVuZGVyVG9UZXh0dXJlOm10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgVT14LmdldFJlbmRlclRhcmdldCgpO3guc2V0UmVuZGVyVGFyZ2V0KEcpLHguY2xlYXIoKTtsZXQgWj14LnRvbmVNYXBwaW5nO3gudG9uZU1hcHBpbmc9dGksRG8oTSxJLE8pLHgudG9uZU1hcHBpbmc9WixDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KEcpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEcpLHguc2V0UmVuZGVyVGFyZ2V0KFUpfWZ1bmN0aW9uIERvKE0sSSxPKXtsZXQgVT1JLmlzU2NlbmU9PT0hMD9JLm92ZXJyaWRlTWF0ZXJpYWw6bnVsbDtmb3IobGV0IFo9MCxUdD1NLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PU1bWl0sTHQ9Q3Qub2JqZWN0LFJ0PUN0Lmdlb21ldHJ5LEd0PVU9PT1udWxsP0N0Lm1hdGVyaWFsOlUsenQ9Q3QuZ3JvdXA7THQubGF5ZXJzLnRlc3QoTy5sYXllcnMpJiZVMChMdCxJLE8sUnQsR3QsenQpfX1mdW5jdGlvbiBVMChNLEksTyxVLFosVHQpe00ub25CZWZvcmVSZW5kZXIoeCxJLE8sVSxaLFR0KSxNLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKE8ubWF0cml4V29ybGRJbnZlcnNlLE0ubWF0cml4V29ybGQpLE0ubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChNLm1vZGVsVmlld01hdHJpeCksWi5vbkJlZm9yZVJlbmRlcih4LEksTyxVLE0sVHQpLFoudHJhbnNwYXJlbnQ9PT0hMCYmWi5zaWRlPT09SHI/KFouc2lkZT1oZSxaLm5lZWRzVXBkYXRlPSEwLHgucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksWi5zaWRlPWVvLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9SHIpOngucmVuZGVyQnVmZmVyRGlyZWN0KE8sSSxVLFosTSxUdCksTS5vbkFmdGVyUmVuZGVyKHgsSSxPLFUsWixUdCl9ZnVuY3Rpb24gT2woTSxJLE8pe0kuaXNTY2VuZSE9PSEwJiYoST1kdCk7bGV0IFU9bnQuZ2V0KE0pLFo9Zi5zdGF0ZS5saWdodHMsVHQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXksQ3Q9Wi5zdGF0ZS52ZXJzaW9uLEx0PWJ0LmdldFBhcmFtZXRlcnMoTSxaLnN0YXRlLFR0LEksTyksUnQ9YnQuZ2V0UHJvZ3JhbUNhY2hlS2V5KEx0KSxHdD1VLnByb2dyYW1zO1UuZW52aXJvbm1lbnQ9TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0kuZW52aXJvbm1lbnQ6bnVsbCxVLmZvZz1JLmZvZyxVLmVudk1hcD0oTS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0o6aikuZ2V0KE0uZW52TWFwfHxVLmVudmlyb25tZW50KSxHdD09PXZvaWQgMCYmKE0uYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscHQpLEd0PW5ldyBNYXAsVS5wcm9ncmFtcz1HdCk7bGV0IHp0PUd0LmdldChSdCk7aWYoenQhPT12b2lkIDApe2lmKFUuY3VycmVudFByb2dyYW09PT16dCYmVS5saWdodHNTdGF0ZVZlcnNpb249PT1DdClyZXR1cm4gb2YoTSxMdCksenR9ZWxzZSBMdC51bmlmb3Jtcz1idC5nZXRVbmlmb3JtcyhNKSxNLm9uQnVpbGQoTyxMdCx4KSxNLm9uQmVmb3JlQ29tcGlsZShMdCx4KSx6dD1idC5hY3F1aXJlUHJvZ3JhbShMdCxSdCksR3Quc2V0KFJ0LHp0KSxVLnVuaWZvcm1zPUx0LnVuaWZvcm1zO2xldCBVdD1VLnVuaWZvcm1zOyghTS5pc1NoYWRlck1hdGVyaWFsJiYhTS5pc1Jhd1NoYWRlck1hdGVyaWFsfHxNLmNsaXBwaW5nPT09ITApJiYoVXQuY2xpcHBpbmdQbGFuZXM9RS51bmlmb3JtKSxvZihNLEx0KSxVLm5lZWRzTGlnaHRzPWswKE0pLFUubGlnaHRzU3RhdGVWZXJzaW9uPUN0LFUubmVlZHNMaWdodHMmJihVdC5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1aLnN0YXRlLmFtYmllbnQsVXQubGlnaHRQcm9iZS52YWx1ZT1aLnN0YXRlLnByb2JlLFV0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWwsVXQuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxVdC5zcG90TGlnaHRzLnZhbHVlPVouc3RhdGUuc3BvdCxVdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvdyxVdC5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1aLnN0YXRlLnJlY3RBcmVhLFV0Lmx0Y18xLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMxLFV0Lmx0Y18yLnZhbHVlPVouc3RhdGUucmVjdEFyZWFMVEMyLFV0LnBvaW50TGlnaHRzLnZhbHVlPVouc3RhdGUucG9pbnQsVXQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvdyxVdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPVouc3RhdGUuaGVtaSxVdC5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLFV0LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsVXQuc3BvdFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXAsVXQuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsVXQucG9pbnRTaGFkb3dNYXAudmFsdWU9Wi5zdGF0ZS5wb2ludFNoYWRvd01hcCxVdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgaWU9enQuZ2V0VW5pZm9ybXMoKSxmaT1paS5zZXFXaXRoVmFsdWUoaWUuc2VxLFV0KTtyZXR1cm4gVS5jdXJyZW50UHJvZ3JhbT16dCxVLnVuaWZvcm1zTGlzdD1maSx6dH1mdW5jdGlvbiBvZihNLEkpe2xldCBPPW50LmdldChNKTtPLm91dHB1dEVuY29kaW5nPUkub3V0cHV0RW5jb2RpbmcsTy5pbnN0YW5jaW5nPUkuaW5zdGFuY2luZyxPLnNraW5uaW5nPUkuc2tpbm5pbmcsTy5tb3JwaFRhcmdldHM9SS5tb3JwaFRhcmdldHMsTy5tb3JwaE5vcm1hbHM9SS5tb3JwaE5vcm1hbHMsTy5tb3JwaFRhcmdldHNDb3VudD1JLm1vcnBoVGFyZ2V0c0NvdW50LE8ubnVtQ2xpcHBpbmdQbGFuZXM9SS5udW1DbGlwcGluZ1BsYW5lcyxPLm51bUludGVyc2VjdGlvbj1JLm51bUNsaXBJbnRlcnNlY3Rpb24sTy52ZXJ0ZXhBbHBoYXM9SS52ZXJ0ZXhBbHBoYXMsTy52ZXJ0ZXhUYW5nZW50cz1JLnZlcnRleFRhbmdlbnRzLE8udG9uZU1hcHBpbmc9SS50b25lTWFwcGluZ31mdW5jdGlvbiBCMChNLEksTyxVLFope0kuaXNTY2VuZSE9PSEwJiYoST1kdCksQy5yZXNldFRleHR1cmVVbml0cygpO2xldCBUdD1JLmZvZyxDdD1VLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLEx0PWI9PT1udWxsP3gub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOnJpLFJ0PShVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoVS5lbnZNYXB8fEN0KSxHdD1VLnZlcnRleENvbG9ycz09PSEwJiYhIU8uYXR0cmlidXRlcy5jb2xvciYmTy5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx6dD0hIVUubm9ybWFsTWFwJiYhIU8uYXR0cmlidXRlcy50YW5nZW50LFV0PSEhTy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24saWU9ISFPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsZmk9Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/Ty5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsWmk9VS50b25lTWFwcGVkP3gudG9uZU1hcHBpbmc6dGksT3Q9bnQuZ2V0KFUpLG5uPWYuc3RhdGUubGlnaHRzO2lmKFE9PT0hMCYmKGF0PT09ITB8fE0hPT1TKSl7bGV0IFplPU09PT1TJiZVLmlkPT09XztFLnNldFN0YXRlKFUsTSxaZSl9bGV0IGxlPSExO1UudmVyc2lvbj09PU90Ll9fdmVyc2lvbj8oT3QubmVlZHNMaWdodHMmJk90LmxpZ2h0c1N0YXRlVmVyc2lvbiE9PW5uLnN0YXRlLnZlcnNpb258fE90Lm91dHB1dEVuY29kaW5nIT09THR8fFouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITF8fCFaLmlzSW5zdGFuY2VkTWVzaCYmT3QuaW5zdGFuY2luZz09PSEwfHxaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITF8fCFaLmlzU2tpbm5lZE1lc2gmJk90LnNraW5uaW5nPT09ITB8fE90LmVudk1hcCE9PVJ0fHxVLmZvZyYmT3QuZm9nIT09VHR8fE90Lm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYoT3QubnVtQ2xpcHBpbmdQbGFuZXMhPT1FLm51bVBsYW5lc3x8T3QubnVtSW50ZXJzZWN0aW9uIT09RS5udW1JbnRlcnNlY3Rpb24pfHxPdC52ZXJ0ZXhBbHBoYXMhPT1HdHx8T3QudmVydGV4VGFuZ2VudHMhPT16dHx8T3QubW9ycGhUYXJnZXRzIT09VXR8fE90Lm1vcnBoTm9ybWFscyE9PWllfHxPdC50b25lTWFwcGluZyE9PVppfHxTdC5pc1dlYkdMMj09PSEwJiZPdC5tb3JwaFRhcmdldHNDb3VudCE9PWZpKSYmKGxlPSEwKToobGU9ITAsT3QuX192ZXJzaW9uPVUudmVyc2lvbik7bGV0IHJuPU90LmN1cnJlbnRQcm9ncmFtO2xlPT09ITAmJihybj1PbChVLEksWikpO2xldCBJbz0hMSxzbj0hMSx2bj0hMSxfZT1ybi5nZXRVbmlmb3JtcygpLG5zPU90LnVuaWZvcm1zO2lmKEIudXNlUHJvZ3JhbShybi5wcm9ncmFtKSYmKElvPSEwLHNuPSEwLHZuPSEwKSxVLmlkIT09XyYmKF89VS5pZCxzbj0hMCksSW98fFMhPT1NKXtpZihfZS5zZXRWYWx1ZShrLCJwcm9qZWN0aW9uTWF0cml4IixNLnByb2plY3Rpb25NYXRyaXgpLFN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJl9lLnNldFZhbHVlKGssImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKE0uZmFyKzEpL01hdGguTE4yKSksUyE9PU0mJihTPU0sc249ITAsdm49ITApLFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc01lc2hQaG9uZ01hdGVyaWFsfHxVLmlzTWVzaFRvb25NYXRlcmlhbHx8VS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxVLmVudk1hcCl7bGV0IFplPV9lLm1hcC5jYW1lcmFQb3NpdGlvbjtaZSE9PXZvaWQgMCYmWmUuc2V0VmFsdWUoayxsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkpfShVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbCkmJl9lLnNldFZhbHVlKGssImlzT3J0aG9ncmFwaGljIixNLmlzT3J0aG9ncmFwaGljQ2FtZXJhPT09ITApLChVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8VS5pc01lc2hCYXNpY01hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuaXNTaGFkZXJNYXRlcmlhbHx8VS5pc1NoYWRvd01hdGVyaWFsfHxaLmlzU2tpbm5lZE1lc2gpJiZfZS5zZXRWYWx1ZShrLCJ2aWV3TWF0cml4IixNLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoWi5pc1NraW5uZWRNZXNoKXtfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXgiKSxfZS5zZXRPcHRpb25hbChrLFosImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IFplPVouc2tlbGV0b247WmUmJihTdC5mbG9hdFZlcnRleFRleHR1cmVzPyhaZS5ib25lVGV4dHVyZT09PW51bGwmJlplLmNvbXB1dGVCb25lVGV4dHVyZSgpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlIixaZS5ib25lVGV4dHVyZSxDKSxfZS5zZXRWYWx1ZShrLCJib25lVGV4dHVyZVNpemUiLFplLmJvbmVUZXh0dXJlU2l6ZSkpOl9lLnNldE9wdGlvbmFsKGssWmUsImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hIU8mJihPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8Ty5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwKSYmcnQudXBkYXRlKFosTyxVLHJuKSwoc258fE90LnJlY2VpdmVTaGFkb3chPT1aLnJlY2VpdmVTaGFkb3cpJiYoT3QucmVjZWl2ZVNoYWRvdz1aLnJlY2VpdmVTaGFkb3csX2Uuc2V0VmFsdWUoaywicmVjZWl2ZVNoYWRvdyIsWi5yZWNlaXZlU2hhZG93KSksc24mJihfZS5zZXRWYWx1ZShrLCJ0b25lTWFwcGluZ0V4cG9zdXJlIix4LnRvbmVNYXBwaW5nRXhwb3N1cmUpLE90Lm5lZWRzTGlnaHRzJiZPMChucyx2biksVHQmJlUuZm9nJiZJdC5yZWZyZXNoRm9nVW5pZm9ybXMobnMsVHQpLEl0LnJlZnJlc2hNYXRlcmlhbFVuaWZvcm1zKG5zLFUseSxYLEcpLGlpLnVwbG9hZChrLE90LnVuaWZvcm1zTGlzdCxucyxDKSksVS5pc1NoYWRlck1hdGVyaWFsJiZVLnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpLFUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxVLmlzU3ByaXRlTWF0ZXJpYWwmJl9lLnNldFZhbHVlKGssImNlbnRlciIsWi5jZW50ZXIpLF9lLnNldFZhbHVlKGssIm1vZGVsVmlld01hdHJpeCIsWi5tb2RlbFZpZXdNYXRyaXgpLF9lLnNldFZhbHVlKGssIm5vcm1hbE1hdHJpeCIsWi5ub3JtYWxNYXRyaXgpLF9lLnNldFZhbHVlKGssIm1vZGVsTWF0cml4IixaLm1hdHJpeFdvcmxkKSxybn1mdW5jdGlvbiBPMChNLEkpe00uYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9SSxNLmxpZ2h0UHJvYmUubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodHMubmVlZHNVcGRhdGU9SSxNLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPUksTS5zcG90TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0uaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1JfWZ1bmN0aW9uIGswKE0pe3JldHVybiBNLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8TS5pc01lc2hUb29uTWF0ZXJpYWx8fE0uaXNNZXNoUGhvbmdNYXRlcmlhbHx8TS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxNLmlzU2hhZG93TWF0ZXJpYWx8fE0uaXNTaGFkZXJNYXRlcmlhbCYmTS5saWdodHM9PT0hMH10aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG19LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gcH0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihNLEksTyl7bnQuZ2V0KE0udGV4dHVyZSkuX193ZWJnbFRleHR1cmU9SSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPU87bGV0IFU9bnQuZ2V0KE0pO1UuX19oYXNFeHRlcm5hbFRleHR1cmVzPSEwLFUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPU89PT12b2lkIDAsVS5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxNLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksTS51c2VSZW5kZXJUb1RleHR1cmU9ITEsTS51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihNLEkpe2xldCBPPW50LmdldChNKTtPLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1JLE8uX191c2VEZWZhdWx0RnJhbWVidWZmZXI9ST09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oTSxJPTAsTz0wKXtiPU0sbT1JLHA9TztsZXQgVT0hMDtpZihNKXtsZXQgUnQ9bnQuZ2V0KE0pO1J0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyIT09dm9pZCAwPyhCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxVPSExKTpSdC5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/Qy5zZXR1cFJlbmRlclRhcmdldChNKTpSdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJkMucmViaW5kVGV4dHVyZXMoTSxudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxudC5nZXQoTS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgWj1udWxsLFR0PSExLEN0PSExO2lmKE0pe2xldCBSdD1NLnRleHR1cmU7KFJ0LmlzRGF0YVRleHR1cmUzRHx8UnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoQ3Q9ITApO2xldCBHdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO00uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KFo9R3RbSV0sVHQ9ITApOk0udXNlUmVuZGVyYnVmZmVyP1o9bnQuZ2V0KE0pLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpaPUd0LEwuY29weShNLnZpZXdwb3J0KSxBLmNvcHkoTS5zY2lzc29yKSxIPU0uc2Npc3NvclRlc3R9ZWxzZSBMLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxBLmNvcHkoeikubXVsdGlwbHlTY2FsYXIoeSkuZmxvb3IoKSxIPU47aWYoQi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsWikmJlN0LmRyYXdCdWZmZXJzJiZVJiZCLmRyYXdCdWZmZXJzKE0sWiksQi52aWV3cG9ydChMKSxCLnNjaXNzb3IoQSksQi5zZXRTY2lzc29yVGVzdChIKSxUdCl7bGV0IFJ0PW50LmdldChNLnRleHR1cmUpO2suZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrSSxSdC5fX3dlYmdsVGV4dHVyZSxPKX1lbHNlIGlmKEN0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSksR3Q9SXx8MDtrLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LFJ0Ll9fd2ViZ2xUZXh0dXJlLE98fDAsR3QpfV89LTF9LHRoaXMucmVhZFJlbmRlclRhcmdldFBpeGVscz1mdW5jdGlvbihNLEksTyxVLFosVHQsQ3Qpe2lmKCEoTSYmTS5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgTHQ9bnQuZ2V0KE0pLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihNLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZDdCE9PXZvaWQgMCYmKEx0PUx0W0N0XSksTHQpe0IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEx0KTt0cnl7bGV0IFJ0PU0udGV4dHVyZSxHdD1SdC5mb3JtYXQsenQ9UnQudHlwZTtpZihHdCE9PVJlJiZfdC5jb252ZXJ0KEd0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBVdD16dD09PVVyJiYobXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8U3QuaXNXZWJHTDImJm10LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZih6dCE9PWVpJiZfdC5jb252ZXJ0KHp0KSE9PWsuZ2V0UGFyYW1ldGVyKDM1NzM4KSYmISh6dD09PVVpJiYoU3QuaXNXZWJHTDJ8fG10LmhhcygiT0VTX3RleHR1cmVfZmxvYXQiKXx8bXQuaGFzKCJXRUJHTF9jb2xvcl9idWZmZXJfZmxvYXQiKSkpJiYhVXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBVbnNpZ25lZEJ5dGVUeXBlIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHlwZS4iKTtyZXR1cm59ay5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP0k+PTAmJkk8PU0ud2lkdGgtVSYmTz49MCYmTzw9TS5oZWlnaHQtWiYmay5yZWFkUGl4ZWxzKEksTyxVLFosX3QuY29udmVydChHdCksX3QuY29udmVydCh6dCksVHQpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVhZFBpeGVscyBmcm9tIHJlbmRlclRhcmdldCBmYWlsZWQuIEZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZS4iKX1maW5hbGx5e2xldCBSdD1iIT09bnVsbD9udC5nZXQoYikuX193ZWJnbEZyYW1lYnVmZmVyOm51bGw7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPPTApe2lmKEkuaXNGcmFtZWJ1ZmZlclRleHR1cmUhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlKCkgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEZyYW1lYnVmZmVyVGV4dHVyZS4iKTtyZXR1cm59bGV0IFU9TWF0aC5wb3coMiwtTyksWj1NYXRoLmZsb29yKEkuaW1hZ2Uud2lkdGgqVSksVHQ9TWF0aC5mbG9vcihJLmltYWdlLmhlaWdodCpVKTtDLnNldFRleHR1cmUyRChJLDApLGsuY29weVRleFN1YkltYWdlMkQoMzU1MyxPLDAsMCxNLngsTS55LFosVHQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKE0sSSxPLFU9MCl7bGV0IFo9SS5pbWFnZS53aWR0aCxUdD1JLmltYWdlLmhlaWdodCxDdD1fdC5jb252ZXJ0KE8uZm9ybWF0KSxMdD1fdC5jb252ZXJ0KE8udHlwZSk7Qy5zZXRUZXh0dXJlMkQoTywwKSxrLnBpeGVsU3RvcmVpKDM3NDQwLE8uZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsTy5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsTy51bnBhY2tBbGlnbm1lbnQpLEkuaXNEYXRhVGV4dHVyZT9rLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksWixUdCxDdCxMdCxJLmltYWdlLmRhdGEpOkkuaXNDb21wcmVzc2VkVGV4dHVyZT9rLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsVSxNLngsTS55LEkubWlwbWFwc1swXS53aWR0aCxJLm1pcG1hcHNbMF0uaGVpZ2h0LEN0LEkubWlwbWFwc1swXS5kYXRhKTprLnRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksQ3QsTHQsSS5pbWFnZSksVT09PTAmJk8uZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKDM1NTMpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oTSxJLE8sVSxaPTApe2lmKHguaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBUdD1NLm1heC54LU0ubWluLngrMSxDdD1NLm1heC55LU0ubWluLnkrMSxMdD1NLm1heC56LU0ubWluLnorMSxSdD1fdC5jb252ZXJ0KFUuZm9ybWF0KSxHdD1fdC5jb252ZXJ0KFUudHlwZSksenQ7aWYoVS5pc0RhdGFUZXh0dXJlM0QpQy5zZXRUZXh0dXJlM0QoVSwwKSx6dD0zMjg3OTtlbHNlIGlmKFUuaXNEYXRhVGV4dHVyZTJEQXJyYXkpQy5zZXRUZXh0dXJlMkRBcnJheShVLDApLHp0PTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1rLnBpeGVsU3RvcmVpKDM3NDQwLFUuZmxpcFkpLGsucGl4ZWxTdG9yZWkoMzc0NDEsVS5wcmVtdWx0aXBseUFscGhhKSxrLnBpeGVsU3RvcmVpKDMzMTcsVS51bnBhY2tBbGlnbm1lbnQpO2xldCBVdD1rLmdldFBhcmFtZXRlcigzMzE0KSxpZT1rLmdldFBhcmFtZXRlcigzMjg3OCksZmk9ay5nZXRQYXJhbWV0ZXIoMzMxNiksWmk9ay5nZXRQYXJhbWV0ZXIoMzMxNSksT3Q9ay5nZXRQYXJhbWV0ZXIoMzI4NzcpLG5uPU8uaXNDb21wcmVzc2VkVGV4dHVyZT9PLm1pcG1hcHNbMF06Ty5pbWFnZTtrLnBpeGVsU3RvcmVpKDMzMTQsbm4ud2lkdGgpLGsucGl4ZWxTdG9yZWkoMzI4Nzgsbm4uaGVpZ2h0KSxrLnBpeGVsU3RvcmVpKDMzMTYsTS5taW4ueCksay5waXhlbFN0b3JlaSgzMzE1LE0ubWluLnkpLGsucGl4ZWxTdG9yZWkoMzI4NzcsTS5taW4ueiksTy5pc0RhdGFUZXh0dXJlfHxPLmlzRGF0YVRleHR1cmUzRD9rLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubi5kYXRhKTpPLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksay5jb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LG5uLmRhdGEpKTprLnRleFN1YkltYWdlM0QoenQsWixJLngsSS55LEkueixUdCxDdCxMdCxSdCxHdCxubiksay5waXhlbFN0b3JlaSgzMzE0LFV0KSxrLnBpeGVsU3RvcmVpKDMyODc4LGllKSxrLnBpeGVsU3RvcmVpKDMzMTYsZmkpLGsucGl4ZWxTdG9yZWkoMzMxNSxaaSksay5waXhlbFN0b3JlaSgzMjg3NyxPdCksWj09PTAmJlUuZ2VuZXJhdGVNaXBtYXBzJiZrLmdlbmVyYXRlTWlwbWFwKHp0KSxCLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihNKXtDLnNldFRleHR1cmUyRChNLDApLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXttPTAscD0wLGI9bnVsbCxCLnJlc2V0KCkseXQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfVZ0LnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIEp1PWNsYXNzIGV4dGVuZHMgVnR7fTtKdS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgaG89Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGhvKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtoby5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBmbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGZ0KHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IGZvKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtmby5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIFlyPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07WXIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIEdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPWlvLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9dG4oKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLHM9dGhpcy5zdHJpZGU7cjxzO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPXRuKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07R2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIHNlPW5ldyBULFdpPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9cj09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsc2UueCxzZS55LHNlLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLHMpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1zLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJuIG5ldyBRdChuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IFdpKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IHM9MDtzPHRoaXMuaXRlbVNpemU7cysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitzXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6ZSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07V2kucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07ZmwucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIFJyLFdzPW5ldyBULExyPW5ldyBULFByPW5ldyBULERyPW5ldyBLLHFzPW5ldyBLLEEwPW5ldyB3dCxPYT1uZXcgVCxYcz1uZXcgVCxrYT1uZXcgVCxVZz1uZXcgSyxSdT1uZXcgSyxCZz1uZXcgSywkdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLFJyPT09dm9pZCAwKXtScj1uZXcgSHQ7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgR2koZSw1KTtSci5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxSci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgV2koaSwzLDAsITEpKSxSci5zZXRBdHRyaWJ1dGUoInV2IixuZXcgV2koaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PVJyLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBmbCx0aGlzLmNlbnRlcj1uZXcgSyguNSwuNSl9cmF5Y2FzdCh0LGUpe3QuY2FtZXJhPT09bnVsbCYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLExyLnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxBMC5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxQci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkxyLm11bHRpcGx5U2NhbGFyKC1Qci56KTtsZXQgaT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLHIscztpIT09MCYmKHM9TWF0aC5jb3MoaSkscj1NYXRoLnNpbihpKSk7bGV0IG89dGhpcy5jZW50ZXI7SGEoT2Euc2V0KC0uNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKFhzLnNldCguNSwtLjUsMCksUHIsbyxMcixyLHMpLEhhKGthLnNldCguNSwuNSwwKSxQcixvLExyLHIscyksVWcuc2V0KDAsMCksUnUuc2V0KDEsMCksQmcuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoT2EsWHMsa2EsITEsV3MpO2lmKGE9PT1udWxsJiYoSGEoWHMuc2V0KC0uNSwuNSwwKSxQcixvLExyLHIscyksUnUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxrYSxYcywhMSxXcyksYT09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhXcyk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpXcy5jbG9uZSgpLHV2OnJlLmdldFVWKFdzLE9hLFhzLGthLFVnLFJ1LEJnLG5ldyBLKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQuY2VudGVyIT09dm9pZCAwJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319OyR1LnByb3RvdHlwZS5pc1Nwcml0ZT0hMDtmdW5jdGlvbiBIYShuLHQsZSxpLHIscyl7RHIuc3ViVmVjdG9ycyhuLGUpLmFkZFNjYWxhciguNSkubXVsdGlwbHkoaSksciE9PXZvaWQgMD8ocXMueD1zKkRyLngtcipEci55LHFzLnk9cipEci54K3MqRHIueSk6cXMuY29weShEciksbi5jb3B5KHQpLG4ueCs9cXMueCxuLnkrPXFzLnksbi5hcHBseU1hdHJpeDQoQTApfXZhciBPZz1uZXcgVCxrZz1uZXcgV3QsSGc9bmV3IFd0LE5FPW5ldyBULFZnPW5ldyB3dCxkbD1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyB3dCx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyB3dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQsZSl7dGhpcy5za2VsZXRvbj10LGU9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCksZT10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShlKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkoZSkuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IFd0LGU9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBpPTAscj1lLmNvdW50O2k8cjtpKyspe3QueD1lLmdldFgoaSksdC55PWUuZ2V0WShpKSx0Lno9ZS5nZXRaKGkpLHQudz1lLmdldFcoaSk7bGV0IHM9MS90Lm1hbmhhdHRhbkxlbmd0aCgpO3MhPT0xLzA/dC5tdWx0aXBseVNjYWxhcihzKTp0LnNldCgxLDAsMCwwKSxlLnNldFhZWlcoaSx0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxlKXtsZXQgaT10aGlzLnNrZWxldG9uLHI9dGhpcy5nZW9tZXRyeTtrZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSGcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxPZy5jb3B5KGUpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLGUuc2V0KDAsMCwwKTtmb3IobGV0IHM9MDtzPDQ7cysrKXtsZXQgbz1IZy5nZXRDb21wb25lbnQocyk7aWYobyE9PTApe2xldCBhPWtnLmdldENvbXBvbmVudChzKTtWZy5tdWx0aXBseU1hdHJpY2VzKGkuYm9uZXNbYV0ubWF0cml4V29ybGQsaS5ib25lSW52ZXJzZXNbYV0pLGUuYWRkU2NhbGVkVmVjdG9yKE5FLmNvcHkoT2cpLmFwcGx5TWF0cml4NChWZyksbyl9fXJldHVybiBlLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2RsLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBLdT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07S3UucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgUXU9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyLHMsbyxhLGwsYz1mZSx1PWZlLGgsZil7c3VwZXIobnVsbCxvLGEsbCxjLHUscixzLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtRdS5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgcG89Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSxyPTEpe3R5cGVvZiBpPT0ibnVtYmVyIiYmKHI9aSxpPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LGUsaSksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXJ9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cG8ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBHZz1uZXcgd3QsV2c9bmV3IHd0LFZhPVtdLFlzPW5ldyBvZSxqdT1jbGFzcyBleHRlbmRzIG9le2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHBvKG5ldyBGbG9hdDMyQXJyYXkoaSoxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9aSx0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LGUpe2UuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5tYXRyaXhXb3JsZCxyPXRoaXMuY291bnQ7aWYoWXMuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSxZcy5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLFlzLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgcz0wO3M8cjtzKyspe3RoaXMuZ2V0TWF0cml4QXQocyxHZyksV2cubXVsdGlwbHlNYXRyaWNlcyhpLEdnKSxZcy5tYXRyaXhXb3JsZD1XZyxZcy5yYXljYXN0KHQsVmEpO2ZvcihsZXQgbz0wLGE9VmEubGVuZ3RoO288YTtvKyspe2xldCBsPVZhW29dO2wuaW5zdGFuY2VJZD1zLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVZhLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcG8obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2p1LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIHpuPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O3puLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBxZz1uZXcgVCxYZz1uZXcgVCxZZz1uZXcgd3QsTHU9bmV3IG9pLEdhPW5ldyBzaSxtbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHpuKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxzPWUuY291bnQ7cjxzO3IrKylxZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsci0xKSxYZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWcuZGlzdGFuY2VUbyhYZyk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IGVlKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsbz1pLmRyYXdSYW5nZTtpZihpLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmaS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxHYS5jb3B5KGkuYm91bmRpbmdTcGhlcmUpLEdhLmFwcGx5TWF0cml4NChyKSxHYS5yYWRpdXMrPXMsdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShHYSk9PT0hMSlyZXR1cm47WWcuY29weShyKS5pbnZlcnQoKSxMdS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWWcpO2xldCBhPXMvKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQsZj1uZXcgVCxkPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGc9aS5pbmRleCx2PWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihnIT09bnVsbCl7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKGcuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7bGV0IFM9Zy5nZXRYKGIpLEw9Zy5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsUyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsTCksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBIPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0g8dC5uZWFyfHxIPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkgscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCBtPU1hdGgubWF4KDAsby5zdGFydCkscD1NYXRoLm1pbih2LmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBiPW0sXz1wLTE7YjxfO2IrPWQpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh2LGIrMSksTHUuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBMPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO0w8dC5uZWFyfHxMPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOkwscG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX07bW8ucHJvdG90eXBlLmlzTGluZT0hMDt2YXIgWmc9bmV3IFQsSmc9bmV3IFQsZ289Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLHM9ZS5jb3VudDtyPHM7cis9MilaZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksSmcuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT1yPT09MD8wOmlbci0xXSxpW3IrMV09aVtyXStaZy5kaXN0YW5jZVRvKEpnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmVTZWdtZW50cy5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9fTtnby5wcm90b3R5cGUuaXNMaW5lU2VnbWVudHM9ITA7dmFyIHRoPWNsYXNzIGV4dGVuZHMgbW97Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX07dGgucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIHBsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O3BsLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciAkZz1uZXcgd3QsZWg9bmV3IG9pLFdhPW5ldyBzaSxxYT1uZXcgVCxuaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IHBsKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLHM9dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2EuYXBwbHlNYXRyaXg0KHIpLFdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKFdhKT09PSExKXJldHVybjskZy5jb3B5KHIpLmludmVydCgpLGVoLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NCgkZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPWkuaW5kZXgsaD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihjLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspe2xldCB2PWMuZ2V0WChnKTtxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsdiksS2cocWEsdixsLHIsdCxlLHRoaXMpfX1lbHNle2xldCBmPU1hdGgubWF4KDAsby5zdGFydCksZD1NYXRoLm1pbihoLmNvdW50LG8uc3RhcnQrby5jb3VudCk7Zm9yKGxldCBnPWYseD1kO2c8eDtnKyspcWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLGcpLEtnKHFhLGcsbCxyLHQsZSx0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtuaC5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gS2cobix0LGUsaSxyLHMsbyl7bGV0IGE9ZWguZGlzdGFuY2VTcVRvUG9pbnQobik7aWYoYTxlKXtsZXQgbD1uZXcgVDtlaC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO3MucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpvfSl9fXZhciBpaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjKXtzdXBlcih0LGUsaSxyLHMsbyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9byE9PXZvaWQgMD9vOmJlLHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpiZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtpaC5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHJoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHt3aWR0aDp0LGhlaWdodDplfSksdGhpcy5mb3JtYXQ9aSx0aGlzLm1hZ0ZpbHRlcj1mZSx0aGlzLm1pbkZpbHRlcj1mZSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07cmgucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07c2gucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIG9oPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07b2gucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgWnI9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgcz1bXSxvPVtdLGE9W10sbD1bXSxjPW5ldyBULHU9bmV3IEs7by5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PWU7aCsrLGYrPTMpe2xldCBkPWkraC9lKnI7Yy54PXQqTWF0aC5jb3MoZCksYy55PXQqTWF0aC5zaW4oZCksby5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0ob1tmXS90KzEpLzIsdS55PShvW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1lO2grKylzLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWnIodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fTt2YXIgU2s9bmV3IFQsRWs9bmV3IFQsVGs9bmV3IFQsQWs9bmV3IHJlO3ZhciBGZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChpLGUpfWdldFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiBlfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50QXQoaS90KSk7cmV0dXJuIGV9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgZT1bXSxpLHI9dGhpcy5nZXRQb2ludCgwKSxzPTA7ZS5wdXNoKDApO2ZvcihsZXQgbz0xO288PXQ7bysrKWk9dGhpcy5nZXRQb2ludChvL3QpLHMrPWkuZGlzdGFuY2VUbyhyKSxlLnB1c2gocykscj1pO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1lLGV9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxlKXtsZXQgaT10aGlzLmdldExlbmd0aHMoKSxyPTAscz1pLmxlbmd0aCxvO2U/bz1lOm89dCppW3MtMV07bGV0IGE9MCxsPXMtMSxjO2Zvcig7YTw9bDspaWYocj1NYXRoLmZsb29yKGErKGwtYSkvMiksYz1pW3JdLW8sYzwwKWE9cisxO2Vsc2UgaWYoYz4wKWw9ci0xO2Vsc2V7bD1yO2JyZWFrfWlmKHI9bCxpW3JdPT09bylyZXR1cm4gci8ocy0xKTtsZXQgdT1pW3JdLGY9aVtyKzFdLXUsZD0oby11KS9mO3JldHVybihyK2QpLyhzLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQscz10KzFlLTQ7cjwwJiYocj0wKSxzPjEmJihzPTEpO2xldCBvPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KHMpLGw9ZXx8KG8uaXNWZWN0b3IyP25ldyBLOm5ldyBUKTtyZXR1cm4gbC5jb3B5KGEpLnN1YihvKS5ub3JtYWxpemUoKSxsfWdldFRhbmdlbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0VGFuZ2VudChpLGUpfWNvbXB1dGVGcmVuZXRGcmFtZXModCxlKXtsZXQgaT1uZXcgVCxyPVtdLHM9W10sbz1bXSxhPW5ldyBULGw9bmV3IHd0O2ZvcihsZXQgZD0wO2Q8PXQ7ZCsrKXtsZXQgZz1kL3Q7cltkXT10aGlzLmdldFRhbmdlbnRBdChnLG5ldyBUKX1zWzBdPW5ldyBULG9bMF09bmV3IFQ7bGV0IGM9TnVtYmVyLk1BWF9WQUxVRSx1PU1hdGguYWJzKHJbMF0ueCksaD1NYXRoLmFicyhyWzBdLnkpLGY9TWF0aC5hYnMoclswXS56KTt1PD1jJiYoYz11LGkuc2V0KDEsMCwwKSksaDw9YyYmKGM9aCxpLnNldCgwLDEsMCkpLGY8PWMmJmkuc2V0KDAsMCwxKSxhLmNyb3NzVmVjdG9ycyhyWzBdLGkpLm5vcm1hbGl6ZSgpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sYSksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxzWzBdKTtmb3IobGV0IGQ9MTtkPD10O2QrKyl7aWYoc1tkXT1zW2QtMV0uY2xvbmUoKSxvW2RdPW9bZC0xXS5jbG9uZSgpLGEuY3Jvc3NWZWN0b3JzKHJbZC0xXSxyW2RdKSxhLmxlbmd0aCgpPk51bWJlci5FUFNJTE9OKXthLm5vcm1hbGl6ZSgpO2xldCBnPU1hdGguYWNvcyhJZShyW2QtMV0uZG90KHJbZF0pLC0xLDEpKTtzW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoYSxnKSl9b1tkXS5jcm9zc1ZlY3RvcnMocltkXSxzW2RdKX1pZihlPT09ITApe2xldCBkPU1hdGguYWNvcyhJZShzWzBdLmRvdChzW3RdKSwtMSwxKSk7ZC89dCxyWzBdLmRvdChhLmNyb3NzVmVjdG9ycyhzWzBdLHNbdF0pKT4wJiYoZD0tZCk7Zm9yKGxldCBnPTE7Zzw9dDtnKyspc1tnXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHJbZ10sZCpnKSksb1tnXS5jcm9zc1ZlY3RvcnMocltnXSxzW2ddKX1yZXR1cm57dGFuZ2VudHM6cixub3JtYWxzOnMsYmlub3JtYWxzOm99fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSxKcj1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0xLHI9MSxzPTAsbz1NYXRoLlBJKjIsYT0hMSxsPTApe3N1cGVyKCksdGhpcy50eXBlPSJFbGxpcHNlQ3VydmUiLHRoaXMuYVg9dCx0aGlzLmFZPWUsdGhpcy54UmFkaXVzPWksdGhpcy55UmFkaXVzPXIsdGhpcy5hU3RhcnRBbmdsZT1zLHRoaXMuYUVuZEFuZ2xlPW8sdGhpcy5hQ2xvY2t3aXNlPWEsdGhpcy5hUm90YXRpb249bH1nZXRQb2ludCh0LGUpe2xldCBpPWV8fG5ldyBLLHI9TWF0aC5QSSoyLHM9dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxvPU1hdGguYWJzKHMpPE51bWJlci5FUFNJTE9OO2Zvcig7czwwOylzKz1yO2Zvcig7cz5yOylzLT1yO3M8TnVtYmVyLkVQU0lMT04mJihvP3M9MDpzPXIpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhbyYmKHM9PT1yP3M9LXI6cz1zLXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpzLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxkPWMtdGhpcy5hWTtsPWYqdS1kKmgrdGhpcy5hWCxjPWYqaCtkKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtKci5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIG1sPWNsYXNzIGV4dGVuZHMgSnJ7Y29uc3RydWN0b3IodCxlLGkscixzLG8pe3N1cGVyKHQsZSxpLGkscixzLG8pLHRoaXMudHlwZT0iQXJjQ3VydmUifX07bWwucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gdGYoKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIocyxvLGEsbCl7bj1zLHQ9YSxlPS0zKnMrMypvLTIqYS1sLGk9MipzLTIqbythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyl7cihvLGEsYyooYS1zKSxjKihsLW8pKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKHMsbyxhLGwsYyx1LGgpe2xldCBmPShvLXMpL2MtKGEtcykvKGMrdSkrKGEtbykvdSxkPShhLW8pL3UtKGwtbykvKHUraCkrKGwtYSkvaDtmKj11LGQqPXUscihvLGEsZixkKX0sY2FsYzpmdW5jdGlvbihzKXtsZXQgbz1zKnMsYT1vKnM7cmV0dXJuIG4rdCpzK2UqbytpKmF9fX12YXIgWGE9bmV3IFQsUHU9bmV3IHRmLER1PW5ldyB0ZixJdT1uZXcgdGYsZ2w9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdLGU9ITEsaT0iY2VudHJpcGV0YWwiLHI9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPWUsdGhpcy5jdXJ2ZVR5cGU9aSx0aGlzLnRlbnNpb249cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnBvaW50cyxzPXIubGVuZ3RoLG89KHMtKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKG8pLGw9by1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL3MpKzEpKnM6bD09PTAmJmE9PT1zLTEmJihhPXMtMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklc106KFhhLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1YYSk7bGV0IGg9clthJXNdLGY9clsoYSsxKSVzXTtpZih0aGlzLmNsb3NlZHx8YSsyPHM/dT1yWyhhKzIpJXNdOihYYS5zdWJWZWN0b3JzKHJbcy0xXSxyW3MtMl0pLmFkZChyW3MtMV0pLHU9WGEpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBkPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxnPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCksZCkseD1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLGQpLHY9TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxkKTt4PDFlLTQmJih4PTEpLGc8MWUtNCYmKGc9eCksdjwxZS00JiYodj14KSxQdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGgueCxmLngsdS54LGcseCx2KSxEdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGcseCx2KSxJdS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGcseCx2KX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoUHUuaW5pdENhdG11bGxSb20oYy54LGgueCxmLngsdS54LHRoaXMudGVuc2lvbiksRHUuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbiksSXUuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChQdS5jYWxjKGwpLER1LmNhbGMobCksSXUuY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBUKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07Z2wucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiBRZyhuLHQsZSxpLHIpe2xldCBzPShpLXQpKi41LG89KHItZSkqLjUsYT1uKm4sbD1uKmE7cmV0dXJuKDIqZS0yKmkrcytvKSpsKygtMyplKzMqaS0yKnMtbykqYStzKm4rZX1mdW5jdGlvbiBGRShuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9ZnVuY3Rpb24gekUobix0KXtyZXR1cm4gMiooMS1uKSpuKnR9ZnVuY3Rpb24gVUUobix0KXtyZXR1cm4gbipuKnR9ZnVuY3Rpb24ganMobix0LGUsaSl7cmV0dXJuIEZFKG4sdCkrekUobixlKStVRShuLGkpfWZ1bmN0aW9uIEJFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIE9FKG4sdCl7bGV0IGU9MS1uO3JldHVybiAzKmUqZSpuKnR9ZnVuY3Rpb24ga0Uobix0KXtyZXR1cm4gMyooMS1uKSpuKm4qdH1mdW5jdGlvbiBIRShuLHQpe3JldHVybiBuKm4qbip0fWZ1bmN0aW9uIHRvKG4sdCxlLGkscil7cmV0dXJuIEJFKG4sdCkrT0UobixlKStrRShuLGkpK0hFKG4scil9dmFyIHhvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEsscj1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O3hvLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIHhsPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQscj1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aSx0aGlzLnYzPXJ9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQodG8odCxyLngscy54LG8ueCxhLngpLHRvKHQsci55LHMueSxvLnksYS55KSx0byh0LHIueixzLnosby56LGEueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eGwucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyICRyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWdldFRhbmdlbnQodCxlKXtsZXQgaT1lfHxuZXcgSztyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319OyRyLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYWg9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZTtyZXR1cm4gdD09PTE/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHlvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1uZXcgSyxlPW5ldyBLLGk9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5by5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeWw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lLHI9dGhpcy52MCxzPXRoaXMudjEsbz10aGlzLnYyO3JldHVybiBpLnNldChqcyh0LHIueCxzLngsby54KSxqcyh0LHIueSxzLnksby55KSxqcyh0LHIueixzLnosby56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTt5bC5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZTM9ITA7dmFyIHZvPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwbGluZUN1cnZlIix0aGlzLnBvaW50cz10fWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9KHIubGVuZ3RoLTEpKnQsbz1NYXRoLmZsb29yKHMpLGE9cy1vLGw9cltvPT09MD9vOm8tMV0sYz1yW29dLHU9cltvPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpvKzFdLGg9cltvPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpvKzJdO3JldHVybiBpLnNldChRZyhhLGwueCxjLngsdS54LGgueCksUWcoYSxsLnksYy55LHUueSxoLnkpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5wb2ludHNbZV07dC5wb2ludHMucHVzaChyLnRvQXJyYXkoKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5wb2ludHNbZV07dGhpcy5wb2ludHMucHVzaChuZXcgSygpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTt2by5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgQzA9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bWwsQ2F0bXVsbFJvbUN1cnZlMzpnbCxDdWJpY0JlemllckN1cnZlOnhvLEN1YmljQmV6aWVyQ3VydmUzOnhsLEVsbGlwc2VDdXJ2ZTpKcixMaW5lQ3VydmU6JHIsTGluZUN1cnZlMzphaCxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp5byxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6eWwsU3BsaW5lQ3VydmU6dm99KSxsaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCksZT10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMoZSl8fHRoaXMuY3VydmVzLnB1c2gobmV3ICRyKGUsdCkpfWdldFBvaW50KHQsZSl7bGV0IGk9dCp0aGlzLmdldExlbmd0aCgpLHI9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxzPTA7Zm9yKDtzPHIubGVuZ3RoOyl7aWYocltzXT49aSl7bGV0IG89cltzXS1pLGE9dGhpcy5jdXJ2ZXNbc10sbD1hLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLW8vbDtyZXR1cm4gYS5nZXRQb2ludEF0KGMsZSl9cysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgZT1bXSxpO2ZvcihsZXQgcj0wLHM9dGhpcy5jdXJ2ZXM7cjxzLmxlbmd0aDtyKyspe2xldCBvPXNbcl0sYT1vJiZvLmlzRWxsaXBzZUN1cnZlP3QqMjpvJiYoby5pc0xpbmVDdXJ2ZXx8by5pc0xpbmVDdXJ2ZTMpPzE6byYmby5pc1NwbGluZUN1cnZlP3Qqby5wb2ludHMubGVuZ3RoOnQsbD1vLmdldFBvaW50cyhhKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmN1cnZlc1tlXTt0LmN1cnZlcy5wdXNoKHIudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2gobmV3IEMwW3IudHlwZV0oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxfbz1jbGFzcyBleHRlbmRzIGxoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgSyx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IGU9MSxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5saW5lVG8odFtlXS54LHRbZV0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQsZSl7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LGUpLHRoaXN9bGluZVRvKHQsZSl7bGV0IGk9bmV3ICRyKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBzPW5ldyB5byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KGksciksdGhpc31iZXppZXJDdXJ2ZVRvKHQsZSxpLHIscyxvKXtsZXQgYT1uZXcgeG8odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpLG5ldyBLKGksciksbmV3IEsocyxvKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goYSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHMsbyksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCBlPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksaT1uZXcgdm8oZSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LGUsaSxyLHMsbyl7bGV0IGE9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrYSxlK2wsaSxyLHMsbyksdGhpc31hYnNhcmModCxlLGkscixzLG8pe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxlLGksaSxyLHMsbyksdGhpc31lbGxpcHNlKHQsZSxpLHIscyxvLGEsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2MsZSt1LGkscixzLG8sYSxsKSx0aGlzfWFic2VsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz1uZXcgSnIodCxlLGkscixzLG8sYSxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LFVuPWNsYXNzIGV4dGVuZHMgX297Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPXRuKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPXRoaXMuaG9sZXMubGVuZ3RoO2k8cjtpKyspZVtpXT10aGlzLmhvbGVzW2ldLmdldFBvaW50cyh0KTtyZXR1cm4gZX1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dGhpcy5ob2xlc1tlXTt0LmhvbGVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2gobmV3IF9vKCkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sVkU9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKG4sdCxlPTIpe2xldCBpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgscz1SMChuLDAscixlLCEwKSxvPVtdO2lmKCFzfHxzLm5leHQ9PT1zLnByZXYpcmV0dXJuIG87bGV0IGEsbCxjLHUsaCxmLGQ7aWYoaSYmKHM9WUUobix0LHMsZSkpLG4ubGVuZ3RoPjgwKmUpe2E9Yz1uWzBdLGw9dT1uWzFdO2ZvcihsZXQgZz1lO2c8cjtnKz1lKWg9bltnXSxmPW5bZysxXSxoPGEmJihhPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO2Q9TWF0aC5tYXgoYy1hLHUtbCksZD1kIT09MD8xL2Q6MH1yZXR1cm4gd28ocyxvLGUsYSxsLGQpLG99fTtmdW5jdGlvbiBSMChuLHQsZSxpLHIpe2xldCBzLG87aWYocj09PXJUKG4sdCxlLGkpPjApZm9yKHM9dDtzPGU7cys9aSlvPWpnKHMsbltzXSxuW3MrMV0sbyk7ZWxzZSBmb3Iocz1lLWk7cz49dDtzLT1pKW89amcocyxuW3NdLG5bcysxXSxvKTtyZXR1cm4gbyYmRGwobyxvLm5leHQpJiYoYm8obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gbGkobix0KXtpZighbilyZXR1cm4gbjt0fHwodD1uKTtsZXQgZT1uLGk7ZG8gaWYoaT0hMSwhZS5zdGVpbmVyJiYoRGwoZSxlLm5leHQpfHx0ZShlLnByZXYsZSxlLm5leHQpPT09MCkpe2lmKGJvKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfWVsc2UgZT1lLm5leHQ7d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIHdvKG4sdCxlLGkscixzLG8pe2lmKCFuKXJldHVybjshbyYmcyYmUUUobixpLHIscyk7bGV0IGE9bixsLGM7Zm9yKDtuLnByZXYhPT1uLm5leHQ7KXtpZihsPW4ucHJldixjPW4ubmV4dCxzP1dFKG4saSxyLHMpOkdFKG4pKXt0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxibyhuKSxuPWMubmV4dCxhPWMubmV4dDtjb250aW51ZX1pZihuPWMsbj09PWEpe28/bz09PTE/KG49cUUobGkobiksdCxlKSx3byhuLHQsZSxpLHIscywyKSk6bz09PTImJlhFKG4sdCxlLGkscixzKTp3byhsaShuKSx0LGUsaSxyLHMsMSk7YnJlYWt9fX1mdW5jdGlvbiBHRShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKHRlKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZih6cih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmdGUoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBXRShuLHQsZSxpKXtsZXQgcj1uLnByZXYscz1uLG89bi5uZXh0O2lmKHRlKHIscyxvKT49MClyZXR1cm4hMTtsZXQgYT1yLng8cy54P3IueDxvLng/ci54Om8ueDpzLng8by54P3MueDpvLngsbD1yLnk8cy55P3IueTxvLnk/ci55Om8ueTpzLnk8by55P3MueTpvLnksYz1yLng+cy54P3IueD5vLng/ci54Om8ueDpzLng+by54P3MueDpvLngsdT1yLnk+cy55P3IueT5vLnk/ci55Om8ueTpzLnk+by55P3MueTpvLnksaD1jaChhLGwsdCxlLGkpLGY9Y2goYyx1LHQsZSxpKSxkPW4ucHJldlosZz1uLm5leHRaO2Zvcig7ZCYmZC56Pj1oJiZnJiZnLno8PWY7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MHx8KGQ9ZC5wcmV2WixnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MCkpcmV0dXJuITE7Zz1nLm5leHRafWZvcig7ZCYmZC56Pj1oOyl7aWYoZCE9PW4ucHJldiYmZCE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZC54LGQueSkmJnRlKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLnByZXZafWZvcig7ZyYmZy56PD1mOyl7aWYoZyE9PW4ucHJldiYmZyE9PW4ubmV4dCYmenIoci54LHIueSxzLngscy55LG8ueCxvLnksZy54LGcueSkmJnRlKGcucHJldixnLGcubmV4dCk+PTApcmV0dXJuITE7Zz1nLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHFFKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixzPWkubmV4dC5uZXh0OyFEbChyLHMpJiZMMChyLGksaS5uZXh0LHMpJiZNbyhyLHMpJiZNbyhzLHIpJiYodC5wdXNoKHIuaS9lKSx0LnB1c2goaS5pL2UpLHQucHVzaChzLmkvZSksYm8oaSksYm8oaS5uZXh0KSxpPW49cyksaT1pLm5leHR9d2hpbGUoaSE9PW4pO3JldHVybiBsaShpKX1mdW5jdGlvbiBYRShuLHQsZSxpLHIscyl7bGV0IG89bjtkb3tsZXQgYT1vLm5leHQubmV4dDtmb3IoO2EhPT1vLnByZXY7KXtpZihvLmkhPT1hLmkmJmVUKG8sYSkpe2xldCBsPVAwKG8sYSk7bz1saShvLG8ubmV4dCksbD1saShsLGwubmV4dCksd28obyx0LGUsaSxyLHMpLHdvKGwsdCxlLGkscixzKTtyZXR1cm59YT1hLm5leHR9bz1vLm5leHR9d2hpbGUobyE9PW4pfWZ1bmN0aW9uIFlFKG4sdCxlLGkpe2xldCByPVtdLHMsbyxhLGwsYztmb3Iocz0wLG89dC5sZW5ndGg7czxvO3MrKylhPXRbc10qaSxsPXM8by0xP3RbcysxXSppOm4ubGVuZ3RoLGM9UjAobixhLGwsaSwhMSksYz09PWMubmV4dCYmKGMuc3RlaW5lcj0hMCksci5wdXNoKHRUKGMpKTtmb3Ioci5zb3J0KFpFKSxzPTA7czxyLmxlbmd0aDtzKyspSkUocltzXSxlKSxlPWxpKGUsZS5uZXh0KTtyZXR1cm4gZX1mdW5jdGlvbiBaRShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIEpFKG4sdCl7aWYodD0kRShuLHQpLHQpe2xldCBlPVAwKHQsbik7bGkodCx0Lm5leHQpLGxpKGUsZS5uZXh0KX19ZnVuY3Rpb24gJEUobix0KXtsZXQgZT10LGk9bi54LHI9bi55LHM9LTEvMCxvO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgZj1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihmPD1pJiZmPnMpe2lmKHM9ZixmPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1vPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFvKXJldHVybiBudWxsO2lmKGk9PT1zKXJldHVybiBvO2xldCBhPW8sbD1vLngsYz1vLnksdT0xLzAsaDtlPW87ZG8gaT49ZS54JiZlLng+PWwmJmkhPT1lLngmJnpyKHI8Yz9pOnMscixsLGMscjxjP3M6aSxyLGUueCxlLnkpJiYoaD1NYXRoLmFicyhyLWUueSkvKGktZS54KSxNbyhlLG4pJiYoaDx1fHxoPT09dSYmKGUueD5vLnh8fGUueD09PW8ueCYmS0UobyxlKSkpJiYobz1lLHU9aCkpLGU9ZS5uZXh0O3doaWxlKGUhPT1hKTtyZXR1cm4gb31mdW5jdGlvbiBLRShuLHQpe3JldHVybiB0ZShuLnByZXYsbix0LnByZXYpPDAmJnRlKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBRRShuLHQsZSxpKXtsZXQgcj1uO2RvIHIuej09PW51bGwmJihyLno9Y2goci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0O3doaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGpFKHIpfWZ1bmN0aW9uIGpFKG4pe2xldCB0LGUsaSxyLHMsbyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLHM9bnVsbCxvPTA7ZTspe2ZvcihvKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WiwhIWkpO3QrKyk7Zm9yKGw9YzthPjB8fGw+MCYmaTspYSE9PTAmJihsPT09MHx8IWl8fGUuejw9aS56KT8ocj1lLGU9ZS5uZXh0WixhLS0pOihyPWksaT1pLm5leHRaLGwtLSkscz9zLm5leHRaPXI6bj1yLHIucHJldlo9cyxzPXI7ZT1pfXMubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSk7cmV0dXJuIG59ZnVuY3Rpb24gY2gobix0LGUsaSxyKXtyZXR1cm4gbj0zMjc2Nyoobi1lKSpyLHQ9MzI3NjcqKHQtaSkqcixuPShufG48PDgpJjE2NzExOTM1LG49KG58bjw8NCkmMjUyNjQ1MTM1LG49KG58bjw8MikmODU4OTkzNDU5LG49KG58bjw8MSkmMTQzMTY1NTc2NSx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxufHQ8PDF9ZnVuY3Rpb24gdFQobil7bGV0IHQ9bixlPW47ZG8odC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHQ7d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIHpyKG4sdCxlLGkscixzLG8sYSl7cmV0dXJuKHItbykqKHQtYSktKG4tbykqKHMtYSk+PTAmJihuLW8pKihpLWEpLShlLW8pKih0LWEpPj0wJiYoZS1vKSoocy1hKS0oci1vKSooaS1hKT49MH1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFuVChuLHQpJiYoTW8obix0KSYmTW8odCxuKSYmaVQobix0KSYmKHRlKG4ucHJldixuLHQucHJldil8fHRlKG4sdC5wcmV2LHQpKXx8RGwobix0KSYmdGUobi5wcmV2LG4sbi5uZXh0KT4wJiZ0ZSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHRlKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRGwobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gTDAobix0LGUsaSl7bGV0IHI9WmEodGUobix0LGUpKSxzPVphKHRlKG4sdCxpKSksbz1aYSh0ZShlLGksbikpLGE9WmEodGUoZSxpLHQpKTtyZXR1cm4hIShyIT09cyYmbyE9PWF8fHI9PT0wJiZZYShuLGUsdCl8fHM9PT0wJiZZYShuLGksdCl8fG89PT0wJiZZYShlLG4saSl8fGE9PT0wJiZZYShlLHQsaSkpfWZ1bmN0aW9uIFlhKG4sdCxlKXtyZXR1cm4gdC54PD1NYXRoLm1heChuLngsZS54KSYmdC54Pj1NYXRoLm1pbihuLngsZS54KSYmdC55PD1NYXRoLm1heChuLnksZS55KSYmdC55Pj1NYXRoLm1pbihuLnksZS55KX1mdW5jdGlvbiBaYShuKXtyZXR1cm4gbj4wPzE6bjwwPy0xOjB9ZnVuY3Rpb24gblQobix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJkwwKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfWZ1bmN0aW9uIE1vKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLG4ubmV4dCk8MD90ZShuLHQsbi5uZXh0KT49MCYmdGUobixuLnByZXYsdCk+PTA6dGUobix0LG4ucHJldik8MHx8dGUobixuLm5leHQsdCk8MH1mdW5jdGlvbiBpVChuLHQpe2xldCBlPW4saT0hMSxyPShuLngrdC54KS8yLHM9KG4ueSt0LnkpLzI7ZG8gZS55PnMhPWUubmV4dC55PnMmJmUubmV4dC55IT09ZS55JiZyPChlLm5leHQueC1lLngpKihzLWUueSkvKGUubmV4dC55LWUueSkrZS54JiYoaT0haSksZT1lLm5leHQ7d2hpbGUoZSE9PW4pO3JldHVybiBpfWZ1bmN0aW9uIFAwKG4sdCl7bGV0IGU9bmV3IHVoKG4uaSxuLngsbi55KSxpPW5ldyB1aCh0LmksdC54LHQueSkscj1uLm5leHQscz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLHMubmV4dD1pLGkucHJldj1zLGl9ZnVuY3Rpb24gamcobix0LGUsaSl7bGV0IHI9bmV3IHVoKG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gYm8obil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiB1aChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gclQobix0LGUsaSl7bGV0IHI9MDtmb3IobGV0IHM9dCxvPWUtaTtzPGU7cys9aSlyKz0obltvXS1uW3NdKSoobltzKzFdK25bbysxXSksbz1zO3JldHVybiByfXZhciBkbj1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxzPTA7czxlO3I9cysrKWkrPXRbcl0ueCp0W3NdLnktdFtzXS54KnRbcl0ueTtyZXR1cm4gaSouNX1zdGF0aWMgaXNDbG9ja1dpc2UodCl7cmV0dXJuIGRuLmFyZWEodCk8MH1zdGF0aWMgdHJpYW5ndWxhdGVTaGFwZSh0LGUpe2xldCBpPVtdLHI9W10scz1bXTt0MCh0KSxlMChpLHQpO2xldCBvPXQubGVuZ3RoO2UuZm9yRWFjaCh0MCk7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspci5wdXNoKG8pLG8rPWVbbF0ubGVuZ3RoLGUwKGksZVtsXSk7bGV0IGE9VkUudHJpYW5ndWxhdGUoaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpcy5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gc319O2Z1bmN0aW9uIHQwKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBlMChuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKW4ucHVzaCh0W2VdLngpLG4ucHVzaCh0W2VdLnkpfXZhciBjaT1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9bmV3IFVuKFtuZXcgSyguNSwuNSksbmV3IEsoLS41LC41KSxuZXcgSygtLjUsLS41KSxuZXcgSyguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10scz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspe2xldCBjPXRbYV07byhjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShzLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXSxjPWUuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9lLmN1cnZlU2VnbWVudHM6MTIsdT1lLnN0ZXBzIT09dm9pZCAwP2Uuc3RlcHM6MSxoPWUuZGVwdGghPT12b2lkIDA/ZS5kZXB0aDoxLGY9ZS5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ZS5iZXZlbEVuYWJsZWQ6ITAsZD1lLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP2UuYmV2ZWxUaGlja25lc3M6LjIsZz1lLmJldmVsU2l6ZSE9PXZvaWQgMD9lLmJldmVsU2l6ZTpkLS4xLHg9ZS5iZXZlbE9mZnNldCE9PXZvaWQgMD9lLmJldmVsT2Zmc2V0OjAsdj1lLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ZS5iZXZlbFNlZ21lbnRzOjMsbT1lLmV4dHJ1ZGVQYXRoLHA9ZS5VVkdlbmVyYXRvciE9PXZvaWQgMD9lLlVWR2VuZXJhdG9yOnNUO2UuYW1vdW50IT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGg9ZS5hbW91bnQpO2xldCBiLF89ITEsUyxMLEEsSDttJiYoYj1tLmdldFNwYWNlZFBvaW50cyh1KSxfPSEwLGY9ITEsUz1tLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQpLGZ8fCh2PTAsZD0wLGc9MCx4PTApO2xldCB0dD1hLmV4dHJhY3RQb2ludHMoYyksWD10dC5zaGFwZSx5PXR0LmhvbGVzO2lmKCFkbi5pc0Nsb2NrV2lzZShYKSl7WD1YLnJldmVyc2UoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107ZG4uaXNDbG9ja1dpc2UoSikmJih5W0NdPUoucmV2ZXJzZSgpKX19bGV0IEQ9ZG4udHJpYW5ndWxhdGVTaGFwZShYLHkpLEY9WDtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107WD1YLmNvbmNhdChKKX1mdW5jdGlvbiB6KEMsaixKKXtyZXR1cm4ganx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxqLmNsb25lKCkubXVsdGlwbHlTY2FsYXIoSikuYWRkKEMpfWxldCBOPVgubGVuZ3RoLFY9RC5sZW5ndGg7ZnVuY3Rpb24gUShDLGosSil7bGV0IGl0LGV0LHZ0LGJ0PUMueC1qLngsSXQ9Qy55LWoueSxadD1KLngtQy54LHF0PUoueS1DLnksRT1idCpidCtJdCpJdCx3PWJ0KnF0LUl0Klp0O2lmKE1hdGguYWJzKHcpPk51bWJlci5FUFNJTE9OKXtsZXQgcT1NYXRoLnNxcnQoRSkscnQ9TWF0aC5zcXJ0KFp0Klp0K3F0KnF0KSxndD1qLngtSXQvcSxXPWoueStidC9xLF90PUoueC1xdC9ydCx5dD1KLnkrWnQvcnQsdXQ9KChfdC1ndCkqcXQtKHl0LVcpKlp0KS8oYnQqcXQtSXQqWnQpO2l0PWd0K2J0KnV0LUMueCxldD1XK0l0KnV0LUMueTtsZXQgY3Q9aXQqaXQrZXQqZXQ7aWYoY3Q8PTIpcmV0dXJuIG5ldyBLKGl0LGV0KTt2dD1NYXRoLnNxcnQoY3QvMil9ZWxzZXtsZXQgcT0hMTtidD5OdW1iZXIuRVBTSUxPTj9adD5OdW1iZXIuRVBTSUxPTiYmKHE9ITApOmJ0PC1OdW1iZXIuRVBTSUxPTj9adDwtTnVtYmVyLkVQU0lMT04mJihxPSEwKTpNYXRoLnNpZ24oSXQpPT09TWF0aC5zaWduKHF0KSYmKHE9ITApLHE/KGl0PS1JdCxldD1idCx2dD1NYXRoLnNxcnQoRSkpOihpdD1idCxldD1JdCx2dD1NYXRoLnNxcnQoRS8yKSl9cmV0dXJuIG5ldyBLKGl0L3Z0LGV0L3Z0KX1sZXQgYXQ9W107Zm9yKGxldCBDPTAsaj1GLmxlbmd0aCxKPWotMSxpdD1DKzE7QzxqO0MrKyxKKyssaXQrKylKPT09aiYmKEo9MCksaXQ9PT1qJiYoaXQ9MCksYXRbQ109UShGW0NdLEZbSl0sRltpdF0pO2xldCBHPVtdLCQsbHQ9YXQuY29uY2F0KCk7Zm9yKGxldCBDPTAsaj15Lmxlbmd0aDtDPGo7QysrKXtsZXQgSj15W0NdOyQ9W107Zm9yKGxldCBpdD0wLGV0PUoubGVuZ3RoLHZ0PWV0LTEsYnQ9aXQrMTtpdDxldDtpdCsrLHZ0KyssYnQrKyl2dD09PWV0JiYodnQ9MCksYnQ9PT1ldCYmKGJ0PTApLCRbaXRdPVEoSltpdF0sSlt2dF0sSltidF0pO0cucHVzaCgkKSxsdD1sdC5jb25jYXQoJCl9Zm9yKGxldCBDPTA7Qzx2O0MrKyl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksLUopfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7bXQocXQueCxxdC55LC1KKX19fWxldCBkdD1nK3g7Zm9yKGxldCBDPTA7QzxOO0MrKyl7bGV0IGo9Zj96KFhbQ10sbHRbQ10sZHQpOlhbQ107Xz8oQS5jb3B5KFMubm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai54KSxMLmNvcHkoUy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGoueSksSC5jb3B5KGJbMF0pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChqLngsai55LDApfWZvcihsZXQgQz0xO0M8PXU7QysrKWZvcihsZXQgaj0wO2o8TjtqKyspe2xldCBKPWY/eihYW2pdLGx0W2pdLGR0KTpYW2pdO18/KEEuY29weShTLm5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueCksTC5jb3B5KFMuYmlub3JtYWxzW0NdKS5tdWx0aXBseVNjYWxhcihKLnkpLEguY29weShiW0NdKS5hZGQoQSkuYWRkKEwpLG10KEgueCxILnksSC56KSk6bXQoSi54LEoueSxoL3UqQyl9Zm9yKGxldCBDPXYtMTtDPj0wO0MtLSl7bGV0IGo9Qy92LEo9ZCpNYXRoLmNvcyhqKk1hdGguUEkvMiksaXQ9ZypNYXRoLnNpbihqKk1hdGguUEkvMikreDtmb3IobGV0IGV0PTAsdnQ9Ri5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXooRltldF0sYXRbZXRdLGl0KTttdChidC54LGJ0LnksaCtKKX1mb3IobGV0IGV0PTAsdnQ9eS5sZW5ndGg7ZXQ8dnQ7ZXQrKyl7bGV0IGJ0PXlbZXRdOyQ9R1tldF07Zm9yKGxldCBJdD0wLFp0PWJ0Lmxlbmd0aDtJdDxadDtJdCsrKXtsZXQgcXQ9eihidFtJdF0sJFtJdF0saXQpO18/bXQocXQueCxxdC55K2JbdS0xXS55LGJbdS0xXS54K0opOm10KHF0LngscXQueSxoK0opfX19eHQoKSxrKCk7ZnVuY3Rpb24geHQoKXtsZXQgQz1yLmxlbmd0aC8zO2lmKGYpe2xldCBqPTAsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzJdK0osZXRbMV0rSixldFswXStKKX1qPXUrdioyLEo9TipqO2ZvcihsZXQgaXQ9MDtpdDxWO2l0Kyspe2xldCBldD1EW2l0XTtTdChldFswXStKLGV0WzFdK0osZXRbMl0rSil9fWVsc2V7Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzJdLEpbMV0sSlswXSl9Zm9yKGxldCBqPTA7ajxWO2orKyl7bGV0IEo9RFtqXTtTdChKWzBdK04qdSxKWzFdK04qdSxKWzJdK04qdSl9fWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMCl9ZnVuY3Rpb24gaygpe2xldCBDPXIubGVuZ3RoLzMsaj0wO0Z0KEYsaiksais9Ri5sZW5ndGg7Zm9yKGxldCBKPTAsaXQ9eS5sZW5ndGg7SjxpdDtKKyspe2xldCBldD15W0pdO0Z0KGV0LGopLGorPWV0Lmxlbmd0aH1pLmFkZEdyb3VwKEMsci5sZW5ndGgvMy1DLDEpfWZ1bmN0aW9uIEZ0KEMsail7bGV0IEo9Qy5sZW5ndGg7Zm9yKDstLUo+PTA7KXtsZXQgaXQ9SixldD1KLTE7ZXQ8MCYmKGV0PUMubGVuZ3RoLTEpO2ZvcihsZXQgdnQ9MCxidD11K3YqMjt2dDxidDt2dCsrKXtsZXQgSXQ9Tip2dCxadD1OKih2dCsxKSxxdD1qK2l0K0l0LEU9aitldCtJdCx3PWorZXQrWnQscT1qK2l0K1p0O0IocXQsRSx3LHEpfX19ZnVuY3Rpb24gbXQoQyxqLEope2wucHVzaChDKSxsLnB1c2goaiksbC5wdXNoKEopfWZ1bmN0aW9uIFN0KEMsaixKKXtzdChDKSxzdChqKSxzdChKKTtsZXQgaXQ9ci5sZW5ndGgvMyxldD1wLmdlbmVyYXRlVG9wVVYoaSxyLGl0LTMsaXQtMixpdC0xKTtudChldFswXSksbnQoZXRbMV0pLG50KGV0WzJdKX1mdW5jdGlvbiBCKEMsaixKLGl0KXtzdChDKSxzdChqKSxzdChpdCksc3Qoaiksc3QoSiksc3QoaXQpO2xldCBldD1yLmxlbmd0aC8zLHZ0PXAuZ2VuZXJhdGVTaWRlV2FsbFVWKGkscixldC02LGV0LTMsZXQtMixldC0xKTtudCh2dFswXSksbnQodnRbMV0pLG50KHZ0WzNdKSxudCh2dFsxXSksbnQodnRbMl0pLG50KHZ0WzNdKX1mdW5jdGlvbiBzdChDKXtyLnB1c2gobFtDKjMrMF0pLHIucHVzaChsW0MqMysxXSksci5wdXNoKGxbQyozKzJdKX1mdW5jdGlvbiBudChDKXtzLnB1c2goQy54KSxzLnB1c2goQy55KX19fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyxpPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO3JldHVybiBvVChlLGksdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCBzPTAsbz10LnNoYXBlcy5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVt0LnNoYXBlc1tzXV07aS5wdXNoKGEpfWxldCByPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gciE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKSxuZXcgY2koaSx0Lm9wdGlvbnMpfX0sc1Q9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgcz10W2UqM10sbz10W2UqMysxXSxhPXRbaSozXSxsPXRbaSozKzFdLGM9dFtyKjNdLHU9dFtyKjMrMV07cmV0dXJuW25ldyBLKHMsbyksbmV3IEsoYSxsKSxuZXcgSyhjLHUpXX0sZ2VuZXJhdGVTaWRlV2FsbFVWOmZ1bmN0aW9uKG4sdCxlLGkscixzKXtsZXQgbz10W2UqM10sYT10W2UqMysxXSxsPXRbZSozKzJdLGM9dFtpKjNdLHU9dFtpKjMrMV0saD10W2kqMysyXSxmPXRbciozXSxkPXRbciozKzFdLGc9dFtyKjMrMl0seD10W3MqM10sdj10W3MqMysxXSxtPXRbcyozKzJdO3JldHVybiBNYXRoLmFicyhhLXUpPE1hdGguYWJzKG8tYyk/W25ldyBLKG8sMS1sKSxuZXcgSyhjLDEtaCksbmV3IEsoZiwxLWcpLG5ldyBLKHgsMS1tKV06W25ldyBLKGEsMS1sKSxuZXcgSyh1LDEtaCksbmV3IEsoZCwxLWcpLG5ldyBLKHYsMS1tKV19fTtmdW5jdGlvbiBvVChuLHQsZSl7aWYoZS5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe2xldCBzPW5baV07ZS5zaGFwZXMucHVzaChzLnV1aWQpfWVsc2UgZS5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0LmV4dHJ1ZGVQYXRoIT09dm9pZCAwJiYoZS5vcHRpb25zLmV4dHJ1ZGVQYXRoPXQuZXh0cnVkZVBhdGgudG9KU09OKCkpLGV9dmFyIHFpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKDAsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOmV9O2xldCBpPVtdLHI9W10scz1bXSxvPVtdLGE9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAoYSxsLHUpLGErPWwsbD0wO3RoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKG8sMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9ci5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhlKSxkPWYuc2hhcGUsZz1mLmhvbGVzO2RuLmlzQ2xvY2tXaXNlKGQpPT09ITEmJihkPWQucmV2ZXJzZSgpKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZG4uaXNDbG9ja1dpc2UocCk9PT0hMCYmKGdbdl09cC5yZXZlcnNlKCkpfWxldCB4PWRuLnRyaWFuZ3VsYXRlU2hhcGUoZCxnKTtmb3IobGV0IHY9MCxtPWcubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWdbdl07ZD1kLmNvbmNhdChwKX1mb3IobGV0IHY9MCxtPWQubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPWRbdl07ci5wdXNoKHAueCxwLnksMCkscy5wdXNoKDAsMCwxKSxvLnB1c2gocC54LHAueSl9Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXtsZXQgcD14W3ZdLGI9cFswXStoLF89cFsxXStoLFM9cFsyXStoO2kucHVzaChiLF8sUyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLGU9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gYVQoZSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxzPXQuc2hhcGVzLmxlbmd0aDtyPHM7cisrKXtsZXQgbz1lW3Quc2hhcGVzW3JdXTtpLnB1c2gobyl9cmV0dXJuIG5ldyBxaShpLHQuY3VydmVTZWdtZW50cyl9fTtmdW5jdGlvbiBhVChuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj1uW2VdO3Quc2hhcGVzLnB1c2goci51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH12YXIgaGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O2hoLnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciB2bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBmdCgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMucm91Z2huZXNzTWFwPW51bGwsdGhpcy5tZXRhbG5lc3NNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmVudk1hcEludGVuc2l0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMucm91Z2huZXNzPXQucm91Z2huZXNzLHRoaXMubWV0YWxuZXNzPXQubWV0YWxuZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMucm91Z2huZXNzTWFwPXQucm91Z2huZXNzTWFwLHRoaXMubWV0YWxuZXNzTWFwPXQubWV0YWxuZXNzTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3ZsLnByb3RvdHlwZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPSEwO3ZhciBmaD1jbGFzcyBleHRlbmRzIHZse2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWUoMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuaW9yPSgxKy40KmUpLygxLS40KmUpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgZnQoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IGZ0KDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O2ZoLnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBkaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGZ0KDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtkaC5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgcGg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuZ3JhZGllbnRNYXA9dC5ncmFkaWVudE1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3BoLnByb3RvdHlwZS5pc01lc2hUb29uTWF0ZXJpYWw9ITA7dmFyIG1oPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O21oLnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgZ2g9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1DbCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtnaC5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4aD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9dHMsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSygxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3hoLnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgeWg9Y2xhc3MgZXh0ZW5kcyB6bntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt5aC5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIEt0PXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gS3QuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCxlIT09dm9pZCAwP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOnR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UPT0ibnVtYmVyIj9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KHIscyl7cmV0dXJuIG5bcl0tbltzXX1sZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQodCksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBzPTAsbz0wO28hPT1pOysrcyl7bGV0IGE9ZVtzXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW28rK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLHM9blswXTtmb3IoO3MhPT12b2lkIDAmJnNbaV09PT12b2lkIDA7KXM9bltyKytdO2lmKHM9PT12b2lkIDApcmV0dXJuO2xldCBvPXNbaV07aWYobyE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KG8pKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoLmFwcGx5KGUsbykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgaWYoby50b0FycmF5IT09dm9pZCAwKWRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksby50b0FycmF5KGUsZS5sZW5ndGgpKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKTtlbHNlIGRvIG89c1tpXSxvIT09dm9pZCAwJiYodC5wdXNoKHMudGltZSksZS5wdXNoKG8pKSxzPW5bcisrXTt3aGlsZShzIT09dm9pZCAwKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBzPW4uY2xvbmUoKTtzLm5hbWU9dDtsZXQgbz1bXTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPXMudHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxoPVtdLGY9W107Zm9yKGxldCBkPTA7ZDxjLnRpbWVzLmxlbmd0aDsrK2Qpe2xldCBnPWMudGltZXNbZF0qcjtpZighKGc8ZXx8Zz49aSkpe2gucHVzaChjLnRpbWVzW2RdKTtmb3IobGV0IHg9MDt4PHU7Kyt4KWYucHVzaChjLnZhbHVlc1tkKnUreF0pfX1oLmxlbmd0aCE9PTAmJihjLnRpbWVzPUt0LmNvbnZlcnRBcnJheShoLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPUt0LmNvbnZlcnRBcnJheShmLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxvLnB1c2goYykpfXMudHJhY2tzPW87bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbClhPnMudHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1zLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKXMudHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBzLnJlc2V0RHVyYXRpb24oKSxzfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLHM9dC9pO2ZvcihsZXQgbz0wO288cjsrK28pe2xldCBhPWUudHJhY2tzW29dLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKGw9PT0iYm9vbCJ8fGw9PT0ic3RyaW5nIiljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKG0pe3JldHVybiBtLm5hbWU9PT1hLm5hbWUmJm0uVmFsdWVUeXBlTmFtZT09PWx9KTtpZihjPT09dm9pZCAwKWNvbnRpbnVlO2xldCB1PTAsaD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWgvMyk7bGV0IGY9MCxkPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKGY9ZC8zKTtsZXQgZz1hLnRpbWVzLmxlbmd0aC0xLHg7aWYoczw9YS50aW1lc1swXSl7bGV0IG09dSxwPWgtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNlIGlmKHM+PWEudGltZXNbZ10pe2xldCBtPWcqaCt1LHA9bStoLXU7eD1LdC5hcnJheVNsaWNlKGEudmFsdWVzLG0scCl9ZWxzZXtsZXQgbT1hLmNyZWF0ZUludGVycG9sYW50KCkscD11LGI9aC11O20uZXZhbHVhdGUocykseD1LdC5hcnJheVNsaWNlKG0ucmVzdWx0QnVmZmVyLHAsYil9bD09PSJxdWF0ZXJuaW9uIiYmbmV3IEVlKCkuZnJvbUFycmF5KHgpLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkoeCk7bGV0IHY9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBtPTA7bTx2OysrbSl7bGV0IHA9bSpkK2Y7aWYobD09PSJxdWF0ZXJuaW9uIilFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyxwLHgsMCxjLnZhbHVlcyxwKTtlbHNle2xldCBiPWQtZioyO2ZvcihsZXQgXz0wO188YjsrK18pYy52YWx1ZXNbcCtfXS09eFtfXX19fXJldHVybiBuLmJsZW5kTW9kZT1kMCxufX0scG49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXIhPT12b2lkIDA/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxzPWVbaS0xXTt0OntlOntsZXQgbztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZihyPT09dm9pZCAwKXtpZih0PHMpYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LHMpfWlmKGk9PT1hKWJyZWFrO2lmKHM9cixyPWVbKytpXSx0PHIpYnJlYWsgZX1vPWUubGVuZ3RoO2JyZWFrIG59aWYoISh0Pj1zKSl7bGV0IGE9ZVsxXTt0PGEmJihpPTIscz1hKTtmb3IobGV0IGw9aS0yOzspe2lmKHM9PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKGk9PT1sKWJyZWFrO2lmKHI9cyxzPWVbLS1pLTFdLHQ+PXMpYnJlYWsgZX1vPWksaT0wO2JyZWFrIG59YnJlYWsgdH1mb3IoO2k8bzspe2xldCBhPWkrbz4+PjE7dDxlW2FdP289YTppPWErMX1pZihyPWVbaV0scz1lW2ktMV0scz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYocj09PXZvaWQgMClyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSxzLHQpfXRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5pbnRlcnZhbENoYW5nZWRfKGkscyxyKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8oaSxzLHQscil9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCBlPXRoaXMucmVzdWx0QnVmZmVyLGk9dGhpcy5zYW1wbGVWYWx1ZXMscj10aGlzLnZhbHVlU2l6ZSxzPXQqcjtmb3IobGV0IG89MDtvIT09cjsrK28pZVtvXT1pW3Mrb107cmV0dXJuIGV9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtwbi5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPXBuLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3BuLnByb3RvdHlwZS5hZnRlckVuZF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHZoPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGksciksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0Ok5yLGVuZGluZ0VuZDpOcn19aW50ZXJ2YWxDaGFuZ2VkXyh0LGUsaSl7bGV0IHI9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMscz10LTIsbz10KzEsYT1yW3NdLGw9cltvXTtpZihhPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIEZyOnM9dCxhPTIqZS1pO2JyZWFrO2Nhc2UgZWw6cz1yLmxlbmd0aC0yLGE9ZStyW3NdLXJbcysxXTticmVhaztkZWZhdWx0OnM9dCxhPWl9aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgRnI6bz10LGw9MippLWU7YnJlYWs7Y2FzZSBlbDpvPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0Om89dC0xLGw9ZX1sZXQgYz0oaS1lKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1zKnUsdGhpcy5fb2Zmc2V0TmV4dD1vKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixkPXRoaXMuX3dlaWdodE5leHQsZz0oaS1lKS8oci1lKSx4PWcqZyx2PXgqZyxtPS1mKnYrMipmKngtZipnLHA9KDErZikqdisoLTEuNS0yKmYpKngrKC0uNStmKSpnKzEsYj0oLTEtZCkqdisoMS41K2QpKngrLjUqZyxfPWQqdi1kKng7Zm9yKGxldCBTPTA7UyE9PWE7KytTKXNbU109bSpvW3UrU10rcCpvW2MrU10rYipvW2wrU10rXypvW2grU107cmV0dXJuIHN9fSxfbD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09YTsrK2Ypc1tmXT1vW2MrZl0qaCtvW2wrZl0qdTtyZXR1cm4gc319LF9oPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LFhlPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKGU9PT12b2lkIDB8fGUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9S3QuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9S3QuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBlPXQuY29uc3RydWN0b3IsaTtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpLdC5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOkt0LmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBfaCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgX2wodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHZoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIGphOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIHRsOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBldTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKGU9PT12b2lkIDApe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGkpO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixpKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PWUsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gamE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gdGw7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZXV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKj10fXJldHVybiB0aGlzfXRyaW0odCxlKXtsZXQgaT10aGlzLnRpbWVzLHI9aS5sZW5ndGgscz0wLG89ci0xO2Zvcig7cyE9PXImJmlbc108dDspKytzO2Zvcig7byE9PS0xJiZpW29dPmU7KS0tbztpZigrK28scyE9PTB8fG8hPT1yKXtzPj1vJiYobz1NYXRoLm1heChvLDEpLHM9by0xKTtsZXQgYT10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9S3QuYXJyYXlTbGljZShpLHMsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxzKmEsbyphKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLGU9dGhpcy5nZXRWYWx1ZVNpemUoKTtlLU1hdGguZmxvb3IoZSkhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLHM9aS5sZW5ndGg7cz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBvPW51bGw7Zm9yKGxldCBhPTA7YSE9PXM7YSsrKXtsZXQgbD1pW2FdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobyE9PW51bGwmJm8+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxvKSx0PSExO2JyZWFrfW89bH1pZihyIT09dm9pZCAwJiZLdC5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PUt0LmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj10aGlzLmdldEludGVycG9sYXRpb24oKT09PWV1LHM9dC5sZW5ndGgtMSxvPTE7Zm9yKGxldCBhPTE7YTxzOysrYSl7bGV0IGw9ITEsYz10W2FdLHU9dFthKzFdO2lmKGMhPT11JiYoYSE9PTF8fGMhPT10WzBdKSlpZihyKWw9ITA7ZWxzZXtsZXQgaD1hKmksZj1oLWksZD1oK2k7Zm9yKGxldCBnPTA7ZyE9PWk7KytnKXtsZXQgeD1lW2grZ107aWYoeCE9PWVbZitnXXx8eCE9PWVbZCtnXSl7bD0hMDticmVha319fWlmKGwpe2lmKGEhPT1vKXt0W29dPXRbYV07bGV0IGg9YSppLGY9byppO2ZvcihsZXQgZD0wO2QhPT1pOysrZCllW2YrZF09ZVtoK2RdfSsrb319aWYocz4wKXt0W29dPXRbc107Zm9yKGxldCBhPXMqaSxsPW8qaSxjPTA7YyE9PWk7KytjKWVbbCtjXT1lW2ErY107KytvfXJldHVybiBvIT09dC5sZW5ndGg/KHRoaXMudGltZXM9S3QuYXJyYXlTbGljZSh0LDAsbyksdGhpcy52YWx1ZXM9S3QuYXJyYXlTbGljZShlLDAsbyppKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1lKSx0aGlzfWNsb25lKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLGU9S3QuYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxpPXRoaXMuY29uc3RydWN0b3Iscj1uZXcgaSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtYZS5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O1hlLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj10bDt2YXIgdWk9Y2xhc3MgZXh0ZW5kcyBYZXt9O3VpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjt1aS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3VpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDt1aS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgd2w9Y2xhc3MgZXh0ZW5kcyBYZXt9O3dsLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIEtyPWNsYXNzIGV4dGVuZHMgWGV7fTtLci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgd2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9KGktZSkvKHItZSksYz10KmE7Zm9yKGxldCB1PWMrYTtjIT09dTtjKz00KUVlLnNsZXJwRmxhdChzLDAsbyxjLWEsbyxjLGwpO3JldHVybiBzfX0sWGk9Y2xhc3MgZXh0ZW5kcyBYZXtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyB3aCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WGkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO1hpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBoaT1jbGFzcyBleHRlbmRzIFhle307aGkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7aGkucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtoaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249amE7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7aGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIFFyPWNsYXNzIGV4dGVuZHMgWGV7fTtRci5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgTWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj1RaCl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9aSx0aGlzLmR1cmF0aW9uPWUsdGhpcy5ibGVuZE1vZGU9cix0aGlzLnV1aWQ9dG4oKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgZT1bXSxpPXQudHJhY2tzLHI9MS8odC5mcHN8fDEpO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7byE9PWE7KytvKWUucHVzaChjVChpW29dKS5zY2FsZShyKSk7bGV0IHM9bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIHMudXVpZD10LnV1aWQsc31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgcz0wLG89aS5sZW5ndGg7cyE9PW87KytzKWUucHVzaChYZS50b0pTT04oaVtzXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgcz1lLmxlbmd0aCxvPVtdO2ZvcihsZXQgYT0wO2E8czthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK3MtMSklcyxhLChhKzEpJXMpLGMucHVzaCgwLDEsMCk7bGV0IHU9S3QuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPUt0LnNvcnRlZEFycmF5KGwsMSx1KSxjPUt0LnNvcnRlZEFycmF5KGMsMSx1KSwhciYmbFswXT09PTAmJihsLnB1c2gocyksYy5wdXNoKGNbMF0pKSxvLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLG8pfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxzPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChzKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9cltoXTtmfHwocltoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBvPVtdO2ZvcihsZXQgYSBpbiByKW8ucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gb31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGgsZixkLGcseCl7aWYoZC5sZW5ndGghPT0wKXtsZXQgdj1bXSxtPVtdO0t0LmZsYXR0ZW5KU09OKGQsdixtLGcpLHYubGVuZ3RoIT09MCYmeC5wdXNoKG5ldyBoKGYsdixtKSl9fSxyPVtdLHM9dC5uYW1lfHwiZGVmYXVsdCIsbz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBkPXt9LGc7Zm9yKGc9MDtnPGYubGVuZ3RoO2crKylpZihmW2ddLm1vcnBoVGFyZ2V0cylmb3IobGV0IHg9MDt4PGZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDt4KyspZFtmW2ddLm1vcnBoVGFyZ2V0c1t4XV09LTE7Zm9yKGxldCB4IGluIGQpe2xldCB2PVtdLG09W107Zm9yKGxldCBwPTA7cCE9PWZbZ10ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3Ape2xldCBiPWZbZ107di5wdXNoKGIudGltZSksbS5wdXNoKGIubW9ycGhUYXJnZXQ9PT14PzE6MCl9ci5wdXNoKG5ldyBLcigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIreCsiXSIsdixtKSl9bD1kLmxlbmd0aCoob3x8MSl9ZWxzZXtsZXQgZD0iLmJvbmVzWyIrZVtoXS5uYW1lKyJdIjtpKFFyLGQrIi5wb3NpdGlvbiIsZiwicG9zIixyKSxpKFhpLGQrIi5xdWF0ZXJuaW9uIixmLCJyb3QiLHIpLGkoUXIsZCsiLnNjYWxlIixmLCJzY2wiLHIpfX1yZXR1cm4gci5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMocyxsLHIsYSl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLGU9MDtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLHMudGltZXNbcy50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGxUKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIEtyO2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gUXI7Y2FzZSJjb2xvciI6cmV0dXJuIHdsO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIFhpO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4gdWk7Y2FzZSJzdHJpbmciOnJldHVybiBoaX10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfWZ1bmN0aW9uIGNUKG4pe2lmKG4udHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9bFQobi50eXBlKTtpZihuLnRpbWVzPT09dm9pZCAwKXtsZXQgZT1bXSxpPVtdO0t0LmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciBqcj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxNaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9dGhpcyxzPSExLG89MCxhPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9ZSx0aGlzLm9uRXJyb3I9aSx0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXthKysscz09PSExJiZyLm9uU3RhcnQhPT12b2lkIDAmJnIub25TdGFydCh1LG8sYSkscz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe28rKyxyLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJnIub25Qcm9ncmVzcyh1LG8sYSksbz09PWEmJihzPSExLHIub25Mb2FkIT09dm9pZCAwJiZyLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7ci5vbkVycm9yIT09dm9pZCAwJiZyLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgZD1jW2hdLGc9Y1toKzFdO2lmKGQuZ2xvYmFsJiYoZC5sYXN0SW5kZXg9MCksZC50ZXN0KHUpKXJldHVybiBnfXJldHVybiBudWxsfX19LHVUPW5ldyBNaCxtbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dCE9PXZvaWQgMD90OnVULHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIscyl7aS5sb2FkKHQscixlLHMpfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LERuPXt9LGJoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz1qci5nZXQodCk7aWYocyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShzKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCkscztpZihEblt0XSE9PXZvaWQgMCl7RG5bdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO3JldHVybn1Eblt0XT1bXSxEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7bGV0IG89bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSksYT10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2gobykudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1Eblt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiksZD1mP3BhcnNlSW50KGYpOjAsZz1kIT09MCx4PTAsdj1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KG0pe3AoKTtmdW5jdGlvbiBwKCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpffSk9PntpZihiKW0uY2xvc2UoKTtlbHNle3grPV8uYnl0ZUxlbmd0aDtsZXQgUz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmcsbG9hZGVkOngsdG90YWw6ZH0pO2ZvcihsZXQgTD0wLEE9dS5sZW5ndGg7TDxBO0wrKyl7bGV0IEg9dVtMXTtILm9uUHJvZ3Jlc3MmJkgub25Qcm9ncmVzcyhTKX1tLmVucXVldWUoXykscCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKHYpfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxhKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihhPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKGEpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLGQ9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihnPT5kLmRlY29kZShnKSl9fX0pLnRoZW4oYz0+e2pyLmFkZCh0LGMpO2xldCB1PURuW3RdO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkxvYWQmJmQub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1Eblt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgRG5bdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgZD11W2hdO2Qub25FcnJvciYmZC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319O3ZhciBibD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9cm8oImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksanIuYWRkKHQsdGhpcyksZSYmZSh0aGlzKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxyJiZyKGgpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihhLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLHMubWFuYWdlci5pdGVtU3RhcnQodCksYS5zcmM9dCxhfX0sU2g9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBXcixvPW5ldyBibCh0aGlzLm1hbmFnZXIpO28uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IGE9MDtmdW5jdGlvbiBsKGMpe28ubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe3MuaW1hZ2VzW2NdPXUsYSsrLGE9PT02JiYocy5uZWVkc1VwZGF0ZT0hMCxlJiZlKHMpKX0sdm9pZCAwLHIpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIHN9fTt2YXIgRWg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPW5ldyBhZSxvPW5ldyBibCh0aGlzLm1hbmFnZXIpO3JldHVybiBvLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLG8uc2V0UGF0aCh0aGlzLnBhdGgpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3MuaW1hZ2U9YSxzLm5lZWRzVXBkYXRlPSEwLGUhPT12b2lkIDAmJmUocyl9LGksciksc319LFllPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O1llLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBUaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGkpLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IGZ0KGUpfWNvcHkodCl7cmV0dXJuIFllLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O1RoLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbjA9bmV3IHd0LGkwPW5ldyBULHIwPW5ldyBULFNvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBLKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IHd0LHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHFyLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSygxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O2kwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxlLnBvc2l0aW9uLmNvcHkoaTApLHIwLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQocjApLGUudXBkYXRlTWF0cml4V29ybGQoKSxuMC5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuMCksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIHRoaXMuYmlhcyE9PTAmJih0LmJpYXM9dGhpcy5iaWFzKSx0aGlzLm5vcm1hbEJpYXMhPT0wJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksdGhpcy5yYWRpdXMhPT0xJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCh0aGlzLm1hcFNpemUueCE9PTUxMnx8dGhpcy5tYXBTaXplLnkhPT01MTIpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LFNsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT1WdSoyKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LHM9dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxzIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPXMsZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtTbC5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITA7dmFyIEFoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPU1hdGguUEkvMyxzPTAsbz0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU3BvdExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLmRpc3RhbmNlPWksdGhpcy5hbmdsZT1yLHRoaXMucGVudW1icmE9cyx0aGlzLmRlY2F5PW8sdGhpcy5zaGFkb3c9bmV3IFNsfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10L01hdGguUEl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmFuZ2xlPXQuYW5nbGUsdGhpcy5wZW51bWJyYT10LnBlbnVtYnJhLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0FoLnByb3RvdHlwZS5pc1Nwb3RMaWdodD0hMDt2YXIgczA9bmV3IHd0LFpzPW5ldyBULE51PW5ldyBULEVsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgU2UoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEsoNCwyKSx0aGlzLl92aWV3cG9ydENvdW50PTYsdGhpcy5fdmlld3BvcnRzPVtuZXcgV3QoMiwxLDEsMSksbmV3IFd0KDAsMSwxLDEpLG5ldyBXdCgzLDEsMSwxKSxuZXcgV3QoMSwxLDEsMSksbmV3IFd0KDMsMCwxLDEpLG5ldyBXdCgxLDAsMSwxKV0sdGhpcy5fY3ViZURpcmVjdGlvbnM9W25ldyBUKDEsMCwwKSxuZXcgVCgtMSwwLDApLG5ldyBUKDAsMCwxKSxuZXcgVCgwLDAsLTEpLG5ldyBUKDAsMSwwKSxuZXcgVCgwLC0xLDApXSx0aGlzLl9jdWJlVXBzPVtuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSldfXVwZGF0ZU1hdHJpY2VzKHQsZT0wKXtsZXQgaT10aGlzLmNhbWVyYSxyPXRoaXMubWF0cml4LHM9dC5kaXN0YW5jZXx8aS5mYXI7cyE9PWkuZmFyJiYoaS5mYXI9cyxpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksWnMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGkucG9zaXRpb24uY29weShacyksTnUuY29weShpLnBvc2l0aW9uKSxOdS5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbZV0pLGkudXAuY29weSh0aGlzLl9jdWJlVXBzW2VdKSxpLmxvb2tBdChOdSksaS51cGRhdGVNYXRyaXhXb3JsZCgpLHIubWFrZVRyYW5zbGF0aW9uKC1acy54LC1acy55LC1acy56KSxzMC5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzMCl9fTtFbC5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBDaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRWx9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtDaC5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBUbD1jbGFzcyBleHRlbmRzIFNve2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFZpKC01LDUsNSwtNSwuNSw1MDApKX19O1RsLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIFJoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KGt0LkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcga3QsdGhpcy5zaGFkb3c9bmV3IFRsfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O1JoLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIExoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0xoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgUGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fTtQaC5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBBbD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgVCl9c2V0KHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uY29weSh0W2VdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLC40ODg2MDMqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwuNDg4NjAzKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bM10sLjQ4ODYwMyppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDEuMDkyNTQ4KihpKnIpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDEuMDkyNTQ4KihyKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzZdLC4zMTUzOTIqKDMqcypzLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDEuMDkyNTQ4KihpKnMpKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC41NDYyNzQqKGkqaS1yKnIpKSxlfWdldElycmFkaWFuY2VBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQueixvPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkob1swXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksZS5hZGRTY2FsZWRWZWN0b3Iob1sxXSwyKi41MTE2NjQqciksZS5hZGRTY2FsZWRWZWN0b3Iob1syXSwyKi41MTE2NjQqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwyKi41MTE2NjQqaSksZS5hZGRTY2FsZWRWZWN0b3Iob1s0XSwyKi40MjkwNDMqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzVdLDIqLjQyOTA0MypyKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjc0MzEyNSpzKnMtLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Iob1s3XSwyKi40MjkwNDMqaSpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzhdLC40MjkwNDMqKGkqaS1yKnIpKSxlfWFkZCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmFkZCh0LmNvZWZmaWNpZW50c1tlXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxlKXtmb3IobGV0IGk9MDtpPDk7aSsrKXRoaXMuY29lZmZpY2llbnRzW2ldLmxlcnAodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW2VdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tlXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlK3IqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlK3IqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypzLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipzLGVbNl09LjMxNTM5MiooMypzKnMtMSksZVs3XT0xLjA5MjU0OCppKnMsZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0FsLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIEVvPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodD1uZXcgQWwsZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O0VvLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIERoPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoKGkpe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBlPT09LTE/Ii4vIjp0LnN1YnN0cigwLGUrMSl9c3RhdGljIHJlc29sdmVVUkwodCxlKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fSxJaD1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtJaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgcz10aGlzLG89anIuZ2V0KHQpO2lmKG8hPT12b2lkIDApcmV0dXJuIHMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUobykscy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87bGV0IGE9e307YS5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKHMub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXtqci5hZGQodCxsKSxlJiZlKGwpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpLHMubWFuYWdlci5pdGVtRW5kKHQpfSkscy5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05oLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKYSxoVD17Z2V0Q29udGV4dDpmdW5jdGlvbigpe3JldHVybiBKYT09PXZvaWQgMCYmKEphPW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSksSmF9LHNldENvbnRleHQ6ZnVuY3Rpb24obil7SmE9bn19LEZoPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgcz10aGlzLG89bmV3IGJoKHRoaXMubWFuYWdlcik7by5zZXRSZXNwb25zZVR5cGUoImFycmF5YnVmZmVyIiksby5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLG8ubG9hZCh0LGZ1bmN0aW9uKGEpe3RyeXtsZXQgbD1hLnNsaWNlKDApO2hULmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fSx6aD1jbGFzcyBleHRlbmRzIEVve2NvbnN0cnVjdG9yKHQsZSxpPTEpe3N1cGVyKHZvaWQgMCxpKTtsZXQgcj1uZXcgZnQoKS5zZXQodCkscz1uZXcgZnQoKS5zZXQoZSksbz1uZXcgVChyLnIsci5nLHIuYiksYT1uZXcgVChzLnIscy5nLHMuYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkobykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkobykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX07emgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIFVoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT1uZXcgZnQoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtVaC5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCBlPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gZS5idWZmZXI9dGhpcy5idWZmZXIsZS5sb29wPXRoaXMubG9vcCxlLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxlLmxvb3BFbmQ9dGhpcy5sb29wRW5kLGUub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxlLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1lLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX07dmFyIE9oPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1lLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLGU9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdCs9ZVtpXTtyZXR1cm4gdC9lLmxlbmd0aH19LGtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pO2xldCByLHMsbztzd2l0Y2goZSl7Y2FzZSJxdWF0ZXJuaW9uIjpyPXRoaXMuX3NsZXJwLHM9dGhpcy5fc2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjpyPXRoaXMuX3NlbGVjdCxzPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkoaSo1KTticmVhaztkZWZhdWx0OnI9dGhpcy5fbGVycCxzPXRoaXMuX2xlcnBBZGRpdGl2ZSxvPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkoaSo1KX10aGlzLl9taXhCdWZmZXJSZWdpb249cix0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1zLHRoaXMuX3NldElkZW50aXR5PW8sdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LGUpe2xldCBpPXRoaXMuYnVmZmVyLHI9dGhpcy52YWx1ZVNpemUscz10KnIrcixvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihvPT09MCl7Zm9yKGxldCBhPTA7YSE9PXI7KythKWlbcythXT1pW2FdO289ZX1lbHNle28rPWU7bGV0IGE9ZS9vO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihpLHMsMCxhLHIpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1vfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Uscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsbz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHM8MSl7bGV0IGw9ZSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixsLDEtcyxlKX1vPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcsZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgcz1pLG89cjtzIT09bzsrK3MpZVtzXT1lW3IrcyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixzKXtpZihyPj0uNSlmb3IobGV0IG89MDtvIT09czsrK28pdFtlK29dPXRbaStvXX1fc2xlcnAodCxlLGkscil7RWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7bGV0IG89dGhpcy5fd29ya0luZGV4KnM7RWUubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxvLHQsZSx0LGkpLEVlLnNsZXJwRmxhdCh0LGUsdCxlLHQsbyxyKX1fbGVycCh0LGUsaSxyLHMpe2xldCBvPTEtcjtmb3IobGV0IGE9MDthIT09czsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qbyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLHMpe2ZvcihsZXQgbz0wO28hPT1zOysrbyl7bGV0IGE9ZStvO3RbYV09dFthXSt0W2krb10qcn19fSxlZj0iXFxbXFxdXFwuOlxcLyIsZlQ9bmV3IFJlZ0V4cCgiWyIrZWYrIl0iLCJnIiksbmY9IlteIitlZisiXSIsZFQ9IlteIitlZi5yZXBsYWNlKCJcXC4iLCIiKSsiXSIscFQ9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixuZiksbVQ9LyhXQ09EKyk/Ly5zb3VyY2UucmVwbGFjZSgiV0NPRCIsZFQpLGdUPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSx4VD0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHlUPW5ldyBSZWdFeHAoIl4iK3BUK21UK2dUK3hUKyIkIiksdlQ9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0sSGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpO3RoaXMuX3RhcmdldEdyb3VwPXQsdGhpcy5fYmluZGluZ3M9dC5zdWJzY3JpYmVfKGUscil9Z2V0VmFsdWUodCxlKXt0aGlzLmJpbmQoKTtsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scj10aGlzLl9iaW5kaW5nc1tpXTtyIT09dm9pZCAwJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxOdD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wYXRoPWUsdGhpcy5wYXJzZWRQYXRoPWl8fE50LnBhcnNlVHJhY2tOYW1lKGUpLHRoaXMubm9kZT1OdC5maW5kTm9kZSh0LHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fHQsdGhpcy5yb290Tm9kZT10LHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIHQmJnQuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgTnQuQ29tcG9zaXRlKHQsZSxpKTpuZXcgTnQodCxlLGkpfXN0YXRpYyBzYW5pdGl6ZU5vZGVOYW1lKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKGZULCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IGU9eVQuZXhlYyh0KTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgaT17bm9kZU5hbWU6ZVsyXSxvYmplY3ROYW1lOmVbM10sb2JqZWN0SW5kZXg6ZVs0XSxwcm9wZXJ0eU5hbWU6ZVs1XSxwcm9wZXJ0eUluZGV4OmVbNl19LHI9aS5ub2RlTmFtZSYmaS5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHIhPT12b2lkIDAmJnIhPT0tMSl7bGV0IHM9aS5ub2RlTmFtZS5zdWJzdHJpbmcocisxKTt2VC5pbmRleE9mKHMpIT09LTEmJihpLm5vZGVOYW1lPWkubm9kZU5hbWUuc3Vic3RyaW5nKDAsciksaS5vYmplY3ROYW1lPXMpfWlmKGkucHJvcGVydHlOYW1lPT09bnVsbHx8aS5wcm9wZXJ0eU5hbWUubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogY2FuIG5vdCBwYXJzZSBwcm9wZXJ0eU5hbWUgZnJvbSB0cmFja05hbWU6ICIrdCk7cmV0dXJuIGl9c3RhdGljIGZpbmROb2RlKHQsZSl7aWYoIWV8fGU9PT0iInx8ZT09PSIuInx8ZT09PS0xfHxlPT09dC5uYW1lfHxlPT09dC51dWlkKXJldHVybiB0O2lmKHQuc2tlbGV0b24pe2xldCBpPXQuc2tlbGV0b24uZ2V0Qm9uZUJ5TmFtZShlKTtpZihpIT09dm9pZCAwKXJldHVybiBpfWlmKHQuY2hpbGRyZW4pe2xldCBpPWZ1bmN0aW9uKHMpe2ZvcihsZXQgbz0wO288cy5sZW5ndGg7bysrKXtsZXQgYT1zW29dO2lmKGEubmFtZT09PWV8fGEudXVpZD09PWUpcmV0dXJuIGE7bGV0IGw9aShhLmNoaWxkcmVuKTtpZihsKXJldHVybiBsfXJldHVybiBudWxsfSxyPWkodC5jaGlsZHJlbik7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X3NldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9nZXRWYWx1ZV9kaXJlY3QodCxlKXt0W2VdPXRoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXX1fZ2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpdFtlKytdPWlbcl19X2dldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RbZV09dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF19X2dldFZhbHVlX3RvQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkudG9BcnJheSh0LGUpfV9zZXRWYWx1ZV9kaXJlY3QodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXX1fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXkodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK119X3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7bGV0IGk9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgcj0wLHM9aS5sZW5ndGg7ciE9PXM7KytyKWlbcl09dFtlKytdO3RoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudCh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV19X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbZV0sdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5RWxlbWVudF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXkodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSl9X3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsZSksdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fZ2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuZ2V0VmFsdWUodCxlKX1fc2V0VmFsdWVfdW5ib3VuZCh0LGUpe3RoaXMuYmluZCgpLHRoaXMuc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5ub2RlLGU9dGhpcy5wYXJzZWRQYXRoLGk9ZS5vYmplY3ROYW1lLHI9ZS5wcm9wZXJ0eU5hbWUscz1lLnByb3BlcnR5SW5kZXg7aWYodHx8KHQ9TnQuZmluZE5vZGUodGhpcy5yb290Tm9kZSxlLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9dCksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtyZXR1cm59aWYoaSl7bGV0IGM9ZS5vYmplY3RJbmRleDtzd2l0Y2goaSl7Y2FzZSJtYXRlcmlhbHMiOmlmKCF0Lm1hdGVyaWFsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO3JldHVybn1pZighdC5tYXRlcmlhbC5tYXRlcmlhbHMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsLm1hdGVyaWFscyBhcyBub2RlLm1hdGVyaWFsIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbHMgYXJyYXkuIix0aGlzKTtyZXR1cm59dD10Lm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighdC5za2VsZXRvbil7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtyZXR1cm59dD10LnNrZWxldG9uLmJvbmVzO2ZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWlmKHRbdV0ubmFtZT09PWMpe2M9dTticmVha31icmVhaztkZWZhdWx0OmlmKHRbaV09PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtyZXR1cm59dD10W2ldfWlmKGMhPT12b2lkIDApe2lmKHRbY109PT12b2lkIDApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIGJpbmQgdG8gb2JqZWN0SW5kZXggb2Ygb2JqZWN0TmFtZSwgYnV0IGlzIHVuZGVmaW5lZC4iLHRoaXMsdCk7cmV0dXJufXQ9dFtjXX19bGV0IG89dFtyXTtpZihvPT09dm9pZCAwKXtsZXQgYz1lLm5vZGVOYW1lO2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIrYysiLiIrcisiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIix0KTtyZXR1cm59bGV0IGE9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9dCx0Lm5lZWRzVXBkYXRlIT09dm9pZCAwP2E9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnQubWF0cml4V29ybGROZWVkc1VwZGF0ZSE9PXZvaWQgMCYmKGE9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBsPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHMhPT12b2lkIDApe2lmKHI9PT0ibW9ycGhUYXJnZXRJbmZsdWVuY2VzIil7aWYoIXQuZ2VvbWV0cnkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5LiIsdGhpcyk7cmV0dXJufWlmKHQuZ2VvbWV0cnkuaXNCdWZmZXJHZW9tZXRyeSl7aWYoIXQuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTtyZXR1cm59dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10hPT12b2lkIDAmJihzPXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1lbHNle2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtyZXR1cm59fWw9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8sdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSBvLmZyb21BcnJheSE9PXZvaWQgMCYmby50b0FycmF5IT09dm9pZCAwPyhsPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PW8pOkFycmF5LmlzQXJyYXkobyk/KGw9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6dGhpcy5wcm9wZXJ0eU5hbWU9cjt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtsXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbbF1bYV19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19O050LkNvbXBvc2l0ZT1IaDtOdC5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307TnQucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07TnQucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W050LnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtOdC5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxOdC5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIFZoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPXRuKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgaT0wLHI9YXJndW1lbnRzLmxlbmd0aDtpIT09cjsrK2kpdFthcmd1bWVudHNbaV0udXVpZF09aTt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IGU9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gZS5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLWUubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIGUuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fcGF0aHMscj10aGlzLl9wYXJzZWRQYXRocyxzPXRoaXMuX2JpbmRpbmdzLG89cy5sZW5ndGgsYSxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLGQ9Zi51dWlkLGc9ZVtkXTtpZihnPT09dm9pZCAwKXtnPWwrKyxlW2RdPWcsdC5wdXNoKGYpO2ZvcihsZXQgeD0wLHY9bzt4IT09djsrK3gpc1t4XS5wdXNoKG5ldyBOdChmLGlbeF0sclt4XSkpfWVsc2UgaWYoZzxjKXthPXRbZ107bGV0IHg9LS1jLHY9dFt4XTtlW3YudXVpZF09Zyx0W2ddPXYsZVtkXT14LHRbeF09Zjtmb3IobGV0IG09MCxwPW87bSE9PXA7KyttKXtsZXQgYj1zW21dLF89Ylt4XSxTPWJbZ107YltnXT1fLFM9PT12b2lkIDAmJihTPW5ldyBOdChmLGlbbV0sclttXSkpLGJbeF09U319ZWxzZSB0W2ddIT09YSYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgbz0wLGE9YXJndW1lbnRzLmxlbmd0aDtvIT09YTsrK28pe2xldCBsPWFyZ3VtZW50c1tvXSxjPWwudXVpZCx1PWVbY107aWYodSE9PXZvaWQgMCYmdT49cyl7bGV0IGg9cysrLGY9dFtoXTtlW2YudXVpZF09dSx0W3VdPWYsZVtjXT1oLHRbaF09bDtmb3IobGV0IGQ9MCxnPXI7ZCE9PWc7KytkKXtsZXQgeD1pW2RdLHY9eFtoXSxtPXhbdV07eFt1XT12LHhbaF09bX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMsZT10aGlzLl9pbmRpY2VzQnlVVUlELGk9dGhpcy5fYmluZGluZ3Mscj1pLmxlbmd0aCxzPXRoaXMubkNhY2hlZE9iamVjdHNfLG89dC5sZW5ndGg7Zm9yKGxldCBhPTAsbD1hcmd1bWVudHMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9YXJndW1lbnRzW2FdLHU9Yy51dWlkLGg9ZVt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSBlW3VdLGg8cyl7bGV0IGY9LS1zLGQ9dFtmXSxnPS0tbyx4PXRbZ107ZVtkLnV1aWRdPWgsdFtoXT1kLGVbeC51dWlkXT1mLHRbZl09eCx0LnBvcCgpO2ZvcihsZXQgdj0wLG09cjt2IT09bTsrK3Ype2xldCBwPWlbdl0sYj1wW2ZdLF89cFtnXTtwW2hdPWIscFtmXT1fLHAucG9wKCl9fWVsc2V7bGV0IGY9LS1vLGQ9dFtmXTtmPjAmJihlW2QudXVpZF09aCksdFtoXT1kLHQucG9wKCk7Zm9yKGxldCBnPTAseD1yO2chPT14OysrZyl7bGV0IHY9aVtnXTt2W2hdPXZbZl0sdi5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPXN9c3Vic2NyaWJlXyh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxyPWlbdF0scz10aGlzLl9iaW5kaW5ncztpZihyIT09dm9pZCAwKXJldHVybiBzW3JdO2xldCBvPXRoaXMuX3BhdGhzLGE9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtyPXMubGVuZ3RoLGlbdF09cixvLnB1c2godCksYS5wdXNoKGUpLHMucHVzaChoKTtmb3IobGV0IGY9dSxkPWwubGVuZ3RoO2YhPT1kOysrZil7bGV0IGc9bFtmXTtoW2ZdPW5ldyBOdChnLHQsZSl9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPWVbdF07aWYoaSE9PXZvaWQgMCl7bGV0IHI9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgtMSxsPW9bYV0sYz10W2FdO2VbY109aSxvW2ldPWwsby5wb3AoKSxzW2ldPXNbYV0scy5wb3AoKSxyW2ldPXJbYV0sci5wb3AoKX19fTtWaC5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgR2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBzPWUudHJhY2tzLG89cy5sZW5ndGgsYT1uZXcgQXJyYXkobyksbD17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfTtmb3IobGV0IGM9MDtjIT09bzsrK2Mpe2xldCB1PXNbY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkobyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVp3LHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiZ0aGlzLnRpbWVTY2FsZSE9PTAmJnRoaXMuX3N0YXJ0VGltZT09PW51bGwmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixzPXQuX2NsaXAuZHVyYXRpb24sbz1zL3IsYT1yL3M7dC53YXJwKDEsbyxlKSx0aGlzLndhcnAoYSwxLGUpfXJldHVybiB0aGlzfWNyb3NzRmFkZVRvKHQsZSxpKXtyZXR1cm4gdC5jcm9zc0ZhZGVGcm9tKHRoaXMsZSxpKX1zdG9wRmFkaW5nKCl7bGV0IHQ9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9c2V0RWZmZWN0aXZlVGltZVNjYWxlKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10LHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT10aGlzLnBhdXNlZD8wOnQsdGhpcy5zdG9wV2FycGluZygpfWdldEVmZmVjdGl2ZVRpbWVTY2FsZSgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGV9c2V0RHVyYXRpb24odCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXRoaXMuX2NsaXAuZHVyYXRpb24vdCx0aGlzLnN0b3BXYXJwaW5nKCl9c3luY1dpdGgodCl7cmV0dXJuIHRoaXMudGltZT10LnRpbWUsdGhpcy50aW1lU2NhbGU9dC50aW1lU2NhbGUsdGhpcy5zdG9wV2FycGluZygpfWhhbHQodCl7cmV0dXJuIHRoaXMud2FycCh0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGUsMCx0KX13YXJwKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixzPXIudGltZSxvPXRoaXMudGltZVNjYWxlLGE9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7YT09PW51bGwmJihhPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1hKTtsZXQgbD1hLnBhcmFtZXRlclBvc2l0aW9ucyxjPWEuc2FtcGxlVmFsdWVzO3JldHVybiBsWzBdPXMsbFsxXT1zK2ksY1swXT10L28sY1sxXT1lL28sdGhpc31zdG9wV2FycGluZygpe2xldCB0PXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfWdldE1peGVyKCl7cmV0dXJuIHRoaXMuX21peGVyfWdldENsaXAoKXtyZXR1cm4gdGhpcy5fY2xpcH1nZXRSb290KCl7cmV0dXJuIHRoaXMuX2xvY2FsUm9vdHx8dGhpcy5fbWl4ZXIuX3Jvb3R9X3VwZGF0ZSh0LGUsaSxyKXtpZighdGhpcy5lbmFibGVkKXt0aGlzLl91cGRhdGVXZWlnaHQodCk7cmV0dXJufWxldCBzPXRoaXMuX3N0YXJ0VGltZTtpZihzIT09bnVsbCl7bGV0IGw9KHQtcykqaTtpZihsPDB8fGk9PT0wKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IG89dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7c3dpdGNoKHRoaXMuYmxlbmRNb2RlKXtjYXNlIGQwOmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7YnJlYWs7Y2FzZSBRaDpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUobyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKGkhPT1udWxsKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLHI9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7aSE9PW51bGwmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksZT09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxzPXRoaXMuX2xvb3BDb3VudCxvPWk9PT1KdztpZih0PT09MClyZXR1cm4gcz09PS0xP3I6byYmKHMmMSk9PT0xP2UtcjpyO2lmKGk9PT1Zdyl7cz09PS0xJiYodGhpcy5fbG9vcENvdW50PTAsdGhpcy5fc2V0RW5kaW5ncyghMCwhMCwhMSkpO3Q6e2lmKHI+PWUpcj1lO2Vsc2UgaWYocjwwKXI9MDtlbHNle3RoaXMudGltZT1yO2JyZWFrIHR9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKHM9PT0tMSYmKHQ+PTA/KHM9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLHRoaXMucmVwZXRpdGlvbnM9PT0wLG8pKTp0aGlzLl9zZXRFbmRpbmdzKHRoaXMucmVwZXRpdGlvbnM9PT0wLCEwLG8pKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEscys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1zO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKGw9PT0xKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLG8pfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxvKTt0aGlzLl9sb29wQ291bnQ9cyx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKG8mJihzJjEpPT09MSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9RnIsci5lbmRpbmdFbmQ9RnIpOih0P3IuZW5kaW5nU3RhcnQ9dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P0ZyOk5yOnIuZW5kaW5nU3RhcnQ9ZWwsZT9yLmVuZGluZ0VuZD10aGlzLnplcm9TbG9wZUF0RW5kP0ZyOk5yOnIuZW5kaW5nRW5kPWVsKX1fc2NoZWR1bGVGYWRpbmcodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7bz09PW51bGwmJihvPXIuX2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKSx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1vKTtsZXQgYT1vLnBhcmFtZXRlclBvc2l0aW9ucyxsPW8uc2FtcGxlVmFsdWVzO3JldHVybiBhWzBdPXMsbFswXT1lLGFbMV09cyt0LGxbMV09aSx0aGlzfX0sV2g9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxzPXIubGVuZ3RoLG89dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dT09PXZvaWQgMCYmKHU9e30sY1tsXT11KTtmb3IobGV0IGg9MDtoIT09czsrK2gpe2xldCBmPXJbaF0sZD1mLm5hbWUsZz11W2RdO2lmKGchPT12b2lkIDApKytnLnJlZmVyZW5jZUNvdW50LG9baF09ZztlbHNle2lmKGc9b1toXSxnIT09dm9pZCAwKXtnLl9jYWNoZUluZGV4PT09bnVsbCYmKCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpKTtjb250aW51ZX1sZXQgeD1lJiZlLl9wcm9wZXJ0eUJpbmRpbmdzW2hdLmJpbmRpbmcucGFyc2VkUGF0aDtnPW5ldyBraChOdC5jcmVhdGUoaSxkLHgpLGYuVmFsdWVUeXBlTmFtZSxmLmdldFZhbHVlU2l6ZSgpKSwrK2cucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGcsbCxkKSxvW2hdPWd9YVtoXS5yZXN1bHRCdWZmZXI9Zy5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKHQuX2NhY2hlSW5kZXg9PT1udWxsKXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQscyYmcy5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldO3MudXNlQ291bnQrKz09PTAmJih0aGlzLl9sZW5kQmluZGluZyhzKSxzLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy51c2VDb3VudD09PTAmJihzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fdGFrZUJhY2tCaW5kaW5nKHMpKX10aGlzLl90YWtlQmFja0FjdGlvbih0KX19X2luaXRNZW1vcnlNYW5hZ2VyKCl7dGhpcy5fYWN0aW9ucz1bXSx0aGlzLl9uQWN0aXZlQWN0aW9ucz0wLHRoaXMuX2FjdGlvbnNCeUNsaXA9e30sdGhpcy5fYmluZGluZ3M9W10sdGhpcy5fbkFjdGl2ZUJpbmRpbmdzPTAsdGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lPXt9LHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHM9W10sdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHM9MDtsZXQgdD10aGlzO3RoaXMuc3RhdHM9e2FjdGlvbnM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9hY3Rpb25zLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVBY3Rpb25zfX0sYmluZGluZ3M6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9iaW5kaW5ncy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQmluZGluZ3N9fSxjb250cm9sSW50ZXJwb2xhbnRzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fY29udHJvbEludGVycG9sYW50cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQ29udHJvbEludGVycG9sYW50c319fX1faXNBY3RpdmVBY3Rpb24odCl7bGV0IGU9dC5fY2FjaGVJbmRleDtyZXR1cm4gZSE9PW51bGwmJmU8dGhpcy5fbkFjdGl2ZUFjdGlvbnN9X2FkZEluYWN0aXZlQWN0aW9uKHQsZSxpKXtsZXQgcj10aGlzLl9hY3Rpb25zLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPXNbZV07aWYobz09PXZvaWQgMClvPXtrbm93bkFjdGlvbnM6W3RdLGFjdGlvbkJ5Um9vdDp7fX0sdC5fYnlDbGlwQ2FjaGVJbmRleD0wLHNbZV09bztlbHNle2xldCBhPW8ua25vd25BY3Rpb25zO3QuX2J5Q2xpcENhY2hlSW5kZXg9YS5sZW5ndGgsYS5wdXNoKHQpfXQuX2NhY2hlSW5kZXg9ci5sZW5ndGgsci5wdXNoKHQpLG8uYWN0aW9uQnlSb290W2ldPXR9X3JlbW92ZUluYWN0aXZlQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT1lW2UubGVuZ3RoLTFdLHI9dC5fY2FjaGVJbmRleDtpLl9jYWNoZUluZGV4PXIsZVtyXT1pLGUucG9wKCksdC5fY2FjaGVJbmRleD1udWxsO2xldCBzPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3NdLGw9YS5rbm93bkFjdGlvbnMsYz1sW2wubGVuZ3RoLTFdLHU9dC5fYnlDbGlwQ2FjaGVJbmRleDtjLl9ieUNsaXBDYWNoZUluZGV4PXUsbFt1XT1jLGwucG9wKCksdC5fYnlDbGlwQ2FjaGVJbmRleD1udWxsO2xldCBoPWEuYWN0aW9uQnlSb290LGY9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZDtkZWxldGUgaFtmXSxsLmxlbmd0aD09PTAmJmRlbGV0ZSBvW3NdLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl9X3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24odCl7bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IHM9ZVtpXTstLXMucmVmZXJlbmNlQ291bnQ9PT0wJiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcocyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz10aGlzLl9iaW5kaW5ncyxvPXJbZV07bz09PXZvaWQgMCYmKG89e30scltlXT1vKSxvW2ldPXQsdC5fY2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxzPWkucGF0aCxvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPW9bcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbc10sT2JqZWN0LmtleXMoYSkubGVuZ3RoPT09MCYmZGVsZXRlIG9bcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiBpPT09dm9pZCAwJiYoaT1uZXcgX2wobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMscz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LHMuX19jYWNoZUluZGV4PWksZVtpXT1zfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qscz1yLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShyLHQpOnQsYT1vIT09bnVsbD9vLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKGk9PT12b2lkIDAmJihvIT09bnVsbD9pPW8uYmxlbmRNb2RlOmk9UWgpLGwhPT12b2lkIDApe2xldCBoPWwuYWN0aW9uQnlSb290W3NdO2lmKGghPT12b2lkIDAmJmguYmxlbmRNb2RlPT09aSlyZXR1cm4gaDtjPWwua25vd25BY3Rpb25zWzBdLG89PT1udWxsJiYobz1jLl9jbGlwKX1pZihvPT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdT1uZXcgR2godGhpcyxvLGUsaSk7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LGEscyksdX1leGlzdGluZ0FjdGlvbih0LGUpe2xldCBpPWV8fHRoaXMuX3Jvb3Qscj1pLnV1aWQscz10eXBlb2YgdD09InN0cmluZyI/TWwuZmluZEJ5TmFtZShpLHQpOnQsbz1zP3MudXVpZDp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvXTtyZXR1cm4gYSE9PXZvaWQgMCYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMsZT10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IGk9ZS0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQscz1NYXRoLnNpZ24odCksbz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQscyxvKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShvKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1yW2ldO2lmKHMhPT12b2lkIDApe2xldCBvPXMua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1vW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsZVt1XT1oLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IG8gaW4gaSl7bGV0IGE9aVtvXS5hY3Rpb25CeVJvb3QsbD1hW2VdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1yW2VdO2lmKHMhPT12b2lkIDApZm9yKGxldCBvIGluIHMpe2xldCBhPXNbb107YS5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhhKX19dW5jYWNoZUFjdGlvbih0LGUpe2xldCBpPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxlKTtpIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24oaSksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24oaSkpfX07V2gucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIFRvPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBUbyh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LHFoPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fTtxaC5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgWGg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixzKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1lLHRoaXMuaXRlbVNpemU9aSx0aGlzLmVsZW1lbnRTaXplPXIsdGhpcy5jb3VudD1zLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxlKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1lLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1hoLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBvMD1uZXcgSyxZaT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBLKDEvMCwxLzApLGU9bmV3IEsoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPW8wLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gbzAuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1lpLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIGEwPW5ldyBULCRhPW5ldyBULFloPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0KSx0aGlzLmVuZC5jb3B5KGUpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQuc3RhcnQpLHRoaXMuZW5kLmNvcHkodC5lbmQpLHRoaXN9Z2V0Q2VudGVyKHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5zdGFydCx0aGlzLmVuZCkubXVsdGlwbHlTY2FsYXIoLjUpfWRlbHRhKHQpe3JldHVybiB0LnN1YlZlY3RvcnModGhpcy5lbmQsdGhpcy5zdGFydCl9ZGlzdGFuY2VTcSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuZW5kKX1kaXN0YW5jZSgpe3JldHVybiB0aGlzLnN0YXJ0LmRpc3RhbmNlVG8odGhpcy5lbmQpfWF0KHQsZSl7cmV0dXJuIHRoaXMuZGVsdGEoZSkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMuc3RhcnQpfWNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKXthMC5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksJGEuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgaT0kYS5kb3QoJGEpLHM9JGEuZG90KGEwKS9pO3JldHVybiBlJiYocz1JZShzLDAsMSkpLHN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUsaSl7bGV0IHI9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQsZSk7cmV0dXJuIHRoaXMuZGVsdGEoaSkubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTt2YXIgUW49bmV3IFQsS2E9bmV3IHd0LEZ1PW5ldyB3dCxaaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQpe2xldCBlPUQwKHQpLGk9bmV3IEh0LHI9W10scz1bXSxvPW5ldyBmdCgwLDAsMSksYT1uZXcgZnQoMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCkscy5wdXNoKG8ucixvLmcsby5iKSxzLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShzLDMpKTtsZXQgbD1uZXcgem4oe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIoaSxsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1lLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCBlPXRoaXMuYm9uZXMsaT10aGlzLmdlb21ldHJ5LHI9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7RnUuY29weSh0aGlzLnJvb3QubWF0cml4V29ybGQpLmludmVydCgpO2ZvcihsZXQgcz0wLG89MDtzPGUubGVuZ3RoO3MrKyl7bGV0IGE9ZVtzXTthLnBhcmVudCYmYS5wYXJlbnQuaXNCb25lJiYoS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLm1hdHJpeFdvcmxkKSxRbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oS2EpLHIuc2V0WFlaKG8sUW4ueCxRbi55LFFuLnopLEthLm11bHRpcGx5TWF0cmljZXMoRnUsYS5wYXJlbnQubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobysxLFFuLngsUW4ueSxRbi56KSxvKz0yKX1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIEQwKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsRDAobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBKaD1jbGFzcyBleHRlbmRzIGdve2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyBmdChpKSxyPW5ldyBmdChyKTtsZXQgcz1lLzIsbz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLGQ9MCxnPS1hO2Y8PWU7ZisrLGcrPW8pe2wucHVzaCgtYSwwLGcsYSwwLGcpLGwucHVzaChnLDAsLWEsZywwLGEpO2xldCB4PWY9PT1zP2k6cjt4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zfWxldCB1PW5ldyBIdDt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBlZShjLDMpKTtsZXQgaD1uZXcgem4oe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX07dmFyIF9UPW5ldyBGbG9hdDMyQXJyYXkoMSksQ2s9bmV3IEludDMyQXJyYXkoX1QuYnVmZmVyKTtGZS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59O19vLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX07SmgucHJvdG90eXBlLnNldENvbG9ycz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkdyaWRIZWxwZXI6IHNldENvbG9ycygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIHBhc3MgdGhlbSBpbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZC4iKX07WmgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfTttbi5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLERoLmV4dHJhY3RVcmxCYXNlKG4pfTttbi5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX07WWkucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O1lpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07WWkucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O1lpLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07R2UucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O0dlLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9O0dlLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtHZS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9O3NpLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtxci5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX07WWgucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKG4pfTtkZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX07ZGUucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2RlLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9O3d0LnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfTt3dC5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfTt3dC5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IFQoKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O3d0LnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKG4pfTt3dC5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4udHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTt3dC5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfTt3dC5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKG4sdCxlLGkscixzKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKG4sdCxpLGUscixzKX07d3QucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07amUucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShuKX07RWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxuLmFwcGx5UXVhdGVybmlvbih0aGlzKX07RWUucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07b2kucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfTtyZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07cmUucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQobix0KX07cmUucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQobil9O3JlLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKG4pfTtyZS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShuKX07cmUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxyZS5nZXRCYXJ5Y29vcmQobix0LGUsaSxyKX07cmUubm9ybWFsPWZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIikscmUuZ2V0Tm9ybWFsKG4sdCxlLGkpfTtVbi5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhuKX07VW4ucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGNpKHRoaXMsbil9O1VuLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IHFpKHRoaXMsbil9O0sucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9O0sucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfTtLLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07VC5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihuKX07VC5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShuKX07VC5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfTtULnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07VC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07VC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O1QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtXdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07V3QucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtrdC5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKG4pfTtrdC5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LG4pfTtrdC5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O2t0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1ufX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7b2UucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2UucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLCR3fSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7ZGwucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtTZS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWWUucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUXQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09bmx9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShubCl9fX0pO1F0LnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307UXQucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUXQucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07SHQucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX07SHQucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBRdChhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOm49PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpfTtIdC5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe2UhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfTtIdC5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtIdC5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtIdC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9O0h0LnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEh0LnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7R2kucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShuPT09ITA/bmw6aW8pLHRoaXN9O0dpLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07Y2kucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtjaS5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1lyLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VG8ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBmdH19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PWMwfX0sc3RlbmNpbE1hc2s6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFzaz1ufX0sdmVydGV4VGFuZ2VudHM6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnZlcnRleFRhbmdlbnRzIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZuLnByb3RvdHlwZSx7ZGVyaXZhdGl2ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4gU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXM9bn19fSk7VnQucHJvdG90eXBlLmNsZWFyVGFyZ2V0PWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNsZWFyVGFyZ2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRSZW5kZXJUYXJnZXQoKSBhbmQgLmNsZWFyKCkgaW5zdGVhZC4iKSx0aGlzLnNldFJlbmRlclRhcmdldChuKSx0aGlzLmNsZWFyKHQsZSxpKX07VnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYW5pbWF0ZSgpIGlzIG5vdyAuc2V0QW5pbWF0aW9uTG9vcCgpLiIpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcChuKX07VnQucHJvdG90eXBlLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0Q3VycmVudFJlbmRlclRhcmdldCgpIGlzIG5vdyAuZ2V0UmVuZGVyVGFyZ2V0KCkuIiksdGhpcy5nZXRSZW5kZXJUYXJnZXQoKX07VnQucHJvdG90eXBlLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0TWF4QW5pc290cm9weSgpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKS4iKSx0aGlzLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCl9O1Z0LnByb3RvdHlwZS5nZXRQcmVjaXNpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0UHJlY2lzaW9uKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMucHJlY2lzaW9uLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnByZWNpc2lvbn07VnQucHJvdG90eXBlLnJlc2V0R0xTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5yZXNldEdMU3RhdGUoKSBpcyBub3cgLnN0YXRlLnJlc2V0KCkuIiksdGhpcy5zdGF0ZS5yZXNldCgpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2hhbGZfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUzNUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0JsZW5kTWluTWF4PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQmxlbmRNaW5NYXgoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnRVhUX2JsZW5kX21pbm1heCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMoKSBpcyBub3cgLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlcy4iKSx0aGlzLmNhcGFiaWxpdGllcy52ZXJ0ZXhUZXh0dXJlc307VnQucHJvdG90eXBlLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSW5zdGFuY2VkQXJyYXlzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0FOR0xFX2luc3RhbmNlZF9hcnJheXMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpfTtWdC5wcm90b3R5cGUuZW5hYmxlU2Npc3NvclRlc3Q9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZW5hYmxlU2Npc3NvclRlc3QoKSBpcyBub3cgLnNldFNjaXNzb3JUZXN0KCkuIiksdGhpcy5zZXRTY2lzc29yVGVzdChuKX07VnQucHJvdG90eXBlLmluaXRNYXRlcmlhbD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmluaXRNYXRlcmlhbCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQcmVQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQcmVQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWRkUG9zdFBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFBvc3RQbHVnaW4oKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUudXBkYXRlU2hhZG93TWFwPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudXBkYXRlU2hhZG93TWFwKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldEZhY2VDdWxsaW5nPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0RmFjZUN1bGxpbmcoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuYWxsb2NUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFsbG9jVGV4dHVyZVVuaXQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZTJEPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZTJEKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLnNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZUN1YmUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuZ2V0QWN0aXZlTWlwTWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2V0QWN0aXZlTWlwTWFwTGV2ZWwoKSBpcyBub3cgLmdldEFjdGl2ZU1pcG1hcExldmVsKCkuIiksdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhWdC5wcm90b3R5cGUse3NoYWRvd01hcEVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC5lbmFibGVkfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwRW5hYmxlZCBpcyBub3cgLnNoYWRvd01hcC5lbmFibGVkLiIpLHRoaXMuc2hhZG93TWFwLmVuYWJsZWQ9bn19LHNoYWRvd01hcFR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYWRvd01hcC50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwVHlwZSBpcyBub3cgLnNoYWRvd01hcC50eXBlLiIpLHRoaXMuc2hhZG93TWFwLnR5cGU9bn19LHNoYWRvd01hcEN1bGxGYWNlOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBDdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0sY29udGV4dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmNvbnRleHQgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5nZXRDb250ZXh0KCkgaW5zdGVhZC4iKSx0aGlzLmdldENvbnRleHQoKX19LHZyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudnIgaGFzIGJlZW4gcmVuYW1lZCB0byAueHIiKSx0aGlzLnhyfX0sZ2FtbWFJbnB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpfX0sZ2FtbWFPdXRwdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSx0aGlzLm91dHB1dEVuY29kaW5nPW49PT0hMD8kdDpyaX19LHRvbmVNYXBwaW5nV2hpdGVQb2ludDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpLDF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnRvbmVNYXBwaW5nV2hpdGVQb2ludCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sZ2FtbWFGYWN0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpLDJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFQwLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhOZS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSk7QmgucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IEZoKCkubG9hZChuLGZ1bmN0aW9uKGkpe3Quc2V0QnVmZmVyKGkpfSksdGhpc307T2gucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTthby5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfTthby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX07Tm4uY3Jvc3NPcmlnaW49dm9pZCAwO05uLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEVoO3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IHM9ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihzLm1hcHBpbmc9dCksc307Tm4ubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgU2g7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTt0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246JGh9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSRoKTtmdW5jdGlvbiByZihuLHQsZSl7aWYoZT09PTEpcmV0dXJuIG5ldyBmdCh0KTtsZXQgaT1waSh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyBmdChzYyhpLG4pKDEtZSkpfXZhciBnbjsoZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0pKGdufHwoZ249e30pKTtmdW5jdGlvbiBOMChuLHQpe2xldCBlPXQubGVuZ3RoLzIsaT1uLmF0dHJpYnV0ZXMucG9zaXRpb247KCFpfHxpLmNvdW50IT09ZSozKSYmKGk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZSozKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLGkpKTtsZXQgcj1pLmFycmF5O2ZvcihsZXQgcz0wO3M8ZTtzKyspcltzKjNdPXRbcyoyXSxyW3MqMysxXT10W3MqMisxXTtpLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsZSozKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIEYwKG4sdCxlKXtsZXQgaT1NYXRoLm1heCh0Lmxlbmd0aC8yLTEsMCkscj1pKjIqMyxzPXIqMyxvPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIW98fG8uY291bnQhPT1yKSYmKG89bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkocyksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixvKSk7bGV0IGE9by5hcnJheTtmb3IobGV0IGw9MDtsPGk7bCsrKXtsZXRbYyx1LGgsZl09W3RbMipsXSx0WzIqbCsxXSx0WzIqbCsyXSx0WzIqbCszXV0sZD1uZXcgSyhjLHUpLGc9bmV3IEsoaCxmKSx4PW5ldyBLKGgtYyxmLXUpLHY9bmV3IEsoLXgueSx4LngpLnNldExlbmd0aChlLzIpLG09ZC5jbG9uZSgpLmFkZCh2KSxwPWQuY2xvbmUoKS5zdWIodiksYj1nLmNsb25lKCkuYWRkKHYpLF89Zy5jbG9uZSgpLnN1Yih2KSxTPVttLngsbS55LDAscC54LHAueSwwLGIueCxiLnksMCxiLngsYi55LDAscC54LHAueSwwLF8ueCxfLnksMF07YS5zZXQoUyxsKlMubGVuZ3RoKX1vLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAscyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBJbChuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOnMsb3BhY2l0eTpvfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1yZihuLHMsbyE9bnVsbD9vOjEpLGM9ZSh0Lmdlb21ldHJ5KTtyZXR1cm4gdC5nZW9tZXRyeSE9PWMmJih0Lmdlb21ldHJ5PWMpLGEuY29sb3IuZXF1YWxzKGwpfHwoYS5jb2xvci5zZXQobCksYS5uZWVkc1VwZGF0ZT0hMCksITB9dmFyIHdUPXtjcmVhdGVTY2VuZTooKT0+bmV3IFlyfSxSbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT13VC5jcmVhdGVTY2VuZSgpLHRoaXMuYmFja2dyb3VuZENvbG9yPSIjZmZmIixEaS5pc1dlYkdsMk9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpJiZ0IGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzJiYodC5zdHlsZT10LnN0eWxlfHx7fSksciYmdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixyKSx0aGlzLnJlbmRlcmVyPW5ldyBWdCh7Y2FudmFzOnQsYW50aWFsaWFzOiEwLGFscGhhOiEwfSksdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKGkpfW9uUmVzaXplKHQpe3RoaXMucmVuZGVyZXIuc2V0U2l6ZSh0LndpZHRoLHQuaGVpZ2h0KX1kZXN0cm95T2JqZWN0KHQpe2xldCBlPXQub2JqM2Q7aWYodGhpcy5zY2VuZS5yZW1vdmUoZSksZSBpbnN0YW5jZW9mIG9lKXtlLmdlb21ldHJ5LmRpc3Bvc2UoKTtsZXQgaT1BcnJheS5pc0FycmF5KGUubWF0ZXJpYWwpP2UubWF0ZXJpYWw6W2UubWF0ZXJpYWxdO2ZvcihsZXQgciBvZiBpKXIuZGlzcG9zZSgpfX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLmJhY2tncm91bmRDb2xvcj10PyIjMzAzMDMwIjoiI2ZmZiJ9Y3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHQsZSxpKXt2YXIgdTtpZighdCYmIWkudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTpyLHdpZHRoOnN9PWk7aWYoIXQpe2xldCBoPXJmKHRoaXMuYmFja2dyb3VuZENvbG9yLGkuY29sb3IsKHU9aS5vcGFjaXR5KSE9bnVsbD91OjEpLGY9bmV3IEh0LGQ9bmV3IHpuKHtjb2xvcjpofSksZz1uZXcgb2UoZixkKTtyZXR1cm4gZC52aXNpYmxlPXIsRjAoZixlLHMpLHRoaXMuc2NlbmUuYWRkKGcpLHt0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmcsd2lkdGg6c319bGV0e2RhdGE6byxvYmozZDphLHdpZHRoOmx9PXQ7cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLGEsaD0+KChzIT09bHx8IW98fCFEaS5hcmVQb2x5bGluZXNFcXVhbChvLGUpKSYmRjAoaCxlLHMpLGgpLGkpP3t0eXBlOmduLkxJTkUsZGF0YTplLG9iajNkOmEsd2lkdGg6c306dH1jcmVhdGVNZXNoKHQsZSl7aWYoIWUudmlzaWJsZSlyZXR1cm4gbnVsbDtsZXR7dmlzaWJsZTppLGNvbG9yOnIsb3BhY2l0eTpzfT1lLG89cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IscixzIT1udWxsP3M6MSksYT1uZXcga2koe2NvbG9yOm8sdmlzaWJsZTppfSk7cmV0dXJuIG5ldyBvZSh0LGEpfWNyZWF0ZU9yVXBkYXRlVHJpYW5nbGVPYmplY3QodCxlLGkpe2xldHtzaXplOnJ9PWkscz1yKk1hdGguc3FydCgzKS8yLG89bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnktcy8zLGUueCtyLzIsZS55LXMvMyxlLngsZS55K3MqMi8zXSk7aWYoIXQpe2xldCBsPW5ldyBIdDtOMChsLG8pO2xldCBjPXRoaXMuY3JlYXRlTWVzaChsLGkpO3JldHVybiBjPT09bnVsbD9udWxsOih0aGlzLnNjZW5lLmFkZChjKSx7dHlwZTpnbi5UUklBTkdMRSxkYXRhOmUsb2JqM2Q6Y30pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLGw9PihOMChsLG8pLGwpLGkpP3t0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWkscz1uZXcgWnIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gocyxpKTtyZXR1cm4gYT09PW51bGw/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+cyxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpnbi5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOnN9PXIsbz0yL01hdGguc3FydCgzKSpzLGE9bmV3IFVuKFtuZXcgSyhlLngtby8yLGUueS1zLzIpLG5ldyBLKGUueCxlLnkrcy8yKSxuZXcgSyhpLngsaS55K3MvMiksbmV3IEsoaS54K28vMixpLnktcy8yKV0pO2EuYXV0b0Nsb3NlPSEwO2xldCBsPW5ldyBxaShhKTtpZighdCl7bGV0IHU9dGhpcy5jcmVhdGVNZXNoKGwscik7cmV0dXJuIHU9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKHUpLHt0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnV9KX1yZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+bCxyKT97dHlwZTpnbi5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp0Lm9iajNkfTp0fWZsdXNoKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSx0aGlzLmNvb3JkaW5hdG9yLmdldENhbWVyYSgpKX1kaXNwb3NlKCl7dGhpcy5yZW5kZXJlci5kaXNwb3NlKCl9fTt2YXIgTmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJlbmRlckNhY2hlPXQsdGhpcy5yZW5kZXJlcj1lfXNldExpbmUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVMaW5lT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJpYW5nbGUodCxlLGkpe2xldCByPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldENpcmNsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0aGlzLnJlbmRlckNhY2hlLmdldEZyb21QcmV2aW91c0ZyYW1lKHQpLGUsaSk7ciYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHIpfXNldFRyYXBlem9pZCh0LGUsaSxyKXtsZXQgcz10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpLHIpO3MmJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxzKX19O3ZhciBzZj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7bGV0IGU9dGhpcy5wcmV2RnJhbWVDYWNoZS5nZXQodCk7cmV0dXJuIGUhPW51bGw/ZTpudWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LEZsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMucmF3U2VyaWVzRGF0YT1bXSx0aGlzLnNlcmllcz1bXSx0aGlzLnBhaW50RGlydHk9ITAsdGhpcy5yZW5kZXJDYWNoZT1uZXcgc2YsdGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj1udWxsLHRoaXMubGF5b3V0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsPXQuZ2V0TWV0YWRhdGFNYXAsdGhpcy5jb29yZGluYXRvcj10LmNvb3JkaW5hdG9yLHRoaXMucmVuZGVyZXI9dC5yZW5kZXJlcix0aGlzLnBhaW50QnJ1c2g9bmV3IE5sKHRoaXMucmVuZGVyQ2FjaGUsdGhpcy5yZW5kZXJlcil9c2V0TGF5b3V0UmVjdCh0KXsodGhpcy5sYXlvdXQueCE9PXQueHx8dGhpcy5sYXlvdXQud2lkdGghPT10LndpZHRofHx0aGlzLmxheW91dC55IT09dC55fHx0aGlzLmxheW91dC5oZWlnaHQhPT10LmhlaWdodCkmJih0aGlzLnBhaW50RGlydHk9ITApLHRoaXMubGF5b3V0PXR9Z2V0TGF5b3V0UmVjdCgpe3JldHVybiB0aGlzLmxheW91dH1nZXRNZXRhZGF0YU1hcCgpe3JldHVybiB0aGlzLmdldE1ldGFkYXRhTWFwSW1wbCgpfW1hcmtBc1BhaW50RGlydHkoKXt0aGlzLnBhaW50RGlydHk9ITB9cmVuZGVyKCl7aWYodGhpcy50cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKSwhIXRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheShpLnBvaW50cy5sZW5ndGgqMil9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W3Msb109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMl09cyx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVtyKjIrMV09b319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19O3ZhciBMbzsoZnVuY3Rpb24obil7bltuLk5VTUJFUj0wXT0iTlVNQkVSIixuW24uTkFOPTFdPSJOQU4ifSkoTG98fChMbz17fSkpO3ZhciB6bD1jbGFzcyBleHRlbmRzIEZse3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6TG8uTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkxvLk5BTixwb2x5bGluZTplLm1hcCgocixzKT0+aXNOYU4ocik/cyUyPT09MD9pLng6aS55OnIpfX1wYXJ0aXRpb25Qb2x5bGluZSh0KXtsZXQgZT1bXSxpPTAscj0hMSxzPXRoaXMuY29vcmRpbmF0b3IudHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0aGlzLmdldExheW91dFJlY3QoKSxbMCwwXSksbz17eDpzWzBdLHk6c1sxXX0sYT1udWxsO2ZvcihsZXQgbD0wO2w8dC5sZW5ndGg7bCs9Mil7bGV0IGM9dFtsXSx1PXRbbCsxXSxoPWlzTmFOKGMpfHxpc05hTih1KTtoIT09ciYmaSE9PWwmJihlLnB1c2godGhpcy5yZWNvcmRQYXJ0aXRpb24oIXIsdC5zbGljZShpLGwpLGE9PT1udWxsP3t4OmMseTp1fTphKSksaT1sKSxofHwoYT17eDpjLHk6dX0pLHI9aH1yZXR1cm4gaSE9PXQubGVuZ3RoLTEmJmUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksdC5sZW5ndGgpLGEhPW51bGw/YTpvKSksZX1yZWRyYXcoKXt2YXIgdCxlLGk7Zm9yKGxldCByIG9mIHRoaXMuc2VyaWVzKXtsZXQgbz10aGlzLmdldE1ldGFkYXRhTWFwKClbci5pZF07aWYoIW8pY29udGludWU7aWYoci5wb2x5bGluZS5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgaGF2ZSBvZGQgbGVuZ3RoLWVkIHBvbHlsaW5lOiAke3IucG9seWxpbmUubGVuZ3RofWApO2xldCBhPXRoaXMucGFydGl0aW9uUG9seWxpbmUoci5wb2x5bGluZSk7Zm9yKGxldFtsLHt0eXBlOmMscG9seWxpbmU6dX1db2YgYS5lbnRyaWVzKCkpaWYoYz09PUxvLk5VTUJFUil1Lmxlbmd0aD09PTI/dGhpcy5wYWludEJydXNoLnNldENpcmNsZShKU09OLnN0cmluZ2lmeShbImNpcmNsZSIsci5pZCxsXSkse3g6dVswXSx5OnVbMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KHQ9by5vcGFjaXR5KSE9bnVsbD90OjEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHIuaWQsbF0pLHUse2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooZT1vLm9wYWNpdHkpIT1udWxsP2U6MSx3aWR0aDoyfSk7ZWxzZSBpZighby5hdXgpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKz0yKXRoaXMucGFpbnRCcnVzaC5zZXRUcmlhbmdsZShKU09OLnN0cmluZ2lmeShbIk5hTiIsci5pZCx1W2hdLHVbaCsxXV0pLHt4OnVbaF0seTp1W2grMV19LHtjb2xvcjpvLmNvbG9yLHZpc2libGU6by52aXNpYmxlLG9wYWNpdHk6KGk9by5vcGFjaXR5KSE9bnVsbD9pOjEsc2l6ZToxMn0pfX19O3ZhciBVbD1jbGFzcyBleHRlbmRzIGRye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNhbWVyYT1uZXcgVmkoMCwxZTMsMWUzLDAsMCwxMDApfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiExfXNldERvbUNvbnRhaW5lclJlY3QodCl7c3VwZXIuc2V0RG9tQ29udGFpbmVyUmVjdCh0KSx0aGlzLmNhbWVyYS5sZWZ0PXQueCx0aGlzLmNhbWVyYS5yaWdodD10LngrdC53aWR0aCx0aGlzLmNhbWVyYS50b3A9dC55K3QuaGVpZ2h0LHRoaXMuY2FtZXJhLmJvdHRvbT10LnksdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldENhbWVyYSgpe3JldHVybiB0aGlzLmNhbWVyYX19O3ZhciBNVD17cmVxdWVzdEFuaW1hdGlvbkZyYW1lOm49PnNlbGYucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSxCbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIFRuLlNWRzp7dGhpcy5jb29yZGluYXRvcj1uZXcgZHIsdGhpcy5yZW5kZXJlcj1uZXcgT3ModC5jb250YWluZXIpO2JyZWFrfWNhc2UgVG4uV0VCR0w6e2xldCBlPW5ldyBVbDt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5yZW5kZXJlcj1uZXcgUm8odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgemwoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoZnIodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KE5vKHt4OjAseTowfSx0KSksdGhpcy5yZW5kZXJlci5vblJlc2l6ZShObyh7eDowLHk6MH0sdCkpLHRoaXMuc2VyaWVzTGluZVZpZXcuc2V0TGF5b3V0UmVjdCh1ZihObyh7fSx0KSx7eDowLHk6MH0pKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldE1ldGFkYXRhKHQpe2xldCBlPSExO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtpLHJdKT0+e2xldCBzPXRoaXMubWV0YWRhdGFNYXBbaV07KCFzfHxyLmNvbG9yIT09cy5jb2xvcnx8ci52aXNpYmxlIT09cy52aXNpYmxlfHxyLm9wYWNpdHkhPT1zLm9wYWNpdHkpJiYoZT0hMCksdGhpcy5tZXRhZGF0YU1hcFtpXT1yfSksZSYmdGhpcy5zZXJpZXNMaW5lVmlldy5tYXJrQXNQYWludERpcnR5KCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRWaWV3Qm94KHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0Vmlld0JveFJlY3Qoe3g6dC54WzBdLHdpZHRoOnQueFsxXS10LnhbMF0seTp0LnlbMF0saGVpZ2h0OnQueVsxXS10LnlbMF19KSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldERhdGEodCl7dGhpcy5zZXJpZXNMaW5lVmlldy5zZXREYXRhKHQpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0VXNlRGFya01vZGUodCl7dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0KSx0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNjaGVkdWxlUmVwYWludCgpe3RoaXMuc2hvdWxkUmVwYWludHx8KHRoaXMuc2hvdWxkUmVwYWludD0hMCxNVC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLnJlcGFpbnQoKSx0aGlzLnNob3VsZFJlcGFpbnQ9ITF9KSl9cmVwYWludCgpe3RoaXMuc2VyaWVzTGluZVZpZXcucmVuZGVyKCksdGhpcy5yZW5kZXJlci5mbHVzaCgpLHRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpfX07ZnVuY3Rpb24gejAobil7bGV0e2ZsYXR0ZW5lZFNlcmllczp0LGlkc0FuZExlbmd0aHM6ZX09bixpPW5ldyBGbG9hdDY0QXJyYXkodCkscj1bXTtpZihpLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoImBmbGF0dGVuZWRTZXJpZXNgIG11c3QgaGF2ZSBldmVuIG51bWJlciBvZiBlbGVtZW50cyIpO2xldCBzPTA7Zm9yKGxldHtpZDpvLGxlbmd0aDphfW9mIGUpe2xldCBsPVtdO2ZvcihsZXQgYz0wO2M8YTtjKyspbC5wdXNoKHt4OmlbcysrXSx5OmlbcysrXX0pO3IucHVzaCh7aWQ6byxwb2ludHM6bH0pfXJldHVybiByfXZhciB4bjsoZnVuY3Rpb24obil7bltuLlNFUklFU19EQVRBX1VQREFURUQ9MF09IlNFUklFU19EQVRBX1VQREFURUQiLG5bbi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRD0xXT0iU0VSSUVTX01FVEFEQVRBX0NIQU5HRUQiLG5bbi5TQ0FMRV9VUERBVEVEPTJdPSJTQ0FMRV9VUERBVEVEIixuW24uVklFV19CT1hfVVBEQVRFRD0zXT0iVklFV19CT1hfVVBEQVRFRCIsbltuLklOSVQ9NF09IklOSVQiLG5bbi5ET01fUkVTSVpFRD01XT0iRE9NX1JFU0laRUQiLG5bbi5EQVJLX01PREVfVVBEQVRFRD02XT0iREFSS19NT0RFX1VQREFURUQiLG5bbi5ESVNQT1NFRD03XT0iRElTUE9TRUQifSkoeG58fCh4bj17fSkpO3ZhciBQbzsoZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KShQb3x8KFBvPXt9KSk7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57YlQobi5wb3J0c1swXSxuLmRhdGEpfSk7ZnVuY3Rpb24gYlQobix0KXtsZXR7Y2FudmFzOmUsZGV2aWNlUGl4ZWxSYXRpbzppLGRpbTpyLHJlbmRlcmVyVHlwZTpzLHVzZURhcmtNb2RlOm99PXQsYT17b25EcmF3RW5kOigpPT57bi5wb3N0TWVzc2FnZSh7dHlwZTpQby5PTl9SRURSQVdfRU5EfSl9LG9uQ29udGV4dExvc3Q6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX0NPTlRFWFRfTE9TVH0pfX0sbDtzd2l0Y2gocyl7Y2FzZSBUbi5XRUJHTDpsPXt0eXBlOlRuLldFQkdMLGRvbURpbWVuc2lvbjpyLGNhbGxiYWNrczphLGNvbnRhaW5lcjplLGRldmljZVBpeGVsUmF0aW86aSx1c2VEYXJrTW9kZTpvfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGNhbm5vdCBoYXZlIE9mZnNjcmVlbiBjaGFydCBmb3IgcmVuZGVyZXIgdHlwZTogJHtzfWApfWxldCBjPW5ldyBCbChsKTtuLm9ubWVzc2FnZT1mdW5jdGlvbih1KXtsZXQgaD11LmRhdGE7c3dpdGNoKGgudHlwZSl7Y2FzZSB4bi5TRVJJRVNfREFUQV9VUERBVEVEOntsZXQgZj16MChoLmNvbXBhY3REYXRhU2VyaWVzKTtjLnNldERhdGEoZik7YnJlYWt9Y2FzZSB4bi5TRVJJRVNfTUVUQURBVEFfQ0hBTkdFRDp7Yy5zZXRNZXRhZGF0YShoLm1ldGFkYXRhKTticmVha31jYXNlIHhuLlZJRVdfQk9YX1VQREFURUQ6e2Muc2V0Vmlld0JveChoLmV4dGVudCk7YnJlYWt9Y2FzZSB4bi5ET01fUkVTSVpFRDp7Yy5yZXNpemUoaC5kaW0pO2JyZWFrfWNhc2UgeG4uREFSS19NT0RFX1VQREFURUQ6e2Muc2V0VXNlRGFya01vZGUoaC51c2VEYXJrTW9kZSk7YnJlYWt9Y2FzZSB4bi5TQ0FMRV9VUERBVEVEOntzd2l0Y2goaC5heGlzKXtjYXNlIngiOmMuc2V0WFNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7Y2FzZSJ5IjpjLnNldFlTY2FsZVR5cGUoaC5zY2FsZVR5cGUpO2JyZWFrO2RlZmF1bHQ6bGV0IGY9aC5heGlzO3Rocm93IG5ldyBSYW5nZUVycm9yKGBVbmtub3duIGF4aXM6ICR7Zn1gKX1icmVha31jYXNlIHhuLkRJU1BPU0VEOntjLmRpc3Bvc2UoKTticmVha319fX19KSgpOwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoYXJ0X3dvcmtlci5qcy5tYXAK", + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/environment": { + "data": "eyJ2ZXJzaW9uIjogIjIuMTMuMCIsICJkYXRhX2xvY2F0aW9uIjogImxvZ3MiLCAid2luZG93X3RpdGxlIjogIiIsICJleHBlcmltZW50X25hbWUiOiAiIiwgImV4cGVyaW1lbnRfZGVzY3JpcHRpb24iOiAiIiwgImNyZWF0aW9uX3RpbWUiOiAwLjAsICJkZWJ1ZyI6IHsiZGF0YV9wcm92aWRlciI6ICJHcnBjRGF0YVByb3ZpZGVyKGFkZHI9J2xvY2FsaG9zdDozNzUzMScpIiwgImZsYWdzIjogeyJsb2dkaXIiOiAibG9ncyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IG51bGwsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImRldGVjdF9maWxlX3JlcGxhY2VtZW50IjogbnVsbCwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/plugins_listing": { + "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkaXN0cmlidXRpb25zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIn19LCAiaGlzdG9ncmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhpc3RvZ3JhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQifX0sICJ0ZXh0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAidGV4dCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtdGV4dC1kYXNoYm9hcmQifX0sICJwcl9jdXJ2ZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQUiBDdXJ2ZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByLWN1cnZlLWRhc2hib2FyZCJ9fSwgInByb2ZpbGVfcmVkaXJlY3QiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQcm9maWxlIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgImhwYXJhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJocGFyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ocGFyYW1zLWRhc2hib2FyZCJ9fSwgIm1lc2giOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJtZXNoIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJtZXNoLWRhc2hib2FyZCJ9fSwgIndpdF9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIldoYXQtSWYgVG9vbCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtd2l0LXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgInByb2plY3RvciI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAicHJvamVjdG9yIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIklGUkFNRSIsICJtb2R1bGVfcGF0aCI6ICIvZGF0YS9wbHVnaW4vcHJvamVjdG9yL2luZGV4LmpzIn19fQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/data/runs": { + "data": "WyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF83MzU4NDNfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfNzM1ODQzX0JTMzJfbGRhdGE0MTEyNyIsICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzExOTgzMjhfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfNjgzNDVfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzY4MzQ1X0JTMzJfbGRhdGE0MTEyNyIsICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF84OTk0NTVfQlMzMl9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfMTIxMjM1NV9CUzE2X2xkYXRhNDExMjciLCAiZXhwZXJpbWVudGFsX2ludGVyZmFjZV9vcGVuRkxfNDMyMjI5X0JTMTZfbGRhdGE0MTEyNyIsICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzk3MDExMV9CUzEyOF9sZGF0YTQxMTI3IiwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzE3MDU2NjhfQlMxMjhfbGRhdGE0MTEyNyJd", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/experiment?request=%7B%22experimentName%22:%22defaultExperimentId%22%7D": { + "data": "ewogICJuYW1lIjogIiIsCiAgImRlc2NyaXB0aW9uIjogIiIsCiAgInVzZXIiOiAiIiwKICAidGltZUNyZWF0ZWRTZWNzIjogMC4wLAogICJocGFyYW1JbmZvcyI6IFtdLAogICJtZXRyaWNJbmZvcyI6IFtdCn0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/hparams/session_groups?request=%7B%22experimentName%22:%22defaultExperimentId%22,%22allowedStatuses%22:%5B%22STATUS_FAILURE%22,%22STATUS_RUNNING%22,%22STATUS_SUCCESS%22,%22STATUS_UNKNOWN%22%5D,%22colParams%22:%5B%5D,%22startIndex%22:0,%22sliceSize%22:1000000%7D": { + "data": "ewogICJzZXNzaW9uR3JvdXBzIjogW10sCiAgInRvdGFsU2l6ZSI6IDAKfQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags": { + "data": "eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzk3MDExMV9CUzEyOF9sZGF0YTQxMTI3IjogWyJPcmlnaW5hbC90cmFpbi9sb3NzIl0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF8xNzA1NjY4X0JTMTI4X2xkYXRhNDExMjciOiBbIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAiQ29sbF8xL3RyYWluL2xvc3MiLCAiQ29sbF8yL3RyYWluL2xvc3MiXSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAiQ29sbF8xL3RyYWluL2xvc3MiLCAiQ29sbF8yL3RyYWluL2xvc3MiXSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfMTE5ODMyOF9CUzMyX2xkYXRhNDExMjciOiBbIk9yaWdpbmFsL3RyYWluL2xvc3MiXSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfNjgzNDVfQlMzMl9sZGF0YTQxMTI3IjogWyJPcmlnaW5hbC90cmFpbi9sb3NzIl0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzEyMTIzNTVfQlMxNl9sZGF0YTQxMTI3IjogWyJPcmlnaW5hbC90cmFpbi9sb3NzIl0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF80MzIyMjlfQlMxNl9sZGF0YTQxMTI3IjogWyJBZ2dyZWdhdG9yL3RyYWluL2F2Z19sb3NzIiwgIkNvbGxfMS90cmFpbi9sb3NzIiwgIkNvbGxfMi90cmFpbi9sb3NzIl19LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaGlzdG9ncmFtcyI6IHsicnVuVGFnSW5mbyI6IHt9LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaW1hZ2VzIjogeyJ0YWdEZXNjcmlwdGlvbnMiOiB7fSwgInRhZ1J1blNhbXBsZWRJbmZvIjoge319fQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Aggregator/train/avg_loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkFnZ3JlZ2F0b3IvdHJhaW4vYXZnX2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7ImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODQ3MTYuOTI1OTc3NywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjA3ODEyOTE4NzIyNjI5NTQ3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NjAuOTY1MTI3NywgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjAxNTYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODAzLjk3MTk3ODcsICJzdGVwIjogMiwgInZhbHVlIjogMS40NDc4MDgwMDU3NTMzNThlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NDUuOTgxNDY5MiwgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjA0Njg3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODg4LjcwNzg1NzgsICJzdGVwIjogNCwgInZhbHVlIjogMC4wMTU2MjV9XX19XQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_1/train/loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMS90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF8xNzA1NjY4X0JTMTI4X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODczNjYuNjI3MDI1NCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjUyOTQzOTIxMDg5MTcyMzZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NzM3MS4wMzk3MDU1LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjAzMTI3MzYxMDg4OTkxMTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODczNzMuODAxMjk0MywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDIzNDUwMDA1Nzk5NTMxOTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODczOTcuMTQ2MDUxNCwgInN0ZXAiOiAxMjksICJ2YWx1ZSI6IDAuMDM5MDY4Mjg5MTAxMTIzODF9LCB7IndhbGxUaW1lIjogMTY5NTI4NzM5OS43MjExOTc2LCAic3RlcCI6IDE3OSwgInZhbHVlIjogMC4wNTQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MDMuMzMyOTU4MiwgInN0ZXAiOiAyMjksICJ2YWx1ZSI6IDAuMDE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MzQuNDk3MzgwMywgInN0ZXAiOiAyNTgsICJ2YWx1ZSI6IDAuMDQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MzcuMjcxMTUwOCwgInN0ZXAiOiAzMDgsICJ2YWx1ZSI6IDAuMDQ2ODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MzkuODg4MzUsICJzdGVwIjogMzU4LCAidmFsdWUiOiAwLjAzOTA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ2My43ODM1NDc0LCAic3RlcCI6IDM4NywgInZhbHVlIjogMC4wMTU2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ2Ny44MTkzODI0LCAic3RlcCI6IDQzNywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NDcxLjYxMzE2NjMsICJzdGVwIjogNDg3LCAidmFsdWUiOiAwLjA1NDY4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ5Ny4yMDA3MTUzLCAic3RlcCI6IDUxNiwgInZhbHVlIjogMC4wNzAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0OTkuNzc0MTI1MywgInN0ZXAiOiA1NjYsICJ2YWx1ZSI6IDAuMDM5MDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NTAzLjM0OTgwODcsICJzdGVwIjogNjE2LCAidmFsdWUiOiAwLjAzOTA2MjV9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODQ2ODUuODM3Njc5NiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjU0Mzk3MTAwMjEwMTg5ODJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDY4Ni45MDQ1NzY4LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA2MjU1NjI0NDQzMjkyNjE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2ODcuOTEwNTI0OCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDMxMjczNTIxNDgyOTQ0NDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDY4OC45MzgwNjkzLCAic3RlcCI6IDE1MCwgInZhbHVlIjogMC4wMzEyNTg2MDU0MjA1ODk0NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Njg5Ljk0NTE3MTYsICJzdGVwIjogMjAwLCAidmFsdWUiOiA0LjQxNDcxNjM4NjIzNjI1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NjkwLjk3NjY1OTgsICJzdGVwIjogMjUwLCAidmFsdWUiOiAwLjAzMTI3MDQ4OTA5NjY0MTU0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2OTIuMTM3MTgzNCwgInN0ZXAiOiAzMDAsICJ2YWx1ZSI6IDguNTk2NDc3NTI4MDQ0NDg4ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NjkzLjYwOTAxMzgsICJzdGVwIjogMzUwLCAidmFsdWUiOiAwLjAzMTI2NTAwMTc0NDAzMTkwNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Njk1LjE0OTkwMTksICJzdGVwIjogNDAwLCAidmFsdWUiOiAzLjUxNDA4MTA3MjM1MzI5MjNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2OTYuNzIzMjg0NSwgInN0ZXAiOiA0NTAsICJ2YWx1ZSI6IDAuMDMxMjUyMjE2NTQ3NzI3NTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ2OTguNDU3MzQzMywgInN0ZXAiOiA1MDAsICJ2YWx1ZSI6IDAuMDkzNzU3NzkzMzA3MzA0Mzh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcyNi41MzMzNzAzLCAic3RlcCI6IDUxNSwgInZhbHVlIjogMC4wMzEyNjI2MzYxODQ2OTIzOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzI3LjcxMjIxOTcsICJzdGVwIjogNTY1LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MjguNjg1MzksICJzdGVwIjogNjE1LCAidmFsdWUiOiA0LjY4NzMyMTA4NjgyNzAxMmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcyOS42ODM2ODcsICJzdGVwIjogNjY1LCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MzAuODUzNDM3LCAic3RlcCI6IDcxNSwgInZhbHVlIjogMy40NzkzNDI2ODIwMjIzMjRlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MzMuMDExOTAyNiwgInN0ZXAiOiA3NjUsICJ2YWx1ZSI6IDQuMzQzNzQ2NDczNjIyOTAwM2UtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NDczNS44OTIyODIsICJzdGVwIjogODE1LCAidmFsdWUiOiA4LjUwOTQ2ODY4NTI0NzE1N2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDczNy41OTU1NjU2LCAic3RlcCI6IDg2NSwgInZhbHVlIjogMC4wMzEyNTAwNTk2MDQ2NDQ3NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDczOS4zMDYyMDk4LCAic3RlcCI6IDkxNSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzQwLjk3MjIxNDIsICJzdGVwIjogOTY1LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0Mi4yNDc4NTE2LCAic3RlcCI6IDEwMTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc2OS4yMTE4NTA2LCAic3RlcCI6IDEwMzAsICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3MC4yNDAyMjk4LCAic3RlcCI6IDEwODAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3MS4zNzUyODkyLCAic3RlcCI6IDExMzAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3My4xNjE2MTc1LCAic3RlcCI6IDExODAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Nzc0Ljg3MzY2OTksICJzdGVwIjogMTIzMCwgInZhbHVlIjogOC40MTk1NDk3Nzk1OTI0NzJlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NzYuNTIxNzMyLCAic3RlcCI6IDEyODAsICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc3OC4zNTY4MzgyLCAic3RlcCI6IDEzMzAsICJ2YWx1ZSI6IDkuNDg5ODg0NzM1MjQxMzQ0ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzgwLjE5NTc3MywgInN0ZXAiOiAxMzgwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODEuNzgwNjcxNiwgInN0ZXAiOiAxNDMwLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc4Mi45MzY0NTA1LCAic3RlcCI6IDE0ODAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc4My45NDg4NDA0LCAic3RlcCI6IDE1MzAsICJ2YWx1ZSI6IDEuNDYzOTE0MDE5NjA4MDQzMmUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxMC43NzUxNTM0LCAic3RlcCI6IDE1NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxMi4xNTA0NjM4LCAic3RlcCI6IDE1OTUsICJ2YWx1ZSI6IDIuNjk0MjU4MjgwNDk0MjM5NWUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxMy43Mzg2NTMyLCAic3RlcCI6IDE2NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgxNS4zODAxMjU1LCAic3RlcCI6IDE2OTUsICJ2YWx1ZSI6IDUuNTUzMzA1OTczODQzODU2ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODE3LjA0NzI4MywgInN0ZXAiOiAxNzQ1LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4MTguODc4NDQ3MywgInN0ZXAiOiAxNzk1LCAidmFsdWUiOiAyLjEwNzU5ODgxNDMwMjkzOGUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgyMC42OTYyMTU2LCAic3RlcCI6IDE4NDUsICJ2YWx1ZSI6IDEuNzAzMjYwMDk4MzM3ODY3MmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgyMi4yMDMxOTY1LCAic3RlcCI6IDE4OTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgyMy4zNjM1MjU0LCAic3RlcCI6IDE5NDUsICJ2YWx1ZSI6IDIuMjc5NDEzNzMwMTgxMDc5ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODI0LjU0NDk5ODIsICJzdGVwIjogMTk5NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODI1LjY5MTExMDEsICJzdGVwIjogMjA0NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODUzLjQ0Mjk4OTYsICJzdGVwIjogMjA2MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODU1LjEyNDMxOTgsICJzdGVwIjogMjExMCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODU2LjcxNTU4ODgsICJzdGVwIjogMjE2MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NTguMzM0NDMyNiwgInN0ZXAiOiAyMjEwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NjAuMDAzNDQ5NywgInN0ZXAiOiAyMjYwLCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NjEuNzEyOTQyMSwgInN0ZXAiOiAyMzEwLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg2Mi45NzM4NDEsICJzdGVwIjogMjM2MCwgInZhbHVlIjogMi4zNzM2OTgzOTY5MDgwNTM2ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODY0LjAzMjIzMzUsICJzdGVwIjogMjQxMCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODY1LjE3MjQzNSwgInN0ZXAiOiAyNDYwLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg2Ni4yNDQyMjgxLCAic3RlcCI6IDI1MTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg2Ny40MDE5ODczLCAic3RlcCI6IDI1NjAsICJ2YWx1ZSI6IDAuMDMxMjV9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzQzMjIyOV9CUzE2X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODYzMTcuMjE2ODg1OCwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQyMjY2OTU1OTcxNzE3ODM0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMTcuOTg2MjAyNSwgInN0ZXAiOiA1MCwgInZhbHVlIjogMi42NjMwNjIzMzI0MzA4NTQ0ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzE4Ljc2MDQwNTgsICJzdGVwIjogMTAwLCAidmFsdWUiOiAzLjYyMzM1NTU4NzQ3ODcyN2UtMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMxOS41ODEyOTkzLCAic3RlcCI6IDE1MCwgInZhbHVlIjogMS45NzQ0MDgyMjM3NTkzODNlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjAuMzkwMDE1OCwgInN0ZXAiOiAyMDAsICJ2YWx1ZSI6IDAuMDYyNTEyMTM2OTk1NzkyMzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMyMS4xNzY1MTU4LCAic3RlcCI6IDI1MCwgInZhbHVlIjogNS40MDQzNTc5MjExNzkzMjZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjEuOTY5MTk5NCwgInN0ZXAiOiAzMDAsICJ2YWx1ZSI6IDMuNjM2MDEyMDI0Nzk5MTI5ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzIyLjgyMzAyNjIsICJzdGVwIjogMzUwLCAidmFsdWUiOiAwLjEyNTAwMTI5NjQwMTAyMzg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjMuNjMxNzYyMywgInN0ZXAiOiA0MDAsICJ2YWx1ZSI6IDAuMTI1MDEzODEzMzc2NDI2N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzI0LjUwMTg1MjgsICJzdGVwIjogNDUwLCAidmFsdWUiOiAyLjAzOTA5NDg1MjA3OTg3ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzI1LjQ2MzYzNzgsICJzdGVwIjogNTAwLCAidmFsdWUiOiAxLjE1NjEzNzM4NjcxNTI3MjRlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjYuNTgxOTMyOCwgInN0ZXAiOiA1NTAsICJ2YWx1ZSI6IDQuOTMwMzA0Mzg1MTk3ODE0NmUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMyNy43Njk3NTU2LCAic3RlcCI6IDYwMCwgInZhbHVlIjogMS4yMjA0MTIyODY3ODQyNjdlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMjkuMDg4MzU3NCwgInN0ZXAiOiA2NTAsICJ2YWx1ZSI6IDEuMDM0NjE4MDk0MzA4ODI1N2UtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMzMC40MzYzMjY1LCAic3RlcCI6IDcwMCwgInZhbHVlIjogMC4wNjI1MDI2MDc3MDMyMDg5Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzMxLjgxMjg5MzYsICJzdGVwIjogNzUwLCAidmFsdWUiOiAwLjA2MjUwMTY4MzgzMTIxNDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMzMy4yMDYwNzE5LCAic3RlcCI6IDgwMCwgInZhbHVlIjogOC4yNjg1MTc2MDM5Mzc2NTNlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMzQuNDYyMjk5NiwgInN0ZXAiOiA4NTAsICJ2YWx1ZSI6IDEuNjE4MDM5OTU5Nzk0MjU5NmUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjMzNS41MjAxNzgzLCAic3RlcCI6IDkwMCwgInZhbHVlIjogOC40Mjc4ODgzNjA1MjkzMjNlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzMzYuNDcwMzQzLCAic3RlcCI6IDk1MCwgInZhbHVlIjogMC4wNjI1MDAxNTY0NjIxOTI1NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzM3LjI5MDEwOSwgInN0ZXAiOiAxMDAwLCAidmFsdWUiOiAwLjA2MjUwMDI5MDU3MjY0MzI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNzYuMTIzMjMsICJzdGVwIjogMTAyOSwgInZhbHVlIjogNC41MzczOTI2Njk1OTAxOWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM3Ni45NTY3MDQ5LCAic3RlcCI6IDEwNzksICJ2YWx1ZSI6IDUuOTY4NzA3NDcyNzE0Mzg1ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzc3Ljg0NDc4ODgsICJzdGVwIjogMTEyOSwgInZhbHVlIjogMS43NDUzODc2ODg1NDUzNzQ1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzc4LjcwOTE4NjMsICJzdGVwIjogMTE3OSwgInZhbHVlIjogMi40ODE2MTQzOTMxNDYwOTJlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNzkuNTM5Njk5OCwgInN0ZXAiOiAxMjI5LCAidmFsdWUiOiAxLjAyMjM0NzAyOTA4MjM4MjJlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODAuMjgzODc2NywgInN0ZXAiOiAxMjc5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM4MS4wMTY1NTQ4LCAic3RlcCI6IDEzMjksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzgxLjc2NjY5NDMsICJzdGVwIjogMTM3OSwgInZhbHVlIjogNi41MDAxOTg4MTY3MDU3MTZlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODIuNTE2MTM5MywgInN0ZXAiOiAxNDI5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM4My4yNTIyNDI4LCAic3RlcCI6IDE0NzksICJ2YWx1ZSI6IDcuODA0ODA0MDM5MTgyMjc1ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzg0LjAxNTIwOSwgInN0ZXAiOiAxNTI5LCAidmFsdWUiOiAwLjE4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM4NC43OTY1NTQzLCAic3RlcCI6IDE1NzksICJ2YWx1ZSI6IDEuNTcyMTQyNjk4MTQzMjY0ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzg1Ljg2NDE5NTgsICJzdGVwIjogMTYyOSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODcuMDM2NTU1OCwgInN0ZXAiOiAxNjc5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzg4LjMwMzA3NTYsICJzdGVwIjogMTcyOSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzODkuNDY5NjQ5LCAic3RlcCI6IDE3NzksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzkwLjY2ODgzOSwgInN0ZXAiOiAxODI5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM5Mi4wMTAxNzY0LCAic3RlcCI6IDE4NzksICJ2YWx1ZSI6IDIuMzI2NjIzODY1MzU1NjIwNGUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM5My41OTYwNzEsICJzdGVwIjogMTkyOSwgInZhbHVlIjogMS4wNjIzNTQyNzg5ODI0Nzc1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Mzk1LjUzOTMyMDUsICJzdGVwIjogMTk3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzOTYuOTg5MjM5LCAic3RlcCI6IDIwMjksICJ2YWx1ZSI6IDMuMTc4NDg5Nzc5MzE5MDQ2NGUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0MC4yNDMzMjcsICJzdGVwIjogMjA1OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDEuMDA0MTI0OSwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiAzLjI1NDc2NDUxMzQ2MDYyODVlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDEuNzc3MzU2OSwgInN0ZXAiOiAyMTU4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0Mi41MzExNzMyLCAic3RlcCI6IDIyMDgsICJ2YWx1ZSI6IDEuMjE3NDc2MDMwNDcyMzkwNmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0My4zMzg5OTY0LCAic3RlcCI6IDIyNTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDQ0LjE3NjMxMDUsICJzdGVwIjogMjMwOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDQuOTM0NTYxNSwgInN0ZXAiOiAyMzU4LCAidmFsdWUiOiAyLjczMzAzMTA4NjU5OTg2M2UtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ0NS44NjMwMzczLCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDQ3LjEwNDQ1NzQsICJzdGVwIjogMjQ1OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDguMzQ5MTU5LCAic3RlcCI6IDI1MDgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NDkuNjQ0OTY0NywgInN0ZXAiOiAyNTU4LCAidmFsdWUiOiAyLjU3NDQ5OTA0NDkzOTAzMjZlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTAuOTQyODQ3LCAic3RlcCI6IDI2MDgsICJ2YWx1ZSI6IDEuOTg1OTQ2OTk3MTI5NTA2M2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ1Mi4xNzg0MDA4LCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDUzLjU5Mjk0NjUsICJzdGVwIjogMjcwOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTUuMDAxMzY0NywgInN0ZXAiOiAyNzU4LCAidmFsdWUiOiA3LjI3MjA4MDc1MTE2MDEwN2UtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ1Ni4zNzIzNDcsICJzdGVwIjogMjgwOCwgInZhbHVlIjogMy43OTg4ODc3MTEyOTM5NjU1ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDU3LjI2MTIzMzMsICJzdGVwIjogMjg1OCwgInZhbHVlIjogMy4xNzQ0Njk5NjQyMzkyODVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTguMjg0MTA2LCAic3RlcCI6IDI5MDgsICJ2YWx1ZSI6IDMuMDQxMDQ2MTQ3NTM5NDE3ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDU5LjA0NzIzNDgsICJzdGVwIjogMjk1OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NTkuNzgxMTM4MiwgInN0ZXAiOiAzMDA4LCAidmFsdWUiOiA0LjMxMDg5MjQ2MzMxMjAxMDVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NjAuNTU5MjI3LCAic3RlcCI6IDMwNTgsICJ2YWx1ZSI6IDIuODEwMzA0NjE0ODg3NzkzZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDk4LjYyMjU4NDMsICJzdGVwIjogMzA4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0OTkuNDQxOTY5NiwgInN0ZXAiOiAzMTM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwMC4zNDA5Njc0LCAic3RlcCI6IDMxODcsICJ2YWx1ZSI6IDUuOTAyMTU4MDAxOTQ3OTc3ZS0xN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTAxLjI2OTA0OTIsICJzdGVwIjogMzIzNywgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwMi4xNjc0MywgInN0ZXAiOiAzMjg3LCAidmFsdWUiOiAwLjE4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwMy4xMTQzNjQ0LCAic3RlcCI6IDMzMzcsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MDMuOTIyMTkxOSwgInN0ZXAiOiAzMzg3LCAidmFsdWUiOiA5Ljk2MjM3OTA2NzkyMjYzOGUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwNC43ODI1OTc4LCAic3RlcCI6IDM0MzcsICJ2YWx1ZSI6IDIuMTAxMDQ0MjE5MjQ3MmUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwNS42NTE5MjIsICJzdGVwIjogMzQ4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MDYuODI1OTk2NCwgInN0ZXAiOiAzNTM3LCAidmFsdWUiOiA3Ljg0OTQ2MDY3NDk1MjcwNmUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUwOC4wMzQ5NDE0LCAic3RlcCI6IDM1ODcsICJ2YWx1ZSI6IDIuNTk2NjQyMzQ5NjUyNzQ0ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTA5LjI1ODIwOTIsICJzdGVwIjogMzYzNywgInZhbHVlIjogNS4wMjA0NTgxMjk2MjY3OTRlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MTAuNDI4NDk4NSwgInN0ZXAiOiAzNjg3LCAidmFsdWUiOiAxLjIwNDAyMjA3Njc3NTU1ODVlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MTEuNjMyOTgyNywgInN0ZXAiOiAzNzM3LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTEyLjkxMDkwNjgsICJzdGVwIjogMzc4NywgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUxNC4zODYwMTQ1LCAic3RlcCI6IDM4MzcsICJ2YWx1ZSI6IDguMTA1NDY0MjA3MTYxNzAxZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTE1Ljc0MDgxNiwgInN0ZXAiOiAzODg3LCAidmFsdWUiOiAzLjU4MjA5NTE4NzA5Nzk0MzdlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MTYuNzM1MzQzNywgInN0ZXAiOiAzOTM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUxNy41MzMyMjc3LCAic3RlcCI6IDM5ODcsICJ2YWx1ZSI6IDEuMTk3NDkyMjk5Nzg1MTc1ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTE4LjM4NTU2NCwgInN0ZXAiOiA0MDM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUxOS4xNjY1ODQzLCAic3RlcCI6IDQwODcsICJ2YWx1ZSI6IDEuNTA2MTkyMzk4NjIwODIwOGUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU1OC43MDMwMjA4LCAic3RlcCI6IDQxMTYsICJ2YWx1ZSI6IDIuNzE4MTQyNDU4OTM3MjE4MmUtMTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU1OS41MDM1MDI0LCAic3RlcCI6IDQxNjYsICJ2YWx1ZSI6IDQuNjE1NTcxNDY4MDQ4MTQ0ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTYwLjM4NTY0NTksICJzdGVwIjogNDIxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjEuMjYwOTI0LCAic3RlcCI6IDQyNjYsICJ2YWx1ZSI6IDEuMTI4Mjg5NzA3OTk0NDk4N2UtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2Mi4xMDM0NSwgInN0ZXAiOiA0MzE2LCAidmFsdWUiOiAyLjUwODg5OTc1NDYxNjMyM2UtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2Mi44NjkxNjIzLCAic3RlcCI6IDQzNjYsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjMuNzU3NjUwNCwgInN0ZXAiOiA0NDE2LCAidmFsdWUiOiAxLjM5NjQzNjcyODA1MTgwNTVlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjQuNTMxMTM1LCAic3RlcCI6IDQ0NjYsICJ2YWx1ZSI6IDIuNjg1MzQxMzUyOTAwMjU2N2UtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2NS4zODkyOTkyLCAic3RlcCI6IDQ1MTYsICJ2YWx1ZSI6IDguNTIwNTk5ODYxNTIzMDFlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjYuNTk3MDcxNiwgInN0ZXAiOiA0NTY2LCAidmFsdWUiOiA4LjA3MDk2MTcwOTcxODcyNmUtMTh9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU2Ny43NjI0NjE3LCAic3RlcCI6IDQ2MTYsICJ2YWx1ZSI6IDguMDI1MDcyNzA3MTg0NDllLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NjkuMDk2MDU1MywgInN0ZXAiOiA0NjY2LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTcwLjI1MzM2NzcsICJzdGVwIjogNDcxNiwgInZhbHVlIjogMi4wMTIxNjIyMDU3MjE5NTk1ZS0xOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTcxLjUzMzA3OTksICJzdGVwIjogNDc2NiwgInZhbHVlIjogNi44NjQwNTEzNTE3MTU4NmUtMjB9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU3Mi43NzA3MDIsICJzdGVwIjogNDgxNiwgInZhbHVlIjogMS4zNTE4NDQ0MjQ0MzM3MTg3ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTc0LjE1NzYyMTYsICJzdGVwIjogNDg2NiwgInZhbHVlIjogMy4xMzE3ODE4OTk3NDIxMTc3ZS0xN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTc1LjY1NDE5NTUsICJzdGVwIjogNDkxNiwgInZhbHVlIjogMS4xODA4Mjk3MDU4NzQ4MDVlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NzYuNTM3MTM3NywgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAyLjAwMjk5NTE4ODU0ODM3MjZlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NzcuMzYwMTg1OSwgInN0ZXAiOiA1MDE2LCAidmFsdWUiOiA3LjU3ODk5NjcwMjE0NzMwM2UtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU3OC4yMzcxODIsICJzdGVwIjogNTA2NiwgInZhbHVlIjogMi40MDQ4MzE4ODY5Nzc3NzM0ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTc4Ljk5NDAxODMsICJzdGVwIjogNTExNiwgInZhbHVlIjogMy40NjI2NzcwNDExMjI2ODRlLTE1fV19fV0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Coll_2/train/loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIkNvbGxfMi90cmFpbi9sb3NzIiwgInJ1blRvU2VyaWVzIjogeyJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF8xNzA1NjY4X0JTMTI4X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODczNzYuOTQ2MDk3MSwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjUwNzc0NzA1NDEwMDAzNjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NzM3OS43OTI5MzkyLCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjAyMzQ1MTI3Nzk4NjE2ODg2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODczODMuNTE5OTQ5NywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDIzNDQzNDc1MzY1NjM4NzMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MDguMDYzMjUyMiwgInN0ZXAiOiAxMjksICJ2YWx1ZSI6IDAuMDMxMjY4OTk1MjU1MjMxODZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQxMS41ODU0OTM4LCAic3RlcCI6IDE3OSwgInZhbHVlIjogMC4wMjM0Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0MTUuMTU0MzcwMywgInN0ZXAiOiAyMjksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NzQ0My45MDE3NDAzLCAic3RlcCI6IDI1OCwgInZhbHVlIjogMC4wMzkwNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0NDguMDE2ODQwNywgInN0ZXAiOiAzMDgsICJ2YWx1ZSI6IDAuMDE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0NTIuMDc5MTMsICJzdGVwIjogMzU4LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0NzQuOTAyNDI4NCwgInN0ZXAiOiAzODcsICJ2YWx1ZSI6IDAuMDU0Njg3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NDc5LjkwNjE0NywgInN0ZXAiOiA0MzcsICJ2YWx1ZSI6IDAuMDE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc0ODMuMzU3ODAzMywgInN0ZXAiOiA0ODcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NTA3LjkzMzQ2MTIsICJzdGVwIjogNTE2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODc1MTEuNjc1MTExNSwgInN0ZXAiOiA1NjYsICJ2YWx1ZSI6IDAuMDM5MDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3NTE0LjQ5MzMwNzYsICJzdGVwIjogNjE2LCAidmFsdWUiOiAwLjAwNzgxMjV9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3BlbkZMXzg5OTQ1NV9CUzMyX2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDEuNzcwNDMxMywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjUwNTYzNTM4MDc0NDkzNDF9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcwMi45NTAzNDk4LCAic3RlcCI6IDUwLCAidmFsdWUiOiAyLjg5ODk4NjUzMTM2MzMzNDVlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDQuMTMyODE5NCwgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDMxMjUxMzAwMTI2MzE0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcwNS4zMTUwMTgyLCAic3RlcCI6IDE1MCwgInZhbHVlIjogMi4xMTg5MDgzNzgxNzkxODVlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDYuMzE4MjQxOCwgInN0ZXAiOiAyMDAsICJ2YWx1ZSI6IDAuMTI0OTg3NjE3MTM1MDQ3OTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NDcwNy4zNDQzOTU5LCAic3RlcCI6IDI1MCwgInZhbHVlIjogMC4wOTM3NjA2OTE1ODMxNTY1OX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzA4LjQ5OTA3NjYsICJzdGVwIjogMzAwLCAidmFsdWUiOiAwLjA2MjUwMTYwOTMyNTQwODk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MDkuNTEyNTA4LCAic3RlcCI6IDM1MCwgInZhbHVlIjogMi44NjE4NjU1OTYwNTk5NDI2ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzEwLjUxNzE1MjgsICJzdGVwIjogNDAwLCAidmFsdWUiOiAwLjA2MjUxNDE0ODY1MjU1MzU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3MTEuNTgwNjQ1LCAic3RlcCI6IDQ1MCwgInZhbHVlIjogMC4wNjI1MDg4NjYxOTA5MTAzNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzEzLjMzMjk1NywgInN0ZXAiOiA1MDAsICJ2YWx1ZSI6IDAuMDYyNTAwNTg4NTk1ODY3MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0NC41Njg0MDQyLCAic3RlcCI6IDUxNSwgInZhbHVlIjogMC4wNjI1MDY3NTc2NzY2MDE0MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzQ1LjU1ODIxMzcsICJzdGVwIjogNTY1LCAidmFsdWUiOiAxLjkwOTQxMzA0NDM0MzExMTJlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NDYuNTQ2NDgwNywgInN0ZXAiOiA2MTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0Ny41NDc1ODEsICJzdGVwIjogNjY1LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc0OC41NTUxMjE3LCAic3RlcCI6IDcxNSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NDkuNTI5NjA5NywgInN0ZXAiOiA3NjUsICJ2YWx1ZSI6IDEuMTk3MzQ5NzE5MzcyOTA4OGUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc1MC41MDYzMjg4LCAic3RlcCI6IDgxNSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NTEuNjE0MTg1OCwgInN0ZXAiOiA4NjUsICJ2YWx1ZSI6IDUuNTc3ODg5NzEyNjE1NzQ3ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzUzLjIyMDE0MzgsICJzdGVwIjogOTE1LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3NTQuODM4MjkxNiwgInN0ZXAiOiA5NjUsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NzU2LjU0MzU5OSwgInN0ZXAiOiAxMDE1LCAidmFsdWUiOiA0LjQyMTMxOTg3NzU5NTAxMDVlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODYuMzQ2NjA4MiwgInN0ZXAiOiAxMDMwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODcuMzQ2NzIyNCwgInN0ZXAiOiAxMDgwLCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3ODguMzQyNzAyMiwgInN0ZXAiOiAxMTMwLCAidmFsdWUiOiAyLjU3NDc2MzA0ODE2ODAzM2UtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc4OS4zMTg3MDIsICJzdGVwIjogMTE4MCwgInZhbHVlIjogOC4xMDQyMDU3ODMwMTc0NmUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc5MC4zMTg3NiwgInN0ZXAiOiAxMjMwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3OTEuNDc1MDE4LCAic3RlcCI6IDEyODAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDc5My4xMDI1Njk2LCAic3RlcCI6IDEzMzAsICJ2YWx1ZSI6IDcuMzU2MzY1MTAzMzg5ODI1ZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Nzk0Ljc5NzA5NDMsICJzdGVwIjogMTM4MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3OTYuNTA0NTQ2MiwgInN0ZXAiOiAxNDMwLCAidmFsdWUiOiAyLjgyNzcyODAxNDg1MDE3ODJlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ3OTguMzAzMDEyLCAic3RlcCI6IDE0ODAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODAwLjA0NjMwNzYsICJzdGVwIjogMTUzMCwgInZhbHVlIjogMi43NDkyMjQ0OTMwNzg4ODEzZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODI4LjA4MTAxOTQsICJzdGVwIjogMTU0NSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4MjkuMjY1NzI2OCwgInN0ZXAiOiAxNTk1LCAidmFsdWUiOiA5Ljc2MDI3NTkyMDgxMTUyM2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzMC4yOTQ1NjIzLCAic3RlcCI6IDE2NDUsICJ2YWx1ZSI6IDIuNjIzMTg2MzkwMzI2OTkyNWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzMS4zMzE4ODY1LCAic3RlcCI6IDE2OTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzMi44NTQ1MjUzLCAic3RlcCI6IDE3NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzNC41NTA2NjA4LCAic3RlcCI6IDE3OTUsICJ2YWx1ZSI6IDEuMzMyNzg1MDY1MDM3MDA2NmUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzNi4yNTM2Mzg1LCAic3RlcCI6IDE4NDUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDgzOC4wMjkxOTI0LCAic3RlcCI6IDE4OTUsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODM5Ljc5ODY4NTYsICJzdGVwIjogMTk0NSwgInZhbHVlIjogMS4yMzAwMDAzNjU1MDk2MTFlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NDEuNTUyMDUsICJzdGVwIjogMTk5NSwgInZhbHVlIjogMS4zMDM3Mzk3MjkyOTMyNTI1ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODQyLjg0MDEyODIsICJzdGVwIjogMjA0NSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ4NjkuOTQ3MzY4LCAic3RlcCI6IDIwNjAsICJ2YWx1ZSI6IDQuODI0NTQxODA3NzI0MTgxZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODcxLjEyNDM4ODcsICJzdGVwIjogMjExMCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODcyLjI2MDgwMTMsICJzdGVwIjogMjE2MCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODczLjg5MTg5NjIsICJzdGVwIjogMjIxMCwgInZhbHVlIjogMi40NDk0MDYzMDI3ODQ2NzM1ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODc1LjU3NzQ4MiwgInN0ZXAiOiAyMjYwLCAidmFsdWUiOiA0LjYzNTQ3MjkzMDY2MDM1OGUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg3Ny4zMDQ5Mzk1LCAic3RlcCI6IDIzMTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg3OS4wMjAxMTMsICJzdGVwIjogMjM2MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0ODgwLjg1MDI3NCwgInN0ZXAiOiAyNDEwLCAidmFsdWUiOiA1LjU5MDU3MDk3NjYwMDA3MmUtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg4Mi41MTYyMDI3LCAic3RlcCI6IDI0NjAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg4My42NTgyNDM3LCAic3RlcCI6IDI1MTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDg4NC43MTEyNDEsICJzdGVwIjogMjU2MCwgInZhbHVlIjogMy4yNzU5NTE4MDQyNzQwMjZlLTE2fV0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29wZW5GTF80MzIyMjlfQlMxNl9sZGF0YTQxMTI3IjogW3sid2FsbFRpbWUiOiAxNjk1Mjg2MzQwLjc1OTAxMDMsICJzdGVwIjogMCwgInZhbHVlIjogMC40MTU4Nzg5MjE3NDcyMDc2NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQxLjUxMzcwNTMsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMDYyNTM0OTUwNjczNTgwMTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM0Mi4zNjYxOTksICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjA2MjUwNTYxMDI4NzE4OTQ4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNDMuMTYwNzYzNywgInN0ZXAiOiAxNTAsICJ2YWx1ZSI6IDIuODk1NzY0NzM3MzMxNzc0ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQzLjk2NTIzMTIsICJzdGVwIjogMjAwLCAidmFsdWUiOiAwLjA2MjUwMDk5MDkyNzIxOTM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNDQuODA3ODg2OCwgInN0ZXAiOiAyNTAsICJ2YWx1ZSI6IDAuMDYyNTE5ODg1NTk5NjEzMTl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM0NS43MjAzODY1LCAic3RlcCI6IDMwMCwgInZhbHVlIjogMC4wNjI1MDE4MzI4NDI4MjY4NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQ2Ljg1NDI5NjIsICJzdGVwIjogMzUwLCAidmFsdWUiOiAyLjM2MDY2OTQ0MTI1OTIzMzNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNDguMTM4MDM1LCAic3RlcCI6IDQwMCwgInZhbHVlIjogMC4wNjI1MDE4NzAwOTU3Mjk4M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzQ5LjM1NDYwMDIsICJzdGVwIjogNDUwLCAidmFsdWUiOiAwLjA2MjUwMTYyNDIyNjU3MDEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNTAuNjIxMTk3NSwgInN0ZXAiOiA1MDAsICJ2YWx1ZSI6IDEuMDM2Njg0NjI1NDMyODI2NmUtMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM1MS45NDQ4MzIsICJzdGVwIjogNTUwLCAidmFsdWUiOiAwLjA2MjUwMTUzNDgxOTYwMjk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNTMuMjMxOTE0LCAic3RlcCI6IDYwMCwgInZhbHVlIjogMS42ODkxNDQ1OTY2MzkzODAzZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU0LjYyMzAwMzcsICJzdGVwIjogNjUwLCAidmFsdWUiOiAxLjQ5ODgwNTg4NjUxMjg1NWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM1NS43OTA4MDYzLCAic3RlcCI6IDcwMCwgInZhbHVlIjogMC4wNjI1MDkwMDc3NTE5NDE2OH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU2LjYzNTA5NTgsICJzdGVwIjogNzUwLCAidmFsdWUiOiAxLjU5NDgzNDMxNjE2NTM2MWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM1Ny40MDMyNjUyLCAic3RlcCI6IDgwMCwgInZhbHVlIjogNC41Mzk0Nzc2ODYxOTQwMDQ1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU4LjE1NjA4MiwgInN0ZXAiOiA4NTAsICJ2YWx1ZSI6IDkuODM3ODk4Njg3NjkyMzU5ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2MzU4LjkxMjIzNjUsICJzdGVwIjogOTAwLCAidmFsdWUiOiAyLjYwMzkwMjA4OTUwNDExNzZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODYzNTkuNzc5NjkxMiwgInN0ZXAiOiA5NTAsICJ2YWx1ZSI6IDEuNDAxMTQ4MzUyODk3NTA3N2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjM2MC42NTMzOTMzLCAic3RlcCI6IDEwMDAsICJ2YWx1ZSI6IDEuNTEyNDU2ODMzNTUyMjc4MWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQwMi4yMjUzODgzLCAic3RlcCI6IDEwMjksICJ2YWx1ZSI6IDQuOTAxMjI1NDUyMTU4NTQyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDAzLjU4NTI2NjQsICJzdGVwIjogMTA3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MDQuNjkwNjI2LCAic3RlcCI6IDExMjksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDA1LjQ2ODczNzgsICJzdGVwIjogMTE3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MDYuMjA5NzgyOCwgInN0ZXAiOiAxMjI5LCAidmFsdWUiOiA1LjMzMjkxOTUyMjY0OTI0OWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQwNy4zNTkxMjkyLCAic3RlcCI6IDEyNzksICJ2YWx1ZSI6IDcuNjkzNzkyOTc2ODQ2OTY5ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDA4LjU1MjczNTMsICJzdGVwIjogMTMyOSwgInZhbHVlIjogMi4zODM1NjQyNjYxMDA3NTcyZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDA5LjYzNjc5NSwgInN0ZXAiOiAxMzc5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDEwLjg1MzQ1NzUsICJzdGVwIjogMTQyOSwgInZhbHVlIjogNS4xNjM2ODMwMjI4MzUyMDhlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTIuMDg2ODc2NiwgInN0ZXAiOiAxNDc5LCAidmFsdWUiOiAxLjc0NzI1MDQzNDYxMzg3ODRlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTMuNDQyMDMwMiwgInN0ZXAiOiAxNTI5LCAidmFsdWUiOiAyLjA1MzE4NDQ0NTM3NzQ5ODNlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTQuODY1MDM2NSwgInN0ZXAiOiAxNTc5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQxNi4wNzQ4MzI0LCAic3RlcCI6IDE2MjksICJ2YWx1ZSI6IDIuOTM5MDQ0MTQ2OTQzNDU5ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDE3LjAzMTE4NTIsICJzdGVwIjogMTY3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTcuODE3NzYyNCwgInN0ZXAiOiAxNzI5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDE4LjYwMDIzNTcsICJzdGVwIjogMTc3OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MTkuNDYyNjAwNywgInN0ZXAiOiAxODI5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDIwLjM0OTUxOTMsICJzdGVwIjogMTg3OSwgInZhbHVlIjogMC4xODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MjEuMTkyNDYyNywgInN0ZXAiOiAxOTI5LCAidmFsdWUiOiAxLjY0Njg2Mzk2MDMwNzA1NDVlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0MjIuMDczOTc5MSwgInN0ZXAiOiAxOTc5LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDIyLjk2OTY5OCwgInN0ZXAiOiAyMDI5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ2NC4wMjgzNTQsICJzdGVwIjogMjA1OCwgInZhbHVlIjogMS42MzgxNDc5NTU3MDQ0MjRlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NjQuODUyMTM3OCwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiA2LjUzNDY3NjkwNjU3NjY3OGUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ2NS42NjcyMzg1LCAic3RlcCI6IDIxNTgsICJ2YWx1ZSI6IDcuNTc0ODM2NDgyODg2MjA1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDY2LjQzMDI2MzgsICJzdGVwIjogMjIwOCwgInZhbHVlIjogMy4zNzg1MzY1OTk3OTA3MDQ2ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDY3LjU0NTI5NSwgInN0ZXAiOiAyMjU4LCAidmFsdWUiOiAxLjQ1MTY4MjU0NjIxMjMzNmUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ2OC44MjM0Mjc3LCAic3RlcCI6IDIzMDgsICJ2YWx1ZSI6IDYuMjQ0OTEzNzExNTg0NTZlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NzAuMDI1MzY0NCwgInN0ZXAiOiAyMzU4LCAidmFsdWUiOiA1LjQyNTM2ODQyMzQyNDY3MmUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3MS4yNDA1MzcyLCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDEuMTYxMTQ5NjQ4NjU0MTAyOWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3Mi41OTQzMTEyLCAic3RlcCI6IDI0NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDczLjk5MjgwNTUsICJzdGVwIjogMjUwOCwgInZhbHVlIjogOC4yMjExMzU5MDMxMTc4NDllLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NzUuMzQ0MDAzLCAic3RlcCI6IDI1NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDc2LjYwNDkzMywgInN0ZXAiOiAyNjA4LCAidmFsdWUiOiAzLjYyMjUyMTg5OTE0ODQ2NGUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3Ny4zNjExNDI5LCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDkuNzYwMjgxMDMwMTE0MjYxZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDc4LjE2NTY2NywgInN0ZXAiOiAyNzA4LCAidmFsdWUiOiA3LjcwNTUwOTU0MzE0OTIwNWUtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ3OS4wMTAyODQyLCAic3RlcCI6IDI3NTgsICJ2YWx1ZSI6IDUuOTE1OTI4MjQzMDQxMjdlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0NzkuODczMjgzNiwgInN0ZXAiOiAyODA4LCAidmFsdWUiOiA2LjMzNTU2MDM1OTIyOTkzMmUtMTl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ4MC42MzIwODI1LCAic3RlcCI6IDI4NTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDgxLjUwNjg3NCwgInN0ZXAiOiAyOTA4LCAidmFsdWUiOiA4LjcyMjc1NjgxMDQ3Mjg2OGUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NjQ4Mi4zMjEwOTMzLCAic3RlcCI6IDI5NTgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY0ODMuMDgxNzMyNSwgInN0ZXAiOiAzMDA4LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NDgzLjgzNjM2MzYsICJzdGVwIjogMzA1OCwgInZhbHVlIjogMy42OTE1OTMyMDA4MzIzMTZlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjIuOTk4NDkzLCAic3RlcCI6IDMwODcsICJ2YWx1ZSI6IDEuNDAxMjIzNTY1MzQ2NjIzN2UtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUyMy45MTIyNjEsICJzdGVwIjogMzEzNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjQuNzkwNDc1NiwgInN0ZXAiOiAzMTg3LCAidmFsdWUiOiAxLjg4NjM1NTI3NzU1Mjg4MjdlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjUuNjk5NzMxLCAic3RlcCI6IDMyMzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTI2Ljg2NTg5MzQsICJzdGVwIjogMzI4NywgInZhbHVlIjogMy45OTc3NDYxNDQ1NDA2MjZlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MjguMDA2NTUyLCAic3RlcCI6IDMzMzcsICJ2YWx1ZSI6IDQuMjI4MDE3ODk1Nzc5MDQzNWUtMTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUyOS4yOTEyNjkzLCAic3RlcCI6IDMzODcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTMwLjQ4ODE1MzcsICJzdGVwIjogMzQzNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzEuODY3MTU2MywgInN0ZXAiOiAzNDg3LCAidmFsdWUiOiAxLjgyNTcwODYzODA4OTYxOGUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjUzMy4xMTAwODA3LCAic3RlcCI6IDM1MzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTM0LjM1NzQ1MjksICJzdGVwIjogMzU4NywgInZhbHVlIjogMi40NDE4NDE3Mjg4MTc0NTFlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzUuNzY0MDQ0LCAic3RlcCI6IDM2MzcsICJ2YWx1ZSI6IDUuMzA5Njg5NTU3MzM0NjI2ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTM2Ljg4MDUxMDYsICJzdGVwIjogMzY4NywgInZhbHVlIjogMS45NzgyMjE5NTYzODMwMjJlLTE3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzcuODE1NTA4MSwgInN0ZXAiOiAzNzM3LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTM4LjYxNzUyMjIsICJzdGVwIjogMzc4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1MzkuNDExODQsICJzdGVwIjogMzgzNywgInZhbHVlIjogMS43NjIwNTY4OTAzNzE1MjQ1ZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTQwLjI5NjE5NDMsICJzdGVwIjogMzg4NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NDEuMTQ5NDE1LCAic3RlcCI6IDM5MzcsICJ2YWx1ZSI6IDcuMTg3MzQ1MDc4NjAwMjY4ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTQyLjA1MDU0MDQsICJzdGVwIjogMzk4NywgInZhbHVlIjogMS4zNzEzNDUyNTc0MDI1Mzk4ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTQyLjk0ODQ0NzcsICJzdGVwIjogNDAzNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1NDMuNzYzMDkwNiwgInN0ZXAiOiA0MDg3LCAidmFsdWUiOiA1LjAxMDE1MDY0OTIxOTEyN2UtMTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU4Mi43NDM0NDIsICJzdGVwIjogNDExNiwgInZhbHVlIjogMi4wNDIyNjQ3Mjc4NjE0OTA1ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTgzLjYxNjA1MjQsICJzdGVwIjogNDE2NiwgInZhbHVlIjogMS45MzE4Mzg4NDI0NzI5NjAzZS0xNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTg0LjQ2ODY0NjMsICJzdGVwIjogNDIxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1ODUuMzYxNjY0MywgInN0ZXAiOiA0MjY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU4Ni40NTUwMTU3LCAic3RlcCI6IDQzMTYsICJ2YWx1ZSI6IDUuMzMzMjY0NjAxODM5MDgxZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTg3LjYyNjI5NiwgInN0ZXAiOiA0MzY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU4OC45MDkxMTEzLCAic3RlcCI6IDQ0MTYsICJ2YWx1ZSI6IDYuODc5NzQ3MTgxMzg3MjM3ZS0xN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTkwLjA4NTI1OTcsICJzdGVwIjogNDQ2NiwgInZhbHVlIjogNC41NTM3NzQ4MjQxMjg0OTFlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTEuMzk0Njk3LCAic3RlcCI6IDQ1MTYsICJ2YWx1ZSI6IDQuNTkwODY1MzgwNDQ5MjJlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTIuNzk3NTQxLCAic3RlcCI6IDQ1NjYsICJ2YWx1ZSI6IDkuMDkyOTUzNzQ1OTE2NDg2ZS0xNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NTk0LjE2NjIxMjMsICJzdGVwIjogNDYxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTUuNTUzODQ5NSwgInN0ZXAiOiA0NjY2LCAidmFsdWUiOiAxLjk1Njc2MzEwNDU4MzI3MzNlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTYuNjUyOTAzMywgInN0ZXAiOiA0NzE2LCAidmFsdWUiOiAxLjE0NjA2NzczODQxNzI4NDRlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTcuNTgyNjU4OCwgInN0ZXAiOiA0NzY2LCAidmFsdWUiOiA5LjE5ODIyMjE1MzU2ODMwM2UtMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjU5OC41NDQyNjcsICJzdGVwIjogNDgxNiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY1OTkuMzI4NjU5LCAic3RlcCI6IDQ4NjYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NjAwLjI3OTk0OTQsICJzdGVwIjogNDkxNiwgInZhbHVlIjogMy40MDA5ODI4NjcwMTM4MjVlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY2MDEuMjMyMDQ4NywgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjYwMi4wNjcwNzQsICJzdGVwIjogNTAxNiwgInZhbHVlIjogNy4yMDA1NzI4NzQ1MDAxODNlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY2MDIuODE3NzU5LCAic3RlcCI6IDUwNjYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NjAzLjYxMjg3MzMsICJzdGVwIjogNTExNiwgInZhbHVlIjogOS42MDYwMDA1NDMyNzcyMzFlLTE2fV19fV0=", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22Original/train/loss%22%7D%5D": { + "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogIk9yaWdpbmFsL3RyYWluL2xvc3MiLCAicnVuVG9TZXJpZXMiOiB7ImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfOTcwMTExX0JTMTI4X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODY3MjIuNDgzNjE0LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNDI4NTQ3NzM5OTgyNjA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY3MjUuMTgxNzc3LCAic3RlcCI6IDUwLCAidmFsdWUiOiAwLjA3ODEzMDI2NzU2MDQ4MjAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODY3MjguODY1NTM0MywgInN0ZXAiOiAxMDAsICJ2YWx1ZSI6IDAuMDM5MDY5MzYxOTg0NzI5Nzd9LCB7IndhbGxUaW1lIjogMTY5NTI4NjczMy4wNzE1NTY4LCAic3RlcCI6IDE1MCwgInZhbHVlIjogMC4wNDY4ODA2NjYxNjY1NDM5Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2NzM3LjY5ODIxOTgsICJzdGVwIjogMjAwLCAidmFsdWUiOiAwLjAzOTA2NjQ1NjI1ODI5Njk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY3NDIuNTEwNzQ0LCAic3RlcCI6IDI1MCwgInZhbHVlIjogMC4wMzEyNTQ0NjY2MjMwNjc4NTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4Njc5MS45NTQxNjkzLCAic3RlcCI6IDI1OCwgInZhbHVlIjogMC4wMjM0NDEyNzc0NDQzNjI2NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2Nzk1Ljk5MDEyODMsICJzdGVwIjogMzA4LCAidmFsdWUiOiAwLjAzOTA2NDgyMDg1NTg1NTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY4MDAuMjk2MjMyMiwgInN0ZXAiOiAzNTgsICJ2YWx1ZSI6IDAuMDQ2ODc4MjQ4NDUzMTQwMjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NjgwMy40MDEzNzI0LCAic3RlcCI6IDQwOCwgInZhbHVlIjogMC4wMjM0Mzg1NTIzOTQ1MDkzMTV9LCB7IndhbGxUaW1lIjogMTY5NTI4NjgwNi4yNjc3MTQsICJzdGVwIjogNDU4LCAidmFsdWUiOiAwLjAyMzQzOTI4MDY4ODc2MjY2NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODA4Ljc2MDQwNzQsICJzdGVwIjogNTA4LCAidmFsdWUiOiAwLjAzOTA2MzQ3OTc1MTM0ODQ5NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODYwLjE0MzQzOCwgInN0ZXAiOiA1MTYsICJ2YWx1ZSI6IDAuMDYyNTAzMjcwODA0ODgyMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4Njg2My4wMjAzODgxLCAic3RlcCI6IDU2NiwgInZhbHVlIjogMC4wMTU2MjY0NTQ3MjU4NjE1NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODY1LjU3NTY4MjYsICJzdGVwIjogNjE2LCAidmFsdWUiOiAwLjAyMzQzODM4MTAzMTE1NTU4Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2ODY4LjI3NzAwMDQsICJzdGVwIjogNjY2LCAidmFsdWUiOiAwLjA3MDMxMzMxOTU2Mzg2NTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY4NzEuNjIzMjQ3LCAic3RlcCI6IDcxNiwgInZhbHVlIjogMC4wMzkwNjMxNDA3NDk5MzEzMzV9LCB7IndhbGxUaW1lIjogMTY5NTI4Njg3NS43NjQzMDg3LCAic3RlcCI6IDc2NiwgInZhbHVlIjogMC4wMjM0MzgyMzAxNTY4OTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY5MjQuMTE0NTIwOCwgInN0ZXAiOiA3NzQsICJ2YWx1ZSI6IDAuMDc4MTI1MjYwNzcwMzIwODl9LCB7IndhbGxUaW1lIjogMTY5NTI4NjkyNi43MDM3NTc4LCAic3RlcCI6IDgyNCwgInZhbHVlIjogMy43MzkxNDE5MDI3Njk5MTZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODY5MjkuNTQyOTIyLCAic3RlcCI6IDg3NCwgInZhbHVlIjogMC4wNjI1MDIxMDg1MTQzMDg5M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTMzLjM2NzIxNTQsICJzdGVwIjogOTI0LCAidmFsdWUiOiAwLjAyMzQzODExMjgxMDI1NDA5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTM3LjYxMzkxMzUsICJzdGVwIjogOTc0LCAidmFsdWUiOiAwLjAyMzQzODU4NTkyMjEyMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTQxLjUwODY5NjYsICJzdGVwIjogMTAyNCwgInZhbHVlIjogMC4wNzgxMjc4NTM1NzIzNjg2Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTg5LjEyNTA0MzYsICJzdGVwIjogMTAzMiwgInZhbHVlIjogMC4wNDY4NzU4OTc3OTQ5NjE5M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTkyLjQ1MzEwMTIsICJzdGVwIjogMTA4MiwgInZhbHVlIjogMC4wMzEyNTExOTIwOTI4OTU1MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg2OTk2LjU4MTI3NiwgInN0ZXAiOiAxMTMyLCAidmFsdWUiOiAwLjAzMTI1MDI2MDc3MDMyMDg5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODcwMDAuNTg3MjcyNCwgInN0ZXAiOiAxMTgyLCAidmFsdWUiOiAwLjAyMzQzNzYxMTc1ODcwODk1NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3MDAzLjI3MjQ5NDYsICJzdGVwIjogMTIzMiwgInZhbHVlIjogMC4wNDY4NzUyOTgwMjMyMjM4OH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg3MDA1Ljg4ODI3MiwgInN0ZXAiOiAxMjgyLCAidmFsdWUiOiAwLjA4NTkzNzY5MzcxNTA5NTUyfV0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzExOTgzMjhfQlMzMl9sZGF0YTQxMTI3IjogW3sid2FsbFRpbWUiOiAxNjk1MjgwNzA1LjE2NjA4NiwgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ5ODQzOTY2OTYwOTA2OTh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDcwNi4yMDc1ODUsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDAuMDYyNTU2ODkyNjMzNDM4MTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MDcwNy4zNjAxNjk0LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMC4wNjI1MjAzOTIyMzkwOTM3OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzA4LjM5MDAyNTQsICJzdGVwIjogMTUwLCAidmFsdWUiOiAwLjAzMTI1NjM1NTM0NTI0OTE3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzA5LjU5ODYyODgsICJzdGVwIjogMjAwLCAidmFsdWUiOiAwLjAzMTMxOTQ2MTc2MjkwNTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTAuNzY2NjkxLCAic3RlcCI6IDI1MCwgInZhbHVlIjogNC4zNjEyODc5MzgwODE2NTk0ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzEyLjQ0Mjk4MDgsICJzdGVwIjogMzAwLCAidmFsdWUiOiAwLjA2MjUxMTQzNjY0MTIxNjI4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTQuMTQ4ODU5LCAic3RlcCI6IDM1MCwgInZhbHVlIjogOS43MjA2OTc1NjI0NDMwOTJlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTUuOTE5MjU5NSwgInN0ZXAiOiA0MDAsICJ2YWx1ZSI6IDAuMDMxMjUxNDY3NzY0Mzc3NTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MTcuNzEzMzEwNSwgInN0ZXAiOiA0NTAsICJ2YWx1ZSI6IDguNTM0Mjg2MjgwMzM3MjU1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzE5LjQ3MTE5LCAic3RlcCI6IDUwMCwgInZhbHVlIjogMC4wMzEyNTU0MDkxMjE1MTMzN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzIxLjEzOTc5MjcsICJzdGVwIjogNTUwLCAidmFsdWUiOiAxLjMwODU3NDM4MzA3NDMwMTNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MjIuMzMzNjY5NywgInN0ZXAiOiA2MDAsICJ2YWx1ZSI6IDAuMDMxMjk0MzM4NDA1MTMyMjk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MjMuNDQ3ODk1LCAic3RlcCI6IDY1MCwgInZhbHVlIjogMC4wMzEyNTAzMzE1NTA4MzY1Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzI0LjU2MTY1OTMsICJzdGVwIjogNzAwLCAidmFsdWUiOiAwLjAzMTI1MDM4MzcwNDkwMDc0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MjUuNzE1ODM5LCAic3RlcCI6IDc1MCwgInZhbHVlIjogMC4wMzEyNTA1MTAzNjQ3NzA4OX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzI3LjQyMDY2NTMsICJzdGVwIjogODAwLCAidmFsdWUiOiAwLjAzMTI1MjY0ODY4MTQwMjIwNn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzI5LjA4ODU2OTYsICJzdGVwIjogODUwLCAidmFsdWUiOiAxLjY2NDE2NDMwMTQ3MzY0NzRlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MzAuMTAwNjczNywgInN0ZXAiOiA5MDAsICJ2YWx1ZSI6IDQuMzY0OTg3OTQ0NDI3NDEyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzMxLjQxNzY1MTcsICJzdGVwIjogOTUwLCAidmFsdWUiOiAwLjA5Mzc2MjQwNTIxNjY5Mzg4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3MzMuMTMwMzE3LCAic3RlcCI6IDEwMDAsICJ2YWx1ZSI6IDAuMDYyNTAxNTQ5NzIwNzY0MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MDc4OS41OTQzMTUsICJzdGVwIjogMTAyOSwgInZhbHVlIjogMC4xMjUwMDA2MTA5NDc2MDg5NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzkwLjY2MDQsICJzdGVwIjogMTA3OSwgInZhbHVlIjogMC4wNjI1MDAzNjUwNzg0NDkyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzkxLjgxMzcwMTksICJzdGVwIjogMTEyOSwgInZhbHVlIjogNS4xNzQ3NzM2MDUxNzY1OTdlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3OTIuOTAzMTA0OCwgInN0ZXAiOiAxMTc5LCAidmFsdWUiOiA5LjI2NzkwODA0MTAxMDc0MmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDc5My45NDI2MDQsICJzdGVwIjogMTIyOSwgInZhbHVlIjogMC4wNjI1MDA0MDIzMzEzNTIyM30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzk1LjAxNTcwNzcsICJzdGVwIjogMTI3OSwgInZhbHVlIjogMC4xNTYyNTA0OTE3MzgzMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA3OTYuMDY2NDMxNSwgInN0ZXAiOiAxMzI5LCAidmFsdWUiOiA4Ljg2NTY3MDIyNDYyMjU5ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwNzk3LjYwMzc0NTIsICJzdGVwIjogMTM3OSwgInZhbHVlIjogMC4wMzEyNTA1OTYwNDY0NDc3NTR9LCB7IndhbGxUaW1lIjogMTY5NTI4MDc5OS4yMDkwNjQ1LCAic3RlcCI6IDE0MjksICJ2YWx1ZSI6IDQuNzAwMjc3OTk3OTI2NjA1ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODAwLjk4NDIwMjQsICJzdGVwIjogMTQ3OSwgInZhbHVlIjogMC4wMzEyNTAxNDUyODYzMjE2NH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODAyLjgxODUwOTMsICJzdGVwIjogMTUyOSwgInZhbHVlIjogMC4wMzEyNTAwOTY4NTc1NDc3Nn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODA0LjY0MTg5NDgsICJzdGVwIjogMTU3OSwgInZhbHVlIjogMC4wNjI1MDAxNzg4MTM5MzQzM30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODA1Ljk4MTk5MjIsICJzdGVwIjogMTYyOSwgInZhbHVlIjogMS4yMTk1Njc3MDcyNjY4MzMyZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODA3LjA4MzA4MjIsICJzdGVwIjogMTY3OSwgInZhbHVlIjogOC43NzE3ODIyMzM5MDcyODhlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MDguMTQ5MDc1NSwgInN0ZXAiOiAxNzI5LCAidmFsdWUiOiA1LjIxMzcyMzg1MjY0ODRlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MDkuMzAxMzQyNywgInN0ZXAiOiAxNzc5LCAidmFsdWUiOiAwLjA2MjUwMDAyMjM1MTc0MTc5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MTAuNDc3MjM3LCAic3RlcCI6IDE4MjksICJ2YWx1ZSI6IDAuMDMxMjUwMTU2NDYyMTkyNTM1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MTEuNTUxODM5NiwgInN0ZXAiOiAxODc5LCAidmFsdWUiOiAwLjAzMTI1MDAxODYyNjQ1MTQ5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4MTIuNjk0MjU0LCAic3RlcCI6IDE5MjksICJ2YWx1ZSI6IDUuNzY2MTMwNDcwODc0NDg2ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODEzLjg2NzU1NjMsICJzdGVwIjogMTk3OSwgInZhbHVlIjogMC4wOTM3NTA5MzEzMjI1NzQ2Mn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODE0Ljg5NTI1OTEsICJzdGVwIjogMjAyOSwgInZhbHVlIjogMC4wMzEyNTAwNTIxNTQwNjQxOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODY0LjUxODI0ODYsICJzdGVwIjogMjA1OCwgInZhbHVlIjogMS45NzMwMTA3NjgwOTcwODMyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwODY1LjYyMDQzMSwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiAwLjAzMTI1MDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NjYuNzQ1OTczMywgInN0ZXAiOiAyMTU4LCAidmFsdWUiOiAyLjM4MDQyNTkzOTkxODQ5NTdlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NjcuODIzNjE4NywgInN0ZXAiOiAyMjA4LCAidmFsdWUiOiA3LjExOTAwMzI3MTMyNzUyOWUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg2OC44MzU4OTE1LCAic3RlcCI6IDIyNTgsICJ2YWx1ZSI6IDIuNTAzNTA2OTEyODg3NTg3NWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg2OS44NzE1Njk0LCAic3RlcCI6IDIzMDgsICJ2YWx1ZSI6IDIuMDM2NjIzMTAxMjc1ODM2MmUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg3MC45Mjk0MjEsICJzdGVwIjogMjM1OCwgInZhbHVlIjogMC4wMzEyNTAzNTAxNzcyODgwNTV9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg3MS45ODQ5OTg3LCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDAuMDMxMjUwMDI5ODAyMzIyMzl9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg3My42NDU2NzA3LCAic3RlcCI6IDI0NTgsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODc1LjIxODAyODUsICJzdGVwIjogMjUwOCwgInZhbHVlIjogNC4wNjAzODI5NjMxODkxMTNlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NzYuOTYxNzA2MiwgInN0ZXAiOiAyNTU4LCAidmFsdWUiOiAwLjAzMTI1MDA1MjE1NDA2NDE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4NzguNTcwODUzMiwgInN0ZXAiOiAyNjA4LCAidmFsdWUiOiAwLjAzMTI1MDA3MDc4MDUxNTY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4ODAuMTczNjIzLCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDAuMDMxMjUwMDQwOTc4MTkzMjh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4MS42MTEyODk3LCAic3RlcCI6IDI3MDgsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODgyLjcyNjE3MDMsICJzdGVwIjogMjc1OCwgInZhbHVlIjogNC44Njg2NTE2MTUxOTc0NWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4My44NDQ2NDMsICJzdGVwIjogMjgwOCwgInZhbHVlIjogMC4wNjI1MDAwNDQ3MDM0ODM1OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwODg0Ljk4NDI3MDMsICJzdGVwIjogMjg1OCwgInZhbHVlIjogMC4wMzEyNTAyNDIxNDM4Njk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA4ODYuMTM2NDY0LCAic3RlcCI6IDI5MDgsICJ2YWx1ZSI6IDAuMDMxMjUwMDQ0NzAzNDgzNTh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4Ny4zMDg0MDQ0LCAic3RlcCI6IDI5NTgsICJ2YWx1ZSI6IDAuMDYyNTAxMzQxMTA0NTA3NDV9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4OC4zODA1NDgyLCAic3RlcCI6IDMwMDgsICJ2YWx1ZSI6IDMuMzE0MDY4NjYzOTM5OTA2NGUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDg4OS40MDY5NjE0LCAic3RlcCI6IDMwNTgsICJ2YWx1ZSI6IDAuMDMxMjUwMDM3MjUyOTAyOTg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5MzkuMTA3NzkzLCAic3RlcCI6IDMwODcsICJ2YWx1ZSI6IDAuMDMxMjUyMTc1NTY5NTM0M30sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQwLjA5NjQxNiwgInN0ZXAiOiAzMTM3LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MDk0MS4wOTUwNzcsICJzdGVwIjogMzE4NywgInZhbHVlIjogMC4wMzEyNTAwMjk4MDIzMjIzOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQyLjIyMDE3MzgsICJzdGVwIjogMzIzNywgInZhbHVlIjogMC4wNjI1MDAxNTY0NjIxOTI1NH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQzLjI5NDQ3MTUsICJzdGVwIjogMzI4NywgInZhbHVlIjogMi40MDgwMDE3OTc5NTk5NjllLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NDQuMzE3NTIzNywgInN0ZXAiOiAzMzM3LCAidmFsdWUiOiA4LjIzMjY5NDE3MDgyODgzNmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4MDk0NS4zODAzNDYsICJzdGVwIjogMzM4NywgInZhbHVlIjogMy43MjUyOTM0MjQ4NDk5NTE0ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQ2LjM1OTc2NTgsICJzdGVwIjogMzQzNywgInZhbHVlIjogMC4wMzEyNTAwNDg0Mjg3NzM4OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTQ3LjM0MDUyMDEsICJzdGVwIjogMzQ4NywgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NDguNzUzMTExLCAic3RlcCI6IDM1MzcsICJ2YWx1ZSI6IDguNjcwNTk4NDYxNDM1NDc1ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTUwLjQzMDIzLCAic3RlcCI6IDM1ODcsICJ2YWx1ZSI6IDYuNDI4MjY2ODA3NzQ1MzMxZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTUyLjI1MjQ5OTgsICJzdGVwIjogMzYzNywgInZhbHVlIjogMC4wMzEyNTAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NTMuOTUzNzYzLCAic3RlcCI6IDM2ODcsICJ2YWx1ZSI6IDAuMDMxMjUwMDE0OTAxMTYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NTUuNzI2MDA3LCAic3RlcCI6IDM3MzcsICJ2YWx1ZSI6IDEuMzkxNDUxMDA3NzQ4NDAxZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTU3LjE5MzA2OCwgInN0ZXAiOiAzNzg3LCAidmFsdWUiOiAyLjM4ODgwNDcwOTU5NjU3MDNlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NTguMjk0NzMyLCAic3RlcCI6IDM4MzcsICJ2YWx1ZSI6IDkuNDc0OTkyMTY4NjM0MzQ0ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgwOTU5LjI5MTU1NTIsICJzdGVwIjogMzg4NywgInZhbHVlIjogMi42ODY1NzgyODQyODMzMTRlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NjAuMjk3MjQyLCAic3RlcCI6IDM5MzcsICJ2YWx1ZSI6IDIuMDA5OTU1Mjk1NTM0MzgyNWUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4MDk2MS40MDc2NiwgInN0ZXAiOiAzOTg3LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NjIuNTk3ODE3NCwgInN0ZXAiOiA0MDM3LCAidmFsdWUiOiAwLjAzMTI1MDExOTIwOTI4OTU1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODA5NjMuNzQyOTQ3MywgInN0ZXAiOiA0MDg3LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNC4yNzU0OTY3LCAic3RlcCI6IDQxMTYsICJ2YWx1ZSI6IDMuMDYzMTQ1MDcwOTI1MDg4NWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNS4zNDAzMDI3LCAic3RlcCI6IDQxNjYsICJ2YWx1ZSI6IDAuMDMxMjUwMTcxMzYzMzUzNzN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNi40MTcyOTc0LCAic3RlcCI6IDQyMTYsICJ2YWx1ZSI6IDAuMDYyNTAwMDY3MDU1MjI1Mzd9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAxNy41NDI4NDksICJzdGVwIjogNDI2NiwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMTguNTc3NzM2NiwgInN0ZXAiOiA0MzE2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMTkuNjIzODAwOCwgInN0ZXAiOiA0MzY2LCAidmFsdWUiOiA0Ljc0NDQ5OTAxNTg4NTE0ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDIwLjY2ODAxNDMsICJzdGVwIjogNDQxNiwgInZhbHVlIjogMC4wMzEyNTAwMjYwNzcwMzIwOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDIxLjg1MzIyMjgsICJzdGVwIjogNDQ2NiwgInZhbHVlIjogMS43NDc1MjQwODA5OTcyMDkyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDIyLjk1OTY0NDMsICJzdGVwIjogNDUxNiwgInZhbHVlIjogMC4wMzEyNTAwNDA5NzgxOTMyOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDI0LjY0MTUyOTYsICJzdGVwIjogNDU2NiwgInZhbHVlIjogMS42MjM5ODg1ODgwNTA5MDY0ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDI2LjM5OTc2MDUsICJzdGVwIjogNDYxNiwgInZhbHVlIjogMC4wMzEyNTAwMTExNzU4NzA4OTV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAyOC4xMTUzMTkzLCAic3RlcCI6IDQ2NjYsICJ2YWx1ZSI6IDQuODA1NTkzMjU2NjYyNjMyNWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAyOS44NTUyMTc1LCAic3RlcCI6IDQ3MTYsICJ2YWx1ZSI6IDIuMDY4MDM1NzQyNjUyNzk2MmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAzMS42MDM1MiwgInN0ZXAiOiA0NzY2LCAidmFsdWUiOiAwLjA5Mzc1MDQ3NjgzNzE1ODJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAzMy4wMjQ2NiwgInN0ZXAiOiA0ODE2LCAidmFsdWUiOiA3LjM3MzI5OTc0ODUzNjUxZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDM0LjA0NjExNzgsICJzdGVwIjogNDg2NiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDM1LjE3Nzc0NDQsICJzdGVwIjogNDkxNiwgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMzYuMTk1ODgxMSwgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAwLjA5Mzc1MDAyOTgwMjMyMjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMzcuMzQ2NTI5NywgInN0ZXAiOiA1MDE2LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTAzOC4zOTUwNjI0LCAic3RlcCI6IDUwNjYsICJ2YWx1ZSI6IDAuMDMxMjQ5OTkyNTQ5NDE5NDAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwMzkuNTI1MTc4MiwgInN0ZXAiOiA1MTE2LCAidmFsdWUiOiAwLjAzMTI1MDI4Njg0NzM1Mjk4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwODkuMjQzOTE3LCAic3RlcCI6IDUxNDUsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDkwLjM5MDc0NywgInN0ZXAiOiA1MTk1LCAidmFsdWUiOiAyLjgwMjExNzg3MTA3MDIwOWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTA5MS40MTIxNTYsICJzdGVwIjogNTI0NSwgInZhbHVlIjogOS4wMzE2Mjk4NDQwMDI5NjRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwOTIuNjQ0Mzc5OSwgInN0ZXAiOiA1Mjk1LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTA5NC4zMDU5NzU0LCAic3RlcCI6IDUzNDUsICJ2YWx1ZSI6IDguMTYzMDA4MDQ3MjkwNTMyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMDk2LjAyNTgyMzYsICJzdGVwIjogNTM5NSwgInZhbHVlIjogNy42ODk3NDk5NDc5MTQ0OTNlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwOTcuODEwNzMyMSwgInN0ZXAiOiA1NDQ1LCAidmFsdWUiOiAwLjA2MjUwMDAyOTgwMjMyMjM5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEwOTkuNTgxODc1LCAic3RlcCI6IDU0OTUsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTEwMS40NjAzOTIsICJzdGVwIjogNTU0NSwgInZhbHVlIjogOC42ODcwNjUyODkzMzY3MTVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExMDMuMzk4ODE3LCAic3RlcCI6IDU1OTUsICJ2YWx1ZSI6IDQuNzQxMDE4MTMzNjM2MDMyZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTA1LjIwNjY2NTgsICJzdGVwIjogNTY0NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTA3LjA5NDI0NjQsICJzdGVwIjogNTY5NSwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTA4LjkxMjA4MiwgInN0ZXAiOiA1NzQ1LCAidmFsdWUiOiAzLjM1MDg0MjI3MDMyMjExODZlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExMTAuNjk0NDM4MiwgInN0ZXAiOiA1Nzk1LCAidmFsdWUiOiAxLjE1NjA1ODM2MDE1MjIwMTJlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExMTEuODM3MjEsICJzdGVwIjogNTg0NSwgInZhbHVlIjogMS4yOTAwNTA0NjY0NTE0NzU2ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTEyLjk5OTQ5MzQsICJzdGVwIjogNTg5NSwgInZhbHVlIjogMC4wNjI1MDAyODMxMjIwNjI2OH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTE0LjE2Mjg5OTMsICJzdGVwIjogNTk0NSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTE1LjMzMzc5NzUsICJzdGVwIjogNTk5NSwgInZhbHVlIjogMy40OTU4MDU5NTU4MjIxMDY2ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTE2LjQ2NzU5ODcsICJzdGVwIjogNjA0NSwgInZhbHVlIjogMC4wMzEyNTAwODE5NTYzODY1NjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTExNy40OTYzNDQ2LCAic3RlcCI6IDYwOTUsICJ2YWx1ZSI6IDAuMDMxMjUwMDE4NjI2NDUxNDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTExOC41MTUzOTgsICJzdGVwIjogNjE0NSwgInZhbHVlIjogMy4yNDAxMTc5NTE3MTk0MTIzZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTY4LjY2NzI4MTYsICJzdGVwIjogNjE3NCwgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExNjkuNzU0Mjc1OCwgInN0ZXAiOiA2MjI0LCAidmFsdWUiOiAwLjA2MjUwMDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE3MC44NTUyMTIyLCAic3RlcCI6IDYyNzQsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTcxLjk5NDQyNDMsICJzdGVwIjogNjMyNCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTczLjAxODYzMDcsICJzdGVwIjogNjM3NCwgInZhbHVlIjogMC4wNjI1MDAwMjIzNTE3NDE3OX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTc0LjE0MDI2NywgInN0ZXAiOiA2NDI0LCAidmFsdWUiOiAwLjA2MjUwMDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE3NS4xODk3NjgsICJzdGVwIjogNjQ3NCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExNzYuMTk2MDEzMiwgInN0ZXAiOiA2NTI0LCAidmFsdWUiOiAxLjA2MjU3NTEzODk4ODEwODhlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExNzcuMjY3OTkyMywgInN0ZXAiOiA2NTc0LCAidmFsdWUiOiA5LjU5NjU2MzU0MzgyMzMyMmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE3OC45Mjg4NzM1LCAic3RlcCI6IDY2MjQsICJ2YWx1ZSI6IDQuMzQ3OTc1ODY4MjM1MjFlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODAuNjIzOTc1NSwgInN0ZXAiOiA2Njc0LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODIuMzk2ODAxNSwgInN0ZXAiOiA2NzI0LCAidmFsdWUiOiA5LjcxMjE4NDUyODgzMTcxM2UtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE4NC4xOTUxOTksICJzdGVwIjogNjc3NCwgInZhbHVlIjogNC44OTY1NDcwNTY3MDk3MjFlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODUuOTgxMzc0MywgInN0ZXAiOiA2ODI0LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODcuMjMyODEyNiwgInN0ZXAiOiA2ODc0LCAidmFsdWUiOiAwLjA2MjUwMDEwNDMwODEyODM2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODExODguMzAwNTI5NywgInN0ZXAiOiA2OTI0LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE4OS4zMzA3MDA5LCAic3RlcCI6IDY5NzQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTkwLjMzNzcsICJzdGVwIjogNzAyNCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTkxLjM5OTEwOTgsICJzdGVwIjogNzA3NCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMTkyLjQ2OTE1NywgInN0ZXAiOiA3MTI0LCAidmFsdWUiOiAxLjk0NDIyNTY2OTM0ODA0M2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTE5My41NjIxMzksICJzdGVwIjogNzE3NCwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDMuMzczOTkwMywgInN0ZXAiOiA3MjAzLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDQuNDY0ODg1MiwgInN0ZXAiOiA3MjUzLCAidmFsdWUiOiAxLjU0MTk3NTIxNDE4MDk3OTVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDUuNTMyNTc2OCwgInN0ZXAiOiA3MzAzLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDYuNjE3MDgxNCwgInN0ZXAiOiA3MzUzLCAidmFsdWUiOiAzLjYyMTg3ODgzODUxMTE3MmUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI0Ny42MjgxNzQsICJzdGVwIjogNzQwMywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNDguNzIxMzgsICJzdGVwIjogNzQ1MywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjQ5Ljg2MDIzMDQsICJzdGVwIjogNzUwMywgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNTEuMDE0MTI1OCwgInN0ZXAiOiA3NTUzLCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI1Mi4xNjgwMzM4LCAic3RlcCI6IDc2MDMsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjUzLjUzOTMwOTUsICJzdGVwIjogNzY1MywgInZhbHVlIjogMS4yMTg3MzgxMTA0MzExNjEyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjU1LjI5MDg3MDQsICJzdGVwIjogNzcwMywgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEyNTYuODY2Mjg5OSwgInN0ZXAiOiA3NzUzLCAidmFsdWUiOiA1Ljg5ODIyNjkwNjg4NjM1ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjU4LjQ3NjExMzMsICJzdGVwIjogNzgwMywgInZhbHVlIjogMi43NjE4Njg0MjI4NTE0MjEyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjYwLjIzNzY2MywgInN0ZXAiOiA3ODUzLCAidmFsdWUiOiAwLjAzMTI1MDA4NTY4MTY3Njg2NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjYxLjkwOTc5MDUsICJzdGVwIjogNzkwMywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjYyLjk4MzA1NzcsICJzdGVwIjogNzk1MywgInZhbHVlIjogMC4wMzEyNTAwMTg2MjY0NTE0OX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjY0LjAxMjk4MjgsICJzdGVwIjogODAwMywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMjY1LjA5NzYzLCAic3RlcCI6IDgwNTMsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI2Ni4xNzg1MDg4LCAic3RlcCI6IDgxMDMsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI2Ny4yMTU1OTAyLCAic3RlcCI6IDgxNTMsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTI2OC4zMTc4NDY4LCAic3RlcCI6IDgyMDMsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMTcuNTgwOTI0NywgInN0ZXAiOiA4MjMyLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMTguODIzNDMyNywgInN0ZXAiOiA4MjgyLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMxOS45NzY2NzgxLCAic3RlcCI6IDgzMzIsICJ2YWx1ZSI6IDIuMjcwNDM5NjY5NjA0OTRlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMjEuMTIxMjE4MiwgInN0ZXAiOiA4MzgyLCAidmFsdWUiOiAwLjAzMTI1MDAyNjA3NzAzMjA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMjIuMTUyMzY0LCAic3RlcCI6IDg0MzIsICJ2YWx1ZSI6IDEuNjQwNTQ2Njk4NDg5MjMxNGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMyMy4yODYyMDc0LCAic3RlcCI6IDg0ODIsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzI0LjMyMjUyMzQsICJzdGVwIjogODUzMiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzI1LjQxMzIyOTIsICJzdGVwIjogODU4MiwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMjYuNTY3ODMwNiwgInN0ZXAiOiA4NjMyLCAidmFsdWUiOiA1LjYzMDg0NDY3OTQxNjIxNGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMyNy43MzQzODUsICJzdGVwIjogODY4MiwgInZhbHVlIjogMC4xNTYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzI5LjEzNzc3NCwgInN0ZXAiOiA4NzMyLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTMzMC45MjI0NjEsICJzdGVwIjogODc4MiwgInZhbHVlIjogMS41NDMyMzk0OTQ1MjgwNTkyZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzMyLjYzMDgyMDMsICJzdGVwIjogODgzMiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM0LjM5MTgzMTksICJzdGVwIjogODg4MiwgInZhbHVlIjogMS4zNzcwMTI3MjYwNjcwNTA2ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM2LjExODA5MjMsICJzdGVwIjogODkzMiwgInZhbHVlIjogMS41Mzg3NTUzNDI3NjI4NzY0ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM3Ljc2NTU2MjgsICJzdGVwIjogODk4MiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzM4LjkwODczMDUsICJzdGVwIjogOTAzMiwgInZhbHVlIjogMS4yMTk0NzI2NjUwNzA0OThlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzMzkuOTg4NTgzLCAic3RlcCI6IDkwODIsICJ2YWx1ZSI6IDEuMzc1MzUzNTgxMDIzNDc1MmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4MTM0MS4wNzY1ODIsICJzdGVwIjogOTEzMiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzQyLjExNTUxNzEsICJzdGVwIjogOTE4MiwgInZhbHVlIjogMy43MjA3NTUyNTk0NTA5MjUyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzQzLjIwMzE3NjMsICJzdGVwIjogOTIzMiwgInZhbHVlIjogMy44NjYyMzk2MjAxMjA1NTk2ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzk1LjM4MDQyNzQsICJzdGVwIjogOTI2MSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzk2LjgwMDc3OTYsICJzdGVwIjogOTMxMSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxMzk3LjgwNzc3OSwgInN0ZXAiOiA5MzYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODEzOTguODAyNTc2NSwgInN0ZXAiOiA5NDExLCAidmFsdWUiOiAyLjk2MDIxNjkyNDAxNjcxMmUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTM5OS44MjkyMjI0LCAic3RlcCI6IDk0NjEsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQwMC44NzA4ODQ0LCAic3RlcCI6IDk1MTEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDAyLjA1ODgyMTIsICJzdGVwIjogOTU2MSwgInZhbHVlIjogMi4zMDA4NjMzMjIwOTExMThlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDMuMTk2Mjc0NSwgInN0ZXAiOiA5NjExLCAidmFsdWUiOiAyLjcxODc5MzcyMzQ4ODQ4ODVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDQuNDkwMDgzNywgInN0ZXAiOiA5NjYxLCAidmFsdWUiOiA0LjQ4ODM4NjA1MTcxNTMwOTZlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDUuNTUzODMwNCwgInN0ZXAiOiA5NzExLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MDYuNzg4OTAyMywgInN0ZXAiOiA5NzYxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQwOC41MzM5ODU2LCAic3RlcCI6IDk4MTEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDEwLjIxNDI5NzgsICJzdGVwIjogOTg2MSwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTEuOTIxNzA4MywgInN0ZXAiOiA5OTExLCAidmFsdWUiOiAwLjE1NjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTMuNjcwNjM3NCwgInN0ZXAiOiA5OTYxLCAidmFsdWUiOiAyLjc2NTgxNTEzNzY4MTM3MWUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQxNS4zOTQzODQ5LCAic3RlcCI6IDEwMDExLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQxNi41MjkzMDkzLCAic3RlcCI6IDEwMDYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTcuNjgxNTAxNiwgInN0ZXAiOiAxMDExMSwgInZhbHVlIjogNS4yNzg4NzI4OTQzNjUzNWUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQxOC44MTgwMzY2LCAic3RlcCI6IDEwMTYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0MTkuODY3NjMzLCAic3RlcCI6IDEwMjExLCAidmFsdWUiOiAxLjM0Mjg4MTEwMTQ1NzA4M2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQyMC44NDg5NjU2LCAic3RlcCI6IDEwMjYxLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0NzUuMzIxMTI4OCwgInN0ZXAiOiAxMDI5MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc2LjM3MTU2MjIsICJzdGVwIjogMTAzNDAsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc3LjM5MDU1MSwgInN0ZXAiOiAxMDM5MCwgInZhbHVlIjogMS41Mzg3NzgyMTU5NTkyNjg5ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc4LjQwNzI4ODgsICJzdGVwIjogMTA0NDAsICJ2YWx1ZSI6IDMuNjQ1MjAzMDYzMDA3NDE4ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDc5LjU2NzY4NDIsICJzdGVwIjogMTA0OTAsICJ2YWx1ZSI6IDEuNzk0NTkxMDM4MjczMjg1NWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQ4MC41OTMwNDYyLCAic3RlcCI6IDEwNTQwLCAidmFsdWUiOiAwLjAzMTI1MDAxNDkwMTE2MTE5NH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDgxLjYyODA0OTksICJzdGVwIjogMTA1OTAsICJ2YWx1ZSI6IDguOTY1ODc4NzMzODkwODc1ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDgyLjcyMzk5MzMsICJzdGVwIjogMTA2NDAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDgzLjczNjA4MDIsICJzdGVwIjogMTA2OTAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDg1LjQ1OTc4NCwgInN0ZXAiOiAxMDc0MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0ODcuMDM5MjkxLCAic3RlcCI6IDEwNzkwLCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0ODguODUzMzc1MiwgInN0ZXAiOiAxMDg0MCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDkwLjY5NDg2MDIsICJzdGVwIjogMTA4OTAsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTQ5Mi40OTQyNDgsICJzdGVwIjogMTA5NDAsICJ2YWx1ZSI6IDYuMDEwMTEzOTM0MzA3MTcxZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDkzLjc1MjU3NDQsICJzdGVwIjogMTA5OTAsICJ2YWx1ZSI6IDYuNDkwNTc0NzQ0MzMzMzQ0ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDk0Ljc4Mzg0OSwgInN0ZXAiOiAxMTA0MCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0OTUuOTA5NDEwNSwgInN0ZXAiOiAxMTA5MCwgInZhbHVlIjogMi4wOTIxNjQxMTU1NjM1NjYyZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDk3LjAzNjA5LCAic3RlcCI6IDExMTQwLCAidmFsdWUiOiAxLjE1MjkwNTY3ODkxMTEzMTRlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE0OTguMTU3NzUxOCwgInN0ZXAiOiAxMTE5MCwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNDk5LjMzNzMyMTgsICJzdGVwIjogMTEyNDAsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTAwLjQ1MTQ4MjMsICJzdGVwIjogMTEyOTAsICJ2YWx1ZSI6IDEuODQ2NzE0NDQ4MDI4MzA4MmUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1MC44NTc2MTksICJzdGVwIjogMTEzMTksICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTUxLjg5OTEzOTYsICJzdGVwIjogMTEzNjksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1Mi44ODQ4MTQzLCAic3RlcCI6IDExNDE5LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1My45NTkxMzgyLCAic3RlcCI6IDExNDY5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NTUuMDA1MTM5OCwgInN0ZXAiOiAxMTUxOSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTU2LjA5Nzg4MTgsICJzdGVwIjogMTE1NjksICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTU3LjE1NjQ4NDgsICJzdGVwIjogMTE2MTksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU1OC4xNDk4MjY4LCAic3RlcCI6IDExNjY5LCAidmFsdWUiOiAxLjI2MjI4NjU0MjY1MjU5MDllLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NTkuMTU1Mzc0OCwgInN0ZXAiOiAxMTcxOSwgInZhbHVlIjogMy4xMjc1OTE1MDE3NTU4OTk3ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTYwLjY2ODMzOTUsICJzdGVwIjogMTE3NjksICJ2YWx1ZSI6IDMuMDg2NjAyODA0OTQ0MjE2MmUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU2Mi40NzU5MjIsICJzdGVwIjogMTE4MTksICJ2YWx1ZSI6IDIuODM0OTQ1MDU2NDg0NjI4ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTY0LjE2MTIxNDgsICJzdGVwIjogMTE4NjksICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU2NS45MDc2OTAzLCAic3RlcCI6IDExOTE5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NjcuNTQ2MTE0NCwgInN0ZXAiOiAxMTk2OSwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU2OC45NTA0OTgzLCAic3RlcCI6IDEyMDE5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NjkuOTg1NTc4OCwgInN0ZXAiOiAxMjA2OSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NzEuMDk4MzQ1NSwgInN0ZXAiOiAxMjExOSwgInZhbHVlIjogMS4xMzUyNTM0NTgwODAyNDMxZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTcyLjE2NDYzNiwgInN0ZXAiOiAxMjE2OSwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNTczLjE2ODg5NTUsICJzdGVwIjogMTIyMTksICJ2YWx1ZSI6IDQuMzI3MjkwMjA4MDE5MjI0NGUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4MTU3NC4yMTU0MjYyLCAic3RlcCI6IDEyMjY5LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE1NzUuMzUxNDY2NywgInN0ZXAiOiAxMjMxOSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2MjUuNDQ2NzUxOCwgInN0ZXAiOiAxMjM0OCwgInZhbHVlIjogMi41MTI5Njc4ODkzMzQzMDU1ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjI2LjYxNjYyMywgInN0ZXAiOiAxMjM5OCwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYyNy42NzI3ODU1LCAic3RlcCI6IDEyNDQ4LCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2MjguNzExOTMwNSwgInN0ZXAiOiAxMjQ5OCwgInZhbHVlIjogNC4zODA2MjkxNjAxOTc5MDc1ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjI5LjgzNDk5LCAic3RlcCI6IDEyNTQ4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYzMC45NjIzNTEzLCAic3RlcCI6IDEyNTk4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYzMi4wODg3OTIsICJzdGVwIjogMTI2NDgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjMzLjA4MTI4MywgInN0ZXAiOiAxMjY5OCwgInZhbHVlIjogNy41NjA2MjkyMDYwMzgxNzJlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2MzQuMTk1NDAwMiwgInN0ZXAiOiAxMjc0OCwgInZhbHVlIjogNy4xNDMxNDY3NTExODE3NzI2ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjM1LjUyMDY0NDIsICJzdGVwIjogMTI3OTgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjM3LjI5NzYwMTcsICJzdGVwIjogMTI4NDgsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTYzOS4xMDk3NTI0LCAic3RlcCI6IDEyODk4LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2NDAuODA0MzgzLCAic3RlcCI6IDEyOTQ4LCAidmFsdWUiOiAyLjQ3NzYwNTEwMDI0ODQxNDVlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE2NDIuNDg1ODE4MSwgInN0ZXAiOiAxMjk5OCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ0LjEzMjY0NiwgInN0ZXAiOiAxMzA0OCwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ1LjIyNjkzMzUsICJzdGVwIjogMTMwOTgsICJ2YWx1ZSI6IDEuMjQ5MTc3MzI0MDgwODA4ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ2LjI1NTE2NzcsICJzdGVwIjogMTMxNDgsICJ2YWx1ZSI6IDYuNTQ4NzgzMDU0NDY3MDcyZS0xNH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ3LjM1NjQ4OTcsICJzdGVwIjogMTMxOTgsICJ2YWx1ZSI6IDEuNjk0MzExMTQxMDQwMDE3ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNjQ4LjQ5MzE4NzQsICJzdGVwIjogMTMyNDgsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTY0OS41MDcxOTUsICJzdGVwIjogMTMyOTgsICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTY1MC41MTczMTYsICJzdGVwIjogMTMzNDgsICJ2YWx1ZSI6IDYuMzM0ODU4MzMyMzQ2MzcxZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzAwLjg5NjIxOTUsICJzdGVwIjogMTMzNzcsICJ2YWx1ZSI6IDAuMDMxMjUwMDE0OTAxMTYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MDEuOTAzMzcyNSwgInN0ZXAiOiAxMzQyNywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MDIuOTE4MzU1MiwgInN0ZXAiOiAxMzQ3NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MDMuOTUzMDgxNiwgInN0ZXAiOiAxMzUyNywgInZhbHVlIjogMS4wMzIyMDUzNjI4NDk3NTg1ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzA0Ljk2OTc3MzgsICJzdGVwIjogMTM1NzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzA1Ljk5NjQxMjMsICJzdGVwIjogMTM2MjcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcwNy4wMDkwNDk0LCAic3RlcCI6IDEzNjc3LCAidmFsdWUiOiA1Ljk3MjA0Mjk5OTAxMzk5M2UtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcwOC4wMTU1NjIsICJzdGVwIjogMTM3MjcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcwOS4wMjM4Njc0LCAic3RlcCI6IDEzNzc3LCAidmFsdWUiOiA1LjU2MDg4NzUxNDM1NTM1MDRlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MTAuMDYxNjk1OCwgInN0ZXAiOiAxMzgyNywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzExLjcwMjY1NzIsICJzdGVwIjogMTM4NzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzEzLjM3ODcwNTMsICJzdGVwIjogMTM5MjcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzE1LjIxMDMyMTQsICJzdGVwIjogMTM5NzcsICJ2YWx1ZSI6IDguNjU2MDE1MTQwNzczMjk5ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzE2LjkxNTU2MjQsICJzdGVwIjogMTQwMjcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcxOC42MjIxMTI4LCAic3RlcCI6IDE0MDc3LCAidmFsdWUiOiAwLjA5Mzc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MTkuOTU4NDQ5MSwgInN0ZXAiOiAxNDEyNywgInZhbHVlIjogNS4yOTc4NzA4MjI1OTU5MThlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MjEuMDAwNjg3OCwgInN0ZXAiOiAxNDE3NywgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3MjIuMDA1NDIwNywgInN0ZXAiOiAxNDIyNywgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzIzLjEwNTQwNjMsICJzdGVwIjogMTQyNzcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcyNC4xNTgzOTAzLCAic3RlcCI6IDE0MzI3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTcyNS4yODUyMjIsICJzdGVwIjogMTQzNzcsICJ2YWx1ZSI6IDEuNTU2OTI5MTczMjU4OTQ3NGUtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc3NS4wODI2NDg4LCAic3RlcCI6IDE0NDA2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3NzYuNDU0ODc5OCwgInN0ZXAiOiAxNDQ1NiwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzc3LjQ5MTU4MzYsICJzdGVwIjogMTQ1MDYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc3OC40OTE0MjU4LCAic3RlcCI6IDE0NTU2LCAidmFsdWUiOiAxLjUzMDQ1MTkyNjIxNDc4NzVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3NzkuNjM1OTgxOCwgInN0ZXAiOiAxNDYwNiwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4MC42NTgzMzQzLCAic3RlcCI6IDE0NjU2LCAidmFsdWUiOiAyLjc5ODg3MTIwNDI0NTkzNGUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4MS43NjE5NDc0LCAic3RlcCI6IDE0NzA2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3ODIuNzY2MzQ5MywgInN0ZXAiOiAxNDc1NiwgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzgzLjc1MTY3MTYsICJzdGVwIjogMTQ4MDYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzg0Ljc5MDAyMSwgInN0ZXAiOiAxNDg1NiwgInZhbHVlIjogMi43MDQzNzYzNTM3NDY5ODhlLTE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3ODYuMTA5MTQsICJzdGVwIjogMTQ5MDYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4Ny43OTM1OTcsICJzdGVwIjogMTQ5NTYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc4OS41NzU4NDI2LCAic3RlcCI6IDE1MDA2LCAidmFsdWUiOiAyLjIxNTA2MjQ3NzI0NDE1NDJlLTE0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTEuNDM1NDY0NCwgInN0ZXAiOiAxNTA1NiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTMuMDgxNTg5NywgInN0ZXAiOiAxNTEwNiwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc5NC43Njg0MDIsICJzdGVwIjogMTUxNTYsICJ2YWx1ZSI6IDEuNTcwNzc2ODYwOTAzOTQ4MmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4MTc5NS45NjIyODQ2LCAic3RlcCI6IDE1MjA2LCAidmFsdWUiOiAyLjUzNjE0OTQxNjQ5Mzg1NzNlLTE1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTcuMTQ0MTQyOSwgInN0ZXAiOiAxNTI1NiwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODE3OTguMTY2NTc0NSwgInN0ZXAiOiAxNTMwNiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1MjgxNzk5LjE1NTE2MDcsICJzdGVwIjogMTUzNTYsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4MTgwMC4xODc3NDkxLCAic3RlcCI6IDE1NDA2LCAidmFsdWUiOiAwLjAzMTI1fV0sICJleHBlcmltZW50YWxfaW50ZXJmYWNlX29yaWdpbmFsX3NpbmdsZV9ub2RlXzY4MzQ1X0JTMzJfbGRhdGE0MTEyNyI6IFt7IndhbGxUaW1lIjogMTY5NTI4NDEzMi4wMTE0NTg2LCAic3RlcCI6IDAsICJ2YWx1ZSI6IDAuNDg5NjUwNDU4MDk3NDU3OX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTMzLjEyMTQxMzcsICJzdGVwIjogNTAsICJ2YWx1ZSI6IDYuNjMxNDI0MTg0ODg4NjAxZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTM0LjI0MjQ3MTUsICJzdGVwIjogMTAwLCAidmFsdWUiOiAwLjA2MjUzOTExNTU0ODEzMzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxMzUuMzYzNjQyMiwgInN0ZXAiOiAxNTAsICJ2YWx1ZSI6IDAuMDYyNTAzMjc4MjU1NDYyNjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDEzNi41OTk4MzYzLCAic3RlcCI6IDIwMCwgInZhbHVlIjogMC4wNjI1MDE2Njg5MzAwNTM3MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTM3Ljg2NzI3NSwgInN0ZXAiOiAyNTAsICJ2YWx1ZSI6IDAuMDMxMjUyNzQ1NTM4OTQ5OTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxMzkuNDQyODk3LCAic3RlcCI6IDMwMCwgInZhbHVlIjogNi41NDI4OTk0Mjc1ODYyMzVlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDEuMTI1MDAxNywgInN0ZXAiOiAzNTAsICJ2YWx1ZSI6IDAuMDMxMjUyOTQyOTc5MzM1Nzg1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDIuODIzMzYxNCwgInN0ZXAiOiA0MDAsICJ2YWx1ZSI6IDEuNDE1OTQyNzMzNzI5MDI1M2UtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE0NC42NjYwMzk3LCAic3RlcCI6IDQ1MCwgInZhbHVlIjogOS4yMDA1NTkzNjE0ODg1NThlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDYuNDU4NjY1LCAic3RlcCI6IDUwMCwgInZhbHVlIjogMy41MjQzMTgxMTczNDI3NzNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNDguMjkyODA5NSwgInN0ZXAiOiA1NTAsICJ2YWx1ZSI6IDYuNTE0OTM0NTExODY5Nzk3ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTQ5LjQ0MTA4MiwgInN0ZXAiOiA2MDAsICJ2YWx1ZSI6IDIuNTQzOTk1Mzc4ODAwOTAwN2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1MC41MTg1NTQ3LCAic3RlcCI6IDY1MCwgInZhbHVlIjogMC4wMzEyNTI2NTI0MDY2OTI1MDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1MS42MTk2MDcsICJzdGVwIjogNzAwLCAidmFsdWUiOiAwLjA2MjUwMTgxNzk0MTY2NTY1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNTIuNzgwNzgzLCAic3RlcCI6IDc1MCwgInZhbHVlIjogMC4wMzEyNTAyMzg0MTg1NzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNTMuOTQzODAxMiwgInN0ZXAiOiA4MDAsICJ2YWx1ZSI6IDEuNTIyNjgxMDMxOTI5MDk2MmUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1NS4wOTUxOTg5LCAic3RlcCI6IDg1MCwgInZhbHVlIjogMC4xNTYyNTAyMDg2MTYyNTY3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQxNTYuMTMwNDM1LCAic3RlcCI6IDkwMCwgInZhbHVlIjogMC4wMzEyNTA2ODU0NTM0MTQ5Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MTU3LjI2NDE3OSwgInN0ZXAiOiA5NTAsICJ2YWx1ZSI6IDAuMDYyNTAxMTM5OTM4ODMxMzN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDE1OC4yOTMyOTksICJzdGVwIjogMTAwMCwgInZhbHVlIjogMC4wMzEyNTU1MDk3MDQzNTE0MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxMC4yNjg2MTU3LCAic3RlcCI6IDEwMjksICJ2YWx1ZSI6IDAuMDkzNzUwMTA0MzA4MTI4MzZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxMS40MjA0NTY0LCAic3RlcCI6IDEwNzksICJ2YWx1ZSI6IDMuNzg3MzgwMzY0ODgzNTc0N2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxMi41ODk5NjEsICJzdGVwIjogMTEyOSwgInZhbHVlIjogMC4wNjI1MDAzNTc2Mjc4Njg2NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjEzLjczNDg3MjgsICJzdGVwIjogMTE3OSwgInZhbHVlIjogMC4wNjI1MDAzODc0MzAxOTEwNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjE0Ljc3MTgwMzksICJzdGVwIjogMTIyOSwgInZhbHVlIjogMi45ODczOTk5MDk2NzA3ODVlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMTUuOTczMzk1MywgInN0ZXAiOiAxMjc5LCAidmFsdWUiOiA1Ljc0Nzg4ODI4MDg5MzY3NmUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIxNy4xNjcyNzA0LCAic3RlcCI6IDEzMjksICJ2YWx1ZSI6IDAuMDMxMjUwMDE0OTAxMTYxMTk0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMTguMzU5NDI5MSwgInN0ZXAiOiAxMzc5LCAidmFsdWUiOiAwLjAzMTI1MDA3NDUwNTgwNTk3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjAuMTI4MDEzMSwgInN0ZXAiOiAxNDI5LCAidmFsdWUiOiA3LjQzODU0OTExODg4Nzc1ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjIxLjk0MjM2NjgsICJzdGVwIjogMTQ3OSwgInZhbHVlIjogMC4wOTM3NTAyMzg0MTg1NzkxfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjMuNzY0MTU0MiwgInN0ZXAiOiAxNTI5LCAidmFsdWUiOiAxLjA0NzA0MzcyNDYxMTI4NTFlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjUuNTMwOTYyMiwgInN0ZXAiOiAxNTc5LCAidmFsdWUiOiAwLjAzMTI1MDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjcuMjIwODk3NywgInN0ZXAiOiAxNjI5LCAidmFsdWUiOiAwLjA2MjUwMDA4MTk1NjM4NjU3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMjguODczMzU0LCAic3RlcCI6IDE2NzksICJ2YWx1ZSI6IDAuMDMxMjUwMzk0ODgwNzcxNjR9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIzMC4xMzAxODE4LCAic3RlcCI6IDE3MjksICJ2YWx1ZSI6IDAuMDkzNzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIzMS4zMjIyMzA4LCAic3RlcCI6IDE3NzksICJ2YWx1ZSI6IDAuMDYyNTAwMDIyMzUxNzQxNzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDIzMi40NDU3Mzc0LCAic3RlcCI6IDE4MjksICJ2YWx1ZSI6IDAuMDMxMjUwNDc2ODM3MTU4Mn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjMzLjU0MTUwOTYsICJzdGVwIjogMTg3OSwgInZhbHVlIjogMC4xMjUwMDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyMzQuNjg0NjI5NywgInN0ZXAiOiAxOTI5LCAidmFsdWUiOiAyLjYwMTY4MTUwMTM0NjMyZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjM1Ljg4MzYxNywgInN0ZXAiOiAxOTc5LCAidmFsdWUiOiAwLjAzMTI1MDEwODAzMzQxODY1NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjM3LjA1MDk0NSwgInN0ZXAiOiAyMDI5LCAidmFsdWUiOiAwLjAzMTI1MDMzOTAwMTQxNzE2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyODcuMDc2NDg2OCwgInN0ZXAiOiAyMDU4LCAidmFsdWUiOiAxLjU2NDU5MjUwODg4NDc0MzRlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyODguNTQwNTU5NSwgInN0ZXAiOiAyMTA4LCAidmFsdWUiOiAwLjA2MjUwMDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI4OS42MDI3NjI1LCAic3RlcCI6IDIxNTgsICJ2YWx1ZSI6IDkuNzY4OTkzNjE0MDQ1NDg1ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjkwLjc2NTE4NiwgInN0ZXAiOiAyMjA4LCAidmFsdWUiOiAwLjAzMTI1MDEzNzgzNTc0MTA0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQyOTEuODQwNzEwMiwgInN0ZXAiOiAyMjU4LCAidmFsdWUiOiAwLjAzMTI1MDEzMDM4NTE2MDQ0Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MjkzLjA4NjgxNDQsICJzdGVwIjogMjMwOCwgInZhbHVlIjogMC4wMzEyNTAwMTg2MjY0NTE0OX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mjk0LjE3MTgyMywgInN0ZXAiOiAyMzU4LCAidmFsdWUiOiAwLjEyNDk5OTk5MjU0OTQxOTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI5NS4yNjc2MDQ2LCAic3RlcCI6IDI0MDgsICJ2YWx1ZSI6IDUuODY2NjkyNzMxNjE1MzMxZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mjk2LjQzNjI1MzgsICJzdGVwIjogMjQ1OCwgInZhbHVlIjogMC4wMzEyNTAwODE5NTYzODY1NjZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI5Ny41NzUzNzk0LCAic3RlcCI6IDI1MDgsICJ2YWx1ZSI6IDAuMDYyNTAwMDk2ODU3NTQ3NzZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDI5OC45OTk1MDc0LCAic3RlcCI6IDI1NTgsICJ2YWx1ZSI6IDEuNDQwNTE1OTczMTcyMjk2ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzAwLjc2OTI3NiwgInN0ZXAiOiAyNjA4LCAidmFsdWUiOiAwLjA5Mzc1MDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMwMi40MzIwNjE0LCAic3RlcCI6IDI2NTgsICJ2YWx1ZSI6IDAuMDYyNTAwMDU5NjA0NjQ0Nzh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMwNC4wODE4MTIxLCAic3RlcCI6IDI3MDgsICJ2YWx1ZSI6IDAuMDYyNTAwNDMyMTMzNjc0NjJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMwNS45MTAyMzMsICJzdGVwIjogMjc1OCwgInZhbHVlIjogMS42Mjc3NjU0Nzc5NjI4MzkyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzA3Ljc2NDMwMTMsICJzdGVwIjogMjgwOCwgInZhbHVlIjogMi40ODY5NzExNjIzNDA5Nzg1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzA5LjAzNjgzLCAic3RlcCI6IDI4NTgsICJ2YWx1ZSI6IDMuMTE0OTg4NDg5MzcyMTk0NmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMxMC4wODI3NDIyLCAic3RlcCI6IDI5MDgsICJ2YWx1ZSI6IDAuMDYyNTAwNDE3MjMyNTEzNDN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDMxMS4yNDQ4ODYsICJzdGVwIjogMjk1OCwgInZhbHVlIjogMC4wMzEyNTAwNjcwNTUyMjUzN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzEyLjM3MDU5NDUsICJzdGVwIjogMzAwOCwgInZhbHVlIjogNS45NDQzMjAyMzYwMzk4NTdlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzMTMuNTM1MjcwMiwgInN0ZXAiOiAzMDU4LCAidmFsdWUiOiAwLjAzMTI1MDAzNzI1MjkwMjk4NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzY3LjYyMjg3MywgInN0ZXAiOiAzMDg3LCAidmFsdWUiOiAyLjYxODMwMjY4NTc3NTEyZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzY5LjM5OTYxNDgsICJzdGVwIjogMzEzNywgInZhbHVlIjogMy41MDI5NjM5NjMzNDIxNTRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzEuMTQ2MjUwNSwgInN0ZXAiOiAzMTg3LCAidmFsdWUiOiAzLjIwNDY1NjA5NjA0NTI1NWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM3Mi45NjQzNzc0LCAic3RlcCI6IDMyMzcsICJ2YWx1ZSI6IDEuMTU0MDMzMzEzMzU1Mjg1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mzc0LjI0MjU4OTcsICJzdGVwIjogMzI4NywgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzUuNDMxMTI3MywgInN0ZXAiOiAzMzM3LCAidmFsdWUiOiAzLjA5ODY1MTI5MTExMTMwOTVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzYuNTg0ODY0NiwgInN0ZXAiOiAzMzg3LCAidmFsdWUiOiAwLjAzMTI1MDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzNzcuNjI1NDk2NiwgInN0ZXAiOiAzNDM3LCAidmFsdWUiOiAwLjAzMTI1MDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM3OC42NTM1NjIzLCAic3RlcCI6IDM0ODcsICJ2YWx1ZSI6IDEuMTY0NDIxMjcwNTE2NDEzNmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM3OS42ODU1NiwgInN0ZXAiOiAzNTM3LCAidmFsdWUiOiAxLjI2MDQ4NDYwNTU4MDgxMzllLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzODAuNzYwNTQ3NiwgInN0ZXAiOiAzNTg3LCAidmFsdWUiOiAwLjAzMTI1MDAxNDkwMTE2MTE5NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0MzgxLjgwNzkwNywgInN0ZXAiOiAzNjM3LCAidmFsdWUiOiAwLjA5Mzc1MDAxNDkwMTE2MTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM4Mi45OTg1MzYsICJzdGVwIjogMzY4NywgInZhbHVlIjogMC4wNjI1MDAyMDg2MTYyNTY3MX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mzg0LjY0NTkzMywgInN0ZXAiOiAzNzM3LCAidmFsdWUiOiAwLjAzMTI1MDA3ODIzMTA5NjI3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzODYuNDQwNzkyMywgInN0ZXAiOiAzNzg3LCAidmFsdWUiOiAwLjA2MjUwMDA0NDcwMzQ4MzU4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzODguMzQ2ODI5NywgInN0ZXAiOiAzODM3LCAidmFsdWUiOiAwLjAzMTI1MDAwMzcyNTI5MDN9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM5MC4yNDE3MjksICJzdGVwIjogMzg4NywgInZhbHVlIjogMC4wOTM3NTAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQzOTIuMTE4MzgyNSwgInN0ZXAiOiAzOTM3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM5My45MzUzMTg1LCAic3RlcCI6IDM5ODcsICJ2YWx1ZSI6IDAuMDMxMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDM5NS4xMDQxODg3LCAic3RlcCI6IDQwMzcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0Mzk2LjE0NzQxNjgsICJzdGVwIjogNDA4NywgInZhbHVlIjogMC4wOTM3NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDQ0LjIxODY3NywgInN0ZXAiOiA0MTE2LCAidmFsdWUiOiAwLjAzMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NDYuMDE4MDcxLCAic3RlcCI6IDQxNjYsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDQ3LjY3MTY2ODUsICJzdGVwIjogNDIxNiwgInZhbHVlIjogOC4wNTAzMDA4MzQ4Mzg3MDhlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NDkuMzY0Mzg3MywgInN0ZXAiOiA0MjY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1MS4yNzE0Mjk4LCAic3RlcCI6IDQzMTYsICJ2YWx1ZSI6IDMuNDEyMjI1ODM1MjE5ODI4N2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1My4xMzU0Njc4LCAic3RlcCI6IDQzNjYsICJ2YWx1ZSI6IDEuMzkxNTAwMTU5NTQyMTQ3MmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1NC40OTEwNTY3LCAic3RlcCI6IDQ0MTYsICJ2YWx1ZSI6IDYuNTQ4ODc2NTUyMTU5Mjk5NWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1NS41NTM4ODc4LCAic3RlcCI6IDQ0NjYsICJ2YWx1ZSI6IDEuNzgwNTgyMjU5NDE0MTMyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDU2Ljc2NTE5MSwgInN0ZXAiOiA0NTE2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ1OC4wMDYwNjMyLCAic3RlcCI6IDQ1NjYsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDU5LjI2MDIzOTgsICJzdGVwIjogNDYxNiwgInZhbHVlIjogMC4wMzEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDYwLjQ3MjEyOSwgInN0ZXAiOiA0NjY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ2MS42NTMxOTk3LCAic3RlcCI6IDQ3MTYsICJ2YWx1ZSI6IDYuMzY0Nzc3NTkzODU5MTE3ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDYyLjczNjM3NTMsICJzdGVwIjogNDc2NiwgInZhbHVlIjogMC4wMzEyNTAwMDM3MjUyOTAzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NjQuMDMzNjM2OCwgInN0ZXAiOiA0ODE2LCAidmFsdWUiOiAxLjM1OTQwODg1MjE1MjkxMDJlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NjUuNzMwNzgxLCAic3RlcCI6IDQ4NjYsICJ2YWx1ZSI6IDIuOTIwNTc3NTU3NTc0Njg4NGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ2Ny4yOTUyNjYyLCAic3RlcCI6IDQ5MTYsICJ2YWx1ZSI6IDAuMDMxMjUwMDAzNzI1MjkwM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDY5LjA4ODMxMSwgInN0ZXAiOiA0OTY2LCAidmFsdWUiOiAwLjAzMTI1MDAzMzUyNzYxMjY4Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg0NDcxLjAzMDEzMywgInN0ZXAiOiA1MDE2LCAidmFsdWUiOiAxLjk5MDIzNjc3NTM4NDM0NjRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODQ0NzIuOTAwNDAzNywgInN0ZXAiOiA1MDY2LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NDQ3NC41MzkzOTYzLCAic3RlcCI6IDUxMTYsICJ2YWx1ZSI6IDIuNTk1OTc4MzIxMTk1OTU3NWUtMDl9XSwgImV4cGVyaW1lbnRhbF9pbnRlcmZhY2Vfb3JpZ2luYWxfc2luZ2xlX25vZGVfMTIxMjM1NV9CUzE2X2xkYXRhNDExMjciOiBbeyJ3YWxsVGltZSI6IDE2OTUyODUzNDYuMDc0MjA4NywgInN0ZXAiOiAwLCAidmFsdWUiOiAwLjQ3NjI5MTAwMDg0MzA0ODF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM0Ni45NTk0MTE2LCAic3RlcCI6IDUwLCAidmFsdWUiOiAyLjE2MTEzNTQ4OTU4Njc0MDdlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNDcuNzgzMjI2LCAic3RlcCI6IDEwMCwgInZhbHVlIjogMy42MjE3ODg4OTE5MDU0NTNlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNDguNTQ2MTI0LCAic3RlcCI6IDE1MCwgInZhbHVlIjogNC4wMTg2OTc2NTQ4Mjg0MjllLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNDkuNTc2NzA3LCAic3RlcCI6IDIwMCwgInZhbHVlIjogMS4wOTg3MDc0MzQ3MjEyOTFlLTA1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTAuNzg2NTc2LCAic3RlcCI6IDI1MCwgInZhbHVlIjogMi40MzUwOTE2NjQ2NjUzNzg2ZS0wNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzUxLjk4MjQ2MjIsICJzdGVwIjogMzAwLCAidmFsdWUiOiAwLjA2MjUwNjM1NTM0NTI0OTE4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTMuMTAzNzI4NSwgInN0ZXAiOiAzNTAsICJ2YWx1ZSI6IDMuODQ1MDg4MDMxMDg0NzQyZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzU0LjI1NDY2OTcsICJzdGVwIjogNDAwLCAidmFsdWUiOiAyLjgwNzUxMDA5OTk1NTgzNDRlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTUuNTcwOTcwNSwgInN0ZXAiOiA0NTAsICJ2YWx1ZSI6IDUuNjU5OTU2MDU5Mzg5NTE1ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzU2LjkzNjE4ODcsICJzdGVwIjogNTAwLCAidmFsdWUiOiAwLjA2MjUwNjM4NTE0NzU3MTU2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNTguMzIzOTQ2NSwgInN0ZXAiOiA1NTAsICJ2YWx1ZSI6IDEuNDY2NzcwMjA4OTM1NDg2MmUtMDV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM1OS43NTAyOTM3LCAic3RlcCI6IDYwMCwgInZhbHVlIjogNC43OTE4MDk3MTUyNDMyODllLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNjEuMDA4OTg1MywgInN0ZXAiOiA2NTAsICJ2YWx1ZSI6IDIuNjAyMzQ3NzA2MjE1MzY5ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzYyLjI1ODc3MjEsICJzdGVwIjogNzAwLCAidmFsdWUiOiAwLjA2MjUwMzI0MTAwMjU1OTY2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNjQuMDczMDc4NiwgInN0ZXAiOiA3NTAsICJ2YWx1ZSI6IDAuMDYyNTAwNzMwMTU2ODk4NX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzY2LjI4MDMyMTgsICJzdGVwIjogODAwLCAidmFsdWUiOiAwLjA2MjUwOTMzNTU3NzQ4Nzk1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNjcuNDg4NzcxNCwgInN0ZXAiOiA4NTAsICJ2YWx1ZSI6IDAuMDYyNTAxMTE3NTg3MDg5NTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM2OC42NzU2MzUzLCAic3RlcCI6IDkwMCwgInZhbHVlIjogMS43MTU3OTEwMjkyNTUzNDI0ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzY5Ljk3NTU3MjYsICJzdGVwIjogOTUwLCAidmFsdWUiOiAyLjU1NTM5MDc3ODk3OTkyN2UtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3MC44MzkxMTU2LCAic3RlcCI6IDEwMDAsICJ2YWx1ZSI6IDEuNTk4ODkyMDI2Nzc3MzIxZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzcxLjczOTEzODYsICJzdGVwIjogMTA1MCwgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNzIuODU0NDQ0MywgInN0ZXAiOiAxMTAwLCAidmFsdWUiOiAwLjA2MjUwNjM3MDI0NjQxMDM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzNzQuMDM5NTI5OCwgInN0ZXAiOiAxMTUwLCAidmFsdWUiOiA3LjUwMDUzOTE0MDg5MjIxNWUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3NS4xNTM0NjcsICJzdGVwIjogMTIwMCwgInZhbHVlIjogNy40OTMxNDM1Mjc4ODEzM2UtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3Ni4zNzQ4NTYsICJzdGVwIjogMTI1MCwgInZhbHVlIjogMS4zNzEyMzM3OTMxNzkyNzE3ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzc3LjYyNjY2MjUsICJzdGVwIjogMTMwMCwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM3OC45NDIwOTk2LCAic3RlcCI6IDEzNTAsICJ2YWx1ZSI6IDAuMDYyNTAwMjk4MDIzMjIzODh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM4MC4xMzI5MTEsICJzdGVwIjogMTQwMCwgInZhbHVlIjogMy42NDYyOTg1NTE5ODQ3MjhlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzODEuMzQ5NDMxLCAic3RlcCI6IDE0NTAsICJ2YWx1ZSI6IDAuMDYyNTAwMDgxOTU2Mzg2NTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM4Mi4yODc1MTIsICJzdGVwIjogMTUwMCwgInZhbHVlIjogMC4wNjI1MDAxNDkwMTE2MTE5NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzgzLjA0NDE3NTYsICJzdGVwIjogMTU1MCwgInZhbHVlIjogNC45MjgwOTMwNjI1MTcyOTFlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzODMuODY0OTk2LCAic3RlcCI6IDE2MDAsICJ2YWx1ZSI6IDUuMDE1MTQ3MDUzMjAwMDUzZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg0LjYzMTU4OTcsICJzdGVwIjogMTY1MCwgInZhbHVlIjogNS42Nzc3NDg2MTc5MjcxMzZlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODUzODUuNDE4MzE3NiwgInN0ZXAiOiAxNzAwLCAidmFsdWUiOiAzLjE3MDkxNTYxODk2NjMxOWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTM4Ni4yNzI1NjA0LCAic3RlcCI6IDE3NTAsICJ2YWx1ZSI6IDguMDc2MzExMjQ2NDQxMDM3ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg3LjExOTI4OTIsICJzdGVwIjogMTgwMCwgInZhbHVlIjogMC4wNjI1MDA4NjQyNjczNDkyNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg3Ljg1NDkyMDEsICJzdGVwIjogMTg1MCwgInZhbHVlIjogMi45NDQ3OTMyMDkyODA3NjA1ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg4LjYwOTEwNDQsICJzdGVwIjogMTkwMCwgInZhbHVlIjogMi42OTMzNzQ0ODM0NDIzMTIzZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1Mzg5LjM2NjUyNzYsICJzdGVwIjogMTk1MCwgInZhbHVlIjogMS4wMTk3MzUzMTg0MDgyNjU4ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzkwLjI0Njg1NzYsICJzdGVwIjogMjAwMCwgInZhbHVlIjogMC4wNjI1MDEzNzA5MDY4Mjk4M30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1MzkxLjA3NDY4NTMsICJzdGVwIjogMjA1MCwgInZhbHVlIjogMS4zMTQyMjAxOTkzMzMyNDkyZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDQyLjQ4OTMwMywgInN0ZXAiOiAyMDU3LCAidmFsdWUiOiAwLjA2MjUwMDE3ODgxMzkzNDMzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDMuMzI0MDc3OCwgInN0ZXAiOiAyMTA3LCAidmFsdWUiOiAwLjA2MjUxMzk5OTY0MDk0MTYyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDQuMTYwMTk3MywgInN0ZXAiOiAyMTU3LCAidmFsdWUiOiA4LjM0MTIyNzcyNjMwNTA3OGUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0NS4wMTYxMzk3LCAic3RlcCI6IDIyMDcsICJ2YWx1ZSI6IDQuNjE1NTI0MTc2MTg4MDQ2ZS0wN30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDQ1LjgyOTk5MDksICJzdGVwIjogMjI1NywgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDYuNTc5ODUxNiwgInN0ZXAiOiAyMzA3LCAidmFsdWUiOiAyLjI5NzI3MjM0NTY4NTk5NjdlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NDcuMzEzODc1LCAic3RlcCI6IDIzNTcsICJ2YWx1ZSI6IDAuMDYyNTAwMDIyMzUxNzQxNzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0OC4wNzU4NzU1LCAic3RlcCI6IDI0MDcsICJ2YWx1ZSI6IDMuNjgwMjM5NDAyMTE1MTQ4NmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0OC44Njg2NCwgInN0ZXAiOiAyNDU3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ0OS43MTE1NDIxLCAic3RlcCI6IDI1MDcsICJ2YWx1ZSI6IDYuMzg5NzQzNzAzMDM5MTNlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTAuNTQxNjE5LCAic3RlcCI6IDI1NTcsICJ2YWx1ZSI6IDMuMDMzNjYzNjg4MjU2NjM4ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDUxLjQxOTUxNzUsICJzdGVwIjogMjYwNywgInZhbHVlIjogNy43MjE0NDIzMjk5NjY1MjFlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTIuNjUzNzA2OCwgInN0ZXAiOiAyNjU3LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ1My44NDgwNzIsICJzdGVwIjogMjcwNywgInZhbHVlIjogMS45Mzg0MTU4MzQ5NTY2ODZlLTA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTQuOTcyMzQ5NCwgInN0ZXAiOiAyNzU3LCAidmFsdWUiOiA2LjI5NDk0ODIwNzE0MTcxNWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ1Ni4zMzk4NTE0LCAic3RlcCI6IDI4MDcsICJ2YWx1ZSI6IDAuMDYyNTAwMTQxNTYxMDMxMzR9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ1Ny43MjAyNTMsICJzdGVwIjogMjg1NywgInZhbHVlIjogNi4zOTM2NDczODkzMDIyNTllLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NTkuMDQ3MzY0NywgInN0ZXAiOiAyOTA3LCAidmFsdWUiOiAwLjA2MjUwMDAyMjM1MTc0MTc5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjAuMjM4NzU3OCwgInN0ZXAiOiAyOTU3LCAidmFsdWUiOiAwLjA2MjUwMDA1OTYwNDY0NDc4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjEuMzk1MzcsICJzdGVwIjogMzAwNywgInZhbHVlIjogMS4yODY0ODM2NjYyNjI5Mzg2ZS0wNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDYyLjI0NjA4MDksICJzdGVwIjogMzA1NywgInZhbHVlIjogMi40NjM2ODQzNjc2MjYyMjg4ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDYzLjAwNzkzODQsICJzdGVwIjogMzEwNywgInZhbHVlIjogNy44NjAwMzA4NDg0MDU1ODZlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjMuNzg5MzI4LCAic3RlcCI6IDMxNTcsICJ2YWx1ZSI6IDAuMDYyNTAwMjc1NjcxNDgyMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ2NC42NzY1ODc2LCAic3RlcCI6IDMyMDcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDY1LjQ4MDMyOTMsICJzdGVwIjogMzI1NywgInZhbHVlIjogMC4wNjI1MDA3NTI1MDg2NDAyOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDY2LjI5OTczNSwgInN0ZXAiOiAzMzA3LCAidmFsdWUiOiAyLjk2MTg3NTYzMzY0NDY5NWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ2Ny4xNDk3NjI5LCAic3RlcCI6IDMzNTcsICJ2YWx1ZSI6IDEuMzk4ODMzMTYwNDE1MzM2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDY3LjkxNDU1NTgsICJzdGVwIjogMzQwNywgInZhbHVlIjogOC4zNTQ1MzkyODI2MDY3NjVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NjguNjczNjIzOCwgInN0ZXAiOiAzNDU3LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ2OS40NjczNDM4LCAic3RlcCI6IDM1MDcsICJ2YWx1ZSI6IDEuMjAzODU5OTM3OTU5MzUwNmUtMDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3MC4zNTE5NDI1LCAic3RlcCI6IDM1NTcsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDcxLjEwMTg2MDMsICJzdGVwIjogMzYwNywgInZhbHVlIjogMC4wNjI1MDAwNDQ3MDM0ODM1OH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDcyLjI4ODU3MzcsICJzdGVwIjogMzY1NywgInZhbHVlIjogMS45MTI3MzEwODQ2MzAwODE2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDczLjU0OTU2MTcsICJzdGVwIjogMzcwNywgInZhbHVlIjogMC4wNjI1MDE5NTIwNTIxMTY0fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NzQuNzczMTY5NSwgInN0ZXAiOiAzNzU3LCAidmFsdWUiOiAwLjE4NzV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3Ni4wNzY4NjQ3LCAic3RlcCI6IDM4MDcsICJ2YWx1ZSI6IDAuMTI1MDAwMDg5NDA2OTY3MTZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3Ny4yNzQ1MjQyLCAic3RlcCI6IDM4NTcsICJ2YWx1ZSI6IDEuMjc2MTU5NTMzNjAzMDQ5NmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTQ3OC40NzQxOTUsICJzdGVwIjogMzkwNywgInZhbHVlIjogNC43NTMwNDU5NTY4MTc5MTRlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU0NzkuNzg0Njk5NCwgInN0ZXAiOiAzOTU3LCAidmFsdWUiOiAxLjMwNjgxOTA5NzM3OTczZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDgxLjA1MzA5NDEsICJzdGVwIjogNDAwNywgInZhbHVlIjogMC4wNjI1MDE1OTQ0MjQyNDc3NH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDgxLjk2Mzc3MzUsICJzdGVwIjogNDA1NywgInZhbHVlIjogMC4xMjUwMDAwNzQ1MDU4MDU5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NDgyLjcyNjIyNywgInN0ZXAiOiA0MTA3LCAidmFsdWUiOiAxLjY3MTU4NjE3NjE0NDA0NjVlLTA3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1MjkuMjczNjA4LCAic3RlcCI6IDQxMTQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTMwLjA3NjU0MDcsICJzdGVwIjogNDE2NCwgInZhbHVlIjogMC4xODc1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1MzAuODcwMjMxNCwgInN0ZXAiOiA0MjE0LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTMxLjk1MDA1OSwgInN0ZXAiOiA0MjY0LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzMy4wNDAwNjI3LCAic3RlcCI6IDQzMTQsICJ2YWx1ZSI6IDAuMDYyNTAwMDIyMzUxNzQxNzl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNC4xMjM1NDU2LCAic3RlcCI6IDQzNjQsICJ2YWx1ZSI6IDEuMDE0MjA0Mzg3MTM5NzI3N2UtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNS4yNzcxNjE4LCAic3RlcCI6IDQ0MTQsICJ2YWx1ZSI6IDIuMDQ1ODk1OTY4MTk0NTk5OGUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNi40Njk4Njc1LCAic3RlcCI6IDQ0NjQsICJ2YWx1ZSI6IDIuNTg1MTgwMjkyMDU4NDUzMmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTUzNy44MDcyMTkzLCAic3RlcCI6IDQ1MTQsICJ2YWx1ZSI6IDAuMDYyNTAwMDA3NDUwNTgwNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTM5LjAwODQ3MTcsICJzdGVwIjogNDU2NCwgInZhbHVlIjogMS44ODExOTc4NjQxNTA4NjNlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDAuMjM0NzQ0OCwgInN0ZXAiOiA0NjE0LCAidmFsdWUiOiAyLjgzOTc2NzMxMDE5MjA4NzNlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDEuNDkxNDE1LCAic3RlcCI6IDQ2NjQsICJ2YWx1ZSI6IDAuMDYyNTAwMDE0OTAxMTYxMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTQyLjM2NzAyNTEsICJzdGVwIjogNDcxNCwgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDMuMTg1ODE4NywgInN0ZXAiOiA0NzY0LCAidmFsdWUiOiAwLjA2MjQ5OTk5NjI3NDcwOTd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0My45MzQ3NTYsICJzdGVwIjogNDgxNCwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0NC43MDU3NTEsICJzdGVwIjogNDg2NCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDUuNDY1NDE3MSwgInN0ZXAiOiA0OTE0LCAidmFsdWUiOiA0LjM1NDc1OTI1NTQyMDUwNGUtMDd9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0Ni4yNjQ2MiwgInN0ZXAiOiA0OTY0LCAidmFsdWUiOiA4Ljk0MzY0NjcxMjExMTc4NmUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU0Ny4wOTM5NDEsICJzdGVwIjogNTAxNCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDcuODQ3NTc2MSwgInN0ZXAiOiA1MDY0LCAidmFsdWUiOiAyLjg2MDgzOTA2NTY0MzcxNjZlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDguNzI4ODEzNiwgInN0ZXAiOiA1MTE0LCAidmFsdWUiOiAxLjIzMDA0NDk1NDc4MDg1MTJlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NDkuNjExOTE1OCwgInN0ZXAiOiA1MTY0LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU1MC40OTc5MjQsICJzdGVwIjogNTIxNCwgInZhbHVlIjogNC4xNzA1OTgwODkxMDM4MDVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTEuMzA2OTQ4NywgInN0ZXAiOiA1MjY0LCAidmFsdWUiOiA0LjAzMzYyNjc2NTkzMTMzMWUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU1Mi4zNzIzMjE0LCAic3RlcCI6IDUzMTQsICJ2YWx1ZSI6IDAuMDYyNTAwMDA3NDUwNTgwNn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTUzLjU3Mzc1NjUsICJzdGVwIjogNTM2NCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTQuNzMwNTQ5LCAic3RlcCI6IDU0MTQsICJ2YWx1ZSI6IDEuNjQzMjQ3NjkwNjk2OTAzZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTU1LjgyNDAzODUsICJzdGVwIjogNTQ2NCwgInZhbHVlIjogMC4xMjUwMDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTcuMTEzMjMxLCAic3RlcCI6IDU1MTQsICJ2YWx1ZSI6IDUuMDg2MTY1OTMyODY2MDM4ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTU4LjMxOTEzOCwgInN0ZXAiOiA1NTY0LCAidmFsdWUiOiAxLjc5ODkwNTIwMjU3Njg2MTVlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NTkuNTc3MjA2OSwgInN0ZXAiOiA1NjE0LCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2MC45MzA5ODI2LCAic3RlcCI6IDU2NjQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTYyLjAwMTIzMjEsICJzdGVwIjogNTcxNCwgInZhbHVlIjogMS4yMTEyMjE3MDA3MTQzMDQ1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTYyLjgxMDUxMSwgInN0ZXAiOiA1NzY0LCAidmFsdWUiOiAxLjAyNjQyODQ1MzM0MzQ0MmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2My42NzY5ODY1LCAic3RlcCI6IDU4MTQsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTY0LjUzNDkxMjMsICJzdGVwIjogNTg2NCwgInZhbHVlIjogMS41MjAwMjM0NDA0NDg4ODFlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NjUuMzEyMjgxMSwgInN0ZXAiOiA1OTE0LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2Ni4wODA2NDk2LCAic3RlcCI6IDU5NjQsICJ2YWx1ZSI6IDguMzIxMDk4ODA5OTkzNTQzZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NTY2Ljg3OTc4MDUsICJzdGVwIjogNjAxNCwgInZhbHVlIjogMi40ODQzODA5MjMyMDY2ODZlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU1NjcuNzMyMzIyLCAic3RlcCI6IDYwNjQsICJ2YWx1ZSI6IDUuMjUzOTE2ODU3MTI4NjE1NGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2OC40OTIxMzIsICJzdGVwIjogNjExNCwgInZhbHVlIjogNi4zNTc1MTcyOTAzODk1OGUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTU2OS4yMzU0ODEsICJzdGVwIjogNjE2NCwgInZhbHVlIjogMi40NjY0NjUwMzIyMTM3MDVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MTcuNzg1ODIzOCwgInN0ZXAiOiA2MTcxLCAidmFsdWUiOiA3Ljc2MzQxOTA3NDI2OTI1MWUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYxOS4yMDgwMTUsICJzdGVwIjogNjIyMSwgInZhbHVlIjogNi42NjY2NjY1MDc3MjY0MDRlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MjAuNjAwNTIxNiwgInN0ZXAiOiA2MjcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyMS42OTE0MTY3LCAic3RlcCI6IDYzMjEsICJ2YWx1ZSI6IDEuNzI3MDU3ODAyMzI1NDA0NmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyMi42MTY3MzM4LCAic3RlcCI6IDYzNzEsICJ2YWx1ZSI6IDEuMTEyMzA3NDkwNTU4MzUwOGUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyMy41MDg3Nzg2LCAic3RlcCI6IDY0MjEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI0LjM2MDcyOTcsICJzdGVwIjogNjQ3MSwgInZhbHVlIjogMC4wNjI1MDA4MTk1NjM4NjU2Nn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI1LjE1NjcxMDQsICJzdGVwIjogNjUyMSwgInZhbHVlIjogMC4wNjI1MDAwMjk4MDIzMjIzOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI1LjkxMTEwNzMsICJzdGVwIjogNjU3MSwgInZhbHVlIjogMS4xMTE2MDM0MzE1MjUwNTQ1ZS0wOH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI2Ljc4MDkxMjksICJzdGVwIjogNjYyMSwgInZhbHVlIjogMS4wMjU1MTE0NTM1MzQwMjI2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI3LjUzMDc4NjgsICJzdGVwIjogNjY3MSwgInZhbHVlIjogNi43NjU4MjY3ODc3MTM1MzZlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MjguMjcyNjY4LCAic3RlcCI6IDY3MjEsICJ2YWx1ZSI6IDEuNTk1MDczMzc4OTM0OTQxNGUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYyOS4wNTIyNzc2LCAic3RlcCI6IDY3NzEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjI5Ljg4NjE4OSwgInN0ZXAiOiA2ODIxLCAidmFsdWUiOiAxLjc1OTczODMyNzI3ODI3MDdlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzAuNjM0NTA1LCAic3RlcCI6IDY4NzEsICJ2YWx1ZSI6IDEuNDg0NTkyNjcxMDE5NDEzNWUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYzMS4zNzIzODEyLCAic3RlcCI6IDY5MjEsICJ2YWx1ZSI6IDAuMDYyNDk5OTk2Mjc0NzA5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjMyLjQ0MDg1NDMsICJzdGVwIjogNjk3MSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzMuNTYyNTQ1OCwgInN0ZXAiOiA3MDIxLCAidmFsdWUiOiAwLjA2MjUwMDAwNzQ1MDU4MDZ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYzNC42ODQ4MDgzLCAic3RlcCI6IDcwNzEsICJ2YWx1ZSI6IDMuNjcyODU3MDE4NTIxODI0NmUtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTYzNS44MTQ2NDUsICJzdGVwIjogNzEyMSwgInZhbHVlIjogMC4wNjI1MDAwMTQ5MDExNjEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzYuOTgzNjMzLCAic3RlcCI6IDcxNzEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjM4LjE3NjkwODMsICJzdGVwIjogNzIyMSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2MzkuNDMzNTE5NiwgInN0ZXAiOiA3MjcxLCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQwLjgwMzcxMDcsICJzdGVwIjogNzMyMSwgInZhbHVlIjogMS44MDI2NDM2NDYzMzI4MTMzZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQxLjkxNDY2MTQsICJzdGVwIjogNzM3MSwgInZhbHVlIjogMS43OTQ5MDA2MTcwMjQ4MDgzZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQyLjc0Njk5OTcsICJzdGVwIjogNzQyMSwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0My41OTYzNzksICJzdGVwIjogNzQ3MSwgInZhbHVlIjogMC4wNjI0OTk5MDMxNDI0NTIyNH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjQ0LjM4NTIwMjIsICJzdGVwIjogNzUyMSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NDUuMTY4NTI4NiwgInN0ZXAiOiA3NTcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0Ni4wMzUwNDcsICJzdGVwIjogNzYyMSwgInZhbHVlIjogMy44MzU3NDc2OTE2OTM5MjVlLTEyfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NDYuODUwMjI2NCwgInN0ZXAiOiA3NjcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0Ny42OTY1OTk1LCAic3RlcCI6IDc3MjEsICJ2YWx1ZSI6IDEuNzk3MDk4MTE0NzY0MTM5NmUtMDh9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY0OC41NjMwOTIsICJzdGVwIjogNzc3MSwgInZhbHVlIjogMS4yMjgyNjM4MjM5ODI0NDVlLTA5fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NDkuNDAyMzUxMSwgInN0ZXAiOiA3ODIxLCAidmFsdWUiOiAzLjU2MTM2ODQyMjM4ODk2NjNlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NTAuMTcwNTI4NCwgInN0ZXAiOiA3ODcxLCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY1MC45MDg0MjYsICJzdGVwIjogNzkyMSwgInZhbHVlIjogMi4xNzEwMjkwNTA5NzkxMDA4ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjUxLjY0ODc3OTksICJzdGVwIjogNzk3MSwgInZhbHVlIjogMC4xMjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY1Mi43OTkxNzc2LCAic3RlcCI6IDgwMjEsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjU0LjA3MTQ3NjcsICJzdGVwIjogODA3MSwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU2NTUuMzI4Mjg4NiwgInN0ZXAiOiA4MTIxLCAidmFsdWUiOiA3LjM2MDY5MDE4MjM2NzUxM2UtMTJ9LCB7IndhbGxUaW1lIjogMTY5NTI4NTY1Ni42MjExNDI5LCAic3RlcCI6IDgxNzEsICJ2YWx1ZSI6IDQuMDExMDI2OTI3MjY0MTgzZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NjU3Ljk4ODAxNCwgInN0ZXAiOiA4MjIxLCAidmFsdWUiOiA4LjIxNjk5NjUyNzY0MzUxNmUtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcwNi4xOTgzMDMsICJzdGVwIjogODIyOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MDcuMzY3ODA4NiwgInN0ZXAiOiA4Mjc4LCAidmFsdWUiOiAxLjI4ODI0NzAwOTA2ODA0NDJlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MDguNTkwMDksICJzdGVwIjogODMyOCwgInZhbHVlIjogMC4wNjI1MDAwMDc0NTA1ODA2fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MDkuNzY0MDA5NywgInN0ZXAiOiA4Mzc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcxMS4xMDg1NzgsICJzdGVwIjogODQyOCwgInZhbHVlIjogNC43OTk5NDk2NzM4MzkzNDNlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTIuNjE2MjU5MywgInN0ZXAiOiA4NDc4LCAidmFsdWUiOiAxLjEyMzI5MTg3NjE4MTY1MzVlLTEwfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTQuMDEzNjAwNiwgInN0ZXAiOiA4NTI4LCAidmFsdWUiOiAxLjk0OTg0MzIzODI1ODA4NjZlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTUuNDMwOTE5NCwgInN0ZXAiOiA4NTc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcxNi44MzQ3OTg2LCAic3RlcCI6IDg2MjgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MTguNDAzNTk4OCwgInN0ZXAiOiA4Njc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcxOS43NDQ2MDg0LCAic3RlcCI6IDg3MjgsICJ2YWx1ZSI6IDEuNTEwOTU2NTgyMDczNjc0OGUtMDl9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcyMS4wODY5MDEyLCAic3RlcCI6IDg3NzgsICJ2YWx1ZSI6IDYuMzUxMDAwMDIxMDI2NTA5ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzIyLjMzMTM1NDEsICJzdGVwIjogODgyOCwgInZhbHVlIjogNC42ODU4MTMxOTU3OTI3NTRlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MjMuNjY5NjI3NCwgInN0ZXAiOiA4ODc4LCAidmFsdWUiOiAzLjg0NTI4Nzk3NjkyMjQwN2UtMTF9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcyNC43MjAzOTg3LCAic3RlcCI6IDg5MjgsICJ2YWx1ZSI6IDIuNDk4NjA1NzY2NzMxOTk4M2UtMTB9LCB7IndhbGxUaW1lIjogMTY5NTI4NTcyNS41MDc2NzM1LCAic3RlcCI6IDg5NzgsICJ2YWx1ZSI6IDkuNDEzMjE2NzMzODY2NzQ3ZS0xM30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI2LjI0OTI0MDksICJzdGVwIjogOTAyOCwgInZhbHVlIjogMS4zOTg0Mjk4MTYzOTA0ODk2ZS0wOX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI2Ljk5NTU3OTUsICJzdGVwIjogOTA3OCwgInZhbHVlIjogMS4wMDI5ODI0ODg3MjkyMDk0ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI3LjgyMDg2MzIsICJzdGVwIjogOTEyOCwgInZhbHVlIjogMy45ODMwNDY1MzE0ODYwNjc1ZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI4LjYxMDc3ODYsICJzdGVwIjogOTE3OCwgInZhbHVlIjogMC4wNjI1MDAwNzQ1MDU4MDU5N30sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzI5LjM4Mzg5MDksICJzdGVwIjogOTIyOCwgInZhbHVlIjogMi43NjM0ODE5NDMyNzk3OTk3ZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzMwLjI2NzMyOTUsICJzdGVwIjogOTI3OCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzEuMDE4MTYzNywgInN0ZXAiOiA5MzI4LCAidmFsdWUiOiAwLjA2MjUwMDA2NzA1NTIyNTM3fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzEuODc0OTYwMiwgInN0ZXAiOiA5Mzc4LCAidmFsdWUiOiAzLjY3MDY4NzYxNDU0MjQ1MDVlLTEzfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzIuNjc2NDQ4LCAic3RlcCI6IDk0MjgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzMzLjQ4OTgzMzQsICJzdGVwIjogOTQ3OCwgInZhbHVlIjogOC45NTkyNjQ1ODAyMjE2NzFlLTExfSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3MzQuNDU3MjIyMiwgInN0ZXAiOiA5NTI4LCAidmFsdWUiOiA4LjMxNTU3MjQ4NzMyMTQ5NmUtMTR9LCB7IndhbGxUaW1lIjogMTY5NTI4NTczNS41NjUwMzAzLCAic3RlcCI6IDk1NzgsICJ2YWx1ZSI6IDQuNjU0MzE3MjA5NDE4MjI0ZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzM2Ljc0ODEyMywgInN0ZXAiOiA5NjI4LCAidmFsdWUiOiAwLjEyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzM3LjkyOTY0NCwgInN0ZXAiOiA5Njc4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTczOS4wODA0MDU3LCAic3RlcCI6IDk3MjgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDAuMjg0MjQ4NCwgInN0ZXAiOiA5Nzc4LCAidmFsdWUiOiAxLjA5NjY4MjgzMzQzNDY3MDFlLTA4fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDEuNjI3OTM1NiwgInN0ZXAiOiA5ODI4LCAidmFsdWUiOiA0Ljg5NzU5OTI1MzIzNDA3NWUtMTN9LCB7IndhbGxUaW1lIjogMTY5NTI4NTc0Mi44MTM1NDQ4LCAic3RlcCI6IDk4NzgsICJ2YWx1ZSI6IDYuMDk1MjIwMTYxOTI3OTgzZS0xMX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ0LjAxNDU3NCwgInN0ZXAiOiA5OTI4LCAidmFsdWUiOiAwLjA2MjV9LCB7IndhbGxUaW1lIjogMTY5NTI4NTc0NC45NTI4NzczLCAic3RlcCI6IDk5NzgsICJ2YWx1ZSI6IDEuMTA5NzY1NTQzMzUwMDcyZS0xMH0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ1Ljc2MTYxODYsICJzdGVwIjogMTAwMjgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ2LjUxNTczODcsICJzdGVwIjogMTAwNzgsICJ2YWx1ZSI6IDQuNzc4NDQ3NjAyODgyMjYzZS0xMn0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ3LjM3MDg4NjMsICJzdGVwIjogMTAxMjgsICJ2YWx1ZSI6IDAuMDYyNX0sIHsid2FsbFRpbWUiOiAxNjk1Mjg1NzQ4LjE1Njk5NTMsICJzdGVwIjogMTAxNzgsICJ2YWx1ZSI6IDAuMTI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDguOTE3MzY2MywgInN0ZXAiOiAxMDIyOCwgInZhbHVlIjogMC4wNjI1fSwgeyJ3YWxsVGltZSI6IDE2OTUyODU3NDkuNjc4NTAxNCwgInN0ZXAiOiAxMDI3OCwgInZhbHVlIjogMC4xMjV9XX19XQ==", + "headers": [ + [ + "content-type", + "application/json" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACokAA4AAAAAUkQAACnNAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu1A1wwLg14AATYCJAOHNgQgBYMAByAbO0QF3Bhn2DiAgX12b1EEGwcBhTGLomxQFmT/lwnmGE77wayn0NBAJAPXITeLlQAVKYYKjM1mpr7CgS0HNgpkY1bqRLvLsXy3dA8XPXqvM/yN+w2v2FOlAb85QmOf5P7Az633/wJaSkUwMImTqgk4GDAic6S4MSrGqFakDCocigoYRBqEHnCIYBIGGExRT1Qeqv3690x3z90AwCasSP6ngswqFUVYHrB8VBQAKcYder52r1wzByMHJRZ//0+nNV9g+H/GsveOK0AqSpwZGZI47CReYMFvJOfQ2hTNUVES1lvdXXeyFKh29/XX4ACRY/9vTgMuqbMdO2B5UFAD4VG4vRkzpRE/HAS4Jss5uTZKgIn5b///mp923r+ZD/x22f0pcYRbsj0ne84XpsZN7mQyee9lwgszWcwvZJLFD4WkECjkFyHriuAA87NMWVUCV9VTC6S6tsdX+ApZK4nU+gqn6ipcefja71ffCTv/vpktBbH4Q8OmUzIhiS6SSKLxDYn4I3iKlCraxSKRmLCxMhnQLaUZLPeL70z9PLvdGe4aJpgghNJhdNDfIYfbP4Zrr4IRvQYW1AHHsRm/MoBA8QMAALCA4nacDoQBD4hYsRCpUiHSpUMwMSGyZUPkyoe4rB6qxyYEAgXAC0AAAgCBiIUA4KZAB3a3PfY7jNipySXnETvz4unnEjtv7bILiMECgG+hS5x7+iUX4AR8gRVUUNx1liijpQ3akVwcN9akGiFf5sfC53+NGKbR5WqKVWK9kAti+AS1eOOOyCvDaIwf8afMcFGbPJk65ZRuuRKVi5n34MXC5+eY8DF3ego/YaXaA/kGJCdNqR9aLDwevIQdJ0mKNBnyFChToUqNBoJTtOk4zZgJM5as2bDlwIkLV+48lSpzznk9evW57Y677uk3YNCQYfc98NAjk55Y9MySZa+9sWLVmnUbNiE0xggsAhGnnKBtjyf2QAgPTgoEFh8Jtbt2fBCTGwppEGEglZ5H9iEjajJmypb9zQ7WcvY+F29zpybfh8pFRalEVy+iPrfdcde9rn89b9acef9Z6HrqQ4ueWbLsjRWr1qx3vfW+d9770LXhbZuHCFeD868+CuUUv9RhOBpeRLDSKRtpW+4JClYxVTYdM1P8F5yw4yEH/bl6XJhQCcKlImFqL9vlsPiIpJtgDl7nnTDswuvDCv+DO1fDk/MxTTZl2ozHg0XCE4hnXuaoUGRvMwJjpuxnZEv+3pQmUBk753x56pZFeGbJ8s2IMhXxINvIiBgzZS/fU4ueWbJ8N5ZJIjmllGuC4g0HW6/PDdHeZGVFrFqzPhRHACMh5SpUzmRow4YNGzamMFQ4soqMGDNtbEWyl05HornGI/8uT9miZ5Ysd70RacWqNeumCoS86xhHXc3Jp1y9CINvDOn62prjoEx81Jz3IVIDWX7co1E3yT++FWYmuuNgIacdlV09TGcJJhPrX4ppsGwDXfCvkmLgAFmk6LCYxAftHyxYL1O0P9FCx9PR3lipv92N96FztJm7THzvXYCZF1CGmPHV7zjxlE+yUMyjYlkzeXrN1+XDXy7mZ4SaH3nFQ7Ww4uDmIe7T/PFaC3qFyJcS82v/iTr6GwvR3ze+XD27dfVbnYZQeRFxzohzSVz399nlr3kVWPXOwUJ5dHBrvN8bC/o9RRmDNlxKMCFjXvucAiWWoH0uC9Id0GRlZgrJ2SxOo/NX1BHQbaQBUf96uxZTd36ybZDQD2eu0GhiDfZmfDlc0VzFOlV8wKy9uuc9zoT+etNtsqFheWuKpVn11wnNyFUttlZgbJzVYnwrmDBpqX3O62J0xc3aVeaABaXbnkaGt5Tna0TncyyvCyiVfDTfNg2Tskx1qffMM0NtN69smvOiem3QnIGRMuk1rbqfMN9WYlYX54kVN9Zr843PpJvb6ivMNl+RmEB/BdWcgMMDITBSlFAjGMdJwzpJBRcNOoQYINvHmOh+Zu4HWLNzkAM9wsX9KDcejslxl1SqgpTK+nJ6LJP32jr7AVDWFUr1sbAX9oI4EVeZok7QfSSpICmKkKY4cpSbPOWhQPdQpggVKkKD8tGk3AhUzCkqSosK0Ka8dOguBhTPkHIg8915deAkWMcGli0ohh3l4ECFuVAublSIO+XiQfnlCI7BobVXOYT4INHaqwJUXCUV1+OO6HUPqn/XBA0YhnPfJMSUx7g9IXde/1qA99R9t0XLOL0eivXGOox6LVwgCIKWCEHQPYSoiOMCDwv1DyhKju6lTFGqFKXO+RXrwA1csBuEYRfwgABq5RhDmLJAVAIMYC0Me1CEI+XlzHGKeeAEnBafdFBUHkXlD0UUK7FHQxAEERAEEUvELYg9ALxA1QMUuICHcCSXIboBRsXRb32AMzlHPf3L87pFpik149XgSKLrYiABJiQbu7XX0EZ3qpa5pRm10HWgNpbmvXY2psKEBVBRiYumxxD0yfF+4RFhcOKf8uTBydDgQG9QA2iNNAqnhUWBFCuRLAAGylcAEIhW6rsQekPBdeKnxE2kSncIhFMQTwLtqlUHw4S5y9CmoHva/VBPrVxRoSAQJgJKgoic9kRheIYBERIBcwcACx1JTRqgQScM5u6itHBr0qhBsxat2rTrgDEjYrt2VZyzqFi6XHNdtxtQ2CIOaKHU/e2ri+Ee7MoA2fSUxbwhIBp/6EsBkrpI3jbygQfuiQiOrDHBHxAwqwyQgDwGALBLnUWCBAxYjpb9+Roy/wk3QM6CbfsB0CABSxQAnySXXv93+42ZtuaTv23HZhtjsRhL87XmG8w3mW8+33q+NN/tvsvue+KI0PgLi4TLN3UaMG7Gus+UbHrWnK8332j4spfb2B4r9owh3GMQ/P1r9sv3jkH4J/6/8X/35zeIF4eOyoczmc/Yz+9yx8tGBoAK8xg3HB/3Xk/VY2LM+/9p0k2ZNuOxJxgy/GvWnHn/WcCUORZ+dZZsb73z3gcbcmziBQDI4H0igCRkjW8HQ0ISbLrkpsva+aYOt3TqF2HAqN40JtW4af1pRo/H5k34z4I0Ty2b8twLDC+t+jetYVr3ydP0WaYvtr323Q9ZfvrtbfojJ/2tNjOyY0BujRxSHRqQl9GXAgoy+mFAYUY/DiiqJdZsXwtAMZBYr30DAKVAYqNqk4BzWWLzgAtZYuuAylpiWbUUUJUldguoyRKXBdRmiScCLuYjazwIlyBQnNDxd6jn4zYgH2sRfLeGyBuBeX8dvQgt3Aq6mTwCBwO5ip6gBxjoGBZbM34NE52ChI4XgbqSgsMohHqFmIhSL8HR1+qELePMETQQxH8ATAWSCRJ80KkVSFyshn4rVqc4xO4K9/sBbZUfGmjTrPCOlAJr8aYOsysMEbR4GDZjo5nqxAmguf2d+5ll4+q6dZTUZq1hMoksN66UXJTBBGyt+DrbhMcLq9Bk+7CpxVTXjuuYlC46w3z6kfH9bpWmwC9ElhFLbSMmAlXH7IyhWaYUCy19n4kkfj+MNwH1CXMxzHzrLGoTEVEJIpwww/SO24xCz4blyGgkPPISNVwJHMS8s9eaLgV7MO1MMFVxzgWKDObEffRpbR65hHZghKBm46hPHQIbxBUaIedU2SrMOQQSCxSYE85BZDigzEa1QKgIKEMqmHOWKIr7/orgvAATAUj2mnDy/ahrDOXUW7VsRjmHFUELlLgbeqsOaSaMtOVts1bo7cfGG5ZmMnzyvz7a9D8A49yfhKY0fT2zRlfuOMrMoba1d2Hf2SfChT0yvB6uDam/YVYHeti3rIR00JWgXBrYWqccXULUgWBDLc56ozkbZOKZwbkbwr43STuwCuPa2d9GGGB7Fc7RbV2Y1ryEAPZ+fo+bAVMVWitQuWZzibW7iEwCHXQ7lilW/mPjcU90+t1SKzITRy0tdDnD32eBJegGqTt8gwv7C7U0By0yLHifOEbuQI/HKbSqiN2A7cIrLxEuI4jzhl62d8SsW0WgmoflnBB4zekZkQIL7kLPmy8SnYVExDCJn/vsvX46iwidi74aH8QGlQbnqrSnHdb+O9sslbarcTLIeXWoS3vjlXrP/Atapqv5ib+Vp+qjuFwuDUd/fyHu9CVTIq+qFWJV1Ca09xxlk3lq/Sq37HDeHFvIRQz0Bit3uYQ2MH0kRGaKWNr6gj0uyh0nEF3uif0c7nh4lCgrKdH9hQwYPB6dSzZHuxICRr/dIPICn1SQxKhh5hC5lEbayfHCibqcyA3ZtYkTVgm64xjTZc9SxrTlX5q0if+LMeMTHtRHRueOGGKjMO15oLHaiPWlWmRl/IO10evXz7Uh09LcSPILgN4V8uqJuvCbsexNLzoP3QgU4zJftrAt4TZuhNhSaFJDq30QNy+xijFVzLR5y1ZKXp6namdX7u3I6Z6K8vco9tBP1UZPnALuwG2CMSEhWTElyCqRQIzcxyntYtKFHuO26n2pAIJzuhqKmVWMk0lxlhMvhrOMcQYnpoV7MSCclFSNxvg5F/MSasrgQr4o9P/8ce7LjPQpQTUxFy4xpt29wJlYCQSLskVnUbXUlJD+kq+gImoiUOysTerfknkgSGBDUDKkls/jNmRXBzLzuE4Pph76s3u6BjIpbNN2/uUtpLEO4NfUee3hd2ICHNJIbu7KwOJmXM0OKEjTZcEy+gJZO1A8QqI9juOkuT8zAuZZP3b47Ea8GRr/Yqom6GrAfgurEO3uc8eXUoGKktCRgBAsVnVIoJf9NmMuK5NrsY9ALjf2gU9eNkQ3qYUTAKnCxlt0ZamUlmPRKIzah/3WyZgfmmfwywWHYariaOMQdaAnLtycQZ5AEUKtcuPbwWIRiIXc0guTOqWrEHyCxSaVinmQAkGenh5YyHy4OjCmRFbrOukQ0opaxEEb9LTnu4pMNA5oajIR6FNAvzNYBLI5H1jCNkosMq20DStOahu6Tl25xsb5RqciLQK1kSpeRs15JKSgo+2DBNpTgyY1mugTZwLBQyFZ2LYikcEqfUfXzD5bqRfbmJc7cYYTstDGs2DiLeG4oBCqhtfubuK8OpzZGwftSZqHgjNcMqO0bGJkQTvYWwXWjfQkKZ/6Gt0O9Ma9RrPA7FkHm4ogchaY4T0BfhuQpl0SlqxIwD6dfNlAQepRTVGp5sm+1YGJbv55UKec+VpxVrICAWlg8rr/IVfIahPZWyD4cFFDlIMc+CTZ15JKxmYxJL5x33PQTi4/jNDXsEHs6OL1DQlR6YioBK1LayaotNggHdb6wZHpOYgdxN2h7EuKiQ2Cu82lamU02Q63JmZzS29vUgECR0IeX+G5RNlpnEnO7QNnchXLXsAOlQQHHeTBg7EsUtguvOiQEKbkgjf0n6GjHfqwIC4SWja8GiY+QtaysAIH+Xtc/S34rotjyJiIgZU5ikRm+iLHHqKCu1qwRWEv3fudKN0MuGkIb7vVjGeHHxCp9OWJ6ErT2plncvoXMmdytfNnJjFy1gw9xNMkd0saBFfI4o1358aFbq/Y7HG+0KmQY85AZYiQxA0RN7R7GoFWI0woIEO6jdfg5/lv1W9L8MdgGrzibDAjUzPbmi3IYPDcUi4SpawuXitn7HSA2yOtc0ts4mgYWjYsiSiVXBuGBQjXZXxxpS2Jq6yBdvXRk6hLpa/aV6B4YBjv08cEdkBW/TjBgnZNauhzxqZs3IZtaqmJYIwCdm2CuAwGScMv6WjknojNJSYEDVznSdIe4CUSKBCkndAmwd2jkRJS/wOiqKUozXfWEQvrk2GMFeh/k3cHmd+e5nwHpxKCSAEShab0a9gp/nOaf2S/o/xG9ll8TwiBm+JxaYSCbbEJObCxpFX4W0prjI5tAu+5849d5//w4G4tCb/Zm21f/T+Nbt3FsPz5tFFX9NlIbH+MUDEgQNPWNDZJoT5NdbIxox4IqtKPpOXydp7MulwVpi68NL3QjJdbr8VparAvCppfbCLx6mT+zMWP3/nLtb88S5po6i/tPz5fgrJign1I+C8ng+NvE7413p9rF168tNQhevfryFZSZJG3V0igtyMl6O9ysaVvgGqGS8vU4x6h4YtDo7tnP42xk5KyqVHRYYBXqWC0NOfkNTdnG6U3N+VkdtbnteAMzOxO65jaGRsbmNknmTiQDx9VYHY0ZGa1N+ST0xqbRVsbs1uw+hYOOkQjG1NTQ3NbbR0zW5Pf7ATySWpUAhnss/zDmi+ftaPolRu2TY+xLj7oy3F1rQgy9SGLmmrRS//lS2yb2xGz9qqistCVV0fiKdba0at0F5p/aiJS2moXkBRu+nbeQdPeSo9s6wkCN9L3MS9ieyHZcj2+9pNhhq58fh6l8yaHGNjLty5eiJdnZuh+NoqrBqvTz2Orv9swifLM8rOdS0p795yfyM/+IJ+ZrP3pVDKTYxpEhh8pOKo1y1L5Ha/zu0tFqbapOo5zFQVfP9S1p9gfZN4cTnie0LXRlfQ8qXwDaslp5pouMkwwuPsMOiE4aBZsOflG+ED4727GZgRNYxN9XVNjqrEZDCT0H52X7Qe9I/6E9zqfNz6qoQo7hPeaXz69V0QVtoQnI+7F0SO60X6TR2fG42gRPegI/N26X+yk+swhIP7btCIQRHWqtgyiJvtGpxYmsjNiZl/SSme/zt4Ji/uYe943oR5EfcllEZB2JjQoNCrSJzHSlR0ZfWs2gLH4Y3HYJ6Hd5x+6VMLVuBHe9WdPeF70sb1S6GFnUulRZzPjmYVAUOK4MXxDn61Pw5dKkhZ+SWJaEr0OQcdji2X+J/qSrn6ayTNrXK+e/51eTOBfc/d+4AuOj/SLTLiYk5FdGavnesQG1Hbfun/wIcp+umecGndz8Pmu/55jhWYX+XVxtsnULo8PN60YzgdNTK5k3ltIvMyZ3AAkf+lj/tJ/txSbX4a/APGYQkhYo4f8GZW4W9QBzMuFp9hX/bT43ghFd/nQxpC+T08fTX56yqdsHZrCmE1KDwtJSF6Kiz+44xkW1xdC9fcLpfWF0kDxtXdsSt3AG95nRWffzaXmLyFkYf0c3xov9MD9o/Po6sQzfuNk2yPGnpfTh58ktDOyE5tANdr8BVvFmjaoYk1lgw6b1+OBR5THfQ94Fx/8+pMaQh1UQ6ifwL0tQ7dm6M75BLKHm4+LQ5CXLRthbUwO33/58Fbd+Zq4GF0TpJCtdsrY6DQxgiXDv0ihT/A8P5cl7t3QuqBkyjQ1KTn3SXBi15Uk3FBBuF2KtIOuspLQaEZA2iKuQyBSJ5M4IjfcFcW5wfM5x+3gjWm7m5JfjmeNTykE/wmZd3no/oT7OI/gcnfKl+2fAYtdlacfU3kzjfOs1Tw9Dtic3BCSj8idAS1FWxWaDccRf9abIzQWp+/BxieuUAY4Fvs7MjriF3Ix8B/aoRRWwiT+2bfdReP76Bm04DfrWNneH9EMik9onGfaNlh0Le5++w/2ZydnfaE8OpE1Vawp0HL9y3Hc3o87gtUlOQUNrM/I29SN5u915eUZwlWyP5KdgzJtdaceGU/Xayq0jHL7rYg1jM/+QN5ab07+HAGdqByHgdsPegDH6nrUXeIA2teCTYJ/A45V8+hSlwlYwl2LgL3B127ta6hQQSejTE5FibMPfNr/6oc0nqOV9RXdiNwYw3YNWTseODkgBdYpsPNZbubQi/z2yPXYgYs7lzpH5DLsHv9+jP02v/J9dXKHGkUNC4hh0kGVWt851nI32nLbW34r7WccHf7nJBTdL39QUjEWHBhliem7iam4kUWM/VI0VWzF54bYrLdoykuh+WAdCb8fK+PiuvyukOrm4/sF1q+vzZfqCbVf7xJpP3caZmzmzhkItfsJtZYTYXYHu3UTaa7vAeS93ec+XGNz99/tivYf+A04luzXg78fz4tu/j75QCEzPykmujAvEVEH65Jr02lyNKefQ3Wlql8fGbLOE13d/MS/sdu3fjfXnfSd/UYPV1NLqlVBTPHgBw12eq/mS/JGElUMPfh2af/CphSmRNIYyekID2g8pnsxAz2DA4ljCfdZB9+sVmxGZE4l7UQVpGQkZAV7WpVSbP0mUzwbI2/umf9Uy0ktmcz+nVCXeYHBoIApdmVs5dfK0KN0MJ1jTb6V4v/+/3HuzUc7UyWlF4qOqYxBmdbeY2f3SIyyvkk0sHaD1eUgfqzRr9041pagnaRgtyT7OrL5i/+YoaCf4SxIlV5R5Dt26/HgsqTGbs3dJ4aWex4fg/DfFl2iB9MrRP+IHiyt2Aep97kfaNXLixA3Hh26BIdHZxoA79hwtwI4nlQAYsD6fAIv+xngqaASOJ5U3m0CvGMTiNs1dj2akplvk56fBM2U/vL+cpAoe/yAT243YP7wGJyNaa6b7M3ugJ5P5WQ7dz8v22AbItuZVvnAMfHeq3to+9sSKQdBtNMoyeD/R+mZme4Ohm42QDoitPNSevRecBYPdQnwwH4mKP7a2KvjnFt4VvzV6NrT2feIeRej4luQNtDocKUHY8xXMX60zvv+tDdcxzH7vnNIrQxuvcTdXMW4RdPdopNboUOSldQOFsf+X5cbbg+my7ABD0s8EaHpN++9V9z60pDUQyvXZ0zppZZHJ/eBk/D6wSNbB68k/HmVn7v8eR/qM8ydUV1FbwpipiUQvRYo3KSLfnG5AgnTQhyxZxLgCbOhu8G3e3y4m0gWxN2lq3Ze91rqXmKC9bGdjZMjvcEp3KHP9s1xfntFf+1DsIwqjmDUx+amJRsHUa/e+yz75Vsdoy+61DBxST+uNIZxF/YMj0Rn33TB5gyz+yK93DxKyKk4NuCBLZLZBDYiqmG4XvkGaaiTjRiGRrC3nlDZWN95kTQz4KQQi6bXidRmn02HhHsPXftVUw8Zq2PFQ3ei90GytP9z2iNCwEeeYYw9tWygNcxf7xxFBsbZA4HOnkG2QU4iZFhlT2Dv3SvRihZgE2D3CgGfQC8atsGlPWTfDXTy8S8lM1A2ASxOXEz88yar7JnAPu63nJfifq1kn1sVUvizxdmUfWc7q7+3Pq8/lp57B0io0K83MgPXKFSEDbjFl1xhlNSesZcn8F9wV1LuxpQT417qJp6jpvWBxfE/69JjN4KT+CgLgFtk7wRHtA69k9v61ph2h1pkELdhQCugMnrhH2W378pNmskrbMJbXIxjXrXKAVg8rkshfVe2kbzh2JT34fbNoY/9F9iGgW4OVn7GOhru2gd0rjhYxDqWfOkeyZj2PNvkvYG1p7v5evkagdicLkd/d7+bDv60TMsdmz3moqr+17qvcYDCAIWSOMrqnhy+y+6bauvSTuJiE1bh54v8tvhfe6mEf/fWE3aApGjZ9n5TiEqYWF97szYhxCBsdr5efn0LACd9+U1E7I/x/ndm/gy//TFjEV7YHj1bxoitPPcR2FT9cueJm5uemMURt70jqnhIHiQOhV88Ni8+YlkJXoFePnjPuVeD1wZfz6LXu5evKsrntqvjfi68andpd30zh/vZrg52fE2Av9cEYotXNTB/ZtZv2N+wfz+N+XNVQz73hlLXSu/Eq6FrQ69Gb19b6VYC82Eh1t3nBSYJ6hey9CROkMwC7QbbbiyWmTAIRel6hyVJthF20FL+GGGgiABNXYNsoqtHNtFQJ5vo6ZJNwKLDmR6Is1zBZI48KhZ/P/H+5uGHB5f2zz08dPPwq4mXNeI9/2GqVvCeNKrr2i51ILOS2mHH4K9mnrbrgfv7HtgEyYS74nsuj1dxfHnw89259ac93zyDgjycA1KDOL+ojwNpJqQ26eGDmsSU9LxCZpZv1ehEaH1hSV5hflFl1MBQJbWoNL+o9Byl9sGgd1VOXn6RRlp8TNjkXerSXVro5MfQh3eoz+9SQx/CEWFLnBef3f33FfI58uflZXdkVc6r5KhU/HC4LwiZfOKr4hOr26tgNDje0+rE9O3t4Bt9v31oYfoLhFfRs2LzPCzNM1z61G4r3Q1zuxDW0+xMVCRl+rUKPVz7zPPyEZtSlBwTn+NhY0d3SAscjHSuUAqzEjEVD5FMsPaxL5O7pvIiSo5mnekFuDkHJT1SNInkRyJF65EmFD78Ow0Gr+0qOi8T78x2n+m8N1tb115fXu3lauPkFpAZTYsOzHB1drbyaWA0lu8XbK27KFBXdciu8pBAI1Go5fwha4GmB33OJmMpxmN9zmV9zuSJoUGj8dvO4DkgQDKzTohOiwsOb4rpCFBOpuoaKSm08wV1pmRlXyhiaHnvs/JMlbI92pxNMQX7U4pOoHU4egIb30YCh4WrNVsLPJzAEY9FF+vzNvsutDETaXQd4n7l8Do86ZxA1eAlM10985qMQgM3bTVDQ4Ib5INKA+/V2qsgShuhXKhZOl8ZGlZZuVRdQ8lU1TdUVdE3pZBNg4zIID2c7jjuyFhg+I/7xy4IH/tlPWINXZV+ifuxkQEkGTsVgq6uWh+1uSKzsCr5bEiwv7dDbuRZEBgJs2Z4H7XTUSCeONrnWx+fVnglJpjOVCqTKqCwEgszW5PO9J3QV9E6PSbjnwFuIKwGu0XkhkFUn5CA5DmlUpoJMUJswgu8vSulNNZMbWgLcIvA4LRa4/w9P8f1Z+0w4FiQf59gbM40MSecMjcm6poagzbaUC5WEtxGq8Jn6RnKycgaHrHEHsoBpLKXMCFfEh4tDBxU70v3htT6BxuNLt4eqqm9O1zXifVxC7OycAkBLytvtzBLC7fQAKCVIfEqRUYWAcHOXhQPbzdnp2Df1e/efpwemno10dNQecXVzZzMFSWyraZhaMKISRWvjAnQIiGN33b7lu0RFVXWy1GmwPljo/uF75+3VgyMFcsEs5BTumOytJzw4Do1jEgggs2RjdXr2V2fbuJS3lK0OTQUSJorJwl3Xhst8HMoaCrZqh4ArVMDptOGyYd8CQ52mRutevc4Gv85c7D0mLlq8Lbo96oojSX65avg5sS44Ef21kk24Fhbi2vbiUWpz3PTYxGI27KeX9mcuj3f16Ij5q0fuZsoeZJo21VqlWXattAzZtV6wklh6GHSMTVvZ3uSooFLR6ZVppVT4oS5tauXVQ9mGyy8RH7nXiKazdkyWeNXq2s32971k109Apxco5z0vgiV7PSMvghnpDHHkdlN9EP2Lc6c8zXMbIrmoFGDgfrMabWUHkIm4cHjkUCE7mGo62ahdG3dNyl7V9LIwTOhsaByfO9vzmKbxkT8SnFezqvExFdZ5ZFrkwmMkkgXhebE2IdM89C2M4nWl6VNhjYVWczrdPPQgjXkb6pukZTTVJ6U1xQekTXeAaQow6+zX7e79I1No4xN9EmzWqZNsXU3CYaR3KUETWNjGzamzLVRHA8bFhT7Tw9XEMtm2t35ALnkU3NqsnxLtfq0t4zXqma7V5yNZZpukk6XlOOz+oEUJfT9tdxQEf3iHJfY0sHRrNHXx/Fb2Ma03mh2iGlsAhuiZsC3UTi2ibOklBdpIbQXCXKXN8c3Crv9Mvg7PeEwcNtIYb9vIK/GGT7Xy51TcFttsGsGXE784Jd7+TODRbS96R4K85voRlYrd05RDc25QNpQ0aLGUOcRMeZ7bkdGx/YbvpPoF87WjN5YekbPQCPzbgwts1dHoM+eniUcc2NfRGQsqKh84BkuryqrGuTjFy6E3QEy7slxrQl0L+8EemtSnMC0vC5RTp54WkFOR89HRw9Uae/Ck4q9JFOCTrWJnTCSK+MITyr31LzkrHLCSR4EG8XizVwYaGHFXA54BswA91eIN3NOQ4tr53ICg2agXTrO3C4JLS1dzAA3/2lgaSeZ22Wh1fcX+yBE7YyC73dikrljPqb84eJNX/8l4EzHeMbE+AXSY3yOe0RHB/rGRCFucEp0u6DpUIbwoYwm2HW95UX9rtguhJbQ/1cOQu3KLj9cx5W2inAPCfGH9P0pcPwQB9Ke354yH1IH759/xH5TGAfFH/kf9j9/uY2zzjffL8UPdLbCchm/u208JBNICr4x6JplVXLYYt+xiWz5qAhfL2/9ue45ZqDncpXLT/vzmYz0uG4oObvzx+8NN+eHRuJI8oBbZa8+R1MFHn98IlP+bIbNpDKnhJbvVeKqEqcWh9wmuIa+YTTXfRvYon2xpqWopLaltqKmpqO46GJ7bR9PCy0Kre1poUdgLgDPY5z+j4KHpud5z7rbdQGcMaE/7lIX+7bmwDtJuXzjnJ1w6SI5PTcjLuZKRV5qezri04u1jqIlauiR9EhkOHr0yIXiLA9eb0P9EBozP47eVMEsbW2sUnzyaf15ebOs7tG1Y8XJqiQDNSp0tNm0jdgkdZ+LgXNEaqRaulYK5VJsQV5dTEhKulakGjW4kpaaVkkTP6S65UKUp/wdbp1rdRhxkJT32gVrqroaLknM7MSYljpG7uUG5Nyp/54tvADh0sIYa582i6MGRrpEFWWiuab6KRJcy7vdejvud/wYOrmrQ3UPZzdAdj4bsl16trMHJwj9C8BBaPxKa5K4nayl8ATWSLdXfZuqajai9urlaXVLWl1S43gaFezUNHGc2viWGFVqfMapNI6ZqJrQkGIdrVlpSR2gMlMI5Rq69DmzV4hdMrcHAWfs9BAoTZU2Z769bOXxZc3VFkp4xWibBOFYwgTorrQA9CHSRO6XW+RWuU1ulzugk+IJJrd2XG6lfjva1JwnrQ15Fhg+vshoU78zxce0UticGgUkldh2f/wL0iv1vW3a8KS1TM8CWeMproOsp/4470mj6lkw1MdTho+p9Irw0VTODQiyMjyVlWFRVoYll3JHw5maAiAoawJL1qzs8owCRFg7UwQYHKuvA6APmyGAR8X+5eSiA+FGlKvISqHXVEyywqAtG9PLQDYOESOUrdi5bKecB7mT9W/92UnbzKds/CivQ1ggaPNaTYebto+Dm7It2LtszSNuSJ/mqPEUqaYzG67KzmDhcq440LVTrjHdCbAH3C3KLoZujDGxdgHfzSH/3ziKTf8HIG18azVlTW7R07J2d0c5mZEt3MkFd2eAu7W3sVJe7p0CX/6/fltthFVFKkqjtj7zaoWWRHyaxBAL0BcngJzxrUs1ANWoinudxTTyo7X3vEkF7WDJOkHMB/f2PmpRAYPiGEZh1PFXRQ6uOCwmCQHcLjO1QlaXT8roV1cmYLFRH/qIMoDdb6ZdyDqrc40JgDyupesAej3axsPANaHW0d+K3v6VKQO4dWcnBYyNfnCmBlndj15UYmvdLQVZXYXCAbDvSi53l78mgAvp6tvmI7ycB8vFRn4rC7Z0d8UzgaupqRsZLwDkzv5TIUDPRtu4pZzR/x9ttS/uo2IB5q++zRLVtCeAC/F3TemP0Fvzeym4EC8U3sW+Oa/B+37nEQDoFmu8ZrzdTlxV63fOfcsBAMDIT4LbAYC5ZvPd/8f+n1vebbmzALigAAAQwHHeYgTAdW6gdaFbBSKcajPz+Ekgi2VtdCuFUcG/XvOq0KvaX/LtBzg0FzbxQEo8IZXZxItGvw3ZH5eQQ0tmykBTWTCTZmJNLIkKSSU0YkCCXm33OCStrZMrQacrTnHJSMkVWjMprt2WUOdV1jUFdIKyYhLzf/dFofSrNUJPXZ0h23k0yS4yQ7itdzJmqjhwsrzqj+7MMqlnKY2qS+yyhGbcFLoA6XqJo95gFYoY6USEG+HNc6lmNUzcTbHsuFSqhFJgWYx5103ZxjzZymZTZ8QGj8RAxo2ShcMjb9pOU86KrQLkSLnRmOFGDjONFpx1CXp+s6dvOVx4h3IVL7nbxFUagep8f8S7NVocxKxEfnWDR6/hXkQ87T9Z9YNLZnCf9Dlmsfx8zbHCJMebeqYquSWXCc/YpjXvmnpUiazbSnKTQegpCAFh2s9hSjah52vufYbz9A+ryVFgrtCbZYzt0mfeGYLrgbJalzUNMqomgVWMVFks67y0EFM46+Y3I3DNNWVxTUwuiOvSaiYFqW2Ab7tDuU1RShGhKY6YnJTioazeKCeihEYwu6wmG9tUK49HpautZqJ1h+zsKPQcWAqIKVEnqsSSmJtqnhheK9M0WhgtmepO47uVyu7QWpqtDIeIjQmvctt4GOq3VGnMpi5Rs9OaD+OCoIJ9ijAlxEZ3q8K2cSvUZp3SmC0KHW3jbeojAD4qtIcFXFQPgB+g0B3g59viFAADqeUBeIDyWIQYj2NR/GIqMalKLI7FOYHJ8JDbG+VnZwxJhEixogQLFIRKghIFiqMigSxCBQ3lf2Jj4XzJMV2HhIZtGOJsxPx3x1+U6Iz5JTk2Ivg0hJqUYJ7IBqMJo7HA0wrlnUoclChnBYvwhxO5lcrUnXqV0epC08uiW50qEoH8CHRHjrfInPkG3P3JiRAlkIUK83VE+Guys6hlxhiJAQu2q5B9cEhhYPBIf8/JTwAA", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": { + "data": "d09GMgABAAAAACoMAA4AAAAAUsQAACm2AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmXocg0oGYACGTBEMCu5A1nULg14AATYCJAOHNgQgBYJ+ByAbIkSzoqzwsjiKkj2aj6JicZf9lwnmGDrzUL5ooaWgICnvqxcvLU1UUm052dq0PPEbkDL7t7A4c3dKponrEu8IjX2Sy0PoX9DLJNk9AHsAO6uC0MkqVZH48wM/t95fEVEDtBGpESMixmDAqNgYMLpGpmSIhFWEFSiIoIiFRIli3p2nHuksZyTDeXbXshPuAKlMlW53Zbg7HZue7/8N06wSlnxFE+rSAhYVkmR44D5FCo4yXQlcOX/hZsHaQuZYMcQ8fkufGldr+uACwqKNzkSGPbR7G1BVUZ3KOl0lGRYOQuDT2zTbfVpvBF5fojuuchvk6YE73cxV6dJS//W/1qu/X2vQGiTZDshHKx3JCpgmIwjIGl8FXKUCLIGkY12AuaMOqUzRXNWnLQmqS1HWqdIFnu/vG79/2raDcUAPMPAMtn38TkB/ouZjIAEmGGgThZmsWZkYwdIwtsYh6+N7ZqYra0NPaN1poDFKzhjB6Ep9/G4ZTnWidqQaNBB6+Y1RoPACsDkUTvsZQJjzgUiWDJEtGyJXLgQLC6JIEUSJMohOPVAu+QiBQAHTADNAgAKRDAGmosIAZt317VxBcvfkGAZI7h0THA6SB/jHRYIkDOBDaNj+e8ZEAjtwbBhGLXC2MFFLe6nWKwp1sS6WQ4VY39XdhkP/X4wChWLH4FC8KPFQDqMIiLjGjWJFabOIvvgn/jQ7N9ClKlWDRqlUq8XUxVp68cWGQ7/D+N36//YNN54bY0H9DUgUJtSPLQYOF25C9jvokMOOOE6FOg0EmrQR6dJnwJA1G3YcOXNB4obCkxdvvmrUqtfgksuuuOqa68ZNmDTlhpvue+ChRx6bteiVJa8t+2DFqjXrdnyE0M5bMIiE6TpAn6hZohBCyQ4q+IddgvVd259GlFOFNmHm+YZlbrMiWMMWJJCru+Uaj9zimRu8ySnLbXUJGnkTtMtp5Aqu4hquY1x71htzeI55LOCF9rJti3iFJbzGB6xgFWtY1zbasoktbGs7bfiYRnjlVP+hPoJCwSt7WIClnW8Rc4Vu7tDP12bBMR5M8483PCX8SrDD5C1uOcErZ0QkQ1pGyk5TrDylKDth8BBmTIBbLvMnBPCBG9uCt+WBq3CUc5cOYxpP8BQzexSGw49L58kUZJkbrABr2IJMeXnZ7NTgV8uoR4P2sg2LeIUlvK6OqM1GXCxzhxXBGrYgowwvsYhXWMLrdWPYEEahxosAu8OGlMtrXNyHhK8kWMUa1veMxZ95BFGHRjTRCLGDHexgBzsEexZimY2sYA1bh5RM5GSge4rzwqVs5y8Zi3iFJbzWPsS0glWsYV0g5P5oijmKkp9O3nw7kCfXGOc3/jcHxSZ3fc4WRHYgzYszl8Xt4s0nAnMbv+OWL1BmKuw9jcgRaflYdnZg5ZSinHQinwkpJtdyISq/Exs8UN0JBvTnxrwgTdysfiY754dWTK8Zted21jPU8/6ErTbDLJtDyepp3/I79jzdpwqjW9NkvFDxcrFn8ct7uyI/Nw20ef7NquSYG/mY2X3qX1lrwCxM5fcKo/9ELfnuZQg72j1T/muh/JezBlNxFtf0x58eYNG3oste6z3I1ae4pvIFyU8FzkQfejHes5fRm2qnDgIE807LfcaTOpsEUuLOw/wOZH8rylWi04VRGvkSdfjzXLcqGTZ0Ft8w4B8+d+iZ6+vzC6o0sWYSH/HEcH5jFetUsY0j935Npssg79F/4F6kHQmLa1Ms9Va9TLCHGVYlSVrgX3FCh77jG/+4Jd/AaEir86/WBqxJDUpC15D5baQ+bKJ1eAepuz3VUvN2vN56JxY2PSZ7AvMVJjZbZ/Wx571F+emsX0bLt4pUr261+xXWRibmZHFmW+n8uPjvZqdsHgYZaJrhAxFfgsQCHC4IflcVRfA32n6HYSjRwEGbwf3enCUJ1lCaXS7DmStZbirwzBVR+dinOD+oRqNDmr4ru+S145atI/8AunlBIbSLGGJIJak5i3JACQcVcEjEYbGU5XRcLiqKUhehoTBteejIiagkXcXpyU9fbgbyMRfHQjaWR5G4utgTpnSBQYJorrJxU4inHKgK8paDj7yKT2w/DkNMHU5SPxJDTCOU0qSUSznisnEoE/8JmHQT1n2PIabN4DRLObdnXsB5mYtY9Bq75SrGB+vQ4jU5EEAghAngKCphl/AJZwLlKIuirBh1UQiiaB15BevihAMRhOCDC/6lVKU1hC2fEJFAgwk0MkS4y81DLM9ndsFgDx65EKVUlLIqoko1UQkRQBgBhEPYRZxEAe6EEg8UHHAltutriGyg55hs2Ia9sP/pma3UcvNIgV4p7wPbWtuZ49ms4+I6jtZ3MR7rbeZo5+bGbm7taB/butgGVl5gXjGwzjQ6od7j9jgoKgIO/FOeB1A6gBbqD5oWvarVQfERMeBEXNJTXfov3YSsODZL10PI5bawcHipoWJqco0AdmG0Fahzlbqh2bDXCVXlnj+0tNzjd9JFoCEQNgJSIKK4OEEIjqMBwZ4QEBpHObSmwc1GiBZw3z09nPr16TVg0ElDThk+b/Qg+WyPShErzpjTzjjrnPNQEMJkgNr64xos6Fd0dVDm386rLwuJ+xGaHfI4sBiwjhfOBls4WgIeLDgTDv4A7DVuCsBDrgW0NfsYPDw0GIp54gptJc57XPaBKXbA6vAwxIFpZegI/5mdcMcTaz75i6gWUtyJxViaCOMl8bJ4BfwBPBFvhj8Cf9eCM/39C7yAR2e1EZPuemrdZ1JcdhbCi+OlD61TG8kfuUI0b+DMKZD/KL48Ms+I/9/7//zvc+8ypk6ZOG5Aj0fefn1zjikFLImVsdORlv+39+LZLrn3l/f7z5Fr2hNPzZiVJ98zc56bt+AFloK/wve6UJENm7Zs21HsI25A+fEeyGIo1rRLVExwDJpyHe7F9bgLuyt34z7cgwdxMB7C43hAeQLH40m8iAeVl3A/XsYbeApv4i2cgLfxPl7AB/gQJ+EjfI5XlS9wCr7Ej3hb+Qmn4mf8gU/wJ/7Cafgb/+MrZcAZSkrfq2UFjzO9ZWtpG4+z1HjC4xw13vE4V433PM7zTmY+8CwAzgeTOQ48F4ALwWQeaT6PS9TJgh6Xq5NFPa7wTtaQ1vS4Up2s63G1OjnC4xp1cpfHteqCM9mu+6jLZofKv/gMfuhW3pPiAU17HJjlQVDfAHEIQIeI+YlHYKEhpagtUCaan7BRoLDQThEoqCOLAJWzHoFQz5cnRaEgTFRYKkwRY+WMAUjjWkaXIJEwAoNOLUHcfDGMY644+bMo8P1hJLwSUN+asKZZ45uRjo1YMxyWKxyRtHwY9rOgmds0CKCF/jl3i3nj6npwDKJXOkiXSZbceUDhogx++TB31vdN6ZQnaxvAQgPbYXpfy/I6Gby5BrrAfAo57tf9GfB1tVXWWnuVU4GpY37ByDQpciH9rs9Fkp9P443DfcLcV8x96yyufmrJu5efcMIUsxvuc0q7GNZjpZHyRPs5yF+Nft3+yuA/6LcH2dFJjHAgZXAZJRIrN6goNldD9qlBbULVGSsaoh5oEK2LNnEsNozxNUMUkOcgY6GEwOWgXGdoIAytWzkWqXKsImVogtwlQ6QN8eIy43KaUgRlyCHLph1r2AI9X9Vp3ZzH4o1zI21kn+12int3NZc1cRD+pVws+BcrisPZ0GTWgzeWRs/8GTt0dqHtPLTxTW/D3C0Nb4WbLdHYNhtN3WpYVp50ki+pRNOGEQ3TGe1XMQgbZqEtbIgFv2GLob7lvxkOXHOrQVt7Ed5GWJeVDTwqrq9hZ66xSVL3jemdwJRJq1wbKtXMS5RsB3cd4wyxAPKkX7WsRqr4UBTVodqIhaMvIjaz6kPjla6hfx8DZaTPbfjoYxyuhqsJPQaOci4eSa7i9dxYeCq5d1aMAgpd2LR+JNLCmbR5fPmVlgbeuLah8bWrk7zjSbyg6uCwN0H2uIb1gvYbHvHHMPI78fT26Z1plmlY57237cR6slAinFkaTXsr8XAewr3w+momYZWzR5msF3pxUIdK5nei6fZM+2y4iu7NclQfbX/3oD9FtSFZjeVptS5YHdzJpO576objZkvUXNJktpdTQegVeg9Gzh5ZHQS/LZxulgBukUUnpQKlD+SqF0CN6zCTvb0ge2b2lOwzluW4B5tBiBIDlsULM1QhKCo1EytKj8N4somh9ur6hh11ciy3r59QPI4gw49GNFn7I8lyUorpYmXFzjZFpH0JWquDrEFBcpBGa8utTlysjL+82uit732iQ1pvhaCa2QM5MSLq0N1X7EzVecMmY510zPNyN+SKrEi8nktuL5OjLasS13VMy/usRnKieE17mxmz4I7q9uTejhz0H6VBrCCLktoO4Do0xSxgGguASIz1eDdRMHGDBqJH4xrWmfZU8FnFQKiplhMeNcfLAY7wkEeRkvNbHPtl1GhoqSMIr8zRc08vrfOrukNlnsFPH3XFAWJRHPJeKKpxULH9tiq5HwhfRkoogqAEVPNr/U1Gk4S0wo9pUSYUzhMD/Z2cKSKASmK6Q7XiprYN2yaK7MTN1lDiefZgXJDF/FFdp5SsqD0xumuYK3gTM/jD5bS40vIY0TEdlLp2etK4TCObfadRkLW26S3ICt+EabwQUb0NORjj9tOjnxs9HEXZAQfv8IxenpliLP26MSoQ+VEge76lti+2vQJFXjSImMBJx3JeyRNABXcr0jrwoOmkSCj8ow+n2qIquDBOM1bkfmRHQZxO66uEndYiMWz7Wg36SDwGTvrpVJ8M7WmLNRxIrMPxKynGGUzRXKIms/m16TyC3OwSC+PaSZzFqBVyXQfkAhKw2ODi0Q8bbOFZraQiMZYMOa193XxYXDO9SYRoLxcBkkPjzs36WsU8toTC1kPSKODcxrQN0RLjyLRGYOq4RmBPnDyqCNoi6dBIdQVIUEBK9wQVShR91SyrUlkWFbtzj5w13eK2As0rWE45U5zMAT982YojPiwMPrBKstKUGlMj0jMV1NsIworbxO3YX6FkvXjDXT7YnZ3giY5LPcMPCo4JoQPHhjEHWyI9+H5kBI7Jr2I9+t5IFpk+4lFZEfygX9jxrUCfWGTElirbElcxYKGs4GLzWiohxwyNi6K+CBbpYRU7/8WdHX+A4hbFFXkIf6XuFwodK7Yp3qX/QYZY7RAXjpn9tdnMGVqD4r83BTShxhFk7Dv29m2sUZsWbUA4pKLGbZGPPGjI6EQSrONDR103OGFBrMZiGP51aOrYVpprLdmIMnevqUA2g4lab3f2wt2O2dnVeztEQE1HIkZidCiJdDJyMNBV7+HYdDObwZ7Io2AGeZJ3vZI0s6ySFSg6wXlk+wuh4bCgL9DfL3KcmAxvo1uxtLlzSB2goNAWmSKvqtfOGRGdWHg5LkLOzkKGmFn7ZBPmULKaYlwt8nV4/YmGVWnhwAKUXjXS6hV2Zg4G3yG1GZvVT1HEQKvDK9Aw2sW1jP4ifj2x2E0Xs0YplhtsVEaRClGNl8uQ0ajYNQNZTdgRXNBE6H5tp+sv+fGrxNvsO8tz2cRj/q1d2Wwww4mV7VyCv4jm9lg6286I6NMyFpQcNGkvq4V2YYfaLZ7JhmUUSmamR0s+GYRiflL54FlmOlIgQaViIWKS5x0zaZlBvRgnzfLxqi/GMpaVV4zXW5ZliWVFPcc4jOTBaAJPjASuIvbLZ1nM4fZNaLjU2PHUB7gvgIBQ2o7YEXhLu61A6t80krAiF4C/rBsYkkz3cjJLN5ImOOVew3WXBhKDoQQaQKkbtzRiE4uO+8PY360dkcjskaGdYYSpzm3aQL6oE0RWUkwm4xF5qQuD65N63/eKXzz4u6tQLNff6J3+Pzu8epPi2nvxmg/2jtrxzyjFPQ2OngprCtnURD3WVrXyKG7A35twsKlr/wOzogN5v/vQdGLK8sTFvtKHU4iq1MYIm1X7BZJuSBdjr0b+u8bfnfoTinmaT5k/1TdA1T/TxdPvpXOrEzPMoCxgcGHhjMB8x8sx8bvfbsonBSSQXDyoLnbuXru+J1xpdK1Cr5PPnl0WvNt+55HIux+P5ROZGXRKMBWw3xpZw31lFcM9ZVYFw91l5SM9pRNYPTMrprG1gY2esTVRy9TKWC73eMFoT2n5SFeFFWuop6JyuLdoAq1laa+ZUmCnZ2rFNLUyRL6V2irFxZTagkVBMHOoPszIzbqRdHJ+7kL306mqkdG8KKf/FImxpT+kc0Zf/m9lQ+6gzbxAL29iwqg6srYOFNtQ90gGIhRv6x5tp9arZBlkbU00sHEEAUKEdM3Fg3OQ6ria3PrRoFhfq7kqvPumstzxzts1UVqNBXpbGqk16Ffgp72c3fnVsFhXq7GM3n0dJU842nW3Krre5kz8TMhrRi2BCOmGDoV4TjNNiHpLKFA5hXjBkDLD0cY8r3hWoi0cjgYep2FpjUKNdCy9QAguM+odFI1MkpGkd9/gLkRGvIeO/9Q31SG9zJxKtrCkks3NvFytLL1c4X7agjzr2AKYxngq/2u4t/tLB7WPW/V/3aVf2qh9eInzAT20EL8WVF/AGb9T4XTvXuQkyMt7UujbngtyYL12Z/67H43aaunvH+kVwGRFKuRnvFpPq3n/z8JtRtTbglobagyI11CaImkRXpQwfyopytNaPibl3FJw/jp26UZQcn+AUsrRpNGkG5Kbm4vCq9flXVJCPUPjGJ6Ln0+Abte+3s1eXXldMvf5/V8n9h1QLzVB4aHsIemDyp6ponaIZtzTbWSjLOHN65SGvPf0nCl0qiy7JyOIEkArzU5LzmWGfr8MWoSJXembqN3bYqOx8afH3/K9KU9ZfZdZviZpyBX28Qzd4c4SbL6wiLYaolRFd4V6x1THJ8ZWgZkIryKBV1XR7M7cFgaM847Rad1UFZpa6pnkG2zv7nC8n0pOPRumSlUJ66Zf+bn0fO6fRX51c9+IaG9qBNPPOzzaz4ceIfOK7BHi4uwRSHH3oPVQaKASY8GMbJhaZ39fkbb7Nq+08m1FKg8MhzNo7bY8FrD3ecTfOW4RZFmdWBPV6eMe1ZaUyGgECk3nnjhhJmJHDywORgFbGTsZrRXgGsPsgahmdMQ2vQyRYuA5Xmrae65DN0h7sMWG4ok4KiDjXxZm5zYfXSXb1vt4OdnZWnH660mrmXq6lXu6uXO4Wv4GQYSLOOffo9JNtzRrObPAks7q9u9C9wV6cuBuUVxFkPGWmjGHgyZJj5o6jx3mpxITCFPHbg6HcW7w+evm6JLO7zOW3X/i7rQKjT127kIblxyX0Ifzhbs/f/Xmz1YYZsdy5poW2qm6k6WdDr9gHI7NuAm62Uq8gUcN5VfHRBVExgzlZRkX8JAD2LE/HAIPboVHdPnvj5LKGkyd5Vr4iXAkFyH0hCCPe9MowWdvltGnA2Pc0mbBsWqVf0ubB8SNkqw9ZmsMBU9e+F+dR+yrEmcpK6O4vnYeeR+5U/6yqaQwgyOP81M9Oal8atDgoenDPt3jw+PAEXf9UdXY5VXkuf2biyunwWA50YjVs/cUsGPTX7u8jC5nkIxISmbyua+FSS+jE/6Sk99B+rnr0j1NOsizwMVqA+GBK2jFH5Lb+4TSCmOTTrSvwrL36vDmwKCl5S+B1/rgogJKTGsme7aSg7WDEkztY6D0fHgEn0tS5t7Glq0jWwvK4R7B/m7B8RFgbdnc3/H4HtTmnot5E41hyZseDobhz+l7g0xV8L1jYkF4MTN8cbmFY+UyI+K1+tPieXoyw+XjoeCCB6V9uePj7A9uX83k5FFwWb640GAqOXrxvNRwswnMWC00WUiOMHoyPYz547Da/bGxoXsLli3fdn9vaujcgWUYBoR16412zz+J+Utl8/t+oHFfuBPTosLC03MjESFwuXHxUa5SnOfe9fEBwj9WOlyTLcKfRFo/YjIosdXZuqw7OUSiC68JHs3+JTo1Jjg0Lj55D7ScM8iJnlpBnio/8z8k5F36J7S55SuT9ThXKSg9MiYymWpnWe5bfPiv3eaHk9dl5r8MCKVUPi87tocPT3QDu57r49eVrl/62gX22LGJT0dE0H+rCrX9QGmqojAn+Tea4z40hwn3WDrInR/TkasbswdHpIfbjPuoMGFMmffZdM+Vtzt5lNuVkw/D+QcOnb3C/92jf+bMa2+x3y7sPZO9hgcczMUrV1jJfOjgV+WvnklrmPj8Zo88dgzD8+Sr2SlQyJ8oB5x6+dsxYNsbA+hjBw/gjh0CeKPtovVtRYBof2lM1/C9tSPzs7LQKujAcoX8MwSKrg8+ChF0YVmzKCxuoP3pxdJTfy5+hnwDWzsPkrWLub68T2z7M8+8e1v3LjyHE4cdBATvGYVrt19hvOSpA01bczBdFsK8Vrg7FsbijsEADuQPBsZ133mnwI7H9ITWhxarM4c0oktKjxYJG4PKnFOgO2LFBxHxFx4FpW1wHcAI/cdxeOPhtzVkgg8hBYa5BIdU98r2B1eB8b7fy0dvt4XEH1IAHGB5YsJZJyfWlPA/GmmdwSxN5hCBmT8DfkK7RxS/Snenw1px7Zs/YkjCaR5aaSaj3zuprM3I63UIZ26SGz2WN7xaDPENDIPxkM65TuqFp/eu6bkJod5qa3SfcF+YWwgBs33/7hy/fyYgmSsYJ1qeNbMZ0Zr43kfHJnM0PKkpNjMlmhjI7L75WeV/PHtNfF9onnbAXZ2A7LCEQRCvuRVTNOKHaTwvP+ztSPHO1PZH5AEH8tChQFRQEzN2I9nauJOMTSikagoJJIWJ8Wev3zlra8q/qn0wtyRR9GFnvdtX+ufp0FCbb2+zIGlZCpt5sW4MJNhBhwLgQAHEVojsSTGlt2bse6J7no0NPZo+q3CGaunqlaOaCmvyp32sSR6pmsG/5YkgVktkT4utvHmq/z5y76r8Oaqji3eKXugveSIYH+hM/bVR1PRKmItvFbH+V0RpTvQoCs/WFNvFoMV3nG6I7w2nx/aA6azQf8tKUz1B0X/kAbvIzUELSx+89/ogBo9toHeHFKqFXtWgFz4B4wN/lw/eGQnJE2T+Aeyiwu9AZtfU6lH8v82MzsB8TdoEITgvKKITlL4e7T/WoxZ5S54owJblVtuk0gKXjhDC9GLFsp1+Vu5OTk3/mGqWN3B0Ils7GqureBIXjlhLrpCe1P6+cL9w1i9xIEAQbUdz9iC5GoB0nRnn5bnL0nrPjFUsXrlKeKpg1Szb5to44UcEPfv6yIW7yORt+auDTTWawX8UiPyA9rv3Qll0jiism1EG46misjExATPil0cDhu8td1KsdPT26Axw/jhvQlAXMDqoOUmaIGnJL7SagCagGu92aEppLCf5PXtraCT4aszFSZUmTxE7p68FVzYENnPG/m/f3QocAuvQ0CDG3Wdnnoyg78xdPvvhrJpWh62UfTGSMrt8xvOM14c5zGa9OnjxjAJufBTkbzcQ0NtzyxfcL7ivz6A3GrS1Os6onl2GiwvoOyNPzsy8ZPP2DQA7ksSVy+s1NhnavW0WRMtAh3nkyrn39Q6Zul1Npro2NDsYzNhDCX1WFzq/39SLXOpFZpFsxNnb3n78SOXkbJP01r3NKzLP5JZFF2fkr8m9u/e+S/rSa6SLHyEHhjiHBNdCu/xASCWoG2KLU/WtyvYU96iWAp2Y5q6dJtzygx+bT+b23k3Kkd08nE3c/P3Ylwk7YMof3pbx4GFrelZuaQWrMLD59iNGR0X1XqGssilm6kZTXEWNqVBTT297MOXfXFyKCtoxqQnhD8bjoiKVzP0SEsPvXY+NYoLg5w0UAtPequsY318cxcfiR/CiSqJqI2qxaqPfTO7rQiaPFEbqHuYHBqyn3l/opLCCr4wK3vmCyD5/iAePTJ9MZqyNoXGWMyPoUoRnHf1cJ7Ug5PKQ+Mynn3zv78u7p9DDIxPtzawjraP9b0R4N87E2BwONHexST342sRZ2dvA0yH+IIgRyAR7K30DW+swW5s0O5sZdU0nK6KugzVB4/TfCmA+69o40ml0be5c9Mj4XFv3qZ66Fj8vFwo1iAXM1PhgFtXDwymgN6+vTlrgZHc7f3eznGuTHH+fkeBgg5wzf/+DKx42d7Js7lzxePDouqfV7Ykpq7tXPcBrsinMzjktISeFFtmfNByinhlnbKWmcoonbCSrsKC5Il/PX8LJN/sQad9AId0WyLqqFNATSLiHSR0yBfILgat35n+Yh/9bLno6N7hINAwXZjCZ+tMqkT0403r+5qkOO2MT+9b8QhsfQw0LCyIVyoDQy3am/wywrYzFdHZGRrR1rLW1RDC6W/jYCWYWBA0zW7qlbZiVJRwhjVjtWTF+Mxz3HN1/C97G+G37wbkmRrEsMFVIYq6+asPHp+NOthbUdmQlWljGhrvVxPiCgHC0SyJFsUj1yIjM45CBlNyqkwnhiSzVukMVtAsZteVDeTHTCqYqGnpmitRkoIJgH+gKE7ZB8hYxKsMpIbBOK+yXPJEHa0qhFIZYKl2SB+wiFLM7rbH/nn/O8WftCGDHoOSSuRe5nEou9na1sPJ0AwpusE6yOvJCZh+uj+l8xETWBiNbDnxNj/ZdO9QWnyQEbEH+HeM3NCem+qzar95obbt+s3sEE0CNcHLwDAc/J39qhKMDlRECJ3Ly9bvbarQtpa2VWpvsPT0QJ3lkYm9+9vn2g2vtjY1+VOkD/ghFUdUVn4y4SsjmsRvvsyOp7h/7Z8eNN+DHzg5fEd0e8dAS0wGjODVtt9Bg/3FNFc0xdDirCuE4AUguzal19uSYu1ZeK9+7dSNMJ/W5pxdGi52tU6/mL5+5TSJm6Z5SYY5/s9ILbwT9ty4J07A/7OK6ubJ3Q9cOLINk8BjXWifsRmY+Yj0Q/voJ80VOHrBj+K/n3sZnx9/KSIxCYEDefunnx+WJtTtDDPqw/X49B3f7+vza06u3Fpxb5RIJK/7qyY4kK0NlMzdn47rEer+Ic44WFBezdswc2L8T/llcbWj2yD79yvPTna0/h77AgI6dE9nexcdCAy9Yh7n29FlsRHrUXWRuD7fR2sIZW5wcb58j56Zkd81Ka95QgzmnGqsUcL3HByJJ+tpOJqpqPZ6MGG5GhrSPWzAQRCT+YKHA5lSewMf6msrVjKx3hevfOacLw21VGuKY48n20Q1+sZY1Bzzffjx+Ovckwy56aNHUpSY6pjabmVgeEJp8rg3M1HQxa5huOTNPkpUl1cXc1MPFxtadtHVq0OOrEuwqbV7eGTJ7t9biXxGlLV8nCcuazpBn01V4nZxD9mgh/aP02J7xhph9zn/t5SFafAeYfiHM/oHM3wrA1qGguPTtuvN2Pxse199jHiF4ghDG+tPUL0+Uh3gjSOgTSh4Rqm7kRA3oD9fzC9eNpfYJxX3t9DLcNmR1W/vJ+IRy70TxUOq7L8EpwljfVXA50Jn833px03pJbX79PDL/HdlpK+dj5qSFkvPxzkoOV6x0XholbpbUFtXOCh9B49mamV0MenTHmROx3XRadDdxrMfeP5qPHiXpT/UHrbgN7rUTlScql/kPCg0AW/wxt+wEb2pOHIWcGevrnx4f46LUFtSmpDwSMAKawd+icxt9D3SEai1JKSLK/RxROc2+sg6JOq8kFPHKILCmUOBALkCV9K/W+4TNAbfi3rkiC1UxuNbsGTgD91Vks/bpqJrzu9ALlIDH8NSs3E7OR7W9WPgO+Hkv/rXiqeQaVNXCk/EA8Q16CazfYbnpYYysVCToaGhOGp2WlxoO9lyfyq+I5Qv16SvAf7Z5F756nf+pAk4y/ld5ObWWMY6Y6uqaZpqrrOJeqnQem5ok26/BxsG0wcYh/l96ojhajqziF285LylJvH2jY5ojGCq4+u74wvkE8elRQx7+WHpfMEk8vOsvHc5v8OCs0vO55yEFCkQF0DDHkzlsbvVbp42mwosfvCtydf3BXIOLHGC/KzQwI0Hc6lk33AzyayooxOkp8Cz+nWHOML714Fmlx2QeFk/msJVKmZYGzgfYZv6gtpXuNKGpo6+mrr0XqR5u7h6squ4eOvGQvZ4eiGbddtU0UgtGFQH/czz+71GoOaWf0v643ZOLFbQ7HTndNfcc3NIIDT+7nIRZW+Z5RbkpqYONJdln85CgabR5cFi0+il9tSP3QbF7/0B1FpnXw8woPCGvPDnuVEvhiaEuVK3+069bG82XHVUOpMYdM9ZXDYTTnTadL2wjB/oyod0wJlIrSzeL0ZVUVdmXxMjOITJ1mGGtiZxt8ZevOtNDnQ+VqhwvFQy3didb27uTYUnZRN0ptSQnN+l0X25lTx806r5YerEp0E33liEYkVoMsfbxNCWiuVY4dOScu3gu8ef6WkyzX1VVnbm8tWj21b827xXAoiD4lz9i7Pyt6nDQYjeJA37Ral/z+2QzEgCOrwXrb0HKMxeDvr9vUI3stCJywO4bN4ga0VrhO7BrfX8fo9rG96L565FJbRBtB7ClAVBGNYMFdGyA3WMjyFI5EBJi1Iqvhj1Zg/iC46vlHVeL0BKCbBBiF/IOQrbRY1ttECCa0Y9GZVA5qQwp6XBKGXaNTAkcCHQtaj/PArPCh2g6gfHlVmC567tXujMaK9K9qNYqim+pkw9qyeVW/pUPLzAzPzoIjC8lgeXyxtG1y8cCzZIVGI8YWJ4a4+jpaKmFKG9Y6rHJMoq6PKuoyw8VdXlOUZfXLJ3wrX9tCKUjCCzXP47uhqVPkksscwZ/DlDMm7VMeISS5dNJlWvkePomQAWebJZvA0vZGNbSyD4SEEptFVmItWQJ66Ova5VI2xPXng2PYC1uWWopVIYg9J2IS1iurSxSLHKzQpKd6kjYSEXC1iqSaw/Lw1duUDxkuzqPkvWOPvouljdBFpe94/SldWOqtTZ8YPcFIf8fW1L7P+Do/F5uNSqdoQY5O7809tJrR21BllZP12bBoB/UT3IF/fE+xgeMpsFe1RiuracaiQjXPktPJbOJVyxOgVXdi+URwMn5vceXwwjRHJN9jGWUxZl+CSEaz/5h5vw0YOHc7Nep+3CmkeKYRmmM8JclsvyKzljBBvoOY81EUVc4vzwV3AbV9qvfkgPa1mOdJJPn7xVQHmapzhPXtuYocCeGE7ePeeyHpi84VueWO095rAlFfQdOiGu9pyiOYEhDgfYjzNYAhwM0YP9Yc6jmwWRQrT+aAytaA9kRYLN9LgdAub3vYYE4m7zZisvRXP3SfhsNtOmxf5jEroHpCEAtg39O2HTw4SAIDT1scgjDmwI7BwFioZlex7GL+PR+Z5eYAgCPfYFlAXh9XN74T+X/51MWTBELwQEFUMD4gIEbYMozKs9AWAXEbF/fb6kgbWUYVollpEUVo3aLajeg9g2+3YhlsWUYT/wPZdah2kGq+dAp3yhWSZFBkhG/82ss92X0wwJG0AINQdCH71PtFibSQ4JOE6TZahU2BUn1l2Pjw2x7ALYuJafrcevqcloW8YDz1Fg+vb9KkNW1JIe6cCKRvWMU72POihWHt6arb0bbZt6+xryXzMR1XWyjv6DYRYi2L1DtJevQkVT9QKyBp2ZSqtWQ6KXRbJi1bFFNiUnLYdJIrOINmVbFvKUICzkRIZydZyEq5GSMPopqqWiNxcRHym+Nbe4rQzvO4aTXbFzA09+TboJEGgbQ84FtoodK4GD45VHoKuhhIqs1CWxTAnsx52aDMzCQ1dmAWq/xGVlwq2WK6l+wbzQZbs2GgoEqJaPZ8YhftPSXXCX6BbePSuo226ApjX0C4peCOiCh/gVyHxc8EuM6SuRTfzEf50M1I8Y9l3d7I79zQ8Foiklr4toqGbY8Jq1YdKhijSf4jbWQ6k+pcVJifSm+80LjSEpEeSuszCOW/5lUQ8xqzqrqMIl3Cvq2/MjACDqnWkU2fiG0Bh4tRk17Q7itkxlHJFPiP1oogCVUQIA5LKAOS800frEEAeawsNSLpqmGqSaT3Tl3tFR0SbXFdGUYimhesYS9Odo0rKnCmMZMHNUT1UxxE1HSTx4mh2oOeLC82drUrJ3CmDZF2GuFATQ0BPhBBVEOsBCA6UBArQgHAaYQAg1pHAB2AsddEdx8dkVhR98VTVTMoTG7Yh1QyHE+ZeSh8nJ1i6koTMli0IQKEwdPjQpVp+FZiiLwMwTv2VqkQMrc+AZGs4uHiHXiwWI1HiPBxoMo3+JRAhhxMFmZIShrxveFm088Fg0isn0oL1CnRTeYkVp+7mO07cw4TETHnZxYTZk/Jn+BwhKuzE6MUMdtNk2gYJFB3pNYx9mxZsqcAxJzx1ptUvlZcFlJF2QG", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": { + "data": "d09GMgABAAAAACn8AA4AAAAAUjgAACmjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCu1810YLg14AATYCJAOHNgQgBYJ0ByAbL0RFB2LYOGCA7DduwB2DjQOQz3hJ9n+ZwI0hWB/YxYSYMBRSFENBsWqrAkWbJBHpUKamYBECLd7YUy2OVYvlKX1dMf05+T/7LtU4wMKUW3v6cz1MLF0FGyHJLEG01r/VMHufgpZJIoGKBHQMKsYkFpgU4tsDmtv9xsaIGoiNiIJRtJKSElLSIdGjQuiRIypl0JtBlKISJSqZZnH/Oq0ZWaYZyYoPCFpukb7+N+xuwk6iBRZMI8WdlLQH1F3R7l157zoCyXjA9AD36nWBrP07PZhwgBLSeMnLEQ4VqJsqlv8siGuabsED3LeKFnxrugO3hMah9NJJ/ipRkvNo0bWSH6xvN8TX2qedvrqte1s1/yDEW6dCUB4tkIxQEeoDTSYMiiaAuBEGJLK/dSEgoaIi0Ua4CGXj/7vX2aa3YewLW7L1Fw6EC+fgxB/7NWWpMKZaUyFMhaxEyArLmA7J/62Zdje5MjlgYyvcOTf7ZycwswkX9oD2CklKoSNIzN4VWFXVET5/gKgKaO9USZgKCaxcreurQxDS1KS6SqUxAJqz+B+OtbQOoul9mcsgjITAKKN32318dn4Bhdn5t38EFHq8pCEUmUMECIAIFw4RKRIiRgxEnDiIBEkQpSqgdDmAQKCAVcCaECAgAiDACvyk0ex3gJounDg3gOACJy4k2DnDicusvN3gBBrAILTCpecT3AAH9C0NYpDo+7rNUJuyf/BUQ/cM42KIV0v11FyNhkyiUDj0XDKjjuX1lEnr9K7FjMnEPpZVifqZhCWKr4SbqzTQwLYaKjSBrueqpWpPjRbN9WixjymuFFH/CwqFBhYDRux4XXDRJZfdwE+IMBGibhEnQYq021SoUqPpHm069BkyZsKMhXQZsmTrQkH1yGNPPNWtR68+/Z4b8cJLr0x66515C1atWbdh05Z9BxC3mkNDHAcJeFI4TeKEYI8bP9Y44ePEm77r41+ewEGxRUrtUWZUuIsOetH6bTJql3HbzKjlpPZkximHvICSPiqPeMwTngZTLZpmhlleMxe8ac9b3jHPAmuss8EmW8F2u3bYZS/Yb9vBNIRJvask5+7FELPwimHcaoZ46yTaJ9WCSTY0DsjmwGD82Y7DoWmOfu1MGuY6fi64i8JTF1OyuErRYMJBFtuDaaussAMsMLJnmS0vuQHreu+JDYwyxjgTDXPAYsWQxpkTT6ltykCFu+glcU3S4tKxymCyyA7etO0t75hnoWEGSu1TRoW76JHEG97yjnkWzo2mioUhQSbYYOmYZg2ss8EmWw1jsBYFTyY55CV9Yp999tlnP46GGajhpolWtE5hDEphgsHaYdbBBptsWWTntaOdq59hH5i0BI2pTbJ9tW44FNXel24XIjwwjRl9q3SNYW6MMqPqdvrNMVySVP2Trj0U3CvhlYipV1w9cpuCyIgMoYoJ6uAoNADzvug45Zj7yoBXfrjWup4FNpUP90w83Gjmo+puO/m8JAbcN3D4dUpCw6N96EFl/RgLIB76ETisxR/w6aPfR7D+NjfOfbeHOYYeHrwM6cPqaG0C4EDa+qeN8E9UN/umlSM27Cex9S8bW/9cmENaN4plychcK2z/rnfLbrbSThvtiLBzSrZHuO7Wmpvu9U1ldbZfCTb4hlrtIxcAHO5g65ppXrrnhMPC1kvnK5fWHKkuAKxYS2ygcV0rlvjEtGOxglUm6USA2od7bZ7ZA0zgcMNXu6Vq96DjVnaFuUnt8GvYm+2/bLjrmx9odH8OHtYJcBgN/b8kxzn07RsPkp7oNsv+PxY7vLXhbI0B2O6kbBr78YIaGQ9mNpD/ZDn01If3Bh8OOu7XP4HYqD7kLYGVOfcyTk47aKYl0X7mMjiMDjPg7M42er6j3/abnabFTbZeexnmm/4ZPQMO37lXsuKw1GmniQNWEawkgpUo+P+g8bqExlXC6NwiDU+RkuNUiKeoeU+7RxcXffIw9p5jytx58d4L0uW4KO/t67osuGHVFr1lzLkJFBG7OIqjOKlO+kwUPh53gWwuEnGJGNdJ7wYZ8JOTEBHC5HCLTMRIT5wnSPAYSbKSIiNpslAk1h3SUiqP+NULp2hOtdHQAdF0S1ofe7ErOh/EMyMdczKLF9olnjsqE3JyqeeOygFPyuNJXV4ExVMo3X9j06MfxnOvIEZNoDdJXkZT5mC98R7x1gKc1fs01mxBk9dJBzawOQ5sKDkp7MUhWOFQrjBRrvMoIaKIEOVmyUxYL3rQ4QjYwQIGsIZUnapA3GVBSAIaNA5ND0QYkJFRiSHMgAOcYxIJoiQSJek+IlUaTgrBBg6wgcNx6IRwArCCIg8o0IFB0e4sQGgD2sfstj0Yi/vtsrpEq52XqxUx7wXavU9R5AbVfbV1p6EDtGWnJA/XVOMRsvo8RlPdHad9NxBpoVtpYHLL0QrVHnveFe6uwPf/7jyBq5c52luBaALJx8pX+LgSQAvlHBSU/jQISHSdPDXyK0T8EDNBpjzkeaygcCLzJqgiKV9QtldXCkW9eOkpVFBLmWjZoyokvMYGYuM3q7LDGjTAj7sPXGsYBaVQYdkTHmY1/zyKJHrVqlSqUatOvQaNHgpOvOwmgbx4I2vWolWbdigIDqeB6phIgQHjoSEEYoO3GfWG+xmO9H2b14EtgH09CwceqakEMmDjtbHwH1ywyEvghjwO6F0GGbeagAYru65f6TdFf8NxEZpQA3bCjcYxgDMmoUrc/1DdhozZ9MEhMsFlbnKRv254PFwOt8PD8DLMhvlhdVifRh0CAEy4lSj1fMkew8Zt+fiWtyg/Gs6H67an546+N+CsD3294PDnwOcHM058+/z/7Vt/15TJ8MUb+x/6/XXxtmRzAC4jjHlHw5q/XvcP1+XZL9e/HyHSqDHjJkyKEm3KtBmzXpsTI/YX7U0Txdm2Y9eeffEOMAIAZPHeNcAFkH5MT6DhJhQar4QOSmnAxmukk4d0404Pg1C8IcIZ7jem0m8c6GKCWZ7xmjkieMMCoyyyRBTLbDDlbRLDFh94430klk98Z5Uf/ITIL/6x7f0n3jtUBxqZCCT4yEItBRI1aiOQrFEfAiSN+hJI8bmP1LFAqs99ri4F0n3ua3UrkKW5HwRyNfeLQJ7PPVUzgXzNPRco1NwrgSLNvRYo1jyHQ6BkqJuBg+pwqVfwfijyRYUwvQnHv6TWp0PyKigaNh96H4GBhmyOegPVB40f59xGEvqhc+sAD9WxCKjVXrZAVDdIs68AhHKCotyajCaMMM33GHhE96JFqxBPQEEEoqpC8iJOGGL05OS/t6P7dswwoetDgYYOgzlyg98MT+zFf0ajcoEikxZ3w24atFBdBAG0lP/g72LZuroeHO2D0lGazKLkzmMauyiDCdhr2a5txrOVjSChgd2ova0t77MhhbcusVxATqdNzYG/FtlUbXRQPRO4OeZ3jE2LIpfa374QSXm/jXcJ1RlLGxZ+dBY1t4Brn0S4YIb5A885pd4Nm4nTxHTsncPU/uJFsrvfCo55+xh0RpRwlNVFmRZ5JT0a8vqz7YKjXITu0NETuTeLgWx0wlG1ZKwnE8zEIEPVAl29KW8grf5KvdJSAaHPwFwMFyKZcNGCzUM5o39uRYwWpCG2syOpPpQYJcOaFn+YiakAyoJBWW1PdQ3gky5Lyrv1Qu08YS8gSdFMp6Xw8V//1cwtjV/OeuogqHw10Ysw1TOlp8shZnahTTWfy4ZZH3Bv01/rq0FPiwuORTUH3Rr39SnJaRmeqQkMhbRqn4TlQFNuBzh2XJgnuDqHspyu0HjUXsMzfPUKBo4oQFl/59ra8oQdbCz13uBAOQ+7IIF6czUJA1lU66Bw5NYfWV31oNN7ypngGeWsuTqsEsrhFQEqG1WQZkIcz5vH8rsZjFklUsoKdqUiEv68IaVRHWA1ltQdWoR4IBbvBaMNWXDw7xohT2WjEINN7BucggQF7qiNneY8xhDhaJpbjN+TprJdqRJ68eUpZ5QTOoqiy71R/rGSuGKW/zv5f6bK+V+XqNf9bxu3tMVwufyHCz+PSnKjrh9+fWXoqLsUjumye4LFDWIi7dtumjw+brjklOBI+ScdTjXMTJQ4+jRhyjVAOkeCkt30cx/S2Z8qaXHhEDOrpWN7sCJd6FjeIVEmfARcWahxPLsI1sVRRvQyvF1z0BOqq/mw7dXZ5YiDWzSTRl1gQmV52yFfjGnz20KQxu571VcjSo6/lSSUtDza2mZJtR3ssJefgx5bpVWyM8HDYK/wkP5JPnL6UqVarauNUmfRkTOho3FTlGoP6PIFDRtZeBq6BcMRkGuIiNY4MYmDV0ujHNQz+aSb3NheHTbPCEeU8Mg3wvEIObtW60VLwLt7tL9LwT6HZUmRTfWEN7twFXImIwjFDI64QVhZ3NhBFt8eBbxHMZ8CaIe7H1C8xvXMdyxLPb6VIsSjjQ5Tu6SCqgAr05exOiWSIOmZeqYl2yAKsJ4IfFNStZo5LrDOMVUi2QHIrmqZ8dR/Sd8CWKfN1Wr8Mskb5eGEuUnILSj6pq4YSmagxspkGt6pTX8GqCojM8mUjwKb6kdQiWqQsEttHrQP39bBMb/jp+WMbYfEKRvFj3/DjHhrj/gV5E+5wKkhbQbvSCZBg9oF+S042qt+KCNAGgjS24pSDB1vg0HdlcYmpwORmpccTd0pV+zgEtazSNPfQ0pIHnElz5rKRywGsg04LtCsfnVCrglVCXW2UwSoJrdok1FMXuGCi+3BkEsTB73xIylxRo9pfLYQYxLuUC1A6WAXzk0miNkeiw1OG6sUC1JVAcxx+9QSh5gpb4ljMlXlQ8qQQ3dgkoicYMp93+rZewvB1cgE6qFuCI/w2OaxiJkb+/Jx6REGfgqeugr5MzGoCXlAhbvvgpRRatUGSqa0aT40UTVEIniStK2KkQNSWnadTS44MC0ZcShqn/tNbjSpzhJPWqmVtdIahqMy4JIurfISwFqdDknlN/ZkJWaJOfPmu0hCIViLEiCXeDo1fx31S8zs39RXB2funyM/h/4qJvzk1FE1AlLSBoRckNzDUC2Vie0A3dVydpP2+nlQlXWLmsM6kpxf2qNAnzxXE9I8zbaSdNBbUmBp9qN4v7SdxKEPSQw7OPKYqmGDHU1G25UrXOzQT8UESQ8gg7ZI7KplJNU1l8Ei8eqUd9TGu/Hq7MDh3qFLtVYpmTYB1RVu8jGGn+HIKixbp7pl08klbTB60qEpikY9sjLo9EaglvU96Bz3EvfEcLRjtkf+1rba2RopIJY4orU7uObY3Y9SlGnOR8UZRdWYYRWrEpkS6FgkfdvN4lxqew4RQe5mP6W+wnEkhvXYbXxIZd2qOGV+DxkBE9TT6D3p7Zq2VzJUAseOmluQLiocOOkAKDVWaXR015dYYhhgYrCcD6ml8QGDF/GOWXf4pN3DFIOvh2olo92vyup7stXa0MvaZcUB90LXMpfiqT0HdGwvKlR7KYetkJMa2zJ/eArTc+pPLwuQVoRD7jxII8nWDhElbFkfTa6MUhEyZ1g5yvyhBBlM5pzxUDZLT/37WD/EMrpTwTbt4IhlG7ZotGO0+OI4aZ8Go5MwWJcz21FJpnoSIFY/ccFOPVCPGOEsSkbF/PQIj5jGOrVbVnfwRTqNq6nNasQEQSYH7oLXLiW31UgXpk8J44vqKc0GKe+BUadt3wUGAkJHB7zFtQeGQxccdSieReslSPWf21E+PxPTi3gAyczhLgUOemFaBT28Nb0szb2eFfH0QV74/FTUWTUSxGVUnmvtGSxEF+eUJztVfeYpr5KlNEbYbqQ/w8UBwJAH0HamgKFli1D0/cDgt1aKRsyIiBkajPOqYfpIH2OmzjUXl2DjQBcnYNPzP23nDgeJTLHZjvA3F6eZS+qL+hBHp2CFSjh9r5hEHI5LWf8yYeu+fiXuj2dEpxTy4BSscCAS7mcaFpIjOC3TN15a8XSiiv1d5nw1J3XvVVdSdCXBLyTQ7X6UP791na9WoVPtyKsOfHdGN4V1cnOIkpCaGROZGQLYjJzIqtrI6Io6olJUVVV4RG1VQhxWw8BWVUnfSk9FQ88uQ89O+1zrjciqGmx1dYKSoDTFEzCaH0DKetZ6qpr6NipKhta6Pz/vyl71JjjIgm2Mo3dThbeljyxJqar/UU1W/8NoQ8MMt3tOGvIR8uHF1YdJ9djPRUuCiuyQgv0MsjKrmh7gbl1DWxUY4ZuThDq3YelD8tGWvyGgLy1vY6imbeEGLDOpHO7hsJgJURqr/sUfdMIUeQNS3akvcKdANyLxpG6ttwWvR5SKf+OeDogqLHnnfDSKVObzyPWhfkSuc08aOBScttLk84hUfq/nmw8c5a+vGV3LuuaOM8ilM73oei1b0HiQOciMcqb1WLAxXFpjymrKekl9Wf4AqqVC9FkHJbMIdHx1e6qd9XNg5NrO3gaSJT+J0MR/vZGQBOTgYj7stSKQKXNVXJDY31kSRgv+kF24ebC3cBUl1sW4FzlLSg6fQRYu7hOXE+KiplBr8IY64U2sYRs6DULU6B833EN1i/QIcale8TkFiZTnqB9vXuxNN79muxhd9Q6O2QgmRCCZ0QQ4jJKJnpTGv+v9oztv+iwCmx2v+PFGND0YOBw/gIUOqldmXGhMUkLkg/zYNCQBblntjGSPaFO1s10v9n8avPBleHDEAF69UZnZrVe/kugkTRzewS6vfEa97f0yw/q4iTWYFOobntaUn1ZEjgpQEKYF4W/NhTyv0Yd/jpcJkcNPVxmmV74yjU6gZf4ppenXaNNMkCyKPbn0FNpK3wWEJHdmZqV0gZyeMm+7ch9v5jGOnDmQHhB2JdRa3fDkj3rk9+T/0vjk3+XHvmFPPPktb7jXunTtve7t2X9N52URmJf7Oyv7Z1pSZER6MpvtCdeYGG/3KOJiemfEJYDQapiYQomOZSg1yG6ZmOa28yKIOPdT7qhorWaMNs35ggvr6G+bbL/MCjzP6ah2FK4FBKZTczOTe4A20vPvgNDZoDTV5MABkCq/LlcqJyNXIgcCLfEZqKciVoFpdFmDesA2F/EViFPTiYjRMXd1dPV1vB/kbEJBSleHOp5MjjQ3lda6OCtr5fRIdt1PHpfS7wyfXh9tfyRcLaIbr62anLqFf8lc4Y96mu5478FlTWmhS/jNdM+EJUwrPupOtsbzm0OtfvTfGH6QXPh6JozbrrScJ8y+FHD8bb/cUsVwggG/0BH0/sMvm6XGSpkVD6YkrWxDSTe7c+a4a9+DZXxyDkByItiaGDTEM0iu4ZkhD7Yc//CjBmoBQ54/eN/fc9+rwOayDzexK2zg39L2rRpGqZi8+EBartu5PKFZIS7+CS6kU6AePnpik+v3e5Sop2jiixQhuoqm7aMozvXeY41V+Vld4yx/kg4Gj7aU1KWcbDU7WvOfnqsuEoFnZqNFInyV/QiTCN5nZPE7+yH+3MbPICCNKvWjWSgsBAw5vWhq2g8k+yJtInsAQ44pGvpsA+o93SqOOAdyC3tVlhAy8kBF0JFz/cg210yPCDdP7xAzQPhtibvbpfSGstK9AlbQCoPe0sXS0v49hEVCL/h99hL428m9tBO/9ybefFp41hNCTIjwS8uEGDhR0dy1v7/a8ZixbckIvvJrm+BY0FLoZabrhRNHyKcHKnr6S5R8k83m9Hp++unpHLzlzRK4Kve1aWvrXsVreu2rvX03aKXVzpKkaavJDXQ1abeQV46TqbL0dQ1N9DUkmZmnCHqM41HHOAfqm/OfSS4K9QUz6i84iIkjPTGOf2D+8nwat/5Dv8AorzwlLqI8PxllC1r42qlofn899IsIf8EvSmxaRteT6WtFppluQF5yPm0H5ff4GW+Z9FRNX92p9/Tqd9zSLDHteYSAniPjaOrOBVJNenBsCSkb+ECP+P3O8mhOA355PmvXK+xFQG9UdVZuclGwu1FWoJPdy0Drcvdm9umtLDQhcfhBb1RfTnlOadBspjeo+OCnAYPvBgx+qug+qFaSF+EVYN6xnP1wEkFWlp++LWp8WFre0Fj0DuL/n6Bpnjw7SK47206egNWRk90XG/Don2Vs6T8vNHH1M59b7+U8Qm7CD/ByunG6sXvzNnHWWfcvykeYXlt9MTG7sG530/7m2uuFlxMrYDsd9PbtGZvUMz1npmGdh1sFsoXnUwTWI9iKfiQBd/t2N2CJ3TkBQNsVAKhoMpkPe40M8E5YoCEH5vQGfmL1womKR09WGi7PPrg0Ww9iYdkZ2RlwuuJtMcK7BBcPd0eHRbeWvGxLqAXqTpuelRfB0ybaRol6j5A1YOD7aIqKLv+cyWvA+jXRIN+IR2kxVXfYwMsK5FBsP9eu9rxyT8EF1wEWKFLu8fHLl9BdNE9SX8V1atZO69a2Rae/AqkIm3Q/WqMmGlOf6gEbtwUaPjhT5PVtLjaj4+Mb2sYmWofkGMekvJGec49yn4M576+9691P3cKFKYCFOpyXW+zQ432hn13YruyxGLJW4SftnAZi9gSosc+zc3/mKQ38O58cPrVzBK2+gC5uGYi3jtUUlPUwiB3He414ZJexpXEx0ybG5sFWfT2p3v0h5UmdzDJd5raIsZWDNWGLtFUPFrz/di73Drkl4PxquSd/fvrZZ8lGXN/CzTetITYrO97M7UHP010ByufOzPHYpntF73Xz6mKzJ4BDpzMwa9AAFfGC8hK8HdzdjWMteNXRFMACBfQo4pRhrmuuLiHGQS7OwNEm3nnrpJRAxg9haRk5nUd4rqtuIqKZvwlQvnr5B2uUXmrtq2WzUtE/4/MG9JI3MrBXiNP4+SaMrN1rFFFvsPC1xfjPUEa8HQkh9rGB9Paj1MH9rQ65PE6KOLC3iWNig/KfOSOIf67GfMXB/xbjSAusAv+Zivx/LyekzbMK/KXg2qreJCZVzg+31MwnxlW/AdlVth8r13oHPYLpKIB5W4vz80h43r/Ki+1Cd+ZPEWt0MjDa6fXRBZNgznu4PjDY4xZG61IHmLcUGnc/6sA2/98uWmrBVHSlfireILkspnAaLnllZAl0yOQBRbwNFWycUi36BPjPnrnroX1MokJHw0srermzqWv9SQZVLczV2s7TQEneUZ5Dql5P298gdeshJWLYxKPCkkJjGu9CcAzVhWM+MtgR0kixrIiMLHdQljK7YnBIZnzxIGkQC4Jhzs6hE41tz2Cgh/Lo+7NpxUJ2ijgZPv5e6b/95JiCeNKxKPEnoFBy6JYEhb1NPIvVS5gVLZzFXiHexaRzmaX/ciZ8f/ghfs6K04Vn9lfGr4zXLjxWnLNwwMzSf2XopPCKLdM8jwJjFru5w92zthddj52/PgJiWQHZJkReneNqucKR4OdKFmhZfzz8ZTp1+vM40vFwuUWQlzAud2JkrcqwymhjFIV/JQvyTJmAfZoJ+N8jMli6+a02nbZ7Oy9OjMvxEsgCzcvQNflhOnX6y8jjtpWHAqDxha6IOhen/EC4Jl3l3GUNHSfzEqSk81WCWsLtppJfvWrmXhZQW18D0xx9jJlqUfd4qETYpvvTGjZhQgafkY7vUHZbzg6fnD83/fwUmXuVspTJ2T2FyWx/XN5I63GlfZcnZbwABbhCdX+BCMQCRztfWViCQw9/PXj2dGGquds5NMjdMTw3BIe+XQgKHz2KIifGisKjY8Nj4hPt80dG3cvSssJj0zIL/foHivwzsiOJWbmuZS8G7IqSSZGx4qigIMJUf8Bqf6DHZNCww4C/h2e/370LcLb1uFDWjNsYJkShUiFYQa5XTjpYulI6hJZG+RykMR2lHn1G/U4FpdSmJxRdBX6lWNsa9NC6x7ObirfiPV5RkIjWrAJipbelUZLDuFT7jW430zx3aruBLP+dWNsq+uHFbfTKK0pIdV5CcgnBWvGmZowMl2aNkoelWBhXndFR1ROaeFVbxTsimlGyJ++R1dl1bBUN410Aq2cyj4Fgrmu8HNb/FBQ/6+U2lBQVPp7scCM/ncwvqS/PTLMx1zUxd44L8vR3jjM3NdWx+x/ZUHweXynDVll8vqGu8Cy+qrSEvaLoHKF2hGqkOhSmMkQ1GhlsNVAdHxpUHW03AMeeZr27emF+4UH27lV+DS7CscGKGiJCJQz29eFx0bnJMZJWx7VMAq8YXKAme2iDobSQOUis+FFx0aW3wWgO0UEYcqC8klL2moKzDfUF3Ozpp1v3V+2kexy5NREhQQ9kAgQgV0ofw5o6ReFmsSCgmx4UKCEGsqIq6pK28SC4wVlCKgHc+R6HjHwnh7Q8R6e0TAfHzMz/R0RV7oiJq6iK3lTVcFFVgYvp+i7ZLkXVReHZ4YXVHBxf5HPkoS7PwOXKcRc7RYG/knfv3BUrJFSl43JD3RycnHQ0mlJIwJpxX1dVSZL/2s4dMVXBS4XWZYHBcfn+DjcVjWWPZVwkOdUGE6MqQ5yLrmlIyN9RlhDyzEcMgX0Ilhl4M+GIsHgAlN3P9x6WyuamilfjCKYxdelayjMUwLyFGJzuJu7f7Azd/00mwJAhbe73yGi98ZCQDKdbc06kWRV7kLBOmvpCN67+ssKdiYb3eYVGr2+FWXvjgbbCpuhRX17+o54q1WJqr/CT3soyjK2lp66OOcFOw8bSU+eehStiCXerwfFiqIVPZw+9NYerF8HVNtjDhIKULL/oHJh51tpY/NDFQ1Y9rUcyfuzXrqbD6OMBXsyWwi8tV29iyJ05reyzGtnKR/C9emz+z7jmwVBZRVNJwzdQWUN5mq+koaJpVdXq8iy6yqyPuGeZl0zafNLtoDNDavVsevD9iqSi/0QqwislY/PVKvGcPNHOrWoRVqaAFlPHzQgeHU/j2wGzsc9NTgyZ92j6Owff3tA+2s01vBgVMGTKY54jycVZ/kHFWbEAz1AMxkd3qW0DLcUhD0YUhVTNH5H0YtWKR5o77rVdMbmcxxJzRcTZw0xbWMXicZp+3D2j+FFdc3snw7e8oLHMgYltldFbMUuqftSQXbjauLCk5+wa6OCY4HqvE0/61PbIq0lbQFtao1HfcXILdrzmsE2NTzMz/O++vx1b6H/bI0u5UOXIwbo3kuCqo+5oKoIW9sqoY40/cSYqOg2EFI/8pM01K/L++5oUE/suzH8pJt19ezQ8vNzf80ZfYuKbdGXr7ohI4w7+W0XvRR7GPw5TtsFGMh1ljFc2TS19Wp1Y1R8WkrPSBXKThptdmxZiMZHcSEhC/WAVfhwwcr7SgX+X40luZpeU04PtXvblyhQF/Vsipjjo8ahkBNuMvMzoEu2zdNNvX1KOr35j19ah76bT5CCXUPWWAnKE0fTiaUsooh6RfbKHelRxKnikgFYzB6HsX2YCM9SJNMSz/ssqC65lv/Nj4Uuu0I9mQUnmpKcdU7ILs0tj7zoyKjbVtwuWfCX+/94Sk+OeeUvayNj1EzzGdv7teY9ia8sHYh77OauEECO/xb50l7aRsh7yiJmnvfG/C9dZ/Dohrnh2tKNkLj62dEZufNYms+xIHPOJEGIm8Nu+p8/NrM2ozWX8xuIBPD5hBkHeJqaBPg2BAV2BAap6N+TkBfjlZa3lFAQEZRVBaGPeJTDa9FKrpVTDqUtFAkFYZ/8Es3NeFmJnz1y5JX8NWDfZHZVMQ1FpxC7v+5bDQJfB6aBkGo4ipXRGgI3lECSecFA2DkWl+lJs7ayfQ+JVByVjIiqHQqlwsZ6cv50bQmqFs+U44MppDNzcTU08Xcx4DVxdzc3c3AzhNC+SmMQXyc4XlQTMXu2zkGVMRpKQZChztf9XC2d/bUXwp8PQfa0Tld52Z9mL/U77/zx1HsPQEtwS1xLSQoc5xfXFKYaLvdSFx62CPIJ59CAkLC4MpFsS5LPlYWTu2FLT9tHnTzzqJLnygwU8/RycnM0XSAv1Ko2WUQhjE8Su9mzSeT5JKQc+HL7Q0N3ZbHdZEjBzlLlngRRjHMHL0cV8kbT46iml1KdRxEuEMJrPJpQ6HKgfYi0ferUX0wUKZdmNSQn59VCcXJ7XmJCUXY8UFGB74qPRra19CVHoNsCNDMfvAs3LzhHOtYW1fhg7f0xp0M7SWQZwjxBIXYwyO7JVVStzSjUsmRgQXJwSE1AVgrF9mM76elklVQVpdTVVlTrguZFrzMYI54dKhxF8Y1L8vItyoxKqKrOFflz46uUOuVPolSssPMdp696WUtcIvnMXKp40pVaZpg1GBBC/j6+vaLz42KnYn7Uv2klOxfL31Tv42mf5hISqKoiDwupi0rdVxYRF7oqF4k2b8OHmOv/1LY/vTvvDtz33k7HzTYwLDSgrDo/Lr0Cl7/5RIvvag6xIq8BC80t3JHU0NCUl7urIy6qow/BDX2R/8eCH/sKLD/7dvqB0/Tw9bdbyF/8BbA7/B8ACfv5RXi4s/FISFuuq3TPy/xld+aEw/7/MKFgNXAXhBB65quZ3mSNchXEMzjWjNmffEVy77YdFatbn0cri6o3s6doSBL/VEMh8d5R8AGqv7OXj7Ca4f4GMTaYvg+n0kAfMWAUnGXGbq5WubLETFC6/WIYgF1AL8uFFVasHdK2u0/W6QTfiIbHA5gvygmuF4A/RnOkT3Way54spBkO81cmv3dOk0ApZXJgOiMn5By5dK/gTcmD6RLyZLGPEyQCumQpztelDxEyeZUacZg8r6CL+WCHfqB23tFDzijCT7c2n2ArJAFtxcrcVQzi4EqKJ6RNUM9nAiJOvVkoJxLqiODYDRAJrtvBsknxFNpJyCU2M1VykPk3yDYNVohi3tQoHgVZp6OZCZDnjOkFDskq4nijcegh9PuvE5JKvQ50g+jd1bdeqZ1sdixjTOjCv6diLvkJ1nJdYR4410sawNoJ+zUjOShINpFgzFZyEmXM6HtqB8mpjAeduDMj/r/PZkuf+D7hl/haureDS0u+otzR8X3bZVuu5csq/2umBcedopEW8gHvF349HyjOhk4pHKvnj+bNyaIF8NLGTbM6MmQDumb/1qAmimZ+PBplWJmXh6LqSU9bIxFQDfVc/Ooi7qETTFD9xKpmamfyj8OaZZEJ1OAXGegvRs0KesdMf8OOk8lvar+fGgFrQByzkYE7awz8Q118VeWAeDX/e4QBmRp+xoE2+m7GMlofvvD/oaG9B4fka2H8Se6HrFqJLTH+wgH5KKNfdqN0JIDb2+w0mUSZMl/ar/dZgRnxZN8SfnmUeAnHhOHQfyB3h9xrb8lTF+40BiaA+G/tMsBstPAFki2qMQUS/5tcNCQScSy8XOQVfxRiEALnJ2ldCUowtWCR/bx1fBoCnf+puD8A7of3bP+v8X7X5l3kBy6EAAiwuW1oFsPzgUpZe2gHEfVPfVyJbQ+Pfi3eaa0BJkhD7gF+HchvzHPsXu7Bjn49F5zN8RXCq42hEmtMpgjdPSik1+KfGC9Rhhjki5BGFOh7P2jY+iolml5qNctvK6etiatjdxQ1O45ZT/UftEOE3bqvtRDIu1wZeAkdbRF7T2U5EBo1LadSY/qpN8LQwvoPx7dm69oGa7qbVQwQGv8Rx1KnFcVKDBsR6FEuP0M8z0krZRXo2dGVIpgrQZACxNubaIRKbn2lHsmgpZjlM0jyXZTtIjE+SYmfuBjMu9EnBAg0J7SSxU5jouEQW2Q64r7UQXTsi1rKzExqu1A+X6jlOatkw28nEF02OfXiKPKIS2pJjVzEZbbh3ISyxJ723GZchu0mFSaVLr173282DSdX1rOok5z8RfYdVfiCXH0hnhKAmyqsd8skpPf7wplGBVT7cT4/7Y57eJEJrEuNezyksAufPrcCIunfeVFXdJ2HqpdFkoZ1KqYlMukBm/Ja/KOWwUGBVA2qzUUANCRoyyqbbUiKXJc7FH9nO5zSHfEcye4+oFvHDWEbe54KHMapyEvmBaIey6DQ17eZMJ5Ccps8yPphAoIU0opigjziaqITS2h0IHAZOJg0ztFwK+wTcwrzSCwDrvIzxyBPmHfMMp0JDJH6JwCfgTFgBHAL+5BPz43dD42VNaMz8iDuhIZIjIvBGKEtHgB+QcNKFyZXG6iChNoVd1bfMfWhI0wE4A1wvQzAyX4bCzEmN3qWmgWUYfPyXYZ1S1F1muqjkufMQgMCRPQfeuAniJ9At5KbEXeAZLuxWVeHGxnWjrMG7WLQ1mFfOaLe47BD4atnWdUN2Z13y3lDgbc+HC6sgr7+IwIsjc7PHX98u5CYJ6wVv6hZ2bQUWvb15EHej0/q5rrPikXjbcGDnOhsJmr8hO7LRvBu4V/sNalTIU6RBh6Jrts38i4GTzfts3QMAAAA=", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": { + "data": "d09GMgABAAAAADBAAA4AAAAAWSgAAC/nAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGmQbmUAcg0oGYACGTBEMCvtU5E8Lg14AATYCJAOHNgQgBYMKByAbzkqzoqzvGjeKSs5nUZTtzWj2XyXwZOjNKyMiImBY6zWKNWA4InKyCXHjC4uVkc/4jsPk6tWO0dBIYh7RfvvZ2xfNC6JEQBvBRsACoSVa6XxUtYSUCCLyUMJGxQYVRREVMb/RPwqiaO3/++ju6jlvgdCDQkS1EtguC4OoERR+EIr4ZoID9KtY027T2QGFC8Sv3Wdr/ZL9V7XGmSLf7eVq1V0NM8fgyzEnvgOVQLoTJHeOBOnpy033erpXvoAXNLb//7rMVtfPikfHmhw/mzsrxFN0S6eXEzdVikojDfjPtwysJR4vzhKPJzAOEfRLwFWQSiyarXJStOlSlGlLxmrvXfu0V2RVV2FkMjP5L5lJPmT3mHIAoFJEoSpsHaOtc/Xd3n97Iqt3cLdZiriXiEgIUqQLI3uXfvxtVWfBTplCeE5blssTmOjrTLc6eFqS0E7GBITAcXnvmyMwrLEPos8VEi8eki4dkikTkiMHki8fUqgY0uYowhmfIAgBgAWACwFAkHgIAMMW+5COOsbUFmSvjI8IBtlrI3yCQPYmj6hQkEUCAN9CU914dUQo0IBckjoaBEapySreYP2mPI4vu7Ctb1pjaFwYc+NO0+4EQcNznUNId7Wu3T171HjWc3pRSfcur/xpY6KxduwohWEOw3scHykWzHNjqODCuJM1d17PSlpRcJT6uiWhYGIRWGOd9TbYaLMtttthJ3UatOy21z77GTNhyoIVazbsHebIiQs3larUqHXGqDHjJpx1znkXXHTJZdfdcNMtt93zxLynFry05JXX3njro08Qjcwh0SJuN769JN0jCRFE0RbcSOLTqq2JPbW1P2kQp59nDPOB0QRjHIQN7GZtnzcc8hvHvOMyBRbng+pIqkODMRp7YxjHBM7inHE/zzzALB7iEeaMx/ngCebxFAtYwiu8xhu8Nd7lN+/xGz4YH/POpwp0rc/FO9tym3IYR3qOINPILK28sjsf7c2Ce06QKhgUnwpMW3RYaEiZYx8Rp1wTsnampKyXHjM5KZGfNiRs4nTw2OclDwKAGFj4IDkbT/wahVo+0yTcwV1MY+bU4ii4mKE+iXyGeccIMMZB2Nl9RXGKV+KqItSg1nicd55gHk+xcGomw3xkBGMchB2K8RhPMI+nWFg0ZkLMYds44aGwKcUS8Aqv8QZvT03GTRY+qlGHBosLNWjiDu5iGjOJTKYUWQCWs7ZJmkMp44Rp6UW8Al7jDd5KVJ0QW5XLDudLpuX5xOy8oZOfPIotI5jkM6f8BknPcxyMvMQmjpO7mgmT+mD7zDmcHK0SQzIgKbeZn6NWObkoPxfU5z6kKoMQE2zEtEQC5C9XHJAnLWTzHb+8lFfKCzyNyx9cj9eZ9QW/5X1Fg/eD1l9g+WcM4tR38iWpaXdZDeQ9+jhY7u1f/e3J/QoZt+VFE8ou12lY/hTr88U/UW8AiHfCtzb8ZT/LTf8lCqG8S/mGH8nuWpe/N0PX1F2k2IzqNnG9f7O7kd9kMe/zenXcZZ1jyQsufj5LmYub+jjtOZ2PacXDz9W8zFdsALD8Hi+qpbhVT4Tl5rxKJY3elpMpzZnfwhHcFGXy3Y2fIpa1Zat0uMBH4oUfveKDd+j5/YQNll/vVb7lyg/oskXm5F5K8WVf6p32MV740dM/Cc59Dh/cm8JythXCbrzlmPwiBmcnet7w/x/lX9a48Gb1A8jzjh8QPFVibqx9WubB9/9rvuVwfdmqbvnK4FouF+bljr48mMKUDcuLbrR8ymyeozMcbTn7skwOe2uvc73ivkvygS7xe3kV0fWy/JI/ryvB8rxQZtmeJH7LLA+IMyHchQn8RWNrbECyyQ50GvaVifoMyTAGyzMNXMGKLQX2rMwxcBVnrlYrCFynUp31Guas5owFm730lt0xZhQnhJ22JSmSIjnIWcSEtSxjHfOsZ2QDk6kxw2Zm2sKStjOyg8VpMJsmM2ixrN0sbQ9z7WWWfSxGnykMmMowJrGvbDSQ4tZIbMCYLVPZs4Aj0zkznwvTuTJHgaQe8Twp1ZByRz1PSh1YTgPLOROIjDqHcH7VeC64jOy625A7ZjDcmwJZ7ptD8ThQwhMLaF6OTrLkLaxeFp14xPPE8cCS+FJcQ0khj6BCTFBjKduZsJMJu2IcxbIxiE4SJCAxYhLX1ipuDDlIEqlEmEgeZgdGDjGLQ4ysmAkN0ST73OERiogJxaMj5SpIakg8EiceiXviTkNKgiiSUI8IohMT1G4LkG6ELRz/zgdkl3Z2KV+Rl1kbM4ZjvFlQD79AXxFMjrS2jTnHWOuU7DnZwpRP0bHnMyzMcs6yPihNRFQ3JSFnHWMQT0256hZhCKz9vzuTwaabAvw8QJ1oz9hGt0SHRIBll6EAGCEvAQQ51/AKgtCyyCg4tnEWpsEEAzSpnSTRkh0Hyqc204Zg1u5Qno6ypXZpuR2bQPYVSBaUBQIUgQF+D18wmiAWNA8D6DQwcKj36u3B0K1Lpx69julzXH87OkN2b5+QIFKUQScNOWWYCAERtwIALmErQwbkZ+Z2gHZJw/B3fPvbEQqlaWAdv65dYHiqhSEgoLw5Bf4HvquGDorQiwCAdMAcpHjTCwMv5fcVSlvCAOg6pGYKQIMiEmkAbClax9+z51111xtfLKOtzaZf7U/6013FFWUVFRSVFdcqainqKUYpHlfmLy8jgqJs2/nEF1wz7a2vUK2PFyhKK8p3qLnolt/zimQuYeQiWP5zxfcj7xit/0/9J3pYikQJYkXx5GDj8x/PSiAwi43ADrh2MSSfXh+a7oypk+uRz5DpjrumzbgnS7b7Hpj10CNzcuSeaNc7T7533vvNBx8V+IQFANDhvcN1QC57BYYiUkBSWzGCNhyHl9qP0xjAeQhxAVcwql5FOq65dznuNHAGM3iIKTzCHDLwGAu4g2d4jiy8wGvcV98gB2/dLxL3K5CLb/gdL/EH/kQe/sJ/eKf+jwJ1Wfmko318UKihM5QzfVCkEx/7oEQnfvJBqU784oMyTXELZUsflGuK24rtX1CJHbEzarA7dkc99sbeaMD+OACNOApHoRl34S60VL4EHxzRlTc/B7RCCLTGLB/1Mj43oF+08HEO9cl+Pxr+DRC3IYssieX8I2QYSicSiBjub1G0sFGJs1RQiS5FIGaI7RD3wggdtDVEjBhLR0pBboIDoEgknIZ24jAchLlpKE9WI/ySrE5yqEP61Qg0XYwA+K6b4x6/4bGw7FpLNLCoWacXj+Uo65icZAV0wv9g/qK1a+/ptkSmJNeyt+OS7MU0bbTOwCiw8Y2byrEZLdngAgM2rdTGwnAa9TUwuyUWY/jdeplHwDeS81iWTnKeWpDE+IA+GTXGCfMfp85F+3h4tyC8nxpXiVHcFWfJoZleGFEVR4wwOeM21siDx7x5HZD9mFKJjCClRCYmX4vD0mRHXKyAYHLt1Ve3XuZm2LoYCpQycIS99jSgB4zkuEKABrMJamFAsTDxzmnH3jMjZRkKT8ct2WyZtFhLw2B2jhH6qMxLE0Shy9693ptc+baB+dtpZ28Td6DiR7SogHG6iKkmLajt86QvKdDfbx3KePzrFl9mYtUH7HnRQc2KgQAj395kZRv/qJmmItcKPFdtY430ZuR1S3PWbJIlGeahAM2IGuyjfqOlQHkDQd5aqa2qtTGzCL7/0r6w9VmvQHBoDMob25vKDGmsideq9jVWNTWfdwlkkI9jZ5mr7M1oJq/9Q0ZLotJbxWRVqBxWvOQCUU8gCi2u/sWgyIJJIXo/ikpUNF5lTbJrdhc0Zqae+b8IgV2iDkJ2b57j9mZhYt5CM4Ve5CQBKXKntBe9DxSq4ROdKGZ7DhifAw4atwrXNtYGgdGv6n+l8JD75Fz2QRYfpVMsJGXuDLc1copPUsKVco8jSOhGDPCa9o19fr0+5XRidXHtYUyFNmeH/nbgWzi+1DC2Wf0aKwtupdXh2purKltu5mbaUzb/wJ/tDB595xokRQOCU3CuMIAylGZk4xAMhEMurw5vRFwEUuNbh7Kmgpb+0jWIzGWuGpeb4V2Xl0Slm+w9+kophiUqSycVTekL8FDapWZiu+3CqGDZaJifDgrPD/Jc2gpRwTkYliIsXKqSpLgZIANcJfPFnCqemYKR5Nropqo2iKKtMR0G2a2nS3otCUc7Ye4HqhlqNMjGyTfU1tL2OIQJjd5l6/OKtIVqGESF2cCCZKzmJfXJ0UPb4NznlNf6p5X4Kwi6b1xRSi0TSITurGUv+QS2Id4qiXsBvGRhlNP29E9jhcTOKcUnUdP5yyXGM4dhcgKqk1jt+5IQoiFxJ21hsK4ngQQpL4XAquMzSZ5RQEYhxkNwFGSLoR9LFzt24HnWKqqkmxfSXPeuYaCWuoYXrmEXNfkb4VzMd9kSyegY/Uihij2+t3qZ0xBv7JqjfATQFGECXGBQLygbZvhYYIdciw8KdG9ZtLBt2Gnf9Ud3eocCjINhtkoV3fyuppgiJEhqDAyLQrPApveRJYlBAxAtHlAYQOFw++P+Wy9zl9m6fyWJtfqe5htfpCxBgp3MXZZKH5ufcAVHD0PxQkjFvbWx3QXf6L2FWmKJvezyDaUqh/4ApynK93jIOLcpPMPUATwrD4YiJkaI5ue1axchmXYwmhRdo6TUTPrtaa/Jn8LDT/rb6SzT0DeTYZYDM60Lz+/OMP2eIB45yl1y/H6KMLy8XzkE26URQVzDc9PUq+MKThyG/lGIB7AindfQNzV/4XmlG+ISlQHIYzkKPID0f3lEWfPJTF3ZR7Q7U30gSD5QK+3xqwe1DXDb4Nz+TPGEDBLoQv2XA0f7CNCqZgBTzz2IhX2lI0gIPMOg6BiTYS/lIN3uQxuTOXScyqzkCKPaqmt011kgAXbUXNbyKQpSbYqy/HiDWqZtoFDstBLjBFKe2M/x9v4BNIKJQIRiiScyrtS0AlYyH12t+H9ALQ9rSrBPH0SNXBA+HznUhPV3KV7a3TFqO5KtH2m1rV0L+TvJt7E+kW0safRPVW2h1u0Yqt5Le+qhe7ZL1/Ey03V5/3DKDNY+8alw512dUVkNwrgHDUfnZDlkqI7nAvmaLru7exdcPci9+XdMed+7OABjliVpnDTmuajF3mvjjT2jhh9OlbmzWuSK52v1L53tYrrBP6ggNY3VoUZQH8RAr50dOCPZM/6CUZDQdgOViGVTTRuQUvRd7v0yDiXRov/+1svcnG+uO/yYogFJ/lf9JccQEY+gjKmKqs265pK+gZlZgoAQ/KakHBRH85rafiMsTReioDLOYxU1Okbjo0dJkznpFSKsDiCykB3vnQzIR506ydi7WUyiLoNhA9LHwha/ypgIpg1q5i5FAPGaUrdIGr2LJt+rMY4MDg7XPK036QppIcJKd7/UUz5N8dqlr7R3sSdoUJqG6Mi3sldQg4M5KbJwnMM8bWk+NevdUVsPF/dBBpDM12Kqrl/o3dneDK2Kpx7puNMTD6e2mae+0xjmJBB128pEfVuLA99epZSbFyQZi4PRpPbJxbhDcxoQMYl2oVszH+K9PCv05ofs/WJOa6KOCor3mGY5mzB3XH4JW7gYevTs0eee3JjeyR6+lbIo5On0op/uZc3miPJRg7JP/m1H3Af9eysofbtGodLPWpTkrVIXXW7JHZAqtjczHn5wAXHA18CGh1i7wm1acMlFoCMdC3Amoaaiqiird/MnF+Z7SyeQfLKVGamYsDxzD0wtT4qD9xspJa4vDKswRFaUXBJ1wl2Lh+ZgaK87jQQEnM+9CYO3g8D87seYFrJ6FO758bvaZN45wOs4ARlYReOQn1M8GqtOQJxHX21B2xkihgcxv4KkC58uBNfqsi/eUgk9KU5lwi67BG9y6nXdt/fSnqvfEGRtM2Z1NOXtFYGRLwRt8G133ySQByexjzOQqbwM/ZgvzNilNoxc8pALhi0NRxlVEufkJOw5Td9mxtU2j7ngXpCuDrV2CgGL33Npn8uellCLX7DycKn+7+r6sqr6N1J5yw8M/SlVwK89Ul535J9aqaiYpCueSSrm5BXftL8EKrYr/53m8Tds46XQ7QJS/3U32VMZx77M6Hj4cFBy7ZOKdQuV8mVfOedPUSt8m7yIMFSRwQyl2Tkn8oKLY7TrKZ6sY69mJgRK58qVL3RIdb9njIoYGVGN0SgFHcsCxdmrcbikh5pGNuVkD/cm4ThU3kdNdmOVjhw/kEKy1HP9pou8vRmWNDPKQR2fA0gP+fgwLJ+QE3HxMWoy+QCraHggFceiil5qGlmXVXCyf28KyeKAuw7SR54+DEuaOcWkSo4B8voJZcH66Wm4S9zf0wAMUjmjd8rDD240NcykhjGPPprqwDnoxDFqCq3vZkmFx59JjjmSDW2y/9f3Nf28YRTWnzuNJ9DrFz2m2UR1JKe7fyiRn8EJSi6m4qdUGw3vgTrfQAuGv5uVjZ6NMA6kfAoO+qeZPquALBPFN0MivOOIuWxiU9SLuHgK+uduoJa34yZhV+TgFepq5Ma0B2Uj5R+nh2Bjo5lchD2K0FJ9jR6Qjt8YVRMKzRoII3t8mnBn2oE0nhd30C2VCNvmVKN/SC2I36LlWMFPPZShtCAV7gEbO9gFCgP5FjdHVnt71LVxzwjQlP1MIkvkimRqTornrFqCHwrzsjXz0DED/yGPf93wE8+92rAt6ag6RbUDHglO49P/Uj8hY5rhqu+b1dlbn5JG8cjvlN8IE5qh8m87jJibmTbZ7Dg4QPrvPKWQdHxO6e1GJXYkGJFo5yhZ5ON3Vy+C8wjb+1ZGrsIJuUuKMHJEokia7uHe08MrYYUIC3xwBj7Ryi8cAlZ2wZ2XoVnEMH5wj9PNPX/zvpPz/YnzIIu3xULWcAErhhUpzApE4agljxc5BNxT3BcTaARPP2UP03wLexN3ea7zOE6NFJuU/jKFx/DCc+rgMJCFsXnhOBX31jPTGDHpWWm4AGBn+ftJ2ZrLWlYjWlZZ4jHb8NurW+5fG0y/eR2ePD1z76HsMS1hcYh2KhpGF1m8u/znUmLTuB/NzpNHeimx8Zl+KBUPnBWrZ+fED0RjIxS2OQl2i4bEmlZdw3JfzN7n5opwBOpIMJ1jZgieiitcJ7fhu685F6j+ikN6UTX5Wpql7qg3UtWBcgBZWm+t97DQgTjS8bPcBrrDhmp3ezDs3Lc1et/VrTul/5SqnYADWXtpwXkD0RouOx2HqYGcCyveXccTeH6RM8BIqh/L0jTbadJBdWGfIS+dw/345mNepiUzLLYmHCeiE63sFGZkXGEoSsYnGiirlBje/vnuWIjqK1iRDL/AbHcUjBrKYHtEmrFZp6kVikDtySbzzHRWae6XJxmZuB9f+UG9RQTKtehEZyVsIauKNa55iPnvZv90xN2hO12oRoQlbgjs9sKJpIEpdk0wL/nETnegpO74V3HscYJM+c6ZhFW3YN8qtY1yrSre+zfKHVGBLfdK7AhF0T8JMmUaKGnVFGjXsSLcTgS5WRokhYrFM13soh2xD8oI4x4+BfyjP68Oom585ib7KFc01h3v53FYsuaP/Zymb9M3OGrjLxZ7weSr+GEUfJhlmttXQkQioYjZSG+tNZ8fTEcFRJZPlipdR46U405UkEV2DDblVADvTWEP8RTH//fzNVOSOhwi97ysDXpwr5VsVIH963Mg01WvfQ/NtVyStfcfvEZcJCS7K3RuLWa4PR0+uZd0LIoIJDlX/WRk/bXbvYB0QUrpI2jMJJlfTby+NXqwk08eHN0v8zyuC3aLzQ4eg+cL19hDvOmfAR5r3E/TQjmTK94sXetxZK6HvNPlnER2dEhmNFZp4EDqQDonnBUQHJRMWgFgzJvesKhHfUnOIa6nCD+Ty7AVw4wbq2YYmkAh3cJfgLI0ztr6UgpNkP5VXv2PRA35EPl0yVwRriVdbdx+vOXDEA9DcFKoIXmRbqSytzphO6rms7yjz8CDtVSV18qnGWmchhMDlRj2Em3eDnhKrimzxCLkms9a3veG3RGZlsKMCUEJfkEN2n2zAsPBC0a+kqFDqISYTY3/TKulxBhVi9ZxG08QN/DXd9x7Y4z80soUPE75V24dl19IHLzS9rAc3SMlBu82MJJrBEiYiGq9tto19p4IDr+a9zkLpHGq9zhovBb2BOMnVf624OdtfB7PPGdeHmfECkuEKAH3tvHTYGX7g3M2S5VWIXHy9eT3o4XyNqtngN/UItfkqJjtWVC2GxT72b5hsv2PxhbntT/GeINeQRlXr80h0n1TqVlAwohiViBLL/AsZZGXYpWQZSscB0tBAXErNfpPcgM5TserbUWkXVPkFH6AfynQfmL/bboZEt4uJzq4S7Xkyeq5SpyN79XmqPHeEtrky7ULZXiC9Kfs+uWWDA6anpodvBhew+KPz9wrvOn1X37sa9aF+sv13DyxhOy6VHwYQGPQdG66IOy/78ZiJnlwNyPid3IjOVnbuVlaaHck/jYuIu6mh4sflrChWzNt9w74J1Gu1c6Wt7maOGLvtRw/D+I05W+pDf+Lp8BxU0sfU3Pe7CJ4BV9e868w8gbvVuxY9GVNwXsBlF2p46ZyktKLs7AygPpMrMSRcePj++pWZfG/0uPKR7965xKZxB1h0BQ5eQLo2YUV6SgPnc5khwuqbphW7TBZKZMuvuwSSod+9ygm8uBlRPQ1Sso40NJb6pTweDqYz/KvcCT449vRZlfkmvXBmjzIyHys9FKX9QqXEPcSvJ5xixmZT0YZkfPcuvyBQlxLnh6UPcLIfAp7YfXPEw82kwe7+NGDV+DsBXxCt09u+48j1B1A79w3JaW7cHFV52Af9ZUq9toQuYK0oo+6ZvA0bOjI7Nn0Tv2J9YP7SF2k/u7AG+OpafCc/fz4xfr7jc7i424bxG1ybsH7JmW5JrJs/R7vuJ9yzU9kamB957tRrn3emFStUGB4JgyYvwaPCkZUO4Dxe1qY4NCZMKnaca593gQoTo4yn59sfZjU/rAF/q5JkK1JAOXhJyW31twGUbD8+qr8LlyChgapWfQ+6QuvJ4BpR3d3DXNFzqjEVcxMBDTX9IqblsGoB49PctoPSZFMJWe59wvtUYP9LtO1z/KgTxTE9KQdPOwN+62lBZ3F9OupCcRl7FqyOrmbOwKi4L3ppaO4EfcvkC6JBfXbEOV+DYG4B0f1Wz7cffQoDsAt2VZf4W26O2qMknI9BhyfrO7rLgFEDhrLO/STXafDbyz99TavEPfim/O9PYACwjPccREx9kjy4gY3rEuJis4FawXB0WL63cwkYhi7p/rtEHG7oJMfmVo4jqvxyZeUcxtFEkRJULMfaqLEH7X7sbuyGQcS7Tm23+G74DpeUuItmnBbm+iLORlEFz47SxshtCnaDOvLvIqs25n4CM6t9Duk6/EwFAluC4mu5i2NbNgvlhzWBbEM3b5u6ZIuXqpMu5eTv1s72m7Glaj5C7lGRbHdxQJfSJe8YGzvAxsFqcES0q2keGIcu+Wviuti6q2SvyPx501yCJry0rT3DfUoa8VpeKhWvlDglpk5iL2JKl+rSzhWdkRAlPg3BeA2HNVu+3V3ZRO5Ak/8wb0HUoKR4oYzuBZV3OKfiZ4UxVyzNOYWVhKdOPYkzYsk4o6ACJaGmZNaw2sLZm5s4fS54FHk0gwy3lqsB+OCuqNHspCODk+s0mgmXaae9XNcQY5T/G3mlhpnfPHiOLR/L07ZH1nHlyED14QKU90+fL1lF3wVloa5XSACab3dknG5pRewLypxkLWqPXkHt+H6GcFgzNXh6CkbR35uC+GJWlMkfRPujMReY4U6x3qgHuzVTKuUEjEntUDae7dMXvmRUVyHy2+qX9JOJAw6BV7767LMc9HFUud/OdUS/Obq/z8VF+McdKnU4Q9WFae7lvm54rlhKEWXHh1X6E04ELWufuc5UVQnc2ZcfKE3LiQuL0qOwP5t0oKj+dSbGYnEOPZKcKeLuPpPOkAQl106Bs1d4CQi2VSENvjjJhxe50jZU9qMc4iJOVhdZTGC3VIUQ7rdD9+wB05P7MO1SLRIOU9O1OcX3Drrc8eQZEOUhbb6oTocXe0i0CmoxnnE+CPYhKttaQNeTTQbZMc32wDIJkfUNGIlc5hYzRHmq46rf7KinqWU/D7ShTrQrTFcfQqQZYDPIeSCdDd/pBuxXFI3OkqPbm6sJ4eTvWOrr5mHEX3o+SRuGAanyBAfT1RqDytntVXJV6RLJsNaN0hQzMyVAtg12jzdIBTUwMwIaT4vXXJelQy3A1MyLuMGXDXLPxM5Joo6e3ADyfCglS5xkRzQTssUV+5v+z7o/lfaa+95ZXGtArae1hDsawOJSq1xhQdalVS8TdprWyXVVquftGqtNF5bAV9OrMl/dnIlVebKUOWWyoVzKsvhKrRzpQUbptav/pxNmSG0Dbli1a/scJLtZlftRObwqrPwvsZdtuaAdNkmG+5OuTp5qUJYCG7eUfmZ3yd3x9KYm1tBFSubo6/8TWFJy9rVWzbqvv4mhtIXxWsnXXxN6cUqWgrfkYECtyV7BwyxK7hvzlVA5N9zBhu5CosKdy85h+mxKjRNFX4hA+J0leamsMYdpZ/5x2TvWhmJ5VRQOWWP6Ss/yd3Z5hHgB2b3Gez2S3OFKJlIEI4aHjiQS6h0RTUSYm2XpotwDBHkfNhad8/+g/4hPB8Y6utkVImfk/1lsbnZDferih1bnL4O79LdUVOErHsfiGdPTxxZofpOpPYhZkXZOLuIGarCiJsZzYoR37Qo2vQiY2XFjepjgcJMd1xLvrLMXqITxZFNcDpE7r6g7pDvDUK+6YN84wEUtl7+qeztVtmmJoV/pW9K/DpP7sbnp6mDY0AJ8Ij3xiG4vkMsbeXf6rJNsE87dCz7LL6Kc5ObcoNLW7JX2NLt+dWHFf2iopqKUsIrh+JFeBzlxQzUhpYfr1hpzzzMK7WU8YyNqC5J2foyghNufLclIQhH4YfJZQtiCewIo9vNcUE4Gj9KLp0H5UzZpuonL+7+KZGkJX90t0Si1i6dsxo6OyUSd8gf3SmRRHpzdwpobFqH1Mj2vcLInBrJ/DUCut9O887dc/P1ZfWw+1feXEBz+NtrxtVhINvuS07XOwTWqHKnkydNj2kaGCp+2GLNtwjBB/bpGV/PAFYnNSj7eIxawuYidAe/eMW8MkxNzqxOxDloJIrjz7B0C+bYGCiwIj9Q6rd3qUnUsL1M9kgjS23p/u0SFQwjV2HMBmB3OrCn1LNffNHbuondvPh1TGzzWKjefHrWduya0a4qXIaPPGJ30T0EE3eeNKFi3NBOriwBsq2ehwNyRSll8v+z+RRTcwddopeifO6ejMQdTDmLxrDps5EkwVmJW8voAmkCmz4XxTqukbi65OVy4yI+ieQuFzuKX5a8seRx6No4MEawFPdag+hz2NjJLiIgNgG7kyJGE7tDIXujFMXclgiz3/K2kcEIPpGSgRJwVhU9caejJitZL/6go65cicshwm9/jIkL7DoZO6JGjZRvXQfRMx0tfADJnqtwlJiSvPna0/H6eTwEFrswl0xVZkba/K3oZGIMG8+3E/AvsbPSHt2IzJUzf3fPTiRNhO6wKqDZWAEUkKrSKOEbdN0sVU1VaO4shr3CZm6BrYBiaEfR2ayniyvTSsAQeevlt2jvPUwUgYa+ZLFkSTFwJk/j0NZWX+SOUqqQNxa2NPogD5RRluRrucdoq7qtxSG3XeY71O1tYcOSvYdUjbt281Ht5hjpmmjtpg6q+A8VqVoVaGswEER6bvC0YRoL9b/qgIXJQj0wovqrUlEsKkgm+VATapK+Xy5LBIkoXzPQQc57fCynt4XJOzcxvFvikpOJ4miSOyWmVid6I04jhQ6nZaEYVJUYXLtNR11L23G/N8uniGQPIPc7vN265gjIvNLyFdJtNtBHyokRsnsT7ZTSCHNSq50fEZrfhnItTA7PDnP1n4C4I/XrPeLF/4IpdnHl4y9RZeIgdmUQjs7CHm3et/+2wf/oorYWdBukyeNswqc/vJrAQZ1kMW+mgR9zVjULPjQ0+NnO75LK8QqTgNWzV4pw6ySrjmLA7ZyeqsbFuPUaq5qiz+2+d83kNN3NMMIUmRPCcI4fzZLqYxxsiKyQMJLtBYY9zGDrVn8vd8eYCFYEy8Ml0hl5oKwwnssp4Hf9uDGIj+Oz1zmdnJFzA5E+jrbSVb/2b+5f/NavyhmbmZ6CoDBwUHOXJ7m/018z2C5b27Lv4T7Zml0G/H5zpbhhtxlYZ5VgTrJIDSebxZl5Z8RakL//ASkWCRZgJt6JoywSG2on3gYcI70G9y0qMcTJM4vuKcRtnBafcbTm7vKWSHo8u8dufHFfi45Q7cj/KEjBepNXkalfI0lE+keg8kPp/LZyQ2zGMFPZHmOsGY7Pkf5ds44tUQEKosFtqz/BXfjwkjPOSC+a/BRYLgnqGiNis4P+E65KAIUX67gp7Ni04mgM90XMV4d42dG3RwPiUAvuP8mqpLm2/WAezNkZVF6pGaZC73g7dhyfROFGWnUBJmHIp8CTYeevHlhRvSfG1WSXu7ajhms83epgkCX2J3JrxMvAEMTj0BnnbbY9pwW4HPUcpxfRj/x36vEiMO2YfnZxDtgPlQZy7Ib4YjX/nBhFwajdXsm0reciTkH9ycZPufm86HM03VJWYFqSHzigpt3Gajvy8mP3DVbroxYjHY2Nn25AXGcY05Fm7GC/+9TOEKK3aUczwy3Hg2Hh4wSarwWDa7dGsByluproL7LSiXH8nM+fYpfmf1/IzcT1ODQUiwLqPldqBd1J9rE7uV2/aX5Xde50umbwm6ldyb2kUnz5Br+HU5A6JiRSSKInCudB++XhG4qnr0upbwXo2J888HzRsnflv91wC9a9svRFjht9qjKh9E5IOuWKJNWO39hC+ZJbjA4jZ+Wrb6GiW9GJlFvyTitXUXZuO1FFz9zmeGM0+FsTnubb8wljBb1rpyTTC4mpeYUxlivsvyQt6Cyk30hLJEaxd6I7XSSxq3U4QD0jbxg34+NLxARrdC/JplzY6IeOYGGtA2VPSRMpj5h4Aksjja0VgZ8ibJrj6UEtftLszhNvUdu4kXfY+DsyRvf4mj/ff6LLNXk54CkDkD5I5LPY4mVBXLcB9OG74n01FboZxYyeUVwD616Zx6GzkRs9Tz6dI5LQiWTjeW4uP344yY0eFJXmRvSRS0P3pOhqX9OJQIloIkzF9djcD3IWGi+2/VOsauUq0qbtTUYhWJcUFVHiTeSSLs3LjEmQ7EsjOoJxIenCG8lhfaVab+JovXrNf3Awyp1l7usI6npfORUorOdEdx3BlWAHAndnHHJMS3awjoi0Q4fTEh1sI8I9bPe6qqiZG1i57NLZqGZhBFqvF5ih8dkua+6IFrbYEgrB8RRmSFKhM5J7EaCNWu1XhoGspMDLWFgomy2VPcwTrloAzgNJL+PoCql8yYwhftyqF0CS9TSJKJUq4AWIOG7K84BV/Uwia2RrVhwblm5c+9WnxpfOqZephGhnfYHWf8kuUWH2Vv7Bh2XIDmEhjta+AXbAkDuZkfwiQ+CYVQc8L9ED8UkMawezwFLo8Y+ytb9pYdvLFRE0Y4oBMzY7O5xwJRKVSK3h8jFoEX/aufLXKZBIPC6d1y+R1LmXpSX7FjlUrlDqCFjliVrRveuqFxMkkqKk8qJhr2ehimyNCjgxtvd1SZd0AttLdiTWK8J1ABmgLGV9KZXmsG2h6BVWWmLZP5IueegS00DmpY6A5i+fNIndXrGhHFdexOLvqCrRz60Vp8h0PRrtRMHo9AY3gdjrOdEvscPDjZPsvn/+CLIyEZOo/Qs5RAVwXfhxmWxvmcE3U8PIEOWt0ZVSa4jYFoqWkNIiy35OuuRRvcENmZVCaMpYZe1OJpUXxbv4mBUjndpWu3G9U1SImC83KIsTKH1q9kIvskNhEufWtd8ittO7/KB7biGll2zXRZmS5zXeILCZ79Ljs8fCVjLTcdopZh0rnt9//HTeZ1XK8Gc2dhq/99ip7VtwoieRRchfFgxRcIo3kUmWn+KLYOlGtpyQsdFfMt1vRU/D+g0cxBKe++fouffTmsouoJ8dXXJfKtNS69g/B0LSsnAEObG/IQNFobJUkmcl0LxDkY6dFVXXSVt/UPc9rLq8kpXB/I+we2Fl5oMCoyvIQeT4Ey3/4PI+RqGhxE3apwdXy53RHsutFANNtxR7e2f/3cbQOjg52D9ZMSSZ7ggRJpSwXKMgLRxN+LenJhHcZKI0huRBSW80clTH/jiwPSkWRaK8mMtntXXU1ffZ7vey2nwBtdNWyze23aJutNvVMUptm9keuLjfdL9jUHwxOYycMNCdjlJQ1iCjdJtE6MzAix+3sFIebHA51GaJ95yQvGmTuZ/qXlsnis6FWgfB4Y76cdma8dCU/x8fubn+x6H/iVV8xub3PwHW4v8DgIqvdERahyHE9aXgbljnxv/837uxaQVWxk0bwaybmhuAdbqY9zrMvrnx0FD19gvgTvPGbsHYquV3Dkp2KzJ6hwxYXI+O3shA609g+pV2T60Pge812lty5TowKpsm4KoNoV9V22lUpZR13dpxIw8e+wCRjF6RvRHdqFN71WNqn3pc7aeBkSjAA4TjNWCEXgto6pk5uv0wl/jr5LKGkNZNA9v2ulHaUpoOrTPi26X84W7ozrvaAXVD+kUyl7iWF9gQqZr18tkcLdZckpS8wJxxt41IO2n7CL1W0DRgju7ippImG5QUKbc9eYHN1tXs0Mu7qZM5un02l/iZF9jU3L0sOkv6I/TMAxRFN5+7UJTcOOeV3Ulyel1VJ98o9RXTNdSY9rnGnemCakwmmcZpp1XzAhVQYS+955Zf9Oi9Quo2bgo5kL5ZpfVoGTe4NhvSddXGtSEH8vxriN/B5XmBKl0HMd1WHehQpoN7MTkCqnVdOKRALl7gJRCOxWZLIga8dgf0/wcy7dr/AVDJ93a0DNK4toCKy4CD2lEyThFTN+yHyCgg7zf7DSfcj5aZPzbP6u6FVT2UNUzafLhrRmrr2LcIVJfkkFgANPO9bNzn1Rv7mzmorOf1nxIrR11Lv3zUDsJNWN4L+vw8o72mjbVbmtKL+oc5rreX9t/mGJm+sosRIzkBSI+u1IGnk/L8V1dKjct/9OmpELV2oP6a1+0GpNdXByiRDsaA2A5B6HgnnfhjLV6v9WnZDcj3rpTE5u1kUzWQuaqEsgzXlkNxpT7R8p8eQN4Xo27Pu3F3AejFjOZ5SvNDj9/ntdqSnRmsHRhvypp+fhsvFiD16zEvgtxR1QD6ZC7DT3yhPlX67rxqZR/StvMDHsO7WrkA/PMDX+NUDoUFrNYp0rmmPz6GEHSHAQEg9th87stPo0vF9vydJrMOAAAm/8RTAwCYbda/+1vjv1m66bpIBDoCzQwB6k1rLAD61rP2f/DdAL0pnOnTqOGtAf3j9pAS64FuzzZVM6zLl8kcNV4LtJq3Y/2kkH42pcNTUIUxbWUp7WpkuoSdY29KucIf+AtS2AEyIhCGZujMqqp9oNIG0jj+zYVpfdOkaY1hnSsC9KZsTtRzu6eUqKlkd0WSsKVSG/Gzwv5mSShrjHrrlF3aMh2sjTbdxdaXtGuFNUOrOq2rPj2Tz6/+dnT56HK9zYM6padO5EOXyfLQdH7aNQnDiMUoSHoPM126tpePlSXLoAIdrLX0+4SocvGksrSyfbS5vYr4+IviS8LyiEJZc3dlLP3yyaOKZNyPWVkMUOuVdMuK07gldD6XNpYyOUbS6cSn9mCN9pkSWlI08VswoH3OtzJiXUX5MSvwawXd9iZ/1K0sDCNPllU8R4bLY4BD2UtfVvMYdf7oX72rzdb0l5z7S6E93mwJ83rMSuxcne33TPWXno1yF0Y/sTlqdBGD4UWgZYzk/upgskrV+ulOsVppVDeFpZagajhXHL0S0qzMvGi/qK3C2K4kGY6TTaq3N4RPWZjKuhcZ9a3WQKuV36pT16eM9Luq+0iqerfWuZtmd+XWXRGjPF/6S17ly6ri9ZW9wxUhajm2FveXea8JUlZo+Uf5qpGEAjaDCXWUwQv5KEc7UmK9FrYt2Xfux7NSSmdby7FVlEJIQsRSbaMMn59tJ8cyqci2kG2fJLJ1TELUOm2ijBUn2zaWXwIE4LMykuyRs20F4AACsT0KBIDGF4aKDgCuYD4RYXEFoQaeiMmK6ZB0ItlaZYJSU0c2lcPWNF1CYeJFCODHXxRF22yxdTEUGRJa4GA+pzYWyoua0CkQXG0tkJGZ5yNy9SLE+Im9qbEm5AlECWM8vYdgAbxq7RW9tJd6kQIgQ8eA2ojtdtk9VPtdriNVhxKjhNGyeaFYodbIC+Ph+VCjEyP42dzNR+jAIrIQppSoS585myhVN07cAoPln9d7C+TtAgAAAA==", + "headers": [ + [ + "content-type", + "font/woff2" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/icon_bundle.svg": { + "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hhbmdlX2hpc3RvcnlfMjRweCI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fbGVmdF8yNHB4Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX3JpZ2h0XzI0cHgiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjbGVhcl8yNHB4Ij48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImNsb3NlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNvbnRlbnRfY29weV8yNHB4Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRhcmtfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsM2MtNC45NywwLTksNC4wMy05LDlzNC4wMyw5LDksOXM5LTQuMDMsOS05YzAtMC40Ni0wLjA0LTAuOTItMC4xLTEuMzZjLTAuOTgsMS4zNy0yLjU4LDIuMjYtNC40LDIuMjYgYy0yLjk4LDAtNS40LTIuNDItNS40LTUuNGMwLTEuODEsMC44OS0zLjQyLDIuMjYtNC40QzEyLjkyLDMuMDQsMTIuNDYsMywxMiwzTDEyLDN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZG9uZV8yNHB4Ij48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRyYWdfaW5kaWNhdG9yXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMSAxOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTIgMiAuOSAyIDJ6bS0yLThjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wLTZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDRjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImVkaXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXJyb3JfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX2xlc3NfMjRweCI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9tb3JlXzI0cHgiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZpbHRlcl9hbHRfMjRweCI+PGc+PHBhdGggZD0iTTAsMGgyNCBNMjQsMjRIMCIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik00LjI1LDUuNjFDNi4yNyw4LjIsMTAsMTMsMTAsMTN2NmMwLDAuNTUsMC40NSwxLDEsMWgyYzAuNTUsMCwxLTAuNDUsMS0xdi02YzAsMCwzLjcyLTQuOCw1Ljc0LTcuMzkgQzIwLjI1LDQuOTUsMTkuNzgsNCwxOC45NSw0SDUuMDRDNC4yMSw0LDMuNzQsNC45NSw0LjI1LDUuNjF6Ii8+PHBhdGggZD0iTTAsMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImZsYWdfMjRweCI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl9leGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImdldF9hcHBfMjRweCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJncm91cF93b3JrXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImhlbHBfb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJpbWFnZV9zZWFyY2hfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAxM3Y3SDRWNmg1LjAyYy4wNS0uNzEuMjItMS4zOC40OC0ySDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTVsLTItMnptLTEuNSA1aC0xMWwyLjc1LTMuNTMgMS45NiAyLjM2IDIuNzUtMy41NHptMi44LTkuMTFjLjQ0LS43LjctMS41MS43LTIuMzlDMjAgNC4wMSAxNy45OSAyIDE1LjUgMlMxMSA0LjAxIDExIDYuNXMyLjAxIDQuNSA0LjQ5IDQuNWMuODggMCAxLjctLjI2IDIuMzktLjdMMjEgMTMuNDIgMjIuNDIgMTIgMTkuMyA4Ljg5ek0xNS41IDlDMTQuMTIgOSAxMyA3Ljg4IDEzIDYuNVMxNC4xMiA0IDE1LjUgNCAxOCA1LjEyIDE4IDYuNSAxNi44OCA5IDE1LjUgOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJpbmZvX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNiw5VjRsMSwwYzAuNTUsMCwxLTAuNDUsMS0xdjBjMC0wLjU1LTAuNDUtMS0xLTFIN0M2LjQ1LDIsNiwyLjQ1LDYsM3YwIGMwLDAuNTUsMC40NSwxLDEsMWwxLDB2NWMwLDEuNjYtMS4zNCwzLTMsM2gwdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJoMEMxNy4zNCwxMiwxNiwxMC42NiwxNiw5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwX291dGxpbmVfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNCw0djVjMCwxLjEyLDAuMzcsMi4xNiwxLDNIOWMwLjY1LTAuODYsMS0xLjksMS0zVjRIMTQgTTE3LDJIN0M2LjQ1LDIsNiwyLjQ1LDYsM2MwLDAuNTUsMC40NSwxLDEsMWMwLDAsMCwwLDAsMGwxLDB2NSBjMCwxLjY2LTEuMzQsMy0zLDN2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmMwLDAsMCwwLDAsMGMtMS42NiwwLTMtMS4zNC0zLTNWNGwxLDBjMCwwLDAsMCwwLDBjMC41NSwwLDEtMC40NSwxLTEgQzE4LDIuNDUsMTcuNTUsMiwxNywyTDE3LDJ6Ii8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaWdodF9tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiw3Yy0yLjc2LDAtNSwyLjI0LTUsNXMyLjI0LDUsNSw1czUtMi4yNCw1LTVTMTQuNzYsNywxMiw3TDEyLDd6IE0yLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwIGMtMC41NSwwLTEsMC40NS0xLDFTMS40NSwxMywyLDEzeiBNMjAsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDBjLTAuNTUsMC0xLDAuNDUtMSwxUzE5LjQ1LDEzLDIwLDEzeiBNMTEsMnYyIGMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xVjJjMC0wLjU1LTAuNDUtMS0xLTFTMTEsMS40NSwxMSwyeiBNMTEsMjB2MmMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xdi0yYzAtMC41NS0wLjQ1LTEtMS0xIEMxMS40NSwxOSwxMSwxOS40NSwxMSwyMHogTTUuOTksNC41OGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxbDEuMDYsMS4wNiBjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBzMC4zOS0xLjAzLDAtMS40MUw1Ljk5LDQuNTh6IE0xOC4zNiwxNi45NWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxIGwxLjA2LDEuMDZjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFMMTguMzYsMTYuOTV6IE0xOS40Miw1Ljk5YzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxIGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEwxOS40Miw1Ljk5eiBNNy4wNSwxOC4zNiBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMNy4wNSwxOC4zNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGluZV93ZWlnaHRfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0IiB4PSIwIi8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik0zLDE3aDE4di0ySDNWMTd6IE0zLDIwaDE4di0xSDNWMjB6IE0zLDEzaDE4di0zSDNWMTN6IE0zLDR2NGgxOFY0SDN6Ii8+PC9nPjwvZz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibW9yZV92ZXJ0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibm90aWZpY2F0aW9uc19ub25lXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgMjJjMS4xIDAgMi0uOSAyLTJoLTRjMCAxLjEuOSAyIDIgMnptNi02di01YzAtMy4wNy0xLjYzLTUuNjQtNC41LTYuMzJWNGMwLS44My0uNjctMS41LTEuNS0xLjVzLTEuNS42Ny0xLjUgMS41di42OEM3LjY0IDUuMzYgNiA3LjkyIDYgMTF2NWwtMiAydjFoMTZ2LTFsLTItMnptLTIgMUg4di02YzAtMi40OCAxLjUxLTQuNSA0LTQuNXM0IDIuMDIgNCA0LjV2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJwYWxldHRlXzI0cHgiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icmVmcmVzaF8yNHB4Ij48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNldHRpbmdzXzI0cHgiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX2JhY2t1cF9yZXN0b3JlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX292ZXJzY2FuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InZpc2liaWxpdHlfb2ZmXzI0cHgiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJ3YXJuaW5nXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPjwvZGVmcz48L3N2Zz4K", + "headers": [ + [ + "content-type", + "image/svg+xml; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + }, + "https://localhost:6006/index.js?_file_hash=c9c20ad9": { + "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIG12ZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHksZ3ZlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLF92ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHl2ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2dmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMseHZlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxidmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgVEk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpYnZlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pmd2ZShlLHl2ZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIHZ2ZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPV92ZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP212ZSh4dmUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBPZHQ9SCgobF9yLFBJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxDSSxoRyxNZHQsRWR0LFRkdCxUeCxDZHQsQWR0LFBkdCxJZHQsTGR0LGtkdCxSZHQsTmR0LERkdCxBSTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGdsb2JhbD09Im9iamVjdCI/Z2xvYmFsOnR5cGVvZiBzZWxmPT0ib2JqZWN0Ij9zZWxmOnR5cGVvZiB0aGlzPT0ib2JqZWN0Ij90aGlzOnt9O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKCJ0c2xpYiIsWyJleHBvcnRzIl0sZnVuY3Rpb24obil7ZShyKHQscihuKSkpfSk6dHlwZW9mIFBJPT0ib2JqZWN0IiYmdHlwZW9mIFBJLmV4cG9ydHM9PSJvYmplY3QiP2Uocih0LHIoUEkuZXhwb3J0cykpKTplKHIodCkpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbiE9PXQmJih0eXBlb2YgT2JqZWN0LmNyZWF0ZT09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk6bi5fX2VzTW9kdWxlPSEwKSxmdW5jdGlvbihvLGEpe3JldHVybiBuW29dPWk/aShvLGEpOmF9fX0pKGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihuLGkpe24uX19wcm90b19fPWl9fHxmdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYobltvXT1pW29dKX07bWR0PWZ1bmN0aW9uKG4saSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiImJmkhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7dChuLGkpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPW59bi5wcm90b3R5cGU9aT09PW51bGw/T2JqZWN0LmNyZWF0ZShpKTooby5wcm90b3R5cGU9aS5wcm90b3R5cGUsbmV3IG8pfSxnZHQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obil7Zm9yKHZhciBpLG89MSxhPWFyZ3VtZW50cy5sZW5ndGg7bzxhO28rKyl7aT1hcmd1bWVudHNbb107Zm9yKHZhciBzIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJihuW3NdPWlbc10pfXJldHVybiBufSxfZHQ9ZnVuY3Rpb24obixpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKSYmaS5pbmRleE9mKGEpPDAmJihvW2FdPW5bYV0pO2lmKG4hPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgcz0wLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtzPGEubGVuZ3RoO3MrKylpLmluZGV4T2YoYVtzXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG4sYVtzXSkmJihvW2Fbc11dPW5bYVtzXV0pO3JldHVybiBvfSx5ZHQ9ZnVuY3Rpb24obixpLG8sYSl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aCxsPXM8Mz9pOmE9PT1udWxsP2E9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOmEsYztpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKWw9UmVmbGVjdC5kZWNvcmF0ZShuLGksbyxhKTtlbHNlIGZvcih2YXIgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKShjPW5bdV0pJiYobD0oczwzP2MobCk6cz4zP2MoaSxvLGwpOmMoaSxvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLG8sbCksbH0sdmR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aShvLGEsbil9fSx4ZHQ9ZnVuY3Rpb24obixpKXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG4saSl9LGJkdD1mdW5jdGlvbihuLGksbyxhKXtmdW5jdGlvbiBzKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX1yZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUocCl7dHJ5e2YoYS5uZXh0KHApKX1jYXRjaChkKXtjKGQpfX1mdW5jdGlvbiBoKHApe3RyeXtmKGEudGhyb3cocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGYocCl7cC5kb25lP2wocC52YWx1ZSk6cyhwLnZhbHVlKS50aGVuKHUsaCl9ZigoYT1hLmFwcGx5KG4saXx8W10pKS5uZXh0KCkpfSl9LHdkdD1mdW5jdGlvbihuLGkpe3ZhciBvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihsWzBdJjEpdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119LGEscyxsLGM7cmV0dXJuIGM9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBoKFtmLHBdKX19ZnVuY3Rpb24gaChmKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAsZlswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9ZlswXSYyP3MucmV0dXJuOmZbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxmWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihmPVtmWzBdJjIsbC52YWx1ZV0pLGZbMF0pe2Nhc2UgMDpjYXNlIDE6bD1mO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpmWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1mWzFdLGY9WzBdO2NvbnRpbnVlO2Nhc2UgNzpmPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGw9by50cnlzLCEobD1sLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKGZbMF09PT02fHxmWzBdPT09Mikpe289MDtjb250aW51ZX1pZihmWzBdPT09MyYmKCFsfHxmWzFdPmxbMF0mJmZbMV08bFszXSkpe28ubGFiZWw9ZlsxXTticmVha31pZihmWzBdPT09NiYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1mO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2goZik7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfWY9aS5jYWxsKG4sbyl9Y2F0Y2gocCl7Zj1bNixwXSxzPTB9ZmluYWxseXthPWw9MH1pZihmWzBdJjUpdGhyb3cgZlsxXTtyZXR1cm57dmFsdWU6ZlswXT9mWzFdOnZvaWQgMCxkb25lOiEwfX19LFNkdD1mdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBuKW8hPT0iZGVmYXVsdCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmQUkoaSxuLG8pfSxBST1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pO3ZhciBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTsoIXN8fCgiZ2V0ImluIHM/IWkuX19lc01vZHVsZTpzLndyaXRhYmxlfHxzLmNvbmZpZ3VyYWJsZSkpJiYocz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaVtvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixhLHMpfTpmdW5jdGlvbihuLGksbyxhKXthPT09dm9pZCAwJiYoYT1vKSxuW2FdPWlbb119LENJPWZ1bmN0aW9uKG4pe3ZhciBpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixvPWkmJm5baV0sYT0wO2lmKG8pcmV0dXJuIG8uY2FsbChuKTtpZihuJiZ0eXBlb2Ygbi5sZW5ndGg9PSJudW1iZXIiKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmE+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2ErK10sZG9uZTohbn19fTt0aHJvdyBuZXcgVHlwZUVycm9yKGk/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSxoRz1mdW5jdGlvbihuLGkpe3ZhciBvPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gbjt2YXIgYT1vLmNhbGwobikscyxsPVtdLGM7dHJ5e2Zvcig7KGk9PT12b2lkIDB8fGktLSA+MCkmJiEocz1hLm5leHQoKSkuZG9uZTspbC5wdXNoKHMudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sTWR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW49bi5jb25jYXQoaEcoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG59LEVkdD1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKyluKz1hcmd1bWVudHNbaV0ubGVuZ3RoO2Zvcih2YXIgYT1BcnJheShuKSxzPTAsaT0wO2k8bztpKyspZm9yKHZhciBsPWFyZ3VtZW50c1tpXSxjPTAsdT1sLmxlbmd0aDtjPHU7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFRkdD1mdW5jdGlvbihuLGksbyl7aWYob3x8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBhPTAscz1pLmxlbmd0aCxsO2E8czthKyspKGx8fCEoYSBpbiBpKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpLDAsYSkpLGxbYV09aVthXSk7cmV0dXJuIG4uY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpKX0sVHg9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBUeD8odGhpcy52PW4sdGhpcyk6bmV3IFR4KG4pfSxDZHQ9ZnVuY3Rpb24obixpLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYT1vLmFwcGx5KG4saXx8W10pLHMsbD1bXTtyZXR1cm4gcz17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxzO2Z1bmN0aW9uIGMoZyl7YVtnXSYmKHNbZ109ZnVuY3Rpb24oXyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHkseCl7bC5wdXNoKFtnLF8seSx4XSk+MXx8dShnLF8pfSl9KX1mdW5jdGlvbiB1KGcsXyl7dHJ5e2goYVtnXShfKSl9Y2F0Y2goeSl7ZChsWzBdWzNdLHkpfX1mdW5jdGlvbiBoKGcpe2cudmFsdWUgaW5zdGFuY2VvZiBUeD9Qcm9taXNlLnJlc29sdmUoZy52YWx1ZS52KS50aGVuKGYscCk6ZChsWzBdWzJdLGcpfWZ1bmN0aW9uIGYoZyl7dSgibmV4dCIsZyl9ZnVuY3Rpb24gcChnKXt1KCJ0aHJvdyIsZyl9ZnVuY3Rpb24gZChnLF8pe2coXyksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxBZHQ9ZnVuY3Rpb24obil7dmFyIGksbztyZXR1cm4gaT17fSxhKCJuZXh0IiksYSgidGhyb3ciLGZ1bmN0aW9uKHMpe3Rocm93IHN9KSxhKCJyZXR1cm4iKSxpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKHMsbCl7aVtzXT1uW3NdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6VHgobltzXShjKSksZG9uZTpzPT09InJldHVybiJ9Omw/bChjKTpjfTpsfX0sUGR0PWZ1bmN0aW9uKG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxvO3JldHVybiBpP2kuY2FsbChuKToobj10eXBlb2YgQ0k9PSJmdW5jdGlvbiI/Q0kobik6bltTeW1ib2wuaXRlcmF0b3JdKCksbz17fSxhKCJuZXh0IiksYSgidGhyb3ciKSxhKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBhKGwpe29bbF09bltsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsaCl7Yz1uW2xdKGMpLHModSxoLGMuZG9uZSxjLnZhbHVlKX0pfX1mdW5jdGlvbiBzKGwsYyx1LGgpe1Byb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKGYpe2woe3ZhbHVlOmYsZG9uZTp1fSl9LGMpfX0sSWR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwicmF3Iix7dmFsdWU6aX0pOm4ucmF3PWksbn07dmFyIHI9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppfSl9OmZ1bmN0aW9uKG4saSl7bi5kZWZhdWx0PWl9O0xkdD1mdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIGk9e307aWYobiE9bnVsbClmb3IodmFyIG8gaW4gbilvIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmQUkoaSxuLG8pO3JldHVybiByKGksbiksaX0sa2R0PWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX0sUmR0PWZ1bmN0aW9uKG4saSxvLGEpe2lmKG89PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhYTohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIG89PT0ibSI/YTpvPT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6aS5nZXQobil9LE5kdD1mdW5jdGlvbihuLGksbyxhLHMpe2lmKGE9PT0ibSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7aWYoYT09PSJhIiYmIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyIik7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiI/biE9PWl8fCFzOiFpLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBhPT09ImEiP3MuY2FsbChuLG8pOnM/cy52YWx1ZT1vOmkuc2V0KG4sbyksb30sRGR0PWZ1bmN0aW9uKG4saSl7aWYoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IiYmdHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/aT09PW46bi5oYXMoaSl9LGUoIl9fZXh0ZW5kcyIsbWR0KSxlKCJfX2Fzc2lnbiIsZ2R0KSxlKCJfX3Jlc3QiLF9kdCksZSgiX19kZWNvcmF0ZSIseWR0KSxlKCJfX3BhcmFtIix2ZHQpLGUoIl9fbWV0YWRhdGEiLHhkdCksZSgiX19hd2FpdGVyIixiZHQpLGUoIl9fZ2VuZXJhdG9yIix3ZHQpLGUoIl9fZXhwb3J0U3RhciIsU2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLEFJKSxlKCJfX3ZhbHVlcyIsQ0kpLGUoIl9fcmVhZCIsaEcpLGUoIl9fc3ByZWFkIixNZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixFZHQpLGUoIl9fc3ByZWFkQXJyYXkiLFRkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLENkdCksZSgiX19hc3luY0RlbGVnYXRvciIsQWR0KSxlKCJfX2FzeW5jVmFsdWVzIixQZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixJZHQpLGUoIl9faW1wb3J0U3RhciIsTGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLGtkdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsUmR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixOZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRGR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxqbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZyxYbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixmcGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixwcGU9IlxcdTIwMDAtXFx1MjA2ZiIsZHBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2ZwZStwcGUrZHBlLGVxPSJbJ1x1MjAxOV0iLG1wZT0iWyIrWG4rIl0iLFlodD0iWyIrV2h0KyJdIixINj0iWyIrVmwrIl0iLGpodD0iXFxkKyIsZ3BlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrWG4rV2h0K2podCtZaStobStxaHQrIl0iLHJxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLF9wZT0iKD86IitINisifCIrcnErIikiLEtodD0iW14iK1huKyJdIixucT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsaXE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIix5cGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK2VxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrZXErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1fcGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIsdnBlPSIoPzoiK1podCsiKD86IitbS2h0LG5xLGlxXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIix4cGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIsYnBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K3ZwZSx3cGU9Iig/OiIrW2dwZSxucSxpcV0uam9pbigifCIpKyIpIituZnQsU3BlPSIoPzoiK1tLaHQrSDYrIj8iLEg2LG5xLGlxLG1wZV0uam9pbigifCIpKyIpIixNcGU9UmVnRXhwKGVxLCJnIiksRXBlPVJlZ0V4cChINiwiZyIpLG9xPVJlZ0V4cChycSsiKD89IitycSsiKXwiK1NwZStuZnQsImciKSxUcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIseXBlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LGJwZSx4cGUsamh0LHdwZV0uam9pbigifCIpLCJnIiksQ3BlPVJlZ0V4cCgiWyIrWmh0K1huK1ZsK0dodCsiXSIpLEFwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxQcGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxJcGU9LTEsa249e307a25bVHRdPWtuW2JlXT1rbltudF09a25bQ3RdPWtuW1d0XT1rbltmZV09a25bYXRdPWtuW3NlXT1rbltRdF09ITAsa25bYnRdPWtuW010XT1rblskdF09a25bS3RdPWtuW2hlXT1rbltfdF09a25bWF09a25bZXRdPWtuW3FdPWtuW3B0XT1rblt3dF09a25bZWVdPWtuW0xlXT1rblthcl09a25bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgTHBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sa3BlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxScGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LE5wZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxEcGU9cGFyc2VGbG9hdCxPcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCx6cGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fHpwZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1hcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09YXEsc3E9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fHNxJiZzcS5iaW5kaW5nJiZzcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24gRnBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBCcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gVjYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBscSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uICRuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBjcSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gSHBlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiB1cSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBWcGU9aHEoImxlbmd0aCIpO2Z1bmN0aW9uIFVwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBxcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFU2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/ZWRlKHV0LEF0LHZ0KTpVNih1dCxkZnQsdnQpfWZ1bmN0aW9uIEdwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9wcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiBocSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGZxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gV3BlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBwcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIGRxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBZcGUodXQsQXQpe3JldHVybiAkbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIG1xKHV0LEF0KXtyZXR1cm4gJG4oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24ganBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIgWHBlPWZxKExwZSksJHBlPWZxKGtwZSk7ZnVuY3Rpb24gS3BlKHV0KXtyZXR1cm4iXFwiK05wZVt1dF19ZnVuY3Rpb24gWnBlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBDcGUudGVzdCh1dCl9ZnVuY3Rpb24gSnBlKHV0KXtyZXR1cm4gQXBlLnRlc3QodXQpfWZ1bmN0aW9uIFFwZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIGdxKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBxNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIHRkZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gZWRlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiByZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP2lkZSh1dCk6VnBlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9vZGUodXQpOlVwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIG5kZT1mcShScGUpO2Z1bmN0aW9uIGlkZSh1dCl7Zm9yKHZhciBBdD1vcS5sYXN0SW5kZXg9MDtvcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gb2RlKHV0KXtyZXR1cm4gdXQubWF0Y2gob3EpfHxbXX1mdW5jdGlvbiBhZGUodXQpe3JldHVybiB1dC5tYXRjaChUcGUpfHxbXX12YXIgc2RlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLFBwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LF9xPUF0LlJlZ0V4cCxsZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixHNj12dC5wcm90b3R5cGUsY2RlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsVzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFk2PWNkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSx1ZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKFc2JiZXNi5rZXlzJiZXNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLGo2PW14LnRvU3RyaW5nLGhkZT1ZNi5jYWxsKHZuKSxmZGU9Zm8uXyxwZGU9X3EoIl4iK1k2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksWDY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCwkNj1BdC5VaW50OEFycmF5LFNmdD1YNj9YNi5hbGxvY1Vuc2FmZTplLEs2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsWjY9RzYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsSjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSxkZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsbWRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LGdkZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxRNj1qaS5jZWlsLHRJPWppLmZsb29yLHlxPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxfZGU9WDY/WDYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUseWRlPUc2LmpvaW4sdmRlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLHhkZT1nZS5ub3csYmRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sd2RlPUc2LnJldmVyc2UsdnE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHhxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLGVJPUNNJiZuZXcgQ00sX3g9e30sU2RlPWFfKHZxKSxNZGU9YV8oVE0pLEVkZT1hXyh4cSksVGRlPWFfKGd4KSxDZGU9YV8oQ00pLHJJPWdtP2dtLnByb3RvdHlwZTplLFBNPXJJP3JJLnZhbHVlT2Y6ZSxQZnQ9ckk/ckkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKHNpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIWVpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gbkkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1uSS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgobkkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBBZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIFBkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBJZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVVtZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChuSS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBMZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIGtkZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiBSZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIE5kZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gRGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPUxkZSxlXy5wcm90b3R5cGUuZGVsZXRlPWtkZSxlXy5wcm90b3R5cGUuZ2V0PVJkZSxlXy5wcm90b3R5cGUuaGFzPU5kZSxlXy5wcm90b3R5cGUuc2V0PURkZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBPZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIHpkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOlo2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIEZkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9aUkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBCZGUobSl7cmV0dXJuIGlJKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gSGRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPWlJKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPU9kZSxpcC5wcm90b3R5cGUuZGVsZXRlPXpkZSxpcC5wcm90b3R5cGUuZ2V0PUZkZSxpcC5wcm90b3R5cGUuaGFzPUJkZSxpcC5wcm90b3R5cGUuc2V0PUhkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBWZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gVWRlKG0pe3ZhciB2PWdJKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gcWRlKG0pe3JldHVybiBnSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBHZGUobSl7cmV0dXJuIGdJKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uIFdkZShtLHYpe3ZhciBUPWdJKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPVZkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVVkZSxvcC5wcm90b3R5cGUuZ2V0PXFkZSxvcC5wcm90b3R5cGUuaGFzPUdkZSxvcC5wcm90b3R5cGUuc2V0PVdkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIFlkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIGpkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1ZZGUscl8ucHJvdG90eXBlLmhhcz1qZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBYZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiAkZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gS2RlKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBaZGUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIEpkZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1YZGUsZXUucHJvdG90eXBlLmRlbGV0ZT0kZGUsZXUucHJvdG90eXBlLmdldD1LZGUsZXUucHJvdG90eXBlLmhhcz1aZGUsZXUucHJvdG90eXBlLnNldD1KZGU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/ZHEobS5sZW5ndGgsbGRlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtMcSgwLHYtMSldOmV9ZnVuY3Rpb24gUWRlKG0sdil7cmV0dXJuIF9JKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIHRtZShtKXtyZXR1cm4gX0kocHMobSkpfWZ1bmN0aW9uIGJxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gaUkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIGVtZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gcm1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZKNj9KNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gd3EobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ckcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIWVpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1HbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/Um1lKG0scm1lKEosbSkpOmttZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPVdtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9VcTpWcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIG5tZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPVY2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj0kbih2LFdzKFQpKSksTj8oWT1scSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KE1xLCEwKTtmdW5jdGlvbiBpbWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBvSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gb21lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1qbWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgU3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmU3EobSx2LHBvKX1mdW5jdGlvbiBNcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBhSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9WbWUobSk6dGdlKG0pfWZ1bmN0aW9uIEVxKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiBhbWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIHNtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIGxtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBUcShtLHYsVCl7Zm9yKHZhciBOPVQ/bHE6VjYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PSRuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBjbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gc2kobSkmJkxhKG0pPT1idH1mdW5jdGlvbiB1bWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gaG1lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFzaShtKSYmIXNpKHYpP20hPT1tJiZ2IT09djpmbWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBmbWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6Qm1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxIbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBwbWUobSl7cmV0dXJuIHNpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBDcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFlaShtKXx8JG1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP3BkZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiBkbWUobSl7cmV0dXJuIHNpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gbW1lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIGdtZShtKXtyZXR1cm4gc2kobSkmJlNJKG0ubGVuZ3RoKSYmISFrbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQXEobSl7aWYoIU9NKG0pKXJldHVybiB2ZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIF9tZShtKXtpZighZWkobSkpcmV0dXJuIFFtZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIFBxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9R3EobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8Q3EoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gWXEobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ckcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P25HKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIHNJKG0sdixULE4sVil7bSE9PXYmJlNxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLGVpKFkpKXltZShtLHYsSixULHNJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKFhxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLGJxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24geW1lKG0sdixULE4sVixZLEope3ZhciBpdD1YcShtLFQpLGZ0PVhxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXticShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6eGkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIWVpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLGJxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PSRuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PSRuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gV3BlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gTG1lKFksSixUKX0pfWZ1bmN0aW9uIHZtZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIG5HKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiB4bWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBJcShtLHYsVCxOKXt2YXIgVj1OP0dwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9JG4obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZaNi5jYWxsKGl0LGZ0LDEpLFo2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/WjYuY2FsbChtLFYsMSk6TnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gTHEobSx2KXtyZXR1cm4gbSt0SShBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiBibWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoUTYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24ga3EobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj10SSh2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiAkcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiB3bWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gU21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIF9JKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIWVpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1laShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PWVJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIGVJLnNldChtLHYpLG19OmdzLE1tZT1KNj9mdW5jdGlvbihtLHYpe3JldHVybiBKNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOm9HKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIEVtZShtKXtyZXR1cm4gX0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBUbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gbEkobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4gUnEobSx2LGdzLFQpfWZ1bmN0aW9uIFJxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9dEkoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuICRuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1WNixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9bHE7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOnptZShtKTtpZihEdClyZXR1cm4gcTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIE5xKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBjSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGNxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIERxKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBPcShtKXtyZXR1cm4geGkobSk/bTpbXX1mdW5jdGlvbiB6cShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOllxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIENtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9ZGRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiBGcShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgJDYodikuc2V0KG5ldyAkNihtKSksdn1mdW5jdGlvbiBBbWUobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBQbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gSW1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P0ZxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIExtZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBrbWUobSx2KXtyZXR1cm4gZ2gobSxXcShtKSx2KX1mdW5jdGlvbiBSbWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gdUkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT9GcGU6ZW1lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gTm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBjcShzZHQoYWR0KHYpLnJlcGxhY2UoTXBlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIGVpKE4pP046VH19ZnVuY3Rpb24gRG1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LGhJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJm1JKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9bUkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9xcShZKTplO2Z0JiZqcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SlttSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJmpxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiBoSShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1qcGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgYmk9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LGhJLERlLnBsYWNlaG9sZGVyLFQseXIsYmksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPWVnZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gY21lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gZkkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBCcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9JG4odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gcEkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/a3EodixtKTp2O3ZhciBOPWtxKHYsUTYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBPbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSxibWUodixULE4sbSl9fWZ1bmN0aW9uIGRJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIGpxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gSHEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIHptZT1neCYmMS9xNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpsRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP2dxKHYpOlQ9PUxlP3RkZSh2KTpZcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpxcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJkptZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPU5tZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPURtZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1PbWUobSx2LFQsTik6TmU9aEkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gZWkobSkmJmVpKHYpJiYoWS5zZXQodixtKSxzSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gRm1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighdXEodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gQm1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgJDYobSksbmV3ICQ2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1ncTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1xNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEhtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PVZxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1WcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiAkcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gVnEobSl7cmV0dXJuIEZmdChtLHBvLFdxKX1mdW5jdGlvbiBVcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgcXE9ZUk/ZnVuY3Rpb24obSl7cmV0dXJuIGVJLmdldChtKX06bEc7ZnVuY3Rpb24gbUkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxhRztyZXR1cm4gbT1tPT09YUc/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gZ0kobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBYbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBHcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPVpwZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIFZtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPWo2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBXcT15cT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbSh5cShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06Y0csdnB0PXlxP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LFdxKG0pKSxtPUs2KG0pO3JldHVybiB2fTpjRyxuYT1MYTsodnEmJm5hKG5ldyB2cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx4cSYmbmEoeHEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2UgU2RlOnJldHVybiBoZTtjYXNlIE1kZTpyZXR1cm4gcTtjYXNlIEVkZTpyZXR1cm4ga3Q7Y2FzZSBUZGU6cmV0dXJuIExlO2Nhc2UgQ2RlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gVW1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gcW1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJlNJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gR21lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoSzYobSkpOnt9fWZ1bmN0aW9uIFdtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4gRnEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4gQW1lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBQbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gSW1lKG0pfX1mdW5jdGlvbiBZbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIGptZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIWVpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBZcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gWG1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIGpxKG0pe3ZhciB2PW1JKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49cXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiAkbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciBLbWU9VzY/dXA6dUc7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFlaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIFptZShtKXt2YXIgdj1iSShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiBKbWUobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBRbWUobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIHRnZShtKXtyZXR1cm4gajYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIGVnZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIFhxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPWdkZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSwkcT1BcHQoTW1lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuICRxKG0sWW1lKE4scmdlKHFtZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj14ZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBfSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9THEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9Wm1lKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFk2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIHJnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhVjYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gbmdlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KFE2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBpZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIG9nZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciBhZ2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4geGkobSk/TE0obSxSbyh2LDEseGksITApKTpbXX0pLHNnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiB4aShUKSYmKFQ9ZSkseGkobSk/TE0obSxSbyh2LDEseGksITApLGtlKFQsMikpOltdfSksbGdlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIHhpKFQpJiYoVD1lKSx4aShtKT9MTShtLFJvKHYsMSx4aSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIGNnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiB1Z2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gaGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gZmdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2NJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gcGdlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxvbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFU2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxVNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIGRnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiBtZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiBnZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBfZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24geWdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciB2Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9JG4obSxPcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9UcSh2KTpbXX0pLHhnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPSRuKG0sT3EpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP1RxKFQsa2UodiwyKSk6W119KSxiZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD0kbihtLE9xKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/VHEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gd2dlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6eWRlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gU2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P3JkZShtLHYsVik6VTYobSxkZnQsViwhMCl9ZnVuY3Rpb24gTWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBFZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdik6bX1mdW5jdGlvbiBUZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/SXEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gQ2dlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP0lxKG0sdixlLFQpOm19dmFyIEFnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPXdxKG0sdik7cmV0dXJuIFhmdChtLCRuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIFBnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uIEtxKG0pe3JldHVybiBtPT1udWxsP206d2RlLmNhbGwobSl9ZnVuY3Rpb24gSWdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIExnZShtLHYpe3JldHVybiBsSShtLHYpfWZ1bmN0aW9uIGtnZShtLHYsVCl7cmV0dXJuIFJxKG0sdixrZShULDIpKX1mdW5jdGlvbiBSZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49bEkobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gTmdlKG0sdil7cmV0dXJuIGxJKG0sdiwhMCl9ZnVuY3Rpb24gRGdlKG0sdixUKXtyZXR1cm4gUnEobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIE9nZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1sSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiB6Z2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiBGZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gQmdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gSGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIFZnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBxZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/Y0kobSxrZSh2LDMpKTpbXX12YXIgR2dlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEseGksITApKX0pLFdnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4geGkodikmJih2PWUpLHltKFJvKG0sMSx4aSwhMCksa2UodiwyKSl9KSxZZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSx4aSwhMCksZSx2KX0pO2Z1bmN0aW9uIGpnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gWGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gJGdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBacShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoeGkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxkcSh2LGZ1bmN0aW9uKFQpe3JldHVybiAkbihtLGhxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPVpxKG0pO3JldHVybiB2PT1udWxsP1Q6JG4oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyIEtnZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiB4aShtKT9MTShtLHYpOltdfSksWmdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBEcShmbShtLHhpKSl9KSxKZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHhpKHYpJiYodj1lKSxEcShmbShtLHhpKSxrZSh2LDIpKX0pLFFnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsRHEoZm0obSx4aSksZSx2KX0pLHQwZT1ucihacSk7ZnVuY3Rpb24gZTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gcjBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIG4wZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gaTBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiB5SShtLHYpe3JldHVybiB2KG0pfXZhciBvMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gd3EoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOnlJLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gYTBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBzMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gbDBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gYzBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gdTBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIG5JOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiBoMGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6eUksYXJnczpbS3FdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KEtxKX1mdW5jdGlvbiBmMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIHAwZT11SShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiBkMGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDppbWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIG0wZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBnMGU9dXB0KExwdCksXzBlPXVwdChrcHQpO2Z1bmN0aW9uIHkwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLDEpfWZ1bmN0aW9uIHYwZShtLHYpe3JldHVybiBSbyh2SShtLHYpLHopfWZ1bmN0aW9uIHgwZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh2SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/QnBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBiMGU9dUkoZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiB3MGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLE1JKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciBTMGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxNMGU9dUkoZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHZJKG0sdil7dmFyIFQ9JGUobSk/JG46VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gRTBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgVDBlPXVJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBDMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBBMGUobSx2LFQpe3ZhciBOPSRlKG0pP0hwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIFAwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLHdJKGtlKHYsMykpKX1mdW5jdGlvbiBJMGUobSl7dmFyIHY9JGUobSk/TGZ0OndtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBMMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/UWRlOlNtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIGswZShtKXt2YXIgdj0kZShtKT90bWU6RW1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIFIwZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBNSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkFxKG0pLmxlbmd0aH1mdW5jdGlvbiBOMGUobSx2LFQpe3ZhciBOPSRlKG0pP3VxOlRtZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIEQwZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx4ST1tZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIE8wZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBKcT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChKcSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLGVpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKGJpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD1iaSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUoYmkpe3JldHVybiBEdD1iaSxpdD16TShwcix2KSxPdD9UZShiaSk6Sn1mdW5jdGlvbiBlcihiaSl7dmFyIG51PWJpLWZ0LGZwPWJpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKGJpKXt2YXIgbnU9YmktZnQsZnA9YmktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciBiaT14SSgpO2lmKERlKGJpKSlyZXR1cm4geXIoYmkpO2l0PXpNKHByLGVyKGJpKSl9ZnVuY3Rpb24geXIoYmkpe3JldHVybiBpdD1lLG9lJiZOP1RlKGJpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih4SSgpKX1mdW5jdGlvbiAkcygpe3ZhciBiaT14SSgpLG51PURlKGJpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9YmksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgejBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSxGMGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIEIwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiBiSShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KGJJLkNhY2hlfHxvcCksVH1iSS5DYWNoZT1vcDtmdW5jdGlvbiB3SShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gSDBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgVjBlPUNtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pPyRuKHZbMF0sV3Moa2UoKSkpOiRuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxRcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoUXEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxVMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gcTBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBHMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gVzBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gZWkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBZMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIGowZShtLHYpe3JldHVybiBRcSh6cSh2KSxtKX1mdW5jdGlvbiBYMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uICQwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiBLMGUobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIFowZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIEowZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBRMGUobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgdF9lPWRJKEVxKSxlX2U9ZEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gc2kobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxyX2U9YWZ0P1dzKGFmdCk6dW1lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZTSShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiB4aShtKXtyZXR1cm4gc2kobSkmJmRzKG0pfWZ1bmN0aW9uIG5fZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fHNpKG0pJiZMYShtKT09S3R9dmFyIGJtPV9kZXx8dUcsaV9lPXNmdD9XcyhzZnQpOmhtZTtmdW5jdGlvbiBvX2UobSl7cmV0dXJuIHNpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIGFfZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQXEobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBsX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiB0RyhtKXtpZighc2kobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBjX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFlaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIFNJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiBlaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBzaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6cG1lO2Z1bmN0aW9uIHVfZShtLHYpe3JldHVybiBtPT09dnx8Q3EobSx2LEdxKHYpKX1mdW5jdGlvbiBoX2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxDcShtLHYsR3EodiksVCl9ZnVuY3Rpb24gZl9lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIHBfZShtKXtpZihLbWUobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24gZF9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiBtX2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fHNpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIXNpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9SzYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlk2LmNhbGwoVCk9PWhkZX12YXIgZUc9Y2Z0P1dzKGNmdCk6ZG1lO2Z1bmN0aW9uIGdfZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOm1tZTtmdW5jdGlvbiBNSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJnNpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8c2kobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6Z21lO2Z1bmN0aW9uIF9fZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBzaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24gdl9lKG0pe3JldHVybiBzaShtKSYmTGEobSk9PUl0fXZhciB4X2U9ZEkoUHEpLGJfZT1kSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBNSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIFFwZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/Z3E6dj09TGU/cTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihlaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209ZWkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxqbi50ZXN0KG0pP09wZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiB3X2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciBTX2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLEVJPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLE1fZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxFX2U9bHAod3EpO2Z1bmN0aW9uIFRfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIENfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxBX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBQX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gSV9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksTXEpfWZ1bmN0aW9uIExfZShtLHYpe3JldHVybiBtPT1udWxsP206U3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBrX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIFJfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIE5fZShtLHYpe3JldHVybiBtJiZNcShtLGtlKHYsMykpfWZ1bmN0aW9uIERfZShtKXtyZXR1cm4gbT09bnVsbD9bXTphSShtLHBvKG0pKX1mdW5jdGlvbiBPX2UobSl7cmV0dXJuIG09PW51bGw/W106YUkobSxtcyhtKSl9ZnVuY3Rpb24gckcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gel9lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsYW1lKX1mdW5jdGlvbiBuRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LHNtZSl9dmFyIEZfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1qNi5jYWxsKHYpKSxtW3ZdPVR9LG9HKGdzKSksQl9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PWo2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxIX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6QXEobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpfbWUobSl9ZnVuY3Rpb24gVl9lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBVX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBxX2U9dngoZnVuY3Rpb24obSx2LFQpe3NJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXtzSShtLHYsVCxOKX0pLEdfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj0kbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVXEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCxGbWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylOcShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gV19lKG0sdil7cmV0dXJuIHJkdChtLHdJKGtlKHYpKSl9dmFyIFlfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OnZtZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD0kbihVcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIGpfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gWF9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiAkX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gS19lKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTplaShtKT9UPXVwKFkpP3l4KEs2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIFpfZShtLHYpe3JldHVybiBtPT1udWxsPyEwOk5xKG0sdil9ZnVuY3Rpb24gSl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsenEoVCkpfWZ1bmN0aW9uIFFfZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsenEoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106bXEobSxwbyhtKSl9ZnVuY3Rpb24gdHllKG0pe3JldHVybiBtPT1udWxsP1tdOm1xKG0sbXMobSkpfWZ1bmN0aW9uIGV5ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gcnllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLGxtZShtLHYsVCl9ZnVuY3Rpb24gbnllKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rRHBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIExxKG0sdil9dmFyIGl5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBpRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLFhwZSkucmVwbGFjZShFcGUsIiIpfWZ1bmN0aW9uIG95ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiBheWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sJHBlKTptfWZ1bmN0aW9uIHN5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIGx5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxjeWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksdXllPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiBoeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gcEkodEkoViksVCkrbStwSShRNihWKSxUKX1mdW5jdGlvbiBmeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK3BJKHYtTixUKTptfWZ1bmN0aW9uIHB5ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P3BJKHYtTixUKSttOm19ZnVuY3Rpb24gZHllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLGJkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiBteWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksa3Eob24obSksdil9ZnVuY3Rpb24gZ3llKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgX3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIHl5ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhZUcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgdnllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK2lHKHYpfSk7ZnVuY3Rpb24geHllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiBieWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1FSSh7fSx2LE4sZ3B0KTt2YXIgVj1FSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPW1xKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPV9xKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK0lwZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCxLcGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LHRHKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gd3llKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFN5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBNeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBFeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gVHllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gQ3llKG0sdil7dmFyIFQ9TyxOPUQ7aWYoZWkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLGVHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPV9xKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIEF5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxuZGUpOm19dmFyIFB5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxpRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP0pwZShtKT9hZGUobSk6cXBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gdEcoVCk/VDpuZXcgV2UoVCl9fSksSXllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsSnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gTHllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj8kbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24ga3llKG0pe3JldHVybiBubWUoWWwobSxjKSl9ZnVuY3Rpb24gb0cobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIFJ5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIE55ZT1ocHQoKSxEeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBhRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gT3llKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24genllKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciBGeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxCeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBzRyhtLHYsVCl7dmFyIE49cG8odiksVj1hSSh2LE4pO1Q9PW51bGwmJiEoZWkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPWFJKHYscG8odikpKTt2YXIgWT0hKGVpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEh5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89ZmRlKSx0aGlzfWZ1bmN0aW9uIGxHKCl7fWZ1bmN0aW9uIFZ5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgVXllPUJxKCRuKSxxeWU9QnEoZmZ0KSxHeWU9QnEodXEpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gWXEobSk/aHEoX2gobSkpOnhtZShtKX1mdW5jdGlvbiBXeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIFl5ZT1wcHQoKSxqeWU9cHB0KCEwKTtmdW5jdGlvbiBjRygpe3JldHVybltdfWZ1bmN0aW9uIHVHKCl7cmV0dXJuITF9ZnVuY3Rpb24gWHllKCl7cmV0dXJue319ZnVuY3Rpb24gJHllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gS3llKCl7cmV0dXJuITB9ZnVuY3Rpb24gWnllKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPWRxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gSnllKG0pe3JldHVybiAkZShtKT8kbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gUXllKG0pe3ZhciB2PSsrdWRlO3JldHVybiBvbihtKSt2fXZhciB0dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSxldmU9SHEoImNlaWwiKSxydmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxudmU9SHEoImZsb29yIik7ZnVuY3Rpb24gaXZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGdzLEVxKTplfWZ1bmN0aW9uIG92ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9vSShtLGtlKHYsMiksRXEpOmV9ZnVuY3Rpb24gYXZlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gc3ZlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIGx2ZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxncyxQcSk6ZX1mdW5jdGlvbiBjdmUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/b0kobSxrZSh2LDIpLFBxKTplfXZhciB1dmU9ZkkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSxodmU9SHEoInJvdW5kIiksZnZlPWZJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gcHZlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGdzKTowfWZ1bmN0aW9uIGR2ZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9wcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9TzBlLEcuYXJ5PUhwdCxHLmFzc2lnbj1TX2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9RUksRy5hc3NpZ25XaXRoPU1fZSxHLmF0PUVfZSxHLmJlZm9yZT1WcHQsRy5iaW5kPUpxLEcuYmluZEFsbD1JeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1YMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1uZ2UsRy5jb21wYWN0PWlnZSxHLmNvbmNhdD1vZ2UsRy5jb25kPUx5ZSxHLmNvbmZvcm1zPWt5ZSxHLmNvbnN0YW50PW9HLEcuY291bnRCeT1wMGUsRy5jcmVhdGU9VF9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1DX2UsRy5kZWZhdWx0c0RlZXA9QV9lLEcuZGVmZXI9ejBlLEcuZGVsYXk9RjBlLEcuZGlmZmVyZW5jZT1hZ2UsRy5kaWZmZXJlbmNlQnk9c2dlLEcuZGlmZmVyZW5jZVdpdGg9bGdlLEcuZHJvcD1jZ2UsRy5kcm9wUmlnaHQ9dWdlLEcuZHJvcFJpZ2h0V2hpbGU9aGdlLEcuZHJvcFdoaWxlPWZnZSxHLmZpbGw9cGdlLEcuZmlsdGVyPW0wZSxHLmZsYXRNYXA9eTBlLEcuZmxhdE1hcERlZXA9djBlLEcuZmxhdE1hcERlcHRoPXgwZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9ZGdlLEcuZmxhdHRlbkRlcHRoPW1nZSxHLmZsaXA9QjBlLEcuZmxvdz1OeWUsRy5mbG93UmlnaHQ9RHllLEcuZnJvbVBhaXJzPWdnZSxHLmZ1bmN0aW9ucz1EX2UsRy5mdW5jdGlvbnNJbj1PX2UsRy5ncm91cEJ5PWIwZSxHLmluaXRpYWw9eWdlLEcuaW50ZXJzZWN0aW9uPXZnZSxHLmludGVyc2VjdGlvbkJ5PXhnZSxHLmludGVyc2VjdGlvbldpdGg9YmdlLEcuaW52ZXJ0PUZfZSxHLmludmVydEJ5PUJfZSxHLmludm9rZU1hcD1TMGUsRy5pdGVyYXRlZT1hRyxHLmtleUJ5PU0wZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9dkksRy5tYXBLZXlzPVZfZSxHLm1hcFZhbHVlcz1VX2UsRy5tYXRjaGVzPU95ZSxHLm1hdGNoZXNQcm9wZXJ0eT16eWUsRy5tZW1vaXplPWJJLEcubWVyZ2U9cV9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD1GeWUsRy5tZXRob2RPZj1CeWUsRy5taXhpbj1zRyxHLm5lZ2F0ZT13SSxHLm50aEFyZz1WeWUsRy5vbWl0PUdfZSxHLm9taXRCeT1XX2UsRy5vbmNlPUgwZSxHLm9yZGVyQnk9RTBlLEcub3Zlcj1VeWUsRy5vdmVyQXJncz1WMGUsRy5vdmVyRXZlcnk9cXllLEcub3ZlclNvbWU9R3llLEcucGFydGlhbD1RcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249VDBlLEcucGljaz1ZX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj1XeWUsRy5wdWxsPUVnZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PVRnZSxHLnB1bGxBbGxXaXRoPUNnZSxHLnB1bGxBdD1BZ2UsRy5yYW5nZT1ZeWUsRy5yYW5nZVJpZ2h0PWp5ZSxHLnJlYXJnPVUwZSxHLnJlamVjdD1QMGUsRy5yZW1vdmU9UGdlLEcucmVzdD1xMGUsRy5yZXZlcnNlPUtxLEcuc2FtcGxlU2l6ZT1MMGUsRy5zZXQ9WF9lLEcuc2V0V2l0aD0kX2UsRy5zaHVmZmxlPWswZSxHLnNsaWNlPUlnZSxHLnNvcnRCeT1EMGUsRy5zb3J0ZWRVbmlxPXpnZSxHLnNvcnRlZFVuaXFCeT1GZ2UsRy5zcGxpdD15eWUsRy5zcHJlYWQ9RzBlLEcudGFpbD1CZ2UsRy50YWtlPUhnZSxHLnRha2VSaWdodD1WZ2UsRy50YWtlUmlnaHRXaGlsZT1VZ2UsRy50YWtlV2hpbGU9cWdlLEcudGFwPWkwZSxHLnRocm90dGxlPVcwZSxHLnRocnU9eUksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1KeWUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT1LX2UsRy51bmFyeT1ZMGUsRy51bmlvbj1HZ2UsRy51bmlvbkJ5PVdnZSxHLnVuaW9uV2l0aD1ZZ2UsRy51bmlxPWpnZSxHLnVuaXFCeT1YZ2UsRy51bmlxV2l0aD0kZ2UsRy51bnNldD1aX2UsRy51bnppcD1acSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9Sl9lLEcudXBkYXRlV2l0aD1RX2UsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj10eWUsRy53aXRob3V0PUtnZSxHLndvcmRzPXNkdCxHLndyYXA9ajBlLEcueG9yPVpnZSxHLnhvckJ5PUpnZSxHLnhvcldpdGg9UWdlLEcuemlwPXQwZSxHLnppcE9iamVjdD1lMGUsRy56aXBPYmplY3REZWVwPXIwZSxHLnppcFdpdGg9bjBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9RUksc0coRyxHKSxHLmFkZD10dmUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1peWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9ZXZlLEcuY2xhbXA9ZXllLEcuY2xvbmU9JDBlLEcuY2xvbmVEZWVwPVowZSxHLmNsb25lRGVlcFdpdGg9SjBlLEcuY2xvbmVXaXRoPUswZSxHLmNvbmZvcm1zVG89UTBlLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz1SeWUsRy5kaXZpZGU9cnZlLEcuZW5kc1dpdGg9b3llLEcuZXE9cnUsRy5lc2NhcGU9YXllLEcuZXNjYXBlUmVnRXhwPXN5ZSxHLmV2ZXJ5PWQwZSxHLmZpbmQ9ZzBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9UF9lLEcuZmluZExhc3Q9XzBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1JX2UsRy5mbG9vcj1udmUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1MX2UsRy5mb3JJblJpZ2h0PWtfZSxHLmZvck93bj1SX2UsRy5mb3JPd25SaWdodD1OX2UsRy5nZXQ9ckcsRy5ndD10X2UsRy5ndGU9ZV9lLEcuaGFzPXpfZSxHLmhhc0luPW5HLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPXcwZSxHLmluZGV4T2Y9X2dlLEcuaW5SYW5nZT1yeWUsRy5pbnZva2U9SF9lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1yX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PXhpLEcuaXNCb29sZWFuPW5fZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPWlfZSxHLmlzRWxlbWVudD1vX2UsRy5pc0VtcHR5PWFfZSxHLmlzRXF1YWw9c19lLEcuaXNFcXVhbFdpdGg9bF9lLEcuaXNFcnJvcj10RyxHLmlzRmluaXRlPWNfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9U0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPXVfZSxHLmlzTWF0Y2hXaXRoPWhfZSxHLmlzTmFOPWZfZSxHLmlzTmF0aXZlPXBfZSxHLmlzTmlsPW1fZSxHLmlzTnVsbD1kX2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1laSxHLmlzT2JqZWN0TGlrZT1zaSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD1lRyxHLmlzU2FmZUludGVnZXI9Z19lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9TUksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPV9fZSxHLmlzV2Vha01hcD15X2UsRy5pc1dlYWtTZXQ9dl9lLEcuam9pbj13Z2UsRy5rZWJhYkNhc2U9bHllLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPVNnZSxHLmxvd2VyQ2FzZT1jeWUsRy5sb3dlckZpcnN0PXV5ZSxHLmx0PXhfZSxHLmx0ZT1iX2UsRy5tYXg9aXZlLEcubWF4Qnk9b3ZlLEcubWVhbj1hdmUsRy5tZWFuQnk9c3ZlLEcubWluPWx2ZSxHLm1pbkJ5PWN2ZSxHLnN0dWJBcnJheT1jRyxHLnN0dWJGYWxzZT11RyxHLnN0dWJPYmplY3Q9WHllLEcuc3R1YlN0cmluZz0keWUsRy5zdHViVHJ1ZT1LeWUsRy5tdWx0aXBseT11dmUsRy5udGg9TWdlLEcubm9Db25mbGljdD1IeWUsRy5ub29wPWxHLEcubm93PXhJLEcucGFkPWh5ZSxHLnBhZEVuZD1meWUsRy5wYWRTdGFydD1weWUsRy5wYXJzZUludD1keWUsRy5yYW5kb209bnllLEcucmVkdWNlPUMwZSxHLnJlZHVjZVJpZ2h0PUEwZSxHLnJlcGVhdD1teWUsRy5yZXBsYWNlPWd5ZSxHLnJlc3VsdD1qX2UsRy5yb3VuZD1odmUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9STBlLEcuc2l6ZT1SMGUsRy5zbmFrZUNhc2U9X3llLEcuc29tZT1OMGUsRy5zb3J0ZWRJbmRleD1MZ2UsRy5zb3J0ZWRJbmRleEJ5PWtnZSxHLnNvcnRlZEluZGV4T2Y9UmdlLEcuc29ydGVkTGFzdEluZGV4PU5nZSxHLnNvcnRlZExhc3RJbmRleEJ5PURnZSxHLnNvcnRlZExhc3RJbmRleE9mPU9nZSxHLnN0YXJ0Q2FzZT12eWUsRy5zdGFydHNXaXRoPXh5ZSxHLnN1YnRyYWN0PWZ2ZSxHLnN1bT1wdmUsRy5zdW1CeT1kdmUsRy50ZW1wbGF0ZT1ieWUsRy50aW1lcz1aeWUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9d3llLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPXdfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj1TeWUsRy50cmltPU15ZSxHLnRyaW1FbmQ9RXllLEcudHJpbVN0YXJ0PVR5ZSxHLnRydW5jYXRlPUN5ZSxHLnVuZXNjYXBlPUF5ZSxHLnVuaXF1ZUlkPVF5ZSxHLnVwcGVyQ2FzZT1QeWUsRy51cHBlckZpcnN0PWlHLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LHNHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKHdJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzp5SSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9RzZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFtoSShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPUFkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1QZGUsZ3IucHJvdG90eXBlLnZhbHVlPUlkZSxHLnByb3RvdHlwZS5hdD1vMGUsRy5wcm90b3R5cGUuY2hhaW49YTBlLEcucHJvdG90eXBlLmNvbW1pdD1zMGUsRy5wcm90b3R5cGUubmV4dD1sMGUsRy5wcm90b3R5cGUucGxhbnQ9dTBlLEcucHJvdG90eXBlLnJldmVyc2U9aDBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWYwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPWMwZSksR30sbW09c2RlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sYXEuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gcF90KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEo5KHIpfWZ1bmN0aW9uIEo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGYyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHAyZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGZfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09aDJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgaDJlLHZzLGRfdD1NKCgpPT57aDJlPXt2YWx1ZTpmdW5jdGlvbigpe319O0o5LnByb3RvdHlwZT1wX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWYyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXAyZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Zl90KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Zl90KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBKOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9cF90fSk7dmFyIGttPU0oKCk9PntkX3QoKX0pO2Z1bmN0aW9uIF9ZKGUpe3JldHVybitlfXZhciBTdnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gdlkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gSUwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIE12dD1NKCgpPT57fSk7ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIGJZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgRXZ0PU0oKCk9Pnt9KTt2YXIgd1ksU1ksTVksTEwsVHZ0PU0oKCk9Pnt3WT0zLFNZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0od1kpLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KHdZKSxMTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfSh3WSl9KTtmdW5jdGlvbiBFWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSpBdnQpfWZ1bmN0aW9uIFRZKGUpe3JldHVybiBNYXRoLnNpbihlKkF2dCl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKDEtTWF0aC5jb3MoQ3Z0KmUpKS8yfXZhciBDdnQsQXZ0LFB2dD1NKCgpPT57Q3Z0PU1hdGguUEksQXZ0PUN2dC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIENZPU0oKCk9Pnt9KTtmdW5jdGlvbiBBWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gUFkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24gUkwoZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgSXZ0PU0oKCk9PntDWSgpfSk7ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBMWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBOTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgTHZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxrWT9ETCplKmU6ZTxhU2U/REwqKGUtPW9TZSkqZStzU2U6ZTxjU2U/REwqKGUtPWxTZSkqZSt1U2U6REwqKGUtPWhTZSkqZStmU2V9ZnVuY3Rpb24gTlkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBrWSxvU2UsYVNlLHNTZSxsU2UsY1NlLHVTZSxoU2UsZlNlLERMLGt2dD1NKCgpPT57a1k9LjM2MzYzNjM2MzYzNjM2MzY1LG9TZT02LzExLGFTZT04LzExLHNTZT0zLzQsbFNlPTkvMTEsY1NlPTEwLzExLHVTZT0xNS8xNixoU2U9MjEvMjIsZlNlPTYzLzY0LERMPTEva1kva1l9KTt2YXIgRFksT1kselksT0wsUnZ0PU0oKCk9PntEWT0xLjcwMTU4LE9ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSx6WT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERZKSxPTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oRFkpfSk7dmFyIFNiLEZZLEJZLEhZLHpMLFZZLE52dD1NKCgpPT57Q1koKTtTYj0yKk1hdGguUEksRlk9MSxCWT0uMyxIWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEZZLEJZKSx6TD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShGWSxCWSksVlk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlksQlkpfSk7dmFyIER2dD17fTtLcyhEdnQse2Vhc2VCYWNrOigpPT5PTCxlYXNlQmFja0luOigpPT5PWSxlYXNlQmFja0luT3V0OigpPT5PTCxlYXNlQmFja091dDooKT0+elksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5SWSxlYXNlQm91bmNlSW5PdXQ6KCk9Pk5ZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9Pk5MLGVhc2VDaXJjbGVJbjooKT0+SVksZWFzZUNpcmNsZUluT3V0OigpPT5OTCxlYXNlQ2lyY2xlT3V0OigpPT5MWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT54WSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT5iWSxlYXNlRWxhc3RpYzooKT0+ekwsZWFzZUVsYXN0aWNJbjooKT0+SFksZWFzZUVsYXN0aWNJbk91dDooKT0+VlksZWFzZUVsYXN0aWNPdXQ6KCk9PnpMLGVhc2VFeHA6KCk9PlJMLGVhc2VFeHBJbjooKT0+QVksZWFzZUV4cEluT3V0OigpPT5STCxlYXNlRXhwT3V0OigpPT5QWSxlYXNlTGluZWFyOigpPT5fWSxlYXNlUG9seTooKT0+TEwsZWFzZVBvbHlJbjooKT0+U1ksZWFzZVBvbHlJbk91dDooKT0+TEwsZWFzZVBvbHlPdXQ6KCk9Pk1ZLGVhc2VRdWFkOigpPT5JTCxlYXNlUXVhZEluOigpPT55WSxlYXNlUXVhZEluT3V0OigpPT5JTCxlYXNlUXVhZE91dDooKT0+dlksZWFzZVNpbjooKT0+a0wsZWFzZVNpbkluOigpPT5FWSxlYXNlU2luSW5PdXQ6KCk9PmtMLGVhc2VTaW5PdXQ6KCk9PlRZfSk7dmFyIElfPU0oKCk9PntTdnQoKTtNdnQoKTtFdnQoKTtUdnQoKTtQdnQoKTtJdnQoKTtMdnQoKTtrdnQoKTtSdnQoKTtOdnQoKX0pO2Z1bmN0aW9uIFlMKCl7fWZ1bmN0aW9uICR2dChlLHQpe3ZhciByPW5ldyBZTDtpZihlIGluc3RhbmNlb2YgWUwpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLGpMPU0oKCk9PntlbD0iJCI7WUwucHJvdG90eXBlPSR2dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9JHZ0fSk7ZnVuY3Rpb24gSnZ0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxJU2UsTFNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxLdnQsWnZ0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCxLdnQsWnZ0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIElTZSgpe3JldHVybnt9fWZ1bmN0aW9uIExTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uIEt2dCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIFp2dChlLHQscil7ZS5zZXQodCxyKX12YXIgUXZ0PU0oKCk9PntqTCgpfSk7ZnVuY3Rpb24gWEwoKXt9ZnVuY3Rpb24gdDF0KGUsdCl7dmFyIHI9bmV3IFhMO2lmKGUgaW5zdGFuY2VvZiBYTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sZTF0LHIxdD1NKCgpPT57akwoKTtrXz1KaS5wcm90b3R5cGU7WEwucHJvdG90eXBlPXQxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTtlMXQ9dDF0fSk7ZnVuY3Rpb24gJEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBuMXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGkxdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIG8xdD1NKCgpPT57fSk7ZnVuY3Rpb24gYTF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBzMXQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57UXZ0KCk7cjF0KCk7akwoKTtuMXQoKTtvMXQoKTtzMXQoKX0pO2Z1bmN0aW9uIG0xdChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEhTZShlLHQpe3ZhciByPW0xdChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIGQxdChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gVlNlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFVTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6VlNlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/SFNlKF8sZik6bTF0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVVFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1uaiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiBlajtpZihiKXJldHVybiBiPSExLHAxdDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1yail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09cmp8fGguY2hhckNvZGVBdCgrK2cpPT09cmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVVFP2I9ITA6Tz09PW5qJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1VRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VUUpYj0hMDtlbHNlIGlmKE89PT1uailiPSEwLGguY2hhckNvZGVBdChnKT09PVVFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1lajspe2Zvcih2YXIgQz1bXTt5IT09cDF0JiZ5IT09ZWo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPWQxdChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1VTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBwMXQsZWoscmosVUUsbmosdGs9TSgoKT0+e3AxdD17fSxlaj17fSxyaj0zNCxVRT0xMCxuaj0xM30pO3ZhciBSXyxDYixnMXQsXzF0LHkxdCx2MXQseDF0LGIxdCx3MXQ9TSgoKT0+e3RrKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSxnMXQ9Ul8ucGFyc2VSb3dzLF8xdD1SXy5mb3JtYXQseTF0PVJfLmZvcm1hdEJvZHksdjF0PVJfLmZvcm1hdFJvd3MseDF0PVJfLmZvcm1hdFJvdyxiMXQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsUzF0LE0xdCxFMXQsVDF0LEMxdCxBMXQsUDF0PU0oKCk9Pnt0aygpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2UsUzF0PU5fLnBhcnNlUm93cyxNMXQ9Tl8uZm9ybWF0LEUxdD1OXy5mb3JtYXRCb2R5LFQxdD1OXy5mb3JtYXRSb3dzLEMxdD1OXy5mb3JtYXRSb3csQTF0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gaWooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKXFTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBxU2UsSTF0PU0oKCk9PntxU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgcUU9TSgoKT0+e3RrKCk7dzF0KCk7UDF0KCk7STF0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT5kNWUsX19hc3luY0RlbGVnYXRvcjooKT0+TTVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9PlM1ZSxfX2FzeW5jVmFsdWVzOigpPT5FNWUsX19hd2FpdDooKT0+VTUsX19hd2FpdGVyOigpPT52NWUsX19kZWNvcmF0ZTooKT0+ZzVlLF9fZXhwb3J0U3RhcjooKT0+YjVlLF9fZXh0ZW5kczooKT0+cDVlLF9fZ2VuZXJhdG9yOigpPT54NWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PlQ1ZSxfX21ldGFkYXRhOigpPT55NWUsX19wYXJhbTooKT0+XzVlLF9fcmVhZDooKT0+UTN0LF9fcmVzdDooKT0+bTVlLF9fc3ByZWFkOigpPT53NWUsX192YWx1ZXM6KCk9PnkkfSk7ZnVuY3Rpb24gcDVlKGUsdCl7ZjVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gbTVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIGc1ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIF81ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiB5NWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24gdjVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIHg1ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiBiNWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB5JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gUTN0KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIHc1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KFEzdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBVNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFU1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVTUoZSl9ZnVuY3Rpb24gUzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVTU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBNNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpVNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gRTVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHkkPT0iZnVuY3Rpb24iP3kkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIFQ1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGY1ZSxkNWUsZGU9TSgoKT0+e2Y1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07ZDVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgdE10LGVNdD1NKCgpPT57dE10PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1DNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBDNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB2JD1NKCgpPT57cHkoKX0pO3ZhciByTXQseCQsbk10LHNSLGIkPU0oKCk9PntweSgpO3YkKCk7ck10PWFSKF9jKSx4JD1yTXQucmlnaHQsbk10PXJNdC5sZWZ0LHNSPXgkfSk7ZnVuY3Rpb24gaU10KGUsdCl7dD09bnVsbCYmKHQ9dyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gdyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgUyQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9NdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPXckKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciBhTXQ9TSgoKT0+e1MkKCl9KTtmdW5jdGlvbiBzTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGxNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBNJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9bFIoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBFJD1NKCgpPT57TSQoKX0pO2Z1bmN0aW9uIHVSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIFQkPU0oKCk9Pnt9KTt2YXIgY010LHVNdCxoTXQsQyQ9TSgoKT0+e2NNdD1BcnJheS5wcm90b3R5cGUsdU10PWNNdC5zbGljZSxoTXQ9Y010Lm1hcH0pO2Z1bmN0aW9uIHE1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZk10PU0oKCk9Pnt9KTtmdW5jdGlvbiBwTXQoZSl7cmV0dXJuIGV9dmFyIGRNdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIEEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1rJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gayQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1QJD8xMDpvPj1JJD81Om8+PUwkPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49UCQ/MTA6bz49SSQ/NTpvPj1MJD8yOjEpfWZ1bmN0aW9uIGZSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1QJD9pKj0xMDpvPj1JJD9pKj01Om8+PUwkJiYoaSo9MiksdDxlPy1pOml9dmFyIFAkLEkkLEwkLFIkPU0oKCk9PntQJD1NYXRoLnNxcnQoNTApLEkkPU1hdGguc3FydCgxMCksTCQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gcFIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIE4kPU0oKCk9Pnt9KTtmdW5jdGlvbiBnTXQoKXt2YXIgZT1wTXQsdD11UixyPXBSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWZSKHUsaCxmKSxmPWhSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFtzUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnE1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/cTUodU10LmNhbGwoaSkpOnE1KGkpLG4pOnJ9LG59dmFyIF9NdD1NKCgpPT57QyQoKTtiJCgpO2ZNdCgpO1QkKCk7ZE10KCk7QSQoKTtSJCgpO04kKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgZFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiB5TXQoZSx0LHIpe3JldHVybiBlPWhNdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgdk10PU0oKCk9PntDJCgpO3B5KCk7bDIoKTtkUigpfSk7ZnVuY3Rpb24geE10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqY1IoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgYk10PU0oKCk9PntFJCgpfSk7ZnVuY3Rpb24gd010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciBTTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1NdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBFTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBUTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIENNdD1NKCgpPT57cHkoKTtsMigpO2RSKCl9KTtmdW5jdGlvbiBBTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgUE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBtUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgRCQ9TSgoKT0+e30pO2Z1bmN0aW9uIElNdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgTE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBrTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIgUk10PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gTk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIERNdD1NKCgpPT57fSk7ZnVuY3Rpb24gT010KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciB6TXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9bVIoZSxBNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gQTVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgTyQ9TSgoKT0+e0QkKCl9KTtmdW5jdGlvbiBGTXQoKXtyZXR1cm4gZ1IoYXJndW1lbnRzKX12YXIgQk10PU0oKCk9PntPJCgpfSk7dmFyIEhNdD1NKCgpPT57YiQoKTtweSgpO3YkKCk7YU10KCk7bE10KCk7RSQoKTtUJCgpO19NdCgpO3ZNdCgpO2JNdCgpO04kKCk7U010KCk7RU10KCk7Q010KCk7UE10KCk7RCQoKTtTJCgpO0xNdCgpO2RSKCk7QSQoKTtSTXQoKTtETXQoKTt6TXQoKTtSJCgpO08kKCk7TSQoKTtCTXQoKX0pO3ZhciBfUixWTXQ9TSgoKT0+e19SPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFVNdChlKXtyZXR1cm4gZX12YXIgcU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBQNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBMNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBrNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gUjVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHhSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT15Unx8ZT09PUc1Py0xOjEsYz1lPT09RzV8fGU9PT12Uj8ieCI6InkiLHU9ZT09PXlSfHxlPT09eiQ/UDVlOkk1ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6VU10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP2s1ZTpMNWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT15Uj8iMGVtIjplPT09eiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLEdNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIsR010KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09RzV8fGU9PXZSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKFI1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXZSPyJzdGFydCI6ZT09PUc1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9X1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOl9SLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOl9SLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gV010KGUpe3JldHVybiB4Uih5UixlKX1mdW5jdGlvbiBZTXQoZSl7cmV0dXJuIHhSKHZSLGUpfWZ1bmN0aW9uIGpNdChlKXtyZXR1cm4geFIoeiQsZSl9ZnVuY3Rpb24gWE10KGUpe3JldHVybiB4UihHNSxlKX12YXIgeVIsdlIseiQsRzUsR010LCRNdD1NKCgpPT57Vk10KCk7cU10KCk7eVI9MSx2Uj0yLHokPTMsRzU9NCxHTXQ9MWUtNn0pO3ZhciBLTXQ9TSgoKT0+eyRNdCgpfSk7ZnVuY3Rpb24gSk10KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGJSKHIpfWZ1bmN0aW9uIGJSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIEQ1ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIE81ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFpNdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09TjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgTjVlLFc1LFFNdD1NKCgpPT57TjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O2JSLnByb3RvdHlwZT1KTXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiUixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPUQ1ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPU81ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Wk10KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Wk10KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBiUihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VzU9Sk10fSk7dmFyIEYkPU0oKCk9PntRTXQoKX0pO3ZhciB3UixCJCxIJD1NKCgpPT57d1I9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEIkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDp3Uix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksQiQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkIkW3RdLGxvY2FsOmV9OmV9dmFyIFNSPU0oKCk9PntIJCgpfSk7ZnVuY3Rpb24gejVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09d1ImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBGNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTVIoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/RjVlOno1ZSkodCl9dmFyIFYkPU0oKCk9PntTUigpO0gkKCl9KTtmdW5jdGlvbiBCNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/QjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIEVSPU0oKCk9Pnt9KTtmdW5jdGlvbiB0RXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgZmkobix0aGlzLl9wYXJlbnRzKX12YXIgZUV0PU0oKCk9Pnt3dSgpO0VSKCl9KTtmdW5jdGlvbiBINWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBZNShlKXtyZXR1cm4gZT09bnVsbD9INWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgVSQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IGZpKG4saSl9dmFyIG5FdD1NKCgpPT57d3UoKTtVJCgpfSk7ZnVuY3Rpb24gajUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIHEkPU0oKCk9Pnt9KTtmdW5jdGlvbiBpRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWo1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBmaShuLHRoaXMuX3BhcmVudHMpfXZhciBvRXQ9TSgoKT0+e3d1KCk7cSQoKX0pO2Z1bmN0aW9uIFRSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBHJD1NKCgpPT57fSk7ZnVuY3Rpb24gYUV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChUUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gWDUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFckPU0oKCk9PntHJCgpO3d1KCk7WDUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIHNFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGxFdD1NKCgpPT57fSk7ZnVuY3Rpb24gVjVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBYNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gVTVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9Y0V0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9Y0V0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IFg1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gdUV0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9VNWU6VjVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9c0V0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBmaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGNFdCxoRXQ9TSgoKT0+e3d1KCk7VyQoKTtsRXQoKTtjRXQ9IiQifSk7ZnVuY3Rpb24gZkV0KCl7cmV0dXJuIG5ldyBmaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFRSKSx0aGlzLl9wYXJlbnRzKX12YXIgcEV0PU0oKCk9PntHJCgpO3d1KCl9KTtmdW5jdGlvbiBkRXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIG1FdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBmaShhLHRoaXMuX3BhcmVudHMpfXZhciBfRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5RXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB2RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhFdChlKXtlfHwoZT1xNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgZmkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIHE1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgYkV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gd0V0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBTRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1FdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBFRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIENFdD1NKCgpPT57fSk7ZnVuY3Rpb24gQUV0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgUEV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJRXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIExFdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0V0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgUkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFc1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFk1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIGo1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBYNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uICQ1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBORXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/VzVlOkc1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsPyQ1ZTpYNWU6ci5sb2NhbD9qNWU6WTVlKShyLHQpKX12YXIgREV0PU0oKCk9PntTUigpfSk7ZnVuY3Rpb24gQ1IoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBZJD1NKCgpPT57fSk7ZnVuY3Rpb24gSzVlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIFo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBPRXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0s1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9KNWU6WjVlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgaiQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBRNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHRUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gZVRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHpFdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP1E1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9lVGU6dFRlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgRkV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFgkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEhFdChlKX1mdW5jdGlvbiBIRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUJFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIFZFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFVFdChlLHQpe2Zvcih2YXIgcj1YJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHJUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtWRXQodGhpcyxlKX19ZnVuY3Rpb24gblRlKGUpe3JldHVybiBmdW5jdGlvbigpe1VFdCh0aGlzLGUpfX1mdW5jdGlvbiBpVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VkV0OlVFdCkodGhpcyxlKX19ZnVuY3Rpb24gcUV0KGUsdCl7dmFyIHI9QkV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVgkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2lUZTp0P3JUZTpuVGUpKHIsdCkpfXZhciBHRXQ9TSgoKT0+e0hFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBvVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gV0V0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP29UZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/c1RlOmFUZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBZRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGNUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiB1VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBqRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/bFRlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj91VGU6Y1RlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBYRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGhUZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiAkRXQoKXtyZXR1cm4gdGhpcy5lYWNoKGhUZSl9dmFyIEtFdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlRlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gWkV0KCl7cmV0dXJuIHRoaXMuZWFjaChmVGUpfXZhciBKRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFFFdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciB0NXQ9TSgoKT0+e1YkKCl9KTtmdW5jdGlvbiBwVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBlNXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOk1SKGUpLG49dD09bnVsbD9wVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIHI1dD1NKCgpPT57ViQoKTtFUigpfSk7ZnVuY3Rpb24gZFRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gbjV0KCl7cmV0dXJuIHRoaXMuZWFjaChkVGUpfXZhciBpNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1UZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gZ1RlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBvNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/Z1RlOm1UZSl9dmFyIGE1dD1NKCgpPT57fSk7ZnVuY3Rpb24gczV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgbDV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBfVGUoZSx0LHIpe3JldHVybiBlPWg1dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBoNXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24geVRlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiB2VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24geFRlKGUsdCxyKXt2YXIgbj11NXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9fVGU6aDV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGY1dChlLHQscil7dmFyIG49eVRlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD94VGU6dlRlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uICQkKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciB1NXQsd3IsYzV0LEFSPU0oKCk9Pnt1NXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoYzV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIGM1dHx8KHU1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBwNXQoZSx0LHIpe3ZhciBuPUNSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGJUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwNXQodGhpcyxlLHQpfX1mdW5jdGlvbiB3VGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcDV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGQ1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP3dUZTpiVGUpKGUsdCkpfXZhciBtNXQ9TSgoKT0+e1kkKCl9KTtmdW5jdGlvbiBmaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBnNXQoKXtyZXR1cm4gbmV3IGZpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sSyQpfXZhciBLJCxVcCx3dT1NKCgpPT57ZUV0KCk7bkV0KCk7b0V0KCk7aEV0KCk7VyQoKTtwRXQoKTttRXQoKTtfRXQoKTt2RXQoKTtiRXQoKTtTRXQoKTtFRXQoKTtDRXQoKTtQRXQoKTtMRXQoKTtSRXQoKTtERXQoKTtqJCgpO0ZFdCgpO0dFdCgpO1lFdCgpO1hFdCgpO0tFdCgpO0pFdCgpO3Q1dCgpO3I1dCgpO2k1dCgpO2E1dCgpO2w1dCgpO0FSKCk7bTV0KCk7SyQ9W251bGxdO2ZpLnByb3RvdHlwZT1nNXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmaSxzZWxlY3Q6dEV0LHNlbGVjdEFsbDpyRXQsZmlsdGVyOmlFdCxkYXRhOnVFdCxlbnRlcjphRXQsZXhpdDpmRXQsam9pbjpkRXQsbWVyZ2U6Z0V0LG9yZGVyOnlFdCxzb3J0OnhFdCxjYWxsOndFdCxub2RlczpNRXQsbm9kZTpURXQsc2l6ZTpBRXQsZW1wdHk6SUV0LGVhY2g6a0V0LGF0dHI6TkV0LHN0eWxlOk9FdCxwcm9wZXJ0eTp6RXQsY2xhc3NlZDpxRXQsdGV4dDpXRXQsaHRtbDpqRXQscmFpc2U6JEV0LGxvd2VyOlpFdCxhcHBlbmQ6UUV0LGluc2VydDplNXQscmVtb3ZlOm41dCxjbG9uZTpvNXQsZGF0dW06czV0LG9uOmY1dCxkaXNwYXRjaDpkNXR9O1VwPWc1dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IGZpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgZmkoW1tlXV0sSyQpfXZhciBfNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiB5NXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgdjV0PU0oKCk9PntBUigpfSk7ZnVuY3Rpb24geDV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIGI1dD1NKCgpPT57fSk7ZnVuY3Rpb24gUFIoZSl7dmFyIHQ9eTV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLHg1dChlLHQpfXZhciB3NXQ9TSgoKT0+e3Y1dCgpO2I1dCgpfSk7dmFyIEVzPU0oKCk9PntxJCgpO3c1dCgpO1NSKCk7XzV0KCk7d3UoKTtFUigpO1UkKCk7aiQoKTtBUigpfSk7ZnVuY3Rpb24gSVIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBTNXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBaJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsSVIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsSVIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIEokKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixJUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgTTV0PU0oKCk9PntFcygpO1M1dCgpfSk7dmFyIEU1dD1NKCgpPT57TTV0KCl9KTtmdW5jdGlvbiBMUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gUSQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIFQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjUoKXt9ZnVuY3Rpb24gQTV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSVRlKCl7cmV0dXJuIE41dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBQNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1TVGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9JNXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU1UZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9RVRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1UVGUuZXhlYyhlKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9Q1RlLmV4ZWMoZSkpP2tSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUFUZS5leGVjKGUpKT9SNXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1QVGUuZXhlYyhlKSk/UjV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6QzV0Lmhhc093blByb3BlcnR5KGUpP0k1dChDNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIEk1dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBrUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIExUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFo1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0xUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBMNXQoKXtyZXR1cm4iIyIrdEsodGhpcy5yKSt0Syh0aGlzLmcpK3RLKHRoaXMuYil9ZnVuY3Rpb24gazV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIFI1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIE41dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBaNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gRDV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ONXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZUsoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyICQ1LFJSLGMyLEs1LFpoLFNUZSxNVGUsRVRlLFRUZSxDVGUsQVRlLFBUZSxDNXQsTzV0PU0oKCk9PntUNXQoKTskNT0uNyxSUj0xLyQ1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixLNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsU1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLE1UZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksRVRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxUVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMixLNV0rIlxcKSQiKSxDVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCxLNV0rIlxcKSQiKSxBVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0s1LFpoLFpoXSsiXFwpJCIpLFBUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0s1LFpoLFpoLEs1XSsiXFwpJCIpLEM1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtMUihaNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpBNXQsZm9ybWF0SGV4OkE1dCxmb3JtYXRIc2w6SVRlLGZvcm1hdFJnYjpQNXQsdG9TdHJpbmc6UDV0fSk7TFIoc2wsdTIsUSQoWjUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/UlI6TWF0aC5wb3coUlIsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsPyQ1Ok1hdGgucG93KCQ1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Okw1dCxmb3JtYXRIZXg6TDV0LGZvcm1hdFJnYjprNXQsdG9TdHJpbmc6azV0fSkpO0xSKEtoLEQ1dCxRJChaNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9SUjpNYXRoLnBvdyhSUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD8kNTpNYXRoLnBvdygkNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChlSyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlSyhlLGksbiksZUsoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgTlI9TSgoKT0+e081dCgpfSk7ZnVuY3Rpb24gcksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiB6NXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHJLKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIG5LPU0oKCk9Pnt9KTtmdW5jdGlvbiBGNXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBySygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBCNXQ9TSgoKT0+e25LKCl9KTtmdW5jdGlvbiBKNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiBrVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBSVGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBINXQoZSl7cmV0dXJuKGU9K2UpPT0xP0RSOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9SVGUodCxyLGUpOko1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIERSKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2tUZShlLHIpOko1KGlzTmFOKGUpP3Q6ZSl9dmFyIFY1dD1NKCgpPT57aUsoKX0pO2Z1bmN0aW9uIFU1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxOVGUsRFRlLG9LPU0oKCk9PntOUigpO25LKCk7QjV0KCk7VjV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1INXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1EUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7TlRlPVU1dCh6NXQpLERUZT1VNXQoRjV0KX0pO2Z1bmN0aW9uIHE1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBHNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciBXNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFk1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIGo1dD1NKCgpPT57T1IoKX0pO2Z1bmN0aW9uIFg1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyICQ1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIFE1PU0oKCk9Pnt9KTtmdW5jdGlvbiBLNXQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBaNXQ9TSgoKT0+e09SKCl9KTtmdW5jdGlvbiBPVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHpUZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHRUKGUsdCl7dmFyIHI9c0subGFzdEluZGV4PWFLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPXNLLmV4ZWMoZSkpJiYoaT1hSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPWFLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT96VGUobFswXS54KTpPVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIHNLLGFLLGxLPU0oKCk9PntRNSgpO3NLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxhSz1uZXcgUmVnRXhwKHNLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP0o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTp0VDp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/WDV0Okc1dCh0KT9xNXQ6QXJyYXkuaXNBcnJheSh0KT9ZNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP0s1dDpVYSkoZSx0KX12YXIgT1I9TSgoKT0+e05SKCk7b0soKTtqNXQoKTskNXQoKTtRNSgpO1o1dCgpO2xLKCk7aUsoKTtXNXQoKX0pO2Z1bmN0aW9uIGNLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKko1dCxza2V3WDpNYXRoLmF0YW4obCkqSjV0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgSjV0LHpSLFE1dD1NKCgpPT57SjV0PTE4MC9NYXRoLlBJLHpSPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gZVR0KGUpe3JldHVybiBlPT09Im5vbmUiP3pSOihlVHx8KGVUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHVLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0VHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGVULnN0eWxlLnRyYW5zZm9ybT1lLGU9dFR0LmdldENvbXB1dGVkU3R5bGUodUsuYXBwZW5kQ2hpbGQoZVQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHVLLnJlbW92ZUNoaWxkKGVUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxjSygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHJUdChlKXtyZXR1cm4gZT09bnVsbD96UjooRlJ8fChGUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxGUi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9RlIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsY0soZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTp6Uil9dmFyIGVULHVLLHRUdCxGUixuVHQ9TSgoKT0+e1E1dCgpfSk7ZnVuY3Rpb24gaVR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBoSyxmSyxvVHQ9TSgoKT0+e1E1KCk7blR0KCk7aEs9aVR0KGVUdCwicHgsICIsInB4KSIsImRlZykiKSxmSz1pVHQoclR0LCIsICIsIikiLCIpIil9KTt2YXIgclQ9TSgoKT0+e09SKCk7UTUoKTtsSygpO29UdCgpO29LKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KGxUdChGVGUpLHl5PWFULm5vdygpK1ZSKX1mdW5jdGlvbiBGVGUoKXt5eT0wfWZ1bmN0aW9uIHNUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gY1R0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1CUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiBhVHQoKXt5eT0oSFI9YVQubm93KCkpK1ZSLGgyPWlUPTA7dHJ5e2NUdCgpfWZpbmFsbHl7aDI9MCxIVGUoKSx5eT0wfX1mdW5jdGlvbiBCVGUoKXt2YXIgZT1hVC5ub3coKSx0PWUtSFI7dD5zVHQmJihWUi09dCxIUj1lKX1mdW5jdGlvbiBIVGUoKXtmb3IodmFyIGUsdD1CUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpCUj1yKTtvVD1lLHBLKG4pfWZ1bmN0aW9uIHBLKGUpe2lmKCFoMil7aVQmJihpVD1jbGVhclRpbWVvdXQoaVQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoaVQ9c2V0VGltZW91dChhVHQsZS1hVC5ub3coKS1WUikpLG5UJiYoblQ9Y2xlYXJJbnRlcnZhbChuVCkpKTooblR8fChIUj1hVC5ub3coKSxuVD1zZXRJbnRlcnZhbChCVGUsc1R0KSksaDI9MSxsVHQoYVR0KSl9fXZhciBoMixpVCxuVCxzVHQsQlIsb1QsSFIseXksVlIsYVQsbFR0LGRLPU0oKCk9PntoMj0wLGlUPTAsblQ9MCxzVHQ9MWUzLEhSPTAseXk9MCxWUj0wLGFUPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLGxUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtzVC5wcm90b3R5cGU9VVIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJm9UIT09dGhpcyYmKG9UP29ULl9uZXh0PXRoaXM6QlI9dGhpcyxvVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLHBLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLHBLKCkpfX19KTtmdW5jdGlvbiBxUihlLHQscil7dmFyIG49bmV3IHNUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIHVUdD1NKCgpPT57ZEsoKX0pO3ZhciBtSz1NKCgpPT57ZEsoKTt1VHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47cVRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpWVGUsdHdlZW46VVRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmZUdH0pfWZ1bmN0aW9uIGNUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmZUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPkdSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcVRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVVSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1nSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWdLKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09R1IpcmV0dXJuIHFSKGEpO3Auc3RhdGU9PT1oVHQ/KHAuc3RhdGU9bFQscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1sVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHFSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PUdSJiYoci5zdGF0ZT1oVHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1XUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09V1Ipe2ZvcihyLnN0YXRlPUdSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVlSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVlSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9bFQsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFZUZSxVVGUsZlR0LGdLLFdSLEdSLGhUdCxZUixsVCxUcz1NKCgpPT57RiQoKTttSygpO1ZUZT1XNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxVVGU9W10sZlR0PTAsZ0s9MSxXUj0yLEdSPTMsaFR0PTQsWVI9NSxsVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+V1ImJm4uc3RhdGU8WVIsbi5zdGF0ZT1sVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBfSz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIHBUdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciBkVHQ9TSgoKT0+e19LKCl9KTtmdW5jdGlvbiBHVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBXVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIG1UdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP0dUZTpXVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciB1VD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGpSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOnRUKShlLHQpfXZhciB5Sz1NKCgpPT57TlIoKTtyVCgpfSk7ZnVuY3Rpb24gWVRlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBqVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBYVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gJFRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBLVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBaVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGdUdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2ZLOmpSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP1pUZTpLVGUpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9qVGU6WVRlKShyKTooci5sb2NhbD8kVGU6WFRlKShyLG4sdCkpfXZhciBfVHQ9TSgoKT0+e3JUKCk7RXMoKTt1VCgpO3lLKCl9KTtmdW5jdGlvbiBKVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIFFUZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIHRDZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJlFUZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gZUNlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmSlRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiB5VHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/dENlOmVDZSkobix0KSl9dmFyIHZUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIHJDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBuQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24geFR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ckNlOm5DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIGJUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGlDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBvQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gd1R0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/aUNlOm9DZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFNUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGFDZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gTVR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChhQ2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgRVR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gVFR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1qNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBDVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIEFUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBQVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBzQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBsQ2UoZSx0LHIpe3ZhciBuLGksbz1zQ2UodCk/Y1Q6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gSVR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2gobENlKHIsZSx0KSl9dmFyIExUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGNDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24ga1R0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGNDZSh0aGlzLl9pZCkpfXZhciBSVHQ9TSgoKT0+e30pO2Z1bmN0aW9uIE5UdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBEVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gT1R0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9WTUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciB6VHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gRlR0KCl7cmV0dXJuIG5ldyB1Q2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciB1Q2UsQlR0PU0oKCk9PntFcygpO3VDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBoQ2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gSFR0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGZDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHBDZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBkQ2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9SFR0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gVlR0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9oSzpqUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxoQ2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsSFR0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxwQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goZENlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxmQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBVVHQ9TSgoKT0+e3JUKCk7RXMoKTtUcygpO3VUKCk7eUsoKX0pO2Z1bmN0aW9uIG1DZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gZ0NlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZtQ2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gcVR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLGdDZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIEdUdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24geUNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFdUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/eUNlKGQyKHRoaXMsInRleHQiLGUpKTpfQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIFlUdD1NKCgpPT57dVQoKX0pO2Z1bmN0aW9uIHZDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24geENlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJnZDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIGpUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQseENlKGUpKX12YXIgWFR0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9WFIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgS1R0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBaVHQoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgSlR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHZLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gWFIoKXtyZXR1cm4rK2JDZX12YXIgYkNlLG0yLEdwPU0oKCk9PntFcygpO19UdCgpO3ZUdCgpO2JUdCgpO1NUdCgpO0VUdCgpO0NUdCgpO1BUdCgpO0xUdCgpO1JUdCgpO0RUdCgpO3pUdCgpO0JUdCgpO1VUdCgpO0dUdCgpO1lUdCgpO1hUdCgpO0tUdCgpO3VUKCk7SlR0KCk7YkNlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT12Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpOVHQsc2VsZWN0QWxsOk9UdCxmaWx0ZXI6VFR0LG1lcmdlOkFUdCxzZWxlY3Rpb246RlR0LHRyYW5zaXRpb246JFR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpJVHQsYXR0cjpnVHQsYXR0clR3ZWVuOnlUdCxzdHlsZTpWVHQsc3R5bGVUd2VlbjpxVHQsdGV4dDpXVHQsdGV4dFR3ZWVuOmpUdCxyZW1vdmU6a1R0LHR3ZWVuOm1UdCxkZWxheTp4VHQsZHVyYXRpb246d1R0LGVhc2U6TVR0LGVuZDpaVHR9fSk7ZnVuY3Rpb24gd0NlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIHhLLnRpbWU9ZjIoKSx4SztyZXR1cm4gcn1mdW5jdGlvbiBRVHQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1YUigpLChyPXhLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fHdDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciB4Syx0Q3Q9TSgoKT0+e0dwKCk7VHMoKTtJXygpO21LKCk7eEs9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBlQ3Q9TSgoKT0+e0VzKCk7ZFR0KCk7dEN0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1wVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249UVR0fSk7dmFyIHJDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIG5DdD1NKCgpPT57ZUN0KCk7R3AoKTtyQ3QoKTtfSygpfSk7ZnVuY3Rpb24gYksoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBpQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG9DdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciBhQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gaFQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBzQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBmVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBUQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIENDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBNSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIEVLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gaEN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gZkN0KCl7cmV0dXJuIFRLKCRSKX1mdW5jdGlvbiBwQ3QoKXtyZXR1cm4gVEsoS1IpfWZ1bmN0aW9uIGRDdCgpe3JldHVybiBUSyhTQ2UpfWZ1bmN0aW9uIFRLKGUpe3ZhciB0PUNDZSxyPVRDZSxuPVc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtmVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9TUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbZlQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZFSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxFSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPU1LKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXskJChuZXcgb0N0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiBoVCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP2xDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09S1I/bnVsbDpNQ2VbcF0sXz1lPT09JFI/bnVsbDpFQ2VbcF0seT1NSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1QUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PUtSP1M6U3RbMF0sTz1lPT09JFI/azpTdFsxXV0sW0k9ZT09PUtSP0I6QyxGPWU9PT0kUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7WiQod3Iudmlldyl9d0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1QUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLGhUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIFNLOmNhc2UgbEN0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIGNDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPWNDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiB1Q3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD11Q3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYod0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIEokKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLEVLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1TSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1TSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn1oVCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6YksoISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIGxDdCxTSyxnMixfMiwkUixLUixTQ2UsV3AsY0N0LHVDdCxNQ2UsRUNlLG1DdD1NKCgpPT57RiQoKTtFNXQoKTtyVCgpO0VzKCk7bkN0KCk7aUN0KCk7YUN0KCk7c0N0KCk7bEN0PXtuYW1lOiJkcmFnIn0sU0s9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSwkUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGZUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sS1I9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChmVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LFNDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoZlQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sY0N0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSx1Q3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LE1DZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxFQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgZ0N0PU0oKCk9PnttQ3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQ0soZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9QUNlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gQUNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgQUs9TSgoKT0+e3Z5KCl9KTt2YXIgX0N0LFBDZSxJQ2UsUEs9TSgoKT0+e3Z5KCk7QUsoKTtfQ3Q9Q0sobGcpLFBDZT1fQ3QucmlnaHQsSUNlPV9DdC5sZWZ0fSk7dmFyIElLPU0oKCk9Pnt9KTt2YXIgeUN0PU0oKCk9PntJSygpfSk7dmFyIHZDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIgTEs9TSgoKT0+e3kyKCl9KTt2YXIga0s9TSgoKT0+e0xLKCl9KTt2YXIgUks9TSgoKT0+e30pO3ZhciB4Q3Qsa0NlLFJDZSxOSz1NKCgpPT57eEN0PUFycmF5LnByb3RvdHlwZSxrQ2U9eEN0LnNsaWNlLFJDZT14Q3QubWFwfSk7dmFyIGJDdD1NKCgpPT57fSk7dmFyIHdDdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIERLPU0oKCk9Pnt9KTt2YXIgZGxuLG1sbixnbG4sT0s9TSgoKT0+e2Rsbj1NYXRoLnNxcnQoNTApLG1sbj1NYXRoLnNxcnQoMTApLGdsbj1NYXRoLnNxcnQoMil9KTt2YXIgeks9TSgoKT0+e30pO3ZhciBTQ3Q9TSgoKT0+e05LKCk7UEsoKTtiQ3QoKTtSSygpO3dDdCgpO0RLKCk7T0soKTt6SygpfSk7dmFyIEpSPU0oKCk9Pnt5MigpfSk7dmFyIEVDdD1NKCgpPT57TksoKTt2eSgpO3kyKCk7SlIoKX0pO3ZhciBUQ3Q9TSgoKT0+e2tLKCl9KTt2YXIgQ0N0PU0oKCk9Pnt9KTt2YXIgQUN0PU0oKCk9Pnt5MigpfSk7dmFyIFBDdD1NKCgpPT57dnkoKTt5MigpO0pSKCl9KTt2YXIgSUN0PU0oKCk9Pnt9KTt2YXIgRks9TSgoKT0+e30pO3ZhciBMQ3Q9TSgoKT0+e30pO3ZhciBrQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIgUkN0PU0oKCk9Pnt9KTt2YXIgTkN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e0ZLKCl9KTt2YXIgREN0PU0oKCk9PntCSygpfSk7dmFyIE9DdD1NKCgpPT57UEsoKTt2eSgpO0FLKCk7eUN0KCk7dkN0KCk7a0soKTtSSygpO1NDdCgpO0VDdCgpO1RDdCgpO3pLKCk7Q0N0KCk7QUN0KCk7UEN0KCk7SUN0KCk7RksoKTtJSygpO0xDdCgpO0pSKCk7REsoKTtrQ3QoKTtSQ3QoKTtOQ3QoKTtPSygpO0JLKCk7TEsoKTtEQ3QoKX0pO3ZhciBISyxWSyx6Q3QsZFQsVUsscUssR0s9TSgoKT0+e0hLPU1hdGguY29zLFZLPU1hdGguc2luLHpDdD1NYXRoLlBJLGRUPXpDdC8yLFVLPXpDdCoyLHFLPU1hdGgubWF4fSk7ZnVuY3Rpb24gVkNlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRkN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1wVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChwVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9cUsoMCxVSy1lKmEpL3AsXz1wP2U6VUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cUsoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPVZDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgQkN0PU0oKCk9PntPQ3QoKTtHSygpfSk7dmFyIEhDdCxWQ3Q9TSgoKT0+e0hDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBRUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFVDdD1NKCgpPT57fSk7ZnVuY3Rpb24gaksoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBxQ3QoKXtyZXR1cm4gbmV3IGpLfXZhciBXSyxZSyx4eSxVQ2UsWEssR0N0PU0oKCk9PntXSz1NYXRoLlBJLFlLPTIqV0sseHk9MWUtNixVQ2U9WUsteHk7aksucHJvdG90eXBlPXFDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFdLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJVlLK1lLKSxoPlVDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49V0spKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtYSz1xQ3R9KTt2YXIgV0N0PU0oKCk9PntHQ3QoKX0pO2Z1bmN0aW9uIHFDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gR0NlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBXQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIFlDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIGpDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBZQ3QoKXt2YXIgZT1xQ2UsdD1HQ2Uscj1XQ2Usbj1ZQ2UsaT1qQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUhDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLWRULHA9aS5hcHBseSh0aGlzLGwpLWRULGQ9aCpISyhmKSxnPWgqVksoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLWRULHg9aS5hcHBseSh0aGlzLGwpLWRUO2lmKG98fChvPXM9WEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKkhLKHkpLF8qVksoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpRUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOlFSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIGpDdD1NKCgpPT57VkN0KCk7VUN0KCk7R0soKTtXQ3QoKX0pO3ZhciBYQ3Q9TSgoKT0+e0JDdCgpO2pDdCgpfSk7ZnVuY3Rpb24gdE4oKXt9ZnVuY3Rpb24gJEN0KGUsdCl7dmFyIHI9bmV3IHROO2lmKGUgaW5zdGFuY2VvZiB0TillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksZU49TSgoKT0+e2xsPSIkIjt0Ti5wcm90b3R5cGU9JEN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT0kQ3R9KTtmdW5jdGlvbiBKQ3QoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLFhDZSwkQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLEtDdCxaQ3QpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLEtDdCxaQ3QpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gWENlKCl7cmV0dXJue319ZnVuY3Rpb24gJENlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gS0N0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gWkN0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBRQ3Q9TSgoKT0+e2VOKCl9KTtmdW5jdGlvbiByTigpe31mdW5jdGlvbiB0QXQoZSx0KXt2YXIgcj1uZXcgck47aWYoZSBpbnN0YW5jZW9mIHJOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSxlQXQsckF0PU0oKCk9PntlTigpO3d5PWJ5LnByb3RvdHlwZTtyTi5wcm90b3R5cGU9dEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O2VBdD10QXR9KTtmdW5jdGlvbiBuQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBpQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG9BdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGFBdD1NKCgpPT57fSk7ZnVuY3Rpb24gc0F0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBsQXQ9TSgoKT0+e30pO3ZhciBjQXQ9TSgoKT0+e1FDdCgpO3JBdCgpO2VOKCk7aUF0KCk7YUF0KCk7bEF0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG5OPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9S0NlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PVpDZS5leGVjKGUpKT9oQXQocGFyc2VJbnQodFsxXSwxNikpOih0PUpDZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9UUNlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD10QWUuZXhlYyhlKSk/ZkF0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWVBZS5leGVjKGUpKT9mQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ckFlLmV4ZWMoZSkpP3BBdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PW5BZS5leGVjKGUpKT9wQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTp1QXQuaGFzT3duUHJvcGVydHkoZSk/aEF0KHVBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gaEF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGZBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIGdUKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBLSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Z1QoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gcEF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gaUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/aUFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uICRLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixtVCxRaCxLQ2UsWkNlLEpDZSxRQ2UsdEFlLGVBZSxyQWUsbkFlLHVBdCxpTj1NKCgpPT57bk4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixtVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsS0NlPS9eIyhbMC05YS1mXXszfSkkLyxaQ2U9L14jKFswLTlhLWZdezZ9KSQvLEpDZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksUUNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSx0QWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixtVF0rIlxcKSQiKSxlQWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxtVF0rIlxcKSQiKSxyQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW21ULFFoLFFoXSsiXFwpJCIpLG5BZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW21ULFFoLFFoLG1UXSsiXFwpJCIpLHVBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLEtLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsWkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oJEsoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJEsoZSxpLG4pLCRLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIG9OLGFOLEpLPU0oKCk9PntvTj1NYXRoLlBJLzE4MCxhTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIG5aKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqb047cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciByPXJaKGUuciksbj1yWihlLmcpLGk9clooZS5iKSxvPVFLKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkvZEF0KSxhPVFLKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS9tQXQpLHM9UUsoKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL2dBdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbE4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP25aKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFFLKGUpe3JldHVybiBlPm9BZT9NYXRoLnBvdyhlLDEvMyk6ZS95QXQrX0F0fWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmIyP2UqZSplOnlBdCooZS1fQXQpfWZ1bmN0aW9uIGVaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gclooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gYUFlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1uWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSphTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGlaKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9hQWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIHNOLGRBdCxtQXQsZ0F0LF9BdCxiMix5QXQsb0FlLHZBdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7c049MTgsZEF0PS45NTA0NyxtQXQ9MSxnQXQ9MS4wODg4MyxfQXQ9NC8yOSxiMj02LzI5LHlBdD0zKmIyKmIyLG9BZT1iMipiMipiMjtZcChqcCxsTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrc04qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1zTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9bUF0KnRaKGUpLHQ9ZEF0KnRaKHQpLHI9Z0F0KnRaKHIpLG5ldyB0byhlWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxlWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksZVooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxpWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIG5aKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIHNBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9Z1QoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPSh3QXQqbit4QXQqdC1iQXQqcikvKHdBdCt4QXQtYkF0KSxvPW4taSxhPShfVCooci1pKS1hWipvKS9jTixzPU1hdGguc3FydChhKmErbypvKS8oX1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSphTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdU4oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3NBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgU0F0LG9aLGFaLGNOLF9ULHhBdCxiQXQsd0F0LE1BdD1NKCgpPT57bk4oKTtpTigpO0pLKCk7U0F0PS0uMTQ4NjEsb1o9MS43ODI3NyxhWj0tLjI5MjI3LGNOPS0uOTA2NDksX1Q9MS45NzI5NCx4QXQ9X1QqY04sYkF0PV9UKm9aLHdBdD1vWiphWi1jTipTQXQ7WXAoTXksdU4sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpvTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKFNBdCpuK29aKmkpKSwyNTUqKHQrciooYVoqbitjTippKSksMjU1Kih0K3IqKF9UKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBFQXQ9TSgoKT0+e2lOKCk7dkF0KCk7TUF0KCl9KTtmdW5jdGlvbiBDQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IGhOKHIpfWZ1bmN0aW9uIGhOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGNBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHVBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFRBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09bEFlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgbEFlLEFBdCxQQXQ9TSgoKT0+e2xBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9Q0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1jQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT11QWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPVRBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPVRBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O0FBdD1DQXR9KTt2YXIgSUF0PU0oKCk9PntQQXQoKX0pO2Z1bmN0aW9uIGtBdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBmTihyKX1mdW5jdGlvbiBmTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBmQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBwQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBMQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPWhBZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIGhBZSxzWixSQXQ9TSgoKT0+e2hBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmTi5wcm90b3R5cGU9a0F0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Zk4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1mQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1wQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUxBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUxBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgZk4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3NaPWtBdH0pO3ZhciBOQXQ9TSgoKT0+e1JBdCgpfSk7dmFyIHBOLGxaLGNaPU0oKCk9PntwTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbFo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnBOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBkTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxsWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6bFpbdF0sbG9jYWw6ZX06ZX12YXIgdVo9TSgoKT0+e2NaKCl9KTtmdW5jdGlvbiBkQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1wTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09cE4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG1BZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBtTihlKXt2YXIgdD1kTihlKTtyZXR1cm4odC5sb2NhbD9tQWU6ZEFlKSh0KX12YXIgaFo9TSgoKT0+e3VaKCk7Y1ooKX0pO2Z1bmN0aW9uIGdBZSgpe31mdW5jdGlvbiBnTihlKXtyZXR1cm4gZT09bnVsbD9nQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgZlo9TSgoKT0+e30pO2Z1bmN0aW9uIERBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Z04oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBPQXQ9TSgoKT0+e2VmKCk7ZlooKX0pO2Z1bmN0aW9uIF9BZSgpe3JldHVybltdfWZ1bmN0aW9uIHpBdChlKXtyZXR1cm4gZT09bnVsbD9fQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgRkF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpBdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgcGkobixpKX12YXIgSEF0PU0oKCk9PntlZigpO0ZBdCgpfSk7ZnVuY3Rpb24gVkF0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBVQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VkF0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBHQXQ9TSgoKT0+e2VmKCk7VUF0KCl9KTtmdW5jdGlvbiBfTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uIFdBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoX04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHlUKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBkWj1NKCgpPT57cFooKTtlZigpO3lULnByb3RvdHlwZT17Y29uc3RydWN0b3I6eVQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBZQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBqQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlBZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgeVQoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHZBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVhBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVhBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB5VChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uICRBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/dkFlOnlBZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVlBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgcGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBYQXQsS0F0PU0oKCk9PntlZigpO2RaKCk7akF0KCk7WEF0PSIkIn0pO2Z1bmN0aW9uIFpBdCgpe3JldHVybiBuZXcgcGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChfTiksdGhpcy5fcGFyZW50cyl9dmFyIEpBdD1NKCgpPT57cFooKTtlZigpfSk7ZnVuY3Rpb24gUUF0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciB0NHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGU0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgcGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgcjR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gbjR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgaTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBvNHQoZSl7ZXx8KGU9eEFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IHBpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4QWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIGE0dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIHM0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgbDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgdTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoNHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBmNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHA0dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIGQ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gbTR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBnNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIF80dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIHk0dD1NKCgpPT57fSk7ZnVuY3Rpb24gYkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB3QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBTQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBNQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gRUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBUQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gdjR0KGUsdCl7dmFyIHI9ZE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3dBZTpiQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9UQWU6RUFlOnIubG9jYWw/TUFlOlNBZSkocix0KSl9dmFyIHg0dD1NKCgpPT57dVooKX0pO2Z1bmN0aW9uIHlOKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgbVo9TSgoKT0+e30pO2Z1bmN0aW9uIENBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBBQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBQQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gYjR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9DQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UEFlOkFBZSkoZSx0LHI9PW51bGw/IiI6cikpOklBZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBJQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHx5TihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgdzR0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gTEFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBrQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIFJBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBTNHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9MQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/UkFlOmtBZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIE00dD1NKCgpPT57fSk7ZnVuY3Rpb24gRTR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBnWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBUNHQoZSl9ZnVuY3Rpb24gVDR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1FNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBDNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBBNHQoZSx0KXtmb3IodmFyIHI9Z1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBOQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7QzR0KHRoaXMsZSl9fWZ1bmN0aW9uIERBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtBNHQodGhpcyxlKX19ZnVuY3Rpb24gT0FlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP0M0dDpBNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIFA0dChlLHQpe3ZhciByPUU0dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1nWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9PQWU6dD9OQWU6REFlKShyLHQpKX12YXIgSTR0PU0oKCk9PntUNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gekFlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBCQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEw0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD96QWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0JBZTpGQWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgazR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBIQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBWQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVUFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gUjR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0hBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VUFlOlZBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gRDR0KCl7cmV0dXJuIHRoaXMuZWFjaChxQWUpfXZhciBPNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIHo0dCgpe3JldHVybiB0aGlzLmVhY2goR0FlKX12YXIgRjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgSDR0PU0oKCk9PntoWigpfSk7ZnVuY3Rpb24gV0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gVjR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTptTihlKSxuPXQ9PW51bGw/V0FlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6Z04odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBVNHQ9TSgoKT0+e2haKCk7ZlooKX0pO2Z1bmN0aW9uIFlBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHE0dCgpe3JldHVybiB0aGlzLmVhY2goWUFlKX12YXIgRzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIFhBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVzR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP1hBZTpqQWUpfXZhciBZNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGo0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIFg0dD1NKCgpPT57fSk7ZnVuY3Rpb24gJEFlKGUsdCxyKXtyZXR1cm4gZT1aNHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gWjR0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uIEtBZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gWkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEpBZShlLHQscil7dmFyIG49SzR0Lmhhc093blByb3BlcnR5KGUudHlwZSk/JEFlOlo0dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBKNHQoZSx0LHIpe3ZhciBuPUtBZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/SkFlOlpBZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB2TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgSzR0LHNuLCQ0dCx4Tj1NKCgpPT57SzR0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKCQ0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiAkNHR8fChLNHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gUTR0KGUsdCxyKXt2YXIgbj15TihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBRQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUTR0KHRoaXMsZSx0KX19ZnVuY3Rpb24gdDRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFE0dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiB0UHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj90NGU6UUFlKShlLHQpKX12YXIgZVB0PU0oKCk9PnttWigpfSk7ZnVuY3Rpb24gcGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gZTRlKCl7cmV0dXJuIG5ldyBwaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLF9aKX12YXIgX1osZWY9TSgoKT0+e09BdCgpO0hBdCgpO0dBdCgpO0tBdCgpO2RaKCk7SkF0KCk7dDR0KCk7cjR0KCk7aTR0KCk7YTR0KCk7bDR0KCk7dTR0KCk7ZjR0KCk7ZDR0KCk7ZzR0KCk7eTR0KCk7eDR0KCk7dzR0KCk7TTR0KCk7STR0KCk7azR0KCk7TjR0KCk7TzR0KCk7RjR0KCk7SDR0KCk7VTR0KCk7RzR0KCk7WTR0KCk7WDR0KCk7eE4oKTtlUHQoKTtfWj1bbnVsbF07cGkucHJvdG90eXBlPWU0ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBpLHNlbGVjdDpEQXQsc2VsZWN0QWxsOkJBdCxmaWx0ZXI6cUF0LGRhdGE6JEF0LGVudGVyOldBdCxleGl0OlpBdCxqb2luOlFBdCxtZXJnZTplNHQsb3JkZXI6bjR0LHNvcnQ6bzR0LGNhbGw6czR0LG5vZGVzOmM0dCxub2RlOmg0dCxzaXplOnA0dCxlbXB0eTptNHQsZWFjaDpfNHQsYXR0cjp2NHQsc3R5bGU6YjR0LHByb3BlcnR5OlM0dCxjbGFzc2VkOlA0dCx0ZXh0Okw0dCxodG1sOlI0dCxyYWlzZTpENHQsbG93ZXI6ejR0LGFwcGVuZDpCNHQsaW5zZXJ0OlY0dCxyZW1vdmU6cTR0LGNsb25lOlc0dCxkYXR1bTpqNHQsb246SjR0LGRpc3BhdGNoOnRQdH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBwaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IHBpKFtbZV1dLF9aKX12YXIgclB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gYk4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeVo9TSgoKT0+e3hOKCl9KTtmdW5jdGlvbiB3TihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB2Wj1NKCgpPT57fSk7ZnVuY3Rpb24geFooZSl7dmFyIHQ9Yk4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksd04oZSx0KX12YXIgblB0PU0oKCk9Pnt5WigpO3ZaKCl9KTtmdW5jdGlvbiBiWihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9Yk4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiB3TihlLG8pO3JldHVybiBudWxsfXZhciBpUHQ9TSgoKT0+e3laKCk7dlooKX0pO3ZhciBTTj1NKCgpPT57blB0KCk7clB0KCk7aVB0KCk7eE4oKX0pO2Z1bmN0aW9uIE1OKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3Wj1NKCgpPT57U04oKX0pO2Z1bmN0aW9uIEVOKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gVE4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBTWj1NKCgpPT57U04oKTt3WigpfSk7ZnVuY3Rpb24gdlQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBvUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHhUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciBhUHQ9TSgoKT0+e3hULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gcjRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiBuNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIGk0ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBvNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gc1B0KCl7dmFyIGU9cjRlLHQ9bjRlLHI9aTRlLG49bzRlLGk9e30sbz1zWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykseFosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxFTihzbi52aWV3KSxNTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFROKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyxiWix0aGlzLGFyZ3VtZW50cykpJiYoTU4oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoTU4oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEhdk4obmV3IHhUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha312TihuZXcgeFQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp2VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnZUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIGxQdD1NKCgpPT57TkF0KCk7U04oKTtTWigpO3daKCk7b1B0KCk7YVB0KCl9KTt2YXIgY1B0PU0oKCk9PntsUHQoKTtTWigpfSk7ZnVuY3Rpb24gaFB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gYTRlKGUsdCl7dmFyIHI9aFB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gczRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P2E0ZShkLHUpOmhQdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT1iVCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09VFomJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gTVo7aWYoeSlyZXR1cm4geT0hMSx1UHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09RVope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PUVafHxjLmNoYXJDb2RlQXQoKytwKT09PUVaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT1iVD95PSEwOlA9PT1UWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09YlQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PWJUKXk9ITA7ZWxzZSBpZihQPT09VFopeT0hMCxjLmNoYXJDb2RlQXQocCk9PT1iVCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09TVo7KXtmb3IodmFyIGI9W107ZyE9PXVQdCYmZyE9PU1aOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1zNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciB1UHQsTVosRVosYlQsVFosQ049TSgoKT0+e3VQdD17fSxNWj17fSxFWj0zNCxiVD0xMCxUWj0xM30pO3ZhciBBTixmUHQscFB0LGRQdCxtUHQsZ1B0PU0oKCk9PntDTigpO0FOPXcyKCIsIiksZlB0PUFOLnBhcnNlLHBQdD1BTi5wYXJzZVJvd3MsZFB0PUFOLmZvcm1hdCxtUHQ9QU4uZm9ybWF0Um93c30pO3ZhciBQTixfUHQseVB0LHZQdCx4UHQsYlB0PU0oKCk9PntDTigpO1BOPXcyKCIJIiksX1B0PVBOLnBhcnNlLHlQdD1QTi5wYXJzZVJvd3MsdlB0PVBOLmZvcm1hdCx4UHQ9UE4uZm9ybWF0Um93c30pO3ZhciB3UHQ9TSgoKT0+e0NOKCk7Z1B0KCk7YlB0KCl9KTtmdW5jdGlvbiBTUHQoZSl7cmV0dXJuK2V9dmFyIE1QdD1NKCgpPT57fSk7ZnVuY3Rpb24gRVB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gVFB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIENaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBDUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEFQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gUFB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBBWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgSVB0PU0oKCk9Pnt9KTt2YXIgUFosTFB0LGtQdCxJWixSUHQ9TSgoKT0+e1BaPTMsTFB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopLGtQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShQWiksSVo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oUFopfSk7ZnVuY3Rpb24gT1B0KGUpe3JldHVybiAxLU1hdGguY29zKGUqRFB0KX1mdW5jdGlvbiB6UHQoZSl7cmV0dXJuIE1hdGguc2luKGUqRFB0KX1mdW5jdGlvbiBMWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhOUHQqZSkpLzJ9dmFyIE5QdCxEUHQsRlB0PU0oKCk9PntOUHQ9TWF0aC5QSSxEUHQ9TlB0LzJ9KTtmdW5jdGlvbiBCUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gSFB0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIGtaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIFZQdD1NKCgpPT57fSk7ZnVuY3Rpb24gVVB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gcVB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBHUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFdQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxOWj9JTiplKmU6ZTxjNGU/SU4qKGUtPWw0ZSkqZSt1NGU6ZTxmNGU/SU4qKGUtPWg0ZSkqZStwNGU6SU4qKGUtPWQ0ZSkqZSttNGV9ZnVuY3Rpb24gWVB0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgTlosbDRlLGM0ZSx1NGUsaDRlLGY0ZSxwNGUsZDRlLG00ZSxJTixqUHQ9TSgoKT0+e05aPS4zNjM2MzYzNjM2MzYzNjM2NSxsNGU9Ni8xMSxjNGU9OC8xMSx1NGU9My80LGg0ZT05LzExLGY0ZT0xMC8xMSxwNGU9MTUvMTYsZDRlPTIxLzIyLG00ZT02My82NCxJTj0xL05aL05afSk7dmFyIERaLFhQdCwkUHQsT1osS1B0PU0oKCk9PntEWj0xLjcwMTU4LFhQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKSwkUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShEWiksT1o9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KERaKX0pO3ZhciBNMix6WixGWixaUHQsQlosSlB0LFFQdD1NKCgpPT57TTI9MipNYXRoLlBJLHpaPTEsRlo9LjMsWlB0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEJaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopLEpQdD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oelosRlopfSk7dmFyIHQ2dD1NKCgpPT57TVB0KCk7Q1B0KCk7SVB0KCk7UlB0KCk7RlB0KCk7VlB0KCk7R1B0KCk7alB0KCk7S1B0KCk7UVB0KCl9KTtmdW5jdGlvbiBlNnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgcjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6bihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBMTj1NKCgpPT57fSk7ZnVuY3Rpb24gbjZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gaTZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gaTZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIG82dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilpNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gczZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBsNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGM2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciB1NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGg2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgZjZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIga049TSgoKT0+e30pO2Z1bmN0aW9uIHA2dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIGQ2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIG02dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBnNnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBfNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHk2dCgpe3JldHVybiB0aGlzLl9yb290fXZhciB2NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHg2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIGI2dD1NKCgpPT57fSk7ZnVuY3Rpb24gdzZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFM2dD1NKCgpPT57a04oKX0pO2Z1bmN0aW9uIE02dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgRTZ0PU0oKCk9PntrTigpfSk7ZnVuY3Rpb24gVDZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIEM2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEE2dD1NKCgpPT57fSk7ZnVuY3Rpb24gUDZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEk2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEw2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBIWih0PT1udWxsP1Q2dDp0LHI9PW51bGw/UDZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIEhaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gazZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsUjZ0PU0oKCk9PnthNnQoKTtsNnQoKTt1NnQoKTtmNnQoKTtkNnQoKTtfNnQoKTt2NnQoKTtiNnQoKTtTNnQoKTtFNnQoKTtBNnQoKTtMNnQoKTtHYT1DeS5wcm90b3R5cGU9SFoucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgSFoodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1rNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1rNnQobikpO3JldHVybiBlfTtHYS5hZGQ9bjZ0O0dhLmFkZEFsbD1vNnQ7R2EuY292ZXI9czZ0O0dhLmRhdGE9YzZ0O0dhLmV4dGVudD1oNnQ7R2EuZmluZD1wNnQ7R2EucmVtb3ZlPW02dDtHYS5yZW1vdmVBbGw9ZzZ0O0dhLnJvb3Q9eTZ0O0dhLnNpemU9eDZ0O0dhLnZpc2l0PXc2dDtHYS52aXNpdEFmdGVyPU02dDtHYS54PUM2dDtHYS55PUk2dH0pO3ZhciBWWj1NKCgpPT57UjZ0KCl9KTtmdW5jdGlvbiBnNGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIF80ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gTjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9em4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQsZzRlLF80ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6em4oK2wpLHMoKSxvKTplfSxvfXZhciBENnQ9TSgoKT0+e1R5KCk7TE4oKTtWWigpfSk7ZnVuY3Rpb24gUk4oKXt9ZnVuY3Rpb24gTzZ0KGUsdCl7dmFyIHI9bmV3IFJOO2lmKGUgaW5zdGFuY2VvZiBSTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsTk49TSgoKT0+e2NsPSIkIjtSTi5wcm90b3R5cGU9TzZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Uk4saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1PNnR9KTt2YXIgejZ0PU0oKCk9PntOTigpfSk7ZnVuY3Rpb24gRE4oKXt9ZnVuY3Rpb24geTRlKGUsdCl7dmFyIHI9bmV3IEROO2lmKGUgaW5zdGFuY2VvZiBETillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksRjZ0PU0oKCk9PntOTigpO0F5PXBnLnByb3RvdHlwZTtETi5wcm90b3R5cGU9eTRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RE4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIEI2dD1NKCgpPT57fSk7dmFyIEg2dD1NKCgpPT57fSk7dmFyIFY2dD1NKCgpPT57fSk7dmFyIFVaPU0oKCk9Pnt6NnQoKTtGNnQoKTtOTigpO0I2dCgpO0g2dCgpO1Y2dCgpfSk7ZnVuY3Rpb24gdjRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFU2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBxNnQoZSl7dmFyIHQ9djRlLHI9dSxuLGk9em4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVU2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVU2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6em4oK2cpLGQoKSxoKTppfSxofXZhciBHNnQ9TSgoKT0+e1R5KCk7TE4oKTtVWigpfSk7ZnVuY3Rpb24gWTZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IE9OKHIpfWZ1bmN0aW9uIE9OKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGI0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIHc0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIFc2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09eDRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgeDRlLHFaLGo2dD1NKCgpPT57eDRlPXt2YWx1ZTpmdW5jdGlvbigpe319O09OLnByb3RvdHlwZT1ZNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpPTixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWI0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXc0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09VzZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09VzZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBPTihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07cVo9WTZ0fSk7dmFyIFg2dD1NKCgpPT57ajZ0KCl9KTtmdW5jdGlvbiBZWigpe3JldHVybiBQeXx8KFo2dChTNGUpLFB5PUVULm5vdygpK0JOKX1mdW5jdGlvbiBTNGUoKXtQeT0wfWZ1bmN0aW9uIEdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBITihlLHQscil7dmFyIG49bmV3IEdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gSjZ0KCl7WVooKSwrK0UyO2Zvcih2YXIgZT16Tix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiAkNnQoKXtQeT0oRk49RVQubm93KCkpK0JOLEUyPVNUPTA7dHJ5e0o2dCgpfWZpbmFsbHl7RTI9MCxFNGUoKSxQeT0wfX1mdW5jdGlvbiBNNGUoKXt2YXIgZT1FVC5ub3coKSx0PWUtRk47dD5LNnQmJihCTi09dCxGTj1lKX1mdW5jdGlvbiBFNGUoKXtmb3IodmFyIGUsdD16TixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp6Tj1yKTtNVD1lLFdaKG4pfWZ1bmN0aW9uIFdaKGUpe2lmKCFFMil7U1QmJihTVD1jbGVhclRpbWVvdXQoU1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYoU1Q9c2V0VGltZW91dCgkNnQsZS1FVC5ub3coKS1CTikpLHdUJiYod1Q9Y2xlYXJJbnRlcnZhbCh3VCkpKTood1R8fChGTj1FVC5ub3coKSx3VD1zZXRJbnRlcnZhbChNNGUsSzZ0KSksRTI9MSxaNnQoJDZ0KSl9fXZhciBFMixTVCx3VCxLNnQsek4sTVQsRk4sUHksQk4sRVQsWjZ0LFE2dD1NKCgpPT57RTI9MCxTVD0wLHdUPTAsSzZ0PTFlMyxGTj0wLFB5PTAsQk49MCxFVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxaNnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07R1oucHJvdG90eXBlPUhOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6R1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1laKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZNVCE9PXRoaXMmJihNVD9NVC5fbmV4dD10aGlzOnpOPXRoaXMsTVQ9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixXWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxXWigpKX19fSk7dmFyIHRJdD1NKCgpPT57UTZ0KCl9KTtmdW5jdGlvbiBlSXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBySXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBuSXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9SE4odSksYz1xWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1UNGUqTWF0aC5zcXJ0KGQpLHg9ZCpDNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIFQ0ZSxDNGUsalo9TSgoKT0+e1g2dCgpO1VaKCk7dEl0KCk7VDRlPTEwLEM0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBpSXQoKXt2YXIgZSx0LHIsbj16bigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsZUl0LHJJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOnpuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgb0l0PU0oKCk9PntUeSgpO0xOKCk7VlooKTtqWigpfSk7ZnVuY3Rpb24gYUl0KGUsdCxyKXt2YXIgbixpPXpuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6em4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnpuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBzSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBsSXQoZSl7dmFyIHQ9em4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT16bihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6em4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOmV9LG99dmFyIGNJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIHVJdChlKXt2YXIgdD16biguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXpuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czp6bigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnpuKCtzKSxhKCksbyk6ZX0sb312YXIgaEl0PU0oKCk9PntUeSgpfSk7dmFyIGZJdD1NKCgpPT57cjZ0KCk7RDZ0KCk7RzZ0KCk7b0l0KCk7c0l0KCk7alooKTtjSXQoKTtoSXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBWTj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIFRUPU0oKCk9PntWTigpfSk7ZnVuY3Rpb24gcEl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciBkSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1JdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIGdJdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0l0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgeUl0PU0oKCk9Pnt9KTtmdW5jdGlvbiB2SXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oWFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgWFosJFo9TSgoKT0+e1ZOKCl9KTtmdW5jdGlvbiBLWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHhJdD1NKCgpPT57Vk4oKX0pO3ZhciBVTixaWj1NKCgpPT57eUl0KCk7JFooKTt4SXQoKTtVTj17IiI6X0l0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEtaKGUqMTAwLHQpfSxyOktaLHM6dkl0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IEpaKGUpfWZ1bmN0aW9uIEpaKGUpe2lmKCEodD1BNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlVOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBBNGUsUVo9TSgoKT0+e1paKCk7QTRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1KWi5wcm90b3R5cGU7SloucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIHRKKGUpe3JldHVybiBlfXZhciBiSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP3BJdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTp0SixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP21JdChlLm51bWVyYWxzKTp0SixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9VU5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP3dJdFs4K1haLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPXdJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgd0l0LGVKPU0oKCk9PntUVCgpO2RJdCgpO2dJdCgpO1FaKCk7WlooKTskWigpO2JJdCgpO3dJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIFdOKGUpe3JldHVybiBHTj1xTihlKSxySj1HTi5mb3JtYXQsbko9R04uZm9ybWF0UHJlZml4LEdOfXZhciBHTixySixuSixTSXQ9TSgoKT0+e2VKKCk7V04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBNSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIEVJdD1NKCgpPT57VFQoKX0pO2Z1bmN0aW9uIFRJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgQ0l0PU0oKCk9PntUVCgpfSk7ZnVuY3Rpb24gQUl0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIFBJdD1NKCgpPT57VFQoKX0pO3ZhciBJSXQ9TSgoKT0+e1NJdCgpO2VKKCk7UVooKTtFSXQoKTtDSXQoKTtQSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBqTn1mdW5jdGlvbiBqTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBMSXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgWU4sa3k9TSgoKT0+e2pOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ak4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtMSXQoWU4sZSx0aGlzLnQpLExJdCh0aGlzLFlOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1ZTi50OnRoaXMucz1ZTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1lOPW5ldyBqTn0pO2Z1bmN0aW9uIEtOKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBabihlKXtyZXR1cm4gZT4xP0ZuOmU8LTE/LUZuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBvSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxpSixycixGbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxDVCxYTixSeSwkTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixpSj0xZS0xMixycj1NYXRoLlBJLEZuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsQ1Q9TWF0aC5jZWlsLFhOPU1hdGguZXhwLFJ5PU1hdGgubG9nLCROPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIFpOKGUsdCl7ZSYmUkl0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJlJJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gYUooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gTkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspYUooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYma0l0Lmhhc093blByb3BlcnR5KGUudHlwZSk/a0l0W2UudHlwZV0oZSx0KTpaTihlLHQpfXZhciBrSXQsUkl0LG1nPU0oKCk9PntrSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtaTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspWk4ocltuXS5nZW9tZXRyeSx0KX19LFJJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2FKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylhSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtOSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylOSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KVpOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIFA0ZSgpe0V1LnBvaW50PUw0ZX1mdW5jdGlvbiBJNGUoKXt6SXQoREl0LE9JdCl9ZnVuY3Rpb24gTDRlKGUsdCl7RXUucG9pbnQ9ekl0LERJdD1lLE9JdD10LGUqPXdlLHQqPXdlLHNKPWUsbEo9YWUodD10LzIrVDIpLGNKPUp0KHQpfWZ1bmN0aW9uIHpJdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtc0osbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9Y0oqYSxsPWxKKm8rcyphZShpKSxjPXMqbipKdChpKTtBVC5hZGQoU24oYyxsKSksc0o9ZSxsSj1vLGNKPWF9ZnVuY3Rpb24gRkl0KGUpe3JldHVybiBKTi5yZXNldCgpLE1vKGUsRXUpLEpOKjJ9dmFyIEFULEpOLERJdCxPSXQsc0osbEosY0osRXUsdUo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7QVQ9Q3MoKSxKTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtBVC5yZXNldCgpLEV1LmxpbmVTdGFydD1QNGUsRXUubGluZUVuZD1JNGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQVQ7Sk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtKTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxabihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gUU4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBJVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGhKKGUsdCl7Z2cucHVzaChacD1bZGk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBHSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKGRpLGUpPnVsKGRpLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKGRpLEVpKSYmKGRpPWUpOkVpPj1kaT8oZTxkaSYmKGRpPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChkaSxlKT51bChkaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChkaSxFaSkmJihkaT1lKX1lbHNlIGdnLnB1c2goWnA9W2RpPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIEJJdCgpe0twLnBvaW50PUdJdH1mdW5jdGlvbiBISXQoKXtacFswXT1kaSxacFsxXT1FaSxLcC5wb2ludD1oSixQMj1udWxsfWZ1bmN0aW9uIFdJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0xULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFVJdD1lLHFJdD10O0V1LnBvaW50KGUsdCksR0l0KGUsdCl9ZnVuY3Rpb24gazRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gUjRlKCl7V0l0KFVJdCxxSXQpLEV1LmxpbmVFbmQoKSxZZShMVCk+Y2UmJihkaT0tKEVpPTE4MCkpLFpwWzBdPWRpLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIE40ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gVkl0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBZSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShkaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChONGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxWSXQobixpWzBdKXx8Vkl0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsZGk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxkaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbZGksaGxdLFtFaSx4Y11dfXZhciBkaSxobCxFaSx4YyxPeSxVSXQscUl0LFAyLExULGdnLFpwLEtwLGpJdD1NKCgpPT57a3koKTt1SigpO0EyKCk7bHIoKTttZygpO0xUPUNzKCksS3A9e3BvaW50OmhKLGxpbmVTdGFydDpCSXQsbGluZUVuZDpISXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9V0l0LEtwLmxpbmVTdGFydD1rNGUsS3AubGluZUVuZD1SNGUsTFQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1oSixLcC5saW5lU3RhcnQ9Qkl0LEtwLmxpbmVFbmQ9SEl0LEFUPDA/KGRpPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6TFQ+Y2U/eGM9OTA6TFQ8LWNlJiYoaGw9LTkwKSxacFswXT1kaSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gbUooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtSVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIFJUKGUsdCxyKXsrK2tULGVEKz0oZS1lRCkva1QsckQrPSh0LXJEKS9rVCxuRCs9KHItbkQpL2tUfWZ1bmN0aW9uIFhJdCgpe1R1LnBvaW50PUQ0ZX1mdW5jdGlvbiBENGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9TzRlLFJUKFdhLFlhLGphKX1mdW5jdGlvbiBPNGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO3REKz1hLGlEKz1hKihXYSsoV2E9bikpLG9EKz1hKihZYSsoWWE9aSkpLGFEKz1hKihqYSsoamE9bykpLFJUKFdhLFlhLGphKX1mdW5jdGlvbiAkSXQoKXtUdS5wb2ludD1tSn1mdW5jdGlvbiB6NGUoKXtUdS5wb2ludD1CNGV9ZnVuY3Rpb24gRjRlKCl7Skl0KEtJdCxaSXQpLFR1LnBvaW50PW1KfWZ1bmN0aW9uIEI0ZShlLHQpe0tJdD1lLFpJdD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PUpJdDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksUlQoV2EsWWEsamEpfWZ1bmN0aW9uIEpJdChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PVpuKGMpLGg9YyYmLXUvYztmSis9aCphLHBKKz1oKnMsZEorPWgqbCx0RCs9dSxpRCs9dSooV2ErKFdhPW4pKSxvRCs9dSooWWErKFlhPWkpKSxhRCs9dSooamErKGphPW8pKSxSVChXYSxZYSxqYSl9ZnVuY3Rpb24gUUl0KGUpe2tUPXREPWVEPXJEPW5EPWlEPW9EPWFEPWZKPXBKPWRKPTAsTW8oZSxUdSk7dmFyIHQ9Zkoscj1wSixuPWRKLGk9dCp0K3IqcituKm47cmV0dXJuIGk8aUomJih0PWlELHI9b0Qsbj1hRCx0RDxjZSYmKHQ9ZUQscj1yRCxuPW5EKSxpPXQqdCtyKnIrbipuLGk8aUopP1tOYU4sTmFOXTpbU24ocix0KSpVcixabihuL1JyKGkpKSpVcl19dmFyIGtULHRELGVELHJELG5ELGlELG9ELGFELGZKLHBKLGRKLEtJdCxaSXQsV2EsWWEsamEsVHUsdDl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50Om1KLGxpbmVTdGFydDpYSXQsbGluZUVuZDokSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PXo0ZSxUdS5saW5lRW5kPUY0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1YSXQsVHUubGluZUVuZD0kSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgZTl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIGdKPU0oKCk9Pnt9KTtmdW5jdGlvbiBfSihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIE5UKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/c0Qobjl0KGUpLGk5dCh0LHIpKTpuOXQoZSk6dHx8cj9pOXQodCxyKTpfSn1mdW5jdGlvbiByOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIG45dChlKXt2YXIgdD1yOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PXI5dCgtZSksdH1mdW5jdGlvbiBpOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxabihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxabihwKnItdSpuKV19LGF9ZnVuY3Rpb24gbEQoZSl7ZT1OVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgRFQ9TSgoKT0+e2dKKCk7bHIoKTtfSi5pbnZlcnQ9X0p9KTtmdW5jdGlvbiB5SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPW85dChhLGkpLG89bzl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gbzl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPUtOKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIGE5dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9TlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHlKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB2Sj1NKCgpPT57QTIoKTtlOXQoKTtscigpO0RUKCl9KTtmdW5jdGlvbiBjRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciB4Sj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIGJKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gdUQoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBoRChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyB1RChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IHVEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IHVEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgdUQoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLHM5dChvKSxzOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIHM5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIHdKPU0oKCk9PntiSigpfSk7ZnVuY3Rpb24gZkQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtTSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoU0ouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqWm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmU0o8LWNlKV5hJjF9dmFyIFNKLE1KPU0oKCk9PntreSgpO0EyKCk7bHIoKTtTSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBFSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1INGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBINGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBUSj1NKCgpPT57RnkoKX0pO3ZhciBsOXQsVjRlLFU0ZSxDSj1NKCgpPT57RnkoKTtUSigpO2w5dD1FSihfZyksVjRlPWw5dC5yaWdodCxVNGU9bDl0LmxlZnR9KTt2YXIgQUo9TSgoKT0+e30pO3ZhciBjOXQ9TSgoKT0+e0FKKCl9KTt2YXIgdTl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBQSj1NKCgpPT57TDIoKX0pO3ZhciBJSj1NKCgpPT57UEooKX0pO3ZhciBMSj1NKCgpPT57fSk7dmFyIGg5dCxHNGUsVzRlLGtKPU0oKCk9PntoOXQ9QXJyYXkucHJvdG90eXBlLEc0ZT1oOXQuc2xpY2UsVzRlPWg5dC5tYXB9KTt2YXIgZjl0PU0oKCk9Pnt9KTt2YXIgcDl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgUko9TSgoKT0+e30pO3ZhciBTMG4sTTBuLEUwbixOSj1NKCgpPT57UzBuPU1hdGguc3FydCg1MCksTTBuPU1hdGguc3FydCgxMCksRTBuPU1hdGguc3FydCgyKX0pO3ZhciBESj1NKCgpPT57fSk7dmFyIGQ5dD1NKCgpPT57a0ooKTtDSigpO2Y5dCgpO0xKKCk7cDl0KCk7UkooKTtOSigpO0RKKCl9KTt2YXIgZEQ9TSgoKT0+e0wyKCl9KTt2YXIgZzl0PU0oKCk9PntrSigpO0Z5KCk7TDIoKTtkRCgpfSk7dmFyIF85dD1NKCgpPT57SUooKX0pO3ZhciB5OXQ9TSgoKT0+e30pO3ZhciB2OXQ9TSgoKT0+e0wyKCl9KTt2YXIgeDl0PU0oKCk9PntGeSgpO0wyKCk7ZEQoKX0pO2Z1bmN0aW9uIE9UKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIGI5dD1NKCgpPT57fSk7dmFyIE9KPU0oKCk9Pnt9KTt2YXIgdzl0PU0oKCk9Pnt9KTt2YXIgUzl0PU0oKCk9PntGeSgpfSk7dmFyIE05dD1NKCgpPT57fSk7dmFyIEU5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9PntPSigpfSk7dmFyIFQ5dD1NKCgpPT57ekooKX0pO3ZhciBtRD1NKCgpPT57Q0ooKTtGeSgpO1RKKCk7Yzl0KCk7dTl0KCk7SUooKTtMSigpO2Q5dCgpO2c5dCgpO185dCgpO0RKKCk7eTl0KCk7djl0KCk7eDl0KCk7Yjl0KCk7T0ooKTtBSigpO3c5dCgpO2REKCk7UkooKTtTOXQoKTtNOXQoKTtFOXQoKTtOSigpO3pKKCk7UEooKTtUOXQoKX0pO2Z1bmN0aW9uIGdEKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9Y0QoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PU9UKHUpO3ZhciBTPWZEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGhEKHUsdFBlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoUTRlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBRNGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gdFBlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUZuLWNlOkZuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Gbi1jZTpGbi10WzFdKX12YXIgRko9TSgoKT0+e3hKKCk7d0ooKTtscigpO01KKCk7bUQoKX0pO2Z1bmN0aW9uIGVQZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9GbjotRm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9clBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gclBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiBuUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqRm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIHpULEJKPU0oKCk9PntGSigpO2xyKCk7elQ9Z0QoZnVuY3Rpb24oKXtyZXR1cm4hMH0sZVBlLG5QZSxbLXJyLC1Gbl0pfSk7ZnVuY3Rpb24gX0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt5SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PVBUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9SVQoZyxTKSxPPUlUKF8sQyk7UU4oayxPKTt2YXIgRD1QLEI9UFQoayxEKSxJPVBUKEQsRCksTD1CKkItSSooUFQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9SVQoRCwoLUItUikvSSk7aWYoUU4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9SVQoRCwoLUIrUikvSSk7cmV0dXJuIFFOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIGdEKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBISj1NKCgpPT57QTIoKTt2SigpO2xyKCk7YkooKTtGSigpfSk7ZnVuY3Rpb24gQzl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIEE5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWNEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPU9UKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZoRChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQseCkpLGI9TWF0aC5tYXgoeUQsTWF0aC5taW4oRlQsYikpXSxydD1bej1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCx6KSksVT1NYXRoLm1heCh5RCxNYXRoLm1pbihGVCxVKSldO0M5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIEZULHlELEJUPU0oKCk9PntscigpO3hKKCk7QTl0KCk7d0ooKTttRCgpO0ZUPTFlOSx5RD0tRlR9KTtmdW5jdGlvbiBQOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgSTl0PU0oKCk9PntCVCgpfSk7ZnVuY3Rpb24gaVBlKCl7azIucG9pbnQ9YVBlLGsyLmxpbmVFbmQ9b1BlfWZ1bmN0aW9uIG9QZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gYVBlKGUsdCl7ZSo9d2UsdCo9d2UsVUo9ZSx2RD1KdCh0KSx4RD1hZSh0KSxrMi5wb2ludD1zUGV9ZnVuY3Rpb24gc1BlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtVUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXhEKnItdkQqbipvLGM9dkQqcit4RCpuKm87VkouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxVSj1lLHZEPXIseEQ9bn1mdW5jdGlvbiBiRChlKXtyZXR1cm4gVkoucmVzZXQoKSxNbyhlLGsyKSwrVkp9dmFyIFZKLFVKLHZELHhELGsyLHFKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1ZKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6aVBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gR0pbMF09ZSxHSlsxXT10LGJEKGxQZSl9dmFyIEdKLGxQZSxXSj1NKCgpPT57cUooKTtHSj1bbnVsbCxudWxsXSxsUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkdKfX0pO2Z1bmN0aW9uIHdEKGUsdCl7cmV0dXJuIGUmJms5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2s5dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gUjl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIE45dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIEQ5dChlLHQpe3JldHVybiEhZkQoZS5tYXAoY1BlKSxPOXQodCkpfWZ1bmN0aW9uIGNQZShlKXtyZXR1cm4gZT1lLm1hcChPOXQpLGUucG9wKCksZX1mdW5jdGlvbiBPOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gejl0KGUsdCl7cmV0dXJuKGUmJkw5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0w5dFtlLnR5cGVdOndEKShlLHQpfXZhciBMOXQsazl0LEY5dD1NKCgpPT57TUooKTtXSigpO2xyKCk7TDl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHdEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih3RChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sazl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUjl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE45dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE45dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEQ5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKEQ5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYod0QocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gQjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gSDl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gU0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKENUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoQ1Qocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoQ1QodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoQ1Qoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPUI5dChvLGksOTApLHA9SDl0KHQsZSxfKSxkPUI5dChzLGEsOTApLGc9SDl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBWOXQoKXtyZXR1cm4gU0QoKSgpfXZhciBVOXQ9TSgoKT0+e21EKCk7bHIoKX0pO2Z1bmN0aW9uIHE5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKlpuKFJyKG9KKG8tbikrYSpsKm9KKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBHOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgTUQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVQZSgpe3lnLnBvaW50PWhQZX1mdW5jdGlvbiBoUGUoZSx0KXt5Zy5wb2ludD1qOXQsVzl0PVhKPWUsWTl0PSRKPXR9ZnVuY3Rpb24gajl0KGUsdCl7akouYWRkKCRKKmUtWEoqdCksWEo9ZSwkSj10fWZ1bmN0aW9uIGZQZSgpe2o5dChXOXQsWTl0KX12YXIgWUosakosVzl0LFk5dCxYSiwkSix5ZyxLSixYOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO1lKPUNzKCksako9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PXVQZSx5Zy5saW5lRW5kPWZQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLFlKLmFkZChZZShqSikpLGpKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVlKLzI7cmV0dXJuIFlKLnJlc2V0KCksZX19O0tKPXlnfSk7ZnVuY3Rpb24gZFBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+SFQmJihIVD1lKSx0PEVEJiYoRUQ9dCksdD5URCYmKFREPXQpfXZhciBSMixFRCxIVCxURCxwUGUsTjIsWko9TSgoKT0+e1hwKCk7UjI9MS8wLEVEPVIyLEhUPS1SMixURD1IVCxwUGU9e3BvaW50OmRQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLEVEXSxbSFQsVERdXTtyZXR1cm4gSFQ9VEQ9LShFRD1SMj0xLzApLGV9fTtOMj1wUGV9KTtmdW5jdGlvbiBIeShlLHQpe0pKKz1lLFFKKz10LCsrVlR9ZnVuY3Rpb24gJDl0KCl7Q3UucG9pbnQ9bVBlfWZ1bmN0aW9uIG1QZShlLHQpe0N1LnBvaW50PWdQZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIGdQZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7Q0QrPWkqKG9mK2UpLzIsQUQrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiBLOXQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBfUGUoKXtDdS5wb2ludD12UGV9ZnVuY3Rpb24geVBlKCl7UTl0KFo5dCxKOXQpfWZ1bmN0aW9uIHZQZShlLHQpe0N1LnBvaW50PVE5dCxIeShaOXQ9b2Y9ZSxKOXQ9YWY9dCl9ZnVuY3Rpb24gUTl0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtDRCs9aSoob2YrZSkvMixBRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCx0USs9aSoob2YrZSksZVErPWkqKGFmK3QpLFVUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgSkosUUosVlQsQ0QsQUQsRDIsdFEsZVEsVVQsWjl0LEo5dCxvZixhZixDdSxyUSx0THQ9TSgoKT0+e2xyKCk7Sko9MCxRSj0wLFZUPTAsQ0Q9MCxBRD0wLEQyPTAsdFE9MCxlUT0wLFVUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDokOXQsbGluZUVuZDpLOXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PV9QZSxDdS5saW5lRW5kPXlQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD0kOXQsQ3UubGluZUVuZD1LOXR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVVUP1t0US9VVCxlUS9VVF06RDI/W0NEL0QyLEFEL0QyXTpWVD9bSkovVlQsUUovVlRdOltOYU4sTmFOXTtyZXR1cm4gSko9UUo9VlQ9Q0Q9QUQ9RDI9dFE9ZVE9VVQ9MCxlfX07clE9Q3V9KTtmdW5jdGlvbiBQRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIGVMdD1NKCgpPT57bHIoKTtYcCgpO1BELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIHhQZShlLHQpe0lELnBvaW50PWlMdCxyTHQ9cVQ9ZSxuTHQ9R1Q9dH1mdW5jdGlvbiBpTHQoZSx0KXtxVC09ZSxHVC09dCxpUS5hZGQoUnIocVQqcVQrR1QqR1QpKSxxVD1lLEdUPXR9dmFyIGlRLG5RLHJMdCxuTHQscVQsR1QsSUQsb1Esb0x0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtpUT1DcygpLElEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtJRC5wb2ludD14UGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtuUSYmaUx0KHJMdCxuTHQpLElELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe25RPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStpUTtyZXR1cm4gaVEucmVzZXQoKSxlfX07b1E9SUR9KTtmdW5jdGlvbiBMRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBhTHQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIHNMdD1NKCgpPT57TEQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOmFMdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPWFMdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gbEx0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihLSikpLEtKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihvUSkpLG9RLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihyUSkpLHJRLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgTEQpOm5ldyBQRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBjTHQ9TSgoKT0+e01EKCk7bWcoKTtYOXQoKTtaSigpO3RMdCgpO2VMdCgpO29MdCgpO3NMdCgpfSk7ZnVuY3Rpb24gdUx0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgYVE7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIGFRKCl7fXZhciBXVD1NKCgpPT57YVEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIHNRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gc1EoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIHNRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBzUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBrRD1NKCgpPT57bWcoKTtaSigpfSk7ZnVuY3Rpb24gbFEoZSx0KXtyZXR1cm4rdD9TUGUoZSx0KTp3UGUoZSl9ZnVuY3Rpb24gd1BlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIFNQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPVpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPGJQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSxoTHQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLGhMdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciBoTHQsYlBlLGZMdD1NKCgpPT57QTIoKTtscigpO1dUKCk7aEx0PTE2LGJQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBFUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gWVQoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gWVQoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPXpULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1sUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1NUGUoRVBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9fRChkPUYqd2UpOihkPW51bGwselQpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9bFEoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1zRChmPU5UKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIE1QZSxBdT1NKCgpPT57QkooKTtISigpO0JUKCk7Z0ooKTtNRCgpO2xyKCk7RFQoKTtXVCgpO2tEKCk7Zkx0KCk7TVBlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVlUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBSRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gcEx0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsWm4oaSp0KV19LHJ9dmFyIGRMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGNRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gcEx0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksWm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMihjUSkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgTkQ9TSgoKT0+e2xyKCk7UkQoKTtkTHQoKX0pO2Z1bmN0aW9uIEREKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIHVRPU0oKCk9PntORCgpfSk7ZnVuY3Rpb24gVFBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBtTHQoKXt2YXIgZSx0LHI9REQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1UUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgZ0x0PU0oKCk9PntscigpO3VRKCk7TkQoKTtrRCgpfSk7ZnVuY3Rpb24gT0QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxabihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBfTHQoKXtyZXR1cm4gZW8oekQpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgekQseUx0PU0oKCk9PntscigpO0gyKCk7QXUoKTt6RD1PRChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTt6RC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqWm4oZS8yKX0pfSk7ZnVuY3Rpb24gdkx0KCl7cmV0dXJuIGVvKEZEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBGRCx4THQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0ZEPU9EKGZ1bmN0aW9uKGUpe3JldHVybihlPUtOKGUpKSYmZS9KdChlKX0pO0ZELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoRm4rdCkvMikpXX1mdW5jdGlvbiBiTHQoKXtyZXR1cm4gaFEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gaFEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChsRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEJEPU0oKCk9PntscigpO0RUKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKFhOKHQpKS1Gbl19fSk7ZnVuY3Rpb24gSEQoZSl7cmV0dXJuIEMyKChGbitlKS8yKX1mdW5jdGlvbiBmUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoSEQodCkvSEQoZSkpLGk9ciokTihIRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUZuK2NlJiYocz0tRm4rY2UpOnM+Rm4tY2UmJihzPUZuLWNlKTt2YXIgbD1pLyROKEhEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoJE4oaS9jLDEvbikpLUZuXX0sb31mdW5jdGlvbiB3THQoKXtyZXR1cm4gQjIoZlEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIFNMdD1NKCgpPT57bHIoKTtSRCgpO0JEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIE1MdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgcFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gZFEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIEVMdCgpe3JldHVybiBCMihkUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgVEx0PU0oKCk9PntscigpO1JEKCk7cFEoKX0pO2Z1bmN0aW9uIFZEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gQ0x0KCl7cmV0dXJuIGVvKFZEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBBTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO1ZELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBVRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIFBMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1VRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVVEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBJTHQ9TSgoKT0+e0JUKCk7TUQoKTtXVCgpO2tEKCl9KTtmdW5jdGlvbiBxRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBMTHQoKXtyZXR1cm4gZW8ocUQpLnNjYWxlKDE3NS4yOTUpfXZhciBrTHQ9TSgoKT0+e0F1KCk7bHIoKTtxRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBHRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24gUkx0KCl7cmV0dXJuIGVvKEdEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgTkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoWm4pfSk7ZnVuY3Rpb24gV0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIERMdCgpe3JldHVybiBlbyhXRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgT0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTtXRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFlEKGUsdCl7cmV0dXJuW1J5KEMyKChGbit0KS8yKSksLWVdfWZ1bmN0aW9uIHpMdCgpe3ZhciBlPWhRKFlEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIEZMdD1NKCgpPT57bHIoKTtCRCgpO1lELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKFhOKGUpKS1Gbl19fSk7dmFyIEJMdD1NKCgpPT57dUooKTtqSXQoKTt0OXQoKTt2SigpO0JKKCk7SEooKTtJOXQoKTtCVCgpO0Y5dCgpO1dKKCk7VTl0KCk7Rzl0KCk7cUooKTtjTHQoKTt1USgpO2dMdCgpO3lMdCgpO3hMdCgpO1NMdCgpO05EKCk7VEx0KCk7cFEoKTtBTHQoKTtJTHQoKTtBdSgpO0JEKCk7a0x0KCk7Tkx0KCk7T0x0KCk7Rkx0KCk7RFQoKTttZygpO1dUKCl9KTtmdW5jdGlvbiBDUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gQVBlKGUpe3JldHVybiBlLnJlZHVjZShQUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gUFBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIElQZShlKXtyZXR1cm4gMStlLnJlZHVjZShMUGUsMCl9ZnVuY3Rpb24gTFBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBrUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIFJQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gSEx0KCl7dmFyIGU9Q1BlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1BUGUocCksZi55PUlQZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1rUGUobyksYz1SUGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIFZMdD1NKCgpPT57fSk7ZnVuY3Rpb24gTlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFVMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihOUGUpfXZhciBxTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgV0x0PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgakx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyICRMdD1NKCgpPT57fSk7ZnVuY3Rpb24gS0x0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIFpMdD1NKCgpPT57fSk7ZnVuY3Rpb24gSkx0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIFFMdD1NKCgpPT57fSk7ZnVuY3Rpb24gdGt0KGUpe2Zvcih2YXIgdD10aGlzLHI9RFBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gRFBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgZWt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBya3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIG5rdD1NKCgpPT57fSk7ZnVuY3Rpb24gaWt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBva3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGFrdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgc2t0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsa3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIGNrdD1NKCgpPT57fSk7ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD16UGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKG1RKX1mdW5jdGlvbiBPUGUoKXtyZXR1cm4galQodGhpcykuZWFjaEJlZm9yZShGUGUpfWZ1bmN0aW9uIHpQZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBGUGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIG1RKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIGpEPU0oKCk9PntxTHQoKTtXTHQoKTtqTHQoKTskTHQoKTtaTHQoKTtRTHQoKTtla3QoKTtua3QoKTtva3QoKTtza3QoKTtja3QoKTt4Zy5wcm90b3R5cGU9alQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpVTHQsZWFjaDpHTHQsZWFjaEFmdGVyOlhMdCxlYWNoQmVmb3JlOllMdCxzdW06S0x0LHNvcnQ6Skx0LHBhdGg6dGt0LGFuY2VzdG9yczpya3QsZGVzY2VuZGFudHM6aWt0LGxlYXZlczpha3QsbGlua3M6bGt0LGNvcHk6T1BlfX0pO2Z1bmN0aW9uIGhrdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgdWt0LGZrdD1NKCgpPT57dWt0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uICREKGUpe2Zvcih2YXIgdD0wLHI9KGU9aGt0KHVrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJnBrdChvLGkpPysrdDoobz1IUGUobj1CUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBCUGUoZSx0KXt2YXIgcixuO2lmKGdRKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoWEQodCxlW3JdKSYmZ1EoWFQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFhEKFhUKGVbcl0sZVtuXSksdCkmJlhEKFhUKGVbcl0sdCksZVtuXSkmJlhEKFhUKGVbbl0sdCksZVtyXSkmJmdRKGRrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gWEQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gcGt0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gZ1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighcGt0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gSFBlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBWUGUoZVswXSk7Y2FzZSAyOnJldHVybiBYVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gZGt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gVlBlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gWFQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIGRrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciBfUT1NKCgpPT57Zmt0KCl9KTtmdW5jdGlvbiBta3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24gZ2t0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIF9rdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBLRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24geVEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7bWt0KHIsdCxuPWVbMl0pLHQ9bmV3IEtEKHQpLHI9bmV3IEtEKHIpLG49bmV3IEtEKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtta3QodC5fLHIuXyxuPWVbc10pLG49bmV3IEtEKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYoZ2t0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYoZ2t0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPV9rdCh0KTsobj1uLm5leHQpIT09cjspKGE9X2t0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj0kRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiB5a3QoZSl7cmV0dXJuIHlRKGUpLGV9dmFyIHZRPU0oKCk9PntfUSgpfSk7ZnVuY3Rpb24gdmt0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBaRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHhRPU0oKCk9Pnt9KTtmdW5jdGlvbiBVUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB3a3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUoeGt0KGUpKS5lYWNoQWZ0ZXIoYlEobiwuNSkpLmVhY2hCZWZvcmUoYmt0KDEpKTpvLmVhY2hCZWZvcmUoeGt0KFVQZSkpLmVhY2hBZnRlcihiUSh0ZCwxKSkuZWFjaEFmdGVyKGJRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGJrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT12a3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIHhrdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIGJRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9eVEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBia3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIFNrdD1NKCgpPT57dlEoKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBKRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIHdRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gTWt0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKEpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIEVrdD1NKCgpPT57d1EoKTtVMigpfSk7ZnVuY3Rpb24gR1BlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIFdQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBBa3QoKXt2YXIgZT1HUGUsdD1XUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9VGt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP0NrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtUa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Da3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1xUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKG1RKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBUa3QscVBlLENrdCxQa3Q9TSgoKT0+e1pEKCk7akQoKTtUa3Q9IiQiLHFQZT17ZGVwdGg6LTF9LENrdD17fX0pO2Z1bmN0aW9uIFlQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBTUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIE1RKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24galBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIFhQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiAkUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gUUQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiBLUGUoZSl7Zm9yKHZhciB0PW5ldyBRRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBRRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgUUQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gSWt0KCl7dmFyIGU9WVBlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9S1BlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe1hQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1NUShkKSxmPVNRKGYpLGQmJmY7KWc9U1EoZykscD1NUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoalBlKCRQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhTVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVNRKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBMa3Q9TSgoKT0+e2pEKCk7UUQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyICRUPU0oKCk9Pnt9KTtmdW5jdGlvbiBUUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgRVEsdE8sZU89TSgoKT0+e1UyKCk7JFQoKTtFUT0oMStNYXRoLnNxcnQoNSkpLzI7dE89ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7VFEodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KEVRKX0pO2Z1bmN0aW9uIGtrdCgpe3ZhciBlPXRPLHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKEpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciBSa3Q9TSgoKT0+e3dRKCk7ZU8oKTtaRCgpO3hRKCl9KTtmdW5jdGlvbiBOa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgRGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciB6a3Q9TSgoKT0+e1UyKCk7JFQoKX0pO3ZhciBGa3QsQmt0PU0oKCk9PntVMigpOyRUKCk7ZU8oKTtGa3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9VFEodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShFUSl9KTt2YXIgSGt0PU0oKCk9PntWTHQoKTtqRCgpO1NrdCgpO3ZRKCk7X1EoKTtFa3QoKTtQa3QoKTtMa3QoKTtSa3QoKTtEa3QoKTtVMigpOyRUKCk7emt0KCk7ZU8oKTtCa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgck89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFVrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGk2ZSgpe3JldHVybiBYa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gcWt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9WlBlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/R2t0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/bk8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/bk8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1KUGUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PVFQZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9dDZlLmV4ZWMoZSkpP25PKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWU2ZS5leGVjKGUpKT9uTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1yNmUuZXhlYyhlKSk/amt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9bjZlLmV4ZWMoZSkpP2prdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOlZrdC5oYXNPd25Qcm9wZXJ0eShlKT9Ha3QoVmt0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBHa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gbk8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBaVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1pUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFdrdCgpe3JldHVybiIjIitDUSh0aGlzLnIpK0NRKHRoaXMuZykrQ1EodGhpcy5iKX1mdW5jdGlvbiBZa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQ1EoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gamt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gWGt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/WGt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEFRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMixLVCx1ZixaUGUsSlBlLFFQZSx0NmUsZTZlLHI2ZSxuNmUsVmt0LGlPPU0oKCk9PntyTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLEtUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixaUGU9L14jKFswLTlhLWZdezMsOH0pJC8sSlBlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxRUGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLHQ2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLEtUXSsiXFwpJCIpLGU2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLEtUXSsiXFwpJCIpLHI2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbS1QsdWYsdWZdKyJcXCkkIiksbjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbS1QsdWYsdWYsS1RdKyJcXCkkIiksVmt0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlVrdCxmb3JtYXRIZXg6VWt0LGZvcm1hdEhzbDppNmUsZm9ybWF0UmdiOnFrdCx0b1N0cmluZzpxa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6V2t0LGZvcm1hdEhleDpXa3QsZm9ybWF0UmdiOllrdCx0b1N0cmluZzpZa3R9KSk7ZWQoY2YsSlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oQVEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksQVEoZSxpLG4pLEFRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIG9PLGFPLFBRPU0oKCk9PntvTz1NYXRoLlBJLzE4MCxhTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIHQ4dChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gZTh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9WlQoZSkpO3ZhciB0PVJRKGUucikscj1SUShlLmcpLG49UlEoZS5iKSxpPUlRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvS2t0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1JUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pLyRrdCksYT1JUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL1prdCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3Q4dChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJUShlKXtyZXR1cm4gZT5vNmU/TWF0aC5wb3coZSwxLzMpOmUvUWt0K0prdH1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpRa3QqKGUtSmt0KX1mdW5jdGlvbiBrUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFJRKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIGE2ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9dDh0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqYU87cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBRVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/YTZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGU4dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCpvTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIHNPLCRrdCxLa3QsWmt0LEprdCxXMixRa3QsbzZlLHI4dD1NKCgpPT57ck8oKTtpTygpO1BRKCk7c089MTgsJGt0PS45NjQyMixLa3Q9MSxaa3Q9LjgyNTIxLEprdD00LzI5LFcyPTYvMjksUWt0PTMqVzIqVzIsbzZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD0ka3QqTFEodCksZT1La3QqTFEoZSkscj1aa3QqTFEociksbmV3IHJvKGtRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGtRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksa1EoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxRVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCtzTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLXNPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGU4dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBzNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPVpUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0obzh0Km4rbjh0KnQtaTh0KnIpLyhvOHQrbjh0LWk4dCksbz1uLWksYT0odEMqKHItaSktRFEqbykvbE8scz1NYXRoLnNxcnQoYSphK28qbykvKHRDKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqYU8tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9zNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGE4dCxOUSxEUSxsTyx0QyxuOHQsaTh0LG84dCxzOHQ9TSgoKT0+e3JPKCk7aU8oKTtQUSgpO2E4dD0tLjE0ODYxLE5RPTEuNzgyNzcsRFE9LS4yOTIyNyxsTz0tLjkwNjQ5LHRDPTEuOTcyOTQsbjh0PXRDKmxPLGk4dD10QypOUSxvOHQ9TlEqRFEtbE8qYTh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqb08sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKihhOHQqbitOUSppKSksMjU1Kih0K3IqKERRKm4rbE8qaSkpLDI1NSoodCtyKih0QypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e2lPKCk7cjh0KCk7czh0KCl9KTtmdW5jdGlvbiBPUShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGNPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBPUSgoci1uL3QpKnQsYSxpLG8scyl9fXZhciB1Tz1NKCgpPT57fSk7ZnVuY3Rpb24gaE8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBPUSgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB6UT1NKCgpPT57dU8oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRlE9TSgoKT0+e30pO2Z1bmN0aW9uIGw4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIGw2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBjOHQoZSl7cmV0dXJuKGU9K2UpPT0xP0puOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9sNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIEpuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2w4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntGUSgpfSk7ZnVuY3Rpb24gdTh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIGVDLGg4dCxmOHQsQlE9TSgoKT0+e2p5KCk7dU8oKTt6USgpO0syKCk7ZUM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1jOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7aDh0PXU4dChjTyksZjh0PXU4dChoTyl9KTtmdW5jdGlvbiBmTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIEhRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gZE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBWUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIHJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIFVRPU0oKCk9PntwTygpfSk7ZnVuY3Rpb24gYzZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiB1NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBnTyhlLHQpe3ZhciByPUdRLmxhc3RJbmRleD1xUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1HUS5leGVjKGUpKSYmKGk9cVEuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1xUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/dTZlKGxbMF0ueCk6YzZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBHUSxxUSxXUT1NKCgpPT57ckMoKTtHUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscVE9bmV3IFJlZ0V4cChHUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bixlQyk6Z086dCBpbnN0YW5jZW9mIEVnP2VDOnQgaW5zdGFuY2VvZiBEYXRlP2RPOkFycmF5LmlzQXJyYXkodCk/Zk86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP21POkFzKShlLHQpfXZhciBwTz1NKCgpPT57ankoKTtCUSgpO0hRKCk7VlEoKTtyQygpO1VRKCk7V1EoKTtGUSgpfSk7ZnVuY3Rpb24gcDh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciBkOHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFlRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKm04dCxza2V3WDpNYXRoLmF0YW4obCkqbTh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgbTh0LF9PLGc4dD1NKCgpPT57bTh0PTE4MC9NYXRoLlBJLF9PPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24geTh0KGUpe3JldHVybiBlPT09Im5vbmUiP19POihuQ3x8KG5DPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGpRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxfOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLG5DLnN0eWxlLnRyYW5zZm9ybT1lLGU9Xzh0LmdldENvbXB1dGVkU3R5bGUoalEuYXBwZW5kQ2hpbGQobkMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGpRLnJlbW92ZUNoaWxkKG5DKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxZUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHY4dChlKXtyZXR1cm4gZT09bnVsbD9fTzooeU98fCh5Tz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx5Ty5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9eU8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsWVEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpfTyl9dmFyIG5DLGpRLF84dCx5Tyx4OHQ9TSgoKT0+e2c4dCgpfSk7ZnVuY3Rpb24gYjh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciB3OHQsUzh0LE04dD1NKCgpPT57ckMoKTt4OHQoKTt3OHQ9Yjh0KHk4dCwicHgsICIsInB4KSIsImRlZykiKSxTOHQ9Yjh0KHY4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gVDh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGY2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBwNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIEM4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8aDZlKWY9TWF0aC5sb2cocy9pKS9pQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKGlDKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK0U4dCp1KS8oMippKlhRKnApLGc9KHMqcy1pKmktRTh0KnUpLygyKnMqWFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL2lDLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9VDh0KF8pLEM9aS8oWFEqcCkqKFMqcDZlKGlDKmIrXyktZjZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL1Q4dChpQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgaUMsWFEsRTh0LGg2ZSxBOHQ9TSgoKT0+e2lDPU1hdGguU1FSVDIsWFE9MixFOHQ9NCxoNmU9MWUtMTJ9KTtmdW5jdGlvbiBQOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1KVCh0KSkuaCwocj1KVChyKSkuaCksaT1Kbih0LnMsci5zKSxvPUpuKHQubCxyLmwpLGE9Sm4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIEk4dCxMOHQsazh0PU0oKCk9PntqeSgpO0syKCk7STh0PVA4dCgkMiksTDh0PVA4dChKbil9KTtmdW5jdGlvbiAkUShlLHQpe3ZhciByPUpuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPUpuKGUuYSx0LmEpLGk9Sm4oZS5iLHQuYiksbz1KbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciBSOHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIE44dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVFUKHQpKS5oLChyPVFUKHIpKS5oKSxpPUpuKHQuYyxyLmMpLG89Sm4odC5sLHIubCksYT1Kbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgRDh0LE84dCx6OHQ9TSgoKT0+e2p5KCk7SzIoKTtEOHQ9Tjh0KCQyKSxPOHQ9Tjh0KEpuKX0pO2Z1bmN0aW9uIEY4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPUpuKGkucyxvLnMpLGw9Sm4oaS5sLG8ubCksYz1KbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEI4dCxIOHQsVjh0PU0oKCk9PntqeSgpO0syKCk7Qjh0PUY4dCgkMiksSDh0PUY4dChKbil9KTtmdW5jdGlvbiBVOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgcTh0PU0oKCk9Pnt9KTt2YXIgRzh0PU0oKCk9PntwTygpO0hRKCk7dU8oKTt6USgpO1ZRKCk7ckMoKTtVUSgpO2Q4dCgpO1dRKCk7TTh0KCk7QTh0KCk7QlEoKTtrOHQoKTtSOHQoKTt6OHQoKTtWOHQoKTtxOHQoKX0pO2Z1bmN0aW9uIEpRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gVzh0KCl7cmV0dXJuIG5ldyBKUX12YXIgS1EsWlEsWHksZDZlLFk4dCxqOHQ9TSgoKT0+e0tRPU1hdGguUEksWlE9MipLUSxYeT0xZS02LGQ2ZT1aUS1YeTtKUS5wcm90b3R5cGU9Vzh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SlEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoS1EtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglWlErWlEpLGg+ZDZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1LUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O1k4dD1XOHR9KTt2YXIgWDh0PU0oKCk9PntqOHQoKX0pO2Z1bmN0aW9uICQ4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyIEs4dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjh0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgSjh0PU0oKCk9Pnt9KTtmdW5jdGlvbiBROHQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciB0UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG02ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiBlUnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmUTh0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIHJSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KG02ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89ZVJ0KG4pLGE9ZVJ0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciBuUnQ9TSgoKT0+e3RSdCgpfSk7ZnVuY3Rpb24gaVJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgb1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhUnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIHNSdD1NKCgpPT57fSk7dmFyIGxSdD1NKCgpPT57Szh0KCk7Sjh0KCk7blJ0KCk7b1J0KCk7c1J0KCl9KTtmdW5jdGlvbiBjUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiB1UnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiB1UnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gaFJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcil1UnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGZSdD1NKCgpPT57fSk7ZnVuY3Rpb24gcFJ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBkUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1SdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBnUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgeVJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgdk89TSgoKT0+e30pO2Z1bmN0aW9uIHZSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHhSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIGJSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiB3UnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBTUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1SdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBFUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIENSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQVJ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIFBSdD1NKCgpPT57dk8oKX0pO2Z1bmN0aW9uIElSdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgTFJ0PU0oKCk9Pnt2TygpfSk7ZnVuY3Rpb24ga1J0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIFJSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIE5SdD1NKCgpPT57fSk7ZnVuY3Rpb24gRFJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIE9SdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIHpSdD1NKCgpPT57fSk7ZnVuY3Rpb24geE8oZSx0LHIpe3ZhciBuPW5ldyBRUSh0PT1udWxsP2tSdDp0LHI9PW51bGw/RFJ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFFRKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gRlJ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgWGEsQlJ0PU0oKCk9PntmUnQoKTtkUnQoKTtnUnQoKTt5UnQoKTt4UnQoKTtTUnQoKTtFUnQoKTtDUnQoKTtQUnQoKTtMUnQoKTtOUnQoKTt6UnQoKTtYYT14Ty5wcm90b3R5cGU9UVEucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgUVEodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1GUnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1GUnQobikpO3JldHVybiBlfTtYYS5hZGQ9Y1J0O1hhLmFkZEFsbD1oUnQ7WGEuY292ZXI9cFJ0O1hhLmRhdGE9bVJ0O1hhLmV4dGVudD1fUnQ7WGEuZmluZD12UnQ7WGEucmVtb3ZlPWJSdDtYYS5yZW1vdmVBbGw9d1J0O1hhLnJvb3Q9TVJ0O1hhLnNpemU9VFJ0O1hhLnZpc2l0PUFSdDtYYS52aXNpdEFmdGVyPUlSdDtYYS54PVJSdDtYYS55PU9SdH0pO3ZhciBIUnQ9TSgoKT0+e0JSdCgpfSk7dmFyIFZSdCxVUnQ9TSgoKT0+e1ZSdD1bXS5zbGljZX0pO2Z1bmN0aW9uIHR0dChlKXt0aGlzLl9zaXplPWUsdGhpcy5fY2FsbD10aGlzLl9lcnJvcj1udWxsLHRoaXMuX3Rhc2tzPVtdLHRoaXMuX2RhdGE9W10sdGhpcy5fd2FpdGluZz10aGlzLl9hY3RpdmU9dGhpcy5fZW5kZWQ9dGhpcy5fc3RhcnQ9MH1mdW5jdGlvbiBxUnQoZSl7aWYoIWUuX3N0YXJ0KXRyeXtfNmUoZSl9Y2F0Y2godCl7aWYoZS5fdGFza3NbZS5fZW5kZWQrZS5fYWN0aXZlLTFdKWV0dChlLHQpO2Vsc2UgaWYoIWUuX2RhdGEpdGhyb3cgdH19ZnVuY3Rpb24gXzZlKGUpe2Zvcig7ZS5fc3RhcnQ9ZS5fd2FpdGluZyYmZS5fYWN0aXZlPGUuX3NpemU7KXt2YXIgdD1lLl9lbmRlZCtlLl9hY3RpdmUscj1lLl90YXNrc1t0XSxuPXIubGVuZ3RoLTEsaT1yW25dO3Jbbl09eTZlKGUsdCksLS1lLl93YWl0aW5nLCsrZS5fYWN0aXZlLHI9aS5hcHBseShudWxsLHIpLGUuX3Rhc2tzW3RdJiYoZS5fdGFza3NbdF09cnx8ZzZlKX19ZnVuY3Rpb24geTZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7IWUuX3Rhc2tzW3RdfHwoLS1lLl9hY3RpdmUsKytlLl9lbmRlZCxlLl90YXNrc1t0XT1udWxsLGUuX2Vycm9yPT1udWxsJiYociE9bnVsbD9ldHQoZSxyKTooZS5fZGF0YVt0XT1uLGUuX3dhaXRpbmc/cVJ0KGUpOmJPKGUpKSkpfX1mdW5jdGlvbiBldHQoZSx0KXt2YXIgcj1lLl90YXNrcy5sZW5ndGgsbjtmb3IoZS5fZXJyb3I9dCxlLl9kYXRhPXZvaWQgMCxlLl93YWl0aW5nPU5hTjstLXI+PTA7KWlmKChuPWUuX3Rhc2tzW3JdKSYmKGUuX3Rhc2tzW3JdPW51bGwsbi5hYm9ydCkpdHJ5e24uYWJvcnQoKX1jYXRjaChpKXt9ZS5fYWN0aXZlPU5hTixiTyhlKX1mdW5jdGlvbiBiTyhlKXtpZighZS5fYWN0aXZlJiZlLl9jYWxsKXt2YXIgdD1lLl9kYXRhO2UuX2RhdGE9dm9pZCAwLGUuX2NhbGwoZS5fZXJyb3IsdCl9fWZ1bmN0aW9uIHdPKGUpe2lmKGU9PW51bGwpZT0xLzA7ZWxzZSBpZighKChlPStlKT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbmN1cnJlbmN5Iik7cmV0dXJuIG5ldyB0dHQoZSl9dmFyIGc2ZSxHUnQ9TSgoKT0+e1VSdCgpO2c2ZT17fTt0dHQucHJvdG90eXBlPXdPLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHR0LGRlZmVyOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJkZWZlciBhZnRlciBhd2FpdCIpO2lmKHRoaXMuX2Vycm9yIT1udWxsKXJldHVybiB0aGlzO3ZhciB0PVZSdC5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdC5wdXNoKGUpLCsrdGhpcy5fd2FpdGluZyx0aGlzLl90YXNrcy5wdXNoKHQpLHFSdCh0aGlzKSx0aGlzfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lcnJvcj09bnVsbCYmZXR0KHRoaXMsbmV3IEVycm9yKCJhYm9ydCIpKSx0aGlzfSxhd2FpdDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgYXdhaXQiKTtyZXR1cm4gdGhpcy5fY2FsbD1mdW5jdGlvbih0LHIpe2UuYXBwbHkobnVsbCxbdF0uY29uY2F0KHIpKX0sYk8odGhpcyksdGhpc30sYXdhaXRBbGw6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZSxiTyh0aGlzKSx0aGlzfX19KTt2YXIgV1J0PU0oKCk9PntHUnQoKX0pO2Z1bmN0aW9uIGJjKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9dmFyICR5PU0oKCk9Pnt9KTt2YXIgWVJ0LGpSdD1NKCgpPT57JHkoKTtZUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxydHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgWFJ0LCRSdD1NKCgpPT57JHkoKTtydHQoKTtYUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49U08uc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIE1PLG50dD1NKCgpPT57JHkoKTtNTz1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgS1J0LFpSdD1NKCgpPT57JHkoKTtudHQoKTtLUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3ZhciBpPU1PLnNvdXJjZSh0KShuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaSgpL259fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBKUnQsUVJ0PU0oKCk9PnskeSgpO0pSdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgdE50PU0oKCk9PntqUnQoKTtydHQoKTskUnQoKTtaUnQoKTtudHQoKTtRUnQoKX0pO2Z1bmN0aW9uIEoyKGUsdCl7dmFyIHIsbj12cygiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksaSxvPUppKCksYT1uZXcgWE1MSHR0cFJlcXVlc3Qscz1udWxsLGw9bnVsbCxjLHUsaD0wO3R5cGVvZiBYRG9tYWluUmVxdWVzdCE9InVuZGVmaW5lZCImJiEoIndpdGhDcmVkZW50aWFscyJpbiBhKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYT1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYT9hLm9ubG9hZD1hLm9uZXJyb3I9YS5vbnRpbWVvdXQ9ZjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihwKXthLnJlYWR5U3RhdGU+MyYmZihwKX07ZnVuY3Rpb24gZihwKXt2YXIgZD1hLnN0YXR1cyxnO2lmKCFkJiZ4NmUoYSl8fGQ+PTIwMCYmZDwzMDB8fGQ9PT0zMDQpe2lmKGMpdHJ5e2c9Yy5jYWxsKHIsYSl9Y2F0Y2goXyl7bi5jYWxsKCJlcnJvciIscixfKTtyZXR1cm59ZWxzZSBnPWE7bi5jYWxsKCJsb2FkIixyLGcpfWVsc2Ugbi5jYWxsKCJlcnJvciIscixwKX1pZihhLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24ocCl7bi5jYWxsKCJwcm9ncmVzcyIscixwKX0scj17aGVhZGVyOmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHA9KHArIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP28uZ2V0KHApOihkPT1udWxsP28ucmVtb3ZlKHApOm8uc2V0KHAsZCsiIikscil9LG1pbWVUeXBlOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXA9PW51bGw/bnVsbDpwKyIiLHIpOml9LHJlc3BvbnNlVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1wLHIpOnV9LHRpbWVvdXQ6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9K3Ascik6aH0sdXNlcjpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3M6KHM9cD09bnVsbD9udWxsOnArIiIscil9LHBhc3N3b3JkOmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/bDoobD1wPT1udWxsP251bGw6cCsiIixyKX0scmVzcG9uc2U6ZnVuY3Rpb24ocCl7cmV0dXJuIGM9cCxyfSxnZXQ6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJHRVQiLHAsZCl9LHBvc3Q6ZnVuY3Rpb24ocCxkKXtyZXR1cm4gci5zZW5kKCJQT1NUIixwLGQpfSxzZW5kOmZ1bmN0aW9uKHAsZCxnKXtyZXR1cm4gYS5vcGVuKHAsZSwhMCxzLGwpLGkhPW51bGwmJiFvLmhhcygiYWNjZXB0IikmJm8uc2V0KCJhY2NlcHQiLGkrIiwqLyoiKSxhLnNldFJlcXVlc3RIZWFkZXImJm8uZWFjaChmdW5jdGlvbihfLHkpe2Euc2V0UmVxdWVzdEhlYWRlcih5LF8pfSksaSE9bnVsbCYmYS5vdmVycmlkZU1pbWVUeXBlJiZhLm92ZXJyaWRlTWltZVR5cGUoaSksdSE9bnVsbCYmKGEucmVzcG9uc2VUeXBlPXUpLGg+MCYmKGEudGltZW91dD1oKSxnPT1udWxsJiZ0eXBlb2YgZD09ImZ1bmN0aW9uIiYmKGc9ZCxkPW51bGwpLGchPW51bGwmJmcubGVuZ3RoPT09MSYmKGc9djZlKGcpKSxnIT1udWxsJiZyLm9uKCJlcnJvciIsZykub24oImxvYWQiLGZ1bmN0aW9uKF8pe2cobnVsbCxfKX0pLG4uY2FsbCgiYmVmb3Jlc2VuZCIscixhKSxhLnNlbmQoZD09bnVsbD9udWxsOmQpLHJ9LGFib3J0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuYWJvcnQoKSxyfSxvbjpmdW5jdGlvbigpe3ZhciBwPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBwPT09bj9yOnB9fSx0IT1udWxsKXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7cmV0dXJuIHIuZ2V0KHQpfXJldHVybiByfWZ1bmN0aW9uIHY2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQ9PW51bGw/cjpudWxsKX19ZnVuY3Rpb24geDZlKGUpe3ZhciB0PWUucmVzcG9uc2VUeXBlO3JldHVybiB0JiZ0IT09InRleHQiP2UucmVzcG9uc2U6ZS5yZXNwb25zZVRleHR9dmFyIEVPPU0oKCk9PntUYigpO2ttKCl9KTtmdW5jdGlvbiBUZyhlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPUoyKHIpLm1pbWVUeXBlKGUpLnJlc3BvbnNlKHQpO2lmKG4hPW51bGwpe2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIituKTtyZXR1cm4gaS5nZXQobil9cmV0dXJuIGl9fXZhciBvQz1NKCgpPT57RU8oKX0pO3ZhciBlTnQsck50PU0oKCk9PntvQygpO2VOdD1UZygidGV4dC9odG1sIixmdW5jdGlvbihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZS5yZXNwb25zZVRleHQpfSl9KTt2YXIgbk50LGlOdD1NKCgpPT57b0MoKTtuTnQ9VGcoImFwcGxpY2F0aW9uL2pzb24iLGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnBhcnNlKGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIG9OdCxhTnQ9TSgoKT0+e29DKCk7b050PVRnKCJ0ZXh0L3BsYWluIixmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXNwb25zZVRleHR9KX0pO3ZhciBzTnQsbE50PU0oKCk9PntvQygpO3NOdD1UZygiYXBwbGljYXRpb24veG1sIixmdW5jdGlvbihlKXt2YXIgdD1lLnJlc3BvbnNlWE1MO2lmKCF0KXRocm93IG5ldyBFcnJvcigicGFyc2UgZXJyb3IiKTtyZXR1cm4gdH0pfSk7ZnVuY3Rpb24gVE8oZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKGk9bixuPW51bGwpO3ZhciBvPUoyKHIpLm1pbWVUeXBlKGUpO3JldHVybiBvLnJvdz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9vLnJlc3BvbnNlKGI2ZSh0LG49YSkpOm59LG8ucm93KG4pLGk/by5nZXQoaSk6b319ZnVuY3Rpb24gYjZlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHIucmVzcG9uc2VUZXh0LHQpfX12YXIgaXR0PU0oKCk9PntFTygpfSk7dmFyIGNOdCx1TnQ9TSgoKT0+e3FFKCk7aXR0KCk7Y050PVRPKCJ0ZXh0L2NzdiIsQ2IpfSk7dmFyIGhOdCxmTnQ9TSgoKT0+e3FFKCk7aXR0KCk7aE50PVRPKCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIixBYil9KTt2YXIgcE50PU0oKCk9PntFTygpO3JOdCgpO2lOdCgpO2FOdCgpO2xOdCgpO3VOdCgpO2ZOdCgpfSk7ZnVuY3Rpb24gcGYoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEt5PU0oKCk9Pnt9KTtmdW5jdGlvbiBhQyhlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT13NmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiB3NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHBmKGUodCkscil9fXZhciBvdHQ9TSgoKT0+e0t5KCl9KTt2YXIgZE50LG1OdCxTNmUsZGYsYXR0PU0oKCk9PntLeSgpO290dCgpO2ROdD1hQyhwZiksbU50PWROdC5yaWdodCxTNmU9ZE50LmxlZnQsZGY9bU50fSk7dmFyIHN0dD1NKCgpPT57fSk7dmFyIGdOdD1NKCgpPT57c3R0KCl9KTt2YXIgX050PU0oKCk9Pnt9KTtmdW5jdGlvbiBRMihlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfXZhciB0dz1NKCgpPT57fSk7dmFyIGx0dD1NKCgpPT57dHcoKX0pO3ZhciBjdHQ9TSgoKT0+e2x0dCgpfSk7dmFyIHV0dD1NKCgpPT57fSk7dmFyIHlOdCxFNmUsVDZlLGh0dD1NKCgpPT57eU50PUFycmF5LnByb3RvdHlwZSxFNmU9eU50LnNsaWNlLFQ2ZT15TnQubWFwfSk7dmFyIHZOdD1NKCgpPT57fSk7dmFyIHhOdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ08oZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIGZ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0MoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1ldyhlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gZXcoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1wdHQ/MTA6bz49ZHR0PzU6bz49bXR0PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49cHR0PzEwOm8+PWR0dD81Om8+PW10dD8yOjEpfWZ1bmN0aW9uIFp5KGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1wdHQ/aSo9MTA6bz49ZHR0P2kqPTU6bz49bXR0JiYoaSo9MiksdDxlPy1pOml9dmFyIHB0dCxkdHQsbXR0LGd0dD1NKCgpPT57cHR0PU1hdGguc3FydCg1MCksZHR0PU1hdGguc3FydCgxMCksbXR0PU1hdGguc3FydCgyKX0pO3ZhciBfdHQ9TSgoKT0+e30pO3ZhciBiTnQ9TSgoKT0+e2h0dCgpO2F0dCgpO3ZOdCgpO3V0dCgpO3hOdCgpO2Z0dCgpO2d0dCgpO190dCgpfSk7ZnVuY3Rpb24gbEMoZSx0LHIpe2lmKHI9PW51bGwmJihyPVEyKSwhIShuPWUubGVuZ3RoKSl7aWYoKHQ9K3QpPD0wfHxuPDIpcmV0dXJuK3IoZVswXSwwLGUpO2lmKHQ+PTEpcmV0dXJuK3IoZVtuLTFdLG4tMSxlKTt2YXIgbixpPShuLTEpKnQsbz1NYXRoLmZsb29yKGkpLGE9K3IoZVtvXSxvLGUpLHM9K3IoZVtvKzFdLG8rMSxlKTtyZXR1cm4gYSsocy1hKSooaS1vKX19dmFyIEFPPU0oKCk9Pnt0dygpfSk7dmFyIHdOdD1NKCgpPT57aHR0KCk7S3koKTt0dygpO0FPKCl9KTt2YXIgU050PU0oKCk9PntjdHQoKX0pO3ZhciBNTnQ9TSgoKT0+e30pO3ZhciBFTnQ9TSgoKT0+e3R3KCl9KTt2YXIgVE50PU0oKCk9PntLeSgpO3R3KCk7QU8oKX0pO3ZhciBDTnQ9TSgoKT0+e30pO3ZhciB5dHQ9TSgoKT0+e30pO3ZhciBBTnQ9TSgoKT0+e30pO3ZhciBQTnQ9TSgoKT0+e0t5KCl9KTt2YXIgSU50PU0oKCk9Pnt9KTt2YXIgTE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt5dHQoKX0pO3ZhciBrTnQ9TSgoKT0+e3Z0dCgpfSk7dmFyIG1mPU0oKCk9PnthdHQoKTtLeSgpO290dCgpO2dOdCgpO19OdCgpO2N0dCgpO3V0dCgpO2JOdCgpO3dOdCgpO1NOdCgpO190dCgpO01OdCgpO0VOdCgpO1ROdCgpO0NOdCgpO3l0dCgpO3N0dCgpO0FOdCgpO0FPKCk7ZnR0KCk7UE50KCk7SU50KCk7TE50KCk7Z3R0KCk7dnR0KCk7bHR0KCk7a050KCl9KTtmdW5jdGlvbiBQTygpe31mdW5jdGlvbiBSTnQoZSx0KXt2YXIgcj1uZXcgUE87aWYoZSBpbnN0YW5jZW9mIFBPKWUuZWFjaChmdW5jdGlvbihzLGwpe3Iuc2V0KGwscyl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe3ZhciBuPS0xLGk9ZS5sZW5ndGgsbztpZih0PT1udWxsKWZvcig7KytuPGk7KXIuc2V0KG4sZVtuXSk7ZWxzZSBmb3IoOysrbjxpOylyLnNldCh0KG89ZVtuXSxuLGUpLG8pfWVsc2UgaWYoZSlmb3IodmFyIGEgaW4gZSlyLnNldChhLGVbYV0pO3JldHVybiByfXZhciBmbCxKeSxJTz1NKCgpPT57Zmw9IiQiO1BPLnByb3RvdHlwZT1STnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQTyxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGZsK2UgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2ZsK2VdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpc1tmbCtlXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD1mbCtlO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWVbMF09PT1mbCYmZGVsZXRlIHRoaXNbZV19LGtleXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gZX0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godGhpc1t0XSk7cmV0dXJuIGV9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJmUucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBlfSxzaXplOmZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZmwmJisrZTtyZXR1cm4gZX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcylpZihlWzBdPT09ZmwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O0p5PVJOdH0pO3ZhciBOTnQ9TSgoKT0+e0lPKCl9KTtmdW5jdGlvbiBMTygpe31mdW5jdGlvbiBrNmUoZSx0KXt2YXIgcj1uZXcgTE87aWYoZSBpbnN0YW5jZW9mIExPKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciBReSxETnQ9TSgoKT0+e0lPKCk7UXk9SnkucHJvdG90eXBlO0xPLnByb3RvdHlwZT1rNmUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMTyxoYXM6UXkuaGFzLGFkZDpmdW5jdGlvbihlKXtyZXR1cm4gZSs9IiIsdGhpc1tmbCtlXT1lLHRoaXN9LHJlbW92ZTpReS5yZW1vdmUsY2xlYXI6UXkuY2xlYXIsdmFsdWVzOlF5LmtleXMsc2l6ZTpReS5zaXplLGVtcHR5OlF5LmVtcHR5LGVhY2g6UXkuZWFjaH19KTt2YXIgT050PU0oKCk9Pnt9KTt2YXIgek50PU0oKCk9Pnt9KTt2YXIgRk50PU0oKCk9Pnt9KTt2YXIgQk50PU0oKCk9PntOTnQoKTtETnQoKTtJTygpO09OdCgpO3pOdCgpO0ZOdCgpfSk7dmFyIEhOdCxydyxwbCxDZz1NKCgpPT57SE50PUFycmF5LnByb3RvdHlwZSxydz1ITnQubWFwLHBsPUhOdC5zbGljZX0pO2Z1bmN0aW9uIG53KGUpe3ZhciB0PUp5KCkscj1bXSxuPWtPO2U9ZT09bnVsbD9bXTpwbC5jYWxsKGUpO2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPXQuZ2V0KGEpO2lmKCFzKXtpZihuIT09a08pcmV0dXJuIG47dC5zZXQoYSxzPXIucHVzaChvKSl9cmV0dXJuIGVbKHMtMSklZS5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gci5zbGljZSgpO3I9W10sdD1KeSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspdC5oYXMoYz0obD1vW2FdKSsiIil8fHQuc2V0KGMsci5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKG8pLGkpOmUuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG53KCkuZG9tYWluKHIpLnJhbmdlKGUpLnVua25vd24obil9LGl9dmFyIGtPLHh0dD1NKCgpPT57Qk50KCk7Q2coKTtrTz17bmFtZToiaW1wbGljaXQifX0pO2Z1bmN0aW9uIGNDKCl7dmFyIGU9bncoKS51bmtub3duKHZvaWQgMCksdD1lLmRvbWFpbixyPWUucmFuZ2Usbj1bMCwxXSxpLG8sYT0hMSxzPTAsbD0wLGM9LjU7ZGVsZXRlIGUudW5rbm93bjtmdW5jdGlvbiB1KCl7dmFyIGg9dCgpLmxlbmd0aCxmPW5bMV08blswXSxwPW5bZi0wXSxkPW5bMS1mXTtpPShkLXApL01hdGgubWF4KDEsaC1zK2wqMiksYSYmKGk9TWF0aC5mbG9vcihpKSkscCs9KGQtcC1pKihoLXMpKSpjLG89aSooMS1zKSxhJiYocD1NYXRoLnJvdW5kKHApLG89TWF0aC5yb3VuZChvKSk7dmFyIGc9Q08oaCkubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBwK2kqX30pO3JldHVybiByKGY/Zy5yZXZlcnNlKCk6Zyl9cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0KGgpLHUoKSk6dCgpfSxlLnJhbmdlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVsraFswXSwraFsxXV0sdSgpKTpuLnNsaWNlKCl9LGUucmFuZ2VSb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gbj1bK2hbMF0sK2hbMV1dLGE9ITAsdSgpfSxlLmJhbmR3aWR0aD1mdW5jdGlvbigpe3JldHVybiBvfSxlLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sZS5yb3VuZD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIWgsdSgpKTphfSxlLnBhZGRpbmc9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gY0MoKS5kb21haW4odCgpKS5yYW5nZShuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx1KCl9ZnVuY3Rpb24gVk50KGUpe3ZhciB0PWUuY29weTtyZXR1cm4gZS5wYWRkaW5nPWUucGFkZGluZ091dGVyLGRlbGV0ZSBlLnBhZGRpbmdJbm5lcixkZWxldGUgZS5wYWRkaW5nT3V0ZXIsZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZOdCh0KCkpfSxlfWZ1bmN0aW9uIFVOdCgpe3JldHVybiBWTnQoY0MoKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBxTnQ9TSgoKT0+e21mKCk7eHR0KCl9KTtmdW5jdGlvbiBpdyhlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdUMoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIGJ0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZXYoKXt9ZnVuY3Rpb24gV050KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gSDZlKCl7cmV0dXJuIFpOdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBZTnQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBQZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1SNmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9qTnQodCk6cj09PTM/bmV3IGhhKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9STyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9STyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PU42ZS5leGVjKGUpKT9uZXcgaGEodFsxXSx0WzJdLHRbM10sMSk6KHQ9RDZlLmV4ZWMoZSkpP25ldyBoYSh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1PNmUuZXhlYyhlKSk/Uk8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9ejZlLmV4ZWMoZSkpP1JPKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUY2ZS5leGVjKGUpKT9LTnQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1CNmUuZXhlYyhlKSk/S050KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6R050Lmhhc093blByb3BlcnR5KGUpP2pOdChHTnRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBoYShOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGpOdChlKXtyZXR1cm4gbmV3IGhhKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBSTyhlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGhhKGUsdCxyLG4pfWZ1bmN0aW9uIE10dChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGV2fHwoZT1QZyhlKSksZT8oZT1lLnJnYigpLG5ldyBoYShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgaGF9ZnVuY3Rpb24gYXcoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP010dChlKTpuZXcgaGEoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGhhKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYTnQoKXtyZXR1cm4iIyIrd3R0KHRoaXMucikrd3R0KHRoaXMuZykrd3R0KHRoaXMuYil9ZnVuY3Rpb24gJE50KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHd0dChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBLTnQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBnZihlLHQscixuKX1mdW5jdGlvbiBaTnQoZSl7aWYoZSBpbnN0YW5jZW9mIGdmKXJldHVybiBuZXcgZ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgZXZ8fChlPVBnKGUpKSwhZSlyZXR1cm4gbmV3IGdmO2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBnZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIEpOdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Wk50KGUpOm5ldyBnZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFN0dChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgQWcsdHYsb3csaEMsX2YsUjZlLE42ZSxENmUsTzZlLHo2ZSxGNmUsQjZlLEdOdCxFdHQ9TSgoKT0+e2J0dCgpO0FnPS43LHR2PTEvQWcsb3c9IlxccyooWystXT9cXGQrKVxccyoiLGhDPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLF9mPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixSNmU9L14jKFswLTlhLWZdezMsOH0pJC8sTjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvdyxvdyxvd10rIlxcKSQiKSxENmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW19mLF9mLF9mXSsiXFwpJCIpLE82ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW293LG93LG93LGhDXSsiXFwpJCIpLHo2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW19mLF9mLF9mLGhDXSsiXFwpJCIpLEY2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbaEMsX2YsX2ZdKyJcXCkkIiksQjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbaEMsX2YsX2YsaENdKyJcXCkkIiksR050PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2l3KGV2LFBnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OldOdCxmb3JtYXRIZXg6V050LGZvcm1hdEhzbDpINmUsZm9ybWF0UmdiOllOdCx0b1N0cmluZzpZTnR9KTtpdyhoYSxhdyx1Qyhldix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90djpNYXRoLnBvdyh0dixlKSxuZXcgaGEodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/QWc6TWF0aC5wb3coQWcsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6WE50LGZvcm1hdEhleDpYTnQsZm9ybWF0UmdiOiROdCx0b1N0cmluZzokTnR9KSk7aXcoZ2YsSk50LHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBnZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IGhhKFN0dChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxTdHQoZSxpLG4pLFN0dChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciBRTnQsdER0LGVEdD1NKCgpPT57UU50PU1hdGguUEkvMTgwLHREdD0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFY2ZShlKXtpZihlIGluc3RhbmNlb2YgcnYpcmV0dXJuIG5ldyBydihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBoYXx8KGU9TXR0KGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oaUR0Km4rckR0KnQtbkR0KnIpLyhpRHQrckR0LW5EdCksbz1uLWksYT0oZkMqKHItaSktQ3R0Km8pL05PLHM9TWF0aC5zcXJ0KGEqYStvKm8pLyhmQyppKigxLWkpKSxsPXM/TWF0aC5hdGFuMihhLG8pKnREdC0xMjA6TmFOO3JldHVybiBuZXcgcnYobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gJGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1Y2ZShlKTpuZXcgcnYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHJ2KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgb0R0LFR0dCxDdHQsTk8sZkMsckR0LG5EdCxpRHQsYUR0PU0oKCk9PntidHQoKTtFdHQoKTtlRHQoKTtvRHQ9LS4xNDg2MSxUdHQ9MS43ODI3NyxDdHQ9LS4yOTIyNyxOTz0tLjkwNjQ5LGZDPTEuOTcyOTQsckR0PWZDKk5PLG5EdD1mQypUdHQsaUR0PVR0dCpDdHQtTk8qb0R0O2l3KHJ2LCRhLHVDKGV2LHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3R2Ok1hdGgucG93KHR2LGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBydih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqUU50LHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBoYSgyNTUqKHQrcioob0R0Km4rVHR0KmkpKSwyNTUqKHQrciooQ3R0Km4rTk8qaSkpLDI1NSoodCtyKihmQypuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgc3c9TSgoKT0+e0V0dCgpO2FEdCgpfSk7ZnVuY3Rpb24gQXR0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gc0R0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBBdHQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgUHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsRHQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBBdHQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgY0R0PU0oKCk9PntQdHQoKX0pO2Z1bmN0aW9uIGx3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgSXR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1RHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBVNmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBoRHQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpsdyhpc05hTihlKT90OmUpfWZ1bmN0aW9uIGZEdChlKXtyZXR1cm4oZT0rZSk9PTE/bmQ6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P1U2ZSh0LHIsZSk6bHcoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gbmQoZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dUR0KGUscik6bHcoaXNOYU4oZSk/dDplKX12YXIgTHR0PU0oKCk9PntJdHQoKX0pO2Z1bmN0aW9uIHBEdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWF3KHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBrdHQsbDVuLGM1bixkRHQ9TSgoKT0+e3N3KCk7UHR0KCk7Y0R0KCk7THR0KCk7a3R0PWZ1bmN0aW9uIGUodCl7dmFyIHI9ZkR0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPWF3KGkpKS5yLChvPWF3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9bmQoaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO2w1bj1wRHQoc0R0KSxjNW49cER0KGxEdCl9KTtmdW5jdGlvbiBtRHQoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gZ0R0KGUpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJiEoZSBpbnN0YW5jZW9mIERhdGFWaWV3KX12YXIgX0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5RHQoZSx0KXt2YXIgcj10P3QubGVuZ3RoOjAsbj1lP01hdGgubWluKHIsZS5sZW5ndGgpOjAsaT1uZXcgQXJyYXkobiksbz1uZXcgQXJyYXkociksYTtmb3IoYT0wO2E8bjsrK2EpaVthXT1udihlW2FdLHRbYV0pO2Zvcig7YTxyOysrYSlvW2FdPXRbYV07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihhPTA7YTxuOysrYSlvW2FdPWlbYV0ocyk7cmV0dXJuIG99fXZhciB2RHQ9TSgoKT0+e0RPKCl9KTtmdW5jdGlvbiB4RHQoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fXZhciBiRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHlmKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBPTz1NKCgpPT57fSk7ZnVuY3Rpb24gd0R0KGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bnYoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgU0R0PU0oKCk9PntETygpfSk7ZnVuY3Rpb24gcTZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBHNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBNRHQoZSx0KXt2YXIgcj1OdHQubGFzdEluZGV4PVJ0dC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1OdHQuZXhlYyhlKSkmJihpPVJ0dC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6eWYobixpKX0pKSxyPVJ0dC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/RzZlKGxbMF0ueCk6cTZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBOdHQsUnR0LEVEdD1NKCgpPT57T08oKTtOdHQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFJ0dD1uZXcgUmVnRXhwKE50dC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIG52KGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9sdyh0KToocj09PSJudW1iZXIiP3lmOnI9PT0ic3RyaW5nIj8obj1QZyh0KSk/KHQ9bixrdHQpOk1EdDp0IGluc3RhbmNlb2YgUGc/a3R0OnQgaW5zdGFuY2VvZiBEYXRlP3hEdDpnRHQodCk/bUR0OkFycmF5LmlzQXJyYXkodCk/eUR0OnR5cGVvZiB0LnZhbHVlT2YhPSJmdW5jdGlvbiImJnR5cGVvZiB0LnRvU3RyaW5nIT0iZnVuY3Rpb24ifHxpc05hTih0KT93RHQ6eWYpKGUsdCl9dmFyIERPPU0oKCk9PntzdygpO2REdCgpO3ZEdCgpO2JEdCgpO09PKCk7U0R0KCk7RUR0KCk7SXR0KCk7X0R0KCl9KTtmdW5jdGlvbiBEdHQoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLnJvdW5kKGUqKDEtcikrdCpyKX19dmFyIFREdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ0R0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9JGEoaSkpLmgsKG89JGEobykpLmgpLHM9bmQoaS5zLG8ucyksbD1uZChpLmwsby5sKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIgVzZlLGN3LEFEdD1NKCgpPT57c3coKTtMdHQoKTtXNmU9Q0R0KGhEdCksY3c9Q0R0KG5kKX0pO3ZhciB1dz1NKCgpPT57RE8oKTtPTygpO1REdCgpO0FEdCgpfSk7ZnVuY3Rpb24gaHcoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB6Tz1NKCgpPT57fSk7ZnVuY3Rpb24gRk8oZSl7cmV0dXJuK2V9dmFyIE90dD1NKCgpPT57fSk7ZnVuY3Rpb24gcEMoZSx0KXtyZXR1cm4odC09ZT0rZSk/ZnVuY3Rpb24ocil7cmV0dXJuKHItZSkvdH06aHcodCl9ZnVuY3Rpb24gWTZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodD0rdCxyPStyKTtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGk8PXQ/MDppPj1yPzE6bihpKX19fWZ1bmN0aW9uIGo2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD0wP3Q6aT49MT9yOm4oaSl9fX1mdW5jdGlvbiBYNmUoZSx0LHIsbil7dmFyIGk9ZVswXSxvPWVbMV0sYT10WzBdLHM9dFsxXTtyZXR1cm4gbzxpPyhpPXIobyxpKSxhPW4ocyxhKSk6KGk9cihpLG8pLGE9bihhLHMpKSxmdW5jdGlvbihsKXtyZXR1cm4gYShpKGwpKX19ZnVuY3Rpb24gJDZlKGUsdCxyLG4pe3ZhciBpPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLG89bmV3IEFycmF5KGkpLGE9bmV3IEFycmF5KGkpLHM9LTE7Zm9yKGVbaV08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylvW3NdPXIoZVtzXSxlW3MrMV0pLGFbc109bih0W3NdLHRbcysxXSk7cmV0dXJuIGZ1bmN0aW9uKGwpe3ZhciBjPWRmKGUsbCwxLGkpLTE7cmV0dXJuIGFbY10ob1tjXShsKSl9fWZ1bmN0aW9uIElnKGUsdCl7cmV0dXJuIHQuZG9tYWluKGUuZG9tYWluKCkpLnJhbmdlKGUucmFuZ2UoKSkuaW50ZXJwb2xhdGUoZS5pbnRlcnBvbGF0ZSgpKS5jbGFtcChlLmNsYW1wKCkpfWZ1bmN0aW9uIGlkKGUsdCl7dmFyIHI9UER0LG49UER0LGk9bnYsbz0hMSxhLHMsbDtmdW5jdGlvbiBjKCl7cmV0dXJuIGE9TWF0aC5taW4oci5sZW5ndGgsbi5sZW5ndGgpPjI/JDZlOlg2ZSxzPWw9bnVsbCx1fWZ1bmN0aW9uIHUoaCl7cmV0dXJuKHN8fChzPWEocixuLG8/WTZlKGUpOmUsaSkpKSgraCl9cmV0dXJuIHUuaW52ZXJ0PWZ1bmN0aW9uKGgpe3JldHVybihsfHwobD1hKG4scixwQyxvP2o2ZSh0KTp0KSkpKCtoKX0sdS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cncuY2FsbChoLEZPKSxjKCkpOnIuc2xpY2UoKX0sdS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1wbC5jYWxsKGgpLGMoKSk6bi5zbGljZSgpfSx1LnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49cGwuY2FsbChoKSxpPUR0dCxjKCl9LHUuY2xhbXA9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISFoLGMoKSk6b30sdS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1oLGMoKSk6aX0sYygpfXZhciBQRHQsZEM9TSgoKT0+e21mKCk7dXcoKTtDZygpO3pPKCk7T3R0KCk7UER0PVswLDFdfSk7ZnVuY3Rpb24gSUR0KGUpe3JldHVybiBNYXRoLmFicyhlPU1hdGgucm91bmQoZSkpPj0xZTIxP2UudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTplLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBpdihlLHQpe2lmKChyPShlPXQ/ZS50b0V4cG9uZW50aWFsKHQtMSk6ZS50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgcixuPWUuc2xpY2UoMCxyKTtyZXR1cm5bbi5sZW5ndGg+MT9uWzBdK24uc2xpY2UoMik6biwrZS5zbGljZShyKzEpXX12YXIgbUM9TSgoKT0+e30pO2Z1bmN0aW9uIHZmKGUpe3JldHVybiBlPWl2KE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfXZhciBnQz1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIExEdChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX12YXIga0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSRHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBORHQ9TSgoKT0+e30pO2Z1bmN0aW9uIExnKGUpe2lmKCEodD1LNmUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdDtyZXR1cm4gbmV3IEJPKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIEJPKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXZhciBLNmUsenR0PU0oKCk9PntLNmU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7TGcucHJvdG90eXBlPUJPLnByb3RvdHlwZTtCTy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIEREdChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgT0R0PU0oKCk9Pnt9KTtmdW5jdGlvbiB6RHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oRnR0PU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikraXYoZSxNYXRoLm1heCgwLHQrby0xKSlbMF19dmFyIEZ0dCxCdHQ9TSgoKT0+e21DKCl9KTtmdW5jdGlvbiBIdHQoZSx0KXt2YXIgcj1pdihlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBGRHQ9TSgoKT0+e21DKCl9KTt2YXIgVnR0LEJEdD1NKCgpPT57bUMoKTtCdHQoKTtGRHQoKTtWdHQ9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpJRHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSHR0KGUqMTAwLHQpfSxyOkh0dCxzOnpEdCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19fSk7ZnVuY3Rpb24gVXR0KGUpe3JldHVybiBlfXZhciBIRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFEdChlKXt2YXIgdD1lLmdyb3VwaW5nPT09dm9pZCAwfHxlLnRob3VzYW5kcz09PXZvaWQgMD9VdHQ6TER0KFZEdC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/VXR0OlJEdChWRHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxnKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6VnR0W0NdfHwoYj09PXZvaWQgMCYmKGI9MTIpLFM9ITAsQz0iZyIpLChffHxmPT09IjAiJiZwPT09Ij0iKSYmKF89ITAsZj0iMCIscD0iPSIpO3ZhciBQPWc9PT0iJCI/cjpnPT09IiMiJiYvW2JveFhdLy50ZXN0KEMpPyIwIitDLnRvTG93ZXJDYXNlKCk6IiIsaz1nPT09IiQiP246L1slcF0vLnRlc3QoQyk/YToiIixPPVZ0dFtDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9RER0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/VUR0WzgrRnR0LzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1MZyhoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2ZihmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz1VRHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIFZEdCxVRHQsR0R0PU0oKCk9PntnQygpO2tEdCgpO05EdCgpO3p0dCgpO09EdCgpO0JEdCgpO0J0dCgpO0hEdCgpO1ZEdD1BcnJheS5wcm90b3R5cGUubWFwLFVEdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gSE89cUR0KGUpLGZ3PUhPLmZvcm1hdCxWTz1ITy5mb3JtYXRQcmVmaXgsSE99dmFyIEhPLGZ3LFZPLFdEdD1NKCgpPT57R0R0KCk7cXR0KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KX0pO2Z1bmN0aW9uIEd0dChlKXtyZXR1cm4gTWF0aC5tYXgoMCwtdmYoTWF0aC5hYnMoZSkpKX12YXIgWUR0PU0oKCk9PntnQygpfSk7ZnVuY3Rpb24gV3R0KGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHZmKHQpLzMpKSkqMy12ZihNYXRoLmFicyhlKSkpfXZhciBqRHQ9TSgoKT0+e2dDKCl9KTtmdW5jdGlvbiBZdHQoZSx0KXtyZXR1cm4gZT1NYXRoLmFicyhlKSx0PU1hdGguYWJzKHQpLWUsTWF0aC5tYXgoMCx2Zih0KS12ZihlKSkrMX12YXIgWER0PU0oKCk9PntnQygpfSk7dmFyIGp0dD1NKCgpPT57V0R0KCk7enR0KCk7WUR0KCk7akR0KCk7WER0KCl9KTtmdW5jdGlvbiAkRHQoZSx0LHIpe3ZhciBuPWVbMF0saT1lW2UubGVuZ3RoLTFdLG89WnkobixpLHQ9PW51bGw/MTA6dCksYTtzd2l0Y2gocj1MZyhyPT1udWxsPyIsZiI6ciksci50eXBlKXtjYXNlInMiOnt2YXIgcz1NYXRoLm1heChNYXRoLmFicyhuKSxNYXRoLmFicyhpKSk7cmV0dXJuIHIucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1XdHQobyxzKSkmJihyLnByZWNpc2lvbj1hKSxWTyhyLHMpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8sTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpKSkmJihyLnByZWNpc2lvbj1hLShyLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e3IucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4oYT1HdHQobykpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIGZ3KHIpfXZhciBLRHQ9TSgoKT0+e21mKCk7anR0KCl9KTtmdW5jdGlvbiBvZChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIHNDKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gJER0KHQoKSxyLG4pfSxlLm5pY2U9ZnVuY3Rpb24ocil7cj09bnVsbCYmKHI9MTApO3ZhciBuPXQoKSxpPTAsbz1uLmxlbmd0aC0xLGE9bltpXSxzPW5bb10sbDtyZXR1cm4gczxhJiYobD1hLGE9cyxzPWwsbD1pLGk9byxvPWwpLGw9ZXcoYSxzLHIpLGw+MD8oYT1NYXRoLmZsb29yKGEvbCkqbCxzPU1hdGguY2VpbChzL2wpKmwsbD1ldyhhLHMscikpOmw8MCYmKGE9TWF0aC5jZWlsKGEqbCkvbCxzPU1hdGguZmxvb3IocypsKS9sLGw9ZXcoYSxzLHIpKSxsPjA/KG5baV09TWF0aC5mbG9vcihhL2wpKmwsbltvXT1NYXRoLmNlaWwocy9sKSpsLHQobikpOmw8MCYmKG5baV09TWF0aC5jZWlsKGEqbCkvbCxuW29dPU1hdGguZmxvb3IocypsKS9sLHQobikpLGV9LGV9ZnVuY3Rpb24gVU8oKXt2YXIgZT1pZChwQyx5Zik7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhlLFVPKCkpfSxvZChlKX12YXIgcHc9TSgoKT0+e21mKCk7dXcoKTtkQygpO0tEdCgpfSk7ZnVuY3Rpb24gcU8oKXt2YXIgZT1bMCwxXTtmdW5jdGlvbiB0KHIpe3JldHVybityfXJldHVybiB0LmludmVydD10LHQuZG9tYWluPXQucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cncuY2FsbChyLEZPKSx0KTplLnNsaWNlKCl9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBxTygpLmRvbWFpbihlKX0sb2QodCl9dmFyIFpEdD1NKCgpPT57Q2coKTtwdygpO090dCgpfSk7ZnVuY3Rpb24gR08oZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX12YXIgWHR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaNmUoZSx0KXtyZXR1cm4odD1NYXRoLmxvZyh0L2UpKT9mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5sb2coci9lKS90fTpodyh0KX1mdW5jdGlvbiBKNmUoZSx0KXtyZXR1cm4gZTwwP2Z1bmN0aW9uKHIpe3JldHVybi1NYXRoLnBvdygtdCxyKSpNYXRoLnBvdygtZSwxLXIpfTpmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5wb3codCxyKSpNYXRoLnBvdyhlLDEtcil9fWZ1bmN0aW9uIFE2ZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gSkR0KGUpe3JldHVybiBlPT09MTA/UTZlOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIFFEdChlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gdE90KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIFdPKCl7dmFyIGU9aWQoWjZlLEo2ZSkuZG9tYWluKFsxLDEwXSksdD1lLmRvbWFpbixyPTEwLG49UUR0KDEwKSxpPUpEdCgxMCk7ZnVuY3Rpb24gbygpe3JldHVybiBuPVFEdChyKSxpPUpEdChyKSx0KClbMF08MCYmKG49dE90KG4pLGk9dE90KGkpKSxlfXJldHVybiBlLmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsbygpKTpyfSxlLmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChhKSxvKCkpOnQoKX0sZS50aWNrcz1mdW5jdGlvbihhKXt2YXIgcz10KCksbD1zWzBdLGM9c1tzLmxlbmd0aC0xXSx1Oyh1PWM8bCkmJihoPWwsbD1jLGM9aCk7dmFyIGg9bihsKSxmPW4oYykscCxkLGcsXz1hPT1udWxsPzEwOithLHk9W107aWYoIShyJTEpJiZmLWg8Xyl7aWYoaD1NYXRoLnJvdW5kKGgpLTEsZj1NYXRoLnJvdW5kKGYpKzEsbD4wKXtmb3IoO2g8ZjsrK2gpZm9yKGQ9MSxwPWkoaCk7ZDxyOysrZClpZihnPXAqZCwhKGc8bCkpe2lmKGc+YylicmVhazt5LnB1c2goZyl9fWVsc2UgZm9yKDtoPGY7KytoKWZvcihkPXItMSxwPWkoaCk7ZD49MTstLWQpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIHk9c0MoaCxmLE1hdGgubWluKGYtaCxfKSkubWFwKGkpO3JldHVybiB1P3kucmV2ZXJzZSgpOnl9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihhLHMpe2lmKHM9PW51bGwmJihzPXI9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBzIT0iZnVuY3Rpb24iJiYocz1mdyhzKSksYT09PTEvMClyZXR1cm4gczthPT1udWxsJiYoYT0xMCk7dmFyIGw9TWF0aC5tYXgoMSxyKmEvZS50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMvaShNYXRoLnJvdW5kKG4oYykpKTtyZXR1cm4gdSpyPHItLjUmJih1Kj1yKSx1PD1sP3MoYyk6IiJ9fSxlLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdChHTyh0KCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguZmxvb3IobihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBpKE1hdGguY2VpbChuKGEpKSl9fSkpfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxXTygpLmJhc2UocikpfSxlfXZhciBlT3Q9TSgoKT0+e21mKCk7anR0KCk7ek8oKTtYdHQoKTtkQygpfSk7ZnVuY3Rpb24gZHcoZSx0KXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfWZ1bmN0aW9uIF9DKCl7dmFyIGU9MSx0PWlkKG4saSkscj10LmRvbWFpbjtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuKGE9ZHcoYSxlKS0obz1kdyhvLGUpKSk/ZnVuY3Rpb24ocyl7cmV0dXJuKGR3KHMsZSktbykvYX06aHcoYSl9ZnVuY3Rpb24gaShvLGEpe3JldHVybiBhPWR3KGEsZSktKG89ZHcobyxlKSksZnVuY3Rpb24ocyl7cmV0dXJuIGR3KG8rYSpzLDEvZSl9fXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStvLHIocigpKSk6ZX0sdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKHQsX0MoKS5leHBvbmVudChlKSl9LG9kKHQpfWZ1bmN0aW9uIHJPdCgpe3JldHVybiBfQygpLmV4cG9uZW50KC41KX12YXIgbk90PU0oKCk9Pnt6TygpO3B3KCk7ZEMoKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9W10sdD1bXSxyPVtdO2Z1bmN0aW9uIG4oKXt2YXIgbz0wLGE9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGEtMSk7KytvPGE7KXJbby0xXT1sQyhlLG8vYSk7cmV0dXJuIGl9ZnVuY3Rpb24gaShvKXtpZighaXNOYU4obz0rbykpcmV0dXJuIHRbZGYocixvKV19cmV0dXJuIGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKG8pe3ZhciBhPXQuaW5kZXhPZihvKTtyZXR1cm4gYTwwP1tOYU4sTmFOXTpbYT4wP3JbYS0xXTplWzBdLGE8ci5sZW5ndGg/clthXTplW2UubGVuZ3RoLTFdXX0saS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgYT0wLHM9by5sZW5ndGgsbDthPHM7KythKWw9b1thXSxsIT1udWxsJiYhaXNOYU4obD0rbCkmJmUucHVzaChsKTtyZXR1cm4gZS5zb3J0KHBmKSxuKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChvKSxuKCkpOnQuc2xpY2UoKX0saS5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oZSkucmFuZ2UodCl9LGl9dmFyIGlPdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gak8oKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV07ZnVuY3Rpb24gbyhzKXtpZihzPD1zKXJldHVybiBpW2RmKG4scywwLHIpXX1mdW5jdGlvbiBhKCl7dmFyIHM9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrczxyOyluW3NdPSgocysxKSp0LShzLXIpKmUpLyhyKzEpO3JldHVybiBvfXJldHVybiBvLmRvbWFpbj1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rc1swXSx0PStzWzFdLGEoKSk6W2UsdF19LG8ucmFuZ2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9cGwuY2FsbChzKSkubGVuZ3RoLTEsYSgpKTppLnNsaWNlKCl9LG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHMpe3ZhciBsPWkuaW5kZXhPZihzKTtyZXR1cm4gbDwwP1tOYU4sTmFOXTpsPDE/W2UsblswXV06bD49cj9bbltyLTFdLHRdOltuW2wtMV0sbltsXV19LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBqTygpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSl9LG9kKG8pfXZhciBvT3Q9TSgoKT0+e21mKCk7Q2coKTtwdygpfSk7ZnVuY3Rpb24gWE8oKXt2YXIgZT1bLjVdLHQ9WzAsMV0scj0xO2Z1bmN0aW9uIG4oaSl7aWYoaTw9aSlyZXR1cm4gdFtkZihlLGksMCxyKV19cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTplLnNsaWNlKCl9LG4ucmFuZ2U9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cGwuY2FsbChpKSxyPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLG4pOnQuc2xpY2UoKX0sbi5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oaSl7dmFyIG89dC5pbmRleE9mKGkpO3JldHVybltlW28tMV0sZVtvXV19LG4uY29weT1mdW5jdGlvbigpe3JldHVybiBYTygpLmRvbWFpbihlKS5yYW5nZSh0KX0sbn12YXIgYU90PU0oKCk9PnttZigpO0NnKCl9KTtmdW5jdGlvbiBOcihlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBOcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuICR0dC5zZXRUaW1lKCtvKSxLdHQuc2V0VGltZSgrYSksZSgkdHQpLGUoS3R0KSxNYXRoLmZsb29yKHIoJHR0LEt0dCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciAkdHQsS3R0LEthPU0oKCk9PnskdHQ9bmV3IERhdGUsS3R0PW5ldyBEYXRlfSk7dmFyICRPLG13LHNPdCxsT3Q9TSgoKT0+e0thKCk7JE89TnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTskTy5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP05yKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOiRPfTttdz0kTyxzT3Q9JE8ucmFuZ2V9KTt2YXIgb3Ysd2MsZ3csS08sWk8seGY9TSgoKT0+e292PTFlMyx3Yz02ZTQsZ3c9MzZlNSxLTz04NjRlNSxaTz02MDQ4ZTV9KTt2YXIgY090LF93LHVPdCxoT3Q9TSgoKT0+e0thKCk7eGYoKTtjT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqb3YpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL292fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxfdz1jT3QsdU90PWNPdC5yYW5nZX0pO3ZhciBmT3QsWnR0LHRJZSxwT3Q9TSgoKT0+e0thKCk7eGYoKTtmT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpvdil9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxadHQ9Zk90LHRJZT1mT3QucmFuZ2V9KTt2YXIgZE90LEp0dCxlSWUsbU90PU0oKCk9PntLYSgpO3hmKCk7ZE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqb3YtZS5nZXRNaW51dGVzKCkqd2MpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLEp0dD1kT3QsZUllPWRPdC5yYW5nZX0pO3ZhciBnT3QseXcsckllLF9PdD1NKCgpPT57S2EoKTt4ZigpO2dPdD1OcihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvS099LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSkseXc9Z090LHJJZT1nT3QucmFuZ2V9KTtmdW5jdGlvbiBhdihlKXtyZXR1cm4gTnIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSp3YykvWk99KX12YXIgc3YsdncseU90LHZPdCxrZyx4T3QsYk90LHdPdCxuSWUsaUllLG9JZSxhSWUsc0llLGxJZSxTT3Q9TSgoKT0+e0thKCk7eGYoKTtzdj1hdigwKSx2dz1hdigxKSx5T3Q9YXYoMiksdk90PWF2KDMpLGtnPWF2KDQpLHhPdD1hdig1KSxiT3Q9YXYoNiksd090PXN2LnJhbmdlLG5JZT12dy5yYW5nZSxpSWU9eU90LnJhbmdlLG9JZT12T3QucmFuZ2UsYUllPWtnLnJhbmdlLHNJZT14T3QucmFuZ2UsbEllPWJPdC5yYW5nZX0pO3ZhciBNT3QsUXR0LGNJZSxFT3Q9TSgoKT0+e0thKCk7TU90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLFF0dD1NT3QsY0llPU1PdC5yYW5nZX0pO3ZhciB0ZXQsYWQsdUllLFRPdD1NKCgpPT57S2EoKTt0ZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTt0ZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTthZD10ZXQsdUllPXRldC5yYW5nZX0pO3ZhciBDT3QsZWV0LGhJZSxBT3Q9TSgoKT0+e0thKCk7eGYoKTtDT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3Qqd2MpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3djfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSxlZXQ9Q090LGhJZT1DT3QucmFuZ2V9KTt2YXIgUE90LHJldCxmSWUsSU90PU0oKCk9PntLYSgpO3hmKCk7UE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqZ3cpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL2d3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkscmV0PVBPdCxmSWU9UE90LnJhbmdlfSk7dmFyIExPdCx4dyxwSWUsa090PU0oKCk9PntLYSgpO3hmKCk7TE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0tPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHh3PUxPdCxwSWU9TE90LnJhbmdlfSk7ZnVuY3Rpb24gbHYoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvWk99KX12YXIgY3YsYncsUk90LE5PdCxSZyxET3QsT090LHpPdCxkSWUsbUllLGdJZSxfSWUseUllLHZJZSxGT3Q9TSgoKT0+e0thKCk7eGYoKTtjdj1sdigwKSxidz1sdigxKSxST3Q9bHYoMiksTk90PWx2KDMpLFJnPWx2KDQpLERPdD1sdig1KSxPT3Q9bHYoNiksek90PWN2LnJhbmdlLGRJZT1idy5yYW5nZSxtSWU9Uk90LnJhbmdlLGdJZT1OT3QucmFuZ2UsX0llPVJnLnJhbmdlLHlJZT1ET3QucmFuZ2UsdkllPU9PdC5yYW5nZX0pO3ZhciBCT3QsbmV0LHhJZSxIT3Q9TSgoKT0+e0thKCk7Qk90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLG5ldD1CT3QseEllPUJPdC5yYW5nZX0pO3ZhciBpZXQsc2QsYkllLFZPdD1NKCgpPT57S2EoKTtpZXQ9TnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTtpZXQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOk5yKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTtzZD1pZXQsYkllPWlldC5yYW5nZX0pO3ZhciBKTz1NKCgpPT57bE90KCk7aE90KCk7cE90KCk7bU90KCk7X090KCk7U090KCk7RU90KCk7VE90KCk7QU90KCk7SU90KCk7a090KCk7Rk90KCk7SE90KCk7Vk90KCl9KTtmdW5jdGlvbiBvZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGFldChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiB5QyhlLHQscil7cmV0dXJue3k6ZSxtOnQsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gc2V0KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXZDKGkpLHU9eEMoaSksaD12QyhvKSxmPXhDKG8pLHA9dkMoYSksZD14QyhhKSxnPXZDKHMpLF89eEMocykseT12QyhsKSx4PXhDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOmpPdCxlOmpPdCxmOkdJZSxnOnQ5ZSxHOnI5ZSxIOlZJZSxJOlVJZSxqOnFJZSxMOkpPdCxtOldJZSxNOllJZSxwOnN0LHE6U3QsUTpLT3QsczpaT3QsUzpqSWUsdTpYSWUsVTokSWUsVjpLSWUsdzpaSWUsVzpKSWUseDpudWxsLFg6bnVsbCx5OlFJZSxZOmU5ZSxaOm45ZSwiJSI6JE90fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOlhPdCxlOlhPdCxmOnM5ZSxnOl85ZSxHOnY5ZSxIOmk5ZSxJOm85ZSxqOmE5ZSxMOnQ3dCxtOmw5ZSxNOmM5ZSxwOl90LHE6Y3QsUTpLT3QsczpaT3QsUzp1OWUsdTpoOWUsVTpmOWUsVjpwOWUsdzpkOWUsVzptOWUseDpudWxsLFg6bnVsbCx5Omc5ZSxZOnk5ZSxaOng5ZSwiJSI6JE90fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6V090LGU6V090LGY6ekllLGc6R090LEc6cU90LEg6WU90LEk6WU90LGo6UkllLEw6T0llLG06a0llLE06TkllLHA6RCxxOkxJZSxROkJJZSxzOkhJZSxTOkRJZSx1OlRJZSxVOkNJZSxWOkFJZSx3OkVJZSxXOlBJZSx4OnosWDpVLHk6R090LFk6cU90LFo6SUllLCIlIjpGSWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT1VT3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT15QygxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9YWV0KHlDKHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/YncuY2VpbChodCk6YncoaHQpLGh0PXh3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9b2V0KHlDKHEueSwwLDEpKSx3dD1odC5nZXREYXkoKSxodD13dD40fHx3dD09PTA/dncuY2VpbChodCk6dncoaHQpLGh0PXl3Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRGdWxsWWVhcigpLHEubT1odC5nZXRNb250aCgpLHEuZD1odC5nZXREYXRlKCkrKHEudys2KSU3KX1lbHNlKCJXImluIHF8fCJVImluIHEpJiYoInciaW4gcXx8KHEudz0idSJpbiBxP3EudSU3OiJXImluIHE/MTowKSx3dD0iWiJpbiBxP2FldCh5QyhxLnksMCwxKSkuZ2V0VVRDRGF5KCk6b2V0KHlDKHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYWV0KHEpKTpvZXQocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gVU90P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19ZnVuY3Rpb24gR3IoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gTUllKGUpe3JldHVybiBlLnJlcGxhY2UoU0llLCJcXCQmIil9ZnVuY3Rpb24gdkMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKE1JZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHhDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIEVJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBUSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEFJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElJZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWU90KGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE5JZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBESWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHpJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGSWUoZSx0LHIpe3ZhciBuPXdJZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEJJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEhJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGpPdChlLHQpe3JldHVybiBHcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIFZJZShlLHQpe3JldHVybiBHcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBVSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHFJZShlLHQpe3JldHVybiBHcigxK3l3LmNvdW50KGFkKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSk90KGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBHSWUoZSx0KXtyZXR1cm4gSk90KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gV0llKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gakllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gWEllKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiAkSWUoZSx0KXtyZXR1cm4gR3Ioc3YuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFPdChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD9rZyhlKTprZy5jZWlsKGUpfWZ1bmN0aW9uIEtJZShlLHQpe3JldHVybiBlPVFPdChlKSxHcihrZy5jb3VudChhZChlKSxlKSsoYWQoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIFpJZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBKSWUoZSx0KXtyZXR1cm4gR3IodncuY291bnQoYWQoZSktMSxlKSx0LDIpfWZ1bmN0aW9uIFFJZShlLHQpe3JldHVybiBHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdDllKGUsdCl7cmV0dXJuIGU9UU90KGUpLEdyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBlOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHI5ZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/a2coZSk6a2cuY2VpbChlKSxHcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gbjllKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrR3IodC82MHwwLCIwIiwyKStHcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBYT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBpOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gbzllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBhOWUoZSx0KXtyZXR1cm4gR3IoMSt4dy5jb3VudChzZChlKSxlKSx0LDMpfWZ1bmN0aW9uIHQ3dChlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gczllKGUsdCl7cmV0dXJuIHQ3dChlLHQpKyIwMDAifWZ1bmN0aW9uIGw5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGM5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIHU5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGg5ZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gZjllKGUsdCl7cmV0dXJuIEdyKGN2LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBlN3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/UmcoZSk6UmcuY2VpbChlKX1mdW5jdGlvbiBwOWUoZSx0KXtyZXR1cm4gZT1lN3QoZSksR3IoUmcuY291bnQoc2QoZSksZSkrKHNkKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBkOWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gbTllKGUsdCl7cmV0dXJuIEdyKGJ3LmNvdW50KHNkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBnOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIF85ZShlLHQpe3JldHVybiBlPWU3dChlKSxHcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24geTllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB2OWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1JnKGUpOlJnLmNlaWwoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHg5ZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gJE90KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEtPdChlKXtyZXR1cm4rZX1mdW5jdGlvbiBaT3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgVU90LFRvLHdJZSxTSWUscjd0PU0oKCk9PntKTygpO1VPdD17Ii0iOiIiLF86IiAiLDA6IjAifSxUbz0vXlxzKlxkKy8sd0llPS9eJS8sU0llPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGNldChlKXtyZXR1cm4gd3c9c2V0KGUpLFFPPXd3LmZvcm1hdCxuN3Q9d3cucGFyc2UsdDc9d3cudXRjRm9ybWF0LGk3dD13dy51dGNQYXJzZSx3d312YXIgd3csUU8sbjd0LHQ3LGk3dCxvN3Q9TSgoKT0+e3I3dCgpO2NldCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pfSk7dmFyIHVldD1NKCgpPT57bzd0KCl9KTtmdW5jdGlvbiB3OWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIFM5ZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBlNyhlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9aWQocEMseWYpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxiQ10sW2EsNSw1KmJDXSxbYSwxNSwxNSpiQ10sW2EsMzAsMzAqYkNdLFtvLDEsd0NdLFtvLDUsNSp3Q10sW28sMTUsMTUqd0NdLFtvLDMwLDMwKndDXSxbaSwxLFNDXSxbaSwzLDMqU0NdLFtpLDYsNipTQ10sW2ksMTIsMTIqU0NdLFtuLDEsTUNdLFtuLDIsMipNQ10sW3IsMSxiOWVdLFt0LDEsYTd0XSxbdCwzLDMqYTd0XSxbZSwxLGhldF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9YUMoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj1aeShPL2hldCxEL2hldCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KFp5KE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKHJ3LmNhbGwoayxTOWUpKTpoKCkubWFwKHc5ZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKEdPKEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyhjLGU3KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gczd0KCl7cmV0dXJuIGU3KGFkLFF0dCxzdix5dyxKdHQsWnR0LF93LG13LFFPKS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSl9dmFyIGJDLHdDLFNDLE1DLGI5ZSxhN3QsaGV0LGZldD1NKCgpPT57bWYoKTt1dygpO0pPKCk7dWV0KCk7Q2coKTtkQygpO1h0dCgpO2JDPTFlMyx3Qz1iQyo2MCxTQz13Qyo2MCxNQz1TQyoyNCxiOWU9TUMqNyxhN3Q9TUMqMzAsaGV0PU1DKjM2NX0pO2Z1bmN0aW9uIGw3dCgpe3JldHVybiBlNyhzZCxuZXQsY3YseHcscmV0LGVldCxfdyxtdyx0NykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pfXZhciBjN3Q9TSgoKT0+e2ZldCgpO3VldCgpO0pPKCl9KTtmdW5jdGlvbiBkbChlKXtyZXR1cm4gZS5tYXRjaCgvLns2fS9nKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIiMiK3R9KX12YXIgU3c9TSgoKT0+e30pO3ZhciB1N3QsaDd0PU0oKCk9PntTdygpO3U3dD1kbCgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIil9KTt2YXIgZjd0LHA3dD1NKCgpPT57U3coKTtmN3Q9ZGwoIjM5M2I3OTUyNTRhMzZiNmVjZjljOWVkZTYzNzkzOThjYTI1MmI1Y2Y2YmNlZGI5YzhjNmQzMWJkOWUzOWU3YmE1MmU3Y2I5NDg0M2MzOWFkNDk0YWQ2NjE2YmU3OTY5YzdiNDE3M2E1NTE5NGNlNmRiZGRlOWVkNiIpfSk7dmFyIGQ3dCxtN3Q9TSgoKT0+e1N3KCk7ZDd0PWRsKCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDkiKX0pO3ZhciBnN3QsXzd0PU0oKCk9PntTdygpO2c3dD1kbCgiMWY3N2I0YWVjN2U4ZmY3ZjBlZmZiYjc4MmNhMDJjOThkZjhhZDYyNzI4ZmY5ODk2OTQ2N2JkYzViMGQ1OGM1NjRiYzQ5Yzk0ZTM3N2MyZjdiNmQyN2Y3ZjdmYzdjN2M3YmNiZDIyZGJkYjhkMTdiZWNmOWVkYWU1Iil9KTt2YXIgeTd0LHY3dD1NKCgpPT57c3coKTt1dygpO3k3dD1jdygkYSgzMDAsLjUsMCksJGEoLTI0MCwuNSwxKSl9KTtmdW5jdGlvbiB3N3QoZSl7KGU8MHx8ZT4xKSYmKGUtPU1hdGguZmxvb3IoZSkpO3ZhciB0PU1hdGguYWJzKGUtLjUpO3JldHVybiByNy5oPTM2MCplLTEwMCxyNy5zPTEuNS0xLjUqdCxyNy5sPS44LS45KnQscjcrIiJ9dmFyIHg3dCxiN3QscjcsUzd0PU0oKCk9PntzdygpO3V3KCk7eDd0PWN3KCRhKC0xMDAsLjc1LC4zNSksJGEoODAsMS41LC44KSksYjd0PWN3KCRhKDI2MCwuNzUsLjM1KSwkYSg4MCwxLjUsLjgpKSxyNz0kYSgpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4odC0xLE1hdGguZmxvb3Iocip0KSkpXX19dmFyIE03dCxFN3QsVDd0LEM3dCxBN3Q9TSgoKT0+e1N3KCk7TTd0PW43KGRsKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksRTd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksVDd0PW43KGRsKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksQzd0PW43KGRsKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSl9KTtmdW5jdGlvbiBpNyhlKXt2YXIgdD0wLHI9MSxuPSExO2Z1bmN0aW9uIGkobyl7dmFyIGE9KG8tdCkvKHItdCk7cmV0dXJuIGUobj9NYXRoLm1heCgwLE1hdGgubWluKDEsYSkpOmEpfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rb1swXSxyPStvWzFdLGkpOlt0LHJdfSxpLmNsYW1wPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhbyxpKTpufSxpLmludGVycG9sYXRvcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBpNyhlKS5kb21haW4oW3Qscl0pLmNsYW1wKG4pfSxvZChpKX12YXIgUDd0PU0oKCk9PntwdygpfSk7dmFyIEk3dD1NKCgpPT57cU50KCk7WkR0KCk7cHcoKTtlT3QoKTt4dHQoKTtuT3QoKTtpT3QoKTtvT3QoKTthT3QoKTtmZXQoKTtjN3QoKTtoN3QoKTtwN3QoKTttN3QoKTtfN3QoKTt2N3QoKTtTN3QoKTtBN3QoKTtQN3QoKX0pO3ZhciBvNyxFQyxhNz1NKCgpPT57bzc9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEVDPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpvNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gTXcoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksRUMuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkVDW3RdLGxvY2FsOmV9OmV9dmFyIHM3PU0oKCk9PnthNygpfSk7ZnVuY3Rpb24gTTllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09bzcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PW83P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBFOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gTmcoZSl7dmFyIHQ9TXcoZSk7cmV0dXJuKHQubG9jYWw/RTllOk05ZSkodCl9dmFyIFRDPU0oKCk9PntzNygpO2E3KCl9KTtmdW5jdGlvbiBUOWUoKXt9ZnVuY3Rpb24gRXcoZSl7cmV0dXJuIGU9PW51bGw/VDllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIGw3PU0oKCk9Pnt9KTtmdW5jdGlvbiBMN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUV3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgQm4obix0aGlzLl9wYXJlbnRzKX12YXIgazd0PU0oKCk9PntTYygpO2w3KCl9KTtmdW5jdGlvbiBDOWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjNyhlKXtyZXR1cm4gZT09bnVsbD9DOWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcGV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBSN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBCbihuLGkpfXZhciBON3Q9TSgoKT0+e1NjKCk7cGV0KCl9KTt2YXIgTzd0LFR3LEQ3dCx1NyxkZXQ9TSgoKT0+e083dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX07dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFR3PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxUdy5tYXRjaGVzfHwoRDd0PVR3LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8VHcubXNNYXRjaGVzU2VsZWN0b3J8fFR3Lm1vek1hdGNoZXNTZWxlY3Rvcnx8VHcub01hdGNoZXNTZWxlY3RvcixPN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEQ3dC5jYWxsKHRoaXMsZSl9fSkpO3U3PU83dH0pO2Z1bmN0aW9uIHo3dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dTcoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEJuKG4sdGhpcy5fcGFyZW50cyl9dmFyIEY3dD1NKCgpPT57U2MoKTtkZXQoKX0pO2Z1bmN0aW9uIGg3KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBtZXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEI3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoaDcpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIENDKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBnZXQ9TSgoKT0+e21ldCgpO1NjKCk7Q0MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDQyxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIEg3dChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFY3dD1NKCgpPT57fSk7ZnVuY3Rpb24gQTllKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBDQyhlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUDllKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9VTd0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9VTd0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IENDKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gcTd0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9QOWU6QTllLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SDd0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBCbihhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIFU3dCxHN3Q9TSgoKT0+e1NjKCk7Z2V0KCk7Vjd0KCk7VTd0PSIkIn0pO2Z1bmN0aW9uIFc3dCgpe3JldHVybiBuZXcgQm4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChoNyksdGhpcy5fcGFyZW50cyl9dmFyIFk3dD1NKCgpPT57bWV0KCk7U2MoKX0pO2Z1bmN0aW9uIGo3dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgQm4oYSx0aGlzLl9wYXJlbnRzKX12YXIgWDd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gJDd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmbyE9PWEubmV4dFNpYmxpbmcmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciBLN3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFo3dChlKXtlfHwoZT1JOWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgQm4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIEk5ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgSjd0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gUTd0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB0enQ9TSgoKT0+e30pO2Z1bmN0aW9uIGV6dCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciByenQ9TSgoKT0+e30pO2Z1bmN0aW9uIG56dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIGl6dD1NKCgpPT57fSk7ZnVuY3Rpb24gb3p0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgYXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBzenQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGx6dD1NKCgpPT57fSk7ZnVuY3Rpb24gY3p0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgdXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGs5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFI5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE45ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBEOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIE85ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBoenQoZSx0KXt2YXIgcj1NdyhlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/azllOkw5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP085ZTpEOWU6ci5sb2NhbD9OOWU6UjllKShyLHQpKX12YXIgZnp0PU0oKCk9PntzNygpfSk7ZnVuY3Rpb24gQ3coZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBmNz1NKCgpPT57fSk7ZnVuY3Rpb24gejllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEY5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIEI5ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBwenQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3o5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9COWU6RjllKShlLHQscj09bnVsbD8iIjpyKSk6X2V0KHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIF9ldChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fEN3KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB5ZXQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBIOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gVTllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIGR6dChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0g5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9VOWU6VjllKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgbXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBnenQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIHZldChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBfenQoZSl9ZnVuY3Rpb24gX3p0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1nenQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiB5enQoZSx0KXtmb3IodmFyIHI9dmV0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gdnp0KGUsdCl7Zm9yKHZhciByPXZldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIHE5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt5enQodGhpcyxlKX19ZnVuY3Rpb24gRzllKGUpe3JldHVybiBmdW5jdGlvbigpe3Z6dCh0aGlzLGUpfX1mdW5jdGlvbiBXOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/eXp0OnZ6dCkodGhpcyxlKX19ZnVuY3Rpb24geHp0KGUsdCl7dmFyIHI9Z3p0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPXZldCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9XOWU6dD9xOWU6RzllKShyLHQpKX12YXIgYnp0PU0oKCk9PntfenQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gWTllKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBqOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBYOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHd6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9ZOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP1g5ZTpqOWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgU3p0PU0oKCk9Pnt9KTtmdW5jdGlvbiAkOWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBLOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gWjllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gTXp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsPyQ5ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/WjllOks5ZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgRXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gVHp0KCl7cmV0dXJuIHRoaXMuZWFjaChKOWUpfXZhciBDenQ9TSgoKT0+e30pO2Z1bmN0aW9uIFE5ZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEF6dCgpe3JldHVybiB0aGlzLmVhY2goUTllKX12YXIgUHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJenQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgTHp0PU0oKCk9PntUQygpfSk7ZnVuY3Rpb24gdExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24ga3p0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpOZyhlKSxuPXQ9PW51bGw/dExlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6RXcodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBSenQ9TSgoKT0+e1RDKCk7bDcoKX0pO2Z1bmN0aW9uIGVMZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIE56dCgpe3JldHVybiB0aGlzLmVhY2goZUxlKX12YXIgRHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByTGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmNsb25lTm9kZSghMSksdGhpcy5uZXh0U2libGluZyl9ZnVuY3Rpb24gbkxlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITApLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIE96dChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9uTGU6ckxlKX12YXIgenp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGenQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBCenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlMZShlLHQscil7cmV0dXJuIGU9VXp0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIFV6dChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPVB1O1B1PW47dHJ5e2UuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxyKX1maW5hbGx5e1B1PWl9fX1mdW5jdGlvbiBvTGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIGFMZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBzTGUoZSx0LHIpe3ZhciBuPVZ6dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP2lMZTpVenQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gcXp0KGUsdCxyKXt2YXIgbj1vTGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P3NMZTphTGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR3p0KGUsdCxyLG4pe3ZhciBpPVB1O2Uuc291cmNlRXZlbnQ9UHUsUHU9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e1B1PWl9fXZhciBWenQsUHUsSHp0LHA3PU0oKCk9PntWenQ9e30sUHU9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoSHp0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIEh6dHx8KFZ6dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBXenQoZSx0LHIpe3ZhciBuPUN3KGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGxMZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBXenQodGhpcyxlLHQpfX1mdW5jdGlvbiBjTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV3p0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIFl6dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2NMZTpsTGUpKGUsdCkpfXZhciBqenQ9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBCbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBYenQoKXtyZXR1cm4gbmV3IEJuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQUMpfXZhciBBQywkenQsU2M9TSgoKT0+e2s3dCgpO043dCgpO0Y3dCgpO0c3dCgpO2dldCgpO1k3dCgpO1g3dCgpO0s3dCgpO0o3dCgpO3R6dCgpO3J6dCgpO2l6dCgpO2F6dCgpO2x6dCgpO3V6dCgpO2Z6dCgpO3lldCgpO216dCgpO2J6dCgpO1N6dCgpO0V6dCgpO0N6dCgpO1B6dCgpO0x6dCgpO1J6dCgpO0R6dCgpO3p6dCgpO0J6dCgpO3A3KCk7anp0KCk7QUM9W251bGxdO0JuLnByb3RvdHlwZT1YenQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCbixzZWxlY3Q6TDd0LHNlbGVjdEFsbDpSN3QsZmlsdGVyOno3dCxkYXRhOnE3dCxlbnRlcjpCN3QsZXhpdDpXN3QsbWVyZ2U6ajd0LG9yZGVyOiQ3dCxzb3J0Olo3dCxjYWxsOlE3dCxub2RlczplenQsbm9kZTpuenQsc2l6ZTpvenQsZW1wdHk6c3p0LGVhY2g6Y3p0LGF0dHI6aHp0LHN0eWxlOnB6dCxwcm9wZXJ0eTpkenQsY2xhc3NlZDp4enQsdGV4dDp3enQsaHRtbDpNenQscmFpc2U6VHp0LGxvd2VyOkF6dCxhcHBlbmQ6SXp0LGluc2VydDprenQscmVtb3ZlOk56dCxjbG9uZTpPenQsZGF0dW06Rnp0LG9uOnF6dCxkaXNwYXRjaDpZenR9OyR6dD1YenR9KTtmdW5jdGlvbiBkNyhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBCbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEJuKFtbZV1dLEFDKX12YXIgeGV0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gS3p0KGUpe3JldHVybiBkNyhOZyhlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBaenQ9TSgoKT0+e1RDKCk7eGV0KCl9KTtmdW5jdGlvbiBtNygpe3JldHVybiBuZXcgYmV0fWZ1bmN0aW9uIGJldCgpe3RoaXMuXz0iQCIrKCsrdUxlKS50b1N0cmluZygzNil9dmFyIHVMZSxKenQ9TSgoKT0+e3VMZT0wO2JldC5wcm90b3R5cGU9bTcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiZXQsZ2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl87ISh0IGluIGUpOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIGVbdF19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiBlW3RoaXMuX109dH0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl8gaW4gZSYmZGVsZXRlIGVbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX19KTtmdW5jdGlvbiBBdygpe2Zvcih2YXIgZT1QdSx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBnNz1NKCgpPT57cDcoKX0pO2Z1bmN0aW9uIERnKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBDPU0oKCk9Pnt9KTtmdW5jdGlvbiBRenQoZSl7dmFyIHQ9QXcoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRGcoZSx0KX12YXIgdEZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBlRnQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgQm4oW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgQm4oW2U9PW51bGw/W106ZV0sQUMpfXZhciByRnQ9TSgoKT0+e1NjKCl9KTtmdW5jdGlvbiBuRnQoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PUF3KCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRGcoZSxvKTtyZXR1cm4gbnVsbH12YXIgaUZ0PU0oKCk9PntnNygpO1BDKCl9KTtmdW5jdGlvbiBvRnQoZSx0KXt0PT1udWxsJiYodD1BdygpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EZyhlLHRbcl0pO3JldHVybiBpfXZhciBhRnQ9TSgoKT0+e2c3KCk7UEMoKX0pO3ZhciBzRnQ9TSgoKT0+e1p6dCgpO1RDKCk7Snp0KCk7ZGV0KCk7dEZ0KCk7czcoKTthNygpO1BDKCk7eGV0KCk7ckZ0KCk7U2MoKTtsNygpO3BldCgpO3lldCgpO2lGdCgpO2FGdCgpO2Y3KCk7cDcoKX0pO2Z1bmN0aW9uIEVldCgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGxGdCgpe3JldHVybiBuZXcgRWV0fXZhciB3ZXQsTWV0LHV2LGhMZSxJdSxjRnQ9TSgoKT0+e3dldD1NYXRoLlBJLE1ldD0yKndldCx1dj0xZS02LGhMZT1NZXQtdXY7RWV0LnByb3RvdHlwZT1sRnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpFZXQsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPnV2KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+dXYpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigod2V0LU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnV2JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnV2fHxNYXRoLmFicyh0aGlzLl95MS1jKT51dikmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJU1ldCtNZXQpLGg+aExlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPnV2JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj13ZXQpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtJdT1sRnR9KTt2YXIgUHc9TSgoKT0+e2NGdCgpfSk7ZnVuY3Rpb24gR2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBPZz1NKCgpPT57fSk7ZnVuY3Rpb24gaEZ0KGUpe3JldHVybiBlPjE/MDplPC0xP2t1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBDZXQoZSl7cmV0dXJuIGU+PTE/SUM6ZTw9LTE/LUlDOk1hdGguYXNpbihlKX12YXIgVGV0LEhvLHpnLHVGdCxfNyxMdSxodixDbyxrdSxJQyxNYyxJdz1NKCgpPT57VGV0PU1hdGguYWJzLEhvPU1hdGguYXRhbjIsemc9TWF0aC5jb3MsdUZ0PU1hdGgubWF4LF83PU1hdGgubWluLEx1PU1hdGguc2luLGh2PU1hdGguc3FydCxDbz0xZS0xMixrdT1NYXRoLlBJLElDPWt1LzIsTWM9MiprdX0pO2Z1bmN0aW9uIGZMZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBwTGUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gZExlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24gbUxlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIGdMZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBfTGUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj0odSoodC1vKS1oKihlLWkpKS8oaCpsLXUqYyk7cmV0dXJuW2UrZipsLHQrZipjXX1mdW5jdGlvbiB5NyhlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9odihzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpodih1RnQoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIGZGdCgpe3ZhciBlPWZMZSx0PXBMZSxyPUdlKDApLG49bnVsbCxpPWRMZSxvPW1MZSxhPWdMZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JQyxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLUlDLGc9VGV0KGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1JdSgpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPkNvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5NYy1DbylzLm1vdmVUbyhmKnpnKHApLGYqTHUocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5DbyYmKHMubW92ZVRvKGgqemcoZCksaCpMdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPkNvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6aHYoaCpoK2YqZikpLEQ9XzcoVGV0KGYtaCkvMiwrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLEI9RCxJPUQsTCxSO2lmKE8+Q28pe3ZhciBGPUNldChPL2gqTHUoaykpLHo9Q2V0KE8vZipMdShrKSk7KEMtPUYqMik+Q28/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPkNvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKnpnKHkpLFc9ZipMdSh5KSxaPWgqemcoUykscnQ9aCpMdShTKTtpZihEPkNvKXt2YXIgb3Q9Zip6Zyh4KSxzdD1mKkx1KHgpLFN0PWgqemcoYiksYnQ9aCpMdShiKTtpZihnPGt1KXt2YXIgTXQ9Qz5Dbz9fTGUoVSxXLFN0LGJ0LG90LHN0LFoscnQpOltaLHJ0XSxsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL0x1KGhGdCgobHQqX3QrS3QqY3QpLyhodihsdCpsdCtLdCpLdCkqaHYoX3QqX3QrY3QqY3QpKSkvMiksZXQ9aHYoTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9XzcoRCwoaC1ldCkvKFgtMSkpLEk9XzcoRCwoZi1ldCkvKFgrMSkpfX1QPkNvP0k+Q28/KEw9eTcoU3QsYnQsVSxXLGYsSSxfKSxSPXk3KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEhvKFIueTExLFIueDExKSxIbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Q28pfHwhKEM+Q28pP3MubGluZVRvKFoscnQpOkI+Q28/KEw9eTcoWixydCxvdCxzdCxoLC1CLF8pLFI9eTcoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsSG8oTC55MDEsTC54MDEpLEhvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEhvKEwuY3krTC55MTEsTC5jeCtMLngxMSksSG8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLWt1LzI7cmV0dXJuW3pnKHUpKmMsTHUodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH12YXIgcEZ0PU0oKCk9PntQdygpO09nKCk7SXcoKX0pO2Z1bmN0aW9uIGRGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gRmcoZSl7cmV0dXJuIG5ldyBkRnQoZSl9dmFyIExDPU0oKCk9PntkRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7YnJlYWt9fX19KTtmdW5jdGlvbiBMdyhlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrdyhlKXtyZXR1cm4gZVsxXX12YXIgdjc9TSgoKT0+e30pO2Z1bmN0aW9uIFJ3KCl7dmFyIGU9THcsdD1rdyxyPUdlKCEwKSxuPW51bGwsaT1GZyxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9SXUoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9dmFyIHg3PU0oKCk9PntQdygpO09nKCk7TEMoKTt2NygpfSk7ZnVuY3Rpb24gYjcoKXt2YXIgZT1Mdyx0PW51bGwscj1HZSgwKSxuPWt3LGk9R2UoITApLG89bnVsbCxhPUZnLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9SXUoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiBSdygpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH12YXIgQWV0PU0oKCk9PntQdygpO09nKCk7TEMoKTt4NygpO3Y3KCl9KTtmdW5jdGlvbiBtRnQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIGdGdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0Z0KGUpe3JldHVybiBlfXZhciB5RnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZGdCgpe3ZhciBlPV9GdCx0PW1GdCxyPW51bGwsbj1HZSgwKSxpPUdlKE1jKSxvPUdlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oTWMsTWF0aC5tYXgoLU1jLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm99LGF9dmFyIHhGdD1NKCgpPT57T2coKTtnRnQoKTt5RnQoKTtJdygpfSk7ZnVuY3Rpb24gYkZ0KGUpe3RoaXMuX2N1cnZlPWV9ZnVuY3Rpb24gTncoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IGJGdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fXZhciB3NyxQZXQ9TSgoKT0+e0xDKCk7dzc9TncoRmcpO2JGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9jdXJ2ZS5wb2ludCh0Kk1hdGguc2luKGUpLHQqLU1hdGguY29zKGUpKX19fSk7ZnVuY3Rpb24gRHcoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoTncocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gSWV0KCl7cmV0dXJuIER3KFJ3KCkuY3VydmUodzcpKX12YXIgTGV0PU0oKCk9PntQZXQoKTt4NygpfSk7ZnVuY3Rpb24ga2V0KCl7dmFyIGU9YjcoKS5jdXJ2ZSh3NyksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBEdyhyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIER3KGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KGEpKTp0KCkuX2N1cnZlfSxlfXZhciB3RnQ9TSgoKT0+e1BldCgpO0FldCgpO0xldCgpfSk7ZnVuY3Rpb24gZnYoZSx0KXtyZXR1cm5bKHQ9K3QpKk1hdGguY29zKGUtPU1hdGguUEkvMiksdCpNYXRoLnNpbihlKV19dmFyIFJldD1NKCgpPT57fSk7dmFyIGtDLE5ldD1NKCgpPT57a0M9QXJyYXkucHJvdG90eXBlLnNsaWNlfSk7ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiB2TGUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIERldChlKXt2YXIgdD15TGUscj12TGUsbj1MdyxpPWt3LG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1rQy5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1JdSgpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHhMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIGJMZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIHdMZShlLHQscixuLGkpe3ZhciBvPWZ2KHQsciksYT1mdih0LHI9KHIraSkvMikscz1mdihuLHIpLGw9ZnYobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gU0Z0KCl7cmV0dXJuIERldCh4TGUpfWZ1bmN0aW9uIE1GdCgpe3JldHVybiBEZXQoYkxlKX1mdW5jdGlvbiBFRnQoKXt2YXIgZT1EZXQod0xlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBURnQ9TSgoKT0+e1B3KCk7TmV0KCk7T2coKTt2NygpO1JldCgpfSk7dmFyIFJDLE9ldD1NKCgpPT57SXcoKTtSQz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L2t1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsTWMpfX19KTt2YXIgUzcsemV0PU0oKCk9PntTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0LzUpLzI7ZS5tb3ZlVG8oLTMqciwtciksZS5saW5lVG8oLXIsLXIpLGUubGluZVRvKC1yLC0zKnIpLGUubGluZVRvKHIsLTMqciksZS5saW5lVG8ociwtciksZS5saW5lVG8oMypyLC1yKSxlLmxpbmVUbygzKnIsciksZS5saW5lVG8ocixyKSxlLmxpbmVUbyhyLDMqciksZS5saW5lVG8oLXIsMypyKSxlLmxpbmVUbygtcixyKSxlLmxpbmVUbygtMypyLHIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBDRnQsU0xlLE03LEZldD1NKCgpPT57Q0Z0PU1hdGguc3FydCguMzMzMzMzMzMzMzMzMzMzMyksU0xlPUNGdCoyLE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvU0xlKSxuPXIqQ0Z0O2UubW92ZVRvKDAsLXIpLGUubGluZVRvKG4sMCksZS5saW5lVG8oMCxyKSxlLmxpbmVUbygtbiwwKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgTUxlLEFGdCxFTGUsVExlLEU3LEJldD1NKCgpPT57SXcoKTtNTGU9Ljg5MDgxMzA5MTUyOTI4NTIsQUZ0PU1hdGguc2luKGt1LzEwKS9NYXRoLnNpbig3Kmt1LzEwKSxFTGU9TWF0aC5zaW4oTWMvMTApKkFGdCxUTGU9LU1hdGguY29zKE1jLzEwKSpBRnQsRTc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpNTGUpLG49RUxlKnIsaT1UTGUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPU1jKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19fSk7dmFyIFQ3LEhldD1NKCgpPT57VDc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19fSk7dmFyIFZldCxDNyxVZXQ9TSgoKT0+e1ZldD1NYXRoLnNxcnQoMyksQzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKFZldCozKSk7ZS5tb3ZlVG8oMCxyKjIpLGUubGluZVRvKC1WZXQqciwtciksZS5saW5lVG8oVmV0KnIsLXIpLGUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFYyxUYyxxZXQsQ0xlLEE3LEdldD1NKCgpPT57RWM9LS41LFRjPU1hdGguc3FydCgzKS8yLHFldD0xL01hdGguc3FydCgxMiksQ0xlPShxZXQvMisxKSozLEE3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvQ0xlKSxuPXIvMixpPXIqcWV0LG89bixhPXIqcWV0K3Iscz0tbyxsPWE7ZS5tb3ZlVG8obixpKSxlLmxpbmVUbyhvLGEpLGUubGluZVRvKHMsbCksZS5saW5lVG8oRWMqbi1UYyppLFRjKm4rRWMqaSksZS5saW5lVG8oRWMqby1UYyphLFRjKm8rRWMqYSksZS5saW5lVG8oRWMqcy1UYypsLFRjKnMrRWMqbCksZS5saW5lVG8oRWMqbitUYyppLEVjKmktVGMqbiksZS5saW5lVG8oRWMqbytUYyphLEVjKmEtVGMqbyksZS5saW5lVG8oRWMqcytUYypsLEVjKmwtVGMqcyksZS5jbG9zZVBhdGgoKX19fSk7ZnVuY3Rpb24gSUZ0KCl7dmFyIGU9R2UoUkMpLHQ9R2UoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1JdSgpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6R2UoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufXZhciBQRnQsTEZ0PU0oKCk9PntQdygpO09ldCgpO3pldCgpO0ZldCgpO0JldCgpO0hldCgpO1VldCgpO0dldCgpO09nKCk7UEZ0PVtSQyxTNyxNNyxUNyxFNyxDNyxBN119KTtmdW5jdGlvbiBDYygpe312YXIgTkM9TSgoKT0+e30pO2Z1bmN0aW9uIE93KGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBEQyhlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24ga0Z0KGUpe3JldHVybiBuZXcgREMoZSl9dmFyIE9DPU0oKCk9PntEQy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk93KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIFJGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gTkZ0KGUpe3JldHVybiBuZXcgUkZ0KGUpfXZhciBERnQ9TSgoKT0+e05DKCk7T0MoKTtSRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIE9GdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gekZ0KGUpe3JldHVybiBuZXcgT0Z0KGUpfXZhciBGRnQ9TSgoKT0+e09DKCk7T0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciByPSh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsbj0odGhpcy5feTArNCp0aGlzLl95MSt0KS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8ocixuKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhyLG4pO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6T3codGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19fSk7ZnVuY3Rpb24gQkZ0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IERDKGUpLHRoaXMuX2JldGE9dH12YXIgSEZ0LFZGdD1NKCgpPT57T0MoKTtCRnQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O0hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ9PT0xP25ldyBEQyhuKTpuZXcgQkZ0KG4sdCl9cmV0dXJuIHIuYmV0YT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC44NSl9KTtmdW5jdGlvbiB6dyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFA3KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn12YXIgVUZ0LHpDPU0oKCk9PntQNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6encodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtVRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgUDcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBJNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIHFGdCxXZXQ9TSgoKT0+e05DKCk7ekMoKTtJNy5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtxRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiBMNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIEdGdCxZZXQ9TSgoKT0+e3pDKCk7TDcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6encodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O0dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBMNyhuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKX0pO2Z1bmN0aW9uIEZDKGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5Dbyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Q28pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gV0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFlGdCxrNz1NKCgpPT57SXcoKTt6QygpO1dGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OkZDKHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07WUZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgV0Z0KG4sdCk6bmV3IFA3KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSl9KTtmdW5jdGlvbiBqRnQoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH12YXIgWEZ0LCRGdD1NKCgpPT57V2V0KCk7TkMoKTtrNygpO2pGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpDYyxhcmVhRW5kOkNjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1hGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGpGdChuLHQpOm5ldyBJNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gS0Z0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIFpGdCxKRnQ9TSgoKT0+e1lldCgpO2s3KCk7S0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpGQyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1pGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IEtGdChuLHQpOm5ldyBMNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gUUZ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB0QnQoZSl7cmV0dXJuIG5ldyBRRnQoZSl9dmFyIGVCdD1NKCgpPT57TkMoKTtRRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fX0pO2Z1bmN0aW9uIHJCdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gbkJ0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKHJCdChvKStyQnQoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBpQnQoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGpldChlLHQscil7dmFyIG49ZS5feDAsaT1lLl95MCxvPWUuX3gxLGE9ZS5feTEscz0oby1uKS8zO2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuK3MsaStzKnQsby1zLGEtcypyLG8sYSl9ZnVuY3Rpb24gUjcoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIG9CdChlKXt0aGlzLl9jb250ZXh0PW5ldyBhQnQoZSl9ZnVuY3Rpb24gYUJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBzQnQoZSl7cmV0dXJuIG5ldyBSNyhlKX1mdW5jdGlvbiBsQnQoZSl7cmV0dXJuIG5ldyBvQnQoZSl9dmFyIGNCdD1NKCgpPT57UjcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmpldCh0aGlzLHRoaXMuX3QwLGlCdCh0aGlzLHRoaXMuX3QwKSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3ZhciByPU5hTjtpZihlPStlLHQ9K3QsIShlPT09dGhpcy5feDEmJnQ9PT10aGlzLl95MSkpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsamV0KHRoaXMsaUJ0KHRoaXMscj1uQnQodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OmpldCh0aGlzLHRoaXMuX3QwLHI9bkJ0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07KG9CdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSNy5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbihlLHQpe1I3LnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsdCxlKX07YUJ0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19fSk7ZnVuY3Rpb24gaEJ0KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiB1QnQoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiBmQnQoZSl7cmV0dXJuIG5ldyBoQnQoZSl9dmFyIHBCdD1NKCgpPT57aEJ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3gsdD10aGlzLl95LHI9ZS5sZW5ndGg7aWYocilpZih0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGVbMF0sdFswXSk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZVswXSx0WzBdKSxyPT09Mil0aGlzLl9jb250ZXh0LmxpbmVUbyhlWzFdLHRbMV0pO2Vsc2UgZm9yKHZhciBuPXVCdChlKSxpPXVCdCh0KSxvPTAsYT0xO2E8cjsrK28sKythKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhuWzBdW29dLGlbMF1bb10sblsxXVtvXSxpWzFdW29dLGVbYV0sdFthXSk7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZyPT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5feC5wdXNoKCtlKSx0aGlzLl95LnB1c2goK3QpfX19KTtmdW5jdGlvbiBONyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9ZnVuY3Rpb24gZEJ0KGUpe3JldHVybiBuZXcgTjcoZSwuNSl9ZnVuY3Rpb24gbUJ0KGUpe3JldHVybiBuZXcgTjcoZSwwKX1mdW5jdGlvbiBnQnQoZSl7cmV0dXJuIG5ldyBONyhlLDEpfXZhciBfQnQ9TSgoKT0+e043LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fX0pO2Z1bmN0aW9uIFJ1KGUsdCl7aWYoKGE9ZS5sZW5ndGgpPjEpZm9yKHZhciByPTEsbixpLG89ZVt0WzBdXSxhLHM9by5sZW5ndGg7cjxhOysrcilmb3IoaT1vLG89ZVt0W3JdXSxuPTA7bjxzOysrbilvW25dWzFdKz1vW25dWzBdPWlzTmFOKGlbbl1bMV0pP2lbbl1bMF06aVtuXVsxXX12YXIgRnc9TSgoKT0+e30pO2Z1bmN0aW9uIE51KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn12YXIgQnc9TSgoKT0+e30pO2Z1bmN0aW9uIEFMZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIHlCdCgpe3ZhciBlPUdlKFtdKSx0PU51LHI9UnUsbj1BTGU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKGtDLmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP051OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2Uoa0MuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD9SdTpvLGkpOnJ9LGl9dmFyIHZCdD1NKCgpPT57TmV0KCk7T2coKTtGdygpO0J3KCl9KTtmdW5jdGlvbiB4QnQoZSx0KXtpZigobj1lLmxlbmd0aCk+MCl7Zm9yKHZhciByLG4saT0wLG89ZVswXS5sZW5ndGgsYTtpPG87KytpKXtmb3IoYT1yPTA7cjxuOysrcilhKz1lW3JdW2ldWzFdfHwwO2lmKGEpZm9yKHI9MDtyPG47KytyKWVbcl1baV1bMV0vPWF9UnUoZSx0KX19dmFyIGJCdD1NKCgpPT57RncoKX0pO2Z1bmN0aW9uIHdCdChlLHQpe2lmKChsPWUubGVuZ3RoKT4xKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+PTA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6aVswXT1hfXZhciBTQnQ9TSgoKT0+e30pO2Z1bmN0aW9uIE1CdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfVJ1KGUsdCl9fXZhciBFQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBUQnQoZSx0KXtpZighKCEoKGE9ZS5sZW5ndGgpPjApfHwhKChvPShpPWVbdFswXV0pLmxlbmd0aCk+MCkpKXtmb3IodmFyIHI9MCxuPTEsaSxvLGE7bjxvOysrbil7Zm9yKHZhciBzPTAsbD0wLGM9MDtzPGE7KytzKXtmb3IodmFyIHU9ZVt0W3NdXSxoPXVbbl1bMV18fDAsZj11W24tMV1bMV18fDAscD0oaC1mKS8yLGQ9MDtkPHM7KytkKXt2YXIgZz1lW3RbZF1dLF89Z1tuXVsxXXx8MCx5PWdbbi0xXVsxXXx8MDtwKz1fLXl9bCs9aCxjKz1wKmh9aVtuLTFdWzFdKz1pW24tMV1bMF09cixsJiYoci09Yy9sKX1pW24tMV1bMV0rPWlbbi0xXVswXT1yLFJ1KGUsdCl9fXZhciBDQnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBENyhlKXt2YXIgdD1lLm1hcChYZXQpO3JldHVybiBOdShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFhldChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9dmFyIE83PU0oKCk9PntCdygpfSk7ZnVuY3Rpb24gQUJ0KGUpe3JldHVybiBENyhlKS5yZXZlcnNlKCl9dmFyIFBCdD1NKCgpPT57TzcoKX0pO2Z1bmN0aW9uIElCdChlKXt2YXIgdD1lLmxlbmd0aCxyLG4saT1lLm1hcChYZXQpLG89TnUoZSkuc29ydChmdW5jdGlvbih1LGgpe3JldHVybiBpW2hdLWlbdV19KSxhPTAscz0wLGw9W10sYz1bXTtmb3Iocj0wO3I8dDsrK3Ipbj1vW3JdLGE8cz8oYSs9aVtuXSxsLnB1c2gobikpOihzKz1pW25dLGMucHVzaChuKSk7cmV0dXJuIGMucmV2ZXJzZSgpLmNvbmNhdChsKX12YXIgTEJ0PU0oKCk9PntCdygpO083KCl9KTtmdW5jdGlvbiBrQnQoZSl7cmV0dXJuIE51KGUpLnJldmVyc2UoKX12YXIgUkJ0PU0oKCk9PntCdygpfSk7dmFyIE5CdD1NKCgpPT57cEZ0KCk7QWV0KCk7eDcoKTt4RnQoKTt3RnQoKTtMZXQoKTtSZXQoKTtURnQoKTtMRnQoKTtPZXQoKTt6ZXQoKTtGZXQoKTtIZXQoKTtCZXQoKTtVZXQoKTtHZXQoKTtERnQoKTtGRnQoKTtPQygpO1ZGdCgpO1dldCgpO1lldCgpO3pDKCk7JEZ0KCk7SkZ0KCk7azcoKTtlQnQoKTtMQygpO2NCdCgpO3BCdCgpO19CdCgpO3ZCdCgpO2JCdCgpO1NCdCgpO0Z3KCk7RUJ0KCk7Q0J0KCk7TzcoKTtQQnQoKTtMQnQoKTtCdygpO1JCdCgpfSk7ZnVuY3Rpb24gU3IoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1pLGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIFNyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gJGV0LnNldFRpbWUoK28pLEtldC5zZXRUaW1lKCthKSxlKCRldCksZShLZXQpLE1hdGguZmxvb3IocigkZXQsS2V0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyICRldCxLZXQsZmE9TSgoKT0+eyRldD1uZXcgRGF0ZSxLZXQ9bmV3IERhdGV9KTt2YXIgejcsWmV0LEpldCxEQnQ9TSgoKT0+e2ZhKCk7ejc9U3IoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTt6Ny5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP1NyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOno3fTtaZXQ9ejcsSmV0PXo3LnJhbmdlfSk7dmFyIEJDLFBzLGJmLEY3LEI3LHdmPU0oKCk9PntCQz0xZTMsUHM9NmU0LGJmPTM2ZTUsRjc9ODY0ZTUsQjc9NjA0OGU1fSk7dmFyIE9CdCxRZXQsdHJ0LHpCdD1NKCgpPT57ZmEoKTt3ZigpO09CdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL0JDKSpCQyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqQkMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0JDfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRZXQ9T0J0LHRydD1PQnQucmFuZ2V9KTt2YXIgRkJ0LEJCdCxIQnQsVkJ0PU0oKCk9PntmYSgpO3dmKCk7RkJ0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvUHMpKlBzKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLEJCdD1GQnQsSEJ0PUZCdC5yYW5nZX0pO3ZhciBVQnQscUJ0LEdCdCxXQnQ9TSgoKT0+e2ZhKCk7d2YoKTtVQnQ9U3IoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpKlBzJWJmO3Q8MCYmKHQrPWJmKSxlLnNldFRpbWUoTWF0aC5mbG9vcigoK2UtdCkvYmYpKmJmK3QpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHFCdD1VQnQsR0J0PVVCdC5yYW5nZX0pO3ZhciBZQnQsakJ0LFhCdCwkQnQ9TSgoKT0+e2ZhKCk7d2YoKTtZQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqUHMpL0Y3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLGpCdD1ZQnQsWEJ0PVlCdC5yYW5nZX0pO2Z1bmN0aW9uIHB2KGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS9CN30pfXZhciBINyxlcnQscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsS0J0LFpCdCxKQnQsUUJ0LHRIdCxlSHQsckh0PU0oKCk9PntmYSgpO3dmKCk7SDc9cHYoMCksZXJ0PXB2KDEpLHJydD1wdigyKSxucnQ9cHYoMyksaXJ0PXB2KDQpLG9ydD1wdig1KSxhcnQ9cHYoNiksc3J0PUg3LnJhbmdlLEtCdD1lcnQucmFuZ2UsWkJ0PXJydC5yYW5nZSxKQnQ9bnJ0LnJhbmdlLFFCdD1pcnQucmFuZ2UsdEh0PW9ydC5yYW5nZSxlSHQ9YXJ0LnJhbmdlfSk7dmFyIG5IdCxpSHQsb0h0LGFIdD1NKCgpPT57ZmEoKTtuSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSksaUh0PW5IdCxvSHQ9bkh0LnJhbmdlfSk7dmFyIGxydCxzSHQsbEh0LGNIdD1NKCgpPT57ZmEoKTtscnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCl9KTtscnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOlNyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTtzSHQ9bHJ0LGxIdD1scnQucmFuZ2V9KTt2YXIgdUh0LGhIdCxmSHQscEh0PU0oKCk9PntmYSgpO3dmKCk7dUh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KlBzKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9Qc30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSksaEh0PXVIdCxmSHQ9dUh0LnJhbmdlfSk7dmFyIGRIdCxtSHQsZ0h0LF9IdD1NKCgpPT57ZmEoKTt3ZigpO2RIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KmJmKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9iZn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLG1IdD1kSHQsZ0h0PWRIdC5yYW5nZX0pO3ZhciB5SHQsdkh0LHhIdCxiSHQ9TSgoKT0+e2ZhKCk7d2YoKTt5SHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvRjd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksdkh0PXlIdCx4SHQ9eUh0LnJhbmdlfSk7ZnVuY3Rpb24gZHYoZSl7cmV0dXJuIFNyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvQjd9KX12YXIgVjcsY3J0LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LHdIdCxTSHQsTUh0LEVIdCxUSHQsQ0h0LEFIdD1NKCgpPT57ZmEoKTt3ZigpO1Y3PWR2KDApLGNydD1kdigxKSx1cnQ9ZHYoMiksaHJ0PWR2KDMpLGZydD1kdig0KSxwcnQ9ZHYoNSksZHJ0PWR2KDYpLG1ydD1WNy5yYW5nZSx3SHQ9Y3J0LnJhbmdlLFNIdD11cnQucmFuZ2UsTUh0PWhydC5yYW5nZSxFSHQ9ZnJ0LnJhbmdlLFRIdD1wcnQucmFuZ2UsQ0h0PWRydC5yYW5nZX0pO3ZhciBQSHQsSUh0LExIdCxrSHQ9TSgoKT0+e2ZhKCk7UEh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLElIdD1QSHQsTEh0PVBIdC5yYW5nZX0pO3ZhciBncnQsUkh0LE5IdCxESHQ9TSgoKT0+e2ZhKCk7Z3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7Z3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07Ukh0PWdydCxOSHQ9Z3J0LnJhbmdlfSk7dmFyIE9IdD1NKCgpPT57ZmEoKTtEQnQoKTt6QnQoKTtWQnQoKTtXQnQoKTskQnQoKTtySHQoKTthSHQoKTtjSHQoKTtwSHQoKTtfSHQoKTtiSHQoKTtBSHQoKTtrSHQoKTtESHQoKX0pO2Z1bmN0aW9uIHBhKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHBhKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gX3J0LnNldFRpbWUoK28pLHlydC5zZXRUaW1lKCthKSxlKF9ydCksZSh5cnQpLE1hdGguZmxvb3IocihfcnQseXJ0KSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIF9ydCx5cnQsbXY9TSgoKT0+e19ydD1uZXcgRGF0ZSx5cnQ9bmV3IERhdGV9KTt2YXIgVTcscTcsRzcsSEM9TSgoKT0+e1U3PTZlNCxxNz04NjRlNSxHNz02MDQ4ZTV9KTt2YXIgekh0LFc3LFBMZSxGSHQ9TSgoKT0+e212KCk7SEMoKTt6SHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL3E3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLFc3PXpIdCxQTGU9ekh0LnJhbmdlfSk7ZnVuY3Rpb24gZ3YoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqVTcpL0c3fSl9dmFyIFZDLEh3LEJIdCxISHQsVncsVkh0LFVIdCxxSHQsSUxlLExMZSxrTGUsUkxlLE5MZSxETGUsR0h0PU0oKCk9PnttdigpO0hDKCk7VkM9Z3YoMCksSHc9Z3YoMSksQkh0PWd2KDIpLEhIdD1ndigzKSxWdz1ndig0KSxWSHQ9Z3YoNSksVUh0PWd2KDYpLHFIdD1WQy5yYW5nZSxJTGU9SHcucmFuZ2UsTExlPUJIdC5yYW5nZSxrTGU9SEh0LnJhbmdlLFJMZT1Wdy5yYW5nZSxOTGU9Vkh0LnJhbmdlLERMZT1VSHQucmFuZ2V9KTt2YXIgdnJ0LF92LE9MZSxXSHQ9TSgoKT0+e212KCk7dnJ0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7dnJ0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpwYShmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07X3Y9dnJ0LE9MZT12cnQucmFuZ2V9KTt2YXIgWUh0LFk3LHpMZSxqSHQ9TSgoKT0+e212KCk7SEMoKTtZSHQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvcTd9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksWTc9WUh0LHpMZT1ZSHQucmFuZ2V9KTtmdW5jdGlvbiB5dihlKXtyZXR1cm4gcGEoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9HN30pfXZhciBVQyxVdyxYSHQsJEh0LHF3LEtIdCxaSHQsSkh0LEZMZSxCTGUsSExlLFZMZSxVTGUscUxlLFFIdD1NKCgpPT57bXYoKTtIQygpO1VDPXl2KDApLFV3PXl2KDEpLFhIdD15digyKSwkSHQ9eXYoMykscXc9eXYoNCksS0h0PXl2KDUpLFpIdD15dig2KSxKSHQ9VUMucmFuZ2UsRkxlPVV3LnJhbmdlLEJMZT1YSHQucmFuZ2UsSExlPSRIdC5yYW5nZSxWTGU9cXcucmFuZ2UsVUxlPUtIdC5yYW5nZSxxTGU9Wkh0LnJhbmdlfSk7dmFyIHhydCx2dixHTGUsdFZ0PU0oKCk9PnttdigpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3Z2PXhydCxHTGU9eHJ0LnJhbmdlfSk7dmFyIGVWdD1NKCgpPT57Rkh0KCk7R0h0KCk7V0h0KCk7akh0KCk7UUh0KCk7dFZ0KCl9KTtmdW5jdGlvbiBXTGUoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGo3KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHFDKGUpe3JldHVybnt5OmUsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIFlDKGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPUdDKGkpLHU9V0MoaSksaD1HQyhvKSxmPVdDKG8pLHA9R0MoYSksZD1XQyhhKSxnPUdDKHMpLF89V0MocykseT1HQyhsKSx4PVdDKGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOm9WdCxlOm9WdCxmOm1rZSxIOmZrZSxJOnBrZSxqOmRrZSxMOnVWdCxtOmdrZSxNOl9rZSxwOnN0LFE6bFZ0LHM6Y1Z0LFM6eWtlLHU6dmtlLFU6eGtlLFY6YmtlLHc6d2tlLFc6U2tlLHg6bnVsbCxYOm51bGwseTpNa2UsWTpFa2UsWjpUa2UsIiUiOnNWdH0sUz17YTpTdCxBOmJ0LGI6TXQsQjpsdCxjOm51bGwsZDphVnQsZTphVnQsZjpJa2UsSDpDa2UsSTpBa2UsajpQa2UsTDpoVnQsbTpMa2UsTTpra2UscDpLdCxROmxWdCxzOmNWdCxTOlJrZSx1Ok5rZSxVOkRrZSxWOk9rZSx3OnprZSxXOkZrZSx4Om51bGwsWDpudWxsLHk6QmtlLFk6SGtlLFo6VmtlLCIlIjpzVnR9LEM9e2E6QixBOkksYjpMLEI6UixjOkYsZDpuVnQsZTpuVnQsZjpsa2UsSDppVnQsSTppVnQsajppa2UsTDpza2UsbTpua2UsTTpva2UscDpELFE6dWtlLHM6aGtlLFM6YWtlLHU6S0xlLFU6WkxlLFY6SkxlLHc6JExlLFc6UUxlLHg6eixYOlUseTpla2UsWTp0a2UsWjpya2UsIiUiOmNrZX07Yi54PVAocixiKSxiLlg9UChuLGIpLGIuYz1QKHQsYiksUy54PVAocixTKSxTLlg9UChuLFMpLFMuYz1QKHQsUyk7ZnVuY3Rpb24gUChfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1bXSxkdD0tMSxxPTAscHQ9X3QubGVuZ3RoLGh0LHd0LGt0O2ZvcihYIGluc3RhbmNlb2YgRGF0ZXx8KFg9bmV3IERhdGUoK1gpKTsrK2R0PHB0OylfdC5jaGFyQ29kZUF0KGR0KT09PTM3JiYoZXQucHVzaChfdC5zbGljZShxLGR0KSksKHd0PXJWdFtodD1fdC5jaGFyQXQoKytkdCldKSE9bnVsbD9odD1fdC5jaGFyQXQoKytkdCk6d3Q9aHQ9PT0iZSI/IiAiOiIwIiwoa3Q9Y3RbaHRdKSYmKGh0PWt0KFgsd3QpKSxldC5wdXNoKGh0KSxxPWR0KzEpO3JldHVybiBldC5wdXNoKF90LnNsaWNlKHEsZHQpKSxldC5qb2luKCIiKX19ZnVuY3Rpb24gayhfdCxjdCl7cmV0dXJuIGZ1bmN0aW9uKFgpe3ZhciBldD1xQygxOTAwKSxkdD1PKGV0LF90LFgrPSIiLDApLHEscHQ7aWYoZHQhPVgubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGV0KXJldHVybiBuZXcgRGF0ZShldC5RKTtpZigicCJpbiBldCYmKGV0Lkg9ZXQuSCUxMitldC5wKjEyKSwiViJpbiBldCl7aWYoZXQuVjwxfHxldC5WPjUzKXJldHVybiBudWxsOyJ3ImluIGV0fHwoZXQudz0xKSwiWiJpbiBldD8ocT1qNyhxQyhldC55KSkscHQ9cS5nZXRVVENEYXkoKSxxPXB0PjR8fHB0PT09MD9Vdy5jZWlsKHEpOlV3KHEpLHE9WTcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldFVUQ0Z1bGxZZWFyKCksZXQubT1xLmdldFVUQ01vbnRoKCksZXQuZD1xLmdldFVUQ0RhdGUoKSsoZXQudys2KSU3KToocT1jdChxQyhldC55KSkscHQ9cS5nZXREYXkoKSxxPXB0PjR8fHB0PT09MD9Idy5jZWlsKHEpOkh3KHEpLHE9Vzcub2Zmc2V0KHEsKGV0LlYtMSkqNyksZXQueT1xLmdldEZ1bGxZZWFyKCksZXQubT1xLmdldE1vbnRoKCksZXQuZD1xLmdldERhdGUoKSsoZXQudys2KSU3KX1lbHNlKCJXImluIGV0fHwiVSJpbiBldCkmJigidyJpbiBldHx8KGV0Lnc9InUiaW4gZXQ/ZXQudSU3OiJXImluIGV0PzE6MCkscHQ9IloiaW4gZXQ/ajcocUMoZXQueSkpLmdldFVUQ0RheSgpOmN0KHFDKGV0LnkpKS5nZXREYXkoKSxldC5tPTAsZXQuZD0iVyJpbiBldD8oZXQudys2KSU3K2V0LlcqNy0ocHQrNSklNzpldC53K2V0LlUqNy0ocHQrNiklNyk7cmV0dXJuIloiaW4gZXQ/KGV0LkgrPWV0LlovMTAwfDAsZXQuTSs9ZXQuWiUxMDAsajcoZXQpKTpjdChldCl9fWZ1bmN0aW9uIE8oX3QsY3QsWCxldCl7Zm9yKHZhciBkdD0wLHE9Y3QubGVuZ3RoLHB0PVgubGVuZ3RoLGh0LHd0O2R0PHE7KXtpZihldD49cHQpcmV0dXJuLTE7aWYoaHQ9Y3QuY2hhckNvZGVBdChkdCsrKSxodD09PTM3KXtpZihodD1jdC5jaGFyQXQoZHQrKyksd3Q9Q1todCBpbiByVnQ/Y3QuY2hhckF0KGR0KyspOmh0XSwhd3R8fChldD13dChfdCxYLGV0KSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1YLmNoYXJDb2RlQXQoZXQrKykpcmV0dXJuLTF9cmV0dXJuIGV0fWZ1bmN0aW9uIEQoX3QsY3QsWCl7dmFyIGV0PWMuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5wPXVbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEIoX3QsY3QsWCl7dmFyIGV0PXAuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWRbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEkoX3QsY3QsWCl7dmFyIGV0PWguZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC53PWZbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEwoX3QsY3QsWCl7dmFyIGV0PXkuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPXhbZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFIoX3QsY3QsWCl7dmFyIGV0PWcuZXhlYyhjdC5zbGljZShYKSk7cmV0dXJuIGV0PyhfdC5tPV9bZXRbMF0udG9Mb3dlckNhc2UoKV0sWCtldFswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEYoX3QsY3QsWCl7cmV0dXJuIE8oX3QsdCxjdCxYKX1mdW5jdGlvbiB6KF90LGN0LFgpe3JldHVybiBPKF90LHIsY3QsWCl9ZnVuY3Rpb24gVShfdCxjdCxYKXtyZXR1cm4gTyhfdCxuLGN0LFgpfWZ1bmN0aW9uIFcoX3Qpe3JldHVybiBhW190LmdldERheSgpXX1mdW5jdGlvbiBaKF90KXtyZXR1cm4gb1tfdC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoX3Qpe3JldHVybiBsW190LmdldE1vbnRoKCldfWZ1bmN0aW9uIG90KF90KXtyZXR1cm4gc1tfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KF90KXtyZXR1cm4gYVtfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gYnQoX3Qpe3JldHVybiBvW190LmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChfdCl7cmV0dXJuIGxbX3QuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbHQoX3Qpe3JldHVybiBzW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KF90KXtyZXR1cm4gaVsrKF90LmdldFVUQ0hvdXJzKCk+PTEyKV19cmV0dXJue2Zvcm1hdDpmdW5jdGlvbihfdCl7dmFyIGN0PVAoX3QrPSIiLGIpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9LHBhcnNlOmZ1bmN0aW9uKF90KXt2YXIgY3Q9ayhfdCs9IiIsV0xlKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixTKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSx1dGNQYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QsajcpO3JldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBfdH0sY3R9fX1mdW5jdGlvbiBnbihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiBYTGUoZSl7cmV0dXJuIGUucmVwbGFjZShqTGUsIlxcJCYiKX1mdW5jdGlvbiBHQyhlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAoWExlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV0MoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gJExlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEtMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBaTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSkxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFFMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB0a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmtlKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbmtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlWdChlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBva2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHNrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gY2tlKGUsdCxyKXt2YXIgbj1ZTGUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiB1a2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBoa2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSoxZTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gZmtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIHBrZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gZGtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQoX3YoZSksZSksdCwzKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIG1rZShlLHQpe3JldHVybiB1VnQoZSx0KSsiMDAwIn1mdW5jdGlvbiBna2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBfa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiB5a2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB2a2UoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIHhrZShlLHQpe3JldHVybiBnbihWQy5jb3VudChfdihlKSxlKSx0LDIpfWZ1bmN0aW9uIGJrZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/VncoZSk6VncuY2VpbChlKSxnbihWdy5jb3VudChfdihlKSxlKSsoX3YoZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIHdrZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBTa2UoZSx0KXtyZXR1cm4gZ24oSHcuY291bnQoX3YoZSksZSksdCwyKX1mdW5jdGlvbiBNa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEVrZShlLHQpe3JldHVybiBnbihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gVGtlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrZ24odC82MHwwLCIwIiwyKStnbih0JTYwLCIwIiwyKX1mdW5jdGlvbiBhVnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBDa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gQWtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBQa2UoZSx0KXtyZXR1cm4gZ24oMStZNy5jb3VudCh2dihlKSxlKSx0LDMpfWZ1bmN0aW9uIGhWdChlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gSWtlKGUsdCl7cmV0dXJuIGhWdChlLHQpKyIwMDAifWZ1bmN0aW9uIExrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGtrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIFJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIE5rZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gRGtlKGUsdCl7cmV0dXJuIGduKFVDLmNvdW50KHZ2KGUpLGUpLHQsMil9ZnVuY3Rpb24gT2tlKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9xdyhlKTpxdy5jZWlsKGUpLGduKHF3LmNvdW50KHZ2KGUpLGUpKyh2dihlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gemtlKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIEZrZShlLHQpe3JldHVybiBnbihVdy5jb3VudCh2dihlKSxlKSx0LDIpfWZ1bmN0aW9uIEJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gSGtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBWa2UoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHNWdCgpe3JldHVybiIlIn1mdW5jdGlvbiBsVnQoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gY1Z0KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIHJWdCxWbyxZTGUsakxlLGJydD1NKCgpPT57ZVZ0KCk7clZ0PXsiLSI6IiIsXzoiICIsMDoiMCJ9LFZvPS9eXHMqXGQrLyxZTGU9L14lLyxqTGU9L1tcXF4kKis/fFtcXSgpLnt9XS9nfSk7ZnVuY3Rpb24gWDcoZSl7cmV0dXJuIEd3PVlDKGUpLHdydD1Hdy5mb3JtYXQsU3J0PUd3LnBhcnNlLGpDPUd3LnV0Y0Zvcm1hdCxYQz1Hdy51dGNQYXJzZSxHd312YXIgR3csd3J0LFNydCxqQyxYQywkNz1NKCgpPT57YnJ0KCk7WDcoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO2Z1bmN0aW9uIFVrZShlKXtyZXR1cm4gZS50b0lTT1N0cmluZygpfXZhciBNcnQscWtlLGZWdCxFcnQ9TSgoKT0+eyQ3KCk7TXJ0PSIlWS0lbS0lZFQlSDolTTolUy4lTFoiO3FrZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9Va2U6akMoTXJ0KSxmVnQ9cWtlfSk7ZnVuY3Rpb24gR2tlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFdrZSxwVnQsZFZ0PU0oKCk9PntFcnQoKTskNygpO1drZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP0drZTpYQyhNcnQpLHBWdD1Xa2V9KTt2YXIgbVZ0PU0oKCk9PnskNygpO2JydCgpO0VydCgpO2RWdCgpfSk7ZnVuY3Rpb24gWXcoKXtyZXR1cm4geHZ8fCh5VnQoWWtlKSx4dj1KQy5ub3coKStKNyl9ZnVuY3Rpb24gWWtlKCl7eHY9MH1mdW5jdGlvbiBidigpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gQ3J0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBBcnQoKXtZdygpLCsrV3c7Zm9yKHZhciBlPUs3LHQ7ZTspKHQ9eHYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLVd3fWZ1bmN0aW9uIGdWdCgpe3h2PShaNz1KQy5ub3coKSkrSjcsV3c9S0M9MDt0cnl7QXJ0KCl9ZmluYWxseXtXdz0wLFhrZSgpLHh2PTB9fWZ1bmN0aW9uIGprZSgpe3ZhciBlPUpDLm5vdygpLHQ9ZS1aNzt0Pl9WdCYmKEo3LT10LFo3PWUpfWZ1bmN0aW9uIFhrZSgpe2Zvcih2YXIgZSx0PUs3LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOks3PXIpO1pDPWUsVHJ0KG4pfWZ1bmN0aW9uIFRydChlKXtpZighV3cpe0tDJiYoS0M9Y2xlYXJUaW1lb3V0KEtDKSk7dmFyIHQ9ZS14djt0PjI0PyhlPDEvMCYmKEtDPXNldFRpbWVvdXQoZ1Z0LGUtSkMubm93KCktSjcpKSwkQyYmKCRDPWNsZWFySW50ZXJ2YWwoJEMpKSk6KCRDfHwoWjc9SkMubm93KCksJEM9c2V0SW50ZXJ2YWwoamtlLF9WdCkpLFd3PTEseVZ0KGdWdCkpfX12YXIgV3csS0MsJEMsX1Z0LEs3LFpDLFo3LHh2LEo3LEpDLHlWdCxRNz1NKCgpPT57V3c9MCxLQz0wLCRDPTAsX1Z0PTFlMyxaNz0wLHh2PTAsSjc9MCxKQz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx5VnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07YnYucHJvdG90eXBlPUNydC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJ2LHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9ZdygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmWkMhPT10aGlzJiYoWkM/WkMuX25leHQ9dGhpczpLNz10aGlzLFpDPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsVHJ0KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFRydCgpKX19fSk7ZnVuY3Rpb24gdlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnY7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgeFZ0PU0oKCk9PntRNygpfSk7ZnVuY3Rpb24gYlZ0KGUsdCxyKXt2YXIgbj1uZXcgYnYsaT10O3JldHVybiB0PT1udWxsPyhuLnJlc3RhcnQoZSx0LHIpLG4pOih0PSt0LHI9cj09bnVsbD9ZdygpOityLG4ucmVzdGFydChmdW5jdGlvbiBvKGEpe2ErPWksbi5yZXN0YXJ0KG8saSs9dCxyKSxlKGEpfSx0LHIpLG4pfXZhciB3VnQ9TSgoKT0+e1E3KCl9KTt2YXIgU1Z0PU0oKCk9PntRNygpO3hWdCgpO3dWdCgpfSk7dmFyIHR6LFBydCxJcnQ9TSgoKT0+e3R6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixQcnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOnR6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBsZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxQcnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOlBydFt0XSxsb2NhbDplfTplfXZhciBlej1NKCgpPT57SXJ0KCl9KTtmdW5jdGlvbiAka2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT10eiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09dHo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIEtrZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiByeihlKXt2YXIgdD1sZChlKTtyZXR1cm4odC5sb2NhbD9La2U6JGtlKSh0KX12YXIgTHJ0PU0oKCk9PntleigpO0lydCgpfSk7ZnVuY3Rpb24gWmtlKCl7fWZ1bmN0aW9uIHd2KGUpe3JldHVybiBlPT1udWxsP1prZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBuej1NKCgpPT57fSk7ZnVuY3Rpb24gTVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13dihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIEVWdD1NKCgpPT57U2YoKTtueigpfSk7ZnVuY3Rpb24gSmtlKCl7cmV0dXJuW119ZnVuY3Rpb24gUUMoZSl7cmV0dXJuIGU9PW51bGw/SmtlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGtydD1NKCgpPT57fSk7ZnVuY3Rpb24gVFZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1RQyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgbm8obixpKX12YXIgQ1Z0PU0oKCk9PntTZigpO2tydCgpfSk7ZnVuY3Rpb24gdEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIFJydD1NKCgpPT57fSk7ZnVuY3Rpb24gQVZ0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgbm8obix0aGlzLl9wYXJlbnRzKX12YXIgUFZ0PU0oKCk9PntTZigpO1JydCgpfSk7ZnVuY3Rpb24gaXooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIE5ydD1NKCgpPT57fSk7ZnVuY3Rpb24gSVZ0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChpeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gZUEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIERydD1NKCgpPT57TnJ0KCk7U2YoKTtlQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gTFZ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIga1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBRa2UoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGVBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB0OGUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1SVnQrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1SVnQrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgZUEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBOVnQoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3Q4ZTpRa2Usbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1MVnQoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IG5vKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgUlZ0LERWdD1NKCgpPT57U2YoKTtEcnQoKTtrVnQoKTtSVnQ9IiQifSk7ZnVuY3Rpb24gT1Z0KCl7cmV0dXJuIG5ldyBubyh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKGl6KSx0aGlzLl9wYXJlbnRzKX12YXIgelZ0PU0oKCk9PntOcnQoKTtTZigpfSk7ZnVuY3Rpb24gRlZ0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBCVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEhWdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgbm8oYSx0aGlzLl9wYXJlbnRzKX12YXIgVlZ0PU0oKCk9PntTZigpfSk7ZnVuY3Rpb24gVVZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgcVZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBHVnQoZSl7ZXx8KGU9ZThlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IG5vKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBlOGUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFdWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIFlWdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgalZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVnQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgJFZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLVnQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBaVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpWdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIFFWdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFV0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBlVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHJVdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIG5VdD1NKCgpPT57fSk7ZnVuY3Rpb24gcjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBuOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBpOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBvOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gYThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBzOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gaVV0KGUsdCl7dmFyIHI9bGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP244ZTpyOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9zOGU6YThlOnIubG9jYWw/bzhlOmk4ZSkocix0KSl9dmFyIG9VdD1NKCgpPT57ZXooKX0pO2Z1bmN0aW9uIG96KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgT3J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gYzhlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gdThlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIGFVdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/bDhlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3U4ZTpjOGUpKGUsdCxyPT1udWxsPyIiOnIpKTpCZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBCZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fG96KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciB6cnQ9TSgoKT0+e09ydCgpfSk7ZnVuY3Rpb24gaDhlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBmOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHA4ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBzVXQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9oOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/cDhlOmY4ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGxVdD1NKCgpPT57fSk7ZnVuY3Rpb24gY1V0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBGcnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgdVV0KGUpfWZ1bmN0aW9uIHVVdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9Y1V0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gaFV0KGUsdCl7Zm9yKHZhciByPUZydChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIGZVdChlLHQpe2Zvcih2YXIgcj1GcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBkOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aFV0KHRoaXMsZSl9fWZ1bmN0aW9uIG04ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtmVXQodGhpcyxlKX19ZnVuY3Rpb24gZzhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP2hVdDpmVXQpKHRoaXMsZSl9fWZ1bmN0aW9uIHBVdChlLHQpe3ZhciByPWNVdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1GcnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZzhlOnQ/ZDhlOm04ZSkocix0KSl9dmFyIGRVdD1NKCgpPT57dVV0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIF84ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24geThlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gdjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBtVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/XzhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj92OGU6eThlKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIGdVdD1NKCgpPT57fSk7ZnVuY3Rpb24geDhlKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gYjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIHc4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIF9VdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD94OGU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3c4ZTpiOGUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIHlVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUzhlKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIHZVdCgpe3JldHVybiB0aGlzLmVhY2goUzhlKX12YXIgeFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBNOGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBiVXQoKXtyZXR1cm4gdGhpcy5lYWNoKE04ZSl9dmFyIHdVdD1NKCgpPT57fSk7ZnVuY3Rpb24gU1V0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6cnooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE1VdD1NKCgpPT57THJ0KCl9KTtmdW5jdGlvbiBFOGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBFVXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOnJ6KGUpLG49dD09bnVsbD9FOGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDp3dih0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIFRVdD1NKCgpPT57THJ0KCk7bnooKX0pO2Z1bmN0aW9uIFQ4ZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIENVdCgpe3JldHVybiB0aGlzLmVhY2goVDhlKX12YXIgQVV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEE4ZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gUFV0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0E4ZTpDOGUpfXZhciBJVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIExVdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIGtVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUDhlKGUsdCxyKXtyZXR1cm4gZT1EVXQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gRFV0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9QnJ0O0JydD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtCcnQ9aX19fWZ1bmN0aW9uIEk4ZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gTDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIGs4ZShlLHQscil7dmFyIG49TlV0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UDhlOkRVdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBPVXQoZSx0LHIpe3ZhciBuPUk4ZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/azhlOkw4ZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc312YXIgTlV0LEJydCxSVXQselV0PU0oKCk9PntOVXQ9e30sQnJ0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFJVdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBSVXR8fChOVXQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gRlV0KGUsdCxyKXt2YXIgbj1veihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBSOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRlV0KHRoaXMsZSx0KX19ZnVuY3Rpb24gTjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZVdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBCVXQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9OOGU6UjhlKShlLHQpKX12YXIgSFV0PU0oKCk9PntPcnQoKX0pO2Z1bmN0aW9uIG5vKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFZVdCgpe3JldHVybiBuZXcgbm8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxEOGUpfXZhciBEOGUsY2QsU2Y9TSgoKT0+e0VWdCgpO0NWdCgpO1BWdCgpO0RWdCgpO0RydCgpO3pWdCgpO0JWdCgpO1ZWdCgpO3FWdCgpO1dWdCgpO2pWdCgpOyRWdCgpO1pWdCgpO1FWdCgpO2VVdCgpO25VdCgpO29VdCgpO3pydCgpO2xVdCgpO2RVdCgpO2dVdCgpO3lVdCgpO3hVdCgpO3dVdCgpO01VdCgpO1RVdCgpO0FVdCgpO0lVdCgpO2tVdCgpO3pVdCgpO0hVdCgpO0Q4ZT1bbnVsbF07bm8ucHJvdG90eXBlPVZVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5vLHNlbGVjdDpNVnQsc2VsZWN0QWxsOlRWdCxmaWx0ZXI6QVZ0LGRhdGE6TlZ0LGVudGVyOklWdCxleGl0Ok9WdCxqb2luOkZWdCxtZXJnZTpIVnQsb3JkZXI6VVZ0LHNvcnQ6R1Z0LGNhbGw6WVZ0LG5vZGVzOlhWdCxub2RlOktWdCxzaXplOkpWdCxlbXB0eTp0VXQsZWFjaDpyVXQsYXR0cjppVXQsc3R5bGU6YVV0LHByb3BlcnR5OnNVdCxjbGFzc2VkOnBVdCx0ZXh0Om1VdCxodG1sOl9VdCxyYWlzZTp2VXQsbG93ZXI6YlV0LGFwcGVuZDpTVXQsaW5zZXJ0OkVVdCxyZW1vdmU6Q1V0LGNsb25lOlBVdCxkYXR1bTpMVXQsb246T1V0LGRpc3BhdGNoOkJVdH07Y2Q9VlV0fSk7dmFyIE1mPU0oKCk9PntScnQoKTtleigpO1NmKCk7bnooKTtrcnQoKTt6cnQoKX0pO2Z1bmN0aW9uIHFVdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBheihyKX1mdW5jdGlvbiBheihlKXt0aGlzLl89ZX1mdW5jdGlvbiB6OGUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBGOGUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBVVXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPU84ZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIE84ZSxIcnQsR1V0PU0oKCk9PntPOGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07YXoucHJvdG90eXBlPXFVdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF6LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fLG49ejhlKGUrIiIsciksaSxvPS0xLGE9bi5sZW5ndGg7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IoOysrbzxhOylpZigoaT0oZT1uW29dKS50eXBlKSYmKGk9RjhlKHJbaV0sZS5uYW1lKSkpcmV0dXJuIGk7cmV0dXJufWlmKHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxhOylpZihpPShlPW5bb10pLnR5cGUpcltpXT1VVXQocltpXSxlLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihpIGluIHIpcltpXT1VVXQocltpXSxlLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgZT17fSx0PXRoaXMuXztmb3IodmFyIHIgaW4gdCllW3JdPXRbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IGF6KGUpfSxjYWxsOmZ1bmN0aW9uKGUsdCl7aWYoKGk9YXJndW1lbnRzLmxlbmd0aC0yKT4wKWZvcih2YXIgcj1uZXcgQXJyYXkoaSksbj0wLGksbztuPGk7KytuKXJbbl09YXJndW1lbnRzW24rMl07aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3Iobz10aGlzLl9bZV0sbj0wLGk9by5sZW5ndGg7bjxpOysrbilvW25dLnZhbHVlLmFwcGx5KHQscil9LGFwcGx5OmZ1bmN0aW9uKGUsdCxyKXtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2Zvcih2YXIgbj10aGlzLl9bZV0saT0wLG89bi5sZW5ndGg7aTxvOysraSluW2ldLnZhbHVlLmFwcGx5KHQscil9fTtIcnQ9cVV0fSk7dmFyIFdVdD1NKCgpPT57R1V0KCl9KTtmdW5jdGlvbiBYdygpe3JldHVybiBTdnx8KFhVdChCOGUpLFN2PW9BLm5vdygpK2N6KX1mdW5jdGlvbiBCOGUoKXtTdj0wfWZ1bmN0aW9uIGFBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IGFBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gJFV0KCl7WHcoKSwrK2p3O2Zvcih2YXIgZT1zeix0O2U7KSh0PVN2LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1qd31mdW5jdGlvbiBZVXQoKXtTdj0obHo9b0Eubm93KCkpK2N6LGp3PW5BPTA7dHJ5eyRVdCgpfWZpbmFsbHl7anc9MCxWOGUoKSxTdj0wfX1mdW5jdGlvbiBIOGUoKXt2YXIgZT1vQS5ub3coKSx0PWUtbHo7dD5qVXQmJihjei09dCxsej1lKX1mdW5jdGlvbiBWOGUoKXtmb3IodmFyIGUsdD1zeixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpzej1yKTtpQT1lLFZydChuKX1mdW5jdGlvbiBWcnQoZSl7aWYoIWp3KXtuQSYmKG5BPWNsZWFyVGltZW91dChuQSkpO3ZhciB0PWUtU3Y7dD4yND8oZTwxLzAmJihuQT1zZXRUaW1lb3V0KFlVdCxlLW9BLm5vdygpLWN6KSksckEmJihyQT1jbGVhckludGVydmFsKHJBKSkpOihyQXx8KGx6PW9BLm5vdygpLHJBPXNldEludGVydmFsKEg4ZSxqVXQpKSxqdz0xLFhVdChZVXQpKX19dmFyIGp3LG5BLHJBLGpVdCxzeixpQSxseixTdixjeixvQSxYVXQsVXJ0PU0oKCk9Pntqdz0wLG5BPTAsckE9MCxqVXQ9MWUzLGx6PTAsU3Y9MCxjej0wLG9BPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFhVdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthQS5wcm90b3R5cGU9dXoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WHcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlBIT09dGhpcyYmKGlBP2lBLl9uZXh0PXRoaXM6c3o9dGhpcyxpQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLFZydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxWcnQoKSl9fX0pO2Z1bmN0aW9uIGh6KGUsdCxyKXt2YXIgbj1uZXcgYUE7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgS1V0PU0oKCk9PntVcnQoKX0pO3ZhciBxcnQ9TSgoKT0+e1VydCgpO0tVdCgpfSk7ZnVuY3Rpb24gSGcoZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtHOGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlU4ZSx0d2VlbjpxOGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6SlV0fSl9ZnVuY3Rpb24gY0EoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+SlV0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gRHUoZSx0KXt2YXIgcj1pbyhlLHQpO2lmKHIuc3RhdGU+bEEpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzdGFydGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gaW8oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBHOGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9dXoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPWZ6LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09ZnopcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT1HcnQpcmV0dXJuIGh6KGEpO3Auc3RhdGU9PT1aVXQ/KHAuc3RhdGU9c0EscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zQSxwLnRpbWVyLnN0b3AoKSxkZWxldGUgblt1XSl9aWYoaHooZnVuY3Rpb24oKXtyLnN0YXRlPT09R3J0JiYoci5zdGF0ZT1aVXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1sQSxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09bEEpe2ZvcihyLnN0YXRlPUdydCxpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1weiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChudWxsLHUpO3Iuc3RhdGU9PT1weiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPXNBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBVOGUscThlLEpVdCxmeixsQSxHcnQsWlV0LHB6LHNBLEFjPU0oKCk9PntXVXQoKTtxcnQoKTtVOGU9SHJ0KCJzdGFydCIsImVuZCIsImludGVycnVwdCIpLHE4ZT1bXSxKVXQ9MCxmej0xLGxBPTIsR3J0PTMsWlV0PTQscHo9NSxzQT02fSk7ZnVuY3Rpb24gZHooZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+bEEmJm4uc3RhdGU8cHosbi5zdGF0ZT1zQSxuLnRpbWVyLnN0b3AoKSxpJiZuLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgV3J0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gUVV0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkeih0aGlzLGUpfSl9dmFyIHRxdD1NKCgpPT57V3J0KCl9KTtmdW5jdGlvbiBteihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gWXJ0KGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciBlcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZBKCl7fWZ1bmN0aW9uIG5xdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEo4ZSgpe3JldHVybiBjcXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gaXF0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVmcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9VzhlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/b3F0KHQpOnI9PT0zP25ldyBtbCh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/Z3oodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/Z3oodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1ZOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0sdFsyXSx0WzNdLDEpOih0PWo4ZS5leGVjKGUpKT9uZXcgbWwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9WDhlLmV4ZWMoZSkpP2d6KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PSQ4ZS5leGVjKGUpKT9neih0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1LOGUuZXhlYyhlKSk/bHF0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9WjhlLmV4ZWMoZSkpP2xxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOnJxdC5oYXNPd25Qcm9wZXJ0eShlKT9vcXQocnF0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgbWwoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBvcXQoZSl7cmV0dXJuIG5ldyBtbChlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gZ3ooZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBtbChlLHQscixuKX1mdW5jdGlvbiBROGUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBmQXx8KGU9VmcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgbWwoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IG1sfWZ1bmN0aW9uIEt3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9ROGUoZSk6bmV3IG1sKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBtbChlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gYXF0KCl7cmV0dXJuIiMiK2pydCh0aGlzLnIpK2pydCh0aGlzLmcpK2pydCh0aGlzLmIpfWZ1bmN0aW9uIHNxdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBqcnQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gbHF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgRWYoZSx0LHIsbil9ZnVuY3Rpb24gY3F0KGUpe2lmKGUgaW5zdGFuY2VvZiBFZilyZXR1cm4gbmV3IEVmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGZBfHwoZT1WZyhlKSksIWUpcmV0dXJuIG5ldyBFZjtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgRWYoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiB1cXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2NxdChlKTpuZXcgRWYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEVmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBYcnQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIHVBLF96LCR3LGhBLFRmLFc4ZSxZOGUsajhlLFg4ZSwkOGUsSzhlLFo4ZSxycXQsaHF0PU0oKCk9PntlcXQoKTt1QT0uNyxfej0xL3VBLCR3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixoQT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixUZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsVzhlPS9eIyhbMC05YS1mXXszLDh9KSQvLFk4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbJHcsJHcsJHddKyJcXCkkIiksajhlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tUZixUZixUZl0rIlxcKSQiKSxYOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skdywkdywkdyxoQV0rIlxcKSQiKSwkOGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tUZixUZixUZixoQV0rIlxcKSQiKSxLOGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2hBLFRmLFRmXSsiXFwpJCIpLFo4ZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2hBLFRmLFRmLGhBXSsiXFwpJCIpLHJxdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtteihmQSxWZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpucXQsZm9ybWF0SGV4Om5xdCxmb3JtYXRIc2w6SjhlLGZvcm1hdFJnYjppcXQsdG9TdHJpbmc6aXF0fSk7bXoobWwsS3csWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBtbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91QTpNYXRoLnBvdyh1QSxlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDphcXQsZm9ybWF0SGV4OmFxdCxmb3JtYXRSZ2I6c3F0LHRvU3RyaW5nOnNxdH0pKTtteihFZix1cXQsWXJ0KGZBLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP196Ok1hdGgucG93KF96LGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3VBOk1hdGgucG93KHVBLGUpLG5ldyBFZih0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihlKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxyPXRoaXMubCxuPXIrKHI8LjU/cjoxLXIpKnQsaT0yKnItbjtyZXR1cm4gbmV3IG1sKFhydChlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxYcnQoZSxpLG4pLFhydChlPDEyMD9lKzI0MDplLTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisoZT09PTE/IikiOiIsICIrZSsiKSIpfX0pKX0pO3ZhciAkcnQ9TSgoKT0+e2hxdCgpfSk7ZnVuY3Rpb24gS3J0KGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gZnF0KGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBLcnQoKHItbi90KSp0LGEsaSxvLHMpfX12YXIgWnJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwcXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBLcnQoKHItbi90KSp0LGksbyxhLHMpfX12YXIgZHF0PU0oKCk9PntacnQoKX0pO2Z1bmN0aW9uIEpydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG1xdD1NKCgpPT57fSk7ZnVuY3Rpb24gdFJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gZVJlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gZ3F0KGUpe3JldHVybihlPStlKT09MT95ejpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/ZVJlKHQscixlKTpKcnQoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24geXooZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/dFJlKGUscik6SnJ0KGlzTmFOKGUpP3Q6ZSl9dmFyIF9xdD1NKCgpPT57bXF0KCl9KTtmdW5jdGlvbiB5cXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1Ldyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgdnosclJlLG5SZSx2cXQ9TSgoKT0+eyRydCgpO1pydCgpO2RxdCgpO19xdCgpO3Z6PWZ1bmN0aW9uIGUodCl7dmFyIHI9Z3F0KHQpO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1yKChpPUt3KGkpKS5yLChvPUt3KG8pKS5yKSxzPXIoaS5nLG8uZyksbD1yKGkuYixvLmIpLGM9eXooaS5vcGFjaXR5LG8ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBpLnI9YSh1KSxpLmc9cyh1KSxpLmI9bCh1KSxpLm9wYWNpdHk9Yyh1KSxpKyIifX1yZXR1cm4gbi5nYW1tYT1lLG59KDEpO3JSZT15cXQoZnF0KSxuUmU9eXF0KHBxdCl9KTtmdW5jdGlvbiBQYyhlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgeHo9TSgoKT0+e30pO2Z1bmN0aW9uIGlSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gb1JlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gZW50KGUsdCl7dmFyIHI9dG50Lmxhc3RJbmRleD1RcnQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49dG50LmV4ZWMoZSkpJiYoaT1RcnQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OlBjKG4saSl9KSkscj1RcnQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP29SZShsWzBdLngpOmlSZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgdG50LFFydCx4cXQ9TSgoKT0+e3h6KCk7dG50PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxRcnQ9bmV3IFJlZ0V4cCh0bnQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBybnQoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqYnF0LHNrZXdYOk1hdGguYXRhbihsKSpicXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBicXQsYnosd3F0PU0oKCk9PnticXQ9MTgwL01hdGguUEksYno9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX19KTtmdW5jdGlvbiBNcXQoZSl7cmV0dXJuIGU9PT0ibm9uZSI/Yno6KHBBfHwocEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksbm50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxTcXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHBBLnN0eWxlLnRyYW5zZm9ybT1lLGU9U3F0LmdldENvbXB1dGVkU3R5bGUobm50LmFwcGVuZENoaWxkKHBBKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxubnQucmVtb3ZlQ2hpbGQocEEpLGU9ZS5zbGljZSg3LC0xKS5zcGxpdCgiLCIpLHJudCgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIEVxdChlKXtyZXR1cm4gZT09bnVsbD9iejood3p8fCh3ej1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx3ei5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9d3oudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgscm50KGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6YnopfXZhciBwQSxubnQsU3F0LHd6LFRxdD1NKCgpPT57d3F0KCl9KTtmdW5jdGlvbiBDcXQoZSx0LHIsbil7ZnVuY3Rpb24gaShjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gbyhjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLHIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShofHxmKSYmcC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZityKX1mdW5jdGlvbiBhKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKGkoaCkrInJvdGF0ZSgiLG51bGwsbiktMix4OlBjKGMsdSl9KSk6dSYmaC5wdXNoKGkoaCkrInJvdGF0ZSgiK3Urbil9ZnVuY3Rpb24gcyhjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKGkoaCkrInNrZXdYKCIsbnVsbCxuKS0yLHg6UGMoYyx1KX0pOnUmJmgucHVzaChpKGgpKyJza2V3WCgiK3Urbil9ZnVuY3Rpb24gbChjLHUsaCxmLHAsZCl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgZz1wLnB1c2goaShwKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7ZC5wdXNoKHtpOmctNCx4OlBjKGMsaCl9LHtpOmctMix4OlBjKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJnAucHVzaChpKHApKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPWUoYyksdT1lKHUpLG8oYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksYShjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLHMoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0tMSxnPWYubGVuZ3RoLF87KytkPGc7KWhbKF89ZltkXSkuaV09Xy54KHApO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGludCxvbnQsQXF0PU0oKCk9Pnt4eigpO1RxdCgpO2ludD1DcXQoTXF0LCJweCwgIiwicHgpIiwiZGVnKSIpLG9udD1DcXQoRXF0LCIsICIsIikiLCIpIil9KTt2YXIgU3o9TSgoKT0+e3h6KCk7eHF0KCk7QXF0KCk7dnF0KCl9KTtmdW5jdGlvbiBhUmUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUR1KHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBzUmUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUR1KHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFBxdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPWlvKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2FSZTpzUmUpKHIsZSx0KSl9ZnVuY3Rpb24gWncoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIGlvKGksbikudmFsdWVbdF19fXZhciBkQT1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIE16KGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9QYzp0IGluc3RhbmNlb2YgVmc/dno6KHI9VmcodCkpPyh0PXIsdnopOmVudCkoZSx0KX12YXIgYW50PU0oKCk9PnskcnQoKTtTeigpfSk7ZnVuY3Rpb24gbFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBjUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiB1UmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIG89PT1yP251bGw6bz09PW4/aTppPXQobj1vLHIpfX1mdW5jdGlvbiBoUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gZlJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cykpfX1mdW5jdGlvbiBwUmUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gSXF0KGUsdCl7dmFyIHI9bGQoZSksbj1yPT09InRyYW5zZm9ybSI/b250Ok16O3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP3BSZTpmUmUpKHIsbixadyh0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9jUmU6bFJlKShyKTooci5sb2NhbD9oUmU6dVJlKShyLG4sdCsiIikpfXZhciBMcXQ9TSgoKT0+e1N6KCk7TWYoKTtkQSgpO2FudCgpfSk7ZnVuY3Rpb24gZFJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gbVJlKGUsdCl7ZnVuY3Rpb24gcigpe3ZhciBuPXRoaXMsaT10LmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gaSYmZnVuY3Rpb24obyl7bi5zZXRBdHRyaWJ1dGUoZSxpKG8pKX19cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBrcXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWxkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/ZFJlOm1SZSkobix0KSl9dmFyIFJxdD1NKCgpPT57TWYoKX0pO2Z1bmN0aW9uIGdSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBfUmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2NBKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gTnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/Z1JlOl9SZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIERxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHlSZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiB2UmUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0R1KHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gT3F0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/eVJlOnZSZSkodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIHpxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIHhSZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gRnF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh4UmUodCxlKSk6aW8odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgQnF0PU0oKCk9PntBYygpfSk7ZnVuY3Rpb24gSHF0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT10QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBWcXQ9TSgoKT0+e01mKCk7dWQoKX0pO2Z1bmN0aW9uIFVxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgVW8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBxcXQ9TSgoKT0+e3VkKCl9KTtmdW5jdGlvbiBiUmUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiB3UmUoZSx0LHIpe3ZhciBuLGksbz1iUmUodCk/Y0E6RHU7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gR3F0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9pbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2god1JlKHIsZSx0KSl9dmFyIFdxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIFNSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gWXF0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLFNSZSh0aGlzLl9pZCkpfXZhciBqcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFhxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXd2KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsSGcoY1tmXSx0LHIsZixjLGlvKHUscikpKTtyZXR1cm4gbmV3IFVvKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciAkcXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gS3F0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9aW8odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZIZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IFVvKG8sYSx0LHIpfXZhciBacXQ9TSgoKT0+e01mKCk7dWQoKTtBYygpfSk7ZnVuY3Rpb24gSnF0KCl7cmV0dXJuIG5ldyBNUmUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBNUmUsUXF0PU0oKCk9PntNZigpO01SZT1jZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBFUmUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gVFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIENSZShlLHQscil7dmFyIG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1CZyh0aGlzLGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gQVJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9QmcodGhpcyxlKSxzPXIodGhpcyk7cmV0dXJuIHM9PW51bGwmJihzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLEJnKHRoaXMsZSkpKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKX19ZnVuY3Rpb24gdEd0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9pbnQ6TXo7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsRVJlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLFRSZShlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/QVJlKGUsbixadyh0aGlzLCJzdHlsZS4iK2UsdCkpOkNSZShlLG4sdCsiIikscil9dmFyIGVHdD1NKCgpPT57U3ooKTtNZigpO2RBKCk7YW50KCl9KTtmdW5jdGlvbiBQUmUoZSx0LHIpe2Z1bmN0aW9uIG4oKXt2YXIgaT10aGlzLG89dC5hcHBseShpLGFyZ3VtZW50cyk7cmV0dXJuIG8mJmZ1bmN0aW9uKGEpe2kuc3R5bGUuc2V0UHJvcGVydHkoZSxvKGEpLHIpfX1yZXR1cm4gbi5fdmFsdWU9dCxufWZ1bmN0aW9uIHJHdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQUmUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBuR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIElSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBpR3QoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xSZShadyh0aGlzLCJ0ZXh0IixlKSk6SVJlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBvR3Q9TSgoKT0+e2RBKCl9KTtmdW5jdGlvbiBhR3QoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9RXooKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PWlvKGwsdCk7SGcobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgc0d0PU0oKCk9Pnt1ZCgpO0FjKCl9KTtmdW5jdGlvbiBVbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gVHooZSl7cmV0dXJuIGNkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBFeigpe3JldHVybisra1JlfXZhciBrUmUsSncsdWQ9TSgoKT0+e01mKCk7THF0KCk7UnF0KCk7RHF0KCk7enF0KCk7QnF0KCk7VnF0KCk7cXF0KCk7V3F0KCk7anF0KCk7JHF0KCk7WnF0KCk7UXF0KCk7ZUd0KCk7bkd0KCk7b0d0KCk7c0d0KCk7ZEEoKTtrUmU9MDtKdz1jZC5wcm90b3R5cGU7VW8ucHJvdG90eXBlPVR6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VW8sc2VsZWN0OlhxdCxzZWxlY3RBbGw6S3F0LGZpbHRlcjpIcXQsbWVyZ2U6VXF0LHNlbGVjdGlvbjpKcXQsdHJhbnNpdGlvbjphR3QsY2FsbDpKdy5jYWxsLG5vZGVzOkp3Lm5vZGVzLG5vZGU6Sncubm9kZSxzaXplOkp3LnNpemUsZW1wdHk6SncuZW1wdHksZWFjaDpKdy5lYWNoLG9uOkdxdCxhdHRyOklxdCxhdHRyVHdlZW46a3F0LHN0eWxlOnRHdCxzdHlsZVR3ZWVuOnJHdCx0ZXh0OmlHdCxyZW1vdmU6WXF0LHR3ZWVuOlBxdCxkZWxheTpOcXQsZHVyYXRpb246T3F0LGVhc2U6RnF0fX0pO2Z1bmN0aW9uIFJSZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBzbnQudGltZT1YdygpLHNudDtyZXR1cm4gcn1mdW5jdGlvbiBsR3QoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgVW8/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1FeigpLChyPXNudCkudGltZT1YdygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkhnKGwsZSx0LGMsYSxyfHxSUmUobCx0KSk7cmV0dXJuIG5ldyBVbyhuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgc250LGNHdD1NKCgpPT57dWQoKTtBYygpO0lfKCk7cXJ0KCk7c250PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgdUd0PU0oKCk9PntNZigpO3RxdCgpO2NHdCgpO2NkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9UVV0O2NkLnByb3RvdHlwZS50cmFuc2l0aW9uPWxHdH0pO2Z1bmN0aW9uIGhHdChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+ZnomJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBVbyhbW2VdXSxOUmUsdCwraSl9cmV0dXJuIG51bGx9dmFyIE5SZSxmR3Q9TSgoKT0+e3VkKCk7QWMoKTtOUmU9W251bGxdfSk7dmFyIHBHdD1NKCgpPT57dUd0KCk7dWQoKTtmR3QoKTtXcnQoKX0pO2Z1bmN0aW9uIGxudChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGRHdD1NKCgpPT57fSk7ZnVuY3Rpb24gbUd0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGdHdChlKXtyZXR1cm4gZVsxXX12YXIgX0d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBjbnQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBRdyhlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfWZ1bmN0aW9uIG1BKGUsdCl7dmFyIHI9dCxuPXQuUixpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5SPW4uTCxyLlImJihyLlIuVT1yKSxuLkw9cn1mdW5jdGlvbiBnQShlLHQpe3ZhciByPXQsbj10LkwsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuTD1uLlIsci5MJiYoci5MLlU9ciksbi5SPXJ9ZnVuY3Rpb24geUd0KGUpe2Zvcig7ZS5MOyllPWUuTDtyZXR1cm4gZX12YXIgdW50LEN6PU0oKCk9PntjbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjbnQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT15R3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZ0EodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihnQSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxtQSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz15R3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsbUEodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsZ0EodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsbUEodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLGdBKHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLGdBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTt1bnQ9Y250fSk7ZnVuY3Rpb24gdFMoZSx0LHIsbil7dmFyIGk9W251bGwsbnVsbF0sbz1Bby5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD1lLGkucmlnaHQ9dCxyJiZfQShpLGUsdCxyKSxuJiZfQShpLHQsZSxuKSxaYVtlLmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxaYVt0LmluZGV4XS5oYWxmZWRnZXMucHVzaChvKSxpfWZ1bmN0aW9uIGVTKGUsdCxyKXt2YXIgbj1bdCxyXTtyZXR1cm4gbi5sZWZ0PWUsbn1mdW5jdGlvbiBfQShlLHQscixuKXshZVswXSYmIWVbMV0/KGVbMF09bixlLmxlZnQ9dCxlLnJpZ2h0PXIpOmUubGVmdD09PXI/ZVsxXT1uOmVbMF09bn1mdW5jdGlvbiBEUmUoZSx0LHIsbixpKXt2YXIgbz1lWzBdLGE9ZVsxXSxzPW9bMF0sbD1vWzFdLGM9YVswXSx1PWFbMV0saD0wLGY9MSxwPWMtcyxkPXUtbCxnO2lmKGc9dC1zLCEoIXAmJmc+MCkpe2lmKGcvPXAscDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihwPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPW4tcywhKCFwJiZnPDApKXtpZihnLz1wLHA8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYocD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9aWYoZz1yLWwsISghZCYmZz4wKSl7aWYoZy89ZCxkPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKGQ+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9aS1sLCEoIWQmJmc8MCkpe2lmKGcvPWQsZDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihkPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1yZXR1cm4hKGg+MCkmJiEoZjwxKXx8KGg+MCYmKGVbMF09W3MraCpwLGwraCpkXSksZjwxJiYoZVsxXT1bcytmKnAsbCtmKmRdKSksITB9fX19fWZ1bmN0aW9uIE9SZShlLHQscixuLGkpe3ZhciBvPWVbMV07aWYobylyZXR1cm4hMDt2YXIgYT1lWzBdLHM9ZS5sZWZ0LGw9ZS5yaWdodCxjPXNbMF0sdT1zWzFdLGg9bFswXSxmPWxbMV0scD0oYytoKS8yLGQ9KHUrZikvMixnLF87aWYoZj09PXUpe2lmKHA8dHx8cD49bilyZXR1cm47aWYoYz5oKXtpZighYSlhPVtwLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bcCxpXX1lbHNle2lmKCFhKWE9W3AsaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289W3Ascl19fWVsc2UgaWYoZz0oYy1oKS8oZi11KSxfPWQtZypwLGc8LTF8fGc+MSlpZihjPmgpe2lmKCFhKWE9WyhyLV8pL2cscl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVsoaS1fKS9nLGldfWVsc2V7aWYoIWEpYT1bKGktXykvZyxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bKHItXykvZyxyXX1lbHNlIGlmKHU8Zil7aWYoIWEpYT1bdCxnKnQrX107ZWxzZSBpZihhWzBdPj1uKXJldHVybjtvPVtuLGcqbitfXX1lbHNle2lmKCFhKWE9W24sZypuK19dO2Vsc2UgaWYoYVswXTx0KXJldHVybjtvPVt0LGcqdCtfXX1yZXR1cm4gZVswXT1hLGVbMV09bywhMH1mdW5jdGlvbiB2R3QoZSx0LHIsbil7Zm9yKHZhciBpPUFvLmxlbmd0aCxvO2ktLTspKCFPUmUobz1Bb1tpXSxlLHQscixuKXx8IURSZShvLGUsdCxyLG4pfHwhKE1hdGguYWJzKG9bMF1bMF0tb1sxXVswXSk+V3J8fE1hdGguYWJzKG9bMF1bMV0tb1sxXVsxXSk+V3IpKSYmZGVsZXRlIEFvW2ldfXZhciBBej1NKCgpPT57clMoKX0pO2Z1bmN0aW9uIHhHdChlKXtyZXR1cm4gWmFbZS5pbmRleF09e3NpdGU6ZSxoYWxmZWRnZXM6W119fWZ1bmN0aW9uIHpSZShlLHQpe3ZhciByPWUuc2l0ZSxuPXQubGVmdCxpPXQucmlnaHQ7cmV0dXJuIHI9PT1pJiYoaT1uLG49ciksaT9NYXRoLmF0YW4yKGlbMV0tblsxXSxpWzBdLW5bMF0pOihyPT09bj8obj10WzFdLGk9dFswXSk6KG49dFswXSxpPXRbMV0pLE1hdGguYXRhbjIoblswXS1pWzBdLGlbMV0tblsxXSkpfWZ1bmN0aW9uIGhudChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gRlJlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBiR3QoKXtmb3IodmFyIGU9MCx0PVphLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9WmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT16UmUocixBb1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gd0d0KGUsdCxyLG4pe3ZhciBpPVphLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVphW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspQW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD1GUmUoYSxBb1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPWhudChhLEFvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Xcnx8TWF0aC5hYnMoXy1wKT5XcikmJihjLnNwbGljZShsLDAsQW8ucHVzaChlUyhzLGQsTWF0aC5hYnMoZy1lKTxXciYmbi1fPldyP1tlLE1hdGguYWJzKGYtZSk8V3I/cDpuXTpNYXRoLmFicyhfLW4pPFdyJiZyLWc+V3I/W01hdGguYWJzKHAtbik8V3I/ZjpyLG5dOk1hdGguYWJzKGctcik8V3ImJl8tdD5Xcj9bcixNYXRoLmFicyhmLXIpPFdyP3A6dF06TWF0aC5hYnMoXy10KTxXciYmZy1lPldyP1tNYXRoLmFicyhwLXQpPFdyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9WmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKEFvLnB1c2goZVMocz15LnNpdGUsUCxrKSktMSxBby5wdXNoKGVTKHMsayxPKSktMSxBby5wdXNoKGVTKHMsTyxEKSktMSxBby5wdXNoKGVTKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1aYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBaYVtvXSl9dmFyIGZudD1NKCgpPT57QXooKTtyUygpfSk7ZnVuY3Rpb24gQlJlKCl7UXcodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE12KGUpe3ZhciB0PWUuUCxyPWUuTjtpZighKCF0fHwhcikpe3ZhciBuPXQuc2l0ZSxpPWUuc2l0ZSxvPXIuc2l0ZTtpZihuIT09byl7dmFyIGE9aVswXSxzPWlbMV0sbD1uWzBdLWEsYz1uWzFdLXMsdT1vWzBdLWEsaD1vWzFdLXMsZj0yKihsKmgtYyp1KTtpZighKGY+PS1NR3QpKXt2YXIgcD1sKmwrYypjLGQ9dSp1K2gqaCxnPShoKnAtYypkKS9mLF89KGwqZC11KnApL2YseT1TR3QucG9wKCl8fG5ldyBCUmU7eS5hcmM9ZSx5LnNpdGU9aSx5Lng9ZythLHkueT0oeS5jeT1fK3MpK01hdGguc3FydChnKmcrXypfKSxlLmNpcmNsZT15O2Zvcih2YXIgeD1udWxsLGI9blMuXztiOylpZih5Lnk8Yi55fHx5Lnk9PT1iLnkmJnkueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3g9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7eD1iO2JyZWFrfW5TLmluc2VydCh4LHkpLHh8fChQej15KX19fX1mdW5jdGlvbiBFdihlKXt2YXIgdD1lLmNpcmNsZTt0JiYodC5QfHwoUHo9dC5OKSxuUy5yZW1vdmUodCksU0d0LnB1c2godCksUXcodCksZS5jaXJjbGU9bnVsbCl9dmFyIFNHdCxQeixwbnQ9TSgoKT0+e0N6KCk7clMoKTtTR3Q9W119KTtmdW5jdGlvbiBIUmUoKXtRdyh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRUd0KGUpe3ZhciB0PVRHdC5wb3AoKXx8bmV3IEhSZTtyZXR1cm4gdC5zaXRlPWUsdH1mdW5jdGlvbiBkbnQoZSl7RXYoZSksVHYucmVtb3ZlKGUpLFRHdC5wdXNoKGUpLFF3KGUpfWZ1bmN0aW9uIENHdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtkbnQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPFdyOylvPWwuUCxzLnVuc2hpZnQobCksZG50KGwpLGw9bztzLnVuc2hpZnQobCksRXYobCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKHItYy5jaXJjbGUueCk8V3ImJk1hdGguYWJzKG4tYy5jaXJjbGUuY3kpPFdyOylhPWMuTixzLnB1c2goYyksZG50KGMpLGM9YTtzLnB1c2goYyksRXYoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLF9BKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9dFMobC5zaXRlLGMuc2l0ZSxudWxsLGkpLE12KGwpLE12KGMpfWZ1bmN0aW9uIEFHdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPVR2Ll87czspaWYobz1QR3QocyxyKS10LG8+V3Ipcz1zLkw7ZWxzZSBpZihhPXQtVlJlKHMsciksYT5Xcil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tV3I/KG49cy5QLGk9cyk6YT4tV3I/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9eEd0KGUpO3ZhciBsPUVHdChlKTtpZihUdi5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXtFdihuKSxpPUVHdChuLnNpdGUpLFR2Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSksTXYobiksTXYoaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9dFMobi5zaXRlLGwuc2l0ZSk7cmV0dXJufUV2KG4pLEV2KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO19BKGkuZWRnZSxjLGQsUyksbC5lZGdlPXRTKGMsZSxudWxsLFMpLGkuZWRnZT10UyhlLGQsbnVsbCxTKSxNdihuKSxNdihpKX19ZnVuY3Rpb24gUEd0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gVlJlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIFBHdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIFRHdCxJR3Q9TSgoKT0+e0N6KCk7Zm50KCk7cG50KCk7QXooKTtyUygpO1RHdD1bXX0pO2Z1bmN0aW9uIFVSZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24gcVJlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHlBKGUsdCl7dmFyIHI9ZS5zb3J0KHFSZSkucG9wKCksbixpLG87Zm9yKEFvPVtdLFphPW5ldyBBcnJheShlLmxlbmd0aCksVHY9bmV3IHVudCxuUz1uZXcgdW50OzspaWYobz1QeixyJiYoIW98fHJbMV08by55fHxyWzFdPT09by55JiZyWzBdPG8ueCkpKHJbMF0hPT1ufHxyWzFdIT09aSkmJihBR3Qociksbj1yWzBdLGk9clsxXSkscj1lLnBvcCgpO2Vsc2UgaWYobylDR3Qoby5hcmMpO2Vsc2UgYnJlYWs7aWYoYkd0KCksdCl7dmFyIGE9K3RbMF1bMF0scz0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dkd0KGEscyxsLGMpLHdHdChhLHMsbCxjKX10aGlzLmVkZ2VzPUFvLHRoaXMuY2VsbHM9WmEsVHY9blM9QW89WmE9bnVsbH12YXIgV3IsTUd0LFR2LFphLG5TLEFvLHJTPU0oKCk9PntJR3QoKTtmbnQoKTtwbnQoKTtBeigpO0N6KCk7V3I9MWUtNixNR3Q9MWUtMTI7eUEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5QSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaG50KHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZVUmUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX19KTtmdW5jdGlvbiBMR3QoKXt2YXIgZT1tR3QsdD1nR3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB5QShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL1dyKSpXcixNYXRoLnJvdW5kKHQobyxhLGkpL1dyKSpXcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6bG50KCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpsbnQoK2kpLG4pOnR9LG4uZXh0ZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWytpWzBdWzBdLCtpWzBdWzFdXSxbK2lbMV1bMF0sK2lbMV1bMV1dXSxuKTpyJiZbW3JbMF1bMF0sclswXVsxXV0sW3JbMV1bMF0sclsxXVsxXV1dfSxuLnNpemU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbMCwwXSxbK2lbMF0sK2lbMV1dXSxuKTpyJiZbclsxXVswXS1yWzBdWzBdLHJbMV1bMV0tclswXVsxXV19LG59dmFyIGtHdD1NKCgpPT57ZEd0KCk7X0d0KCk7clMoKX0pO3ZhciBSR3Q9TSgoKT0+e2tHdCgpfSk7ZnVuY3Rpb24gREd0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEl6KHIpfWZ1bmN0aW9uIEl6KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIFdSZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIFlSZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIE5HdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09R1JlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgR1JlLHZBLE9HdD1NKCgpPT57R1JlPXt2YWx1ZTpmdW5jdGlvbigpe319O0l6LnByb3RvdHlwZT1ER3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpJeixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPVdSZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPVlSZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09Tkd0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09Tkd0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBJeihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dkE9REd0fSk7dmFyIG1udD1NKCgpPT57T0d0KCl9KTt2YXIgTHosZ250LF9udD1NKCgpPT57THo9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLGdudD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6THoseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIGhkKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLGdudC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Z250W3RdLGxvY2FsOmV9OmV9dmFyIGt6PU0oKCk9PntfbnQoKX0pO2Z1bmN0aW9uIGpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUx6JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Mej90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gWFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJ6KGUpe3ZhciB0PWhkKGUpO3JldHVybih0LmxvY2FsP1hSZTpqUmUpKHQpfXZhciB5bnQ9TSgoKT0+e2t6KCk7X250KCl9KTtmdW5jdGlvbiAkUmUoKXt9ZnVuY3Rpb24gQ3YoZSl7cmV0dXJuIGU9PW51bGw/JFJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE56PU0oKCk9Pnt9KTtmdW5jdGlvbiB6R3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUN2KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgbWkobix0aGlzLl9wYXJlbnRzKX12YXIgRkd0PU0oKCk9PntPdSgpO056KCl9KTtmdW5jdGlvbiBLUmUoKXtyZXR1cm5bXX1mdW5jdGlvbiB4QShlKXtyZXR1cm4gZT09bnVsbD9LUmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgdm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBCR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXhBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBtaShuLGkpfXZhciBIR3Q9TSgoKT0+e091KCk7dm50KCl9KTtmdW5jdGlvbiBiQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX12YXIgeG50PU0oKCk9Pnt9KTtmdW5jdGlvbiBWR3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBtaShuLHRoaXMuX3BhcmVudHMpfXZhciBVR3Q9TSgoKT0+e091KCk7eG50KCl9KTtmdW5jdGlvbiBEeihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgYm50PU0oKCk9Pnt9KTtmdW5jdGlvbiBxR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKER6KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiB3QShlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgd250PU0oKCk9PntibnQoKTtPdSgpO3dBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d0EsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBHR3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBXR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFpSZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgd0EoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIEpSZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVlHdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVlHdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyB3QShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIGpHdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/SlJlOlpSZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUdHdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgbWkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBZR3QsWEd0PU0oKCk9PntPdSgpO3dudCgpO1dHdCgpO1lHdD0iJCJ9KTtmdW5jdGlvbiAkR3QoKXtyZXR1cm4gbmV3IG1pKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoRHopLHRoaXMuX3BhcmVudHMpfXZhciBLR3Q9TSgoKT0+e2JudCgpO091KCl9KTtmdW5jdGlvbiBaR3QoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIEpHdD1NKCgpPT57fSk7ZnVuY3Rpb24gUUd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBtaShhLHRoaXMuX3BhcmVudHMpfXZhciB0V3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiBlV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciByV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG5XdChlKXtlfHwoZT1RUmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgbWkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFFSZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgaVd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gb1d0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciBhV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHNXdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBsV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNXdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIHVXdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFd0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgZld0PU0oKCk9Pnt9KTtmdW5jdGlvbiBwV3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIGRXdD1NKCgpPT57fSk7ZnVuY3Rpb24gbVd0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIgZ1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIGVOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIHJOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIG5OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBpTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIG9OZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBfV3QoZSx0KXt2YXIgcj1oZChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/ZU5lOnROZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP29OZTppTmU6ci5sb2NhbD9uTmU6ck5lKShyLHQpKX12YXIgeVd0PU0oKCk9PntreigpfSk7ZnVuY3Rpb24gT3ooZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBTbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBzTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBsTmUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gdld0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9hTmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/bE5lOnNOZSkoZSx0LHI9PW51bGw/IiI6cikpOlVnKHRoaXMubm9kZSgpLGUpfWZ1bmN0aW9uIFVnKGUsdCl7cmV0dXJuIGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh0KXx8T3ooZSkuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9dmFyIE1udD1NKCgpPT57U250KCl9KTtmdW5jdGlvbiBjTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIHVOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gaE5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIHhXdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP2NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9oTmU6dU5lKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgYld0PU0oKCk9Pnt9KTtmdW5jdGlvbiB3V3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIEVudChlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBTV3QoZSl9ZnVuY3Rpb24gU1d0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz13V3QoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBNV3QoZSx0KXtmb3IodmFyIHI9RW50KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gRVd0KGUsdCl7Zm9yKHZhciByPUVudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtNV3QodGhpcyxlKX19ZnVuY3Rpb24gcE5lKGUpe3JldHVybiBmdW5jdGlvbigpe0VXdCh0aGlzLGUpfX1mdW5jdGlvbiBkTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/TVd0OkVXdCkodGhpcyxlKX19ZnVuY3Rpb24gVFd0KGUsdCl7dmFyIHI9d1d0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPUVudCh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9kTmU6dD9mTmU6cE5lKShyLHQpKX12YXIgQ1d0PU0oKCk9PntTV3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gbU5lKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBnTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBfTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEFXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9tTmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP19OZTpnTmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgUFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5TmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiB2TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24geE5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gSVd0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP3lOZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/eE5lOnZOZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgTFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiTmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24ga1d0KCl7cmV0dXJuIHRoaXMuZWFjaChiTmUpfXZhciBSV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHdOZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE5XdCgpe3JldHVybiB0aGlzLmVhY2god05lKX12YXIgRFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBPV3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSeihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgeld0PU0oKCk9Pnt5bnQoKX0pO2Z1bmN0aW9uIFNOZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEZXdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6UnooZSksbj10PT1udWxsP1NOZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkN2KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIgQld0PU0oKCk9Pnt5bnQoKTtOeigpfSk7ZnVuY3Rpb24gTU5lKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gSFd0KCl7cmV0dXJuIHRoaXMuZWFjaChNTmUpfXZhciBWV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEVOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVE5lKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBVV3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/VE5lOkVOZSl9dmFyIHFXdD1NKCgpPT57fSk7ZnVuY3Rpb24gR1d0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgV1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBDTmUoZSx0LHIpe3JldHVybiBlPVhXdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBYV3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1ZcjtZcj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtZcj1pfX19ZnVuY3Rpb24gQU5lKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBQTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSU5lKGUsdCxyKXt2YXIgbj1qV3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9DTmU6WFd0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uICRXdChlLHQscil7dmFyIG49QU5lKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9JTmU6UE5lLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFRudChlLHQscixuKXt2YXIgaT1ZcjtlLnNvdXJjZUV2ZW50PVlyLFlyPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtZcj1pfX12YXIgald0LFlyLFlXdCx6ej1NKCgpPT57ald0PXt9LFlyPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFlXdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBZV3R8fChqV3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gS1d0KGUsdCxyKXt2YXIgbj1PeihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBMTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gS1d0KHRoaXMsZSx0KX19ZnVuY3Rpb24ga05lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEtXdCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBaV3QoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9rTmU6TE5lKShlLHQpKX12YXIgSld0PU0oKCk9PntTbnQoKX0pO2Z1bmN0aW9uIG1pKGUsdCl7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFFXdCgpe3JldHVybiBuZXcgbWkoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxDbnQpfXZhciBDbnQsZmQsT3U9TSgoKT0+e0ZHdCgpO0hHdCgpO1VHdCgpO1hHdCgpO3dudCgpO0tHdCgpO0pHdCgpO3RXdCgpO3JXdCgpO2lXdCgpO2FXdCgpO2xXdCgpO3VXdCgpO2ZXdCgpO2RXdCgpO2dXdCgpO3lXdCgpO01udCgpO2JXdCgpO0NXdCgpO1BXdCgpO0xXdCgpO1JXdCgpO0RXdCgpO3pXdCgpO0JXdCgpO1ZXdCgpO3FXdCgpO1dXdCgpO3p6KCk7Sld0KCk7Q250PVtudWxsXTttaS5wcm90b3R5cGU9UVd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6bWksc2VsZWN0OnpHdCxzZWxlY3RBbGw6Qkd0LGZpbHRlcjpWR3QsZGF0YTpqR3QsZW50ZXI6cUd0LGV4aXQ6JEd0LGpvaW46Wkd0LG1lcmdlOlFHdCxvcmRlcjplV3Qsc29ydDpuV3QsY2FsbDpvV3Qsbm9kZXM6c1d0LG5vZGU6Y1d0LHNpemU6aFd0LGVtcHR5OnBXdCxlYWNoOm1XdCxhdHRyOl9XdCxzdHlsZTp2V3QscHJvcGVydHk6eFd0LGNsYXNzZWQ6VFd0LHRleHQ6QVd0LGh0bWw6SVd0LHJhaXNlOmtXdCxsb3dlcjpOV3QsYXBwZW5kOk9XdCxpbnNlcnQ6Rld0LHJlbW92ZTpIV3QsY2xvbmU6VVd0LGRhdHVtOkdXdCxvbjokV3QsZGlzcGF0Y2g6Wld0fTtmZD1RV3R9KTtmdW5jdGlvbiBwZChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBtaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IG1pKFtbZV1dLENudCl9dmFyIHRZdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIEZ6KCl7Zm9yKHZhciBlPVlyLHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9dmFyIEFudD1NKCgpPT57enooKX0pO2Z1bmN0aW9uIEJ6KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIFBudD1NKCgpPT57fSk7ZnVuY3Rpb24gaVMoZSl7dmFyIHQ9RnooKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksQnooZSx0KX12YXIgZVl0PU0oKCk9PntBbnQoKTtQbnQoKX0pO2Z1bmN0aW9uIEh6KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1GeigpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIEJ6KGUsbyk7cmV0dXJuIG51bGx9dmFyIHJZdD1NKCgpPT57QW50KCk7UG50KCl9KTt2YXIgSXM9TSgoKT0+e3hudCgpO2VZdCgpO2t6KCk7dFl0KCk7T3UoKTtOeigpO3ZudCgpO01udCgpO3JZdCgpO3p6KCl9KTtmdW5jdGlvbiBWeigpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIG5ZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIEludChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsVnosITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsVnosITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIExudChlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49cGQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsVnosITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9dmFyIGlZdD1NKCgpPT57SXMoKTtuWXQoKX0pO3ZhciBvWXQ9TSgoKT0+e2lZdCgpfSk7ZnVuY3Rpb24gVXooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGtudChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgYVl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFQSgpe31mdW5jdGlvbiBsWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBITmUoKXtyZXR1cm4gZFl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIGNZdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVJOZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P3VZdCh0KTpyPT09Mz9uZXcgZ2wodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P3F6KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P3F6KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9Tk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdLHRbMl0sdFszXSwxKToodD1ETmUuZXhlYyhlKSk/bmV3IGdsKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PU9OZS5leGVjKGUpKT9xeih0WzFdLHRbMl0sdFszXSx0WzRdKToodD16TmUuZXhlYyhlKSk/cXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9Rk5lLmV4ZWMoZSkpP3BZdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PUJOZS5leGVjKGUpKT9wWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpzWXQuaGFzT3duUHJvcGVydHkoZSk/dVl0KHNZdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IGdsKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdVl0KGUpe3JldHVybiBuZXcgZ2woZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIHF6KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgZ2woZSx0LHIsbil9ZnVuY3Rpb24gVk5lKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRUF8fChlPXFnKGUpKSxlPyhlPWUucmdiKCksbmV3IGdsKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBnbH1mdW5jdGlvbiBhUyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/Vk5lKGUpOm5ldyBnbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gZ2woZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIGhZdCgpe3JldHVybiIjIitSbnQodGhpcy5yKStSbnQodGhpcy5nKStSbnQodGhpcy5iKX1mdW5jdGlvbiBmWXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gUm50KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHBZdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IENmKGUsdCxyLG4pfWZ1bmN0aW9uIGRZdChlKXtpZihlIGluc3RhbmNlb2YgQ2YpcmV0dXJuIG5ldyBDZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBFQXx8KGU9cWcoZSkpLCFlKXJldHVybiBuZXcgQ2Y7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IENmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gbVl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kWXQoZSk6bmV3IENmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBDZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gTm50KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBTQSxHeixvUyxNQSxBZixSTmUsTk5lLEROZSxPTmUsek5lLEZOZSxCTmUsc1l0LGdZdD1NKCgpPT57YVl0KCk7U0E9LjcsR3o9MS9TQSxvUz0iXFxzKihbKy1dP1xcZCspXFxzKiIsTUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsQWY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFJOZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxOTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW29TLG9TLG9TXSsiXFwpJCIpLEROZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbQWYsQWYsQWZdKyJcXCkkIiksT05lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbb1Msb1Msb1MsTUFdKyJcXCkkIiksek5lPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQWYsQWYsQWYsTUFdKyJcXCkkIiksRk5lPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tNQSxBZixBZl0rIlxcKSQiKSxCTmU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tNQSxBZixBZixNQV0rIlxcKSQiKSxzWXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07VXooRUEscWcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6bFl0LGZvcm1hdEhleDpsWXQsZm9ybWF0SHNsOkhOZSxmb3JtYXRSZ2I6Y1l0LHRvU3RyaW5nOmNZdH0pO1V6KGdsLGFTLGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgZ2wodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U0E6TWF0aC5wb3coU0EsZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6aFl0LGZvcm1hdEhleDpoWXQsZm9ybWF0UmdiOmZZdCx0b1N0cmluZzpmWXR9KSk7VXooQ2YsbVl0LGtudChFQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9HejpNYXRoLnBvdyhHeixlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9TQTpNYXRoLnBvdyhTQSxlKSxuZXcgQ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBnbChObnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTm50KGUsaSxuKSxObnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgRG50PU0oKCk9PntnWXQoKX0pO2Z1bmN0aW9uIE9udChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIF9ZdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gT250KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIHpudD1NKCgpPT57fSk7ZnVuY3Rpb24geVl0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gT250KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIHZZdD1NKCgpPT57em50KCl9KTtmdW5jdGlvbiBGbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB4WXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVOZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHFOZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIGJZdChlKXtyZXR1cm4oZT0rZSk9PTE/V3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3FOZSh0LHIsZSk6Rm50KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFd6KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1VOZShlLHIpOkZudChpc05hTihlKT90OmUpfXZhciB3WXQ9TSgoKT0+e3hZdCgpfSk7ZnVuY3Rpb24gU1l0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9YVModFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIFl6LEdOZSxXTmUsTVl0PU0oKCk9PntEbnQoKTt6bnQoKTt2WXQoKTt3WXQoKTtZej1mdW5jdGlvbiBlKHQpe3ZhciByPWJZdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hUyhpKSkuciwobz1hUyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVd6KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtHTmU9U1l0KF9ZdCksV05lPVNZdCh5WXQpfSk7ZnVuY3Rpb24gSWMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIGp6PU0oKCk9Pnt9KTtmdW5jdGlvbiBZTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGpOZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFZudChlLHQpe3ZhciByPUhudC5sYXN0SW5kZXg9Qm50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPUhudC5leGVjKGUpKSYmKGk9Qm50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpJYyhuLGkpfSkpLHI9Qm50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9qTmUobFswXS54KTpZTmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIEhudCxCbnQsRVl0PU0oKCk9PntqeigpO0hudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csQm50PW5ldyBSZWdFeHAoSG50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gVW50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKlRZdCxza2V3WDpNYXRoLmF0YW4obCkqVFl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgVFl0LFh6LENZdD1NKCgpPT57VFl0PTE4MC9NYXRoLlBJLFh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gUFl0KGUpe3JldHVybiBlPT09Im5vbmUiP1h6OihUQXx8KFRBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHFudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsQVl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxUQS5zdHlsZS50cmFuc2Zvcm09ZSxlPUFZdC5nZXRDb21wdXRlZFN0eWxlKHFudC5hcHBlbmRDaGlsZChUQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIikscW50LnJlbW92ZUNoaWxkKFRBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxVbnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBJWXQoZSl7cmV0dXJuIGU9PW51bGw/WHo6KCR6fHwoJHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksJHouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPSR6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LFVudChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOlh6KX12YXIgVEEscW50LEFZdCwkeixMWXQ9TSgoKT0+e0NZdCgpfSk7ZnVuY3Rpb24ga1l0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpJYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkljKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpJYyhjLGgpfSx7aTpnLTIseDpJYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBHbnQsV250LFJZdD1NKCgpPT57anooKTtMWXQoKTtHbnQ9a1l0KFBZdCwicHgsICIsInB4KSIsImRlZykiKSxXbnQ9a1l0KElZdCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gRFl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uICROZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBLTmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIGpudChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8WE5lKWY9TWF0aC5sb2cocy9pKS9DQSxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKENBKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK05ZdCp1KS8oMippKlludCpwKSxnPShzKnMtaSppLU5ZdCp1KS8oMipzKlludCpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykvQ0EsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1EWXQoXyksQz1pLyhZbnQqcCkqKFMqS05lKENBKmIrXyktJE5lKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0RZdChDQSpiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgQ0EsWW50LE5ZdCxYTmUsT1l0PU0oKCk9PntDQT1NYXRoLlNRUlQyLFludD0yLE5ZdD00LFhOZT0xZS0xMn0pO3ZhciBBQT1NKCgpPT57anooKTtFWXQoKTtSWXQoKTtPWXQoKTtNWXQoKX0pO2Z1bmN0aW9uIGxTKCl7cmV0dXJuIEF2fHwoQll0KFpOZSksQXY9a0Eubm93KCkrSnopfWZ1bmN0aW9uIFpOZSgpe0F2PTB9ZnVuY3Rpb24gUkEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcgUkE7cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBIWXQoKXtsUygpLCsrc1M7Zm9yKHZhciBlPUt6LHQ7ZTspKHQ9QXYtZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLXNTfWZ1bmN0aW9uIHpZdCgpe0F2PShaej1rQS5ub3coKSkrSnosc1M9SUE9MDt0cnl7SFl0KCl9ZmluYWxseXtzUz0wLFFOZSgpLEF2PTB9fWZ1bmN0aW9uIEpOZSgpe3ZhciBlPWtBLm5vdygpLHQ9ZS1aejt0PkZZdCYmKEp6LT10LFp6PWUpfWZ1bmN0aW9uIFFOZSgpe2Zvcih2YXIgZSx0PUt6LHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOkt6PXIpO0xBPWUsWG50KG4pfWZ1bmN0aW9uIFhudChlKXtpZighc1Mpe0lBJiYoSUE9Y2xlYXJUaW1lb3V0KElBKSk7dmFyIHQ9ZS1Bdjt0PjI0PyhlPDEvMCYmKElBPXNldFRpbWVvdXQoell0LGUta0Eubm93KCktSnopKSxQQSYmKFBBPWNsZWFySW50ZXJ2YWwoUEEpKSk6KFBBfHwoWno9a0Eubm93KCksUEE9c2V0SW50ZXJ2YWwoSk5lLEZZdCkpLHNTPTEsQll0KHpZdCkpfX12YXIgc1MsSUEsUEEsRll0LEt6LExBLFp6LEF2LEp6LGtBLEJZdCwkbnQ9TSgoKT0+e3NTPTAsSUE9MCxQQT0wLEZZdD0xZTMsWno9MCxBdj0wLEp6PTAsa0E9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsQll0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O1JBLnByb3RvdHlwZT1Rei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlJBLHJlc3RhcnQ6ZnVuY3Rpb24oZSx0LHIpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7cj0ocj09bnVsbD9sUygpOityKSsodD09bnVsbD8wOit0KSwhdGhpcy5fbmV4dCYmTEEhPT10aGlzJiYoTEE/TEEuX25leHQ9dGhpczpLej10aGlzLExBPXRoaXMpLHRoaXMuX2NhbGw9ZSx0aGlzLl90aW1lPXIsWG50KCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhudCgpKX19fSk7ZnVuY3Rpb24gdEYoZSx0LHIpe3ZhciBuPW5ldyBSQTtyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufXZhciBWWXQ9TSgoKT0+eyRudCgpfSk7dmFyIEtudD1NKCgpPT57JG50KCk7Vll0KCl9KTtmdW5jdGlvbiBHZyhlLHQscixuLGksbyl7dmFyIGE9ZS5fX3RyYW5zaXRpb247aWYoIWEpZS5fX3RyYW5zaXRpb249e307ZWxzZSBpZihyIGluIGEpcmV0dXJuO3JEZShlLHIse25hbWU6dCxpbmRleDpuLGdyb3VwOmksb246dERlLHR3ZWVuOmVEZSx0aW1lOm8udGltZSxkZWxheTpvLmRlbGF5LGR1cmF0aW9uOm8uZHVyYXRpb24sZWFzZTpvLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpxWXR9KX1mdW5jdGlvbiBEQShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5xWXQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gcn1mdW5jdGlvbiBKYShlLHQpe3ZhciByPW9vKGUsdCk7aWYoci5zdGF0ZT5lRil0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTtyZXR1cm4gcn1mdW5jdGlvbiBvbyhlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uO2lmKCFyfHwhKHI9clt0XSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiByfWZ1bmN0aW9uIHJEZShlLHQscil7dmFyIG49ZS5fX3RyYW5zaXRpb24saTtuW3RdPXIsci50aW1lcj1ReihvLDAsci50aW1lKTtmdW5jdGlvbiBvKGMpe3Iuc3RhdGU9Wm50LHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09Wm50KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09ZUYpcmV0dXJuIHRGKGEpO3Auc3RhdGU9PT1VWXQ/KHAuc3RhdGU9TkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1OQSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHRGKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PWVGJiYoci5zdGF0ZT1VWXQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1yRixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09ckYpe2ZvcihyLnN0YXRlPWVGLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPW5GLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PW5GJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9TkEsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIHREZSxlRGUscVl0LFpudCxyRixlRixVWXQsbkYsTkEsTHM9TSgoKT0+e21udCgpO0tudCgpO3REZT12QSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxlRGU9W10scVl0PTAsWm50PTEsckY9MixlRj0zLFVZdD00LG5GPTUsTkE9Nn0pO2Z1bmN0aW9uIFB2KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnJGJiZuLnN0YXRlPG5GLG4uc3RhdGU9TkEsbi50aW1lci5zdG9wKCksbi5vbi5jYWxsKGk/ImludGVycnVwdCI6ImNhbmNlbCIsZSxlLl9fZGF0YV9fLG4uaW5kZXgsbi5ncm91cCksZGVsZXRlIHJbYV19byYmZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgSm50PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gR1l0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtQdih0aGlzLGUpfSl9dmFyIFdZdD1NKCgpPT57Sm50KCl9KTtmdW5jdGlvbiBuRGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPUphKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBpRGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUphKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIFlZdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPW9vKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP25EZTppRGUpKHIsZSx0KSl9ZnVuY3Rpb24gY1MoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIG9vKGksbikudmFsdWVbdF19fXZhciBPQT1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGlGKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9JYzp0IGluc3RhbmNlb2YgcWc/WXo6KHI9cWcodCkpPyh0PXIsWXopOlZudCkoZSx0KX12YXIgUW50PU0oKCk9PntEbnQoKTtBQSgpfSk7ZnVuY3Rpb24gb0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBhRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBzRGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gbERlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBjRGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiB1RGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGpZdChlLHQpe3ZhciByPWhkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP1dudDppRjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD91RGU6Y0RlKShyLG4sY1ModGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/YURlOm9EZSkocik6KHIubG9jYWw/bERlOnNEZSkocixuLHQpKX12YXIgWFl0PU0oKCk9PntBQSgpO0lzKCk7T0EoKTtRbnQoKX0pO2Z1bmN0aW9uIGhEZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gZkRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gcERlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmZkRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBkRGUoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZoRGUoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uICRZdChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49aGQoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD9wRGU6ZERlKShuLHQpKX12YXIgS1l0PU0oKCk9PntJcygpfSk7ZnVuY3Rpb24gbURlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGdEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7REEodGhpcyxlKS5kZWxheT10fX1mdW5jdGlvbiBaWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9tRGU6Z0RlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kZWxheX12YXIgSll0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gX0RlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIHlEZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SmEodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBRWXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9fRGU6eURlKSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn12YXIgdGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gdkRlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBlanQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHZEZSh0LGUpKTpvbyh0aGlzLm5vZGUoKSx0KS5lYXNlfXZhciByanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBuanQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWJBKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGlqdD1NKCgpPT57SXMoKTtkZCgpfSk7ZnVuY3Rpb24gb2p0KGUpe2lmKGUuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBkYShhLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9dmFyIGFqdD1NKCgpPT57ZGQoKX0pO2Z1bmN0aW9uIHhEZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIGJEZShlLHQscil7dmFyIG4saSxvPXhEZSh0KT9EQTpKYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiBzanQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP29vKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChiRGUocixlLHQpKX12YXIgbGp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gd0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBjanQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsd0RlKHRoaXMuX2lkKSl9dmFyIHVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gaGp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Q3YoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHZyhjW2ZdLHQscixmLGMsb28odSxyKSkpO3JldHVybiBuZXcgZGEobyx0aGlzLl9wYXJlbnRzLHQscil9dmFyIGZqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBwanQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1vbyh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdnKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgZGEobyxhLHQscil9dmFyIGRqdD1NKCgpPT57SXMoKTtkZCgpO0xzKCl9KTtmdW5jdGlvbiBtanQoKXtyZXR1cm4gbmV3IFNEZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9dmFyIFNEZSxnanQ9TSgoKT0+e0lzKCk7U0RlPWZkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcn0pO2Z1bmN0aW9uIE1EZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1VZyh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksVWcodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBfanQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gRURlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1VZyh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gVERlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIENEZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUphKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1fanQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiB5anQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP0dudDppRjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxNRGUoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsX2p0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxURGUoZSxuLGNTKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goQ0RlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxFRGUoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciB2anQ9TSgoKT0+e0FBKCk7SXMoKTtMcygpO09BKCk7UW50KCl9KTtmdW5jdGlvbiBBRGUoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdC5jYWxsKHRoaXMsbikscil9fWZ1bmN0aW9uIFBEZShlLHQscil7dmFyIG4saTtmdW5jdGlvbiBvKCl7dmFyIGE9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGEhPT1pJiYobj0oaT1hKSYmQURlKGUsYSxyKSksbn1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIHhqdChlLHQscil7dmFyIG49InN0eWxlLiIrKGUrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obixQRGUoZSx0LHI9PW51bGw/IiI6cikpfXZhciBianQ9TSgoKT0+e30pO2Z1bmN0aW9uIElEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIExEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiB3anQoZSl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLHR5cGVvZiBlPT0iZnVuY3Rpb24iP0xEZShjUyh0aGlzLCJ0ZXh0IixlKSk6SURlKGU9PW51bGw/IiI6ZSsiIikpfXZhciBTanQ9TSgoKT0+e09BKCl9KTtmdW5jdGlvbiBrRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIFJEZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZrRGUoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiBNanQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LFJEZShlKSl9dmFyIEVqdD1NKCgpPT57fSk7ZnVuY3Rpb24gVGp0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPW9GKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1vbyhsLHQpO0dnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLGUscil9dmFyIENqdD1NKCgpPT57ZGQoKTtMcygpfSk7ZnVuY3Rpb24gQWp0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPUphKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFBqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGRhKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiB0aXQoZSl7cmV0dXJuIGZkKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBvRigpe3JldHVybisrTkRlfXZhciBORGUsdVMsZGQ9TSgoKT0+e0lzKCk7WFl0KCk7S1l0KCk7Sll0KCk7dGp0KCk7cmp0KCk7aWp0KCk7YWp0KCk7bGp0KCk7dWp0KCk7Zmp0KCk7ZGp0KCk7Z2p0KCk7dmp0KCk7Ymp0KCk7U2p0KCk7RWp0KCk7Q2p0KCk7T0EoKTtQanQoKTtORGU9MDt1Uz1mZC5wcm90b3R5cGU7ZGEucHJvdG90eXBlPXRpdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRhLHNlbGVjdDpoanQsc2VsZWN0QWxsOnBqdCxmaWx0ZXI6bmp0LG1lcmdlOm9qdCxzZWxlY3Rpb246bWp0LHRyYW5zaXRpb246VGp0LGNhbGw6dVMuY2FsbCxub2Rlczp1Uy5ub2Rlcyxub2RlOnVTLm5vZGUsc2l6ZTp1Uy5zaXplLGVtcHR5OnVTLmVtcHR5LGVhY2g6dVMuZWFjaCxvbjpzanQsYXR0cjpqWXQsYXR0clR3ZWVuOiRZdCxzdHlsZTp5anQsc3R5bGVUd2Vlbjp4anQsdGV4dDp3anQsdGV4dFR3ZWVuOk1qdCxyZW1vdmU6Y2p0LHR3ZWVuOllZdCxkZWxheTpaWXQsZHVyYXRpb246UVl0LGVhc2U6ZWp0LGVuZDpBanR9fSk7ZnVuY3Rpb24gRERlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGVpdC50aW1lPWxTKCksZWl0O3JldHVybiByfWZ1bmN0aW9uIElqdChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBkYT8odD1lLl9pZCxlPWUuX25hbWUpOih0PW9GKCksKHI9ZWl0KS50aW1lPWxTKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmR2cobCxlLHQsYyxhLHJ8fEREZShsLHQpKTtyZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBlaXQsTGp0PU0oKCk9PntkZCgpO0xzKCk7SV8oKTtLbnQoKTtlaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciBranQ9TSgoKT0+e0lzKCk7V1l0KCk7TGp0KCk7ZmQucHJvdG90eXBlLmludGVycnVwdD1HWXQ7ZmQucHJvdG90eXBlLnRyYW5zaXRpb249SWp0fSk7dmFyIFJqdD1NKCgpPT57ZGQoKTtMcygpfSk7dmFyIE5qdD1NKCgpPT57a2p0KCk7ZGQoKTtSanQoKTtKbnQoKX0pO2Z1bmN0aW9uIHpBKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgRGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByaXQoZSx0LHIpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy50cmFuc2Zvcm09cn12YXIgT2p0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQZihlLHQscil7dGhpcy5rPWUsdGhpcy54PXQsdGhpcy55PXJ9ZnVuY3Rpb24gYUYoZSl7cmV0dXJuIGUuX196b29tfHxoU312YXIgaFMsbml0PU0oKCk9PntQZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBmLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBQZih0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IFBmKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07aFM9bmV3IFBmKDEsMCwwKTthRi5wcm90b3R5cGU9UGYucHJvdG90eXBlfSk7ZnVuY3Rpb24gc0YoKXtZci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBmUygpe1lyLnByZXZlbnREZWZhdWx0KCksWXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIHpqdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIE9EZSgpe3JldHVybiFZci5idXR0b259ZnVuY3Rpb24gekRlKCl7dmFyIGU9dGhpcyx0LHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLHQ9ZS53aWR0aC5iYXNlVmFsLnZhbHVlLHI9ZS5oZWlnaHQuYmFzZVZhbC52YWx1ZSk6KHQ9ZS5jbGllbnRXaWR0aCxyPWUuY2xpZW50SGVpZ2h0KSxbWzAsMF0sW3Qscl1dfWZ1bmN0aW9uIEZqdCgpe3JldHVybiB0aGlzLl9fem9vbXx8aFN9ZnVuY3Rpb24gRkRlKCl7cmV0dXJuLVlyLmRlbHRhWSooWXIuZGVsdGFNb2RlPzEyMDoxKS81MDB9ZnVuY3Rpb24gQkRlKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIEhEZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gQmp0KCl7dmFyIGU9T0RlLHQ9ekRlLHI9SERlLG49RkRlLGk9QkRlLG89WzAsMS8wXSxhPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHM9MjUwLGw9am50LGM9W10sdT12QSgic3RhcnQiLCJ6b29tIiwiZW5kIiksaCxmLHA9NTAwLGQ9MTUwLGc9MDtmdW5jdGlvbiBfKFIpe1IucHJvcGVydHkoIl9fem9vbSIsRmp0KS5vbigid2hlZWwuem9vbSIsaykub24oIm1vdXNlZG93bi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIsRCkuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsSSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsTCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfV8udHJhbnNmb3JtPWZ1bmN0aW9uKFIsRil7dmFyIHo9Ui5zZWxlY3Rpb24/Ui5zZWxlY3Rpb24oKTpSO3oucHJvcGVydHkoIl9fem9vbSIsRmp0KSxSIT09ej9TKFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RikuZW5kKCl9KX0sXy5zY2FsZUJ5PWZ1bmN0aW9uKFIsRil7Xy5zY2FsZVRvKFIsZnVuY3Rpb24oKXt2YXIgej10aGlzLl9fem9vbS5rLFU9dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RjtyZXR1cm4geipVfSl9LF8uc2NhbGVUbz1mdW5jdGlvbihSLEYpe18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Yih6KSxaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHIoeCh5KFUscnQpLFcsWikseixhKX0pfSxfLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFIsRix6KXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sXy50cmFuc2xhdGVUbz1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3ZhciBVPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFc9dGhpcy5fX3pvb20sWj1iKFUpO3JldHVybiByKGhTLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRix0eXBlb2Ygej09ImZ1bmN0aW9uIj8tei5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LXopLFUsYSl9KX07ZnVuY3Rpb24geShSLEYpe3JldHVybiBGPU1hdGgubWF4KG9bMF0sTWF0aC5taW4ob1sxXSxGKSksRj09PVIuaz9SOm5ldyBQZihGLFIueCxSLnkpfWZ1bmN0aW9uIHgoUixGLHope3ZhciBVPUZbMF0telswXSpSLmssVz1GWzFdLXpbMV0qUi5rO3JldHVybiBVPT09Ui54JiZXPT09Ui55P1I6bmV3IFBmKFIuayxVLFcpfWZ1bmN0aW9uIGIoUil7cmV0dXJuWygrUlswXVswXSsgK1JbMV1bMF0pLzIsKCtSWzBdWzFdKyArUlsxXVsxXSkvMl19ZnVuY3Rpb24gUyhSLEYseil7Ui5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpfSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcyxXPWFyZ3VtZW50cyxaPUMoVSxXKSxydD10LmFwcGx5KFUsVyksb3Q9enx8YihydCksc3Q9TWF0aC5tYXgocnRbMV1bMF0tcnRbMF1bMF0scnRbMV1bMV0tcnRbMF1bMV0pLFN0PVUuX196b29tLGJ0PXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoVSxXKTpGLE10PWwoU3QuaW52ZXJ0KG90KS5jb25jYXQoc3QvU3QuayksYnQuaW52ZXJ0KG90KS5jb25jYXQoc3QvYnQuaykpO3JldHVybiBmdW5jdGlvbihsdCl7aWYobHQ9PT0xKWx0PWJ0O2Vsc2V7dmFyIEt0PU10KGx0KSxfdD1zdC9LdFsyXTtsdD1uZXcgUGYoX3Qsb3RbMF0tS3RbMF0qX3Qsb3RbMV0tS3RbMV0qX3QpfVouem9vbShudWxsLGx0KX19KX1mdW5jdGlvbiBDKFIsRil7Zm9yKHZhciB6PTAsVT1jLmxlbmd0aCxXO3o8VTsrK3opaWYoKFc9Y1t6XSkudGhhdD09PVIpcmV0dXJuIFc7cmV0dXJuIG5ldyBQKFIsRil9ZnVuY3Rpb24gUChSLEYpe3RoaXMudGhhdD1SLHRoaXMuYXJncz1GLHRoaXMuaW5kZXg9LTEsdGhpcy5hY3RpdmU9MCx0aGlzLmV4dGVudD10LmFwcGx5KFIsRil9UC5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLmluZGV4PWMucHVzaCh0aGlzKS0xLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihSLEYpe3JldHVybiB0aGlzLm1vdXNlJiZSIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ri5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJlIhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ri5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPUYsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihjLnNwbGljZSh0aGlzLmluZGV4LDEpLHRoaXMuaW5kZXg9LTEsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihSKXtUbnQobmV3IHJpdChfLFIsdGhpcy50aGF0Ll9fem9vbSksdS5hcHBseSx1LFtSLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGsoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9dGhpcy5fX3pvb20sej1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksVT1pUyh0aGlzKTtpZihSLndoZWVsKShSLm1vdXNlWzBdWzBdIT09VVswXXx8Ui5tb3VzZVswXVsxXSE9PVVbMV0pJiYoUi5tb3VzZVsxXT1GLmludmVydChSLm1vdXNlWzBdPVUpKSxjbGVhclRpbWVvdXQoUi53aGVlbCk7ZWxzZXtpZihGLms9PT16KXJldHVybjtSLm1vdXNlPVtVLEYuaW52ZXJ0KFUpXSxQdih0aGlzKSxSLnN0YXJ0KCl9ZlMoKSxSLndoZWVsPXNldFRpbWVvdXQoVyxkKSxSLnpvb20oIm1vdXNlIixyKHgoeShGLHopLFIubW91c2VbMF0sUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpO2Z1bmN0aW9uIFcoKXtSLndoZWVsPW51bGwsUi5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKGZ8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1wZChZci52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFosITApLm9uKCJtb3VzZXVwLnpvb20iLHJ0LCEwKSx6PWlTKHRoaXMpLFU9WXIuY2xpZW50WCxXPVlyLmNsaWVudFk7SW50KFlyLnZpZXcpLHNGKCksUi5tb3VzZT1beix0aGlzLl9fem9vbS5pbnZlcnQoeildLFB2KHRoaXMpLFIuc3RhcnQoKTtmdW5jdGlvbiBaKCl7aWYoZlMoKSwhUi5tb3ZlZCl7dmFyIG90PVlyLmNsaWVudFgtVSxzdD1Zci5jbGllbnRZLVc7Ui5tb3ZlZD1vdCpvdCtzdCpzdD5nfVIuem9vbSgibW91c2UiLHIoeChSLnRoYXQuX196b29tLFIubW91c2VbMF09aVMoUi50aGF0KSxSLm1vdXNlWzFdKSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gcnQoKXtGLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLExudChZci52aWV3LFIubW92ZWQpLGZTKCksUi5lbmQoKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBSPXRoaXMuX196b29tLEY9aVModGhpcyksej1SLmludmVydChGKSxVPVIuayooWXIuc2hpZnRLZXk/LjU6MiksVz1yKHgoeShSLFUpLEYseiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7ZlMoKSxzPjA/cGQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoUyxXLEYpOnBkKHRoaXMpLmNhbGwoXy50cmFuc2Zvcm0sVyl9fWZ1bmN0aW9uIEIoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHosVT1GLmxlbmd0aCxXLFoscnQ7Zm9yKHNGKCksVz0wO1c8VTsrK1cpWj1GW1ddLHJ0PUh6KHRoaXMsRixaLmlkZW50aWZpZXIpLHJ0PVtydCx0aGlzLl9fem9vbS5pbnZlcnQocnQpLFouaWRlbnRpZmllcl0sUi50b3VjaDA/Ui50b3VjaDF8fChSLnRvdWNoMT1ydCk6KFIudG91Y2gwPXJ0LHo9ITApO2lmKGgmJihoPWNsZWFyVGltZW91dChoKSwhUi50b3VjaDEpKXtSLmVuZCgpLHJ0PXBkKHRoaXMpLm9uKCJkYmxjbGljay56b29tIikscnQmJnJ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm59eiYmKGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0scCksUHYodGhpcyksUi5zdGFydCgpKX19ZnVuY3Rpb24gSSgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFcsWixydDtmb3IoZlMoKSxoJiYoaD1jbGVhclRpbWVvdXQoaCkpLFU9MDtVPHo7KytVKVc9RltVXSxaPUh6KHRoaXMsRixXLmlkZW50aWZpZXIpLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9SLnRvdWNoMFswXT1aOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmKFIudG91Y2gxWzBdPVopO2lmKFc9Ui50aGF0Ll9fem9vbSxSLnRvdWNoMSl7dmFyIG90PVIudG91Y2gwWzBdLHN0PVIudG91Y2gwWzFdLFN0PVIudG91Y2gxWzBdLGJ0PVIudG91Y2gxWzFdLE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdCxsdD0obHQ9YnRbMF0tc3RbMF0pKmx0KyhsdD1idFsxXS1zdFsxXSkqbHQ7Vz15KFcsTWF0aC5zcXJ0KE10L2x0KSksWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl0scnQ9WyhzdFswXStidFswXSkvMiwoc3RbMV0rYnRbMV0pLzJdfWVsc2UgaWYoUi50b3VjaDApWj1SLnRvdWNoMFswXSxydD1SLnRvdWNoMFsxXTtlbHNlIHJldHVybjtSLnpvb20oInRvdWNoIixyKHgoVyxaLHJ0KSxSLmV4dGVudCxhKSl9ZnVuY3Rpb24gTCgpe3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9WXIuY2hhbmdlZFRvdWNoZXMsej1GLmxlbmd0aCxVLFc7Zm9yKHNGKCksZiYmY2xlYXJUaW1lb3V0KGYpLGY9c2V0VGltZW91dChmdW5jdGlvbigpe2Y9bnVsbH0scCksVT0wO1U8ejsrK1UpVz1GW1VdLFIudG91Y2gwJiZSLnRvdWNoMFsyXT09PVcuaWRlbnRpZmllcj9kZWxldGUgUi50b3VjaDA6Ui50b3VjaDEmJlIudG91Y2gxWzJdPT09Vy5pZGVudGlmaWVyJiZkZWxldGUgUi50b3VjaDE7Ui50b3VjaDEmJiFSLnRvdWNoMCYmKFIudG91Y2gwPVIudG91Y2gxLGRlbGV0ZSBSLnRvdWNoMSksUi50b3VjaDA/Ui50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KFIudG91Y2gwWzBdKTpSLmVuZCgpfXJldHVybiBfLndoZWVsRGVsdGE9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSgrUiksXyk6bn0sXy5maWx0ZXI9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFI9PSJmdW5jdGlvbiI/Ujp6QSghIVIpLF8pOmV9LF8udG91Y2hhYmxlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6ekEoISFSKSxfKTppfSxfLmV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOnpBKFtbK1JbMF1bMF0sK1JbMF1bMV1dLFsrUlsxXVswXSwrUlsxXVsxXV1dKSxfKTp0fSxfLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStSWzBdLG9bMV09K1JbMV0sXyk6W29bMF0sb1sxXV19LF8udHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStSWzBdWzBdLGFbMV1bMF09K1JbMV1bMF0sYVswXVsxXT0rUlswXVsxXSxhWzFdWzFdPStSWzFdWzFdLF8pOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LF8uY29uc3RyYWluPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPVIsXyk6cn0sXy5kdXJhdGlvbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rUixfKTpzfSxfLmludGVycG9sYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPVIsXyk6bH0sXy5vbj1mdW5jdGlvbigpe3ZhciBSPXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiBSPT09dT9fOlJ9LF8uY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0oUj0rUikqUixfKTpNYXRoLnNxcnQoZyl9LF99dmFyIEhqdD1NKCgpPT57bW50KCk7b1l0KCk7QUEoKTtJcygpO05qdCgpO0RqdCgpO09qdCgpO25pdCgpO3pqdCgpfSk7dmFyIFZqdD1NKCgpPT57SGp0KCk7bml0KCl9KTt2YXIgTXI9e307S3MoTXIse2FjdGl2ZTooKT0+aEd0LGFyYzooKT0+ZkZ0LGFyZWE6KCk9PmI3LGFyZWFSYWRpYWw6KCk9PmtldCxhc2NlbmRpbmc6KCk9Pl9jLGF4aXNCb3R0b206KCk9PmpNdCxheGlzTGVmdDooKT0+WE10LGF4aXNSaWdodDooKT0+WU10LGF4aXNUb3A6KCk9PldNdCxiaXNlY3Q6KCk9PnNSLGJpc2VjdExlZnQ6KCk9Pm5NdCxiaXNlY3RSaWdodDooKT0+eCQsYmlzZWN0b3I6KCk9PmFSLGJydXNoOigpPT5kQ3QsYnJ1c2hTZWxlY3Rpb246KCk9PmhDdCxicnVzaFg6KCk9PmZDdCxicnVzaFk6KCk9PnBDdCxjaG9yZDooKT0+RkN0LGNsaWVudFBvaW50OigpPT5EZyxjbHVzdGVyOigpPT5ITHQsY29sb3I6KCk9PngyLGNyZWF0ZTooKT0+S3p0LGNyZWF0b3I6KCk9Pk5nLGNyb3NzOigpPT5vTXQsY3N2OigpPT5jTnQsY3N2Rm9ybWF0OigpPT5kUHQsY3N2Rm9ybWF0Um93czooKT0+bVB0LGNzdlBhcnNlOigpPT5mUHQsY3N2UGFyc2VSb3dzOigpPT5wUHQsY3ViZWhlbGl4OigpPT51TixjdXJ2ZUJhc2lzOigpPT5rRnQsY3VydmVCYXNpc0Nsb3NlZDooKT0+TkZ0LGN1cnZlQmFzaXNPcGVuOigpPT56RnQsY3VydmVCdW5kbGU6KCk9PkhGdCxjdXJ2ZUNhcmRpbmFsOigpPT5VRnQsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+cUZ0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5HRnQsY3VydmVDYXRtdWxsUm9tOigpPT5ZRnQsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5YRnQsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+WkZ0LGN1cnZlTGluZWFyOigpPT5GZyxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+dEJ0LGN1cnZlTW9ub3RvbmVYOigpPT5zQnQsY3VydmVNb25vdG9uZVk6KCk9PmxCdCxjdXJ2ZU5hdHVyYWw6KCk9PmZCdCxjdXJ2ZVN0ZXA6KCk9PmRCdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+Z0J0LGN1cnZlU3RlcEJlZm9yZTooKT0+bUJ0LGN1c3RvbUV2ZW50OigpPT5HenQsZGVzY2VuZGluZzooKT0+c010LGRldmlhdGlvbjooKT0+Y1IsZGlzcGF0Y2g6KCk9PkFBdCxkcmFnOigpPT5zUHQsZHJhZ0Rpc2FibGU6KCk9PkVOLGRyYWdFbmFibGU6KCk9PlROLGRzdkZvcm1hdDooKT0+dzIsZWFzZUJhY2s6KCk9Pk9aLGVhc2VCYWNrSW46KCk9PlhQdCxlYXNlQmFja0luT3V0OigpPT5PWixlYXNlQmFja091dDooKT0+JFB0LGVhc2VCb3VuY2U6KCk9PlMyLGVhc2VCb3VuY2VJbjooKT0+V1B0LGVhc2VCb3VuY2VJbk91dDooKT0+WVB0LGVhc2VCb3VuY2VPdXQ6KCk9PlMyLGVhc2VDaXJjbGU6KCk9PlJaLGVhc2VDaXJjbGVJbjooKT0+VVB0LGVhc2VDaXJjbGVJbk91dDooKT0+UlosZWFzZUNpcmNsZU91dDooKT0+cVB0LGVhc2VDdWJpYzooKT0+QVosZWFzZUN1YmljSW46KCk9PkFQdCxlYXNlQ3ViaWNJbk91dDooKT0+QVosZWFzZUN1YmljT3V0OigpPT5QUHQsZWFzZUVsYXN0aWM6KCk9PkJaLGVhc2VFbGFzdGljSW46KCk9PlpQdCxlYXNlRWxhc3RpY0luT3V0OigpPT5KUHQsZWFzZUVsYXN0aWNPdXQ6KCk9PkJaLGVhc2VFeHA6KCk9PmtaLGVhc2VFeHBJbjooKT0+QlB0LGVhc2VFeHBJbk91dDooKT0+a1osZWFzZUV4cE91dDooKT0+SFB0LGVhc2VMaW5lYXI6KCk9PlNQdCxlYXNlUG9seTooKT0+SVosZWFzZVBvbHlJbjooKT0+TFB0LGVhc2VQb2x5SW5PdXQ6KCk9PklaLGVhc2VQb2x5T3V0OigpPT5rUHQsZWFzZVF1YWQ6KCk9PkNaLGVhc2VRdWFkSW46KCk9PkVQdCxlYXNlUXVhZEluT3V0OigpPT5DWixlYXNlUXVhZE91dDooKT0+VFB0LGVhc2VTaW46KCk9PkxaLGVhc2VTaW5JbjooKT0+T1B0LGVhc2VTaW5Jbk91dDooKT0+TFosZWFzZVNpbk91dDooKT0+elB0LGVudHJpZXM6KCk9PnNBdCxldmVudDooKT0+UHUsZXh0ZW50OigpPT51Uixmb3JjZUNlbnRlcjooKT0+ZTZ0LGZvcmNlQ29sbGlkZTooKT0+TjZ0LGZvcmNlTGluazooKT0+cTZ0LGZvcmNlTWFueUJvZHk6KCk9PmlJdCxmb3JjZVJhZGlhbDooKT0+YUl0LGZvcmNlU2ltdWxhdGlvbjooKT0+bkl0LGZvcmNlWDooKT0+bEl0LGZvcmNlWTooKT0+dUl0LGZvcm1hdDooKT0+ckosZm9ybWF0RGVmYXVsdExvY2FsZTooKT0+V04sZm9ybWF0TG9jYWxlOigpPT5xTixmb3JtYXRQcmVmaXg6KCk9Pm5KLGZvcm1hdFNwZWNpZmllcjooKT0+THksZ2VvQWxiZXJzOigpPT5ERCxnZW9BbGJlcnNVc2E6KCk9Pm1MdCxnZW9BcmVhOigpPT5GSXQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhOigpPT5fTHQsZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3OigpPT56RCxnZW9BemltdXRoYWxFcXVpZGlzdGFudDooKT0+dkx0LGdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3OigpPT5GRCxnZW9Cb3VuZHM6KCk9PllJdCxnZW9DZW50cm9pZDooKT0+UUl0LGdlb0NpcmNsZTooKT0+YTl0LGdlb0NsaXBBbnRpbWVyaWRpYW46KCk9PnpULGdlb0NsaXBDaXJjbGU6KCk9Pl9ELGdlb0NsaXBFeHRlbnQ6KCk9PlA5dCxnZW9DbGlwUmVjdGFuZ2xlOigpPT5RcCxnZW9Db25pY0NvbmZvcm1hbDooKT0+d0x0LGdlb0NvbmljQ29uZm9ybWFsUmF3OigpPT5mUSxnZW9Db25pY0VxdWFsQXJlYTooKT0+VXksZ2VvQ29uaWNFcXVhbEFyZWFSYXc6KCk9PmNRLGdlb0NvbmljRXF1aWRpc3RhbnQ6KCk9PkVMdCxnZW9Db25pY0VxdWlkaXN0YW50UmF3OigpPT5kUSxnZW9Db250YWluczooKT0+ejl0LGdlb0Rpc3RhbmNlOigpPT5CeSxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9Pk1MdCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9Pkd5LGdlb0dub21vbmljOigpPT5DTHQsZ2VvR25vbW9uaWNSYXc6KCk9PlZELGdlb0dyYXRpY3VsZTooKT0+U0QsZ2VvR3JhdGljdWxlMTA6KCk9PlY5dCxnZW9JZGVudGl0eTooKT0+UEx0LGdlb0ludGVycG9sYXRlOigpPT5xOXQsZ2VvTGVuZ3RoOigpPT5iRCxnZW9NZXJjYXRvcjooKT0+Ykx0LGdlb01lcmNhdG9yUmF3OigpPT5xeSxnZW9OYXR1cmFsRWFydGgxOigpPT5MTHQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+cUQsZ2VvT3J0aG9ncmFwaGljOigpPT5STHQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5HRCxnZW9QYXRoOigpPT5sTHQsZ2VvUHJvamVjdGlvbjooKT0+ZW8sZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9PllULGdlb1JvdGF0aW9uOigpPT5sRCxnZW9TdGVyZW9ncmFwaGljOigpPT5ETHQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+V0QsZ2VvU3RyZWFtOigpPT5NbyxnZW9UcmFuc2Zvcm06KCk9PnVMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PnpMdCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PllELGhjbDooKT0+aVosaGllcmFyY2h5OigpPT5qVCxoaXN0b2dyYW06KCk9PmdNdCxoc2w6KCk9PlpLLGh0bWw6KCk9PmVOdCxpbnRlcnBvbGF0ZTooKT0+WjIsaW50ZXJwb2xhdGVBcnJheTooKT0+Zk8saW50ZXJwb2xhdGVCYXNpczooKT0+Y08saW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+aE8saW50ZXJwb2xhdGVDb29sOigpPT5iN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXg6KCk9PkI4dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeERlZmF1bHQ6KCk9Pnk3dCxpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmc6KCk9Pkg4dCxpbnRlcnBvbGF0ZURhdGU6KCk9PmRPLGludGVycG9sYXRlSGNsOigpPT5EOHQsaW50ZXJwb2xhdGVIY2xMb25nOigpPT5POHQsaW50ZXJwb2xhdGVIc2w6KCk9Pkk4dCxpbnRlcnBvbGF0ZUhzbExvbmc6KCk9Pkw4dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PlQ3dCxpbnRlcnBvbGF0ZUxhYjooKT0+JFEsaW50ZXJwb2xhdGVNYWdtYTooKT0+RTd0LGludGVycG9sYXRlTnVtYmVyOigpPT5BcyxpbnRlcnBvbGF0ZU9iamVjdDooKT0+bU8saW50ZXJwb2xhdGVQbGFzbWE6KCk9PkM3dCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9Pnc3dCxpbnRlcnBvbGF0ZVJnYjooKT0+ZUMsaW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+aDh0LGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9PmY4dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5wOHQsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PmdPLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT53OHQsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc6KCk9PlM4dCxpbnRlcnBvbGF0ZVZpcmlkaXM6KCk9Pk03dCxpbnRlcnBvbGF0ZVdhcm06KCk9Png3dCxpbnRlcnBvbGF0ZVpvb206KCk9PkM4dCxpbnRlcnJ1cHQ6KCk9PmR6LGludGVydmFsOigpPT5iVnQsaXNvRm9ybWF0OigpPT5mVnQsaXNvUGFyc2U6KCk9PnBWdCxqc29uOigpPT5uTnQsa2V5czooKT0+bkF0LGxhYjooKT0+bE4sbGluZTooKT0+UncsbGluZVJhZGlhbDooKT0+SWV0LGxpbmtIb3Jpem9udGFsOigpPT5TRnQsbGlua1JhZGlhbDooKT0+RUZ0LGxpbmtWZXJ0aWNhbDooKT0+TUZ0LGxvY2FsOigpPT5tNyxtYXA6KCk9PmJ5LG1hdGNoZXI6KCk9PnU3LG1heDooKT0+d010LG1lYW46KCk9Pk1NdCxtZWRpYW46KCk9PlRNdCxtZXJnZTooKT0+QU10LG1pbjooKT0+bVIsbW91c2U6KCk9PlF6dCxuYW1lc3BhY2U6KCk9Pk13LG5hbWVzcGFjZXM6KCk9PkVDLG5lc3Q6KCk9PkpDdCxub3c6KCk9Pll3LHBhY2s6KCk9PndrdCxwYWNrRW5jbG9zZTooKT0+JEQscGFja1NpYmxpbmdzOigpPT55a3QscGFpcnM6KCk9PmlNdCxwYXJ0aXRpb246KCk9Pk1rdCxwYXRoOigpPT5ZOHQscGVybXV0ZTooKT0+SU10LHBpZTooKT0+dkZ0LHBvaW50UmFkaWFsOigpPT5mdixwb2x5Z29uQXJlYTooKT0+JDh0LHBvbHlnb25DZW50cm9pZDooKT0+Wjh0LHBvbHlnb25Db250YWluczooKT0+aVJ0LHBvbHlnb25IdWxsOigpPT5yUnQscG9seWdvbkxlbmd0aDooKT0+YVJ0LHByZWNpc2lvbkZpeGVkOigpPT5NSXQscHJlY2lzaW9uUHJlZml4OigpPT5USXQscHJlY2lzaW9uUm91bmQ6KCk9PkFJdCxxdWFkdHJlZTooKT0+eE8scXVhbnRpbGU6KCk9PmR5LHF1YW50aXplOigpPT5VOHQscXVldWU6KCk9PndPLHJhZGlhbEFyZWE6KCk9PmtldCxyYWRpYWxMaW5lOigpPT5JZXQscmFuZG9tQmF0ZXM6KCk9PktSdCxyYW5kb21FeHBvbmVudGlhbDooKT0+SlJ0LHJhbmRvbUlyd2luSGFsbDooKT0+TU8scmFuZG9tTG9nTm9ybWFsOigpPT5YUnQscmFuZG9tTm9ybWFsOigpPT5TTyxyYW5kb21Vbmlmb3JtOigpPT5ZUnQscmFuZ2U6KCk9PmhSLHJlcXVlc3Q6KCk9PkoyLHJnYjooKT0+S0sscmliYm9uOigpPT5ZQ3Qsc2NhbGVCYW5kOigpPT5jQyxzY2FsZUlkZW50aXR5OigpPT5xTyxzY2FsZUltcGxpY2l0OigpPT5rTyxzY2FsZUxpbmVhcjooKT0+VU8sc2NhbGVMb2c6KCk9PldPLHNjYWxlT3JkaW5hbDooKT0+bncsc2NhbGVQb2ludDooKT0+VU50LHNjYWxlUG93OigpPT5fQyxzY2FsZVF1YW50aWxlOigpPT5ZTyxzY2FsZVF1YW50aXplOigpPT5qTyxzY2FsZVNlcXVlbnRpYWw6KCk9Pmk3LHNjYWxlU3FydDooKT0+ck90LHNjYWxlVGhyZXNob2xkOigpPT5YTyxzY2FsZVRpbWU6KCk9PnM3dCxzY2FsZVV0YzooKT0+bDd0LHNjYW46KCk9PmtNdCxzY2hlbWVDYXRlZ29yeTEwOigpPT51N3Qsc2NoZW1lQ2F0ZWdvcnkyMDooKT0+Zzd0LHNjaGVtZUNhdGVnb3J5MjBiOigpPT5mN3Qsc2NoZW1lQ2F0ZWdvcnkyMGM6KCk9PmQ3dCxzZWxlY3Q6KCk9PmQ3LHNlbGVjdEFsbDooKT0+ZUZ0LHNlbGVjdGlvbjooKT0+JHp0LHNlbGVjdG9yOigpPT5FdyxzZWxlY3RvckFsbDooKT0+Yzcsc2V0OigpPT5lQXQsc2h1ZmZsZTooKT0+Tk10LHN0YWNrOigpPT55QnQsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PndCdCxzdGFja09mZnNldEV4cGFuZDooKT0+eEJ0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+UnUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5NQnQsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PlRCdCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5ENyxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+QUJ0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PklCdCxzdGFja09yZGVyTm9uZTooKT0+TnUsc3RhY2tPcmRlclJldmVyc2U6KCk9PmtCdCxzdHJhdGlmeTooKT0+QWt0LHN0eWxlOigpPT5fZXQsc3VtOigpPT5PTXQsc3ltYm9sOigpPT5JRnQsc3ltYm9sQ2lyY2xlOigpPT5SQyxzeW1ib2xDcm9zczooKT0+Uzcsc3ltYm9sRGlhbW9uZDooKT0+TTcsc3ltYm9sU3F1YXJlOigpPT5UNyxzeW1ib2xTdGFyOigpPT5FNyxzeW1ib2xUcmlhbmdsZTooKT0+Qzcsc3ltYm9sV3llOigpPT5BNyxzeW1ib2xzOigpPT5QRnQsdGV4dDooKT0+b050LHRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXM6KCk9PnlNdCx0aHJlc2hvbGRTY290dDooKT0+eE10LHRocmVzaG9sZFN0dXJnZXM6KCk9PnBSLHRpY2tJbmNyZW1lbnQ6KCk9PmskLHRpY2tTdGVwOigpPT5mUix0aWNrczooKT0+bU10LHRpbWVEYXk6KCk9PmpCdCx0aW1lRGF5czooKT0+WEJ0LHRpbWVGb3JtYXQ6KCk9PndydCx0aW1lRm9ybWF0RGVmYXVsdExvY2FsZTooKT0+WDcsdGltZUZvcm1hdExvY2FsZTooKT0+WUMsdGltZUZyaWRheTooKT0+b3J0LHRpbWVGcmlkYXlzOigpPT50SHQsdGltZUhvdXI6KCk9PnFCdCx0aW1lSG91cnM6KCk9PkdCdCx0aW1lSW50ZXJ2YWw6KCk9PlNyLHRpbWVNaWxsaXNlY29uZDooKT0+WmV0LHRpbWVNaWxsaXNlY29uZHM6KCk9PkpldCx0aW1lTWludXRlOigpPT5CQnQsdGltZU1pbnV0ZXM6KCk9PkhCdCx0aW1lTW9uZGF5OigpPT5lcnQsdGltZU1vbmRheXM6KCk9PktCdCx0aW1lTW9udGg6KCk9PmlIdCx0aW1lTW9udGhzOigpPT5vSHQsdGltZVBhcnNlOigpPT5TcnQsdGltZVNhdHVyZGF5OigpPT5hcnQsdGltZVNhdHVyZGF5czooKT0+ZUh0LHRpbWVTZWNvbmQ6KCk9PlFldCx0aW1lU2Vjb25kczooKT0+dHJ0LHRpbWVTdW5kYXk6KCk9Pkg3LHRpbWVTdW5kYXlzOigpPT5zcnQsdGltZVRodXJzZGF5OigpPT5pcnQsdGltZVRodXJzZGF5czooKT0+UUJ0LHRpbWVUdWVzZGF5OigpPT5ycnQsdGltZVR1ZXNkYXlzOigpPT5aQnQsdGltZVdlZG5lc2RheTooKT0+bnJ0LHRpbWVXZWRuZXNkYXlzOigpPT5KQnQsdGltZVdlZWs6KCk9Pkg3LHRpbWVXZWVrczooKT0+c3J0LHRpbWVZZWFyOigpPT5zSHQsdGltZVllYXJzOigpPT5sSHQsdGltZW91dDooKT0+dlZ0LHRpbWVyOigpPT5DcnQsdGltZXJGbHVzaDooKT0+QXJ0LHRvdWNoOigpPT5uRnQsdG91Y2hlczooKT0+b0Z0LHRyYW5zaXRpb246KCk9PlR6LHRyYW5zcG9zZTooKT0+Z1IsdHJlZTooKT0+SWt0LHRyZWVtYXA6KCk9PmtrdCx0cmVlbWFwQmluYXJ5OigpPT5Oa3QsdHJlZW1hcERpY2U6KCk9PmxmLHRyZWVtYXBSZXNxdWFyaWZ5OigpPT5Ga3QsdHJlZW1hcFNsaWNlOigpPT53Zyx0cmVlbWFwU2xpY2VEaWNlOigpPT5Pa3QsdHJlZW1hcFNxdWFyaWZ5OigpPT50Tyx0c3Y6KCk9PmhOdCx0c3ZGb3JtYXQ6KCk9PnZQdCx0c3ZGb3JtYXRSb3dzOigpPT54UHQsdHN2UGFyc2U6KCk9Pl9QdCx0c3ZQYXJzZVJvd3M6KCk9PnlQdCx1dGNEYXk6KCk9PnZIdCx1dGNEYXlzOigpPT54SHQsdXRjRm9ybWF0OigpPT5qQyx1dGNGcmlkYXk6KCk9PnBydCx1dGNGcmlkYXlzOigpPT5USHQsdXRjSG91cjooKT0+bUh0LHV0Y0hvdXJzOigpPT5nSHQsdXRjTWlsbGlzZWNvbmQ6KCk9PlpldCx1dGNNaWxsaXNlY29uZHM6KCk9PkpldCx1dGNNaW51dGU6KCk9PmhIdCx1dGNNaW51dGVzOigpPT5mSHQsdXRjTW9uZGF5OigpPT5jcnQsdXRjTW9uZGF5czooKT0+d0h0LHV0Y01vbnRoOigpPT5JSHQsdXRjTW9udGhzOigpPT5MSHQsdXRjUGFyc2U6KCk9PlhDLHV0Y1NhdHVyZGF5OigpPT5kcnQsdXRjU2F0dXJkYXlzOigpPT5DSHQsdXRjU2Vjb25kOigpPT5RZXQsdXRjU2Vjb25kczooKT0+dHJ0LHV0Y1N1bmRheTooKT0+VjcsdXRjU3VuZGF5czooKT0+bXJ0LHV0Y1RodXJzZGF5OigpPT5mcnQsdXRjVGh1cnNkYXlzOigpPT5FSHQsdXRjVHVlc2RheTooKT0+dXJ0LHV0Y1R1ZXNkYXlzOigpPT5TSHQsdXRjV2VkbmVzZGF5OigpPT5ocnQsdXRjV2VkbmVzZGF5czooKT0+TUh0LHV0Y1dlZWs6KCk9PlY3LHV0Y1dlZWtzOigpPT5tcnQsdXRjWWVhcjooKT0+Ukh0LHV0Y1llYXJzOigpPT5OSHQsdmFsdWVzOigpPT5vQXQsdmFyaWFuY2U6KCk9PmxSLHZlcnNpb246KCk9PnRNdCx2b3Jvbm9pOigpPT5MR3Qsd2luZG93OigpPT5Ddyx4bWw6KCk9PnNOdCx6aXA6KCk9PkZNdCx6b29tOigpPT5CanQsem9vbUlkZW50aXR5OigpPT5oUyx6b29tVHJhbnNmb3JtOigpPT5hRn0pO3ZhciBFcj1NKCgpPT57ZU10KCk7SE10KCk7S010KCk7Z0N0KCk7WEN0KCk7Y0F0KCk7RUF0KCk7SUF0KCk7Y1B0KCk7d1B0KCk7dDZ0KCk7Zkl0KCk7SUl0KCk7Qkx0KCk7SGt0KCk7Rzh0KCk7WDh0KCk7bFJ0KCk7SFJ0KCk7V1J0KCk7dE50KCk7cE50KCk7STd0KCk7c0Z0KCk7TkJ0KCk7T0h0KCk7bVZ0KCk7U1Z0KCk7cEd0KCk7Ukd0KCk7Vmp0KCl9KTt2YXIgV2p0PUgoR2p0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHanQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVanQ9KEVyKCksVXQoTXIpKSxXZz1VanQscWp0PVVqdDtmdW5jdGlvbiBWRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBVRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBxRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1ZEZTpVRGUpKHRoaXMsZSl9ZnVuY3Rpb24gR0RlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBvIGluIG4paS5zdHlsZShvLG5bb10scil9KX1mdW5jdGlvbiBXRGUoZSx0LHIpe2Zvcih2YXIgbiBpbiB0KWUuc3R5bGUobix0W25dLHIpO3JldHVybiBlfWZ1bmN0aW9uIFlEZShlLHQpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9HRGU6V0RlKSh0aGlzLGUsdD09bnVsbD8iIjp0KX1mdW5jdGlvbiBqRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcyk7Zm9yKHZhciBpIGluIHIpbi5wcm9wZXJ0eShpLHJbaV0pfSl9ZnVuY3Rpb24gWERlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5wcm9wZXJ0eShyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uICREZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/akRlOlhEZSkodGhpcyxlKX1mdW5jdGlvbiBLRGUoZSx0KXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIGkgaW4gciluLmF0dHIoaSxyW2ldKX0pfWZ1bmN0aW9uIFpEZShlLHQpe2Zvcih2YXIgciBpbiB0KWUuYXR0cihyLHRbcl0pO3JldHVybiBlfWZ1bmN0aW9uIEpEZShlKXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/S0RlOlpEZSkodGhpcyxlKX1mdW5jdGlvbiBRRGUoZSx0LHIpe3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpPVdnLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKGUpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gdE9lKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBlT2UoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/UURlOnRPZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycz1xRGU7V2cuc2VsZWN0aW9uLnByb3RvdHlwZS5zdHlsZXM9WURlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcz0kRGU7cWp0LnRyYW5zaXRpb24ucHJvdG90eXBlLmF0dHJzPUpEZTtxanQudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzPWVPZX0pO3ZhciBZZz1IKGlpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWWp0PShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gck9lKGUpe2lmKGUuYXR0cnM9PW51bGwpaWYoZS5ub2Rlcz09bnVsbCl7dmFyIHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3QucHVzaCh0aGlzKX0pLFlqdC5zZWxlY3RBbGwodCl9ZWxzZSByZXR1cm4gWWp0LnNlbGVjdEFsbChlLm5vZGVzKCkpO2Vsc2UgcmV0dXJuIGV9aWl0LmNvZXJjZUV4dGVybmFsRDM9ck9lfSk7dmFyIElmPUgob2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2Z1bmN0aW9uIG5PZShlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gdFtyXT1yLHR9LHt9KX1vaXQubWFrZUVudW09bk9lfSk7dmFyIFhqdD1IKGxGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGRyPShJXygpLFV0KER2dCkpLGlPZT1ZZygpLG9PZT1JZigpLGpqdD17bGluZWFyOmRyLmVhc2VMaW5lYXIscXVhZDpkci5lYXNlUXVhZCxxdWFkSW46ZHIuZWFzZVF1YWRJbixxdWFkT3V0OmRyLmVhc2VRdWFkT3V0LHF1YWRJbk91dDpkci5lYXNlUXVhZEluT3V0LGN1YmljOmRyLmVhc2VDdWJpYyxjdWJpY0luOmRyLmVhc2VDdWJpY0luLGN1YmljT3V0OmRyLmVhc2VDdWJpY091dCxjdWJpY0luT3V0OmRyLmVhc2VDdWJpY0luT3V0LHBvbHk6ZHIuZWFzZVBvbHkscG9seUluOmRyLmVhc2VQb2x5SW4scG9seU91dDpkci5lYXNlUG9seU91dCxwb2x5SW5PdXQ6ZHIuZWFzZVBvbHlJbk91dCxzaW46ZHIuZWFzZVNpbixzaW5Jbjpkci5lYXNlU2luSW4sc2luT3V0OmRyLmVhc2VTaW5PdXQsc2luSW5PdXQ6ZHIuZWFzZVNpbkluT3V0LGV4cDpkci5lYXNlRXhwLGV4cEluOmRyLmVhc2VFeHBJbixleHBPdXQ6ZHIuZWFzZUV4cE91dCxleHBJbk91dDpkci5lYXNlRXhwSW5PdXQsY2lyY2xlOmRyLmVhc2VDaXJjbGUsY2lyY2xlSW46ZHIuZWFzZUNpcmNsZUluLGNpcmNsZU91dDpkci5lYXNlQ2lyY2xlT3V0LGNpcmNsZUluT3V0OmRyLmVhc2VDaXJjbGVJbk91dCxib3VuY2U6ZHIuZWFzZUJvdW5jZSxib3VuY2VJbjpkci5lYXNlQm91bmNlSW4sYm91bmNlT3V0OmRyLmVhc2VCb3VuY2VPdXQsYm91bmNlSW5PdXQ6ZHIuZWFzZUJvdW5jZUluT3V0LGJhY2s6ZHIuZWFzZUJhY2ssYmFja0luOmRyLmVhc2VCYWNrSW4sYmFja091dDpkci5lYXNlQmFja091dCxiYWNrSW5PdXQ6ZHIuZWFzZUJhY2tJbk91dCxlbGFzdGljOmRyLmVhc2VFbGFzdGljLGVsYXN0aWNJbjpkci5lYXNlRWxhc3RpY0luLGVsYXN0aWNPdXQ6ZHIuZWFzZUVsYXN0aWNPdXQsZWxhc3RpY0luT3V0OmRyLmVhc2VFbGFzdGljSW5PdXR9O2xGLkVhc2VOYW1lPW9PZS5tYWtlRW51bShbImxpbmVhciIsInF1YWQiLCJxdWFkSW4iLCJxdWFkT3V0IiwicXVhZEluT3V0IiwiY3ViaWMiLCJjdWJpY0luIiwiY3ViaWNPdXQiLCJjdWJpY0luT3V0IiwicG9seSIsInBvbHlJbiIsInBvbHlPdXQiLCJwb2x5SW5PdXQiLCJzaW4iLCJzaW5JbiIsInNpbk91dCIsInNpbkluT3V0IiwiZXhwIiwiZXhwSW4iLCJleHBPdXQiLCJleHBJbk91dCIsImNpcmNsZSIsImNpcmNsZUluIiwiY2lyY2xlT3V0IiwiY2lyY2xlSW5PdXQiLCJib3VuY2UiLCJib3VuY2VJbiIsImJvdW5jZU91dCIsImJvdW5jZUluT3V0IiwiYmFjayIsImJhY2tJbiIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJlbGFzdGljIiwiZWxhc3RpY0luIiwiZWxhc3RpY091dCIsImVsYXN0aWNJbk91dCJdKTt2YXIgYU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3N0YXJ0RGVsYXk9ZS5fREVGQVVMVF9TVEFSVF9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcER1cmF0aW9uPWUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fc3RlcERlbGF5PWUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUyx0aGlzLl9tYXhUb3RhbER1cmF0aW9uPWUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUyx0aGlzLl9lYXNpbmdNb2RlPWUuX0RFRkFVTFRfRUFTSU5HX01PREV9cmV0dXJuIGUucHJvdG90eXBlLnRvdGFsVGltZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5KHQpO3JldHVybiB0aGlzLnN0YXJ0RGVsYXkoKStyKk1hdGgubWF4KHQtMSwwKSt0aGlzLnN0ZXBEdXJhdGlvbigpfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0PWlPZS5jb2VyY2VFeHRlcm5hbEQzKHQpO3ZhciBpPXQuc2l6ZSgpLG89dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheShpKTtyZXR1cm4gdC50cmFuc2l0aW9uKCkuZWFzZSh0aGlzLl9nZXRFYXNlRmFjdG9yeSgpKS5kdXJhdGlvbih0aGlzLnN0ZXBEdXJhdGlvbigpKS5kZWxheShmdW5jdGlvbihhLHMpe3JldHVybiBuLnN0YXJ0RGVsYXkoKStvKnN9KS5hdHRycyhyKX0sZS5wcm90b3R5cGUuc3RhcnREZWxheT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9zdGFydERlbGF5Oih0aGlzLl9zdGFydERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLnN0ZXBEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD9NYXRoLm1pbih0aGlzLl9zdGVwRHVyYXRpb24sdGhpcy5fbWF4VG90YWxEdXJhdGlvbik6KHRoaXMuX3N0ZXBEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RlcERlbGF5Oih0aGlzLl9zdGVwRGVsYXk9dCx0aGlzKX0sZS5wcm90b3R5cGUubWF4VG90YWxEdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhUb3RhbER1cmF0aW9uOih0aGlzLl9tYXhUb3RhbER1cmF0aW9uPXQsdGhpcyl9LGUucHJvdG90eXBlLmVhc2luZ01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZWFzaW5nTW9kZToodGhpcy5fZWFzaW5nTW9kZT10LHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RWFzZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVhc2luZ01vZGUoKTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPWpqdFt0XTtyZXR1cm4gcj09bnVsbD9qanQubGluZWFyOnJ9ZWxzZSByZXR1cm4gdH0sZS5wcm90b3R5cGUuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXk9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5tYXhUb3RhbER1cmF0aW9uKCktdGhpcy5zdGVwRHVyYXRpb24oKTtyPU1hdGgubWF4KHIsMCk7dmFyIG49ci9NYXRoLm1heCh0LTEsMSk7cmV0dXJuIE1hdGgubWluKHRoaXMuc3RlcERlbGF5KCksbil9LGUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTPTAsZS5fREVGQVVMVF9TVEVQX0RVUkFUSU9OX01JTExJU0VDT05EUz0zMDAsZS5fREVGQVVMVF9JVEVSQVRJVkVfREVMQVlfTUlMTElTRUNPTkRTPTE1LGUuX0RFRkFVTFRfTUFYX1RPVEFMX0RVUkFUSU9OX01JTExJU0VDT05EUz0xLzAsZS5fREVGQVVMVF9FQVNJTkdfTU9ERT0iZXhwT3V0IixlfSgpO2xGLkVhc2luZz1hT2V9KTt2YXIgJGp0PUgoYWl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzT2U9WWcoKSxsT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD1zT2UuY29lcmNlRXh0ZXJuYWxEMyh0KSx0LmF0dHJzKHIpfSxlfSgpO2FpdC5OdWxsPWxPZX0pO3ZhciBMZj1IKGNGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtqdD0oZGUoKSxVdChwZSkpO0tqdC5fX2V4cG9ydFN0YXIoWGp0KCksY0YpO0tqdC5fX2V4cG9ydFN0YXIoJGp0KCksY0YpfSk7dmFyIFpqdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgY09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmNhY2hlPXt9LHRoaXMuY29tcHV0ZT10fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FjaGUuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmNhY2hlW3RdPXRoaXMuY29tcHV0ZSh0KSksdGhpcy5jYWNoZVt0XX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYWNoZT17fSx0aGlzfSxlfSgpO3NpdC5DYWNoZT1jT2V9KTt2YXIgSmp0PUgobGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1T2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFycmF5RXE9ZnVuY3Rpb24odCxyKXtpZih0PT1udWxsfHxyPT1udWxsKXJldHVybiB0PT09cjtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl0hPT1yW25dKXJldHVybiExO3JldHVybiEwfSxlLm9iakVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7dmFyIG49T2JqZWN0LmtleXModCkuc29ydCgpLGk9T2JqZWN0LmtleXMocikuc29ydCgpLG89bi5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRbc119KSxhPWkubWFwKGZ1bmN0aW9uKHMpe3JldHVybiByW3NdfSk7cmV0dXJuIGUuYXJyYXlFcShuLGkpJiZlLmFycmF5RXEobyxhKX0sZS5zdHJpY3RFcT1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cn0sZS5kZWZhdWx0cz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtpZih0PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCIpO3ZhciBpPU9iamVjdCh0KTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe2lmKG8hPW51bGwpZm9yKHZhciBhIGluIG8pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sYSkmJihpW2FdPW9bYV0pfSksaX0sZX0oKTtsaXQuTWV0aG9kcz11T2V9KTt2YXIgUWp0PUgoY2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmNvbWJpbmVXaGl0ZXNwYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1sgXHRdKy9nLCIgIil9LGUuaXNOb3RFbXB0eVN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC50cmltKCkhPT0iIn0sZS50cmltU3RhcnQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKSxpPXI/ZnVuY3Rpb24obyl7cmV0dXJuIG8uc3BsaXQocikuc29tZShlLmlzTm90RW1wdHlTdHJpbmcpfTplLmlzTm90RW1wdHlTdHJpbmc7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkobythKT9vK2E6b30sIiIpfSxlLnRyaW1FbmQ9ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm4gdDt2YXIgbj10LnNwbGl0KCIiKTtyZXR1cm4gbi5yZXZlcnNlKCksbj1lLnRyaW1TdGFydChuLmpvaW4oIiIpLHIpLnNwbGl0KCIiKSxuLnJldmVyc2UoKSxuLmpvaW4oIiIpfSxlfSgpO2NpdC5TdHJpbmdNZXRob2RzPWhPZX0pO3ZhciB0WHQ9SCh1aXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLldvcmREaXZpZGVyUmVnRXhwPW5ldyBSZWdFeHAoIlxcVyIpLHRoaXMuV2hpdGVzcGFjZVJlZ0V4cD1uZXcgUmVnRXhwKCJcXHMiKX1yZXR1cm4gZS5wcm90b3R5cGUudG9rZW5pemU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm4gdC5zcGxpdCgiIikucmVkdWNlKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG4uc2xpY2UoMCwtMSkuY29uY2F0KHIuc2hvdWxkQ3JlYXRlTmV3VG9rZW4obltuLmxlbmd0aC0xXSxpKSl9LFsiIl0pfSxlLnByb3RvdHlwZS5zaG91bGRDcmVhdGVOZXdUb2tlbj1mdW5jdGlvbih0LHIpe2lmKCF0KXJldHVybltyXTt2YXIgbj10W3QubGVuZ3RoLTFdO3JldHVybiB0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChuKSYmdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qocik/W3Qrcl06dGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3Qobil8fHRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0LHJdOnRoaXMuV29yZERpdmlkZXJSZWdFeHAudGVzdChuKT9uPT09cj9bdCtyXTpbdCxyXTpbdCtyXX0sZX0oKTt1aXQuVG9rZW5pemVyPWZPZX0pO3ZhciBwUz1IKHVGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGhGKGUpe2Zvcih2YXIgdCBpbiBlKXVGLmhhc093blByb3BlcnR5KHQpfHwodUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHVGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtoRihaanQoKSk7aEYoSmp0KCkpO2hGKFFqdCgpKTtoRih0WHQoKSl9KTt2YXIgclh0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlWHQ9cFMoKSxwT2U9e3RleHRSb3RhdGlvbjowLHRleHRTaGVhcjowLHhBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AifSxmRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuX21lYXN1cmVyPXQsdGhpcy5fcGVuRmFjdG9yeT1yLHRoaXMuX3dyYXBwZXI9bn1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21lYXN1cmVyPXQsdGhpc30sZS5wcm90b3R5cGUud3JhcHBlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd3JhcHBlcj10LHRoaXN9LGUucHJvdG90eXBlLnBlbkZhY3Rvcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BlbkZhY3Rvcnk9dCx0aGlzfSxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LHIsbixpLG8pe2lmKGk9PT12b2lkIDAmJihpPXt9KSxpPWVYdC5NZXRob2RzLmRlZmF1bHRzKHt9LHBPZSxpKSxlLlN1cHBvcnRlZFJvdGF0aW9uLmluZGV4T2YoaS50ZXh0Um90YXRpb24pPT09LTEpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCByb3RhdGlvbiAtICIraS50ZXh0Um90YXRpb24rIi4gU3VwcG9ydGVkIHJvdGF0aW9ucyBhcmUgIitlLlN1cHBvcnRlZFJvdGF0aW9uLmpvaW4oIiwgIikpO2lmKGkudGV4dFNoZWFyIT1udWxsJiZpLnRleHRTaGVhcjwtODB8fGkudGV4dFNoZWFyPjgwKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgc2hlYXIgYW5nbGUgLSAiK2kudGV4dFNoZWFyKyIuIE11c3QgYmUgYmV0d2VlbiAtODAgYW5kIDgwIik7dmFyIGE9TWF0aC5hYnMoTWF0aC5hYnMoaS50ZXh0Um90YXRpb24pLTkwKT40NSxzPWE/cjpuLGw9YT9uOnIsYz1pLnRleHRTaGVhcix1PWMqTWF0aC5QSS8xODAsaD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGY9aCpNYXRoLnRhbih1KSxwPXMvTWF0aC5jb3ModSktTWF0aC5hYnMoZiksZD1sKk1hdGguY29zKHUpLGc9ZVh0LlN0cmluZ01ldGhvZHMuY29tYmluZVdoaXRlc3BhY2UodCksXz10aGlzLl93cmFwcGVyP3RoaXMuX3dyYXBwZXIud3JhcChnLHRoaXMuX21lYXN1cmVyLHAsZCkud3JhcHBlZFRleHQ6Zyx5PV8uc3BsaXQoYApgKSx4PWUuWE9mZnNldEZhY3RvcltpLnhBbGlnbl0qcCpNYXRoLnNpbih1KSxiPWUuWU9mZnNldEZhY3RvcltpLnlBbGlnbl0qKGQteS5sZW5ndGgqaCksUz14LWIsQz1bMCwwXSxQPWkudGV4dFJvdGF0aW9uK2M7c3dpdGNoKGkudGV4dFJvdGF0aW9uKXtjYXNlIDkwOkM9W3IrUywwXTticmVhaztjYXNlLTkwOkM9Wy1TLG5dO2JyZWFrO2Nhc2UgMTgwOkM9W3IsbitTXTticmVhaztkZWZhdWx0OkM9WzAsLVNdO2JyZWFrfXZhciBrPXRoaXMuX3BlbkZhY3RvcnkuY3JlYXRlUGVuKHQse3RyYW5zbGF0ZTpDLHJvdGF0ZTpQfSxvKTt0aGlzLndyaXRlTGluZXMoeSxrLHAsaCxmLGkueEFsaWduKSxrLmRlc3Ryb3khPW51bGwmJmsuZGVzdHJveSgpfSxlLnByb3RvdHlwZS53cml0ZUxpbmVzPWZ1bmN0aW9uKHQscixuLGksbyxhKXt0LmZvckVhY2goZnVuY3Rpb24ocyxsKXt2YXIgYz1vPjA/KGwrMSkqbzpsKm87ci53cml0ZShzLG4sYSxjLChsKzEpKmkpfSl9LGV9KCk7ZkYuWE9mZnNldEZhY3Rvcj17Y2VudGVyOi41LGxlZnQ6MCxyaWdodDoxfTtmRi5ZT2Zmc2V0RmFjdG9yPXtib3R0b206MSxjZW50ZXI6LjUsdG9wOjB9O2ZGLlN1cHBvcnRlZFJvdGF0aW9uPVstOTAsMCwxODAsOTBdO2hpdC5Xcml0ZXI9ZkZ9KTt2YXIgRkE9SChwRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkT2UoZSl7Zm9yKHZhciB0IGluIGUpcEYuaGFzT3duUHJvcGVydHkodCl8fChwRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkocEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RPZShyWHQoKSl9KTt2YXIgZml0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gZS5hZGRDbGFzc2VzLmFwcGx5KGUsW2ldLmNvbmNhdChyKSksaX0sZS5hZGRDbGFzc2VzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3I9ci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGkhPW51bGx9KSx0LmNsYXNzTGlzdCE9bnVsbD9yLmZvckVhY2goZnVuY3Rpb24oaSl7dC5jbGFzc0xpc3QuYWRkKGkpfSk6dC5zZXRBdHRyaWJ1dGUoImNsYXNzIixyLmpvaW4oIiAiKSl9LGUuZ2V0RGltZW5zaW9ucz1mdW5jdGlvbih0KXtpZih0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl0cnl7dmFyIHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtkRi5IdG1sVXRpbHM9QkE7dmFyIG1PZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZT1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGE9QkEuYXBwZW5kKGkuZWxlbWVudCwic3BhbiIsInRleHQtdG1wIixpLmNsYXNzTmFtZSk7YS50ZXh0Q29udGVudD1vO3ZhciBzPUJBLmdldERpbWVuc2lvbnMoYSk7cmV0dXJuIGkuZWxlbWVudC5yZW1vdmVDaGlsZChhKSxzfX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9QkEuYXBwZW5kKHMsImRpdiIsInRleHQtYmxvY2siLGkuY2xhc3NOYW1lKTtyZXR1cm4gbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwgLTFlbSkgIisoInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyJweCwgIithLnRyYW5zbGF0ZVsxXSsicHgpICIpKygicm90YXRlKCIrYS5yb3RhdGUrImRlZykiKSxsLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0iMCAxLjJlbSIsaS5hZGRUaXRsZSYmbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSxpLmNyZWF0ZUh0bWxMaW5lUGVuKGwpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0QWRkVGl0bGU9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZT10fSxlLnByb3RvdHlwZS5jcmVhdGVIdG1sTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz1CQS5hcHBlbmQodCwiZGl2IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc3R5bGUud2lkdGg9bisicHgiLHMuc3R5bGUudGV4dEFsaWduPWkscy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHMuc3R5bGUud2hpdGVTcGFjZT0ibm93cmFwIixzLnN0eWxlLnRvcD1hKyJweCIscy5zdHlsZS5sZWZ0PW8rInB4In19fSxlfSgpO2RGLkh0bWxDb250ZXh0PW1PZX0pO3ZhciBvWHQ9SChtRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBnT2U9RkEoKSxuWHQ9Zml0KCksamc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLmFwcGVuZD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1bXSxpPTI7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ktMl09YXJndW1lbnRzW2ldO3ZhciBvPWUuY3JlYXRlLmFwcGx5KGUsW3JdLmNvbmNhdChuKSk7cmV0dXJuIHQuYXBwZW5kQ2hpbGQobyksb30sZS5jcmVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuU1ZHX05TLHQpO3JldHVybiBuWHQuSHRtbFV0aWxzLmFkZENsYXNzZXMuYXBwbHkoblh0Lkh0bWxVdGlscyxbaV0uY29uY2F0KHIpKSxpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCQm94KXRyeXt2YXIgcj10LmdldEJCb3goKSxuPXIud2lkdGgsaT1yLmhlaWdodDtyZXR1cm57d2lkdGg6bixoZWlnaHQ6aX19Y2F0Y2gobyl7fXJldHVybntoZWlnaHQ6MCx3aWR0aDowfX0sZX0oKTtqZy5TVkdfTlM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjttRi5TdmdVdGlscz1qZzt2YXIgaVh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXM7dGhpcy5lbGVtZW50PXQsdGhpcy5jbGFzc05hbWU9cix0aGlzLmFkZFRpdGxlRWxlbWVudD1uLHRoaXMuY3JlYXRlUnVsZXI9ZnVuY3Rpb24oKXt2YXIgbz1pLmdldFRleHRFbGVtZW50cyhpLmVsZW1lbnQpLGE9by5wYXJlbnRFbGVtZW50LHM9by5jb250YWluZXJFbGVtZW50LGw9by50ZXh0RWxlbWVudDtyZXR1cm4gZnVuY3Rpb24oYyl7YS5hcHBlbmRDaGlsZChzKSxsLnRleHRDb250ZW50PWM7dmFyIHU9amcuZ2V0RGltZW5zaW9ucyhsKTtyZXR1cm4gYS5yZW1vdmVDaGlsZChzKSx1fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3M9PW51bGwmJihzPWkuZWxlbWVudCk7dmFyIGw9amcuYXBwZW5kKHMsImciLCJ0ZXh0LWNvbnRhaW5lciIsaS5jbGFzc05hbWUpO2kuYWRkVGl0bGVFbGVtZW50JiYoamcuYXBwZW5kKGwsInRpdGxlIikudGV4dENvbnRlbnQ9byxsLnNldEF0dHJpYnV0ZSgidGl0bGUiLG8pKTt2YXIgYz1qZy5hcHBlbmQobCwiZyIsInRleHQtYXJlYSIpO3JldHVybiBjLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrYS50cmFuc2xhdGVbMF0rIiwiK2EudHJhbnNsYXRlWzFdKyIpIisoInJvdGF0ZSgiK2Eucm90YXRlKyIpIikpLGkuY3JlYXRlU3ZnTGluZVBlbihjKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlRWxlbWVudD1mdW5jdGlvbih0KXt0aGlzLmFkZFRpdGxlRWxlbWVudD10fSxlLnByb3RvdHlwZS5jcmVhdGVTdmdMaW5lUGVuPWZ1bmN0aW9uKHQpe3JldHVybnt3cml0ZTpmdW5jdGlvbihyLG4saSxvLGEpe28rPW4qZ09lLldyaXRlci5YT2Zmc2V0RmFjdG9yW2ldO3ZhciBzPWpnLmFwcGVuZCh0LCJ0ZXh0IiwidGV4dC1saW5lIik7cy50ZXh0Q29udGVudD1yLHMuc2V0QXR0cmlidXRlKCJ0ZXh0LWFuY2hvciIsZS5BbmNob3JNYXBbaV0pLHMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvKyIsIithKyIpIikscy5zZXRBdHRyaWJ1dGUoInkiLCItMC4yNWVtIil9fX0sZS5wcm90b3R5cGUuZ2V0VGV4dEVsZW1lbnRzPWZ1bmN0aW9uKHQpe2lmKHQudGFnTmFtZT09PSJ0ZXh0Iil7dmFyIHI9dC5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj10LnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQodCkse2NvbnRhaW5lckVsZW1lbnQ6dCxwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6dH19dmFyIG49dC5xdWVyeVNlbGVjdG9yKCJ0ZXh0Iik7aWYobiE9bnVsbCl7dmFyIHI9bi5wYXJlbnRFbGVtZW50O3JldHVybiByPT1udWxsJiYocj1uLnBhcmVudE5vZGUpLHIucmVtb3ZlQ2hpbGQobikse2NvbnRhaW5lckVsZW1lbnQ6bixwYXJlbnRFbGVtZW50OnIsdGV4dEVsZW1lbnQ6bn19dmFyIGk9amcuY3JlYXRlKCJ0ZXh0Iix0aGlzLmNsYXNzTmFtZSk7cmV0dXJue2NvbnRhaW5lckVsZW1lbnQ6aSxwYXJlbnRFbGVtZW50OnQsdGV4dEVsZW1lbnQ6aX19LGV9KCk7aVh0LkFuY2hvck1hcD17Y2VudGVyOiJtaWRkbGUiLGxlZnQ6InN0YXJ0IixyaWdodDoiZW5kIn07bUYuU3ZnQ29udGV4dD1pWHR9KTt2YXIgYVh0PUgocGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfT2U9RkEoKSx5T2U9IiM0NDQiLHZPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3I9PT12b2lkIDAmJihyPTEwKSxuPT09dm9pZCAwJiYobj17fSk7dmFyIGk9dGhpczt0aGlzLmN0eD10LHRoaXMubGluZUhlaWdodD1yLHRoaXMuc3R5bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe2kuY3R4LmZvbnQ9aS5zdHlsZS5mb250O3ZhciBhPWkuY3R4Lm1lYXN1cmVUZXh0KG8pLndpZHRoO3JldHVybnt3aWR0aDphLGhlaWdodDppLmxpbmVIZWlnaHR9fX0sdGhpcy5jcmVhdGVQZW49ZnVuY3Rpb24obyxhLHMpe3JldHVybiBzPT1udWxsJiYocz1pLmN0eCkscy5zYXZlKCkscy50cmFuc2xhdGUoYS50cmFuc2xhdGVbMF0sYS50cmFuc2xhdGVbMV0pLHMucm90YXRlKGEucm90YXRlKk1hdGguUEkvMTgwKSxpLmNyZWF0ZUNhbnZhc1BlbihzKX0sdGhpcy5zdHlsZS5maWxsPT09dm9pZCAwJiYodGhpcy5zdHlsZS5maWxsPXlPZSl9cmV0dXJuIGUucHJvdG90eXBlLmNyZWF0ZUNhbnZhc1Blbj1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3JldHVybntkZXN0cm95OmZ1bmN0aW9uKCl7dC5yZXN0b3JlKCl9LHdyaXRlOmZ1bmN0aW9uKG4saSxvLGEscyl7YSs9aSpfT2UuV3JpdGVyLlhPZmZzZXRGYWN0b3Jbb10sdC50ZXh0QWxpZ249byxyLnN0eWxlLmZvbnQhPW51bGwmJih0LmZvbnQ9ci5zdHlsZS5mb250KSxyLnN0eWxlLmZpbGwhPW51bGwmJih0LmZpbGxTdHlsZT1yLnN0eWxlLmZpbGwsdC5maWxsVGV4dChuLGEscykpLHIuc3R5bGUuc3Ryb2tlIT1udWxsJiYodC5zdHJva2VTdHlsZT1yLnN0eWxlLmZpbGwsdC5zdHJva2VUZXh0KG4sYSxzKSl9fX0sZX0oKTtwaXQuQ2FudmFzQ29udGV4dD12T2V9KTt2YXIgbWl0PUgoZ0Y9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZGl0KGUpe2Zvcih2YXIgdCBpbiBlKWdGLmhhc093blByb3BlcnR5KHQpfHwoZ0ZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGdGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkaXQob1h0KCkpO2RpdChhWHQoKSk7ZGl0KGZpdCgpKX0pO3ZhciBfRj1IKGdpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc1h0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0LmNyZWF0ZVJ1bGVyIT1udWxsP3RoaXMucnVsZXI9dC5jcmVhdGVSdWxlcigpOnRoaXMucnVsZXI9dH1yZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9ZS5IRUlHSFRfVEVYVCksdGhpcy5ydWxlcih0KX0sZX0oKTtzWHQuSEVJR0hUX1RFWFQ9ImJkcHFsIjtnaXQuQWJzdHJhY3RNZWFzdXJlcj1zWHR9KTt2YXIgX2l0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIHhPZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlGPV9GKCksYk9lPWZ1bmN0aW9uKGUpe3hPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIGkudXNlR3VhcmRzPW4saX1yZXR1cm4gdC5wcm90b3R5cGUuX2FkZEd1YXJkcz1mdW5jdGlvbihyKXtyZXR1cm4geUYuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCtyK3lGLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFR9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLnVzZUd1YXJkc3x8bnx8L15bXHQgXSQvLnRlc3Qociksbz1pP3RoaXMuX2FkZEd1YXJkcyhyKTpyLGE9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMsbyk7cmV0dXJuIGEud2lkdGgtPWk/Mip0aGlzLmdldEd1YXJkV2lkdGgoKTowLGF9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj15Ri5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSxyLnRyaW0oKT09PSIiKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgaT1yLnRyaW0oKS5zcGxpdChgCmApLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUxpbmUobyl9KTtyZXR1cm57aGVpZ2h0OmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS5oZWlnaHR9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIE1hdGgubWF4KG8sYS53aWR0aCl9LDApfX0sdC5wcm90b3R5cGUuZ2V0R3VhcmRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmd1YXJkV2lkdGg9PW51bGwmJih0aGlzLmd1YXJkV2lkdGg9ZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMpLndpZHRoKSx0aGlzLmd1YXJkV2lkdGh9LHR9KHlGLkFic3RyYWN0TWVhc3VyZXIpO0hBLk1lYXN1cmVyPWJPZX0pO3ZhciB5aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgd09lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU09lPV9pdCgpLE1PZT1mdW5jdGlvbihlKXt3T2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlTGluZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9tZWFzdXJlTGluZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ci5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQ2hhcmFjdGVyKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEuaGVpZ2h0KX0sMCksd2lkdGg6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gbythLndpZHRofSwwKX19LHR9KFNPZS5NZWFzdXJlcik7VkEuQ2hhcmFjdGVyTWVhc3VyZXI9TU9lfSk7dmFyIHZpdD1IKFVBPT57InVzZSBzdHJpY3QiO3ZhciBFT2U9VUEmJlVBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUT2U9cFMoKSxDT2U9eWl0KCksQU9lPWZ1bmN0aW9uKGUpe0VPZSh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmNhY2hlPW5ldyBUT2UuQ2FjaGUoZnVuY3Rpb24obyl7cmV0dXJuIGkuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGUobyl9KSxpfXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlck5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXIuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUNoYXJhY3Rlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5jYWNoZS5nZXQocil9LHQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5jYWNoZS5jbGVhcigpfSx0fShDT2UuQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXI9QU9lfSk7dmFyIGxYdD1IKHFBPT57InVzZSBzdHJpY3QiO3ZhciBQT2U9cUEmJnFBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJT2U9cFMoKSxMT2U9X0YoKSxrT2U9dml0KCksUk9lPWZ1bmN0aW9uKGUpe1BPZSh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uZGltQ2FjaGU9bmV3IElPZS5DYWNoZShmdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZU5vdEZyb21DYWNoZShpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlTm90RnJvbUNhY2hlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5tZWFzdXJlLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUubWVhc3VyZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMCYmKHI9TE9lLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQpLHRoaXMuZGltQ2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuZGltQ2FjaGUuY2xlYXIoKSxlLnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpfSx0fShrT2UuQ2FjaGVDaGFyYWN0ZXJNZWFzdXJlcik7cUEuQ2FjaGVNZWFzdXJlcj1ST2V9KTt2YXIgeGl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gR0EoZSl7Zm9yKHZhciB0IGluIGUpdkYuaGFzT3duUHJvcGVydHkodCl8fCh2Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0dBKF9GKCkpO0dBKHZpdCgpKTtHQShsWHQoKSk7R0EoeWl0KCkpO0dBKF9pdCgpKX0pO3ZhciB3aXQ9SChiaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdBPXBTKCksTk9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWF4TGluZXMoMS8wKSx0aGlzLnRleHRUcmltbWluZygiZWxsaXBzaXMiKSx0aGlzLmFsbG93QnJlYWtpbmdXb3JkcyghMSksdGhpcy5fdG9rZW5pemVyPW5ldyBXQS5Ub2tlbml6ZXIsdGhpcy5fYnJlYWtpbmdDaGFyYWN0ZXI9Ii0ifXJldHVybiBlLnByb3RvdHlwZS5tYXhMaW5lcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9dCx0aGlzKX0sZS5wcm90b3R5cGUudGV4dFRyaW1taW5nPWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3RleHRUcmltbWluZztpZih0IT09ImVsbGlwc2lzIiYmdCE9PSJub25lIil0aHJvdyBuZXcgRXJyb3IodCsiIC0gdW5zdXBwb3J0ZWQgdGV4dCB0cmltbWluZyBvcHRpb24uIik7cmV0dXJuIHRoaXMuX3RleHRUcmltbWluZz10LHRoaXN9LGUucHJvdG90eXBlLmFsbG93QnJlYWtpbmdXb3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9hbGxvd0JyZWFraW5nV29yZHM6KHRoaXMuX2FsbG93QnJlYWtpbmdXb3Jkcz10LHRoaXMpfSxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9MS8wKTt2YXIgYT17bm9Ccm9rZVdvcmRzOjAsbm9MaW5lczowLG9yaWdpbmFsVGV4dDp0LHRydW5jYXRlZFRleHQ6IiIsd3JhcHBlZFRleHQ6IiJ9LHM9e2F2YWlsYWJsZUxpbmVzOk1hdGgubWluKE1hdGguZmxvb3IoaS9yLm1lYXN1cmUoKS5oZWlnaHQpLHRoaXMuX21heExpbmVzKSxhdmFpbGFibGVXaWR0aDpuLGNhbkZpdFRleHQ6ITAsY3VycmVudExpbmU6IiIsd3JhcHBpbmc6YX0sbD10LnNwbGl0KGAKYCk7cmV0dXJuIGwucmVkdWNlKGZ1bmN0aW9uKGMsdSxoKXtyZXR1cm4gby5icmVha0xpbmVUb0ZpdFdpZHRoKGMsdSxoIT09bC5sZW5ndGgtMSxyKX0scykud3JhcHBpbmd9LGUucHJvdG90eXBlLmJyZWFrTGluZVRvRml0V2lkdGg9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dGhpczshdC5jYW5GaXRUZXh0JiZ0LndyYXBwaW5nLnRydW5jYXRlZFRleHQhPT0iIiYmKHQud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YApgKTt2YXIgYT10aGlzLl90b2tlbml6ZXIudG9rZW5pemUocik7dD1hLnJlZHVjZShmdW5jdGlvbihsLGMpe3JldHVybiBvLndyYXBOZXh0VG9rZW4oYyxsLGkpfSx0KTt2YXIgcz1XQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5jdXJyZW50TGluZSk7cmV0dXJuIHQud3JhcHBpbmcubm9MaW5lcys9KyhzIT09IiIpLHQud3JhcHBpbmcubm9MaW5lcz09PXQuYXZhaWxhYmxlTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIiYmbj90LmNhbkZpdFRleHQ9ITE6dC53cmFwcGluZy53cmFwcGVkVGV4dCs9cyx0LmN1cnJlbnRMaW5lPWAKYCx0fSxlLnByb3RvdHlwZS5jYW5GaXRUb2tlbj1mdW5jdGlvbih0LHIsbil7dmFyIGk9dGhpcyxvPXQuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBzIT09dC5sZW5ndGgtMT9hK2kuX2JyZWFraW5nQ2hhcmFjdGVyOmF9KTtyZXR1cm4gbi5tZWFzdXJlKHQpLndpZHRoPD1yfHxvLmV2ZXJ5KGZ1bmN0aW9uKGEpe3JldHVybiBuLm1lYXN1cmUoYSkud2lkdGg8PXJ9KX0sZS5wcm90b3R5cGUuYWRkRWxsaXBzaXM9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX3RleHRUcmltbWluZz09PSJub25lIilyZXR1cm57cmVtYWluaW5nVG9rZW46IiIsd3JhcHBlZFRva2VuOnR9O3ZhciBpPXQuc3Vic3RyaW5nKDApLnRyaW0oKSxvPW4ubWVhc3VyZShpKS53aWR0aCxhPW4ubWVhc3VyZSgiLi4uIikud2lkdGgscz10Lmxlbmd0aD4wJiZ0WzBdPT09YApgP2AKYDoiIjtpZihyPD1hKXt2YXIgbD1hLzMsYz1NYXRoLmZsb29yKHIvbCk7cmV0dXJue3JlbWFpbmluZ1Rva2VuOnQsd3JhcHBlZFRva2VuOnMrIi4uLiIuc3Vic3RyKDAsYyl9fWZvcig7bythPnI7KWk9V0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKGkuc3Vic3RyKDAsaS5sZW5ndGgtMSkpLG89bi5tZWFzdXJlKGkpLndpZHRoO3JldHVybntyZW1haW5pbmdUb2tlbjpXQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQodC5zdWJzdHJpbmcoaS5sZW5ndGgpLCItIikudHJpbSgpLHdyYXBwZWRUb2tlbjpzK2krIi4uLiJ9fSxlLnByb3RvdHlwZS53cmFwTmV4dFRva2VuPWZ1bmN0aW9uKHQscixuKXtpZighci5jYW5GaXRUZXh0fHxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzfHwhdGhpcy5jYW5GaXRUb2tlbih0LHIuYXZhaWxhYmxlV2lkdGgsbikpcmV0dXJuIHRoaXMuZmluaXNoV3JhcHBpbmcodCxyLG4pO2Zvcih2YXIgaT10O2k7KXt2YXIgbz10aGlzLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGgoaSxyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7aWYoci5jdXJyZW50TGluZT1vLmxpbmUsaT1vLnJlbWFpbmluZ1Rva2VuLGkhPW51bGwpaWYoci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPStvLmJyZWFrV29yZCwrK3Iud3JhcHBpbmcubm9MaW5lcyxyLmF2YWlsYWJsZUxpbmVzPT09ci53cmFwcGluZy5ub0xpbmVzKXt2YXIgYT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUsci5hdmFpbGFibGVXaWR0aCxuKTtyZXR1cm4gci53cmFwcGluZy53cmFwcGVkVGV4dCs9YS53cmFwcGVkVG9rZW4sci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz1hLnJlbWFpbmluZ1Rva2VuK2ksci5jdXJyZW50TGluZT1gCmAscn1lbHNlIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPVdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChyLmN1cnJlbnRMaW5lKSxyLmN1cnJlbnRMaW5lPWAKYH1yZXR1cm4gcn0sZS5wcm90b3R5cGUuZmluaXNoV3JhcHBpbmc9ZnVuY3Rpb24odCxyLG4pe2lmKHIuY2FuRml0VGV4dCYmci5hdmFpbGFibGVMaW5lcyE9PXIud3JhcHBpbmcubm9MaW5lcyYmdGhpcy5fdGV4dFRyaW1taW5nIT09Im5vbmUiKXt2YXIgaT10aGlzLmFkZEVsbGlwc2lzKHIuY3VycmVudExpbmUrdCxyLmF2YWlsYWJsZVdpZHRoLG4pO3Iud3JhcHBpbmcud3JhcHBlZFRleHQrPWkud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9aS5yZW1haW5pbmdUb2tlbixyLndyYXBwaW5nLm5vQnJva2VXb3Jkcys9KyhpLnJlbWFpbmluZ1Rva2VuLmxlbmd0aDx0Lmxlbmd0aCksci53cmFwcGluZy5ub0xpbmVzKz0rKGkud3JhcHBlZFRva2VuLmxlbmd0aD4wKSxyLmN1cnJlbnRMaW5lPSIifWVsc2Ugci53cmFwcGluZy50cnVuY2F0ZWRUZXh0Kz10O3JldHVybiByLmNhbkZpdFRleHQ9ITEscn0sZS5wcm90b3R5cGUuYnJlYWtUb2tlblRvRml0SW5XaWR0aD1mdW5jdGlvbih0LHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPXRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyKSxpLm1lYXN1cmUocit0KS53aWR0aDw9bilyZXR1cm57YnJlYWtXb3JkOiExLGxpbmU6cit0LHJlbWFpbmluZ1Rva2VuOm51bGx9O2lmKHQudHJpbSgpPT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46IiJ9O2lmKCF0aGlzLl9hbGxvd0JyZWFraW5nV29yZHMmJnIudHJpbSgpIT09IiIpcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIscmVtYWluaW5nVG9rZW46dH07Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aCYmaS5tZWFzdXJlKHIrdC5zdWJzdHJpbmcoMCxhKzEpK28pLndpZHRoPD1uOykrK2E7dmFyIHM9IiI7cmV0dXJuIGE+MCYmKHM9bykse2JyZWFrV29yZDphPjAsbGluZTpyK3Quc3Vic3RyaW5nKDAsYSkrcyxyZW1haW5pbmdUb2tlbjp0LnN1YnN0cmluZyhhKX19LGV9KCk7Yml0LldyYXBwZXI9Tk9lfSk7dmFyIHVYdD1IKFlBPT57InVzZSBzdHJpY3QiO3ZhciBET2U9WUEmJllBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWUEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPT2U9d2l0KCksY1h0PWZ1bmN0aW9uKGUpe0RPZSh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXM7bz09PXZvaWQgMCYmKG89MS8wKTt2YXIgcz1yLnNwbGl0KGAKYCk7aWYocy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlNpbmdsZUxpbmVXcmFwcGVyIGlzIGRlc2lnbmVkIHRvIHdvcmsgb25seSBvbiBzaW5nbGUgbGluZSIpO3ZhciBsPWZ1bmN0aW9uKGcpe3JldHVybiBlLnByb3RvdHlwZS53cmFwLmNhbGwoYSxyLG4sZyxvKX0sYz1sKGkpO2lmKGMubm9MaW5lczwyKXJldHVybiBjO2Zvcih2YXIgdT0wLGg9aSxmPTA7Zjx0Lk5PX1dSQVBfSVRFUkFUSU9OUyYmaD51OysrZil7dmFyIHA9KGgrdSkvMixkPWwocCk7dGhpcy5hcmVTYW1lUmVzdWx0cyhjLGQpPyhoPXAsYz1kKTp1PXB9cmV0dXJuIGN9LHQucHJvdG90eXBlLmFyZVNhbWVSZXN1bHRzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIubm9MaW5lcz09PW4ubm9MaW5lcyYmci50cnVuY2F0ZWRUZXh0PT09bi50cnVuY2F0ZWRUZXh0fSx0fShPT2UuV3JhcHBlcik7Y1h0Lk5PX1dSQVBfSVRFUkFUSU9OUz01O1lBLlNpbmdsZUxpbmVXcmFwcGVyPWNYdH0pO3ZhciBTaXQ9SCh4Rj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBoWHQoZSl7Zm9yKHZhciB0IGluIGUpeEYuaGFzT3duUHJvcGVydHkodCl8fCh4Rlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoeEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2hYdCh1WHQoKSk7aFh0KHdpdCgpKX0pO3ZhciBmWHQ9SChFaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEVpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1pdD1taXQoKSx6T2U9eGl0KCksRk9lPVNpdCgpLEJPZT1GQSgpLEhPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jb250ZXh0PXQsdGhpcy5tZWFzdXJlcj1uZXcgek9lLkNhY2hlTWVhc3VyZXIodGhpcy5jb250ZXh0KSx0aGlzLndyYXBwZXI9bmV3IEZPZS5XcmFwcGVyLHRoaXMud3JpdGVyPW5ldyBCT2UuV3JpdGVyKHRoaXMubWVhc3VyZXIsdGhpcy5jb250ZXh0LHRoaXMud3JhcHBlcil9cmV0dXJuIGUuc3ZnPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5TdmdDb250ZXh0KHQscixuKSl9LGUuY2FudmFzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUobmV3IE1pdC5DYW52YXNDb250ZXh0KHQscixuKSl9LGUuaHRtbD1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBNaXQuSHRtbENvbnRleHQodCxyLG4pKX0sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXt0aGlzLndyaXRlci53cml0ZSh0LHIsbixpLG8pfSxlLnByb3RvdHlwZS5jbGVhck1lYXN1cmVyQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLm1lYXN1cmVyLnJlc2V0KCl9LGV9KCk7RWl0LlR5cGVzZXR0ZXI9SE9lfSk7dmFyIF9sPUgoYkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZFMoZSl7Zm9yKHZhciB0IGluIGUpYkYuaGFzT3duUHJvcGVydHkodCl8fChiRlt0XT1lW3RdKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2RTKG1pdCgpKTtkUyh4aXQoKSk7ZFMoZlh0KCkpO2RTKHBTKCkpO2RTKFNpdCgpKTtkUyhGQSgpKX0pO3ZhciBwWHQ9SChtUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWT2U9KEVyKCksVXQoTXIpKSxVT2U9d2luZG93LkFycmF5O2Z1bmN0aW9uIHFPZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhdHRlbXB0ZWQgdG8gYWRkIGFycmF5cyBvZiB1bmVxdWFsIGxlbmd0aCIpO3JldHVybiBlLm1hcChmdW5jdGlvbihyLG4pe3JldHVybiBlW25dK3Rbbl19KX1tUy5hZGQ9cU9lO2Z1bmN0aW9uIEdPZShlKXt2YXIgdD1WT2Uuc2V0KCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3QuaGFzKFN0cmluZyhuKSl8fCh0LmFkZChTdHJpbmcobikpLHIucHVzaChuKSl9KSxyfW1TLnVuaXE9R09lO2Z1bmN0aW9uIFdPZShlKXtyZXR1cm4gVU9lLnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9bVMuZmxhdHRlbj1XT2U7ZnVuY3Rpb24gWU9lKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPHQ7bisrKXJbbl09dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTplO3JldHVybiByfW1TLmNyZWF0ZUZpbGxlZEFycmF5PVlPZX0pO3ZhciBnWHQ9SChqQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtWHQ9KEVyKCksVXQoTXIpKSxqT2U9d2luZG93Lk1hdGg7ZnVuY3Rpb24gWE9lKGUsdCl7dmFyIHI9ZFh0KGUpKy4wNSxuPWRYdCh0KSsuMDU7cmV0dXJuIHI+bj9yL246bi9yfWpBLmNvbnRyYXN0PVhPZTtmdW5jdGlvbiAkT2UoZSx0KXt2YXIgcj1tWHQuY29sb3IoZSkuYnJpZ2h0ZXIodCk7cmV0dXJuIHIucmdiKCkudG9TdHJpbmcoKX1qQS5saWdodGVuQ29sb3I9JE9lO2Z1bmN0aW9uIEtPZShlLHQpe2UuY2xhc3NlZCh0LCEwKTt2YXIgcj1lLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIik7aWYocj09PSJ0cmFuc3BhcmVudCIpcmV0dXJuIG51bGw7dmFyIG49L1woKC4rKVwpLy5leGVjKHIpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPW5bMV0uc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9K2EsbD1zLnRvU3RyaW5nKDE2KTtyZXR1cm4gczwxNj8iMCIrbDpsfSk7aWYoaS5sZW5ndGg9PT00JiZpWzNdPT09IjAwIilyZXR1cm4gbnVsbDt2YXIgbz0iIyIraS5qb2luKCIiKTtyZXR1cm4gZS5jbGFzc2VkKHQsITEpLG99akEuY29sb3JUZXN0PUtPZTtmdW5jdGlvbiBkWHQoZSl7dmFyIHQ9bVh0LnJnYihlKSxyPWZ1bmN0aW9uKGEpe3JldHVybiBhPWEvMjU1LGE8PS4wMzkyOD9hLzEyLjkyOmpPZS5wb3coKGErLjA1NSkvMS4wNTUsMi40KX0sbj1yKHQuciksaT1yKHQuZyksbz1yKHQuYik7cmV0dXJuIC4yMTI2Km4rLjcxNTIqaSsuMDcyMipvfX0pO3ZhciBDaXQ9SChhbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBUaXQ9KEVyKCksVXQoTXIpKSxtYT13aW5kb3cuTWF0aDtmdW5jdGlvbiBaT2UoZSx0KXtmb3IodmFyIHI9dDtyIT1udWxsJiZyIT09ZTspcj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT1lfWFvLmNvbnRhaW5zPVpPZTtmdW5jdGlvbiB5WHQoZSl7dmFyIHQ7dHJ5e3Q9ZS5ub2RlKCkuZ2V0QkJveCgpfWNhdGNoKHIpe3Q9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19cmV0dXJuIHR9YW8uZWxlbWVudEJCb3g9eVh0O2Z1bmN0aW9uIEpPZShlKXtpZihlIGluc3RhbmNlb2YgU1ZHRWxlbWVudClyZXR1cm4geVh0KFRpdC5zZWxlY3QoZSkpO2lmKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDp0LmxlZnQseTp0LnRvcCx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19ZWxzZSByZXR1cm57eDowLHk6MCx3aWR0aDowLGhlaWdodDowfX1hby5lbnRpdHlCb3VuZHM9Sk9lO2FvLlNDUkVFTl9SRUZSRVNIX1JBVEVfTUlMTElTRUNPTkRTPTFlMy82MDtmdW5jdGlvbiBRT2UoZSl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSE9bnVsbD93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSxhby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUyl9YW8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lUG9seWZpbGw9UU9lO2Z1bmN0aW9uIHQ3ZShlKXt2YXIgdD1lIGluc3RhbmNlb2YgVGl0LnNlbGVjdGlvbj9lLm5vZGUoKTplLHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGtmKHIsIndpZHRoIikra2YociwicGFkZGluZy1sZWZ0Iikra2YociwicGFkZGluZy1yaWdodCIpK2tmKHIsImJvcmRlci1sZWZ0LXdpZHRoIikra2YociwiYm9yZGVyLXJpZ2h0LXdpZHRoIil9YW8uZWxlbWVudFdpZHRoPXQ3ZTtmdW5jdGlvbiBlN2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIFRpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJoZWlnaHQiKStrZihyLCJwYWRkaW5nLXRvcCIpK2tmKHIsInBhZGRpbmctYm90dG9tIikra2YociwiYm9yZGVyLXRvcC13aWR0aCIpK2tmKHIsImJvcmRlci1ib3R0b20td2lkdGgiKX1hby5lbGVtZW50SGVpZ2h0PWU3ZTt2YXIgTGM9IlxccyIsWEE9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKykiLHZYdD0iKD86KD86IitMYysiKyw/IitMYysiKil8KD86LCIrTGMrIiopKSIscjdlPW5ldyBSZWdFeHAoInRyYW5zbGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrWEErIikoPzoiK3ZYdCsiKCIrWEErIikpPyIrTGMrIipcXCkiKSxuN2U9bmV3IFJlZ0V4cCgicm90YXRlIitMYysiKlxcKCIrTGMrIiooIitYQSsiKSIrTGMrIipcXCkiKSxpN2U9bmV3IFJlZ0V4cCgic2NhbGUiK0xjKyIqXFwoIitMYysiKigiK1hBKyIpKD86Iit2WHQrIigiK1hBKyIpKT8iK0xjKyIqXFwpIik7ZnVuY3Rpb24gbzdlKGUpe3ZhciB0PXI3ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV0sbj10WzJdLGk9bj09PXZvaWQgMD8wOm47cmV0dXJuWytyLCtpXX1lbHNlIHJldHVyblswLDBdfWFvLmdldFRyYW5zbGF0ZVZhbHVlcz1vN2U7ZnVuY3Rpb24gYTdlKGUpe3ZhciB0PW43ZS5leGVjKGUuYXR0cigidHJhbnNmb3JtIikpO2lmKHQhPW51bGwpe3ZhciByPXRbMV07cmV0dXJuK3J9ZWxzZSByZXR1cm4gMH1hby5nZXRSb3RhdGU9YTdlO2Z1bmN0aW9uIHM3ZShlKXt2YXIgdD1pN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXTtyZXR1cm5bK3Isbj09bnVsbD8rcjorbl19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRTY2FsZVZhbHVlcz1zN2U7ZnVuY3Rpb24gbDdlKGUsdCl7cmV0dXJuIShtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LmxlZnQpfHxtYS5jZWlsKGUubGVmdCk+PW1hLmZsb29yKHQucmlnaHQpfHxtYS5mbG9vcihlLmJvdHRvbSk8PW1hLmNlaWwodC50b3ApfHxtYS5jZWlsKGUudG9wKT49bWEuZmxvb3IodC5ib3R0b20pKX1hby5jbGllbnRSZWN0c092ZXJsYXA9bDdlO2Z1bmN0aW9uIGM3ZShlLHQpe3JldHVybntsZWZ0OmUubGVmdC10LHRvcDplLnRvcC10LHJpZ2h0OmUucmlnaHQrdCxib3R0b206ZS5ib3R0b20rdCx3aWR0aDplLndpZHRoK3QqMixoZWlnaHQ6ZS5oZWlnaHQrdCoyfX1hby5leHBhbmRSZWN0PWM3ZTtmdW5jdGlvbiB1N2UoZSx0KXtyZXR1cm4gbWEuZmxvb3IodC5sZWZ0KTw9bWEuY2VpbChlLmxlZnQpJiZtYS5mbG9vcih0LnRvcCk8PW1hLmNlaWwoZS50b3ApJiZtYS5mbG9vcihlLnJpZ2h0KTw9bWEuY2VpbCh0LnJpZ2h0KSYmbWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQuYm90dG9tKX1hby5jbGllbnRSZWN0SW5zaWRlPXU3ZTtmdW5jdGlvbiBoN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49LjUpO3ZhciBpPV9YdChlKSxvPV9YdCh0KTtyZXR1cm4gci54K3Iud2lkdGg+PWkubWluLW4mJnIueDw9aS5tYXgrbiYmci55K3IuaGVpZ2h0Pj1vLm1pbi1uJiZyLnk8PW8ubWF4K259YW8uaW50ZXJzZWN0c0JCb3g9aDdlO2Z1bmN0aW9uIF9YdChlKXtpZih0eXBlb2YgZT09Im51bWJlciIpe3ZhciB0PWU7cmV0dXJue21pbjp0LG1heDp0fX12YXIgcj1lO2lmKHIgaW5zdGFuY2VvZiBPYmplY3QmJiJtaW4iaW4gciYmIm1heCJpbiByKXJldHVybiByO3Rocm93IG5ldyBFcnJvcigiaW5wdXQgJyIrZSsiJyBjYW4ndCBiZSBwYXJzZWQgYXMgYW4gUmFuZ2UiKX1mdW5jdGlvbiBrZihlLHQpe3ZhciByPWUuZ2V0UHJvcGVydHlWYWx1ZSh0KSxuPXBhcnNlRmxvYXQocik7cmV0dXJuIG58fDB9ZnVuY3Rpb24gZjdlKGUpe2Zvcih2YXIgdD1bXTtlJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KXQucHVzaChlKSxlPWUucGFyZW50RWxlbWVudDtyZXR1cm4gdH1hby5nZXRIdG1sRWxlbWVudEFuY2VzdG9ycz1mN2U7ZnVuY3Rpb24gcDdlKGUpe3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkscj10LmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8dC5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIGc3ZShyKX1hby5nZXRFbGVtZW50VHJhbnNmb3JtPXA3ZTt2YXIgZDdlPS9ebWF0cml4XCgoW14pXSspXCkkLyxtN2U9L1ssIF0rLztmdW5jdGlvbiBnN2UoZSl7aWYoZT09bnVsbHx8ZT09PSJub25lIilyZXR1cm4gbnVsbDt2YXIgdD1lLm1hdGNoKGQ3ZSk7aWYodD09bnVsbHx8dC5sZW5ndGg8MilyZXR1cm4gbnVsbDt2YXIgcj10WzFdLnNwbGl0KG03ZSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KG4pfSk7cmV0dXJuIHIubGVuZ3RoIT02P251bGw6cn19KTt2YXIgQWl0PUgoc289PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU0Y9KEVyKCksVXQoTXIpKSx4WHQ9Q2l0KCksbWQ9d2luZG93Lk1hdGgsXzdlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24geTdlKGUsdCxyKXtyZXR1cm4gbWQubWluKHQscik8PWUmJmU8PW1kLm1heCh0LHIpfXNvLmluUmFuZ2U9eTdlO2Z1bmN0aW9uIHY3ZShlLHQscil7cmV0dXJuIG1kLm1pbihtZC5tYXgodCxlKSxyKX1zby5jbGFtcD12N2U7ZnVuY3Rpb24geDdlKGUsdCxyKXt2YXIgbj10eXBlb2YgdD09ImZ1bmN0aW9uIj90Om51bGwsaT1uPT1udWxsP3Q6cixvPW49PW51bGw/U0YubWF4KGUpOlNGLm1heChlLG4pO3JldHVybiBvIT09dm9pZCAwP286aX1zby5tYXg9eDdlO2Z1bmN0aW9uIGI3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP1NGLm1pbihlKTpTRi5taW4oZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWluPWI3ZTtmdW5jdGlvbiB3N2UoZSl7cmV0dXJuIGUhPT1lfXNvLmlzTmFOPXc3ZTtmdW5jdGlvbiBTN2UoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZS1lPDF9c28uaXNWYWxpZE51bWJlcj1TN2U7ZnVuY3Rpb24gTTdlKGUsdCxyKXtpZihyPT09dm9pZCAwJiYocj0xKSxyPT09MCl0aHJvdyBuZXcgRXJyb3IoInN0ZXAgY2Fubm90IGJlIDAiKTtmb3IodmFyIG49bWQubWF4KG1kLmNlaWwoKHQtZSkvciksMCksaT1bXSxvPTA7bzxuOysrbylpW29dPWUrcipvO3JldHVybiBpfXNvLnJhbmdlPU03ZTtmdW5jdGlvbiBFN2UoZSx0KXtyZXR1cm4gbWQucG93KHQueS1lLnksMikrbWQucG93KHQueC1lLngsMil9c28uZGlzdGFuY2VTcXVhcmVkPUU3ZTtmdW5jdGlvbiBUN2UoZSl7cmV0dXJuIGUvMzYwKm1kLlBJKjJ9c28uZGVncmVlc1RvUmFkaWFucz1UN2U7ZnVuY3Rpb24gQzdlKGUsdCl7cmV0dXJuIHQudG9wTGVmdC54PD1lLngmJnQuYm90dG9tUmlnaHQueD49ZS54JiZ0LnRvcExlZnQueTw9ZS55JiZ0LmJvdHRvbVJpZ2h0Lnk+PWUueX1zby53aXRoaW49QzdlO2Z1bmN0aW9uIEE3ZShlLHQscixuLGksbyxhLHMpe3JldHVybiBlPD1pK2EmJmk8PWUrciYmdDw9bytzJiZvPD10K259c28uYm91bmRzSW50ZXJzZWN0cz1BN2U7ZnVuY3Rpb24gUDdlKGUpe2Zvcih2YXIgdD14WHQuZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnMoZSkscj1fN2Usbj1udWxsLGk9MCxvPXQ7aTxvLmxlbmd0aDtpKyspe3ZhciBhPW9baV0scz14WHQuZ2V0RWxlbWVudFRyYW5zZm9ybShhKTtpZihzIT1udWxsKXt2YXIgbD1hLmNsaWVudFdpZHRoLzIsYz1hLmNsaWVudEhlaWdodC8yO3I9d0YocixbbCxjXSkscj1iWHQocix3WHQocykpLHI9d0YocixbLWwsLWNdKX12YXIgdT1hLnNjcm9sbExlZnQsaD1hLnNjcm9sbFRvcDsobj09PW51bGx8fGE9PT1uKSYmKHUtPWEub2Zmc2V0TGVmdCthLmNsaWVudExlZnQsaC09YS5vZmZzZXRUb3ArYS5jbGllbnRUb3Asbj1hLm9mZnNldFBhcmVudCkscj13RihyLFt1LGhdKX1yZXR1cm4gcn1zby5nZXRDdW11bGF0aXZlVHJhbnNmb3JtPVA3ZTtmdW5jdGlvbiBiWHQoZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zby5tdWx0aXBseU1hdHJpeD1iWHQ7ZnVuY3Rpb24gSTdlKGUsdCl7cmV0dXJuW3RbMF0sdFsxXSx0WzJdLHRbM10sdFs0XStlWzBdLHRbNV0rZVsxXV19c28ucHJlbXVsdGlwbHlUcmFuc2xhdGU9STdlO2Z1bmN0aW9uIHdGKGUsdCl7cmV0dXJuW2VbMF0sZVsxXSxlWzJdLGVbM10sZVswXSp0WzBdK2VbMl0qdFsxXStlWzRdLGVbMV0qdFswXStlWzNdKnRbMV0rZVs1XV19c28ubXVsdGlwbHlUcmFuc2xhdGU9d0Y7ZnVuY3Rpb24gd1h0KGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07aWYodD09PTApdGhyb3cgbmV3IEVycm9yKCJzaW5ndWxhciBtYXRyaXgiKTt2YXIgcj0xL3Q7cmV0dXJuW3IqZVszXSxyKi1lWzFdLHIqLWVbMl0sciplWzBdLHIqKC1lWzNdKmVbNF0rZVsyXSplWzVdKSxyKihlWzFdKmVbNF0rLWVbMF0qZVs1XSldfXNvLmludmVydE1hdHJpeD13WHQ7ZnVuY3Rpb24gTDdlKGUsdCl7cmV0dXJue3g6ZVswXSp0LngrZVsyXSp0LnkrZVs0XSx5OmVbMV0qdC54K2VbM10qdC55K2VbNV19fXNvLmFwcGx5VHJhbnNmb3JtPUw3ZX0pO3ZhciBTWHQ9SChNRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTUYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLmNlaWwodC5sZW5ndGgvMiksaT0wO2k8bjtpKyspclswXS5pbnNlcnQodFtpXSk7Zm9yKHZhciBpPW47aTx0Lmxlbmd0aDtpKyspclsxXS5pbnNlcnQodFtpXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneVRyaXZpYWw9azdlO3ZhciBSN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih0PXQuc2xpY2UoKSx0aGlzLmNob29zZUZpcnN0U3BsaXQodCxyKTt0Lmxlbmd0aD4wOyl0aGlzLmFkZE5leHQodCxyKX0sZS5wcm90b3R5cGUuY2hvb3NlRmlyc3RTcGxpdD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj0wLGk9MCxvPXQubGVuZ3RoLTEsYT10Lmxlbmd0aC0xLHM9MTtzPHQubGVuZ3RoLTE7cysrKXt2YXIgbD10W3NdO2wuYm91bmRzLnhsPnRbb10uYm91bmRzLnhsP289czpsLmJvdW5kcy54aDx0W25dLmJvdW5kcy54aCYmKG49cyksbC5ib3VuZHMueWw+dFthXS5ib3VuZHMueWw/YT1zOmwuYm91bmRzLnloPHRbaV0uYm91bmRzLnloJiYoaT1zKX12YXIgYz1NYXRoLmFicyh0W25dLmJvdW5kcy54aC10W29dLmJvdW5kcy54bCksdT1NYXRoLmFicyh0W2ldLmJvdW5kcy55aC10W2FdLmJvdW5kcy55bCksaD1jPnU/W24sb106W2ksYV0sZj1oWzBdLHA9aFsxXTtmPT09cCYmKGY9MCxwPXQubGVuZ3RoLTEpLHJbMF0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWF4KGYscCksMSlbMF0pLHJbMV0uaW5zZXJ0KHQuc3BsaWNlKE1hdGgubWluKGYscCksMSlbMF0pfSxlLnByb3RvdHlwZS5hZGROZXh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW51bGwsaT1udWxsLG89bnVsbCxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBzPXRbYV0sbD1yWzBdLnVuaW9uQXJlYURpZmZlcmVuY2Uocy5ib3VuZHMpLGM9clsxXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKTsobDxpfHxuPT1udWxsKSYmKG49YSxpPWwsbz1yWzBdKSxjPGkmJihuPWEsaT1jLG89clsxXSl9by5pbnNlcnQodC5zcGxpY2UobiwxKVswXSl9LGV9KCk7TUYuU3BsaXRTdHJhdGVneUxpbmVhcj1SN2V9KTt2YXIgSWl0PUgoZ2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdkLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTjdlPVNYdCgpLEQ3ZT01LE83ZT1uZXcgTjdlLlNwbGl0U3RyYXRlZ3lMaW5lYXIsUmY7KGZ1bmN0aW9uKGUpe2VbZS5QQVNTPTBdPSJQQVNTIixlW2UuRkFJTD0xXT0iRkFJTCIsZVtlLlBBU1NfQU5EX09WRVJXUklURT0yXT0iUEFTU19BTkRfT1ZFUldSSVRFIn0pKFJmPWdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0fHwoZ2QuUXVlcnlQcmVkaWNhdGVSZXN1bHQ9e30pKTtmdW5jdGlvbiBFRihlLHQscil7dmFyIG49MS8wLGk9MS8wLG89MS8wO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz10KGEuYm91bmRzLGUpLGw9cihhLmJvdW5kcyxlKTtyZXR1cm4gYS52YWx1ZSE9bnVsbD9zPG4/KG49cyxpPXMsbz1sLFJmLlBBU1NfQU5EX09WRVJXUklURSk6cz09PW4/UmYuUEFTUzpSZi5GQUlMOnM+bz9SZi5GQUlMOihpPU1hdGgubWluKHMsaSksbz1NYXRoLm1heChsLG8pLFJmLlBBU1MpfX1nZC5jcmVhdGVNaW5pbWl6aW5nTm9kZVByZWRpY2F0ZT1FRjtmdW5jdGlvbiBQaXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtyZXR1cm4gdChuLmJvdW5kcyxlKS10KHIuYm91bmRzLGUpfX1nZC5jcmVhdGVOb2RlU29ydD1QaXQ7dmFyIHo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1EN2UpLHI9PT12b2lkIDAmJihyPU83ZSksdGhpcy5tYXhOb2RlQ2hpbGRyZW49dCx0aGlzLnNwbGl0U3RyYXRlZ3k9cix0aGlzLnJvb3Q9bmV3IFRGKCEwKSx0aGlzLnNpemU9MH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3R9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5yb290PW5ldyBURighMCksdGhpcy5zaXplPTB9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj10aGlzLnJvb3Q7IW4ubGVhZjspbj1uLnN1YnRyZWUodCk7dmFyIGk9VEYudmFsdWVOb2RlKHQscik7Zm9yKG4uaW5zZXJ0KGkpLHRoaXMuc2l6ZSs9MTtuLm92ZXJmbG93KHRoaXMubWF4Tm9kZUNoaWxkcmVuKTspbj1uLnNwbGl0KHRoaXMuc3BsaXRTdHJhdGVneSksbi5wYXJlbnQ9PW51bGwmJih0aGlzLnJvb3Q9bik7cmV0dXJuIGl9LGUucHJvdG90eXBlLmxvY2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gci5jb250YWlucyh0KX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0PWZ1bmN0aW9uKHQpe3ZhciByPUVGKHQsUWEuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZSxRYS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2UpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WD1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWCksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5sb2NhdGVOZWFyZXN0WT1mdW5jdGlvbih0KXt2YXIgcj1FRih0LFFhLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSxRYS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWSksbj10aGlzLnF1ZXJ5Tm9kZXMocik7cmV0dXJuIG4uc29ydChQaXQodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgpKSxuLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS52YWx1ZX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhyLHQpfSl9LGUucHJvdG90eXBlLmludGVyc2VjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIFFhLmlzQm91bmRzT3ZlcmxhcFgocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBZKHIsdCl9KX0sZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmIXQodGhpcy5yb290LmJvdW5kcykpcmV0dXJuIHI7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KWZvcih2YXIgaT1uLnNoaWZ0KCksbz0wO288aS5lbnRyaWVzLmxlbmd0aDtvKyspe3ZhciBhPWkuZW50cmllc1tvXTt0KGEuYm91bmRzKSYmKGkubGVhZj9yLnB1c2goYS52YWx1ZSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZS5wcm90b3R5cGUucXVlcnlOb2Rlcz1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZih0aGlzLnJvb3QuYm91bmRzIT1udWxsJiZ0KHRoaXMucm9vdCk9PT1SZi5GQUlMKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb10scz10KGEpO3M9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUmJihyPVtdKSwocz09PVJmLlBBU1N8fHM9PT1SZi5QQVNTX0FORF9PVkVSV1JJVEUpJiYoaS5sZWFmP3IucHVzaChhKTpuLnB1c2goYSkpfXJldHVybiByfSxlfSgpO2dkLlJUcmVlPXo3ZTt2YXIgVEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMubGVhZj10LHRoaXMuYm91bmRzPW51bGwsdGhpcy5lbnRyaWVzPVtdLHRoaXMucGFyZW50PW51bGwsdGhpcy52YWx1ZT1udWxsfXJldHVybiBlLnZhbHVlTm9kZT1mdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBlKCEwKTtyZXR1cm4gbi5ib3VuZHM9dCxuLnZhbHVlPXIsbn0sZS5wcm90b3R5cGUub3ZlcmZsb3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg+dH0sZS5wcm90b3R5cGUuaW5zZXJ0PWZ1bmN0aW9uKHQpe3RoaXMuZW50cmllcy5wdXNoKHQpLHQucGFyZW50PXRoaXM7Zm9yKHZhciByPXRoaXM7ciE9bnVsbDspci5ib3VuZHM9UWEudW5pb25BbGwoW3IuYm91bmRzLHQuYm91bmRzXSkscj1yLnBhcmVudDtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuZW50cmllcy5pbmRleE9mKHQpO2lmKHI+PTApe3RoaXMuZW50cmllcy5zcGxpY2UociwxKTtmb3IodmFyIG49dGhpcztuIT1udWxsOyluLmJvdW5kcz1RYS51bmlvbkFsbChuLmVudHJpZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLmJvdW5kc30pKSxuPW4ucGFyZW50fXJldHVybiB0aGlzfSxlLnByb3RvdHlwZS5zdWJ0cmVlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xLzAsbj1udWxsLGk9MDtpPHRoaXMuZW50cmllcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLmVudHJpZXNbaV0sYT1vLnVuaW9uQXJlYURpZmZlcmVuY2UodCk7KGE8cnx8YT09PXImJm4hPW51bGwmJm8uZW50cmllcy5sZW5ndGg8bi5lbnRyaWVzLmxlbmd0aCkmJihuPW8pfXJldHVybiBufSxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0KXt0aGlzLnBhcmVudCE9bnVsbCYmdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpO3ZhciByPVtuZXcgZSh0aGlzLmxlYWYpLG5ldyBlKHRoaXMubGVhZildO3Quc3BsaXQodGhpcy5lbnRyaWVzLHIpO3ZhciBuPXRoaXMucGFyZW50IT1udWxsP3RoaXMucGFyZW50Om5ldyBlKCExKTtyZXR1cm4gbi5pbnNlcnQoclswXSksbi5pbnNlcnQoclsxXSksbi5sZWFmPSExLG59LGUucHJvdG90eXBlLnVuaW9uQXJlYURpZmZlcmVuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKFFhLnVuaW9uKHRoaXMuYm91bmRzLHQpLmFyZWEoKS10aGlzLmJvdW5kcy5hcmVhKCkpfSxlLnByb3RvdHlwZS5tYXhEZXB0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlYWY/MToxK3RoaXMuZW50cmllcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF4RGVwdGgoKX0pLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiBNYXRoLm1heCh0LHIpfSl9LGV9KCk7Z2QuUlRyZWVOb2RlPVRGO3ZhciBRYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dGhpcy54bD10LHRoaXMueWw9cix0aGlzLnhoPW4sdGhpcy55aD1pLHRoaXMud2lkdGg9dGhpcy54aC10aGlzLnhsLHRoaXMuaGVpZ2h0PXRoaXMueWgtdGhpcy55bH1yZXR1cm4gZS54eXdoPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuZXcgZSh0LHIsdCtuLHIraSl9LGUuZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LngsdC55LHQueCt0LndpZHRoLHQueSt0LmhlaWdodCl9LGUuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLnBvaW50UGFpcih0LnRvcExlZnQsdC5ib3R0b21SaWdodCl9LGUucG9pbnRQYWlyPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKE1hdGgubWluKHQueCxyLngpLE1hdGgubWluKHQueSxyLnkpLE1hdGgubWF4KHQueCxyLngpLE1hdGgubWF4KHQueSxyLnkpKX0sZS5wb2ludHM9ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIm5lZWQgYXQgbGVhc3QgMiBwb2ludHMgdG8gY3JlYXRlIGJvdW5kcyIpO3ZhciByPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnh9KSxuPXQubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnl9KTtyZXR1cm4gbmV3IGUoci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5taW4oaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxyLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1heChpLG8pfSksbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pKX0sZS51bmlvbj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0LnhsLHIueGwpLE1hdGgubWluKHQueWwsci55bCksTWF0aC5tYXgodC54aCxyLnhoKSxNYXRoLm1heCh0LnloLHIueWgpKX0sZS51bmlvbkFsbD1mdW5jdGlvbih0KXtyZXR1cm4gdD10LmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbH0pLHQubGVuZ3RoPT09MD9udWxsOnQucmVkdWNlKGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUudW5pb24ocixuKX0pfSxlLmlzQm91bmRzT3ZlcmxhcEJvdW5kcz1mdW5jdGlvbih0LHIpe3JldHVybiBlLmlzQm91bmRzT3ZlcmxhcFgodCxyKSYmZS5pc0JvdW5kc092ZXJsYXBZKHQscil9LGUuaXNCb3VuZHNPdmVybGFwWD1mdW5jdGlvbih0LHIpe3JldHVybiEodC54aDxyLnhsKSYmISh0LnhsPnIueGgpfSxlLmlzQm91bmRzT3ZlcmxhcFk9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueWg8ci55bCkmJiEodC55bD5yLnloKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVg9ZnVuY3Rpb24odCxyKXt2YXIgbj10LndpZHRoLzIsaT10LnhsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueC1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWT1mdW5jdGlvbih0LHIpe3ZhciBuPXQuaGVpZ2h0LzIsaT10LnlsK247cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHIueS1pKS1uLDApfSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgodCxyKTtyZXR1cm4gbj09PTA/MDpuK3Qud2lkdGh9LGUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuPT09MD8wOm4rdC5oZWlnaHR9LGUuZGlzdGFuY2VTcXVhcmVkVG9OZWFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWSh0LHIpO3JldHVybiBuKm4raSppfSxlLmRpc3RhbmNlU3F1YXJlZFRvRmFyRWRnZT1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgodCxyKSxpPWUuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmFyZWFDYWNoZWQ9PW51bGwmJih0aGlzLmFyZWFDYWNoZWQ9KHRoaXMueGgtdGhpcy54bCkqKHRoaXMueWgtdGhpcy55bCkpLHRoaXMuYXJlYUNhY2hlZH0sZS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueGw8PXQueCYmdGhpcy54aD49dC54JiZ0aGlzLnlsPD10LnkmJnRoaXMueWg+PXQueX0sZX0oKTtnZC5SVHJlZUJvdW5kcz1RYX0pO3ZhciBUWHQ9SChfZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNWHQ9KEVyKCksVXQoTXIpKSxGN2U9T2UoKSxYZz1GZSgpLEI3ZT1JZigpO19kLklTdGFja2luZ09yZGVyPUI3ZS5tYWtlRW51bShbInRvcGRvd24iLCJib3R0b211cCJdKTt2YXIgRVh0PXdpbmRvdy5NYXRoO2Z1bmN0aW9uIEg3ZShlLHQscixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tdXAiKTt2YXIgaT1NWHQubWFwKCksbz1NWHQubWFwKCksYT1uZXcgWGcuTWFwO249PT0idG9wZG93biImJihlPWUuc2xpY2UoKSxlLnJldmVyc2UoKSk7Zm9yKHZhciBzPTAsbD1lO3M8bC5sZW5ndGg7cysrKXtmb3IodmFyIGM9bFtzXSx1PW5ldyBYZy5NYXAsaD1jLmRhdGEoKSxmPWgubGVuZ3RoLHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdLGc9dChkLHAsYyksXz1fZC5ub3JtYWxpemVLZXkoZykseT0rcihkLHAsYykseD12b2lkIDAsYj15Pj0wP2k6bztiLmhhcyhfKT8oeD1iLmdldChfKSxiLnNldChfLHgreSkpOih4PTAsYi5zZXQoXyx5KSksdS5zZXQoXyx7b2Zmc2V0OngsdmFsdWU6eSxheGlzVmFsdWU6ZyxvcmlnaW5hbERhdHVtOmQsb3JpZ2luYWxEYXRhc2V0OmMsb3JpZ2luYWxJbmRleDpwfSl9YS5zZXQoYyx1KX1yZXR1cm4gYX1fZC5zdGFjaz1IN2U7ZnVuY3Rpb24gVjdlKGUpe3ZhciB0PW5ldyBYZy5NYXAscj1uZXcgWGcuTWFwO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7bi5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7dmFyIGE9aS5vZmZzZXQraS52YWx1ZSxzPVhnLk1hdGgubWF4KFthLGkub2Zmc2V0XSxpLm9mZnNldCksbD1YZy5NYXRoLm1pbihbYSxpLm9mZnNldF0saS5vZmZzZXQpLGM9aS5heGlzVmFsdWU7dC5oYXMobyk/dC5nZXQobykuZXh0ZW50PHMmJnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6dC5zZXQobyx7ZXh0ZW50OnMsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KSxyLmhhcyhvKT9yLmdldChvKS5leHRlbnQ+bCYmci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KTpyLnNldChvLHtleHRlbnQ6bCxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pfSl9KSx7bWF4aW11bUV4dGVudHM6dCxtaW5pbXVtRXh0ZW50czpyfX1fZC5zdGFja2VkRXh0ZW50cz1WN2U7ZnVuY3Rpb24gVTdlKGUsdCxyKXt2YXIgbj1bXTtlLmZvckVhY2goZnVuY3Rpb24oYSxzKXtmb3IodmFyIGw9cy5kYXRhKCksYz1sLmxlbmd0aCx1PTA7dTxjO3UrKyl7dmFyIGg9bFt1XTtpZighKHIhPW51bGwmJiFyKGgsdSxzKSkpe3ZhciBmPWEuZ2V0KF9kLm5vcm1hbGl6ZUtleSh0KGgsdSxzKSkpO24ucHVzaChmLnZhbHVlK2Yub2Zmc2V0KX19fSk7dmFyIGk9WGcuTWF0aC5tYXgobiwwKSxvPVhnLk1hdGgubWluKG4sMCk7cmV0dXJuW0VYdC5taW4obywwKSxFWHQubWF4KDAsaSldfV9kLnN0YWNrZWRFeHRlbnQ9VTdlO19kLm5vcm1hbGl6ZUtleT1GN2UubWVtb2l6ZShmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfSl9KTt2YXIgJEE9SChDRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQ0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO0NGLlNIT1dfV0FSTklOR1M9ITA7Q0YuQUREX1RJVExFX0VMRU1FTlRTPSEwfSk7dmFyIEFGPUgoZ1M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdTLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcTdlPSRBKCk7ZnVuY3Rpb24gQ1h0KGUpeyFxN2UuU0hPV19XQVJOSU5HU3x8Y29uc29sZS53YXJuKGUpfWdTLndhcm49Q1h0O2Z1bmN0aW9uIEFYdChlLHQpe2Zvcih2YXIgcj1bXSxuPTI7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMl09YXJndW1lbnRzW25dO3JldHVybiB0PT09MD8oZShyKSwtMSk6d2luZG93LnNldFRpbWVvdXQoZSx0LHIpfWdTLnNldFRpbWVvdXQ9QVh0O2Z1bmN0aW9uIEc3ZShlLHQscil7dmFyIG49bnVsbCxpPVtdLG89ZnVuY3Rpb24oKXt0LmFwcGx5KHIsaSl9O3JldHVybiBmdW5jdGlvbigpe2k9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjbGVhclRpbWVvdXQobiksbj1BWHQobyxlKX19Z1MuZGVib3VuY2U9RzdlO2Z1bmN0aW9uIFc3ZShlLHQscil7cj09PXZvaWQgMCYmKHI9IiIpLENYdCgiTWV0aG9kICIrZSsiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAiK3QrIi4gUGxlYXNlIHJlZmVyIHRvIHRoZSByZWxlYXNlIG5vdGVzLiAiK3IpfWdTLmRlcHJlY2F0ZWQ9VzdlfSk7dmFyIFBYdD1IKExpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dGhpcy5lbnRyeUluZGV4PXQsdGhpcy5leGl0SW5kZXg9dCx0aGlzLm1pbkluZGV4PXQsdGhpcy5tYXhJbmRleD10LHRoaXMuYnVja2V0VmFsdWU9cix0aGlzLm1pblZhbHVlPW4sdGhpcy5tYXhWYWx1ZT1ufXJldHVybiBlLnByb3RvdHlwZS5pc0luQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT10aGlzLmJ1Y2tldFZhbHVlfSxlLnByb3RvdHlwZS5hZGRUb0J1Y2tldD1mdW5jdGlvbih0LHIpe3Q8dGhpcy5taW5WYWx1ZSYmKHRoaXMubWluVmFsdWU9dCx0aGlzLm1pbkluZGV4PXIpLHQ+dGhpcy5tYXhWYWx1ZSYmKHRoaXMubWF4VmFsdWU9dCx0aGlzLm1heEluZGV4PXIpLHRoaXMuZXhpdEluZGV4PXJ9LGUucHJvdG90eXBlLmdldFVuaXF1ZUluZGljZXM9ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy5lbnRyeUluZGV4LHRoaXMubWF4SW5kZXgsdGhpcy5taW5JbmRleCx0aGlzLmV4aXRJbmRleF07cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PTB8fHIhPXRbbi0xXX0pfSxlfSgpO0xpdC5CdWNrZXQ9WTdlfSk7dmFyIFJpdD1IKGtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoa2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgajdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuU2V0PT0iZnVuY3Rpb24iP3RoaXMuX2VzNlNldD1uZXcgd2luZG93LlNldDp0aGlzLl92YWx1ZXM9W10sdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsPyh0aGlzLl9lczZTZXQuYWRkKHQpLHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSx0aGlzKToodGhpcy5oYXModCl8fCh0aGlzLl92YWx1ZXMucHVzaCh0KSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCksdGhpcyl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZTZXQhPW51bGwpe3ZhciByPXRoaXMuX2VzNlNldC5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT10aGlzLl9lczZTZXQuc2l6ZSxyfXZhciBuPXRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpO3JldHVybiBuIT09LTE/KHRoaXMuX3ZhbHVlcy5zcGxpY2UobiwxKSx0aGlzLnNpemU9dGhpcy5fdmFsdWVzLmxlbmd0aCwhMCk6ITF9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXM2U2V0IT1udWxsP3RoaXMuX2VzNlNldC5oYXModCk6dGhpcy5fdmFsdWVzLmluZGV4T2YodCkhPT0tMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNlNldC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX3ZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe3QuY2FsbChyLG8sbyxuKX0pfSxlfSgpO2tpdC5TZXQ9ajdlfSk7dmFyIElYdD1IKE5pdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWDdlPShkZSgpLFV0KHBlKSksJDdlPVJpdCgpLEs3ZT1mdW5jdGlvbihlKXtYN2UuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmNhbGxDYWxsYmFja3M9ZnVuY3Rpb24oKXtmb3IodmFyIHI9dGhpcyxuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW5baV09YXJndW1lbnRzW2ldO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24obyl7by5hcHBseShyLG4pfSksdGhpc30sdH0oJDdlLlNldCk7Tml0LkNhbGxiYWNrU2V0PUs3ZX0pO3ZhciBMWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRnPUlpdCgpLFo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9lbnRpdGllcz1bXSx0aGlzLl9ydHJlZT1uZXcgJGcuUlRyZWV9cmV0dXJuIGUucHJvdG90eXBlLmFkZEFsbD1mdW5jdGlvbih0LHIsbil7aWYodGhpcy5fZW50aXRpZXM9dGhpcy5fZW50aXRpZXMuY29uY2F0KHQpLG4hPT12b2lkIDApZm9yKHZhciBpPSRnLlJUcmVlQm91bmRzLmJvdW5kcyhuKSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7JGcuUlRyZWVCb3VuZHMuaXNCb3VuZHNPdmVybGFwQm91bmRzKGkscykmJnRoaXMuX3J0cmVlLmluc2VydChzLGEpfWVsc2UgZm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRbb10scz0kZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHMocihhKSk7dGhpcy5fcnRyZWUuaW5zZXJ0KHMsYSl9fSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0KHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFgodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0eU5lYXJlc3RZPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5sb2NhdGVOZWFyZXN0WSh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0KCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RYKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ydHJlZS5pbnRlcnNlY3RZKCRnLlJUcmVlQm91bmRzLmVudGl0eUJvdW5kcyh0KSl9LGUucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VudGl0aWVzfSxlfSgpO0RpdC5FbnRpdHlTdG9yZT1aN2V9KTt2YXIga1h0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKN2U9QWl0KCksUTdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3R5cGVvZiB3aW5kb3cuTWFwPT0iZnVuY3Rpb24iP3RoaXMuX2VzNk1hcD1uZXcgd2luZG93Lk1hcDp0aGlzLl9rZXlWYWx1ZVBhaXJzPVtdfXJldHVybiBlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtpZihKN2UuaXNOYU4odCkpdGhyb3cgbmV3IEVycm9yKCJOYU4gbWF5IG5vdCBiZSB1c2VkIGFzIGEga2V5IHRvIHRoZSBNYXAiKTtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5zZXQodCxyKSx0aGlzO2Zvcih2YXIgbj0wO248dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7bisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbbl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tuXS52YWx1ZT1yLHRoaXM7cmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnMucHVzaCh7a2V5OnQsdmFsdWU6cn0pLHRoaXN9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5nZXQodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLnZhbHVlfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuaGFzKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fZXM2TWFwIT1udWxsKXt2YXIgaT1mdW5jdGlvbihvLGEpe3JldHVybiB0LmNhbGwocixvLGEsbil9O3RoaXMuX2VzNk1hcC5mb3JFYWNoKGkscik7cmV0dXJufXRoaXMuX2tleVZhbHVlUGFpcnMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLnZhbHVlLG8ua2V5LG4pfSl9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9lczZNYXAhPW51bGwpcmV0dXJuIHRoaXMuX2VzNk1hcC5kZWxldGUodCk7Zm9yKHZhciByPTA7cjx0aGlzLl9rZXlWYWx1ZVBhaXJzLmxlbmd0aDtyKyspaWYodGhpcy5fa2V5VmFsdWVQYWlyc1tyXS5rZXk9PT10KXJldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnNwbGljZShyLDEpLCEwO3JldHVybiExfSxlfSgpO09pdC5NYXA9UTdlfSk7dmFyIFJYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiB0emUoKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07Zm9yKHZhciByPXt9LG49MCxpPWU7bjxpLmxlbmd0aDtuKyspZm9yKHZhciBvPWlbbl0sYT1PYmplY3Qua2V5cyhvKSxzPTAsbD1hO3M8bC5sZW5ndGg7cysrKXt2YXIgYz1sW3NdO3JbY109b1tjXX1yZXR1cm4gcn16aXQuYXNzaWduPXR6ZX0pO3ZhciBPWHQ9SChQRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGaXQ9RmUoKSxOWHQ9Il9fUGxvdHRhYmxlX0NsaWVudFRyYW5zbGF0b3IiO2Z1bmN0aW9uIGV6ZShlKXt2YXIgdD1lLnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyPXRbTlh0XTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IERYdCh0KSx0W05YdF09cikscn1QRi5nZXRUcmFuc2xhdG9yPWV6ZTt2YXIgRFh0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLl9yb290RWxlbWVudD10fXJldHVybiBlLnByb3RvdHlwZS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxyKXt2YXIgbj17eDp0LHk6cn0saT1GaXQuTWF0aC5nZXRDdW11bGF0aXZlVHJhbnNmb3JtKHRoaXMuX3Jvb3RFbGVtZW50KTtpZihpPT1udWxsKXJldHVybiBuO3ZhciBvPUZpdC5NYXRoLmFwcGx5VHJhbnNmb3JtKGksbik7cmV0dXJuIG99LGUuaXNFdmVudEluc2lkZT1mdW5jdGlvbih0LHIpe3JldHVybiBGaXQuRE9NLmNvbnRhaW5zKHQucm9vdCgpLnJvb3RFbGVtZW50KCkubm9kZSgpLHIudGFyZ2V0KX0sZX0oKTtQRi5UcmFuc2xhdG9yPURYdH0pO3ZhciBGZT1IKHFvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEtnPShkZSgpLFV0KHBlKSkscnplPXBYdCgpO3FvLkFycmF5PXJ6ZTt2YXIgbnplPWdYdCgpO3FvLkNvbG9yPW56ZTt2YXIgaXplPUNpdCgpO3FvLkRPTT1pemU7dmFyIG96ZT1BaXQoKTtxby5NYXRoPW96ZTt2YXIgYXplPUlpdCgpO3FvLlJUcmVlPWF6ZTt2YXIgc3plPVRYdCgpO3FvLlN0YWNraW5nPXN6ZTt2YXIgbHplPUFGKCk7cW8uV2luZG93PWx6ZTtLZy5fX2V4cG9ydFN0YXIoUFh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihJWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKFlnKCkscW8pO0tnLl9fZXhwb3J0U3RhcihMWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKGtYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoUlh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihSaXQoKSxxbyk7S2cuX19leHBvcnRTdGFyKE9YdCgpLHFvKX0pO3ZhciBIaXQ9SChLQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS0EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6WHQ9RmUoKSxCaXQ9SUYoKSxjemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtCaXQuZmx1c2goKX0sZX0oKTtLQS5JbW1lZGlhdGU9Y3plO3ZhciB1emU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt6WHQuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKEJpdC5mbHVzaCl9LGV9KCk7S0EuQW5pbWF0aW9uRnJhbWU9dXplO3ZhciBoemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fdGltZW91dE1zZWM9elh0LkRPTS5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EU31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7c2V0VGltZW91dChCaXQuZmx1c2gsdGhpcy5fdGltZW91dE1zZWMpfSxlfSgpO0tBLlRpbWVvdXQ9aHplfSk7dmFyIElGPUgoenU9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHp1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgX1M9RmUoKSxmemU9SWYoKSxMRj1IaXQoKSxKQT1uZXcgX1MuU2V0LFZpdD1uZXcgX1MuU2V0LGtGPSExLFVpdD0hMTt6dS5Qb2xpY3k9ZnplLm1ha2VFbnVtKFsiaW1tZWRpYXRlIiwiYW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0Il0pO3ZhciBaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7ZnVuY3Rpb24gcHplKGUpe2lmKGU9PW51bGwpcmV0dXJuIFpBO3N3aXRjaChlKXtjYXNlIHp1LlBvbGljeS5pbW1lZGlhdGU6WkE9bmV3IExGLkltbWVkaWF0ZTticmVhaztjYXNlIHp1LlBvbGljeS5hbmltYXRpb25GcmFtZTpaQT1uZXcgTEYuQW5pbWF0aW9uRnJhbWU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kudGltZW91dDpaQT1uZXcgTEYuVGltZW91dDticmVhaztkZWZhdWx0Ol9TLldpbmRvdy53YXJuKCJVbnJlY29nbml6ZWQgcmVuZGVyUG9saWN5OiAiK2UpfX16dS5yZW5kZXJQb2xpY3k9cHplO2Z1bmN0aW9uIGR6ZShlKXtVaXQmJl9TLldpbmRvdy53YXJuKCJSZWdpc3RlcmVkIHRvIHJlbmRlciB3aGlsZSBvdGhlciBjb21wb25lbnRzIGFyZSBmbHVzaGluZzogcmVxdWVzdCBtYXkgYmUgaWdub3JlZCIpLEpBLmFkZChlKSxCWHQoKX16dS5yZWdpc3RlclRvUmVuZGVyPWR6ZTtmdW5jdGlvbiBGWHQoZSl7Vml0LmFkZChlKSxKQS5hZGQoZSksQlh0KCl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXI9Rlh0O2Z1bmN0aW9uIG16ZShlKXtGWHQoZSl9enUucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXQ9bXplO2Z1bmN0aW9uIEJYdCgpe2tGfHwoa0Y9ITAsWkEucmVuZGVyKCkpfWZ1bmN0aW9uIGd6ZSgpe2lmKGtGKXtWaXQuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21wdXRlTGF5b3V0KCl9KSxKQS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlbmRlcigpfSksVWl0PSEwO3ZhciBlPW5ldyBfUy5TZXQ7SkEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dC5yZW5kZXJJbW1lZGlhdGVseSgpfWNhdGNoKHIpe3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgcn0sMCksZS5hZGQodCl9fSksVml0PW5ldyBfUy5TZXQsSkE9ZSxrRj0hMSxVaXQ9ITF9fXp1LmZsdXNoPWd6ZX0pO3ZhciBrYz1IKFFBPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShRQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEhYdD0oRXIoKSxVdChNcikpLFJGPUlGKCkseVM9RmUoKSxfemU9T2UoKSxWWHQ9WWcoKSxVWHQ9SWYoKTtRQS5YQWxpZ25tZW50PVVYdC5tYWtlRW51bShbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdKTtRQS5ZQWxpZ25tZW50PVVYdC5tYWtlRW51bShbInRvcCIsImNlbnRlciIsImJvdHRvbSJdKTt2YXIgeXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX292ZXJmbG93SGlkZGVuPSExLHRoaXMuX29yaWdpbj17eDowLHk6MH0sdGhpcy5feEFsaWdubWVudD0ibGVmdCIsdGhpcy5feUFsaWdubWVudD0idG9wIix0aGlzLl9pc1NldHVwPSExLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcz1uZXcgeVMuQ2FsbGJhY2tTZXQsdGhpcy5fb25EZXRhY2hDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX2Nzc0NsYXNzZXMuYWRkKCJjb21wb25lbnQiKX1yZXR1cm4gZS5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHQpe2lmKHQ9Vlh0LmNvZXJjZUV4dGVybmFsRDModCksdGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiQ2FuJ3QgcmV1c2UgZGVzdHJveSgpLWVkIENvbXBvbmVudHMhIik7cmV0dXJuIHRoaXMuaXNSb290KCkmJih0aGlzLl9yb290RWxlbWVudD10LHRoaXMuX3Jvb3RFbGVtZW50LmNsYXNzZWQoInBsb3R0YWJsZSIsITApKSx0aGlzLl9lbGVtZW50IT1udWxsP3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQubm9kZSgpKToodGhpcy5fZWxlbWVudD10LmFwcGVuZCgiZGl2IiksdGhpcy5fc2V0dXAoKSksdGhpcy5faXNBbmNob3JlZD0hMCx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLm9uQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0KHRoaXMpLHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uQW5jaG9yQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2V0dXB8fCh0aGlzLl9jc3NDbGFzc2VzLmZvckVhY2goZnVuY3Rpb24ocil7dC5fZWxlbWVudC5jbGFzc2VkKHIsITApfSksdGhpcy5fY3NzQ2xhc3Nlcz1uZXcgeVMuU2V0LHRoaXMuX2JhY2tncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImJhY2tncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fY29udGVudD10aGlzLl9lbGVtZW50LmFwcGVuZCgic3ZnIikuY2xhc3NlZCgiY29udGVudCIsITApLHRoaXMuX2ZvcmVncm91bmRDb250YWluZXI9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImZvcmVncm91bmQtY29udGFpbmVyIiwhMCksdGhpcy5fb3ZlcmZsb3dIaWRkZW4/dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctaGlkZGVuIiwhMCk6dGhpcy5fY29udGVudC5jbGFzc2VkKCJjb21wb25lbnQtb3ZlcmZsb3ctdmlzaWJsZSIsITApLHRoaXMuX2lzU2V0dXA9ITApfSxlLnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbih0LHIpe3JldHVybnttaW5XaWR0aDowLG1pbkhlaWdodDowfX0sZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbih0LHIsbil7aWYodD09bnVsbHx8cj09bnVsbHx8bj09bnVsbCl7aWYodGhpcy5fZWxlbWVudD09bnVsbCl0aHJvdyBuZXcgRXJyb3IoImFuY2hvcigpIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBjb21wdXRlTGF5b3V0KCkiKTtpZih0aGlzLl9yb290RWxlbWVudCE9bnVsbCl7dD17eDowLHk6MH07dmFyIGk9dGhpcy5fcm9vdEVsZW1lbnQubm9kZSgpO3I9eVMuRE9NLmVsZW1lbnRXaWR0aChpKSxuPXlTLkRPTS5lbGVtZW50SGVpZ2h0KGkpfWVsc2UgdGhyb3cgbmV3IEVycm9yKCJudWxsIGFyZ3VtZW50cyBjYW5ub3QgYmUgcGFzc2VkIHRvIGNvbXB1dGVMYXlvdXQoKSBvbiBhIG5vbi1yb290LCB1bmFuY2hvcmVkIG5vZGUiKX12YXIgbz10aGlzLl9zaXplRnJvbU9mZmVyKHIsbiksYT1vLmhlaWdodCxzPW8ud2lkdGgsbD1lLl94QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feEFsaWdubWVudF0sYz1lLl95QWxpZ25Ub1Byb3BvcnRpb25bdGhpcy5feUFsaWdubWVudF0sdT10LngrKHItcykqbCxoPXQueSsobi1hKSpjO3JldHVybiB0aGlzLnNldEJvdW5kcyhzLGEsdSxoKSx0aGlzfSxlLnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24odCxyLG4saSl7cmV0dXJuIG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPTApLHRoaXMuX3dpZHRoPXQsdGhpcy5faGVpZ2h0PXIsdGhpcy5fb3JpZ2luPXt4Om4seTppfSx0aGlzLl9lbGVtZW50IT1udWxsJiZ0aGlzLl9lbGVtZW50LnN0eWxlcyh7bGVmdDpuKyJweCIsaGVpZ2h0OnIrInB4Iix0b3A6aSsicHgiLHdpZHRoOnQrInB4In0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIhPW51bGwmJnRoaXMuX3Jlc2l6ZUhhbmRsZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMucmVxdWVzdGVkU3BhY2UodCxyKTtyZXR1cm57d2lkdGg6dGhpcy5maXhlZFdpZHRoKCk/TWF0aC5taW4odCxuLm1pbldpZHRoKTp0LGhlaWdodDp0aGlzLmZpeGVkSGVpZ2h0KCk/TWF0aC5taW4ocixuLm1pbkhlaWdodCk6cn19LGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZ0aGlzLndpZHRoKCk+PTAmJnRoaXMuaGVpZ2h0KCk+PTAmJlJGLnJlZ2lzdGVyVG9SZW5kZXIodGhpcyksdGhpc30sZS5wcm90b3R5cGUucmVuZGVyTG93UHJpb3JpdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXIoKX0sZS5wcm90b3R5cGUuX3NjaGVkdWxlQ29tcHV0ZUxheW91dD1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX2lzU2V0dXAmJlJGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpfSxlLnByb3RvdHlwZS5vblJlc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzaXplSGFuZGxlcj10LHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiYodGhpcy5pc1Jvb3QoKT90aGlzLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQoKTp0aGlzLnBhcmVudCgpLnJlZHJhdygpKSx0aGlzfSxlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLnJlbmRlclRvPWZ1bmN0aW9uKHQpe2lmKHRoaXMuZGV0YWNoKCksdCE9bnVsbCl7dmFyIHI9dm9pZCAwO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8X3plLmlzRWxlbWVudCh0KT9yPUhYdC5zZWxlY3QodCk6cj1WWHQuY29lcmNlRXh0ZXJuYWxEMyh0KSwhci5ub2RlKCl8fHIubm9kZSgpLm5vZGVOYW1lPT1udWxsKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIHJlcXVpcmVzIGEgdmFsaWQgRWxlbWVudCB0byByZW5kZXJUbyIpO2lmKHIubm9kZSgpLm5vZGVOYW1lPT09InN2ZyIpdGhyb3cgbmV3IEVycm9yKCJQbG90dGFibGUgMy54IGFuZCBsYXRlciBjYW4gb25seSByZW5kZXJUbyBhbiBIVE1MIGNvbXBvbmVudDsgcGFzcyBhIGRpdiBpbnN0ZWFkISIpO3RoaXMuYW5jaG9yKHIpfWlmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJJZiBhIENvbXBvbmVudCBoYXMgbmV2ZXIgYmVlbiByZW5kZXJlZCBiZWZvcmUsIHRoZW4gcmVuZGVyVG8gbXVzdCBiZSBnaXZlbiBhIG5vZGUgdG8gcmVuZGVyIHRvLCBvciBhIGQzLlNlbGVjdGlvbiwgb3IgYSBzZWxlY3RvciBzdHJpbmciKTtyZXR1cm4gUkYucmVnaXN0ZXJUb0NvbXB1dGVMYXlvdXRBbmRSZW5kZXIodGhpcyksUkYuZmx1c2goKSx0aGlzfSxlLnByb3RvdHlwZS54QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3hBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl94QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS55QWxpZ25tZW50PWZ1bmN0aW9uKHQpe2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMuX3lBbGlnbm1lbnQ7aWYodD10LnRvTG93ZXJDYXNlKCksZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RdPT1udWxsKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50OiAiK3QpO3JldHVybiB0aGlzLl95QWxpZ25tZW50PXQsdGhpcy5yZWRyYXcoKSx0aGlzfSxlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD8hMTp0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuaGFzKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0KX0sZS5wcm90b3R5cGUuYWRkQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpczoodGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmFkZCh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCwhMCksdGhpcyl9LGUucHJvdG90eXBlLnJlbW92ZUNsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5kZWxldGUodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITEpLHRoaXMpfSxlLnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudChudWxsKSx0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9lbGVtZW50LnJlbW92ZSgpLHRoaXMuX2lzQW5jaG9yZWQ9ITEsdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZkRldGFjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb25EZXRhY2hDYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0PT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJlbnQ7aWYodCE9PW51bGwmJiF0Lmhhcyh0aGlzKSl0aHJvdyBuZXcgRXJyb3IoIlBhc3NlZCBpbnZhbGlkIHBhcmVudCIpO3JldHVybiB0aGlzLl9wYXJlbnQ9dCx0aGlzfSxlLnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbigpO3JldHVybnt0b3BMZWZ0OnQsYm90dG9tUmlnaHQ6e3g6dC54K3RoaXMud2lkdGgoKSx5OnQueSt0aGlzLmhlaWdodCgpfX19LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUud2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2lkdGh9LGUucHJvdG90eXBlLmhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oZWlnaHR9LGUucHJvdG90eXBlLm9yaWdpbj1mdW5jdGlvbigpe3JldHVybnt4OnRoaXMuX29yaWdpbi54LHk6dGhpcy5fb3JpZ2luLnl9fSxlLnByb3RvdHlwZS5vcmlnaW5Ub1Jvb3Q9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vcmlnaW4oKSxyPXRoaXMucGFyZW50KCk7ciE9bnVsbDspe3ZhciBuPXIub3JpZ2luKCk7dC54Kz1uLngsdC55Kz1uLnkscj1yLnBhcmVudCgpfXJldHVybiB0fSxlLnByb3RvdHlwZS5yb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXM7IXQuaXNSb290KCk7KXQ9dC5wYXJlbnQoKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUuaXNSb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCk9PW51bGx9LGUucHJvdG90eXBlLmZvcmVncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yZWdyb3VuZENvbnRhaW5lcn0sZS5wcm90b3R5cGUuY29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50fSxlLnByb3RvdHlwZS5lbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnR9LGUucHJvdG90eXBlLnJvb3RFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdCgpLl9yb290RWxlbWVudH0sZS5wcm90b3R5cGUuYmFja2dyb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyfSxlLl94QWxpZ25Ub1Byb3BvcnRpb249e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sZS5feUFsaWduVG9Qcm9wb3J0aW9uPXt0b3A6MCxjZW50ZXI6LjUsYm90dG9tOjF9LGV9KCk7UUEuQ29tcG9uZW50PXl6ZX0pO3ZhciBCdT1IKEZ1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHZTPShFcigpLFV0KE1yKSksdnplPSExO2Z1bmN0aW9uIHh6ZShlLHQscil7ZT09PXZvaWQgMCYmKGU9MiksdD09PXZvaWQgMCYmKHQ9IiQiKSxyPT09dm9pZCAwJiYocj0hMCk7dmFyIG49cWl0KGUpO3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz1uKE1hdGguYWJzKGkpKTtyZXR1cm4gbyE9PSIiJiYocj9vPXQrbzpvKz10LGk8MCYmKG89Ii0iK28pKSxvfX1GdS5jdXJyZW5jeT14emU7ZnVuY3Rpb24gcWl0KGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC50b0ZpeGVkKGUpfX1GdS5maXhlZD1xaXQ7ZnVuY3Rpb24gYnplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtpZih0eXBlb2YgdD09Im51bWJlciIpe3ZhciByPU1hdGgucG93KDEwLGUpO3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZCh0KnIpL3IpfWVsc2UgcmV0dXJuIFN0cmluZyh0KX19RnUuZ2VuZXJhbD1iemU7ZnVuY3Rpb24gd3plKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSl9fUZ1LmlkZW50aXR5PXd6ZTtmdW5jdGlvbiBTemUoZSl7ZT09PXZvaWQgMCYmKGU9MCk7dmFyIHQ9cWl0KGUpO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yKjEwMCxpPXIudG9TdHJpbmcoKSxvPU1hdGgucG93KDEwLGkubGVuZ3RoLShpLmluZGV4T2YoIi4iKSsxKSk7cmV0dXJuIG49cGFyc2VJbnQoKG4qbykudG9TdHJpbmcoKSwxMCkvbyx0KG4pKyIlIn19RnUucGVyY2VudGFnZT1TemU7ZnVuY3Rpb24gTXplKGUpe3JldHVybiBlPT09dm9pZCAwJiYoZT0zKSxORihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdlMuZm9ybWF0KCIuIitlKyJzIikodCl9fUZ1LnNpU3VmZml4PU16ZTtmdW5jdGlvbiBFemUoZSl7ZT09PXZvaWQgMCYmKGU9MyksTkYoZSk7dmFyIHQ9IktNQlRRIixyPXZTLmZvcm1hdCgiLiIrZSsiZSIpLG49dlMuZm9ybWF0KCIuIitlKyJmIiksaT1NYXRoLnBvdygxMCwzKih0Lmxlbmd0aCsxKSksbz1NYXRoLnBvdygxMCwtZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGguYWJzKGEpO2lmKChzPG98fHM+PWkpJiZzIT09MClyZXR1cm4gcihhKTtmb3IodmFyIGw9LTE7cz49TWF0aC5wb3coMWUzLGwrMikmJmw8dC5sZW5ndGgtMTspbCsrO3ZhciBjPSIiO3JldHVybiBsPT09LTE/Yz1uKGEpOmM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdLChhPjAmJmMuc3Vic3RyKDAsNCk9PT0iMTAwMCJ8fGE8MCYmYy5zdWJzdHIoMCw1KT09PSItMTAwMCIpJiYobDx0Lmxlbmd0aC0xPyhsKyssYz1uKGEvTWF0aC5wb3coMWUzLGwrMSkpK3RbbF0pOmM9cihhKSksY319RnUuc2hvcnRTY2FsZT1FemU7ZnVuY3Rpb24gVHplKCl7dmFyIGU9W3tzcGVjaWZpZXI6Ii4lTCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbGxpc2Vjb25kcygpIT09MH19LHtzcGVjaWZpZXI6IjolUyIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSTolTSIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKSE9PTB9fSx7c3BlY2lmaWVyOiIlSSAlcCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCkhPT0wfX0se3NwZWNpZmllcjoiJWEgJWQiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKSE9PTAmJnQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpIT09MX19LHtzcGVjaWZpZXI6IiViIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TW9udGgoKSE9PTB9fV07cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPWUuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpLnByZWRpY2F0ZSh0KX0pLG49ci5sZW5ndGg+MD9yWzBdLnNwZWNpZmllcjoiJVkiO3JldHVybiB2Uy50aW1lRm9ybWF0KG4pKHQpfX1GdS5tdWx0aVRpbWU9VHplO2Z1bmN0aW9uIEN6ZShlLHQpe3JldHVybiB0PT09dm9pZCAwJiYodD12emUpLHQ/dlMudXRjRm9ybWF0KGUpOnZTLnRpbWVGb3JtYXQoZSl9RnUudGltZT1DemU7ZnVuY3Rpb24gTkYoZSl7aWYoZTwwfHxlPjIwKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyMCIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCJGb3JtYXR0ZXIgcHJlY2lzaW9uIG11c3QgYmUgYW4gaW50ZWdlciIpfX0pO3ZhciB0ND1IKERGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShERiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEF6ZT0oZGUoKSxVdChwZSkpLHlkPShFcigpLFV0KE1yKSksR2l0PV9sKCksUHplPWtjKCkscVh0PUJ1KCkseFM9RmUoKSxJemU9SWYoKTtERi5BeGlzT3JpZW50YXRpb249SXplLm1ha2VFbnVtKFsiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwidG9wIl0pO3ZhciBMemU9ZnVuY3Rpb24oZSl7QXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7aWYoaS5fZW5kVGlja0xlbmd0aD01LGkuX2lubmVyVGlja0xlbmd0aD01LGkuX3RpY2tMYWJlbFBhZGRpbmc9MTAsaS5fbWFyZ2luPTE1LGkuX3Nob3dFbmRUaWNrTGFiZWxzPSExLGkuX2Fubm90YXRpb25zRW5hYmxlZD0hMSxpLl9hbm5vdGF0aW9uVGllckNvdW50PTEscj09bnVsbHx8bj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkF4aXMgcmVxdWlyZXMgYSBzY2FsZSBhbmQgb3JpZW50YXRpb24iKTtyZXR1cm4gaS5fc2NhbGU9cixpLm9yaWVudGF0aW9uKG4pLGkuX3NldERlZmF1bHRBbGlnbm1lbnQoKSxpLmFkZENsYXNzKCJheGlzIiksaS5pc0hvcml6b250YWwoKT9pLmFkZENsYXNzKCJ4LWF4aXMiKTppLmFkZENsYXNzKCJ5LWF4aXMiKSxpLmZvcm1hdHRlcihxWHQuaWRlbnRpdHkoKSksaS5fcmVzY2FsZUNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLl9yZXNjYWxlKCl9LGkuX3NjYWxlLm9uVXBkYXRlKGkuX3Jlc2NhbGVDYWxsYmFjayksaS5fYW5ub3RhdGVkVGlja3M9W10saS5fYW5ub3RhdGlvbkZvcm1hdHRlcj1xWHQuaWRlbnRpdHkoKSxpfXJldHVybiB0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZXNjYWxlQ2FsbGJhY2spfSx0LnByb3RvdHlwZS50aWNrTGFiZWxEYXRhT25FbGVtZW50PWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwpe2Zvcih2YXIgbjtyIT1udWxsJiZyLmNsYXNzTGlzdCYmbj09PXZvaWQgMDspci5jbGFzc0xpc3QuY29udGFpbnModC5USUNLX0xBQkVMX0NMQVNTKT9uPXI6cj1yLnBhcmVudE5vZGU7cmV0dXJuIHI9PT12b2lkIDA/dm9pZCAwOnlkLnNlbGVjdChyKS5kYXR1bSgpfX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9MCxvPTA7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYobz10aGlzLl9jb21wdXRlSGVpZ2h0KCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO28rPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9fWVsc2UgaWYoaT10aGlzLl9jb21wdXRlV2lkdGgoKSt0aGlzLl9tYXJnaW4sdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMip0Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkc7aSs9YSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKX1yZXR1cm57bWluV2lkdGg6aSxtaW5IZWlnaHQ6b319LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0hvcml6b250YWwoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGU9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk6dGhpcy5fc2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5yZXF1ZXN0ZWRTcGFjZShyLG4pO3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpP3t3aWR0aDpyLGhlaWdodDppLm1pbkhlaWdodH06e2hlaWdodDpuLHdpZHRoOmkubWluV2lkdGh9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90aWNrTWFya0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCksdGhpcy5fYmFzZWxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNpcmNsZS1jb250YWluZXIiLCEwKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tcmVjdC1jb250YWluZXIiLCEwKTt2YXIgcj10aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiwhMCksbj1uZXcgR2l0LlN2Z0NvbnRleHQoci5ub2RlKCkpO3RoaXMuX2Fubm90YXRpb25NZWFzdXJlcj1uZXcgR2l0LkNhY2hlTWVhc3VyZXIobiksdGhpcy5fYW5ub3RhdGlvbldyaXRlcj1uZXcgR2l0LldyaXRlcih0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIsbil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VGlja1ZhbHVlcygpLG49dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxpPW4uZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShuKTtyZXR1cm4gaS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSkseWQuc2VsZWN0KGkubm9kZXMoKVswXSkuY2xhc3NlZCh0LkVORF9USUNLX01BUktfQ0xBU1MsITApLmF0dHJzKHRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCghMCkpLHlkLnNlbGVjdChpLm5vZGVzKClbci5sZW5ndGgtMV0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSxuLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5hdHRycyh0aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKSksdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLmFubm90YXRlZFRpY2tzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRlZFRpY2tzOih0aGlzLl9hbm5vdGF0ZWRUaWNrcz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25Gb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcjoodGhpcy5fYW5ub3RhdGlvbkZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25zRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ6KHRoaXMuX2Fubm90YXRpb25zRW5hYmxlZD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLmFubm90YXRpb25UaWVyQ291bnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJhbm5vdGF0aW9uVGllckNvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbm5vdGF0aW9uVGllckNvdW50PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZHJhd0Fubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORyxpPW5ldyB4Uy5NYXAsbz10aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCk7by5mb3JFYWNoKGZ1bmN0aW9uKFApe3ZhciBrPXIuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKHIuYW5ub3RhdGlvbkZvcm1hdHRlcigpKFApKSxPPXt3aWR0aDprLndpZHRoKzIqbixoZWlnaHQ6ay5oZWlnaHQrMipufTtpLnNldChQLE8pfSk7dmFyIGE9dGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQrMipuLHM9dGhpcy5fYW5ub3RhdGlvblRvVGllcihpKSxsPW5ldyB4Uy5TZXQsYz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLHU9dGhpcy5fY29yZVNpemUoKSxoPU1hdGgubWluKHRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpLE1hdGguZmxvb3IoKGMtdSkvYSkpO3MuZm9yRWFjaChmdW5jdGlvbihQLGspeyhQPT09LTF8fFA+PWgpJiZsLmFkZChrKX0pO3ZhciBmPWZ1bmN0aW9uKFAsayxPKXt2YXIgRD1QLnNlbGVjdEFsbCgiLiIrTykuZGF0YShvKSxCPUQuZW50ZXIoKS5hcHBlbmQoaykuY2xhc3NlZChPLCEwKS5tZXJnZShEKTtyZXR1cm4gRC5leGl0KCkucmVtb3ZlKCksQn0scD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHMuZ2V0KFApKmErdTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gYy11LXMuZ2V0KFApKmF9fSxkPWZ1bmN0aW9uKFApe3JldHVybiByLl9zY2FsZS5zY2FsZShQKX0sZz1mdW5jdGlvbihQKXtyZXR1cm4gbC5oYXMoUCk/ImhpZGRlbiI6InZpc2libGUifSxfO3N3aXRjaCh0aGlzLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpfPTA7YnJlYWs7Y2FzZSJ0b3AiOl89dGhpcy5oZWlnaHQoKTticmVhaztjYXNlImxlZnQiOl89dGhpcy53aWR0aCgpO2JyZWFrfXZhciB5PXRoaXMuaXNIb3Jpem9udGFsKCk7Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGluZS1jb250YWluZXIiKSwibGluZSIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1MpLmF0dHJzKHt4MTp5P2Q6Xyx4Mjp5P2Q6cCx5MTp5P186ZCx5Mjp5P3A6ZCx2aXNpYmlsaXR5Omd9KSxmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiksImNpcmNsZSIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUykuYXR0cnMoe2N4Onk/ZDpfLGN5Onk/XzpkLHI6M30pO3ZhciB4PWZ1bmN0aW9uKFApe3N3aXRjaChyLm9yaWVudGF0aW9uKCkpe2Nhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpyZXR1cm4gcChQKTtjYXNlInRvcCI6Y2FzZSJsZWZ0IjpyZXR1cm4gcChQKS1pLmdldChQKS5oZWlnaHR9fTtmKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1yZWN0LWNvbnRhaW5lciIpLCJyZWN0Iix0LkFOTk9UQVRJT05fUkVDVF9DTEFTUykuYXR0cnMoe3g6eT9kOngseTp5P3g6ZCx3aWR0aDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH0saGVpZ2h0Onk/ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLmhlaWdodH06ZnVuY3Rpb24oUCl7cmV0dXJuIGkuZ2V0KFApLndpZHRofSx2aXNpYmlsaXR5Omd9KTt2YXIgYj10aGlzLl9hbm5vdGF0aW9uV3JpdGVyLFM9dGhpcy5hbm5vdGF0aW9uRm9ybWF0dGVyKCksQz1mKHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0KCIuYW5ub3RhdGlvbi1sYWJlbC1jb250YWluZXIiKSwiZyIsdC5BTk5PVEFUSU9OX0xBQkVMX0NMQVNTKTtDLnNlbGVjdEFsbCgiLnRleHQtY29udGFpbmVyIikucmVtb3ZlKCksQy5hdHRycyh7dHJhbnNmb3JtOmZ1bmN0aW9uKFApe3ZhciBrPXk/ZChQKTp4KFApLE89eT94KFApOmQoUCk7cmV0dXJuInRyYW5zbGF0ZSgiK2srIiwiK08rIikifSx2aXNpYmlsaXR5Omd9KS5lYWNoKGZ1bmN0aW9uKFApe2Iud3JpdGUoUyhQKSx5P2kuZ2V0KFApLndpZHRoOmkuZ2V0KFApLmhlaWdodCx5P2kuZ2V0KFApLmhlaWdodDppLmdldChQKS53aWR0aCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246eT8wOjkwfSx5ZC5zZWxlY3QodGhpcykubm9kZSgpKX0pfSx0LnByb3RvdHlwZS5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9zY2FsZS5yYW5nZSgpO3JldHVybiB4Uy5BcnJheS51bmlxKHRoaXMuYW5ub3RhdGVkVGlja3MoKS5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIGk9PW51bGw/ITE6eFMuTWF0aC5pblJhbmdlKHIuX3NjYWxlLnNjYWxlKGkpLG5bMF0sblsxXSl9KSl9LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX2NvbXB1dGVIZWlnaHQoKTp0aGlzLl9jb21wdXRlV2lkdGgoKTtyZXR1cm4gTWF0aC5taW4obixyKX0sdC5wcm90b3R5cGUuX2Fubm90YXRpb25UaWVySGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HfSx0LnByb3RvdHlwZS5fYW5ub3RhdGlvblRvVGllcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W1tdXSxvPW5ldyB4Uy5NYXAsYT10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpO3JldHVybiB0aGlzLl9hbm5vdGF0ZWRUaWNrc1RvUmVuZGVyKCkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgbD1uLl9zY2FsZS5zY2FsZShzKSxjPXIuZ2V0KHMpLndpZHRoO2lmKGw8MHx8bCtjPmEpe28uc2V0KHMsLTEpO3JldHVybn1mb3IodmFyIHU9ZnVuY3Rpb24oZil7cmV0dXJuIGlbZl0uc29tZShmdW5jdGlvbihwKXt2YXIgZD1uLl9zY2FsZS5zY2FsZShwKSxnPXIuZ2V0KHApLndpZHRoO3JldHVybiBsK2M+PWQmJmw8PWQrZ30pfSxoPTA7dShoKTspaCsrLGkubGVuZ3RoPT09aCYmaS5wdXNoKFtdKTtpW2hdLnB1c2gocyksby5zZXQocyxoKX0pLG99LHQucHJvdG90eXBlLl9yZW1vdmVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3RoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1saW5lIikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWNpcmNsZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1yZWN0IikucmVtb3ZlKCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWxhYmVsIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2g9ZnVuY3Rpb24oKXt2YXIgcj17eDE6MCx5MTowLHgyOjAseTI6MH07c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6ci54Mj10aGlzLndpZHRoKCk7YnJlYWs7Y2FzZSJ0b3AiOnIueDI9dGhpcy53aWR0aCgpLHIueTE9dGhpcy5oZWlnaHQoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpyLngxPXRoaXMud2lkdGgoKSxyLngyPXRoaXMud2lkdGgoKSxyLnkyPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJyaWdodCI6ci55Mj10aGlzLmhlaWdodCgpO2JyZWFrfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBpPXt4MTowLHkxOjAseDI6MCx5MjowfSxvPWZ1bmN0aW9uKHMpe3JldHVybiBuLl9zY2FsZS5zY2FsZShzKX07dGhpcy5pc0hvcml6b250YWwoKT8oaS54MT1vLGkueDI9byk6KGkueTE9byxpLnkyPW8pO3ZhciBhPXI/dGhpcy5fZW5kVGlja0xlbmd0aDp0aGlzLl9pbm5lclRpY2tMZW5ndGg7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6aS55Mj1hO2JyZWFrO2Nhc2UidG9wIjppLnkxPXRoaXMuaGVpZ2h0KCksaS55Mj10aGlzLmhlaWdodCgpLWE7YnJlYWs7Y2FzZSJsZWZ0IjppLngxPXRoaXMud2lkdGgoKSxpLngyPXRoaXMud2lkdGgoKS1hO2JyZWFrO2Nhc2UicmlnaHQiOmkueDI9YTticmVha31yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3NldERlZmF1bHRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fb3JpZW50YXRpb24pe2Nhc2UiYm90dG9tIjp0aGlzLnlBbGlnbm1lbnQoInRvcCIpO2JyZWFrO2Nhc2UidG9wIjp0aGlzLnlBbGlnbm1lbnQoImJvdHRvbSIpO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy54QWxpZ25tZW50KCJyaWdodCIpO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMueEFsaWdubWVudCgibGVmdCIpO2JyZWFrfX0sdC5wcm90b3R5cGUuaXNIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9uPT09InRvcCJ8fHRoaXMuX29yaWVudGF0aW9uPT09ImJvdHRvbSJ9LHQucHJvdG90eXBlLmdldFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NjYWxlfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclRpY2tMZW5ndGg9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImlubmVyIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5faW5uZXJUaWNrTGVuZ3RoPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmRUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZW5kIHRpY2sgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fZW5kVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX21heExhYmVsVGlja0xlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCk/TWF0aC5tYXgodGhpcy5pbm5lclRpY2tMZW5ndGgoKSx0aGlzLmVuZFRpY2tMZW5ndGgoKSk6dGhpcy5pbm5lclRpY2tMZW5ndGgoKX0sdC5wcm90b3R5cGUudGlja0xhYmVsUGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInRpY2sgbGFiZWwgcGFkZGluZyBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm1hcmdpbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9tYXJnaW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibWFyZ2luIHNpemUgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl9tYXJnaW49cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uO3ZhciBuPXIudG9Mb3dlckNhc2UoKTtpZihuIT09InRvcCImJm4hPT0iYm90dG9tIiYmbiE9PSJsZWZ0IiYmbiE9PSJyaWdodCIpdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBvcmllbnRhdGlvbiIpO3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuc2hvd0VuZFRpY2tMYWJlbHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc2hvd0VuZFRpY2tMYWJlbHM6KHRoaXMuX3Nob3dFbmRUaWNrTGFiZWxzPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3Nob3dBbGxUaWNrTWFya3M9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKS5lYWNoKGZ1bmN0aW9uKCl7eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpfSl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja0xhYmVscz1mdW5jdGlvbigpe3RoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUyk7bi5lbXB0eSgpfHxuLmVhY2goZnVuY3Rpb24oaSxvKXt4Uy5ET00uY2xpZW50UmVjdEluc2lkZSh0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24obyxhKXt2YXIgcz15ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gcz09PSJpbmhlcml0Inx8cz09PSJ2aXNpYmxlIn0pLGk9bi5kYXRhKCk7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7aS5pbmRleE9mKG8pPT09LTEmJnlkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5yZXNldCgpfSx0LkVORF9USUNLX01BUktfQ0xBU1M9ImVuZC10aWNrLW1hcmsiLHQuVElDS19NQVJLX0NMQVNTPSJ0aWNrLW1hcmsiLHQuVElDS19MQUJFTF9DTEFTUz0idGljay1sYWJlbCIsdC5BTk5PVEFUSU9OX0xJTkVfQ0xBU1M9ImFubm90YXRpb24tbGluZSIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1M9ImFubm90YXRpb24tcmVjdCIsdC5BTk5PVEFUSU9OX0NJUkNMRV9DTEFTUz0iYW5ub3RhdGlvbi1jaXJjbGUiLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUz0iYW5ub3RhdGlvbi1sYWJlbCIsdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HPTQsdH0oUHplLkNvbXBvbmVudCk7REYuQXhpcz1MemV9KTt2YXIgV1h0PUgoaml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBremU9KGRlKCksVXQocGUpKSxXaXQ9KEVyKCksVXQoTXIpKSxPRj1fbCgpLFJ6ZT1rYygpLEdYdD1GZSgpLFlpdD10NCgpLE56ZT1mdW5jdGlvbihlKXtremUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe249PT12b2lkIDAmJihuPSJib3R0b20iKTt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxBbmdsZT0wLGkuX3RpY2tMYWJlbFNoZWFyQW5nbGU9MCxpLmFkZENsYXNzKCJjYXRlZ29yeS1heGlzIiksaX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JhcHBlciIse2dldDpmdW5jdGlvbigpe3ZhciByPW5ldyBPRi5XcmFwcGVyO3JldHVybiB0aGlzLl90aWNrTGFiZWxNYXhMaW5lcyE9bnVsbCYmci5tYXhMaW5lcyh0aGlzLl90aWNrTGFiZWxNYXhMaW5lcykscn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsIl93cml0ZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE9GLldyaXRlcih0aGlzLl9tZWFzdXJlcix0aGlzLl90eXBlc2V0dGVyQ29udGV4dCx0aGlzLl93cmFwcGVyKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90eXBlc2V0dGVyQ29udGV4dD1uZXcgT0YuU3ZnQ29udGV4dCh0aGlzLl90aWNrTGFiZWxDb250YWluZXIubm9kZSgpKSx0aGlzLl9tZWFzdXJlcj1uZXcgT0YuQ2FjaGVNZWFzdXJlcih0aGlzLl90eXBlc2V0dGVyQ29udGV4dCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVkcmF3KCl9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5pc0hvcml6b250YWwoKT8wOnRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKSxvPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSt0aGlzLm1hcmdpbigpOjA7aWYodGhpcy5fc2NhbGUuZG9tYWluKCkubGVuZ3RoPT09MClyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH07aWYodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKSl7dmFyIGE9dGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSp0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKTt0aGlzLmlzSG9yaXpvbnRhbCgpP28rPWE6aSs9YX12YXIgcz10aGlzLl9tZWFzdXJlVGlja0xhYmVscyhyLG4pO3JldHVybnttaW5XaWR0aDpzLnVzZWRXaWR0aCtpLG1pbkhlaWdodDpzLnVzZWRIZWlnaHQrb319LHQucHJvdG90eXBlLl9jb3JlU2l6ZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuaXNIb3Jpem9udGFsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLndpZHRoKCksbj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMucmVxdWVzdGVkU3BhY2UodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpLm1pbkhlaWdodDp0aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5XaWR0aCxpPXRoaXMubWFyZ2luKCkrdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKSxvPW4taTtyZXR1cm4gTWF0aC5taW4obyxyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXREb3duc2FtcGxlSW5mbygpLmRvbWFpbn0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm4gUnplLkNvbXBvbmVudC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLmdldERvd25zYW1wbGVJbmZvPWZ1bmN0aW9uKHIsbil7cj09PXZvaWQgMCYmKHI9dGhpcy5fc2NhbGUpLG49PT12b2lkIDAmJihuPXIuaW52ZXJ0UmFuZ2UoKSk7dmFyIGk9dGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wPzE6MS9NYXRoLmNvcyh0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlLzE4MCpNYXRoLlBJKSxvPXQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYKmksYT1NYXRoLmNlaWwoby9yLnN0ZXBXaWR0aCgpKTtyZXR1cm57ZG9tYWluOm4uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIGwlYT09PTB9KSxzdGVwV2lkdGg6YSpyLnN0ZXBXaWR0aCgpfX0sdC5wcm90b3R5cGUudGlja0xhYmVsQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU7aWYociE9PTAmJnIhPT05MCYmciE9PS05MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IG9ubHkgMCwgOTAsIGFuZCAtOTAgYXJlIHZhbGlkIHZhbHVlcyIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsU2hlYXJBbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlO2lmKHI8LTgwfHxyPjgwKXRocm93IG5ldyBFcnJvcigiQW5nbGUgIityKyIgbm90IHN1cHBvcnRlZDsgTXVzdCBiZSBiZXR3ZWVuIFstODAsIDgwXSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxTaGVhckFuZ2xlPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxNYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fdGlja0xhYmVsTWF4V2lkdGg6KHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heExpbmVzOih0aGlzLl90aWNrTGFiZWxNYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLl90aWNrU3BhY2VSZXF1aXJlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSt0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKX0sdC5wcm90b3R5cGUuX2RyYXdUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbyxhO3N3aXRjaCh0aGlzLnRpY2tMYWJlbEFuZ2xlKCkpe2Nhc2UgMDpvPXtsZWZ0OiJyaWdodCIscmlnaHQ6ImxlZnQiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9LGE9e2xlZnQ6ImNlbnRlciIscmlnaHQ6ImNlbnRlciIsdG9wOiJib3R0b20iLGJvdHRvbToidG9wIn07YnJlYWs7Y2FzZSA5MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoicmlnaHQiLGJvdHRvbToibGVmdCJ9LGE9e2xlZnQ6InRvcCIscmlnaHQ6ImJvdHRvbSIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWs7Y2FzZS05MDpvPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoibGVmdCIsYm90dG9tOiJyaWdodCJ9LGE9e2xlZnQ6ImJvdHRvbSIscmlnaHQ6InRvcCIsdG9wOiJjZW50ZXIiLGJvdHRvbToiY2VudGVyIn07YnJlYWt9bi5lYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPVdpdC5zZWxlY3QodGhpcyksYz1pLmlzSG9yaXpvbnRhbCgpP3I6aS53aWR0aCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCksdT1pLmlzSG9yaXpvbnRhbCgpP2kuaGVpZ2h0KCktaS5fdGlja1NwYWNlUmVxdWlyZWQoKTpyLGg9e3hBbGlnbjpvW2kub3JpZW50YXRpb24oKV0seUFsaWduOmFbaS5vcmllbnRhdGlvbigpXSx0ZXh0Um90YXRpb246aS50aWNrTGFiZWxBbmdsZSgpLHRleHRTaGVhcjppLnRpY2tMYWJlbFNoZWFyQW5nbGUoKX07aWYoaS5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwpe2lmKGkub3JpZW50YXRpb24oKT09PSJsZWZ0IiYmYz5pLl90aWNrTGFiZWxNYXhXaWR0aCl7dmFyIGY9Yy1pLl90aWNrTGFiZWxNYXhXaWR0aCxwPWwuYXR0cigidHJhbnNmb3JtIikrIiB0cmFuc2xhdGUoIitmKyIsIDApIjtsLmF0dHIoInRyYW5zZm9ybSIscCl9Yz1NYXRoLm1pbihjLGkuX3RpY2tMYWJlbE1heFdpZHRoKX1pLl93cml0ZXIud3JpdGUoaS5mb3JtYXR0ZXIoKShzKSxjLHUsaCxsLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX21lYXN1cmVUaWNrTGFiZWxzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3NjYWxlLGE9by5jbG9uZVdpdGhvdXRQcm92aWRlcnMoKS5yYW5nZShbMCx0aGlzLmlzSG9yaXpvbnRhbCgpP3I6bl0pLHM9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhhKSxsPXMuZG9tYWluLGM9cy5zdGVwV2lkdGgsdT1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk7dGhpcy5pc0hvcml6b250YWwoKSYmKHU9Yyx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih1PW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksdT1NYXRoLm1heCh1LDApKTt2YXIgaD1jO3RoaXMuaXNIb3Jpem9udGFsKCkmJihoPW4tdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSx0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJihoPXItdGhpcy5fdGlja1NwYWNlUmVxdWlyZWQoKSksaD1NYXRoLm1heChoLDApKSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHU9TWF0aC5taW4odSx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBmPWwubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBpLl93cmFwcGVyLndyYXAoaS5mb3JtYXR0ZXIoKSh4KSxpLl9tZWFzdXJlcix1LGgpfSkscD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/V2l0LnN1bTpHWHQuTWF0aC5tYXgsZD10aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxBbmdsZT09PTA/R1h0Lk1hdGgubWF4OldpdC5zdW0sZz1wKGYsZnVuY3Rpb24oeCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoeC53cmFwcGVkVGV4dCkud2lkdGh9LDApLF89ZChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLmhlaWdodH0sMCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlIT09MCYmKHk9W18sZ10sZz15WzBdLF89eVsxXSkse3VzZWRXaWR0aDpnLHVzZWRIZWlnaHQ6X307dmFyIHl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLGk9dGhpcy5nZXREb3duc2FtcGxlSW5mbyhuKSxvPWkuZG9tYWluLGE9aS5zdGVwV2lkdGgscz1hO3RoaXMuaXNIb3Jpem9udGFsKCkmJnRoaXMuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsJiYocz1NYXRoLm1pbihzLHRoaXMuX3RpY2tMYWJlbE1heFdpZHRoKSk7dmFyIGw9ZnVuY3Rpb24ocCxkKXt2YXIgZz1uLnNjYWxlKHApLXMvMixfPXIuaXNIb3Jpem9udGFsKCk/ZzowLHk9ci5pc0hvcml6b250YWwoKT8wOmc7cmV0dXJuInRyYW5zbGF0ZSgiK18rIiwiK3krIikifSxjPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK1lpdC5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEobyksdT1jLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChZaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShjKTtjLmV4aXQoKS5yZW1vdmUoKSx1LmF0dHIoInRyYW5zZm9ybSIsbCksdS50ZXh0KCIiKSx0aGlzLl9kcmF3VGlja3MoYSx1KTt2YXIgaD10aGlzLm9yaWVudGF0aW9uKCk9PT0icmlnaHQiP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MCxmPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCk6MDtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2grIiwiK2YrIikiKSx0aGlzLl9zaG93QWxsVGlja01hcmtzKCksdGhpcy5fc2hvd0FsbFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpfHx0aGlzLl9zY2FsZS5yYW5nZShbMCx0aGlzLmhlaWdodCgpXSksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fTUlOSU1VTV9XSURUSF9QRVJfTEFCRUxfUFg9MTUsdH0oWWl0LkF4aXMpO2ppdC5DYXRlZ29yeT1OemV9KTt2YXIgWVh0PUgoJGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBEemU9KGRlKCksVXQocGUpKSx6Rj0oRXIoKSxVdChNcikpLFhpdD1fbCgpLE96ZT1CdSgpLGJTPUZlKCksd1M9dDQoKSx6emU9ZnVuY3Rpb24oZSl7RHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLl90aWNrTGFiZWxQb3NpdGlvbmluZz0iY2VudGVyIixpLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj0hMSxpLmZvcm1hdHRlcihPemUuZ2VuZXJhbCgpKSxpfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgcj1uZXcgWGl0LlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSx3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO3RoaXMuX21lYXN1cmVyPW5ldyBYaXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBYaXQuV3JhcHBlcigpLm1heExpbmVzKDEpfSx0LnByb3RvdHlwZS5fY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24/dGhpcy5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoKCk6dGhpcy5fY29tcHV0ZUV4YWN0VGV4dFdpZHRoKCk7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVFeGFjdFRleHRXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXRUaWNrVmFsdWVzKCksaT1uLm1hcChmdW5jdGlvbihvKXt2YXIgYT1yLmZvcm1hdHRlcigpKG8pO3JldHVybiByLl9tZWFzdXJlci5tZWFzdXJlKGEpLndpZHRofSk7cmV0dXJuIGJTLk1hdGgubWF4KGksMCl9LHQucHJvdG90eXBlLl9jb21wdXRlQXBwcm94aW1hdGVUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgiTSIpLndpZHRoLG89bi5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9ci5mb3JtYXR0ZXIoKShhKTtyZXR1cm4gcy5sZW5ndGgqaX0pO3JldHVybiBiUy5NYXRoLm1heChvLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUhlaWdodD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQ7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcjpNYXRoLm1heCh0aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSx0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKStyKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9zY2FsZSxuPXIuZG9tYWluKCksaT1uWzBdPD1uWzFdP25bMF06blsxXSxvPW5bMF0+PW5bMV0/blswXTpuWzFdO3JldHVybiByLnRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhPj1pJiZhPD1vfSl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9pc1NldHVwKXtpZighdGhpcy5pc0hvcml6b250YWwoKSl7dmFyIHI9dGhpcy5fY29tcHV0ZVdpZHRoKCk7aWYocj50aGlzLndpZHRoKCl8fHI8dGhpcy53aWR0aCgpLXRoaXMubWFyZ2luKCkpe3RoaXMucmVkcmF3KCk7cmV0dXJufX10aGlzLnJlbmRlcigpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49e3g6MCx5OjAsZHg6IjBlbSIsZHk6IjAuM2VtIn0saT10aGlzLl9tYXhMYWJlbFRpY2tMZW5ndGgoKSxvPXRoaXMudGlja0xhYmVsUGFkZGluZygpLGE9Im1pZGRsZSIscz0wLGw9MCxjPTAsdT0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlImxlZnQiOmE9ImVuZCIscz0tbyx1PW87YnJlYWs7Y2FzZSJjZW50ZXIiOnU9aStvO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPW8sdT1vO2JyZWFrfWVsc2Ugc3dpdGNoKHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nKXtjYXNlInRvcCI6bi5keT0iLTAuM2VtIixjPW8sbD0tbzticmVhaztjYXNlImNlbnRlciI6Yz1pK287YnJlYWs7Y2FzZSJib3R0b20iOm4uZHk9IjFlbSIsYz1vLGw9bzticmVha312YXIgaD10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6bi54PWgueDEsbi5keT0iMC45NWVtIixsPWgueTErdTticmVhaztjYXNlInRvcCI6bi54PWgueDEsbi5keT0iLS4yNWVtIixsPWgueTEtdTticmVhaztjYXNlImxlZnQiOmE9ImVuZCIscz1oLngxLWMsbi55PWgueTE7YnJlYWs7Y2FzZSJyaWdodCI6YT0ic3RhcnQiLHM9aC54MStjLG4ueT1oLnkxO2JyZWFrfXZhciBmPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxwPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZGF0YShmKTtwLmV4aXQoKS5yZW1vdmUoKTt2YXIgZD1wLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MsITApLm1lcmdlKHApO2Quc3R5bGUoInRleHQtYW5jaG9yIixhKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKS5hdHRycyhuKS50ZXh0KGZ1bmN0aW9uKF8pe3JldHVybiByLmZvcm1hdHRlcigpKF8pfSk7dmFyIGc9InRyYW5zbGF0ZSgiK3MrIiwgIitsKyIpIjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLmF0dHIoInRyYW5zZm9ybSIsZyksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuc2hvd0VuZFRpY2tMYWJlbHMoKXx8dGhpcy5faGlkZUVuZFRpY2tMYWJlbHMoKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscygpLHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nIT09ImNlbnRlciImJnRoaXMuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWwoKSx0aGlzfSx0LnByb3RvdHlwZS50aWNrTGFiZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZzt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYodGhpcy5pc0hvcml6b250YWwoKSl7aWYoIShuPT09ImxlZnQifHxuPT09ImNlbnRlciJ8fG49PT0icmlnaHQiKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgaG9yaXpvbnRhbCBOdW1lcmljQXhpcyIpfWVsc2UgaWYoIShuPT09InRvcCJ8fG49PT0iY2VudGVyInx8bj09PSJib3R0b20iKSl0aHJvdyBuZXcgRXJyb3IobisiIGlzIG5vdCBhIHZhbGlkIHRpY2sgbGFiZWwgcG9zaXRpb24gZm9yIGEgdmVydGljYWwgTnVtZXJpY0F4aXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc9bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uOih0aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1yLHRoaXMpfSx0LnByb3RvdHlwZS5faGlkZUVuZFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpO2lmKG4uc2l6ZSgpIT09MCl7dmFyIGk9bi5ub2RlcygpWzBdO2JTLkRPTS5jbGllbnRSZWN0SW5zaWRlKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscil8fHpGLnNlbGVjdChpKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpO3ZhciBvPW4ubm9kZXMoKVtuLnNpemUoKS0xXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHx6Ri5zZWxlY3Qobykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX19LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3dTLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9ekYuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxuPXIubm9kZXMoKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9KSxpPTE7IXRoaXMuX2hhc092ZXJsYXBXaXRoSW50ZXJ2YWwoaSxuKSYmaTxuLmxlbmd0aDspaSs9MTtyLmVhY2goZnVuY3Rpb24obyxhKXt2YXIgcz16Ri5zZWxlY3QodGhpcyk7YSVpIT09MCYmcy5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpfSl9LHQucHJvdG90eXBlLl9oYXNPdmVybGFwV2l0aEludGVydmFsPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPT09ImNlbnRlciI/dGhpcy50aWNrTGFiZWxQYWRkaW5nKCk6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCkqMyxvPW4ubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBiUy5ET00uZXhwYW5kUmVjdChjLGkpfSksYT0wO2E8by5sZW5ndGgtcjthKz1yKXt2YXIgcz1vW2FdLGw9b1thK3JdO2lmKGJTLkRPTS5jbGllbnRSZWN0c092ZXJsYXAocyxsKSlyZXR1cm4hMX1yZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0od1MuQXhpcyk7JGl0Lk51bWVyaWM9enplfSk7dmFyIGpYdD1IKEZGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZ6ZT1GZSgpO2Z1bmN0aW9uIEJ6ZShlKXtpZihlPD0wKXRocm93IG5ldyBFcnJvcigiaW50ZXJ2YWwgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXIiKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5kb21haW4oKSxuPU1hdGgubWluKHJbMF0sclsxXSksaT1NYXRoLm1heChyWzBdLHJbMV0pLG89TWF0aC5jZWlsKG4vZSkqZSxhPU1hdGguZmxvb3IoKGktbykvZSkrMSxzPW4lZT09PTA/W106W25dLGw9RnplLk1hdGgucmFuZ2UoMCxhKS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIG8rdSplfSksYz1pJWU9PT0wP1tdOltpXTtyZXR1cm4gcy5jb25jYXQobCkuY29uY2F0KGMpfX1GRi5pbnRlcnZhbFRpY2tHZW5lcmF0b3I9QnplO2Z1bmN0aW9uIEh6ZSgpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmRlZmF1bHRUaWNrcygpO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiByJTE9PT0wfHxuPT09MHx8bj09PXQubGVuZ3RoLTF9KX19RkYuaW50ZWdlclRpY2tHZW5lcmF0b3I9SHplfSk7dmFyIGU0PUgoSXY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEl2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiBaaXQoZSx0LHIpe3JldHVybiByLShyLWUpKnR9SXYuem9vbU91dD1aaXQ7ZnVuY3Rpb24gS2l0KGUsdCxyKXtyZXR1cm4oZSp0LXIpLyh0LTEpfWZ1bmN0aW9uIFZ6ZShlLHQscixuLGksbyxhKXtyZXR1cm4gdD1YWHQoZSx0LG4saSksJFh0KGUsdCxyLG8sYSl9SXYuY29uc3RyYWluZWRab29tPVZ6ZTtmdW5jdGlvbiBYWHQoZSx0LHIsbil7dmFyIGk9dD4xLG89aT9uOnI7aWYobz09bnVsbClyZXR1cm4gdDt2YXIgYT1lLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCkscz1hWzBdLGw9YVsxXSxjPU1hdGguYWJzKGwtcyksdT1pP01hdGgubWluOk1hdGgubWF4O3JldHVybiB1KHQsby9jKX1Jdi5jb25zdHJhaW5ab29tRXh0ZW50cz1YWHQ7ZnVuY3Rpb24gJFh0KGUsdCxyLG4saSl7aWYodDw9MSlyZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OnR9O2lmKG49PW51bGwmJmk9PW51bGwpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTt2YXIgbz1LWHQoZSksYT1xemUoZSkscz1hPzEvMDotMS8wLGw9YT8tMS8wOjEvMDtuPW49PW51bGw/czpuLGk9aT09bnVsbD9sOmk7dmFyIGM9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHU9Y1swXSxoPWNbMV0sZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaSkscD1lLnNjYWxlVHJhbnNmb3JtYXRpb24oaCksZD1aaXQocCx0LHIpLGc9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG4pLF89ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKHUpLHk9Wml0KF8sdCxyKSx4PU1hdGguYWJzKGYtZyksYj1NYXRoLmFicyhkLXkpO2lmKGI+eCl7dmFyIFM9KGYtZykvKHAtXyk7aWYoUyE9PTEpe3ZhciBDPUtpdChwLFMsZik7cmV0dXJue2NlbnRlclBvaW50OkMsem9vbUFtb3VudDpTfX1lbHNlIHJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm4gZD5mIT1vP3tjZW50ZXJQb2ludDpLaXQocCx0LGYpLHpvb21BbW91bnQ6dH06eTxnIT1vP3tjZW50ZXJQb2ludDpLaXQoXyx0LGcpLHpvb21BbW91bnQ6dH06e2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fX1Jdi5jb25zdHJhaW5ab29tVmFsdWVzPSRYdDtmdW5jdGlvbiBVemUoZSx0LHIsbil7dmFyIGk9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLG89aVswXSxhPWlbMV0scz1LWHQoZSk7aWYodD4wIT09cyl7dmFyIGw9bjtpZihsIT1udWxsKXt2YXIgYz1lLnNjYWxlVHJhbnNmb3JtYXRpb24oYSksdT1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1heDpNYXRoLm1pbikoYyt0LHUpLWN9fWVsc2V7dmFyIGw9cjtpZihsIT1udWxsKXt2YXIgaD1lLnNjYWxlVHJhbnNmb3JtYXRpb24obyksZj1lLnNjYWxlVHJhbnNmb3JtYXRpb24obCk7dD0ocz9NYXRoLm1pbjpNYXRoLm1heCkoaCt0LGYpLWh9fXJldHVybiB0fUl2LmNvbnN0cmFpbmVkVHJhbnNsYXRpb249VXplO2Z1bmN0aW9uIEtYdChlKXt2YXIgdD1lLnJhbmdlKCk7cmV0dXJuIHRbMV08dFswXX1mdW5jdGlvbiBxemUoZSl7dmFyIHQ9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3JldHVybiB0WzFdPHRbMF19fSk7dmFyIEx2PUgoSml0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBaWHQ9RmUoKSxHemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSx0aGlzLl91cGRhdGVJZD0wLHRoaXMuX2NhbGxiYWNrcz1uZXcgWlh0LkNhbGxiYWNrU2V0LHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzPW5ldyBaWHQuU2V0fXJldHVybiBlLnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm5bXX0sZS5wcm90b3R5cGUuX2dldEFsbEluY2x1ZGVkVmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7dD09PXZvaWQgMCYmKHQ9ITEpO3ZhciBuPVtdO3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkocix0KTtuPW4uY29uY2F0KG8pfSksbn0sZS5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQrKyx0aGlzLl9jYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKX0sZS5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMCx0aGlzLl9zZXREb21haW4odGhpcy5fZ2V0RXh0ZW50KCkpLHRoaXN9LGUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXt0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseSYmdGhpcy5hdXRvRG9tYWluKCl9LGUucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGUiKX0sZS5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sZS5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldERvbWFpbigpOih0aGlzLl9hdXRvRG9tYWluQXV0b21hdGljYWxseT0hMSx0aGlzLl9zZXREb21haW4odCksdGhpcyl9LGUucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXREb21haW4iKX0sZS5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbih0KXt0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzfHwodGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMCx0aGlzLl9iYWNraW5nU2NhbGVEb21haW4odCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzLl9kb21haW5Nb2RpZmljYXRpb25JblByb2dyZXNzPSExKX0sZS5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9iYWNraW5nRG9tYWluIil9LGUucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2dldFJhbmdlKCk6KHRoaXMuX3NldFJhbmdlKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9nZXRSYW5nZSIpfSxlLnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfc2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuYWRkKHQpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmRlbGV0ZSh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZX0oKTtKaXQuU2NhbGU9R3plfSk7dmFyIGVvdD1IKHRvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgV3plPShkZSgpLFV0KHBlKSksQkY9KEVyKCksVXQoTXIpKSxZemU9ZTQoKSxKWHQ9RmUoKSxqemU9THYoKSxRaXQ9WzAsMV0sWHplPWZ1bmN0aW9uKGUpe1d6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX3JhbmdlPVswLDFdLHIuX2QzU2NhbGU9QkYuc2NhbGVCYW5kKCksci5fZDNTY2FsZS5yYW5nZShRaXQpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZT1CRi5zY2FsZUxpbmVhcigpLHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oUWl0KTt2YXIgbj0uMztyZXR1cm4gci5faW5uZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZyhuKSxyLl9vdXRlclBhZGRpbmc9dC5fY29udmVydFRvUGxvdHRhYmxlT3V0ZXJQYWRkaW5nKC41LG4pLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNsb25lV2l0aG91dFByb3ZpZGVycz1mdW5jdGlvbigpe3ZhciByPW5ldyB0KCkuZG9tYWluKHRoaXMuZG9tYWluKCkpLnJhbmdlKHRoaXMucmFuZ2UoKSkuaW5uZXJQYWRkaW5nKHRoaXMuaW5uZXJQYWRkaW5nKCkpLm91dGVyUGFkZGluZyh0aGlzLm91dGVyUGFkZGluZygpKTtyZXR1cm4gci5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbih0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKCkpLHJ9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3JldHVybiBKWHQuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBKWHQuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5wcm90b3R5cGUuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5pbnZlcnRSYW5nZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMucmFuZ2UoKSk7dmFyIGk9dGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSxvPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzBdKSxhPXRoaXMuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbihyWzFdKSxzPXRoaXMuX2QzU2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gbi5fZDNTY2FsZShoKStpLzJ9KSxjPUJGLmJpc2VjdChsLG8pLHU9QkYuYmlzZWN0KGwsYSk7cmV0dXJuIHMuc2xpY2UoYyx1KX0sdC5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJhbmdlLmNhbGwodGhpcyxyKX0sdC5fY29udmVydFRvUGxvdHRhYmxlSW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiAxLygxLXIpLTF9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZz1mdW5jdGlvbihyLG4pe3JldHVybiByLygxLW4pfSx0LnByb3RvdHlwZS5fc2V0QmFuZHM9ZnVuY3Rpb24oKXt2YXIgcj0xLTEvKDErdGhpcy5pbm5lclBhZGRpbmcoKSksbj10aGlzLm91dGVyUGFkZGluZygpLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpO3RoaXMuX2QzU2NhbGUucGFkZGluZ0lubmVyKHIpLHRoaXMuX2QzU2NhbGUucGFkZGluZ091dGVyKG4pfSx0LnByb3RvdHlwZS5yYW5nZUJhbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSl9LHQucHJvdG90eXBlLnN0ZXBXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNjYWxlQmFuZCh0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpKigxK3RoaXMuaW5uZXJQYWRkaW5nKCkpKX0sdC5wcm90b3R5cGUudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuaW5uZXJQYWRkaW5nPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2lubmVyUGFkZGluZzoodGhpcy5faW5uZXJQYWRkaW5nPXIsdGhpcy5yYW5nZSh0aGlzLnJhbmdlKCkpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vdXRlclBhZGRpbmc6KHRoaXMuX291dGVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpK3RoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkvMjtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKG4pfSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KFl6ZS56b29tT3V0KGEscixuKSl9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKG8pKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KG8rcil9O3RoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKCkubWFwKGkpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFpdH0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHIpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fc2V0QmFuZHMoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhbmdlfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fcmFuZ2U9cix0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUucmFuZ2UociksdGhpcy5fc2V0QmFuZHMoKX0sdC5wcm90b3R5cGUuX3Jlc2NhbGVCYW5kPWZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLmFicyh0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUociktdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKDApKX0sdH0oanplLlNjYWxlKTt0b3QuQ2F0ZWdvcnk9WHplfSk7dmFyIFFYdD1IKHJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJHplPShkZSgpLFV0KHBlKSksTmY9KEVyKCksVXQoTXIpKSxTUz1GZSgpLEt6ZT1MdigpLFp6ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmNvdW50PTAsdGhpcy50cmFja2VyPXt9fXJldHVybiBlLnByb3RvdHlwZS5nZXRJbmRleD1mdW5jdGlvbih0KXtpZih0aGlzLnRyYWNrZXJbdF0hPW51bGwpcmV0dXJuIHRoaXMudHJhY2tlclt0XTt2YXIgcj10aGlzLmNvdW50O3JldHVybiB0aGlzLnRyYWNrZXJbdF09cix0aGlzLmNvdW50Kz0xLHJ9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX0sZX0oKSxKemU9ZnVuY3Rpb24oZSl7JHplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX3JhbmdlTGVuZ3RoPTEsbi5fdHJhY2tlcj1uZXcgWnplO3ZhciBpO3N3aXRjaChyKXtjYXNlIG51bGw6Y2FzZSB2b2lkIDA6dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT09bnVsbCYmKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9dC5fZ2V0UGxvdHRhYmxlQ29sb3JzKCkpLGk9TmYuc2NhbGVPcmRpbmFsKCkucmFuZ2UodC5fcGxvdHRhYmxlQ29sb3JDYWNoZSk7YnJlYWs7Y2FzZSJDYXRlZ29yeTEwIjpjYXNlImNhdGVnb3J5MTAiOmNhc2UiMTAiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MTApO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMCI6Y2FzZSJjYXRlZ29yeTIwIjpjYXNlIjIwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwKTticmVhaztjYXNlIkNhdGVnb3J5MjBiIjpjYXNlImNhdGVnb3J5MjBiIjpjYXNlIjIwYiI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGIpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkyMGMiOmNhc2UiY2F0ZWdvcnkyMGMiOmNhc2UiMjBjIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTIwYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvbG9yU2NhbGUgdHlwZSIpfXJldHVybiBuLl9kM1NjYWxlPWksbi5fcmFuZ2VMZW5ndGg9bi5fZDNTY2FsZS5yYW5nZSgpLmxlbmd0aCxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gU1MuQXJyYXkudW5pcShyKX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3JldHVybiBTUy5BcnJheS51bmlxKHRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCkpfSx0LmludmFsaWRhdGVDb2xvckNhY2hlPWZ1bmN0aW9uKCl7dC5fcGxvdHRhYmxlQ29sb3JDYWNoZT1udWxsfSx0Ll9nZXRQbG90dGFibGVDb2xvcnM9ZnVuY3Rpb24oKXtmb3IodmFyIHI9W10sbj1OZi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInBsb3R0YWJsZS1jb2xvci10ZXN0ZXIiKSxpPVNTLkNvbG9yLmNvbG9yVGVzdChuLCIiKSxvPTAsYT1TUy5Db2xvci5jb2xvclRlc3QobiwicGxvdHRhYmxlLWNvbG9ycy0wIik7YSE9bnVsbCYmbzx0aGlzLl9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUyYmIShhPT09aSYmYT09PXJbci5sZW5ndGgtMV0pOylyLnB1c2goYSksbysrLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtIitvKTtyZXR1cm4gbi5yZW1vdmUoKSxyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kM1NjYWxlKHIpLGk9dGhpcy5fdHJhY2tlci5nZXRJbmRleChyKSxvPU1hdGguZmxvb3IoaS90aGlzLl9yYW5nZUxlbmd0aCk7aWYobz09PTApcmV0dXJuIG47dmFyIGE9TWF0aC5sb2cobyp0Ll9MT09QX0xJR0hURU5fRkFDVE9SKzEpO3JldHVybiBTUy5Db2xvci5saWdodGVuQ29sb3IobixhKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzLl90cmFja2VyLmNsZWFyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpLHRoaXMuX3JhbmdlTGVuZ3RoPXIubGVuZ3RofSx0Ll9MT09QX0xJR0hURU5fRkFDVE9SPTEuNix0Ll9NQVhJTVVNX0NPTE9SU19GUk9NX0NTUz0yNTYsdH0oS3plLlNjYWxlKTtyb3QuQ29sb3I9SnplfSk7dmFyIGUkdD1IKG5vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUXplPShkZSgpLFV0KHBlKSksTVM9KEVyKCksVXQoTXIpKSx0JHQ9RmUoKSx0RmU9THYoKSxlRmU9ZnVuY3Rpb24oZSl7UXplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9ImxpbmVhciIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMaW5lYXIoKTticmVhaztjYXNlImxvZyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZUxvZygpO2JyZWFrO2Nhc2Uic3FydCI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVNxcnQoKTticmVhaztjYXNlInBvdyI6bi5fY29sb3JTY2FsZT1NUy5zY2FsZVBvdygpO2JyZWFrfWlmKG4uX2NvbG9yU2NhbGU9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIFF1YW50aXRhdGl2ZVNjYWxlIHNjYWxlIHR5cGUgIityKTtyZXR1cm4gbi5yYW5nZSh0LlJFRFMpLG59cmV0dXJuIHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPU1TLmV4dGVudChyKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS5fZDNJbnRlcnBvbGF0ZWRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnJhbmdlKFswLDFdKS5pbnRlcnBvbGF0ZSh0aGlzLl9pbnRlcnBvbGF0ZUNvbG9ycygpKX0sdC5wcm90b3R5cGUuX2ludGVycG9sYXRlQ29sb3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fY29sb3JSYW5nZTtpZihyLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ29sb3Igc2NhbGUgYXJyYXlzIG11c3QgaGF2ZSBhdCBsZWFzdCB0d28gZWxlbWVudHMuIik7cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8pe289TWF0aC5tYXgoMCxNYXRoLm1pbigxLG8pKTt2YXIgYT1vKihyLmxlbmd0aC0xKSxzPU1hdGguZmxvb3IoYSksbD1NYXRoLmNlaWwoYSksYz1hLXM7cmV0dXJuIE1TLmludGVycG9sYXRlTGFiKHJbc10scltsXSkoYyl9fX0sdC5wcm90b3R5cGUuX3Jlc2V0U2NhbGU9ZnVuY3Rpb24oKXt0aGlzLl9kM1NjYWxlPXRoaXMuX2QzSW50ZXJwb2xhdGVkU2NhbGUoKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5hdXRvRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKTtyZXR1cm4gci5sZW5ndGg+MCYmdGhpcy5fc2V0RG9tYWluKFt0JHQuTWF0aC5taW4ociwwKSx0JHQuTWF0aC5tYXgociwwKV0pLHRoaXN9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JSYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2NvbG9yUmFuZ2U9cix0aGlzLl9yZXNldFNjYWxlKCl9LHQuUkVEUz1bIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHQuQkxVRVM9WyIjRkZGRkZGIiwiI0NDRkZGRiIsIiNBNUZGRkQiLCIjODVGN0ZCIiwiIzZFRDNFRiIsIiM1NUE3RTAiLCIjNDE3RkQwIiwiIzI1NDVEMyIsIiMwQjAyRTEiXSx0LlBPU05FRz1bIiMwQjAyRTEiLCIjMjU0NUQzIiwiIzQxN0ZEMCIsIiM1NUE3RTAiLCIjNkVEM0VGIiwiIzg1RjdGQiIsIiNBNUZGRkQiLCIjQ0NGRkZGIiwiI0ZGRkZGRiIsIiNGRkY2RTEiLCIjRkVGNEMwIiwiI0ZFRDk3NiIsIiNGRUIyNEMiLCIjRkQ4RDNDIiwiI0ZDNEUyQSIsIiNFMzFBMUMiLCIjQjEwMDI2Il0sdH0odEZlLlNjYWxlKTtub3QuSW50ZXJwb2xhdGVkQ29sb3I9ZUZlfSk7dmFyIHZkPUgoaW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByRmU9KGRlKCksVXQocGUpKSxuRmU9KEVyKCksVXQoTXIpKSxpRmU9ZTQoKSxFUz1GZSgpLG9GZT1MdigpLGFGZT1mdW5jdGlvbihlKXtyRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fdGlja0dlbmVyYXRvcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5kZWZhdWx0VGlja3MoKX0sci5fcGFkUHJvcG9ydGlvbj0uMDUsci5fc25hcHBpbmdEb21haW5FbmFibGVkPSEwLHIuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzPW5ldyBFUy5TZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb21haW5NaW49bnVsbCx0aGlzLl9kb21haW5NYXg9bnVsbCxlLnByb3RvdHlwZS5hdXRvRG9tYWluLmNhbGwodGhpcyksdGhpc30sdC5wcm90b3R5cGUuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZT1mdW5jdGlvbigpe2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCYmdGhpcy5fZG9tYWluTWF4IT1udWxsKXt0aGlzLl9zZXREb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NYXhdKTtyZXR1cm59dmFyIHI9dGhpcy5fZ2V0RXh0ZW50KCk7aWYodGhpcy5fZG9tYWluTWluIT1udWxsKXt2YXIgbj1yWzFdO3RoaXMuX2RvbWFpbk1pbj49biYmKG49dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1pbix0aGlzLl9kb21haW5NaW5dKVsxXSksdGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sbl0pO3JldHVybn1pZih0aGlzLl9kb21haW5NYXghPW51bGwpe3ZhciBpPXJbMF07dGhpcy5fZG9tYWluTWF4PD1pJiYoaT10aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihbdGhpcy5fZG9tYWluTWF4LHRoaXMuX2RvbWFpbk1heF0pWzBdKSx0aGlzLl9zZXREb21haW4oW2ksdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufWUucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUuY2FsbCh0aGlzKX0sdC5wcm90b3R5cGUuX2dldFVuYm91bmRlZEV4dGVudD1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj0hMSk7dmFyIG49dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMociksaT10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYobi5sZW5ndGghPT0wKXt2YXIgbz1bRVMuTWF0aC5taW4obixpWzBdKSxFUy5NYXRoLm1heChuLGlbMV0pXTtpPXRoaXMuX3BhZERvbWFpbihvKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2dldEV4dGVudD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFVuYm91bmRlZEV4dGVudCgpO3JldHVybiB0aGlzLl9kb21haW5NaW4hPW51bGwmJihyWzBdPXRoaXMuX2RvbWFpbk1pbiksdGhpcy5fZG9tYWluTWF4IT1udWxsJiYoclsxXT10aGlzLl9kb21haW5NYXgpLHJ9LHQucHJvdG90eXBlLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmFkZChyKSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5kZWxldGUociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucGFkUHJvcG9ydGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRQcm9wb3J0aW9uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoInBhZFByb3BvcnRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLl9wYWREb21haW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyWzBdLnZhbHVlT2YoKT09PXJbMV0udmFsdWVPZigpKXJldHVybiB0aGlzLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbihyKTtpZih0aGlzLl9wYWRQcm9wb3J0aW9uPT09MClyZXR1cm4gcjt2YXIgaT10aGlzLl9wYWRQcm9wb3J0aW9uLzIsbz1yWzBdLGE9clsxXSxzPSExLGw9ITE7dGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mKG4pO3AuZm9yRWFjaChmdW5jdGlvbihkKXtkLnZhbHVlT2YoKT09PW8udmFsdWVPZigpJiYocz0hMCksZC52YWx1ZU9mKCk9PT1hLnZhbHVlT2YoKSYmKGw9ITApfSl9KTt2YXIgYz10aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKTt0aGlzLl9iYWNraW5nU2NhbGVEb21haW4ocik7dmFyIHU9cz9vOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUobyktKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSksaD1sP2E6dGhpcy5pbnZlcnQodGhpcy5zY2FsZShhKSsodGhpcy5zY2FsZShhKS10aGlzLnNjYWxlKG8pKSppKTtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKGMpLHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD90aGlzLl9uaWNlRG9tYWluKFt1LGhdKTpbdSxoXX0sdC5wcm90b3R5cGUuc25hcHBpbmdEb21haW5FbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZDoodGhpcy5fc25hcHBpbmdEb21haW5FbmFibGVkPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0Iil9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmKHRoaXMuX2RvbWFpbk1pbj1yWzBdLHRoaXMuX2RvbWFpbk1heD1yWzFdKSxlLnByb3RvdHlwZS5kb21haW4uY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5kb21haW5NaW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVswXToodGhpcy5fZG9tYWluTWluPXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvbWFpbk1heD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLmRvbWFpbigpWzFdOih0aGlzLl9kb21haW5NYXg9cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7dmFyIG49bkZlLmV4dGVudChyLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc1ZhbGlkTnVtYmVyKCtpKX0pKTtyZXR1cm4gblswXT09bnVsbHx8blsxXT09bnVsbD9bXTpufSx0LnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPWZ1bmN0aW9uKGEpe3JldHVybiBpLmludmVydChpRmUuem9vbU91dChhLHIsbikpfTt0aGlzLmRvbWFpbih0aGlzLnJhbmdlKCkubWFwKG8pKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5pbnZlcnQobytyKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChpKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzY2FsZVRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBpbnZlcnRlZFRyYW5zZm9ybWF0aW9uIil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBnZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBzZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbiIpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBFUy5NYXRoLmlzTmFOKGkpfHxpPT09MS8wfHxpPT09LTEvMH07aWYobihyWzBdKXx8bihyWzFdKSl7RVMuV2luZG93Lndhcm4oIldhcm5pbmc6IFF1YW50aXRhdGl2ZVNjYWxlcyBjYW5ub3QgdGFrZSBOYU4gb3IgSW5maW5pdHkgYXMgYSBkb21haW4gdmFsdWUuIElnbm9yaW5nLiIpO3JldHVybn1lLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RGVmYXVsdFRpY2tzIil9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpY2tHZW5lcmF0b3IodGhpcyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfbmljZURvbWFpbiIpfSx0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2RlZmF1bHRFeHRlbnQiKX0sdC5wcm90b3R5cGUudGlja0dlbmVyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl90aWNrR2VuZXJhdG9yOih0aGlzLl90aWNrR2VuZXJhdG9yPXIsdGhpcyl9LHQuX0RFRkFVTFRfTlVNX1RJQ0tTPTEwLHR9KG9GZS5TY2FsZSk7aW90LlF1YW50aXRhdGl2ZVNjYWxlPWFGZX0pO3ZhciByJHQ9SChvb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHNGZT0oZGUoKSxVdChwZSkpLGxGZT0oRXIoKSxVdChNcikpLGNGZT12ZCgpLHVGZT1mdW5jdGlvbihlKXtzRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1sRmUuc2NhbGVMaW5lYXIoKSxyfXJldHVybiB0LnByb3RvdHlwZS5fZGVmYXVsdEV4dGVudD1mdW5jdGlvbigpe3JldHVyblswLDFdfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdLTEsclsxXSsxXTpyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmludmVydChyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3ModC5fREVGQVVMVF9OVU1fVElDS1MpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZShuKS5kb21haW4oKX0sdH0oY0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtvb3QuTGluZWFyPXVGZX0pO3ZhciBuJHQ9SChhb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhGZT0oZGUoKSxVdChwZSkpLGZGZT0oRXIoKSxVdChNcikpLHBGZT12ZCgpLGRGZT1mdW5jdGlvbihlKXtoRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0xMCk7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kM1NjYWxlPWZGZS5zY2FsZUxvZygpLmJhc2Uociksbi5fc2V0RG9tYWluKG4uX2RlZmF1bHRFeHRlbnQoKSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMSx0aGlzLl9kM1NjYWxlLmJhc2UoKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gclswXT09PXJbMV0/W3JbMF0vdGhpcy5fZDNTY2FsZS5iYXNlKCksclsxXSp0aGlzLl9kM1NjYWxlLmJhc2UoKV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UoKS5kb21haW4oKX0sdH0ocEZlLlF1YW50aXRhdGl2ZVNjYWxlKTthb3QuTG9nPWRGZX0pO3ZhciBpJHQ9SChsb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1GZT0oZGUoKSxVdChwZSkpLHI0PShFcigpLFV0KE1yKSksVFM9RmUoKSxzb3Q9a3MoKSxnRmU9dmQoKSxfRmU9ZnVuY3Rpb24oZSl7bUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sb2dUaWNrR2VuZXJhdG9yPWZ1bmN0aW9uKGkpe3ZhciBvPWZ1bmN0aW9uKHgsYixTKXtyZXR1cm5beCxiLFNdLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gQy1QfSlbMV19LGE9VFMuTWF0aC5taW4obi5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSxzPVRTLk1hdGgubWF4KG4uX3VudHJhbnNmb3JtZWREb21haW4sMCksbD1hLGM9byhhLHMsLW4uX3Bpdm90KSx1PW8oYSxzLG4uX3Bpdm90KSxoPXMsZj1uLl9sb2dUaWNrcygtYywtbCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybi14fSkucmV2ZXJzZSgpLHA9bi5fbG9nVGlja3ModSxoKSxkPU1hdGgubWF4KGEsLW4uX3Bpdm90KSxnPU1hdGgubWluKHMsbi5fcGl2b3QpLF89cjQuc2NhbGVMaW5lYXIoKS5kb21haW4oW2QsZ10pLnRpY2tzKG4uX2hvd01hbnlUaWNrcyhkLGcpKSx5PWYuY29uY2F0KF8pLmNvbmNhdChwKTtyZXR1cm4geS5sZW5ndGg8PTEmJih5PXI0LnNjYWxlTGluZWFyKCkuZG9tYWluKFthLHNdKS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKSkseX0sbi5fZDNTY2FsZT1yNC5zY2FsZUxpbmVhcigpLG4uX2Jhc2U9cixuLl9waXZvdD1uLl9iYXNlLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG4udGlja0dlbmVyYXRvcihuLl9sb2dUaWNrR2VuZXJhdG9yKSxyPD0xKXRocm93IG5ldyBFcnJvcigiTW9kaWZpZWRMb2dTY2FsZTogVGhlIGJhc2UgbXVzdCBiZSA+IDEiKTtyZXR1cm4gbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FkanVzdGVkTG9nPWZ1bmN0aW9uKHIpe3ZhciBuPXI8MD8tMToxO3JldHVybiByKj1uLHI8dGhpcy5fcGl2b3QmJihyKz0odGhpcy5fcGl2b3QtcikvdGhpcy5fcGl2b3QpLHI9TWF0aC5sb2cocikvTWF0aC5sb2codGhpcy5fYmFzZSkscio9bixyfSx0LnByb3RvdHlwZS5faW52ZXJ0ZWRBZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPU1hdGgucG93KHRoaXMuX2Jhc2Uscikscjx0aGlzLl9waXZvdCYmKHI9dGhpcy5fcGl2b3QqKHItMSkvKHRoaXMuX3Bpdm90LTEpKSxyKj1uLHJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHRoaXMuX2FkanVzdGVkTG9nKHIpKX0sdC5wcm90b3R5cGUuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9pbnZlcnRlZEFkanVzdGVkTG9nKHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShyKX0sdC5wcm90b3R5cGUuaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5pbnZlcnQocil9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldFVuYm91bmRlZEV4dGVudCghMCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuZG9tYWluKHIpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7dGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbj1yO3ZhciBuPVt0aGlzLl9hZGp1c3RlZExvZyhyWzBdKSx0aGlzLl9hZGp1c3RlZExvZyhyWzFdKV07ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMsbil9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9sb2dUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9ob3dNYW55VGlja3MocixuKTtpZihvPT09MClyZXR1cm5bXTt2YXIgYT1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpKSxzPU1hdGguY2VpbChNYXRoLmxvZyhuKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSksbD1yNC5yYW5nZShzLGEsLU1hdGguY2VpbCgocy1hKS9vKSksYz1yNC5yYW5nZSh0aGlzLl9iYXNlLDEsLSh0aGlzLl9iYXNlLTEpKS5tYXAoTWF0aC5mbG9vciksdT1UUy5BcnJheS51bmlxKGMpLGg9bC5tYXAoZnVuY3Rpb24oZyl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKF8pe3JldHVybiBNYXRoLnBvdyhpLl9iYXNlLGctMSkqX30pfSksZj1UUy5BcnJheS5mbGF0dGVuKGgpLHA9Zi5maWx0ZXIoZnVuY3Rpb24oZyl7cmV0dXJuIHI8PWcmJmc8PW59KSxkPXAuc29ydChmdW5jdGlvbihnLF8pe3JldHVybiBnLV99KTtyZXR1cm4gZH0sdC5wcm90b3R5cGUuX2hvd01hbnlUaWNrcz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWluKHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLG89dGhpcy5fYWRqdXN0ZWRMb2coVFMuTWF0aC5tYXgodGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbiwwKSksYT10aGlzLl9hZGp1c3RlZExvZyhyKSxzPXRoaXMuX2FkanVzdGVkTG9nKG4pLGw9KHMtYSkvKG8taSksYz1NYXRoLmNlaWwobCpzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKTtyZXR1cm4gY30sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gcn0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCx0aGlzLl9iYXNlXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMF09PT1yWzFdKXt2YXIgbj1yWzBdO3JldHVybiBuPjA/W24vdGhpcy5fYmFzZSxuKnRoaXMuX2Jhc2VdOm49PT0wP1stdGhpcy5fYmFzZSx0aGlzLl9iYXNlXTpbbip0aGlzLl9iYXNlLG4vdGhpcy5fYmFzZV19cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyhzb3QuTW9kaWZpZWRMb2cuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdH0oZ0ZlLlF1YW50aXRhdGl2ZVNjYWxlKTtsb3QuTW9kaWZpZWRMb2c9X0ZlfSk7dmFyIG8kdD1IKGNvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeUZlPShkZSgpLFV0KHBlKSksZ2E9KEVyKCksVXQoTXIpKSxrdj1IRigpLHZGZT12ZCgpLHhGZT1mdW5jdGlvbihlKXt5RmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZDNTY2FsZT1nYS5zY2FsZVRpbWUoKSxyLmF1dG9Eb21haW4oKSxyfXJldHVybiB0LnByb3RvdHlwZS50aWNrSW50ZXJ2YWw9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPTEpLGk9PT12b2lkIDAmJihpPSExKTt2YXIgbz1nYS5zY2FsZVRpbWUoKSxhPXQudGltZUludGVydmFsVG9EM1RpbWUocixpKS5ldmVyeShuKTtyZXR1cm4gby5kb21haW4odGhpcy5kb21haW4oKSksby5yYW5nZSh0aGlzLnJhbmdlKCkpLG8udGlja3MoYSl9LHQucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24ocil7aWYoclsxXTxyWzBdKXRocm93IG5ldyBFcnJvcigiU2NhbGUuVGltZSBkb21haW4gdmFsdWVzIG11c3QgYmUgaW4gY2hyb25vbG9naWNhbCBvcmRlciIpO3JldHVybiBlLnByb3RvdHlwZS5fc2V0RG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bbmV3IERhdGUoIjE5NzAtMDEtMDEiKSxuZXcgRGF0ZSgiMTk3MC0wMS0wMiIpXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXJbMF0uZ2V0VGltZSgpLGk9clsxXS5nZXRUaW1lKCk7aWYobj09PWkpe3ZhciBvPW5ldyBEYXRlKG4pO28uc2V0RGF0ZShvLmdldERhdGUoKS0xKTt2YXIgYT1uZXcgRGF0ZShpKTtyZXR1cm4gYS5zZXREYXRlKGEuZ2V0RGF0ZSgpKzEpLFtvLGFdfXJldHVybiByfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5zY2FsZShuZXcgRGF0ZShyKSl9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpLmdldFRpbWUoKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApO3JldHVybltyWzBdLnZhbHVlT2YoKSxyWzFdLnZhbHVlT2YoKV19LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5kb21haW4oKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLGk9clsxXTt0aGlzLmRvbWFpbihbbmV3IERhdGUobiksbmV3IERhdGUoaSldKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHQudGltZUludGVydmFsVG9EM1RpbWU9ZnVuY3Rpb24ocixuKXtzd2l0Y2gocil7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuc2Vjb25kOnJldHVybiBuP2dhLnV0Y1NlY29uZDpnYS50aW1lU2Vjb25kO2Nhc2Uga3YuVGltZUludGVydmFsLm1pbnV0ZTpyZXR1cm4gbj9nYS51dGNNaW51dGU6Z2EudGltZU1pbnV0ZTtjYXNlIGt2LlRpbWVJbnRlcnZhbC5ob3VyOnJldHVybiBuP2dhLnV0Y0hvdXI6Z2EudGltZUhvdXI7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwuZGF5OnJldHVybiBuP2dhLnV0Y0RheTpnYS50aW1lRGF5O2Nhc2Uga3YuVGltZUludGVydmFsLndlZWs6cmV0dXJuIG4/Z2EudXRjV2VlazpnYS50aW1lV2VlaztjYXNlIGt2LlRpbWVJbnRlcnZhbC5tb250aDpyZXR1cm4gbj9nYS51dGNNb250aDpnYS50aW1lTW9udGg7Y2FzZSBrdi5UaW1lSW50ZXJ2YWwueWVhcjpyZXR1cm4gbj9nYS51dGNZZWFyOmdhLnRpbWVZZWFyO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlRpbWVJbnRlcnZhbCBzcGVjaWZpZWQgZG9lcyBub3QgZXhpc3Q6ICIrcil9fSx0fSh2RmUuUXVhbnRpdGF0aXZlU2NhbGUpO2NvdC5UaW1lPXhGZX0pO3ZhciBrcz1IKEh1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJ2PShkZSgpLFV0KHBlKSksYkZlPWpYdCgpO0h1LlRpY2tHZW5lcmF0b3JzPWJGZTtSdi5fX2V4cG9ydFN0YXIoZW90KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihRWHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGUkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIociR0KCksSHUpO1J2Ll9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UnYuX19leHBvcnRTdGFyKGkkdCgpLEh1KTtSdi5fX2V4cG9ydFN0YXIobyR0KCksSHUpO3ZhciB3RmU9ZW90KCksU0ZlPXZkKCk7ZnVuY3Rpb24gTUZlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgU0ZlLlF1YW50aXRhdGl2ZVNjYWxlfHxlIGluc3RhbmNlb2Ygd0ZlLkNhdGVnb3J5fUh1LmlzVHJhbnNmb3JtYWJsZT1NRmV9KTt2YXIgSEY9SChTZT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoU2UsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFRmU9KGRlKCksVXQocGUpKSxWdT0oRXIoKSxVdChNcikpLGEkdD1fbCgpLHMkdD1CdSgpLFRGZT1rcygpLG40PUZlKCksdW90PUlmKCksdHM9dDQoKTtTZS5UaW1lSW50ZXJ2YWw9dW90Lm1ha2VFbnVtKFsic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIndlZWsiLCJtb250aCIsInllYXIiXSk7U2UuVGltZUF4aXNPcmllbnRhdGlvbj11b3QubWFrZUVudW0oWyJ0b3AiLCJib3R0b20iXSk7U2UuVGllckxhYmVsUG9zaXRpb249dW90Lm1ha2VFbnVtKFsiYmV0d2VlbiIsImNlbnRlciJdKTt2YXIgQ0ZlPWZ1bmN0aW9uKGUpe0VGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbixpKXt2YXIgbz1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBvLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249bnVsbCxvLl90aWVyTGFiZWxQb3NpdGlvbnM9W10sby5fdXNlVVRDPWksby5hZGRDbGFzcygidGltZS1heGlzIiksby50aWNrTGFiZWxQYWRkaW5nKDUpLG8uYXhpc0NvbmZpZ3VyYXRpb25zKHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TKG8uX3VzZVVUQykpLG8uYW5ub3RhdGlvbkZvcm1hdHRlcihzJHQudGltZSgiJWEgJWIgJWQsICVZIixvLl91c2VVVEMpKSxvfXJldHVybiB0LnByb3RvdHlwZS50aWVyTGFiZWxQb3NpdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zO2lmKCFyLmV2ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBuLnRvTG93ZXJDYXNlKCk9PT0iYmV0d2VlbiJ8fG4udG9Mb3dlckNhc2UoKT09PSJjZW50ZXIifSkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBwb3NpdGlvbiBmb3IgdGllciBsYWJlbHMiKTtyZXR1cm4gdGhpcy5fdGllckxhYmVsUG9zaXRpb25zPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uOih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb249cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jdXJyZW50QXhpc0NvbmZpZ3VyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdfSx0LnByb3RvdHlwZS5heGlzQ29uZmlndXJhdGlvbnM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zO3RoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucz1yLHRoaXMuX251bVRpZXJzPW40Lk1hdGgubWF4KHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSksMCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fc2V0dXBEb21FbGVtZW50cygpO2Zvcih2YXIgbj10aGlzLnRpZXJMYWJlbFBvc2l0aW9ucygpLGk9W10sbz0wO288dGhpcy5fbnVtVGllcnM7bysrKWkucHVzaChuW29dfHwiYmV0d2VlbiIpO3JldHVybiB0aGlzLnRpZXJMYWJlbFBvc2l0aW9ucyhpKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoO3JldHVybiB0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihpLG8pe288biYmaS5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gci5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uKGEpfSkmJihuPW8pfSksbj09PXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9ucy5sZW5ndGgmJihuNC5XaW5kb3cud2Fybigiem9vbWVkIG91dCB0b28gZmFyOiBjb3VsZCBub3QgZmluZCBzdWl0YWJsZSBpbnRlcnZhbCB0byBkaXNwbGF5IGxhYmVscyIpLC0tbiksbn0sdC5wcm90b3R5cGUub3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYociYmKHIudG9Mb3dlckNhc2UoKT09PSJyaWdodCJ8fHIudG9Mb3dlckNhc2UoKT09PSJsZWZ0IikpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSBzdXBwb3J0ZWQgb3JpZW50YXRpb24gZm9yIFRpbWVBeGlzIC0gb25seSBob3Jpem9udGFsIG9yaWVudGF0aW9ucyBhcmUgc3VwcG9ydGVkIik7cmV0dXJuIGUucHJvdG90eXBlLm9yaWVudGF0aW9uLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3RoaXMuX3RpZXJIZWlnaHRzPVtdO2Zvcih2YXIgbj0wO248dGhpcy5fbnVtVGllcnM7bisrKXRoaXMuX3RpZXJIZWlnaHRzLnB1c2gocit0aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSsodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImJldHdlZW4iPzA6dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkpKTtyZXR1cm4gVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzKX0sdC5wcm90b3R5cGUuX2dldEludGVydmFsTGVuZ3RoPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpWzBdLGk9VEZlLlRpbWUudGltZUludGVydmFsVG9EM1RpbWUoci5pbnRlcnZhbCx0aGlzLl91c2VVVEMpLG89aS5vZmZzZXQobixyLnN0ZXApO2lmKG8+dGhpcy5fc2NhbGUuZG9tYWluKClbMV0pcmV0dXJuIHRoaXMud2lkdGgoKTt2YXIgYT1NYXRoLmFicyh0aGlzLl9zY2FsZS5zY2FsZShvKS10aGlzLl9zY2FsZS5zY2FsZShuKSk7cmV0dXJuIGF9LHQucHJvdG90eXBlLl9tYXhXaWR0aEZvckludGVydmFsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9tZWFzdXJlci5tZWFzdXJlKHIuZm9ybWF0dGVyKHQuX0xPTkdfREFURSkpLndpZHRofSx0LnByb3RvdHlwZS5fY2hlY2tUaW1lQXhpc1RpZXJDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe2lmKHRoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbiE9bnVsbCl7dmFyIG49dC5fU09SVEVEX1RJTUVfSU5URVJWQUxfSU5ERVhbdGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uXSxpPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3IuaW50ZXJ2YWxdO2lmKG4hPW51bGwmJmkhPW51bGwmJmk8bilyZXR1cm4hMX12YXIgbz10aGlzLl9tYXhXaWR0aEZvckludGVydmFsKHIpKzIqdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7cmV0dXJuIE1hdGgubWluKHRoaXMuX2dldEludGVydmFsTGVuZ3RoKHIpLHRoaXMud2lkdGgoKSk+PW99LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXIuY2FsbCh0aGlzLHIsbiksbz10aGlzLl90aWVySGVpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24ocyxsLGMsdSl7cmV0dXJuIHMrbD5pLmhlaWdodD9zOnMrbH0pLGE9dGhpcy5tYXJnaW4oKSsodGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSp0aGlzLl9hbm5vdGF0aW9uVGllckhlaWdodCgpOjApO3JldHVybiBpLmhlaWdodD1NYXRoLm1pbihpLmhlaWdodCxvK2EpLGl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3NldHVwRG9tRWxlbWVudHMoKX0sdC5wcm90b3R5cGUuX3NldHVwRG9tRWxlbWVudHM9ZnVuY3Rpb24oKXt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnM9W10sdGhpcy5fdGllck1hcmtDb250YWluZXJzPVtdLHRoaXMuX3RpZXJCYXNlbGluZXM9W10sdGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX2Jhc2VsaW5lLnJlbW92ZSgpO2Zvcih2YXIgcj0wO3I8dGhpcy5fbnVtVGllcnM7KytyKXt2YXIgbj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElNRV9BWElTX1RJRVJfQ0xBU1MsITApO3RoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKyItY29udGFpbmVyIiwhMCkpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycy5wdXNoKG4uYXBwZW5kKCJnIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyQmFzZWxpbmVzLnB1c2gobi5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApKX12YXIgaT1uZXcgYSR0LlN2Z0NvbnRleHQodGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1swXS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBhJHQuQ2FjaGVNZWFzdXJlcihpKX0sdC5wcm90b3R5cGUuX2dldFRpY2tJbnRlcnZhbFZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fc2NhbGUudGlja0ludGVydmFsKHIuaW50ZXJ2YWwsci5zdGVwLHRoaXMuX3VzZVVUQyl9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLmNvbmNhdChyLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXMoaSkpfSxbXSl9LHQucHJvdG90eXBlLl9jbGVhblRpZXJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPTA7cjx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLmxlbmd0aDtyKyspdGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykucmVtb3ZlKCksdGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJCYXNlbGluZXNbcl0uc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0sdC5wcm90b3R5cGUuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpLGk9dGhpcy5fc2NhbGUuZG9tYWluKCksbz1uLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS52YWx1ZU9mKCl9KTtyZXR1cm4gby5pbmRleE9mKGlbMF0udmFsdWVPZigpKT09PS0xJiZuLnVuc2hpZnQoaVswXSksby5pbmRleE9mKGlbMV0udmFsdWVPZigpKT09PS0xJiZuLnB1c2goaVsxXSksbn0sdC5wcm90b3R5cGUuX3JlbmRlclRpZXJMYWJlbHM9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMsYT10aGlzLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbihuKSxzPVtdO3RoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJiZXR3ZWVuIiYmbi5zdGVwPT09MT9hLm1hcChmdW5jdGlvbihnLF8pe18rMT49YS5sZW5ndGh8fHMucHVzaChuZXcgRGF0ZSgoYVtfKzFdLnZhbHVlT2YoKS1hW19dLnZhbHVlT2YoKSkvMithW19dLnZhbHVlT2YoKSkpfSk6cz1hO3ZhciBsPXIuc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEocyxmdW5jdGlvbihnKXtyZXR1cm4gU3RyaW5nKGcudmFsdWVPZigpKX0pLGM9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKTtjLmFwcGVuZCgidGV4dCIpO3ZhciB1PXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPzA6dGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaDt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9oPVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkrMSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIiP2g9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCktdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCk6aD10aGlzLmhlaWdodCgpLVZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cy5zbGljZSgwLGkpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTt2YXIgZj1sLm1lcmdlKGMpLHA9Zi5zZWxlY3RBbGwoInRleHQiKTtwLnNpemUoKT4wJiZwLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3UrIiwiK2grIikiKSxsLmV4aXQoKS5yZW1vdmUoKSxmLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZyl7cmV0dXJuInRyYW5zbGF0ZSgiK28uX3NjYWxlLnNjYWxlKGcpKyIsMCkifSk7dmFyIGQ9dGhpcy5fdGllckxhYmVsUG9zaXRpb25zW2ldPT09ImNlbnRlciJ8fG4uc3RlcD09PTE/Im1pZGRsZSI6InN0YXJ0IjtmLnNlbGVjdEFsbCgidGV4dCIpLnRleHQobi5mb3JtYXR0ZXIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsZCl9LHQucHJvdG90eXBlLl9yZW5kZXJUaWNrTWFya3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90aWVyTWFya0NvbnRhaW5lcnNbbl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUykuZGF0YShyKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHRzLkF4aXMuVElDS19NQVJLX0NMQVNTLCEwKS5tZXJnZShpKSxhPXRoaXMuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaCgpLHM9dGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxuKS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gbCtjfSwwKTt0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5pbm5lclRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpOihhLnkxPXRoaXMuaGVpZ2h0KCktcyxhLnkyPXRoaXMuaGVpZ2h0KCktKHMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksby5hdHRycyhhKSx0aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj8oYS55MT1zLGEueTI9cysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmVuZFRpY2tMZW5ndGgoKTp0aGlzLl90aWVySGVpZ2h0c1tuXSkpKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpW28uc2l6ZSgpLTFdKS5hdHRycyhhKSxWdS5zZWxlY3Qoby5ub2RlcygpWzBdKS5jbGFzc2VkKHRzLkF4aXMuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLGkuZXhpdCgpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobiksbz10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKTtvLnkyPXRoaXMub3JpZW50YXRpb24oKT09PSJib3R0b20iP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMuaGVpZ2h0KCktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCksaS5hdHRycyhvKSxuLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleDwxP1tdOnRoaXMuX2dldFRpY2tJbnRlcnZhbFZhbHVlcyh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnNbdGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleC0xXVswXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4PXRoaXMuX2dldE1vc3RQcmVjaXNlQ29uZmlndXJhdGlvbkluZGV4KCk7dmFyIG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXhdO3RoaXMuX2NsZWFuVGllcnMoKSxuLmZvckVhY2goZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fcmVuZGVyVGllckxhYmVscyhyLl90aWVyTGFiZWxDb250YWluZXJzW2ZdLGgsZil9KTtmb3IodmFyIGk9bi5tYXAoZnVuY3Rpb24oaCxmKXtyZXR1cm4gci5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24oaCl9KSxvPTAsYT0wO2E8TWF0aC5tYXgobi5sZW5ndGgsMSk7KythKXt2YXIgcz10aGlzLl9nZW5lcmF0ZUJhc2VsaW5lQXR0ckhhc2goKTtzLnkxKz10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj9vOi1vLHMueTI9cy55MSx0aGlzLl90aWVyQmFzZWxpbmVzW2FdLmF0dHJzKHMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaW5oZXJpdCIpLG8rPXRoaXMuX3RpZXJIZWlnaHRzW2FdfXZhciBsPVtdLGM9dGhpcy5fc2NhbGUuZG9tYWluKCksdT10aGlzLl9zY2FsZS5zY2FsZShjWzFdKS10aGlzLl9zY2FsZS5zY2FsZShjWzBdKTt0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChuWzBdKSoxLjU+PXUmJihsPXRoaXMuX2dlbmVyYXRlTGFiZWxsZXNzVGlja3MoKSksdGhpcy5fcmVuZGVyTGFiZWxsZXNzVGlja01hcmtzKGwpLHRoaXMuX2hpZGVPdmVyZmxvd2luZ1RpZXJzKCk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDsrK2EpdGhpcy5fcmVuZGVyVGlja01hcmtzKGlbYV0sYSksdGhpcy5faGlkZU92ZXJsYXBwaW5nQW5kQ3V0T2ZmTGFiZWxzKGEpO3JldHVybiB0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpP3RoaXMuX2RyYXdBbm5vdGF0aW9ucygpOnRoaXMuX3JlbW92ZUFubm90YXRpb25zKCksdGhpc30sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpZXJzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuaGVpZ2h0KCksaT0wO3RoaXMuY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5USU1FX0FYSVNfVElFUl9DTEFTUykuYXR0cigidmlzaWJpbGl0eSIsZnVuY3Rpb24obyxhKXtyZXR1cm4gaSs9ci5fdGllckhlaWdodHNbYV0saTw9bj8iaW5oZXJpdCI6ImhpZGRlbiJ9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ZnVuY3Rpb24odSl7cmV0dXJuIE1hdGguZmxvb3IoaS5sZWZ0KTw9TWF0aC5jZWlsKHUubGVmdCkmJk1hdGguZmxvb3IoaS50b3ApPD1NYXRoLmNlaWwodS50b3ApJiZNYXRoLmZsb29yKHUucmlnaHQpPD1NYXRoLmNlaWwoaS5sZWZ0K24ud2lkdGgoKSkmJk1hdGguZmxvb3IodS5ib3R0b20pPD1NYXRoLmNlaWwoaS50b3Arbi5oZWlnaHQoKSl9LGE9dGhpcy5fdGllck1hcmtDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbih1LGgpe3ZhciBmPVZ1LnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBmPT09InZpc2libGUifHxmPT09ImluaGVyaXQifSkscz1hLm5vZGVzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksbD10aGlzLl90aWVyTGFiZWxDb250YWluZXJzW3JdLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLGM7bC5lYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVZ1LnNlbGVjdCh0aGlzKSxkPXNbaF0sZz1zW2grMV0sXz1jIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsYykseT1kIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZCkseD1nIT1udWxsJiZuNC5ET00uY2xpZW50UmVjdHNPdmVybGFwKGYsZyk7IW8oZil8fF98fHl8fHg/cC5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpOihjPWYscC5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSl9KX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5USU1FX0FYSVNfVElFUl9DTEFTUz0idGltZS1heGlzLXRpZXIiLHQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYPSh4ZD17fSx4ZFtTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kXT0wLHhkW1NlLlRpbWVJbnRlcnZhbC5taW51dGVdPTEseGRbU2UuVGltZUludGVydmFsLmhvdXJdPTIseGRbU2UuVGltZUludGVydmFsLmRheV09Myx4ZFtTZS5UaW1lSW50ZXJ2YWwud2Vla109NCx4ZFtTZS5UaW1lSW50ZXJ2YWwubW9udGhdPTUseGRbU2UuVGltZUludGVydmFsLnllYXJdPTYseGQpLHQuX0RFRkFVTFRfVElNRV9BWElTX0NPTkZJR1VSQVRJT05TPWZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGkpe3JldHVybiBzJHQudGltZShpLHIpfTtyZXR1cm5bW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6NSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjEwLGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MTUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDozMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjMsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6Nixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDoxMixmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVhICVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJWUiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjEsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjMsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5tb250aCxzdGVwOjYsZm9ybWF0dGVyOm4oIiViIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIleSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MjUsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjIwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1MDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MWUzLGZvcm1hdHRlcjpuKCIlWSIpfV1dfSx0Ll9MT05HX0RBVEU9bmV3IERhdGUoOTk5OSw4LDI5LDEyLDU5LDk5OTkpLHR9KHRzLkF4aXMpO1NlLlRpbWU9Q0ZlO3ZhciB4ZH0pO3ZhciBsJHQ9SChpND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBob3Q9KGRlKCksVXQocGUpKTtob3QuX19leHBvcnRTdGFyKFdYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKFlYdCgpLGk0KTtob3QuX19leHBvcnRTdGFyKEhGKCksaTQpfSk7dmFyIG80PUgoZm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShmb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBBRmU9RmUoKSxQRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbj17fSx0aGlzLl9ldmVudFRhcmdldD1kb2N1bWVudCx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0PXt9LHRoaXMuX2Nvbm5lY3RlZD0hMX1yZXR1cm4gZS5wcm90b3R5cGUuX2hhc05vQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PU9iamVjdC5rZXlzKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXQpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3Rbcl1dLnNpemUhPT0wKXJldHVybiExO3JldHVybiEwfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkfHwoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdLGk9cj09PSJ3aGVlbCI/e3Bhc3NpdmU6ITF9OnZvaWQgMDt0Ll9ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMCl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25uZWN0ZWQmJnRoaXMuX2hhc05vQ2FsbGJhY2tzKCkmJihPYmplY3Qua2V5cyh0aGlzLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ZhciBuPXQuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bcl07dC5fZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSksdGhpcy5fY29ubmVjdGVkPSExKX0sZS5wcm90b3R5cGUuX2FkZENhbGxiYWNrRm9yRXZlbnQ9ZnVuY3Rpb24odCxyKXt0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdPT1udWxsJiYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT1uZXcgQUZlLkNhbGxiYWNrU2V0KSx0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdLmFkZChyKSx0aGlzLl9jb25uZWN0KCl9LGUucHJvdG90eXBlLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XSE9bnVsbCYmdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5kZWxldGUociksdGhpcy5fZGlzY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fY2FsbENhbGxiYWNrc0ZvckV2ZW50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF07aSE9bnVsbCYmaS5jYWxsQ2FsbGJhY2tzLmFwcGx5KGkscil9LGV9KCk7Zm90LkRpc3BhdGNoZXI9UEZlfSk7dmFyIGMkdD1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSUZlPShkZSgpLFV0KHBlKSksTEZlPW80KCksa0ZlPWZ1bmN0aW9uKGUpe0lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obil7cmV0dXJuIHIuX3Byb2Nlc3NLZXlkb3duKG4pfSxyLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0tFWVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5dXAobil9LHJ9cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbigpe3ZhciByPWRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gcj09bnVsbCYmKHI9bmV3IHQsZG9jdW1lbnRbdC5fRElTUEFUQ0hFUl9LRVldPXIpLHJ9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5ZG93bj1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIua2V5Q29kZSxyKX0sdC5wcm90b3R5cGUuX3Byb2Nlc3NLZXl1cD1mdW5jdGlvbihyKXt0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLm9uS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5RG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25LZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfS2V5Iix0Ll9LRVlET1dOX0VWRU5UX05BTUU9ImtleWRvd24iLHQuX0tFWVVQX0VWRU5UX05BTUU9ImtleXVwIix0fShMRmUuRGlzcGF0Y2hlcik7cG90LktleT1rRmV9KTt2YXIgaCR0PUgoZG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSRmU9KGRlKCksVXQocGUpKSx1JHQ9RmUoKSxORmU9bzQoKSxERmU9ZnVuY3Rpb24oZSl7UkZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO24uX2xhc3RNb3VzZVBvc2l0aW9uPXt4Oi0xLHk6LTF9LG4uX3RyYW5zbGF0b3I9dSR0LmdldFRyYW5zbGF0b3Iocik7dmFyIGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsInBhZ2UiKX07cmV0dXJuIG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VPVkVSX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRV09aSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1VUX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRURPV05fRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VET1dOX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFVVBfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fTU9VU0VVUF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fV0hFRUxfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fV0hFRUxfRVZFTlRfTkFNRSl9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRV09ZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLG8sdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSl9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uTW91c2VNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRURPV05fRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZVVwPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmV2hlZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fV0hFRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmRGJsQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fREJMQ0xJQ0tfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5fbWVhc3VyZUFuZERpc3BhdGNoPWZ1bmN0aW9uKHIsbixpLG8pe2lmKG89PT12b2lkIDAmJihvPSJlbGVtZW50IiksbyE9PSJwYWdlIiYmbyE9PSJlbGVtZW50Iil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NvcGUgJyIrbysiJywgbXVzdCBiZSAnZWxlbWVudCcgb3IgJ3BhZ2UnIik7aWYobz09PSJwYWdlInx8dGhpcy5ldmVudEluc2lkZShyLG4pKXt2YXIgYT10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbihuLmNsaWVudFgsbi5jbGllbnRZKTt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1hLHRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLHRoaXMubGFzdE1vdXNlUG9zaXRpb24oKSxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHUkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5wcm90b3R5cGUubGFzdE1vdXNlUG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFzdE1vdXNlUG9zaXRpb259LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX01vdXNlIix0Ll9NT1VTRU9WRVJfRVZFTlRfTkFNRT0ibW91c2VvdmVyIix0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRT0ibW91c2Vtb3ZlIix0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FPSJtb3VzZW91dCIsdC5fTU9VU0VET1dOX0VWRU5UX05BTUU9Im1vdXNlZG93biIsdC5fTU9VU0VVUF9FVkVOVF9OQU1FPSJtb3VzZXVwIix0Ll9XSEVFTF9FVkVOVF9OQU1FPSJ3aGVlbCIsdC5fREJMQ0xJQ0tfRVZFTlRfTkFNRT0iZGJsY2xpY2siLHR9KE5GZS5EaXNwYXRjaGVyKTtkb3QuTW91c2U9REZlfSk7dmFyIHAkdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT0ZlPShkZSgpLFV0KHBlKSksZiR0PUZlKCksekZlPW80KCksRkZlPWZ1bmN0aW9uKGUpe09GZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fdHJhbnNsYXRvcj1mJHQuZ2V0VHJhbnNsYXRvcihyKSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9LG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRV09ZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVBbmREaXNwYXRjaChyLGksdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsInBhZ2UiKX0sbn1yZXR1cm4gdC5nZXREaXNwYXRjaGVyPWZ1bmN0aW9uKHIpe3ZhciBuPXIucm9vdCgpLnJvb3RFbGVtZW50KCksaT1uW3QuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gaT09bnVsbCYmKGk9bmV3IHQociksblt0Ll9ESVNQQVRDSEVSX0tFWV09aSksaX0sdC5wcm90b3R5cGUub25Ub3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGRDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaFN0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vblRvdWNoTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlRvdWNoQ2FuY2VsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKCEobz09PSJlbGVtZW50IiYmIXRoaXMuZXZlbnRJbnNpZGUocixuKSkpe2Zvcih2YXIgYT1uLmNoYW5nZWRUb3VjaGVzLHM9e30sbD1bXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10saD11LmlkZW50aWZpZXIsZj10aGlzLl90cmFuc2xhdG9yLmNvbXB1dGVQb3NpdGlvbih1LmNsaWVudFgsdS5jbGllbnRZKTtmIT1udWxsJiYoc1toXT1mLGwucHVzaChoKSl9bC5sZW5ndGg+MCYmdGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KGksbCxzLG4pfX0sdC5wcm90b3R5cGUuZXZlbnRJbnNpZGU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gZiR0LlRyYW5zbGF0b3IuaXNFdmVudEluc2lkZShyLG4pfSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Ub3VjaCIsdC5fVE9VQ0hTVEFSVF9FVkVOVF9OQU1FPSJ0b3VjaHN0YXJ0Iix0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRT0idG91Y2htb3ZlIix0Ll9UT1VDSEVORF9FVkVOVF9OQU1FPSJ0b3VjaGVuZCIsdC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRT0idG91Y2hjYW5jZWwiLHR9KHpGZS5EaXNwYXRjaGVyKTttb3QuVG91Y2g9RkZlfSk7dmFyIE52PUgoYTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGE0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ290PShkZSgpLFV0KHBlKSk7Z290Ll9fZXhwb3J0U3RhcihjJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihoJHQoKSxhNCk7Z290Ll9fZXhwb3J0U3RhcihwJHQoKSxhNCl9KTt2YXIgRHY9SChfb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJGZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuX2FuY2hvckNhbGxiYWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0Ll9hbmNob3Iocil9LHRoaXMuX2VuYWJsZWQ9ITB9cmV0dXJuIGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kaXNjb25uZWN0KCksdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbz10LHRoaXMuX2Nvbm5lY3QoKSx0aGlzfSxlLnByb3RvdHlwZS5kZXRhY2hGcm9tPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRldGFjaCgpfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89bnVsbCx0aGlzfSxlLnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9dCx0aGlzLl9lbmFibGVkP3RoaXMuX2Nvbm5lY3QoKTp0aGlzLl9kaXNjb25uZWN0KCksdGhpcyl9LGUucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24odCl7dGhpcy5faXNBbmNob3JlZD0hMH0sZS5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZD0hMX0sZS5wcm90b3R5cGUuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2U9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vcmlnaW5Ub1Jvb3QoKTtyZXR1cm57eDp0Lngtci54LHk6dC55LXIueX19LGUucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gMDw9dC54JiYwPD10LnkmJnQueDw9dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZ0Lnk8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCl9LGUucHJvdG90eXBlLl9jb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkKCkmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJiF0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9uQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZS5wcm90b3R5cGUuX2Rpc2Nvbm5lY3Q9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl91bmFuY2hvcigpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8hPW51bGwmJnRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub2ZmQW5jaG9yKHRoaXMuX2FuY2hvckNhbGxiYWNrKX0sZX0oKTtfb3QuSW50ZXJhY3Rpb249QkZlfSk7dmFyIGckdD1IKHlvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSEZlPShkZSgpLFV0KHBlKSksZCR0PU52KCksbSR0PUZlKCksVkZlPUR2KCksVUZlPWZ1bmN0aW9uKGUpe0hGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9jbGlja2VkRG93bj0hMSxyLl9kb3VibGVDbGlja2luZz0hMSxyLl9vbkNsaWNrQ2FsbGJhY2tzPW5ldyBtJHQuQ2FsbGJhY2tTZXQsci5fb25Eb3VibGVDbGlja0NhbGxiYWNrcz1uZXcgbSR0LkNhbGxiYWNrU2V0LHIuX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihuLGkpfSxyLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChuLGkpfSxyLl9kYmxDbGlja0NhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZURibENsaWNrKG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrRG93bihpW25bMF1dLG8pfSxyLl90b3VjaEVuZENhbGxiYWNrPWZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gci5faGFuZGxlQ2xpY2tVcChpW25bMF1dLG8pfSxyLl90b3VjaENhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2NsaWNrZWREb3duPSExfSxyfXJldHVybiB0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1kJHQuTW91c2UuZ2V0RGlzcGF0Y2hlcihyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25EYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9ZCR0LlRvdWNoLmdldERpc3BhdGNoZXIociksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZEYmxDbGljayh0aGlzLl9kYmxDbGlja0NhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVDbGlja0Rvd249ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYodGhpcy5fY2xpY2tlZERvd249ITAsdGhpcy5fY2xpY2tlZFBvaW50PWkpfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tVcD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO3RoaXMuX2NsaWNrZWREb3duJiZ0Ll9wb2ludHNFcXVhbChvLHRoaXMuX2NsaWNrZWRQb2ludCkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLl9kb3VibGVDbGlja2luZ3x8aS5fb25DbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbil9LDApLHRoaXMuX2NsaWNrZWREb3duPSExfSx0LnByb3RvdHlwZS5faGFuZGxlRGJsQ2xpY2s9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9kb3VibGVDbGlja2luZz0hMCx0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2RvdWJsZUNsaWNraW5nPSExfSwwKX0sdC5fcG9pbnRzRXF1YWw9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci54PT09bi54JiZyLnk9PT1uLnl9LHQucHJvdG90eXBlLm9uQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uQ2xpY2tDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRvdWJsZUNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkRvdWJsZUNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oVkZlLkludGVyYWN0aW9uKTt5b3QuQ2xpY2s9VUZlfSk7dmFyIHkkdD1IKHZvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcUZlPShkZSgpLFV0KHBlKSksXyR0PU52KCksczQ9RmUoKSxHRmU9RHYoKSxXRmU9ZnVuY3Rpb24oZSl7cUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLl9kcmFnZ2luZz0hMSxuLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PSEwLG4uX21vdXNlRmlsdGVyPXQuX0RFRkFVTFRfTU9VU0VfRklMVEVSLG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fZHJhZ0VuZENhbGxiYWNrcz1uZXcgczQuQ2FsbGJhY2tTZXQsbi5fbW91c2VEb3duQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fc3RhcnREcmFnKGksbyl9LG4uX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2RvRHJhZyhpLG8pfSxuLl9tb3VzZVVwQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5fZW5kRHJhZyhpLG8pfSxuLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9zdGFydERyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9kb0RyYWcob1tpWzBdXSxhKX0sbi5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihpLG8sYSl7cmV0dXJuIG4uX2VuZERyYWcob1tpWzBdXSxhKX0sbi5fbW91c2VCdXR0b249ciE9PXZvaWQgMD9yOjAsbn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9XyR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9XyR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZURvd24odGhpcy5fbW91c2VEb3duQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZU1vdmUodGhpcy5fbW91c2VNb3ZlQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZNb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl90cmFuc2xhdGVBbmRDb25zdHJhaW49ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTtyZXR1cm4gdGhpcy5fY29uc3RyYWluZWRUb0NvbXBvbmVudD97eDpzNC5NYXRoLmNsYW1wKG4ueCwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSkseTpzNC5NYXRoLmNsYW1wKG4ueSwwLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8uaGVpZ2h0KCkpfTpufSx0LnByb3RvdHlwZS5fc3RhcnREcmFnPWZ1bmN0aW9uKHIsbil7aWYoIShuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmIXRoaXMuX21vdXNlRmlsdGVyKG4pKSl7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKG4ucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcmFnZ2luZz0hMCx0aGlzLl9kcmFnT3JpZ2luPWksdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbikpfX0sdC5wcm90b3R5cGUuX2RvRHJhZz1mdW5jdGlvbihyLG4pe3RoaXMuX2RyYWdnaW5nJiZ0aGlzLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpfSx0LnByb3RvdHlwZS5fZW5kRHJhZz1mdW5jdGlvbihyLG4pe24gaW5zdGFuY2VvZiBNb3VzZUV2ZW50JiZuLmJ1dHRvbiE9PXRoaXMuX21vdXNlQnV0dG9ufHx0aGlzLl9kcmFnZ2luZyYmKHRoaXMuX2RyYWdnaW5nPSExLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzLl9kcmFnT3JpZ2luLHRoaXMuX3RyYW5zbGF0ZUFuZENvbnN0cmFpbihyKSkpfSx0LnByb3RvdHlwZS5jb25zdHJhaW5lZFRvQ29tcG9uZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ6KHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ9cix0aGlzKX0sdC5wcm90b3R5cGUubW91c2VGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21vdXNlRmlsdGVyOih0aGlzLl9tb3VzZUZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQuX0RFRkFVTFRfTU9VU0VfRklMVEVSPWZ1bmN0aW9uKHIpe3JldHVybiByLmJ1dHRvbj09PTB9LHR9KEdGZS5JbnRlcmFjdGlvbik7dm90LkRyYWc9V0ZlfSk7dmFyIHdvdD1IKGJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWUZlPShkZSgpLFV0KHBlKSksdiR0PU52KCkseG90PUZlKCksakZlPUR2KCksWEZlPWZ1bmN0aW9uKGUpe1lGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9rZXlQcmVzc0NhbGxiYWNrcz17fSxyLl9rZXlSZWxlYXNlQ2FsbGJhY2tzPXt9LHIuX21vdXNlTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiExfSxyLl9kb3duZWRLZXlzPW5ldyB4b3QuU2V0LHIuX2tleURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVLZXlEb3duRXZlbnQobixpKX0sci5fa2V5VXBDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5faGFuZGxlS2V5VXBFdmVudChuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9diR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPXYkdC5LZXkuZ2V0RGlzcGF0Y2hlcigpLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vbktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9wb3NpdGlvbkRpc3BhdGNoZXI9bnVsbCx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleURvd24odGhpcy5fa2V5RG93bkNhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9mZktleVVwKHRoaXMuX2tleVVwQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZUtleURvd25FdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UodGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLmxhc3RNb3VzZVBvc2l0aW9uKCkpO3RoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpJiYhbi5yZXBlYXQmJih0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uY2FsbENhbGxiYWNrcyhyKSx0aGlzLl9kb3duZWRLZXlzLmFkZChyKSl9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlVcEV2ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX2Rvd25lZEtleXMuaGFzKHIpJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdJiZ0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5kZWxldGUocil9LHQucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXT1uZXcgeG90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5hZGQobiksdGhpc30sdC5wcm90b3R5cGUub2ZmS2V5UHJlc3M9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLnNpemU9PT0wJiZkZWxldGUgdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0sdGhpc30sdC5wcm90b3R5cGUub25LZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl18fCh0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdPW5ldyB4b3QuQ2FsbGJhY2tTZXQpLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVJlbGVhc2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5kZWxldGUobiksdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0sdGhpc30sdH0oakZlLkludGVyYWN0aW9uKTtib3QuS2V5PVhGZX0pO3ZhciBTJHQ9SChTb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyICRGZT0oZGUoKSxVdChwZSkpLEtGZT0oRXIoKSxVdChNcikpLHgkdD1OdigpLGIkdD1rcygpLHlsPUZlKCksWkZlPWw0KCksSkZlPUR2KCksdyR0PWU0KCksUUZlPWZ1bmN0aW9uKGUpeyRGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLl93aGVlbEZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4hMH0saS5fd2hlZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEpe3JldHVybiBpLl9oYW5kbGVXaGVlbEV2ZW50KG8sYSl9LGkuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoU3RhcnQobyxhLHMpfSxpLl90b3VjaE1vdmVDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVBpbmNoKG8sYSxzKX0saS5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2hhbmRsZVRvdWNoRW5kKG8sYSxzKX0saS5fcGFuRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl96b29tRW5kQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzPW5ldyB5bC5DYWxsYmFja1NldCxpLl94U2NhbGVzPW5ldyB5bC5TZXQsaS5feVNjYWxlcz1uZXcgeWwuU2V0LGkuX2RyYWdJbnRlcmFjdGlvbj1uZXcgWkZlLkRyYWcsaS5fc2V0dXBEcmFnSW50ZXJhY3Rpb24oKSxpLl90b3VjaElkcz1LRmUubWFwKCksaS5fbWluRG9tYWluRXh0ZW50cz1uZXcgeWwuTWFwLGkuX21heERvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9taW5Eb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5WYWx1ZXM9bmV3IHlsLk1hcCxyIT1udWxsJiZpLmFkZFhTY2FsZShyKSxuIT1udWxsJiZpLmFkZFlTY2FsZShuKSxpfXJldHVybiB0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS53aGVlbEZpbHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fd2hlZWxGaWx0ZXI6KHRoaXMuX3doZWVsRmlsdGVyPXIsdGhpcyl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueCkpfSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtpLnBhbihuLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uKGksci55KSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztpPT09dm9pZCAwJiYoaT0hMCk7dmFyIGEscztyZXR1cm4gbiE9bnVsbCYmKGE9bi54LHM9bi55LGkmJih0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPW8uX2NvbnN0cmFpbmVkWm9vbShsLHIsYSk7YT1jLmNlbnRlclBvaW50LHI9Yy56b29tQW1vdW50fSksdGhpcy55U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLHMpO3M9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pKSksdGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1sLnJhbmdlKCksdT1hPT1udWxsPyhjWzFdK2NbMF0pLzI6YTtsLnpvb20ocix1KX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9cz09bnVsbD8oY1sxXStjWzBdKS8yOnM7bC56b29tKHIsdSl9KSx0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKSx7em9vbUFtb3VudDpyLGNlbnRlclZhbHVlOntjZW50ZXJYOmEsY2VudGVyWTpzfX19LHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj14JHQuTW91c2UuZ2V0RGlzcGF0Y2hlcih0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25XaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9eCR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayl9LHQucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe2UucHJvdG90eXBlLl91bmFuY2hvci5jYWxsKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbCh0aGlzLl93aGVlbENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hDYW5jZWwodGhpcy5fdG91Y2hDYW5jZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPW51bGwsdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hTdGFydD1mdW5jdGlvbihyLG4saSl7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aCYmdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDI7bysrKXt2YXIgYT1yW29dO3RoaXMuX3RvdWNoSWRzLnNldChhLnRvU3RyaW5nKCksdGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW2FdKSl9fSx0LnByb3RvdHlwZS5faGFuZGxlUGluY2g9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aWYoISh0aGlzLl90b3VjaElkcy5zaXplKCk8Mikpe3ZhciBhPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpO2lmKCEoIXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVswXSkpfHwhdGhpcy5faXNJbnNpZGVDb21wb25lbnQodGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShhWzFdKSkpKXt2YXIgcz10Ll9wb2ludERpc3RhbmNlKGFbMF0sYVsxXSk7aWYocyE9PTApe3IuZm9yRWFjaChmdW5jdGlvbihTKXtvLl90b3VjaElkcy5oYXMoUy50b1N0cmluZygpKSYmby5fdG91Y2hJZHMuc2V0KFMudG9TdHJpbmcoKSxvLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKG5bU10pKX0pO3ZhciBsPXRoaXMuX3RvdWNoSWRzLnZhbHVlcygpLGM9dC5fcG9pbnREaXN0YW5jZShsWzBdLGxbMV0pO2lmKGMhPT0wKXt2YXIgdT1zL2MsaD1sLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OihTLngtYVtDXS54KS91LHk6KFMueS1hW0NdLnkpL3V9fSksZj10LmNlbnRlclBvaW50KGFbMF0sYVsxXSkscD10aGlzLnpvb20odSxmKSxkPXAuY2VudGVyVmFsdWUsZz1wLnpvb21BbW91bnQsXz1kLmNlbnRlclgseT1kLmNlbnRlclkseD1hLm1hcChmdW5jdGlvbihTLEMpe3JldHVybnt4OmhbQ10ueCpnK1MueCx5OmhbQ10ueSpnK1MueX19KSxiPXt4Ol8tKHhbMF0ueCt4WzFdLngpLzIseTp5LSh4WzBdLnkreFsxXS55KS8yfTt0aGlzLnBhbihiKX19fX19LHQuY2VudGVyUG9pbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm57eDooaStvKS8yLHk6KHMrYSkvMn19LHQuX3BvaW50RGlzdGFuY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1NYXRoLm1pbihyLngsbi54KSxvPU1hdGgubWF4KHIueCxuLngpLGE9TWF0aC5taW4oci55LG4ueSkscz1NYXRoLm1heChyLnksbi55KTtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KG8taSwyKStNYXRoLnBvdyhzLWEsMikpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFbmQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ci5mb3JFYWNoKGZ1bmN0aW9uKGEpe28uX3RvdWNoSWRzLnJlbW92ZShhLnRvU3RyaW5nKCkpfSksdGhpcy5fdG91Y2hJZHMuc2l6ZSgpPjAmJnRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSx0LnByb3RvdHlwZS5faGFuZGxlV2hlZWxFdmVudD1mdW5jdGlvbihyLG4pe2lmKCEhdGhpcy5fd2hlZWxGaWx0ZXIobikpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7aWYodGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkpe24ucHJldmVudERlZmF1bHQoKTt2YXIgbz1uLmRlbHRhWSE9PTA/bi5kZWx0YVk6bi5kZWx0YVgsYT1vKihuLmRlbHRhTW9kZT90Ll9QSVhFTFNfUEVSX0xJTkU6MSkscz1NYXRoLnBvdygyLGEqLjAwMik7dGhpcy56b29tKHMsaSksdGhpcy5fem9vbUVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9fX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkWm9vbT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHckdC5jb25zdHJhaW5lZFpvb20ocixuLGksdGhpcy5taW5Eb21haW5FeHRlbnQociksdGhpcy5tYXhEb21haW5FeHRlbnQociksdGhpcy5taW5Eb21haW5WYWx1ZShyKSx0aGlzLm1heERvbWFpblZhbHVlKHIpKX0sdC5wcm90b3R5cGUuX2NvbnN0cmFpbmVkVHJhbnNsYXRpb249ZnVuY3Rpb24ocixuKXtyZXR1cm4gdyR0LmNvbnN0cmFpbmVkVHJhbnNsYXRpb24ocixuLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9zZXR1cERyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmNvbnN0cmFpbmVkVG9Db21wb25lbnQoITEpO3ZhciBuO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChmdW5jdGlvbigpe3JldHVybiBuPW51bGx9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKGZ1bmN0aW9uKGksbyl7aWYoIShyLl90b3VjaElkcy5zaXplKCk+PTIpKXt2YXIgYT17eDoobj09bnVsbD9pLng6bi54KS1vLngseToobj09bnVsbD9pLnk6bi55KS1vLnl9O3IucGFuKGEpLG49b319KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHIuX3BhbkVuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9KX0sdC5wcm90b3R5cGUuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMubWluRG9tYWluRXh0ZW50KHIpIT1udWxsJiZ0aGlzLm1heERvbWFpbkV4dGVudChyKSE9bnVsbCYmIShyIGluc3RhbmNlb2YgYiR0LkxpbmVhcikmJiEociBpbnN0YW5jZW9mIGIkdC5UaW1lKX0sdC5wcm90b3R5cGUueFNjYWxlcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PW51bGwpe3ZhciBpPVtdO3JldHVybiB0aGlzLl94U2NhbGVzLmZvckVhY2goZnVuY3Rpb24obyl7aS5wdXNoKG8pfSksaX1yZXR1cm4gdGhpcy5feFNjYWxlcz1uZXcgeWwuU2V0LHIuZm9yRWFjaChmdW5jdGlvbihvKXtuLmFkZFhTY2FsZShvKX0pLHRoaXN9LHQucHJvdG90eXBlLnlTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feVNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3lTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRZU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS5hZGRYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feFNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmFkZFlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlWVNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl95U2NhbGVzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLmRlbGV0ZShyKSx0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWluRG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSIpO3ZhciBpPXRoaXMubWF4RG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJmkudmFsdWVPZigpPG4udmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWluRG9tYWluRXh0ZW50IG11c3QgYmUgc21hbGxlciB0aGFuIG1heERvbWFpbkV4dGVudCBmb3IgdGhlIHNhbWUgU2NhbGUiKTtyZXR1cm4gdGhpcy5fbm9uTGluZWFyU2NhbGVXaXRoRXh0ZW50cyhyKSYmeWwuV2luZG93Lndhcm4oIlBhbm5pbmcgYW5kIHpvb21pbmcgd2l0aCBleHRlbnRzIG9uIGEgbm9ubGluZWFyIHNjYWxlIG1heSBoYXZlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIiksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5tYXhEb21haW5FeHRlbnQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9tYXhEb21haW5FeHRlbnRzLmdldChyKTtpZihuLnZhbHVlT2YoKTw9MCl0aHJvdyBuZXcgRXJyb3IoImV4dGVudCBtdXN0IGJlIHBvc2l0aXZlIik7dmFyIGk9dGhpcy5taW5Eb21haW5FeHRlbnQocik7aWYoaSE9bnVsbCYmbi52YWx1ZU9mKCk8aS52YWx1ZU9mKCkpdGhyb3cgbmV3IEVycm9yKCJtYXhEb21haW5FeHRlbnQgbXVzdCBiZSBsYXJnZXIgdGhhbiBtaW5Eb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWluRG9tYWluVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09bnVsbD90aGlzLl9taW5Eb21haW5WYWx1ZXMuZ2V0KHIpOih0aGlzLl9taW5Eb21haW5WYWx1ZXMuc2V0KHIsbiksdGhpcyl9LHQucHJvdG90eXBlLm1heERvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWF4RG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWF4RG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5zZXRNaW5NYXhEb21haW5WYWx1ZXNUbz1mdW5jdGlvbihyKXt0aGlzLl9taW5Eb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpblZhbHVlcy5kZWxldGUocik7dmFyIG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9blswXSxvPW5bMV07cmV0dXJuIHRoaXMubWluRG9tYWluVmFsdWUocixpKSx0aGlzLm1heERvbWFpblZhbHVlKHIsbyksdGhpc30sdC5wcm90b3R5cGUub25QYW5FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BhbkVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmWm9vbUVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fem9vbUVuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25QYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQYW5ab29tVXBkYXRlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5ab29tVXBkYXRlQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9QSVhFTFNfUEVSX0xJTkU9MTIwLHR9KEpGZS5JbnRlcmFjdGlvbik7U290LlBhblpvb209UUZlfSk7dmFyIEUkdD1IKEVvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdEJlPShkZSgpLFV0KHBlKSksTSR0PU52KCksTW90PUZlKCksZUJlPUR2KCksckJlPWZ1bmN0aW9uKGUpe3RCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9vdmVyQ29tcG9uZW50PSExLHIuX3BvaW50ZXJFbnRlckNhbGxiYWNrcz1uZXcgTW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzPW5ldyBNb3QuQ2FsbGJhY2tTZXQsci5fcG9pbnRlckV4aXRDYWxsYmFja3M9bmV3IE1vdC5DYWxsYmFja1NldCxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVNb3VzZUV2ZW50KG4saSl9LHIuX3RvdWNoU3RhcnRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZVRvdWNoRXZlbnQoaVtuWzBdXSxvKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9TSR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9TSR0LlRvdWNoLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9uVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hTdGFydCh0aGlzLl90b3VjaFN0YXJ0Q2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX21vdXNlRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RvdWNoRGlzcGF0Y2hlci5ldmVudEluc2lkZSh0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLG4pO3RoaXMuX2hhbmRsZVBvaW50ZXJFdmVudChyLGkpfSx0LnByb3RvdHlwZS5faGFuZGxlUG9pbnRlckV2ZW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKSxvPXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpO28mJm4/KHRoaXMuX292ZXJDb21wb25lbnR8fHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSkpOnRoaXMuX292ZXJDb21wb25lbnQmJnRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoaSksdGhpcy5fb3ZlckNvbXBvbmVudD1vJiZufSx0LnByb3RvdHlwZS5vblBvaW50ZXJFbnRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckVudGVyQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Qb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBvaW50ZXJFeGl0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdH0oZUJlLkludGVyYWN0aW9uKTtFb3QuUG9pbnRlcj1yQmV9KTt2YXIgbDQ9SChaZz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWmcsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjND0oZGUoKSxVdChwZSkpO2M0Ll9fZXhwb3J0U3RhcihnJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKHkkdCgpLFpnKTtjNC5fX2V4cG9ydFN0YXIod290KCksWmcpO2M0Ll9fZXhwb3J0U3RhcihTJHQoKSxaZyk7YzQuX19leHBvcnRTdGFyKEUkdCgpLFpnKTt2YXIgbkJlPWU0KCk7Wmcuem9vbU91dD1uQmUuem9vbU91dH0pO3ZhciBUb3Q9SCh1ND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodTQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpQmU9KGRlKCksVXQocGUpKSxWRj1GZSgpLG9CZT1rYygpLGVzOyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKGVzPXU0LlByb3BlcnR5TW9kZXx8KHU0LlByb3BlcnR5TW9kZT17fSkpO3ZhciBhQmU9ZnVuY3Rpb24oZSl7aUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2JveFZpc2libGU9ITEsci5fYm94Qm91bmRzPXt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19LHIuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHIuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHIuYWRkQ2xhc3MoInNlbGVjdGlvbi1ib3gtbGF5ZXIiKSxyLl9hZGp1c3RCb3VuZHNDYWxsYmFjaz1mdW5jdGlvbigpe3IucmVuZGVyKCl9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuX3hFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHIuX3lFeHRlbnQ9W3ZvaWQgMCx2b2lkIDBdLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2JveD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzZWxlY3Rpb24tYm94IiwhMCkucmVtb3ZlKCksdGhpcy5fYm94QXJlYT10aGlzLl9ib3guYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2VsZWN0aW9uLWFyZWEiLCEwKX0sdC5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24ocixuKXtyZXR1cm57d2lkdGg6cixoZWlnaHQ6bn19LHQucHJvdG90eXBlLmJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRCb3VuZHMoKToodGhpcy5fc2V0Qm91bmRzKHIpLHRoaXMuX3hCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlBJWEVMLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49e3g6TWF0aC5taW4oci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWluKHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9LGk9e3g6TWF0aC5tYXgoci50b3BMZWZ0Lngsci5ib3R0b21SaWdodC54KSx5Ok1hdGgubWF4KHIudG9wTGVmdC55LHIuYm90dG9tUmlnaHQueSl9O3RoaXMuX2JveEJvdW5kcz17dG9wTGVmdDpuLGJvdHRvbVJpZ2h0Oml9fSx0LnByb3RvdHlwZS5fZ2V0Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6dGhpcy5feEJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWluKHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9LGJvdHRvbVJpZ2h0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lng6dGhpcy5feFNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVswXSksdGhpcy54U2NhbGUoKS5zY2FsZSh0aGlzLnhFeHRlbnQoKVsxXSkpLHk6dGhpcy5feUJvdW5kc01vZGU9PT1lcy5QSVhFTD90aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueTp0aGlzLl95U2NhbGU9PW51bGw/MDpNYXRoLm1heCh0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzBdKSx0aGlzLnlTY2FsZSgpLnNjYWxlKHRoaXMueUV4dGVudCgpWzFdKSl9fX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2JveFZpc2libGUpe3ZhciByPXRoaXMuYm91bmRzKCksbj1yLnRvcExlZnQueSxpPXIuYm90dG9tUmlnaHQueSxvPXIudG9wTGVmdC54LGE9ci5ib3R0b21SaWdodC54O2lmKCEoVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKG4pJiZWRi5NYXRoLmlzVmFsaWROdW1iZXIoaSkmJlZGLk1hdGguaXNWYWxpZE51bWJlcihvKSYmVkYuTWF0aC5pc1ZhbGlkTnVtYmVyKGEpKSl0aHJvdyBuZXcgRXJyb3IoImJvdW5kcyBoYXZlIG5vdCBiZWVuIHByb3Blcmx5IHNldCIpO3RoaXMuX2JveEFyZWEuYXR0cnMoe3g6byx5Om4sd2lkdGg6YS1vLGhlaWdodDppLW59KSx0aGlzLmNvbnRlbnQoKS5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fYm94Lm5vZGUoKSl9ZWxzZSB0aGlzLl9ib3gucmVtb3ZlKCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmJveFZpc2libGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYm94VmlzaWJsZToodGhpcy5fYm94VmlzaWJsZT1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3hTY2FsZToodGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLl94U2NhbGU9cix0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLl94U2NhbGUub25VcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl95U2NhbGU6KHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlPXIsdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feVNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS54RXh0ZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2dldFhFeHRlbnQoKToodGhpcy5fc2V0WEV4dGVudChyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5WQUxVRSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0WEV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl94Qm91bmRzTW9kZT09PWVzLlZBTFVFP3RoaXMuX3hFeHRlbnQ6dGhpcy5feFNjYWxlPT1udWxsP1t2b2lkIDAsdm9pZCAwXTpbdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMudG9wTGVmdC54KSx0aGlzLl94U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54KV19LHQucHJvdG90eXBlLl9zZXRYRXh0ZW50PWZ1bmN0aW9uKHIpe3RoaXMuX3hFeHRlbnQ9cn0sdC5wcm90b3R5cGUueUV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRZRXh0ZW50KCk6KHRoaXMuX3NldFlFeHRlbnQociksdGhpcy5feUJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFlFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl95RXh0ZW50OnRoaXMuX3lTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueSksdGhpcy5feVNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueSldfSx0LnByb3RvdHlwZS5fc2V0WUV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl95RXh0ZW50PXJ9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLnhTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLnlTY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayl9LHR9KG9CZS5Db21wb25lbnQpO3U0LlNlbGVjdGlvbkJveExheWVyPWFCZX0pO3ZhciBxRj1IKEFvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgc0JlPShkZSgpLFV0KHBlKSksbEJlPWw0KCksQ290PUZlKCksY0JlPVlnKCksVUY9UG90KCksdUJlPVRvdCgpLGhCZT1mdW5jdGlvbihlKXtzQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZGV0ZWN0aW9uUmFkaXVzPTMsci5fcmVzaXphYmxlPSExLHIuX21vdmFibGU9ITEsci5faGFzQ29ybmVycz0hMCxyLmFkZENsYXNzKCJkcmFnLWJveC1sYXllciIpLHIuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbEJlLkRyYWcsci5fc2V0VXBDYWxsYmFja3MoKSxyLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8ociksci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBDb3QuQ2FsbGJhY2tTZXQsci5fZHJhZ0NhbGxiYWNrcz1uZXcgQ290LkNhbGxiYWNrU2V0LHIuX2RyYWdFbmRDYWxsYmFja3M9bmV3IENvdC5DYWxsYmFja1NldCxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0VXBDYWxsYmFja3M9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG4saSxvLGEscz17bmV3Qm94OjAscmVzaXplOjEsbW92ZToyfSxsPXMubmV3Qm94LGM9ZnVuY3Rpb24oZil7bj1yLl9nZXRSZXNpemluZ0VkZ2VzKGYpO3ZhciBwPXIuYm91bmRzKCksZD1wLnRvcExlZnQueDw9Zi54JiZmLng8PXAuYm90dG9tUmlnaHQueCYmcC50b3BMZWZ0Lnk8PWYueSYmZi55PD1wLmJvdHRvbVJpZ2h0Lnk7ci5ib3hWaXNpYmxlKCkmJihuLnRvcHx8bi5ib3R0b218fG4ubGVmdHx8bi5yaWdodCk/bD1zLnJlc2l6ZTpyLmJveFZpc2libGUoKSYmci5tb3ZhYmxlKCkmJmQ/bD1zLm1vdmU6KGw9cy5uZXdCb3gsci5fc2V0Qm91bmRzKHt0b3BMZWZ0OmYsYm90dG9tUmlnaHQ6Zn0pLHIuX3hCb3VuZHNNb2RlPT09VUYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnhTY2FsZSgpIT1udWxsJiZyLl9zZXRYRXh0ZW50KFtyLnhTY2FsZSgpLmludmVydChmLngpLHIueFNjYWxlKCkuaW52ZXJ0KGYueCldKSxyLl95Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci55U2NhbGUoKSE9bnVsbCYmci5fc2V0WUV4dGVudChbci55U2NhbGUoKS5pbnZlcnQoZi55KSxyLnlTY2FsZSgpLmludmVydChmLnkpXSksci5yZW5kZXIoKSksci5ib3hWaXNpYmxlKCEwKSxwPXIuYm91bmRzKCksaT17eDpwLnRvcExlZnQueCx5OnAudG9wTGVmdC55fSxvPXt4OnAuYm90dG9tUmlnaHQueCx5OnAuYm90dG9tUmlnaHQueX0sYT1mLHIuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHApfSx1PWZ1bmN0aW9uKGYscCl7c3dpdGNoKGwpe2Nhc2Ugcy5uZXdCb3g6by54PXAueCxvLnk9cC55O2JyZWFrO2Nhc2Ugcy5yZXNpemU6bi5ib3R0b20/by55PXAueTpuLnRvcCYmKGkueT1wLnkpLG4ucmlnaHQ/by54PXAueDpuLmxlZnQmJihpLng9cC54KTticmVhaztjYXNlIHMubW92ZTp2YXIgZD1wLngtYS54LGc9cC55LWEueTtpLngrPWQsaS55Kz1nLG8ueCs9ZCxvLnkrPWcsYT1wO2JyZWFrfXIuX3NldEJvdW5kcyh7dG9wTGVmdDppLGJvdHRvbVJpZ2h0Om99KSxyLl94Qm91bmRzTW9kZT09PVVGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoaS54KSxyLnhTY2FsZSgpLmludmVydChvLngpXSksci5feUJvdW5kc01vZGU9PT1VRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGkueSksci55U2NhbGUoKS5pbnZlcnQoby55KV0pLHIucmVuZGVyKCksci5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfSxoPWZ1bmN0aW9uKGYscCl7bD09PXMubmV3Qm94JiZmLng9PT1wLngmJmYueT09PXAueSYmci5ib3hWaXNpYmxlKCExKSxyLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3Moci5ib3VuZHMoKSl9O3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdTdGFydChjKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHUpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoaCksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7ci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChjKSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyh1KSxyLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChoKSxyLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JveC5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSl9O2lmKHRoaXMuX2RldGVjdGlvbkVkZ2VUPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtdGIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlQj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUw9bigpLmNsYXNzZWQoImRyYWctZWRnZS1sciIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VSPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9oYXNDb3JuZXJzKXt2YXIgaT1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJjaXJjbGUiKS5zdHlsZXMoe29wYWNpdHk6MCxmaWxsOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlRmlsbCJ9KX07dGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLXRyIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQkw9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJsIiwhMCksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlI9aSgpLmNsYXNzZWQoImRyYWctY29ybmVyLWJyIiwhMCl9fSx0LnByb3RvdHlwZS5fZ2V0UmVzaXppbmdFZGdlcz1mdW5jdGlvbihyKXt2YXIgbj17dG9wOiExLGJvdHRvbTohMSxsZWZ0OiExLHJpZ2h0OiExfTtpZighdGhpcy5yZXNpemFibGUoKSlyZXR1cm4gbjt2YXIgaT10aGlzLmJvdW5kcygpLG89aS50b3BMZWZ0LnksYT1pLmJvdHRvbVJpZ2h0Lnkscz1pLnRvcExlZnQueCxsPWkuYm90dG9tUmlnaHQueCxjPXRoaXMuX2RldGVjdGlvblJhZGl1cztyZXR1cm4gcy1jPD1yLngmJnIueDw9bCtjJiYobi50b3A9by1jPD1yLnkmJnIueTw9bytjLG4uYm90dG9tPWEtYzw9ci55JiZyLnk8PWErYyksby1jPD1yLnkmJnIueTw9YStjJiYobi5sZWZ0PXMtYzw9ci54JiZyLng8PXMrYyxuLnJpZ2h0PWwtYzw9ci54JiZyLng8PWwrYyksbn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtpZihlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuYm94VmlzaWJsZSgpKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDt0aGlzLl9kZXRlY3Rpb25FZGdlVC5hdHRycyh7eDE6byx5MTpuLHgyOmEseTI6biwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VCLmF0dHJzKHt4MTpvLHkxOmkseDI6YSx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZUwuYXR0cnMoe3gxOm8seTE6bix4MjpvLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlUi5hdHRycyh7eDE6YSx5MTpuLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2hhc0Nvcm5lcnMmJih0aGlzLl9kZXRlY3Rpb25Db3JuZXJUTC5hdHRycyh7Y3g6byxjeTpuLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyVFIuYXR0cnMoe2N4OmEsY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMLmF0dHJzKHtjeDpvLGN5Omkscjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCUi5hdHRycyh7Y3g6YSxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSkpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5kZXRlY3Rpb25SYWRpdXM9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImRldGVjdGlvbiByYWRpdXMgY2Fubm90IGJlIG5lZ2F0aXZlLiIpO3JldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM9cix0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnJlc2l6YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9yZXNpemFibGU6KHRoaXMuX3Jlc2l6YWJsZT1yLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXMociksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpPyh0aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIikpOih0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpLHRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIikpfSx0LnByb3RvdHlwZS5tb3ZhYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21vdmFibGU6KHRoaXMuX21vdmFibGU9cix0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldE1vdmFibGVDbGFzcz1mdW5jdGlvbigpe3RoaXMubW92YWJsZSgpJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJtb3ZhYmxlIik6dGhpcy5yZW1vdmVDbGFzcygibW92YWJsZSIpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRyYWdJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259LHQucHJvdG90eXBlLmVuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoKToodGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcy5fc2V0UmVzaXphYmxlQ2xhc3Nlcyh0aGlzLnJlc2l6YWJsZSgpKSx0aGlzLl9zZXRNb3ZhYmxlQ2xhc3MoKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHQucHJvdG90eXBlLmRldGFjaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpLGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj1jQmUuY29lcmNlRXh0ZXJuYWxEMyhyKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVzZXRTdGF0ZT1mdW5jdGlvbigpe3RoaXMuYm91bmRzKHt0b3BMZWZ0Ont4OjAseTowfSxib3R0b21SaWdodDp7eDowLHk6MH19KX0sdH0odUJlLlNlbGVjdGlvbkJveExheWVyKTtBb3QuRHJhZ0JveExheWVyPWhCZX0pO3ZhciBMb3Q9SChJb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KElvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGZCZT0oZGUoKSxVdChwZSkpLHBCZT1GZSgpLGRCZT1rYygpLE92OyhmdW5jdGlvbihlKXtlW2UuVkFMVUU9MF09IlZBTFVFIixlW2UuUElYRUw9MV09IlBJWEVMIn0pKE92fHwoT3Y9e30pKTt2YXIgbUJlPWZ1bmN0aW9uKGUpe2ZCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9tb2RlPU92LlZBTFVFLHIhPT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMJiZyIT09dC5PUklFTlRBVElPTl9IT1JJWk9OVEFMKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEd1aWRlTGluZUxheWVyIik7cmV0dXJuIG4uX29yaWVudGF0aW9uPXIsbi5fb3ZlcmZsb3dIaWRkZW49ITAsbi5hZGRDbGFzcygiZ3VpZGUtbGluZS1sYXllciIpLG4uX2lzVmVydGljYWwoKT9uLmFkZENsYXNzKCJ2ZXJ0aWNhbCIpOm4uYWRkQ2xhc3MoImhvcml6b250YWwiKSxuLl9zY2FsZVVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7bi5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLG4ucmVuZGVyKCl9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2d1aWRlTGluZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJndWlkZS1saW5lIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PXQuT1JJRU5UQVRJT05fVkVSVElDQUx9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5zY2FsZSgpLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuc2NhbGUoKS5yYW5nZShbdGhpcy5oZWlnaHQoKSwwXSkpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMuX2d1aWRlTGluZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlPWZ1bmN0aW9uKCl7dGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fbW9kZT09PU92LlZBTFVFJiZ0aGlzLnZhbHVlKCkhPW51bGw/dGhpcy5fcGl4ZWxQb3NpdGlvbj10aGlzLnNjYWxlKCkuc2NhbGUodGhpcy52YWx1ZSgpKTp0aGlzLl9tb2RlPT09T3YuUElYRUwmJnRoaXMucGl4ZWxQb3NpdGlvbigpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpKX0sdC5wcm90b3R5cGUuX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlPWZ1bmN0aW9uKHIpe3RoaXMuX3BpeGVsUG9zaXRpb249cix0aGlzLnNjYWxlKCkhPW51bGwmJih0aGlzLl92YWx1ZT10aGlzLnNjYWxlKCkuaW52ZXJ0KHRoaXMucGl4ZWxQb3NpdGlvbigpKSksdGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fc2NhbGU7dmFyIG49dGhpcy5fc2NhbGU7cmV0dXJuIG4hPW51bGwmJm4ub2ZmVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3NjYWxlPXIsdGhpcy5fc2NhbGUub25VcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayksdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudmFsdWU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdmFsdWU6KHRoaXMuX3ZhbHVlPXIsdGhpcy5fbW9kZT1Pdi5WQUxVRSx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUucGl4ZWxQb3NpdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uO2lmKCFwQmUuTWF0aC5pc1ZhbGlkTnVtYmVyKHIpKXRocm93IG5ldyBFcnJvcigicGl4ZWxQb3NpdGlvbiBtdXN0IGJlIGEgZmluaXRlIG51bWJlciIpO3JldHVybiB0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5fbW9kZT1Pdi5QSVhFTCx0aGlzLl9zeW5jUGl4ZWxQb3NpdGlvbkFuZFZhbHVlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuc2NhbGUoKSE9bnVsbCYmdGhpcy5zY2FsZSgpLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKX0sdC5PUklFTlRBVElPTl9WRVJUSUNBTD0idmVydGljYWwiLHQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsdH0oZEJlLkNvbXBvbmVudCk7SW90Lkd1aWRlTGluZUxheWVyPW1CZX0pO3ZhciBUJHQ9SChSb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGdCZT0oZGUoKSxVdChwZSkpLF9CZT1Mb3QoKSx5QmU9bDQoKSxrb3Q9RmUoKSx2QmU9ZnVuY3Rpb24oZSl7Z0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7bi5fZGV0ZWN0aW9uUmFkaXVzPTMsbi5fZW5hYmxlZD0hMCxuLmFkZENsYXNzKCJkcmFnLWxpbmUtbGF5ZXIiKSxuLmFkZENsYXNzKCJlbmFibGVkIiksbi5fZHJhZ0ludGVyYWN0aW9uPW5ldyB5QmUuRHJhZyxuLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8obik7dmFyIGk9ZnVuY3Rpb24oYyl7cmV0dXJuIG4uX2lzVmVydGljYWwoKSYmbi5waXhlbFBvc2l0aW9uKCktbi5kZXRlY3Rpb25SYWRpdXMoKTw9Yy54JiZjLng8PW4ucGl4ZWxQb3NpdGlvbigpK24uZGV0ZWN0aW9uUmFkaXVzKCl8fCFuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueSYmYy55PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfSxvPSExLGE9ZnVuY3Rpb24oYyl7aShjKSYmKG89ITAsbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYSk7dmFyIHM9ZnVuY3Rpb24oYyx1KXtvJiYobi5fc2V0UGl4ZWxQb3NpdGlvbldpdGhvdXRDaGFuZ2luZ01vZGUobi5faXNWZXJ0aWNhbCgpP3UueDp1LnkpLG4uX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhuKSl9O24uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcocyk7dmFyIGw9ZnVuY3Rpb24oYyx1KXtvJiYobz0hMSxuLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtyZXR1cm4gbi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChsKSxuLl9kaXNjb25uZWN0SW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ1N0YXJ0KGEpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnKHMpLG4uX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnRW5kKGwpLG4uX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sbi5fZHJhZ1N0YXJ0Q2FsbGJhY2tzPW5ldyBrb3QuQ2FsbGJhY2tTZXQsbi5fZHJhZ0NhbGxiYWNrcz1uZXcga290LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGtvdC5DYWxsYmFja1NldCxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLnN0eWxlcyh7b3BhY2l0eTowLHN0cm9rZToicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZVN0cm9rZSJ9KS5jbGFzc2VkKCJkcmFnLWVkZ2UiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9kZXRlY3Rpb25FZGdlLmF0dHJzKHt4MTp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6MCx5MTp0aGlzLl9pc1ZlcnRpY2FsKCk/MDp0aGlzLnBpeGVsUG9zaXRpb24oKSx4Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5waXhlbFBvc2l0aW9uKCk6dGhpcy53aWR0aCgpLHkyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLmhlaWdodCgpOnRoaXMucGl4ZWxQb3NpdGlvbigpLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2VuYWJsZWQ6KHRoaXMuX2VuYWJsZWQ9cixyP3RoaXMuYWRkQ2xhc3MoImVuYWJsZWQiKTp0aGlzLnJlbW92ZUNsYXNzKCJlbmFibGVkIiksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQociksdGhpcyl9LHQucHJvdG90eXBlLm9uRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWc9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ0VuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0NhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0VuZENhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kaXNjb25uZWN0SW50ZXJhY3Rpb24oKX0sdH0oX0JlLkd1aWRlTGluZUxheWVyKTtSb3QuRHJhZ0xpbmVMYXllcj12QmV9KTt2YXIgQyR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB4QmU9KGRlKCksVXQocGUpKSxiQmU9a2MoKTtmdW5jdGlvbiBHRihlLHQscil7dmFyIG49e307aWYociE9PXZvaWQgMClmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpLTFdLGE9cltpXTtuW2FdPW99cmV0dXJuIGZ1bmN0aW9uKHMpe3ZhciBsPWUuc2NhbGUocyk7aWYoIXQpcmV0dXJuIGw7dmFyIGMsdT1uW3NdPT09dm9pZCAwP3ZvaWQgMDplLnNjYWxlKG5bc10pO3JldHVybiB1IT09dm9pZCAwJiYoYz11KyhsLXUpLzIpLGN9fXZhciB3QmU9ZnVuY3Rpb24oZSl7eEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImdyaWRsaW5lcyIpLGkuX3hTY2FsZT1yLGkuX3lTY2FsZT1uLGkuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKG8pe3JldHVybiBpLnJlbmRlcigpfSxpLl94U2NhbGUmJmkuX3hTY2FsZS5vblVwZGF0ZShpLl9yZW5kZXJDYWxsYmFjayksaS5feVNjYWxlJiZpLl95U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGl9cmV0dXJuIHQucHJvdG90eXBlLmJldHdlZW5YPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2JldHdlZW5YOihyIT09dGhpcy5fYmV0d2VlblgmJih0aGlzLl9iZXR3ZWVuWD1yLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5iZXR3ZWVuWT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWToociE9PXRoaXMuX2JldHdlZW5ZJiYodGhpcy5fYmV0d2Vlblk9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5feFNjYWxlJiZ0aGlzLl94U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzLl95U2NhbGUmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3hMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWdyaWRsaW5lcyIsITApLHRoaXMuX3lMaW5lc0NvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWdyaWRsaW5lcyIsITApfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3JlZHJhd1hMaW5lcygpLHRoaXMuX3JlZHJhd1lMaW5lcygpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5feFNjYWxlIT1udWxsJiZ0aGlzLl94U2NhbGUucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSksdGhpcy5feVNjYWxlIT1udWxsJiZ0aGlzLl95U2NhbGUucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pLHRoaXN9LHQucHJvdG90eXBlLl9yZWRyYXdYTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl94U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblgoKSxuPXRoaXMuX3hTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3hMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLEdGKHRoaXMuX3hTY2FsZSxyLHRoaXMuX3hTY2FsZS50aWNrcygpKSkuYXR0cigieTEiLDApLmF0dHIoIngyIixHRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkyIix0aGlzLmhlaWdodCgpKS5jbGFzc2VkKCJiZXR3ZWVubGluZSIscikuY2xhc3NlZCgiemVyb2xpbmUiLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09MH0pLGkuZXhpdCgpLnJlbW92ZSgpfX0sdC5wcm90b3R5cGUuX3JlZHJhd1lMaW5lcz1mdW5jdGlvbigpe2lmKHRoaXMuX3lTY2FsZSl7dmFyIHI9dGhpcy5iZXR3ZWVuWSgpLG49dGhpcy5feVNjYWxlLnRpY2tzKCkuc2xpY2Uocj8xOjApLGk9dGhpcy5feUxpbmVzQ29udGFpbmVyLnNlbGVjdEFsbCgibGluZSIpLmRhdGEobiksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikubWVyZ2UoaSk7by5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuYXR0cigieDIiLHRoaXMud2lkdGgoKSkuYXR0cigieTIiLEdGKHRoaXMuX3lTY2FsZSxyLHRoaXMuX3lTY2FsZS50aWNrcygpKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHR9KGJCZS5Db21wb25lbnQpO05vdC5HcmlkbGluZXM9d0JlfSk7dmFyIFdGPUgoRG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTQmU9KGRlKCksVXQocGUpKSxNQmU9WWcoKSxFQmU9a2MoKSxUQmU9ZnVuY3Rpb24oZSl7U0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGFjaENhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiByLnJlbW92ZShuKX0scn1yZXR1cm4gdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9TUJlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFuY2hvcihuLmVsZW1lbnQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gci5yZW5kZXIoKX0pLHRoaXN9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoImhhcygpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuX2Fkb3B0QW5kQW5jaG9yPWZ1bmN0aW9uKHIpe3IucGFyZW50KHRoaXMpLHIub25EZXRhY2godGhpcy5fZGV0YWNoQ2FsbGJhY2spLHRoaXMuX2lzQW5jaG9yZWQmJnIuYW5jaG9yKHRoaXMuZWxlbWVudCgpKX0sdC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmhhcyhyKSYmKHIub2ZmRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9yZW1vdmUociksci5kZXRhY2goKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiExfSx0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIl9mb3JFYWNoKCkgaXMgbm90IGltcGxlbWVudGVkIG9uIENvbXBvbmVudENvbnRhaW5lciIpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuZGVzdHJveSgpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIuaW52YWxpZGF0ZUNhY2hlKCl9KX0sdH0oRUJlLkNvbXBvbmVudCk7RG90LkNvbXBvbmVudENvbnRhaW5lcj1UQmV9KTt2YXIgem90PUgoT290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDQmU9KGRlKCksVXQocGUpKSxBJHQ9RmUoKSxBQmU9V0YoKSxQQmU9ZnVuY3Rpb24oZSl7Q0JlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fY29tcG9uZW50cz1bXSxuLmFkZENsYXNzKCJjb21wb25lbnQtZ3JvdXAiKSxyLmZvckVhY2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uYXBwZW5kKGkpfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhpcy5jb21wb25lbnRzKCkuZm9yRWFjaChyKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik+PTB9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fY29tcG9uZW50cy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG8ucmVxdWVzdGVkU3BhY2UocixuKX0pO3JldHVybnttaW5XaWR0aDpBJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5XaWR0aH0sMCksbWluSGVpZ2h0OkEkdC5NYXRoLm1heChpLGZ1bmN0aW9uKG8pe3JldHVybiBvLm1pbkhlaWdodH0sMCl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihhKXthLmNvbXB1dGVMYXlvdXQoe3g6MCx5OjB9LG8ud2lkdGgoKSxvLmhlaWdodCgpKX0pLHRoaXN9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuZml4ZWRIZWlnaHQoKX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbXBvbmVudHMuc2xpY2UoKX0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsJiYhdGhpcy5oYXMocikmJihyLmRldGFjaCgpLHRoaXMuX2NvbXBvbmVudHMucHVzaChyKSx0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2NvbXBvbmVudHMuaW5kZXhPZihyKTtyZXR1cm4gbj49MD8odGhpcy5fY29tcG9uZW50cy5zcGxpY2UobiwxKSwhMCk6ITF9LHR9KEFCZS5Db21wb25lbnRDb250YWluZXIpO09vdC5Hcm91cD1QQmV9KTt2YXIgUCR0PUgoRm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBJQmU9KGRlKCksVXQocGUpKSxZRj1fbCgpLExCZT0kQSgpLGtCZT1CdSgpLFJCZT1GZSgpLE5CZT1rYygpLERCZT1mdW5jdGlvbihlKXtJQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fdGV4dFBhZGRpbmc9NSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiSW50ZXJwb2xhdGVkQ29sb3JMZWdlbmQgcmVxdWlyZXMgYSBpbnRlcnBvbGF0ZWRDb2xvclNjYWxlIik7cmV0dXJuIG4uX3NjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX3NjYWxlLm9uVXBkYXRlKG4uX3JlZHJhd0NhbGxiYWNrKSxuLl9mb3JtYXR0ZXI9a0JlLmdlbmVyYWwoKSxuLl9vcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIsbi5fZXhwYW5kcz0hMSxuLmFkZENsYXNzKCJsZWdlbmQiKSxuLmFkZENsYXNzKCJpbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIiksbn1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5leHBhbmRzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2V4cGFuZHM6KHRoaXMuX2V4cGFuZHM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0Ll9lbnN1cmVPcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPXIudG9Mb3dlckNhc2UoKSxyPT09Imhvcml6b250YWwifHxyPT09ImxlZnQifHxyPT09InJpZ2h0IilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJyInK3IrJyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIEludGVycG9sYXRlZENvbG9yTGVnZW5kJyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX29yaWVudGF0aW9uOih0aGlzLl9vcmllbnRhdGlvbj10Ll9lbnN1cmVPcmllbnRhdGlvbihyKSx0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHx0aGlzLl9pc1ZlcnRpY2FsKCl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZXhwYW5kcygpfHwhdGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVUaWNrcz1mdW5jdGlvbihyKXtyPT09dm9pZCAwJiYocj10Ll9ERUZBVUxUX05VTV9TV0FUQ0hFUyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCk7aWYocj09PTEpcmV0dXJuW25bMF1dO2Zvcih2YXIgaT0oblsxXS1uWzBdKS8oci0xKSxvPVtdLGE9MDthPHI7YSsrKW8ucHVzaChuWzBdK2kqYSk7cmV0dXJuIG99LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX3N3YXRjaENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzd2F0Y2gtY29udGFpbmVyIiwhMCksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoLWJvdW5kaW5nLWJveCIsITApLHRoaXMuX2xvd2VyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCksdGhpcy5fdXBwZXJMYWJlbD10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0xBQkVMX0NMQVNTLCEwKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLmNvbnRlbnQoKS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBZRi5NZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBZRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgWUYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlcil9LHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1vLHM9dGhpcy5fc2NhbGUuZG9tYWluKCksbD1zLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZShpLl9mb3JtYXR0ZXIocCkpLndpZHRofSksYyx1LGg9dC5fREVGQVVMVF9OVU1fU1dBVENIRVM7aWYodGhpcy5faXNWZXJ0aWNhbCgpKXt2YXIgZj1SQmUuTWF0aC5tYXgobCwwKTt1PWErbyt0aGlzLl90ZXh0UGFkZGluZytmK3RoaXMuX3RleHRQYWRkaW5nLGM9aCpvfWVsc2UgYz1hK28rYSx1PXRoaXMuX3RleHRQYWRkaW5nK2xbMF0raCpvK2xbMV0rdGhpcy5fdGV4dFBhZGRpbmc7cmV0dXJue21pbldpZHRoOnUsbWluSGVpZ2h0OmN9fSx0LnByb3RvdHlwZS5faXNWZXJ0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbiE9PSJob3Jpem9udGFsIn0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIG49dGhpcy5fc2NhbGUuZG9tYWluKCksaT10aGlzLl9mb3JtYXR0ZXIoblswXSksbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKGkpLndpZHRoLGE9dGhpcy5fZm9ybWF0dGVyKG5bMV0pLHM9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aCxsPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYz10aGlzLl90ZXh0UGFkZGluZyx1PXt4OjAseTowfSxoPXt4OjAseTowfSxmPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxwPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIiLHRleHRSb3RhdGlvbjowfSxkLGcsXyx5LHg9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sYixTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7Uz1NYXRoLmZsb29yKHRoaXMuaGVpZ2h0KCkpO3ZhciBDPU1hdGgubWF4KG8scyk7Yj0odGhpcy53aWR0aCgpLUMtMip0aGlzLl90ZXh0UGFkZGluZykvMixkPU1hdGgubWF4KHRoaXMud2lkdGgoKS1iLTIqYy1DLDApLGc9MSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuaGVpZ2h0KCktKFIrMSl9LHAueUFsaWduPSJ0b3AiLHUueT0wLGYueUFsaWduPSJib3R0b20iLGgueT0wLHRoaXMuX29yaWVudGF0aW9uPT09ImxlZnQiPyhfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGMrQytjfSxwLnhBbGlnbj0icmlnaHQiLHUueD0tKGIrZCtjKSxmLnhBbGlnbj0icmlnaHQiLGgueD0tKGIrZCtjKSk6KF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gYn0scC54QWxpZ249ImxlZnQiLHUueD1iK2QrYyxmLnhBbGlnbj0ibGVmdCIsaC54PWIrZCtjKSx4LndpZHRoPWQseC5oZWlnaHQ9UypnfWVsc2UgYj1NYXRoLm1heChjLCh0aGlzLmhlaWdodCgpLWwpLzIpLFM9TWF0aC5tYXgoTWF0aC5mbG9vcih0aGlzLndpZHRoKCktYyo0LW8tcyksMCksZD0xLGc9TWF0aC5tYXgodGhpcy5oZWlnaHQoKS0yKmIsMCksXz1mdW5jdGlvbihMLFIpe3JldHVybiBNYXRoLmZsb29yKG8rMipjKStSfSx5PWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJyaWdodCIsdS54PS1jLGYueEFsaWduPSJsZWZ0IixoLng9Yyx4Lnk9Yix4LndpZHRoPVMqZCx4LmhlaWdodD1nO3gueD1fKG51bGwsMCksdGhpcy5fdXBwZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoYSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxwLHRoaXMuX3VwcGVyTGFiZWwubm9kZSgpKTt2YXIgUD0idHJhbnNsYXRlKCIrdS54KyIsICIrdS55KyIpIjt0aGlzLl91cHBlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsUCksdGhpcy5fbG93ZXJMYWJlbC50ZXh0KCIiKSx0aGlzLl93cml0ZXIud3JpdGUoaSx0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSxmLHRoaXMuX2xvd2VyTGFiZWwubm9kZSgpKTt2YXIgaz0idHJhbnNsYXRlKCIraC54KyIsICIraC55KyIpIjt0aGlzLl9sb3dlckxhYmVsLmF0dHIoInRyYW5zZm9ybSIsayksdGhpcy5fc3dhdGNoQm91bmRpbmdCb3guYXR0cnMoeCk7dmFyIE89dGhpcy5fZ2VuZXJhdGVUaWNrcyhTKSxEPXRoaXMuX3N3YXRjaENvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc3dhdGNoIikuZGF0YShPKSxCPUQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzd2F0Y2giLCEwKSxJPUQubWVyZ2UoQik7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEkuYXR0cnMoe2ZpbGw6ZnVuY3Rpb24oTCxSKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoTCl9LHdpZHRoOmQsaGVpZ2h0OmcseDpfLHksInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksTEJlLkFERF9USVRMRV9FTEVNRU5UUyYmQi5hcHBlbmQoInRpdGxlIikudGV4dChmdW5jdGlvbihMKXtyZXR1cm4gci5fZm9ybWF0dGVyKEwpfSksdGhpc30sdC5fREVGQVVMVF9OVU1fU1dBVENIRVM9MTEsdC5MRUdFTkRfTEFCRUxfQ0xBU1M9ImxlZ2VuZC1sYWJlbCIsdH0oTkJlLkNvbXBvbmVudCk7Rm90LkludGVycG9sYXRlZENvbG9yTGVnZW5kPURCZX0pO3ZhciBWb3Q9SChoND0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaDQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCb3Q9KGRlKCksVXQocGUpKSxqRj1fbCgpLE9CZT1rYygpLEhvdD1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3I9PT12b2lkIDAmJihyPSIiKSxuPT09dm9pZCAwJiYobj0wKTt2YXIgaT1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3MoImxhYmVsIiksaS50ZXh0KHIpLGkuYW5nbGUobiksaS54QWxpZ25tZW50KCJjZW50ZXIiKS55QWxpZ25tZW50KCJjZW50ZXIiKSxpLl9wYWRkaW5nPTAsaX1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tZWFzdXJlci5tZWFzdXJlKHRoaXMuX3RleHQpLG89KHRoaXMuYW5nbGUoKT09PTA/aS53aWR0aDppLmhlaWdodCkrMip0aGlzLnBhZGRpbmcoKSxhPSh0aGlzLmFuZ2xlKCk9PT0wP2kuaGVpZ2h0Omkud2lkdGgpKzIqdGhpcy5wYWRkaW5nKCk7cmV0dXJue21pbldpZHRoOm8sbWluSGVpZ2h0OmF9fSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpO3ZhciByPW5ldyBqRi5TdmdDb250ZXh0KHRoaXMuX3RleHRDb250YWluZXIubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgakYuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cmFwcGVyPW5ldyBqRi5XcmFwcGVyLHRoaXMuX3dyaXRlcj1uZXcgakYuV3JpdGVyKHRoaXMuX21lYXN1cmVyLHIsdGhpcy5fd3JhcHBlciksdGhpcy50ZXh0KHRoaXMuX3RleHQpfSx0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RleHQ7aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IG5ldyBFcnJvcigiTGFiZWwudGV4dCgpIG9ubHkgdGFrZXMgc3RyaW5ncyBhcyBpbnB1dCIpO3JldHVybiB0aGlzLl90ZXh0PXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5hbmdsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hbmdsZTtpZihyJT0zNjAscj4xODA/ci09MzYwOnI8LTE4MCYmKHIrPTM2MCkscj09PS05MHx8cj09PTB8fHI9PT05MCl0aGlzLl9hbmdsZT1yO2Vsc2UgdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBhbmdsZSBmb3IgTGFiZWwiKTtyZXR1cm4gdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5wYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3BhZGRpbmc7aWYocj0rcixyPDApdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBwYWRkaW5nIHZhbHVlLiBDYW5ub3QgYmUgbGVzcyB0aGFuIDAuIik7cmV0dXJuIHRoaXMuX3BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3RleHRDb250YWluZXIuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCk7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxuPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLmhlaWdodCgpLXIuaGVpZ2h0KS8yLHRoaXMucGFkZGluZygpKSwwKSxpPU1hdGgubWF4KE1hdGgubWluKCh0aGlzLndpZHRoKCktci53aWR0aCkvMix0aGlzLnBhZGRpbmcoKSksMCk7dGhpcy5fdGV4dENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitpKyIsIituKyIpIik7dmFyIG89dGhpcy53aWR0aCgpLTIqaSxhPXRoaXMuaGVpZ2h0KCktMipuLHM9e3hBbGlnbjp0aGlzLnhBbGlnbm1lbnQoKSx5QWxpZ246dGhpcy55QWxpZ25tZW50KCksdGV4dFJvdGF0aW9uOnRoaXMuYW5nbGUoKX07cmV0dXJuIHRoaXMuX3dyaXRlci53cml0ZSh0aGlzLl90ZXh0LG8sYSxzKSx0aGlzfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0fShPQmUuQ29tcG9uZW50KTtoNC5MYWJlbD1Ib3Q7dmFyIHpCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5USVRMRV9MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5USVRMRV9MQUJFTF9DTEFTUz0idGl0bGUtbGFiZWwiLHR9KEhvdCk7aDQuVGl0bGVMYWJlbD16QmU7dmFyIEZCZT1mdW5jdGlvbihlKXtCb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzLHIsbil8fHRoaXM7cmV0dXJuIGkuYWRkQ2xhc3ModC5BWElTX0xBQkVMX0NMQVNTKSxpfXJldHVybiB0LkFYSVNfTEFCRUxfQ0xBU1M9ImF4aXMtbGFiZWwiLHR9KEhvdCk7aDQuQXhpc0xhYmVsPUZCZX0pO3ZhciBYRj1IKGJkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJzPShFcigpLFV0KE1yKSk7ZnVuY3Rpb24gQkJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENpcmNsZSkuc2l6ZShNYXRoLlBJKk1hdGgucG93KGUvMiwyKSl9fWJkLmNpcmNsZT1CQmU7ZnVuY3Rpb24gSEJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFNxdWFyZSkuc2l6ZShNYXRoLnBvdyhlLDIpKX19YmQuc3F1YXJlPUhCZTtmdW5jdGlvbiBWQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sQ3Jvc3MpLnNpemUoNS85Kk1hdGgucG93KGUsMikpfX1iZC5jcm9zcz1WQmU7ZnVuY3Rpb24gVUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbERpYW1vbmQpLnNpemUoTWF0aC50YW4oTWF0aC5QSS82KSpNYXRoLnBvdyhlLDIpLzIpfX1iZC5kaWFtb25kPVVCZTtmdW5jdGlvbiBxQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sVHJpYW5nbGUpLnNpemUoTWF0aC5zcXJ0KDMpKk1hdGgucG93KGUvMiwyKSl9fWJkLnRyaWFuZ2xlPXFCZTt2YXIgR0JlPS44OTA4MTMwOTE1MjkyODUyO2Z1bmN0aW9uIFdCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTdGFyKS5zaXplKEdCZSpNYXRoLnBvdyhlLzIsMikpfX1iZC5zdGFyPVdCZTt2YXIgWUJlPSgxL01hdGguc3FydCgxMikvMisxKSozO2Z1bmN0aW9uIGpCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xXeWUpLnNpemUoWUJlKk1hdGgucG93KGUvMi40LDIpKX19YmQud3llPWpCZX0pO3ZhciBJJHQ9SChxb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFhCZT0oZGUoKSxVdChwZSkpLHp2PShFcigpLFV0KE1yKSksJEY9X2woKSwkQmU9JEEoKSxLQmU9QnUoKSxaQmU9WEYoKSxKZz1GZSgpLEpCZT1rYygpLFVvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0xLzApLHRoaXMuY29sdW1ucz10LHRoaXMuYm90dG9tUGFkZGluZz1yLHRoaXMubWF4V2lkdGg9bn1yZXR1cm4gZS5wcm90b3R5cGUuYWRkQ29sdW1uPWZ1bmN0aW9uKHQpe3ZhciByPXQud2lkdGgsbj10aGlzLmdldFdpZHRoQXZhaWxhYmxlKCk7dC53aWR0aD1NYXRoLm1pbihuLHIpLHRoaXMuY29sdW1ucy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMuY29sdW1uc1t0XSxuPTAsaT0wO2k8dDtpKyspbis9dGhpcy5jb2x1bW5zW2ldLndpZHRoO3JldHVybnt0b3BMZWZ0Ont4Om4seTowfSxib3R0b21SaWdodDp7eDpuK3Iud2lkdGgseTpyLmhlaWdodH19fSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gSmcuTWF0aC5tYXgodGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhlaWdodDtyZXR1cm4gcn0pLDApK3RoaXMuYm90dG9tUGFkZGluZ30sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5jb2x1bW5zLnJlZHVjZShmdW5jdGlvbih0LHIpe3ZhciBuPXIud2lkdGg7cmV0dXJuIHQrbn0sMCksdGhpcy5tYXhXaWR0aCl9LGUucHJvdG90eXBlLmdldFdpZHRoQXZhaWxhYmxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRXaWR0aCgpO3JldHVybiBNYXRoLm1heCh0aGlzLm1heFdpZHRoLXQsMCl9LGV9KCksUUJlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0xLzApLHI9PT12b2lkIDAmJihyPTEvMCksbj09PXZvaWQgMCYmKG49MCksaT09PXZvaWQgMCYmKGk9W10pLHRoaXMubWF4V2lkdGg9dCx0aGlzLm1heEhlaWdodD1yLHRoaXMucGFkZGluZz1uLHRoaXMucm93cz1pfXJldHVybiBlLnByb3RvdHlwZS5hZGRSb3c9ZnVuY3Rpb24odCl7dC5tYXhXaWR0aD10aGlzLm1heFdpZHRoLXRoaXMucGFkZGluZyoyLHRoaXMucm93cy5wdXNoKHQpfSxlLnByb3RvdHlwZS5nZXRDb2x1bW5Cb3VuZHM9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLmdldFJvd0JvdW5kcyh0KSxpPXRoaXMucm93c1t0XS5nZXRCb3VuZHMocik7cmV0dXJuIGkudG9wTGVmdC54Kz1uLnRvcExlZnQueCxpLmJvdHRvbVJpZ2h0LngrPW4udG9wTGVmdC54LGkudG9wTGVmdC55Kz1uLnRvcExlZnQueSxpLmJvdHRvbVJpZ2h0LnkrPW4udG9wTGVmdC55LGl9LGUucHJvdG90eXBlLmdldFJvd0JvdW5kcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9dGhpcy5wYWRkaW5nLG49dGhpcy5wYWRkaW5nLGk9MDtpPHQ7aSsrKW4rPXRoaXMucm93c1tpXS5nZXRIZWlnaHQoKTt2YXIgbz17dG9wTGVmdDp7eDpyLHk6bn0sYm90dG9tUmlnaHQ6e3g6cit0aGlzLnJvd3NbdF0uZ2V0V2lkdGgoKSx5Om4rdGhpcy5yb3dzW3RdLmdldEhlaWdodCgpfX07cmV0dXJuIG99LGUucHJvdG90eXBlLmdldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbih0aGlzLnJvd3MucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrci5nZXRIZWlnaHQoKX0sMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhIZWlnaHQpfSxlLnByb3RvdHlwZS5nZXRXaWR0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1pbihKZy5NYXRoLm1heCh0aGlzLnJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFdpZHRoKCl9KSwwKSt0aGlzLnBhZGRpbmcqMix0aGlzLm1heFdpZHRoKX0sZX0oKSx0SGU9ZnVuY3Rpb24oZSl7WEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3BhZGRpbmc9NSxuLl9yb3dCb3R0b21QYWRkaW5nPTMsbi5hZGRDbGFzcygibGVnZW5kIiksbi5tYXhFbnRyaWVzUGVyUm93KDEpLHI9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJMZWdlbmQgcmVxdWlyZXMgYSBjb2xvclNjYWxlIik7cmV0dXJuIG4uX2NvbG9yU2NhbGU9cixuLl9yZWRyYXdDYWxsYmFjaz1mdW5jdGlvbihpKXtyZXR1cm4gbi5yZWRyYXcoKX0sbi5fY29sb3JTY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUtCZS5pZGVudGl0eSgpLG4ubWF4TGluZXNQZXJFbnRyeSgxKSxuLnhBbGlnbm1lbnQoInJpZ2h0IikueUFsaWdubWVudCgidG9wIiksbi5jb21wYXJhdG9yKGZ1bmN0aW9uKGksbyl7dmFyIGE9bi5fY29sb3JTY2FsZS5kb21haW4oKS5zbGljZSgpLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gbi5fZm9ybWF0dGVyKHMpfSk7cmV0dXJuIGEuaW5kZXhPZihpKS1hLmluZGV4T2Yobyl9KSxuLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gWkJlLmNpcmNsZSgpfSxuLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gMX0sbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLG49ci5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKTtuLmFwcGVuZCgidGV4dCIpO3ZhciBpPW5ldyAkRi5TdmdDb250ZXh0KHIubm9kZSgpLG51bGwsJEJlLkFERF9USVRMRV9FTEVNRU5UUyk7dGhpcy5fbWVhc3VyZXI9bmV3ICRGLkNhY2hlTWVhc3VyZXIoaSksdGhpcy5fd3JhcHBlcj1uZXcgJEYuV3JhcHBlcigpLm1heExpbmVzKHRoaXMubWF4TGluZXNQZXJFbnRyeSgpKSx0aGlzLl93cml0ZXI9bmV3ICRGLldyaXRlcih0aGlzLl9tZWFzdXJlcixpLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5mb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZm9ybWF0dGVyOih0aGlzLl9mb3JtYXR0ZXI9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhFbnRyaWVzUGVyUm93PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heEVudHJpZXNQZXJSb3c6KHRoaXMuX21heEVudHJpZXNQZXJSb3c9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhMaW5lc1BlckVudHJ5PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heExpbmVzUGVyRW50cnk6KHRoaXMuX21heExpbmVzUGVyRW50cnk9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhXaWR0aD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhXaWR0aDoodGhpcy5fbWF4V2lkdGg9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb21wYXJhdG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2NvbXBhcmF0b3I6KHRoaXMuX2NvbXBhcmF0b3I9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5jb2xvclNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiByIT1udWxsPyh0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayksdGhpcy5fY29sb3JTY2FsZT1yLHRoaXMuX2NvbG9yU2NhbGUub25VcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMucmVkcmF3KCksdGhpcyk6dGhpcy5fY29sb3JTY2FsZX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9jb2xvclNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZWRyYXdDYWxsYmFjayl9LHQucHJvdG90eXBlLl9idWlsZExlZ2VuZFRhYmxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoKS5oZWlnaHQsYT1uZXcgUUJlKHIsbix0aGlzLl9wYWRkaW5nKSxzPXRoaXMuX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkuX2NvbXBhcmF0b3IoaS5fZm9ybWF0dGVyKGMpLGkuX2Zvcm1hdHRlcih1KSl9KSxsPW5ldyBVb3Q7cmV0dXJuIGEuYWRkUm93KGwpLGwuYm90dG9tUGFkZGluZz10aGlzLl9yb3dCb3R0b21QYWRkaW5nLHMuZm9yRWFjaChmdW5jdGlvbihjLHUpe2wuY29sdW1ucy5sZW5ndGgvMj09PWkubWF4RW50cmllc1BlclJvdygpJiYobD1uZXcgVW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgaD1sLmdldFdpZHRoQXZhaWxhYmxlKCksZj1pLl9mb3JtYXR0ZXIoYykscD1pLl9tZWFzdXJlci5tZWFzdXJlKGYpLndpZHRoLGQ9aC1vLXA8MDtkJiZsLmNvbHVtbnMubGVuZ3RoPjEmJihsPW5ldyBVb3QsbC5ib3R0b21QYWRkaW5nPWkuX3Jvd0JvdHRvbVBhZGRpbmcsYS5hZGRSb3cobCkpO3ZhciBnPXt3aWR0aDpvLGhlaWdodDpvLGRhdGE6e25hbWU6Yyx0eXBlOiJzeW1ib2wifX07bC5hZGRDb2x1bW4oZyksaD1sLmdldFdpZHRoQXZhaWxhYmxlKCk7dmFyIF89TWF0aC5taW4oaCxwKTtpLl93cmFwcGVyLm1heExpbmVzKGkubWF4TGluZXNQZXJFbnRyeSgpKTt2YXIgeT1pLl93cmFwcGVyLndyYXAoZixpLl9tZWFzdXJlcixfKS5ub0xpbmVzLHg9eSpvLGI9e3dpZHRoOl8saGVpZ2h0OngsZGF0YTp7bmFtZTpjLHR5cGU6InRleHQifX07bC5hZGRDb2x1bW4oYil9KSxhfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUoSmcuTWF0aC5taW4oW3RoaXMubWF4V2lkdGgoKSxyXSxyKSxuKTtyZXR1cm57bWluSGVpZ2h0OmkuZ2V0SGVpZ2h0KCksbWluV2lkdGg6aS5nZXRXaWR0aCgpfX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKCF0aGlzLl9pc1NldHVwKXJldHVybltdO3ZhciBpPXRoaXMuX2J1aWxkTGVnZW5kVGFibGUodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkpO3JldHVybiBpLnJvd3MucmVkdWNlKGZ1bmN0aW9uKG8sYSxzKXtpZihvLmxlbmd0aCE9PTApcmV0dXJuIG87dmFyIGw9aS5nZXRSb3dCb3VuZHMocyksYz1KZy5NYXRoLndpdGhpbihyLGwpO3JldHVybiBjP2EuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odSxoLGYpe3ZhciBwPWkuZ2V0Q29sdW1uQm91bmRzKHMsZiksZD1KZy5NYXRoLndpdGhpbihyLHApO2lmKGQpe3ZhciBnPW4uY29udGVudCgpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5ub2RlcygpW3NdLF89enYuc2VsZWN0KGcpLnNlbGVjdEFsbCgiLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLm5vZGVzKClbTWF0aC5mbG9vcihmLzIpXSx5PXp2LnNlbGVjdChfKS5zZWxlY3QoIi4iK3QuTEVHRU5EX1NZTUJPTF9DTEFTUykseD1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHp2LnNlbGVjdChnKSksYj1KZy5ET00uZ2V0VHJhbnNsYXRlVmFsdWVzKHkpO3JldHVyblt7Ym91bmRzOkpnLkRPTS5lbGVtZW50QkJveCh6di5zZWxlY3QoZykpLGRhdHVtOmguZGF0YS5uYW1lLHBvc2l0aW9uOnt4OnhbMF0rYlswXSx5OnhbMV0rYlsxXX0sc2VsZWN0aW9uOnp2LnNlbGVjdChfKSxjb21wb25lbnQ6bn1dfXJldHVybiB1fSxvKTpvfSxbXSl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgcj10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTt2YXIgbj10aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9ST1dfQ0xBU1MpLmRhdGEoci5yb3dzKSxpPW4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX1JPV19DTEFTUywhMCkubWVyZ2Uobik7bi5leGl0KCkucmVtb3ZlKCksaS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGEscyl7dmFyIGw9ci5nZXRSb3dCb3VuZHMocyk7cmV0dXJuInRyYW5zbGF0ZSgiK2wudG9wTGVmdC54KyIsICIrbC50b3BMZWZ0LnkrIikifSk7dmFyIG89dGhpcztyZXR1cm4gaS5lYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuY29sdW1ucy5sZW5ndGg7Yys9MilsLnB1c2goW2EuY29sdW1uc1tjXSxhLmNvbHVtbnNbYysxXV0pO3ZhciB1PXp2LnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIit0LkxFR0VORF9FTlRSWV9DTEFTUykuZGF0YShsKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuTEVHRU5EX0VOVFJZX0NMQVNTLCEwKS5tZXJnZSh1KTtoLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXTtyZXR1cm4gby5zeW1ib2woKShkLmRhdGEubmFtZSxzKShkLmhlaWdodCouNikobnVsbCl9KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlswXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIisoXy50b3BMZWZ0LngrZC53aWR0aC8yKSsiLCAiK2QuaGVpZ2h0LzIrIikifSkuYXR0cigiZmlsbCIsZnVuY3Rpb24oZil7cmV0dXJuIG8uX2NvbG9yU2NhbGUuc2NhbGUoZlswXS5kYXRhLm5hbWUpfSkuYXR0cigib3BhY2l0eSIsZnVuY3Rpb24oZixwKXtyZXR1cm4gby5zeW1ib2xPcGFjaXR5KCkoZlswXS5kYXRhLm5hbWUscyl9KS5jbGFzc2VkKHQuTEVHRU5EX1NZTUJPTF9DTEFTUywhMCksaC5hcHBlbmQoImciKS5jbGFzc2VkKCJ0ZXh0LWNvbnRhaW5lciIsITApLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oZixwKXt2YXIgZD1mWzFdLGc9ci5yb3dzW3NdLmNvbHVtbnMuaW5kZXhPZihkKSxfPXIuZ2V0Q29sdW1uQm91bmRzKHMsZyk7cmV0dXJuInRyYW5zbGF0ZSgiK18udG9wTGVmdC54KyIsIDApIn0pLmVhY2goZnVuY3Rpb24oZixwLGQpe3ZhciBnPXp2LnNlbGVjdCh0aGlzKSxfPWZbMV0seT17eEFsaWduOiJsZWZ0Iix5QWxpZ246InRvcCIsdGV4dFJvdGF0aW9uOjB9O28uX3dyaXRlci53cml0ZShvLl9mb3JtYXR0ZXIoXy5kYXRhLm5hbWUpLF8ud2lkdGgsby5oZWlnaHQoKSx5LGcubm9kZSgpKX0pLHUuZXhpdCgpLnJlbW92ZSgpfSksdGhpc30sdC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3NvcjoodGhpcy5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3ltYm9sT3BhY2l0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I6KHR5cGVvZiByPT0ibnVtYmVyIj90aGlzLl9zeW1ib2xPcGFjaXR5QWNjZXNzb3I9ZnVuY3Rpb24oKXtyZXR1cm4gcn06dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiEwfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9tZWFzdXJlci5yZXNldCgpfSx0LkxFR0VORF9ST1dfQ0xBU1M9ImxlZ2VuZC1yb3ciLHQuTEVHRU5EX0VOVFJZX0NMQVNTPSJsZWdlbmQtZW50cnkiLHQuTEVHRU5EX1NZTUJPTF9DTEFTUz0ibGVnZW5kLXN5bWJvbCIsdH0oSkJlLkNvbXBvbmVudCk7cW90LkxlZ2VuZD10SGV9KTt2YXIgR290PUgoS0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEtGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZUhlOyhmdW5jdGlvbihlKXtlLk1BSU49Im1haW4iLGUuUkVTRVQ9InJlc2V0In0pKGVIZT1LRi5BbmltYXRvcnx8KEtGLkFuaW1hdG9yPXt9KSl9KTt2YXIgayR0PUgoKFlxbixMJHQpPT57InVzZSBzdHJpY3QiO0wkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdD09Im9iamVjdCImJkFycmF5LmlzQXJyYXkodCk9PT0hMX19KTt2YXIgRCR0PUgoKGpxbixOJHQpPT57InVzZSBzdHJpY3QiO3ZhciBySGU9ayR0KCk7ZnVuY3Rpb24gUiR0KGUpe3JldHVybiBySGUoZSk9PT0hMCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgT2JqZWN0XSJ9TiR0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIHIsbjtyZXR1cm4hKFIkdCh0KT09PSExfHwocj10LmNvbnN0cnVjdG9yLHR5cGVvZiByIT0iZnVuY3Rpb24iKXx8KG49ci5wcm90b3R5cGUsUiR0KG4pPT09ITEpfHxuLmhhc093blByb3BlcnR5KCJpc1Byb3RvdHlwZU9mIik9PT0hMSl9fSk7dmFyIFlvdD1IKFdvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkhlPUZlKCksTyR0PTAsaUhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3Q9PT12b2lkIDAmJih0PVtdKSxyPT09dm9pZCAwJiYocj17fSksdGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fZGF0YT10LHRoaXMuX21ldGFkYXRhPXIsdGhpcy5fY2FsbGJhY2tzPW5ldyBuSGUuQ2FsbGJhY2tTZXR9cmV0dXJuIGUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuYWRkKHQpLHRoaXN9LGUucHJvdG90eXBlLm9mZlVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5kYXRhPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2RhdGE6KHRoaXMuX2RhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS5tZXRhZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9tZXRhZGF0YToodGhpcy5fbWV0YWRhdGE9dCx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSxlLnByb3RvdHlwZS51cGRhdGVJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91cGRhdGVJZH0sZS5wcm90b3R5cGUuX2Rpc3BhdGNoVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWQ9TyR0KyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGV9KCk7V290LkRhdGFzZXQ9aUhlfSk7dmFyICRvdD1IKFJjPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGpvdD0oZGUoKSxVdChwZSkpLG9IZT1EJHQoKSxhSGU9WW90KCksc0hlPUx2KCk7ZnVuY3Rpb24gWG90KGUpe3JldHVybiBlIGluc3RhbmNlb2YgcDQ/ZTplIGluc3RhbmNlb2YgRGF0ZT9mNChlLnZhbHVlT2YoKSk6ZSBpbnN0YW5jZW9mIHNIZS5TY2FsZT96JHQoZSk6ZSBpbnN0YW5jZW9mIGFIZS5EYXRhc2V0P0YkdChlKTpvSGUoZSk/WkYoZSk6QXJyYXkuaXNBcnJheShlKT9CJHQoZSk6ZjQoZSl9UmMuc2lnbj1Yb3Q7ZnVuY3Rpb24geiR0KGUpe3ZhciB0PXtkb21haW46ZS5kb21haW4oKSxyYW5nZTplLnJhbmdlKCksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpLHJlZjpmNChlKX07cmV0dXJuIFpGKHQpfVJjLnNpZ25TY2FsZT16JHQ7ZnVuY3Rpb24gRiR0KGUpe3ZhciB0PXtyZWY6ZjQoZSksdXBkYXRlSWQ6ZS51cGRhdGVJZCgpfTtyZXR1cm4gWkYodCl9UmMuc2lnbkRhdGFzZXQ9RiR0O2Z1bmN0aW9uIGY0KGUpe3JldHVybiBuZXcgViR0KGUpfVJjLnNpZ25SZWY9ZjQ7ZnVuY3Rpb24gQiR0KGUpe3JldHVybiBuZXcgSCR0KGUubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBYb3QodCl9KSl9UmMuc2lnbkFycmF5PUIkdDtmdW5jdGlvbiBaRihlKXt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSllLmhhc093blByb3BlcnR5KHIpJiYodFtyXT1Yb3QoZVtyXSkpO3JldHVybiBuZXcgVSR0KHQpfVJjLnNpZ25PYmo9WkY7dmFyIHA0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuaXNEaWZmZXJlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP3RoaXMuaXNTaWduYXR1cmVEaWZmZXJlbnQodCk6ITB9LGV9KCk7UmMuU2lnbmF0dXJlPXA0O3ZhciBIJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLmFycmF5PXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7aWYoci5hcnJheS5sZW5ndGghPT10aGlzLmFycmF5Lmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG49MDtuPHRoaXMuYXJyYXkubGVuZ3RoO24rKylpZih0aGlzLmFycmF5W25dLmlzRGlmZmVyZW50KHIuYXJyYXlbbl0pKXJldHVybiEwO3JldHVybiExfSx0fShwNCk7UmMuQXJyYXlTaWduYXR1cmU9SCR0O3ZhciBWJHQ9ZnVuY3Rpb24oZSl7am90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBuLnJlZj1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnJlZiE9PXIucmVmfSx0fShwNCk7UmMuUmVmZXJlbmNlU2lnbmF0dXJlPVYkdDt2YXIgVSR0PWZ1bmN0aW9uKGUpe2pvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5vYmo9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXt2YXIgbj1PYmplY3Qua2V5cyh0aGlzLm9iaiksaT1PYmplY3Qua2V5cyhyLm9iaik7aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIG89MCxhPW47bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYoIXIub2JqLmhhc093blByb3BlcnR5KHMpfHx0aGlzLm9ialtzXS5pc0RpZmZlcmVudChyLm9ialtzXSkpcmV0dXJuITB9cmV0dXJuITF9LHR9KHA0KTtSYy5PYmplY3RTaWduYXR1cmU9VSR0fSk7dmFyIHEkdD1IKEtvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbEhlPSRvdCgpO2Z1bmN0aW9uIGNIZShlKXt2YXIgdD12b2lkIDAscixuPSExLGk9ITEsbz1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxzPTA7czxhcmd1bWVudHMubGVuZ3RoO3MrKylhW3NdPWFyZ3VtZW50c1tzXTtpZihuKXJldHVybiByO3ZhciBsPWxIZS5zaWduQXJyYXkoYSk7cmV0dXJuIHQ9PT12b2lkIDB8fHQuaXNEaWZmZXJlbnQobCk/KGkmJmNvbnNvbGUud2FybigiY2FjaGUgbWlzcyEgY29tcHV0aW5nIiksdD1sLHI9ZS5hcHBseSh0aGlzLGEpKTppJiZjb25zb2xlLndhcm4oImNhY2hlIGhpdCEiKSxyfTtyZXR1cm4gby5kb0xvY2tlZD1mdW5jdGlvbihhKXtpZihuKXRocm93IG5ldyBFcnJvcigiTG9ja2luZyBhbiBhbHJlYWR5IGxvY2tlZCBtZW1vaXplIGZ1bmN0aW9uISIpO249ITA7dmFyIHM9YS5hcHBseSh0aGlzKTtyZXR1cm4gbj0hMSxzfSxvLmxvZ1BlcmZvcm1hbmNlPWZ1bmN0aW9uKGEpe3JldHVybiBhPT09dm9pZCAwJiYoYT0hMCksaT1hLHRoaXN9LG99S290Lm1lbW9pemU9Y0hlfSk7dmFyIFkkdD1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHVIZT1PZSgpLFpvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZXhpc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gZGVsZXRlIHRoaXMubWFwW3RdLGRlbGV0ZSB0aGlzLmV4aXN0c1t0XSwhMH0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcFt0XX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5leGlzdHNbdF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcFt0XT1yLHRoaXMuZXhpc3RzW3RdPSEwLHRoaXN9LGV9KCksRyR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMubWFwPW5ldyBab3R9cmV0dXJuIGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuZ2V0KHRbMF0pLmdldCh0WzFdKX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5oYXModFsxXSl9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSl8fHRoaXMubWFwLnNldCh0WzBdLG5ldyBab3QpLHRoaXMubWFwLmdldCh0WzBdKS5zZXQodFsxXSxyKSx0aGlzfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0WzBdKSYmdGhpcy5tYXAuZ2V0KHRbMF0pLmRlbGV0ZSh0WzFdKSwhMH0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLm1hcD1uZXcgWm90fSxlLnJlc29sdmVyPWZ1bmN0aW9uKHQscixuKXtyZXR1cm5bbi51cGRhdGVJZCgpLHJdfSxlfSgpO2Z1bmN0aW9uIFckdChlKXt2YXIgdD11SGUubWVtb2l6ZShlLEckdC5yZXNvbHZlcik7cmV0dXJuIHQuY2FjaGU9bmV3IEckdCx0fUpGLm1lbW9pemVQcm9qZWN0b3I9VyR0O2Z1bmN0aW9uIGhIZShlKXtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPVckdChlW3RdKX0pLGV9SkYubWVtb2l6ZVByb2plY3RvcnM9aEhlfSk7dmFyIGokdD1IKEpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZkhlPUNTKCk7ZnVuY3Rpb24gcEhlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO3ZhciByPWUuc2xpY2UoMCwtMSksbj1lW2UubGVuZ3RoLTFdLGk9ZkhlLm1lbW9pemUobiksbz1mdW5jdGlvbigpe3ZhciBhPXRoaXMscz1yLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC5hcHBseShhKX0pO3JldHVybiBpLmFwcGx5KHZvaWQgMCxzKX07cmV0dXJuIG99Sm90Lm1lbVRodW5rPXBIZX0pO3ZhciBDUz1IKEFTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFvdD0oZGUoKSxVdChwZSkpO1FvdC5fX2V4cG9ydFN0YXIocSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoWSR0KCksQVMpO1FvdC5fX2V4cG9ydFN0YXIoaiR0KCksQVMpO3ZhciBkSGU9JG90KCk7QVMuc2lnbj1kSGUuc2lnbn0pO3ZhciBGdj1IKE5jPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFgkdD0oRXIoKSxVdChNcikpLG1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fZHJhd1N0ZXA9cn1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0RHJhd1N0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhd1N0ZXB9LGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj1yW3IubGVuZ3RoLTFdLmF0dHJUb0FwcGxpZWRQcm9qZWN0b3I7dGhpcy5fY29udGV4dC5zYXZlKCksdGhpcy5fZHJhd1N0ZXAodGhpcy5fY29udGV4dCx0LG4pLHRoaXMuX2NvbnRleHQucmVzdG9yZSgpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe30sZX0oKTtOYy5DYW52YXNEcmF3ZXI9bUhlO05jLkNvbnRleHRTdHlsZUF0dHJzPVsiZmlsbC1vcGFjaXR5IiwiZmlsbCIsIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBnSGUoZSx0LHIsbil7dmFyIGk9TmMuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KHQpO3JldHVybiAkJHQoZSxpLHIsbil9TmMucmVzb2x2ZUF0dHJpYnV0ZXNTdWJzZXRXaXRoU3R5bGVzPWdIZTtmdW5jdGlvbiAkJHQoZSx0LHIsbil7Zm9yKHZhciBpPXt9LG89MCxhPXQ7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107ZS5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109ZVtzXShyLG4pKX1yZXR1cm4gaX1OYy5yZXNvbHZlQXR0cmlidXRlcz0kJHQ7ZnVuY3Rpb24gX0hlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbInN0cm9rZS1vcGFjaXR5Il0hPW51bGw/cGFyc2VGbG9hdChlWyJzdHJva2Utb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24geUhlKGUpe3ZhciB0PWUub3BhY2l0eSE9bnVsbD9wYXJzZUZsb2F0KGUub3BhY2l0eSk6MSxyPWVbImZpbGwtb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsiZmlsbC1vcGFjaXR5Il0pOjE7cmV0dXJuIHIqdH1mdW5jdGlvbiBLJHQoZSl7cmV0dXJuIGVbInN0cm9rZS13aWR0aCJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLXdpZHRoIl0pOjF9TmMuZ2V0U3Ryb2tlV2lkdGg9SyR0O2Z1bmN0aW9uIFokdChlKXt2YXIgdD1lWyJzdHJva2UtZGFzaGFycmF5Il07aWYodCE9bnVsbCl0cnl7cmV0dXJuIHQuc3BsaXQoL1sgLF0rLykubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBwYXJzZUludChyLDEwKX0pfWNhdGNoKHIpe3JldHVybiBjb25zb2xlLmVycm9yKCJnZXRTdHJva2VEYXNoQXJyYXkgZmFpbGVkIHdpdGg6ICIrciksW119cmV0dXJuW119TmMuZ2V0U3Ryb2tlRGFzaEFycmF5PVokdDtmdW5jdGlvbiB2SGUoZSx0LHIsbil7ZS5zYXZlKCksZS5iZWdpblBhdGgoKSx0LmNvbnRleHQoZSksdChyKSxlLmxpbmVKb2luPSJyb3VuZCIsdGF0KGUsbiksZS5yZXN0b3JlKCl9TmMucmVuZGVyQXJlYT12SGU7ZnVuY3Rpb24geEhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLHRhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckxpbmU9eEhlO2Z1bmN0aW9uIHRhdChlLHQpe2lmKHQuc3Ryb2tlKXtlLmxpbmVXaWR0aD1LJHQodCk7dmFyIHI9WCR0LmNvbG9yKHQuc3Ryb2tlKSxuPVokdCh0KTtlLnNldExpbmVEYXNoKG4pLHIub3BhY2l0eSo9X0hlKHQpLGUuc3Ryb2tlU3R5bGU9ci50b1N0cmluZygpLGUuc3Ryb2tlKCl9aWYodC5maWxsKXt2YXIgaT1YJHQuY29sb3IodC5maWxsKTtpLm9wYWNpdHkqPXlIZSh0KSxlLmZpbGxTdHlsZT1pLnRvU3RyaW5nKCksZS5maWxsKCl9fU5jLnJlbmRlclBhdGhXaXRoU3R5bGU9dGF0fSk7dmFyIFV1PUgoZWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBiSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeT10LHRoaXMuX2NhbnZhc0RyYXdlckZhY3Rvcnk9cn1yZXR1cm4gZS5wcm90b3R5cGUudXNlU1ZHPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCk7dmFyIHI9dGhpcy5fc3ZnRHJhd2VyRmFjdG9yeSgpO3IuYXR0YWNoVG8odCksdGhpcy5fY3VycmVudERyYXdlcj1yfSxlLnByb3RvdHlwZS51c2VDYW52YXM9ZnVuY3Rpb24odCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKSx0aGlzLl9jdXJyZW50RHJhd2VyPXRoaXMuX2NhbnZhc0RyYXdlckZhY3RvcnkodC5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKSl9LGUucHJvdG90eXBlLmdldERyYXdlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dGhpcy5fY3VycmVudERyYXdlci5kcmF3KHQscil9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVzKCl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleCh0KX0sZX0oKTtlYXQuUHJveHlEcmF3ZXI9YkhlfSk7dmFyIERmPUgocmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB3SGU9KEVyKCksVXQoTXIpKSxKJHQ9RmUoKSxTSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fcm9vdD13SGUuc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLHRoaXMuX2NsYXNzTmFtZT1yLHRoaXMuX3N2Z0VsZW1lbnROYW1lPXR9cmV0dXJuIGUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO3RoaXMuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cyh0KTtmb3IodmFyIGk9MCxvPXIubGVuZ3RoLGE9ZnVuY3Rpb24obCl7dmFyIGM9cltsXTtKJHQuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd1N0ZXAoYyl9LGkpLGkrPWMuYW5pbWF0b3IudG90YWxUaW1lKHQubGVuZ3RoKX0scz0wO3M8bztzKyspYShzKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9PW51bGwmJih0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXM9dGhpcy5fc2VsZWN0aW9uLm5vZGVzKCkpLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlc30sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXA9PW51bGw/bnVsbDp0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcC5nZXQodCl9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3Jvb3QucmVtb3ZlKCl9LGUucHJvdG90eXBlLmF0dGFjaFRvPWZ1bmN0aW9uKHQpe3Qubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qubm9kZSgpKX0sZS5wcm90b3R5cGUuZ2V0Um9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb290fSxlLnByb3RvdHlwZS5zZWxlY3Rvcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdmdFbGVtZW50TmFtZX0sZS5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24odCl7fSxlLnByb3RvdHlwZS5fY3JlYXRlQW5kRGVzdHJveURPTUVsZW1lbnRzPWZ1bmN0aW9uKHQpe3ZhciByPXQubWFwKGZ1bmN0aW9uKGEscyl7cmV0dXJuIGEhPW51bGw/e2Q6YSxpOnN9Om51bGx9KSxuPXIuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSksaT10aGlzLl9yb290LnNlbGVjdEFsbCh0aGlzLnNlbGVjdG9yKCkpLmRhdGEobik7dGhpcy5fc2VsZWN0aW9uPWkuZW50ZXIoKS5hcHBlbmQodGhpcy5fc3ZnRWxlbWVudE5hbWUpLm1lcmdlKGkpLGkuZXhpdCgpLnJlbW92ZSgpO3ZhciBvPW5ldyBKJHQuTWFwO3RoaXMuX3NlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGEpe28uc2V0KGEuaSx0aGlzKX0pLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPW8sdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPW51bGwsdGhpcy5fc2VsZWN0aW9uLmRhdGEodGhpcy5fc2VsZWN0aW9uLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSl7dmFyIHM9YS5kO3JldHVybiBzfSkpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKSx0aGlzLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzKHRoaXMuX3NlbGVjdGlvbil9LGUucHJvdG90eXBlLl9kcmF3U3RlcD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49WyJmaWxsIiwic3Ryb2tlIl07bi5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuYXR0clRvQXBwbGllZFByb2plY3RvcltpXSE9bnVsbCYmci5fc2VsZWN0aW9uLmF0dHIoaSx0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0pfSksdC5hbmltYXRvci5hbmltYXRlKHRoaXMuX3NlbGVjdGlvbix0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3IpLHRoaXMuX2NsYXNzTmFtZSE9bnVsbCYmdGhpcy5fc2VsZWN0aW9uLmNsYXNzZWQodGhpcy5fY2xhc3NOYW1lLCEwKX0sZX0oKTtyYXQuU1ZHRHJhd2VyPVNIZX0pO3ZhciBpYXQ9SChuYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5hdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFEkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3RoaXMuc2NhbGU9MCx0aGlzLnRyYW5zbGF0ZT0wLHRoaXMuY2FjaGVkRG9tYWluPVtudWxsLG51bGxdLHRoaXMubGFzdFNlZW5Eb21haW49W251bGwsbnVsbF0sdGhpcy51cGRhdGVEb21haW49ZnVuY3Rpb24ocil7dC5sYXN0U2VlbkRvbWFpbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCk7dmFyIG49ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLGk9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQubGFzdFNlZW5Eb21haW5bMV0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKTt0LnNjYWxlPW4vaXx8MSx0LnRyYW5zbGF0ZT1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5jYWNoZWREb21haW5bMF0pLXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzBdKSp0LnNjYWxlfHwwfX1yZXR1cm4gZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj10aGlzLmxhc3RTZWVuRG9tYWlufSxlLnByb3RvdHlwZS5zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5jYWNoZWREb21haW49dC5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpfSxlfSgpLE1IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj10aGlzO3RoaXMucmVuZGVyQ2FsbGJhY2s9dCx0aGlzLmFwcGx5VHJhbnNmb3JtQ2FsbGJhY2s9cix0aGlzLmRvbWFpblRyYW5zZm9ybVg9bmV3IFEkdCx0aGlzLmRvbWFpblRyYW5zZm9ybVk9bmV3IFEkdCx0aGlzLnJlbmRlckRlZmVycmVkPWZ1bmN0aW9uKCl7bi5hcHBseVRyYW5zZm9ybSgpLGNsZWFyVGltZW91dChuLnRpbWVvdXRUb2tlbiksbi50aW1lb3V0VG9rZW49c2V0VGltZW91dChmdW5jdGlvbigpe24ucmVuZGVyQ2FsbGJhY2soKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVkpfX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0RG9tYWlucz1mdW5jdGlvbih0LHIpe3QmJnRoaXMuZG9tYWluVHJhbnNmb3JtWC5zZXREb21haW4odCksciYmdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNldERvbWFpbihyKSx0aGlzLnJlbmRlckRlZmVycmVkKCl9LGUucHJvdG90eXBlLnVwZGF0ZURvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVgudXBkYXRlRG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS51cGRhdGVEb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS5yZXNldFRyYW5zZm9ybXM9ZnVuY3Rpb24oKXt0aGlzLmRvbWFpblRyYW5zZm9ybVgucmVzZXQoKSx0aGlzLmRvbWFpblRyYW5zZm9ybVkucmVzZXQoKSx0aGlzLmFwcGx5VHJhbnNmb3JtKCl9LGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtPWZ1bmN0aW9uKCl7dGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrKHRoaXMuZG9tYWluVHJhbnNmb3JtWC50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnRyYW5zbGF0ZSx0aGlzLmRvbWFpblRyYW5zZm9ybVguc2NhbGUsdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnNjYWxlKX0sZS5ERUZFUlJFRF9SRU5ERVJJTkdfREVMQVk9MjAwLGV9KCk7bmF0LkRlZmVycmVkUmVuZGVyZXI9TUhlfSk7dmFyIHJzPUgoUUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRUhlPShkZSgpLFV0KHBlKSksd2Q9KEVyKCksVXQoTXIpKSxkND1MZigpLFNkPUZlKCksdEt0PUdvdCgpLG9hdD1DUygpLFRIZT1rYygpLENIZT1GdigpLEFIZT1VdSgpLFBIZT1EZigpLElIZT1ZZygpLExIZT1JZigpLGtIZT1pYXQoKTtRRi5SZW5kZXJlcj1MSGUubWFrZUVudW0oWyJzdmciLCJjYW52YXMiXSk7dmFyIFJIZT1mdW5jdGlvbihlKXtFSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9kYXRhQ2hhbmdlZD0hMSxyLl9hdHRyRXh0ZW50cz17fSxyLl9hbmltYXRlPSExLHIuX2FuaW1hdG9ycz17fSxyLl9wcm9wZXJ0eUV4dGVudHM9e30sci5fcmVzZXRFbnRpdHlTdG9yZT1mdW5jdGlvbigpe3IuX2NhY2hlZEVudGl0eVN0b3JlPXZvaWQgMH0sci5fb3ZlcmZsb3dIaWRkZW49ITAsci5hZGRDbGFzcygicGxvdCIpLHIuX2RhdGFzZXRUb0RyYXdlcj1uZXcgU2QuTWFwLHIuX2F0dHJCaW5kaW5ncz13ZC5tYXAoKSxyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2luY2x1ZGVkVmFsdWVzRm9yU2NhbGUoaSxvKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5yZW5kZXIoKX0sci5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gci5fb25EYXRhc2V0VXBkYXRlKCl9LHIuX3Byb3BlcnR5QmluZGluZ3M9d2QubWFwKCk7dmFyIG49bmV3IGQ0LkVhc2luZygpLm1heFRvdGFsRHVyYXRpb24odC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTik7cmV0dXJuIHIuYW5pbWF0b3IodEt0LkFuaW1hdG9yLk1BSU4sbiksci5hbmltYXRvcih0S3QuQW5pbWF0b3IuUkVTRVQsbmV3IGQ0Lk51bGwpLHIuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZT1TZC5XaW5kb3cuZGVib3VuY2Uoa0hlLkRlZmVycmVkUmVuZGVyZXIuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZLHIuX3Jlc2V0RW50aXR5U3RvcmUpLHJ9cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZT1mdW5jdGlvbihyLG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBpK28uYW5pbWF0b3IudG90YWxUaW1lKHIubGVuZ3RoKX0sMCl9LHQuYXBwbHlEcmF3U3RlcHM9ZnVuY3Rpb24ocixuKXt2YXIgaT1yLm1hcChmdW5jdGlvbihvKXt2YXIgYT1vLmF0dHJUb1Byb2plY3RvcixzPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3NbbF09ZnVuY3Rpb24oYyx1KXtyZXR1cm4gYVtsXShjLHUsbil9fSkse2F0dHJUb0FwcGxpZWRQcm9qZWN0b3I6cyxhbmltYXRvcjpvLmFuaW1hdG9yfX0pO3JldHVybiBpfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9SUhlLmNvZXJjZUV4dGVybmFsRDMociksZS5wcm90b3R5cGUuYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9kYXRhQ2hhbmdlZD0hMCx0aGlzLl9yZXNldEVudGl0eVN0b3JlKCksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5faXNTZXR1cHx8KGUucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2NhbnZhcyE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX3JlbmRlckFyZWE9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVuZGVyLWFyZWEiLCEwKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KG4pfSkpfSx0LnByb3RvdHlwZS5fYXBwZW5kQ2FudmFzTm9kZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZWxlbWVudCgpLnNlbGVjdCgiLnBsb3QtY2FudmFzLWNvbnRhaW5lciIpO3IuZW1wdHkoKSYmKHI9dGhpcy5lbGVtZW50KCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJwbG90LWNhbnZhcy1jb250YWluZXIiLCEwKSxyLm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jYW52YXMubm9kZSgpKSl9LHQucHJvdG90eXBlLnNldEJvdW5kcz1mdW5jdGlvbihyLG4saSxvKXtpZihlLnByb3RvdHlwZS5zZXRCb3VuZHMuY2FsbCh0aGlzLHIsbixpLG8pLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzLl9jYW52YXMhPW51bGwpe2lmKHRoaXMuX2J1ZmZlckNhbnZhcyYmIXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkKXt0aGlzLl9idWZmZXJDYW52YXMuYXR0cigid2lkdGgiLHRoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIpKSx0aGlzLl9idWZmZXJDYW52YXMuYXR0cigiaGVpZ2h0Iix0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IikpO3ZhciBhPXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihhKXt2YXIgcz10aGlzLl9jYW52YXMubm9kZSgpO3Mud2lkdGg+MCYmcy5oZWlnaHQ+MD9hLmNhbnZhcy53aWR0aD4wJiZhLmNhbnZhcy5oZWlnaHQ+MCYmYS5kcmF3SW1hZ2UocywwLDApOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgYnVmZmVyIGNhbnZhcyB3aXRoIHdpdGggMHgwIGNhbnZhcyIpfXRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSEwfXZhciBsPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIT1udWxsP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7dGhpcy5fY2FudmFzLmF0dHIoIndpZHRoIixyKmwpLHRoaXMuX2NhbnZhcy5hdHRyKCJoZWlnaHQiLG4qbCk7dmFyIGM9dGhpcy5fY2FudmFzLm5vZGUoKS5nZXRDb250ZXh0KCIyZCIpO2lmKGMmJihjLnNldFRyYW5zZm9ybShsLDAsMCxsLDAsMCksdGhpcy5fYnVmZmVyQ2FudmFzKSl7dmFyIHU9dGhpcy5fYnVmZmVyQ2FudmFzLm5vZGUoKTt1LndpZHRoPjAmJnUuaGVpZ2h0PjA/Yy5jYW52YXMud2lkdGg+MCYmYy5jYW52YXMuaGVpZ2h0PjAmJmMuZHJhd0ltYWdlKHUsMCwwLHIsbik6Y29uc29sZS53YXJuKCJGYWlsZWQgdG8gZmlsbCBjYW52YXMgd2l0aCAweDAgYnVmZmVyIGNhbnZhcyIpfX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4ub2ZmVXBkYXRlKHIuX3JlbmRlckNhbGxiYWNrKX0pLHRoaXMuZGF0YXNldHMoW10pfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7cmV0dXJuIHRoaXMucmVuZGVyZXIoKT09PSJzdmciP24udXNlU1ZHKHRoaXMuX3JlbmRlckFyZWEpOm4udXNlQ2FudmFzKHRoaXMuX2NhbnZhcyksbn0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IEFIZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgUEhlLlNWR0RyYXdlcigicGF0aCIsIiIpfSxmdW5jdGlvbihuKXtyZXR1cm4gbmV3IENIZS5DYW52YXNEcmF3ZXIobixmdW5jdGlvbigpe30pfSl9LHQucHJvdG90eXBlLl9nZXRBbmltYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpP3RoaXMuX2FuaW1hdG9yc1tyXXx8bmV3IGQ0Lk51bGw6bmV3IGQ0Lk51bGx9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMucmVuZGVyTG93UHJpb3JpdHkoKX0sdC5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihyLG4saSl7cmV0dXJuIG49PW51bGw/dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKToodGhpcy5fYmluZEF0dHIocixuLGkpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9iaW5kUHJvcGVydHk9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocikscz1hIT1udWxsP2Euc2NhbGU6bnVsbCxsPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQocix7YWNjZXNzb3I6bCxzY2FsZTppLHBvc3RTY2FsZTpvfSkscyE9bnVsbCYmdGhpcy5fdW5pbnN0YWxsU2NhbGVGb3JLZXkocyxyKSxpIT1udWxsJiZ0aGlzLl9pbnN0YWxsU2NhbGVGb3JLZXkoaSxyKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCl9LHQucHJvdG90eXBlLl9iaW5kQXR0cj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fYXR0ckJpbmRpbmdzLmdldChyKSxhPW8hPW51bGw/by5zY2FsZTpudWxsLHM9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpmdW5jdGlvbigpe3JldHVybiBufTt0aGlzLl9hdHRyQmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOnMsc2NhbGU6aX0pLGEhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KGEsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3J9LHQucHJvdG90eXBlLl9nZXRBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXtpZih0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3I9PW51bGwpe3ZhciByPXRoaXMuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCk7dC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlMmJihyPW9hdC5tZW1vaXplUHJvamVjdG9ycyhyKSksdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPXJ9cmV0dXJuIFNkLmFzc2lnbih7fSx0aGlzLl9jYWNoZWRBdHRyVG9Qcm9qZWN0b3IpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj17fTt0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihpLG8pe3Jbb109dC5fc2NhbGVkQWNjZXNzb3IoaSl9KTt2YXIgbj10aGlzLl9wcm9wZXJ0eVByb2plY3RvcnMoKTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihpKXtyW2ldPT1udWxsJiYocltpXT1uW2ldKX0pLHJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5faXNBbmNob3JlZCYmKHRoaXMuX3BhaW50KCksdGhpcy5fZGF0YUNoYW5nZWQ9ITEpLHRoaXN9LHQucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlckNhbGxiYWNrKCksdGhpc30sdC5wcm90b3R5cGUuYW5pbWF0ZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5pbWF0ZToodGhpcy5fYW5pbWF0ZT1yLHRoaXMpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLl9zY2FsZXM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtyZXR1cm4gdGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24obixpKXt2YXIgbz1uLnNjYWxlO28hPW51bGwmJnIuaW5kZXhPZihvKT09PS0xJiZyLnB1c2gobyl9KSxyfSx0LnByb3RvdHlwZS5fdXBkYXRlRXh0ZW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3NjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcihyLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0pfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JBdHRyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fYXR0ckV4dGVudHNbcl09PW51bGwpe3ZhciBpPW9hdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2F0dHJCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gZUt0KHMsYSxudWxsKX0pfSk7dGhpcy5fYXR0ckV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fYXR0ckV4dGVudHNbcl0oKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYodGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1vYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fZmlsdGVyRm9yUHJvcGVydHkocil9LGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gYT09bnVsbHx8YS5hY2Nlc3Nvcj09bnVsbD9udWxsOm8ubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBlS3QobCxhLHMpfSl9KTt0aGlzLl9wcm9wZXJ0eUV4dGVudHNbcl09aX1yZXR1cm4gdGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcztpZighdGhpcy5faXNBbmNob3JlZCYmIW4pcmV0dXJuW107dmFyIG89W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvckF0dHIocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmVhY2goZnVuY3Rpb24oYSxzKXtpZihhLnNjYWxlPT09cil7dmFyIGw9aS5nZXRFeHRlbnRzRm9yUHJvcGVydHkocyk7bCE9bnVsbCYmKG89by5jb25jYXQod2QubWVyZ2UobCkpKX19KSxvfSx0LnByb3RvdHlwZS5hbmltYXRvcj1mdW5jdGlvbihyLG4pe3JldHVybiBuPT09dm9pZCAwP3RoaXMuX2FuaW1hdG9yc1tyXToodGhpcy5fYW5pbWF0b3JzW3JdPW4sdGhpcyl9LHQucHJvdG90eXBlLnJlbmRlcmVyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fY2FudmFzPT1udWxsPyJzdmciOiJjYW52YXMiOih0aGlzLl9jYW52YXM9PW51bGwmJnI9PT0iY2FudmFzIj8odGhpcy5fY2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuY2xhc3NlZCgicGxvdC1jYW52YXMiLCEwKSx0aGlzLl9idWZmZXJDYW52YXM9d2Quc2VsZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKSx0aGlzLmVsZW1lbnQoKSE9bnVsbCYmdGhpcy5fYXBwZW5kQ2FudmFzTm9kZSgpLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlQ2FudmFzKG4uX2NhbnZhcyl9KSx0aGlzLnJlbmRlcigpKTp0aGlzLl9jYW52YXMhPW51bGwmJnI9PSJzdmciJiYodGhpcy5fY2FudmFzLnJlbW92ZSgpLHRoaXMuX2NhbnZhcz1udWxsLHRoaXMuX2J1ZmZlckNhbnZhcz1udWxsLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kudXNlU1ZHKG4uX3JlbmRlckFyZWEpfSksdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZERhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7dGhpcy5fcmVtb3ZlRGF0YXNldChyKTt2YXIgbj10aGlzLl9jcmVhdGVEcmF3ZXIocik7cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5zZXQocixuKSx0aGlzLl9pc1NldHVwJiZ0aGlzLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQociksci5vblVwZGF0ZSh0aGlzLl9vbkRhdGFzZXRVcGRhdGVDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlRGF0YXNldChyKSx0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmluZGV4T2Yocik9PT0tMT90aGlzOih0aGlzLl9yZW1vdmVEYXRhc2V0Tm9kZXMociksci5vZmZVcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXMuX2RhdGFzZXRUb0RyYXdlci5kZWxldGUociksdGhpcyl9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZGF0YXNldFRvRHJhd2VyLmdldChyKTtuLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHRoaXMuX2RhdGFzZXRUb0RyYXdlci5mb3JFYWNoKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkucHVzaChhKX0pLHI9PW51bGw/aTooaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9yZW1vdmVEYXRhc2V0KG8pfSksci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9hZGREYXRhc2V0KG8pfSksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBkNC5OdWxsfV19LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7fSx0LnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9W107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvLGEpe2Zvcih2YXIgcz1uLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KG8pLGw9MCxjPW8uZGF0YSgpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihwKXt2YXIgZD1jW3BdLGc9bi5fcGl4ZWxQb2ludChkLHAsbyk7aWYoU2QuTWF0aC5pc05hTihnLngpfHxTZC5NYXRoLmlzTmFOKGcueSkpcmV0dXJuImNvbnRpbnVlIjt2YXIgXz1uO2kucHVzaCh7ZGF0dW06ZCxnZXQgcG9zaXRpb24oKXtyZXR1cm4gXy5fcGl4ZWxQb2ludC5jYWxsKF8sZCxwLG8pfSxpbmRleDpwLGRhdGFzZXQ6byxkYXRhc2V0SW5kZXg6YSxjb21wb25lbnQ6bixkcmF3ZXI6cyx2YWxpZERhdHVtSW5kZXg6bH0pLGwrK30sZj0wO2Y8dTtmKyspaChmKX0pLGl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IFNkLk1hcDtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0KG4sbi5kYXRhKCkpfSkscn0sdC5wcm90b3R5cGUuX3BhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yO3ZhciBuPXRoaXMuX2dlbmVyYXRlRHJhd1N0ZXBzKCksaT10aGlzLl9nZXREYXRhVG9EcmF3KCksbz10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiByLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHUpfSk7aWYodGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpe3ZhciBhPXRoaXMuX2NhbnZhcy5ub2RlKCkscz1hLmdldENvbnRleHQoIjJkIik7cy5jbGVhclJlY3QoMCwwLGEuY2xpZW50V2lkdGgsYS5jbGllbnRIZWlnaHQpLHRoaXMuX2J1ZmZlckNhbnZhc1ZhbGlkPSExfXRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHUsaCl7dmFyIGY9dC5hcHBseURyYXdTdGVwcyhuLHUpO29baF0uZHJhdyhpLmdldCh1KSxmKX0pO3ZhciBsPXRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gdC5nZXRUb3RhbERyYXdUaW1lKGkuZ2V0KHUpLG4pfSksYz1TZC5NYXRoLm1heChsLDApO3RoaXMuX2FkZGl0aW9uYWxQYWludChjKX0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIHdkLnNlbGVjdEFsbCgpO3ZhciBpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKTtpZihhIT1udWxsKXt2YXIgcz1hLmdldFZpc3VhbFByaW1pdGl2ZXMoKTtpLnB1c2guYXBwbHkoaSxzKX19KSx3ZC5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKHIpLmVudGl0aWVzKCkubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuZmlsdGVyRW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLmZpbHRlcihyKS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShpKX0pfSx0LnByb3RvdHlwZS5fZ2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKGEpe3JldHVybiBuLl9lbnRpdHlCb3VuZHMoYSl9O2lmKHIhPT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtyZXR1cm4gby5hZGRBbGwodGhpcy5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcyhyKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLG99ZWxzZSBpZih0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT09PXZvaWQgMCl7dmFyIG89bmV3IFNkLkVudGl0eVN0b3JlO28uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXModGhpcy5kYXRhc2V0cygpKSxpLHRoaXMuX2xvY2FsT3JpZ2luQm91bmRzKCkpLHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlPW99cmV0dXJuIHRoaXMuX2NhY2hlZEVudGl0eVN0b3JlfSx0LnByb3RvdHlwZS5fbG9jYWxPcmlnaW5Cb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm57dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6dGhpcy5oZWlnaHQoKX19fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0LGE9dGhpcy5fcGl4ZWxQb2ludChuLGksbykscz1hLngsbD1hLnk7cmV0dXJue3g6cyx5Omwsd2lkdGg6MCxoZWlnaHQ6MH19LHQucHJvdG90eXBlLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHk9ZnVuY3Rpb24ocil7dmFyIG49e2JvdW5kczp0aGlzLl9lbnRpdHlCb3VuZHMociksY29tcG9uZW50OnIuY29tcG9uZW50LGRhdGFzZXQ6ci5kYXRhc2V0LGRhdGFzZXRJbmRleDpyLmRhdGFzZXRJbmRleCxkYXR1bTpyLmRhdHVtLGluZGV4OnIuaW5kZXgscG9zaXRpb246ci5wb3NpdGlvbixzZWxlY3Rpb246d2Quc2VsZWN0KHIuZHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgoci52YWxpZERhdHVtSW5kZXgpKX07cmV0dXJuIG59LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJwbG90cyBtdXN0IGltcGxlbWVudCBlbnRpdGllc0F0Iil9LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0KHIpO3JldHVybiBuPT09dm9pZCAwP3ZvaWQgMDp0aGlzLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobil9LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaTtpZihuPT1udWxsKXt2YXIgbz1yO2k9e3g6by50b3BMZWZ0LngseTpvLnRvcExlZnQueSx3aWR0aDpvLmJvdHRvbVJpZ2h0Lngtby50b3BMZWZ0LngsaGVpZ2h0Om8uYm90dG9tUmlnaHQueS1vLnRvcExlZnQueX19ZWxzZXt2YXIgYT1yO2k9e3g6YS5taW4seTpuLm1pbix3aWR0aDphLm1heC1hLm1pbixoZWlnaHQ6bi5tYXgtbi5taW59fXJldHVybiB0aGlzLmVudGl0aWVzSW5Cb3VuZHMoaSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJbkJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXNJblhCb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5ZQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vZmZVcGRhdGUodGhpcy5fZGVmZXJyZWRSZXNldEVudGl0eVN0b3JlKSxyLnJlbW92ZUluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtyLm9uVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSxyLm9uVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJue319LHQuX3NjYWxlZEFjY2Vzc29yPWZ1bmN0aW9uKHIpe3ZhciBuPXIuc2NhbGUsaT1yLmFjY2Vzc29yLG89ci5wb3N0U2NhbGUsYT1uPT1udWxsP2k6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBuLnNjYWxlKGkobCxjLHUpKX0scz1vPT1udWxsP2E6ZnVuY3Rpb24obCxjLHUpe3JldHVybiBvKGEobCxjLHUpLGwsYyx1KX07cmV0dXJuIHN9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm57eDowLHk6MH19LHQucHJvdG90eXBlLl9hbmltYXRlT25OZXh0UmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUmJnRoaXMuX2RhdGFDaGFuZ2VkfSx0Lk9QVElNSVpFX01FTU9JWkVfUFJPSkVDVE9SUz0hMSx0Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OPTYwMCx0fShUSGUuQ29tcG9uZW50KTtRRi5QbG90PVJIZTtmdW5jdGlvbiBlS3QoZSx0LHIpe3ZhciBuPXQuYWNjZXNzb3IsaT10LnNjYWxlO2lmKGk9PW51bGwpcmV0dXJuW107dmFyIG89ZS5kYXRhKCk7ciE9bnVsbCYmKG89by5maWx0ZXIoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsZSl9KSk7dmFyIGE9ZnVuY3Rpb24obCxjKXtyZXR1cm4gbihsLGMsZSl9LHM9by5tYXAoYSk7cmV0dXJuIGkuZXh0ZW50T2ZWYWx1ZXMocyl9fSk7dmFyIHJLdD1IKGFhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTkhlPShkZSgpLFV0KHBlKSksREhlPXJzKCksT0hlPUZlKCksekhlPXpvdCgpLEZIZT1mdW5jdGlvbihlKXtOSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3Q9ZnVuY3Rpb24ocil7dmFyIG4saT0xLzA7cmV0dXJuIHRoaXMuY29tcG9uZW50cygpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9byxzPWEuZW50aXR5TmVhcmVzdChyKTtpZihzIT1udWxsKXt2YXIgbD1PSGUuTWF0aC5kaXN0YW5jZVNxdWFyZWQocy5wb3NpdGlvbixyKTtsPD1pJiYoaT1sLG49cyl9fSksbn0sdC5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKHIpe2lmKHIhPW51bGwmJiEociBpbnN0YW5jZW9mIERIZS5QbG90KSl0aHJvdyBuZXcgRXJyb3IoIlBsb3QgR3JvdXAgb25seSBhY2NlcHRzIHBsb3RzIik7cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZC5jYWxsKHRoaXMsciksdGhpc30sdH0oekhlLkdyb3VwKTthYXQuUGxvdEdyb3VwPUZIZX0pO3ZhciBuS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJIZT0oZGUoKSxVdChwZSkpLHF1PShFcigpLFV0KE1yKSksR289RmUoKSxISGU9V0YoKSxWSGU9ZnVuY3Rpb24oZSl7QkhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9W10pO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fcm93UGFkZGluZz0wLG4uX2NvbHVtblBhZGRpbmc9MCxuLl9yb3dzPVtdLG4uX3Jvd1dlaWdodHM9W10sbi5fY29sdW1uV2VpZ2h0cz1bXSxuLl9uUm93cz0wLG4uX25Db2xzPTAsbi5fY2FsY3VsYXRlZExheW91dD1udWxsLG4uYWRkQ2xhc3MoInRhYmxlIiksci5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7aS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7YSE9bnVsbCYmbi5hZGQoYSxvLHMpfSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fZm9yRWFjaD1mdW5jdGlvbihyKXtmb3IodmFyIG49MDtuPHRoaXMuX25Sb3dzO24rKylmb3IodmFyIGk9MDtpPHRoaXMuX25Db2xzO2krKyl0aGlzLl9yb3dzW25dW2ldIT1udWxsJiZyKHRoaXMuX3Jvd3Nbbl1baV0pfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuITA7cmV0dXJuITF9LHQucHJvdG90eXBlLmNvbXBvbmVudEF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI8MHx8cj49dGhpcy5fblJvd3N8fG48MHx8bj49dGhpcy5fbkNvbHM/bnVsbDp0aGlzLl9yb3dzW3JdW25dfSx0LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpdGhyb3cgRXJyb3IoIkNhbm5vdCBhZGQgbnVsbCB0byBhIHRhYmxlIGNlbGwiKTtpZighdGhpcy5oYXMocikpe3ZhciBvPXRoaXMuX3Jvd3Nbbl0mJnRoaXMuX3Jvd3Nbbl1baV07aWYobyE9bnVsbCl0aHJvdyBuZXcgRXJyb3IoImNlbGwgaXMgb2NjdXBpZWQiKTtyLmRldGFjaCgpLHRoaXMuX25Sb3dzPU1hdGgubWF4KG4rMSx0aGlzLl9uUm93cyksdGhpcy5fbkNvbHM9TWF0aC5tYXgoaSsxLHRoaXMuX25Db2xzKSx0aGlzLl9wYWRUYWJsZVRvU2l6ZSh0aGlzLl9uUm93cyx0aGlzLl9uQ29scyksdGhpcy5fcm93c1tuXVtpXT1yLHRoaXMuX2Fkb3B0QW5kQW5jaG9yKHIpLHRoaXMucmVkcmF3KCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmU9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspaWYodGhpcy5fcm93c1tuXVtpXT09PXIpcmV0dXJuIHRoaXMuX3Jvd3Nbbl1baV09bnVsbCwhMDtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2l0ZXJhdGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTtmb3IodmFyIG89dGhpcy5fcm93cyxhPXF1LnRyYW5zcG9zZSh0aGlzLl9yb3dzKSxzPXItdGhpcy5fY29sdW1uUGFkZGluZyoodGhpcy5fbkNvbHMtMSksbD1uLXRoaXMuX3Jvd1BhZGRpbmcqKHRoaXMuX25Sb3dzLTEpLGM9dC5fY2FsY0NvbXBvbmVudFdlaWdodHModGhpcy5fcm93V2VpZ2h0cyxvLGZ1bmN0aW9uKHope3JldHVybiB6PT1udWxsfHx6LmZpeGVkSGVpZ2h0KCl9KSx1PXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX2NvbHVtbldlaWdodHMsYSxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZFdpZHRoKCl9KSxoPXUubWFwKGZ1bmN0aW9uKHope3JldHVybiB6PT09MD8uNTp6fSksZj1jLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGgscyksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoZixsKSxnPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fbkNvbHMpLF89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uUm93cykseSx4LGI9MCxTLEMsUDs7KXt2YXIgaz1Hby5BcnJheS5hZGQoXyxkKSxPPUdvLkFycmF5LmFkZChnLHApO1M9dGhpcy5fZGV0ZXJtaW5lR3VhcmFudGVlcyhPLGssaSksZz1TLmd1YXJhbnRlZWRXaWR0aHMsXz1TLmd1YXJhbnRlZWRIZWlnaHRzLEM9Uy53YW50c1dpZHRoQXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KSxQPVMud2FudHNIZWlnaHRBcnIuc29tZShmdW5jdGlvbih6KXtyZXR1cm4gen0pO3ZhciBEPXksQj14O3k9cy1xdS5zdW0oUy5ndWFyYW50ZWVkV2lkdGhzKSx4PWwtcXUuc3VtKFMuZ3VhcmFudGVlZEhlaWdodHMpO3ZhciBJPXZvaWQgMDtDPyhJPVMud2FudHNXaWR0aEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEk9R28uQXJyYXkuYWRkKEksdSkpOkk9dTt2YXIgTD12b2lkIDA7UD8oTD1TLndhbnRzSGVpZ2h0QXJyLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej8uMTowfSksTD1Hby5BcnJheS5hZGQoTCxjKSk6TD1jLHA9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEkseSksZD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UoTCx4KSxiKys7dmFyIFI9eT4wJiZ5IT09RCxGPXg+MCYmeCE9PUI7aWYoIShSfHxGKXx8Yj41KWJyZWFrfXJldHVybiB5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZSh1LHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGMseCkse2NvbFByb3BvcnRpb25hbFNwYWNlOnAscm93UHJvcG9ydGlvbmFsU3BhY2U6ZCxndWFyYW50ZWVkV2lkdGhzOlMuZ3VhcmFudGVlZFdpZHRocyxndWFyYW50ZWVkSGVpZ2h0czpTLmd1YXJhbnRlZWRIZWlnaHRzLHdhbnRzV2lkdGg6Qyx3YW50c0hlaWdodDpQfX0sdC5wcm90b3R5cGUuX2RldGVybWluZUd1YXJhbnRlZXM9ZnVuY3Rpb24ocixuLGkpe2k9PT12b2lkIDAmJihpPSExKTt2YXIgbz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxhPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHM9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fbkNvbHMpLGw9R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoITEsdGhpcy5fblJvd3MpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtjLmZvckVhY2goZnVuY3Rpb24oaCxmKXt2YXIgcDtoIT1udWxsP3A9aC5yZXF1ZXN0ZWRTcGFjZShyW2ZdLG5bdV0pOnA9e21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O3ZhciBkPWk/TWF0aC5taW4ocC5taW5XaWR0aCxyW2ZdKTpwLm1pbldpZHRoO29bZl09TWF0aC5tYXgob1tmXSxkKTt2YXIgZz1pP01hdGgubWluKHAubWluSGVpZ2h0LG5bdV0pOnAubWluSGVpZ2h0O2FbdV09TWF0aC5tYXgoYVt1XSxnKTt2YXIgXz1wLm1pbldpZHRoPnJbZl07c1tmXT1zW2ZdfHxfO3ZhciB5PXAubWluSGVpZ2h0Pm5bdV07bFt1XT1sW3VdfHx5fSl9KSx7Z3VhcmFudGVlZFdpZHRoczpvLGd1YXJhbnRlZWRIZWlnaHRzOmEsd2FudHNXaWR0aEFycjpzLHdhbnRzSGVpZ2h0QXJyOmx9fSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9jYWxjdWxhdGVkTGF5b3V0PXRoaXMuX2l0ZXJhdGVMYXlvdXQocixuKSx7bWluV2lkdGg6cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZFdpZHRocyksbWluSGVpZ2h0OnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKX19LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBhPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLHM9cXUuc3VtKHRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQuZ3VhcmFudGVlZEhlaWdodHMpLGw9dGhpcy5fY2FsY3VsYXRlZExheW91dDsoYT50aGlzLndpZHRoKCl8fHM+dGhpcy5oZWlnaHQoKSkmJihsPXRoaXMuX2l0ZXJhdGVMYXlvdXQodGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksITApKTt2YXIgYz0wLHU9R28uQXJyYXkuYWRkKGwucm93UHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkSGVpZ2h0cyksaD1Hby5BcnJheS5hZGQobC5jb2xQcm9wb3J0aW9uYWxTcGFjZSxsLmd1YXJhbnRlZWRXaWR0aHMpO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZnVuY3Rpb24oZixwKXt2YXIgZD0wO2YuZm9yRWFjaChmdW5jdGlvbihnLF8pe2chPW51bGwmJmcuY29tcHV0ZUxheW91dCh7eDpkLHk6Y30saFtfXSx1W3BdKSxkKz1oW19dK28uX2NvbHVtblBhZGRpbmd9KSxjKz11W3BdK28uX3Jvd1BhZGRpbmd9KSx0aGlzfSx0LnByb3RvdHlwZS5yb3dQYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJyb3dQYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX3Jvd1BhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmNvbHVtblBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZztpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKHIpfHxyPDApdGhyb3cgRXJyb3IoImNvbHVtblBhZGRpbmcgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fY29sdW1uUGFkZGluZz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucm93V2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoInJvd1dlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dXZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5XZWlnaHQ9ZnVuY3Rpb24ocixuKXtpZihuPT1udWxsKXJldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIobil8fG48MCl0aHJvdyBFcnJvcigiY29sdW1uV2VpZ2h0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtbldlaWdodHNbcl09bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj1xdS50cmFuc3Bvc2UodGhpcy5fcm93cyk7cmV0dXJuIHQuX2ZpeGVkU3BhY2UocixmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbHx8bi5maXhlZFdpZHRoKCl9KX0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC5fZml4ZWRTcGFjZSh0aGlzLl9yb3dzLGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsfHxyLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuX3BhZFRhYmxlVG9TaXplPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPTA7aTxyO2krKyl7dGhpcy5fcm93c1tpXT09PXZvaWQgMCYmKHRoaXMuX3Jvd3NbaV09W10sdGhpcy5fcm93V2VpZ2h0c1tpXT1udWxsKTtmb3IodmFyIG89MDtvPG47bysrKXRoaXMuX3Jvd3NbaV1bb109PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldW29dPW51bGwpfWZvcih2YXIgbz0wO288bjtvKyspdGhpcy5fY29sdW1uV2VpZ2h0c1tvXT09PXZvaWQgMCYmKHRoaXMuX2NvbHVtbldlaWdodHNbb109bnVsbCl9LHQuX2NhbGNDb21wb25lbnRXZWlnaHRzPWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24obyxhKXtpZihvIT1udWxsKXJldHVybiBvO3ZhciBzPW5bYV0ubWFwKGkpLGw9cy5yZWR1Y2UoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYyYmdX0sITApO3JldHVybiBsPzA6MX0pfSx0Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT1xdS5zdW0ocik7cmV0dXJuIGk9PT0wP0dvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsci5sZW5ndGgpOnIubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuKm8vaX0pfSx0Ll9maXhlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVkdWNlKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHMmJmx9LCEwKX0sbz1mdW5jdGlvbihhKXtyZXR1cm4gaShhLm1hcChuKSl9O3JldHVybiBpKHIubWFwKG8pKX0sdH0oSEhlLkNvbXBvbmVudENvbnRhaW5lcik7c2F0LlRhYmxlPVZIZX0pO3ZhciBpS3Q9SChsYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFVIZT0oZGUoKSxVdChwZSkpLHFIZT1Wb3QoKSxHSGU9MixXSGU9ZnVuY3Rpb24oZSl7VUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHIuX21heExpbmVzPUdIZSxyfXJldHVybiB0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3RoaXMuX3dyYXBwZXIubWF4TGluZXModGhpcy5fbWF4TGluZXMpO3ZhciBpPXRoaXMuYW5nbGUoKT09PTA/cjpuO2k9PT0wJiYoaT0xLzApO3ZhciBvPXRoaXMuX3dyYXBwZXIud3JhcCh0aGlzLl90ZXh0LHRoaXMuX21lYXN1cmVyLGkpLGE9dGhpcy5fbWVhc3VyZXIubWVhc3VyZShvLndyYXBwZWRUZXh0KSxzPSh0aGlzLmFuZ2xlKCk9PT0wP2Eud2lkdGg6YS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksbD0odGhpcy5hbmdsZSgpPT09MD9hLmhlaWdodDphLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpzLG1pbkhlaWdodDpsfX0sdC5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX21heExpbmVzOih0aGlzLl9tYXhMaW5lcz1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHR9KHFIZS5MYWJlbCk7bGF0LldyYXBwZWRMYWJlbD1XSGV9KTt2YXIgb0t0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBZSGU9KGRlKCksVXQocGUpKSxqSGU9cUYoKSxYSGU9ZnVuY3Rpb24oZSl7WUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoIngtZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6ci50b3BMZWZ0LngseTowfSxib3R0b21SaWdodDp7eDpyLmJvdHRvbVJpZ2h0LngseTp0aGlzLmhlaWdodCgpfX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ4LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIngtcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnlTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInlTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBYRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueUV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWERyYWdCb3hMYXllciBoYXMgbm8geUV4dGVudCIpfSx0fShqSGUuRHJhZ0JveExheWVyKTtjYXQuWERyYWdCb3hMYXllcj1YSGV9KTt2YXIgYUt0PUgodWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1YXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkSGU9KGRlKCksVXQocGUpKSxLSGU9cUYoKSxaSGU9ZnVuY3Rpb24oZSl7JEhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuYWRkQ2xhc3MoInktZHJhZy1ib3gtbGF5ZXIiKSxyLl9oYXNDb3JuZXJzPSExLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0Qm91bmRzKHRoaXMuYm91bmRzKCkpLHRoaXN9LHQucHJvdG90eXBlLl9zZXRCb3VuZHM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3NldEJvdW5kcy5jYWxsKHRoaXMse3RvcExlZnQ6e3g6MCx5OnIudG9wTGVmdC55fSxib3R0b21SaWdodDp7eDp0aGlzLndpZHRoKCkseTpyLmJvdHRvbVJpZ2h0Lnl9fSl9LHQucHJvdG90eXBlLl9zZXRSZXNpemFibGVDbGFzc2VzPWZ1bmN0aW9uKHIpe3ImJnRoaXMuZW5hYmxlZCgpP3RoaXMuYWRkQ2xhc3MoInktcmVzaXphYmxlIik6dGhpcy5yZW1vdmVDbGFzcygieS1yZXNpemFibGUiKX0sdC5wcm90b3R5cGUueFNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnhTY2FsZS5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigieFNjYWxlcyBjYW5ub3QgYmUgc2V0IG9uIGFuIFlEcmFnQm94TGF5ZXIiKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54RXh0ZW50LmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJZRHJhZ0JveExheWVyIGhhcyBubyB4RXh0ZW50Iil9LHR9KEtIZS5EcmFnQm94TGF5ZXIpO3VhdC5ZRHJhZ0JveExheWVyPVpIZX0pO3ZhciBQb3Q9SChfYT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2EsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBOcz0oZGUoKSxVdChwZSkpO05zLl9fZXhwb3J0U3RhcihxRigpLF9hKTtOcy5fX2V4cG9ydFN0YXIoVCR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihDJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKHpvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoTG90KCksX2EpO05zLl9fZXhwb3J0U3RhcihQJHQoKSxfYSk7TnMuX19leHBvcnRTdGFyKFZvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoSSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihyS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFRvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIobkt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihpS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKG9LdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoYUt0KCksX2EpfSk7dmFyIGZhdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSkhlPShkZSgpLFV0KHBlKSksUUhlPURmKCksdFZlPWZ1bmN0aW9uKGUpe0pIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwiYXJjIGZpbGwiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0fShRSGUuU1ZHRHJhd2VyKTtoYXQuQXJjU1ZHRHJhd2VyPXRWZX0pO3ZhciBkYXQ9SChwYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHBhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGVWZT0oZGUoKSxVdChwZSkpLHJWZT1EZigpLG5WZT1mdW5jdGlvbihlKXtlVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBvdXRsaW5lIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoImZpbGwiLCJub25lIil9LHR9KHJWZS5TVkdEcmF3ZXIpO3BhdC5BcmNPdXRsaW5lU1ZHRHJhd2VyPW5WZX0pO3ZhciBtYXQ9SChlQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZUIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpVmU9KGRlKCksVXQocGUpKSx0Qj1GdigpLG9WZT1EZigpLGFWZT1mdW5jdGlvbihlKXtpVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyZWEiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgic3Ryb2tlIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0ob1ZlLlNWR0RyYXdlcik7ZUIuQXJlYVNWR0RyYXdlcj1hVmU7dmFyIHNWZT1bIm9wYWNpdHkiLCJmaWxsIiwiZmlsbC1vcGFjaXR5Il0sbFZlPVsib3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCJdO2Z1bmN0aW9uIGNWZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIG89dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxzVmUsblswXSwwKTt0Qi5yZW5kZXJBcmVhKHIsZSgpLG5bMF0sbyk7dmFyIGE9dEIucmVzb2x2ZUF0dHJpYnV0ZXMoaSxsVmUsblswXSwwKTt0Qi5yZW5kZXJMaW5lKHIsdCgpLG5bMF0sYSl9fWVCLm1ha2VBcmVhQ2FudmFzRHJhd1N0ZXA9Y1ZlfSk7dmFyIG5CPUgockI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdVZlPShkZSgpLFV0KHBlKSksc0t0PUZ2KCksaFZlPURmKCksZlZlPWZ1bmN0aW9uKGUpe3VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwibGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0LnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4LmNhbGwodGhpcywwKX0sdH0oaFZlLlNWR0RyYXdlcik7ckIuTGluZVNWR0RyYXdlcj1mVmU7dmFyIHBWZT1bIm9wYWNpdHkiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZS13aWR0aCIsInN0cm9rZSIsInN0cm9rZS1kYXNoYXJyYXkiXTtmdW5jdGlvbiBkVmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1zS3QucmVzb2x2ZUF0dHJpYnV0ZXMobixwVmUsclswXSwwKTtzS3QucmVuZGVyTGluZSh0LGUoKSxyWzBdLGkpfX1yQi5tYWtlTGluZUNhbnZhc0RyYXdTdGVwPWRWZX0pO3ZhciBvQj1IKFBTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGxLdD0oZGUoKSxVdChwZSkpLGlCPUZ2KCksbVZlPURmKCksZ1ZlPWZ1bmN0aW9uKGUpe2xLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSIiKTt2YXIgbj1lLmNhbGwodGhpcywicmVjdCIsIiIpfHx0aGlzO3JldHVybiBuLl9yb290Q2xhc3NOYW1lPXIsbi5fcm9vdC5jbGFzc2VkKG4uX3Jvb3RDbGFzc05hbWUsITApLG59cmV0dXJuIHR9KG1WZS5TVkdEcmF3ZXIpO1BTLlJlY3RhbmdsZVNWR0RyYXdlcj1nVmU7dmFyIF9WZT1pQi5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSIsIndpZHRoIiwiaGVpZ2h0Il0pO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwPWZ1bmN0aW9uKGUsdCxyKXtlLnNhdmUoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBvPXRbaV07aWYobyE9bnVsbCl7dmFyIGE9aUIucmVzb2x2ZUF0dHJpYnV0ZXMocixfVmUsbyxpKTtlLmJlZ2luUGF0aCgpLGUucmVjdChhLngsYS55LGEud2lkdGgsYS5oZWlnaHQpLGlCLnJlbmRlclBhdGhXaXRoU3R5bGUoZSxhKX19ZS5yZXN0b3JlKCl9O3ZhciB5VmU9ZnVuY3Rpb24oZSl7bEt0Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsUFMuUmVjdGFuZ2xlQ2FudmFzRHJhd1N0ZXApfHx0aGlzfXJldHVybiB0fShpQi5DYW52YXNEcmF3ZXIpO1BTLlJlY3RhbmdsZUNhbnZhc0RyYXdlcj15VmV9KTt2YXIgX2F0PUgoZ2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2VmU9KGRlKCksVXQocGUpKSx4VmU9RGYoKSxiVmU9ZnVuY3Rpb24oZSl7dlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsImxpbmUiLCIiKXx8dGhpc31yZXR1cm4gdH0oeFZlLlNWR0RyYXdlcik7Z2F0LlNlZ21lbnRTVkdEcmF3ZXI9YlZlfSk7dmFyIGNLdD1IKHlhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd1ZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7bj09PXZvaWQgMCYmKG49d2luZG93LmRldmljZVBpeGVsUmF0aW8pLHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz1uLHRoaXMucGl4ZWxXaWR0aD10Km4sdGhpcy5waXhlbEhlaWdodD1yKm4sdGhpcy5jYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdGhpcy5jdHg9dGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLG4pfXJldHVybiBlLnNpemVQaXhlbHM9ZnVuY3Rpb24odCxyLG4saSl7dmFyIG89dC5jYW52YXM7by53aWR0aD1yKmksby5oZWlnaHQ9bippLG8uc3R5bGUud2lkdGg9cisicHgiLG8uc3R5bGUuaGVpZ2h0PW4rInB4Iix0LnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdC5zY2FsZShpLGkpfSxlLnByb3RvdHlwZS5ibGl0PWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0LmRyYXdJbWFnZSh0aGlzLmNhbnZhcyxyLG4sdGhpcy5zY3JlZW5XaWR0aCx0aGlzLnNjcmVlbkhlaWdodCl9LGUucHJvdG90eXBlLmJsaXRDZW50ZXI9ZnVuY3Rpb24odCxyLG4pe3I9PT12b2lkIDAmJihyPTApLG49PT12b2lkIDAmJihuPTApLHRoaXMuYmxpdCh0LE1hdGguZmxvb3Ioci10aGlzLnNjcmVlbldpZHRoLzIpLE1hdGguZmxvb3Iobi10aGlzLnNjcmVlbkhlaWdodC8yKSl9LGUucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0LHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPXRoaXMuZGV2aWNlUGl4ZWxSYXRpbztyZXR1cm4gdGhpcy5zY3JlZW5XaWR0aD10LHRoaXMuc2NyZWVuSGVpZ2h0PXIsdGhpcy5waXhlbFdpZHRoPXQqaSx0aGlzLnBpeGVsSGVpZ2h0PXIqaSxlLnNpemVQaXhlbHModGhpcy5jdHgsdCxyLGkpLG4mJnRoaXMuY3R4LnRyYW5zbGF0ZSh0LzIsdC8yKSx0aGlzfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLG49ci5waXhlbFdpZHRoLGk9ci5waXhlbEhlaWdodCxvPXIuY3R4O3JldHVybiBvLnNhdmUoKSxvLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksdD09bnVsbD9vLmNsZWFyUmVjdCgwLDAsbixpKTooby5maWxsU3R5bGU9dCxvLmZpbGxSZWN0KDAsMCxuLGkpKSxvLnJlc3RvcmUoKSx0aGlzfSxlLnByb3RvdHlwZS5nZXRJbWFnZURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsMCx0aGlzLnBpeGVsV2lkdGgsdGhpcy5waXhlbEhlaWdodCl9LGV9KCk7eWF0LkNhbnZhc0J1ZmZlcj13VmV9KTt2YXIgdmF0PUgoYUI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1ZlPShkZSgpLFV0KHBlKSksbTQ9RnYoKSxNVmU9Y0t0KCksRVZlPURmKCksVFZlPWZ1bmN0aW9uKGUpe1NWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJwYXRoIiwic3ltYm9sIil8fHRoaXN9cmV0dXJuIHR9KEVWZS5TVkdEcmF3ZXIpO2FCLlN5bWJvbFNWR0RyYXdlcj1UVmU7dmFyIENWZT1tNC5Db250ZXh0U3R5bGVBdHRycy5jb25jYXQoWyJ4IiwieSJdKTtmdW5jdGlvbiBBVmUoZSx0LHIsbil7dmFyIGk9dGhpcztyZXR1cm4gZnVuY3Rpb24obyxhLHMpe2Zvcih2YXIgbD1vLmNhbnZhcyxjPWwuY2xpZW50V2lkdGgsdT1sLmNsaWVudEhlaWdodCxoPW49PT12b2lkIDA/bmV3IE1WZS5DYW52YXNCdWZmZXIoMCwwKTpuLGY9dCgpLHA9cigpLGQ9bnVsbCxnPW51bGwsXz1udWxsLHk9MDt5PGEubGVuZ3RoO3krKyl7dmFyIHg9YVt5XTtpZih4IT1udWxsKXt2YXIgYj1tNC5yZXNvbHZlQXR0cmlidXRlcyhzLENWZSx4LHkpLFM9cCh4LHksZSk7aWYoISFQVmUoYyx1LGIueCxiLnksUykpe3ZhciBDPUlWZShkLGIsbTQuQ29udGV4dFN0eWxlQXR0cnMpLFA9Zih4LHksaS5fZGF0YXNldCk7aWYoIShDJiZfPT1TJiZnPT1QKSl7dmFyIGs9bTQuZ2V0U3Ryb2tlV2lkdGgoYiksTz1TK2srMTsoTz5oLnNjcmVlbldpZHRofHxPPmguc2NyZWVuSGVpZ2h0KSYmaC5yZXNpemUoTyxPLCEwKSxoLmNsZWFyKCk7dmFyIEQ9aC5jdHg7RC5iZWdpblBhdGgoKSxQKFMpLmNvbnRleHQoRCkobnVsbCksRC5jbG9zZVBhdGgoKSxtNC5yZW5kZXJQYXRoV2l0aFN0eWxlKEQsYiksZz1QLF89UyxkPWJ9aC5ibGl0Q2VudGVyKG8sYi54LGIueSl9fX19fWFCLm1ha2VTeW1ib2xDYW52YXNEcmF3U3RlcD1BVmU7ZnVuY3Rpb24gUFZlKGUsdCxyLG4saSl7cmV0dXJuIHIraT49MCYmci1pPD1lJiZuK2k+PTAmJm4taTw9dH1mdW5jdGlvbiBJVmUoZSx0LHIpe2lmKGU9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYoZVtpXSE9dFtpXSlyZXR1cm4hMX1yZXR1cm4hMH19KTt2YXIgQnY9SChEYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBPZj0oZGUoKSxVdChwZSkpO09mLl9fZXhwb3J0U3RhcihmYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGRhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIobWF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihGdigpLERjKTtPZi5fX2V4cG9ydFN0YXIoVXUoKSxEYyk7T2YuX19leHBvcnRTdGFyKG5CKCksRGMpO09mLl9fZXhwb3J0U3RhcihvQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoX2F0KCksRGMpO09mLl9fZXhwb3J0U3RhcihEZigpLERjKTtPZi5fX2V4cG9ydFN0YXIodmF0KCksRGMpfSk7dmFyIEh2PUgoYmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShiYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBMVmU9KGRlKCksVXQocGUpKSx1S3Q9a3MoKSx4YXQ9RmUoKSxrVmU9aWF0KCksZzQ9cnMoKSxSVmU9ZnVuY3Rpb24oZSl7TFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsci5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSxyLl9kZWZlcnJlZFJlbmRlcmluZz0hMSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtPWZ1bmN0aW9uKG4saSxvLGEpeyFyLl9pc0FuY2hvcmVkfHwoci5fcmVuZGVyQXJlYSE9bnVsbCYmci5fcmVuZGVyQXJlYS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyIsICIraSsiKSBzY2FsZSgiK28rIiwgIithKyIpIiksci5fY2FudmFzIT1udWxsJiZyLl9jYW52YXMuc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24rInB4LCAiK2krInB4KSBzY2FsZSgiK28rIiwgIithKyIpIikpfSxyLmFkZENsYXNzKCJ4eS1wbG90Iiksci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVhDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKX0sci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVkoKX0sci5fcmVuZGVyQ2FsbGJhY2s9ZnVuY3Rpb24oKXtpZihyLmRlZmVycmVkUmVuZGVyaW5nKCkpe3ZhciBuPXIueCgpJiZyLngoKS5zY2FsZSxpPXIueSgpJiZyLnkoKS5zY2FsZTtyLl9kZWZlcnJlZFJlbmRlcmVyLnVwZGF0ZURvbWFpbnMobixpKX1lbHNlIHIucmVuZGVyKCl9LHIuX2RlZmVycmVkUmVuZGVyZXI9bmV3IGtWZS5EZWZlcnJlZFJlbmRlcmVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX2FwcGx5RGVmZXJyZWRSZW5kZXJpbmdUcmFuc2Zvcm0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmVycmVkUmVuZGVyaW5nKCkmJnRoaXMuX2RlZmVycmVkUmVuZGVyZXIucmVzZXRUcmFuc2Zvcm1zKCksZS5wcm90b3R5cGUucmVuZGVyLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLmRlZmVycmVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nO2lmKHIpe3ZhciBuPXRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSxpPXRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZTt0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnNldERvbWFpbnMobixpKX1yZXR1cm4gdGhpcy5fZGVmZXJyZWRSZW5kZXJpbmc9cix0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YX0tFWSk7dGhpcy5fYmluZFByb3BlcnR5KHQuX1hfS0VZLHIsbixpKTt2YXIgbz10aGlzLndpZHRoKCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJm4ucmFuZ2UoWzAsb10pLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWV9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZX0tFWSxyLG4saSk7dmFyIG89dGhpcy5oZWlnaHQoKTtyZXR1cm4gbiE9bnVsbCYmbyE9bnVsbCYmKG4gaW5zdGFuY2VvZiB1S3QuQ2F0ZWdvcnk/bi5yYW5nZShbMCxvXSk6bi5yYW5nZShbbywwXSkpLHRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW4mJnRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngiJiZ0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluP3RoaXMuX21ha2VGaWx0ZXJCeVByb3BlcnR5KCJ5Iik6KHI9PT0ieSJ8fHI9PT0ieTAiKSYmdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieCIpOm51bGx9LHQucHJvdG90eXBlLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldChyKTtpZihuIT1udWxsKXt2YXIgaT1uLmFjY2Vzc29yLG89bi5zY2FsZTtpZihvIT1udWxsKXJldHVybiBmdW5jdGlvbihhLHMsbCl7dmFyIGM9by5yYW5nZSgpO3JldHVybiB4YXQuTWF0aC5pblJhbmdlKG8uc2NhbGUoaShhLHMsbCkpLGNbMF0sY1sxXSl9fXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9mZlVwZGF0ZShpKX0sdC5wcm90b3R5cGUuX2luc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbik7dmFyIGk9bj09PXQuX1hfS0VZP3RoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s6dGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjaztyLm9uVXBkYXRlKGkpfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2spLHRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0WERvbWFpbk9uQ2hhbmdlRnJvbVlDYWxsYmFjayksdGhpc30sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPyJ4Ijp0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPyJ5Ijoibm9uZSI7c3dpdGNoKHIpe2Nhc2UieCI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMCx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSExLHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCk7YnJlYWs7Y2FzZSJ5Ijp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITAsdGhpcy5fYWRqdXN0WURvbWFpbk9uQ2hhbmdlRnJvbVgoKTticmVhaztjYXNlIm5vbmUiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITEsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY2FsZSBuYW1lICciK3IrIicsIG11c3QgYmUgJ3gnLCAneScgb3IgJ25vbmUnIil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLngoKSxhPW8mJm8uc2NhbGU7YSE9bnVsbCYmYS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTt2YXIgcz10aGlzLnkoKSxsPXMmJnMuc2NhbGU7cmV0dXJuIGwhPW51bGwmJihsIGluc3RhbmNlb2YgdUt0LkNhdGVnb3J5P2wucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pOmwucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy54KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW49ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZTtyIT1udWxsJiZyLmF1dG9Eb21haW4oKX0sdC5wcm90b3R5cGUuc2hvd0FsbERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCksdGhpc30sdC5wcm90b3R5cGUuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZPWZ1bmN0aW9uKCl7IXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpfHx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKX0sdC5wcm90b3R5cGUuX3Byb2plY3RvcnNSZWFkeT1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLG49dGhpcy55KCk7cmV0dXJuIHIhPW51bGwmJnIuYWNjZXNzb3IhPW51bGwmJm4hPW51bGwmJm4uYWNjZXNzb3IhPW51bGx9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT1nNC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJue3g6byhyLG4saSkseTphKHIsbixpKX19LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyksaT10aGlzLmF0dHIoImRlZmluZWQiKSxvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1nNC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihyLngoKSkoYSxzLGwpLHU9ZzQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci55KCkpKGEscyxsKTtyZXR1cm4gaSYmaS5hY2Nlc3NvcihhLHMsbCk9PT0hMT8hMTp4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4YXQuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpfTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oYSl7bi5zZXQoYSxuLmdldChhKS5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gbyhzLGwsYSl9KSl9KSxufSx0Ll9YX0tFWT0ieCIsdC5fWV9LRVk9InkiLHR9KGc0LlBsb3QpO2JhdC5YWVBsb3Q9UlZlfSk7dmFyIFNhdD1IKGxCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE5WZT0oZGUoKSxVdChwZSkpLHlhPShFcigpLFV0KE1yKSksRFZlPUxmKCksT1ZlPUJ2KCkselZlPVV1KCksaEt0PW5CKCksRlZlPWtzKCksc0I9dmQoKSxRZz1GZSgpLEJWZT1JZigpLHdhdD1JUygpLHZsPXJzKCksSFZlPUh2KCksZkt0PXtsaW5lYXI6eWEuY3VydmVMaW5lYXIsbGluZWFyQ2xvc2VkOnlhLmN1cnZlTGluZWFyQ2xvc2VkLHN0ZXA6eWEuY3VydmVTdGVwLHN0ZXBCZWZvcmU6eWEuY3VydmVTdGVwQmVmb3JlLHN0ZXBBZnRlcjp5YS5jdXJ2ZVN0ZXBBZnRlcixiYXNpczp5YS5jdXJ2ZUJhc2lzLGJhc2lzT3Blbjp5YS5jdXJ2ZUJhc2lzT3BlbixiYXNpc0Nsb3NlZDp5YS5jdXJ2ZUJhc2lzQ2xvc2VkLGJ1bmRsZTp5YS5jdXJ2ZUJ1bmRsZSxjYXJkaW5hbDp5YS5jdXJ2ZUNhcmRpbmFsLGNhcmRpbmFsT3Blbjp5YS5jdXJ2ZUNhcmRpbmFsT3BlbixjYXJkaW5hbENsb3NlZDp5YS5jdXJ2ZUNhcmRpbmFsQ2xvc2VkLG1vbm90b25lOnlhLmN1cnZlTW9ub3RvbmVYfTtsQi5DdXJ2ZU5hbWU9QlZlLm1ha2VFbnVtKFsibGluZWFyIiwibGluZWFyQ2xvc2VkIiwic3RlcCIsInN0ZXBCZWZvcmUiLCJzdGVwQWZ0ZXIiLCJiYXNpcyIsImJhc2lzT3BlbiIsImJhc2lzQ2xvc2VkIiwiYnVuZGxlIiwiY2FyZGluYWwiLCJjYXJkaW5hbE9wZW4iLCJjYXJkaW5hbENsb3NlZCIsIm1vbm90b25lIl0pO3ZhciBWVmU9ZnVuY3Rpb24oZSl7TlZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fY3VydmU9ImxpbmVhciIsci5fYXV0b3JhbmdlU21vb3RoPSExLHIuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPSEwLHIuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD0hMSxyLl9kb3duc2FtcGxpbmdFbmFibGVkPSExLHIuYWRkQ2xhc3MoImxpbmUtcGxvdCIpO3ZhciBuPW5ldyBEVmUuRWFzaW5nO3JldHVybiBuLnN0ZXBEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxuLmVhc2luZ01vZGUoImV4cEluT3V0Iiksbi5tYXhUb3RhbER1cmF0aW9uKHZsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJzdHJva2UiLG5ldyBGVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZS5jYWxsKHRoaXMsciksdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5hdXRvcmFuZ2VTbW9vdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYXV0b3JhbmdlU21vb3RoOih0aGlzLl9hdXRvcmFuZ2VTbW9vdGg9cix0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRTY2FsZVNuYXBwaW5nPWZ1bmN0aW9uKCl7dGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieCImJnRoaXMueCgpJiZ0aGlzLngoKS5zY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBzQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKSx0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5IiYmdGhpcy55KCkmJnRoaXMueSgpLnNjYWxlJiZ0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLnkoKS5zY2FsZS5zbmFwcGluZ0RvbWFpbkVuYWJsZWQoIXRoaXMuYXV0b3JhbmdlU21vb3RoKCkpfSx0LnByb3RvdHlwZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jdXJ2ZToodGhpcy5fY3VydmU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ6KHRoaXMuX2Rvd25zYW1wbGluZ0VuYWJsZWQ9cix0aGlzKX0sdC5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQ6KHRoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sbGFwc2VEZW5zZUxpbmVzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ6KHRoaXMuX2NvbGxhcHNlRGVuc2VWZXJ0aWNhbExpbmVzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IHpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaEt0LkxpbmVTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgT1ZlLkNhbnZhc0RyYXdlcihpLGhLdC5tYWtlTGluZUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2QzTGluZUZhY3Rvcnkocil9KSl9KX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscik7aWYoIXRoaXMuX2F1dG9yYW5nZVNtb290aHx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT1yfHx0aGlzLmF1dG9yYW5nZU1vZGUoKSE9PSJ4IiYmdGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieSIpcmV0dXJuIG47dmFyIGk9dGhpcy5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cygpLG87cmV0dXJuIHRoaXMuYXV0b3JhbmdlTW9kZSgpPT09InkiP289aS5sZWZ0LmNvbmNhdChpLnJpZ2h0KS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueX0pOm89aS50b3AuY29uY2F0KGkuYm90dG9tKS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEueH0pLG4ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiB5YS5leHRlbnQoeWEubWVyZ2UoW2Esb10pKX0pfSx0LnByb3RvdHlwZS5fZ2V0RWRnZUludGVyc2VjdGlvblBvaW50cz1mdW5jdGlvbigpe3ZhciByPXRoaXM7aWYoISh0aGlzLnkoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlJiZ0aGlzLngoKS5zY2FsZSBpbnN0YW5jZW9mIHNCLlF1YW50aXRhdGl2ZVNjYWxlKSlyZXR1cm57bGVmdDpbXSxyaWdodDpbXSx0b3A6W10sYm90dG9tOltdfTt2YXIgbj10aGlzLnkoKS5zY2FsZSxpPXRoaXMueCgpLnNjYWxlLG89e2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX0sYT1pLnNjYWxlKGkuZG9tYWluKClbMF0pLHM9aS5zY2FsZShpLmRvbWFpbigpWzFdKSxsPW4uc2NhbGUobi5kb21haW4oKVswXSksYz1uLnNjYWxlKG4uZG9tYWluKClbMV0pO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1KXtmb3IodmFyIGg9dS5kYXRhKCksZixwLGQsZyxfLHkseCxiLFM9MTtTPGgubGVuZ3RoO1MrKylfPXh8fGkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTLTFdLFMtMSx1KSkseT1ifHxuLnNjYWxlKHIueSgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHg9aS5zY2FsZShyLngoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLGI9bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1NdLFMsdSkpLF88YT09YTw9eCYmKGY9YS1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5sZWZ0LnB1c2goe3g6YSx5Om4uaW52ZXJ0KHkrZCl9KSksXzxzPT1zPD14JiYoZj1zLV8scD14LV8sZz1iLXksZD1mKmcvcCxvLnJpZ2h0LnB1c2goe3g6cyx5Om4uaW52ZXJ0KHkrZCl9KSkseTxjPT1jPD1iJiYocD14LV8sZD1jLXksZz1iLXksZj1kKnAvZyxvLnRvcC5wdXNoKHt4OmkuaW52ZXJ0KF8rZikseTpjfSkpLHk8bD09bDw9YiYmKHA9eC1fLGQ9bC15LGc9Yi15LGY9ZCpwL2csby5ib3R0b20ucHVzaCh7eDppLmludmVydChfK2YpLHk6bH0pKX0pLG99LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLmRvbWFpbigpLG49TWF0aC5tYXgoclswXSxyWzFdKSxpPU1hdGgubWluKHJbMF0sclsxXSksbz1uPDAmJm58fGk+MCYmaXx8MCxhPXRoaXMueSgpLnNjYWxlLnNjYWxlKG8pO3JldHVybiBmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGF9fSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHdhdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3Iod2F0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24obil7aWYobiE9PSJkIil7dmFyIGk9cltuXTtyW25dPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gby5sZW5ndGg+MD9pKG9bMF0sYSxzKTpudWxsfX19KSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZKHIpO3JldHVybiBuIT1udWxsP1tuXTpbXX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdEJ5WFRoZW5ZPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0xLzAsaT0xLzAsbyxhPXRoaXMuYm91bmRzKCkscz10aGlzLmVudGl0aWVzKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXTtpZighIVFnLk1hdGgud2l0aGluKHUucG9zaXRpb24sYSkpe3ZhciBoPU1hdGguYWJzKHIueC11LnBvc2l0aW9uLngpLGY9TWF0aC5hYnMoci55LXUucG9zaXRpb24ueSk7KGg8bnx8aD09PW4mJmY8aSkmJihvPXUsbj1oLGk9Zil9fXJldHVybiBvfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0TGluZVByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaS5fZDNMaW5lRmFjdG9yeShzLHIsbikobyl9fSx0LnByb3RvdHlwZS5fZDNMaW5lRmFjdG9yeT1mdW5jdGlvbihyLG4saSl7bj09PXZvaWQgMCYmKG49dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKSxpPT09dm9pZCAwJiYoaT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpO3ZhciBvPWZ1bmN0aW9uKGEscyxsKXt2YXIgYz1uKGEscyxsKSx1PWkoYSxzLGwpO3JldHVybiBRZy5NYXRoLmlzVmFsaWROdW1iZXIoYykmJlFnLk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHlhLmxpbmUoKS54KGZ1bmN0aW9uKGEscyl7cmV0dXJuIG4oYSxzLHIpfSkueShmdW5jdGlvbihhLHMpe3JldHVybiBpKGEscyxyKX0pLmN1cnZlKHRoaXMuX2dldEN1cnZlRmFjdG9yeSgpKS5kZWZpbmVkKGZ1bmN0aW9uKGEscyl7cmV0dXJuIG8oYSxzLHIpfSl9LHQucHJvdG90eXBlLl9nZXRDdXJ2ZUZhY3Rvcnk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmN1cnZlKCk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt2YXIgbj1mS3Rbcl07cmV0dXJuIG49PW51bGw/Zkt0LmxpbmVhcjpufWVsc2UgcmV0dXJuIHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyBRZy5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0YSgpO2lmKCFyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmIXIuX2Rvd25zYW1wbGluZ0VuYWJsZWQpe24uc2V0KGksW29dKTtyZXR1cm59Zm9yKHZhciBhPVtdLHM9by5sZW5ndGgsbD0wO2w8cztsKyspYVtsXT1sO3IuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nKGksYSkpLHIuX2Rvd25zYW1wbGluZ0VuYWJsZWQmJihhPXIuX2ZpbHRlckRvd25zYW1wbGluZyhpLGEpKSxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQmJihhPXIuX2ZpbHRlckRlbnNlTGluZXMoaSxhKSk7Zm9yKHZhciBjPVtdLHU9YS5sZW5ndGgsbD0wO2w8dTtsKyspe3ZhciBoPWFbbF07Y1tsXT1vW2hdfW4uc2V0KGksW2NdKX0pLG59LHQucHJvdG90eXBlLl9maWx0ZXJDcm9wcGVkUmVuZGVyaW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXRoaXMsbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1yLmRhdGEoKSxsPVtdLGM9ZnVuY3Rpb24oeCxiKXtyZXR1cm4gUWcuTWF0aC5pblJhbmdlKHgsMCxpLndpZHRoKCkpJiZRZy5NYXRoLmluUmFuZ2UoYiwwLGkuaGVpZ2h0KCkpfSx1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBoPW8oc1tuW3VdXSxuW3VdLHIpLGY9YShzW25bdV1dLG5bdV0scikscD1jKGgsZik7aWYoIXAmJm5bdS0xXSE9bnVsbCYmc1tuW3UtMV1dIT1udWxsKXt2YXIgZD1vKHNbblt1LTFdXSxuW3UtMV0sciksZz1hKHNbblt1LTFdXSxuW3UtMV0scik7cD1wfHxjKGQsZyl9aWYoIXAmJm5bdSsxXSE9bnVsbCYmc1tuW3UrMV1dIT1udWxsKXt2YXIgXz1vKHNbblt1KzFdXSxuW3UrMV0scikseT1hKHNbblt1KzFdXSxuW3UrMV0scik7cD1wfHxjKF8seSl9cCYmbC5wdXNoKG5bdV0pfXJldHVybiBsfSx0LnByb3RvdHlwZS5fZmlsdGVyRG93bnNhbXBsaW5nPWZ1bmN0aW9uKHIsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybltdO2Zvcih2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPVtuWzBdXSxsPWZ1bmN0aW9uKGssTyl7dmFyIEQ9byhpW25ba11dLG5ba10sciksQj1hKGlbbltrXV0sbltrXSxyKSxJPW8oaVtuW2srMV1dLG5baysxXSxyKSxMPWEoaVtuW2srMV1dLG5baysxXSxyKTtpZihPPT09MS8wKXJldHVybiBNYXRoLmZsb29yKEQpPT09TWF0aC5mbG9vcihJKTt2YXIgUj1CKyhJLUQpKk87cmV0dXJuIE1hdGguZmxvb3IoTCk9PT1NYXRoLmZsb29yKFIpfSxjPTA7YzxuLmxlbmd0aC0xOyl7Zm9yKHZhciB1PW5bY10saD1vKGlbbltjXV0sbltjXSxyKSxmPWEoaVtuW2NdXSxuW2NdLHIpLHA9byhpW25bYysxXV0sbltjKzFdLHIpLGQ9YShpW25bYysxXV0sbltjKzFdLHIpLGc9TWF0aC5mbG9vcihoKT09PU1hdGguZmxvb3IocCk/MS8wOihkLWYpLyhwLWgpLF89bltjXSx5PWc9PT0xLzA/ZjpoLHg9XyxiPXksUz0hMDtjPG4ubGVuZ3RoLTEmJihTfHxsKGMsZykpOyl7YysrLFM9ITE7dmFyIEM9Zz09PTEvMD9hKGlbbltjXV0sbltjXSxyKTpvKGlbbltjXV0sbltjXSxyKTtDPmImJihiPUMseD1uW2NdKSxDPHkmJih5PUMsXz1uW2NdKX12YXIgUD1uW2NdO18hPT11JiZzLnB1c2goXykseCE9PV8mJnghPT11JiZzLnB1c2goeCksUCE9PXUmJlAhPT1fJiZQIT09eCYmcy5wdXNoKFApfXJldHVybiBzfSx0LnByb3RvdHlwZS5fZmlsdGVyRGVuc2VMaW5lcz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTt2YXIgaT1yLmRhdGEoKSxvPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxhPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPWZ1bmN0aW9uKGMpe3JldHVybiBvKGlbY10sYyxyKX0sbD1mdW5jdGlvbihjKXtyZXR1cm4gYShpW2NdLGMscil9O3JldHVybiB0aGlzLl9idWNrZXRCeVgocixuLHMsbCl9LHQucHJvdG90eXBlLl9idWNrZXRCeVg9ZnVuY3Rpb24ocixuLGksbyl7Zm9yKHZhciBhPVtdLHM9ci5kYXRhKCksbD1udWxsLGM9bi5sZW5ndGgsdT0wO3U8PWM7Kyt1KXt2YXIgaD1uW3VdO2lmKHNbaF0hPW51bGwpe3ZhciBmPU1hdGguZmxvb3IoaShoKSkscD1vKGgpO2w9PW51bGw/bD1uZXcgUWcuQnVja2V0KGgsZixwKTpsLmlzSW5CdWNrZXQoZik/bC5hZGRUb0J1Y2tldChwLGgpOihhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksbD1uZXcgUWcuQnVja2V0KGgsZixwKSl9fXJldHVybiBsIT1udWxsJiZhLnB1c2guYXBwbHkoYSxsLmdldFVuaXF1ZUluZGljZXMoKSksYX0sdH0oSFZlLlhZUGxvdCk7bEIuTGluZT1WVmV9KTt2YXIgVGF0PUgoRWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShFYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBVVmU9KGRlKCksVXQocGUpKSxjQj0oRXIoKSxVdChNcikpLHFWZT1rcygpLF80PUZlKCksTWF0PUJ2KCkscEt0PW1hdCgpLEdWZT1VdSgpLGRLdD1uQigpLHVCPUlTKCksV1ZlPVNhdCgpLERzPXJzKCksWVZlPWZ1bmN0aW9uKGUpe1VWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJhcmVhLXBsb3QiKSxyLnkwKDApLHIuYXR0cigiZmlsbC1vcGFjaXR5IiwuMjUpLHIuYXR0cigiZmlsbCIsbmV3IHFWZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuX2xpbmVEcmF3ZXJzPW5ldyBfNC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksbiE9bnVsbCl7dmFyIGk9dGhpcy55MCgpLmFjY2Vzc29yO2khPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVksaSxuKSx0aGlzLl91cGRhdGVZU2NhbGUoKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueTA9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTBfS0VZKTt2YXIgbj10aGlzLnkoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMF9LRVkscixpKSx0aGlzLl91cGRhdGVZU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlLmNhbGwodGhpcyksdGhpcy5fdXBkYXRlWVNjYWxlKCl9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2xpbmVEcmF3ZXJzLnNldChyLG5ldyBNYXQuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGRLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IE1hdC5DYW52YXNEcmF3ZXIoaSxkS3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueCgpKSxhPURzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4ueSgpKTtyZXR1cm4gbi5fZDNMaW5lRmFjdG9yeShyLG8sYSl9KSl9KSksZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMsciksdGhpcy5fbGluZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dlbmVyYXRlTGluZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPURzLlBsb3QuYXBwbHlEcmF3U3RlcHMobixvKTtyLl9saW5lRHJhd2Vycy5nZXQobykuZHJhdyhpLmdldChvKSxhKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZW5lcmF0ZUxpbmVBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcih1Qi5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RMaW5lUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkpLHJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyZXR1cm4gbmV3IEdWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgcEt0LkFyZWFTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgTWF0LkNhbnZhc0RyYXdlcihpLHBLdC5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwKGZ1bmN0aW9uKCl7dmFyIG89bi5fY29vcmRpbmF0ZVByb2plY3RvcnMoKSxhPW9bMF0scz1vWzFdLGw9b1syXSxjPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlQXJlYUdlbmVyYXRvcihhLHMsbCxjLHIpfSxmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW4uX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoYSxzKTtyZXR1cm4gbi5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcihhLHMsbCxyKX0pKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO24uZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSx0aGlzLl9nZXRSZXNldFlGdW5jdGlvbigpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTAoKSkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IodUIuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKHVCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KCJ5MCIpLG49XzQuQXJyYXkuZmxhdHRlbihyKSxpPV80LkFycmF5LnVuaXEobiksbz1pLmxlbmd0aD09PTE/aVswXTpudWxsLGE9dGhpcy55KCkscz1hJiZhLnNjYWxlO3MhPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciE9bnVsbCYmKHMucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlciksdGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXI9bnVsbCksbyE9bnVsbCYmKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW29dfSxzLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpKSl9LHQucHJvdG90eXBlLl9nZXRSZXNldFlGdW5jdGlvbj1mdW5jdGlvbigpe3JldHVybiBEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpfSx0LnByb3RvdHlwZS5fY29vcmRpbmF0ZVByb2plY3RvcnM9ZnVuY3Rpb24oKXtyZXR1cm5bRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSx0aGlzLnJlbmRlcmVyKCk9PT0iY2FudmFzIilyZXR1cm4gY0Iuc2VsZWN0QWxsKCk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKSxvPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBuLl9saW5lRHJhd2Vycy5nZXQoYSl9KS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGEhPW51bGx9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBpLnB1c2guYXBwbHkoaSxhLmdldFZpc3VhbFByaW1pdGl2ZXMoKSl9KSxjQi5zZWxlY3RBbGwoaSl9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fY3JlYXRlRGVmaW5lZFByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1PW8uX2NyZWF0ZUFyZWFHZW5lcmF0b3IocixuLGksYSxjKTtyZXR1cm4gdShzKX19LHQucHJvdG90eXBlLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz1yKGksbyxhKSxsPW4oaSxvLGEpO3JldHVybiBfNC5NYXRoLmlzVmFsaWROdW1iZXIocykmJl80Lk1hdGguaXNWYWxpZE51bWJlcihsKX19LHQucHJvdG90eXBlLl9jcmVhdGVBcmVhR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9dGhpcy5fZ2V0Q3VydmVGYWN0b3J5KCksbD1jQi5hcmVhKCkueChmdW5jdGlvbihjLHUpe3JldHVybiByKGMsdSxhKX0pLnkxKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG4oYyx1LGEpfSkueTAoZnVuY3Rpb24oYyx1KXtyZXR1cm4gaShjLHUsYSl9KS5jdXJ2ZShzKS5kZWZpbmVkKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIG8oYyx1LGEpfSk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9jcmVhdGVUb3BMaW5lR2VuZXJhdG9yPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLHM9Y0IubGluZSgpLngoZnVuY3Rpb24obCxjKXtyZXR1cm4gcihsLGMsbyl9KS55KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLG8pfSkuY3VydmUoYSkuZGVmaW5lZChmdW5jdGlvbihsLGMpe3JldHVybiBpKGwsYyxvKX0pO3JldHVybiBzfSx0Ll9ZMF9LRVk9InkwIix0fShXVmUuTGluZSk7RWF0LkFyZWE9WVZlfSk7dmFyIHk0PUgoR3U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEd1LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgalZlPShkZSgpLFV0KHBlKSksQWF0PShFcigpLFV0KE1yKSksQ2F0PV9sKCksWFZlPUxmKCksJFZlPUJ1KCksS1ZlPUJ2KCksWlZlPVV1KCksSlZlPW9CKCksUVZlPUNTKCksUGF0PWtzKCksbUt0PXZkKCkseGw9RmUoKSxMYXQ9SWYoKSxnS3Q9SVMoKSxoQj1ycygpLHRVZT1IdigpO0d1LkJhck9yaWVudGF0aW9uPUxhdC5tYWtlRW51bShbInZlcnRpY2FsIiwiaG9yaXpvbnRhbCJdKTtHdS5MYWJlbHNQb3NpdGlvbj1MYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCIsIm91dHNpZGUiXSk7R3UuQmFyQWxpZ25tZW50PUxhdC5tYWtlRW51bShbInN0YXJ0IiwibWlkZGxlIiwiZW5kIl0pO3ZhciBJYXQ9ZnVuY3Rpb24oZSl7alZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX2xhYmVsRm9ybWF0dGVyPSRWZS5pZGVudGl0eSgpLG4uX2xhYmVsc0VuYWJsZWQ9ITEsbi5fbGFiZWxzUG9zaXRpb249R3UuTGFiZWxzUG9zaXRpb24uZW5kLG4uX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlPSEwLG4uX2JhckFsaWdubWVudD0ibWlkZGxlIixuLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3M9UVZlLm1lbW9pemUoZVVlKSxuLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLG4uYWRkQ2xhc3MoImJhci1wbG90IiksciE9PSJ2ZXJ0aWNhbCImJnIhPT0iaG9yaXpvbnRhbCIpdGhyb3cgbmV3IEVycm9yKHIrIiBpcyBub3QgYSB2YWxpZCBvcmllbnRhdGlvbiBmb3IgUGxvdHMuQmFyIik7cmV0dXJuIG4uX2lzVmVydGljYWw9cj09PSJ2ZXJ0aWNhbCIsbi5hbmltYXRvcigiYmFzZWxpbmUiLG5ldyBYVmUuTnVsbCksbi5hdHRyKCJmaWxsIixuZXcgUGF0LkNvbG9yKCkucmFuZ2UoKVswXSksbi5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2JhclBpeGVsVGhpY2tuZXNzKCl9KSxuLl9sYWJlbENvbmZpZz1uZXcgeGwuTWFwLG4uX2Jhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltuLmJhc2VsaW5lVmFsdWUoKV19LG59cmV0dXJuIHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXN9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzKX0sdC5wcm90b3R5cGUueT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLmxlbmd0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpOnRoaXMueCgpfSx0LnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueCgpOnRoaXMueSgpfSx0LnByb3RvdHlwZS5iYXJFbmQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fQkFSX0VORF9LRVkpO3ZhciBuPXRoaXMucG9zaXRpb24oKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9CQVJfRU5EX0tFWSxyLGkpLHRoaXMuX3VwZGF0ZVRoaWNrbmVzc0F0dHIoKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuYmFyQWxpZ25tZW50PWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JhckFsaWdubWVudDoodGhpcy5fYmFyQWxpZ25tZW50PXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpWZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgSlZlLlJlY3RhbmdsZVNWR0RyYXdlcih0Ll9CQVJfQVJFQV9DTEFTUyl9LGZ1bmN0aW9uKHIpe3JldHVybiBuZXcgS1ZlLlJlY3RhbmdsZUNhbnZhc0RyYXdlcihyKX0pfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9iYXNlbGluZT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCl9LHQucHJvdG90eXBlLmJhc2VsaW5lVmFsdWU9ZnVuY3Rpb24ocil7aWYocj09bnVsbCl7aWYodGhpcy5fYmFzZWxpbmVWYWx1ZSE9bnVsbClyZXR1cm4gdGhpcy5fYmFzZWxpbmVWYWx1ZTtpZighdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuIDA7dmFyIG49dGhpcy5sZW5ndGgoKS5zY2FsZTtyZXR1cm4gbiYmbiBpbnN0YW5jZW9mIFBhdC5UaW1lP25ldyBEYXRlKDApOjB9cmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU9cix0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5kYXRhc2V0cz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMpOihlLnByb3RvdHlwZS5kYXRhc2V0cy5jYWxsKHRoaXMsciksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsbiE9bnVsbCYmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPW4pLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCh0Ll9MQUJFTF9BUkVBX0NMQVNTLCEwKSxvPW5ldyBDYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgQ2F0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgQ2F0LldyaXRlcihhLG8pO3JldHVybiB0aGlzLl9sYWJlbENvbmZpZy5zZXQocix7bGFiZWxBcmVhOmksbWVhc3VyZXI6YSx3cml0ZXI6c30pLG59LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXM9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcy5jYWxsKHRoaXMscik7dmFyIG49dGhpcy5fbGFiZWxDb25maWcuZ2V0KHIpO24hPW51bGwmJihuLmxhYmVsQXJlYS5yZW1vdmUoKSx0aGlzLl9sYWJlbENvbmZpZy5kZWxldGUocikpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3ZhciBvPW4uX2lzVmVydGljYWw/bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WChyKTpuLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0eU5lYXJlc3RZKHIpO3JldHVybiBvPT09dm9pZCAwP3ZvaWQgMDpuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4uX2VudGl0aWVzSW50ZXJzZWN0aW5nKHIueCxyLnkpfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJblhCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbllCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzLmNhbGwobixyKX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuX2VudGl0aWVzSW50ZXJzZWN0aW5nPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPVtdLG89dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllcygpLGE9by5sZW5ndGgscz0wO3M8YTtzKyspe3ZhciBsPW9bc107eGwuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCb3VuZHMobCkpJiZpLnB1c2godGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGwpKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX3VwZGF0ZUxlbmd0aFNjYWxlPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5sZW5ndGgoKS5zY2FsZTtyIGluc3RhbmNlb2YgbUt0LlF1YW50aXRhdGl2ZVNjYWxlJiYoci5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksci5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpLHRoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChmdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHIpfSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMubGVuZ3RoKCkuc2NhbGUsbz1pLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKSxhPXt4MTp0aGlzLl9pc1ZlcnRpY2FsPzA6byx5MTp0aGlzLl9pc1ZlcnRpY2FsP286MCx4Mjp0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTpvLHkyOnRoaXMuX2lzVmVydGljYWw/bzp0aGlzLmhlaWdodCgpfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLGEpLHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQocykubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmeGwuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKX0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpLG87aWYocj09PSJ4IiYmdGhpcy5faXNWZXJ0aWNhbClvPXRoaXMueCgpO2Vsc2UgaWYocj09PSJ5IiYmIXRoaXMuX2lzVmVydGljYWwpbz10aGlzLnkoKTtlbHNlIHJldHVybiBpO2lmKCEobyYmby5zY2FsZSYmby5zY2FsZSBpbnN0YW5jZW9mIG1LdC5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJuIGk7dmFyIGE9by5zY2FsZSxzPXRoaXMuX2JhclBpeGVsVGhpY2tuZXNzKCk7cmV0dXJuIGk9aS5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIEFhdC5leHRlbnQoW2EuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMF0pLHMpKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKStzKSxhLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzFdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykrcyldKX0pLGl9LHQucHJvdG90eXBlLl9nZXRQb3NpdGlvbkF0dHI9ZnVuY3Rpb24ocixuKXtzd2l0Y2godGhpcy5faXNWZXJ0aWNhbHx8KHItPW4sbio9LTEpLHRoaXMuX2JhckFsaWdubWVudCl7Y2FzZSJzdGFydCI6cmV0dXJuIHI7Y2FzZSJlbmQiOnJldHVybiByLW47Y2FzZSJtaWRkbGUiOmRlZmF1bHQ6cmV0dXJuIHItbi8yfX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0RGF0YVRvRHJhdygpLGk9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbz10aGlzLmRhdGFzZXRzKCkuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gbi5nZXQoYSkuc29tZShmdW5jdGlvbihzLGwpe3JldHVybiBzPT1udWxsPyExOnIuX2RyYXdMYWJlbChzLGwsYSxpKX0pfSk7dGhpcy5faGlkZUJhcnNJZkFueUFyZVRvb1dpZGUmJm8mJnRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiByLl9sYWJlbENvbmZpZy5nZXQoYSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLGg9dShyLG4saSksZj10aGlzLmxlbmd0aCgpLnNjYWxlLHA9ZiE9bnVsbD9mLnNjYWxlKGgpOmgsZD1mIT1udWxsP2Yuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpOnRoaXMuYmFzZWxpbmVWYWx1ZSgpLGc9e3g6by54KHIsbixpKSx5Om8ueShyLG4saSl9LF89e3dpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9LHk9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoaCxyLG4saSkseD1sLm1lYXN1cmUoeSksYj10aGlzLl9zaG91bGRTaG93TGFiZWxPbkJhcihnLF8seCksUz10aGlzLl9pc1ZlcnRpY2FsP3A8PWQ6cDxkLEM9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKGcsXyx4LGIsUyksUD1DLmNvbnRhaW5lckRpbWVuc2lvbnMsaz1DLmxhYmVsQ29udGFpbmVyT3JpZ2luLE89Qy5sYWJlbE9yaWdpbixEPUMuYWxpZ25tZW50LEI9by5maWxsKHIsbixpKSxJPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMsayxPLHgsYixCKSxMPXt4QWxpZ246RC54LHlBbGlnbjpELnl9O2Mud3JpdGUoeSxQLndpZHRoLFAuaGVpZ2h0LEwsSS5ub2RlKCkpO3ZhciBSPXRoaXMuX2lzVmVydGljYWw/Xy53aWR0aDx4LndpZHRoOl8uaGVpZ2h0PHguaGVpZ2h0O3JldHVybiBSfSx0LnByb3RvdHlwZS5fc2hvdWxkU2hvd0xhYmVsT25CYXI9ZnVuY3Rpb24ocixuLGkpe2lmKHRoaXMuX2xhYmVsc1Bvc2l0aW9uPT09R3UuTGFiZWxzUG9zaXRpb24ub3V0c2lkZSlyZXR1cm4hMTt2YXIgbz10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYT10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgscz10aGlzLl9pc1ZlcnRpY2FsP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLGw9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGM9bythLHU9YTtyZXR1cm4gYz5zP3U9cy1vOm88MCYmKHU9YyksbCt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUjw9dX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMsbD10aGlzLl9pc1ZlcnRpY2FsP3IueTpyLngsYz10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om4ud2lkdGgsdT10aGlzLl9pc1ZlcnRpY2FsP2kuaGVpZ2h0Omkud2lkdGgsaD0iY2VudGVyIixmPWMscD1sLGQ9bCxnPWZ1bmN0aW9uKF8pe3N3aXRjaChfKXtjYXNlInRvcExlZnQiOmg9cy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIscCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI7cmV0dXJuO2Nhc2UiY2VudGVyIjpkKz0oYyt1KS8yO3JldHVybjtjYXNlImJvdHRvbVJpZ2h0IjpoPXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUixkKz1mLXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLXU7cmV0dXJufX07aWYobylzd2l0Y2godGhpcy5fbGFiZWxzUG9zaXRpb24pe2Nhc2UgR3UuTGFiZWxzUG9zaXRpb24uc3RhcnQ6ZyhhPyJib3R0b21SaWdodCI6InRvcExlZnQiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLm1pZGRsZTpnKCJjZW50ZXIiKTticmVhaztjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLmVuZDpnKGE/InRvcExlZnQiOiJib3R0b21SaWdodCIpO2JyZWFrfWVsc2UgYT8oaD10aGlzLl9pc1ZlcnRpY2FsPyJ0b3AiOiJsZWZ0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxwLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1LGQtPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UpOihoPXRoaXMuX2lzVmVydGljYWw/ImJvdHRvbSI6InJpZ2h0IixmPWMrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkKz1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSKTtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6dGhpcy5faXNWZXJ0aWNhbD9uLndpZHRoOmYsaGVpZ2h0OnRoaXMuX2lzVmVydGljYWw/ZjpuLmhlaWdodH0sbGFiZWxDb250YWluZXJPcmlnaW46e3g6dGhpcy5faXNWZXJ0aWNhbD9yLng6cCx5OnRoaXMuX2lzVmVydGljYWw/cDpyLnl9LGxhYmVsT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54K24ud2lkdGgvMi1pLndpZHRoLzI6ZCx5OnRoaXMuX2lzVmVydGljYWw/ZDpyLnkrbi5oZWlnaHQvMi1pLmhlaWdodC8yfSxhbGlnbm1lbnQ6e3g6dGhpcy5faXNWZXJ0aWNhbD8iY2VudGVyIjpoLHk6dGhpcy5faXNWZXJ0aWNhbD9oOiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtpZihhKXtsLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApO3ZhciBjPXhsLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIscykqMS42PHhsLkNvbG9yLmNvbnRyYXN0KCJibGFjayIscyk7bC5jbGFzc2VkKGM/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCIsITApfWVsc2UgbC5jbGFzc2VkKCJvZmYtYmFyLWxhYmVsIiwhMCk7cmV0dXJuIGx9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCI7blthXT1mdW5jdGlvbigpe3JldHVybiBvfSxuW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoZ0t0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihnS3QuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIscz10aGlzLl9pc1ZlcnRpY2FsPyJ4IjoieSIsbD1oQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnBvc2l0aW9uKCkpLGM9aEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5sZW5ndGgoKSksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKG8tYyhkLGcsXykpfSxoPW5bdC5fQkFSX1RISUNLTkVTU19LRVldLGY9bi5nYXAscD1mPT1udWxsP2g6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWgoZCxnLF8pO3JldHVybiB5PHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD95OnktZihkLGcsXyl9O3JldHVybiBuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/cDp1LG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/dTpwLG5bYV09ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PWMoZCxnLF8pO3JldHVybiB5Pm8/bzp5fSxuW3NdPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5fZ2V0UG9zaXRpb25BdHRyKGwoZCxnLF8pLGgoZCxnLF8pKX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZVRoaWNrbmVzc0F0dHI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5wb3NpdGlvbigpLGk9dGhpcy5iYXJFbmQoKTtuIT1udWxsJiZpIT1udWxsPyh0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSExLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbihvLGEscyl7dmFyIGw9bi5hY2Nlc3NvcihvLGEscyksYz1pLmFjY2Vzc29yKG8sYSxzKTtyZXR1cm4gbD1uLnNjYWxlP24uc2NhbGUuc2NhbGUobCk6bCxjPWkuc2NhbGU/aS5zY2FsZS5zY2FsZShjKTpjLE1hdGguYWJzKGMtbCl9KSk6KHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M9ITAsdGhpcy5hdHRyKHQuX0JBUl9USElDS05FU1NfS0VZLGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2JhclBpeGVsVGhpY2tuZXNzKCl9KSl9LHQucHJvdG90eXBlLl9iYXJQaXhlbFRoaWNrbmVzcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzJiZ0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKT90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3ModGhpcy5wb3NpdGlvbigpLHRoaXMuZGF0YXNldHMoKSx0aGlzLl9pc1ZlcnRpY2FsP3RoaXMud2lkdGgoKTp0aGlzLmhlaWdodCgpKTowfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXtpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLCF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSlyZXR1cm5bXTt2YXIgbj1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIG59LHQucHJvdG90eXBlLl9lbnRpdHlCb3VuZHM9ZnVuY3Rpb24ocil7dmFyIG49ci5kYXR1bSxpPXIuaW5kZXgsbz1yLmRhdGFzZXQ7cmV0dXJuIHRoaXMuX3BpeGVsQm91bmRzKG4saSxvKX0sdC5wcm90b3R5cGUuX3BpeGVsQm91bmRzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm57eDpvLngocixuLGkpLHk6by55KHIsbixpKSx3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX3BpeGVsQm91bmRzKHIsbixpKSxhPSh0aGlzLl9pc1ZlcnRpY2FsP2hCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKTpoQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSkpKHIsbixpKSxzPSh0aGlzLl9pc1ZlcnRpY2FsP3RoaXMueSgpLnNjYWxlOnRoaXMueCgpLnNjYWxlKS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSk7cmV0dXJuIHRoaXMuX3BpeGVsUG9pbnRCYXIoYSxzLG8pfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludEJhcj1mdW5jdGlvbihyLG4saSl7dmFyIG8sYTtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD8obz1pLngraS53aWR0aC8yLGE9cjw9bj9pLnk6aS55K2kuaGVpZ2h0KToobz1yPj1uP2kueCtpLndpZHRoOmkueCxhPWkueStpLmhlaWdodC8yKSx7eDpvLHk6YX19LHQucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleT1mdW5jdGlvbihyLG4pe2UucHJvdG90eXBlLl91bmluc3RhbGxTY2FsZUZvcktleS5jYWxsKHRoaXMscixuKX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49bmV3IHhsLk1hcCxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy53aWR0aCgpLGE9dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9cy5kYXRhKCkubWFwKGZ1bmN0aW9uKGMsdSl7dmFyIGg9ci5faXNEYXR1bU9uU2NyZWVuKGksbyxhLGMsdSxzKTtyZXR1cm4gaD9jOm51bGx9KTtuLnNldChzLGwpfSksbn0sdC5wcm90b3R5cGUuX2lzRGF0dW1PblNjcmVlbj1mdW5jdGlvbihyLG4saSxvLGEscyl7dmFyIGw9ci54KG8sYSxzKSxjPXIueShvLGEscyksdT1yLndpZHRoKG8sYSxzKSxoPXIuaGVpZ2h0KG8sYSxzKSxmPXhsLk1hdGguaXNWYWxpZE51bWJlcihsKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIodSkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihoKTtyZXR1cm4gZj94bC5NYXRoLmJvdW5kc0ludGVyc2VjdHMobCxjLHUsaCwwLDAsbixpKTohMX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KG4pLm1lYXN1cmVyLnJlc2V0KCl9KX0sdC5fQkFSX1RISUNLTkVTU19SQVRJTz0uOTUsdC5fQkFSX0dBUExFU1NfVEhSRVNIT0xEX1BYPTMsdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU89LjQsdC5fQkFSX0FSRUFfQ0xBU1M9ImJhci1hcmVhIix0Ll9CQVJfRU5EX0tFWT0iYmFyRW5kIix0Ll9CQVJfVEhJQ0tORVNTX0tFWT0id2lkdGgiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9ImJhci1sYWJlbC10ZXh0LWFyZWEiLHQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSPTEwLHR9KHRVZS5YWVBsb3QpO0d1LkJhcj1JYXQ7ZnVuY3Rpb24gZVVlKGUsdCxyKXt2YXIgbixpPWUuc2NhbGU7aWYoaSBpbnN0YW5jZW9mIFBhdC5DYXRlZ29yeSluPWkucmFuZ2VCYW5kKCk7ZWxzZXt2YXIgbz1lLmFjY2Vzc29yLGE9QWF0LnNldCh4bC5BcnJheS5mbGF0dGVuKHQubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbyh1LGgsYyl9KS5maWx0ZXIoZnVuY3Rpb24odSl7cmV0dXJuIHUhPW51bGx9KS5tYXAoZnVuY3Rpb24odSl7cmV0dXJuIHUudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pO2Euc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBjLXV9KTt2YXIgcz1hLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gaS5zY2FsZShjKX0pLGw9QWF0LnBhaXJzKHMpO249eGwuTWF0aC5taW4obCxmdW5jdGlvbihjLHUpe3JldHVybiBNYXRoLmFicyhjWzFdLWNbMF0pfSxyKklhdC5fU0lOR0xFX0JBUl9ESU1FTlNJT05fUkFUSU8pLG4qPUlhdC5fQkFSX1RISUNLTkVTU19SQVRJT31yZXR1cm4gbn19KTt2YXIgeUt0PUgoa2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByVWU9KGRlKCksVXQocGUpKSxuVWU9a3MoKSxpVWU9RmUoKSxfS3Q9eTQoKSxvVWU9cnMoKSxhVWU9ZnVuY3Rpb24oZSl7clVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2NsdXN0ZXJPZmZzZXRzPW5ldyBpVWUuTWFwLG59cmV0dXJuIHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX21ha2VJbm5lclNjYWxlKCksbz1mdW5jdGlvbihsLGMpe3JldHVybiBpLnJhbmdlQmFuZCgpfTtuLndpZHRoPXRoaXMuX2lzVmVydGljYWw/bzpuLndpZHRoLG4uaGVpZ2h0PXRoaXMuX2lzVmVydGljYWw/bi5oZWlnaHQ6bzt2YXIgYT1uLngscz1uLnk7cmV0dXJuIG4ueD10aGlzLl9pc1ZlcnRpY2FsP2Z1bmN0aW9uKGwsYyx1KXtyZXR1cm4gYShsLGMsdSkrci5fY2x1c3Rlck9mZnNldHMuZ2V0KHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpfSxuLnk9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpfTpmdW5jdGlvbihsLGMsdSl7cmV0dXJuIHMobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX0sbn0sdC5wcm90b3R5cGUuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9tYWtlSW5uZXJTY2FsZSgpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGksbyl7cmV0dXJuIHIuX2NsdXN0ZXJPZmZzZXRzLnNldChpLG4uc2NhbGUoU3RyaW5nKG8pKS1uLnJhbmdlQmFuZCgpLzIpfSl9LHQucHJvdG90eXBlLl9tYWtlSW5uZXJTY2FsZT1mdW5jdGlvbigpe3ZhciByPW5ldyBuVWUuQ2F0ZWdvcnk7ci5kb21haW4odGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbihpLG8pe3JldHVybiBTdHJpbmcobyl9KSk7dmFyIG49b1VlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuYXR0cihfS3QuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpO3JldHVybiByLnJhbmdlKFswLG4obnVsbCwwLG51bGwpXSkscn0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlQ2x1c3RlclBvc2l0aW9uKCksZS5wcm90b3R5cGUuX2dldERhdGFUb0RyYXcuY2FsbCh0aGlzKX0sdH0oX0t0LkJhcik7a2F0LkNsdXN0ZXJlZEJhcj1hVWV9KTt2YXIgdkt0PUgoTmF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzVWU9KGRlKCksVXQocGUpKSx2ND0oRXIoKSxVdChNcikpLFJhdD1fbCgpLGxVZT1MZigpLGNVZT1CdSgpLHVVZT1rcygpLFZ2PUZlKCksaFVlPWZhdCgpLGZVZT1kYXQoKSxwVWU9VXUoKSxkVWU9QUYoKSxNZD1ycygpLG1VZT1mdW5jdGlvbihlKXtzVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhcnRBbmdsZT0wLHIuX2VuZEFuZ2xlPTIqTWF0aC5QSSxyLl9sYWJlbEZvcm1hdHRlcj1jVWUuaWRlbnRpdHkoKSxyLl9sYWJlbHNFbmFibGVkPSExLHIuaW5uZXJSYWRpdXMoMCksci5vdXRlclJhZGl1cyhmdW5jdGlvbigpe3ZhciBuPXIuX3BpZUNlbnRlcigpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heChyLndpZHRoKCktbi54LG4ueCksTWF0aC5tYXgoci5oZWlnaHQoKS1uLnksbi55KSl9KSxyLmFkZENsYXNzKCJwaWUtcGxvdCIpLHIuYXR0cigiZmlsbCIsZnVuY3Rpb24obixpKXtyZXR1cm4gU3RyaW5nKGkpfSxuZXcgdVVlLkNvbG9yKSxyLl9zdHJva2VEcmF3ZXJzPW5ldyBWdi5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIG4uYXR0YWNoVG8oci5fcmVuZGVyQXJlYSl9KX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7ZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpO3ZhciBvPXRoaXMuX3BpZUNlbnRlcigpO3RoaXMuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrby54KyIsIitvLnkrIikiKTt2YXIgYT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLndpZHRoKCktby54LG8ueCksTWF0aC5tYXgodGhpcy5oZWlnaHQoKS1vLnksby55KSk7cmV0dXJuIHRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZSE9bnVsbCYmdGhpcy5pbm5lclJhZGl1cygpLnNjYWxlLnJhbmdlKFswLGFdKSx0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMub3V0ZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpc30sdC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuYWRkRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX2FkZERhdGFzZXQ9ZnVuY3Rpb24ocil7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTEpcmV0dXJuIFZ2LldpbmRvdy53YXJuKCJPbmx5IG9uZSBkYXRhc2V0IGlzIHN1cHBvcnRlZCBpbiBQaWUgcGxvdHMiKSx0aGlzO3RoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKTt2YXIgbj1uZXcgZlVlLkFyY091dGxpbmVTVkdEcmF3ZXI7cmV0dXJuIHRoaXMuX2lzU2V0dXAmJm4uYXR0YWNoVG8odGhpcy5fcmVuZGVyQXJlYSksdGhpcy5fc3Ryb2tlRHJhd2Vycy5zZXQocixuKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZ2V0KHIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXMuX3N0cm9rZURyYXdlcnMuZGVsZXRlKHIpLHRoaXMuX3N0YXJ0QW5nbGVzPVtdLHRoaXMuX2VuZEFuZ2xlcz1bXSx0aGlzfSx0LnByb3RvdHlwZS5zZWxlY3Rpb25zPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5zZWxlY3Rpb25zLmNhbGwodGhpcyxyKS5ub2RlcygpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bi5fc3Ryb2tlRHJhd2Vycy5nZXQobyk7YSE9bnVsbCYmaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksdjQuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHBVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgaFVlLkFyY1NWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gZFVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFBpZSBQbG90ISIpLG51bGx9KX0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpO3ZhciBpPWUucHJvdG90eXBlLmVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7by5wb3NpdGlvbi54Kz1uLndpZHRoKCkvMixvLnBvc2l0aW9uLnkrPW4uaGVpZ2h0KCkvMjt2YXIgYT12NC5zZWxlY3Qobi5fc3Ryb2tlRHJhd2Vycy5nZXQoby5kYXRhc2V0KS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KG8uaW5kZXgpKSxzPW87cmV0dXJuIHMuc3Ryb2tlU2VsZWN0aW9uPWEsc30pfSx0LnByb3RvdHlwZS5zZWN0b3JWYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1NFQ1RPUl9WQUxVRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0VDVE9SX1ZBTFVFX0tFWSxyLG4pLHRoaXMuX3VwZGF0ZVBpZUFuZ2xlcygpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmlubmVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fSU5ORVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9JTk5FUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUub3V0ZXJSYWRpdXM9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9PVVRFUl9SQURJVVNfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX09VVEVSX1JBRElVU19LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YXJ0QW5nbGU6KHRoaXMuX3N0YXJ0QW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbmRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmRBbmdsZToodGhpcy5fZW5kQW5nbGU9cix0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbEZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbEZvcm1hdHRlcjoodGhpcy5fbGFiZWxGb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXt4OnRoaXMud2lkdGgoKS8yLHk6dGhpcy5oZWlnaHQoKS8yfSxpPXt4OnIueC1uLngseTpyLnktbi55fSxvPXRoaXMuX3NsaWNlSW5kZXhGb3JQb2ludChpKTtyZXR1cm4gbz09bnVsbD9bXTpbdGhpcy5lbnRpdGllcygpW29dXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksaT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpLG89TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKTtyZXR1cm4gbi5kPWZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdjQuYXJjKCkuaW5uZXJSYWRpdXMoaShhLHMsbCkpLm91dGVyUmFkaXVzKG8oYSxzLGwpKS5zdGFydEFuZ2xlKHIuX3N0YXJ0QW5nbGVzW3NdKS5lbmRBbmdsZShyLl9lbmRBbmdsZXNbc10pKGEscyl9LG59LHQucHJvdG90eXBlLl91cGRhdGVQaWVBbmdsZXM9ZnVuY3Rpb24oKXtpZih0aGlzLnNlY3RvclZhbHVlKCkhPW51bGwmJnRoaXMuZGF0YXNldHMoKS5sZW5ndGghPT0wKXt2YXIgcj1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChuKSxvPXY0LnBpZSgpLnNvcnQobnVsbCkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkudmFsdWUoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcihhLHMsbil9KShpKTt0aGlzLl9zdGFydEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5zdGFydEFuZ2xlfSksdGhpcy5fZW5kQW5nbGVzPW8ubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmVuZEFuZ2xlfSl9fSx0LnByb3RvdHlwZS5fcGllQ2VudGVyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9zdGFydEFuZ2xlOnRoaXMuX2VuZEFuZ2xlLG49dGhpcy5fc3RhcnRBbmdsZTx0aGlzLl9lbmRBbmdsZT90aGlzLl9lbmRBbmdsZTp0aGlzLl9zdGFydEFuZ2xlLGk9TWF0aC5zaW4ociksbz1NYXRoLmNvcyhyKSxhPU1hdGguc2luKG4pLHM9TWF0aC5jb3MobiksbCxjLHUsaDtyZXR1cm4gaT49MCYmYT49MD9vPj0wJiZzPj0wPyhsPW8sYz0wLGg9MCx1PWEpOm88MCYmczwwPyhsPTAsYz0tcyxoPTAsdT1pKTpvPj0wJiZzPDA/KGw9byxjPS1zLGg9MCx1PWkpOm88MCYmcz49MCYmKGw9MSxjPTEsaD0xLHU9TWF0aC5tYXgoaSxhKSk6aT49MCYmYTwwP28+PTAmJnM+PTA/KGw9TWF0aC5tYXgobyxzKSxjPTEsaD0xLHU9MSk6bzwwJiZzPDA/KGw9MCxjPTEsaD0tYSx1PWkpOm8+PTAmJnM8MD8obD1vLGM9MSxoPS1hLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9MSxoPTEsdT1pKTppPDAmJmE+PTA/bz49MCYmcz49MD8obD0xLGM9MCxoPS1pLHU9YSk6bzwwJiZzPDA/KGw9MSxjPU1hdGgubWF4KC1vLC1zKSxoPTEsdT0xKTpvPj0wJiZzPDA/KGw9MSxjPS1zLGg9LWksdT0xKTpvPDAmJnM+PTAmJihsPTEsYz0tbyxoPTEsdT1hKTppPDAmJmE8MCYmKG8+PTAmJnM+PTA/KGw9cyxjPTAsaD0taSx1PTApOm88MCYmczwwPyhsPTAsYz0tbyxoPS1hLHU9MCk6bz49MCYmczwwPyhsPTEsYz0xLGg9TWF0aC5tYXgobywtcyksdT0xKTpvPDAmJnM+PTAmJihsPXMsYz0tbyxoPTEsdT0wKSkse3g6aCt1PT0wPzA6aC8oaCt1KSp0aGlzLndpZHRoKCkseTpsK2M9PTA/MDpsLyhsK2MpKnRoaXMuaGVpZ2h0KCl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyk7aWYodGhpcy5kYXRhc2V0cygpLmxlbmd0aD09PTApcmV0dXJuIHI7dmFyIG49TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxpPXRoaXMuZGF0YXNldHMoKVswXSxvPXIuZ2V0KGkpLGE9by5maWx0ZXIoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdC5faXNWYWxpZERhdGEobihzLGwsaSkpfSk7cmV0dXJuIHIuc2V0KGksYSkscn0sdC5faXNWYWxpZERhdGE9ZnVuY3Rpb24ocil7cmV0dXJuIFZ2Lk1hdGguaXNWYWxpZE51bWJlcihyKSYmcj49MH0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSk7aWYoIXQuX2lzVmFsaWREYXRhKG8ocixuLGkpKSlyZXR1cm57eDpOYU4seTpOYU59O3ZhciBhPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuaW5uZXJSYWRpdXMoKSkocixuLGkpLHM9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5vdXRlclJhZGl1cygpKShyLG4saSksbD0oYStzKS8yLGM9djQucGllKCkuc29ydChudWxsKS52YWx1ZShmdW5jdGlvbihwLGQpe3ZhciBnPW8ocCxkLGkpO3JldHVybiB0Ll9pc1ZhbGlkRGF0YShnKT9nOjB9KS5zdGFydEFuZ2xlKHRoaXMuX3N0YXJ0QW5nbGUpLmVuZEFuZ2xlKHRoaXMuX2VuZEFuZ2xlKShpLmRhdGEoKSksdT1jW25dLnN0YXJ0QW5nbGUsaD1jW25dLmVuZEFuZ2xlLGY9KHUraCkvMjtyZXR1cm57eDpsKk1hdGguc2luKGYpLHk6LWwqTWF0aC5jb3MoZil9fSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3QoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmVnYuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0xhYmVscygpfSxyKTt2YXIgaT10aGlzLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcygpLG89dGhpcy5fZ2V0RGF0YVRvRHJhdygpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPU1kLlBsb3QuYXBwbHlEcmF3U3RlcHMoaSxhKTtuLl9zdHJva2VEcmF3ZXJzLmdldChhKS5kcmF3KG8uZ2V0KGEpLHMpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZVN0cm9rZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVyblt7YXR0clRvUHJvamVjdG9yOnIsYW5pbWF0b3I6bmV3IGxVZS5OdWxsfV19LHQucHJvdG90eXBlLl9zbGljZUluZGV4Rm9yUG9pbnQ9ZnVuY3Rpb24ocil7dmFyIG49TWF0aC5zcXJ0KE1hdGgucG93KHIueCwyKStNYXRoLnBvdyhyLnksMikpLGk9TWF0aC5hY29zKC1yLnkvbik7ci54PDAmJihpPU1hdGguUEkqMi1pKTtmb3IodmFyIG8sYT0wO2E8dGhpcy5fc3RhcnRBbmdsZXMubGVuZ3RoO2ErKylpZih0aGlzLl9zdGFydEFuZ2xlc1thXTxpJiZ0aGlzLl9lbmRBbmdsZXNbYV0+aSl7bz1hO2JyZWFrfWlmKG8hPT12b2lkIDApe3ZhciBzPXRoaXMuZGF0YXNldHMoKVswXSxsPXMuZGF0YSgpW29dLGM9dGhpcy5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGwsbyxzKSx1PXRoaXMub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyk7aWYobj5jJiZuPHUpcmV0dXJuIG99cmV0dXJuIG51bGx9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxpPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLG89bmV3IFJhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBSYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBSYXQuV3JpdGVyKGEsbyksbD10aGlzLmRhdGFzZXRzKClbMF0sYz10aGlzLl9nZXREYXRhVG9EcmF3KCkuZ2V0KGwpLHU9Yy5sZW5ndGgsaD1mdW5jdGlvbihkKXt2YXIgZz1jW2RdLF89Zi5zZWN0b3JWYWx1ZSgpLmFjY2Vzc29yKGcsZCxsKTtpZighVnYuTWF0aC5pc1ZhbGlkTnVtYmVyKF8pKXJldHVybiJjb250aW51ZSI7Xz1mLl9sYWJlbEZvcm1hdHRlcihfLGcsZCxsKTt2YXIgeT1hLm1lYXN1cmUoXykseD0oZi5fZW5kQW5nbGVzW2RdK2YuX3N0YXJ0QW5nbGVzW2RdKS8yLGI9Zi5vdXRlclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLm91dGVyUmFkaXVzKCkuc2NhbGUmJihiPWYub3V0ZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShiKSk7dmFyIFM9Zi5pbm5lclJhZGl1cygpLmFjY2Vzc29yKGcsZCxsKTtmLmlubmVyUmFkaXVzKCkuc2NhbGUmJihTPWYuaW5uZXJSYWRpdXMoKS5zY2FsZS5zY2FsZShTKSk7dmFyIEM9KGIrUykvMixQPU1hdGguc2luKHgpKkMteS53aWR0aC8yLGs9LU1hdGguY29zKHgpKkMteS5oZWlnaHQvMixPPVt7eDpQLHk6a30se3g6UCx5OmsreS5oZWlnaHR9LHt4OlAreS53aWR0aCx5Omt9LHt4OlAreS53aWR0aCx5OmsreS5oZWlnaHR9XSxEPU8uZXZlcnkoZnVuY3Rpb24oeil7cmV0dXJuIE1hdGguYWJzKHoueCk8PXIud2lkdGgoKS8yJiZNYXRoLmFicyh6LnkpPD1yLmhlaWdodCgpLzJ9KTtpZihEKXt2YXIgQj1PLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gci5fc2xpY2VJbmRleEZvclBvaW50KHopfSk7RD1CLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiB6PT09ZH0pfXZhciBJPW4uZmlsbChnLGQsbCksTD1Wdi5Db2xvci5jb250cmFzdCgid2hpdGUiLEkpKjEuNjxWdi5Db2xvci5jb250cmFzdCgiYmxhY2siLEkpLFI9aS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksRj1MPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1IuY2xhc3NlZChGLCEwKSxSLnN0eWxlKCJ2aXNpYmlsaXR5IixEPyJpbmhlcml0IjoiaGlkZGVuIikscy53cml0ZShfLHkud2lkdGgseS5oZWlnaHQse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9LFIubm9kZSgpKX0sZj10aGlzLHA9MDtwPHU7cCsrKWgocCl9LHQuX0lOTkVSX1JBRElVU19LRVk9ImlubmVyLXJhZGl1cyIsdC5fT1VURVJfUkFESVVTX0tFWT0ib3V0ZXItcmFkaXVzIix0Ll9TRUNUT1JfVkFMVUVfS0VZPSJzZWN0b3ItdmFsdWUiLHR9KE1kLlBsb3QpO05hdC5QaWU9bVVlfSk7dmFyIHhLdD1IKE9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ1VlPShkZSgpLFV0KHBlKSksX1VlPShFcigpLFV0KE1yKSksRGF0PV9sKCkseVVlPUxmKCksdlVlPUJ2KCkseFVlPVV1KCksYlVlPW9CKCksZkI9a3MoKSxPYz1GZSgpLHBCPXJzKCksd1VlPUh2KCksU1VlPWZ1bmN0aW9uKGUpe2dVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9sYWJlbHNFbmFibGVkPSExLHIuX2xhYmVsPW51bGwsci5hbmltYXRvcigicmVjdGFuZ2xlcyIsbmV3IHlVZS5OdWxsKSxyLmFkZENsYXNzKCJyZWN0YW5nbGUtcGxvdCIpLHIuYXR0cigiZmlsbCIsbmV3IGZCLkNvbG9yKCkucmFuZ2UoKVswXSkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgeFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBiVWUuUmVjdGFuZ2xlU1ZHRHJhd2VyfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3IHZVZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLG89blt0Ll9YMl9LRVldLGE9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9blt0Ll9ZMl9LRVldLGw9dGhpcy54KCkuc2NhbGUsYz10aGlzLnkoKS5zY2FsZTtyZXR1cm4gbyE9bnVsbD8obi53aWR0aD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKG8odSxoLGYpLWkodSxoLGYpKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5taW4obyh1LGgsZiksaSh1LGgsZikpfSk6KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChsKX0sbi54PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gaSh1LGgsZiktLjUqbi53aWR0aCh1LGgsZil9KSxzIT1udWxsPyhuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGguYWJzKHModSxoLGYpLWEodSxoLGYpKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gTWF0aC5tYXgocyh1LGgsZiksYSh1LGgsZikpLW4uaGVpZ2h0KHUsaCxmKX0pOihuLmhlaWdodD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIHIuX3JlY3RhbmdsZVdpZHRoKGMpfSxuLnk9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBhKHUsaCxmKS0uNSpuLmhlaWdodCh1LGgsZil9KSxkZWxldGUgblt0Ll9YMl9LRVldLGRlbGV0ZSBuW3QuX1kyX0tFWV0sbn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7cmV0dXJuW3thdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoInJlY3RhbmdsZXMiKX1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpO2lmKG49PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuLGkpLG4hPW51bGwpe3ZhciBvPXRoaXMueDIoKSxhPW8mJm8uYWNjZXNzb3I7YSE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxhLG4sby5wb3N0U2NhbGUpfXJldHVybiBuIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkmJm4uaW5uZXJQYWRkaW5nKDApLm91dGVyUGFkZGluZygwKSx0aGlzfSx0LnByb3RvdHlwZS54Mj1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIGk9dGhpcy54KCksbz1pJiZpLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsbyxuKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnkuY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLnkyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGZCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueTI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBpPXRoaXMueSgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3ZhciBvPWkuZGF0dW0sYT1pLmluZGV4LHM9aS5kYXRhc2V0LGw9bi54KG8sYSxzKSxjPW4ueShvLGEscyksdT1uLndpZHRoKG8sYSxzKSxoPW4uaGVpZ2h0KG8sYSxzKTtyZXR1cm4gbDw9ci54JiZyLng8PWwrdSYmYzw9ci55JiZyLnk8PWMraH0pfSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9lbnRpdHlCQm94KG4saSxvLHRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpKX0sdC5wcm90b3R5cGUuX2VudGl0eUJCb3g9ZnVuY3Rpb24ocixuLGksbyl7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLmxhYmVsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsOih0aGlzLl9sYWJlbD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMueDIoKSE9bnVsbCYmKHIueDI9cEIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSksdGhpcy55MigpIT1udWxsJiYoci55Mj1wQi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkyKCkpKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT1vLngocixuLGkpLHM9by55KHIsbixpKSxsPW8ud2lkdGgocixuLGkpLGM9by5oZWlnaHQocixuLGkpLHU9YStsLzIsaD1zK2MvMjtyZXR1cm57eDp1LHk6aH19LHQucHJvdG90eXBlLl9yZWN0YW5nbGVXaWR0aD1mdW5jdGlvbihyKXtpZihyIGluc3RhbmNlb2YgZkIuQ2F0ZWdvcnkpcmV0dXJuIHIucmFuZ2VCYW5kKCk7dmFyIG49cj09PXRoaXMueCgpLnNjYWxlP3RoaXMueCgpLmFjY2Vzc29yOnRoaXMueSgpLmFjY2Vzc29yLGk9X1VlLnNldChPYy5BcnJheS5mbGF0dGVuKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGF0YSgpLm1hcChmdW5jdGlvbih1LGgpe3JldHVybiBuKHUsaCxjKS52YWx1ZU9mKCl9KX0pKSkudmFsdWVzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybitjfSksbz1PYy5NYXRoLm1pbihpLDApLGE9T2MuTWF0aC5tYXgoaSwwKSxzPXIuc2NhbGUobyksbD1yLnNjYWxlKGEpO3JldHVybihsLXMpL01hdGguYWJzKGEtbyl9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9bmV3IE9jLk1hcCxuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKS5tYXAoZnVuY3Rpb24oYSxzKXt2YXIgbD1PYy5NYXRoLmlzVmFsaWROdW1iZXIobi54KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLnkoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ud2lkdGgoYSxzLGkpKSYmT2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4uaGVpZ2h0KGEscyxpKSk7cmV0dXJuIGw/YTpudWxsfSk7ci5zZXQoaSxvKX0pLHJ9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9yZW5kZXJBcmVhLnNlbGVjdEFsbCgiLmxhYmVsLWFyZWEiKS5yZW1vdmUoKSx0aGlzLl9sYWJlbHNFbmFibGVkJiZ0aGlzLmxhYmVsKCkhPW51bGwmJk9jLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9kcmF3TGFiZWwobixpLG8pfSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZCgibGFiZWwtYXJlYSIsITApLHM9bmV3IERhdC5TdmdDb250ZXh0KGEubm9kZSgpKSxsPW5ldyBEYXQuQ2FjaGVNZWFzdXJlcihzKSxjPW5ldyBEYXQuV3JpdGVyKGwscyksdT10aGlzLngoKS5zY2FsZS5yYW5nZSgpLGg9dGhpcy55KCkuc2NhbGUucmFuZ2UoKSxmPU1hdGgubWluLmFwcGx5KG51bGwsdSkscD1NYXRoLm1heC5hcHBseShudWxsLHUpLGQ9TWF0aC5taW4uYXBwbHkobnVsbCxoKSxnPU1hdGgubWF4LmFwcGx5KG51bGwsaCksXz1yLmdldChuKSx5PV8ubGVuZ3RoLHg9MDt4PHk7eCsrKXt2YXIgYj1fW3hdO2lmKGIhPW51bGwpe3ZhciBTPSIiK3RoaXMubGFiZWwoKShiLHgsbiksQz1sLm1lYXN1cmUoUyksUD1vLngoYix4LG4pLGs9by55KGIseCxuKSxPPW8ud2lkdGgoYix4LG4pLEQ9by5oZWlnaHQoYix4LG4pO2lmKEMuaGVpZ2h0PD1EJiZDLndpZHRoPD1PKXt2YXIgQj0oTy1DLndpZHRoKS8yLEk9KEQtQy5oZWlnaHQpLzI7UCs9QixrKz1JO3ZhciBMPXttaW46UCxtYXg6UCtDLndpZHRofSxSPXttaW46ayxtYXg6aytDLmhlaWdodH07aWYoTC5taW48Znx8TC5tYXg+cHx8Ui5taW48ZHx8Ui5tYXg+Z3x8dGhpcy5fb3ZlcmxheUxhYmVsKEwsUix4LGkscikpY29udGludWU7dmFyIEY9by5maWxsKGIseCxuKSx6PU9jLkNvbG9yLmNvbnRyYXN0KCJ3aGl0ZSIsRikqMS42PE9jLkNvbG9yLmNvbnRyYXN0KCJibGFjayIsRiksVT1hLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1ArIiwiK2srIikiKSxXPXo/ImRhcmstbGFiZWwiOiJsaWdodC1sYWJlbCI7VS5jbGFzc2VkKFcsITApLGMud3JpdGUoUyxDLndpZHRoLEMuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxVLm5vZGUoKSl9fX19LHQucHJvdG90eXBlLl9vdmVybGF5TGFiZWw9ZnVuY3Rpb24ocixuLGksbyxhKXtmb3IodmFyIHM9dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksbD10aGlzLmRhdGFzZXRzKCksYz1vO2M8bC5sZW5ndGg7YysrKWZvcih2YXIgdT1sW2NdLGg9YS5nZXQodSksZj1oLmxlbmd0aCxwPWM9PT1vP2krMTowO3A8ZjtwKyspaWYoT2MuRE9NLmludGVyc2VjdHNCQm94KHIsbix0aGlzLl9lbnRpdHlCQm94KGhbcF0scCx1LHMpKSlyZXR1cm4hMDtyZXR1cm4hMX0sdC5fWDJfS0VZPSJ4MiIsdC5fWTJfS0VZPSJ5MiIsdH0od1VlLlhZUGxvdCk7T2F0LlJlY3RhbmdsZT1TVWV9KTt2YXIgd0t0PUgoSGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBNVWU9KGRlKCksVXQocGUpKSx6YXQ9X2woKSxFVWU9QnUoKSxUVWU9WEYoKSxDVWU9VXUoKSxiS3Q9dmF0KCksQVVlPUxmKCksUFVlPUJ2KCksSVVlPWtzKCksRmF0PUZlKCksQmF0PUlTKCksYmw9cnMoKSxMVWU9SHYoKSxrVWU9ZnVuY3Rpb24oZSl7TVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fbGFiZWxGb3JtYXR0ZXI9RVVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJzY2F0dGVyLXBsb3QiKTt2YXIgbj1uZXcgQVVlLkVhc2luZztuLnN0YXJ0RGVsYXkoNSksbi5zdGVwRHVyYXRpb24oMjUwKSxuLm1heFRvdGFsRHVyYXRpb24oYmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksci5hbmltYXRvcihCYXQuQW5pbWF0b3IuTUFJTixuKSxyLmF0dHIoIm9wYWNpdHkiLC42KSxyLmF0dHIoImZpbGwiLG5ldyBJVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLnNpemUoNik7dmFyIGk9VFVlLmNpcmNsZSgpO3JldHVybiByLnN5bWJvbChmdW5jdGlvbigpe3JldHVybiBpfSksci5fbGFiZWxDb25maWc9bmV3IEZhdC5NYXAscn1yZXR1cm4gdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPWUucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzLmNhbGwodGhpcyxyKTtyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7dmFyIGE9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpKG8uZGF0dW0sby5pbmRleCxvLmRhdGFzZXQpO3JldHVybiBvLmRpYW1ldGVyPWEsb30pfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBDVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJLdC5TeW1ib2xTVkdEcmF3ZXJ9LGZ1bmN0aW9uKGkpe3JldHVybiBuZXcgUFVlLkNhbnZhc0RyYXdlcihpLGJLdC5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXAocixmdW5jdGlvbigpe3JldHVybiBibC5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnN5bWJvbCgpKX0sZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zaXplKCkpfSkpfSl9LHQucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TSVpFX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9TSVpFX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TWU1CT0xfS0VZKToodGhpcy5fcHJvcGVydHlCaW5kaW5ncy5zZXQodC5fU1lNQk9MX0tFWSx7YWNjZXNzb3I6cn0pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKTtuLmQ9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpKG8sYSxzKSgwKShudWxsKX0sci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihCYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKEJhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk7cmV0dXJuIHIueD1uLHIueT1pLHIudHJhbnNmb3JtPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4idHJhbnNsYXRlKCIrbihvLGEscykrIiwiK2kobyxhLHMpKyIpIn0sci5kPXRoaXMuX2NvbnN0cnVjdFN5bWJvbEdlbmVyYXRvcigpLHJ9LHQucHJvdG90eXBlLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3I9ZnVuY3Rpb24oKXt2YXIgcj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnN5bWJvbCgpKSxuPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKTtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3JldHVybiByKGksbyxhKShuKGksbyxhKSkobnVsbCl9fSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3JldHVybnt4OnIucG9zaXRpb24ueC1yLmRpYW1ldGVyLzIseTpyLnBvc2l0aW9uLnktci5kaWFtZXRlci8yLHdpZHRoOnIuZGlhbWV0ZXIsaGVpZ2h0OnIuZGlhbWV0ZXJ9fSx0LnByb3RvdHlwZS5fZW50aXR5VmlzaWJsZU9uUGxvdD1mdW5jdGlvbihyLG4pe3ZhciBpPXttaW46bi50b3BMZWZ0LngsbWF4Om4uYm90dG9tUmlnaHQueH0sbz17bWluOm4udG9wTGVmdC55LG1heDpuLmJvdHRvbVJpZ2h0Lnl9LGE9dGhpcy5fZW50aXR5Qm91bmRzKHIpO3JldHVybiBGYXQuRE9NLmludGVyc2VjdHNCQm94KGksbyxhKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksbz1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIHRoaXMuZW50aXRpZXMoKS5maWx0ZXIoZnVuY3Rpb24oYSl7dmFyIHM9YS5kYXR1bSxsPWEuaW5kZXgsYz1hLmRhdGFzZXQsdT1uKHMsbCxjKSxoPWkocyxsLGMpLGY9byhzLGwsYyk7cmV0dXJuIHUtZi8yPD1yLngmJnIueDw9dStmLzImJmgtZi8yPD1yLnkmJnIueTw9aCtmLzJ9KX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgemF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IHphdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IHphdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9sYWJlbENvbmZpZy5nZXQoaSkubGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSksdGhpcy5fbGFiZWxzRW5hYmxlZCYmRmF0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3RoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1uLmdldChvKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO2MhPW51bGwmJnIuX2RyYXdMYWJlbChjLGwsbyxpKX19KX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbD1mdW5jdGlvbihyLG4saSxvKXtpZihyLmxhYmVsIT1udWxsKXt2YXIgYT10aGlzLl9sYWJlbENvbmZpZy5nZXQoaSkscz1hLmxhYmVsQXJlYSxsPWEubWVhc3VyZXIsYz1hLndyaXRlcix1PXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxoPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2l6ZSgpKSxmPWgocixuLGkpLHA9dGhpcy5fbGFiZWxGb3JtYXR0ZXIoci5sYWJlbCxyLG4saSksZD1sLm1lYXN1cmUocCksZz10aGlzLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXModSxmLGQpLF89Zy5jb250YWluZXJEaW1lbnNpb25zLHk9Zy5sYWJlbENvbnRhaW5lck9yaWdpbix4PWcubGFiZWxPcmlnaW4sYj1nLmFsaWdubWVudCxTPXRoaXMuX2NyZWF0ZUxhYmVsQ29udGFpbmVyKHMseSx4LGQpLEM9e3hBbGlnbjpiLngseUFsaWduOmIueX07Yy53cml0ZShwLF8ud2lkdGgsXy5oZWlnaHQsQyxTLm5vZGUoKSl9fSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1uPGkuaGVpZ2h0P24vMit0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU6MDtyZXR1cm57Y29udGFpbmVyRGltZW5zaW9uczp7d2lkdGg6aS53aWR0aCxoZWlnaHQ6aS5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnIueC1pLndpZHRoLzIseTpyLnktaS5oZWlnaHQvMitvfSxsYWJlbE9yaWdpbjp7eDpyLngseTpyLnl9LGFsaWdubWVudDp7eDoiY2VudGVyIix5OiJjZW50ZXIifX19LHQucHJvdG90eXBlLl9jcmVhdGVMYWJlbENvbnRhaW5lcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT1yLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK24ueCsiLCAiK24ueSsiKSIpO3JldHVybiBhLmNsYXNzZWQoIm9uLWJhci1sYWJlbCIsITApLGF9LHQuX1NJWkVfS0VZPSJzaXplIix0Ll9TWU1CT0xfS0VZPSJzeW1ib2wiLHQuX0xBQkVMX0FSRUFfQ0xBU1M9InNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fRlJPTV9CVUJCTEU9MTUsdH0oTFVlLlhZUGxvdCk7SGF0LlNjYXR0ZXI9a1VlfSk7dmFyIFNLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUlVlPShkZSgpLFV0KHBlKSksTlVlPUxmKCksRFVlPVV1KCksT1VlPV9hdCgpLHpVZT1rcygpLEZVZT1BRigpLExTPXJzKCksQlVlPUh2KCksSFVlPWZ1bmN0aW9uKGUpe1JVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJzZWdtZW50LXBsb3QiKSxyLmF0dHIoInN0cm9rZSIsbmV3IHpVZS5Db2xvcigpLnJhbmdlKClbMF0pLHIuYXR0cigic3Ryb2tlLXdpZHRoIiwiMnB4Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgRFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBPVWUuU2VnbWVudFNWR0RyYXdlcn0sZnVuY3Rpb24oKXtyZXR1cm4gRlVlLndhcm4oImNhbnZhcyByZW5kZXJlciBpcyBub3Qgc3VwcG9ydGVkIG9uIFNlZ21lbnQgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOm5ldyBOVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT0ieDIiP2UucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMsIngiKTpyPT09InkyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ5Iik6ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsKWUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpO2Vsc2V7ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMscixuKTt2YXIgaT10aGlzLngyKCksbz1pJiZpLmFjY2Vzc29yO28hPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksbyxuKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWDJfS0VZKTt2YXIgbj10aGlzLngoKSxpPW4mJm4uc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVkscixpKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy55MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kyX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiByLngxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxyLngyPXRoaXMueDIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54MigpKSxyLnkxPUxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxyLnkyPXRoaXMueTIoKT09bnVsbD9MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSxyfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0aWVzSW49ZnVuY3Rpb24ocixuKXt2YXIgaSxvO2lmKG49PW51bGwpe3ZhciBhPXI7aT17bWluOmEudG9wTGVmdC54LG1heDphLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjphLnRvcExlZnQueSxtYXg6YS5ib3R0b21SaWdodC55fX1lbHNlIGk9cixvPW47cmV0dXJuIHRoaXMuX2VudGl0aWVzSW50ZXJzZWN0aW5nKGksbyl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9dGhpcy5lbnRpdGllcygpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07dGhpcy5fbGluZUludGVyc2VjdHNCb3goYyxyLG4sbykmJmkucHVzaChjKX1yZXR1cm4gaX0sdC5wcm90b3R5cGUuX2xpbmVJbnRlcnNlY3RzQm94PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMscz1vLngxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLGw9by54MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxjPW8ueTEoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksdT1vLnkyKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpO2lmKG4ubWluPD1zJiZzPD1uLm1heCYmaS5taW48PWMmJmM8PWkubWF4fHxuLm1pbjw9bCYmbDw9bi5tYXgmJmkubWluPD11JiZ1PD1pLm1heClyZXR1cm4hMDt2YXIgaD17eDpzLHk6Y30sZj17eDpsLHk6dX0scD1be3g6bi5taW4seTppLm1pbn0se3g6bi5taW4seTppLm1heH0se3g6bi5tYXgseTppLm1heH0se3g6bi5tYXgseTppLm1pbn1dLGQ9cC5maWx0ZXIoZnVuY3Rpb24oZyxfKXtyZXR1cm4gXyE9PTA/YS5fbGluZUludGVyc2VjdHNTZWdtZW50KGgsZixnLHBbXy0xXSkmJmEuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChnLHBbXy0xXSxoLGYpOiExfSk7cmV0dXJuIGQubGVuZ3RoPjB9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQ9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ZnVuY3Rpb24ocyxsLGMpe3JldHVybihsLngtcy54KSooYy55LWwueSktKGwueS1zLnkpKihjLngtbC54KX07cmV0dXJuIGEocixuLGkpKmEocixuLG8pPDB9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KEJVZS5YWVBsb3QpO1ZhdC5TZWdtZW50PUhVZX0pO3ZhciBUS3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFZVZT0oZGUoKSxVdChwZSkpLE1LdD0oRXIoKSxVdChNcikpLFVVZT1MZigpLEVLdD1DUygpLHQwPUZlKCkscVVlPVRhdCgpLEdVZT1ycygpLFdVZT1mdW5jdGlvbihlKXtWVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fc3RhY2tpbmdSZXN1bHQ9RUt0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueSgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihuLGksbyxhKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2sobixpLG8sYSl9KSxyLl9zdGFja2VkRXh0ZW50PUVLdC5tZW1UaHVuayhyLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiByLngoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fZmlsdGVyRm9yUHJvcGVydHkoInkiKX0sZnVuY3Rpb24obixpLG8pe3JldHVybiB0MC5TdGFja2luZy5zdGFja2VkRXh0ZW50KG4saSxvKX0pLHIuX2Jhc2VsaW5lVmFsdWU9MCxyLl9zdGFja2luZ09yZGVyPSJib3R0b211cCIsci5hZGRDbGFzcygic3RhY2tlZC1hcmVhLXBsb3QiKSxyLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bci5fYmFzZWxpbmVWYWx1ZV19LHIuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQoITEpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyk6cj8odDAuV2luZG93Lndhcm4oIldhcm5pbmc6IFN0YWNrZWQgQXJlYSBQbG90IGRvZXMgbm90IHN1cHBvcnQgY3JvcHBlZCByZW5kZXJpbmcuIiksdGhpcyk6ZS5wcm90b3R5cGUuY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBVVWUuTnVsbH0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl9jaGVja1NhbWVEb21haW4oKSx0aGlzKX0sdC5wcm90b3R5cGUueU9mZnNldD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3N0YWNraW5nUmVzdWx0KCk7aWYoaSE9bnVsbCl7dmFyIG89aS5nZXQocik7aWYobyE9bnVsbCl7dmFyIGE9by5nZXQoU3RyaW5nKG4pKTtpZihhIT1udWxsKXJldHVybiBhLm9mZnNldH19fSx0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5kb3duc2FtcGxpbmdFbmFibGVkLmNhbGwodGhpcyk6KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGRvd25zYW1wbGluZyIpLHRoaXMpfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGUuc2NhbGUodGhpcy5fYmFzZWxpbmVWYWx1ZSksbj17eDE6MCx5MTpyLHgyOnRoaXMud2lkdGgoKSx5MjpyfTt0aGlzLl9nZXRBbmltYXRvcigiYmFzZWxpbmUiKS5hbmltYXRlKHRoaXMuX2Jhc2VsaW5lLG4pfSx0LnByb3RvdHlwZS5fdXBkYXRlWVNjYWxlPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCksbj1yJiZyLnNjYWxlO24hPW51bGwmJihuLmFkZFBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSxuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIodGhpcy5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSl9LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jaGVja1NhbWVEb21haW49ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXt2YXIgcj10aGlzLmRhdGFzZXRzKCksbj10aGlzLngoKS5hY2Nlc3NvcixpPXIubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBNS3Quc2V0KGEuZGF0YSgpLm1hcChmdW5jdGlvbihzLGwpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobihzLGwsYSkpfSkpLnZhbHVlcygpfSksbz10Ll9kb21haW5LZXlzKHIsbik7aS5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PW8ubGVuZ3RofSkmJnQwLldpbmRvdy53YXJuKCJ0aGUgZG9tYWlucyBhY3Jvc3MgdGhlIGRhdGFzZXRzIGFyZSBub3QgdGhlIHNhbWUuIFBsb3QgbWF5IHByb2R1Y2UgdW5pbnRlbmRlZCBiZWhhdmlvci4iKX19LHQuX2RvbWFpbktleXM9ZnVuY3Rpb24ocixuKXt2YXIgaT1NS3Quc2V0KCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9by5kYXRhKCkscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtpLmFkZChuKGMsbCxvKSl9fSksaS52YWx1ZXMoKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPUdVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksaT10aGlzLnkoKS5hY2Nlc3NvcixvPXRoaXMueCgpLmFjY2Vzc29yLGE9ZnVuY3Rpb24odSxoLGYpe3JldHVybiB0MC5TdGFja2luZy5ub3JtYWxpemVLZXkobyh1LGgsZikpfSxzPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksbD1mdW5jdGlvbih1LGgsZil7dmFyIHA9K2kodSxoLGYpLGQ9cy5nZXQoZikuZ2V0KGEodSxoLGYpKS5vZmZzZXQ7cmV0dXJuIHIueSgpLnNjYWxlLnNjYWxlKHArZCl9LGM9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwKX07cmV0dXJuW24sbCxjXX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKSxuPXRoaXMuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksaT1uWzBdLG89blsxXSxhPW5bMl07cmV0dXJuIHIuZD10aGlzLl9jb25zdHJ1Y3RBcmVhUHJvamVjdG9yKGksbyxhKSxyfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89ZS5wcm90b3R5cGUuX3BpeGVsUG9pbnQuY2FsbCh0aGlzLHIsbixpKSxhPXRoaXMueCgpLmFjY2Vzc29yKHIsbixpKSxzPXRoaXMueSgpLmFjY2Vzc29yKHIsbixpKSxsPXRoaXMueSgpLnNjYWxlLnNjYWxlKCtzK3RoaXMuX3N0YWNraW5nUmVzdWx0KCkuZ2V0KGkpLmdldCh0MC5TdGFja2luZy5ub3JtYWxpemVLZXkoYSkpLm9mZnNldCk7cmV0dXJue3g6by54LHk6bH19LHR9KHFVZS5BcmVhKTtVYXQuU3RhY2tlZEFyZWE9V1VlfSk7dmFyIEFLdD1IKFdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoV2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWVVlPShkZSgpLFV0KHBlKSkscWF0PV9sKCksalVlPUJ1KCksQ0t0PUNTKCksZEI9RmUoKSxHYXQ9eTQoKSxYVWU9cnMoKSwkVWU9ZnVuY3Rpb24oZSl7WVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9InZlcnRpY2FsIik7dmFyIG49ZS5jYWxsKHRoaXMscil8fHRoaXM7cmV0dXJuIG4uX2V4dHJlbWFGb3JtYXR0ZXI9alVlLmlkZW50aXR5KCksbi5fc3RhY2tpbmdSZXN1bHQ9Q0t0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLmxlbmd0aCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9zdGFja2luZ09yZGVyfSxmdW5jdGlvbihpLG8sYSxzKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2soaSxvLGEscyl9KSxuLl9zdGFja2VkRXh0ZW50PUNLdC5tZW1UaHVuayhuLl9zdGFja2luZ1Jlc3VsdCxmdW5jdGlvbigpe3JldHVybiBuLnBvc2l0aW9uKCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KG4uX2lzVmVydGljYWw/InkiOiJ4Iil9LGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gZEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChpLG8sYSl9KSxuLmFkZENsYXNzKCJzdGFja2VkLWJhci1wbG90Iiksbi5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLG59cmV0dXJuIHQucHJvdG90eXBlLnN0YWNraW5nT3JkZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3RhY2tpbmdPcmRlcjoodGhpcy5fc3RhY2tpbmdPcmRlcj1yLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5leHRyZW1hRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9leHRyZW1hRm9ybWF0dGVyOih0aGlzLl9leHRyZW1hRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJnIikuY2xhc3NlZChHYXQuQmFyLl9MQUJFTF9BUkVBX0NMQVNTLCEwKTt2YXIgcj1uZXcgcWF0LlN2Z0NvbnRleHQodGhpcy5fbGFiZWxBcmVhLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IHFhdC5DYWNoZU1lYXN1cmVyKHIpLHRoaXMuX3dyaXRlcj1uZXcgcWF0LldyaXRlcih0aGlzLl9tZWFzdXJlcixyKX0sdC5wcm90b3R5cGUuX2RyYXdMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLl9kcmF3TGFiZWxzLmNhbGwodGhpcyksdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciBuPSt0aGlzLmJhc2VsaW5lVmFsdWUoKSxpPXRoaXMucG9zaXRpb24oKS5zY2FsZSxvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT1kQi5TdGFja2luZy5zdGFja2VkRXh0ZW50cyh0aGlzLl9zdGFja2luZ1Jlc3VsdCgpKSxzPWEubWF4aW11bUV4dGVudHMsbD1hLm1pbmltdW1FeHRlbnRzLGM9W10sdT1mdW5jdGlvbihmLHAsZCl7dmFyIGc9cC50b3BMZWZ0LF89Zy54LHk9Zy55LHg9cC5ib3R0b21SaWdodC54LXAudG9wTGVmdC54LGI9cC5ib3R0b21SaWdodC55LXAudG9wTGVmdC55LFM9ci5faXNWZXJ0aWNhbD94PmQ6Yj5kO2lmKCFTKXt2YXIgQz1yLl9sYWJlbEFyZWEuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK3krIikiKTtDLmNsYXNzZWQoInN0YWNrZWQtYmFyLWxhYmVsIiwhMCk7dmFyIFA9e3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciJ9O3IuX3dyaXRlci53cml0ZShmLHgsYixQLEMubm9kZSgpKX1yZXR1cm4gU30saD1mdW5jdGlvbihmLHApe3ZhciBkPXIuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yKCksZz1yLndpZHRoKCksXz1yLmhlaWdodCgpO2YuZm9yRWFjaChmdW5jdGlvbih5KXtpZih5LmV4dGVudCE9PW4pe3ZhciB4PXIuZXh0cmVtYUZvcm1hdHRlcigpKHkuZXh0ZW50KSxiPXIuX21lYXN1cmVyLm1lYXN1cmUoeCksUz15LnN0YWNrZWREYXR1bSxDPVMub3JpZ2luYWxEYXR1bSxQPVMub3JpZ2luYWxJbmRleCxrPVMub3JpZ2luYWxEYXRhc2V0O2lmKCFyLl9pc0RhdHVtT25TY3JlZW4oZCxnLF8sQyxQLGspKXJldHVybjt2YXIgTz1YVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci5hdHRyKEdhdC5CYXIuX0JBUl9USElDS05FU1NfS0VZKSkoQyxQLGspLEQ9by5zY2FsZSh5LmV4dGVudCksQj1yLl9nZXRQb3NpdGlvbkF0dHIoaS5zY2FsZSh5LmF4aXNWYWx1ZSksTykrTy8yLEk9ci5faXNWZXJ0aWNhbD97eDpCLHk6RH06e3g6RCx5OkJ9LEw9cChJLGIsTyksUj11KHgse3RvcExlZnQ6TCxib3R0b21SaWdodDp7eDpMLngrYi53aWR0aCx5OkwueStiLmhlaWdodH19LE8pO2MucHVzaChSKX19KX07aChzLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueCt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUix5OnIuX2lzVmVydGljYWw/Zi55LV86Zi55LWcvMn19KSxoKGwsZnVuY3Rpb24oZixwLGQpe3ZhciBnPXIuX2lzVmVydGljYWw/cC53aWR0aDpwLmhlaWdodCxfPXIuX2lzVmVydGljYWw/cC5oZWlnaHQ6cC53aWR0aDtyZXR1cm57eDpyLl9pc1ZlcnRpY2FsP2YueC1nLzI6Zi54LV8seTpyLl9pc1ZlcnRpY2FsP2YueSt0Ll9FWFRSRU1BX0xBQkVMX01BUkdJTl9GUk9NX0JBUjpmLnktZy8yfX0pLGMuc29tZShmdW5jdGlvbihmKXtyZXR1cm4gZn0pJiZ0aGlzLl9sYWJlbEFyZWEuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IixvPXRoaXMubGVuZ3RoKCkuc2NhbGUsYT10aGlzLmxlbmd0aCgpLmFjY2Vzc29yLHM9dGhpcy5wb3NpdGlvbigpLmFjY2Vzc29yLGw9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBkQi5TdGFja2luZy5ub3JtYWxpemVLZXkocyhkLGcsXykpfSxjPXRoaXMuX3N0YWNraW5nUmVzdWx0KCksdT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxoPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gby5zY2FsZSgrYShkLGcsXykrYy5nZXQoXykuZ2V0KGwoZCxnLF8pKS5vZmZzZXQpfSxmPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gTWF0aC5hYnMoaChkLGcsXyktdShkLGcsXykpfTtuW3RoaXMuX2lzVmVydGljYWw/ImhlaWdodCI6IndpZHRoIl09Zjt2YXIgcD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuK2EoZCxnLF8pPDA/dShkLGcsXyk6aChkLGcsXyl9O3JldHVybiBuW2ldPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gci5faXNWZXJ0aWNhbD9wKGQsZyxfKTpwKGQsZyxfKS1mKGQsZyxfKX0sbn0sdC5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2lzVmVydGljYWw/InkiOiJ4IjtyZXR1cm4gcj09PW4/W3RoaXMuX3N0YWNrZWRFeHRlbnQoKV06ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI9NSx0fShHYXQuQmFyKTtXYXQuU3RhY2tlZEJhcj0kVWV9KTt2YXIgUEt0PUgoWWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShZYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLVWU9KGRlKCksVXQocGUpKSxaVWU9RmUoKSxKVWU9eTQoKSxRVWU9cnMoKSx0cWU9ZnVuY3Rpb24oZSl7S1VlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2Nvbm5lY3RvcnNFbmFibGVkPSExLHIuYWRkQ2xhc3MoIndhdGVyZmFsbC1wbG90Iikscn1yZXR1cm4gdC5wcm90b3R5cGUuY29ubmVjdG9yc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29ubmVjdG9yc0VuYWJsZWQ6KHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLnRvdGFsPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1RPVEFMX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9UT1RBTF9LRVkscixudWxsKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX2Nvbm5lY3RvckFyZWEuc2VsZWN0QWxsKCJsaW5lIikucmVtb3ZlKCksdGhpcy5fY29ubmVjdG9yc0VuYWJsZWQmJlpVZS5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3Q29ubmVjdG9ycygpfSxyKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0LmNhbGwodGhpcyxyKTtyZXR1cm4gdGhpcy5fY29ubmVjdG9yQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fQ09OTkVDVE9SX0FSRUFfQ0xBU1MsITApLG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj0ieSI7cmV0dXJuIHI9PT1uP1t0aGlzLl9leHRlbnRdOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPXRoaXMueSgpLnNjYWxlLG89UVVlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMudG90YWwoKSksYT10aGlzLmF0dHIoInkiKTthPT1udWxsJiYobi55PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1yLnkoKS5hY2Nlc3NvcihsLGMsdSksZj1vKGwsYyx1KTtpZihmKXJldHVybiBNYXRoLm1pbihpLnNjYWxlKGgpLGkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gaDwwP2kuc2NhbGUocC1oKTppLnNjYWxlKHApO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBwPmQ/aS5zY2FsZShwKTppLnNjYWxlKGQpfSk7dmFyIHM9dGhpcy5hdHRyKCJoZWlnaHQiKTtyZXR1cm4gcz09bnVsbCYmKG4uaGVpZ2h0PWZ1bmN0aW9uKGwsYyx1KXt2YXIgaD1vKGwsYyx1KSxmPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtpZihoKXJldHVybiBNYXRoLmFicyhpLnNjYWxlKGYpLWkuc2NhbGUoMCkpO3ZhciBwPXIuX3N1YnRvdGFsc1tjXTtpZihjPT09MClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKHAtZikpO3ZhciBkPXIuX3N1YnRvdGFsc1tjLTFdO3JldHVybiBNYXRoLmFicyhpLnNjYWxlKHApLWkuc2NhbGUoZCkpfSksbi5jbGFzcz1mdW5jdGlvbihsLGMsdSl7dmFyIGg9IiI7ci5hdHRyKCJjbGFzcyIpIT1udWxsJiYoaD1yLmF0dHIoImNsYXNzIikuYWNjZXNzb3IobCxjLHUpKyIgIik7dmFyIGY9byhsLGMsdSk7aWYoZilyZXR1cm4gaCt0Ll9CQVJfVE9UQUxfQ0xBU1M7dmFyIHA9ci55KCkuYWNjZXNzb3IobCxjLHUpO3JldHVybiBoKyhwPjA/dC5fQkFSX0dST1dUSF9DTEFTUzp0Ll9CQVJfREVDTElORV9DTEFTUyl9LG59LHQucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3VidG90YWxzKCksZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVTdWJ0b3RhbHNBbmRFeHRlbnQ9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPU51bWJlci5NQVhfVkFMVUUsaT1OdW1iZXIuTUlOX1ZBTFVFLG89MCxhPSExLHM9ci5kYXRhKCksbD1zLmxlbmd0aCxjPTA7YzxsO2MrKyl7dmFyIHU9c1tjXSxoPXRoaXMueSgpLmFjY2Vzc29yKHUsYyxyKSxmPXRoaXMudG90YWwoKS5hY2Nlc3Nvcih1LGMscik7aWYoKCFmfHxjPT09MCkmJihvKz1oKSx0aGlzLl9zdWJ0b3RhbHMucHVzaChvKSxvPG4mJihuPW8pLG8+aSYmKGk9byksZiYmKGg8biYmKG49aCksaD5pJiYoaT1oKSksIWEmJmYpe2Zvcih2YXIgcD1oLW8sZD0wO2Q8dGhpcy5fc3VidG90YWxzLmxlbmd0aDtkKyspdGhpcy5fc3VidG90YWxzW2RdKz1wO2E9ITAsbys9cCxuKz1wLGkrPXB9fXRoaXMuX2V4dGVudD1bbixpXX0sdC5wcm90b3R5cGUuX2RyYXdDb25uZWN0b3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG49dGhpcy5kYXRhc2V0cygpWzBdLGk9MTtpPG4uZGF0YSgpLmxlbmd0aDtpKyspe3ZhciBvPWktMSxhPW4uZGF0YSgpW2ldLHM9bi5kYXRhKClbb10sbD1yLngocyxvLG4pLGM9ci54KGEsaSxuKStyLndpZHRoKGEsaSxuKSx1PXIueShhLGksbik7KHRoaXMuX3N1YnRvdGFsc1tpXT4wJiZ0aGlzLl9zdWJ0b3RhbHNbaV0+dGhpcy5fc3VidG90YWxzW29dfHx0aGlzLl9zdWJ0b3RhbHNbaV08MCYmdGhpcy5fc3VidG90YWxzW2ldPj10aGlzLl9zdWJ0b3RhbHNbb10pJiYodT1yLnkoYSxpLG4pK3IuaGVpZ2h0KGEsaSxuKSksdGhpcy5fY29ubmVjdG9yQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9DTEFTUywhMCkuYXR0cigieDEiLGwpLmF0dHIoIngyIixjKS5hdHRyKCJ5MSIsdSkuYXR0cigieTIiLHUpfX0sdC5wcm90b3R5cGUuX3VwZGF0ZVN1YnRvdGFscz1mdW5jdGlvbigpe3ZhciByPXRoaXMuZGF0YXNldHMoKTtpZihyLmxlbmd0aD4wKXt2YXIgbj1yW3IubGVuZ3RoLTFdO3RoaXMuX3N1YnRvdGFscz1uZXcgQXJyYXksdGhpcy5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50KG4pfX0sdC5fQkFSX0RFQ0xJTkVfQ0xBU1M9IndhdGVyZmFsbC1kZWNsaW5lIix0Ll9CQVJfR1JPV1RIX0NMQVNTPSJ3YXRlcmZhbGwtZ3Jvd3RoIix0Ll9CQVJfVE9UQUxfQ0xBU1M9IndhdGVyZmFsbC10b3RhbCIsdC5fQ09OTkVDVE9SX0NMQVNTPSJjb25uZWN0b3IiLHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTPSJjb25uZWN0b3ItYXJlYSIsdC5fVE9UQUxfS0VZPSJ0b3RhbCIsdH0oSlVlLkJhcik7WWF0LldhdGVyZmFsbD10cWV9KTt2YXIgSVM9SChPcz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT3MsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6Yz0oZGUoKSxVdChwZSkpO3pjLl9fZXhwb3J0U3RhcihUYXQoKSxPcyk7emMuX19leHBvcnRTdGFyKHk0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihHb3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHlLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoU2F0KCksT3MpO3pjLl9fZXhwb3J0U3Rhcih2S3QoKSxPcyk7emMuX19leHBvcnRTdGFyKHhLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIod0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihTS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKFRLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoQUt0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihQS3QoKSxPcyl9KTt2YXIgSUt0PUgoamF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO2phdC52ZXJzaW9uPSIzLjkuMCJ9KTt2YXIgd2w9SChsbj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGYz0oZGUoKSxVdChwZSkpO1dqdCgpO3ZhciBlcWU9TGYoKTtsbi5BbmltYXRvcnM9ZXFlO3ZhciBycWU9bCR0KCk7bG4uQXhlcz1ycWU7dmFyIG5xZT1Qb3QoKTtsbi5Db21wb25lbnRzPW5xZTt2YXIgaXFlPSRBKCk7bG4uQ29uZmlncz1pcWU7dmFyIG9xZT1CdSgpO2xuLkZvcm1hdHRlcnM9b3FlO3ZhciBhcWU9SUYoKTtsbi5SZW5kZXJDb250cm9sbGVyPWFxZTt2YXIgc3FlPUhpdCgpO2xuLlJlbmRlclBvbGljaWVzPXNxZTt2YXIgbHFlPVhGKCk7bG4uU3ltYm9sRmFjdG9yaWVzPWxxZTt2YXIgY3FlPU52KCk7bG4uRGlzcGF0Y2hlcnM9Y3FlO3ZhciB1cWU9QnYoKTtsbi5EcmF3ZXJzPXVxZTt2YXIgaHFlPWw0KCk7bG4uSW50ZXJhY3Rpb25zPWhxZTt2YXIgZnFlPUlTKCk7bG4uUGxvdHM9ZnFlO3ZhciBwcWU9a3MoKTtsbi5TY2FsZXM9cHFlO3ZhciBkcWU9RmUoKTtsbi5VdGlscz1kcWU7RmMuX19leHBvcnRTdGFyKHQ0KCksbG4pO3ZhciBtcWU9SEYoKTtsbi5UaW1lSW50ZXJ2YWw9bXFlLlRpbWVJbnRlcnZhbDtGYy5fX2V4cG9ydFN0YXIoa2MoKSxsbik7RmMuX19leHBvcnRTdGFyKFdGKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihZb3QoKSxsbik7dmFyIGdxZT1JS3QoKTtsbi52ZXJzaW9uPWdxZS52ZXJzaW9uO0ZjLl9fZXhwb3J0U3RhcihvNCgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoVXUoKSxsbik7RmMuX19leHBvcnRTdGFyKER2KCksbG4pO0ZjLl9fZXhwb3J0U3Rhcih3b3QoKSxsbik7RmMuX19leHBvcnRTdGFyKEh2KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihycygpLGxuKTtGYy5fX2V4cG9ydFN0YXIodmQoKSxsbik7RmMuX19leHBvcnRTdGFyKEx2KCksbG4pfSk7dmFyICRLdD1IKChKam4sWEt0KT0+e2Z1bmN0aW9uIERxZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9WEt0LmV4cG9ydHM9RHFlfSk7dmFyIFl2PUgoKFFqbixLS3QpPT57ZnVuY3Rpb24gT3FlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT09ZSYmdCE9PXR9S0t0LmV4cG9ydHM9T3FlfSk7dmFyIE00PUgoKHRYbixaS3QpPT57dmFyIHpxZT1ZdigpO2Z1bmN0aW9uIEZxZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKHpxZShlW3JdWzBdLHQpKXJldHVybiByO3JldHVybi0xfVpLdC5leHBvcnRzPUZxZX0pO3ZhciBRS3Q9SCgoZVhuLEpLdCk9Pnt2YXIgQnFlPU00KCksSHFlPUFycmF5LnByb3RvdHlwZSxWcWU9SHFlLnNwbGljZTtmdW5jdGlvbiBVcWUoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPUJxZSh0LGUpO2lmKHI8MClyZXR1cm4hMTt2YXIgbj10Lmxlbmd0aC0xO3JldHVybiByPT1uP3QucG9wKCk6VnFlLmNhbGwodCxyLDEpLC0tdGhpcy5zaXplLCEwfUpLdC5leHBvcnRzPVVxZX0pO3ZhciBlWnQ9SCgoclhuLHRadCk9Pnt2YXIgcXFlPU00KCk7ZnVuY3Rpb24gR3FlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1xcWUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfXRadC5leHBvcnRzPUdxZX0pO3ZhciBuWnQ9SCgoblhuLHJadCk9Pnt2YXIgV3FlPU00KCk7ZnVuY3Rpb24gWXFlKGUpe3JldHVybiBXcWUodGhpcy5fX2RhdGFfXyxlKT4tMX1yWnQuZXhwb3J0cz1ZcWV9KTt2YXIgb1p0PUgoKGlYbixpWnQpPT57dmFyIGpxZT1NNCgpO2Z1bmN0aW9uIFhxZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1qcWUocixlKTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxyLnB1c2goW2UsdF0pKTpyW25dWzFdPXQsdGhpc31pWnQuZXhwb3J0cz1YcWV9KTt2YXIgRTQ9SCgob1huLGFadCk9Pnt2YXIgJHFlPSRLdCgpLEtxZT1RS3QoKSxacWU9ZVp0KCksSnFlPW5adCgpLFFxZT1vWnQoKTtmdW5jdGlvbiB6UyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX16Uy5wcm90b3R5cGUuY2xlYXI9JHFlO3pTLnByb3RvdHlwZS5kZWxldGU9S3FlO3pTLnByb3RvdHlwZS5nZXQ9WnFlO3pTLnByb3RvdHlwZS5oYXM9SnFlO3pTLnByb3RvdHlwZS5zZXQ9UXFlO2FadC5leHBvcnRzPXpTfSk7dmFyIGxadD1IKChhWG4sc1p0KT0+e3ZhciB0R2U9RTQoKTtmdW5jdGlvbiBlR2UoKXt0aGlzLl9fZGF0YV9fPW5ldyB0R2UsdGhpcy5zaXplPTB9c1p0LmV4cG9ydHM9ZUdlfSk7dmFyIHVadD1IKChzWG4sY1p0KT0+e2Z1bmN0aW9uIHJHZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9dC5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZT10LnNpemUscn1jWnQuZXhwb3J0cz1yR2V9KTt2YXIgZlp0PUgoKGxYbixoWnQpPT57ZnVuY3Rpb24gbkdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChlKX1oWnQuZXhwb3J0cz1uR2V9KTt2YXIgZFp0PUgoKGNYbixwWnQpPT57ZnVuY3Rpb24gaUdlKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1wWnQuZXhwb3J0cz1pR2V9KTt2YXIgY3N0PUgoKHVYbixtWnQpPT57dmFyIG9HZT10eXBlb2YgZ2xvYmFsPT0ib2JqZWN0IiYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7bVp0LmV4cG9ydHM9b0dlfSk7dmFyIEhjPUgoKGhYbixnWnQpPT57dmFyIGFHZT1jc3QoKSxzR2U9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixsR2U9YUdlfHxzR2V8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Z1p0LmV4cG9ydHM9bEdlfSk7dmFyIGp2PUgoKGZYbixfWnQpPT57dmFyIGNHZT1IYygpLHVHZT1jR2UuU3ltYm9sO19adC5leHBvcnRzPXVHZX0pO3ZhciBiWnQ9SCgocFhuLHhadCk9Pnt2YXIgeVp0PWp2KCksdlp0PU9iamVjdC5wcm90b3R5cGUsaEdlPXZadC5oYXNPd25Qcm9wZXJ0eSxmR2U9dlp0LnRvU3RyaW5nLFQ0PXladD95WnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHBHZShlKXt2YXIgdD1oR2UuY2FsbChlLFQ0KSxyPWVbVDRdO3RyeXtlW1Q0XT12b2lkIDA7dmFyIG49ITB9Y2F0Y2gobyl7fXZhciBpPWZHZS5jYWxsKGUpO3JldHVybiBuJiYodD9lW1Q0XT1yOmRlbGV0ZSBlW1Q0XSksaX14WnQuZXhwb3J0cz1wR2V9KTt2YXIgU1p0PUgoKGRYbix3WnQpPT57dmFyIGRHZT1PYmplY3QucHJvdG90eXBlLG1HZT1kR2UudG9TdHJpbmc7ZnVuY3Rpb24gZ0dlKGUpe3JldHVybiBtR2UuY2FsbChlKX13WnQuZXhwb3J0cz1nR2V9KTt2YXIgczA9SCgobVhuLFRadCk9Pnt2YXIgTVp0PWp2KCksX0dlPWJadCgpLHlHZT1TWnQoKSx2R2U9IltvYmplY3QgTnVsbF0iLHhHZT0iW29iamVjdCBVbmRlZmluZWRdIixFWnQ9TVp0P01adC50b1N0cmluZ1RhZzp2b2lkIDA7ZnVuY3Rpb24gYkdlKGUpe3JldHVybiBlPT1udWxsP2U9PT12b2lkIDA/eEdlOnZHZTpFWnQmJkVadCBpbiBPYmplY3QoZSk/X0dlKGUpOnlHZShlKX1UWnQuZXhwb3J0cz1iR2V9KTt2YXIgTWw9SCgoZ1huLENadCk9PntmdW5jdGlvbiB3R2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPW51bGwmJih0PT0ib2JqZWN0Inx8dD09ImZ1bmN0aW9uIil9Q1p0LmV4cG9ydHM9d0dlfSk7dmFyIEZTPUgoKF9YbixBWnQpPT57dmFyIFNHZT1zMCgpLE1HZT1NbCgpLEVHZT0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsVEdlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsQ0dlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsQUdlPSJbb2JqZWN0IFByb3h5XSI7ZnVuY3Rpb24gUEdlKGUpe2lmKCFNR2UoZSkpcmV0dXJuITE7dmFyIHQ9U0dlKGUpO3JldHVybiB0PT1UR2V8fHQ9PUNHZXx8dD09RUdlfHx0PT1BR2V9QVp0LmV4cG9ydHM9UEdlfSk7dmFyIEladD1IKCh5WG4sUFp0KT0+e3ZhciBJR2U9SGMoKSxMR2U9SUdlWyJfX2NvcmUtanNfc2hhcmVkX18iXTtQWnQuZXhwb3J0cz1MR2V9KTt2YXIgUlp0PUgoKHZYbixrWnQpPT57dmFyIHVzdD1JWnQoKSxMWnQ9ZnVuY3Rpb24oKXt2YXIgZT0vW14uXSskLy5leGVjKHVzdCYmdXN0LmtleXMmJnVzdC5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGU/IlN5bWJvbChzcmMpXzEuIitlOiIifSgpO2Z1bmN0aW9uIGtHZShlKXtyZXR1cm4hIUxadCYmTFp0IGluIGV9a1p0LmV4cG9ydHM9a0dlfSk7dmFyIGhzdD1IKCh4WG4sTlp0KT0+e3ZhciBSR2U9RnVuY3Rpb24ucHJvdG90eXBlLE5HZT1SR2UudG9TdHJpbmc7ZnVuY3Rpb24gREdlKGUpe2lmKGUhPW51bGwpe3RyeXtyZXR1cm4gTkdlLmNhbGwoZSl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZSsiIn1jYXRjaCh0KXt9fXJldHVybiIifU5adC5leHBvcnRzPURHZX0pO3ZhciBPWnQ9SCgoYlhuLERadCk9Pnt2YXIgT0dlPUZTKCksekdlPVJadCgpLEZHZT1NbCgpLEJHZT1oc3QoKSxIR2U9L1tcXF4kLiorPygpW1xde318XS9nLFZHZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxVR2U9RnVuY3Rpb24ucHJvdG90eXBlLHFHZT1PYmplY3QucHJvdG90eXBlLEdHZT1VR2UudG9TdHJpbmcsV0dlPXFHZS5oYXNPd25Qcm9wZXJ0eSxZR2U9UmVnRXhwKCJeIitHR2UuY2FsbChXR2UpLnJlcGxhY2UoSEdlLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2Z1bmN0aW9uIGpHZShlKXtpZighRkdlKGUpfHx6R2UoZSkpcmV0dXJuITE7dmFyIHQ9T0dlKGUpP1lHZTpWR2U7cmV0dXJuIHQudGVzdChCR2UoZSkpfURadC5leHBvcnRzPWpHZX0pO3ZhciBGWnQ9SCgod1huLHpadCk9PntmdW5jdGlvbiBYR2UoZSx0KXtyZXR1cm4gZT09bnVsbD92b2lkIDA6ZVt0XX16WnQuZXhwb3J0cz1YR2V9KTt2YXIgbDA9SCgoU1huLEJadCk9Pnt2YXIgJEdlPU9adCgpLEtHZT1GWnQoKTtmdW5jdGlvbiBaR2UoZSx0KXt2YXIgcj1LR2UoZSx0KTtyZXR1cm4gJEdlKHIpP3I6dm9pZCAwfUJadC5leHBvcnRzPVpHZX0pO3ZhciB6Qj1IKChNWG4sSFp0KT0+e3ZhciBKR2U9bDAoKSxRR2U9SGMoKSx0V2U9SkdlKFFHZSwiTWFwIik7SFp0LmV4cG9ydHM9dFdlfSk7dmFyIEM0PUgoKEVYbixWWnQpPT57dmFyIGVXZT1sMCgpLHJXZT1lV2UoT2JqZWN0LCJjcmVhdGUiKTtWWnQuZXhwb3J0cz1yV2V9KTt2YXIgR1p0PUgoKFRYbixxWnQpPT57dmFyIFVadD1DNCgpO2Z1bmN0aW9uIG5XZSgpe3RoaXMuX19kYXRhX189VVp0P1VadChudWxsKTp7fSx0aGlzLnNpemU9MH1xWnQuZXhwb3J0cz1uV2V9KTt2YXIgWVp0PUgoKENYbixXWnQpPT57ZnVuY3Rpb24gaVdlKGUpe3ZhciB0PXRoaXMuaGFzKGUpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1tlXTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fVdadC5leHBvcnRzPWlXZX0pO3ZhciBYWnQ9SCgoQVhuLGpadCk9Pnt2YXIgb1dlPUM0KCksYVdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIixzV2U9T2JqZWN0LnByb3RvdHlwZSxsV2U9c1dlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGNXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKG9XZSl7dmFyIHI9dFtlXTtyZXR1cm4gcj09PWFXZT92b2lkIDA6cn1yZXR1cm4gbFdlLmNhbGwodCxlKT90W2VdOnZvaWQgMH1qWnQuZXhwb3J0cz1jV2V9KTt2YXIgS1p0PUgoKFBYbiwkWnQpPT57dmFyIHVXZT1DNCgpLGhXZT1PYmplY3QucHJvdG90eXBlLGZXZT1oV2UuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gcFdlKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIHVXZT90W2VdIT09dm9pZCAwOmZXZS5jYWxsKHQsZSl9JFp0LmV4cG9ydHM9cFdlfSk7dmFyIEpadD1IKChJWG4sWlp0KT0+e3ZhciBkV2U9QzQoKSxtV2U9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIGdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoZSk/MDoxLHJbZV09ZFdlJiZ0PT09dm9pZCAwP21XZTp0LHRoaXN9Wlp0LmV4cG9ydHM9Z1dlfSk7dmFyIHRKdD1IKChMWG4sUVp0KT0+e3ZhciBfV2U9R1p0KCkseVdlPVladCgpLHZXZT1YWnQoKSx4V2U9S1p0KCksYldlPUpadCgpO2Z1bmN0aW9uIEJTKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fUJTLnByb3RvdHlwZS5jbGVhcj1fV2U7QlMucHJvdG90eXBlLmRlbGV0ZT15V2U7QlMucHJvdG90eXBlLmdldD12V2U7QlMucHJvdG90eXBlLmhhcz14V2U7QlMucHJvdG90eXBlLnNldD1iV2U7UVp0LmV4cG9ydHM9QlN9KTt2YXIgbkp0PUgoKGtYbixySnQpPT57dmFyIGVKdD10SnQoKSx3V2U9RTQoKSxTV2U9ekIoKTtmdW5jdGlvbiBNV2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlSnQsbWFwOm5ldyhTV2V8fHdXZSksc3RyaW5nOm5ldyBlSnR9fXJKdC5leHBvcnRzPU1XZX0pO3ZhciBvSnQ9SCgoUlhuLGlKdCk9PntmdW5jdGlvbiBFV2UoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIHQ9PSJzdHJpbmcifHx0PT0ibnVtYmVyInx8dD09InN5bWJvbCJ8fHQ9PSJib29sZWFuIj9lIT09Il9fcHJvdG9fXyI6ZT09PW51bGx9aUp0LmV4cG9ydHM9RVdlfSk7dmFyIEE0PUgoKE5YbixhSnQpPT57dmFyIFRXZT1vSnQoKTtmdW5jdGlvbiBDV2UoZSx0KXt2YXIgcj1lLl9fZGF0YV9fO3JldHVybiBUV2UodCk/clt0eXBlb2YgdD09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpyLm1hcH1hSnQuZXhwb3J0cz1DV2V9KTt2YXIgbEp0PUgoKERYbixzSnQpPT57dmFyIEFXZT1BNCgpO2Z1bmN0aW9uIFBXZShlKXt2YXIgdD1BV2UodGhpcyxlKS5kZWxldGUoZSk7cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1zSnQuZXhwb3J0cz1QV2V9KTt2YXIgdUp0PUgoKE9YbixjSnQpPT57dmFyIElXZT1BNCgpO2Z1bmN0aW9uIExXZShlKXtyZXR1cm4gSVdlKHRoaXMsZSkuZ2V0KGUpfWNKdC5leHBvcnRzPUxXZX0pO3ZhciBmSnQ9SCgoelhuLGhKdCk9Pnt2YXIga1dlPUE0KCk7ZnVuY3Rpb24gUldlKGUpe3JldHVybiBrV2UodGhpcyxlKS5oYXMoZSl9aEp0LmV4cG9ydHM9UldlfSk7dmFyIGRKdD1IKChGWG4scEp0KT0+e3ZhciBOV2U9QTQoKTtmdW5jdGlvbiBEV2UoZSx0KXt2YXIgcj1OV2UodGhpcyxlKSxuPXIuc2l6ZTtyZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemUrPXIuc2l6ZT09bj8wOjEsdGhpc31wSnQuZXhwb3J0cz1EV2V9KTt2YXIgRkI9SCgoQlhuLG1KdCk9Pnt2YXIgT1dlPW5KdCgpLHpXZT1sSnQoKSxGV2U9dUp0KCksQldlPWZKdCgpLEhXZT1kSnQoKTtmdW5jdGlvbiBIUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1IUy5wcm90b3R5cGUuY2xlYXI9T1dlO0hTLnByb3RvdHlwZS5kZWxldGU9eldlO0hTLnByb3RvdHlwZS5nZXQ9RldlO0hTLnByb3RvdHlwZS5oYXM9QldlO0hTLnByb3RvdHlwZS5zZXQ9SFdlO21KdC5leHBvcnRzPUhTfSk7dmFyIF9KdD1IKChIWG4sZ0p0KT0+e3ZhciBWV2U9RTQoKSxVV2U9ekIoKSxxV2U9RkIoKSxHV2U9MjAwO2Z1bmN0aW9uIFdXZShlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIFZXZSl7dmFyIG49ci5fX2RhdGFfXztpZighVVdlfHxuLmxlbmd0aDxHV2UtMSlyZXR1cm4gbi5wdXNoKFtlLHRdKSx0aGlzLnNpemU9KytyLnNpemUsdGhpcztyPXRoaXMuX19kYXRhX189bmV3IHFXZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9Z0p0LmV4cG9ydHM9V1dlfSk7dmFyIFA0PUgoKFZYbix5SnQpPT57dmFyIFlXZT1FNCgpLGpXZT1sWnQoKSxYV2U9dVp0KCksJFdlPWZadCgpLEtXZT1kWnQoKSxaV2U9X0p0KCk7ZnVuY3Rpb24gVlMoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXz1uZXcgWVdlKGUpO3RoaXMuc2l6ZT10LnNpemV9VlMucHJvdG90eXBlLmNsZWFyPWpXZTtWUy5wcm90b3R5cGUuZGVsZXRlPVhXZTtWUy5wcm90b3R5cGUuZ2V0PSRXZTtWUy5wcm90b3R5cGUuaGFzPUtXZTtWUy5wcm90b3R5cGUuc2V0PVpXZTt5SnQuZXhwb3J0cz1WU30pO3ZhciBCQj1IKChVWG4sdkp0KT0+e2Z1bmN0aW9uIEpXZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8biYmdChlW3JdLHIsZSkhPT0hMTspO3JldHVybiBlfXZKdC5leHBvcnRzPUpXZX0pO3ZhciBmc3Q9SCgocVhuLHhKdCk9Pnt2YXIgUVdlPWwwKCksdFllPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPVFXZShPYmplY3QsImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIGUoe30sIiIse30pLGV9Y2F0Y2godCl7fX0oKTt4SnQuZXhwb3J0cz10WWV9KTt2YXIgSTQ9SCgoR1huLHdKdCk9Pnt2YXIgYkp0PWZzdCgpO2Z1bmN0aW9uIGVZZShlLHQscil7dD09Il9fcHJvdG9fXyImJmJKdD9iSnQoZSx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyLHdyaXRhYmxlOiEwfSk6ZVt0XT1yfXdKdC5leHBvcnRzPWVZZX0pO3ZhciBMND1IKChXWG4sU0p0KT0+e3ZhciByWWU9STQoKSxuWWU9WXYoKSxpWWU9T2JqZWN0LnByb3RvdHlwZSxvWWU9aVllLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFZZShlLHQscil7dmFyIG49ZVt0XTsoIShvWWUuY2FsbChlLHQpJiZuWWUobixyKSl8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJnJZZShlLHQscil9U0p0LmV4cG9ydHM9YVllfSk7dmFyIFVTPUgoKFlYbixNSnQpPT57dmFyIHNZZT1MNCgpLGxZZT1JNCgpO2Z1bmN0aW9uIGNZZShlLHQscixuKXt2YXIgaT0hcjtyfHwocj17fSk7Zm9yKHZhciBvPS0xLGE9dC5sZW5ndGg7KytvPGE7KXt2YXIgcz10W29dLGw9bj9uKHJbc10sZVtzXSxzLHIsZSk6dm9pZCAwO2w9PT12b2lkIDAmJihsPWVbc10pLGk/bFllKHIscyxsKTpzWWUocixzLGwpfXJldHVybiByfU1KdC5leHBvcnRzPWNZZX0pO3ZhciBUSnQ9SCgoalhuLEVKdCk9PntmdW5jdGlvbiB1WWUoZSx0KXtmb3IodmFyIHI9LTEsbj1BcnJheShlKTsrK3I8ZTspbltyXT10KHIpO3JldHVybiBufUVKdC5leHBvcnRzPXVZZX0pO3ZhciBZdT1IKChYWG4sQ0p0KT0+e2Z1bmN0aW9uIGhZZShlKXtyZXR1cm4gZSE9bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifUNKdC5leHBvcnRzPWhZZX0pO3ZhciBQSnQ9SCgoJFhuLEFKdCk9Pnt2YXIgZlllPXMwKCkscFllPVl1KCksZFllPSJbb2JqZWN0IEFyZ3VtZW50c10iO2Z1bmN0aW9uIG1ZZShlKXtyZXR1cm4gcFllKGUpJiZmWWUoZSk9PWRZZX1BSnQuZXhwb3J0cz1tWWV9KTt2YXIgcVM9SCgoS1huLGtKdCk9Pnt2YXIgSUp0PVBKdCgpLGdZZT1ZdSgpLExKdD1PYmplY3QucHJvdG90eXBlLF9ZZT1MSnQuaGFzT3duUHJvcGVydHkseVllPUxKdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSx2WWU9SUp0KGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/SUp0OmZ1bmN0aW9uKGUpe3JldHVybiBnWWUoZSkmJl9ZZS5jYWxsKGUsImNhbGxlZSIpJiYheVllLmNhbGwoZSwiY2FsbGVlIil9O2tKdC5leHBvcnRzPXZZZX0pO3ZhciBUaT1IKChaWG4sUkp0KT0+e3ZhciB4WWU9QXJyYXkuaXNBcnJheTtSSnQuZXhwb3J0cz14WWV9KTt2YXIgREp0PUgoKEpYbixOSnQpPT57ZnVuY3Rpb24gYlllKCl7cmV0dXJuITF9Tkp0LmV4cG9ydHM9YlllfSk7dmFyIFh2PUgoKGs0LEdTKT0+e3ZhciB3WWU9SGMoKSxTWWU9REp0KCksRkp0PXR5cGVvZiBrND09Im9iamVjdCImJms0JiYhazQubm9kZVR5cGUmJms0LE9KdD1GSnQmJnR5cGVvZiBHUz09Im9iamVjdCImJkdTJiYhR1Mubm9kZVR5cGUmJkdTLE1ZZT1PSnQmJk9KdC5leHBvcnRzPT09Rkp0LHpKdD1NWWU/d1llLkJ1ZmZlcjp2b2lkIDAsRVllPXpKdD96SnQuaXNCdWZmZXI6dm9pZCAwLFRZZT1FWWV8fFNZZTtHUy5leHBvcnRzPVRZZX0pO3ZhciBSND1IKChRWG4sQkp0KT0+e3ZhciBDWWU9OTAwNzE5OTI1NDc0MDk5MSxBWWU9L14oPzowfFsxLTldXGQqKSQvO2Z1bmN0aW9uIFBZZShlLHQpe3ZhciByPXR5cGVvZiBlO3JldHVybiB0PXQ9PW51bGw/Q1llOnQsISF0JiYocj09Im51bWJlciJ8fHIhPSJzeW1ib2wiJiZBWWUudGVzdChlKSkmJmU+LTEmJmUlMT09MCYmZTx0fUJKdC5leHBvcnRzPVBZZX0pO3ZhciBIQj1IKCh0JG4sSEp0KT0+e3ZhciBJWWU9OTAwNzE5OTI1NDc0MDk5MTtmdW5jdGlvbiBMWWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ibnVtYmVyIiYmZT4tMSYmZSUxPT0wJiZlPD1JWWV9SEp0LmV4cG9ydHM9TFllfSk7dmFyIFVKdD1IKChlJG4sVkp0KT0+e3ZhciBrWWU9czAoKSxSWWU9SEIoKSxOWWU9WXUoKSxEWWU9IltvYmplY3QgQXJndW1lbnRzXSIsT1llPSJbb2JqZWN0IEFycmF5XSIselllPSJbb2JqZWN0IEJvb2xlYW5dIixGWWU9IltvYmplY3QgRGF0ZV0iLEJZZT0iW29iamVjdCBFcnJvcl0iLEhZZT0iW29iamVjdCBGdW5jdGlvbl0iLFZZZT0iW29iamVjdCBNYXBdIixVWWU9IltvYmplY3QgTnVtYmVyXSIscVllPSJbb2JqZWN0IE9iamVjdF0iLEdZZT0iW29iamVjdCBSZWdFeHBdIixXWWU9IltvYmplY3QgU2V0XSIsWVllPSJbb2JqZWN0IFN0cmluZ10iLGpZZT0iW29iamVjdCBXZWFrTWFwXSIsWFllPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsJFllPSJbb2JqZWN0IERhdGFWaWV3XSIsS1llPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLFpZZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixKWWU9IltvYmplY3QgSW50OEFycmF5XSIsUVllPSJbb2JqZWN0IEludDE2QXJyYXldIix0amU9IltvYmplY3QgSW50MzJBcnJheV0iLGVqZT0iW29iamVjdCBVaW50OEFycmF5XSIscmplPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsbmplPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsaWplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsVm49e307Vm5bS1llXT1WbltaWWVdPVZuW0pZZV09Vm5bUVllXT1Wblt0amVdPVZuW2VqZV09Vm5bcmplXT1WbltuamVdPVZuW2lqZV09ITA7Vm5bRFllXT1WbltPWWVdPVZuW1hZZV09Vm5belllXT1WblskWWVdPVZuW0ZZZV09Vm5bQlllXT1WbltIWWVdPVZuW1ZZZV09Vm5bVVllXT1WbltxWWVdPVZuW0dZZV09Vm5bV1llXT1WbltZWWVdPVZuW2pZZV09ITE7ZnVuY3Rpb24gb2plKGUpe3JldHVybiBOWWUoZSkmJlJZZShlLmxlbmd0aCkmJiEhVm5ba1llKGUpXX1WSnQuZXhwb3J0cz1vamV9KTt2YXIgTjQ9SCgociRuLHFKdCk9PntmdW5jdGlvbiBhamUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfX1xSnQuZXhwb3J0cz1hamV9KTt2YXIgVkI9SCgoRDQsV1MpPT57dmFyIHNqZT1jc3QoKSxHSnQ9dHlwZW9mIEQ0PT0ib2JqZWN0IiYmRDQmJiFENC5ub2RlVHlwZSYmRDQsTzQ9R0p0JiZ0eXBlb2YgV1M9PSJvYmplY3QiJiZXUyYmIVdTLm5vZGVUeXBlJiZXUyxsamU9TzQmJk80LmV4cG9ydHM9PT1HSnQscHN0PWxqZSYmc2plLnByb2Nlc3MsY2plPWZ1bmN0aW9uKCl7dHJ5e3ZhciBlPU80JiZPNC5yZXF1aXJlJiZPNC5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIGV8fHBzdCYmcHN0LmJpbmRpbmcmJnBzdC5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTtXUy5leHBvcnRzPWNqZX0pO3ZhciBZUz1IKChuJG4sakp0KT0+e3ZhciB1amU9VUp0KCksaGplPU40KCksV0p0PVZCKCksWUp0PVdKdCYmV0p0LmlzVHlwZWRBcnJheSxmamU9WUp0P2hqZShZSnQpOnVqZTtqSnQuZXhwb3J0cz1mamV9KTt2YXIgZHN0PUgoKGkkbixYSnQpPT57dmFyIHBqZT1USnQoKSxkamU9cVMoKSxtamU9VGkoKSxnamU9WHYoKSxfamU9UjQoKSx5amU9WVMoKSx2amU9T2JqZWN0LnByb3RvdHlwZSx4amU9dmplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGJqZShlLHQpe3ZhciByPW1qZShlKSxuPSFyJiZkamUoZSksaT0hciYmIW4mJmdqZShlKSxvPSFyJiYhbiYmIWkmJnlqZShlKSxhPXJ8fG58fGl8fG8scz1hP3BqZShlLmxlbmd0aCxTdHJpbmcpOltdLGw9cy5sZW5ndGg7Zm9yKHZhciBjIGluIGUpKHR8fHhqZS5jYWxsKGUsYykpJiYhKGEmJihjPT0ibGVuZ3RoInx8aSYmKGM9PSJvZmZzZXQifHxjPT0icGFyZW50Iil8fG8mJihjPT0iYnVmZmVyInx8Yz09ImJ5dGVMZW5ndGgifHxjPT0iYnl0ZU9mZnNldCIpfHxfamUoYyxsKSkpJiZzLnB1c2goYyk7cmV0dXJuIHN9WEp0LmV4cG9ydHM9YmplfSk7dmFyIHo0PUgoKG8kbiwkSnQpPT57dmFyIHdqZT1PYmplY3QucHJvdG90eXBlO2Z1bmN0aW9uIFNqZShlKXt2YXIgdD1lJiZlLmNvbnN0cnVjdG9yLHI9dHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQucHJvdG90eXBlfHx3amU7cmV0dXJuIGU9PT1yfSRKdC5leHBvcnRzPVNqZX0pO3ZhciBtc3Q9SCgoYSRuLEtKdCk9PntmdW5jdGlvbiBNamUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUodChyKSl9fUtKdC5leHBvcnRzPU1qZX0pO3ZhciBKSnQ9SCgocyRuLFpKdCk9Pnt2YXIgRWplPW1zdCgpLFRqZT1FamUoT2JqZWN0LmtleXMsT2JqZWN0KTtaSnQuZXhwb3J0cz1UamV9KTt2YXIgVUI9SCgobCRuLFFKdCk9Pnt2YXIgQ2plPXo0KCksQWplPUpKdCgpLFBqZT1PYmplY3QucHJvdG90eXBlLElqZT1QamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gTGplKGUpe2lmKCFDamUoZSkpcmV0dXJuIEFqZShlKTt2YXIgdD1bXTtmb3IodmFyIHIgaW4gT2JqZWN0KGUpKUlqZS5jYWxsKGUscikmJnIhPSJjb25zdHJ1Y3RvciImJnQucHVzaChyKTtyZXR1cm4gdH1RSnQuZXhwb3J0cz1MamV9KTt2YXIgQmY9SCgoYyRuLHRRdCk9Pnt2YXIga2plPUZTKCksUmplPUhCKCk7ZnVuY3Rpb24gTmplKGUpe3JldHVybiBlIT1udWxsJiZSamUoZS5sZW5ndGgpJiYha2plKGUpfXRRdC5leHBvcnRzPU5qZX0pO3ZhciBBZD1IKCh1JG4sZVF0KT0+e3ZhciBEamU9ZHN0KCksT2plPVVCKCksemplPUJmKCk7ZnVuY3Rpb24gRmplKGUpe3JldHVybiB6amUoZSk/RGplKGUpOk9qZShlKX1lUXQuZXhwb3J0cz1GamV9KTt2YXIgblF0PUgoKGgkbixyUXQpPT57dmFyIEJqZT1VUygpLEhqZT1BZCgpO2Z1bmN0aW9uIFZqZShlLHQpe3JldHVybiBlJiZCamUodCxIamUodCksZSl9clF0LmV4cG9ydHM9VmplfSk7dmFyIG9RdD1IKChmJG4saVF0KT0+e2Z1bmN0aW9uIFVqZShlKXt2YXIgdD1bXTtpZihlIT1udWxsKWZvcih2YXIgciBpbiBPYmplY3QoZSkpdC5wdXNoKHIpO3JldHVybiB0fWlRdC5leHBvcnRzPVVqZX0pO3ZhciBzUXQ9SCgocCRuLGFRdCk9Pnt2YXIgcWplPU1sKCksR2plPXo0KCksV2plPW9RdCgpLFlqZT1PYmplY3QucHJvdG90eXBlLGpqZT1ZamUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWGplKGUpe2lmKCFxamUoZSkpcmV0dXJuIFdqZShlKTt2YXIgdD1HamUoZSkscj1bXTtmb3IodmFyIG4gaW4gZSluPT0iY29uc3RydWN0b3IiJiYodHx8IWpqZS5jYWxsKGUsbikpfHxyLnB1c2gobik7cmV0dXJuIHJ9YVF0LmV4cG9ydHM9WGplfSk7dmFyIGMwPUgoKGQkbixsUXQpPT57dmFyICRqZT1kc3QoKSxLamU9c1F0KCksWmplPUJmKCk7ZnVuY3Rpb24gSmplKGUpe3JldHVybiBaamUoZSk/JGplKGUsITApOktqZShlKX1sUXQuZXhwb3J0cz1KamV9KTt2YXIgdVF0PUgoKG0kbixjUXQpPT57dmFyIFFqZT1VUygpLHRYZT1jMCgpO2Z1bmN0aW9uIGVYZShlLHQpe3JldHVybiBlJiZRamUodCx0WGUodCksZSl9Y1F0LmV4cG9ydHM9ZVhlfSk7dmFyIGdzdD1IKChGNCxqUyk9Pnt2YXIgclhlPUhjKCksZFF0PXR5cGVvZiBGND09Im9iamVjdCImJkY0JiYhRjQubm9kZVR5cGUmJkY0LGhRdD1kUXQmJnR5cGVvZiBqUz09Im9iamVjdCImJmpTJiYhalMubm9kZVR5cGUmJmpTLG5YZT1oUXQmJmhRdC5leHBvcnRzPT09ZFF0LGZRdD1uWGU/clhlLkJ1ZmZlcjp2b2lkIDAscFF0PWZRdD9mUXQuYWxsb2NVbnNhZmU6dm9pZCAwO2Z1bmN0aW9uIGlYZShlLHQpe2lmKHQpcmV0dXJuIGUuc2xpY2UoKTt2YXIgcj1lLmxlbmd0aCxuPXBRdD9wUXQocik6bmV3IGUuY29uc3RydWN0b3Iocik7cmV0dXJuIGUuY29weShuKSxufWpTLmV4cG9ydHM9aVhlfSk7dmFyIF9zdD1IKChnJG4sbVF0KT0+e2Z1bmN0aW9uIG9YZShlLHQpe3ZhciByPS0xLG49ZS5sZW5ndGg7Zm9yKHR8fCh0PUFycmF5KG4pKTsrK3I8bjspdFtyXT1lW3JdO3JldHVybiB0fW1RdC5leHBvcnRzPW9YZX0pO3ZhciB5c3Q9SCgoXyRuLGdRdCk9PntmdW5jdGlvbiBhWGUoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGgsaT0wLG89W107KytyPG47KXt2YXIgYT1lW3JdO3QoYSxyLGUpJiYob1tpKytdPWEpfXJldHVybiBvfWdRdC5leHBvcnRzPWFYZX0pO3ZhciB2c3Q9SCgoeSRuLF9RdCk9PntmdW5jdGlvbiBzWGUoKXtyZXR1cm5bXX1fUXQuZXhwb3J0cz1zWGV9KTt2YXIgcUI9SCgodiRuLHZRdCk9Pnt2YXIgbFhlPXlzdCgpLGNYZT12c3QoKSx1WGU9T2JqZWN0LnByb3RvdHlwZSxoWGU9dVhlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHlRdD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZYZT15UXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/W106KGU9T2JqZWN0KGUpLGxYZSh5UXQoZSksZnVuY3Rpb24odCl7cmV0dXJuIGhYZS5jYWxsKGUsdCl9KSl9OmNYZTt2UXQuZXhwb3J0cz1mWGV9KTt2YXIgYlF0PUgoKHgkbix4UXQpPT57dmFyIHBYZT1VUygpLGRYZT1xQigpO2Z1bmN0aW9uIG1YZShlLHQpe3JldHVybiBwWGUoZSxkWGUoZSksdCl9eFF0LmV4cG9ydHM9bVhlfSk7dmFyIEdCPUgoKGIkbix3UXQpPT57ZnVuY3Rpb24gZ1hlKGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaT1lLmxlbmd0aDsrK3I8bjspZVtpK3JdPXRbcl07cmV0dXJuIGV9d1F0LmV4cG9ydHM9Z1hlfSk7dmFyIEI0PUgoKHckbixTUXQpPT57dmFyIF9YZT1tc3QoKSx5WGU9X1hlKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO1NRdC5leHBvcnRzPXlYZX0pO3ZhciB4c3Q9SCgoUyRuLE1RdCk9Pnt2YXIgdlhlPUdCKCkseFhlPUI0KCksYlhlPXFCKCksd1hlPXZzdCgpLFNYZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLE1YZT1TWGU/ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdO2U7KXZYZSh0LGJYZShlKSksZT14WGUoZSk7cmV0dXJuIHR9OndYZTtNUXQuZXhwb3J0cz1NWGV9KTt2YXIgVFF0PUgoKE0kbixFUXQpPT57dmFyIEVYZT1VUygpLFRYZT14c3QoKTtmdW5jdGlvbiBDWGUoZSx0KXtyZXR1cm4gRVhlKGUsVFhlKGUpLHQpfUVRdC5leHBvcnRzPUNYZX0pO3ZhciBic3Q9SCgoRSRuLENRdCk9Pnt2YXIgQVhlPUdCKCksUFhlPVRpKCk7ZnVuY3Rpb24gSVhlKGUsdCxyKXt2YXIgbj10KGUpO3JldHVybiBQWGUoZSk/bjpBWGUobixyKGUpKX1DUXQuZXhwb3J0cz1JWGV9KTt2YXIgd3N0PUgoKFQkbixBUXQpPT57dmFyIExYZT1ic3QoKSxrWGU9cUIoKSxSWGU9QWQoKTtmdW5jdGlvbiBOWGUoZSl7cmV0dXJuIExYZShlLFJYZSxrWGUpfUFRdC5leHBvcnRzPU5YZX0pO3ZhciBJUXQ9SCgoQyRuLFBRdCk9Pnt2YXIgRFhlPWJzdCgpLE9YZT14c3QoKSx6WGU9YzAoKTtmdW5jdGlvbiBGWGUoZSl7cmV0dXJuIERYZShlLHpYZSxPWGUpfVBRdC5leHBvcnRzPUZYZX0pO3ZhciBrUXQ9SCgoQSRuLExRdCk9Pnt2YXIgQlhlPWwwKCksSFhlPUhjKCksVlhlPUJYZShIWGUsIkRhdGFWaWV3Iik7TFF0LmV4cG9ydHM9VlhlfSk7dmFyIE5RdD1IKChQJG4sUlF0KT0+e3ZhciBVWGU9bDAoKSxxWGU9SGMoKSxHWGU9VVhlKHFYZSwiUHJvbWlzZSIpO1JRdC5leHBvcnRzPUdYZX0pO3ZhciBTc3Q9SCgoSSRuLERRdCk9Pnt2YXIgV1hlPWwwKCksWVhlPUhjKCksalhlPVdYZShZWGUsIlNldCIpO0RRdC5leHBvcnRzPWpYZX0pO3ZhciB6UXQ9SCgoTCRuLE9RdCk9Pnt2YXIgWFhlPWwwKCksJFhlPUhjKCksS1hlPVhYZSgkWGUsIldlYWtNYXAiKTtPUXQuZXhwb3J0cz1LWGV9KTt2YXIgS3Y9SCgoayRuLEdRdCk9Pnt2YXIgTXN0PWtRdCgpLEVzdD16QigpLFRzdD1OUXQoKSxDc3Q9U3N0KCksQXN0PXpRdCgpLHFRdD1zMCgpLFhTPWhzdCgpLEZRdD0iW29iamVjdCBNYXBdIixaWGU9IltvYmplY3QgT2JqZWN0XSIsQlF0PSJbb2JqZWN0IFByb21pc2VdIixIUXQ9IltvYmplY3QgU2V0XSIsVlF0PSJbb2JqZWN0IFdlYWtNYXBdIixVUXQ9IltvYmplY3QgRGF0YVZpZXddIixKWGU9WFMoTXN0KSxRWGU9WFMoRXN0KSx0JGU9WFMoVHN0KSxlJGU9WFMoQ3N0KSxyJGU9WFMoQXN0KSwkdj1xUXQ7KE1zdCYmJHYobmV3IE1zdChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9VVF0fHxFc3QmJiR2KG5ldyBFc3QpIT1GUXR8fFRzdCYmJHYoVHN0LnJlc29sdmUoKSkhPUJRdHx8Q3N0JiYkdihuZXcgQ3N0KSE9SFF0fHxBc3QmJiR2KG5ldyBBc3QpIT1WUXQpJiYoJHY9ZnVuY3Rpb24oZSl7dmFyIHQ9cVF0KGUpLHI9dD09WlhlP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9YUyhyKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEpYZTpyZXR1cm4gVVF0O2Nhc2UgUVhlOnJldHVybiBGUXQ7Y2FzZSB0JGU6cmV0dXJuIEJRdDtjYXNlIGUkZTpyZXR1cm4gSFF0O2Nhc2UgciRlOnJldHVybiBWUXR9cmV0dXJuIHR9KTtHUXQuZXhwb3J0cz0kdn0pO3ZhciBZUXQ9SCgoUiRuLFdRdCk9Pnt2YXIgbiRlPU9iamVjdC5wcm90b3R5cGUsaSRlPW4kZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvJGUoZSl7dmFyIHQ9ZS5sZW5ndGgscj1uZXcgZS5jb25zdHJ1Y3Rvcih0KTtyZXR1cm4gdCYmdHlwZW9mIGVbMF09PSJzdHJpbmciJiZpJGUuY2FsbChlLCJpbmRleCIpJiYoci5pbmRleD1lLmluZGV4LHIuaW5wdXQ9ZS5pbnB1dCkscn1XUXQuZXhwb3J0cz1vJGV9KTt2YXIgUHN0PUgoKE4kbixqUXQpPT57dmFyIGEkZT1IYygpLHMkZT1hJGUuVWludDhBcnJheTtqUXQuZXhwb3J0cz1zJGV9KTt2YXIgV0I9SCgoRCRuLCRRdCk9Pnt2YXIgWFF0PVBzdCgpO2Z1bmN0aW9uIGwkZShlKXt2YXIgdD1uZXcgZS5jb25zdHJ1Y3RvcihlLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWFF0KHQpLnNldChuZXcgWFF0KGUpKSx0fSRRdC5leHBvcnRzPWwkZX0pO3ZhciBaUXQ9SCgoTyRuLEtRdCk9Pnt2YXIgYyRlPVdCKCk7ZnVuY3Rpb24gdSRlKGUsdCl7dmFyIHI9dD9jJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpfUtRdC5leHBvcnRzPXUkZX0pO3ZhciBRUXQ9SCgoeiRuLEpRdCk9Pnt2YXIgaCRlPS9cdyokLztmdW5jdGlvbiBmJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5zb3VyY2UsaCRlLmV4ZWMoZSkpO3JldHVybiB0Lmxhc3RJbmRleD1lLmxhc3RJbmRleCx0fUpRdC5leHBvcnRzPWYkZX0pO3ZhciBpdGU9SCgoRiRuLG50ZSk9Pnt2YXIgdHRlPWp2KCksZXRlPXR0ZT90dGUucHJvdG90eXBlOnZvaWQgMCxydGU9ZXRlP2V0ZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBwJGUoZSl7cmV0dXJuIHJ0ZT9PYmplY3QocnRlLmNhbGwoZSkpOnt9fW50ZS5leHBvcnRzPXAkZX0pO3ZhciBJc3Q9SCgoQiRuLG90ZSk9Pnt2YXIgZCRlPVdCKCk7ZnVuY3Rpb24gbSRlKGUsdCl7dmFyIHI9dD9kJGUoZS5idWZmZXIpOmUuYnVmZmVyO3JldHVybiBuZXcgZS5jb25zdHJ1Y3RvcihyLGUuYnl0ZU9mZnNldCxlLmxlbmd0aCl9b3RlLmV4cG9ydHM9bSRlfSk7dmFyIHN0ZT1IKChIJG4sYXRlKT0+e3ZhciBnJGU9V0IoKSxfJGU9WlF0KCkseSRlPVFRdCgpLHYkZT1pdGUoKSx4JGU9SXN0KCksYiRlPSJbb2JqZWN0IEJvb2xlYW5dIix3JGU9IltvYmplY3QgRGF0ZV0iLFMkZT0iW29iamVjdCBNYXBdIixNJGU9IltvYmplY3QgTnVtYmVyXSIsRSRlPSJbb2JqZWN0IFJlZ0V4cF0iLFQkZT0iW29iamVjdCBTZXRdIixDJGU9IltvYmplY3QgU3RyaW5nXSIsQSRlPSJbb2JqZWN0IFN5bWJvbF0iLFAkZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEkkZT0iW29iamVjdCBEYXRhVmlld10iLEwkZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixrJGU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsUiRlPSJbb2JqZWN0IEludDhBcnJheV0iLE4kZT0iW29iamVjdCBJbnQxNkFycmF5XSIsRCRlPSJbb2JqZWN0IEludDMyQXJyYXldIixPJGU9IltvYmplY3QgVWludDhBcnJheV0iLHokZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLEYkZT0iW29iamVjdCBVaW50MTZBcnJheV0iLEIkZT0iW29iamVjdCBVaW50MzJBcnJheV0iO2Z1bmN0aW9uIEgkZShlLHQscil7dmFyIG49ZS5jb25zdHJ1Y3Rvcjtzd2l0Y2godCl7Y2FzZSBQJGU6cmV0dXJuIGckZShlKTtjYXNlIGIkZTpjYXNlIHckZTpyZXR1cm4gbmV3IG4oK2UpO2Nhc2UgSSRlOnJldHVybiBfJGUoZSxyKTtjYXNlIEwkZTpjYXNlIGskZTpjYXNlIFIkZTpjYXNlIE4kZTpjYXNlIEQkZTpjYXNlIE8kZTpjYXNlIHokZTpjYXNlIEYkZTpjYXNlIEIkZTpyZXR1cm4geCRlKGUscik7Y2FzZSBTJGU6cmV0dXJuIG5ldyBuO2Nhc2UgTSRlOmNhc2UgQyRlOnJldHVybiBuZXcgbihlKTtjYXNlIEUkZTpyZXR1cm4geSRlKGUpO2Nhc2UgVCRlOnJldHVybiBuZXcgbjtjYXNlIEEkZTpyZXR1cm4gdiRlKGUpfX1hdGUuZXhwb3J0cz1IJGV9KTt2YXIgTHN0PUgoKFYkbixjdGUpPT57dmFyIFYkZT1NbCgpLGx0ZT1PYmplY3QuY3JlYXRlLFUkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCFWJGUodCkpcmV0dXJue307aWYobHRlKXJldHVybiBsdGUodCk7ZS5wcm90b3R5cGU9dDt2YXIgcj1uZXcgZTtyZXR1cm4gZS5wcm90b3R5cGU9dm9pZCAwLHJ9fSgpO2N0ZS5leHBvcnRzPVUkZX0pO3ZhciBrc3Q9SCgoVSRuLHV0ZSk9Pnt2YXIgcSRlPUxzdCgpLEckZT1CNCgpLFckZT16NCgpO2Z1bmN0aW9uIFkkZShlKXtyZXR1cm4gdHlwZW9mIGUuY29uc3RydWN0b3I9PSJmdW5jdGlvbiImJiFXJGUoZSk/cSRlKEckZShlKSk6e319dXRlLmV4cG9ydHM9WSRlfSk7dmFyIGZ0ZT1IKChxJG4saHRlKT0+e3ZhciBqJGU9S3YoKSxYJGU9WXUoKSwkJGU9IltvYmplY3QgTWFwXSI7ZnVuY3Rpb24gSyRlKGUpe3JldHVybiBYJGUoZSkmJmokZShlKT09JCRlfWh0ZS5leHBvcnRzPUskZX0pO3ZhciBndGU9SCgoRyRuLG10ZSk9Pnt2YXIgWiRlPWZ0ZSgpLEokZT1ONCgpLHB0ZT1WQigpLGR0ZT1wdGUmJnB0ZS5pc01hcCxRJGU9ZHRlP0okZShkdGUpOlokZTttdGUuZXhwb3J0cz1RJGV9KTt2YXIgeXRlPUgoKFckbixfdGUpPT57dmFyIHRLZT1LdigpLGVLZT1ZdSgpLHJLZT0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBuS2UoZSl7cmV0dXJuIGVLZShlKSYmdEtlKGUpPT1yS2V9X3RlLmV4cG9ydHM9bktlfSk7dmFyIHd0ZT1IKChZJG4sYnRlKT0+e3ZhciBpS2U9eXRlKCksb0tlPU40KCksdnRlPVZCKCkseHRlPXZ0ZSYmdnRlLmlzU2V0LGFLZT14dGU/b0tlKHh0ZSk6aUtlO2J0ZS5leHBvcnRzPWFLZX0pO3ZhciBSc3Q9SCgoaiRuLFR0ZSk9Pnt2YXIgc0tlPVA0KCksbEtlPUJCKCksY0tlPUw0KCksdUtlPW5RdCgpLGhLZT11UXQoKSxmS2U9Z3N0KCkscEtlPV9zdCgpLGRLZT1iUXQoKSxtS2U9VFF0KCksZ0tlPXdzdCgpLF9LZT1JUXQoKSx5S2U9S3YoKSx2S2U9WVF0KCkseEtlPXN0ZSgpLGJLZT1rc3QoKSx3S2U9VGkoKSxTS2U9WHYoKSxNS2U9Z3RlKCksRUtlPU1sKCksVEtlPXd0ZSgpLENLZT1BZCgpLEFLZT1jMCgpLFBLZT0xLElLZT0yLExLZT00LFN0ZT0iW29iamVjdCBBcmd1bWVudHNdIixrS2U9IltvYmplY3QgQXJyYXldIixSS2U9IltvYmplY3QgQm9vbGVhbl0iLE5LZT0iW29iamVjdCBEYXRlXSIsREtlPSJbb2JqZWN0IEVycm9yXSIsTXRlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsT0tlPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsektlPSJbb2JqZWN0IE1hcF0iLEZLZT0iW29iamVjdCBOdW1iZXJdIixFdGU9IltvYmplY3QgT2JqZWN0XSIsQktlPSJbb2JqZWN0IFJlZ0V4cF0iLEhLZT0iW29iamVjdCBTZXRdIixWS2U9IltvYmplY3QgU3RyaW5nXSIsVUtlPSJbb2JqZWN0IFN5bWJvbF0iLHFLZT0iW29iamVjdCBXZWFrTWFwXSIsR0tlPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsV0tlPSJbb2JqZWN0IERhdGFWaWV3XSIsWUtlPSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iLGpLZT0iW29iamVjdCBGbG9hdDY0QXJyYXldIixYS2U9IltvYmplY3QgSW50OEFycmF5XSIsJEtlPSJbb2JqZWN0IEludDE2QXJyYXldIixLS2U9IltvYmplY3QgSW50MzJBcnJheV0iLFpLZT0iW29iamVjdCBVaW50OEFycmF5XSIsSktlPSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsUUtlPSJbb2JqZWN0IFVpbnQxNkFycmF5XSIsdFplPSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ249e307Q25bU3RlXT1DbltrS2VdPUNuW0dLZV09Q25bV0tlXT1DbltSS2VdPUNuW05LZV09Q25bWUtlXT1DbltqS2VdPUNuW1hLZV09Q25bJEtlXT1DbltLS2VdPUNuW3pLZV09Q25bRktlXT1DbltFdGVdPUNuW0JLZV09Q25bSEtlXT1DbltWS2VdPUNuW1VLZV09Q25bWktlXT1DbltKS2VdPUNuW1FLZV09Q25bdFplXT0hMDtDbltES2VdPUNuW010ZV09Q25bcUtlXT0hMTtmdW5jdGlvbiBZQihlLHQscixuLGksbyl7dmFyIGEscz10JlBLZSxsPXQmSUtlLGM9dCZMS2U7aWYociYmKGE9aT9yKGUsbixpLG8pOnIoZSkpLGEhPT12b2lkIDApcmV0dXJuIGE7aWYoIUVLZShlKSlyZXR1cm4gZTt2YXIgdT13S2UoZSk7aWYodSl7aWYoYT12S2UoZSksIXMpcmV0dXJuIHBLZShlLGEpfWVsc2V7dmFyIGg9eUtlKGUpLGY9aD09TXRlfHxoPT1PS2U7aWYoU0tlKGUpKXJldHVybiBmS2UoZSxzKTtpZihoPT1FdGV8fGg9PVN0ZXx8ZiYmIWkpe2lmKGE9bHx8Zj97fTpiS2UoZSksIXMpcmV0dXJuIGw/bUtlKGUsaEtlKGEsZSkpOmRLZShlLHVLZShhLGUpKX1lbHNle2lmKCFDbltoXSlyZXR1cm4gaT9lOnt9O2E9eEtlKGUsaCxzKX19b3x8KG89bmV3IHNLZSk7dmFyIHA9by5nZXQoZSk7aWYocClyZXR1cm4gcDtvLnNldChlLGEpLFRLZShlKT9lLmZvckVhY2goZnVuY3Rpb24oXyl7YS5hZGQoWUIoXyx0LHIsXyxlLG8pKX0pOk1LZShlKSYmZS5mb3JFYWNoKGZ1bmN0aW9uKF8seSl7YS5zZXQoeSxZQihfLHQscix5LGUsbykpfSk7dmFyIGQ9Yz9sP19LZTpnS2U6bD9BS2U6Q0tlLGc9dT92b2lkIDA6ZChlKTtyZXR1cm4gbEtlKGd8fGUsZnVuY3Rpb24oXyx5KXtnJiYoeT1fLF89ZVt5XSksY0tlKGEseSxZQihfLHQscix5LGUsbykpfSksYX1UdGUuZXhwb3J0cz1ZQn0pO3ZhciBBdGU9SCgoWCRuLEN0ZSk9Pnt2YXIgZVplPVJzdCgpLHJaZT00O2Z1bmN0aW9uIG5aZShlKXtyZXR1cm4gZVplKGUsclplKX1DdGUuZXhwb3J0cz1uWmV9KTt2YXIgakI9SCgoJCRuLFB0ZSk9PntmdW5jdGlvbiBpWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fVB0ZS5leHBvcnRzPWlaZX0pO3ZhciBMdGU9SCgoSyRuLEl0ZSk9PntmdW5jdGlvbiBvWmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGk9LTEsbz1PYmplY3QodCksYT1uKHQpLHM9YS5sZW5ndGg7cy0tOyl7dmFyIGw9YVtlP3M6KytpXTtpZihyKG9bbF0sbCxvKT09PSExKWJyZWFrfXJldHVybiB0fX1JdGUuZXhwb3J0cz1vWmV9KTt2YXIgWEI9SCgoWiRuLGt0ZSk9Pnt2YXIgYVplPUx0ZSgpLHNaZT1hWmUoKTtrdGUuZXhwb3J0cz1zWmV9KTt2YXIgJEI9SCgoSiRuLFJ0ZSk9Pnt2YXIgbFplPVhCKCksY1plPUFkKCk7ZnVuY3Rpb24gdVplKGUsdCl7cmV0dXJuIGUmJmxaZShlLHQsY1plKX1SdGUuZXhwb3J0cz11WmV9KTt2YXIgRHRlPUgoKFEkbixOdGUpPT57dmFyIGhaZT1CZigpO2Z1bmN0aW9uIGZaZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2lmKHI9PW51bGwpcmV0dXJuIHI7aWYoIWhaZShyKSlyZXR1cm4gZShyLG4pO2Zvcih2YXIgaT1yLmxlbmd0aCxvPXQ/aTotMSxhPU9iamVjdChyKTsodD9vLS06KytvPGkpJiZuKGFbb10sbyxhKSE9PSExOyk7cmV0dXJuIHJ9fU50ZS5leHBvcnRzPWZaZX0pO3ZhciBIND1IKCh0S24sT3RlKT0+e3ZhciBwWmU9JEIoKSxkWmU9RHRlKCksbVplPWRaZShwWmUpO090ZS5leHBvcnRzPW1aZX0pO3ZhciB1MD1IKChlS24senRlKT0+e2Z1bmN0aW9uIGdaZShlKXtyZXR1cm4gZX16dGUuZXhwb3J0cz1nWmV9KTt2YXIgTnN0PUgoKHJLbixGdGUpPT57dmFyIF9aZT11MCgpO2Z1bmN0aW9uIHlaZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpfWmV9RnRlLmV4cG9ydHM9eVplfSk7dmFyIERzdD1IKChuS24sQnRlKT0+e3ZhciB2WmU9QkIoKSx4WmU9SDQoKSxiWmU9TnN0KCksd1plPVRpKCk7ZnVuY3Rpb24gU1plKGUsdCl7dmFyIHI9d1plKGUpP3ZaZTp4WmU7cmV0dXJuIHIoZSxiWmUodCkpfUJ0ZS5leHBvcnRzPVNaZX0pO3ZhciBPc3Q9SCgoaUtuLEh0ZSk9PntIdGUuZXhwb3J0cz1Ec3QoKX0pO3ZhciBVdGU9SCgob0tuLFZ0ZSk9Pnt2YXIgTVplPUg0KCk7ZnVuY3Rpb24gRVplKGUsdCl7dmFyIHI9W107cmV0dXJuIE1aZShlLGZ1bmN0aW9uKG4saSxvKXt0KG4saSxvKSYmci5wdXNoKG4pfSkscn1WdGUuZXhwb3J0cz1FWmV9KTt2YXIgR3RlPUgoKGFLbixxdGUpPT57dmFyIFRaZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI7ZnVuY3Rpb24gQ1plKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLFRaZSksdGhpc31xdGUuZXhwb3J0cz1DWmV9KTt2YXIgWXRlPUgoKHNLbixXdGUpPT57ZnVuY3Rpb24gQVplKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX1XdGUuZXhwb3J0cz1BWmV9KTt2YXIgenN0PUgoKGxLbixqdGUpPT57dmFyIFBaZT1GQigpLElaZT1HdGUoKSxMWmU9WXRlKCk7ZnVuY3Rpb24gS0IoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IFBaZTsrK3Q8cjspdGhpcy5hZGQoZVt0XSl9S0IucHJvdG90eXBlLmFkZD1LQi5wcm90b3R5cGUucHVzaD1JWmU7S0IucHJvdG90eXBlLmhhcz1MWmU7anRlLmV4cG9ydHM9S0J9KTt2YXIgJHRlPUgoKGNLbixYdGUpPT57ZnVuY3Rpb24ga1plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoOysrcjxuOylpZih0KGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX1YdGUuZXhwb3J0cz1rWmV9KTt2YXIgRnN0PUgoKHVLbixLdGUpPT57ZnVuY3Rpb24gUlplKGUsdCl7cmV0dXJuIGUuaGFzKHQpfUt0ZS5leHBvcnRzPVJaZX0pO3ZhciBCc3Q9SCgoaEtuLFp0ZSk9Pnt2YXIgTlplPXpzdCgpLERaZT0kdGUoKSxPWmU9RnN0KCkselplPTEsRlplPTI7ZnVuY3Rpb24gQlplKGUsdCxyLG4saSxvKXt2YXIgYT1yJnpaZSxzPWUubGVuZ3RoLGw9dC5sZW5ndGg7aWYocyE9bCYmIShhJiZsPnMpKXJldHVybiExO3ZhciBjPW8uZ2V0KGUpLHU9by5nZXQodCk7aWYoYyYmdSlyZXR1cm4gYz09dCYmdT09ZTt2YXIgaD0tMSxmPSEwLHA9ciZGWmU/bmV3IE5aZTp2b2lkIDA7Zm9yKG8uc2V0KGUsdCksby5zZXQodCxlKTsrK2g8czspe3ZhciBkPWVbaF0sZz10W2hdO2lmKG4pdmFyIF89YT9uKGcsZCxoLHQsZSxvKTpuKGQsZyxoLGUsdCxvKTtpZihfIT09dm9pZCAwKXtpZihfKWNvbnRpbnVlO2Y9ITE7YnJlYWt9aWYocCl7aWYoIURaZSh0LGZ1bmN0aW9uKHkseCl7aWYoIU9aZShwLHgpJiYoZD09PXl8fGkoZCx5LHIsbixvKSkpcmV0dXJuIHAucHVzaCh4KX0pKXtmPSExO2JyZWFrfX1lbHNlIGlmKCEoZD09PWd8fGkoZCxnLHIsbixvKSkpe2Y9ITE7YnJlYWt9fXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxmfVp0ZS5leHBvcnRzPUJaZX0pO3ZhciBRdGU9SCgoZktuLEp0ZSk9PntmdW5jdGlvbiBIWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obixpKXtyWysrdF09W2ksbl19KSxyfUp0ZS5leHBvcnRzPUhaZX0pO3ZhciBaQj1IKChwS24sdGVlKT0+e2Z1bmN0aW9uIFZaZShlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtyWysrdF09bn0pLHJ9dGVlLmV4cG9ydHM9VlplfSk7dmFyIG9lZT1IKChkS24saWVlKT0+e3ZhciBlZWU9anYoKSxyZWU9UHN0KCksVVplPVl2KCkscVplPUJzdCgpLEdaZT1RdGUoKSxXWmU9WkIoKSxZWmU9MSxqWmU9MixYWmU9IltvYmplY3QgQm9vbGVhbl0iLCRaZT0iW29iamVjdCBEYXRlXSIsS1plPSJbb2JqZWN0IEVycm9yXSIsWlplPSJbb2JqZWN0IE1hcF0iLEpaZT0iW29iamVjdCBOdW1iZXJdIixRWmU9IltvYmplY3QgUmVnRXhwXSIsdEplPSJbb2JqZWN0IFNldF0iLGVKZT0iW29iamVjdCBTdHJpbmddIixySmU9IltvYmplY3QgU3ltYm9sXSIsbkplPSJbb2JqZWN0IEFycmF5QnVmZmVyXSIsaUplPSJbb2JqZWN0IERhdGFWaWV3XSIsbmVlPWVlZT9lZWUucHJvdG90eXBlOnZvaWQgMCxIc3Q9bmVlP25lZS52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiBvSmUoZSx0LHIsbixpLG8sYSl7c3dpdGNoKHIpe2Nhc2UgaUplOmlmKGUuYnl0ZUxlbmd0aCE9dC5ieXRlTGVuZ3RofHxlLmJ5dGVPZmZzZXQhPXQuYnl0ZU9mZnNldClyZXR1cm4hMTtlPWUuYnVmZmVyLHQ9dC5idWZmZXI7Y2FzZSBuSmU6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IW8obmV3IHJlZShlKSxuZXcgcmVlKHQpKSk7Y2FzZSBYWmU6Y2FzZSAkWmU6Y2FzZSBKWmU6cmV0dXJuIFVaZSgrZSwrdCk7Y2FzZSBLWmU6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlIFFaZTpjYXNlIGVKZTpyZXR1cm4gZT09dCsiIjtjYXNlIFpaZTp2YXIgcz1HWmU7Y2FzZSB0SmU6dmFyIGw9biZZWmU7aWYoc3x8KHM9V1plKSxlLnNpemUhPXQuc2l6ZSYmIWwpcmV0dXJuITE7dmFyIGM9YS5nZXQoZSk7aWYoYylyZXR1cm4gYz09dDtufD1qWmUsYS5zZXQoZSx0KTt2YXIgdT1xWmUocyhlKSxzKHQpLG4saSxvLGEpO3JldHVybiBhLmRlbGV0ZShlKSx1O2Nhc2UgckplOmlmKEhzdClyZXR1cm4gSHN0LmNhbGwoZSk9PUhzdC5jYWxsKHQpfXJldHVybiExfWllZS5leHBvcnRzPW9KZX0pO3ZhciBsZWU9SCgobUtuLHNlZSk9Pnt2YXIgYWVlPXdzdCgpLGFKZT0xLHNKZT1PYmplY3QucHJvdG90eXBlLGxKZT1zSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gY0plKGUsdCxyLG4saSxvKXt2YXIgYT1yJmFKZSxzPWFlZShlKSxsPXMubGVuZ3RoLGM9YWVlKHQpLHU9Yy5sZW5ndGg7aWYobCE9dSYmIWEpcmV0dXJuITE7Zm9yKHZhciBoPWw7aC0tOyl7dmFyIGY9c1toXTtpZighKGE/ZiBpbiB0OmxKZS5jYWxsKHQsZikpKXJldHVybiExfXZhciBwPW8uZ2V0KGUpLGQ9by5nZXQodCk7aWYocCYmZClyZXR1cm4gcD09dCYmZD09ZTt2YXIgZz0hMDtvLnNldChlLHQpLG8uc2V0KHQsZSk7Zm9yKHZhciBfPWE7KytoPGw7KXtmPXNbaF07dmFyIHk9ZVtmXSx4PXRbZl07aWYobil2YXIgYj1hP24oeCx5LGYsdCxlLG8pOm4oeSx4LGYsZSx0LG8pO2lmKCEoYj09PXZvaWQgMD95PT09eHx8aSh5LHgscixuLG8pOmIpKXtnPSExO2JyZWFrfV98fChfPWY9PSJjb25zdHJ1Y3RvciIpfWlmKGcmJiFfKXt2YXIgUz1lLmNvbnN0cnVjdG9yLEM9dC5jb25zdHJ1Y3RvcjtTIT1DJiYiY29uc3RydWN0b3IiaW4gZSYmImNvbnN0cnVjdG9yImluIHQmJiEodHlwZW9mIFM9PSJmdW5jdGlvbiImJlMgaW5zdGFuY2VvZiBTJiZ0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQyBpbnN0YW5jZW9mIEMpJiYoZz0hMSl9cmV0dXJuIG8uZGVsZXRlKGUpLG8uZGVsZXRlKHQpLGd9c2VlLmV4cG9ydHM9Y0plfSk7dmFyIGdlZT1IKChnS24sbWVlKT0+e3ZhciBWc3Q9UDQoKSx1SmU9QnN0KCksaEplPW9lZSgpLGZKZT1sZWUoKSxjZWU9S3YoKSx1ZWU9VGkoKSxoZWU9WHYoKSxwSmU9WVMoKSxkSmU9MSxmZWU9IltvYmplY3QgQXJndW1lbnRzXSIscGVlPSJbb2JqZWN0IEFycmF5XSIsSkI9IltvYmplY3QgT2JqZWN0XSIsbUplPU9iamVjdC5wcm90b3R5cGUsZGVlPW1KZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBnSmUoZSx0LHIsbixpLG8pe3ZhciBhPXVlZShlKSxzPXVlZSh0KSxsPWE/cGVlOmNlZShlKSxjPXM/cGVlOmNlZSh0KTtsPWw9PWZlZT9KQjpsLGM9Yz09ZmVlP0pCOmM7dmFyIHU9bD09SkIsaD1jPT1KQixmPWw9PWM7aWYoZiYmaGVlKGUpKXtpZighaGVlKHQpKXJldHVybiExO2E9ITAsdT0hMX1pZihmJiYhdSlyZXR1cm4gb3x8KG89bmV3IFZzdCksYXx8cEplKGUpP3VKZShlLHQscixuLGksbyk6aEplKGUsdCxsLHIsbixpLG8pO2lmKCEociZkSmUpKXt2YXIgcD11JiZkZWUuY2FsbChlLCJfX3dyYXBwZWRfXyIpLGQ9aCYmZGVlLmNhbGwodCwiX193cmFwcGVkX18iKTtpZihwfHxkKXt2YXIgZz1wP2UudmFsdWUoKTplLF89ZD90LnZhbHVlKCk6dDtyZXR1cm4gb3x8KG89bmV3IFZzdCksaShnLF8scixuLG8pfX1yZXR1cm4gZj8ob3x8KG89bmV3IFZzdCksZkplKGUsdCxyLG4saSxvKSk6ITF9bWVlLmV4cG9ydHM9Z0plfSk7dmFyIFVzdD1IKChfS24sdmVlKT0+e3ZhciBfSmU9Z2VlKCksX2VlPVl1KCk7ZnVuY3Rpb24geWVlKGUsdCxyLG4saSl7cmV0dXJuIGU9PT10PyEwOmU9PW51bGx8fHQ9PW51bGx8fCFfZWUoZSkmJiFfZWUodCk/ZSE9PWUmJnQhPT10Ol9KZShlLHQscixuLHllZSxpKX12ZWUuZXhwb3J0cz15ZWV9KTt2YXIgYmVlPUgoKHlLbix4ZWUpPT57dmFyIHlKZT1QNCgpLHZKZT1Vc3QoKSx4SmU9MSxiSmU9MjtmdW5jdGlvbiB3SmUoZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgsbz1pLGE9IW47aWYoZT09bnVsbClyZXR1cm4hbztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIHM9cltpXTtpZihhJiZzWzJdP3NbMV0hPT1lW3NbMF1dOiEoc1swXWluIGUpKXJldHVybiExfWZvcig7KytpPG87KXtzPXJbaV07dmFyIGw9c1swXSxjPWVbbF0sdT1zWzFdO2lmKGEmJnNbMl0pe2lmKGM9PT12b2lkIDAmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyB5SmU7aWYobil2YXIgZj1uKGMsdSxsLGUsdCxoKTtpZighKGY9PT12b2lkIDA/dkplKHUsYyx4SmV8YkplLG4saCk6ZikpcmV0dXJuITF9fXJldHVybiEwfXhlZS5leHBvcnRzPXdKZX0pO3ZhciBxc3Q9SCgodktuLHdlZSk9Pnt2YXIgU0plPU1sKCk7ZnVuY3Rpb24gTUplKGUpe3JldHVybiBlPT09ZSYmIVNKZShlKX13ZWUuZXhwb3J0cz1NSmV9KTt2YXIgTWVlPUgoKHhLbixTZWUpPT57dmFyIEVKZT1xc3QoKSxUSmU9QWQoKTtmdW5jdGlvbiBDSmUoZSl7Zm9yKHZhciB0PVRKZShlKSxyPXQubGVuZ3RoO3ItLTspe3ZhciBuPXRbcl0saT1lW25dO3Rbcl09W24saSxFSmUoaSldfXJldHVybiB0fVNlZS5leHBvcnRzPUNKZX0pO3ZhciBHc3Q9SCgoYktuLEVlZSk9PntmdW5jdGlvbiBBSmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ITE6cltlXT09PXQmJih0IT09dm9pZCAwfHxlIGluIE9iamVjdChyKSl9fUVlZS5leHBvcnRzPUFKZX0pO3ZhciBDZWU9SCgod0tuLFRlZSk9Pnt2YXIgUEplPWJlZSgpLElKZT1NZWUoKSxMSmU9R3N0KCk7ZnVuY3Rpb24ga0plKGUpe3ZhciB0PUlKZShlKTtyZXR1cm4gdC5sZW5ndGg9PTEmJnRbMF1bMl0/TEplKHRbMF1bMF0sdFswXVsxXSk6ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT1lfHxQSmUocixlLHQpfX1UZWUuZXhwb3J0cz1rSmV9KTt2YXIgWnY9SCgoU0tuLEFlZSk9Pnt2YXIgUkplPXMwKCksTkplPVl1KCksREplPSJbb2JqZWN0IFN5bWJvbF0iO2Z1bmN0aW9uIE9KZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wifHxOSmUoZSkmJlJKZShlKT09REplfUFlZS5leHBvcnRzPU9KZX0pO3ZhciBRQj1IKChNS24sUGVlKT0+e3ZhciB6SmU9VGkoKSxGSmU9WnYoKSxCSmU9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sSEplPS9eXHcqJC87ZnVuY3Rpb24gVkplKGUsdCl7aWYoekplKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiByPT0ibnVtYmVyInx8cj09InN5bWJvbCJ8fHI9PSJib29sZWFuInx8ZT09bnVsbHx8RkplKGUpPyEwOkhKZS50ZXN0KGUpfHwhQkplLnRlc3QoZSl8fHQhPW51bGwmJmUgaW4gT2JqZWN0KHQpfVBlZS5leHBvcnRzPVZKZX0pO3ZhciBrZWU9SCgoRUtuLExlZSk9Pnt2YXIgSWVlPUZCKCksVUplPSJFeHBlY3RlZCBhIGZ1bmN0aW9uIjtmdW5jdGlvbiBXc3QoZSx0KXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uInx8dCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcihVSmUpO3ZhciByPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLGk9dD90LmFwcGx5KHRoaXMsbik6blswXSxvPXIuY2FjaGU7aWYoby5oYXMoaSkpcmV0dXJuIG8uZ2V0KGkpO3ZhciBhPWUuYXBwbHkodGhpcyxuKTtyZXR1cm4gci5jYWNoZT1vLnNldChpLGEpfHxvLGF9O3JldHVybiByLmNhY2hlPW5ldyhXc3QuQ2FjaGV8fEllZSkscn1Xc3QuQ2FjaGU9SWVlO0xlZS5leHBvcnRzPVdzdH0pO3ZhciBOZWU9SCgoVEtuLFJlZSk9Pnt2YXIgcUplPWtlZSgpLEdKZT01MDA7ZnVuY3Rpb24gV0plKGUpe3ZhciB0PXFKZShlLGZ1bmN0aW9uKG4pe3JldHVybiByLnNpemU9PT1HSmUmJnIuY2xlYXIoKSxufSkscj10LmNhY2hlO3JldHVybiB0fVJlZS5leHBvcnRzPVdKZX0pO3ZhciBPZWU9SCgoQ0tuLERlZSk9Pnt2YXIgWUplPU5lZSgpLGpKZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxYSmU9L1xcKFxcKT8vZywkSmU9WUplKGZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBlLmNoYXJDb2RlQXQoMCk9PT00NiYmdC5wdXNoKCIiKSxlLnJlcGxhY2UoakplLGZ1bmN0aW9uKHIsbixpLG8pe3QucHVzaChpP28ucmVwbGFjZShYSmUsIiQxIik6bnx8cil9KSx0fSk7RGVlLmV4cG9ydHM9JEplfSk7dmFyIFY0PUgoKEFLbix6ZWUpPT57ZnVuY3Rpb24gS0plKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9QXJyYXkobik7KytyPG47KWlbcl09dChlW3JdLHIsZSk7cmV0dXJuIGl9emVlLmV4cG9ydHM9S0plfSk7dmFyIHFlZT1IKChQS24sVWVlKT0+e3ZhciBGZWU9anYoKSxaSmU9VjQoKSxKSmU9VGkoKSxRSmU9WnYoKSx0UWU9MS8wLEJlZT1GZWU/RmVlLnByb3RvdHlwZTp2b2lkIDAsSGVlPUJlZT9CZWUudG9TdHJpbmc6dm9pZCAwO2Z1bmN0aW9uIFZlZShlKXtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGU7aWYoSkplKGUpKXJldHVybiBaSmUoZSxWZWUpKyIiO2lmKFFKZShlKSlyZXR1cm4gSGVlP0hlZS5jYWxsKGUpOiIiO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tdFFlPyItMCI6dH1VZWUuZXhwb3J0cz1WZWV9KTt2YXIgWXN0PUgoKElLbixHZWUpPT57dmFyIGVRZT1xZWUoKTtmdW5jdGlvbiByUWUoZSl7cmV0dXJuIGU9PW51bGw/IiI6ZVFlKGUpfUdlZS5leHBvcnRzPXJRZX0pO3ZhciBVND1IKChMS24sV2VlKT0+e3ZhciBuUWU9VGkoKSxpUWU9UUIoKSxvUWU9T2VlKCksYVFlPVlzdCgpO2Z1bmN0aW9uIHNRZShlLHQpe3JldHVybiBuUWUoZSk/ZTppUWUoZSx0KT9bZV06b1FlKGFRZShlKSl9V2VlLmV4cG9ydHM9c1FlfSk7dmFyICRTPUgoKGtLbixZZWUpPT57dmFyIGxRZT1adigpLGNRZT0xLzA7ZnVuY3Rpb24gdVFlKGUpe2lmKHR5cGVvZiBlPT0ic3RyaW5nInx8bFFlKGUpKXJldHVybiBlO3ZhciB0PWUrIiI7cmV0dXJuIHQ9PSIwIiYmMS9lPT0tY1FlPyItMCI6dH1ZZWUuZXhwb3J0cz11UWV9KTt2YXIgcTQ9SCgoUktuLGplZSk9Pnt2YXIgaFFlPVU0KCksZlFlPSRTKCk7ZnVuY3Rpb24gcFFlKGUsdCl7dD1oUWUodCxlKTtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO2UhPW51bGwmJnI8bjspZT1lW2ZRZSh0W3IrK10pXTtyZXR1cm4gciYmcj09bj9lOnZvaWQgMH1qZWUuZXhwb3J0cz1wUWV9KTt2YXIgJGVlPUgoKE5LbixYZWUpPT57dmFyIGRRZT1xNCgpO2Z1bmN0aW9uIG1RZShlLHQscil7dmFyIG49ZT09bnVsbD92b2lkIDA6ZFFlKGUsdCk7cmV0dXJuIG49PT12b2lkIDA/cjpufVhlZS5leHBvcnRzPW1RZX0pO3ZhciBaZWU9SCgoREtuLEtlZSk9PntmdW5jdGlvbiBnUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmdCBpbiBPYmplY3QoZSl9S2VlLmV4cG9ydHM9Z1FlfSk7dmFyIGpzdD1IKChPS24sSmVlKT0+e3ZhciBfUWU9VTQoKSx5UWU9cVMoKSx2UWU9VGkoKSx4UWU9UjQoKSxiUWU9SEIoKSx3UWU9JFMoKTtmdW5jdGlvbiBTUWUoZSx0LHIpe3Q9X1FlKHQsZSk7Zm9yKHZhciBuPS0xLGk9dC5sZW5ndGgsbz0hMTsrK248aTspe3ZhciBhPXdRZSh0W25dKTtpZighKG89ZSE9bnVsbCYmcihlLGEpKSlicmVhaztlPWVbYV19cmV0dXJuIG98fCsrbiE9aT9vOihpPWU9PW51bGw/MDplLmxlbmd0aCwhIWkmJmJRZShpKSYmeFFlKGEsaSkmJih2UWUoZSl8fHlRZShlKSkpfUplZS5leHBvcnRzPVNRZX0pO3ZhciBYc3Q9SCgoektuLFFlZSk9Pnt2YXIgTVFlPVplZSgpLEVRZT1qc3QoKTtmdW5jdGlvbiBUUWUoZSx0KXtyZXR1cm4gZSE9bnVsbCYmRVFlKGUsdCxNUWUpfVFlZS5leHBvcnRzPVRRZX0pO3ZhciBlcmU9SCgoRktuLHRyZSk9Pnt2YXIgQ1FlPVVzdCgpLEFRZT0kZWUoKSxQUWU9WHN0KCksSVFlPVFCKCksTFFlPXFzdCgpLGtRZT1Hc3QoKSxSUWU9JFMoKSxOUWU9MSxEUWU9MjtmdW5jdGlvbiBPUWUoZSx0KXtyZXR1cm4gSVFlKGUpJiZMUWUodCk/a1FlKFJRZShlKSx0KTpmdW5jdGlvbihyKXt2YXIgbj1BUWUocixlKTtyZXR1cm4gbj09PXZvaWQgMCYmbj09PXQ/UFFlKHIsZSk6Q1FlKHQsbixOUWV8RFFlKX19dHJlLmV4cG9ydHM9T1FlfSk7dmFyICRzdD1IKChCS24scnJlKT0+e2Z1bmN0aW9uIHpRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dm9pZCAwOnRbZV19fXJyZS5leHBvcnRzPXpRZX0pO3ZhciBpcmU9SCgoSEtuLG5yZSk9Pnt2YXIgRlFlPXE0KCk7ZnVuY3Rpb24gQlFlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gRlFlKHQsZSl9fW5yZS5leHBvcnRzPUJRZX0pO3ZhciBhcmU9SCgoVktuLG9yZSk9Pnt2YXIgSFFlPSRzdCgpLFZRZT1pcmUoKSxVUWU9UUIoKSxxUWU9JFMoKTtmdW5jdGlvbiBHUWUoZSl7cmV0dXJuIFVRZShlKT9IUWUocVFlKGUpKTpWUWUoZSl9b3JlLmV4cG9ydHM9R1FlfSk7dmFyIEhmPUgoKFVLbixzcmUpPT57dmFyIFdRZT1DZWUoKSxZUWU9ZXJlKCksalFlPXUwKCksWFFlPVRpKCksJFFlPWFyZSgpO2Z1bmN0aW9uIEtRZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTplPT1udWxsP2pRZTp0eXBlb2YgZT09Im9iamVjdCI/WFFlKGUpP1lRZShlWzBdLGVbMV0pOldRZShlKTokUWUoZSl9c3JlLmV4cG9ydHM9S1FlfSk7dmFyIEtzdD1IKChxS24sbHJlKT0+e3ZhciBaUWU9eXN0KCksSlFlPVV0ZSgpLFFRZT1IZigpLHR0cj1UaSgpO2Z1bmN0aW9uIGV0cihlLHQpe3ZhciByPXR0cihlKT9aUWU6SlFlO3JldHVybiByKGUsUVFlKHQsMykpfWxyZS5leHBvcnRzPWV0cn0pO3ZhciB1cmU9SCgoR0tuLGNyZSk9Pnt2YXIgcnRyPU9iamVjdC5wcm90b3R5cGUsbnRyPXJ0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBpdHIoZSx0KXtyZXR1cm4gZSE9bnVsbCYmbnRyLmNhbGwoZSx0KX1jcmUuZXhwb3J0cz1pdHJ9KTt2YXIgWnN0PUgoKFdLbixocmUpPT57dmFyIG90cj11cmUoKSxhdHI9anN0KCk7ZnVuY3Rpb24gc3RyKGUsdCl7cmV0dXJuIGUhPW51bGwmJmF0cihlLHQsb3RyKX1ocmUuZXhwb3J0cz1zdHJ9KTt2YXIgcHJlPUgoKFlLbixmcmUpPT57dmFyIGx0cj1VQigpLGN0cj1LdigpLHV0cj1xUygpLGh0cj1UaSgpLGZ0cj1CZigpLHB0cj1YdigpLGR0cj16NCgpLG10cj1ZUygpLGd0cj0iW29iamVjdCBNYXBdIixfdHI9IltvYmplY3QgU2V0XSIseXRyPU9iamVjdC5wcm90b3R5cGUsdnRyPXl0ci5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4dHIoZSl7aWYoZT09bnVsbClyZXR1cm4hMDtpZihmdHIoZSkmJihodHIoZSl8fHR5cGVvZiBlPT0ic3RyaW5nInx8dHlwZW9mIGUuc3BsaWNlPT0iZnVuY3Rpb24ifHxwdHIoZSl8fG10cihlKXx8dXRyKGUpKSlyZXR1cm4hZS5sZW5ndGg7dmFyIHQ9Y3RyKGUpO2lmKHQ9PWd0cnx8dD09X3RyKXJldHVybiFlLnNpemU7aWYoZHRyKGUpKXJldHVybiFsdHIoZSkubGVuZ3RoO2Zvcih2YXIgciBpbiBlKWlmKHZ0ci5jYWxsKGUscikpcmV0dXJuITE7cmV0dXJuITB9ZnJlLmV4cG9ydHM9eHRyfSk7dmFyIEpzdD1IKChqS24sZHJlKT0+e2Z1bmN0aW9uIGJ0cihlKXtyZXR1cm4gZT09PXZvaWQgMH1kcmUuZXhwb3J0cz1idHJ9KTt2YXIgUXN0PUgoKFhLbixtcmUpPT57dmFyIHd0cj1INCgpLFN0cj1CZigpO2Z1bmN0aW9uIE10cihlLHQpe3ZhciByPS0xLG49U3RyKGUpP0FycmF5KGUubGVuZ3RoKTpbXTtyZXR1cm4gd3RyKGUsZnVuY3Rpb24oaSxvLGEpe25bKytyXT10KGksbyxhKX0pLG59bXJlLmV4cG9ydHM9TXRyfSk7dmFyIHRsdD1IKCgkS24sZ3JlKT0+e3ZhciBFdHI9VjQoKSxUdHI9SGYoKSxDdHI9UXN0KCksQXRyPVRpKCk7ZnVuY3Rpb24gUHRyKGUsdCl7dmFyIHI9QXRyKGUpP0V0cjpDdHI7cmV0dXJuIHIoZSxUdHIodCwzKSl9Z3JlLmV4cG9ydHM9UHRyfSk7dmFyIHlyZT1IKChLS24sX3JlKT0+e2Z1bmN0aW9uIEl0cihlLHQscixuKXt2YXIgaT0tMSxvPWU9PW51bGw/MDplLmxlbmd0aDtmb3IobiYmbyYmKHI9ZVsrK2ldKTsrK2k8bzspcj10KHIsZVtpXSxpLGUpO3JldHVybiByfV9yZS5leHBvcnRzPUl0cn0pO3ZhciB4cmU9SCgoWktuLHZyZSk9PntmdW5jdGlvbiBMdHIoZSx0LHIsbixpKXtyZXR1cm4gaShlLGZ1bmN0aW9uKG8sYSxzKXtyPW4/KG49ITEsbyk6dChyLG8sYSxzKX0pLHJ9dnJlLmV4cG9ydHM9THRyfSk7dmFyIGVsdD1IKChKS24sYnJlKT0+e3ZhciBrdHI9eXJlKCksUnRyPUg0KCksTnRyPUhmKCksRHRyPXhyZSgpLE90cj1UaSgpO2Z1bmN0aW9uIHp0cihlLHQscil7dmFyIG49T3RyKGUpP2t0cjpEdHIsaT1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIG4oZSxOdHIodCw0KSxyLGksUnRyKX1icmUuZXhwb3J0cz16dHJ9KTt2YXIgU3JlPUgoKFFLbix3cmUpPT57dmFyIEZ0cj1zMCgpLEJ0cj1UaSgpLEh0cj1ZdSgpLFZ0cj0iW29iamVjdCBTdHJpbmddIjtmdW5jdGlvbiBVdHIoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nInx8IUJ0cihlKSYmSHRyKGUpJiZGdHIoZSk9PVZ0cn13cmUuZXhwb3J0cz1VdHJ9KTt2YXIgRXJlPUgoKHRabixNcmUpPT57dmFyIHF0cj0kc3QoKSxHdHI9cXRyKCJsZW5ndGgiKTtNcmUuZXhwb3J0cz1HdHJ9KTt2YXIgQ3JlPUgoKGVabixUcmUpPT57dmFyIFd0cj0iXFx1ZDgwMC1cXHVkZmZmIixZdHI9IlxcdTAzMDAtXFx1MDM2ZiIsanRyPSJcXHVmZTIwLVxcdWZlMmYiLFh0cj0iXFx1MjBkMC1cXHUyMGZmIiwkdHI9WXRyK2p0citYdHIsS3RyPSJcXHVmZTBlXFx1ZmUwZiIsWnRyPSJcXHUyMDBkIixKdHI9UmVnRXhwKCJbIitadHIrV3RyKyR0citLdHIrIl0iKTtmdW5jdGlvbiBRdHIoZSl7cmV0dXJuIEp0ci50ZXN0KGUpfVRyZS5leHBvcnRzPVF0cn0pO3ZhciBPcmU9SCgoclpuLERyZSk9Pnt2YXIgUHJlPSJcXHVkODAwLVxcdWRmZmYiLHRlcj0iXFx1MDMwMC1cXHUwMzZmIixlZXI9IlxcdWZlMjAtXFx1ZmUyZiIscmVyPSJcXHUyMGQwLVxcdTIwZmYiLG5lcj10ZXIrZWVyK3JlcixpZXI9IlxcdWZlMGVcXHVmZTBmIixvZXI9IlsiK1ByZSsiXSIscmx0PSJbIituZXIrIl0iLG5sdD0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIixhZXI9Iig/OiIrcmx0KyJ8IitubHQrIikiLElyZT0iW14iK1ByZSsiXSIsTHJlPSIoPzpcXHVkODNjW1xcdWRkZTYtXFx1ZGRmZl0pezJ9IixrcmU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLHNlcj0iXFx1MjAwZCIsUnJlPWFlcisiPyIsTnJlPSJbIitpZXIrIl0/IixsZXI9Iig/OiIrc2VyKyIoPzoiK1tJcmUsTHJlLGtyZV0uam9pbigifCIpKyIpIitOcmUrUnJlKyIpKiIsY2VyPU5yZStScmUrbGVyLHVlcj0iKD86IitbSXJlK3JsdCsiPyIscmx0LExyZSxrcmUsb2VyXS5qb2luKCJ8IikrIikiLEFyZT1SZWdFeHAobmx0KyIoPz0iK25sdCsiKXwiK3VlcitjZXIsImciKTtmdW5jdGlvbiBoZXIoZSl7Zm9yKHZhciB0PUFyZS5sYXN0SW5kZXg9MDtBcmUudGVzdChlKTspKyt0O3JldHVybiB0fURyZS5leHBvcnRzPWhlcn0pO3ZhciBGcmU9SCgoblpuLHpyZSk9Pnt2YXIgZmVyPUVyZSgpLHBlcj1DcmUoKSxkZXI9T3JlKCk7ZnVuY3Rpb24gbWVyKGUpe3JldHVybiBwZXIoZSk/ZGVyKGUpOmZlcihlKX16cmUuZXhwb3J0cz1tZXJ9KTt2YXIgSHJlPUgoKGlabixCcmUpPT57dmFyIGdlcj1VQigpLF9lcj1LdigpLHllcj1CZigpLHZlcj1TcmUoKSx4ZXI9RnJlKCksYmVyPSJbb2JqZWN0IE1hcF0iLHdlcj0iW29iamVjdCBTZXRdIjtmdW5jdGlvbiBTZXIoZSl7aWYoZT09bnVsbClyZXR1cm4gMDtpZih5ZXIoZSkpcmV0dXJuIHZlcihlKT94ZXIoZSk6ZS5sZW5ndGg7dmFyIHQ9X2VyKGUpO3JldHVybiB0PT1iZXJ8fHQ9PXdlcj9lLnNpemU6Z2VyKGUpLmxlbmd0aH1CcmUuZXhwb3J0cz1TZXJ9KTt2YXIgVXJlPUgoKG9abixWcmUpPT57dmFyIE1lcj1CQigpLEVlcj1Mc3QoKSxUZXI9JEIoKSxDZXI9SGYoKSxBZXI9QjQoKSxQZXI9VGkoKSxJZXI9WHYoKSxMZXI9RlMoKSxrZXI9TWwoKSxSZXI9WVMoKTtmdW5jdGlvbiBOZXIoZSx0LHIpe3ZhciBuPVBlcihlKSxpPW58fEllcihlKXx8UmVyKGUpO2lmKHQ9Q2VyKHQsNCkscj09bnVsbCl7dmFyIG89ZSYmZS5jb25zdHJ1Y3RvcjtpP3I9bj9uZXcgbzpbXTprZXIoZSk/cj1MZXIobyk/RWVyKEFlcihlKSk6e306cj17fX1yZXR1cm4oaT9NZXI6VGVyKShlLGZ1bmN0aW9uKGEscyxsKXtyZXR1cm4gdChyLGEscyxsKX0pLHJ9VnJlLmV4cG9ydHM9TmVyfSk7dmFyIFlyZT1IKChhWm4sV3JlKT0+e3ZhciBxcmU9anYoKSxEZXI9cVMoKSxPZXI9VGkoKSxHcmU9cXJlP3FyZS5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO2Z1bmN0aW9uIHplcihlKXtyZXR1cm4gT2VyKGUpfHxEZXIoZSl8fCEhKEdyZSYmZSYmZVtHcmVdKX1XcmUuZXhwb3J0cz16ZXJ9KTt2YXIgdEg9SCgoc1puLFhyZSk9Pnt2YXIgRmVyPUdCKCksQmVyPVlyZSgpO2Z1bmN0aW9uIGpyZShlLHQscixuLGkpe3ZhciBvPS0xLGE9ZS5sZW5ndGg7Zm9yKHJ8fChyPUJlciksaXx8KGk9W10pOysrbzxhOyl7dmFyIHM9ZVtvXTt0PjAmJnIocyk/dD4xP2pyZShzLHQtMSxyLG4saSk6RmVyKGkscyk6bnx8KGlbaS5sZW5ndGhdPXMpfXJldHVybiBpfVhyZS5leHBvcnRzPWpyZX0pO3ZhciBLcmU9SCgobFpuLCRyZSk9PntmdW5jdGlvbiBIZXIoZSx0LHIpe3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBlLmNhbGwodCk7Y2FzZSAxOnJldHVybiBlLmNhbGwodCxyWzBdKTtjYXNlIDI6cmV0dXJuIGUuY2FsbCh0LHJbMF0sclsxXSk7Y2FzZSAzOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0sclsyXSl9cmV0dXJuIGUuYXBwbHkodCxyKX0kcmUuZXhwb3J0cz1IZXJ9KTt2YXIgaWx0PUgoKGNabixKcmUpPT57dmFyIFZlcj1LcmUoKSxacmU9TWF0aC5tYXg7ZnVuY3Rpb24gVWVyKGUsdCxyKXtyZXR1cm4gdD1acmUodD09PXZvaWQgMD9lLmxlbmd0aC0xOnQsMCksZnVuY3Rpb24oKXtmb3IodmFyIG49YXJndW1lbnRzLGk9LTEsbz1acmUobi5sZW5ndGgtdCwwKSxhPUFycmF5KG8pOysraTxvOylhW2ldPW5bdCtpXTtpPS0xO2Zvcih2YXIgcz1BcnJheSh0KzEpOysraTx0OylzW2ldPW5baV07cmV0dXJuIHNbdF09cihhKSxWZXIoZSx0aGlzLHMpfX1KcmUuZXhwb3J0cz1VZXJ9KTt2YXIgZW5lPUgoKHVabix0bmUpPT57dmFyIHFlcj1qQigpLFFyZT1mc3QoKSxHZXI9dTAoKSxXZXI9UXJlP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIFFyZShlLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnFlcih0KSx3cml0YWJsZTohMH0pfTpHZXI7dG5lLmV4cG9ydHM9V2VyfSk7dmFyIG5uZT1IKChoWm4scm5lKT0+e3ZhciBZZXI9ODAwLGplcj0xNixYZXI9RGF0ZS5ub3c7ZnVuY3Rpb24gJGVyKGUpe3ZhciB0PTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBuPVhlcigpLGk9amVyLShuLXIpO2lmKHI9bixpPjApe2lmKCsrdD49WWVyKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB0PTA7cmV0dXJuIGUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fXJuZS5leHBvcnRzPSRlcn0pO3ZhciBvbHQ9SCgoZlpuLGluZSk9Pnt2YXIgS2VyPWVuZSgpLFplcj1ubmUoKSxKZXI9WmVyKEtlcik7aW5lLmV4cG9ydHM9SmVyfSk7dmFyIEc0PUgoKHBabixvbmUpPT57dmFyIFFlcj11MCgpLHRycj1pbHQoKSxlcnI9b2x0KCk7ZnVuY3Rpb24gcnJyKGUsdCl7cmV0dXJuIGVycih0cnIoZSx0LFFlciksZSsiIil9b25lLmV4cG9ydHM9cnJyfSk7dmFyIGFsdD1IKChkWm4sYW5lKT0+e2Z1bmN0aW9uIG5ycihlLHQscixuKXtmb3IodmFyIGk9ZS5sZW5ndGgsbz1yKyhuPzE6LTEpO24/by0tOisrbzxpOylpZih0KGVbb10sbyxlKSlyZXR1cm4gbztyZXR1cm4tMX1hbmUuZXhwb3J0cz1ucnJ9KTt2YXIgbG5lPUgoKG1abixzbmUpPT57ZnVuY3Rpb24gaXJyKGUpe3JldHVybiBlIT09ZX1zbmUuZXhwb3J0cz1pcnJ9KTt2YXIgdW5lPUgoKGdabixjbmUpPT57ZnVuY3Rpb24gb3JyKGUsdCxyKXtmb3IodmFyIG49ci0xLGk9ZS5sZW5ndGg7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfWNuZS5leHBvcnRzPW9ycn0pO3ZhciBmbmU9SCgoX1puLGhuZSk9Pnt2YXIgYXJyPWFsdCgpLHNycj1sbmUoKSxscnI9dW5lKCk7ZnVuY3Rpb24gY3JyKGUsdCxyKXtyZXR1cm4gdD09PXQ/bHJyKGUsdCxyKTphcnIoZSxzcnIscil9aG5lLmV4cG9ydHM9Y3JyfSk7dmFyIGRuZT1IKCh5Wm4scG5lKT0+e3ZhciB1cnI9Zm5lKCk7ZnVuY3Rpb24gaHJyKGUsdCl7dmFyIHI9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiEhciYmdXJyKGUsdCwwKT4tMX1wbmUuZXhwb3J0cz1ocnJ9KTt2YXIgZ25lPUgoKHZabixtbmUpPT57ZnVuY3Rpb24gZnJyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lPT1udWxsPzA6ZS5sZW5ndGg7KytuPGk7KWlmKHIodCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hMX1tbmUuZXhwb3J0cz1mcnJ9KTt2YXIgeW5lPUgoKHhabixfbmUpPT57ZnVuY3Rpb24gcHJyKCl7fV9uZS5leHBvcnRzPXBycn0pO3ZhciB4bmU9SCgoYlpuLHZuZSk9Pnt2YXIgc2x0PVNzdCgpLGRycj15bmUoKSxtcnI9WkIoKSxncnI9MS8wLF9ycj1zbHQmJjEvbXJyKG5ldyBzbHQoWywtMF0pKVsxXT09Z3JyP2Z1bmN0aW9uKGUpe3JldHVybiBuZXcgc2x0KGUpfTpkcnI7dm5lLmV4cG9ydHM9X3JyfSk7dmFyIHduZT1IKCh3Wm4sYm5lKT0+e3ZhciB5cnI9enN0KCksdnJyPWRuZSgpLHhycj1nbmUoKSxicnI9RnN0KCksd3JyPXhuZSgpLFNycj1aQigpLE1ycj0yMDA7ZnVuY3Rpb24gRXJyKGUsdCxyKXt2YXIgbj0tMSxpPXZycixvPWUubGVuZ3RoLGE9ITAscz1bXSxsPXM7aWYocilhPSExLGk9eHJyO2Vsc2UgaWYobz49TXJyKXt2YXIgYz10P251bGw6d3JyKGUpO2lmKGMpcmV0dXJuIFNycihjKTthPSExLGk9YnJyLGw9bmV3IHlycn1lbHNlIGw9dD9bXTpzO3Q6Zm9yKDsrK248bzspe3ZhciB1PWVbbl0saD10P3QodSk6dTtpZih1PXJ8fHUhPT0wP3U6MCxhJiZoPT09aCl7Zm9yKHZhciBmPWwubGVuZ3RoO2YtLTspaWYobFtmXT09PWgpY29udGludWUgdDt0JiZsLnB1c2goaCkscy5wdXNoKHUpfWVsc2UgaShsLGgscil8fChsIT09cyYmbC5wdXNoKGgpLHMucHVzaCh1KSl9cmV0dXJuIHN9Ym5lLmV4cG9ydHM9RXJyfSk7dmFyIGxsdD1IKChTWm4sU25lKT0+e3ZhciBUcnI9QmYoKSxDcnI9WXUoKTtmdW5jdGlvbiBBcnIoZSl7cmV0dXJuIENycihlKSYmVHJyKGUpfVNuZS5leHBvcnRzPUFycn0pO3ZhciBFbmU9SCgoTVpuLE1uZSk9Pnt2YXIgUHJyPXRIKCksSXJyPUc0KCksTHJyPXduZSgpLGtycj1sbHQoKSxScnI9SXJyKGZ1bmN0aW9uKGUpe3JldHVybiBMcnIoUHJyKGUsMSxrcnIsITApKX0pO01uZS5leHBvcnRzPVJycn0pO3ZhciBDbmU9SCgoRVpuLFRuZSk9Pnt2YXIgTnJyPVY0KCk7ZnVuY3Rpb24gRHJyKGUsdCl7cmV0dXJuIE5ycih0LGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9VG5lLmV4cG9ydHM9RHJyfSk7dmFyIGNsdD1IKChUWm4sQW5lKT0+e3ZhciBPcnI9Q25lKCksenJyPUFkKCk7ZnVuY3Rpb24gRnJyKGUpe3JldHVybiBlPT1udWxsP1tdOk9ycihlLHpycihlKSl9QW5lLmV4cG9ydHM9RnJyfSk7dmFyIEVsPUgoKENabixQbmUpPT57dmFyIGVIO2lmKHR5cGVvZiBFeD09ImZ1bmN0aW9uIil0cnl7ZUg9e2Nsb25lOkF0ZSgpLGNvbnN0YW50OmpCKCksZWFjaDpPc3QoKSxmaWx0ZXI6S3N0KCksaGFzOlpzdCgpLGlzQXJyYXk6VGkoKSxpc0VtcHR5OnByZSgpLGlzRnVuY3Rpb246RlMoKSxpc1VuZGVmaW5lZDpKc3QoKSxrZXlzOkFkKCksbWFwOnRsdCgpLHJlZHVjZTplbHQoKSxzaXplOkhyZSgpLHRyYW5zZm9ybTpVcmUoKSx1bmlvbjpFbmUoKSx2YWx1ZXM6Y2x0KCl9fWNhdGNoKGUpe31lSHx8KGVIPXdpbmRvdy5fKTtQbmUuZXhwb3J0cz1lSH0pO3ZhciBySD1IKChQWm4sUm5lKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgamU9RWwoKTtSbmUuZXhwb3J0cz1jcjt2YXIgQnJyPSJcMCIsSnY9IlwwIixJbmU9IgEiO2Z1bmN0aW9uIGNyKGUpe3RoaXMuX2lzRGlyZWN0ZWQ9amUuaGFzKGUsImRpcmVjdGVkIik/ZS5kaXJlY3RlZDohMCx0aGlzLl9pc011bHRpZ3JhcGg9amUuaGFzKGUsIm11bHRpZ3JhcGgiKT9lLm11bHRpZ3JhcGg6ITEsdGhpcy5faXNDb21wb3VuZD1qZS5oYXMoZSwiY29tcG91bmQiKT9lLmNvbXBvdW5kOiExLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49amUuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuW0p2XT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1jci5wcm90b3R5cGUuX25vZGVDb3VudD0wO2NyLnByb3RvdHlwZS5fZWRnZUNvdW50PTA7Y3IucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH07Y3IucHJvdG90eXBlLmlzTXVsdGlncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc011bHRpZ3JhcGh9O2NyLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9O2NyLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbGFiZWw9ZSx0aGlzfTtjci5wcm90b3R5cGUuZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbGFiZWx9O2NyLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKGUpe3JldHVybiBqZS5pc0Z1bmN0aW9uKGUpfHwoZT1qZS5jb25zdGFudChlKSksdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWUsdGhpc307Y3IucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9O2NyLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiBqZS5rZXlzKHRoaXMuX25vZGVzKX07Y3IucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX2luW3RdKX0pfTtjci5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBqZS5maWx0ZXIodGhpcy5ub2RlcygpLGZ1bmN0aW9uKHQpe3JldHVybiBqZS5pc0VtcHR5KGUuX291dFt0XSl9KX07Y3IucHJvdG90eXBlLnNldE5vZGVzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLG49dGhpcztyZXR1cm4gamUuZWFjaChlLGZ1bmN0aW9uKGkpe3IubGVuZ3RoPjE/bi5zZXROb2RlKGksdCk6bi5zZXROb2RlKGkpfSksdGhpc307Y3IucHJvdG90eXBlLnNldE5vZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1tlXT10KSx0aGlzKToodGhpcy5fbm9kZXNbZV09YXJndW1lbnRzLmxlbmd0aD4xP3Q6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKGUpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbZV09SnYsdGhpcy5fY2hpbGRyZW5bZV09e30sdGhpcy5fY2hpbGRyZW5bSnZdW2VdPSEwKSx0aGlzLl9pbltlXT17fSx0aGlzLl9wcmVkc1tlXT17fSx0aGlzLl9vdXRbZV09e30sdGhpcy5fc3Vjc1tlXT17fSwrK3RoaXMuX25vZGVDb3VudCx0aGlzKX07Y3IucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25vZGVzW2VdfTtjci5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbihlKXtyZXR1cm4gamUuaGFzKHRoaXMuX25vZGVzLGUpfTtjci5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKGplLmhhcyh0aGlzLl9ub2RlcyxlKSl7dmFyIHI9ZnVuY3Rpb24obil7dC5yZW1vdmVFZGdlKHQuX2VkZ2VPYmpzW25dKX07ZGVsZXRlIHRoaXMuX25vZGVzW2VdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSxkZWxldGUgdGhpcy5fcGFyZW50W2VdLGplLmVhY2godGhpcy5jaGlsZHJlbihlKSxmdW5jdGlvbihuKXt0LnNldFBhcmVudChuKX0pLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltlXSksamUuZWFjaChqZS5rZXlzKHRoaXMuX2luW2VdKSxyKSxkZWxldGUgdGhpcy5faW5bZV0sZGVsZXRlIHRoaXMuX3ByZWRzW2VdLGplLmVhY2goamUua2V5cyh0aGlzLl9vdXRbZV0pLHIpLGRlbGV0ZSB0aGlzLl9vdXRbZV0sZGVsZXRlIHRoaXMuX3N1Y3NbZV0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9O2NyLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5faXNDb21wb3VuZCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzZXQgcGFyZW50IGluIGEgbm9uLWNvbXBvdW5kIGdyYXBoIik7aWYoamUuaXNVbmRlZmluZWQodCkpdD1KdjtlbHNle3QrPSIiO2Zvcih2YXIgcj10OyFqZS5pc1VuZGVmaW5lZChyKTtyPXRoaXMucGFyZW50KHIpKWlmKHI9PT1lKXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK3QrIiBhcyBwYXJlbnQgb2YgIitlKyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUodCl9cmV0dXJuIHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdChlKSx0aGlzLl9wYXJlbnRbZV09dCx0aGlzLl9jaGlsZHJlblt0XVtlXT0hMCx0aGlzfTtjci5wcm90b3R5cGUuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLl9jaGlsZHJlblt0aGlzLl9wYXJlbnRbZV1dW2VdfTtjci5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciB0PXRoaXMuX3BhcmVudFtlXTtpZih0IT09SnYpcmV0dXJuIHR9fTtjci5wcm90b3R5cGUuY2hpbGRyZW49ZnVuY3Rpb24oZSl7aWYoamUuaXNVbmRlZmluZWQoZSkmJihlPUp2KSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9jaGlsZHJlbltlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfWVsc2V7aWYoZT09PUp2KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKGUpKXJldHVybltdfX07Y3IucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9wcmVkc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9zdWNzW2VdO2lmKHQpcmV0dXJuIGplLmtleXModCl9O2NyLnByb3RvdHlwZS5uZWlnaGJvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcmVkZWNlc3NvcnMoZSk7aWYodClyZXR1cm4gamUudW5pb24odCx0aGlzLnN1Y2Nlc3NvcnMoZSkpfTtjci5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzLmlzRGlyZWN0ZWQoKT90PXRoaXMuc3VjY2Vzc29ycyhlKTp0PXRoaXMubmVpZ2hib3JzKGUpLHQubGVuZ3RoPT09MH07Y3IucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTt0LnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIHI9dGhpcztqZS5lYWNoKHRoaXMuX25vZGVzLGZ1bmN0aW9uKG8sYSl7ZShhKSYmdC5zZXROb2RlKGEsbyl9KSxqZS5lYWNoKHRoaXMuX2VkZ2VPYmpzLGZ1bmN0aW9uKG8pe3QuaGFzTm9kZShvLnYpJiZ0Lmhhc05vZGUoby53KSYmdC5zZXRFZGdlKG8sci5lZGdlKG8pKX0pO3ZhciBuPXt9O2Z1bmN0aW9uIGkobyl7dmFyIGE9ci5wYXJlbnQobyk7cmV0dXJuIGE9PT12b2lkIDB8fHQuaGFzTm9kZShhKT8obltvXT1hLGEpOmEgaW4gbj9uW2FdOmkoYSl9cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJmplLmVhY2godC5ub2RlcygpLGZ1bmN0aW9uKG8pe3Quc2V0UGFyZW50KG8saShvKSl9KSx0fTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdEVkZ2VMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUNvdW50fTtjci5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX07Y3IucHJvdG90eXBlLnNldFBhdGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLG49YXJndW1lbnRzO3JldHVybiBqZS5yZWR1Y2UoZSxmdW5jdGlvbihpLG8pe3JldHVybiBuLmxlbmd0aD4xP3Iuc2V0RWRnZShpLG8sdCk6ci5zZXRFZGdlKGksbyksb30pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXRFZGdlPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saT0hMSxvPWFyZ3VtZW50c1swXTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsJiYidiJpbiBvPyhlPW8udix0PW8udyxyPW8ubmFtZSxhcmd1bWVudHMubGVuZ3RoPT09MiYmKG49YXJndW1lbnRzWzFdLGk9ITApKTooZT1vLHQ9YXJndW1lbnRzWzFdLHI9YXJndW1lbnRzWzNdLGFyZ3VtZW50cy5sZW5ndGg+MiYmKG49YXJndW1lbnRzWzJdLGk9ITApKSxlPSIiK2UsdD0iIit0LGplLmlzVW5kZWZpbmVkKHIpfHwocj0iIityKTt2YXIgYT1XNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtpZihqZS5oYXModGhpcy5fZWRnZUxhYmVscyxhKSlyZXR1cm4gaSYmKHRoaXMuX2VkZ2VMYWJlbHNbYV09biksdGhpcztpZighamUuaXNVbmRlZmluZWQocikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKGUpLHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9lZGdlTGFiZWxzW2FdPWk/bjp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4oZSx0LHIpO3ZhciBzPUhycih0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gZT1zLnYsdD1zLncsT2JqZWN0LmZyZWV6ZShzKSx0aGlzLl9lZGdlT2Jqc1thXT1zLExuZSh0aGlzLl9wcmVkc1t0XSxlKSxMbmUodGhpcy5fc3Vjc1tlXSx0KSx0aGlzLl9pblt0XVthXT1zLHRoaXMuX291dFtlXVthXT1zLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9O2NyLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW25dfTtjci5wcm90b3R5cGUuaGFzRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/dWx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpXNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbil9O2NyLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPT09MT91bHQodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOlc0KHRoaXMuX2lzRGlyZWN0ZWQsZSx0LHIpLGk9dGhpcy5fZWRnZU9ianNbbl07cmV0dXJuIGkmJihlPWkudix0PWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tuXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbbl0sa25lKHRoaXMuX3ByZWRzW3RdLGUpLGtuZSh0aGlzLl9zdWNzW2VdLHQpLGRlbGV0ZSB0aGlzLl9pblt0XVtuXSxkZWxldGUgdGhpcy5fb3V0W2VdW25dLHRoaXMuX2VkZ2VDb3VudC0tKSx0aGlzfTtjci5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2luW2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS52PT09dH0pOm59fTtjci5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9vdXRbZV07aWYocil7dmFyIG49amUudmFsdWVzKHIpO3JldHVybiB0P2plLmZpbHRlcihuLGZ1bmN0aW9uKGkpe3JldHVybiBpLnc9PT10fSk6bn19O2NyLnByb3RvdHlwZS5ub2RlRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmluRWRnZXMoZSx0KTtpZihyKXJldHVybiByLmNvbmNhdCh0aGlzLm91dEVkZ2VzKGUsdCkpfTtmdW5jdGlvbiBMbmUoZSx0KXtlW3RdP2VbdF0rKzplW3RdPTF9ZnVuY3Rpb24ga25lKGUsdCl7LS1lW3RdfHxkZWxldGUgZVt0XX1mdW5jdGlvbiBXNChlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9cmV0dXJuIGkrSW5lK28rSW5lKyhqZS5pc1VuZGVmaW5lZChuKT9CcnI6bil9ZnVuY3Rpb24gSHJyKGUsdCxyLG4pe3ZhciBpPSIiK3Qsbz0iIityO2lmKCFlJiZpPm8pe3ZhciBhPWk7aT1vLG89YX12YXIgcz17djppLHc6b307cmV0dXJuIG4mJihzLm5hbWU9biksc31mdW5jdGlvbiB1bHQoZSx0KXtyZXR1cm4gVzQoZSx0LnYsdC53LHQubmFtZSl9fSk7dmFyIERuZT1IKChJWm4sTm5lKT0+e05uZS5leHBvcnRzPSIyLjEuOCJ9KTt2YXIgem5lPUgoKExabixPbmUpPT57T25lLmV4cG9ydHM9e0dyYXBoOnJIKCksdmVyc2lvbjpEbmUoKX19KTt2YXIgQm5lPUgoKGtabixGbmUpPT57dmFyIFZmPUVsKCksVnJyPXJIKCk7Rm5lLmV4cG9ydHM9e3dyaXRlOlVycixyZWFkOldycn07ZnVuY3Rpb24gVXJyKGUpe3ZhciB0PXtvcHRpb25zOntkaXJlY3RlZDplLmlzRGlyZWN0ZWQoKSxtdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCksY29tcG91bmQ6ZS5pc0NvbXBvdW5kKCl9LG5vZGVzOnFycihlKSxlZGdlczpHcnIoZSl9O3JldHVybiBWZi5pc1VuZGVmaW5lZChlLmdyYXBoKCkpfHwodC52YWx1ZT1WZi5jbG9uZShlLmdyYXBoKCkpKSx0fWZ1bmN0aW9uIHFycihlKXtyZXR1cm4gVmYubWFwKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCksbj1lLnBhcmVudCh0KSxpPXt2OnR9O3JldHVybiBWZi5pc1VuZGVmaW5lZChyKXx8KGkudmFsdWU9ciksVmYuaXNVbmRlZmluZWQobil8fChpLnBhcmVudD1uKSxpfSl9ZnVuY3Rpb24gR3JyKGUpe3JldHVybiBWZi5tYXAoZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPXt2OnQudix3OnQud307cmV0dXJuIFZmLmlzVW5kZWZpbmVkKHQubmFtZSl8fChuLm5hbWU9dC5uYW1lKSxWZi5pc1VuZGVmaW5lZChyKXx8KG4udmFsdWU9ciksbn0pfWZ1bmN0aW9uIFdycihlKXt2YXIgdD1uZXcgVnJyKGUub3B0aW9ucykuc2V0R3JhcGgoZS52YWx1ZSk7cmV0dXJuIFZmLmVhY2goZS5ub2RlcyxmdW5jdGlvbihyKXt0LnNldE5vZGUoci52LHIudmFsdWUpLHIucGFyZW50JiZ0LnNldFBhcmVudChyLnYsci5wYXJlbnQpfSksVmYuZWFjaChlLmVkZ2VzLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZSh7djpyLnYsdzpyLncsbmFtZTpyLm5hbWV9LHIudmFsdWUpfSksdH19KTt2YXIgVm5lPUgoKFJabixIbmUpPT57dmFyIG5IPUVsKCk7SG5lLmV4cG9ydHM9WXJyO2Z1bmN0aW9uIFlycihlKXt2YXIgdD17fSxyPVtdLG47ZnVuY3Rpb24gaShvKXtuSC5oYXModCxvKXx8KHRbb109ITAsbi5wdXNoKG8pLG5ILmVhY2goZS5zdWNjZXNzb3JzKG8pLGkpLG5ILmVhY2goZS5wcmVkZWNlc3NvcnMobyksaSkpfXJldHVybiBuSC5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihvKXtuPVtdLGkobyksbi5sZW5ndGgmJnIucHVzaChuKX0pLHJ9fSk7dmFyIGhsdD1IKChOWm4scW5lKT0+e3ZhciBVbmU9RWwoKTtxbmUuZXhwb3J0cz1WYztmdW5jdGlvbiBWYygpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fVZjLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5sZW5ndGh9O1ZjLnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Fyci5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUua2V5fSl9O1ZjLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIFVuZS5oYXModGhpcy5fa2V5SW5kaWNlcyxlKX07VmMucHJvdG90eXBlLnByaW9yaXR5PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUluZGljZXNbZV07aWYodCE9PXZvaWQgMClyZXR1cm4gdGhpcy5fYXJyW3RdLnByaW9yaXR5fTtWYy5wcm90b3R5cGUubWluPWZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKCk9PT0wKXRocm93IG5ldyBFcnJvcigiUXVldWUgdW5kZXJmbG93Iik7cmV0dXJuIHRoaXMuX2FyclswXS5rZXl9O1ZjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzO2lmKGU9U3RyaW5nKGUpLCFVbmUuaGFzKHIsZSkpe3ZhciBuPXRoaXMuX2FycixpPW4ubGVuZ3RoO3JldHVybiByW2VdPWksbi5wdXNoKHtrZXk6ZSxwcmlvcml0eTp0fSksdGhpcy5fZGVjcmVhc2UoaSksITB9cmV0dXJuITF9O1ZjLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgZT10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW2Uua2V5XSx0aGlzLl9oZWFwaWZ5KDApLGUua2V5fTtWYy5wcm90b3R5cGUuZGVjcmVhc2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQ+dGhpcy5fYXJyW3JdLnByaW9yaXR5KXRocm93IG5ldyBFcnJvcigiTmV3IHByaW9yaXR5IGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50IHByaW9yaXR5LiBLZXk6ICIrZSsiIE9sZDogIit0aGlzLl9hcnJbcl0ucHJpb3JpdHkrIiBOZXc6ICIrdCk7dGhpcy5fYXJyW3JdLnByaW9yaXR5PXQsdGhpcy5fZGVjcmVhc2Uocil9O1ZjLnByb3RvdHlwZS5faGVhcGlmeT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9hcnIscj0yKmUsbj1yKzEsaT1lO3I8dC5sZW5ndGgmJihpPXRbcl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9yOmksbjx0Lmxlbmd0aCYmKGk9dFtuXS5wcmlvcml0eTx0W2ldLnByaW9yaXR5P246aSksaSE9PWUmJih0aGlzLl9zd2FwKGUsaSksdGhpcy5faGVhcGlmeShpKSkpfTtWYy5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9hcnIscj10W2VdLnByaW9yaXR5LG47ZSE9PTAmJihuPWU+PjEsISh0W25dLnByaW9yaXR5PHIpKTspdGhpcy5fc3dhcChlLG4pLGU9bn07VmMucHJvdG90eXBlLl9zd2FwPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fYXJyLG49dGhpcy5fa2V5SW5kaWNlcyxpPXJbZV0sbz1yW3RdO3JbZV09byxyW3RdPWksbltvLmtleV09ZSxuW2kua2V5XT10fX0pO3ZhciBmbHQ9SCgoRFpuLEduZSk9Pnt2YXIganJyPUVsKCksWHJyPWhsdCgpO0duZS5leHBvcnRzPUtycjt2YXIgJHJyPWpyci5jb25zdGFudCgxKTtmdW5jdGlvbiBLcnIoZSx0LHIsbil7cmV0dXJuIFpycihlLFN0cmluZyh0KSxyfHwkcnIsbnx8ZnVuY3Rpb24oaSl7cmV0dXJuIGUub3V0RWRnZXMoaSl9KX1mdW5jdGlvbiBacnIoZSx0LHIsbil7dmFyIGk9e30sbz1uZXcgWHJyLGEscyxsPWZ1bmN0aW9uKGMpe3ZhciB1PWMudiE9PWE/Yy52OmMudyxoPWlbdV0sZj1yKGMpLHA9cy5kaXN0YW5jZStmO2lmKGY8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrYysiIFdlaWdodDogIitmKTtwPGguZGlzdGFuY2UmJihoLmRpc3RhbmNlPXAsaC5wcmVkZWNlc3Nvcj1hLG8uZGVjcmVhc2UodSxwKSl9O2ZvcihlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jPT09dD8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtpW2NdPXtkaXN0YW5jZTp1fSxvLmFkZChjLHUpfSk7by5zaXplKCk+MCYmKGE9by5yZW1vdmVNaW4oKSxzPWlbYV0scy5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KW4oYSkuZm9yRWFjaChsKTtyZXR1cm4gaX19KTt2YXIgWW5lPUgoKE9abixXbmUpPT57dmFyIEpycj1mbHQoKSxRcnI9RWwoKTtXbmUuZXhwb3J0cz10bnI7ZnVuY3Rpb24gdG5yKGUsdCxyKXtyZXR1cm4gUXJyLnRyYW5zZm9ybShlLm5vZGVzKCksZnVuY3Rpb24obixpKXtuW2ldPUpycihlLGksdCxyKX0se30pfX0pO3ZhciBwbHQ9SCgoelpuLFhuZSk9Pnt2YXIgam5lPUVsKCk7WG5lLmV4cG9ydHM9ZW5yO2Z1bmN0aW9uIGVucihlKXt2YXIgdD0wLHI9W10sbj17fSxpPVtdO2Z1bmN0aW9uIG8oYSl7dmFyIHM9blthXT17b25TdGFjazohMCxsb3dsaW5rOnQsaW5kZXg6dCsrfTtpZihyLnB1c2goYSksZS5zdWNjZXNzb3JzKGEpLmZvckVhY2goZnVuY3Rpb24odSl7am5lLmhhcyhuLHUpP25bdV0ub25TdGFjayYmKHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5pbmRleCkpOihvKHUpLHMubG93bGluaz1NYXRoLm1pbihzLmxvd2xpbmssblt1XS5sb3dsaW5rKSl9KSxzLmxvd2xpbms9PT1zLmluZGV4KXt2YXIgbD1bXSxjO2RvIGM9ci5wb3AoKSxuW2NdLm9uU3RhY2s9ITEsbC5wdXNoKGMpO3doaWxlKGEhPT1jKTtpLnB1c2gobCl9fXJldHVybiBlLm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtqbmUuaGFzKG4sYSl8fG8oYSl9KSxpfX0pO3ZhciBLbmU9SCgoRlpuLCRuZSk9Pnt2YXIgcm5yPUVsKCksbm5yPXBsdCgpOyRuZS5leHBvcnRzPWlucjtmdW5jdGlvbiBpbnIoZSl7cmV0dXJuIHJuci5maWx0ZXIobm5yKGUpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfHx0Lmxlbmd0aD09PTEmJmUuaGFzRWRnZSh0WzBdLHRbMF0pfSl9fSk7dmFyIEpuZT1IKChCWm4sWm5lKT0+e3ZhciBvbnI9RWwoKTtabmUuZXhwb3J0cz1zbnI7dmFyIGFucj1vbnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gc25yKGUsdCxyKXtyZXR1cm4gbG5yKGUsdHx8YW5yLHJ8fGZ1bmN0aW9uKG4pe3JldHVybiBlLm91dEVkZ2VzKG4pfSl9ZnVuY3Rpb24gbG5yKGUsdCxyKXt2YXIgbj17fSxpPWUubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe25bb109e30sbltvXVtvXT17ZGlzdGFuY2U6MH0saS5mb3JFYWNoKGZ1bmN0aW9uKGEpe28hPT1hJiYobltvXVthXT17ZGlzdGFuY2U6TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfSl9KSxyKG8pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHM9YS52PT09bz9hLnc6YS52LGw9dChhKTtuW29dW3NdPXtkaXN0YW5jZTpsLHByZWRlY2Vzc29yOm99fSl9KSxpLmZvckVhY2goZnVuY3Rpb24obyl7dmFyIGE9bltvXTtpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bltzXTtpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9bFtvXSxoPWFbY10sZj1sW2NdLHA9dS5kaXN0YW5jZStoLmRpc3RhbmNlO3A8Zi5kaXN0YW5jZSYmKGYuZGlzdGFuY2U9cCxmLnByZWRlY2Vzc29yPWgucHJlZGVjZXNzb3IpfSl9KX0pLG59fSk7dmFyIGRsdD1IKChIWm4sdGllKT0+e3ZhciBZND1FbCgpO3RpZS5leHBvcnRzPVFuZTtRbmUuQ3ljbGVFeGNlcHRpb249aUg7ZnVuY3Rpb24gUW5lKGUpe3ZhciB0PXt9LHI9e30sbj1bXTtmdW5jdGlvbiBpKG8pe2lmKFk0LmhhcyhyLG8pKXRocm93IG5ldyBpSDtZNC5oYXModCxvKXx8KHJbb109ITAsdFtvXT0hMCxZNC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpLGRlbGV0ZSByW29dLG4ucHVzaChvKSl9aWYoWTQuZWFjaChlLnNpbmtzKCksaSksWTQuc2l6ZSh0KSE9PWUubm9kZUNvdW50KCkpdGhyb3cgbmV3IGlIO3JldHVybiBufWZ1bmN0aW9uIGlIKCl7fWlILnByb3RvdHlwZT1uZXcgRXJyb3J9KTt2YXIgbmllPUgoKFZabixyaWUpPT57dmFyIGVpZT1kbHQoKTtyaWUuZXhwb3J0cz1jbnI7ZnVuY3Rpb24gY25yKGUpe3RyeXtlaWUoZSl9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIGVpZS5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0pO3ZhciBtbHQ9SCgoVVpuLG9pZSk9Pnt2YXIgb0g9RWwoKTtvaWUuZXhwb3J0cz11bnI7ZnVuY3Rpb24gdW5yKGUsdCxyKXtvSC5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBuPShlLmlzRGlyZWN0ZWQoKT9lLnN1Y2Nlc3NvcnM6ZS5uZWlnaGJvcnMpLmJpbmQoZSksaT1bXSxvPXt9O3JldHVybiBvSC5lYWNoKHQsZnVuY3Rpb24oYSl7aWYoIWUuaGFzTm9kZShhKSl0aHJvdyBuZXcgRXJyb3IoIkdyYXBoIGRvZXMgbm90IGhhdmUgbm9kZTogIithKTtpaWUoZSxhLHI9PT0icG9zdCIsbyxuLGkpfSksaX1mdW5jdGlvbiBpaWUoZSx0LHIsbixpLG8pe29ILmhhcyhuLHQpfHwoblt0XT0hMCxyfHxvLnB1c2godCksb0guZWFjaChpKHQpLGZ1bmN0aW9uKGEpe2lpZShlLGEscixuLGksbyl9KSxyJiZvLnB1c2godCkpfX0pO3ZhciBzaWU9SCgocVpuLGFpZSk9Pnt2YXIgaG5yPW1sdCgpO2FpZS5leHBvcnRzPWZucjtmdW5jdGlvbiBmbnIoZSx0KXtyZXR1cm4gaG5yKGUsdCwicG9zdCIpfX0pO3ZhciBjaWU9SCgoR1puLGxpZSk9Pnt2YXIgcG5yPW1sdCgpO2xpZS5leHBvcnRzPWRucjtmdW5jdGlvbiBkbnIoZSx0KXtyZXR1cm4gcG5yKGUsdCwicHJlIil9fSk7dmFyIGZpZT1IKChXWm4saGllKT0+e3ZhciB1aWU9RWwoKSxtbnI9ckgoKSxnbnI9aGx0KCk7aGllLmV4cG9ydHM9X25yO2Z1bmN0aW9uIF9ucihlLHQpe3ZhciByPW5ldyBtbnIsbj17fSxpPW5ldyBnbnIsbztmdW5jdGlvbiBhKGwpe3ZhciBjPWwudj09PW8/bC53Omwudix1PWkucHJpb3JpdHkoYyk7aWYodSE9PXZvaWQgMCl7dmFyIGg9dChsKTtoPHUmJihuW2NdPW8saS5kZWNyZWFzZShjLGgpKX19aWYoZS5ub2RlQ291bnQoKT09PTApcmV0dXJuIHI7dWllLmVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGwpe2kuYWRkKGwsTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyLnNldE5vZGUobCl9KSxpLmRlY3JlYXNlKGUubm9kZXMoKVswXSwwKTtmb3IodmFyIHM9ITE7aS5zaXplKCk+MDspe2lmKG89aS5yZW1vdmVNaW4oKSx1aWUuaGFzKG4sbykpci5zZXRFZGdlKG8sbltvXSk7ZWxzZXtpZihzKXRocm93IG5ldyBFcnJvcigiSW5wdXQgZ3JhcGggaXMgbm90IGNvbm5lY3RlZDogIitlKTtzPSEwfWUubm9kZUVkZ2VzKG8pLmZvckVhY2goYSl9cmV0dXJuIHJ9fSk7dmFyIGRpZT1IKChZWm4scGllKT0+e3BpZS5leHBvcnRzPXtjb21wb25lbnRzOlZuZSgpLGRpamtzdHJhOmZsdCgpLGRpamtzdHJhQWxsOlluZSgpLGZpbmRDeWNsZXM6S25lKCksZmxveWRXYXJzaGFsbDpKbmUoKSxpc0FjeWNsaWM6bmllKCkscG9zdG9yZGVyOnNpZSgpLHByZW9yZGVyOmNpZSgpLHByaW06ZmllKCksdGFyamFuOnBsdCgpLHRvcHNvcnQ6ZGx0KCl9fSk7dmFyIF9pZT1IKChqWm4sZ2llKT0+e3ZhciBtaWU9em5lKCk7Z2llLmV4cG9ydHM9e0dyYXBoOm1pZS5HcmFwaCxqc29uOkJuZSgpLGFsZzpkaWUoKSx2ZXJzaW9uOm1pZS52ZXJzaW9ufX0pO3ZhciBVYz1IKChYWm4seWllKT0+e3ZhciBhSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2FIPV9pZSgpfWNhdGNoKGUpe31hSHx8KGFIPXdpbmRvdy5ncmFwaGxpYik7eWllLmV4cG9ydHM9YUh9KTt2YXIgeGllPUgoKEtabix2aWUpPT57dmFyIHlucj1Sc3QoKSx2bnI9MSx4bnI9NDtmdW5jdGlvbiBibnIoZSl7cmV0dXJuIHlucihlLHZucnx4bnIpfXZpZS5leHBvcnRzPWJucn0pO3ZhciBqND1IKChaWm4sYmllKT0+e3ZhciB3bnI9WXYoKSxTbnI9QmYoKSxNbnI9UjQoKSxFbnI9TWwoKTtmdW5jdGlvbiBUbnIoZSx0LHIpe2lmKCFFbnIocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuKG49PSJudW1iZXIiP1NucihyKSYmTW5yKHQsci5sZW5ndGgpOm49PSJzdHJpbmciJiZ0IGluIHIpP3ducihyW3RdLGUpOiExfWJpZS5leHBvcnRzPVRucn0pO3ZhciBNaWU9SCgoSlpuLFNpZSk9Pnt2YXIgQ25yPUc0KCksQW5yPVl2KCksUG5yPWo0KCksSW5yPWMwKCksd2llPU9iamVjdC5wcm90b3R5cGUsTG5yPXdpZS5oYXNPd25Qcm9wZXJ0eSxrbnI9Q25yKGZ1bmN0aW9uKGUsdCl7ZT1PYmplY3QoZSk7dmFyIHI9LTEsbj10Lmxlbmd0aCxpPW4+Mj90WzJdOnZvaWQgMDtmb3IoaSYmUG5yKHRbMF0sdFsxXSxpKSYmKG49MSk7KytyPG47KWZvcih2YXIgbz10W3JdLGE9SW5yKG8pLHM9LTEsbD1hLmxlbmd0aDsrK3M8bDspe3ZhciBjPWFbc10sdT1lW2NdOyh1PT09dm9pZCAwfHxBbnIodSx3aWVbY10pJiYhTG5yLmNhbGwoZSxjKSkmJihlW2NdPW9bY10pfXJldHVybiBlfSk7U2llLmV4cG9ydHM9a25yfSk7dmFyIFRpZT1IKChRWm4sRWllKT0+e3ZhciBSbnI9SGYoKSxObnI9QmYoKSxEbnI9QWQoKTtmdW5jdGlvbiBPbnIoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt2YXIgaT1PYmplY3QodCk7aWYoIU5ucih0KSl7dmFyIG89Um5yKHIsMyk7dD1EbnIodCkscj1mdW5jdGlvbihzKXtyZXR1cm4gbyhpW3NdLHMsaSl9fXZhciBhPWUodCxyLG4pO3JldHVybiBhPi0xP2lbbz90W2FdOmFdOnZvaWQgMH19RWllLmV4cG9ydHM9T25yfSk7dmFyIEFpZT1IKCh0Sm4sQ2llKT0+e3ZhciB6bnI9L1xzLztmdW5jdGlvbiBGbnIoZSl7Zm9yKHZhciB0PWUubGVuZ3RoO3QtLSYmem5yLnRlc3QoZS5jaGFyQXQodCkpOyk7cmV0dXJuIHR9Q2llLmV4cG9ydHM9Rm5yfSk7dmFyIElpZT1IKChlSm4sUGllKT0+e3ZhciBCbnI9QWllKCksSG5yPS9eXHMrLztmdW5jdGlvbiBWbnIoZSl7cmV0dXJuIGUmJmUuc2xpY2UoMCxCbnIoZSkrMSkucmVwbGFjZShIbnIsIiIpfVBpZS5leHBvcnRzPVZucn0pO3ZhciBOaWU9SCgockpuLFJpZSk9Pnt2YXIgVW5yPUlpZSgpLExpZT1NbCgpLHFucj1adigpLGtpZT0wLzAsR25yPS9eWy0rXTB4WzAtOWEtZl0rJC9pLFducj0vXjBiWzAxXSskL2ksWW5yPS9eMG9bMC03XSskL2ksam5yPXBhcnNlSW50O2Z1bmN0aW9uIFhucihlKXtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7aWYocW5yKGUpKXJldHVybiBraWU7aWYoTGllKGUpKXt2YXIgdD10eXBlb2YgZS52YWx1ZU9mPT0iZnVuY3Rpb24iP2UudmFsdWVPZigpOmU7ZT1MaWUodCk/dCsiIjp0fWlmKHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gZT09PTA/ZTorZTtlPVVucihlKTt2YXIgcj1XbnIudGVzdChlKTtyZXR1cm4gcnx8WW5yLnRlc3QoZSk/am5yKGUuc2xpY2UoMikscj8yOjgpOkduci50ZXN0KGUpP2tpZTorZX1SaWUuZXhwb3J0cz1YbnJ9KTt2YXIgZ2x0PUgoKG5KbixPaWUpPT57dmFyICRucj1OaWUoKSxEaWU9MS8wLEtucj0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7ZnVuY3Rpb24gWm5yKGUpe2lmKCFlKXJldHVybiBlPT09MD9lOjA7aWYoZT0kbnIoZSksZT09PURpZXx8ZT09PS1EaWUpe3ZhciB0PWU8MD8tMToxO3JldHVybiB0Kktucn1yZXR1cm4gZT09PWU/ZTowfU9pZS5leHBvcnRzPVpucn0pO3ZhciBGaWU9SCgoaUpuLHppZSk9Pnt2YXIgSm5yPWdsdCgpO2Z1bmN0aW9uIFFucihlKXt2YXIgdD1KbnIoZSkscj10JTE7cmV0dXJuIHQ9PT10P3I/dC1yOnQ6MH16aWUuZXhwb3J0cz1RbnJ9KTt2YXIgSGllPUgoKG9KbixCaWUpPT57dmFyIHRpcj1hbHQoKSxlaXI9SGYoKSxyaXI9RmllKCksbmlyPU1hdGgubWF4O2Z1bmN0aW9uIGlpcihlLHQscil7dmFyIG49ZT09bnVsbD8wOmUubGVuZ3RoO2lmKCFuKXJldHVybi0xO3ZhciBpPXI9PW51bGw/MDpyaXIocik7cmV0dXJuIGk8MCYmKGk9bmlyKG4raSwwKSksdGlyKGUsZWlyKHQsMyksaSl9QmllLmV4cG9ydHM9aWlyfSk7dmFyIFVpZT1IKChhSm4sVmllKT0+e3ZhciBvaXI9VGllKCksYWlyPUhpZSgpLHNpcj1vaXIoYWlyKTtWaWUuZXhwb3J0cz1zaXJ9KTt2YXIgX2x0PUgoKHNKbixxaWUpPT57dmFyIGxpcj10SCgpO2Z1bmN0aW9uIGNpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/bGlyKGUsMSk6W119cWllLmV4cG9ydHM9Y2lyfSk7dmFyIFdpZT1IKChsSm4sR2llKT0+e3ZhciB1aXI9WEIoKSxoaXI9TnN0KCksZmlyPWMwKCk7ZnVuY3Rpb24gcGlyKGUsdCl7cmV0dXJuIGU9PW51bGw/ZTp1aXIoZSxoaXIodCksZmlyKX1HaWUuZXhwb3J0cz1waXJ9KTt2YXIgamllPUgoKGNKbixZaWUpPT57ZnVuY3Rpb24gZGlyKGUpe3ZhciB0PWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4gdD9lW3QtMV06dm9pZCAwfVlpZS5leHBvcnRzPWRpcn0pO3ZhciAkaWU9SCgodUpuLFhpZSk9Pnt2YXIgbWlyPUk0KCksZ2lyPSRCKCksX2lyPUhmKCk7ZnVuY3Rpb24geWlyKGUsdCl7dmFyIHI9e307cmV0dXJuIHQ9X2lyKHQsMyksZ2lyKGUsZnVuY3Rpb24obixpLG8pe21pcihyLGksdChuLGksbykpfSkscn1YaWUuZXhwb3J0cz15aXJ9KTt2YXIgc0g9SCgoaEpuLEtpZSk9Pnt2YXIgdmlyPVp2KCk7ZnVuY3Rpb24geGlyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aDsrK248aTspe3ZhciBvPWVbbl0sYT10KG8pO2lmKGEhPW51bGwmJihzPT09dm9pZCAwP2E9PT1hJiYhdmlyKGEpOnIoYSxzKSkpdmFyIHM9YSxsPW99cmV0dXJuIGx9S2llLmV4cG9ydHM9eGlyfSk7dmFyIEppZT1IKChmSm4sWmllKT0+e2Z1bmN0aW9uIGJpcihlLHQpe3JldHVybiBlPnR9WmllLmV4cG9ydHM9YmlyfSk7dmFyIHRvZT1IKChwSm4sUWllKT0+e3ZhciB3aXI9c0goKSxTaXI9SmllKCksTWlyPXUwKCk7ZnVuY3Rpb24gRWlyKGUpe3JldHVybiBlJiZlLmxlbmd0aD93aXIoZSxNaXIsU2lyKTp2b2lkIDB9UWllLmV4cG9ydHM9RWlyfSk7dmFyIHlsdD1IKChkSm4sZW9lKT0+e3ZhciBUaXI9STQoKSxDaXI9WXYoKTtmdW5jdGlvbiBBaXIoZSx0LHIpeyhyIT09dm9pZCAwJiYhQ2lyKGVbdF0scil8fHI9PT12b2lkIDAmJiEodCBpbiBlKSkmJlRpcihlLHQscil9ZW9lLmV4cG9ydHM9QWlyfSk7dmFyIGlvZT1IKChtSm4sbm9lKT0+e3ZhciBQaXI9czAoKSxJaXI9QjQoKSxMaXI9WXUoKSxraXI9IltvYmplY3QgT2JqZWN0XSIsUmlyPUZ1bmN0aW9uLnByb3RvdHlwZSxOaXI9T2JqZWN0LnByb3RvdHlwZSxyb2U9UmlyLnRvU3RyaW5nLERpcj1OaXIuaGFzT3duUHJvcGVydHksT2lyPXJvZS5jYWxsKE9iamVjdCk7ZnVuY3Rpb24gemlyKGUpe2lmKCFMaXIoZSl8fFBpcihlKSE9a2lyKXJldHVybiExO3ZhciB0PUlpcihlKTtpZih0PT09bnVsbClyZXR1cm4hMDt2YXIgcj1EaXIuY2FsbCh0LCJjb25zdHJ1Y3RvciIpJiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmciBpbnN0YW5jZW9mIHImJnJvZS5jYWxsKHIpPT1PaXJ9bm9lLmV4cG9ydHM9emlyfSk7dmFyIHZsdD1IKChnSm4sb29lKT0+e2Z1bmN0aW9uIEZpcihlLHQpe2lmKCEodD09PSJjb25zdHJ1Y3RvciImJnR5cGVvZiBlW3RdPT0iZnVuY3Rpb24iKSYmdCE9Il9fcHJvdG9fXyIpcmV0dXJuIGVbdF19b29lLmV4cG9ydHM9RmlyfSk7dmFyIHNvZT1IKChfSm4sYW9lKT0+e3ZhciBCaXI9VVMoKSxIaXI9YzAoKTtmdW5jdGlvbiBWaXIoZSl7cmV0dXJuIEJpcihlLEhpcihlKSl9YW9lLmV4cG9ydHM9VmlyfSk7dmFyIHBvZT1IKCh5Sm4sZm9lKT0+e3ZhciBsb2U9eWx0KCksVWlyPWdzdCgpLHFpcj1Jc3QoKSxHaXI9X3N0KCksV2lyPWtzdCgpLGNvZT1xUygpLHVvZT1UaSgpLFlpcj1sbHQoKSxqaXI9WHYoKSxYaXI9RlMoKSwkaXI9TWwoKSxLaXI9aW9lKCksWmlyPVlTKCksaG9lPXZsdCgpLEppcj1zb2UoKTtmdW5jdGlvbiBRaXIoZSx0LHIsbixpLG8sYSl7dmFyIHM9aG9lKGUsciksbD1ob2UodCxyKSxjPWEuZ2V0KGwpO2lmKGMpe2xvZShlLHIsYyk7cmV0dXJufXZhciB1PW8/byhzLGwscisiIixlLHQsYSk6dm9pZCAwLGg9dT09PXZvaWQgMDtpZihoKXt2YXIgZj11b2UobCkscD0hZiYmamlyKGwpLGQ9IWYmJiFwJiZaaXIobCk7dT1sLGZ8fHB8fGQ/dW9lKHMpP3U9czpZaXIocyk/dT1HaXIocyk6cD8oaD0hMSx1PVVpcihsLCEwKSk6ZD8oaD0hMSx1PXFpcihsLCEwKSk6dT1bXTpLaXIobCl8fGNvZShsKT8odT1zLGNvZShzKT91PUppcihzKTooISRpcihzKXx8WGlyKHMpKSYmKHU9V2lyKGwpKSk6aD0hMX1oJiYoYS5zZXQobCx1KSxpKHUsbCxuLG8sYSksYS5kZWxldGUobCkpLGxvZShlLHIsdSl9Zm9lLmV4cG9ydHM9UWlyfSk7dmFyIGdvZT1IKCh2Sm4sbW9lKT0+e3ZhciB0b3I9UDQoKSxlb3I9eWx0KCkscm9yPVhCKCksbm9yPXBvZSgpLGlvcj1NbCgpLG9vcj1jMCgpLGFvcj12bHQoKTtmdW5jdGlvbiBkb2UoZSx0LHIsbixpKXtlIT09dCYmcm9yKHQsZnVuY3Rpb24obyxhKXtpZihpfHwoaT1uZXcgdG9yKSxpb3Iobykpbm9yKGUsdCxhLHIsZG9lLG4saSk7ZWxzZXt2YXIgcz1uP24oYW9yKGUsYSksbyxhKyIiLGUsdCxpKTp2b2lkIDA7cz09PXZvaWQgMCYmKHM9byksZW9yKGUsYSxzKX19LG9vcil9bW9lLmV4cG9ydHM9ZG9lfSk7dmFyIHlvZT1IKCh4Sm4sX29lKT0+e3ZhciBzb3I9RzQoKSxsb3I9ajQoKTtmdW5jdGlvbiBjb3IoZSl7cmV0dXJuIHNvcihmdW5jdGlvbih0LHIpe3ZhciBuPS0xLGk9ci5sZW5ndGgsbz1pPjE/cltpLTFdOnZvaWQgMCxhPWk+Mj9yWzJdOnZvaWQgMDtmb3Iobz1lLmxlbmd0aD4zJiZ0eXBlb2Ygbz09ImZ1bmN0aW9uIj8oaS0tLG8pOnZvaWQgMCxhJiZsb3IoclswXSxyWzFdLGEpJiYobz1pPDM/dm9pZCAwOm8saT0xKSx0PU9iamVjdCh0KTsrK248aTspe3ZhciBzPXJbbl07cyYmZSh0LHMsbixvKX1yZXR1cm4gdH0pfV9vZS5leHBvcnRzPWNvcn0pO3ZhciB4b2U9SCgoYkpuLHZvZSk9Pnt2YXIgdW9yPWdvZSgpLGhvcj15b2UoKSxwb3I9aG9yKGZ1bmN0aW9uKGUsdCxyKXt1b3IoZSx0LHIpfSk7dm9lLmV4cG9ydHM9cG9yfSk7dmFyIHhsdD1IKCh3Sm4sYm9lKT0+e2Z1bmN0aW9uIGRvcihlLHQpe3JldHVybiBlPHR9Ym9lLmV4cG9ydHM9ZG9yfSk7dmFyIFNvZT1IKChTSm4sd29lKT0+e3ZhciBtb3I9c0goKSxnb3I9eGx0KCksX29yPXUwKCk7ZnVuY3Rpb24geW9yKGUpe3JldHVybiBlJiZlLmxlbmd0aD9tb3IoZSxfb3IsZ29yKTp2b2lkIDB9d29lLmV4cG9ydHM9eW9yfSk7dmFyIEVvZT1IKChNSm4sTW9lKT0+e3ZhciB2b3I9c0goKSx4b3I9SGYoKSxib3I9eGx0KCk7ZnVuY3Rpb24gd29yKGUsdCl7cmV0dXJuIGUmJmUubGVuZ3RoP3ZvcihlLHhvcih0LDIpLGJvcik6dm9pZCAwfU1vZS5leHBvcnRzPXdvcn0pO3ZhciBDb2U9SCgoRUpuLFRvZSk9Pnt2YXIgU29yPUhjKCksTW9yPWZ1bmN0aW9uKCl7cmV0dXJuIFNvci5EYXRlLm5vdygpfTtUb2UuZXhwb3J0cz1Nb3J9KTt2YXIgSW9lPUgoKFRKbixQb2UpPT57dmFyIEVvcj1MNCgpLFRvcj1VNCgpLENvcj1SNCgpLEFvZT1NbCgpLEFvcj0kUygpO2Z1bmN0aW9uIFBvcihlLHQscixuKXtpZighQW9lKGUpKXJldHVybiBlO3Q9VG9yKHQsZSk7Zm9yKHZhciBpPS0xLG89dC5sZW5ndGgsYT1vLTEscz1lO3MhPW51bGwmJisraTxvOyl7dmFyIGw9QW9yKHRbaV0pLGM9cjtpZihsPT09Il9fcHJvdG9fXyJ8fGw9PT0iY29uc3RydWN0b3IifHxsPT09InByb3RvdHlwZSIpcmV0dXJuIGU7aWYoaSE9YSl7dmFyIHU9c1tsXTtjPW4/bih1LGwscyk6dm9pZCAwLGM9PT12b2lkIDAmJihjPUFvZSh1KT91OkNvcih0W2krMV0pP1tdOnt9KX1Fb3IocyxsLGMpLHM9c1tsXX1yZXR1cm4gZX1Qb2UuZXhwb3J0cz1Qb3J9KTt2YXIga29lPUgoKENKbixMb2UpPT57dmFyIElvcj1xNCgpLExvcj1Jb2UoKSxrb3I9VTQoKTtmdW5jdGlvbiBSb3IoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89e307KytuPGk7KXt2YXIgYT10W25dLHM9SW9yKGUsYSk7cihzLGEpJiZMb3Iobyxrb3IoYSxlKSxzKX1yZXR1cm4gb31Mb2UuZXhwb3J0cz1Sb3J9KTt2YXIgTm9lPUgoKEFKbixSb2UpPT57dmFyIE5vcj1rb2UoKSxEb3I9WHN0KCk7ZnVuY3Rpb24gT29yKGUsdCl7cmV0dXJuIE5vcihlLHQsZnVuY3Rpb24ocixuKXtyZXR1cm4gRG9yKGUsbil9KX1Sb2UuZXhwb3J0cz1Pb3J9KTt2YXIgT29lPUgoKFBKbixEb2UpPT57dmFyIHpvcj1fbHQoKSxGb3I9aWx0KCksQm9yPW9sdCgpO2Z1bmN0aW9uIEhvcihlKXtyZXR1cm4gQm9yKEZvcihlLHZvaWQgMCx6b3IpLGUrIiIpfURvZS5leHBvcnRzPUhvcn0pO3ZhciBGb2U9SCgoSUpuLHpvZSk9Pnt2YXIgVm9yPU5vZSgpLFVvcj1Pb2UoKSxxb3I9VW9yKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/e306Vm9yKGUsdCl9KTt6b2UuZXhwb3J0cz1xb3J9KTt2YXIgSG9lPUgoKExKbixCb2UpPT57dmFyIEdvcj1NYXRoLmNlaWwsV29yPU1hdGgubWF4O2Z1bmN0aW9uIFlvcihlLHQscixuKXtmb3IodmFyIGk9LTEsbz1Xb3IoR29yKCh0LWUpLyhyfHwxKSksMCksYT1BcnJheShvKTtvLS07KWFbbj9vOisraV09ZSxlKz1yO3JldHVybiBhfUJvZS5leHBvcnRzPVlvcn0pO3ZhciBVb2U9SCgoa0puLFZvZSk9Pnt2YXIgam9yPUhvZSgpLFhvcj1qNCgpLGJsdD1nbHQoKTtmdW5jdGlvbiAkb3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbiYmdHlwZW9mIG4hPSJudW1iZXIiJiZYb3IodCxyLG4pJiYocj1uPXZvaWQgMCksdD1ibHQodCkscj09PXZvaWQgMD8ocj10LHQ9MCk6cj1ibHQociksbj1uPT09dm9pZCAwP3Q8cj8xOi0xOmJsdChuKSxqb3IodCxyLG4sZSl9fVZvZS5leHBvcnRzPSRvcn0pO3ZhciBHb2U9SCgoUkpuLHFvZSk9Pnt2YXIgS29yPVVvZSgpLFpvcj1Lb3IoKTtxb2UuZXhwb3J0cz1ab3J9KTt2YXIgWW9lPUgoKE5KbixXb2UpPT57ZnVuY3Rpb24gSm9yKGUsdCl7dmFyIHI9ZS5sZW5ndGg7Zm9yKGUuc29ydCh0KTtyLS07KWVbcl09ZVtyXS52YWx1ZTtyZXR1cm4gZX1Xb2UuZXhwb3J0cz1Kb3J9KTt2YXIgJG9lPUgoKERKbixYb2UpPT57dmFyIGpvZT1adigpO2Z1bmN0aW9uIFFvcihlLHQpe2lmKGUhPT10KXt2YXIgcj1lIT09dm9pZCAwLG49ZT09PW51bGwsaT1lPT09ZSxvPWpvZShlKSxhPXQhPT12b2lkIDAscz10PT09bnVsbCxsPXQ9PT10LGM9am9lKHQpO2lmKCFzJiYhYyYmIW8mJmU+dHx8byYmYSYmbCYmIXMmJiFjfHxuJiZhJiZsfHwhciYmbHx8IWkpcmV0dXJuIDE7aWYoIW4mJiFvJiYhYyYmZTx0fHxjJiZyJiZpJiYhbiYmIW98fHMmJnImJml8fCFhJiZpfHwhbClyZXR1cm4tMX1yZXR1cm4gMH1Yb2UuZXhwb3J0cz1Rb3J9KTt2YXIgWm9lPUgoKE9KbixLb2UpPT57dmFyIHRhcj0kb2UoKTtmdW5jdGlvbiBlYXIoZSx0LHIpe2Zvcih2YXIgbj0tMSxpPWUuY3JpdGVyaWEsbz10LmNyaXRlcmlhLGE9aS5sZW5ndGgscz1yLmxlbmd0aDsrK248YTspe3ZhciBsPXRhcihpW25dLG9bbl0pO2lmKGwpe2lmKG4+PXMpcmV0dXJuIGw7dmFyIGM9cltuXTtyZXR1cm4gbCooYz09ImRlc2MiPy0xOjEpfX1yZXR1cm4gZS5pbmRleC10LmluZGV4fUtvZS5leHBvcnRzPWVhcn0pO3ZhciBRb2U9SCgoekpuLEpvZSk9Pnt2YXIgd2x0PVY0KCkscmFyPXE0KCksbmFyPUhmKCksaWFyPVFzdCgpLG9hcj1Zb2UoKSxhYXI9TjQoKSxzYXI9Wm9lKCksbGFyPXUwKCksY2FyPVRpKCk7ZnVuY3Rpb24gdWFyKGUsdCxyKXt0Lmxlbmd0aD90PXdsdCh0LGZ1bmN0aW9uKG8pe3JldHVybiBjYXIobyk/ZnVuY3Rpb24oYSl7cmV0dXJuIHJhcihhLG8ubGVuZ3RoPT09MT9vWzBdOm8pfTpvfSk6dD1bbGFyXTt2YXIgbj0tMTt0PXdsdCh0LGFhcihuYXIpKTt2YXIgaT1pYXIoZSxmdW5jdGlvbihvLGEscyl7dmFyIGw9d2x0KHQsZnVuY3Rpb24oYyl7cmV0dXJuIGMobyl9KTtyZXR1cm57Y3JpdGVyaWE6bCxpbmRleDorK24sdmFsdWU6b319KTtyZXR1cm4gb2FyKGksZnVuY3Rpb24obyxhKXtyZXR1cm4gc2FyKG8sYSxyKX0pfUpvZS5leHBvcnRzPXVhcn0pO3ZhciByYWU9SCgoRkpuLGVhZSk9Pnt2YXIgaGFyPXRIKCksZmFyPVFvZSgpLHBhcj1HNCgpLHRhZT1qNCgpLGRhcj1wYXIoZnVuY3Rpb24oZSx0KXtpZihlPT1udWxsKXJldHVybltdO3ZhciByPXQubGVuZ3RoO3JldHVybiByPjEmJnRhZShlLHRbMF0sdFsxXSk/dD1bXTpyPjImJnRhZSh0WzBdLHRbMV0sdFsyXSkmJih0PVt0WzBdXSksZmFyKGUsaGFyKHQsMSksW10pfSk7ZWFlLmV4cG9ydHM9ZGFyfSk7dmFyIGlhZT1IKChCSm4sbmFlKT0+e3ZhciBtYXI9WXN0KCksZ2FyPTA7ZnVuY3Rpb24gX2FyKGUpe3ZhciB0PSsrZ2FyO3JldHVybiBtYXIoZSkrdH1uYWUuZXhwb3J0cz1fYXJ9KTt2YXIgYWFlPUgoKEhKbixvYWUpPT57ZnVuY3Rpb24geWFyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmxlbmd0aCxvPXQubGVuZ3RoLGE9e307KytuPGk7KXt2YXIgcz1uPG8/dFtuXTp2b2lkIDA7cihhLGVbbl0scyl9cmV0dXJuIGF9b2FlLmV4cG9ydHM9eWFyfSk7dmFyIGxhZT1IKChWSm4sc2FlKT0+e3ZhciB4YXI9TDQoKSxiYXI9YWFlKCk7ZnVuY3Rpb24gd2FyKGUsdCl7cmV0dXJuIGJhcihlfHxbXSx0fHxbXSx4YXIpfXNhZS5leHBvcnRzPXdhcn0pO3ZhciBVbj1IKChVSm4sY2FlKT0+e3ZhciBsSDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e2xIPXtjbG9uZURlZXA6eGllKCksY29uc3RhbnQ6akIoKSxkZWZhdWx0czpNaWUoKSxlYWNoOk9zdCgpLGZpbHRlcjpLc3QoKSxmaW5kOlVpZSgpLGZsYXR0ZW46X2x0KCksZm9yRWFjaDpEc3QoKSxmb3JJbjpXaWUoKSxoYXM6WnN0KCksaXNVbmRlZmluZWQ6SnN0KCksbGFzdDpqaWUoKSxtYXA6dGx0KCksbWFwVmFsdWVzOiRpZSgpLG1heDp0b2UoKSxtZXJnZTp4b2UoKSxtaW46U29lKCksbWluQnk6RW9lKCksbm93OkNvZSgpLHBpY2s6Rm9lKCkscmFuZ2U6R29lKCkscmVkdWNlOmVsdCgpLHNvcnRCeTpyYWUoKSx1bmlxdWVJZDppYWUoKSx2YWx1ZXM6Y2x0KCksemlwT2JqZWN0OmxhZSgpfX1jYXRjaChlKXt9bEh8fChsSD13aW5kb3cuXyk7Y2FlLmV4cG9ydHM9bEh9KTt2YXIgZmFlPUgoKEdKbixoYWUpPT57aGFlLmV4cG9ydHM9Y0g7ZnVuY3Rpb24gY0goKXt2YXIgZT17fTtlLl9uZXh0PWUuX3ByZXY9ZSx0aGlzLl9zZW50aW5lbD1lfWNILnByb3RvdHlwZS5kZXF1ZXVlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2VudGluZWwsdD1lLl9wcmV2O2lmKHQhPT1lKXJldHVybiB1YWUodCksdH07Y0gucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc2VudGluZWw7ZS5fcHJldiYmZS5fbmV4dCYmdWFlKGUpLGUuX25leHQ9dC5fbmV4dCx0Ll9uZXh0Ll9wcmV2PWUsdC5fbmV4dD1lLGUuX3ByZXY9dH07Y0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9dGhpcy5fc2VudGluZWwscj10Ll9wcmV2O3IhPT10OyllLnB1c2goSlNPTi5zdHJpbmdpZnkocixTYXIpKSxyPXIuX3ByZXY7cmV0dXJuIlsiK2Uuam9pbigiLCAiKSsiXSJ9O2Z1bmN0aW9uIHVhZShlKXtlLl9wcmV2Ll9uZXh0PWUuX25leHQsZS5fbmV4dC5fcHJldj1lLl9wcmV2LGRlbGV0ZSBlLl9uZXh0LGRlbGV0ZSBlLl9wcmV2fWZ1bmN0aW9uIFNhcihlLHQpe2lmKGUhPT0iX25leHQiJiZlIT09Il9wcmV2IilyZXR1cm4gdH19KTt2YXIgZGFlPUgoKFdKbixwYWUpPT57dmFyIFBkPVVuKCksTWFyPVVjKCkuR3JhcGgsRWFyPWZhZSgpO3BhZS5leHBvcnRzPUNhcjt2YXIgVGFyPVBkLmNvbnN0YW50KDEpO2Z1bmN0aW9uIENhcihlLHQpe2lmKGUubm9kZUNvdW50KCk8PTEpcmV0dXJuW107dmFyIHI9UGFyKGUsdHx8VGFyKSxuPUFhcihyLmdyYXBoLHIuYnVja2V0cyxyLnplcm9JZHgpO3JldHVybiBQZC5mbGF0dGVuKFBkLm1hcChuLGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkudixpLncpfSksITApfWZ1bmN0aW9uIEFhcihlLHQscil7Zm9yKHZhciBuPVtdLGk9dFt0Lmxlbmd0aC0xXSxvPXRbMF0sYTtlLm5vZGVDb3VudCgpOyl7Zm9yKDthPW8uZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7Zm9yKDthPWkuZGVxdWV1ZSgpOylTbHQoZSx0LHIsYSk7aWYoZS5ub2RlQ291bnQoKSl7Zm9yKHZhciBzPXQubGVuZ3RoLTI7cz4wOy0tcylpZihhPXRbc10uZGVxdWV1ZSgpLGEpe249bi5jb25jYXQoU2x0KGUsdCxyLGEsITApKTticmVha319fXJldHVybiBufWZ1bmN0aW9uIFNsdChlLHQscixuLGkpe3ZhciBvPWk/W106dm9pZCAwO3JldHVybiBQZC5mb3JFYWNoKGUuaW5FZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO2kmJm8ucHVzaCh7djphLnYsdzphLnd9KSxsLm91dC09cyxNbHQodCxyLGwpfSksUGQuZm9yRWFjaChlLm91dEVkZ2VzKG4udiksZnVuY3Rpb24oYSl7dmFyIHM9ZS5lZGdlKGEpLGw9YS53LGM9ZS5ub2RlKGwpO2MuaW4tPXMsTWx0KHQscixjKX0pLGUucmVtb3ZlTm9kZShuLnYpLG99ZnVuY3Rpb24gUGFyKGUsdCl7dmFyIHI9bmV3IE1hcixuPTAsaT0wO1BkLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3Iuc2V0Tm9kZShzLHt2OnMsaW46MCxvdXQ6MH0pfSksUGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocyl7dmFyIGw9ci5lZGdlKHMudixzLncpfHwwLGM9dChzKSx1PWwrYztyLnNldEVkZ2Uocy52LHMudyx1KSxpPU1hdGgubWF4KGksci5ub2RlKHMudikub3V0Kz1jKSxuPU1hdGgubWF4KG4sci5ub2RlKHMudykuaW4rPWMpfSk7dmFyIG89UGQucmFuZ2UoaStuKzMpLm1hcChmdW5jdGlvbigpe3JldHVybiBuZXcgRWFyfSksYT1uKzE7cmV0dXJuIFBkLmZvckVhY2goci5ub2RlcygpLGZ1bmN0aW9uKHMpe01sdChvLGEsci5ub2RlKHMpKX0pLHtncmFwaDpyLGJ1Y2tldHM6byx6ZXJvSWR4OmF9fWZ1bmN0aW9uIE1sdChlLHQscil7ci5vdXQ/ci5pbj9lW3Iub3V0LXIuaW4rdF0uZW5xdWV1ZShyKTplW2UubGVuZ3RoLTFdLmVucXVldWUocik6ZVswXS5lbnF1ZXVlKHIpfX0pO3ZhciBnYWU9SCgoWUpuLG1hZSk9PnsidXNlIHN0cmljdCI7dmFyIFF2PVVuKCksSWFyPWRhZSgpO21hZS5leHBvcnRzPXtydW46TGFyLHVuZG86UmFyfTtmdW5jdGlvbiBMYXIoZSl7dmFyIHQ9ZS5ncmFwaCgpLmFjeWNsaWNlcj09PSJncmVlZHkiP0lhcihlLHIoZSkpOmthcihlKTtRdi5mb3JFYWNoKHQsZnVuY3Rpb24obil7dmFyIGk9ZS5lZGdlKG4pO2UucmVtb3ZlRWRnZShuKSxpLmZvcndhcmROYW1lPW4ubmFtZSxpLnJldmVyc2VkPSEwLGUuc2V0RWRnZShuLncsbi52LGksUXYudW5pcXVlSWQoInJldiIpKX0pO2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLmVkZ2UoaSkud2VpZ2h0fX19ZnVuY3Rpb24ga2FyKGUpe3ZhciB0PVtdLHI9e30sbj17fTtmdW5jdGlvbiBpKG8pe1F2LmhhcyhuLG8pfHwobltvXT0hMCxyW29dPSEwLFF2LmZvckVhY2goZS5vdXRFZGdlcyhvKSxmdW5jdGlvbihhKXtRdi5oYXMocixhLncpP3QucHVzaChhKTppKGEudyl9KSxkZWxldGUgcltvXSl9cmV0dXJuIFF2LmZvckVhY2goZS5ub2RlcygpLGkpLHR9ZnVuY3Rpb24gUmFyKGUpe1F2LmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihyLnJldmVyc2VkKXtlLnJlbW92ZUVkZ2UodCk7dmFyIG49ci5mb3J3YXJkTmFtZTtkZWxldGUgci5yZXZlcnNlZCxkZWxldGUgci5mb3J3YXJkTmFtZSxlLnNldEVkZ2UodC53LHQudixyLG4pfX0pfX0pO3ZhciBucz1IKChqSm4seGFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUXI9VW4oKSxfYWU9VWMoKS5HcmFwaDt4YWUuZXhwb3J0cz17YWRkRHVtbXlOb2RlOnlhZSxzaW1wbGlmeTpOYXIsYXNOb25Db21wb3VuZEdyYXBoOkRhcixzdWNjZXNzb3JXZWlnaHRzOk9hcixwcmVkZWNlc3NvcldlaWdodHM6emFyLGludGVyc2VjdFJlY3Q6RmFyLGJ1aWxkTGF5ZXJNYXRyaXg6QmFyLG5vcm1hbGl6ZVJhbmtzOkhhcixyZW1vdmVFbXB0eVJhbmtzOlZhcixhZGRCb3JkZXJOb2RlOlVhcixtYXhSYW5rOnZhZSxwYXJ0aXRpb246cWFyLHRpbWU6R2FyLG5vdGltZTpXYXJ9O2Z1bmN0aW9uIHlhZShlLHQscixuKXt2YXIgaTtkbyBpPVFyLnVuaXF1ZUlkKG4pO3doaWxlKGUuaGFzTm9kZShpKSk7cmV0dXJuIHIuZHVtbXk9dCxlLnNldE5vZGUoaSxyKSxpfWZ1bmN0aW9uIE5hcihlKXt2YXIgdD1uZXcgX2FlKCkuc2V0R3JhcGgoZS5ncmFwaCgpKTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXQuZWRnZShyLnYsci53KXx8e3dlaWdodDowLG1pbmxlbjoxfSxpPWUuZWRnZShyKTt0LnNldEVkZ2Uoci52LHIudyx7d2VpZ2h0Om4ud2VpZ2h0K2kud2VpZ2h0LG1pbmxlbjpNYXRoLm1heChuLm1pbmxlbixpLm1pbmxlbil9KX0pLHR9ZnVuY3Rpb24gRGFyKGUpe3ZhciB0PW5ldyBfYWUoe211bHRpZ3JhcGg6ZS5pc011bHRpZ3JhcGgoKX0pLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe2UuY2hpbGRyZW4ocikubGVuZ3RofHx0LnNldE5vZGUocixlLm5vZGUocikpfSksUXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dC5zZXRFZGdlKHIsZS5lZGdlKHIpKX0pLHR9ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5vdXRFZGdlcyhyKSxmdW5jdGlvbihpKXtuW2kud109KG5baS53XXx8MCkrZS5lZGdlKGkpLndlaWdodH0pLG59KTtyZXR1cm4gUXIuemlwT2JqZWN0KGUubm9kZXMoKSx0KX1mdW5jdGlvbiB6YXIoZSl7dmFyIHQ9UXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj17fTtyZXR1cm4gUXIuZm9yRWFjaChlLmluRWRnZXMociksZnVuY3Rpb24oaSl7bltpLnZdPShuW2kudl18fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gRmFyKGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9dC54LXIsbz10LnktbixhPWUud2lkdGgvMixzPWUuaGVpZ2h0LzI7aWYoIWkmJiFvKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7dmFyIGwsYztyZXR1cm4gTWF0aC5hYnMobykqYT5NYXRoLmFicyhpKSpzPyhvPDAmJihzPS1zKSxsPXMqaS9vLGM9cyk6KGk8MCYmKGE9LWEpLGw9YSxjPWEqby9pKSx7eDpyK2wseTpuK2N9fWZ1bmN0aW9uIEJhcihlKXt2YXIgdD1Rci5tYXAoUXIucmFuZ2UodmFlKGUpKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtyZXR1cm4gUXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpLGk9bi5yYW5rO1FyLmlzVW5kZWZpbmVkKGkpfHwodFtpXVtuLm9yZGVyXT1yKX0pLHR9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikucmFua30pKTtRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUocik7UXIuaGFzKG4sInJhbmsiKSYmKG4ucmFuay09dCl9KX1mdW5jdGlvbiBWYXIoZSl7dmFyIHQ9UXIubWluKFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24obyl7cmV0dXJuIGUubm9kZShvKS5yYW5rfSkpLHI9W107UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLnJhbmstdDtyW2FdfHwoclthXT1bXSksclthXS5wdXNoKG8pfSk7dmFyIG49MCxpPWUuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtRci5mb3JFYWNoKHIsZnVuY3Rpb24obyxhKXtRci5pc1VuZGVmaW5lZChvKSYmYSVpIT09MD8tLW46biYmUXIuZm9yRWFjaChvLGZ1bmN0aW9uKHMpe2Uubm9kZShzKS5yYW5rKz1ufSl9KX1mdW5jdGlvbiBVYXIoZSx0LHIsbil7dmFyIGk9e3dpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPXIsaS5vcmRlcj1uKSx5YWUoZSwiYm9yZGVyIixpLHQpfWZ1bmN0aW9uIHZhZShlKXtyZXR1cm4gUXIubWF4KFFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLnJhbms7aWYoIVFyLmlzVW5kZWZpbmVkKHIpKXJldHVybiByfSkpfWZ1bmN0aW9uIHFhcihlLHQpe3ZhciByPXtsaHM6W10scmhzOltdfTtyZXR1cm4gUXIuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3Qobik/ci5saHMucHVzaChuKTpyLnJocy5wdXNoKG4pfSkscn1mdW5jdGlvbiBHYXIoZSx0KXt2YXIgcj1Rci5ub3coKTt0cnl7cmV0dXJuIHQoKX1maW5hbGx5e2NvbnNvbGUubG9nKGUrIiB0aW1lOiAiKyhRci5ub3coKS1yKSsibXMiKX19ZnVuY3Rpb24gV2FyKGUsdCl7cmV0dXJuIHQoKX19KTt2YXIgU2FlPUgoKFhKbix3YWUpPT57InVzZSBzdHJpY3QiO3ZhciBiYWU9VW4oKSxZYXI9bnMoKTt3YWUuZXhwb3J0cz17cnVuOmphcix1bmRvOiRhcn07ZnVuY3Rpb24gamFyKGUpe2UuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxiYWUuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7WGFyKGUsdCl9KX1mdW5jdGlvbiBYYXIoZSx0KXt2YXIgcj10LnYsbj1lLm5vZGUocikucmFuayxpPXQudyxvPWUubm9kZShpKS5yYW5rLGE9dC5uYW1lLHM9ZS5lZGdlKHQpLGw9cy5sYWJlbFJhbms7aWYobyE9PW4rMSl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBjLHUsaDtmb3IoaD0wLCsrbjtuPG87KytoLCsrbilzLnBvaW50cz1bXSx1PXt3aWR0aDowLGhlaWdodDowLGVkZ2VMYWJlbDpzLGVkZ2VPYmo6dCxyYW5rOm59LGM9WWFyLmFkZER1bW15Tm9kZShlLCJlZGdlIix1LCJfZCIpLG49PT1sJiYodS53aWR0aD1zLndpZHRoLHUuaGVpZ2h0PXMuaGVpZ2h0LHUuZHVtbXk9ImVkZ2UtbGFiZWwiLHUubGFiZWxwb3M9cy5sYWJlbHBvcyksZS5zZXRFZGdlKHIsYyx7d2VpZ2h0OnMud2VpZ2h0fSxhKSxoPT09MCYmZS5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2goYykscj1jO2Uuc2V0RWRnZShyLGkse3dlaWdodDpzLndlaWdodH0sYSl9fWZ1bmN0aW9uICRhcihlKXtiYWUuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ci5lZGdlTGFiZWwsaTtmb3IoZS5zZXRFZGdlKHIuZWRnZU9iaixuKTtyLmR1bW15OylpPWUuc3VjY2Vzc29ycyh0KVswXSxlLnJlbW92ZU5vZGUodCksbi5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSxyLmR1bW15PT09ImVkZ2UtbGFiZWwiJiYobi54PXIueCxuLnk9ci55LG4ud2lkdGg9ci53aWR0aCxuLmhlaWdodD1yLmhlaWdodCksdD1pLHI9ZS5ub2RlKHQpfSl9fSk7dmFyIFg0PUgoKCRKbixNYWUpPT57InVzZSBzdHJpY3QiO3ZhciB1SD1VbigpO01hZS5leHBvcnRzPXtsb25nZXN0UGF0aDpLYXIsc2xhY2s6WmFyfTtmdW5jdGlvbiBLYXIoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lLm5vZGUobik7aWYodUguaGFzKHQsbikpcmV0dXJuIGkucmFuazt0W25dPSEwO3ZhciBvPXVILm1pbih1SC5tYXAoZS5vdXRFZGdlcyhuKSxmdW5jdGlvbihhKXtyZXR1cm4gcihhLncpLWUuZWRnZShhKS5taW5sZW59KSk7cmV0dXJuKG89PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKG89MCksaS5yYW5rPW99dUguZm9yRWFjaChlLnNvdXJjZXMoKSxyKX1mdW5jdGlvbiBaYXIoZSx0KXtyZXR1cm4gZS5ub2RlKHQudykucmFuay1lLm5vZGUodC52KS5yYW5rLWUuZWRnZSh0KS5taW5sZW59fSk7dmFyIEVsdD1IKChLSm4sRWFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaEg9VW4oKSxKYXI9VWMoKS5HcmFwaCxmSD1YNCgpLnNsYWNrO0VhZS5leHBvcnRzPVFhcjtmdW5jdGlvbiBRYXIoZSl7dmFyIHQ9bmV3IEphcih7ZGlyZWN0ZWQ6ITF9KSxyPWUubm9kZXMoKVswXSxuPWUubm9kZUNvdW50KCk7dC5zZXROb2RlKHIse30pO2Zvcih2YXIgaSxvO3Rzcih0LGUpPG47KWk9ZXNyKHQsZSksbz10Lmhhc05vZGUoaS52KT9mSChlLGkpOi1mSChlLGkpLHJzcih0LGUsbyk7cmV0dXJuIHR9ZnVuY3Rpb24gdHNyKGUsdCl7ZnVuY3Rpb24gcihuKXtoSC5mb3JFYWNoKHQubm9kZUVkZ2VzKG4pLGZ1bmN0aW9uKGkpe3ZhciBvPWkudixhPW49PT1vP2kudzpvOyFlLmhhc05vZGUoYSkmJiFmSCh0LGkpJiYoZS5zZXROb2RlKGEse30pLGUuc2V0RWRnZShuLGEse30pLHIoYSkpfSl9cmV0dXJuIGhILmZvckVhY2goZS5ub2RlcygpLHIpLGUubm9kZUNvdW50KCl9ZnVuY3Rpb24gZXNyKGUsdCl7cmV0dXJuIGhILm1pbkJ5KHQuZWRnZXMoKSxmdW5jdGlvbihyKXtpZihlLmhhc05vZGUoci52KSE9PWUuaGFzTm9kZShyLncpKXJldHVybiBmSCh0LHIpfSl9ZnVuY3Rpb24gcnNyKGUsdCxyKXtoSC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt0Lm5vZGUobikucmFuays9cn0pfX0pO3ZhciBSYWU9SCgoWkpuLGthZSk9PnsidXNlIHN0cmljdCI7dmFyIElkPVVuKCksbnNyPUVsdCgpLGlzcj1YNCgpLnNsYWNrLG9zcj1YNCgpLmxvbmdlc3RQYXRoLGFzcj1VYygpLmFsZy5wcmVvcmRlcixzc3I9VWMoKS5hbGcucG9zdG9yZGVyLGxzcj1ucygpLnNpbXBsaWZ5O2thZS5leHBvcnRzPXQxO3QxLmluaXRMb3dMaW1WYWx1ZXM9Q2x0O3QxLmluaXRDdXRWYWx1ZXM9VGx0O3QxLmNhbGNDdXRWYWx1ZT1DYWU7dDEubGVhdmVFZGdlPVBhZTt0MS5lbnRlckVkZ2U9SWFlO3QxLmV4Y2hhbmdlRWRnZXM9TGFlO2Z1bmN0aW9uIHQxKGUpe2U9bHNyKGUpLG9zcihlKTt2YXIgdD1uc3IoZSk7Q2x0KHQpLFRsdCh0LGUpO2Zvcih2YXIgcixuO3I9UGFlKHQpOyluPUlhZSh0LGUsciksTGFlKHQsZSxyLG4pfWZ1bmN0aW9uIFRsdChlLHQpe3ZhciByPXNzcihlLGUubm9kZXMoKSk7cj1yLnNsaWNlKDAsci5sZW5ndGgtMSksSWQuZm9yRWFjaChyLGZ1bmN0aW9uKG4pe2NzcihlLHQsbil9KX1mdW5jdGlvbiBjc3IoZSx0LHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucGFyZW50O2UuZWRnZShyLGkpLmN1dHZhbHVlPUNhZShlLHQscil9ZnVuY3Rpb24gQ2FlKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudCxvPSEwLGE9dC5lZGdlKHIsaSkscz0wO3JldHVybiBhfHwobz0hMSxhPXQuZWRnZShpLHIpKSxzPWEud2VpZ2h0LElkLmZvckVhY2godC5ub2RlRWRnZXMociksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09cix1PWM/bC53OmwudjtpZih1IT09aSl7dmFyIGg9Yz09PW8sZj10LmVkZ2UobCkud2VpZ2h0O2lmKHMrPWg/ZjotZixoc3IoZSxyLHUpKXt2YXIgcD1lLmVkZ2Uocix1KS5jdXR2YWx1ZTtzKz1oPy1wOnB9fX0pLHN9ZnVuY3Rpb24gQ2x0KGUsdCl7YXJndW1lbnRzLmxlbmd0aDwyJiYodD1lLm5vZGVzKClbMF0pLEFhZShlLHt9LDEsdCl9ZnVuY3Rpb24gQWFlKGUsdCxyLG4saSl7dmFyIG89cixhPWUubm9kZShuKTtyZXR1cm4gdFtuXT0hMCxJZC5mb3JFYWNoKGUubmVpZ2hib3JzKG4pLGZ1bmN0aW9uKHMpe0lkLmhhcyh0LHMpfHwocj1BYWUoZSx0LHIscyxuKSl9KSxhLmxvdz1vLGEubGltPXIrKyxpP2EucGFyZW50PWk6ZGVsZXRlIGEucGFyZW50LHJ9ZnVuY3Rpb24gUGFlKGUpe3JldHVybiBJZC5maW5kKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGdlKHQpLmN1dHZhbHVlPDB9KX1mdW5jdGlvbiBJYWUoZSx0LHIpe3ZhciBuPXIudixpPXIudzt0Lmhhc0VkZ2UobixpKXx8KG49ci53LGk9ci52KTt2YXIgbz1lLm5vZGUobiksYT1lLm5vZGUoaSkscz1vLGw9ITE7by5saW0+YS5saW0mJihzPWEsbD0hMCk7dmFyIGM9SWQuZmlsdGVyKHQuZWRnZXMoKSxmdW5jdGlvbih1KXtyZXR1cm4gbD09PVRhZShlLGUubm9kZSh1LnYpLHMpJiZsIT09VGFlKGUsZS5ub2RlKHUudykscyl9KTtyZXR1cm4gSWQubWluQnkoYyxmdW5jdGlvbih1KXtyZXR1cm4gaXNyKHQsdSl9KX1mdW5jdGlvbiBMYWUoZSx0LHIsbil7dmFyIGk9ci52LG89ci53O2UucmVtb3ZlRWRnZShpLG8pLGUuc2V0RWRnZShuLnYsbi53LHt9KSxDbHQoZSksVGx0KGUsdCksdXNyKGUsdCl9ZnVuY3Rpb24gdXNyKGUsdCl7dmFyIHI9SWQuZmluZChlLm5vZGVzKCksZnVuY3Rpb24oaSl7cmV0dXJuIXQubm9kZShpKS5wYXJlbnR9KSxuPWFzcihlLHIpO249bi5zbGljZSgxKSxJZC5mb3JFYWNoKG4sZnVuY3Rpb24oaSl7dmFyIG89ZS5ub2RlKGkpLnBhcmVudCxhPXQuZWRnZShpLG8pLHM9ITE7YXx8KGE9dC5lZGdlKG8saSkscz0hMCksdC5ub2RlKGkpLnJhbms9dC5ub2RlKG8pLnJhbmsrKHM/YS5taW5sZW46LWEubWlubGVuKX0pfWZ1bmN0aW9uIGhzcihlLHQscil7cmV0dXJuIGUuaGFzRWRnZSh0LHIpfWZ1bmN0aW9uIFRhZShlLHQscil7cmV0dXJuIHIubG93PD10LmxpbSYmdC5saW08PXIubGltfX0pO3ZhciB6YWU9SCgoSkpuLE9hZSk9PnsidXNlIHN0cmljdCI7dmFyIGZzcj1YNCgpLERhZT1mc3IubG9uZ2VzdFBhdGgscHNyPUVsdCgpLGRzcj1SYWUoKTtPYWUuZXhwb3J0cz1tc3I7ZnVuY3Rpb24gbXNyKGUpe3N3aXRjaChlLmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6TmFlKGUpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6X3NyKGUpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpnc3IoZSk7YnJlYWs7ZGVmYXVsdDpOYWUoZSl9fXZhciBnc3I9RGFlO2Z1bmN0aW9uIF9zcihlKXtEYWUoZSkscHNyKGUpfWZ1bmN0aW9uIE5hZShlKXtkc3IoZSl9fSk7dmFyIEJhZT1IKChRSm4sRmFlKT0+e3ZhciBBbHQ9VW4oKTtGYWUuZXhwb3J0cz15c3I7ZnVuY3Rpb24geXNyKGUpe3ZhciB0PXhzcihlKTtBbHQuZm9yRWFjaChlLmdyYXBoKCkuZHVtbXlDaGFpbnMsZnVuY3Rpb24ocil7Zm9yKHZhciBuPWUubm9kZShyKSxpPW4uZWRnZU9iaixvPXZzcihlLHQsaS52LGkudyksYT1vLnBhdGgscz1vLmxjYSxsPTAsYz1hW2xdLHU9ITA7ciE9PWkudzspe2lmKG49ZS5ub2RlKHIpLHUpe2Zvcig7KGM9YVtsXSkhPT1zJiZlLm5vZGUoYykubWF4UmFuazxuLnJhbms7KWwrKztjPT09cyYmKHU9ITEpfWlmKCF1KXtmb3IoO2w8YS5sZW5ndGgtMSYmZS5ub2RlKGM9YVtsKzFdKS5taW5SYW5rPD1uLnJhbms7KWwrKztjPWFbbF19ZS5zZXRQYXJlbnQocixjKSxyPWUuc3VjY2Vzc29ycyhyKVswXX19KX1mdW5jdGlvbiB2c3IoZSx0LHIsbil7dmFyIGk9W10sbz1bXSxhPU1hdGgubWluKHRbcl0ubG93LHRbbl0ubG93KSxzPU1hdGgubWF4KHRbcl0ubGltLHRbbl0ubGltKSxsLGM7bD1yO2RvIGw9ZS5wYXJlbnQobCksaS5wdXNoKGwpO3doaWxlKGwmJih0W2xdLmxvdz5hfHxzPnRbbF0ubGltKSk7Zm9yKGM9bCxsPW47KGw9ZS5wYXJlbnQobCkpIT09Yzspby5wdXNoKGwpO3JldHVybntwYXRoOmkuY29uY2F0KG8ucmV2ZXJzZSgpKSxsY2E6Y319ZnVuY3Rpb24geHNyKGUpe3ZhciB0PXt9LHI9MDtmdW5jdGlvbiBuKGkpe3ZhciBvPXI7QWx0LmZvckVhY2goZS5jaGlsZHJlbihpKSxuKSx0W2ldPXtsb3c6byxsaW06cisrfX1yZXR1cm4gQWx0LmZvckVhY2goZS5jaGlsZHJlbigpLG4pLHR9fSk7dmFyIFVhZT1IKCh0UW4sVmFlKT0+e3ZhciBMZD1VbigpLFBsdD1ucygpO1ZhZS5leHBvcnRzPXtydW46YnNyLGNsZWFudXA6TXNyfTtmdW5jdGlvbiBic3IoZSl7dmFyIHQ9UGx0LmFkZER1bW15Tm9kZShlLCJyb290Iix7fSwiX3Jvb3QiKSxyPXdzcihlKSxuPUxkLm1heChMZC52YWx1ZXMocikpLTEsaT0yKm4rMTtlLmdyYXBoKCkubmVzdGluZ1Jvb3Q9dCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihhKXtlLmVkZ2UoYSkubWlubGVuKj1pfSk7dmFyIG89U3NyKGUpKzE7TGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24oYSl7SGFlKGUsdCxpLG8sbixyLGEpfSksZS5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yPWl9ZnVuY3Rpb24gSGFlKGUsdCxyLG4saSxvLGEpe3ZhciBzPWUuY2hpbGRyZW4oYSk7aWYoIXMubGVuZ3RoKXthIT09dCYmZS5zZXRFZGdlKHQsYSx7d2VpZ2h0OjAsbWlubGVuOnJ9KTtyZXR1cm59dmFyIGw9UGx0LmFkZEJvcmRlck5vZGUoZSwiX2J0IiksYz1QbHQuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSx1PWUubm9kZShhKTtlLnNldFBhcmVudChsLGEpLHUuYm9yZGVyVG9wPWwsZS5zZXRQYXJlbnQoYyxhKSx1LmJvcmRlckJvdHRvbT1jLExkLmZvckVhY2gocyxmdW5jdGlvbihoKXtIYWUoZSx0LHIsbixpLG8saCk7dmFyIGY9ZS5ub2RlKGgpLHA9Zi5ib3JkZXJUb3A/Zi5ib3JkZXJUb3A6aCxkPWYuYm9yZGVyQm90dG9tP2YuYm9yZGVyQm90dG9tOmgsZz1mLmJvcmRlclRvcD9uOjIqbixfPXAhPT1kPzE6aS1vW2FdKzE7ZS5zZXRFZGdlKGwscCx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxjLHt3ZWlnaHQ6ZyxtaW5sZW46XyxuZXN0aW5nRWRnZTohMH0pfSksZS5wYXJlbnQoYSl8fGUuc2V0RWRnZSh0LGwse3dlaWdodDowLG1pbmxlbjppK29bYV19KX1mdW5jdGlvbiB3c3IoZSl7dmFyIHQ9e307ZnVuY3Rpb24gcihuLGkpe3ZhciBvPWUuY2hpbGRyZW4obik7byYmby5sZW5ndGgmJkxkLmZvckVhY2gobyxmdW5jdGlvbihhKXtyKGEsaSsxKX0pLHRbbl09aX1yZXR1cm4gTGQuZm9yRWFjaChlLmNoaWxkcmVuKCksZnVuY3Rpb24obil7cihuLDEpfSksdH1mdW5jdGlvbiBTc3IoZSl7cmV0dXJuIExkLnJlZHVjZShlLmVkZ2VzKCksZnVuY3Rpb24odCxyKXtyZXR1cm4gdCtlLmVkZ2Uocikud2VpZ2h0fSwwKX1mdW5jdGlvbiBNc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpO2UucmVtb3ZlTm9kZSh0Lm5lc3RpbmdSb290KSxkZWxldGUgdC5uZXN0aW5nUm9vdCxMZC5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5uZXN0aW5nRWRnZSYmZS5yZW1vdmVFZGdlKHIpfSl9fSk7dmFyIFdhZT1IKChlUW4sR2FlKT0+e3ZhciBJbHQ9VW4oKSxFc3I9bnMoKTtHYWUuZXhwb3J0cz1Uc3I7ZnVuY3Rpb24gVHNyKGUpe2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jaGlsZHJlbihyKSxpPWUubm9kZShyKTtpZihuLmxlbmd0aCYmSWx0LmZvckVhY2gobix0KSxJbHQuaGFzKGksIm1pblJhbmsiKSl7aS5ib3JkZXJMZWZ0PVtdLGkuYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBvPWkubWluUmFuayxhPWkubWF4UmFuaysxO288YTsrK28pcWFlKGUsImJvcmRlckxlZnQiLCJfYmwiLHIsaSxvKSxxYWUoZSwiYm9yZGVyUmlnaHQiLCJfYnIiLHIsaSxvKX19SWx0LmZvckVhY2goZS5jaGlsZHJlbigpLHQpfWZ1bmN0aW9uIHFhZShlLHQscixuLGksbyl7dmFyIGE9e3dpZHRoOjAsaGVpZ2h0OjAscmFuazpvLGJvcmRlclR5cGU6dH0scz1pW3RdW28tMV0sbD1Fc3IuYWRkRHVtbXlOb2RlKGUsImJvcmRlciIsYSxyKTtpW3RdW29dPWwsZS5zZXRQYXJlbnQobCxuKSxzJiZlLnNldEVkZ2UocyxsLHt3ZWlnaHQ6MX0pfX0pO3ZhciAkYWU9SCgoclFuLFhhZSk9PnsidXNlIHN0cmljdCI7dmFyIFVmPVVuKCk7WGFlLmV4cG9ydHM9e2FkanVzdDpDc3IsdW5kbzpBc3J9O2Z1bmN0aW9uIENzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImxyInx8dD09PSJybCIpJiZqYWUoZSl9ZnVuY3Rpb24gQXNyKGUpe3ZhciB0PWUuZ3JhcGgoKS5yYW5rZGlyLnRvTG93ZXJDYXNlKCk7KHQ9PT0iYnQifHx0PT09InJsIikmJlBzcihlKSwodD09PSJsciJ8fHQ9PT0icmwiKSYmKElzcihlKSxqYWUoZSkpfWZ1bmN0aW9uIGphZShlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtZYWUoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe1lhZShlLmVkZ2UodCkpfSl9ZnVuY3Rpb24gWWFlKGUpe3ZhciB0PWUud2lkdGg7ZS53aWR0aD1lLmhlaWdodCxlLmhlaWdodD10fWZ1bmN0aW9uIFBzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtMbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLExsdCksVWYuaGFzKHIsInkiKSYmTGx0KHIpfSl9ZnVuY3Rpb24gTGx0KGUpe2UueT0tZS55fWZ1bmN0aW9uIElzcihlKXtVZi5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtrbHQoZS5ub2RlKHQpKX0pLFVmLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtVZi5mb3JFYWNoKHIucG9pbnRzLGtsdCksVWYuaGFzKHIsIngiKSYma2x0KHIpfSl9ZnVuY3Rpb24ga2x0KGUpe3ZhciB0PWUueDtlLng9ZS55LGUueT10fX0pO3ZhciBaYWU9SCgoblFuLEthZSk9PnsidXNlIHN0cmljdCI7dmFyIGtkPVVuKCk7S2FlLmV4cG9ydHM9THNyO2Z1bmN0aW9uIExzcihlKXt2YXIgdD17fSxyPWtkLmZpbHRlcihlLm5vZGVzKCksZnVuY3Rpb24ocyl7cmV0dXJuIWUuY2hpbGRyZW4ocykubGVuZ3RofSksbj1rZC5tYXgoa2QubWFwKHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSkpLGk9a2QubWFwKGtkLnJhbmdlKG4rMSksZnVuY3Rpb24oKXtyZXR1cm5bXX0pO2Z1bmN0aW9uIG8ocyl7aWYoIWtkLmhhcyh0LHMpKXt0W3NdPSEwO3ZhciBsPWUubm9kZShzKTtpW2wucmFua10ucHVzaChzKSxrZC5mb3JFYWNoKGUuc3VjY2Vzc29ycyhzKSxvKX19dmFyIGE9a2Quc29ydEJ5KHIsZnVuY3Rpb24ocyl7cmV0dXJuIGUubm9kZShzKS5yYW5rfSk7cmV0dXJuIGtkLmZvckVhY2goYSxvKSxpfX0pO3ZhciBRYWU9SCgoaVFuLEphZSk9PnsidXNlIHN0cmljdCI7dmFyIGgwPVVuKCk7SmFlLmV4cG9ydHM9a3NyO2Z1bmN0aW9uIGtzcihlLHQpe2Zvcih2YXIgcj0wLG49MTtuPHQubGVuZ3RoOysrbilyKz1Sc3IoZSx0W24tMV0sdFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUnNyKGUsdCxyKXtmb3IodmFyIG49aDAuemlwT2JqZWN0KHIsaDAubWFwKHIsZnVuY3Rpb24oYyx1KXtyZXR1cm4gdX0pKSxpPWgwLmZsYXR0ZW4oaDAubWFwKHQsZnVuY3Rpb24oYyl7cmV0dXJuIGgwLnNvcnRCeShoMC5tYXAoZS5vdXRFZGdlcyhjKSxmdW5jdGlvbih1KXtyZXR1cm57cG9zOm5bdS53XSx3ZWlnaHQ6ZS5lZGdlKHUpLndlaWdodH19KSwicG9zIil9KSwhMCksbz0xO288ci5sZW5ndGg7KW88PD0xO3ZhciBhPTIqby0xO28tPTE7dmFyIHM9aDAubWFwKG5ldyBBcnJheShhKSxmdW5jdGlvbigpe3JldHVybiAwfSksbD0wO3JldHVybiBoMC5mb3JFYWNoKGkuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgdT1jLnBvcytvO3NbdV0rPWMud2VpZ2h0O2Zvcih2YXIgaD0wO3U+MDspdSUyJiYoaCs9c1t1KzFdKSx1PXUtMT4+MSxzW3VdKz1jLndlaWdodDtsKz1jLndlaWdodCpofSkpLGx9fSk7dmFyIHJzZT1IKChvUW4sZXNlKT0+e3ZhciB0c2U9VW4oKTtlc2UuZXhwb3J0cz1Oc3I7ZnVuY3Rpb24gTnNyKGUsdCl7cmV0dXJuIHRzZS5tYXAodCxmdW5jdGlvbihyKXt2YXIgbj1lLmluRWRnZXMocik7aWYobi5sZW5ndGgpe3ZhciBpPXRzZS5yZWR1Y2UobixmdW5jdGlvbihvLGEpe3ZhciBzPWUuZWRnZShhKSxsPWUubm9kZShhLnYpO3JldHVybntzdW06by5zdW0rcy53ZWlnaHQqbC5vcmRlcix3ZWlnaHQ6by53ZWlnaHQrcy53ZWlnaHR9fSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djpyLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1lbHNlIHJldHVybnt2OnJ9fSl9fSk7dmFyIGlzZT1IKChhUW4sbnNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVGw9VW4oKTtuc2UuZXhwb3J0cz1Ec3I7ZnVuY3Rpb24gRHNyKGUsdCl7dmFyIHI9e307VGwuZm9yRWFjaChlLGZ1bmN0aW9uKGksbyl7dmFyIGE9cltpLnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbaS52XSxpOm99O1RsLmlzVW5kZWZpbmVkKGkuYmFyeWNlbnRlcil8fChhLmJhcnljZW50ZXI9aS5iYXJ5Y2VudGVyLGEud2VpZ2h0PWkud2VpZ2h0KX0pLFRsLmZvckVhY2godC5lZGdlcygpLGZ1bmN0aW9uKGkpe3ZhciBvPXJbaS52XSxhPXJbaS53XTshVGwuaXNVbmRlZmluZWQobykmJiFUbC5pc1VuZGVmaW5lZChhKSYmKGEuaW5kZWdyZWUrKyxvLm91dC5wdXNoKHJbaS53XSkpfSk7dmFyIG49VGwuZmlsdGVyKHIsZnVuY3Rpb24oaSl7cmV0dXJuIWkuaW5kZWdyZWV9KTtyZXR1cm4gT3NyKG4pfWZ1bmN0aW9uIE9zcihlKXt2YXIgdD1bXTtmdW5jdGlvbiByKG8pe3JldHVybiBmdW5jdGlvbihhKXthLm1lcmdlZHx8KFRsLmlzVW5kZWZpbmVkKGEuYmFyeWNlbnRlcil8fFRsLmlzVW5kZWZpbmVkKG8uYmFyeWNlbnRlcil8fGEuYmFyeWNlbnRlcj49by5iYXJ5Y2VudGVyKSYmenNyKG8sYSl9fWZ1bmN0aW9uIG4obyl7cmV0dXJuIGZ1bmN0aW9uKGEpe2EuaW4ucHVzaChvKSwtLWEuaW5kZWdyZWU9PT0wJiZlLnB1c2goYSl9fWZvcig7ZS5sZW5ndGg7KXt2YXIgaT1lLnBvcCgpO3QucHVzaChpKSxUbC5mb3JFYWNoKGkuaW4ucmV2ZXJzZSgpLHIoaSkpLFRsLmZvckVhY2goaS5vdXQsbihpKSl9cmV0dXJuIFRsLm1hcChUbC5maWx0ZXIodCxmdW5jdGlvbihvKXtyZXR1cm4hby5tZXJnZWR9KSxmdW5jdGlvbihvKXtyZXR1cm4gVGwucGljayhvLFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pfWZ1bmN0aW9uIHpzcihlLHQpe3ZhciByPTAsbj0wO2Uud2VpZ2h0JiYocis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LG4rPWUud2VpZ2h0KSx0LndlaWdodCYmKHIrPXQuYmFyeWNlbnRlcip0LndlaWdodCxuKz10LndlaWdodCksZS52cz10LnZzLmNvbmNhdChlLnZzKSxlLmJhcnljZW50ZXI9ci9uLGUud2VpZ2h0PW4sZS5pPU1hdGgubWluKHQuaSxlLmkpLHQubWVyZ2VkPSEwfX0pO3ZhciBzc2U9SCgoc1FuLGFzZSk9Pnt2YXIgJDQ9VW4oKSxGc3I9bnMoKTthc2UuZXhwb3J0cz1Cc3I7ZnVuY3Rpb24gQnNyKGUsdCl7dmFyIHI9RnNyLnBhcnRpdGlvbihlLGZ1bmN0aW9uKHUpe3JldHVybiAkNC5oYXModSwiYmFyeWNlbnRlciIpfSksbj1yLmxocyxpPSQ0LnNvcnRCeShyLnJocyxmdW5jdGlvbih1KXtyZXR1cm4tdS5pfSksbz1bXSxhPTAscz0wLGw9MDtuLnNvcnQoSHNyKCEhdCkpLGw9b3NlKG8saSxsKSwkNC5mb3JFYWNoKG4sZnVuY3Rpb24odSl7bCs9dS52cy5sZW5ndGgsby5wdXNoKHUudnMpLGErPXUuYmFyeWNlbnRlcip1LndlaWdodCxzKz11LndlaWdodCxsPW9zZShvLGksbCl9KTt2YXIgYz17dnM6JDQuZmxhdHRlbihvLCEwKX07cmV0dXJuIHMmJihjLmJhcnljZW50ZXI9YS9zLGMud2VpZ2h0PXMpLGN9ZnVuY3Rpb24gb3NlKGUsdCxyKXtmb3IodmFyIG47dC5sZW5ndGgmJihuPSQ0Lmxhc3QodCkpLmk8PXI7KXQucG9wKCksZS5wdXNoKG4udnMpLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBIc3IoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuYmFyeWNlbnRlcjxyLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPnIuYmFyeWNlbnRlcj8xOmU/ci5pLXQuaTp0Lmktci5pfX19KTt2YXIgdXNlPUgoKGxRbixjc2UpPT57dmFyIGYwPVVuKCksVnNyPXJzZSgpLFVzcj1pc2UoKSxxc3I9c3NlKCk7Y3NlLmV4cG9ydHM9bHNlO2Z1bmN0aW9uIGxzZShlLHQscixuKXt2YXIgaT1lLmNoaWxkcmVuKHQpLG89ZS5ub2RlKHQpLGE9bz9vLmJvcmRlckxlZnQ6dm9pZCAwLHM9bz9vLmJvcmRlclJpZ2h0OnZvaWQgMCxsPXt9O2EmJihpPWYwLmZpbHRlcihpLGZ1bmN0aW9uKGQpe3JldHVybiBkIT09YSYmZCE9PXN9KSk7dmFyIGM9VnNyKGUsaSk7ZjAuZm9yRWFjaChjLGZ1bmN0aW9uKGQpe2lmKGUuY2hpbGRyZW4oZC52KS5sZW5ndGgpe3ZhciBnPWxzZShlLGQudixyLG4pO2xbZC52XT1nLGYwLmhhcyhnLCJiYXJ5Y2VudGVyIikmJldzcihkLGcpfX0pO3ZhciB1PVVzcihjLHIpO0dzcih1LGwpO3ZhciBoPXFzcih1LG4pO2lmKGEmJihoLnZzPWYwLmZsYXR0ZW4oW2EsaC52cyxzXSwhMCksZS5wcmVkZWNlc3NvcnMoYSkubGVuZ3RoKSl7dmFyIGY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGEpWzBdKSxwPWUubm9kZShlLnByZWRlY2Vzc29ycyhzKVswXSk7ZjAuaGFzKGgsImJhcnljZW50ZXIiKXx8KGguYmFyeWNlbnRlcj0wLGgud2VpZ2h0PTApLGguYmFyeWNlbnRlcj0oaC5iYXJ5Y2VudGVyKmgud2VpZ2h0K2Yub3JkZXIrcC5vcmRlcikvKGgud2VpZ2h0KzIpLGgud2VpZ2h0Kz0yfXJldHVybiBofWZ1bmN0aW9uIEdzcihlLHQpe2YwLmZvckVhY2goZSxmdW5jdGlvbihyKXtyLnZzPWYwLmZsYXR0ZW4oci52cy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHRbbl0/dFtuXS52czpufSksITApfSl9ZnVuY3Rpb24gV3NyKGUsdCl7ZjAuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKT8oZS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixlLndlaWdodD10LndlaWdodCk6KGUuYmFyeWNlbnRlcj0oZS5iYXJ5Y2VudGVyKmUud2VpZ2h0K3QuYmFyeWNlbnRlcip0LndlaWdodCkvKGUud2VpZ2h0K3Qud2VpZ2h0KSxlLndlaWdodCs9dC53ZWlnaHQpfX0pO3ZhciBmc2U9SCgoY1FuLGhzZSk9Pnt2YXIgSzQ9VW4oKSxZc3I9VWMoKS5HcmFwaDtoc2UuZXhwb3J0cz1qc3I7ZnVuY3Rpb24ganNyKGUsdCxyKXt2YXIgbj1Yc3IoZSksaT1uZXcgWXNyKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290Om59KS5zZXREZWZhdWx0Tm9kZUxhYmVsKGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobyl9KTtyZXR1cm4gSzQuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7dmFyIGE9ZS5ub2RlKG8pLHM9ZS5wYXJlbnQobyk7KGEucmFuaz09PXR8fGEubWluUmFuazw9dCYmdDw9YS5tYXhSYW5rKSYmKGkuc2V0Tm9kZShvKSxpLnNldFBhcmVudChvLHN8fG4pLEs0LmZvckVhY2goZVtyXShvKSxmdW5jdGlvbihsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLmVkZ2UoYyxvKSxoPUs0LmlzVW5kZWZpbmVkKHUpPzA6dS53ZWlnaHQ7aS5zZXRFZGdlKGMsbyx7d2VpZ2h0OmUuZWRnZShsKS53ZWlnaHQraH0pfSksSzQuaGFzKGEsIm1pblJhbmsiKSYmaS5zZXROb2RlKG8se2JvcmRlckxlZnQ6YS5ib3JkZXJMZWZ0W3RdLGJvcmRlclJpZ2h0OmEuYm9yZGVyUmlnaHRbdF19KSl9KSxpfWZ1bmN0aW9uIFhzcihlKXtmb3IodmFyIHQ7ZS5oYXNOb2RlKHQ9SzQudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIHR9fSk7dmFyIGRzZT1IKCh1UW4scHNlKT0+e3ZhciAkc3I9VW4oKTtwc2UuZXhwb3J0cz1Lc3I7ZnVuY3Rpb24gS3NyKGUsdCxyKXt2YXIgbj17fSxpOyRzci5mb3JFYWNoKHIsZnVuY3Rpb24obyl7Zm9yKHZhciBhPWUucGFyZW50KG8pLHMsbDthOyl7aWYocz1lLnBhcmVudChhKSxzPyhsPW5bc10sbltzXT1hKToobD1pLGk9YSksbCYmbCE9PWEpe3Quc2V0RWRnZShsLGEpO3JldHVybn1hPXN9fSl9fSk7dmFyIHZzZT1IKChoUW4seXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcDA9VW4oKSxac3I9WmFlKCksSnNyPVFhZSgpLFFzcj11c2UoKSx0bHI9ZnNlKCksZWxyPWRzZSgpLHJscj1VYygpLkdyYXBoLG1zZT1ucygpO3lzZS5leHBvcnRzPW5scjtmdW5jdGlvbiBubHIoZSl7dmFyIHQ9bXNlLm1heFJhbmsoZSkscj1nc2UoZSxwMC5yYW5nZSgxLHQrMSksImluRWRnZXMiKSxuPWdzZShlLHAwLnJhbmdlKHQtMSwtMSwtMSksIm91dEVkZ2VzIiksaT1ac3IoZSk7X3NlKGUsaSk7Zm9yKHZhciBvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhLHM9MCxsPTA7bDw0OysrcywrK2wpe2lscihzJTI/cjpuLHMlND49MiksaT1tc2UuYnVpbGRMYXllck1hdHJpeChlKTt2YXIgYz1Kc3IoZSxpKTtjPG8mJihsPTAsYT1wMC5jbG9uZURlZXAoaSksbz1jKX1fc2UoZSxhKX1mdW5jdGlvbiBnc2UoZSx0LHIpe3JldHVybiBwMC5tYXAodCxmdW5jdGlvbihuKXtyZXR1cm4gdGxyKGUsbixyKX0pfWZ1bmN0aW9uIGlscihlLHQpe3ZhciByPW5ldyBybHI7cDAuZm9yRWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBpPW4uZ3JhcGgoKS5yb290LG89UXNyKG4saSxyLHQpO3AwLmZvckVhY2goby52cyxmdW5jdGlvbihhLHMpe24ubm9kZShhKS5vcmRlcj1zfSksZWxyKG4scixvLnZzKX0pfWZ1bmN0aW9uIF9zZShlLHQpe3AwLmZvckVhY2godCxmdW5jdGlvbihyKXtwMC5mb3JFYWNoKHIsZnVuY3Rpb24obixpKXtlLm5vZGUobikub3JkZXI9aX0pfSl9fSk7dmFyIFBzZT1IKChmUW4sQXNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWGU9VW4oKSxvbHI9VWMoKS5HcmFwaCxhbHI9bnMoKTtBc2UuZXhwb3J0cz17cG9zaXRpb25YOmNscixmaW5kVHlwZTFDb25mbGljdHM6eHNlLGZpbmRUeXBlMkNvbmZsaWN0czpic2UsYWRkQ29uZmxpY3Q6Umx0LGhhc0NvbmZsaWN0OndzZSx2ZXJ0aWNhbEFsaWdubWVudDpTc2UsaG9yaXpvbnRhbENvbXBhY3Rpb246TXNlLGFsaWduQ29vcmRpbmF0ZXM6VHNlLGZpbmRTbWFsbGVzdFdpZHRoQWxpZ25tZW50OkVzZSxiYWxhbmNlOkNzZX07ZnVuY3Rpb24geHNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihpLG8pe3ZhciBhPTAscz0wLGw9aS5sZW5ndGgsYz1YZS5sYXN0KG8pO3JldHVybiBYZS5mb3JFYWNoKG8sZnVuY3Rpb24odSxoKXt2YXIgZj1zbHIoZSx1KSxwPWY/ZS5ub2RlKGYpLm9yZGVyOmw7KGZ8fHU9PT1jKSYmKFhlLmZvckVhY2goby5zbGljZShzLGgrMSksZnVuY3Rpb24oZCl7WGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyhkKSxmdW5jdGlvbihnKXt2YXIgXz1lLm5vZGUoZykseT1fLm9yZGVyOyh5PGF8fHA8eSkmJiEoXy5kdW1teSYmZS5ub2RlKGQpLmR1bW15KSYmUmx0KHIsZyxkKX0pfSkscz1oKzEsYT1wKX0pLG99cmV0dXJuIFhlLnJlZHVjZSh0LG4pLHJ9ZnVuY3Rpb24gYnNlKGUsdCl7dmFyIHI9e307ZnVuY3Rpb24gbihvLGEscyxsLGMpe3ZhciB1O1hlLmZvckVhY2goWGUucmFuZ2UoYSxzKSxmdW5jdGlvbihoKXt1PW9baF0sZS5ub2RlKHUpLmR1bW15JiZYZS5mb3JFYWNoKGUucHJlZGVjZXNzb3JzKHUpLGZ1bmN0aW9uKGYpe3ZhciBwPWUubm9kZShmKTtwLmR1bW15JiYocC5vcmRlcjxsfHxwLm9yZGVyPmMpJiZSbHQocixmLHUpfSl9KX1mdW5jdGlvbiBpKG8sYSl7dmFyIHM9LTEsbCxjPTA7cmV0dXJuIFhlLmZvckVhY2goYSxmdW5jdGlvbih1LGgpe2lmKGUubm9kZSh1KS5kdW1teT09PSJib3JkZXIiKXt2YXIgZj1lLnByZWRlY2Vzc29ycyh1KTtmLmxlbmd0aCYmKGw9ZS5ub2RlKGZbMF0pLm9yZGVyLG4oYSxjLGgscyxsKSxjPWgscz1sKX1uKGEsYyxhLmxlbmd0aCxsLG8ubGVuZ3RoKX0pLGF9cmV0dXJuIFhlLnJlZHVjZSh0LGkpLHJ9ZnVuY3Rpb24gc2xyKGUsdCl7aWYoZS5ub2RlKHQpLmR1bW15KXJldHVybiBYZS5maW5kKGUucHJlZGVjZXNzb3JzKHQpLGZ1bmN0aW9uKHIpe3JldHVybiBlLm5vZGUocikuZHVtbXl9KX1mdW5jdGlvbiBSbHQoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXZhciBpPWVbdF07aXx8KGVbdF09aT17fSksaVtyXT0hMH1mdW5jdGlvbiB3c2UoZSx0LHIpe2lmKHQ+cil7dmFyIG49dDt0PXIscj1ufXJldHVybiBYZS5oYXMoZVt0XSxyKX1mdW5jdGlvbiBTc2UoZSx0LHIsbil7dmFyIGk9e30sbz17fSxhPXt9O3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGwsYyl7aVtsXT1sLG9bbF09bCxhW2xdPWN9KX0pLFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbD0tMTtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9bihjKTtpZih1Lmxlbmd0aCl7dT1YZS5zb3J0QnkodSxmdW5jdGlvbihnKXtyZXR1cm4gYVtnXX0pO2Zvcih2YXIgaD0odS5sZW5ndGgtMSkvMixmPU1hdGguZmxvb3IoaCkscD1NYXRoLmNlaWwoaCk7Zjw9cDsrK2Ype3ZhciBkPXVbZl07b1tjXT09PWMmJmw8YVtkXSYmIXdzZShyLGMsZCkmJihvW2RdPWMsb1tjXT1pW2NdPWlbZF0sbD1hW2RdKX19fSl9KSx7cm9vdDppLGFsaWduOm99fWZ1bmN0aW9uIE1zZShlLHQscixuLGkpe3ZhciBvPXt9LGE9bGxyKGUsdCxyLGkpLHM9aT8iYm9yZGVyTGVmdCI6ImJvcmRlclJpZ2h0IjtmdW5jdGlvbiBsKGgsZil7Zm9yKHZhciBwPWEubm9kZXMoKSxkPXAucG9wKCksZz17fTtkOylnW2RdP2goZCk6KGdbZF09ITAscC5wdXNoKGQpLHA9cC5jb25jYXQoZihkKSkpLGQ9cC5wb3AoKX1mdW5jdGlvbiBjKGgpe29baF09YS5pbkVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihmLHApe3JldHVybiBNYXRoLm1heChmLG9bcC52XSthLmVkZ2UocCkpfSwwKX1mdW5jdGlvbiB1KGgpe3ZhciBmPWEub3V0RWRnZXMoaCkucmVkdWNlKGZ1bmN0aW9uKGQsZyl7cmV0dXJuIE1hdGgubWluKGQsb1tnLnddLWEuZWRnZShnKSl9LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkscD1lLm5vZGUoaCk7ZiE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmcC5ib3JkZXJUeXBlIT09cyYmKG9baF09TWF0aC5tYXgob1toXSxmKSl9cmV0dXJuIGwoYyxhLnByZWRlY2Vzc29ycy5iaW5kKGEpKSxsKHUsYS5zdWNjZXNzb3JzLmJpbmQoYSkpLFhlLmZvckVhY2gobixmdW5jdGlvbihoKXtvW2hdPW9bcltoXV19KSxvfWZ1bmN0aW9uIGxscihlLHQscixuKXt2YXIgaT1uZXcgb2xyLG89ZS5ncmFwaCgpLGE9dWxyKG8ubm9kZXNlcCxvLmVkZ2VzZXAsbik7cmV0dXJuIFhlLmZvckVhY2godCxmdW5jdGlvbihzKXt2YXIgbDtYZS5mb3JFYWNoKHMsZnVuY3Rpb24oYyl7dmFyIHU9cltjXTtpZihpLnNldE5vZGUodSksbCl7dmFyIGg9cltsXSxmPWkuZWRnZShoLHUpO2kuc2V0RWRnZShoLHUsTWF0aC5tYXgoYShlLGMsbCksZnx8MCkpfWw9Y30pfSksaX1mdW5jdGlvbiBFc2UoZSx0KXtyZXR1cm4gWGUubWluQnkoWGUudmFsdWVzKHQpLGZ1bmN0aW9uKHIpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gWGUuZm9ySW4ocixmdW5jdGlvbihvLGEpe3ZhciBzPWhscihlLGEpLzI7bj1NYXRoLm1heChvK3MsbiksaT1NYXRoLm1pbihvLXMsaSl9KSxuLWl9KX1mdW5jdGlvbiBUc2UoZSx0KXt2YXIgcj1YZS52YWx1ZXModCksbj1YZS5taW4ociksaT1YZS5tYXgocik7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24obyl7WGUuZm9yRWFjaChbImwiLCJyIl0sZnVuY3Rpb24oYSl7dmFyIHM9bythLGw9ZVtzXSxjO2lmKGwhPT10KXt2YXIgdT1YZS52YWx1ZXMobCk7Yz1hPT09ImwiP24tWGUubWluKHUpOmktWGUubWF4KHUpLGMmJihlW3NdPVhlLm1hcFZhbHVlcyhsLGZ1bmN0aW9uKGgpe3JldHVybiBoK2N9KSl9fSl9KX1mdW5jdGlvbiBDc2UoZSx0KXtyZXR1cm4gWGUubWFwVmFsdWVzKGUudWwsZnVuY3Rpb24ocixuKXtpZih0KXJldHVybiBlW3QudG9Mb3dlckNhc2UoKV1bbl07dmFyIGk9WGUuc29ydEJ5KFhlLm1hcChlLG4pKTtyZXR1cm4oaVsxXStpWzJdKS8yfSl9ZnVuY3Rpb24gY2xyKGUpe3ZhciB0PWFsci5idWlsZExheWVyTWF0cml4KGUpLHI9WGUubWVyZ2UoeHNlKGUsdCksYnNlKGUsdCkpLG49e30saTtYZS5mb3JFYWNoKFsidSIsImQiXSxmdW5jdGlvbihhKXtpPWE9PT0idSI/dDpYZS52YWx1ZXModCkucmV2ZXJzZSgpLFhlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKHMpe3M9PT0iciImJihpPVhlLm1hcChpLGZ1bmN0aW9uKGgpe3JldHVybiBYZS52YWx1ZXMoaCkucmV2ZXJzZSgpfSkpO3ZhciBsPShhPT09InUiP2UucHJlZGVjZXNzb3JzOmUuc3VjY2Vzc29ycykuYmluZChlKSxjPVNzZShlLGkscixsKSx1PU1zZShlLGksYy5yb290LGMuYWxpZ24scz09PSJyIik7cz09PSJyIiYmKHU9WGUubWFwVmFsdWVzKHUsZnVuY3Rpb24oaCl7cmV0dXJuLWh9KSksblthK3NdPXV9KX0pO3ZhciBvPUVzZShlLG4pO3JldHVybiBUc2UobixvKSxDc2UobixlLmdyYXBoKCkuYWxpZ24pfWZ1bmN0aW9uIHVscihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt2YXIgYT1uLm5vZGUoaSkscz1uLm5vZGUobyksbD0wLGM7aWYobCs9YS53aWR0aC8yLFhlLmhhcyhhLCJsYWJlbHBvcyIpKXN3aXRjaChhLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz0tYS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz1hLndpZHRoLzI7YnJlYWt9aWYoYyYmKGwrPXI/YzotYyksYz0wLGwrPShhLmR1bW15P3Q6ZSkvMixsKz0ocy5kdW1teT90OmUpLzIsbCs9cy53aWR0aC8yLFhlLmhhcyhzLCJsYWJlbHBvcyIpKXN3aXRjaChzLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6Yz1zLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpjPS1zLndpZHRoLzI7YnJlYWt9cmV0dXJuIGMmJihsKz1yP2M6LWMpLGM9MCxsfX1mdW5jdGlvbiBobHIoZSx0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofX0pO3ZhciBrc2U9SCgocFFuLExzZSk9PnsidXNlIHN0cmljdCI7dmFyIFo0PVVuKCksSXNlPW5zKCksZmxyPVBzZSgpLnBvc2l0aW9uWDtMc2UuZXhwb3J0cz1wbHI7ZnVuY3Rpb24gcGxyKGUpe2U9SXNlLmFzTm9uQ29tcG91bmRHcmFwaChlKSxkbHIoZSksWjQuZm9yRWFjaChmbHIoZSksZnVuY3Rpb24odCxyKXtlLm5vZGUocikueD10fSl9ZnVuY3Rpb24gZGxyKGUpe3ZhciB0PUlzZS5idWlsZExheWVyTWF0cml4KGUpLHI9ZS5ncmFwaCgpLnJhbmtzZXAsbj0wO1o0LmZvckVhY2godCxmdW5jdGlvbihpKXt2YXIgbz1aNC5tYXgoWjQubWFwKGksZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZShhKS5oZWlnaHR9KSk7WjQuZm9yRWFjaChpLGZ1bmN0aW9uKGEpe2Uubm9kZShhKS55PW4rby8yfSksbis9bytyfSl9fSk7dmFyIEZzZT1IKChkUW4senNlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaXI9VW4oKSxSc2U9Z2FlKCksTnNlPVNhZSgpLG1scj16YWUoKSxnbHI9bnMoKS5ub3JtYWxpemVSYW5rcyxfbHI9QmFlKCkseWxyPW5zKCkucmVtb3ZlRW1wdHlSYW5rcyxEc2U9VWFlKCksdmxyPVdhZSgpLE9zZT0kYWUoKSx4bHI9dnNlKCksYmxyPWtzZSgpLGQwPW5zKCksd2xyPVVjKCkuR3JhcGg7enNlLmV4cG9ydHM9U2xyO2Z1bmN0aW9uIFNscihlLHQpe3ZhciByPXQmJnQuZGVidWdUaW1pbmc/ZDAudGltZTpkMC5ub3RpbWU7cigibGF5b3V0IixmdW5jdGlvbigpe3ZhciBuPXIoIiAgYnVpbGRMYXlvdXRHcmFwaCIsZnVuY3Rpb24oKXtyZXR1cm4gTmxyKGUpfSk7cigiICBydW5MYXlvdXQiLGZ1bmN0aW9uKCl7TWxyKG4scil9KSxyKCIgIHVwZGF0ZUlucHV0R3JhcGgiLGZ1bmN0aW9uKCl7RWxyKGUsbil9KX0pfWZ1bmN0aW9uIE1scihlLHQpe3QoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIixmdW5jdGlvbigpe0RscihlKX0pLHQoIiAgICByZW1vdmVTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIGFjeWNsaWMiLGZ1bmN0aW9uKCl7UnNlLnJ1bihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGgucnVuIixmdW5jdGlvbigpe0RzZS5ydW4oZSl9KSx0KCIgICAgcmFuayIsZnVuY3Rpb24oKXttbHIoZDAuYXNOb25Db21wb3VuZEdyYXBoKGUpKX0pLHQoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIixmdW5jdGlvbigpe09scihlKX0pLHQoIiAgICByZW1vdmVFbXB0eVJhbmtzIixmdW5jdGlvbigpe3lscihlKX0pLHQoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsZnVuY3Rpb24oKXtEc2UuY2xlYW51cChlKX0pLHQoIiAgICBub3JtYWxpemVSYW5rcyIsZnVuY3Rpb24oKXtnbHIoZSl9KSx0KCIgICAgYXNzaWduUmFua01pbk1heCIsZnVuY3Rpb24oKXt6bHIoZSl9KSx0KCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtGbHIoZSl9KSx0KCIgICAgbm9ybWFsaXplLnJ1biIsZnVuY3Rpb24oKXtOc2UucnVuKGUpfSksdCgiICAgIHBhcmVudER1bW15Q2hhaW5zIixmdW5jdGlvbigpe19scihlKX0pLHQoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsZnVuY3Rpb24oKXt2bHIoZSl9KSx0KCIgICAgb3JkZXIiLGZ1bmN0aW9uKCl7eGxyKGUpfSksdCgiICAgIGluc2VydFNlbGZFZGdlcyIsZnVuY3Rpb24oKXtXbHIoZSl9KSx0KCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UuYWRqdXN0KGUpfSksdCgiICAgIHBvc2l0aW9uIixmdW5jdGlvbigpe2JscihlKX0pLHQoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsZnVuY3Rpb24oKXtZbHIoZSl9KSx0KCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLGZ1bmN0aW9uKCl7cWxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS51bmRvIixmdW5jdGlvbigpe05zZS51bmRvKGUpfSksdCgiICAgIGZpeHVwRWRnZUxhYmVsQ29vcmRzIixmdW5jdGlvbigpe1ZscihlKX0pLHQoIiAgICB1bmRvQ29vcmRpbmF0ZVN5c3RlbSIsZnVuY3Rpb24oKXtPc2UudW5kbyhlKX0pLHQoIiAgICB0cmFuc2xhdGVHcmFwaCIsZnVuY3Rpb24oKXtCbHIoZSl9KSx0KCIgICAgYXNzaWduTm9kZUludGVyc2VjdHMiLGZ1bmN0aW9uKCl7SGxyKGUpfSksdCgiICAgIHJldmVyc2VQb2ludHMiLGZ1bmN0aW9uKCl7VWxyKGUpfSksdCgiICAgIGFjeWNsaWMudW5kbyIsZnVuY3Rpb24oKXtSc2UudW5kbyhlKX0pfWZ1bmN0aW9uIEVscihlLHQpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPXQubm9kZShyKTtuJiYobi54PWkueCxuLnk9aS55LHQuY2hpbGRyZW4ocikubGVuZ3RoJiYobi53aWR0aD1pLndpZHRoLG4uaGVpZ2h0PWkuaGVpZ2h0KSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2UociksaT10LmVkZ2Uocik7bi5wb2ludHM9aS5wb2ludHMsaXIuaGFzKGksIngiKSYmKG4ueD1pLngsbi55PWkueSl9KSxlLmdyYXBoKCkud2lkdGg9dC5ncmFwaCgpLndpZHRoLGUuZ3JhcGgoKS5oZWlnaHQ9dC5ncmFwaCgpLmhlaWdodH12YXIgVGxyPVsibm9kZXNlcCIsImVkZ2VzZXAiLCJyYW5rc2VwIiwibWFyZ2lueCIsIm1hcmdpbnkiXSxDbHI9e3JhbmtzZXA6NTAsZWRnZXNlcDoyMCxub2Rlc2VwOjUwLHJhbmtkaXI6InRiIn0sQWxyPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0sUGxyPVsid2lkdGgiLCJoZWlnaHQiXSxJbHI9e3dpZHRoOjAsaGVpZ2h0OjB9LExscj1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSxrbHI9e21pbmxlbjoxLHdlaWdodDoxLHdpZHRoOjAsaGVpZ2h0OjAsbGFiZWxvZmZzZXQ6MTAsbGFiZWxwb3M6InIifSxSbHI9WyJsYWJlbHBvcyJdO2Z1bmN0aW9uIE5scihlKXt2YXIgdD1uZXcgd2xyKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkscj1EbHQoZS5ncmFwaCgpKTtyZXR1cm4gdC5zZXRHcmFwaChpci5tZXJnZSh7fSxDbHIsTmx0KHIsVGxyKSxpci5waWNrKHIsQWxyKSkpLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3ZhciBpPURsdChlLm5vZGUobikpO3Quc2V0Tm9kZShuLGlyLmRlZmF1bHRzKE5sdChpLFBsciksSWxyKSksdC5zZXRQYXJlbnQobixlLnBhcmVudChuKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1EbHQoZS5lZGdlKG4pKTt0LnNldEVkZ2Uobixpci5tZXJnZSh7fSxrbHIsTmx0KGksTGxyKSxpci5waWNrKGksUmxyKSkpfSksdH1mdW5jdGlvbiBEbHIoZSl7dmFyIHQ9ZS5ncmFwaCgpO3QucmFua3NlcC89Mixpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLmVkZ2Uocik7bi5taW5sZW4qPTIsbi5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpIT09ImMiJiYodC5yYW5rZGlyPT09IlRCInx8dC5yYW5rZGlyPT09IkJUIj9uLndpZHRoKz1uLmxhYmVsb2Zmc2V0Om4uaGVpZ2h0Kz1uLmxhYmVsb2Zmc2V0KX0pfWZ1bmN0aW9uIE9scihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci53aWR0aCYmci5oZWlnaHQpe3ZhciBuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbz17cmFuazooaS5yYW5rLW4ucmFuaykvMituLnJhbmssZTp0fTtkMC5hZGREdW1teU5vZGUoZSwiZWRnZS1wcm94eSIsbywiX2VwIil9fSl9ZnVuY3Rpb24gemxyKGUpe3ZhciB0PTA7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO24uYm9yZGVyVG9wJiYobi5taW5SYW5rPWUubm9kZShuLmJvcmRlclRvcCkucmFuayxuLm1heFJhbms9ZS5ub2RlKG4uYm9yZGVyQm90dG9tKS5yYW5rLHQ9aXIubWF4KHQsbi5tYXhSYW5rKSl9KSxlLmdyYXBoKCkubWF4UmFuaz10fWZ1bmN0aW9uIEZscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7ci5kdW1teT09PSJlZGdlLXByb3h5IiYmKGUuZWRnZShyLmUpLmxhYmVsUmFuaz1yLnJhbmssZS5yZW1vdmVOb2RlKHQpKX0pfWZ1bmN0aW9uIEJscihlKXt2YXIgdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscj0wLG49TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGk9MCxvPWUuZ3JhcGgoKSxhPW8ubWFyZ2lueHx8MCxzPW8ubWFyZ2lueXx8MDtmdW5jdGlvbiBsKGMpe3ZhciB1PWMueCxoPWMueSxmPWMud2lkdGgscD1jLmhlaWdodDt0PU1hdGgubWluKHQsdS1mLzIpLHI9TWF0aC5tYXgocix1K2YvMiksbj1NYXRoLm1pbihuLGgtcC8yKSxpPU1hdGgubWF4KGksaCtwLzIpfWlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe2woZS5ub2RlKGMpKX0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5oYXModSwieCIpJiZsKHUpfSksdC09YSxuLT1zLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUubm9kZShjKTt1LngtPXQsdS55LT1ufSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYyl7dmFyIHU9ZS5lZGdlKGMpO2lyLmZvckVhY2godS5wb2ludHMsZnVuY3Rpb24oaCl7aC54LT10LGgueS09bn0pLGlyLmhhcyh1LCJ4IikmJih1LngtPXQpLGlyLmhhcyh1LCJ5IikmJih1LnktPW4pfSksby53aWR0aD1yLXQrYSxvLmhlaWdodD1pLW4rc31mdW5jdGlvbiBIbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpLG49ZS5ub2RlKHQudiksaT1lLm5vZGUodC53KSxvLGE7ci5wb2ludHM/KG89ci5wb2ludHNbMF0sYT1yLnBvaW50c1tyLnBvaW50cy5sZW5ndGgtMV0pOihyLnBvaW50cz1bXSxvPWksYT1uKSxyLnBvaW50cy51bnNoaWZ0KGQwLmludGVyc2VjdFJlY3QobixvKSksci5wb2ludHMucHVzaChkMC5pbnRlcnNlY3RSZWN0KGksYSkpfSl9ZnVuY3Rpb24gVmxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTtpZihpci5oYXMociwieCIpKXN3aXRjaCgoci5sYWJlbHBvcz09PSJsInx8ci5sYWJlbHBvcz09PSJyIikmJihyLndpZHRoLT1yLmxhYmVsb2Zmc2V0KSxyLmxhYmVscG9zKXtjYXNlImwiOnIueC09ci53aWR0aC8yK3IubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpyLngrPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrfX0pfWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7ci5yZXZlcnNlZCYmci5wb2ludHMucmV2ZXJzZSgpfSl9ZnVuY3Rpb24gcWxyKGUpe2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2lmKGUuY2hpbGRyZW4odCkubGVuZ3RoKXt2YXIgcj1lLm5vZGUodCksbj1lLm5vZGUoci5ib3JkZXJUb3ApLGk9ZS5ub2RlKHIuYm9yZGVyQm90dG9tKSxvPWUubm9kZShpci5sYXN0KHIuYm9yZGVyTGVmdCkpLGE9ZS5ub2RlKGlyLmxhc3Qoci5ib3JkZXJSaWdodCkpO3Iud2lkdGg9TWF0aC5hYnMoYS54LW8ueCksci5oZWlnaHQ9TWF0aC5hYnMoaS55LW4ueSksci54PW8ueCtyLndpZHRoLzIsci55PW4ueStyLmhlaWdodC8yfX0pLGlyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHQpe2Uubm9kZSh0KS5kdW1teT09PSJib3JkZXIiJiZlLnJlbW92ZU5vZGUodCl9KX1mdW5jdGlvbiBHbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7aWYodC52PT09dC53KXt2YXIgcj1lLm5vZGUodC52KTtyLnNlbGZFZGdlc3x8KHIuc2VsZkVkZ2VzPVtdKSxyLnNlbGZFZGdlcy5wdXNoKHtlOnQsbGFiZWw6ZS5lZGdlKHQpfSksZS5yZW1vdmVFZGdlKHQpfX0pfWZ1bmN0aW9uIFdscihlKXt2YXIgdD1kMC5idWlsZExheWVyTWF0cml4KGUpO2lyLmZvckVhY2godCxmdW5jdGlvbihyKXt2YXIgbj0wO2lyLmZvckVhY2gocixmdW5jdGlvbihpLG8pe3ZhciBhPWUubm9kZShpKTthLm9yZGVyPW8rbixpci5mb3JFYWNoKGEuc2VsZkVkZ2VzLGZ1bmN0aW9uKHMpe2QwLmFkZER1bW15Tm9kZShlLCJzZWxmZWRnZSIse3dpZHRoOnMubGFiZWwud2lkdGgsaGVpZ2h0OnMubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOm8rICsrbixlOnMuZSxsYWJlbDpzLmxhYmVsfSwiX3NlIil9KSxkZWxldGUgYS5zZWxmRWRnZXN9KX0pfWZ1bmN0aW9uIFlscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLm5vZGUodCk7aWYoci5kdW1teT09PSJzZWxmZWRnZSIpe3ZhciBuPWUubm9kZShyLmUudiksaT1uLngrbi53aWR0aC8yLG89bi55LGE9ci54LWkscz1uLmhlaWdodC8yO2Uuc2V0RWRnZShyLmUsci5sYWJlbCksZS5yZW1vdmVOb2RlKHQpLHIubGFiZWwucG9pbnRzPVt7eDppKzIqYS8zLHk6by1zfSx7eDppKzUqYS82LHk6by1zfSx7eDppK2EseTpvfSx7eDppKzUqYS82LHk6bytzfSx7eDppKzIqYS8zLHk6bytzfV0sci5sYWJlbC54PXIueCxyLmxhYmVsLnk9ci55fX0pfWZ1bmN0aW9uIE5sdChlLHQpe3JldHVybiBpci5tYXBWYWx1ZXMoaXIucGljayhlLHQpLE51bWJlcil9ZnVuY3Rpb24gRGx0KGUpe3ZhciB0PXt9O3JldHVybiBpci5mb3JFYWNoKGUsZnVuY3Rpb24ocixuKXt0W24udG9Mb3dlckNhc2UoKV09cn0pLHR9fSk7dmFyIEhzZT1IKChtUW4sQnNlKT0+e3ZhciBwSD1VbigpLGpscj1ucygpLFhscj1VYygpLkdyYXBoO0JzZS5leHBvcnRzPXtkZWJ1Z09yZGVyaW5nOiRscn07ZnVuY3Rpb24gJGxyKGUpe3ZhciB0PWpsci5idWlsZExheWVyTWF0cml4KGUpLHI9bmV3IFhscih7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gcEguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7ci5zZXROb2RlKG4se2xhYmVsOm59KSxyLnNldFBhcmVudChuLCJsYXllciIrZS5ub2RlKG4pLnJhbmspfSkscEguZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7ci5zZXRFZGdlKG4udixuLncse30sbi5uYW1lKX0pLHBILmZvckVhY2godCxmdW5jdGlvbihuLGkpe3ZhciBvPSJsYXllciIraTtyLnNldE5vZGUobyx7cmFuazoic2FtZSJ9KSxwSC5yZWR1Y2UobixmdW5jdGlvbihhLHMpe3JldHVybiByLnNldEVkZ2UoYSxzLHtzdHlsZToiaW52aXMifSksc30pfSkscn19KTt2YXIgVXNlPUgoKGdRbixWc2UpPT57VnNlLmV4cG9ydHM9IjAuOC41In0pO3ZhciBPbHQ9SCgoX1FuLHFzZSk9Pntxc2UuZXhwb3J0cz17Z3JhcGhsaWI6VWMoKSxsYXlvdXQ6RnNlKCksZGVidWc6SHNlKCksdXRpbDp7dGltZTpucygpLnRpbWUsbm90aW1lOm5zKCkubm90aW1lfSx2ZXJzaW9uOlVzZSgpfX0pO3ZhciB6ZHQ9RWUoT2R0KCksMSkse19fZXh0ZW5kczpjX3IsX19hc3NpZ246dV9yLF9fcmVzdDpoX3IsX19kZWNvcmF0ZTpFLF9fcGFyYW06Zl9yLF9fbWV0YWRhdGE6dyxfX2F3YWl0ZXI6cF9yLF9fZ2VuZXJhdG9yOmRfcixfX2V4cG9ydFN0YXI6bV9yLF9fY3JlYXRlQmluZGluZzpnX3IsX192YWx1ZXM6X19yLF9fcmVhZDp5X3IsX19zcHJlYWQ6dl9yLF9fc3ByZWFkQXJyYXlzOnhfcixfX3NwcmVhZEFycmF5OmJfcixfX2F3YWl0OndfcixfX2FzeW5jR2VuZXJhdG9yOlNfcixfX2FzeW5jRGVsZWdhdG9yOk1fcixfX2FzeW5jVmFsdWVzOkVfcixfX21ha2VUZW1wbGF0ZU9iamVjdDpUX3IsX19pbXBvcnRTdGFyOkNfcixfX2ltcG9ydERlZmF1bHQ6QV9yLF9fY2xhc3NQcml2YXRlRmllbGRHZXQ6UF9yLF9fY2xhc3NQcml2YXRlRmllbGRTZXQ6SV9yLF9fY2xhc3NQcml2YXRlRmllbGRJbjpMX3J9PXpkdC5kZWZhdWx0O2Z1bmN0aW9uIHl0KGUpe3JldHVybiB0PT57aWYoZSlpZih0Lmhhc093blByb3BlcnR5KCJpcyIpKXtpZihlIT09dC5pcyl0aHJvdyBuZXcgRXJyb3IoYGN1c3RvbSBlbGVtZW50IHRhZyBuYW1lcyBkbyBub3QgbWF0Y2g6ICgke2V9ICE9PSAke3QuaXN9KWApfWVsc2UgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlzIix7dmFsdWU6ZX0pO3dpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KX19ZnVuY3Rpb24gRmR0KGUsdCxyKXtlLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLmNvbnN0cnVjdG9yLCJwcm9wZXJ0aWVzIix7dmFsdWU6e319KSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF09T2JqZWN0LmFzc2lnbih7fSxlLmNvbnN0cnVjdG9yLnByb3BlcnRpZXNbdF0scil9ZnVuY3Rpb24gQShlKXtyZXR1cm4odCxyKT0+e0ZkdCh0LHIsZSl9fWZ1bmN0aW9uIEJ0KC4uLmUpe3JldHVybih0LHIpPT57dC5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgib2JzZXJ2ZXJzIil8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LmNvbnN0cnVjdG9yLCJvYnNlcnZlcnMiLHt2YWx1ZTpbXX0pLHQuY29uc3RydWN0b3Iub2JzZXJ2ZXJzLnB1c2goYCR7cn0oJHtlLmpvaW4oIiwiKX0pYCl9fWZ1bmN0aW9uIFJ0KGUsLi4udCl7cmV0dXJuKHIsbixpKT0+e2xldCBvPWBfX2NvbXB1dGUke259YDtPYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHt2YWx1ZTppLmdldH0pLGkuZ2V0PXZvaWQgMDtsZXQgYT1bZSwuLi50XS5qb2luKCIsIik7RmR0KHIsbix7Y29tcHV0ZWQ6YCR7b30oJHthfSlgfSl9fXZhciBSX3I9QmR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3IodCkpLE5fcj1CZHQoKGUsdCk9PmUucXVlcnlTZWxlY3RvckFsbCh0KSk7ZnVuY3Rpb24gQmR0KGUpe3JldHVybiB0PT4ocixuKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG4se2dldCgpe3JldHVybiBlKHRoaXMuc2hhZG93Um9vdCx0KX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZX07dmFyIHd2ZT0vKHVybFwoKShbXildKikoXCkpL2csU3ZlPS8oXlwvW15cL10pfCheIyl8KF5bXHctXGRdKjopLyxJSSxacztmdW5jdGlvbiBsXyhlLHQpe2lmKGUmJlN2ZS50ZXN0KGUpfHxlPT09Ii8vIilyZXR1cm4gZTtpZihJST09PXZvaWQgMCl7SUk9ITE7dHJ5e2xldCByPW5ldyBVUkwoImIiLCJodHRwOi8vYSIpO3IucGF0aG5hbWU9ImMlMjBkIixJST1yLmhyZWY9PT0iaHR0cDovL2EvYyUyMGQifWNhdGNoKHIpe319aWYodHx8KHQ9ZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpLElJKXRyeXtyZXR1cm4gbmV3IFVSTChlLHQpLmhyZWZ9Y2F0Y2gocil7cmV0dXJuIGV9cmV0dXJuIFpzfHwoWnM9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJ0ZW1wIiksWnMuYmFzZT1acy5jcmVhdGVFbGVtZW50KCJiYXNlIiksWnMuaGVhZC5hcHBlbmRDaGlsZChacy5iYXNlKSxacy5hbmNob3I9WnMuY3JlYXRlRWxlbWVudCgiYSIpLFpzLmJvZHkuYXBwZW5kQ2hpbGQoWnMuYW5jaG9yKSksWnMuYmFzZS5ocmVmPXQsWnMuYW5jaG9yLmhyZWY9ZSxacy5hbmNob3IuaHJlZnx8ZX1mdW5jdGlvbiBITShlLHQpe3JldHVybiBlLnJlcGxhY2Uod3ZlLGZ1bmN0aW9uKHIsbixpLG8pe3JldHVybiBuKyInIitsXyhpLnJlcGxhY2UoL1siJ10vZywiIiksdCkrIiciK299KX1mdW5jdGlvbiBDeChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKCIvIikrMSl9dmFyIGNfPSF3aW5kb3cuU2hhZHlET018fCF3aW5kb3cuU2hhZHlET00uaW5Vc2UsSF9yPUJvb2xlYW4oIXdpbmRvdy5TaGFkeUNTU3x8d2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyksVl9yPSF3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayxIZHQ9Y18mJiJhZG9wdGVkU3R5bGVTaGVldHMiaW4gRG9jdW1lbnQucHJvdG90eXBlJiYicmVwbGFjZVN5bmMiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUmJigoKT0+e3RyeXtsZXQgZT1uZXcgQ1NTU3R5bGVTaGVldDtlLnJlcGxhY2VTeW5jKCIiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0cz1bZV0sdC5zaGFkb3dSb290LmFkb3B0ZWRTdHlsZVNoZWV0c1swXT09PWV9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxWZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnJvb3RQYXRofHxDeChkb2N1bWVudC5iYXNlVVJJfHx3aW5kb3cubG9jYXRpb24uaHJlZik7dmFyIFZNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zYW5pdGl6ZURPTVZhbHVlfHx2b2lkIDA7dmFyIFVkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2V0UGFzc2l2ZVRvdWNoR2VzdHVyZXN8fCExO3ZhciBpdT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc3RyaWN0VGVtcGxhdGVQb2xpY3l8fCExO3ZhciBxZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmFsbG93VGVtcGxhdGVGcm9tRG9tTW9kdWxlfHwhMTt2YXIgcHA9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU9wdGltaXphdGlvbnN8fCExO3ZhciBMST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIubGVnYWN5V2FybmluZ3N8fCExO3ZhciBHZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN5bmNJbml0aWFsUmVuZGVyfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVVuZGVmaW5lZHx8ITE7dmFyIFdkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIub3JkZXJlZENvbXB1dGVkfHwhMTt2YXIgZkc9ITA7dmFyIHBHPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yZW1vdmVOZXN0ZWRUZW1wbGF0ZXN8fCExO3ZhciBSST13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuZmFzdERvbUlmfHwhMTt2YXIgVU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHwhMTt2YXIgcU09d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeU5vT2JzZXJ2ZWRBdHRyaWJ1dGVzfHwhMTt2YXIgWWR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci51c2VBZG9wdGVkU3R5bGVTaGVldHNXaXRoQnVpbHRDU1N8fCExO3ZhciBNdmU9MDtmdW5jdGlvbiBqZHQoKXt9amR0LnByb3RvdHlwZS5fX21peGluQXBwbGljYXRpb25zO2pkdC5wcm90b3R5cGUuX19taXhpblNldDt2YXIgUm49ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5fX21peGluQXBwbGljYXRpb25zO3R8fCh0PW5ldyBXZWFrTWFwLGUuX19taXhpbkFwcGxpY2F0aW9ucz10KTtsZXQgcj1NdmUrKztmdW5jdGlvbiBuKGkpe2xldCBvPWkuX19taXhpblNldDtpZihvJiZvW3JdKXJldHVybiBpO2xldCBhPXQscz1hLmdldChpKTtpZighcyl7cz1lKGkpLGEuc2V0KGkscyk7bGV0IGw9T2JqZWN0LmNyZWF0ZShzLl9fbWl4aW5TZXR8fG98fG51bGwpO2xbcl09ITAscy5fX21peGluU2V0PWx9cmV0dXJuIHN9cmV0dXJuIG59O3ZhciBkRz17fSxLZHQ9e307ZnVuY3Rpb24gWGR0KGUsdCl7ZEdbZV09S2R0W2UudG9Mb3dlckNhc2UoKV09dH1mdW5jdGlvbiAkZHQoZSl7cmV0dXJuIGRHW2VdfHxLZHRbZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiBFdmUoZSl7ZS5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpJiZjb25zb2xlLndhcm4oImRvbS1tb2R1bGUgJXMgaGFzIHN0eWxlIG91dHNpZGUgdGVtcGxhdGUiLGUuaWQpfXZhciBvdT1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJpZCJdfXN0YXRpYyBpbXBvcnQodCxyKXtpZih0KXtsZXQgbj0kZHQodCk7cmV0dXJuIG4mJnI/bi5xdWVyeVNlbGVjdG9yKHIpOm59cmV0dXJuIG51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3IhPT1uJiZ0aGlzLnJlZ2lzdGVyKCl9Z2V0IGFzc2V0cGF0aCgpe2lmKCF0aGlzLl9fYXNzZXRwYXRoKXtsZXQgdD13aW5kb3cuSFRNTEltcG9ydHMmJkhUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQ/SFRNTEltcG9ydHMuaW1wb3J0Rm9yRWxlbWVudCh0aGlzKXx8ZG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50LHI9bF8odGhpcy5nZXRBdHRyaWJ1dGUoImFzc2V0cGF0aCIpfHwiIix0LmJhc2VVUkkpO3RoaXMuX19hc3NldHBhdGg9Q3gocil9cmV0dXJuIHRoaXMuX19hc3NldHBhdGh9cmVnaXN0ZXIodCl7aWYodD10fHx0aGlzLmlkLHQpe2lmKGl1JiYkZHQodCkhPT12b2lkIDApdGhyb3cgWGR0KHQsbnVsbCksbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLW1vZHVsZSAke3R9IHJlLXJlZ2lzdGVyZWRgKTt0aGlzLmlkPXQsWGR0KHQsdGhpcyksRXZlKHRoaXMpfX19O291LnByb3RvdHlwZS5tb2R1bGVzPWRHO2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLW1vZHVsZSIsb3UpO3ZhciBUdmU9ImxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSIsQ3ZlPSJpbmNsdWRlIixaZHQ9InNoYWR5LXVuc2NvcGVkIjtmdW5jdGlvbiBtRyhlKXtyZXR1cm4gb3UuaW1wb3J0KGUpfWZ1bmN0aW9uIEpkdChlKXtsZXQgdD1lLmJvZHk/ZS5ib2R5OmUscj1ITSh0LnRleHRDb250ZW50LGUuYmFzZVVSSSksbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiBuLnRleHRDb250ZW50PXIsbn1mdW5jdGlvbiBBdmUoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9W107Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspci5wdXNoKC4uLlB2ZSh0W25dKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUHZlKGUpe2xldCB0PW1HKGUpO2lmKCF0KXJldHVybiBjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSxbXTtpZih0Ll9zdHlsZXM9PT12b2lkIDApe2xldCByPVtdO3IucHVzaCguLi5nRyh0KSk7bGV0IG49dC5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO24mJnIucHVzaCguLi5OSShuLHQuYXNzZXRwYXRoKSksdC5fc3R5bGVzPXJ9cmV0dXJuIHQuX3N0eWxlc31mdW5jdGlvbiBOSShlLHQpe2lmKCFlLl9zdHlsZXMpe2xldCByPVtdLG49ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1vLmdldEF0dHJpYnV0ZShDdmUpO2EmJnIucHVzaCguLi5BdmUoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4gYy5pbmRleE9mKHMpPT09bH0pKSx0JiYoby50ZXh0Q29udGVudD1ITShvLnRleHRDb250ZW50LHQpKSxyLnB1c2gobyl9ZS5fc3R5bGVzPXJ9cmV0dXJuIGUuX3N0eWxlc31mdW5jdGlvbiBRZHQoZSl7bGV0IHQ9bUcoZSk7cmV0dXJuIHQ/Z0codCk6W119ZnVuY3Rpb24gZ0coZSl7bGV0IHQ9W10scj1lLnF1ZXJ5U2VsZWN0b3JBbGwoVHZlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtpZihpLmltcG9ydCl7bGV0IG89aS5pbXBvcnQsYT1pLmhhc0F0dHJpYnV0ZShaZHQpO2lmKGEmJiFvLl91bnNjb3BlZFN0eWxlKXtsZXQgcz1KZHQobyk7cy5zZXRBdHRyaWJ1dGUoWmR0LCIiKSxvLl91bnNjb3BlZFN0eWxlPXN9ZWxzZSBvLl9zdHlsZXx8KG8uX3N0eWxlPUpkdChvKSk7dC5wdXNoKGE/by5fdW5zY29wZWRTdHlsZTpvLl9zdHlsZSl9fXJldHVybiB0fWZ1bmN0aW9uIHRtdChlKXtsZXQgdD1lLnRyaW0oKS5zcGxpdCgvXHMrLykscj0iIjtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyKz1JdmUodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSXZlKGUpe2xldCB0PW1HKGUpO2lmKHQmJnQuX2Nzc1RleHQ9PT12b2lkIDApe2xldCByPWt2ZSh0KSxuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiYocis9THZlKG4sdC5hc3NldHBhdGgpKSx0Ll9jc3NUZXh0PXJ8fG51bGx9cmV0dXJuIHR8fGNvbnNvbGUud2FybigiQ291bGQgbm90IGZpbmQgc3R5bGUgZGF0YSBpbiBtb2R1bGUgbmFtZWQiLGUpLHQmJnQuX2Nzc1RleHR8fCIifWZ1bmN0aW9uIEx2ZShlLHQpe2xldCByPSIiLG49TkkoZSx0KTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtvLnBhcmVudE5vZGUmJm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSxyKz1vLnRleHRDb250ZW50fXJldHVybiByfWZ1bmN0aW9uIGt2ZShlKXtsZXQgdD0iIixyPWdHKGUpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl0udGV4dENvbnRlbnQ7cmV0dXJuIHR9dmFyIHVlPXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2gmJndpbmRvdy5TaGFkeURPTS53cmFwP3dpbmRvdy5TaGFkeURPTS53cmFwOndpbmRvdy5TaGFkeURPTT9lPT5TaGFkeURPTS5wYXRjaChlKTplPT5lO2Z1bmN0aW9uIERJKGUpe3JldHVybiBlLmluZGV4T2YoIi4iKT49MH1mdW5jdGlvbiBhdShlKXtsZXQgdD1lLmluZGV4T2YoIi4iKTtyZXR1cm4gdD09PS0xP2U6ZS5zbGljZSgwLHQpfWZ1bmN0aW9uIF9HKGUsdCl7cmV0dXJuIGUuaW5kZXhPZih0KyIuIik9PT0wfWZ1bmN0aW9uIEF4KGUsdCl7cmV0dXJuIHQuaW5kZXhPZihlKyIuIik9PT0wfWZ1bmN0aW9uIGRwKGUsdCxyKXtyZXR1cm4gdCtyLnNsaWNlKGUubGVuZ3RoKX1mdW5jdGlvbiBPSShlLHQpe3JldHVybiBlPT09dHx8X0coZSx0KXx8QXgoZSx0KX1mdW5jdGlvbiBQeChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49ZVtyXS50b1N0cmluZygpLnNwbGl0KCIuIik7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdC5wdXNoKG5baV0pfXJldHVybiB0LmpvaW4oIi4iKX1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIGVtdChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9QeChlKS5zcGxpdCgiLiIpOmUudG9TdHJpbmcoKS5zcGxpdCgiLiIpfWZ1bmN0aW9uIE5vKGUsdCxyKXtsZXQgbj1lLGk9ZW10KHQpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtpZighbilyZXR1cm47bGV0IGE9aVtvXTtuPW5bYV19cmV0dXJuIHImJihyLnBhdGg9aS5qb2luKCIuIikpLG59ZnVuY3Rpb24geUcoZSx0LHIpe2xldCBuPWUsaT1lbXQodCksbz1pW2kubGVuZ3RoLTFdO2lmKGkubGVuZ3RoPjEpe2ZvcihsZXQgYT0wO2E8aS5sZW5ndGgtMTthKyspe2xldCBzPWlbYV07aWYobj1uW3NdLCFuKXJldHVybn1uW29dPXJ9ZWxzZSBuW3RdPXI7cmV0dXJuIGkuam9pbigiLiIpfXZhciB6ST17fSxSdmU9Ly1bYS16XS9nLE52ZT0vKFtBLVpdKS9nO2Z1bmN0aW9uIHdtKGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUuaW5kZXhPZigiLSIpPDA/ZTplLnJlcGxhY2UoUnZlLHQ9PnRbMV0udG9VcHBlckNhc2UoKSkpfWZ1bmN0aW9uIEl4KGUpe3JldHVybiB6SVtlXXx8KHpJW2VdPWUucmVwbGFjZShOdmUsIi0kMSIpLnRvTG93ZXJDYXNlKCkpfXZhciBEdmU9MCxybXQ9MCxMeD1bXSxPdmU9MCx2Rz0hMSxubXQ9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO25ldyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlcih6dmUpLm9ic2VydmUobm10LHtjaGFyYWN0ZXJEYXRhOiEwfSk7ZnVuY3Rpb24genZlKCl7dkc9ITE7bGV0IGU9THgubGVuZ3RoO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCByPUx4W3RdO2lmKHIpdHJ5e3IoKX1jYXRjaChuKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgbn0pfX1MeC5zcGxpY2UoMCxlKSxybXQrPWV9dmFyIG1vPXthZnRlcihlKXtyZXR1cm57cnVuKHQpe3JldHVybiB3aW5kb3cuc2V0VGltZW91dCh0LGUpfSxjYW5jZWwodCl7d2luZG93LmNsZWFyVGltZW91dCh0KX19fSxydW4oZSx0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQoZSx0KX0sY2FuY2VsKGUpe3dpbmRvdy5jbGVhclRpbWVvdXQoZSl9fTt2YXIgTmk9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShlKX19O3ZhciBreD17cnVuKGUpe3JldHVybiB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjaz93aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhlKTp3aW5kb3cuc2V0VGltZW91dChlLDE2KX0sY2FuY2VsKGUpe3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2s/d2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhlKTp3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIGxpPXtydW4oZSl7cmV0dXJuIHZHfHwodkc9ITAsbm10LnRleHRDb250ZW50PU92ZSsrKSxMeC5wdXNoKGUpLER2ZSsrfSxjYW5jZWwoZSl7bGV0IHQ9ZS1ybXQ7aWYodD49MCl7aWYoIUx4W3RdKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBhc3luYyBoYW5kbGU6ICIrZSk7THhbdF09bnVsbH19fTt2YXIgRnZlPWxpLEZJPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtzdGF0aWMgY3JlYXRlUHJvcGVydGllcyhuKXtsZXQgaT10aGlzLnByb3RvdHlwZTtmb3IobGV0IG8gaW4gbilvIGluIGl8fGkuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3Iobyl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpfXN0YXRpYyB0eXBlRm9yUHJvcGVydHkobil7fV9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7dGhpcy5fYWRkUHJvcGVydHlUb0F0dHJpYnV0ZU1hcChuKSx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZGF0YUhhc0FjY2Vzc29yIix0aGlzKSl8fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcikpLHRoaXMuX19kYXRhSGFzQWNjZXNzb3Jbbl18fCh0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dPSEwLHRoaXMuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IobixpKSl9X2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobil7dGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fZGF0YUF0dHJpYnV0ZXM9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXMpKTtsZXQgaT10aGlzLl9fZGF0YUF0dHJpYnV0ZXNbbl07cmV0dXJuIGl8fChpPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pLHRoaXMuX19kYXRhQXR0cmlidXRlc1tpXT1uKSxpfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsbix7Z2V0KCl7cmV0dXJuIHRoaXMuX19kYXRhW25dfSxzZXQ6aT9mdW5jdGlvbigpe306ZnVuY3Rpb24obyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9fSl9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19kYXRhRW5hYmxlZD0hMSx0aGlzLl9fZGF0YVJlYWR5PSExLHRoaXMuX19kYXRhSW52YWxpZD0hMSx0aGlzLl9fZGF0YT17fSx0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz1udWxsLHRoaXMuX19kYXRhQ291bnRlcj0wLHRoaXMuX19zZXJpYWxpemluZz0hMSx0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fX2RhdGFSZWFkeT0hMCx0aGlzLl9mbHVzaFByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXtmb3IobGV0IG4gaW4gdGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcil0aGlzLmhhc093blByb3BlcnR5KG4pJiYodGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPXRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc3x8e30sdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzW25dPXRoaXNbbl0sZGVsZXRlIHRoaXNbbl0pfV9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKG4pe09iamVjdC5hc3NpZ24odGhpcyxuKX1fc2V0UHJvcGVydHkobixpKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobixpKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1fZ2V0UHJvcGVydHkobil7cmV0dXJuIHRoaXMuX19kYXRhW25dfV9zZXRQZW5kaW5nUHJvcGVydHkobixpLG8pe2xldCBhPXRoaXMuX19kYXRhW25dLHM9dGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLGEpO3JldHVybiBzJiYodGhpcy5fX2RhdGFQZW5kaW5nfHwodGhpcy5fX2RhdGFQZW5kaW5nPXt9LHRoaXMuX19kYXRhT2xkPXt9KSx0aGlzLl9fZGF0YU9sZCYmIShuIGluIHRoaXMuX19kYXRhT2xkKSYmKHRoaXMuX19kYXRhT2xkW25dPWEpLHRoaXMuX19kYXRhW25dPWksdGhpcy5fX2RhdGFQZW5kaW5nW25dPWkpLHN9X2lzUHJvcGVydHlQZW5kaW5nKG4pe3JldHVybiEhKHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fX2RhdGFQZW5kaW5nLmhhc093blByb3BlcnR5KG4pKX1faW52YWxpZGF0ZVByb3BlcnRpZXMoKXshdGhpcy5fX2RhdGFJbnZhbGlkJiZ0aGlzLl9fZGF0YVJlYWR5JiYodGhpcy5fX2RhdGFJbnZhbGlkPSEwLEZ2ZS5ydW4oKCk9Pnt0aGlzLl9fZGF0YUludmFsaWQmJih0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCkpfSkpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFFbmFibGVkfHwodGhpcy5fX2RhdGFFbmFibGVkPSEwLHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyYmKHRoaXMuX2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXModGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzKSx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCksdGhpcy5yZWFkeSgpKX1fZmx1c2hQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFDb3VudGVyKys7bGV0IG49dGhpcy5fX2RhdGEsaT10aGlzLl9fZGF0YVBlbmRpbmcsbz10aGlzLl9fZGF0YU9sZDt0aGlzLl9zaG91bGRQcm9wZXJ0aWVzQ2hhbmdlKG4saSxvKSYmKHRoaXMuX19kYXRhUGVuZGluZz1udWxsLHRoaXMuX19kYXRhT2xkPW51bGwsdGhpcy5fcHJvcGVydGllc0NoYW5nZWQobixpLG8pKSx0aGlzLl9fZGF0YUNvdW50ZXItLX1fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbyl7cmV0dXJuIEJvb2xlYW4oaSl9X3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKXt9X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gbyE9PWkmJihvPT09b3x8aT09PWkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKXtpIT09byYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLG8pLHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG4saSxvLGEpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KG4saSxvKXtpZighdGhpcy5fX3NlcmlhbGl6aW5nKXtsZXQgYT10aGlzLl9fZGF0YUF0dHJpYnV0ZXMscz1hJiZhW25dfHxuO3RoaXNbc109dGhpcy5fZGVzZXJpYWxpemVWYWx1ZShpLG98fHRoaXMuY29uc3RydWN0b3IudHlwZUZvclByb3BlcnR5KHMpKX19X3Byb3BlcnR5VG9BdHRyaWJ1dGUobixpLG8pe3RoaXMuX19zZXJpYWxpemluZz0hMCxvPWFyZ3VtZW50cy5sZW5ndGg8Mz90aGlzW25dOm8sdGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodGhpcyxvLGl8fHRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4pKSx0aGlzLl9fc2VyaWFsaXppbmc9ITF9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKG4saSxvKXtsZXQgYT10aGlzLl9zZXJpYWxpemVWYWx1ZShpKTsobz09PSJjbGFzcyJ8fG89PT0ibmFtZSJ8fG89PT0ic2xvdCIpJiYobj11ZShuKSksYT09PXZvaWQgMD9uLnJlbW92ZUF0dHJpYnV0ZShvKTpuLnNldEF0dHJpYnV0ZShvLGEpfV9zZXJpYWxpemVWYWx1ZShuKXtzd2l0Y2godHlwZW9mIG4pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIG4/IiI6dm9pZCAwO2RlZmF1bHQ6cmV0dXJuIG4hPW51bGw/bi50b1N0cmluZygpOnZvaWQgMH19X2Rlc2VyaWFsaXplVmFsdWUobixpKXtzd2l0Y2goaSl7Y2FzZSBCb29sZWFuOnJldHVybiBuIT09bnVsbDtjYXNlIE51bWJlcjpyZXR1cm4gTnVtYmVyKG4pO2RlZmF1bHQ6cmV0dXJuIG59fX1yZXR1cm4gdH0pO3ZhciBpbXQ9e30sQkk9SFRNTEVsZW1lbnQucHJvdG90eXBlO2Zvcig7Qkk7KXtsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhCSSk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaW10W2VbdF1dPSEwO0JJPU9iamVjdC5nZXRQcm90b3R5cGVPZihCSSl9ZnVuY3Rpb24gQnZlKGUsdCl7aWYoIWltdFt0XSl7bGV0IHI9ZVt0XTtyIT09dm9pZCAwJiYoZS5fX2RhdGE/ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscik6KGUuX19kYXRhUHJvdG8/ZS5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFQcm90byIsZSkpfHwoZS5fX2RhdGFQcm90bz1PYmplY3QuY3JlYXRlKGUuX19kYXRhUHJvdG8pKTplLl9fZGF0YVByb3RvPXt9LGUuX19kYXRhUHJvdG9bdF09cikpfX12YXIgSEk9Um4oZT0+e2xldCB0PUZJKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzRm9yQXR0cmlidXRlcygpe2xldCBpPXRoaXMub2JzZXJ2ZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXRoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKHdtKGlbb10pKX1zdGF0aWMgYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpe3JldHVybiBJeChpKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLl9fZGF0YVByb3RvJiYodGhpcy5faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyh0aGlzLl9fZGF0YVByb3RvKSx0aGlzLl9fZGF0YVByb3RvPW51bGwpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe2ZvcihsZXQgbyBpbiBpKXRoaXMuX3NldFByb3BlcnR5KG8saVtvXSl9X2Vuc3VyZUF0dHJpYnV0ZShpLG8pe2xldCBhPXRoaXM7YS5oYXNBdHRyaWJ1dGUoaSl8fHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKGEsbyxpKX1fc2VyaWFsaXplVmFsdWUoaSl7c3dpdGNoKHR5cGVvZiBpKXtjYXNlIm9iamVjdCI6aWYoaSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIGkudG9TdHJpbmcoKTtpZihpKXRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaSl9Y2F0Y2gobyl7cmV0dXJuIiJ9ZGVmYXVsdDpyZXR1cm4gc3VwZXIuX3NlcmlhbGl6ZVZhbHVlKGkpfX1fZGVzZXJpYWxpemVWYWx1ZShpLG8pe2xldCBhO3N3aXRjaChvKXtjYXNlIE9iamVjdDp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9aX1icmVhaztjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoaSl9Y2F0Y2gocyl7YT1udWxsLGNvbnNvbGUud2FybihgUG9seW1lcjo6QXR0cmlidXRlczogY291bGRuJ3QgZGVjb2RlIEFycmF5IGFzIEpTT046ICR7aX1gKX1icmVhaztjYXNlIERhdGU6YT1pc05hTihpKT9TdHJpbmcoaSk6TnVtYmVyKGkpLGE9bmV3IERhdGUoYSk7YnJlYWs7ZGVmYXVsdDphPXN1cGVyLl9kZXNlcmlhbGl6ZVZhbHVlKGksbyk7YnJlYWt9cmV0dXJuIGF9X2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKXtCdmUodGhpcyxpKSxzdXBlci5fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihpLG8pfV9oYXNBY2Nlc3NvcihpKXtyZXR1cm4gdGhpcy5fX2RhdGFIYXNBY2Nlc3NvciYmdGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltpXX1faXNQcm9wZXJ0eVBlbmRpbmcoaSl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2RhdGFQZW5kaW5nJiZpIGluIHRoaXMuX19kYXRhUGVuZGluZyl9fXJldHVybiByfSk7dmFyIEh2ZT17ImRvbS1pZiI6ITAsImRvbS1yZXBlYXQiOiEwfSxvbXQ9ITEsYW10PSExO2Z1bmN0aW9uIFZ2ZSgpe2lmKCFvbXQpe29tdD0hMDtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO2UucGxhY2Vob2xkZXI9ImEiLGFtdD1lLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudH1yZXR1cm4gYW10fWZ1bmN0aW9uIFV2ZShlKXtWdmUoKSYmZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiJiZlLnBsYWNlaG9sZGVyJiZlLnBsYWNlaG9sZGVyPT09ZS50ZXh0Q29udGVudCYmKGUudGV4dENvbnRlbnQ9bnVsbCl9ZnVuY3Rpb24gcXZlKGUpe2xldCB0PWUuZ2V0QXR0cmlidXRlKCJpcyIpO2lmKHQmJkh2ZVt0XSl7bGV0IHI9ZTtmb3Ioci5yZW1vdmVBdHRyaWJ1dGUoImlzIiksZT1yLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KSxyLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGUsciksZS5hcHBlbmRDaGlsZChyKTtyLmF0dHJpYnV0ZXMubGVuZ3RoOyllLnNldEF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSxyLmF0dHJpYnV0ZXNbMF0udmFsdWUpLHIucmVtb3ZlQXR0cmlidXRlKHIuYXR0cmlidXRlc1swXS5uYW1lKX1yZXR1cm4gZX1mdW5jdGlvbiBzbXQoZSx0KXtsZXQgcj10LnBhcmVudEluZm8mJnNtdChlLHQucGFyZW50SW5mbyk7aWYocil7Zm9yKGxldCBuPXIuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpaWYodC5wYXJlbnRJbmRleD09PWkrKylyZXR1cm4gbn1lbHNlIHJldHVybiBlfWZ1bmN0aW9uIEd2ZShlLHQscixuKXtuLmlkJiYodFtuLmlkXT1yKX1mdW5jdGlvbiBXdmUoZSx0LHIpe2lmKHIuZXZlbnRzJiZyLmV2ZW50cy5sZW5ndGgpZm9yKGxldCBuPTAsaT1yLmV2ZW50cyxvO248aS5sZW5ndGgmJihvPWlbbl0pO24rKyllLl9hZGRNZXRob2RFdmVudExpc3RlbmVyVG9Ob2RlKHQsby5uYW1lLG8udmFsdWUsZSl9ZnVuY3Rpb24gWXZlKGUsdCxyLG4pe3IudGVtcGxhdGVJbmZvJiYodC5fdGVtcGxhdGVJbmZvPXIudGVtcGxhdGVJbmZvLHQuX3BhcmVudFRlbXBsYXRlSW5mbz1uKX1mdW5jdGlvbiBqdmUoZSx0LHIpe3JldHVybiBlPWUuX21ldGhvZEhvc3R8fGUsZnVuY3Rpb24oaSl7ZVtyXT9lW3JdKGksaS5kZXRhaWwpOmNvbnNvbGUud2FybigibGlzdGVuZXIgbWV0aG9kIGAiK3IrImAgbm90IGRlZmluZWQiKX19dmFyIGxtdD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIF9wYXJzZVRlbXBsYXRlKG4saSl7aWYoIW4uX3RlbXBsYXRlSW5mbyl7bGV0IG89bi5fdGVtcGxhdGVJbmZvPXt9O28ubm9kZUluZm9MaXN0PVtdLG8ubmVzdGVkVGVtcGxhdGU9Qm9vbGVhbihpKSxvLnN0cmlwV2hpdGVTcGFjZT1pJiZpLnN0cmlwV2hpdGVTcGFjZXx8bi5oYXNBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiKSx0aGlzLl9wYXJzZVRlbXBsYXRlQ29udGVudChuLG8se3BhcmVudDpudWxsfSl9cmV0dXJuIG4uX3RlbXBsYXRlSW5mb31zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KG4saSxvKXtyZXR1cm4gdGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUobi5jb250ZW50LGksbyl9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShuLGksbyl7bGV0IGE9ITEscz1uO3JldHVybiBzLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmIXMuaGFzQXR0cmlidXRlKCJwcmVzZXJ2ZS1jb250ZW50Iik/YT10aGlzLl9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUocyxpLG8pfHxhOnMubG9jYWxOYW1lPT09InNsb3QiJiYoaS5oYXNJbnNlcnRpb25Qb2ludD0hMCksVXZlKHMpLHMuZmlyc3RDaGlsZCYmdGhpcy5fcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMocyxpLG8pLHMuaGFzQXR0cmlidXRlcyYmcy5oYXNBdHRyaWJ1dGVzKCkmJihhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhzLGksbyl8fGEpLGF8fG8ubm90ZWR9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ2hpbGROb2RlcyhuLGksbyl7aWYoIShuLmxvY2FsTmFtZT09PSJzY3JpcHQifHxuLmxvY2FsTmFtZT09PSJzdHlsZSIpKWZvcihsZXQgYT1uLmZpcnN0Q2hpbGQscz0wLGw7YTthPWwpe2lmKGEubG9jYWxOYW1lPT0idGVtcGxhdGUiJiYoYT1xdmUoYSkpLGw9YS5uZXh0U2libGluZyxhLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCB1PWw7Zm9yKDt1JiZ1Lm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU7KWEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnQsbD11Lm5leHRTaWJsaW5nLG4ucmVtb3ZlQ2hpbGQodSksdT1sO2lmKGkuc3RyaXBXaGl0ZVNwYWNlJiYhYS50ZXh0Q29udGVudC50cmltKCkpe24ucmVtb3ZlQ2hpbGQoYSk7Y29udGludWV9fWxldCBjPXtwYXJlbnRJbmRleDpzLHBhcmVudEluZm86b307dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGUoYSxpLGMpJiYoYy5pbmZvSW5kZXg9aS5ub2RlSW5mb0xpc3QucHVzaChjKS0xKSxhLnBhcmVudE5vZGUmJnMrK319c3RhdGljIF9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUobixpLG8pe2xldCBhPW4scz10aGlzLl9wYXJzZVRlbXBsYXRlKGEsaSk7cmV0dXJuKHMuY29udGVudD1hLmNvbnRlbnQub3duZXJEb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZENoaWxkKGEuY29udGVudCksby50ZW1wbGF0ZUluZm89cywhMH1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlcyhuLGksbyl7bGV0IGE9ITEscz1BcnJheS5mcm9tKG4uYXR0cmlidXRlcyk7Zm9yKGxldCBsPXMubGVuZ3RoLTEsYztjPXNbbF07bC0tKWE9dGhpcy5fcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYy5uYW1lLGMudmFsdWUpfHxhO3JldHVybiBhfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUobixpLG8sYSxzKXtyZXR1cm4gYS5zbGljZSgwLDMpPT09Im9uLSI/KG4ucmVtb3ZlQXR0cmlidXRlKGEpLG8uZXZlbnRzPW8uZXZlbnRzfHxbXSxvLmV2ZW50cy5wdXNoKHtuYW1lOmEuc2xpY2UoMyksdmFsdWU6c30pLCEwKTphPT09ImlkIj8oby5pZD1zLCEwKTohMX1zdGF0aWMgX2NvbnRlbnRGb3JUZW1wbGF0ZShuKXtsZXQgaT1uLl90ZW1wbGF0ZUluZm87cmV0dXJuIGkmJmkuY29udGVudHx8bi5jb250ZW50fV9zdGFtcFRlbXBsYXRlKG4saSl7biYmIW4uY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUobiksaT1pfHx0aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKG4pO2xldCBvPWkubm9kZUluZm9MaXN0LGE9aS5jb250ZW50fHxuLmNvbnRlbnQscz1kb2N1bWVudC5pbXBvcnROb2RlKGEsITApO3MuX19ub0luc2VydGlvblBvaW50PSFpLmhhc0luc2VydGlvblBvaW50O2xldCBsPXMubm9kZUxpc3Q9bmV3IEFycmF5KG8ubGVuZ3RoKTtzLiQ9e307Zm9yKGxldCBjPTAsdT1vLmxlbmd0aCxoO2M8dSYmKGg9b1tjXSk7YysrKXtsZXQgZj1sW2NdPXNtdChzLGgpO0d2ZSh0aGlzLHMuJCxmLGgpLFl2ZSh0aGlzLGYsaCxpKSxXdmUodGhpcyxmLGgpfXJldHVybiBzPXMsc31fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyxhKXthPWF8fG47bGV0IHM9anZlKGEsaSxvKTtyZXR1cm4gdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGkscyksc31fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7bi5hZGRFdmVudExpc3RlbmVyKGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bi5yZW1vdmVFdmVudExpc3RlbmVyKGksbyl9fXJldHVybiB0fSk7dmFyIGpNPTAsWE09W10senI9e0NPTVBVVEU6Il9fY29tcHV0ZUVmZmVjdHMiLFJFRkxFQ1Q6Il9fcmVmbGVjdEVmZmVjdHMiLE5PVElGWToiX19ub3RpZnlFZmZlY3RzIixQUk9QQUdBVEU6Il9fcHJvcGFnYXRlRWZmZWN0cyIsT0JTRVJWRToiX19vYnNlcnZlRWZmZWN0cyIsUkVBRF9PTkxZOiJfX3JlYWRPbmx5In0sZ210PSJfX2NvbXB1dGVJbmZvIixYdmU9L1tBLVpdLztmdW5jdGlvbiB4RyhlLHQscil7bGV0IG49ZVt0XTtpZighbiluPWVbdF09e307ZWxzZSBpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG49ZVt0XT1PYmplY3QuY3JlYXRlKGVbdF0pLHIpKWZvcihsZXQgaSBpbiBuKXtsZXQgbz1uW2ldLGE9bltpXT1BcnJheShvLmxlbmd0aCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspYVtzXT1vW3NdfXJldHVybiBufWZ1bmN0aW9uIFlNKGUsdCxyLG4saSxvKXtpZih0KXtsZXQgYT0hMSxzPWpNKys7Zm9yKGxldCBsIGluIHIpe2xldCBjPWk/YXUobCk6bCx1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cykmJighaXx8TUcobCxwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXMpLHAuZm4oZSxsLHIsbixwLmluZm8saSxvKSxhPSEwKX1yZXR1cm4gYX1yZXR1cm4hMX1mdW5jdGlvbiAkdmUoZSx0LHIsbixpLG8sYSxzKXtsZXQgbD0hMSxjPWE/YXUobik6bix1PXRbY107aWYodSlmb3IobGV0IGg9MCxmPXUubGVuZ3RoLHA7aDxmJiYocD11W2hdKTtoKyspKCFwLmluZm98fHAuaW5mby5sYXN0UnVuIT09cikmJighYXx8TUcobixwLnRyaWdnZXIpKSYmKHAuaW5mbyYmKHAuaW5mby5sYXN0UnVuPXIpLHAuZm4oZSxuLGksbyxwLmluZm8sYSxzKSxsPSEwKTtyZXR1cm4gbH1mdW5jdGlvbiBNRyhlLHQpe2lmKHQpe2xldCByPXQubmFtZTtyZXR1cm4gcj09ZXx8ISEodC5zdHJ1Y3R1cmVkJiZfRyhyLGUpKXx8ISEodC53aWxkY2FyZCYmQXgocixlKSl9ZWxzZSByZXR1cm4hMH1mdW5jdGlvbiBjbXQoZSx0LHIsbixpKXtsZXQgbz10eXBlb2YgaS5tZXRob2Q9PSJzdHJpbmciP2VbaS5tZXRob2RdOmkubWV0aG9kLGE9aS5wcm9wZXJ0eTtvP28uY2FsbChlLGUuX19kYXRhW2FdLG5bYV0pOmkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm9ic2VydmVyIG1ldGhvZCBgIitpLm1ldGhvZCsiYCBub3QgZGVmaW5lZCIpfWZ1bmN0aW9uIEt2ZShlLHQscixuLGkpe2xldCBvPWVbenIuTk9USUZZXSxhLHM9ak0rKztmb3IobGV0IGMgaW4gdCl0W2NdJiYobyYmJHZlKGUsbyxzLGMscixuLGkpfHxpJiZadmUoZSxjLHIpKSYmKGE9ITApO2xldCBsO2EmJihsPWUuX19kYXRhSG9zdCkmJmwuX2ludmFsaWRhdGVQcm9wZXJ0aWVzJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIFp2ZShlLHQscil7bGV0IG49YXUodCk7aWYobiE9PXQpe2xldCBpPUl4KG4pKyItY2hhbmdlZCI7cmV0dXJuIF9tdChlLGksclt0XSx0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBfbXQoZSx0LHIsbil7bGV0IGk9e3ZhbHVlOnIscXVldWVQcm9wZXJ0eTohMH07biYmKGkucGF0aD1uKSx1ZShlKS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCh0LHtkZXRhaWw6aX0pKX1mdW5jdGlvbiBKdmUoZSx0LHIsbixpLG8pe2xldCBzPShvP2F1KHQpOnQpIT10P3Q6bnVsbCxsPXM/Tm8oZSxzKTplLl9fZGF0YVt0XTtzJiZsPT09dm9pZCAwJiYobD1yW3RdKSxfbXQoZSxpLmV2ZW50TmFtZSxsLHMpfWZ1bmN0aW9uIFF2ZShlLHQscixuLGkpe2xldCBvLGE9ZS5kZXRhaWwscz1hJiZhLnBhdGg7cz8obj1kcChyLG4scyksbz1hJiZhLnZhbHVlKTpvPWUuY3VycmVudFRhcmdldFtyXSxvPWk/IW86bywoIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtuXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChuLG8sITAsQm9vbGVhbihzKSkmJighYXx8IWEucXVldWVQcm9wZXJ0eSkmJnQuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9ZnVuY3Rpb24gdDFlKGUsdCxyLG4saSl7bGV0IG89ZS5fX2RhdGFbdF07Vk0mJihvPVZNKG8saS5hdHRyTmFtZSwiYXR0cmlidXRlIixlKSksZS5fcHJvcGVydHlUb0F0dHJpYnV0ZSh0LGkuYXR0ck5hbWUsbyl9ZnVuY3Rpb24gZTFlKGUsdCxyLG4pe2xldCBpPWVbenIuQ09NUFVURV07aWYoaSlpZihXZHQpe2pNKys7bGV0IG89bjFlKGUpLGE9W107Zm9yKGxldCBsIGluIHQpdW10KGwsaSxhLG8sbik7bGV0IHM7Zm9yKDtzPWEuc2hpZnQoKTspeW10KGUsIiIsdCxyLHMpJiZ1bXQocy5tZXRob2RJbmZvLGksYSxvLG4pO09iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksZS5fX2RhdGFQZW5kaW5nPW51bGx9ZWxzZXtsZXQgbz10O2Zvcig7WU0oZSxpLG8scixuKTspT2JqZWN0LmFzc2lnbihyLGUuX19kYXRhT2xkKSxPYmplY3QuYXNzaWduKHQsZS5fX2RhdGFQZW5kaW5nKSxvPWUuX19kYXRhUGVuZGluZyxlLl9fZGF0YVBlbmRpbmc9bnVsbH19dmFyIHIxZT0oZSx0LHIpPT57bGV0IG49MCxpPXQubGVuZ3RoLTEsbz0tMTtmb3IoO248PWk7KXtsZXQgYT1uK2k+PjEscz1yLmdldCh0W2FdLm1ldGhvZEluZm8pLXIuZ2V0KGUubWV0aG9kSW5mbyk7aWYoczwwKW49YSsxO2Vsc2UgaWYocz4wKWk9YS0xO2Vsc2V7bz1hO2JyZWFrfX1vPDAmJihvPWkrMSksdC5zcGxpY2UobywwLGUpfSx1bXQ9KGUsdCxyLG4saSk9PntsZXQgbz1pP2F1KGUpOmUsYT10W29dO2lmKGEpZm9yKGxldCBzPTA7czxhLmxlbmd0aDtzKyspe2xldCBsPWFbc107bC5pbmZvLmxhc3RSdW4hPT1qTSYmKCFpfHxNRyhlLGwudHJpZ2dlcikpJiYobC5pbmZvLmxhc3RSdW49ak0scjFlKGwuaW5mbyxyLG4pKX19O2Z1bmN0aW9uIG4xZShlKXtsZXQgdD1lLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcztpZighdCl7dD1uZXcgTWFwO2xldCByPWVbenIuQ09NUFVURV0se2NvdW50czpuLHJlYWR5OmksdG90YWw6b309aTFlKGUpLGE7Zm9yKDthPWkuc2hpZnQoKTspe3Quc2V0KGEsdC5zaXplKTtsZXQgcz1yW2FdO3MmJnMuZm9yRWFjaChsPT57bGV0IGM9bC5pbmZvLm1ldGhvZEluZm87LS1vLC0tbltjXT09PTAmJmkucHVzaChjKX0pfW8hPT0wJiZjb25zb2xlLndhcm4oYENvbXB1dGVkIGdyYXBoIGZvciAke2UubG9jYWxOYW1lfSBpbmNvbXBsZXRlOyBjaXJjdWxhcj9gKSxlLmNvbnN0cnVjdG9yLl9fb3JkZXJlZENvbXB1dGVkRGVwcz10fXJldHVybiB0fWZ1bmN0aW9uIGkxZShlKXtsZXQgdD1lW2dtdF0scj17fSxuPWVbenIuQ09NUFVURV0saT1bXSxvPTA7Zm9yKGxldCBhIGluIHQpe2xldCBzPXRbYV07bys9clthXT1zLmFyZ3MuZmlsdGVyKGw9PiFsLmxpdGVyYWwpLmxlbmd0aCsocy5keW5hbWljRm4/MTowKX1mb3IobGV0IGEgaW4gbil0W2FdfHxpLnB1c2goYSk7cmV0dXJue2NvdW50czpyLHJlYWR5OmksdG90YWw6b319ZnVuY3Rpb24geW10KGUsdCxyLG4saSl7bGV0IG89U0coZSx0LHIsbixpKTtpZihvPT09WE0pcmV0dXJuITE7bGV0IGE9aS5tZXRob2RJbmZvO3JldHVybiBlLl9fZGF0YUhhc0FjY2Vzc29yJiZlLl9fZGF0YUhhc0FjY2Vzc29yW2FdP2UuX3NldFBlbmRpbmdQcm9wZXJ0eShhLG8sITApOihlW2FdPW8sITEpfWZ1bmN0aW9uIG8xZShlLHQscil7bGV0IG49ZS5fX2RhdGFMaW5rZWRQYXRocztpZihuKXtsZXQgaTtmb3IobGV0IG8gaW4gbil7bGV0IGE9bltvXTtBeChvLHQpPyhpPWRwKG8sYSx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSk6QXgoYSx0KSYmKGk9ZHAoYSxvLHQpLGUuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChpLHIsITAsITApKX19fWZ1bmN0aW9uIGJHKGUsdCxyLG4saSxvLGEpe3IuYmluZGluZ3M9ci5iaW5kaW5nc3x8W107bGV0IHM9e2tpbmQ6bix0YXJnZXQ6aSxwYXJ0czpvLGxpdGVyYWw6YSxpc0NvbXBvdW5kOm8ubGVuZ3RoIT09MX07aWYoci5iaW5kaW5ncy5wdXNoKHMpLHUxZShzKSl7bGV0e2V2ZW50OmMsbmVnYXRlOnV9PXMucGFydHNbMF07cy5saXN0ZW5lckV2ZW50PWN8fEl4KGkpKyItY2hhbmdlZCIscy5saXN0ZW5lck5lZ2F0ZT11fWxldCBsPXQubm9kZUluZm9MaXN0Lmxlbmd0aDtmb3IobGV0IGM9MDtjPHMucGFydHMubGVuZ3RoO2MrKyl7bGV0IHU9cy5wYXJ0c1tjXTt1LmNvbXBvdW5kSW5kZXg9YyxhMWUoZSx0LHMsdSxsKX19ZnVuY3Rpb24gYTFlKGUsdCxyLG4saSl7aWYoIW4ubGl0ZXJhbClpZihyLmtpbmQ9PT0iYXR0cmlidXRlIiYmci50YXJnZXRbMF09PT0iLSIpY29uc29sZS53YXJuKCJDYW5ub3Qgc2V0IGF0dHJpYnV0ZSAiK3IudGFyZ2V0KycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIHN0YXJ0aW5nIGNoYXJhY3RlcicpO2Vsc2V7bGV0IG89bi5kZXBlbmRlbmNpZXMsYT17aW5kZXg6aSxiaW5kaW5nOnIscGFydDpuLGV2YWx1YXRvcjplfTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGw9b1tzXTt0eXBlb2YgbD09InN0cmluZyImJihsPXhtdChsKSxsLndpbGRjYXJkPSEwKSxlLl9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0KHQsbC5yb290UHJvcGVydHkse2ZuOnMxZSxpbmZvOmEsdHJpZ2dlcjpsfSl9fX1mdW5jdGlvbiBzMWUoZSx0LHIsbixpLG8sYSl7bGV0IHM9YVtpLmluZGV4XSxsPWkuYmluZGluZyxjPWkucGFydDtpZihvJiZjLnNvdXJjZSYmdC5sZW5ndGg+Yy5zb3VyY2UubGVuZ3RoJiZsLmtpbmQ9PSJwcm9wZXJ0eSImJiFsLmlzQ29tcG91bmQmJnMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmcy5fX2RhdGFIYXNBY2Nlc3NvciYmcy5fX2RhdGFIYXNBY2Nlc3NvcltsLnRhcmdldF0pe2xldCB1PXJbdF07dD1kcChjLnNvdXJjZSxsLnRhcmdldCx0KSxzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCx1LCExLCEwKSYmZS5fZW5xdWV1ZUNsaWVudChzKX1lbHNle2xldCB1PWkuZXZhbHVhdG9yLl9ldmFsdWF0ZUJpbmRpbmcoZSxjLHQscixuLG8pO3UhPT1YTSYmbDFlKGUscyxsLGMsdSl9fWZ1bmN0aW9uIGwxZShlLHQscixuLGkpe2lmKGk9YzFlKHQsaSxyLG4pLFZNJiYoaT1WTShpLHIudGFyZ2V0LHIua2luZCx0KSksci5raW5kPT0iYXR0cmlidXRlIillLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZSh0LGksci50YXJnZXQpO2Vsc2V7bGV0IG89ci50YXJnZXQ7dC5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50JiZ0Ll9fZGF0YUhhc0FjY2Vzc29yJiZ0Ll9fZGF0YUhhc0FjY2Vzc29yW29dPyghdFt6ci5SRUFEX09OTFldfHwhdFt6ci5SRUFEX09OTFldW29dKSYmdC5fc2V0UGVuZGluZ1Byb3BlcnR5KG8saSkmJmUuX2VucXVldWVDbGllbnQodCk6ZS5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxvLGkpfX1mdW5jdGlvbiBjMWUoZSx0LHIsbil7aWYoci5pc0NvbXBvdW5kKXtsZXQgaT1lLl9fZGF0YUNvbXBvdW5kU3RvcmFnZVtyLnRhcmdldF07aVtuLmNvbXBvdW5kSW5kZXhdPXQsdD1pLmpvaW4oIiIpfXJldHVybiByLmtpbmQhPT0iYXR0cmlidXRlIiYmKHIudGFyZ2V0PT09InRleHRDb250ZW50Inx8ci50YXJnZXQ9PT0idmFsdWUiJiYoZS5sb2NhbE5hbWU9PT0iaW5wdXQifHxlLmxvY2FsTmFtZT09PSJ0ZXh0YXJlYSIpKSYmKHQ9dD09bnVsbD8iIjp0KSx0fWZ1bmN0aW9uIHUxZShlKXtyZXR1cm4gQm9vbGVhbihlLnRhcmdldCkmJmUua2luZCE9ImF0dHJpYnV0ZSImJmUua2luZCE9InRleHQiJiYhZS5pc0NvbXBvdW5kJiZlLnBhcnRzWzBdLm1vZGU9PT0ieyJ9ZnVuY3Rpb24gaDFlKGUsdCl7bGV0e25vZGVMaXN0OnIsbm9kZUluZm9MaXN0Om59PXQ7aWYobi5sZW5ndGgpZm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV0sYT1yW2ldLHM9by5iaW5kaW5ncztpZihzKWZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2YxZShhLGMpLHAxZShhLGUsYyl9YS5fX2RhdGFIb3N0PWV9fWZ1bmN0aW9uIGYxZShlLHQpe2lmKHQuaXNDb21wb3VuZCl7bGV0IHI9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fChlLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT17fSksbj10LnBhcnRzLGk9bmV3IEFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKylpW2FdPW5bYV0ubGl0ZXJhbDtsZXQgbz10LnRhcmdldDtyW29dPWksdC5saXRlcmFsJiZ0LmtpbmQ9PSJwcm9wZXJ0eSImJihvPT09ImNsYXNzTmFtZSImJihlPXVlKGUpKSxlW29dPXQubGl0ZXJhbCl9fWZ1bmN0aW9uIHAxZShlLHQscil7aWYoci5saXN0ZW5lckV2ZW50KXtsZXQgbj1yLnBhcnRzWzBdO2UuYWRkRXZlbnRMaXN0ZW5lcihyLmxpc3RlbmVyRXZlbnQsZnVuY3Rpb24oaSl7UXZlKGksdCxyLnRhcmdldCxuLnNvdXJjZSxuLm5lZ2F0ZSl9KX19ZnVuY3Rpb24gaG10KGUsdCxyLG4saSxvKXtvPXQuc3RhdGljfHxvJiYodHlwZW9mIG8hPSJvYmplY3QifHxvW3QubWV0aG9kTmFtZV0pO2xldCBhPXttZXRob2ROYW1lOnQubWV0aG9kTmFtZSxhcmdzOnQuYXJncyxtZXRob2RJbmZvOmksZHluYW1pY0ZuOm99O2ZvcihsZXQgcz0wLGw7czx0LmFyZ3MubGVuZ3RoJiYobD10LmFyZ3Nbc10pO3MrKylsLmxpdGVyYWx8fGUuX2FkZFByb3BlcnR5RWZmZWN0KGwucm9vdFByb3BlcnR5LHIse2ZuOm4saW5mbzphLHRyaWdnZXI6bH0pO3JldHVybiBvJiZlLl9hZGRQcm9wZXJ0eUVmZmVjdCh0Lm1ldGhvZE5hbWUscix7Zm46bixpbmZvOmF9KSxhfWZ1bmN0aW9uIFNHKGUsdCxyLG4saSl7bGV0IG89ZS5fbWV0aG9kSG9zdHx8ZSxhPW9baS5tZXRob2ROYW1lXTtpZihhKXtsZXQgcz1lLl9tYXJzaGFsQXJncyhpLmFyZ3MsdCxyKTtyZXR1cm4gcz09PVhNP1hNOmEuYXBwbHkobyxzKX1lbHNlIGkuZHluYW1pY0ZufHxjb25zb2xlLndhcm4oIm1ldGhvZCBgIitpLm1ldGhvZE5hbWUrImAgbm90IGRlZmluZWQiKX12YXIgZDFlPVtdLHZtdD0iKD86W2EtekEtWl8kXVtcXHcuOiRcXC0qXSopIixtMWU9Iig/OlstK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/KSIsZzFlPSIoPzonKD86W14nXFxcXF18XFxcXC4pKicpIixfMWU9Jyg/OiIoPzpbXiJcXFxcXXxcXFxcLikqIiknLHkxZT0iKD86IitnMWUrInwiK18xZSsiKSIsZm10PSIoPzooIit2bXQrInwiK20xZSsifCIreTFlKyIpXFxzKikiLHYxZT0iKD86IitmbXQrIig/OixcXHMqIitmbXQrIikqKSIseDFlPSIoPzpcXChcXHMqKD86Iit2MWUrIj8pXFwpXFxzKikiLGIxZT0iKCIrdm10KyJcXHMqIit4MWUrIj8pIix3MWU9IihcXFtcXFt8e3spXFxzKiIsUzFlPSIoPzpdXXx9fSkiLE0xZT0iKD86KCEpXFxzKik/IixFMWU9dzFlK00xZStiMWUrUzFlLHBtdD1uZXcgUmVnRXhwKEUxZSwiZyIpO2Z1bmN0aW9uIGRtdChlKXtsZXQgdD0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1lW3JdLmxpdGVyYWx8fCIiO3JldHVybiB0fWZ1bmN0aW9uIHdHKGUpe2xldCB0PWUubWF0Y2goLyhbXlxzXSs/KVwoKFtcc1xTXSopXCkvKTtpZih0KXtsZXQgbj17bWV0aG9kTmFtZTp0WzFdLHN0YXRpYzohMCxhcmdzOmQxZX07aWYodFsyXS50cmltKCkpe2xldCBpPXRbMl0ucmVwbGFjZSgvXFwsL2csIiZjb21tYTsiKS5zcGxpdCgiLCIpO3JldHVybiBUMWUoaSxuKX1lbHNlIHJldHVybiBufXJldHVybiBudWxsfWZ1bmN0aW9uIFQxZShlLHQpe3JldHVybiB0LmFyZ3M9ZS5tYXAoZnVuY3Rpb24ocil7bGV0IG49eG10KHIpO3JldHVybiBuLmxpdGVyYWx8fCh0LnN0YXRpYz0hMSksbn0sdGhpcyksdH1mdW5jdGlvbiB4bXQoZSl7bGV0IHQ9ZS50cmltKCkucmVwbGFjZSgvJmNvbW1hOy9nLCIsIikucmVwbGFjZSgvXFwoLikvZywiJDEiKSxyPXtuYW1lOnQsdmFsdWU6IiIsbGl0ZXJhbDohMX0sbj10WzBdO3N3aXRjaChuPT09Ii0iJiYobj10WzFdKSxuPj0iMCImJm48PSI5IiYmKG49IiMiKSxuKXtjYXNlIiciOmNhc2UnIic6ci52YWx1ZT10LnNsaWNlKDEsLTEpLHIubGl0ZXJhbD0hMDticmVhaztjYXNlIiMiOnIudmFsdWU9TnVtYmVyKHQpLHIubGl0ZXJhbD0hMDticmVha31yZXR1cm4gci5saXRlcmFsfHwoci5yb290UHJvcGVydHk9YXUodCksci5zdHJ1Y3R1cmVkPURJKHQpLHIuc3RydWN0dXJlZCYmKHIud2lsZGNhcmQ9dC5zbGljZSgtMik9PSIuKiIsci53aWxkY2FyZCYmKHIubmFtZT10LnNsaWNlKDAsLTIpKSkpLHJ9ZnVuY3Rpb24gbW10KGUsdCxyKXtsZXQgbj1ObyhlLHIpO3JldHVybiBuPT09dm9pZCAwJiYobj10W3JdKSxufWZ1bmN0aW9uIGJtdChlLHQscixuKXtsZXQgaT17aW5kZXhTcGxpY2VzOm59O2tJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJih0LnNwbGljZXM9aSksZS5ub3RpZnlQYXRoKHIrIi5zcGxpY2VzIixpKSxlLm5vdGlmeVBhdGgocisiLmxlbmd0aCIsdC5sZW5ndGgpLGtJJiYhZS5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJihpLmluZGV4U3BsaWNlcz1bXSl9ZnVuY3Rpb24gR00oZSx0LHIsbixpLG8pe2JtdChlLHQscixbe2luZGV4Om4sYWRkZWRDb3VudDppLHJlbW92ZWQ6byxvYmplY3Q6dCx0eXBlOiJzcGxpY2UifV0pfWZ1bmN0aW9uIEMxZShlKXtyZXR1cm4gZVswXS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpfXZhciB1Xz1SbihlPT57bGV0IHQ9bG10KEhJKGUpKTtjbGFzcyByIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzUHJvcGVydHlFZmZlY3RzQ2xpZW50PSEwLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5LHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMsdGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzLHRoaXMuX19kYXRhSGFzUGF0aHMsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2UsdGhpcy5fX2RhdGFIb3N0LHRoaXMuX19kYXRhVGVtcCx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZCx0aGlzLl9fZGF0YSx0aGlzLl9fZGF0YVBlbmRpbmcsdGhpcy5fX2RhdGFPbGQsdGhpcy5fX2NvbXB1dGVFZmZlY3RzLHRoaXMuX19jb21wdXRlSW5mbyx0aGlzLl9fcmVmbGVjdEVmZmVjdHMsdGhpcy5fX25vdGlmeUVmZmVjdHMsdGhpcy5fX3Byb3BhZ2F0ZUVmZmVjdHMsdGhpcy5fX29ic2VydmVFZmZlY3RzLHRoaXMuX19yZWFkT25seSx0aGlzLl9fdGVtcGxhdGVJbmZvLHRoaXMuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkfWdldCBQUk9QRVJUWV9FRkZFQ1RfVFlQRVMoKXtyZXR1cm4genJ9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5fcmVnaXN0ZXJIb3N0KCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITEsdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsLHRoaXMuX19kYXRhVG9Ob3RpZnk9bnVsbCx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPW51bGwsdGhpcy5fX2RhdGFIYXNQYXRocz0hMSx0aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZT10aGlzLl9fZGF0YUNvbXBvdW5kU3RvcmFnZXx8bnVsbCx0aGlzLl9fZGF0YUhvc3Q9dGhpcy5fX2RhdGFIb3N0fHxudWxsLHRoaXMuX19kYXRhVGVtcD17fSx0aGlzLl9fZGF0YUNsaWVudHNJbml0aWFsaXplZD0hMX1fcmVnaXN0ZXJIb3N0KCl7aWYoV00ubGVuZ3RoKXtsZXQgaT1XTVtXTS5sZW5ndGgtMV07aS5fZW5xdWV1ZUNsaWVudCh0aGlzKSx0aGlzLl9fZGF0YUhvc3Q9aX19X2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXMoaSl7dGhpcy5fX2RhdGE9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YVBlbmRpbmc9T2JqZWN0LmNyZWF0ZShpKSx0aGlzLl9fZGF0YU9sZD17fX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhpKXtsZXQgbz10aGlzW3pyLlJFQURfT05MWV07Zm9yKGxldCBhIGluIGkpKCFvfHwhb1thXSkmJih0aGlzLl9fZGF0YVBlbmRpbmc9dGhpcy5fX2RhdGFQZW5kaW5nfHx7fSx0aGlzLl9fZGF0YU9sZD10aGlzLl9fZGF0YU9sZHx8e30sdGhpcy5fX2RhdGFbYV09dGhpcy5fX2RhdGFQZW5kaW5nW2FdPWlbYV0pfV9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihpLG89PXpyLlJFQURfT05MWSk7bGV0IHM9eEcodGhpcyxvLCEwKVtpXTtzfHwocz10aGlzW29dW2ldPVtdKSxzLnB1c2goYSl9X3JlbW92ZVByb3BlcnR5RWZmZWN0KGksbyxhKXtsZXQgcz14Ryh0aGlzLG8sITApW2ldLGw9cy5pbmRleE9mKGEpO2w+PTAmJnMuc3BsaWNlKGwsMSl9X2hhc1Byb3BlcnR5RWZmZWN0KGksbyl7bGV0IGE9dGhpc1tvXTtyZXR1cm4gQm9vbGVhbihhJiZhW2ldKX1faGFzUmVhZE9ubHlFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVBRF9PTkxZKX1faGFzTm90aWZ5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSl9X2hhc1JlZmxlY3RFZmZlY3QoaSl7cmV0dXJuIHRoaXMuX2hhc1Byb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCl9X2hhc0NvbXB1dGVkRWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLkNPTVBVVEUpfV9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLGEscyl7aWYoc3x8YXUoQXJyYXkuaXNBcnJheShpKT9pWzBdOmkpIT09aSl7aWYoIXMpe2xldCBsPU5vKHRoaXMsaSk7aWYoaT15Ryh0aGlzLGksbyksIWl8fCFzdXBlci5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGwpKXJldHVybiExfWlmKHRoaXMuX19kYXRhSGFzUGF0aHM9ITAsdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKSlyZXR1cm4gbzFlKHRoaXMsaSxvKSwhMH1lbHNle2lmKHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV0pcmV0dXJuIHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSk7dGhpc1tpXT1vfXJldHVybiExfV9zZXRVbm1hbmFnZWRQcm9wZXJ0eVRvTm9kZShpLG8sYSl7KGEhPT1pW29dfHx0eXBlb2YgYT09Im9iamVjdCIpJiYobz09PSJjbGFzc05hbWUiJiYoaT11ZShpKSksaVtvXT1hKX1fc2V0UGVuZGluZ1Byb3BlcnR5KGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzJiZESShpKSxsPXM/dGhpcy5fX2RhdGFUZW1wOnRoaXMuX19kYXRhO3JldHVybiB0aGlzLl9zaG91bGRQcm9wZXJ0eUNoYW5nZShpLG8sbFtpXSk/KHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksaSBpbiB0aGlzLl9fZGF0YU9sZHx8KHRoaXMuX19kYXRhT2xkW2ldPXRoaXMuX19kYXRhW2ldKSxzP3RoaXMuX19kYXRhVGVtcFtpXT1vOnRoaXMuX19kYXRhW2ldPW8sdGhpcy5fX2RhdGFQZW5kaW5nW2ldPW8sKHN8fHRoaXNbenIuTk9USUZZXSYmdGhpc1t6ci5OT1RJRlldW2ldKSYmKHRoaXMuX19kYXRhVG9Ob3RpZnk9dGhpcy5fX2RhdGFUb05vdGlmeXx8e30sdGhpcy5fX2RhdGFUb05vdGlmeVtpXT1hKSwhMCk6ITF9X3NldFByb3BlcnR5KGksbyl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFSZWFkeSYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2VucXVldWVDbGllbnQoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzfHxbXSxpIT09dGhpcyYmdGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cy5wdXNoKGkpfV9mbHVzaENsaWVudHMoKXt0aGlzLl9fZGF0YUNsaWVudHNSZWFkeT90aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKToodGhpcy5fX2RhdGFDbGllbnRzUmVhZHk9ITAsdGhpcy5fcmVhZHlDbGllbnRzKCksdGhpcy5fX2RhdGFSZWFkeT0hMCl9X19lbmFibGVPckZsdXNoQ2xpZW50cygpe2xldCBpPXRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM7aWYoaSl7dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50cz1udWxsO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2EuX19kYXRhRW5hYmxlZD9hLl9fZGF0YVBlbmRpbmcmJmEuX2ZsdXNoUHJvcGVydGllcygpOmEuX2VuYWJsZVByb3BlcnRpZXMoKX19fV9yZWFkeUNsaWVudHMoKXt0aGlzLl9fZW5hYmxlT3JGbHVzaENsaWVudHMoKX1zZXRQcm9wZXJ0aWVzKGksbyl7Zm9yKGxldCBhIGluIGkpKG98fCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1bYV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYSxpW2FdLCEwKTt0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfXJlYWR5KCl7dGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCksdGhpcy5fX2RhdGFDbGllbnRzUmVhZHl8fHRoaXMuX2ZsdXNoQ2xpZW50cygpLHRoaXMuX19kYXRhUGVuZGluZyYmdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X3Byb3BlcnRpZXNDaGFuZ2VkKGksbyxhKXtsZXQgcz10aGlzLl9fZGF0YUhhc1BhdGhzO3RoaXMuX19kYXRhSGFzUGF0aHM9ITE7bGV0IGw7ZTFlKHRoaXMsbyxhLHMpLGw9dGhpcy5fX2RhdGFUb05vdGlmeSx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKG8sYSxzKSx0aGlzLl9mbHVzaENsaWVudHMoKSxZTSh0aGlzLHRoaXNbenIuUkVGTEVDVF0sbyxhLHMpLFlNKHRoaXMsdGhpc1t6ci5PQlNFUlZFXSxvLGEscyksbCYmS3ZlKHRoaXMsbCxvLGEscyksdGhpcy5fX2RhdGFDb3VudGVyPT0xJiYodGhpcy5fX2RhdGFUZW1wPXt9KX1fcHJvcGFnYXRlUHJvcGVydHlDaGFuZ2VzKGksbyxhKXt0aGlzW3pyLlBST1BBR0FURV0mJllNKHRoaXMsdGhpc1t6ci5QUk9QQUdBVEVdLGksbyxhKSx0aGlzLl9fdGVtcGxhdGVJbmZvJiZ0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlSW5mbyxpLG8sYSl9X3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShpLG8sYSxzKXtsZXQgbD0oYyx1KT0+e1lNKHRoaXMsaS5wcm9wZXJ0eUVmZmVjdHMsYyxhLHUsaS5ub2RlTGlzdCk7Zm9yKGxldCBoPWkuZmlyc3RDaGlsZDtoO2g9aC5uZXh0U2libGluZyl0aGlzLl9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaCxjLGEsdSl9O2kucnVuRWZmZWN0cz9pLnJ1bkVmZmVjdHMobCxvLHMpOmwobyxzKX1saW5rUGF0aHMoaSxvKXtpPVB4KGkpLG89UHgobyksdGhpcy5fX2RhdGFMaW5rZWRQYXRocz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzfHx7fSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2ldPW99dW5saW5rUGF0aHMoaSl7aT1QeChpKSx0aGlzLl9fZGF0YUxpbmtlZFBhdGhzJiZkZWxldGUgdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXX1ub3RpZnlTcGxpY2VzKGksbyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpO2JtdCh0aGlzLHMsYS5wYXRoLG8pfWdldChpLG8pe3JldHVybiBObyhvfHx0aGlzLGkpfXNldChpLG8sYSl7YT95RyhhLGksbyk6KCF0aGlzW3pyLlJFQURfT05MWV18fCF0aGlzW3pyLlJFQURfT05MWV1baV0pJiZ0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxvLCEwKSYmdGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1wdXNoKGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy5sZW5ndGgsYz1zLnB1c2goLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLGwsby5sZW5ndGgsW10pLGN9cG9wKGkpe2xldCBvPXtwYXRoOiIifSxhPU5vKHRoaXMsaSxvKSxzPUJvb2xlYW4oYS5sZW5ndGgpLGw9YS5wb3AoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCxhLmxlbmd0aCwwLFtsXSksbH1zcGxpY2UoaSxvLGEsLi4ucyl7bGV0IGw9e3BhdGg6IiJ9LGM9Tm8odGhpcyxpLGwpO288MD9vPWMubGVuZ3RoLU1hdGguZmxvb3IoLW8pOm8mJihvPU1hdGguZmxvb3IobykpO2xldCB1O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09Mj91PWMuc3BsaWNlKG8pOnU9Yy5zcGxpY2UobyxhLC4uLnMpLChzLmxlbmd0aHx8dS5sZW5ndGgpJiZHTSh0aGlzLGMsbC5wYXRoLG8scy5sZW5ndGgsdSksdX1zaGlmdChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEuc2hpZnQoKTtyZXR1cm4gcyYmR00odGhpcyxhLG8ucGF0aCwwLDAsW2xdKSxsfXVuc2hpZnQoaSwuLi5vKXtsZXQgYT17cGF0aDoiIn0scz1Obyh0aGlzLGksYSksbD1zLnVuc2hpZnQoLi4ubyk7cmV0dXJuIG8ubGVuZ3RoJiZHTSh0aGlzLHMsYS5wYXRoLDAsby5sZW5ndGgsW10pLGx9bm90aWZ5UGF0aChpLG8pe2xldCBhO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTEpe2xldCBzPXtwYXRoOiIifTtvPU5vKHRoaXMsaSxzKSxhPXMucGF0aH1lbHNlIEFycmF5LmlzQXJyYXkoaSk/YT1QeChpKTphPWk7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsbywhMCwhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSksbyYmKHRoaXNbIl9zZXQiK0MxZShpKV09ZnVuY3Rpb24oYSl7dGhpcy5fc2V0UHJvcGVydHkoaSxhKX0pfV9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKXtsZXQgcz17cHJvcGVydHk6aSxtZXRob2Q6byxkeW5hbWljRm46Qm9vbGVhbihhKX07dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5PQlNFUlZFLHtmbjpjbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6aX19KSxhJiZ0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChvLHpyLk9CU0VSVkUse2ZuOmNtdCxpbmZvOnMsdHJpZ2dlcjp7bmFtZTpvfX0pfV9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe2xldCBhPXdHKGkpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIG9ic2VydmVyIGV4cHJlc3Npb24gJyIraSsiJyIpO2htdCh0aGlzLGEsenIuT0JTRVJWRSxTRyxudWxsLG8pfV9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChpLHpyLk5PVElGWSx7Zm46SnZlLGluZm86e2V2ZW50TmFtZTpJeChpKSsiLWNoYW5nZWQiLHByb3BlcnR5Oml9fSl9X2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpe2xldCBvPXRoaXMuY29uc3RydWN0b3IuYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KGkpO29bMF09PT0iLSI/Y29uc29sZS53YXJuKCJQcm9wZXJ0eSAiK2krIiBjYW5ub3QgYmUgcmVmbGVjdGVkIHRvIGF0dHJpYnV0ZSAiK28rJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBzdGFydGluZyBhdHRyaWJ1dGUgbmFtZS4gVXNlIGEgbG93ZXJjYXNlIGZpcnN0IGxldHRlciBmb3IgdGhlIHByb3BlcnR5IGluc3RlYWQuJyk6dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUZMRUNULHtmbjp0MWUsaW5mbzp7YXR0ck5hbWU6b319KX1fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl7bGV0IHM9d0cobyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgY29tcHV0ZWQgZXhwcmVzc2lvbiAnIitvKyInIik7bGV0IGw9aG10KHRoaXMscyx6ci5DT01QVVRFLHltdCxpLGEpO3hHKHRoaXMsZ210KVtpXT1sfV9tYXJzaGFsQXJncyhpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGEsbD1bXTtmb3IobGV0IGM9MCx1PWkubGVuZ3RoO2M8dTtjKyspe2xldHtuYW1lOmgsc3RydWN0dXJlZDpmLHdpbGRjYXJkOnAsdmFsdWU6ZCxsaXRlcmFsOmd9PWlbY107aWYoIWcpaWYocCl7bGV0IF89QXgoaCxvKSx5PW1tdChzLGEsXz9vOmgpO2Q9e3BhdGg6Xz9vOmgsdmFsdWU6eSxiYXNlOl8/Tm8ocyxoKTp5fX1lbHNlIGQ9Zj9tbXQocyxhLGgpOnNbaF07aWYoa0kmJiF0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZCYmZD09PXZvaWQgMCYmaS5sZW5ndGg+MSlyZXR1cm4gWE07bFtjXT1kfXJldHVybiBsfXN0YXRpYyBhZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KGksbyxhKX1zdGF0aWMgY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpfXN0YXRpYyBjcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pe3RoaXMucHJvdG90eXBlLl9jcmVhdGVNZXRob2RPYnNlcnZlcihpLG8pfXN0YXRpYyBjcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVhZE9ubHlQcm9wZXJ0eShpLG8pfXN0YXRpYyBjcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl9c3RhdGljIGNyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKX1zdGF0aWMgYmluZFRlbXBsYXRlKGkpe3JldHVybiB0aGlzLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGkpfV9iaW5kVGVtcGxhdGUoaSxvKXtsZXQgYT10aGlzLmNvbnN0cnVjdG9yLl9wYXJzZVRlbXBsYXRlKGkpLHM9dGhpcy5fX3ByZUJvdW5kVGVtcGxhdGVJbmZvPT1hO2lmKCFzKWZvcihsZXQgbCBpbiBhLnByb3BlcnR5RWZmZWN0cyl0aGlzLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKGwpO2lmKG8paWYoYT1PYmplY3QuY3JlYXRlKGEpLGEud2FzUHJlQm91bmQ9cywhdGhpcy5fX3RlbXBsYXRlSW5mbyl0aGlzLl9fdGVtcGxhdGVJbmZvPWE7ZWxzZXtsZXQgbD1pLl9wYXJlbnRUZW1wbGF0ZUluZm98fHRoaXMuX190ZW1wbGF0ZUluZm8sYz1sLmxhc3RDaGlsZDthLnBhcmVudD1sLGwubGFzdENoaWxkPWEsYS5wcmV2aW91c1NpYmxpbmc9YyxjP2MubmV4dFNpYmxpbmc9YTpsLmZpcnN0Q2hpbGQ9YX1lbHNlIHRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz1hO3JldHVybiBhfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9aS5ob3N0UHJvcHM9aS5ob3N0UHJvcHN8fHt9O3Nbb109ITA7bGV0IGw9aS5wcm9wZXJ0eUVmZmVjdHM9aS5wcm9wZXJ0eUVmZmVjdHN8fHt9OyhsW29dPWxbb118fFtdKS5wdXNoKGEpfV9zdGFtcFRlbXBsYXRlKGksbyl7bz1vfHx0aGlzLl9iaW5kVGVtcGxhdGUoaSwhMCksV00ucHVzaCh0aGlzKTtsZXQgYT1zdXBlci5fc3RhbXBUZW1wbGF0ZShpLG8pO2lmKFdNLnBvcCgpLG8ubm9kZUxpc3Q9YS5ub2RlTGlzdCwhby53YXNQcmVCb3VuZCl7bGV0IHM9by5jaGlsZE5vZGVzPVtdO2ZvcihsZXQgbD1hLmZpcnN0Q2hpbGQ7bDtsPWwubmV4dFNpYmxpbmcpcy5wdXNoKGwpfXJldHVybiBhLnRlbXBsYXRlSW5mbz1vLGgxZSh0aGlzLG8pLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5JiYodGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKG8sdGhpcy5fX2RhdGEsbnVsbCwhMSksdGhpcy5fZmx1c2hDbGllbnRzKCkpLGF9X3JlbW92ZUJvdW5kRG9tKGkpe2xldCBvPWkudGVtcGxhdGVJbmZvLHtwcmV2aW91c1NpYmxpbmc6YSxuZXh0U2libGluZzpzLHBhcmVudDpsfT1vO2E/YS5uZXh0U2libGluZz1zOmwmJihsLmZpcnN0Q2hpbGQ9cykscz9zLnByZXZpb3VzU2libGluZz1hOmwmJihsLmxhc3RDaGlsZD1hKSxvLm5leHRTaWJsaW5nPW8ucHJldmlvdXNTaWJsaW5nPW51bGw7bGV0IGM9by5jaGlsZE5vZGVzO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKXtsZXQgaD1jW3VdO3VlKHVlKGgpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKGgpfX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTm9kZS5jYWxsKHRoaXMsaSxvLGEpO2lmKGkubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bGV0IGw9dGhpcy5fcGFyc2VCaW5kaW5ncyhpLnRleHRDb250ZW50LG8pO2wmJihpLnRleHRDb250ZW50PWRtdChsKXx8IiAiLGJHKHRoaXMsbyxhLCJ0ZXh0IiwidGV4dENvbnRlbnQiLGwpLHM9ITApfXJldHVybiBzfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGVBdHRyaWJ1dGUoaSxvLGEscyxsKXtsZXQgYz10aGlzLl9wYXJzZUJpbmRpbmdzKGwsbyk7aWYoYyl7bGV0IHU9cyxoPSJwcm9wZXJ0eSI7WHZlLnRlc3Qocyk/aD0iYXR0cmlidXRlIjpzW3MubGVuZ3RoLTFdPT0iJCImJihzPXMuc2xpY2UoMCwtMSksaD0iYXR0cmlidXRlIik7bGV0IGY9ZG10KGMpO3JldHVybiBmJiZoPT0iYXR0cmlidXRlIiYmKHM9PSJjbGFzcyImJmkuaGFzQXR0cmlidXRlKCJjbGFzcyIpJiYoZis9IiAiK2kuZ2V0QXR0cmlidXRlKHMpKSxpLnNldEF0dHJpYnV0ZShzLGYpKSxoPT0iYXR0cmlidXRlIiYmdT09ImRpc2FibGUtdXBncmFkZSQiJiZpLnNldEF0dHJpYnV0ZShzLCIiKSxpLmxvY2FsTmFtZT09PSJpbnB1dCImJnU9PT0idmFsdWUiJiZpLnNldEF0dHJpYnV0ZSh1LCIiKSxpLnJlbW92ZUF0dHJpYnV0ZSh1KSxoPT09InByb3BlcnR5IiYmKHM9d20ocykpLGJHKHRoaXMsbyxhLGgscyxjLGYpLCEwfWVsc2UgcmV0dXJuIHQuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlLmNhbGwodGhpcyxpLG8sYSxzLGwpfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKGksbyxhKXtsZXQgcz10Ll9wYXJzZVRlbXBsYXRlTmVzdGVkVGVtcGxhdGUuY2FsbCh0aGlzLGksbyxhKSxsPWkucGFyZW50Tm9kZSxjPWEudGVtcGxhdGVJbmZvLHU9bC5sb2NhbE5hbWU9PT0iZG9tLWlmIixoPWwubG9jYWxOYW1lPT09ImRvbS1yZXBlYXQiO3BHJiYodXx8aCkmJihsLnJlbW92ZUNoaWxkKGkpLGE9YS5wYXJlbnRJbmZvLGEudGVtcGxhdGVJbmZvPWMsYS5ub3RlZD0hMCxzPSExKTtsZXQgZj1jLmhvc3RQcm9wcztpZihSSSYmdSlmJiYoby5ob3N0UHJvcHM9T2JqZWN0LmFzc2lnbihvLmhvc3RQcm9wc3x8e30sZikscEd8fChhLnBhcmVudEluZm8ubm90ZWQ9ITApKTtlbHNle2xldCBwPSJ7Ijtmb3IobGV0IGQgaW4gZil7bGV0IGc9W3ttb2RlOnAsc291cmNlOmQsZGVwZW5kZW5jaWVzOltkXSxob3N0UHJvcDohMH1dO2JHKHRoaXMsbyxhLCJwcm9wZXJ0eSIsIl9ob3N0XyIrZCxnKX19cmV0dXJuIHN9c3RhdGljIF9wYXJzZUJpbmRpbmdzKGksbyl7bGV0IGE9W10scz0wLGw7Zm9yKDsobD1wbXQuZXhlYyhpKSkhPT1udWxsOyl7bC5pbmRleD5zJiZhLnB1c2goe2xpdGVyYWw6aS5zbGljZShzLGwuaW5kZXgpfSk7bGV0IGM9bFsxXVswXSx1PUJvb2xlYW4obFsyXSksaD1sWzNdLnRyaW0oKSxmPSExLHA9IiIsZD0tMTtjPT0ieyImJihkPWguaW5kZXhPZigiOjoiKSk+MCYmKHA9aC5zdWJzdHJpbmcoZCsyKSxoPWguc3Vic3RyaW5nKDAsZCksZj0hMCk7bGV0IGc9d0coaCksXz1bXTtpZihnKXtsZXR7YXJnczp5LG1ldGhvZE5hbWU6eH09Zztmb3IobGV0IFM9MDtTPHkubGVuZ3RoO1MrKyl7bGV0IEM9eVtTXTtDLmxpdGVyYWx8fF8ucHVzaChDKX1sZXQgYj1vLmR5bmFtaWNGbnM7KGImJmJbeF18fGcuc3RhdGljKSYmKF8ucHVzaCh4KSxnLmR5bmFtaWNGbj0hMCl9ZWxzZSBfLnB1c2goaCk7YS5wdXNoKHtzb3VyY2U6aCxtb2RlOmMsbmVnYXRlOnUsY3VzdG9tRXZlbnQ6ZixzaWduYXR1cmU6ZyxkZXBlbmRlbmNpZXM6XyxldmVudDpwfSkscz1wbXQubGFzdEluZGV4fWlmKHMmJnM8aS5sZW5ndGgpe2xldCBjPWkuc3Vic3RyaW5nKHMpO2MmJmEucHVzaCh7bGl0ZXJhbDpjfSl9cmV0dXJuIGEubGVuZ3RoP2E6bnVsbH1zdGF0aWMgX2V2YWx1YXRlQmluZGluZyhpLG8sYSxzLGwsYyl7bGV0IHU7cmV0dXJuIG8uc2lnbmF0dXJlP3U9U0coaSxhLHMsbCxvLnNpZ25hdHVyZSk6YSE9by5zb3VyY2U/dT1ObyhpLG8uc291cmNlKTpjJiZESShhKT91PU5vKGksYSk6dT1pLl9fZGF0YVthXSxvLm5lZ2F0ZSYmKHU9IXUpLHV9fXJldHVybiByfSksV009W107dmFyIEExZT0wO2Z1bmN0aW9uIHdtdCgpe0ExZSsrfXZhciBQMWU9W107ZnVuY3Rpb24gVkkoZSl7UDFlLnB1c2goZSl9ZnVuY3Rpb24gSTFlKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO3Rbcl09dHlwZW9mIG49PSJmdW5jdGlvbiI/e3R5cGU6bn06bn1yZXR1cm4gdH12YXIgU210PVJuKGU9PntsZXQgdD1GSShlKTtmdW5jdGlvbiByKG8pe2xldCBhPU9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtyZXR1cm4gYS5wcm90b3R5cGUgaW5zdGFuY2VvZiBpP2E6bnVsbH1mdW5jdGlvbiBuKG8pe2lmKCFvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb3duUHJvcGVydGllcyIsbykpKXtsZXQgYT1udWxsO2lmKG8uaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgicHJvcGVydGllcyIsbykpKXtsZXQgcz1vLnByb3BlcnRpZXM7cyYmKGE9STFlKHMpKX1vLl9fb3duUHJvcGVydGllcz1hfXJldHVybiBvLl9fb3duUHJvcGVydGllc31jbGFzcyBpIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSkpe1ZJKHRoaXMucHJvdG90eXBlKTtsZXQgYT10aGlzLl9wcm9wZXJ0aWVzO3RoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9YT9PYmplY3Qua2V5cyhhKS5tYXAocz0+dGhpcy5wcm90b3R5cGUuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAocykpOltdfXJldHVybiB0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBmaW5hbGl6ZSgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fZmluYWxpemVkIix0aGlzKSkpe2xldCBhPXIodGhpcyk7YSYmYS5maW5hbGl6ZSgpLHRoaXMuX19maW5hbGl6ZWQ9ITAsdGhpcy5fZmluYWxpemVDbGFzcygpfX1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXtsZXQgYT1uKHRoaXMpO2EmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhhKX1zdGF0aWMgZ2V0IF9wcm9wZXJ0aWVzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0aWVzIix0aGlzKSkpe2xldCBhPXIodGhpcyk7dGhpcy5fX3Byb3BlcnRpZXM9T2JqZWN0LmFzc2lnbih7fSxhJiZhLl9wcm9wZXJ0aWVzLG4odGhpcykpfXJldHVybiB0aGlzLl9fcHJvcGVydGllc31zdGF0aWMgdHlwZUZvclByb3BlcnR5KGEpe2xldCBzPXRoaXMuX3Byb3BlcnRpZXNbYV07cmV0dXJuIHMmJnMudHlwZX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt3bXQoKSx0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIGl9KTt2YXIgTW10PSIzLjQuMSIsVUk9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuY3NzQnVpbGQsU209Um4oZT0+e2xldCB0PVNtdCh1XyhlKSk7ZnVuY3Rpb24gcihsKXtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX3Byb3BlcnR5RGVmYXVsdHMiLGwpKSl7bC5fX3Byb3BlcnR5RGVmYXVsdHM9bnVsbDtsZXQgYz1sLl9wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBjKXtsZXQgaD1jW3VdOyJ2YWx1ZSJpbiBoJiYobC5fX3Byb3BlcnR5RGVmYXVsdHM9bC5fX3Byb3BlcnR5RGVmYXVsdHN8fHt9LGwuX19wcm9wZXJ0eURlZmF1bHRzW3VdPWgpfX1yZXR1cm4gbC5fX3Byb3BlcnR5RGVmYXVsdHN9ZnVuY3Rpb24gbihsKXtyZXR1cm4gbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293bk9ic2VydmVycyIsbCkpfHwobC5fX293bk9ic2VydmVycz1sLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIm9ic2VydmVycyIsbCkpP2wub2JzZXJ2ZXJzOm51bGwpLGwuX19vd25PYnNlcnZlcnN9ZnVuY3Rpb24gaShsLGMsdSxoKXt1LmNvbXB1dGVkJiYodS5yZWFkT25seT0hMCksdS5jb21wdXRlZCYmKGwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2NvbnNvbGUud2FybihgQ2Fubm90IHJlZGVmaW5lIGNvbXB1dGVkIHByb3BlcnR5ICcke2N9Jy5gKTpsLl9jcmVhdGVDb21wdXRlZFByb3BlcnR5KGMsdS5jb21wdXRlZCxoKSksdS5yZWFkT25seSYmIWwuX2hhc1JlYWRPbmx5RWZmZWN0KGMpP2wuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoYywhdS5jb21wdXRlZCk6dS5yZWFkT25seT09PSExJiZsLl9oYXNSZWFkT25seUVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWFkT25seSBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlYWRPbmx5LmApLHUucmVmbGVjdFRvQXR0cmlidXRlJiYhbC5faGFzUmVmbGVjdEVmZmVjdChjKT9sLl9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShjKTp1LnJlZmxlY3RUb0F0dHJpYnV0ZT09PSExJiZsLl9oYXNSZWZsZWN0RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIHJlZmxlY3RlZCBwcm9wZXJ0eSAnJHtjfScgbm9uLXJlZmxlY3RlZC5gKSx1Lm5vdGlmeSYmIWwuX2hhc05vdGlmeUVmZmVjdChjKT9sLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eShjKTp1Lm5vdGlmeT09PSExJiZsLl9oYXNOb3RpZnlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2Ugbm90aWZ5IHByb3BlcnR5ICcke2N9JyBub24tbm90aWZ5LmApLHUub2JzZXJ2ZXImJmwuX2NyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoYyx1Lm9ic2VydmVyLGhbdS5vYnNlcnZlcl0pLGwuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAoYyl9ZnVuY3Rpb24gbyhsLGMsdSxoKXtpZighVUkpe2xldCBmPWMuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHA9TkkoYyksZD1RZHQodSksZz1jLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7Zm9yKGxldCB5PTA7eTxkLmxlbmd0aDt5Kyspe2xldCB4PWRbeV07eC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCksYy5jb250ZW50Lmluc2VydEJlZm9yZSh4LGcpfWxldCBfPTA7Zm9yKGxldCB5PTA7eTxwLmxlbmd0aDt5Kyspe2xldCB4PXBbeV0sYj1mW19dO2IhPT14Pyh4PXguY2xvbmVOb2RlKCEwKSxiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHgsYikpOl8rKyx4LnRleHRDb250ZW50PWwuX3Byb2Nlc3NTdHlsZVRleHQoeC50ZXh0Q29udGVudCxoKX19aWYod2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKGMsdSksWWR0JiZVSSYmSGR0KXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtpZihmKXtsZXQgcD0iIjtBcnJheS5mcm9tKGYpLmZvckVhY2goZD0+e3ArPWQudGV4dENvbnRlbnQsZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpfSksbC5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCxsLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHApfX19ZnVuY3Rpb24gYShsKXtsZXQgYz1udWxsO2lmKGwmJighaXV8fHFkdCkmJihjPW91LmltcG9ydChsLCJ0ZW1wbGF0ZSIpLGl1JiYhYykpdGhyb3cgbmV3IEVycm9yKGBzdHJpY3RUZW1wbGF0ZVBvbGljeTogZXhwZWN0aW5nIGRvbS1tb2R1bGUgb3IgbnVsbCB0ZW1wbGF0ZSBmb3IgJHtsfWApO3JldHVybiBjfWNsYXNzIHMgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcG9seW1lckVsZW1lbnRWZXJzaW9uKCl7cmV0dXJuIE1tdH1zdGF0aWMgX2ZpbmFsaXplQ2xhc3MoKXt0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7bGV0IGM9bih0aGlzKTtjJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhjLHRoaXMuX3Byb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfXN0YXRpYyBfcHJlcGFyZVRlbXBsYXRlKCl7bGV0IGM9dGhpcy50ZW1wbGF0ZTtjJiYodHlwZW9mIGM9PSJzdHJpbmciPyhjb25zb2xlLmVycm9yKCJ0ZW1wbGF0ZSBnZXR0ZXIgbXVzdCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCIpLGM9bnVsbCk6cHB8fChjPWMuY2xvbmVOb2RlKCEwKSkpLHRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZT1jfXN0YXRpYyBjcmVhdGVQcm9wZXJ0aWVzKGMpe2ZvcihsZXQgdSBpbiBjKWkodGhpcy5wcm90b3R5cGUsdSxjW3VdLGMpfXN0YXRpYyBjcmVhdGVPYnNlcnZlcnMoYyx1KXtsZXQgaD10aGlzLnByb3RvdHlwZTtmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyloLl9jcmVhdGVNZXRob2RPYnNlcnZlcihjW2ZdLHUpfXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfdGVtcGxhdGUiLHRoaXMpKSl7bGV0IGM9dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzLnByb3RvdHlwZSkpP3RoaXMucHJvdG90eXBlLl90ZW1wbGF0ZTp2b2lkIDA7dGhpcy5fdGVtcGxhdGU9YyE9PXZvaWQgMD9jOnRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXMiLHRoaXMpKSYmYSh0aGlzLmlzKXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5jb25zdHJ1Y3Rvci50ZW1wbGF0ZX1yZXR1cm4gdGhpcy5fdGVtcGxhdGV9c3RhdGljIHNldCB0ZW1wbGF0ZShjKXt0aGlzLl90ZW1wbGF0ZT1jfXN0YXRpYyBnZXQgaW1wb3J0UGF0aCgpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9pbXBvcnRQYXRoIix0aGlzKSkpe2xldCBjPXRoaXMuaW1wb3J0TWV0YTtpZihjKXRoaXMuX2ltcG9ydFBhdGg9Q3goYy51cmwpO2Vsc2V7bGV0IHU9b3UuaW1wb3J0KHRoaXMuaXMpO3RoaXMuX2ltcG9ydFBhdGg9dSYmdS5hc3NldHBhdGh8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IuaW1wb3J0UGF0aH19cmV0dXJuIHRoaXMuX2ltcG9ydFBhdGh9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlLHRoaXMuX2ltcG9ydFBhdGgsdGhpcy5yb290UGF0aCx0aGlzLmltcG9ydFBhdGgsdGhpcy5yb290LHRoaXMuJH1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLmZpbmFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZmluYWxpemVUZW1wbGF0ZSh0aGlzLmxvY2FsTmFtZSksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290UGF0aD1WZHQsdGhpcy5pbXBvcnRQYXRoPXRoaXMuY29uc3RydWN0b3IuaW1wb3J0UGF0aDtsZXQgYz1yKHRoaXMuY29uc3RydWN0b3IpO2lmKCEhYylmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTtpZih0aGlzLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdCh1KSl7bGV0IGY9dHlwZW9mIGgudmFsdWU9PSJmdW5jdGlvbiI/aC52YWx1ZS5jYWxsKHRoaXMpOmgudmFsdWU7dGhpcy5faGFzQWNjZXNzb3IodSk/dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KHUsZiwhMCk6dGhpc1t1XT1mfX19X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KGMpe3JldHVybiF0aGlzLmhhc093blByb3BlcnR5KGMpfXN0YXRpYyBfcHJvY2Vzc1N0eWxlVGV4dChjLHUpe3JldHVybiBITShjLHUpfXN0YXRpYyBfZmluYWxpemVUZW1wbGF0ZShjKXtsZXQgdT10aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU7aWYodSYmIXUuX19wb2x5bWVyRmluYWxpemVkKXt1Ll9fcG9seW1lckZpbmFsaXplZD0hMDtsZXQgaD10aGlzLmltcG9ydFBhdGgsZj1oP2xfKGgpOiIiO28odGhpcyx1LGMsZiksdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZSh1KX19Y29ubmVjdGVkQ2FsbGJhY2soKXt3aW5kb3cuU2hhZHlDU1MmJnRoaXMuX3RlbXBsYXRlJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpLHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCl9cmVhZHkoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX3RlbXBsYXRlKSx0aGlzLiQ9dGhpcy5yb290LiQpLHN1cGVyLnJlYWR5KCl9X3JlYWR5Q2xpZW50cygpe3RoaXMuX3RlbXBsYXRlJiYodGhpcy5yb290PXRoaXMuX2F0dGFjaERvbSh0aGlzLnJvb3QpKSxzdXBlci5fcmVhZHlDbGllbnRzKCl9X2F0dGFjaERvbShjKXtsZXQgdT11ZSh0aGlzKTtpZih1LmF0dGFjaFNoYWRvdylyZXR1cm4gYz8odS5zaGFkb3dSb290fHwodS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4iLHNoYWR5VXBncmFkZUZyYWdtZW50OmN9KSx1LnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoYyksdGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVTaGVldCYmKHUuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W3RoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXRdKSksR2R0JiZ3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaEluaXRpYWwodS5zaGFkb3dSb290KSx1LnNoYWRvd1Jvb3QpOm51bGw7dGhyb3cgbmV3IEVycm9yKCJTaGFkb3dET00gbm90IGF2YWlsYWJsZS4gUG9seW1lckVsZW1lbnQgY2FuIGNyZWF0ZSBkb20gYXMgY2hpbGRyZW4gaW5zdGVhZCBvZiBpbiBTaGFkb3dET00gYnkgc2V0dGluZyBgdGhpcy5yb290ID0gdGhpcztgIGJlZm9yZSBgcmVhZHlgLiIpfXVwZGF0ZVN0eWxlcyhjKXt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5zdHlsZVN1YnRyZWUodGhpcyxjKX1yZXNvbHZlVXJsKGMsdSl7cmV0dXJuIXUmJnRoaXMuaW1wb3J0UGF0aCYmKHU9bF8odGhpcy5pbXBvcnRQYXRoKSksbF8oYyx1KX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVDb250ZW50KGMsdSxoKXtyZXR1cm4gdS5keW5hbWljRm5zPXUuZHluYW1pY0Zuc3x8dGhpcy5fcHJvcGVydGllcyx0Ll9wYXJzZVRlbXBsYXRlQ29udGVudC5jYWxsKHRoaXMsYyx1LGgpfXN0YXRpYyBfYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdChjLHUsaCl7cmV0dXJuIExJJiYhKHUgaW4gdGhpcy5fcHJvcGVydGllcykmJiEoaC5pbmZvLnBhcnQuc2lnbmF0dXJlJiZoLmluZm8ucGFydC5zaWduYXR1cmUuc3RhdGljKSYmIWguaW5mby5wYXJ0Lmhvc3RQcm9wJiYhYy5uZXN0ZWRUZW1wbGF0ZSYmY29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHt1fScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApLHQuX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QuY2FsbCh0aGlzLGMsdSxoKX19cmV0dXJuIHN9KTt2YXIgcUk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10LnRvU3RyaW5nKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy52YWx1ZX19O2Z1bmN0aW9uIEwxZShlKXtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIGUudmFsdWU7dGhyb3cgbmV3IEVycm9yKGBub24tbGl0ZXJhbCB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWxMaXRlcmFsIGZ1bmN0aW9uOiAke2V9YCl9ZnVuY3Rpb24gazFlKGUpe2lmKGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KXJldHVybiBlLmlubmVySFRNTDtpZihlIGluc3RhbmNlb2YgcUkpcmV0dXJuIEwxZShlKTt0aHJvdyBuZXcgRXJyb3IoYG5vbi10ZW1wbGF0ZSB2YWx1ZSBwYXNzZWQgdG8gUG9seW1lcidzIGh0bWwgZnVuY3Rpb246ICR7ZX1gKX12YXIgUT1mdW5jdGlvbih0LC4uLnIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIG4uaW5uZXJIVE1MPXIucmVkdWNlKChpLG8sYSk9PmkrazFlKG8pK3RbYSsxXSx0WzBdKSxufTt2YXIgbXQ9U20oSFRNTEVsZW1lbnQpO3ZhciBmeT1FZShPZSgpLDEpO3ZhciBoXz0hKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxHSTtmdW5jdGlvbiBFbXQoZSl7ZSYmZS5zaGltY3NzcHJvcGVydGllcz9HST0hMTpHST1oX3x8Qm9vbGVhbighbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygiYm94LXNoYWRvdyIsIjAgMCAwIHZhcigtLWZvbykiKSl9dmFyIE1tO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkIT09dm9pZCAwJiYoTW09d2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkKTt2YXIgV0k9Qm9vbGVhbih3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5kaXNhYmxlUnVudGltZSk7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzIT09dm9pZCAwP0dJPXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3M6d2luZG93LlNoYWR5Q1NTPyhFbXQod2luZG93LlNoYWR5Q1NTKSx3aW5kb3cuU2hhZHlDU1M9dm9pZCAwKTpFbXQod2luZG93LldlYkNvbXBvbmVudHMmJndpbmRvdy5XZWJDb21wb25lbnRzLmZsYWdzKTt2YXIgTng9R0k7dmFyIFlJPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGFydD0wLHRoaXMuZW5kPTAsdGhpcy5wcmV2aW91cz1udWxsLHRoaXMucGFyZW50PW51bGwsdGhpcy5ydWxlcz1udWxsLHRoaXMucGFyc2VkQ3NzVGV4dD0iIix0aGlzLmNzc1RleHQ9IiIsdGhpcy5hdFJ1bGU9ITEsdGhpcy50eXBlPTAsdGhpcy5rZXlmcmFtZXNOYW1lPSIiLHRoaXMuc2VsZWN0b3I9IiIsdGhpcy5wYXJzZWRTZWxlY3Rvcj0iIn19O2Z1bmN0aW9uIEVHKGUpe3JldHVybiBlPVIxZShlKSxUbXQoTjFlKGUpLGUpfWZ1bmN0aW9uIFIxZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLmNvbW1lbnRzLCIiKS5yZXBsYWNlKGdwLnBvcnQsIiIpfWZ1bmN0aW9uIE4xZShlKXtsZXQgdD1uZXcgWUk7dC5zdGFydD0wLHQuZW5kPWUubGVuZ3RoO2xldCByPXQ7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT1DbXQpe3IucnVsZXN8fChyLnJ1bGVzPVtdKTtsZXQgbz1yLGE9by5ydWxlc1tvLnJ1bGVzLmxlbmd0aC0xXXx8bnVsbDtyPW5ldyBZSSxyLnN0YXJ0PW4rMSxyLnBhcmVudD1vLHIucHJldmlvdXM9YSxvLnJ1bGVzLnB1c2gocil9ZWxzZSBlW25dPT09QW10JiYoci5lbmQ9bisxLHI9ci5wYXJlbnR8fHQpO3JldHVybiB0fWZ1bmN0aW9uIFRtdChlLHQpe2xldCByPXQuc3Vic3RyaW5nKGUuc3RhcnQsZS5lbmQtMSk7aWYoZS5wYXJzZWRDc3NUZXh0PWUuY3NzVGV4dD1yLnRyaW0oKSxlLnBhcmVudCl7bGV0IGk9ZS5wcmV2aW91cz9lLnByZXZpb3VzLmVuZDplLnBhcmVudC5zdGFydDtyPXQuc3Vic3RyaW5nKGksZS5zdGFydC0xKSxyPUQxZShyKSxyPXIucmVwbGFjZShncC5tdWx0aXBsZVNwYWNlcywiICIpLHI9ci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiOyIpKzEpO2xldCBvPWUucGFyc2VkU2VsZWN0b3I9ZS5zZWxlY3Rvcj1yLnRyaW0oKTtlLmF0UnVsZT1vLmluZGV4T2YoVjFlKT09PTAsZS5hdFJ1bGU/by5pbmRleE9mKEgxZSk9PT0wP2UudHlwZT1tcC5NRURJQV9SVUxFOm8ubWF0Y2goZ3Aua2V5ZnJhbWVzUnVsZSkmJihlLnR5cGU9bXAuS0VZRlJBTUVTX1JVTEUsZS5rZXlmcmFtZXNOYW1lPWUuc2VsZWN0b3Iuc3BsaXQoZ3AubXVsdGlwbGVTcGFjZXMpLnBvcCgpKTpvLmluZGV4T2YoUG10KT09PTA/ZS50eXBlPW1wLk1JWElOX1JVTEU6ZS50eXBlPW1wLlNUWUxFX1JVTEV9bGV0IG49ZS5ydWxlcztpZihuKWZvcihsZXQgaT0wLG89bi5sZW5ndGgsYTtpPG8mJihhPW5baV0pO2krKylUbXQoYSx0KTtyZXR1cm4gZX1mdW5jdGlvbiBEMWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXFwoWzAtOWEtZl17MSw2fSlccy9naSxmdW5jdGlvbigpe2xldCB0PWFyZ3VtZW50c1sxXSxyPTYtdC5sZW5ndGg7Zm9yKDtyLS07KXQ9IjAiK3Q7cmV0dXJuIlxcIit0fSl9ZnVuY3Rpb24gVEcoZSx0LHI9IiIpe2xldCBuPSIiO2lmKGUuY3NzVGV4dHx8ZS5ydWxlcyl7bGV0IGk9ZS5ydWxlcztpZihpJiYhTzFlKGkpKWZvcihsZXQgbz0wLGE9aS5sZW5ndGgscztvPGEmJihzPWlbb10pO28rKyluPVRHKHMsdCxuKTtlbHNlIG49dD9lLmNzc1RleHQ6ejFlKGUuY3NzVGV4dCksbj1uLnRyaW0oKSxuJiYobj0iICAiK24rYApgKX1yZXR1cm4gbiYmKGUuc2VsZWN0b3ImJihyKz1lLnNlbGVjdG9yKyIgIitDbXQrYApgKSxyKz1uLGUuc2VsZWN0b3ImJihyKz1BbXQrYAoKYCkpLHJ9ZnVuY3Rpb24gTzFlKGUpe2xldCB0PWVbMF07cmV0dXJuIEJvb2xlYW4odCkmJkJvb2xlYW4odC5zZWxlY3RvcikmJnQuc2VsZWN0b3IuaW5kZXhPZihQbXQpPT09MH1mdW5jdGlvbiB6MWUoZSl7cmV0dXJuIGU9RjFlKGUpLEIxZShlKX1mdW5jdGlvbiBGMWUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jdXN0b21Qcm9wLCIiKS5yZXBsYWNlKGdwLm1peGluUHJvcCwiIil9ZnVuY3Rpb24gQjFlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AubWl4aW5BcHBseSwiIikucmVwbGFjZShncC52YXJBcHBseSwiIil9dmFyIG1wPXtTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxZTN9LENtdD0ieyIsQW10PSJ9IixncD17Y29tbWVudHM6L1wvXCpbXipdKlwqKyhbXi8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sUG10PSItLSIsSDFlPSJAbWVkaWEiLFYxZT0iQCI7dmFyIEtNPS8oPzpefFs7XHN7XVxzKikoLS1bXHctXSo/KVxzKjpccyooPzooKD86Jyg/OlxcJ3wuKSo/J3wiKD86XFwifC4pKj8ifFwoW14pXSo/XCl8W159O3tdKSspfFx7KFtefV0qKVx9KD86KD89Wztcc31dKXwkKSkvZ2ksRHg9Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2k7dmFyIEltdD0vQG1lZGlhXHMoLiopLzt2YXIgTG10PW5ldyBTZXQsVTFlPSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24ga210KGUpe2xldCB0PWUudGV4dENvbnRlbnQ7aWYoIUxtdC5oYXModCkpe0xtdC5hZGQodCk7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyLnNldEF0dHJpYnV0ZSgic2hhZHktdW5zY29wZWQiLCIiKSxyLnRleHRDb250ZW50PXQsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChyKX19ZnVuY3Rpb24gUm10KGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZShVMWUpfWZ1bmN0aW9uIFpNKGUsdCl7cmV0dXJuIGU/KHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9RUcoZSkpLHQmJk94KGUsdCksVEcoZSxOeCkpOiIifWZ1bmN0aW9uIENHKGUpe3JldHVybiFlLl9fY3NzUnVsZXMmJmUudGV4dENvbnRlbnQmJihlLl9fY3NzUnVsZXM9RUcoZS50ZXh0Q29udGVudCkpLGUuX19jc3NSdWxlc3x8bnVsbH1mdW5jdGlvbiBPeChlLHQscixuKXtpZighZSlyZXR1cm47bGV0IGk9ITEsbz1lLnR5cGU7aWYobiYmbz09PW1wLk1FRElBX1JVTEUpe2xldCBzPWUuc2VsZWN0b3IubWF0Y2goSW10KTtzJiYod2luZG93Lm1hdGNoTWVkaWEoc1sxXSkubWF0Y2hlc3x8KGk9ITApKX1vPT09bXAuU1RZTEVfUlVMRT90KGUpOnImJm89PT1tcC5LRVlGUkFNRVNfUlVMRT9yKGUpOm89PT1tcC5NSVhJTl9SVUxFJiYoaT0hMCk7bGV0IGE9ZS5ydWxlcztpZihhJiYhaSlmb3IobGV0IHM9MCxsPWEubGVuZ3RoLGM7czxsJiYoYz1hW3NdKTtzKyspT3goYyx0LHIsbil9ZnVuY3Rpb24gcTFlKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49dCxpPWUubGVuZ3RoO248aTtuKyspaWYoZVtuXT09PSIoIilyKys7ZWxzZSBpZihlW25dPT09IikiJiYtLXI9PT0wKXJldHVybiBuO3JldHVybi0xfWZ1bmN0aW9uIEFHKGUsdCl7bGV0IHI9ZS5pbmRleE9mKCJ2YXIoIik7aWYocj09PS0xKXJldHVybiB0KGUsIiIsIiIsIiIpO2xldCBuPXExZShlLHIrMyksaT1lLnN1YnN0cmluZyhyKzQsbiksbz1lLnN1YnN0cmluZygwLHIpLGE9QUcoZS5zdWJzdHJpbmcobisxKSx0KSxzPWkuaW5kZXhPZigiLCIpO2lmKHM9PT0tMSlyZXR1cm4gdChvLGkudHJpbSgpLCIiLGEpO2xldCBsPWkuc3Vic3RyaW5nKDAscykudHJpbSgpLGM9aS5zdWJzdHJpbmcocysxKS50cmltKCk7cmV0dXJuIHQobyxsLGMsYSl9dmFyIG52cj13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS53cmFwfHwoZT0+ZSk7ZnVuY3Rpb24gTm10KGUpe2xldCB0PWUubG9jYWxOYW1lLHI9IiIsbj0iIjtyZXR1cm4gdD90LmluZGV4T2YoIi0iKT4tMT9yPXQ6KG49dCxyPWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiaXMiKXx8IiIpOihyPWUuaXMsbj1lLmV4dGVuZHMpLHtpczpyLHR5cGVFeHRlbnNpb246bn19ZnVuY3Rpb24gRG10KGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtsZXQgaT1yW25dO1JtdChpKT9oX3x8KGttdChpKSxpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSkpOih0LnB1c2goaS50ZXh0Q29udGVudCksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKX1yZXR1cm4gdC5qb2luKCIiKS50cmltKCl9dmFyIE9tdD0iY3NzLWJ1aWxkIjtmdW5jdGlvbiBHMWUoZSl7aWYoTW0hPT12b2lkIDApcmV0dXJuIE1tO2lmKGUuX19jc3NCdWlsZD09PXZvaWQgMCl7bGV0IHQ9ZS5nZXRBdHRyaWJ1dGUoT210KTtpZih0KWUuX19jc3NCdWlsZD10O2Vsc2V7bGV0IHI9VzFlKGUpO3IhPT0iIiYmWTFlKGUpLGUuX19jc3NCdWlsZD1yfX1yZXR1cm4gZS5fX2Nzc0J1aWxkfHwiIn1mdW5jdGlvbiBQRyhlKXtyZXR1cm4gRzFlKGUpIT09IiJ9ZnVuY3Rpb24gVzFlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7aWYodCBpbnN0YW5jZW9mIENvbW1lbnQpe2xldCByPXQudGV4dENvbnRlbnQudHJpbSgpLnNwbGl0KCI6Iik7aWYoclswXT09PU9tdClyZXR1cm4gclsxXX1yZXR1cm4iIn1mdW5jdGlvbiBZMWUoZSl7bGV0IHQ9ZS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiP2UuY29udGVudC5maXJzdENoaWxkOmUuZmlyc3RDaGlsZDt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gSk0oZSx0KXtmb3IobGV0IHIgaW4gdClyPT09bnVsbD9lLnN0eWxlLnJlbW92ZVByb3BlcnR5KHIpOmUuc3R5bGUuc2V0UHJvcGVydHkocix0W3JdKX1mdW5jdGlvbiBqSShlLHQpe2xldCByPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUodCk7cmV0dXJuIHI/ci50cmltKCk6IiJ9ZnVuY3Rpb24gem10KGUpe2xldCB0PUR4LnRlc3QoZSl8fEtNLnRlc3QoZSk7cmV0dXJuIER4Lmxhc3RJbmRleD0wLEtNLmxhc3RJbmRleD0wLHR9dmFyIGoxZT0vO1xzKi9tLFgxZT0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLyxGbXQ9L1xzKiFpbXBvcnRhbnQvLElHPSJfLV8iO3ZhciBMRz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD17fX1zZXQodCxyKXt0PXQudHJpbSgpLHRoaXMuX21hcFt0XT17cHJvcGVydGllczpyLGRlcGVuZGFudHM6e319fWdldCh0KXtyZXR1cm4gdD10LnRyaW0oKSx0aGlzLl9tYXBbdF18fG51bGx9fSxYST1udWxsLERvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbCx0aGlzLl9tZWFzdXJlRWxlbWVudD1udWxsLHRoaXMuX21hcD1uZXcgTEd9ZGV0ZWN0TWl4aW4odCl7cmV0dXJuIHptdCh0KX1nYXRoZXJTdHlsZXModCl7bGV0IHI9RG10KHQuY29udGVudCk7aWYocil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLHQuY29udGVudC5pbnNlcnRCZWZvcmUobix0LmNvbnRlbnQuZmlyc3RDaGlsZCksbn1yZXR1cm4gbnVsbH10cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpe3QuX2dhdGhlcmVkU3R5bGU9PT12b2lkIDAmJih0Ll9nYXRoZXJlZFN0eWxlPXRoaXMuZ2F0aGVyU3R5bGVzKHQpKTtsZXQgbj10Ll9nYXRoZXJlZFN0eWxlO3JldHVybiBuP3RoaXMudHJhbnNmb3JtU3R5bGUobixyKTpudWxsfXRyYW5zZm9ybVN0eWxlKHQscj0iIil7bGV0IG49Q0codCk7cmV0dXJuIHRoaXMudHJhbnNmb3JtUnVsZXMobixyKSx0LnRleHRDb250ZW50PVpNKG4pLG59dHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl7bGV0IHI9Q0codCk7cmV0dXJuIE94KHIsbj0+e24uc2VsZWN0b3I9PT0iOnJvb3QiJiYobi5zZWxlY3Rvcj0iaHRtbCIpLHRoaXMudHJhbnNmb3JtUnVsZShuKX0pLHQudGV4dENvbnRlbnQ9Wk0ocikscn10cmFuc2Zvcm1SdWxlcyh0LHIpe3RoaXMuX2N1cnJlbnRFbGVtZW50PXIsT3godCxuPT57dGhpcy50cmFuc2Zvcm1SdWxlKG4pfSksdGhpcy5fY3VycmVudEVsZW1lbnQ9bnVsbH10cmFuc2Zvcm1SdWxlKHQpe3QuY3NzVGV4dD10aGlzLnRyYW5zZm9ybUNzc1RleHQodC5wYXJzZWRDc3NUZXh0LHQpLHQuc2VsZWN0b3I9PT0iOnJvb3QiJiYodC5zZWxlY3Rvcj0iOmhvc3QgPiAqIil9dHJhbnNmb3JtQ3NzVGV4dCh0LHIpe3JldHVybiB0PXQucmVwbGFjZShLTSwobixpLG8sYSk9PnRoaXMuX3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKG4saSxvLGEscikpLHRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKHQscil9X2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpe3JldHVybiB0aGlzLl9tZWFzdXJlRWxlbWVudHx8KHRoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFwcGx5LXNoaW0tbWVhc3VyZSIsIiIpLHRoaXMuX21lYXN1cmVFbGVtZW50LnN0eWxlLmFsbD0iaW5pdGlhbCIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9tZWFzdXJlRWxlbWVudCkpLHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHQpfV9mYWxsYmFja3NGcm9tUHJldmlvdXNSdWxlcyh0KXtsZXQgcj10O2Zvcig7ci5wYXJlbnQ7KXI9ci5wYXJlbnQ7bGV0IG49e30saT0hMTtyZXR1cm4gT3gocixvPT57aT1pfHxvPT09dCwhaSYmby5zZWxlY3Rvcj09PXQuc2VsZWN0b3ImJk9iamVjdC5hc3NpZ24obix0aGlzLl9jc3NUZXh0VG9NYXAoby5wYXJzZWRDc3NUZXh0KSl9KSxufV9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpe2xldCBuPW51bGw7Zm9yKDtuPUR4LmV4ZWModCk7KXtsZXQgaT1uWzBdLG89blsxXSxhPW4uaW5kZXgscz1hK2kuaW5kZXhPZigiQGFwcGx5IiksbD1hK2kubGVuZ3RoLGM9dC5zbGljZSgwLHMpLHU9dC5zbGljZShsKSxoPXI/dGhpcy5fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXMocik6e307T2JqZWN0LmFzc2lnbihoLHRoaXMuX2Nzc1RleHRUb01hcChjKSk7bGV0IGY9dGhpcy5fYXRBcHBseVRvQ3NzUHJvcGVydGllcyhvLGgpO3Q9YCR7Y30ke2Z9JHt1fWAsRHgubGFzdEluZGV4PWErZi5sZW5ndGh9cmV0dXJuIHR9X2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXModCxyKXt0PXQucmVwbGFjZShqMWUsIiIpO2xldCBuPVtdLGk9dGhpcy5fbWFwLmdldCh0KTtpZihpfHwodGhpcy5fbWFwLnNldCh0LHt9KSxpPXRoaXMuX21hcC5nZXQodCkpLGkpe3RoaXMuX2N1cnJlbnRFbGVtZW50JiYoaS5kZXBlbmRhbnRzW3RoaXMuX2N1cnJlbnRFbGVtZW50XT0hMCk7bGV0IG8sYSxzLGw9aS5wcm9wZXJ0aWVzO2ZvcihvIGluIGwpcz1yJiZyW29dLGE9W28sIjogdmFyKCIsdCxJRyxvXSxzJiZhLnB1c2goIiwiLHMucmVwbGFjZShGbXQsIiIpKSxhLnB1c2goIikiKSxGbXQudGVzdChsW29dKSYmYS5wdXNoKCIgIWltcG9ydGFudCIpLG4ucHVzaChhLmpvaW4oIiIpKX1yZXR1cm4gbi5qb2luKCI7ICIpfV9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdCh0LHIpe2xldCBuPVgxZS5leGVjKHIpO3JldHVybiBuJiYoblsxXT9yPXRoaXMuX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5KHQpOnI9ImFwcGx5LXNoaW0taW5oZXJpdCIpLHJ9X2Nzc1RleHRUb01hcCh0LHI9ITEpe2xldCBuPXQuc3BsaXQoIjsiKSxpLG8sYT17fTtmb3IobGV0IHM9MCxsLGM7czxuLmxlbmd0aDtzKyspbD1uW3NdLGwmJihjPWwuc3BsaXQoIjoiKSxjLmxlbmd0aD4xJiYoaT1jWzBdLnRyaW0oKSxvPWMuc2xpY2UoMSkuam9pbigiOiIpLHImJihvPXRoaXMuX3JlcGxhY2VJbml0aWFsT3JJbmhlcml0KGksbykpLGFbaV09bykpO3JldHVybiBhfV9pbnZhbGlkYXRlTWl4aW5FbnRyeSh0KXtpZighIVhJKWZvcihsZXQgciBpbiB0LmRlcGVuZGFudHMpciE9PXRoaXMuX2N1cnJlbnRFbGVtZW50JiZYSShyKX1fcHJvZHVjZUNzc1Byb3BlcnRpZXModCxyLG4saSxvKXtpZihuJiZBRyhuLChfLHkpPT57eSYmdGhpcy5fbWFwLmdldCh5KSYmKGk9YEBhcHBseSAke3l9O2ApfSksIWkpcmV0dXJuIHQ7bGV0IGE9dGhpcy5fY29uc3VtZUNzc1Byb3BlcnRpZXMoIiIraSxvKSxzPXQuc2xpY2UoMCx0LmluZGV4T2YoIi0tIikpLGw9dGhpcy5fY3NzVGV4dFRvTWFwKGEsITApLGM9bCx1PXRoaXMuX21hcC5nZXQociksaD11JiZ1LnByb3BlcnRpZXM7aD9jPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShoKSxsKTp0aGlzLl9tYXAuc2V0KHIsYyk7bGV0IGY9W10scCxkLGc9ITE7Zm9yKHAgaW4gYylkPWxbcF0sZD09PXZvaWQgMCYmKGQ9ImluaXRpYWwiKSxoJiYhKHAgaW4gaCkmJihnPSEwKSxmLnB1c2goYCR7cn0ke0lHfSR7cH06ICR7ZH1gKTtyZXR1cm4gZyYmdGhpcy5faW52YWxpZGF0ZU1peGluRW50cnkodSksdSYmKHUucHJvcGVydGllcz1jKSxuJiYocz1gJHt0fTske3N9YCksYCR7c30ke2Yuam9pbigiOyAiKX07YH19O0RvLnByb3RvdHlwZS5kZXRlY3RNaXhpbj1Eby5wcm90b3R5cGUuZGV0ZWN0TWl4aW47RG8ucHJvdG90eXBlLnRyYW5zZm9ybVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtQ3VzdG9tU3R5bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlcz1Eby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybVRlbXBsYXRlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZTtEby5wcm90b3R5cGUuX3NlcGFyYXRvcj1JRztPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJpbnZhbGlkQ2FsbGJhY2siLHtnZXQoKXtyZXR1cm4gWEl9LHNldChlKXtYST1lfX0pO3ZhciBCbXQ9RG87dmFyICQxZT17fSxRTT0kMWU7dmFyICRJPSJfYXBwbHlTaGltQ3VycmVudFZlcnNpb24iLHp4PSJfYXBwbHlTaGltTmV4dFZlcnNpb24iLEtJPSJfYXBwbHlTaGltVmFsaWRhdGluZ1ZlcnNpb24iLEsxZT1Qcm9taXNlLnJlc29sdmUoKTtmdW5jdGlvbiBIbXQoZSl7bGV0IHQ9UU1bZV07dCYmWjFlKHQpfWZ1bmN0aW9uIFoxZShlKXtlWyRJXT1lWyRJXXx8MCxlW0tJXT1lW0tJXXx8MCxlW3p4XT0oZVt6eF18fDApKzF9ZnVuY3Rpb24ga0coZSl7cmV0dXJuIGVbJEldPT09ZVt6eF19ZnVuY3Rpb24gVm10KGUpe3JldHVybiFrRyhlKSYmZVtLSV09PT1lW3p4XX1mdW5jdGlvbiBVbXQoZSl7ZVtLSV09ZVt6eF0sZS5fdmFsaWRhdGluZ3x8KGUuX3ZhbGlkYXRpbmc9ITAsSzFlLnRoZW4oZnVuY3Rpb24oKXtlWyRJXT1lW3p4XSxlLl92YWxpZGF0aW5nPSExfSkpfXZhciBSRz1udWxsLHFtdD13aW5kb3cuSFRNTEltcG9ydHMmJndpbmRvdy5IVE1MSW1wb3J0cy53aGVuUmVhZHl8fG51bGwsTkc7ZnVuY3Rpb24gWkkoZSl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7cW10P3FtdChlKTooUkd8fChSRz1uZXcgUHJvbWlzZSh0PT57Tkc9dH0pLGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP05HKCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsKCk9Pntkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmTkcoKX0pKSxSRy50aGVuKGZ1bmN0aW9uKCl7ZSYmZSgpfSkpfSl9dmFyIEdtdD0iX19zZWVuQnlTaGFkeUNTUyIsSkk9Il9fc2hhZHlDU1NDYWNoZWRTdHlsZSIsUUk9bnVsbCx0RT1udWxsLFpsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZXM9W10sdGhpcy5lbnF1ZXVlZD0hMSxaSSgoKT0+e3dpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcyYmd2luZG93LlNoYWR5Q1NTLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX1lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl7dGhpcy5lbnF1ZXVlZHx8IXRFfHwodGhpcy5lbnF1ZXVlZD0hMCxaSSh0RSkpfWFkZEN1c3RvbVN0eWxlKHQpe3RbR210XXx8KHRbR210XT0hMCx0aGlzLmN1c3RvbVN0eWxlcy5wdXNoKHQpLHRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpKX1nZXRTdHlsZUZvckN1c3RvbVN0eWxlKHQpe2lmKHRbSkldKXJldHVybiB0W0pJXTtsZXQgcjtyZXR1cm4gdC5nZXRTdHlsZT9yPXQuZ2V0U3R5bGUoKTpyPXQscn1wcm9jZXNzU3R5bGVzKCl7bGV0IHQ9dGhpcy5jdXN0b21TdHlsZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07aWYobltKSV0pY29udGludWU7bGV0IGk9dGhpcy5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2lmKGkpe2xldCBvPWkuX19hcHBsaWVkRWxlbWVudHx8aTtRSSYmUUkobyksbltKSV09b319cmV0dXJuIHR9fTtabC5wcm90b3R5cGUuYWRkQ3VzdG9tU3R5bGU9WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlO1psLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzPVpsLnByb3RvdHlwZS5wcm9jZXNzU3R5bGVzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFpsLnByb3RvdHlwZSx7dHJhbnNmb3JtQ2FsbGJhY2s6e2dldCgpe3JldHVybiBRSX0sc2V0KGUpe1FJPWV9fSx2YWxpZGF0ZUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gdEV9LHNldChlKXtsZXQgdD0hMTt0RXx8KHQ9ITApLHRFPWUsdCYmdGhpcy5lbnF1ZXVlRG9jdW1lbnRWYWxpZGF0aW9uKCl9fX0pO3ZhciBlRT1uZXcgQm10LERHPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT1udWxsLGVFLmludmFsaWRDYWxsYmFjaz1IbXR9ZW5zdXJlKCl7dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZXx8d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlJiYodGhpcy5jdXN0b21TdHlsZUludGVyZmFjZT13aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2UsdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS50cmFuc2Zvcm1DYWxsYmFjaz10PT57ZUUudHJhbnNmb3JtQ3VzdG9tU3R5bGUodCl9LHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudmFsaWRhdGVDYWxsYmFjaz0oKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQmJnRoaXMuZmx1c2hDdXN0b21TdHlsZXMoKX0pfSl9cHJlcGFyZVRlbXBsYXRlKHQscil7aWYodGhpcy5lbnN1cmUoKSxQRyh0KSlyZXR1cm47UU1bcl09dDtsZXQgbj1lRS50cmFuc2Zvcm1UZW1wbGF0ZSh0LHIpO3QuX3N0eWxlQXN0PW59Zmx1c2hDdXN0b21TdHlsZXMoKXtpZih0aGlzLmVuc3VyZSgpLCF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlKXJldHVybjtsZXQgdD10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnByb2Nlc3NTdHlsZXMoKTtpZighIXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdLGk9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5nZXRTdHlsZUZvckN1c3RvbVN0eWxlKG4pO2kmJmVFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKGkpfXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZW5xdWV1ZWQ9ITF9fXN0eWxlU3VidHJlZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksciYmSk0odCxyKSx0LnNoYWRvd1Jvb3Qpe3RoaXMuc3R5bGVFbGVtZW50KHQpO2xldCBuPXQuc2hhZG93Um9vdC5jaGlsZHJlbnx8dC5zaGFkb3dSb290LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9ZWxzZXtsZXQgbj10LmNoaWxkcmVufHx0LmNoaWxkTm9kZXM7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspdGhpcy5zdHlsZVN1YnRyZWUobltpXSl9fXN0eWxlRWxlbWVudCh0KXt0aGlzLmVuc3VyZSgpO2xldHtpczpyfT1ObXQodCksbj1RTVtyXTtpZighKG4mJlBHKG4pKSYmbiYmIWtHKG4pKXtWbXQobil8fCh0aGlzLnByZXBhcmVUZW1wbGF0ZShuLHIpLFVtdChuKSk7bGV0IGk9dC5zaGFkb3dSb290O2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtvJiYoby5fX2Nzc1J1bGVzPW4uX3N0eWxlQXN0LG8udGV4dENvbnRlbnQ9Wk0obi5fc3R5bGVBc3QpKX19fXN0eWxlRG9jdW1lbnQodCl7dGhpcy5lbnN1cmUoKSx0aGlzLnN0eWxlU3VidHJlZShkb2N1bWVudC5ib2R5LHQpfX07aWYoIXdpbmRvdy5TaGFkeUNTU3x8IXdpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSl7bGV0IGU9bmV3IERHLHQ9d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U7d2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUocixuLGkpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnByZXBhcmVUZW1wbGF0ZShyLG4pfSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMocixuLGkpe3dpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGUocixuLGkpfSxwcmVwYXJlVGVtcGxhdGVEb20ocixuKXt9LHN0eWxlU3VidHJlZShyLG4pe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlU3VidHJlZShyLG4pfSxzdHlsZUVsZW1lbnQocil7ZS5mbHVzaEN1c3RvbVN0eWxlcygpLGUuc3R5bGVFbGVtZW50KHIpfSxzdHlsZURvY3VtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRG9jdW1lbnQocil9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShyLG4pe3JldHVybiBqSShyLG4pfSxmbHVzaEN1c3RvbVN0eWxlcygpe2UuZmx1c2hDdXN0b21TdHlsZXMoKX0sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpXSX0sdCYmKHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT10KX13aW5kb3cuU2hhZHlDU1MuQXBwbHlTaGltPWVFO3ZhciBzcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FzeW5jTW9kdWxlPW51bGwsdGhpcy5fY2FsbGJhY2s9bnVsbCx0aGlzLl90aW1lcj1udWxsfXNldENvbmZpZyh0LHIpe3RoaXMuX2FzeW5jTW9kdWxlPXQsdGhpcy5fY2FsbGJhY2s9cix0aGlzLl90aW1lcj10aGlzLl9hc3luY01vZHVsZS5ydW4oKCk9Pnt0aGlzLl90aW1lcj1udWxsLHJFLmRlbGV0ZSh0aGlzKSx0aGlzLl9jYWxsYmFjaygpfSl9Y2FuY2VsKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5fY2FuY2VsQXN5bmMoKSxyRS5kZWxldGUodGhpcykpfV9jYW5jZWxBc3luYygpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2FzeW5jTW9kdWxlLmNhbmNlbCh0aGlzLl90aW1lciksdGhpcy5fdGltZXI9bnVsbCl9Zmx1c2goKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLmNhbmNlbCgpLHRoaXMuX2NhbGxiYWNrKCkpfWlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX3RpbWVyIT1udWxsfXN0YXRpYyBkZWJvdW5jZSh0LHIsbil7cmV0dXJuIHQgaW5zdGFuY2VvZiBzcj90Ll9jYW5jZWxBc3luYygpOnQ9bmV3IHNyLHQuc2V0Q29uZmlnKHIsbiksdH19LHJFPW5ldyBTZXQsSmw9ZnVuY3Rpb24oZSl7ckUuYWRkKGUpfSxXbXQ9ZnVuY3Rpb24oKXtsZXQgZT1Cb29sZWFuKHJFLnNpemUpO3JldHVybiByRS5mb3JFYWNoKHQ9Pnt0cnl7dC5mbHVzaCgpfWNhdGNoKHIpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyByfSl9fSksZX07dmFyIEJHPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT0ic3RyaW5nIixlOT0iX19wb2x5bWVyR2VzdHVyZXMiLHQ5PSJfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQiLHpHPSJfX3BvbHltZXJHZXN0dXJlc1RvdWNoQWN0aW9uIixZbXQ9MjUsam10PTUsUTFlPTIsdHhlPTI1MDAsSm10PVsibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIsImNsaWNrIl0sZXhlPVswLDEsNCwyXSxyeGU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCJ0ZXN0Iix7YnV0dG9uczoxfSkuYnV0dG9ucz09PTF9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIEhHKGUpe3JldHVybiBKbXQuaW5kZXhPZihlKT4tMX12YXIgVkc9ITE7KGZ1bmN0aW9uKCl7dHJ5e2xldCBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldCgpe1ZHPSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe319KSgpO2Z1bmN0aW9uIFFtdChlKXtpZighKEhHKGUpfHxlPT09InRvdWNoZW5kIikmJkJHJiZWRyYmVWR0KXJldHVybntwYXNzaXZlOiEwfX12YXIgdGd0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86W29hXWR8aG9uZSl8QW5kcm9pZC8pLEZHPVtdLG54ZT17YnV0dG9uOiEwLGlucHV0OiEwLGtleWdlbjohMCxtZXRlcjohMCxvdXRwdXQ6ITAsdGV4dGFyZWE6ITAscHJvZ3Jlc3M6ITAsc2VsZWN0OiEwfSxpeGU9e2J1dHRvbjohMCxjb21tYW5kOiEwLGZpZWxkc2V0OiEwLGlucHV0OiEwLGtleWdlbjohMCxvcHRncm91cDohMCxvcHRpb246ITAsc2VsZWN0OiEwLHRleHRhcmVhOiEwfTtmdW5jdGlvbiBveGUoZSl7cmV0dXJuIG54ZVtlLmxvY2FsTmFtZV18fCExfWZ1bmN0aW9uIGF4ZShlKXtsZXQgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmxhYmVsc3x8W10pO2lmKCF0Lmxlbmd0aCl7dD1bXTtsZXQgcj1lLmdldFJvb3ROb2RlKCk7aWYoZS5pZCl7bGV0IG49ci5xdWVyeVNlbGVjdG9yQWxsKGBsYWJlbFtmb3IgPSAke2UuaWR9XWApO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX19cmV0dXJuIHR9dmFyIFhtdD1mdW5jdGlvbihlKXtsZXQgdD1lLnNvdXJjZUNhcGFiaWxpdGllcztpZighKHQmJiF0LmZpcmVzVG91Y2hFdmVudHMpJiYoZVt0OV09e3NraXA6ITB9LGUudHlwZT09PSJjbGljayIpKXtsZXQgcj0hMSxuPW45KGUpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtpZihuW2ldLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKG5baV0ubG9jYWxOYW1lPT09ImxhYmVsIilGRy5wdXNoKG5baV0pO2Vsc2UgaWYob3hlKG5baV0pKXtsZXQgbz1heGUobltpXSk7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspcj1yfHxGRy5pbmRleE9mKG9bYV0pPi0xfX1pZihuW2ldPT09aWEubW91c2UudGFyZ2V0KXJldHVybn1pZihyKXJldHVybjtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKX19O2Z1bmN0aW9uICRtdChlKXtsZXQgdD10Z3Q/WyJjbGljayJdOkptdDtmb3IobGV0IHI9MCxuO3I8dC5sZW5ndGg7cisrKW49dFtyXSxlPyhGRy5sZW5ndGg9MCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKG4sWG10LCEwKSk6ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLFhtdCwhMCl9ZnVuY3Rpb24gc3hlKGUpe2lmKCFmRylyZXR1cm47aWEubW91c2UubW91c2VJZ25vcmVKb2J8fCRtdCghMCk7bGV0IHQ9ZnVuY3Rpb24oKXskbXQoKSxpYS5tb3VzZS50YXJnZXQ9bnVsbCxpYS5tb3VzZS5tb3VzZUlnbm9yZUpvYj1udWxsfTtpYS5tb3VzZS50YXJnZXQ9bjkoZSlbMF0saWEubW91c2UubW91c2VJZ25vcmVKb2I9c3IuZGVib3VuY2UoaWEubW91c2UubW91c2VJZ25vcmVKb2IsbW8uYWZ0ZXIodHhlKSx0KX1mdW5jdGlvbiBwXyhlKXtsZXQgdD1lLnR5cGU7aWYoIUhHKHQpKXJldHVybiExO2lmKHQ9PT0ibW91c2Vtb3ZlIil7bGV0IHI9ZS5idXR0b25zPT09dm9pZCAwPzE6ZS5idXR0b25zO3JldHVybiBlIGluc3RhbmNlb2Ygd2luZG93Lk1vdXNlRXZlbnQmJiFyeGUmJihyPWV4ZVtlLndoaWNoXXx8MCksQm9vbGVhbihyJjEpfWVsc2UgcmV0dXJuKGUuYnV0dG9uPT09dm9pZCAwPzA6ZS5idXR0b24pPT09MH1mdW5jdGlvbiBseGUoZSl7aWYoZS50eXBlPT09ImNsaWNrIil7aWYoZS5kZXRhaWw9PT0wKXJldHVybiEwO2xldCB0PV9wKGUpO2lmKCF0Lm5vZGVUeXBlfHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuITA7bGV0IHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPWUucGFnZVgsaT1lLnBhZ2VZO3JldHVybiEobj49ci5sZWZ0JiZuPD1yLnJpZ2h0JiZpPj1yLnRvcCYmaTw9ci5ib3R0b20pfXJldHVybiExfXZhciBpYT17bW91c2U6e3RhcmdldDpudWxsLG1vdXNlSWdub3JlSm9iOm51bGx9LHRvdWNoOnt4OjAseTowLGlkOi0xLHNjcm9sbERlY2lkZWQ6ITF9fTtmdW5jdGlvbiBjeGUoZSl7bGV0IHQ9ImF1dG8iLHI9bjkoZSk7Zm9yKGxldCBuPTAsaTtuPHIubGVuZ3RoO24rKylpZihpPXJbbl0saVt6R10pe3Q9aVt6R107YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZWd0KGUsdCxyKXtlLm1vdmVmbj10LGUudXBmbj1yLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscil9ZnVuY3Rpb24gRngoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixlLm1vdmVmbiksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsZS51cGZuKSxlLm1vdmVmbj1udWxsLGUudXBmbj1udWxsfWZHJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsc3hlLFZHP3twYXNzaXZlOiEwfTohMSk7dmFyIG45PXdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLm5vUGF0Y2g/d2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aDplPT5lLmNvbXBvc2VkUGF0aCYmZS5jb21wb3NlZFBhdGgoKXx8W10saUU9e30sZl89W107ZnVuY3Rpb24gdXhlKGUsdCl7bGV0IHI9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLHQpLG49cjtmb3IoO24mJm4uc2hhZG93Um9vdCYmIXdpbmRvdy5TaGFkeURPTTspe2xldCBpPW47aWYobj1uLnNoYWRvd1Jvb3QuZWxlbWVudEZyb21Qb2ludChlLHQpLGk9PT1uKWJyZWFrO24mJihyPW4pfXJldHVybiByfWZ1bmN0aW9uIF9wKGUpe2xldCB0PW45KGUpO3JldHVybiB0Lmxlbmd0aD4wP3RbMF06ZS50YXJnZXR9ZnVuY3Rpb24gcmd0KGUpe2xldCB0LHI9ZS50eXBlLGk9ZS5jdXJyZW50VGFyZ2V0W2U5XTtpZighaSlyZXR1cm47bGV0IG89aVtyXTtpZighIW8pe2lmKCFlW3Q5XSYmKGVbdDldPXt9LHIuc2xpY2UoMCw1KT09PSJ0b3VjaCIpKXtlPWU7bGV0IGE9ZS5jaGFuZ2VkVG91Y2hlc1swXTtpZihyPT09InRvdWNoc3RhcnQiJiZlLnRvdWNoZXMubGVuZ3RoPT09MSYmKGlhLnRvdWNoLmlkPWEuaWRlbnRpZmllciksaWEudG91Y2guaWQhPT1hLmlkZW50aWZpZXIpcmV0dXJuO0JHfHwocj09PSJ0b3VjaHN0YXJ0Inx8cj09PSJ0b3VjaG1vdmUiKSYmaHhlKGUpfWlmKHQ9ZVt0OV0sIXQuc2tpcCl7Zm9yKGxldCBhPTAsczthPGZfLmxlbmd0aDthKyspcz1mX1thXSxvW3MubmFtZV0mJiF0W3MubmFtZV0mJnMuZmxvdyYmcy5mbG93LnN0YXJ0LmluZGV4T2YoZS50eXBlKT4tMSYmcy5yZXNldCYmcy5yZXNldCgpO2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiYodFtzLm5hbWVdPSEwLHNbcl0oZSkpfX19ZnVuY3Rpb24gaHhlKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF0scj1lLnR5cGU7aWYocj09PSJ0b3VjaHN0YXJ0IilpYS50b3VjaC54PXQuY2xpZW50WCxpYS50b3VjaC55PXQuY2xpZW50WSxpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSExO2Vsc2UgaWYocj09PSJ0b3VjaG1vdmUiKXtpZihpYS50b3VjaC5zY3JvbGxEZWNpZGVkKXJldHVybjtpYS50b3VjaC5zY3JvbGxEZWNpZGVkPSEwO2xldCBuPWN4ZShlKSxpPSExLG89TWF0aC5hYnMoaWEudG91Y2gueC10LmNsaWVudFgpLGE9TWF0aC5hYnMoaWEudG91Y2gueS10LmNsaWVudFkpO2UuY2FuY2VsYWJsZSYmKG49PT0ibm9uZSI/aT0hMDpuPT09InBhbi14Ij9pPWE+bzpuPT09InBhbi15IiYmKGk9bz5hKSksaT9lLnByZXZlbnREZWZhdWx0KCk6cjkoInRyYWNrIil9fWZ1bmN0aW9uIEVtKGUsdCxyKXtyZXR1cm4gaUVbdF0/KGZ4ZShlLHQsciksITApOiExfWZ1bmN0aW9uIG5ndChlLHQscil7cmV0dXJuIGlFW3RdPyhweGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBmeGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVtlOV07YXx8KGVbZTldPWE9e30pO2ZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sISh0Z3QmJkhHKGwpJiZsIT09ImNsaWNrIikmJihjPWFbbF0sY3x8KGFbbF09Yz17X2NvdW50OjB9KSxjLl9jb3VudD09PTAmJmUuYWRkRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpLGNbb109KGNbb118fDApKzEsYy5fY291bnQ9KGMuX2NvdW50fHwwKSsxKTtlLmFkZEV2ZW50TGlzdGVuZXIodCxyKSxuLnRvdWNoQWN0aW9uJiZkXyhlLG4udG91Y2hBY3Rpb24pfWZ1bmN0aW9uIHB4ZShlLHQscil7bGV0IG49aUVbdF0saT1uLmRlcHMsbz1uLm5hbWUsYT1lW2U5XTtpZihhKWZvcihsZXQgcz0wLGwsYztzPGkubGVuZ3RoO3MrKylsPWlbc10sYz1hW2xdLGMmJmNbb10mJihjW29dPShjW29dfHwxKS0xLGMuX2NvdW50PShjLl9jb3VudHx8MSktMSxjLl9jb3VudD09PTAmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHJndCxRbXQobCkpKTtlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKX1mdW5jdGlvbiBVRyhlKXtmXy5wdXNoKGUpO2ZvcihsZXQgdD0wO3Q8ZS5lbWl0cy5sZW5ndGg7dCsrKWlFW2UuZW1pdHNbdF1dPWV9ZnVuY3Rpb24gZHhlKGUpe2ZvcihsZXQgdD0wLHI7dDxmXy5sZW5ndGg7dCsrKXtyPWZfW3RdO2ZvcihsZXQgbj0wLGk7bjxyLmVtaXRzLmxlbmd0aDtuKyspaWYoaT1yLmVtaXRzW25dLGk9PT1lKXJldHVybiByfXJldHVybiBudWxsfWZ1bmN0aW9uIGRfKGUsdCl7QkcmJmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmbGkucnVuKCgpPT57ZS5zdHlsZS50b3VjaEFjdGlvbj10fSksZVt6R109dH1mdW5jdGlvbiBxRyhlLHQscil7bGV0IG49bmV3IEV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjb21wb3NlZDohMH0pO2lmKG4uZGV0YWlsPXIsdWUoZSkuZGlzcGF0Y2hFdmVudChuKSxuLmRlZmF1bHRQcmV2ZW50ZWQpe2xldCBpPXIucHJldmVudGVyfHxyLnNvdXJjZUV2ZW50O2kmJmkucHJldmVudERlZmF1bHQmJmkucHJldmVudERlZmF1bHQoKX19ZnVuY3Rpb24gcjkoZSl7bGV0IHQ9ZHhlKGUpO3QuaW5mbyYmKHQuaW5mby5wcmV2ZW50PSEwKX1VRyh7bmFtZToiZG93bnVwIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsiZG93biIsInVwIl0saW5mbzp7bW92ZWZuOm51bGwsdXBmbjpudWxsfSxyZXNldDpmdW5jdGlvbigpe0Z4KHRoaXMuaW5mbyl9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighcF8oZSkpcmV0dXJuO2xldCB0PV9wKGUpLHI9dGhpcyxuPWZ1bmN0aW9uKGEpe3BfKGEpfHwobkUoInVwIix0LGEpLEZ4KHIuaW5mbykpfSxpPWZ1bmN0aW9uKGEpe3BfKGEpJiZuRSgidXAiLHQsYSksRngoci5pbmZvKX07ZWd0KHRoaXMuaW5mbyxuLGkpLG5FKCJkb3duIix0LGUpfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe25FKCJkb3duIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtuRSgidXAiLF9wKGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gbkUoZSx0LHIsbil7IXR8fHFHKHQsZSx7eDpyLmNsaWVudFgseTpyLmNsaWVudFksc291cmNlRXZlbnQ6cixwcmV2ZW50ZXI6bixwcmV2ZW50OmZ1bmN0aW9uKGkpe3JldHVybiByOShpKX19KX1VRyh7bmFtZToidHJhY2siLHRvdWNoQWN0aW9uOiJub25lIixkZXBzOlsibW91c2Vkb3duIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIl0sZmxvdzp7c3RhcnQ6WyJtb3VzZWRvd24iLCJ0b3VjaHN0YXJ0Il0sZW5kOlsibW91c2V1cCIsInRvdWNoZW5kIl19LGVtaXRzOlsidHJhY2siXSxpbmZvOnt4OjAseTowLHN0YXRlOiJzdGFydCIsc3RhcnRlZDohMSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKGUpe3RoaXMubW92ZXMubGVuZ3RoPlExZSYmdGhpcy5tb3Zlcy5zaGlmdCgpLHRoaXMubW92ZXMucHVzaChlKX0sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ITF9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSJzdGFydCIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITEsdGhpcy5pbmZvLm1vdmVzPVtdLHRoaXMuaW5mby54PTAsdGhpcy5pbmZvLnk9MCx0aGlzLmluZm8ucHJldmVudD0hMSxGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtsZXQgcz1hLmNsaWVudFgsbD1hLmNsaWVudFk7S210KHIuaW5mbyxzLGwpJiYoci5pbmZvLnN0YXRlPXIuaW5mby5zdGFydGVkP2EudHlwZT09PSJtb3VzZXVwIj8iZW5kIjoidHJhY2siOiJzdGFydCIsci5pbmZvLnN0YXRlPT09InN0YXJ0IiYmcjkoInRhcCIpLHIuaW5mby5hZGRNb3ZlKHt4OnMseTpsfSkscF8oYSl8fChyLmluZm8uc3RhdGU9ImVuZCIsRngoci5pbmZvKSksdCYmT0coci5pbmZvLHQsYSksci5pbmZvLnN0YXJ0ZWQ9ITApfSxpPWZ1bmN0aW9uKGEpe3IuaW5mby5zdGFydGVkJiZuKGEpLEZ4KHIuaW5mbyl9O2VndCh0aGlzLmluZm8sbixpKSx0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZfSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe2xldCB0PWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLng9dC5jbGllbnRYLHRoaXMuaW5mby55PXQuY2xpZW50WX0sdG91Y2htb3ZlOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXSxuPXIuY2xpZW50WCxpPXIuY2xpZW50WTtLbXQodGhpcy5pbmZvLG4saSkmJih0aGlzLmluZm8uc3RhdGU9PT0ic3RhcnQiJiZyOSgidGFwIiksdGhpcy5pbmZvLmFkZE1vdmUoe3g6bix5Oml9KSxPRyh0aGlzLmluZm8sdCxyKSx0aGlzLmluZm8uc3RhdGU9InRyYWNrIix0aGlzLmluZm8uc3RhcnRlZD0hMCl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe2xldCB0PV9wKGUpLHI9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8uc3RhcnRlZCYmKHRoaXMuaW5mby5zdGF0ZT0iZW5kIix0aGlzLmluZm8uYWRkTW92ZSh7eDpyLmNsaWVudFgseTpyLmNsaWVudFl9KSxPRyh0aGlzLmluZm8sdCxyKSl9fSk7ZnVuY3Rpb24gS210KGUsdCxyKXtpZihlLnByZXZlbnQpcmV0dXJuITE7aWYoZS5zdGFydGVkKXJldHVybiEwO2xldCBuPU1hdGguYWJzKGUueC10KSxpPU1hdGguYWJzKGUueS1yKTtyZXR1cm4gbj49am10fHxpPj1qbXR9ZnVuY3Rpb24gT0coZSx0LHIpe2lmKCF0KXJldHVybjtsZXQgbj1lLm1vdmVzW2UubW92ZXMubGVuZ3RoLTJdLGk9ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0xXSxvPWkueC1lLngsYT1pLnktZS55LHMsbD0wO24mJihzPWkueC1uLngsbD1pLnktbi55KSxxRyh0LCJ0cmFjayIse3N0YXRlOmUuc3RhdGUseDpyLmNsaWVudFgseTpyLmNsaWVudFksZHg6byxkeTphLGRkeDpzLGRkeTpsLHNvdXJjZUV2ZW50OnIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdXhlKHIuY2xpZW50WCxyLmNsaWVudFkpfX0pfVVHKHtuYW1lOiJ0YXAiLGRlcHM6WyJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbImNsaWNrIiwidG91Y2hlbmQiXX0sZW1pdHM6WyJ0YXAiXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTix0aGlzLmluZm8ueT1OYU4sdGhpcy5pbmZvLnByZXZlbnQ9ITF9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtwXyhlKSYmKHRoaXMuaW5mby54PWUuY2xpZW50WCx0aGlzLmluZm8ueT1lLmNsaWVudFkpfSxjbGljazpmdW5jdGlvbihlKXtwXyhlKSYmWm10KHRoaXMuaW5mbyxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe1ptdCh0aGlzLmluZm8sZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX19KTtmdW5jdGlvbiBabXQoZSx0LHIpe2xldCBuPU1hdGguYWJzKHQuY2xpZW50WC1lLngpLGk9TWF0aC5hYnModC5jbGllbnRZLWUueSksbz1fcChyfHx0KTshb3x8aXhlW28ubG9jYWxOYW1lXSYmby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fChpc05hTihuKXx8aXNOYU4oaSl8fG48PVltdCYmaTw9WW10fHxseGUodCkpJiYoZS5wcmV2ZW50fHxxRyhvLCJ0YXAiLHt4OnQuY2xpZW50WCx5OnQuY2xpZW50WSxzb3VyY2VFdmVudDp0LHByZXZlbnRlcjpyfSkpfXZhciBpZ3Q9X3A7dmFyIHloPVJuKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl7RW0obixpLG8pfHxzdXBlci5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZShuLGksbyl9X3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl7bmd0KG4saSxvKXx8c3VwZXIuX3JlbW92ZUV2ZW50TGlzdGVuZXJGcm9tTm9kZShuLGksbyl9fXJldHVybiB0fSk7dmFyIG14ZT0vOmhvc3RcKDpkaXJcKChsdHJ8cnRsKVwpXCkvZyxneGU9Jzpob3N0KFtkaXI9IiQxIl0pJyxfeGU9LyhbXHNcdy0jXC5cW1xdXCpdKik6ZGlyXCgobHRyfHJ0bClcKS9nLHl4ZT0nOmhvc3QoW2Rpcj0iJDIiXSkgJDEnLHZ4ZT0vOmRpclwoKD86bHRyfHJ0bClcKS8sYWd0PUJvb2xlYW4od2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UpLG9FPVtdLGFFPW51bGwsR0c9IiI7ZnVuY3Rpb24gc2d0KCl7R0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9ZnVuY3Rpb24gbGd0KGUpe2UuX19hdXRvRGlyT3B0T3V0fHxlLnNldEF0dHJpYnV0ZSgiZGlyIixHRyl9ZnVuY3Rpb24gY2d0KCl7c2d0KCksR0c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7Zm9yKGxldCBlPTA7ZTxvRS5sZW5ndGg7ZSsrKWxndChvRVtlXSl9ZnVuY3Rpb24geHhlKCl7YUUmJmFFLnRha2VSZWNvcmRzKCkubGVuZ3RoJiZjZ3QoKX12YXIgdWd0PVJuKGU9PnthZ3R8fGFFfHwoc2d0KCksYUU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2d0KSxhRS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7YXR0cmlidXRlczohMCxhdHRyaWJ1dGVGaWx0ZXI6WyJkaXIiXX0pKTtsZXQgdD1ISShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoaSxvKXtyZXR1cm4gaT10Ll9wcm9jZXNzU3R5bGVUZXh0LmNhbGwodGhpcyxpLG8pLCFhZ3QmJnZ4ZS50ZXN0KGkpJiYoaT10aGlzLl9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpLHRoaXMuX19hY3RpdmF0ZURpcj0hMCksaX1zdGF0aWMgX3JlcGxhY2VEaXJJbkNzc1RleHQoaSl7bGV0IG89aTtyZXR1cm4gbz1vLnJlcGxhY2UobXhlLGd4ZSksbz1vLnJlcGxhY2UoX3hlLHl4ZSksb31jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2F1dG9EaXJPcHRPdXQ9ITF9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX19hdXRvRGlyT3B0T3V0PXRoaXMuaGFzQXR0cmlidXRlKCJkaXIiKX1jb25uZWN0ZWRDYWxsYmFjaygpe3QucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpciYmKHh4ZSgpLG9FLnB1c2godGhpcyksbGd0KHRoaXMpKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe2lmKHQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrJiZzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuY29uc3RydWN0b3IuX19hY3RpdmF0ZURpcil7bGV0IGk9b0UuaW5kZXhPZih0aGlzKTtpPi0xJiZvRS5zcGxpY2UoaSwxKX19fXJldHVybiByLl9fYWN0aXZhdGVEaXI9ITEscn0pO3ZhciBpOT0hMSxoZ3Q9W10sZmd0PVtdO2Z1bmN0aW9uIHBndCgpe2k5PSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe2k5PSExLGJ4ZShoZ3QpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3eGUoZmd0KX0pfSl9ZnVuY3Rpb24gYnhlKGUpe2Zvcig7ZS5sZW5ndGg7KWRndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIHd4ZShlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspZGd0KGUuc2hpZnQoKSl9ZnVuY3Rpb24gZGd0KGUpe2xldCB0PWVbMF0scj1lWzFdLG49ZVsyXTt0cnl7ci5hcHBseSh0LG4pfWNhdGNoKGkpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyBpfSl9fWZ1bmN0aW9uIG1ndChlLHQscil7aTl8fHBndCgpLGhndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIFRtKGUsdCxyKXtpOXx8cGd0KCksZmd0LnB1c2goW2UsdCxyXSl9ZnVuY3Rpb24gZ2d0KCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoInVucmVzb2x2ZWQiKX1kb2N1bWVudC5yZWFkeVN0YXRlPT09ImludGVyYWN0aXZlInx8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSI/Z2d0KCk6d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGdndCk7ZnVuY3Rpb24gc0UoZSx0LHIpe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50OnJ9fXZhciBfZ3Q9MCx5Z3Q9MSxXRz0yLFlHPTM7ZnVuY3Rpb24gU3hlKGUsdCxyLG4saSxvKXtsZXQgYT1vLWkrMSxzPXItdCsxLGw9bmV3IEFycmF5KGEpO2ZvcihsZXQgYz0wO2M8YTtjKyspbFtjXT1uZXcgQXJyYXkocyksbFtjXVswXT1jO2ZvcihsZXQgYz0wO2M8cztjKyspbFswXVtjXT1jO2ZvcihsZXQgYz0xO2M8YTtjKyspZm9yKGxldCB1PTE7dTxzO3UrKylpZihqRyhlW3QrdS0xXSxuW2krYy0xXSkpbFtjXVt1XT1sW2MtMV1bdS0xXTtlbHNle2xldCBoPWxbYy0xXVt1XSsxLGY9bFtjXVt1LTFdKzE7bFtjXVt1XT1oPGY/aDpmfXJldHVybiBsfWZ1bmN0aW9uIE14ZShlKXtsZXQgdD1lLmxlbmd0aC0xLHI9ZVswXS5sZW5ndGgtMSxuPWVbdF1bcl0saT1bXTtmb3IoO3Q+MHx8cj4wOyl7aWYodD09MCl7aS5wdXNoKFdHKSxyLS07Y29udGludWV9aWYocj09MCl7aS5wdXNoKFlHKSx0LS07Y29udGludWV9bGV0IG89ZVt0LTFdW3ItMV0sYT1lW3QtMV1bcl0scz1lW3RdW3ItMV0sbDthPHM/bD1hPG8/YTpvOmw9czxvP3M6byxsPT1vPyhvPT1uP2kucHVzaChfZ3QpOihpLnB1c2goeWd0KSxuPW8pLHQtLSxyLS0pOmw9PWE/KGkucHVzaChZRyksdC0tLG49YSk6KGkucHVzaChXRyksci0tLG49cyl9cmV0dXJuIGkucmV2ZXJzZSgpLGl9ZnVuY3Rpb24gRXhlKGUsdCxyLG4saSxvKXtsZXQgYT0wLHM9MCxsLGM9TWF0aC5taW4oci10LG8taSk7aWYodD09MCYmaT09MCYmKGE9VHhlKGUsbixjKSkscj09ZS5sZW5ndGgmJm89PW4ubGVuZ3RoJiYocz1DeGUoZSxuLGMtYSkpLHQrPWEsaSs9YSxyLT1zLG8tPXMsci10PT0wJiZvLWk9PTApcmV0dXJuW107aWYodD09cil7Zm9yKGw9c0UodCxbXSwwKTtpPG87KWwucmVtb3ZlZC5wdXNoKG5baSsrXSk7cmV0dXJuW2xdfWVsc2UgaWYoaT09bylyZXR1cm5bc0UodCxbXSxyLXQpXTtsZXQgdT1NeGUoU3hlKGUsdCxyLG4saSxvKSk7bD12b2lkIDA7bGV0IGg9W10sZj10LHA9aTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKylzd2l0Y2godVtkXSl7Y2FzZSBfZ3Q6bCYmKGgucHVzaChsKSxsPXZvaWQgMCksZisrLHArKzticmVhaztjYXNlIHlndDpsfHwobD1zRShmLFtdLDApKSxsLmFkZGVkQ291bnQrKyxmKyssbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrO2Nhc2UgV0c6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrO2JyZWFrO2Nhc2UgWUc6bHx8KGw9c0UoZixbXSwwKSksbC5yZW1vdmVkLnB1c2gobltwXSkscCsrO2JyZWFrfXJldHVybiBsJiZoLnB1c2gobCksaH1mdW5jdGlvbiBUeGUoZSx0LHIpe2ZvcihsZXQgbj0wO248cjtuKyspaWYoIWpHKGVbbl0sdFtuXSkpcmV0dXJuIG47cmV0dXJuIHJ9ZnVuY3Rpb24gQ3hlKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPXQubGVuZ3RoLG89MDtmb3IoO288ciYmakcoZVstLW5dLHRbLS1pXSk7KW8rKztyZXR1cm4gb31mdW5jdGlvbiBvOShlLHQpe3JldHVybiBFeGUoZSwwLGUubGVuZ3RoLHQsMCx0Lmxlbmd0aCl9ZnVuY3Rpb24gakcoZSx0KXtyZXR1cm4gZT09PXR9ZnVuY3Rpb24gQngoZSl7cmV0dXJuIGUubG9jYWxOYW1lPT09InNsb3QifXZhciB2aD1jbGFzc3tzdGF0aWMgZ2V0RmxhdHRlbmVkTm9kZXMoZSl7bGV0IHQ9dWUoZSk7cmV0dXJuIEJ4KGUpPyhlPWUsdC5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOkFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAocj0+Qngocik/KHI9cix1ZShyKS5hc3NpZ25lZE5vZGVzKHtmbGF0dGVuOiEwfSkpOltyXSkucmVkdWNlKChyLG4pPT5yLmNvbmNhdChuKSxbXSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fY29ubmVjdGVkPSExLHRoaXMuX3RhcmdldD1lLHRoaXMuY2FsbGJhY2s9dCx0aGlzLl9lZmZlY3RpdmVOb2Rlcz1bXSx0aGlzLl9vYnNlcnZlcj1udWxsLHRoaXMuX3NjaGVkdWxlZD0hMSx0aGlzLl9ib3VuZFNjaGVkdWxlPSgpPT57dGhpcy5fc2NoZWR1bGUoKX0sdGhpcy5jb25uZWN0KCksdGhpcy5fc2NoZWR1bGUoKX1jb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl9saXN0ZW5TbG90cyhbdGhpcy5fdGFyZ2V0XSk6dWUodGhpcy5fdGFyZ2V0KS5jaGlsZHJlbiYmKHRoaXMuX2xpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTT90aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9d2luZG93LlNoYWR5RE9NLm9ic2VydmVDaGlsZHJlbih0aGlzLl90YXJnZXQsZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KToodGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihlPT57dGhpcy5fcHJvY2Vzc011dGF0aW9ucyhlKX0pLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl90YXJnZXQse2NoaWxkTGlzdDohMH0pKSksdGhpcy5fY29ubmVjdGVkPSEwfWRpc2Nvbm5lY3QoKXtCeCh0aGlzLl90YXJnZXQpP3RoaXMuX3VubGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl91bmxpc3RlblNsb3RzKHVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4pLHdpbmRvdy5TaGFkeURPTSYmdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPyh3aW5kb3cuU2hhZHlET00udW5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyKSx0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCk6dGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlciYmKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bnVsbCkpLHRoaXMuX2Nvbm5lY3RlZD0hMX1fc2NoZWR1bGUoKXt0aGlzLl9zY2hlZHVsZWR8fCh0aGlzLl9zY2hlZHVsZWQ9ITAsbGkucnVuKCgpPT50aGlzLmZsdXNoKCkpKX1fcHJvY2Vzc011dGF0aW9ucyhlKXt0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKSx0aGlzLmZsdXNoKCl9X3Byb2Nlc3NTbG90TXV0YXRpb25zKGUpe2lmKGUpZm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07ci5hZGRlZE5vZGVzJiZ0aGlzLl9saXN0ZW5TbG90cyhyLmFkZGVkTm9kZXMpLHIucmVtb3ZlZE5vZGVzJiZ0aGlzLl91bmxpc3RlblNsb3RzKHIucmVtb3ZlZE5vZGVzKX19Zmx1c2goKXtpZighdGhpcy5fY29ubmVjdGVkKXJldHVybiExO3dpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyP3RoaXMuX3Byb2Nlc3NTbG90TXV0YXRpb25zKHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSk6dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyJiZ0aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9zaGFkeUNoaWxkcmVuT2JzZXJ2ZXIudGFrZVJlY29yZHMoKSksdGhpcy5fc2NoZWR1bGVkPSExO2xldCBlPXt0YXJnZXQ6dGhpcy5fdGFyZ2V0LGFkZGVkTm9kZXM6W10scmVtb3ZlZE5vZGVzOltdfSx0PXRoaXMuY29uc3RydWN0b3IuZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5fdGFyZ2V0KSxyPW85KHQsdGhpcy5fZWZmZWN0aXZlTm9kZXMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT0wLHM7YTxvLnJlbW92ZWQubGVuZ3RoJiYocz1vLnJlbW92ZWRbYV0pO2ErKyllLnJlbW92ZWROb2Rlcy5wdXNoKHMpO2ZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKWZvcihsZXQgYT1vLmluZGV4O2E8by5pbmRleCtvLmFkZGVkQ291bnQ7YSsrKWUuYWRkZWROb2Rlcy5wdXNoKHRbYV0pO3RoaXMuX2VmZmVjdGl2ZU5vZGVzPXQ7bGV0IG49ITE7cmV0dXJuKGUuYWRkZWROb2Rlcy5sZW5ndGh8fGUucmVtb3ZlZE5vZGVzLmxlbmd0aCkmJihuPSEwLHRoaXMuY2FsbGJhY2suY2FsbCh0aGlzLl90YXJnZXQsZSkpLG59X2xpc3RlblNsb3RzKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO0J4KHIpJiZyLmFkZEV2ZW50TGlzdGVuZXIoInNsb3RjaGFuZ2UiLHRoaXMuX2JvdW5kU2NoZWR1bGUpfX1fdW5saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5yZW1vdmVFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19fTt2YXIgY2k9ZnVuY3Rpb24oKXtsZXQgZSx0O2RvIGU9d2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltJiZ3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0uZmx1c2goKSx0PVdtdCgpO3doaWxlKGV8fHQpfTt2YXIgSHg9RWxlbWVudC5wcm90b3R5cGUsQXhlPUh4Lm1hdGNoZXN8fEh4Lm1hdGNoZXNTZWxlY3Rvcnx8SHgubW96TWF0Y2hlc1NlbGVjdG9yfHxIeC5tc01hdGNoZXNTZWxlY3Rvcnx8SHgub01hdGNoZXNTZWxlY3Rvcnx8SHgud2Via2l0TWF0Y2hlc1NlbGVjdG9yLCRHPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIEF4ZS5jYWxsKGUsdCl9LEtyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3dpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ucGF0Y2godCksdGhpcy5ub2RlPXR9b2JzZXJ2ZU5vZGVzKHQpe3JldHVybiBuZXcgdmgodGhpcy5ub2RlLHQpfXVub2JzZXJ2ZU5vZGVzKHQpe3QuZGlzY29ubmVjdCgpfW5vdGlmeU9ic2VydmVyKCl7fWRlZXBDb250YWlucyh0KXtpZih1ZSh0aGlzLm5vZGUpLmNvbnRhaW5zKHQpKXJldHVybiEwO2xldCByPXQsbj10Lm93bmVyRG9jdW1lbnQ7Zm9yKDtyJiZyIT09biYmciE9PXRoaXMubm9kZTspcj11ZShyKS5wYXJlbnROb2RlfHx1ZShyKS5ob3N0O3JldHVybiByPT09dGhpcy5ub2RlfWdldE93bmVyUm9vdCgpe3JldHVybiB1ZSh0aGlzLm5vZGUpLmdldFJvb3ROb2RlKCl9Z2V0RGlzdHJpYnV0ZWROb2Rlcygpe3JldHVybiB0aGlzLm5vZGUubG9jYWxOYW1lPT09InNsb3QiP3VlKHRoaXMubm9kZSkuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pOltdfWdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCl7bGV0IHQ9W10scj11ZSh0aGlzLm5vZGUpLmFzc2lnbmVkU2xvdDtmb3IoO3I7KXQucHVzaChyKSxyPXVlKHIpLmFzc2lnbmVkU2xvdDtyZXR1cm4gdH1pbXBvcnROb2RlKHQscil7bGV0IG49dGhpcy5ub2RlIGluc3RhbmNlb2YgRG9jdW1lbnQ/dGhpcy5ub2RlOnRoaXMubm9kZS5vd25lckRvY3VtZW50O3JldHVybiB1ZShuKS5pbXBvcnROb2RlKHQscil9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzLm5vZGUpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyh0KXtsZXQgcj10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxuPVtdO2ZvcihsZXQgaT0wLG89ci5sZW5ndGgsYTtpPG8mJihhPXJbaV0pO2krKylhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiRHKGEsdCkmJm4ucHVzaChhKTtyZXR1cm4gbn1nZXQgYWN0aXZlRWxlbWVudCgpe2xldCB0PXRoaXMubm9kZTtyZXR1cm4gdC5fYWN0aXZlRWxlbWVudCE9PXZvaWQgMD90Ll9hY3RpdmVFbGVtZW50OnQuYWN0aXZlRWxlbWVudH19O2Z1bmN0aW9uIFB4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2Vbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dLmFwcGx5KHRoaXMubm9kZSxhcmd1bWVudHMpfX19ZnVuY3Rpb24gdmd0KGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBuPXRbcl07T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXX0sY29uZmlndXJhYmxlOiEwfSl9fWZ1bmN0aW9uIEl4ZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LHNldDpmdW5jdGlvbihpKXt0aGlzLm5vZGVbbl09aX0sY29uZmlndXJhYmxlOiEwfSl9fXZhciBsRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50PXR9Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5wYXRoWzBdfWdldCBsb2NhbFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldH1nZXQgcGF0aCgpe3JldHVybiB0aGlzLmV2ZW50LmNvbXBvc2VkUGF0aCgpfX07S3IucHJvdG90eXBlLmNsb25lTm9kZTtLci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7S3IucHJvdG90eXBlLmluc2VydEJlZm9yZTtLci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7S3IucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtLci5wcm90b3R5cGUuc2V0QXR0cmlidXRlO0tyLnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3I7S3IucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGw7S3IucHJvdG90eXBlLnBhcmVudE5vZGU7S3IucHJvdG90eXBlLmZpcnN0Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RDaGlsZDtLci5wcm90b3R5cGUubmV4dFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzU2libGluZztLci5wcm90b3R5cGUuZmlyc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLmxhc3RFbGVtZW50Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRFbGVtZW50U2libGluZztLci5wcm90b3R5cGUucHJldmlvdXNFbGVtZW50U2libGluZztLci5wcm90b3R5cGUuY2hpbGROb2RlcztLci5wcm90b3R5cGUuY2hpbGRyZW47S3IucHJvdG90eXBlLmNsYXNzTGlzdDtLci5wcm90b3R5cGUudGV4dENvbnRlbnQ7S3IucHJvdG90eXBlLmlubmVySFRNTDt2YXIgWEc9S3I7aWYod2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uaW5Vc2UmJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00uV3JhcHBlcil7Y2xhc3MgZSBleHRlbmRzIHdpbmRvdy5TaGFkeURPTS5XcmFwcGVye31PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhLci5wcm90b3R5cGUpLmZvckVhY2godD0+e3QhPSJhY3RpdmVFbGVtZW50IiYmKGUucHJvdG90eXBlW3RdPUtyLnByb3RvdHlwZVt0XSl9KSx2Z3QoZS5wcm90b3R5cGUsWyJjbGFzc0xpc3QiXSksWEc9ZSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsRS5wcm90b3R5cGUse2xvY2FsVGFyZ2V0OntnZXQoKXtsZXQgdD10aGlzLmV2ZW50LmN1cnJlbnRUYXJnZXQscj10JiZ6dCh0KS5nZXRPd25lclJvb3QoKSxuPXRoaXMucGF0aDtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZih6dChvKS5nZXRPd25lclJvb3QoKT09PXIpcmV0dXJuIG99fSxjb25maWd1cmFibGU6ITB9LHBhdGg6e2dldCgpe3JldHVybiB3aW5kb3cuU2hhZHlET00uY29tcG9zZWRQYXRoKHRoaXMuZXZlbnQpfSxjb25maWd1cmFibGU6ITB9fSl9ZWxzZSBQeGUoS3IucHJvdG90eXBlLFsiY2xvbmVOb2RlIiwiYXBwZW5kQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJyZW1vdmVDaGlsZCIsInJlcGxhY2VDaGlsZCIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInF1ZXJ5U2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yQWxsIl0pLHZndChLci5wcm90b3R5cGUsWyJwYXJlbnROb2RlIiwiZmlyc3RDaGlsZCIsImxhc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwicHJldmlvdXNTaWJsaW5nIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJsYXN0RWxlbWVudENoaWxkIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwicHJldmlvdXNFbGVtZW50U2libGluZyIsImNoaWxkTm9kZXMiLCJjaGlsZHJlbiIsImNsYXNzTGlzdCJdKSxJeGUoS3IucHJvdG90eXBlLFsidGV4dENvbnRlbnQiLCJpbm5lckhUTUwiLCJjbGFzc05hbWUiXSk7dmFyIHp0PWZ1bmN0aW9uKGUpe2lmKGU9ZXx8ZG9jdW1lbnQsZSBpbnN0YW5jZW9mIFhHfHxlIGluc3RhbmNlb2YgbEUpcmV0dXJuIGU7bGV0IHQ9ZS5fX2RvbUFwaTtyZXR1cm4gdHx8KGUgaW5zdGFuY2VvZiBFdmVudD90PW5ldyBsRShlKTp0PW5ldyBYRyhlKSxlLl9fZG9tQXBpPXQpLHR9O3ZhciBLRz13aW5kb3cuU2hhZHlET00seGd0PXdpbmRvdy5TaGFkeUNTUztmdW5jdGlvbiBiZ3QoZSx0KXtyZXR1cm4gdWUoZSkuZ2V0Um9vdE5vZGUoKT09PXR9ZnVuY3Rpb24gd2d0KGUsdD0hMSl7aWYoIUtHfHwheGd0fHwhS0cuaGFuZGxlc0R5bmFtaWNTY29waW5nKXJldHVybiBudWxsO2xldCByPXhndC5TY29waW5nU2hpbTtpZighcilyZXR1cm4gbnVsbDtsZXQgbj1yLnNjb3BlRm9yTm9kZShlKSxpPXVlKGUpLmdldFJvb3ROb2RlKCksbz1hPT57aWYoIWJndChhLGkpKXJldHVybjtsZXQgcz1BcnJheS5mcm9tKEtHLm5hdGl2ZU1ldGhvZHMucXVlcnlTZWxlY3RvckFsbC5jYWxsKGEsIioiKSk7cy5wdXNoKGEpO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2lmKCFiZ3QoYyxpKSljb250aW51ZTtsZXQgdT1yLmN1cnJlbnRTY29wZUZvck5vZGUoYyk7dSE9PW4mJih1IT09IiImJnIudW5zY29wZU5vZGUoYyx1KSxyLnNjb3BlTm9kZShjLG4pKX19O2lmKG8oZSksdCl7bGV0IGE9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocz0+e2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdO2ZvcihsZXQgdT0wO3U8Yy5hZGRlZE5vZGVzLmxlbmd0aDt1Kyspe2xldCBoPWMuYWRkZWROb2Rlc1t1XTtoLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJm8oaCl9fX0pO3JldHVybiBhLm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSxhfWVsc2UgcmV0dXJuIG51bGx9dmFyIFpHPSJkaXNhYmxlLXVwZ3JhZGUiLEpHPWU9Pntmb3IoO2U7KXtsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIm9ic2VydmVkQXR0cmlidXRlcyIpO2lmKHQpcmV0dXJuIHQuZ2V0O2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1yZXR1cm4oKT0+W119LGcxcj1SbihlPT57bGV0IHQ9U20oZSkscj1KRyh0KTtjbGFzcyBuIGV4dGVuZHMgdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHIuY2FsbCh0aGlzKS5jb25jYXQoWkcpfV9pbml0aWFsaXplUHJvcGVydGllcygpe3RoaXMuaGFzQXR0cmlidXRlKFpHKT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA6c3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQobykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhvKSl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpe289PVpHP3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmcz09bnVsbCYmKHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSk6c3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKG8sYSxzLGwpfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpfX1yZXR1cm4gbn0pO3ZhciBhOT0iZGlzYWJsZS11cGdyYWRlIixMeGU9d2luZG93LlNoYWR5Q1NTLEd0PVJuKGU9PntsZXQgdD15aChTbShlKSkscj1VST90OnVndCh0KSxuPUpHKHIpLGk9e3g6InBhbi14Iix5OiJwYW4teSIsbm9uZToibm9uZSIsYWxsOiJhdXRvIn07Y2xhc3MgbyBleHRlbmRzIHJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuaXNBdHRhY2hlZCx0aGlzLl9fYm91bmRMaXN0ZW5lcnMsdGhpcy5fZGVib3VuY2Vycyx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQsdGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkLHRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzfXN0YXRpYyBnZXQgaW1wb3J0TWV0YSgpe3JldHVybiB0aGlzLnByb3RvdHlwZS5pbXBvcnRNZXRhfWNyZWF0ZWQoKXt9X19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsYyl7KHRoaXMuX19kYXRhQXR0cmlidXRlcyYmdGhpcy5fX2RhdGFBdHRyaWJ1dGVzW3NdfHxzPT09YTkpJiZ0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyxudWxsKX1zZXRBdHRyaWJ1dGUocyxsKXtpZihxTSYmIXRoaXMuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLmdldEF0dHJpYnV0ZShzKTtzdXBlci5zZXRBdHRyaWJ1dGUocyxsKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxjLFN0cmluZyhsKSl9ZWxzZSBzdXBlci5zZXRBdHRyaWJ1dGUocyxsKX1yZW1vdmVBdHRyaWJ1dGUocyl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGw9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpLHRoaXMuX19hdHRyaWJ1dGVSZWFjdGlvbihzLGwsbnVsbCl9ZWxzZSBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocyl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtyZXR1cm4gcU0mJiF0aGlzLnByb3RvdHlwZS5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXM/KHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vYnNlcnZlZEF0dHJpYnV0ZXMiLHRoaXMpKXx8KHRoaXMuX19vYnNlcnZlZEF0dHJpYnV0ZXM9W10sVkkodGhpcy5wcm90b3R5cGUpKSx0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzKTpuLmNhbGwodGhpcykuY29uY2F0KGE5KX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuX2VuYWJsZVByb3BlcnRpZXMoKX1fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocyl7cmV0dXJuIHN1cGVyLl9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChzKSYmISh0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnRoaXMuX2lzUHJvcGVydHlQZW5kaW5nKHMpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCYmdGhpcy5fdGFrZUF0dHJpYnV0ZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fChzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaXNBdHRhY2hlZD0hMCx0aGlzLmF0dGFjaGVkKCkpfWF0dGFjaGVkKCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITEsdGhpcy5kZXRhY2hlZCgpKX1kZXRhY2hlZCgpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsdSl7bCE9PWMmJihzPT1hOT90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJmM9PW51bGwmJih0aGlzLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZD0hMSx1ZSh0aGlzKS5pc0Nvbm5lY3RlZCYmdGhpcy5jb25uZWN0ZWRDYWxsYmFjaygpKTooc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpLHRoaXMuYXR0cmlidXRlQ2hhbmdlZChzLGwsYykpKX1hdHRyaWJ1dGVDaGFuZ2VkKHMsbCxjKXt9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7aWYocHAmJnRoaXMuaGFzQXR0cmlidXRlKGE5KSl0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITA7ZWxzZXtsZXQgcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7cy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLHMpKXx8KHRoaXMuX3JlZ2lzdGVyZWQoKSxzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD0hMCksc3VwZXIuX2luaXRpYWxpemVQcm9wZXJ0aWVzKCksdGhpcy5yb290PXRoaXMsdGhpcy5jcmVhdGVkKCkscU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHRoaXMuaGFzQXR0cmlidXRlcygpP3RoaXMuX3Rha2VBdHRyaWJ1dGVzKCk6dGhpcy5wYXJlbnROb2RlfHwodGhpcy5fX25lZWRzQXR0cmlidXRlc0F0Q29ubmVjdGVkPSEwKSksdGhpcy5fYXBwbHlMaXN0ZW5lcnMoKX19X3Rha2VBdHRyaWJ1dGVzKCl7bGV0IHM9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbD0wLGM9cy5sZW5ndGg7bDxjO2wrKyl7bGV0IHU9c1tsXTt0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24odS5uYW1lLG51bGwsdS52YWx1ZSl9fV9yZWdpc3RlcmVkKCl7fXJlYWR5KCl7dGhpcy5fZW5zdXJlQXR0cmlidXRlcygpLHN1cGVyLnJlYWR5KCl9X2Vuc3VyZUF0dHJpYnV0ZXMoKXt9X2FwcGx5TGlzdGVuZXJzKCl7fXNlcmlhbGl6ZShzKXtyZXR1cm4gdGhpcy5fc2VyaWFsaXplVmFsdWUocyl9ZGVzZXJpYWxpemUocyxsKXtyZXR1cm4gdGhpcy5fZGVzZXJpYWxpemVWYWx1ZShzLGwpfXJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl9wcm9wZXJ0eVRvQXR0cmlidXRlKHMsbCxjKX1zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHMsbCxjKXt0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShjfHx0aGlzLHMsbCl9ZXh0ZW5kKHMsbCl7aWYoIShzJiZsKSlyZXR1cm4gc3x8bDtsZXQgYz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhsKTtmb3IobGV0IHU9MCxoO3U8Yy5sZW5ndGgmJihoPWNbdV0pO3UrKyl7bGV0IGY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGgpO2YmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGgsZil9cmV0dXJuIHN9bWl4aW4ocyxsKXtmb3IobGV0IGMgaW4gbClzW2NdPWxbY107cmV0dXJuIHN9Y2hhaW5PYmplY3QocyxsKXtyZXR1cm4gcyYmbCYmcyE9PWwmJihzLl9fcHJvdG9fXz1sKSxzfWluc3RhbmNlVGVtcGxhdGUocyl7bGV0IGw9dGhpcy5jb25zdHJ1Y3Rvci5fY29udGVudEZvclRlbXBsYXRlKHMpO3JldHVybiBkb2N1bWVudC5pbXBvcnROb2RlKGwsITApfWZpcmUocyxsLGMpe2M9Y3x8e30sbD1sPT1udWxsP3t9Omw7bGV0IHU9bmV3IEV2ZW50KHMse2J1YmJsZXM6Yy5idWJibGVzPT09dm9pZCAwPyEwOmMuYnViYmxlcyxjYW5jZWxhYmxlOkJvb2xlYW4oYy5jYW5jZWxhYmxlKSxjb21wb3NlZDpjLmNvbXBvc2VkPT09dm9pZCAwPyEwOmMuY29tcG9zZWR9KTt1LmRldGFpbD1sO2xldCBoPWMubm9kZXx8dGhpcztyZXR1cm4gdWUoaCkuZGlzcGF0Y2hFdmVudCh1KSx1fWxpc3RlbihzLGwsYyl7cz1zfHx0aGlzO2xldCB1PXRoaXMuX19ib3VuZExpc3RlbmVyc3x8KHRoaXMuX19ib3VuZExpc3RlbmVycz1uZXcgV2Vha01hcCksaD11LmdldChzKTtofHwoaD17fSx1LnNldChzLGgpKTtsZXQgZj1sK2M7aFtmXXx8KGhbZl09dGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZShzLGwsYyx0aGlzKSl9dW5saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnMmJnRoaXMuX19ib3VuZExpc3RlbmVycy5nZXQocyksaD1sK2MsZj11JiZ1W2hdO2YmJih0aGlzLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUocyxsLGYpLHVbaF09bnVsbCl9c2V0U2Nyb2xsRGlyZWN0aW9uKHMsbCl7ZF8obHx8dGhpcyxpW3NdfHwiYXV0byIpfSQkKHMpe3JldHVybiB0aGlzLnJvb3QucXVlcnlTZWxlY3RvcihzKX1nZXQgZG9tSG9zdCgpe2xldCBzPXVlKHRoaXMpLmdldFJvb3ROb2RlKCk7cmV0dXJuIHMgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3MuaG9zdDpzfWRpc3RyaWJ1dGVDb250ZW50KCl7bGV0IGw9enQodGhpcyk7d2luZG93LlNoYWR5RE9NJiZsLnNoYWRvd1Jvb3QmJlNoYWR5RE9NLmZsdXNoKCl9Z2V0RWZmZWN0aXZlQ2hpbGROb2Rlcygpe3JldHVybiB6dCh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCl9cXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpe3JldHVybiB6dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0RWZmZWN0aXZlQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9KX1nZXRFZmZlY3RpdmVUZXh0Q29udGVudCgpe2xldCBzPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLGw9W107Zm9yKGxldCBjPTAsdTt1PXNbY107YysrKXUubm9kZVR5cGUhPT1Ob2RlLkNPTU1FTlRfTk9ERSYmbC5wdXNoKHUudGV4dENvbnRlbnQpO3JldHVybiBsLmpvaW4oIiIpfXF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW4ocyl7bGV0IGw9dGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyk7cmV0dXJuIGwmJmxbMF19cXVlcnlBbGxFZmZlY3RpdmVDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMocyl9Z2V0Q29udGVudENoaWxkTm9kZXMocyl7bGV0IGw9dGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Ioc3x8InNsb3QiKTtyZXR1cm4gbD96dChsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6W119Z2V0Q29udGVudENoaWxkcmVuKHMpe3JldHVybiB0aGlzLmdldENvbnRlbnRDaGlsZE5vZGVzKHMpLmZpbHRlcihmdW5jdGlvbihjKXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9aXNMaWdodERlc2NlbmRhbnQocyl7bGV0IGw9dGhpcztyZXR1cm4gbCE9PXMmJnVlKGwpLmNvbnRhaW5zKHMpJiZ1ZShsKS5nZXRSb290Tm9kZSgpPT09dWUocykuZ2V0Um9vdE5vZGUoKX1pc0xvY2FsRGVzY2VuZGFudChzKXtyZXR1cm4gdGhpcy5yb290PT09dWUocykuZ2V0Um9vdE5vZGUoKX1zY29wZVN1YnRyZWUocyxsPSExKXtyZXR1cm4gd2d0KHMsbCl9Z2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHMpe3JldHVybiBMeGUuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKHRoaXMscyl9ZGVib3VuY2UocyxsLGMpe3JldHVybiB0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbc109c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tzXSxjPjA/bW8uYWZ0ZXIoYyk6bGksbC5iaW5kKHRoaXMpKX1pc0RlYm91bmNlckFjdGl2ZShzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107cmV0dXJuISEobCYmbC5pc0FjdGl2ZSgpKX1mbHVzaERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5mbHVzaCgpfWNhbmNlbERlYm91bmNlcihzKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9O2xldCBsPXRoaXMuX2RlYm91bmNlcnNbc107bCYmbC5jYW5jZWwoKX1hc3luYyhzLGwpe3JldHVybiBsPjA/bW8ucnVuKHMuYmluZCh0aGlzKSxsKTp+bGkucnVuKHMuYmluZCh0aGlzKSl9Y2FuY2VsQXN5bmMocyl7czwwP2xpLmNhbmNlbCh+cyk6bW8uY2FuY2VsKHMpfWNyZWF0ZShzLGwpe2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocyk7aWYobClpZihjLnNldFByb3BlcnRpZXMpYy5zZXRQcm9wZXJ0aWVzKGwpO2Vsc2UgZm9yKGxldCB1IGluIGwpY1t1XT1sW3VdO3JldHVybiBjfWVsZW1lbnRNYXRjaGVzKHMsbCl7cmV0dXJuICRHKGx8fHRoaXMscyl9dG9nZ2xlQXR0cmlidXRlKHMsbCl7bGV0IGM9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTMmJihjPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuaGFzQXR0cmlidXRlKHMpKSxsPyh1ZShjKS5zZXRBdHRyaWJ1dGUocywiIiksITApOih1ZShjKS5yZW1vdmVBdHRyaWJ1dGUocyksITEpfXRvZ2dsZUNsYXNzKHMsbCxjKXtjPWN8fHRoaXMsYXJndW1lbnRzLmxlbmd0aD09MSYmKGw9IWMuY2xhc3NMaXN0LmNvbnRhaW5zKHMpKSxsP2MuY2xhc3NMaXN0LmFkZChzKTpjLmNsYXNzTGlzdC5yZW1vdmUocyl9dHJhbnNmb3JtKHMsbCl7bD1sfHx0aGlzLGwuc3R5bGUud2Via2l0VHJhbnNmb3JtPXMsbC5zdHlsZS50cmFuc2Zvcm09c310cmFuc2xhdGUzZChzLGwsYyx1KXt1PXV8fHRoaXMsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZTNkKCIrcysiLCIrbCsiLCIrYysiKSIsdSl9YXJyYXlEZWxldGUocyxsKXtsZXQgYztpZihBcnJheS5pc0FycmF5KHMpKXtpZihjPXMuaW5kZXhPZihsKSxjPj0wKXJldHVybiBzLnNwbGljZShjLDEpfWVsc2UgaWYoYz1Obyh0aGlzLHMpLmluZGV4T2YobCksYz49MClyZXR1cm4gdGhpcy5zcGxpY2UocyxjLDEpO3JldHVybiBudWxsfV9sb2dnZXIocyxsKXtzd2l0Y2goQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg9PT0xJiZBcnJheS5pc0FycmF5KGxbMF0pJiYobD1sWzBdKSxzKXtjYXNlImxvZyI6Y2FzZSJ3YXJuIjpjYXNlImVycm9yIjpjb25zb2xlW3NdKC4uLmwpfX1fbG9nKC4uLnMpe3RoaXMuX2xvZ2dlcigibG9nIixzKX1fd2FybiguLi5zKXt0aGlzLl9sb2dnZXIoIndhcm4iLHMpfV9lcnJvciguLi5zKXt0aGlzLl9sb2dnZXIoImVycm9yIixzKX1fbG9nZihzLC4uLmwpe3JldHVyblsiWyVzOjolc10iLHRoaXMuaXMscywuLi5sXX19cmV0dXJuIG8ucHJvdG90eXBlLmlzPSIiLG99KTt2YXIgQ209RWUoT2UoKSwxKTtmdW5jdGlvbiB4aChlLHQpe2xldCByPTAsbj0wO2Zvcig7Oyl7aWYocj09PWUubGVuZ3RoKXJldHVybiBuPT09dC5sZW5ndGg/MDotMTtpZihuPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYobV8oZVtyXSkmJm1fKHRbbl0pKXtsZXQgaT1yLG89bjtyPVNndChlLHIrMSksbj1TZ3QodCxuKzEpO2xldCBhPXBhcnNlRmxvYXQoZS5zbGljZShpLHIpKSxzPXBhcnNlRmxvYXQodC5zbGljZShvLG4pKTtpZihhPHMpcmV0dXJuLTE7aWYoYT5zKXJldHVybiAxO2NvbnRpbnVlfWlmKFFHKGVbcl0pKXtpZighUUcodFtuXSkpcmV0dXJuLTF9ZWxzZXtpZihRRyh0W25dKSlyZXR1cm4gMTtpZihlW3JdPHRbbl0pcmV0dXJuLTE7aWYoZVtyXT50W25dKXJldHVybiAxfXIrKyxuKyt9fWZ1bmN0aW9uIFNndChlLHQpe2xldCByOyhmdW5jdGlvbihpKXtpW2kuTkFUVVJBTD0wXT0iTkFUVVJBTCIsaVtpLlJFQUw9MV09IlJFQUwiLGlbaS5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixpW2kuRVhQT05FTlQ9M109IkVYUE9ORU5UIn0pKHJ8fChyPXt9KSk7bGV0IG49ci5OQVRVUkFMO2Zvcig7dDxlLmxlbmd0aDt0KyspaWYobj09PXIuTkFUVVJBTCl7aWYoZVt0XT09PSIuIiluPXIuUkVBTDtlbHNlIGlmKGVbdF09PT0iZSJ8fGVbdF09PT0iRSIpbj1yLkVYUE9ORU5UX1NJR047ZWxzZSBpZighbV8oZVt0XSkpYnJlYWt9ZWxzZSBpZihuPT09ci5SRUFMKXtpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuRVhQT05FTlRfU0lHTilpZihtXyhlW3RdKXx8ZVt0XT09PSIrInx8ZVt0XT09PSItIiluPXIuRVhQT05FTlQ7ZWxzZSBicmVhaztlbHNlIGlmKG49PT1yLkVYUE9ORU5UJiYhbV8oZVt0XSkpYnJlYWs7cmV0dXJuIHR9ZnVuY3Rpb24gbV8oZSl7cmV0dXJuIjAiPD1lJiZlPD0iOSJ9ZnVuY3Rpb24gUUcoZSl7cmV0dXJuIGU9PT0iLyJ8fGU9PT0iXyJ8fG1fKGUpfXZhciBreGU9W107ZnVuY3Rpb24gUnhlKGUpe3JldHVybiBDbS5rZXlzKGUpLnNvcnQoeGgpfWZ1bmN0aW9uICRpKGUpe3JldHVybiBDbS51bmlvbi5hcHBseShudWxsLENtLnZhbHVlcyhlKSkuc29ydCh4aCl9ZnVuY3Rpb24gTnhlKGUsdCl7bGV0IHI9W107cmV0dXJuIHQuZm9yRWFjaChuPT5yPXIuY29uY2F0KGVbbl0pKSxDbS51bmlxKHIpLnNvcnQoeGgpfXZhciBFZ3Q9IlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsVGd0PSJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyI7dmFyIHRXPXt9O0tzKHRXLHtnZXRGZWF0dXJlRmxhZ3M6KCk9Pk94ZSxnZXRGZWF0dXJlRmxhZ3NUb1NlbmRUb1NlcnZlcjooKT0+Y0UsaW5pdGlhbGl6ZUZlYXR1cmVGbGFnczooKT0+Q2d0LHNldEZlYXR1cmVGbGFnczooKT0+RHhlfSk7dmFyIHM5LGw5O0NndCgpO2Z1bmN0aW9uIENndCgpe3M5PW51bGwsbDk9bnVsbH1mdW5jdGlvbiBEeGUoZSx0KXtzOT1lLGw5PXR9ZnVuY3Rpb24gT3hlKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9ZnVuY3Rpb24gY0UoKXtpZihsOT09PW51bGwpdGhyb3cgRXJyb3IoIkZlYXR1cmVGbGFncyBoYXZlIG5vdCB5ZXQgYmVlbiBkZXRlcm1pbmVkIGJ5IFRlbnNvckJvYXJkLiIpO3JldHVybiBsOX12YXIgYzk9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lPSJSZXF1ZXN0Q2FuY2VsbGF0aW9uRXJyb3IifX0sVng9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkludmFsaWRSZXF1ZXN0T3B0aW9uc0Vycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxWeC5wcm90b3R5cGUpfX0sdUU9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCksdGhpcy5tZXNzYWdlPWBSZXF1ZXN0TmV0d29ya0Vycm9yOiAke3Quc3RhdHVzfSBhdCAke3J9YCx0aGlzLm5hbWU9IlJlcXVlc3ROZXR3b3JrRXJyb3IiLHRoaXMucmVxPXQsdGhpcy51cmw9cn19LEFtOyhmdW5jdGlvbihlKXtlLkdFVD0iR0VUIixlLlBPU1Q9IlBPU1QifSkoQW18fChBbT17fSkpO3ZhciBVeD1jbGFzc3t2YWxpZGF0ZSgpe2lmKHRoaXMubWV0aG9kVHlwZT09PUFtLkdFVCYmdGhpcy5ib2R5KXRocm93IG5ldyBWeCgiYm9keSBtdXN0IGJlIG1pc3NpbmcgZm9yIGEgR0VUIHJlcXVlc3QuIil9fSxBZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTFlMyxyPTMpe3RoaXMuX3F1ZXVlPVtdLHRoaXMuX25BY3RpdmVSZXF1ZXN0cz0wLHRoaXMuX25TaW11bHRhbmVvdXNSZXF1ZXN0cz10LHRoaXMuX21heFJldHJpZXM9cn1yZXF1ZXN0KHQscil7bGV0IG49RnhlKHIpO3JldHVybiB0aGlzLnJlcXVlc3RXaXRoT3B0aW9ucyh0LG4pfXJlcXVlc3RXaXRoT3B0aW9ucyh0LHIpe3JldHVybiByLnZhbGlkYXRlKCksbmV3IFByb21pc2UoKGksbyk9PntsZXQgYT17cmVzb2x2ZTppLHJlamVjdDpvfTt0aGlzLl9xdWV1ZS5wdXNoKGEpLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PnRoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsdGhpcy5fbWF4UmV0cmllcyxyKSkudGhlbihpPT4odGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpLGkpLGk9PihpLm5hbWU9PT0iUmVxdWVzdE5ldHdvcmtFcnJvciImJih0aGlzLl9uQWN0aXZlUmVxdWVzdHMtLSx0aGlzLmxhdW5jaFJlcXVlc3RzKCkpLFByb21pc2UucmVqZWN0KGkpKSl9ZmV0Y2godCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz17cmVzb2x2ZTpuLHJlamVjdDppfTt0aGlzLl9xdWV1ZS5wdXNoKG8pLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pLnRoZW4oKCk9PntsZXQgbj0xO3JldHVybiBuZXcgUHJvbWlzZShpPT57bGV0IG89KCk9PntmZXRjaCh0LHIpLnRoZW4oYT0+e2lmKCFhLm9rJiZ0aGlzLl9tYXhSZXRyaWVzPm4pe24rKyxvKCk7cmV0dXJufWkoYSksdGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpfSl9O28oKX0pfSl9Y2xlYXJRdWV1ZSgpe3ZhciB0O2Zvcig7dGhpcy5fcXVldWUubGVuZ3RoPjA7KSh0PXRoaXMuX3F1ZXVlLnBvcCgpKT09bnVsbHx8dC5yZWplY3QobmV3IGM5KCJSZXF1ZXN0IGNhbmNlbGxlZCBieSBjbGVhclF1ZXVlIikpfWFjdGl2ZVJlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0c31vdXRzdGFuZGluZ1JlcXVlc3RzKCl7cmV0dXJuIHRoaXMuX25BY3RpdmVSZXF1ZXN0cyt0aGlzLl9xdWV1ZS5sZW5ndGh9bGF1bmNoUmVxdWVzdHMoKXtmb3IoO3RoaXMuX25BY3RpdmVSZXF1ZXN0czx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHMmJnRoaXMuX3F1ZXVlLmxlbmd0aD4wOyl0aGlzLl9uQWN0aXZlUmVxdWVzdHMrKyx0aGlzLl9xdWV1ZS5wb3AoKS5yZXNvbHZlKHZvaWQgMCl9cHJvbWlzZVdpdGhSZXRyaWVzKHQscixuKXt2YXIgaT1hPT5hLG89YT0+cj4wP3RoaXMucHJvbWlzZVdpdGhSZXRyaWVzKHQsci0xLG4pOlByb21pc2UucmVqZWN0KGEpO3JldHVybiB0aGlzLl9wcm9taXNlRnJvbVVybCh0LG4pLnRoZW4oaSxvKX1fcHJvbWlzZUZyb21VcmwodCxyKXtyZXR1cm4gbmV3IFByb21pc2UoKG4saSk9PntsZXQgbz16eGUoci5tZXRob2RUeXBlLHQsci53aXRoQ3JlZGVudGlhbHMsci5jb250ZW50VHlwZSk7by5zZXRSZXF1ZXN0SGVhZGVyKEVndCxKU09OLnN0cmluZ2lmeShjRSgpKSksby5vbmxvYWQ9ZnVuY3Rpb24oKXtvLnN0YXR1cz09PTIwMD9uKEpTT04ucGFyc2Uoby5yZXNwb25zZVRleHQpKTppKG5ldyB1RShvLHQpKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7aShuZXcgdUUobyx0KSl9LHIuYm9keT9vLnNlbmQoci5ib2R5KTpvLnNlbmQoKX0pfX07ZnVuY3Rpb24genhlKGUsdCxyLG4pe2xldCBpPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gaS5vcGVuKGUsdCksciYmKGkud2l0aENyZWRlbnRpYWxzPXIpLG4mJmkuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixuKSxpfWZ1bmN0aW9uIEZ4ZShlKXtsZXQgdD1uZXcgVXg7cmV0dXJuIGU/KHQubWV0aG9kVHlwZT1BbS5QT1NULHQuYm9keT1CeGUoZSksdCk6KHQubWV0aG9kVHlwZT1BbS5HRVQsdCl9ZnVuY3Rpb24gQnhlKGUpe2xldCB0PW5ldyBGb3JtRGF0YTtmb3IobGV0W3Isbl1vZiBPYmplY3QuZW50cmllcyhlKSl7bGV0IGk9QXJyYXkuaXNBcnJheShuKT9uOltuXTtmb3IobGV0IG8gb2YgaSl0LmFwcGVuZChyLG8pfXJldHVybiB0fXZhciBBZ3Q9ImV4cGVyaW1lbnRhbFBsdWdpbiIsSHhlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCksVnhlPVBndCgpO2Z1bmN0aW9uIFBndCgpe3JldHVybntlbnZpcm9ubWVudDooKT0+cXgoIi9lbnZpcm9ubWVudCIpLGV4cGVyaW1lbnRzOigpPT5xeCgiL2V4cGVyaW1lbnRzIikscGx1Z2luUm91dGU6KGUsdCxyKT0+cXgoYC9wbHVnaW4vJHtlfSR7dH1gLHIpLHBsdWdpblJvdXRlRm9yU3JjOihlLHQscj1uZXcgVVJMU2VhcmNoUGFyYW1zKT0+e2xldCBuPWNFKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiZyLmFwcGVuZChUZ3QsSlNPTi5zdHJpbmdpZnkobikpLHF4KGAvcGx1Z2luLyR7ZX0ke3R9YCxyKX0scGx1Z2luc0xpc3Rpbmc6KCk9PnF4KCIvcGx1Z2luc19saXN0aW5nIixJZ3Qoe1tBZ3RdOkh4ZS5nZXRBbGwoQWd0KX0pKSxydW5zOigpPT5xeCgiL3J1bnMiKX19ZnVuY3Rpb24gX2UoKXtyZXR1cm4gVnhlfWZ1bmN0aW9uIHF4KGUsdD1uZXcgVVJMU2VhcmNoUGFyYW1zKXtsZXQgcj0iZGF0YSIrZTtyZXR1cm4gU3RyaW5nKHQpJiYocis9KGUuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcodCkpLHJ9ZnVuY3Rpb24gSWd0KGU9e30pe2xldCB0PU9iamVjdC5rZXlzKGUpLnNvcnQoKS5maWx0ZXIobj0+ZVtuXSkscj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiB0LmZvckVhY2gobj0+e2xldCBpPWVbbl07KEFycmF5LmlzQXJyYXkoaSk/aTpbaV0pLmZvckVhY2goYT0+ci5hcHBlbmQobixhKSl9KSxyfXZhciB1OT1FZShPZSgpLDEpO3ZhciBOYTsoZnVuY3Rpb24oZSl7ZVtlLlNFQVJDSF9SRVNVTFRTPTBdPSJTRUFSQ0hfUkVTVUxUUyIsZVtlLlBSRUZJWF9HUk9VUD0xXT0iUFJFRklYX0dST1VQIn0pKE5hfHwoTmE9e30pKTtmdW5jdGlvbiBVeGUoZSx0KXtsZXQgcj0oKCk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gobil7cmV0dXJuIG51bGx9fSkoKTtyZXR1cm57bmFtZTp0LG1ldGFkYXRhOnt0eXBlOk5hLlNFQVJDSF9SRVNVTFRTLHZhbGlkUmVnZXg6ISFyLHVuaXZlcnNhbFJlZ2V4OnQ9PT0iLioifSxpdGVtczpyP2UuZmlsdGVyKG49Pm4ubWF0Y2gocikpOltdfX1mdW5jdGlvbiBxeGUoZSx0PSIvIil7bGV0IHI9W10sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGk9PntsZXQgbz1pLmluZGV4T2YodCksYT1vPj0wP2kuc2xpY2UoMCxvKTppO2lmKCFuW2FdKXtsZXQgcz17bmFtZTphLG1ldGFkYXRhOnt0eXBlOk5hLlBSRUZJWF9HUk9VUH0saXRlbXM6W119O25bYV09cyxyLnB1c2gocyl9blthXS5pdGVtcy5wdXNoKGkpfSkscn1mdW5jdGlvbiBHeGUoZSx0PSIiKXtsZXQgcj1bVXhlKGUsdCldLG49cXhlKGUpO3JldHVybiBBcnJheSgpLmNvbmNhdChyLG4pfWZ1bmN0aW9uIGhFKGUsdCxyKXtsZXQgbj0kaShlKSxpPUd4ZShuLHIpLG89V3hlKHU5LnBpY2soZSx0KSk7cmV0dXJuIGkubWFwKCh7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bH0pPT4oe25hbWU6YSxtZXRhZGF0YTpzLGl0ZW1zOmwubWFwKGM9Pih7dGFnOmMscnVuczooby5nZXQoYyl8fFtdKS5zbGljZSgpfSkpfSkpfWZ1bmN0aW9uIFd4ZShlKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdLmZvckVhY2gobj0+e2xldCBpPXQuZ2V0KG4pfHxbXTtpLnB1c2gociksdC5zZXQobixpKX0pfSksdH1mdW5jdGlvbiBZeGUoZSx0KXtsZXQgcj14aChlLnRhZyx0LnRhZyk7cmV0dXJuIHIhPTA/cjp4aChlLnJ1bix0LnJ1bil9ZnVuY3Rpb24gUWwoZSx0LHIpe2xldCBuPWhFKGUsdCxyKTtmdW5jdGlvbiBpKG8pe2xldCBhPXU5LmZsYXR0ZW4oby5pdGVtcy5tYXAoKHt0YWc6cyxydW5zOmx9KT0+bC5tYXAoYz0+KHt0YWc6cyxydW46Y30pKSkpO3JldHVybiBhLnNvcnQoWXhlKSx7bmFtZTpvLm5hbWUsbWV0YWRhdGE6by5tZXRhZGF0YSxpdGVtczphfX1yZXR1cm4gbi5tYXAoaSl9dmFyIGNXPXt9O0tzKGNXLHtJcm9uUmVzaXphYmxlQmVoYXZpb3I6KCk9PkpzfSk7dmFyIGp4ZT17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsbGlzdGVuZXJzOiEwLGhvc3RBdHRyaWJ1dGVzOiEwfSxOZ3Q9e2F0dGFjaGVkOiEwLGRldGFjaGVkOiEwLHJlYWR5OiEwLGNyZWF0ZWQ6ITAsYmVmb3JlUmVnaXN0ZXI6ITAscmVnaXN0ZXJlZDohMCxhdHRyaWJ1dGVDaGFuZ2VkOiEwLGJlaGF2aW9yczohMCxfbm9BY2Nlc3NvcnM6ITB9LFh4ZT1PYmplY3QuYXNzaWduKHtsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITAscHJvcGVydGllczohMCxvYnNlcnZlcnM6ITB9LE5ndCk7ZnVuY3Rpb24gJHhlKGUsdCxyKXtsZXQgbj1lLl9ub0FjY2Vzc29ycyxpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2lmKCEoYSBpbiByKSlpZihuKXRbYV09ZVthXTtlbHNle2xldCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxhKTtzJiYocy5jb25maWd1cmFibGU9ITAsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsYSxzKSl9fX1mdW5jdGlvbiBEZ3QoZSx0KXtyZXR1cm4gRmd0KHt9LEd0KHQpLGUpfWZ1bmN0aW9uIEt4ZShlLHQscil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspT2d0KGUsdFtuXSxyLFh4ZSl9ZnVuY3Rpb24gT2d0KGUsdCxyLG4peyR4ZSh0LGUsbik7Zm9yKGxldCBpIGluIGp4ZSl0W2ldJiYocltpXT1yW2ldfHxbXSxyW2ldLnB1c2godFtpXSkpfWZ1bmN0aW9uIHpndChlLHQscil7dD10fHxbXTtmb3IobGV0IG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7bGV0IGk9ZVtuXTtpP0FycmF5LmlzQXJyYXkoaSk/emd0KGksdCk6dC5pbmRleE9mKGkpPDAmJighcnx8ci5pbmRleE9mKGkpPDApJiZ0LnVuc2hpZnQoaSk6Y29uc29sZS53YXJuKCJiZWhhdmlvciBpcyBudWxsLCBjaGVjayBmb3IgbWlzc2luZyBvciA0MDQgaW1wb3J0Iil9cmV0dXJuIHR9ZnVuY3Rpb24ga2d0KGUsdCl7Zm9yKGxldCByIGluIHQpe2xldCBuPWVbcl0saT10W3JdOyEoInZhbHVlImluIGkpJiZuJiYidmFsdWUiaW4gbj9lW3JdPU9iamVjdC5hc3NpZ24oe3ZhbHVlOm4udmFsdWV9LGkpOmVbcl09aX19dmFyIFJndD1HdChIVE1MRWxlbWVudCk7ZnVuY3Rpb24gRmd0KGUsdCxyKXtsZXQgbixpPXt9O2NsYXNzIG8gZXh0ZW5kcyB0e3N0YXRpYyBfZmluYWxpemVDbGFzcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImdlbmVyYXRlZEZyb20iLHRoaXMpKSl0Ll9maW5hbGl6ZUNsYXNzLmNhbGwodGhpcyk7ZWxzZXtpZihuKWZvcihsZXQgbD0wLGM7bDxuLmxlbmd0aDtsKyspYz1uW2xdLGMucHJvcGVydGllcyYmdGhpcy5jcmVhdGVQcm9wZXJ0aWVzKGMucHJvcGVydGllcyksYy5vYnNlcnZlcnMmJnRoaXMuY3JlYXRlT2JzZXJ2ZXJzKGMub2JzZXJ2ZXJzLGMucHJvcGVydGllcyk7ZS5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoZS5wcm9wZXJ0aWVzKSxlLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoZS5vYnNlcnZlcnMsZS5wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7bGV0IGw9e307aWYobilmb3IobGV0IGM9MDtjPG4ubGVuZ3RoO2MrKylrZ3QobCxuW2NdLnByb3BlcnRpZXMpO3JldHVybiBrZ3QobCxlLnByb3BlcnRpZXMpLGx9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtsZXQgbD1bXTtpZihuKWZvcihsZXQgYz0wLHU7YzxuLmxlbmd0aDtjKyspdT1uW2NdLHUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdCh1Lm9ic2VydmVycykpO3JldHVybiBlLm9ic2VydmVycyYmKGw9bC5jb25jYXQoZS5vYnNlcnZlcnMpKSxsfWNyZWF0ZWQoKXtzdXBlci5jcmVhdGVkKCk7bGV0IGw9aS5jcmVhdGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfV9yZWdpc3RlcmVkKCl7bGV0IGw9by5wcm90b3R5cGU7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixsKSkpe2wuX19oYXNSZWdpc3RlckZpbmlzaGVkPSEwLHN1cGVyLl9yZWdpc3RlcmVkKCkscHAmJmEobCk7bGV0IGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHU9aS5iZWZvcmVSZWdpc3RlcjtpZih1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKTtpZih1PWkucmVnaXN0ZXJlZCx1KWZvcihsZXQgaD0wO2g8dS5sZW5ndGg7aCsrKXVbaF0uY2FsbChjKX19X2FwcGx5TGlzdGVuZXJzKCl7c3VwZXIuX2FwcGx5TGlzdGVuZXJzKCk7bGV0IGw9aS5saXN0ZW5lcnM7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpZih1KWZvcihsZXQgaCBpbiB1KXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcyxoLHVbaF0pfX1fZW5zdXJlQXR0cmlidXRlcygpe2xldCBsPWkuaG9zdEF0dHJpYnV0ZXM7aWYobClmb3IobGV0IGM9bC5sZW5ndGgtMTtjPj0wO2MtLSl7bGV0IHU9bFtjXTtmb3IobGV0IGggaW4gdSl0aGlzLl9lbnN1cmVBdHRyaWJ1dGUoaCx1W2hdKX1zdXBlci5fZW5zdXJlQXR0cmlidXRlcygpfXJlYWR5KCl7c3VwZXIucmVhZHkoKTtsZXQgbD1pLnJlYWR5O2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dGFjaGVkKCl7c3VwZXIuYXR0YWNoZWQoKTtsZXQgbD1pLmF0dGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWRldGFjaGVkKCl7c3VwZXIuZGV0YWNoZWQoKTtsZXQgbD1pLmRldGFjaGVkO2lmKGwpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspbFtjXS5jYWxsKHRoaXMpfWF0dHJpYnV0ZUNoYW5nZWQobCxjLHUpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWQoKTtsZXQgaD1pLmF0dHJpYnV0ZUNoYW5nZWQ7aWYoaClmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyloW2ZdLmNhbGwodGhpcyxsLGMsdSl9fWlmKHIpe0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IHM9dC5wcm90b3R5cGUuYmVoYXZpb3JzO249emd0KHIsbnVsbCxzKSxvLnByb3RvdHlwZS5iZWhhdmlvcnM9cz9zLmNvbmNhdChyKTpufWxldCBhPXM9PntuJiZLeGUocyxuLGkpLE9ndChzLGUsaSxOZ3QpfTtyZXR1cm4gcHB8fGEoby5wcm90b3R5cGUpLG8uZ2VuZXJhdGVkRnJvbT1lLG99dmFyIGg5PWZ1bmN0aW9uKGUsdCl7ZXx8Y29uc29sZS53YXJuKCJQb2x5bWVyLkNsYXNzIHJlcXVpcmVzIGBpbmZvYCBhcmd1bWVudCIpO2xldCByPXQ/dChSZ3QpOlJndDtyZXR1cm4gcj1GZ3QoZSxyLGUuYmVoYXZpb3JzKSxyLmlzPXIucHJvdG90eXBlLmlzPWUuaXMscn07dmFyIFl0PWZ1bmN0aW9uKGUpe2xldCB0O3JldHVybiB0eXBlb2YgZT09ImZ1bmN0aW9uIj90PWU6dD1ZdC5DbGFzcyhlKSxlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyYmKHQucHJvdG90eXBlLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcz1lLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyksY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCksdH07WXQuQ2xhc3M9aDk7ZnVuY3Rpb24gZVcoZSx0LHIsbixpKXtsZXQgbztpJiYobz10eXBlb2Ygcj09Im9iamVjdCImJnIhPT1udWxsLG8mJihuPWUuX19kYXRhVGVtcFt0XSkpO2xldCBhPW4hPT1yJiYobj09PW58fHI9PT1yKTtyZXR1cm4gbyYmYSYmKGUuX19kYXRhVGVtcFt0XT1yKSxhfXZhciBHeD1SbihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxvKXtyZXR1cm4gZVcodGhpcyxuLGksbywhMCl9fXJldHVybiB0fSksZjk9Um4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdXRhYmxlRGF0YTpCb29sZWFufX1fc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiBlVyh0aGlzLG4saSxvLHRoaXMubXV0YWJsZURhdGEpfX1yZXR1cm4gdH0pO0d4Ll9tdXRhYmxlUHJvcGVydHlDaGFuZ2U9ZVc7dmFyIHJXPW51bGw7ZnVuY3Rpb24gblcoKXtyZXR1cm4gcld9blcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpuVyx3cml0YWJsZTohMH19KTt2YXIgSGd0PXVfKG5XKSxaeGU9R3goSGd0KTtmdW5jdGlvbiBKeGUoZSx0KXtyVz1lLE9iamVjdC5zZXRQcm90b3R5cGVPZihlLHQucHJvdG90eXBlKSxuZXcgdCxyVz1udWxsfXZhciBReGU9dV8oY2xhc3N7fSk7ZnVuY3Rpb24gaVcoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtpZihCb29sZWFuKGUpIT1Cb29sZWFuKG4uX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fKSlpZihuLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpZT8obi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQsbi50ZXh0Q29udGVudD0iIik6bi50ZXh0Q29udGVudD1uLl9fcG9seW1lclRleHRDb250ZW50X187ZWxzZSBpZihuLmxvY2FsTmFtZT09PSJzbG90IilpZihlKW4uX19wb2x5bWVyUmVwbGFjZWRfXz1kb2N1bWVudC5jcmVhdGVDb21tZW50KCJoaWRkZW4tc2xvdCIpLHVlKHVlKG4pLnBhcmVudE5vZGUpLnJlcGxhY2VDaGlsZChuLl9fcG9seW1lclJlcGxhY2VkX18sbik7ZWxzZXtsZXQgaT1uLl9fcG9seW1lclJlcGxhY2VkX187aSYmdWUodWUoaSkucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4saSl9ZWxzZSBuLnN0eWxlJiYoZT8obi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5LG4uc3R5bGUuZGlzcGxheT0ibm9uZSIpOm4uc3R5bGUuZGlzcGxheT1uLl9fcG9seW1lckRpc3BsYXlfXyk7bi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX189ZSxuLl9zaG93SGlkZUNoaWxkcmVuJiZuLl9zaG93SGlkZUNoaWxkcmVuKGUpfX12YXIgYmg9Y2xhc3MgZXh0ZW5kcyBReGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9jb25maWd1cmVQcm9wZXJ0aWVzKHQpLHRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHRoaXMuX19kYXRhSG9zdCk7bGV0IHI9W107dGhpcy5jaGlsZHJlbj1yO2ZvcihsZXQgaT10aGlzLnJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZylyLnB1c2goaSksaS5fX3RlbXBsYXRpemVJbnN0YW5jZT10aGlzO3RoaXMuX190ZW1wbGF0aXplT3duZXImJnRoaXMuX190ZW1wbGF0aXplT3duZXIuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCEwKTtsZXQgbj10aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnM7KHQmJm4uaW5zdGFuY2VQcm9wc3x8IW4uaW5zdGFuY2VQcm9wcykmJnRoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX1fY29uZmlndXJlUHJvcGVydGllcyh0KXtpZih0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMuZm9yd2FyZEhvc3RQcm9wKWZvcihsZXQgbiBpbiB0aGlzLl9faG9zdFByb3BzKXRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLHRoaXMuX19kYXRhSG9zdFsiX2hvc3RfIituXSk7Zm9yKGxldCBuIGluIHQpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdFtuXSl9Zm9yd2FyZEhvc3RQcm9wKHQscil7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsciwhMSwhMCkmJnRoaXMuX19kYXRhSG9zdC5fZW5xdWV1ZUNsaWVudCh0aGlzKX1fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil7aWYodGhpcy5fbWV0aG9kSG9zdCYmdGhpcy5fX3RlbXBsYXRpemVPcHRpb25zLnBhcmVudE1vZGVsKXRoaXMuX21ldGhvZEhvc3QuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodCxyLGk9PntpLm1vZGVsPXRoaXMsbihpKX0pO2Vsc2V7bGV0IGk9dGhpcy5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7aSYmaS5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsbil9fV9zaG93SGlkZUNoaWxkcmVuKHQpe2lXKHQsdGhpcy5jaGlsZHJlbil9X3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKXt0Ll9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmdC5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnI9PSJ0ZXh0Q29udGVudCI/dC5fX3BvbHltZXJUZXh0Q29udGVudF9fPW46c3VwZXIuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQscixuKX1nZXQgcGFyZW50TW9kZWwoKXtsZXQgdD10aGlzLl9fcGFyZW50TW9kZWw7aWYoIXQpe2xldCByO3Q9dGhpcztkbyB0PXQuX19kYXRhSG9zdC5fX2RhdGFIb3N0O3doaWxlKChyPXQuX190ZW1wbGF0aXplT3B0aW9ucykmJiFyLnBhcmVudE1vZGVsKTt0aGlzLl9fcGFyZW50TW9kZWw9dH1yZXR1cm4gdH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiEwfX07YmgucHJvdG90eXBlLl9fZGF0YUhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM7YmgucHJvdG90eXBlLl9tZXRob2RIb3N0O2JoLnByb3RvdHlwZS5fX3RlbXBsYXRpemVPd25lcjtiaC5wcm90b3R5cGUuX19ob3N0UHJvcHM7dmFyIHRiZT1HeChiaCk7ZnVuY3Rpb24gQmd0KGUpe2xldCB0PWUuX19kYXRhSG9zdDtyZXR1cm4gdCYmdC5fbWV0aG9kSG9zdHx8dH1mdW5jdGlvbiBlYmUoZSx0LHIpe2xldCBuPXIubXV0YWJsZURhdGE/dGJlOmJoO3RjLm1peGluJiYobj10Yy5taXhpbihuKSk7bGV0IGk9Y2xhc3MgZXh0ZW5kcyBue307cmV0dXJuIGkucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU9wdGlvbnM9cixpLnByb3RvdHlwZS5fYmluZFRlbXBsYXRlKGUpLGliZShpLGUsdCxyKSxpfWZ1bmN0aW9uIHJiZShlLHQscixuKXtsZXQgaT1yLmZvcndhcmRIb3N0UHJvcDtpZihpJiZ0Lmhhc0hvc3RQcm9wcyl7bGV0IG89ZS5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSIsYT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzO2lmKCFhKXtpZihvKXtsZXQgbD1yLm11dGFibGVEYXRhP1p4ZTpIZ3Q7Y2xhc3MgYyBleHRlbmRzIGx7fWE9dC50ZW1wbGF0aXplVGVtcGxhdGVDbGFzcz1jfWVsc2V7bGV0IGw9ZS5jb25zdHJ1Y3RvcjtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9bGV0IHM9dC5ob3N0UHJvcHM7Zm9yKGxldCBsIGluIHMpYS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KCJfaG9zdF8iK2wsYS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLlBST1BBR0FURSx7Zm46bmJlKGwsaSl9KSxhLnByb3RvdHlwZS5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoIl9ob3N0XyIrbCk7TEkmJm4mJnNiZSh0LHIsbil9aWYoZS5fX2RhdGFQcm90byYmT2JqZWN0LmFzc2lnbihlLl9fZGF0YSxlLl9fZGF0YVByb3RvKSxvKUp4ZShlLGEpLGUuX19kYXRhVGVtcD17fSxlLl9fZGF0YVBlbmRpbmc9bnVsbCxlLl9fZGF0YU9sZD1udWxsLGUuX2VuYWJsZVByb3BlcnRpZXMoKTtlbHNle09iamVjdC5zZXRQcm90b3R5cGVPZihlLGEucHJvdG90eXBlKTtsZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylpZihsPSJfaG9zdF8iK2wsbCBpbiBlKXtsZXQgYz1lW2xdO2RlbGV0ZSBlW2xdLGUuX19kYXRhW2xdPWN9fX19ZnVuY3Rpb24gbmJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4saSxvKXt0LmNhbGwobi5fX3RlbXBsYXRpemVPd25lcixpLnN1YnN0cmluZyg2KSxvW2ldKX19ZnVuY3Rpb24gaWJlKGUsdCxyLG4pe2xldCBpPXIuaG9zdFByb3BzfHx7fTtmb3IobGV0IG8gaW4gbi5pbnN0YW5jZVByb3BzKXtkZWxldGUgaVtvXTtsZXQgYT1uLm5vdGlmeUluc3RhbmNlUHJvcDthJiZlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpvYmUobyxhKX0pfWlmKG4uZm9yd2FyZEhvc3RQcm9wJiZ0Ll9fZGF0YUhvc3QpZm9yKGxldCBvIGluIGkpci5oYXNIb3N0UHJvcHN8fChyLmhhc0hvc3RQcm9wcz0hMCksZS5wcm90b3R5cGUuX2FkZFByb3BlcnR5RWZmZWN0KG8sZS5wcm90b3R5cGUuUFJPUEVSVFlfRUZGRUNUX1RZUEVTLk5PVElGWSx7Zm46YWJlKCl9KX1mdW5jdGlvbiBvYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLG4saSxvW2ldKX19ZnVuY3Rpb24gYWJlKCl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXt0Ll9fZGF0YUhvc3QuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aCgiX2hvc3RfIityLG5bcl0sITAsITApfX1mdW5jdGlvbiB0YyhlLHQscil7aWYoaXUmJiFCZ3QoZSkpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtpZihyPXJ8fHt9LGUuX190ZW1wbGF0aXplT3duZXIpdGhyb3cgbmV3IEVycm9yKCJBIDx0ZW1wbGF0ZT4gY2FuIG9ubHkgYmUgdGVtcGxhdGl6ZWQgb25jZSIpO2UuX190ZW1wbGF0aXplT3duZXI9dDtsZXQgaT0odD90LmNvbnN0cnVjdG9yOmJoKS5fcGFyc2VUZW1wbGF0ZShlKSxvPWkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M7b3x8KG89ZWJlKGUsaSxyKSxpLnRlbXBsYXRpemVJbnN0YW5jZUNsYXNzPW8pO2xldCBhPUJndChlKTtyYmUoZSxpLHIsYSk7bGV0IHM9Y2xhc3MgZXh0ZW5kcyBve307cmV0dXJuIHMucHJvdG90eXBlLl9tZXRob2RIb3N0PWEscy5wcm90b3R5cGUuX19kYXRhSG9zdD1lLHMucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyPXQscy5wcm90b3R5cGUuX19ob3N0UHJvcHM9aS5ob3N0UHJvcHMscz1zLHN9ZnVuY3Rpb24gc2JlKGUsdCxyKXtsZXQgbj1yLmNvbnN0cnVjdG9yLl9wcm9wZXJ0aWVzLHtwcm9wZXJ0eUVmZmVjdHM6aX09ZSx7aW5zdGFuY2VQcm9wczpvfT10O2ZvcihsZXQgYSBpbiBpKWlmKCFuW2FdJiYhKG8mJm9bYV0pKXtsZXQgcz1pW2FdO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXR7cGFydDpjfT1zW2xdLmluZm87aWYoIShjLnNpZ25hdHVyZSYmYy5zaWduYXR1cmUuc3RhdGljKSl7Y29uc29sZS53YXJuKGBQcm9wZXJ0eSAnJHthfScgdXNlZCBpbiB0ZW1wbGF0ZSBidXQgbm90IGRlY2xhcmVkIGluICdwcm9wZXJ0aWVzJzsgYXR0cmlidXRlIHdpbGwgbm90IGJlIG9ic2VydmVkLmApO2JyZWFrfX19fWZ1bmN0aW9uIHA5KGUsdCl7bGV0IHI7Zm9yKDt0OylpZihyPXQuX19kYXRhSG9zdD90OnQuX190ZW1wbGF0aXplSW5zdGFuY2UpaWYoci5fX2RhdGFIb3N0IT1lKXQ9ci5fX2RhdGFIb3N0O2Vsc2UgcmV0dXJuIHI7ZWxzZSB0PXVlKHQpLnBhcmVudE5vZGU7cmV0dXJuIG51bGx9dmFyIFZndD17dGVtcGxhdGl6ZShlLHQpe3RoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGU9ZSx0aGlzLmN0b3I9dGMoZSx0aGlzLHttdXRhYmxlRGF0YTpCb29sZWFuKHQpLHBhcmVudE1vZGVsOnRoaXMuX3BhcmVudE1vZGVsLGluc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxmb3J3YXJkSG9zdFByb3A6dGhpcy5fZm9yd2FyZEhvc3RQcm9wVjIsbm90aWZ5SW5zdGFuY2VQcm9wOnRoaXMuX25vdGlmeUluc3RhbmNlUHJvcFYyfSl9LHN0YW1wKGUpe3JldHVybiBuZXcgdGhpcy5jdG9yKGUpfSxtb2RlbEZvckVsZW1lbnQoZSl7cmV0dXJuIHA5KHRoaXMuX3RlbXBsYXRpemVyVGVtcGxhdGUsZSl9fTt2YXIgVWd0PSExO2Z1bmN0aW9uIFd4KCl7aWYocHAmJiFjXyl7aWYoIVVndCl7VWd0PSEwO2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ZS50ZXh0Q29udGVudD0iZG9tLWJpbmQsZG9tLWlmLGRvbS1yZXBlYXR7ZGlzcGxheTpub25lO30iLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9cmV0dXJuITB9cmV0dXJuITF9dmFyIGxiZT15aChmOSh1XyhIVE1MRWxlbWVudCkpKSxvVz1jbGFzcyBleHRlbmRzIGxiZXtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsibXV0YWJsZS1kYXRhIl19Y29uc3RydWN0b3IoKXtpZihzdXBlcigpLGl1KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1iaW5kIG5vdCBhbGxvd2VkIik7dGhpcy5yb290PW51bGwsdGhpcy4kPW51bGwsdGhpcy5fX2NoaWxkcmVuPW51bGx9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuLGkpe3RoaXMubXV0YWJsZURhdGE9ITB9Y29ubmVjdGVkQ2FsbGJhY2soKXtXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW5kZXIoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19yZW1vdmVDaGlsZHJlbigpfV9faW5zZXJ0Q2hpbGRyZW4oKXt1ZSh1ZSh0aGlzKS5wYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUodGhpcy5yb290LHRoaXMpfV9fcmVtb3ZlQ2hpbGRyZW4oKXtpZih0aGlzLl9fY2hpbGRyZW4pZm9yKGxldCB0PTA7dDx0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoO3QrKyl0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5fX2NoaWxkcmVuW3RdKX1yZW5kZXIoKXtsZXQgdDtpZighdGhpcy5fX2NoaWxkcmVuKXtpZih0PXR8fHRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSwhdCl7bGV0IHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0PXRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKSx0KXIuZGlzY29ubmVjdCgpLHRoaXMucmVuZGVyKCk7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoImRvbS1iaW5kIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7ci5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pO3JldHVybn10aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0KSx0aGlzLiQ9dGhpcy5yb290LiQsdGhpcy5fX2NoaWxkcmVuPVtdO2ZvcihsZXQgcj10aGlzLnJvb3QuZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZyl0aGlzLl9fY2hpbGRyZW5bdGhpcy5fX2NoaWxkcmVuLmxlbmd0aF09cjt0aGlzLl9lbmFibGVQcm9wZXJ0aWVzKCl9dGhpcy5fX2luc2VydENoaWxkcmVuKCksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1iaW5kIixvVyk7dmFyIGNiZT1mOShtdCksZDk9Y2xhc3MgZXh0ZW5kcyBjYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJkb20tcmVwZWF0In1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxpdGVtc0luZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpdGVtc0luZGV4In0sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19zb3J0Q2hhbmdlZCJ9LGZpbHRlcjp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjoiX19maWx0ZXJDaGFuZ2VkIn0sb2JzZXJ2ZTp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9fb2JzZXJ2ZUNoYW5nZWQifSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohVU0scmVhZE9ubHk6ITB9LGluaXRpYWxDb3VudDp7dHlwZTpOdW1iZXJ9LHRhcmdldEZyYW1lcmF0ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjB9LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfX2NvbXB1dGVGcmFtZVRpbWUodGFyZ2V0RnJhbWVyYXRlKSJ9LG5vdGlmeURvbUNoYW5nZTp7dHlwZTpCb29sZWFufSxyZXVzZUNodW5rZWRJbnN0YW5jZXM6e3R5cGU6Qm9vbGVhbn19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2VzPVtdLHRoaXMuX19yZW5kZXJEZWJvdW5jZXI9bnVsbCx0aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sdGhpcy5fX2NodW5rQ291bnQ9bnVsbCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPW51bGwsdGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSExLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9ITEsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9ITEsdGhpcy5fX2NodW5raW5nSWQ9MCx0aGlzLl9fc29ydEZuPW51bGwsdGhpcy5fX2ZpbHRlckZuPW51bGwsdGhpcy5fX29ic2VydmVQYXRocz1udWxsLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2lzRGV0YWNoZWQ9ITAsdGhpcy50ZW1wbGF0ZT1udWxsLHRoaXMuX3RlbXBsYXRlSW5mb31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fX2lzRGV0YWNoZWQ9ITA7Zm9yKGxldCB0PTA7dDx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDt0KyspdGhpcy5fX2RldGFjaEluc3RhbmNlKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7aWYoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5fX2lzRGV0YWNoZWQpe3RoaXMuX19pc0RldGFjaGVkPSExO2xldCB0PXVlKHVlKHRoaXMpLnBhcmVudE5vZGUpO2ZvcihsZXQgcj0wO3I8dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7cisrKXRoaXMuX19hdHRhY2hJbnN0YW5jZShyLHQpfX1fX2Vuc3VyZVRlbXBsYXRpemVkKCl7aWYoIXRoaXMuX19jdG9yKXtsZXQgdD10aGlzLHI9dGhpcy50ZW1wbGF0ZT10Ll90ZW1wbGF0ZUluZm8/dDp0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7aWYoIXIpe2xldCBpPW5ldyBNdXRhdGlvbk9ic2VydmVyKCgpPT57aWYodGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKWkuZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLXJlcGVhdCByZXF1aXJlcyBhIDx0ZW1wbGF0ZT4gY2hpbGQiKX0pO3JldHVybiBpLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksITF9bGV0IG49e307blt0aGlzLmFzXT0hMCxuW3RoaXMuaW5kZXhBc109ITAsblt0aGlzLml0ZW1zSW5kZXhBc109ITAsdGhpcy5fX2N0b3I9dGMocix0aGlzLHttdXRhYmxlRGF0YTp0aGlzLm11dGFibGVEYXRhLHBhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6bixmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24oaSxvKXtsZXQgYT10aGlzLl9faW5zdGFuY2VzO2ZvcihsZXQgcz0wLGw7czxhLmxlbmd0aCYmKGw9YVtzXSk7cysrKWwuZm9yd2FyZEhvc3RQcm9wKGksbyl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbihpLG8sYSl7aWYoT0kodGhpcy5hcyxvKSl7bGV0IHM9aVt0aGlzLml0ZW1zSW5kZXhBc107bz09dGhpcy5hcyYmKHRoaXMuaXRlbXNbc109YSk7bGV0IGw9ZHAodGhpcy5hcyxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7c31gLG8pO3RoaXMubm90aWZ5UGF0aChsLGEpfX19KX1yZXR1cm4hMH1fX2dldE1ldGhvZEhvc3QoKXtyZXR1cm4gdGhpcy5fX2RhdGFIb3N0Ll9tZXRob2RIb3N0fHx0aGlzLl9fZGF0YUhvc3R9X19mdW5jdGlvbkZyb21Qcm9wZXJ0eVZhbHVlKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIil7bGV0IHI9dCxuPXRoaXMuX19nZXRNZXRob2RIb3N0KCk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0uYXBwbHkobixhcmd1bWVudHMpfX1yZXR1cm4gdH1fX3NvcnRDaGFuZ2VkKHQpe3RoaXMuX19zb3J0Rm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fZmlsdGVyQ2hhbmdlZCh0KXt0aGlzLl9fZmlsdGVyRm49dGhpcy5fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCksdGhpcy5pdGVtcyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fY29tcHV0ZUZyYW1lVGltZSh0KXtyZXR1cm4gTWF0aC5jZWlsKDFlMy90KX1fX29ic2VydmVDaGFuZ2VkKCl7dGhpcy5fX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCIuKiIsIi4iKS5zcGxpdCgiICIpfV9faGFuZGxlT2JzZXJ2ZWRQYXRocyh0KXtpZih0aGlzLl9fc29ydEZufHx0aGlzLl9fZmlsdGVyRm4pe2lmKCF0KXRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpO2Vsc2UgaWYodGhpcy5fX29ic2VydmVQYXRocyl7bGV0IHI9dGhpcy5fX29ic2VydmVQYXRocztmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0LmluZGV4T2YocltuXSk9PT0wJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcix0aGlzLmRlbGF5KX19fV9faXRlbXNDaGFuZ2VkKHQpe3RoaXMuaXRlbXMmJiFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpJiZjb25zb2xlLndhcm4oImRvbS1yZXBlYXQgZXhwZWN0ZWQgYXJyYXkgZm9yIGBpdGVtc2AsIGZvdW5kIix0aGlzLml0ZW1zKSx0aGlzLl9faGFuZGxlSXRlbVBhdGgodC5wYXRoLHQudmFsdWUpfHwodC5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMCksdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpKX1fX2RlYm91bmNlUmVuZGVyKHQscj0wKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIscj4wP21vLmFmdGVyKHIpOmxpLHQuYmluZCh0aGlzKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9cmVuZGVyKCl7dGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpLGNpKCl9X19yZW5kZXIoKXtpZighdGhpcy5fX2Vuc3VyZVRlbXBsYXRpemVkKCkpcmV0dXJuO2xldCB0PXRoaXMuaXRlbXN8fFtdLHI9dGhpcy5fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KSxuPXRoaXMuX19jYWxjdWxhdGVMaW1pdChyLmxlbmd0aCk7dGhpcy5fX3VwZGF0ZUluc3RhbmNlcyh0LG4sciksdGhpcy5pbml0aWFsQ291bnQmJih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rfHx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZykmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fY2h1bmtpbmdJZCksdGhpcy5fX2NodW5raW5nSWQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl9fY29udGludWVDaHVua2luZygpKSksdGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5fX2luc3RhbmNlcy5sZW5ndGgpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSl9X19zb3J0QW5kRmlsdGVySXRlbXModCl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylyW25dPW47cmV0dXJuIHRoaXMuX19maWx0ZXJGbiYmKHI9ci5maWx0ZXIoKG4saSxvKT0+dGhpcy5fX2ZpbHRlckZuKHRbbl0saSxvKSkpLHRoaXMuX19zb3J0Rm4mJnIuc29ydCgobixpKT0+dGhpcy5fX3NvcnRGbih0W25dLHRbaV0pKSxyfV9fY2FsY3VsYXRlTGltaXQodCl7bGV0IHI9dCxuPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO2lmKHRoaXMuaW5pdGlhbENvdW50KXtsZXQgaTshdGhpcy5fX2NodW5rQ291bnR8fHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZCYmIXRoaXMucmV1c2VDaHVua2VkSW5zdGFuY2VzPyhyPU1hdGgubWluKHQsdGhpcy5pbml0aWFsQ291bnQpLGk9TWF0aC5tYXgoci1uLDApLHRoaXMuX19jaHVua0NvdW50PWl8fDEpOihpPU1hdGgubWluKE1hdGgubWF4KHQtbiwwKSx0aGlzLl9fY2h1bmtDb3VudCkscj1NYXRoLm1pbihuK2ksdCkpLHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bms9aT09PXRoaXMuX19jaHVua0NvdW50LHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nPXI8dCx0aGlzLl9fcmVuZGVyU3RhcnRUaW1lPXBlcmZvcm1hbmNlLm5vdygpfXJldHVybiB0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEscn1fX2NvbnRpbnVlQ2h1bmtpbmcoKXtpZih0aGlzLl9fc2hvdWxkTWVhc3VyZUNodW5rKXtsZXQgdD1wZXJmb3JtYW5jZS5ub3coKS10aGlzLl9fcmVuZGVyU3RhcnRUaW1lLHI9dGhpcy5fdGFyZ2V0RnJhbWVUaW1lL3Q7dGhpcy5fX2NodW5rQ291bnQ9TWF0aC5yb3VuZCh0aGlzLl9fY2h1bmtDb3VudCpyKXx8MX10aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZyYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIpfV9fdXBkYXRlSW5zdGFuY2VzKHQscixuKXtsZXQgaT10aGlzLl9faXRlbXNJZHhUb0luc3RJZHg9e30sbztmb3Iobz0wO288cjtvKyspe2xldCBhPXRoaXMuX19pbnN0YW5jZXNbb10scz1uW29dLGw9dFtzXTtpW3NdPW8sYT8oYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuYXMsbCksYS5fc2V0UGVuZGluZ1Byb3BlcnR5KHRoaXMuaW5kZXhBcyxvKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pdGVtc0luZGV4QXMscyksYS5fZmx1c2hQcm9wZXJ0aWVzKCkpOnRoaXMuX19pbnNlcnRJbnN0YW5jZShsLG8scyl9Zm9yKGxldCBhPXRoaXMuX19pbnN0YW5jZXMubGVuZ3RoLTE7YT49bzthLS0pdGhpcy5fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGEpfV9fZGV0YWNoSW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2luc3RhbmNlc1t0XSxuPXVlKHIucm9vdCk7Zm9yKGxldCBpPTA7aTxyLmNoaWxkcmVuLmxlbmd0aDtpKyspe2xldCBvPXIuY2hpbGRyZW5baV07bi5hcHBlbmRDaGlsZChvKX1yZXR1cm4gcn1fX2F0dGFjaEluc3RhbmNlKHQscil7bGV0IG49dGhpcy5fX2luc3RhbmNlc1t0XTtyLmluc2VydEJlZm9yZShuLnJvb3QsdGhpcyl9X19kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZSh0KXt0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCksdGhpcy5fX2luc3RhbmNlcy5zcGxpY2UodCwxKX1fX3N0YW1wSW5zdGFuY2UodCxyLG4pe2xldCBpPXt9O3JldHVybiBpW3RoaXMuYXNdPXQsaVt0aGlzLmluZGV4QXNdPXIsaVt0aGlzLml0ZW1zSW5kZXhBc109bixuZXcgdGhpcy5fX2N0b3IoaSl9X19pbnNlcnRJbnN0YW5jZSh0LHIsbil7bGV0IGk9dGhpcy5fX3N0YW1wSW5zdGFuY2UodCxyLG4pLG89dGhpcy5fX2luc3RhbmNlc1tyKzFdLGE9bz9vLmNoaWxkcmVuWzBdOnRoaXM7cmV0dXJuIHVlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShpLnJvb3QsYSksdGhpcy5fX2luc3RhbmNlc1tyXT1pLGl9X3Nob3dIaWRlQ2hpbGRyZW4odCl7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2luc3RhbmNlc1tyXS5fc2hvd0hpZGVDaGlsZHJlbih0KX1fX2hhbmRsZUl0ZW1QYXRoKHQscil7bGV0IG49dC5zbGljZSg2KSxpPW4uaW5kZXhPZigiLiIpLG89aTwwP246bi5zdWJzdHJpbmcoMCxpKTtpZihvPT1wYXJzZUludChvLDEwKSl7bGV0IGE9aTwwPyIiOm4uc3Vic3RyaW5nKGkrMSk7dGhpcy5fX2hhbmRsZU9ic2VydmVkUGF0aHMoYSk7bGV0IHM9dGhpcy5fX2l0ZW1zSWR4VG9JbnN0SWR4W29dLGw9dGhpcy5fX2luc3RhbmNlc1tzXTtpZihsKXtsZXQgYz10aGlzLmFzKyhhPyIuIithOiIiKTtsLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoYyxyLCExLCEwKSxsLl9mbHVzaFByb3BlcnRpZXMoKX1yZXR1cm4hMH19aXRlbUZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5hc119aW5kZXhGb3JFbGVtZW50KHQpe2xldCByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpO3JldHVybiByJiZyW3RoaXMuaW5kZXhBc119bW9kZWxGb3JFbGVtZW50KHQpe3JldHVybiBwOSh0aGlzLnRlbXBsYXRlLHQpfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGQ5LmlzLGQ5KTt2YXIgbTk9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1pZiJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0scmVzdGFtcDp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfX2RlYm91bmNlUmVuZGVyIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX2xhc3RJZj0hMSx0aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz0hMSx0aGlzLl9fdGVtcGxhdGUsdGhpcy5fdGVtcGxhdGVJbmZvfV9fZGVib3VuY2VSZW5kZXIoKXt0aGlzLl9fcmVuZGVyRGVib3VuY2VyPXNyLmRlYm91bmNlKHRoaXMuX19yZW5kZXJEZWJvdW5jZXIsbGksKCk9PnRoaXMuX19yZW5kZXIoKSksSmwodGhpcy5fX3JlbmRlckRlYm91bmNlcil9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO2xldCB0PXVlKHRoaXMpLnBhcmVudE5vZGU7KCF0fHx0Lm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJiF1ZSh0KS5ob3N0KSYmdGhpcy5fX3RlYXJkb3duSW5zdGFuY2UoKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksV3goKXx8KHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaWYmJnRoaXMuX19kZWJvdW5jZVJlbmRlcigpfV9fZW5zdXJlVGVtcGxhdGUoKXtpZighdGhpcy5fX3RlbXBsYXRlKXtsZXQgdD10aGlzLHI9dC5fdGVtcGxhdGVJbmZvP3Q6dWUodCkucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IG49bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih1ZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpKW4uZGlzY29ubmVjdCgpLHRoaXMuX19yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWlmIHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIG4ub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX10aGlzLl9fdGVtcGxhdGU9cn1yZXR1cm4hMH1fX2Vuc3VyZUluc3RhbmNlKCl7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTtpZih0aGlzLl9faGFzSW5zdGFuY2UoKSl7bGV0IHI9dGhpcy5fX2dldEluc3RhbmNlTm9kZXMoKTtpZihyJiZyLmxlbmd0aCYmdWUodGhpcykucHJldmlvdXNTaWJsaW5nIT09cltyLmxlbmd0aC0xXSlmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKyl1ZSh0KS5pbnNlcnRCZWZvcmUobyx0aGlzKX1lbHNle2lmKCF0fHwhdGhpcy5fX2Vuc3VyZVRlbXBsYXRlKCkpcmV0dXJuITE7dGhpcy5fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpfXJldHVybiEwfXJlbmRlcigpe2NpKCl9X19yZW5kZXIoKXtpZih0aGlzLmlmKXtpZighdGhpcy5fX2Vuc3VyZUluc3RhbmNlKCkpcmV0dXJufWVsc2UgdGhpcy5yZXN0YW1wJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKSwoIVVNfHx0aGlzLm5vdGlmeURvbUNoYW5nZSkmJnRoaXMuaWYhPXRoaXMuX2xhc3RJZiYmKHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRvbS1jaGFuZ2UiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpLHRoaXMuX2xhc3RJZj10aGlzLmlmKX1fX2hhc0luc3RhbmNlKCl7fV9fZ2V0SW5zdGFuY2VOb2Rlcygpe31fX2NyZWF0ZUFuZEluc2VydEluc3RhbmNlKHQpe31fX3RlYXJkb3duSW5zdGFuY2UoKXt9X3Nob3dIaWRlQ2hpbGRyZW4oKXt9fSxhVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLnRlbXBsYXRlSW5mby5jaGlsZE5vZGVzfV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7bGV0IHI9dGhpcy5fX2RhdGFIb3N0fHx0aGlzO2lmKGl1JiYhdGhpcy5fX2RhdGFIb3N0KXRocm93IG5ldyBFcnJvcigic3RyaWN0VGVtcGxhdGVQb2xpY3k6IHRlbXBsYXRlIG93bmVyIG5vdCB0cnVzdGVkIik7bGV0IG49ci5fYmluZFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSwhMCk7bi5ydW5FZmZlY3RzPShpLG8sYSk9PntsZXQgcz10aGlzLl9fc3luY0luZm87aWYodGhpcy5pZilzJiYodGhpcy5fX3N5bmNJbmZvPW51bGwsdGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLG89T2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKSksaShvLGEpO2Vsc2UgaWYodGhpcy5fX2luc3RhbmNlKWlmKHN8fChzPXRoaXMuX19zeW5jSW5mbz17cnVuRWZmZWN0czppLGNoYW5nZWRQcm9wczp7fX0pLGEpZm9yKGxldCBsIGluIG8pe2xldCBjPWF1KGwpO3MuY2hhbmdlZFByb3BzW2NdPXRoaXMuX19kYXRhSG9zdFtjXX1lbHNlIE9iamVjdC5hc3NpZ24ocy5jaGFuZ2VkUHJvcHMsbyl9LHRoaXMuX19pbnN0YW5jZT1yLl9zdGFtcFRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZSxuKSx1ZSh0KS5pbnNlcnRCZWZvcmUodGhpcy5fX2luc3RhbmNlLHRoaXMpfV9fc3luY0hvc3RQcm9wZXJ0aWVzKCl7bGV0IHQ9dGhpcy5fX3N5bmNJbmZvO3QmJih0aGlzLl9fc3luY0luZm89bnVsbCx0LnJ1bkVmZmVjdHModC5jaGFuZ2VkUHJvcHMsITEpKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtsZXQgdD10aGlzLl9fZGF0YUhvc3R8fHRoaXM7dGhpcy5fX2luc3RhbmNlJiYodC5fcmVtb3ZlQm91bmREb20odGhpcy5fX2luc3RhbmNlKSx0aGlzLl9faW5zdGFuY2U9bnVsbCx0aGlzLl9fc3luY0luZm89bnVsbCl9X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsaVcodCx0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXMpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxzVz1jbGFzcyBleHRlbmRzIG05e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fY3Rvcj1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbH1fX2hhc0luc3RhbmNlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fX2luc3RhbmNlKX1fX2dldEluc3RhbmNlTm9kZXMoKXtyZXR1cm4gdGhpcy5fX2luc3RhbmNlLmNoaWxkcmVufV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7dGhpcy5fX2N0b3J8fCh0aGlzLl9fY3Rvcj10Yyh0aGlzLl9fdGVtcGxhdGUsdGhpcyx7bXV0YWJsZURhdGE6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fX2luc3RhbmNlJiYodGhpcy5pZj90aGlzLl9faW5zdGFuY2UuZm9yd2FyZEhvc3RQcm9wKHIsbik6KHRoaXMuX19pbnZhbGlkUHJvcHM9dGhpcy5fX2ludmFsaWRQcm9wc3x8T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9faW52YWxpZFByb3BzW2F1KHIpXT0hMCkpfX0pKSx0aGlzLl9faW5zdGFuY2U9bmV3IHRoaXMuX19jdG9yLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2Uucm9vdCx0aGlzKX1fX3RlYXJkb3duSW5zdGFuY2UoKXtpZih0aGlzLl9faW5zdGFuY2Upe2xldCB0PXRoaXMuX19pbnN0YW5jZS5jaGlsZHJlbjtpZih0JiZ0Lmxlbmd0aCl7bGV0IHI9dWUodFswXSkucGFyZW50Tm9kZTtpZihyKXtyPXVlKHIpO2ZvcihsZXQgbj0wLGk7bjx0Lmxlbmd0aCYmKGk9dFtuXSk7bisrKXIucmVtb3ZlQ2hpbGQoaSl9fXRoaXMuX19pbnZhbGlkUHJvcHM9bnVsbCx0aGlzLl9faW5zdGFuY2U9bnVsbH19X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9faW52YWxpZFByb3BzO2lmKHQpe3RoaXMuX19pbnZhbGlkUHJvcHM9bnVsbDtmb3IobGV0IHIgaW4gdCl0aGlzLl9faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eShyLHRoaXMuX19kYXRhSG9zdFtyXSk7dGhpcy5fX2luc3RhbmNlLl9mbHVzaFByb3BlcnRpZXMoKX19X3Nob3dIaWRlQ2hpbGRyZW4oKXtsZXQgdD10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7dGhpcy5fX2luc3RhbmNlJiZCb29sZWFuKHRoaXMuX19pbnN0YW5jZS5fX2hpZGRlbikhPT10JiYodGhpcy5fX2luc3RhbmNlLl9faGlkZGVuPXQsdGhpcy5fX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKHQpKSx0fHx0aGlzLl9fc3luY0hvc3RQcm9wZXJ0aWVzKCl9fSxxZ3Q9Ukk/YVc6c1c7Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHFndC5pcyxxZ3QpO3ZhciB1YmU9Um4oZT0+e2xldCB0PVNtKGUpO2NsYXNzIHIgZXh0ZW5kcyB0e3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczp7dHlwZTpBcnJheX0sbXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHRvZ2dsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fdXBkYXRlU2VsZWN0aW9uKG11bHRpLCBpdGVtcy4qKSJdfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fbGFzdEl0ZW1zPW51bGwsdGhpcy5fX2xhc3RNdWx0aT1udWxsLHRoaXMuX19zZWxlY3RlZE1hcD1udWxsfV9fdXBkYXRlU2VsZWN0aW9uKGksbyl7bGV0IGE9by5wYXRoO2lmKGE9PUpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKSl7bGV0IHM9by5iYXNlfHxbXSxsPXRoaXMuX19sYXN0SXRlbXMsYz10aGlzLl9fbGFzdE11bHRpO2lmKGkhPT1jJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksbCl7bGV0IHU9bzkocyxsKTt0aGlzLl9fYXBwbHlTcGxpY2VzKHUpfXRoaXMuX19sYXN0SXRlbXM9cyx0aGlzLl9fbGFzdE11bHRpPWl9ZWxzZSBpZihvLnBhdGg9PWAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uc3BsaWNlc2ApdGhpcy5fX2FwcGx5U3BsaWNlcyhvLnZhbHVlLmluZGV4U3BsaWNlcyk7ZWxzZXtsZXQgcz1hLnNsaWNlKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uYC5sZW5ndGgpLGw9cGFyc2VJbnQocywxMCk7cy5pbmRleE9mKCIuIik8MCYmcz09bCYmdGhpcy5fX2Rlc2VsZWN0Q2hhbmdlZElkeChsKX19X19hcHBseVNwbGljZXMoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgbD1pW3NdO28uZm9yRWFjaCgoYyx1KT0+e2M8bC5pbmRleHx8KGM+PWwuaW5kZXgrbC5yZW1vdmVkLmxlbmd0aD9vLnNldCh1LGMrbC5hZGRlZENvdW50LWwucmVtb3ZlZC5sZW5ndGgpOm8uc2V0KHUsLTEpKX0pO2ZvcihsZXQgYz0wO2M8bC5hZGRlZENvdW50O2MrKyl7bGV0IHU9bC5pbmRleCtjO28uaGFzKHRoaXMuaXRlbXNbdV0pJiZvLnNldCh0aGlzLml0ZW1zW3VdLHUpfX10aGlzLl9fdXBkYXRlTGlua3MoKTtsZXQgYT0wO28uZm9yRWFjaCgocyxsKT0+e3M8MD8odGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsby5kZWxldGUobCkpOmErK30pfV9fdXBkYXRlTGlua3MoKXtpZih0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMubXVsdGkpe2xldCBpPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2gobz0+e28+PTAmJnRoaXMubGlua1BhdGhzKGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtvfWAsYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS4ke2krK31gKX0pfWVsc2UgdGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goaT0+e3RoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJpdGVtcyIsdGhpcyl9LiR7aX1gKSx0aGlzLmxpbmtQYXRocyhKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZEl0ZW0iLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApfSl9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9fZGF0YUxpbmtlZFBhdGhzPXt9LHRoaXMuX19zZWxlY3RlZE1hcD1uZXcgTWFwLHRoaXMuc2VsZWN0ZWQ9dGhpcy5tdWx0aT9bXTpudWxsLHRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9aXNTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5fX3NlbGVjdGVkTWFwLmhhcyhpKX1pc0luZGV4U2VsZWN0ZWQoaSl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2ldKX1fX2Rlc2VsZWN0Q2hhbmdlZElkeChpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKTtpZihvPj0wKXtsZXQgYT0wO3RoaXMuX19zZWxlY3RlZE1hcC5mb3JFYWNoKChzLGwpPT57bz09YSsrJiZ0aGlzLmRlc2VsZWN0KGwpfSl9fV9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChpKXtsZXQgbz10aGlzLl9fZGF0YUxpbmtlZFBhdGhzW2Ake0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWBdO2lmKG8pcmV0dXJuIHBhcnNlSW50KG8uc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpfS5gLmxlbmd0aCksMTApfWRlc2VsZWN0KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZE1hcC5nZXQoaSk7aWYobz49MCl7dGhpcy5fX3NlbGVjdGVkTWFwLmRlbGV0ZShpKTtsZXQgYTt0aGlzLm11bHRpJiYoYT10aGlzLl9fc2VsZWN0ZWRJbmRleEZvckl0ZW1JbmRleChvKSksdGhpcy5fX3VwZGF0ZUxpbmtzKCksdGhpcy5tdWx0aT90aGlzLnNwbGljZShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksYSwxKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW51bGx9fWRlc2VsZWN0SW5kZXgoaSl7dGhpcy5kZXNlbGVjdCh0aGlzLml0ZW1zW2ldKX1zZWxlY3QoaSl7dGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoaSkpfXNlbGVjdEluZGV4KGkpe2xldCBvPXRoaXMuaXRlbXNbaV07dGhpcy5pc1NlbGVjdGVkKG8pP3RoaXMudG9nZ2xlJiZ0aGlzLmRlc2VsZWN0SW5kZXgoaSk6KHRoaXMubXVsdGl8fHRoaXMuX19zZWxlY3RlZE1hcC5jbGVhcigpLHRoaXMuX19zZWxlY3RlZE1hcC5zZXQobyxpKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMucHVzaChKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyksbyk6dGhpcy5zZWxlY3RlZD10aGlzLnNlbGVjdGVkSXRlbT1vKX19cmV0dXJuIHJ9KTt2YXIgaGJlPXViZShtdCksZzk9Y2xhc3MgZXh0ZW5kcyBoYmV7c3RhdGljIGdldCBpcygpe3JldHVybiJhcnJheS1zZWxlY3RvciJ9c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBudWxsfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKGc5LmlzLGc5KTt2YXIgXzk9bmV3IFpsO3dpbmRvdy5TaGFkeUNTU3x8KHdpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKGUsdCxyKXt9LHByZXBhcmVUZW1wbGF0ZURvbShlLHQpe30scHJlcGFyZVRlbXBsYXRlU3R5bGVzKGUsdCxyKXt9LHN0eWxlU3VidHJlZShlLHQpe185LnByb2Nlc3NTdHlsZXMoKSxKTShlLHQpfSxzdHlsZUVsZW1lbnQoZSl7XzkucHJvY2Vzc1N0eWxlcygpfSxzdHlsZURvY3VtZW50KGUpe185LnByb2Nlc3NTdHlsZXMoKSxKTShkb2N1bWVudC5ib2R5LGUpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUoZSx0KXtyZXR1cm4gakkoZSx0KX0sZmx1c2hDdXN0b21TdHlsZXMoKXt9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6V0l9KTt3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9Xzk7dmFyIEdndD0iaW5jbHVkZSIsZmJlPXdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSxsVz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zdHlsZT1udWxsLGZiZS5hZGRDdXN0b21TdHlsZSh0aGlzKX1nZXRTdHlsZSgpe2lmKHRoaXMuX3N0eWxlKXJldHVybiB0aGlzLl9zdHlsZTtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7aWYoIXQpcmV0dXJuIG51bGw7dGhpcy5fc3R5bGU9dDtsZXQgcj10LmdldEF0dHJpYnV0ZShHZ3QpO3JldHVybiByJiYodC5yZW1vdmVBdHRyaWJ1dGUoR2d0KSx0LnRleHRDb250ZW50PXRtdChyKSt0LnRleHRDb250ZW50KSx0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJndpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMpLHRoaXMuX3N0eWxlfX07d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY3VzdG9tLXN0eWxlIixsVyk7dmFyIFdndDtXZ3Q9R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZTt2YXIgWWd0PXtwcm9wZXJ0aWVzOnttdXRhYmxlRGF0YTpCb29sZWFufSxfc2hvdWxkUHJvcGVydHlDaGFuZ2UoZSx0LHIpe3JldHVybiBXZ3QodGhpcyxlLHQscix0aGlzLm11dGFibGVEYXRhKX19O3ZhciBEYT1HdChIVE1MRWxlbWVudCkucHJvdG90eXBlO3ZhciB5OT1uZXcgU2V0LEpzPXtwcm9wZXJ0aWVzOntfcGFyZW50UmVzaXphYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3BhcmVudFJlc2l6YWJsZUNoYW5nZWQifSxfbm90aWZ5aW5nRGVzY2VuZGFudDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sbGlzdGVuZXJzOnsiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIjoiX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzPVtdLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplPXRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcyksdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplPXRoaXMuX29uRGVzY2VuZGFudElyb25SZXNpemUuYmluZCh0aGlzKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9ucygpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuc3RvcFJlc2l6ZU5vdGlmaWNhdGlvbnNGb3IodGhpcyk6KHk5LmRlbGV0ZSh0aGlzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSkpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1udWxsfSxub3RpZnlSZXNpemU6ZnVuY3Rpb24oKXshdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLnJlc2l6ZXJTaG91bGROb3RpZnkoZSkmJnRoaXMuX25vdGlmeURlc2NlbmRhbnQoZSl9LHRoaXMpLHRoaXMuX2ZpcmVSZXNpemUoKSl9LGFzc2lnblBhcmVudFJlc2l6YWJsZTpmdW5jdGlvbihlKXt0aGlzLl9wYXJlbnRSZXNpemFibGUmJnRoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKSx0aGlzLl9wYXJlbnRSZXNpemFibGU9ZSxlJiZlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKHRoaXMpPT09LTEmJihlLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5wdXNoKHRoaXMpLGUuX3N1YnNjcmliZUlyb25SZXNpemUodGhpcykpfSxzdG9wUmVzaXplTm90aWZpY2F0aW9uc0ZvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5pbmRleE9mKGUpO3Q+LTEmJih0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5zcGxpY2UodCwxKSx0aGlzLl91bnN1YnNjcmliZUlyb25SZXNpemUoZSkpfSxfc3Vic2NyaWJlSXJvblJlc2l6ZTpmdW5jdGlvbihlKXtlLmFkZEV2ZW50TGlzdGVuZXIoImlyb24tcmVzaXplIix0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemUpfSxfdW5zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LHJlc2l6ZXJTaG91bGROb3RpZnk6ZnVuY3Rpb24oZSl7cmV0dXJuITB9LF9vbkRlc2NlbmRhbnRJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJufWNffHx0aGlzLl9maXJlUmVzaXplKCl9LF9maXJlUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLXJlc2l6ZSIsbnVsbCx7bm9kZTp0aGlzLGJ1YmJsZXM6ITF9KX0sX29uSXJvblJlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7dCE9PXRoaXMmJih0LmFzc2lnblBhcmVudFJlc2l6YWJsZSh0aGlzKSx0aGlzLl9ub3RpZnlEZXNjZW5kYW50KHQpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfcGFyZW50UmVzaXphYmxlQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSl9LF9ub3RpZnlEZXNjZW5kYW50OmZ1bmN0aW9uKGUpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSEwLGUubm90aWZ5UmVzaXplKCksdGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudD0hMSl9LF9yZXF1ZXN0UmVzaXplTm90aWZpY2F0aW9uczpmdW5jdGlvbigpe2lmKCEhdGhpcy5pc0F0dGFjaGVkKWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0ibG9hZGluZyIpe3ZhciBlPXRoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zLmJpbmQodGhpcyk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24gdCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLHQpLGUoKX0pfWVsc2UgdGhpcy5fZmluZFBhcmVudCgpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT90aGlzLl9wYXJlbnRSZXNpemFibGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyk6KHk5LmZvckVhY2goZnVuY3Rpb24odCl7dCE9PXRoaXMmJnQuX2ZpbmRQYXJlbnQoKX0sdGhpcyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fYm91bmROb3RpZnlSZXNpemUpLHRoaXMubm90aWZ5UmVzaXplKCkpfSxfZmluZFBhcmVudDpmdW5jdGlvbigpe3RoaXMuYXNzaWduUGFyZW50UmVzaXphYmxlKG51bGwpLHRoaXMuZmlyZSgiaXJvbi1yZXF1ZXN0LXJlc2l6ZS1ub3RpZmljYXRpb25zIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSksdGhpcy5fcGFyZW50UmVzaXphYmxlP3k5LmRlbGV0ZSh0aGlzKTp5OS5hZGQodGhpcyl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICAvKiBTYWZhcmkgMTAgbmVlZHMgdGhpcyBwcm9wZXJ0eSBwcmVmaXhlZCB0byBjb3JyZWN0bHkgYXBwbHkgdGhlIGN1c3RvbSBwcm9wZXJ0eSAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0taXJvbi1jb2xsYXBzZS10cmFuc2l0aW9uLWR1cmF0aW9uLCAzMDBtcyk7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLWNvbGxhcHNlLWNsb3NlZCkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tY29sbGFwc2Utb3BlbmVkKSkgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLWNvbGxhcHNlIixiZWhhdmlvcnM6W0pzXSxwcm9wZXJ0aWVzOntob3Jpem9udGFsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ob3Jpem9udGFsQ2hhbmdlZCJ9LG9wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSx0cmFuc2l0aW9uaW5nOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSxub0FuaW1hdGlvbjp7dHlwZTpCb29sZWFufSxfZGVzaXJlZFNpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sZ2V0IGRpbWVuc2lvbigpe3JldHVybiB0aGlzLmhvcml6b250YWw/IndpZHRoIjoiaGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXgoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXhXaWR0aCI6Im1heEhlaWdodCJ9LGdldCBfZGltZW5zaW9uTWF4Q3NzKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8ibWF4LXdpZHRoIjoibWF4LWhlaWdodCJ9LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJncm91cCIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbkVuZCJ9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LHVwZGF0ZVNpemU6ZnVuY3Rpb24oZSx0KXtlPWU9PT0iYXV0byI/IiI6ZTt2YXIgcj10JiYhdGhpcy5ub0FuaW1hdGlvbiYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9kZXNpcmVkU2l6ZSE9PWU7aWYodGhpcy5fZGVzaXJlZFNpemU9ZSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSxyKXt2YXIgbj10aGlzLl9jYWxjU2l6ZSgpO2U9PT0iIiYmKHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT0iIixlPXRoaXMuX2NhbGNTaXplKCkpLHRoaXMuc3R5bGVbdGhpcy5fZGltZW5zaW9uTWF4XT1uLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITApLHI9ZSE9PW59dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPWUscnx8dGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxlbmFibGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe0RhLl93YXJuKCJgZW5hYmxlVHJhbnNpdGlvbigpYCBpcyBkZXByZWNhdGVkLCB1c2UgYG5vQW5pbWF0aW9uYCBpbnN0ZWFkLiIpLHRoaXMubm9BbmltYXRpb249IWV9LF91cGRhdGVUcmFuc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWUmJiF0aGlzLm5vQW5pbWF0aW9uPyIiOiIwcyJ9LF9ob3Jpem9udGFsQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUudHJhbnNpdGlvblByb3BlcnR5PXRoaXMuX2RpbWVuc2lvbk1heENzczt2YXIgZT10aGlzLl9kaW1lbnNpb25NYXg9PT0ibWF4V2lkdGgiPyJtYXhIZWlnaHQiOiJtYXhXaWR0aCI7dGhpcy5zdHlsZVtlXT0iIix0aGlzLnVwZGF0ZVNpemUodGhpcy5vcGVuZWQ/ImF1dG8iOiIwcHgiLCExKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCF0aGlzLm9wZW5lZCksdGhpcy5fc2V0VHJhbnNpdGlvbmluZyghMCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCExKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLW9wZW5lZCIsITEpLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITApLHRoaXMub3BlbmVkJiZ0aGlzLmZvY3VzKCl9LF90cmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPXRoaXMuX2Rlc2lyZWRTaXplLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2UtY2xvc2VkIiwhdGhpcy5vcGVuZWQpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIix0aGlzLm9wZW5lZCksdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMSksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCExKX0sX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXt6dChlKS5yb290VGFyZ2V0PT09dGhpcyYmdGhpcy5fdHJhbnNpdGlvbkVuZCgpfSxfY2FsY1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmRpbWVuc2lvbl0rInB4In19KTt2YXIgamd0PVFgCi8qIE1vc3QgY29tbW9uIHVzZWQgZmxleCBzdHlsZXMqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbCwKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaW5saW5lIHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbCB7CiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5sYXlvdXQud3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQubm8td3JhcCB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogbm93cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmZsZXggewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtYXV0byB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSBhdXRvOwogICAgICAgIC13ZWJraXQtZmxleDogMSAxIGF1dG87CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KCiAgICAgIC5mbGV4LW5vbmUgewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogQmFzaWMgZmxleGJveCByZXZlcnNlIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LXJldmVyc2UiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UsCiAgICAgIC5sYXlvdXQudmVydGljYWwtcmV2ZXJzZSB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuaG9yaXpvbnRhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogRmxleGJveCBhbGlnbm1lbnQgKi8KPGRvbS1tb2R1bGUgaWQ9Imlyb24tZmxleC1hbGlnbm1lbnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBjcm9zcyBheGlzLgogICAgICAgKi8KICAgICAgLmxheW91dC5zdGFydCB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5iYXNlbGluZSB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIEFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1qdXN0aWZpZWQsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogY2VudGVyOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZW5kOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGRpc3RyaWJ1dGU7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfQoKICAgICAgLmxheW91dC5qdXN0aWZpZWQgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogU2VsZiBhbGlnbm1lbnQuCiAgICAgICAqLwogICAgICAuc2VsZi1zdGFydCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLWNlbnRlciB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5zZWxmLWVuZCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5zZWxmLXN0cmV0Y2ggewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9CgogICAgICAuc2VsZi1iYXNlbGluZSB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0LWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuZW5kLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmNlbnRlci1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5iZXR3ZWVuLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmxheW91dC5hcm91bmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KLyogTm9uLWZsZXhib3ggcG9zaXRpb25pbmcgaGVscGVyIHN0eWxlcyAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWZhY3RvcnMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmZsZXgsCiAgICAgIC5mbGV4LTEgewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfQoKICAgICAgLmZsZXgtMiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH0KCiAgICAgIC5mbGV4LTMgewogICAgICAgIC1tcy1mbGV4OiAzOwogICAgICAgIC13ZWJraXQtZmxleDogMzsKICAgICAgICBmbGV4OiAzOwogICAgICB9CgogICAgICAuZmxleC00IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfQoKICAgICAgLmZsZXgtNSB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH0KCiAgICAgIC5mbGV4LTYgewogICAgICAgIC1tcy1mbGV4OiA2OwogICAgICAgIC13ZWJraXQtZmxleDogNjsKICAgICAgICBmbGV4OiA2OwogICAgICB9CgogICAgICAuZmxleC03IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfQoKICAgICAgLmZsZXgtOCB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH0KCiAgICAgIC5mbGV4LTkgewogICAgICAgIC1tcy1mbGV4OiA5OwogICAgICAgIC13ZWJraXQtZmxleDogOTsKICAgICAgICBmbGV4OiA5OwogICAgICB9CgogICAgICAuZmxleC0xMCB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH0KCiAgICAgIC5mbGV4LTExIHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfQoKICAgICAgLmZsZXgtMTIgewogICAgICAgIC1tcy1mbGV4OiAxMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDEyOwogICAgICAgIGZsZXg6IDEyOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KPGRvbS1tb2R1bGUgaWQ9Imlyb24tcG9zaXRpb25pbmciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmludmlzaWJsZSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5yZWxhdGl2ZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICBib2R5LmZ1bGxibGVlZCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zY3JvbGwgewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KICAgICAgLmZpeGVkLWJvdHRvbSwKICAgICAgLmZpeGVkLWxlZnQsCiAgICAgIC5maXhlZC1yaWdodCwKICAgICAgLmZpeGVkLXRvcCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB9CgogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLXJpZ2h0IHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAuZml4ZWQtYm90dG9tIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLmZpeGVkLWxlZnQgewogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7amd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoamd0LmNvbnRlbnQpO3ZhciBYZ3Q9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBbaGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tbGF5b3V0OiB7CiAgICAgICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbmxpbmU6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtZmxleDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWhvcml6b250YWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwoKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXZlcnRpY2FsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcDogewogICAgICAgIC1tcy1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtd3JhcC1yZXZlcnNlOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LWF1dG86IHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtbm9uZTogewogICAgICAgIC1tcy1mbGV4OiBub25lOwogICAgICAgIC13ZWJraXQtZmxleDogbm9uZTsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleDogewogICAgICAgIC1tcy1mbGV4OiAxIDEgMC4wMDAwMDAwMDFweDsKICAgICAgICAtd2Via2l0LWZsZXg6IDE7CiAgICAgICAgZmxleDogMTsKICAgICAgICAtd2Via2l0LWZsZXgtYmFzaXM6IDAuMDAwMDAwMDAxcHg7CiAgICAgICAgZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMjogewogICAgICAgIC1tcy1mbGV4OiAyOwogICAgICAgIC13ZWJraXQtZmxleDogMjsKICAgICAgICBmbGV4OiAyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0zOiB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTQ6IHsKICAgICAgICAtbXMtZmxleDogNDsKICAgICAgICAtd2Via2l0LWZsZXg6IDQ7CiAgICAgICAgZmxleDogNDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNTogewogICAgICAgIC1tcy1mbGV4OiA1OwogICAgICAgIC13ZWJraXQtZmxleDogNTsKICAgICAgICBmbGV4OiA1OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC02OiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTc6IHsKICAgICAgICAtbXMtZmxleDogNzsKICAgICAgICAtd2Via2l0LWZsZXg6IDc7CiAgICAgICAgZmxleDogNzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtODogewogICAgICAgIC1tcy1mbGV4OiA4OwogICAgICAgIC13ZWJraXQtZmxleDogODsKICAgICAgICBmbGV4OiA4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC05OiB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEwOiB7CiAgICAgICAgLW1zLWZsZXg6IDEwOwogICAgICAgIC13ZWJraXQtZmxleDogMTA7CiAgICAgICAgZmxleDogMTA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTExOiB7CiAgICAgICAgLW1zLWZsZXg6IDExOwogICAgICAgIC13ZWJraXQtZmxleDogMTE7CiAgICAgICAgZmxleDogMTE7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTEyOiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH07CgogICAgICAvKiBhbGlnbm1lbnQgaW4gY3Jvc3MgYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlcjogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1lbmQ6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IHN0YXJ0OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItY2VudGVyOiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfTsKCiAgICAgIC8qIHNlbGYgYWxpZ25tZW50ICovCgogICAgICAtLWxheW91dC1zZWxmLXN0YXJ0OiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWNlbnRlcjogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1lbmQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RyZXRjaDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1iYXNlbGluZTogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogbXVsdGktbGluZSBhbGlnbm1lbnQgaW4gbWFpbiBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZC1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1jZW50ZXItYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmV0d2Vlbi1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYXJvdW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAgICAgICAgICAgT3RoZXIgTGF5b3V0CiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAtLWxheW91dC1ibG9jazogewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaW52aXNpYmxlOiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1yZWxhdGl2ZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpdDogewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zY3JvbGw6IHsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH07CgogICAgICAtLWxheW91dC1mdWxsYmxlZWQ6IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfTsKCiAgICAgIC8qIGZpeGVkIHBvc2l0aW9uICovCgogICAgICAtLWxheW91dC1maXhlZC10b3A6IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1yaWdodDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtYm90dG9tOiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml4ZWQtbGVmdDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7WGd0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWGd0LmNvbnRlbnQpO3ZhciAkZ3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTskZ3QudGV4dENvbnRlbnQ9IltoaWRkZW5dIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCRndCk7dmFyIGdvPWNsYXNze2NvbnN0cnVjdG9yKHQpe2dvWyIgIl0odCksdGhpcy50eXBlPXQmJnQudHlwZXx8ImRlZmF1bHQiLHRoaXMua2V5PXQmJnQua2V5LHQmJiJ2YWx1ZSJpbiB0JiYodGhpcy52YWx1ZT10LnZhbHVlKX1nZXQgdmFsdWUoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLmtleTtpZih0JiZyKXJldHVybiBnby50eXBlc1t0XSYmZ28udHlwZXNbdF1bcl19c2V0IHZhbHVlKHQpe3ZhciByPXRoaXMudHlwZSxuPXRoaXMua2V5O3ImJm4mJihyPWdvLnR5cGVzW3JdPWdvLnR5cGVzW3JdfHx7fSx0PT1udWxsP2RlbGV0ZSByW25dOnJbbl09dCl9Z2V0IGxpc3QoKXt2YXIgdD10aGlzLnR5cGU7aWYodCl7dmFyIHI9Z28udHlwZXNbdGhpcy50eXBlXTtyZXR1cm4gcj9PYmplY3Qua2V5cyhyKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHBiZVt0aGlzLnR5cGVdW25dfSx0aGlzKTpbXX19YnlLZXkodCl7cmV0dXJuIHRoaXMua2V5PXQsdGhpcy52YWx1ZX19O2dvWyIgIl09ZnVuY3Rpb24oKXt9O2dvLnR5cGVzPXt9O3ZhciBwYmU9Z28udHlwZXM7WXQoe2lzOiJpcm9uLW1ldGEiLHByb3BlcnRpZXM6e3R5cGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJkZWZhdWx0In0sa2V5Ont0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nLG5vdGlmeTohMH0sc2VsZjp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfc2VsZkNoYW5nZWQifSxfX21ldGE6e3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX19jb21wdXRlTWV0YSh0eXBlLCBrZXksIHZhbHVlKSJ9fSxob3N0QXR0cmlidXRlczp7aGlkZGVuOiEwfSxfX2NvbXB1dGVNZXRhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgZ28oe3R5cGU6ZSxrZXk6dH0pO3JldHVybiByIT09dm9pZCAwJiZyIT09bi52YWx1ZT9uLnZhbHVlPXI6dGhpcy52YWx1ZSE9PW4udmFsdWUmJih0aGlzLnZhbHVlPW4udmFsdWUpLG59LGdldCBsaXN0KCl7cmV0dXJuIHRoaXMuX19tZXRhJiZ0aGlzLl9fbWV0YS5saXN0fSxfc2VsZkNoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmKHRoaXMudmFsdWU9dGhpcyl9LGJ5S2V5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZ28oe3R5cGU6dGhpcy50eXBlLGtleTplfSkudmFsdWV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgICAgIGZpbGw6IHZhcigtLWlyb24taWNvbi1maWxsLWNvbG9yLCBjdXJyZW50Y29sb3IpOwogICAgICAgIHN0cm9rZTogdmFyKC0taXJvbi1pY29uLXN0cm9rZS1jb2xvciwgbm9uZSk7CgogICAgICAgIHdpZHRoOiB2YXIoLS1pcm9uLWljb24td2lkdGgsIDI0cHgpOwogICAgICAgIGhlaWdodDogdmFyKC0taXJvbi1pY29uLWhlaWdodCwgMjRweCk7CiAgICAgICAgQGFwcGx5IC0taXJvbi1pY29uOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CmAsaXM6Imlyb24taWNvbiIscHJvcGVydGllczp7aWNvbjp7dHlwZTpTdHJpbmd9LHRoZW1lOnt0eXBlOlN0cmluZ30sc3JjOnt0eXBlOlN0cmluZ30sX21ldGE6e3ZhbHVlOkRhLmNyZWF0ZSgiaXJvbi1tZXRhIix7dHlwZToiaWNvbnNldCJ9KX19LG9ic2VydmVyczpbIl91cGRhdGVJY29uKF9tZXRhLCBpc0F0dGFjaGVkKSIsIl91cGRhdGVJY29uKHRoZW1lLCBpc0F0dGFjaGVkKSIsIl9zcmNDaGFuZ2VkKHNyYywgaXNBdHRhY2hlZCkiLCJfaWNvbkNoYW5nZWQoaWNvbiwgaXNBdHRhY2hlZCkiXSxfREVGQVVMVF9JQ09OU0VUOiJpY29ucyIsX2ljb25DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PShlfHwiIikuc3BsaXQoIjoiKTt0aGlzLl9pY29uTmFtZT10LnBvcCgpLHRoaXMuX2ljb25zZXROYW1lPXQucG9wKCl8fHRoaXMuX0RFRkFVTFRfSUNPTlNFVCx0aGlzLl91cGRhdGVJY29uKCl9LF9zcmNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3VwZGF0ZUljb24oKX0sX3VzZXNJY29uc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvbnx8IXRoaXMuc3JjfSxfdXBkYXRlSWNvbjpmdW5jdGlvbigpe3RoaXMuX3VzZXNJY29uc2V0KCk/KHRoaXMuX2ltZyYmdGhpcy5faW1nLnBhcmVudE5vZGUmJnp0KHRoaXMucm9vdCkucmVtb3ZlQ2hpbGQodGhpcy5faW1nKSx0aGlzLl9pY29uTmFtZT09PSIiP3RoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKTp0aGlzLl9pY29uc2V0TmFtZSYmdGhpcy5fbWV0YSYmKHRoaXMuX2ljb25zZXQ9dGhpcy5fbWV0YS5ieUtleSh0aGlzLl9pY29uc2V0TmFtZSksdGhpcy5faWNvbnNldD8odGhpcy5faWNvbnNldC5hcHBseUljb24odGhpcyx0aGlzLl9pY29uTmFtZSx0aGlzLnRoZW1lKSx0aGlzLnVubGlzdGVuKHdpbmRvdywiaXJvbi1pY29uc2V0LWFkZGVkIiwiX3VwZGF0ZUljb24iKSk6dGhpcy5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKSk6KHRoaXMuX2ljb25zZXQmJnRoaXMuX2ljb25zZXQucmVtb3ZlSWNvbih0aGlzKSx0aGlzLl9pbWd8fCh0aGlzLl9pbWc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIiksdGhpcy5faW1nLnN0eWxlLndpZHRoPSIxMDAlIix0aGlzLl9pbWcuc3R5bGUuaGVpZ2h0PSIxMDAlIix0aGlzLl9pbWcuZHJhZ2dhYmxlPSExKSx0aGlzLl9pbWcuc3JjPXRoaXMuc3JjLHp0KHRoaXMucm9vdCkuYXBwZW5kQ2hpbGQodGhpcy5faW1nKSl9fSk7WXQoe2lzOiJpcm9uLWljb25zZXQtc3ZnIixwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX25hbWVDaGFuZ2VkIn0sc2l6ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MjR9LHJ0bE1pcnJvcmluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSx1c2VHbG9iYWxSdGxBdHRyaWJ1dGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhPW5ldyBnbyh7dHlwZToiaWNvbnNldCIsa2V5Om51bGwsdmFsdWU6bnVsbH0pfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSJ9LGdldEljb25OYW1lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ucz10aGlzLl9jcmVhdGVJY29uTWFwKCksT2JqZWN0LmtleXModGhpcy5faWNvbnMpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5uYW1lKyI6IitlfSx0aGlzKX0sYXBwbHlJY29uOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZW1vdmVJY29uKGUpO3ZhciByPXRoaXMuX2Nsb25lSWNvbih0LHRoaXMucnRsTWlycm9yaW5nJiZ0aGlzLl90YXJnZXRJc1JUTChlKSk7aWYocil7dmFyIG49enQoZS5yb290fHxlKTtyZXR1cm4gbi5pbnNlcnRCZWZvcmUocixuLmNoaWxkTm9kZXNbMF0pLGUuX3N2Z0ljb249cn1yZXR1cm4gbnVsbH0scmVtb3ZlSWNvbjpmdW5jdGlvbihlKXtlLl9zdmdJY29uJiYoenQoZS5yb290fHxlKS5yZW1vdmVDaGlsZChlLl9zdmdJY29uKSxlLl9zdmdJY29uPW51bGwpfSxfdGFyZ2V0SXNSVEw6ZnVuY3Rpb24oZSl7aWYodGhpcy5fX3RhcmdldElzUlRMPT1udWxsKWlmKHRoaXMudXNlR2xvYmFsUnRsQXR0cmlidXRlKXt2YXIgdD1kb2N1bWVudC5ib2R5JiZkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiZGlyIik/ZG9jdW1lbnQuYm9keTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5fX3RhcmdldElzUlRMPXQuZ2V0QXR0cmlidXRlKCJkaXIiKT09PSJydGwifWVsc2UgZSYmZS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFJiYoZT1lLmhvc3QpLHRoaXMuX190YXJnZXRJc1JUTD1lJiZ3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb249PT0icnRsIjtyZXR1cm4gdGhpcy5fX3RhcmdldElzUlRMfSxfbmFtZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9tZXRhLnZhbHVlPW51bGwsdGhpcy5fbWV0YS5rZXk9dGhpcy5uYW1lLHRoaXMuX21ldGEudmFsdWU9dGhpcyx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJpcm9uLWljb25zZXQtYWRkZWQiLHRoaXMse25vZGU6d2luZG93fSl9KX0sX2NyZWF0ZUljb25NYXA6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIikuZm9yRWFjaChmdW5jdGlvbih0KXtlW3QuaWRdPXR9KSxlfSxfY2xvbmVJY29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2ljb25zfHx0aGlzLl9jcmVhdGVJY29uTWFwKCksdGhpcy5fcHJlcGFyZVN2Z0Nsb25lKHRoaXMuX2ljb25zW2VdLHRoaXMuc2l6ZSx0KX0sX3ByZXBhcmVTdmdDbG9uZTpmdW5jdGlvbihlLHQscil7aWYoZSl7dmFyIG49ZS5jbG9uZU5vZGUoITApLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpLG89bi5nZXRBdHRyaWJ1dGUoInZpZXdCb3giKXx8IjAgMCAiK3QrIiAiK3QsYT0icG9pbnRlci1ldmVudHM6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyI7cmV0dXJuIHImJm4uaGFzQXR0cmlidXRlKCJtaXJyb3ItaW4tcnRsIikmJihhKz0iLXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtOnNjYWxlKC0xLDEpO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyOyIpLGkuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixvKSxpLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxpLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpLnN0eWxlLmNzc1RleHQ9YSxpLmFwcGVuZENoaWxkKG4pLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKSxpfXJldHVybiBudWxsfX0pO3ZhciBkYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpbWFnZSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYWRkLWEtcGhvdG8iPjxwYXRoIGQ9Ik0zIDRWMWgydjNoM3YySDV2M0gzVjZIMFY0aDN6bTMgNlY3aDNWNGg3bDEuODMgMkgyMWMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg1Yy0xLjEgMC0yLS45LTItMlYxMGgzem03IDljMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTUtNSAyLjI0LTUgNSAyLjI0IDUgNSA1em0tMy4yLTVjMCAxLjc3IDEuNDMgMy4yIDMuMiAzLjJzMy4yLTEuNDMgMy4yLTMuMi0xLjQzLTMuMi0zLjItMy4yLTMuMiAxLjQzLTMuMiAzLjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLXRvLXBob3RvcyI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTEgOWgtNHY0aC0ydi00SDlWOWg0VjVoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGp1c3QiPjxwYXRoIGQ9Ik0xMiAyQzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMy04YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3Npc3RhbnQiPjxwYXRoIGQ9Ik0xOSAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNGwzIDMgMy0zaDRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTUuMTIgMTAuODhMMTIgMTdsLTEuODgtNC4xMkw2IDExbDQuMTItMS44OEwxMiA1bDEuODggNC4xMkwxOCAxMWwtNC4xMiAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudC1waG90byI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXVkaW90cmFjayI+PHBhdGggZD0iTTEyIDN2OS4yOGMtLjQ3LS4xNy0uOTctLjI4LTEuNS0uMjhDOC4wMSAxMiA2IDE0LjAxIDYgMTYuNVM4LjAxIDIxIDEwLjUgMjFjMi4zMSAwIDQuMi0xLjc1IDQuNDUtNEgxNVY2aDRWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWNpcmN1bGFyIj48cGF0aCBkPSJNMTAgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXpNNyA5LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zIDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tMy0zYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMy02Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTQgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTEuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTMgNmMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtNGMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0yLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTAtMy41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1saW5lYXIiPjxwYXRoIGQ9Ik01IDE3LjVjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjUuNjcgMS41IDEuNSAxLjV6TTkgMTNjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6TTMgMjFoMTh2LTJIM3Yyek01IDkuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTNS44MyA2LjUgNSA2LjUgMy41IDcuMTcgMy41IDggNC4xNyA5LjUgNSA5LjV6bTAgNGMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04LS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMyAzdjJoMThWM0gzem0xNCA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0wIDRjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xMyA5Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9mZiI+PHBhdGggZD0iTTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLS4yIDQuNDhsLjIuMDJjLjgzIDAgMS41LS42NyAxLjUtMS41cy0uNjctMS41LTEuNS0xLjUtMS41LjY3LTEuNSAxLjVsLjAyLjJjLjA5LjY3LjYxIDEuMTkgMS4yOCAxLjI4ek0xNCAzLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tNCAwYy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMTEgN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptOCA4Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptLTQgMTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTIuNSA1LjI3bDMuNzggMy43OEw2IDljLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xYzAtLjEtLjAzLS4xOS0uMDYtLjI4bDIuODEgMi44MWMtLjcxLjExLTEuMjUuNzMtMS4yNSAxLjQ3IDAgLjgzLjY3IDEuNSAxLjUgMS41Ljc0IDAgMS4zNi0uNTQgMS40Ny0xLjI1bDIuODEgMi44MWMtLjA5LS4wMy0uMTgtLjA2LS4yOC0uMDYtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMy43OCAzLjc4TDIwIDIwLjIzIDMuNzcgNCAyLjUgNS4yN3pNMTAgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMTEtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek0zIDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTcgMTFjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDE3Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zLTMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmx1ci1vbiI+PHBhdGggZD0iTTYgMTNjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0tMyAuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgNWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xNSA1LjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtMy41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptLTExIDEwYy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyA3Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0xN2MuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEwIDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA1LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em04IC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLThjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC00Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTMgOC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTQgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCAzLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0tNC0xMmMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTAgOC41Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTQtNC41Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMC00Yy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTIiPjxwYXRoIGQ9Ik0xMCAyYy0xLjgyIDAtMy41My41LTUgMS4zNUM3Ljk5IDUuMDggMTAgOC4zIDEwIDEycy0yLjAxIDYuOTItNSA4LjY1QzYuNDcgMjEuNSA4LjE4IDIyIDEwIDIyYzUuNTIgMCAxMC00LjQ4IDEwLTEwUzE1LjUyIDIgMTAgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTMiPjxwYXRoIGQ9Ik05IDJjLTEuMDUgMC0yLjA1LjE2LTMgLjQ2IDQuMDYgMS4yNyA3IDUuMDYgNyA5LjU0IDAgNC40OC0yLjk0IDguMjctNyA5LjU0Ljk1LjMgMS45NS40NiAzIC40NiA1LjUyIDAgMTAtNC40OCAxMC0xMFMxNC41MiAyIDkgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTQiPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtLjg5IDAtMS43NC0uMi0yLjUtLjU1QzExLjU2IDE2LjUgMTMgMTQuNDIgMTMgMTJzLTEuNDQtNC41LTMuNS01LjQ1QzEwLjI2IDYuMiAxMS4xMSA2IDEyIDZjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJpZ2h0bmVzcy01Ij48cGF0aCBkPSJNMjAgMTUuMzFMMjMuMzEgMTIgMjAgOC42OVY0aC00LjY5TDEyIC42OSA4LjY5IDRINHY0LjY5TC42OSAxMiA0IDE1LjMxVjIwaDQuNjlMMTIgMjMuMzEgMTUuMzEgMjBIMjB2LTQuNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTYiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTciPjxwYXRoIGQ9Ik0yMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OUwyMy4zMSAxMiAyMCA4LjY5ek0xMiAxOGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6bTAtMTBjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyb2tlbi1pbWFnZSI+PHBhdGggZD0iTTIxIDV2Ni41OWwtMy0zLjAxLTQgNC4wMS00LTQtNCA0LTMtMy4wMVY1YzAtMS4xLjktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ6bS0zIDYuNDJsMyAzLjAxVjE5YzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0ydi02LjU4bDMgMi45OSA0LTQgNCA0IDQtMy45OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJicnVzaCI+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJidXJzdC1tb2RlIj48cGF0aCBkPSJNMSA1aDJ2MTRIMXptNCAwaDJ2MTRINXptMTcgMEgxMGMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDEyYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXpNMTEgMTdsMi41LTMuMTVMMTUuMjkgMTZsMi41LTMuMjJMMjEgMTdIMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhIj48cGF0aCBkPSJNOS40IDEwLjVsNC43Ny04LjI2QzEzLjQ3IDIuMDkgMTIuNzUgMiAxMiAyYy0yLjQgMC00LjYuODUtNi4zMiAyLjI1bDMuNjYgNi4zNS4wNi0uMXpNMjEuNTQgOWMtLjkyLTIuOTItMy4xNS01LjI2LTYtNi4zNEwxMS44OCA5aDkuNjZ6bS4yNiAxaC03LjQ5bC4yOS41IDQuNzYgOC4yNUMyMSAxNi45NyAyMiAxNC42MSAyMiAxMmMwLS42OS0uMDctMS4zNS0uMi0yek04LjU0IDEybC0zLjktNi43NUMzLjAxIDcuMDMgMiA5LjM5IDIgMTJjMCAuNjkuMDcgMS4zNS4yIDJoNy40OWwtMS4xNS0yem0tNi4wOCAzYy45MiAyLjkyIDMuMTUgNS4yNiA2IDYuMzRMMTIuMTIgMTVIMi40NnptMTEuMjcgMGwtMy45IDYuNzZjLjcuMTUgMS40Mi4yNCAyLjE3LjI0IDIuNCAwIDQuNi0uODUgNi4zMi0yLjI1bC0zLjY2LTYuMzUtLjkzIDEuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtYWx0Ij48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIzLjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDJMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAySDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1mcm9udCI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01ek0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0xLjk5LjktMS45OSAyUzEwLjkgOCAxMiA4em01LThIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6TTcgMmgxMHYxMC41YzAtMS42Ny0zLjMzLTIuNS01LTIuNXMtNSAuODMtNSAyLjVWMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcmVhciI+PHBhdGggZD0iTTEwIDIwSDV2Mmg1djJsMy0zLTMtM3Yyem00IDB2Mmg1di0yaC01em0zLTIwSDdDNS45IDAgNSAuOSA1IDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tNSA2Yy0xLjExIDAtMi0uOS0yLTJzLjg5LTIgMS45OS0yIDIgLjkgMiAyQzE0IDUuMSAxMy4xIDYgMTIgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtcm9sbCI+PHBhdGggZD0iTTE0IDVjMC0xLjEtLjktMi0yLTJoLTFWMmMwLS41NS0uNDUtMS0xLTFINmMtLjU1IDAtMSAuNDUtMSAxdjFINGMtMS4xIDAtMiAuOS0yIDJ2MTVjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yaDhWNWgtOHptLTIgMTNoLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6bTQgOWgtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy1zdHJvbmciPjxwYXRoIGQ9Ik0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptLTcgN0gzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNlbnRlci1mb2N1cy13ZWFrIj48cGF0aCBkPSJNNSAxNUgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6TTUgNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ2NGgyVjV6bTE0LTJoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yem0wIDE2aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0ek0xMiA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucyI+PHBhdGggZD0iTTIyIDE2VjRjMC0xLjEtLjktMi0yLTJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMnptLTExLTRsMi4wMyAyLjcxTDE2IDExbDQgNUg4bDMtNHpNMiA2djE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2SDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sbGVjdGlvbnMtYm9va21hcmsiPjxwYXRoIGQ9Ik00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTYtNEg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bTAgMTBsLTIuNS0xLjVMMTUgMTJWNGg1djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29sb3ItbGVucyI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvcml6ZSI+PHBhdGggZD0iTTIwLjcxIDUuNjNsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MnpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlIj48cGF0aCBkPSJNMTAgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDV2MmgyVjFoLTJ2MnptMCAxNUg1bDUtNnY2em05LTE1aC01djJoNXYxM2wtNS02djloNWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbnRyb2wtcG9pbnQiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMCAxMC00LjQ5IDEwLTEwUzE3LjUxIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludC1kdXBsaWNhdGUiPjxwYXRoIGQ9Ik0xNiA4aC0ydjNoLTN2MmgzdjNoMnYtM2gzdi0yaC0zek0yIDEyYzAtMi43OSAxLjY0LTUuMiA0LjAxLTYuMzJWMy41MkMyLjUyIDQuNzYgMCA4LjA5IDAgMTJzMi41MiA3LjI0IDYuMDEgOC40OHYtMi4xNkMzLjY0IDE3LjIgMiAxNC43OSAyIDEyem0xMy05Yy00Ljk2IDAtOSA0LjA0LTkgOXM0LjA0IDkgOSA5IDktNC4wNCA5LTktNC4wNC05LTktOXptMCAxNmMtMy44NiAwLTctMy4xNC03LTdzMy4xNC03IDctNyA3IDMuMTQgNyA3LTMuMTQgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcCI+PHBhdGggZD0iTTE3IDE1aDJWN2MwLTEuMS0uOS0yLTItMkg5djJoOHY4ek03IDE3VjFINXY0SDF2Mmg0djEwYzAgMS4xLjkgMiAyIDJoMTB2NGgydi00aDR2LTJIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLTE2LTkiPjxwYXRoIGQ9Ik0xOSA2SDVjLTEuMSAwLTIgLjktMiAydjhjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEwSDVWOGgxNHY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMy0yIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINVY2aDE0djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNS00Ij48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtNy01Ij48cGF0aCBkPSJNMTkgN0g1Yy0xLjEgMC0yIC45LTIgMnY2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnptMCA4SDVWOWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZGluIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtZnJlZSI+PHBhdGggZD0iTTMgNXY0aDJWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTIgMTBIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00em0xNCA0aC00djJoNGMxLjEgMCAyLS45IDItMnYtNGgtMnY0em0wLTE2aC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLWxhbmRzY2FwZSI+PHBhdGggZD0iTTE5IDVINWMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDEySDVWN2gxNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLW9yaWdpbmFsIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0em0tNS4wNC02LjcxbC0yLjc1IDMuNTQtMS45Ni0yLjM2TDYuNSAxN2gxMWwtMy41NC00LjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtcG9ydHJhaXQiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1yb3RhdGUiPjxwYXRoIGQ9Ik03LjQ3IDIxLjQ5QzQuMiAxOS45MyAxLjg2IDE2Ljc2IDEuNSAxM0gwYy41MSA2LjE2IDUuNjYgMTEgMTEuOTUgMTEgLjIzIDAgLjQ0LS4wMi42Ni0uMDNMOC44IDIwLjE1bC0xLjMzIDEuMzR6TTEyLjA1IDBjLS4yMyAwLS40NC4wMi0uNjYuMDRsMy44MSAzLjgxIDEuMzMtMS4zM0MxOS44IDQuMDcgMjIuMTQgNy4yNCAyMi41IDExSDI0Yy0uNTEtNi4xNi01LjY2LTExLTExLjk1LTExek0xNiAxNGgyVjhjMC0xLjExLS45LTItMi0yaC02djJoNnY2em0tOCAyVjRINnYySDR2MmgydjhjMCAxLjEuODkgMiAyIDJoOHYyaDJ2LTJoMnYtMkg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atc3F1YXJlIj48cGF0aCBkPSJNMTggNEg2Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINlY2aDEydjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlaGF6ZSI+PHBhdGggZD0iTTIgMTUuNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6bTAtNXYyaDIwdi0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGV0YWlscyI+PHBhdGggZD0iTTMgNGw5IDE2IDktMTZIM3ptMy4zOCAyaDExLjI1TDEyIDE2IDYuMzggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlZGl0Ij48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlIj48cGF0aCBkPSJNMTUgMTd2Mmgydi0yaDJ2LTJoLTJ2LTJoLTJ2MmgtMnYyaDJ6bTUtMTVINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek01IDVoNnYySDVWNXptMTUgMTVINEwyMCA0djE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0xIj48cGF0aCBkPSJNNCAxMXYyaDh2LTJINHptMTUgN2gtMlY3LjM4TDE0IDguNFY2LjdMMTguNyA1aC4zdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLW5lZy0yIj48cGF0aCBkPSJNMTUuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3cy4xOS0uNzkuMTktMS4xOGMwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIxdi0xLjcxaC01Ljk1ek0yIDExdjJoOHYtMkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXBsdXMtMSI+PHBhdGggZD0iTTEwIDdIOHY0SDR2Mmg0djRoMnYtNGg0di0yaC00Vjd6bTEwIDExaC0yVjcuMzhMMTUgOC40VjYuN0wxOS43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0yIj48cGF0aCBkPSJNMTYuMDUgMTYuMjlsMi44Ni0zLjA3Yy4zOC0uMzkuNzItLjc5IDEuMDQtMS4xOC4zMi0uMzkuNTktLjc4LjgyLTEuMTcuMjMtLjM5LjQxLS43OC41NC0xLjE3LjEzLS4zOS4xOS0uNzkuMTktMS4xOCAwLS41My0uMDktMS4wMi0uMjctMS40Ni0uMTgtLjQ0LS40NC0uODEtLjc4LTEuMTEtLjM0LS4zMS0uNzctLjU0LTEuMjYtLjcxLS41MS0uMTYtMS4wOC0uMjQtMS43Mi0uMjQtLjY5IDAtMS4zMS4xMS0xLjg1LjMyLS41NC4yMS0xIC41MS0xLjM2Ljg4LS4zNy4zNy0uNjUuOC0uODQgMS4zLS4xOC40Ny0uMjcuOTctLjI4IDEuNWgyLjE0Yy4wMS0uMzEuMDUtLjYuMTMtLjg3LjA5LS4yOS4yMy0uNTQuNC0uNzUuMTgtLjIxLjQxLS4zNy42OC0uNDkuMjctLjEyLjYtLjE4Ljk2LS4xOC4zMSAwIC41OC4wNS44MS4xNS4yMy4xLjQzLjI1LjU5LjQzLjE2LjE4LjI4LjQuMzcuNjUuMDguMjUuMTMuNTIuMTMuODEgMCAuMjItLjAzLjQzLS4wOC42NS0uMDYuMjItLjE1LjQ1LS4yOS43LS4xNC4yNS0uMzIuNTMtLjU2LjgzLS4yMy4zLS41Mi42NS0uODggMS4wM2wtNC4xNyA0LjU1VjE4SDIydi0xLjcxaC01Ljk1ek04IDdINnY0SDJ2Mmg0djRoMnYtNGg0di0ySDhWN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS16ZXJvIj48cGF0aCBkPSJNMTYuMTQgMTIuNWMwIDEtLjEgMS44NS0uMyAyLjU1LS4yLjctLjQ4IDEuMjctLjgzIDEuNy0uMzYuNDQtLjc5Ljc1LTEuMy45NS0uNTEuMi0xLjA3LjMtMS43LjMtLjYyIDAtMS4xOC0uMS0xLjY5LS4zLS41MS0uMi0uOTUtLjUxLTEuMzEtLjk1LS4zNi0uNDQtLjY1LTEuMDEtLjg1LTEuNy0uMi0uNy0uMy0xLjU1LS4zLTIuNTV2LTIuMDRjMC0xIC4xLTEuODUuMy0yLjU1LjItLjcuNDgtMS4yNi44NC0xLjY5LjM2LS40My44LS43NCAxLjMxLS45M0MxMC44MSA1LjEgMTEuMzggNSAxMiA1Yy42MyAwIDEuMTkuMSAxLjcuMjkuNTEuMTkuOTUuNSAxLjMxLjkzLjM2LjQzLjY0Ljk5Ljg0IDEuNjkuMi43LjMgMS41NC4zIDIuNTV2Mi4wNHptLTIuMTEtMi4zNmMwLS42NC0uMDUtMS4xOC0uMTMtMS42Mi0uMDktLjQ0LS4yMi0uNzktLjQtMS4wNi0uMTctLjI3LS4zOS0uNDYtLjY0LS41OC0uMjUtLjEzLS41NC0uMTktLjg2LS4xOS0uMzIgMC0uNjEuMDYtLjg2LjE4cy0uNDcuMzEtLjY0LjU4Yy0uMTcuMjctLjMxLjYyLS40IDEuMDZzLS4xMy45OC0uMTMgMS42MnYyLjY3YzAgLjY0LjA1IDEuMTguMTQgMS42Mi4wOS40NS4yMy44MS40IDEuMDlzLjM5LjQ4LjY0LjYxLjU0LjE5Ljg3LjE5Yy4zMyAwIC42Mi0uMDYuODctLjE5cy40Ni0uMzMuNjMtLjYxYy4xNy0uMjguMy0uNjQuMzktMS4wOS4wOS0uNDUuMTMtLjk5LjEzLTEuNjJ2LTIuNjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyIj48cGF0aCBkPSJNMTUuOTYgMTAuMjlsLTIuNzUgMy41NC0xLjk2LTIuMzZMOC41IDE1aDExbC0zLjU0LTQuNzF6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTEiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgMTBoMlY1aC00djJoMnY4em03LTE0SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTIiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tNC00aC00di0yaDJjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0yYy0xLjEgMC0yIC44OS0yIDJ2NGg2di0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci0zIj48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNS44MyAwIDEuNS0uNjcgMS41LTEuNVY3YzAtMS4xMS0uOS0yLTItMmgtNHYyaDR2MmgtMnYyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci00Ij48cGF0aCBkPSJNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTEyIDEwaDJWNWgtMnY0aC0yVjVoLTJ2Nmg0djR6bTYtMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNSI+PHBhdGggZD0iTTIxIDFIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE0IDh2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC02djZoNHYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTYiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0yYzAtMS4xMS0uOS0yLTItMmgtMlY3aDRWNWgtNGMtMS4xIDAtMiAuODktMiAydjZjMCAxLjExLjkgMiAyIDJ6bTAtNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTciPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0ybDQtOFY1aC02djJoNGwtNCA4aDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTgiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0em0tOC0yaDJjMS4xIDAgMi0uODkgMi0ydi0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC0yYy0xLjEgMC0yIC44OS0yIDJ2MS41YzAgLjgzLjY3IDEuNSAxLjUgMS41LS44MyAwLTEuNS42Ny0xLjUgMS41VjEzYzAgMS4xMS45IDIgMiAyem0wLThoMnYyaC0yVjd6bTAgNGgydjJoLTJ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTkiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0xNSA1aC0yYy0xLjEgMC0yIC44OS0yIDJ2MmMwIDEuMTEuOSAyIDIgMmgydjJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMlY3YzAtMS4xMS0uOS0yLTItMnptMCA0aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci05LXBsdXMiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTEgN1Y4YzAtMS4xMS0uOS0yLTItMmgtMWMtMS4xIDAtMiAuODktMiAydjFjMCAxLjExLjkgMiAyIDJoMXYxSDl2MmgzYzEuMSAwIDItLjg5IDItMnptLTMtM1Y4aDF2MWgtMXptMTAtOEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgOGgtMlY3aC0ydjJoLTJ2MmgydjJoMnYtMmgydjZIN1YzaDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWItYW5kLXciPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmwtNy04djhINWw3LThWNWg3djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1jZW50ZXItZm9jdXMiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDljLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1kcmFtYSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYxIDUuNjQgNS4zNiA4LjA0IDIuMzUgOC4zNiAwIDEwLjkgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTkgMThINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0aDJjMC0yLjc2LTEuODYtNS4wOC00LjQtNS43OEM4LjYxIDYuODggMTAuMiA2IDEyIDZjMy4wMyAwIDUuNSAyLjQ3IDUuNSA1LjV2LjVIMTljMS42NSAwIDMgMS4zNSAzIDNzLTEuMzUgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWZyYW1lcyI+PHBhdGggZD0iTTIwIDRoLTRsLTQtNC00IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDRWNmg0LjUybDMuNTItMy41TDE1LjUyIDZIMjB2MTR6TTE4IDhINnYxMGgxMiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1oZHIiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLW5vbmUiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTgtNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci10aWx0LXNoaWZ0Ij48cGF0aCBkPSJNMTEgNC4wN1YyLjA1Yy0yLjAxLjItMy44NCAxLTUuMzIgMi4yMUw3LjEgNS42OWMxLjExLS44NiAyLjQ0LTEuNDQgMy45LTEuNjJ6bTcuMzIuMTlDMTYuODQgMy4wNSAxNS4wMSAyLjI1IDEzIDIuMDV2Mi4wMmMxLjQ2LjE4IDIuNzkuNzYgMy45IDEuNjJsMS40Mi0xLjQzek0xOS45MyAxMWgyLjAyYy0uMi0yLjAxLTEtMy44NC0yLjIxLTUuMzJMMTguMzEgNy4xYy44NiAxLjExIDEuNDQgMi40NCAxLjYyIDMuOXpNNS42OSA3LjFMNC4yNiA1LjY4QzMuMDUgNy4xNiAyLjI1IDguOTkgMi4wNSAxMWgyLjAyYy4xOC0xLjQ2Ljc2LTIuNzkgMS42Mi0zLjl6TTQuMDcgMTNIMi4wNWMuMiAyLjAxIDEgMy44NCAyLjIxIDUuMzJsMS40My0xLjQzYy0uODYtMS4xLTEuNDQtMi40My0xLjYyLTMuODl6TTE1IDEyYzAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzIDEuMzQgMyAzIDMgMy0xLjM0IDMtM3ptMy4zMSA0LjlsMS40MyAxLjQzYzEuMjEtMS40OCAyLjAxLTMuMzIgMi4yMS01LjMyaC0yLjAyYy0uMTggMS40NS0uNzYgMi43OC0xLjYyIDMuODl6TTEzIDE5LjkzdjIuMDJjMi4wMS0uMiAzLjg0LTEgNS4zMi0yLjIxbC0xLjQzLTEuNDNjLTEuMS44Ni0yLjQzIDEuNDQtMy44OSAxLjYyem0tNy4zMi0uMTlDNy4xNiAyMC45NSA5IDIxLjc1IDExIDIxLjk1di0yLjAyYy0xLjQ2LS4xOC0yLjc5LS43Ni0zLjktMS42MmwtMS40MiAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci12aW50YWdlIj48cGF0aCBkPSJNMTguNyAxMi40Yy0uMjgtLjE2LS41Ny0uMjktLjg2LS40LjI5LS4xMS41OC0uMjQuODYtLjQgMS45Mi0xLjExIDIuOTktMy4xMiAzLTUuMTktMS43OS0xLjAzLTQuMDctMS4xMS02IDAtLjI4LjE2LS41NC4zNS0uNzguNTQuMDUtLjMxLjA4LS42My4wOC0uOTUgMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTlDMTAuMjEgMS44NSA5IDMuNzggOSA2YzAgLjMyLjAzLjY0LjA4Ljk1LS4yNC0uMi0uNS0uMzktLjc4LS41NS0xLjkyLTEuMTEtNC4yLTEuMDMtNiAwIDAgMi4wNyAxLjA3IDQuMDggMyA1LjE5LjI4LjE2LjU3LjI5Ljg2LjQtLjI5LjExLS41OC4yNC0uODYuNC0xLjkyIDEuMTEtMi45OSAzLjEyLTMgNS4xOSAxLjc5IDEuMDMgNC4wNyAxLjExIDYgMCAuMjgtLjE2LjU0LS4zNS43OC0uNTQtLjA1LjMyLS4wOC42NC0uMDguOTYgMCAyLjIyIDEuMjEgNC4xNSAzIDUuMTkgMS43OS0xLjA0IDMtMi45NyAzLTUuMTkgMC0uMzItLjAzLS42NC0uMDgtLjk1LjI0LjIuNS4zOC43OC41NCAxLjkyIDEuMTEgNC4yIDEuMDMgNiAwLS4wMS0yLjA3LTEuMDgtNC4wOC0zLTUuMTl6TTEyIDE2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFyZSI+PHBhdGggZD0iTTcgMTFIMXYyaDZ2LTJ6bTIuMTctMy4yNEw3LjA1IDUuNjQgNS42NCA3LjA1bDIuMTIgMi4xMiAxLjQxLTEuNDF6TTEzIDFoLTJ2NmgyVjF6bTUuMzYgNi4wNWwtMS40MS0xLjQxLTIuMTIgMi4xMiAxLjQxIDEuNDEgMi4xMi0yLjEyek0xNyAxMXYyaDZ2LTJoLTZ6bS01LTJjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zem0yLjgzIDcuMjRsMi4xMiAyLjEyIDEuNDEtMS40MS0yLjEyLTIuMTItMS40MSAxLjQxem0tOS4xOS43MWwxLjQxIDEuNDEgMi4xMi0yLjEyLTEuNDEtMS40MS0yLjEyIDIuMTJ6TTExIDIzaDJ2LTZoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1hdXRvIj48cGF0aCBkPSJNMyAydjEyaDN2OWw3LTEySDlsNC05SDN6bTE2IDBoLTJsLTMuMiA5aDEuOWwuNy0yaDMuMmwuNyAyaDEuOUwxOSAyem0tMi4xNSA1LjY1TDE4IDRsMS4xNSAzLjY1aC0yLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb2ZmIj48cGF0aCBkPSJNMy4yNyAzTDIgNC4yN2w1IDVWMTNoM3Y5bDMuNTgtNi4xNEwxNy43MyAyMCAxOSAxOC43MyAzLjI3IDN6TTE3IDEwaC00bDQtOEg3djIuMThsOC40NiA4LjQ2TDE3IDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLW9uIj48cGF0aCBkPSJNNyAydjExaDN2OWw3LTEyaC00bDQtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwIj48cGF0aCBkPSJNMTUgMjFoMnYtMmgtMnYyem00LTEyaDJWN2gtMnYyek0zIDV2MTRjMCAxLjEuOSAyIDIgMmg0di0ySDVWNWg0VjNINWMtMS4xIDAtMiAuOS0yIDJ6bTE2LTJ2MmgyYzAtMS4xLS45LTItMi0yem0tOCAyMGgyVjFoLTJ2MjJ6bTgtNmgydi0yaC0ydjJ6TTE1IDVoMlYzaC0ydjJ6bTQgOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRpZW50Ij48cGF0aCBkPSJNMTEgOWgydjJoLTJ6bS0yIDJoMnYySDl6bTQgMGgydjJoLTJ6bTItMmgydjJoLTJ6TTcgOWgydjJIN3ptMTItNkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMThIN3YtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTQgMGgtMnYtMmgydjJ6bTItN2gtMnYyaDJ2MmgtMnYtMmgtMnYyaC0ydi0yaC0ydjJIOXYtMkg3djJINXYtMmgydi0ySDVWNWgxNHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWluIj48cGF0aCBkPSJNMTAgMTJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yek02IDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDhjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0xMi04YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptLTQgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJncmlkLW9mZiI+PHBhdGggZD0iTTggNHYxLjQ1bDIgMlY0aDR2NGgtMy40NWwyIDJIMTR2MS40NWwyIDJWMTBoNHY0aC0zLjQ1bDIgMkgyMHYxLjQ1bDIgMlY0YzAtMS4xLS45LTItMi0ySDQuNTVsMiAySDh6bTggMGg0djRoLTRWNHpNMS4yNyAxLjI3TDAgMi41NWwyIDJWMjBjMCAxLjEuOSAyIDIgMmgxNS40NmwyIDIgMS4yNy0xLjI3TDEuMjcgMS4yN3pNMTAgMTIuNTVMMTEuNDUgMTRIMTB2LTEuNDV6bS02LTZMNS40NSA4SDRWNi41NXpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoMy40NWwuNTUuNTVWMTR6bTYgNmgtNHYtNGgzLjQ1bC41NS41NFYyMHptMiAwdi0xLjQ2TDE3LjQ2IDIwSDE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb24iPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNOCAyMEg0di00aDR2NHptMC02SDR2LTRoNHY0em0wLTZINFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHptNiAxMmgtNHYtNGg0djR6bTAtNmgtNHYtNGg0djR6bTAtNmgtNFY0aDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb2ZmIj48cGF0aCBkPSJNMTcuNSAxNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4yLjktLjguOS0xLjR2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY0LjlsMS4xIDEuMWguNHptMC00LjVoMnYxaC0ydi0xem0tNC41IDB2LjRsMS41IDEuNXYtMS45YzAtLjgtLjctMS41LTEuNS0xLjVoLTEuOWwxLjUgMS41aC40em0tMy41LTFsLTctNy0xLjEgMUw2LjkgOWgtLjR2MmgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDh2LTQuOWwxLjUgMS41VjE1aDMuNGw3LjYgNy42IDEuMS0xLjEtMTIuMS0xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItb24iPjxwYXRoIGQ9Ik0yMSAxMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjVIMTZ2NmgxLjV2LTJoMS4xbC45IDJIMjFsLS45LTIuMWMuNS0uMy45LS44LjktMS40em0tMS41IDBoLTJ2LTFoMnYxem0tMTMtLjVoLTJWOUgzdjZoMS41di0yLjVoMlYxNUg4VjlINi41djJ6TTEzIDlIOS41djZIMTNjLjggMCAxLjUtLjcgMS41LTEuNXYtM2MwLS44LS43LTEuNS0xLjUtMS41em0wIDQuNWgtMnYtM2gydjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXN0cm9uZyI+PHBhdGggZD0iTTE3IDZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDYgNi0yLjY5IDYtNi0yLjY5LTYtNi02ek01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci13ZWFrIj48cGF0aCBkPSJNNSA4Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMTItMmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bTAgMTBjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlYWxpbmciPjxwYXRoIGQ9Ik0xNy43MyAxMi4wMmwzLjk4LTMuOThjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtNC4zNC00LjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy45OCAzLjk4TDggMi4yOUM3LjggMi4xIDcuNTUgMiA3LjI5IDJjLS4yNSAwLS41MS4xLS43LjI5TDIuMjUgNi42M2MtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWwzLjk4IDMuOThMMi4yNSAxNmMtLjM5LjM5LS4zOSAxLjAyIDAgMS40MWw0LjM0IDQuMzRjLjM5LjM5IDEuMDIuMzkgMS40MSAwbDMuOTgtMy45OCAzLjk4IDMuOThjLjIuMi40NS4yOS43MS4yOS4yNiAwIC41MS0uMS43MS0uMjlsNC4zNC00LjM0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTMuOTktMy45OHpNMTIgOWMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tNC43MSAxLjk2TDMuNjYgNy4zNGwzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3pNMTAgMTNjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMiAyYy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bTItNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0yLjY2IDkuMzRsLTMuNjMtMy42MiAzLjYzLTMuNjMgMy42MiAzLjYyLTMuNjIgMy42M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZSI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1hZ2UtYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTYgMTBoLTJ2Mmgydi0yem0wIDRoLTJ2Mmgydi0yem0tOC00SDZ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem04LTZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE0SDRWNmgxNnYxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpc28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNNS41IDcuNWgydi0ySDl2MmgyVjlIOXYySDcuNVY5aC0yVjcuNXpNMTkgMTlINUwxOSA1djE0em0tMi0ydi0xLjVoLTVWMTdoNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5kc2NhcGUiPjxwYXRoIGQ9Ik0xNCA2bC0zLjc1IDUgMi44NSAzLjgtMS42IDEuMkM5LjgxIDEzLjc1IDcgMTAgNyAxMGwtNiA4aDIyTDE0IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVhay1hZGQiPjxwYXRoIGQ9Ik02IDNIM3YzYzEuNjYgMCAzLTEuMzQgMy0zem04IDBoLTJjMCA0Ljk3LTQuMDMgOS05IDl2MmM2LjA4IDAgMTEtNC45MyAxMS0xMXptLTQgMEg4YzAgMi43Ni0yLjI0IDUtNSA1djJjMy44NyAwIDctMy4xMyA3LTd6bTAgMThoMmMwLTQuOTcgNC4wMy05IDktOXYtMmMtNi4wNyAwLTExIDQuOTMtMTEgMTF6bTggMGgzdi0zYy0xLjY2IDAtMyAxLjM0LTMgM3ptLTQgMGgyYzAtMi43NiAyLjI0LTUgNS01di0yYy0zLjg3IDAtNyAzLjEzLTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLXJlbW92ZSI+PHBhdGggZD0iTTEwIDNIOGMwIC4zNy0uMDQuNzItLjEyIDEuMDZsMS41OSAxLjU5QzkuODEgNC44NCAxMCAzLjk0IDEwIDN6TTMgNC4yN2wyLjg0IDIuODRDNS4wMyA3LjY3IDQuMDYgOCAzIDh2MmMxLjYxIDAgMy4wOS0uNTUgNC4yNy0xLjQ2TDguNyA5Ljk3QzcuMTQgMTEuMjQgNS4xNiAxMiAzIDEydjJjMi43MSAwIDUuMTktLjk5IDcuMTEtMi42MmwyLjUgMi41QzEwLjk5IDE1LjgxIDEwIDE4LjI5IDEwIDIxaDJjMC0yLjE2Ljc2LTQuMTQgMi4wMy01LjY5bDEuNDMgMS40M0MxNC41NSAxNy45MSAxNCAxOS4zOSAxNCAyMWgyYzAtMS4wNi4zMy0yLjAzLjg5LTIuODRMMTkuNzMgMjEgMjEgMTkuNzMgNC4yNyAzIDMgNC4yN3pNMTQgM2gtMmMwIDEuNS0uMzcgMi45MS0xLjAyIDQuMTZsMS40NiAxLjQ2QzEzLjQyIDYuOTggMTQgNS4wNiAxNCAzem01Ljk0IDEzLjEyYy4zNC0uMDguNjktLjEyIDEuMDYtLjEydi0yYy0uOTQgMC0xLjg0LjE5LTIuNjYuNTJsMS42IDEuNnptLTQuNTYtNC41NmwxLjQ2IDEuNDZDMTguMDkgMTIuMzcgMTkuNSAxMiAyMSAxMnYtMmMtMi4wNiAwLTMuOTguNTgtNS42MiAxLjU2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlbnMiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmtlZC1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTQiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE2IDMuMzNjMi41OCAwIDQuNjcgMi4wOSA0LjY3IDQuNjdIMjJjMC0zLjMxLTIuNjktNi02LTZ2MS4zM00xNiA2YzEuMTEgMCAyIC44OSAyIDJoMS4zM2MwLTEuODQtMS40OS0zLjMzLTMuMzMtMy4zM1Y2Ij48L3BhdGg+PHBhdGggZD0iTTE3IDljMC0xLjExLS44OS0yLTItMlY0SDlMNy4xNyA2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWgtNXptLTUgMTBjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzIj48cGF0aCBkPSJNMTIgMTBjLTMuODYgMC03IDMuMTQtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ni0zLjE0LTctNy03em0wLTRDNS45MyA2IDEgMTAuOTMgMSAxN2gyYzAtNC45NiA0LjA0LTkgOS05czkgNC4wNCA5IDloMmMwLTYuMDctNC45My0xMS0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy0zIj48cGF0aCBkPSJNMTkuMDEgM2gtMTRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNy41YzAgLjgzLS42NyAxLjUtMS41IDEuNS44MyAwIDEuNS42NyAxLjUgMS41VjE1YzAgMS4xMS0uOSAyLTIgMmgtNHYtMmg0di0yaC0ydi0yaDJWOWgtNFY3aDRjMS4xIDAgMiAuODkgMiAydjEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy00Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDE0aC0ydi00SDlWN2gydjRoMlY3aDJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA2aC00djJoMmMxLjEgMCAyIC44OSAyIDJ2MmMwIDEuMTEtLjkgMi0yIDJIOXYtMmg0di0ySDlWN2g2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MtNiI+PHBhdGggZD0iTTExIDE1aDJ2LTJoLTJ2MnptOC0xMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMmgtMmMtMS4xIDAtMi0uODktMi0yVjljMC0xLjExLjktMiAyLTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLW9uZSI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNSAxNGgtMlY5aC0yVjdoNHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy10d28iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgOGMwIDEuMTEtLjkgMi0yIDJoLTJ2Mmg0djJIOXYtNGMwLTEuMTEuOS0yIDItMmgyVjlIOVY3aDRjMS4xIDAgMiAuODkgMiAydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG91cGUiPjxwYXRoIGQ9Ik0xMyA3aC0ydjRIN3YyaDR2NGgydi00aDR2LTJoLTRWN3ptLTEtNUM2LjQ5IDIgMiA2LjQ5IDIgMTJzNC40OSAxMCAxMCAxMGg4YzEuMSAwIDItLjkgMi0ydi04YzAtNS41MS00LjQ5LTEwLTEwLTEwem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb25vY2hyb21lLXBob3RvcyI+PHBhdGggZD0iTTIwIDVoLTMuMkwxNSAzSDlMNy4yIDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE0aC04di0xYy0yLjggMC01LTIuMi01LTVzMi4yLTUgNS01VjdoOHYxMnptLTMtNmMwLTIuOC0yLjItNS01LTV2MS44YzEuOCAwIDMuMiAxLjQgMy4yIDMuMnMtMS40IDMuMi0zLjIgMy4yVjE4YzIuOCAwIDUtMi4yIDUtNXptLTguMiAwYzAgMS44IDEuNCAzLjIgMy4yIDMuMlY5LjhjLTEuOCAwLTMuMiAxLjQtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1jcmVhdGlvbiI+PHBhdGggZD0iTTE4IDRsMiA0aC0zbC0yLTRoLTJsMiA0aC0zbC0yLTRIOGwyIDRIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZpZS1maWx0ZXIiPjxwYXRoIGQ9Ik0xOCA0bDIgM2gtM2wtMi0zaC0ybDIgM2gtM2wtMi0zSDhsMiAzSDdMNSA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRoLTR6bS02Ljc1IDExLjI1TDEwIDE4bC0xLjI1LTIuNzVMNiAxNGwyLjc1LTEuMjVMMTAgMTBsMS4yNSAyLjc1TDE0IDE0bC0yLjc1IDEuMjV6bTUuNjktMy4zMUwxNiAxNGwtLjk0LTIuMDZMMTMgMTFsMi4wNi0uOTRMMTYgOGwuOTQgMi4wNkwxOSAxMWwtMi4wNi45NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJtdXNpYy1ub3RlIj48cGF0aCBkPSJNMTIgM3YxMC41NWMtLjU5LS4zNC0xLjI3LS41NS0yLS41NS0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRWN2g0VjNoLTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlIj48cGF0aCBkPSJNMTMgMTYuMTJjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NSAwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg1djJoMTR2LTJoLTZ2LTMuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF0dXJlLXBlb3BsZSI+PHBhdGggZD0iTTIyLjE3IDkuMTdjMC0zLjg3LTMuMTMtNy03LTdzLTcgMy4xMy03IDdjMCAzLjQ3IDIuNTIgNi4zNCA1LjgzIDYuODlWMjBINnYtM2gxdi00YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2NGgxdjVoMTZ2LTJoLTN2LTMuODhjMy40Ny0uNDEgNi4xNy0zLjM2IDYuMTctNi45NXpNNC41IDExYy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjMzIDggNC41IDggMyA4LjY3IDMgOS41IDMuNjcgMTEgNC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5hdmlnYXRlLWJlZm9yZSI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtbmV4dCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbGV0dGUiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEiPjxwYXRoIGQ9Ik0yMyAxOFY2YzAtMS4xLS45LTItMi0ySDNjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6TTguNSAxMi41bDIuNSAzLjAxTDE0LjUgMTFsNC41IDZINWwzLjUtNC41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLWZpc2gtZXllIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtaG9yaXpvbnRhbCI+PHBhdGggZD0iTTIwIDYuNTR2MTAuOTFjLTIuNi0uNzctNS4yOC0xLjE2LTgtMS4xNi0yLjcyIDAtNS40LjM5LTggMS4xNlY2LjU0YzIuNi43NyA1LjI4IDEuMTYgOCAxLjE2IDIuNzIuMDEgNS40LS4zOCA4LTEuMTZNMjEuNDMgNGMtLjEgMC0uMi4wMi0uMzEuMDZDMTguMTggNS4xNiAxNS4wOSA1LjcgMTIgNS43Yy0zLjA5IDAtNi4xOC0uNTUtOS4xMi0xLjY0LS4xMS0uMDQtLjIyLS4wNi0uMzEtLjA2LS4zNCAwLS41Ny4yMy0uNTcuNjN2MTQuNzVjMCAuMzkuMjMuNjIuNTcuNjIuMSAwIC4yLS4wMi4zMS0uMDYgMi45NC0xLjEgNi4wMy0xLjY0IDkuMTItMS42NCAzLjA5IDAgNi4xOC41NSA5LjEyIDEuNjQuMTEuMDQuMjEuMDYuMzEuMDYuMzMgMCAuNTctLjIzLjU3LS42M1Y0LjYzYzAtLjQtLjI0LS42My0uNTctLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXZlcnRpY2FsIj48cGF0aCBkPSJNMTkuOTQgMjEuMTJjLTEuMS0yLjk0LTEuNjQtNi4wMy0xLjY0LTkuMTIgMC0zLjA5LjU1LTYuMTggMS42NC05LjEyLjA0LS4xMS4wNi0uMjIuMDYtLjMxIDAtLjM0LS4yMy0uNTctLjYzLS41N0g0LjYzYy0uNCAwLS42My4yMy0uNjMuNTcgMCAuMS4wMi4yLjA2LjMxQzUuMTYgNS44MiA1LjcxIDguOTEgNS43MSAxMmMwIDMuMDktLjU1IDYuMTgtMS42NCA5LjEyLS4wNS4xMS0uMDcuMjItLjA3LjMxIDAgLjMzLjIzLjU3LjYzLjU3aDE0Ljc1Yy4zOSAwIC42My0uMjQuNjMtLjU3LS4wMS0uMS0uMDMtLjItLjA3LS4zMXpNNi41NCAyMGMuNzctMi42IDEuMTYtNS4yOCAxLjE2LTggMC0yLjcyLS4zOS01LjQtMS4xNi04aDEwLjkxYy0uNzcgMi42LTEuMTYgNS4yOC0xLjE2IDggMCAyLjcyLjM5IDUuNCAxLjE2IDhINi41NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS13aWRlLWFuZ2xlIj48cGF0aCBkPSJNMTIgNmMyLjQ1IDAgNC43MS4yIDcuMjkuNjQuNDcgMS43OC43MSAzLjU4LjcxIDUuMzYgMCAxLjc4LS4yNCAzLjU4LS43MSA1LjM2LTIuNTguNDQtNC44NC42NC03LjI5LjY0cy00LjcxLS4yLTcuMjktLjY0QzQuMjQgMTUuNTggNCAxMy43OCA0IDEyYzAtMS43OC4yNC0zLjU4LjcxLTUuMzZDNy4yOSA2LjIgOS41NSA2IDEyIDZtMC0yYy0yLjczIDAtNS4yMi4yNC03Ljk1LjcybC0uOTMuMTYtLjI1LjlDMi4yOSA3Ljg1IDIgOS45MyAyIDEycy4yOSA0LjE1Ljg3IDYuMjJsLjI1Ljg5LjkzLjE2YzIuNzMuNDkgNS4yMi43MyA3Ljk1LjczczUuMjItLjI0IDcuOTUtLjcybC45My0uMTYuMjUtLjg5Yy41OC0yLjA4Ljg3LTQuMTYuODctNi4yM3MtLjI5LTQuMTUtLjg3LTYuMjJsLS4yNS0uODktLjkzLS4xNkMxNy4yMiA0LjI0IDE0LjczIDQgMTIgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90byI+PHBhdGggZD0iTTIxIDE5VjVjMC0xLjEtLjktMi0yLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnpNOC41IDEzLjVsMi41IDMuMDFMMTQuNSAxMmw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tYWxidW0iPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6bTAgMTVsMy0zLjg2IDIuMTQgMi41OCAzLTMuODZMMTggMTlINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1jYW1lcmEiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tZmlsdGVyIj48cGF0aCBkPSJNMTkuMDIgMTB2OUg1VjVoOVYzSDUuMDJjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTloLTJ6TTE3IDEwbC45NC0yLjA2TDIwIDdsLTIuMDYtLjk0TDE3IDRsLS45NCAyLjA2TDE0IDdsMi4wNi45NHptLTMuNzUuNzVMMTIgOGwtMS4yNSAyLjc1TDggMTJsMi43NSAxLjI1TDEyIDE2bDEuMjUtMi43NUwxNiAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1saWJyYXJ5Ij48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1zaXplLXNlbGVjdC1hY3R1YWwiPjxwYXRoIGQ9Ik0yMSAzSDNDMiAzIDEgNCAxIDV2MTRjMCAxLjEuOSAyIDIgMmgxOGMxIDAgMi0xIDItMlY1YzAtMS0xLTItMi0yek01IDE3bDMuNS00LjUgMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWxhcmdlIj48cGF0aCBkPSJNMjEgMTVoMnYyaC0ydi0yem0wLTRoMnYyaC0ydi0yem0yIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTMgM2gydjJoLTJWM3ptOCA0aDJ2MmgtMlY3em0wLTR2MmgyYzAtMS0xLTItMi0yek0xIDdoMnYySDFWN3ptMTYtNGgydjJoLTJWM3ptMCAxNmgydjJoLTJ2LTJ6TTMgM0MyIDMgMSA0IDEgNWgyVjN6bTYgMGgydjJIOVYzek01IDNoMnYySDVWM3ptLTQgOHY4YzAgMS4xLjkgMiAyIDJoMTJWMTFIMXptMiA4bDIuNS0zLjIxIDEuNzkgMi4xNSAyLjUtMy4yMkwxMyAxOUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LXNtYWxsIj48cGF0aCBkPSJNMjMgMTVoLTJ2Mmgydi0yem0wLTRoLTJ2Mmgydi0yem0wIDhoLTJ2MmMxIDAgMi0xIDItMnpNMTUgM2gtMnYyaDJWM3ptOCA0aC0ydjJoMlY3em0tMi00djJoMmMwLTEtMS0yLTItMnpNMyAyMWg4di02SDF2NGMwIDEuMS45IDIgMiAyek0zIDdIMXYyaDJWN3ptMTIgMTJoLTJ2Mmgydi0yem00LTE2aC0ydjJoMlYzem0wIDE2aC0ydjJoMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptMCA4SDF2Mmgydi0yem04LThIOXYyaDJWM3pNNyAzSDV2MmgyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1hcy1wZGYiPjxwYXRoIGQ9Ik0yMCAySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTguNSA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41SDl2Mkg3LjVWN0gxMGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem01IDJjMCAuODMtLjY3IDEuNS0xLjUgMS41aC0yLjVWN0gxNWMuODMgMCAxLjUuNjcgMS41IDEuNXYzem00LTNIMTl2MWgxLjVWMTFIMTl2MmgtMS41VjdoM3YxLjV6TTkgOS41aDF2LTFIOXYxek00IDZIMnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNnptMTAgNS41aDF2LTNoLTF2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3J0cmFpdCI+PHBhdGggZD0iTTEyIDEyLjI1YzEuMjQgMCAyLjI1LTEuMDEgMi4yNS0yLjI1UzEzLjI0IDcuNzUgMTIgNy43NSA5Ljc1IDguNzYgOS43NSAxMHMxLjAxIDIuMjUgMi4yNSAyLjI1em00LjUgNGMwLTEuNS0zLTIuMjUtNC41LTIuMjVzLTQuNS43NS00LjUgMi4yNVYxN2g5di0uNzV6TTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtcmVkLWV5ZSI+PHBhdGggZD0iTTEyIDQuNUM3IDQuNSAyLjczIDcuNjEgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41czkuMjctMy4xMSAxMS03LjVjLTEuNzMtNC4zOS02LTcuNS0xMS03LjV6TTEyIDE3Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXptMC04Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtOTAtZGVncmVlcy1jY3ciPjxwYXRoIGQ9Ik03LjM0IDYuNDFMLjg2IDEyLjlsNi40OSA2LjQ4IDYuNDktNi40OC02LjUtNi40OXpNMy42OSAxMi45bDMuNjYtMy42NkwxMSAxMi45bC0zLjY2IDMuNjYtMy42NS0zLjY2em0xNS42Ny02LjI2QzE3LjYxIDQuODggMTUuMyA0IDEzIDRWLjc2TDguNzYgNSAxMyA5LjI0VjZjMS43OSAwIDMuNTguNjggNC45NSAyLjA1IDIuNzMgMi43MyAyLjczIDcuMTcgMCA5LjlDMTYuNTggMTkuMzIgMTQuNzkgMjAgMTMgMjBjLS45NyAwLTEuOTQtLjIxLTIuODQtLjYxbC0xLjQ5IDEuNDlDMTAuMDIgMjEuNjIgMTEuNTEgMjIgMTMgMjJjMi4zIDAgNC42MS0uODggNi4zNi0yLjY0IDMuNTItMy41MSAzLjUyLTkuMjEgMC0xMi43MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3RhdGUtbGVmdCI+PHBhdGggZD0iTTcuMTEgOC41M0w1LjcgNy4xMUM0LjggOC4yNyA0LjI0IDkuNjEgNC4wNyAxMWgyLjAyYy4xNC0uODcuNDktMS43MiAxLjAyLTIuNDd6TTYuMDkgMTNINC4wN2MuMTcgMS4zOS43MiAyLjczIDEuNjIgMy44OWwxLjQxLTEuNDJjLS41Mi0uNzUtLjg3LTEuNTktMS4wMS0yLjQ3em0xLjAxIDUuMzJjMS4xNi45IDIuNTEgMS40NCAzLjkgMS42MVYxNy45Yy0uODctLjE1LTEuNzEtLjQ5LTIuNDYtMS4wM0w3LjEgMTguMzJ6TTEzIDQuMDdWMUw4LjQ1IDUuNTUgMTMgMTBWNi4wOWMyLjg0LjQ4IDUgMi45NCA1IDUuOTFzLTIuMTYgNS40My01IDUuOTF2Mi4wMmMzLjk1LS40OSA3LTMuODUgNy03Ljkzcy0zLjA1LTcuNDQtNy03LjkzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1yaWdodCI+PHBhdGggZD0iTTE1LjU1IDUuNTVMMTEgMXYzLjA3QzcuMDYgNC41NiA0IDcuOTIgNCAxMnMzLjA1IDcuNDQgNyA3Ljkzdi0yLjAyYy0yLjg0LS40OC01LTIuOTQtNS01LjkxczIuMTYtNS40MyA1LTUuOTFWMTBsNC41NS00LjQ1ek0xOS45MyAxMWMtLjE3LTEuMzktLjcyLTIuNzMtMS42Mi0zLjg5bC0xLjQyIDEuNDJjLjU0Ljc1Ljg4IDEuNiAxLjAyIDIuNDdoMi4wMnpNMTMgMTcuOXYyLjAyYzEuMzktLjE3IDIuNzQtLjcxIDMuOS0xLjYxbC0xLjQ0LTEuNDRjLS43NS41NC0xLjU5Ljg5LTIuNDYgMS4wM3ptMy44OS0yLjQybDEuNDIgMS40MWMuOS0xLjE2IDEuNDUtMi41IDEuNjItMy44OWgtMi4wMmMtLjE0Ljg3LS40OCAxLjcyLTEuMDIgMi40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzbGlkZXNob3ciPjxwYXRoIGQ9Ik0xMCA4djhsNS00LTUtNHptOS01SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RyYWlnaHRlbiI+PHBhdGggZD0iTTIxIDZIM2MtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBIM1Y4aDJ2NGgyVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0eWxlIj48cGF0aCBkPSJNMi41MyAxOS42NWwxLjM0LjU2di05LjAzbC0yLjQzIDUuODZjLS40MSAxLjAyLjA4IDIuMTkgMS4wOSAyLjYxem0xOS41LTMuN0wxNy4wNyAzLjk4Yy0uMzEtLjc1LTEuMDQtMS4yMS0xLjgxLTEuMjMtLjI2IDAtLjUzLjA0LS43OS4xNUw3LjEgNS45NWMtLjc1LjMxLTEuMjEgMS4wMy0xLjIzIDEuOC0uMDEuMjcuMDQuNTQuMTUuOGw0Ljk2IDExLjk3Yy4zMS43NiAxLjA1IDEuMjIgMS44MyAxLjIzLjI2IDAgLjUyLS4wNS43Ny0uMTVsNy4zNi0zLjA1YzEuMDItLjQyIDEuNTEtMS41OSAxLjA5LTIuNnpNNy44OCA4Ljc1Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0yIDExYzAgMS4xLjkgMiAyIDJoMS40NWwtMy40NS04LjM0djYuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dpdGNoLWNhbWVyYSI+PHBhdGggZD0iTTIwIDRoLTMuMTdMMTUgMkg5TDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS01IDExLjVWMTNIOXYyLjVMNS41IDEyIDkgOC41VjExaDZWOC41bDMuNSAzLjUtMy41IDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtdmlkZW8iPjxwYXRoIGQ9Ik0xOCA5LjVWNmMwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDE0Yy41NSAwIDEtLjQ1IDEtMXYtMy41bDQgNHYtMTNsLTQgNHptLTUgNlYxM0g3djIuNUwzLjUgMTIgNyA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhZy1mYWNlcyI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptMy41LTljLjgzIDAgMS41LS42NyAxLjUtMS41UzE2LjMzIDggMTUuNSA4IDE0IDguNjcgMTQgOS41cy42NyAxLjUgMS41IDEuNXptLTcgMGMuODMgMCAxLjUtLjY3IDEuNS0xLjVTOS4zMyA4IDguNSA4IDcgOC42NyA3IDkuNSA3LjY3IDExIDguNSAxMXptMy41IDYuNWMyLjMzIDAgNC4zMS0xLjQ2IDUuMTEtMy41SDYuODljLjggMi4wNCAyLjc4IDMuNSA1LjExIDMuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0ZXh0dXJlIj48cGF0aCBkPSJNMTkuNTEgMy4wOEwzLjA4IDE5LjUxYy4wOS4zNC4yNy42NS41MS45LjI1LjI0LjU2LjQyLjkuNTFMMjAuOTMgNC40OWMtLjE5LS42OS0uNzMtMS4yMy0xLjQyLTEuNDF6TTExLjg4IDNMMyAxMS44OHYyLjgzTDE0LjcxIDNoLTIuODN6TTUgM2MtMS4xIDAtMiAuOS0yIDJ2Mmw0LTRINXptMTQgMThjLjU1IDAgMS4wNS0uMjIgMS40MS0uNTkuMzctLjM2LjU5LS44Ni41OS0xLjQxdi0ybC00IDRoMnptLTkuNzEgMGgyLjgzTDIxIDEyLjEyVjkuMjlMOS4yOSAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lbGFwc2UiPjxwYXRoIGQ9Ik0xNi4yNCA3Ljc2QzE1LjA3IDYuNTkgMTMuNTQgNiAxMiA2djZsLTQuMjQgNC4yNGMyLjM0IDIuMzQgNi4xNCAyLjM0IDguNDkgMCAyLjM0LTIuMzQgMi4zNC02LjE0LS4wMS04LjQ4ek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lciI+PHBhdGggZD0iTTE1IDFIOXYyaDZWMXptLTQgMTNoMlY4aC0ydjZ6bTguMDMtNi42MWwxLjQyLTEuNDJjLS40My0uNTEtLjktLjk5LTEuNDEtMS40MWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAyIDkgOSA5IDktNC4wMyA5LTljMC0yLjEyLS43NC00LjA3LTEuOTctNS42MXpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTEwIj48cGF0aCBkPSJNMCA3LjcyVjkuNGwzLTFWMThoMlY2aC0uMjVMMCA3Ljcyem0yMy43OCA2LjY1Yy0uMTQtLjI4LS4zNS0uNTMtLjYzLS43NC0uMjgtLjIxLS42MS0uMzktMS4wMS0uNTNzLS44NS0uMjctMS4zNS0uMzhjLS4zNS0uMDctLjY0LS4xNS0uODctLjIzLS4yMy0uMDgtLjQxLS4xNi0uNTUtLjI1LS4xNC0uMDktLjIzLS4xOS0uMjgtLjMtLjA1LS4xMS0uMDgtLjI0LS4wOC0uMzkgMC0uMTQuMDMtLjI4LjA5LS40MS4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTlDMjEuNDkgOS4wNyAyMSA5IDIwLjQ2IDljLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OS4yMy45NmMuMTUuMjguMzYuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnptLTkuOTYtNy4zMmMtLjM0LS40LS43NS0uNy0xLjIzLS44OC0uNDctLjE4LTEuMDEtLjI3LTEuNTktLjI3LS41OCAwLTEuMTEuMDktMS41OS4yNy0uNDguMTgtLjg5LjQ3LTEuMjMuODgtLjM0LjQxLS42LjkzLS43OSAxLjU5LS4xOC42NS0uMjggMS40NS0uMjggMi4zOXYxLjkyYzAgLjk0LjA5IDEuNzQuMjggMi4zOS4xOS42Ni40NSAxLjE5LjggMS42LjM0LjQxLjc1LjcxIDEuMjMuODkuNDguMTggMS4wMS4yOCAxLjU5LjI4LjU5IDAgMS4xMi0uMDkgMS41OS0uMjguNDgtLjE4Ljg4LS40OCAxLjIyLS44OS4zNC0uNDEuNi0uOTQuNzgtMS42LjE4LS42NS4yOC0xLjQ1LjI4LTIuMzl2LTEuOTJjMC0uOTQtLjA5LTEuNzQtLjI4LTIuMzktLjE4LS42Ni0uNDQtMS4xOS0uNzgtMS41OXptLS45MiA2LjE3YzAgLjYtLjA0IDEuMTEtLjEyIDEuNTMtLjA4LjQyLS4yLjc2LS4zNiAxLjAyLS4xNi4yNi0uMzYuNDUtLjU5LjU3LS4yMy4xMi0uNTEuMTgtLjgyLjE4LS4zIDAtLjU4LS4wNi0uODItLjE4cy0uNDQtLjMxLS42LS41N2MtLjE2LS4yNi0uMjktLjYtLjM4LTEuMDItLjA5LS40Mi0uMTMtLjkzLS4xMy0xLjUzdi0yLjVjMC0uNi4wNC0xLjExLjEzLTEuNTIuMDktLjQxLjIxLS43NC4zOC0xIC4xNi0uMjUuMzYtLjQzLjYtLjU1LjI0LS4xMS41MS0uMTcuODEtLjE3LjMxIDAgLjU4LjA2LjgxLjE3LjI0LjExLjQ0LjI5LjYuNTUuMTYuMjUuMjkuNTguMzcuOTkuMDguNDEuMTMuOTIuMTMgMS41MnYyLjUxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyLTMiPjxwYXRoIGQ9Ik0xMS42MSAxMi45N2MtLjE2LS4yNC0uMzYtLjQ2LS42Mi0uNjUtLjI1LS4xOS0uNTYtLjM1LS45My0uNDguMy0uMTQuNTctLjMuOC0uNS4yMy0uMi40Mi0uNDEuNTctLjY0LjE1LS4yMy4yNy0uNDYuMzQtLjcxLjA4LS4yNC4xMS0uNDkuMTEtLjczIDAtLjU1LS4wOS0xLjA0LS4yOC0xLjQ2LS4xOC0uNDItLjQ0LS43Ny0uNzgtMS4wNi0uMzMtLjI4LS43My0uNS0xLjItLjY0LS40NS0uMTMtLjk3LS4yLTEuNTMtLjItLjU1IDAtMS4wNi4wOC0xLjUyLjI0LS40Ny4xNy0uODcuNC0xLjIuNjktLjMzLjI5LS42LjYzLS43OCAxLjAzLS4yLjM5LS4yOS44My0uMjkgMS4yOWgxLjk4YzAtLjI2LjA1LS40OS4xNC0uNjkuMDktLjIuMjItLjM4LjM4LS41Mi4xNy0uMTQuMzYtLjI1LjU4LS4zMy4yMi0uMDguNDYtLjEyLjczLS4xMi42MSAwIDEuMDYuMTYgMS4zNi40Ny4zLjMxLjQ0Ljc1LjQ0IDEuMzIgMCAuMjctLjA0LjUyLS4xMi43NC0uMDguMjItLjIxLjQxLS4zOC41Ny0uMTcuMTYtLjM4LjI4LS42My4zNy0uMjUuMDktLjU1LjEzLS44OS4xM0g2LjcydjEuNTdINy45Yy4zNCAwIC42NC4wNC45MS4xMS4yNy4wOC41LjE5LjY5LjM1LjE5LjE2LjM0LjM2LjQ0LjYxLjEuMjQuMTYuNTQuMTYuODcgMCAuNjItLjE4IDEuMDktLjUzIDEuNDItLjM1LjMzLS44NC40OS0xLjQ1LjQ5LS4yOSAwLS41Ni0uMDQtLjgtLjEzLS4yNC0uMDgtLjQ0LS4yLS42MS0uMzYtLjE3LS4xNi0uMy0uMzQtLjM5LS41Ni0uMDktLjIyLS4xNC0uNDYtLjE0LS43Mkg0LjE5YzAgLjU1LjExIDEuMDMuMzIgMS40NS4yMS40Mi41Ljc3Ljg2IDEuMDVzLjc3LjQ5IDEuMjQuNjMuOTYuMjEgMS40OC4yMWMuNTcgMCAxLjA5LS4wOCAxLjU4LS4yMy40OS0uMTUuOTEtLjM4IDEuMjYtLjY4LjM2LS4zLjY0LS42Ni44NC0xLjEuMi0uNDMuMy0uOTMuMy0xLjQ4IDAtLjI5LS4wNC0uNTgtLjExLS44Ni0uMDgtLjI1LS4xOS0uNTEtLjM1LS43NnptOS4yNiAxLjRjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOXMuMDMtLjI4LjA5LS40MWMuMDYtLjEzLjE1LS4yNS4yNy0uMzQuMTItLjEuMjctLjE4LjQ1LS4yNHMuNC0uMDkuNjQtLjA5Yy4yNSAwIC40Ny4wNC42Ni4xMS4xOS4wNy4zNS4xNy40OC4yOS4xMy4xMi4yMi4yNi4yOS40Mi4wNi4xNi4xLjMyLjEuNDloMS45NWMwLS4zOS0uMDgtLjc1LS4yNC0xLjA5LS4xNi0uMzQtLjM5LS42My0uNjktLjg4LS4zLS4yNS0uNjYtLjQ0LTEuMDktLjU5LS40My0uMTUtLjkyLS4yMi0xLjQ2LS4yMi0uNTEgMC0uOTguMDctMS4zOS4yMS0uNDEuMTQtLjc3LjMzLTEuMDYuNTctLjI5LjI0LS41MS41Mi0uNjcuODQtLjE2LjMyLS4yMy42NS0uMjMgMS4wMXMuMDguNjguMjMuOTZjLjE1LjI4LjM3LjUyLjY0LjczLjI3LjIxLjYuMzguOTguNTMuMzguMTQuODEuMjYgMS4yNy4zNi4zOS4wOC43MS4xNy45NS4yNnMuNDMuMTkuNTcuMjljLjEzLjEuMjIuMjIuMjcuMzQuMDUuMTIuMDcuMjUuMDcuMzkgMCAuMzItLjEzLjU3LS40Ljc3LS4yNy4yLS42Ni4yOS0xLjE3LjI5LS4yMiAwLS40My0uMDItLjY0LS4wOC0uMjEtLjA1LS40LS4xMy0uNTYtLjI0LS4xNy0uMTEtLjMtLjI2LS40MS0uNDQtLjExLS4xOC0uMTctLjQxLS4xOC0uNjdoLTEuODljMCAuMzYuMDguNzEuMjQgMS4wNS4xNi4zNC4zOS42NS43LjkzLjMxLjI3LjY5LjQ5IDEuMTUuNjYuNDYuMTcuOTguMjUgMS41OC4yNS41MyAwIDEuMDEtLjA2IDEuNDQtLjE5LjQzLS4xMy44LS4zMSAxLjExLS41NC4zMS0uMjMuNTQtLjUxLjcxLS44My4xNy0uMzIuMjUtLjY3LjI1LTEuMDYtLjAyLS40LS4wOS0uNzQtLjI0LTEuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItb2ZmIj48cGF0aCBkPSJNMTkuMDQgNC41NWwtMS40MiAxLjQyQzE2LjA3IDQuNzQgMTQuMTIgNCAxMiA0Yy0xLjgzIDAtMy41My41NS00Ljk1IDEuNDhsMS40NiAxLjQ2QzkuNTMgNi4zNSAxMC43MyA2IDEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAxLjI3LS4zNSAyLjQ3LS45NCAzLjQ5bDEuNDUgMS40NUMyMC40NSAxNi41MyAyMSAxNC44MyAyMSAxM2MwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxbDEuNDItMS40Mi0xLjQxLTEuNDJ6TTE1IDFIOXYyaDZWMXptLTQgOC40NGwyIDJWOGgtMnYxLjQ0ek0zLjAyIDRMMS43NSA1LjI3IDQuNSA4LjAzQzMuNTUgOS40NSAzIDExLjE2IDMgMTNjMCA0Ljk3IDQuMDIgOSA5IDkgMS44NCAwIDMuNTUtLjU1IDQuOTgtMS41bDIuNSAyLjUgMS4yNy0xLjI3LTcuNzEtNy43MUwzLjAyIDR6TTEyIDIwYy0zLjg3IDAtNy0zLjEzLTctNyAwLTEuMjguMzUtMi40OC45NS0zLjUybDkuNTYgOS41NmMtMS4wMy42MS0yLjIzLjk2LTMuNTEuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9uYWxpdHkiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMSAxNy45M2MtMy45NC0uNDktNy0zLjg1LTctNy45M3MzLjA1LTcuNDQgNy03LjkzdjE1Ljg2em0yLTE1Ljg2YzEuMDMuMTMgMiAuNDUgMi44Ny45M0gxM3YtLjkzek0xMyA3aDUuMjRjLjI1LjMxLjQ4LjY1LjY4IDFIMTNWN3ptMCAzaDYuNzRjLjA4LjMzLjE1LjY2LjE5IDFIMTN2LTF6bTAgOS45M1YxOWgyLjg3Yy0uODcuNDgtMS44NC44LTIuODcuOTN6TTE4LjI0IDE3SDEzdi0xaDUuOTJjLS4yLjM1LS40My42OS0uNjggMXptMS41LTNIMTN2LTFoNi45M2MtLjA0LjM0LS4xMS42Ny0uMTkgMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2Zvcm0iPjxwYXRoIGQ9Ik0yMiAxOHYtMkg4VjRoMkw3IDEgNCA0aDJ2MkgydjJoNHY4YzAgMS4xLjkgMiAyIDJoOHYyaC0ybDMgMyAzLTNoLTJ2LTJoNHpNMTAgOGg2djZoMlY4YzAtMS4xLS45LTItMi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVuZSI+PHBhdGggZD0iTTMgMTd2Mmg2di0ySDN6TTMgNXYyaDEwVjVIM3ptMTAgMTZ2LTJoOHYtMmgtOHYtMmgtMnY2aDJ6TTcgOXYySDN2Mmg0djJoMlY5SDd6bTE0IDR2LTJIMTF2MmgxMHptLTYtNGgyVjdoNFY1aC00VjNoLTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbWZ5Ij48cGF0aCBkPSJNMyA5aDRWNUgzdjR6bTAgNWg0di00SDN2NHptNSAwaDR2LTRIOHY0em01IDBoNHYtNGgtNHY0ek04IDloNFY1SDh2NHptNS00djRoNFY1aC00em01IDloNHYtNGgtNHY0ek0zIDE5aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6bTUgMGg0di00aC00djR6bTAtMTR2NGg0VjVoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jb21wYWN0Ij48cGF0aCBkPSJNMyAxOWg2di03SDN2N3ptNyAwaDEydi03SDEwdjd6TTMgNXY2aDE5VjVIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWduZXR0ZSI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tOSAxNWMtNC40MiAwLTgtMi42OS04LTZzMy41OC02IDgtNiA4IDIuNjkgOCA2LTMuNTggNi04IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItYXV0byI+PHBhdGggZD0iTTYuODUgMTIuNjVoMi4zTDggOWwtMS4xNSAzLjY1ek0yMiA3bC0xLjIgNi4yOUwxOS4zIDdoLTEuNmwtMS40OSA2LjI5TDE1IDdoLS43NkMxMi43NyA1LjE3IDEwLjUzIDQgOCA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4YzMuMTMgMCA1Ljg0LTEuODEgNy4xNS00LjQzbC4xLjQzSDE3bDEuNS02LjFMMjAgMTZoMS43NWwyLjA1LTlIMjJ6bS0xMS43IDlsLS43LTJINi40bC0uNyAySDMuOEw3IDdoMmwzLjIgOWgtMS45eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWNsb3VkeSI+PHBhdGggZD0iTTE5LjM2IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjQtNC45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1pbmNhbmRlc2NlbnQiPjxwYXRoIGQ9Ik0zLjU1IDE4LjU0bDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6TTExIDIyLjQ1aDJWMTkuNWgtMnYyLjk1ek00IDEwLjVIMXYyaDN2LTJ6bTExLTQuMTlWMS41SDl2NC44MUM3LjIxIDcuMzUgNiA5LjI4IDYgMTEuNWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMi4yMi0xLjIxLTQuMTUtMy01LjE5em01IDQuMTl2Mmgzdi0yaC0zem0tMi43NiA3LjY2bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWlyaWRlc2NlbnQiPjxwYXRoIGQ9Ik01IDE0LjVoMTR2LTZINXY2ek0xMSAuNTVWMy41aDJWLjU1aC0yem04LjA0IDIuNWwtMS43OSAxLjc5IDEuNDEgMS40MSAxLjgtMS43OS0xLjQyLTEuNDF6TTEzIDIyLjQ1VjE5LjVoLTJ2Mi45NWgyem03LjQ1LTMuOTFsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuOCAxLjQyLTEuNDJ6TTMuNTUgNC40NmwxLjc5IDEuNzkgMS40MS0xLjQxLTEuNzktMS43OS0xLjQxIDEuNDF6bTEuNDEgMTUuNDlsMS43OS0xLjgtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Itc3VubnkiPjxwYXRoIGQ9Ik02Ljc2IDQuODRsLTEuOC0xLjc5LTEuNDEgMS40MSAxLjc5IDEuNzkgMS40Mi0xLjQxek00IDEwLjVIMXYyaDN2LTJ6bTktOS45NWgtMlYzLjVoMlYuNTV6bTcuNDUgMy45MWwtMS40MS0xLjQxLTEuNzkgMS43OSAxLjQxIDEuNDEgMS43OS0xLjc5em0tMy4yMSAxMy43bDEuNzkgMS44IDEuNDEtMS40MS0xLjgtMS43OS0xLjQgMS40ek0yMCAxMC41djJoM3YtMmgtM3ptLTgtNWMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6bS0xIDE2Ljk1aDJWMTkuNWgtMnYyLjk1em0tNy40NS0zLjkxbDEuNDEgMS40MSAxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjh6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZGJlLmNvbnRlbnQpO3ZhciBtYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJpY29ucyIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iM2Qtcm90YXRpb24iPjxwYXRoIGQ9Ik03LjUyIDIxLjQ4QzQuMjUgMTkuOTQgMS45MSAxNi43NiAxLjU1IDEzSC4wNUMuNTYgMTkuMTYgNS43MSAyNCAxMiAyNGwuNjYtLjAzLTMuODEtMy44MS0xLjMzIDEuMzJ6bS44OS02LjUyYy0uMTkgMC0uMzctLjAzLS41Mi0uMDgtLjE2LS4wNi0uMjktLjEzLS40LS4yNC0uMTEtLjEtLjItLjIyLS4yNi0uMzctLjA2LS4xNC0uMDktLjMtLjA5LS40N2gtMS4zYzAgLjM2LjA3LjY4LjIxLjk1LjE0LjI3LjMzLjUuNTYuNjkuMjQuMTguNTEuMzIuODIuNDEuMy4xLjYyLjE1Ljk2LjE1LjM3IDAgLjcyLS4wNSAxLjAzLS4xNS4zMi0uMS42LS4yNS44My0uNDRzLjQyLS40My41NS0uNzJjLjEzLS4yOS4yLS42MS4yLS45NyAwLS4xOS0uMDItLjM4LS4wNy0uNTYtLjA1LS4xOC0uMTItLjM1LS4yMy0uNTEtLjEtLjE2LS4yNC0uMy0uNC0uNDMtLjE3LS4xMy0uMzctLjIzLS42MS0uMzEuMi0uMDkuMzctLjIuNTItLjMzLjE1LS4xMy4yNy0uMjcuMzctLjQyLjEtLjE1LjE3LS4zLjIyLS40Ni4wNS0uMTYuMDctLjMyLjA3LS40OCAwLS4zNi0uMDYtLjY4LS4xOC0uOTYtLjEyLS4yOC0uMjktLjUxLS41MS0uNjktLjItLjE5LS40Ny0uMzMtLjc3LS40M0M5LjEgOC4wNSA4Ljc2IDggOC4zOSA4Yy0uMzYgMC0uNjkuMDUtMSAuMTYtLjMuMTEtLjU3LjI2LS43OS40NS0uMjEuMTktLjM4LjQxLS41MS42Ny0uMTIuMjYtLjE4LjU0LS4xOC44NWgxLjNjMC0uMTcuMDMtLjMyLjA5LS40NXMuMTQtLjI1LjI1LS4zNGMuMTEtLjA5LjIzLS4xNy4zOC0uMjIuMTUtLjA1LjMtLjA4LjQ4LS4wOC40IDAgLjcuMS44OS4zMS4xOS4yLjI5LjQ5LjI5Ljg2IDAgLjE4LS4wMy4zNC0uMDguNDktLjA1LjE1LS4xNC4yNy0uMjUuMzctLjExLjEtLjI1LjE4LS40MS4yNC0uMTYuMDYtLjM2LjA5LS41OC4wOUg3LjV2MS4wM2guNzdjLjIyIDAgLjQyLjAyLjYuMDdzLjMzLjEzLjQ1LjIzYy4xMi4xMS4yMi4yNC4yOS40LjA3LjE2LjEuMzUuMS41NyAwIC40MS0uMTIuNzItLjM1LjkzLS4yMy4yMy0uNTUuMzMtLjk1LjMzem04LjU1LTUuOTJjLS4zMi0uMzMtLjctLjU5LTEuMTQtLjc3LS40My0uMTgtLjkyLS4yNy0xLjQ2LS4yN0gxMnY4aDIuM2MuNTUgMCAxLjA2LS4wOSAxLjUxLS4yNy40NS0uMTguODQtLjQzIDEuMTYtLjc2LjMyLS4zMy41Ny0uNzMuNzQtMS4xOS4xNy0uNDcuMjYtLjk5LjI2LTEuNTd2LS40YzAtLjU4LS4wOS0xLjEtLjI2LTEuNTctLjE4LS40Ny0uNDMtLjg3LS43NS0xLjJ6bS0uMzkgMy4xNmMwIC40Mi0uMDUuNzktLjE0IDEuMTMtLjEuMzMtLjI0LjYyLS40My44NS0uMTkuMjMtLjQzLjQxLS43MS41My0uMjkuMTItLjYyLjE4LS45OS4xOGgtLjkxVjkuMTJoLjk3Yy43MiAwIDEuMjcuMjMgMS42NC42OS4zOC40Ni41NyAxLjEyLjU3IDEuOTl2LjR6TTEyIDBsLS42Ni4wMyAzLjgxIDMuODEgMS4zMy0xLjMzYzMuMjcgMS41NSA1LjYxIDQuNzIgNS45NiA4LjQ4aDEuNUMyMy40NCA0Ljg0IDE4LjI5IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmlsaXR5Ij48cGF0aCBkPSJNMTIgMmMxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTkgN2gtNnYxM2gtMnYtNmgtMnY2SDlWOUgzVjdoMTh2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2Nlc3NpYmxlIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjQiIHI9IjIiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xOSAxM3YtMmMtMS41NC4wMi0zLjA5LS43NS00LjA3LTEuODNsLTEuMjktMS40M2MtLjE3LS4xOS0uMzgtLjM0LS42MS0uNDUtLjAxIDAtLjAxLS4wMS0uMDItLjAxSDEzYy0uMzUtLjItLjc1LS4zLTEuMTktLjI2QzEwLjc2IDcuMTEgMTAgOC4wNCAxMCA5LjA5VjE1YzAgMS4xLjkgMiAyIDJoNXY1aDJ2LTUuNWMwLTEuMS0uOS0yLTItMmgtM3YtMy40NWMxLjI5IDEuMDcgMy4yNSAxLjk0IDUgMS45NXptLTYuMTcgNWMtLjQxIDEuMTYtMS41MiAyLTIuODMgMi0xLjY2IDAtMy0xLjM0LTMtMyAwLTEuMzEuODQtMi40MSAyLTIuODNWMTIuMWMtMi4yOC40Ni00IDIuNDgtNCA0LjkgMCAyLjc2IDIuMjQgNSA1IDUgMi40MiAwIDQuNDQtMS43MiA0LjktNGgtMi4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2UiPjxwYXRoIGQ9Ik00IDEwdjdoM3YtN0g0em02IDB2N2gzdi03aC0zek0yIDIyaDE5di0zSDJ2M3ptMTQtMTJ2N2gzdi03aC0zem0tNC41LTlMMiA2djJoMTlWNmwtOS41LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWNjb3VudC1iYWxhbmNlLXdhbGxldCI+PHBhdGggZD0iTTIxIDE4djFjMCAxLjEtLjkgMi0yIDJINWMtMS4xMSAwLTItLjktMi0yVjVjMC0xLjEuODktMiAyLTJoMTRjMS4xIDAgMiAuOSAyIDJ2MWgtOWMtMS4xMSAwLTIgLjktMiAydjhjMCAxLjEuODkgMiAyIDJoOXptLTktMmgxMFY4SDEydjh6bTQtMi41Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJveCI+PHBhdGggZD0iTTMgNXYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0ySDVjLTEuMTEgMC0yIC45LTIgMnptMTIgNGMwIDEuNjYtMS4zNCAzLTMgM3MtMy0xLjM0LTMtMyAxLjM0LTMgMy0zIDMgMS4zNCAzIDN6bS05IDhjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjFINnYtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgM2MxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTAgMTQuMmMtMi41IDAtNC43MS0xLjI4LTYtMy4yMi4wMy0xLjk5IDQtMy4wOCA2LTMuMDggMS45OSAwIDUuOTcgMS4wOSA2IDMuMDgtMS4yOSAxLjk0LTMuNSAzLjIyLTYgMy4yMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQiPjxwYXRoIGQ9Ik0xOSAxM2gtNnY2aC0ydi02SDV2LTJoNlY1aDJ2Nmg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWFsZXJ0Ij48cGF0aCBkPSJNMTAuMDEgMjEuMDFjMCAxLjEuODkgMS45OSAxLjk5IDEuOTlzMS45OS0uODkgMS45OS0xLjk5aC0zLjk4em04Ljg3LTQuMTlWMTFjMC0zLjI1LTIuMjUtNS45Ny01LjI5LTYuNjl2LS43MkMxMy41OSAyLjcxIDEyLjg4IDIgMTIgMnMtMS41OS43MS0xLjU5IDEuNTl2LjcyQzcuMzcgNS4wMyA1LjEyIDcuNzUgNS4xMiAxMXY1LjgyTDMgMTguOTRWMjBoMTh2LTEuMDZsLTIuMTItMi4xMnpNMTYgMTMuMDFoLTN2M2gtMnYtM0g4VjExaDNWOGgydjNoM3YyLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMGgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFoLTR2NGgtMnYtNEg3di0yaDRWN2gydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTExIDloMlY2aDNWNGgtM1YxaC0ydjNIOHYyaDN2M3ptLTQgOWMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnptMTAgMGMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6bS05LjgzLTMuMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy44Ni03LjAxTDE5LjQyIDRoLS4wMWwtMS4xIDItMi43NiA1SDguNTNsLS4xMy0uMjdMNi4xNiA2bC0uOTUtMi0uOTQtMkgxdjJoMmwzLjYgNy41OS0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoMTJ2LTJINy40MmMtLjEzIDAtLjI1LS4xMS0uMjUtLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLWFkZCI+PHBhdGggZD0iTTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0xLTExaC0ydjNIOHYyaDN2M2gydi0zaDN2LTJoLTNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vZmYiPjxwYXRoIGQ9Ik0xMiA2YzMuODcgMCA3IDMuMTMgNyA3IDAgLjg0LS4xNiAxLjY1LS40MyAyLjRsMS41MiAxLjUyYy41OC0xLjE5LjkxLTIuNTEuOTEtMy45MiAwLTQuOTctNC4wMy05LTktOS0xLjQxIDAtMi43My4zMy0zLjkyLjkxTDkuNiA2LjQzQzEwLjM1IDYuMTYgMTEuMTYgNiAxMiA2em0xMC0uMjhsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek0yLjkyIDIuMjlMMS42NSAzLjU3IDIuOTggNC45bC0xLjExLjkzIDEuNDIgMS40MiAxLjExLS45NC44LjhDMy44MyA4LjY5IDMgMTAuNzUgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAyLjI1IDAgNC4zMS0uODMgNS44OS0yLjJsMi4yIDIuMiAxLjI3LTEuMjdMMy44OSAzLjI3bC0uOTctLjk4em0xMy41NSAxNi4xQzE1LjI2IDE5LjM5IDEzLjcgMjAgMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS43LjYxLTMuMjYgMS42MS00LjQ3bDkuODYgOS44NnpNOC4wMiAzLjI4TDYuNiAxLjg2bC0uODYuNzEgMS40MiAxLjQyLjg2LS43MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGFybS1vbiI+PHBhdGggZD0iTTIyIDUuNzJsLTQuNi0zLjg2LTEuMjkgMS41MyA0LjYgMy44NkwyMiA1Ljcyek03Ljg4IDMuMzlMNi42IDEuODYgMiA1LjcxbDEuMjkgMS41MyA0LjU5LTMuODV6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3em0tMS40Ni01LjQ3TDguNDEgMTIuNGwtMS4wNiAxLjA2IDMuMTggMy4xOCA2LTYtMS4wNi0xLjA2LTQuOTMgNC45NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbGwtb3V0Ij48cGF0aCBkPSJNMTYuMjEgNC4xNmw0IDR2LTR6bTQgMTJsLTQgNGg0em0tMTIgNGwtNC00djR6bS00LTEybDQtNGgtNHptMTIuOTUtLjk1Yy0yLjczLTIuNzMtNy4xNy0yLjczLTkuOSAwcy0yLjczIDcuMTcgMCA5LjkgNy4xNyAyLjczIDkuOSAwIDIuNzMtNy4xNiAwLTkuOXptLTEuMSA4LjhjLTIuMTMgMi4xMy01LjU3IDIuMTMtNy43IDBzLTIuMTMtNS41NyAwLTcuNyA1LjU3LTIuMTMgNy43IDAgMi4xMyA1LjU3IDAgNy43eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFuZHJvaWQiPjxwYXRoIGQ9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgydjMuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjVWMTloMWMuNTUgMCAxLS40NSAxLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAtMS41LjY3LTEuNSAxLjV2N2MwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjV2LTdjMC0uODMtLjY3LTEuNS0xLjUtMS41em0tNC45Ny01Ljg0bDEuMy0xLjNjLjItLjIuMi0uNTEgMC0uNzEtLjItLjItLjUxLS4yLS43MSAwbC0xLjQ4IDEuNDhDMTMuODUgMS4yMyAxMi45NSAxIDEyIDFjLS45NiAwLTEuODYuMjMtMi42Ni42M0w3Ljg1LjE1Yy0uMi0uMi0uNTEtLjItLjcxIDAtLjIuMi0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMC0xLjk5LS45Ny0zLjc1LTIuNDctNC44NHpNMTAgNUg5VjRoMXYxem01IDBoLTFWNGgxdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5ub3VuY2VtZW50Ij48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDloLTJWNWgydjZ6bTAgNGgtMnYtMmgydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXBwcyI+PHBhdGggZD0iTTQgOGg0VjRINHY0em02IDEyaDR2LTRoLTR2NHptLTYgMGg0di00SDR2NHptMC02aDR2LTRINHY0em02IDBoNHYtNGgtNHY0em02LTEwdjRoNFY0aC00em0tNiA0aDRWNGgtNHY0em02IDZoNHYtNGgtNHY0em0wIDZoNHYtNGgtNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFyY2hpdmUiPjxwYXRoIGQ9Ik0yMC41NCA1LjIzbC0xLjM5LTEuNjhDMTguODggMy4yMSAxOC40NyAzIDE4IDNINmMtLjQ3IDAtLjg4LjIxLTEuMTYuNTVMMy40NiA1LjIzQzMuMTcgNS41NyAzIDYuMDIgMyA2LjVWMTljMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDgtLjE3LS45My0uNDYtMS4yN3pNMTIgMTcuNUw2LjUgMTJIMTB2LTJoNHYyaDMuNUwxMiAxNy41ek01LjEyIDVsLjgxLTFoMTJsLjk0IDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1iYWNrIj48cGF0aCBkPSJNMjAgMTFINy44M2w1LjU5LTUuNTlMMTIgNGwtOCA4IDggOCAxLjQxLTEuNDFMNy44MyAxM0gyMHYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kb3dud2FyZCI+PHBhdGggZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24iPjxwYXRoIGQ9Ik03IDEwbDUgNSA1LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMTJsLTQtNGg4bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJyb3ctZHJvcC11cCI+PHBhdGggZD0iTTcgMTRsNS01IDUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1mb3J3YXJkIj48cGF0aCBkPSJNMTIgNGwtMS40MSAxLjQxTDE2LjE3IDExSDR2MmgxMi4xN2wtNS41OCA1LjU5TDEyIDIwbDgtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy11cHdhcmQiPjxwYXRoIGQ9Ik00IDEybDEuNDEgMS40MUwxMSA3LjgzVjIwaDJWNy44M2w1LjU4IDUuNTlMMjAgMTJsLTgtOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNwZWN0LXJhdGlvIj48cGF0aCBkPSJNMTkgMTJoLTJ2M2gtM3YyaDV2LTV6TTcgOWgzVjdINXY1aDJWOXptMTQtNkgzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2Vzc21lbnQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxN0g3di03aDJ2N3ptNCAwaC0yVjdoMnYxMHptNCAwaC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50Ij48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIgMTRIN3YtMmg3djJ6bTMtNEg3di0yaDEwdjJ6bTAtNEg3VjdoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWluZCI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0wIDRjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTEuNGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjFWMTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1sYXRlIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNiAxNWgtMnYtMmgydjJ6bTAtNGgtMlY4aDJ2NnptLTEtOWMtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTQgMTJoLTR2M2wtNS01IDUtNXYzaDR2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXJldHVybmVkIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgMTVsLTUtNWgzVjloNHY0aDNsLTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LXR1cm5lZC1pbiI+PHBhdGggZD0iTTE5IDNoLTQuMThDMTQuNCAxLjg0IDEzLjMgMSAxMiAxYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0tMiAxNGwtNC00IDEuNDEtMS40MUwxMCAxNC4xN2w2LjU5LTYuNTlMMTggOWwtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF0dGFjaG1lbnQiPjxwYXRoIGQ9Ik0yIDEyLjVDMiA5LjQ2IDQuNDYgNyA3LjUgN0gxOGMyLjIxIDAgNCAxLjc5IDQgNHMtMS43OSA0LTQgNEg5LjVDOC4xMiAxNSA3IDEzLjg4IDcgMTIuNVM4LjEyIDEwIDkuNSAxMEgxN3YySDkuNDFjLS41NSAwLS41NSAxIDAgMUgxOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTJINy41QzUuNTcgOSA0IDEwLjU3IDQgMTIuNVM1LjU3IDE2IDcuNSAxNkgxN3YySDcuNUM0LjQ2IDE4IDIgMTUuNTQgMiAxMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImF1dG9yZW5ldyI+PHBhdGggZD0iTTEyIDZ2M2w0LTQtNC00djNjLTQuNDIgMC04IDMuNTgtOCA4IDAgMS41Ny40NiAzLjAzIDEuMjQgNC4yNkw2LjcgMTQuOGMtLjQ1LS44My0uNy0xLjc5LS43LTIuOCAwLTMuMzEgMi42OS02IDYtNnptNi43NiAxLjc0TDE3LjMgOS4yYy40NC44NC43IDEuNzkuNyAyLjggMCAzLjMxLTIuNjkgNi02IDZ2LTNsLTQgNCA0IDR2LTNjNC40MiAwIDgtMy41OCA4LTggMC0xLjU3LS40Ni0zLjAzLTEuMjQtNC4yNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJiYWNrc3BhY2UiPjxwYXRoIGQ9Ik0yMiAzSDdjLS42OSAwLTEuMjMuMzUtMS41OS44OEwwIDEybDUuNDEgOC4xMWMuMzYuNTMuOS44OSAxLjU5Ljg5aDE1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0zIDEyLjU5TDE3LjU5IDE3IDE0IDEzLjQxIDEwLjQxIDE3IDkgMTUuNTkgMTIuNTkgMTIgOSA4LjQxIDEwLjQxIDcgMTQgMTAuNTkgMTcuNTkgNyAxOSA4LjQxIDE1LjQxIDEyIDE5IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2t1cCI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTQgMTN2NGgtNHYtNEg3bDUtNSA1IDVoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmxvY2siPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek00IDEyYzAtNC40MiAzLjU4LTggOC04IDEuODUgMCAzLjU1LjYzIDQuOSAxLjY5TDUuNjkgMTYuOUM0LjYzIDE1LjU1IDQgMTMuODUgNCAxMnptOCA4Yy0xLjg1IDAtMy41NS0uNjMtNC45LTEuNjlMMTguMzEgNy4xQzE5LjM3IDguNDUgMjAgMTAuMTUgMjAgMTJjMCA0LjQyLTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYm9vayI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyayI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rbWFyay1ib3JkZXIiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnVnLXJlcG9ydCI+PHBhdGggZD0iTTIwIDhoLTIuODFjLS40NS0uNzgtMS4wNy0xLjQ1LTEuODItMS45NkwxNyA0LjQxIDE1LjU5IDNsLTIuMTcgMi4xN0MxMi45NiA1LjA2IDEyLjQ5IDUgMTIgNWMtLjQ5IDAtLjk2LjA2LTEuNDEuMTdMOC40MSAzIDcgNC40MWwxLjYyIDEuNjNDNy44OCA2LjU1IDcuMjYgNy4yMiA2LjgxIDhINHYyaDIuMDljLS4wNS4zMy0uMDkuNjYtLjA5IDF2MUg0djJoMnYxYzAgLjM0LjA0LjY3LjA5IDFINHYyaDIuODFjMS4wNCAxLjc5IDIuOTcgMyA1LjE5IDNzNC4xNS0xLjIxIDUuMTktM0gyMHYtMmgtMi4wOWMuMDUtLjMzLjA5LS42Ni4wOS0xdi0xaDJ2LTJoLTJ2LTFjMC0uMzQtLjA0LS42Ny0uMDktMUgyMFY4em0tNiA4aC00di0yaDR2MnptMC00aC00di0yaDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJidWlsZCI+PHBhdGggZD0iTTIyLjcgMTlsLTkuMS05LjFjLjktMi4zLjQtNS0xLjUtNi45LTItMi01LTIuNC03LjQtMS4zTDkgNiA2IDkgMS42IDQuN0MuNCA3LjEuOSAxMC4xIDIuOSAxMi4xYzEuOSAxLjkgNC42IDIuNCA2LjkgMS41bDkuMSA5LjFjLjQuNCAxIC40IDEuNCAwbDIuMy0yLjNjLjUtLjQuNS0xLjEuMS0xLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FjaGVkIj48cGF0aCBkPSJNMTkgOGwtNCA0aDNjMCAzLjMxLTIuNjkgNi02IDYtMS4wMSAwLTEuOTctLjI1LTIuOC0uN2wtMS40NiAxLjQ2QzguOTcgMTkuNTQgMTAuNDMgMjAgMTIgMjBjNC40MiAwIDgtMy41OCA4LThoM2wtNC00ek02IDEyYzAtMy4zMSAyLjY5LTYgNi02IDEuMDEgMCAxLjk3LjI1IDIuOC43bDEuNDYtMS40NkMxNS4wMyA0LjQ2IDEzLjU3IDQgMTIgNGMtNC40MiAwLTggMy41OC04IDhIMWw0IDQgNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWVuaGFuY2UiPjxwYXRoIGQ9Ik05IDNMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMmgtMy4xN0wxNSAzSDl6bTMgMTVjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLTFsMS4yNS0yLjc1TDE2IDEzbC0yLjc1LTEuMjVMMTIgOWwtMS4yNSAyLjc1TDggMTNsMi43NSAxLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbmNlbCI+PHBhdGggZD0iTTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTUgMTMuNTlMMTUuNTkgMTcgMTIgMTMuNDEgOC40MSAxNyA3IDE1LjU5IDEwLjU5IDEyIDcgOC40MSA4LjQxIDcgMTIgMTAuNTkgMTUuNTkgNyAxNyA4LjQxIDEzLjQxIDEyIDE3IDE1LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtZ2lmdGNhcmQiPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLW1lbWJlcnNoaXAiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMTEgMC0yIC44OS0yIDJ2MTFjMCAxLjExLjg5IDIgMiAyaDR2NWw0LTIgNCAydi01aDRjMS4xMSAwIDItLjg5IDItMlY0YzAtMS4xMS0uODktMi0yLTJ6bTAgMTNINHYtMmgxNnYyem0wLTVINFY0aDE2djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC10cmF2ZWwiPjxwYXRoIGQ9Ik0yMCA2aC0zVjRjMC0xLjExLS44OS0yLTItMkg5Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6TTkgNGg2djJIOVY0em0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoM3YyaDJWOGg2djJoMlY4aDN2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGFuZ2UtaGlzdG9yeSI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrIj48cGF0aCBkPSJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjkgMi0yVjVjMC0xLjEtLjg5LTItMi0yem0tOSAxNGwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWJveC1vdXRsaW5lLWJsYW5rIj48cGF0aCBkPSJNMTkgNXYxNEg1VjVoMTRtMC0ySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNS01IDEuNDEtMS40MUwxMCAxNC4xN2w3LjU5LTcuNTlMMTkgOGwtOSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNocm9tZS1yZWFkZXItbW9kZSI+PHBhdGggZD0iTTEzIDEyaDd2MS41aC03em0wLTIuNWg3VjExaC03em0wIDVoN1YxNmgtN3pNMjEgNEgzYy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTVoLTlWNmg5djEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsYXNzIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsZWFyIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3NlIj48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTQuNSAxNEg4Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zbC4xNC4wMUM4LjU4IDguMjggMTAuMTMgNyAxMiA3YzIuMjEgMCA0IDEuNzkgNCA0aC41YzEuMzggMCAyLjUgMS4xMiAyLjUgMi41UzE3Ljg4IDE2IDE2LjUgMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG9uZSI+PHBhdGggZD0iTTE5LjM1IDEwLjA0QzE4LjY3IDYuNTkgMTUuNjQgNCAxMiA0IDkuMTEgNCA2LjYgNS42NCA1LjM1IDguMDQgMi4zNCA4LjM2IDAgMTAuOTEgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxM2MyLjc2IDAgNS0yLjI0IDUtNSAwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMTAgMTdsLTMuNS0zLjUgMS40MS0xLjQxTDEwIDE0LjE3IDE1LjE4IDlsMS40MSAxLjQxTDEwIDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLWRvd25sb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNyAxM2wtNSA1LTUtNWgzVjloNHY0aDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtb2ZmIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDRjLTEuNDggMC0yLjg1LjQzLTQuMDEgMS4xN2wxLjQ2IDEuNDZDMTAuMjEgNi4yMyAxMS4wOCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDMgMCAxLjEzLS42NCAyLjExLTEuNTYgMi42MmwxLjQ1IDEuNDVDMjMuMTYgMTguMTYgMjQgMTYuNjggMjQgMTVjMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTMgNS4yN2wyLjc1IDIuNzRDMi41NiA4LjE1IDAgMTAuNzcgMCAxNGMwIDMuMzEgMi42OSA2IDYgNmgxMS43M2wyIDJMMjEgMjAuNzMgNC4yNyA0IDMgNS4yN3pNNy43MyAxMGw4IDhINmMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNGgxLjczeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNsb3VkLXF1ZXVlIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aC43MUM3LjM3IDcuNjkgOS40OCA2IDEyIDZjMy4wNCAwIDUuNSAyLjQ2IDUuNSA1LjV2LjVIMTljMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtdXBsb2FkIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2RlIj48cGF0aCBkPSJNOS40IDE2LjZMNC44IDEybDQuNi00LjZMOCA2bC02IDYgNiA2IDEuNC0xLjR6bTUuMiAwbDQuNi00LjYtNC42LTQuNkwxNiA2bDYgNi02IDYtMS40LTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb21wYXJlLWFycm93cyI+PHBhdGggZD0iTTkuMDEgMTRIMnYyaDcuMDF2M0wxMyAxNWwtMy45OS00djN6bTUuOTgtMXYtM0gyMlY4aC03LjAxVjVMMTEgOWwzLjk5IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jb3B5Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1jdXQiPjxwYXRoIGQ9Ik05LjY0IDcuNjRjLjIzLS41LjM2LTEuMDUuMzYtMS42NCAwLTIuMjEtMS43OS00LTQtNFMyIDMuNzkgMiA2czEuNzkgNCA0IDRjLjU5IDAgMS4xNC0uMTMgMS42NC0uMzZMMTAgMTJsLTIuMzYgMi4zNkM3LjE0IDE0LjEzIDYuNTkgMTQgNiAxNGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00YzAtLjU5LS4xMy0xLjE0LS4zNi0xLjY0TDEyIDE0bDcgN2gzdi0xTDkuNjQgNy42NHpNNiA4Yy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem0wIDEyYy0xLjEgMC0yLS44OS0yLTJzLjktMiAyLTIgMiAuODkgMiAyLS45IDItMiAyem02LTcuNWMtLjI4IDAtLjUtLjIyLS41LS41cy4yMi0uNS41LS41LjUuMjIuNS41LS4yMi41LS41LjV6TTE5IDNsLTYgNiAyIDIgNy03VjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udGVudC1wYXN0ZSI+PHBhdGggZD0iTTE5IDJoLTQuMThDMTQuNC44NCAxMy4zIDAgMTIgMGMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNyAxOEg1VjRoMnYzaDEwVjRoMnYxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb3B5cmlnaHQiPjxwYXRoIGQ9Ik0xMC4wOCAxMC44NmMuMDUtLjMzLjE2LS42Mi4zLS44N3MuMzQtLjQ2LjU5LS42MmMuMjQtLjE1LjU0LS4yMi45MS0uMjMuMjMuMDEuNDQuMDUuNjMuMTMuMi4wOS4zOC4yMS41Mi4zNnMuMjUuMzMuMzQuNTMuMTMuNDIuMTQuNjRoMS43OWMtLjAyLS40Ny0uMTEtLjktLjI4LTEuMjlzLS40LS43My0uNy0xLjAxLS42Ni0uNS0xLjA4LS42Ni0uODgtLjIzLTEuMzktLjIzYy0uNjUgMC0xLjIyLjExLTEuNy4zNHMtLjg4LjUzLTEuMi45Mi0uNTYuODQtLjcxIDEuMzZTOCAxMS4yOSA4IDExLjg3di4yN2MwIC41OC4wOCAxLjEyLjIzIDEuNjRzLjM5Ljk3LjcxIDEuMzUuNzIuNjkgMS4yLjkxIDEuMDUuMzQgMS43LjM0Yy40NyAwIC45MS0uMDggMS4zMi0uMjNzLjc3LS4zNiAxLjA4LS42My41Ni0uNTguNzQtLjk0LjI5LS43NC4zLTEuMTVoLTEuNzljLS4wMS4yMS0uMDYuNC0uMTUuNThzLS4yMS4zMy0uMzYuNDYtLjMyLjIzLS41Mi4zYy0uMTkuMDctLjM5LjA5LS42LjEtLjM2LS4wMS0uNjYtLjA4LS44OS0uMjMtLjI1LS4xNi0uNDUtLjM3LS41OS0uNjJzLS4yNS0uNTUtLjMtLjg4LS4wOC0uNjctLjA4LTF2LS4yN2MwLS4zNS4wMy0uNjguMDgtMS4wMXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlIj48cGF0aCBkPSJNMyAxNy4yNVYyMWgzLjc1TDE3LjgxIDkuOTRsLTMuNzUtMy43NUwzIDE3LjI1ek0yMC43MSA3LjA0Yy4zOS0uMzkuMzktMS4wMiAwLTEuNDFsLTIuMzQtMi4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWF0ZS1uZXctZm9sZGVyIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTEgOGgtM3YzaC0ydi0zaC0zdi0yaDNWOWgydjNoM3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyZWRpdC1jYXJkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhc2hib2FyZCI+PHBhdGggZD0iTTMgMTNoOFYzSDN2MTB6bTAgOGg4di02SDN2NnptMTAgMGg4VjExaC04djEwem0wLTE4djZoOFYzaC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRhdGUtcmFuZ2UiPjxwYXRoIGQ9Ik05IDExSDd2Mmgydi0yem00IDBoLTJ2Mmgydi0yem00IDBoLTJ2Mmgydi0yem0yLTdoLTFWMmgtMnYySDhWMkg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAyMGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOWgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLWZvcmV2ZXIiPjxwYXRoIGQ9Ik02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6bTIuNDYtNy4xMmwxLjQxLTEuNDFMMTIgMTIuNTlsMi4xMi0yLjEyIDEuNDEgMS40MUwxMy40MSAxNGwyLjEyIDIuMTItMS40MSAxLjQxTDEyIDE1LjQxbC0yLjEyIDIuMTItMS40MS0xLjQxTDEwLjU5IDE0bC0yLjEzLTIuMTJ6TTE1LjUgNGwtMS0xaC01bC0xIDFINXYyaDE0VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVsZXRlLXN3ZWVwIj48cGF0aCBkPSJNMTUgMTZoNHYyaC00em0wLThoN3YyaC03em0wIDRoNnYyaC02ek0zIDE4YzAgMS4xLjkgMiAyIDJoNmMxLjEgMCAyLS45IDItMlY4SDN2MTB6TTE0IDVoLTNsLTEtMUg2TDUgNUgydjJoMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVzY3JpcHRpb24iPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTZIOHYtMmg4djJ6bTAtNEg4di0yaDh2MnptLTMtNVYzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRucyI+PHBhdGggZD0iTTIwIDEzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6TTcgMTljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyek0yMCAzSDRjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE2Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXpNNyA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb25lIj48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUtYWxsIj48cGF0aCBkPSJNMTggN2wtMS40MS0xLjQxLTYuMzQgNi4zNCAxLjQxIDEuNDFMMTggN3ptNC4yNC0xLjQxTDExLjY2IDE2LjE3IDcuNDggMTJsLTEuNDEgMS40MUwxMS42NiAxOWwxMi0xMi0xLjQyLTEuNDF6TS40MSAxMy40MUw2IDE5bDEuNDEtMS40MUwxLjgzIDEyIC40MSAxMy40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1sYXJnZSI+PHBhdGggZD0iTTExIDUuMDhWMmMtNSAuNS05IDQuODEtOSAxMHM0IDkuNSA5IDEwdi0zLjA4Yy0zLS40OC02LTMuNC02LTYuOTJzMy02LjQ0IDYtNi45MnpNMTguOTcgMTFIMjJjLS40Ny01LTQtOC41My05LTl2My4wOEMxNiA1LjUxIDE4LjU0IDggMTguOTcgMTF6TTEzIDE4LjkyVjIyYzUtLjQ3IDguNTMtNCA5LTloLTMuMDNjLS40MyAzLTIuOTcgNS40OS01Ljk3IDUuOTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9udXQtc21hbGwiPjxwYXRoIGQ9Ik0xMSA5LjE2VjJjLTUgLjUtOSA0Ljc5LTkgMTBzNCA5LjUgOSAxMHYtNy4xNmMtMS0uNDEtMi0xLjUyLTItMi44NHMxLTIuNDMgMi0yLjg0ek0xNC44NiAxMUgyMmMtLjQ4LTQuNzUtNC04LjUzLTktOXY3LjE2YzEgLjMgMS41Mi45OCAxLjg2IDEuODR6TTEzIDE0Ljg0VjIyYzUtLjQ3IDguNTItNC4yNSA5LTloLTcuMTRjLS4zNC44Ni0uODYgMS41NC0xLjg2IDEuODR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZHJhZnRzIj48cGF0aCBkPSJNMjEuOTkgOGMwLS43Mi0uMzctMS4zNS0uOTQtMS43TDEyIDEgMi45NSA2LjNDMi4zOCA2LjY1IDIgNy4yOCAyIDh2MTBjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMmwtLjAxLTEwek0xMiAxM0wzLjc0IDcuODQgMTIgM2w4LjI2IDQuODRMMTIgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZWplY3QiPjxwYXRoIGQ9Ik01IDE3aDE0djJINXptNy0xMkw1LjMzIDE1aDEzLjM0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJlcnJvci1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTVoMnYyaC0yem0wLThoMnY2aC0yem0uOTktNUM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV1cm8tc3ltYm9sIj48cGF0aCBkPSJNMTUgMTguNWMtMi41MSAwLTQuNjgtMS40Mi01Ljc2LTMuNUgxNXYtMkg4LjU4Yy0uMDUtLjMzLS4wOC0uNjYtLjA4LTFzLjAzLS42Ny4wOC0xSDE1VjlIOS4yNEMxMC4zMiA2LjkyIDEyLjUgNS41IDE1IDUuNWMxLjYxIDAgMy4wOS41OSA0LjIzIDEuNTdMMjEgNS4zQzE5LjQxIDMuODcgMTcuMyAzIDE1IDNjLTMuOTIgMC03LjI0IDIuNTEtOC40OCA2SDN2MmgzLjA2Yy0uMDQuMzMtLjA2LjY2LS4wNiAxIDAgLjM0LjAyLjY3LjA2IDFIM3YyaDMuNTJjMS4yNCAzLjQ5IDQuNTYgNiA4LjQ4IDYgMi4zMSAwIDQuNDEtLjg3IDYtMi4zbC0xLjc4LTEuNzdjLTEuMTMuOTgtMi42IDEuNTctNC4yMiAxLjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV2ZW50Ij48cGF0aCBkPSJNMTcgMTJoLTV2NWg1di01ek0xNiAxdjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJoLTFWMWgtMnptMyAxOEg1VjhoMTR2MTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQtc2VhdCI+PHBhdGggZD0iTTQgMTh2M2gzdi0zaDEwdjNoM3YtNkg0em0xNS04aDN2M2gtM3pNMiAxMGgzdjNIMnptMTUgM0g3VjVjMC0xLjEuOS0yIDItMmg2YzEuMSAwIDIgLjkgMiAydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhpdC10by1hcHAiPjxwYXRoIGQ9Ik0xMC4wOSAxNS41OUwxMS41IDE3bDUtNS01LTUtMS40MSAxLjQxTDEyLjY3IDExSDN2Mmg5LjY3bC0yLjU4IDIuNTl6TTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjRoMlY1aDE0djE0SDV2LTRIM3Y0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwYW5kLWxlc3MiPjxwYXRoIGQ9Ik0xMiA4bC02IDYgMS40MSAxLjQxTDEyIDEwLjgzbDQuNTkgNC41OEwxOCAxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbW9yZSI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBsb3JlIj48cGF0aCBkPSJNMTIgMTAuOWMtLjYxIDAtMS4xLjQ5LTEuMSAxLjFzLjQ5IDEuMSAxLjEgMS4xYy42MSAwIDEuMS0uNDkgMS4xLTEuMXMtLjQ5LTEuMS0xLjEtMS4xek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0yLjE5IDEyLjE5TDYgMThsMy44MS04LjE5TDE4IDZsLTMuODEgOC4xOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHRlbnNpb24iPjxwYXRoIGQ9Ik0yMC41IDExSDE5VjdjMC0xLjEtLjktMi0yLTJoLTRWMy41QzEzIDIuMTIgMTEuODggMSAxMC41IDFTOCAyLjEyIDggMy41VjVINGMtMS4xIDAtMS45OS45LTEuOTkgMnYzLjhIMy41YzEuNDkgMCAyLjcgMS4yMSAyLjcgMi43cy0xLjIxIDIuNy0yLjcgMi43SDJWMjBjMCAxLjEuOSAyIDIgMmgzLjh2LTEuNWMwLTEuNDkgMS4yMS0yLjcgMi43LTIuNyAxLjQ5IDAgMi43IDEuMjEgMi43IDIuN1YyMkgxN2MxLjEgMCAyLS45IDItMnYtNGgxLjVjMS4zOCAwIDIuNS0xLjEyIDIuNS0yLjVTMjEuODggMTEgMjAuNSAxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYWNlIj48cGF0aCBkPSJNOSAxMS43NWMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6bTYgMGMtLjY5IDAtMS4yNS41Ni0xLjI1IDEuMjVzLjU2IDEuMjUgMS4yNSAxLjI1IDEuMjUtLjU2IDEuMjUtMS4yNS0uNTYtMS4yNS0xLjI1LTEuMjV6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04IDAtLjI5LjAyLS41OC4wNS0uODYgMi4zNi0xLjA1IDQuMjMtMi45OCA1LjIxLTUuMzdDMTEuMDcgOC4zMyAxNC4wNSAxMCAxNy40MiAxMGMuNzggMCAxLjUzLS4wOSAyLjI1LS4yNi4yMS43MS4zMyAxLjQ3LjMzIDIuMjYgMCA0LjQxLTMuNTkgOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUiPjxwYXRoIGQ9Ik0xMiAyMS4zNWwtMS40NS0xLjMyQzUuNCAxNS4zNiAyIDEyLjI4IDIgOC41IDIgNS40MiA0LjQyIDMgNy41IDNjMS43NCAwIDMuNDEuODEgNC41IDIuMDlDMTMuMDkgMy44MSAxNC43NiAzIDE2LjUgMyAxOS41OCAzIDIyIDUuNDIgMjIgOC41YzAgMy43OC0zLjQgNi44Ni04LjU1IDExLjU0TDEyIDIxLjM1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhdm9yaXRlLWJvcmRlciI+PHBhdGggZD0iTTE2LjUgM2MtMS43NCAwLTMuNDEuODEtNC41IDIuMDlDMTAuOTEgMy44MSA5LjI0IDMgNy41IDMgNC40MiAzIDIgNS40MiAyIDguNWMwIDMuNzggMy40IDYuODYgOC41NSAxMS41NEwxMiAyMS4zNWwxLjQ1LTEuMzJDMTguNiAxNS4zNiAyMiAxMi4yOCAyMiA4LjUgMjIgNS40MiAxOS41OCAzIDE2LjUgM3ptLTQuNCAxNS41NWwtLjEuMS0uMS0uMUM3LjE0IDE0LjI0IDQgMTEuMzkgNCA4LjUgNCA2LjUgNS41IDUgNy41IDVjMS41NCAwIDMuMDQuOTkgMy41NyAyLjM2aDEuODdDMTMuNDYgNS45OSAxNC45NiA1IDE2LjUgNWMyIDAgMy41IDEuNSAzLjUgMy41IDAgMi44OS0zLjE0IDUuNzQtNy45IDEwLjA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZlZWRiYWNrIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS03IDEyaC0ydi0yaDJ2MnptMC00aC0yVjZoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbGUtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS11cGxvYWQiPjxwYXRoIGQ9Ik05IDE2aDZ2LTZoNGwtNy03LTcgN2g0em0tNCAyaDE0djJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbGlzdCI+PHBhdGggZD0iTTEwIDE4aDR2LTJoLTR2MnpNMyA2djJoMThWNkgzem0zIDdoMTJ2LTJINnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtaW4tcGFnZSI+PHBhdGggZD0iTTIwIDE5LjU5VjhsLTYtNkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjLjQ1IDAgLjg1LS4xNSAxLjE5LS40bC00LjQzLTQuNDNjLS44LjUyLTEuNzQuODMtMi43Ni44My0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDVjMCAxLjAyLS4zMSAxLjk2LS44MyAyLjc1TDIwIDE5LjU5ek05IDEzYzAgMS42NiAxLjM0IDMgMyAzczMtMS4zNCAzLTMtMS4zNC0zLTMtMy0zIDEuMzQtMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmQtcmVwbGFjZSI+PHBhdGggZD0iTTExIDZjMS4zOCAwIDIuNjMuNTYgMy41NCAxLjQ2TDEyIDEwaDZWNGwtMi4wNSAyLjA1QzE0LjY4IDQuNzggMTIuOTMgNCAxMSA0Yy0zLjUzIDAtNi40MyAyLjYxLTYuOTIgNkg2LjFjLjQ2LTIuMjggMi40OC00IDQuOS00em01LjY0IDkuMTRjLjY2LS45IDEuMTItMS45NyAxLjI4LTMuMTRIMTUuOWMtLjQ2IDIuMjgtMi40OCA0LTQuOSA0LTEuMzggMC0yLjYzLS41Ni0zLjU0LTEuNDZMMTAgMTJINHY2bDIuMDUtMi4wNUM3LjMyIDE3LjIyIDkuMDcgMTggMTEgMThjMS41NSAwIDIuOTgtLjUxIDQuMTQtMS4zNkwyMCAyMS40OSAyMS40OSAyMGwtNC44NS00Ljg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbmdlcnByaW50Ij48cGF0aCBkPSJNMTcuODEgNC40N2MtLjA4IDAtLjE2LS4wMi0uMjMtLjA2QzE1LjY2IDMuNDIgMTQgMyAxMi4wMSAzYy0xLjk4IDAtMy44Ni40Ny01LjU3IDEuNDEtLjI0LjEzLS41NC4wNC0uNjgtLjItLjEzLS4yNC0uMDQtLjU1LjItLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjctLjA5LjE4LS4yNi4yOC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLS4yLS4wMy0uMjktLjA5LS4yMy0uMTYtLjI4LS40Ny0uMTItLjcuOTktMS40IDIuMjUtMi41IDMuNzUtMy4yN0M5Ljk4IDQuMDQgMTQgNC4wMyAxNy4xNSA1LjY1YzEuNS43NyAyLjc2IDEuODYgMy43NSAzLjI1LjE2LjIyLjExLjU0LS4xMi43LS4yMy4xNi0uNTQuMTEtLjctLjEyLS45LTEuMjYtMi4wNC0yLjI1LTMuMzktMi45NC0yLjg3LTEuNDctNi41NC0xLjQ3LTkuNC4wMS0xLjM2LjctMi41IDEuNy0zLjQgMi45Ni0uMDguMTQtLjIzLjIxLS4zOS4yMXptNi4yNSAxMi4wN2MtLjEzIDAtLjI2LS4wNS0uMzUtLjE1LS44Ny0uODctMS4zNC0xLjQzLTIuMDEtMi42NC0uNjktMS4yMy0xLjA1LTIuNzMtMS4wNS00LjM0IDAtMi45NyAyLjU0LTUuMzkgNS42Ni01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgtLjIyLjUtLjUuNXMtLjUtLjIyLS41LS41YzAtMi40Mi0yLjA5LTQuMzktNC42Ni00LjM5LTIuNTcgMC00LjY2IDEuOTctNC42NiA0LjM5IDAgMS40NC4zMiAyLjc3LjkzIDMuODUuNjQgMS4xNSAxLjA4IDEuNjQgMS44NSAyLjQyLjE5LjIuMTkuNTEgMCAuNzEtLjExLjEtLjI0LjE1LS4zNy4xNXptNy4xNy0xLjg1Yy0xLjE5IDAtMi4yNC0uMy0zLjEtLjg5LTEuNDktMS4wMS0yLjM4LTIuNjUtMi4zOC00LjM5IDAtLjI4LjIyLS41LjUtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQtLjAzIDEuMDQtLjEuMjctLjA1LjUzLjEzLjU4LjQxLjA1LjI3LS4xMy41My0uNDEuNTgtLjU3LjExLTEuMDcuMTItMS4yMS4xMnpNMTQuOTEgMjJjLS4wNCAwLS4wOS0uMDEtLjEzLS4wMi0xLjU5LS40NC0yLjYzLTEuMDMtMy43Mi0yLjEtMS40LTEuMzktMi4xNy0zLjI0LTIuMTctNS4yMiAwLTEuNjIgMS4zOC0yLjk0IDMuMDgtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LS44NyAyLjA4LTEuOTRjMC0zLjc3LTMuMjUtNi44My03LjI1LTYuODMtMi44NCAwLTUuNDQgMS41OC02LjYxIDQuMDMtLjM5LjgxLS41OSAxLjc2LS41OSAyLjggMCAuNzguMDcgMi4wMS42NyAzLjYxLjEuMjYtLjAzLjU1LS4yOS42NC0uMjYuMS0uNTUtLjA0LS42NC0uMjktLjQ5LTEuMzEtLjczLTIuNjEtLjczLTMuOTYgMC0xLjIuMjMtMi4yOS42OC0zLjI0IDEuMzMtMi43OSA0LjI4LTQuNiA3LjUxLTQuNiA0LjU1IDAgOC4yNSAzLjUxIDguMjUgNy44MyAwIDEuNjItMS4zOCAyLjk0LTMuMDggMi45NHMtMy4wOC0xLjMyLTMuMDgtMi45NGMwLTEuMDctLjkzLTEuOTQtMi4wOC0xLjk0cy0yLjA4Ljg3LTIuMDggMS45NGMwIDEuNzEuNjYgMy4zMSAxLjg3IDQuNTEuOTUuOTQgMS44NiAxLjQ2IDMuMjcgMS44NS4yNy4wNy40Mi4zNS4zNS42MS0uMDUuMjMtLjI2LjM4LS40Ny4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaXJzdC1wYWdlIj48cGF0aCBkPSJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhZyI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LWxhbmQiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTcuMTgtNS43M2w0LjM1IDEuMTYgNS4zMSAxLjQyYy44LjIxIDEuNjItLjI2IDEuODQtMS4wNi4yMS0uOC0uMjYtMS42Mi0xLjA2LTEuODRsLTUuMzEtMS40Mi0yLjc2LTkuMDJMMTAuMTIgMnY4LjI4TDUuMTUgOC45NWwtLjkzLTIuMzItMS40NS0uMzl2NS4xN2wxLjYuNDMgNS4zMSAxLjQzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaWdodC10YWtlb2ZmIj48cGF0aCBkPSJNMi41IDE5aDE5djJoLTE5em0xOS41Ny05LjM2Yy0uMjEtLjgtMS4wNC0xLjI4LTEuODQtMS4wNkwxNC45MiAxMGwtNi45LTYuNDMtMS45My41MSA0LjE0IDcuMTctNC45NyAxLjMzLTEuOTctMS41NC0xLjQ1LjM5IDEuODIgMy4xNi43NyAxLjMzIDEuNi0uNDMgNS4zMS0xLjQyIDQuMzUtMS4xNkwyMSAxMS40OWMuODEtLjIzIDEuMjgtMS4wNSAxLjA3LTEuODV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1iYWNrIj48cGF0aCBkPSJNOSA3SDd2MmgyVjd6bTAgNEg3djJoMnYtMnptMC04Yy0xLjExIDAtMiAuOS0yIDJoMlYzem00IDEyaC0ydjJoMnYtMnptNi0xMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS02IDBoLTJ2MmgyVjN6TTkgMTd2LTJIN2MwIDEuMS44OSAyIDIgMnptMTAtNGgydi0yaC0ydjJ6bTAtNGgyVjdoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6TTUgN0gzdjEyYzAgMS4xLjg5IDIgMiAyaDEydi0ySDVWN3ptMTAtMmgyVjNoLTJ2MnptMCAxMmgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpcC10by1mcm9udCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMiA0di0ySDNjMCAxLjEuODkgMiAyIDJ6TTMgOWgyVjdIM3Yyem0xMiAxMmgydi0yaC0ydjJ6bTQtMThIOWMtMS4xMSAwLTIgLjktMiAydjEwYzAgMS4xLjg5IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJIOVY1aDEwdjEwem0tOCA2aDJ2LTJoLTJ2MnptLTQgMGgydi0ySDd2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXIiPjxwYXRoIGQ9Ik0xMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJoLThsLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItb3BlbiI+PHBhdGggZD0iTTIwIDZoLThsLTItMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yem0wIDEySDRWOGgxNnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb2xkZXItc2hhcmVkIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bS01IDNjMS4xIDAgMiAuOSAyIDJzLS45IDItMiAyLTItLjktMi0yIC45LTIgMi0yem00IDhoLTh2LTFjMC0xLjMzIDIuNjctMiA0LTJzNCAuNjcgNCAydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9udC1kb3dubG9hZCI+PHBhdGggZD0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNC4wNSAxNi41bC0xLjE0LTNIOS4xN2wtMS4xMiAzSDUuOTZsNS4xMS0xM2gxLjg2bDUuMTEgMTNoLTIuMDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZm9yd2FyZCI+PHBhdGggZD0iTTEyIDhWNGw4IDgtOCA4di00SDRWOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuIj48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmdWxsc2NyZWVuLWV4aXQiPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZy10cmFuc2xhdGUiPjxwYXRoIGQ9Ik0yMCA1aC05LjEyTDEwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTNjMCAxLjEuOSAyIDIgMmg3bDEgM2g4YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6TTcuMTcgMTQuNTljLTIuMjUgMC00LjA5LTEuODMtNC4wOS00LjA5czEuODMtNC4wOSA0LjA5LTQuMDljMS4wNCAwIDEuOTkuMzcgMi43NCAxLjA3bC4wNy4wNi0xLjIzIDEuMTgtLjA2LS4wNWMtLjI5LS4yNy0uNzgtLjU5LTEuNTItLjU5LTEuMzEgMC0yLjM4IDEuMDktMi4zOCAyLjQyczEuMDcgMi40MiAyLjM4IDIuNDJjMS4zNyAwIDEuOTYtLjg3IDIuMTItMS40Nkg3LjA4VjkuOTFoMy45NWwuMDEuMDdjLjA0LjIxLjA1LjQuMDUuNjEgMCAyLjM1LTEuNjEgNC0zLjkyIDR6bTYuMDMtMS43MWMuMzMuNi43NCAxLjE4IDEuMTkgMS43bC0uNTQuNTMtLjY1LTIuMjN6bS43Ny0uNzZoLS45OWwtLjMxLTEuMDRoMy45OXMtLjM0IDEuMzEtMS41NiAyLjc0Yy0uNTItLjYyLS44OS0xLjIzLTEuMTMtMS43ek0yMSAyMGMwIC41NS0uNDUgMS0xIDFoLTdsMi0yLS44MS0yLjc3LjkyLS45MkwxNy43OSAxOGwuNzMtLjczLTIuNzEtMi42OGMuOS0xLjAzIDEuNi0yLjI1IDEuOTItMy41MUgxOXYtMS4wNGgtMy42NFY5aC0xLjA0djEuMDRoLTEuOTZMMTEuMTggNkgyMGMuNTUgMCAxIC40NSAxIDF2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2F2ZWwiPjxwYXRoIGQ9Ik0xIDIxaDEydjJIMXpNNS4yNDUgOC4wN2wyLjgzLTIuODI3IDE0LjE0IDE0LjE0Mi0yLjgyOCAyLjgyOHpNMTIuMzE3IDFsNS42NTcgNS42NTYtMi44MyAyLjgzLTUuNjU0LTUuNjZ6TTMuODI1IDkuNDg1bDUuNjU3IDUuNjU3LTIuODI4IDIuODI4LTUuNjU3LTUuNjU3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imdlc3R1cmUiPjxwYXRoIGQ9Ik00LjU5IDYuODljLjctLjcxIDEuNC0xLjM1IDEuNzEtMS4yMi41LjIgMCAxLjAzLS4zIDEuNTItLjI1LjQyLTIuODYgMy44OS0yLjg2IDYuMzEgMCAxLjI4LjQ4IDIuMzQgMS4zNCAyLjk4Ljc1LjU2IDEuNzQuNzMgMi42NC40NiAxLjA3LS4zMSAxLjk1LTEuNCAzLjA2LTIuNzcgMS4yMS0xLjQ5IDIuODMtMy40NCA0LjA4LTMuNDQgMS42MyAwIDEuNjUgMS4wMSAxLjc2IDEuNzktMy43OC42NC01LjM4IDMuNjctNS4zOCA1LjM3IDAgMS43IDEuNDQgMy4wOSAzLjIxIDMuMDkgMS42MyAwIDQuMjktMS4zMyA0LjY5LTYuMUgyMXYtMi41aC0yLjQ3Yy0uMTUtMS42NS0xLjA5LTQuMi00LjAzLTQuMi0yLjI1IDAtNC4xOCAxLjkxLTQuOTQgMi44NC0uNTguNzMtMi4wNiAyLjQ4LTIuMjkgMi43Mi0uMjUuMy0uNjguODQtMS4xMS44NC0uNDUgMC0uNzItLjgzLS4zNi0xLjkyLjM1LTEuMDkgMS40LTIuODYgMS44NS0zLjUyLjc4LTEuMTQgMS4zLTEuOTIgMS4zLTMuMjhDOC45NSAzLjY5IDcuMzEgMyA2LjQ0IDMgNS4xMiAzIDMuOTcgNCAzLjcyIDQuMjVjLS4zNi4zNi0uNjYuNjYtLjg4LjkzbDEuNzUgMS43MXptOS4yOSAxMS42NmMtLjMxIDAtLjc0LS4yNi0uNzQtLjcyIDAtLjYuNzMtMi4yIDIuODctMi43Ni0uMyAyLjY5LTEuNDMgMy40OC0yLjEzIDMuNDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2V0LWFwcCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJnaWYiPjxwYXRoIGQ9Ik0xMS41IDlIMTN2NmgtMS41ek05IDlINmMtLjYgMC0xIC41LTEgMXY0YzAgLjUuNCAxIDEgMWgzYy42IDAgMS0uNSAxLTF2LTJIOC41djEuNWgtMnYtM0gxMFYxMGMwLS41LS40LTEtMS0xem0xMCAxLjVWOWgtNC41djZIMTZ2LTJoMnYtMS41aC0ydi0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyYWRlIj48cGF0aCBkPSJNMTIgMTcuMjdMMTguMTggMjFsLTEuNjQtNy4wM0wyMiA5LjI0bC03LjE5LS42MUwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JvdXAtd29yayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTdoLTJ2LTJoMnYyem0yLjA3LTcuNzVsLS45LjkyQzEzLjQ1IDEyLjkgMTMgMTMuNSAxMyAxNWgtMnYtLjVjMC0xLjEuNDUtMi4xIDEuMTctMi44M2wxLjI0LTEuMjZjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJIOGMwLTIuMjEgMS43OS00IDQtNHM0IDEuNzkgNCA0YzAgLjg4LS4zNiAxLjY4LS45MyAyLjI1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhlbHAtb3V0bGluZSI+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGlnaGxpZ2h0LW9mZiI+PHBhdGggZD0iTTE0LjU5IDhMMTIgMTAuNTkgOS40MSA4IDggOS40MSAxMC41OSAxMiA4IDE0LjU5IDkuNDEgMTYgMTIgMTMuNDEgMTQuNTkgMTYgMTYgMTQuNTkgMTMuNDEgMTIgMTYgOS40MSAxNC41OSA4ek0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaXN0b3J5Ij48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImhvbWUiPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djZoNXYtOGgzTDEyIDMgMiAxMmgzdjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWVtcHR5Ij48cGF0aCBkPSJNNiAydjZoLjAxTDYgOC4wMSAxMCAxMmwtNCA0IC4wMS4wMUg2VjIyaDEydi01Ljk5aC0uMDFMMTggMTZsLTQtNCA0LTMuOTktLjAxLS4wMUgxOFYySDZ6bTEwIDE0LjVWMjBIOHYtMy41bDQtNCA0IDR6bS00LTVsLTQtNFY0aDh2My41bC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG91cmdsYXNzLWZ1bGwiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwIj48cGF0aCBkPSJNNC41IDExaC0yVjlIMXY2aDEuNXYtMi41aDJWMTVINlY5SDQuNXYyem0yLjUtLjVoMS41VjE1SDEwdi00LjVoMS41VjlIN3YxLjV6bTUuNSAwSDE0VjE1aDEuNXYtNC41SDE3VjloLTQuNXYxLjV6bTktMS41SDE4djZoMS41di0yaDJjLjggMCAxLjUtLjcgMS41LTEuNXYtMWMwLS44LS43LTEuNS0xLjUtMS41em0wIDIuNWgtMnYtMWgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaHR0cHMiPjxwYXRoIGQ9Ik0xOCA4aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bS02IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyem0zLjEtOUg4LjlWNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltcG9ydGFudC1kZXZpY2VzIj48cGF0aCBkPSJNMjMgMTEuMDFMMTggMTFjLS41NSAwLTEgLjQ1LTEgMXY5YzAgLjU1LjQ1IDEgMSAxaDVjLjU1IDAgMS0uNDUgMS0xdi05YzAtLjU1LS40NS0uOTktMS0uOTl6TTIzIDIwaC01di03aDV2N3pNMjAgMkgyQy44OSAyIDAgMi44OSAwIDR2MTJjMCAxLjEuODkgMiAyIDJoN3YySDd2Mmg4di0yaC0ydi0yaDJ2LTJIMlY0aDE4djVoMlY0YzAtMS4xMS0uOS0yLTItMnptLTguMDMgN0wxMSA2bC0uOTcgM0g3bDIuNDcgMS43Ni0uOTQgMi45MSAyLjQ3LTEuOCAyLjQ3IDEuOC0uOTQtMi45MUwxNSA5aC0zLjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC44OS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xMS0uOS0yLTItMnptMCAxMmgtNGMwIDEuNjYtMS4zNSAzLTMgM3MtMy0xLjM0LTMtM0g0Ljk5VjVIMTl2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5kZXRlcm1pbmF0ZS1jaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTIgMTBIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8iPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi02aDJ2NnptMC04aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImluZm8tb3V0bGluZSI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5wdXQiPjxwYXRoIGQ9Ik0yMSAzLjAxSDNjLTEuMSAwLTIgLjktMiAyVjloMlY0Ljk5aDE4djE0LjAzSDNWMTVIMXY0LjAxYzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4di0xNGMwLTEuMTEtLjktMi0yLTJ6TTExIDE2bDQtNC00LTR2M0gxdjJoMTB2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnZlcnQtY29sb3JzIj48cGF0aCBkPSJNMTcuNjYgNy45M0wxMiAyLjI3IDYuMzQgNy45M2MtMy4xMiAzLjEyLTMuMTIgOC4xOSAwIDExLjMxQzcuOSAyMC44IDkuOTUgMjEuNTggMTIgMjEuNThjMi4wNSAwIDQuMS0uNzggNS42Ni0yLjM0IDMuMTItMy4xMiAzLjEyLTguMTkgMC0xMS4zMXpNMTIgMTkuNTljLTEuNiAwLTMuMTEtLjYyLTQuMjQtMS43NkM2LjYyIDE2LjY5IDYgMTUuMTkgNiAxMy41OXMuNjItMy4xMSAxLjc2LTQuMjRMMTIgNS4xdjE0LjQ5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYWJlbC1vdXRsaW5lIj48cGF0aCBkPSJNMTcuNjMgNS44NEMxNy4yNyA1LjMzIDE2LjY3IDUgMTYgNUw1IDUuMDFDMy45IDUuMDEgMyA1LjkgMyA3djEwYzAgMS4xLjkgMS45OSAyIDEuOTlMMTYgMTljLjY3IDAgMS4yNy0uMzMgMS42My0uODRMMjIgMTJsLTQuMzctNi4xNnpNMTYgMTdINVY3aDExbDMuNTUgNUwxNiAxN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsYW5ndWFnZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXN0LXBhZ2UiPjxwYXRoIGQ9Ik01LjU5IDcuNDFMMTAuMTggMTJsLTQuNTkgNC41OUw3IDE4bDYtNi02LTZ6TTE2IDZoMnYxMmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsYXVuY2giPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaWdodGJ1bGItb3V0bGluZSI+PHBhdGggZD0iTTkgMjFjMCAuNTUuNDUgMSAxIDFoNGMuNTUgMCAxLS40NSAxLTF2LTFIOXYxem0zLTE5QzguMTQgMiA1IDUuMTQgNSA5YzAgMi4zOCAxLjE5IDQuNDcgMyA1Ljc0VjE3YzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xdi0yLjI2YzEuODEtMS4yNyAzLTMuMzYgMy01Ljc0IDAtMy44Ni0zLjE0LTctNy03em0yLjg1IDExLjFsLS44NS42VjE2aC00di0yLjNsLS44NS0uNkM3LjggMTIuMTYgNyAxMC42MyA3IDljMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWMwIDEuNjMtLjggMy4xNi0yLjE1IDQuMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXN0eWxlIj48cGF0aCBkPSJNMyAxNmg1di0ySDN2MnptNi41IDBoNXYtMmgtNXYyem02LjUgMGg1di0yaC01djJ6TTMgMjBoMnYtMkgzdjJ6bTQgMGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMyAxMmg4di0ySDN2MnptMTAgMGg4di0yaC04djJ6TTMgNHY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5lLXdlaWdodCI+PHBhdGggZD0iTTMgMTdoMTh2LTJIM3Yyem0wIDNoMTh2LTFIM3Yxem0wLTdoMTh2LTNIM3Yzem0wLTl2NGgxOFY0SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGluayI+PHBhdGggZD0iTTMuOSAxMmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMWg0VjdIN2MtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNWg0di0xLjlIN2MtMS43MSAwLTMuMS0xLjM5LTMuMS0zLjF6TTggMTNoOHYtMkg4djJ6bTktNmgtNHYxLjloNGMxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXMtMS4zOSAzLjEtMy4xIDMuMWgtNFYxN2g0YzIuNzYgMCA1LTIuMjQgNS01cy0yLjI0LTUtNS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxpc3QiPjxwYXRoIGQ9Ik0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem00IDRoMTR2LTJIN3Yyem0wIDRoMTR2LTJIN3Yyek03IDd2MmgxNFY3SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jayI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9jay1vcGVuIj48cGF0aCBkPSJNMTIgMTdjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem02LTloLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2aDEuOWMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMSAxLjcxIDAgMy4xIDEuMzkgMy4xIDMuMXYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6bTAgMTJINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yek04LjkgNmMwLTEuNzEgMS4zOS0zLjEgMy4xLTMuMXMzLjEgMS4zOSAzLjEgMy4xdjJIOC45VjZ6TTE4IDIwSDZWMTBoMTJ2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG93LXByaW9yaXR5Ij48cGF0aCBkPSJNMTQgNWg4djJoLTh6bTAgNS41aDh2MmgtOHptMCA1LjVoOHYyaC04ek0yIDExLjVDMiAxNS4wOCA0LjkyIDE4IDguNSAxOEg5djJsMy0zLTMtM3YyaC0uNUM2LjAyIDE2IDQgMTMuOTggNCAxMS41UzYuMDIgNyA4LjUgN0gxMlY1SDguNUM0LjkyIDUgMiA3LjkyIDIgMTEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3lhbHR5Ij48cGF0aCBkPSJNMjEuNDEgMTEuNThsLTktOUMxMi4wNSAyLjIyIDExLjU1IDIgMTEgMkg0Yy0xLjEgMC0yIC45LTIgMnY3YzAgLjU1LjIyIDEuMDUuNTkgMS40Mmw5IDljLjM2LjM2Ljg2LjU4IDEuNDEuNTguNTUgMCAxLjA1LS4yMiAxLjQxLS41OWw3LTdjLjM3LS4zNi41OS0uODYuNTktMS40MSAwLS41NS0uMjMtMS4wNi0uNTktMS40MnpNNS41IDdDNC42NyA3IDQgNi4zMyA0IDUuNVM0LjY3IDQgNS41IDQgNyA0LjY3IDcgNS41IDYuMzMgNyA1LjUgN3ptMTEuNzcgOC4yN0wxMyAxOS41NGwtNC4yNy00LjI3QzguMjggMTQuODEgOCAxNC4xOSA4IDEzLjVjMC0xLjM4IDEuMTItMi41IDIuNS0yLjUuNjkgMCAxLjMyLjI4IDEuNzcuNzRsLjczLjcyLjczLS43M2MuNDUtLjQ1IDEuMDgtLjczIDEuNzctLjczIDEuMzggMCAyLjUgMS4xMiAyLjUgMi41IDAgLjY5LS4yOCAxLjMyLS43MyAxLjc3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1haWwiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkIj48cGF0aCBkPSJNMjAgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yem0wIDRsLTggNS04LTVWNmw4IDUgOC01djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFya3VucmVhZC1tYWlsYm94Ij48cGF0aCBkPSJNMjAgNkgxMHY2SDhWNGg2VjBINnY2SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtZW51Ij48cGF0aCBkPSJNMyAxOGgxOHYtMkgzdjJ6bTAtNWgxOHYtMkgzdjJ6bTAtN3YyaDE4VjZIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLWhvcml6Ij48cGF0aCBkPSJNNiAxMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyIDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0tNiAwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3JlLXZlcnQiPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3RvcmN5Y2xlIj48cGF0aCBkPSJNMTkuNDQgOS4wM0wxNS40MSA1SDExdjJoMy41OWwyIDJINWMtMi44IDAtNSAyLjItNSA1czIuMiA1IDUgNWMyLjQ2IDAgNC40NS0xLjY5IDQuOS00aDEuNjVsMi43Ny0yLjc3Yy0uMjEuNTQtLjMyIDEuMTQtLjMyIDEuNzcgMCAyLjggMi4yIDUgNSA1czUtMi4yIDUtNWMwLTIuNjUtMS45Ny00Ljc3LTQuNTYtNC45N3pNNy44MiAxNUM3LjQgMTYuMTUgNi4yOCAxNyA1IDE3Yy0xLjYzIDAtMy0xLjM3LTMtM3MxLjM3LTMgMy0zYzEuMjggMCAyLjQuODUgMi44MiAySDV2MmgyLjgyek0xOSAxN2MtMS42NiAwLTMtMS4zNC0zLTNzMS4zNC0zIDMtMyAzIDEuMzQgMyAzLTEuMzQgMy0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibW92ZS10by1pbmJveCI+PHBhdGggZD0iTTE5IDNINC45OWMtMS4xMSAwLTEuOTguOS0xLjk4IDJMMyAxOWMwIDEuMS44OCAyIDEuOTkgMkgxOWMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHptLTMtNWgtMlY3aC00djNIOGw0IDQgNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im5leHQtd2VlayI+PHBhdGggZD0iTTIwIDdoLTRWNWMwLS41NS0uMjItMS4wNS0uNTktMS40MUMxNS4wNSAzLjIyIDE0LjU1IDMgMTQgM2gtNGMtMS4xIDAtMiAuOS0yIDJ2Mkg0Yy0xLjEgMC0yIC45LTIgMnYxMWMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjljMC0xLjEtLjktMi0yLTJ6TTEwIDVoNHYyaC00VjV6bTEgMTMuNWwtMS0xIDMtMy0zLTMgMS0xIDQgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibm90ZS1hZGQiPjxwYXRoIGQ9Ik0xNCAySDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMxLjEgMCAyLS45IDItMlY4bC02LTZ6bTIgMTRoLTN2M2gtMnYtM0g4di0yaDN2LTNoMnYzaDN2MnptLTMtN1YzLjVMMTguNSA5SDEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9mZmxpbmUtcGluIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTUgMTZIN3YtMmgxMHYyem0tNi43LTRMNyAxMC43bDEuNC0xLjQgMS45IDEuOSA1LjMtNS4zTDE3IDcuMyAxMC4zIDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wYWNpdHkiPjxwYXRoIGQ9Ik0xNy42NiA4TDEyIDIuMzUgNi4zNCA4QzQuNzggOS41NiA0IDExLjY0IDQgMTMuNjRzLjc4IDQuMTEgMi4zNCA1LjY3IDMuNjEgMi4zNSA1LjY2IDIuMzUgNC4xLS43OSA1LjY2LTIuMzVTMjAgMTUuNjQgMjAgMTMuNjQgMTkuMjIgOS41NiAxNy42NiA4ek02IDE0Yy4wMS0yIC42Mi0zLjI3IDEuNzYtNC40TDEyIDUuMjdsNC4yNCA0LjM4QzE3LjM4IDEwLjc3IDE3Ljk5IDEyIDE4IDE0SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1icm93c2VyIj48cGF0aCBkPSJNMTkgNEg1Yy0xLjExIDAtMiAuOS0yIDJ2MTJjMCAxLjEuODkgMiAyIDJoNHYtMkg1VjhoMTR2MTBoLTR2Mmg0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjg5LTItMi0yem0tNyA2bC00IDRoM3Y2aDJ2LTZoM2wtNC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im9wZW4taW4tbmV3Ij48cGF0aCBkPSJNMTkgMTlINVY1aDdWM0g1Yy0xLjExIDAtMiAuOS0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi13aXRoIj48cGF0aCBkPSJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwYWdldmlldyI+PHBhdGggZD0iTTExLjUgOUMxMC4xMiA5IDkgMTAuMTIgOSAxMS41czEuMTIgMi41IDIuNSAyLjUgMi41LTEuMTIgMi41LTIuNVMxMi44OCA5IDExLjUgOXpNMjAgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bS0zLjIxIDE0LjIxbC0yLjkxLTIuOTFjLS42OS40NC0xLjUxLjctMi4zOS43QzkuMDEgMTYgNyAxMy45OSA3IDExLjVTOS4wMSA3IDExLjUgNyAxNiA5LjAxIDE2IDExLjVjMCAuODgtLjI2IDEuNjktLjcgMi4zOWwyLjkxIDIuOS0xLjQyIDEuNDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFuLXRvb2wiPjxwYXRoIGQ9Ik0yMyA1LjVWMjBjMCAyLjItMS44IDQtNCA0aC03LjNjLTEuMDggMC0yLjEtLjQzLTIuODUtMS4xOUwxIDE0LjgzczEuMjYtMS4yMyAxLjMtMS4yNWMuMjItLjE5LjQ5LS4yOS43OS0uMjkuMjIgMCAuNDIuMDYuNi4xNi4wNC4wMSA0LjMxIDIuNDYgNC4zMSAyLjQ2VjRjMC0uODMuNjctMS41IDEuNS0xLjVTMTEgMy4xNyAxMSA0djdoMVYxLjVjMC0uODMuNjctMS41IDEuNS0xLjVTMTUgLjY3IDE1IDEuNVYxMWgxVjIuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNVYxMWgxVjUuNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYXltZW50Ij48cGF0aCBkPSJNMjAgNEg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOGMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2YzAtMS4xMS0uODktMi0yLTJ6bTAgMTRINHYtNmgxNnY2em0wLTEwSDRWNmgxNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY2FtZXJhLW1pYyI+PHBhdGggZD0iTTIwIDVoLTMuMTdMMTUgM0g5TDcuMTcgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDd2LTIuMDljLTIuODMtLjQ4LTUtMi45NC01LTUuOTFoMmMwIDIuMjEgMS43OSA0IDQgNHM0LTEuNzkgNC00aDJjMCAyLjk3LTIuMTcgNS40My01IDUuOTFWMjFoN2MxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0tNiA4YzAgMS4xLS45IDItMiAycy0yLS45LTItMlY5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWNvbnRhY3QtY2FsZW5kYXIiPjxwYXRoIGQ9Ik0xOSAzaC0xVjFoLTJ2Mkg4VjFINnYySDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptNiAxMkg2di0xYzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMXYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGF0YS1zZXR0aW5nIj48cGF0aCBkPSJNMTguOTkgMTEuNWMuMzQgMCAuNjcuMDMgMSAuMDdMMjAgMCAwIDIwaDExLjU2Yy0uMDQtLjMzLS4wNy0uNjYtLjA3LTEgMC00LjE0IDMuMzYtNy41IDcuNS03LjV6bTMuNzEgNy45OWMuMDItLjE2LjA0LS4zMi4wNC0uNDkgMC0uMTctLjAxLS4zMy0uMDQtLjQ5bDEuMDYtLjgzYy4wOS0uMDguMTItLjIxLjA2LS4zMmwtMS0xLjczYy0uMDYtLjExLS4xOS0uMTUtLjMxLS4xMWwtMS4yNC41Yy0uMjYtLjItLjU0LS4zNy0uODUtLjQ5bC0uMTktMS4zMmMtLjAxLS4xMi0uMTItLjIxLS4yNC0uMjFoLTJjLS4xMiAwLS4yMy4wOS0uMjUuMjFsLS4xOSAxLjMyYy0uMy4xMy0uNTkuMjktLjg1LjQ5bC0xLjI0LS41Yy0uMTEtLjA0LS4yNCAwLS4zMS4xMWwtMSAxLjczYy0uMDYuMTEtLjA0LjI0LjA2LjMybDEuMDYuODNjLS4wMi4xNi0uMDMuMzItLjAzLjQ5IDAgLjE3LjAxLjMzLjAzLjQ5bC0xLjA2LjgzYy0uMDkuMDgtLjEyLjIxLS4wNi4zMmwxIDEuNzNjLjA2LjExLjE5LjE1LjMxLjExbDEuMjQtLjVjLjI2LjIuNTQuMzcuODUuNDlsLjE5IDEuMzJjLjAyLjEyLjEyLjIxLjI1LjIxaDJjLjEyIDAgLjIzLS4wOS4yNS0uMjFsLjE5LTEuMzJjLjMtLjEzLjU5LS4yOS44NC0uNDlsMS4yNS41Yy4xMS4wNC4yNCAwIC4zMS0uMTFsMS0xLjczYy4wNi0uMTEuMDMtLjI0LS4wNi0uMzJsLTEuMDctLjgzem0tMy43MSAxLjAxYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVzLjY3LTEuNSAxLjUtMS41IDEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLWRldmljZS1pbmZvcm1hdGlvbiI+PHBhdGggZD0iTTEzIDdoLTJ2MmgyVjd6bTAgNGgtMnY2aDJ2LTZ6bTQtOS45OUw3IDFjLTEuMSAwLTIgLjktMiAydjE4YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0xLjk5LTItMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0taWRlbnRpdHkiPjxwYXRoIGQ9Ik0xMiA1LjljMS4xNiAwIDIuMS45NCAyLjEgMi4xcy0uOTQgMi4xLTIuMSAyLjFTOS45IDkuMTYgOS45IDhzLjk0LTIuMSAyLjEtMi4xbTAgOWMyLjk3IDAgNi4xIDEuNDYgNi4xIDIuMXYxLjFINS45VjE3YzAtLjY0IDMuMTMtMi4xIDYuMS0yLjFNMTIgNEM5Ljc5IDQgOCA1Ljc5IDggOHMxLjc5IDQgNCA0IDQtMS43OSA0LTQtMS43OS00LTQtNHptMCA5Yy0yLjY3IDAtOCAxLjM0LTggNHYzaDE2di0zYzAtMi42Ni01LjMzLTQtOC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tbWVkaWEiPjxwYXRoIGQ9Ik0yIDZIMHY1aC4wMUwwIDIwYzAgMS4xLjkgMiAyIDJoMTh2LTJIMlY2em0yMC0yaC04bC0yLTJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDE2YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnpNNyAxNWw0LjUtNiAzLjUgNC41MSAyLjUtMy4wMUwyMSAxNUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tcGhvbmUtbXNnIj48cGF0aCBkPSJNMjAgMTUuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTEyIDN2MTBsMy0zaDZWM2gtOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXJtLXNjYW4td2lmaSI+PHBhdGggZD0iTTEyIDNDNi45NSAzIDMuMTUgNC44NSAwIDcuMjNMMTIgMjIgMjQgNy4yNUMyMC44NSA0Ljg3IDE3LjA1IDMgMTIgM3ptMSAxM2gtMnYtNmgydjZ6bS0yLThWNmgydjJoLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGV0cyI+PGNpcmNsZSBjeD0iNC41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxjaXJjbGUgY3g9IjkiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTUiIGN5PSI1LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iMTkuNSIgY3k9IjkuNSIgcj0iMi41Ij48L2NpcmNsZT48cGF0aCBkPSJNMTcuMzQgMTQuODZjLS44Ny0xLjAyLTEuNi0xLjg5LTIuNDgtMi45MS0uNDYtLjU0LTEuMDUtMS4wOC0xLjc1LTEuMzItLjExLS4wNC0uMjItLjA3LS4zMy0uMDktLjI1LS4wNC0uNTItLjA0LS43OC0uMDRzLS41MyAwLS43OS4wNWMtLjExLjAyLS4yMi4wNS0uMzMuMDktLjcuMjQtMS4yOC43OC0xLjc1IDEuMzItLjg3IDEuMDItMS42IDEuODktMi40OCAyLjkxLTEuMzEgMS4zMS0yLjkyIDIuNzYtMi42MiA0Ljc5LjI5IDEuMDIgMS4wMiAyLjAzIDIuMzMgMi4zMi43My4xNSAzLjA2LS40NCA1LjU0LS40NGguMThjMi40OCAwIDQuODEuNTggNS41NC40NCAxLjMxLS4yOSAyLjA0LTEuMzEgMi4zMy0yLjMyLjMxLTIuMDQtMS4zLTMuNDktMi42MS00Ljh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlIj48cGF0aCBkPSJNMTkgN2gtOHY2aDhWN3ptMi00SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMS45OCAyIDEuOThoMThjMS4xIDAgMi0uODggMi0xLjk4VjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk4aDE4djE0LjAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBpY3R1cmUtaW4tcGljdHVyZS1hbHQiPjxwYXRoIGQ9Ik0xOSAxMWgtOHY2aDh2LTZ6bTQgOFY0Ljk4QzIzIDMuODggMjIuMSAzIDIxIDNIM2MtMS4xIDAtMiAuODgtMiAxLjk4VjE5YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ6bS0yIC4wMkgzVjQuOTdoMTh2MTQuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGxheS1mb3Itd29yayI+PHBhdGggZD0iTTExIDV2NS41OUg3LjVsNC41IDQuNSA0LjUtNC41SDEzVjVoLTJ6bS01IDljMCAzLjMxIDIuNjkgNiA2IDZzNi0yLjY5IDYtNmgtMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNEg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvbHltZXIiPjxwYXRoIGQ9Ik0xOSA0aC00TDcuMTEgMTYuNjMgNC41IDEyIDkgNEg1TC41IDEyIDUgMjBoNGw3Ljg5LTEyLjYzTDE5LjUgMTIgMTUgMjBoNGw0LjUtOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwb3dlci1zZXR0aW5ncy1uZXciPjxwYXRoIGQ9Ik0xMyAzaC0ydjEwaDJWM3ptNC44MyAyLjE3bC0xLjQyIDEuNDJDMTcuOTkgNy44NiAxOSA5LjgxIDE5IDEyYzAgMy44Ny0zLjEzIDctNyA3cy03LTMuMTMtNy03YzAtMi4xOSAxLjAxLTQuMTQgMi41OC01LjQyTDYuMTcgNS4xN0M0LjIzIDYuODIgMyA5LjI2IDMgMTJjMCA0Ljk3IDQuMDMgOSA5IDlzOS00LjAzIDktOWMwLTIuNzQtMS4yMy01LjE4LTMuMTctNi44M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmVnbmFudC13b21hbiI+PHBhdGggZD0iTTkgNGMwLTEuMTEuODktMiAyLTJzMiAuODkgMiAyLS44OSAyLTIgMi0yLS44OS0yLTJ6bTcgOWMtLjAxLTEuMzQtLjgzLTIuNTEtMi0zIDAtMS42Ni0xLjM0LTMtMy0zcy0zIDEuMzQtMyAzdjdoMnY1aDN2LTVoM3YtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwcmludCI+PHBhdGggZD0iTTE5IDhINWMtMS42NiAwLTMgMS4zNC0zIDN2Nmg0djRoMTJ2LTRoNHYtNmMwLTEuNjYtMS4zNC0zLTMtM3ptLTMgMTFIOHYtNWg4djV6bTMtN2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0tMS05SDZ2NGgxMlYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InF1ZXJ5LWJ1aWxkZXIiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bS41LTEzSDExdjZsNS4yNSAzLjE1Ljc1LTEuMjMtNC41LTIuNjd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlc3Rpb24tYW5zd2VyIj48cGF0aCBkPSJNMjEgNmgtMnY5SDZ2MmMwIC41NS40NSAxIDEgMWgxMWw0IDRWN2MwLS41NS0uNDUtMS0xLTF6bS00IDZWM2MwLS41NS0uNDUtMS0xLTFIM2MtLjU1IDAtMSAuNDUtMSAxdjE0bDQtNGgxMGMuNTUgMCAxLS40NSAxLTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmFkaW8tYnV0dG9uLWNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiA3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1IDUtMi4yNCA1LTUtMi4yNC01LTUtNXptMC01QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tdW5jaGVja2VkIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVjZWlwdCI+PHBhdGggZD0iTTE4IDE3SDZ2LTJoMTJ2MnptMC00SDZ2LTJoMTJ2MnptMC00SDZWN2gxMnYyek0zIDIybDEuNS0xLjVMNiAyMmwxLjUtMS41TDkgMjJsMS41LTEuNUwxMiAyMmwxLjUtMS41TDE1IDIybDEuNS0xLjVMMTggMjJsMS41LTEuNUwyMSAyMlYybC0xLjUgMS41TDE4IDJsLTEuNSAxLjVMMTUgMmwtMS41IDEuNUwxMiAybC0xLjUgMS41TDkgMiA3LjUgMy41IDYgMiA0LjUgMy41IDMgMnYyMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNvcmQtdm9pY2Utb3ZlciI+PGNpcmNsZSBjeD0iOSIgY3k9IjkiIHI9IjQiPjwvY2lyY2xlPjxwYXRoIGQ9Ik05IDE1Yy0yLjY3IDAtOCAxLjM0LTggNHYyaDE2di0yYzAtMi42Ni01LjMzLTQtOC00em03Ljc2LTkuNjRsLTEuNjggMS42OWMuODQgMS4xOC44NCAyLjcxIDAgMy44OWwxLjY4IDEuNjljMi4wMi0yLjAyIDIuMDItNS4wNyAwLTcuMjd6TTIwLjA3IDJsLTEuNjMgMS42M2MyLjc3IDMuMDIgMi43NyA3LjU2IDAgMTAuNzRMMjAuMDcgMTZjMy45LTMuODkgMy45MS05Ljk1IDAtMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkZWVtIj48cGF0aCBkPSJNMjAgNmgtMi4xOGMuMTEtLjMxLjE4LS42NS4xOC0xIDAtMS42Ni0xLjM0LTMtMy0zLTEuMDUgMC0xLjk2LjU0LTIuNSAxLjM1bC0uNS42Ny0uNS0uNjhDMTAuOTYgMi41NCAxMC4wNSAyIDkgMiA3LjM0IDIgNiAzLjM0IDYgNWMwIC4zNS4wNy42OS4xOCAxSDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE5YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnptLTUtMmMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xek05IDRjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMTEgMTVINHYtMmgxNnYyem0wLTVINFY4aDUuMDhMNyAxMC44MyA4LjYyIDEyIDExIDguNzZsMS0xLjM2IDEgMS4zNkwxNS4zOCAxMiAxNyAxMC44MyAxNC45MiA4SDIwdjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVkbyI+PHBhdGggZD0iTTE4LjQgMTAuNkMxNi41NSA4Ljk5IDE0LjE1IDggMTEuNSA4Yy00LjY1IDAtOC41OCAzLjAzLTkuOTYgNy4yMkwzLjkgMTZjMS4wNS0zLjE5IDQuMDUtNS41IDcuNi01LjUgMS45NSAwIDMuNzMuNzIgNS4xMiAxLjg4TDEzIDE2aDlWN2wtMy42IDMuNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWZyZXNoIj48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlIj48cGF0aCBkPSJNMTkgMTNINXYtMmgxNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem01IDExSDd2LTJoMTB2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtY2lyY2xlLW91dGxpbmUiPjxwYXRoIGQ9Ik03IDExdjJoMTB2LTJIN3ptNS05QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUtc2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTIyLjczIDIyLjczTDIuNzcgMi43NyAyIDJsLS43My0uNzNMMCAyLjU0bDQuMzkgNC4zOSAyLjIxIDQuNjYtMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDcuNDZsMS4zOCAxLjM4Yy0uNS4zNi0uODMuOTUtLjgzIDEuNjIgMCAxLjEuODkgMiAxLjk5IDIgLjY3IDAgMS4yNi0uMzMgMS42Mi0uODRMMjEuNDYgMjRsMS4yNy0xLjI3ek03LjQyIDE1Yy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoMi4zNmwyIDJINy40MnptOC4xMy0yYy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg2LjU0bDkuMDEgOXpNNyAxOGMtMS4xIDAtMS45OS45LTEuOTkgMlM1LjkgMjIgNyAyMnMyLS45IDItMi0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW9yZGVyIj48cGF0aCBkPSJNMyAxNWgxOHYtMkgzdjJ6bTAgNGgxOHYtMkgzdjJ6bTAtOGgxOFY5SDN2MnptMC02djJoMThWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5Ij48cGF0aCBkPSJNMTAgOVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcGx5LWFsbCI+PHBhdGggZD0iTTcgOFY1bC03IDcgNyA3di0zbC00LTQgNC00em02IDFWNWwtNyA3IDcgN3YtNC4xYzUgMCA4LjUgMS42IDExIDUuMS0xLTUtNC0xMC0xMS0xMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQiPjxwYXRoIGQ9Ik0xNS43MyAzSDguMjdMMyA4LjI3djcuNDZMOC4yNyAyMWg3LjQ2TDIxIDE1LjczVjguMjdMMTUuNzMgM3pNMTIgMTcuM2MtLjcyIDAtMS4zLS41OC0xLjMtMS4zIDAtLjcyLjU4LTEuMyAxLjMtMS4zLjcyIDAgMS4zLjU4IDEuMyAxLjMgMCAuNzItLjU4IDEuMy0xLjMgMS4zem0xLTQuM2gtMlY3aDJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXBvcnQtcHJvYmxlbSI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZXN0b3JlIj48cGF0aCBkPSJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUtcGFnZSI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptLTIgMTZjLTIuMDUgMC0zLjgxLTEuMjQtNC41OC0zaDEuNzFjLjYzLjkgMS42OCAxLjUgMi44NyAxLjUgMS45MyAwIDMuNS0xLjU3IDMuNS0zLjVTMTMuOTMgOS41IDEyIDkuNWMtMS4zNSAwLTIuNTIuNzgtMy4xIDEuOWwxLjYgMS42aC00VjlsMS4zIDEuM0M4LjY5IDguOTIgMTAuMjMgOCAxMiA4YzIuNzYgMCA1IDIuMjQgNSA1cy0yLjI0IDUtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvb20iPjxwYXRoIGQ9Ik0xMiAyQzguMTMgMiA1IDUuMTMgNSA5YzAgNS4yNSA3IDEzIDcgMTNzNy03Ljc1IDctMTNjMC0zLjg3LTMuMTMtNy03LTd6bTAgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyb3VuZGVkLWNvcm5lciI+PHBhdGggZD0iTTE5IDE5aDJ2MmgtMnYtMnptMC0yaDJ2LTJoLTJ2MnpNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0wLThoMlY3SDN2MnptMC00aDJWM0gzdjJ6bTQgMGgyVjNIN3Yyem04IDE2aDJ2LTJoLTJ2MnptLTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bS04IDBoMnYtMkg3djJ6bS00IDBoMnYtMkgzdjJ6TTIxIDhjMC0yLjc2LTIuMjQtNS01LTVoLTV2Mmg1YzEuNjUgMCAzIDEuMzUgMyAzdjVoMlY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvd2luZyI+PHBhdGggZD0iTTguNSAxNC41TDQgMTlsMS41IDEuNUw5IDE3aDJsLTIuNS0yLjV6TTE1IDFjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDIwLjAxTDE4IDI0bC0yLjk5LTMuMDFWMTkuNWwtNy4xLTcuMDljLS4zMS4wNS0uNjEuMDctLjkxLjA3di0yLjE2YzEuNjYuMDMgMy42MS0uODcgNC42Ny0yLjA0bDEuNC0xLjU1Yy4xOS0uMjEuNDMtLjM4LjY5LS41LjI5LS4xNC42Mi0uMjMuOTYtLjIzaC4wM0MxNS45OSA2LjAxIDE3IDcuMDIgMTcgOC4yNnY1Ljc1YzAgLjg0LS4zNSAxLjYxLS45MiAyLjE2bC0zLjU4LTMuNTh2LTIuMjdjLS42My41Mi0xLjQzIDEuMDItMi4yOSAxLjM5TDE2LjUgMThIMThsMyAzLjAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNhdmUiPjxwYXRoIGQ9Ik0xNyAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY3bC00LTR6bS01IDE2Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3ptMy0xMEg1VjVoMTB2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzY2hlZHVsZSI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzZWFyY2giPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbGVjdC1hbGwiPjxwYXRoIGQ9Ik0zIDVoMlYzYy0xLjEgMC0yIC45LTIgMnptMCA4aDJ2LTJIM3Yyem00IDhoMnYtMkg3djJ6TTMgOWgyVjdIM3Yyem0xMC02aC0ydjJoMlYzem02IDB2MmgyYzAtMS4xLS45LTItMi0yek01IDIxdi0ySDNjMCAxLjEuOSAyIDIgMnptLTItNGgydi0ySDN2MnpNOSAzSDd2MmgyVjN6bTIgMThoMnYtMmgtMnYyem04LThoMnYtMmgtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC0xMmgyVjdoLTJ2MnptMCA4aDJ2LTJoLTJ2MnptLTQgNGgydi0yaC0ydjJ6bTAtMTZoMlYzaC0ydjJ6TTcgMTdoMTBWN0g3djEwem0yLThoNnY2SDlWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZW5kIj48cGF0aCBkPSJNMi4wMSAyMUwyMyAxMiAyLjAxIDMgMiAxMGwxNSAyLTE1IDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWFwcGxpY2F0aW9ucyI+PHBhdGggZD0iTTEyIDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNy03SDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS0xLjc1IDljMCAuMjMtLjAyLjQ2LS4wNS42OGwxLjQ4IDEuMTZjLjEzLjExLjE3LjMuMDguNDVsLTEuNCAyLjQyYy0uMDkuMTUtLjI3LjIxLS40My4xNWwtMS43NC0uN2MtLjM2LjI4LS43Ni41MS0xLjE4LjY5bC0uMjYgMS44NWMtLjAzLjE3LS4xOC4zLS4zNS4zaC0yLjhjLS4xNyAwLS4zMi0uMTMtLjM1LS4yOWwtLjI2LTEuODVjLS40My0uMTgtLjgyLS40MS0xLjE4LS42OWwtMS43NC43Yy0uMTYuMDYtLjM0IDAtLjQzLS4xNWwtMS40LTIuNDJjLS4wOS0uMTUtLjA1LS4zNC4wOC0uNDVsMS40OC0xLjE2Yy0uMDMtLjIzLS4wNS0uNDYtLjA1LS42OSAwLS4yMy4wMi0uNDYuMDUtLjY4bC0xLjQ4LTEuMTZjLS4xMy0uMTEtLjE3LS4zLS4wOC0uNDVsMS40LTIuNDJjLjA5LS4xNS4yNy0uMjEuNDMtLjE1bDEuNzQuN2MuMzYtLjI4Ljc2LS41MSAxLjE4LS42OWwuMjYtMS44NWMuMDMtLjE3LjE4LS4zLjM1LS4zaDIuOGMuMTcgMCAuMzIuMTMuMzUuMjlsLjI2IDEuODVjLjQzLjE4LjgyLjQxIDEuMTguNjlsMS43NC0uN2MuMTYtLjA2LjM0IDAgLjQzLjE1bDEuNCAyLjQyYy4wOS4xNS4wNS4zNC0uMDguNDVsLTEuNDggMS4xNmMuMDMuMjMuMDUuNDYuMDUuNjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmFja3VwLXJlc3RvcmUiPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYmx1ZXRvb3RoIj48cGF0aCBkPSJNMTEgMjRoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3Yyem04IDBoMnYtMmgtMnYyem0yLjcxLTE4LjI5TDEyIDBoLTF2Ny41OUw2LjQxIDMgNSA0LjQxIDEwLjU5IDEwIDUgMTUuNTkgNi40MSAxNyAxMSAxMi40MVYyMGgxbDUuNzEtNS43MS00LjMtNC4yOSA0LjMtNC4yOXpNMTMgMy44M2wxLjg4IDEuODhMMTMgNy41OVYzLjgzem0xLjg4IDEwLjQ2TDEzIDE2LjE3di0zLjc2bDEuODggMS44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1icmlnaHRuZXNzIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyek04IDE2aDIuNWwxLjUgMS41IDEuNS0xLjVIMTZ2LTIuNWwxLjUtMS41LTEuNS0xLjVWOGgtMi41TDEyIDYuNSAxMC41IDhIOHYyLjVMNi41IDEyIDggMTMuNVYxNnptNC03YzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzVjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtY2VsbCI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6TTE2IC4wMUw4IDBDNi45IDAgNiAuOSA2IDJ2MTZjMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMS45OS0yLTEuOTl6TTE2IDE2SDhWNGg4djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWV0aGVybmV0Ij48cGF0aCBkPSJNNy43NyA2Ljc2TDYuMjMgNS40OC44MiAxMmw1LjQxIDYuNTIgMS41NC0xLjI4TDMuNDIgMTJsNC4zNS01LjI0ek03IDEzaDJ2LTJIN3Yyem0xMC0yaC0ydjJoMnYtMnptLTYgMmgydi0yaC0ydjJ6bTYuNzctNy41MmwtMS41NCAxLjI4TDIwLjU4IDEybC00LjM1IDUuMjQgMS41NCAxLjI4TDIzLjE4IDEybC01LjQxLTYuNTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtYW50ZW5uYSI+PHBhdGggZD0iTTEyIDVjLTMuODcgMC03IDMuMTMtNyA3aDJjMC0yLjc2IDIuMjQtNSA1LTVzNSAyLjI0IDUgNWgyYzAtMy44Ny0zLjEzLTctNy03em0xIDkuMjljLjg4LS4zOSAxLjUtMS4yNiAxLjUtMi4yOSAwLTEuMzgtMS4xMi0yLjUtMi41LTIuNVM5LjUgMTAuNjIgOS41IDEyYzAgMS4wMi42MiAxLjkgMS41IDIuMjl2My4zTDcuNTkgMjEgOSAyMi40MWwzLTMgMyAzTDE2LjQxIDIxIDEzIDE3LjU5di0zLjN6TTEyIDFDNS45MyAxIDEgNS45MyAxIDEyaDJjMC00Ljk3IDQuMDMtOSA5LTlzOSA0LjAzIDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvbmVudCI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1jb21wb3NpdGUiPjxwYXRoIGQ9Ik01IDJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEgxdjZoNlY2SDVWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMkg5djJ6bS04IDBjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4QzYuMTYgMTguNCA3IDE3LjMgNyAxNnYtMkgxdjJ6TTIxIDZWMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0aC0ydjZoNlY2aC0yem0tOC00YzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIOXY2aDZWNmgtMlYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0yaC02djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtaGRtaSI+PHBhdGggZD0iTTE4IDdWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYzSDV2NmwzIDZ2M2g4di0zbDMtNlY3aC0xek04IDRoOHYzaC0yVjVoLTF2MmgtMlY1aC0xdjJIOFY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LXN2aWRlbyI+PHBhdGggZD0iTTggMTEuNWMwLS44My0uNjctMS41LTEuNS0xLjVTNSAxMC42NyA1IDExLjUgNS42NyAxMyA2LjUgMTMgOCAxMi4zMyA4IDExLjV6bTctNWMwLS44My0uNjctMS41LTEuNS0xLjVoLTNDOS42NyA1IDkgNS42NyA5IDYuNVM5LjY3IDggMTAuNSA4aDNjLjgzIDAgMS41LS42NyAxLjUtMS41ek04LjUgMTVjLS44MyAwLTEuNS42Ny0xLjUgMS41UzcuNjcgMTggOC41IDE4czEuNS0uNjcgMS41LTEuNVM5LjMzIDE1IDguNSAxNXpNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJzNC45MyAxMSAxMSAxMSAxMS00LjkzIDExLTExUzE4LjA3IDEgMTIgMXptMCAyMGMtNC45NiAwLTktNC4wNC05LTlzNC4wNC05IDktOSA5IDQuMDQgOSA5LTQuMDQgOS05IDl6bTUuNS0xMWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bS0yIDVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLW92ZXJzY2FuIj48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXBob25lIj48cGF0aCBkPSJNMTMgOWgtMnYyaDJWOXptNCAwaC0ydjJoMlY5em0zIDYuNWMtMS4yNSAwLTIuNDUtLjItMy41Ny0uNTctLjM1LS4xMS0uNzQtLjAzLTEuMDIuMjRsLTIuMiAyLjJjLTIuODMtMS40NC01LjE1LTMuNzUtNi41OS02LjU4bDIuMi0yLjIxYy4yOC0uMjcuMzYtLjY2LjI1LTEuMDFDOC43IDYuNDUgOC41IDUuMjUgOC41IDRjMC0uNTUtLjQ1LTEtMS0xSDRjLS41NSAwLTEgLjQ1LTEgMSAwIDkuMzkgNy42MSAxNyAxNyAxNyAuNTUgMCAxLS40NSAxLTF2LTMuNWMwLS41NS0uNDUtMS0xLTF6TTE5IDl2MmgyVjloLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcG93ZXIiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem0yLTIyaC0ydjEwaDJWMnptMy41NiAyLjQ0bC0xLjQ1IDEuNDVDMTYuODQgNi45NCAxOCA4LjgzIDE4IDExYzAgMy4zMS0yLjY5IDYtNiA2cy02LTIuNjktNi02YzAtMi4xNyAxLjE2LTQuMDYgMi44OC01LjEyTDcuNDQgNC40NEM1LjM2IDUuODggNCA4LjI4IDQgMTFjMCA0LjQyIDMuNTggOCA4IDhzOC0zLjU4IDgtOGMwLTIuNzItMS4zNi01LjEyLTMuNDQtNi41NnpNMTUgMjRoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLXJlbW90ZSI+PHBhdGggZD0iTTE1IDlIOWMtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDZjLjU1IDAgMS0uNDUgMS0xVjEwYzAtLjU1LS40NS0xLTEtMXptLTMgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTcuMDUgNi4wNWwxLjQxIDEuNDFDOS4zNyA2LjU2IDEwLjYyIDYgMTIgNnMyLjYzLjU2IDMuNTQgMS40NmwxLjQxLTEuNDFDMTUuNjggNC43OCAxMy45MyA0IDEyIDRzLTMuNjguNzgtNC45NSAyLjA1ek0xMiAwQzguOTYgMCA2LjIxIDEuMjMgNC4yMiAzLjIybDEuNDEgMS40MUM3LjI2IDMuMDEgOS41MSAyIDEyIDJzNC43NCAxLjAxIDYuMzYgMi42NGwxLjQxLTEuNDFDMTcuNzkgMS4yMyAxNS4wNCAwIDEyIDB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtdm9pY2UiPjxwYXRoIGQ9Ik03IDI0aDJ2LTJIN3Yyem01LTExYzEuNjYgMCAyLjk5LTEuMzQgMi45OS0zTDE1IDRjMC0xLjY2LTEuMzQtMy0zLTNTOSAyLjM0IDkgNHY2YzAgMS42NiAxLjM0IDMgMyAzem0tMSAxMWgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6bTQtMTRoLTEuN2MwIDMtMi41NCA1LjEtNS4zIDUuMVM2LjcgMTMgNi43IDEwSDVjMCAzLjQxIDIuNzIgNi4yMyA2IDYuNzJWMjBoMnYtMy4yOGMzLjI4LS40OSA2LTMuMzEgNi02LjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3AiPjxwYXRoIGQ9Ik0xNiA2VjRjMC0xLjExLS44OS0yLTItMmgtNGMtMS4xMSAwLTIgLjg5LTIgMnYySDJ2MTNjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWNmgtNnptLTYtMmg0djJoLTRWNHpNOSAxOFY5bDcuNSA0TDkgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcC10d28iPjxwYXRoIGQ9Ik0zIDlIMXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMkgzVjl6bTE1LTRWM2MwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINXYxMWMwIDEuMTEuODkgMiAyIDJoMTRjMS4xMSAwIDItLjg5IDItMlY1aC01em0tNi0yaDR2MmgtNFYzem0wIDEyVjhsNS41IDMtNS41IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctYmFza2V0Ij48cGF0aCBkPSJNMTcuMjEgOWwtNC4zOC02LjU2Yy0uMTktLjI4LS41MS0uNDItLjgzLS40Mi0uMzIgMC0uNjQuMTQtLjgzLjQzTDYuNzkgOUgyYy0uNTUgMC0xIC40NS0xIDEgMCAuMDkuMDEuMTguMDQuMjdsMi41NCA5LjI3Yy4yMy44NCAxIDEuNDYgMS45MiAxLjQ2aDEzYy45MiAwIDEuNjktLjYyIDEuOTMtMS40NmwyLjU0LTkuMjdMMjMgMTBjMC0uNTUtLjQ1LTEtMS0xaC00Ljc5ek05IDlsMy00LjRMMTUgOUg5em0zIDhjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNob3BwaW5nLWNhcnQiPjxwYXRoIGQ9Ik03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yek0xIDJ2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTQgMC0uMjUtLjExLS4yNS0uMjVsLjAzLS4xMi45LTEuNjNoNy40NWMuNzUgMCAxLjQxLS40MSAxLjc1LTEuMDNsMy41OC02LjQ5Yy4wOC0uMTQuMTItLjMxLjEyLS40OCAwLS41NS0uNDUtMS0xLTFINS4yMWwtLjk0LTJIMXptMTYgMTZjLTEuMSAwLTEuOTkuOS0xLjk5IDJzLjg5IDIgMS45OSAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNvcnQiPjxwYXRoIGQ9Ik0zIDE4aDZ2LTJIM3Yyek0zIDZ2MmgxOFY2SDN6bTAgN2gxMnYtMkgzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3RlcyI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDIybDQtNGgxNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDE0SDZ2LTJoMnYyem0wLTNINlY5aDJ2MnptMC0zSDZWNmgydjJ6bTcgNmgtNXYtMmg1djJ6bTMtM2gtOFY5aDh2MnptMC0zaC04VjZoOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWFrZXItbm90ZXMtb2ZmIj48cGF0aCBkPSJNMTAuNTQgMTFsLS41NC0uNTRMNy41NCA4IDYgNi40NiAyLjM4IDIuODQgMS4yNyAxLjczIDAgM2wyLjAxIDIuMDFMMiAyMmw0LTRoOWw1LjczIDUuNzNMMjIgMjIuNDYgMTcuNTQgMThsLTctN3pNOCAxNEg2di0yaDJ2MnptLTItM1Y5bDIgMkg2em0xNC05SDQuMDhMMTAgNy45MlY2aDh2MmgtNy45MmwxIDFIMTh2MmgtNC45Mmw2Ljk5IDYuOTlDMjEuMTQgMTcuOTUgMjIgMTcuMDggMjIgMTZWNGMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVsbGNoZWNrIj48cGF0aCBkPSJNMTIuNDUgMTZoMi4wOUw5LjQzIDNINy41N0wyLjQ2IDE2aDIuMDlsMS4xMi0zaDUuNjRsMS4xNCAzem0tNi4wMi01TDguNSA1LjQ4IDEwLjU3IDExSDYuNDN6bTE1LjE2LjU5bC04LjA5IDguMDlMOS44MyAxNmwtMS40MSAxLjQxIDUuMDkgNS4wOUwyMyAxM2wtMS40MS0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXIiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWJvcmRlciI+PHBhdGggZD0iTTIyIDkuMjRsLTcuMTktLjYyTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMSAxMiAxNy4yNyAxOC4xOCAyMWwtMS42My03LjAzTDIyIDkuMjR6TTEyIDE1LjRsLTMuNzYgMi4yNyAxLTQuMjgtMy4zMi0yLjg4IDQuMzgtLjM4TDEyIDYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3Rhci1oYWxmIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNFY2LjFsMS43MSA0LjA0IDQuMzguMzgtMy4zMiAyLjg4IDEgNC4yOEwxMiAxNS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXJzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNC4yNCAxNkwxMiAxNS40NSA3Ljc3IDE4bDEuMTItNC44MS0zLjczLTMuMjMgNC45Mi0uNDJMMTIgNWwxLjkyIDQuNTMgNC45Mi40Mi0zLjczIDMuMjNMMTYuMjMgMTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RvcmUiPjxwYXRoIGQ9Ik0yMCA0SDR2MmgxNlY0em0xIDEwdi0ybC0xLTVINGwtMSA1djJoMXY2aDEwdi02aDR2Nmgydi02aDF6bS05IDRINnYtNGg2djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViZGlyZWN0b3J5LWFycm93LWxlZnQiPjxwYXRoIGQ9Ik0xMSA5bDEuNDIgMS40Mkw4LjgzIDE0SDE4VjRoMnYxMkg4LjgzbDMuNTkgMy41OEwxMSAyMWwtNi02IDYtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctcmlnaHQiPjxwYXRoIGQ9Ik0xOSAxNWwtNiA2LTEuNDItMS40MkwxNS4xNyAxNkg0VjRoMnYxMGg5LjE3bC0zLjU5LTMuNThMMTMgOWw2IDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3ViamVjdCI+PHBhdGggZD0iTTE0IDE3SDR2MmgxMHYtMnptNi04SDR2MmgxNlY5ek00IDE1aDE2di0ySDR2MnpNNCA1djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1cGVydmlzb3ItYWNjb3VudCI+PHBhdGggZD0iTTE2LjUgMTJjMS4zOCAwIDIuNDktMS4xMiAyLjQ5LTIuNVMxNy44OCA3IDE2LjUgN0MxNS4xMiA3IDE0IDguMTIgMTQgOS41czEuMTIgMi41IDIuNSAyLjV6TTkgMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNTMTAuNjYgNSA5IDVDNy4zNCA1IDYgNi4zNCA2IDhzMS4zNCAzIDMgM3ptNy41IDNjLTEuODMgMC01LjUuOTItNS41IDIuNzVWMTloMTF2LTIuMjVjMC0xLjgzLTMuNjctMi43NS01LjUtMi43NXpNOSAxM2MtMi4zMyAwLTcgMS4xNy03IDMuNVYxOWg3di0yLjI1YzAtLjg1LjMzLTIuMzQgMi4zNy0zLjQ3QzEwLjUgMTMuMSA5LjY2IDEzIDkgMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3dhcC1ob3JpeiI+PHBhdGggZD0iTTYuOTkgMTFMMyAxNWwzLjk5IDR2LTNIMTR2LTJINi45OXYtM3pNMjEgOWwtMy45OS00djNIMTB2Mmg3LjAxdjNMMjEgOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnQiPjxwYXRoIGQ9Ik0xNiAxNy4wMVYxMGgtMnY3LjAxaC0zTDE1IDIxbDQtMy45OWgtM3pNOSAzTDUgNi45OWgzVjE0aDJWNi45OWgzTDkgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLXZlcnRpY2FsLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTYuNSA5TDEwIDUuNSAxMy41IDlIMTF2NEg5VjlINi41em0xMSA2TDE0IDE4LjUgMTAuNSAxNUgxM3YtNGgydjRoMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN5c3RlbS11cGRhdGUtYWx0Ij48cGF0aCBkPSJNMTIgMTYuNWw0LTRoLTN2LTloLTJ2OUg4bDQgNHptOS0xM2gtNnYxLjk5aDZ2MTQuMDNIM1Y1LjQ5aDZWMy41SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJ2LTE0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRhYiI+PHBhdGggZD0iTTIxIDNIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDNWNWgxMHY0aDh2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiLXVuc2VsZWN0ZWQiPjxwYXRoIGQ9Ik0xIDloMlY3SDF2MnptMCA0aDJ2LTJIMXYyem0wLThoMlYzYy0xLjEgMC0yIC45LTIgMnptOCAxNmgydi0ySDl2MnptLTgtNGgydi0ySDF2MnptMiA0di0ySDFjMCAxLjEuOSAyIDIgMnpNMjEgM2gtOHY2aDEwVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTRoMnYtMmgtMnYyek05IDVoMlYzSDl2MnpNNSAyMWgydi0ySDV2MnpNNSA1aDJWM0g1djJ6bTE2IDE2YzEuMSAwIDItLjkgMi0yaC0ydjJ6bTAtOGgydi0yaC0ydjJ6bS04IDhoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHQtZm9ybWF0Ij48cGF0aCBkPSJNNSAxN3YyaDE0di0ySDV6bTQuNS00LjJoNWwuOSAyLjJoMi4xTDEyLjc1IDRoLTEuNUw2LjUgMTVoMi4xbC45LTIuMnpNMTIgNS45OEwxMy44NyAxMWgtMy43NEwxMiA1Ljk4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRoZWF0ZXJzIj48cGF0aCBkPSJNMTggM3YyaC0yVjNIOHYySDZWM0g0djE4aDJ2LTJoMnYyaDh2LTJoMnYyaDJWM2gtMnpNOCAxN0g2di0yaDJ2MnptMC00SDZ2LTJoMnYyem0wLTRINlY3aDJ2MnptMTAgOGgtMnYtMmgydjJ6bTAtNGgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi1kb3duIj48cGF0aCBkPSJNMTUgM0g2Yy0uODMgMC0xLjU0LjUtMS44NCAxLjIybC0zLjAyIDcuMDVjLS4wOS4yMy0uMTQuNDctLjE0LjczdjEuOTFsLjAxLjAxTDEgMTRjMCAxLjEuOSAyIDIgMmg2LjMxbC0uOTUgNC41Ny0uMDMuMzJjMCAuNDEuMTcuNzkuNDQgMS4wNkw5LjgzIDIzbDYuNTktNi41OWMuMzYtLjM2LjU4LS44Ni41OC0xLjQxVjVjMC0xLjEtLjktMi0yLTJ6bTQgMHYxMmg0VjNoLTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGh1bWItdXAiPjxwYXRoIGQ9Ik0xIDIxaDRWOUgxdjEyem0yMi0xMWMwLTEuMS0uOS0yLTItMmgtNi4zMWwuOTUtNC41Ny4wMy0uMzJjMC0uNDEtLjE3LS43OS0uNDQtMS4wNkwxNC4xNyAxIDcuNTkgNy41OUM3LjIyIDcuOTUgNyA4LjQ1IDcgOXYxMGMwIDEuMS45IDIgMiAyaDljLjgzIDAgMS41NC0uNSAxLjg0LTEuMjJsMy4wMi03LjA1Yy4wOS0uMjMuMTQtLjQ3LjE0LS43M3YtMS45MWwtLjAxLS4wMUwyMyAxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYnMtdXAtZG93biI+PHBhdGggZD0iTTEyIDZjMC0uNTUtLjQ1LTEtMS0xSDUuODJsLjY2LTMuMTguMDItLjIzYzAtLjMxLS4xMy0uNTktLjMzLS44TDUuMzggMCAuNDQgNC45NEMuMTcgNS4yMSAwIDUuNTkgMCA2djYuNWMwIC44My42NyAxLjUgMS41IDEuNWg2Ljc1Yy42MiAwIDEuMTUtLjM4IDEuMzgtLjkxbDIuMjYtNS4yOWMuMDctLjE3LjExLS4zNi4xMS0uNTVWNnptMTAuNSA0aC02Ljc1Yy0uNjIgMC0xLjE1LjM4LTEuMzguOTFsLTIuMjYgNS4yOWMtLjA3LjE3LS4xMS4zNi0uMTEuNTVWMThjMCAuNTUuNDUgMSAxIDFoNS4xOGwtLjY2IDMuMTgtLjAyLjI0YzAgLjMxLjEzLjU5LjMzLjhsLjc5Ljc4IDQuOTQtNC45NGMuMjctLjI3LjQ0LS42NS40NC0xLjA2di02LjVjMC0uODMtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsaW5lIj48cGF0aCBkPSJNMjMgOGMwIDEuMS0uOSAyLTIgMi0uMTggMC0uMzUtLjAyLS41MS0uMDdsLTMuNTYgMy41NWMuMDUuMTYuMDcuMzQuMDcuNTIgMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yYzAtLjE4LjAyLS4zNi4wNy0uNTJsLTIuNTUtMi41NWMtLjE2LjA1LS4zNC4wNy0uNTIuMDdzLS4zNi0uMDItLjUyLS4wN2wtNC41NSA0LjU2Yy4wNS4xNi4wNy4zMy4wNy41MSAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTJjLjE4IDAgLjM1LjAyLjUxLjA3bDQuNTYtNC41NUM4LjAyIDkuMzYgOCA5LjE4IDggOWMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgLjE4LS4wMi4zNi0uMDcuNTJsMi41NSAyLjU1Yy4xNi0uMDUuMzQtLjA3LjUyLS4wN3MuMzYuMDIuNTIuMDdsMy41NS0zLjU2QzE5LjAyIDguMzUgMTkgOC4xOCAxOSA4YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG9jIj48cGF0aCBkPSJNMyA5aDE0VjdIM3Yyem0wIDRoMTR2LTJIM3Yyem0wIDRoMTR2LTJIM3Yyem0xNiAwaDJ2LTJoLTJ2MnptMC0xMHYyaDJWN2gtMnptMCA2aDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2RheSI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTEuOTkuOS0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWOGgxNHYxMXpNNyAxMGg1djVIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2xsIj48cGF0aCBkPSJNMTUgNGMtNC40MiAwLTggMy41OC04IDhzMy41OCA4IDggOCA4LTMuNTggOC04LTMuNTgtOC04LTh6bTAgMTRjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2ek0zIDEyYzAtMi42MSAxLjY3LTQuODMgNC01LjY1VjQuMjZDMy41NSA1LjE1IDEgOC4yNyAxIDEyczIuNTUgNi44NSA2IDcuNzR2LTIuMDljLTIuMzMtLjgyLTQtMy4wNC00LTUuNjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idG91Y2gtYXBwIj48cGF0aCBkPSJNOSAxMS4yNFY3LjVDOSA2LjEyIDEwLjEyIDUgMTEuNSA1UzE0IDYuMTIgMTQgNy41djMuNzRjMS4yMS0uODEgMi0yLjE4IDItMy43NEMxNiA1LjAxIDEzLjk5IDMgMTEuNSAzUzcgNS4wMSA3IDcuNWMwIDEuNTYuNzkgMi45MyAyIDMuNzR6bTkuODQgNC42M2wtNC41NC0yLjI2Yy0uMTctLjA3LS4zNS0uMTEtLjU0LS4xMUgxM3YtNmMwLS44My0uNjctMS41LTEuNS0xLjVTMTAgNi42NyAxMCA3LjV2MTAuNzRsLTMuNDMtLjcyYy0uMDgtLjAxLS4xNS0uMDMtLjI0LS4wMy0uMzEgMC0uNTkuMTMtLjc5LjMzbC0uNzkuOCA0Ljk0IDQuOTRjLjI3LjI3LjY1LjQ0IDEuMDYuNDRoNi43OWMuNzUgMCAxLjMzLS41NSAxLjQ0LTEuMjhsLjc1LTUuMjdjLjAxLS4wNy4wMi0uMTQuMDItLjIgMC0uNjItLjM4LTEuMTYtLjkxLTEuMzh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhY2stY2hhbmdlcyI+PHBhdGggZD0iTTE5LjA3IDQuOTNsLTEuNDEgMS40MUMxOS4xIDcuNzkgMjAgOS43OSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHMtOC0zLjU4LTgtOGMwLTQuMDggMy4wNS03LjQ0IDctNy45M3YyLjAyQzguMTYgNi41NyA2IDkuMDMgNiAxMmMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02YzAtMS42Ni0uNjctMy4xNi0xLjc2LTQuMjRsLTEuNDEgMS40MUMxNS41NSA5LjkgMTYgMTAuOSAxNiAxMmMwIDIuMjEtMS43OSA0LTQgNHMtNC0xLjc5LTQtNGMwLTEuODYgMS4yOC0zLjQxIDMtMy44NnYyLjE0Yy0uNi4zNS0xIC45OC0xIDEuNzIgMCAxLjEuOSAyIDIgMnMyLS45IDItMmMwLS43NC0uNC0xLjM4LTEtMS43MlYyaC0xQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBjMC0yLjc2LTEuMTItNS4yNi0yLjkzLTcuMDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJhbnNsYXRlIj48cGF0aCBkPSJNMTIuODcgMTUuMDdsLTIuNTQtMi41MS4wMy0uMDNjMS43NC0xLjk0IDIuOTgtNC4xNyAzLjcxLTYuNTNIMTdWNGgtN1YySDh2MkgxdjEuOTloMTEuMTdDMTEuNSA3LjkyIDEwLjQ0IDkuNzUgOSAxMS4zNSA4LjA3IDEwLjMyIDcuMyA5LjE5IDYuNjkgOGgtMmMuNzMgMS42MyAxLjczIDMuMTcgMi45OCA0LjU2bC01LjA5IDUuMDJMNCAxOWw1LTUgMy4xMSAzLjExLjc2LTIuMDR6TTE4LjUgMTBoLTJMMTIgMjJoMmwxLjEyLTNoNC43NUwyMSAyMmgybC00LjUtMTJ6bS0yLjYyIDdsMS42Mi00LjMzTDE5LjEyIDE3aC0zLjI0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWRvd24iPjxwYXRoIGQ9Ik0xNiAxOGwyLjI5LTIuMjktNC44OC00Ljg4LTQgNEwyIDcuNDEgMy40MSA2bDYgNiA0LTQgNi4zIDYuMjlMMjIgMTJ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmVuZGluZy1mbGF0Ij48cGF0aCBkPSJNMjIgMTJsLTQtNHYzSDN2MmgxNXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLXVwIj48cGF0aCBkPSJNMTYgNmwyLjI5IDIuMjktNC44OCA0Ljg4LTQtNEwyIDE2LjU5IDMuNDEgMThsNi02IDQgNCA2LjMtNi4yOUwyMiAxMlY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbiI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dXJuZWQtaW4tbm90Ij48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yem0wIDE1bC01LTIuMThMNyAxOFY1aDEwdjEzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU1IDUuMjJsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNS41NUwzLjQ2IDUuMjJDMy4xNyA1LjU3IDMgNi4wMSAzIDYuNVYxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY2LjVjMC0uNDktLjE3LS45My0uNDUtMS4yOHpNMTIgOS41bDUuNSA1LjVIMTR2MmgtNHYtMkg2LjVMMTIgOS41ek01LjEyIDVsLjgyLTFoMTJsLjkzIDFINS4xMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmRvIj48cGF0aCBkPSJNMTIuNSA4Yy0yLjY1IDAtNS4wNS45OS02LjkgMi42TDIgN3Y5aDlsLTMuNjItMy42MmMxLjM5LTEuMTYgMy4xNi0xLjg4IDUuMTItMS44OCAzLjU0IDAgNi41NSAyLjMxIDcuNiA1LjVsMi4zNy0uNzhDMjEuMDggMTEuMDMgMTcuMTUgOCAxMi41IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLWxlc3MiPjxwYXRoIGQ9Ik03LjQxIDE4LjU5TDguODMgMjAgMTIgMTYuODMgMTUuMTcgMjBsMS40MS0xLjQxTDEyIDE0bC00LjU5IDQuNTl6bTkuMTgtMTMuMThMMTUuMTcgNCAxMiA3LjE3IDguODMgNCA3LjQxIDUuNDEgMTIgMTBsNC41OS00LjU5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZm9sZC1tb3JlIj48cGF0aCBkPSJNMTIgNS44M0wxNS4xNyA5bDEuNDEtMS40MUwxMiAzIDcuNDEgNy41OSA4LjgzIDkgMTIgNS44M3ptMCAxMi4zNEw4LjgzIDE1bC0xLjQxIDEuNDFMMTIgMjFsNC41OS00LjU5TDE1LjE3IDE1IDEyIDE4LjE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVwZGF0ZSI+PHBhdGggZD0iTTIxIDEwLjEyaC02Ljc4bDIuNzQtMi44MmMtMi43My0yLjctNy4xNS0yLjgtOS44OC0uMS0yLjczIDIuNzEtMi43MyA3LjA4IDAgOS43OSAyLjczIDIuNzEgNy4xNSAyLjcxIDkuODggMEMxOC4zMiAxNS42NSAxOSAxNC4wOCAxOSAxMi4xaDJjMCAxLjk4LS44OCA0LjU1LTIuNjQgNi4yOS0zLjUxIDMuNDgtOS4yMSAzLjQ4LTEyLjcyIDAtMy41LTMuNDctMy41My05LjExLS4wMi0xMi41OCAzLjUxLTMuNDcgOS4xNC0zLjQ3IDEyLjY1IDBMMjEgM3Y3LjEyek0xMi41IDh2NC4yNWwzLjUgMi4wOC0uNzIgMS4yMUwxMSAxM1Y4aDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2ZXJpZmllZC11c2VyIj48cGF0aCBkPSJNMTIgMUwzIDV2NmMwIDUuNTUgMy44NCAxMC43NCA5IDEyIDUuMTYtMS4yNiA5LTYuNDUgOS0xMlY1bC05LTR6bS0yIDE2bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1hZ2VuZGEiPjxwYXRoIGQ9Ik0yMCAxM0gzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTF2LTZjMC0uNTUtLjQ1LTEtMS0xem0wLTEwSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY0YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFycmF5Ij48cGF0aCBkPSJNNCAxOGgzVjVINHYxM3pNMTggNXYxM2gzVjVoLTN6TTggMThoOVY1SDh2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1jYXJvdXNlbCI+PHBhdGggZD0iTTcgMTloMTBWNEg3djE1em0tNS0yaDRWNkgydjExek0xOCA2djExaDRWNmgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbHVtbiI+PHBhdGggZD0iTTEwIDE4aDVWNWgtNXYxM3ptLTYgMGg1VjVINHYxM3pNMTYgNXYxM2g1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1kYXkiPjxwYXRoIGQ9Ik0yIDIxaDE5di0zSDJ2M3pNMjAgOEgzYy0uNTUgMC0xIC40NS0xIDF2NmMwIC41NS40NSAxIDEgMWgxN2MuNTUgMCAxLS40NSAxLTFWOWMwLS41NS0uNDUtMS0xLTF6TTIgM3YzaDE5VjNIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWhlYWRsaW5lIj48cGF0aCBkPSJNNCAxNWgxNnYtMkg0djJ6bTAgNGgxNnYtMkg0djJ6bTAtOGgxNlY5SDR2MnptMC02djJoMTZWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbGlzdCI+PHBhdGggZD0iTTQgMTRoNHYtNEg0djR6bTAgNWg0di00SDR2NHpNNCA5aDRWNUg0djR6bTUgNWgxMnYtNEg5djR6bTAgNWgxMnYtNEg5djR6TTkgNXY0aDEyVjVIOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LW1vZHVsZSI+PHBhdGggZD0iTTQgMTFoNVY1SDR2NnptMCA3aDV2LTZINHY2em02IDBoNXYtNmgtNXY2em02IDBoNXYtNmgtNXY2em0tNi03aDVWNWgtNXY2em02LTZ2Nmg1VjVoLTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1xdWlsdCI+PHBhdGggZD0iTTEwIDE4aDV2LTZoLTV2NnptLTYgMGg1VjVINHYxM3ptMTIgMGg1di02aC01djZ6TTEwIDV2NmgxMVY1SDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctc3RyZWFtIj48cGF0aCBkPSJNNCAxOGgxN3YtNkg0djZ6TTQgNXY2aDE3VjVINHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXdlZWsiPjxwYXRoIGQ9Ik02IDVIM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xem0xNCAwaC0zYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bS03IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aXNpYmlsaXR5Ij48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHktb2ZmIj48cGF0aCBkPSJNMTIgN2MyLjc2IDAgNSAyLjI0IDUgNSAwIC42NS0uMTMgMS4yNi0uMzYgMS44M2wyLjkyIDIuOTJjMS41MS0xLjI2IDIuNy0yLjg5IDMuNDMtNC43NS0xLjczLTQuMzktNi03LjUtMTEtNy41LTEuNCAwLTIuNzQuMjUtMy45OC43bDIuMTYgMi4xNkMxMC43NCA3LjEzIDExLjM1IDcgMTIgN3pNMiA0LjI3bDIuMjggMi4yOC40Ni40NkMzLjA4IDguMyAxLjc4IDEwLjAyIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNSAxLjU1IDAgMy4wMy0uMyA0LjM4LS44NGwuNDIuNDJMMTkuNzMgMjIgMjEgMjAuNzMgMy4yNyAzIDIgNC4yN3pNNy41MyA5LjhsMS41NSAxLjU1Yy0uMDUuMjEtLjA4LjQzLS4wOC42NSAwIDEuNjYgMS4zNCAzIDMgMyAuMjIgMCAuNDQtLjAzLjY1LS4wOGwxLjU1IDEuNTVjLS42Ny4zMy0xLjQxLjUzLTIuMi41My0yLjc2IDAtNS0yLjI0LTUtNSAwLS43OS4yLTEuNTMuNTMtMi4yem00LjMxLS43OGwzLjE1IDMuMTUuMDItLjE2YzAtMS42Ni0xLjM0LTMtMy0zbC0uMTcuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2FybmluZyI+PHBhdGggZD0iTTEgMjFoMjJMMTIgMiAxIDIxem0xMi0zaC0ydi0yaDJ2MnptMC00aC0ydi00aDJ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXRjaC1sYXRlciI+PHBhdGggZD0iTTEyIDJDNi41IDIgMiA2LjUgMiAxMnM0LjUgMTAgMTAgMTAgMTAtNC41IDEwLTEwUzE3LjUgMiAxMiAyem00LjIgMTQuMkwxMSAxM1Y3aDEuNXY1LjJsNC41IDIuNy0uOCAxLjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2Vla2VuZCI+PHBhdGggZD0iTTIxIDEwYy0xLjEgMC0yIC45LTIgMnYzSDV2LTNjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAydjVjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtNWMwLTEuMS0uOS0yLTItMnptLTMtNUg2Yy0xLjEgMC0yIC45LTIgMnYyLjE1YzEuMTYuNDEgMiAxLjUxIDIgMi44MlYxNGgxMnYtMi4wM2MwLTEuMy44NC0yLjQgMi0yLjgyVjdjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id29yayI+PHBhdGggZD0iTTIwIDZoLTRWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNiAwaC00VjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InlvdXR1YmUtc2VhcmNoZWQtZm9yIj48cGF0aCBkPSJNMTcuMDEgMTRoLS44bC0uMjctLjI3Yy45OC0xLjE0IDEuNTctMi42MSAxLjU3LTQuMjMgMC0zLjU5LTIuOTEtNi41LTYuNS02LjVzLTYuNSAzLTYuNSA2LjVIMmwzLjg0IDQgNC4xNi00SDYuNTFDNi41MSA3IDguNTMgNSAxMS4wMSA1czQuNSAyLjAxIDQuNSA0LjVjMCAyLjQ4LTIuMDIgNC41LTQuNSA0LjUtLjY1IDAtMS4yNi0uMTQtMS44Mi0uMzhMNy43MSAxNS4xYy45Ny41NyAyLjA5LjkgMy4zLjkgMS42MSAwIDMuMDgtLjU5IDQuMjItMS41N2wuMjcuMjd2Ljc5bDUuMDEgNC45OUwyMiAxOWwtNC45OS01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20taW4iPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0em0yLjUtNGgtMnYySDl2LTJIN1Y5aDJWN2gxdjJoMnYxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Inpvb20tb3V0Ij48cGF0aCBkPSJNMTUuNSAxNGgtLjc5bC0uMjgtLjI3QzE1LjQxIDEyLjU5IDE2IDExLjExIDE2IDkuNSAxNiA1LjkxIDEzLjA5IDMgOS41IDNTMyA1LjkxIDMgOS41IDUuOTEgMTYgOS41IDE2YzEuNjEgMCAzLjA5LS41OSA0LjIzLTEuNTdsLjI3LjI4di43OWw1IDQuOTlMMjAuNDkgMTlsLTQuOTktNXptLTYgMEM3LjAxIDE0IDUgMTEuOTkgNSA5LjVTNy4wMSA1IDkuNSA1IDE0IDcuMDEgMTQgOS41IDExLjk5IDE0IDkuNSAxNHpNNyA5aDV2MUg3eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1iZS5jb250ZW50KTt2YXIgS2d0PXsiVSswMDA4IjoiYmFja3NwYWNlIiwiVSswMDA5IjoidGFiIiwiVSswMDFCIjoiZXNjIiwiVSswMDIwIjoic3BhY2UiLCJVKzAwN0YiOiJkZWwifSxnYmU9ezg6ImJhY2tzcGFjZSIsOToidGFiIiwxMzoiZW50ZXIiLDI3OiJlc2MiLDMzOiJwYWdldXAiLDM0OiJwYWdlZG93biIsMzU6ImVuZCIsMzY6ImhvbWUiLDMyOiJzcGFjZSIsMzc6ImxlZnQiLDM4OiJ1cCIsMzk6InJpZ2h0Iiw0MDoiZG93biIsNDY6ImRlbCIsMTA2OiIqIn0sWmd0PXtzaGlmdDoic2hpZnRLZXkiLGN0cmw6ImN0cmxLZXkiLGFsdDoiYWx0S2V5IixtZXRhOiJtZXRhS2V5In0sX2JlPS9bYS16MC05Kl0vLHliZT0vVVwrLyx2YmU9L15hcnJvdy8seGJlPS9ec3BhY2UoYmFyKT8vLGJiZT0vXmVzY2FwZSQvO2Z1bmN0aW9uIEpndChlLHQpe3ZhciByPSIiO2lmKGUpe3ZhciBuPWUudG9Mb3dlckNhc2UoKTtuPT09IiAifHx4YmUudGVzdChuKT9yPSJzcGFjZSI6YmJlLnRlc3Qobik/cj0iZXNjIjpuLmxlbmd0aD09MT8oIXR8fF9iZS50ZXN0KG4pKSYmKHI9bik6dmJlLnRlc3Qobik/cj1uLnJlcGxhY2UoImFycm93IiwiIik6bj09Im11bHRpcGx5Ij9yPSIqIjpyPW59cmV0dXJuIHJ9ZnVuY3Rpb24gd2JlKGUpe3ZhciB0PSIiO3JldHVybiBlJiYoZSBpbiBLZ3Q/dD1LZ3RbZV06eWJlLnRlc3QoZSk/KGU9cGFyc2VJbnQoZS5yZXBsYWNlKCJVKyIsIjB4IiksMTYpLHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKS50b0xvd2VyQ2FzZSgpKTp0PWUudG9Mb3dlckNhc2UoKSksdH1mdW5jdGlvbiBTYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIE51bWJlcihlKSYmKGU+PTY1JiZlPD05MD90PVN0cmluZy5mcm9tQ2hhckNvZGUoMzIrZSk6ZT49MTEyJiZlPD0xMjM/dD0iZiIrKGUtMTEyKzEpOmU+PTQ4JiZlPD01Nz90PVN0cmluZyhlLTQ4KTplPj05NiYmZTw9MTA1P3Q9U3RyaW5nKGUtOTYpOnQ9Z2JlW2VdKSx0fWZ1bmN0aW9uIE1iZShlLHQpe3JldHVybiBlLmtleT9KZ3QoZS5rZXksdCk6ZS5kZXRhaWwmJmUuZGV0YWlsLmtleT9KZ3QoZS5kZXRhaWwua2V5LHQpOndiZShlLmtleUlkZW50aWZpZXIpfHxTYmUoZS5rZXlDb2RlKXx8IiJ9ZnVuY3Rpb24gUWd0KGUsdCl7dmFyIHI9TWJlKHQsZS5oYXNNb2RpZmllcnMpO3JldHVybiByPT09ZS5rZXkmJighZS5oYXNNb2RpZmllcnN8fCEhdC5zaGlmdEtleT09ISFlLnNoaWZ0S2V5JiYhIXQuY3RybEtleT09ISFlLmN0cmxLZXkmJiEhdC5hbHRLZXk9PSEhZS5hbHRLZXkmJiEhdC5tZXRhS2V5PT0hIWUubWV0YUtleSl9ZnVuY3Rpb24gRWJlKGUpe3JldHVybiBlLmxlbmd0aD09PTE/e2NvbWJvOmUsa2V5OmUsZXZlbnQ6ImtleWRvd24ifTplLnNwbGl0KCIrIikucmVkdWNlKGZ1bmN0aW9uKHQscil7dmFyIG49ci5zcGxpdCgiOiIpLGk9blswXSxvPW5bMV07cmV0dXJuIGkgaW4gWmd0Pyh0W1pndFtpXV09ITAsdC5oYXNNb2RpZmllcnM9ITApOih0LmtleT1pLHQuZXZlbnQ9b3x8ImtleWRvd24iKSx0fSx7Y29tYm86ZS5zcGxpdCgiOiIpLnNoaWZ0KCl9KX1mdW5jdGlvbiB0MHQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KCIgIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiBFYmUodCl9KX12YXIgT289e3Byb3BlcnRpZXM6e2tleUV2ZW50VGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm91bmRLZXlIYW5kbGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2ltcGVyYXRpdmVLZXlCaW5kaW5nczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19fSxvYnNlcnZlcnM6WyJfcmVzZXRLZXlFdmVudExpc3RlbmVycyhrZXlFdmVudFRhcmdldCwgX2JvdW5kS2V5SGFuZGxlcnMpIl0sa2V5QmluZGluZ3M6e30scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3ByZXBLZXlCaW5kaW5ncygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpfSxhZGRPd25LZXlCaW5kaW5nOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzW2VdPXQsdGhpcy5fcHJlcEtleUJpbmRpbmdzKCksdGhpcy5fcmVzZXRLZXlFdmVudExpc3RlbmVycygpfSxyZW1vdmVPd25LZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5ncz17fSx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LGtleWJvYXJkRXZlbnRNYXRjaGVzS2V5czpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10MHQodCksbj0wO248ci5sZW5ndGg7KytuKWlmKFFndChyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxfY29sbGVjdEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5iZWhhdmlvcnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleUJpbmRpbmdzfSk7cmV0dXJuIGUuaW5kZXhPZih0aGlzLmtleUJpbmRpbmdzKT09PS0xJiZlLnB1c2godGhpcy5rZXlCaW5kaW5ncyksZX0sX3ByZXBLZXlCaW5kaW5nczpmdW5jdGlvbigpe3RoaXMuX2tleUJpbmRpbmdzPXt9LHRoaXMuX2NvbGxlY3RLZXlCaW5kaW5ncygpLmZvckVhY2goZnVuY3Rpb24ocil7Zm9yKHZhciBuIGluIHIpdGhpcy5fYWRkS2V5QmluZGluZyhuLHJbbl0pfSx0aGlzKTtmb3IodmFyIGUgaW4gdGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzKXRoaXMuX2FkZEtleUJpbmRpbmcoZSx0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV0pO2Zvcih2YXIgdCBpbiB0aGlzLl9rZXlCaW5kaW5ncyl0aGlzLl9rZXlCaW5kaW5nc1t0XS5zb3J0KGZ1bmN0aW9uKHIsbil7dmFyIGk9clswXS5oYXNNb2RpZmllcnMsbz1uWzBdLmhhc01vZGlmaWVycztyZXR1cm4gaT09PW8/MDppPy0xOjF9KX0sX2FkZEtleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXt0MHQoZSkuZm9yRWFjaChmdW5jdGlvbihyKXt0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XT10aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XXx8W10sdGhpcy5fa2V5QmluZGluZ3Nbci5ldmVudF0ucHVzaChbcix0XSl9LHRoaXMpfSxfcmVzZXRLZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX3VubGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LF9saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpeyF0aGlzLmtleUV2ZW50VGFyZ2V0fHxPYmplY3Qua2V5cyh0aGlzLl9rZXlCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlCaW5kaW5nc1tlXSxyPXRoaXMuX29uS2V5QmluZGluZ0V2ZW50LmJpbmQodGhpcyx0KTt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLnB1c2goW3RoaXMua2V5RXZlbnRUYXJnZXQsZSxyXSksdGhpcy5rZXlFdmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUscil9LHRoaXMpfSxfdW5saXN0ZW5LZXlFdmVudExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0LHIsbjt0aGlzLl9ib3VuZEtleUhhbmRsZXJzLmxlbmd0aDspZT10aGlzLl9ib3VuZEtleUhhbmRsZXJzLnBvcCgpLHQ9ZVswXSxyPWVbMV0sbj1lWzJdLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihyLG4pfSxfb25LZXlCaW5kaW5nRXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnN0b3BLZXlib2FyZEV2ZW50UHJvcGFnYXRpb24mJnQuc3RvcFByb3BhZ2F0aW9uKCksIXQuZGVmYXVsdFByZXZlbnRlZClmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXVswXSxpPWVbcl1bMV07aWYoUWd0KG4sdCkmJih0aGlzLl90cmlnZ2VyS2V5SGFuZGxlcihuLGksdCksdC5kZWZhdWx0UHJldmVudGVkKSlyZXR1cm59fSxfdHJpZ2dlcktleUhhbmRsZXI6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPU9iamVjdC5jcmVhdGUoZSk7bi5rZXlib2FyZEV2ZW50PXI7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KGUuZXZlbnQse2RldGFpbDpuLGNhbmNlbGFibGU6ITB9KTt0aGlzW3RdLmNhbGwodGhpcyxpKSxpLmRlZmF1bHRQcmV2ZW50ZWQmJnIucHJldmVudERlZmF1bHQoKX19O3ZhciB2OT17cHJvcGVydGllczp7c2Nyb2xsVGFyZ2V0Ont0eXBlOkhUTUxFbGVtZW50LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRTY3JvbGxUYXJnZXR9fX0sb2JzZXJ2ZXJzOlsiX3Njcm9sbFRhcmdldENoYW5nZWQoc2Nyb2xsVGFyZ2V0LCBpc0F0dGFjaGVkKSJdLF9zaG91bGRIYXZlTGlzdGVuZXI6ITAsX3Njcm9sbFRhcmdldENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0aGlzLl9vbGRTY3JvbGxUYXJnZXQmJih0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcighMSx0aGlzLl9vbGRTY3JvbGxUYXJnZXQpLHRoaXMuX29sZFNjcm9sbFRhcmdldD1udWxsKSwhIXQpaWYoZT09PSJkb2N1bWVudCIpdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy5fZG9jO2Vsc2UgaWYodHlwZW9mIGU9PSJzdHJpbmciKXt2YXIgbj10aGlzLmRvbUhvc3Q7dGhpcy5zY3JvbGxUYXJnZXQ9biYmbi4kP24uJFtlXTp6dCh0aGlzLm93bmVyRG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3IoIiMiK2UpfWVsc2UgdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIodGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyLGUpKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzLl9kb2N9LGdldCBfZG9jKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGdldCBfc2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVlPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wOjB9LGdldCBfc2Nyb2xsTGVmdCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnBhZ2VYT2Zmc2V0OnRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ6MH0sc2V0IF9zY3JvbGxUb3AoZSl7dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHdpbmRvdy5wYWdlWE9mZnNldCxlKTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A9ZSl9LHNldCBfc2Nyb2xsTGVmdChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8oZSx3aW5kb3cucGFnZVlPZmZzZXQpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbExlZnQ9ZSl9LHNjcm9sbDpmdW5jdGlvbihlLHQpe3ZhciByO3R5cGVvZiBlPT0ib2JqZWN0Ij8ocj1lLmxlZnQsdD1lLnRvcCk6cj1lLHI9cnx8MCx0PXR8fDAsdGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LnNjcm9sbFRvKHIsdCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1yLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD10KX0sZ2V0IF9zY3JvbGxUYXJnZXRXaWR0aCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVyV2lkdGg6dGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0V2lkdGg6MH0sZ2V0IF9zY3JvbGxUYXJnZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ6MH0sX2lzVmFsaWRTY3JvbGxUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zY3JvbGxUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudH0sX3RvZ2dsZVNjcm9sbExpc3RlbmVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dD09PXRoaXMuX2RvYz93aW5kb3c6dDtlP3RoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcnx8KHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGxIYW5kbGVyLmJpbmQodGhpcyksci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcikpOnRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLl9ib3VuZFNjcm9sbEhhbmRsZXIpLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlcj1udWxsKX0sdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2hvdWxkSGF2ZUxpc3RlbmVyPWUsdGhpcy5fdG9nZ2xlU2Nyb2xsTGlzdGVuZXIoZSx0aGlzLnNjcm9sbFRhcmdldCl9fTt2YXIgZTB0PW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQKD86aG9uZXxhZDsoPzogVTspPyBDUFUpIE9TIChcZCspLyksVGJlPWUwdCYmZTB0WzFdPj04LHIwdD0zLG4wdD0iLTEwMDAwcHgiLGZFPS0xMDA7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbzogMSkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgfQogICAgICB9CgogICAgICAjaXRlbXMgewogICAgICAgIEBhcHBseSAtLWlyb24tbGlzdC1pdGVtcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtncmlkXSkpICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgICNpdGVtcyA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxhcnJheS1zZWxlY3RvciBpZD0ic2VsZWN0b3IiIGl0ZW1zPSJ7e2l0ZW1zfX0iIHNlbGVjdGVkPSJ7e3NlbGVjdGVkSXRlbXN9fSIgc2VsZWN0ZWQtaXRlbT0ie3tzZWxlY3RlZEl0ZW19fSI+PC9hcnJheS1zZWxlY3Rvcj4KCiAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWxpc3QiLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5fSxhczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW0ifSxpbmRleEFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5kZXgifSxzZWxlY3RlZEFzOnt0eXBlOlN0cmluZyx2YWx1ZToic2VsZWN0ZWQifSxncmlkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZ3JpZENoYW5nZWQifSxzZWxlY3Rpb25FbmFibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LG11bHRpU2VsZWN0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19LG9ic2VydmVyczpbIl9pdGVtc0NoYW5nZWQoaXRlbXMuKikiLCJfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQoc2VsZWN0aW9uRW5hYmxlZCkiLCJfbXVsdGlTZWxlY3Rpb25DaGFuZ2VkKG11bHRpU2VsZWN0aW9uKSIsIl9zZXRPdmVyZmxvdyhzY3JvbGxUYXJnZXQsIHNjcm9sbE9mZnNldCkiXSxiZWhhdmlvcnM6W1ZndCxKcyx2OSxZZ3RdLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkSXRlbTpudWxsLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF9mb2N1c2VkUGh5c2ljYWxJbmRleDotMSxfb2Zmc2NyZWVuRm9jdXNlZEl0ZW06bnVsbCxfZm9jdXNCYWNrZmlsbEl0ZW06bnVsbCxfaXRlbXNQZXJSb3c6MSxfaXRlbVdpZHRoOjAsX3Jvd0hlaWdodDowLF90ZW1wbGF0ZUNvc3Q6MCxfcGFyZW50TW9kZWw6ITAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3ZhciBlPXRoaXMuZ3JpZD90aGlzLl9waHlzaWNhbFJvd3MqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZTtyZXR1cm4gZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9pdGVtc1BhcmVudCgpe3JldHVybiB6dCh6dCh0aGlzLl91c2VyVGVtcGxhdGUpLnBhcmVudE5vZGUpfSxnZXQgX21heFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fdmlld3BvcnRIZWlnaHQrdGhpcy5fc2Nyb2xsT2Zmc2V0fSxnZXQgX21heFZpcnR1YWxTdGFydCgpe3ZhciBlPXRoaXMuX2NvbnZlcnRJbmRleFRvQ29tcGxldGVSb3codGhpcy5fdmlydHVhbENvdW50KTtyZXR1cm4gTWF0aC5tYXgoMCxlLXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl92aXJ0dWFsU3RhcnRWYWw9ZX0sZ2V0IF92aXJ0dWFsU3RhcnQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0VmFsfHwwfSxzZXQgX3BoeXNpY2FsU3RhcnQoZSl7ZT1lJXRoaXMuX3BoeXNpY2FsQ291bnQsZTwwJiYoZT10aGlzLl9waHlzaWNhbENvdW50K2UpLHRoaXMuZ3JpZCYmKGU9ZS1lJXRoaXMuX2l0ZW1zUGVyUm93KSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe3ZhciBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe3ZhciB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKSx0PnRoaXMuX3Njcm9sbFBvc2l0aW9uKXJldHVybiB0aGlzLmdyaWQ/bi1uJXRoaXMuX2l0ZW1zUGVyUm93Om47aWYodGhpcy5ncmlkJiZ0aGlzLl92aXJ0dWFsQ291bnQtMT09PW4pcmV0dXJuIG4tbiV0aGlzLl9pdGVtc1BlclJvd30pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtpZih0aGlzLmdyaWQpZT1NYXRoLm1pbih0aGlzLl92aXJ0dWFsQ291bnQsdGhpcy5maXJzdFZpc2libGVJbmRleCt0aGlzLl9lc3RSb3dzSW5WaWV3KnRoaXMuX2l0ZW1zUGVyUm93LTEpO2Vsc2V7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9KX10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfZGVmYXVsdFNjcm9sbFRhcmdldCgpe3JldHVybiB0aGlzfSxnZXQgX3ZpcnR1YWxSb3dDb3VudCgpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fdmlydHVhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9lc3RSb3dzSW5WaWV3KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aWV3cG9ydEhlaWdodC90aGlzLl9yb3dIZWlnaHQpfSxnZXQgX3BoeXNpY2FsUm93cygpe3JldHVybiBNYXRoLmNlaWwodGhpcy5fcGh5c2ljYWxDb3VudC90aGlzLl9pdGVtc1BlclJvdyl9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcCt0aGlzLnNjcm9sbE9mZnNldH0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9kaWRGb2N1cy5iaW5kKHRoaXMpLCEwKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpLHRoaXMudW5saXN0ZW4odGhpcywia2V5ZG93biIsIl9rZXlkb3duSGFuZGxlciIpfSxfc2V0T3ZlcmZsb3c6ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz1lPT09dGhpcz8idG91Y2giOiIiLHRoaXMuc3R5bGUub3ZlcmZsb3dZPWU9PT10aGlzPyJhdXRvIjoiIix0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX0sdXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7dGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wPXRoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcz8wOnBhcnNlSW50KGVbInBhZGRpbmctdG9wIl0sMTApLHRoaXMuX2lzUlRMPUJvb2xlYW4oZS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fdmlld3BvcnRXaWR0aD10aGlzLiQuaXRlbXMub2Zmc2V0V2lkdGgsdGhpcy5fdmlld3BvcnRIZWlnaHQ9dGhpcy5fc2Nyb2xsVGFyZ2V0SGVpZ2h0LHRoaXMuZ3JpZCYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKX0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDt2YXIgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKSp0aGlzLl9pdGVtc1BlclJvdzt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5taW4oTWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl9zY3JvbGxQb3NpdGlvbiksdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe3ZhciBpPXRoaXMuX2dldFJldXNhYmxlcyhyKTtyPyh0aGlzLl9waHlzaWNhbFRvcD1pLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQraS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5pbmRleGVzLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQtaS5pbmRleGVzLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkuaW5kZXhlcyxyP251bGw6aS5pbmRleGVzKSx0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsMCksbGkpfX0sX2dldFJldXNhYmxlczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxvPVtdLGE9dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8scz10aGlzLl92aXJ0dWFsU3RhcnQsbD10aGlzLl92aXJ0dWFsRW5kLGM9dGhpcy5fcGh5c2ljYWxDb3VudCx1PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxmPXRoaXMuX3Njcm9sbFBvc2l0aW9uLHA9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl9waHlzaWNhbEVuZCxuPWYtdSk6KHQ9dGhpcy5fcGh5c2ljYWxFbmQscj10aGlzLl9waHlzaWNhbFN0YXJ0LG49aC1wKTtpPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudCh0KSxuPW4taSwhKG8ubGVuZ3RoPj1jfHxuPD1hKTspaWYoZSl7aWYobCtvLmxlbmd0aCsxPj10aGlzLl92aXJ0dWFsQ291bnR8fHUraT49Zi10aGlzLl9zY3JvbGxPZmZzZXQpYnJlYWs7by5wdXNoKHQpLHU9dStpLHQ9KHQrMSklY31lbHNle2lmKHMtby5sZW5ndGg8PTB8fHUrdGhpcy5fcGh5c2ljYWxTaXplLWk8PXApYnJlYWs7by5wdXNoKHQpLHU9dS1pLHQ9dD09PTA/Yy0xOnQtMX1yZXR1cm57aW5kZXhlczpvLHBoeXNpY2FsVG9wOnUtdGhpcy5fc2Nyb2xsT2Zmc2V0fX0sX3VwZGF0ZTpmdW5jdGlvbihlLHQpe2lmKCEoZSYmZS5sZW5ndGg9PT0wfHx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpe2lmKHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7dmFyIHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9jcmVhdGVQb29sOmZ1bmN0aW9uKGUpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7dmFyIHQscixuPW5ldyBBcnJheShlKTtmb3IodD0wO3Q8ZTt0Kyspcj10aGlzLnN0YW1wKG51bGwpLG5bdF09ci5yb290LnF1ZXJ5U2VsZWN0b3IoIioiKSx0aGlzLl9pdGVtc1BhcmVudC5hcHBlbmRDaGlsZChyLnJvb3QpO3JldHVybiBufSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UscjB0LHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpO2lmKHQ9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0KSx0aGlzLmdyaWQpe3ZhciByPXQldGhpcy5faXRlbXNQZXJSb3c7ciYmdC1yPD10aGlzLl9waHlzaWNhbENvdW50JiYodCs9dGhpcy5faXRlbXNQZXJSb3cpLHQtPXJ9dmFyIG49dC10aGlzLl9waHlzaWNhbENvdW50LGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KTtpZighKG48MCkpe2lmKG4+MCl7dmFyIG89d2luZG93LnBlcmZvcm1hbmNlLm5vdygpO1tdLnB1c2guYXBwbHkodGhpcy5fcGh5c2ljYWxJdGVtcyx0aGlzLl9jcmVhdGVQb29sKG4pKTtmb3IodmFyIGE9MDthPG47YSsrKXRoaXMuX3BoeXNpY2FsU2l6ZXMucHVzaCgwKTt0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PnRoaXMuX3BoeXNpY2FsRW5kJiZ0aGlzLl9pc0luZGV4UmVuZGVyZWQodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCkmJnRoaXMuX2dldFBoeXNpY2FsSW5kZXgodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCk8dGhpcy5fcGh5c2ljYWxFbmQmJih0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbiksdGhpcy5fdXBkYXRlKCksdGhpcy5fdGVtcGxhdGVDb3N0PSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCktbykvbixpPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSl9dGhpcy5fdmlydHVhbEVuZD49dGhpcy5fdmlydHVhbENvdW50LTF8fGk9PT0wfHwodGhpcy5faXNDbGllbnRGdWxsKCk/dGhpcy5fcGh5c2ljYWxTaXplPHRoaXMuX29wdFBoeXNpY2FsU2l6ZSYmdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLHRoaXMuX2NsYW1wKE1hdGgucm91bmQoNTAvdGhpcy5fdGVtcGxhdGVDb3N0KSwxLGkpKSxreCk6dGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLGkpLGxpKSl9fSxfcmVuZGVyOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5pc0F0dGFjaGVkfHwhdGhpcy5faXNWaXNpYmxlKSlpZih0aGlzLl9waHlzaWNhbENvdW50IT09MCl7dmFyIGU9dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLnBoeXNpY2FsVG9wLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrZS5pbmRleGVzLmxlbmd0aCx0aGlzLl91cGRhdGUoZS5pbmRleGVzKSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChyMHQpKX0sX2Vuc3VyZVRlbXBsYXRpemVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Rvcil7dGhpcy5fdXNlclRlbXBsYXRlPXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigidGVtcGxhdGUiKSx0aGlzLl91c2VyVGVtcGxhdGV8fGNvbnNvbGUud2FybigiaXJvbi1saXN0IHJlcXVpcmVzIGEgdGVtcGxhdGUgdG8gYmUgcHJvdmlkZWQgaW4gbGlnaHQtZG9tIik7dmFyIGU9e307ZS5fX2tleV9fPSEwLGVbdGhpcy5hc109ITAsZVt0aGlzLmluZGV4QXNdPSEwLGVbdGhpcy5zZWxlY3RlZEFzXT0hMCxlLnRhYkluZGV4PSEwLHRoaXMuX2luc3RhbmNlUHJvcHM9ZSx0aGlzLnRlbXBsYXRpemUodGhpcy5fdXNlclRlbXBsYXRlLHRoaXMubXV0YWJsZURhdGEpfX0sX2dyaWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dHlwZW9mIHQhPSJ1bmRlZmluZWQiJiYodGhpcy5ub3RpZnlSZXNpemUoKSxjaSgpLGUmJnRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCkpfSxfaXRlbXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe2lmKGUucGF0aD09PSJpdGVtcyIpdGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9yZW1vdmVGb2N1c2VkSXRlbSgpLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpO2Vsc2UgaWYoZS5wYXRoPT09Iml0ZW1zLnNwbGljZXMiKXt0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXgoZS52YWx1ZS5pbmRleFNwbGljZXMpLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjA7dmFyIHQ9ZS52YWx1ZS5pbmRleFNwbGljZXMuc29tZShmdW5jdGlvbihpKXtyZXR1cm4gaS5hZGRlZENvdW50PjB8fGkucmVtb3ZlZC5sZW5ndGg+MH0pO2lmKHQpe3ZhciByPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKTt0aGlzLmNvbnRhaW5zKHIpJiZyLmJsdXIoKX12YXIgbj1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmluZGV4K2kuYWRkZWRDb3VudD49dGhpcy5fdmlydHVhbFN0YXJ0JiZpLmluZGV4PD10aGlzLl92aXJ0dWFsRW5kfSx0aGlzKTsoIXRoaXMuX2lzQ2xpZW50RnVsbCgpfHxuKSYmdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSl9ZWxzZSBlLnBhdGghPT0iaXRlbXMubGVuZ3RoIiYmdGhpcy5fZm9yd2FyZEl0ZW1QYXRoKGUucGF0aCxlLnZhbHVlKX0sX2ZvcndhcmRJdGVtUGF0aDpmdW5jdGlvbihlLHQpe2U9ZS5zbGljZSg2KTt2YXIgcj1lLmluZGV4T2YoIi4iKTtyPT09LTEmJihyPWUubGVuZ3RoKTt2YXIgbixpLG8sYT10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkscz1wYXJzZUludChlLnN1YnN0cmluZygwLHIpLDEwKTtuPXRoaXMuX2lzSW5kZXhSZW5kZXJlZChzKSxuPyhpPXRoaXMuX2dldFBoeXNpY2FsSW5kZXgocyksbz10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW2ldKSk6YSYmKG89YSksISghb3x8b1t0aGlzLmluZGV4QXNdIT09cykmJihlPWUuc3Vic3RyaW5nKHIrMSksZT10aGlzLmFzKyhlPyIuIitlOiIiKSxvLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoZSx0LCExLCEwKSxvLl9mbHVzaFByb3BlcnRpZXMmJm8uX2ZsdXNoUHJvcGVydGllcygpLG4mJih0aGlzLl91cGRhdGVNZXRyaWNzKFtpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpKSl9LF9hZGp1c3RWaXJ0dWFsSW5kZXg6ZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKHQucmVtb3ZlZC5mb3JFYWNoKHRoaXMuX3JlbW92ZUl0ZW0sdGhpcyksdC5pbmRleDx0aGlzLl92aXJ0dWFsU3RhcnQpe3ZhciByPU1hdGgubWF4KHQuYWRkZWRDb3VudC10LnJlbW92ZWQubGVuZ3RoLHQuaW5kZXgtdGhpcy5fdmlydHVhbFN0YXJ0KTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3IsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD49MCYmKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCtyKX19LHRoaXMpfSxfcmVtb3ZlSXRlbTpmdW5jdGlvbihlKXt0aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3QoZSksdGhpcy5fZm9jdXNlZEl0ZW0mJnRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX2ZvY3VzZWRJdGVtKVt0aGlzLmFzXT09PWUmJnRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF9hc3NpZ25Nb2RlbHM6ZnVuY3Rpb24oZSl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5fcGh5c2ljYWxJdGVtc1t0XSxpPXRoaXMuaXRlbXMmJnRoaXMuaXRlbXNbcl07aWYoaSE9bnVsbCl7dmFyIG89dGhpcy5tb2RlbEZvckVsZW1lbnQobik7by5fX2tleV9fPW51bGwsdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5hcyxpKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLnNlbGVjdGVkQXMsdGhpcy4kLnNlbGVjdG9yLmlzU2VsZWN0ZWQoaSkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuaW5kZXhBcyxyKSx0aGlzLl9mb3J3YXJkUHJvcGVydHkobywidGFiSW5kZXgiLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9PT1yPzA6LTEpLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXlbby5fX2tleV9fXT10LG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCEwKSxuLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9ZWxzZSBuLnNldEF0dHJpYnV0ZSgiaGlkZGVuIiwiIil9LGUpfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtjaSgpO3ZhciB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8sYSl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLmdyaWQ/KHRoaXMuX3VwZGF0ZUdyaWRNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxTaXplPU1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQpOihyPXRoaXMuX2l0ZW1zUGVyUm93PT09MT9yOk1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9yb3dIZWlnaHQsdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5faXRlbXNQZXJSb3c9MSksdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfdXBkYXRlR3JpZE1ldHJpY3M6ZnVuY3Rpb24oKXt0aGlzLl9pdGVtV2lkdGg9dGhpcy5fcGh5c2ljYWxDb3VudD4wP3RoaXMuX3BoeXNpY2FsSXRlbXNbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg6MjAwLHRoaXMuX3Jvd0hlaWdodD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5vZmZzZXRIZWlnaHQ6MjAwLHRoaXMuX2l0ZW1zUGVyUm93PXRoaXMuX2l0ZW1XaWR0aD9NYXRoLmZsb29yKHRoaXMuX3ZpZXdwb3J0V2lkdGgvdGhpcy5faXRlbVdpZHRoKTp0aGlzLl9pdGVtc1BlclJvd30sX3Bvc2l0aW9uSXRlbXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO3ZhciBlPXRoaXMuX3BoeXNpY2FsVG9wO2lmKHRoaXMuZ3JpZCl7dmFyIHQ9dGhpcy5faXRlbXNQZXJSb3cqdGhpcy5faXRlbVdpZHRoLHI9KHRoaXMuX3ZpZXdwb3J0V2lkdGgtdCkvMjt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obixpKXt2YXIgbz1pJXRoaXMuX2l0ZW1zUGVyUm93LGE9TWF0aC5mbG9vcihvKnRoaXMuX2l0ZW1XaWR0aCtyKTt0aGlzLl9pc1JUTCYmKGE9YSotMSksdGhpcy50cmFuc2xhdGUzZChhKyJweCIsZSsicHgiLDAsdGhpcy5fcGh5c2ljYWxJdGVtc1tuXSksdGhpcy5fc2hvdWxkUmVuZGVyTmV4dFJvdyhpKSYmKGUrPXRoaXMuX3Jvd0hlaWdodCl9KX1lbHNle2xldCBuPVtdO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLGEpLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbaV07bGV0IHM9YS5pZDtzJiZuLnB1c2gocyl9KSxuLmxlbmd0aCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtb3ducyIsbi5qb2luKCIgIikpfX0sX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5ncmlkP3RoaXMuX2NvbXB1dGVWaWR4KGUpJXRoaXMuX2l0ZW1zUGVyUm93IT09dGhpcy5faXRlbXNQZXJSb3ctMT8wOnRoaXMuX3Jvd0hlaWdodDp0aGlzLl9waHlzaWNhbFNpemVzW2VdfSxfc2hvdWxkUmVuZGVyTmV4dFJvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSV0aGlzLl9pdGVtc1BlclJvdz09PXRoaXMuX2l0ZW1zUGVyUm93LTF9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7dmFyIHQ9dGhpcy5fc2Nyb2xsUG9zaXRpb247IVRiZSYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5ncmlkP3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl92aXJ0dWFsUm93Q291bnQqdGhpcy5fcm93SGVpZ2h0OnRoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLGU9ZXx8dGhpcy5ncmlkJiZ0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PHRoaXMuX2VzdFNjcm9sbEhlaWdodCwoZXx8TWF0aC5hYnModGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3Njcm9sbEhlaWdodCk+PXRoaXMuX3ZpZXdwb3J0SGVpZ2h0KSYmKHRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KyJweCIsdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCl9LHNjcm9sbFRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zY3JvbGxUb0luZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHNjcm9sbFRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYoISh0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xKSYmKGNpKCksdGhpcy5fcGh5c2ljYWxDb3VudCE9PTApKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl92aXJ0dWFsQ291bnQtMSksKCF0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fGU+PXRoaXMuX21heFZpcnR1YWxTdGFydCkmJih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5ncmlkP2UtdGhpcy5faXRlbXNQZXJSb3cqMjplLTEpLHRoaXMuX21hbmFnZUZvY3VzKCksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0L3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7Zm9yKHZhciB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7cjxlJiZuPD1pOyluPW4rdGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9fSxfcmVzZXRBdmVyYWdlOmZ1bmN0aW9uKCl7dGhpcy5fcGh5c2ljYWxBdmVyYWdlPTAsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQ9MH0sX3Jlc2l6ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsZnVuY3Rpb24oKXt0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9pc1Zpc2libGU/KHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMCksdGhpcy5fcmVzZXRBdmVyYWdlKCksdGhpcy5fcmVuZGVyKCkpOnRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITEpfSxOaSl9LHNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7aWYoIShlPDB8fGU+PXRoaXMuX3ZpcnR1YWxDb3VudCkpe2lmKCF0aGlzLm11bHRpU2VsZWN0aW9uJiZ0aGlzLnNlbGVjdGVkSXRlbSYmdGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSk7dCYmKHRbdGhpcy5zZWxlY3RlZEFzXT0hMCksdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLnNlbGVjdEluZGV4KGUpfX0sZGVzZWxlY3RJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc2VsZWN0SW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sZGVzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYodGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0W3RoaXMuc2VsZWN0ZWRBc109ITEsdGhpcy51cGRhdGVTaXplRm9ySW5kZXgoZSl9dGhpcy4kLnNlbGVjdG9yLmRlc2VsZWN0SW5kZXgoZSl9fSx0b2dnbGVTZWxlY3Rpb25Gb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihlKSl9LHRvZ2dsZVNlbGVjdGlvbkZvckluZGV4OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rvci5pc0luZGV4U2VsZWN0ZWQ/dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZChlKTp0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZCh0aGlzLml0ZW1zW2VdKTt0P3RoaXMuZGVzZWxlY3RJbmRleChlKTp0aGlzLnNlbGVjdEluZGV4KGUpfSxjbGVhclNlbGVjdGlvbjpmdW5jdGlvbigpe3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihlLHQpe3RoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbZV0pW3RoaXMuc2VsZWN0ZWRBc109ITF9KSx0aGlzLiQuc2VsZWN0b3IuY2xlYXJTZWxlY3Rpb24oKX0sX3NlbGVjdGlvbkVuYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWU/dGhpcy5saXN0ZW46dGhpcy51bmxpc3Rlbjt0LmNhbGwodGhpcyx0aGlzLCJ0YXAiLCJfc2VsZWN0aW9uSGFuZGxlciIpfSxfc2VsZWN0aW9uSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCk7aWYoISF0KXt2YXIgcixuLGk9enQoZSkucGF0aFswXSxvPXRoaXMuX2dldEFjdGl2ZUVsZW1lbnQoKSxhPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0W3RoaXMuaW5kZXhBc10pXTtpLmxvY2FsTmFtZT09PSJpbnB1dCJ8fGkubG9jYWxOYW1lPT09ImJ1dHRvbiJ8fGkubG9jYWxOYW1lPT09InNlbGVjdCJ8fChyPXQudGFiSW5kZXgsdC50YWJJbmRleD1mRSxuPW8/by50YWJJbmRleDotMSx0LnRhYkluZGV4PXIsIShvJiZhIT09byYmYS5jb250YWlucyhvKSYmbiE9PWZFKSYmdGhpcy50b2dnbGVTZWxlY3Rpb25Gb3JJdGVtKHRbdGhpcy5hc10pKX19LF9tdWx0aVNlbGVjdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbGVhclNlbGVjdGlvbigpLHRoaXMuJC5zZWxlY3Rvci5tdWx0aT1lfSx1cGRhdGVTaXplRm9ySXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy51cGRhdGVTaXplRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdXBkYXRlU2l6ZUZvckluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkmJih0aGlzLl91cGRhdGVNZXRyaWNzKFt0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSksdGhpcy5fcG9zaXRpb25JdGVtcygpKSxudWxsfSxfbWFuYWdlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4O2U+PTAmJmU8dGhpcy5fdmlydHVhbENvdW50P3RoaXMuX2lzSW5kZXhSZW5kZXJlZChlKT90aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKTp0aGlzLl9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbSgpOnRoaXMuX3ZpcnR1YWxDb3VudD4wJiZ0aGlzLl9waHlzaWNhbENvdW50PjAmJih0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9waHlzaWNhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9dGhpcy5fdmlydHVhbFN0YXJ0LHRoaXMuX2ZvY3VzZWRJdGVtPXRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fcGh5c2ljYWxTdGFydF0pfSxfY29udmVydEluZGV4VG9Db21wbGV0ZVJvdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbXNQZXJSb3d8fDEsdGhpcy5ncmlkP01hdGguY2VpbChlL3RoaXMuX2l0ZW1zUGVyUm93KSp0aGlzLl9pdGVtc1BlclJvdzplfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9pc0luZGV4VmlzaWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5maXJzdFZpc2libGVJbmRleCYmZTw9dGhpcy5sYXN0VmlzaWJsZUluZGV4fSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxmb2N1c0l0ZW06ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0oZSl9LF9mb2N1c1BoeXNpY2FsSXRlbTpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7dGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHx0aGlzLnNjcm9sbFRvSW5kZXgoZSk7dmFyIHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KGUpXSxyPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG47ci50YWJJbmRleD1mRSx0LnRhYkluZGV4PT09ZkUmJihuPXQpLG58fChuPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iJytmRSsnIl0nKSksci50YWJJbmRleD0wLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9ZSxuJiZuLmZvY3VzKCl9fSxfcmVtb3ZlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSYmdGhpcy5faXRlbXNQYXJlbnQucmVtb3ZlQ2hpbGQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCx0aGlzLl9mb2N1c2VkSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg9LTEsdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9LTF9LF9jcmVhdGVGb2N1c0JhY2tmaWxsSXRlbTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4O2lmKCEodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW18fHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8MCkpe2lmKCF0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbSl7dmFyIHQ9dGhpcy5zdGFtcChudWxsKTt0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHQucm9vdCl9dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1tlXSx0aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSkudGFiSW5kZXg9MCx0aGlzLl9waHlzaWNhbEl0ZW1zW2VdPXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PWUsdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKX19LF9yZXN0b3JlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXtpZighKCF0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7dGhpcy5fYXNzaWduTW9kZWxzKCk7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0PXRoaXMuX3BoeXNpY2FsSXRlbXNbZV07aWYoISF0KXt2YXIgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KSxuPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKTtyW3RoaXMuYXNdPT09blt0aGlzLmFzXT8odGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09dCxyLnRhYkluZGV4PS0xLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy50cmFuc2xhdGUzZCgwLG4wdCwwLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKSk6KHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW09bnVsbCksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbH19fSxfZGlkRm9jdXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tb2RlbEZvckVsZW1lbnQoZS50YXJnZXQpLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pLG49dGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0hPT1udWxsLGk9dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDshdHx8KHI9PT10P3RoaXMuX2lzSW5kZXhWaXNpYmxlKGkpfHx0aGlzLnNjcm9sbFRvSW5kZXgoaSk6KHRoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpLHImJihyLnRhYkluZGV4PS0xKSx0LnRhYkluZGV4PTAsaT10W3RoaXMuaW5kZXhBc10sdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1pLHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX2dldFBoeXNpY2FsSW5kZXgoaSksdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleF0sbiYmIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl91cGRhdGUoKSkpfSxfa2V5ZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA0MDp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PHRoaXMuX3ZpcnR1YWxDb3VudC0xJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM5OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/LTE6MSkpO2JyZWFrO2Nhc2UgMzg6dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD4wJiZlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleC0odGhpcy5ncmlkP3RoaXMuX2l0ZW1zUGVyUm93OjEpKTticmVhaztjYXNlIDM3OnRoaXMuZ3JpZCYmdGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCsodGhpcy5faXNSVEw/MTotMSkpO2JyZWFrO2Nhc2UgMTM6dGhpcy5fZm9jdXNQaHlzaWNhbEl0ZW0odGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleCksdGhpcy5zZWxlY3Rpb25FbmFibGVkJiZ0aGlzLl9zZWxlY3Rpb25IYW5kbGVyKGUpO2JyZWFrfX0sX2NsYW1wOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heCh0LGUpKX0sX2RlYm91bmNlOmZ1bmN0aW9uKGUsdCxyKXt0aGlzLl9kZWJvdW5jZXJzPXRoaXMuX2RlYm91bmNlcnN8fHt9LHRoaXMuX2RlYm91bmNlcnNbZV09c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2Vyc1tlXSxyLHQuYmluZCh0aGlzKSksSmwodGhpcy5fZGVib3VuY2Vyc1tlXSl9LF9mb3J3YXJkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpfSxfZm9yd2FyZEhvc3RQcm9wVjI6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLmZvcndhcmRIb3N0UHJvcChlLHQpfSx0aGlzKX0sX25vdGlmeUluc3RhbmNlUHJvcFYyOmZ1bmN0aW9uKGUsdCxyKXtpZihPSSh0aGlzLmFzLHQpKXt2YXIgbj1lW3RoaXMuaW5kZXhBc107dD09dGhpcy5hcyYmKHRoaXMuaXRlbXNbbl09ciksdGhpcy5ub3RpZnlQYXRoKGRwKHRoaXMuYXMsIml0ZW1zLiIrbix0KSxyKX19LF9nZXRTdGFtcGVkQ2hpbGRyZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxJdGVtc30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oZSx0LHIpe3QuaW5kZXhPZih0aGlzLmFzKyIuIik9PT0wJiZ0aGlzLm5vdGlmeVBhdGgoIml0ZW1zLiIrZS5fX2tleV9fKyIuIit0LnNsaWNlKHRoaXMuYXMubGVuZ3RoKzEpLHIpfSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24oZSx0KXsodGhpcy5fcGh5c2ljYWxJdGVtc3x8W10pLmNvbmNhdChbdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0sdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW1dKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3ImJnRoaXMubW9kZWxGb3JFbGVtZW50KHIpLm5vdGlmeVBhdGgoZSx0KX0sdGhpcyl9LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmKHRoaXMubW9kZWxGb3JFbGVtZW50KHIpW2VdPXQpfSx0aGlzKX0sX2dldEFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pdGVtc1BhcmVudC5ub2RlLmRvbUhvc3Q7cmV0dXJuIHp0KGU/ZS5yb290OmRvY3VtZW50KS5hY3RpdmVFbGVtZW50fX0pO3ZhciB4OT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnNlbGVjdGlvbj1bXSx0aGlzLnNlbGVjdENhbGxiYWNrPXR9Z2V0KCl7cmV0dXJuIHRoaXMubXVsdGk/dGhpcy5zZWxlY3Rpb24uc2xpY2UoKTp0aGlzLnNlbGVjdGlvblswXX1jbGVhcih0KXt0aGlzLnNlbGVjdGlvbi5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24ocil7KCF0fHx0LmluZGV4T2Yocik8MCkmJnRoaXMuc2V0SXRlbVNlbGVjdGVkKHIsITEpfSx0aGlzKX1pc1NlbGVjdGVkKHQpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pbmRleE9mKHQpPj0wfXNldEl0ZW1TZWxlY3RlZCh0LHIpe2lmKHQhPW51bGwmJnIhPT10aGlzLmlzU2VsZWN0ZWQodCkpe2lmKHIpdGhpcy5zZWxlY3Rpb24ucHVzaCh0KTtlbHNle3ZhciBuPXRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk7bj49MCYmdGhpcy5zZWxlY3Rpb24uc3BsaWNlKG4sMSl9dGhpcy5zZWxlY3RDYWxsYmFjayYmdGhpcy5zZWxlY3RDYWxsYmFjayh0LHIpfX1zZWxlY3QodCl7dGhpcy5tdWx0aT90aGlzLnRvZ2dsZSh0KTp0aGlzLmdldCgpIT09dCYmKHRoaXMuc2V0SXRlbVNlbGVjdGVkKHRoaXMuZ2V0KCksITEpLHRoaXMuc2V0SXRlbVNlbGVjdGVkKHQsITApKX10b2dnbGUodCl7dGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhdGhpcy5pc1NlbGVjdGVkKHQpKX19O3ZhciB3aD17cHJvcGVydGllczp7YXR0ckZvclNlbGVjdGVkOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxzZWxlY3RlZDp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0sYWN0aXZhdGVFdmVudDp7dHlwZTpTdHJpbmcsdmFsdWU6InRhcCIsb2JzZXJ2ZXI6Il9hY3RpdmF0ZUV2ZW50Q2hhbmdlZCJ9LHNlbGVjdGFibGU6U3RyaW5nLHNlbGVjdGVkQ2xhc3M6e3R5cGU6U3RyaW5nLHZhbHVlOiJpcm9uLXNlbGVjdGVkIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGZhbGxiYWNrU2VsZWN0aW9uOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxpdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9leGNsdWRlZExvY2FsTmFtZXM6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3RlbXBsYXRlOjEsImRvbS1iaW5kIjoxLCJkb20taWYiOjEsImRvbS1yZXBlYXQiOjF9fX19LG9ic2VydmVyczpbIl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQoYXR0ckZvclNlbGVjdGVkKSIsIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZCkiLCJfY2hlY2tGYWxsYmFjayhmYWxsYmFja1NlbGVjdGlvbikiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYmluZEZpbHRlckl0ZW09dGhpcy5fZmlsdGVySXRlbS5iaW5kKHRoaXMpLHRoaXMuX3NlbGVjdGlvbj1uZXcgeDkodGhpcy5fYXBwbHlTZWxlY3Rpb24uYmluZCh0aGlzKSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9dGhpcy5fb2JzZXJ2ZUl0ZW1zKHRoaXMpLHRoaXMuX2FkZExpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcih0aGlzLmFjdGl2YXRlRXZlbnQpfSxpbmRleE9mOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLml0ZW1zP3RoaXMuaXRlbXMuaW5kZXhPZihlKTotMX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0ZWQ9ZX0sc2VsZWN0UHJldmlvdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PWUtMTt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYodD0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSktMStlKSVlKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZSh0KX0sc2VsZWN0TmV4dDpmdW5jdGlvbigpe3ZhciBlPTA7dGhpcy5zZWxlY3RlZCE9PXZvaWQgMCYmKGU9KE51bWJlcih0aGlzLl92YWx1ZVRvSW5kZXgodGhpcy5zZWxlY3RlZCkpKzEpJXRoaXMuaXRlbXMubGVuZ3RoKSx0aGlzLnNlbGVjdGVkPXRoaXMuX2luZGV4VG9WYWx1ZShlKX0sc2VsZWN0SW5kZXg6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3QodGhpcy5faW5kZXhUb1ZhbHVlKGUpKX0sZm9yY2VTeW5jaHJvbm91c0l0ZW1VcGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdHlwZW9mIHRoaXMuX29ic2VydmVyLmZsdXNoPT0iZnVuY3Rpb24iP3RoaXMuX29ic2VydmVyLmZsdXNoKCk6dGhpcy5fdXBkYXRlSXRlbXMoKX0sZ2V0IF9zaG91bGRVcGRhdGVTZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3RlZCE9bnVsbH0sX2NoZWNrRmFsbGJhY2s6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dGhpcy5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLnVubGlzdGVuKHRoaXMsZSwiX2FjdGl2YXRlSGFuZGxlciIpfSxfYWN0aXZhdGVFdmVudENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl9yZW1vdmVMaXN0ZW5lcih0KSx0aGlzLl9hZGRMaXN0ZW5lcihlKX0sX3VwZGF0ZUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHRoaXMuc2VsZWN0YWJsZXx8IioiKTtlPUFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChlLHRoaXMuX2JpbmRGaWx0ZXJJdGVtKSx0aGlzLl9zZXRJdGVtcyhlKX0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtJiYodGhpcy5zZWxlY3RlZD10aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0pKX0sX3VwZGF0ZVNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RTZWxlY3RlZDpmdW5jdGlvbihlKXtpZighIXRoaXMuaXRlbXMpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuc2VsZWN0ZWQpO3Q/dGhpcy5fc2VsZWN0aW9uLnNlbGVjdCh0KTp0aGlzLl9zZWxlY3Rpb24uY2xlYXIoKSx0aGlzLmZhbGxiYWNrU2VsZWN0aW9uJiZ0aGlzLml0ZW1zLmxlbmd0aCYmdGhpcy5fc2VsZWN0aW9uLmdldCgpPT09dm9pZCAwJiYodGhpcy5zZWxlY3RlZD10aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9maWx0ZXJJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9leGNsdWRlZExvY2FsTmFtZXNbZS5sb2NhbE5hbWVdfSxfdmFsdWVUb0l0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDp0aGlzLml0ZW1zW3RoaXMuX3ZhbHVlVG9JbmRleChlKV19LF92YWx1ZVRvSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe2Zvcih2YXIgdD0wLHI7cj10aGlzLml0ZW1zW3RdO3QrKylpZih0aGlzLl92YWx1ZUZvckl0ZW0ocik9PWUpcmV0dXJuIHR9ZWxzZSByZXR1cm4gTnVtYmVyKGUpfSxfaW5kZXhUb1ZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLml0ZW1zW2VdO2lmKHQpcmV0dXJuIHRoaXMuX3ZhbHVlRm9ySXRlbSh0KX1lbHNlIHJldHVybiBlfSxfdmFsdWVGb3JJdGVtOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCF0aGlzLmF0dHJGb3JTZWxlY3RlZCl7dmFyIHQ9dGhpcy5pbmRleE9mKGUpO3JldHVybiB0PT09LTE/bnVsbDp0fXZhciByPWVbd20odGhpcy5hdHRyRm9yU2VsZWN0ZWQpXTtyZXR1cm4gciE9bnVsbD9yOmUuZ2V0QXR0cmlidXRlKHRoaXMuYXR0ckZvclNlbGVjdGVkKX0sX2FwcGx5U2VsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZWxlY3RlZENsYXNzJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMuc2VsZWN0ZWRDbGFzcyx0LGUpLHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUmJnRoaXMudG9nZ2xlQXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRBdHRyaWJ1dGUsdCxlKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLmZpcmUoImlyb24tIisodD8ic2VsZWN0IjoiZGVzZWxlY3QiKSx7aXRlbTplfSl9LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0odGhpcy5fc2VsZWN0aW9uLmdldCgpKX0sX29ic2VydmVJdGVtczpmdW5jdGlvbihlKXtyZXR1cm4genQoZSkub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZUl0ZW1zKCksdGhpcy5fdXBkYXRlU2VsZWN0ZWQoKSx0aGlzLmZpcmUoImlyb24taXRlbXMtY2hhbmdlZCIsdCx7YnViYmxlczohMSxjYW5jZWxhYmxlOiExfSl9KX0sX2FjdGl2YXRlSGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS50YXJnZXQscj10aGlzLml0ZW1zO3QmJnQhPXRoaXM7KXt2YXIgbj1yLmluZGV4T2YodCk7aWYobj49MCl7dmFyIGk9dGhpcy5faW5kZXhUb1ZhbHVlKG4pO3RoaXMuX2l0ZW1BY3RpdmF0ZShpLHQpO3JldHVybn10PXQucGFyZW50Tm9kZX19LF9pdGVtQWN0aXZhdGU6ZnVuY3Rpb24oZSx0KXt0aGlzLmZpcmUoImlyb24tYWN0aXZhdGUiLHtzZWxlY3RlZDplLGl0ZW06dH0se2NhbmNlbGFibGU6ITB9KS5kZWZhdWx0UHJldmVudGVkfHx0aGlzLnNlbGVjdChlKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCg6bm90KHNsb3QpOm5vdCguaXJvbi1zZWxlY3RlZCkpIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJpcm9uLXBhZ2VzIixiZWhhdmlvcnM6W0pzLHdoXSxwcm9wZXJ0aWVzOnthY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZTpudWxsfX0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkUGFnZUNoYW5nZWQoc2VsZWN0ZWQpIl0sX3NlbGVjdGVkUGFnZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmFzeW5jKHRoaXMubm90aWZ5UmVzaXplKX19KTt2YXIgaTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAtLXNoYWRvdy10cmFuc2l0aW9uOiB7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjI4cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctbm9uZTogewogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH07CgogICAgICAvKiBmcm9tIGh0dHA6Ly9jb2RlcGVuLmlvL3NoeW5kbWFuL3Blbi9jNTM5NGRkZjJlOGIyYTVjOTE4NTkwNGI1NzQyMWNkYiAqLwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tM2RwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAzcHggNHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi00ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi02ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDZweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCAxOHB4IDAgcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCA0cHggMjJweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKSwKICAgICAgICAgICAgICAgICAgICAwIDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgIDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgIDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTI0ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPmA7aTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaTB0LmNvbnRlbnQpO3ZhciBvMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICBodG1sIHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbDsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIxIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSI0Il0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KCiAgICAgIC8qIER1cGxpY2F0ZSB0aGUgc3R5bGVzIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3dlYmNvbXBvbmVudHMvc2hhZHljc3MvaXNzdWVzLzE5MyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbDogewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi02ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgICB9OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0xOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi00OwogICAgICB9CiAgICAgIDpob3N0KC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO28wdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG8wdC5jb250ZW50KTt2YXIgRGk9e3Byb3BlcnRpZXM6e2ZvY3VzZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfb2xkVGFiSW5kZXg6e3R5cGU6U3RyaW5nfSxfYm91bmRGb2N1c0JsdXJIYW5kbGVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQmx1ckhhbmRsZXIuYmluZCh0aGlzKX19fSxvYnNlcnZlcnM6WyJfY2hhbmdlZENvbnRyb2xTdGF0ZShmb2N1c2VkLCBkaXNhYmxlZCkiXSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZEZvY3VzQmx1ckhhbmRsZXIsITApfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRGb2N1c2VkKGUudHlwZT09PSJmb2N1cyIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpLHRoaXMuc3R5bGUucG9pbnRlckV2ZW50cz1lPyJub25lIjoiIixlPyh0aGlzLl9vbGRUYWJJbmRleD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSx0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLnRhYkluZGV4PS0xLHRoaXMuYmx1cigpKTp0aGlzLl9vbGRUYWJJbmRleCE9PXZvaWQgMCYmKHRoaXMuX29sZFRhYkluZGV4PT09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKTp0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX29sZFRhYkluZGV4KSl9LF9jaGFuZ2VkQ29udHJvbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCYmdGhpcy5fY29udHJvbFN0YXRlQ2hhbmdlZCgpfX07dmFyIFl4PXtwcm9wZXJ0aWVzOntwcmVzc2VkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfcHJlc3NlZENoYW5nZWQifSx0b2dnbGVzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxhY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxwb2ludGVyRG93bjp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHZhbHVlOiExfSxyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITB9LGFyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLXByZXNzZWQiLG9ic2VydmVyOiJfYXJpYUFjdGl2ZUF0dHJpYnV0ZUNoYW5nZWQifX0sbGlzdGVuZXJzOntkb3duOiJfZG93bkhhbmRsZXIiLHVwOiJfdXBIYW5kbGVyIix0YXA6Il90YXBIYW5kbGVyIn0sb2JzZXJ2ZXJzOlsiX2ZvY3VzQ2hhbmdlZChmb2N1c2VkKSIsIl9hY3RpdmVDaGFuZ2VkKGFjdGl2ZSwgYXJpYUFjdGl2ZUF0dHJpYnV0ZSkiXSxrZXlCaW5kaW5nczp7ImVudGVyOmtleWRvd24iOiJfYXN5bmNDbGljayIsInNwYWNlOmtleWRvd24iOiJfc3BhY2VLZXlEb3duSGFuZGxlciIsInNwYWNlOmtleXVwIjoiX3NwYWNlS2V5VXBIYW5kbGVyIn0sX21vdXNlRXZlbnRSZTovXm1vdXNlLyxfdGFwSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMudG9nZ2xlcz90aGlzLl91c2VyQWN0aXZhdGUoIXRoaXMuYWN0aXZlKTp0aGlzLmFjdGl2ZT0hMX0sX2ZvY3VzQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9kZXRlY3RLZXlib2FyZEZvY3VzKGUpLGV8fHRoaXMuX3NldFByZXNzZWQoITEpfSxfZGV0ZWN0S2V5Ym9hcmRGb2N1czpmdW5jdGlvbihlKXt0aGlzLl9zZXRSZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKCF0aGlzLnBvaW50ZXJEb3duJiZlKX0sX3VzZXJBY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZSE9PWUmJih0aGlzLmFjdGl2ZT1lLHRoaXMuZmlyZSgiY2hhbmdlIikpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0UG9pbnRlckRvd24oITApLHRoaXMuX3NldFByZXNzZWQoITApLHRoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoITEpfSxfdXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0UG9pbnRlckRvd24oITEpLHRoaXMuX3NldFByZXNzZWQoITEpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5rZXlib2FyZEV2ZW50LHI9enQodCkubG9jYWxUYXJnZXQ7dGhpcy5pc0xpZ2h0RGVzY2VuZGFudChyKXx8KHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuX3NldFByZXNzZWQoITApKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodGhpcy5wcmVzc2VkJiZ0aGlzLl9hc3luY0NsaWNrKCksdGhpcy5fc2V0UHJlc3NlZCghMSkpfSxfYXN5bmNDbGljazpmdW5jdGlvbigpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmNsaWNrKCl9LDEpfSxfcHJlc3NlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QmJnQhPWUmJnRoaXMuaGFzQXR0cmlidXRlKHQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX2FjdGl2ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnRvZ2dsZXM/dGhpcy5zZXRBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlLGU/InRydWUiOiJmYWxzZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKHRoaXMuYXJpYUFjdGl2ZUF0dHJpYnV0ZSksdGhpcy5fY2hhbmdlZEJ1dHRvblN0YXRlKCl9LF9jb250cm9sU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD90aGlzLl9zZXRQcmVzc2VkKCExKTp0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NoYW5nZWRCdXR0b25TdGF0ZTpmdW5jdGlvbigpe3RoaXMuX2J1dHRvblN0YXRlQ2hhbmdlZCYmdGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkKCl9fSxTaD1bT28sWXhdO3ZhciBNaD17ZGlzdGFuY2U6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ZS1yLG89dC1uO3JldHVybiBNYXRoLnNxcnQoaSppK28qbyl9LG5vdzp3aW5kb3cucGVyZm9ybWFuY2UmJndpbmRvdy5wZXJmb3JtYW5jZS5ub3c/d2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSk6RGF0ZS5ub3d9O2Z1bmN0aW9uIGEwdChlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLndpZHRoPXRoaXMuYm91bmRpbmdSZWN0LndpZHRoLHRoaXMuaGVpZ2h0PXRoaXMuYm91bmRpbmdSZWN0LmhlaWdodCx0aGlzLnNpemU9TWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLmhlaWdodCl9YTB0LnByb3RvdHlwZT17Z2V0IGJvdW5kaW5nUmVjdCgpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LGZ1cnRoZXN0Q29ybmVyRGlzdGFuY2VGcm9tOmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWguZGlzdGFuY2UoZSx0LDAsMCksbj1NaC5kaXN0YW5jZShlLHQsdGhpcy53aWR0aCwwKSxpPU1oLmRpc3RhbmNlKGUsdCwwLHRoaXMuaGVpZ2h0KSxvPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KTtyZXR1cm4gTWF0aC5tYXgocixuLGksbyl9fTtmdW5jdGlvbiBnXyhlKXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbG9yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmNvbG9yLHRoaXMud2F2ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy53YXZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLmNvbG9yLHRoaXMud2F2ZS5jbGFzc0xpc3QuYWRkKCJ3YXZlIiksdGhpcy53YXZlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIndhdmUtY29udGFpbmVyIiksenQodGhpcy53YXZlQ29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLndhdmUpLHRoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCl9Z18uTUFYX1JBRElVUz0zMDA7Z18ucHJvdG90eXBlPXtnZXQgcmVjZW50ZXJzKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5yZWNlbnRlcnN9LGdldCBjZW50ZXIoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmNlbnRlcn0sZ2V0IG1vdXNlRG93bkVsYXBzZWQoKXt2YXIgZTtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydD8oZT1NaC5ub3coKS10aGlzLm1vdXNlRG93blN0YXJ0LHRoaXMubW91c2VVcFN0YXJ0JiYoZS09dGhpcy5tb3VzZVVwRWxhcHNlZCksZSk6MH0sZ2V0IG1vdXNlVXBFbGFwc2VkKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01oLm5vdygpLXRoaXMubW91c2VVcFN0YXJ0OjB9LGdldCBtb3VzZURvd25FbGFwc2VkU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWQvMWUzfSxnZXQgbW91c2VVcEVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VVcEVsYXBzZWQvMWUzfSxnZXQgbW91c2VJbnRlcmFjdGlvblNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZURvd25FbGFwc2VkU2Vjb25kcyt0aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kc30sZ2V0IGluaXRpYWxPcGFjaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pbml0aWFsT3BhY2l0eX0sZ2V0IG9wYWNpdHlEZWNheVZlbG9jaXR5KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vcGFjaXR5RGVjYXlWZWxvY2l0eX0sZ2V0IHJhZGl1cygpe3ZhciBlPXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCp0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgsdD10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0KnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQscj1NYXRoLm1pbihNYXRoLnNxcnQoZSt0KSxnXy5NQVhfUkFESVVTKSoxLjErNSxuPTEuMS0uMiooci9nXy5NQVhfUkFESVVTKSxpPXRoaXMubW91c2VJbnRlcmFjdGlvblNlY29uZHMvbixvPXIqKDEtTWF0aC5wb3coODAsLWkpKTtyZXR1cm4gTWF0aC5hYnMobyl9LGdldCBvcGFjaXR5KCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P01hdGgubWF4KDAsdGhpcy5pbml0aWFsT3BhY2l0eS10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyp0aGlzLm9wYWNpdHlEZWNheVZlbG9jaXR5KTp0aGlzLmluaXRpYWxPcGFjaXR5fSxnZXQgb3V0ZXJPcGFjaXR5KCl7dmFyIGU9dGhpcy5tb3VzZVVwRWxhcHNlZFNlY29uZHMqLjMsdD10aGlzLm9wYWNpdHk7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oZSx0KSl9LGdldCBpc09wYWNpdHlGdWxseURlY2F5ZWQoKXtyZXR1cm4gdGhpcy5vcGFjaXR5PC4wMSYmdGhpcy5yYWRpdXM+PU1hdGgubWluKHRoaXMubWF4UmFkaXVzLGdfLk1BWF9SQURJVVMpfSxnZXQgaXNSZXN0aW5nQXRNYXhSYWRpdXMoKXtyZXR1cm4gdGhpcy5vcGFjaXR5Pj10aGlzLmluaXRpYWxPcGFjaXR5JiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc0FuaW1hdGlvbkNvbXBsZXRlKCl7cmV0dXJuIHRoaXMubW91c2VVcFN0YXJ0P3RoaXMuaXNPcGFjaXR5RnVsbHlEZWNheWVkOnRoaXMuaXNSZXN0aW5nQXRNYXhSYWRpdXN9LGdldCB0cmFuc2xhdGlvbkZyYWN0aW9uKCl7cmV0dXJuIE1hdGgubWluKDEsdGhpcy5yYWRpdXMvdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUqMi9NYXRoLnNxcnQoMikpfSxnZXQgeE5vdygpe3JldHVybiB0aGlzLnhFbmQ/dGhpcy54U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnhFbmQtdGhpcy54U3RhcnQpOnRoaXMueFN0YXJ0fSxnZXQgeU5vdygpe3JldHVybiB0aGlzLnlFbmQ/dGhpcy55U3RhcnQrdGhpcy50cmFuc2xhdGlvbkZyYWN0aW9uKih0aGlzLnlFbmQtdGhpcy55U3RhcnQpOnRoaXMueVN0YXJ0fSxnZXQgaXNNb3VzZURvd24oKXtyZXR1cm4gdGhpcy5tb3VzZURvd25TdGFydCYmIXRoaXMubW91c2VVcFN0YXJ0fSxyZXNldEludGVyYWN0aW9uU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLm1heFJhZGl1cz0wLHRoaXMubW91c2VEb3duU3RhcnQ9MCx0aGlzLm1vdXNlVXBTdGFydD0wLHRoaXMueFN0YXJ0PTAsdGhpcy55U3RhcnQ9MCx0aGlzLnhFbmQ9MCx0aGlzLnlFbmQ9MCx0aGlzLnNsaWRlRGlzdGFuY2U9MCx0aGlzLmNvbnRhaW5lck1ldHJpY3M9bmV3IGEwdCh0aGlzLmVsZW1lbnQpfSxkcmF3OmZ1bmN0aW9uKCl7dmFyIGUsdCxyO3RoaXMud2F2ZS5zdHlsZS5vcGFjaXR5PXRoaXMub3BhY2l0eSxlPXRoaXMucmFkaXVzLyh0aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZS8yKSx0PXRoaXMueE5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMueU5vdy10aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0idHJhbnNsYXRlKCIrdCsicHgsICIrcisicHgpIix0aGlzLndhdmVDb250YWluZXIuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUzZCgiK3QrInB4LCAiK3IrInB4LCAwKSIsdGhpcy53YXZlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ic2NhbGUoIitlKyIsIitlKyIpIix0aGlzLndhdmUuc3R5bGUudHJhbnNmb3JtPSJzY2FsZTNkKCIrZSsiLCIrZSsiLDEpIn0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgvMixyPXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMjt0aGlzLnJlc2V0SW50ZXJhY3Rpb25TdGF0ZSgpLHRoaXMubW91c2VEb3duU3RhcnQ9TWgubm93KCksdGhpcy5jZW50ZXI/KHRoaXMueFN0YXJ0PXQsdGhpcy55U3RhcnQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpOih0aGlzLnhTdGFydD1lP2UuZGV0YWlsLngtdGhpcy5jb250YWluZXJNZXRyaWNzLmJvdW5kaW5nUmVjdC5sZWZ0OnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHRoaXMueVN0YXJ0PWU/ZS5kZXRhaWwueS10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LnRvcDp0aGlzLmNvbnRhaW5lck1ldHJpY3MuaGVpZ2h0LzIpLHRoaXMucmVjZW50ZXJzJiYodGhpcy54RW5kPXQsdGhpcy55RW5kPXIsdGhpcy5zbGlkZURpc3RhbmNlPU1oLmRpc3RhbmNlKHRoaXMueFN0YXJ0LHRoaXMueVN0YXJ0LHRoaXMueEVuZCx0aGlzLnlFbmQpKSx0aGlzLm1heFJhZGl1cz10aGlzLmNvbnRhaW5lck1ldHJpY3MuZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb20odGhpcy54U3RhcnQsdGhpcy55U3RhcnQpLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50b3A9KHRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUubGVmdD0odGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKS8yKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCIsdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSsicHgifSx1cEFjdGlvbjpmdW5jdGlvbihlKXshdGhpcy5pc01vdXNlRG93bnx8KHRoaXMubW91c2VVcFN0YXJ0PU1oLm5vdygpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7enQoenQodGhpcy53YXZlQ29udGFpbmVyKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzLndhdmVDb250YWluZXIpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CgogICAgICAgIC8qIFNlZSBQb2x5bWVyRWxlbWVudHMvcGFwZXItYmVoYXZpb3JzL2lzc3Vlcy8zNC4gT24gbm9uLUNocm9tZSBicm93c2VycywKICAgICAgICAgKiBjcmVhdGluZyBhIG5vZGUgKHdpdGggYSBwb3NpdGlvbjphYnNvbHV0ZSkgaW4gdGhlIG1pZGRsZSBvZiBhbiBldmVudAogICAgICAgICAqIGhhbmRsZXIgImludGVycnVwdHMiIHRoYXQgZXZlbnQgaGFuZGxlciAod2hpY2ggaGFwcGVucyB3aGVuIHRoZQogICAgICAgICAqIHJpcHBsZSBpcyBjcmVhdGVkIG9uIGRlbWFuZCkgKi8KICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2FuaW1hdGluZ10pIHsKICAgICAgICAvKiBUaGlzIHJlc29sdmVzIGEgcmVuZGVyaW5nIGlzc3VlIGluIENocm9tZSAoYXMgb2YgNDApIHdoZXJlIHRoZQogICAgICAgICAgIHJpcHBsZSBpcyBub3QgcHJvcGVybHkgY2xpcHBlZCBieSBpdHMgcGFyZW50ICh3aGljaCBtYXkgaGF2ZQogICAgICAgICAgIHJvdW5kZWQgY29ybmVycykuIFNlZTogaHR0cDovL2pzYmluLmNvbS90ZW1leGEvNAoKICAgICAgICAgICBOb3RlOiBXZSBvbmx5IGFwcGx5IHRoaXMgc3R5bGUgY29uZGl0aW9uYWxseS4gT3RoZXJ3aXNlLCB0aGUgYnJvd3NlcgogICAgICAgICAgIHdpbGwgY3JlYXRlIGEgbmV3IGNvbXBvc2l0aW5nIGxheWVyIGZvciBldmVyeSByaXBwbGUgZWxlbWVudCBvbiB0aGUKICAgICAgICAgICBwYWdlLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWQuICovCiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgI3dhdmVzLAogICAgICAud2F2ZS1jb250YWluZXIsCiAgICAgIC53YXZlIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAjYmFja2dyb3VuZCwKICAgICAgLndhdmUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgICN3YXZlcywKICAgICAgLndhdmUgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNpcmNsZSkgI2JhY2tncm91bmQsCiAgICAgIDpob3N0KC5jaXJjbGUpICN3YXZlcyB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAud2F2ZS1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iYmFja2dyb3VuZCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJ3YXZlcyI+PC9kaXY+CmAsaXM6InBhcGVyLXJpcHBsZSIsYmVoYXZpb3JzOltPb10scHJvcGVydGllczp7aW5pdGlhbE9wYWNpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi4yNX0sb3BhY2l0eURlY2F5VmVsb2NpdHk6e3R5cGU6TnVtYmVyLHZhbHVlOi44fSxyZWNlbnRlcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2VudGVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHJpcHBsZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LGFuaW1hdGluZzp7dHlwZTpCb29sZWFuLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0saG9sZERvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvbGREb3duQ2hhbmdlZCJ9LG5vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9hbmltYXRpbmc6e3R5cGU6Qm9vbGVhbn0sX2JvdW5kQW5pbWF0ZTp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKX19fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMua2V5RXZlbnRUYXJnZXR9LGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9vbkVudGVyS2V5ZG93biIsInNwYWNlOmtleWRvd24iOiJfb25TcGFjZUtleWRvd24iLCJzcGFjZTprZXl1cCI6Il9vblNwYWNlS2V5dXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3p0KHRoaXMpLnBhcmVudE5vZGUubm9kZVR5cGU9PTExP3RoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykuZ2V0T3duZXJSb290KCkuaG9zdDp0aGlzLmtleUV2ZW50VGFyZ2V0PXp0KHRoaXMpLnBhcmVudE5vZGU7dmFyIGU9dGhpcy5rZXlFdmVudFRhcmdldDt0aGlzLmxpc3RlbihlLCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLmxpc3RlbihlLCJkb3duIiwidWlEb3duQWN0aW9uIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLmtleUV2ZW50VGFyZ2V0LCJ1cCIsInVpVXBBY3Rpb24iKSx0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsImRvd24iLCJ1aURvd25BY3Rpb24iKSx0aGlzLmtleUV2ZW50VGFyZ2V0PW51bGx9LGdldCBzaG91bGRLZWVwQW5pbWF0aW5nKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnJpcHBsZXMubGVuZ3RoOysrZSlpZighdGhpcy5yaXBwbGVzW2VdLmlzQW5pbWF0aW9uQ29tcGxldGUpcmV0dXJuITA7cmV0dXJuITF9LHNpbXVsYXRlZFJpcHBsZTpmdW5jdGlvbigpe3RoaXMuZG93bkFjdGlvbihudWxsKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy51cEFjdGlvbigpfSwxKX0sdWlEb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMuZG93bkFjdGlvbihlKX0sZG93bkFjdGlvbjpmdW5jdGlvbihlKXtpZighKHRoaXMuaG9sZERvd24mJnRoaXMucmlwcGxlcy5sZW5ndGg+MCkpe3ZhciB0PXRoaXMuYWRkUmlwcGxlKCk7dC5kb3duQWN0aW9uKGUpLHRoaXMuX2FuaW1hdGluZ3x8KHRoaXMuX2FuaW1hdGluZz0hMCx0aGlzLmFuaW1hdGUoKSl9fSx1aVVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMubm9pbmt8fHRoaXMudXBBY3Rpb24oZSl9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuaG9sZERvd258fCh0aGlzLnJpcHBsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LnVwQWN0aW9uKGUpfSksdGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX0sb25BbmltYXRpb25Db21wbGV0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZz0hMSx0aGlzLiQuYmFja2dyb3VuZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiIsdGhpcy5maXJlKCJ0cmFuc2l0aW9uZW5kIil9LGFkZFJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPW5ldyBnXyh0aGlzKTtyZXR1cm4genQodGhpcy4kLndhdmVzKS5hcHBlbmRDaGlsZChlLndhdmVDb250YWluZXIpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj1lLmNvbG9yLHRoaXMucmlwcGxlcy5wdXNoKGUpLHRoaXMuX3NldEFuaW1hdGluZyghMCksZX0scmVtb3ZlUmlwcGxlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucmlwcGxlcy5pbmRleE9mKGUpO3Q8MHx8KHRoaXMucmlwcGxlcy5zcGxpY2UodCwxKSxlLnJlbW92ZSgpLHRoaXMucmlwcGxlcy5sZW5ndGh8fHRoaXMuX3NldEFuaW1hdGluZyghMSkpfSxhbmltYXRlOmZ1bmN0aW9uKCl7aWYoISF0aGlzLl9hbmltYXRpbmcpe3ZhciBlLHQ7Zm9yKGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKXQ9dGhpcy5yaXBwbGVzW2VdLHQuZHJhdygpLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLm9wYWNpdHk9dC5vdXRlck9wYWNpdHksdC5pc09wYWNpdHlGdWxseURlY2F5ZWQmJiF0LmlzUmVzdGluZ0F0TWF4UmFkaXVzJiZ0aGlzLnJlbW92ZVJpcHBsZSh0KTshdGhpcy5zaG91bGRLZWVwQW5pbWF0aW5nJiZ0aGlzLnJpcHBsZXMubGVuZ3RoPT09MD90aGlzLm9uQW5pbWF0aW9uQ29tcGxldGUoKTp3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kQW5pbWF0ZSl9fSxhbmltYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZSgpfSxfb25FbnRlcktleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpLHRoaXMuYXN5bmModGhpcy51aVVwQWN0aW9uLDEpfSxfb25TcGFjZUtleWRvd246ZnVuY3Rpb24oKXt0aGlzLnVpRG93bkFjdGlvbigpfSxfb25TcGFjZUtleXVwOmZ1bmN0aW9uKCl7dGhpcy51aVVwQWN0aW9uKCl9LF9ob2xkRG93bkNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0IT09dm9pZCAwJiYoZT90aGlzLmRvd25BY3Rpb24oKTp0aGlzLnVwQWN0aW9uKCkpfX0pO3ZhciBzdT17cHJvcGVydGllczp7bm9pbms6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX25vaW5rQ2hhbmdlZCJ9LF9yaXBwbGVDb250YWluZXI6e3R5cGU6T2JqZWN0fX0sX2J1dHRvblN0YXRlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZm9jdXNlZCYmdGhpcy5lbnN1cmVSaXBwbGUoKX0sX2Rvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9kb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5wcmVzc2VkJiZ0aGlzLmVuc3VyZVJpcHBsZShlKX0sZW5zdXJlUmlwcGxlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLmhhc1JpcHBsZSgpKXt0aGlzLl9yaXBwbGU9dGhpcy5fY3JlYXRlUmlwcGxlKCksdGhpcy5fcmlwcGxlLm5vaW5rPXRoaXMubm9pbms7dmFyIHQ9dGhpcy5fcmlwcGxlQ29udGFpbmVyfHx0aGlzLnJvb3Q7aWYodCYmenQodCkuYXBwZW5kQ2hpbGQodGhpcy5fcmlwcGxlKSxlKXt2YXIgcj16dCh0aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMpLG49enQoZSkucm9vdFRhcmdldDtyLmRlZXBDb250YWlucyhuKSYmdGhpcy5fcmlwcGxlLnVpRG93bkFjdGlvbihlKX19fSxnZXRSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLl9yaXBwbGV9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX3JpcHBsZSl9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwYXBlci1yaXBwbGUiKTtyZXR1cm4gZX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLm5vaW5rPWUpfX07dmFyIHVXPXtwcm9wZXJ0aWVzOntlbGV2YXRpb246e3R5cGU6TnVtYmVyLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMH19LG9ic2VydmVyczpbIl9jYWxjdWxhdGVFbGV2YXRpb24oZm9jdXNlZCwgZGlzYWJsZWQsIGFjdGl2ZSwgcHJlc3NlZCwgcmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiLCJfY29tcHV0ZUtleWJvYXJkQ2xhc3MocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIix0YWJpbmRleDoiMCIsYW5pbWF0ZWQ6ITB9LF9jYWxjdWxhdGVFbGV2YXRpb246ZnVuY3Rpb24oKXt2YXIgZT0xO3RoaXMuZGlzYWJsZWQ/ZT0wOnRoaXMuYWN0aXZlfHx0aGlzLnByZXNzZWQ/ZT00OnRoaXMucmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCYmKGU9MyksdGhpcy5fc2V0RWxldmF0aW9uKGUpfSxfY29tcHV0ZUtleWJvYXJkQ2xhc3M6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygia2V5Ym9hcmQtZm9jdXMiLGUpfSxfc3BhY2VLZXlEb3duSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlEb3duSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5nZXRSaXBwbGUoKS5yaXBwbGVzLmxlbmd0aDwxJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKCl9LF9zcGFjZUtleVVwSGFuZGxlcjpmdW5jdGlvbihlKXtZeC5fc3BhY2VLZXlVcEhhbmRsZXIuY2FsbCh0aGlzLGUpLHRoaXMuaGFzUmlwcGxlKCkmJnRoaXMuX3JpcHBsZS51aVVwQWN0aW9uKCl9fSxzMHQ9W1NoLERpLHN1LHVXXTt2YXIgbDB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXN0eWxlcyI+CiAgICAvKiBOZWVkIHRvIHNwZWNpZnkgdGhlIHNhbWUgc3BlY2lmaWNpdHkgYXMgdGhlIHN0eWxlcyBpbXBvcnRlZCBmcm9tIHBhcGVyLW1hdGVyaWFsLiAqLwogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtaW4td2lkdGg6IDUuMTRlbTsKICAgICAgbWFyZ2luOiAwIDAuMjllbTsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgb3V0bGluZS13aWR0aDogMDsKICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHotaW5kZXg6IDA7CiAgICAgIHBhZGRpbmc6IDAuN2VtIDAuNTdlbTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbjsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMzsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICA6aG9zdChbcmFpc2VkXS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLXJhaXNlZC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdCg6bm90KFtyYWlzZWRdKS5rZXlib2FyZC1mb2N1cykgewogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWZsYXQta2V5Ym9hcmQtZm9jdXM7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogI2E4YThhODsKICAgICAgY3Vyc29yOiBhdXRvOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKCiAgICAgIEBhcHBseSAtLXBhcGVyLWJ1dHRvbi1kaXNhYmxlZDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdW3JhaXNlZF0pIHsKICAgICAgYmFja2dyb3VuZDogI2VhZWFlYTsKICAgIH0KCgogICAgOmhvc3QoW2FuaW1hdGVkXSkgewogICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItYnV0dG9uLWluay1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KCiAgPHNsb3Q+PC9zbG90PmA7bDB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6bDB0LGlzOiJwYXBlci1idXR0b24iLGJlaGF2aW9yczpbczB0XSxwcm9wZXJ0aWVzOntyYWlzZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9jYWxjdWxhdGVFbGV2YXRpb24ifX0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3RoaXMucmFpc2VkP3VXLl9jYWxjdWxhdGVFbGV2YXRpb24uYXBwbHkodGhpcyk6dGhpcy5fc2V0RWxldmF0aW9uKDApfX0pO3ZhciBjMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZvciBHb29nbGUgcHJvZHVjdHMgKi8KCiAgICAgIC0tZ29vZ2xlLXJlZC0xMDA6ICNmNGM3YzM7CiAgICAgIC0tZ29vZ2xlLXJlZC0zMDA6ICNlNjdjNzM7CiAgICAgIC0tZ29vZ2xlLXJlZC01MDA6ICNkYjQ0Mzc7CiAgICAgIC0tZ29vZ2xlLXJlZC03MDA6ICNjNTM5Mjk7CgogICAgICAtLWdvb2dsZS1ibHVlLTEwMDogI2M2ZGFmYzsKICAgICAgLS1nb29nbGUtYmx1ZS0zMDA6ICM3YmFhZjc7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNTAwOiAjNDI4NWY0OwogICAgICAtLWdvb2dsZS1ibHVlLTcwMDogIzMzNjdkNjsKCiAgICAgIC0tZ29vZ2xlLWdyZWVuLTEwMDogI2I3ZTFjZDsKICAgICAgLS1nb29nbGUtZ3JlZW4tMzAwOiAjNTdiYjhhOwogICAgICAtLWdvb2dsZS1ncmVlbi01MDA6ICMwZjlkNTg7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTcwMDogIzBiODA0MzsKCiAgICAgIC0tZ29vZ2xlLXllbGxvdy0xMDA6ICNmY2U4YjI7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy0zMDA6ICNmN2NiNGQ7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy01MDA6ICNmNGI0MDA7CiAgICAgIC0tZ29vZ2xlLXllbGxvdy03MDA6ICNmMDkzMDA7CgogICAgICAtLWdvb2dsZS1ncmV5LTEwMDogI2Y1ZjVmNTsKICAgICAgLS1nb29nbGUtZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tZ29vZ2xlLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLWdvb2dsZS1ncmV5LTcwMDogIzYxNjE2MTsKCiAgICAgIC8qIE1hdGVyaWFsIERlc2lnbiBjb2xvciBwYWxldHRlIGZyb20gb25saW5lIHNwZWMgZG9jdW1lbnQgKi8KCiAgICAgIC0tcGFwZXItcmVkLTUwOiAjZmZlYmVlOwogICAgICAtLXBhcGVyLXJlZC0xMDA6ICNmZmNkZDI7CiAgICAgIC0tcGFwZXItcmVkLTIwMDogI2VmOWE5YTsKICAgICAgLS1wYXBlci1yZWQtMzAwOiAjZTU3MzczOwogICAgICAtLXBhcGVyLXJlZC00MDA6ICNlZjUzNTA7CiAgICAgIC0tcGFwZXItcmVkLTUwMDogI2Y0NDMzNjsKICAgICAgLS1wYXBlci1yZWQtNjAwOiAjZTUzOTM1OwogICAgICAtLXBhcGVyLXJlZC03MDA6ICNkMzJmMmY7CiAgICAgIC0tcGFwZXItcmVkLTgwMDogI2M2MjgyODsKICAgICAgLS1wYXBlci1yZWQtOTAwOiAjYjcxYzFjOwogICAgICAtLXBhcGVyLXJlZC1hMTAwOiAjZmY4YTgwOwogICAgICAtLXBhcGVyLXJlZC1hMjAwOiAjZmY1MjUyOwogICAgICAtLXBhcGVyLXJlZC1hNDAwOiAjZmYxNzQ0OwogICAgICAtLXBhcGVyLXJlZC1hNzAwOiAjZDUwMDAwOwoKICAgICAgLS1wYXBlci1waW5rLTUwOiAjZmNlNGVjOwogICAgICAtLXBhcGVyLXBpbmstMTAwOiAjZjhiYmQwOwogICAgICAtLXBhcGVyLXBpbmstMjAwOiAjZjQ4ZmIxOwogICAgICAtLXBhcGVyLXBpbmstMzAwOiAjZjA2MjkyOwogICAgICAtLXBhcGVyLXBpbmstNDAwOiAjZWM0MDdhOwogICAgICAtLXBhcGVyLXBpbmstNTAwOiAjZTkxZTYzOwogICAgICAtLXBhcGVyLXBpbmstNjAwOiAjZDgxYjYwOwogICAgICAtLXBhcGVyLXBpbmstNzAwOiAjYzIxODViOwogICAgICAtLXBhcGVyLXBpbmstODAwOiAjYWQxNDU3OwogICAgICAtLXBhcGVyLXBpbmstOTAwOiAjODgwZTRmOwogICAgICAtLXBhcGVyLXBpbmstYTEwMDogI2ZmODBhYjsKICAgICAgLS1wYXBlci1waW5rLWEyMDA6ICNmZjQwODE7CiAgICAgIC0tcGFwZXItcGluay1hNDAwOiAjZjUwMDU3OwogICAgICAtLXBhcGVyLXBpbmstYTcwMDogI2M1MTE2MjsKCiAgICAgIC0tcGFwZXItcHVycGxlLTUwOiAjZjNlNWY1OwogICAgICAtLXBhcGVyLXB1cnBsZS0xMDA6ICNlMWJlZTc7CiAgICAgIC0tcGFwZXItcHVycGxlLTIwMDogI2NlOTNkODsKICAgICAgLS1wYXBlci1wdXJwbGUtMzAwOiAjYmE2OGM4OwogICAgICAtLXBhcGVyLXB1cnBsZS00MDA6ICNhYjQ3YmM7CiAgICAgIC0tcGFwZXItcHVycGxlLTUwMDogIzljMjdiMDsKICAgICAgLS1wYXBlci1wdXJwbGUtNjAwOiAjOGUyNGFhOwogICAgICAtLXBhcGVyLXB1cnBsZS03MDA6ICM3YjFmYTI7CiAgICAgIC0tcGFwZXItcHVycGxlLTgwMDogIzZhMWI5YTsKICAgICAgLS1wYXBlci1wdXJwbGUtOTAwOiAjNGExNDhjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMTAwOiAjZWE4MGZjOwogICAgICAtLXBhcGVyLXB1cnBsZS1hMjAwOiAjZTA0MGZiOwogICAgICAtLXBhcGVyLXB1cnBsZS1hNDAwOiAjZDUwMGY5OwogICAgICAtLXBhcGVyLXB1cnBsZS1hNzAwOiAjYWEwMGZmOwoKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDogI2VkZTdmNjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0xMDA6ICNkMWM0ZTk7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMjAwOiAjYjM5ZGRiOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTMwMDogIzk1NzVjZDsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS00MDA6ICM3ZTU3YzI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNTAwOiAjNjczYWI3OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTYwMDogIzVlMzViMTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS03MDA6ICM1MTJkYTg7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtODAwOiAjNDUyN2EwOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTkwMDogIzMxMWI5MjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hMTAwOiAjYjM4OGZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWEyMDA6ICM3YzRkZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTQwMDogIzY1MWZmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNzAwOiAjNjIwMGVhOwoKICAgICAgLS1wYXBlci1pbmRpZ28tNTA6ICNlOGVhZjY7CiAgICAgIC0tcGFwZXItaW5kaWdvLTEwMDogI2M1Y2FlOTsKICAgICAgLS1wYXBlci1pbmRpZ28tMjAwOiAjOWZhOGRhOwogICAgICAtLXBhcGVyLWluZGlnby0zMDA6ICM3OTg2Y2I7CiAgICAgIC0tcGFwZXItaW5kaWdvLTQwMDogIzVjNmJjMDsKICAgICAgLS1wYXBlci1pbmRpZ28tNTAwOiAjM2Y1MWI1OwogICAgICAtLXBhcGVyLWluZGlnby02MDA6ICMzOTQ5YWI7CiAgICAgIC0tcGFwZXItaW5kaWdvLTcwMDogIzMwM2Y5ZjsKICAgICAgLS1wYXBlci1pbmRpZ28tODAwOiAjMjgzNTkzOwogICAgICAtLXBhcGVyLWluZGlnby05MDA6ICMxYTIzN2U7CiAgICAgIC0tcGFwZXItaW5kaWdvLWExMDA6ICM4YzllZmY7CiAgICAgIC0tcGFwZXItaW5kaWdvLWEyMDA6ICM1MzZkZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE0MDA6ICMzZDVhZmU7CiAgICAgIC0tcGFwZXItaW5kaWdvLWE3MDA6ICMzMDRmZmU7CgogICAgICAtLXBhcGVyLWJsdWUtNTA6ICNlM2YyZmQ7CiAgICAgIC0tcGFwZXItYmx1ZS0xMDA6ICNiYmRlZmI7CiAgICAgIC0tcGFwZXItYmx1ZS0yMDA6ICM5MGNhZjk7CiAgICAgIC0tcGFwZXItYmx1ZS0zMDA6ICM2NGI1ZjY7CiAgICAgIC0tcGFwZXItYmx1ZS00MDA6ICM0MmE1ZjU7CiAgICAgIC0tcGFwZXItYmx1ZS01MDA6ICMyMTk2ZjM7CiAgICAgIC0tcGFwZXItYmx1ZS02MDA6ICMxZTg4ZTU7CiAgICAgIC0tcGFwZXItYmx1ZS03MDA6ICMxOTc2ZDI7CiAgICAgIC0tcGFwZXItYmx1ZS04MDA6ICMxNTY1YzA7CiAgICAgIC0tcGFwZXItYmx1ZS05MDA6ICMwZDQ3YTE7CiAgICAgIC0tcGFwZXItYmx1ZS1hMTAwOiAjODJiMWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTIwMDogIzQ0OGFmZjsKICAgICAgLS1wYXBlci1ibHVlLWE0MDA6ICMyOTc5ZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hNzAwOiAjMjk2MmZmOwoKICAgICAgLS1wYXBlci1saWdodC1ibHVlLTUwOiAjZTFmNWZlOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMTAwOiAjYjNlNWZjOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMjAwOiAjODFkNGZhOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtMzAwOiAjNGZjM2Y3OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNDAwOiAjMjliNmY2OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwOiAjMDNhOWY0OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNjAwOiAjMDM5YmU1OwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNzAwOiAjMDI4OGQxOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtODAwOiAjMDI3N2JkOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwOiAjMDE1NzliOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTEwMDogIzgwZDhmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWEyMDA6ICM0MGM0ZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNDAwOiAjMDBiMGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTcwMDogIzAwOTFlYTsKCiAgICAgIC0tcGFwZXItY3lhbi01MDogI2UwZjdmYTsKICAgICAgLS1wYXBlci1jeWFuLTEwMDogI2IyZWJmMjsKICAgICAgLS1wYXBlci1jeWFuLTIwMDogIzgwZGVlYTsKICAgICAgLS1wYXBlci1jeWFuLTMwMDogIzRkZDBlMTsKICAgICAgLS1wYXBlci1jeWFuLTQwMDogIzI2YzZkYTsKICAgICAgLS1wYXBlci1jeWFuLTUwMDogIzAwYmNkNDsKICAgICAgLS1wYXBlci1jeWFuLTYwMDogIzAwYWNjMTsKICAgICAgLS1wYXBlci1jeWFuLTcwMDogIzAwOTdhNzsKICAgICAgLS1wYXBlci1jeWFuLTgwMDogIzAwODM4ZjsKICAgICAgLS1wYXBlci1jeWFuLTkwMDogIzAwNjA2NDsKICAgICAgLS1wYXBlci1jeWFuLWExMDA6ICM4NGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hMjAwOiAjMThmZmZmOwogICAgICAtLXBhcGVyLWN5YW4tYTQwMDogIzAwZTVmZjsKICAgICAgLS1wYXBlci1jeWFuLWE3MDA6ICMwMGI4ZDQ7CgogICAgICAtLXBhcGVyLXRlYWwtNTA6ICNlMGYyZjE7CiAgICAgIC0tcGFwZXItdGVhbC0xMDA6ICNiMmRmZGI7CiAgICAgIC0tcGFwZXItdGVhbC0yMDA6ICM4MGNiYzQ7CiAgICAgIC0tcGFwZXItdGVhbC0zMDA6ICM0ZGI2YWM7CiAgICAgIC0tcGFwZXItdGVhbC00MDA6ICMyNmE2OWE7CiAgICAgIC0tcGFwZXItdGVhbC01MDA6ICMwMDk2ODg7CiAgICAgIC0tcGFwZXItdGVhbC02MDA6ICMwMDg5N2I7CiAgICAgIC0tcGFwZXItdGVhbC03MDA6ICMwMDc5NmI7CiAgICAgIC0tcGFwZXItdGVhbC04MDA6ICMwMDY5NWM7CiAgICAgIC0tcGFwZXItdGVhbC05MDA6ICMwMDRkNDA7CiAgICAgIC0tcGFwZXItdGVhbC1hMTAwOiAjYTdmZmViOwogICAgICAtLXBhcGVyLXRlYWwtYTIwMDogIzY0ZmZkYTsKICAgICAgLS1wYXBlci10ZWFsLWE0MDA6ICMxZGU5YjY7CiAgICAgIC0tcGFwZXItdGVhbC1hNzAwOiAjMDBiZmE1OwoKICAgICAgLS1wYXBlci1ncmVlbi01MDogI2U4ZjVlOTsKICAgICAgLS1wYXBlci1ncmVlbi0xMDA6ICNjOGU2Yzk7CiAgICAgIC0tcGFwZXItZ3JlZW4tMjAwOiAjYTVkNmE3OwogICAgICAtLXBhcGVyLWdyZWVuLTMwMDogIzgxYzc4NDsKICAgICAgLS1wYXBlci1ncmVlbi00MDA6ICM2NmJiNmE7CiAgICAgIC0tcGFwZXItZ3JlZW4tNTAwOiAjNGNhZjUwOwogICAgICAtLXBhcGVyLWdyZWVuLTYwMDogIzQzYTA0NzsKICAgICAgLS1wYXBlci1ncmVlbi03MDA6ICMzODhlM2M7CiAgICAgIC0tcGFwZXItZ3JlZW4tODAwOiAjMmU3ZDMyOwogICAgICAtLXBhcGVyLWdyZWVuLTkwMDogIzFiNWUyMDsKICAgICAgLS1wYXBlci1ncmVlbi1hMTAwOiAjYjlmNmNhOwogICAgICAtLXBhcGVyLWdyZWVuLWEyMDA6ICM2OWYwYWU7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTQwMDogIzAwZTY3NjsKICAgICAgLS1wYXBlci1ncmVlbi1hNzAwOiAjMDBjODUzOwoKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDogI2YxZjhlOTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0xMDA6ICNkY2VkYzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMjAwOiAjYzVlMWE1OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTMwMDogI2FlZDU4MTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi00MDA6ICM5Y2NjNjU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNTAwOiAjOGJjMzRhOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTYwMDogIzdjYjM0MjsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi03MDA6ICM2ODlmMzg7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tODAwOiAjNTU4YjJmOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTkwMDogIzMzNjkxZTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hMTAwOiAjY2NmZjkwOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWEyMDA6ICNiMmZmNTk7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTQwMDogIzc2ZmYwMzsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNzAwOiAjNjRkZDE3OwoKICAgICAgLS1wYXBlci1saW1lLTUwOiAjZjlmYmU3OwogICAgICAtLXBhcGVyLWxpbWUtMTAwOiAjZjBmNGMzOwogICAgICAtLXBhcGVyLWxpbWUtMjAwOiAjZTZlZTljOwogICAgICAtLXBhcGVyLWxpbWUtMzAwOiAjZGNlNzc1OwogICAgICAtLXBhcGVyLWxpbWUtNDAwOiAjZDRlMTU3OwogICAgICAtLXBhcGVyLWxpbWUtNTAwOiAjY2RkYzM5OwogICAgICAtLXBhcGVyLWxpbWUtNjAwOiAjYzBjYTMzOwogICAgICAtLXBhcGVyLWxpbWUtNzAwOiAjYWZiNDJiOwogICAgICAtLXBhcGVyLWxpbWUtODAwOiAjOWU5ZDI0OwogICAgICAtLXBhcGVyLWxpbWUtOTAwOiAjODI3NzE3OwogICAgICAtLXBhcGVyLWxpbWUtYTEwMDogI2Y0ZmY4MTsKICAgICAgLS1wYXBlci1saW1lLWEyMDA6ICNlZWZmNDE7CiAgICAgIC0tcGFwZXItbGltZS1hNDAwOiAjYzZmZjAwOwogICAgICAtLXBhcGVyLWxpbWUtYTcwMDogI2FlZWEwMDsKCiAgICAgIC0tcGFwZXIteWVsbG93LTUwOiAjZmZmZGU3OwogICAgICAtLXBhcGVyLXllbGxvdy0xMDA6ICNmZmY5YzQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTIwMDogI2ZmZjU5ZDsKICAgICAgLS1wYXBlci15ZWxsb3ctMzAwOiAjZmZmMTc2OwogICAgICAtLXBhcGVyLXllbGxvdy00MDA6ICNmZmVlNTg7CiAgICAgIC0tcGFwZXIteWVsbG93LTUwMDogI2ZmZWIzYjsKICAgICAgLS1wYXBlci15ZWxsb3ctNjAwOiAjZmRkODM1OwogICAgICAtLXBhcGVyLXllbGxvdy03MDA6ICNmYmMwMmQ7CiAgICAgIC0tcGFwZXIteWVsbG93LTgwMDogI2Y5YTgyNTsKICAgICAgLS1wYXBlci15ZWxsb3ctOTAwOiAjZjU3ZjE3OwogICAgICAtLXBhcGVyLXllbGxvdy1hMTAwOiAjZmZmZjhkOwogICAgICAtLXBhcGVyLXllbGxvdy1hMjAwOiAjZmZmZjAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNDAwOiAjZmZlYTAwOwogICAgICAtLXBhcGVyLXllbGxvdy1hNzAwOiAjZmZkNjAwOwoKICAgICAgLS1wYXBlci1hbWJlci01MDogI2ZmZjhlMTsKICAgICAgLS1wYXBlci1hbWJlci0xMDA6ICNmZmVjYjM7CiAgICAgIC0tcGFwZXItYW1iZXItMjAwOiAjZmZlMDgyOwogICAgICAtLXBhcGVyLWFtYmVyLTMwMDogI2ZmZDU0ZjsKICAgICAgLS1wYXBlci1hbWJlci00MDA6ICNmZmNhMjg7CiAgICAgIC0tcGFwZXItYW1iZXItNTAwOiAjZmZjMTA3OwogICAgICAtLXBhcGVyLWFtYmVyLTYwMDogI2ZmYjMwMDsKICAgICAgLS1wYXBlci1hbWJlci03MDA6ICNmZmEwMDA7CiAgICAgIC0tcGFwZXItYW1iZXItODAwOiAjZmY4ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLTkwMDogI2ZmNmYwMDsKICAgICAgLS1wYXBlci1hbWJlci1hMTAwOiAjZmZlNTdmOwogICAgICAtLXBhcGVyLWFtYmVyLWEyMDA6ICNmZmQ3NDA7CiAgICAgIC0tcGFwZXItYW1iZXItYTQwMDogI2ZmYzQwMDsKICAgICAgLS1wYXBlci1hbWJlci1hNzAwOiAjZmZhYjAwOwoKICAgICAgLS1wYXBlci1vcmFuZ2UtNTA6ICNmZmYzZTA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTEwMDogI2ZmZTBiMjsKICAgICAgLS1wYXBlci1vcmFuZ2UtMjAwOiAjZmZjYzgwOwogICAgICAtLXBhcGVyLW9yYW5nZS0zMDA6ICNmZmI3NGQ7CiAgICAgIC0tcGFwZXItb3JhbmdlLTQwMDogI2ZmYTcyNjsKICAgICAgLS1wYXBlci1vcmFuZ2UtNTAwOiAjZmY5ODAwOwogICAgICAtLXBhcGVyLW9yYW5nZS02MDA6ICNmYjhjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTcwMDogI2Y1N2MwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtODAwOiAjZWY2YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS05MDA6ICNlNjUxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWExMDA6ICNmZmQxODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWEyMDA6ICNmZmFiNDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE0MDA6ICNmZjkxMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLWE3MDA6ICNmZjY1MDA7CgogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwOiAjZmJlOWU3OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTEwMDogI2ZmY2NiYzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0yMDA6ICNmZmFiOTE7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMzAwOiAjZmY4YTY1OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTQwMDogI2ZmNzA0MzsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS01MDA6ICNmZjU3MjI7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNjAwOiAjZjQ1MTFlOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTcwMDogI2U2NGExOTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS04MDA6ICNkODQzMTU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtOTAwOiAjYmYzNjBjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWExMDA6ICNmZjllODA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTIwMDogI2ZmNmU0MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hNDAwOiAjZmYzZDAwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE3MDA6ICNkZDJjMDA7CgogICAgICAtLXBhcGVyLWJyb3duLTUwOiAjZWZlYmU5OwogICAgICAtLXBhcGVyLWJyb3duLTEwMDogI2Q3Y2NjODsKICAgICAgLS1wYXBlci1icm93bi0yMDA6ICNiY2FhYTQ7CiAgICAgIC0tcGFwZXItYnJvd24tMzAwOiAjYTE4ODdmOwogICAgICAtLXBhcGVyLWJyb3duLTQwMDogIzhkNmU2MzsKICAgICAgLS1wYXBlci1icm93bi01MDA6ICM3OTU1NDg7CiAgICAgIC0tcGFwZXItYnJvd24tNjAwOiAjNmQ0YzQxOwogICAgICAtLXBhcGVyLWJyb3duLTcwMDogIzVkNDAzNzsKICAgICAgLS1wYXBlci1icm93bi04MDA6ICM0ZTM0MmU7CiAgICAgIC0tcGFwZXItYnJvd24tOTAwOiAjM2UyNzIzOwoKICAgICAgLS1wYXBlci1ncmV5LTUwOiAjZmFmYWZhOwogICAgICAtLXBhcGVyLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLXBhcGVyLWdyZXktMjAwOiAjZWVlZWVlOwogICAgICAtLXBhcGVyLWdyZXktMzAwOiAjZTBlMGUwOwogICAgICAtLXBhcGVyLWdyZXktNDAwOiAjYmRiZGJkOwogICAgICAtLXBhcGVyLWdyZXktNTAwOiAjOWU5ZTllOwogICAgICAtLXBhcGVyLWdyZXktNjAwOiAjNzU3NTc1OwogICAgICAtLXBhcGVyLWdyZXktNzAwOiAjNjE2MTYxOwogICAgICAtLXBhcGVyLWdyZXktODAwOiAjNDI0MjQyOwogICAgICAtLXBhcGVyLWdyZXktOTAwOiAjMjEyMTIxOwoKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTA6ICNlY2VmZjE7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTEwMDogI2NmZDhkYzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMjAwOiAjYjBiZWM1OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0zMDA6ICM5MGE0YWU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTQwMDogIzc4OTA5YzsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNTAwOiAjNjA3ZDhiOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS02MDA6ICM1NDZlN2E7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTcwMDogIzQ1NWE2NDsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktODAwOiAjMzc0NzRmOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS05MDA6ICMyNjMyMzg7CgogICAgICAvKiBvcGFjaXR5IGZvciBkYXJrIHRleHQgb24gYSBsaWdodCBiYWNrZ3JvdW5kICovCiAgICAgIC0tZGFyay1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tZGFyay1kaXNhYmxlZC1vcGFjaXR5OiAwLjM4OyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWRhcmstc2Vjb25kYXJ5LW9wYWNpdHk6IDAuNTQ7CiAgICAgIC0tZGFyay1wcmltYXJ5LW9wYWNpdHk6IDAuODc7CgogICAgICAvKiBvcGFjaXR5IGZvciBsaWdodCB0ZXh0IG9uIGEgZGFyayBiYWNrZ3JvdW5kICovCiAgICAgIC0tbGlnaHQtZGl2aWRlci1vcGFjaXR5OiAwLjEyOwogICAgICAtLWxpZ2h0LWRpc2FibGVkLW9wYWNpdHk6IDAuMzsgLyogb3IgaGludCB0ZXh0IG9yIGljb24gKi8KICAgICAgLS1saWdodC1zZWNvbmRhcnktb3BhY2l0eTogMC43OwogICAgICAtLWxpZ2h0LXByaW1hcnktb3BhY2l0eTogMS4wOwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7YzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYzB0LmNvbnRlbnQpO3ZhciB1MHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLyoKICAgICAgICogWW91IGNhbiB1c2UgdGhlc2UgZ2VuZXJpYyB2YXJpYWJsZXMgaW4geW91ciBlbGVtZW50cyBmb3IgZWFzeSB0aGVtaW5nLgogICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYWxsIHlvdXIgZWxlbWVudHMgdXNlIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBhcyBpdHMgbWFpbgogICAgICAgKiBjb2xvciwgdGhlbiBzd2l0Y2hpbmcgZnJvbSBhIGxpZ2h0IHRvIGEgZGFyayB0aGVtZSBpcyBqdXN0IGEgbWF0dGVyIG9mCiAgICAgICAqIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBcYC0tcHJpbWFyeS10ZXh0LWNvbG9yXGAgaW4geW91ciBhcHBsaWNhdGlvbi4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS10ZXh0LWNvbG9yKTsKICAgICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWJhY2tncm91bmQtY29sb3IpOwogICAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3IpOwogICAgICAtLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpc2FibGVkLWNvbG9yKTsKICAgICAgLS1kaXZpZGVyLWNvbG9yOiB2YXIoLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yKTsKICAgICAgLS1lcnJvci1jb2xvcjogdmFyKC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMCk7CgogICAgICAvKgogICAgICAgKiBQcmltYXJ5IGFuZCBhY2NlbnQgY29sb3JzLiBBbHNvIHNlZSBjb2xvci5qcyBmb3IgbW9yZSBjb2xvcnMuCiAgICAgICAqLwogICAgICAtLXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLWxpZ2h0LXByaW1hcnktY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby0xMDApOwogICAgICAtLWRhcmstcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTcwMCk7CgogICAgICAtLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMjAwKTsKICAgICAgLS1saWdodC1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTEwMCk7CiAgICAgIC0tZGFyay1hY2NlbnQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstYTQwMCk7CgoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIExpZ2h0IGJhY2tncm91bmQgdGhlbWUKICAgICAgICovCiAgICAgIC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1saWdodC10aGVtZS1iYXNlLWNvbG9yOiAjMDAwMDAwOwogICAgICAtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1saWdodC10aGVtZS1zZWNvbmRhcnktY29sb3I6ICM3MzczNzM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM5YjliOWI7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXZpZGVyLWNvbG9yOiAjZGJkYmRiOwoKICAgICAgLyoKICAgICAgICogTWF0ZXJpYWwgRGVzaWduIERhcmsgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1kYXJrLXRoZW1lLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgICAgLS1kYXJrLXRoZW1lLWJhc2UtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS10ZXh0LWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWRhcmstdGhlbWUtc2Vjb25kYXJ5LWNvbG9yOiAjYmNiY2JjOyAgLyogZm9yIHNlY29uZGFyeSB0ZXh0IGFuZCBpY29ucyAqLwogICAgICAtLWRhcmstdGhlbWUtZGlzYWJsZWQtY29sb3I6ICM2NDY0NjQ7ICAvKiBkaXNhYmxlZC9oaW50IHRleHQgKi8KICAgICAgLS1kYXJrLXRoZW1lLWRpdmlkZXItY29sb3I6ICMzYzNjM2M7CgogICAgICAvKgogICAgICAgKiBEZXByZWNhdGVkIHZhbHVlcyBiZWNhdXNlIG9mIHRoZWlyIGNvbmZ1c2luZyBuYW1lcy4KICAgICAgICovCiAgICAgIC0tdGV4dC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLWRlZmF1bHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDt1MHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh1MHQuY29udGVudCk7dmFyIEVoPXtwcm9wZXJ0aWVzOntuYW1lOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7fSxkZXRhY2hlZDpmdW5jdGlvbigpe319O3ZhciBoVz1udWxsLFRoPXtwcm9wZXJ0aWVzOnt2YWxpZGF0b3I6e3R5cGU6U3RyaW5nfSxpbnZhbGlkOntub3RpZnk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIn19LHJlZ2lzdGVyZWQ6ZnVuY3Rpb24oKXtoVz1uZXcgZ28oe3R5cGU6InZhbGlkYXRvciJ9KX0sX2ludmFsaWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWludmFsaWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIpfSxnZXQgX3ZhbGlkYXRvcigpe3JldHVybiBoVyYmaFcuYnlLZXkodGhpcy52YWxpZGF0b3IpfSxoYXNWYWxpZGF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yIT1udWxsfSx2YWxpZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXZvaWQgMCYmdGhpcy52YWx1ZSE9PXZvaWQgMD90aGlzLmludmFsaWQ9IXRoaXMuX2dldFZhbGlkaXR5KHRoaXMudmFsdWUpOnRoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkoZSksIXRoaXMuaW52YWxpZH0sX2dldFZhbGlkaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhc1ZhbGlkYXRvcigpP3RoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZShlKTohMH19O3ZhciBmVz17cHJvcGVydGllczp7Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToib24iLG9ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9yZXF1aXJlZENoYW5nZWQocmVxdWlyZWQpIl0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hhc0lyb25DaGVja2VkRWxlbWVudEJlaGF2aW9yPSEwfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLmNoZWNrZWR9LF9yZXF1aXJlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLnJlcXVpcmVkP3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXJlcXVpcmVkIil9LF9jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPXRoaXMuY2hlY2tlZCx0aGlzLmZpcmUoImlyb24tY2hhbmdlIil9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXsodGhpcy52YWx1ZT09PXZvaWQgMHx8dGhpcy52YWx1ZT09PW51bGwpJiYodGhpcy52YWx1ZT0ib24iKX19LGgwdD1bRWgsVGgsZlddO3ZhciBwRT17b2JzZXJ2ZXJzOlsiX2ZvY3VzZWRDaGFuZ2VkKHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQpIl0sX2ZvY3VzZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJnRoaXMuZW5zdXJlUmlwcGxlKCksdGhpcy5oYXNSaXBwbGUoKSYmKHRoaXMuX3JpcHBsZS5ob2xkRG93bj1lKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPXN1Ll9jcmVhdGVSaXBwbGUoKTtyZXR1cm4gZS5pZD0iaW5rIixlLnNldEF0dHJpYnV0ZSgiY2VudGVyIiwiIiksZS5jbGFzc0xpc3QuYWRkKCJjaXJjbGUiKSxlfX0sang9W1NoLERpLHN1LHBFXTt2YXIgQ2JlPXtfY2hlY2tlZENoYW5nZWQ6ZnVuY3Rpb24oKXtmVy5fY2hlY2tlZENoYW5nZWQuY2FsbCh0aGlzKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5jaGVja2VkP3RoaXMuX3JpcHBsZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCIiKTp0aGlzLl9yaXBwbGUucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIikpfSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7c3UuX2J1dHRvblN0YXRlQ2hhbmdlZC5jYWxsKHRoaXMpLCF0aGlzLmRpc2FibGVkJiZ0aGlzLmlzQXR0YWNoZWQmJih0aGlzLmNoZWNrZWQ9dGhpcy5hY3RpdmUpfX0sWHg9W2p4LGgwdCxDYmVdO3ZhciBmMHQ9UWA8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1zaXplLCAxOHB4KTsKICAgIC8qIC0xcHggaXMgYSBzZW50aW5lbCBmb3IgdGhlIGRlZmF1bHQgYW5kIGlzIHJlcGxhY2VkIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZTogdmFyKC0tcGFwZXItY2hlY2tib3gtaW5rLXNpemUsIC0xcHgpOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICB9CgogIDpob3N0KFtoaWRkZW5dKSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAjY2hlY2tib3hDb250YWluZXIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtaW4td2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSk7CiAgICBtYXJnaW46IHZhcigtLXBhcGVyLWNoZWNrYm94LW1hcmdpbiwgaW5pdGlhbCk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItY2hlY2tib3gtdmVydGljYWwtYWxpZ24sIG1pZGRsZSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogIH0KCiAgI2luayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CgogICAgLyogQ2VudGVyIHRoZSByaXBwbGUgaW4gdGhlIGNoZWNrYm94IGJ5IG5lZ2F0aXZlIG9mZnNldHRpbmcgaXQgYnkKICAgICAqIChpbmtXaWR0aCAtIHJpcHBsZVdpZHRoKSAvIDIgKi8KICAgIHRvcDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogIH0KCiAgI2luazpkaXIocnRsKSB7CiAgICByaWdodDogY2FsYygwcHggLSAodmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSkgLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKSAvIDIpOwogICAgbGVmdDogYXV0bzsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2tib3ggewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlcjogc29saWQgMnB4OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTQwbXMsIGJvcmRlci1jb2xvciAxNDBtczsKCiAgICAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICAvKiBjaGVja2JveCBjaGVja2VkIGFuaW1hdGlvbnMgKi8KICAjY2hlY2tib3guY2hlY2tlZCAjY2hlY2ttYXJrIHsKICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwogICAgYW5pbWF0aW9uOiBjaGVja21hcmstZXhwYW5kIDE0MG1zIGVhc2Utb3V0IGZvcndhcmRzOwoKICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgfQoKICBALXdlYmtpdC1rZXlmcmFtZXMgY2hlY2ttYXJrLWV4cGFuZCB7CiAgICAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgQGtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKSByb3RhdGUoNDVkZWcpOwogICAgfQogICAgMTAwJSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgcm90YXRlKDQ1ZGVnKTsKICAgIH0KICB9CgogICNjaGVja2JveC5jaGVja2VkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI2NoZWNrbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB3aWR0aDogMzYlOwogICAgaGVpZ2h0OiA3MCU7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm9yZGVyLXRvcDogbm9uZTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiBjYWxjKDIvMTUgKiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUpKTsKICAgIGJvcmRlci1ib3R0b20td2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja21hcmstY29sb3IsIHdoaXRlKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDk3JSA4NiU7CiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsgLyogcHJvdGVjdCBhZ2FpbnN0IHBhZ2UtbGV2ZWwgYm94LXNpemluZyAqLwogIH0KCiAgI2NoZWNrbWFyazpkaXIocnRsKSB7CiAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTQlOwogIH0KCiAgLyogbGFiZWwgKi8KICAjY2hlY2tib3hMYWJlbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNjaGVja2JveExhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSkpOwogICAgQGFwcGx5IC0tcGFwZXItY2hlY2tib3gtbGFiZWwtY2hlY2tlZDsKICB9CgogICNjaGVja2JveExhYmVsOmRpcihydGwpIHsKICAgIHBhZGRpbmctcmlnaHQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgfQoKICAjY2hlY2tib3hMYWJlbFtoaWRkZW5dIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQoKICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3ggewogICAgb3BhY2l0eTogMC41OwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI2NoZWNrYm94IHsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjY2hlY2tib3hMYWJlbCAgewogICAgb3BhY2l0eTogMC42NTsKICB9CgogIC8qIGludmFsaWQgc3RhdGUgKi8KICAjY2hlY2tib3guaW52YWxpZDpub3QoLmNoZWNrZWQpIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtZXJyb3ItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0iY2hlY2tib3hDb250YWluZXIiPgogIDxkaXYgaWQ9ImNoZWNrYm94IiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja2JveENsYXNzKGNoZWNrZWQsIGludmFsaWQpXV0iPgogICAgPGRpdiBpZD0iY2hlY2ttYXJrIiBjbGFzcyQ9IltbX2NvbXB1dGVDaGVja21hcmtDbGFzcyhjaGVja2VkKV1dIj48L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJjaGVja2JveExhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtmMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpmMHQsaXM6InBhcGVyLWNoZWNrYm94IixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiY2hlY2tib3giLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemUiKS50cmltKCkscj0icHgiLG49dC5tYXRjaCgvW0EtWmEtel0rJC8pO24hPT1udWxsJiYocj1uWzBdKTt2YXIgaT1wYXJzZUZsb2F0KHQpLG89OC8zKmk7cj09PSJweCImJihvPU1hdGguZmxvb3IobyksbyUyIT09aSUyJiZvKyspLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSI6bytyfSl9fSl9LF9jb21wdXRlQ2hlY2tib3hDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSIiO3JldHVybiBlJiYocis9ImNoZWNrZWQgIiksdCYmKHIrPSJpbnZhbGlkIikscn0sX2NvbXB1dGVDaGVja21hcmtDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZT8iIjoiaGlkZGVuIn0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLmNoZWNrYm94Q29udGFpbmVyLHBFLl9jcmVhdGVSaXBwbGUuY2FsbCh0aGlzKX19KTtpZighd2luZG93LnBvbHltZXJTa2lwTG9hZGluZ0ZvbnRSb2JvdG8pe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTtlLnJlbD0ic3R5bGVzaGVldCIsZS50eXBlPSJ0ZXh0L2NzcyIsZS5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixlLmhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG8rTW9ubzo0MDAsNzAwfFJvYm90bzo0MDAsMzAwLDMwMGl0YWxpYyw0MDBpdGFsaWMsNTAwLDUwMGl0YWxpYyw3MDAsNzAwaXRhbGljIixkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBwMHQ9UWA8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogU2hhcmVkIFN0eWxlcyAqLwogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U6IHsKICAgICAgICBmb250LWZhbWlseTogJ1JvYm90bycsICdOb3RvJywgc2Fucy1zZXJpZjsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tY29kZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCAnQ29uc29sYXMnLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29tbW9uLWV4cGVuc2l2ZS1rZXJuaW5nOiB7CiAgICAgICAgdGV4dC1yZW5kZXJpbmc6IG9wdGltaXplTGVnaWJpbGl0eTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOiB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9OwoKICAgICAgLyogTWF0ZXJpYWwgRm9udCBTdHlsZXMgKi8KCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5NDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDExMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDQ0ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkzOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogNTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAyNmVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiA0NXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQ4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDM0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWhlYWRsaW5lOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDEyZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtdGl0bGU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZDogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWJvZHkyOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTE6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jYXB0aW9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LW1lbnU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYnV0dG9uOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAxOGVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtY29kZTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgIH0KCiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtwMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwMHQuY29udGVudCk7dmFyIHBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cFcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7cFcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMjRweCA0MHB4OwoKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1kaWFsb2ctYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZzsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKikgewogICAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgubm8tcGFkZGluZykgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGlzIHNlbGVjdG9yIHdhcyBcYDpob3N0ID4gOjpjb250ZW50IGgyXGAuIEluIDIueCA8c2xvdD4gYWxsb3dzCiAgICAgIHRvIHNlbGVjdCBkaXJlY3QgY2hpbGRyZW4gb25seSwgd2hpY2ggaW5jcmVhc2VzIHRoZSB3ZWlnaHQgb2YgdGhpcwogICAgICBzZWxlY3Rvciwgc28gd2UgaGF2ZSB0byByZS1kZWZpbmUgZmlyc3QtY2hpbGQvbGFzdC1jaGlsZCBtYXJnaW5zIGJlbG93LiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMikgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtdGl0bGU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICAvKiBBcHBseSBtaXhpbiBhZ2FpbiwgaW4gY2FzZSBpdCBzZXRzIG1hcmdpbi10b3AuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLWJvdHRvbS4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nLXRpdGxlOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgucGFwZXItZGlhbG9nLWJ1dHRvbnMpLAogICAgICA6aG9zdCA+IDo6c2xvdHRlZCguYnV0dG9ucykgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiA4cHggOHB4IDhweCAyNHB4OwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWRpYWxvZy1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWVuZC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwVy5jb250ZW50KTt2YXIgZDB0PXtwcm9wZXJ0aWVzOnthbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxlbnRyeUFuaW1hdGlvbjp7b2JzZXJ2ZXI6Il9lbnRyeUFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfSxleGl0QW5pbWF0aW9uOntvYnNlcnZlcjoiX2V4aXRBbmltYXRpb25DaGFuZ2VkIix0eXBlOlN0cmluZ319LF9lbnRyeUFuaW1hdGlvbkNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmFuaW1hdGlvbkNvbmZpZz10aGlzLmFuaW1hdGlvbkNvbmZpZ3x8e30sdGhpcy5hbmltYXRpb25Db25maWcuZW50cnk9W3tuYW1lOnRoaXMuZW50cnlBbmltYXRpb24sbm9kZTp0aGlzfV19LF9leGl0QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5leGl0PVt7bmFtZTp0aGlzLmV4aXRBbmltYXRpb24sbm9kZTp0aGlzfV19LF9jb3B5UHJvcGVydGllczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0sX2Nsb25lQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXtpc0Nsb25lOiEwfTtyZXR1cm4gdGhpcy5fY29weVByb3BlcnRpZXModCxlKSx0fSxfZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlOmZ1bmN0aW9uKGUsdCxyKXtpZighIXRoaXMuYW5pbWF0aW9uQ29uZmlnKXtpZih0aGlzLmFuaW1hdGlvbkNvbmZpZy52YWx1ZSYmdHlwZW9mIHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlPT0iZnVuY3Rpb24iKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoInBsYXlBbmltYXRpb24iLCJQbGVhc2UgcHV0ICdhbmltYXRpb25Db25maWcnIGluc2lkZSBvZiB5b3VyIGNvbXBvbmVudHMgJ3Byb3BlcnRpZXMnIG9iamVjdCBpbnN0ZWFkIG9mIG91dHNpZGUgb2YgaXQuIikpO3JldHVybn12YXIgbjtpZihlP249dGhpcy5hbmltYXRpb25Db25maWdbZV06bj10aGlzLmFuaW1hdGlvbkNvbmZpZyxBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLG4pZm9yKHZhciBpLG89MDtpPW5bb107bysrKWlmKGkuYW5pbWF0YWJsZSlpLmFuaW1hdGFibGUuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShpLnR5cGV8fGUsdCxyKTtlbHNlIGlmKGkuaWQpe3ZhciBhPXRbaS5pZF07YT8oYS5pc0Nsb25lfHwodFtpLmlkXT10aGlzLl9jbG9uZUNvbmZpZyhhKSxhPXRbaS5pZF0pLHRoaXMuX2NvcHlQcm9wZXJ0aWVzKGEsaSkpOnRbaS5pZF09aX1lbHNlIHIucHVzaChpKX19LGdldEFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbihlKXt2YXIgdD17fSxyPVtdO3RoaXMuX2dldEFuaW1hdGlvbkNvbmZpZ1JlY3Vyc2l2ZShlLHQscik7Zm9yKHZhciBuIGluIHQpci5wdXNoKHRbbl0pO3JldHVybiByfX07dmFyIEFiZT17X2NvbmZpZ3VyZUFuaW1hdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9W10scj1bXTtpZihlLmxlbmd0aD4wKWZvcihsZXQgaSxvPTA7aT1lW29dO28rKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLm5hbWUpO2lmKGEuaXNOZW9uQW5pbWF0aW9uKXtsZXQgcz1udWxsO2EuY29uZmlndXJlfHwoYS5jb25maWd1cmU9ZnVuY3Rpb24obCl7cmV0dXJuIG51bGx9KSxzPWEuY29uZmlndXJlKGkpLHIucHVzaCh7cmVzdWx0OnMsY29uZmlnOmksbmVvbkFuaW1hdGlvbjphfSl9ZWxzZSBjb25zb2xlLndhcm4odGhpcy5pcysiOiIsaS5uYW1lLCJub3QgZm91bmQhIil9Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl0ucmVzdWx0LG89cltuXS5jb25maWcsYT1yW25dLm5lb25BbmltYXRpb247dHJ5e3R5cGVvZiBpLmNhbmNlbCE9ImZ1bmN0aW9uIiYmKGk9ZG9jdW1lbnQudGltZWxpbmUucGxheShpKSl9Y2F0Y2gocyl7aT1udWxsLGNvbnNvbGUud2FybigiQ291bGRudCBwbGF5IiwiKCIsby5uYW1lLCIpLiIscyl9aSYmdC5wdXNoKHtuZW9uQW5pbWF0aW9uOmEsY29uZmlnOm8sYW5pbWF0aW9uOml9KX1yZXR1cm4gdH0sX3Nob3VsZENvbXBsZXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0hMCxyPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXS5hbmltYXRpb24ucGxheVN0YXRlIT0iZmluaXNoZWQiKXt0PSExO2JyZWFrfXJldHVybiB0fSxfY29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XS5uZW9uQW5pbWF0aW9uLmNvbXBsZXRlKGVbdF0uY29uZmlnKTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLmFuaW1hdGlvbi5jYW5jZWwoKX0scGxheUFuaW1hdGlvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QW5pbWF0aW9uQ29uZmlnKGUpO2lmKCEhcil7dGhpcy5fYWN0aXZlPXRoaXMuX2FjdGl2ZXx8e30sdGhpcy5fYWN0aXZlW2VdJiYodGhpcy5fY29tcGxldGUodGhpcy5fYWN0aXZlW2VdKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdKTt2YXIgbj10aGlzLl9jb25maWd1cmVBbmltYXRpb25zKHIpO2lmKG4ubGVuZ3RoPT0wKXt0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pO3JldHVybn10aGlzLl9hY3RpdmVbZV09bjtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldLmFuaW1hdGlvbi5vbmZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3Nob3VsZENvbXBsZXRlKG4pJiYodGhpcy5fY29tcGxldGUobiksZGVsZXRlIHRoaXMuX2FjdGl2ZVtlXSx0aGlzLmZpcmUoIm5lb24tYW5pbWF0aW9uLWZpbmlzaCIsdCx7YnViYmxlczohMX0pKX0uYmluZCh0aGlzKX19LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9hY3RpdmUpe3ZhciB0PXRoaXMuX2FjdGl2ZVtlXTtmb3IodmFyIHIgaW4gdCl0W3JdLmFuaW1hdGlvbi5jYW5jZWwoKX10aGlzLl9hY3RpdmU9e319fSxiOT1bZDB0LEFiZV07dmFyIHc5LFBiZT0oKT0+e2lmKHc5IT09dm9pZCAwKXJldHVybiB3OTtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtPYmplY3QuYXNzaWduKGUuc3R5bGUse292ZXJmbG93OiJhdXRvIixwb3NpdGlvbjoiZml4ZWQiLGxlZnQ6IjBweCIsdG9wOiIwcHgiLG1heFdpZHRoOiIxMDBweCIsbWF4SGVpZ2h0OiIxMDBweCJ9KTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdC5zdHlsZS53aWR0aD0iMjAwcHgiLHQuc3R5bGUuaGVpZ2h0PSIyMDBweCIsZS5hcHBlbmRDaGlsZCh0KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHc5PU1hdGguYWJzKGUub2Zmc2V0V2lkdGgtMTAwKT4xP2Uub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aDowLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksdzl9LG0wdD17cHJvcGVydGllczp7c2l6aW5nVGFyZ2V0Ont0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0sZml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93fSxub092ZXJsYXA6e3R5cGU6Qm9vbGVhbn0scG9zaXRpb25UYXJnZXQ6e3R5cGU6RWxlbWVudH0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZ30sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmd9LGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxob3Jpem9udGFsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sdmVydGljYWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxhdXRvRml0T25BdHRhY2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfZml0SW5mbzp7dHlwZTpPYmplY3R9fSxnZXQgX2ZpdFdpZHRoKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lcldpZHRoOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLGV9LGdldCBfZml0SGVpZ2h0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPXRoaXMuZml0SW50by5pbm5lckhlaWdodDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsZX0sZ2V0IF9maXRMZWZ0KCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCxlfSxnZXQgX2ZpdFRvcCgpe3ZhciBlO3JldHVybiB0aGlzLmZpdEludG89PT13aW5kb3c/ZT0wOmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxlfSxnZXQgX2RlZmF1bHRQb3NpdGlvblRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJihlPWUuaG9zdCksZX0sZ2V0IF9sb2NhbGVIb3Jpem9udGFsQWxpZ24oKXtpZih0aGlzLl9pc1JUTCl7aWYodGhpcy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiKXJldHVybiJsZWZ0IjtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJsZWZ0IilyZXR1cm4icmlnaHQifXJldHVybiB0aGlzLmhvcml6b250YWxBbGlnbn0sZ2V0IF9fc2hvdWxkUG9zaXRpb24oKXtyZXR1cm4odGhpcy5ob3Jpem9udGFsQWxpZ258fHRoaXMudmVydGljYWxBbGlnbikmJnRoaXMucG9zaXRpb25UYXJnZXR9LGdldCBfaXNSVEwoKXtyZXR1cm4gdHlwZW9mIHRoaXMuX21lbW9pemVkSXNSVEw9PSJ1bmRlZmluZWQiJiYodGhpcy5fbWVtb2l6ZWRJc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PSJydGwiKSx0aGlzLl9tZW1vaXplZElzUlRMfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb25UYXJnZXQ9dGhpcy5wb3NpdGlvblRhcmdldHx8dGhpcy5fZGVmYXVsdFBvc2l0aW9uVGFyZ2V0LHRoaXMuYXV0b0ZpdE9uQXR0YWNoJiYod2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlzcGxheT09PSJub25lIj9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5maXQoKX0uYmluZCh0aGlzKSk6KHdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx0aGlzLmZpdCgpKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fX2RlZmVycmVkRml0JiYoY2xlYXJUaW1lb3V0KHRoaXMuX19kZWZlcnJlZEZpdCksdGhpcy5fX2RlZmVycmVkRml0PW51bGwpfSxmaXQ6ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uKCksdGhpcy5jb25zdHJhaW4oKSx0aGlzLmNlbnRlcigpfSxfZGlzY292ZXJJbmZvOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2ZpdEluZm8pe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5zaXppbmdUYXJnZXQpO3RoaXMuX2ZpdEluZm89e2lubGluZVN0eWxlOnt0b3A6dGhpcy5zdHlsZS50b3B8fCIiLGxlZnQ6dGhpcy5zdHlsZS5sZWZ0fHwiIixwb3NpdGlvbjp0aGlzLnN0eWxlLnBvc2l0aW9ufHwiIn0sc2l6ZXJJbmxpbmVTdHlsZTp7bWF4V2lkdGg6dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGh8fCIiLG1heEhlaWdodDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHR8fCIiLGJveFNpemluZzp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmd8fCIifSxwb3NpdGlvbmVkQnk6e3ZlcnRpY2FsbHk6ZS50b3AhPT0iYXV0byI/InRvcCI6ZS5ib3R0b20hPT0iYXV0byI/ImJvdHRvbSI6bnVsbCxob3Jpem9udGFsbHk6ZS5sZWZ0IT09ImF1dG8iPyJsZWZ0IjplLnJpZ2h0IT09ImF1dG8iPyJyaWdodCI6bnVsbH0sc2l6ZWRCeTp7aGVpZ2h0OnQubWF4SGVpZ2h0IT09Im5vbmUiLHdpZHRoOnQubWF4V2lkdGghPT0ibm9uZSIsbWluV2lkdGg6cGFyc2VJbnQodC5taW5XaWR0aCwxMCl8fDAsbWluSGVpZ2h0OnBhcnNlSW50KHQubWluSGVpZ2h0LDEwKXx8MH0sbWFyZ2luOnt0b3A6cGFyc2VJbnQoZS5tYXJnaW5Ub3AsMTApfHwwLHJpZ2h0OnBhcnNlSW50KGUubWFyZ2luUmlnaHQsMTApfHwwLGJvdHRvbTpwYXJzZUludChlLm1hcmdpbkJvdHRvbSwxMCl8fDAsbGVmdDpwYXJzZUludChlLm1hcmdpbkxlZnQsMTApfHwwfX19fSxyZXNldEZpdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZpdEluZm98fHt9O2Zvcih2YXIgdCBpbiBlLnNpemVySW5saW5lU3R5bGUpdGhpcy5zaXppbmdUYXJnZXQuc3R5bGVbdF09ZS5zaXplcklubGluZVN0eWxlW3RdO2Zvcih2YXIgdCBpbiBlLmlubGluZVN0eWxlKXRoaXMuc3R5bGVbdF09ZS5pbmxpbmVTdHlsZVt0XTt0aGlzLl9maXRJbmZvPW51bGx9LHJlZml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsTGVmdCx0PXRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbFRvcDt0aGlzLnJlc2V0Rml0KCksdGhpcy5maXQoKSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0PWUsdGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wPXR9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbilyZXR1cm47dGhpcy5fZGlzY292ZXJJbmZvKCksd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2goKSx0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Iix0aGlzLnN0eWxlLmxlZnQ9IjBweCIsdGhpcy5zdHlsZS50b3A9IjBweCI7dmFyIGU9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0PXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLnBvc2l0aW9uVGFyZ2V0KSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2xldCBuLGksbyxhO3RoaXMuZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFycyYmKG49dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsaT10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsbz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxhPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCk7dmFyIHM9dGhpcy5fZml0SW5mby5tYXJnaW4sbD17d2lkdGg6ZS53aWR0aCtzLmxlZnQrcy5yaWdodCxoZWlnaHQ6ZS5oZWlnaHQrcy50b3Arcy5ib3R0b219LGM9dGhpcy5fX2dldFBvc2l0aW9uKHRoaXMuX2xvY2FsZUhvcml6b250YWxBbGlnbix0aGlzLnZlcnRpY2FsQWxpZ24sbCxlLHQsciksdT1jLmxlZnQrcy5sZWZ0LGg9Yy50b3Arcy50b3AsZj1NYXRoLm1pbihyLnJpZ2h0LXMucmlnaHQsdStlLndpZHRoKSxwPU1hdGgubWluKHIuYm90dG9tLXMuYm90dG9tLGgrZS5oZWlnaHQpO3U9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbih1LGYtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbldpZHRoKSksaD1NYXRoLm1heChyLnRvcCtzLnRvcCxNYXRoLm1pbihoLHAtdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCkpO2xldCBkPU1hdGgubWF4KGYtdSx0aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpLGc9TWF0aC5tYXgocC1oLHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5IZWlnaHQpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWQrInB4Iix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhIZWlnaHQ9ZysicHgiO2xldCBfPXUtZS5sZWZ0LHk9aC1lLnRvcDtpZih0aGlzLnN0eWxlLmxlZnQ9YCR7X31weGAsdGhpcy5zdHlsZS50b3A9YCR7eX1weGAsdGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzKXtsZXQgeD10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsYj10aGlzLnNpemluZ1RhcmdldC5jbGllbnRIZWlnaHQsUz1pLWEsUD14LWItUztpZihQPjApe2xldCBMPXIuaGVpZ2h0LXMudG9wLXMuYm90dG9tLFI9TWF0aC5taW4oTCxnK1ApO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1gJHtSfXB4YDtsZXQgRj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRIZWlnaHQsej1GLXgsVTtjLnZlcnRpY2FsQWxpZ249PT0idG9wIj9VPXk6Yy52ZXJ0aWNhbEFsaWduPT09Im1pZGRsZSI/VT15LXovMjpjLnZlcnRpY2FsQWxpZ249PT0iYm90dG9tIiYmKFU9eS16KSxVPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKFUsci5ib3R0b20tcy5ib3R0b20tRikpLHRoaXMuc3R5bGUudG9wPWAke1V9cHhgfWxldCBrPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoLE89dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50V2lkdGgsRD1uLW8sST1rLU8tRDtpZihJPjApe2xldCBMPVBiZSgpLFI9ci53aWR0aC1zLmxlZnQtcy5yaWdodCxGPU1hdGgubWluKFIsZCtJLUwpO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heFdpZHRoPWAke0Z9cHhgO2xldCB6PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldFdpZHRoK0wsVT16LWssVztjLmhvcml6b250YWxBbGlnbj09PSJsZWZ0Ij9XPV86Yy5ob3Jpem9udGFsQWxpZ249PT0iY2VudGVyIj9XPV8tVS8yOmMuaG9yaXpvbnRhbEFsaWduPT09InJpZ2h0IiYmKFc9Xy1VKSxXPU1hdGgubWF4KHIubGVmdCtzLmxlZnQsTWF0aC5taW4oVyxyLnJpZ2h0LXMucmlnaHQteikpLHRoaXMuc3R5bGUubGVmdD1gJHtXfXB4YH19fSxjb25zdHJhaW46ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXt0aGlzLl9kaXNjb3ZlckluZm8oKTt2YXIgZT10aGlzLl9maXRJbmZvO2UucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsdGhpcy5zdHlsZS50b3A9IjBweCIpLGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLmxlZnQ9IjBweCIpLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZz0iYm9yZGVyLWJveCI7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnNpemVkQnkuaGVpZ2h0fHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5LnZlcnRpY2FsbHksInRvcCIsImJvdHRvbSIsIkhlaWdodCIpLGUuc2l6ZWRCeS53aWR0aHx8dGhpcy5fX3NpemVEaW1lbnNpb24odCxlLnBvc2l0aW9uZWRCeS5ob3Jpem9udGFsbHksImxlZnQiLCJyaWdodCIsIldpZHRoIil9fSxfc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3RoaXMuX19zaXplRGltZW5zaW9uKGUsdCxyLG4saSl9LF9fc2l6ZURpbWVuc2lvbjpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPXRoaXMuX2ZpdEluZm8sYT10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKSxzPWk9PT0iV2lkdGgiP2Eud2lkdGg6YS5oZWlnaHQsbD10PT09bixjPWw/cy1lW25dOmVbcl0sdT1vLm1hcmdpbltsP3I6bl0saD0ib2Zmc2V0IitpLGY9dGhpc1toXS10aGlzLnNpemluZ1RhcmdldFtoXTt0aGlzLnNpemluZ1RhcmdldC5zdHlsZVsibWF4IitpXT1zLXUtYy1mKyJweCJ9LGNlbnRlcjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm8ucG9zaXRpb25lZEJ5O2lmKCEoZS52ZXJ0aWNhbGx5JiZlLmhvcml6b250YWxseSkpe3RoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnZlcnRpY2FsbHl8fCh0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5ob3Jpem9udGFsbHl8fCh0aGlzLnN0eWxlLmxlZnQ9IjBweCIpO3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj10aGlzLl9fZ2V0Tm9ybWFsaXplZFJlY3QodGhpcy5maXRJbnRvKTtpZighZS52ZXJ0aWNhbGx5KXt2YXIgbj1yLnRvcC10LnRvcCsoci5oZWlnaHQtdC5oZWlnaHQpLzI7dGhpcy5zdHlsZS50b3A9bisicHgifWlmKCFlLmhvcml6b250YWxseSl7dmFyIGk9ci5sZWZ0LXQubGVmdCsoci53aWR0aC10LndpZHRoKS8yO3RoaXMuc3R5bGUubGVmdD1pKyJweCJ9fX19LF9fZ2V0Tm9ybWFsaXplZFJlY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR8fGU9PT13aW5kb3c/e3RvcDowLGxlZnQ6MCx3aWR0aDp3aW5kb3cuaW5uZXJXaWR0aCxoZWlnaHQ6d2luZG93LmlubmVySGVpZ2h0LHJpZ2h0OndpbmRvdy5pbm5lcldpZHRoLGJvdHRvbTp3aW5kb3cuaW5uZXJIZWlnaHR9OmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9LF9fZ2V0T2Zmc2NyZWVuQXJlYTpmdW5jdGlvbihlLHQscil7dmFyIG49TWF0aC5taW4oMCxlLnRvcCkrTWF0aC5taW4oMCxyLmJvdHRvbS0oZS50b3ArdC5oZWlnaHQpKSxpPU1hdGgubWluKDAsZS5sZWZ0KStNYXRoLm1pbigwLHIucmlnaHQtKGUubGVmdCt0LndpZHRoKSk7cmV0dXJuIE1hdGguYWJzKG4pKnQud2lkdGgrTWF0aC5hYnMoaSkqdC5oZWlnaHR9LF9fZ2V0UG9zaXRpb246ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3ZhciBhPVt7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0K3RoaXMuaG9yaXpvbnRhbE9mZnNldH0se3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLnJpZ2h0LXIud2lkdGgtdGhpcy5ob3Jpem9udGFsT2Zmc2V0fV07aWYodGhpcy5ub092ZXJsYXApe2Zvcih2YXIgcz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9e307Zm9yKHZhciB1IGluIGFbc10pY1t1XT1hW3NdW3VdO2EucHVzaChjKX1hWzBdLnRvcD1hWzFdLnRvcCs9aS5oZWlnaHQsYVsyXS50b3A9YVszXS50b3AtPWkuaGVpZ2h0LGFbNF0ubGVmdD1hWzZdLmxlZnQrPWkud2lkdGgsYVs1XS5sZWZ0PWFbN10ubGVmdC09aS53aWR0aH10PXQ9PT0iYXV0byI/bnVsbDp0LGU9ZT09PSJhdXRvIj9udWxsOmUsKCFlfHxlPT09ImNlbnRlciIpJiYoYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCsodGhpcy5ub092ZXJsYXA/aS5oZWlnaHQ6MCksbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246ImJvdHRvbSIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLmJvdHRvbS1yLmhlaWdodC10aGlzLnZlcnRpY2FsT2Zmc2V0LSh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pKSwoIXR8fHQ9PT0ibWlkZGxlIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJsZWZ0Iix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLndpZHRoOjApfSksYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoicmlnaHQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSksdD09PSJtaWRkbGUiJiZlPT09ImNlbnRlciImJmEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSk7Zm9yKHZhciBoLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIGY9YVtzXSxwPWYudmVydGljYWxBbGlnbj09PXQsZD1mLmhvcml6b250YWxBbGlnbj09PWU7aWYoIXRoaXMuZHluYW1pY0FsaWduJiYhdGhpcy5ub092ZXJsYXAmJnAmJmQpe2g9ZjticmVha312YXIgZz0oIXR8fHApJiYoIWV8fGQpO2lmKCEoIXRoaXMuZHluYW1pY0FsaWduJiYhZykpe2lmKGYub2Zmc2NyZWVuQXJlYT10aGlzLl9fZ2V0T2Zmc2NyZWVuQXJlYShmLHIsbyksZi5vZmZzY3JlZW5BcmVhPT09MCYmZyl7aD1mO2JyZWFrfWg9aHx8Zjt2YXIgXz1mLm9mZnNjcmVlbkFyZWEtaC5vZmZzY3JlZW5BcmVhOyhfPDB8fF89PT0wJiYocHx8ZCkpJiYoaD1mKX19cmV0dXJuIGh9fTt2YXIgJHg9RWxlbWVudC5wcm90b3R5cGUsUzk9JHgubWF0Y2hlc3x8JHgubWF0Y2hlc1NlbGVjdG9yfHwkeC5tb3pNYXRjaGVzU2VsZWN0b3J8fCR4Lm1zTWF0Y2hlc1NlbGVjdG9yfHwkeC5vTWF0Y2hlc1NlbGVjdG9yfHwkeC53ZWJraXRNYXRjaGVzU2VsZWN0b3IsZFc9Y2xhc3N7Z2V0VGFiYmFibGVOb2Rlcyh0KXt2YXIgcj1bXSxuPXRoaXMuX2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscik7cmV0dXJuIG4/dGhpcy5fc29ydEJ5VGFiSW5kZXgocik6cn1pc0ZvY3VzYWJsZSh0KXtyZXR1cm4gUzkuY2FsbCh0LCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBvYmplY3QiKT9TOS5jYWxsKHQsIjpub3QoW2Rpc2FibGVkXSkiKTpTOS5jYWxsKHQsImFbaHJlZl0sIGFyZWFbaHJlZl0sIGlmcmFtZSwgW3RhYmluZGV4XSwgW2NvbnRlbnRFZGl0YWJsZV0iKX1pc1RhYmJhYmxlKHQpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlKHQpJiZTOS5jYWxsKHQsJzpub3QoW3RhYmluZGV4PSItMSJdKScpJiZ0aGlzLl9pc1Zpc2libGUodCl9X25vcm1hbGl6ZWRUYWJJbmRleCh0KXtpZih0aGlzLmlzRm9jdXNhYmxlKHQpKXt2YXIgcj10LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8MDtyZXR1cm4gTnVtYmVyKHIpfXJldHVybi0xfV9jb2xsZWN0VGFiYmFibGVOb2Rlcyh0LHIpe2lmKHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4hMTt2YXIgbj10O2lmKCF0aGlzLl9pc1Zpc2libGUobikpcmV0dXJuITE7dmFyIGk9dGhpcy5fbm9ybWFsaXplZFRhYkluZGV4KG4pLG89aT4wO2k+PTAmJnIucHVzaChuKTt2YXIgYTtuLmxvY2FsTmFtZT09PSJjb250ZW50Inx8bi5sb2NhbE5hbWU9PT0ic2xvdCI/YT16dChuKS5nZXREaXN0cmlidXRlZE5vZGVzKCk6YT16dChuLnJvb3R8fG4pLmNoaWxkcmVuO2Zvcih2YXIgcz0wO3M8YS5sZW5ndGg7cysrKW89dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXMoYVtzXSxyKXx8bztyZXR1cm4gb31faXNWaXNpYmxlKHQpe3ZhciByPXQuc3R5bGU7cmV0dXJuIHIudmlzaWJpbGl0eSE9PSJoaWRkZW4iJiZyLmRpc3BsYXkhPT0ibm9uZSI/KHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIik6ITF9X3NvcnRCeVRhYkluZGV4KHQpe3ZhciByPXQubGVuZ3RoO2lmKHI8MilyZXR1cm4gdDt2YXIgbj1NYXRoLmNlaWwoci8yKSxpPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UoMCxuKSksbz10aGlzLl9zb3J0QnlUYWJJbmRleCh0LnNsaWNlKG4pKTtyZXR1cm4gdGhpcy5fbWVyZ2VTb3J0QnlUYWJJbmRleChpLG8pfV9tZXJnZVNvcnRCeVRhYkluZGV4KHQscil7Zm9yKHZhciBuPVtdO3QubGVuZ3RoPjAmJnIubGVuZ3RoPjA7KXRoaXMuX2hhc0xvd2VyVGFiT3JkZXIodFswXSxyWzBdKT9uLnB1c2goci5zaGlmdCgpKTpuLnB1c2godC5zaGlmdCgpKTtyZXR1cm4gbi5jb25jYXQodCxyKX1faGFzTG93ZXJUYWJPcmRlcih0LHIpe3ZhciBuPU1hdGgubWF4KHQudGFiSW5kZXgsMCksaT1NYXRoLm1heChyLnRhYkluZGV4LDApO3JldHVybiBuPT09MHx8aT09PTA/aT5uOm4+aX19LGcwdD1uZXcgZFc7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZC1jb2xvciwgIzAwMCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wOwogICAgICB9CgogICAgICA6aG9zdCgub3BlbmVkKSB7CiAgICAgICAgb3BhY2l0eTogdmFyKC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wYWNpdHksIDAuNik7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0taXJvbi1vdmVybGF5LWJhY2tkcm9wLW9wZW5lZDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tb3ZlcmxheS1iYWNrZHJvcCIscHJvcGVydGllczp7b3BlbmVkOntyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e3RyYW5zaXRpb25lbmQ6Il9vblRyYW5zaXRpb25lbmQifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKX0scHJlcGFyZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5wYXJlbnROb2RlJiZ6dChkb2N1bWVudC5ib2R5KS5hcHBlbmRDaGlsZCh0aGlzKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkPSExfSxjb21wbGV0ZTpmdW5jdGlvbigpeyF0aGlzLm9wZW5lZCYmdGhpcy5wYXJlbnROb2RlPT09ZG9jdW1lbnQuYm9keSYmenQodGhpcy5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZCh0aGlzKX0sX29uVHJhbnNpdGlvbmVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJnRoaXMuY29tcGxldGUoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZSl0aGlzLnByZXBhcmUoKTtlbHNle3ZhciB0PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpOyh0LnRyYW5zaXRpb25EdXJhdGlvbj09PSIwcyJ8fHQub3BhY2l0eT09MCkmJnRoaXMuY29tcGxldGUoKX0hdGhpcy5pc0F0dGFjaGVkfHwodGhpcy5fX29wZW5lZFJhZiYmKHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fb3BlbmVkUmFmKSx0aGlzLl9fb3BlbmVkUmFmPW51bGwpLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuX19vcGVuZWRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3RoaXMuX19vcGVuZWRSYWY9bnVsbCx0aGlzLnRvZ2dsZUNsYXNzKCJvcGVuZWQiLHRoaXMub3BlbmVkKX0uYmluZCh0aGlzKSkpfX0pO3ZhciBtVz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX292ZXJsYXlzPVtdLHRoaXMuX21pbmltdW1aPTEwMSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCxFbShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsInRhcCIsZnVuY3Rpb24oKXt9KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0YXAiLHRoaXMuX29uQ2FwdHVyZUNsaWNrLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9vbkNhcHR1cmVGb2N1cy5iaW5kKHRoaXMpLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbkNhcHR1cmVLZXlEb3duLmJpbmQodGhpcyksITApfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fHwodGhpcy5fYmFja2Ryb3BFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlyb24tb3ZlcmxheS1iYWNrZHJvcCIpKSx0aGlzLl9iYWNrZHJvcEVsZW1lbnR9Z2V0IGRlZXBBY3RpdmVFbGVtZW50KCl7dmFyIHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoKCF0fHwhKHQgaW5zdGFuY2VvZiBFbGVtZW50KSkmJih0PWRvY3VtZW50LmJvZHkpO3Qucm9vdCYmenQodC5yb290KS5hY3RpdmVFbGVtZW50Oyl0PXp0KHQucm9vdCkuYWN0aXZlRWxlbWVudDtyZXR1cm4gdH1fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXNbdF07aWYoISFyKXt2YXIgbj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMSxpPXRoaXMuX292ZXJsYXlzW25dO2lmKGkmJnRoaXMuX3Nob3VsZEJlQmVoaW5kT3ZlcmxheShyLGkpJiZuLS0sISh0Pj1uKSl7dmFyIG89TWF0aC5tYXgodGhpcy5jdXJyZW50T3ZlcmxheVooKSx0aGlzLl9taW5pbXVtWik7Zm9yKHRoaXMuX2dldFoocik8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoocixvKTt0PG47KXRoaXMuX292ZXJsYXlzW3RdPXRoaXMuX292ZXJsYXlzW3QrMV0sdCsrO3RoaXMuX292ZXJsYXlzW25dPXJ9fX1hZGRPclJlbW92ZU92ZXJsYXkodCl7dC5vcGVuZWQ/dGhpcy5hZGRPdmVybGF5KHQpOnRoaXMucmVtb3ZlT3ZlcmxheSh0KX1hZGRPdmVybGF5KHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmluZGV4T2YodCk7aWYocj49MCl7dGhpcy5fYnJpbmdPdmVybGF5QXRJbmRleFRvRnJvbnQociksdGhpcy50cmFja0JhY2tkcm9wKCk7cmV0dXJufXZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aCxpPXRoaXMuX292ZXJsYXlzW24tMV0sbz1NYXRoLm1heCh0aGlzLl9nZXRaKGkpLHRoaXMuX21pbmltdW1aKSxhPXRoaXMuX2dldFoodCk7aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQsaSkpe3RoaXMuX2FwcGx5T3ZlcmxheVooaSxvKSxuLS07dmFyIHM9dGhpcy5fb3ZlcmxheXNbbi0xXTtvPU1hdGgubWF4KHRoaXMuX2dldFoocyksdGhpcy5fbWluaW11bVopfWE8PW8mJnRoaXMuX2FwcGx5T3ZlcmxheVoodCxvKSx0aGlzLl9vdmVybGF5cy5zcGxpY2UobiwwLHQpLHRoaXMudHJhY2tCYWNrZHJvcCgpfXJlbW92ZU92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtyIT09LTEmJih0aGlzLl9vdmVybGF5cy5zcGxpY2UociwxKSx0aGlzLnRyYWNrQmFja2Ryb3AoKSl9Y3VycmVudE92ZXJsYXkoKXt2YXIgdD10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19Y3VycmVudE92ZXJsYXlaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5jdXJyZW50T3ZlcmxheSgpKX1lbnN1cmVNaW5pbXVtWih0KXt0aGlzLl9taW5pbXVtWj1NYXRoLm1heCh0aGlzLl9taW5pbXVtWix0KX1mb2N1c092ZXJsYXkoKXt2YXIgdD10aGlzLmN1cnJlbnRPdmVybGF5KCk7dCYmdC5fYXBwbHlGb2N1cygpfXRyYWNrQmFja2Ryb3AoKXt2YXIgdD10aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCk7IXQmJiF0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLmJhY2tkcm9wRWxlbWVudC5zdHlsZS56SW5kZXg9dGhpcy5fZ2V0Wih0KS0xLHRoaXMuYmFja2Ryb3BFbGVtZW50Lm9wZW5lZD0hIXQsdGhpcy5iYWNrZHJvcEVsZW1lbnQucHJlcGFyZSgpKX1nZXRCYWNrZHJvcHMoKXtmb3IodmFyIHQ9W10scj0wO3I8dGhpcy5fb3ZlcmxheXMubGVuZ3RoO3IrKyl0aGlzLl9vdmVybGF5c1tyXS53aXRoQmFja2Ryb3AmJnQucHVzaCh0aGlzLl9vdmVybGF5c1tyXSk7cmV0dXJuIHR9YmFja2Ryb3BaKCl7cmV0dXJuIHRoaXMuX2dldFoodGhpcy5fb3ZlcmxheVdpdGhCYWNrZHJvcCgpKS0xfV9vdmVybGF5V2l0aEJhY2tkcm9wKCl7Zm9yKHZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7dC0tKWlmKHRoaXMuX292ZXJsYXlzW3RdLndpdGhCYWNrZHJvcClyZXR1cm4gdGhpcy5fb3ZlcmxheXNbdF19X2dldFoodCl7dmFyIHI9dGhpcy5fbWluaW11bVo7aWYodCl7dmFyIG49TnVtYmVyKHQuc3R5bGUuekluZGV4fHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS56SW5kZXgpO249PT1uJiYocj1uKX1yZXR1cm4gcn1fc2V0Wih0LHIpe3Quc3R5bGUuekluZGV4PXJ9X2FwcGx5T3ZlcmxheVoodCxyKXt0aGlzLl9zZXRaKHQscisyKX1fb3ZlcmxheUluUGF0aCh0KXt0PXR8fFtdO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKHRbcl0uX21hbmFnZXI9PT10aGlzKXJldHVybiB0W3JdfV9vbkNhcHR1cmVDbGljayh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5sZW5ndGgtMTtpZihyIT09LTEpZm9yKHZhciBuPXp0KHQpLnBhdGgsaTsoaT10aGlzLl9vdmVybGF5c1tyXSkmJnRoaXMuX292ZXJsYXlJblBhdGgobikhPT1pJiYoaS5fb25DYXB0dXJlQ2xpY2sodCksaS5hbGxvd0NsaWNrVGhyb3VnaCk7KXItLX1fb25DYXB0dXJlRm9jdXModCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJnIuX29uQ2FwdHVyZUZvY3VzKHQpfV9vbkNhcHR1cmVLZXlEb3duKHQpe3ZhciByPXRoaXMuY3VycmVudE92ZXJsYXkoKTtyJiYoT28ua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKHQsImVzYyIpP3IuX29uQ2FwdHVyZUVzYyh0KTpPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwidGFiIikmJnIuX29uQ2FwdHVyZVRhYih0KSl9X3Nob3VsZEJlQmVoaW5kT3ZlcmxheSh0LHIpe3JldHVybiF0LmFsd2F5c09uVG9wJiZyLmFsd2F5c09uVG9wfX0sXzB0PW5ldyBtVzt2YXIgRTk9e3BhZ2VYOjAscGFnZVk6MH0seTB0PW51bGwsZ1c9W10sVDk9WyJ3aGVlbCIsIm1vdXNld2hlZWwiLCJET01Nb3VzZVNjcm9sbCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiXSxNOSxfVztmdW5jdGlvbiB2MHQoZSl7Q2guaW5kZXhPZihlKT49MHx8KENoLmxlbmd0aD09PTAmJkxiZSgpLENoLnB1c2goZSksX1c9Q2hbQ2gubGVuZ3RoLTFdLGIwdD1bXSx3MHQ9W10pfWZ1bmN0aW9uIHgwdChlKXt2YXIgdD1DaC5pbmRleE9mKGUpO3QhPT0tMSYmKENoLnNwbGljZSh0LDEpLF9XPUNoW0NoLmxlbmd0aC0xXSxiMHQ9W10sdzB0PVtdLENoLmxlbmd0aD09PTAmJmtiZSgpKX12YXIgQ2g9W10sYjB0PW51bGwsdzB0PW51bGw7ZnVuY3Rpb24gSWJlKGUpe2lmKGUuY2FuY2VsYWJsZSYmUmJlKGUpJiZlLnByZXZlbnREZWZhdWx0KCksZS50YXJnZXRUb3VjaGVzKXt2YXIgdD1lLnRhcmdldFRvdWNoZXNbMF07RTkucGFnZVg9dC5wYWdlWCxFOS5wYWdlWT10LnBhZ2VZfX1mdW5jdGlvbiBMYmUoKXtNOT1NOXx8SWJlLmJpbmQodm9pZCAwKTtmb3IodmFyIGU9MCx0PVQ5Lmxlbmd0aDtlPHQ7ZSsrKWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVDlbZV0sTTkse2NhcHR1cmU6ITAscGFzc2l2ZTohMX0pfWZ1bmN0aW9uIGtiZSgpe2Zvcih2YXIgZT0wLHQ9VDkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUOVtlXSxNOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gUmJlKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYoZS50eXBlIT09InRvdWNobW92ZSImJnkwdCE9PXQmJih5MHQ9dCxnVz1OYmUoenQoZSkucGF0aCkpLCFnVy5sZW5ndGgpcmV0dXJuITA7aWYoZS50eXBlPT09InRvdWNoc3RhcnQiKXJldHVybiExO3ZhciByPU9iZShlKTtyZXR1cm4hRGJlKGdXLHIuZGVsdGFYLHIuZGVsdGFZKX1mdW5jdGlvbiBOYmUoZSl7Zm9yKHZhciB0PVtdLHI9ZS5pbmRleE9mKF9XKSxuPTA7bjw9cjtuKyspaWYoZVtuXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgaT1lW25dLG89aS5zdHlsZTtvLm92ZXJmbG93IT09InNjcm9sbCImJm8ub3ZlcmZsb3chPT0iYXV0byImJihvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGkpKSwoby5vdmVyZmxvdz09PSJzY3JvbGwifHxvLm92ZXJmbG93PT09ImF1dG8iKSYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIERiZShlLHQscil7aWYoISghdCYmIXIpKWZvcih2YXIgbj1NYXRoLmFicyhyKT49TWF0aC5hYnModCksaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lW2ldLGE9ITE7aWYobj9hPXI8MD9vLnNjcm9sbFRvcD4wOm8uc2Nyb2xsVG9wPG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0OmE9dDwwP28uc2Nyb2xsTGVmdD4wOm8uc2Nyb2xsTGVmdDxvLnNjcm9sbFdpZHRoLW8uY2xpZW50V2lkdGgsYSlyZXR1cm4gb319ZnVuY3Rpb24gT2JlKGUpe3ZhciB0PXtkZWx0YVg6ZS5kZWx0YVgsZGVsdGFZOmUuZGVsdGFZfTtpZighKCJkZWx0YVgiaW4gZSkpe2lmKCJ3aGVlbERlbHRhWCJpbiBlJiYid2hlZWxEZWx0YVkiaW4gZSl0LmRlbHRhWD0tZS53aGVlbERlbHRhWCx0LmRlbHRhWT0tZS53aGVlbERlbHRhWTtlbHNlIGlmKCJ3aGVlbERlbHRhImluIGUpdC5kZWx0YVg9MCx0LmRlbHRhWT0tZS53aGVlbERlbHRhO2Vsc2UgaWYoImF4aXMiaW4gZSl0LmRlbHRhWD1lLmF4aXM9PT0xP2UuZGV0YWlsOjAsdC5kZWx0YVk9ZS5heGlzPT09Mj9lLmRldGFpbDowO2Vsc2UgaWYoZS50YXJnZXRUb3VjaGVzKXt2YXIgcj1lLnRhcmdldFRvdWNoZXNbMF07dC5kZWx0YVg9RTkucGFnZVgtci5wYWdlWCx0LmRlbHRhWT1FOS5wYWdlWS1yLnBhZ2VZfX1yZXR1cm4gdH12YXIgUG09e3Byb3BlcnRpZXM6e29wZW5lZDp7b2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxjYW5jZWxlZDp7b2JzZXJ2ZXI6Il9jYW5jZWxlZENoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMX0sd2l0aEJhY2tkcm9wOntvYnNlcnZlcjoiX3dpdGhCYWNrZHJvcENoYW5nZWQiLHR5cGU6Qm9vbGVhbn0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9DYW5jZWxPbkVzY0tleTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uT3V0c2lkZUNsaWNrOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NpbmdSZWFzb246e3R5cGU6T2JqZWN0fSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93Q2xpY2tUaHJvdWdoOnt0eXBlOkJvb2xlYW59LGFsd2F5c09uVG9wOnt0eXBlOkJvb2xlYW59LHNjcm9sbEFjdGlvbjp7dHlwZTpTdHJpbmd9LF9tYW5hZ2VyOnt0eXBlOk9iamVjdCx2YWx1ZTpfMHR9LF9mb2N1c2VkQ2hpbGQ6e3R5cGU6T2JqZWN0fX0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25Jcm9uUmVzaXplIn0sb2JzZXJ2ZXJzOlsiX191cGRhdGVTY3JvbGxPYnNlcnZlcnMoaXNBdHRhY2hlZCwgb3BlbmVkLCBzY3JvbGxBY3Rpb24pIl0sZ2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9tYW5hZ2VyLmJhY2tkcm9wRWxlbWVudH0sZ2V0IF9mb2N1c05vZGUoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZENoaWxkfHx6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKCJbYXV0b2ZvY3VzXSIpfHx0aGlzfSxnZXQgX2ZvY3VzYWJsZU5vZGVzKCl7cmV0dXJuIGcwdC5nZXRUYWJiYWJsZU5vZGVzKHRoaXMpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITEsdGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT10aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9bnVsbCx0aGlzLl9fcmFmcz17fSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX19zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbExlZnQ9bnVsbCx0aGlzLl9fb25DYXB0dXJlU2Nyb2xsPXRoaXMuX19vbkNhcHR1cmVTY3JvbGwuYmluZCh0aGlzKSx0aGlzLl9fcm9vdE5vZGVzPW51bGwsdGhpcy5fZW5zdXJlU2V0dXAoKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5fb3BlbmVkQ2hhbmdlZCh0aGlzLm9wZW5lZCksdGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKHRoaXMuX29uTm9kZXNDaGFuZ2UpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbDtmb3IodmFyIGUgaW4gdGhpcy5fX3JhZnMpdGhpcy5fX3JhZnNbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9fcmFmc1tlXSk7dGhpcy5fX3JhZnM9e30sdGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX19pc0FuaW1hdGluZyYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOih0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH0sb3BlbjpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMH0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9ITF9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jYW5jZWxlZCIsZSx7Y2FuY2VsYWJsZTohMH0pO3QuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX3NldENhbmNlbGVkKCEwKSx0aGlzLm9wZW5lZD0hMSl9LGludmFsaWRhdGVUYWJiYWJsZXM6ZnVuY3Rpb24oKXt0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsfSxfZW5zdXJlU2V0dXA6ZnVuY3Rpb24oKXt0aGlzLl9vdmVybGF5U2V0dXB8fCh0aGlzLl9vdmVybGF5U2V0dXA9ITAsdGhpcy5zdHlsZS5vdXRsaW5lPSJub25lIix0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5pc0F0dGFjaGVkJiYodGhpcy5fX2lzQW5pbWF0aW5nPSEwLHRoaXMuX19kZXJhZigiX19vcGVuZWRDaGFuZ2VkIix0aGlzLl9fb3BlbmVkQ2hhbmdlZCkpfSxfY2FuY2VsZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNhbmNlbGVkPXRoaXMuY2FuY2VsZWR9LF93aXRoQmFja2Ryb3BDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy53aXRoQmFja2Ryb3AmJiF0aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT8odGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLl9fc2hvdWxkUmVtb3ZlVGFiSW5kZXg9ITApOnRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleCYmKHRoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSksdGhpcy5vcGVuZWQmJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbWFuYWdlci50cmFja0JhY2tkcm9wKCl9LF9wcmVwYXJlUmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudCx0aGlzLl9wcmVwYXJlUG9zaXRpb25pbmcoKSx0aGlzLnJlZml0KCksdGhpcy5fZmluaXNoUG9zaXRpb25pbmcoKSx0aGlzLm5vQXV0b0ZvY3VzJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZm9jdXNOb2RlJiYodGhpcy5fZm9jdXNOb2RlLmJsdXIoKSx0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZS5mb2N1cygpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9LF9maW5pc2hSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1vcGVuZWQiKX0sX2ZpbmlzaFJlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5zdHlsZS56SW5kZXg9IiIsdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXNBbmltYXRpbmc9ITEsdGhpcy5maXJlKCJpcm9uLW92ZXJsYXktY2xvc2VkIix0aGlzLmNsb3NpbmdSZWFzb24pfSxfcHJlcGFyZVBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uPXRoaXMuc3R5bGUud2Via2l0VHJhbnNpdGlvbj0ibm9uZSIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0iIn0sX2ZpbmlzaFBvc2l0aW9uaW5nOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcCx0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSIiLHRoaXMuc3R5bGUudHJhbnNmb3JtPXRoaXMuc3R5bGUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuc3R5bGUuZGlzcGxheT0iIix0aGlzLnNjcm9sbFRvcD10aGlzLnNjcm9sbFRvcH0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXtpZih0aGlzLm9wZW5lZCl0aGlzLm5vQXV0b0ZvY3VzfHx0aGlzLl9mb2N1c05vZGUuZm9jdXMoKTtlbHNle2lmKHRoaXMucmVzdG9yZUZvY3VzT25DbG9zZSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUpe3ZhciBlPXRoaXMuX21hbmFnZXIuZGVlcEFjdGl2ZUVsZW1lbnQ7KGU9PT1kb2N1bWVudC5ib2R5fHxGYmUodGhpcyxlKSkmJnRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCl9dGhpcy5fX3Jlc3RvcmVGb2N1c05vZGU9bnVsbCx0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX2ZvY3VzZWRDaGlsZD1udWxsfX0sX29uQ2FwdHVyZUNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbk91dHNpZGVDbGlja3x8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVGb2N1czpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt2YXIgdD16dChlKS5wYXRoO3QuaW5kZXhPZih0aGlzKT09PS0xPyhlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX2FwcGx5Rm9jdXMoKSk6dGhpcy5fZm9jdXNlZENoaWxkPXRbMF19fSxfb25DYXB0dXJlRXNjOmZ1bmN0aW9uKGUpe3RoaXMubm9DYW5jZWxPbkVzY0tleXx8dGhpcy5jYW5jZWwoZSl9LF9vbkNhcHR1cmVUYWI6ZnVuY3Rpb24oZSl7aWYoISF0aGlzLndpdGhCYWNrZHJvcCl7dGhpcy5fX2Vuc3VyZUZpcnN0TGFzdEZvY3VzYWJsZXMoKTt2YXIgdD1lLnNoaWZ0S2V5LHI9dD90aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlOnRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZSxuPXQ/dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlOnRoaXMuX19maXJzdEZvY3VzYWJsZU5vZGUsaT0hMTtpZihyPT09bilpPSEwO2Vsc2V7dmFyIG89dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDtpPW89PT1yfHxvPT09dGhpc31pJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDaGlsZD1uLHRoaXMuX2FwcGx5Rm9jdXMoKSl9fSxfb25Jcm9uUmVzaXplOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpfSxfb25Ob2Rlc0NoYW5nZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiYhdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5pbnZhbGlkYXRlVGFiYmFibGVzKCksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzYWJsZU5vZGVzO3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9ZVswXSx0aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU9ZVtlLmxlbmd0aC0xXX0sX19vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/KHRoaXMuX3ByZXBhcmVSZW5kZXJPcGVuZWQoKSx0aGlzLl9tYW5hZ2VyLmFkZE92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlck9wZW5lZCgpKToodGhpcy5fbWFuYWdlci5yZW1vdmVPdmVybGF5KHRoaXMpLHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9yZW5kZXJDbG9zZWQoKSl9LF9fZGVyYWY6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9fcmFmcztyW2VdIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUocltlXSkscltlXT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyW2VdPW51bGwsdC5jYWxsKHRoaXMpfS5iaW5kKHRoaXMpKX0sX191cGRhdGVTY3JvbGxPYnNlcnZlcnM6ZnVuY3Rpb24oZSx0LHIpeyFlfHwhdHx8IXRoaXMuX19pc1ZhbGlkU2Nyb2xsQWN0aW9uKHIpPyh4MHQodGhpcyksdGhpcy5fX3JlbW92ZVNjcm9sbExpc3RlbmVycygpKToocj09PSJsb2NrIiYmKHRoaXMuX19zYXZlU2Nyb2xsUG9zaXRpb24oKSx2MHQodGhpcykpLHRoaXMuX19hZGRTY3JvbGxMaXN0ZW5lcnMoKSl9LF9fYWRkU2Nyb2xsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19yb290Tm9kZXMpe2lmKHRoaXMuX19yb290Tm9kZXM9W10sY18pZm9yKHZhciBlPXRoaXM7ZTspZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmZS5ob3N0JiZ0aGlzLl9fcm9vdE5vZGVzLnB1c2goZSksZT1lLmhvc3R8fGUuYXNzaWduZWRTbG90fHxlLnBhcmVudE5vZGU7dGhpcy5fX3Jvb3ROb2Rlcy5wdXNoKGRvY3VtZW50KX10aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKX0sX19yZW1vdmVTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl9fcm9vdE5vZGVzJiZ0aGlzLl9fcm9vdE5vZGVzLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX19vbkNhcHR1cmVTY3JvbGwse2NhcHR1cmU6ITAscGFzc2l2ZTohMH0pfSx0aGlzKSx0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fcm9vdE5vZGVzPW51bGwpfSxfX2lzVmFsaWRTY3JvbGxBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0ibG9jayJ8fGU9PT0icmVmaXQifHxlPT09ImNhbmNlbCJ9LF9fb25DYXB0dXJlU2Nyb2xsOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9faXNBbmltYXRpbmcmJiEoenQoZSkucGF0aC5pbmRleE9mKHRoaXMpPj0wKSlzd2l0Y2godGhpcy5zY3JvbGxBY3Rpb24pe2Nhc2UibG9jayI6dGhpcy5fX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbigpO2JyZWFrO2Nhc2UicmVmaXQiOnRoaXMuX19kZXJhZigicmVmaXQiLHRoaXMucmVmaXQpO2JyZWFrO2Nhc2UiY2FuY2VsIjp0aGlzLmNhbmNlbChlKTticmVha319LF9fc2F2ZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8odGhpcy5fX3Njcm9sbFRvcD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbFRvcCx0aGlzLl9fc2Nyb2xsTGVmdD1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQpOih0aGlzLl9fc2Nyb2xsVG9wPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApLHRoaXMuX19zY3JvbGxMZWZ0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkpfSxfX3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2RvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQ/KGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KTooZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcD1kb2N1bWVudC5ib2R5LnNjcm9sbFRvcD10aGlzLl9fc2Nyb2xsVG9wLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0PWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdD10aGlzLl9fc2Nyb2xsTGVmdCl9fSx6YmU9ZT0+ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZXx8ZS5ob3N0LEZiZT0oZSx0KT0+e2ZvcihsZXQgcj10O3I7cj16YmUocikpaWYocj09PWUpcmV0dXJuITA7cmV0dXJuITF9LEt4PVttMHQsSnMsUG1dO3ZhciB5Vz17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImRpYWxvZyIsdGFiaW5kZXg6Ii0xIn0scHJvcGVydGllczp7bW9kYWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX19yZWFkaWVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxvYnNlcnZlcnM6WyJfbW9kYWxDaGFuZ2VkKG1vZGFsLCBfX3JlYWRpZWQpIl0sbGlzdGVuZXJzOnt0YXA6Il9vbkRpYWxvZ0NsaWNrIn0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXksdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3A9dGhpcy53aXRoQmFja2Ryb3AsdGhpcy5fX3JlYWRpZWQ9ITB9LF9tb2RhbENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU/KHRoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5ub0NhbmNlbE9uRXNjS2V5PSEwLHRoaXMud2l0aEJhY2tkcm9wPSEwKToodGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrLHRoaXMubm9DYW5jZWxPbkVzY0tleT10aGlzLm5vQ2FuY2VsT25Fc2NLZXkmJnRoaXMuX19wcmV2Tm9DYW5jZWxPbkVzY0tleSx0aGlzLndpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCYmdGhpcy5fX3ByZXZXaXRoQmFja2Ryb3ApKX0sX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQ6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zaW5nUmVhc29uPXRoaXMuY2xvc2luZ1JlYXNvbnx8e30sdGhpcy5jbG9zaW5nUmVhc29uLmNvbmZpcm1lZD1lfSxfb25EaWFsb2dDbGljazpmdW5jdGlvbihlKXtmb3IodmFyIHQ9enQoZSkucGF0aCxyPTAsbj10LmluZGV4T2YodGhpcyk7cjxuO3IrKyl7dmFyIGk9dFtyXTtpZihpLmhhc0F0dHJpYnV0ZSYmKGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctZGlzbWlzcyIpfHxpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSkpe3RoaXMuX3VwZGF0ZUNsb3NpbmdSZWFzb25Db25maXJtZWQoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1jb25maXJtIikpLHRoaXMuY2xvc2UoKSxlLnN0b3BQcm9wYWdhdGlvbigpO2JyZWFrfX19fSxTMHQ9W0t4LHlXXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItZGlhbG9nLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWRpYWxvZyIsYmVoYXZpb3JzOltTMHQsYjldLGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKSx0aGlzLnBsYXlBbmltYXRpb24oImVudHJ5Iil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZXhpdCIpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCl9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlzLXNjcm9sbGVkOm5vdCg6Zmlyc3QtY2hpbGQpKTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGl2aWRlci1jb2xvcik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYW4tc2Nyb2xsOm5vdCguc2Nyb2xsZWQtdG8tYm90dG9tKTpub3QoOmxhc3QtY2hpbGQpKTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgLnNjcm9sbGFibGUgewogICAgICAgIHBhZGRpbmc6IDAgMjRweDsKCiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXNjcm9sbDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZTsKICAgICAgfQoKICAgICAgLmZpdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJzY3JvbGxhYmxlIiBjbGFzcz0ic2Nyb2xsYWJsZSIgb24tc2Nyb2xsPSJ1cGRhdGVTY3JvbGxTdGF0ZSI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSIscHJvcGVydGllczp7ZGlhbG9nRWxlbWVudDp7dHlwZTpPYmplY3R9fSxnZXQgc2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuJC5zY3JvbGxhYmxlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHRoaXMuY2xhc3NMaXN0LmFkZCgibm8tcGFkZGluZyIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2Vuc3VyZVRhcmdldCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnVwZGF0ZVNjcm9sbFN0YXRlLmJpbmQodGhpcykpfSx1cGRhdGVTY3JvbGxTdGF0ZTpmdW5jdGlvbigpe3RoaXMudG9nZ2xlQ2xhc3MoImlzLXNjcm9sbGVkIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A+MCksdGhpcy50b2dnbGVDbGFzcygiY2FuLXNjcm9sbCIsdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0PHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCksdGhpcy50b2dnbGVDbGFzcygic2Nyb2xsZWQtdG8tYm90dG9tIix0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3ArdGhpcy5zY3JvbGxUYXJnZXQub2Zmc2V0SGVpZ2h0Pj10aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxIZWlnaHQpfSxfZW5zdXJlVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5kaWFsb2dFbGVtZW50PXRoaXMuZGlhbG9nRWxlbWVudHx8dGhpcy5wYXJlbnRFbGVtZW50LHRoaXMuZGlhbG9nRWxlbWVudCYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycyYmdGhpcy5kaWFsb2dFbGVtZW50LmJlaGF2aW9ycy5pbmRleE9mKHlXKT49MD8odGhpcy5kaWFsb2dFbGVtZW50LnNpemluZ1RhcmdldD10aGlzLnNjcm9sbFRhcmdldCx0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJmaXQiKSk6dGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLnNjcm9sbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJmaXQiKX19KTt2YXIgZWM9WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBjbGlwOiByZWN0KDBweCwwcHgsMHB4LDBweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGFyaWEtbGl2ZSQ9IltbbW9kZV1dIj5bW190ZXh0XV08L2Rpdj4KYCxpczoiaXJvbi1hMTF5LWFubm91bmNlciIscHJvcGVydGllczp7bW9kZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBvbGl0ZSJ9LHRpbWVvdXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE1MH0sX3RleHQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sY3JlYXRlZDpmdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9dGhpcyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1hbm5vdW5jZSIsdGhpcy5fb25Jcm9uQW5ub3VuY2UuYmluZCh0aGlzKSl9LGFubm91bmNlOmZ1bmN0aW9uKGUpe3RoaXMuX3RleHQ9IiIsdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX3RleHQ9ZX0sdGhpcy50aW1lb3V0KX0sX29uSXJvbkFubm91bmNlOmZ1bmN0aW9uKGUpe2UuZGV0YWlsJiZlLmRldGFpbC50ZXh0JiZ0aGlzLmFubm91bmNlKGUuZGV0YWlsLnRleHQpfX0pO2VjLmluc3RhbmNlPW51bGw7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eT1mdW5jdGlvbigpe2VjLmluc3RhbmNlfHwoZWMuaW5zdGFuY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1hMTF5LWFubm91bmNlciIpKSxkb2N1bWVudC5ib2R5P2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWMuaW5zdGFuY2UpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSl9KX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3QgaWQ9ImNvbnRlbnQiPjwvc2xvdD4KYCxpczoiaXJvbi1pbnB1dCIsYmVoYXZpb3JzOltUaF0scHJvcGVydGllczp7YmluZFZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiIn0sdmFsdWU6e3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVZhbHVlKGJpbmRWYWx1ZSkifSxhbGxvd2VkUGF0dGVybjp7dHlwZTpTdHJpbmd9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfaW5wdXRFbGVtZW50Ok9iamVjdH0sb2JzZXJ2ZXJzOlsiX2JpbmRWYWx1ZUNoYW5nZWQoYmluZFZhbHVlLCBfaW5wdXRFbGVtZW50KSJdLGxpc3RlbmVyczp7aW5wdXQ6Il9vbklucHV0IixrZXlwcmVzczoiX29uS2V5cHJlc3MifSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpLHRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dD0iIix0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITF9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXI9enQodGhpcykub2JzZXJ2ZU5vZGVzKGZ1bmN0aW9uKGUpe3RoaXMuX2luaXRTbG90dGVkSW5wdXQoKX0uYmluZCh0aGlzKSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJih6dCh0aGlzKS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlciksdGhpcy5fb2JzZXJ2ZXI9bnVsbCl9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50fSxfaW5pdFNsb3R0ZWRJbnB1dDpmdW5jdGlvbigpe3RoaXMuX2lucHV0RWxlbWVudD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKClbMF0sdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuaW5wdXRFbGVtZW50LnZhbHVlJiYodGhpcy5iaW5kVmFsdWU9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUpLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC1yZWFkeSIpfSxnZXQgX3BhdHRlcm5SZWdFeHAoKXt2YXIgZTtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuKWU9bmV3IFJlZ0V4cCh0aGlzLmFsbG93ZWRQYXR0ZXJuKTtlbHNlIHN3aXRjaCh0aGlzLmlucHV0RWxlbWVudC50eXBlKXtjYXNlIm51bWJlciI6ZT0vWzAtOS4sZS1dLzticmVha31yZXR1cm4gZX0sX2JpbmRWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXshdHx8KGU9PT12b2lkIDA/dC52YWx1ZT1udWxsOmUhPT10LnZhbHVlJiYodGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9ZSksdGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOmV9KSl9LF9vbklucHV0OmZ1bmN0aW9uKCl7aWYodGhpcy5hbGxvd2VkUGF0dGVybiYmIXRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZCl7dmFyIGU9dGhpcy5fY2hlY2tQYXR0ZXJuVmFsaWRpdHkoKTtlfHwodGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIHN0cmluZyBvZiBjaGFyYWN0ZXJzIG5vdCBlbnRlcmVkLiIpLHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlPXRoaXMuX3ByZXZpb3VzVmFsaWRJbnB1dCl9dGhpcy5iaW5kVmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0PXRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sX2lzUHJpbnRhYmxlOmZ1bmN0aW9uKGUpe3ZhciB0PWUua2V5Q29kZT09OHx8ZS5rZXlDb2RlPT05fHxlLmtleUNvZGU9PTEzfHxlLmtleUNvZGU9PTI3LHI9ZS5rZXlDb2RlPT0xOXx8ZS5rZXlDb2RlPT0yMHx8ZS5rZXlDb2RlPT00NXx8ZS5rZXlDb2RlPT00Nnx8ZS5rZXlDb2RlPT0xNDR8fGUua2V5Q29kZT09MTQ1fHxlLmtleUNvZGU+MzImJmUua2V5Q29kZTw0MXx8ZS5rZXlDb2RlPjExMSYmZS5rZXlDb2RlPDEyNDtyZXR1cm4hdCYmIShlLmNoYXJDb2RlPT0wJiZyKX0sX29uS2V5cHJlc3M6ZnVuY3Rpb24oZSl7aWYoISghdGhpcy5hbGxvd2VkUGF0dGVybiYmdGhpcy5pbnB1dEVsZW1lbnQudHlwZSE9PSJudW1iZXIiKSl7dmFyIHQ9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighIXQmJiEoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGUuYWx0S2V5KSl7dGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSEwO3ZhciByPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7dGhpcy5faXNQcmludGFibGUoZSkmJiF0LnRlc3QocikmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyKCJJbnZhbGlkIGNoYXJhY3RlciAiK3IrIiBub3QgZW50ZXJlZC4iKSl9fX0sX2NoZWNrUGF0dGVyblZhbGlkaXR5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGF0dGVyblJlZ0V4cDtpZighZSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlLmxlbmd0aDt0KyspaWYoIWUudGVzdCh0aGlzLmlucHV0RWxlbWVudC52YWx1ZVt0XSkpcmV0dXJuITE7cmV0dXJuITB9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuaW5wdXRFbGVtZW50KXJldHVybiB0aGlzLmludmFsaWQ9ITEsITA7dmFyIGU9dGhpcy5pbnB1dEVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy5iaW5kVmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLmJpbmRWYWx1ZSkpKSx0aGlzLmludmFsaWQ9IWUsdGhpcy5maXJlKCJpcm9uLWlucHV0LXZhbGlkYXRlIiksZX0sX2Fubm91bmNlSW52YWxpZENoYXJhY3RlcjpmdW5jdGlvbihlKXt0aGlzLmZpcmUoImlyb24tYW5ub3VuY2UiLHt0ZXh0OmV9KX0sX2NvbXB1dGVWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZX19KTt2YXIgQzk9e2F0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJhZGRvbi1hdHRhY2hlZCIpfSx1cGRhdGU6ZnVuY3Rpb24oZSl7fX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsb2F0OiByaWdodDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNoYXItY291bnRlcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuPltbX2NoYXJDb3VudGVyU3RyXV08L3NwYW4+CmAsaXM6InBhcGVyLWlucHV0LWNoYXItY291bnRlciIsYmVoYXZpb3JzOltDOV0scHJvcGVydGllczp7X2NoYXJDb3VudGVyU3RyOnt0eXBlOlN0cmluZyx2YWx1ZToiMCJ9fSx1cGRhdGU6ZnVuY3Rpb24oZSl7aWYoISFlLmlucHV0RWxlbWVudCl7ZS52YWx1ZT1lLnZhbHVlfHwiIjt2YXIgdD1lLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoLnRvU3RyaW5nKCk7ZS5pbnB1dEVsZW1lbnQuaGFzQXR0cmlidXRlKCJtYXhsZW5ndGgiKSYmKHQrPSIvIitlLmlucHV0RWxlbWVudC5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpKSx0aGlzLl9jaGFyQ291bnRlclN0cj10fX19KTt2YXIgTTB0PVFgCjxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTogewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogdG8gbWFrZSBhIHN0YWNraW5nIGNvbnRleHQgKi8KICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWFsaWduLCBib3R0b20pOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+CmA7TTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTTB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2lubGluZV0pIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjMzOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jYXB0aW9uOwogICAgICB9CgogICAgICAudW5kZXJsaW5lIHsKICAgICAgICBoZWlnaHQ6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLDEsMSk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1mb2N1czsKICAgICAgfQoKICAgICAgLnVuZGVybGluZS5pcy1oaWdobGlnaHRlZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWludmFsaWQgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgogICAgICAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudW5mb2N1c2VkLWxpbmUgewogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQ7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXVuZGVybGluZS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtcmVsYXRpdmU7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzLCB3aWR0aCAwLjI1czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7CiAgICAgICAgLyogRml4IGZvciBzYWZhcmkgbm90IGZvY3VzaW5nIDAtaGVpZ2h0IGRhdGUvdGltZSBpbnB1dHMgd2l0aCAtd2Via2l0LWFwcGVyYW5jZTogbm9uZTsgKi8KICAgICAgICBtaW4taGVpZ2h0OiAxcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRyYW5zaXRpb24tZWFzaW5nOwogICAgICB9CgoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTpiZWZvcmUsCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpOmJlZm9yZSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWJlZm9yZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGxhYmVsKTphZnRlciwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1hZnRlcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzUlKSBzY2FsZSgwLjc1KTsKCiAgICAgICAgLyogU2luY2Ugd2Ugc2NhbGUgdG8gNzUvMTAwIG9mIHRoZSBzaXplLCB3ZSBhY3R1YWxseSBoYXZlIDEwMC83NSBvZiB0aGUKICAgICAgICBvcmlnaW5hbCBzcGFjZSBub3cgYXZhaWxhYmxlICovCiAgICAgICAgd2lkdGg6IDEzMyU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbC1mbG9hdGluZzsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICByaWdodDogMDsKICAgICAgICBsZWZ0OiBhdXRvOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IHRvcDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWhpZGRlbiA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1zaGFyZWQtaW5wdXQtc3R5bGU7CiAgICAgICAgLyogVGhlIGFwcGx5IHNoaW0gZG9lc24ndCBhcHBseSB0aGUgbmVzdGVkIGNvbG9yIGN1c3RvbSBwcm9wZXJ0eSwKICAgICAgICAgIHNvIHdlIGhhdmUgdG8gcmUtYXBwbHkgaXQgaGVyZS4gKi8KICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCk6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoaW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQodGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpcm9uLWF1dG9ncm93LXRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuZm9jdXNlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWZvY3VzOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtaW52YWxpZDsKICAgICAgfQoKICAgICAgLnByZWZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1wcmVmaXg7CiAgICAgIH0KCiAgICAgIC5zdWZmaXggOjpzbG90dGVkKCopIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LW5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXN1ZmZpeDsKICAgICAgfQoKICAgICAgLyogRmlyZWZveCBzZXRzIGEgbWluLXdpZHRoIG9uIHRoZSBpbnB1dCwgd2hpY2ggY2FuIGNhdXNlIGxheW91dCBpc3N1ZXMgKi8KICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KSB7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQodGV4dGFyZWEpIHsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoKikgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW52YWxpZC1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50LmlzLWhpZ2hsaWdodGVkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImZsb2F0ZWQtbGFiZWwtcGxhY2Vob2xkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBoaWRkZW49Iltbbm9MYWJlbEZsb2F0XV0iPiZuYnNwOzwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICA8c3BhbiBjbGFzcz0icHJlZml4Ij48c2xvdCBuYW1lPSJwcmVmaXgiPjwvc2xvdD48L3NwYW4+CgogICAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUlucHV0Q29udGVudENsYXNzKG5vTGFiZWxGbG9hdCxhbHdheXNGbG9hdExhYmVsLGZvY3VzZWQsaW52YWxpZCxfaW5wdXRIYXNDb250ZW50KV1dIiBpZD0ibGFiZWxBbmRJbnB1dENvbnRhaW5lciI+CiAgICAgICAgPHNsb3QgbmFtZT0ibGFiZWwiPjwvc2xvdD4KICAgICAgICA8c2xvdCBuYW1lPSJpbnB1dCI+PC9zbG90PgogICAgICA8L2Rpdj4KCiAgICAgIDxzcGFuIGNsYXNzPSJzdWZmaXgiPjxzbG90IG5hbWU9InN1ZmZpeCI+PC9zbG90Pjwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlVW5kZXJsaW5lQ2xhc3MoZm9jdXNlZCxpbnZhbGlkKV1dIj4KICAgICAgPGRpdiBjbGFzcz0idW5mb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmb2N1c2VkLWxpbmUiPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8c2xvdCBuYW1lPSJhZGQtb24iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1jb250YWluZXIiLHByb3BlcnRpZXM6e25vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbHdheXNGbG9hdExhYmVsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF0dHJGb3JWYWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImJpbmQtdmFsdWUifSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7b2JzZXJ2ZXI6Il9pbnZhbGlkQ2hhbmdlZCIsdHlwZTpCb29sZWFuLHZhbHVlOiExfSxmb2N1c2VkOntyZWFkT25seTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxfYWRkb25zOnt0eXBlOkFycmF5fSxfaW5wdXRIYXNDb250ZW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dFNlbGVjdG9yOnt0eXBlOlN0cmluZyx2YWx1ZToiaW5wdXQsaXJvbi1pbnB1dCx0ZXh0YXJlYSwucGFwZXItaW5wdXQtaW5wdXQifSxfYm91bmRPbkZvY3VzOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRm9jdXMuYmluZCh0aGlzKX19LF9ib3VuZE9uQmx1cjp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkJsdXIuYmluZCh0aGlzKX19LF9ib3VuZE9uSW5wdXQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25JbnB1dC5iaW5kKHRoaXMpfX0sX2JvdW5kVmFsdWVDaGFuZ2VkOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2VkLmJpbmQodGhpcyl9fX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIiwiaXJvbi1pbnB1dC12YWxpZGF0ZSI6Il9vbklyb25JbnB1dFZhbGlkYXRlIn0sZ2V0IF92YWx1ZUNoYW5nZWRFdmVudCgpe3JldHVybiB0aGlzLmF0dHJGb3JWYWx1ZSsiLWNoYW5nZWQifSxnZXQgX3Byb3BlcnR5Rm9yVmFsdWUoKXtyZXR1cm4gd20odGhpcy5hdHRyRm9yVmFsdWUpfSxnZXQgX2lucHV0RWxlbWVudCgpe3JldHVybiB6dCh0aGlzKS5xdWVyeVNlbGVjdG9yKHRoaXMuX2lucHV0U2VsZWN0b3IpfSxnZXQgX2lucHV0RWxlbWVudFZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFt0aGlzLl9wcm9wZXJ0eUZvclZhbHVlXXx8dGhpcy5faW5wdXRFbGVtZW50LnZhbHVlfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITAsdGhpcy5fYWRkb25zfHwodGhpcy5fYWRkb25zPVtdKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9ib3VuZE9uRm9jdXMsITApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fYm91bmRPbkJsdXIsITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuYXR0ckZvclZhbHVlP3RoaXMuX2lucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3ZhbHVlQ2hhbmdlZEV2ZW50LHRoaXMuX2JvdW5kVmFsdWVDaGFuZ2VkKTp0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0Iix0aGlzLl9vbklucHV0KSx0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSYmdGhpcy5faW5wdXRFbGVtZW50VmFsdWUhPSIiP3RoaXMuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudCk6dGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pO3ZhciB0PWUudGFyZ2V0O3RoaXMuX2FkZG9ucy5pbmRleE9mKHQpPT09LTEmJih0aGlzLl9hZGRvbnMucHVzaCh0KSx0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2hhbmRsZVZhbHVlKHRoaXMuX2lucHV0RWxlbWVudCkpfSxfb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuX3NldEZvY3VzZWQoITApfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMSksdGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfb25WYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZSYmKHRoaXMuX19pc0ZpcnN0VmFsdWVVcGRhdGU9ITEsdC52YWx1ZT09PXZvaWQgMHx8dC52YWx1ZT09PSIiKXx8dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUoZS50YXJnZXQpfSxfaGFuZGxlVmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW5wdXRFbGVtZW50VmFsdWU7dHx8dD09PTB8fGUudHlwZT09PSJudW1iZXIiJiYhZS5jaGVja1ZhbGlkaXR5KCk/dGhpcy5faW5wdXRIYXNDb250ZW50PSEwOnRoaXMuX2lucHV0SGFzQ29udGVudD0hMSx0aGlzLnVwZGF0ZUFkZG9ucyh7aW5wdXRFbGVtZW50OmUsdmFsdWU6dCxpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSxfaGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdXRvVmFsaWRhdGUmJmUpe3ZhciB0O2UudmFsaWRhdGU/dD1lLnZhbGlkYXRlKHRoaXMuX2lucHV0RWxlbWVudFZhbHVlKTp0PWUuY2hlY2tWYWxpZGl0eSgpLHRoaXMuaW52YWxpZD0hdH10aGlzLl9oYW5kbGVWYWx1ZShlKX0sX29uSXJvbklucHV0VmFsaWRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5pbnZhbGlkPXRoaXMuX2lucHV0RWxlbWVudC5pbnZhbGlkfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hZGRvbnMmJnRoaXMudXBkYXRlQWRkb25zKHtpbnZhbGlkOnRoaXMuaW52YWxpZH0pfSx1cGRhdGVBZGRvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDt0PXRoaXMuX2FkZG9uc1tyXTtyKyspdC51cGRhdGUoZSl9LF9jb21wdXRlSW5wdXRDb250ZW50Q2xhc3M6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz0iaW5wdXQtY29udGVudCI7aWYoZSlpJiYobys9IiBsYWJlbC1pcy1oaWRkZW4iKSxuJiYobys9IiBpcy1pbnZhbGlkIik7ZWxzZXt2YXIgYT10aGlzLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7dHx8aT8obys9IiBsYWJlbC1pcy1mbG9hdGluZyIsdGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InN0YXRpYyIsbj9vKz0iIGlzLWludmFsaWQiOnImJihvKz0iIGxhYmVsLWlzLWhpZ2hsaWdodGVkIikpOihhJiYodGhpcy4kLmxhYmVsQW5kSW5wdXRDb250YWluZXIuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksbiYmKG8rPSIgaXMtaW52YWxpZCIpKX1yZXR1cm4gciYmKG8rPSIgZm9jdXNlZCIpLG99LF9jb21wdXRlVW5kZXJsaW5lQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0idW5kZXJsaW5lIjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn0sX2NvbXB1dGVBZGRPbkNvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJhZGQtb24tY29udGVudCI7cmV0dXJuIHQ/cis9IiBpcy1pbnZhbGlkIjplJiYocis9IiBpcy1oaWdobGlnaHRlZCIpLHJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtZXJyb3I7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6MDsKICAgICAgICByaWdodDowOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIHsKICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgICB9CgogICAgICAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2ludmFsaWRdKSAjYTExeVdyYXBwZXIgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPCEtLQogICAgSWYgdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXMgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBhbgogICAgXGBhcmlhLWRlc2NyaWJlZGJ5XGAgYXR0cmlidXRlLCBzdWNoIGFzIHdoZW4gdXNlZCBhcyBhIHBhcGVyLWlucHV0IGFkZC1vbiwKICAgIHRoZW4gYXBwbHlpbmcgXGB2aXNpYmlsaXR5OiBoaWRkZW47XGAgdG8gdGhlIHBhcGVyLWlucHV0LWVycm9yIGVsZW1lbnQgaXRzZWxmCiAgICBkb2VzIG5vdCBoaWRlIHRoZSBlcnJvci4KCiAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOgogICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL2FjY25hbWUtMS4xLyNtYXBwaW5nX2FkZGl0aW9uYWxfbmRfZGVzY3JpcHRpb24KICAgIC0tPgogICAgPGRpdiBpZD0iYTExeVdyYXBwZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaW5wdXQtZXJyb3IiLGJlaGF2aW9yczpbQzldLHByb3BlcnRpZXM6e2ludmFsaWQ6e3JlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW59fSx1cGRhdGU6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW52YWxpZChlLmludmFsaWQpfX0pO3ZhciBaeD17fTtaeC5OZXh0TGFiZWxJRD0xO1p4Lk5leHRBZGRvbklEPTE7WnguTmV4dElucHV0SUQ9MTt2YXIgQmJlPXtwcm9wZXJ0aWVzOntsYWJlbDp7dHlwZTpTdHJpbmd9LHZhbHVlOntub3RpZnk6ITAsdHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGludmFsaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sdHlwZTp7dHlwZTpTdHJpbmd9LGxpc3Q6e3R5cGU6U3RyaW5nfSxwYXR0ZXJuOnt0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sY2hhckNvdW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfYXV0b2ZvY3VzQ2hhbmdlZCJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LG1pbmxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1heGxlbmd0aDp7dHlwZTpOdW1iZXJ9LG1pbjp7dHlwZTpTdHJpbmd9LG1heDp7dHlwZTpTdHJpbmd9LHN0ZXA6e3R5cGU6U3RyaW5nfSxuYW1lOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxyZWFkb25seTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzaXplOnt0eXBlOk51bWJlcn0sYXV0b2NhcGl0YWxpemU6e3R5cGU6U3RyaW5nLHZhbHVlOiJub25lIn0sYXV0b2NvcnJlY3Q6e3R5cGU6U3RyaW5nLHZhbHVlOiJvZmYifSxhdXRvc2F2ZTp7dHlwZTpTdHJpbmd9LHJlc3VsdHM6e3R5cGU6TnVtYmVyfSxhY2NlcHQ6e3R5cGU6U3RyaW5nfSxtdWx0aXBsZTp7dHlwZTpCb29sZWFufSxfYXJpYURlc2NyaWJlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2FyaWFMYWJlbGxlZEJ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sX2lucHV0SWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifX0sbGlzdGVuZXJzOnsiYWRkb24tYXR0YWNoZWQiOiJfb25BZGRvbkF0dGFjaGVkIn0sa2V5QmluZGluZ3M6eyJzaGlmdCt0YWI6a2V5ZG93biI6Il9vblNoaWZ0VGFiRG93biJ9LGhvc3RBdHRyaWJ1dGVzOnt0YWJpbmRleDowfSxnZXQgaW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuJHx8KHRoaXMuJD17fSksdGhpcy4kLmlucHV0fHwodGhpcy5fZ2VuZXJhdGVJbnB1dElkKCksdGhpcy4kLmlucHV0PXRoaXMuJCQoIiMiK3RoaXMuX2lucHV0SWQpKSx0aGlzLiQuaW5wdXR9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX3R5cGVzVGhhdEhhdmVUZXh0PVsiZGF0ZSIsImRhdGV0aW1lIiwiZGF0ZXRpbWUtbG9jYWwiLCJtb250aCIsInRpbWUiLCJ3ZWVrIiwiZmlsZSJdfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCksIW10JiZ0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQuaW5kZXhPZih0aGlzLmlucHV0RWxlbWVudC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKX0sX2FwcGVuZFN0cmluZ1dpdGhTcGFjZTpmdW5jdGlvbihlLHQpe3JldHVybiBlP2U9ZSsiICIrdDplPXQsZX0sX29uQWRkb25BdHRhY2hlZDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O2lmKHQuaWQpdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnksdC5pZCk7ZWxzZXt2YXIgcj0icGFwZXItaW5wdXQtYWRkLW9uLSIrWnguTmV4dEFkZG9uSUQrKzt0LmlkPXIsdGhpcy5fYXJpYURlc2NyaWJlZEJ5PXRoaXMuX2FwcGVuZFN0cmluZ1dpdGhTcGFjZSh0aGlzLl9hcmlhRGVzY3JpYmVkQnkscil9fSx2YWxpZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC52YWxpZGF0ZSgpfSxfZm9jdXNCbHVySGFuZGxlcjpmdW5jdGlvbihlKXtEaS5fZm9jdXNCbHVySGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5mb2N1c2VkJiYhdGhpcy5fc2hpZnRUYWJQcmVzc2VkJiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50JiZ0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTt0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITAsdGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0KSx0aGlzLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfaGFuZGxlQXV0b1ZhbGlkYXRlOmZ1bmN0aW9uKCl7dGhpcy5hdXRvVmFsaWRhdGUmJnRoaXMudmFsaWRhdGUoKX0sdXBkYXRlVmFsdWVBbmRQcmVzZXJ2ZUNhcmV0OmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydDt0aGlzLnZhbHVlPWUsdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ9dCx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQ9dH1jYXRjaChyKXt0aGlzLnZhbHVlPWV9fSxfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWw6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8ZX0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7dmFyIGU9enQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCJsYWJlbCIpO2lmKCFlKXt0aGlzLl9hcmlhTGFiZWxsZWRCeT0iIjtyZXR1cm59dmFyIHQ7ZS5pZD90PWUuaWQ6KHQ9InBhcGVyLWlucHV0LWxhYmVsLSIrWnguTmV4dExhYmVsSUQrKyxlLmlkPXQpLHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXR9LF9nZW5lcmF0ZUlucHV0SWQ6ZnVuY3Rpb24oKXsoIXRoaXMuX2lucHV0SWR8fHRoaXMuX2lucHV0SWQ9PT0iIikmJih0aGlzLl9pbnB1dElkPSJpbnB1dC0iK1p4Lk5leHRJbnB1dElEKyspfSxfb25DaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5zaGFkb3dSb290JiZ0aGlzLmZpcmUoZS50eXBlLHtzb3VyY2VFdmVudDplfSx7bm9kZTp0aGlzLGJ1YmJsZXM6ZS5idWJibGVzLGNhbmNlbGFibGU6ZS5jYW5jZWxhYmxlfSl9LF9hdXRvZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKCl7aWYodGhpcy5hdXRvZm9jdXMmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQpe3ZhciBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQsdD1lIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQscj10JiZlIT09ZG9jdW1lbnQuYm9keSYmZSE9PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyfHx0aGlzLl9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9fX0sQTk9W0RpLE9vLEJiZV07WXQoe2lzOiJwYXBlci1pbnB1dCIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2ZvY3VzZWRdKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLyogSW4gMS54LCB0aGUgPGlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcyBpdC4KICAgICAgSW4gMi54IHRoZSA8aXJvbi1pbnB1dD4gaXMgZGlzdHJpYnV0ZWQgdG8gcGFwZXItaW5wdXQtY29udGFpbmVyLCB3aGljaCBzdHlsZXMKICAgICAgaXQsIGJ1dCBpbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrIGNvcnJlY3RseSwgd2UgbmVlZCB0byByZXNldCBzb21lCiAgICAgIG9mIHRoZSBuYXRpdmUgaW5wdXQncyBwcm9wZXJ0aWVzIHRvIGluaGVyaXQgKGZyb20gdGhlIGlyb24taW5wdXQpICovCiAgICAgIGlyb24taW5wdXQgPiBpbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgd29yZC1zcGFjaW5nOiBpbmhlcml0OwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHRleHQtc2hhZG93OiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sCiAgICAgIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LXNwaW5uZXI7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWNsZWFyLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIGlucHV0OjotbXMtY2xlYXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1jbGVhcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1yZXZlYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1tcy1yZXZlYWw7CiAgICAgIH0KCiAgICAgIGlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgaWQ9ImNvbnRhaW5lciIgbm8tbGFiZWwtZmxvYXQ9Iltbbm9MYWJlbEZsb2F0XV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1tfY29tcHV0ZUFsd2F5c0Zsb2F0TGFiZWwoYWx3YXlzRmxvYXRMYWJlbCxwbGFjZWhvbGRlcildXSIgYXV0by12YWxpZGF0ZSQ9IltbYXV0b1ZhbGlkYXRlXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBpbnZhbGlkPSJbW2ludmFsaWRdXSI+CgogICAgICA8c2xvdCBuYW1lPSJwcmVmaXgiIHNsb3Q9InByZWZpeCI+PC9zbG90PgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPCEtLSBOZWVkIHRvIGJpbmQgbWF4bGVuZ3RoIHNvIHRoYXQgdGhlIHBhcGVyLWlucHV0LWNoYXItY291bnRlciB3b3JrcyBjb3JyZWN0bHkgLS0+CiAgICAgIDxpcm9uLWlucHV0IGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgc2xvdD0iaW5wdXQiIGNsYXNzPSJpbnB1dC1lbGVtZW50IiBpZCQ9IltbX2lucHV0SWRdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYWxsb3dlZC1wYXR0ZXJuPSJbW2FsbG93ZWRQYXR0ZXJuXV0iIGludmFsaWQ9Int7aW52YWxpZH19IiB2YWxpZGF0b3I9IltbdmFsaWRhdG9yXV0iPgogICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiB0aXRsZSQ9IltbdGl0bGVdXSIgdHlwZSQ9IltbdHlwZV1dIiBwYXR0ZXJuJD0iW1twYXR0ZXJuXV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBtaW4kPSJbW21pbl1dIiBtYXgkPSJbW21heF1dIiBzdGVwJD0iW1tzdGVwXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiBsaXN0JD0iW1tsaXN0XV0iIHNpemUkPSJbW3NpemVdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGF1dG9jb3JyZWN0JD0iW1thdXRvY29ycmVjdF1dIiBvbi1jaGFuZ2U9Il9vbkNoYW5nZSIgdGFiaW5kZXgkPSJbW3RhYkluZGV4XV0iIGF1dG9zYXZlJD0iW1thdXRvc2F2ZV1dIiByZXN1bHRzJD0iW1tyZXN1bHRzXV0iIGFjY2VwdCQ9IltbYWNjZXB0XV0iIG11bHRpcGxlJD0iW1ttdWx0aXBsZV1dIiByb2xlJD0iW1tpbnB1dFJvbGVdXSIgYXJpYS1oYXNwb3B1cCQ9IltbaW5wdXRBcmlhSGFzcG9wdXBdXSI+CiAgICAgIDwvaXJvbi1pbnB1dD4KCiAgICAgIDxzbG90IG5hbWU9InN1ZmZpeCIgc2xvdD0ic3VmZml4Ij48L3Nsb3Q+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CiAgYCxiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpTdHJpbmd9LGlucHV0Um9sZTp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfSxpbnB1dEFyaWFIYXNwb3B1cDp7dHlwZTpTdHJpbmcsdmFsdWU6dm9pZCAwfX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50Ll9pbnB1dEVsZW1lbnR9LGxpc3RlbmVyczp7Imlyb24taW5wdXQtcmVhZHkiOiJfb25Jcm9uSW5wdXRSZWFkeSJ9LF9vbklyb25JbnB1dFJlYWR5OmZ1bmN0aW9uKCl7dGhpcy4kLm5hdGl2ZUlucHV0fHwodGhpcy4kLm5hdGl2ZUlucHV0PXRoaXMuJCQoImlucHV0IikpLHRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuJC5uYXRpdmVJbnB1dC50eXBlKSE9PS0xJiYodGhpcy5hbHdheXNGbG9hdExhYmVsPSEwKSx0aGlzLmlucHV0RWxlbWVudC5iaW5kVmFsdWUmJnRoaXMuJC5jb250YWluZXIuX2hhbmRsZVZhbHVlQW5kQXV0b1ZhbGlkYXRlKHRoaXMuaW5wdXRFbGVtZW50KX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjY29udGVudFdyYXBwZXIuYW5pbWF0aW5nIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50V3JhcHBlciI+CiAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1kcm9wZG93biIsYmVoYXZpb3JzOltEaSxPbyxLeCxiOV0scHJvcGVydGllczp7aG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0fSxjbG9zZUFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGZvY3VzVGFyZ2V0Ont0eXBlOk9iamVjdH0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6eyJuZW9uLWFuaW1hdGlvbi1maW5pc2giOiJfb25OZW9uQW5pbWF0aW9uRmluaXNoIn0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU92ZXJsYXlQb3NpdGlvbihwb3NpdGlvblRhcmdldCwgdmVydGljYWxBbGlnbiwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbE9mZnNldCwgaG9yaXpvbnRhbE9mZnNldCkiXSxnZXQgY29udGFpbmVkRWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsQWN0aW9ufHwodGhpcy5zY3JvbGxBY3Rpb249dGhpcy5hbGxvd091dHNpZGVTY3JvbGw/InJlZml0IjoibG9jayIpLHRoaXMuX3JlYWRpZWQ9ITB9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7KCF0aGlzLnNpemluZ1RhcmdldHx8dGhpcy5zaXppbmdUYXJnZXQ9PT10aGlzKSYmKHRoaXMuc2l6aW5nVGFyZ2V0PXRoaXMuY29udGFpbmVkRWxlbWVudHx8dGhpcyl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxBbmltYXRpb24oKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmdGhpcy5kaXNhYmxlZD90aGlzLmNhbmNlbCgpOih0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMuX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZygpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLm9wZW4/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oIm9wZW4iKSk6UG0uX3JlbmRlck9wZW5lZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXshdGhpcy5ub0FuaW1hdGlvbnMmJnRoaXMuYW5pbWF0aW9uQ29uZmlnLmNsb3NlPyh0aGlzLiQuY29udGVudFdyYXBwZXIuY2xhc3NMaXN0LmFkZCgiYW5pbWF0aW5nIiksdGhpcy5wbGF5QW5pbWF0aW9uKCJjbG9zZSIpKTpQbS5fcmVuZGVyQ2xvc2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX29uTmVvbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRpbmciKSx0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX3VwZGF0ZUFuaW1hdGlvbkNvbmZpZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lZEVsZW1lbnQsdD1bXS5jb25jYXQodGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnfHxbXSkuY29uY2F0KHRoaXMuY2xvc2VBbmltYXRpb25Db25maWd8fFtdKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXS5ub2RlPWU7dGhpcy5hbmltYXRpb25Db25maWc9e29wZW46dGhpcy5vcGVuQW5pbWF0aW9uQ29uZmlnLGNsb3NlOnRoaXMuY2xvc2VBbmltYXRpb25Db25maWd9fSxfdXBkYXRlT3ZlcmxheVBvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0F0dGFjaGVkJiZ0aGlzLm5vdGlmeVJlc2l6ZSgpfSxfYWxsb3dPdXRzaWRlU2Nyb2xsQ2hhbmdlZDpmdW5jdGlvbihlKXshdGhpcy5fcmVhZGllZHx8KGU/KCF0aGlzLnNjcm9sbEFjdGlvbnx8dGhpcy5zY3JvbGxBY3Rpb249PT0ibG9jayIpJiYodGhpcy5zY3JvbGxBY3Rpb249InJlZml0Iik6dGhpcy5zY3JvbGxBY3Rpb249ImxvY2siKX0sX2FwcGx5Rm9jdXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZvY3VzVGFyZ2V0fHx0aGlzLmNvbnRhaW5lZEVsZW1lbnQ7ZSYmdGhpcy5vcGVuZWQmJiF0aGlzLm5vQXV0b0ZvY3VzP2UuZm9jdXMoKTpQbS5fYXBwbHlGb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSk7dmFyIHlwPXtwcm9wZXJ0aWVzOnthbmltYXRpb25UaW1pbmc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2R1cmF0aW9uOjUwMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSkiLGZpbGw6ImJvdGgifX19fSxpc05lb25BbmltYXRpb246ITAsY3JlYXRlZDpmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYW5pbWF0ZXx8Y29uc29sZS53YXJuKCJObyB3ZWIgYW5pbWF0aW9ucyBkZXRlY3RlZC4gVGhpcyBlbGVtZW50IHdpbGwgbm90IGZ1bmN0aW9uIHdpdGhvdXQgYSB3ZWIgYW5pbWF0aW9ucyBwb2x5ZmlsbC4iKX0sdGltaW5nRnJvbUNvbmZpZzpmdW5jdGlvbihlKXtpZihlLnRpbWluZylmb3IodmFyIHQgaW4gZS50aW1pbmcpdGhpcy5hbmltYXRpb25UaW1pbmdbdF09ZS50aW1pbmdbdF07cmV0dXJuIHRoaXMuYW5pbWF0aW9uVGltaW5nfSxzZXRQcmVmaXhlZFByb3BlcnR5OmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49e3RyYW5zZm9ybTpbIndlYmtpdFRyYW5zZm9ybSJdLHRyYW5zZm9ybU9yaWdpbjpbIm1velRyYW5zZm9ybU9yaWdpbiIsIndlYmtpdFRyYW5zZm9ybU9yaWdpbiJdfSxpPW5bdF0sbyxhPTA7bz1pW2FdO2ErKyllLnN0eWxlW29dPXI7ZS5zdHlsZVt0XT1yfSxjb21wbGV0ZTpmdW5jdGlvbihlKXt9fTtZdCh7aXM6ImZhZGUtaW4tYW5pbWF0aW9uIixiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3tvcGFjaXR5OiIwIn0se29wYWNpdHk6IjEifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJmYWRlLW91dC1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjEifSx7b3BhY2l0eToiMCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy1oZWlnaHQtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIuaGVpZ2h0O3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bi8yKyJweCJ9LHtoZWlnaHQ6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIixfdGVtcGxhdGU6bnVsbCxiZWhhdmlvcnM6W3lwXSxjb25maWd1cmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlLHI9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGg7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe3dpZHRoOm4vMisicHgifSx7d2lkdGg6bisicHgifV0sdGhpcy50aW1pbmdGcm9tQ29uZmlnKGUpKSx0aGlzLl9lZmZlY3R9fSk7WXQoe2lzOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bisicHgifSx7d2lkdGg6bi1uLzIwKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuc2V0UHJlZml4ZWRQcm9wZXJ0eSh0LCJ0cmFuc2Zvcm1PcmlnaW4iLCIwIDAiKSx0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3toZWlnaHQ6bisicHgiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9LHtoZWlnaHQ6bi8yKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yMHB4KSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTt2YXIgZEU9e0FOSU1BVElPTl9DVUJJQ19CRVpJRVI6ImN1YmljLWJlemllciguMywuOTUsLjUsMSkiLE1BWF9BTklNQVRJT05fVElNRV9NUzo0MDB9LEhiZT1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGN1cnNvcjogYXV0bzsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICBpcm9uLWRyb3Bkb3duIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1kcm9wZG93bjsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duLWJhY2tncm91bmQsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1tZW51LWJ1dHRvbi1jb250ZW50OwogICAgICB9CgogICAgICA6aG9zdChbdmVydGljYWwtYWxpZ249InRvcCJdKSAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICBtYXJnaW4tdG9wOiAtMTBweDsKICAgICAgICB0b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0iYm90dG9tIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBib3R0b206IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogLTEwcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQoKICAgICAgI3RyaWdnZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJ0cmlnZ2VyIiBvbi10YXA9InRvZ2dsZSI+CiAgICAgIDxzbG90IG5hbWU9ImRyb3Bkb3duLXRyaWdnZXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxpcm9uLWRyb3Bkb3duIGlkPSJkcm9wZG93biIgb3BlbmVkPSJ7e29wZW5lZH19IiBob3Jpem9udGFsLWFsaWduPSJbW2hvcml6b250YWxBbGlnbl1dIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIGhvcml6b250YWwtb2Zmc2V0PSJbW2hvcml6b250YWxPZmZzZXRdXSIgdmVydGljYWwtb2Zmc2V0PSJbW3ZlcnRpY2FsT2Zmc2V0XV0iIG5vLW92ZXJsYXA9Iltbbm9PdmVybGFwXV0iIG9wZW4tYW5pbWF0aW9uLWNvbmZpZz0iW1tvcGVuQW5pbWF0aW9uQ29uZmlnXV0iIGNsb3NlLWFuaW1hdGlvbi1jb25maWc9IltbY2xvc2VBbmltYXRpb25Db25maWddXSIgbm8tYW5pbWF0aW9ucz0iW1tub0FuaW1hdGlvbnNdXSIgZm9jdXMtdGFyZ2V0PSJbW19kcm9wZG93bkNvbnRlbnRdXSIgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBvbi1pcm9uLW92ZXJsYXktY2FuY2VsZWQ9Il9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8ZGl2IHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiIGNsYXNzPSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvaXJvbi1kcm9wZG93bj4KYCxpczoicGFwZXItbWVudS1idXR0b24iLGJlaGF2aW9yczpbT28sRGldLHByb3BlcnRpZXM6e29wZW5lZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQifSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saWdub3JlU2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGNsb3NlT25BY3RpdmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvcGVuQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjIwMH19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctd2lkdGgtYW5pbWF0aW9uIix0aW1pbmc6e2RlbGF5OjEwMCxkdXJhdGlvbjoxNTAsZWFzaW5nOmRFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjI3NSxlYXNpbmc6ZEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19XX19LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt7bmFtZToiZmFkZS1vdXQtYW5pbWF0aW9uIix0aW1pbmc6e2R1cmF0aW9uOjE1MH19LHtuYW1lOiJwYXBlci1tZW51LXNocmluay13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjUwLGVhc2luZzpkRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLWhlaWdodC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MjAwLGVhc2luZzoiZWFzZS1pbiJ9fV19fSxhbGxvd091dHNpZGVTY3JvbGw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9kcm9wZG93bkNvbnRlbnQ6e3R5cGU6T2JqZWN0fX0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oYXNwb3B1cCI6InRydWUifSxsaXN0ZW5lcnM6eyJpcm9uLWFjdGl2YXRlIjoiX29uSXJvbkFjdGl2YXRlIiwiaXJvbi1zZWxlY3QiOiJfb25Jcm9uU2VsZWN0In0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMub3BlbmVkP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oKX0sb3BlbjpmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWR8fHRoaXMuJC5kcm9wZG93bi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLmRyb3Bkb3duLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5pZ25vcmVTZWxlY3R8fHRoaXMuY2xvc2UoKX0sX29uSXJvbkFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuY2xvc2VPbkFjdGl2YXRlJiZ0aGlzLmNsb3NlKCl9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7ZT8odGhpcy5fZHJvcGRvd25Db250ZW50PXRoaXMuY29udGVudEVsZW1lbnQsdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1vcGVuIikpOnQhPW51bGwmJnRoaXMuZmlyZSgicGFwZXItZHJvcGRvd24tY2xvc2UiKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtEaS5fZGlzYWJsZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlJiZ0aGlzLm9wZW5lZCYmdGhpcy5jbG9zZSgpfSxfX29uSXJvbk92ZXJsYXlDYW5jZWxlZDpmdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbCxyPXRoaXMuJC50cmlnZ2VyLG49enQodCkucGF0aDtuLmluZGV4T2Yocik+LTEmJmUucHJldmVudERlZmF1bHQoKX19KTtPYmplY3Qua2V5cyhkRSkuZm9yRWFjaChmdW5jdGlvbihlKXtIYmVbZV09ZEVbZV19KTt2YXIgdlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt2Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt2Vy5pbm5lckhUTUw9YDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLWRyb3Bkb3duLW1lbnUiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh2Vy5jb250ZW50KTt2YXIgeFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt4Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt4Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgLyogTk9URShjZGF0YSk6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlCiAgICAgICAgICogdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLgogICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLDAsMCwwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgfTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudTsKICAgICAgfQoKICAgICAgLyogcGFwZXItZHJvcGRvd24tbWVudSBhbmQgcGFwZXItZHJvcGRvd24tbWVudS1saWdodCBib3RoIGRlbGVnYXRlIGZvY3VzCiAgICAgICAqIHRvIG90aGVyIGludGVybmFsIGVsZW1lbnRzIHdoaWNoIG1hbmFnZSBmb2N1cyBzdHlsaW5nLiAqLwogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKCiAgICAgICAgQGFwcGx5KC0tcGFwZXItZHJvcGRvd24tbWVudSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbbm9pbmtdKSBwYXBlci1yaXBwbGUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtuby1sYWJlbC1mbG9hdF0pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICByaWdodDogMHB4OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LXJpcHBsZTsKICAgICAgfQoKICAgICAgcGFwZXItbWVudS1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDsKICAgICAgfQoKICAgICAgaXJvbi1pY29uIHsKICAgICAgICBjb2xvcjogdmFyKC0tZGlzYWJsZWQtdGV4dC1jb2xvcik7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtaWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBWYmU9R3QoSFRNTEVsZW1lbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kcm9wZG93bi1tZW51LXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CgogICAgPHBhcGVyLW1lbnUtYnV0dG9uIGlkPSJtZW51QnV0dG9uIiB2ZXJ0aWNhbC1hbGlnbj0iW1t2ZXJ0aWNhbEFsaWduXV0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIGR5bmFtaWMtYWxpZ249IltbZHluYW1pY0FsaWduXV0iIHZlcnRpY2FsLW9mZnNldD0iW1tfY29tcHV0ZU1lbnVWZXJ0aWNhbE9mZnNldChub0xhYmVsRmxvYXQsIHZlcnRpY2FsT2Zmc2V0KV1dIiBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBvbi1pcm9uLXNlbGVjdD0iX29uSXJvblNlbGVjdCIgb24taXJvbi1kZXNlbGVjdD0iX29uSXJvbkRlc2VsZWN0IiBvcGVuZWQ9Int7b3BlbmVkfX0iIGNsb3NlLW9uLWFjdGl2YXRlIGFsbG93LW91dHNpZGUtc2Nyb2xsPSJbW2FsbG93T3V0c2lkZVNjcm9sbF1dIiByZXN0b3JlLWZvY3VzLW9uLWNsb3NlPSJbW3Jlc3RvcmVGb2N1c09uQ2xvc2VdXSIgZXhwYW5kLXNpemluZy10YXJnZXQtZm9yLXNjcm9sbGJhcnM9IltbZXhwYW5kU2l6aW5nVGFyZ2V0Rm9yU2Nyb2xsYmFyc11dIj4KICAgICAgPCEtLSBzdXBwb3J0IGh5YnJpZCBtb2RlOiB1c2VyIG1pZ2h0IGJlIHVzaW5nIHBhcGVyLW1lbnUtYnV0dG9uIDEueCB3aGljaCBkaXN0cmlidXRlcyB2aWEgPGNvbnRlbnQ+IC0tPgogICAgICA8ZGl2IGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIiBzbG90PSJkcm9wZG93bi10cmlnZ2VyIj4KICAgICAgICA8cGFwZXItcmlwcGxlPjwvcGFwZXItcmlwcGxlPgogICAgICAgIDwhLS0gcGFwZXItaW5wdXQgaGFzIHR5cGU9InRleHQiIGZvciBhMTF5LCBkbyBub3QgcmVtb3ZlIC0tPgogICAgICAgIDxwYXBlci1pbnB1dCBpZD0iaW5wdXQiIHR5cGU9InRleHQiIGludmFsaWQ9IltbaW52YWxpZF1dIiByZWFkb25seSBkaXNhYmxlZD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1t2YWx1ZV1dIiBwbGFjZWhvbGRlcj0iW1twbGFjZWhvbGRlcl1dIiBlcnJvci1tZXNzYWdlPSJbW2Vycm9yTWVzc2FnZV1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbYWx3YXlzRmxvYXRMYWJlbF1dIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgbGFiZWw9IltbbGFiZWxdXSIgaW5wdXQtcm9sZT0iYnV0dG9uIiBpbnB1dC1hcmlhLWhhc3BvcHVwPSJsaXN0Ym94IiBhdXRvY29tcGxldGU9Im9mZiI+CiAgICAgICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItaW5wdXQgMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249InBhcGVyLWRyb3Bkb3duLW1lbnU6YXJyb3ctZHJvcC1kb3duIiBzdWZmaXggc2xvdD0ic3VmZml4Ij48L2lyb24taWNvbj4KICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8L2Rpdj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvcGFwZXItbWVudS1idXR0b24+CmAsaXM6InBhcGVyLWRyb3Bkb3duLW1lbnUiLGJlaGF2aW9yczpbU2gsRGksRWgsVGhdLHByb3BlcnRpZXM6e3NlbGVjdGVkSXRlbUxhYmVsOnt0eXBlOlN0cmluZyxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxsYWJlbDp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30sZXJyb3JNZXNzYWdlOnt0eXBlOlN0cmluZ30sb3BlbmVkOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLHZhbHVlOiExLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9BbmltYXRpb25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InJpZ2h0In0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCJ9LHZlcnRpY2FsT2Zmc2V0Ok51bWJlcixkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0scmVzdG9yZUZvY3VzT25DbG9zZTp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3RhcDoiX29uVGFwIn0sa2V5QmluZGluZ3M6eyJ1cCBkb3duIjoib3BlbiIsZXNjOiJjbG9zZSJ9LG9ic2VydmVyczpbIl9zZWxlY3RlZEl0ZW1DaGFuZ2VkKHNlbGVjdGVkSXRlbSkiXSxfYXR0YWNoRG9tKGUpe2xldCB0PXVlKHRoaXMpO3JldHVybiB0LmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiIsZGVsZWdhdGVzRm9jdXM6ITAsc2hhZHlVcGdyYWRlRnJhZ21lbnQ6ZX0pLHQuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChlKSxWYmUucHJvdG90eXBlLl9hdHRhY2hEb20uY2FsbCh0aGlzLGUpfSxmb2N1cygpe3RoaXMuJC5pbnB1dC5fZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGVudEVsZW1lbnQ7ZSYmZS5zZWxlY3RlZEl0ZW0mJnRoaXMuX3NldFNlbGVjdGVkSXRlbShlLnNlbGVjdGVkSXRlbSl9LGdldCBjb250ZW50RWxlbWVudCgpe2Zvcih2YXIgZT16dCh0aGlzLiQuY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoZVt0XS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiBlW3RdfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24ub3BlbigpfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuJC5tZW51QnV0dG9uLmNsb3NlKCl9LF9vbklyb25TZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuZGV0YWlsLml0ZW0pfSxfb25Jcm9uRGVzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpfSxfb25UYXA6ZnVuY3Rpb24oZSl7aWd0KGUpPT09dGhpcyYmdGhpcy5vcGVuKCl9LF9zZWxlY3RlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PSIiO2U/dD1lLmxhYmVsfHxlLmdldEF0dHJpYnV0ZSgibGFiZWwiKXx8ZS50ZXh0Q29udGVudC50cmltKCk6dD0iIix0aGlzLnZhbHVlPXQsdGhpcy5fc2V0U2VsZWN0ZWRJdGVtTGFiZWwodCl9LF9jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fChlPy00OjgpfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCF0aGlzLnJlcXVpcmVkfHx0aGlzLnJlcXVpcmVkJiYhIXRoaXMudmFsdWV9LF9vcGVuZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGVuZWQ/InRydWUiOiJmYWxzZSIsdD10aGlzLmNvbnRlbnRFbGVtZW50O3QmJnQuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixlKX19KTt2YXIgYlc9MSxFMHQ9MixQOT17b3V0ZXJTY3JvbGw6e3Njcm9sbDohMH0sc2hhZG93TW9kZTp7c3RhbmRhcmQ6RTB0LHdhdGVyZmFsbDpiVywid2F0ZXJmYWxsLXRhbGwiOmJXfSx0YWxsTW9kZTp7IndhdGVyZmFsbC10YWxsIjohMH19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbDsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgICNtYWluUGFuZWwgewogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtYm9keTsKICAgICAgfQoKICAgICAgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNjcm9sbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2Nyb2xsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zY3JvbGwtY29udGFpbmVyOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBjb3ZlcgogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9Y292ZXJdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvdmVyLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluUGFuZWwgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHN0YW5kYXJkCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zdGFuZGFyZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc3RhbmRhcmQtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiBzZWFtZWQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXNlYW1lZF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2VhbWVkLWNvbnRhaW5lcjsKICAgICAgfQoKCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC13YXRlcmZhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAvKgogICAgICAgKiBtb2RlOiB3YXRlcmZhbGwtdGFsbAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9d2F0ZXJmYWxsLXRhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC10YWxsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI2Ryb3BTaGFkb3cgewogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41czsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtc2hhZG93OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdy5oYXMtc2hhZG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciA+IDo6c2xvdHRlZCguZml0KSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgfQoKICAgIDwvc3R5bGU+CgogICAgPHNsb3QgaWQ9ImhlYWRlclNsb3QiIG5hbWU9ImhlYWRlciI+PC9zbG90PgoKICAgIDxkaXYgaWQ9Im1haW5QYW5lbCI+CiAgICAgIDxkaXYgaWQ9Im1haW5Db250YWluZXIiIGNsYXNzXCQ9IltbX2NvbXB1dGVNYWluQ29udGFpbmVyQ2xhc3MobW9kZSldXSI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iZHJvcFNoYWRvdyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItaGVhZGVyLXBhbmVsIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToic3RhbmRhcmQiLG9ic2VydmVyOiJfbW9kZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sc2hhZG93Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHRhbGxDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6InRhbGwifSxhdFRvcDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxvYnNlcnZlcnM6WyJfY29tcHV0ZURyb3BTaGFkb3dIaWRkZW4oYXRUb3AsIG1vZGUsIHNoYWRvdykiXSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2FkZExpc3RlbmVyKCksdGhpcy5fa2VlcFNjcm9sbGluZ1N0YXRlKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlTGlzdGVuZXIoKX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbEhhbmRsZXI9dGhpcy5fc2Nyb2xsLmJpbmQodGhpcyksY29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxnZXQgaGVhZGVyKCl7cmV0dXJuIHp0KHRoaXMuJC5oZWFkZXJTbG90KS5nZXREaXN0cmlidXRlZE5vZGVzKClbMF19LGdldCBzY3JvbGxlcigpe3JldHVybiB0aGlzLl9nZXRTY3JvbGxlckZvck1vZGUodGhpcy5tb2RlKX0sZ2V0IHZpc2libGVTaGFkb3coKXtyZXR1cm4gdGhpcy4kLmRyb3BTaGFkb3cuY2xhc3NMaXN0LmNvbnRhaW5zKCJoYXMtc2hhZG93Iil9LF9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbjpmdW5jdGlvbihlLHQscil7dmFyIG49UDkuc2hhZG93TW9kZVt0XTt0aGlzLnNoYWRvdz90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PUUwdD90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6bj09PWJXJiYhZT90aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMCx0aGlzLiQuZHJvcFNoYWRvdyk6dGhpcy50b2dnbGVDbGFzcygiaGFzLXNoYWRvdyIsITEsdGhpcy4kLmRyb3BTaGFkb3cpfSxfY29tcHV0ZU1haW5Db250YWluZXJDbGFzczpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gdC5mbGV4PWUhPT0iY292ZXIiLE9iamVjdC5rZXlzKHQpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gdFtyXX0pLmpvaW4oIiAiKX0sX2FkZExpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9yZW1vdmVMaXN0ZW5lcjpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLnNjcm9sbEhhbmRsZXIpfSxfbW9kZUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1QOSxuPXRoaXMuaGVhZGVyLGk9MjAwO24mJihyLnRhbGxNb2RlW3RdJiYhci50YWxsTW9kZVtlXT8obi5jbGFzc0xpc3QucmVtb3ZlKHRoaXMudGFsbENsYXNzKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7bi5jbGFzc0xpc3QucmVtb3ZlKCJhbmltYXRlIil9LGkpKTp0aGlzLnRvZ2dsZUNsYXNzKCJhbmltYXRlIixyLnRhbGxNb2RlW2VdLG4pKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sX2tlZXBTY3JvbGxpbmdTdGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2Nyb2xsZXIsdD10aGlzLmhlYWRlcjt0aGlzLl9zZXRBdFRvcChlLnNjcm9sbFRvcD09PTApLHQmJnRoaXMudGFsbENsYXNzJiZQOS50YWxsTW9kZVt0aGlzLm1vZGVdJiZ0aGlzLnRvZ2dsZUNsYXNzKHRoaXMudGFsbENsYXNzLHRoaXMuYXRUb3B8fHQuY2xhc3NMaXN0LmNvbnRhaW5zKHRoaXMudGFsbENsYXNzKSYmZS5zY3JvbGxIZWlnaHQ8dGhpcy5vZmZzZXRIZWlnaHQsdCl9LF9zY3JvbGw6ZnVuY3Rpb24oKXt0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKSx0aGlzLmZpcmUoImNvbnRlbnQtc2Nyb2xsIix7dGFyZ2V0OnRoaXMuc2Nyb2xsZXJ9LHtidWJibGVzOiExfSl9LF9nZXRTY3JvbGxlckZvck1vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIFA5Lm91dGVyU2Nyb2xsW2VdP3RoaXM6dGhpcy4kLm1haW5Db250YWluZXJ9fSk7WXQoe2lzOiJwYXBlci1pY29uLWJ1dHRvbiIsX3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CgogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKCiAgICAgICAgLyoKICAgICAgICAgIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvCiAgICAgICAgICBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgLyogQmVjYXVzZSBvZiBwb2x5bWVyLzI1NTgsIHRoaXMgc3R5bGUgaGFzIGxvd2VyIHNwZWNpZmljaXR5IHRoYW4gKiAqLwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3ggIWltcG9ydGFudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b247CiAgICAgIH0KCiAgICAgIDpob3N0ICNpbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZC10ZXh0LCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBhdXRvOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbi1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWhvdmVyOwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIC0taXJvbi1pY29uLXdpZHRoOiAxMDAlOwogICAgICAgIC0taXJvbi1pY29uLWhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8aXJvbi1pY29uIGlkPSJpY29uIiBzcmM9Iltbc3JjXV0iIGljb249IltbaWNvbl1dIgogICAgICAgICAgICAgICBhbHQkPSJbW2FsdF1dIj48L2lyb24taWNvbj4KICBgLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIn0sYmVoYXZpb3JzOltqeF0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe3RoaXMuX3RlbXBsYXRlLnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpfSxwcm9wZXJ0aWVzOntzcmM6e3R5cGU6U3RyaW5nfSxpY29uOnt0eXBlOlN0cmluZ30sYWx0Ont0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2FsdENoYW5nZWQifX0sX2FsdENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpOyghcnx8dD09cikmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixlKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5taXJyb3ItdGV4dCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICB0ZXh0YXJlYSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIC8qIHNlZSBjb21tZW50cyBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIgewogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWEtcGxhY2Vob2xkZXI7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tIHRoZSBtaXJyb3Igc2l6ZXMgdGhlIGlucHV0L3RleHRhcmVhIHNvIGl0IGdyb3dzIHdpdGggdHlwaW5nIC0tPgogICAgPCEtLSB1c2UgJiMxNjA7IGluc3RlYWQgJm5ic3A7IG9mIHRvIGFsbG93IHRoaXMgZWxlbWVudCB0byBiZSB1c2VkIGluIFhIVE1MIC0tPgogICAgPGRpdiBpZD0ibWlycm9yIiBjbGFzcz0ibWlycm9yLXRleHQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbmJzcDs8L2Rpdj4KCiAgICA8IS0tIHNpemUgdGhlIGlucHV0L3RleHRhcmVhIHdpdGggYSBkaXYsIGJlY2F1c2UgdGhlIHRleHRhcmVhIGhhcyBpbnRyaW5zaWMgc2l6ZSBpbiBmZiAtLT4KICAgIDxkaXYgY2xhc3M9InRleHRhcmVhLWNvbnRhaW5lciBmaXQiPgogICAgICA8dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lJD0iW1tuYW1lXV0iIGFyaWEtbGFiZWwkPSJbW2xhYmVsXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIHJlcXVpcmVkJD0iW1tyZXF1aXJlZF1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgcm93cyQ9Iltbcm93c11dIiBtaW5sZW5ndGgkPSJbW21pbmxlbmd0aF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIj48L3RleHRhcmVhPgogICAgPC9kaXY+CmAsaXM6Imlyb24tYXV0b2dyb3ctdGV4dGFyZWEiLGJlaGF2aW9yczpbVGgsRGldLHByb3BlcnRpZXM6e3ZhbHVlOntvYnNlcnZlcjoiX3ZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxiaW5kVmFsdWU6e29ic2VydmVyOiJfYmluZFZhbHVlQ2hhbmdlZCIsdHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sbWF4Um93czp7dHlwZTpOdW1iZXIsdmFsdWU6MCxvYnNlcnZlcjoiX3VwZGF0ZUNhY2hlZCJ9LGF1dG9jb21wbGV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9mb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxpbnB1dG1vZGU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmd9LHJlYWRvbmx5Ont0eXBlOlN0cmluZ30scmVxdWlyZWQ6e3R5cGU6Qm9vbGVhbn0sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbGFiZWw6e3R5cGU6U3RyaW5nfX0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQifSxnZXQgdGV4dGFyZWEoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhfSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25TdGFydChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQ9ZX0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpbb2FdZHxob25lKS8pJiYhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgMVszNDU2Nzg5XS8pO2UmJih0aGlzLiQudGV4dGFyZWEuc3R5bGUubWFyZ2luTGVmdD0iLTNweCIpfSx2YWxpZGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC50ZXh0YXJlYS52YWxpZGl0eS52YWxpZDtyZXR1cm4gZSYmKHRoaXMucmVxdWlyZWQmJnRoaXMudmFsdWU9PT0iIj9lPSExOnRoaXMuaGFzVmFsaWRhdG9yKCkmJihlPVRoLnZhbGlkYXRlLmNhbGwodGhpcyx0aGlzLnZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWV9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy50ZXh0YXJlYTshdHx8KHQudmFsdWUhPT1lJiYodC52YWx1ZT1lfHxlPT09MD9lOiIiKSx0aGlzLmJpbmRWYWx1ZT1lLHRoaXMuJC5taXJyb3IuaW5uZXJIVE1MPXRoaXMuX3ZhbHVlRm9yTWlycm9yKCksdGhpcy5maXJlKCJiaW5kLXZhbHVlLWNoYW5nZWQiLHt2YWx1ZTp0aGlzLmJpbmRWYWx1ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucGF0aDt0aGlzLnZhbHVlPXQ/dFswXS52YWx1ZTplLnRhcmdldC52YWx1ZX0sX2NvbnN0cmFpbjpmdW5jdGlvbihlKXt2YXIgdDtmb3IoZT1lfHxbIiJdLHRoaXMubWF4Um93cz4wJiZlLmxlbmd0aD50aGlzLm1heFJvd3M/dD1lLnNsaWNlKDAsdGhpcy5tYXhSb3dzKTp0PWUuc2xpY2UoMCk7dGhpcy5yb3dzPjAmJnQubGVuZ3RoPHRoaXMucm93czspdC5wdXNoKCIiKTtyZXR1cm4gdC5qb2luKCI8YnIvPiIpKyImIzE2MDsifSxfdmFsdWVGb3JNaXJyb3I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRleHRhcmVhO2lmKCEhZSlyZXR1cm4gdGhpcy50b2tlbnM9ZSYmZS52YWx1ZT9lLnZhbHVlLnJlcGxhY2UoLyYvZ20sIiZhbXA7IikucmVwbGFjZSgvIi9nbSwiJnF1b3Q7IikucmVwbGFjZSgvJy9nbSwiJiMzOTsiKS5yZXBsYWNlKC88L2dtLCImbHQ7IikucmVwbGFjZSgvPi9nbSwiJmd0OyIpLnNwbGl0KGAKYCk6WyIiXSx0aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfSxfdXBkYXRlQ2FjaGVkOmZ1bmN0aW9uKCl7dGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fY29uc3RyYWluKHRoaXMudG9rZW5zKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIGxhYmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaW5wdXQtY29udGFpbmVyIG5vLWxhYmVsLWZsb2F0JD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxsYWJlbCBoaWRkZW4kPSJbWyFsYWJlbF1dIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZm9yJD0iW1tfaW5wdXRJZF1dIiBzbG90PSJsYWJlbCI+W1tsYWJlbF1dPC9sYWJlbD4KCiAgICAgIDxpcm9uLWF1dG9ncm93LXRleHRhcmVhIGNsYXNzPSJwYXBlci1pbnB1dC1pbnB1dCIgc2xvdD0iaW5wdXQiIGlkJD0iW1tfaW5wdXRJZF1dIiBhcmlhLWxhYmVsbGVkYnkkPSJbW19hcmlhTGFiZWxsZWRCeV1dIiBhcmlhLWRlc2NyaWJlZGJ5JD0iW1tfYXJpYURlc2NyaWJlZEJ5XV0iIGJpbmQtdmFsdWU9Int7dmFsdWV9fSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvciQ9IltbdmFsaWRhdG9yXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiBhdXRvY29tcGxldGUkPSJbW2F1dG9jb21wbGV0ZV1dIiBhdXRvZm9jdXMkPSJbW2F1dG9mb2N1c11dIiBpbnB1dG1vZGUkPSJbW2lucHV0bW9kZV1dIiBuYW1lJD0iW1tuYW1lXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIGF1dG9jYXBpdGFsaXplJD0iW1thdXRvY2FwaXRhbGl6ZV1dIiByb3dzJD0iW1tyb3dzXV0iIG1heC1yb3dzJD0iW1ttYXhSb3dzXV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIj48L2lyb24tYXV0b2dyb3ctdGV4dGFyZWE+CgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZXJyb3JNZXNzYWdlXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1lcnJvciBhcmlhLWxpdmU9ImFzc2VydGl2ZSIgc2xvdD0iYWRkLW9uIj5bW2Vycm9yTWVzc2FnZV1dPC9wYXBlci1pbnB1dC1lcnJvcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tjaGFyQ291bnRlcl1dIj4KICAgICAgICA8cGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHNsb3Q9ImFkZC1vbiI+PC9wYXBlci1pbnB1dC1jaGFyLWNvdW50ZXI+CiAgICAgIDwvdGVtcGxhdGU+CgogICAgPC9wYXBlci1pbnB1dC1jb250YWluZXI+CmAsaXM6InBhcGVyLXRleHRhcmVhIixiZWhhdmlvcnM6W0E5LEVoXSxwcm9wZXJ0aWVzOntfYXJpYUxhYmVsbGVkQnk6e29ic2VydmVyOiJfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sX2FyaWFEZXNjcmliZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkIix0eXBlOlN0cmluZ30sdmFsdWU6e3R5cGU6U3RyaW5nfSxyb3dzOnt0eXBlOk51bWJlcix2YWx1ZToxfSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowfX0sZ2V0IHNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxnZXQgc2VsZWN0aW9uRW5kKCl7cmV0dXJuIHRoaXMuJC5pbnB1dC50ZXh0YXJlYS5zZWxlY3Rpb25FbmR9LHNldCBzZWxlY3Rpb25FbmQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZD1lfSxfYXJpYUxhYmVsbGVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpfSxfYXJpYURlc2NyaWJlZEJ5Q2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c2FibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsZSl9LGdldCBfZm9jdXNhYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlucHV0RWxlbWVudC50ZXh0YXJlYX19KTt2YXIgd1c9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTt3Vy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTt3Vy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QsIC5wYXBlci1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1taW4taGVpZ2h0LCA0OHB4KTsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgfQoKICAgICAgLnBhcGVyLWl0ZW0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBib3JkZXI6bm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgLnBhcGVyLWl0ZW1baGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICA6aG9zdCguaXJvbi1zZWxlY3RlZCksIC5wYXBlci1pdGVtLmlyb24tc2VsZWN0ZWQgewogICAgICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLXNlbGVjdGVkLXdlaWdodCwgYm9sZCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pLCAucGFwZXItaXRlbVtkaXNhYmxlZF0gewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWRpc2FibGVkLWNvbG9yLCB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyksIC5wYXBlci1pdGVtOmZvY3VzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1mb2N1c2VkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpOmJlZm9yZSwgLnBhcGVyLWl0ZW06Zm9jdXM6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwoKICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tZGFyay1kaXZpZGVyLW9wYWNpdHkpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQtYmVmb3JlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQod1cuY29udGVudCk7dmFyIFViZT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im9wdGlvbiIsdGFiaW5kZXg6IjAifX0sSTk9W1NoLERpLFViZV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbSIsYmVoYXZpb3JzOltJOV19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBuZWVkZWQgZm9yIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzIHRvIHdvcmsgb24gZmYgKi8KICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0d28tbGluZV0pIHsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLWJvZHktdHdvLWxpbmUtbWluLWhlaWdodCwgNzJweCk7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0aHJlZS1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10aHJlZS1saW5lLW1pbi1oZWlnaHQsIDg4cHgpOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZChbc2Vjb25kYXJ5XSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtYm9keTE7CgogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWJvZHktc2Vjb25kYXJ5OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaXRlbS1ib2R5In0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1pdGVtLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWl0ZW07CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWljb24gewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIHdpZHRoOiB2YXIoLS1wYXBlci1pdGVtLWljb24td2lkdGgsIDU2cHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0taWNvbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250ZW50SWNvbiIgY2xhc3M9ImNvbnRlbnQtaWNvbiI+CiAgICAgIDxzbG90IG5hbWU9Iml0ZW0taWNvbiI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLWljb24taXRlbSIsYmVoYXZpb3JzOltJOV19KTt2YXIgU1c9e3Byb3BlcnRpZXM6e211bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Im11bHRpQ2hhbmdlZCJ9LHNlbGVjdGVkVmFsdWVzOnt0eXBlOkFycmF5LG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sc2VsZWN0ZWRJdGVtczp7dHlwZTpBcnJheSxyZWFkT25seTohMCxub3RpZnk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlU2VsZWN0ZWQoc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlcykiXSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5tdWx0aT90aGlzLl90b2dnbGVTZWxlY3RlZChlKTp0aGlzLnNlbGVjdGVkPWV9LG11bHRpQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9zZWxlY3Rpb24ubXVsdGk9ZSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfHx0aGlzLnNlbGVjdGVkVmFsdWVzIT1udWxsJiZ0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aH0sX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoPjAmJih0aGlzLnNlbGVjdGVkVmFsdWVzPXRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4VG9WYWx1ZSh0aGlzLmluZGV4T2YoZSkpfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9LHRoaXMpKTp3aC5fdXBkYXRlQXR0ckZvclNlbGVjdGVkLmFwcGx5KHRoaXMpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLm11bHRpP3RoaXMuX3NlbGVjdE11bHRpKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpOnRoaXMuX3NlbGVjdFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQpfSxfc2VsZWN0TXVsdGk6ZnVuY3Rpb24oZSl7ZT1lfHxbXTt2YXIgdD0odGhpcy5fdmFsdWVzVG9JdGVtcyhlKXx8W10pLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaSE9bnVsbH0pO3RoaXMuX3NlbGVjdGlvbi5jbGVhcih0KTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLl9zZWxlY3Rpb24uc2V0SXRlbVNlbGVjdGVkKHRbcl0sITApO2lmKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJiF0aGlzLl9zZWxlY3Rpb24uZ2V0KCkubGVuZ3RoKXt2YXIgbj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKTtuJiZ0aGlzLnNlbGVjdCh0aGlzLmZhbGxiYWNrU2VsZWN0aW9uKX19LF9zZWxlY3Rpb25DaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zZWxlY3Rpb24uZ2V0KCk7dGhpcy5tdWx0aT8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhlKSx0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5sZW5ndGg/ZVswXTpudWxsKSk6ZSE9bnVsbD8odGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbZV0pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlKSk6KHRoaXMuX3NldFNlbGVjdGVkSXRlbXMoW10pLHRoaXMuX3NldFNlbGVjdGVkSXRlbShudWxsKSl9LF90b2dnbGVTZWxlY3RlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZSkscj10PDA7cj90aGlzLnB1c2goInNlbGVjdGVkVmFsdWVzIixlKTp0aGlzLnNwbGljZSgic2VsZWN0ZWRWYWx1ZXMiLHQsMSl9LF92YWx1ZXNUb0l0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6ZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbHVlVG9JdGVtKHQpfSx0aGlzKX19LFQwdD1bd2gsU1ddO3ZhciBfXz17cHJvcGVydGllczp7Zm9jdXNlZEl0ZW06e29ic2VydmVyOiJfZm9jdXNlZEl0ZW1DaGFuZ2VkIixyZWFkT25seTohMCx0eXBlOk9iamVjdH0sYXR0ckZvckl0ZW1UaXRsZTp7dHlwZTpTdHJpbmd9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQifX0sX01PRElGSUVSX0tFWVM6WyJBbHQiLCJBbHRHcmFwaCIsIkNhcHNMb2NrIiwiQ29udHJvbCIsIkZuIiwiRm5Mb2NrIiwiSHlwZXIiLCJNZXRhIiwiTnVtTG9jayIsIk9TIiwiU2Nyb2xsTG9jayIsIlNoaWZ0IiwiU3VwZXIiLCJTeW1ib2wiLCJTeW1ib2xMb2NrIl0sX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TOjFlMyxfcHJldmlvdXNUYWJJbmRleDowLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51In0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZU11bHRpc2VsZWN0YWJsZShtdWx0aSkiXSxsaXN0ZW5lcnM6e2ZvY3VzOiJfb25Gb2N1cyIsa2V5ZG93bjoiX29uS2V5ZG93biIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vbklyb25JdGVtc0NoYW5nZWQifSxrZXlCaW5kaW5nczp7dXA6Il9vblVwS2V5Iixkb3duOiJfb25Eb3duS2V5Iixlc2M6Il9vbkVzY0tleSIsInNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFRhYmluZGljZXMoKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX2RlZmF1bHRGb2N1c0FzeW5jJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyksdGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9bnVsbCk7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0oZSk7dCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil8fCh0aGlzLl9zZXRGb2N1c2VkSXRlbSh0KSxTVy5zZWxlY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3Jlc2V0VGFiaW5kaWNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5pdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdD09PWU/IjAiOiItMSIpLHQuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIix0aGlzLl9zZWxlY3Rpb24uaXNTZWxlY3RlZCh0KSl9LHRoaXMpfSxfdXBkYXRlTXVsdGlzZWxlY3RhYmxlOmZ1bmN0aW9uKGUpe2U/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpfSxfZm9jdXNXaXRoS2V5Ym9hcmRFdmVudDpmdW5jdGlvbihlKXtpZih0aGlzLl9NT0RJRklFUl9LRVlTLmluZGV4T2YoZS5rZXkpPT09LTEpe3RoaXMuY2FuY2VsRGVib3VuY2VyKCJfY2xlYXJTZWFyY2hUZXh0Iik7dmFyIHQ9dGhpcy5fc2VhcmNoVGV4dHx8IiIscj1lLmtleSYmZS5rZXkubGVuZ3RoPT0xP2Uua2V5OlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTt0Kz1yLnRvTG9jYWxlTG93ZXJDYXNlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MCxvO289dGhpcy5pdGVtc1tpXTtpKyspaWYoIW8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXt2YXIgYT10aGlzLmF0dHJGb3JJdGVtVGl0bGV8fCJ0ZXh0Q29udGVudCIscz0ob1thXXx8by5nZXRBdHRyaWJ1dGUoYSl8fCIiKS50cmltKCk7aWYoIShzLmxlbmd0aDxuKSYmcy5zbGljZSgwLG4pLnRvTG9jYWxlTG93ZXJDYXNlKCk9PXQpe3RoaXMuX3NldEZvY3VzZWRJdGVtKG8pO2JyZWFrfX10aGlzLl9zZWFyY2hUZXh0PXQsdGhpcy5kZWJvdW5jZSgiX2NsZWFyU2VhcmNoVGV4dCIsdGhpcy5fY2xlYXJTZWFyY2hUZXh0LHRoaXMuX1NFQVJDSF9SRVNFVF9USU1FT1VUX01TKX19LF9jbGVhclNlYXJjaFRleHQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWFyY2hUZXh0PSIifSxfZm9jdXNQcmV2aW91czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aCx0PU51bWJlcih0aGlzLmluZGV4T2YodGhpcy5mb2N1c2VkSXRlbSkpLHI9MTtyPGUrMTtyKyspe3ZhciBuPXRoaXMuaXRlbXNbKHQtcitlKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfZm9jdXNOZXh0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodCtyKSVlXTtpZighbi5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBpPXp0KG4pLmdldE93bmVyUm9vdCgpfHxkb2N1bWVudDtpZih0aGlzLl9zZXRGb2N1c2VkSXRlbShuKSx6dChpKS5hY3RpdmVFbGVtZW50PT1uKXJldHVybn19fSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0P2Uuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpOmUuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx3aC5fYXBwbHlTZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfZm9jdXNlZEl0ZW1DaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxlJiYhZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikmJiF0aGlzLmRpc2FibGVkJiYoZS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLGUuZm9jdXMoKSl9LF9vbklyb25JdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxfb25TaGlmdFRhYkRvd246ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7X18uX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLl9zZXRGb2N1c2VkSXRlbShudWxsKSx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLF9fLl9zaGlmdFRhYlByZXNzZWQ9ITF9LDEpfSxfb25Gb2N1czpmdW5jdGlvbihlKXtpZighX18uX3NoaWZ0VGFiUHJlc3NlZCl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmdHlwZW9mIHQudGFiSW5kZXghPSJ1bmRlZmluZWQiJiYhdGhpcy5pc0xpZ2h0RGVzY2VuZGFudCh0KXx8KHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXt2YXIgcj10aGlzLm11bHRpP3RoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5zZWxlY3RlZEl0ZW1zWzBdOnRoaXMuc2VsZWN0ZWRJdGVtO3RoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHI/dGhpcy5fc2V0Rm9jdXNlZEl0ZW0ocik6dGhpcy5pdGVtc1swXSYmdGhpcy5fZm9jdXNOZXh0KCl9KSl9fSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRXNjS2V5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZm9jdXNlZEl0ZW07dCYmdC5ibHVyKCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKSxlLnN0b3BQcm9wYWdhdGlvbigpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe3doLl9hY3RpdmF0ZUhhbmRsZXIuY2FsbCh0aGlzLGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZT8odGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKT90aGlzLnRhYkluZGV4OjAsdGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpOnRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpfX07X18uX3NoaWZ0VGFiUHJlc3NlZD0hMTt2YXIgTDk9W1QwdCxPbyxfX107WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWxpc3Rib3gtYmFja2dyb3VuZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWxpc3Rib3gtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1saXN0Ym94OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbGlzdGJveCIsYmVoYXZpb3JzOltMOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imxpc3Rib3gifX0pO3ZhciBDMHQ9UWAKPGRvbS1tb2R1bGUgaWQ9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjIiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNGRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIzIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjUiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMTZkcDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+CmA7QzB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQzB0LmNvbnRlbnQpO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1tYXRlcmlhbC1zaGFyZWQtc3R5bGVzIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LXRyYW5zaXRpb247CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItbWF0ZXJpYWwiLHByb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOjF9LGFuaW1hdGVkOnt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfX19KTt2YXIgazk9e3Byb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LG1pbjp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LG1heDp7dHlwZTpOdW1iZXIsdmFsdWU6MTAwLG5vdGlmeTohMH0sc3RlcDp7dHlwZTpOdW1iZXIsdmFsdWU6MSxub3RpZnk6ITB9LHJhdGlvOnt0eXBlOk51bWJlcix2YWx1ZTowLHJlYWRPbmx5OiEwLG5vdGlmeTohMH19LG9ic2VydmVyczpbIl91cGRhdGUodmFsdWUsIG1pbiwgbWF4LCBzdGVwKSJdLF9jYWxjUmF0aW86ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuX2NsYW1wVmFsdWUoZSktdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9jbGFtcFZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1pbih0aGlzLm1heCxNYXRoLm1heCh0aGlzLm1pbix0aGlzLl9jYWxjU3RlcChlKSkpfSxfY2FsY1N0ZXA6ZnVuY3Rpb24oZSl7aWYoZT1wYXJzZUZsb2F0KGUpLCF0aGlzLnN0ZXApcmV0dXJuIGU7dmFyIHQ9TWF0aC5yb3VuZCgoZS10aGlzLm1pbikvdGhpcy5zdGVwKTtyZXR1cm4gdGhpcy5zdGVwPDE/dC8oMS90aGlzLnN0ZXApK3RoaXMubWluOnQqdGhpcy5zdGVwK3RoaXMubWlufSxfdmFsaWRhdGVWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NsYW1wVmFsdWUodGhpcy52YWx1ZSk7cmV0dXJuIHRoaXMudmFsdWU9dGhpcy5vbGRWYWx1ZT1pc05hTihlKT90aGlzLm9sZFZhbHVlOmUsdGhpcy52YWx1ZSE9PWV9LF91cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl92YWxpZGF0ZVZhbHVlKCksdGhpcy5fc2V0UmF0aW8odGhpcy5fY2FsY1JhdGlvKHRoaXMudmFsdWUpKjEwMCl9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSwgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC8qIHRoZSBzdHJpcGUgZm9yIHRoZSBpbmRldGVybWluYXRlIGFuaW1hdGlvbiovCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQsIDRweCk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcywKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIsCiAgICAgIC5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgIDpob3N0KC50cmFuc2l0aW5nKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtOwoKICAgICAgICAvKiBEdXJhdGlvbiAqLwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZHVyYXRpb24sIDAuMDhzKTsKCiAgICAgICAgLyogVGltaW5nIGZ1bmN0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24sIGVhc2UpOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CgogICAgICAgIC8qIERlbGF5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kZWxheSwgMHMpOwogICAgICB9CgogICAgICAjcHJpbWFyeVByb2dyZXNzLAogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDApOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTUwMCkpOwogICAgICB9CgogICAgICAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZWVuLTEwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjcHJpbWFyeVByb2dyZXNzIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTUwMCkpOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAjc2Vjb25kYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktMzAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2Rpc2FibGVkXSkpICNwcmltYXJ5UHJvZ3Jlc3MuaW5kZXRlcm1pbmF0ZSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgY2VudGVyOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZS1iYXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlOjphZnRlciB7CiAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CgogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLXNwbGl0dGVyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICAgIDc1JSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDApIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBpbmRldGVybWluYXRlLWJhciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgtMTAwJSk7CiAgICAgICAgfQogICAgICAgIDUwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC4yOCwuNjIsLjM3LC45MSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgfQogICAgICAgIDMwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKC40MiwwLC42LC44KTsKICAgICAgICB9CiAgICAgICAgOTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InByb2dyZXNzQ29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0ic2Vjb25kYXJ5UHJvZ3Jlc3MiIGhpZGRlblwkPSJbW19oaWRlU2Vjb25kYXJ5UHJvZ3Jlc3Moc2Vjb25kYXJ5UmF0aW8pXV0iPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcmltYXJ5UHJvZ3Jlc3MiPjwvZGl2PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXByb2dyZXNzIixiZWhhdmlvcnM6W2s5XSxwcm9wZXJ0aWVzOntzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc2Vjb25kYXJ5UmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX3RvZ2dsZUluZGV0ZXJtaW5hdGUifSxkaXNhYmxlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxvYnNlcnZlcnM6WyJfcHJvZ3Jlc3NDaGFuZ2VkKHNlY29uZGFyeVByb2dyZXNzLCB2YWx1ZSwgbWluLCBtYXgsIGluZGV0ZXJtaW5hdGUpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InByb2dyZXNzYmFyIn0sX3RvZ2dsZUluZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oZSl7dGhpcy50b2dnbGVDbGFzcygiaW5kZXRlcm1pbmF0ZSIsZSx0aGlzLiQucHJpbWFyeVByb2dyZXNzKX0sX3RyYW5zZm9ybVByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9InNjYWxlWCgiK3QvMTAwKyIpIjtlLnN0eWxlLnRyYW5zZm9ybT1lLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1yfSxfbWFpblJhdGlvQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGUpfSxfcHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT10aGlzLl9jbGFtcFZhbHVlKGUpLHQ9dGhpcy5fY2xhbXBWYWx1ZSh0KTt2YXIgbz10aGlzLl9jYWxjUmF0aW8oZSkqMTAwLGE9dGhpcy5fY2FsY1JhdGlvKHQpKjEwMDt0aGlzLl9zZXRTZWNvbmRhcnlSYXRpbyhvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQuc2Vjb25kYXJ5UHJvZ3Jlc3MsbyksdGhpcy5fdHJhbnNmb3JtUHJvZ3Jlc3ModGhpcy4kLnByaW1hcnlQcm9ncmVzcyxhKSx0aGlzLnNlY29uZGFyeVByb2dyZXNzPWUsaT90aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iix0KSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsciksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLG4pfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIixlPyJ0cnVlIjoiZmFsc2UiKX0sX2hpZGVTZWNvbmRhcnlQcm9ncmVzczpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB9fSk7dmFyIEEwdD1RYAo8c3R5bGU+CiAgOmhvc3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZTogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXNpemUsIDE2cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZSBpbiBcYGF0dGFjaGVkXGAuICovCiAgICAtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUsIC0xcHgpOwogIH0KCiAgOmhvc3QoOmZvY3VzKSB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KCiAgI3JhZGlvQ29udGFpbmVyIHsKICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24tc2l6ZSk7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1yYWRpby1jb250YWluZXI7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgcmlnaHQ6IGF1dG87CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgfQoKICAjaW5rW2NoZWNrZWRdIHsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNvZmZSYWRpbywgI29uUmFkaW8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICB9CgogICNvZmZSYWRpbyB7CiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtYmFja2dyb3VuZC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMjhzOwogIH0KCiAgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBlYXNlIDAuMjhzOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb2ZmUmFkaW8gewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgOmhvc3QoW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC41KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTsKICB9CgogICNyYWRpb0xhYmVsIHsKICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgbWFyZ2luLWxlZnQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICBAYXBwbHkgLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWw7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNyYWRpb0xhYmVsIHsKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1jaGVja2VkOwogIH0KCiAgI3JhZGlvTGFiZWw6ZGlyKHJ0bCkgewogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCAxMHB4KTsKICB9CgogICNyYWRpb0xhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC41OwogIH0KCiAgOmhvc3QoW2Rpc2FibGVkXVtjaGVja2VkXSkgI29uUmFkaW8gewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdKSAjcmFkaW9MYWJlbCB7CiAgICAvKiBzbGlnaHRseSBkYXJrZXIgdGhhbiB0aGUgYnV0dG9uLCBzbyB0aGF0IGl0J3MgcmVhZGFibGUgKi8KICAgIG9wYWNpdHk6IDAuNjU7CiAgfQo8L3N0eWxlPgoKPGRpdiBpZD0icmFkaW9Db250YWluZXIiPgogIDxkaXYgaWQ9Im9mZlJhZGlvIj48L2Rpdj4KICA8ZGl2IGlkPSJvblJhZGlvIj48L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyYWRpb0xhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+YDtBMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpBMHQsaXM6InBhcGVyLXJhZGlvLWJ1dHRvbiIsYmVoYXZpb3JzOltYeF0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvIiwiYXJpYS1jaGVja2VkIjohMSx0YWJpbmRleDowfSxwcm9wZXJ0aWVzOnthcmlhQWN0aXZlQXR0cmlidXRlOnt0eXBlOlN0cmluZyx2YWx1ZToiYXJpYS1jaGVja2VkIn19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC5yYWRpb0NvbnRhaW5lcn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtUbSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRDb21wdXRlZFN0eWxlVmFsdWUoIi0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiKS50cmltKCk7aWYoZT09PSItMXB4Iil7dmFyIHQ9cGFyc2VGbG9hdCh0aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplIikudHJpbSgpKSxyPU1hdGguZmxvb3IoMyp0KTtyJTIhPT10JTImJnIrKyx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplIjpyKyJweCJ9KX19KX19KTt2YXIgUjk9e2hvc3RBdHRyaWJ1dGVzOntyb2xlOiJtZW51YmFyIn0sa2V5QmluZGluZ3M6e2xlZnQ6Il9vbkxlZnRLZXkiLHJpZ2h0OiJfb25SaWdodEtleSJ9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNlZEl0ZW0uY2xpY2soKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sZ2V0IF9pc1JUTCgpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIn0sX29uTGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c05leHQoKTp0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9mb2N1c1ByZXZpb3VzKCk6dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25LZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMua2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzKGUsInVwIGRvd24gbGVmdCByaWdodCBlc2MiKXx8dGhpcy5fZm9jdXNXaXRoS2V5Ym9hcmRFdmVudChlKX19LE45PVtMOSxSOV07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIHBhZGRpbmc6IHZhcigtLXBhcGVyLXJhZGlvLWdyb3VwLWl0ZW0tcGFkZGluZywgMTJweCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1yYWRpby1ncm91cCIsYmVoYXZpb3JzOltOOV0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InJhZGlvZ3JvdXAifSxwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOiJuYW1lIn0sc2VsZWN0ZWRBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJjaGVja2VkIn0sc2VsZWN0YWJsZTp7dHlwZTpTdHJpbmcsdmFsdWU6InBhcGVyLXJhZGlvLWJ1dHRvbiJ9LGFsbG93RW1wdHlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LHNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTtpZighKHQmJnQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSl7aWYodGhpcy5zZWxlY3RlZCl7dmFyIHI9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7aWYodGhpcy5zZWxlY3RlZD09ZSlpZih0aGlzLmFsbG93RW1wdHlTZWxlY3Rpb24pZT0iIjtlbHNle3ImJihyLmNoZWNrZWQ9ITApO3JldHVybn1yJiYoci5jaGVja2VkPSExKX13aC5zZWxlY3QuYXBwbHkodGhpcyxbZV0pLHRoaXMuZmlyZSgicGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZCIpfX0sX2FjdGl2YXRlRm9jdXNlZEl0ZW06ZnVuY3Rpb24oKXt0aGlzLl9pdGVtQWN0aXZhdGUodGhpcy5fdmFsdWVGb3JJdGVtKHRoaXMuZm9jdXNlZEl0ZW0pLHRoaXMuZm9jdXNlZEl0ZW0pfSxfb25VcEtleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1ByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c05leHQoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe1I5Ll9vbkxlZnRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX0sX29uUmlnaHRLZXk6ZnVuY3Rpb24oZSl7UjkuX29uUmlnaHRLZXkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2FjdGl2YXRlRm9jdXNlZEl0ZW0oKX19KTt2YXIgUDB0PVFgCiAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1zZWNvbmRhcnktY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTMwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1zZWNvbmRhcnktY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0OiB2YXIoLS1wYXBlci1zbGlkZXItaGVpZ2h0LCAycHgpOwogICAgfQoKICAgIC8qIGZvY3VzIHNob3dzIHRoZSByaXBwbGUgKi8KICAgIDpob3N0KDpmb2N1cykgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC8qKgogICAgICAqIE5PVEUoa2VhbnVsZWUpOiBUaG91Z2ggOmhvc3QtY29udGV4dCBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkLCBzb21lIHBhZ2VzCiAgICAgICogc3RpbGwgcmVseSBvbiBwYXBlci1zbGlkZXIgYmVpbmcgZmxpcHBlZCB3aGVuIGRpcj0icnRsIiBpcyBzZXQgb24gYm9keS4gRm9yIGZ1bGwKICAgICAgKiBjb21wYXRpYmlsaXR5LCBkaXI9InJ0bCIgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBvbiBwYXBlci1zbGlkZXIuCiAgICAgICovCiAgICA6ZGlyKHJ0bCkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRoaXMgaXMgc2VwYXJhdGUgZnJvbSB0aGUgcnVsZSBhYm92ZSBiZWNhdXNlIDpob3N0LWNvbnRleHQgbWF5CiAgICAgICogbm90IGJlIHJlY29nbml6ZWQuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJydGwiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoLTEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IE5lZWRlZCB0byBvdmVycmlkZSB0aGUgOmhvc3QtY29udGV4dCBydWxlICh3aGVyZSBzdXBwb3J0ZWQpCiAgICAgICogdG8gc3VwcG9ydCBMVFIgc2xpZGVycyBpbiBSVEwgcGFnZXMuCiAgICAgICovCiAgICA6aG9zdChbZGlyPSJsdHIiXSkgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBtYXJnaW4tbGVmdDogY2FsYygxNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXI6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOwogICAgfQoKICAgICNzbGlkZXJDb250YWluZXIuZWRpdGFibGUgewogICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgfQoKICAgIC5iYXItY29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnJpbmcgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoNXB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE4cyBlYXNlOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZC5kcmFnZ2luZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAucmluZy5leHBhbmQ6bm90KC5waW4pID4gLmJhci1jb250YWluZXIgewogICAgICBsZWZ0OiBjYWxjKDhweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckJhciB7CiAgICAgIHBhZGRpbmc6IDE1cHggMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1iYXItY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1jb250YWluZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VycyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgLyogc2xpZGVyLWtub2IgaXMgMzBweCArIHRoZSBzbGlkZXItaGVpZ2h0IHNvIHRoYXQgdGhlIG1hcmtlcnMgc2hvdWxkIHN0YXJ0IGF0IGEgb2Zmc2V0IG9mIDE1cHgqLwogICAgICB0b3A6IDE1cHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IC0xcHg7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgIH0KCiAgICAuc2xpZGVyLW1hcmtlciB7CiAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgfQogICAgLnNsaWRlci1tYXJrZXJzOjphZnRlciwKICAgIC5zbGlkZXItbWFya2VyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICIiOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7CiAgICAgIHdpZHRoOiAycHg7CiAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvciwgIzAwMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAwOwogICAgICB0b3A6IDA7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKC0xNXB4IC0gdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgICAgd2lkdGg6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgICBoZWlnaHQ6IGNhbGMoMzBweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkpOwogICAgfQoKICAgIC50cmFuc2l0aW5nID4gLnNsaWRlci1rbm9iIHsKICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLmRyYWdnaW5nIHsKICAgICAgdHJhbnNpdGlvbjogbm9uZTsKICAgIH0KCiAgICAuc25hcHMgPiAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4wOHMgZWFzZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBtYXJnaW46IDEwcHg7CiAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKCiAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgYmFja2dyb3VuZC1jb2xvciwgYm9yZGVyOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2U7CiAgICB9CgogICAgLmV4cGFuZDpub3QoLnBpbikgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS41KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgfQoKICAgIC5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3IsIHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICB9CgogICAgLnBpbiA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTNweDsKICAgICAgd2lkdGg6IDI2cHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlIDUwJSA1MCUgMDsKCiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlLAogICAgLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMThzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlOwogICAgfQoKICAgIC5waW4ucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDEpIHRyYW5zbGF0ZSgxN3B4LCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6IGF0dHIodmFsdWUpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogNTAlOwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1mb250LWNvbG9yLCAjZmZmKTsKICAgICAgZm9udC1zaXplOiAxMHB4OwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnBpbi5leHBhbmQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZSgwLCAtMTdweCk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgIH0KCiAgICAvKiBwYXBlci1pbnB1dCAqLwogICAgLnNsaWRlci1pbnB1dCB7CiAgICAgIHdpZHRoOiA1MHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQtY29udGFpbmVyLWlucHV0OwogICAgICB9OwogICAgICBAYXBwbHkgLS1wYXBlci1zbGlkZXItaW5wdXQ7CiAgICB9CgogICAgLyogZGlzYWJsZWQgc3RhdGUgKi8KICAgICNzbGlkZXJDb250YWluZXIuZGlzYWJsZWQgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuZGlzYWJsZWQgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLWtub2ItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAuNzUsIDAuNzUsIDEpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICB9CgogICAgLmRpc2FibGVkLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgcGFwZXItcmlwcGxlIHsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGlkPSJzbGlkZXJDb250YWluZXIiIGNsYXNzXCQ9IltbX2dldENsYXNzTmFtZXMoZGlzYWJsZWQsIHBpbiwgc25hcHMsIGltbWVkaWF0ZVZhbHVlLCBtaW4sIGV4cGFuZCwgZHJhZ2dpbmcsIHRyYW5zaXRpbmcsIGVkaXRhYmxlKV1dIj4KICAgIDxkaXYgY2xhc3M9ImJhci1jb250YWluZXIiPgogICAgICA8cGFwZXItcHJvZ3Jlc3MgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiBpZD0ic2xpZGVyQmFyIiBhcmlhLWhpZGRlbj0idHJ1ZSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIHN0ZXA9Iltbc3RlcF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBzZWNvbmRhcnktcHJvZ3Jlc3M9Iltbc2Vjb25kYXJ5UHJvZ3Jlc3NdXSIgb24tZG93bj0iX2JhcmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX2JhcnRyYWNrIiBvbi10YXA9Il9iYXJjbGljayI+CiAgICAgIDwvcGFwZXItcHJvZ3Jlc3M+CiAgICA8L2Rpdj4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc25hcHNdXSI+CiAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXJzIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW21hcmtlcnNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXItbWFya2VyIj48L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPGRpdiBpZD0ic2xpZGVyS25vYiIgY2xhc3M9InNsaWRlci1rbm9iIiBvbi1kb3duPSJfa25vYmRvd24iIG9uLXVwPSJfcmVzZXRLbm9iIiBvbi10cmFjaz0iX29uVHJhY2siIG9uLXRyYW5zaXRpb25lbmQ9Il9rbm9iVHJhbnNpdGlvbkVuZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLWtub2ItaW5uZXIiIHZhbHVlXCQ9IltbaW1tZWRpYXRlVmFsdWVdXSI+PC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VkaXRhYmxlXV0iPgogICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBzdGVwPSJbW3N0ZXBdXSIgbWluPSJbW21pbl1dIiBtYXg9IltbbWF4XV0iIGNsYXNzPSJzbGlkZXItaW5wdXQiIGRpc2FibGVkXCQ9IltbZGlzYWJsZWRdXSIgdmFsdWU9IltbaW1tZWRpYXRlVmFsdWVdXSIgb24tY2hhbmdlPSJfY2hhbmdlVmFsdWUiIG9uLWtleWRvd249Il9pbnB1dEtleURvd24iIG5vLWxhYmVsLWZsb2F0PgogICAgPC9wYXBlci1pbnB1dD4KICA8L3RlbXBsYXRlPgpgO1AwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlAwdCxpczoicGFwZXItc2xpZGVyIixiZWhhdmlvcnM6W09vLEVoLGp4LGs5XSxwcm9wZXJ0aWVzOnt2YWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sc25hcHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LHBpbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sc2Vjb25kYXJ5UHJvZ3Jlc3M6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkIn0sZWRpdGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW1tZWRpYXRlVmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxtYXhNYXJrZXJzOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sZXhwYW5kOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LGlnbm9yZUJhclRvdWNoOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRyYWdnaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSx0cmFuc2l0aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVhZE9ubHk6ITB9LG1hcmtlcnM6e3R5cGU6QXJyYXkscmVhZE9ubHk6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSxvYnNlcnZlcnM6WyJfdXBkYXRlS25vYih2YWx1ZSwgbWluLCBtYXgsIHNuYXBzLCBzdGVwKSIsIl92YWx1ZUNoYW5nZWQodmFsdWUpIiwiX2ltbWVkaWF0ZVZhbHVlQ2hhbmdlZChpbW1lZGlhdGVWYWx1ZSkiLCJfdXBkYXRlTWFya2VycyhtYXhNYXJrZXJzLCBtaW4sIG1heCwgc25hcHMpIl0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6InNsaWRlciIsdGFiaW5kZXg6MH0sa2V5QmluZGluZ3M6e2xlZnQ6Il9sZWZ0S2V5IixyaWdodDoiX3JpZ2h0S2V5IiwiZG93biBwYWdlZG93biBob21lIjoiX2RlY3JlbWVudEtleSIsInVwIHBhZ2V1cCBlbmQiOiJfaW5jcmVtZW50S2V5In0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLmlnbm9yZUJhclRvdWNoJiZkXyh0aGlzLiQuc2xpZGVyQmFyLCJhdXRvIil9LGluY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlK3RoaXMuc3RlcCl9LGRlY3JlbWVudDpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlLXRoaXMuc3RlcCl9LF91cGRhdGVLbm9iOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtaW4iLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWF4IixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW5vdyIsZSksdGhpcy5fcG9zaXRpb25Lbm9iKHRoaXMuX2NhbGNSYXRpbyhlKSoxMDApfSxfdmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5maXJlKCJ2YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pfSxfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kcmFnZ2luZz90aGlzLmZpcmUoImltbWVkaWF0ZS12YWx1ZS1jaGFuZ2UiLHtjb21wb3NlZDohMH0pOnRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZX0sX3NlY29uZGFyeVByb2dyZXNzQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnNlY29uZGFyeVByb2dyZXNzKX0sX2V4cGFuZEtub2I6ZnVuY3Rpb24oKXt0aGlzLl9zZXRFeHBhbmQoITApfSxfcmVzZXRLbm9iOmZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoImV4cGFuZEtub2IiKSx0aGlzLl9zZXRFeHBhbmQoITEpfSxfcG9zaXRpb25Lbm9iOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKHRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24oZSkpKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqMTAwKSx0aGlzLiQuc2xpZGVyS25vYi5zdHlsZS5sZWZ0PXRoaXMucmF0aW8rIiUiLHRoaXMuZHJhZ2dpbmcmJih0aGlzLl9rbm9ic3RhcnR4PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy50cmFuc2xhdGUzZCgwLDAsMCx0aGlzLiQuc2xpZGVyS25vYikpfSxfY2FsY0tub2JQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pKmUvMTAwK3RoaXMubWlufSxfb25UcmFjazpmdW5jdGlvbihlKXtzd2l0Y2goZS5zdG9wUHJvcGFnYXRpb24oKSxlLmRldGFpbC5zdGF0ZSl7Y2FzZSJzdGFydCI6dGhpcy5fdHJhY2tTdGFydChlKTticmVhaztjYXNlInRyYWNrIjp0aGlzLl90cmFja1goZSk7YnJlYWs7Y2FzZSJlbmQiOnRoaXMuX3RyYWNrRW5kKCk7YnJlYWt9fSxfdHJhY2tTdGFydDpmdW5jdGlvbihlKXt0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGgsdGhpcy5feD10aGlzLnJhdGlvKnRoaXMuX3cvMTAwLHRoaXMuX3N0YXJ0eD10aGlzLl94LHRoaXMuX2tub2JzdGFydHg9dGhpcy5fc3RhcnR4LHRoaXMuX21pbng9LXRoaXMuX3N0YXJ0eCx0aGlzLl9tYXh4PXRoaXMuX3ctdGhpcy5fc3RhcnR4LHRoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITApfSxfdHJhY2tYOmZ1bmN0aW9uKGUpe3RoaXMuZHJhZ2dpbmd8fHRoaXMuX3RyYWNrU3RhcnQoZSk7dmFyIHQ9dGhpcy5faXNSVEw/LTE6MSxyPU1hdGgubWluKHRoaXMuX21heHgsTWF0aC5tYXgodGhpcy5fbWlueCxlLmRldGFpbC5keCp0KSk7dGhpcy5feD10aGlzLl9zdGFydHgrcjt2YXIgbj10aGlzLl9jYWxjU3RlcCh0aGlzLl9jYWxjS25vYlBvc2l0aW9uKHRoaXMuX3gvdGhpcy5fdyoxMDApKTt0aGlzLl9zZXRJbW1lZGlhdGVWYWx1ZShuKTt2YXIgaT10aGlzLl9jYWxjUmF0aW8odGhpcy5pbW1lZGlhdGVWYWx1ZSkqdGhpcy5fdy10aGlzLl9rbm9ic3RhcnR4O3RoaXMudHJhbnNsYXRlM2QoaSsicHgiLDAsMCx0aGlzLiQuc2xpZGVyS25vYil9LF90cmFja0VuZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlO3RoaXMuJC5zbGlkZXJLbm9iLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy5fc2V0RHJhZ2dpbmcoITEpLHRoaXMuX3Jlc2V0S25vYigpLHRoaXMudmFsdWU9dGhpcy5pbW1lZGlhdGVWYWx1ZSxlLnRyYW5zZm9ybT1lLndlYmtpdFRyYW5zZm9ybT0iIix0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9rbm9iZG93bjpmdW5jdGlvbihlKXt0aGlzLl9leHBhbmRLbm9iKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcnRyYWNrOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJnRoaXMuX29uVHJhY2soZSl9LF9iYXJjbGljazpmdW5jdGlvbihlKXt0aGlzLl93PXRoaXMuJC5zbGlkZXJCYXIub2Zmc2V0V2lkdGg7dmFyIHQ9dGhpcy4kLnNsaWRlckJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPShlLmRldGFpbC54LXQubGVmdCkvdGhpcy5fdyoxMDA7dGhpcy5faXNSVEwmJihyPTEwMC1yKTt2YXIgbj10aGlzLnJhdGlvO3RoaXMuX3NldFRyYW5zaXRpbmcoITApLHRoaXMuX3Bvc2l0aW9uS25vYihyKSxuPT09dGhpcy5yYXRpbyYmdGhpcy5fc2V0VHJhbnNpdGluZyghMSksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0pLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzKCl9LF9iYXJkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2FsbG93QmFyRXZlbnQoZSkmJih0aGlzLmRlYm91bmNlKCJleHBhbmRLbm9iIix0aGlzLl9leHBhbmRLbm9iLDYwKSx0aGlzLl9iYXJjbGljayhlKSl9LF9rbm9iVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuJC5zbGlkZXJLbm9iJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKX0sX3VwZGF0ZU1hcmtlcnM6ZnVuY3Rpb24oZSx0LHIsbil7bnx8dGhpcy5fc2V0TWFya2VycyhbXSk7dmFyIGk9TWF0aC5yb3VuZCgoci10KS90aGlzLnN0ZXApO2k+ZSYmKGk9ZSksKGk8MHx8IWlzRmluaXRlKGkpKSYmKGk9MCksdGhpcy5fc2V0TWFya2VycyhuZXcgQXJyYXkoaSkpfSxfbWVyZ2VDbGFzc2VzOmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KS5qb2luKCIgIil9LF9nZXRDbGFzc05hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lcmdlQ2xhc3Nlcyh7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlZCxwaW46dGhpcy5waW4sc25hcHM6dGhpcy5zbmFwcyxyaW5nOnRoaXMuaW1tZWRpYXRlVmFsdWU8PXRoaXMubWluLGV4cGFuZDp0aGlzLmV4cGFuZCxkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLHRyYW5zaXRpbmc6dGhpcy50cmFuc2l0aW5nLGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9KX0sX2FsbG93QmFyRXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaWdub3JlQmFyVG91Y2h8fGUuZGV0YWlsLnNvdXJjZUV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0aGlzLl9faXNSVEw9PT12b2lkIDAmJih0aGlzLl9faXNSVEw9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX19pc1JUTH0sX2xlZnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5faW5jcmVtZW50S2V5KGUpOnRoaXMuX2RlY3JlbWVudEtleShlKX0sX3JpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2RlY3JlbWVudEtleShlKTp0aGlzLl9pbmNyZW1lbnRLZXkoZSl9LF9pbmNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJlbmQiP3RoaXMudmFsdWU9dGhpcy5tYXg6dGhpcy5pbmNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9kZWNyZW1lbnRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5kaXNhYmxlZHx8KGUuZGV0YWlsLmtleT09PSJob21lIj90aGlzLnZhbHVlPXRoaXMubWluOnRoaXMuZGVjcmVtZW50KCksdGhpcy5maXJlKCJjaGFuZ2UiKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfY2hhbmdlVmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy52YWx1ZT1lLnRhcmdldC52YWx1ZSx0aGlzLmZpcmUoImNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbnB1dEtleURvd246ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnNsaWRlcktub2IscEUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYoZT90aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0iIjp0aGlzLl9yaXBwbGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfX0pO3ZhciBNVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO01XLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO01XLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLXNwaW5uZXItc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAgLyogU1RZTEVTIEZPUiBUSEUgU1BJTk5FUiAqLwogICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogICAgICAvKgogICAgICAgKiBDb25zdGFudHM6CiAgICAgICAqICAgICAgQVJDU0laRSAgICAgPSAyNzAgZGVncmVlcyAoYW1vdW50IG9mIGNpcmNsZSB0aGUgYXJjIHRha2VzIHVwKQogICAgICAgKiAgICAgIEFSQ1RJTUUgICAgID0gMTMzM21zICh0aW1lIGl0IHRha2VzIHRvIGV4cGFuZCBhbmQgY29udHJhY3QgYXJjKQogICAgICAgKiAgICAgIEFSQ1NUQVJUUk9UID0gMjE2IGRlZ3JlZXMgKGhvdyBtdWNoIHRoZSBzdGFydCBsb2NhdGlvbiBvZiB0aGUgYXJjCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgcm90YXRlIGVhY2ggdGltZSwgMjE2IGdpdmVzIHVzIGEKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgcG9pbnRlZCBzdGFyIHNoYXBlIChpdCdzIDM2MC81ICogMykuCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgYSA3IHBvaW50ZWQgc3Rhciwgd2UgbWlnaHQgZG8KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM2MC83ICogMyA9IDE1NC4yODYpCiAgICAgICAqICAgICAgU0hSSU5LX1RJTUUgPSA0MDBtcwogICAgICAgKi8KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKCiAgICAgICAgLyogMzYwICogQVJDVElNRSAvIChBUkNTVEFSVFJPVCArICgzNjAtQVJDU0laRSkpICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbjogMTU2OG1zOwoKICAgICAgICAvKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbjogMTMzM21zOwoKICAgICAgICAvKiA0ICogQVJDVElNRSAqLwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uOiA1MzMybXM7CgogICAgICAgIC8qIFNIUklOS19USU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uOiA0MDBtczsKICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKCiAgICAgICAgLyogVGhlIHNwaW5uZXIgZG9lcyBub3QgaGF2ZSBhbnkgY29udGVudHMgdGhhdCB3b3VsZCBoYXZlIHRvIGJlCiAgICAgICAgICogZmxpcHBlZCBpZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMuIEFsd2F5cyB1c2UgbHRyIHNvIHRoYXQgdGhlCiAgICAgICAgICogc3R5bGUgd29ya3Mgb3V0IGNvcnJlY3RseSBpbiBib3RoIGNhc2VzLiAqLwogICAgICAgIGRpcmVjdGlvbjogbHRyOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5hY3RpdmUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgY29udGFpbmVyLXJvdGF0ZSB7CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTEgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTEtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMiB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMi1jb2xvciwgdmFyKC0tZ29vZ2xlLXJlZC01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTMgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTMtY29sb3IsIHZhcigtLWdvb2dsZS15ZWxsb3ctNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci00IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci00LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBJTVBPUlRBTlQgTk9URSBBQk9VVCBDU1MgQU5JTUFUSU9OIFBST1BFUlRJRVMgKGtlYW51bGVlKToKICAgICAgICoKICAgICAgICogaU9TIFNhZmFyaSAodGVzdGVkIG9uIGlPUyA4LjEpIGRvZXMgbm90IGhhbmRsZSBhbmltYXRpb24tZGVsYXkgdmVyeSB3ZWxsIC0gaXQgZG9lc24ndAogICAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGUgYW5pbWF0aW9uIHdpbGwgc3RhcnQgX2V4YWN0bHlfIGFmdGVyIHRoYXQgdmFsdWUuIFNvIHdlIGF2b2lkIHVzaW5nCiAgICAgICAqIGFuaW1hdGlvbi1kZWxheSBhbmQgaW5zdGVhZCBzZXQgY3VzdG9tIGtleWZyYW1lcyBmb3IgZWFjaCBjb2xvciAoYXMgbGF5ZXItMnVuZGFudCBhcyBpdAogICAgICAgKiBzZWVtcykuCiAgICAgICAqLwogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZnVsbC1jeWNsZS1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0xIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTEtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0yIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTItZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci0zIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTMtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgLmFjdGl2ZSAuc3Bpbm5lci1sYXllci5sYXllci00IHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGUsIGxheWVyLTQtZmFkZS1pbi1vdXQ7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgfSAvKiAxICAgKiBBUkNTSVpFICovCiAgICAgICAgMzcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDY3NWRlZykgfSAvKiAyLjUgKiBBUkNTSVpFICovCiAgICAgICAgNzUlICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEwODBkZWcpIH0gLyogNCAgICogQVJDU0laRSAqLwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZpbGwtdW5maWxsLXJvdGF0ZSB7CiAgICAgICAgMTIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzVkZWcpIH0gLyogMC41ICogQVJDU0laRSAqLwogICAgICAgIDI1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IHRyYW5zZm9ybTogcm90YXRlKDQwNWRlZykgfSAvKiAxLjUgKiBBUkNTSVpFICovCiAgICAgICAgNTAlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSg1NDBkZWcpIH0gLyogMiAgICogQVJDU0laRSAqLwogICAgICAgIDYyLjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IHRyYW5zZm9ybTogcm90YXRlKDgxMGRlZykgfSAvKiAzICAgKiBBUkNTSVpFICovCiAgICAgICAgODcuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg5NDVkZWcpIH0gLyogMy41ICogQVJDU0laRSAqLwogICAgICAgIHRvICAgIHsgdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMS1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICAyNiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA4OSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDEgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTItZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMTUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNTElIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0zLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDQwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDc2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItNC1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA2NSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA5MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFBhdGNoIHRoZSBnYXAgdGhhdCBhcHBlYXIgYmV0d2VlbiB0aGUgdHdvIGFkamFjZW50IGRpdi5jaXJjbGUtY2xpcHBlciB3aGlsZSB0aGUKICAgICAgICogc3Bpbm5lciBpcyByb3RhdGluZyAoYXBwZWFycyBvbiBDaHJvbWUgNTAsIFNhZmFyaSA5LjEuMSwgYW5kIEVkZ2UpLgogICAgICAgKi8KICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBsZWZ0OiA0NSU7CiAgICAgICAgd2lkdGg6IDEwJTsKICAgICAgICBib3JkZXItdG9wLXN0eWxlOiBzb2xpZDsKICAgICAgfQoKICAgICAgLnNwaW5uZXItbGF5ZXI6OmFmdGVyLAogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvcmRlci13aWR0aDogdmFyKC0tcGFwZXItc3Bpbm5lci1zdHJva2Utd2lkdGgsIDNweCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIgLmNpcmNsZSB7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAyMDAlOwogICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAtMTAwJTsKICAgICAgICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC0xMjlkZWcpOwogICAgICB9CgogICAgICAuYWN0aXZlIC5nYXAtcGF0Y2g6OmFmdGVyLAogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1leHBhbmQtY29udHJhY3QtZHVyYXRpb24pOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5sZWZ0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGxlZnQtc3BpbjsKICAgICAgICBhbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICB9CgogICAgICAuYWN0aXZlIC5jaXJjbGUtY2xpcHBlci5yaWdodCAuY2lyY2xlIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiByaWdodC1zcGluOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGVmdC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHJpZ2h0LXNwaW4gewogICAgICAgIDAlIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogcm90YXRlKDVkZWcpIH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKC0xMzBkZWcpIH0KICAgICAgfQoKICAgICAgI3NwaW5uZXJDb250YWluZXIuY29vbGRvd24gewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBjb250YWluZXItcm90YXRlIHZhcigtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uKSBsaW5lYXIgaW5maW5pdGUsIGZhZGUtb3V0IHZhcigtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb24pIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTVcuY29udGVudCk7dmFyIEQ5PXtwcm9wZXJ0aWVzOnthY3RpdmU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9fYWN0aXZlQ2hhbmdlZCJ9LGFsdDp7dHlwZTpTdHJpbmcsdmFsdWU6ImxvYWRpbmciLG9ic2VydmVyOiJfX2FsdENoYW5nZWQifSxfX2Nvb2xpbmdEb3duOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuW2V8fHQ/ImFjdGl2ZSI6IiIsdD8iY29vbGRvd24iOiIiXS5qb2luKCIgIil9LF9fYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX19zZXRBcmlhSGlkZGVuKCFlKSx0aGlzLl9fY29vbGluZ0Rvd249IWUmJnR9LF9fYWx0Q2hhbmdlZDpmdW5jdGlvbihlKXtlPT09ImxvYWRpbmciP3RoaXMuYWx0PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIil8fGU6KHRoaXMuX19zZXRBcmlhSGlkZGVuKGU9PT0iIiksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpKX0sX19zZXRBcmlhSGlkZGVuOmZ1bmN0aW9uKGUpe3ZhciB0PSJhcmlhLWhpZGRlbiI7ZT90aGlzLnNldEF0dHJpYnV0ZSh0LCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9LF9fcmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT0hMSx0aGlzLl9fY29vbGluZ0Rvd249ITF9fTt2YXIgSTB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMSI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0zIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItNCI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDtJMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpJMHQsaXM6InBhcGVyLXNwaW5uZXIiLGJlaGF2aW9yczpbRDldfSk7dmFyIEwwdD1RYAogIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1zcGlubmVyLXN0eWxlcyI+PC9zdHlsZT4KCiAgPGRpdiBpZD0ic3Bpbm5lckNvbnRhaW5lciIgY2xhc3MtbmFtZT0iW1tfX2NvbXB1dGVDb250YWluZXJDbGFzc2VzKGFjdGl2ZSwgX19jb29saW5nRG93bildXSIgb24tYW5pbWF0aW9uZW5kPSJfX3Jlc2V0IiBvbi13ZWJraXQtYW5pbWF0aW9uLWVuZD0iX19yZXNldCI+CiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO0wwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkwwdCxpczoicGFwZXItc3Bpbm5lci1saXRlIixiZWhhdmlvcnM6W0Q5XX0pO3ZhciBxYmU9UWA8aXJvbi1pY29uc2V0LXN2ZyBuYW1lPSJwYXBlci10YWJzIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJjaGV2cm9uLWxlZnQiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZXZyb24tcmlnaHQiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChxYmUuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWI7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtsaW5rXSkgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoLmlyb24tc2VsZWN0ZWQpKSA+IC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMC44OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC11bnNlbGVjdGVkOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIC50YWItY29udGVudCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBmb250LXdlaWdodDogNzAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudC1mb2N1c2VkOwogICAgICB9CgogICAgICBwYXBlci1yaXBwbGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10YWItaW5rLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICB9CgogICAgICAudGFiLWNvbnRlbnQgPiA6OnNsb3R0ZWQoYSkgewogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CgogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10YWIiLGJlaGF2aW9yczpbRGksU2gsc3VdLHByb3BlcnRpZXM6e2xpbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFiIn0sbGlzdGVuZXJzOntkb3duOiJfdXBkYXRlTm9pbmsiLHRhcDoiX29uVGFwIn0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVOb2luaygpfSxnZXQgX3BhcmVudE5vaW5rKCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4hIWUmJiEhZS5ub2lua30sX3VwZGF0ZU5vaW5rOmZ1bmN0aW9uKCl7dGhpcy5ub2luaz0hIXRoaXMubm9pbmt8fCEhdGhpcy5fcGFyZW50Tm9pbmt9LF9vblRhcDpmdW5jdGlvbihlKXtpZih0aGlzLmxpbmspe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiYSIpO2lmKCF0fHxlLnRhcmdldD09PXQpcmV0dXJuO3QuY2xpY2soKX19fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0OwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CgogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgICAgIC8qIE5PVEU6IEJvdGggdmFsdWVzIGFyZSBuZWVkZWQsIHNpbmNlIHNvbWUgcGhvbmVzIHJlcXVpcmUgdGhlIHZhbHVlIHRvIGJlIFxgdHJhbnNwYXJlbnRcYC4gKi8KICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7CiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFiczsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWwtcmV2ZXJzZTsKICAgICAgfQoKICAgICAgI3RhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4LWF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250YWluZXI7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC1tb3otZmxleC1iYXNpczogYXV0bzsKICAgICAgICAtbXMtZmxleC1iYXNpczogYXV0bzsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYnMtY29udGVudDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQ6bm90KC5zY3JvbGxhYmxlKSwKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudC5zY3JvbGxhYmxlLmZpdC1jb250YWluZXIgewogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgLyogSUUgLSBwcmV2ZW50IHRhYnMgZnJvbSBjb21wcmVzc2luZyB3aGVuIHRoZXkgc2hvdWxkIHNjcm9sbC4gKi8KICAgICAgICAtbXMtZmxleDogMSAwIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDAgYXV0bzsKICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgfQoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLm5vdC12aXNpYmxlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXRhYnMtc2VsZWN0aW9uLWJhci1jb2xvciwgdmFyKC0tcGFwZXIteWVsbG93LWExMDApKTsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmFsaWduLWJvdHRvbSB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhci5leHBhbmQgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMTVzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmNvbnRyYWN0IHsKICAgICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE4czsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQgPiA6OnNsb3R0ZWQoOm5vdCgjc2VsZWN0aW9uQmFyKSkgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLWxlZnQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9sZWZ0SGlkZGVuLCBzY3JvbGxhYmxlLCBoaWRlU2Nyb2xsQnV0dG9ucyldXSIgb24tdXA9Il9vblNjcm9sbEJ1dHRvblVwIiBvbi1kb3duPSJfb25MZWZ0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgoKICAgIDxkaXYgaWQ9InRhYnNDb250YWluZXIiIG9uLXRyYWNrPSJfc2Nyb2xsIiBvbi1kb3duPSJfZG93biI+CiAgICAgIDxkaXYgaWQ9InRhYnNDb250ZW50IiBjbGFzcyQ9IltbX2NvbXB1dGVUYWJzQ29udGVudENsYXNzKHNjcm9sbGFibGUsIGZpdENvbnRhaW5lcildXSI+CiAgICAgICAgPGRpdiBpZD0ic2VsZWN0aW9uQmFyIiBjbGFzcyQ9IltbX2NvbXB1dGVTZWxlY3Rpb25CYXJDbGFzcyhub0JhciwgYWxpZ25Cb3R0b20pXV0iIG9uLXRyYW5zaXRpb25lbmQ9Il9vbkJhclRyYW5zaXRpb25FbmQiPjwvZGl2PgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8cGFwZXItaWNvbi1idXR0b24gaWNvbj0icGFwZXItdGFiczpjaGV2cm9uLXJpZ2h0IiBjbGFzcyQ9IltbX2NvbXB1dGVTY3JvbGxCdXR0b25DbGFzcyhfcmlnaHRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93biIgdGFiaW5kZXg9Ii0xIj48L3BhcGVyLWljb24tYnV0dG9uPgpgLGlzOiJwYXBlci10YWJzIixiZWhhdmlvcnM6W0pzLE45XSxwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sbm9CYXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sbm9TbGlkZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzY3JvbGxhYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZpdENvbnRhaW5lcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxkaXNhYmxlRHJhZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRlU2Nyb2xsQnV0dG9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhbGlnbkJvdHRvbTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItdGFiIn0sYXV0b3NlbGVjdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvc2VsZWN0RGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF9zdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxMH0sX2hvbGREZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MX0sX2xlZnRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3JpZ2h0SGlkZGVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9wcmV2aW91c1RhYjp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToidGFibGlzdCJ9LGxpc3RlbmVyczp7Imlyb24tcmVzaXplIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24taXRlbXMtY2hhbmdlZCI6Il9vblRhYlNpemluZ0NoYW5nZWQiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QiLCJpcm9uLWRlc2VsZWN0IjoiX29uSXJvbkRlc2VsZWN0In0sa2V5QmluZGluZ3M6eyJsZWZ0OmtleXVwIHJpZ2h0OmtleXVwIjoiX29uQXJyb3dLZXl1cCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9ob2xkSm9iPW51bGwsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI9dGhpcy5fZGVsYXllZEFjdGl2YXRpb25IYW5kbGVyLmJpbmQodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9vbkJsdXJDYXB0dXJlLmJpbmQodGhpcyksITApfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2V0U2Nyb2xsRGlyZWN0aW9uKCJ5Iix0aGlzLiQudGFic0NvbnRhaW5lcil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sX25vaW5rQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD16dCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci10YWIiKTt0LmZvckVhY2goZT90aGlzLl9zZXROb2lua0F0dHJpYnV0ZTp0aGlzLl9yZW1vdmVOb2lua0F0dHJpYnV0ZSl9LF9zZXROb2lua0F0dHJpYnV0ZTpmdW5jdGlvbihlKXtlLnNldEF0dHJpYnV0ZSgibm9pbmsiLCIiKX0sX3JlbW92ZU5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2UucmVtb3ZlQXR0cmlidXRlKCJub2luayIpfSxfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hdHx8cj8iaGlkZGVuIjplPyJub3QtdmlzaWJsZSI6IiJ9LF9jb21wdXRlVGFic0NvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQpe3JldHVybiBlPyJzY3JvbGxhYmxlIisodD8iIGZpdC1jb250YWluZXIiOiIiKToiIGZpdC1jb250YWluZXIifSxfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ImhpZGRlbiI6dD8iYWxpZ24tYm90dG9tIjoiIn0sX29uVGFiU2l6aW5nQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuZGVib3VuY2UoIl9vblRhYlNpemluZ0NoYW5nZWQiLGZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsKCksdGhpcy5fdGFiQ2hhbmdlZCh0aGlzLnNlbGVjdGVkSXRlbSl9LDEwKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl90YWJDaGFuZ2VkKGUuZGV0YWlsLml0ZW0sdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPWUuZGV0YWlsLml0ZW0sdGhpcy5jYW5jZWxEZWJvdW5jZXIoInRhYi1jaGFuZ2VkIil9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmRlYm91bmNlKCJ0YWItY2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl90YWJDaGFuZ2VkKG51bGwsdGhpcy5fcHJldmlvdXNUYWIpLHRoaXMuX3ByZXZpb3VzVGFiPW51bGx9LDEpfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKSxfXy5fYWN0aXZhdGVIYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3NjaGVkdWxlQWN0aXZhdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT1lLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD10aGlzLmFzeW5jKHRoaXMuX2JpbmREZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIsdCl9LF9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW07dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPXZvaWQgMCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQ9dm9pZCAwLGUuZmlyZSh0aGlzLmFjdGl2YXRlRXZlbnQsbnVsbCx7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSl9LF9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbjpmdW5jdGlvbigpe3RoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dCE9PXZvaWQgMCYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0KSx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDApfSxfb25BcnJvd0tleXVwOmZ1bmN0aW9uKGUpe3RoaXMuYXV0b3NlbGVjdCYmdGhpcy5fc2NoZWR1bGVBY3RpdmF0aW9uKHRoaXMuZm9jdXNlZEl0ZW0sdGhpcy5hdXRvc2VsZWN0RGVsYXkpfSxfb25CbHVyQ2FwdHVyZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbSYmdGhpcy5fY2FuY2VsUGVuZGluZ0FjdGl2YXRpb24oKX0sZ2V0IF90YWJDb250YWluZXJTY3JvbGxTaXplKCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsV2lkdGgtdGhpcy4kLnRhYnNDb250YWluZXIub2Zmc2V0V2lkdGgpfSxfc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7aWYoISF0aGlzLnNjcm9sbGFibGUpe3ZhciByPXQmJi10LmRkeHx8MDt0aGlzLl9hZmZlY3RTY3JvbGwocil9fSxfZG93bjpmdW5jdGlvbihlKXt0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKX0sMSl9LF9hZmZlY3RTY3JvbGw6ZnVuY3Rpb24oZSl7dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9ZTt2YXIgdD10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3RoaXMuX2xlZnRIaWRkZW49dD09PTAsdGhpcy5fcmlnaHRIaWRkZW49dD09PXRoaXMuX3RhYkNvbnRhaW5lclNjcm9sbFNpemV9LF9vbkxlZnRTY3JvbGxCdXR0b25Eb3duOmZ1bmN0aW9uKCl7dGhpcy5fc2Nyb2xsVG9MZWZ0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb0xlZnQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25SaWdodFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb1JpZ2h0KCksdGhpcy5faG9sZEpvYj1zZXRJbnRlcnZhbCh0aGlzLl9zY3JvbGxUb1JpZ2h0LmJpbmQodGhpcyksdGhpcy5faG9sZERlbGF5KX0sX29uU2Nyb2xsQnV0dG9uVXA6ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKHRoaXMuX2hvbGRKb2IpLHRoaXMuX2hvbGRKb2I9bnVsbH0sX3Njcm9sbFRvTGVmdDpmdW5jdGlvbigpe3RoaXMuX2FmZmVjdFNjcm9sbCgtdGhpcy5fc3RlcCl9LF9zY3JvbGxUb1JpZ2h0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKHRoaXMuX3N0ZXApfSxfdGFiQ2hhbmdlZDpmdW5jdGlvbihlLHQpe2lmKCFlKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcigwLDApO3JldHVybn12YXIgcj10aGlzLiQudGFic0NvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWkubGVmdC1yLmxlZnQ7aWYodGhpcy5fcG9zPXt3aWR0aDp0aGlzLl9jYWxjUGVyY2VudChpLndpZHRoLG4pLGxlZnQ6dGhpcy5fY2FsY1BlcmNlbnQobyxuKX0sdGhpcy5ub1NsaWRlfHx0PT1udWxsKXt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5yZW1vdmUoImV4cGFuZCIpLHRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpO3JldHVybn12YXIgYT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9dGhpcy5pdGVtcy5pbmRleE9mKHQpLGw9dGhpcy5pdGVtcy5pbmRleE9mKGUpLGM9NTt0aGlzLiQuc2VsZWN0aW9uQmFyLmNsYXNzTGlzdC5hZGQoImV4cGFuZCIpO3ZhciB1PXM8bCxoPXRoaXMuX2lzUlRMO2gmJih1PSF1KSx1P3RoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGkubGVmdCtpLndpZHRoLWEubGVmdCxuKS1jLHRoaXMuX2xlZnQpOnRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX2NhbGNQZXJjZW50KGEubGVmdCthLndpZHRoLWkubGVmdCxuKS1jLHRoaXMuX2NhbGNQZXJjZW50KG8sbikrYyksdGhpcy5zY3JvbGxhYmxlJiZ0aGlzLl9zY3JvbGxUb1NlbGVjdGVkSWZOZWVkZWQoaS53aWR0aCxvKX0sX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZDpmdW5jdGlvbihlLHQpe3ZhciByPXQtdGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdDtyPDA/dGhpcy4kLnRhYnNDb250YWluZXIuc2Nyb2xsTGVmdCs9cjoocis9ZS10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCxyPjAmJih0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yKSl9LF9jYWxjUGVyY2VudDpmdW5jdGlvbihlLHQpe3JldHVybiAxMDAqZS90fSxfcG9zaXRpb25CYXI6ZnVuY3Rpb24oZSx0KXtlPWV8fDAsdD10fHwwLHRoaXMuX3dpZHRoPWUsdGhpcy5fbGVmdD10LHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGVYKCIrdCsiJSkgc2NhbGVYKCIrZS8xMDArIikiLHRoaXMuJC5zZWxlY3Rpb25CYXIpfSxfb25CYXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0O3QuY29udGFpbnMoImV4cGFuZCIpPyh0LnJlbW92ZSgiZXhwYW5kIiksdC5hZGQoImNvbnRyYWN0IiksdGhpcy5fcG9zaXRpb25CYXIodGhpcy5fcG9zLndpZHRoLHRoaXMuX3Bvcy5sZWZ0KSk6dC5jb250YWlucygiY29udHJhY3QiKSYmdC5yZW1vdmUoImNvbnRyYWN0Iil9fSk7dmFyIEp4PW51bGw7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWJhY2tncm91bmQtY29sb3IsICMzMjMyMzIpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2FzdC1jb2xvciwgI2YxZjFmMSk7CiAgICAgICAgbWluLWhlaWdodDogNDhweDsKICAgICAgICBtaW4td2lkdGg6IDI4OHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4yNik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG1hcmdpbjogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDBweCk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdCguY2Fwc3VsZSkgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KC5maXQtYm90dG9tKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCgucGFwZXItdG9hc3Qtb3BlbikgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGFiZWwiPnt7dGV4dH19PC9zcGFuPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci10b2FzdCIsYmVoYXZpb3JzOltLeF0scHJvcGVydGllczp7Zml0SW50bzp7dHlwZTpPYmplY3QsdmFsdWU6d2luZG93LG9ic2VydmVyOiJfb25GaXRJbnRvQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToiYm90dG9tIn0sZHVyYXRpb246e3R5cGU6TnVtYmVyLHZhbHVlOjNlM30sdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH0sbm9BdXRvRm9jdXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX19vblRyYW5zaXRpb25FbmQifSxnZXQgdmlzaWJsZSgpe3JldHVybiBEYS5fd2FybigiYHZpc2libGVgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgb3BlbmVkYCBpbnN0ZWFkIiksdGhpcy5vcGVuZWR9LGdldCBfY2FuQXV0b0Nsb3NlKCl7cmV0dXJuIHRoaXMuZHVyYXRpb24+MCYmdGhpcy5kdXJhdGlvbiE9PTEvMH0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZT1udWxsLGVjLnJlcXVlc3RBdmFpbGFiaWxpdHkoKX0sc2hvdzpmdW5jdGlvbihlKXt0eXBlb2YgZT09InN0cmluZyImJihlPXt0ZXh0OmV9KTtmb3IodmFyIHQgaW4gZSl0LmluZGV4T2YoIl8iKT09PTA/RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIHByaXZhdGUgYW5kIHdhcyBub3Qgc2V0LicpOnQgaW4gdGhpcz90aGlzW3RdPWVbdF06RGEuX3dhcm4oJ1RoZSBwcm9wZXJ0eSAiJyt0KyciIGlzIG5vdCB2YWxpZC4nKTt0aGlzLm9wZW4oKX0saGlkZTpmdW5jdGlvbigpe3RoaXMuY2xvc2UoKX0sX19vblRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7ZSYmZS50YXJnZXQ9PT10aGlzJiZlLnByb3BlcnR5TmFtZT09PSJvcGFjaXR5IiYmKHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLl9hdXRvQ2xvc2UhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9hdXRvQ2xvc2UpLHRoaXMuX2F1dG9DbG9zZT1udWxsKSx0aGlzLm9wZW5lZD8oSngmJkp4IT09dGhpcyYmSnguY2xvc2UoKSxKeD10aGlzLHRoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6dGhpcy50ZXh0fSksdGhpcy5fY2FuQXV0b0Nsb3NlJiYodGhpcy5fYXV0b0Nsb3NlPXRoaXMuYXN5bmModGhpcy5jbG9zZSx0aGlzLmR1cmF0aW9uKSkpOkp4PT09dGhpcyYmKEp4PW51bGwpLFBtLl9vcGVuZWRDaGFuZ2VkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMuY2xhc3NMaXN0LmFkZCgicGFwZXItdG9hc3Qtb3BlbiIpfSxfcmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJwYXBlci10b2FzdC1vcGVuIil9LF9vbkZpdEludG9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMucG9zaXRpb25UYXJnZXQ9ZX19KTt2YXIgazB0PVFgCgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdCg6Zm9jdXMpIHsKICAgICAgICBvdXRsaW5lOm5vbmU7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXItY29sb3IsICMwMDAwMDApOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1iYXI7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAtM3B4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIGxpbmVhciAuMDhzLCBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTUwKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24uZHJhZ2dpbmcgewogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJhciB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1iYXItY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMDA7CiAgICAgICAgb3BhY2l0eTogMC4xMjsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxNnB4LCAwKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdOm5vdChbZGlzYWJsZWRdKSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiZGJkYmQ7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmsgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0xNHB4OwogICAgICAgIGxlZnQ6IC0xNHB4OwogICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgIGJvdHRvbTogYXV0bzsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtaW5rLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbms7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICAvKiBUaGUgdG9nZ2xlIGJ1dHRvbiBoYXMgYW4gYWJzb2x1dGUgcG9zaXRpb24gb2YgLTNweDsgVGhlIGV4dHJhIDFweAogICAgICAgIC8qIGFjY291bnRzIGZvciB0aGUgdG9nZ2xlIGJ1dHRvbiBzaGFkb3cgYm94LiAqLwogICAgICAgIG1hcmdpbjogNHB4IDFweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sYWJlbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIHBhZGRpbmctbGVmdDogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1sYWJlbC1zcGFjaW5nLCA4cHgpOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgLyogaW52YWxpZCBzdGF0ZSAqLwogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYmFyLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtYnV0dG9uLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pIC50b2dnbGUtaW5rIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1pbnZhbGlkLWluay1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtY29udGFpbmVyIj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQmFyIiBjbGFzcz0idG9nZ2xlLWJhciI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InRvZ2dsZUJ1dHRvbiIgY2xhc3M9InRvZ2dsZS1idXR0b24iPjwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0idG9nZ2xlLWxhYmVsIj48c2xvdD48L3Nsb3Q+PC9kaXY+CgogIGA7azB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6azB0LGlzOiJwYXBlci10b2dnbGUtYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToiYnV0dG9uIiwiYXJpYS1wcmVzc2VkIjoiZmFsc2UiLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e30sbGlzdGVuZXJzOnt0cmFjazoiX29udHJhY2sifSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXtkXyh0aGlzLCJwYW4teSIpfSl9LF9vbnRyYWNrOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsO3Quc3RhdGU9PT0ic3RhcnQiP3RoaXMuX3RyYWNrU3RhcnQodCk6dC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fdHJhY2tNb3ZlKHQpOnQuc3RhdGU9PT0iZW5kIiYmdGhpcy5fdHJhY2tFbmQodCl9LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3dpZHRoPXRoaXMuJC50b2dnbGVCYXIub2Zmc2V0V2lkdGgvMix0aGlzLl90cmFja0NoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuJC50b2dnbGVCdXR0b24uY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKX0sX3RyYWNrTW92ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmR4O3RoaXMuX3g9TWF0aC5taW4odGhpcy5fd2lkdGgsTWF0aC5tYXgoMCx0aGlzLl90cmFja0NoZWNrZWQ/dGhpcy5fd2lkdGgrdDp0KSksdGhpcy50cmFuc2xhdGUzZCh0aGlzLl94KyJweCIsMCwwLHRoaXMuJC50b2dnbGVCdXR0b24pLHRoaXMuX3VzZXJBY3RpdmF0ZSh0aGlzLl94PnRoaXMuX3dpZHRoLzIpfSxfdHJhY2tFbmQ6ZnVuY3Rpb24oZSl7dGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpLHRoaXMudHJhbnNmb3JtKCIiLHRoaXMuJC50b2dnbGVCdXR0b24pfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5fcmlwcGxlQ29udGFpbmVyPXRoaXMuJC50b2dnbGVCdXR0b247dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJyZWNlbnRlcnMiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIsInRvZ2dsZS1pbmsiKSxlfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1oZWlnaHQsIDY0cHgpOwogICAgICAgIC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodDogdmFyKC0tcGFwZXItdG9vbGJhci1zbS1oZWlnaHQsIDU2cHgpOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXRvb2xiYXItYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sYmFyLWNvbG9yLCB2YXIoLS1kYXJrLXRoZW1lLXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyOwogICAgICB9CgogICAgICA6aG9zdCguYW5pbWF0ZSkgewogICAgICAgIHRyYW5zaXRpb246IHZhcigtLXBhcGVyLXRvb2xiYXItdHJhbnNpdGlvbiwgaGVpZ2h0IDAuMThzIGVhc2UtaW4pOwogICAgICB9CgogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAyKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLW1lZGl1bTsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICBoZWlnaHQ6IGNhbGModmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCkgKiAzKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLXRhbGw7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sYmFyLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIFRPRE86IFdoZXJlIHNob3VsZCBtZWRpYSBxdWVyeSBicmVha3BvaW50cyBsaXZlIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGVsZW1lbnRzPwogICAgICAgKi8KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgewogICAgICAgIDpob3N0IHsKICAgICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLXNtLWhlaWdodCk7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgubWVkaXVtLXRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDIpOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoLnRhbGwpIHsKICAgICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KSAqIDMpOwogICAgICAgIH0KCiAgICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICN0b3BCYXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLyogbWlkZGxlIGJhciAqLwogICAgICAjbWlkZGxlQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC50YWxsKSAjbWlkZGxlQmFyLAogICAgICA6aG9zdCgubWVkaXVtLXRhbGwpICNtaWRkbGVCYXIgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTsKICAgICAgfQoKICAgICAgLyogYm90dG9tIGJhciAqLwogICAgICAjYm90dG9tQmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1ha2UgZWxlbWVudHMgKGUuZy4gYnV0dG9ucykgcmVzcG9uZCB0byBtb3VzZS90b3VjaCBldmVudHMKICAgICAgICoKICAgICAgICogXGAudG9vbGJhci10b29sc1xgIGRpc2FibGVzIHRvdWNoIGV2ZW50cyBzbyBtdWx0aXBsZSB0b29sYmFycyBjYW4gc3RhY2sgYW5kIG5vdAogICAgICAgKiBhYnNvcmIgZXZlbnRzLiBBbGwgY2hpbGRyZW4gbXVzdCBoYXZlIHBvaW50ZXIgZXZlbnRzIHJlLWVuYWJsZWQgdG8gd29yayBhcwogICAgICAgKiBleHBlY3RlZC4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKCo6bm90KFtkaXNhYmxlZF0pKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZCgudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogNTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b24gKyAudGl0bGUpIHsKICAgICAgICBtYXJnaW4tbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIFRoZSAtLXBhcGVyLXRvb2xiYXItdGl0bGUgbWl4aW4gaXMgYXBwbGllZCBoZXJlIGluc3RlYWQgb2YgYWJvdmUgdG8KICAgICAgICogZml4IHRoZSBpc3N1ZSB3aXRoIG1hcmdpbi1sZWZ0IGJlaW5nIGlnbm9yZWQgZHVlIHRvIGNzcyBvcmRlcmluZy4KICAgICAgICovCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGl0bGU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKHBhcGVyLWljb24tYnV0dG9uW2ljb249bWVudV0pIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLyogVE9ETyhub21zKTogVW50aWwgd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiBmb3IgY2xhc3NlcyB0aGF0IGRvbid0IHVzZQogICAgICAgKiAvZGVlcC8gY3JlYXRlIG91ciBvd24uCiAgICAgICAqLwogICAgICAuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuY2VudGVyLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5lbmQtanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmFyb3VuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1hcm91bmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtanVzdGlmaWVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvcEJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJ0b3AiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im1pZGRsZUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKG1pZGRsZUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJtaWRkbGUiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImJvdHRvbUJhciIgY2xhc3NcJD0idG9vbGJhci10b29scyBbW19jb21wdXRlQmFyRXh0cmFDbGFzc2VzKGJvdHRvbUp1c3RpZnkpXV0iPgogICAgICA8c2xvdCBuYW1lPSJib3R0b20iPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sYmFyIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbGJhciJ9LHByb3BlcnRpZXM6e2JvdHRvbUp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxqdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbWlkZGxlSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxyZWFkeTpmdW5jdGlvbigpe2NvbnNvbGUud2Fybih0aGlzLmlzLCJpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIGFwcC1sYXlvdXQgaW5zdGVhZCEiKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlKHRoaXMpLHRoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKX0sX29ic2VydmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBcmlhTGFiZWxsZWRCeSgpfS5iaW5kKHRoaXMpKTtyZXR1cm4gdC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdH0sX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5OmZ1bmN0aW9uKCl7Y2koKTtmb3IodmFyIGU9W10sdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh6dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3JBbGwoInNsb3QiKSkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgiY29udGVudCIpKSkscixuPTA7cj10W25dO24rKylmb3IodmFyIGk9enQocikuZ2V0RGlzdHJpYnV0ZWROb2RlcygpLG8sYT0wO289aVthXTthKyspaWYoby5jbGFzc0xpc3QmJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJ0aXRsZSIpKWlmKG8uaWQpZS5wdXNoKG8uaWQpO2Vsc2V7dmFyIHM9InBhcGVyLXRvb2xiYXItbGFiZWwtIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMWU0KTtvLmlkPXMsZS5wdXNoKHMpfWUubGVuZ3RoPjAmJnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUuam9pbigiICIpKX0sX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZSsoZT09PSJqdXN0aWZpZWQiPyIiOiItanVzdGlmaWVkIik6IiJ9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTAwMjsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC1iYWNrZ3JvdW5kLCAjNjE2MTYxKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItdG9vbHRpcC10ZXh0LWNvbG9yLCB3aGl0ZSk7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2NhbGVVcCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZURvd24gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZUluT3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lRmFkZU91dE9wYWNpdHkgewogICAgICAgIDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bkluIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTbGlkZURvd25PdXQgewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgICAgMTAlIHsKICAgICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLmZhZGUtaW4tYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVJbk9wYWNpdHk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuZmFkZS1vdXQtYW5pbWF0aW9uIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1wYXBlci10b29sdGlwLW9wYWNpdHksIDAuOSk7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVGYWRlT3V0T3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtdXAtYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZVVwOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24taW4sIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNjYWxlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2NhbGVEb3duOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zbGlkZS1kb3duLWFuaW1hdGlvbiB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAwcHgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNsaWRlRG93bkluOwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uLW91dCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duT3V0OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5jYW5jZWwtYW5pbWF0aW9uIHsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IC0zMHMgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLyogVGhhbmtzIElFIDEwLiAqLwoKICAgICAgLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRvb2x0aXAiIGNsYXNzPSJoaWRkZW4iPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItdG9vbHRpcCIsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6InRvb2x0aXAiLHRhYmluZGV4Oi0xfSxwcm9wZXJ0aWVzOntmb3I6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfZmluZFRhcmdldCJ9LG1hbnVhbE1vZGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX21hbnVhbE1vZGVDaGFuZ2VkIn0scG9zaXRpb246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxmaXRUb1Zpc2libGVCb3VuZHM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sb2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZToxNH0sbWFyZ2luVG9wOnt0eXBlOk51bWJlcix2YWx1ZToxNH0sYW5pbWF0aW9uRGVsYXk6e3R5cGU6TnVtYmVyLHZhbHVlOjUwMCxvYnNlcnZlcjoiX2RlbGF5Q2hhbmdlIn0sYW5pbWF0aW9uRW50cnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25FeGl0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sYW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybntlbnRyeTpbe25hbWU6ImZhZGUtaW4tYW5pbWF0aW9uIixub2RlOnRoaXMsdGltaW5nOntkZWxheTowfX1dLGV4aXQ6W3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLG5vZGU6dGhpc31dfX19LF9zaG93aW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6e3dlYmtpdEFuaW1hdGlvbkVuZDoiX29uQW5pbWF0aW9uRW5kIn0sZ2V0IHRhcmdldCgpe3ZhciBlPXp0KHRoaXMpLnBhcmVudE5vZGUsdD16dCh0aGlzKS5nZXRPd25lclJvb3QoKSxyO3JldHVybiB0aGlzLmZvcj9yPXp0KHQpLnF1ZXJ5U2VsZWN0b3IoIiMiK3RoaXMuZm9yKTpyPWUubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT90Lmhvc3Q6ZSxyfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2ZpbmRUYXJnZXQoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUpe2U9PT0iZW50cnkiP3RoaXMuc2hvdygpOmU9PT0iZXhpdCImJnRoaXMuaGlkZSgpfSxjYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKCJjYW5jZWwtYW5pbWF0aW9uIil9LHNob3c6ZnVuY3Rpb24oKXtpZighdGhpcy5fc2hvd2luZyl7aWYoenQodGhpcykudGV4dENvbnRlbnQudHJpbSgpPT09IiIpe2Zvcih2YXIgZT0hMCx0PXp0KHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS50ZXh0Q29udGVudC50cmltKCkhPT0iIil7ZT0hMTticmVha31pZihlKXJldHVybn10aGlzLl9zaG93aW5nPSEwLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKX19LGhpZGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX3Nob3dpbmcpe2lmKHRoaXMuX2FuaW1hdGlvblBsYXlpbmcpe3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fY2FuY2VsQW5pbWF0aW9uKCk7cmV0dXJufWVsc2UgdGhpcy5fb25BbmltYXRpb25GaW5pc2goKTt0aGlzLl9zaG93aW5nPSExLHRoaXMuX2FuaW1hdGlvblBsYXlpbmc9ITB9fSx1cGRhdGVQb3NpdGlvbjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX3RhcmdldHx8IXRoaXMub2Zmc2V0UGFyZW50KSl7dmFyIGU9dGhpcy5vZmZzZXQ7dGhpcy5tYXJnaW5Ub3AhPTE0JiZ0aGlzLm9mZnNldD09MTQmJihlPXRoaXMubWFyZ2luVG9wKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX3RhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT0oci53aWR0aC1uLndpZHRoKS8yLG89KHIuaGVpZ2h0LW4uaGVpZ2h0KS8yLGE9ci5sZWZ0LXQubGVmdCxzPXIudG9wLXQudG9wLGwsYztzd2l0Y2godGhpcy5wb3NpdGlvbil7Y2FzZSJ0b3AiOmw9YStpLGM9cy1uLmhlaWdodC1lO2JyZWFrO2Nhc2UiYm90dG9tIjpsPWEraSxjPXMrci5oZWlnaHQrZTticmVhaztjYXNlImxlZnQiOmw9YS1uLndpZHRoLWUsYz1zK287YnJlYWs7Y2FzZSJyaWdodCI6bD1hK3Iud2lkdGgrZSxjPXMrbzticmVha310aGlzLmZpdFRvVmlzaWJsZUJvdW5kcz8odC5sZWZ0K2wrbi53aWR0aD53aW5kb3cuaW5uZXJXaWR0aD8odGhpcy5zdHlsZS5yaWdodD0iMHB4Iix0aGlzLnN0eWxlLmxlZnQ9ImF1dG8iKToodGhpcy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsbCkrInB4Iix0aGlzLnN0eWxlLnJpZ2h0PSJhdXRvIiksdC50b3ArYytuLmhlaWdodD53aW5kb3cuaW5uZXJIZWlnaHQ/KHRoaXMuc3R5bGUuYm90dG9tPXQuaGVpZ2h0LXMrZSsicHgiLHRoaXMuc3R5bGUudG9wPSJhdXRvIik6KHRoaXMuc3R5bGUudG9wPU1hdGgubWF4KC10LnRvcCxjKSsicHgiLHRoaXMuc3R5bGUuYm90dG9tPSJhdXRvIikpOih0aGlzLnN0eWxlLmxlZnQ9bCsicHgiLHRoaXMuc3R5bGUudG9wPWMrInB4Iil9fSxfYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWVudGVyIiwic2hvdyIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwiYmx1ciIsImhpZGUiKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMubGlzdGVuKHRoaXMsIm1vdXNlZW50ZXIiLCJoaWRlIil9LF9maW5kVGFyZ2V0OmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlfHx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl90YXJnZXQ9dGhpcy50YXJnZXQsdGhpcy5tYW51YWxNb2RlfHx0aGlzLl9hZGRMaXN0ZW5lcnMoKX0sX2RlbGF5Q2hhbmdlOmZ1bmN0aW9uKGUpe2UhPT01MDAmJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LWluIjplKyJtcyJ9KX0sX21hbnVhbE1vZGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5tYW51YWxNb2RlP3RoaXMuX3JlbW92ZUxpc3RlbmVycygpOnRoaXMuX2FkZExpc3RlbmVycygpfSxfY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7dGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfSxfb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9zaG93aW5nJiYodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJlbnRyeSIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpKX0sX29uQW5pbWF0aW9uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMSx0aGlzLl9zaG93aW5nfHwodGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLl9nZXRBbmltYXRpb25UeXBlKCJleGl0IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpKX0sX2dldEFuaW1hdGlvblR5cGU6ZnVuY3Rpb24oZSl7aWYoZT09PSJlbnRyeSImJnRoaXMuYW5pbWF0aW9uRW50cnkhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FbnRyeTtpZihlPT09ImV4aXQiJiZ0aGlzLmFuaW1hdGlvbkV4aXQhPT0iIilyZXR1cm4gdGhpcy5hbmltYXRpb25FeGl0O2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZT09InN0cmluZyIpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZyYmdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nLmRlbGF5JiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkhPT0wKXt2YXIgdD10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXk7ZT09PSJlbnRyeSI/dGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOnQrIm1zIn0pOmU9PT0iZXhpdCImJnRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci10b29sdGlwLWRlbGF5LW91dCI6dCsibXMifSl9cmV0dXJuIHRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLm5hbWV9fSxfcmVtb3ZlTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdGFyZ2V0JiYodGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImZvY3VzIiwic2hvdyIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJtb3VzZWxlYXZlIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMudW5saXN0ZW4odGhpcy5fdGFyZ2V0LCJ0YXAiLCJoaWRlIikpLHRoaXMudW5saXN0ZW4odGhpcy4kLnRvb2x0aXAsImFuaW1hdGlvbmVuZCIsIl9vbkFuaW1hdGlvbkVuZCIpLHRoaXMudW5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX19KTt2YXIgcmI9RWUoT2UoKSwxKTt2YXIgbUU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sRVc9bmV3IFNldCxPOT1uZXcgU2V0O3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwoKT0+e0VXLmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwoKT0+e085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX0pO2Z1bmN0aW9uIGdFKGUpe2xldCB0PW5ldyBtRShlKTtyZXR1cm4gRVcuYWRkKHQpLHR9ZnVuY3Rpb24gVFcoZSl7bGV0IHQ9bmV3IG1FKGUpO3JldHVybiBPOS5hZGQodCksdH1mdW5jdGlvbiBDVygpe085LmZvckVhY2goZT0+ZS5saXN0ZW5lcigpKX1mdW5jdGlvbiBBVyhlKXtFVy5kZWxldGUoZSl9ZnVuY3Rpb24gUFcoZSl7TzkuZGVsZXRlKGUpfXZhciBrVz17fTtLcyhrVyx7Z2V0RmFrZUhhc2g6KCk9PkxXLHNldEZha2VIYXNoOigpPT5JVyxzZXRVc2VIYXNoOigpPT5HYmUsdXNlSGFzaDooKT0+ejl9KTt2YXIgUjB0PSExO2Z1bmN0aW9uIEdiZShlKXtSMHQ9ZX1mdW5jdGlvbiB6OSgpe3JldHVybiBSMHR9dmFyIE4wdD0iIjtmdW5jdGlvbiBJVyhlKXtOMHQ9ZX1mdW5jdGlvbiBMVygpe3JldHVybiBOMHR9dmFyIFF4PSJfX3RhYl9fIixSVz17fTtmdW5jdGlvbiBEMHQoKXtyZXR1cm4gUld9ZnVuY3Rpb24gTzB0KGUpe1JXPWV9Z0UoKCk9PntSVz1lYih0YigpKX0pO2Z1bmN0aW9uIHRiKCl7cmV0dXJuIHo5KCk/d2luZG93LmxvY2F0aW9uLmhhc2guc2xpY2UoMSk6TFcoKX1mdW5jdGlvbiBlYihlKXtsZXQgdD17fTtyZXR1cm4gZS5zcGxpdCgiJiIpLmZvckVhY2gobj0+e2xldCBpPW4uc3BsaXQoIj0iKTtpLmxlbmd0aD09PTE/dFtReF09aVswXTppLmxlbmd0aD09PTImJih0W2RlY29kZVVSSUNvbXBvbmVudChpWzBdKV09ZGVjb2RlVVJJQ29tcG9uZW50KGlbMV0pKX0pLHR9ZnVuY3Rpb24gRjkoZSx0PSExKXtpZih6OSgpKWlmKHQpe2xldCByPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO3IuaGFzaD1lLHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh3aW5kb3cuaGlzdG9yeS5zdGF0ZSwiIixyLnRvU3RyaW5nKCkpfWVsc2Ugd2luZG93LmxvY2F0aW9uLmhhc2g9ZTtlbHNlIElXKGUpfWZ1bmN0aW9uIEI5KGUpe2xldCB0PSIiO2VbUXhdIT09dm9pZCAwJiYodCs9ZVtReF0pO2xldCByPU9iamVjdC5rZXlzKGUpLm1hcChuPT5bbixlW25dXSkuZmlsdGVyKG49Pm5bMF0hPT1ReCkubWFwKG49PmVuY29kZVVSSUNvbXBvbmVudChuWzBdKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pKS5qb2luKCImIik7cmV0dXJuIHIubGVuZ3RoPjA/dCsiJiIrcjp0fWZ1bmN0aW9uIHowdChlLHQ9ITEpe2xldCByPWViKHRiKCkpO2RlbGV0ZSByW2VdLEY5KEI5KHIpLHQpfXZhciBCMHQ9ImRpc2FtYmlndWF0b3IiLHtnZXQ6V2JlLHNldDpZYmUsZ2V0SW5pdGlhbGl6ZXI6eV8sZ2V0T2JzZXJ2ZXI6dl8sZGlzcG9zZUJpbmRpbmc6amJlfT12RShlPT5lLGU9PmUpLHtnZXQ6WGJlLHNldDokYmUsZ2V0SW5pdGlhbGl6ZXI6dnAsZ2V0T2JzZXJ2ZXI6eHAsZGlzcG9zZUJpbmRpbmc6S2JlfT12RShlPT5lPT09InRydWUiPyEwOmU9PT0iZmFsc2UiPyExOnZvaWQgMCxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6Tlcsc2V0OkRXLGdldEluaXRpYWxpemVyOl9FLGdldE9ic2VydmVyOnlFLGRpc3Bvc2VCaW5kaW5nOlpiZX09dkUoZT0+K2UsZT0+ZS50b1N0cmluZygpKSx7Z2V0OkpiZSxzZXQ6UWJlLGdldEluaXRpYWxpemVyOk9XLGdldE9ic2VydmVyOnpXLGRpc3Bvc2VCaW5kaW5nOnQyZX09dkUoZT0+SlNPTi5wYXJzZShhdG9iKGUpKSxlPT5idG9hKEpTT04uc3RyaW5naWZ5KGUpKSk7ZnVuY3Rpb24gdkUoZSx0KXtsZXQgcj1bXSxuPVtdO2Z1bmN0aW9uIGkoYyx1PXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmgsdXNlTG9jYWxTdG9yYWdlOmY9ITF9PXUscD1mP3dpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShjKTplYih0YigpKVtjXTtyZXR1cm4gcD09bnVsbD9yYi5jbG9uZURlZXAoaCk6ZShwKX1mdW5jdGlvbiBvKGMsdSxoPXt9KXtsZXR7ZGVmYXVsdFZhbHVlOmYsdXNlTG9jYWxTdG9yYWdlOnA9ITEsdXNlTG9jYXRpb25SZXBsYWNlOmQ9ITF9PWgsZz10KHUpO2lmKHApd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGMsZyksQ1coKTtlbHNlIGlmKCFyYi5pc0VxdWFsKHUsaShjLHt1c2VMb2NhbFN0b3JhZ2U6cH0pKSlpZihyYi5pc0VxdWFsKHUsZikpejB0KGMsZCk7ZWxzZXtsZXQgXz1lYih0YigpKTtfW2NdPWcsRjkoQjkoXyksZCl9fWZ1bmN0aW9uIGEoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD0oKT0+e2xldCBfPWkoZixoKSx5PXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO3JiLmlzRXF1YWwoXyx5KXx8KHRoaXNbaC5wb2x5bWVyUHJvcGVydHldPV8pfSxnPShoLnVzZUxvY2FsU3RvcmFnZT9UVzpnRSkoKCk9PnAoKSk7cmV0dXJuIGgudXNlTG9jYWxTdG9yYWdlP24ucHVzaChnKTpyLnB1c2goZykscCgpLHRoaXNbaC5wb2x5bWVyUHJvcGVydHldfX1mdW5jdGlvbiBzKCl7ci5mb3JFYWNoKGM9PkFXKGMpKSxuLmZvckVhY2goYz0+UFcoYykpfWZ1bmN0aW9uIGwoYyx1KXtsZXQgaD1LbCh7ZGVmYXVsdFZhbHVlOnUuZGVmYXVsdFZhbHVlLHBvbHltZXJQcm9wZXJ0eTpjLHVzZUxvY2FsU3RvcmFnZTohMX0sdSk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IGY9RjB0KHRoaXMsYykscD10aGlzW2gucG9seW1lclByb3BlcnR5XTtvKGYscCxoKX19cmV0dXJue2dldDppLHNldDpvLGdldEluaXRpYWxpemVyOmEsZ2V0T2JzZXJ2ZXI6bCxkaXNwb3NlQmluZGluZzpzfX1mdW5jdGlvbiBlMmUoKXtsZXQgZT1uZXcgU2V0KFsiZXhhbXBsZXNQYXRoIiwiaGlkZU1vZGVsUGFuZTIiLCJtb2RlbE5hbWUxIiwibW9kZWxOYW1lMiIsImluZmVyZW5jZUFkZHJlc3MxIiwiaW5mZXJlbmNlQWRkcmVzczIiLCJtb2RlbFR5cGUiLCJtb2RlbFZlcnNpb24xIiwibW9kZWxWZXJzaW9uMiIsIm1vZGVsU2lnbmF0dXJlMSIsIm1vZGVsU2lnbmF0dXJlMiIsIm1heEV4YW1wbGVzIiwibGFiZWxWb2NhYlBhdGgiLCJtdWx0aUNsYXNzIiwic2VxdWVuY2VFeGFtcGxlcyIsIm1heENsYXNzZXNUb0Rpc3BsYXkiLCJzYW1wbGluZ09kZHMiLCJ1c2VQcmVkaWN0QXBpIiwicHJlZGljdElucHV0VGVuc29yIiwicHJlZGljdE91dHB1dFRlbnNvciJdKSx0PWViKHRiKCkpO2lmKHRbUXhdPT09IndoYXRpZiIpe2ZvcihsZXQgciBvZiBlKWlmKHIgaW4gdCl7bGV0IG49dFtyXTt0W2BwLndoYXRpZi4ke3J9YF09bn19RjkoQjkodCkpLE8wdCh0KX1mdW5jdGlvbiBGMHQoZSx0KXtsZXQgcj1lW0IwdF07cmV0dXJuKHI9PW51bGw/W3RdOltyLHRdKS5qb2luKCIuIil9dmFyIHhFPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RhZ0ZpbHRlcj15XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSkuY2FsbCh0aGlzKSx0aGlzLl90YWdGaWx0ZXJPYnNlcnZlcj12XygidGFnRmlsdGVyIix7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2FsU3RvcmFnZTohMSxwb2x5bWVyUHJvcGVydHk6Il90YWdGaWx0ZXIifSl9X2NvbXB1dGVUYWdGaWx0ZXIoKXtyZXR1cm4gdGhpcy5fdGFnRmlsdGVyfX07eEUudGVtcGxhdGU9UWAKICAgIDxwYXBlci1pbnB1dAogICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICBsYWJlbD0iRmlsdGVyIHRhZ3MgKHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkKSIKICAgICAgdmFsdWU9Int7X3RhZ0ZpbHRlcn19IgogICAgICBjbGFzcz0ic2VhcmNoLWlucHV0IgogICAgPgogICAgICA8aXJvbi1pY29uIHByZWZpeD0iIiBpY29uPSJzZWFyY2giIHNsb3Q9InByZWZpeCI+PC9pcm9uLWljb24+CiAgICA8L3BhcGVyLWlucHV0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAxMHB4IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlVGFnRmlsdGVyKF90YWdGaWx0ZXIpIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsInRhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX3RhZ0ZpbHRlck9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx4RS5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7eEU9RShbeXQoInRmLXRhZy1maWx0ZXJlciIpXSx4RSk7ZnVuY3Rpb24gX3MoZSl7bGV0e21vZHVsZU5hbWU6dCxzdHlsZUNvbnRlbnQ6cn09ZSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKSxpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksbz1bXTtlLnN0eWxlRGVwZW5kZW5jaWVzJiZlLnN0eWxlRGVwZW5kZW5jaWVzLmZvckVhY2gocz0+e2xldCBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7bC5zZXRBdHRyaWJ1dGUoImluY2x1ZGUiLHMpLG8ucHVzaChsKX0pO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7T2JqZWN0LmFzc2lnbihhLHt0ZXh0Q29udGVudDpyfSksby5mb3JFYWNoKHM9PntpLmNvbnRlbnQuYXBwZW5kQ2hpbGQocyl9KSxpLmNvbnRlbnQuYXBwZW5kQ2hpbGQoYSksbi5hcHBlbmRDaGlsZChpKSxuLnJlZ2lzdGVyKHQpfV9zKHttb2R1bGVOYW1lOiJkYXNoYm9hcmQtc3R5bGUiLHN0eWxlRGVwZW5kZW5jaWVzOlsiaXJvbi1mbGV4Il0sc3R5bGVDb250ZW50OmAKICAgICAgOmhvc3QgewogICAgICAgIC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nOiAxNXB4OwogICAgICAgIC0tc2lkZWJhci1sZWZ0LXBhZGRpbmc6IDMwcHg7CiAgICAgIH0KCiAgICAgIFtzbG90PSdzaWRlYmFyJ10gewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDVweCAwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2V0dGluZ3MgewogICAgICAgIG1pbi1oZWlnaHQ6IDUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDIwMHB4OwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbGVmdDogdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgKiAyKTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pbnB1dCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDVweCAwIDEwcHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gewogICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDFweCB2YXIoLS10Yi11aS1ib3JkZXIpOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBwYWRkaW5nOiB2YXIoLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmcpIDAKICAgICAgICAgIHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgdmFyKC0tc2lkZWJhci1sZWZ0LXBhZGRpbmcpOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpmaXJzdC1vZi10eXBlIHsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbjpsYXN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIHBhZGRpbmctdG9wOiAwOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uID4gOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICBwYXBlci1jaGVja2JveCB7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICBgfSk7ZnVuY3Rpb24gX28oZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpLHRoaXMub2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e3Iuc29tZShpPT5pLmF0dHJpYnV0ZU5hbWU9PT0iY2xhc3MiKSYmdGhpcy5fbWF5YmVTZXREYXJrTW9kZSgpfSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHkse2F0dHJpYnV0ZXM6ITB9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciByO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksKHI9dGhpcy5vYnNlcnZlcik9PW51bGx8fHIuZGlzY29ubmVjdCgpfV9tYXliZVNldERhcmtNb2RlKCl7dGhpcy5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXJrLW1vZGUiKSl9fX1fcyh7bW9kdWxlTmFtZToic2Nyb2xsYmFyLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgLnNjcm9sbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICB3aWR0aDogMTBweDsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktOTAwKTsKICAgIH0KICAgIC5zY3JvbGxiYXIgewogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQogIGB9KTt2YXIgQlc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtCVy5zZXRBdHRyaWJ1dGUoImlzIiwiY3VzdG9tLXN0eWxlIik7QlcudGV4dENvbnRlbnQ9YAogIDpyb290IHsKICAgIC0tdGItb3JhbmdlLXdlYWs6ICNmZmE3MjY7CiAgICAtLXRiLW9yYW5nZS1zdHJvbmc6ICNmNTdjMDA7CiAgICAtLXRiLW9yYW5nZS1kYXJrOiAjZGM3MzIwOwogICAgLS10Yi1ncmV5LWRhcmtlcjogI2UyZTJlMjsKICAgIC0tdGItZ3JleS1saWdodGVyOiAjZjNmM2YzOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogIzc1NzU3NTsKICAgIC0tdGItdWktbGlnaHQtYWNjZW50OiAjZTBlMGUwOwogICAgLS10Yi11aS1ib3JkZXI6IHZhcigtLXBhcGVyLWdyZXktMzAwKTsKICAgIC0tdGItZ3JhcGgtZmFkZWQ6ICNlMGQ0YjM7CiAgICAtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTgwMCk7CiAgICAtLXRiLXJhaXNlZC1idXR0b24tc2hhZG93LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICNlOWU5ZTk7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgLS10Yi1saW5rOiAjMTk3NmQyOyAvKiBtYXRlcmlhbCBibHVlIDcwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjN2IxZmEyOyAvKiBtYXRlcmlhbCBwdXJwbGUgNzAwLiAqLwogIH0KCiAgOnJvb3QgLmRhcmstbW9kZSB7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS03MDApOwogICAgLS10Yi11aS1kYXJrLWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNDAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIC0tcHJpbWFyeS10ZXh0LWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzMDMwMzA7ICAvKiBtYXRlcmlhbCBncmV5IEE0MDAuICovCiAgICAtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1sYXlvdXQtYmFja2dyb3VuZC1jb2xvcjogIzNhM2EzYTsKICAgIC0tdGItbGluazogIzQyYTVmNTsgLyogbWF0ZXJpYWwgYmx1ZSA0MDAuICovCiAgICAtLXRiLWxpbmstdmlzaXRlZDogI2JhNjhjODsgLyogbWF0ZXJpYWwgcHVycGxlIDMwMC4gKi8KICAgIC8qIE92ZXJyaWRlcyBwYXBlci1tYXRlcmlhbCAqLwogICAgLS1zaGFkb3ctZWxldmF0aW9uLTJkcF8tX2JveC1zaGFkb3c6IDAgMnB4IDJweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCksCiAgICAgIDAgMXB4IDVweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICB9CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChCVyk7dmFyIEhXPWNsYXNzIGV4dGVuZHMgX28obXQpe307SFcudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNpZGViYXIiPgogICAgICA8c2xvdCBuYW1lPSJzaWRlYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJjZW50ZXIiPgogICAgICA8c2xvdCBuYW1lPSJjZW50ZXIiIGNsYXNzPSJzY29sbGJhciI+PC9zbG90PgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0ic2Nyb2xsYmFyLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICAjc2lkZWJhciB7CiAgICAgICAgZmxleDogMCAwIHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1iYXNpcywgMjUlKTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWF4LXdpZHRoLCAzNTBweCk7CiAgICAgICAgbWluLXdpZHRoOiB2YXIoLS10Zi1kYXNoYm9hcmQtbGF5b3V0LXNpZGViYXItbWluLXdpZHRoLCAyNzBweCk7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgI2NlbnRlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICA6OnNsb3R0ZWQoW3Nsb3Q9J2NlbnRlciddKSB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAudGYtZ3JhcGgtZGFzaGJvYXJkICNjZW50ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtIVz1FKFt5dCgidGYtZGFzaGJvYXJkLWxheW91dCIpXSxIVyk7dmFyIEgwdD0iVEYuVGVuc29yQm9hcmQuUGFnaW5hdGVkVmlldy5saW1pdCIscjJlPTEyLEFoPW51bGwsVlc9bmV3IFNldDtmdW5jdGlvbiBVVyhlKXtWVy5hZGQoZSl9ZnVuY3Rpb24gcVcoZSl7VlcuZGVsZXRlKGUpfWZ1bmN0aW9uIEdXKCl7cmV0dXJuIEFoPT1udWxsJiYoQWg9TlcoSDB0LHt1c2VMb2NhbFN0b3JhZ2U6ITB9KSwoQWg9PW51bGx8fCFpc0Zpbml0ZShBaCl8fEFoPD0wKSYmKEFoPXIyZSkpLEFofWZ1bmN0aW9uIG4yZShlKXtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGdvdDogJHtlfWApO2lmKGU8PTApdGhyb3cgbmV3IEVycm9yKGBsaW1pdCBtdXN0IGJlIHBvc2l0aXZlLCBidXQgZ290OiAke2V9YCk7ZSE9PUFoJiYoQWg9ZSxEVyhIMHQsQWgse3VzZUxvY2FsU3RvcmFnZTohMH0pLFZXLmZvckVhY2godD0+e3QoKX0pKX12YXIgbmI9Y2xhc3MgZXh0ZW5kcyBtdHt1cGRhdGVBcnJheVByb3AodCxyLG4pe2xldCBpPXRoaXMuZ2V0KHQpLG89cjtpZighQXJyYXkuaXNBcnJheShvKSl0aHJvdyBSYW5nZUVycm9yKGBFeHBlY3RlZCBuZXcgdmFsdWUgdG8gJyR7dH0nIHRvIGJlIGFuIGFycmF5LmApO0FycmF5LmlzQXJyYXkoaSl8fChpPVtdLHRoaXMuc2V0KHQsaSkpO2xldCBhPW5ldyBTZXQoby5tYXAoKGMsdSk9Pm4oYyx1KSkpLHM9MCxsPTA7Zm9yKDtzPGkubGVuZ3RoJiZsPG8ubGVuZ3RoOyl7aWYoYS5oYXMobihpW3NdLHMpKSluKGlbc10scyk9PW4ob1tsXSxsKT90aGlzLnNldChgJHt0fS4ke3N9YCxvW2xdKTp0aGlzLnNwbGljZSh0LHMsMCxvW2xdKTtlbHNle3RoaXMuc3BsaWNlKHQscywxKTtjb250aW51ZX1sKysscysrfXM8aS5sZW5ndGgmJnRoaXMuc3BsaWNlKHQscyksbDxvLmxlbmd0aCYmdGhpcy5wdXNoKHQsLi4uby5zbGljZShsKSl9fTt2YXIgT2k9Y2xhc3MgZXh0ZW5kcyBuYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hcz0iaXRlbSIsdGhpcy5fY29udGVudEFjdGl2ZT0hMCx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITEsdGhpcy5fY3Rvcj1udWxsLHRoaXMuX3JlbmRlcmVkSXRlbXM9W10sdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Q9bmV3IE1hcCx0aGlzLl9scnVDYWNoZWRJdGVtcz1uZXcgTWFwLHRoaXMuX2NhY2hlU2l6ZT0xMCx0aGlzLl9nZXRJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2lzQ29ubmVjdGVkPSExfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1zZXRDYWNoZVNpemUodCl7dGhpcy5fY2FjaGVTaXplPXR9c2V0R2V0SXRlbUtleSh0KXt0aGlzLl9nZXRJdGVtS2V5PXR9dXBkYXRlRG9tKHQpe3RoaXMudXBkYXRlQXJyYXlQcm9wKCJfcmVuZGVyZWRJdGVtcyIsdCx0aGlzLl9nZXRJdGVtS2V5KX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5pc0Nvbm5lY3RlZClyZXR1cm4hMTtpZighdGhpcy5fY3Rvcil7bGV0IHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO3RoaXMuX2N0b3I9dGModCx0aGlzLHtwYXJlbnRNb2RlbDohMCxpbnN0YW5jZVByb3BzOntbdGhpcy5hc106ITAsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihyLG4pe3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmZvckVhY2goaT0+e2kuZm9yd2FyZEhvc3RQcm9wKHIsbil9KX19KX1yZXR1cm4hMH1fYm9vdHN0cmFwRG9tKCl7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCl8fHRoaXMuX2RvbUJvb3RzdHJhcHBlZClyZXR1cm47bmV3IE11dGF0aW9uT2JzZXJ2ZXIocj0+e2ZvcihsZXQgbiBvZiByKWlmKG4udHlwZT09PSJjaGlsZExpc3QiKWZvcihsZXQgaSBvZiBBcnJheS5mcm9tKG4uYWRkZWROb2RlcykpaSBpbnN0YW5jZW9mIEVsZW1lbnQmJmkuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKX0pLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSksQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5mb3JFYWNoKHI9Pnt0aGlzLnJlbW92ZUNoaWxkKHIpfSksdGhpcy5fbHJ1Q2FjaGVkSXRlbXMuY2xlYXIoKSx0aGlzLl9yZW5kZXJlZEl0ZW1zLmZvckVhY2goKHIsbik9PnRoaXMuX2luc2VydEl0ZW0ocixuKSksdGhpcy5fZG9tQm9vdHN0cmFwcGVkPSEwfV91cGRhdGVBY3RpdmUoKXshdGhpcy5fZG9tQm9vdHN0cmFwcGVkfHxBcnJheS5mcm9tKHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LnZhbHVlcygpKS5mb3JFYWNoKHQ9Pnt0Lm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSl9KX1fdXBkYXRlRG9tKHQpe2lmKCEhdGhpcy5fZG9tQm9vdHN0cmFwcGVkJiYhKHQucGF0aD09Il9yZW5kZXJlZEl0ZW1zInx8dC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMubGVuZ3RoIikpaWYodC5wYXRoPT09Il9yZW5kZXJlZEl0ZW1zLnNwbGljZXMiKXQudmFsdWUuaW5kZXhTcGxpY2VzLmZvckVhY2gobj0+e2xldHtpbmRleDppLGFkZGVkQ291bnQ6byxvYmplY3Q6YSxyZW1vdmVkOnN9PW47cy5mb3JFYWNoKGw9Pnt0aGlzLl9yZW1vdmVJdGVtKGwsdGhpcy5jaGlsZHJlbltpXSl9KSxhLnNsaWNlKGksaStvKS5mb3JFYWNoKChsLGMpPT50aGlzLl9pbnNlcnRJdGVtKGwsaStjKSksdGhpcy5fdHJpbUNhY2hlKCl9KTtlbHNle2xldCByPXRoaXMuX2dldEl0ZW1LZXkodC52YWx1ZSk7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuaGFzKHIpP3RoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChyKS5ub3RpZnlQYXRoKHRoaXMuYXMsdC52YWx1ZSk6Y29uc29sZS53YXJuKGBFeHBlY3RlZCAnJHtyfScgdG8gZXhpc3QgaW4gdGhlIERPTSBidXQgY291bGQgbm90IGZpbmQgb25lLmApfX1faW5zZXJ0SXRlbSh0LHIpe2lmKCF0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGVtcGxhdGl6ZWQgYmVmb3JlIGluc2VydGluZyBhbiBpdGVtIik7bGV0IG4saT10aGlzLl9nZXRJdGVtS2V5KHQpO2lmKHRoaXMuX2xydUNhY2hlZEl0ZW1zLmhhcyhpKSluPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmdldChpKSx0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUoaSksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KGkpLm5vdGlmeVBhdGgoImFjdGl2ZSIsdGhpcy5fY29udGVudEFjdGl2ZSk7ZWxzZXtsZXQgbz17W3RoaXMuYXNdOnQsYWN0aXZlOnRoaXMuX2NvbnRlbnRBY3RpdmV9LGE9bmV3IHRoaXMuX2N0b3Iobyk7bj1hLnJvb3QsdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3Quc2V0KGksYSl9dGhpcy5jaGlsZHJlbltyXT90aGlzLmluc2VydEJlZm9yZShuLHRoaXMuY2hpbGRyZW5bcl0pOigobi5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP0FycmF5LmZyb20obi5jaGlsZHJlbik6W25dKS5mb3JFYWNoKGE9PmEuc2V0QXR0cmlidXRlKCJzbG90IiwiaXRlbXMiKSksdGhpcy5hcHBlbmRDaGlsZChuKSl9X3JlbW92ZUl0ZW0odCxyKXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKTtsZXQgbj10aGlzLl9nZXRJdGVtS2V5KHQpO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNldChuLHIpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmdldChuKS5ub3RpZnlQYXRoKCJhY3RpdmUiLCExKX1fdHJpbUNhY2hlKCl7Zm9yKDt0aGlzLl9scnVDYWNoZWRJdGVtcy5zaXplPnRoaXMuX2NhY2hlU2l6ZTspe2xldFt0XT10aGlzLl9scnVDYWNoZWRJdGVtcy5rZXlzKCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZGVsZXRlKHQpLHRoaXMuX3JlbmRlcmVkVGVtcGxhdGVJbnN0LmRlbGV0ZSh0KX19fTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsImFzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxPaS5wcm90b3R5cGUsIml0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT2kucHJvdG90eXBlLCJfY29udGVudEFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZG9tQm9vdHN0cmFwcGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2N0b3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiX3JlbmRlcmVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRUZW1wbGF0ZUluc3QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfbHJ1Q2FjaGVkSXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY2FjaGVTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2dldEl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiX2lzQ29ubmVjdGVkIix2b2lkIDApO0UoW0J0KCJfaXNDb25uZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX2Jvb3RzdHJhcERvbSIsbnVsbCk7RShbQnQoIl9jb250ZW50QWN0aXZlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVBY3RpdmUiLG51bGwpO0UoW0J0KCJfcmVuZGVyZWRJdGVtcy4qIiwiX2RvbUJvb3RzdHJhcHBlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtPYmplY3RdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdXBkYXRlRG9tIixudWxsKTtFKFtCdCgiX2NhY2hlU2l6ZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfdHJpbUNhY2hlIixudWxsKTt2YXIgaG49Y2xhc3MgZXh0ZW5kcyBPaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLmdldENhdGVnb3J5SXRlbUtleT10PT5KU09OLnN0cmluZ2lmeSh0KSx0aGlzLl9saW1pdD0xMix0aGlzLl9hY3RpdmVJbmRleD0wLHRoaXMuX3BhZ2VJbnB1dFJhd1ZhbHVlPSIiLHRoaXMuX3BhZ2VJbnB1dEZvY3VzZWQ9ITF9X2NvbXB1dGVDb3VudCgpe3JldHVybiB0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aH1nZXQgX2hhc011bHRpcGxlKCl7cmV0dXJuIHRoaXMuX2NvdW50PjF9X3RvZ2dsZVBhbmUoKXt0aGlzLm9wZW5lZD0hdGhpcy5vcGVuZWR9X2NoYW5nZUNvbnRlbnRBY3RpdmUodCl7dGhpcy5fY29udGVudEFjdGl2ZT10fV9vblBhbmVSZW5kZXJlZENoYW5nZWQodCxyKXt0JiZ0IT09ciYmdGhpcy4kLmlmUmVuZGVyZWQucmVuZGVyKCl9X2NvbXB1dGVQYW5lUmVuZGVyZWQodCl7cmV0dXJuISh0Lm1ldGFkYXRhLnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmdC5uYW1lPT09IiIpfWdldCBfaXRlbXNSZW5kZXJlZCgpe3JldHVybiB0aGlzLl9wYW5lUmVuZGVyZWQmJnRoaXMub3BlbmVkfV9jb21wdXRlSXNTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0PT09TmEuU0VBUkNIX1JFU1VMVFN9X2NvbXB1dGVJc0ludmFsaWRTZWFyY2hSZXN1bHRzKHQpe3JldHVybiB0LnR5cGU9PT1OYS5TRUFSQ0hfUkVTVUxUUyYmIXQudmFsaWRSZWdleH1fY29tcHV0ZUlzVW5pdmVyc2FsU2VhcmNoUXVlcnkodCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0LnVuaXZlcnNhbFJlZ2V4fV9pc0NvbXBvc2l0ZVNlYXJjaCgpe2xldHt0eXBlOnQsY29tcG9zaXRlU2VhcmNoOnJ9PXRoaXMuY2F0ZWdvcnkubWV0YWRhdGE7cmV0dXJuIHImJnQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5vcGVuZWQ9dGhpcy5pbml0aWFsT3BlbmVkPT1udWxsPyEwOnRoaXMuaW5pdGlhbE9wZW5lZCx0aGlzLl9saW1pdExpc3RlbmVyPSgpPT57dGhpcy5zZXQoIl9saW1pdCIsR1coKSl9LFVXKHRoaXMuX2xpbWl0TGlzdGVuZXIpLHRoaXMuX2xpbWl0TGlzdGVuZXIoKX1kZXRhY2hlZCgpe3FXKHRoaXMuX2xpbWl0TGlzdGVuZXIpfV91cGRhdGVSZW5kZXJlZEl0ZW1zKCl7dmFyIHQ9dGhpcy5faXRlbXNSZW5kZXJlZCxyPXRoaXMuX2xpbWl0LG49dGhpcy5fYWN0aXZlSW5kZXgsaT10aGlzLmRpc2FibGVQYWdpbmF0aW9uO2lmKCF0KXJldHVybjtsZXQgbz1NYXRoLmZsb29yKG4vciksYT10aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSxzPWk/YTphLnNsaWNlKG8qciwobysxKSpyKTt0aGlzLnVwZGF0ZURvbShzKX1fbGltaXRDaGFuZ2VkKHQpe3RoaXMuc2V0Q2FjaGVTaXplKHQqMil9X2dldENhdGVnb3J5SXRlbUtleUNoYW5nZWQoKXt0aGlzLnNldEdldEl0ZW1LZXkodGhpcy5nZXRDYXRlZ29yeUl0ZW1LZXkpfWdldCBfY3VycmVudFBhZ2UoKXt2YXIgdD10aGlzLl9saW1pdCxyPXRoaXMuX2FjdGl2ZUluZGV4O3JldHVybiBNYXRoLmZsb29yKHIvdCkrMX1fY29tcHV0ZVBhZ2VDb3VudCh0LHIpe3JldHVybiB0aGlzLmNhdGVnb3J5P01hdGguY2VpbCh0aGlzLmNhdGVnb3J5Lml0ZW1zLmxlbmd0aC9yKTowfWdldCBfbXVsdGlwbGVQYWdlc0V4aXN0KCl7dmFyIHQ9dGhpcy5fcGFnZUNvdW50LHI9dGhpcy5kaXNhYmxlUGFnaW5hdGlvbjtyZXR1cm4hciYmdD4xfWdldCBfaGFzUHJldmlvdXNQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2U7cmV0dXJuIHQ+MX1nZXQgX2hhc05leHRQYWdlKCl7dmFyIHQ9dGhpcy5fY3VycmVudFBhZ2Uscj10aGlzLl9wYWdlQ291bnQ7cmV0dXJuIHQ8cn1fY29tcHV0ZUlucHV0V2lkdGgodCl7cmV0dXJuYGNhbGMoJHt0LnRvU3RyaW5nKCkubGVuZ3RofWVtICsgMjBweClgfV9zZXRBY3RpdmVJbmRleCh0KXtsZXQgcj0odGhpcy5jYXRlZ29yeS5pdGVtc3x8W10pLmxlbmd0aC0xO3Q+ciYmKHQ9ciksdDwwJiYodD0wKSx0aGlzLnNldCgiX2FjdGl2ZUluZGV4Iix0KX1fY2xhbXBBY3RpdmVJbmRleCgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4KX1fcGVyZm9ybVByZXZpb3VzUGFnZSgpe3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2FjdGl2ZUluZGV4LXRoaXMuX2xpbWl0KX1fcGVyZm9ybU5leHRQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgrdGhpcy5fbGltaXQpfV9jb21wdXRlUGFnZUlucHV0VmFsdWUodCxyLG4pe3JldHVybiB0P3I6bi50b1N0cmluZygpfV9oYW5kbGVQYWdlSW5wdXRFdmVudCh0KXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0LnRhcmdldC52YWx1ZSk7bGV0IHI9TnVtYmVyKHQudGFyZ2V0LnZhbHVlfHxOYU4pO2lmKGlzTmFOKHIpKXJldHVybjtsZXQgbj1NYXRoLm1heCgxLE1hdGgubWluKHIsdGhpcy5fcGFnZUNvdW50KSktMTt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9saW1pdCpuKX1faGFuZGxlUGFnZUNoYW5nZUV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fY3VycmVudFBhZ2UudG9TdHJpbmcoKSl9X2hhbmRsZVBhZ2VGb2N1c0V2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRSYXdWYWx1ZSIsdGhpcy5fcGFnZUlucHV0VmFsdWUpLHRoaXMuc2V0KCJfcGFnZUlucHV0Rm9jdXNlZCIsITApfV9oYW5kbGVQYWdlQmx1ckV2ZW50KCl7dGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMSl9X3VwZGF0ZVBhZ2VJbnB1dFZhbHVlKHQpe3ZhciBuO2xldCByPShuPXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOm4ucXVlcnlTZWxlY3RvcigiI3BhZ2UtaW5wdXQgaW5wdXQiKTtyJiYoci52YWx1ZT10KX1fdXBkYXRlSW5wdXRXaWR0aCgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoIjp0aGlzLl9pbnB1dFdpZHRofSl9fTtobi50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19wYW5lUmVuZGVyZWRdXSIgaWQ9ImlmUmVuZGVyZWQiPgogICAgICA8YnV0dG9uIGNsYXNzPSJoZWFkaW5nIiBvbi10YXA9Il90b2dnbGVQYW5lIiBvcGVuLWJ1dHRvbiQ9Iltbb3BlbmVkXV0iPgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3Bhbj5UYWdzIG1hdGNoaW5nIG11bHRpcGxlIGV4cGVyaW1lbnRzPC9zcGFuPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICAgID4mbmJzcDs8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3BhbgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzQ29tcG9zaXRlU2VhcmNoKGNhdGVnb3J5KV1dIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPlRhZ3MgbWF0Y2hpbmcgLzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2F0ZWdvcnktbmFtZSIgdGl0bGUkPSJbW2NhdGVnb3J5Lm5hbWVdXSIKICAgICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHQiPi88L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5XV0iPgogICAgICAgICAgICAgICAgPHNwYW4+IChhbGwgdGFncyk8L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzSW52YWxpZFNlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gPHN0cm9uZz4obWFsZm9ybWVkIHJlZ3VsYXIgZXhwcmVzc2lvbik8L3N0cm9uZz48L3NwYW4+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgID5bW2NhdGVnb3J5Lm5hbWVdXTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iY291bnQiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZV1dIj4KICAgICAgICAgICAgPHNwYW4+W1tfY291bnRdXTwvc3Bhbj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8aXJvbi1pY29uIGljb249ImV4cGFuZC1tb3JlIiBjbGFzcz0iZXhwYW5kLWFycm93Ij48L2lyb24taWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvYnV0dG9uPgogICAgICA8IS0tIFRPRE8oc3RlcGhhbndsZWUpOiBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBGb3Igc29tZSByZWFzb24sCiAgICAgICAgdHJhbnNpdGlvbmVuZCB0aGF0IHRoZSBpcm9uLWNvbGxhcHNlIHJlbGllcyBvbiBzb21ldGltZXMgZG9lcyBub3QKICAgICAgICB0cmlnZ2VyIHdoZW4gcmVuZGVyaW5nIGEgY2hhcnQgd2l0aCBhIHNwaW5uZXIuIEEgdG95IGV4YW1wbGUgY2Fubm90CiAgICAgICAgcmVwcm9kdWNlIHRoaXMgYnVnLiAtLT4KICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW29wZW5lZF1dIiBuby1hbmltYXRpb249IiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8c3BhbiBpZD0idG9wLW9mLWNvbnRhaW5lciI+PC9zcGFuPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19tdWx0aXBsZVBhZ2VzRXhpc3RdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPGRpdiBpZD0iaXRlbXMiPgogICAgICAgICAgICA8c2xvdCBuYW1lPSJpdGVtcyI+PC9zbG90PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBpZD0iY29udHJvbHMtY29udGFpbmVyIj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmc6IDAgNXB4Ij4KICAgICAgICAgICAgICAgIFBhZ2UKICAgICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgICBpZD0icGFnZS1pbnB1dCIKICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgICBtaW49IjEiCiAgICAgICAgICAgICAgICAgIG1heD0iW1tfcGFnZUNvdW50XV0iCiAgICAgICAgICAgICAgICAgIHZhbHVlPSJbW19wYWdlSW5wdXRWYWx1ZV1dIgogICAgICAgICAgICAgICAgICBvbi1pbnB1dD0iX2hhbmRsZVBhZ2VJbnB1dEV2ZW50IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWZvY3VzPSJfaGFuZGxlUGFnZUZvY3VzRXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWJsdXI9Il9oYW5kbGVQYWdlQmx1ckV2ZW50IgogICAgICAgICAgICAgICAgPjwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgICBvZiBbW19wYWdlQ291bnRdXQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpZy1wYWdlLWJ1dHRvbnMiIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgb24tdGFwPSJfcGVyZm9ybVByZXZpb3VzUGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc1ByZXZpb3VzUGFnZV1dIgogICAgICAgICAgICAgICAgPlByZXZpb3VzIHBhZ2U8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtTmV4dFBhZ2UiCiAgICAgICAgICAgICAgICBkaXNhYmxlZCQ9IltbIV9oYXNOZXh0UGFnZV1dIgogICAgICAgICAgICAgICAgPk5leHQgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgNXB4IDFweCAxMHB4OwogICAgICB9CgogICAgICA6aG9zdCg6Zmlyc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpsYXN0LW9mLXR5cGUpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCA1cHggdmFyKC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3IpOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIHsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwICFpbXBvcnRhbnQ7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgW29wZW4tYnV0dG9uXSAuZXhwYW5kLWFycm93IHsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKICAgICAgfQoKICAgICAgLm5hbWUgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgLmNhdGVnb3J5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBwYWRkaW5nOiAycHggMDsKICAgICAgfQoKICAgICAgLmNvdW50IHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGluZzo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4OwogICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGVkZWRlOwogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5saWdodCB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNTAwKTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2NvbnRyb2xzLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmbGV4LWJhc2lzOiAwOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5iaWctcGFnZS1idXR0b25zIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0naXRlbXMnXSkgewogICAgICAgIC8qIFRvb2x0aXAgZm9yIGRlc2NyaXB0aW9ucyBhbmQgb3RoZXJzIGJyZWFrIHdpdGggbW9yZSBzdHJpY3Qgb25lcy4gKi8KICAgICAgICBjb250YWluOiBzdHlsZTsKICAgICAgfQoKICAgICAgI3BhZ2UtaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogdmFyKC0tdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXctcGFnZS1pbnB1dC13aWR0aCwgMTAwJSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImNhdGVnb3J5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJpbml0aWFsT3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwib3BlbmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJkaXNhYmxlUGFnaW5hdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixjb21wdXRlZDoiX2NvbXB1dGVDb3VudChjYXRlZ29yeS5pdGVtcy4qKSJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfY291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZVBhbmVSZW5kZXJlZChjYXRlZ29yeSkiLG9ic2VydmVyOiJfb25QYW5lUmVuZGVyZWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFuZVJlbmRlcmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1NlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEudHlwZSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1NlYXJjaFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHMoY2F0ZWdvcnkubWV0YWRhdGEpIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfaXNJbnZhbGlkU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeShjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saG4ucHJvdG90eXBlLCJnZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9saW1pdENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2xpbWl0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX2FjdGl2ZUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VDb3VudChjYXRlZ29yeS5pdGVtcy4qLCBfbGltaXQpIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9wYWdlQ291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlSW5wdXRXaWR0aChfcGFnZUNvdW50KSIsb2JzZXJ2ZXI6Il91cGRhdGVJbnB1dFdpZHRoIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxobi5wcm90b3R5cGUsIl9pbnB1dFdpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVBhZ2VJbnB1dFZhbHVlKF9wYWdlSW5wdXRGb2N1c2VkLCBfcGFnZUlucHV0UmF3VmFsdWUsIF9jdXJyZW50UGFnZSkiLG9ic2VydmVyOiJfdXBkYXRlUGFnZUlucHV0VmFsdWUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX3BhZ2VJbnB1dFJhd1ZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0Rm9jdXNlZCIsdm9pZCAwKTtFKFtSdCgiX2NvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc011bHRpcGxlIixudWxsKTtFKFtCdCgib3BlbmVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW0Jvb2xlYW5dKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2hhbmdlQ29udGVudEFjdGl2ZSIsbnVsbCk7RShbUnQoIm9wZW5lZCIsIl9wYW5lUmVuZGVyZWQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaXRlbXNSZW5kZXJlZCIsbnVsbCk7RShbQnQoIl9pdGVtc1JlbmRlcmVkIiwiY2F0ZWdvcnkuaXRlbXMuKiIsIl9saW1pdCIsIl9hY3RpdmVJbmRleCIsIl9wYWdlQ291bnQiLCJkaXNhYmxlUGFnaW5hdGlvbiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfdXBkYXRlUmVuZGVyZWRJdGVtcyIsbnVsbCk7RShbUnQoIl9saW1pdCIsIl9hY3RpdmVJbmRleCIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2N1cnJlbnRQYWdlIixudWxsKTtFKFtSdCgiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX211bHRpcGxlUGFnZXNFeGlzdCIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9oYXNQcmV2aW91c1BhZ2UiLG51bGwpO0UoW1J0KCJfY3VycmVudFBhZ2UiLCJfcGFnZUNvdW50IiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc05leHRQYWdlIixudWxsKTtFKFtCdCgiY2F0ZWdvcnkuaXRlbXMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0saG4ucHJvdG90eXBlLCJfY2xhbXBBY3RpdmVJbmRleCIsbnVsbCk7aG49RShbeXQoInRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3IildLGhuKTt2YXIgVjB0PUVlKE9lKCksMSk7dmFyIEg5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXI9dH19LGJwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoMSksdGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQsdGhpcy5pbml0aWFsaXplZD0hMX1yZWZyZXNoKCl7cmV0dXJuIHRoaXMubG9hZCgpLnRoZW4oKCk9Pnt0aGlzLmluaXRpYWxpemVkPSEwfSl9YWRkTGlzdGVuZXIodCl7bGV0IHI9bmV3IEg5KHQpO3JldHVybiB0aGlzLl9saXN0ZW5lcnMuYWRkKHIpLHJ9cmVtb3ZlTGlzdGVuZXJCeUtleSh0KXt0aGlzLl9saXN0ZW5lcnMuZGVsZXRlKHQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9saXN0ZW5lcnMuZm9yRWFjaCh0PT57dHJ5e3QubGlzdGVuZXIoKX1jYXRjaChyKXt9fSl9fTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtsb2FkKCl7bGV0IHQ9X2UoKS5lbnZpcm9ubWVudCgpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57bGV0IG49e2RhdGFMb2NhdGlvbjpyLmRhdGFfbG9jYXRpb24sd2luZG93VGl0bGU6ci53aW5kb3dfdGl0bGV9O3IuZXhwZXJpbWVudF9uYW1lIT09dm9pZCAwJiYobi5leHBlcmltZW50TmFtZT1yLmV4cGVyaW1lbnRfbmFtZSksci5leHBlcmltZW50X2Rlc2NyaXB0aW9uIT09dm9pZCAwJiYobi5leHBlcmltZW50RGVzY3JpcHRpb249ci5leHBlcmltZW50X2Rlc2NyaXB0aW9uKSxyLmNyZWF0aW9uX3RpbWUhPT12b2lkIDAmJihuLmNyZWF0aW9uVGltZT1yLmNyZWF0aW9uX3RpbWUpLCFWMHQuaXNFcXVhbCh0aGlzLmVudmlyb25tZW50LG4pJiYodGhpcy5lbnZpcm9ubWVudD1uLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldERhdGFMb2NhdGlvbigpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZGF0YUxvY2F0aW9uOiIifWdldFdpbmRvd1RpdGxlKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC53aW5kb3dUaXRsZToiIn1nZXRFeHBlcmltZW50TmFtZSgpe3JldHVybiB0aGlzLmVudmlyb25tZW50P3RoaXMuZW52aXJvbm1lbnQuZXhwZXJpbWVudE5hbWU6IiJ9Z2V0RXhwZXJpbWVudERlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50RGVzY3JpcHRpb246IiJ9Z2V0Q3JlYXRpb25UaW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5jcmVhdGlvblRpbWU6bnVsbH19LGliPW5ldyBWOTt2YXIgVTB0PUVlKE9lKCksMSk7dmFyIFU5PWNsYXNzIGV4dGVuZHMgYnB7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bnM9W119bG9hZCgpe2xldCB0PV9lKCkucnVucygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57VTB0LmlzRXF1YWwodGhpcy5fcnVucyxyKXx8KHRoaXMuX3J1bnM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRSdW5zKCl7cmV0dXJuIHRoaXMuX3J1bnMuc2xpY2UoKX19LHdwPW5ldyBVOTt2YXIgVnI9e307S3MoVnIse0Zvcm1hdFNwZWNpZmllcjooKT0+R0UsYWN0aXZlOigpPT56dnQsYXJjOigpPT5EU3QsYXJlYTooKT0+ejgsYXJlYVJhZGlhbDooKT0+byQsYXNjZW5kaW5nOigpPT5vYSxhdXRvVHlwZTooKT0+aWosYXhpc0JvdHRvbTooKT0+WjksYXhpc0xlZnQ6KCk9PmxiLGF4aXNSaWdodDooKT0+aF90LGF4aXNUb3A6KCk9PnVfdCxiaXNlY3Q6KCk9PnlzLGJpc2VjdExlZnQ6KCk9PlcwdCxiaXNlY3RSaWdodDooKT0+V1csYmlzZWN0b3I6KCk9Pm9iLGJsb2I6KCk9PkwxdCxicnVzaDooKT0+R0wsYnJ1c2hTZWxlY3Rpb246KCk9PlVMLGJydXNoWDooKT0+cXZ0LGJydXNoWTooKT0+cUwsYnVmZmVyOigpPT5rMXQsY2hvcmQ6KCk9Pld2dCxjbGllbnRQb2ludDooKT0+RG0sY2x1c3RlcjooKT0+VmJ0LGNvbG9yOigpPT5yYyxjb250b3VyRGVuc2l0eTooKT0+ZjF0LGNvbnRvdXJzOigpPT5aTCxjcmVhdGU6KCk9Pm55dCxjcmVhdG9yOigpPT5SbSxjcm9zczooKT0+cTksY3N2OigpPT5OMXQsY3N2Rm9ybWF0OigpPT5fMXQsY3N2Rm9ybWF0Qm9keTooKT0+eTF0LGNzdkZvcm1hdFJvdzooKT0+eDF0LGNzdkZvcm1hdFJvd3M6KCk9PnYxdCxjc3ZGb3JtYXRWYWx1ZTooKT0+YjF0LGNzdlBhcnNlOigpPT5DYixjc3ZQYXJzZVJvd3M6KCk9PmcxdCxjdWJlaGVsaXg6KCk9PmxhLGN1cnZlQmFzaXM6KCk9Plc4LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PiRTdCxjdXJ2ZUJhc2lzT3BlbjooKT0+WlN0LGN1cnZlQnVuZGxlOigpPT5RU3QsY3VydmVDYXJkaW5hbDooKT0+dDN0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9PmUzdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+cjN0LGN1cnZlQ2F0bXVsbFJvbTooKT0+aTN0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+YTN0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PmwzdCxjdXJ2ZUxpbmVhcjooKT0+WWgsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PnUzdCxjdXJ2ZU1vbm90b25lWDooKT0+ZzN0LGN1cnZlTW9ub3RvbmVZOigpPT5fM3QsY3VydmVOYXR1cmFsOigpPT54M3QsY3VydmVTdGVwOigpPT5iM3QsY3VydmVTdGVwQWZ0ZXI6KCk9PlMzdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PnczdCxjdXN0b21FdmVudDooKT0+TXAsZGVzY2VuZGluZzooKT0+ajB0LGRldmlhdGlvbjooKT0+VzksZGlzcGF0Y2g6KCk9PnZzLGRyYWc6KCk9PnBiLGRyYWdEaXNhYmxlOigpPT56bSxkcmFnRW5hYmxlOigpPT5GbSxkc3Y6KCk9Pm9qLGRzdkZvcm1hdDooKT0+V20sZWFzZUJhY2s6KCk9Pk9MLGVhc2VCYWNrSW46KCk9Pk9ZLGVhc2VCYWNrSW5PdXQ6KCk9Pk9MLGVhc2VCYWNrT3V0OigpPT56WSxlYXNlQm91bmNlOigpPT5QXyxlYXNlQm91bmNlSW46KCk9PlJZLGVhc2VCb3VuY2VJbk91dDooKT0+TlksZWFzZUJvdW5jZU91dDooKT0+UF8sZWFzZUNpcmNsZTooKT0+TkwsZWFzZUNpcmNsZUluOigpPT5JWSxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5MLGVhc2VDaXJjbGVPdXQ6KCk9PkxZLGVhc2VDdWJpYzooKT0+eHMsZWFzZUN1YmljSW46KCk9PnhZLGVhc2VDdWJpY0luT3V0OigpPT54cyxlYXNlQ3ViaWNPdXQ6KCk9PmJZLGVhc2VFbGFzdGljOigpPT56TCxlYXNlRWxhc3RpY0luOigpPT5IWSxlYXNlRWxhc3RpY0luT3V0OigpPT5WWSxlYXNlRWxhc3RpY091dDooKT0+ekwsZWFzZUV4cDooKT0+UkwsZWFzZUV4cEluOigpPT5BWSxlYXNlRXhwSW5PdXQ6KCk9PlJMLGVhc2VFeHBPdXQ6KCk9PlBZLGVhc2VMaW5lYXI6KCk9Pl9ZLGVhc2VQb2x5OigpPT5MTCxlYXNlUG9seUluOigpPT5TWSxlYXNlUG9seUluT3V0OigpPT5MTCxlYXNlUG9seU91dDooKT0+TVksZWFzZVF1YWQ6KCk9PklMLGVhc2VRdWFkSW46KCk9PnlZLGVhc2VRdWFkSW5PdXQ6KCk9PklMLGVhc2VRdWFkT3V0OigpPT52WSxlYXNlU2luOigpPT5rTCxlYXNlU2luSW46KCk9PkVZLGVhc2VTaW5Jbk91dDooKT0+a0wsZWFzZVNpbk91dDooKT0+VFksZW50cmllczooKT0+YTF0LGV2ZW50OigpPT5xdCxleHRlbnQ6KCk9PmFhLGZvcmNlQ2VudGVyOigpPT5WMXQsZm9yY2VDb2xsaWRlOigpPT5heHQsZm9yY2VMaW5rOigpPT5seHQsZm9yY2VNYW55Qm9keTooKT0+Znh0LGZvcmNlUmFkaWFsOigpPT5weHQsZm9yY2VTaW11bGF0aW9uOigpPT5oeHQsZm9yY2VYOigpPT5keHQsZm9yY2VZOigpPT5teHQsZm9ybWF0OigpPT54bixmb3JtYXREZWZhdWx0TG9jYWxlOigpPT5uayxmb3JtYXRMb2NhbGU6KCk9PmVrLGZvcm1hdFByZWZpeDooKT0+V0UsZm9ybWF0U3BlY2lmaWVyOigpPT5McCxnZW9BbGJlcnM6KCk9PlVrLGdlb0FsYmVyc1VzYTooKT0+Q2J0LGdlb0FyZWE6KCk9Pkl4dCxnZW9BemltdXRoYWxFcXVhbEFyZWE6KCk9PkFidCxnZW9BemltdXRoYWxFcXVhbEFyZWFSYXc6KCk9PkdrLGdlb0F6aW11dGhhbEVxdWlkaXN0YW50OigpPT5QYnQsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc6KCk9PldrLGdlb0JvdW5kczooKT0+Rnh0LGdlb0NlbnRyb2lkOigpPT5HeHQsZ2VvQ2lyY2xlOigpPT4keHQsZ2VvQ2xpcEFudGltZXJpZGlhbjooKT0+ZTUsZ2VvQ2xpcENpcmNsZTooKT0+QWssZ2VvQ2xpcEV4dGVudDooKT0+Snh0LGdlb0NsaXBSZWN0YW5nbGU6KCk9PkRwLGdlb0NvbmljQ29uZm9ybWFsOigpPT5MYnQsZ2VvQ29uaWNDb25mb3JtYWxSYXc6KCk9PmpqLGdlb0NvbmljRXF1YWxBcmVhOigpPT5XXyxnZW9Db25pY0VxdWFsQXJlYVJhdzooKT0+V2osZ2VvQ29uaWNFcXVpZGlzdGFudDooKT0+UmJ0LGdlb0NvbmljRXF1aWRpc3RhbnRSYXc6KCk9PlhqLGdlb0NvbnRhaW5zOigpPT5vYnQsZ2VvRGlzdGFuY2U6KCk9Pk5iLGdlb0VxdWFsRWFydGg6KCk9Pk5idCxnZW9FcXVhbEVhcnRoUmF3OigpPT5YayxnZW9FcXVpcmVjdGFuZ3VsYXI6KCk9PmtidCxnZW9FcXVpcmVjdGFuZ3VsYXJSYXc6KCk9PmpfLGdlb0dub21vbmljOigpPT5EYnQsZ2VvR25vbW9uaWNSYXc6KCk9PiRrLGdlb0dyYXRpY3VsZTooKT0+TmssZ2VvR3JhdGljdWxlMTA6KCk9PmxidCxnZW9JZGVudGl0eTooKT0+T2J0LGdlb0ludGVycG9sYXRlOigpPT5jYnQsZ2VvTGVuZ3RoOigpPT5rayxnZW9NZXJjYXRvcjooKT0+SWJ0LGdlb01lcmNhdG9yUmF3OigpPT5ZXyxnZW9OYXR1cmFsRWFydGgxOigpPT56YnQsZ2VvTmF0dXJhbEVhcnRoMVJhdzooKT0+S2ssZ2VvT3J0aG9ncmFwaGljOigpPT5GYnQsZ2VvT3J0aG9ncmFwaGljUmF3OigpPT5aayxnZW9QYXRoOigpPT53YnQsZ2VvUHJvamVjdGlvbjooKT0+U2ksZ2VvUHJvamVjdGlvbk11dGF0b3I6KCk9Pmw1LGdlb1JvdGF0aW9uOigpPT53ayxnZW9TdGVyZW9ncmFwaGljOigpPT5CYnQsZ2VvU3RlcmVvZ3JhcGhpY1JhdzooKT0+SmssZ2VvU3RyZWFtOigpPT52byxnZW9UcmFuc2Zvcm06KCk9PlNidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3I6KCk9PkhidCxnZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc6KCk9PlFrLGdyYXk6KCk9PnZ5dCxoY2w6KCk9PmdiLGhpZXJhcmNoeTooKT0+cDUsaGlzdG9ncmFtOigpPT5KMHQsaHNsOigpPT5WbSxodG1sOigpPT5CMXQsaW1hZ2U6KCk9Pk8xdCxpbnRlcnBvbGF0ZTooKT0+bmMsaW50ZXJwb2xhdGVBcnJheTooKT0+THl0LGludGVycG9sYXRlQmFzaXM6KCk9PmxMLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PmNMLGludGVycG9sYXRlQmx1ZXM6KCk9PmdTdCxpbnRlcnBvbGF0ZUJyQkc6KCk9PiR3dCxpbnRlcnBvbGF0ZUJ1R246KCk9PmlTdCxpbnRlcnBvbGF0ZUJ1UHU6KCk9Pm9TdCxpbnRlcnBvbGF0ZUNpdmlkaXM6KCk9PndTdCxpbnRlcnBvbGF0ZUNvb2w6KCk9PkVTdCxpbnRlcnBvbGF0ZUN1YmVoZWxpeDooKT0+WHl0LGludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdDooKT0+U1N0LGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZzooKT0+RV8saW50ZXJwb2xhdGVEYXRlOigpPT5mTCxpbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5reXQsaW50ZXJwb2xhdGVHbkJ1OigpPT5hU3QsaW50ZXJwb2xhdGVHcmVlbnM6KCk9Pl9TdCxpbnRlcnBvbGF0ZUdyZXlzOigpPT55U3QsaW50ZXJwb2xhdGVIY2w6KCk9Pld5dCxpbnRlcnBvbGF0ZUhjbExvbmc6KCk9Pll5dCxpbnRlcnBvbGF0ZUhzbDooKT0+VXl0LGludGVycG9sYXRlSHNsTG9uZzooKT0+cXl0LGludGVycG9sYXRlSHVlOigpPT5SeXQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5MU3QsaW50ZXJwb2xhdGVMYWI6KCk9Pk1fLGludGVycG9sYXRlTWFnbWE6KCk9PklTdCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+emksaW50ZXJwb2xhdGVOdW1iZXJBcnJheTooKT0+eWIsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PnBMLGludGVycG9sYXRlT3JSZDooKT0+c1N0LGludGVycG9sYXRlT3JhbmdlczooKT0+YlN0LGludGVycG9sYXRlUFJHbjooKT0+S3d0LGludGVycG9sYXRlUGlZRzooKT0+Wnd0LGludGVycG9sYXRlUGxhc21hOigpPT5rU3QsaW50ZXJwb2xhdGVQdUJ1OigpPT5jU3QsaW50ZXJwb2xhdGVQdUJ1R246KCk9PmxTdCxpbnRlcnBvbGF0ZVB1T3I6KCk9Pkp3dCxpbnRlcnBvbGF0ZVB1UmQ6KCk9PnVTdCxpbnRlcnBvbGF0ZVB1cnBsZXM6KCk9PnZTdCxpbnRlcnBvbGF0ZVJhaW5ib3c6KCk9PlRTdCxpbnRlcnBvbGF0ZVJkQnU6KCk9PlF3dCxpbnRlcnBvbGF0ZVJkR3k6KCk9PnRTdCxpbnRlcnBvbGF0ZVJkUHU6KCk9PmhTdCxpbnRlcnBvbGF0ZVJkWWxCdTooKT0+ZVN0LGludGVycG9sYXRlUmRZbEduOigpPT5yU3QsaW50ZXJwb2xhdGVSZWRzOigpPT54U3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnFtLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnVMLGludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQ6KCk9Pkl5dCxpbnRlcnBvbGF0ZVJvdW5kOigpPT5kTCxpbnRlcnBvbGF0ZVNpbmVib3c6KCk9PkNTdCxpbnRlcnBvbGF0ZVNwZWN0cmFsOigpPT5uU3QsaW50ZXJwb2xhdGVTdHJpbmc6KCk9PnZiLGludGVycG9sYXRlVHJhbnNmb3JtQ3NzOigpPT5fTCxpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZzooKT0+eUwsaW50ZXJwb2xhdGVUdXJibzooKT0+QVN0LGludGVycG9sYXRlVmlyaWRpczooKT0+UFN0LGludGVycG9sYXRlV2FybTooKT0+TVN0LGludGVycG9sYXRlWWxHbjooKT0+cFN0LGludGVycG9sYXRlWWxHbkJ1OigpPT5mU3QsaW50ZXJwb2xhdGVZbE9yQnI6KCk9PmRTdCxpbnRlcnBvbGF0ZVlsT3JSZDooKT0+bVN0LGludGVycG9sYXRlWm9vbTooKT0+dkwsaW50ZXJydXB0OigpPT5odSxpbnRlcnZhbDooKT0+UXl0LGlzb0Zvcm1hdDooKT0+Tnd0LGlzb1BhcnNlOigpPT5Ed3QsanNvbjooKT0+ejF0LGtleXM6KCk9PiRMLGxhYjooKT0+d18sbGNoOigpPT5ieXQsbGluZTooKT0+dnUsbGluZVJhZGlhbDooKT0+aSQsbGlua0hvcml6b250YWw6KCk9PlZTdCxsaW5rUmFkaWFsOigpPT5xU3QsbGlua1ZlcnRpY2FsOigpPT5VU3QsbG9jYWw6KCk9PmVMLG1hcDooKT0+SmksbWF0Y2hlcjooKT0+dWIsbWF4OigpPT5sdSxtZWFuOigpPT5lX3QsbWVkaWFuOigpPT5yX3QsbWVyZ2U6KCk9PkltLG1pbjooKT0+TG0sbW91c2U6KCk9PnpvLG5hbWVzcGFjZTooKT0+UGgsbmFtZXNwYWNlczooKT0+U0UsbmVzdDooKT0+SnZ0LG5vdzooKT0+QXAscGFjazooKT0+dTJ0LHBhY2tFbmNsb3NlOigpPT5lOCxwYWNrU2libGluZ3M6KCk9PmEydCxwYWlyczooKT0+WTB0LHBhcnRpdGlvbjooKT0+aDJ0LHBhdGg6KCk9PmJzLHBlcm11dGU6KCk9Pm5fdCxwaWU6KCk9PkJTdCxwaWVjZXdpc2U6KCk9PmRZLHBvaW50UmFkaWFsOigpPT5seSxwb2x5Z29uQXJlYTooKT0+eDJ0LHBvbHlnb25DZW50cm9pZDooKT0+YjJ0LHBvbHlnb25Db250YWluczooKT0+RTJ0LHBvbHlnb25IdWxsOigpPT5NMnQscG9seWdvbkxlbmd0aDooKT0+VDJ0LHByZWNpc2lvbkZpeGVkOigpPT5payxwcmVjaXNpb25QcmVmaXg6KCk9Pm9rLHByZWNpc2lvblJvdW5kOigpPT5hayxxdWFkdHJlZTooKT0+emgscXVhbnRpbGU6KCk9PnNhLHF1YW50aXplOigpPT4keXQscmFkaWFsQXJlYTooKT0+byQscmFkaWFsTGluZTooKT0+aSQscmFuZG9tQmF0ZXM6KCk9PlAydCxyYW5kb21FeHBvbmVudGlhbDooKT0+STJ0LHJhbmRvbUlyd2luSGFsbDooKT0+czgscmFuZG9tTG9nTm9ybWFsOigpPT5BMnQscmFuZG9tTm9ybWFsOigpPT5hOCxyYW5kb21Vbmlmb3JtOigpPT5DMnQscmFuZ2U6KCk9PklyLHJnYjooKT0+Y3UscmliYm9uOigpPT5YdnQsc2NhbGVCYW5kOigpPT5RbSxzY2FsZURpdmVyZ2luZzooKT0+STgsc2NhbGVEaXZlcmdpbmdMb2c6KCk9PkNYLHNjYWxlRGl2ZXJnaW5nUG93OigpPT5MOCxzY2FsZURpdmVyZ2luZ1NxcnQ6KCk9PkJ3dCxzY2FsZURpdmVyZ2luZ1N5bWxvZzooKT0+QVgsc2NhbGVJZGVudGl0eTooKT0+dTgsc2NhbGVJbXBsaWNpdDooKT0+bDgsc2NhbGVMaW5lYXI6KCk9Pk9uLHNjYWxlTG9nOigpPT5jYyxzY2FsZU9yZGluYWw6KCk9Pmd1LHNjYWxlUG9pbnQ6KCk9PnRnLHNjYWxlUG93OigpPT5LXyxzY2FsZVF1YW50aWxlOigpPT5lZyxzY2FsZVF1YW50aXplOigpPT5xYixzY2FsZVNlcXVlbnRpYWw6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbExvZzooKT0+RVgsc2NhbGVTZXF1ZW50aWFsUG93OigpPT5DOCxzY2FsZVNlcXVlbnRpYWxRdWFudGlsZTooKT0+QTgsc2NhbGVTZXF1ZW50aWFsU3FydDooKT0+Rnd0LHNjYWxlU2VxdWVudGlhbFN5bWxvZzooKT0+VFgsc2NhbGVTcXJ0OigpPT5VMnQsc2NhbGVTeW1sb2c6KCk9PmY4LHNjYWxlVGhyZXNob2xkOigpPT5wOCxzY2FsZVRpbWU6KCk9PlliLHNjYWxlVXRjOigpPT56d3Qsc2NhbjooKT0+aV90LHNjaGVtZUFjY2VudDooKT0+SHd0LHNjaGVtZUJsdWVzOigpPT5LWCxzY2hlbWVCckJHOigpPT5QWCxzY2hlbWVCdUduOigpPT5GWCxzY2hlbWVCdVB1OigpPT5CWCxzY2hlbWVDYXRlZ29yeTEwOigpPT5qYixzY2hlbWVEYXJrMjooKT0+Vnd0LHNjaGVtZUduQnU6KCk9PkhYLHNjaGVtZUdyZWVuczooKT0+Wlgsc2NoZW1lR3JleXM6KCk9PkpYLHNjaGVtZU9yUmQ6KCk9PlZYLHNjaGVtZU9yYW5nZXM6KCk9PmUkLHNjaGVtZVBSR246KCk9PklYLHNjaGVtZVBhaXJlZDooKT0+VXd0LHNjaGVtZVBhc3RlbDE6KCk9PnF3dCxzY2hlbWVQYXN0ZWwyOigpPT5Hd3Qsc2NoZW1lUGlZRzooKT0+TFgsc2NoZW1lUHVCdTooKT0+cVgsc2NoZW1lUHVCdUduOigpPT5VWCxzY2hlbWVQdU9yOigpPT5rWCxzY2hlbWVQdVJkOigpPT5HWCxzY2hlbWVQdXJwbGVzOigpPT5RWCxzY2hlbWVSZEJ1OigpPT5SWCxzY2hlbWVSZEd5OigpPT5OWCxzY2hlbWVSZFB1OigpPT5XWCxzY2hlbWVSZFlsQnU6KCk9PkRYLHNjaGVtZVJkWWxHbjooKT0+T1gsc2NoZW1lUmVkczooKT0+dCQsc2NoZW1lU2V0MTooKT0+V3d0LHNjaGVtZVNldDI6KCk9Pll3dCxzY2hlbWVTZXQzOigpPT5qd3Qsc2NoZW1lU3BlY3RyYWw6KCk9PnpYLHNjaGVtZVRhYmxlYXUxMDooKT0+WHd0LHNjaGVtZVlsR246KCk9PmpYLHNjaGVtZVlsR25CdTooKT0+WVgsc2NoZW1lWWxPckJyOigpPT5YWCxzY2hlbWVZbE9yUmQ6KCk9PiRYLHNlbGVjdDooKT0+SHQsc2VsZWN0QWxsOigpPT5FcCxzZWxlY3Rpb246KCk9PkloLHNlbGVjdG9yOigpPT5ObSxzZWxlY3RvckFsbDooKT0+Y2Isc2V0OigpPT5lMXQsc2h1ZmZsZTooKT0+b190LHN0YWNrOigpPT5NM3Qsc3RhY2tPZmZzZXREaXZlcmdpbmc6KCk9PlQzdCxzdGFja09mZnNldEV4cGFuZDooKT0+RTN0LHN0YWNrT2Zmc2V0Tm9uZTooKT0+eHUsc3RhY2tPZmZzZXRTaWxob3VldHRlOigpPT5DM3Qsc3RhY2tPZmZzZXRXaWdnbGU6KCk9PkEzdCxzdGFja09yZGVyQXBwZWFyYW5jZTooKT0+Wjgsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Sjgsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PlAzdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5JM3Qsc3RhY2tPcmRlck5vbmU6KCk9PmJ1LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5MM3Qsc3RyYXRpZnk6KCk9PmQydCxzdHlsZTooKT0+U3Asc3VtOigpPT5hX3Qsc3ZnOigpPT5IMXQsc3ltYm9sOigpPT5qU3Qsc3ltYm9sQ2lyY2xlOigpPT5rNSxzeW1ib2xDcm9zczooKT0+Qjgsc3ltYm9sRGlhbW9uZDooKT0+SDgsc3ltYm9sU3F1YXJlOigpPT5VOCxzeW1ib2xTdGFyOigpPT5WOCxzeW1ib2xUcmlhbmdsZTooKT0+cTgsc3ltYm9sV3llOigpPT5HOCxzeW1ib2xzOigpPT5ZU3QsdGV4dDooKT0+RF8sdGhyZXNob2xkRnJlZWRtYW5EaWFjb25pczooKT0+UTB0LHRocmVzaG9sZFNjb3R0OigpPT50X3QsdGhyZXNob2xkU3R1cmdlczooKT0+c2IsdGlja0Zvcm1hdDooKT0+YzgsdGlja0luY3JlbWVudDooKT0+eF8sdGlja1N0ZXA6KCk9PnRsLHRpY2tzOigpPT5hYix0aW1lRGF5OigpPT50eSx0aW1lRGF5czooKT0+JDJ0LHRpbWVGb3JtYXQ6KCk9Pk01LHRpbWVGb3JtYXREZWZhdWx0TG9jYWxlOigpPT5TOCx0aW1lRm9ybWF0TG9jYWxlOigpPT5TNSx0aW1lRnJpZGF5OigpPT51WCx0aW1lRnJpZGF5czooKT0+dHd0LHRpbWVIb3VyOigpPT55OCx0aW1lSG91cnM6KCk9PmoydCx0aW1lSW50ZXJ2YWw6KCk9PmJyLHRpbWVNaWxsaXNlY29uZDooKT0+Wl8sdGltZU1pbGxpc2Vjb25kczooKT0+YVgsdGltZU1pbnV0ZTooKT0+XzgsdGltZU1pbnV0ZXM6KCk9PlcydCx0aW1lTW9uZGF5OigpPT5yeSx0aW1lTW9uZGF5czooKT0+SzJ0LHRpbWVNb250aDooKT0+djgsdGltZU1vbnRoczooKT0+bnd0LHRpbWVQYXJzZTooKT0+d1gsdGltZVNhdHVyZGF5OigpPT5oWCx0aW1lU2F0dXJkYXlzOigpPT5ld3QsdGltZVNlY29uZDooKT0+UV8sdGltZVNlY29uZHM6KCk9PnNYLHRpbWVTdW5kYXk6KCk9PnJnLHRpbWVTdW5kYXlzOigpPT5mWCx0aW1lVGh1cnNkYXk6KCk9PnpwLHRpbWVUaHVyc2RheXM6KCk9PlEydCx0aW1lVHVlc2RheTooKT0+bFgsdGltZVR1ZXNkYXlzOigpPT5aMnQsdGltZVdlZG5lc2RheTooKT0+Y1gsdGltZVdlZG5lc2RheXM6KCk9PkoydCx0aW1lV2VlazooKT0+cmcsdGltZVdlZWtzOigpPT5mWCx0aW1lWWVhcjooKT0+R2gsdGltZVllYXJzOigpPT5pd3QsdGltZW91dDooKT0+ekUsdGltZXI6KCk9PkFfLHRpbWVyRmx1c2g6KCk9PmdZLHRvdWNoOigpPT5UcCx0b3VjaGVzOigpPT5peXQsdHJhbnNpdGlvbjooKT0+UEwsdHJhbnNwb3NlOigpPT5ZOSx0cmVlOigpPT5tMnQsdHJlZW1hcDooKT0+ZzJ0LHRyZWVtYXBCaW5hcnk6KCk9Pl8ydCx0cmVlbWFwRGljZTooKT0+VWgsdHJlZW1hcFJlc3F1YXJpZnk6KCk9PnYydCx0cmVlbWFwU2xpY2U6KCk9PkptLHRyZWVtYXBTbGljZURpY2U6KCk9PnkydCx0cmVlbWFwU3F1YXJpZnk6KCk9Pm84LHRzdjooKT0+RDF0LHRzdkZvcm1hdDooKT0+TTF0LHRzdkZvcm1hdEJvZHk6KCk9PkUxdCx0c3ZGb3JtYXRSb3c6KCk9PkMxdCx0c3ZGb3JtYXRSb3dzOigpPT5UMXQsdHN2Rm9ybWF0VmFsdWU6KCk9PkExdCx0c3ZQYXJzZTooKT0+QWIsdHN2UGFyc2VSb3dzOigpPT5TMXQsdXRjRGF5OigpPT5ueSx1dGNEYXlzOigpPT51d3QsdXRjRm9ybWF0OigpPT5heSx1dGNGcmlkYXk6KCk9PmdYLHV0Y0ZyaWRheXM6KCk9Pm13dCx1dGNIb3VyOigpPT5iOCx1dGNIb3VyczooKT0+bHd0LHV0Y01pbGxpc2Vjb25kOigpPT5aXyx1dGNNaWxsaXNlY29uZHM6KCk9PmFYLHV0Y01pbnV0ZTooKT0+eDgsdXRjTWludXRlczooKT0+YXd0LHV0Y01vbmRheTooKT0+b3ksdXRjTW9uZGF5czooKT0+aHd0LHV0Y01vbnRoOigpPT53OCx1dGNNb250aHM6KCk9Pnl3dCx1dGNQYXJzZTooKT0+RTUsdXRjU2F0dXJkYXk6KCk9Pl9YLHV0Y1NhdHVyZGF5czooKT0+Z3d0LHV0Y1NlY29uZDooKT0+UV8sdXRjU2Vjb25kczooKT0+c1gsdXRjU3VuZGF5OigpPT5uZyx1dGNTdW5kYXlzOigpPT55WCx1dGNUaHVyc2RheTooKT0+RnAsdXRjVGh1cnNkYXlzOigpPT5kd3QsdXRjVHVlc2RheTooKT0+ZFgsdXRjVHVlc2RheXM6KCk9PmZ3dCx1dGNXZWRuZXNkYXk6KCk9Pm1YLHV0Y1dlZG5lc2RheXM6KCk9PnB3dCx1dGNXZWVrOigpPT5uZyx1dGNXZWVrczooKT0+eVgsdXRjWWVhcjooKT0+V2gsdXRjWWVhcnM6KCk9PnZ3dCx2YWx1ZXM6KCk9PmkxdCx2YXJpYW5jZTooKT0+RzksdmVyc2lvbjooKT0+cTB0LHZvcm9ub2k6KCk9PlkzdCx3aW5kb3c6KCk9PmhiLHhtbDooKT0+RjF0LHppcDooKT0+c190LHpvb206KCk9PmVSLHpvb21JZGVudGl0eTooKT0+WGgsem9vbVRyYW5zZm9ybTooKT0+aTJ9KTt2YXIgcTB0PSI1LjcuMCI7ZnVuY3Rpb24gb2EoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gb2IoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9aTJlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gaTJlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBvYShlKHQpLHIpfX12YXIgRzB0PW9iKG9hKSxXVz1HMHQucmlnaHQsVzB0PUcwdC5sZWZ0LHlzPVdXO2Z1bmN0aW9uIFkwdChlLHQpe3Q9PW51bGwmJih0PVlXKTtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT10KGksaT1lWysrcl0pO3JldHVybiBvfWZ1bmN0aW9uIFlXKGUsdCl7cmV0dXJuW2UsdF19ZnVuY3Rpb24gcTkoZSx0LHIpe3ZhciBuPWUubGVuZ3RoLGk9dC5sZW5ndGgsbz1uZXcgQXJyYXkobippKSxhLHMsbCxjO2ZvcihyPT1udWxsJiYocj1ZVyksYT1sPTA7YTxuOysrYSlmb3IoYz1lW2FdLHM9MDtzPGk7KytzLCsrbClvW2xdPXIoYyx0W3NdKTtyZXR1cm4gb31mdW5jdGlvbiBqMHQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gUXMoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX1mdW5jdGlvbiBHOShlLHQpe3ZhciByPWUubGVuZ3RoLG49MCxpPS0xLG89MCxhLHMsbD0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4oYT1RcyhlW2ldKSl8fChzPWEtbyxvKz1zLysrbixsKz1zKihhLW8pKTtlbHNlIGZvcig7KytpPHI7KWlzTmFOKGE9UXModChlW2ldLGksZSkpKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2lmKG4+MSlyZXR1cm4gbC8obi0xKX1mdW5jdGlvbiBXOShlLHQpe3ZhciByPUc5KGUsdCk7cmV0dXJuIHImJk1hdGguc3FydChyKX1mdW5jdGlvbiBhYShlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvLGE7aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89YT1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJihvPmkmJihvPWkpLGE8aSYmKGE9aSkpO3JldHVybltvLGFdfXZhciBYMHQ9QXJyYXkucHJvdG90eXBlLCQwdD1YMHQuc2xpY2UsSzB0PVgwdC5tYXA7ZnVuY3Rpb24gYkUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFowdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBJcihlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgalc9TWF0aC5zcXJ0KDUwKSxYVz1NYXRoLnNxcnQoMTApLCRXPU1hdGguc3FydCgyKTtmdW5jdGlvbiBhYihlLHQscil7dmFyIG4saT0tMSxvLGEscztpZih0PSt0LGU9K2Uscj0rcixlPT09dCYmcj4wKXJldHVybltlXTtpZigobj10PGUpJiYobz1lLGU9dCx0PW8pLChzPXhfKGUsdCxyKSk9PT0wfHwhaXNGaW5pdGUocykpcmV0dXJuW107aWYocz4wKWZvcihlPU1hdGguY2VpbChlL3MpLHQ9TWF0aC5mbG9vcih0L3MpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtZSsxKSk7KytpPG87KWFbaV09KGUraSkqcztlbHNlIGZvcihlPU1hdGguZmxvb3IoZSpzKSx0PU1hdGguY2VpbCh0KnMpLGE9bmV3IEFycmF5KG89TWF0aC5jZWlsKGUtdCsxKSk7KytpPG87KWFbaV09KGUtaSkvcztyZXR1cm4gbiYmYS5yZXZlcnNlKCksYX1mdW5jdGlvbiB4XyhlLHQscil7dmFyIG49KHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSxvPW4vTWF0aC5wb3coMTAsaSk7cmV0dXJuIGk+PTA/KG8+PWpXPzEwOm8+PVhXPzU6bz49JFc/MjoxKSpNYXRoLnBvdygxMCxpKTotTWF0aC5wb3coMTAsLWkpLyhvPj1qVz8xMDpvPj1YVz81Om8+PSRXPzI6MSl9ZnVuY3Rpb24gdGwoZSx0LHIpe3ZhciBuPU1hdGguYWJzKHQtZSkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksbz1uL2k7cmV0dXJuIG8+PWpXP2kqPTEwOm8+PVhXP2kqPTU6bz49JFcmJihpKj0yKSx0PGU/LWk6aX1mdW5jdGlvbiBzYihlKXtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMikrMX1mdW5jdGlvbiBKMHQoKXt2YXIgZT1aMHQsdD1hYSxyPXNiO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPXRsKHUsaCxmKSxmPUlyKE1hdGguY2VpbCh1L2YpKmYsaCxmKSk7Zm9yKHZhciBwPWYubGVuZ3RoO2ZbMF08PXU7KWYuc2hpZnQoKSwtLXA7Zm9yKDtmW3AtMV0+aDspZi5wb3AoKSwtLXA7dmFyIGQ9bmV3IEFycmF5KHArMSksZztmb3Iobz0wO288PXA7KytvKWc9ZFtvXT1bXSxnLngwPW8+MD9mW28tMV06dSxnLngxPW88cD9mW29dOmg7Zm9yKG89MDtvPGE7KytvKXM9bFtvXSx1PD1zJiZzPD1oJiZkW3lzKGYscywwLHApXS5wdXNoKGlbb10pO3JldHVybiBkfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6YkUoaSksbik6ZX0sbi5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpiRShbaVswXSxpWzFdXSksbik6dH0sbi50aHJlc2hvbGRzPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6QXJyYXkuaXNBcnJheShpKT9iRSgkMHQuY2FsbChpKSk6YkUoaSksbik6cn0sbn1mdW5jdGlvbiBzYShlLHQscil7aWYocj09bnVsbCYmKHI9UXMpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX1mdW5jdGlvbiBRMHQoZSx0LHIpe3JldHVybiBlPUswdC5jYWxsKGUsUXMpLnNvcnQob2EpLE1hdGguY2VpbCgoci10KS8oMiooc2EoZSwuNzUpLXNhKGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX1mdW5jdGlvbiB0X3QoZSx0LHIpe3JldHVybiBNYXRoLmNlaWwoKHItdCkvKDMuNSpXOShlKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIGx1KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIGVfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1RcyhlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPVFzKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufWZ1bmN0aW9uIHJfdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPVtdO2lmKHQ9PW51bGwpZm9yKDsrK248cjspaXNOYU4oaT1RcyhlW25dKSl8fG8ucHVzaChpKTtlbHNlIGZvcig7KytuPHI7KWlzTmFOKGk9UXModChlW25dLG4sZSkpKXx8by5wdXNoKGkpO3JldHVybiBzYShvLnNvcnQob2EpLC41KX1mdW5jdGlvbiBJbShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuPS0xLGk9MCxvLGE7KytuPHQ7KWkrPWVbbl0ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheShpKTstLXQ+PTA7KWZvcihhPWVbdF0scj1hLmxlbmd0aDstLXI+PTA7KW9bLS1pXT1hW3JdO3JldHVybiBvfWZ1bmN0aW9uIExtKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJm8+aSYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZvPmkmJihvPWkpO3JldHVybiBvfWZ1bmN0aW9uIG5fdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn1mdW5jdGlvbiBpX3QoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9b2EpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX1mdW5jdGlvbiBvX3QoZSx0LHIpe2Zvcih2YXIgbj0ocj09bnVsbD9lLmxlbmd0aDpyKS0odD10PT1udWxsPzA6K3QpLGksbztuOylvPU1hdGgucmFuZG9tKCkqbi0tfDAsaT1lW24rdF0sZVtuK3RdPWVbbyt0XSxlW28rdF09aTtyZXR1cm4gZX1mdW5jdGlvbiBhX3QoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz0wO2lmKHQ9PW51bGwpZm9yKDsrK248cjspKGk9K2Vbbl0pJiYobys9aSk7ZWxzZSBmb3IoOysrbjxyOykoaT0rdChlW25dLG4sZSkpJiYobys9aSk7cmV0dXJuIG99ZnVuY3Rpb24gWTkoZSl7aWYoIShvPWUubGVuZ3RoKSlyZXR1cm5bXTtmb3IodmFyIHQ9LTEscj1MbShlLG8yZSksbj1uZXcgQXJyYXkocik7Kyt0PHI7KWZvcih2YXIgaT0tMSxvLGE9blt0XT1uZXcgQXJyYXkobyk7KytpPG87KWFbaV09ZVtpXVt0XTtyZXR1cm4gbn1mdW5jdGlvbiBvMmUoZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIHNfdCgpe3JldHVybiBZOShhcmd1bWVudHMpfXZhciBqOT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gbF90KGUpe3JldHVybiBlfXZhciBYOT0xLCQ5PTIsS1c9Myx3RT00LGNfdD0xZS02O2Z1bmN0aW9uIGEyZShlKXtyZXR1cm4idHJhbnNsYXRlKCIrKGUrLjUpKyIsMCkifWZ1bmN0aW9uIHMyZShlKXtyZXR1cm4idHJhbnNsYXRlKDAsIisoZSsuNSkrIikifWZ1bmN0aW9uIGwyZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuK2UodCl9fWZ1bmN0aW9uIGMyZShlKXt2YXIgdD1NYXRoLm1heCgwLGUuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gZS5yb3VuZCgpJiYodD1NYXRoLnJvdW5kKHQpKSxmdW5jdGlvbihyKXtyZXR1cm4rZShyKSt0fX1mdW5jdGlvbiB1MmUoKXtyZXR1cm4hdGhpcy5fX2F4aXN9ZnVuY3Rpb24gSzkoZSx0KXt2YXIgcj1bXSxuPW51bGwsaT1udWxsLG89NixhPTYscz0zLGw9ZT09PVg5fHxlPT09d0U/LTE6MSxjPWU9PT13RXx8ZT09PSQ5PyJ4IjoieSIsdT1lPT09WDl8fGU9PT1LVz9hMmU6czJlO2Z1bmN0aW9uIGgoZil7dmFyIHA9bj09bnVsbD90LnRpY2tzP3QudGlja3MuYXBwbHkodCxyKTp0LmRvbWFpbigpOm4sZD1pPT1udWxsP3QudGlja0Zvcm1hdD90LnRpY2tGb3JtYXQuYXBwbHkodCxyKTpsX3Q6aSxnPU1hdGgubWF4KG8sMCkrcyxfPXQucmFuZ2UoKSx5PStfWzBdKy41LHg9K19bXy5sZW5ndGgtMV0rLjUsYj0odC5iYW5kd2lkdGg/YzJlOmwyZSkodC5jb3B5KCkpLFM9Zi5zZWxlY3Rpb24/Zi5zZWxlY3Rpb24oKTpmLEM9Uy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksUD1TLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKHAsdCkub3JkZXIoKSxrPVAuZXhpdCgpLE89UC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLEQ9UC5zZWxlY3QoImxpbmUiKSxCPVAuc2VsZWN0KCJ0ZXh0Iik7Qz1DLm1lcmdlKEMuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLFA9UC5tZXJnZShPKSxEPUQubWVyZ2UoTy5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCpnKS5hdHRyKCJkeSIsZT09PVg5PyIwZW0iOmU9PT1LVz8iMC43MWVtIjoiMC4zMmVtIikpLGYhPT1TJiYoQz1DLnRyYW5zaXRpb24oZiksUD1QLnRyYW5zaXRpb24oZiksRD1ELnRyYW5zaXRpb24oZiksQj1CLnRyYW5zaXRpb24oZiksaz1rLnRyYW5zaXRpb24oZikuYXR0cigib3BhY2l0eSIsY190KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiBpc0Zpbml0ZShJPWIoSSkpP3UoSSk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSksTy5hdHRyKCJvcGFjaXR5IixjX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7dmFyIEw9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gdShMJiZpc0Zpbml0ZShMPUwoSSkpP0w6YihJKSl9KSksay5yZW1vdmUoKSxDLmF0dHIoImQiLGU9PT13RXx8ZT09JDk/YT8iTSIrbCphKyIsIit5KyJIMC41ViIreCsiSCIrbCphOiJNMC41LCIreSsiViIreDphPyJNIit5KyIsIitsKmErIlYwLjVIIit4KyJWIitsKmE6Ik0iK3krIiwwLjVIIit4KSxQLmF0dHIoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIHUoYihJKSl9KSxELmF0dHIoYysiMiIsbCpvKSxCLmF0dHIoYyxsKmcpLnRleHQoZCksUy5maWx0ZXIodTJlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoInRleHQtYW5jaG9yIixlPT09JDk/InN0YXJ0IjplPT09d0U/ImVuZCI6Im1pZGRsZSIpLFMuZWFjaChmdW5jdGlvbigpe3RoaXMuX19heGlzPWJ9KX1yZXR1cm4gaC5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1mLGgpOnR9LGgudGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gcj1qOS5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWY9PW51bGw/W106ajkuY2FsbChmKSxoKTpyLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1mPT1udWxsP251bGw6ajkuY2FsbChmKSxoKTpuJiZuLnNsaWNlKCl9LGgudGlja0Zvcm1hdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1mLGgpOml9LGgudGlja1NpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89YT0rZixoKTpvfSxoLnRpY2tTaXplSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2YsaCk6b30saC50aWNrU2l6ZU91dGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStmLGgpOmF9LGgudGlja1BhZGRpbmc9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K2YsaCk6c30saH1mdW5jdGlvbiB1X3QoZSl7cmV0dXJuIEs5KFg5LGUpfWZ1bmN0aW9uIGhfdChlKXtyZXR1cm4gSzkoJDksZSl9ZnVuY3Rpb24gWjkoZSl7cmV0dXJuIEs5KEtXLGUpfWZ1bmN0aW9uIGxiKGUpe3JldHVybiBLOSh3RSxlKX1rbSgpO2ttKCk7dmFyIFE5PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixTRT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6UTkseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBQaChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxTRS5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6U0VbdF0sbG9jYWw6ZX06ZX1mdW5jdGlvbiBkMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1ROSYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09UTk/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIG0yZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBSbShlKXt2YXIgdD1QaChlKTtyZXR1cm4odC5sb2NhbD9tMmU6ZDJlKSh0KX1mdW5jdGlvbiBnMmUoKXt9ZnVuY3Rpb24gTm0oZSl7cmV0dXJuIGU9PW51bGw/ZzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19ZnVuY3Rpb24gbV90KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IE5uKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gXzJlKCl7cmV0dXJuW119ZnVuY3Rpb24gY2IoZSl7cmV0dXJuIGU9PW51bGw/XzJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19ZnVuY3Rpb24gZ190KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgTm4obixpKX1mdW5jdGlvbiB1YihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfX1mdW5jdGlvbiBfX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXViKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBObihuLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRMKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfWZ1bmN0aW9uIHlfdCgpe3JldHVybiBuZXcgTm4odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIE1FKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fU1FLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TUUsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX07ZnVuY3Rpb24gdl90KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgeF90PSIkIjtmdW5jdGlvbiB5MmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IE1FKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiB2MmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD14X3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD14X3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgTUUoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBiX3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P3YyZTp5MmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT12X3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IE5uKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX1mdW5jdGlvbiB3X3QoKXtyZXR1cm4gbmV3IE5uKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodEwpLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIFNfdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX1mdW5jdGlvbiBNX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IE5uKGEsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gRV90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBUX3QoZSl7ZXx8KGU9eDJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IE5uKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB4MmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59ZnVuY3Rpb24gQ190KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIEFfdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfWZ1bmN0aW9uIFBfdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9ZnVuY3Rpb24gSV90KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX1mdW5jdGlvbiBMX3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9ZnVuY3Rpb24ga190KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBiMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIHcyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFMyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIE0yZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBFMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBSX3QoZSx0KXt2YXIgcj1QaChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/dzJlOmIyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1QyZTpFMmU6ci5sb2NhbD9NMmU6UzJlKShyLHQpKX1mdW5jdGlvbiBoYihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gQzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEEyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFAyZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBOX3QoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0MyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9QMmU6QTJlKShlLHQscj09bnVsbD8iIjpyKSk6U3AodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gU3AoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxoYihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBJMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIEwyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gazJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIERfdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0kyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9rMmU6TDJlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX1mdW5jdGlvbiBPX3QoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFpXKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IHpfdChlKX1mdW5jdGlvbiB6X3QoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPU9fdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfXpfdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX07ZnVuY3Rpb24gRl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5hZGQodFtuXSl9ZnVuY3Rpb24gQl90KGUsdCl7Zm9yKHZhciByPVpXKGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gUjJlKGUpe3JldHVybiBmdW5jdGlvbigpe0ZfdCh0aGlzLGUpfX1mdW5jdGlvbiBOMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Ql90KHRoaXMsZSl9fWZ1bmN0aW9uIEQyZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9GX3Q6Ql90KSh0aGlzLGUpfX1mdW5jdGlvbiBIX3QoZSx0KXt2YXIgcj1PX3QoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WlcodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/RDJlOnQ/UjJlOk4yZSkocix0KSl9ZnVuY3Rpb24gTzJlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB6MmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBGMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFZfdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9PMmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0YyZTp6MmUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH1mdW5jdGlvbiBCMmUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBIMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVjJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gVV90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0IyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VjJlOkgyZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH1mdW5jdGlvbiBVMmUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcV90KCl7cmV0dXJuIHRoaXMuZWFjaChVMmUpfWZ1bmN0aW9uIHEyZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIEdfdCgpe3JldHVybiB0aGlzLmVhY2gocTJlKX1mdW5jdGlvbiBXX3QoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpSbShlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBHMmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBZX3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpLG49dD09bnVsbD9HMmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpObSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gVzJlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gal90KCl7cmV0dXJuIHRoaXMuZWFjaChXMmUpfWZ1bmN0aW9uIFkyZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gajJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBYX3QoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/ajJlOlkyZSl9ZnVuY3Rpb24gJF90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgWl90PXt9LHF0PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEtfdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBLX3R8fChaX3Q9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO3ZhciBLX3Q7ZnVuY3Rpb24gWDJlKGUsdCxyKXtyZXR1cm4gZT1KX3QoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gSl90KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cXQ7cXQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7cXQ9aX19fWZ1bmN0aW9uICQyZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gSzJlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFoyZShlLHQscil7dmFyIG49Wl90Lmhhc093blByb3BlcnR5KGUudHlwZSk/WDJlOkpfdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBRX3QoZSx0LHIpe3ZhciBuPSQyZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/WjJlOksyZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBNcChlLHQscixuKXt2YXIgaT1xdDtlLnNvdXJjZUV2ZW50PXF0LHF0PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtxdD1pfX1mdW5jdGlvbiB0eXQoZSx0LHIpe3ZhciBuPWhiKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIEoyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0eXQodGhpcyxlLHQpfX1mdW5jdGlvbiBRMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdHl0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIGV5dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1EyZTpKMmUpKGUsdCkpfXZhciBFRT1bbnVsbF07ZnVuY3Rpb24gTm4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gcnl0KCl7cmV0dXJuIG5ldyBObihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLEVFKX1Obi5wcm90b3R5cGU9cnl0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tm4sc2VsZWN0Om1fdCxzZWxlY3RBbGw6Z190LGZpbHRlcjpfX3QsZGF0YTpiX3QsZW50ZXI6eV90LGV4aXQ6d190LGpvaW46U190LG1lcmdlOk1fdCxvcmRlcjpFX3Qsc29ydDpUX3QsY2FsbDpDX3Qsbm9kZXM6QV90LG5vZGU6UF90LHNpemU6SV90LGVtcHR5OkxfdCxlYWNoOmtfdCxhdHRyOlJfdCxzdHlsZTpOX3QscHJvcGVydHk6RF90LGNsYXNzZWQ6SF90LHRleHQ6Vl90LGh0bWw6VV90LHJhaXNlOnFfdCxsb3dlcjpHX3QsYXBwZW5kOldfdCxpbnNlcnQ6WV90LHJlbW92ZTpqX3QsY2xvbmU6WF90LGRhdHVtOiRfdCxvbjpRX3QsZGlzcGF0Y2g6ZXl0fTt2YXIgSWg9cnl0O2Z1bmN0aW9uIEh0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IE5uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgTm4oW1tlXV0sRUUpfWZ1bmN0aW9uIG55dChlKXtyZXR1cm4gSHQoUm0oZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgdHdlPTA7ZnVuY3Rpb24gZUwoKXtyZXR1cm4gbmV3IEpXfWZ1bmN0aW9uIEpXKCl7dGhpcy5fPSJAIisoKyt0d2UpLnRvU3RyaW5nKDM2KX1KVy5wcm90b3R5cGU9ZUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpKVyxnZXQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuXzshKHQgaW4gZSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZVt0XX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdGhpcy5fXT10fSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuXyBpbiBlJiZkZWxldGUgZVt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTtmdW5jdGlvbiBmYigpe2Zvcih2YXIgZT1xdCx0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfWZ1bmN0aW9uIERtKGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gem8oZSl7dmFyIHQ9ZmIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksRG0oZSx0KX1mdW5jdGlvbiBFcChlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBObihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBObihbZT09bnVsbD9bXTplXSxFRSl9ZnVuY3Rpb24gVHAoZSx0LHIpe2FyZ3VtZW50cy5sZW5ndGg8MyYmKHI9dCx0PWZiKCkuY2hhbmdlZFRvdWNoZXMpO2Zvcih2YXIgbj0wLGk9dD90Lmxlbmd0aDowLG87bjxpOysrbilpZigobz10W25dKS5pZGVudGlmaWVyPT09cilyZXR1cm4gRG0oZSxvKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBpeXQoZSx0KXt0PT1udWxsJiYodD1mYigpLnRvdWNoZXMpO2Zvcih2YXIgcj0wLG49dD90Lmxlbmd0aDowLGk9bmV3IEFycmF5KG4pO3I8bjsrK3IpaVtyXT1EbShlLHRbcl0pO3JldHVybiBpfWZ1bmN0aW9uIHJMKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gT20oKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIHptKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixPbSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixPbSwhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRm0oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUh0KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLE9tLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfWZ1bmN0aW9uIFRFKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBDRShlLHQscixuLGksbyxhLHMsbCxjKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc3ViamVjdD1yLHRoaXMuaWRlbnRpZmllcj1uLHRoaXMuYWN0aXZlPWksdGhpcy54PW8sdGhpcy55PWEsdGhpcy5keD1zLHRoaXMuZHk9bCx0aGlzLl89Y31DRS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIGU9PT10aGlzLl8/dGhpczplfTtmdW5jdGlvbiBld2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiByd2UoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIG53ZShlKXtyZXR1cm4gZT09bnVsbD97eDpxdC54LHk6cXQueX06ZX1mdW5jdGlvbiBpd2UoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gcGIoKXt2YXIgZT1ld2UsdD1yd2Uscj1ud2Usbj1pd2UsaT17fSxvPXZzKCJzdGFydCIsImRyYWciLCJlbmQiKSxhPTAscyxsLGMsdSxoPTA7ZnVuY3Rpb24gZihTKXtTLm9uKCJtb3VzZWRvd24uZHJhZyIscCkuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLF8pLm9uKCJ0b3VjaG1vdmUuZHJhZyIseSkub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIseCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAoKXtpZighKHV8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpe3ZhciBTPWIoIm1vdXNlIix0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx6byx0aGlzLGFyZ3VtZW50cyk7IVN8fChIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWciLGQsITApLm9uKCJtb3VzZXVwLmRyYWciLGcsITApLHptKHF0LnZpZXcpLHJMKCksYz0hMSxzPXF0LmNsaWVudFgsbD1xdC5jbGllbnRZLFMoInN0YXJ0IikpfX1mdW5jdGlvbiBkKCl7aWYoT20oKSwhYyl7dmFyIFM9cXQuY2xpZW50WC1zLEM9cXQuY2xpZW50WS1sO2M9UypTK0MqQz5ofWkubW91c2UoImRyYWciKX1mdW5jdGlvbiBnKCl7SHQocXQudmlldykub24oIm1vdXNlbW92ZS5kcmFnIG1vdXNldXAuZHJhZyIsbnVsbCksRm0ocXQudmlldyxjKSxPbSgpLGkubW91c2UoImVuZCIpfWZ1bmN0aW9uIF8oKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFA9Uy5sZW5ndGgsayxPO2ZvcihrPTA7azxQOysraykoTz1iKFNba10uaWRlbnRpZmllcixDLFRwLHRoaXMsYXJndW1lbnRzKSkmJihyTCgpLE8oInN0YXJ0IikpfX1mdW5jdGlvbiB5KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihPbSgpLGsoImRyYWciKSl9ZnVuY3Rpb24geCgpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2Zvcih1JiZjbGVhclRpbWVvdXQodSksdT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSw1MDApLFA9MDtQPEM7KytQKShrPWlbU1tQXS5pZGVudGlmaWVyXSkmJihyTCgpLGsoImVuZCIpKX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7dmFyIEQ9UChDLFMpLEIsSSxMLFI9by5jb3B5KCk7aWYoISFNcChuZXcgQ0UoZiwiYmVmb3Jlc3RhcnQiLEIsUyxhLERbMF0sRFsxXSwwLDAsUiksZnVuY3Rpb24oKXtyZXR1cm4ocXQuc3ViamVjdD1CPXIuYXBwbHkoayxPKSk9PW51bGw/ITE6KEk9Qi54LURbMF18fDAsTD1CLnktRFsxXXx8MCwhMCl9KSlyZXR1cm4gZnVuY3Rpb24gRih6KXt2YXIgVT1ELFc7c3dpdGNoKHope2Nhc2Uic3RhcnQiOmlbU109RixXPWErKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGlbU10sLS1hO2Nhc2UiZHJhZyI6RD1QKEMsUyksVz1hO2JyZWFrfU1wKG5ldyBDRShmLHosQixTLFcsRFswXStJLERbMV0rTCxEWzBdLVVbMF0sRFsxXS1VWzFdLFIpLFIuYXBwbHksUixbeixrLE9dKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTplfSxmLmNvbnRhaW5lcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnR9LGYuc3ViamVjdD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOlRFKFMpLGYpOnJ9LGYudG91Y2hhYmxlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6VEUoISFTKSxmKTpufSxmLm9uPWZ1bmN0aW9uKCl7dmFyIFM9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIFM9PT1vP2Y6U30sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPShTPStTKSpTLGYpOk1hdGguc3FydChoKX0sZn1mdW5jdGlvbiBDcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gQm0oZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gUmgoKXt9dmFyIEhtPS43LGJfPTEvSG0sZGI9IlxccyooWystXT9cXGQrKVxccyoiLEFFPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGtoPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixvd2U9L14jKFswLTlhLWZdezMsOH0pJC8sYXdlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tkYixkYixkYl0rIlxcKSQiKSxzd2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2toLGtoLGtoXSsiXFwpJCIpLGx3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2RiLGRiLGRiLEFFXSsiXFwpJCIpLGN3ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2toLGtoLGtoLEFFXSsiXFwpJCIpLHV3ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbQUUsa2gsa2hdKyJcXCkkIiksaHdlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQUUsa2gsa2gsQUVdKyJcXCkkIiksb3l0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0NwKFJoLHJjLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmF5dCxmb3JtYXRIZXg6YXl0LGZvcm1hdEhzbDpmd2UsZm9ybWF0UmdiOnN5dCx0b1N0cmluZzpzeXR9KTtmdW5jdGlvbiBheXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBmd2UoKXtyZXR1cm4gZnl0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIHN5dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHJjKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PW93ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2x5dCh0KTpyPT09Mz9uZXcgS2kodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P25MKHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P25MKHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9YXdlLmV4ZWMoZSkpP25ldyBLaSh0WzFdLHRbMl0sdFszXSwxKToodD1zd2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWx3ZS5leGVjKGUpKT9uTCh0WzFdLHRbMl0sdFszXSx0WzRdKToodD1jd2UuZXhlYyhlKSk/bkwodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9dXdlLmV4ZWMoZSkpP2h5dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PWh3ZS5leGVjKGUpKT9oeXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpveXQuaGFzT3duUHJvcGVydHkoZSk/bHl0KG95dFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IEtpKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gbHl0KGUpe3JldHVybiBuZXcgS2koZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG5MKGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgS2koZSx0LHIsbil9ZnVuY3Rpb24gUEUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgS2koZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IEtpfWZ1bmN0aW9uIGN1KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9QRShlKTpuZXcgS2koZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIEtpKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcChLaSxjdSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IEtpKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6Y3l0LGZvcm1hdEhleDpjeXQsZm9ybWF0UmdiOnV5dCx0b1N0cmluZzp1eXR9KSk7ZnVuY3Rpb24gY3l0KCl7cmV0dXJuIiMiK1FXKHRoaXMucikrUVcodGhpcy5nKStRVyh0aGlzLmIpfWZ1bmN0aW9uIHV5dCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBRVyhlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBoeXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBMaChlLHQscixuKX1mdW5jdGlvbiBmeXQoZSl7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBuZXcgTGgoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgUmh8fChlPXJjKGUpKSwhZSlyZXR1cm4gbmV3IExoO2lmKGUgaW5zdGFuY2VvZiBMaClyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBMaChhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIFZtKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9meXQoZSk6bmV3IExoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBMaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoTGgsVm0sQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IExoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgS2kodFkoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksdFkoZSxpLG4pLHRZKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpO2Z1bmN0aW9uIHRZKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBpTD1NYXRoLlBJLzE4MCxvTD0xODAvTWF0aC5QSTt2YXIgYUw9MTgscHl0PS45NjQyMixkeXQ9MSxteXQ9LjgyNTIxLGd5dD00LzI5LG1iPTYvMjksX3l0PTMqbWIqbWIscHdlPW1iKm1iKm1iO2Z1bmN0aW9uIHl5dChlKXtpZihlIGluc3RhbmNlb2YgdXUpcmV0dXJuIG5ldyB1dShlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBOaClyZXR1cm4gd3l0KGUpO2UgaW5zdGFuY2VvZiBLaXx8KGU9UEUoZSkpO3ZhciB0PWlZKGUucikscj1pWShlLmcpLG49aVkoZS5iKSxpPWVZKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvZHl0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1lWSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL3B5dCksYT1lWSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL215dCkpLG5ldyB1dSgxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gdnl0KGUsdCl7cmV0dXJuIG5ldyB1dShlLDAsMCx0PT1udWxsPzE6dCl9ZnVuY3Rpb24gd18oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3l5dChlKTpuZXcgdXUoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHV1KGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1DcCh1dSx3XyxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB1dSh0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIHQ9cHl0KnJZKHQpLGU9ZHl0KnJZKGUpLHI9bXl0KnJZKHIpLG5ldyBLaShuWSgzLjEzMzg1NjEqdC0xLjYxNjg2NjcqZS0uNDkwNjE0NipyKSxuWSgtLjk3ODc2ODQqdCsxLjkxNjE0MTUqZSsuMDMzNDU0KnIpLG5ZKC4wNzE5NDUzKnQtLjIyODk5MTQqZSsxLjQwNTI0MjcqciksdGhpcy5vcGFjaXR5KX19KSk7ZnVuY3Rpb24gZVkoZSl7cmV0dXJuIGU+cHdlP01hdGgucG93KGUsMS8zKTplL195dCtneXR9ZnVuY3Rpb24gclkoZSl7cmV0dXJuIGU+bWI/ZSplKmU6X3l0KihlLWd5dCl9ZnVuY3Rpb24gblkoZSl7cmV0dXJuIDI1NSooZTw9LjAwMzEzMDg/MTIuOTIqZToxLjA1NSpNYXRoLnBvdyhlLDEvMi40KS0uMDU1KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4oZS89MjU1KTw9LjA0MDQ1P2UvMTIuOTI6TWF0aC5wb3coKGUrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiB4eXQoZSl7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBuZXcgTmgoZS5oLGUuYyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgdXV8fChlPXl5dChlKSksZS5hPT09MCYmZS5iPT09MClyZXR1cm4gbmV3IE5oKE5hTiwwPGUubCYmZS5sPDEwMD8wOk5hTixlLmwsZS5vcGFjaXR5KTt2YXIgdD1NYXRoLmF0YW4yKGUuYixlLmEpKm9MO3JldHVybiBuZXcgTmgodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KGUuYSplLmErZS5iKmUuYiksZS5sLGUub3BhY2l0eSl9ZnVuY3Rpb24gYnl0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT94eXQoZSk6bmV3IE5oKHIsdCxlLG49PW51bGw/MTpuKX1mdW5jdGlvbiBnYihlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/eHl0KGUpOm5ldyBOaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gTmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHd5dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgdXUoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTDtyZXR1cm4gbmV3IHV1KGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9Q3AoTmgsZ2IsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgTmgodGhpcy5oLHRoaXMuYyx0aGlzLmwrYUwqKGU9PW51bGw/MTplKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubC1hTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB3eXQodGhpcykucmdiKCl9fSkpO3ZhciBUeXQ9LS4xNDg2MSxvWT0xLjc4Mjc3LGFZPS0uMjkyMjcsc0w9LS45MDY0OSxJRT0xLjk3Mjk0LFN5dD1JRSpzTCxNeXQ9SUUqb1ksRXl0PW9ZKmFZLXNMKlR5dDtmdW5jdGlvbiBkd2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNfKXJldHVybiBuZXcgU18oZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgS2l8fChlPVBFKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oRXl0Km4rU3l0KnQtTXl0KnIpLyhFeXQrU3l0LU15dCksbz1uLWksYT0oSUUqKHItaSktYVkqbykvc0wscz1NYXRoLnNxcnQoYSphK28qbykvKElFKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb0wtMTIwOk5hTjtyZXR1cm4gbmV3IFNfKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGxhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9kd2UoZSk6bmV3IFNfKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBTXyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259Q3AoU18sbGEsQm0oUmgse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Yl86TWF0aC5wb3coYl8sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/SG06TWF0aC5wb3coSG0sZSksbmV3IFNfKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgS2koMjU1Kih0K3IqKFR5dCpuK29ZKmkpKSwyNTUqKHQrciooYVkqbitzTCppKSksMjU1Kih0K3IqKElFKm4pKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiBzWShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxMKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiBzWSgoci1uL3QpKnQsYSxpLG8scyl9fWZ1bmN0aW9uIGNMKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gc1koKHItbi90KSp0LGksbyxhLHMpfX1mdW5jdGlvbiBfYihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gQ3l0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gbXdlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gVW0oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscj4xODB8fHI8LTE4MD9yLTM2MCpNYXRoLnJvdW5kKHIvMzYwKTpyKTpfYihpc05hTihlKT90OmUpfWZ1bmN0aW9uIEF5dChlKXtyZXR1cm4oZT0rZSk9PTE/S246ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P213ZSh0LHIsZSk6X2IoaXNOYU4odCk/cjp0KX19ZnVuY3Rpb24gS24oZSx0KXt2YXIgcj10LWU7cmV0dXJuIHI/Q3l0KGUscik6X2IoaXNOYU4oZSk/dDplKX12YXIgcW09ZnVuY3Rpb24gZSh0KXt2YXIgcj1BeXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9Y3UoaSkpLnIsKG89Y3UobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7ZnVuY3Rpb24gUHl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9Y3UodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHVMPVB5dChsTCksSXl0PVB5dChjTCk7ZnVuY3Rpb24geWIoZSx0KXt0fHwodD1bXSk7dmFyIHI9ZT9NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCk6MCxuPXQuc2xpY2UoKSxpO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaT0wO2k8cjsrK2kpbltpXT1lW2ldKigxLW8pK3RbaV0qbztyZXR1cm4gbn19ZnVuY3Rpb24gaEwoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIEx5dChlLHQpe3JldHVybihoTCh0KT95YjpsWSkoZSx0KX1mdW5jdGlvbiBsWShlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPW5jKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSooMS1uKSt0Km4pLHJ9fWZ1bmN0aW9uIHppKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fWZ1bmN0aW9uIHBMKGUsdCl7dmFyIHI9e30sbj17fSxpOyhlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKSYmKGU9e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihpIGluIHQpaSBpbiBlP3JbaV09bmMoZVtpXSx0W2ldKTpuW2ldPXRbaV07cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpIGluIHIpbltpXT1yW2ldKG8pO3JldHVybiBufX12YXIgdVk9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGNZPW5ldyBSZWdFeHAodVkuc291cmNlLCJnIik7ZnVuY3Rpb24gZ3dlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBfd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiB2YihlLHQpe3ZhciByPXVZLmxhc3RJbmRleD1jWS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj11WS5leGVjKGUpKSYmKGk9Y1kuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnppKG4saSl9KSkscj1jWS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/X3dlKGxbMF0ueCk6Z3dlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfWZ1bmN0aW9uIG5jKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9fYih0KToocj09PSJudW1iZXIiP3ppOnI9PT0ic3RyaW5nIj8obj1yYyh0KSk/KHQ9bixxbSk6dmI6dCBpbnN0YW5jZW9mIHJjP3FtOnQgaW5zdGFuY2VvZiBEYXRlP2ZMOmhMKHQpP3liOkFycmF5LmlzQXJyYXkodCk/bFk6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP3BMOnppKShlLHQpfWZ1bmN0aW9uIGt5dChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX1mdW5jdGlvbiBSeXQoZSx0KXt2YXIgcj1VbSgrZSwrdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPXIobik7cmV0dXJuIGktMzYwKk1hdGguZmxvb3IoaS8zNjApfX1mdW5jdGlvbiBkTChlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucm91bmQoZSooMS1yKSt0KnIpfX12YXIgTnl0PTE4MC9NYXRoLlBJLG1MPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGhZKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKk55dCxza2V3WDpNYXRoLmF0YW4obCkqTnl0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgTEUsZlksRHl0LGdMO2Z1bmN0aW9uIE95dChlKXtyZXR1cm4gZT09PSJub25lIj9tTDooTEV8fChMRT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxmWT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRHl0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxMRS5zdHlsZS50cmFuc2Zvcm09ZSxlPUR5dC5nZXRDb21wdXRlZFN0eWxlKGZZLmFwcGVuZENoaWxkKExFKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxmWS5yZW1vdmVDaGlsZChMRSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksaFkoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiB6eXQoZSl7cmV0dXJuIGU9PW51bGw/bUw6KGdMfHwoZ0w9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksZ0wuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWdMLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LGhZKGUuYSxlLmIsZS5jLGUuZCxlLmUsZS5mKSk6bUwpfWZ1bmN0aW9uIEZ5dChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OnppKGMsaCl9LHtpOmctMix4OnppKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6emkoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDp6aShjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgX0w9Rnl0KE95dCwicHgsICIsInB4KSIsImRlZykiKSx5TD1GeXQoenl0LCIsICIsIikiLCIpIik7dmFyIGtFPU1hdGguU1FSVDIscFk9MixCeXQ9NCx5d2U9MWUtMTI7ZnVuY3Rpb24gSHl0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIHZ3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiB4d2UoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIHZMKGUsdCl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLG89dFswXSxhPXRbMV0scz10WzJdLGw9by1yLGM9YS1uLHU9bCpsK2MqYyxoLGY7aWYodTx5d2UpZj1NYXRoLmxvZyhzL2kpL2tFLGg9ZnVuY3Rpb24oeCl7cmV0dXJuW3IreCpsLG4reCpjLGkqTWF0aC5leHAoa0UqeCpmKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KHUpLGQ9KHMqcy1pKmkrQnl0KnUpLygyKmkqcFkqcCksZz0ocypzLWkqaS1CeXQqdSkvKDIqcypwWSpwKSxfPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCkseT1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpO2Y9KHktXykva0UsaD1mdW5jdGlvbih4KXt2YXIgYj14KmYsUz1IeXQoXyksQz1pLyhwWSpwKSooUyp4d2Uoa0UqYitfKS12d2UoXykpO3JldHVybltyK0MqbCxuK0MqYyxpKlMvSHl0KGtFKmIrXyldfX1yZXR1cm4gaC5kdXJhdGlvbj1mKjFlMyxofWZ1bmN0aW9uIFZ5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PVZtKHQpKS5oLChyPVZtKHIpKS5oKSxpPUtuKHQucyxyLnMpLG89S24odC5sLHIubCksYT1Lbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQucz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgVXl0PVZ5dChVbSkscXl0PVZ5dChLbik7ZnVuY3Rpb24gTV8oZSx0KXt2YXIgcj1LbigoZT13XyhlKSkubCwodD13Xyh0KSkubCksbj1LbihlLmEsdC5hKSxpPUtuKGUuYix0LmIpLG89S24oZS5vcGFjaXR5LHQub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBlLmw9cihhKSxlLmE9bihhKSxlLmI9aShhKSxlLm9wYWNpdHk9byhhKSxlKyIifX1mdW5jdGlvbiBHeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1nYih0KSkuaCwocj1nYihyKSkuaCksaT1Lbih0LmMsci5jKSxvPUtuKHQubCxyLmwpLGE9S24odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LmM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIFd5dD1HeXQoVW0pLFl5dD1HeXQoS24pO2Z1bmN0aW9uIGp5dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWxhKGkpKS5oLChvPWxhKG8pKS5oKSxzPUtuKGkucyxvLnMpLGw9S24oaS5sLG8ubCksYz1LbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIFh5dD1qeXQoVW0pLEVfPWp5dChLbik7ZnVuY3Rpb24gZFkoZSx0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTEsaT10WzBdLG89bmV3IEFycmF5KG48MD8wOm4pO3I8bjspb1tyXT1lKGksaT10Wysrcl0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKGEqPW4pKSk7cmV0dXJuIG9bc10oYS1zKX19ZnVuY3Rpb24gJHl0KGUsdCl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWUobi8odC0xKSk7cmV0dXJuIHJ9a20oKTt2YXIgeGI9MCxORT0wLFJFPTAsWnl0PTFlMyx4TCxERSxiTD0wLFRfPTAsd0w9MCxPRT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxKeXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07ZnVuY3Rpb24gQXAoKXtyZXR1cm4gVF98fChKeXQoYndlKSxUXz1PRS5ub3coKSt3TCl9ZnVuY3Rpb24gYndlKCl7VF89MH1mdW5jdGlvbiBDXygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9Q18ucHJvdG90eXBlPUFfLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Q18scmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP0FwKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZERSE9PXRoaXMmJihERT9ERS5fbmV4dD10aGlzOnhMPXRoaXMsREU9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixtWSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxtWSgpKX19O2Z1bmN0aW9uIEFfKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIG4ucmVzdGFydChlLHQsciksbn1mdW5jdGlvbiBnWSgpe0FwKCksKyt4Yjtmb3IodmFyIGU9eEwsdDtlOykodD1UXy1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0teGJ9ZnVuY3Rpb24gS3l0KCl7VF89KGJMPU9FLm5vdygpKSt3TCx4Yj1ORT0wO3RyeXtnWSgpfWZpbmFsbHl7eGI9MCxTd2UoKSxUXz0wfX1mdW5jdGlvbiB3d2UoKXt2YXIgZT1PRS5ub3coKSx0PWUtYkw7dD5aeXQmJih3TC09dCxiTD1lKX1mdW5jdGlvbiBTd2UoKXtmb3IodmFyIGUsdD14TCxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjp4TD1yKTtERT1lLG1ZKG4pfWZ1bmN0aW9uIG1ZKGUpe2lmKCF4Yil7TkUmJihORT1jbGVhclRpbWVvdXQoTkUpKTt2YXIgdD1lLVRfO3Q+MjQ/KGU8MS8wJiYoTkU9c2V0VGltZW91dChLeXQsZS1PRS5ub3coKS13TCkpLFJFJiYoUkU9Y2xlYXJJbnRlcnZhbChSRSkpKTooUkV8fChiTD1PRS5ub3coKSxSRT1zZXRJbnRlcnZhbCh3d2UsWnl0KSkseGI9MSxKeXQoS3l0KSl9fWZ1bmN0aW9uIHpFKGUsdCxyKXt2YXIgbj1uZXcgQ187cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn1mdW5jdGlvbiBReXQoZSx0LHIpe3ZhciBuPW5ldyBDXyxpPXQ7cmV0dXJuIHQ9PW51bGw/KG4ucmVzdGFydChlLHQsciksbik6KHQ9K3Qscj1yPT1udWxsP0FwKCk6K3Isbi5yZXN0YXJ0KGZ1bmN0aW9uIG8oYSl7YSs9aSxuLnJlc3RhcnQobyxpKz10LHIpLGUoYSl9LHQsciksbil9dmFyIE13ZT12cygic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxFd2U9W10sZXZ0PTAsTUw9MSxFTD0yLFNMPTMsdHZ0PTQsVEw9NSxGRT02O2Z1bmN0aW9uIEdtKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47VHdlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpNd2UsdHdlZW46RXdlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmV2dH0pfWZ1bmN0aW9uIEJFKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPmV2dCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIE9hKGUsdCl7dmFyIHI9WmkoZSx0KTtpZihyLnN0YXRlPlNMKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFppKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gVHdlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPUFfKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1NTCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PU1MKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09U0wpcmV0dXJuIHpFKGEpO3Auc3RhdGU9PT10dnQ/KHAuc3RhdGU9RkUscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1GRSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKHpFKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVNMJiYoci5zdGF0ZT10dnQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1FTCxyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09RUwpe2ZvcihyLnN0YXRlPVNMLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVRMLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVRMJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9RkUsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gaHUoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+RUwmJm4uc3RhdGU8VEwsbi5zdGF0ZT1GRSxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIHJ2dChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aHUodGhpcyxlKX0pfWZ1bmN0aW9uIEN3ZShlLHQpe3ZhciByLG47cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxlKSxvPWkudHdlZW47aWYobyE9PXIpe249cj1vO2Zvcih2YXIgYT0wLHM9bi5sZW5ndGg7YTxzOysrYSlpZihuW2FdLm5hbWU9PT10KXtuPW4uc2xpY2UoKSxuLnNwbGljZShhLDEpO2JyZWFrfX1pLnR3ZWVuPW59fWZ1bmN0aW9uIEF3ZShlLHQscil7dmFyIG4saTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89T2EodGhpcyxlKSxhPW8udHdlZW47aWYoYSE9PW4pe2k9KG49YSkuc2xpY2UoKTtmb3IodmFyIHM9e25hbWU6dCx2YWx1ZTpyfSxsPTAsYz1pLmxlbmd0aDtsPGM7KytsKWlmKGlbbF0ubmFtZT09PXQpe2lbbF09czticmVha31sPT09YyYmaS5wdXNoKHMpfW8udHdlZW49aX19ZnVuY3Rpb24gbnZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7aWYoZSs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49WmkodGhpcy5ub2RlKCkscikudHdlZW4saT0wLG89bi5sZW5ndGgsYTtpPG87KytpKWlmKChhPW5baV0pLm5hbWU9PT1lKXJldHVybiBhLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/Q3dlOkF3ZSkocixlLHQpKX1mdW5jdGlvbiBiYihlLHQscil7dmFyIG49ZS5faWQ7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBpPU9hKHRoaXMsbik7KGkudmFsdWV8fChpLnZhbHVlPXt9KSlbdF09ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihpKXtyZXR1cm4gWmkoaSxuKS52YWx1ZVt0XX19ZnVuY3Rpb24gQ0woZSx0KXt2YXIgcjtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3ppOnQgaW5zdGFuY2VvZiByYz9xbToocj1yYyh0KSk/KHQ9cixxbSk6dmIpKGUsdCl9ZnVuY3Rpb24gUHdlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBJd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBMd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24ga3dlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBSd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBOd2UoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIGl2dChlLHQpe3ZhciByPVBoKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3lMOkNMO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP053ZTpSd2UpKHIsbixiYih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9Jd2U6UHdlKShyKTooci5sb2NhbD9rd2U6THdlKShyLG4sdCkpfWZ1bmN0aW9uIER3ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gT3dlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQuY2FsbCh0aGlzLHIpKX19ZnVuY3Rpb24gendlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmT3dlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBGd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZEd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIG92dChlLHQpe3ZhciByPSJhdHRyLiIrZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKHI9dGhpcy50d2VlbihyKSkmJnIuX3ZhbHVlO2lmKHQ9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4ocixudWxsKTtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7dmFyIG49UGgoZSk7cmV0dXJuIHRoaXMudHdlZW4ociwobi5sb2NhbD96d2U6RndlKShuLHQpKX1mdW5jdGlvbiBCd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtCRSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIGF2dChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP0J3ZTpId2UpKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIFZ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBVd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe09hKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gc3Z0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/VndlOlV3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259ZnVuY3Rpb24gcXdlKGUsdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe09hKHRoaXMsZSkuZWFzZT10fX1mdW5jdGlvbiBsdnQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKHF3ZSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5lYXNlfWZ1bmN0aW9uIGN2dChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiB1dnQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEZvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBHd2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBXd2UoZSx0LHIpe3ZhciBuLGksbz1Hd2UodCk/QkU6T2E7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gaHZ0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9aaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goV3dlKHIsZSx0KSl9ZnVuY3Rpb24gWXdlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtmb3IodmFyIHIgaW4gdGhpcy5fX3RyYW5zaXRpb24paWYoK3IhPT1lKXJldHVybjt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfX1mdW5jdGlvbiBmdnQoKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsWXdlKHRoaXMuX2lkKSl9ZnVuY3Rpb24gcHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Tm0oZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPW5ldyBBcnJheShpKSxhPTA7YTxpOysrYSlmb3IodmFyIHM9blthXSxsPXMubGVuZ3RoLGM9b1thXT1uZXcgQXJyYXkobCksdSxoLGY9MDtmPGw7KytmKSh1PXNbZl0pJiYoaD1lLmNhbGwodSx1Ll9fZGF0YV9fLGYscykpJiYoIl9fZGF0YV9fImluIHUmJihoLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbZl09aCxHbShjW2ZdLHQscixmLGMsWmkodSxyKSkpO3JldHVybiBuZXcgRm8obyx0aGlzLl9wYXJlbnRzLHQscil9ZnVuY3Rpb24gZHZ0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Y2IoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9WmkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHbShwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IEZvKG8sYSx0LHIpfXZhciBqd2U9SWgucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIG12dCgpe3JldHVybiBuZXcgandlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBYd2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89U3AodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gZ3Z0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uICR3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIEt3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVNwKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxTcCh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBad2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1PYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9Z3Z0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gX3Z0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9fTDpDTDtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSxYd2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsZ3Z0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxLd2UoZSxuLGJiKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2goWndlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSwkd2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfWZ1bmN0aW9uIEp3ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gUXdlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZKd2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24geXZ0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLFF3ZShlLHQscj09bnVsbD8iIjpyKSl9ZnVuY3Rpb24gdFNlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gZVNlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHZ2dChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZVNlKGJiKHRoaXMsInRleHQiLGUpKTp0U2UoZT09bnVsbD8iIjplKyIiKSl9ZnVuY3Rpb24gclNlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBuU2UoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmclNlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24geHZ0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxuU2UoZSkpfWZ1bmN0aW9uIGJ2dCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1BTCgpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9WmkobCx0KTtHbShsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IEZvKG4sdGhpcy5fcGFyZW50cyxlLHIpfWZ1bmN0aW9uIHd2dCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1PYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBpU2U9MDtmdW5jdGlvbiBGbyhlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gUEwoZSl7cmV0dXJuIEloKCkudHJhbnNpdGlvbihlKX1mdW5jdGlvbiBBTCgpe3JldHVybisraVNlfXZhciB3Yj1JaC5wcm90b3R5cGU7Rm8ucHJvdG90eXBlPVBMLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rm8sc2VsZWN0OnB2dCxzZWxlY3RBbGw6ZHZ0LGZpbHRlcjpjdnQsbWVyZ2U6dXZ0LHNlbGVjdGlvbjptdnQsdHJhbnNpdGlvbjpidnQsY2FsbDp3Yi5jYWxsLG5vZGVzOndiLm5vZGVzLG5vZGU6d2Iubm9kZSxzaXplOndiLnNpemUsZW1wdHk6d2IuZW1wdHksZWFjaDp3Yi5lYWNoLG9uOmh2dCxhdHRyOml2dCxhdHRyVHdlZW46b3Z0LHN0eWxlOl92dCxzdHlsZVR3ZWVuOnl2dCx0ZXh0OnZ2dCx0ZXh0VHdlZW46eHZ0LHJlbW92ZTpmdnQsdHdlZW46bnZ0LGRlbGF5OmF2dCxkdXJhdGlvbjpzdnQsZWFzZTpsdnQsZW5kOnd2dH07SV8oKTt2YXIgVVk9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfTtmdW5jdGlvbiBwU2UoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gVVkudGltZT1BcCgpLFVZO3JldHVybiByfWZ1bmN0aW9uIE92dChlKXt2YXIgdCxyO2UgaW5zdGFuY2VvZiBGbz8odD1lLl9pZCxlPWUuX25hbWUpOih0PUFMKCksKHI9VVkpLnRpbWU9QXAoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZHbShsLGUsdCxjLGEscnx8cFNlKGwsdCkpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUsdCl9SWgucHJvdG90eXBlLmludGVycnVwdD1ydnQ7SWgucHJvdG90eXBlLnRyYW5zaXRpb249T3Z0O3ZhciBkU2U9W251bGxdO2Z1bmN0aW9uIHp2dChlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saTtpZihyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihpIGluIHIpaWYoKG49cltpXSkuc3RhdGU+TUwmJm4ubmFtZT09PXQpcmV0dXJuIG5ldyBGbyhbW2VdXSxkU2UsdCwraSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRkwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEZ2dChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfWZ1bmN0aW9uIHFZKCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gQkwoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBCdnQ9e25hbWU6ImRyYWcifSxHWT17bmFtZToic3BhY2UifSxNYj17bmFtZToiaGFuZGxlIn0sRWI9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIEh2dChlKXtyZXR1cm5bK2VbMF0sK2VbMV1dfWZ1bmN0aW9uIFlZKGUpe3JldHVybltIdnQoZVswXSksSHZ0KGVbMV0pXX1mdW5jdGlvbiBtU2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBUcCh0LHF0LnRvdWNoZXMsZSl9fXZhciBITD17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKEhFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1srZVswXSx0WzBdWzFdXSxbK2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sVkw9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChIRSksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbD9udWxsOltbdFswXVswXSwrZVswXV0sW3RbMV1bMF0sK2VbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LGdTZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwidyIsImUiLCJzIiwibnciLCJuZSIsInN3Iiwic2UiXS5tYXAoSEUpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP251bGw6WVkoZSl9LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZX19LFBwPXtvdmVybGF5OiJjcm9zc2hhaXIiLHNlbGVjdGlvbjoibW92ZSIsbjoibnMtcmVzaXplIixlOiJldy1yZXNpemUiLHM6Im5zLXJlc2l6ZSIsdzoiZXctcmVzaXplIixudzoibndzZS1yZXNpemUiLG5lOiJuZXN3LXJlc2l6ZSIsc2U6Im53c2UtcmVzaXplIixzdzoibmVzdy1yZXNpemUifSxWdnQ9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LFV2dD17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sX1NlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LHlTZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBIRShlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiB2U2UoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiB4U2UoKXt2YXIgZT10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT8oZT1lLnZpZXdCb3guYmFzZVZhbCxbW2UueCxlLnldLFtlLngrZS53aWR0aCxlLnkrZS5oZWlnaHRdXSk6W1swLDBdLFtlLndpZHRoLmJhc2VWYWwudmFsdWUsZS5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJTZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBXWShlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIHdTZShlKXtyZXR1cm4gZVswXVswXT09PWVbMV1bMF18fGVbMF1bMV09PT1lWzFdWzFdfWZ1bmN0aW9uIFVMKGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gcXZ0KCl7cmV0dXJuIGpZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBqWShWTCl9ZnVuY3Rpb24gR0woKXtyZXR1cm4galkoZ1NlKX1mdW5jdGlvbiBqWShlKXt2YXIgdD14U2Uscj12U2Usbj1iU2UsaT0hMCxvPXZzKCJzdGFydCIsImJydXNoIiwiZW5kIiksYT02LHM7ZnVuY3Rpb24gbChfKXt2YXIgeT1fLnByb3BlcnR5KCJfX2JydXNoIixnKS5zZWxlY3RBbGwoIi5vdmVybGF5IikuZGF0YShbSEUoIm92ZXJsYXkiKV0pO3kuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsIm92ZXJsYXkiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSkubWVyZ2UoeSkuZWFjaChmdW5jdGlvbigpe3ZhciBiPVdZKHRoaXMpLmV4dGVudDtIdCh0aGlzKS5hdHRyKCJ4IixiWzBdWzBdKS5hdHRyKCJ5IixiWzBdWzFdKS5hdHRyKCJ3aWR0aCIsYlsxXVswXS1iWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGJbMV1bMV0tYlswXVsxXSl9KSxfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW0hFKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciB4PV8uc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YShlLmhhbmRsZXMsZnVuY3Rpb24oYil7cmV0dXJuIGIudHlwZX0pO3guZXhpdCgpLnJlbW92ZSgpLHguZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsZnVuY3Rpb24oYil7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrYi50eXBlfSkuYXR0cigiY3Vyc29yIixmdW5jdGlvbihiKXtyZXR1cm4gUHBbYi50eXBlXX0pLF8uZWFjaChjKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKG4pLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGQpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1sLm1vdmU9ZnVuY3Rpb24oXyx5KXtfLnNlbGVjdGlvbj9fLm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9eC5fX2JydXNoLFM9dSh4LGFyZ3VtZW50cyksQz1iLnNlbGVjdGlvbixQPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6eSxiLmV4dGVudCksaz1uYyhDLFApO2Z1bmN0aW9uIE8oRCl7Yi5zZWxlY3Rpb249RD09PTEmJlA9PT1udWxsP251bGw6ayhEKSxjLmNhbGwoeCksUy5icnVzaCgpfXJldHVybiBDIT09bnVsbCYmUCE9PW51bGw/TzpPKDEpfSk6Xy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHg9dGhpcyxiPWFyZ3VtZW50cyxTPXguX19icnVzaCxDPWUuaW5wdXQodHlwZW9mIHk9PSJmdW5jdGlvbiI/eS5hcHBseSh4LGIpOnksUy5leHRlbnQpLFA9dSh4LGIpLmJlZm9yZXN0YXJ0KCk7aHUoeCksUy5zZWxlY3Rpb249Qz09PW51bGw/bnVsbDpDLGMuY2FsbCh4KSxQLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKF8pe2wubW92ZShfLG51bGwpfTtmdW5jdGlvbiBjKCl7dmFyIF89SHQodGhpcykseT1XWSh0aGlzKS5zZWxlY3Rpb247eT8oXy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIseVswXVswXSkuYXR0cigieSIseVswXVsxXSkuYXR0cigid2lkdGgiLHlbMV1bMF0teVswXVswXSkuYXR0cigiaGVpZ2h0Iix5WzFdWzFdLXlbMF1bMV0pLF8uc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbeC50eXBlLmxlbmd0aC0xXT09PSJlIj95WzFdWzBdLWEvMjp5WzBdWzBdLWEvMn0pLmF0dHIoInkiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGVbMF09PT0icyI/eVsxXVsxXS1hLzI6eVswXVsxXS1hLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJuInx8eC50eXBlPT09InMiP3lbMV1bMF0teVswXVswXSthOmF9KS5hdHRyKCJoZWlnaHQiLGZ1bmN0aW9uKHgpe3JldHVybiB4LnR5cGU9PT0iZSJ8fHgudHlwZT09PSJ3Ij95WzFdWzFdLXlbMF1bMV0rYTphfSkpOl8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uLC5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKS5hdHRyKCJ4IixudWxsKS5hdHRyKCJ5IixudWxsKS5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKX1mdW5jdGlvbiB1KF8seSx4KXt2YXIgYj1fLl9fYnJ1c2guZW1pdHRlcjtyZXR1cm4gYiYmKCF4fHwhYi5jbGVhbik/YjpuZXcgaChfLHkseCl9ZnVuY3Rpb24gaChfLHkseCl7dGhpcy50aGF0PV8sdGhpcy5hcmdzPXksdGhpcy5zdGF0ZT1fLl9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPXh9aC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihfKXtNcChuZXcgRnZ0KGwsXyxlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbXyx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBmKCl7aWYocyYmIXF0LnRvdWNoZXN8fCFyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIF89dGhpcyx5PXF0LnRhcmdldC5fX2RhdGFfXy50eXBlLHg9KGkmJnF0Lm1ldGFLZXk/eT0ib3ZlcmxheSI6eSk9PT0ic2VsZWN0aW9uIj9CdnQ6aSYmcXQuYWx0S2V5P0ViOk1iLGI9ZT09PVZMP251bGw6X1NlW3ldLFM9ZT09PUhMP251bGw6eVNlW3ldLEM9V1koXyksUD1DLmV4dGVudCxrPUMuc2VsZWN0aW9uLE89UFswXVswXSxELEIsST1QWzBdWzFdLEwsUixGPVBbMV1bMF0seixVLFc9UFsxXVsxXSxaLHJ0LG90PTAsc3Q9MCxTdCxidD1iJiZTJiZpJiZxdC5zaGlmdEtleSxNdCxsdCxLdD1xdC50b3VjaGVzP21TZShxdC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTp6byxfdD1LdChfKSxjdD1fdCxYPXUoXyxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7eT09PSJvdmVybGF5Ij8oayYmKFN0PSEwKSxDLnNlbGVjdGlvbj1rPVtbRD1lPT09Vkw/TzpfdFswXSxMPWU9PT1ITD9JOl90WzFdXSxbej1lPT09Vkw/RjpELFo9ZT09PUhMP1c6TF1dKTooRD1rWzBdWzBdLEw9a1swXVsxXSx6PWtbMV1bMF0sWj1rWzFdWzFdKSxCPUQsUj1MLFU9eixydD1aO3ZhciBldD1IdChfKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxkdD1ldC5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixQcFt5XSk7aWYocXQudG91Y2hlcylYLm1vdmVkPXB0LFguZW5kZWQ9d3Q7ZWxzZXt2YXIgcT1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmJydXNoIixwdCwhMCkub24oIm1vdXNldXAuYnJ1c2giLHd0LCEwKTtpJiZxLm9uKCJrZXlkb3duLmJydXNoIixrdCwhMCkub24oImtleXVwLmJydXNoIixpZSwhMCksem0ocXQudmlldyl9cVkoKSxodShfKSxjLmNhbGwoXyksWC5zdGFydCgpO2Z1bmN0aW9uIHB0KCl7dmFyIGVlPUt0KF8pO2J0JiYhTXQmJiFsdCYmKE1hdGguYWJzKGVlWzBdLWN0WzBdKT5NYXRoLmFicyhlZVsxXS1jdFsxXSk/bHQ9ITA6TXQ9ITApLGN0PWVlLFN0PSEwLEJMKCksaHQoKX1mdW5jdGlvbiBodCgpe3ZhciBlZTtzd2l0Y2gob3Q9Y3RbMF0tX3RbMF0sc3Q9Y3RbMV0tX3RbMV0seCl7Y2FzZSBHWTpjYXNlIEJ2dDp7YiYmKG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLXosb3QpKSxCPUQrb3QsVT16K290KSxTJiYoc3Q9TWF0aC5tYXgoSS1MLE1hdGgubWluKFctWixzdCkpLFI9TCtzdCxydD1aK3N0KTticmVha31jYXNlIE1iOntiPDA/KG90PU1hdGgubWF4KE8tRCxNYXRoLm1pbihGLUQsb3QpKSxCPUQrb3QsVT16KTpiPjAmJihvdD1NYXRoLm1heChPLXosTWF0aC5taW4oRi16LG90KSksQj1ELFU9eitvdCksUzwwPyhzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1MLHN0KSksUj1MK3N0LHJ0PVopOlM+MCYmKHN0PU1hdGgubWF4KEktWixNYXRoLm1pbihXLVosc3QpKSxSPUwscnQ9WitzdCk7YnJlYWt9Y2FzZSBFYjp7YiYmKEI9TWF0aC5tYXgoTyxNYXRoLm1pbihGLEQtb3QqYikpLFU9TWF0aC5tYXgoTyxNYXRoLm1pbihGLHorb3QqYikpKSxTJiYoUj1NYXRoLm1heChJLE1hdGgubWluKFcsTC1zdCpTKSkscnQ9TWF0aC5tYXgoSSxNYXRoLm1pbihXLForc3QqUykpKTticmVha319VTxCJiYoYio9LTEsZWU9RCxEPXosej1lZSxlZT1CLEI9VSxVPWVlLHkgaW4gVnZ0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9VnZ0W3ldXSkpLHJ0PFImJihTKj0tMSxlZT1MLEw9WixaPWVlLGVlPVIsUj1ydCxydD1lZSx5IGluIFV2dCYmZHQuYXR0cigiY3Vyc29yIixQcFt5PVV2dFt5XV0pKSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLE10JiYoQj1rWzBdWzBdLFU9a1sxXVswXSksbHQmJihSPWtbMF1bMV0scnQ9a1sxXVsxXSksKGtbMF1bMF0hPT1CfHxrWzBdWzFdIT09Unx8a1sxXVswXSE9PVV8fGtbMV1bMV0hPT1ydCkmJihDLnNlbGVjdGlvbj1bW0IsUl0sW1UscnRdXSxjLmNhbGwoXyksWC5icnVzaCgpKX1mdW5jdGlvbiB3dCgpe2lmKHFZKCkscXQudG91Y2hlcyl7aWYocXQudG91Y2hlcy5sZW5ndGgpcmV0dXJuO3MmJmNsZWFyVGltZW91dChzKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzPW51bGx9LDUwMCl9ZWxzZSBGbShxdC52aWV3LFN0KSxxLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtldC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGR0LmF0dHIoImN1cnNvciIsUHAub3ZlcmxheSksQy5zZWxlY3Rpb24mJihrPUMuc2VsZWN0aW9uKSx3U2UoaykmJihDLnNlbGVjdGlvbj1udWxsLGMuY2FsbChfKSksWC5lbmQoKX1mdW5jdGlvbiBrdCgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidD1iJiZTO2JyZWFrfWNhc2UgMTg6e3g9PT1NYiYmKGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYixodCgpKTticmVha31jYXNlIDMyOnsoeD09PU1ifHx4PT09RWIpJiYoYjwwP3o9VS1vdDpiPjAmJihEPUItb3QpLFM8MD9aPXJ0LXN0OlM+MCYmKEw9Ui1zdCkseD1HWSxkdC5hdHRyKCJjdXJzb3IiLFBwLnNlbGVjdGlvbiksaHQoKSk7YnJlYWt9ZGVmYXVsdDpyZXR1cm59QkwoKX1mdW5jdGlvbiBpZSgpe3N3aXRjaChxdC5rZXlDb2RlKXtjYXNlIDE2OntidCYmKE10PWx0PWJ0PSExLGh0KCkpO2JyZWFrfWNhc2UgMTg6e3g9PT1FYiYmKGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIsaHQoKSk7YnJlYWt9Y2FzZSAzMjp7eD09PUdZJiYocXQuYWx0S2V5PyhiJiYoej1VLW90KmIsRD1CK290KmIpLFMmJihaPXJ0LXN0KlMsTD1SK3N0KlMpLHg9RWIpOihiPDA/ej1VOmI+MCYmKEQ9QiksUzwwP1o9cnQ6Uz4wJiYoTD1SKSx4PU1iKSxkdC5hdHRyKCJjdXJzb3IiLFBwW3ldKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1CTCgpfX1mdW5jdGlvbiBwKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBkKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBnKCl7dmFyIF89dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBfLmV4dGVudD1ZWSh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksXy5kaW09ZSxffXJldHVybiBsLmV4dGVudD1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKFlZKF8pKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOkZMKCEhXyksbCk6cn0sbC50b3VjaGFibGU9ZnVuY3Rpb24oXyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIF89PSJmdW5jdGlvbiI/XzpGTCghIV8pLGwpOm59LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rXyxsKTphfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0hIV8sbCk6aX0sbC5vbj1mdW5jdGlvbigpe3ZhciBfPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBfPT09bz9sOl99LGx9dmFyIFhZPU1hdGguY29zLCRZPU1hdGguc2luLEd2dD1NYXRoLlBJLFZFPUd2dC8yLEtZPUd2dCoyLFpZPU1hdGgubWF4O2Z1bmN0aW9uIFNTZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gZSh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSxyLnNvdXJjZS52YWx1ZStyLnRhcmdldC52YWx1ZSl9fWZ1bmN0aW9uIFd2dCgpe3ZhciBlPTAsdD1udWxsLHI9bnVsbCxuPW51bGw7ZnVuY3Rpb24gaShvKXt2YXIgYT1vLmxlbmd0aCxzPVtdLGw9SXIoYSksYz1bXSx1PVtdLGg9dS5ncm91cHM9bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEqYSkscCxkLGcsXyx5LHg7Zm9yKHA9MCx5PS0xOysreTxhOyl7Zm9yKGQ9MCx4PS0xOysreDxhOylkKz1vW3ldW3hdO3MucHVzaChkKSxjLnB1c2goSXIoYSkpLHArPWR9Zm9yKHQmJmwuc29ydChmdW5jdGlvbihCLEkpe3JldHVybiB0KHNbQl0sc1tJXSl9KSxyJiZjLmZvckVhY2goZnVuY3Rpb24oQixJKXtCLnNvcnQoZnVuY3Rpb24oTCxSKXtyZXR1cm4gcihvW0ldW0xdLG9bSV1bUl0pfSl9KSxwPVpZKDAsS1ktZSphKS9wLF89cD9lOktZL2EsZD0wLHk9LTE7Kyt5PGE7KXtmb3IoZz1kLHg9LTE7Kyt4PGE7KXt2YXIgYj1sW3ldLFM9Y1tiXVt4XSxDPW9bYl1bU10sUD1kLGs9ZCs9QypwO2ZbUyphK2JdPXtpbmRleDpiLHN1YmluZGV4OlMsc3RhcnRBbmdsZTpQLGVuZEFuZ2xlOmssdmFsdWU6Q319aFtiXT17aW5kZXg6YixzdGFydEFuZ2xlOmcsZW5kQW5nbGU6ZCx2YWx1ZTpzW2JdfSxkKz1ffWZvcih5PS0xOysreTxhOylmb3IoeD15LTE7Kyt4PGE7KXt2YXIgTz1mW3gqYSt5XSxEPWZbeSphK3hdOyhPLnZhbHVlfHxELnZhbHVlKSYmdS5wdXNoKE8udmFsdWU8RC52YWx1ZT97c291cmNlOkQsdGFyZ2V0Ok99Ontzb3VyY2U6Tyx0YXJnZXQ6RH0pfXJldHVybiBuP3Uuc29ydChuKTp1fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVpZKDAsbyksaSk6ZX0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW8saSk6dH0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPT1udWxsP249bnVsbDoobj1TU2UobykpLl89byxpKTpuJiZuLl99LGl9dmFyIFl2dD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gV0woZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBKWT1NYXRoLlBJLFFZPTIqSlksTF89MWUtNixNU2U9UVktTF87ZnVuY3Rpb24gdGooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBqdnQoKXtyZXR1cm4gbmV3IHRqfXRqLnByb3RvdHlwZT1qdnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0aixtb3ZlVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl94MSE9PW51bGwmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iUSIrICtlKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rcikrIiwiKyh0aGlzLl95MT0rbil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuXys9IkMiKyArZSsiLCIrICt0KyIsIisgK3IrIiwiKyArbisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24oZSx0LHIsbixpKXtlPStlLHQ9K3Qscj0rcixuPStuLGk9K2k7dmFyIG89dGhpcy5feDEsYT10aGlzLl95MSxzPXItZSxsPW4tdCxjPW8tZSx1PWEtdCxoPWMqYyt1KnU7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKHRoaXMuX3gxPT09bnVsbCl0aGlzLl8rPSJNIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGg+TF8paWYoIShNYXRoLmFicyh1KnMtbCpjKT5MXyl8fCFpKXRoaXMuXys9IkwiKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2V7dmFyIGY9ci1vLHA9bi1hLGQ9cypzK2wqbCxnPWYqZitwKnAsXz1NYXRoLnNxcnQoZCkseT1NYXRoLnNxcnQoaCkseD1pKk1hdGgudGFuKChKWS1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT5MXyYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT5MX3x8TWF0aC5hYnModGhpcy5feTEtYyk+TF8pJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVRWStRWSksaD5NU2U/dGhpcy5fKz0iQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyhlLWEpKyIsIisodC1zKSsiQSIrcisiLCIrcisiLDAsMSwiK3UrIiwiKyh0aGlzLl94MT1sKSsiLCIrKHRoaXMuX3kxPWMpOmg+TF8mJih0aGlzLl8rPSJBIityKyIsIityKyIsMCwiKyArKGg+PUpZKSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIGJzPWp2dDtmdW5jdGlvbiBFU2UoZSl7cmV0dXJuIGUuc291cmNlfWZ1bmN0aW9uIFRTZShlKXtyZXR1cm4gZS50YXJnZXR9ZnVuY3Rpb24gQ1NlKGUpe3JldHVybiBlLnJhZGl1c31mdW5jdGlvbiBBU2UoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBQU2UoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24gWHZ0KCl7dmFyIGU9RVNlLHQ9VFNlLHI9Q1NlLG49QVNlLGk9UFNlLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1ZdnQuY2FsbChhcmd1bWVudHMpLGM9ZS5hcHBseSh0aGlzLGwpLHU9dC5hcHBseSh0aGlzLGwpLGg9K3IuYXBwbHkodGhpcywobFswXT1jLGwpKSxmPW4uYXBwbHkodGhpcyxsKS1WRSxwPWkuYXBwbHkodGhpcyxsKS1WRSxkPWgqWFkoZiksZz1oKiRZKGYpLF89K3IuYXBwbHkodGhpcywobFswXT11LGwpKSx5PW4uYXBwbHkodGhpcyxsKS1WRSx4PWkuYXBwbHkodGhpcyxsKS1WRTtpZihvfHwobz1zPWJzKCkpLG8ubW92ZVRvKGQsZyksby5hcmMoMCwwLGgsZixwKSwoZiE9PXl8fHAhPT14KSYmKG8ucXVhZHJhdGljQ3VydmVUbygwLDAsXypYWSh5KSxfKiRZKHkpKSxvLmFyYygwLDAsXyx5LHgpKSxvLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQsZyksby5jbG9zZVBhdGgoKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5yYWRpdXM9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6V0woK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpXTCgrcyksYSk6aX0sYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cyxhKTplfSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfVRiKCk7dmFyIGtTZT1BcnJheS5wcm90b3R5cGUsS0w9a1NlLnNsaWNlO2Z1bmN0aW9uIGwxdChlLHQpe3JldHVybiBlLXR9ZnVuY3Rpb24gYzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGgsbj1lW3ItMV1bMV0qZVswXVswXS1lW3ItMV1bMF0qZVswXVsxXTsrK3Q8cjspbis9ZVt0LTFdWzFdKmVbdF1bMF0tZVt0LTFdWzBdKmVbdF1bMV07cmV0dXJuIG59ZnVuY3Rpb24gT2goZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIHUxdChlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk7KytyPG47KWlmKGk9UlNlKGUsdFtyXSkpcmV0dXJuIGk7cmV0dXJuIDB9ZnVuY3Rpb24gUlNlKGUsdCl7Zm9yKHZhciByPXRbMF0sbj10WzFdLGk9LTEsbz0wLGE9ZS5sZW5ndGgscz1hLTE7bzxhO3M9bysrKXt2YXIgbD1lW29dLGM9bFswXSx1PWxbMV0saD1lW3NdLGY9aFswXSxwPWhbMV07aWYoTlNlKGwsaCx0KSlyZXR1cm4gMDt1Pm4hPXA+biYmcjwoZi1jKSoobi11KS8ocC11KStjJiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gTlNlKGUsdCxyKXt2YXIgbjtyZXR1cm4gRFNlKGUsdCxyKSYmT1NlKGVbbj0rKGVbMF09PT10WzBdKV0scltuXSx0W25dKX1mdW5jdGlvbiBEU2UoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pPT09KHJbMF0tZVswXSkqKHRbMV0tZVsxXSl9ZnVuY3Rpb24gT1NlKGUsdCxyKXtyZXR1cm4gZTw9dCYmdDw9cnx8cjw9dCYmdDw9ZX1mdW5jdGlvbiBoMXQoKXt9dmFyIElwPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV07ZnVuY3Rpb24gWkwoKXt2YXIgZT0xLHQ9MSxyPXNiLG49bDtmdW5jdGlvbiBpKGMpe3ZhciB1PXIoYyk7aWYoQXJyYXkuaXNBcnJheSh1KSl1PXUuc2xpY2UoKS5zb3J0KGwxdCk7ZWxzZXt2YXIgaD1hYShjKSxmPWhbMF0scD1oWzFdO3U9dGwoZixwLHUpLHU9SXIoTWF0aC5mbG9vcihmL3UpKnUsTWF0aC5mbG9vcihwL3UpKnUsdSl9cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBvKGMsZCl9KX1mdW5jdGlvbiBvKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYShjLHUsZnVuY3Rpb24ocCl7bihwLGMsdSksYzF0KHApPjA/aC5wdXNoKFtwXSk6Zi5wdXNoKHApfSksZi5mb3JFYWNoKGZ1bmN0aW9uKHApe2Zvcih2YXIgZD0wLGc9aC5sZW5ndGgsXztkPGc7KytkKWlmKHUxdCgoXz1oW2RdKVswXSxwKSE9PS0xKXtfLnB1c2gocCk7cmV0dXJufX0pLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOnUsY29vcmRpbmF0ZXM6aH19ZnVuY3Rpb24gYShjLHUsaCl7dmFyIGY9bmV3IEFycmF5LHA9bmV3IEFycmF5LGQsZyxfLHkseCxiO2ZvcihkPWc9LTEseT1jWzBdPj11LElwW3k8PDFdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tkKzFdPj11LElwW198eTw8MV0uZm9yRWFjaChTKTtmb3IoSXBbeTw8MF0uZm9yRWFjaChTKTsrK2c8dC0xOyl7Zm9yKGQ9LTEseT1jW2cqZStlXT49dSx4PWNbZyplXT49dSxJcFt5PDwxfHg8PDJdLmZvckVhY2goUyk7KytkPGUtMTspXz15LHk9Y1tnKmUrZStkKzFdPj11LGI9eCx4PWNbZyplK2QrMV0+PXUsSXBbX3x5PDwxfHg8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt5fHg8PDNdLmZvckVhY2goUyl9Zm9yKGQ9LTEseD1jW2cqZV0+PXUsSXBbeDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOyliPXgseD1jW2cqZStkKzFdPj11LElwW3g8PDJ8Yjw8M10uZm9yRWFjaChTKTtJcFt4PDwzXS5mb3JFYWNoKFMpO2Z1bmN0aW9uIFMoQyl7dmFyIFA9W0NbMF1bMF0rZCxDWzBdWzFdK2ddLGs9W0NbMV1bMF0rZCxDWzFdWzFdK2ddLE89cyhQKSxEPXMoayksQixJOyhCPXBbT10pPyhJPWZbRF0pPyhkZWxldGUgcFtCLmVuZF0sZGVsZXRlIGZbSS5zdGFydF0sQj09PUk/KEIucmluZy5wdXNoKGspLGgoQi5yaW5nKSk6ZltCLnN0YXJ0XT1wW0kuZW5kXT17c3RhcnQ6Qi5zdGFydCxlbmQ6SS5lbmQscmluZzpCLnJpbmcuY29uY2F0KEkucmluZyl9KTooZGVsZXRlIHBbQi5lbmRdLEIucmluZy5wdXNoKGspLHBbQi5lbmQ9RF09Qik6KEI9ZltEXSk/KEk9cFtPXSk/KGRlbGV0ZSBmW0Iuc3RhcnRdLGRlbGV0ZSBwW0kuZW5kXSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0kuc3RhcnRdPXBbQi5lbmRdPXtzdGFydDpJLnN0YXJ0LGVuZDpCLmVuZCxyaW5nOkkucmluZy5jb25jYXQoQi5yaW5nKX0pOihkZWxldGUgZltCLnN0YXJ0XSxCLnJpbmcudW5zaGlmdChQKSxmW0Iuc3RhcnQ9T109Qik6ZltPXT1wW0RdPXtzdGFydDpPLGVuZDpELHJpbmc6W1Asa119fX1mdW5jdGlvbiBzKGMpe3JldHVybiBjWzBdKjIrY1sxXSooZSsxKSo0fWZ1bmN0aW9uIGwoYyx1LGgpe2MuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgcD1mWzBdLGQ9ZlsxXSxnPXB8MCxfPWR8MCx5LHg9dVtfKmUrZ107cD4wJiZwPGUmJmc9PT1wJiYoeT11W18qZStnLTFdLGZbMF09cCsoaC15KS8oeC15KS0uNSksZD4wJiZkPHQmJl89PT1kJiYoeT11WyhfLTEpKmUrZ10sZlsxXT1kKyhoLXkpLyh4LXkpLS41KX0pfXJldHVybiBpLmNvbnRvdXI9byxpLnNpemU9ZnVuY3Rpb24oYyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW2UsdF07dmFyIHU9TWF0aC5jZWlsKGNbMF0pLGg9TWF0aC5jZWlsKGNbMV0pO2lmKCEodT4wKXx8IShoPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIGU9dSx0PWgsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6QXJyYXkuaXNBcnJheShjKT9PaChLTC5jYWxsKGMpKTpPaChjKSxpKTpyfSxpLnNtb290aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jP2w6aDF0LGkpOm49PT1sfSxpfWZ1bmN0aW9uIEpMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8aTsrK2EpZm9yKHZhciBzPTAsbD0wO3M8bityOysrcylzPG4mJihsKz1lLmRhdGFbcythKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVtzLW8rYSpuXSksdC5kYXRhW3MtcithKm5dPWwvTWF0aC5taW4ocysxLG4tMStvLXMsbykpfWZ1bmN0aW9uIFFMKGUsdCxyKXtmb3IodmFyIG49ZS53aWR0aCxpPWUuaGVpZ2h0LG89KHI8PDEpKzEsYT0wO2E8bjsrK2EpZm9yKHZhciBzPTAsbD0wO3M8aStyOysrcylzPGkmJihsKz1lLmRhdGFbYStzKm5dKSxzPj1yJiYocz49byYmKGwtPWUuZGF0YVthKyhzLW8pKm5dKSx0LmRhdGFbYSsocy1yKSpuXT1sL01hdGgubWluKHMrMSxpLTErby1zLG8pKX1mdW5jdGlvbiB6U2UoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gRlNlKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIEJTZSgpe3JldHVybiAxfWZ1bmN0aW9uIGYxdCgpe3ZhciBlPXpTZSx0PUZTZSxyPUJTZSxuPTk2MCxpPTUwMCxvPTIwLGE9MixzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsdT1PaCgyMCk7ZnVuY3Rpb24gaCh5KXt2YXIgeD1uZXcgRmxvYXQzMkFycmF5KGwqYyksYj1uZXcgRmxvYXQzMkFycmF5KGwqYyk7eS5mb3JFYWNoKGZ1bmN0aW9uKFAsayxPKXt2YXIgRD0rZShQLGssTykrcz4+YSxCPSt0KFAsayxPKStzPj5hLEk9K3IoUCxrLE8pO0Q+PTAmJkQ8bCYmQj49MCYmQjxjJiYoeFtEK0IqbF0rPUkpfSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLFFMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksUUwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxRTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSk7dmFyIFM9dSh4KTtpZighQXJyYXkuaXNBcnJheShTKSl7dmFyIEM9bHUoeCk7Uz10bCgwLEMsUyksUz1JcigwLE1hdGguZmxvb3IoQy9TKSpTLFMpLFMuc2hpZnQoKX1yZXR1cm4gWkwoKS50aHJlc2hvbGRzKFMpLnNpemUoW2wsY10pKHgpLm1hcChmKX1mdW5jdGlvbiBmKHkpe3JldHVybiB5LnZhbHVlKj1NYXRoLnBvdygyLC0yKmEpLHkuY29vcmRpbmF0ZXMuZm9yRWFjaChwKSx5fWZ1bmN0aW9uIHAoeSl7eS5mb3JFYWNoKGQpfWZ1bmN0aW9uIGQoeSl7eS5mb3JFYWNoKGcpfWZ1bmN0aW9uIGcoeSl7eVswXT15WzBdKk1hdGgucG93KDIsYSktcyx5WzFdPXlbMV0qTWF0aC5wb3coMixhKS1zfWZ1bmN0aW9uIF8oKXtyZXR1cm4gcz1vKjMsbD1uK3MqMj4+YSxjPWkrcyoyPj5hLGh9cmV0dXJuIGgueD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTplfSxoLnk9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6dH0saC53ZWlnaHQ9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpPaCgreSksaCk6cn0saC5zaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybltuLGldO3ZhciB4PU1hdGguY2VpbCh5WzBdKSxiPU1hdGguY2VpbCh5WzFdKTtpZighKHg+PTApJiYhKHg+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIG49eCxpPWIsXygpfSxoLmNlbGxTaXplPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiAxPDxhO2lmKCEoKHk9K3kpPj0xKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2VsbCBzaXplIik7cmV0dXJuIGE9TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLkxOMiksXygpfSxoLnRocmVzaG9sZHM9ZnVuY3Rpb24oeSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dHlwZW9mIHk9PSJmdW5jdGlvbiI/eTpBcnJheS5pc0FycmF5KHkpP09oKEtMLmNhbGwoeSkpOk9oKHkpLGgpOnV9LGguYmFuZHdpZHRoPWZ1bmN0aW9uKHkpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBNYXRoLnNxcnQobyoobysxKSk7aWYoISgoeT0reSk+PTApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBiYW5kd2lkdGgiKTtyZXR1cm4gbz1NYXRoLnJvdW5kKChNYXRoLnNxcnQoNCp5KnkrMSktMSkvMiksXygpfSxofWttKCk7cUUoKTtJXygpO2Z1bmN0aW9uIEdTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYmxvYigpfWZ1bmN0aW9uIEwxdChlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oR1NlKX1mdW5jdGlvbiBXU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLmFycmF5QnVmZmVyKCl9ZnVuY3Rpb24gazF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihXU2UpfXFFKCk7ZnVuY3Rpb24gWVNlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS50ZXh0KCl9ZnVuY3Rpb24gRF8oZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKFlTZSl9ZnVuY3Rpb24gUjF0KGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmKG49cixyPXZvaWQgMCksRF8odCxyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBlKGksbil9KX19ZnVuY3Rpb24gb2ooZSx0LHIsbil7YXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKTt2YXIgaT1XbShlKTtyZXR1cm4gRF8odCxyKS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiBpLnBhcnNlKG8sbil9KX12YXIgTjF0PVIxdChDYiksRDF0PVIxdChBYik7ZnVuY3Rpb24gTzF0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgbyBpbiB0KWlbb109dFtvXTtpLm9uZXJyb3I9bixpLm9ubG9hZD1mdW5jdGlvbigpe3IoaSl9LGkuc3JjPWV9KX1mdW5jdGlvbiBqU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO2lmKCEoZS5zdGF0dXM9PT0yMDR8fGUuc3RhdHVzPT09MjA1KSlyZXR1cm4gZS5qc29uKCl9ZnVuY3Rpb24gejF0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihqU2UpfWZ1bmN0aW9uIGFqKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcobixlKX0pfX12YXIgRjF0PWFqKCJhcHBsaWNhdGlvbi94bWwiKSxCMXQ9YWooInRleHQvaHRtbCIpLEgxdD1haigiaW1hZ2Uvc3ZnK3htbCIpO2Z1bmN0aW9uIFYxdChlLHQpe3ZhciByO2U9PW51bGwmJihlPTApLHQ9PW51bGwmJih0PTApO2Z1bmN0aW9uIG4oKXt2YXIgaSxvPXIubGVuZ3RoLGEscz0wLGw9MDtmb3IoaT0wO2k8bzsrK2kpYT1yW2ldLHMrPWEueCxsKz1hLnk7Zm9yKHM9cy9vLWUsbD1sL28tdCxpPTA7aTxvOysraSlhPXJbaV0sYS54LT1zLGEueS09bH1yZXR1cm4gbi5pbml0aWFsaXplPWZ1bmN0aW9uKGkpe3I9aX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0raSxuKTp0fSxufWZ1bmN0aW9uIERuKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBmdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fWZ1bmN0aW9uIFUxdChlKXt2YXIgdD0rdGhpcy5feC5jYWxsKG51bGwsZSkscj0rdGhpcy5feS5jYWxsKG51bGwsZSk7cmV0dXJuIHExdCh0aGlzLmNvdmVyKHQsciksdCxyLGUpfWZ1bmN0aW9uIHExdChlLHQscixuKXtpZihpc05hTih0KXx8aXNOYU4ocikpcmV0dXJuIGU7dmFyIGksbz1lLl9yb290LGE9e2RhdGE6bn0scz1lLl94MCxsPWUuX3kwLGM9ZS5feDEsdT1lLl95MSxoLGYscCxkLGcsXyx5LHg7aWYoIW8pcmV0dXJuIGUuX3Jvb3Q9YSxlO2Zvcig7by5sZW5ndGg7KWlmKChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mLGk9bywhKG89b1t5PV88PDF8Z10pKXJldHVybiBpW3ldPWEsZTtpZihwPStlLl94LmNhbGwobnVsbCxvLmRhdGEpLGQ9K2UuX3kuY2FsbChudWxsLG8uZGF0YSksdD09PXAmJnI9PT1kKXJldHVybiBhLm5leHQ9byxpP2lbeV09YTplLl9yb290PWEsZTtkbyBpPWk/aVt5XT1uZXcgQXJyYXkoNCk6ZS5fcm9vdD1uZXcgQXJyYXkoNCksKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWY7d2hpbGUoKHk9Xzw8MXxnKT09PSh4PShkPj1mKTw8MXxwPj1oKSk7cmV0dXJuIGlbeF09byxpW3ldPWEsZX1mdW5jdGlvbiBHMXQoZSl7dmFyIHQscixuPWUubGVuZ3RoLGksbyxhPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSxsPTEvMCxjPTEvMCx1PS0xLzAsaD0tMS8wO2ZvcihyPTA7cjxuOysrcilpc05hTihpPSt0aGlzLl94LmNhbGwobnVsbCx0PWVbcl0pKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpfHwoYVtyXT1pLHNbcl09byxpPGwmJihsPWkpLGk+dSYmKHU9aSksbzxjJiYoYz1vKSxvPmgmJihoPW8pKTtpZihsPnV8fGM+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihsLGMpLmNvdmVyKHUsaCkscj0wO3I8bjsrK3IpcTF0KHRoaXMsYVtyXSxzW3JdLGVbcl0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIFcxdChlLHQpe2lmKGlzTmFOKGU9K2UpfHxpc05hTih0PSt0KSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLl94MCxuPXRoaXMuX3kwLGk9dGhpcy5feDEsbz10aGlzLl95MTtpZihpc05hTihyKSlpPShyPU1hdGguZmxvb3IoZSkpKzEsbz0obj1NYXRoLmZsb29yKHQpKSsxO2Vsc2V7Zm9yKHZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3I+ZXx8ZT49aXx8bj50fHx0Pj1vOylzd2l0Y2goYz0odDxuKTw8MXxlPHIsbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bCxhKj0yLGMpe2Nhc2UgMDppPXIrYSxvPW4rYTticmVhaztjYXNlIDE6cj1pLWEsbz1uK2E7YnJlYWs7Y2FzZSAyOmk9cithLG49by1hO2JyZWFrO2Nhc2UgMzpyPWktYSxuPW8tYTticmVha310aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9cmV0dXJuIHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpc31mdW5jdGlvbiBZMXQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy52aXNpdChmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpZG8gZS5wdXNoKHQuZGF0YSk7d2hpbGUodD10Lm5leHQpfSksZX1mdW5jdGlvbiBqMXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrZVswXVswXSwrZVswXVsxXSkuY292ZXIoK2VbMV1bMF0sK2VbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19ZnVuY3Rpb24geW8oZSx0LHIsbixpKXt0aGlzLm5vZGU9ZSx0aGlzLngwPXQsdGhpcy55MD1yLHRoaXMueDE9bix0aGlzLnkxPWl9ZnVuY3Rpb24gWDF0KGUsdCxyKXt2YXIgbixpPXRoaXMuX3gwLG89dGhpcy5feTAsYSxzLGwsYyx1PXRoaXMuX3gxLGg9dGhpcy5feTEsZj1bXSxwPXRoaXMuX3Jvb3QsZCxnO2ZvcihwJiZmLnB1c2gobmV3IHlvKHAsaSxvLHUsaCkpLHI9PW51bGw/cj0xLzA6KGk9ZS1yLG89dC1yLHU9ZStyLGg9dCtyLHIqPXIpO2Q9Zi5wb3AoKTspaWYoISghKHA9ZC5ub2RlKXx8KGE9ZC54MCk+dXx8KHM9ZC55MCk+aHx8KGw9ZC54MSk8aXx8KGM9ZC55MSk8bykpaWYocC5sZW5ndGgpe3ZhciBfPShhK2wpLzIseT0ocytjKS8yO2YucHVzaChuZXcgeW8ocFszXSxfLHksbCxjKSxuZXcgeW8ocFsyXSxhLHksXyxjKSxuZXcgeW8ocFsxXSxfLHMsbCx5KSxuZXcgeW8ocFswXSxhLHMsXyx5KSksKGc9KHQ+PXkpPDwxfGU+PV8pJiYoZD1mW2YubGVuZ3RoLTFdLGZbZi5sZW5ndGgtMV09ZltmLmxlbmd0aC0xLWddLGZbZi5sZW5ndGgtMS1nXT1kKX1lbHNle3ZhciB4PWUtK3RoaXMuX3guY2FsbChudWxsLHAuZGF0YSksYj10LSt0aGlzLl95LmNhbGwobnVsbCxwLmRhdGEpLFM9eCp4K2IqYjtpZihTPHIpe3ZhciBDPU1hdGguc3FydChyPVMpO2k9ZS1DLG89dC1DLHU9ZStDLGg9dCtDLG49cC5kYXRhfX1yZXR1cm4gbn1mdW5jdGlvbiAkMXQoZSl7aWYoaXNOYU4odT0rdGhpcy5feC5jYWxsKG51bGwsZSkpfHxpc05hTihoPSt0aGlzLl95LmNhbGwobnVsbCxlKSkpcmV0dXJuIHRoaXM7dmFyIHQscj10aGlzLl9yb290LG4saSxvLGE9dGhpcy5feDAscz10aGlzLl95MCxsPXRoaXMuX3gxLGM9dGhpcy5feTEsdSxoLGYscCxkLGcsXyx5O2lmKCFyKXJldHVybiB0aGlzO2lmKHIubGVuZ3RoKWZvcig7Oyl7aWYoKGQ9dT49KGY9KGErbCkvMikpP2E9ZjpsPWYsKGc9aD49KHA9KHMrYykvMikpP3M9cDpjPXAsdD1yLCEocj1yW189Zzw8MXxkXSkpcmV0dXJuIHRoaXM7aWYoIXIubGVuZ3RoKWJyZWFrOyh0W18rMSYzXXx8dFtfKzImM118fHRbXyszJjNdKSYmKG49dCx5PV8pfWZvcig7ci5kYXRhIT09ZTspaWYoaT1yLCEocj1yLm5leHQpKXJldHVybiB0aGlzO3JldHVybihvPXIubmV4dCkmJmRlbGV0ZSByLm5leHQsaT8obz9pLm5leHQ9bzpkZWxldGUgaS5uZXh0LHRoaXMpOnQ/KG8/dFtfXT1vOmRlbGV0ZSB0W19dLChyPXRbMF18fHRbMV18fHRbMl18fHRbM10pJiZyPT09KHRbM118fHRbMl18fHRbMV18fHRbMF0pJiYhci5sZW5ndGgmJihuP25beV09cjp0aGlzLl9yb290PXIpLHRoaXMpOih0aGlzLl9yb290PW8sdGhpcyl9ZnVuY3Rpb24gSzF0KGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOysrdCl0aGlzLnJlbW92ZShlW3RdKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBaMXQoKXtyZXR1cm4gdGhpcy5fcm9vdH1mdW5jdGlvbiBKMXQoKXt2YXIgZT0wO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbysrZTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIFExdChlKXt2YXIgdD1bXSxyLG49dGhpcy5fcm9vdCxpLG8sYSxzLGw7Zm9yKG4mJnQucHVzaChuZXcgeW8obix0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO3I9dC5wb3AoKTspaWYoIWUobj1yLm5vZGUsbz1yLngwLGE9ci55MCxzPXIueDEsbD1yLnkxKSYmbi5sZW5ndGgpe3ZhciBjPShvK3MpLzIsdT0oYStsKS8yOyhpPW5bM10pJiZ0LnB1c2gobmV3IHlvKGksYyx1LHMsbCkpLChpPW5bMl0pJiZ0LnB1c2gobmV3IHlvKGksbyx1LGMsbCkpLChpPW5bMV0pJiZ0LnB1c2gobmV3IHlvKGksYyxhLHMsdSkpLChpPW5bMF0pJiZ0LnB1c2gobmV3IHlvKGksbyxhLGMsdSkpfXJldHVybiB0aGlzfWZ1bmN0aW9uIHR4dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgeW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgeW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgeW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgeW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgeW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBleHQoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gcnh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PWUsdGhpcyk6dGhpcy5feH1mdW5jdGlvbiBueHQoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gaXh0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PWUsdGhpcyk6dGhpcy5feX1mdW5jdGlvbiB6aChlLHQscil7dmFyIG49bmV3IHNqKHQ9PW51bGw/ZXh0OnQscj09bnVsbD9ueHQ6cixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBlPT1udWxsP246bi5hZGRBbGwoZSl9ZnVuY3Rpb24gc2ooZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBveHQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciB6YT16aC5wcm90b3R5cGU9c2oucHJvdG90eXBlO3phLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgc2oodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1veHQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1veHQobikpO3JldHVybiBlfTt6YS5hZGQ9VTF0O3phLmFkZEFsbD1HMXQ7emEuY292ZXI9VzF0O3phLmRhdGE9WTF0O3phLmV4dGVudD1qMXQ7emEuZmluZD1YMXQ7emEucmVtb3ZlPSQxdDt6YS5yZW1vdmVBbGw9SzF0O3phLnJvb3Q9WjF0O3phLnNpemU9SjF0O3phLnZpc2l0PVExdDt6YS52aXNpdEFmdGVyPXR4dDt6YS54PXJ4dDt6YS55PWl4dDtmdW5jdGlvbiBYU2UoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uICRTZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gYXh0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PXpoKHQsWFNlLCRTZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9ZnUoKSxMKz1CKkIpLEk9PT0wJiYoST1mdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6RG4oK2wpLHMoKSxvKTplfSxvfVRiKCk7ZnVuY3Rpb24gS1NlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIHN4dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBseHQoZSl7dmFyIHQ9S1NlLHI9dSxuLGk9RG4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxmdSgpLGs9Qy55K0MudnktUy55LVMudnl8fGZ1KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1KaShhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPXN4dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PXN4dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6RG4oK2cpLGQoKSxoKTppfSxofWttKCk7VGIoKTtmdW5jdGlvbiBjeHQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiB1eHQoZSl7cmV0dXJuIGUueX12YXIgWlNlPTEwLEpTZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSk7ZnVuY3Rpb24gaHh0KGUpe3ZhciB0LHI9MSxuPS4wMDEsaT0xLU1hdGgucG93KG4sMS8zMDApLG89MCxhPS42LHM9SmkoKSxsPUFfKHUpLGM9dnMoInRpY2siLCJlbmQiKTtlPT1udWxsJiYoZT1bXSk7ZnVuY3Rpb24gdSgpe2goKSxjLmNhbGwoInRpY2siLHQpLHI8biYmKGwuc3RvcCgpLGMuY2FsbCgiZW5kIix0KSl9ZnVuY3Rpb24gaChkKXt2YXIgZyxfPWUubGVuZ3RoLHk7ZD09PXZvaWQgMCYmKGQ9MSk7Zm9yKHZhciB4PTA7eDxkOysreClmb3Iocis9KG8tcikqaSxzLmVhY2goZnVuY3Rpb24oYil7YihyKX0pLGc9MDtnPF87KytnKXk9ZVtnXSx5LmZ4PT1udWxsP3kueCs9eS52eCo9YTooeS54PXkuZngseS52eD0wKSx5LmZ5PT1udWxsP3kueSs9eS52eSo9YTooeS55PXkuZnkseS52eT0wKTtyZXR1cm4gdH1mdW5jdGlvbiBmKCl7Zm9yKHZhciBkPTAsZz1lLmxlbmd0aCxfO2Q8ZzsrK2Qpe2lmKF89ZVtkXSxfLmluZGV4PWQsXy5meCE9bnVsbCYmKF8ueD1fLmZ4KSxfLmZ5IT1udWxsJiYoXy55PV8uZnkpLGlzTmFOKF8ueCl8fGlzTmFOKF8ueSkpe3ZhciB5PVpTZSpNYXRoLnNxcnQoZCkseD1kKkpTZTtfLng9eSpNYXRoLmNvcyh4KSxfLnk9eSpNYXRoLnNpbih4KX0oaXNOYU4oXy52eCl8fGlzTmFOKF8udnkpKSYmKF8udng9Xy52eT0wKX19ZnVuY3Rpb24gcChkKXtyZXR1cm4gZC5pbml0aWFsaXplJiZkLmluaXRpYWxpemUoZSksZH1yZXR1cm4gZigpLHQ9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGwucmVzdGFydCh1KSx0fSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGwuc3RvcCgpLHR9LG5vZGVzOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWQsZigpLHMuZWFjaChwKSx0KTplfSxhbHBoYTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZCx0KTpyfSxhbHBoYU1pbjpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZCx0KTpufSxhbHBoYURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStkLHQpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZCx0KTpvfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPTEtZCx0KToxLWF9LGZvcmNlOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oZz09bnVsbD9zLnJlbW92ZShkKTpzLnNldChkLHAoZykpLHQpOnMuZ2V0KGQpfSxmaW5kOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT0wLHg9ZS5sZW5ndGgsYixTLEMsUCxrO2ZvcihfPT1udWxsP189MS8wOl8qPV8seT0wO3k8eDsrK3kpUD1lW3ldLGI9ZC1QLngsUz1nLVAueSxDPWIqYitTKlMsQzxfJiYoaz1QLF89Qyk7cmV0dXJuIGt9LG9uOmZ1bmN0aW9uKGQsZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8oYy5vbihkLGcpLHQpOmMub24oZCl9fX1mdW5jdGlvbiBmeHQoKXt2YXIgZSx0LHIsbj1EbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPXpoKGUsY3h0LHV4dCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89ZnUoKSxiKz1fKl8pLHk9PT0wJiYoeT1mdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkRuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH1mdW5jdGlvbiBweHQoZSx0LHIpe3ZhciBuLGk9RG4oLjEpLG8sYTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oK2UpKSx0PT1udWxsJiYodD0wKSxyPT1udWxsJiYocj0wKTtmdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT0wLGg9bi5sZW5ndGg7dTxoOysrdSl7dmFyIGY9blt1XSxwPWYueC10fHwxZS02LGQ9Zi55LXJ8fDFlLTYsZz1NYXRoLnNxcnQocCpwK2QqZCksXz0oYVt1XS1nKSpvW3VdKmMvZztmLnZ4Kz1wKl8sZi52eSs9ZCpffX1mdW5jdGlvbiBsKCl7aWYoISFuKXt2YXIgYyx1PW4ubGVuZ3RoO2ZvcihvPW5ldyBBcnJheSh1KSxhPW5ldyBBcnJheSh1KSxjPTA7Yzx1OysrYylhW2NdPStlKG5bY10sYyxuKSxvW2NdPWlzTmFOKGFbY10pPzA6K2kobltjXSxjLG4pfX1yZXR1cm4gcy5pbml0aWFsaXplPWZ1bmN0aW9uKGMpe249YyxsKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpEbigrYyksbCgpLHMpOml9LHMucmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6RG4oK2MpLGwoKSxzKTplfSxzLng9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Mscyk6dH0scy55PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStjLHMpOnJ9LHN9ZnVuY3Rpb24gZHh0KGUpe3ZhciB0PURuKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9RG4oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eCs9KGlbbF0tdS54KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6dH0sby54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6RG4oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIG14dChlKXt2YXIgdD1EbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPURuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpEbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkRuKCtzKSxhKCksbyk6ZX0sb31mdW5jdGlvbiBneHQoZSl7cmV0dXJuIE1hdGguYWJzKGU9TWF0aC5yb3VuZChlKSk+PTFlMjE/ZS50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOmUudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE9fKGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfWZ1bmN0aW9uIEZoKGUpe3JldHVybiBlPU9fKE1hdGguYWJzKGUpKSxlP2VbMV06TmFOfWZ1bmN0aW9uIF94dChlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1yLmxlbmd0aCxvPVtdLGE9MCxzPWVbMF0sbD0wO2k+MCYmcz4wJiYobCtzKzE+biYmKHM9TWF0aC5tYXgoMSxuLWwpKSxvLnB1c2goci5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChsKz1zKzEpPm4pKTspcz1lW2E9KGErMSklZS5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiB5eHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbK3JdfSl9fXZhciBRU2U9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gTHAoZSl7aWYoISh0PVFTZS5leGVjKGUpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2UpO3ZhciB0O3JldHVybiBuZXcgR0Uoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9THAucHJvdG90eXBlPUdFLnByb3RvdHlwZTtmdW5jdGlvbiBHRShlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn1HRS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiB2eHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIGxqO2Z1bmN0aW9uIHh4dChlLHQpe3ZhciByPU9fKGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV0sbz1pLShsaj1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK09fKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfWZ1bmN0aW9uIGNqKGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgdWo9eyIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpneHQsZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY2ooZSoxMDAsdCl9LHI6Y2osczp4eHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBoaihlKXtyZXR1cm4gZX12YXIgYnh0PUFycmF5LnByb3RvdHlwZS5tYXAsd3h0PVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIGVrKGUpe3ZhciB0PWUuZ3JvdXBpbmc9PT12b2lkIDB8fGUudGhvdXNhbmRzPT09dm9pZCAwP2hqOl94dChieHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP2hqOnl4dChieHQuY2FsbChlLm51bWVyYWxzLFN0cmluZykpLGE9ZS5wZXJjZW50PT09dm9pZCAwPyIlIjplLnBlcmNlbnQrIiIscz1lLm1pbnVzPT09dm9pZCAwPyItIjplLm1pbnVzKyIiLGw9ZS5uYW49PT12b2lkIDA/Ik5hTiI6ZS5uYW4rIiI7ZnVuY3Rpb24gYyhoKXtoPUxwKGgpO3ZhciBmPWguZmlsbCxwPWguYWxpZ24sZD1oLnNpZ24sZz1oLnN5bWJvbCxfPWguemVybyx5PWgud2lkdGgseD1oLmNvbW1hLGI9aC5wcmVjaXNpb24sUz1oLnRyaW0sQz1oLnR5cGU7Qz09PSJuIj8oeD0hMCxDPSJnIik6dWpbQ118fChiPT09dm9pZCAwJiYoYj0xMiksUz0hMCxDPSJnIiksKF98fGY9PT0iMCImJnA9PT0iPSIpJiYoXz0hMCxmPSIwIixwPSI9Iik7dmFyIFA9Zz09PSIkIj9yOmc9PT0iIyImJi9bYm94WF0vLnRlc3QoQyk/IjAiK0MudG9Mb3dlckNhc2UoKToiIixrPWc9PT0iJCI/bjovWyVwXS8udGVzdChDKT9hOiIiLE89dWpbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPXZ4dChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP3d4dFs4K2xqLzNdOiIiKStSKyhXJiZkPT09IigiPyIpIjoiIiksRCl7Zm9yKEY9LTEsej1JLmxlbmd0aDsrK0Y8ejspaWYoVT1JLmNoYXJDb2RlQXQoRiksNDg+VXx8VT41Nyl7Uj0oVT09PTQ2P2krSS5zbGljZShGKzEpOkkuc2xpY2UoRikpK1IsST1JLnNsaWNlKDAsRik7YnJlYWt9fX14JiYhXyYmKEk9dChJLDEvMCkpO3ZhciBaPUwubGVuZ3RoK0kubGVuZ3RoK1IubGVuZ3RoLHJ0PVo8eT9uZXcgQXJyYXkoeS1aKzEpLmpvaW4oZik6IiI7c3dpdGNoKHgmJl8mJihJPXQocnQrSSxydC5sZW5ndGg/eS1SLmxlbmd0aDoxLzApLHJ0PSIiKSxwKXtjYXNlIjwiOkk9TCtJK1IrcnQ7YnJlYWs7Y2FzZSI9IjpJPUwrcnQrSStSO2JyZWFrO2Nhc2UiXiI6ST1ydC5zbGljZSgwLFo9cnQubGVuZ3RoPj4xKStMK0krUitydC5zbGljZShaKTticmVhaztkZWZhdWx0Okk9cnQrTCtJK1I7YnJlYWt9cmV0dXJuIG8oSSl9cmV0dXJuIEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gaCsiIn0sQn1mdW5jdGlvbiB1KGgsZil7dmFyIHA9YygoaD1McChoKSxoLnR5cGU9ImYiLGgpKSxkPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaChmKS8zKSkpKjMsZz1NYXRoLnBvdygxMCwtZCksXz13eHRbOCtkLzNdO3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gcChnKnkpK199fXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6dX19dmFyIHJrLHhuLFdFO25rKHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KTtmdW5jdGlvbiBuayhlKXtyZXR1cm4gcms9ZWsoZSkseG49cmsuZm9ybWF0LFdFPXJrLmZvcm1hdFByZWZpeCxya31mdW5jdGlvbiBpayhlKXtyZXR1cm4gTWF0aC5tYXgoMCwtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBvayhlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihGaCh0KS8zKSkpKjMtRmgoTWF0aC5hYnMoZSkpKX1mdW5jdGlvbiBhayhlLHQpe3JldHVybiBlPU1hdGguYWJzKGUpLHQ9TWF0aC5hYnModCktZSxNYXRoLm1heCgwLEZoKHQpLUZoKGUpKSsxfWZ1bmN0aW9uIFNzKCl7cmV0dXJuIG5ldyBsa31mdW5jdGlvbiBsaygpe3RoaXMucmVzZXQoKX1say5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmxrLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSxhZGQ6ZnVuY3Rpb24oZSl7U3h0KHNrLGUsdGhpcy50KSxTeHQodGhpcyxzay5zLHRoaXMucyksdGhpcy5zP3RoaXMudCs9c2sudDp0aGlzLnM9c2sudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgc2s9bmV3IGxrO2Z1bmN0aW9uIFN4dChlLHQscil7dmFyIG49ZS5zPXQrcixpPW4tdCxvPW4taTtlLnQ9dC1vKyhyLWkpfXZhciBsZT0xZS02LHpfPTFlLTEyLEJlPU1hdGguUEksbW49QmUvMixQYj1CZS80LHdpPUJlKjIsdnI9MTgwL0JlLHllPUJlLzE4MCxSZT1NYXRoLmFicyxpYz1NYXRoLmF0YW4sYm49TWF0aC5hdGFuMixadD1NYXRoLmNvcyxZRT1NYXRoLmNlaWwsY2s9TWF0aC5leHA7dmFyIEZfPU1hdGgubG9nLHVrPU1hdGgucG93LFh0PU1hdGguc2luLGNhPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSx4cj1NYXRoLnNxcnQsSWI9TWF0aC50YW47ZnVuY3Rpb24gaGsoZSl7cmV0dXJuIGU+MT8wOmU8LTE/QmU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIHduKGUpe3JldHVybiBlPjE/bW46ZTwtMT8tbW46TWF0aC5hc2luKGUpfWZ1bmN0aW9uIGZqKGUpe3JldHVybihlPVh0KGUvMikpKmV9ZnVuY3Rpb24gRnIoKXt9ZnVuY3Rpb24gZmsoZSx0KXtlJiZFeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKSYmRXh0W2UudHlwZV0oZSx0KX12YXIgTXh0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7ZmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWZrKHJbbl0uZ2VvbWV0cnksdCl9fSxFeHQ9e1NwaGVyZTpmdW5jdGlvbihlLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKGUsdCl7ZT1lLmNvb3JkaW5hdGVzLHQucG9pbnQoZVswXSxlWzFdLGVbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyllPXJbbl0sdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtwaihlLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspcGoocltuXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7VHh0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspVHh0KHJbbl0sdCl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylmayhyW25dLHQpfX07ZnVuY3Rpb24gcGooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gVHh0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspcGooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIHZvKGUsdCl7ZSYmTXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/TXh0W2UudHlwZV0oZSx0KTpmayhlLHQpfXZhciBqRT1TcygpLHBrPVNzKCksQ3h0LEF4dCxkaixtaixnaixwdT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7akUucmVzZXQoKSxwdS5saW5lU3RhcnQ9dDNlLHB1LmxpbmVFbmQ9ZTNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9K2pFO3BrLmFkZChlPDA/d2krZTplKSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1Gcn0sc3BoZXJlOmZ1bmN0aW9uKCl7cGsuYWRkKHdpKX19O2Z1bmN0aW9uIHQzZSgpe3B1LnBvaW50PXIzZX1mdW5jdGlvbiBlM2UoKXtQeHQoQ3h0LEF4dCl9ZnVuY3Rpb24gcjNlKGUsdCl7cHUucG9pbnQ9UHh0LEN4dD1lLEF4dD10LGUqPXllLHQqPXllLGRqPWUsbWo9WnQodD10LzIrUGIpLGdqPVh0KHQpfWZ1bmN0aW9uIFB4dChlLHQpe2UqPXllLHQqPXllLHQ9dC8yK1BiO3ZhciByPWUtZGosbj1yPj0wPzE6LTEsaT1uKnIsbz1adCh0KSxhPVh0KHQpLHM9Z2oqYSxsPW1qKm8rcypadChpKSxjPXMqbipYdChpKTtqRS5hZGQoYm4oYyxsKSksZGo9ZSxtaj1vLGdqPWF9ZnVuY3Rpb24gSXh0KGUpe3JldHVybiBway5yZXNldCgpLHZvKGUscHUpLHBrKjJ9ZnVuY3Rpb24gQl8oZSl7cmV0dXJuW2JuKGVbMV0sZVswXSksd24oZVsyXSldfWZ1bmN0aW9uIG9jKGUpe3ZhciB0PWVbMF0scj1lWzFdLG49WnQocik7cmV0dXJuW24qWnQodCksbipYdCh0KSxYdChyKV19ZnVuY3Rpb24gWEUoZSx0KXtyZXR1cm4gZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl19ZnVuY3Rpb24ga3AoZSx0KXtyZXR1cm5bZVsxXSp0WzJdLWVbMl0qdFsxXSxlWzJdKnRbMF0tZVswXSp0WzJdLGVbMF0qdFsxXS1lWzFdKnRbMF1dfWZ1bmN0aW9uIGRrKGUsdCl7ZVswXSs9dFswXSxlWzFdKz10WzFdLGVbMl0rPXRbMl19ZnVuY3Rpb24gJEUoZSx0KXtyZXR1cm5bZVswXSp0LGVbMV0qdCxlWzJdKnRdfWZ1bmN0aW9uIEhfKGUpe3ZhciB0PXhyKGVbMF0qZVswXStlWzFdKmVbMV0rZVsyXSplWzJdKTtlWzBdLz10LGVbMV0vPXQsZVsyXS89dH12YXIgcmksTXMsdWksbmwsVl8sTnh0LER4dCxMYixLRT1TcygpLFltLE5wLFJwPXtwb2ludDpfaixsaW5lU3RhcnQ6THh0LGxpbmVFbmQ6a3h0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1JwLnBvaW50PXp4dCxScC5saW5lU3RhcnQ9bjNlLFJwLmxpbmVFbmQ9aTNlLEtFLnJlc2V0KCkscHUucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtwdS5wb2x5Z29uRW5kKCksUnAucG9pbnQ9X2osUnAubGluZVN0YXJ0PUx4dCxScC5saW5lRW5kPWt4dCxqRTwwPyhyaT0tKHVpPTE4MCksTXM9LShubD05MCkpOktFPmxlP25sPTkwOktFPC1sZSYmKE1zPS05MCksTnBbMF09cmksTnBbMV09dWl9LHNwaGVyZTpmdW5jdGlvbigpe3JpPS0odWk9MTgwKSxNcz0tKG5sPTkwKX19O2Z1bmN0aW9uIF9qKGUsdCl7WW0ucHVzaChOcD1bcmk9ZSx1aT1lXSksdDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KX1mdW5jdGlvbiBPeHQoZSx0KXt2YXIgcj1vYyhbZSp5ZSx0KnllXSk7aWYoTGIpe3ZhciBuPWtwKExiLHIpLGk9W25bMV0sLW5bMF0sMF0sbz1rcChpLG4pO0hfKG8pLG89Ql8obyk7dmFyIGE9ZS1WXyxzPWE+MD8xOi0xLGw9b1swXSp2cipzLGMsdT1SZShhKT4xODA7dV4ocypWXzxsJiZsPHMqZSk/KGM9b1sxXSp2cixjPm5sJiYobmw9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKlZfPGwmJmw8cyplKT8oYz0tb1sxXSp2cixjPE1zJiYoTXM9YykpOih0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpKSksdT9lPFZfP3JsKHJpLGUpPnJsKHJpLHVpKSYmKHVpPWUpOnJsKGUsdWkpPnJsKHJpLHVpKSYmKHJpPWUpOnVpPj1yaT8oZTxyaSYmKHJpPWUpLGU+dWkmJih1aT1lKSk6ZT5WXz9ybChyaSxlKT5ybChyaSx1aSkmJih1aT1lKTpybChlLHVpKT5ybChyaSx1aSkmJihyaT1lKX1lbHNlIFltLnB1c2goTnA9W3JpPWUsdWk9ZV0pO3Q8TXMmJihNcz10KSx0Pm5sJiYobmw9dCksTGI9cixWXz1lfWZ1bmN0aW9uIEx4dCgpe1JwLnBvaW50PU94dH1mdW5jdGlvbiBreHQoKXtOcFswXT1yaSxOcFsxXT11aSxScC5wb2ludD1faixMYj1udWxsfWZ1bmN0aW9uIHp4dChlLHQpe2lmKExiKXt2YXIgcj1lLVZfO0tFLmFkZChSZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIE54dD1lLER4dD10O3B1LnBvaW50KGUsdCksT3h0KGUsdCl9ZnVuY3Rpb24gbjNlKCl7cHUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gaTNlKCl7enh0KE54dCxEeHQpLHB1LmxpbmVFbmQoKSxSZShLRSk+bGUmJihyaT0tKHVpPTE4MCkpLE5wWzBdPXJpLE5wWzFdPXVpLExiPW51bGx9ZnVuY3Rpb24gcmwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIG8zZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gUnh0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBGeHQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYobmw9dWk9LShyaT1Ncz0xLzApLFltPVtdLHZvKGUsUnApLHI9WW0ubGVuZ3RoKXtmb3IoWW0uc29ydChvM2UpLHQ9MSxuPVltWzBdLG89W25dO3Q8cjsrK3QpaT1ZbVt0XSxSeHQobixpWzBdKXx8Unh0KG4saVsxXSk/KHJsKG5bMF0saVsxXSk+cmwoblswXSxuWzFdKSYmKG5bMV09aVsxXSkscmwoaVswXSxuWzFdKT5ybChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXJsKG5bMV0saVswXSkpPmEmJihhPXMscmk9aVswXSx1aT1uWzFdKX1yZXR1cm4gWW09TnA9bnVsbCxyaT09PTEvMHx8TXM9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbcmksTXNdLFt1aSxubF1dfXZhciBaRSxtayxnayxfayx5ayx2ayx4ayxiayx5aix2aix4aixWeHQsVXh0LEZhLEJhLEhhLGR1PXtzcGhlcmU6RnIscG9pbnQ6YmosbGluZVN0YXJ0OkJ4dCxsaW5lRW5kOkh4dCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9bDNlLGR1LmxpbmVFbmQ9YzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZHUubGluZVN0YXJ0PUJ4dCxkdS5saW5lRW5kPUh4dH19O2Z1bmN0aW9uIGJqKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7SkUocipadChlKSxyKlh0KGUpLFh0KHQpKX1mdW5jdGlvbiBKRShlLHQscil7KytaRSxnays9KGUtZ2spL1pFLF9rKz0odC1faykvWkUseWsrPShyLXlrKS9aRX1mdW5jdGlvbiBCeHQoKXtkdS5wb2ludD1hM2V9ZnVuY3Rpb24gYTNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLGR1LnBvaW50PXMzZSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gczNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WnQodCksbj1yKlp0KGUpLGk9cipYdChlKSxvPVh0KHQpLGE9Ym4oeHIoKGE9QmEqby1IYSppKSphKyhhPUhhKm4tRmEqbykqYSsoYT1GYSppLUJhKm4pKmEpLEZhKm4rQmEqaStIYSpvKTttays9YSx2ays9YSooRmErKEZhPW4pKSx4ays9YSooQmErKEJhPWkpKSxiays9YSooSGErKEhhPW8pKSxKRShGYSxCYSxIYSl9ZnVuY3Rpb24gSHh0KCl7ZHUucG9pbnQ9Ymp9ZnVuY3Rpb24gbDNlKCl7ZHUucG9pbnQ9dTNlfWZ1bmN0aW9uIGMzZSgpe3F4dChWeHQsVXh0KSxkdS5wb2ludD1ian1mdW5jdGlvbiB1M2UoZSx0KXtWeHQ9ZSxVeHQ9dCxlKj15ZSx0Kj15ZSxkdS5wb2ludD1xeHQ7dmFyIHI9WnQodCk7RmE9cipadChlKSxCYT1yKlh0KGUpLEhhPVh0KHQpLEpFKEZhLEJhLEhhKX1mdW5jdGlvbiBxeHQoZSx0KXtlKj15ZSx0Kj15ZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1CYSpvLUhhKmkscz1IYSpuLUZhKm8sbD1GYSppLUJhKm4sYz14cihhKmErcypzK2wqbCksdT13bihjKSxoPWMmJi11L2M7eWorPWgqYSx2ais9aCpzLHhqKz1oKmwsbWsrPXUsdmsrPXUqKEZhKyhGYT1uKSkseGsrPXUqKEJhKyhCYT1pKSksYmsrPXUqKEhhKyhIYT1vKSksSkUoRmEsQmEsSGEpfWZ1bmN0aW9uIEd4dChlKXtaRT1taz1naz1faz15az12az14az1iaz15aj12aj14aj0wLHZvKGUsZHUpO3ZhciB0PXlqLHI9dmosbj14aixpPXQqdCtyKnIrbipuO3JldHVybiBpPHpfJiYodD12ayxyPXhrLG49YmssbWs8bGUmJih0PWdrLHI9X2ssbj15ayksaT10KnQrcipyK24qbixpPHpfKT9bTmFOLE5hTl06W2JuKHIsdCkqdnIsd24obi94cihpKSkqdnJdfWZ1bmN0aW9uIFVfKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBRRShlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9ZnVuY3Rpb24gd2ooZSx0KXtyZXR1cm5bUmUoZSk+QmU/ZStNYXRoLnJvdW5kKC1lL3dpKSp3aTplLHRdfXdqLmludmVydD13ajtmdW5jdGlvbiB0NShlLHQscil7cmV0dXJuKGUlPXdpKT90fHxyP1FFKFl4dChlKSxqeHQodCxyKSk6WXh0KGUpOnR8fHI/anh0KHQscik6d2p9ZnVuY3Rpb24gV3h0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0Kz1lLFt0PkJlP3Qtd2k6dDwtQmU/dCt3aTp0LHJdfX1mdW5jdGlvbiBZeHQoZSl7dmFyIHQ9V3h0KGUpO3JldHVybiB0LmludmVydD1XeHQoLWUpLHR9ZnVuY3Rpb24ganh0KGUsdCl7dmFyIHI9WnQoZSksbj1YdChlKSxpPVp0KHQpLG89WHQodCk7ZnVuY3Rpb24gYShzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqcit1Km47cmV0dXJuW2JuKGgqaS1wKm8sdSpyLWYqbiksd24ocCppK2gqbyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPVp0KGwpLHU9WnQocykqYyxoPVh0KHMpKmMsZj1YdChsKSxwPWYqaS1oKm87cmV0dXJuW2JuKGgqaStmKm8sdSpyK3Aqbiksd24ocCpyLXUqbildfSxhfWZ1bmN0aW9uIHdrKGUpe2U9dDUoZVswXSp5ZSxlWzFdKnllLGUubGVuZ3RoPjI/ZVsyXSp5ZTowKTtmdW5jdGlvbiB0KHIpe3JldHVybiByPWUoclswXSp5ZSxyWzFdKnllKSxyWzBdKj12cixyWzFdKj12cixyfXJldHVybiB0LmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gcj1lLmludmVydChyWzBdKnllLHJbMV0qeWUpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9LHR9ZnVuY3Rpb24gU2ooZSx0LHIsbixpLG8pe2lmKCEhcil7dmFyIGE9WnQodCkscz1YdCh0KSxsPW4qcjtpPT1udWxsPyhpPXQrbip3aSxvPXQtbC8yKTooaT1YeHQoYSxpKSxvPVh4dChhLG8pLChuPjA/aTxvOmk+bykmJihpKz1uKndpKSk7Zm9yKHZhciBjLHU9aTtuPjA/dT5vOnU8bzt1LT1sKWM9Ql8oW2EsLXMqWnQodSksLXMqWHQodSldKSxlLnBvaW50KGNbMF0sY1sxXSl9fWZ1bmN0aW9uIFh4dChlLHQpe3Q9b2ModCksdFswXS09ZSxIXyh0KTt2YXIgcj1oaygtdFsxXSk7cmV0dXJuKCgtdFsyXTwwPy1yOnIpK3dpLWxlKSV3aX1mdW5jdGlvbiAkeHQoKXt2YXIgZT1VXyhbMCwwXSksdD1VXyg5MCkscj1VXyg2KSxuLGksbz17cG9pbnQ6YX07ZnVuY3Rpb24gYShsLGMpe24ucHVzaChsPWkobCxjKSksbFswXSo9dnIsbFsxXSo9dnJ9ZnVuY3Rpb24gcygpe3ZhciBsPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cykqeWUsdT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSp5ZTtyZXR1cm4gbj1bXSxpPXQ1KC1sWzBdKnllLC1sWzFdKnllLDApLmludmVydCxTaihvLGMsdSwxKSxsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbl19LG49aT1udWxsLGx9cmV0dXJuIHMuY2VudGVyPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6VV8oWytsWzBdLCtsWzFdXSkscyk6ZX0scy5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6dH0scy5wcmVjaXNpb249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXygrbCkscyk6cn0sc31mdW5jdGlvbiBTaygpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbixpKXt0LnB1c2goW3IsbixpXSl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2UucHVzaCh0PVtdKX0sbGluZUVuZDpGcixyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBrYihlLHQpe3JldHVybiBSZShlWzBdLXRbMF0pPGxlJiZSZShlWzFdLXRbMV0pPGxlfWZ1bmN0aW9uIE1rKGUsdCxyLG4pe3RoaXMueD1lLHRoaXMuej10LHRoaXMubz1yLHRoaXMuZT1uLHRoaXMudj0hMSx0aGlzLm49dGhpcy5wPW51bGx9ZnVuY3Rpb24gRWsoZSx0LHIsbixpKXt2YXIgbz1bXSxhPVtdLHMsbDtpZihlLmZvckVhY2goZnVuY3Rpb24oZCl7aWYoISgoZz1kLmxlbmd0aC0xKTw9MCkpe3ZhciBnLF89ZFswXSx5PWRbZ10seDtpZihrYihfLHkpKXtpZighX1syXSYmIXlbMl0pe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufXlbMF0rPTIqbGV9by5wdXNoKHg9bmV3IE1rKF8sZCxudWxsLCEwKSksYS5wdXNoKHgubz1uZXcgTWsoXyxudWxsLHgsITEpKSxvLnB1c2goeD1uZXcgTWsoeSxkLG51bGwsITEpKSxhLnB1c2goeC5vPW5ldyBNayh5LG51bGwseCwhMCkpfX0pLCEhby5sZW5ndGgpe2ZvcihhLnNvcnQodCksS3h0KG8pLEt4dChhKSxzPTAsbD1hLmxlbmd0aDtzPGw7KytzKWFbc10uZT1yPSFyO2Zvcih2YXIgYz1vWzBdLHUsaDs7KXtmb3IodmFyIGY9YyxwPSEwO2YudjspaWYoKGY9Zi5uKT09PWMpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYocClmb3Iocz0wLGw9dS5sZW5ndGg7czxsOysrcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKHApZm9yKHU9Zi5wLnoscz11Lmxlbmd0aC0xO3M+PTA7LS1zKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLnAueCwtMSxpKTtmPWYucH1mPWYubyx1PWYueixwPSFwfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19ZnVuY3Rpb24gS3h0KGUpe2lmKCEhKHQ9ZS5sZW5ndGgpKXtmb3IodmFyIHQscj0wLG49ZVswXSxpOysrcjx0OyluLm49aT1lW3JdLGkucD1uLG49aTtuLm49aT1lWzBdLGkucD1ufX12YXIgTWo9U3MoKTtmdW5jdGlvbiBFaihlKXtyZXR1cm4gUmUoZVswXSk8PUJlP2VbMF06Y2EoZVswXSkqKChSZShlWzBdKStCZSkld2ktQmUpfWZ1bmN0aW9uIFRrKGUsdCl7dmFyIHI9RWoodCksbj10WzFdLGk9WHQobiksbz1bWHQociksLVp0KHIpLDBdLGE9MCxzPTA7TWoucmVzZXQoKSxpPT09MT9uPW1uK2xlOmk9PT0tMSYmKG49LW1uLWxlKTtmb3IodmFyIGw9MCxjPWUubGVuZ3RoO2w8YzsrK2wpaWYoISEoaD0odT1lW2xdKS5sZW5ndGgpKWZvcih2YXIgdSxoLGY9dVtoLTFdLHA9RWooZiksZD1mWzFdLzIrUGIsZz1YdChkKSxfPVp0KGQpLHk9MDt5PGg7Kyt5LHA9YixnPUMsXz1QLGY9eCl7dmFyIHg9dVt5XSxiPUVqKHgpLFM9eFsxXS8yK1BiLEM9WHQoUyksUD1adChTKSxrPWItcCxPPWs+PTA/MTotMSxEPU8qayxCPUQ+QmUsST1nKkM7aWYoTWouYWRkKGJuKEkqTypYdChEKSxfKlArSSpadChEKSkpLGErPUI/aytPKndpOmssQl5wPj1yXmI+PXIpe3ZhciBMPWtwKG9jKGYpLG9jKHgpKTtIXyhMKTt2YXIgUj1rcChvLEwpO0hfKFIpO3ZhciBGPShCXms+PTA/LTE6MSkqd24oUlsyXSk7KG4+Rnx8bj09PUYmJihMWzBdfHxMWzFdKSkmJihzKz1CXms+PTA/MTotMSl9fXJldHVybihhPC1sZXx8YTxsZSYmTWo8LWxlKV5zJjF9ZnVuY3Rpb24gQ2soZSx0LHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQoaSksYT1TaygpLHM9dChhKSxsPSExLGMsdSxoLGY9e3BvaW50OnAsbGluZVN0YXJ0OmcsbGluZUVuZDpfLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2YucG9pbnQ9eSxmLmxpbmVTdGFydD14LGYubGluZUVuZD1iLHU9W10sYz1bXX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2YucG9pbnQ9cCxmLmxpbmVTdGFydD1nLGYubGluZUVuZD1fLHU9SW0odSk7dmFyIFM9VGsoYyxuKTt1Lmxlbmd0aD8obHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksRWsodSxmM2UsUyxyLGkpKTpTJiYobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpKSxsJiYoaS5wb2x5Z29uRW5kKCksbD0hMSksdT1jPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2kucG9seWdvblN0YXJ0KCksaS5saW5lU3RhcnQoKSxyKG51bGwsbnVsbCwxLGkpLGkubGluZUVuZCgpLGkucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gcChTLEMpe2UoUyxDKSYmaS5wb2ludChTLEMpfWZ1bmN0aW9uIGQoUyxDKXtvLnBvaW50KFMsQyl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxvLmxpbmVTdGFydCgpfWZ1bmN0aW9uIF8oKXtmLnBvaW50PXAsby5saW5lRW5kKCl9ZnVuY3Rpb24geShTLEMpe2gucHVzaChbUyxDXSkscy5wb2ludChTLEMpfWZ1bmN0aW9uIHgoKXtzLmxpbmVTdGFydCgpLGg9W119ZnVuY3Rpb24gYigpe3koaFswXVswXSxoWzBdWzFdKSxzLmxpbmVFbmQoKTt2YXIgUz1zLmNsZWFuKCksQz1hLnJlc3VsdCgpLFAsaz1DLmxlbmd0aCxPLEQsQjtpZihoLnBvcCgpLGMucHVzaChoKSxoPW51bGwsISFrKXtpZihTJjEpe2lmKEQ9Q1swXSwoTz1ELmxlbmd0aC0xKT4wKXtmb3IobHx8KGkucG9seWdvblN0YXJ0KCksbD0hMCksaS5saW5lU3RhcnQoKSxQPTA7UDxPOysrUClpLnBvaW50KChCPURbUF0pWzBdLEJbMV0pO2kubGluZUVuZCgpfXJldHVybn1rPjEmJlMmMiYmQy5wdXNoKEMucG9wKCkuY29uY2F0KEMuc2hpZnQoKSkpLHUucHVzaChDLmZpbHRlcihoM2UpKX19cmV0dXJuIGZ9fWZ1bmN0aW9uIGgzZShlKXtyZXR1cm4gZS5sZW5ndGg+MX1mdW5jdGlvbiBmM2UoZSx0KXtyZXR1cm4oKGU9ZS54KVswXTwwP2VbMV0tbW4tbGU6bW4tZVsxXSktKCh0PXQueClbMF08MD90WzFdLW1uLWxlOm1uLXRbMV0pfXZhciBlNT1DayhmdW5jdGlvbigpe3JldHVybiEwfSxwM2UsbTNlLFstQmUsLW1uXSk7ZnVuY3Rpb24gcDNlKGUpe3ZhciB0PU5hTixyPU5hTixuPU5hTixpO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLmxpbmVTdGFydCgpLGk9MX0scG9pbnQ6ZnVuY3Rpb24obyxhKXt2YXIgcz1vPjA/QmU6LUJlLGw9UmUoby10KTtSZShsLUJlKTxsZT8oZS5wb2ludCh0LHI9KHIrYSkvMj4wP21uOi1tbiksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGUucG9pbnQobyxyKSxpPTApOm4hPT1zJiZsPj1CZSYmKFJlKHQtbik8bGUmJih0LT1uKmxlKSxSZShvLXMpPGxlJiYoby09cypsZSkscj1kM2UodCxyLG8sYSksZS5wb2ludChuLHIpLGUubGluZUVuZCgpLGUubGluZVN0YXJ0KCksZS5wb2ludChzLHIpLGk9MCksZS5wb2ludCh0PW8scj1hKSxuPXN9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtlLmxpbmVFbmQoKSx0PXI9TmFOfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiAyLWl9fX1mdW5jdGlvbiBkM2UoZSx0LHIsbil7dmFyIGksbyxhPVh0KGUtcik7cmV0dXJuIFJlKGEpPmxlP2ljKChYdCh0KSoobz1adChuKSkqWHQociktWHQobikqKGk9WnQodCkpKlh0KGUpKS8oaSpvKmEpKToodCtuKS8yfWZ1bmN0aW9uIG0zZShlLHQscixuKXt2YXIgaTtpZihlPT1udWxsKWk9ciptbixuLnBvaW50KC1CZSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChCZSxpKSxuLnBvaW50KEJlLDApLG4ucG9pbnQoQmUsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtQmUsLWkpLG4ucG9pbnQoLUJlLDApLG4ucG9pbnQoLUJlLGkpO2Vsc2UgaWYoUmUoZVswXS10WzBdKT5sZSl7dmFyIG89ZVswXTx0WzBdP0JlOi1CZTtpPXIqby8yLG4ucG9pbnQoLW8saSksbi5wb2ludCgwLGkpLG4ucG9pbnQobyxpKX1lbHNlIG4ucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBBayhlKXt2YXIgdD1adChlKSxyPTYqeWUsbj10PjAsaT1SZSh0KT5sZTtmdW5jdGlvbiBvKHUsaCxmLHApe1NqKHAsZSxyLGYsdSxoKX1mdW5jdGlvbiBhKHUsaCl7cmV0dXJuIFp0KHUpKlp0KGgpPnR9ZnVuY3Rpb24gcyh1KXt2YXIgaCxmLHAsZCxnO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtkPXA9ITEsZz0xfSxwb2ludDpmdW5jdGlvbihfLHkpe3ZhciB4PVtfLHldLGIsUz1hKF8seSksQz1uP1M/MDpjKF8seSk6Uz9jKF8rKF88MD9CZTotQmUpLHkpOjA7aWYoIWgmJihkPXA9UykmJnUubGluZVN0YXJ0KCksUyE9PXAmJihiPWwoaCx4KSwoIWJ8fGtiKGgsYil8fGtiKHgsYikpJiYoeFsyXT0xKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0sMiksdS5saW5lRW5kKCkpLGg9YjtlbHNlIGlmKGkmJmgmJm5eUyl7dmFyIFA7IShDJmYpJiYoUD1sKHgsaCwhMCkpJiYoZz0wLG4/KHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0pLHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSk6KHUucG9pbnQoUFsxXVswXSxQWzFdWzFdKSx1LmxpbmVFbmQoKSx1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdLDMpKSl9UyYmKCFofHwha2IoaCx4KSkmJnUucG9pbnQoeFswXSx4WzFdKSxoPXgscD1TLGY9Q30sbGluZUVuZDpmdW5jdGlvbigpe3AmJnUubGluZUVuZCgpLGg9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gZ3woZCYmcCk8PDF9fX1mdW5jdGlvbiBsKHUsaCxmKXt2YXIgcD1vYyh1KSxkPW9jKGgpLGc9WzEsMCwwXSxfPWtwKHAsZCkseT1YRShfLF8pLHg9X1swXSxiPXkteCp4O2lmKCFiKXJldHVybiFmJiZ1O3ZhciBTPXQqeS9iLEM9LXQqeC9iLFA9a3AoZyxfKSxrPSRFKGcsUyksTz0kRShfLEMpO2RrKGssTyk7dmFyIEQ9UCxCPVhFKGssRCksST1YRShELEQpLEw9QipCLUkqKFhFKGssayktMSk7aWYoIShMPDApKXt2YXIgUj14cihMKSxGPSRFKEQsKC1CLVIpL0kpO2lmKGRrKEYsayksRj1CXyhGKSwhZilyZXR1cm4gRjt2YXIgej11WzBdLFU9aFswXSxXPXVbMV0sWj1oWzFdLHJ0O1U8eiYmKHJ0PXosej1VLFU9cnQpO3ZhciBvdD1VLXosc3Q9UmUob3QtQmUpPGxlLFN0PXN0fHxvdDxsZTtpZighc3QmJlo8VyYmKHJ0PVcsVz1aLFo9cnQpLFN0P3N0P1crWj4wXkZbMV08KFJlKEZbMF0teik8bGU/VzpaKTpXPD1GWzFdJiZGWzFdPD1aOm90PkJlXih6PD1GWzBdJiZGWzBdPD1VKSl7dmFyIGJ0PSRFKEQsKC1CK1IpL0kpO3JldHVybiBkayhidCxrKSxbRixCXyhidCldfX19ZnVuY3Rpb24gYyh1LGgpe3ZhciBmPW4/ZTpCZS1lLHA9MDtyZXR1cm4gdTwtZj9wfD0xOnU+ZiYmKHB8PTIpLGg8LWY/cHw9NDpoPmYmJihwfD04KSxwfXJldHVybiBDayhhLHMsbyxuP1swLC1lXTpbLUJlLGUtQmVdKX1mdW5jdGlvbiBaeHQoZSx0LHIsbixpLG8pe3ZhciBhPWVbMF0scz1lWzFdLGw9dFswXSxjPXRbMV0sdT0wLGg9MSxmPWwtYSxwPWMtcyxkO2lmKGQ9ci1hLCEoIWYmJmQ+MCkpe2lmKGQvPWYsZjwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihmPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPWktYSwhKCFmJiZkPDApKXtpZihkLz1mLGY8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYoZj4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9aWYoZD1uLXMsISghcCYmZD4wKSl7aWYoZC89cCxwPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKHA+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9by1zLCEoIXAmJmQ8MCkpe2lmKGQvPXAscDwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihwPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1yZXR1cm4gdT4wJiYoZVswXT1hK3UqZixlWzFdPXMrdSpwKSxoPDEmJih0WzBdPWEraCpmLHRbMV09cytoKnApLCEwfX19fX12YXIgcjU9MWU5LFBrPS1yNTtmdW5jdGlvbiBEcChlLHQscixuKXtmdW5jdGlvbiBpKGMsdSl7cmV0dXJuIGU8PWMmJmM8PXImJnQ8PXUmJnU8PW59ZnVuY3Rpb24gbyhjLHUsaCxmKXt2YXIgcD0wLGQ9MDtpZihjPT1udWxsfHwocD1hKGMsaCkpIT09KGQ9YSh1LGgpKXx8bChjLHUpPDBeaD4wKWRvIGYucG9pbnQocD09PTB8fHA9PT0zP2U6cixwPjE/bjp0KTt3aGlsZSgocD0ocCtoKzQpJTQpIT09ZCk7ZWxzZSBmLnBvaW50KHVbMF0sdVsxXSl9ZnVuY3Rpb24gYShjLHUpe3JldHVybiBSZShjWzBdLWUpPGxlP3U+MD8wOjM6UmUoY1swXS1yKTxsZT91PjA/MjoxOlJlKGNbMV0tdCk8bGU/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIHMoYyx1KXtyZXR1cm4gbChjLngsdS54KX1mdW5jdGlvbiBsKGMsdSl7dmFyIGg9YShjLDEpLGY9YSh1LDEpO3JldHVybiBoIT09Zj9oLWY6aD09PTA/dVsxXS1jWzFdOmg9PT0xP2NbMF0tdVswXTpoPT09Mj9jWzFdLXVbMV06dVswXS1jWzBdfXJldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jLGg9U2soKSxmLHAsZCxnLF8seSx4LGIsUyxDLFAsaz17cG9pbnQ6TyxsaW5lU3RhcnQ6TCxsaW5lRW5kOlIscG9seWdvblN0YXJ0OkIscG9seWdvbkVuZDpJfTtmdW5jdGlvbiBPKHosVSl7aSh6LFUpJiZ1LnBvaW50KHosVSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgej0wLFU9MCxXPXAubGVuZ3RoO1U8VzsrK1UpZm9yKHZhciBaPXBbVV0scnQ9MSxvdD1aLmxlbmd0aCxzdD1aWzBdLFN0LGJ0LE10PXN0WzBdLGx0PXN0WzFdO3J0PG90OysrcnQpU3Q9TXQsYnQ9bHQsc3Q9WltydF0sTXQ9c3RbMF0sbHQ9c3RbMV0sYnQ8PW4/bHQ+biYmKE10LVN0KSoobi1idCk+KGx0LWJ0KSooZS1TdCkmJisrejpsdDw9biYmKE10LVN0KSoobi1idCk8KGx0LWJ0KSooZS1TdCkmJi0tejtyZXR1cm4gen1mdW5jdGlvbiBCKCl7dT1oLGY9W10scD1bXSxQPSEwfWZ1bmN0aW9uIEkoKXt2YXIgej1EKCksVT1QJiZ6LFc9KGY9SW0oZikpLmxlbmd0aDsoVXx8VykmJihjLnBvbHlnb25TdGFydCgpLFUmJihjLmxpbmVTdGFydCgpLG8obnVsbCxudWxsLDEsYyksYy5saW5lRW5kKCkpLFcmJkVrKGYscyx6LG8sYyksYy5wb2x5Z29uRW5kKCkpLHU9YyxmPXA9ZD1udWxsfWZ1bmN0aW9uIEwoKXtrLnBvaW50PUYscCYmcC5wdXNoKGQ9W10pLEM9ITAsUz0hMSx4PWI9TmFOfWZ1bmN0aW9uIFIoKXtmJiYoRihnLF8pLHkmJlMmJmgucmVqb2luKCksZi5wdXNoKGgucmVzdWx0KCkpKSxrLnBvaW50PU8sUyYmdS5saW5lRW5kKCl9ZnVuY3Rpb24gRih6LFUpe3ZhciBXPWkoeixVKTtpZihwJiZkLnB1c2goW3osVV0pLEMpZz16LF89VSx5PVcsQz0hMSxXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSkpO2Vsc2UgaWYoVyYmUyl1LnBvaW50KHosVSk7ZWxzZXt2YXIgWj1beD1NYXRoLm1heChQayxNYXRoLm1pbihyNSx4KSksYj1NYXRoLm1heChQayxNYXRoLm1pbihyNSxiKSldLHJ0PVt6PU1hdGgubWF4KFBrLE1hdGgubWluKHI1LHopKSxVPU1hdGgubWF4KFBrLE1hdGgubWluKHI1LFUpKV07Wnh0KFoscnQsZSx0LHIsbik/KFN8fCh1LmxpbmVTdGFydCgpLHUucG9pbnQoWlswXSxaWzFdKSksdS5wb2ludChydFswXSxydFsxXSksV3x8dS5saW5lRW5kKCksUD0hMSk6VyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpLFA9ITEpfXg9eixiPVUsUz1XfXJldHVybiBrfX1mdW5jdGlvbiBKeHQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9RHAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgVGo9U3MoKSxDaixJayxMayxSYj17c3BoZXJlOkZyLHBvaW50OkZyLGxpbmVTdGFydDpnM2UsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcn07ZnVuY3Rpb24gZzNlKCl7UmIucG9pbnQ9eTNlLFJiLmxpbmVFbmQ9XzNlfWZ1bmN0aW9uIF8zZSgpe1JiLnBvaW50PVJiLmxpbmVFbmQ9RnJ9ZnVuY3Rpb24geTNlKGUsdCl7ZSo9eWUsdCo9eWUsQ2o9ZSxJaz1YdCh0KSxMaz1adCh0KSxSYi5wb2ludD12M2V9ZnVuY3Rpb24gdjNlKGUsdCl7ZSo9eWUsdCo9eWU7dmFyIHI9WHQodCksbj1adCh0KSxpPVJlKGUtQ2opLG89WnQoaSksYT1YdChpKSxzPW4qYSxsPUxrKnItSWsqbipvLGM9SWsqcitMaypuKm87VGouYWRkKGJuKHhyKHMqcytsKmwpLGMpKSxDaj1lLElrPXIsTGs9bn1mdW5jdGlvbiBrayhlKXtyZXR1cm4gVGoucmVzZXQoKSx2byhlLFJiKSwrVGp9dmFyIEFqPVtudWxsLG51bGxdLHgzZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6QWp9O2Z1bmN0aW9uIE5iKGUsdCl7cmV0dXJuIEFqWzBdPWUsQWpbMV09dCxrayh4M2UpfXZhciBReHQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUmsoZS5nZW9tZXRyeSx0KX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJrKHJbbl0uZ2VvbWV0cnksdCkpcmV0dXJuITA7cmV0dXJuITF9fSx0YnQ9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiBlYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2ludDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoZWJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYocmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmJ0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9seWdvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYobmJ0KHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihSayhyW25dLHQpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gUmsoZSx0KXtyZXR1cm4gZSYmdGJ0Lmhhc093blByb3BlcnR5KGUudHlwZSk/dGJ0W2UudHlwZV0oZSx0KTohMX1mdW5jdGlvbiBlYnQoZSx0KXtyZXR1cm4gTmIoZSx0KT09PTB9ZnVuY3Rpb24gcmJ0KGUsdCl7Zm9yKHZhciByLG4saSxvPTAsYT1lLmxlbmd0aDtvPGE7bysrKXtpZihuPU5iKGVbb10sdCksbj09PTB8fG8+MCYmKGk9TmIoZVtvXSxlW28tMV0pLGk+MCYmcjw9aSYmbjw9aSYmKHIrbi1pKSooMS1NYXRoLnBvdygoci1uKS9pLDIpKTx6XyppKSlyZXR1cm4hMDtyPW59cmV0dXJuITF9ZnVuY3Rpb24gbmJ0KGUsdCl7cmV0dXJuISFUayhlLm1hcChiM2UpLGlidCh0KSl9ZnVuY3Rpb24gYjNlKGUpe3JldHVybiBlPWUubWFwKGlidCksZS5wb3AoKSxlfWZ1bmN0aW9uIGlidChlKXtyZXR1cm5bZVswXSp5ZSxlWzFdKnllXX1mdW5jdGlvbiBvYnQoZSx0KXtyZXR1cm4oZSYmUXh0Lmhhc093blByb3BlcnR5KGUudHlwZSk/UXh0W2UudHlwZV06UmspKGUsdCl9ZnVuY3Rpb24gYWJ0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gc2J0KGUsdCxyKXt2YXIgbj1JcihlLHQtbGUscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gTmsoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIElyKFlFKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSXIoWUUocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSXIoWUUodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJXUpPmxlfSkubWFwKGYpKS5jb25jYXQoSXIoWUUoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBSZShiJWgpPmxlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPWFidChvLGksOTApLHA9c2J0KHQsZSxfKSxkPWFidChzLGEsOTApLGc9c2J0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArbGVdLFsxODAsOTAtbGVdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1sZV0sWzE4MCw4MCtsZV1dKX1mdW5jdGlvbiBsYnQoKXtyZXR1cm4gTmsoKSgpfWZ1bmN0aW9uIGNidChlLHQpe3ZhciByPWVbMF0qeWUsbj1lWzFdKnllLGk9dFswXSp5ZSxvPXRbMV0qeWUsYT1adChuKSxzPVh0KG4pLGw9WnQobyksYz1YdChvKSx1PWEqWnQociksaD1hKlh0KHIpLGY9bCpadChpKSxwPWwqWHQoaSksZD0yKnduKHhyKGZqKG8tbikrYSpsKmZqKGktcikpKSxnPVh0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1YdCh5Kj1kKS9nLGI9WHQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltibihDLFMpKnZyLGJuKFAseHIoUypTK0MqQykpKnZyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcip2cixuKnZyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffWZ1bmN0aW9uIGptKGUpe3JldHVybiBlfXZhciBQaj1TcygpLElqPVNzKCksdWJ0LGhidCxMaixraixYbT17cG9pbnQ6RnIsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PXczZSxYbS5saW5lRW5kPU0zZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1htLmxpbmVTdGFydD1YbS5saW5lRW5kPVhtLnBvaW50PUZyLFBqLmFkZChSZShJaikpLElqLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVBqLzI7cmV0dXJuIFBqLnJlc2V0KCksZX19O2Z1bmN0aW9uIHczZSgpe1htLnBvaW50PVMzZX1mdW5jdGlvbiBTM2UoZSx0KXtYbS5wb2ludD1mYnQsdWJ0PUxqPWUsaGJ0PWtqPXR9ZnVuY3Rpb24gZmJ0KGUsdCl7SWouYWRkKGtqKmUtTGoqdCksTGo9ZSxraj10fWZ1bmN0aW9uIE0zZSgpe2ZidCh1YnQsaGJ0KX12YXIgUmo9WG07dmFyIERiPTEvMCxEaz1EYixuNT0tRGIsT2s9bjUsRTNlPXtwb2ludDpUM2UsbGluZVN0YXJ0OkZyLGxpbmVFbmQ6RnIscG9seWdvblN0YXJ0OkZyLHBvbHlnb25FbmQ6RnIscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9W1tEYixEa10sW241LE9rXV07cmV0dXJuIG41PU9rPS0oRGs9RGI9MS8wKSxlfX07ZnVuY3Rpb24gVDNlKGUsdCl7ZTxEYiYmKERiPWUpLGU+bjUmJihuNT1lKSx0PERrJiYoRGs9dCksdD5PayYmKE9rPXQpfXZhciBPYj1FM2U7dmFyIE5qPTAsRGo9MCxpNT0wLHprPTAsRms9MCx6Yj0wLE9qPTAsemo9MCxvNT0wLG1idCxnYnQsQmgsSGgsbXU9e3BvaW50OnFfLGxpbmVTdGFydDpwYnQsbGluZUVuZDpkYnQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bXUubGluZVN0YXJ0PVAzZSxtdS5saW5lRW5kPUkzZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe211LnBvaW50PXFfLG11LmxpbmVTdGFydD1wYnQsbXUubGluZUVuZD1kYnR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPW81P1tPai9vNSx6ai9vNV06emI/W3prL3piLEZrL3piXTppNT9bTmovaTUsRGovaTVdOltOYU4sTmFOXTtyZXR1cm4gTmo9RGo9aTU9ems9Rms9emI9T2o9emo9bzU9MCxlfX07ZnVuY3Rpb24gcV8oZSx0KXtOais9ZSxEais9dCwrK2k1fWZ1bmN0aW9uIHBidCgpe211LnBvaW50PUMzZX1mdW5jdGlvbiBDM2UoZSx0KXttdS5wb2ludD1BM2UscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBBM2UoZSx0KXt2YXIgcj1lLUJoLG49dC1IaCxpPXhyKHIqcituKm4pO3prKz1pKihCaCtlKS8yLEZrKz1pKihIaCt0KS8yLHpiKz1pLHFfKEJoPWUsSGg9dCl9ZnVuY3Rpb24gZGJ0KCl7bXUucG9pbnQ9cV99ZnVuY3Rpb24gUDNlKCl7bXUucG9pbnQ9TDNlfWZ1bmN0aW9uIEkzZSgpe19idChtYnQsZ2J0KX1mdW5jdGlvbiBMM2UoZSx0KXttdS5wb2ludD1fYnQscV8obWJ0PUJoPWUsZ2J0PUhoPXQpfWZ1bmN0aW9uIF9idChlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7emsrPWkqKEJoK2UpLzIsRmsrPWkqKEhoK3QpLzIsemIrPWksaT1IaCplLUJoKnQsT2orPWkqKEJoK2UpLHpqKz1pKihIaCt0KSxvNSs9aSozLHFfKEJoPWUsSGg9dCl9dmFyIEZqPW11O2Z1bmN0aW9uIEJrKGUpe3RoaXMuX2NvbnRleHQ9ZX1Cay5wcm90b3R5cGU9e19yYWRpdXM6NC41LHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yYWRpdXM9ZSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha31kZWZhdWx0Ont0aGlzLl9jb250ZXh0Lm1vdmVUbyhlK3RoaXMuX3JhZGl1cyx0KSx0aGlzLl9jb250ZXh0LmFyYyhlLHQsdGhpcy5fcmFkaXVzLDAsd2kpO2JyZWFrfX19LHJlc3VsdDpGcn07dmFyIEhqPVNzKCksQmoseWJ0LHZidCxhNSxzNSxIaz17cG9pbnQ6RnIsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7SGsucG9pbnQ9azNlfSxsaW5lRW5kOmZ1bmN0aW9uKCl7QmomJnhidCh5YnQsdmJ0KSxIay5wb2ludD1Gcn0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Qmo9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtCaj1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT0rSGo7cmV0dXJuIEhqLnJlc2V0KCksZX19O2Z1bmN0aW9uIGszZShlLHQpe0hrLnBvaW50PXhidCx5YnQ9YTU9ZSx2YnQ9czU9dH1mdW5jdGlvbiB4YnQoZSx0KXthNS09ZSxzNS09dCxIai5hZGQoeHIoYTUqYTUrczUqczUpKSxhNT1lLHM1PXR9dmFyIFZqPUhrO2Z1bmN0aW9uIFZrKCl7dGhpcy5fc3RyaW5nPVtdfVZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUsX2NpcmNsZTpiYnQoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9ZSx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPT09MCYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6e3RoaXMuX3N0cmluZy5wdXNoKCJNIixlLCIsIix0KSx0aGlzLl9wb2ludD0xO2JyZWFrfWNhc2UgMTp7dGhpcy5fc3RyaW5nLnB1c2goIkwiLGUsIiwiLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NpcmNsZT09bnVsbCYmKHRoaXMuX2NpcmNsZT1iYnQodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQsdGhpcy5fY2lyY2xlKTticmVha319fSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9zdHJpbmcubGVuZ3RoKXt2YXIgZT10aGlzLl9zdHJpbmcuam9pbigiIik7cmV0dXJuIHRoaXMuX3N0cmluZz1bXSxlfWVsc2UgcmV0dXJuIG51bGx9fTtmdW5jdGlvbiBiYnQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9ZnVuY3Rpb24gd2J0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx2byhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihSaikpLFJqLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihWaikpLFZqLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE9iKSksT2IucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHZvKGEsbihGaikpLEZqLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLGptKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgVmspOm5ldyBCayh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfWZ1bmN0aW9uIFNidChlKXtyZXR1cm57c3RyZWFtOiRtKGUpfX1mdW5jdGlvbiAkbShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bmV3IFVqO2Zvcih2YXIgbiBpbiBlKXJbbl09ZVtuXTtyZXR1cm4gci5zdHJlYW09dCxyfX1mdW5jdGlvbiBVaigpe31Vai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVqLHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5zdHJlYW0ucG9pbnQoZSx0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHFqKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksdm8ocixlLnN0cmVhbShPYikpLHQoT2IucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIEdfKGUsdCxyKXtyZXR1cm4gcWooZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gRmIoZSx0LHIpe3JldHVybiBHXyhlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiBCYihlLHQscil7cmV0dXJuIHFqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gSGIoZSx0LHIpe3JldHVybiBxaihlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBNYnQ9MTYsUjNlPVp0KDMwKnllKTtmdW5jdGlvbiBHaihlLHQpe3JldHVybit0P0QzZShlLHQpOk4zZShlKX1mdW5jdGlvbiBOM2UoZSl7cmV0dXJuICRtKHtwb2ludDpmdW5jdGlvbih0LHIpe3Q9ZSh0LHIpLHRoaXMuc3RyZWFtLnBvaW50KHRbMF0sdFsxXSl9fSl9ZnVuY3Rpb24gRDNlKGUsdCl7ZnVuY3Rpb24gcihuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe3ZhciB5PWMtbix4PXUtaSxiPXkqeSt4Kng7aWYoYj40KnQmJmctLSl7dmFyIFM9YStmLEM9cytwLFA9bCtkLGs9eHIoUypTK0MqQytQKlApLE89d24oUC89ayksRD1SZShSZShQKS0xKTxsZXx8UmUoby1oKTxsZT8obytoKS8yOmJuKEMsUyksQj1lKEQsTyksST1CWzBdLEw9QlsxXSxSPUktbixGPUwtaSx6PXgqUi15KkY7KHoqei9iPnR8fFJlKCh5KlIreCpGKS9iLS41KT4uM3x8YSpmK3MqcCtsKmQ8UjNlKSYmKHIobixpLG8sYSxzLGwsSSxMLEQsUy89ayxDLz1rLFAsZyxfKSxfLnBvaW50KEksTCkscihJLEwsRCxTLEMsUCxjLHUsaCxmLHAsZCxnLF8pKX19cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfPXtwb2ludDp5LGxpbmVTdGFydDp4LGxpbmVFbmQ6Uyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25TdGFydCgpLF8ubGluZVN0YXJ0PUN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKSxfLmxpbmVTdGFydD14fX07ZnVuY3Rpb24geShPLEQpe089ZShPLEQpLG4ucG9pbnQoT1swXSxPWzFdKX1mdW5jdGlvbiB4KCl7aD1OYU4sXy5wb2ludD1iLG4ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gYihPLEQpe3ZhciBCPW9jKFtPLERdKSxJPWUoTyxEKTtyKGgsZix1LHAsZCxnLGg9SVswXSxmPUlbMV0sdT1PLHA9QlswXSxkPUJbMV0sZz1CWzJdLE1idCxuKSxuLnBvaW50KGgsZil9ZnVuY3Rpb24gUygpe18ucG9pbnQ9eSxuLmxpbmVFbmQoKX1mdW5jdGlvbiBDKCl7eCgpLF8ucG9pbnQ9UCxfLmxpbmVFbmQ9a31mdW5jdGlvbiBQKE8sRCl7YihpPU8sRCksbz1oLGE9ZixzPXAsbD1kLGM9ZyxfLnBvaW50PWJ9ZnVuY3Rpb24gaygpe3IoaCxmLHUscCxkLGcsbyxhLGkscyxsLGMsTWJ0LG4pLF8ubGluZUVuZD1TLFMoKX1yZXR1cm4gX319dmFyIE8zZT0kbSh7cG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlKnllLHQqeWUpfX0pO2Z1bmN0aW9uIHozZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dmFyIG49ZSh0LHIpO3JldHVybiB0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pfWZ1bmN0aW9uIEYzZShlLHQscixuLGkpe2Z1bmN0aW9uIG8oYSxzKXtyZXR1cm4gYSo9bixzKj1pLFt0K2UqYSxyLWUqc119cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7cmV0dXJuWyhhLXQpL2Uqbiwoci1zKS9lKmldfSxvfWZ1bmN0aW9uIEVidChlLHQscixuLGksbyl7dmFyIGE9WnQobykscz1YdChvKSxsPWEqZSxjPXMqZSx1PWEvZSxoPXMvZSxmPShzKnItYSp0KS9lLHA9KHMqdCthKnIpL2U7ZnVuY3Rpb24gZChnLF8pe3JldHVybiBnKj1uLF8qPWksW2wqZy1jKl8rdCxyLWMqZy1sKl9dfXJldHVybiBkLmludmVydD1mdW5jdGlvbihnLF8pe3JldHVybltuKih1KmctaCpfK2YpLGkqKHAtaCpnLXUqXyldfSxkfWZ1bmN0aW9uIFNpKGUpe3JldHVybiBsNShmdW5jdGlvbigpe3JldHVybiBlfSkoKX1mdW5jdGlvbiBsNShlKXt2YXIgdCxyPTE1MCxuPTQ4MCxpPTI1MCxvPTAsYT0wLHM9MCxsPTAsYz0wLHUsaD0wLGY9MSxwPTEsZD1udWxsLGc9ZTUsXz1udWxsLHkseCxiLFM9am0sQz0uNSxQLGssTyxELEI7ZnVuY3Rpb24gSSh6KXtyZXR1cm4gTyh6WzBdKnllLHpbMV0qeWUpfWZ1bmN0aW9uIEwoeil7cmV0dXJuIHo9Ty5pbnZlcnQoelswXSx6WzFdKSx6JiZbelswXSp2cix6WzFdKnZyXX1JLnN0cmVhbT1mdW5jdGlvbih6KXtyZXR1cm4gRCYmQj09PXo/RDpEPU8zZSh6M2UodSkoZyhQKFMoQj16KSkpKSl9LEkucHJlY2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz16LGQ9dm9pZCAwLEYoKSk6Z30sSS5wb3N0Y2xpcD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16LF89eT14PWI9bnVsbCxGKCkpOlN9LEkuY2xpcEFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPSt6P0FrKGQ9eip5ZSk6KGQ9bnVsbCxlNSksRigpKTpkKnZyfSxJLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9ej09bnVsbD8oXz15PXg9Yj1udWxsLGptKTpEcChfPSt6WzBdWzBdLHk9K3pbMF1bMV0seD0relsxXVswXSxiPSt6WzFdWzFdKSxGKCkpOl89PW51bGw/bnVsbDpbW18seV0sW3gsYl1dfSxJLnNjYWxlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt6LFIoKSk6cn0sSS50cmFuc2xhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3pbMF0saT0relsxXSxSKCkpOltuLGldfSxJLmNlbnRlcj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz16WzBdJTM2MCp5ZSxhPXpbMV0lMzYwKnllLFIoKSk6W28qdnIsYSp2cl19LEkucm90YXRlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXpbMF0lMzYwKnllLGw9elsxXSUzNjAqeWUsYz16Lmxlbmd0aD4yP3pbMl0lMzYwKnllOjAsUigpKTpbcyp2cixsKnZyLGMqdnJdfSxJLmFuZ2xlPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXolMzYwKnllLFIoKSk6aCp2cn0sSS5yZWZsZWN0WD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj16Py0xOjEsUigpKTpmPDB9LEkucmVmbGVjdFk9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ej8tMToxLFIoKSk6cDwwfSxJLnByZWNpc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD1HaihrLEM9eip6KSxGKCkpOnhyKEMpfSxJLmZpdEV4dGVudD1mdW5jdGlvbih6LFUpe3JldHVybiBHXyhJLHosVSl9LEkuZml0U2l6ZT1mdW5jdGlvbih6LFUpe3JldHVybiBGYihJLHosVSl9LEkuZml0V2lkdGg9ZnVuY3Rpb24oeixVKXtyZXR1cm4gQmIoSSx6LFUpfSxJLmZpdEhlaWdodD1mdW5jdGlvbih6LFUpe3JldHVybiBIYihJLHosVSl9O2Z1bmN0aW9uIFIoKXt2YXIgej1FYnQociwwLDAsZixwLGgpLmFwcGx5KG51bGwsdChvLGEpKSxVPShoP0VidDpGM2UpKHIsbi16WzBdLGktelsxXSxmLHAsaCk7cmV0dXJuIHU9dDUocyxsLGMpLGs9UUUodCxVKSxPPVFFKHUsayksUD1HaihrLEMpLEYoKX1mdW5jdGlvbiBGKCl7cmV0dXJuIEQ9Qj1udWxsLEl9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksSS5pbnZlcnQ9dC5pbnZlcnQmJkwsUigpfX1mdW5jdGlvbiBWYihlKXt2YXIgdD0wLHI9QmUvMyxuPWw1KGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp5ZSxyPW9bMV0qeWUpOlt0KnZyLHIqdnJdfSxpfWZ1bmN0aW9uIFRidChlKXt2YXIgdD1adChlKTtmdW5jdGlvbiByKG4saSl7cmV0dXJuW24qdCxYdChpKS90XX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24obixpKXtyZXR1cm5bbi90LHduKGkqdCldfSxyfWZ1bmN0aW9uIFdqKGUsdCl7dmFyIHI9WHQoZSksbj0ocitYdCh0KSkvMjtpZihSZShuKTxsZSlyZXR1cm4gVGJ0KGUpO3ZhciBpPTErciooMipuLXIpLG89eHIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9eHIoaS0yKm4qWHQobCkpL247cmV0dXJuW2MqWHQocyo9biksby1jKlp0KHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWwsdT1ibihzLFJlKGMpKSpjYShjKTtyZXR1cm4gYypuPDAmJih1LT1CZSpjYShzKSpjYShjKSksW3Uvbix3bigoaS0ocypzK2MqYykqbipuKS8oMipuKSldfSxhfWZ1bmN0aW9uIFdfKCl7cmV0dXJuIFZiKFdqKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfWZ1bmN0aW9uIFVrKCl7cmV0dXJuIFdfKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9ZnVuY3Rpb24gQjNlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBDYnQoKXt2YXIgZSx0LHI9VWsoKSxuLGk9V18oKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1XXygpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1CM2UoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2xlLGcrLjEyKnArbGVdLFtkLS4yMTQqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArbGUsZysuMTY2KnArbGVdLFtkLS4xMTUqcC1sZSxnKy4yMzQqcC1sZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBHXyh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBGYih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gQmIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBIYih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX1mdW5jdGlvbiBxayhlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1adCh0KSxpPVp0KHIpLG89ZShuKmkpO3JldHVybltvKmkqWHQodCksbypYdChyKV19fWZ1bmN0aW9uIFZoKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPXhyKHQqdCtyKnIpLGk9ZShuKSxvPVh0KGkpLGE9WnQoaSk7cmV0dXJuW2JuKHQqbyxuKmEpLHduKG4mJnIqby9uKV19fXZhciBHaz1xayhmdW5jdGlvbihlKXtyZXR1cm4geHIoMi8oMStlKSl9KTtHay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqd24oZS8yKX0pO2Z1bmN0aW9uIEFidCgpe3JldHVybiBTaShHaykuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciBXaz1xayhmdW5jdGlvbihlKXtyZXR1cm4oZT1oayhlKSkmJmUvWHQoZSl9KTtXay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KTtmdW5jdGlvbiBQYnQoKXtyZXR1cm4gU2koV2spLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxODAtLjAwMSl9ZnVuY3Rpb24gWV8oZSx0KXtyZXR1cm5bZSxGXyhJYigobW4rdCkvMikpXX1ZXy5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKmljKGNrKHQpKS1tbl19O2Z1bmN0aW9uIElidCgpe3JldHVybiBZaihZXykuc2NhbGUoOTYxL3dpKX1mdW5jdGlvbiBZaihlKXt2YXIgdD1TaShlKSxyPXQuY2VudGVyLG49dC5zY2FsZSxpPXQudHJhbnNsYXRlLG89dC5jbGlwRXh0ZW50LGE9bnVsbCxzLGwsYzt0LnNjYWxlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuKGgpLHUoKSk6bigpfSx0LnRyYW5zbGF0ZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaShoKSx1KCkpOmkoKX0sdC5jZW50ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIoaCksdSgpKTpyKCl9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD09bnVsbD9hPXM9bD1jPW51bGw6KGE9K2hbMF1bMF0scz0raFswXVsxXSxsPStoWzFdWzBdLGM9K2hbMV1bMV0pLHUoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19O2Z1bmN0aW9uIHUoKXt2YXIgaD1CZSpuKCksZj10KHdrKHQucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBvKGE9PW51bGw/W1tmWzBdLWgsZlsxXS1oXSxbZlswXStoLGZbMV0raF1dOmU9PT1ZXz9bW01hdGgubWF4KGZbMF0taCxhKSxzXSxbTWF0aC5taW4oZlswXStoLGwpLGNdXTpbW2EsTWF0aC5tYXgoZlsxXS1oLHMpXSxbbCxNYXRoLm1pbihmWzFdK2gsYyldXSl9cmV0dXJuIHUoKX1mdW5jdGlvbiBZayhlKXtyZXR1cm4gSWIoKG1uK2UpLzIpfWZ1bmN0aW9uIGpqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTpGXyhyL1p0KHQpKS9GXyhZayh0KS9ZayhlKSksaT1yKnVrKFlrKGUpLG4pL247aWYoIW4pcmV0dXJuIFlfO2Z1bmN0aW9uIG8oYSxzKXtpPjA/czwtbW4rbGUmJihzPS1tbitsZSk6cz5tbi1sZSYmKHM9bW4tbGUpO3ZhciBsPWkvdWsoWWsocyksbik7cmV0dXJuW2wqWHQobiphKSxpLWwqWnQobiphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zLGM9Y2EobikqeHIoYSphK2wqbCksdT1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJih1LT1CZSpjYShhKSpjYShsKSksW3UvbiwyKmljKHVrKGkvYywxL24pKS1tbl19LG99ZnVuY3Rpb24gTGJ0KCl7cmV0dXJuIFZiKGpqKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfWZ1bmN0aW9uIGpfKGUsdCl7cmV0dXJuW2UsdF19al8uaW52ZXJ0PWpfO2Z1bmN0aW9uIGtidCgpe3JldHVybiBTaShqXykuc2NhbGUoMTUyLjYzKX1mdW5jdGlvbiBYaihlLHQpe3ZhciByPVp0KGUpLG49ZT09PXQ/WHQoZSk6KHItWnQodCkpLyh0LWUpLGk9ci9uK2U7aWYoUmUobik8bGUpcmV0dXJuIGpfO2Z1bmN0aW9uIG8oYSxzKXt2YXIgbD1pLXMsYz1uKmE7cmV0dXJuW2wqWHQoYyksaS1sKlp0KGMpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1ibihhLFJlKGwpKSpjYShsKTtyZXR1cm4gbCpuPDAmJihjLT1CZSpjYShhKSpjYShsKSksW2MvbixpLWNhKG4pKnhyKGEqYStsKmwpXX0sb31mdW5jdGlvbiBSYnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9dmFyIGM1PTEuMzQwMjY0LHU1PS0uMDgxMTA2LGg1PTg5M2UtNixmNT0uMDAzNzk2LGprPXhyKDMpLzIsSDNlPTEyO2Z1bmN0aW9uIFhrKGUsdCl7dmFyIHI9d24oamsqWHQodCkpLG49cipyLGk9bipuKm47cmV0dXJuW2UqWnQocikvKGprKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKSksciooYzUrdTUqbitpKihoNStmNSpuKSldfVhrLmludmVydD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LG49cipyLGk9bipuKm4sbz0wLGEscyxsO288SDNlJiYocz1yKihjNSt1NSpuK2kqKGg1K2Y1Km4pKS10LGw9YzUrMyp1NSpuK2kqKDcqaDUrOSpmNSpuKSxyLT1hPXMvbCxuPXIqcixpPW4qbipuLCEoUmUoYSk8el8pKTsrK28pO3JldHVybltqayplKihjNSszKnU1Km4raSooNypoNSs5KmY1Km4pKS9adChyKSx3bihYdChyKS9qayldfTtmdW5jdGlvbiBOYnQoKXtyZXR1cm4gU2koWGspLnNjYWxlKDE3Ny4xNTgpfWZ1bmN0aW9uICRrKGUsdCl7dmFyIHI9WnQodCksbj1adChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19JGsuaW52ZXJ0PVZoKGljKTtmdW5jdGlvbiBEYnQoKXtyZXR1cm4gU2koJGspLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9ZnVuY3Rpb24gT2J0KCl7dmFyIGU9MSx0PTAscj0wLG49MSxpPTEsbz0wLGEscyxsPW51bGwsYyx1LGgsZj0xLHA9MSxkPSRtKHtwb2ludDpmdW5jdGlvbihTLEMpe3ZhciBQPWIoW1MsQ10pO3RoaXMuc3RyZWFtLnBvaW50KFBbMF0sUFsxXSl9fSksZz1qbSxfLHk7ZnVuY3Rpb24geCgpe3JldHVybiBmPWUqbixwPWUqaSxfPXk9bnVsbCxifWZ1bmN0aW9uIGIoUyl7dmFyIEM9U1swXSpmLFA9U1sxXSpwO2lmKG8pe3ZhciBrPVAqYS1DKnM7Qz1DKmErUCpzLFA9a31yZXR1cm5bQyt0LFArcl19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKFMpe3ZhciBDPVNbMF0tdCxQPVNbMV0tcjtpZihvKXt2YXIgaz1QKmErQypzO0M9QyphLVAqcyxQPWt9cmV0dXJuW0MvZixQL3BdfSxiLnN0cmVhbT1mdW5jdGlvbihTKXtyZXR1cm4gXyYmeT09PVM/XzpfPWQoZyh5PVMpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TLGw9Yz11PWg9bnVsbCx4KCkpOmd9LGIuY2xpcEV4dGVudD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz1TPT1udWxsPyhsPWM9dT1oPW51bGwsam0pOkRwKGw9K1NbMF1bMF0sYz0rU1swXVsxXSx1PStTWzFdWzBdLGg9K1NbMV1bMV0pLHgoKSk6bD09bnVsbD9udWxsOltbbCxjXSxbdSxoXV19LGIuc2NhbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K1MseCgpKTplfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rU1swXSxyPStTWzFdLHgoKSk6W3Qscl19LGIuYW5nbGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89UyUzNjAqeWUscz1YdChvKSxhPVp0KG8pLHgoKSk6byp2cn0sYi5yZWZsZWN0WD1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1TPy0xOjEseCgpKTpuPDB9LGIucmVmbGVjdFk9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Uz8tMToxLHgoKSk6aTwwfSxiLmZpdEV4dGVudD1mdW5jdGlvbihTLEMpe3JldHVybiBHXyhiLFMsQyl9LGIuZml0U2l6ZT1mdW5jdGlvbihTLEMpe3JldHVybiBGYihiLFMsQyl9LGIuZml0V2lkdGg9ZnVuY3Rpb24oUyxDKXtyZXR1cm4gQmIoYixTLEMpfSxiLmZpdEhlaWdodD1mdW5jdGlvbihTLEMpe3JldHVybiBIYihiLFMsQyl9LGJ9ZnVuY3Rpb24gS2soZSx0KXt2YXIgcj10KnQsbj1yKnI7cmV0dXJuW2UqKC44NzA3LS4xMzE5NzkqcituKigtLjAxMzc5MStuKiguMDAzOTcxKnItLjAwMTUyOSpuKSkpLHQqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLS4wNDQ0NzUrLjAyODg3NCpyLS4wMDU5MTYqbikpKV19S2suaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dCxuPTI1LGk7ZG97dmFyIG89cipyLGE9bypvO3ItPWk9KHIqKDEuMDA3MjI2K28qKC4wMTUwODUrYSooLS4wNDQ0NzUrLjAyODg3NCpvLS4wMDU5MTYqYSkpKS10KS8oMS4wMDcyMjYrbyooLjAxNTA4NSozK2EqKC0uMDQ0NDc1KjcrLjAyODg3NCo5Km8tLjAwNTkxNioxMSphKSkpfXdoaWxlKFJlKGkpPmxlJiYtLW4+MCk7cmV0dXJuW2UvKC44NzA3KyhvPXIqcikqKC0uMTMxOTc5K28qKC0uMDEzNzkxK28qbypvKiguMDAzOTcxLS4wMDE1MjkqbykpKSkscl19O2Z1bmN0aW9uIHpidCgpe3JldHVybiBTaShLaykuc2NhbGUoMTc1LjI5NSl9ZnVuY3Rpb24gWmsoZSx0KXtyZXR1cm5bWnQodCkqWHQoZSksWHQodCldfVprLmludmVydD1WaCh3bik7ZnVuY3Rpb24gRmJ0KCl7cmV0dXJuIFNpKFprKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2xlKX1mdW5jdGlvbiBKayhlLHQpe3ZhciByPVp0KHQpLG49MStadChlKSpyO3JldHVybltyKlh0KGUpL24sWHQodCkvbl19SmsuaW52ZXJ0PVZoKGZ1bmN0aW9uKGUpe3JldHVybiAyKmljKGUpfSk7ZnVuY3Rpb24gQmJ0KCl7cmV0dXJuIFNpKEprKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfWZ1bmN0aW9uIFFrKGUsdCl7cmV0dXJuW0ZfKEliKChtbit0KS8yKSksLWVdfVFrLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKmljKGNrKGUpKS1tbl19O2Z1bmN0aW9uIEhidCgpe3ZhciBlPVlqKFFrKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9ZnVuY3Rpb24gVjNlKGUsdCl7cmV0dXJuIGUucGFyZW50PT09dC5wYXJlbnQ/MToyfWZ1bmN0aW9uIFUzZShlKXtyZXR1cm4gZS5yZWR1Y2UocTNlLDApL2UubGVuZ3RofWZ1bmN0aW9uIHEzZShlLHQpe3JldHVybiBlK3QueH1mdW5jdGlvbiBHM2UoZSl7cmV0dXJuIDErZS5yZWR1Y2UoVzNlLDApfWZ1bmN0aW9uIFczZShlLHQpe3JldHVybiBNYXRoLm1heChlLHQueSl9ZnVuY3Rpb24gWTNlKGUpe2Zvcih2YXIgdDt0PWUuY2hpbGRyZW47KWU9dFswXTtyZXR1cm4gZX1mdW5jdGlvbiBqM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10W3QubGVuZ3RoLTFdO3JldHVybiBlfWZ1bmN0aW9uIFZidCgpe3ZhciBlPVYzZSx0PTEscj0xLG49ITE7ZnVuY3Rpb24gaShvKXt2YXIgYSxzPTA7by5lYWNoQWZ0ZXIoZnVuY3Rpb24oZil7dmFyIHA9Zi5jaGlsZHJlbjtwPyhmLng9VTNlKHApLGYueT1HM2UocCkpOihmLng9YT9zKz1lKGYsYSk6MCxmLnk9MCxhPWYpfSk7dmFyIGw9WTNlKG8pLGM9ajNlKG8pLHU9bC54LWUobCxjKS8yLGg9Yy54K2UoYyxsKS8yO3JldHVybiBvLmVhY2hBZnRlcihuP2Z1bmN0aW9uKGYpe2YueD0oZi54LW8ueCkqdCxmLnk9KG8ueS1mLnkpKnJ9OmZ1bmN0aW9uKGYpe2YueD0oZi54LXUpLyhoLXUpKnQsZi55PSgxLShvLnk/Zi55L28ueToxKSkqcn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rb1swXSxyPStvWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStvWzBdLHI9K29bMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIFgzZShlKXt2YXIgdD0wLHI9ZS5jaGlsZHJlbixuPXImJnIubGVuZ3RoO2lmKCFuKXQ9MTtlbHNlIGZvcig7LS1uPj0wOyl0Kz1yW25dLnZhbHVlO2UudmFsdWU9dH1mdW5jdGlvbiBVYnQoKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoWDNlKX1mdW5jdGlvbiBxYnQoZSl7dmFyIHQ9dGhpcyxyLG49W3RdLGksbyxhO2RvIGZvcihyPW4ucmV2ZXJzZSgpLG49W107dD1yLnBvcCgpOylpZihlKHQpLGk9dC5jaGlsZHJlbixpKWZvcihvPTAsYT1pLmxlbmd0aDtvPGE7KytvKW4ucHVzaChpW29dKTt3aGlsZShuLmxlbmd0aCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG4saTt0PXIucG9wKCk7KWlmKGUodCksbj10LmNoaWxkcmVuLG4pZm9yKGk9bi5sZW5ndGgtMTtpPj0wOy0taSlyLnB1c2gobltpXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV2J0KGUpe2Zvcih2YXIgdD10aGlzLHI9W3RdLG49W10saSxvLGE7dD1yLnBvcCgpOylpZihuLnB1c2godCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pci5wdXNoKGlbb10pO2Zvcig7dD1uLnBvcCgpOyllKHQpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFlidChlKXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoZnVuY3Rpb24odCl7Zm9yKHZhciByPStlKHQuZGF0YSl8fDAsbj10LmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO3QudmFsdWU9cn0pfWZ1bmN0aW9uIGpidChlKXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJnQuY2hpbGRyZW4uc29ydChlKX0pfWZ1bmN0aW9uIFhidChlKXtmb3IodmFyIHQ9dGhpcyxyPSQzZSh0LGUpLG49W3RdO3QhPT1yOyl0PXQucGFyZW50LG4ucHVzaCh0KTtmb3IodmFyIGk9bi5sZW5ndGg7ZSE9PXI7KW4uc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiBufWZ1bmN0aW9uICQzZShlLHQpe2lmKGU9PT10KXJldHVybiBlO3ZhciByPWUuYW5jZXN0b3JzKCksbj10LmFuY2VzdG9ycygpLGk9bnVsbDtmb3IoZT1yLnBvcCgpLHQ9bi5wb3AoKTtlPT09dDspaT1lLGU9ci5wb3AoKSx0PW4ucG9wKCk7cmV0dXJuIGl9ZnVuY3Rpb24gJGJ0KCl7Zm9yKHZhciBlPXRoaXMsdD1bZV07ZT1lLnBhcmVudDspdC5wdXNoKGUpO3JldHVybiB0fWZ1bmN0aW9uIEtidCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBaYnQoKXt2YXIgZT1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW58fGUucHVzaCh0KX0pLGV9ZnVuY3Rpb24gSmJ0KCl7dmFyIGU9dGhpcyx0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24ocil7ciE9PWUmJnQucHVzaCh7c291cmNlOnIucGFyZW50LHRhcmdldDpyfSl9KSx0fWZ1bmN0aW9uIHA1KGUsdCl7dmFyIHI9bmV3IEttKGUpLG49K2UudmFsdWUmJihyLnZhbHVlPWUudmFsdWUpLGksbz1bcl0sYSxzLGwsYztmb3IodD09bnVsbCYmKHQ9WjNlKTtpPW8ucG9wKCk7KWlmKG4mJihpLnZhbHVlPStpLmRhdGEudmFsdWUpLChzPXQoaS5kYXRhKSkmJihjPXMubGVuZ3RoKSlmb3IoaS5jaGlsZHJlbj1uZXcgQXJyYXkoYyksbD1jLTE7bD49MDstLWwpby5wdXNoKGE9aS5jaGlsZHJlbltsXT1uZXcgS20oc1tsXSkpLGEucGFyZW50PWksYS5kZXB0aD1pLmRlcHRoKzE7cmV0dXJuIHIuZWFjaEJlZm9yZSgkail9ZnVuY3Rpb24gSzNlKCl7cmV0dXJuIHA1KHRoaXMpLmVhY2hCZWZvcmUoSjNlKX1mdW5jdGlvbiBaM2UoZSl7cmV0dXJuIGUuY2hpbGRyZW59ZnVuY3Rpb24gSjNlKGUpe2UuZGF0YT1lLmRhdGEuZGF0YX1mdW5jdGlvbiAkaihlKXt2YXIgdD0wO2RvIGUuaGVpZ2h0PXQ7d2hpbGUoKGU9ZS5wYXJlbnQpJiZlLmhlaWdodDwrK3QpfWZ1bmN0aW9uIEttKGUpe3RoaXMuZGF0YT1lLHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfUttLnByb3RvdHlwZT1wNS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkttLGNvdW50OlVidCxlYWNoOnFidCxlYWNoQWZ0ZXI6V2J0LGVhY2hCZWZvcmU6R2J0LHN1bTpZYnQsc29ydDpqYnQscGF0aDpYYnQsYW5jZXN0b3JzOiRidCxkZXNjZW5kYW50czpLYnQsbGVhdmVzOlpidCxsaW5rczpKYnQsY29weTpLM2V9O3ZhciBRYnQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIHQydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX1mdW5jdGlvbiBlOChlKXtmb3IodmFyIHQ9MCxyPShlPXQydChRYnQuY2FsbChlKSkpLmxlbmd0aCxuPVtdLGksbzt0PHI7KWk9ZVt0XSxvJiZlMnQobyxpKT8rK3Q6KG89dE1lKG49UTNlKG4saSkpLHQ9MCk7cmV0dXJuIG99ZnVuY3Rpb24gUTNlKGUsdCl7dmFyIHIsbjtpZihLaih0LGUpKXJldHVyblt0XTtmb3Iocj0wO3I8ZS5sZW5ndGg7KytyKWlmKHQ4KHQsZVtyXSkmJktqKGQ1KGVbcl0sdCksZSkpcmV0dXJuW2Vbcl0sdF07Zm9yKHI9MDtyPGUubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPGUubGVuZ3RoOysrbilpZih0OChkNShlW3JdLGVbbl0pLHQpJiZ0OChkNShlW3JdLHQpLGVbbl0pJiZ0OChkNShlW25dLHQpLGVbcl0pJiZLaihyMnQoZVtyXSxlW25dLHQpLGUpKXJldHVybltlW3JdLGVbbl0sdF07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHQ4KGUsdCl7dmFyIHI9ZS5yLXQucixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPDB8fHIqcjxuKm4raSppfWZ1bmN0aW9uIGUydChlLHQpe3ZhciByPWUuci10LnIrMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIEtqKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIWUydChlLHRbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHRNZShlKXtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gZU1lKGVbMF0pO2Nhc2UgMjpyZXR1cm4gZDUoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIHIydChlWzBdLGVbMV0sZVsyXSl9fWZ1bmN0aW9uIGVNZShlKXtyZXR1cm57eDplLngseTplLnkscjplLnJ9fWZ1bmN0aW9uIGQ1KGUsdCl7dmFyIHI9ZS54LG49ZS55LGk9ZS5yLG89dC54LGE9dC55LHM9dC5yLGw9by1yLGM9YS1uLHU9cy1pLGg9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK28rbC9oKnUpLzIseToobithK2MvaCp1KS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiByMnQoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPWUucixhPXQueCxzPXQueSxsPXQucixjPXIueCx1PXIueSxoPXIucixmPW4tYSxwPW4tYyxkPWktcyxnPWktdSxfPWwtbyx5PWgtbyx4PW4qbitpKmktbypvLGI9eC1hKmEtcypzK2wqbCxTPXgtYypjLXUqdStoKmgsQz1wKmQtZipnLFA9KGQqUy1nKmIpLyhDKjIpLW4saz0oZypfLWQqeSkvQyxPPShwKmItZipTKS8oQyoyKS1pLEQ9KGYqeS1wKl8pL0MsQj1rKmsrRCpELTEsST0yKihvK1AqaytPKkQpLEw9UCpQK08qTy1vKm8sUj0tKEI/KEkrTWF0aC5zcXJ0KEkqSS00KkIqTCkpLygyKkIpOkwvSSk7cmV0dXJue3g6bitQK2sqUix5OmkrTytEKlIscjpSfX1mdW5jdGlvbiBuMnQoZSx0LHIpe3ZhciBuPWUueC10LngsaSxvLGE9ZS55LXQueSxzLGwsYz1uKm4rYSphO2M/KG89dC5yK3IucixvKj1vLGw9ZS5yK3IucixsKj1sLG8+bD8oaT0oYytsLW8pLygyKmMpLHM9TWF0aC5zcXJ0KE1hdGgubWF4KDAsbC9jLWkqaSkpLHIueD1lLngtaSpuLXMqYSxyLnk9ZS55LWkqYStzKm4pOihpPShjK28tbCkvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtaSppKSksci54PXQueCtpKm4tcyphLHIueT10LnkraSphK3MqbikpOihyLng9dC54K3IucixyLnk9dC55KX1mdW5jdGlvbiBpMnQoZSx0KXt2YXIgcj1lLnIrdC5yLTFlLTYsbj10LngtZS54LGk9dC55LWUueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBvMnQoZSl7dmFyIHQ9ZS5fLHI9ZS5uZXh0Ll8sbj10LnIrci5yLGk9KHQueCpyLnIrci54KnQucikvbixvPSh0Lnkqci5yK3IueSp0LnIpL247cmV0dXJuIGkqaStvKm99ZnVuY3Rpb24gcjgoZSl7dGhpcy5fPWUsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFpqKGUpe2lmKCEoaT1lLmxlbmd0aCkpcmV0dXJuIDA7dmFyIHQscixuLGksbyxhLHMsbCxjLHUsaDtpZih0PWVbMF0sdC54PTAsdC55PTAsIShpPjEpKXJldHVybiB0LnI7aWYocj1lWzFdLHQueD0tci5yLHIueD10LnIsci55PTAsIShpPjIpKXJldHVybiB0LnIrci5yO24ydChyLHQsbj1lWzJdKSx0PW5ldyByOCh0KSxyPW5ldyByOChyKSxuPW5ldyByOChuKSx0Lm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD10LnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9dDt0OmZvcihzPTM7czxpOysrcyl7bjJ0KHQuXyxyLl8sbj1lW3NdKSxuPW5ldyByOChuKSxsPXIubmV4dCxjPXQucHJldmlvdXMsdT1yLl8ucixoPXQuXy5yO2RvIGlmKHU8PWgpe2lmKGkydChsLl8sbi5fKSl7cj1sLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH11Kz1sLl8ucixsPWwubmV4dH1lbHNle2lmKGkydChjLl8sbi5fKSl7dD1jLHQubmV4dD1yLHIucHJldmlvdXM9dCwtLXM7Y29udGludWUgdH1oKz1jLl8ucixjPWMucHJldmlvdXN9d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9dCxuLm5leHQ9cix0Lm5leHQ9ci5wcmV2aW91cz1yPW4sbz1vMnQodCk7KG49bi5uZXh0KSE9PXI7KShhPW8ydChuKSk8byYmKHQ9bixvPWEpO3I9dC5uZXh0fWZvcih0PVtyLl9dLG49cjsobj1uLm5leHQpIT09cjspdC5wdXNoKG4uXyk7Zm9yKG49ZTgodCkscz0wO3M8aTsrK3MpdD1lW3NdLHQueC09bi54LHQueS09bi55O3JldHVybiBuLnJ9ZnVuY3Rpb24gYTJ0KGUpe3JldHVybiBaaihlKSxlfWZ1bmN0aW9uIHMydChlKXtyZXR1cm4gZT09bnVsbD9udWxsOlViKGUpfWZ1bmN0aW9uIFViKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZX1mdW5jdGlvbiBPcCgpe3JldHVybiAwfWZ1bmN0aW9uIFptKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiByTWUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiB1MnQoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj1PcDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUobDJ0KGUpKS5lYWNoQWZ0ZXIoSmoobiwuNSkpLmVhY2hCZWZvcmUoYzJ0KDEpKTpvLmVhY2hCZWZvcmUobDJ0KHJNZSkpLmVhY2hBZnRlcihKaihPcCwxKSkuZWFjaEFmdGVyKEpqKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKGMydChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zMnQobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOlptKCtvKSxpKTpufSxpfWZ1bmN0aW9uIGwydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIEpqKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9WmoobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiBjMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19ZnVuY3Rpb24gbjgoZSl7ZS54MD1NYXRoLnJvdW5kKGUueDApLGUueTA9TWF0aC5yb3VuZChlLnkwKSxlLngxPU1hdGgucm91bmQoZS54MSksZS55MT1NYXRoLnJvdW5kKGUueTEpfWZ1bmN0aW9uIFVoKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYobi10KS9lLnZhbHVlOysrczxsOylhPW9bc10sYS55MD1yLGEueTE9aSxhLngwPXQsYS54MT10Kz1hLnZhbHVlKmN9ZnVuY3Rpb24gaDJ0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKG44KSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmVWgobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIGYydD0iJCIsbk1lPXtkZXB0aDotMX0scDJ0PXt9O2Z1bmN0aW9uIGlNZShlKXtyZXR1cm4gZS5pZH1mdW5jdGlvbiBvTWUoZSl7cmV0dXJuIGUucGFyZW50SWR9ZnVuY3Rpb24gZDJ0KCl7dmFyIGU9aU1lLHQ9b01lO2Z1bmN0aW9uIHIobil7dmFyIGksbyxhPW4ubGVuZ3RoLHMsbCxjLHU9bmV3IEFycmF5KGEpLGgsZixwPXt9O2ZvcihvPTA7bzxhOysrbylpPW5bb10sYz11W29dPW5ldyBLbShpKSwoaD1lKGksbyxuKSkhPW51bGwmJihoKz0iIikmJihmPWYydCsoYy5pZD1oKSxwW2ZdPWYgaW4gcD9wMnQ6Yyk7Zm9yKG89MDtvPGE7KytvKWlmKGM9dVtvXSxoPXQobltvXSxvLG4pLGg9PW51bGx8fCEoaCs9IiIpKXtpZihzKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTtzPWN9ZWxzZXtpZihsPXBbZjJ0K2hdLCFsKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitoKTtpZihsPT09cDJ0KXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2gpO2wuY2hpbGRyZW4/bC5jaGlsZHJlbi5wdXNoKGMpOmwuY2hpbGRyZW49W2NdLGMucGFyZW50PWx9aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYocy5wYXJlbnQ9bk1lLHMuZWFjaEJlZm9yZShmdW5jdGlvbihkKXtkLmRlcHRoPWQucGFyZW50LmRlcHRoKzEsLS1hfSkuZWFjaEJlZm9yZSgkaikscy5wYXJlbnQ9bnVsbCxhPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBzfXJldHVybiByLmlkPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKG4pLHIpOmV9LHIucGFyZW50SWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9VWIobikscik6dH0scn1mdW5jdGlvbiBhTWUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gUWooZSl7dmFyIHQ9ZS5jaGlsZHJlbjtyZXR1cm4gdD90WzBdOmUudH1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbdC5sZW5ndGgtMV06ZS50fWZ1bmN0aW9uIHNNZShlLHQscil7dmFyIG49ci8odC5pLWUuaSk7dC5jLT1uLHQucys9cixlLmMrPW4sdC56Kz1yLHQubSs9cn1mdW5jdGlvbiBsTWUoZSl7Zm9yKHZhciB0PTAscj0wLG49ZS5jaGlsZHJlbixpPW4ubGVuZ3RoLG87LS1pPj0wOylvPW5baV0sby56Kz10LG8ubSs9dCx0Kz1vLnMrKHIrPW8uYyl9ZnVuY3Rpb24gY01lKGUsdCxyKXtyZXR1cm4gZS5hLnBhcmVudD09PXQucGFyZW50P2UuYTpyfWZ1bmN0aW9uIGk4KGUsdCl7dGhpcy5fPWUsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPW51bGwsdGhpcy5BPW51bGwsdGhpcy5hPXRoaXMsdGhpcy56PTAsdGhpcy5tPTAsdGhpcy5jPTAsdGhpcy5zPTAsdGhpcy50PW51bGwsdGhpcy5pPXR9aTgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoS20ucHJvdG90eXBlKTtmdW5jdGlvbiB1TWUoZSl7Zm9yKHZhciB0PW5ldyBpOChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBpOChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgaTgobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gbTJ0KCl7dmFyIGU9YU1lLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9dU1lKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2xNZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD10WChkKSxmPVFqKGYpLGQmJmY7KWc9UWooZykscD10WChwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoc01lKGNNZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhdFgocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIVFqKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfWZ1bmN0aW9uIEptKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIGVYPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiByWChlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/VWgobCxyLG4saSxnP24rPWQqXy9nOm8pOkptKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7clgodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KGVYKTtmdW5jdGlvbiBnMnQoKXt2YXIgZT1vOCx0PSExLHI9MSxuPTEsaT1bMF0sbz1PcCxhPU9wLHM9T3AsbD1PcCxjPU9wO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGYueDA9Zi55MD0wLGYueDE9cixmLnkxPW4sZi5lYWNoQmVmb3JlKGgpLGk9WzBdLHQmJmYuZWFjaEJlZm9yZShuOCksZn1mdW5jdGlvbiBoKGYpe3ZhciBwPWlbZi5kZXB0aF0sZD1mLngwK3AsZz1mLnkwK3AsXz1mLngxLXAseT1mLnkxLXA7XzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxmLngwPWQsZi55MD1nLGYueDE9XyxmLnkxPXksZi5jaGlsZHJlbiYmKHA9aVtmLmRlcHRoKzFdPW8oZikvMixkKz1jKGYpLXAsZys9YShmKS1wLF8tPXMoZiktcCx5LT1sKGYpLXAsXzxkJiYoZD1fPShkK18pLzIpLHk8ZyYmKGc9eT0oZyt5KS8yKSxlKGYsZCxnLF8seSkpfXJldHVybiB1LnJvdW5kPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZix1KTp0fSx1LnNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ZbMF0sbj0rZlsxXSx1KTpbcixuXX0sdS50aWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVViKGYpLHUpOmV9LHUucGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdJbm5lcihmKS5wYWRkaW5nT3V0ZXIoZik6dS5wYWRkaW5nSW5uZXIoKX0sdS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6b30sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKGYpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nQm90dG9tKGYpLnBhZGRpbmdMZWZ0KGYpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6YX0sdS5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6c30sdS5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6Wm0oK2YpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6Y30sdX1mdW5jdGlvbiBfMnQoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX1mdW5jdGlvbiB5MnQoZSx0LHIsbixpKXsoZS5kZXB0aCYxP0ptOlVoKShlLHQscixuLGkpfXZhciB2MnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP1VoKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTpKbShjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9clgodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShlWCk7ZnVuY3Rpb24geDJ0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG4saT1lW3ItMV0sbz0wOysrdDxyOyluPWksaT1lW3RdLG8rPW5bMV0qaVswXS1uWzBdKmlbMV07cmV0dXJuIG8vMn1mdW5jdGlvbiBiMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj0wLGk9MCxvLGE9ZVtyLTFdLHMsbD0wOysrdDxyOylvPWEsYT1lW3RdLGwrPXM9b1swXSphWzFdLWFbMF0qb1sxXSxuKz0ob1swXSthWzBdKSpzLGkrPShvWzFdK2FbMV0pKnM7cmV0dXJuIGwqPTMsW24vbCxpL2xdfWZ1bmN0aW9uIHcydChlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSktKHRbMV0tZVsxXSkqKHJbMF0tZVswXSl9ZnVuY3Rpb24gaE1lKGUsdCl7cmV0dXJuIGVbMF0tdFswXXx8ZVsxXS10WzFdfWZ1bmN0aW9uIFMydChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bMCwxXSxuPTIsaT0yO2k8dDsrK2kpe2Zvcig7bj4xJiZ3MnQoZVtyW24tMl1dLGVbcltuLTFdXSxlW2ldKTw9MDspLS1uO3JbbisrXT1pfXJldHVybiByLnNsaWNlKDAsbil9ZnVuY3Rpb24gTTJ0KGUpe2lmKChyPWUubGVuZ3RoKTwzKXJldHVybiBudWxsO3ZhciB0LHIsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkocik7Zm9yKHQ9MDt0PHI7Kyt0KW5bdF09WytlW3RdWzBdLCtlW3RdWzFdLHRdO2ZvcihuLnNvcnQoaE1lKSx0PTA7dDxyOysrdClpW3RdPVtuW3RdWzBdLC1uW3RdWzFdXTt2YXIgbz1TMnQobiksYT1TMnQoaSkscz1hWzBdPT09b1swXSxsPWFbYS5sZW5ndGgtMV09PT1vW28ubGVuZ3RoLTFdLGM9W107Zm9yKHQ9by5sZW5ndGgtMTt0Pj0wOy0tdCljLnB1c2goZVtuW29bdF1dWzJdXSk7Zm9yKHQ9K3M7dDxhLmxlbmd0aC1sOysrdCljLnB1c2goZVtuW2FbdF1dWzJdXSk7cmV0dXJuIGN9ZnVuY3Rpb24gRTJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX1mdW5jdGlvbiBUMnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9ZnVuY3Rpb24gYWMoKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12YXIgQzJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBBMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKCl7dmFyIG49YTguc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAobigpKX19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBzOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsbz0wO288bjsrK28paSs9dCgpO3JldHVybiBpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFAydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7dmFyIGk9czguc291cmNlKHQpKG4pO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBpKCkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO3ZhciBJMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYWMpO2Z1bmN0aW9uIGhpKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShlKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKGUpO2JyZWFrfXJldHVybiB0aGlzfWZ1bmN0aW9uIHNjKGUsdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5pbnRlcnBvbGF0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmludGVycG9sYXRvcih0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9VGIoKTt2YXIgTDJ0PUFycmF5LnByb3RvdHlwZSxYXz1MMnQubWFwLGxjPUwydC5zbGljZTt2YXIgbDg9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gZ3UoKXt2YXIgZT1KaSgpLHQ9W10scj1bXSxuPWw4O2Z1bmN0aW9uIGkobyl7dmFyIGE9bysiIixzPWUuZ2V0KGEpO2lmKCFzKXtpZihuIT09bDgpcmV0dXJuIG47ZS5zZXQoYSxzPXQucHVzaChvKSl9cmV0dXJuIHJbKHMtMSklci5sZW5ndGhdfXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sZT1KaSgpO2Zvcih2YXIgYT0tMSxzPW8ubGVuZ3RoLGwsYzsrK2E8czspZS5oYXMoYz0obD1vW2FdKSsiIil8fGUuc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gaX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1sYy5jYWxsKG8pLGkpOnIuc2xpY2UoKX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW8saSk6bn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGd1KHQscikudW5rbm93bihuKX0saGkuYXBwbHkoaSxhcmd1bWVudHMpLGl9ZnVuY3Rpb24gUW0oKXt2YXIgZT1ndSgpLnVua25vd24odm9pZCAwKSx0PWUuZG9tYWluLHI9ZS5yYW5nZSxuPVswLDFdLGksbyxhPSExLHM9MCxsPTAsYz0uNTtkZWxldGUgZS51bmtub3duO2Z1bmN0aW9uIHUoKXt2YXIgaD10KCkubGVuZ3RoLGY9blsxXTxuWzBdLHA9bltmLTBdLGQ9blsxLWZdO2k9KGQtcCkvTWF0aC5tYXgoMSxoLXMrbCoyKSxhJiYoaT1NYXRoLmZsb29yKGkpKSxwKz0oZC1wLWkqKGgtcykpKmMsbz1pKigxLXMpLGEmJihwPU1hdGgucm91bmQocCksbz1NYXRoLnJvdW5kKG8pKTt2YXIgZz1JcihoKS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIHAraSpffSk7cmV0dXJuIHIoZj9nLnJldmVyc2UoKTpnKX1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoaCksdSgpKTp0KCl9LGUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49WytoWzBdLCtoWzFdXSx1KCkpOm4uc2xpY2UoKX0sZS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPVsraFswXSwraFsxXV0sYT0hMCx1KCl9LGUuYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUuc3RlcD1mdW5jdGlvbigpe3JldHVybiBpfSxlLnJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhaCx1KCkpOmF9LGUucGFkZGluZz1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGw9K2gpLHUoKSk6c30sZS5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSxoKSx1KCkpOnN9LGUucGFkZGluZ091dGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStoLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFFtKHQoKSxuKS5yb3VuZChhKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSxoaS5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBrMnQoZSl7dmFyIHQ9ZS5jb3B5O3JldHVybiBlLnBhZGRpbmc9ZS5wYWRkaW5nT3V0ZXIsZGVsZXRlIGUucGFkZGluZ0lubmVyLGRlbGV0ZSBlLnBhZGRpbmdPdXRlcixlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gazJ0KHQoKSl9LGV9ZnVuY3Rpb24gdGcoKXtyZXR1cm4gazJ0KFFtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIFIydChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gbTUoZSl7cmV0dXJuK2V9dmFyIE4ydD1bMCwxXTtmdW5jdGlvbiBuaShlKXtyZXR1cm4gZX1mdW5jdGlvbiBuWChlLHQpe3JldHVybih0LT1lPStlKT9mdW5jdGlvbihyKXtyZXR1cm4oci1lKS90fTpSMnQoaXNOYU4odCk/TmFOOi41KX1mdW5jdGlvbiBEMnQoZSl7dmFyIHQ9ZVswXSxyPWVbZS5sZW5ndGgtMV0sbjtyZXR1cm4gdD5yJiYobj10LHQ9cixyPW4pLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKHIsaSkpfX1mdW5jdGlvbiBmTWUoZSx0LHIpe3ZhciBuPWVbMF0saT1lWzFdLG89dFswXSxhPXRbMV07cmV0dXJuIGk8bj8obj1uWChpLG4pLG89cihhLG8pKToobj1uWChuLGkpLG89cihvLGEpKSxmdW5jdGlvbihzKXtyZXR1cm4gbyhuKHMpKX19ZnVuY3Rpb24gcE1lKGUsdCxyKXt2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxhPS0xO2ZvcihlW25dPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK2E8bjspaVthXT1uWChlW2FdLGVbYSsxXSksb1thXT1yKHRbYV0sdFthKzFdKTtyZXR1cm4gZnVuY3Rpb24ocyl7dmFyIGw9eXMoZSxzLDEsbiktMTtyZXR1cm4gb1tsXShpW2xdKHMpKX19ZnVuY3Rpb24gcWgoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkucmFuZ2UoZS5yYW5nZSgpKS5pbnRlcnBvbGF0ZShlLmludGVycG9sYXRlKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gJF8oKXt2YXIgZT1OMnQsdD1OMnQscj1uYyxuLGksbyxhPW5pLHMsbCxjO2Z1bmN0aW9uIHUoKXtyZXR1cm4gcz1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk+Mj9wTWU6Zk1lLGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/bzoobHx8KGw9cyhlLm1hcChuKSx0LHIpKSkobihhKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBhKGkoKGN8fChjPXModCxlLm1hcChuKSx6aSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKGYsbTUpLGE9PT1uaXx8KGE9RDJ0KGUpKSx1KCkpOmUuc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGYpLHUoKSk6dC5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIHQ9bGMuY2FsbChmKSxyPWRMLHUoKX0saC5jbGFtcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1mP0QydChlKTpuaSxoKTphIT09bml9LGguaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zix1KCkpOnJ9LGgudW5rbm93bj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mLGgpOm99LGZ1bmN0aW9uKGYscCl7cmV0dXJuIG49ZixpPXAsdSgpfX1mdW5jdGlvbiBnNShlLHQpe3JldHVybiAkXygpKGUsdCl9ZnVuY3Rpb24gYzgoZSx0LHIsbil7dmFyIGk9dGwoZSx0LHIpLG87c3dpdGNoKG49THAobj09bnVsbD8iLGYiOm4pLG4udHlwZSl7Y2FzZSJzIjp7dmFyIGE9TWF0aC5tYXgoTWF0aC5hYnMoZSksTWF0aC5hYnModCkpO3JldHVybiBuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89b2soaSxhKSkmJihuLnByZWNpc2lvbj1vKSxXRShuLGEpfWNhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89YWsoaSxNYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSJlIikpO2JyZWFrfWNhc2UiZiI6Y2FzZSIlIjp7bi5wcmVjaXNpb249PW51bGwmJiFpc05hTihvPWlrKGkpKSYmKG4ucHJlY2lzaW9uPW8tKG4udHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiB4bihuKX1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmRvbWFpbjtyZXR1cm4gZS50aWNrcz1mdW5jdGlvbihyKXt2YXIgbj10KCk7cmV0dXJuIGFiKG5bMF0sbltuLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIpfSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10KCk7cmV0dXJuIGM4KGlbMF0saVtpLmxlbmd0aC0xXSxyPT1udWxsPzEwOnIsbil9LGUubmljZT1mdW5jdGlvbihyKXtyPT1udWxsJiYocj0xMCk7dmFyIG49dCgpLGk9MCxvPW4ubGVuZ3RoLTEsYT1uW2ldLHM9bltvXSxsO3JldHVybiBzPGEmJihsPWEsYT1zLHM9bCxsPWksaT1vLG89bCksbD14XyhhLHMsciksbD4wPyhhPU1hdGguZmxvb3IoYS9sKSpsLHM9TWF0aC5jZWlsKHMvbCkqbCxsPXhfKGEscyxyKSk6bDwwJiYoYT1NYXRoLmNlaWwoYSpsKS9sLHM9TWF0aC5mbG9vcihzKmwpL2wsbD14XyhhLHMscikpLGw+MD8obltpXT1NYXRoLmZsb29yKGEvbCkqbCxuW29dPU1hdGguY2VpbChzL2wpKmwsdChuKSk6bDwwJiYobltpXT1NYXRoLmNlaWwoYSpsKS9sLG5bb109TWF0aC5mbG9vcihzKmwpL2wsdChuKSksZX0sZX1mdW5jdGlvbiBPbigpe3ZhciBlPWc1KG5pLG5pKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsT24oKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxpbChlKX1mdW5jdGlvbiB1OChlKXt2YXIgdDtmdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT90Om59cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1YXy5jYWxsKG4sbTUpLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHU4KGUpLnVua25vd24odCl9LGU9YXJndW1lbnRzLmxlbmd0aD9YXy5jYWxsKGUsbTUpOlswLDFdLGlsKHIpfWZ1bmN0aW9uIGg4KGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9ZnVuY3Rpb24gTzJ0KGUpe3JldHVybiBNYXRoLmxvZyhlKX1mdW5jdGlvbiB6MnQoZSl7cmV0dXJuIE1hdGguZXhwKGUpfWZ1bmN0aW9uIGRNZShlKXtyZXR1cm4tTWF0aC5sb2coLWUpfWZ1bmN0aW9uIG1NZShlKXtyZXR1cm4tTWF0aC5leHAoLWUpfWZ1bmN0aW9uIGdNZShlKXtyZXR1cm4gaXNGaW5pdGUoZSk/KygiMWUiK2UpOmU8MD8wOmV9ZnVuY3Rpb24gX01lKGUpe3JldHVybiBlPT09MTA/Z01lOmU9PT1NYXRoLkU/TWF0aC5leHA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KGUsdCl9fWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4gZT09PU1hdGguRT9NYXRoLmxvZzplPT09MTAmJk1hdGgubG9nMTB8fGU9PT0yJiZNYXRoLmxvZzJ8fChlPU1hdGgubG9nKGUpLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9lfSl9ZnVuY3Rpb24gRjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tZSgtdCl9fWZ1bmN0aW9uIF81KGUpe3ZhciB0PWUoTzJ0LHoydCkscj10LmRvbWFpbixuPTEwLGksbztmdW5jdGlvbiBhKCl7cmV0dXJuIGk9eU1lKG4pLG89X01lKG4pLHIoKVswXTwwPyhpPUYydChpKSxvPUYydChvKSxlKGRNZSxtTWUpKTplKE8ydCx6MnQpLHR9cmV0dXJuIHQuYmFzZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rcyxhKCkpOm59LHQuZG9tYWluPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKHMpLGEoKSk6cigpfSx0LnRpY2tzPWZ1bmN0aW9uKHMpe3ZhciBsPXIoKSxjPWxbMF0sdT1sW2wubGVuZ3RoLTFdLGg7KGg9dTxjKSYmKGY9YyxjPXUsdT1mKTt2YXIgZj1pKGMpLHA9aSh1KSxkLGcsXyx5PXM9PW51bGw/MTA6K3MseD1bXTtpZighKG4lMSkmJnAtZjx5KXtpZihmPU1hdGgucm91bmQoZiktMSxwPU1hdGgucm91bmQocCkrMSxjPjApe2Zvcig7ZjxwOysrZilmb3IoZz0xLGQ9byhmKTtnPG47KytnKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSBmb3IoO2Y8cDsrK2YpZm9yKGc9bi0xLGQ9byhmKTtnPj0xOy0tZylpZihfPWQqZywhKF88Yykpe2lmKF8+dSlicmVhazt4LnB1c2goXyl9fWVsc2UgeD1hYihmLHAsTWF0aC5taW4ocC1mLHkpKS5tYXAobyk7cmV0dXJuIGg/eC5yZXZlcnNlKCk6eH0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHMsbCl7aWYobD09bnVsbCYmKGw9bj09PTEwPyIuMGUiOiIsIiksdHlwZW9mIGwhPSJmdW5jdGlvbiImJihsPXhuKGwpKSxzPT09MS8wKXJldHVybiBsO3M9PW51bGwmJihzPTEwKTt2YXIgYz1NYXRoLm1heCgxLG4qcy90LnRpY2tzKCkubGVuZ3RoKTtyZXR1cm4gZnVuY3Rpb24odSl7dmFyIGg9dS9vKE1hdGgucm91bmQoaSh1KSkpO3JldHVybiBoKm48bi0uNSYmKGgqPW4pLGg8PWM/bCh1KToiIn19LHQubmljZT1mdW5jdGlvbigpe3JldHVybiByKGg4KHIoKSx7Zmxvb3I6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5mbG9vcihpKHMpKSl9LGNlaWw6ZnVuY3Rpb24ocyl7cmV0dXJuIG8oTWF0aC5jZWlsKGkocykpKX19KSl9LHR9ZnVuY3Rpb24gY2MoKXt2YXIgZT1fNSgkXygpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsY2MoKSkuYmFzZShlLmJhc2UoKSl9LGhpLmFwcGx5KGUsYXJndW1lbnRzKSxlfWZ1bmN0aW9uIEIydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmxvZzFwKE1hdGguYWJzKHQvZSkpfX1mdW5jdGlvbiBIMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNpZ24odCkqTWF0aC5leHBtMShNYXRoLmFicyh0KSkqZX19ZnVuY3Rpb24geTUoZSl7dmFyIHQ9MSxyPWUoQjJ0KHQpLEgydCh0KSk7cmV0dXJuIHIuY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShCMnQodD0rbiksSDJ0KHQpKTp0fSxpbChyKX1mdW5jdGlvbiBmOCgpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxmOCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxoaS5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdDwwPy1NYXRoLnBvdygtdCxlKTpNYXRoLnBvdyh0LGUpfX1mdW5jdGlvbiB2TWUoZSl7cmV0dXJuIGU8MD8tTWF0aC5zcXJ0KC1lKTpNYXRoLnNxcnQoZSl9ZnVuY3Rpb24geE1lKGUpe3JldHVybiBlPDA/LWUqZTplKmV9ZnVuY3Rpb24gdjUoZSl7dmFyIHQ9ZShuaSxuaSkscj0xO2Z1bmN0aW9uIG4oKXtyZXR1cm4gcj09PTE/ZShuaSxuaSk6cj09PS41P2Uodk1lLHhNZSk6ZShWMnQociksVjJ0KDEvcikpfXJldHVybiB0LmV4cG9uZW50PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStpLG4oKSk6cn0saWwodCl9ZnVuY3Rpb24gS18oKXt2YXIgZT12NSgkXygpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFoKGUsS18oKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0saGkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gVTJ0KCl7cmV0dXJuIEtfLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gZWcoKXt2YXIgZT1bXSx0PVtdLHI9W10sbjtmdW5jdGlvbiBpKCl7dmFyIGE9MCxzPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShzLTEpOysrYTxzOylyW2EtMV09c2EoZSxhL3MpO3JldHVybiBvfWZ1bmN0aW9uIG8oYSl7cmV0dXJuIGlzTmFOKGE9K2EpP246dFt5cyhyLGEpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oYSl7dmFyIHM9dC5pbmRleE9mKGEpO3JldHVybiBzPDA/W05hTixOYU5dOltzPjA/cltzLTFdOmVbMF0sczxyLmxlbmd0aD9yW3NdOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBzPTAsbD1hLmxlbmd0aCxjO3M8bDsrK3MpYz1hW3NdLGMhPW51bGwmJiFpc05hTihjPStjKSYmZS5wdXNoKGMpO3JldHVybiBlLnNvcnQob2EpLGkoKX0sby5yYW5nZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKGEpLGkoKSk6dC5zbGljZSgpfSxvLnVua25vd249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YSxvKTpufSxvLnF1YW50aWxlcz1mdW5jdGlvbigpe3JldHVybiByLnNsaWNlKCl9LG8uY29weT1mdW5jdGlvbigpe3JldHVybiBlZygpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKG4pfSxoaS5hcHBseShvLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcWIoKXt2YXIgZT0wLHQ9MSxyPTEsbj1bLjVdLGk9WzAsMV0sbztmdW5jdGlvbiBhKGwpe3JldHVybiBsPD1sP2lbeXMobixsLDAscildOm99ZnVuY3Rpb24gcygpe3ZhciBsPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK2w8cjspbltsXT0oKGwrMSkqdC0obC1yKSplKS8ocisxKTtyZXR1cm4gYX1yZXR1cm4gYS5kb21haW49ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2xbMF0sdD0rbFsxXSxzKCkpOltlLHRdfSxhLnJhbmdlPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPWxjLmNhbGwobCkpLmxlbmd0aC0xLHMoKSk6aS5zbGljZSgpfSxhLmludmVydEV4dGVudD1mdW5jdGlvbihsKXt2YXIgYz1pLmluZGV4T2YobCk7cmV0dXJuIGM8MD9bTmFOLE5hTl06YzwxP1tlLG5bMF1dOmM+PXI/W25bci0xXSx0XTpbbltjLTFdLG5bY11dfSxhLnVua25vd249ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJihvPWwpLGF9LGEudGhyZXNob2xkcz1mdW5jdGlvbigpe3JldHVybiBuLnNsaWNlKCl9LGEuY29weT1mdW5jdGlvbigpe3JldHVybiBxYigpLmRvbWFpbihbZSx0XSkucmFuZ2UoaSkudW5rbm93bihvKX0saGkuYXBwbHkoaWwoYSksYXJndW1lbnRzKX1mdW5jdGlvbiBwOCgpe3ZhciBlPVsuNV0sdD1bMCwxXSxyLG49MTtmdW5jdGlvbiBpKG8pe3JldHVybiBvPD1vP3RbeXMoZSxvLDAsbildOnJ9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWxjLmNhbGwobyksbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOnQuc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24obyl7dmFyIGE9dC5pbmRleE9mKG8pO3JldHVybltlW2EtMV0sZVthXV19LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vLGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBwOCgpLmRvbWFpbihlKS5yYW5nZSh0KS51bmtub3duKHIpfSxoaS5hcHBseShpLGFyZ3VtZW50cyl9dmFyIGlYPW5ldyBEYXRlLG9YPW5ldyBEYXRlO2Z1bmN0aW9uIGJyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1hcmd1bWVudHMubGVuZ3RoPT09MD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99LGkuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxlKG8pLG99LGkucm91bmQ9ZnVuY3Rpb24obyl7dmFyIGE9aShvKSxzPWkuY2VpbChvKTtyZXR1cm4gby1hPHMtbz9hOnN9LGkub2Zmc2V0PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksYT09bnVsbD8xOk1hdGguZmxvb3IoYSkpLG99LGkucmFuZ2U9ZnVuY3Rpb24obyxhLHMpe3ZhciBsPVtdLGM7aWYobz1pLmNlaWwobykscz1zPT1udWxsPzE6TWF0aC5mbG9vcihzKSwhKG88YSl8fCEocz4wKSlyZXR1cm4gbDtkbyBsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxzKSxlKG8pO3doaWxlKGM8byYmbzxhKTtyZXR1cm4gbH0saS5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGJyKGZ1bmN0aW9uKGEpe2lmKGE+PWEpZm9yKDtlKGEpLCFvKGEpOylhLnNldFRpbWUoYS0xKX0sZnVuY3Rpb24oYSxzKXtpZihhPj1hKWlmKHM8MClmb3IoOysrczw9MDspZm9yKDt0KGEsLTEpLCFvKGEpOyk7ZWxzZSBmb3IoOy0tcz49MDspZm9yKDt0KGEsMSksIW8oYSk7KTt9KX0sciYmKGkuY291bnQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaVguc2V0VGltZSgrbyksb1guc2V0VGltZSgrYSksZShpWCksZShvWCksTWF0aC5mbG9vcihyKGlYLG9YKSl9LGkuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSwhaXNGaW5pdGUobyl8fCEobz4wKT9udWxsOm8+MT9pLmZpbHRlcihuP2Z1bmN0aW9uKGEpe3JldHVybiBuKGEpJW89PT0wfTpmdW5jdGlvbihhKXtyZXR1cm4gaS5jb3VudCgwLGEpJW89PT0wfSk6aX0pLGl9dmFyIGQ4PWJyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7ZDguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9icihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpkOH07dmFyIFpfPWQ4LGFYPWQ4LnJhbmdlO3ZhciBKXz0xZTMsdWM9NmU0LEdiPTM2ZTUsbTg9ODY0ZTUsZzg9NjA0OGU1O3ZhciBxMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqSl8pfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0pffSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENTZWNvbmRzKCl9KSxRXz1xMnQsc1g9cTJ0LnJhbmdlO3ZhciBHMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxfOD1HMnQsVzJ0PUcydC5yYW5nZTt2YXIgWTJ0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqSl8tZS5nZXRNaW51dGVzKCkqdWMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0SG91cnMoKX0pLHk4PVkydCxqMnQ9WTJ0LnJhbmdlO3ZhciBYMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHR5PVgydCwkMnQ9WDJ0LnJhbmdlO2Z1bmN0aW9uIGV5KGUpe3JldHVybiBicihmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKnVjKS9nOH0pfXZhciByZz1leSgwKSxyeT1leSgxKSxsWD1leSgyKSxjWD1leSgzKSx6cD1leSg0KSx1WD1leSg1KSxoWD1leSg2KSxmWD1yZy5yYW5nZSxLMnQ9cnkucmFuZ2UsWjJ0PWxYLnJhbmdlLEoydD1jWC5yYW5nZSxRMnQ9enAucmFuZ2UsdHd0PXVYLnJhbmdlLGV3dD1oWC5yYW5nZTt2YXIgcnd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLHY4PXJ3dCxud3Q9cnd0LnJhbmdlO3ZhciBwWD1icihmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3BYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07dmFyIEdoPXBYLGl3dD1wWC5yYW5nZTt2YXIgb3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KnVjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS91Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkseDg9b3d0LGF3dD1vd3QucmFuZ2U7dmFyIHN3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkdiKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9HYn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLGI4PXN3dCxsd3Q9c3d0LnJhbmdlO3ZhciBjd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvbTh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0RhdGUoKS0xfSksbnk9Y3d0LHV3dD1jd3QucmFuZ2U7ZnVuY3Rpb24gaXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZzh9KX12YXIgbmc9aXkoMCksb3k9aXkoMSksZFg9aXkoMiksbVg9aXkoMyksRnA9aXkoNCksZ1g9aXkoNSksX1g9aXkoNikseVg9bmcucmFuZ2UsaHd0PW95LnJhbmdlLGZ3dD1kWC5yYW5nZSxwd3Q9bVgucmFuZ2UsZHd0PUZwLnJhbmdlLG13dD1nWC5yYW5nZSxnd3Q9X1gucmFuZ2U7dmFyIF93dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSx3OD1fd3QseXd0PV93dC5yYW5nZTt2YXIgdlg9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTt2WC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6YnIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O3ZhciBXaD12WCx2d3Q9dlgucmFuZ2U7ZnVuY3Rpb24geFgoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpfWZ1bmN0aW9uIGJYKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpfWZ1bmN0aW9uIHg1KGUsdCxyKXtyZXR1cm57eTplLG06dCxkOnIsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBTNShlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1iNShpKSx1PXc1KGkpLGg9YjUobyksZj13NShvKSxwPWI1KGEpLGQ9dzUoYSksZz1iNShzKSxfPXc1KHMpLHk9YjUobCkseD13NShsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpFd3QsZTpFd3QsZjpxTWUsZzpRTWUsRzplRWUsSDpITWUsSTpWTWUsajpVTWUsTDpJd3QsbTpHTWUsTTpXTWUscDpzdCxxOlN0LFE6QXd0LHM6UHd0LFM6WU1lLHU6ak1lLFU6WE1lLFY6JE1lLHc6S01lLFc6Wk1lLHg6bnVsbCxYOm51bGwseTpKTWUsWTp0RWUsWjpyRWUsIiUiOkN3dH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpUd3QsZTpUd3QsZjphRWUsZzpnRWUsRzp5RWUsSDpuRWUsSTppRWUsajpvRWUsTDprd3QsbTpzRWUsTTpsRWUscDpfdCxxOmN0LFE6QXd0LHM6UHd0LFM6Y0VlLHU6dUVlLFU6aEVlLFY6ZkVlLHc6cEVlLFc6ZEVlLHg6bnVsbCxYOm51bGwseTptRWUsWTpfRWUsWjp2RWUsIiUiOkN3dH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOlN3dCxlOlN3dCxmOk9NZSxnOnd3dCxHOmJ3dCxIOk13dCxJOk13dCxqOmtNZSxMOkRNZSxtOkxNZSxNOlJNZSxwOkQscTpJTWUsUTpGTWUsczpCTWUsUzpOTWUsdTpFTWUsVTpUTWUsVjpDTWUsdzpNTWUsVzpBTWUseDp6LFg6VSx5Ond3dCxZOmJ3dCxaOlBNZSwiJSI6ek1lfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9eHd0W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9eDUoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PWJYKHg1KHEueSwwLDEpKSx3dD1odC5nZXRVVENEYXkoKSxodD13dD40fHx3dD09PTA/b3kuY2VpbChodCk6b3koaHQpLGh0PW55Lm9mZnNldChodCwocS5WLTEpKjcpLHEueT1odC5nZXRVVENGdWxsWWVhcigpLHEubT1odC5nZXRVVENNb250aCgpLHEuZD1odC5nZXRVVENEYXRlKCkrKHEudys2KSU3KTooaHQ9eFgoeDUocS55LDAsMSkpLHd0PWh0LmdldERheSgpLGh0PXd0PjR8fHd0PT09MD9yeS5jZWlsKGh0KTpyeShodCksaHQ9dHkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldEZ1bGxZZWFyKCkscS5tPWh0LmdldE1vbnRoKCkscS5kPWh0LmdldERhdGUoKSsocS53KzYpJTcpfWVsc2UoIlciaW4gcXx8IlUiaW4gcSkmJigidyJpbiBxfHwocS53PSJ1ImluIHE/cS51JTc6IlciaW4gcT8xOjApLHd0PSJaImluIHE/YlgoeDUocS55LDAsMSkpLmdldFVUQ0RheSgpOnhYKHg1KHEueSwwLDEpKS5nZXREYXkoKSxxLm09MCxxLmQ9IlciaW4gcT8ocS53KzYpJTcrcS5XKjctKHd0KzUpJTc6cS53K3EuVSo3LSh3dCs2KSU3KTtyZXR1cm4iWiJpbiBxPyhxLkgrPXEuWi8xMDB8MCxxLk0rPXEuWiUxMDAsYlgocSkpOnhYKHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIHh3dD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fXZhciB4d3Q9eyItIjoiIixfOiIgIiwwOiIwIn0seG89L15ccypcZCsvLGJNZT0vXiUvLHdNZT0vW1xcXiQqKz98W1xdKCkue31dL2c7ZnVuY3Rpb24gQnIoZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gU01lKGUpe3JldHVybiBlLnJlcGxhY2Uod01lLCJcXCQmIil9ZnVuY3Rpb24gYjUoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKFNNZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHc1KGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIE1NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBBTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYnd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHd3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFBNZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUucT1uWzBdKjMtMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFN3dChlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLm09MCxlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTXd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB6TWUoZSx0LHIpe3ZhciBuPWJNZS5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj9yK25bMF0ubGVuZ3RoOi0xfWZ1bmN0aW9uIEZNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5RPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIpKTtyZXR1cm4gbj8oZS5zPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV3dChlLHQpe3JldHVybiBCcihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIEhNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBWTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIFVNZShlLHQpe3JldHVybiBCcigxK3R5LmNvdW50KEdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gSXd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBxTWUoZSx0KXtyZXR1cm4gSXd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gR01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gV01lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gWU1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gak1lKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBYTWUoZSx0KXtyZXR1cm4gQnIocmcuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEx3dChlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0Pj00fHx0PT09MD96cChlKTp6cC5jZWlsKGUpfWZ1bmN0aW9uICRNZShlLHQpe3JldHVybiBlPUx3dChlKSxCcih6cC5jb3VudChHaChlKSxlKSsoR2goZSkuZ2V0RGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIEtNZShlKXtyZXR1cm4gZS5nZXREYXkoKX1mdW5jdGlvbiBaTWUoZSx0KXtyZXR1cm4gQnIocnkuY291bnQoR2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIEpNZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gUU1lKGUsdCl7cmV0dXJuIGU9THd0KGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB0RWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGVFZShlLHQpe3ZhciByPWUuZ2V0RGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/enAoZSk6enAuY2VpbChlKSxCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gckVlKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnIodC82MHwwLCIwIiwyKStCcih0JTYwLCIwIiwyKX1mdW5jdGlvbiBUd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENEYXRlKCksdCwyKX1mdW5jdGlvbiBuRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpLHQsMil9ZnVuY3Rpb24gaUVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBvRWUoZSx0KXtyZXR1cm4gQnIoMStueS5jb3VudChXaChlKSxlKSx0LDMpfWZ1bmN0aW9uIGt3dChlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gYUVlKGUsdCl7cmV0dXJuIGt3dChlLHQpKyIwMDAifWZ1bmN0aW9uIHNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIGxFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIGNFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ1NlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHVFZShlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gaEVlKGUsdCl7cmV0dXJuIEJyKG5nLmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBSd3QoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/RnAoZSk6RnAuY2VpbChlKX1mdW5jdGlvbiBmRWUoZSx0KXtyZXR1cm4gZT1Sd3QoZSksQnIoRnAuY291bnQoV2goZSksZSkrKFdoKGUpLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBwRWUoZSl7cmV0dXJuIGUuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gZEVlKGUsdCl7cmV0dXJuIEJyKG95LmNvdW50KFdoKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBtRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIGdFZShlLHQpe3JldHVybiBlPVJ3dChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gX0VlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB5RWUoZSx0KXt2YXIgcj1lLmdldFVUQ0RheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP0ZwKGUpOkZwLmNlaWwoZSksQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHZFZSgpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gQ3d0KCl7cmV0dXJuIiUifWZ1bmN0aW9uIEF3dChlKXtyZXR1cm4rZX1mdW5jdGlvbiBQd3QoZSl7cmV0dXJuIE1hdGguZmxvb3IoK2UvMWUzKX12YXIgV2IsTTUsd1gsYXksRTU7Uzgoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBTOChlKXtyZXR1cm4gV2I9UzUoZSksTTU9V2IuZm9ybWF0LHdYPVdiLnBhcnNlLGF5PVdiLnV0Y0Zvcm1hdCxFNT1XYi51dGNQYXJzZSxXYn12YXIgU1g9IiVZLSVtLSVkVCVIOiVNOiVTLiVMWiI7ZnVuY3Rpb24geEVlKGUpe3JldHVybiBlLnRvSVNPU3RyaW5nKCl9dmFyIGJFZT1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz94RWU6YXkoU1gpLE53dD1iRWU7ZnVuY3Rpb24gd0VlKGUpe3ZhciB0PW5ldyBEYXRlKGUpO3JldHVybiBpc05hTih0KT9udWxsOnR9dmFyIFNFZT0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP3dFZTpFNShTWCksRHd0PVNFZTt2YXIgVDU9MWUzLEM1PVQ1KjYwLEE1PUM1KjYwLFA1PUE1KjI0LE1FZT1QNSo3LE93dD1QNSozMCxNWD1QNSozNjU7ZnVuY3Rpb24gRUVlKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiBURWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gTTgoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWc1KG5pLG5pKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEsVDVdLFthLDUsNSpUNV0sW2EsMTUsMTUqVDVdLFthLDMwLDMwKlQ1XSxbbywxLEM1XSxbbyw1LDUqQzVdLFtvLDE1LDE1KkM1XSxbbywzMCwzMCpDNV0sW2ksMSxBNV0sW2ksMywzKkE1XSxbaSw2LDYqQTVdLFtpLDEyLDEyKkE1XSxbbiwxLFA1XSxbbiwyLDIqUDVdLFtyLDEsTUVlXSxbdCwxLE93dF0sW3QsMywzKk93dF0sW2UsMSxNWF1dO2Z1bmN0aW9uIEMoayl7cmV0dXJuKGEoayk8az9mOm8oayk8az9wOmkoayk8az9kOm4oayk8az9nOnQoayk8az9yKGspPGs/Xzp5OmUoayk8az94OmIpKGspfWZ1bmN0aW9uIFAoayxPLEQsQil7aWYoaz09bnVsbCYmKGs9MTApLHR5cGVvZiBrPT0ibnVtYmVyIil7dmFyIEk9TWF0aC5hYnMoRC1PKS9rLEw9b2IoZnVuY3Rpb24oUil7cmV0dXJuIFJbMl19KS5yaWdodChTLEkpO0w9PT1TLmxlbmd0aD8oQj10bChPL01YLEQvTVgsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heCh0bChPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChYXy5jYWxsKGssVEVlKSk6aCgpLm1hcChFRWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChoOChELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoYyxNOChlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIFliKCl7cmV0dXJuIGhpLmFwcGx5KE04KEdoLHY4LHJnLHR5LHk4LF84LFFfLFpfLE01KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiB6d3QoKXtyZXR1cm4gaGkuYXBwbHkoTTgoV2gsdzgsbmcsbnksYjgseDgsUV8sWl8sYXkpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEU4KCl7dmFyIGU9MCx0PTEscixuLGksbyxhPW5pLHM9ITEsbDtmdW5jdGlvbiBjKHUpe3JldHVybiBpc05hTih1PSt1KT9sOmEoaT09PTA/LjU6KHU9KG8odSktcikqaSxzP01hdGgubWF4KDAsTWF0aC5taW4oMSx1KSk6dSkpfXJldHVybiBjLmRvbWFpbj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1vKGU9K3VbMF0pLG49byh0PSt1WzFdKSxpPXI9PT1uPzA6MS8obi1yKSxjKTpbZSx0XX0sYy5jbGFtcD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0hIXUsYyk6c30sYy5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxjKTphfSxjLnVua25vd249ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dSxjKTpsfSxmdW5jdGlvbih1KXtyZXR1cm4gbz11LHI9dShlKSxuPXUodCksaT1yPT09bj8wOjEvKG4tciksY319ZnVuY3Rpb24gQnAoZSx0KXtyZXR1cm4gdC5kb21haW4oZS5kb21haW4oKSkuaW50ZXJwb2xhdG9yKGUuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKGUuY2xhbXAoKSkudW5rbm93bihlLnVua25vd24oKSl9ZnVuY3Rpb24gVDgoKXt2YXIgZT1pbChFOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFQ4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRVgoKXt2YXIgZT1fNShFOCgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRVgoKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPXk1KEU4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQzgoKXt2YXIgZT12NShFOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQzgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEZ3dCgpe3JldHVybiBDOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEE4KCl7dmFyIGU9W10sdD1uaTtmdW5jdGlvbiByKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gdCgoeXMoZSxuKS0xKS8oZS5sZW5ndGgtMSkpfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpYT1uW2ldLGEhPW51bGwmJiFpc05hTihhPSthKSYmZS5wdXNoKGEpO3JldHVybiBlLnNvcnQob2EpLHJ9LHIuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4scik6dH0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEE4KHQpLmRvbWFpbihlKX0sc2MuYXBwbHkocixhcmd1bWVudHMpfWZ1bmN0aW9uIFA4KCl7dmFyIGU9MCx0PS41LHI9MSxuLGksbyxhLHMsbD1uaSxjLHU9ITEsaDtmdW5jdGlvbiBmKHApe3JldHVybiBpc05hTihwPStwKT9oOihwPS41KygocD0rYyhwKSktaSkqKHA8aT9hOnMpLGwodT9NYXRoLm1heCgwLE1hdGgubWluKDEscCkpOnApKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YyhlPStwWzBdKSxpPWModD0rcFsxXSksbz1jKHI9K3BbMl0pLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZik6W2UsdCxyXX0sZi5jbGFtcD1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0hIXAsZik6dX0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9cCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9cCxmKTpofSxmdW5jdGlvbihwKXtyZXR1cm4gYz1wLG49cChlKSxpPXAodCksbz1wKHIpLGE9bj09PWk/MDouNS8oaS1uKSxzPWk9PT1vPzA6LjUvKG8taSksZn19ZnVuY3Rpb24gSTgoKXt2YXIgZT1pbChQOCgpKG5pKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLEk4KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ1goKXt2YXIgZT1fNShQOCgpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsQ1goKSkuYmFzZShlLmJhc2UoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPXk1KFA4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5jb25zdGFudChlLmNvbnN0YW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTDgoKXt2YXIgZT12NShQOCgpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsTDgoKSkuZXhwb25lbnQoZS5leHBvbmVudCgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIEJ3dCgpe3JldHVybiBMOC5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIHRlKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC82fDAscj1uZXcgQXJyYXkodCksbj0wO248dDspcltuXT0iIyIrZS5zbGljZShuKjYsKytuKjYpO3JldHVybiByfXZhciBqYj10ZSgiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIik7dmFyIEh3dD10ZSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2Iik7dmFyIFZ3dD10ZSgiMWI5ZTc3ZDk1ZjAyNzU3MGIzZTcyOThhNjZhNjFlZTZhYjAyYTY3NjFkNjY2NjY2Iik7dmFyIFV3dD10ZSgiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4Iik7dmFyIHF3dD10ZSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIik7dmFyIEd3dD10ZSgiYjNlMmNkZmRjZGFjY2JkNWU4ZjRjYWU0ZTZmNWM5ZmZmMmFlZjFlMmNjY2NjY2NjIik7dmFyIFd3dD10ZSgiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5Iik7dmFyIFl3dD10ZSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIik7dmFyIGp3dD10ZSgiOGRkM2M3ZmZmZmIzYmViYWRhZmI4MDcyODBiMWQzZmRiNDYyYjNkZTY5ZmNjZGU1ZDlkOWQ5YmM4MGJkY2NlYmM1ZmZlZDZmIik7dmFyIFh3dD10ZSgiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIik7ZnVuY3Rpb24gSWUoZSl7cmV0dXJuIHVMKGVbZS5sZW5ndGgtMV0pfXZhciBQWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAodGUpLCR3dD1JZShQWCk7dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcCh0ZSksS3d0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTlhM2M5ZjdmN2Y3YTFkNzZhIiwiZDAxYzhiZjFiNmRhYjhlMTg2NGRhYzI2IiwiZDAxYzhiZjFiNmRhZjdmN2Y3YjhlMTg2NGRhYzI2IiwiYzUxYjdkZTlhM2M5ZmRlMGVmZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZTlhM2M5ZmRlMGVmZjdmN2Y3ZTZmNWQwYTFkNzZhNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxIiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IiwiOGUwMTUyYzUxYjdkZGU3N2FlZjFiNmRhZmRlMGVmZjdmN2Y3ZTZmNWQwYjhlMTg2N2ZiYzQxNGQ5MjIxMjc2NDE5IikubWFwKHRlKSxad3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAodGUpLEp3dD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcCh0ZSksUXd0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZmZmZmZmOTk5OTk5IiwiY2EwMDIwZjRhNTgyYmFiYWJhNDA0MDQwIiwiY2EwMDIwZjRhNTgyZmZmZmZmYmFiYWJhNDA0MDQwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZWY4YTYyZmRkYmM3ZmZmZmZmZTBlMGUwOTk5OTk5NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZmZmZmZmZTBlMGUwYmFiYWJhODc4Nzg3NGQ0ZDRkMWExYTFhIikubWFwKHRlKSx0U3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAodGUpLGVTdD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcCh0ZSksclN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTlkNTk0IiwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhIiwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIiwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyIikubWFwKHRlKSxuU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAodGUpLGlTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcCh0ZSksb1N0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBmM2RiYThkZGI1NDNhMmNhIiwiZjBmOWU4YmFlNGJjN2JjY2M0MmI4Y2JlIiwiZjBmOWU4YmFlNGJjN2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NDNhMmNhMDg2OGFjIiwiZjBmOWU4Y2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg1ODllIiwiZjdmY2YwZTBmM2RiY2NlYmM1YThkZGI1N2JjY2M0NGViM2QzMmI4Y2JlMDg2OGFjMDg0MDgxIikubWFwKHRlKSxhU3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAodGUpLHNTdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcCh0ZSksbFN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlN2YyYTZiZGRiMmI4Y2JlIiwiZjFlZWY2YmRjOWUxNzRhOWNmMDU3MGIwIiwiZjFlZWY2YmRjOWUxNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMmI4Y2JlMDQ1YThkIiwiZjFlZWY2ZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDM0ZTdiIiwiZmZmN2ZiZWNlN2YyZDBkMWU2YTZiZGRiNzRhOWNmMzY5MGMwMDU3MGIwMDQ1YThkMDIzODU4IikubWFwKHRlKSxjU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAodGUpLHVTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcCh0ZSksaFN0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWRmOGIxN2ZjZGJiMmM3ZmI4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MjI1ZWE4IiwiZmZmZmNjYTFkYWI0NDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MmM3ZmI4MjUzNDk0IiwiZmZmZmNjYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MGMyYzg0IiwiZmZmZmQ5ZWRmOGIxYzdlOWI0N2ZjZGJiNDFiNmM0MWQ5MWMwMjI1ZWE4MjUzNDk0MDgxZDU4IikubWFwKHRlKSxmU3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAodGUpLHBTdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcCh0ZSksZFN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZlZGEwZmViMjRjZjAzYjIwIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZTMxYTFjIiwiZmZmZmIyZmVjYzVjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZjAzYjIwYmQwMDI2IiwiZmZmZmIyZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYjEwMDI2IiwiZmZmZmNjZmZlZGEwZmVkOTc2ZmViMjRjZmQ4ZDNjZmM0ZTJhZTMxYTFjYmQwMDI2ODAwMDI2IikubWFwKHRlKSxtU3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAodGUpLGdTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksX1N0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZjBmMGYwYmRiZGJkNjM2MzYzIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NTI1MjUyIiwiZjdmN2Y3Y2NjY2NjOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NjM2MzYzMjUyNTI1IiwiZjdmN2Y3ZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1IiwiZmZmZmZmZjBmMGYwZDlkOWQ5YmRiZGJkOTY5Njk2NzM3MzczNTI1MjUyMjUyNTI1MDAwMDAwIikubWFwKHRlKSx5U3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAodGUpLHZTdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcCh0ZSkseFN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlNmNlZmRhZTZiZTY1NTBkIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZDk0NzAxIiwiZmVlZGRlZmRiZTg1ZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZTY1NTBkYTYzNjAzIiwiZmVlZGRlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxOGMyZDA0IiwiZmZmNWViZmVlNmNlZmRkMGEyZmRhZTZiZmQ4ZDNjZjE2OTEzZDk0ODAxYTYzNjAzN2YyNzA0IikubWFwKHRlKSxiU3Q9SWUoZSQpO2Z1bmN0aW9uIHdTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LWUqKDM1LjM0LWUqKDIzODEuNzMtZSooNjQwMi43LWUqKDcwMjQuNzItZSoyNzEwLjU3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrZSooMTcwLjczK2UqKDUyLjgyLWUqKDEzMS40Ni1lKigxNzYuNTgtZSo2Ny4zNykpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K2UqKDQ0Mi4zNi1lKigyNDgyLjQzLWUqKDYxNjcuMjQtZSooNjYxNC45NC1lKjI0NzUuNjcpKSkpKSkpKyIpIn12YXIgU1N0PUVfKGxhKDMwMCwuNSwwKSxsYSgtMjQwLC41LDEpKTt2YXIgTVN0PUVfKGxhKC0xMDAsLjc1LC4zNSksbGEoODAsMS41LC44KSksRVN0PUVfKGxhKDI2MCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxrOD1sYSgpO2Z1bmN0aW9uIFRTdChlKXsoZTwwfHxlPjEpJiYoZS09TWF0aC5mbG9vcihlKSk7dmFyIHQ9TWF0aC5hYnMoZS0uNSk7cmV0dXJuIGs4Lmg9MzYwKmUtMTAwLGs4LnM9MS41LTEuNSp0LGs4Lmw9LjgtLjkqdCxrOCsiIn12YXIgUjg9Y3UoKSxDRWU9TWF0aC5QSS8zLEFFZT1NYXRoLlBJKjIvMztmdW5jdGlvbiBDU3QoZSl7dmFyIHQ7cmV0dXJuIGU9KC41LWUpKk1hdGguUEksUjgucj0yNTUqKHQ9TWF0aC5zaW4oZSkpKnQsUjguZz0yNTUqKHQ9TWF0aC5zaW4oZStDRWUpKSp0LFI4LmI9MjU1Kih0PU1hdGguc2luKGUrQUVlKSkqdCxSOCsiIn1mdW5jdGlvbiBBU3QoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwicmdiKCIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzNC42MStlKigxMTcyLjMzLWUqKDEwNzkzLjU2LWUqKDMzMzAwLjEyLWUqKDM4Mzk0LjQ5LWUqMTQ4MjUuMDUpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyMy4zMStlKig1NTcuMzMrZSooMTIyNS4zMy1lKigzNTc0Ljk2LWUqKDEwNzMuNzcrZSo3MDcuNTYpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNy4yK2UqKDMyMTEuMS1lKigxNTMyNy45Ny1lKigyNzgxNC1lKigyMjU2OS4xOC1lKjY4MzguNjYpKSkpKSkpKyIpIn1mdW5jdGlvbiBOOChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGVbTWF0aC5tYXgoMCxNYXRoLm1pbih0LTEsTWF0aC5mbG9vcihyKnQpKSldfX12YXIgUFN0PU44KHRlKCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjUiKSksSVN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksTFN0PU44KHRlKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksa1N0PU44KHRlKCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjEiKSk7ZnVuY3Rpb24gcWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciByJD1NYXRoLmFicyxCbz1NYXRoLmF0YW4yLGlnPU1hdGguY29zLFJTdD1NYXRoLm1heCxEOD1NYXRoLm1pbixfdT1NYXRoLnNpbixzeT1NYXRoLnNxcnQsYm89MWUtMTIseXU9TWF0aC5QSSxJNT15dS8yLGhjPTIqeXU7ZnVuY3Rpb24gTlN0KGUpe3JldHVybiBlPjE/MDplPC0xP3l1Ok1hdGguYWNvcyhlKX1mdW5jdGlvbiBuJChlKXtyZXR1cm4gZT49MT9JNTplPD0tMT8tSTU6TWF0aC5hc2luKGUpfWZ1bmN0aW9uIFBFZShlKXtyZXR1cm4gZS5pbm5lclJhZGl1c31mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTEVlKGUpe3JldHVybiBlLnN0YXJ0QW5nbGV9ZnVuY3Rpb24ga0VlKGUpe3JldHVybiBlLmVuZEFuZ2xlfWZ1bmN0aW9uIFJFZShlKXtyZXR1cm4gZSYmZS5wYWRBbmdsZX1mdW5jdGlvbiBORWUoZSx0LHIsbixpLG8sYSxzKXt2YXIgbD1yLWUsYz1uLXQsdT1hLWksaD1zLW8sZj1oKmwtdSpjO2lmKCEoZipmPGJvKSlyZXR1cm4gZj0odSoodC1vKS1oKihlLWkpKS9mLFtlK2YqbCx0K2YqY119ZnVuY3Rpb24gTzgoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvc3kocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqc3koUlN0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBEU3QoKXt2YXIgZT1QRWUsdD1JRWUscj1xZSgwKSxuPW51bGwsaT1MRWUsbz1rRWUsYT1SRWUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktSTUsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1JNSxnPXIkKGQtcCksXz1kPnA7aWYoc3x8KHM9Yz1icygpKSxmPGgmJih1PWYsZj1oLGg9dSksIShmPmJvKSlzLm1vdmVUbygwLDApO2Vsc2UgaWYoZz5oYy1ibylzLm1vdmVUbyhmKmlnKHApLGYqX3UocCkpLHMuYXJjKDAsMCxmLHAsZCwhXyksaD5ibyYmKHMubW92ZVRvKGgqaWcoZCksaCpfdShkKSkscy5hcmMoMCwwLGgsZCxwLF8pKTtlbHNle3ZhciB5PXAseD1kLGI9cCxTPWQsQz1nLFA9ZyxrPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsTz1rPmJvJiYobj8rbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6c3koaCpoK2YqZikpLEQ9RDgociQoZi1oKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksQj1ELEk9RCxMLFI7aWYoTz5ibyl7dmFyIEY9biQoTy9oKl91KGspKSx6PW4kKE8vZipfdShrKSk7KEMtPUYqMik+Ym8/KEYqPV8/MTotMSxiKz1GLFMtPUYpOihDPTAsYj1TPShwK2QpLzIpLChQLT16KjIpPmJvPyh6Kj1fPzE6LTEseSs9eix4LT16KTooUD0wLHk9eD0ocCtkKS8yKX12YXIgVT1mKmlnKHkpLFc9ZipfdSh5KSxaPWgqaWcoUykscnQ9aCpfdShTKTtpZihEPmJvKXt2YXIgb3Q9ZippZyh4KSxzdD1mKl91KHgpLFN0PWgqaWcoYiksYnQ9aCpfdShiKSxNdDtpZihnPHl1JiYoTXQ9TkVlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KSkpe3ZhciBsdD1VLU10WzBdLEt0PVctTXRbMV0sX3Q9b3QtTXRbMF0sY3Q9c3QtTXRbMV0sWD0xL191KE5TdCgobHQqX3QrS3QqY3QpLyhzeShsdCpsdCtLdCpLdCkqc3koX3QqX3QrY3QqY3QpKSkvMiksZXQ9c3koTXRbMF0qTXRbMF0rTXRbMV0qTXRbMV0pO0I9RDgoRCwoaC1ldCkvKFgtMSkpLEk9RDgoRCwoZi1ldCkvKFgrMSkpfX1QPmJvP0k+Ym8/KEw9TzgoU3QsYnQsVSxXLGYsSSxfKSxSPU84KG90LHN0LFoscnQsZixJLF8pLHMubW92ZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksSTxEP3MuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksSSxCbyhMLnkwMSxMLngwMSksQm8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsZixCbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEJvKFIuY3krUi55MTEsUi5jeCtSLngxMSksIV8pLHMuYXJjKFIuY3gsUi5jeSxJLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6KHMubW92ZVRvKFUsVykscy5hcmMoMCwwLGYseSx4LCFfKSk6cy5tb3ZlVG8oVSxXKSwhKGg+Ym8pfHwhKEM+Ym8pP3MubGluZVRvKFoscnQpOkI+Ym8/KEw9TzgoWixydCxvdCxzdCxoLC1CLF8pLFI9TzgoVSxXLFN0LGJ0LGgsLUIsXykscy5saW5lVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxCPEQ/cy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxCLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxoLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSxfKSxzLmFyYyhSLmN4LFIuY3ksQixCbyhSLnkxMSxSLngxMSksQm8oUi55MDEsUi54MDEpLCFfKSkpOnMuYXJjKDAsMCxoLFMsYixfKX1pZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBsLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGM9KCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHU9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXl1LzI7cmV0dXJuW2lnKHUpKmMsX3UodSkqY119LGwuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6ZX0sbC5vdXRlclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTp0fSxsLmNvcm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpyfSxsLnBhZFJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jPT1udWxsP251bGw6dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6bn0sbC5zdGFydEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOml9LGwuZW5kQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6b30sbC5wYWRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9Yz09bnVsbD9udWxsOmMsbCk6c30sbH1mdW5jdGlvbiBPU3QoZSl7dGhpcy5fY29udGV4dD1lfU9TdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTticmVha319fTtmdW5jdGlvbiBZaChlKXtyZXR1cm4gbmV3IE9TdChlKX1mdW5jdGlvbiBYYihlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiAkYihlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiB2dSgpe3ZhciBlPVhiLHQ9JGIscj1xZSghMCksbj1udWxsLGk9WWgsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPWJzKCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfWZ1bmN0aW9uIHo4KCl7dmFyIGU9WGIsdD1udWxsLHI9cWUoMCksbj0kYixpPXFlKCEwKSxvPW51bGwsYT1ZaCxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PWJzKCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gdnUoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9ZnVuY3Rpb24gelN0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfWZ1bmN0aW9uIEZTdChlKXtyZXR1cm4gZX1mdW5jdGlvbiBCU3QoKXt2YXIgZT1GU3QsdD16U3Qscj1udWxsLG49cWUoMCksaT1xZShoYyksbz1xZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKGhjLE1hdGgubWF4KC1oYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpvfSxhfXZhciBGOD1LYihZaCk7ZnVuY3Rpb24gSFN0KGUpe3RoaXMuX2N1cnZlPWV9SFN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnZlLnBvaW50KHQqTWF0aC5zaW4oZSksdCotTWF0aC5jb3MoZSkpfX07ZnVuY3Rpb24gS2IoZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gbmV3IEhTdChlKHIpKX1yZXR1cm4gdC5fY3VydmU9ZSx0fWZ1bmN0aW9uIFpiKGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGkkKCl7cmV0dXJuIFpiKHZ1KCkuY3VydmUoRjgpKX1mdW5jdGlvbiBvJCgpe3ZhciBlPXo4KCkuY3VydmUoRjgpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChLYihhKSk6dCgpLl9jdXJ2ZX0sZX1mdW5jdGlvbiBseShlLHQpe3JldHVyblsodD0rdCkqTWF0aC5jb3MoZS09TWF0aC5QSS8yKSx0Kk1hdGguc2luKGUpXX12YXIgTDU9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIERFZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gT0VlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBhJChlKXt2YXIgdD1ERWUscj1PRWUsbj1YYixpPSRiLG89bnVsbDtmdW5jdGlvbiBhKCl7dmFyIHMsbD1MNS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsbCksdT1yLmFwcGx5KHRoaXMsbCk7aWYob3x8KG89cz1icygpKSxlKG8sK24uYXBwbHkodGhpcywobFswXT1jLGwpKSwraS5hcHBseSh0aGlzLGwpLCtuLmFwcGx5KHRoaXMsKGxbMF09dSxsKSksK2kuYXBwbHkodGhpcyxsKSkscylyZXR1cm4gbz1udWxsLHMrIiJ8fG51bGx9cmV0dXJuIGEuc291cmNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS50YXJnZXQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyxhKTpyfSxhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPT1udWxsP251bGw6cyxhKTpvfSxhfWZ1bmN0aW9uIHpFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQ9KHQrbikvMixyLHQsaSxuLGkpfWZ1bmN0aW9uIEZFZShlLHQscixuLGkpe2UubW92ZVRvKHQsciksZS5iZXppZXJDdXJ2ZVRvKHQscj0ocitpKS8yLG4scixuLGkpfWZ1bmN0aW9uIEJFZShlLHQscixuLGkpe3ZhciBvPWx5KHQsciksYT1seSh0LHI9KHIraSkvMikscz1seShuLHIpLGw9bHkobixpKTtlLm1vdmVUbyhvWzBdLG9bMV0pLGUuYmV6aWVyQ3VydmVUbyhhWzBdLGFbMV0sc1swXSxzWzFdLGxbMF0sbFsxXSl9ZnVuY3Rpb24gVlN0KCl7cmV0dXJuIGEkKHpFZSl9ZnVuY3Rpb24gVVN0KCl7cmV0dXJuIGEkKEZFZSl9ZnVuY3Rpb24gcVN0KCl7dmFyIGU9YSQoQkVlKTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlfXZhciBrNT17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3l1KTtlLm1vdmVUbyhyLDApLGUuYXJjKDAsMCxyLDAsaGMpfX07dmFyIEI4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvNSkvMjtlLm1vdmVUbygtMypyLC1yKSxlLmxpbmVUbygtciwtciksZS5saW5lVG8oLXIsLTMqciksZS5saW5lVG8ociwtMypyKSxlLmxpbmVUbyhyLC1yKSxlLmxpbmVUbygzKnIsLXIpLGUubGluZVRvKDMqcixyKSxlLmxpbmVUbyhyLHIpLGUubGluZVRvKHIsMypyKSxlLmxpbmVUbygtciwzKnIpLGUubGluZVRvKC1yLHIpLGUubGluZVRvKC0zKnIsciksZS5jbG9zZVBhdGgoKX19O3ZhciBHU3Q9TWF0aC5zcXJ0KC4zMzMzMzMzMzMzMzMzMzMzKSxIRWU9R1N0KjIsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9IRWUpLG49cipHU3Q7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obiwwKSxlLmxpbmVUbygwLHIpLGUubGluZVRvKC1uLDApLGUuY2xvc2VQYXRoKCl9fTt2YXIgVkVlPS44OTA4MTMwOTE1MjkyODUyLFdTdD1NYXRoLnNpbih5dS8xMCkvTWF0aC5zaW4oNyp5dS8xMCksVUVlPU1hdGguc2luKGhjLzEwKSpXU3QscUVlPS1NYXRoLmNvcyhoYy8xMCkqV1N0LFY4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqVkVlKSxuPVVFZSpyLGk9cUVlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1oYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fTt2YXIgVTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCksbj0tci8yO2UucmVjdChuLG4scixyKX19O3ZhciBzJD1NYXRoLnNxcnQoMykscTg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj0tTWF0aC5zcXJ0KHQvKHMkKjMpKTtlLm1vdmVUbygwLHIqMiksZS5saW5lVG8oLXMkKnIsLXIpLGUubGluZVRvKHMkKnIsLXIpLGUuY2xvc2VQYXRoKCl9fTt2YXIgZmM9LS41LHBjPU1hdGguc3FydCgzKS8yLGwkPTEvTWF0aC5zcXJ0KDEyKSxHRWU9KGwkLzIrMSkqMyxHOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L0dFZSksbj1yLzIsaT1yKmwkLG89bixhPXIqbCQrcixzPS1vLGw9YTtlLm1vdmVUbyhuLGkpLGUubGluZVRvKG8sYSksZS5saW5lVG8ocyxsKSxlLmxpbmVUbyhmYypuLXBjKmkscGMqbitmYyppKSxlLmxpbmVUbyhmYypvLXBjKmEscGMqbytmYyphKSxlLmxpbmVUbyhmYypzLXBjKmwscGMqcytmYypsKSxlLmxpbmVUbyhmYypuK3BjKmksZmMqaS1wYypuKSxlLmxpbmVUbyhmYypvK3BjKmEsZmMqYS1wYypvKSxlLmxpbmVUbyhmYypzK3BjKmwsZmMqbC1wYypzKSxlLmNsb3NlUGF0aCgpfX07dmFyIFlTdD1bazUsQjgsSDgsVTgsVjgscTgsRzhdO2Z1bmN0aW9uIGpTdCgpe3ZhciBlPXFlKGs1KSx0PXFlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9YnMoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnFlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn1mdW5jdGlvbiBkYygpe31mdW5jdGlvbiBKYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gUjUoZSl7dGhpcy5fY29udGV4dD1lfVI1LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6SmIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFc4KGUpe3JldHVybiBuZXcgUjUoZSl9ZnVuY3Rpb24gWFN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1YU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9ZSx0aGlzLl95Mj10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND1lLHRoaXMuX3k0PXQsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNiwodGhpcy5feTArNCp0aGlzLl95MSt0KS82KTticmVhaztkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiAkU3QoZSl7cmV0dXJuIG5ldyBYU3QoZSl9ZnVuY3Rpb24gS1N0KGUpe3RoaXMuX2NvbnRleHQ9ZX1LU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErZSkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gWlN0KGUpe3JldHVybiBuZXcgS1N0KGUpfWZ1bmN0aW9uIEpTdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBSNShlKSx0aGlzLl9iZXRhPXR9SlN0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTt2YXIgUVN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD09PTE/bmV3IFI1KG4pOm5ldyBKU3Qobix0KX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjg1KTtmdW5jdGlvbiBRYihlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKGUuX3gxK2UuX2sqKGUuX3gyLWUuX3gwKSxlLl95MStlLl9rKihlLl95Mi1lLl95MCksZS5feDIrZS5fayooZS5feDEtdCksZS5feTIrZS5fayooZS5feTEtciksZS5feDIsZS5feTIpfWZ1bmN0aW9uIFk4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1ZOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6UWIodGhpcyx0aGlzLl94MSx0aGlzLl95MSk7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPWUsdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgdDN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFk4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIGo4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1qOC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgZTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFg4KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2s9KDEtdCkvNn1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpRYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIHIzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIG5ldyBYOChuLHQpfXJldHVybiByLnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSgwKTtmdW5jdGlvbiBONShlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Ym8pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPmJvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIG4zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW4zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWt9KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGkzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IG4zdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIG8zdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fW8zdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3g1PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PXRoaXMuX3k1PU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KSx0aGlzLnBvaW50KHRoaXMuX3g1LHRoaXMuX3k1KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe2lmKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItZSxuPXRoaXMuX3kyLXQ7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDpONSh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciBhM3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBvM3Qobix0KTpuZXcgajgobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KTtmdW5jdGlvbiBzM3QoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fYWxwaGE9dH1zM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MykmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok41KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIGwzdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IHMzdChuLHQpOm5ldyBYOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGMzdChlKXt0aGlzLl9jb250ZXh0PWV9YzN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX07ZnVuY3Rpb24gdTN0KGUpe3JldHVybiBuZXcgYzN0KGUpfWZ1bmN0aW9uIGgzdChlKXtyZXR1cm4gZTwwPy0xOjF9ZnVuY3Rpb24gZjN0KGUsdCxyKXt2YXIgbj1lLl94MS1lLl94MCxpPXQtZS5feDEsbz0oZS5feTEtZS5feTApLyhufHxpPDAmJi0wKSxhPShyLWUuX3kxKS8oaXx8bjwwJiYtMCkscz0obyppK2EqbikvKG4raSk7cmV0dXJuKGgzdChvKStoM3QoYSkpKk1hdGgubWluKE1hdGguYWJzKG8pLE1hdGguYWJzKGEpLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBwM3QoZSx0KXt2YXIgcj1lLl94MS1lLl94MDtyZXR1cm4gcj8oMyooZS5feTEtZS5feTApL3ItdCkvMjp0fWZ1bmN0aW9uIGMkKGUsdCxyKXt2YXIgbj1lLl94MCxpPWUuX3kwLG89ZS5feDEsYT1lLl95MSxzPShvLW4pLzM7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqdCxvLXMsYS1zKnIsbyxhKX1mdW5jdGlvbiAkOChlKXt0aGlzLl9jb250ZXh0PWV9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5fdDA9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSk7YnJlYWs7Y2FzZSAzOmMkKHRoaXMsdGhpcy5fdDAscDN0KHRoaXMsdGhpcy5fdDApKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TmFOO2lmKGU9K2UsdD0rdCwhKGU9PT10aGlzLl94MSYmdD09PXRoaXMuX3kxKSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxjJCh0aGlzLHAzdCh0aGlzLHI9ZjN0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpjJCh0aGlzLHRoaXMuX3QwLHI9ZjN0KHRoaXMsZSx0KSk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10LHRoaXMuX3QwPXJ9fX07ZnVuY3Rpb24gZDN0KGUpe3RoaXMuX2NvbnRleHQ9bmV3IG0zdChlKX0oZDN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKCQ4LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKGUsdCl7JDgucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyx0LGUpfTtmdW5jdGlvbiBtM3QoZSl7dGhpcy5fY29udGV4dD1lfW0zdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fTtmdW5jdGlvbiBnM3QoZSl7cmV0dXJuIG5ldyAkOChlKX1mdW5jdGlvbiBfM3QoZSl7cmV0dXJuIG5ldyBkM3QoZSl9ZnVuY3Rpb24gdjN0KGUpe3RoaXMuX2NvbnRleHQ9ZX12M3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aDtpZihyKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZVswXSx0WzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlWzBdLHRbMF0pLHI9PT0yKXRoaXMuX2NvbnRleHQubGluZVRvKGVbMV0sdFsxXSk7ZWxzZSBmb3IodmFyIG49eTN0KGUpLGk9eTN0KHQpLG89MCxhPTE7YTxyOysrbywrK2EpdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bb10saVswXVtvXSxuWzFdW29dLGlbMV1bb10sZVthXSx0W2FdKTsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnI9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtmdW5jdGlvbiB5M3QoZSl7dmFyIHQscj1lLmxlbmd0aC0xLG4saT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxvWzBdPTIsYVswXT1lWzBdKzIqZVsxXSx0PTE7dDxyLTE7Kyt0KWlbdF09MSxvW3RdPTQsYVt0XT00KmVbdF0rMiplW3QrMV07Zm9yKGlbci0xXT0yLG9bci0xXT03LGFbci0xXT04KmVbci0xXStlW3JdLHQ9MTt0PHI7Kyt0KW49aVt0XS9vW3QtMV0sb1t0XS09bixhW3RdLT1uKmFbdC0xXTtmb3IoaVtyLTFdPWFbci0xXS9vW3ItMV0sdD1yLTI7dD49MDstLXQpaVt0XT0oYVt0XS1pW3QrMV0pL29bdF07Zm9yKG9bci0xXT0oZVtyXStpW3ItMV0pLzIsdD0wO3Q8ci0xOysrdClvW3RdPTIqZVt0KzFdLWlbdCsxXTtyZXR1cm5baSxvXX1mdW5jdGlvbiB4M3QoZSl7cmV0dXJuIG5ldyB2M3QoZSl9ZnVuY3Rpb24gSzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fUs4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiZ0aGlzLl9wb2ludD09PTImJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp7aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHQpLHRoaXMuX2NvbnRleHQubGluZVRvKGUsdCk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK2UqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsdCl9YnJlYWt9fXRoaXMuX3g9ZSx0aGlzLl95PXR9fTtmdW5jdGlvbiBiM3QoZSl7cmV0dXJuIG5ldyBLOChlLC41KX1mdW5jdGlvbiB3M3QoZSl7cmV0dXJuIG5ldyBLOChlLDApfWZ1bmN0aW9uIFMzdChlKXtyZXR1cm4gbmV3IEs4KGUsMSl9ZnVuY3Rpb24geHUoZSx0KXtpZigoYT1lLmxlbmd0aCk+MSlmb3IodmFyIHI9MSxuLGksbz1lW3RbMF1dLGEscz1vLmxlbmd0aDtyPGE7KytyKWZvcihpPW8sbz1lW3Rbcl1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4oaVtuXVsxXSk/aVtuXVswXTppW25dWzFdfWZ1bmN0aW9uIGJ1KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTstLXQ+PTA7KXJbdF09dDtyZXR1cm4gcn1mdW5jdGlvbiBXRWUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBNM3QoKXt2YXIgZT1xZShbXSksdD1idSxyPXh1LG49V0VlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZShMNS5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9idTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEw1LmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/eHU6byxpKTpyfSxpfWZ1bmN0aW9uIEUzdChlLHQpe2lmKChuPWUubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpPTAsbz1lWzBdLmxlbmd0aCxhO2k8bzsrK2kpe2ZvcihhPXI9MDtyPG47KytyKWErPWVbcl1baV1bMV18fDA7aWYoYSlmb3Iocj0wO3I8bjsrK3IpZVtyXVtpXVsxXS89YX14dShlLHQpfX1mdW5jdGlvbiBUM3QoZSx0KXtpZigobD1lLmxlbmd0aCk+MClmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPjA/KGlbMF09YSxpWzFdPWErPW8pOm88MD8oaVsxXT1zLGlbMF09cys9byk6KGlbMF09MCxpWzFdPW8pfWZ1bmN0aW9uIEMzdChlLHQpe2lmKChpPWUubGVuZ3RoKT4wKXtmb3IodmFyIHI9MCxuPWVbdFswXV0saSxvPW4ubGVuZ3RoO3I8bzsrK3Ipe2Zvcih2YXIgYT0wLHM9MDthPGk7KythKXMrPWVbYV1bcl1bMV18fDA7bltyXVsxXSs9bltyXVswXT0tcy8yfXh1KGUsdCl9fWZ1bmN0aW9uIEEzdChlLHQpe2lmKCEoISgoYT1lLmxlbmd0aCk+MCl8fCEoKG89KGk9ZVt0WzBdXSkubGVuZ3RoKT4wKSkpe2Zvcih2YXIgcj0wLG49MSxpLG8sYTtuPG87KytuKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8YTsrK3Mpe2Zvcih2YXIgdT1lW3Rbc11dLGg9dVtuXVsxXXx8MCxmPXVbbi0xXVsxXXx8MCxwPShoLWYpLzIsZD0wO2Q8czsrK2Qpe3ZhciBnPWVbdFtkXV0sXz1nW25dWzFdfHwwLHk9Z1tuLTFdWzFdfHwwO3ArPV8teX1sKz1oLGMrPXAqaH1pW24tMV1bMV0rPWlbbi0xXVswXT1yLGwmJihyLT1jL2wpfWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIseHUoZSx0KX19ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoWUVlKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiBZRWUoZSl7Zm9yKHZhciB0PS0xLHI9MCxuPWUubGVuZ3RoLGksbz0tMS8wOysrdDxuOykoaT0rZVt0XVsxXSk+byYmKG89aSxyPXQpO3JldHVybiByfWZ1bmN0aW9uIEo4KGUpe3ZhciB0PWUubWFwKHUkKTtyZXR1cm4gYnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiB1JChlKXtmb3IodmFyIHQ9MCxyPS0xLG49ZS5sZW5ndGgsaTsrK3I8bjspKGk9K2Vbcl1bMV0pJiYodCs9aSk7cmV0dXJuIHR9ZnVuY3Rpb24gUDN0KGUpe3JldHVybiBKOChlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gSTN0KGUpe3ZhciB0PWUubGVuZ3RoLHIsbixpPWUubWFwKHUkKSxvPVo4KGUpLGE9MCxzPTAsbD1bXSxjPVtdO2ZvcihyPTA7cjx0OysrciluPW9bcl0sYTxzPyhhKz1pW25dLGwucHVzaChuKSk6KHMrPWlbbl0sYy5wdXNoKG4pKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfWZ1bmN0aW9uIEwzdChlKXtyZXR1cm4gYnUoZSkucmV2ZXJzZSgpfWZ1bmN0aW9uIGgkKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBrM3QoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24gUjN0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIGYkKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gdDIoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mJC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmYkLGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9TjN0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKEQ1KHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLE81KHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYoTzUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289TjN0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLE81KHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxPNSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxENSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxPNSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIE81KGUsdCl7dmFyIHI9dCxuPXQuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46ZS5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBOM3QoZSl7Zm9yKDtlLkw7KWU9ZS5MO3JldHVybiBlfXZhciBwJD1mJDtmdW5jdGlvbiBlMihlLHQscixuKXt2YXIgaT1bbnVsbCxudWxsXSxvPXdvLnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PWUsaS5yaWdodD10LHImJno1KGksZSx0LHIpLG4mJno1KGksdCxlLG4pLFZhW2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFZhW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLGl9ZnVuY3Rpb24gcjIoZSx0LHIpe3ZhciBuPVt0LHJdO3JldHVybiBuLmxlZnQ9ZSxufWZ1bmN0aW9uIHo1KGUsdCxyLG4peyFlWzBdJiYhZVsxXT8oZVswXT1uLGUubGVmdD10LGUucmlnaHQ9cik6ZS5sZWZ0PT09cj9lWzFdPW46ZVswXT1ufWZ1bmN0aW9uIGpFZShlLHQscixuLGkpe3ZhciBvPWVbMF0sYT1lWzFdLHM9b1swXSxsPW9bMV0sYz1hWzBdLHU9YVsxXSxoPTAsZj0xLHA9Yy1zLGQ9dS1sLGc7aWYoZz10LXMsISghcCYmZz4wKSl7aWYoZy89cCxwPDApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1lbHNlIGlmKHA+MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWlmKGc9bi1zLCEoIXAmJmc8MCkpe2lmKGcvPXAscDwwKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9ZWxzZSBpZihwPjApe2lmKGc8aClyZXR1cm47ZzxmJiYoZj1nKX1pZihnPXItbCwhKCFkJiZnPjApKXtpZihnLz1kLGQ8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYoZD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1pLWwsISghZCYmZzwwKSl7aWYoZy89ZCxkPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKGQ+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfXJldHVybiEoaD4wKSYmIShmPDEpfHwoaD4wJiYoZVswXT1bcytoKnAsbCtoKmRdKSxmPDEmJihlWzFdPVtzK2YqcCxsK2YqZF0pKSwhMH19fX19ZnVuY3Rpb24gWEVlKGUsdCxyLG4saSl7dmFyIG89ZVsxXTtpZihvKXJldHVybiEwO3ZhciBhPWVbMF0scz1lLmxlZnQsbD1lLnJpZ2h0LGM9c1swXSx1PXNbMV0saD1sWzBdLGY9bFsxXSxwPShjK2gpLzIsZD0odStmKS8yLGcsXztpZihmPT09dSl7aWYocDx0fHxwPj1uKXJldHVybjtpZihjPmgpe2lmKCFhKWE9W3Ascl07ZWxzZSBpZihhWzFdPj1pKXJldHVybjtvPVtwLGldfWVsc2V7aWYoIWEpYT1bcCxpXTtlbHNlIGlmKGFbMV08cilyZXR1cm47bz1bcCxyXX19ZWxzZSBpZihnPShjLWgpLyhmLXUpLF89ZC1nKnAsZzwtMXx8Zz4xKWlmKGM+aCl7aWYoIWEpYT1bKHItXykvZyxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289WyhpLV8pL2csaV19ZWxzZXtpZighYSlhPVsoaS1fKS9nLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVsoci1fKS9nLHJdfWVsc2UgaWYodTxmKXtpZighYSlhPVt0LGcqdCtfXTtlbHNlIGlmKGFbMF0+PW4pcmV0dXJuO289W24sZypuK19dfWVsc2V7aWYoIWEpYT1bbixnKm4rX107ZWxzZSBpZihhWzBdPHQpcmV0dXJuO289W3QsZyp0K19dfXJldHVybiBlWzBdPWEsZVsxXT1vLCEwfWZ1bmN0aW9uIEQzdChlLHQscixuKXtmb3IodmFyIGk9d28ubGVuZ3RoLG87aS0tOykoIVhFZShvPXdvW2ldLGUsdCxyLG4pfHwhakVlKG8sZSx0LHIsbil8fCEoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5Icnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5IcikpJiZkZWxldGUgd29baV19ZnVuY3Rpb24gTzN0KGUpe3JldHVybiBWYVtlLmluZGV4XT17c2l0ZTplLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gJEVlKGUsdCl7dmFyIHI9ZS5zaXRlLG49dC5sZWZ0LGk9dC5yaWdodDtyZXR1cm4gcj09PWkmJihpPW4sbj1yKSxpP01hdGguYXRhbjIoaVsxXS1uWzFdLGlbMF0tblswXSk6KHI9PT1uPyhuPXRbMV0saT10WzBdKToobj10WzBdLGk9dFsxXSksTWF0aC5hdGFuMihuWzBdLWlbMF0saVsxXS1uWzFdKSl9ZnVuY3Rpb24gZCQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIEtFZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24gejN0KCl7Zm9yKHZhciBlPTAsdD1WYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVZhW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09JEVlKHIsd29bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIEYzdChlLHQscixuKXt2YXIgaT1WYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1WYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KXdvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9S0VlKGEsd29bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1kJChhLHdvW2NbKytsJXVdXSksZj1oWzBdLHA9aFsxXSwoTWF0aC5hYnMoZy1mKT5Icnx8TWF0aC5hYnMoXy1wKT5IcikmJihjLnNwbGljZShsLDAsd28ucHVzaChyMihzLGQsTWF0aC5hYnMoZy1lKTxIciYmbi1fPkhyP1tlLE1hdGguYWJzKGYtZSk8SHI/cDpuXTpNYXRoLmFicyhfLW4pPEhyJiZyLWc+SHI/W01hdGguYWJzKHAtbik8SHI/ZjpyLG5dOk1hdGguYWJzKGctcik8SHImJl8tdD5Icj9bcixNYXRoLmFicyhmLXIpPEhyP3A6dF06TWF0aC5hYnMoXy10KTxIciYmZy1lPkhyP1tNYXRoLmFicyhwLXQpPEhyP2Y6ZSx0XTpudWxsKSktMSksKyt1KTt1JiYoeT0hMSl9aWYoeSl7dmFyIHgsYixTLEM9MS8wO2ZvcihvPTAseT1udWxsO288aTsrK28pKGE9VmFbb10pJiYocz1hLnNpdGUseD1zWzBdLWUsYj1zWzFdLXQsUz14KngrYipiLFM8QyYmKEM9Uyx5PWEpKTtpZih5KXt2YXIgUD1bZSx0XSxrPVtlLG5dLE89W3Isbl0sRD1bcix0XTt5LmhhbGZlZGdlcy5wdXNoKHdvLnB1c2gocjIocz15LnNpdGUsUCxrKSktMSx3by5wdXNoKHIyKHMsayxPKSktMSx3by5wdXNoKHIyKHMsTyxEKSktMSx3by5wdXNoKHIyKHMsRCxQKSktMSl9fWZvcihvPTA7bzxpOysrbykoYT1WYVtvXSkmJihhLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBWYVtvXSl9dmFyIEIzdD1bXSxRODtmdW5jdGlvbiBaRWUoKXt0Mih0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gY3koZSl7dmFyIHQ9ZS5QLHI9ZS5OO2lmKCEoIXR8fCFyKSl7dmFyIG49dC5zaXRlLGk9ZS5zaXRlLG89ci5zaXRlO2lmKG4hPT1vKXt2YXIgYT1pWzBdLHM9aVsxXSxsPW5bMF0tYSxjPW5bMV0tcyx1PW9bMF0tYSxoPW9bMV0tcyxmPTIqKGwqaC1jKnUpO2lmKCEoZj49LUgzdCkpe3ZhciBwPWwqbCtjKmMsZD11KnUraCpoLGc9KGgqcC1jKmQpL2YsXz0obCpkLXUqcCkvZix5PUIzdC5wb3AoKXx8bmV3IFpFZTt5LmFyYz1lLHkuc2l0ZT1pLHkueD1nK2EseS55PSh5LmN5PV8rcykrTWF0aC5zcXJ0KGcqZytfKl8pLGUuY2lyY2xlPXk7Zm9yKHZhciB4PW51bGwsYj1uMi5fO2I7KWlmKHkueTxiLnl8fHkueT09PWIueSYmeS54PD1iLngpaWYoYi5MKWI9Yi5MO2Vsc2V7eD1iLlA7YnJlYWt9ZWxzZSBpZihiLlIpYj1iLlI7ZWxzZXt4PWI7YnJlYWt9bjIuaW5zZXJ0KHgseSkseHx8KFE4PXkpfX19fWZ1bmN0aW9uIHV5KGUpe3ZhciB0PWUuY2lyY2xlO3QmJih0LlB8fChROD10Lk4pLG4yLnJlbW92ZSh0KSxCM3QucHVzaCh0KSx0Mih0KSxlLmNpcmNsZT1udWxsKX12YXIgVTN0PVtdO2Z1bmN0aW9uIEpFZSgpe3QyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBWM3QoZSl7dmFyIHQ9VTN0LnBvcCgpfHxuZXcgSkVlO3JldHVybiB0LnNpdGU9ZSx0fWZ1bmN0aW9uIG0kKGUpe3V5KGUpLGh5LnJlbW92ZShlKSxVM3QucHVzaChlKSx0MihlKX1mdW5jdGlvbiBxM3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bSQoZSk7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKHItbC5jaXJjbGUueCk8SHImJk1hdGguYWJzKG4tbC5jaXJjbGUuY3kpPEhyOylvPWwuUCxzLnVuc2hpZnQobCksbSQobCksbD1vO3MudW5zaGlmdChsKSx1eShsKTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMoci1jLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1jLmNpcmNsZS5jeSk8SHI7KWE9Yy5OLHMucHVzaChjKSxtJChjKSxjPWE7cy5wdXNoKGMpLHV5KGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSx6NShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPWUyKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxjeShsKSxjeShjKX1mdW5jdGlvbiBHM3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1oeS5fO3M7KWlmKG89VzN0KHMsciktdCxvPkhyKXM9cy5MO2Vsc2UgaWYoYT10LVFFZShzLHIpLGE+SHIpe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LUhyPyhuPXMuUCxpPXMpOmE+LUhyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfU8zdChlKTt2YXIgbD1WM3QoZSk7aWYoaHkuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7dXkobiksaT1WM3Qobi5zaXRlKSxoeS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpLGN5KG4pLGN5KGkpO3JldHVybn1pZighaSl7bC5lZGdlPWUyKG4uc2l0ZSxsLnNpdGUpO3JldHVybn11eShuKSx1eShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTt6NShpLmVkZ2UsYyxkLFMpLGwuZWRnZT1lMihjLGUsbnVsbCxTKSxpLmVkZ2U9ZTIoZSxkLG51bGwsUyksY3kobiksY3koaSl9fWZ1bmN0aW9uIFczdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIFFFZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiBXM3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBIcj0xZS02LEgzdD0xZS0xMixoeSxWYSxuMix3bztmdW5jdGlvbiB0NWUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIGU1ZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBGNShlLHQpe3ZhciByPWUuc29ydChlNWUpLnBvcCgpLG4saSxvO2Zvcih3bz1bXSxWYT1uZXcgQXJyYXkoZS5sZW5ndGgpLGh5PW5ldyBwJCxuMj1uZXcgcCQ7OylpZihvPVE4LHImJighb3x8clsxXTxvLnl8fHJbMV09PT1vLnkmJnJbMF08by54KSkoclswXSE9PW58fHJbMV0hPT1pKSYmKEczdChyKSxuPXJbMF0saT1yWzFdKSxyPWUucG9wKCk7ZWxzZSBpZihvKXEzdChvLmFyYyk7ZWxzZSBicmVhaztpZih6M3QoKSx0KXt2YXIgYT0rdFswXVswXSxzPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTtEM3QoYSxzLGwsYyksRjN0KGEscyxsLGMpfXRoaXMuZWRnZXM9d28sdGhpcy5jZWxscz1WYSxoeT1uMj13bz1WYT1udWxsfUY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RjUscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGQkKHQsZVtuXSl9KTtyZXR1cm4gci5kYXRhPXQuc2l0ZS5kYXRhLHJ9KX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24ocixuKXtpZighIShzPShvPXIuaGFsZmVkZ2VzKS5sZW5ndGgpKWZvcih2YXIgaT1yLnNpdGUsbyxhPS0xLHMsbCxjPXRbb1tzLTFdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQ7KythPHM7KWw9dSxjPXRbb1thXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJm48bC5pbmRleCYmbjx1LmluZGV4JiZ0NWUoaSxsLHUpPDAmJmUucHVzaChbaS5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLGV9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybntzb3VyY2U6ZS5sZWZ0LmRhdGEsdGFyZ2V0OmUucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXRoaXMsaSxvPW4uX2ZvdW5kfHwwLGE9bi5jZWxscy5sZW5ndGgsczshKHM9bi5jZWxsc1tvXSk7KWlmKCsrbz49YSlyZXR1cm4gbnVsbDt2YXIgbD1lLXMuc2l0ZVswXSxjPXQtcy5zaXRlWzFdLHU9bCpsK2MqYztkbyBzPW4uY2VsbHNbaT1vXSxvPW51bGwscy5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1uLmVkZ2VzW2hdLHA9Zi5sZWZ0O2lmKCEoKHA9PT1zLnNpdGV8fCFwKSYmIShwPWYucmlnaHQpKSl7dmFyIGQ9ZS1wWzBdLGc9dC1wWzFdLF89ZCpkK2cqZztfPHUmJih1PV8sbz1wLmluZGV4KX19KTt3aGlsZShvIT09bnVsbCk7cmV0dXJuIG4uX2ZvdW5kPWkscj09bnVsbHx8dTw9cipyP3Muc2l0ZTpudWxsfX07ZnVuY3Rpb24gWTN0KCl7dmFyIGU9azN0LHQ9UjN0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgRjUoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9IcikqSHIsTWF0aC5yb3VuZCh0KG8sYSxpKS9IcikqSHJdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmgkKCtpKSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpoJCgraSksbik6dH0sbi5leHRlbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOltbK2lbMF1bMF0sK2lbMF1bMV1dLFsraVsxXVswXSwraVsxXVsxXV1dLG4pOnImJltbclswXVswXSxyWzBdWzFdXSxbclsxXVswXSxyWzFdWzFdXV19LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1swLDBdLFsraVswXSwraVsxXV1dLG4pOnImJltyWzFdWzBdLXJbMF1bMF0sclsxXVsxXS1yWzBdWzFdXX0sbn1rbSgpO2Z1bmN0aW9uIEI1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBnJChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnRyYW5zZm9ybT1yfWZ1bmN0aW9uIGpoKGUsdCxyKXt0aGlzLms9ZSx0aGlzLng9dCx0aGlzLnk9cn1qaC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpoLHNjYWxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MT90aGlzOm5ldyBqaCh0aGlzLmsqZSx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT0wJnQ9PT0wP3RoaXM6bmV3IGpoKHRoaXMuayx0aGlzLngrdGhpcy5rKmUsdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMF0qdGhpcy5rK3RoaXMueCxlWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihlKXtyZXR1cm5bKGVbMF0tdGhpcy54KS90aGlzLmssKGVbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGUpe3JldHVybihlLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFhoPW5ldyBqaCgxLDAsMCk7aTIucHJvdG90eXBlPWpoLnByb3RvdHlwZTtmdW5jdGlvbiBpMihlKXtmb3IoOyFlLl9fem9vbTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIFhoO3JldHVybiBlLl9fem9vbX1mdW5jdGlvbiB0Uigpe3F0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIG8yKCl7cXQucHJldmVudERlZmF1bHQoKSxxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiByNWUoKXtyZXR1cm4hcXQuY3RybEtleSYmIXF0LmJ1dHRvbn1mdW5jdGlvbiBuNWUoKXt2YXIgZT10aGlzO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSxlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV0pOltbMCwwXSxbZS5jbGllbnRXaWR0aCxlLmNsaWVudEhlaWdodF1dfWZ1bmN0aW9uIGozdCgpe3JldHVybiB0aGlzLl9fem9vbXx8WGh9ZnVuY3Rpb24gaTVlKCl7cmV0dXJuLXF0LmRlbHRhWSoocXQuZGVsdGFNb2RlPT09MT8uMDU6cXQuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gbzVlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIGE1ZShlLHQscil7dmFyIG49ZS5pbnZlcnRYKHRbMF1bMF0pLXJbMF1bMF0saT1lLmludmVydFgodFsxXVswXSktclsxXVswXSxvPWUuaW52ZXJ0WSh0WzBdWzFdKS1yWzBdWzFdLGE9ZS5pbnZlcnRZKHRbMV1bMV0pLXJbMV1bMV07cmV0dXJuIGUudHJhbnNsYXRlKGk+bj8obitpKS8yOk1hdGgubWluKDAsbil8fE1hdGgubWF4KDAsaSksYT5vPyhvK2EpLzI6TWF0aC5taW4oMCxvKXx8TWF0aC5tYXgoMCxhKSl9ZnVuY3Rpb24gZVIoKXt2YXIgZT1yNWUsdD1uNWUscj1hNWUsbj1pNWUsaT1vNWUsbz1bMCwxLzBdLGE9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0scz0yNTAsbD12TCxjPXZzKCJzdGFydCIsInpvb20iLCJlbmQiKSx1LGgsZj01MDAscD0xNTAsZD0wO2Z1bmN0aW9uIGcoTCl7TC5wcm9wZXJ0eSgiX196b29tIixqM3QpLm9uKCJ3aGVlbC56b29tIixQKS5vbigibW91c2Vkb3duLnpvb20iLGspLm9uKCJkYmxjbGljay56b29tIixPKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuem9vbSIsRCkub24oInRvdWNobW92ZS56b29tIixCKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixJKS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9Zy50cmFuc2Zvcm09ZnVuY3Rpb24oTCxSLEYpe3ZhciB6PUwuc2VsZWN0aW9uP0wuc2VsZWN0aW9uKCk6TDt6LnByb3BlcnR5KCJfX3pvb20iLGozdCksTCE9PXo/YihMLFIsRik6ei5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKS56b29tKG51bGwsdHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6UikuZW5kKCl9KX0sZy5zY2FsZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnNjYWxlVG8oTCxmdW5jdGlvbigpe3ZhciB6PXRoaXMuX196b29tLmssVT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiB6KlV9LEYpfSxnLnNjYWxlVG89ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgej10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxVPXRoaXMuX196b29tLFc9Rj09bnVsbD94KHopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYsWj1VLmludmVydChXKSxydD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSO3JldHVybiByKHkoXyhVLHJ0KSxXLFopLHosYSl9LEYpfSxnLnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKEwsUixGKXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7cmV0dXJuIHIodGhpcy5fX3pvb20udHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlIsdHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSl9KX0sZy50cmFuc2xhdGVUbz1mdW5jdGlvbihMLFIsRix6KXtnLnRyYW5zZm9ybShMLGZ1bmN0aW9uKCl7dmFyIFU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVz10aGlzLl9fem9vbSxaPXo9PW51bGw/eChVKTp0eXBlb2Ygej09ImZ1bmN0aW9uIj96LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp6O3JldHVybiByKFhoLnRyYW5zbGF0ZShaWzBdLFpbMV0pLnNjYWxlKFcuaykudHJhbnNsYXRlKHR5cGVvZiBSPT0iZnVuY3Rpb24iPy1SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotUix0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYpLFUsYSl9LHopfTtmdW5jdGlvbiBfKEwsUil7cmV0dXJuIFI9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIpKSxSPT09TC5rP0w6bmV3IGpoKFIsTC54LEwueSl9ZnVuY3Rpb24geShMLFIsRil7dmFyIHo9UlswXS1GWzBdKkwuayxVPVJbMV0tRlsxXSpMLms7cmV0dXJuIHo9PT1MLngmJlU9PT1MLnk/TDpuZXcgamgoTC5rLHosVSl9ZnVuY3Rpb24geChMKXtyZXR1cm5bKCtMWzBdWzBdKyArTFsxXVswXSkvMiwoK0xbMF1bMV0rICtMWzFdWzFdKS8yXX1mdW5jdGlvbiBiKEwsUixGKXtMLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe1ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgej10aGlzLFU9YXJndW1lbnRzLFc9Uyh6LFUpLFo9dC5hcHBseSh6LFUpLHJ0PUY9PW51bGw/eChaKTp0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHosVSk6RixvdD1NYXRoLm1heChaWzFdWzBdLVpbMF1bMF0sWlsxXVsxXS1aWzBdWzFdKSxzdD16Ll9fem9vbSxTdD10eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHosVSk6UixidD1sKHN0LmludmVydChydCkuY29uY2F0KG90L3N0LmspLFN0LmludmVydChydCkuY29uY2F0KG90L1N0LmspKTtyZXR1cm4gZnVuY3Rpb24oTXQpe2lmKE10PT09MSlNdD1TdDtlbHNle3ZhciBsdD1idChNdCksS3Q9b3QvbHRbMl07TXQ9bmV3IGpoKEt0LHJ0WzBdLWx0WzBdKkt0LHJ0WzFdLWx0WzFdKkt0KX1XLnpvb20obnVsbCxNdCl9fSl9ZnVuY3Rpb24gUyhMLFIsRil7cmV0dXJuIUYmJkwuX196b29taW5nfHxuZXcgQyhMLFIpfWZ1bmN0aW9uIEMoTCxSKXt0aGlzLnRoYXQ9TCx0aGlzLmFyZ3M9Uix0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXQuYXBwbHkoTCxSKSx0aGlzLnRhcHM9MH1DLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oTCxSKXtyZXR1cm4gdGhpcy5tb3VzZSYmTCE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPVIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmTCE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1SLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1SLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihMKXtNcChuZXcgZyQoZyxMLHRoaXMudGhhdC5fX3pvb20pLGMuYXBwbHksYyxbTCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBQKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXRoaXMuX196b29tLEY9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLFIuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHo9em8odGhpcyk7aWYoTC53aGVlbCkoTC5tb3VzZVswXVswXSE9PXpbMF18fEwubW91c2VbMF1bMV0hPT16WzFdKSYmKEwubW91c2VbMV09Ui5pbnZlcnQoTC5tb3VzZVswXT16KSksY2xlYXJUaW1lb3V0KEwud2hlZWwpO2Vsc2V7aWYoUi5rPT09RilyZXR1cm47TC5tb3VzZT1beixSLmludmVydCh6KV0saHUodGhpcyksTC5zdGFydCgpfW8yKCksTC53aGVlbD1zZXRUaW1lb3V0KFUscCksTC56b29tKCJtb3VzZSIscih5KF8oUixGKSxMLm1vdXNlWzBdLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKTtmdW5jdGlvbiBVKCl7TC53aGVlbD1udWxsLEwuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihofHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMsITApLFI9SHQocXQudmlldykub24oIm1vdXNlbW92ZS56b29tIixXLCEwKS5vbigibW91c2V1cC56b29tIixaLCEwKSxGPXpvKHRoaXMpLHo9cXQuY2xpZW50WCxVPXF0LmNsaWVudFk7em0ocXQudmlldyksdFIoKSxMLm1vdXNlPVtGLHRoaXMuX196b29tLmludmVydChGKV0saHUodGhpcyksTC5zdGFydCgpO2Z1bmN0aW9uIFcoKXtpZihvMigpLCFMLm1vdmVkKXt2YXIgcnQ9cXQuY2xpZW50WC16LG90PXF0LmNsaWVudFktVTtMLm1vdmVkPXJ0KnJ0K290Km90PmR9TC56b29tKCJtb3VzZSIscih5KEwudGhhdC5fX3pvb20sTC5tb3VzZVswXT16byhMLnRoYXQpLEwubW91c2VbMV0pLEwuZXh0ZW50LGEpKX1mdW5jdGlvbiBaKCl7Ui5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxGbShxdC52aWV3LEwubW92ZWQpLG8yKCksTC5lbmQoKX19ZnVuY3Rpb24gTygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXRoaXMuX196b29tLFI9em8odGhpcyksRj1MLmludmVydChSKSx6PUwuayoocXQuc2hpZnRLZXk/LjU6MiksVT1yKHkoXyhMLHopLFIsRiksdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYSk7bzIoKSxzPjA/SHQodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHMpLmNhbGwoYixVLFIpOkh0KHRoaXMpLmNhbGwoZy50cmFuc2Zvcm0sVSl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgTD1xdC50b3VjaGVzLFI9TC5sZW5ndGgsRj1TKHRoaXMsYXJndW1lbnRzLHF0LmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PVIpLHosVSxXLFo7Zm9yKHRSKCksVT0wO1U8UjsrK1UpVz1MW1VdLFo9VHAodGhpcyxMLFcuaWRlbnRpZmllciksWj1bWix0aGlzLl9fem9vbS5pbnZlcnQoWiksVy5pZGVudGlmaWVyXSxGLnRvdWNoMD8hRi50b3VjaDEmJkYudG91Y2gwWzJdIT09WlsyXSYmKEYudG91Y2gxPVosRi50YXBzPTApOihGLnRvdWNoMD1aLHo9ITAsRi50YXBzPTErISF1KTt1JiYodT1jbGVhclRpbWVvdXQodSkpLHomJihGLnRhcHM8MiYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sZikpLGh1KHRoaXMpLEYuc3RhcnQoKSl9fWZ1bmN0aW9uIEIoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVLFcsWjtmb3IobzIoKSx1JiYodT1jbGVhclRpbWVvdXQodSkpLEwudGFwcz0wLHo9MDt6PEY7Kyt6KVU9Ult6XSxXPVRwKHRoaXMsUixVLmlkZW50aWZpZXIpLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9MLnRvdWNoMFswXT1XOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmKEwudG91Y2gxWzBdPVcpO2lmKFU9TC50aGF0Ll9fem9vbSxMLnRvdWNoMSl7dmFyIHJ0PUwudG91Y2gwWzBdLG90PUwudG91Y2gwWzFdLHN0PUwudG91Y2gxWzBdLFN0PUwudG91Y2gxWzFdLGJ0PShidD1zdFswXS1ydFswXSkqYnQrKGJ0PXN0WzFdLXJ0WzFdKSpidCxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQ7VT1fKFUsTWF0aC5zcXJ0KGJ0L010KSksVz1bKHJ0WzBdK3N0WzBdKS8yLChydFsxXStzdFsxXSkvMl0sWj1bKG90WzBdK1N0WzBdKS8yLChvdFsxXStTdFsxXSkvMl19ZWxzZSBpZihMLnRvdWNoMClXPUwudG91Y2gwWzBdLFo9TC50b3VjaDBbMV07ZWxzZSByZXR1cm47TC56b29tKCJ0b3VjaCIscih5KFUsVyxaKSxMLmV4dGVudCxhKSl9fWZ1bmN0aW9uIEkoKXtpZighIXRoaXMuX196b29taW5nKXt2YXIgTD1TKHRoaXMsYXJndW1lbnRzKSxSPXF0LmNoYW5nZWRUb3VjaGVzLEY9Ui5sZW5ndGgseixVO2Zvcih0UigpLGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LGYpLHo9MDt6PEY7Kyt6KVU9Ult6XSxMLnRvdWNoMCYmTC50b3VjaDBbMl09PT1VLmlkZW50aWZpZXI/ZGVsZXRlIEwudG91Y2gwOkwudG91Y2gxJiZMLnRvdWNoMVsyXT09PVUuaWRlbnRpZmllciYmZGVsZXRlIEwudG91Y2gxO2lmKEwudG91Y2gxJiYhTC50b3VjaDAmJihMLnRvdWNoMD1MLnRvdWNoMSxkZWxldGUgTC50b3VjaDEpLEwudG91Y2gwKUwudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChMLnRvdWNoMFswXSk7ZWxzZSBpZihMLmVuZCgpLEwudGFwcz09PTIpe3ZhciBXPUh0KHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7VyYmVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1yZXR1cm4gZy53aGVlbERlbHRhPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoK0wpLGcpOm59LGcuZmlsdGVyPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6QjUoISFMKSxnKTplfSxnLnRvdWNoYWJsZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkI1KCEhTCksZyk6aX0sZy5leHRlbnQ9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpCNShbWytMWzBdWzBdLCtMWzBdWzFdXSxbK0xbMV1bMF0sK0xbMV1bMV1dXSksZyk6dH0sZy5zY2FsZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rTFswXSxvWzFdPStMWzFdLGcpOltvWzBdLG9bMV1dfSxnLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rTFswXVswXSxhWzFdWzBdPStMWzFdWzBdLGFbMF1bMV09K0xbMF1bMV0sYVsxXVsxXT0rTFsxXVsxXSxnKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxnLmNvbnN0cmFpbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1MLGcpOnJ9LGcuZHVyYXRpb249ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K0wsZyk6c30sZy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1MLGcpOmx9LGcub249ZnVuY3Rpb24oKXt2YXIgTD1jLm9uLmFwcGx5KGMsYXJndW1lbnRzKTtyZXR1cm4gTD09PWM/ZzpMfSxnLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9KEw9K0wpKkwsZyk6TWF0aC5zcXJ0KGQpfSxnfXZhciBYM3Q9RWUoT2UoKSwxKTt2YXIgclI9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwZXJpbWVudHM9W119bG9hZCgpe2xldCB0PV9lKCkuZXhwZXJpbWVudHMoKTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e1gzdC5pc0VxdWFsKHRoaXMuX2V4cGVyaW1lbnRzLHIpfHwodGhpcy5fZXhwZXJpbWVudHM9cix0aGlzLmVtaXRDaGFuZ2UoKSl9KX1nZXRFeHBlcmltZW50cygpe3JldHVybiB0aGlzLl9leHBlcmltZW50cy5zbGljZSgpfX0sblI9bmV3IHJSO3ZhciBzNWU9e2dvb2dsZVN0YW5kYXJkOlsiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIiwiIzBmOWQ1OCIsIiMwMDc5NmIiLCIjMDBhY2MxIiwiIzQyODVmNCIsIiM1YzZiYzAiLCIjYWI0N2JjIl0sZ29vZ2xlQ29vbDpbIiM5ZTlkMjQiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiM2MDdkOGIiXSxnb29nbGVXYXJtOlsiIzc5NTU0OCIsIiNhYjQ3YmMiLCIjZjA2MjkyIiwiI2MyMTg1YiIsIiNkYjQ0MzciLCIjZmY3MDQzIiwiI2Y0YjQwMCJdLGdvb2dsZUNvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwQUNDMSIsIiNBQjQ3QkMiLCIjMkE1NkM2IiwiIzBiODA0MyIsIiNGN0NCNEQiLCIjYzBjYTMzIiwiIzVlMzViMSIsIiNBNTI3MTQiXSx0ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q6WyIjZmY3MDQzIiwiIzAwNzdiYiIsIiNjYzMzMTEiLCIjMzNiYmVlIiwiI2VlMzM3NyIsIiMwMDk5ODgiLCIjYmJiYmJiIl0sY29sb3JCbGluZEFzc2lzdDE6WyIjNDQ3N2FhIiwiIzQ0YWFhYSIsIiNhYWFhNDQiLCIjYWE3NzQ0IiwiI2FhNDQ1NSIsIiNhYTQ0ODgiXSxjb2xvckJsaW5kQXNzaXN0MjpbIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiM4ODIyNTUiLCIjYWE0NDk5Il0sY29sb3JCbGluZEFzc2lzdDM6WyIjMzMyMjg4IiwiIzY2OTljYyIsIiM4OGNjZWUiLCIjNDRhYTk5IiwiIzExNzczMyIsIiM5OTk5MzMiLCIjZGRjYzc3IiwiI2NjNjY3NyIsIiNhYTQ0NjYiLCIjODgyMjU1IiwiIzY2MTEwMCIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0NDpbIiM0NDc3YWEiLCIjNjZjY2VlIiwiIzIyODgzMyIsIiNjY2JiNDQiLCIjZWU2Njc3IiwiI2FhMzM3NyIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0NTpbIiNGRjZEQjYiLCIjOTIwMDAwIiwiIzkyNDkwMCIsIiNEQkQxMDAiLCIjMjRGRjI0IiwiIzAwNkREQiIsIiM0OTAwOTIiXSxtbGRhc2g6WyIjRTQ3RUFEIiwiI0Y0NjQwRCIsIiNGQUEzMDAiLCIjRjVFNjM2IiwiIzAwQTA3NyIsIiMwMDc3QjgiLCIjMDBCN0VEIl19LGlSPXM1ZS50ZW5zb3Jib2FyZENvbG9yQmxpbmRBc3Npc3Q7dmFyIF8kPWNsYXNze2NvbnN0cnVjdG9yKHQ9aVIpe3RoaXMucGFsZXR0ZT10LHRoaXMuaWRlbnRpZmllcnM9SmkoKX1zZXREb21haW4odCl7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnM9SmkoKSx0LmZvckVhY2goKHIsbik9Pnt0aGlzLmlkZW50aWZpZXJzLnNldChyLHRoaXMucGFsZXR0ZVtuJXRoaXMucGFsZXR0ZS5sZW5ndGhdKX0pLHRoaXN9Z2V0Q29sb3IodCl7aWYoIXRoaXMuaWRlbnRpZmllcnMuaGFzKHQpKXRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7dH0gd2FzIG5vdCBpbiB0aGUgZG9tYWluLmApO3JldHVybiB0aGlzLmlkZW50aWZpZXJzLmdldCh0KX19O2Z1bmN0aW9uICQzdChlLHQpe2xldCByPW5ldyBfJDtmdW5jdGlvbiBuKCl7ci5zZXREb21haW4odCgpKX1yZXR1cm4gZS5hZGRMaXN0ZW5lcihuKSxuKCksaT0+ci5nZXRDb2xvcihpKX12YXIgZm49JDN0KHdwLCgpPT53cC5nZXRSdW5zKCkpLHVRcj0kM3QoblIsKCk9Pm5SLmdldEV4cGVyaW1lbnRzKCkubWFwKCh7bmFtZTplfSk9PmUpKTt2YXIgb2c9RWUoT2UoKSwxKTtfcyh7bW9kdWxlTmFtZToicnVuLWNvbG9yLXN0eWxlIixzdHlsZUNvbnRlbnQ6YAogICAgW2NvbG9yLWNsYXNzPSdsaWdodC1ibHVlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWxpZ2h0LWJsdWUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ncmVkJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1yZWQtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdncmVlbiddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JlZW4tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwdXJwbGUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXB1cnBsZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3RlYWwnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItdGVhbC05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdwaW5rJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXBpbmstNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXBpbmstOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0nb3JhbmdlJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdicm93biddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItYnJvd24tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdpbmRpZ28nXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWluZGlnby01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTkwMCk7CiAgICB9CiAgYH0pO3ZhciBvbD1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5uYW1lcz1bXSx0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjooKT0+IiJ9LHRoaXMucmVnZXg9IiIsdGhpcy5zZWxlY3Rpb25TdGF0ZT17fSx0aGlzLm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQ9NDAsdGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2U9dGhpcy5fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl9X2RlYm91bmNlZFJlZ2V4Q2hhbmdlSW1wbCgpe3ZhciB0PW9nLmRlYm91bmNlKHI9Pnt0aGlzLnJlZ2V4PXJ9LDE1MCx7bGVhZGluZzohMX0pO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMuJCQoIiNuYW1lcy1yZWdleCIpLnZhbHVlO3I9PSIiP3RoaXMuYXN5bmMoKCk9Pnt0aGlzLnJlZ2V4PXJ9LDMwKTp0KHIpfX1nZXQgX3JlZ2V4KCl7dmFyIHQ9dGhpcy5yZWdleDt0cnl7cmV0dXJuIG5ldyBSZWdFeHAodCl9Y2F0Y2gocil7cmV0dXJuIG51bGx9fV9zZXRJc29sYXRvckljb24oKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGlvblN0YXRlLHI9b2cuZmlsdGVyKG9nLnZhbHVlcyh0KSkubGVuZ3RoLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCIuaXNvbGF0b3IiKSk7bi5mb3JFYWNoKGZ1bmN0aW9uKG8pe3I9PT0xJiZ0W28ubmFtZV0/by5pY29uPSJyYWRpby1idXR0b24tY2hlY2tlZCI6by5pY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIn0pfWNvbXB1dGVOYW1lc01hdGNoaW5nUmVnZXgodCxyKXtsZXQgbj10aGlzLl9yZWdleDtyZXR1cm4gbj90aGlzLm5hbWVzLmZpbHRlcihpPT5uLnRlc3QoaSkpOnRoaXMubmFtZXN9Y29tcHV0ZU91dFNlbGVjdGVkKHQscil7dmFyIG49dGhpcy5zZWxlY3Rpb25TdGF0ZSxpPXRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdCxvPXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4Lmxlbmd0aDw9aTtyZXR1cm4gdGhpcy5uYW1lc01hdGNoaW5nUmVnZXguZmlsdGVyKGE9Pm5bYV09PW51bGw/bzpuW2FdKX1zeW5jaHJvbml6ZUNvbG9ycyh0KXt2YXIgaSxvLGEsczt0aGlzLl9zZXRJc29sYXRvckljb24oKSwoKG89KGk9dGhpcy5yb290KT09bnVsbD92b2lkIDA6aS5xdWVyeVNlbGVjdG9yQWxsKCJwYXBlci1jaGVja2JveCIpKSE9bnVsbD9vOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yIjpjLCItLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IiOmN9KX0pLCgocz0oYT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKSE9bnVsbD9zOltdKS5mb3JFYWNoKGw9PntsZXQgYz10aGlzLmNvbG9yaW5nLmdldENvbG9yKGwubmFtZSk7bC5zdHlsZS5jb2xvcj1jfSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMudXBkYXRlU3R5bGVzKCl9KX1faXNvbGF0ZU5hbWUodCl7dmFyIHI9dC50YXJnZXQubmFtZSxuPXt9O3RoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbihpKXtuW2ldPWk9PXJ9KSx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2NoZWNrYm94Q2hhbmdlKHQpe3ZhciByPXQudGFyZ2V0O2xldCBuPW9nLmNsb25lKHRoaXMuc2VsZWN0aW9uU3RhdGUpO25bci5uYW1lXT1yLmNoZWNrZWQsdGhpcy5zZWxlY3Rpb25TdGF0ZT1ufV9pc0NoZWNrZWQodCxyKXtyZXR1cm4gdGhpcy5vdXRTZWxlY3RlZC5pbmRleE9mKHQpIT0tMX10b2dnbGVBbGwoKXtsZXQgdD10aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5zb21lKG49PnRoaXMub3V0U2VsZWN0ZWQuaW5jbHVkZXMobikpLHI9e307dGhpcy5uYW1lcy5mb3JFYWNoKG49PntyW25dPSF0fSksdGhpcy5zZWxlY3Rpb25TdGF0ZT1yfX07b2wudGVtcGxhdGU9UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0icnVuLWNvbG9yLXN0eWxlIj48L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dAogICAgICBpZD0ibmFtZXMtcmVnZXgiCiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJXcml0ZSBhIHJlZ2V4IHRvIGZpbHRlciBydW5zIgogICAgICB2YWx1ZT0iW1tyZWdleF1dIgogICAgICBvbi1iaW5kLXZhbHVlLWNoYW5nZWQ9Il9kZWJvdW5jZWRSZWdleENoYW5nZSIKICAgID48L3BhcGVyLWlucHV0PgogICAgPGRpdiBpZD0ib3V0ZXItY29udGFpbmVyIiBjbGFzcz0ic2Nyb2xsYmFyIj4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbbmFtZXNNYXRjaGluZ1JlZ2V4XV0iCiAgICAgICAgb24tZG9tLWNoYW5nZT0ic3luY2hyb25pemVDb2xvcnMiCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBjaGVja2JveC1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIGlkJD0iY2hlY2tib3gtW1tpdGVtXV0iCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbX2lzQ2hlY2tlZChpdGVtLCBzZWxlY3Rpb25TdGF0ZS4qKV1dIgogICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2NoZWNrYm94Q2hhbmdlIgogICAgICAgICAgICA+PC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iaWNvbi1jb250YWluZXIgaXNvbGF0b3ItY29udGFpbmVyIHZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgaWNvbj0icmFkaW8tYnV0dG9uLXVuY2hlY2tlZCIKICAgICAgICAgICAgICBjbGFzcz0iaXNvbGF0b3IgdmVydGljYWwtYWxpZ24tY2VudGVyIgogICAgICAgICAgICAgIG9uLXRhcD0iX2lzb2xhdGVOYW1lIgogICAgICAgICAgICAgIG5hbWU9IltbaXRlbV1dIgogICAgICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS1sYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICA8c3Bhbj5bW2l0ZW1dXTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAjb3V0ZXItY29udGFpbmVyIHsKICAgICAgICBjb250YWluOiBjb250ZW50OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAubmFtZS1yb3cgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOyAvKiBtYWtlcyB3cmFwcGluZyBvZiBoeXBlcnBhcmFtIHN0cmluZ3MgYmV0dGVyICovCiAgICAgIH0KICAgICAgLmljb24tY29udGFpbmVyIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLmNoZWNrYm94IHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yIHsKICAgICAgICB3aWR0aDogMThweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgcGFkZGluZzogMHB4OwogICAgICB9CiAgICAgIC5pc29sYXRvci1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDNweDsKICAgICAgfQogICAgICAuY2hlY2tib3gtY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuaXRlbS1sYWJlbC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogNXB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICB3aWR0aDogMHB4OyAvKiBoYWNrIHRvIGdldCB0aGUgZmxleC1ncm93IHRvIHdvcmsgcHJvcGVybHkgKi8KICAgICAgfQogICAgICAudG9vbHRpcC12YWx1ZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC52ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tY2VudGVyIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciAudmVydGljYWwtYWxpZ24tdG9wIHsKICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxvbC5wcm90b3R5cGUsIm5hbWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG9sLnByb3RvdHlwZSwicmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxjb21wdXRlZDoiY29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleChuYW1lcy4qLCBfcmVnZXgpIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXNNYXRjaGluZ1JlZ2V4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxvbC5wcm90b3R5cGUsInNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwLGNvbXB1dGVkOiJjb21wdXRlT3V0U2VsZWN0ZWQobmFtZXNNYXRjaGluZ1JlZ2V4LiosIHNlbGVjdGlvblN0YXRlLiopIn0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwib3V0U2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sb2wucHJvdG90eXBlLCJtYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwiX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIix2b2lkIDApO0UoW1J0KCJyZWdleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG9sLnByb3RvdHlwZSwiX3JlZ2V4IixudWxsKTtFKFtCdCgic2VsZWN0aW9uU3RhdGUiLCJuYW1lcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sb2wucHJvdG90eXBlLCJfc2V0SXNvbGF0b3JJY29uIixudWxsKTtvbD1FKFt5dCgidGYtbXVsdGktY2hlY2tib3giKV0sb2wpO3ZhciBhMj1jbGFzcyBleHRlbmRzIG10e2dldCBfcGFydHMoKXt2YXIgdD10aGlzLnZhbHVlLHI9dGhpcy5kZWxpbWl0ZXJQYXR0ZXJuO2xldCBuPVtdO2Zvcig7Oyl7bGV0IGk9bmV3IFJlZ0V4cChyLCJnIik7aWYoaS50ZXN0KHQpLGkubGFzdEluZGV4PT09MCl7bi5wdXNoKHQpO2JyZWFrfWVsc2Ugbi5wdXNoKHQuc2xpY2UoMCxpLmxhc3RJbmRleCkpLHQ9dC5zbGljZShpLmxhc3RJbmRleCl9cmV0dXJuIG59fTthMi50ZW1wbGF0ZT1RYAogICAgPCEtLQogICAgICBUaGlzIHVnbHkgZm9ybWF0dGluZyBpcyByZXF1aXJlZCB0byBwcmV2ZW50IHNwYWNlcyBmcm9tIHNsaXBwaW5nCiAgICAgIGludG8gdGhlIEhUTUwuCiAgICAtLT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3BhcnRzXV0iIGFzPSJwYXJ0IgogICAgICA+W1twYXJ0XV08d2JyCiAgICAvPjwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhMi5wcm90b3R5cGUsInZhbHVlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwiZGVsaW1pdGVyUGF0dGVybiIsdm9pZCAwKTtFKFtSdCgidmFsdWUiLCJkZWxpbWl0ZXJQYXR0ZXJuIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhMi5wcm90b3R5cGUsIl9wYXJ0cyIsbnVsbCk7YTI9RShbeXQoInRmLXdici1zdHJpbmciKV0sYTIpO3ZhciBtYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ydW5TZWxlY3Rpb25TdGF0ZT1PVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KS5jYWxsKHRoaXMpLHRoaXMucmVnZXhJbnB1dD15XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pLmNhbGwodGhpcyksdGhpcy5fZGF0YUxvY2F0aW9uQ2xpcExlbmd0aD0yNTAsdGhpcy5fZGF0YUxvY2F0aW9uRGVsaW1pdGVyUGF0dGVybj0iWy89XywtXSIsdGhpcy5jb2xvcmluZz17Z2V0Q29sb3I6Zm59LHRoaXMuX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGU9elcoInJ1blNlbGVjdGlvblN0YXRlIix7ZGVmYXVsdFZhbHVlOnt9fSksdGhpcy5fcmVnZXhPYnNlcnZlcj12XygicmVnZXhJbnB1dCIse2RlZmF1bHRWYWx1ZToiIn0pfWF0dGFjaGVkKCl7dGhpcy5fcnVuU3RvcmVMaXN0ZW5lcj13cC5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJydW5zIix3cC5nZXRSdW5zKCkpfSksdGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSksdGhpcy5fZW52U3RvcmVMaXN0ZW5lcj1pYi5hZGRMaXN0ZW5lcigoKT0+e3RoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX0pLHRoaXMuc2V0KCJkYXRhTG9jYXRpb24iLGliLmdldERhdGFMb2NhdGlvbigpKX1kZXRhY2hlZCgpe3dwLnJlbW92ZUxpc3RlbmVyQnlLZXkodGhpcy5fcnVuU3RvcmVMaXN0ZW5lciksaWIucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9lbnZTdG9yZUxpc3RlbmVyKX1fdG9nZ2xlQWxsKCl7dGhpcy4kLm11bHRpQ2hlY2tib3gudG9nZ2xlQWxsKCl9Z2V0IF9jbGlwcGVkRGF0YUxvY2F0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhTG9jYXRpb24scj10aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoO2lmKHQhPT12b2lkIDApcmV0dXJuIHQubGVuZ3RoPnI/dC5zdWJzdHJpbmcoMCxyKTp0fV9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLiQkKCIjZGF0YS1sb2NhdGlvbi1kaWFsb2ciKS5vcGVuKCl9X3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24odCxyKXtyZXR1cm4gdCYmdC5sZW5ndGg+cn19O21jLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItZGlhbG9nIHdpdGgtYmFja2Ryb3A9IiIgaWQ9ImRhdGEtbG9jYXRpb24tZGlhbG9nIj4KICAgICAgPGgyPkRhdGEgTG9jYXRpb248L2gyPgogICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgIHZhbHVlPSJbW2RhdGFMb2NhdGlvbl1dIgogICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgID4KICAgICAgPC90Zi13YnItc3RyaW5nCiAgICA+PC9wYXBlci1kaWFsb2c+CiAgICA8ZGl2IGlkPSJ0b3AtdGV4dCI+CiAgICAgIDxoMyBpZD0idG9vbHRpcC1oZWxwIiBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPlJ1bnM8L2gzPgogICAgPC9kaXY+CiAgICA8dGYtbXVsdGktY2hlY2tib3gKICAgICAgaWQ9Im11bHRpQ2hlY2tib3giCiAgICAgIG5hbWVzPSJbW3J1bnNdXSIKICAgICAgc2VsZWN0aW9uLXN0YXRlPSJ7e3J1blNlbGVjdGlvblN0YXRlfX0iCiAgICAgIG91dC1zZWxlY3RlZD0ie3tzZWxlY3RlZFJ1bnN9fSIKICAgICAgcmVnZXg9Int7cmVnZXhJbnB1dH19IgogICAgICBjb2xvcmluZz0iW1tjb2xvcmluZ11dIgogICAgPjwvdGYtbXVsdGktY2hlY2tib3g+CiAgICA8cGFwZXItYnV0dG9uIGNsYXNzPSJ4LWJ1dHRvbiIgaWQ9InRvZ2dsZS1hbGwiIG9uLXRhcD0iX3RvZ2dsZUFsbCI+CiAgICAgIFRvZ2dsZSBBbGwgUnVucwogICAgPC9wYXBlci1idXR0b24+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGF0YUxvY2F0aW9uXV0iPgogICAgICA8ZGl2IGlkPSJkYXRhLWxvY2F0aW9uIj4KICAgICAgICA8dGYtd2JyLXN0cmluZwogICAgICAgICAgdmFsdWU9IltbX2NsaXBwZWREYXRhTG9jYXRpb25dXSIKICAgICAgICAgIGRlbGltaXRlci1wYXR0ZXJuPSJbW19kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuXV0iCiAgICAgICAgPjwvdGYtd2JyLXN0cmluZwogICAgICAgID48IS0tCiAgICAgICAgICBXZSB1c2UgSFRNTCBjb21tZW50cyB0byByZW1vdmUgc3BhY2VzIGJlZm9yZSB0aGUgZWxsaXBzaXMuCiAgICAgICAgLS0+PHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgaWY9IltbX3Nob3VsZFNob3dFeHBhbmREYXRhTG9jYXRpb25CdXR0b24oZGF0YUxvY2F0aW9uLCBfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCldXSIKICAgICAgICAgID48IS0tCiAgICAgICAgICAtLT48YSBocmVmPSIiIG9uLWNsaWNrPSJfb3BlbkRhdGFMb2NhdGlvbkRpYWxvZyI+4oCmPC9hPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogICAgICB9CiAgICAgICN0b3AtdGV4dCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CiAgICAgIHRmLXdici1zdHJpbmcgewogICAgICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgdGYtbXVsdGktY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgICN0b29sdGlwLWhlbHAgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQogICAgICBwYXBlci1idXR0b24gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CiAgICAgICNkYXRhLWxvY2F0aW9uIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW46IDVweCAwIDAgMDsKICAgICAgICBtYXgtd2lkdGg6IDI4OHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdG9yZVJ1blNlbGVjdGlvblN0YXRlIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxtYy5wcm90b3R5cGUsInJ1blNlbGVjdGlvblN0YXRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfcmVnZXhPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJyZWdleElucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJzZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG1jLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbWMucHJvdG90eXBlLCJkYXRhTG9jYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sbWMucHJvdG90eXBlLCJfZGF0YUxvY2F0aW9uQ2xpcExlbmd0aCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwiY29sb3JpbmciLHZvaWQgMCk7RShbUnQoImRhdGFMb2NhdGlvbiIsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbWMucHJvdG90eXBlLCJfY2xpcHBlZERhdGFMb2NhdGlvbiIsbnVsbCk7bWM9RShbeXQoInRmLXJ1bnMtc2VsZWN0b3IiKV0sbWMpO3ZhciBhbj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2FuY2VsbGF0aW9uQ291bnQ9MH1jYW5jZWxsYWJsZSh0KXtsZXQgcj10aGlzLmNhbmNlbGxhdGlvbkNvdW50O3JldHVybiBuPT57bGV0IGk9dGhpcy5jYW5jZWxsYXRpb25Db3VudCE9PXI7cmV0dXJuIHQoe3ZhbHVlOm4sY2FuY2VsbGVkOml9KX19Y2FuY2VsQWxsKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudCsrfX07dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmh0bWw9IiJ9Z2V0IHNhbml0aXplZEh0bWwoKXtyZXR1cm4gdGhpcy5odG1sfWF0dGFjaGVkKCl7d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5tYXJrZG93biwhMCl9KX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJtYXJrZG93biIgaW5uZXItaC10LW0tbD0iW1tzYW5pdGl6ZWRIdG1sXV0iPjwvZGl2PgogICAgPHN0eWxlPgogICAgICAvKgogICAgICAgKiBSZWR1Y2UgdG9wbW9zdCBhbmQgYm90dG9tbW9zdCBtYXJnaW5zIGZyb20gMTZweCB0byAwLjNlbSAocmVuZGVycwogICAgICAgKiBhdCBhYm91dCA0LjhweCkgdG8ga2VlcCB0aGUgbGF5b3V0IGNvbXBhY3QuIFRoaXMgaW1wcm92ZXMgdGhlCiAgICAgICAqIGFwcGVhcmFuY2Ugd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaW5lIG9mIHRleHQ7IHN0YW5kYXJkIE1hcmtkb3duCiAgICAgICAqIHJlbmRlcmVycyB3aWxsIHN0aWxsIGluY2x1ZGUgYSBcYDxwPlxgIGVsZW1lbnQuCiAgICAgICAqCiAgICAgICAqIEJ5IHRhcmdldGluZyBvbmx5IHRoZSB0b3AtbGV2ZWwsIGV4dHJlbWFsIGVsZW1lbnRzLCB3ZSBwcmVzZXJ2ZSBhbnkKICAgICAgICogYWN0dWFsIHBhcmFncmFwaCBicmVha3MgYW5kIG9ubHkgY2hhbmdlIHRoZSBwYWRkaW5nIGFnYWluc3QgdGhlCiAgICAgICAqIGNvbXBvbmVudCBlZGdlcy4KICAgICAgICovCiAgICAgICNtYXJrZG93biA+IHA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDAuM2VtOwogICAgICB9CiAgICAgICNtYXJrZG93biA+IHA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC4zZW07CiAgICAgIH0KCiAgICAgIC8qIFBsZWFzYW50IHN0eWxlcyBmb3IgTWFya2Rvd24gdGFibGVzLiAqLwogICAgICAjbWFya2Rvd24gdGFibGUgewogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0aCwKICAgICAgI21hcmtkb3duIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNkZmUyZTUpOwogICAgICB9CiAgICAgICNtYXJrZG93biB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyLCAjYzZjYmQxKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwiaHRtbCIsdm9pZCAwKTtFKFtSdCgiaHRtbCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEg1LnByb3RvdHlwZSwic2FuaXRpemVkSHRtbCIsbnVsbCk7SDU9RShbeXQoInRmLW1hcmtkb3duLXZpZXciKV0sSDUpO19zKHttb2R1bGVOYW1lOiJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBmaWdjYXB0aW9uIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLyoqIEhvcml6b250YWwgbGluZSBvZiBsYWJlbHMuICovCiAgICAuaGVhZGluZy1yb3cgewogICAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLyoqIFBpZWNlIG9mIHRleHQgaW4gdGhlIGZpZ3VyZSBjYXB0aW9uLiAqLwogICAgLmhlYWRpbmctbGFiZWwgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICB9CgogICAgLyoqIE1ha2VzIGxhYmVsIHNob3cgb24gdGhlIHJpZ2h0LiAqLwogICAgLmhlYWRpbmctcmlnaHQgewogICAgICBmbGV4LWdyb3c6IDA7CiAgICB9CiAgYH0pO2Z1bmN0aW9uIHMyKGUpe3JldHVybiBlP2UudG9TdHJpbmcoKS5yZXBsYWNlKC9HTVQtXGQrIFwoKFteKV0rKVwpLywiJDEiKToiIn1mdW5jdGlvbiBLM3QoZSl7bGV0IHQ9YzVlKGUpO3JldHVybiB0P01hdGgucm91bmQoKHRbMF0qMjk5K3RbMV0qNTg3K3RbMl0qMTE0KS8xZTMpPjEyNT8iaW5oZXJpdCI6IiNlZWUiOiJpbmhlcml0In1mdW5jdGlvbiBjNWUoZSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHQ9ZS5tYXRjaCgvXiMoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkoWzAtOWEtZl17MSwyfSkkLyk7aWYoIXQpcmV0dXJuIG51bGw7aWYoZS5sZW5ndGg9PTQpZm9yKHZhciByPTE7cjw9MztyKyspdFtyXT10W3JdK3Rbcl07cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX12YXIgZ2M9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kaXNwbGF5TmFtZT1udWxsLHRoaXMudGFnPW51bGwsdGhpcy5ydW49bnVsbCx0aGlzLmRlc2NyaXB0aW9uPW51bGwsdGhpcy5jb2xvcj1udWxsfV91cGRhdGVIZWFkaW5nU3R5bGUoKXt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IiOnRoaXMuX3J1bkJhY2tncm91bmQsIi0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yIjp0aGlzLl9ydW5Db2xvcn0pfV9jb21wdXRlUnVuQmFja2dyb3VuZCh0KXtyZXR1cm4gdHx8Im5vbmUifV9jb21wdXRlUnVuQ29sb3IodCl7cmV0dXJuIEszdCh0KX1nZXQgX25hbWVMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gdHx8cnx8IiJ9Z2V0IF90YWdMYWJlbCgpe3ZhciB0PXRoaXMuZGlzcGxheU5hbWUscj10aGlzLnRhZztyZXR1cm4gciYmciE9PXQ/cjoiIn1fdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2codCl7bGV0IHI9dGhpcy4kLmRlc2NyaXB0aW9uRGlhbG9nO3IucG9zaXRpb25UYXJnZXQ9dC50YXJnZXQsci50b2dnbGUoKX19O2djLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZmlnY2FwdGlvbiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19uYW1lTGFiZWxdXSI+CiAgICAgICAgICAgIDxkaXYgaXRlbXByb3A9Im5hbWUiIGNsYXNzPSJoZWFkaW5nLWxhYmVsIG5hbWUiPltbX25hbWVMYWJlbF1dPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3J1bl1dIj4KICAgICAgICAgICAgPCEtLSBFeHRyYSB3cmFwcGluZyBzcGFuIG5lZWRlZCB0byBhdm9pZCBmbGV4Ym94IGJsb2NraWZpY2F0aW9uLiAtLT4KICAgICAgICAgICAgPCEtLSAoc2VlIGZsZXhib3ggc3BlYywgc2VjdGlvbiA0ICJGbGV4IEl0ZW1zIikgLS0+CiAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgIDxzcGFuCiAgICAgICAgICAgICAgICBpdGVtcHJvcD0icnVuIgogICAgICAgICAgICAgICAgaWQ9ImhlYWRpbmctcnVuIgogICAgICAgICAgICAgICAgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCBydW4iCiAgICAgICAgICAgICAgICA+W1tydW5dXTwvc3BhbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0xhYmVsXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgICB0YWc6IDxzcGFuIGl0ZW1wcm9wPSJ0YWciPltbX3RhZ0xhYmVsXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZmlnY2FwdGlvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2Rlc2NyaXB0aW9uXV0iPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iaW5mbyIKICAgICAgICAgIG9uLXRhcD0iX3RvZ2dsZURlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgICAgdGl0bGU9IlNob3cgc3VtbWFyeSBkZXNjcmlwdGlvbiIKICAgICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHBhcGVyLWRpYWxvZwogICAgICAgIGlkPSJkZXNjcmlwdGlvbkRpYWxvZyIKICAgICAgICBuby1vdmVybGFwPSIiCiAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0iYXV0byIKICAgICAgICB2ZXJ0aWNhbC1hbGlnbj0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbZGVzY3JpcHRpb25dXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItZGlhbG9nLXNjcm9sbGFibGU+CiAgICAgIDwvcGFwZXItZGlhbG9nPgogICAgPC9kaXY+CiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAuY29udGVudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAubmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5ydW4gewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgcGFkZGluZzogMXB4IDRweCAycHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICBwYXBlci1kaWFsb2ctc2Nyb2xsYWJsZSB7CiAgICAgICAgbWF4LXdpZHRoOiA2NDBweDsKICAgICAgfQogICAgICAjaGVhZGluZy1ydW4gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRmLWNhcmQtaGVhZGluZy1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBjb2xvcjogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiZGlzcGxheU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkZXNjcmlwdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImNvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkJhY2tncm91bmQoY29sb3IpIixyZWFkT25seTohMCxvYnNlcnZlcjoiX3VwZGF0ZUhlYWRpbmdTdHlsZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZ2MucHJvdG90eXBlLCJfcnVuQmFja2dyb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVSdW5Db2xvcihjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5Db2xvciIsdm9pZCAwKTtFKFtSdCgiZGlzcGxheU5hbWUiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxnYy5wcm90b3R5cGUsIl9uYW1lTGFiZWwiLG51bGwpO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX3RhZ0xhYmVsIixudWxsKTtnYz1FKFt5dCgidGYtY2FyZC1oZWFkaW5nIildLGdjKTt2YXIgRmk9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9hdHRhY2hlZD0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9jdXJyZW50RGF0dW0oKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXX1nZXQgX3NhbXBsZVRleHQoKXt2YXIgdD10aGlzLnNhbXBsZTtyZXR1cm5gJHt0KzF9YH1nZXQgX2hhc011bHRpcGxlU2FtcGxlcygpe3ZhciB0PXRoaXMudG90YWxTYW1wbGVzO3JldHVybiB0PjF9YXR0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMCx0aGlzLnJlbG9hZCgpfV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuX2F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgcj1fZSgpLnBsdWdpblJvdXRlKCJhdWRpbyIsIi9hdWRpbyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6U3RyaW5nKHRoaXMuc2FtcGxlKX0pKSxuPXRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9aS52YWx1ZS5tYXAodGhpcy5fY3JlYXRlU3RlcERhdHVtLmJpbmQodGhpcykpO3RoaXMuc2V0KCJfc3RlcHMiLGEpLHRoaXMuc2V0KCJfc3RlcEluZGV4IixhLmxlbmd0aC0xKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9jcmVhdGVTdGVwRGF0dW0odCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyh0LnF1ZXJ5KTtyLmFwcGVuZCgidHMiLFN0cmluZyh0LndhbGxfdGltZSkpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImF1ZGlvIiwiL2luZGl2aWR1YWxBdWRpbyIscik7cmV0dXJue3dhbGxfdGltZTpzMihuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpKSxzdGVwOnQuc3RlcCxsYWJlbDp0LmxhYmVsLGNvbnRlbnRUeXBlOnQuY29udGVudFR5cGUsdXJsOm59fX07RmkudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbdG90YWxTYW1wbGVzXV0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICBzdGVwIDxzdHJvbmc+W1tfY3VycmVudERhdHVtLnN0ZXBdXTwvc3Ryb25nPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnREYXR1bS53YWxsX3RpbWVdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwgaGVhZGluZy1yaWdodCI+CiAgICAgICAgICAgICAgW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctcm93Ij4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBtYXgtbWFya2Vycz0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIHNuYXBzPSIiCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgPGF1ZGlvCiAgICAgICAgY29udHJvbHM9IiIKICAgICAgICBzcmMkPSJbW19jdXJyZW50RGF0dW0udXJsXV0iCiAgICAgICAgdHlwZSQ9IltbX2N1cnJlbnREYXR1bS5jb250ZW50VHlwZV1dIgogICAgICA+PC9hdWRpbz4KICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tfY3VycmVudERhdHVtLmxhYmVsXV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJtYWluLWF1ZGlvLWNvbnRhaW5lciI+PC9kaXY+CgogICAgPHN0eWxlIGluY2x1ZGU9InRmLWNhcmQtaGVhZGluZy1zdHlsZSI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3I6ICM0MjQyNDI7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsgLyogc28gdGhlIHNsaWRlciBrbm9iIGRvZXNuJ3QgYnV0dCBvdXQgKi8KICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS1zdGVwLXNsaWRlci1rbm9iLWNvbG9yKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRmkucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJ0b3RhbFNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRmkucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEZpLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxGaS5wcm90b3R5cGUsIl9tZXRhZGF0YUNhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRmkucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRmkucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2N1cnJlbnREYXR1bSIsbnVsbCk7RShbUnQoInNhbXBsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3NhbXBsZVRleHQiLG51bGwpO0UoW1J0KCJ0b3RhbFNhbXBsZXMiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfaGFzTXVsdGlwbGVTYW1wbGVzIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxGaS5wcm90b3R5cGUsIl9yZWxvYWRPblJ1blRhZ0NoYW5nZSIsbnVsbCk7Rmk9RShbeXQoInRmLWF1ZGlvLWxvYWRlciIpXSxGaSk7dmFyICRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRBdWRpbygpfSl9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihmeS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49ZnkubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpfSl9X3JlbG9hZEF1ZGlvKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1hdWRpby1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWZ5Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBmeS5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSx0b3RhbFNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTskaC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gYXVkaW8gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGF1ZGlvIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1hdWRpby1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICB0b3RhbC1zYW1wbGVzPSJbW2l0ZW0udG90YWxTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1hdWRpby1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkaC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJGgucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sJGgucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLCRoLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLCRoLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLCRoLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpOyRoPUUoW3l0KCJ0Zi1hdWRpby1kYXNoYm9hcmQiKV0sJGgpO3ZhciBWNT1jbGFzcyBleHRlbmRzIEd0KG10KXthdHRhY2hlZCgpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmdldEVmZmVjdGl2ZUNoaWxkcmVuKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aGlzLmxpc3Rlbih0LCJ0YXAiLCJfc2VsZWN0VGFyZ2V0Iil9LmJpbmQodGhpcykpfSl9X3NlbGVjdFRhcmdldCh0KXt0aGlzLnNlbGVjdGVkSWQ9dC5jdXJyZW50VGFyZ2V0LmlkfV9zZWxlY3RlZElkQ2hhbmdlZCgpe3ZhciB0PXRoaXMucXVlcnlFZmZlY3RpdmVDaGlsZHJlbigiIyIrdGhpcy5zZWxlY3RlZElkKTshdHx8KHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKX0pLHQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKSl9fTtWNS50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0id3JhcCI+CiAgICAgIDxoMz5bW25hbWVdXTwvaDM+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtd3JhcHBlciI+PHNsb3Q+PC9zbG90PjwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKCopIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LXdyYXBwZXIgOjpzbG90dGVkKC5zZWxlY3RlZCkgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaDMgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVjUucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX3NlbGVjdGVkSWRDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWNS5wcm90b3R5cGUsInNlbGVjdGVkSWQiLHZvaWQgMCk7VjU9RShbeXQoInRmLW9wdGlvbi1zZWxlY3RvciIpXSxWNSk7ZnVuY3Rpb24gb1IoZSx0KXtsZXQgcixuPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2goYT0+e2xldCBzPWVbYV07cj09PXZvaWQgMCYmKHI9cy5kaXNwbGF5TmFtZSksciE9PXMuZGlzcGxheU5hbWUmJihyPW51bGwpLG5bcy5kZXNjcmlwdGlvbl09PT12b2lkIDAmJihuW3MuZGVzY3JpcHRpb25dPVtdKSxuW3MuZGVzY3JpcHRpb25dLnB1c2goYSl9KTtsZXQgaT1yIT1udWxsP3I6dCxvPSgoKT0+e2xldCBhPU9iamVjdC5rZXlzKG4pO3JldHVybiBhLmxlbmd0aD09PTA/IiI6YS5sZW5ndGg9PT0xP2FbMF06YDxwPjxzdHJvbmc+TXVsdGlwbGUgZGVzY3JpcHRpb25zOjwvc3Ryb25nPjwvcD48dWw+JHthLm1hcChjPT57bGV0IHU9bltjXS5tYXAocD0+YDxjb2RlPiR7cC5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8mL2csIiZhbXA7Iil9PC9jb2RlPmApLGg9dS5sZW5ndGg+Mj91LnNsaWNlKDAsdS5sZW5ndGgtMSkuam9pbigiLCAiKSsiLCBhbmQgIit1W3UubGVuZ3RoLTFdOnUuam9pbigiIGFuZCAiKTtyZXR1cm5gPGxpPjxwPkZvciAke3U1ZSh1Lmxlbmd0aCwicnVuIiwicnVucyIpfSAke2h9OjwvcD4ke2N9PC9saT5gfSkuam9pbigiIil9PC91bD5gfSkoKTtyZXR1cm57ZGlzcGxheU5hbWU6aSxkZXNjcmlwdGlvbjpvfX1mdW5jdGlvbiB1NWUoZSx0LHIpe3JldHVybiBlPT09MT90OnJ9dmFyIEozdD1FZShPZSgpLDEpO3ZhciBIcD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLndlaWdodD0uNix0aGlzLl91cGRhdGVXZWlnaHQ9SjN0LmRlYm91bmNlKGZ1bmN0aW9uKHQpe3RoaXMud2VpZ2h0PXR9LDI1MCl9X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCgpe3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD10aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlci50b1N0cmluZygpLHRoaXMuX3VwZGF0ZVdlaWdodC5jYWxsKHRoaXMsdGhpcy5faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIpfV9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXRDaGFuZ2VkKCl7K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDwwP3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD0iMCI6K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dD4xJiYodGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIxIik7dmFyIHQ9K3RoaXMuX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dDtpc05hTih0KXx8dGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0KX19O0hwLnRlbXBsYXRlPVFgCiAgICA8aDMgY2xhc3M9InRpdGxlIj5TbW9vdGhpbmc8L2gzPgogICAgPGRpdiBjbGFzcz0ic21vb3RoaW5nLWJsb2NrIj4KICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgIGlkPSJzbGlkZXIiCiAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcn19IgogICAgICAgIG1heD0iW1ttYXhdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgcGluCiAgICAgICAgc3RlcD0iW1tzdGVwXV0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHZhbHVlPSJ7e3dlaWdodH19IgogICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDxwYXBlci1pbnB1dAogICAgICAgIGlkPSJpbnB1dCIKICAgICAgICBsYWJlbD0id2VpZ2h0IgogICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgdmFsdWU9Int7X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dH19IgogICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICBtaW49IltbbWluXV0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICA+PC9wYXBlci1pbnB1dD4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICAudGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnNtb290aGluZy1ibG9jayB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgZmxleC1ncm93OiAyOwogICAgICB9CgogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIHdpZHRoOiA2MHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJzdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWF4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwibWluIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsIndlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlckNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxvYnNlcnZlcjoiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhwLnByb3RvdHlwZSwiX2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dCIsdm9pZCAwKTtIcD1FKFt5dCgidGYtc21vb3RoaW5nLWlucHV0IildLEhwKTt2YXIgWW89RWUoT2UoKSwxKTtmdW5jdGlvbiBNaShlLHQpe2xldCByPU9iamVjdC5rZXlzKHQpLnNvcnQoKS5maWx0ZXIoYT0+dFthXSE9PXZvaWQgMCk7aWYoIXIubGVuZ3RoKXJldHVybiBlO2xldCBuPWUuaW5kZXhPZigiPyIpIT09LTE/IiYiOiI/IixvPUFycmF5KCkuY29uY2F0KC4uLnIubWFwKGE9PntsZXQgcz10W2FdO3JldHVybihBcnJheS5pc0FycmF5KHMpP3M6W3NdKS5tYXAoYz0+YCR7YX09JHtoNWUoYyl9YCl9KSkuam9pbigiJiIpO3JldHVybiBlK24rb31mdW5jdGlvbiBoNWUoZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKX12YXIgV0t0PUVlKE9lKCksMSksVVduPUVlKHdsKCksMSk7dmFyIExLdD1FZShPZSgpLDEpO3ZhciB4NDsoZnVuY3Rpb24oZSl7ZVtlLkxPQURJTkc9MF09IkxPQURJTkciLGVbZS5MT0FERUQ9MV09IkxPQURFRCJ9KSh4NHx8KHg0PXt9KSk7ZnVuY3Rpb24ga1MoZSl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2FkS2V5PSIiLHRoaXMuZGF0YVRvTG9hZD1bXSx0aGlzLmdldERhdGFMb2FkTmFtZT1yPT5TdHJpbmcociksdGhpcy5kYXRhTG9hZGluZz0hMSx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMSx0aGlzLl9pc0Nvbm5lY3RlZD0hMSx0aGlzLl9kYXRhTG9hZFN0YXRlPW5ldyBNYXAsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwsdGhpcy5fbG9hZERhdGE9TEt0LnRocm90dGxlKHRoaXMuX2xvYWREYXRhSW1wbCwxMDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITB9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSExfXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmU6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2xvYWREYXRhSWZBY3RpdmUifSxfaXNDb25uZWN0ZWQ6e3R5cGU6Qm9vbGVhbn0sbG9hZEtleTp7dHlwZTpTdHJpbmd9LGRhdGFUb0xvYWQ6e3R5cGU6QXJyYXl9LGdldERhdGFMb2FkTmFtZTp7dHlwZTpPYmplY3R9LGxvYWREYXRhQ2FsbGJhY2s6e3R5cGU6T2JqZWN0fSxyZXF1ZXN0RGF0YTp7dHlwZTpPYmplY3R9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RhdGFUb0xvYWRDaGFuZ2VkKF9pc0Nvbm5lY3RlZCwgZGF0YVRvTG9hZC4qKSJdfW9uTG9hZEZpbmlzaCgpe31yZWxvYWQoKXt0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5fbG9hZERhdGEoKX1yZXNldCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKSx0aGlzLl9jYW5jZWxsZXImJnRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9kYXRhTG9hZFN0YXRlJiZ0aGlzLl9kYXRhTG9hZFN0YXRlLmNsZWFyKCksdGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9X2RhdGFUb0xvYWRDaGFuZ2VkKCl7dGhpcy5faXNDb25uZWN0ZWQmJnRoaXMuX2xvYWREYXRhKCl9ZGV0YWNoZWQoKXt0aGlzLl9sb2FkRGF0YUFzeW5jIT1udWxsJiYoY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCl9X2xvYWREYXRhSWZBY3RpdmUoKXt0aGlzLmFjdGl2ZSYmdGhpcy5fbG9hZERhdGEoKX1fbG9hZERhdGFJbXBsKCl7IXRoaXMuYWN0aXZlfHwodGhpcy5fbG9hZERhdGFBc3luYyE9PW51bGwmJmNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPXNldFRpbWVvdXQodGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKHI9PntpZihyLmNhbmNlbGxlZClyZXR1cm47dGhpcy5kYXRhTG9hZGluZz0hMDtsZXQgbj10aGlzLmRhdGFUb0xvYWQuZmlsdGVyKGE9PntsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTtyZXR1cm4hdGhpcy5fZGF0YUxvYWRTdGF0ZS5oYXMocyl9KTtmb3IobGV0IGEgb2Ygbil7bGV0IHM9dGhpcy5nZXREYXRhTG9hZE5hbWUoYSk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQocyx4NC5MT0FESU5HKX1sZXQgaT10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKGEuY2FuY2VsbGVkKXJldHVybjtsZXR7aXRlbTpzLGRhdGE6bH09YS52YWx1ZSxjPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHMpO3RoaXMuX2RhdGFMb2FkU3RhdGUuc2V0KGMseDQuTE9BREVEKSx0aGlzLmxvYWREYXRhQ2FsbGJhY2sodGhpcyxzLGwpfSksbz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoYT0+e2lmKCFhLmNhbmNlbGxlZCl7bGV0IGw9YS52YWx1ZSxjPW5ldyBTZXQobi5tYXAoaD0+dGhpcy5nZXREYXRhTG9hZE5hbWUoaCkpKTt0aGlzLmRhdGFUb0xvYWQuc29tZShoPT5jLmhhcyh0aGlzLmdldERhdGFMb2FkTmFtZShoKSkpJiZ0aGlzLm9uTG9hZEZpbmlzaCgpLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLmRhdGFMb2FkZWRBdExlYXN0T25jZT0hMH1BcnJheS5mcm9tKHRoaXMuX2RhdGFMb2FkU3RhdGUudmFsdWVzKCkpLmluY2x1ZGVzKHg0LkxPQURJTkcpfHwodGhpcy5kYXRhTG9hZGluZz0hMSl9KTt0aGlzLnJlcXVlc3REYXRhKG4saSwoKT0+byh2b2lkIDApKX0pKSl9fX12YXIgX3FlPUVlKE9lKCksMSksV289RWUod2woKSwxKSxSUz1be2NoYXJhY3RlcjoiXHUyNUZDIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnNxdWFyZX0se2NoYXJhY3RlcjoiXHUyNUM2IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmRpYW1vbmR9LHtjaGFyYWN0ZXI6Ilx1MjVCMiIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZX0se2NoYXJhY3RlcjoiXHUyNjA1IixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnN0YXJ9LHtjaGFyYWN0ZXI6Ilx1MjcxQSIsbWV0aG9kOldvLlN5bWJvbEZhY3Rvcmllcy5jcm9zc31dLEVkOyhmdW5jdGlvbihlKXtlLlNURVA9InN0ZXAiLGUuUkVMQVRJVkU9InJlbGF0aXZlIixlLldBTExfVElNRT0id2FsbF90aW1lIn0pKEVkfHwoRWQ9e30pKTt2YXIgZTA9NCx5cWU9NCxtQj0zLGdCPTIwLF9CPTQsa0t0PTY7ZnVuY3Rpb24gV3UoZSl7cmV0dXJuIHQ9PntsZXQgcj1NYXRoLmFicyh0KTtyPDFlLTE1JiYocj0wKTtsZXQgbjtyZXR1cm4gcj49MWU0P249eG4oIi4iK2UrIn5lIik6cj4wJiZyPC4wMT9uPXhuKCIuIitlKyJ+ZSIpOm49eG4oIi4iK2UrIn5nIiksbih0KX19dmFyIGI0PXhuKGAuJHt5cWV9fnNgKTtmdW5jdGlvbiBYYXQoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtlLnRpY2tHZW5lcmF0b3IoV28uU2NhbGVzLlRpY2tHZW5lcmF0b3JzLmludGVnZXJUaWNrR2VuZXJhdG9yKCkpO2xldCB0PW5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIik7cmV0dXJuIHQuZm9ybWF0dGVyKGI0KSx7c2NhbGU6ZSxheGlzOnQsYWNjZXNzb3I6cj0+ci5zdGVwfX12YXIgeUI9V28uRm9ybWF0dGVycy50aW1lKCIlYSAlYiAlZSwgJUg6JU06JVMiKTtmdW5jdGlvbiB2cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLlRpbWU7cmV0dXJue3NjYWxlOmUsYXhpczpuZXcgV28uQXhlcy5UaW1lKGUsImJvdHRvbSIpLGFjY2Vzc29yOnQ9PnQud2FsbF90aW1lfX12YXIgcjA9KGUsdCxyKT0+e2lmKGUucmVsYXRpdmUhPW51bGwpcmV0dXJuIGUucmVsYXRpdmU7bGV0IG49ci5kYXRhKCksaT1uLmxlbmd0aD4wPytuWzBdLndhbGxfdGltZTowO3JldHVybigrZS53YWxsX3RpbWUtaSkvKDYwKjYwKjFlMyl9LHZCPWU9PntsZXQgdD0iIixyPU1hdGguZmxvb3IoZS8yNCk7ZS09cioyNCxyJiYodCs9cisiZCAiKTtsZXQgbj1NYXRoLmZsb29yKGUpO2UtPW4sZSo9NjAsKG58fHIpJiYodCs9bisiaCAiKTtsZXQgaT1NYXRoLmZsb29yKGUpO2UtPWksZSo9NjAsKGl8fG58fHIpJiYodCs9aSsibSAiKTtsZXQgbz1NYXRoLmZsb29yKGUpO3JldHVybiB0K28rInMifTtmdW5jdGlvbiB4cWUoKXtsZXQgZT1uZXcgV28uU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLk51bWVyaWMoZSwiYm90dG9tIiksYWNjZXNzb3I6cjB9fWZ1bmN0aW9uIHhCKGUpe3N3aXRjaChlKXtjYXNlIEVkLlNURVA6cmV0dXJuIFhhdCgpO2Nhc2UgRWQuV0FMTF9USU1FOnJldHVybiB2cWUoKTtjYXNlIEVkLlJFTEFUSVZFOnJldHVybiB4cWUoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB4VHlwZTogIitlKX19dmFyIHpzPUVlKE9lKCksMSksTW49RWUod2woKSwxKTt2YXIgdmE9RWUod2woKSwxKTtmdW5jdGlvbiBicWUoZSl7bGV0IHQ9W10scj1lO2Zvcig7ciYmciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OylpZih0LnB1c2gociksci5hc3NpZ25lZFNsb3Qpcj1yLmFzc2lnbmVkU2xvdDtlbHNlIGlmKHIucGFyZW50RWxlbWVudClyPXIucGFyZW50RWxlbWVudDtlbHNle2xldCBuPXIucGFyZW50Tm9kZTtuIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9yPW4uaG9zdDpyPW4hPT1yP246bnVsbH1yZXR1cm4gdH12YXIgd3FlPVsxLDAsMCwxLDAsMF07ZnVuY3Rpb24gU3FlKGUpe2xldCB0PWJxZShlKSxyPXdxZSxuPW51bGw7Zm9yKGxldCBpIG9mIHQpe2xldCBvPXZhLlV0aWxzLkRPTS5nZXRFbGVtZW50VHJhbnNmb3JtKGkpO2lmKG8hPW51bGwpe2xldCBsPWkuY2xpZW50V2lkdGgvMixjPWkuY2xpZW50SGVpZ2h0LzI7cj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2wsY10pLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseU1hdHJpeChyLHZhLlV0aWxzLk1hdGguaW52ZXJ0TWF0cml4KG8pKSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbLWwsLWNdKX1sZXQgYT1pLnNjcm9sbExlZnQscz1pLnNjcm9sbFRvcDsobj09PW51bGx8fGk9PT1uKSYmKGEtPWkub2Zmc2V0TGVmdCtpLmNsaWVudExlZnQscy09aS5vZmZzZXRUb3AraS5jbGllbnRUb3Asbj1pLm9mZnNldFBhcmVudCkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5VHJhbnNsYXRlKHIsW2Esc10pfXJldHVybiByfXZhciB3Qj1jbGFzcyBleHRlbmRzIHZhLlV0aWxzLlRyYW5zbGF0b3J7Y29tcHV0ZVBvc2l0aW9uKHQscil7bGV0IG49e3g6dCx5OnJ9LGk9U3FlKHRoaXMuX3Jvb3RFbGVtZW50KTtyZXR1cm4gaT09bnVsbD9uOnZhLlV0aWxzLk1hdGguYXBwbHlUcmFuc2Zvcm0oaSxuKX19LFV2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuTW91c2V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW1V2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBVdih0KSxyW1V2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19LHF2PWNsYXNzIGV4dGVuZHMgdmEuRGlzcGF0Y2hlcnMuVG91Y2h7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fZXZlbnRUYXJnZXQ9dC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCksdGhpcy5fdHJhbnNsYXRvcj1uZXcgd0IodC5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkpfXN0YXRpYyBnZXREaXNwYXRjaGVyKHQpe2xldCByPXQucm9vdCgpLnJvb3RFbGVtZW50KCksbj1yW3F2Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIG58fChuPW5ldyBxdih0KSxyW3F2Ll9ESVNQQVRDSEVSX0tFWV09biksbn19O3ZhLkludGVyYWN0aW9uLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWUueCYmMDw9ZS55JiZlLng8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby53aWR0aCgpJiZlLnk8dGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5oZWlnaHQoKX07dmFyIFNCPWNsYXNzIGV4dGVuZHMgdmEuSW50ZXJhY3Rpb25zLlBvaW50ZXJ7X2FuY2hvcih0KXtsZXQgcj10aGlzO3IuX2lzQW5jaG9yZWQ9ITAsci5fbW91c2VEaXNwYXRjaGVyPVV2LmdldERpc3BhdGNoZXIoci5fY29tcG9uZW50QXR0YWNoZWRUbyksci5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHIuX21vdXNlTW92ZUNhbGxiYWNrKSxyLl90b3VjaERpc3BhdGNoZXI9cXYuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaFN0YXJ0KHIuX3RvdWNoU3RhcnRDYWxsYmFjayl9fTt2YXIgUkt0PUVlKE9lKCksMSk7dmFyIEd2OyhmdW5jdGlvbihlKXtlLkFVVE89ImF1dG8iLGUuQk9UVE9NPSJib3R0b20iLGUuUklHSFQ9InJpZ2h0In0pKEd2fHwoR3Y9e30pKTt2YXIgTXFlPXtib3hTaGFkb3c6IjAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIC4zKSIsb3BhY2l0eTowLHBvc2l0aW9uOiJmaXhlZCIsd2lsbENoYW5nZToidHJhbnNmb3JtIix6SW5kZXg6NX0sdzQ9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucG9zaXRpb249R3YuQVVUTyx0aGlzLm1pbkRpc3RGcm9tRWRnZT0xNSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9cmVhZHkoKXt0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fcmFmPW51bGwsdGhpcy5fdHVubmVsPW51bGx9YXR0YWNoZWQoKXt0aGlzLl90dW5uZWw9dGhpcy5fY3JlYXRlVHVubmVsKCksdGhpcy5faGlkZU9uQmx1cj0oKT0+e2RvY3VtZW50LmhpZGRlbiYmdGhpcy5oaWRlKCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1kZXRhY2hlZCgpe3RoaXMuaGlkZSgpLHRoaXMuX3JlbW92ZVR1bm5lbCh0aGlzLl90dW5uZWwpLHRoaXMuX3R1bm5lbD1udWxsLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLl9oaWRlT25CbHVyKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX3R1bm5lbC5zaGFkb3dSb290fWhpZGUoKXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9zdHlsZUNhY2hlPW51bGwsdGhpcy5fdHVubmVsLnN0eWxlLm9wYWNpdHk9MH11cGRhdGVBbmRQb3NpdGlvbih0KXt0aGlzLl9yYWYhPT1udWxsJiZ3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKSx0aGlzLl9yYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+eyF0aGlzLmlzQXR0YWNoZWR8fHRoaXMuX3JlcG9zaXRpb25JbXBsKHQpfSl9X3JlcG9zaXRpb25JbXBsKHQpe2xldCByPXRoaXMuX3R1bm5lbCxuPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89d2luZG93LmlubmVySGVpZ2h0LGE9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxzPW4udG9wLGw9cytuLmhlaWdodCxjPWkuaGVpZ2h0K2dCLHU9bnVsbCxoPU1hdGgubWF4KHRoaXMubWluRGlzdEZyb21FZGdlLG4ubGVmdCksZj1udWxsLHA9czt0aGlzLnBvc2l0aW9uPT1Hdi5SSUdIVD9oPW4ucmlnaHQ6KHA9bCtnQixhPGgraS53aWR0aCt0aGlzLm1pbkRpc3RGcm9tRWRnZSYmKGg9bnVsbCxmPXRoaXMubWluRGlzdEZyb21FZGdlKSksdGhpcy5wb3NpdGlvbj09R3YuQVVUTyYmbi50b3AtYz4wJiZvPG4udG9wK24uaGVpZ2h0K2MmJihwPW51bGwsdT1vLXMrZ0IpO2xldCBkPXtjb250YWluOiJjb250ZW50IixvcGFjaXR5OjEsbGVmdDpoP2Ake2h9cHhgOm51bGwscmlnaHQ6Zj9gJHtmfXB4YDpudWxsLHRvcDpwP2Ake3B9cHhgOm51bGwsYm90dG9tOnU/YCR7dX1weGA6bnVsbH07Ukt0LmlzRXF1YWwodGhpcy5fc3R5bGVDYWNoZSxkKXx8KE9iamVjdC5hc3NpZ24oci5zdHlsZSxkKSx0aGlzLl9zdHlsZUNhY2hlPWQpfV9jcmVhdGVUdW5uZWwoKXtpZighdGhpcy5jb250ZW50Q29tcG9uZW50TmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmVxdWlyZSBgY29udGVudENvbXBvbmVudE5hbWVgIHRvIGJlIGEgbmFtZSBvZiBhIFBvbHltZXIgY29tcG9uZW50Iik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKTtyZXR1cm4gT2JqZWN0LmFzc2lnbih0LnN0eWxlLE1xZSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSx0fV9yZW1vdmVUdW5uZWwodCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHc0LnByb3RvdHlwZSwiY29udGVudENvbXBvbmVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdzQucHJvdG90eXBlLCJwb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx3NC5wcm90b3R5cGUsIm1pbkRpc3RGcm9tRWRnZSIsdm9pZCAwKTt3ND1FKFt5dCgidnotY2hhcnQtdG9vbHRpcCIpXSx3NCk7dmFyIE5TPUVlKHdsKCksMSk7dmFyIE9LdD0xZTQsekt0PS4wMDEsRkt0PXhuKCIuMn5lIiksRXFlPXhuKCIuNH5yIiksTkt0PXhuKCIsfiIpO2Z1bmN0aW9uIERLdChlKXtpZihlPT09MClyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOkVxZShlKX12YXIgS2F0PXtmb3JtYXRUaWNrOkRLdCxmb3JtYXRTaG9ydDpES3QsZm9ybWF0UmVhZGFibGUoZSl7bGV0IHQ9TWF0aC5hYnMoZSk7cmV0dXJuIHQ+PU9LdHx8dDx6S3Q/Rkt0KGUpOk5LdChlKX0sZm9ybWF0TG9uZzpOS3R9LCRHbj1uZXcgSW50bC5OdW1iZXJGb3JtYXQodm9pZCAwLHttYXhpbXVtRnJhY3Rpb25EaWdpdHM6NH0pO3ZhciBLR249eG4oIjAuM35zIiksWkduPXhuKCIsLjN+ZiIpO3ZhciBUcWU9MWUzLENxZT02MCpUcWUsQXFlPTYwKkNxZSxQcWU9MjQqQXFlLEpHbj0zNjUqUHFlLFFHbj14bigiLjR+Iik7dmFyIElxZT1ZYigpLnRpY2tGb3JtYXQoKSwkYXQsQkt0PXtmb3JtYXRUaWNrKGUpe3JldHVybiBJcWUobmV3IERhdGUoZSkpfSxmb3JtYXRTaG9ydChlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSl9LGZvcm1hdFJlYWRhYmxlKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZygkYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KX0sZm9ybWF0TG9uZyhlKXtyZXR1cm4gbmV3IERhdGUoZSkudG9Mb2NhbGVTdHJpbmcoJGF0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTt2YXIgVGQ7KGZ1bmN0aW9uKGUpe2VbZS5MSU5FQVI9MF09IkxJTkVBUiIsZVtlLkxPRzEwPTFdPSJMT0cxMCIsZVtlLlRJTUU9Ml09IlRJTUUifSkoVGR8fChUZD17fSkpO2Z1bmN0aW9uIEhLdChlKXtzd2l0Y2goZSl7Y2FzZSBUZC5MSU5FQVI6cmV0dXJuIG5ldyBaYXQ7Y2FzZSBUZC5MT0cxMDpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLlRJTUU6cmV0dXJuIG5ldyBRYXQ7ZGVmYXVsdDpsZXQgdD1lO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgTHFlPS4wNSxaYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9S2F0fXRyYW5zZm9ybSh0LHIsbil7bGV0W2ksb109dCxhPW8taSxbcyxsXT1yLGM9bC1zO3JldHVybiBhPT09MD9zOmMvYSoobi1pKStzfWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LHIsbil9cmV2ZXJzZSh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHIsdCxuKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYobjxyKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKG49PT1yKXJldHVybiByPT09MD9bLTEsMV06cjwwP1syKnIsMF06WzAsMipyXTtsZXQgaT1PbigpLG89KG4tcitOdW1iZXIuRVBTSUxPTikqTHFlLFthLHNdPWkuZG9tYWluKFtyLW8sbitvXSkubmljZSgpLmRvbWFpbigpO3JldHVyblthLHNdfXRpY2tzKHQscil7cmV0dXJuIE9uKCkuZG9tYWluKHQpLnRpY2tzKHIpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSmF0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUthdH10cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxyLG4pe2lmKG48PTApcmV0dXJuIHJbMF07bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hO3JldHVybiBuPXRoaXMudHJhbnNmb3JtKG4pLGgvKHUrTnVtYmVyLkVQU0lMT04pKihuLWwpK2F9cmV2ZXJzZSh0LHIsbil7bGV0W2ksb109dCxbYSxzXT1yLGw9dGhpcy50cmFuc2Zvcm0oaSksdT10aGlzLnRyYW5zZm9ybShvKS1sLGg9cy1hLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKG4tYSkrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXQ7aWYocj5uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCBpPU1hdGgubWF4KHIsTnVtYmVyLk1JTl9WQUxVRSksbz1NYXRoLm1heChuLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBuPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLGkqLjUpLG8qMl19dGlja3ModCxyKXtsZXQgbj10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxpPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLG89Y2MoKS5kb21haW4oW24saV0pLnRpY2tzKHIpO3JldHVybiBvLmxlbmd0aD9vOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LFFhdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2NhbGU9WWIoKSx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9Qkt0fWZvcndhcmQodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKShuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UocikuaW52ZXJ0KG4pLmdldFRpbWUoKX1uaWNlRG9tYWluKHQpe2xldFtyLG5dPXRoaXMuc2NhbGUuZG9tYWluKHQpLm5pY2UoKS5kb21haW4oKTtyZXR1cm5bci5nZXRUaW1lKCksbi5nZXRUaW1lKCldfXRpY2tzKHQscil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnRpY2tzKHIpLm1hcChuPT5uLmdldFRpbWUoKSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fTt2YXIgTUI9Y2xhc3MgZXh0ZW5kcyBOUy5TY2FsZXMuTGluZWFye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2V0VmFsdWVQcm92aWRlckZvckRvbWFpbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj10LHRoaXN9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10O3JldHVybiBIS3QoVGQuTElORUFSKS5uaWNlRG9tYWluKFtuLGldKX1fZ2V0VW5ib3VuZGVkRXh0ZW50KHQpe2xldCByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHQpLG49dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKHIubGVuZ3RoIT09MCl7bGV0IGk9W05TLlV0aWxzLk1hdGgubWluKHIsblswXSksTlMuVXRpbHMuTWF0aC5tYXgocixuWzFdKV07bj10aGlzLl9uaWNlRG9tYWluKGkpfXJldHVybiBufV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5OUy5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykpLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IG89ci5zb3J0KChsLGMpPT5sLWMpLGE9c2EobywuMDUpLHM9c2EobywuOTUpO249ci5maWx0ZXIobD0+bD49YSYmbDw9cyl9bGV0IGk9YWEobik7cmV0dXJuIGlbMF09PW51bGx8fGlbMV09PW51bGw/W106aX1pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn19O3ZhciBDQj1FZSh3bCgpLDEpO3ZhciBWS3Q9RWUod2woKSwxKSxFQj1jbGFzcyBleHRlbmRzIFZLdC5RdWFudGl0YXRpdmVTY2FsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faWdub3JlT3V0bGllcj0hMX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31pZ25vcmVPdXRsaWVyKHQpe3JldHVybiB0eXBlb2YgdD09ImJvb2xlYW4iPyh0aGlzLl9pZ25vcmVPdXRsaWVyPXQsdGhpcyk6dGhpcy5faWdub3JlT3V0bGllcn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7bGV0IHI9dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbj90aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluKCk6W107cmV0dXJuIHRoaXMuZXh0ZW50T2ZWYWx1ZXMocil9fTt2YXIgVEI9TWF0aC5wb3coMiwtMTA3NCk7ZnVuY3Rpb24gUzQoZSl7cmV0dXJuIE1hdGgubG9nMTAoZSl9ZnVuY3Rpb24gdHN0KGUpe3JldHVybiBNYXRoLnBvdygxMCxlKX12YXIgQUI9Y2xhc3MgZXh0ZW5kcyBFQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fZDNMb2dTY2FsZT1jYygpLHRoaXMucGFkUHJvcG9ydGlvbiguMil9c2NhbGUodCl7cmV0dXJuIHQ8PTA/TmFOOnRoaXMuX2QzTG9nU2NhbGUodCl9aW52ZXJ0KHQpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLmludmVydCh0KX1zY2FsZVRyYW5zZm9ybWF0aW9uKHQpe3JldHVybiB0aGlzLnNjYWxlKHQpfWludmVydGVkVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuaW52ZXJ0KHQpfWdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9c2V0VHJhbnNmb3JtYXRpb25Eb21haW4odCl7dGhpcy5kb21haW4odCl9Z2V0VHJhbnNmb3JtYXRpb25FeHRlbnQoKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX1fZ2V0RG9tYWluKCl7cmV0dXJuIHRoaXMuX3VudHJhbnNmb3JtZWREb21haW59X3NldERvbWFpbih0KXt0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluPXQ7bGV0W3Isbl09dDtzdXBlci5fc2V0RG9tYWluKFtNYXRoLm1heChUQixyKSxuXSl9X25pY2VEb21haW4odCxyKXtsZXRbbixpXT10LG89TWF0aC5tYXgoUzQoVEIpLFM0KG4pKSxhPVM0KGkpLHM9YS1vLGw9cz9zKnRoaXMucGFkUHJvcG9ydGlvbigpOjE7cmV0dXJuW3RzdChNYXRoLm1heChTNChUQiksby1sKSksdHN0KGErbCldfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bQ0IuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxDQi5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe3JldHVybiBzdXBlci5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKS5tYXAobj0+bj4wP246VEIpfV9kZWZhdWx0RXh0ZW50KCl7cmV0dXJuWzEsMTBdfV9iYWNraW5nU2NhbGVEb21haW4odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fZDNMb2dTY2FsZS5kb21haW4oKToodGhpcy5fZDNMb2dTY2FsZS5kb21haW4odCksdGhpcyl9X2dldFJhbmdlKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUucmFuZ2UoKX1fc2V0UmFuZ2UodCl7dGhpcy5fZDNMb2dTY2FsZS5yYW5nZSh0KX1kZWZhdWx0VGlja3MoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS50aWNrcygxKX10aWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKCl9ZXh0ZW50T2ZWYWx1ZXModCl7bGV0IHI9dC5maWx0ZXIobz0+Q0IuVXRpbHMuTWF0aC5pc1ZhbGlkTnVtYmVyKG8pJiZvPjApLG49cjtpZih0aGlzLmlnbm9yZU91dGxpZXIoKSl7bGV0IGE9ci5tYXAoUzQpLnNvcnQoKGMsdSk9PmMtdSkscz1zYShhLC4wNSksbD1zYShhLC45NSk7bj1hLmZpbHRlcihjPT5jPj1zJiZjPD1sKS5tYXAodHN0KX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfX07dmFyIENkPUVlKHdsKCksMSk7dmFyIG4wPUVlKHdsKCksMSksUEI9Y2xhc3MgZXh0ZW5kcyBuMC5Db21wb25lbnRzLlNlbGVjdGlvbkJveExheWVye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMuZWFzZUZuPXhzLHRoaXMuX2FuaW1hdGlvblRpbWU9NzUwLHRoaXMueFNjYWxlKHQpLHRoaXMueVNjYWxlKHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkRyYWcsdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbj1uZXcgbjAuSW50ZXJhY3Rpb25zLkNsaWNrLHRoaXMuc2V0dXBDYWxsYmFja3MoKSx0aGlzLnVuem9vbU1ldGhvZD1uLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaEZyb20odGhpcyl9KSx0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uYXR0YWNoVG8odGhpcyl9KX1pbnRlcmFjdGlvblN0YXJ0KHQpe3RoaXMub25TdGFydD10fWludGVyYWN0aW9uRW5kKHQpe3RoaXMub25FbmQ9dH1kcmFnSW50ZXJhY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufXNldHVwQ2FsbGJhY2tzKCl7bGV0IHQ9ITE7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KHI9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0OnJ9KSx0aGlzLm9uU3RhcnQoKX0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWcoKHIsbik9Pnt0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0aGlzLmJveFZpc2libGUoITApLHQ9ITB9KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKChyLG4pPT57dGhpcy5ib3hWaXNpYmxlKCExKSx0aGlzLmJvdW5kcyh7dG9wTGVmdDpyLGJvdHRvbVJpZ2h0Om59KSx0P3RoaXMuem9vbSgpOnRoaXMub25FbmQoKSx0PSExfSksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5vbkRvdWJsZUNsaWNrKHRoaXMudW56b29tLmJpbmQodGhpcykpfWFuaW1hdGlvblRpbWUodCl7aWYodD09bnVsbClyZXR1cm4gdGhpcy5fYW5pbWF0aW9uVGltZTtpZih0PDApdGhyb3cgbmV3IEVycm9yKCJhbmltYXRpb25UaW1lIGNhbm5vdCBiZSBuZWdhdGl2ZSIpO3JldHVybiB0aGlzLl9hbmltYXRpb25UaW1lPXQsdGhpc31lYXNlKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiZWFzZSBmdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm4odCgwKSE9PTB8fHQoMSkhPT0xKSYmbjAuVXRpbHMuV2luZG93Lndhcm4oIkVhc2luZyBmdW5jdGlvbiBkb2VzIG5vdCBtYWludGFpbiBpbnZhcmlhbnQgZigwKT09MCAmJiBmKDEpPT0xLiBCYWQgYmVoYXZpb3IgbWF5IHJlc3VsdC4iKSx0aGlzLmVhc2VGbj10LHRoaXN9em9vbSgpe2xldCB0PXRoaXMueEV4dGVudCgpWzBdLnZhbHVlT2YoKSxyPXRoaXMueEV4dGVudCgpWzFdLnZhbHVlT2YoKSxuPXRoaXMueUV4dGVudCgpWzFdLnZhbHVlT2YoKSxpPXRoaXMueUV4dGVudCgpWzBdLnZhbHVlT2YoKTt0PT09cnx8bj09PWl8fHRoaXMuaW50ZXJwb2xhdGVab29tKHQscixuLGkpfXVuem9vbSgpe2xldCB0PXRoaXMueFNjYWxlKCk7dC5fZG9tYWluTWluPW51bGwsdC5fZG9tYWluTWF4PW51bGw7bGV0IHI9dC5fZ2V0RXh0ZW50KCk7dGhpcy54U2NhbGUoKS5kb21haW4ociksdGhpcy51bnpvb21NZXRob2QoKX1pc1pvb21pbmcodCl7dGhpcy5fZHJhZ0ludGVyYWN0aW9uLmVuYWJsZWQoIXQpLHRoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZW5hYmxlZCghdCl9aW50ZXJwb2xhdGVab29tKHQscixuLGkpe2xldCBvPXRoaXMueFNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGE9dGhpcy54U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCkscz10aGlzLnlTY2FsZSgpLmRvbWFpbigpWzBdLnZhbHVlT2YoKSxsPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMV0udmFsdWVPZigpLGM9dGhpcy5lYXNlRm4sdT0ocCxkLGcpPT56aShwLGQpKGMoZykpO3RoaXMuaXNab29taW5nKCEwKTtsZXQgaD1EYXRlLm5vdygpLGY9KCk9PntsZXQgZD1EYXRlLm5vdygpLWgsZz10aGlzLl9hbmltYXRpb25UaW1lPT09MD8xOk1hdGgubWluKDEsZC90aGlzLl9hbmltYXRpb25UaW1lKSxfPXUobyx0LGcpLHk9dShhLHIsZykseD11KHMsbixnKSxiPXUobCxpLGcpO3RoaXMueFNjYWxlKCkuZG9tYWluKFtfLHldKSx0aGlzLnlTY2FsZSgpLmRvbWFpbihbeCxiXSksZzwxP24wLlV0aWxzLkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChmKToodGhpcy5vbkVuZCgpLHRoaXMuaXNab29taW5nKCExKSl9O2YoKX19O3ZhciB4YTsoZnVuY3Rpb24oZSl7ZVtlLk5PTkU9MF09Ik5PTkUiLGVbZS5EUkFHX1pPT01JTkc9MV09IkRSQUdfWk9PTUlORyIsZVtlLlBBTk5JTkc9Ml09IlBBTk5JTkcifSkoeGF8fCh4YT17fSkpO3ZhciB6Zj1jbGFzcyBleHRlbmRzIENkLkNvbXBvbmVudHMuR3JvdXB7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5zdGF0ZT14YS5OT05FLHRoaXMucGFuU3RhcnRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5FbmRDYWxsYmFjaz1uZXcgQ2QuVXRpbHMuQ2FsbGJhY2tTZXQsdGhpcy5wYW5ab29tPW5ldyBDZC5JbnRlcmFjdGlvbnMuUGFuWm9vbSh0LHIpLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT56Zi5pc1BhbktleShvKSYmby5idXR0b249PT0wKSx0aGlzLnBhblpvb20ud2hlZWxGaWx0ZXIodGhpcy5jYW5TY3JvbGxab29tKSx0aGlzLmRyYWdab29tTGF5ZXI9bmV3IFBCKHQscixuKSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkubW91c2VGaWx0ZXIobz0+IXpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMuYXBwZW5kKHRoaXMuZHJhZ1pvb21MYXllcik7bGV0IGk9dGhpcy5vbldoZWVsLmJpbmQodGhpcyk7dGhpcy5vbkFuY2hvcigoKT0+e3RoaXMuX21vdXNlRGlzcGF0Y2hlcj1DZC5EaXNwYXRjaGVycy5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbldoZWVsKGkpLHRoaXMucGFuWm9vbS5hdHRhY2hUbyh0aGlzKX0pLHRoaXMub25EZXRhY2goKCk9Pnt0aGlzLnBhblpvb20uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXImJih0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwoaSksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5QQU5OSU5HKX0pLHRoaXMucGFuWm9vbS5kcmFnSW50ZXJhY3Rpb24oKS5vbkRyYWdFbmQoKCk9Pnt0aGlzLnN0YXRlPT14YS5QQU5OSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ1N0YXJ0KCgpPT57dGhpcy5zdGF0ZT09eGEuTk9ORSYmdGhpcy5zZXRTdGF0ZSh4YS5EUkFHX1pPT01JTkcpfSksdGhpcy5kcmFnWm9vbUxheWVyLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLkRSQUdfWk9PTUlORyYmdGhpcy5zZXRTdGF0ZSh4YS5OT05FKX0pfW9uV2hlZWwodCxyKXtpZih0aGlzLmNhblNjcm9sbFpvb20ocikpcmV0dXJuO2xldCBuPXRoaXMuZWxlbWVudCgpO2lmKCFuLnNlbGVjdCgiLmhlbHAiKS5lbXB0eSgpKXJldHVybjtsZXQgaT1uLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiaGVscCIsITApO2kuYXBwZW5kKCJzcGFuIikudGV4dCgiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSxpLm9uKCJhbmltYXRpb25lbmQiLCgpPT52b2lkIGkucmVtb3ZlKCkpfXN0YXRpYyBpc1BhbktleSh0KXtyZXR1cm4gQm9vbGVhbih0LmFsdEtleSl8fEJvb2xlYW4odC5zaGlmdEtleSl9Y2FuU2Nyb2xsWm9vbSh0KXtyZXR1cm4gdC5hbHRLZXl9c2V0U3RhdGUodCl7aWYodGhpcy5zdGF0ZT09dClyZXR1cm47bGV0IHI9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlPXQsdGhpcy5yb290KCkucmVtb3ZlQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZShyKSksdGhpcy5yb290KCkuYWRkQ2xhc3ModGhpcy5zdGF0ZUNsYXNzTmFtZSh0KSkscj09eGEuUEFOTklORyYmdGhpcy5wYW5FbmRDYWxsYmFjay5jYWxsQ2FsbGJhY2tzKCksdD09eGEuUEFOTklORyYmdGhpcy5wYW5TdGFydENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKX1zdGF0ZUNsYXNzTmFtZSh0KXtzd2l0Y2godCl7Y2FzZSB4YS5QQU5OSU5HOnJldHVybiJwYW5uaW5nIjtjYXNlIHhhLkRSQUdfWk9PTUlORzpyZXR1cm4iZHJhZy16b29taW5nIjtjYXNlIHhhLk5PTkU6ZGVmYXVsdDpyZXR1cm4iIn19b25QYW5TdGFydCh0KXt0aGlzLnBhblN0YXJ0Q2FsbGJhY2suYWRkKHQpfW9uUGFuRW5kKHQpe3RoaXMucGFuRW5kQ2FsbGJhY2suYWRkKHQpfW9uU2Nyb2xsWm9vbSh0KXt0aGlzLnBhblpvb20ub25ab29tRW5kKHQpfW9uRHJhZ1pvb21TdGFydCh0KXt0aGlzLmRyYWdab29tTGF5ZXIuaW50ZXJhY3Rpb25TdGFydCh0KX1vbkRyYWdab29tRW5kKHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvbkVuZCh0KX19O3ZhciBJQjsoZnVuY3Rpb24oZSl7ZVtlLlRFWFQ9MF09IlRFWFQiLGVbZS5ET009MV09IkRPTSJ9KShJQnx8KElCPXt9KSk7dmFyIEZmOyhmdW5jdGlvbihlKXtlLkxPRz0ibG9nIixlLkxJTkVBUj0ibGluZWFyIn0pKEZmfHwoRmY9e30pKTt2YXIgVUt0PTIwLERTPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCl7dGhpcy5kaXJ0eURhdGFzZXRzPW5ldyBTZXQsdGhpcy5zZXJpZXNOYW1lcz1bXSx0aGlzLm5hbWUyZGF0YXNldHM9e30sdGhpcy5jb2xvclNjYWxlPWksdGhpcy50b29sdGlwPW8sdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5sYXN0UG9pbnRzRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLm5hbkRhdGFzZXQ9bmV3IE1uLkRhdGFzZXQsdGhpcy55VmFsdWVBY2Nlc3Nvcj1yLHRoaXMuc3ltYm9sRnVuY3Rpb249dSx0aGlzLl9kZWZhdWx0WFJhbmdlPWwsdGhpcy5fZGVmYXVsdFlSYW5nZT1jLHRoaXMudG9vbHRpcENvbHVtbnM9YSx0aGlzLmJ1aWxkQ2hhcnQodCxyLG4scyxoKX1idWlsZENoYXJ0KHQscixuLGksbyl7dGhpcy5kZXN0cm95KCk7bGV0IGE9dCgpO3RoaXMueEFjY2Vzc29yPWEuYWNjZXNzb3IsdGhpcy54U2NhbGU9YS5zY2FsZSx0aGlzLnhBeGlzPWEuYXhpcyx0aGlzLnhBeGlzLm1hcmdpbigxKS50aWNrTGFiZWxQYWRkaW5nKDMpLG8mJnRoaXMueEF4aXMuZm9ybWF0dGVyKG8pLHRoaXMueVNjYWxlPURTLmdldFlTY2FsZUZyb21UeXBlKG4pLHRoaXMueVNjYWxlLnNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4oKCk9PnRoaXMuZ2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCkpLHRoaXMueUF4aXM9bmV3IE1uLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBzPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihzKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKSx0aGlzLmZpbGxBcmVhPWk7bGV0IGw9bmV3IHpmKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLCgpPT50aGlzLnJlc2V0RG9tYWluKCkpO3RoaXMudG9vbHRpcEludGVyYWN0aW9uPXRoaXMuY3JlYXRlVG9vbHRpcEludGVyYWN0aW9uKGwpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudD1uZXcgTW4uQ29tcG9uZW50O2xldCBjPXRoaXMuYnVpbGRQbG90KHRoaXMueFNjYWxlLHRoaXMueVNjYWxlLGkpO3RoaXMuZ3JpZGxpbmVzPW5ldyBNbi5Db21wb25lbnRzLkdyaWRsaW5lcyh0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7bGV0IHU9bnVsbDtuIT09RmYuTE9HJiYodT1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigiaG9yaXpvbnRhbCIpLHUuc2NhbGUodGhpcy55U2NhbGUpLnZhbHVlKDApKTtsZXQgaD1uZXcgTW4uQ29tcG9uZW50cy5HdWlkZUxpbmVMYXllcigidmVydGljYWwiKTtoLnNjYWxlKHRoaXMueFNjYWxlKS52YWx1ZSgwKSx0aGlzLmNlbnRlcj1uZXcgTW4uQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsdSxoLGMsdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LGxdKSx0aGlzLmNlbnRlci5hZGRDbGFzcygibWFpbiIpLHRoaXMub3V0ZXI9bmV3IE1uLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7biYmKHRoaXMubWFyZ2luQXJlYVBsb3Q9bmV3IE1uLlBsb3RzLkFyZWEsdGhpcy5tYXJnaW5BcmVhUGxvdC54KHRoaXMueEFjY2Vzc29yLHQpLHRoaXMubWFyZ2luQXJlYVBsb3QueShuLmhpZ2hlckFjY2Vzc29yLHIpLHRoaXMubWFyZ2luQXJlYVBsb3QueTAobi5sb3dlckFjY2Vzc29yKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoImZpbGwiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuMyksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJzdHJva2Utd2lkdGgiLDApKSx0aGlzLnNtb290aGVkQWNjZXNzb3I9Yz0+Yy5zbW9vdGhlZDtsZXQgaT1uZXcgTW4uUGxvdHMuTGluZTtpLngodGhpcy54QWNjZXNzb3IsdCksaS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksaS5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMubGluZVBsb3Q9aSx0aGlzLnNldHVwVG9vbHRpcHMoaSk7bGV0IG89bmV3IE1uLlBsb3RzLkxpbmU7aWYoby54KHRoaXMueEFjY2Vzc29yLHQpLG8ueSh0aGlzLnNtb290aGVkQWNjZXNzb3Isciksby5hdHRyKCJzdHJva2UiLChjLHUsaCk9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShoLm1ldGFkYXRhKCkubmFtZSkpLHRoaXMuc21vb3RoTGluZVBsb3Q9byx0aGlzLnN5bWJvbEZ1bmN0aW9uKXtsZXQgYz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtjLngodGhpcy54QWNjZXNzb3IsdCksYy55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYy5hdHRyKCJmaWxsIiwodSxoLGYpPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoZi5tZXRhZGF0YSgpLm5hbWUpKSxjLmF0dHIoIm9wYWNpdHkiLDEpLGMuc2l6ZShfQioyKSxjLnN5bWJvbCgodSxoLGYpPT50aGlzLnN5bWJvbEZ1bmN0aW9uKGYubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3Q9Y31sZXQgYT1uZXcgTW4uUGxvdHMuU2NhdHRlcjthLngodGhpcy54QWNjZXNzb3IsdCksYS55KHRoaXMueVZhbHVlQWNjZXNzb3IsciksYS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSksYS5hdHRyKCJvcGFjaXR5IiwxKSxhLnNpemUoX0IqMiksYS5kYXRhc2V0cyhbdGhpcy5sYXN0UG9pbnRzRGF0YXNldF0pLHRoaXMuc2NhdHRlclBsb3Q9YTtsZXQgcz1uZXcgTW4uUGxvdHMuU2NhdHRlcjtzLngodGhpcy54QWNjZXNzb3IsdCkscy55KGM9PmMuZGlzcGxheVkscikscy5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5uYW1lKSkscy5hdHRyKCJvcGFjaXR5IiwxKSxzLnNpemUoa0t0KjIpLHMuZGF0YXNldHMoW3RoaXMubmFuRGF0YXNldF0pLHMuc3ltYm9sKE1uLlN5bWJvbEZhY3Rvcmllcy50cmlhbmdsZSksdGhpcy5uYW5EaXNwbGF5PXM7bGV0IGw9W3MsYSxvLGldO3JldHVybiB0aGlzLm1hcmdpbkFyZWFQbG90JiZsLnB1c2godGhpcy5tYXJnaW5BcmVhUGxvdCksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJmwucHVzaCh0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCksbmV3IE1uLkNvbXBvbmVudHMuR3JvdXAobCl9aWdub3JlWU91dGxpZXJzKHQpe3QhPT10aGlzLl9pZ25vcmVZT3V0bGllcnMmJih0aGlzLl9pZ25vcmVZT3V0bGllcnM9dCx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMueVNjYWxlLmlnbm9yZU91dGxpZXIodCksdGhpcy5yZXNldFlEb21haW4oKSl9Z2V0VmFsdWVzRm9yWUF4aXNEb21haW5Db21wdXRlKCl7bGV0IHQ9dGhpcy5nZXRBY2Nlc3NvcnNGb3JDb21wdXRpbmdZUmFuZ2UoKSxyPW49PnQubWFwKGk9Pm4uZGF0YSgpLm1hcChvPT5pKG8sLTEsbikpKTtyZXR1cm4genMuZmxhdHRlbkRlZXAodGhpcy5kYXRhc2V0cy5tYXAocikpLmZpbHRlcihpc0Zpbml0ZSl9dXBkYXRlU3BlY2lhbERhdGFzZXRzKCl7bGV0IHQ9dGhpcy5nZXRZQXhpc0FjY2Vzc29yKCkscj10aGlzLmRhdGFzZXRzLm1hcChvPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLmZpbHRlcihsPT4haXNOYU4odChsLC0xLG8pKSk7aWYocy5sZW5ndGg+MCl7bGV0IGw9cy5sZW5ndGgtMTthPXNbbF0sYS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLGEucmVsYXRpdmU9cjAoYSwtMSxvKX1yZXR1cm4gYX0pLmZpbHRlcihvPT5vIT1udWxsKTt0aGlzLmxhc3RQb2ludHNEYXRhc2V0LmRhdGEociksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMubWFwKHRoaXMuY3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKSk7bGV0IG49bz0+e2xldCBhPW51bGwscz1vLmRhdGEoKSxsPTA7Zm9yKDtsPHMubGVuZ3RoJiZhPT1udWxsOylpc05hTih0KHNbbF0sLTEsbykpfHwoYT10KHNbbF0sLTEsbykpLGwrKzthPT1udWxsJiYoYT0wKTtsZXQgYz1bXTtmb3IobD0wO2w8cy5sZW5ndGg7bCsrKWlzTmFOKHQoc1tsXSwtMSxvKSk/KHNbbF0ubmFtZT1vLm1ldGFkYXRhKCkubmFtZSxzW2xdLmRpc3BsYXlZPWEsc1tsXS5yZWxhdGl2ZT1yMChzW2xdLC0xLG8pLGMucHVzaChzW2xdKSk6YT10KHNbbF0sLTEsbyk7cmV0dXJuIGN9LGk9enMuZmxhdHRlbih0aGlzLmRhdGFzZXRzLm1hcChuKSk7dGhpcy5uYW5EYXRhc2V0LmRhdGEoaSl9cmVzZXREb21haW4oKXt0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMucmVzZXRZRG9tYWluKCl9cmVzZXRYRG9tYWluKCl7bGV0IHQ7aWYodGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCl0PXRoaXMuX2RlZmF1bHRYUmFuZ2U7ZWxzZXtsZXQgcj10aGlzLnhTY2FsZTtyLl9kb21haW5NaW49bnVsbCxyLl9kb21haW5NYXg9bnVsbCx0PXIuX2dldEV4dGVudCgpfXRoaXMueFNjYWxlLmRvbWFpbih0KX1yZXNldFlEb21haW4oKXt0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsP3RoaXMueVNjYWxlLmRvbWFpbih0aGlzLl9kZWZhdWx0WVJhbmdlKToodGhpcy55U2NhbGUuYXV0b0RvbWFpbigpLHRoaXMueVNjYWxlLmRvbWFpbih0aGlzLnlTY2FsZS5kb21haW4oKSkpfWdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpe2xldCB0PVt0aGlzLmdldFlBeGlzQWNjZXNzb3IoKV07cmV0dXJuIHRoaXMuZmlsbEFyZWEmJnQucHVzaCh0aGlzLmZpbGxBcmVhLmxvd2VyQWNjZXNzb3IsdGhpcy5maWxsQXJlYS5oaWdoZXJBY2Nlc3NvciksdH1nZXRZQXhpc0FjY2Vzc29yKCl7cmV0dXJuIHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcn1jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24odCl7bGV0IHI9bmV3IFNCLG49KCk9PntyLmVuYWJsZWQoITEpLHRoaXMuaGlkZVRvb2x0aXBzKCl9LGk9KCk9PnIuZW5hYmxlZCghMCk7cmV0dXJuIHQub25QYW5TdGFydChuKSx0Lm9uRHJhZ1pvb21TdGFydChuKSx0Lm9uUGFuRW5kKGkpLHQub25EcmFnWm9vbUVuZChpKSx0Lm9uU2Nyb2xsWm9vbSgoKT0+dGhpcy51cGRhdGVUb29sdGlwQ29udGVudCh0aGlzLl9sYXN0TW91c2VQb3NpdGlvbikpLHIub25Qb2ludGVyTW92ZShvPT57dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249byx0aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KG8pfSksci5vblBvaW50ZXJFeGl0KCgpPT50aGlzLmhpZGVUb29sdGlwcygpKSxyfXVwZGF0ZVRvb2x0aXBDb250ZW50KHQpeyF0aGlzLmxpbmVQbG90fHwod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntsZXQgcj17eDp0LngseTp0Lnl9LG49dGhpcy5ncmlkbGluZXMuY29udGVudCgpLm5vZGUoKS5nZXRCQm94KCksaT10aGlzLmxpbmVQbG90LmRhdGFzZXRzKCkubWFwKGw9PnRoaXMuZmluZENsb3Nlc3RQb2ludChyLGwpKS5maWx0ZXIobD0+Qm9vbGVhbihsKSksbz1Nbi5VdGlscy5ET00uaW50ZXJzZWN0c0JCb3gsYT1pLmZpbHRlcihsPT5vKGwueCxsLnksbil8fGlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKSxzPWEuZmlsdGVyKGw9PiFpc05hTih0aGlzLnlWYWx1ZUFjY2Vzc29yKGwuZGF0dW0sMCxsLmRhdGFzZXQpKSk7aWYoaS5sZW5ndGghPT0wKXt0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJub25lIik7bGV0IGw9dGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50LmNvbnRlbnQoKS5zZWxlY3RBbGwoIi5wb2ludCIpLmRhdGEocyxjPT5jLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtsLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJwb2ludCIsITApLGwuYXR0cigiciIsX0IpLmF0dHIoImN4IixjPT5jLngpLmF0dHIoImN5IixjPT5jLnkpLnN0eWxlKCJzdHJva2UiLCJub25lIikuYXR0cigiZmlsbCIsYz0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpKSxsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLmRyYXdUb29sdGlwcyhhLHIsdGhpcy50b29sdGlwQ29sdW1ucyl9ZWxzZSB0aGlzLmhpZGVUb29sdGlwcygpfSkpfWhpZGVUb29sdGlwcygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWUpLHRoaXMudG9vbHRpcC5oaWRlKCksdGhpcy5zY2F0dGVyUGxvdC5hdHRyKCJkaXNwbGF5IiwiYmxvY2siKSx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikucmVtb3ZlKCl9c2V0dXBUb29sdGlwcyh0KXt0Lm9uRGV0YWNoKCgpPT57dGhpcy50b29sdGlwSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCExKX0pLHQub25BbmNob3IoKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5hdHRhY2hUbyh0KSx0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5lbmFibGVkKCEwKX0pfWRyYXdUb29sdGlwcyh0LHIsbil7aWYoIXQubGVuZ3RoKXt0aGlzLnRvb2x0aXAuaGlkZSgpO3JldHVybn1sZXR7Y29sb3JTY2FsZTppfT10aGlzO249W3t0aXRsZToiIixzdGF0aWM6ITEsZXZhbFR5cGU6SUIuRE9NLGV2YWx1YXRlKGQpe3JldHVybiBIdCh0aGlzKS5zZWxlY3QoInNwYW4iKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLCIifSxlbnRlcihkKXtIdCh0aGlzKS5hcHBlbmQoInNwYW4iKS5jbGFzc2VkKCJzd2F0Y2giLCEwKS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIsKCk9Pmkuc2NhbGUoZC5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpfX0sLi4ubl07bGV0IGE9V3UoZTApLHM9ZD0+TWF0aC5wb3coZC54LXIueCwyKStNYXRoLnBvdyhkLnktci55LDIpLGw9enMubWluKHQubWFwKHMpKSxjPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3I6dGhpcy55VmFsdWVBY2Nlc3Nvcjt0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImFzY2VuZGluZyI/dD16cy5zb3J0QnkodCxkPT5jKGQuZGF0dW0sLTEsZC5kYXRhc2V0KSk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJkZXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKS5yZXZlcnNlKCk6dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD09PSJuZWFyZXN0Ij90PXpzLnNvcnRCeSh0LHMpOnQ9dC5zbGljZSgwKS5yZXZlcnNlKCk7bGV0IHU9dGhpcyxoPUh0KHRoaXMudG9vbHRpcC5jb250ZW50KCkpLnNlbGVjdCgidGFibGUiKSxmPWguc2VsZWN0KCJ0aGVhZCIpLnNlbGVjdEFsbCgidGgiKS5kYXRhKG4sKGQsZyxfKT0+ZC50aXRsZSk7Zi5lbnRlcigpLmFwcGVuZCgidGgiKS50ZXh0KGQ9PmQudGl0bGUpLm5vZGVzKCksZi5leGl0KCkucmVtb3ZlKCk7bGV0IHA9aC5zZWxlY3QoInRib2R5Iikuc2VsZWN0QWxsKCJ0ciIpLmRhdGEodCwoZCxnLF8pPT5kLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKTtwLmNsYXNzZWQoImRpc3RhbnQiLGQ9PntsZXQgZz1kLmRhdGFzZXQuZGF0YSgpWzBdLF89enMubGFzdChkLmRhdGFzZXQuZGF0YSgpKSx5PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKGcsMCxkLmRhdGFzZXQpKSx4PXRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKF8sMCxkLmRhdGFzZXQpKSxiPXRoaXMuc21vb3RoaW5nRW5hYmxlZD9kLmRhdHVtLnNtb290aGVkOnRoaXMueVZhbHVlQWNjZXNzb3IoZC5kYXR1bSwwLGQuZGF0YXNldCk7cmV0dXJuIHIueDx5fHxyLng+eHx8aXNOYU4oYil9KS5jbGFzc2VkKCJjbG9zZXN0IixkPT5zKGQpPT09bCkuZWFjaChmdW5jdGlvbihkKXt1LmRyYXdUb29sdGlwUm93KHRoaXMsbixkKX0pLm9yZGVyKCkscC5leGl0KCkucmVtb3ZlKCkscC5lbnRlcigpLmFwcGVuZCgidHIiKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkubm9kZXMoKSx0aGlzLnRvb2x0aXAudXBkYXRlQW5kUG9zaXRpb24odGhpcy50YXJnZXRTVkcubm9kZSgpKX1kcmF3VG9vbHRpcFJvdyh0LHIsbil7bGV0IGk9dGhpcyxvPUh0KHQpLnNlbGVjdEFsbCgidGQiKS5kYXRhKHIpO28uZWFjaChmdW5jdGlvbihhKXthLnN0YXRpY3x8aS5kcmF3VG9vbHRpcENvbHVtbi5jYWxsKGksdGhpcyxhLG4pfSksby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgidGQiKS5lYWNoKGZ1bmN0aW9uKGEpeyJlbnRlciJpbiBhJiZhLmVudGVyLmNhbGwodGhpcyxuKSxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KX1kcmF3VG9vbHRpcENvbHVtbih0LHIsbil7bGV0e3Ntb290aGluZ0VuYWJsZWQ6aX09dGhpczsiZXZhbFR5cGUiaW4gciYmci5ldmFsVHlwZT09SUIuRE9NP3IuZXZhbHVhdGUuY2FsbCh0LG4se3Ntb290aGluZ0VuYWJsZWQ6aX0pOkh0KHQpLnRleHQoci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSkpfWZpbmRDbG9zZXN0UG9pbnQodCxyKXtsZXQgbj1yLmRhdGEoKS5tYXAoKHMsbCk9PnRoaXMueFNjYWxlLnNjYWxlKHRoaXMueEFjY2Vzc29yKHMsbCxyKSkpLGk9enMuc29ydGVkSW5kZXgobix0LngpO2lmKG4ubGVuZ3RoPT0wKXJldHVybiBudWxsO2lmKGk9PT1uLmxlbmd0aClpPWktMTtlbHNlIGlmKGkhPT0wKXtsZXQgcz1NYXRoLmFicyhuW2ktMV0tdC54KSxsPU1hdGguYWJzKG5baV0tdC54KTtpPXM8bD9pLTE6aX1sZXQgbz1yLmRhdGEoKVtpXSxhPXRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLnNtb290aGVkQWNjZXNzb3IobyxpLHIpOnRoaXMueVZhbHVlQWNjZXNzb3IobyxpLHIpO3JldHVybnt4Om5baV0seTp0aGlzLnlTY2FsZS5zY2FsZShhKSxkYXR1bTpvLGRhdGFzZXQ6cn19cmVzbW9vdGhEYXRhc2V0KHQpe2xldCByPXQuZGF0YSgpLG49dGhpcy5zbW9vdGhpbmdXZWlnaHQsaT1yLmxlbmd0aD4wPzA6TmFOLG89MCxhPXIubWFwKChsLGMpPT50aGlzLnlWYWx1ZUFjY2Vzc29yKGwsYyx0KSkscz1hLmV2ZXJ5KGw9Pmw9PWFbMF0pO3IuZm9yRWFjaCgobCxjKT0+e2xldCB1PWFbY107aWYoc3x8IU51bWJlci5pc0Zpbml0ZSh1KSlsLnNtb290aGVkPXU7ZWxzZXtpPWkqbisoMS1uKSp1LG8rKztsZXQgaD0xO24hPT0xJiYoaD0xLU1hdGgucG93KG4sbykpLGwuc21vb3RoZWQ9aS9ofX0pfWdldERhdGFzZXQodCl7cmV0dXJuIHRoaXMubmFtZTJkYXRhc2V0c1t0XT09PXZvaWQgMCYmKHRoaXMubmFtZTJkYXRhc2V0c1t0XT1uZXcgTW4uRGF0YXNldChbXSx7bmFtZTp0LG1ldGE6bnVsbH0pKSx0aGlzLm5hbWUyZGF0YXNldHNbdF19c3RhdGljIGdldFlTY2FsZUZyb21UeXBlKHQpe2lmKHQ9PT1GZi5MT0cpcmV0dXJuIG5ldyBBQjtpZih0PT09RmYuTElORUFSKXJldHVybiBuZXcgTUI7dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgeVNjYWxlIHR5cGUgIit0KX1zZXRWaXNpYmxlU2VyaWVzKHQpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0PXQuc29ydCgpLHQucmV2ZXJzZSgpLHRoaXMuc2VyaWVzTmFtZXM9dH1kaXNhYmxlQ2hhbmdlcygpe3RoaXMuZGlydHlEYXRhc2V0cy5zaXplfHwodGhpcy5saW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5zbW9vdGhMaW5lUGxvdCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyhbXSksdGhpcy5tYXJnaW5BcmVhUGxvdCYmdGhpcy5tYXJnaW5BcmVhUGxvdC5kYXRhc2V0cyhbXSkpfWNvbW1pdENoYW5nZXMoKXt0aGlzLmRhdGFzZXRzPXRoaXMuc2VyaWVzTmFtZXMubWFwKHQ9PnRoaXMuZ2V0RGF0YXNldCh0KSksWy4uLnRoaXMuZGlydHlEYXRhc2V0c10uZm9yRWFjaCh0PT57dGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnJlc21vb3RoRGF0YXNldCh0aGlzLmdldERhdGFzZXQodCkpfSksdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSx0aGlzLmxpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCYmdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpLHRoaXMuZGlydHlEYXRhc2V0cy5jbGVhcigpfWNyZWF0ZVNhbXBsZWREYXRhc2V0Rm9yTWFya2Vycyh0KXtsZXQgcj10LmRhdGEoKTtpZihyLmxlbmd0aDw9VUt0KXJldHVybiB0O2xldCBuPU1hdGguY2VpbChyLmxlbmd0aC9VS3QpLGk9bmV3IEFycmF5KE1hdGguZmxvb3Ioci5sZW5ndGgvbikpO2ZvcihsZXQgbz0wLGE9MDtvPGkubGVuZ3RoO28rKyxhKz1uKWlbb109clthXTtyZXR1cm4gbmV3IE1uLkRhdGFzZXQoaSx0Lm1ldGFkYXRhKCkpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmRpc2FibGVDaGFuZ2VzKCksdGhpcy5nZXREYXRhc2V0KHQpLmRhdGEociksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoTXgoS2woe30sdGhpcy5nZXREYXRhc2V0KHQpLm1ldGFkYXRhKCkpLHttZXRhOnJ9KSksdGhpcy5kaXJ0eURhdGFzZXRzLmFkZCh0KX1zbW9vdGhpbmdVcGRhdGUodCl7dGhpcy5zbW9vdGhpbmdXZWlnaHQ9dCx0aGlzLmRhdGFzZXRzLmZvckVhY2gocj0+dGhpcy5yZXNtb290aERhdGFzZXQocikpLHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8KHRoaXMubGluZVBsb3QuYWRkQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMuc21vb3RoZWRBY2Nlc3Nvcix0aGlzLnlTY2FsZSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSEwLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cykpLHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90JiZ0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdC55KHRoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpLHRoaXMueVNjYWxlKSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpfXNtb290aGluZ0Rpc2FibGUoKXt0aGlzLnNtb290aGluZ0VuYWJsZWQmJih0aGlzLmxpbmVQbG90LnJlbW92ZUNsYXNzKCJnaG9zdCIpLHRoaXMuc2NhdHRlclBsb3QueSh0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy51cGRhdGVTcGVjaWFsRGF0YXNldHMoKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpfXNldENvbG9yU2NhbGUodCl7dGhpcy5jb2xvclNjYWxlPXR9c2V0VG9vbHRpcENvbHVtbnModCl7dGhpcy50b29sdGlwQ29sdW1ucz10fXNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHQpe3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9dH1yZW5kZXJUbyh0KXt0aGlzLnRhcmdldFNWRz10LHRoaXMub3V0ZXIucmVuZGVyVG8odCksdGhpcy5fZGVmYXVsdFhSYW5nZSE9bnVsbCYmdGhpcy5yZXNldFhEb21haW4oKSx0aGlzLl9kZWZhdWx0WVJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WURvbWFpbigpLHRoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXRJblJhZigpfXJlZHJhdygpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpLHRoaXMub3V0ZXIucmVkcmF3KCl9KX1tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMubWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCl7aWYodGhpcy5fbGFzdERyYXdCQm94KXtsZXR7d2lkdGg6dH09dGhpcy5fbGFzdERyYXdCQm94LHt3aWR0aDpyfT10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dD09MCYmdDxyJiZ0aGlzLm91dGVyLmludmFsaWRhdGVDYWNoZSgpfXRoaXMuX2xhc3REcmF3QkJveD10aGlzLnRhcmdldFNWRy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9ZGVzdHJveSgpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9pbnZhbGlkYXRlTGF5b3V0UmFmKSx0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKX1vbkFuY2hvcih0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLm9uQW5jaG9yKHQpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHQodGhpcy54QXhpcy5nZXRTY2FsZSgpKSYmdCh0aGlzLnlBeGlzLmdldFNjYWxlKCkpO2Z1bmN0aW9uIHQocil7bGV0IG49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLGk9ci5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpO3JldHVybiBpWzBdPT09blswXSYmaVsxXT09PW5bMV19fX07dmFyIEdLdD1FZShPZSgpLDEpLG5zdD1FZSh3bCgpLDEpO19zKHttb2R1bGVOYW1lOiJwbG90dGFibGUtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAKLnBsb3R0YWJsZS1jb2xvcnMtMCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzUyNzljNzsgLyogSU5ESUdPICovCn0KCi5wbG90dGFibGUtY29sb3JzLTEgewogIGJhY2tncm91bmQtY29sb3I6ICNmZDM3M2U7IC8qIENPUkFMX1JFRCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy0yIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjNjMjYxOyAvKiBGRVJOICovCn0KCi5wbG90dGFibGUtY29sb3JzLTMgewogIGJhY2tncm91bmQtY29sb3I6ICNmYWQ0MTk7IC8qIEJSSUdIVF9TVU4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmI2ZjsgLyogSkFDQVJUQSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy01IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OTM5OyAvKiBCVVJOSU5HX09SQU5HRSAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy02IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGIyZTY1OyAvKiBDRVJJU0VfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTcgewogIGJhY2tncm91bmQtY29sb3I6ICM5OWNlNTA7IC8qIENPTklGRVIgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk2MjU2NTsgLyogUk9ZQUxfSEVBVEggKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtOSB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzA2Y2NjYzsgLyogUk9CSU5TX0VHR19CTFVFICovCn0KCi8qKgogKiBVc2VyLXN1cHBsaWVkIHJlbmRlclRvIGVsZW1lbnQuCiAqLwoucGxvdHRhYmxlIHsKICBkaXNwbGF5OiBibG9jazsgLyogbXVzdCBiZSBibG9jayBlbGVtZW50cyBmb3Igd2lkdGgvaGVpZ2h0IGNhbGN1bGF0aW9ucyB0byB3b3JrIGluIEZpcmVmb3guICovCiAgcG9pbnRlci1ldmVudHM6IHZpc2libGVGaWxsOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAvKioKICAgKiBQcmUgMy4wLCB1c2VycyBjb3VsZCBzZXQgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcm9vdCBlbGVtZW50IGluIHR3byB3YXlzOiBlaXRoZXIgdXNpbmcgQ1NTCiAgICogKGlubGluZSBvciB0aHJvdWdoIGEgc3R5bGVzaGVldCksIG9yIHVzaW5nIHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMuIEJ5IGRlZmF1bHQsIHdlCiAgICogc2V0IHRoZSBTVkcgd2lkdGgvaGVpZ2h0IGF0dHJpYnV0ZXMgdG8gMTAwJS4KICAgKgogICAqIFBvc3QgMy4wIHRoZSByb290IGVsZW1lbnQgaXMgYWx3YXlzIGEgbm9ybWFsIGRpdiBhbmQgdGhlIG9ubHkgd2F5IHRvIHNldCB0aGUgZGltZW5zaW9ucyBpcwogICAqIHRvIHVzZSBDU1MuIFRvIHJlcGxpY2F0ZSB0aGUgIjEwMCUtYnktZGVmYXVsdCIgYmVoYXZpb3IsIHdlIGFwcGx5IHdpZHRoL2hlaWdodCAxMDAlLgogICAqLwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIFRoZSBfZWxlbWVudCB0aGF0IHJvb3RzIGVhY2ggQ29tcG9uZW50J3MgRE9NLgogKi8KLnBsb3R0YWJsZSAuY29tcG9uZW50IHsKICAvKiBBbGxvdyBjb21wb25lbnRzIHRvIGJlIHBvc2l0aW9uZWQgd2l0aCBleHBsaWNpdCBsZWZ0L3RvcC93aWR0aC9oZWlnaHQgc3R5bGVzICovCiAgcG9zaXRpb246IGFic29sdXRlOwp9CgoucGxvdHRhYmxlIC5iYWNrZ3JvdW5kLWNvbnRhaW5lciwKLnBsb3R0YWJsZSAuY29udGVudCwKLnBsb3R0YWJsZSAuZm9yZWdyb3VuZC1jb250YWluZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7Cn0KCi8qKgogKiBEb24ndCBhbGxvdyBzdmcgZWxlbWVudHMgYWJvdmUgdGhlIGNvbnRlbnQgdG8gc3RlYWwgZXZlbnRzCiAqLwoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy1oaWRkZW4gewogIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5wbG90dGFibGUgLmNvbXBvbmVudC1vdmVyZmxvdy12aXNpYmxlIHsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMtY29udGFpbmVyIHsKICB3aWR0aDogMTAwJTsKICBoZWlnaHQ6IDEwMCU7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAucGxvdC1jYW52YXMgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICAvKioKICAgKiBQbGF5IHdlbGwgd2l0aCBkZWZlcnJlZCByZW5kZXJpbmcuCiAgICovCiAgdHJhbnNmb3JtLW9yaWdpbjogMHB4IDBweCAwcHg7Cn0KCi5wbG90dGFibGUgdGV4dCB7CiAgdGV4dC1yZW5kZXJpbmc6IGdlb21ldHJpY1ByZWNpc2lvbjsKfQoKLnBsb3R0YWJsZSAubGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuYmFyLWxhYmVsLXRleHQtYXJlYSB0ZXh0LAoucGxvdHRhYmxlIC5zY2F0dGVyLWxhYmVsLXRleHQtYXJlYSB0ZXh0IHsKICBmb250LXNpemU6IDEycHg7Cn0KCi5wbG90dGFibGUgLmxhYmVsLWFyZWEgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDE0cHg7Cn0KCi5wbG90dGFibGUgLmxpZ2h0LWxhYmVsIHRleHQgewogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5kYXJrLWxhYmVsIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7Cn0KCi5wbG90dGFibGUgLm9mZi1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5wbG90dGFibGUgLnN0YWNrZWQtYmFyLXBsb3QgLm9mZi1iYXItbGFiZWwgewogIC8qIEhBQ0tIQUNLICMyNzk1OiBjb3JyZWN0IG9mZi1iYXIgbGFiZWwgbG9naWMgdG8gYmUgaW1wbGVtZW50ZWQgb24gU3RhY2tlZEJhciAqLwogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Owp9CgoucGxvdHRhYmxlIC5heGlzLWxhYmVsIHRleHQgewogIGZvbnQtc2l6ZTogMTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsZXR0ZXItc3BhY2luZzogMXB4OwogIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLnBsb3R0YWJsZSAudGl0bGUtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUuYmFzZWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyBsaW5lLnRpY2stbWFyayB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIHRleHQgewogIGZpbGw6ICMzMjMxM0Y7CiAgZm9udC1zaXplOiAxMnB4OwogIGZvbnQtd2VpZ2h0OiAyMDA7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1jaXJjbGUgewogIGZpbGw6IHdoaXRlOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHN0cm9rZTogI0NDQzsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgLmFubm90YXRpb24tcmVjdCB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIGZpbGw6IHdoaXRlOwp9CgoucGxvdHRhYmxlIC5iYXItcGxvdCAuYmFzZWxpbmUgewogIHN0cm9rZTogIzk5OTsKfQoKLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogIHN0cm9rZTogIzNDM0MzQzsgLyogaGFja2hhY2s6IGdyaWRsaW5lcyBzaG91bGQgYmUgc29saWQ7IHNlZSAjODIwICovCiAgb3BhY2l0eTogMC4yNTsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuc2VsZWN0aW9uLWJveC1sYXllciAuc2VsZWN0aW9uLWFyZWEgewogIGZpbGw6IGJsYWNrOwogIGZpbGwtb3BhY2l0eTogMC4wMzsKICBzdHJva2U6ICNDQ0M7Cn0KLyogRHJhZ0JveExheWVyICovCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlIC5kcmFnLWVkZ2UtbHIgewogIGN1cnNvcjogZXctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLnktcmVzaXphYmxlIC5kcmFnLWVkZ2UtdGIgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdGwgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLXRyIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1ibCB7CiAgY3Vyc29yOiBuZXN3LXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItYnIgewogIGN1cnNvcjogbndzZS1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhIHsKICBjdXJzb3I6IG1vdmU7IC8qIElFIGZhbGxiYWNrICovCiAgY3Vyc29yOiAtbW96LWdyYWI7CiAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgY3Vyc29yOiBncmFiOwp9CgoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci5tb3ZhYmxlIC5zZWxlY3Rpb24tYXJlYTphY3RpdmUgewogIGN1cnNvcjogLW1vei1ncmFiYmluZzsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYmJpbmc7CiAgY3Vyc29yOiBncmFiYmluZzsKfQovKiAvRHJhZ0JveExheWVyICovCgoucGxvdHRhYmxlIC5ndWlkZS1saW5lLWxheWVyIGxpbmUuZ3VpZGUtbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5kcmFnLWxpbmUtbGF5ZXIuZW5hYmxlZC52ZXJ0aWNhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLmhvcml6b250YWwgbGluZS5kcmFnLWVkZ2UgewogIGN1cnNvcjogbnMtcmVzaXplOwp9CgoucGxvdHRhYmxlIC5sZWdlbmQgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCByZWN0LnN3YXRjaC1ib3VuZGluZy1ib3ggewogIGZpbGw6IG5vbmU7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4OwogIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoucGxvdHRhYmxlIC53YXRlcmZhbGwtcGxvdCBsaW5lLmNvbm5lY3RvciB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5waWUtcGxvdCAuYXJjLm91dGxpbmUgewogIHN0cm9rZS1saW5lam9pbjogcm91bmQ7Cn0KCmB9KTt2YXIgaTA7KGZ1bmN0aW9uKGUpe2UuR1JPVVA9IkciLGUuRElWPSJESVYiLGUuU1ZHPSJTVkciLGUuVEVYVD0iVEVYVCJ9KShpMHx8KGkwPXt9KSk7dmFyIGVzdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnVuaXF1ZUlkPTAsdGhpcy5yb290PXR9ZXhwb3J0QXNTdHJpbmcoKXtsZXQgdD10aGlzLmNvbnZlcnQodGhpcy5yb290KTtpZighdClyZXR1cm4iIjtsZXQgcj10aGlzLmNyZWF0ZVJvb3RTdmcoKTtyZXR1cm4gci5hcHBlbmRDaGlsZCh0KSxyLm91dGVySFRNTH1jcmVhdGVVbmlxdWVJZCh0KXtyZXR1cm5gJHt0fV8ke3RoaXMudW5pcXVlSWQrK31gfWdldFNpemUoKXtyZXR1cm4gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNyZWF0ZVJvb3RTdmcoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdmciKSxyPXRoaXMuZ2V0U2l6ZSgpO3JldHVybiB0LnNldEF0dHJpYnV0ZU5TKCJzdmciLCJ2aWV3Qm94IixgMCAwICR7ci53aWR0aH0gJHtyLmhlaWdodH1gKSx0LnNldEF0dHJpYnV0ZSgieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLHR9Y3JlYXRlQ29udmVydGVkTm9kZSh0KXtsZXQgcj10Lm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7aWYodC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJihyPT1pMC5ESVZ8fHI9PWkwLlNWRykpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaTAuR1JPVVApLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCksbz1wYXJzZUludChpLmxlZnQsMTApLGE9cGFyc2VJbnQoaS50b3AsMTApO2lmKG98fGEpe2xldCBzPXRoaXMuY3JlYXRlVW5pcXVlSWQoImNsaXAiKTtuLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7b30sICR7YX0pYCksbi5zZXRBdHRyaWJ1dGUoImNsaXAtcGF0aCIsYHVybCgjJHtzfSlgKTtsZXQgbD1wYXJzZUludChpLndpZHRoLDEwKSxjPXBhcnNlSW50KGkuaGVpZ2h0LDEwKSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInJlY3QiKTt1LnNldEF0dHJpYnV0ZSgid2lkdGgiLFN0cmluZyhsKSksdS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsU3RyaW5nKGMpKTtsZXQgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoInN2ZyIsImNsaXBQYXRoIik7aC5pZD1zLGguYXBwZW5kQ2hpbGQodSksbi5hcHBlbmRDaGlsZChoKX1yZXR1cm4gbn1lbHNlIHJldHVybiB0LmNsb25lTm9kZSgpfWNvbnZlcnQodCl7bGV0IHI9dGhpcy5jcmVhdGVDb252ZXJ0ZWROb2RlKHQpO3JldHVybiBBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKGk9PnRoaXMuY29udmVydChpKSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goaT0+e3IuYXBwZW5kQ2hpbGQoaSl9KSxyLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PWkwLkdST1VQJiYhci5oYXNDaGlsZE5vZGVzKCl8fHRoaXMuc2hvdWxkT21pdE5vZGUodCk/bnVsbDp0aGlzLnN0cmlwQ2xhc3ModGhpcy50cmFuc2ZlclN0eWxlKHQscikpfXN0cmlwQ2xhc3ModCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiZ0LnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSx0fXRyYW5zZmVyU3R5bGUodCxyKXtpZihyLm5vZGVUeXBlIT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gcjtsZXQgbj1yLGk9ci5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIGk9PWkwLlRFWFQmJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7Zm9udEZhbWlseTpvLmZvbnRGYW1pbHksZm9udFNpemU6by5mb250U2l6ZSxmb250V2VpZ2h0Om8uZm9udFdlaWdodH0pLGkhPWkwLkdST1VQJiYobi5zZXRBdHRyaWJ1dGUoImZpbGwiLG8uZmlsbCksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsby5zdHJva2UpLG4uc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLG8uc3Ryb2tlV2lkdGgpKSxvLm9wYWNpdHkhPSIxIiYmbi5zZXRBdHRyaWJ1dGUoIm9wYWNpdHkiLG8ub3BhY2l0eSkscn1zaG91bGRPbWl0Tm9kZSh0KXtyZXR1cm4hMX19LExCPWNsYXNzIGV4dGVuZHMgZXN0e3Nob3VsZE9taXROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERT90LmNsYXNzTGlzdC5jb250YWlucygic2NhdHRlci1wbG90Iik6ITF9fTtfcyh7bW9kdWxlTmFtZToidnotcGFuLXpvb20tc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuaGVscCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGFuaW1hdGlvbi1kZWxheTogMXM7CiAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMXM7CiAgICAgIGFuaW1hdGlvbi1uYW1lOiBmYWRlLW91dDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgzMCwgMzAsIDMwLCAwLjYpOwogICAgICBib3R0b206IDA7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgbGVmdDogMDsKICAgICAgb3BhY2l0eTogMTsKICAgICAgcGFkZGluZzogMjBweDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgcmlnaHQ6IDA7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICAuaGVscCA+IHNwYW4gewogICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZS1vdXQgewogICAgICAwJSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgMTAwJSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgfQogIGB9KTt2YXIga3FlPVd1KGUwKSxxS3Q9ZT0+aXNOYU4oZSk/Ik5hTiI6a3FlKGUpLGlzdD1be3RpdGxlOiJOYW1lIixldmFsdWF0ZTplPT5lLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlNtb290aGVkIixldmFsdWF0ZShlLHQpe2xldHtzbW9vdGhpbmdFbmFibGVkOnJ9PXQ7cmV0dXJuIHFLdChyP2UuZGF0dW0uc21vb3RoZWQ6ZS5kYXR1bS5zY2FsYXIpfX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6ZT0+cUt0KGUuZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTplPT5iNChlLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOmU9PnlCKGUuZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6ZT0+dkIocjAoZS5kYXR1bSwtMSxlLmRhdGFzZXQpKX1dLFpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IG5zdC5TY2FsZXMuQ29sb3IoKS5yYW5nZShqYi5zbGljZSgwKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkPSExLHRoaXMuc21vb3RoaW5nV2VpZ2h0PS42LHRoaXMueFR5cGU9bnVsbCx0aGlzLnhDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9bnVsbCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXQ9PnQuc2NhbGFyLHRoaXMudG9vbHRpcENvbHVtbnM9aXN0LHRoaXMueVNjYWxlVHlwZT1GZi5MSU5FQVIsdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy50b29sdGlwU29ydGluZ01ldGhvZD0iZGVmYXVsdCIsdGhpcy50b29sdGlwUG9zaXRpb249R3YuQk9UVE9NLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZT17fSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLmNoYXJ0ZGl2LCEwKX1hdHRhY2hlZCgpe2xldCB0PXtjYXB0dXJlOiEwLHBhc3NpdmU6ITB9O3RoaXMuX2xpc3Rlbih0aGlzLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcC5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleWRvd24iLHRoaXMuX29uS2V5RG93bi5iaW5kKHRoaXMpLHQpLHRoaXMuX2xpc3Rlbih3aW5kb3csImtleXVwIix0aGlzLl9vbktleVVwLmJpbmQodGhpcyksdCl9ZGV0YWNoZWQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LmRlc3Ryb3koKSx0aGlzLl9jaGFydD12b2lkIDApLHRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKCh7bm9kZTp0LGV2ZW50TmFtZTpyLGZ1bmM6bixvcHRpb246aX0pPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbixpKX0pLHRoaXMuX2xpc3RlbmVycy5jbGVhcigpKX1fbGlzdGVuKHQscixuLGk9e30pe3RoaXMuX2xpc3RlbmVyc3x8KHRoaXMuX2xpc3RlbmVycz1uZXcgU2V0KSx0aGlzLl9saXN0ZW5lcnMuYWRkKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSksdC5hZGRFdmVudExpc3RlbmVyKHIsbixpKX1fb25LZXlEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbktleVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoInBhbmtleSIsemYuaXNQYW5LZXkodCkpfV9vbk1vdXNlRG93bih0KXt0aGlzLnRvZ2dsZUNsYXNzKCJtb3VzZWRvd24iLCEwKX1fb25Nb3VzZVVwKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITEpfWlzRGF0YUZpdFRvRG9tYWluKCl7cmV0dXJuIHRoaXMuX2NoYXJ0P3RoaXMuX2NoYXJ0LmlzRGF0YUZpdFRvRG9tYWluKCk6ITB9c2V0VmlzaWJsZVNlcmllcyh0KXtHS3QuaXNFcXVhbCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUsdCl8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpfXJlc2V0RG9tYWluKCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlc2V0RG9tYWluKCl9cmVkcmF3KCl7dGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnJlZHJhdygpfV9tYWtlQ2hhcnQoKXt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsKSx0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsO2xldCB0PXRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZDtpZighdGhpcy54VHlwZSYmIXQ/dD1YYXQ6dGhpcy54VHlwZSYmKHQ9KCk9PnhCKHRoaXMueFR5cGUpKSwhKCF0fHwhdGhpcy55VmFsdWVBY2Nlc3Nvcnx8IXRoaXMudG9vbHRpcENvbHVtbnMpKXt2YXIgcj1uZXcgRFModCx0aGlzLnlWYWx1ZUFjY2Vzc29yLHRoaXMueVNjYWxlVHlwZSx0aGlzLmNvbG9yU2NhbGUsdGhpcy4kLnRvb2x0aXAsdGhpcy50b29sdGlwQ29sdW1ucyx0aGlzLmZpbGxBcmVhLHRoaXMuZGVmYXVsdFhSYW5nZSx0aGlzLmRlZmF1bHRZUmFuZ2UsdGhpcy5zeW1ib2xGdW5jdGlvbix0aGlzLnhBeGlzRm9ybWF0dGVyKSxuPUh0KHRoaXMuJC5jaGFydGRpdik7ci5yZW5kZXJUbyhuKSx0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXIsdGhpcy5fY2hhcnQub25BbmNob3IoKCk9PnRoaXMuZmlyZSgiY2hhcnQtYXR0YWNoZWQiKSl9fSwzNTApfV9yZWxvYWRGcm9tQ2FjaGUoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZm9yRWFjaCh0PT57dGhpcy5fY2hhcnQuc2V0U2VyaWVzRGF0YSh0LHRoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XXx8W10pfSksdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlLmZpbHRlcih0PT50aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlW3RdKS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNNZXRhZGF0YSh0LHRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pfSksdGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX2NoYXJ0LmNvbW1pdENoYW5nZXMoKSl9X3Ntb290aGluZ0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLnNtb290aGluZ0VuYWJsZWQ/dGhpcy5fY2hhcnQuc21vb3RoaW5nVXBkYXRlKHRoaXMuc21vb3RoaW5nV2VpZ2h0KTp0aGlzLl9jaGFydC5zbW9vdGhpbmdEaXNhYmxlKCkpfV9vdXRsaWVyc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0Lmlnbm9yZVlPdXRsaWVycyh0aGlzLmlnbm9yZVlPdXRsaWVycyl9X2NvbG9yU2NhbGVDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHwodGhpcy5fY2hhcnQuc2V0Q29sb3JTY2FsZSh0aGlzLmNvbG9yU2NhbGUpLHRoaXMuX2NoYXJ0LnJlZHJhdygpKX1fdG9vbHRpcENvbHVtbnNDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwQ29sdW1ucyh0aGlzLnRvb2x0aXBDb2x1bW5zKX1fdG9vbHRpcFNvcnRpbmdNZXRob2RDaGFuZ2VkKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5zZXRUb29sdGlwU29ydGluZ01ldGhvZCh0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kKX1nZXRFeHBvcnRlcigpe3JldHVybiBuZXcgTEIodGhpcy4kLmNoYXJ0ZGl2KX19O1pyLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydGRpdiI+PC9kaXY+CiAgICA8dnotY2hhcnQtdG9vbHRpcAogICAgICBpZD0idG9vbHRpcCIKICAgICAgcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgIGNvbnRlbnQtY29tcG9uZW50LW5hbWU9InZ6LWxpbmUtY2hhcnQtdG9vbHRpcCIKICAgID48L3Z6LWNoYXJ0LXRvb2x0aXA+CiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlIGluY2x1ZGU9InZ6LXBhbi16b29tLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICBkaXYgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiAubWFpbiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICA6aG9zdCgucGFua2V5KSAjY2hhcnRkaXYgOm5vdCguZHJhZy16b29taW5nKSAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7CiAgICAgICAgY3Vyc29yOiBncmFiOwogICAgICB9CgogICAgICA6aG9zdCgubW91c2Vkb3duKSAjY2hhcnRkaXYgLnBhbm5pbmcgLm1haW4gewogICAgICAgIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICB9CgogICAgICAjY2hhcnRkaXYgewogICAgICAgIGNvbnRhaW46IHN0cmljdDsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IGxpbmUuZ3VpZGUtbGluZSB7CiAgICAgICAgc3Ryb2tlOiAjOTk5OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KICAgICAgI2NoYXJ0ZGl2OmhvdmVyIC5tYWluIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuYXhpcyB0ZXh0IHsKICAgICAgICBmaWxsOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC5wbG90dGFibGUgLmdyaWRsaW5lcyBsaW5lIHsKICAgICAgICBzdHJva2U6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLG5zdC5TY2FsZXMuQ29sb3IpXSxaci5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxaci5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieEF4aXNGb3JtYXR0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxaci5wcm90b3R5cGUsInlWYWx1ZUFjY2Vzc29yIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwieVNjYWxlVHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFpyLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfY2hhcnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwiX3Zpc2libGVTZXJpZXNDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNEYXRhQ2FjaGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJfc2VyaWVzTWV0YWRhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLCJ4VHlwZSIsInlWYWx1ZUFjY2Vzc29yIiwieVNjYWxlVHlwZSIsImlzQXR0YWNoZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydCIsbnVsbCk7RShbQnQoIl9jaGFydCIsIl92aXNpYmxlU2VyaWVzQ2FjaGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3JlbG9hZEZyb21DYWNoZSIsbnVsbCk7RShbQnQoInNtb290aGluZ0VuYWJsZWQiLCJzbW9vdGhpbmdXZWlnaHQiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Ntb290aGluZ0NoYW5nZWQiLG51bGwpO0UoW0J0KCJpZ25vcmVZT3V0bGllcnMiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX291dGxpZXJzQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yU2NhbGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcENvbHVtbnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zQ2hhbmdlZCIsbnVsbCk7RShbQnQoInRvb2x0aXBTb3J0aW5nTWV0aG9kIiwiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxaci5wcm90b3R5cGUsIl90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQiLG51bGwpO1pyPUUoW3l0KCJ2ei1saW5lLWNoYXJ0MiIpXSxacik7dmFyIHJzdD1jbGFzcyBleHRlbmRzIG10e307cnN0LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgPHRhYmxlPgogICAgICAgIDx0aGVhZD48L3RoZWFkPgogICAgICAgIDx0Ym9keT48L3Rib2R5PgogICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIHRib2R5IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIxcHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICB9CgogICAgICAuc3dhdGNoIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICB9CgogICAgICAuY2xvc2VzdCAuc3dhdGNoIHsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggI2ZmZjsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIHBhZGRpbmc6IDAgNXB4OwogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5kaXN0YW50IHRkOm5vdCguc3dhdGNoKSB7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CgogICAgICAuZ2hvc3QgewogICAgICAgIG9wYWNpdHk6IDAuMjsKICAgICAgICBzdHJva2Utd2lkdGg6IDFweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO3JzdD1FKFt5dCgidnotbGluZS1jaGFydC10b29sdGlwIildLHJzdCk7dmFyIG9zdD1bXSxScWU9MCxOcWU9V0t0LnRocm90dGxlKGZ1bmN0aW9uIGUoKXtpZihvc3QubGVuZ3RoPT0wKXJldHVybjtsZXQgdD1vc3Quc2hpZnQoKTt0JiZ0LmFjdGl2ZSYmKHQucmVkcmF3KCksdC5fbWF5YmVSZW5kZXJlZEluQmFkU3RhdGU9ITEpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShScWUpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LDEwMCksSG49Y2xhc3MgZXh0ZW5kcyBrUyhHdChtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZWRyYXdSYWY9bnVsbCx0aGlzLmFjdGl2ZT0hMSx0aGlzLmxvZ1NjYWxlQWN0aXZlPSExLHRoaXMuY29sb3JTY2FsZT17c2NhbGU6Zm59LHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMCx0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMX1vbkxvYWRGaW5pc2goKXt0aGlzLmNvbW1pdENoYW5nZXMoKSx0aGlzLmRhdGFUb0xvYWQubGVuZ3RoPjAmJnRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZCYmKHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMSx0aGlzLmdldENoYXJ0KCkucmVzZXREb21haW4oKSksdGhpcy5yZWRyYXcoKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKX1leHBvcnRBc1N2Z1N0cmluZygpe3JldHVybiB0aGlzLmdldENoYXJ0KCkuZ2V0RXhwb3J0ZXIoKS5leHBvcnRBc1N0cmluZygpfWdldENoYXJ0KCl7cmV0dXJuIHRoaXMuJC5jaGFydH1yZXNldERvbWFpbigpe3RoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpfXNldFNlcmllc0RhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzRGF0YSh0LHIpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5nZXRDaGFydCgpLnNldFNlcmllc01ldGFkYXRhKHQscil9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZ2V0Q2hhcnQoKS5jb21taXRDaGFuZ2VzKCl9cmVkcmF3KCl7dGhpcy5fcmVkcmF3UmFmIT09bnVsbCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmVkcmF3UmFmKSx0aGlzLl9yZWRyYXdSYWY9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuYWN0aXZlP3RoaXMuZ2V0Q2hhcnQoKS5yZWRyYXcoKTp0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMH0pfV9sb2FkS2V5Q2hhbmdlZCgpe3RoaXMucmVzZXQoKSx0aGlzLl9yZXNldERvbWFpbk9uTmV4dExvYWQ9ITB9X2RhdGFTZXJpZXNDaGFuZ2VkKCl7dGhpcy5nZXRDaGFydCgpLnNldFZpc2libGVTZXJpZXModGhpcy5kYXRhU2VyaWVzKX1fbG9nU2NhbGVDaGFuZ2VkKHQpe2xldCByPXRoaXMuZ2V0Q2hhcnQoKTtyLnlTY2FsZVR5cGU9dD9GZi5MT0c6RmYuTElORUFSLHRoaXMucmVkcmF3KCl9X2ZpeEJhZFN0YXRlV2hlbkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSYmKG9zdC5wdXNoKHRoaXMpLE5xZSgpKX1fb25DaGFydEF0dGFjaGVkKCl7dGhpcy5hY3RpdmV8fCh0aGlzLl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMCl9fTtIbi50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgPHZ6LWxpbmUtY2hhcnQyCiAgICAgICAgaWQ9ImNoYXJ0IgogICAgICAgIGRhdGEtbG9hZGluZyQ9IltbZGF0YUxvYWRpbmddXSIKICAgICAgICBkYXRhLWxvYWRlZC1vbmNlJD0iW1tkYXRhTG9hZGVkQXRMZWFzdE9uY2VdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tjb2xvclNjYWxlXV0iCiAgICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgICBkZWZhdWx0LXktcmFuZ2U9IltbZGVmYXVsdFlSYW5nZV1dIgogICAgICAgIGZpbGwtYXJlYT0iW1tmaWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIG9uLWNoYXJ0LWF0dGFjaGVkPSJfb25DaGFydEF0dGFjaGVkIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tzeW1ib2xGdW5jdGlvbl1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1t0b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249IltbdG9vbHRpcFBvc2l0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtY29tcG9uZW50cy1jcmVhdGlvbi1tZXRob2Q9IltbeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbeVZhbHVlQWNjZXNzb3JdXSIKICAgICAgPjwvdnotbGluZS1jaGFydDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9hZGluZ11dIj4KICAgICAgICA8ZGl2IGlkPSJsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIj4KICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlPSIiPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICA6aG9zdChbX21heWJlLXJlbmRlcmVkLWluLWJhZC1zdGF0ZV0pIHZ6LWxpbmUtY2hhcnQgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgI2NoYXJ0LWFuZC1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAjbG9hZGluZy1zcGlubmVyLWNvbnRhaW5lciB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDIgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgdnotbGluZS1jaGFydDJbZGF0YS1sb2FkaW5nXSB7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfZml4QmFkU3RhdGVXaGVuQWN0aXZlIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEhuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9nU2NhbGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJsb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInhDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSG4ucHJvdG90eXBlLCJ4VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEhuLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSG4ucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEhuLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJ0b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEhuLnByb3RvdHlwZSwidG9vbHRpcFBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEhuLnByb3RvdHlwZSwiZGVmYXVsdFhSYW5nZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSG4ucHJvdG90eXBlLCJkZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sSG4ucHJvdG90eXBlLCJzeW1ib2xGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIbi5wcm90b3R5cGUsIl9yZXNldERvbWFpbk9uTmV4dExvYWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSG4ucHJvdG90eXBlLCJfbWF5YmVSZW5kZXJlZEluQmFkU3RhdGUiLHZvaWQgMCk7RShbQnQoImxvYWRLZXkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhuLnByb3RvdHlwZSwiX2xvYWRLZXlDaGFuZ2VkIixudWxsKTtFKFtCdCgiZGF0YVNlcmllcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIbi5wcm90b3R5cGUsIl9kYXRhU2VyaWVzQ2hhbmdlZCIsbnVsbCk7SG49RShbeXQoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKV0sSG4pO19zKHttb2R1bGVOYW1lOiJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICA6aG9zdCB7CiAgICAgIG1hcmdpbjogNXB4IDEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDMzMHB4OwogICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICB9CgogICAgaDEgewogICAgICBmb250LXNpemU6IDE5cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICB9CgogICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgI2J1dHRvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIHBhZGRpbmc6IDRweDsKICAgIH0KCiAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMzJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgYSB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICBtYXJnaW46IDJweDsKICAgIH0KCiAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIH0KICAgIH0KICBgfSk7dmFyIE9TPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyl7dGhpcy5ydW49dCx0aGlzLnRhZz1yLHRoaXMubmFtZT1uLHRoaXMuc2NhbGFyRGF0YT1pLHRoaXMuc3ltYm9sPW99Z2V0TmFtZSgpe3JldHVybiB0aGlzLm5hbWV9c2V0RGF0YSh0KXt0aGlzLnNjYWxhckRhdGE9dH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuc2NhbGFyRGF0YX1nZXRSdW4oKXtyZXR1cm4gdGhpcy5ydW59Z2V0VGFnKCl7cmV0dXJuIHRoaXMudGFnfWdldFN5bWJvbCgpe3JldHVybiB0aGlzLnN5bWJvbH19O2Z1bmN0aW9uIGtCKGUsdCl7cmV0dXJuYCR7dH0gKCR7ZX0pYH12YXIgV3Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ydW5CYXNlZENvbG9yU2NhbGU9dH1zY2FsZSh0KXtyZXR1cm4gdGhpcy5ydW5CYXNlZENvbG9yU2NhbGUuc2NhbGUodGhpcy5wYXJzZVJ1bk5hbWUodCkpfXBhcnNlUnVuTmFtZSh0KXtsZXQgcj10Lm1hdGNoKC9cKCguKilcKSQvKTtyZXR1cm4gcj9yWzFdOiIifX07dmFyIEpyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXdih7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMSx0aGlzLl9maWxsQXJlYT17bG93ZXJBY2Nlc3Nvcjp0PT50Lmxvd2VyLGhpZ2hlckFjY2Vzc29yOnQ9PnQudXBwZXJ9LHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJWYWx1ZSIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnNjYWxhcil9LHt0aXRsZToiTG93ZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ubG93ZXIpfSx7dGl0bGU6IlVwcGVyIE1hcmdpbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnVwcGVyKX0se3RpdGxlOiJTdGVwIixldmFsdWF0ZTpuPT5iNChuLmRhdHVtLnN0ZXApfSx7dGl0bGU6IlRpbWUiLGV2YWx1YXRlOm49PnlCKG4uZGF0dW0ud2FsbF90aW1lKX0se3RpdGxlOiJSZWxhdGl2ZSIsZXZhbHVhdGU6bj0+dkIocjAobi5kYXR1bSwtMSxuLmRhdGFzZXQpKX1dfSkoKSx0aGlzLl9taXNzaW5nVGFncz1bXSx0aGlzLl9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkPSExfXJlbG9hZCgpe3RoaXMuJC5sb2FkZXIucmVsb2FkKCl9cmVkcmF3KCl7dGhpcy4kLmxvYWRlci5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy4kLmxvYWRlcjt0JiZ0LnJlc2V0RG9tYWluKCl9X2NzdlVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6ImNzdiJ9KX1fanNvblVybCh0LHIpe2lmKCFyKXJldHVybiIiO2xldCBuPXRoaXMuX2Rvd25sb2FkRGF0YVVybCh0LHIpO3JldHVybiBNaShuLHtmb3JtYXQ6Impzb24ifSl9X2Rvd25sb2FkRGF0YVVybCh0LHIpe2xldCBuPXRbcl0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX0pO3JldHVybiBfZSgpLnBsdWdpblJvdXRlRm9yU3JjKCJjdXN0b21fc2NhbGFycyIsIi9kb3dubG9hZF9kYXRhIixpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PWtCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIgUkI9e307S3MoUkIse0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5WOSxFeHBlcmltZW50c1N0b3JlOigpPT5yUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+SDksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5jOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+dUUsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VTksVFlQRVM6KCk9Pmt4ZSxhZGRQYXJhbXM6KCk9Pk1pLGNyZWF0ZVJvdXRlcjooKT0+UGd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5JZ3QsZW52aXJvbm1lbnRTdG9yZTooKT0+aWIsZXhwZXJpbWVudHNTdG9yZTooKT0+blIsZmlsdGVyVGFnczooKT0+TnhlLGdldFJvdXRlcjooKT0+X2UsZ2V0UnVuc05hbWVkOigpPT5SeGUsZ2V0VGFnczooKT0+JGkscnVuc1N0b3JlOigpPT53cH0pO3ZhciBFbj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5hY3RpdmU9ITAsdGhpcy5fY29sb3JTY2FsZT1uZXcgV3Yoe3NjYWxlOmZufSksdGhpcy5fbmFtZVRvRGF0YVNlcmllcz17fSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy5fdGFnRmlsdGVyLGM9TWkobyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXg9e30sdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIE1pKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfSk7cmV0dXJuIF9lKCkucGx1Z2luUm91dGVGb3JTcmMoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9a0IocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXdildLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9X2UoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgREI9RWUoT2UoKSwxKTt2YXIgYXN0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgTkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj14Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KG1CKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPWFzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9YXN0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IE5CKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsTkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihEQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49REIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgT0I9e307S3MoT0Ise0RJU0FNQklHVUFUT1I6KCk9PkIwdCxMaXN0ZW5LZXk6KCk9Pm1FLGFkZEhhc2hMaXN0ZW5lcjooKT0+Z0UsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5UVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PktiZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+WmJlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT50MmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PmpiZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkNXLGdldEJvb2xlYW46KCk9PlhiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5OVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+X0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9PnlFLGdldE9iamVjdDooKT0+SmJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT5PVyxnZXRPYmplY3RPYnNlcnZlcjooKT0+elcsZ2V0U3RyaW5nOigpPT5XYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+RDB0LG1ha2VCaW5kaW5nczooKT0+dkUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+ZTJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5BVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+UFcsc2V0Qm9vbGVhbjooKT0+JGJlLHNldE51bWJlcjooKT0+RFcsc2V0T2JqZWN0OigpPT5RYmUsc2V0U3RyaW5nOigpPT5ZYmV9KTt2YXIgaWN0PUVlKE9lKCksMSk7dmFyIFlLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLGpLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLHNzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKHNzdHx8KHNzdD17fSkpO3ZhciBsc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxzc3QpLGxzdCk7dmFyIFFzZT1FZShPbHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgdmU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxKND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gQW4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sUTQ9Ljc1LHRQPTEyLEtscj0uMyxabHI9WzEsNWU2XSxHc2U9S18oKS5leHBvbmVudChLbHIpLmRvbWFpbihabHIpLnJhbmdlKFtRNCx0UF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgWXNlPTIwO2Z1bmN0aW9uIEpscihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtKbHIoZSk/KGpLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihZS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIG5QKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIGpzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZTEoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxZc2UpfSl9ZnVuY3Rpb24gbUgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LFlzZSl9KX1mdW5jdGlvbiBYc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgaVA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxvUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gZ0goZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gemx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uICRzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBRbHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksclA9UWxyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gV3NlKGUsdCl7cmV0dXJuIHJQJiYoclAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLHJQPT1udWxsP3ZvaWQgMDpyUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiBLc2UoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKFdzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2IjtXc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBkSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIix0bGU9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciBlbGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIHRjcj0iX291dHB1dF9zaGFwZXMiLGVjcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sX0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPW9jcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1yY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9bmNyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBsUChlLHQ9e30pe3JldHVybiBuZXcgYVAoZSx0KX1mdW5jdGlvbiBybGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTpzUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIGFQPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gSGx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgQmx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgQmx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gcmNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT10Y3Ipe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemUpKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT1lY3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgaWNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBvY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2goaWNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEZsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBubGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIGlsZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9WnNlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1ac2UodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGUxKCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmUxKCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9YWNyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylGbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpRmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBGbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IFFzZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gWnNlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBhY3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChjUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109c1Aobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09c1AoaSkpfSkscn1mdW5jdGlvbiBKc2UoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gb2xlKGUsdCl7bGV0IHI9SnNlKGUpLG49SnNlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGNQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIHlIKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiBhbGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcjE9RWUoT2UoKSwxKTtmdW5jdGlvbiBzbGUoZSx0KXtsZXQgcj1sY3IoZSksbj1jY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIHNjcihlKXtsZXQgdD1yMS5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1yMS5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIGxjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1zY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBjY3IoZSx0KXtyZXR1cm4gcjEucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fHVjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHZIKGUsdCxyKXtyZXR1cm4gcjEuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gdWNyKGUsdCl7aWYoIW9sZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9dkgobCxlLHIpLGM9dkgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCFoY3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9dkgoZixlLHIpLHA9dkgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGhjcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBkSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9bFAocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1IbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBsbGUobyx0LHIsbiksbGxlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9JEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9c2xlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gbGxlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiBiSChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGUxKCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLHBjcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmUxKCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmaGxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZTEoIkFkZGluZyBlZGdlcyIsNDAsKCk9PntkY3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBjbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gdWxlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gcGNyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89Y1Aobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPWxQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiBkY3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9SGx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiBobGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmaGxlKGgsdCxyLG4saSxvKX0pO2xldCBzPW1jcihhKSxjPShvP19jcjpnY3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiBtY3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24gZ2NyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX14SChjLG4sK28sdCxyKSxjPVtoXX14SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBfY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXhIKGgsbiwrbyx0LHIpLGg9W3BdfXhIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHhIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFZsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0seWNyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgU0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPU9uKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9T24oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP0dzZTpPbigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbUTQsdFBdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IFNIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFnSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWNQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe2RsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9bFAobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7ZmxlKGcseSxiLHgsZ2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtwbGUoZyx5LGIseCxnaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmRWNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxnaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sZ2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKGdpfHwoZ2k9e30pKTt2YXIgd0g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09Z2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IF9IKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLGdpLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IHdILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IHdILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaCh5Y3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBmbGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gcGxlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiB2Y3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzpkbGUobix0LTEpO2JyZWFrfX0pfXZhciBTSD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIGRsZShlLHQpe2UuY29yZUdyYXBoJiZ2Y3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gdVAoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwocGxlKG4saS5ub2RlLGksbyxnaS5TSE9SVENVVCksZmxlKGksbi5ub2RlLG4sbyxnaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIFVsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBxbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9Pnt1UChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e3VQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIG1sZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHhjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/VWx0KGUsciwhMCk6cWx0KGUsciwhMCkpfSl9ZnVuY3Rpb24gYmNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmbWxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZVbHQoZSxyKX0pfWZ1bmN0aW9uIHdjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJm1sZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIFNjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlxbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxVbHQoZSxmW19dKX19ZnVuY3Rpb24gTWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT51UCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIEVjcihlLHQpe3hjcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZiY3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZ3Y3IoZSksdCYmU2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJk1jcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIGdsZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciB4bGU9RWUoT2x0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6T24oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBNSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJkNjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/QWNyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZQY3IoZSl9ZnVuY3Rpb24gVGNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIENjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9NSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLE1IKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8VGNyKHIpLEljcihyKX0pfWZ1bmN0aW9uIGJsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt4bGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZMY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09dmxlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT12bGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBBY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LGJsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gUGNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gsYmxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBJY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9Pl9sZSh1KSksWmUuZWFjaChyLHU9Pl9sZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9T24oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPU9uKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIF9sZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBnaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIGdpLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBnaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24geWxlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIExjcihlKXtsZXQgdD15bGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj15bGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24gdmxlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXZlLGtjcj0zMjAsUmNyPTE1MCxmUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gU2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIE1sZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLWtjcixmPXUudG9wK3UuaGVpZ2h0LVJjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBFbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIFRsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIENsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24gQWxlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gRUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIHdsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIE5jcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2ZQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBEY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGZQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsZlBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1OY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9d2xlKGQubWluLGspLEI9d2xlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIFBsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtEY3IodGhpcyxzLG8sbisrKX0pfXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKHFufHwocW49e30pKTt2YXIgbVA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBPY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFdsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1PY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIEFIPUVlKE9lKCksMSk7dmFyIEZjcj0iXHhENyIsSWxlPXFiKCkuZG9tYWluKFtRNCx0UF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxCY3I9Mi41O2Z1bmN0aW9uIHBQKGUpe3JldHVybiBlLnYrZWxlK2Uud31mdW5jdGlvbiBSbGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUFILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPUFuKGUsImciLHZlLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLHBQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix2ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLHBQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbcFAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLFhsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7VmNyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1VjcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W3BQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gWWx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fEFILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oRmNyKX1mdW5jdGlvbiBqbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6WWx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIExsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBrbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUxsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gWGx0KGUsdCxyLG4pe249bnx8dmUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit2ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIrdmUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIrdmUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK3BQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke0lsZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtJbGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1qbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5CY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgQ0g9dnUoKS5jdXJ2ZShXOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBIY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1rbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9a2xlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxDSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LENIKHMpfX1mdW5jdGlvbiBWY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit2ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gSGNyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBVY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3ZlLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gUEgoZSx0LHIpe2xldCBpPUFuKGUsImciLHZlLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnZlLk5vZGUuR1JPVVArIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPUFuKGEsImciLHZlLkFubm90YXRpb24uSU5CT1gpO3psZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPUFuKGEsImciLHZlLkFubm90YXRpb24uT1VUQk9YKTt6bGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9SGxlKGEsbyx2ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJkdjcihjLG8sciksT2xlKGMsbyxyKSxxY3IoYSxvLHIpO2xldCB1PVljcihhLG8scik7T2xlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLFhjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3ZlLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit2ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit2ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIHFjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiBlY3QoZSx0LHIsdmUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHZlLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBEbGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix2ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIEdjcihlLHQscil7bGV0IG49QW4oZSwiZyIsdmUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtBbihuLCJjaXJjbGUiLHZlLk5vZGUuQlVUVE9OX0NJUkNMRSksQW4obiwicGF0aCIsdmUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLEFuKG4sInBhdGgiLHZlLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLEFsZShuLHQpfWZ1bmN0aW9uIE9sZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1XbHQocixGbGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiBGbGUoZSx0KXtsZXQgcj1be3RpdGxlOm49PnlIKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksSmx0KGUpJiZyLnB1c2goe3RpdGxlOm49PlFsdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOklIKGUpfSl9fSkscn1mdW5jdGlvbiBKbHQoZSl7cmV0dXJuIElIKGUpIT09bnVsbH1mdW5jdGlvbiBJSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiBXY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIFFsdChlKXtyZXR1cm4gYWxlKFdjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gWWNyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPUFuKGUsInRleHQiLHZlLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP0o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6SjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPUo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9amNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gQmxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIEJsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PUtzZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgJGx0PW51bGw7ZnVuY3Rpb24gamNyKGUpe3JldHVybiAkbHR8fCgkbHQ9T24oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLCRsdH1mdW5jdGlvbiBkUChlLHQscixuKXtQbChlLCJ0ZXh0Iix2ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBIbGUoZSx0LHIpe2xldCBuPUFuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtBbihuLCJwb2x5Z29uIix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9QW4obiwiZWxsaXBzZSIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt2ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxBbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksQW4obiwicmVjdCIsdmUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpBbihuLCJyZWN0Iix2ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIFZsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHZlLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHZlLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB2ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB2ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHZlLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gWGNyKGUsdCl7bGV0IHI9UGwoZSwiZyIsdmUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtDbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtFSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1kUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksRGxlKGUsdCksZFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCksZFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxEbGUoZSx0KSxkUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxkUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gS2x0KGUsdCxyKXtsZXQgbj1Yc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBMSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIGtIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIHFuLk5PTkU6Y2FzZSBxbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PXFuLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIHFuLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgcW4uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOktsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgcW4uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBxbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpLbHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8dmUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09dmUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit2ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1rSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDp0Y3QodSkpfWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBVbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPXFsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9R2xlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD1LY3IodCxzKTtaY3IoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBxbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQocWxlKG8sdCkpfSkscn1mdW5jdGlvbiBHbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPVpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2YgYVApe2xldCBkPXNQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Wmx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPUdsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmJGNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiAkY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uIEtjcihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Wmx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIFpjcihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIFpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiB6bGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9dmUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit2ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit2ZS5FZGdlLlJFRl9MSU5FKSxYbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTPyh0dXIoYSxvKSxRY3IoYSxvKSk6V2xlKGEsby5ub2RlLm5hbWUsbyx2ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT52ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitKY3Ioby5hbm5vdGF0aW9uVHlwZSkrIiAiK1ZsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtydXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PWdpLkVMTElQU0lTJiZldXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIEpjcihlKXtyZXR1cm4oZ2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIFFjcihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1naS5TVU1NQVJZKUFuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9SGxlKGUsdCx2ZS5Bbm5vdGF0aW9uLk5PREUpO0FuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIHR1cihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiBXbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gV2xlKGUsdCxyLG4pe2xldCBpPXZlLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBCbGUobywtMSxKNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiBldXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09Z2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PWdpLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsV2x0KG4sRmxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIHJ1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09Z2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHZlLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PWdpLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit2ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksRUgoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3ZlLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3ZlLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBDSChhKX0pfWZ1bmN0aW9uIGVjdChlLHQscixuKXtuPW58fHZlLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1BbihlLCJnIixuKSxhPUFuKG8sImciLHZlLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLFJsZShhLHQuY29yZUdyYXBoLHIpLFBIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5JTkVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHZlLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPUFuKG8sImciLHZlLlNjZW5lLk9VVEVYVFJBQ1QpO1BIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1BbihvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtQSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix2ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gRWxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgbnVyPS44LFJIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8bnVyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgbmN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcgUkgodCxyLG4sdGhpcyxpLG8pfX07bmN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO25jdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxuY3QpO3ZhciBZbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7TWxlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksTEgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtNSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtlY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxUbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209ZVIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksbVAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsU2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O1BsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTttUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO21QLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1VsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9WWxlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKHJsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxjbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOmljdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjppY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPW5QKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7YkgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9ZlB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PSRzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj1nbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgb2N0PXt9O0tzKG9jdCx7R3JhcGhJY29uVHlwZTooKT0+bjF9KTt2YXIgbjE7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobjF8fChuMT17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbjEuU0VSSUVTOnJldHVybiBWbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbjEuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBuMS5TRVJJRVM6cmV0dXJuIFZsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PXFuLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/a0goaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P3RjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PW9jdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmTEgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZrSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksdWxlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gZ0godCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLGlQKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksb1ApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09dGxlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpZbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6amx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0IixRbHQodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIseUgodCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PUlIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gSmx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBvdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1vdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PXFuLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1xbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PXFuLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIGpsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgZ1A9RWUoT2UoKSwxKTt2YXIgWGxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7WGxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBsY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLHNjdD1be3JlZ2V4OmxjdH1dLCRsZT1bXSxhdXI9bmV3IFNldChbcW4uQ09NUFVURV9USU1FLHFuLk1FTU9SWV0pLFBuPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PXFuLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1xbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1nUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPWdQLnNvbWUoc2N0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1nUC5zb21lKCRsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PnNjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9emx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGxjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gJGxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiBhdXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5zY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj16bHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChsY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PXFuLk1FTU9SWT8oaT1OZChpLGlQKSxvPU5kKG8saVApKTpyPT09cW4uQ09NUFVURV9USU1FJiYoaT1OZChpLG9QKSxvPU5kKG8sb1ApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9cW4uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtQbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFBuLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sUG4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxQbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUG4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUG4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxQbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFBuLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxQbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxQbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFBuLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFBuLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxQbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sUG4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtQbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sUG4pO2Z1bmN0aW9uIHN1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uIEtsZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBabGUoZSx0KXtyZXR1cm4ganNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6S2xlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+bUgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2Z1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIEpsZShlLHQscil7cmV0dXJuIG1IKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgS2xlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5tSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9Pmh1cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gbHVyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBjdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LHV1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gaHVyKGUpe3JldHVybiBRbGUoZSxjdXIpfWZ1bmN0aW9uIGZ1cihlKXtyZXR1cm4gUWxlKGUsdXVyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gUWxlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1zdXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gbHVyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiBlY2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIEpsZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gaWxlKGMsbmxlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7amxlKGMsbik7bGV0IHU9eWllbGQgYkgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9X2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9blAodGhpcyk7WmxlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPW5QKHRoaXMpO3JldHVybiBlY2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIHJjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhyY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKHJjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoX2UoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChfZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIE5IPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIGR1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiBtdXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIG5jZShlKXtsZXQgdD1lLm1hcChkdXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczptdXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9TWkobyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW5jZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyPSEwKXt0aGlzLl9yZXF1ZXN0TWFuYWdlcj10LHRoaXMuX3VzZUh0dHBHZXQ9cn1nZXRFeHBlcmltZW50KHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL2V4cGVyaW1lbnQiLHQpfWdldERvd25sb2FkVXJsKHQscixuKXtyZXR1cm4gX2UoKS5wbHVnaW5Sb3V0ZUZvclNyYygiaHBhcmFtcyIsIi9kb3dubG9hZF9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSkpfWxpc3RTZXNzaW9uR3JvdXBzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgiL3Nlc3Npb25fZ3JvdXBzIix0KX1saXN0TWV0cmljRXZhbHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCIvbWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0LG5ldyBVUkxTZWFyY2hQYXJhbXMoe3JlcXVlc3Q6SlNPTi5zdHJpbmdpZnkocil9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT1fZSgpLnBsdWdpblJvdXRlKCJocGFyYW1zIix0KTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdFdpdGhPcHRpb25zKGksbil9fTt2YXIgcGNlPUVlKE9lKCksMSk7dmFyIERIPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3JpZW50YXRpb249Imhvcml6b250YWwifX07REgudGVtcGxhdGU9UWAKICAgIDxzbG90IG5hbWU9ImNvbnRlbnQiPjwvc2xvdD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgOmhvc3Qgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSBzbG90IHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyOiAwIHNvbGlkIHZhcigtLWRpdmlkZXItY29sb3IsICNjY2MpOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIDo6c2xvdHRlZCgqOm5vdCg6bGFzdC1jaGlsZCkpIHsKICAgICAgICBib3JkZXItYm90dG9tLXdpZHRoOiA1cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtvcmllbnRhdGlvbj0naG9yaXpvbnRhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sREgucHJvdG90eXBlLCJvcmllbnRhdGlvbiIsdm9pZCAwKTtESD1FKFt5dCgiaHBhcmFtcy1zcGxpdC1sYXlvdXQiKV0sREgpO3ZhciBjcz17fTtLcyhjcyx7Y29sdW1uVmFsdWVCeUluZGV4OigpPT54MCxjb2x1bW5WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5CSCxldWNsaWRlYW5EaXN0OigpPT5oMyxmaWx0ZXJTZXQ6KCk9PkV1cixnZXRBYnNvbHV0ZUNvbHVtbkluZGV4OigpPT56SCxoYXNoT2ZTdHJpbmc6KCk9PmRjdCxocGFyYW1OYW1lOigpPT5GZCxocGFyYW1WYWx1ZUJ5SW5kZXg6KCk9PnNjZSxocGFyYW1WYWx1ZUJ5TmFtZTooKT0+YWNlLGhwYXJhbVZhbHVlQnlWaXNpYmxlSW5kZXg6KCk9PmhjZSxpc051bGxPclVuZGVmaW5lZDooKT0+d3VyLGwyTm9ybVNxdWFyZWQ6KCk9PnAzLG1ldHJpY05hbWU6KCk9PlF1LG1ldHJpY1ZhbHVlQnlJbmRleDooKT0+bGNlLG1ldHJpY1ZhbHVlQnlOYW1lOigpPT5mMyxtZXRyaWNWYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT5GSCxudW1Db2x1bW5zOigpPT51Y3QsbnVtSFBhcmFtczooKT0+aWNlLG51bU1ldHJpY3M6KCk9Pm9jZSxudW1WaXNpYmxlQ29sdW1uczooKT0+eXVyLG51bVZpc2libGVIUGFyYW1zOigpPT5jY2UsbnVtVmlzaWJsZU1ldHJpY3M6KCk9PnVjZSxudW1lcmljQ29sdW1uRXh0ZW50OigpPT5oY3QscG9pbnRUb1JlY3RhbmdsZURpc3Q6KCk9PmZjZSxwcmV0dHlQcmludDooKT0+YjAscHJldHR5UHJpbnRIUGFyYW1WYWx1ZUJ5TmFtZTooKT0+dnVyLHByZXR0eVByaW50TWV0cmljVmFsdWVCeU5hbWU6KCk9Pnh1cixxdWFkVHJlZVZpc2l0UG9pbnRzSW5EaXNrOigpPT5NdXIscXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdDooKT0+U3VyLHJvdGF0ZVN0cjooKT0+YnVyLHNjaGVtYUNvbHVtbk5hbWU6KCk9PmNjdCxzY2hlbWFWaXNpYmxlQ29sdW1uTmFtZTooKT0+X3VyLHNlc3Npb25Hcm91cFdpdGhOYW1lOigpPT5mY3Qsc2V0QXJyYXlPYnNlcnZhYmx5OigpPT5wY3QsdHJhbnNsYXRlU3RyOigpPT55UCx2aXNpYmxlTnVtZXJpY0NvbHVtbkV4dGVudDooKT0+X1B9KTt2YXIgT0g9RWUoT2UoKSwxKTtmdW5jdGlvbiBGZChlKXtyZXR1cm4gZS5kaXNwbGF5TmFtZSE9PSIiJiZlLmRpc3BsYXlOYW1lIT09dm9pZCAwP2UuZGlzcGxheU5hbWU6ZS5uYW1lfWZ1bmN0aW9uIFF1KGUpe2lmKGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMClyZXR1cm4gZS5kaXNwbGF5TmFtZTtsZXQgdD1lLm5hbWUuZ3JvdXAscj1lLm5hbWUudGFnO3JldHVybiB0PT09dm9pZCAwJiYodD0iIikscj09PXZvaWQgMCYmKHI9IiIpLHQ9PT0iIj9yOnQrIi4iK3J9ZnVuY3Rpb24gY2N0KGUsdCl7aWYodDxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoKXJldHVybiBGZChlLmhwYXJhbUNvbHVtbnNbdF0uaHBhcmFtSW5mbyk7bGV0IHI9dC1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoO3JldHVybiBRdShlLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mbyl9ZnVuY3Rpb24gaWNlKGUpe3JldHVybiBlLmhwYXJhbUNvbHVtbnMubGVuZ3RofWZ1bmN0aW9uIG9jZShlKXtyZXR1cm4gZS5tZXRyaWNDb2x1bW5zLmxlbmd0aH1mdW5jdGlvbiB1Y3QoZSl7cmV0dXJuIGljZShlKStvY2UoZSl9ZnVuY3Rpb24gYWNlKGUsdCl7cmV0dXJuIGVbdF19ZnVuY3Rpb24gZjMoZSx0KXtyZXR1cm4gZS5maW5kKHI9Pk9ILmlzRXF1YWwoci5uYW1lLHQpKX1mdW5jdGlvbiBzY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1Db2x1bW5zW3JdLmhwYXJhbUluZm8ubmFtZV19ZnVuY3Rpb24gbGNlKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0NvbHVtbnNbcl0ubWV0cmljSW5mby5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiB4MChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aD9zY2UoZSx0LHIpOmxjZShlLHQsci1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoKX1mdW5jdGlvbiBoY3QoZSx0LHIpe3JldHVybiBhYSh0LG49PngwKGUsbixyKSl9ZnVuY3Rpb24gekgoZSx0LHIpe2xldCBuO2lmKHI8dC5ocGFyYW1JbmZvcy5sZW5ndGgpbj1lLmhwYXJhbUNvbHVtbnMuZmluZEluZGV4KGk9PmkuaHBhcmFtSW5mby5uYW1lPT09dC5ocGFyYW1JbmZvc1tyXS5uYW1lKTtlbHNle2xldCBpPXItdC5ocGFyYW1JbmZvcy5sZW5ndGgsbz10Lm1ldHJpY0luZm9zW2ldLm5hbWU7bj1lLmhwYXJhbUNvbHVtbnMubGVuZ3RoK2UubWV0cmljQ29sdW1ucy5maW5kSW5kZXgoYT0+YS5tZXRyaWNJbmZvLm5hbWU9PT1vKX1yZXR1cm4gY29uc29sZS5hc3NlcnQobiE9PS0xKSxufWZ1bmN0aW9uIF91cihlLHQpe2lmKHQ8ZS5ocGFyYW1JbmZvcy5sZW5ndGgpcmV0dXJuIEZkKGUuaHBhcmFtSW5mb3NbdF0pO2xldCByPXQtZS5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJuIFF1KGUubWV0cmljSW5mb3Nbcl0pfWZ1bmN0aW9uIGNjZShlKXtyZXR1cm4gZS5ocGFyYW1JbmZvcy5sZW5ndGh9ZnVuY3Rpb24gdWNlKGUpe3JldHVybiBlLm1ldHJpY0luZm9zLmxlbmd0aH1mdW5jdGlvbiB5dXIoZSl7cmV0dXJuIGNjZShlKSt1Y2UoZSl9ZnVuY3Rpb24gX1AoZSx0LHIpe3JldHVybiBhYSh0LG49PkJIKGUsbixyKSl9ZnVuY3Rpb24gdnVyKGUsdCl7cmV0dXJuIGIwKGFjZShlLHQpKX1mdW5jdGlvbiB4dXIoZSx0KXtyZXR1cm4gYjAoZjMoZSx0KSl9ZnVuY3Rpb24gZmN0KGUsdCl7cmV0dXJuIGUuZmluZChyPT5yLm5hbWU9PT10KX1mdW5jdGlvbiBoY2UoZSx0LHIpe3JldHVybiB0LmhwYXJhbXNbZS5ocGFyYW1JbmZvc1tyXS5uYW1lXX1mdW5jdGlvbiBGSChlLHQscil7bGV0IG49ZS5tZXRyaWNJbmZvc1tyXS5uYW1lLGk9ZjModC5tZXRyaWNWYWx1ZXMsbik7cmV0dXJuIGk9PT12b2lkIDB8fGkudmFsdWU9PT0iTmFOIj92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBCSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/aGNlKGUsdCxyKTpGSChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIE9ILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09PXZvaWQgMD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBmY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiB5UChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24gYnVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIHd1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBTdXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBNdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBmY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBFdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBwY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBkY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrVEkoMiwzMSl9dmFyIFFuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpBcnJheSgpLG1ldHJpY0NvbHVtbnM6QXJyYXkoKX0sY29sdW1uc1Zpc2liaWxpdHk6QXJyYXkoKSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpBcnJheSgpLG1ldHJpY0luZm9zOkFycmF5KCl9fSx0aGlzLnNlc3Npb25Hcm91cHM9W10sdGhpcy5kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcz0hMSx0aGlzLmRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zPSExLHRoaXMuX3N0YXR1c2VzPVt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX0ZBSUxVUkUiLGRpc3BsYXlOYW1lOiJGYWlsdXJlIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19SVU5OSU5HIixkaXNwbGF5TmFtZToiUnVubmluZyIsYWxsb3dlZDohMH1dLHRoaXMuX2dldEV4cGVyaW1lbnRSZXNvbHZlZD1uZXcgUHJvbWlzZSh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9wYWdlU2l6ZUlucHV0PXt2YWx1ZToiMTAwIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlTnVtYmVySW5wdXQ9e3ZhbHVlOiIxIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlQ291bnRTdHI9Ij8iLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdSx0aGlzLl9wcmV0dHlQcmludD1iMH1yZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfV9jc3ZVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwiY3N2Iil9X2pzb25VcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwianNvbiIpfV9sYXRleFVybCh0LHIpe3JldHVybiB0aGlzLl9kb3dubG9hZERhdGFVcmwodCxyLCJsYXRleCIpfV9kb3dubG9hZERhdGFVcmwodCxyLG4pe2xldCBpPXIuY29sdW1uc1Zpc2liaWxpdHk7cmV0dXJuIHRoaXMuYmFja2VuZC5nZXREb3dubG9hZFVybChuLHQsaSl9X2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzKCl7bGV0IHQ9Y3M7aWYodC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHx0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpKXJldHVybjtsZXQgcj17ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX07dGhpcy5iYWNrZW5kLmdldEV4cGVyaW1lbnQocikudGhlbihuPT57cGNlLmlzRXF1YWwobix0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsbiksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KS5maW5hbGx5KCgpPT57dGhpcy5fY29tcHV0ZURhdGFGb3VuZCgpfSl9X2NvbXB1dGVEYXRhRm91bmQoKXtsZXQgdD1Cb29sZWFuKHRoaXMuX2V4cGVyaW1lbnQmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MubGVuZ3RoPjAmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MubGVuZ3RoPjApO3RoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdCksdGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zIiwhdCl9X2NvbXB1dGVIUGFyYW1zKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixkaXNwbGF5ZWQ6aTw1LGZpbHRlcjp7fX07by5pbmZvLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpPyhvLmZpbHRlci5kb21haW5EaXNjcmV0ZT1bXSxvLmluZm8uZG9tYWluRGlzY3JldGUuZm9yRWFjaChhPT57by5maWx0ZXIuZG9tYWluRGlzY3JldGUucHVzaCh7dmFsdWU6YSxjaGVja2VkOiEwfSl9KSk6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0JPT0wiP28uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XTpvLmluZm8udHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCI/by5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX1NUUklORyI/by5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsby5pbmZvLnR5cGUpLHQucHVzaChvKX0pLHRoaXMuc2V0KCJfaHBhcmFtcyIsdCl9X2NvbXB1dGVNZXRyaWNzKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6aTw1fTt0LnB1c2gobyl9KSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOltdLG1ldHJpY0NvbHVtbnM6W119OntocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcCh0PT4oe21ldHJpY0luZm86dC5pbmZvfSkpfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKT0+e3RoaXMuY29uZmlndXJhdGlvbj17c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9fSl9X2NvbXB1dGVDb2x1bW5zVmlzaWJpbGl0eSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz9bXTp0aGlzLl9ocGFyYW1zLm1hcCh0PT50LmRpc3BsYXllZCkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKHQ9PnQuZGlzcGxheWVkKSl9X2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl7aWYoIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzKXJldHVybntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX07bGV0IHQ9dGhpcy5faHBhcmFtcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pLHI9dGhpcy5fbWV0cmljcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pO3JldHVybntocGFyYW1JbmZvczp0LG1ldHJpY0luZm9zOnJ9fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX1fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCl7aWYoISghdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOnQsY2FuY2VsbGVkOnJ9KT0+e2lmKCFyKXtpZih0LnRvdGFsU2l6ZT49MCl7bGV0IG49K3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWU7dGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvbikpKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix0LnRvdGFsU2l6ZSl9ZWxzZSB0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsIj8iKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIiwiVW5rbm93biIpO3BjdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpfX0pKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYodCE9PW51bGwpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtsZXQgdD10aGlzLHI9ITA7ZnVuY3Rpb24gbihoKXtyZXR1cm4gaC5taW4udmFsdWUhPT0iInx8aC5tYXgudmFsdWUhPT0iIn1mdW5jdGlvbiBpKGgpe2xldCBmPXQuZ2V0KGgrIi5taW4udmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD1mPT09IiI/Ii1JbmZpbml0eSI6K2YsZD1pc05hTihwKTt0LnNldChoKyIubWluLmludmFsaWQiLGQpLHI9ciYmIWQ7bGV0IGc9dC5nZXQoaCsiLm1heC52YWx1ZSIpO2NvbnNvbGUuYXNzZXJ0KGchPT12b2lkIDApO2xldCBfPWc9PT0iIj8iSW5maW5pdHkiOitnLHk9aXNOYU4oXyk7cmV0dXJuIHQuc2V0KGgrIi5tYXguaW52YWxpZCIseSkscj1yJiYheSxkfHx5P251bGw6e21pblZhbHVlOnAsbWF4VmFsdWU6X319ZnVuY3Rpb24gbyhoKXtsZXQgZj10LmdldChoKyIudmFsdWUiKTtjb25zb2xlLmFzc2VydChmIT09dm9pZCAwKTtsZXQgcD0rZixkPU51bWJlci5pc0ludGVnZXIocCkmJnA+MDtyZXR1cm4gdC5zZXQoaCsiLmludmFsaWQiLCFkKSxyPXImJmQsZD9wOm51bGx9bGV0IGE9dGhpcy5fc3RhdHVzZXMuZmlsdGVyKGg9PmguYWxsb3dlZCkubWFwKGg9PmgudmFsdWUpLHM9W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKChoLGYpPT57bGV0IHA9e2hwYXJhbTpoLmluZm8ubmFtZX07aC5maWx0ZXIuZG9tYWluRGlzY3JldGU/aC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZXZlcnkoZz0+Zy5jaGVja2VkKXx8KHAuZmlsdGVyRGlzY3JldGU9W10saC5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaChnPT57Zy5jaGVja2VkJiZwLmZpbHRlckRpc2NyZXRlLnB1c2goZy52YWx1ZSl9KSk6aC5maWx0ZXIuaW50ZXJ2YWw/bihoLmZpbHRlci5pbnRlcnZhbCkmJihwLmZpbHRlckludGVydmFsPWkoIl9ocGFyYW1zLiIrZisiLmZpbHRlci5pbnRlcnZhbCIpKTpoLmZpbHRlci5yZWdleHAmJihwLmZpbHRlclJlZ2V4cD1oLmZpbHRlci5yZWdleHApLHMucHVzaChwKX0pLHRoaXMuX21ldHJpY3MuZm9yRWFjaCgoaCxmKT0+e2xldCBwPXttZXRyaWM6aC5pbmZvLm5hbWV9O24oaC5maWx0ZXIuaW50ZXJ2YWwpJiYocC5maWx0ZXJJbnRlcnZhbD1pKCJfbWV0cmljcy4iK2YrIi5maWx0ZXIuaW50ZXJ2YWwiKSkscy5wdXNoKHApfSksdGhpcy5fc29ydEJ5SW5kZXghPT12b2lkIDAmJnRoaXMuX3NvcnREaXJlY3Rpb24hPT12b2lkIDApe2lmKCEodGhpcy5fc29ydEJ5SW5kZXggaW4gcykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIk5vIGNvbHVtbiBpbiBjb2xQYXJhbXMgd2l0aCBpbmRleCBzb3J0QnlJbmRleDogJXMiLHRoaXMuX3NvcnRCeUluZGV4KSxudWxsO3NbdGhpcy5fc29ydEJ5SW5kZXhdLm9yZGVyPXRoaXMuX3NvcnREaXJlY3Rpb249PT0wPyJPUkRFUl9BU0MiOiJPUkRFUl9ERVNDIn1sZXQgbD1vKCJfcGFnZU51bWJlcklucHV0Iil8fDAsYz1vKCJfcGFnZVNpemVJbnB1dCIpfHwwO2lmKCFyKXJldHVybiBudWxsO2xldCB1PWMqKGwtMSk7cmV0dXJue2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsYWxsb3dlZFN0YXR1c2VzOmEsY29sUGFyYW1zOnMsc3RhcnRJbmRleDp1LHNsaWNlU2l6ZTpjfX1fbWV0cmljU29ydEJ5SW5kZXgodCl7cmV0dXJuIHQrdGhpcy5faHBhcmFtcy5sZW5ndGh9fTtRbi50ZW1wbGF0ZT1RYAogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gaHlwZXJwYXJhbWV0ZXJzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5IeXBlcnBhcmFtZXRlcnM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJ7e19ocGFyYW1zfX0iIGFzPSJocGFyYW0iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHBhcmFtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgY2hlY2tlZD0ie3tocGFyYW0uZGlzcGxheWVkfX0iCiAgICAgICAgICAgICAgY2xhc3M9ImhwYXJhbS1jaGVja2JveCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgPCEtLSBQcmVjaXNlbHkgb25lIG9mIHRoZSB0ZW1wbGF0ZXMgYmVsb3cgd2lsbCBiZSBzdGFtcGVkLi0tPgogICAgICAgICAgICA8IS0tIDEuIEEgbGlzdCBvZiBjaGVja2JveGVzIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIj4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbaHBhcmFtLmZpbHRlci5kb21haW5EaXNjcmV0ZV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgICAgICBjaGVja2VkPSJ7e2l0ZW0uY2hlY2tlZH19IgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzY3JldGUtdmFsdWUtY2hlY2tib3giCiAgICAgICAgICAgICAgICAgIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBbW19wcmV0dHlQcmludChpdGVtLnZhbHVlKV1dCiAgICAgICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMi4gQSBudW1lcmljIGludGVydmFsIC0tPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZF9wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9IltbaHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZF1dIgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPCEtLSAzLiBBIHJlZ2V4cCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIucmVnZXhwXV0iPgogICAgICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICAgICAgbGFiZWw9IlJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e2hwYXJhbS5maWx0ZXIucmVnZXhwfX0iCiAgICAgICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBtZXRyaWNzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfbWV0cmljc319IiBhcz0ibWV0cmljIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldHJpYyI+CiAgICAgICAgICAgIDwhLS0gVE9ETyhlcmV6KTogTWFrZSBpdCBlYXNpZXIgdG8gaGFuZGxlIGEgbGFyZ2UgbnVtYmVyIG9mCiAgICAgICAgICAgICAgICAgIG1ldHJpY3M6CiAgICAgICAgICAgICAgICAgIDEuIEFkZCBhbiAnaXNvbGF0b3InIHJhZGlvLWJ1dHRvbiB0byBzZWxlY3QganVzdCBvbmUKICAgICAgICAgICAgICAgICAgbWV0cmljIGFuZAogICAgICAgICAgICAgICAgICBoaWRlIGFsbCB0aGUgcmVzdAogICAgICAgICAgICAgICAgICAyLiBBZGQgYSAndG9nZ2xlLWFsbCcgYnV0dG9uIHRoYXQgd2lsbCBoaWRlL3VuaGlkZQogICAgICAgICAgICAgICAgICAgIGFsbCB0aGUKICAgICAgICAgICAgICAgICAgbWV0cmljcy4KICAgICAgICAgICAgICAgICAgVXNlIHNpbWlsYXIgbG9naWMvYXBwZWFyYW5jZSB0byB0aGUgcnVuLXNlbGVjdG9yIG9mCiAgICAgICAgICAgICAgICAgIHNjYWxhcnMuLS0+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7bWV0cmljLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJtZXRyaWMtY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNaW4iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1pbi52YWx1ZX19IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4uaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Ii1pbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50Ij4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJNYXgiCiAgICAgICAgICAgICAgICBhbGxvd2VkLXBhdHRlcm49IlswLTkuZVxcLV0iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3ttZXRyaWMuZmlsdGVyLmludGVydmFsLm1heC52YWx1ZX19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgICAgIGludmFsaWQ9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXguaW52YWxpZH19IgogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IitpbmZpbml0eSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzdGF0dXMiPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlN0YXR1czwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3N0YXR1c2VzXV0iIGFzPSJzdGF0dXMiPgogICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7c3RhdHVzLmFsbG93ZWR9fSIgb24tY2hhbmdlPSJfcXVlcnlTZXJ2ZXIiPgogICAgICAgICAgICBbW3N0YXR1cy5kaXNwbGF5TmFtZV1dCiAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHNvcnRpbmciPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNvcnRpbmc8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IlNvcnQgYnkiCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0QnlJbmRleH19IgogICAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfaHBhcmFtc11dIiBhcz0iaHBhcmFtIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT4gW1tfaHBhcmFtTmFtZShocGFyYW0uaW5mbyldXSA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX21ldHJpY3NdXSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX21ldHJpY05hbWUobWV0cmljLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbGFiZWw9IkRpcmVjdGlvbiIKICAgICAgICAgIG9uLXNlbGVjdGVkLWl0ZW0tY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NvcnREaXJlY3Rpb259fSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+QXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8cGFwZXItaXRlbT5EZXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gcGFnaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5QYWdpbmc8L2Rpdj4KICAgICAgICA8ZGl2PgogICAgICAgICAgTnVtYmVyIG9mIG1hdGNoaW5nIHNlc3Npb24gZ3JvdXBzOiBbW190b3RhbFNlc3Npb25Hcm91cHNDb3VudFN0cl1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW5saW5lLWVsZW1lbnQgcGFnZS1udW1iZXItaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJQYWdlICMiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlTnVtYmVySW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZU51bWJlcklucHV0LmludmFsaWRdXSIKICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8ZGl2IHNsb3Q9InN1ZmZpeCIgY2xhc3M9InBhZ2Utc3VmZml4Ij4vIFtbX3BhZ2VDb3VudFN0cl1dPC9kaXY+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2Utc2l6ZS1pbnB1dCI+CiAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgbGFiZWw9Ik1heCAjIG9mIHNlc3Npb24gZ3JvdXBzIHBlciBwYWdlOiIKICAgICAgICAgICAgdmFsdWU9Int7X3BhZ2VTaXplSW5wdXQudmFsdWV9fSIKICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05XSIKICAgICAgICAgICAgZXJyb3ItbWVzc2FnZT0iSW52YWxpZCBpbnB1dCIKICAgICAgICAgICAgaW52YWxpZD0iW1tfcGFnZVNpemVJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGRvd25sb2FkIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlc3Npb25Hcm91cHNSZXF1ZXN0XV0iPgogICAgICAgICAgRG93bmxvYWQgZGF0YSBhcwogICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9ImNzdkxpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUuY3N2IgogICAgICAgICAgICAgIGhyZWY9IltbX2NzdlVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkNTVjwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaWQ9Impzb25MaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmpzb24iCiAgICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJsYXRleExpbmsiCiAgICAgICAgICAgICAgZG93bmxvYWQ9ImhwYXJhbXNfdGFibGUudGV4IgogICAgICAgICAgICAgIGhyZWY9IltbX2xhdGV4VXJsKF9zZXNzaW9uR3JvdXBzUmVxdWVzdCwgY29uZmlndXJhdGlvbildXSIKICAgICAgICAgICAgICA+TGFUZVg8L2EKICAgICAgICAgICAgPgogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIG1hcmdpbi1ib3R0b206IDdweDsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3gsCiAgICAgIC5tZXRyaWMtY2hlY2tib3gsCiAgICAgIC5ocGFyYW0tY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5kaXNjcmV0ZS12YWx1ZS1jaGVja2JveCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgIH0KICAgICAgLmhwYXJhbSwKICAgICAgLm1ldHJpYyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgLmlubGluZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDQwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgfQogICAgICAucGFnZS1udW1iZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgIH0KICAgICAgLnBhZ2Utc2l6ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDYwJTsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgICAucGFnZS1zdWZmaXggewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFuLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUW4ucHJvdG90eXBlLCJkYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9leHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9ocGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRbi5wcm90b3R5cGUsIl9tZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc3RhdHVzZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfZ2V0RXhwZXJpbWVudFJlc29sdmVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sUW4ucHJvdG90eXBlLCJfcmVzb2x2ZUdldEV4cGVyaW1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfbGlzdFNlc3Npb25Hcm91cHNDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydEJ5SW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sUW4ucHJvdG90eXBlLCJfc29ydERpcmVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRbi5wcm90b3R5cGUsIl9wYWdlU2l6ZUlucHV0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFuLnByb3RvdHlwZSwiX3BhZ2VOdW1iZXJJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxRbi5wcm90b3R5cGUsIl9wYWdlQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUW4ucHJvdG90eXBlLCJfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUW4ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHZvaWQgMCk7RShbQnQoImJhY2tlbmQiLCJleHBlcmltZW50TmFtZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfY29tcHV0ZUV4cGVyaW1lbnRBbmRSZWxhdGVkUHJvcHMiLG51bGwpO0UoW0J0KCJfaHBhcmFtcy4qIiwiX21ldHJpY3MuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sUW4ucHJvdG90eXBlLCJfdXBkYXRlQ29uZmlndXJhdGlvbiIsbnVsbCk7UW49RShbeXQoInRmLWhwYXJhbXMtcXVlcnktcGFuZSIpXSxRbik7dmFyIFVjdD1FZShPZSgpLDEpO3ZhciBtY3Q9dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJndpbmRvdy5jdXN0b21FbGVtZW50cyE9bnVsbCYmd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2shPT12b2lkIDA7dmFyIGkxPShlLHQscj1udWxsKT0+e2Zvcig7dCE9PXI7KXtsZXQgbj10Lm5leHRTaWJsaW5nO2UucmVtb3ZlQ2hpbGQodCksdD1ufX07dmFyIFljPWB7e2xpdC0ke1N0cmluZyhNYXRoLnJhbmRvbSgpKS5zbGljZSgyKX19fWAsZ2N0PWA8IS0tJHtZY30tLT5gLGRjZT1uZXcgUmVnRXhwKGAke1ljfXwke2djdH1gKSxkMz0iJGxpdCQiLG8xPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5wYXJ0cz1bXSx0aGlzLmVsZW1lbnQ9cjtsZXQgbj1bXSxpPVtdLG89ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLmNvbnRlbnQsMTMzLG51bGwsITEpLGE9MCxzPS0xLGw9MCx7c3RyaW5nczpjLHZhbHVlczp7bGVuZ3RoOnV9fT10O2Zvcig7bDx1Oyl7bGV0IGg9by5uZXh0Tm9kZSgpO2lmKGg9PT1udWxsKXtvLmN1cnJlbnROb2RlPWkucG9wKCk7Y29udGludWV9aWYocysrLGgubm9kZVR5cGU9PT0xKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7bGV0IGY9aC5hdHRyaWJ1dGVzLHtsZW5ndGg6cH09ZixkPTA7Zm9yKGxldCBnPTA7ZzxwO2crKyltY2UoZltnXS5uYW1lLGQzKSYmZCsrO2Zvcig7ZC0tID4wOyl7bGV0IGc9Y1tsXSxfPUhILmV4ZWMoZylbMl0seT1fLnRvTG93ZXJDYXNlKCkrZDMseD1oLmdldEF0dHJpYnV0ZSh5KTtoLnJlbW92ZUF0dHJpYnV0ZSh5KTtsZXQgYj14LnNwbGl0KGRjZSk7dGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJhdHRyaWJ1dGUiLGluZGV4OnMsbmFtZTpfLHN0cmluZ3M6Yn0pLGwrPWIubGVuZ3RoLTF9fWgudGFnTmFtZT09PSJURU1QTEFURSImJihpLnB1c2goaCksby5jdXJyZW50Tm9kZT1oLmNvbnRlbnQpfWVsc2UgaWYoaC5ub2RlVHlwZT09PTMpe2xldCBmPWguZGF0YTtpZihmLmluZGV4T2YoWWMpPj0wKXtsZXQgcD1oLnBhcmVudE5vZGUsZD1mLnNwbGl0KGRjZSksZz1kLmxlbmd0aC0xO2ZvcihsZXQgXz0wO188ZztfKyspe2xldCB5LHg9ZFtfXTtpZih4PT09IiIpeT1ZZigpO2Vsc2V7bGV0IGI9SEguZXhlYyh4KTtiIT09bnVsbCYmbWNlKGJbMl0sZDMpJiYoeD14LnNsaWNlKDAsYi5pbmRleCkrYlsxXStiWzJdLnNsaWNlKDAsLWQzLmxlbmd0aCkrYlszXSkseT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh4KX1wLmluc2VydEJlZm9yZSh5LGgpLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6KytzfSl9ZFtnXT09PSIiPyhwLmluc2VydEJlZm9yZShZZigpLGgpLG4ucHVzaChoKSk6aC5kYXRhPWRbZ10sbCs9Z319ZWxzZSBpZihoLm5vZGVUeXBlPT09OClpZihoLmRhdGE9PT1ZYyl7bGV0IGY9aC5wYXJlbnROb2RlOyhoLnByZXZpb3VzU2libGluZz09PW51bGx8fHM9PT1hKSYmKHMrKyxmLmluc2VydEJlZm9yZShZZigpLGgpKSxhPXMsdGhpcy5wYXJ0cy5wdXNoKHt0eXBlOiJub2RlIixpbmRleDpzfSksaC5uZXh0U2libGluZz09PW51bGw/aC5kYXRhPSIiOihuLnB1c2goaCkscy0tKSxsKyt9ZWxzZXtsZXQgZj0tMTtmb3IoOyhmPWguZGF0YS5pbmRleE9mKFljLGYrMSkpIT09LTE7KXRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6LTF9KSxsKyt9fWZvcihsZXQgaCBvZiBuKWgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKX19LG1jZT0oZSx0KT0+e2xldCByPWUubGVuZ3RoLXQubGVuZ3RoO3JldHVybiByPj0wJiZlLnNsaWNlKHIpPT09dH0sdlA9ZT0+ZS5pbmRleCE9PS0xLFlmPSgpPT5kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSxISD0vKFsgXHgwOVx4MGFceDBjXHgwZF0pKFteXDAtXHgxRlx4N0YtXHg5RiAiJz49L10rKShbIFx4MDlceDBhXHgwY1x4MGRdKj1bIFx4MDlceDBhXHgwY1x4MGRdKig/OlteIFx4MDlceDBhXHgwY1x4MGQiJ2A8Pj1dKnwiW14iXSp8J1teJ10qKSkkLzt2YXIgX2N0PTEzMztmdW5jdGlvbiB5Y3QoZSx0KXtsZXR7ZWxlbWVudDp7Y29udGVudDpyfSxwYXJ0czpufT1lLGk9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihyLF9jdCxudWxsLCExKSxvPXhQKG4pLGE9bltvXSxzPS0xLGw9MCxjPVtdLHU9bnVsbDtmb3IoO2kubmV4dE5vZGUoKTspe3MrKztsZXQgaD1pLmN1cnJlbnROb2RlO2ZvcihoLnByZXZpb3VzU2libGluZz09PXUmJih1PW51bGwpLHQuaGFzKGgpJiYoYy5wdXNoKGgpLHU9PT1udWxsJiYodT1oKSksdSE9PW51bGwmJmwrKzthIT09dm9pZCAwJiZhLmluZGV4PT09czspYS5pbmRleD11IT09bnVsbD8tMTphLmluZGV4LWwsbz14UChuLG8pLGE9bltvXX1jLmZvckVhY2goaD0+aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpKX12YXIgVHVyPWU9PntsZXQgdD1lLm5vZGVUeXBlPT09MTE/MDoxLHI9ZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlLF9jdCxudWxsLCExKTtmb3IoO3IubmV4dE5vZGUoKTspdCsrO3JldHVybiB0fSx4UD0oZSx0PS0xKT0+e2ZvcihsZXQgcj10KzE7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl07aWYodlAobikpcmV0dXJuIHJ9cmV0dXJuLTF9O2Z1bmN0aW9uIGdjZShlLHQscj1udWxsKXtsZXR7ZWxlbWVudDp7Y29udGVudDpufSxwYXJ0czppfT1lO2lmKHI9PW51bGwpe24uYXBwZW5kQ2hpbGQodCk7cmV0dXJufWxldCBvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobixfY3QsbnVsbCwhMSksYT14UChpKSxzPTAsbD0tMTtmb3IoO28ubmV4dE5vZGUoKTspZm9yKGwrKyxvLmN1cnJlbnROb2RlPT09ciYmKHM9VHVyKHQpLHIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxyKSk7YSE9PS0xJiZpW2FdLmluZGV4PT09bDspe2lmKHM+MCl7Zm9yKDthIT09LTE7KWlbYV0uaW5kZXgrPXMsYT14UChpLGEpO3JldHVybn1hPXhQKGksYSl9fXZhciBDdXI9bmV3IFdlYWtNYXA7dmFyIGExPWU9PnR5cGVvZiBlPT0iZnVuY3Rpb24iJiZDdXIuaGFzKGUpO3ZhciBMbD17fSxWSD17fTt2YXIgdzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX19wYXJ0cz1bXSx0aGlzLnRlbXBsYXRlPXQsdGhpcy5wcm9jZXNzb3I9cix0aGlzLm9wdGlvbnM9bn11cGRhdGUodCl7bGV0IHI9MDtmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uc2V0VmFsdWUodFtyXSkscisrO2ZvcihsZXQgbiBvZiB0aGlzLl9fcGFydHMpbiE9PXZvaWQgMCYmbi5jb21taXQoKX1fY2xvbmUoKXtsZXQgdD1tY3Q/dGhpcy50ZW1wbGF0ZS5lbGVtZW50LmNvbnRlbnQuY2xvbmVOb2RlKCEwKTpkb2N1bWVudC5pbXBvcnROb2RlKHRoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LCEwKSxyPVtdLG49dGhpcy50ZW1wbGF0ZS5wYXJ0cyxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCwxMzMsbnVsbCwhMSksbz0wLGE9MCxzLGw9aS5uZXh0Tm9kZSgpO2Zvcig7bzxuLmxlbmd0aDspe2lmKHM9bltvXSwhdlAocykpe3RoaXMuX19wYXJ0cy5wdXNoKHZvaWQgMCksbysrO2NvbnRpbnVlfWZvcig7YTxzLmluZGV4OylhKyssbC5ub2RlTmFtZT09PSJURU1QTEFURSImJihyLnB1c2gobCksaS5jdXJyZW50Tm9kZT1sLmNvbnRlbnQpLChsPWkubmV4dE5vZGUoKSk9PT1udWxsJiYoaS5jdXJyZW50Tm9kZT1yLnBvcCgpLGw9aS5uZXh0Tm9kZSgpKTtpZihzLnR5cGU9PT0ibm9kZSIpe2xldCBjPXRoaXMucHJvY2Vzc29yLmhhbmRsZVRleHRFeHByZXNzaW9uKHRoaXMub3B0aW9ucyk7Yy5pbnNlcnRBZnRlck5vZGUobC5wcmV2aW91c1NpYmxpbmcpLHRoaXMuX19wYXJ0cy5wdXNoKGMpfWVsc2UgdGhpcy5fX3BhcnRzLnB1c2goLi4udGhpcy5wcm9jZXNzb3IuaGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnMobCxzLm5hbWUscy5zdHJpbmdzLHRoaXMub3B0aW9ucykpO28rK31yZXR1cm4gbWN0JiYoZG9jdW1lbnQuYWRvcHROb2RlKHQpLGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUodCkpLHR9fTt2YXIgX2NlPXdpbmRvdy50cnVzdGVkVHlwZXMmJnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImxpdC1odG1sIix7Y3JlYXRlSFRNTDplPT5lfSksUHVyPWAgJHtZY30gYCxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1yLHRoaXMudHlwZT1uLHRoaXMucHJvY2Vzc29yPWl9Z2V0SFRNTCgpe2xldCB0PXRoaXMuc3RyaW5ncy5sZW5ndGgtMSxyPSIiLG49ITE7Zm9yKGxldCBpPTA7aTx0O2krKyl7bGV0IG89dGhpcy5zdHJpbmdzW2ldLGE9by5sYXN0SW5kZXhPZigiPCEtLSIpO249KGE+LTF8fG4pJiZvLmluZGV4T2YoIi0tPiIsYSsxKT09PS0xO2xldCBzPUhILmV4ZWMobyk7cz09PW51bGw/cis9bysobj9QdXI6Z2N0KTpyKz1vLnN1YnN0cigwLHMuaW5kZXgpK3NbMV0rc1syXStkMytzWzNdK1ljfXJldHVybiByKz10aGlzLnN0cmluZ3NbdF0scn1nZXRUZW1wbGF0ZUVsZW1lbnQoKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLHI9dGhpcy5nZXRIVE1MKCk7cmV0dXJuIF9jZSE9PXZvaWQgMCYmKHI9X2NlLmNyZWF0ZUhUTUwocikpLHQuaW5uZXJIVE1MPXIsdH19O3ZhciBHSD1lPT5lPT09bnVsbHx8ISh0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKSxVSD1lPT5BcnJheS5pc0FycmF5KGUpfHwhIShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLG0zPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmRpcnR5PSEwLHRoaXMuZWxlbWVudD10LHRoaXMubmFtZT1yLHRoaXMuc3RyaW5ncz1uLHRoaXMucGFydHM9W107Zm9yKGxldCBpPTA7aTxuLmxlbmd0aC0xO2krKyl0aGlzLnBhcnRzW2ldPXRoaXMuX2NyZWF0ZVBhcnQoKX1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgYlAodGhpcyl9X2dldFZhbHVlKCl7bGV0IHQ9dGhpcy5zdHJpbmdzLHI9dC5sZW5ndGgtMSxuPXRoaXMucGFydHM7aWYocj09PTEmJnRbMF09PT0iIiYmdFsxXT09PSIiKXtsZXQgbz1uWzBdLnZhbHVlO2lmKHR5cGVvZiBvPT0ic3ltYm9sIilyZXR1cm4gU3RyaW5nKG8pO2lmKHR5cGVvZiBvPT0ic3RyaW5nInx8IVVIKG8pKXJldHVybiBvfWxldCBpPSIiO2ZvcihsZXQgbz0wO288cjtvKyspe2krPXRbb107bGV0IGE9bltvXTtpZihhIT09dm9pZCAwKXtsZXQgcz1hLnZhbHVlO2lmKEdIKHMpfHwhVUgocykpaSs9dHlwZW9mIHM9PSJzdHJpbmciP3M6U3RyaW5nKHMpO2Vsc2UgZm9yKGxldCBsIG9mIHMpaSs9dHlwZW9mIGw9PSJzdHJpbmciP2w6U3RyaW5nKGwpfX1yZXR1cm4gaSs9dFtyXSxpfWNvbW1pdCgpe3RoaXMuZGlydHkmJih0aGlzLmRpcnR5PSExLHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLHRoaXMuX2dldFZhbHVlKCkpKX19LGJQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuY29tbWl0dGVyPXR9c2V0VmFsdWUodCl7dCE9PUxsJiYoIUdIKHQpfHx0IT09dGhpcy52YWx1ZSkmJih0aGlzLnZhbHVlPXQsYTEodCl8fCh0aGlzLmNvbW1pdHRlci5kaXJ0eT0hMCkpfWNvbW1pdCgpe2Zvcig7YTEodGhpcy52YWx1ZSk7KXtsZXQgdD10aGlzLnZhbHVlO3RoaXMudmFsdWU9TGwsdCh0aGlzKX10aGlzLnZhbHVlIT09TGwmJnRoaXMuY29tbWl0dGVyLmNvbW1pdCgpfX0sQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsdGhpcy5vcHRpb25zPXR9YXBwZW5kSW50byh0KXt0aGlzLnN0YXJ0Tm9kZT10LmFwcGVuZENoaWxkKFlmKCkpLHRoaXMuZW5kTm9kZT10LmFwcGVuZENoaWxkKFlmKCkpfWluc2VydEFmdGVyTm9kZSh0KXt0aGlzLnN0YXJ0Tm9kZT10LHRoaXMuZW5kTm9kZT10Lm5leHRTaWJsaW5nfWFwcGVuZEludG9QYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdC5fX2luc2VydCh0aGlzLmVuZE5vZGU9WWYoKSl9aW5zZXJ0QWZ0ZXJQYXJ0KHQpe3QuX19pbnNlcnQodGhpcy5zdGFydE5vZGU9WWYoKSksdGhpcy5lbmROb2RlPXQuZW5kTm9kZSx0LmVuZE5vZGU9dGhpcy5zdGFydE5vZGV9c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2lmKHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGU9PT1udWxsKXJldHVybjtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IHI9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLHIodGhpcyl9bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZTt0IT09TGwmJihHSCh0KT90IT09dGhpcy52YWx1ZSYmdGhpcy5fX2NvbW1pdFRleHQodCk6dCBpbnN0YW5jZW9mIFMwP3RoaXMuX19jb21taXRUZW1wbGF0ZVJlc3VsdCh0KTp0IGluc3RhbmNlb2YgTm9kZT90aGlzLl9fY29tbWl0Tm9kZSh0KTpVSCh0KT90aGlzLl9fY29tbWl0SXRlcmFibGUodCk6dD09PVZIPyh0aGlzLnZhbHVlPVZILHRoaXMuY2xlYXIoKSk6dGhpcy5fX2NvbW1pdFRleHQodCkpfV9faW5zZXJ0KHQpe3RoaXMuZW5kTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMuZW5kTm9kZSl9X19jb21taXROb2RlKHQpe3RoaXMudmFsdWUhPT10JiYodGhpcy5jbGVhcigpLHRoaXMuX19pbnNlcnQodCksdGhpcy52YWx1ZT10KX1fX2NvbW1pdFRleHQodCl7bGV0IHI9dGhpcy5zdGFydE5vZGUubmV4dFNpYmxpbmc7dD10PT1udWxsPyIiOnQ7bGV0IG49dHlwZW9mIHQ9PSJzdHJpbmciP3Q6U3RyaW5nKHQpO3I9PT10aGlzLmVuZE5vZGUucHJldmlvdXNTaWJsaW5nJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGE9bjp0aGlzLl9fY29tbWl0Tm9kZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSksdGhpcy52YWx1ZT10fV9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCl7bGV0IHI9dGhpcy5vcHRpb25zLnRlbXBsYXRlRmFjdG9yeSh0KTtpZih0aGlzLnZhbHVlIGluc3RhbmNlb2YgdzAmJnRoaXMudmFsdWUudGVtcGxhdGU9PT1yKXRoaXMudmFsdWUudXBkYXRlKHQudmFsdWVzKTtlbHNle2xldCBuPW5ldyB3MChyLHQucHJvY2Vzc29yLHRoaXMub3B0aW9ucyksaT1uLl9jbG9uZSgpO24udXBkYXRlKHQudmFsdWVzKSx0aGlzLl9fY29tbWl0Tm9kZShpKSx0aGlzLnZhbHVlPW59fV9fY29tbWl0SXRlcmFibGUodCl7QXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKXx8KHRoaXMudmFsdWU9W10sdGhpcy5jbGVhcigpKTtsZXQgcj10aGlzLnZhbHVlLG49MCxpO2ZvcihsZXQgbyBvZiB0KWk9cltuXSxpPT09dm9pZCAwJiYoaT1uZXcgQmQodGhpcy5vcHRpb25zKSxyLnB1c2goaSksbj09PTA/aS5hcHBlbmRJbnRvUGFydCh0aGlzKTppLmluc2VydEFmdGVyUGFydChyW24tMV0pKSxpLnNldFZhbHVlKG8pLGkuY29tbWl0KCksbisrO248ci5sZW5ndGgmJihyLmxlbmd0aD1uLHRoaXMuY2xlYXIoaSYmaS5lbmROb2RlKSl9Y2xlYXIodD10aGlzLnN0YXJ0Tm9kZSl7aTEodGhpcy5zdGFydE5vZGUucGFyZW50Tm9kZSx0Lm5leHRTaWJsaW5nLHRoaXMuZW5kTm9kZSl9fSx3UD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYodGhpcy52YWx1ZT12b2lkIDAsdGhpcy5fX3BlbmRpbmdWYWx1ZT12b2lkIDAsbi5sZW5ndGghPT0yfHxuWzBdIT09IiJ8fG5bMV0hPT0iIil0aHJvdyBuZXcgRXJyb3IoIkJvb2xlYW4gYXR0cmlidXRlcyBjYW4gb25seSBjb250YWluIGEgc2luZ2xlIGV4cHJlc3Npb24iKTt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bn1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthMSh0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9ISF0aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMudmFsdWUhPT10JiYodD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSwiIik6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpLHRoaXMudmFsdWU9dCksdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH19LFNQPWNsYXNzIGV4dGVuZHMgbTN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscixuKSx0aGlzLnNpbmdsZT1uLmxlbmd0aD09PTImJm5bMF09PT0iIiYmblsxXT09PSIifV9jcmVhdGVQYXJ0KCl7cmV0dXJuIG5ldyBxSCh0aGlzKX1fZ2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zaW5nbGU/dGhpcy5wYXJ0c1swXS52YWx1ZTpzdXBlci5fZ2V0VmFsdWUoKX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT10aGlzLl9nZXRWYWx1ZSgpKX19LHFIPWNsYXNzIGV4dGVuZHMgYlB7fSx5Y2U9ITE7KCgpPT57dHJ5e2xldCBlPXtnZXQgY2FwdHVyZSgpe3JldHVybiB5Y2U9ITAsITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZSxlKX1jYXRjaChlKXt9fSkoKTt2YXIgTVA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMuZWxlbWVudD10LHRoaXMuZXZlbnROYW1lPXIsdGhpcy5ldmVudENvbnRleHQ9bix0aGlzLl9fYm91bmRIYW5kbGVFdmVudD1pPT50aGlzLmhhbmRsZUV2ZW50KGkpfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtmb3IoO2ExKHRoaXMuX19wZW5kaW5nVmFsdWUpOyl7bGV0IG89dGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsLG8odGhpcyl9aWYodGhpcy5fX3BlbmRpbmdWYWx1ZT09PUxsKXJldHVybjtsZXQgdD10aGlzLl9fcGVuZGluZ1ZhbHVlLHI9dGhpcy52YWx1ZSxuPXQ9PW51bGx8fHIhPW51bGwmJih0LmNhcHR1cmUhPT1yLmNhcHR1cmV8fHQub25jZSE9PXIub25jZXx8dC5wYXNzaXZlIT09ci5wYXNzaXZlKSxpPXQhPW51bGwmJihyPT1udWxsfHxuKTtuJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucyksaSYmKHRoaXMuX19vcHRpb25zPUl1cih0KSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSx0aGlzLl9fYm91bmRIYW5kbGVFdmVudCx0aGlzLl9fb3B0aW9ucykpLHRoaXMudmFsdWU9dCx0aGlzLl9fcGVuZGluZ1ZhbHVlPUxsfWhhbmRsZUV2ZW50KHQpe3R5cGVvZiB0aGlzLnZhbHVlPT0iZnVuY3Rpb24iP3RoaXMudmFsdWUuY2FsbCh0aGlzLmV2ZW50Q29udGV4dHx8dGhpcy5lbGVtZW50LHQpOnRoaXMudmFsdWUuaGFuZGxlRXZlbnQodCl9fSxJdXI9ZT0+ZSYmKHljZT97Y2FwdHVyZTplLmNhcHR1cmUscGFzc2l2ZTplLnBhc3NpdmUsb25jZTplLm9uY2V9OmUuY2FwdHVyZSk7ZnVuY3Rpb24gdmN0KGUpe2xldCB0PXMxLmdldChlLnR5cGUpO3Q9PT12b2lkIDAmJih0PXtzdHJpbmdzQXJyYXk6bmV3IFdlYWtNYXAsa2V5U3RyaW5nOm5ldyBNYXB9LHMxLnNldChlLnR5cGUsdCkpO2xldCByPXQuc3RyaW5nc0FycmF5LmdldChlLnN0cmluZ3MpO2lmKHIhPT12b2lkIDApcmV0dXJuIHI7bGV0IG49ZS5zdHJpbmdzLmpvaW4oWWMpO3JldHVybiByPXQua2V5U3RyaW5nLmdldChuKSxyPT09dm9pZCAwJiYocj1uZXcgbzEoZSxlLmdldFRlbXBsYXRlRWxlbWVudCgpKSx0LmtleVN0cmluZy5zZXQobixyKSksdC5zdHJpbmdzQXJyYXkuc2V0KGUuc3RyaW5ncyxyKSxyfXZhciBzMT1uZXcgTWFwO3ZhciBNMD1uZXcgV2Vha01hcCx4Y3Q9KGUsdCxyKT0+e2xldCBuPU0wLmdldCh0KTtuPT09dm9pZCAwJiYoaTEodCx0LmZpcnN0Q2hpbGQpLE0wLnNldCh0LG49bmV3IEJkKE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTp2Y3R9LHIpKSksbi5hcHBlbmRJbnRvKHQpKSxuLnNldFZhbHVlKGUpLG4uY29tbWl0KCl9O3ZhciBXSD1jbGFzc3toYW5kbGVBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LHIsbixpKXtsZXQgbz1yWzBdO3JldHVybiBvPT09Ii4iP25ldyBTUCh0LHIuc2xpY2UoMSksbikucGFydHM6bz09PSJAIj9bbmV3IE1QKHQsci5zbGljZSgxKSxpLmV2ZW50Q29udGV4dCldOm89PT0iPyI/W25ldyB3UCh0LHIuc2xpY2UoMSksbildOm5ldyBtMyh0LHIsbikucGFydHN9aGFuZGxlVGV4dEV4cHJlc3Npb24odCl7cmV0dXJuIG5ldyBCZCh0KX19LHZjZT1uZXcgV0g7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cubGl0SHRtbFZlcnNpb25zfHwod2luZG93LmxpdEh0bWxWZXJzaW9ucz1bXSkpLnB1c2goIjEuNC4xIik7dmFyIGJjZT0oZSx0KT0+YCR7ZX0tLSR7dH1gLFlIPSEwO3R5cGVvZiB3aW5kb3cuU2hhZHlDU1M9PSJ1bmRlZmluZWQiP1lIPSExOnR5cGVvZiB3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlRG9tPT0idW5kZWZpbmVkIiYmKGNvbnNvbGUud2FybigiSW5jb21wYXRpYmxlIFNoYWR5Q1NTIHZlcnNpb24gZGV0ZWN0ZWQuIFBsZWFzZSB1cGRhdGUgdG8gYXQgbGVhc3QgQHdlYmNvbXBvbmVudHMvd2ViY29tcG9uZW50c2pzQDIuMC4yIGFuZCBAd2ViY29tcG9uZW50cy9zaGFkeWNzc0AxLjMuMS4iKSxZSD0hMSk7dmFyIFJ1cj1lPT50PT57bGV0IHI9YmNlKHQudHlwZSxlKSxuPXMxLmdldChyKTtuPT09dm9pZCAwJiYobj17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzMS5zZXQocixuKSk7bGV0IGk9bi5zdHJpbmdzQXJyYXkuZ2V0KHQuc3RyaW5ncyk7aWYoaSE9PXZvaWQgMClyZXR1cm4gaTtsZXQgbz10LnN0cmluZ3Muam9pbihZYyk7aWYoaT1uLmtleVN0cmluZy5nZXQobyksaT09PXZvaWQgMCl7bGV0IGE9dC5nZXRUZW1wbGF0ZUVsZW1lbnQoKTtZSCYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbShhLGUpLGk9bmV3IG8xKHQsYSksbi5rZXlTdHJpbmcuc2V0KG8saSl9cmV0dXJuIG4uc3RyaW5nc0FycmF5LnNldCh0LnN0cmluZ3MsaSksaX0sTnVyPVsiaHRtbCIsInN2ZyJdLER1cj1lPT57TnVyLmZvckVhY2godD0+e2xldCByPXMxLmdldChiY2UodCxlKSk7ciE9PXZvaWQgMCYmci5rZXlTdHJpbmcuZm9yRWFjaChuPT57bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6aX19PW4sbz1uZXcgU2V0O0FycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpKS5mb3JFYWNoKGE9PntvLmFkZChhKX0pLHljdChuLG8pfSl9KX0sd2NlPW5ldyBTZXQsT3VyPShlLHQscik9Pnt3Y2UuYWRkKGUpO2xldCBuPXI/ci5lbGVtZW50OmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIiksaT10LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIikse2xlbmd0aDpvfT1pO2lmKG89PT0wKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7cmV0dXJufWxldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7Zm9yKGxldCBjPTA7YzxvO2MrKyl7bGV0IHU9aVtjXTt1LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSksYS50ZXh0Q29udGVudCs9dS50ZXh0Q29udGVudH1EdXIoZSk7bGV0IHM9bi5jb250ZW50O3I/Z2NlKHIsYSxzLmZpcnN0Q2hpbGQpOnMuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKSx3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlU3R5bGVzKG4sZSk7bGV0IGw9cy5xdWVyeVNlbGVjdG9yKCJzdHlsZSIpO2lmKHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cmJmwhPT1udWxsKXQuaW5zZXJ0QmVmb3JlKGwuY2xvbmVOb2RlKCEwKSx0LmZpcnN0Q2hpbGQpO2Vsc2UgaWYocil7cy5pbnNlcnRCZWZvcmUoYSxzLmZpcnN0Q2hpbGQpO2xldCBjPW5ldyBTZXQ7Yy5hZGQoYSkseWN0KHIsYyl9fSxTY2U9KGUsdCxyKT0+e2lmKCFyfHx0eXBlb2YgciE9Im9iamVjdCJ8fCFyLnNjb3BlTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgc2NvcGVOYW1lYCBvcHRpb24gaXMgcmVxdWlyZWQuIik7bGV0IG49ci5zY29wZU5hbWUsaT1NMC5oYXModCksbz1ZSCYmdC5ub2RlVHlwZT09PTExJiYhIXQuaG9zdCxhPW8mJiF3Y2UuaGFzKG4pLHM9YT9kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk6dDtpZih4Y3QoZSxzLE9iamVjdC5hc3NpZ24oe3RlbXBsYXRlRmFjdG9yeTpSdXIobil9LHIpKSxhKXtsZXQgbD1NMC5nZXQocyk7TTAuZGVsZXRlKHMpO2xldCBjPWwudmFsdWUgaW5zdGFuY2VvZiB3MD9sLnZhbHVlLnRlbXBsYXRlOnZvaWQgMDtPdXIobixzLGMpLGkxKHQsdC5maXJzdENoaWxkKSx0LmFwcGVuZENoaWxkKHMpLE0wLnNldCh0LGwpfSFpJiZvJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHQuaG9zdCl9O3ZhciBNY2U7d2luZG93LkpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHk9KGUsdCk9PmU7dmFyIFRjdD17dG9BdHRyaWJ1dGUoZSx0KXtzd2l0Y2godCl7Y2FzZSBCb29sZWFuOnJldHVybiBlPyIiOm51bGw7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpyZXR1cm4gZT09bnVsbD9lOkpTT04uc3RyaW5naWZ5KGUpfXJldHVybiBlfSxmcm9tQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZSE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIGU9PT1udWxsP251bGw6TnVtYmVyKGUpO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIEpTT04ucGFyc2UoZSl9cmV0dXJuIGV9fSxFY2U9KGUsdCk9PnQhPT1lJiYodD09PXR8fGU9PT1lKSxiY3Q9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6VGN0LHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpFY2V9LHdjdD0xLFNjdD0xPDwyLE1jdD0xPDwzLEVjdD0xPDw0LENjdD0iZmluYWxpemVkIixnMz1jbGFzcyBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmluaXRpYWxpemUoKX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PntsZXQgaT10aGlzLl9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobixyKTtpIT09dm9pZCAwJiYodGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5zZXQoaSxuKSx0LnB1c2goaSkpfSksdH1zdGF0aWMgX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9jbGFzc1Byb3BlcnRpZXMiLHRoaXMpKSl7dGhpcy5fY2xhc3NQcm9wZXJ0aWVzPW5ldyBNYXA7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9jbGFzc1Byb3BlcnRpZXM7dCE9PXZvaWQgMCYmdC5mb3JFYWNoKChyLG4pPT50aGlzLl9jbGFzc1Byb3BlcnRpZXMuc2V0KG4scikpfX1zdGF0aWMgY3JlYXRlUHJvcGVydHkodCxyPWJjdCl7aWYodGhpcy5fZW5zdXJlQ2xhc3NQcm9wZXJ0aWVzKCksdGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldCh0LHIpLHIubm9BY2Nlc3Nvcnx8dGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuO2xldCBuPXR5cGVvZiB0PT0ic3ltYm9sIj9TeW1ib2woKTpgX18ke3R9YCxpPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQsbixyKTtpIT09dm9pZCAwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsdCxpKX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQscixuKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbcl19LHNldChpKXtsZXQgbz10aGlzW3RdO3RoaXNbcl09aSx0aGlzLnJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LG8sbil9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQpe3JldHVybiB0aGlzLl9jbGFzc1Byb3BlcnRpZXMmJnRoaXMuX2NsYXNzUHJvcGVydGllcy5nZXQodCl8fGJjdH1zdGF0aWMgZmluYWxpemUoKXtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYodC5oYXNPd25Qcm9wZXJ0eShDY3QpfHx0LmZpbmFsaXplKCksdGhpc1tDY3RdPSEwLHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXA9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLHRoaXMpKSl7bGV0IHI9dGhpcy5wcm9wZXJ0aWVzLG49Wy4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLC4uLnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocik6W11dO2ZvcihsZXQgaSBvZiBuKXRoaXMuY3JlYXRlUHJvcGVydHkoaSxyW2ldKX19c3RhdGljIF9hdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkodCxyKXtsZXQgbj1yLmF0dHJpYnV0ZTtyZXR1cm4gbj09PSExP3ZvaWQgMDp0eXBlb2Ygbj09InN0cmluZyI/bjp0eXBlb2YgdD09InN0cmluZyI/dC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1zdGF0aWMgX3ZhbHVlSGFzQ2hhbmdlZCh0LHIsbj1FY2Upe3JldHVybiBuKHQscil9c3RhdGljIF9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZSh0LHIpe2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyfHxUY3Qsbz10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmkuZnJvbUF0dHJpYnV0ZTtyZXR1cm4gbz9vKHQsbik6dH1zdGF0aWMgX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZSh0LHIpe2lmKHIucmVmbGVjdD09PXZvaWQgMClyZXR1cm47bGV0IG49ci50eXBlLGk9ci5jb252ZXJ0ZXI7cmV0dXJuKGkmJmkudG9BdHRyaWJ1dGV8fFRjdC50b0F0dHJpYnV0ZSkodCxuKX1pbml0aWFsaXplKCl7dGhpcy5fdXBkYXRlU3RhdGU9MCx0aGlzLl91cGRhdGVQcm9taXNlPW5ldyBQcm9taXNlKHQ9PnRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dCksdGhpcy5fY2hhbmdlZFByb3BlcnRpZXM9bmV3IE1hcCx0aGlzLl9zYXZlSW5zdGFuY2VQcm9wZXJ0aWVzKCksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwoKX1fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuY29uc3RydWN0b3IuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT57aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShyKSl7bGV0IG49dGhpc1tyXTtkZWxldGUgdGhpc1tyXSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXN8fCh0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9bmV3IE1hcCksdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzLnNldChyLG4pfX0pfV9hcHBseUluc3RhbmNlUHJvcGVydGllcygpe3RoaXMuX2luc3RhbmNlUHJvcGVydGllcy5mb3JFYWNoKCh0LHIpPT50aGlzW3JdPXQpLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcz12b2lkIDB9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLmVuYWJsZVVwZGF0aW5nKCl9ZW5hYmxlVXBkYXRpbmcoKXt0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyIT09dm9pZCAwJiYodGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlcigpLHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXI9dm9pZCAwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe31hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3IhPT1uJiZ0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHQsbil9X3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxyLG49YmN0KXtsZXQgaT10aGlzLmNvbnN0cnVjdG9yLG89aS5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQsbik7aWYobyE9PXZvaWQgMCl7bGV0IGE9aS5fcHJvcGVydHlWYWx1ZVRvQXR0cmlidXRlKHIsbik7aWYoYT09PXZvaWQgMClyZXR1cm47dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0LGE9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobyk6dGhpcy5zZXRBdHRyaWJ1dGUobyxhKSx0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZSZ+TWN0fX1fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LHIpe2lmKHRoaXMuX3VwZGF0ZVN0YXRlJk1jdClyZXR1cm47bGV0IG49dGhpcy5jb25zdHJ1Y3RvcixpPW4uX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuZ2V0KHQpO2lmKGkhPT12b2lkIDApe2xldCBvPW4uZ2V0UHJvcGVydHlPcHRpb25zKGkpO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCx0aGlzW2ldPW4uX3Byb3BlcnR5VmFsdWVGcm9tQXR0cmlidXRlKHIsbyksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19cmVxdWVzdFVwZGF0ZUludGVybmFsKHQscixuKXtsZXQgaT0hMDtpZih0IT09dm9pZCAwKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yO249bnx8by5nZXRQcm9wZXJ0eU9wdGlvbnModCksby5fdmFsdWVIYXNDaGFuZ2VkKHRoaXNbdF0scixuLmhhc0NoYW5nZWQpPyh0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5oYXModCl8fHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzLnNldCh0LHIpLG4ucmVmbGVjdD09PSEwJiYhKHRoaXMuX3VwZGF0ZVN0YXRlJkVjdCkmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz09PXZvaWQgMCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNldCh0LG4pKSk6aT0hMX0hdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlJiZpJiYodGhpcy5fdXBkYXRlUHJvbWlzZT10aGlzLl9lbnF1ZXVlVXBkYXRlKCkpfXJlcXVlc3RVcGRhdGUodCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxyKSx0aGlzLnVwZGF0ZUNvbXBsZXRlfV9lbnF1ZXVlVXBkYXRlKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxTY3Q7dHJ5e3lpZWxkIHRoaXMuX3VwZGF0ZVByb21pc2V9Y2F0Y2gocil7fWxldCB0PXRoaXMucGVyZm9ybVVwZGF0ZSgpO3JldHVybiB0IT1udWxsJiYoeWllbGQgdCksIXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZX0pfWdldCBfaGFzUmVxdWVzdGVkVXBkYXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN0YXRlJlNjdH1nZXQgaGFzVXBkYXRlZCgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZ3Y3R9cGVyZm9ybVVwZGF0ZSgpe2lmKCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGUpcmV0dXJuO3RoaXMuX2luc3RhbmNlUHJvcGVydGllcyYmdGhpcy5fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKTtsZXQgdD0hMSxyPXRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzO3RyeXt0PXRoaXMuc2hvdWxkVXBkYXRlKHIpLHQ/dGhpcy51cGRhdGUocik6dGhpcy5fbWFya1VwZGF0ZWQoKX1jYXRjaChuKXt0aHJvdyB0PSExLHRoaXMuX21hcmtVcGRhdGVkKCksbn10JiYodGhpcy5fdXBkYXRlU3RhdGUmd2N0fHwodGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8d2N0LHRoaXMuZmlyc3RVcGRhdGVkKHIpKSx0aGlzLnVwZGF0ZWQocikpfV9tYXJrVXBkYXRlZCgpe3RoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmflNjdH1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fZ2V0VXBkYXRlQ29tcGxldGUoKX1fZ2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2V9c2hvdWxkVXBkYXRlKHQpe3JldHVybiEwfXVwZGF0ZSh0KXt0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcyE9PXZvaWQgMCYmdGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuc2l6ZT4wJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMuZm9yRWFjaCgocixuKT0+dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShuLHRoaXNbbl0scikpLHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzPXZvaWQgMCksdGhpcy5fbWFya1VwZGF0ZWQoKX11cGRhdGVkKHQpe31maXJzdFVwZGF0ZWQodCl7fX07TWNlPUNjdDtnM1tNY2VdPSEwO3ZhciBUY2U9RWxlbWVudC5wcm90b3R5cGUsYmlpPVRjZS5tc01hdGNoZXNTZWxlY3Rvcnx8VGNlLndlYmtpdE1hdGNoZXNTZWxlY3Rvcjt2YXIgakg9d2luZG93LlNoYWRvd1Jvb3QmJih3aW5kb3cuU2hhZHlDU1M9PT12b2lkIDB8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsQWN0PVN5bWJvbCgpLGwxPWNsYXNze2NvbnN0cnVjdG9yKHQscil7aWYociE9PUFjdCl0aHJvdyBuZXcgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PXR9Z2V0IHN0eWxlU2hlZXQoKXtyZXR1cm4gdGhpcy5fc3R5bGVTaGVldD09PXZvaWQgMCYmKGpIPyh0aGlzLl9zdHlsZVNoZWV0PW5ldyBDU1NTdHlsZVNoZWV0LHRoaXMuX3N0eWxlU2hlZXQucmVwbGFjZVN5bmModGhpcy5jc3NUZXh0KSk6dGhpcy5fc3R5bGVTaGVldD1udWxsKSx0aGlzLl9zdHlsZVNoZWV0fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19LFBjdD1lPT5uZXcgbDEoU3RyaW5nKGUpLEFjdCksenVyPWU9PntpZihlIGluc3RhbmNlb2YgbDEpcmV0dXJuIGUuY3NzVGV4dDtpZih0eXBlb2YgZT09Im51bWJlciIpcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogJHtlfS4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApfSxDaT0oZSwuLi50KT0+e2xldCByPXQucmVkdWNlKChuLGksbyk9Pm4renVyKGkpK2VbbysxXSxlWzBdKTtyZXR1cm4gbmV3IGwxKHIsQWN0KX07KHdpbmRvdy5saXRFbGVtZW50VmVyc2lvbnN8fCh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zPVtdKSkucHVzaCgiMi41LjEiKTt2YXIgQ2NlPXt9LEVQPWNsYXNzIGV4dGVuZHMgZzN7c3RhdGljIGdldFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlc31zdGF0aWMgX2dldFVuaXF1ZVN0eWxlcygpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3N0eWxlcyIsdGhpcykpKXJldHVybjtsZXQgdD10aGlzLmdldFN0eWxlcygpO2lmKEFycmF5LmlzQXJyYXkodCkpe2xldCByPShvLGEpPT5vLnJlZHVjZVJpZ2h0KChzLGwpPT5BcnJheS5pc0FycmF5KGwpP3IobCxzKToocy5hZGQobCkscyksYSksbj1yKHQsbmV3IFNldCksaT1bXTtuLmZvckVhY2gobz0+aS51bnNoaWZ0KG8pKSx0aGlzLl9zdHlsZXM9aX1lbHNlIHRoaXMuX3N0eWxlcz10PT09dm9pZCAwP1tdOlt0XTt0aGlzLl9zdHlsZXM9dGhpcy5fc3R5bGVzLm1hcChyPT57aWYociBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQmJiFqSCl7bGV0IG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5jc3NSdWxlcykucmVkdWNlKChpLG8pPT5pK28uY3NzVGV4dCwiIik7cmV0dXJuIFBjdChuKX1yZXR1cm4gcn0pfWluaXRpYWxpemUoKXtzdXBlci5pbml0aWFsaXplKCksdGhpcy5jb25zdHJ1Y3Rvci5fZ2V0VW5pcXVlU3R5bGVzKCksdGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpLHdpbmRvdy5TaGFkb3dSb290JiZ0aGlzLnJlbmRlclJvb3QgaW5zdGFuY2VvZiB3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5hZG9wdFN0eWxlcygpfWNyZWF0ZVJlbmRlclJvb3QoKXtyZXR1cm4gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyl9YWRvcHRTdHlsZXMoKXtsZXQgdD10aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXM7dC5sZW5ndGghPT0wJiYod2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiYhd2luZG93LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdz93aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0ucHJlcGFyZUFkb3B0ZWRDc3NUZXh0KHQubWFwKHI9PnIuY3NzVGV4dCksdGhpcy5sb2NhbE5hbWUpOmpIP3RoaXMucmVuZGVyUm9vdC5hZG9wdGVkU3R5bGVTaGVldHM9dC5tYXAocj0+ciBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/cjpyLnN0eWxlU2hlZXQpOnRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzVXBkYXRlZCYmd2luZG93LlNoYWR5Q1NTIT09dm9pZCAwJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVFbGVtZW50KHRoaXMpfXVwZGF0ZSh0KXtsZXQgcj10aGlzLnJlbmRlcigpO3N1cGVyLnVwZGF0ZSh0KSxyIT09Q2NlJiZ0aGlzLmNvbnN0cnVjdG9yLnJlbmRlcihyLHRoaXMucmVuZGVyUm9vdCx7c2NvcGVOYW1lOnRoaXMubG9jYWxOYW1lLGV2ZW50Q29udGV4dDp0aGlzfSksdGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzJiYodGhpcy5fbmVlZHNTaGltQWRvcHRlZFN0eWxlU2hlZXRzPSExLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlcy5mb3JFYWNoKG49PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kudGV4dENvbnRlbnQ9bi5jc3NUZXh0LHRoaXMucmVuZGVyUm9vdC5hcHBlbmRDaGlsZChpKX0pKX1yZW5kZXIoKXtyZXR1cm4gQ2NlfX07RVAuZmluYWxpemVkPSEwO0VQLnJlbmRlcj1TY2U7RVAuc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifTt2YXIgQWNlPTAsSWN0PXt9LGpjPShlLHQscik9PntsZXQgbj1yJiZyLm1vZHVsZUlkfHxgY3VzdG9tLXN0eWxlLW1vZHVsZS0ke0FjZSsrfWA7QXJyYXkuaXNBcnJheSh0KXx8KHQ9dD9bdF06W10pLHQuZm9yRWFjaChhPT57aWYoIShhIGluc3RhbmNlb2YgbDEpKXRocm93IG5ldyBFcnJvcigiQW4gaXRlbSBpbiBzdHlsZXMgaXMgbm90IG9mIHR5cGUgQ1NTUmVzdWx0LiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AuIik7aWYoIUljdFthXSl7bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpO3MuaW5uZXJIVE1MPWAKICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICA8c3R5bGU+JHthLnRvU3RyaW5nKCl9PC9zdHlsZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICBgO2xldCBsPWBjdXN0b20tc3R5bGUtbW9kdWxlLSR7QWNlKyt9YDtzLnJlZ2lzdGVyKGwpLEljdFthXT1sfX0pO2xldCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtpZihlKXtsZXQgYT1jdXN0b21FbGVtZW50cy5nZXQoZSk7YSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9fZmluYWxpemVkIikmJmNvbnNvbGUud2FybihgVGhlIGN1c3RvbSBlbGVtZW50IGRlZmluaXRpb24gZm9yICIke2V9IgogICAgICB3YXMgZmluYWxpemVkIGJlZm9yZSBhIHN0eWxlIG1vZHVsZSB3YXMgcmVnaXN0ZXJlZC4KICAgICAgTWFrZSBzdXJlIHRvIGFkZCBjb21wb25lbnQgc3BlY2lmaWMgc3R5bGUgbW9kdWxlcyBiZWZvcmUKICAgICAgaW1wb3J0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGN1c3RvbSBlbGVtZW50LmApLGkuc2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiLGUpfWxldCBvPXImJnIuaW5jbHVkZXx8W107aS5pbm5lckhUTUw9YAogICAgPHRlbXBsYXRlPgogICAgICAke28ubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke2F9Pjwvc3R5bGU+YCl9CiAgICAgICR7dC5tYXAoYT0+YDxzdHlsZSBpbmNsdWRlPSR7SWN0W2FdfT48L3N0eWxlPmApfQogICAgPC90ZW1wbGF0ZT4KICBgLGkucmVnaXN0ZXIobil9O3ZhciBMY3Q9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgidmFhZGluLWx1bW8tc3R5bGVzIixMY3QpO3ZhciBGdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjZmZmOwoKICAgIC8qIFRpbnQgKi8KICAgIC0tbHVtby10aW50LTVwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMyk7CiAgICAtLWx1bW8tdGludC0xMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC4zNyk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC40NCk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41KTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjU3KTsKICAgIC0tbHVtby10aW50LTUwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjY0KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtNzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNzcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuODQpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogI2ZmZjsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCA2MSUsIDI1JSwgMC4wNSk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA1NyUsIDI0JSwgMC4xKTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDUzJSwgMjMlLCAwLjE2KTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDUwJSwgMjIlLCAwLjI2KTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDQ3JSwgMjElLCAwLjM4KTsKICAgIC0tbHVtby1zaGFkZS01MHBjdDogaHNsYSgyMTQsIDQ1JSwgMjAlLCAwLjUpOwogICAgLS1sdW1vLXNoYWRlLTYwcGN0OiBoc2xhKDIxNCwgNDMlLCAxOSUsIDAuNjEpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgNDIlLCAxOCUsIDAuNzIpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgNDElLCAxNyUsIDAuODMpOwogICAgLS1sdW1vLXNoYWRlLTkwcGN0OiBoc2xhKDIxNCwgNDAlLCAxNiUsIDAuOTQpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzNSUsIDE1JSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXNoYWRlLTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTEwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0yMHBjdDogdmFyKC0tbHVtby1zaGFkZS0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC01MHBjdDogdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTcwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC04MHBjdDogdmFyKC0tbHVtby1zaGFkZS04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXNoYWRlKTsKCiAgICAvKiBUZXh0ICovCiAgICAtLWx1bW8taGVhZGVyLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QpOwogICAgLS1sdW1vLWJvZHktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC05MHBjdCk7CiAgICAtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNzBwY3QpOwogICAgLS1sdW1vLXRlcnRpYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtNTBwY3QpOwogICAgLS1sdW1vLWRpc2FibGVkLXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwoKICAgIC8qIFByaW1hcnkgKi8KICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yOiBoc2woMjE0LCA5MCUsIDUyJSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdDogaHNsYSgyMTQsIDkwJSwgNTIlLCAwLjUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC4xKTsKICAgIC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICAtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcjogI2ZmZjsKCiAgICAvKiBFcnJvciAqLwogICAgLS1sdW1vLWVycm9yLWNvbG9yOiBoc2woMywgMTAwJSwgNjElKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCAxMDAlLCA2MCUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjEpOwogICAgLS1sdW1vLWVycm9yLXRleHQtY29sb3I6IGhzbCgzLCA5MiUsIDUzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDgwJSwgNDIlKTsgLyogaHNsKDE0NCw4MiUsMzclKTsgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuNTUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItMTBwY3Q6IGhzbGEoMTQ1LCA3NiUsIDQ0JSwgMC4xMik7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCAxMDAlLCAzMiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29udHJhc3QtY29sb3I6ICNmZmY7CiAgfQpgLFBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1BjZS5pbm5lckhUTUw9YDxzdHlsZT4ke0Z1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFBjZS5jb250ZW50KTt2YXIgQnVyPUNpYAogIFt0aGVtZX49J2RhcmsnXSB7CiAgICAvKiBCYXNlIChiYWNrZ3JvdW5kKSAqLwogICAgLS1sdW1vLWJhc2UtY29sb3I6IGhzbCgyMTQsIDM1JSwgMjElKTsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDIxNCwgNjUlLCA4NSUsIDAuMDYpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMjE0LCA2MCUsIDgwJSwgMC4xNCk7CiAgICAtLWx1bW8tdGludC0yMHBjdDogaHNsYSgyMTQsIDY0JSwgODIlLCAwLjIzKTsKICAgIC0tbHVtby10aW50LTMwcGN0OiBoc2xhKDIxNCwgNjklLCA4NCUsIDAuMzIpOwogICAgLS1sdW1vLXRpbnQtNDBwY3Q6IGhzbGEoMjE0LCA3MyUsIDg2JSwgMC40MSk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgyMTQsIDc4JSwgODglLCAwLjUpOwogICAgLS1sdW1vLXRpbnQtNjBwY3Q6IGhzbGEoMjE0LCA4MiUsIDkwJSwgMC42KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDIxNCwgODclLCA5MiUsIDAuNyk7CiAgICAtLWx1bW8tdGludC04MHBjdDogaHNsYSgyMTQsIDkxJSwgOTQlLCAwLjgpOwogICAgLS1sdW1vLXRpbnQtOTBwY3Q6IGhzbGEoMjE0LCA5NiUsIDk2JSwgMC45KTsKICAgIC0tbHVtby10aW50OiBoc2woMjE0LCAxMDAlLCA5OCUpOwoKICAgIC8qIFNoYWRlICovCiAgICAtLWx1bW8tc2hhZGUtNXBjdDogaHNsYSgyMTQsIDAlLCAwJSwgMC4wNyk7CiAgICAtLWx1bW8tc2hhZGUtMTBwY3Q6IGhzbGEoMjE0LCA0JSwgMiUsIDAuMTUpOwogICAgLS1sdW1vLXNoYWRlLTIwcGN0OiBoc2xhKDIxNCwgOCUsIDQlLCAwLjIzKTsKICAgIC0tbHVtby1zaGFkZS0zMHBjdDogaHNsYSgyMTQsIDEyJSwgNiUsIDAuMzIpOwogICAgLS1sdW1vLXNoYWRlLTQwcGN0OiBoc2xhKDIxNCwgMTYlLCA4JSwgMC40MSk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCAyMCUsIDEwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDI0JSwgMTIlLCAwLjYpOwogICAgLS1sdW1vLXNoYWRlLTcwcGN0OiBoc2xhKDIxNCwgMjglLCAxMyUsIDAuNyk7CiAgICAtLWx1bW8tc2hhZGUtODBwY3Q6IGhzbGEoMjE0LCAzMiUsIDEzJSwgMC44KTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDMzJSwgMTMlLCAwLjkpOwogICAgLS1sdW1vLXNoYWRlOiBoc2woMjE0LCAzMyUsIDEzJSk7CgogICAgLyogQ29udHJhc3QgKi8KICAgIC0tbHVtby1jb250cmFzdC01cGN0OiB2YXIoLS1sdW1vLXRpbnQtNXBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMTBwY3Q6IHZhcigtLWx1bW8tdGludC0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tdGludC0yMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMzBwY3Q6IHZhcigtLWx1bW8tdGludC0zMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNDBwY3Q6IHZhcigtLWx1bW8tdGludC00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tdGludC01MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNjBwY3Q6IHZhcigtLWx1bW8tdGludC02MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNzBwY3Q6IHZhcigtLWx1bW8tdGludC03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tdGludC04MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtOTBwY3Q6IHZhcigtLWx1bW8tdGludC05MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3Q6IHZhcigtLWx1bW8tdGludCk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgODYlLCA1NSUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA4NiUsIDU1JSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiBoc2woMjE0LCAxMDAlLCA3MCUpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDkwJSwgNjMlKTsKICAgIC0tbHVtby1lcnJvci1jb2xvci01MHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC41KTsKICAgIC0tbHVtby1lcnJvci1jb2xvci0xMHBjdDogaHNsYSgzLCA5MCUsIDYzJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgMTAwJSwgNjclKTsKCiAgICAvKiBTdWNjZXNzICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvcjogaHNsKDE0NSwgNjUlLCA0MiUpOwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3ItNTBwY3Q6IGhzbGEoMTQ1LCA2NSUsIDQyJSwgMC41KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuMSk7CiAgICAtLWx1bW8tc3VjY2Vzcy10ZXh0LWNvbG9yOiBoc2woMTQ1LCA4NSUsIDQ3JSk7CiAgfQoKICBodG1sIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgW3RoZW1lfj0nZGFyayddIHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogIH0KCiAgaDEsCiAgaDIsCiAgaDMsCiAgaDQsCiAgaDUsCiAgaDYgewogICAgY29sb3I6IHZhcigtLWx1bW8taGVhZGVyLXRleHQtY29sb3IpOwogIH0KCiAgYSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgYmxvY2txdW90ZSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgfQoKICBjb2RlLAogIHByZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICB9CmA7amMoIiIsQnVyLHttb2R1bGVJZDoibHVtby1jb2xvciJ9KTt2YXIgSHVyPUNpYAogIDpob3N0IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcikgIWltcG9ydGFudDsKICB9CmA7amMoIiIsSHVyLHttb2R1bGVJZDoibHVtby1jb2xvci1sZWdhY3kiLGluY2x1ZGU6WyJsdW1vLWNvbG9yIl19KTt2YXIgSWNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7SWNlLmlubmVySFRNTD1gCiAgPHN0eWxlPgogICAgQGZvbnQtZmFjZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAnbHVtby1pY29ucyc7CiAgICAgIHNyYzogdXJsKGRhdGE6YXBwbGljYXRpb24vZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRWNBQXNBQUFBQUlpd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCQ0FBQUFEc0FBQUJVSUlzbGVrOVRMeklBQUFGRUFBQUFRd0FBQUZaQUlVdUtZMjFoY0FBQUFZZ0FBQUQ0QUFBRHJzQ1U4ZDVuYkhsbUFBQUNnQUFBQzJNQUFCZDRoOVRvMldobFlXUUFBQTNrQUFBQU1BQUFBRFphLzZTc2FHaGxZUUFBRGhRQUFBQWRBQUFBSkFicEEzNW9iWFI0QUFBT05BQUFBQkFBQUFDc3BCQUFBR3h2WTJFQUFBNUVBQUFBV0FBQUFGaDU1SUFzYldGNGNBQUFEcHdBQUFBZkFBQUFJQUZLQVhCdVlXMWxBQUFPdkFBQUFURUFBQUl1VVVKWkNIQnZjM1FBQUEvd0FBQUJLd0FBQWVsbThTelZlSnhqWUdSZ1lPQmlNR0N3WTJCeWNmTUpZZURMU1N6Slk1QmlZR0dBQUpBOE1wc3hKek05a1lFRHhnUEtzWUJwRGlCbWc0Z0NBQ1k3QlVnQWVKeGpZR1MreURpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpHKzBtSU8rcC9GRU1VY3hEQU5LTXdJa2dNQUJuOE1MUUI0bk8zU1dXNkRNQUJGMFV0d0NFbklQTS96aExLOExxaGZYUnliU1AxNFhVWXRIVjloR1lRd1FCTklvM2NVSVBraFFlTTdyaWIxZWtxblhnOTgxWHVDMXF2eTg0bHpvamxlaDNwdXhMMGhQakdqUlU0NzN0ZWxvRWVmQVVOR2pKa3daY2FjQlV0V3JObXdaY2VlQTBkT25MbHc1Y2FkQjA5ZWxQR2hHZitqME5USS82NUtmWGVyVDZKaHFLbnBSS3RnT3B1cWFUcnRLalBVbHFIbWh0bzIxSTdwTDZpNmhscVkzcTdxR1dyZlVBZUdPalRVa2FHT0RYVmlxRk5EblJucTNGQVhocm8wMUpXaHJnMTFZNmhiUTkwWjZ0NVFENFo2Tk5TVG9aNE45V0tvVjBPOUdlcmRVQitHK2pUVWw2R1dSdmtMMjRCa0VYaWN0Vmg5YkZ2VkZiL254dmJ6KzdSZi9ONnpIY2QyYkNmUCtXZ2MxWjlOMGpwTm5FTDZrYlJWUzZIQTJoUVlHaDlUR1IxQ2JDcWEyclhyV09rUUUvc0hOSmdtdFp2b1ZOWnFFMUIxRE5IeHpUUXhDZWhVVFlpSlRReUVOdWkwcVNMZXpyM1BkdXlRZmdtUldPZmRlOCs5NTUxejdybm4vTzRqTG9KL2JSUDBVYUtRTUxGSmpwQkF2cGhMWkMzRGswb2s3V0J6UjIvdXBKczdSeXcvbmZGYmxuL3V1Ti9hcEN2d3JLTHJTdlVxUnVmYm01cG4wZnMwdzRnWXhuR1ZQNnFIbk80YldpRFFHUWd3dFM2bG0zbEIzUW9YMU0ydndFbXV6aXJGMzl5K0VzMitESjhkMXBreXFCSXFvemUzRDErWno0RHJGb2F6eEk4ZFd3TXJEbFoyRE1xUUFSOUFST3NKVSsyY21sVFBhelRjbzUyRjF4VGEyYTIrSzh2dnE5MmRWSG10TG9QZVFYL0FaUFJZR3RoRFlPZVpqQmpLb0ZzVkd1bFIzbFdVOTVXZUNLNDRxSFU3TWhXVUdVS1pEVDNvS1VjRzJHV3VoK0VERGZVWUEvamhBaGwwVE9zSk5ZU0V1N21RbWkzVXpmWHdaS0E0QnNWc0hMWFFZR2dSVzk1dUV0cEoxVmZuOVhpTHJpUkJsRkVxeHNEakEwOXlDTlVvUXh4d2Q3S1dTVHQyeTNHVEtpZmxxSFJTb1daYzNtMTFXYS9mSmRGZ1hENHNTWWZsZUpCS2Q4R016N0o4ZFpuL2NHUkNjS0dEbkEyR2UzZkt6Y3ZsblRETnRoR1dMWHpYL1dhWHRVQW1SZ2VMbEhTcjMwcjBHOVVUWE1iMEF0bXd6T295NzNma1NsSFprZHV3L1RZdVU5Y0FENFl1dFBveFRUc0EzNzk3d1ZyNFovMU5DNXpBUkhyNHZ0eEpqeElmaVpNaE1rYldrKzE0Qm5KWkt3cUdad0Rmc3dMeXhXRFNnMTFyRkxKRjdOb3B4amQxaDEvUU9UK29lemdmdTNZcStIaytkdWY1eCs0MG8xR1RrYUlnaWtLL0lFbkM2YVl4Q1VCYVpKU040WFRZRmpVL1lNTklLcUp3aERHT0NDSThGRFhuWG1YanRHaEdKeVNocWpBT25CT2tXMkpHOVM3R2dZZU1XQVU1SnpobldtQk9hT00rQ0tFUG9xU2ZGREMyVW5xK0RMbFVnVVZVRkZMWkdKZzZqdGxvanNkc2E4a1BPYlB1SmRpNWRuQmRCc0xKTUdUV0RhNHQySnZ0d3VQbzlzK1k4NnN1di9XMzNRRzFyQWFPQVVWK3Z4NEs2ZjJEMDRQVktsQzdXTFNyWnpBaTQ1WlY2bElDN1dvWHFtUnl2VXFvVndyelVvVnNJamVUWFdRditSSDVHVGxCWGlCL0luOGxuMEliQkNBRk9hakFKcmdaWXlPSFdxT2ZVZS9hSGpJMTJSNk9RbzFqQ2d0MjE1bCs0ZjZYUGIrME1Ob3UwVis0M24yRjc3dFNmUmIyNGQ3eml0Z25LbXZZSHM2OXp1Z2FQdkJ3djZpb1hrYjJMZEw2NUF0dzUxdUxrWGx1MWJoTU1SY1hTUGNZb3FLSVJsaDM0bFFQOC81SmJ1VUZ5ZTR2eEQ2LzZNeEZGMTFDMHVWTHI5VWxndzQ0dFMzcE1WaU5MVUV4YnljRmdMSWN0K1FETWliUmlteDF5ZFV6OEZYWml1T0lEQk9NVlgyblVaYytodU5FNVhVSjgxdWlKb2lhYndxYVZGMHVhY0tiYXUvcGw0UjJWVzBYWGxKcmE2Ym9WcllHNjQ2VEY1Tll6d3k0dmpFTlZyRGxjTnBaUGw4REg2WFg4WFdDeDBtdldWWlk2S0ZMcnZzWTY2L3pQaWN0NUZueGFOVVIvanV2WkNNM1R2RDYwRTJXMXRaaXpiWFRQRHVhYmNtMG5iYnpwV0twbUExYXlCUThnaWVkTFVNK0Ewa05qQmpRam11WXo3WXJnSVhZdm1GNjNaTEJ3U1hycG45VGI5d3dkZC9VMUgwUE1RSzNYY084dWwzV1Q3UHlQUGRweTBUZW1LeE5SY0pOYXVpWEpublVEcFVwcFFXczRTblVJeTBFRVNHWXFKWVFMR0h4emFHV3dWSWFTNlk3bVFGTThaallEUTNheGpmNjFTV2pVMzNKd09aQTFwd2FHMUw5bXpmNzFhSFJkWDFKSHc2RnAwYVhoTndicXllR05nNE5iZHpHQ0J4b3o0WlhqeTROdTY5WnI2c0RZNnZNckxVNW5BMVA4SmtiZFdYSjZFUmZNcnl2TmgxSmZROStUNGRJaEd2Szl3M2R4akJCemF0c1EvTWxPSFZJRG5ZcER6Nm9kQVhsUTAxdDJQYTVJYWZkOE1NcHhBZURLUDBDNkNqZ1ZMVDVvc0I2aWNVeDAxbFdqWHh6VC9HeVJGMndlbEVNNVovN2pHM1ZqUTFTck5uNUlieXpPRzVkb2JCMy9RSHh5WnZzWGNvejhJb0V3UzdwbENnK3p4SFFrNDI0cTlCZkVwa0VTSmJGSFF1c0RCU1dGa3VCa29QTzBrTEt3UlZZanhHWGxIVGNURFFNSi9INlRYOWFma083bW5yYVRPMWZlVG5aQVhMdTRjcDdIQVhNbU5HMXllRms5VGdTL05IaFpSLzRRb0JUci9aQis2aENneWwxNU5xMVViTjZuRTEvWm5QMVUyY2l6Q0JwdnM4Y0pRWko0TGtZeDVOL3laUEFVWk5RUTBWNGYzQlFsbFdySzNZUnpsMzBkT1Q2UlZuMnVwTnVyNndvU2E4Q3FwZFQvYUtuQk00bzNqTnVyOWQ5eHF0VVQ2dmVCRXQ5Q2E5YXQrRVJ6RUVoVWtSOHNhNW1RNGFWdkpvVmVFQTh6STRlaTVtVUxYRkd5VTd6LzZUQWVZTFZjcHpTV1pZOFBZWUY1eXJUVjYwc1QwK1hWMTQxdlgrK1dmMTZWMmJGZUdWUFpYeEZwa3Z5ZUtUV0xsemZXMG1uS3hzWTZZMzI5NC8wOTk4U0NmWDFibG01cGJjdkZHbHEvcjA3TVJBTWhZSURpVzVKRktXVzN2ZHJFcENzWlNKRytvbTdadS9QU1NjWkpoTmtMYm1XNVdzcjEycFdxVzV6S3Rsd1JTNGJGT3hVdzE3bUN6eTZsc2tDRGwxV1lPR1dEWXJBRHJNQTdCRER3ZVdXTmQ1a29pSm5SMWR6K3l0TFAycTBTcVBCMWxuSzJjY0I3UlllNEZTb1BrczNpQjN0NHR4VFNIY3RiMnN5MWl2azBwdkh1Q05tNncxZjZ3eHYzK09DZ043OExxZFFuVVZoN1Iwb1RBcDB6T2YycmJXNzcwVnU1QzJkSXlHZFRuSG84elNqaTdkcHBqMFVTb1ZDeitsaFJNVGg1M1RlcTlWYkdmYmp1U2JBb29TZFhheVk0UFlIZzM3NEM2ZjdnbDFCL0RYdUo0L1FYeE9CZEpGSnNwRnNJM2VncG9XVVVDamxUSUZuTllObCtaeVpLbUJlWUtHSGtEMVF5RGxoYUtiS3dLY0lKcUo0VExKMk9tZFkvSldYYWU0RGRHQnc4SFo3ZVhjZ0ZGMnpyMlNvYWxEcnk1aUtxb2EwUHVoZTNoUFEyczNlbFRZTStNSStuM3JLMEtnTDcvTGEzR2VNTHQ2bTd1OTEydkdudnRPUmlJYTBxQm1ocVZpK1hXOVhOQm1xYjhlVmdLeklIZkdJNWJOb0c3WDBVQ3plSVNtcUljTy9uWThGSDdVOGF2WDlmeC9TVCtoeDBzZXpQdzlReThNdW0zR1dmMk40VXkveUlZR1ZCWGJKSFdJWnA3ZGZUY3B0ZE1UcjlRbXE3RGFpSy91a3FDTDRrdDRSVWZTNVhQbk10bVQyMi9tUUZxRjdlbVNxdHJsdThTVkVseERSSnJaT0RrcHV3ZTBWZlRmamRFcDFmN0E3ditmb3pOQlhVSi82V1R1SzJUdEZscEZWWkFaM0xjRnZVaTFaMnAyWVQrRU1Ba0dKVlN0T3pMVEFQZzRJcVdJQWx6UlNqT0JrbDJ6eGozVEt5Y3B6VC9NbnZYM3VhU01XTStnVTBya1hqb2hoZWZWUk1hcHMzL2tMTVNLdjIzbFQyM3V4UXJrUWp5T0psZU1Ec2RoQW5ENlpHRWxXWjVNakNYekNFL2hrV1grV0Y0a256R2hWT3lLMmVRWmVrVjNleW8wekw4a3VZV0NuREN2ampoQWtjVFBPQkRYVmRvYXYzSFZjRm5Rakx2dFY5UzJwMHpBNkplZ1B3TVF4dCt5RmIzbGw5ekdscS81ZFJLYjNjRXlRWW9hTllwaGFySjd4Q0I3QVd4c0xZM2pqWlhZMFhzWmowV2p3YzlJNlBQL2RLQUJuQ1phcUhwYVpFQUN4azRaZUxaU0tOZ1pBQmwrbFlRWDFzSlFPU1gzbjZyNDEwZXZjb3VkNUplQUdVWFZQOUgxdFpPS2VqVHE0T25vMHowZXJybzFGcm5PcG9odmExZC9oVGR0VnNRZEtONVc5UmxUM05qRDBuem55S05UZ0tBTWZXTldjeW9kVjBJR0xQSUhPRjBvNEp5cXVmYUs0ejZXSUl6dUdoM2Q4Yzhjd1FnOEVSK09WeHlyamRtOHZOdWh0czRMb09paEd4SU11VWRnendpWU43eGhoMStvWm5KTnVURzdnUVp2dTRYV1o5R0FaWmpHRXVid2VQcVlodEtEVEgrOVZRa2wxNy9pR3lic25KKzgrc0t0eVByY2xsOXR5NjVac2RzdC85aXFwRUtoN001VmRCeGgzY3NPZE5jNnRXM0kxdXlNMVB6T1hlZ1NPckxGc0ZOSTJPMjdNK1RGMkFwbk45TVV2NXVkNkxqeEl2RVFuSFJ6eEl1NElzQTlNTEZrSm4ydGNab1o3T043ZFhlN3VqcmM4SHJ1c1BLYW1scVh3ZDc3bFFVdUxwaWxhdTRQVU1hcHVlQmI3aXJVNFJvVVhFWVh1VnVJR2xSR21PcCsybE5rYVJQVnppT3FtbGFadmFxRzRkRmdTajBqeEVKV3J2MTJJVVdudG13K3JmUWFyUkUwQXBoNG9jSTZubFVsR3FzK3UzLytUL2V0aFc2MlBwSHAyZUhiWnN0bmgvd09POTV5REFIaWNZMkJrWUdBQTRwbUo2UUh4L0RaZkdiaVpYd0JGR0dwVU56UWk2UCt2bWFjeTNRSnlPUmlZUUtJQU5vVUxWWGljWTJCa1lHQU8rcDhGSkY4d0FBSHpWQVpHQmxTZ0RRQlc5Z052QUFBQWVKeGpZR0JnWUg0eE5EQUF6d1FtandBQUFBQUFUZ0NhQU9nQkNnRXNBVTRCY0FHYUFjUUI3Z0lhQXB3QzZBU2FCTHdFMWdUeUJRNEZLZ1Y2QmRBRi9nWkVCbVlHdGdjWUI1QUlHQWhTQ0dvSS9nbEdDYjRKMmdvRUNqd0tnZ3E0Q3ZBTFVBdVdDN3g0bkdOZ1pHQmcwR1pNWVJCbEFBRW1JT1lDUWdhRy8yQStBd0FZbEFHOEFIaWNiWkU5VHNNd0dJYmY5QS9SU2dnRVltSHhBZ3RxK2pOMlpHajNEdDNUMUdsVE9YSGt1Qlc5QXlmZ0VCeUNnVE53Q0E3QlcvTkpsVkJ0eWQvangrOFhLd21BYTN3aHduRkU2SWIxT0JxNDRPNlBtNlFiNFJiNVFiaU5IaDZGTy9SRDRTNmVNUkh1NFJhYVQ0aGFselIzZUJWdTRBcHZ3azM2ZCtFVytVTzRqWHQ4Q25mb3Y0VzdXT0JIdUllbjZNWHNDdHZQVTF2V2M3M2VtY1NkeElrVzJ0VzVMZFVvSHA3a1RKZmFKVjZ2MVBLZzZ2MTY3SDJtTW1jTE5iV2wxOFpZVlRtNzFhbVBOOTVYazhFZ0V4K250b0RCRGdVcytzaVJzcGFvTWVmN3J1a05Fcml6aVhOdXdTN0htb2U5d2dneHYrZTU1SXpKTXFRVGVOWVYwMHNjdU5iWTgrWXhyVWZHZmNhTVpiL0NOUFFlMDRiVDBsVGhiRXVUMHNmWWhLNksvMjNBbWYzTHgrSDI0aGNqNEdTY0FBQUFlSnh0anRsdWd6QVFSYmtKVUVKSXV1Lzd2cVI4bEdOUEFjV3gwWUFiNWUvTGtsUjk2RWdlblN1ZkdZMDM4UHFLdmY5cmhnR0c4QkVneEE0aWpCQmpqQVFUVExHTFBlempBSWM0d2pGT2NJb3puT01DbDdqQ05XNXdpenZjNHdHUGVNSXpYdkNLTjd6akF6Tjhlb25RUldaU1NhWW1qdnVnNmFzZTk4aEZsdGV4TUptbVZObVYyV0J2ZE5nWlVjK3VqQVd6WFczVURudTF3NDNhc1N0SGM4R3B6QVhYL3B5MGpxVFFaSlRna2N4SkxwYUNGMGxEMzJ4TnQrNDN0QXNuMjlEZnQwMnVES1MyY2pHVU5nc2syNnFLMmxGdGhZb1UyN0lOUHFtaURxZzVnb2UwcHFSNXFTb3FNZGVrL0NVWkZ5d0w0NnJFc2lJbWxlcWlxb015dDRiYVhsdS8xR0xkTkZmNXpiY05tZHIxWVVXQ1plNDdvK3pVbWIvRG9TdGJ3M2NWc2VmOUFMamppUFFBKSBmb3JtYXQoJ3dvZmYnKTsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgfQoKICAgIGh0bWwgewogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tY2VudGVyOiAiXFxlYTAxIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWxlZnQ6ICJcXGVhMDIiOwogICAgICAtLWx1bW8taWNvbnMtYWxpZ24tcmlnaHQ6ICJcXGVhMDMiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtZG93bjogIlxcZWEwNCI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1sZWZ0OiAiXFxlYTA1IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXJpZ2h0OiAiXFxlYTA2IjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLXVwOiAiXFxlYTA3IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWRvd246ICJcXGVhMDgiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctbGVmdDogIlxcZWEwOSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1yaWdodDogIlxcZWEwYSI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy11cDogIlxcZWEwYiI7CiAgICAgIC0tbHVtby1pY29ucy1iYXItY2hhcnQ6ICJcXGVhMGMiOwogICAgICAtLWx1bW8taWNvbnMtYmVsbDogIlxcZWEwZCI7CiAgICAgIC0tbHVtby1pY29ucy1jYWxlbmRhcjogIlxcZWEwZSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGVja21hcms6ICJcXGVhMGYiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1kb3duOiAiXFxlYTEwIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tbGVmdDogIlxcZWExMSI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXJpZ2h0OiAiXFxlYTEyIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tdXA6ICJcXGVhMTMiOwogICAgICAtLWx1bW8taWNvbnMtY2xvY2s6ICJcXGVhMTQiOwogICAgICAtLWx1bW8taWNvbnMtY29nOiAiXFxlYTE1IjsKICAgICAgLS1sdW1vLWljb25zLWNyb3NzOiAiXFxlYTE2IjsKICAgICAgLS1sdW1vLWljb25zLWRvd25sb2FkOiAiXFxlYTE3IjsKICAgICAgLS1sdW1vLWljb25zLWRyb3Bkb3duOiAiXFxlYTE4IjsKICAgICAgLS1sdW1vLWljb25zLWVkaXQ6ICJcXGVhMTkiOwogICAgICAtLWx1bW8taWNvbnMtZXJyb3I6ICJcXGVhMWEiOwogICAgICAtLWx1bW8taWNvbnMtZXllOiAiXFxlYTFiIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZS1kaXNhYmxlZDogIlxcZWExYyI7CiAgICAgIC0tbHVtby1pY29ucy1tZW51OiAiXFxlYTFkIjsKICAgICAgLS1sdW1vLWljb25zLW1pbnVzOiAiXFxlYTFlIjsKICAgICAgLS1sdW1vLWljb25zLW9yZGVyZWQtbGlzdDogIlxcZWExZiI7CiAgICAgIC0tbHVtby1pY29ucy1waG9uZTogIlxcZWEyMCI7CiAgICAgIC0tbHVtby1pY29ucy1waG90bzogIlxcZWEyMSI7CiAgICAgIC0tbHVtby1pY29ucy1wbGF5OiAiXFxlYTIyIjsKICAgICAgLS1sdW1vLWljb25zLXBsdXM6ICJcXGVhMjMiOwogICAgICAtLWx1bW8taWNvbnMtcmVkbzogIlxcZWEyNCI7CiAgICAgIC0tbHVtby1pY29ucy1yZWxvYWQ6ICJcXGVhMjUiOwogICAgICAtLWx1bW8taWNvbnMtc2VhcmNoOiAiXFxlYTI2IjsKICAgICAgLS1sdW1vLWljb25zLXVuZG86ICJcXGVhMjciOwogICAgICAtLWx1bW8taWNvbnMtdW5vcmRlcmVkLWxpc3Q6ICJcXGVhMjgiOwogICAgICAtLWx1bW8taWNvbnMtdXBsb2FkOiAiXFxlYTI5IjsKICAgICAgLS1sdW1vLWljb25zLXVzZXI6ICJcXGVhMmEiOwogICAgfQogIDwvc3R5bGU+CmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChJY2UuY29udGVudCk7dmFyIFZ1cj1DaWAKICA6aG9zdCB7CiAgICAtLWx1bW8tc2l6ZS14czogMS42MjVyZW07CiAgICAtLWx1bW8tc2l6ZS1zOiAxLjg3NXJlbTsKICAgIC0tbHVtby1zaXplLW06IDIuMjVyZW07CiAgICAtLWx1bW8tc2l6ZS1sOiAyLjc1cmVtOwogICAgLS1sdW1vLXNpemUteGw6IDMuNXJlbTsKCiAgICAvKiBJY29ucyAqLwogICAgLS1sdW1vLWljb24tc2l6ZS1zOiAxLjI1ZW07CiAgICAtLWx1bW8taWNvbi1zaXplLW06IDEuNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1sOiAyLjI1ZW07CiAgICAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgIC0tbHVtby1pY29uLXNpemU6IHZhcigtLWx1bW8taWNvbi1zaXplLW0pOwogIH0KYCxMY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtMY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtWdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChMY2UuY29udGVudCk7dmFyIFV1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBTcXVhcmUgKi8KICAgIC0tbHVtby1zcGFjZS14czogMC4yNXJlbTsKICAgIC0tbHVtby1zcGFjZS1zOiAwLjVyZW07CiAgICAtLWx1bW8tc3BhY2UtbTogMXJlbTsKICAgIC0tbHVtby1zcGFjZS1sOiAxLjVyZW07CiAgICAtLWx1bW8tc3BhY2UteGw6IDIuNXJlbTsKCiAgICAvKiBXaWRlICovCiAgICAtLWx1bW8tc3BhY2Utd2lkZS14czogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UteHMpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtczogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLW06IGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1sOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLWwpOwogICAgLS1sdW1vLXNwYWNlLXdpZGUteGw6IGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhsKTsKCiAgICAvKiBUYWxsICovCiAgICAtLWx1bW8tc3BhY2UtdGFsbC14czogdmFyKC0tbHVtby1zcGFjZS14cykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtczogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtcykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLW06IHZhcigtLWx1bW8tc3BhY2UtbSkgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLW0pIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1sOiB2YXIoLS1sdW1vLXNwYWNlLWwpIGNhbGModmFyKC0tbHVtby1zcGFjZS1sKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwteGw6IHZhcigtLWx1bW8tc3BhY2UteGwpIGNhbGModmFyKC0tbHVtby1zcGFjZS14bCkgLyAyKTsKICB9CmAsa2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7a2NlLmlubmVySFRNTD1gPHN0eWxlPiR7VXVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoa2NlLmNvbnRlbnQpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtczogMC4yNWVtOyAvKiBDaGVja2JveCwgYmFkZ2UsIGRhdGUtcGlja2VyIHllYXIgaW5kaWNhdG9yLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLW06IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cywgMC4yNWVtKTsgLyogQnV0dG9uLCB0ZXh0IGZpZWxkLCBtZW51IG92ZXJsYXksIGV0YyAqLwogICAgLS1sdW1vLWJvcmRlci1yYWRpdXMtbDogMC41ZW07IC8qIERpYWxvZywgbm90aWZpY2F0aW9uLCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzOiAwLjI1ZW07IC8qIERlcHJlY2F0ZWQgKi8KCiAgICAvKiBTaGFkb3cgKi8KICAgIC0tbHVtby1ib3gtc2hhZG93LXhzOiAwIDFweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTUwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXM6IDAgMnB4IDRweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDNweCAxMnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0zMHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1tOiAwIDJweCA2cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCA4cHggMjRweCAtNHB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbDogMCAzcHggMThweCAtMnB4IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCAwIDEycHggNDhweCAtNnB4IHZhcigtLWx1bW8tc2hhZGUtNDBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3cteGw6IDAgNHB4IDI0cHggLTNweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxOHB4IDY0cHggLThweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKCiAgICAvKiBDbGlja2FibGUgZWxlbWVudCBjdXJzb3IgKi8KICAgIC0tbHVtby1jbGlja2FibGUtY3Vyc29yOiBkZWZhdWx0OwogIH0KYCxSY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtSY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHtxdXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChSY2UuY29udGVudCk7dmFyIEd1cj1DaWAKICA6aG9zdCB7CiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi8KICAgIC0tbHVtby1mb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnUm9ib3RvJywgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJywgJ1NlZ29lIFVJIFN5bWJvbCc7CgogICAgLyogRm9udCBzaXplcyAqLwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHM6IDAuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhzOiAwLjgxMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXM6IDAuODc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1tOiAxcmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1sOiAxLjEyNXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteGw6IDEuMzc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eGw6IDEuNzVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXh4eGw6IDIuNXJlbTsKCiAgICAvKiBMaW5lIGhlaWdodHMgKi8KICAgIC0tbHVtby1saW5lLWhlaWdodC14czogMS4yNTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1zOiAxLjM3NTsKICAgIC0tbHVtby1saW5lLWhlaWdodC1tOiAxLjYyNTsKICB9CmAsTmNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7TmNlLmlubmVySFRNTD1gPHN0eWxlPiR7R3VyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoTmNlLmNvbnRlbnQpO3ZhciBXdXI9Q2lgCiAgaHRtbCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIC8qIENhbuKAmXQgY29tYmluZSB3aXRoIHRoZSBhYm92ZSBzZWxlY3RvciBiZWNhdXNlIHRoYXQgZG9lc27igJl0IHdvcmsgaW4gYnJvd3NlcnMgd2l0aG91dCBuYXRpdmUgc2hhZG93IGRvbSAqLwogIDpob3N0IHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUsIHZhcigtLWx1bW8tZm9udC1zaXplLW0pKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LW0pOwogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOwogIH0KCiAgc21hbGwsCiAgW3RoZW1lfj0nZm9udC1zaXplLXMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgfQoKICBbdGhlbWV+PSdmb250LXNpemUteHMnXSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXhzKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgfQoKICBoMSB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgaDIgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eGwpOwogICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CiAgfQoKICBoMyB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDQgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1sKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDUgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIG1hcmdpbi1ib3R0b206IDAuMjVlbTsKICB9CgogIGg2IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHMpOwogICAgbWFyZ2luLWJvdHRvbTogMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogIH0KCiAgcCwKICBibG9ja3F1b3RlIHsKICAgIG1hcmdpbi10b3A6IDAuNWVtOwogICAgbWFyZ2luLWJvdHRvbTogMC43NWVtOwogIH0KCiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQoKICBhOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgaHIgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgaGVpZ2h0OiAxcHg7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiB2YXIoLS1sdW1vLXNwYWNlLXMpIGNhbGModmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pIC8gMik7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CgogIGIsCiAgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogIGJsb2NrcXVvdGVbZGlyPSdydGwnXSB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogIH0KYDtqYygiIixXdXIse21vZHVsZUlkOiJsdW1vLXR5cG9ncmFwaHkifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgW3BhcnQ9J2xhYmVsJ106bm90KFtlbXB0eV0pIHsKICAgICAgbWFyZ2luOiAwLjE4NzVlbSAwLjg3NWVtIDAuMTg3NWVtIDAuMzc1ZW07CiAgICB9CgogICAgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB3aWR0aDogY2FsYygxZW0gKyAycHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgbWFyZ2luOiAwLjE4NzVlbTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBjdWJpYy1iZXppZXIoMC4xMiwgMC4zMiwgMC41NCwgMiksIGJhY2tncm91bmQtY29sb3IgMC4xNXM7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXSkgW3BhcnQ9J2NoZWNrYm94J10sCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yKTsKICAgIH0KCiAgICAvKiBOZWVkZWQgdG8gYWxpZ24gdGhlIGNoZWNrYm94IG5pY2VseSBvbiB0aGUgYmFzZWxpbmUgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnXFwyMDAzJzsKICAgIH0KCiAgICAvKiBDaGVja21hcmsgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIHdpZHRoOiAwOwogICAgICBoZWlnaHQ6IDA7CiAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICBib3JkZXItd2lkdGg6IDAuMTg3NWVtIDAgMCAwLjE4NzVlbTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMC44MTI1ZW07CiAgICAgIGxlZnQ6IDAuNWVtOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNTUpIHJvdGF0ZSgtMTM1ZGVnKTsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICA6aG9zdChbY2hlY2tlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHdpZHRoOiAwLjYyNWVtOwogICAgICBoZWlnaHQ6IDEuMDYyNWVtOwogICAgfQoKICAgIC8qIEluZGV0ZXJtaW5hdGUgY2hlY2ttYXJrICovCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdG9wOiA0NSU7CiAgICAgIGhlaWdodDogMTAlOwogICAgICBsZWZ0OiAyMiU7CiAgICAgIHJpZ2h0OiAyMiU7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBib3JkZXI6IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb250cmFzdC1jb2xvcik7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yNXM7CiAgICB9CgogICAgLyogRm9jdXMgcmluZyAqLwogICAgOmhvc3QoW2ZvY3VzLXJpbmddKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGVkICovCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBjb2xvcjogdmFyKC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nbGFiZWwnXSA6OnNsb3R0ZWQoKikgewogICAgICBjb2xvcjogaW5oZXJpdDsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J106OmFmdGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC4zNzVlbSAwLjE4NzVlbSAwLjg3NWVtOwogICAgfQoKICAgIC8qIFRyYW5zaXRpb24gdGhlIGNoZWNrbWFyayBpZiBhY3RpdmF0ZWQgd2l0aCB0aGUgbW91c2UgKGRpc2FibGVkIGZvciBncmlkIHNlbGVjdC1hbGwgdGhpcyB3YXkpICovCiAgICA6aG9zdCg6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMXMsIGhlaWdodCAwLjI1czsKICAgIH0KCiAgICAvKiBVc2VkIGZvciBhY3RpdmF0aW9uICJoYWxvIiAqLwogICAgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIGNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNCk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBvcGFjaXR5IDAuOHM7CiAgICB9CgogICAgLyogSG92ZXIgKi8KICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgICB9CgogICAgLyogRGlzYWJsZSBob3ZlciBmb3IgdG91Y2ggZGV2aWNlcyAqLwogICAgQG1lZGlhIChwb2ludGVyOiBjb2Fyc2UpIHsKICAgICAgOmhvc3QoOm5vdChbY2hlY2tlZF0pOm5vdChbaW5kZXRlcm1pbmF0ZV0pOm5vdChbZGlzYWJsZWRdKTpob3ZlcikgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMjBwY3QpOwogICAgICB9CiAgICB9CgogICAgLyogQWN0aXZlICovCiAgICA6aG9zdChbYWN0aXZlXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDVzOwogICAgfQoKICAgIDpob3N0KFthY3RpdmVdW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4xKTsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXTpub3QoW2NoZWNrZWRdKSkgW3BhcnQ9J2NoZWNrYm94J106OmJlZm9yZSB7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFzLCAwLjAxczsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgICAgb3BhY2l0eTogMC40OwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWNoZWNrYm94In0pO3ZhciBEY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0aGVtZTp7dHlwZTpTdHJpbmcscmVhZE9ubHk6ITB9fX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSkscj09PSJ0aGVtZSImJnRoaXMuX3NldFRoZW1lKGkpfX07dmFyIFhIPWU9PmNsYXNzIGV4dGVuZHMgRGNlKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0IHI9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlLG49T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMucHJvdG90eXBlKS5fdGVtcGxhdGU7biYmQXJyYXkuZnJvbShuLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGVbaW5jbHVkZV0iKSkuZm9yRWFjaChpPT57dGhpcy5faW5jbHVkZVN0eWxlKGkuZ2V0QXR0cmlidXRlKCJpbmNsdWRlIikscil9KSx0aGlzLl9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil9c3RhdGljIF9pbmNsdWRlTWF0Y2hpbmdUaGVtZXMocil7bGV0IGk9b3UucHJvdG90eXBlLm1vZHVsZXMsbz0hMSxhPXRoaXMuaXMrIi1kZWZhdWx0LXRoZW1lIjtPYmplY3Qua2V5cyhpKS5zb3J0KChzLGwpPT57bGV0IGM9cy5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLHU9bC5pbmRleE9mKCJ2YWFkaW4tIik9PT0wLGg9WyJsdW1vLSIsIm1hdGVyaWFsLSJdLGY9aC5maWx0ZXIoZD0+cy5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjAscD1oLmZpbHRlcihkPT5sLmluZGV4T2YoZCk9PT0wKS5sZW5ndGg+MDtyZXR1cm4gYyE9PXU/Yz8tMToxOmYhPT1wP2Y/LTE6MTowfSkuZm9yRWFjaChzPT57aWYocyE9PWEpe2xldCBsPWlbc10uZ2V0QXR0cmlidXRlKCJ0aGVtZS1mb3IiKTtsJiZsLnNwbGl0KCIgIikuZm9yRWFjaChjPT57bmV3IFJlZ0V4cCgiXiIrYy5zcGxpdCgiKiIpLmpvaW4oIi4qIikrIiQiKS50ZXN0KHRoaXMuaXMpJiYobz0hMCx0aGlzLl9pbmNsdWRlU3R5bGUocyxyKSl9KX19KSwhbyYmaVthXSYmdGhpcy5faW5jbHVkZVN0eWxlKGEscil9c3RhdGljIF9pbmNsdWRlU3R5bGUocixuKXtpZihuJiYhbi5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2luY2x1ZGU9IiR7cn0iXWApKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2kuc2V0QXR0cmlidXRlKCJpbmNsdWRlIixyKSxuLmNvbnRlbnQuYXBwZW5kQ2hpbGQoaSl9fX07dmFyIGtjdD0hMTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsKCk9PntrY3Q9ITB9LHtjYXB0dXJlOiEwfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntrY3Q9ITF9LHtjYXB0dXJlOiEwfSk7dmFyIFl1cj1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3RhYmluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX3RhYmluZGV4Q2hhbmdlZCJ9fX19LE9jZT1lPT5jbGFzcyBleHRlbmRzIFl1cihlKXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW59LF9wcmV2aW91c1RhYkluZGV4Ont0eXBlOk51bWJlcn0sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfaXNTaGlmdFRhYmJpbmc6e3R5cGU6Qm9vbGVhbn19fXJlYWR5KCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57ci5jb21wb3NlZFBhdGgoKVswXT09PXRoaXM/dGhpcy5jb250YWlucyhyLnJlbGF0ZWRUYXJnZXQpfHx0aGlzLl9mb2N1cygpOnIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLmZvY3VzRWxlbWVudCkhPT0tMSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX3NldEZvY3VzZWQoITApfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3NldEZvY3VzZWQoITEpKSxzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscj0+eyFyLmRlZmF1bHRQcmV2ZW50ZWQmJnIua2V5Q29kZT09PTkmJnIuc2hpZnRLZXkmJih0aGlzLl9pc1NoaWZ0VGFiYmluZz0hMCxIVE1MRWxlbWVudC5wcm90b3R5cGUuZm9jdXMuYXBwbHkodGhpcyksdGhpcy5fc2V0Rm9jdXNlZCghMSksc2V0VGltZW91dCgoKT0+dGhpcy5faXNTaGlmdFRhYmJpbmc9ITEsMCkpfSksdGhpcy5hdXRvZm9jdXMmJiF0aGlzLmRpc2FibGVkJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSx0aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpfSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuaGFzQXR0cmlidXRlKCJmb2N1c2VkIikmJnRoaXMuX3NldEZvY3VzZWQoITEpfV9zZXRGb2N1c2VkKHIpe3I/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzZWQiLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXNlZCIpLHImJmtjdD90aGlzLnNldEF0dHJpYnV0ZSgiZm9jdXMtcmluZyIsIiIpOnRoaXMucmVtb3ZlQXR0cmlidXRlKCJmb2N1cy1yaW5nIil9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB3aW5kb3cuY29uc29sZS53YXJuKGBQbGVhc2UgaW1wbGVtZW50IHRoZSAnZm9jdXNFbGVtZW50JyBwcm9wZXJ0eSBpbiA8JHt0aGlzLmxvY2FsTmFtZX0+YCksdGhpc31fZm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuX2lzU2hpZnRUYWJiaW5nfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Zm9jdXMoKXshdGhpcy5mb2N1c0VsZW1lbnR8fHRoaXMuZGlzYWJsZWR8fCh0aGlzLmZvY3VzRWxlbWVudC5mb2N1cygpLHRoaXMuX3NldEZvY3VzZWQoITApKX1ibHVyKCl7IXRoaXMuZm9jdXNFbGVtZW50fHwodGhpcy5mb2N1c0VsZW1lbnQuYmx1cigpLHRoaXMuX3NldEZvY3VzZWQoITEpKX1fZGlzYWJsZWRDaGFuZ2VkKHIpe3RoaXMuZm9jdXNFbGVtZW50LmRpc2FibGVkPXIscj8odGhpcy5ibHVyKCksdGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4LHRoaXMudGFiaW5kZXg9LTEsdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIikpOih0eXBlb2YgdGhpcy5fcHJldmlvdXNUYWJJbmRleCE9InVuZGVmaW5lZCImJih0aGlzLnRhYmluZGV4PXRoaXMuX3ByZXZpb3VzVGFiSW5kZXgpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIikpfV90YWJpbmRleENoYW5nZWQocil7ciE9PXZvaWQgMCYmKHRoaXMuZm9jdXNFbGVtZW50LnRhYkluZGV4PXIpLHRoaXMuZGlzYWJsZWQmJnRoaXMudGFiaW5kZXgmJih0aGlzLnRhYmluZGV4IT09LTEmJih0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMudGFiaW5kZXgpLHRoaXMudGFiaW5kZXg9cj12b2lkIDApfWNsaWNrKCl7dGhpcy5kaXNhYmxlZHx8c3VwZXIuY2xpY2soKX19O3ZhciBqdXI9L1wvXCpcKlxzK3ZhYWRpbi1kZXYtbW9kZTpzdGFydChbXHNcU10qKXZhYWRpbi1kZXYtbW9kZTplbmRccytcKlwqXC8vaSwkSD13aW5kb3cuVmFhZGluJiZ3aW5kb3cuVmFhZGluLkZsb3cmJndpbmRvdy5WYWFkaW4uRmxvdy5jbGllbnRzO2Z1bmN0aW9uIFh1cigpe2Z1bmN0aW9uIGUoKXtyZXR1cm4hMH1yZXR1cm4gemNlKGUpfWZ1bmN0aW9uICR1cigpe3RyeXtyZXR1cm4gS3VyKCk/ITA6WnVyKCk/JEg/IUp1cigpOiFYdXIoKTohMX1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gS3VyKCl7cmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2YWFkaW4uZGV2ZWxvcG1lbnRtb2RlLmZvcmNlIil9ZnVuY3Rpb24gWnVyKCl7cmV0dXJuWyJsb2NhbGhvc3QiLCIxMjcuMC4wLjEiXS5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSk+PTB9ZnVuY3Rpb24gSnVyKCl7cmV0dXJuISEoJEgmJk9iamVjdC5rZXlzKCRIKS5tYXAodD0+JEhbdF0pLmZpbHRlcih0PT50LnByb2R1Y3Rpb25Nb2RlKS5sZW5ndGg+MCl9ZnVuY3Rpb24gemNlKGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpcmV0dXJuO2xldCByPWp1ci5leGVjKGUudG9TdHJpbmcoKSk7aWYocil0cnl7ZT1uZXcgRnVuY3Rpb24oclsxXSl9Y2F0Y2gobil7Y29uc29sZS5sb2coInZhYWRpbi1kZXZlbG9wbWVudC1tb2RlLWRldGVjdG9yOiB1bmNvbW1lbnRBbmRSdW4oKSBmYWlsZWQiLG4pfXJldHVybiBlKHQpfXdpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307dmFyIFJjdD1mdW5jdGlvbihlLHQpe2lmKHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlKXJldHVybiB6Y2UoZSx0KX07d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9PT12b2lkIDAmJih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZT0kdXIoKSk7ZnVuY3Rpb24gUXVyKCl7fXZhciBGY2U9ZnVuY3Rpb24oKXtpZih0eXBlb2YgUmN0PT0iZnVuY3Rpb24iKXJldHVybiBSY3QoUXVyKX07dmFyIF8zPWNsYXNze3N0YXRpYyBkZXRlY3RTY3JvbGxUeXBlKCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dC50ZXh0Q29udGVudD0iQUJDRCIsdC5kaXI9InJ0bCIsdC5zdHlsZS5mb250U2l6ZT0iMTRweCIsdC5zdHlsZS53aWR0aD0iNHB4Iix0LnN0eWxlLmhlaWdodD0iMXB4Iix0LnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5zdHlsZS50b3A9Ii0xMDAwcHgiLHQuc3R5bGUub3ZlcmZsb3c9InNjcm9sbCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KTtsZXQgcj0icmV2ZXJzZSI7cmV0dXJuIHQuc2Nyb2xsTGVmdD4wP3I9ImRlZmF1bHQiOih0LnNjcm9sbExlZnQ9Mix0LnNjcm9sbExlZnQ8MiYmKHI9Im5lZ2F0aXZlIikpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCkscn1zdGF0aWMgZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4pe2xldHtzY3JvbGxMZWZ0Oml9PW47aWYociE9PSJydGwifHwhdClyZXR1cm4gaTtzd2l0Y2godCl7Y2FzZSJuZWdhdGl2ZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aCtpO2Nhc2UicmV2ZXJzZSI6cmV0dXJuIG4uc2Nyb2xsV2lkdGgtbi5jbGllbnRXaWR0aC1pfXJldHVybiBpfXN0YXRpYyBzZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0LHIsbixpKXtpZihyIT09InJ0bCJ8fCF0KXtuLnNjcm9sbExlZnQ9aTtyZXR1cm59c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOm4uc2Nyb2xsTGVmdD1uLmNsaWVudFdpZHRoLW4uc2Nyb2xsV2lkdGgraTticmVhaztjYXNlInJldmVyc2UiOm4uc2Nyb2xsTGVmdD1uLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaTticmVhaztkZWZhdWx0Om4uc2Nyb2xsTGVmdD1pO2JyZWFrfX19O3ZhciBFMD1bXSx0aHI9ZnVuY3Rpb24oKXtsZXQgZT1EY3QoKTtFMC5mb3JFYWNoKHQ9PntOY3QodCxlKX0pfSxLSCxlaHI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhyKTtlaHIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KTt2YXIgTmN0PWZ1bmN0aW9uKGUsdCxyPWUuZ2V0QXR0cmlidXRlKCJkaXIiKSl7dD9lLnNldEF0dHJpYnV0ZSgiZGlyIix0KTpyIT1udWxsJiZlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9LERjdD1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkaXIiKX0sWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntkaXI6e3R5cGU6U3RyaW5nLHZhbHVlOiIiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19fXN0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCksS0h8fChLSD1fMy5kZXRlY3RTY3JvbGxUeXBlKCkpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil8fCh0aGlzLl9fc3Vic2NyaWJlKCksTmN0KHRoaXMsRGN0KCksbnVsbCkpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSl7aWYoc3VwZXIuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKSxyIT09ImRpciIpcmV0dXJuO2xldCBvPURjdCgpLGE9aT09PW8mJkUwLmluZGV4T2YodGhpcyk9PT0tMSxzPSFpJiZuJiZFMC5pbmRleE9mKHRoaXMpPT09LTE7YXx8cz8odGhpcy5fX3N1YnNjcmliZSgpLE5jdCh0aGlzLG8saSkpOmkhPT1vJiZuPT09byYmdGhpcy5fX3N1YnNjcmliZSghMSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX19zdWJzY3JpYmUoITEpLHRoaXMucmVtb3ZlQXR0cmlidXRlKCJkaXIiKX1fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpe2k9PT0iZGlyIiYmbj09PSIiJiYhci5oYXNBdHRyaWJ1dGUoImRpciIpfHxzdXBlci5fdmFsdWVUb05vZGVBdHRyaWJ1dGUocixuLGkpfV9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKXtyPT09ImRpciImJiFuP3RoaXMuZGlyPSIiOnN1cGVyLl9hdHRyaWJ1dGVUb1Byb3BlcnR5KHIsbixpKX1fX3N1YnNjcmliZShyPSEwKXtyP0UwLmluZGV4T2YodGhpcyk9PT0tMSYmRTAucHVzaCh0aGlzKTpFMC5pbmRleE9mKHRoaXMpPi0xJiZFMC5zcGxpY2UoRTAuaW5kZXhPZih0aGlzKSwxKX1fX2dldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIpe3JldHVybiBfMy5nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChLSCx0aGlzLmdldEF0dHJpYnV0ZSgiZGlyIil8fCJsdHIiLHIpfV9fc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQocixuKXtyZXR1cm4gXzMuc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoS0gsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyLG4pfX07d2luZG93LlZhYWRpbj13aW5kb3cuVmFhZGlufHx7fTt3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnM9d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zfHxbXTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrPXdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2t8fHt9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl09ZnVuY3Rpb24oKXtGY2UoKX07dmFyIE9jdCxCY2U9bmV3IFNldCxKSD1lPT5jbGFzcyBleHRlbmRzIFpIKGUpe3N0YXRpYyBmaW5hbGl6ZSgpe3N1cGVyLmZpbmFsaXplKCk7bGV0e2lzOnJ9PXRoaXM7ciYmIUJjZS5oYXMocikmJih3aW5kb3cuVmFhZGluLnJlZ2lzdHJhdGlvbnMucHVzaCh0aGlzKSxCY2UuYWRkKHIpLHdpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2smJihPY3Q9c3IuZGVib3VuY2UoT2N0LGt4LCgpPT57d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFja1sidmFhZGluLXVzYWdlLXN0YXRpc3RpY3MiXSgpfSksSmwoT2N0KSkpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSxkb2N1bWVudC5kb2N0eXBlPT09bnVsbCYmY29uc29sZS53YXJuKCdWYWFkaW4gY29tcG9uZW50cyByZXF1aXJlIHRoZSAic3RhbmRhcmRzIG1vZGUiIGRlY2xhcmF0aW9uLiBQbGVhc2UgYWRkIDwhRE9DVFlQRSBodG1sPiB0byB0aGUgSFRNTCBkb2N1bWVudC4nKX19O3ZhciBRSD1jbGFzcyBleHRlbmRzIEpIKE9jZShYSCh5aChtdCkpKSl7c3RhdGljIGdldCB0ZW1wbGF0ZSgpe3JldHVybiBRYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGZsZXg6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSdjaGVja2JveCddIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIGN1cnNvcjogaW5oZXJpdDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtkaXNhYmxlZF0pIHsKICAgICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgoKICAgICAgPGxhYmVsPgogICAgICAgIDxzcGFuIHBhcnQ9ImNoZWNrYm94Ij4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgY2hlY2tlZD0ie3tjaGVja2VkOjpjaGFuZ2V9fSIKICAgICAgICAgICAgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iCiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9Int7aW5kZXRlcm1pbmF0ZTo6Y2hhbmdlfX0iCiAgICAgICAgICAgIHJvbGU9InByZXNlbnRhdGlvbiIKICAgICAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgICAgLz4KICAgICAgICA8L3NwYW4+CgogICAgICAgIDxzcGFuIHBhcnQ9ImxhYmVsIj4KICAgICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgICA8L3NwYW4+CiAgICAgIDwvbGFiZWw+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWNoZWNrYm94In1zdGF0aWMgZ2V0IHZlcnNpb24oKXtyZXR1cm4iMjAuMC4yIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2hlY2tlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGluZGV0ZXJtaW5hdGU6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9pbmRldGVybWluYXRlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSx2YWx1ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im9uIn0sX25hdGl2ZUNoZWNrYm94Ont0eXBlOk9iamVjdH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm5hbWV9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jaGVja2VkP3RoaXMuX3N0b3JlZE5hbWU6IiJ9c2V0IG5hbWUodCl7dGhpcy5fc3RvcmVkTmFtZT10fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsImNoZWNrYm94IiksdGhpcy5fbmF0aXZlQ2hlY2tib3g9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYW5kbGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLl9hZGRBY3RpdmVMaXN0ZW5lcnMoKTtsZXQgdD10aGlzLmdldEF0dHJpYnV0ZSgibmFtZSIpO3QmJih0aGlzLm5hbWU9dCksdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0ibGFiZWwiXScpLnF1ZXJ5U2VsZWN0b3IoInNsb3QiKS5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZS5iaW5kKHRoaXMpKSx0aGlzLl91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpfV91cGRhdGVMYWJlbEF0dHJpYnV0ZSgpe2xldCB0PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKSxyPXQuZmlyc3RFbGVtZW50Q2hpbGQuYXNzaWduZWROb2RlcygpO3RoaXMuX2lzQXNzaWduZWROb2Rlc0VtcHR5KHIpP3Quc2V0QXR0cmlidXRlKCJlbXB0eSIsIiIpOnQucmVtb3ZlQXR0cmlidXRlKCJlbXB0eSIpfV9pc0Fzc2lnbmVkTm9kZXNFbXB0eSh0KXtyZXR1cm4gdC5sZW5ndGg9PT0wfHx0Lmxlbmd0aD09MSYmdFswXS5ub2RlVHlwZT09Tm9kZS5URVhUX05PREUmJnRbMF0udGV4dENvbnRlbnQudHJpbSgpPT09IiJ9X2NoZWNrZWRDaGFuZ2VkKHQpe3RoaXMuaW5kZXRlcm1pbmF0ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIixCb29sZWFuKHQpKX1faW5kZXRlcm1pbmF0ZUNoYW5nZWQodCl7dD90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIiwibWl4ZWQiKTp0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIix0aGlzLmNoZWNrZWQpfV9hZGRBY3RpdmVMaXN0ZW5lcnMoKXt0aGlzLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHRoaXMsImRvd24iLHQ9Pnt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFjdGl2ZSIsIiIpfSksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJ1cCIsKCk9PnRoaXMucmVtb3ZlQXR0cmlidXRlKCJhY3RpdmUiKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKSl9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnQua2V5Q29kZT09PTMyJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIiksdGhpcy5pbmRldGVybWluYXRlJiYodGhpcy5pbmRldGVybWluYXRlPSExKSl9KX1nZXQgZm9jdXNFbGVtZW50KCl7cmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpfV9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KXtyZXR1cm4hKHRoaXMuZGlzYWJsZWR8fHQudGFyZ2V0LmxvY2FsTmFtZT09PSJhIil9X2hhbmRsZUNsaWNrKHQpe3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiYodGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmluZGV0ZXJtaW5hdGU9ITEsdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSk6dC5jb21wb3NlZFBhdGgoKVswXSE9PXRoaXMuX25hdGl2ZUNoZWNrYm94JiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZUNoZWNrZWQoKSkpfV90b2dnbGVDaGVja2VkKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2hhbmdlIix7Y29tcG9zZWQ6ITEsYnViYmxlczohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShRSC5pcyxRSCk7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1zKTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tYm9keS10ZXh0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKCiAgICAgIC8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMTBwY3QpOwogICAgICAtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoOiAxcHg7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdCk7CiAgICB9CgogICAgLyogTm8gKG91dGVyKSBib3JkZXIgKi8KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLWJvcmRlciddKSkgewogICAgICBib3JkZXI6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ2VsbCBzdHlsZXMgKi8KCiAgICBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1tKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1tKTsKICAgIH0KCiAgICAvKiBBcHBseSByb3cgYm9yZGVycyBieSBkZWZhdWx0IGFuZCBpbnRyb2R1Y2UgdGhlICJuby1yb3ctYm9yZGVycyIgdmFyaWFudCAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXRvcDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogSGlkZSBmaXJzdCBib2R5IHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLW0pIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICAvKiBGb2N1cy1yaW5nICovCgogICAgW3BhcnR+PSdjZWxsJ106Zm9jdXMgewogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIDpob3N0KFtuYXZpZ2F0aW5nXSkgW3BhcnR+PSdjZWxsJ106Zm9jdXM6OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICcnOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIC8qIERyYWcgYW5kIERyb3Agc3R5bGVzICovCiAgICA6aG9zdChbZHJhZ292ZXJdKTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB6LWluZGV4OiAxMDA7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIHsKICAgICAgei1pbmRleDogMTAwICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ10gewogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgKyAycHgpOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSBbZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIGhlaWdodDogMnB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiAxMDAlOwogICAgICBib3R0b206IGF1dG87CiAgICAgIG1hcmdpbi10b3A6IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcj0nYWJvdmUnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICB0b3A6IGF1dG87CiAgICAgIGJvdHRvbTogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RldGFpbHMtb3BlbmVkXVtkcmFnb3Zlcj0nYmVsb3cnXSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSk6OmFmdGVyLAogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdkZXRhaWxzLWNlbGwnXTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdW2RyYWdvdmVyPSdvbi10b3AnXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDEwMCU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIHsKICAgICAgLyogQWRkIGJvdHRvbS1zcGFjZSB0byB0aGUgcm93IHNvIHRoZSBkcmFnIG51bWJlciBkb2Vzbid0IGdldCBjbGlwcGVkLiBOZWVkZWQgZm9yIElFL0VkZ2UgKi8KICAgICAgYm9yZGVyLWJvdHRvbTogMTAwcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgICBvcGFjaXR5OiAwLjk7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICBbaW9zXSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgfQoKICAgICNzY3JvbGxlcjpub3QoW2lvc10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XTpub3QoW2RyYWdzdGFydD0nJ10pOjphZnRlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteCk7CiAgICAgIHRvcDogdmFyKC0tX2dyaWQtZHJhZy1zdGFydC15KTsKICAgICAgei1pbmRleDogMTAwOwogICAgICBjb250ZW50OiBhdHRyKGRyYWdzdGFydCk7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBwYWRkaW5nOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteHMpICogMC44KTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZXJyb3ItY29udHJhc3QtY29sb3IpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbG9yKTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLW0pOwogICAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhzKTsKICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHRleHQtdHJhbnNmb3JtOiBpbml0aWFsOwogICAgICBsZXR0ZXItc3BhY2luZzogaW5pdGlhbDsKICAgICAgbWluLXdpZHRoOiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1zKSAqIDAuNyk7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAvKiBIZWFkZXJzIGFuZCBmb290ZXJzICovCgogICAgW3BhcnR+PSdoZWFkZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdmb290ZXItY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXMpOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLXhsKTsKICAgIH0KCiAgICAvKiBIZWFkZXIgYm9yZGVycyAqLwoKICAgIC8qIEhpZGUgZmlyc3QgaGVhZGVyIHJvdyB0b3AgYm9yZGVyICovCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcDogMDsKICAgIH0KCiAgICBbcGFydD0ncm93J106bGFzdC1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBib3JkZXItYm90dG9tOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSd0b3AnXSkgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEZvb3RlciBib3JkZXJzICovCgogICAgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdCg6bm90KFt0aGVtZX49J25vLXJvdy1ib3JkZXJzJ10pKSBbcGFydD0ncm93J106Zmlyc3QtY2hpbGQgW3BhcnR+PSdmb290ZXItY2VsbCddIHsKICAgICAgYm9yZGVyLXRvcC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBPdmVyZmxvdyB1c2VzIGEgc3Ryb25nZXIgYm9yZGVyIGNvbG9yICovCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdib3R0b20nXSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVvcmRlcmluZyAqLwoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2FsbG93ZWQnXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXVtyZW9yZGVyLXN0YXR1cz0nZHJhZ2dpbmcnXSB7CiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpLCB2YXIoLS1sdW1vLWNvbnRyYXN0LTVwY3QpKSB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgb3BhY2l0eTogMC44NTsKICAgICAgYm94LXNoYWRvdzogdmFyKC0tbHVtby1ib3gtc2hhZG93LXMpOwogICAgICAvKiBUT0RPIFVzZSB0aGUgc2FtZSBzdHlsZXMgYXMgZm9yIHRoZSBjZWxsIGVsZW1lbnQgKHJlb3JkZXItZ2hvc3QgY29waWVzIHN0eWxlcyBmcm9tIHRoZSBjZWxsIGVsZW1lbnQpICovCiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UtcykgdmFyKC0tbHVtby1zcGFjZS1tKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIENvbHVtbiByZXNpemluZyAqLwoKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10gewogICAgICB3aWR0aDogM3B4OwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3QpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSAqOm5vdChbY29sdW1uLXJlc2l6aW5nXSkgW3BhcnR+PSdjZWxsJ106aG92ZXIgW3BhcnQ9J3Jlc2l6ZS1oYW5kbGUnXSwKICAgIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ106YWN0aXZlIHsKICAgICAgb3BhY2l0eTogMTsKICAgICAgdHJhbnNpdGlvbi1kZWxheTogMC4xNXM7CiAgICB9CgogICAgLyogQ29sdW1uIGJvcmRlcnMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGcm96ZW4gY29sdW1ucyAqLwoKICAgIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICA6aG9zdChbb3ZlcmZsb3d+PSdsZWZ0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBSb3cgc3RyaXBlcyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2JvZHktY2VsbCddLAogICAgOmhvc3QoW3RoZW1lfj0ncm93LXN0cmlwZXMnXSkgW3BhcnR+PSdyb3cnXTpub3QoW29kZF0pIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKICAgIH0KCiAgICAvKiBTZWxlY3RlZCByb3cgKi8KCiAgICAvKiBSYWlzZSB0aGUgc2VsZWN0ZWQgcm93cyBhYm92ZSB1bnNlbGVjdGVkIHJvd3MgKHNvIHRoYXQgYm94LXNoYWRvdyBjYW4gY292ZXIgdW5zZWxlY3RlZCByb3dzKSAqLwogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSB7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgOmhvc3QoOm5vdChbcmVvcmRlcmluZ10pKSBbcGFydH49J3JvdyddW3NlbGVjdGVkXSBbcGFydH49J2JvZHktY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvciksIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICB9CgogICAgLyogQ292ZXIgdGhlIGJvcmRlciBvZiBhbiB1bnNlbGVjdGVkIHJvdyAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm94LXNoYWRvdzogMCB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgMCAwIHZhcigtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yKTsKICAgIH0KCiAgICAvKiBDb21wYWN0ICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J106b25seS1jaGlsZCBbcGFydH49J2hlYWRlci1jZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydH49J2NlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS1zKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0PSdyb3cnXVtmaXJzdF0gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgbWluLWhlaWdodDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgLSB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkpOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXhzKSB2YXIoLS1sdW1vLXNwYWNlLXMpOwogICAgfQoKICAgIC8qIFdyYXAgY2VsbCBjb250ZW50cyAqLwoKICAgIDpob3N0KFt0aGVtZX49J3dyYXAtY2VsbC1jb250ZW50J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIH0KCiAgICAvKiBSVEwgc3BlY2lmaWMgc3R5bGVzICovCgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtsYXN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMCAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2ZpcnN0LWNvbHVtbl0gewogICAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVt0aGVtZX49J2NvbHVtbi1ib3JkZXJzJ10pIFtwYXJ0fj0nY2VsbCddOm5vdChbbGFzdC1jb2x1bW5dKTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSB7CiAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgYm9yZGVyLWxlZnQ6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB0cmFuc3BhcmVudDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXVtvdmVyZmxvd349J3JpZ2h0J10pIFtwYXJ0fj0nY2VsbCddW2xhc3QtZnJvemVuXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQogIGAse21vZHVsZUlkOiJsdW1vLWdyaWQifSk7amMoInZhYWRpbi1jaGVja2JveCIsQ2lgCiAgICA6aG9zdCgudmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveCkgewogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLW0pOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zZWxlY3QtYWxsLWNoZWNrYm94LWx1bW8ifSk7dmFyIEhjZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OmhvbmV8YWQ7KD86IFU7KT8gQ1BVKSBPUyAoXGQrKS8pLHJocj1IY2UmJkhjZVsxXT49OCxWY2U9MyxVY2U9aDkoe2JlaGF2aW9yczpbSnMsdjldLF9yYXRpbzouNSxfc2Nyb2xsZXJQYWRkaW5nVG9wOjAsX3Njcm9sbFBvc2l0aW9uOjAsX3BoeXNpY2FsU2l6ZTowLF9waHlzaWNhbEF2ZXJhZ2U6MCxfcGh5c2ljYWxBdmVyYWdlQ291bnQ6MCxfcGh5c2ljYWxUb3A6MCxfdmlydHVhbENvdW50OjAsX2VzdFNjcm9sbEhlaWdodDowLF9zY3JvbGxIZWlnaHQ6MCxfdmlld3BvcnRIZWlnaHQ6MCxfdmlld3BvcnRXaWR0aDowLF9waHlzaWNhbEl0ZW1zOm51bGwsX3BoeXNpY2FsU2l6ZXM6bnVsbCxfZmlyc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbGFzdFZpc2libGVJbmRleFZhbDpudWxsLF9tYXhQYWdlczoyLF9mb2N1c2VkVmlydHVhbEluZGV4Oi0xLF90ZW1wbGF0ZUNvc3Q6MCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU2l6ZS10aGlzLl92aWV3cG9ydEhlaWdodH0sZ2V0IF9tYXhTY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LXRoaXMuX3ZpZXdwb3J0SGVpZ2h0K3RoaXMuX3Njcm9sbE9mZnNldH0sZ2V0IF9tYXhWaXJ0dWFsU3RhcnQoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5fdmlydHVhbFN0YXJ0VmFsPWV9LGdldCBfdmlydHVhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3ZpcnR1YWxTdGFydFZhbHx8MH0sc2V0IF9waHlzaWNhbFN0YXJ0KGUpe2U9ZSV0aGlzLl9waHlzaWNhbENvdW50LGU8MCYmKGU9dGhpcy5fcGh5c2ljYWxDb3VudCtlKSx0aGlzLl9waHlzaWNhbFN0YXJ0VmFsPWV9LGdldCBfcGh5c2ljYWxTdGFydCgpe3JldHVybiB0aGlzLl9waHlzaWNhbFN0YXJ0VmFsfHwwfSxnZXQgX3BoeXNpY2FsRW5kKCl7cmV0dXJuKHRoaXMuX3BoeXNpY2FsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xKSV0aGlzLl9waHlzaWNhbENvdW50fSxzZXQgX3BoeXNpY2FsQ291bnQoZSl7dGhpcy5fcGh5c2ljYWxDb3VudFZhbD1lfSxnZXQgX3BoeXNpY2FsQ291bnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxDb3VudFZhbHx8MH0sZ2V0IF9vcHRQaHlzaWNhbFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRIZWlnaHQ9PT0wPzEvMDp0aGlzLl92aWV3cG9ydEhlaWdodCp0aGlzLl9tYXhQYWdlc30sZ2V0IF9pc1Zpc2libGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm9mZnNldFdpZHRofHx0aGlzLm9mZnNldEhlaWdodCl9LGdldCBmaXJzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2xldCB0PXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldDtlPXRoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe2lmKHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl0sdD50aGlzLl9zY3JvbGxQb3NpdGlvbilyZXR1cm4gbn0pfHwwLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBsYXN0VmlzaWJsZUluZGV4KCl7bGV0IGU9dGhpcy5fbGFzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbcl19KSx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPWV9cmV0dXJuIGV9LGdldCBfc2Nyb2xsT2Zmc2V0KCl7cmV0dXJuIHRoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSx0aGlzLmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIil9LHVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllczpmdW5jdGlvbigpe2xldCBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpO3RoaXMuX3Njcm9sbGVyUGFkZGluZ1RvcD10aGlzLnNjcm9sbFRhcmdldD09PXRoaXM/MDpwYXJzZUludChlWyJwYWRkaW5nLXRvcCJdLDEwKSx0aGlzLl9pc1JUTD1Cb29sZWFuKGUuZGlyZWN0aW9uPT09InJ0bCIpLHRoaXMuX3ZpZXdwb3J0V2lkdGg9dGhpcy4kLml0ZW1zLm9mZnNldFdpZHRoLHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PXRoaXMuX3Njcm9sbFRhcmdldEhlaWdodH0sX3Njcm9sbEhhbmRsZXI6ZnVuY3Rpb24oKXtsZXQgZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX21heFNjcm9sbFRvcCx0aGlzLl9zY3JvbGxUb3ApKSx0PWUtdGhpcy5fc2Nyb2xsUG9zaXRpb24scj10Pj0wO2lmKHRoaXMuX3Njcm9sbFBvc2l0aW9uPWUsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsTWF0aC5hYnModCk+dGhpcy5fcGh5c2ljYWxTaXplJiZ0aGlzLl9waHlzaWNhbFNpemU+MCl7dD10LXRoaXMuX3Njcm9sbE9mZnNldDtsZXQgbj1NYXRoLnJvdW5kKHQvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K24sdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7bGV0e3BoeXNpY2FsVG9wOm4saW5kZXhlczppfT10aGlzLl9nZXRSZXVzYWJsZXMocik7cj8odGhpcy5fcGh5c2ljYWxUb3A9bix0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K2kubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmxlbmd0aCk6KHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQtaS5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0LWkubGVuZ3RoKSx0aGlzLl91cGRhdGUoaSxyP251bGw6aSksdGhpcy5fZGVib3VuY2UoIl9pbmNyZWFzZVBvb2xJZk5lZWRlZCIsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQuYmluZCh0aGlzLDApLGxpKX19LF9nZXRSZXVzYWJsZXM6ZnVuY3Rpb24oZSl7bGV0IHQscixuLGk9W10sbz10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxhPXRoaXMuX3ZpcnR1YWxTdGFydCxzPXRoaXMuX3ZpcnR1YWxFbmQsbD10aGlzLl9waHlzaWNhbENvdW50LGM9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LHU9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fc2Nyb2xsVG9wLGY9dGhpcy5fc2Nyb2xsQm90dG9tO2ZvcihlPyh0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj1oLWMpOih0PXRoaXMuX3BoeXNpY2FsRW5kLHI9dS1mKTtuPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF0scj1yLW4sIShpLmxlbmd0aD49bHx8cjw9byk7KWlmKGUpe2lmKHMraS5sZW5ndGgrMT49dGhpcy5fdmlydHVhbENvdW50fHxjK24+PWgtdGhpcy5fc2Nyb2xsT2Zmc2V0KWJyZWFrO2kucHVzaCh0KSxjPWMrbix0PSh0KzEpJWx9ZWxzZXtpZihhLWkubGVuZ3RoPD0wfHxjK3RoaXMuX3BoeXNpY2FsU2l6ZS1uPD1mKWJyZWFrO2kucHVzaCh0KSxjPWMtbix0PXQ9PT0wP2wtMTp0LTF9cmV0dXJue2luZGV4ZXM6aSxwaHlzaWNhbFRvcDpjLXRoaXMuX3Njcm9sbE9mZnNldH19LF91cGRhdGU6ZnVuY3Rpb24oZSx0KXtpZighKGUmJmUubGVuZ3RoPT09MHx8dGhpcy5fcGh5c2ljYWxDb3VudD09PTApKXtpZih0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXtsZXQgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9waHlzaWNhbFNpemVzW3JdfXRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoKX19LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe2xldCByPXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxWY2UsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCktdGhpcy5fcGh5c2ljYWxDb3VudCxuPU1hdGgucm91bmQodGhpcy5fcGh5c2ljYWxDb3VudCouNSk7aWYoIShyPDApKXtpZihyPjApe2xldCBpPXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTtbXS5wdXNoLmFwcGx5KHRoaXMuX3BoeXNpY2FsSXRlbXMsdGhpcy5fY3JlYXRlUG9vbChyKSk7Zm9yKGxldCBvPTA7bzxyO28rKyl0aGlzLl9waHlzaWNhbFNpemVzLnB1c2goMCk7dGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50K3IsdGhpcy5fcGh5c2ljYWxTdGFydD50aGlzLl9waHlzaWNhbEVuZCYmdGhpcy5faXNJbmRleFJlbmRlcmVkKHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpJiZ0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpPHRoaXMuX3BoeXNpY2FsRW5kJiYodGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3IpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3RlbXBsYXRlQ29zdD0od2luZG93LnBlcmZvcm1hbmNlLm5vdygpLWkpL3Isbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpfXRoaXMuX3ZpcnR1YWxFbmQ+PXRoaXMuX3ZpcnR1YWxDb3VudC0xfHxuPT09MHx8KHRoaXMuX2lzQ2xpZW50RnVsbCgpP3RoaXMuX3BoeXNpY2FsU2l6ZTx0aGlzLl9vcHRQaHlzaWNhbFNpemUmJnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyx0aGlzLl9jbGFtcChNYXRoLnJvdW5kKDUwL3RoaXMuX3RlbXBsYXRlQ29zdCksMSxuKSksa3gpOnRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcyxuKSxsaSkpfX0sX3JlbmRlcjpmdW5jdGlvbigpe2lmKCEoIXRoaXMuaXNBdHRhY2hlZHx8IXRoaXMuX2lzVmlzaWJsZSkpaWYodGhpcy5fcGh5c2ljYWxDb3VudCE9PTApe2xldHtwaHlzaWNhbFRvcDplLGluZGV4ZXM6dH09dGhpcy5fZ2V0UmV1c2FibGVzKCEwKTt0aGlzLl9waHlzaWNhbFRvcD1lLHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrdC5sZW5ndGgsdGhpcy5fcGh5c2ljYWxTdGFydD10aGlzLl9waHlzaWNhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3VwZGF0ZSh0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKX1lbHNlIHRoaXMuX3ZpcnR1YWxDb3VudD4wJiYodGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZChWY2UpKX0sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fdmlydHVhbFN0YXJ0PTAsdGhpcy5fcGh5c2ljYWxUb3A9MCx0aGlzLl92aXJ0dWFsQ291bnQ9dGhpcy5pdGVtcz90aGlzLml0ZW1zLmxlbmd0aDowLHRoaXMuX3BoeXNpY2FsSW5kZXhGb3JLZXk9e30sdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fcGh5c2ljYWxDb3VudD10aGlzLl9waHlzaWNhbENvdW50fHwwLHRoaXMuX3BoeXNpY2FsSXRlbXM9dGhpcy5fcGh5c2ljYWxJdGVtc3x8W10sdGhpcy5fcGh5c2ljYWxTaXplcz10aGlzLl9waHlzaWNhbFNpemVzfHxbXSx0aGlzLl9waHlzaWNhbFN0YXJ0PTAsdGhpcy5fc2Nyb2xsVG9wPnRoaXMuX3Njcm9sbE9mZnNldCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbigwKSx0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKSl9LF9pdGVyYXRlSXRlbXM6ZnVuY3Rpb24oZSx0KXtsZXQgcixuLGksbztpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmdCl7Zm9yKG89MDtvPHQubGVuZ3RoO28rKylpZihyPXRbb10sbj10aGlzLl9jb21wdXRlVmlkeChyKSwoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX1lbHNle2ZvcihyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj10aGlzLl92aXJ0dWFsU3RhcnQ7cjx0aGlzLl9waHlzaWNhbENvdW50O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGk7Zm9yKHI9MDtyPHRoaXMuX3BoeXNpY2FsU3RhcnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaX19LF9jb21wdXRlVmlkeDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fcGh5c2ljYWxTdGFydD90aGlzLl92aXJ0dWFsU3RhcnQrKGUtdGhpcy5fcGh5c2ljYWxTdGFydCk6dGhpcy5fdmlydHVhbFN0YXJ0Kyh0aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3BoeXNpY2FsU3RhcnQpK2V9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9pc1Zpc2libGUpcmV0dXJuO2NpKCk7bGV0IHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyl7cis9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbFNpemVzW29dPXRoaXMuX3BoeXNpY2FsSXRlbXNbb10ub2Zmc2V0SGVpZ2h0LHQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10/MTowfSxlKSx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF9wb3NpdGlvbkl0ZW1zOmZ1bmN0aW9uKCl7dGhpcy5fYWRqdXN0U2Nyb2xsUG9zaXRpb24oKTtsZXQgZT10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCl7dGhpcy50cmFuc2xhdGUzZCgwLGUrInB4IiwwLHRoaXMuX3BoeXNpY2FsSXRlbXNbdF0pLGUrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbdF19KX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTtsZXQgdD10aGlzLl9zY3JvbGxUb3A7IXJociYmdD4wJiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHQtZSl9fSxfcmVzZXRTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbihlKXt0aGlzLnNjcm9sbFRhcmdldCYmZT49MCYmKHRoaXMuX3Njcm9sbFRvcD1lLHRoaXMuX3Njcm9sbFBvc2l0aW9uPXRoaXMuX3Njcm9sbFRvcCl9LF91cGRhdGVTY3JvbGxlclNpemU6ZnVuY3Rpb24oZSl7dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsKGV8fE1hdGguYWJzKHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9zY3JvbGxIZWlnaHQpPj10aGlzLl92aWV3cG9ydEhlaWdodCkmJih0aGlzLiQuaXRlbXMuc3R5bGUuaGVpZ2h0PXRoaXMuX2VzdFNjcm9sbEhlaWdodCsicHgiLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQpfSxzY3JvbGxUb0luZGV4OmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTF8fChjaSgpLHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSlyZXR1cm47ZT10aGlzLl9jbGFtcChlLDAsdGhpcy5fdmlydHVhbENvdW50LTEpLCghdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpfHxlPj10aGlzLl9tYXhWaXJ0dWFsU3RhcnQpJiYodGhpcy5fdmlydHVhbFN0YXJ0PWUtMSksdGhpcy5fYXNzaWduTW9kZWxzKCksdGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2U7bGV0IHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtmb3IoO3I8ZSYmbjw9aTspbj1uK3RoaXMuX3BoeXNpY2FsU2l6ZXNbdF0sdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH0sX3Jlc2V0QXZlcmFnZTpmdW5jdGlvbigpe3RoaXMuX3BoeXNpY2FsQXZlcmFnZT0wLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50PTB9LF9yZXNpemVIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLGZ1bmN0aW9uKCl7dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLl9pc1Zpc2libGU/KHRoaXMudG9nZ2xlU2Nyb2xsTGlzdGVuZXIoITApLHRoaXMuX3Jlc2V0QXZlcmFnZSgpLHRoaXMuX3JlbmRlcigpKTp0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCExKX0sTmkpfSxfaXNJbmRleFJlbmRlcmVkOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl92aXJ0dWFsU3RhcnQmJmU8PXRoaXMuX3ZpcnR1YWxFbmR9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LF9jbGFtcDpmdW5jdGlvbihlLHQscil7cmV0dXJuIE1hdGgubWluKHIsTWF0aC5tYXgodCxlKSl9LF9kZWJvdW5jZTpmdW5jdGlvbihlLHQscil7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW2VdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbZV0scix0LmJpbmQodGhpcykpLEpsKHRoaXMuX2RlYm91bmNlcnNbZV0pfX0pO3ZhciB0Vj1jbGFzcyBleHRlbmRzIFVjZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57c2l6ZTp7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSxfdmlkeE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZWZmZWN0aXZlU2l6ZUNoYW5nZWQoX2VmZmVjdGl2ZVNpemUpIl19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fdXBkYXRlU2Nyb2xsZXJJdGVtKCl7fV9hZnRlclNjcm9sbCgpe31fZ2V0Um93VGFyZ2V0KCl7fV9jcmVhdGVTY3JvbGxlclJvd3MoKXt9X2NhblBvcHVsYXRlKCl7fXNjcm9sbFRvSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInNjcm9sbFRvSW5kZXgiKSx0aGlzLl9zY3JvbGxpbmdUb0luZGV4PSEwLHQ9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9lZmZlY3RpdmVTaXplLTEpLHRoaXMuJC50YWJsZS5zY3JvbGxUb3A9dC90aGlzLl9lZmZlY3RpdmVTaXplKih0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemUmJnRoaXMuX2FkanVzdFZpcnR1YWxJbmRleE9mZnNldCgxZTYpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHQtdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKTtsZXQgcj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKG49Pm4uaW5kZXg9PT10KVswXTtpZihyKXtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtNYXRoLmFicyhuKT4xJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9bix0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfXRoaXMuX3Njcm9sbGluZ1RvSW5kZXg9ITF9X2VmZmVjdGl2ZVNpemVDaGFuZ2VkKHQpe2xldCByLG49MDt0aGlzLl9pdGVyYXRlSXRlbXMoKGksbyk9PntpZihvPT09dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpe2xldCBhPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07cj1hLmluZGV4LG49YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3B9fSksdGhpcy5pdGVtcyYmdDx0aGlzLml0ZW1zLmxlbmd0aCYmKHRoaXMuX3Njcm9sbFRvcD0wKSxBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpfHwodGhpcy5pdGVtcz17bGVuZ3RoOk1hdGgubWluKHQsMWU1KX0pLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5faXRlbXNDaGFuZ2VkKHtwYXRoOiJpdGVtcyJ9KSksdGhpcy5fdmlydHVhbENvdW50PU1hdGgubWluKHRoaXMuaXRlbXMubGVuZ3RoLHQpfHwwLHRoaXMuX3Njcm9sbFRvcD09PTAmJih0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fc2Nyb2xsVG9JbmRleChNYXRoLm1pbih0LTEscikpKSx0aGlzLl9pdGVyYXRlSXRlbXMoaT0+e2xldCBvPXRoaXMuX3BoeXNpY2FsSXRlbXNbaV07aWYoby5pbmRleD09PXImJih0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1NYXRoLnJvdW5kKG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLW4pKSxvLmluZGV4PT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5faXRlbXNGb2N1c2FibGUmJnRoaXMuJC5pdGVtcy5jb250YWlucyh0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCkpe2xldCBhPUFycmF5LmZyb20odGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50RWxlbWVudC5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSk7by5jaGlsZHJlblthXS5mb2N1cygpfX0pKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3VwZGF0ZSgpKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fcG9zaXRpb25JdGVtcygpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IHQ7aXNOYU4odGhpcy5fcGh5c2ljYWxUb3ApJiYodD0hMCx0aGlzLl9waHlzaWNhbFRvcD0wKTtsZXQgcj10aGlzLl9waHlzaWNhbFRvcDt0aGlzLl9pdGVyYXRlSXRlbXMobj0+e3RoaXMuX3BoeXNpY2FsSXRlbXNbbl0uc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7cn1weClgLHIrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbbl19KSx0JiZ0aGlzLl9zY3JvbGxUb0luZGV4KDApfV9pbmNyZWFzZVBvb2xJZk5lZWRlZCh0KXt0PT09MCYmdGhpcy5fc2Nyb2xsaW5nVG9JbmRleHx8IXRoaXMuX2NhblBvcHVsYXRlKCl8fCF0aGlzLl9lZmZlY3RpdmVTaXplfHwodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkP3RoaXMuX29wdFBoeXNpY2FsU2l6ZSE9PTEvMCYmKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLE5pLCgpPT57dGhpcy5fdXBkYXRlTWV0cmljcygpO2xldCByPXRoaXMuX29wdFBoeXNpY2FsU2l6ZS10aGlzLl9waHlzaWNhbFNpemUsbj1NYXRoLmNlaWwoci90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpO3RoaXMuX3BoeXNpY2FsQ291bnQrbj50aGlzLl9lZmZlY3RpdmVTaXplJiYobj1NYXRoLm1heCgwLHRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fcGh5c2ljYWxDb3VudCkpLHRoaXMuX3BoeXNpY2FsU2l6ZSYmbj4wJiZ0aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJihzdXBlci5faW5jcmVhc2VQb29sSWZOZWVkZWQobiksdGhpcy5fX3Jlb3JkZXJDaGlsZE5vZGVzKCkpfSkpOih0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQ9ITAsc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKDI1KSkpfV9fcmVvcmRlckNoaWxkTm9kZXMoKXtsZXQgdD1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZE5vZGVzKTshIXQucmVkdWNlKChuLGksbyxhKT0+e2lmKG89PT0wfHxhW28tMV0uaW5kZXg9PT1pLmluZGV4LTEpcmV0dXJuIG59LCEwKXx8dC5zb3J0KChuLGkpPT5uLmluZGV4LWkuaW5kZXgpLmZvckVhY2gobj0+dGhpcy4kLml0ZW1zLmFwcGVuZENoaWxkKG4pKX1fY3JlYXRlUG9vbCh0KXtsZXQgcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbj10aGlzLl9jcmVhdGVTY3JvbGxlclJvd3ModCk7bi5mb3JFYWNoKG89PnIuYXBwZW5kQ2hpbGQobykpLHRoaXMuX2dldFJvd1RhcmdldCgpLmFwcGVuZENoaWxkKHIpO2xldCBpPXRoaXMucXVlcnlTZWxlY3RvcigiW3Nsb3RdIik7aWYoaSl7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInNsb3QiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsImZvby1iYXIiKSxpLnNldEF0dHJpYnV0ZSgic2xvdCIsbyl9cmV0dXJuIFRtKHRoaXMsKCk9PnRoaXMubm90aWZ5UmVzaXplKCkpLG59X2Fzc2lnbk1vZGVscyh0KXt0aGlzLl9pdGVyYXRlSXRlbXMoKHIsbik9PntsZXQgaT10aGlzLl9waHlzaWNhbEl0ZW1zW3JdO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiaGlkZGVuIixuPj10aGlzLl9lZmZlY3RpdmVTaXplLGkpLHRoaXMuX3VwZGF0ZVNjcm9sbGVySXRlbShpLG4rKHRoaXMuX3ZpZHhPZmZzZXR8fDApKX0sdCl9X3Njcm9sbEhhbmRsZXIoKXtsZXQgdD10aGlzLiQudGFibGUuc2Nyb2xsVG9wLXRoaXMuX3Njcm9sbFBvc2l0aW9uO3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9zY3JvbGxIYW5kbGVyKTtsZXQgcj10aGlzLl92aWR4T2Zmc2V0O3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLl9tYXhTY3JvbGxUb3ApJiZ0aGlzLl92aXJ0dWFsQ291bnQ8dGhpcy5fZWZmZWN0aXZlU2l6ZT90aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCk6dGhpcy5fdmlkeE9mZnNldD0wLHRoaXMuX3ZpZHhPZmZzZXQhPT1yJiZ0aGlzLl91cGRhdGUoKSx0aGlzLl9hZnRlclNjcm9sbCgpfV9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQodCl7aWYoTWF0aC5hYnModCk+MWU0KXtpZih0aGlzLl9ub1NjYWxlKXt0aGlzLl9ub1NjYWxlPSExO3JldHVybn1sZXQgcj10aGlzLiQudGFibGUuc2Nyb2xsVG9wLyh0aGlzLiQudGFibGUuc2Nyb2xsSGVpZ2h0LXRoaXMuJC50YWJsZS5vZmZzZXRIZWlnaHQpLG49cip0aGlzLl9lZmZlY3RpdmVTaXplO3RoaXMuX3ZpZHhPZmZzZXQ9TWF0aC5yb3VuZChuLXIqdGhpcy5fdmlydHVhbENvdW50KX1lbHNle2xldCByPXRoaXMuX3ZpZHhPZmZzZXR8fDAsbj0xZTMsaT0xMDA7dGhpcy5fc2Nyb2xsVG9wPT09MD8odGhpcy5fdmlkeE9mZnNldD0wLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KDApKTp0aGlzLmZpcnN0VmlzaWJsZUluZGV4PG4mJnRoaXMuX3ZpZHhPZmZzZXQ+MCYmKHRoaXMuX3ZpZHhPZmZzZXQtPU1hdGgubWluKHRoaXMuX3ZpZHhPZmZzZXQsaSksciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5maXJzdFZpc2libGVJbmRleCsoci10aGlzLl92aWR4T2Zmc2V0KSksdGhpcy5fbm9TY2FsZT0hMCk7bGV0IG89dGhpcy5fZWZmZWN0aXZlU2l6ZS10aGlzLl92aXJ0dWFsQ291bnQ7dGhpcy5fc2Nyb2xsVG9wPj10aGlzLl9tYXhTY3JvbGxUb3AmJnRoaXMuX21heFNjcm9sbFRvcD4wPyh0aGlzLl92aWR4T2Zmc2V0PW8sciE9PXRoaXMuX3ZpZHhPZmZzZXQmJnN1cGVyLnNjcm9sbFRvSW5kZXgodGhpcy5fdmlydHVhbENvdW50KSk6dGhpcy5maXJzdFZpc2libGVJbmRleD50aGlzLl92aXJ0dWFsQ291bnQtbiYmdGhpcy5fdmlkeE9mZnNldDxvJiYodGhpcy5fdmlkeE9mZnNldCs9TWF0aC5taW4oby10aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgtKHRoaXMuX3ZpZHhPZmZzZXQtcikpLHRoaXMuX25vU2NhbGU9ITApfX1fYWNjZXNzSXJvbkxpc3RBUEkodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3NBc3luY0VuYWJsZWQ9ITE7bGV0IHI9dC5hcHBseSh0aGlzKTtyZXR1cm4gdGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3M9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyV2FyblByaXZhdGVBUElBY2Nlc3MsTmksKCk9PnRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSEwKSxyfV9kZWJvdW5jZVJlbmRlcih0LHIpe3N1cGVyLl9kZWJvdW5jZVJlbmRlcigoKT0+dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkodCkscil9X3dhcm5Qcml2YXRlQVBJQWNjZXNzKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkJiZjb25zb2xlLndhcm4oYEFjY2Vzc2luZyBwcml2YXRlIEFQSSAoJHt0fSkhYCl9X3JlbmRlcigpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZW5kZXIpfV9pdGVtc0NoYW5nZWQoKXt9Z2V0IF9maXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuZmlyc3RWaXNpYmxlSW5kZXgpfWdldCBfbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIubGFzdFZpc2libGVJbmRleCl9X3Njcm9sbFRvSW5kZXgodCl7dGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuc2Nyb2xsVG9JbmRleCh0KSl9Z2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJmaXJzdFZpc2libGVJbmRleCIpLHN1cGVyLmZpcnN0VmlzaWJsZUluZGV4fXNldCBmaXJzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleD10fWdldCBsYXN0VmlzaWJsZUluZGV4KCl7cmV0dXJuIHRoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJsYXN0VmlzaWJsZUluZGV4Iiksc3VwZXIubGFzdFZpc2libGVJbmRleH1zZXQgbGFzdFZpc2libGVJbmRleCh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXg9dH11cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygidXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzIiksc3VwZXIudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1fcmVzaXplSGFuZGxlcigpe3N1cGVyLl9yZXNpemVIYW5kbGVyKCksY2koKX19O3ZhciBxY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfYTExeVVwZGF0ZUdyaWRTaXplKHNpemUsIF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfV9hMTF5R2V0SGVhZGVyUm93Q291bnQocil7cmV0dXJuIHIuZmlsdGVyKG49Pm4uc29tZShpPT5pLl9oZWFkZXJUZW1wbGF0ZXx8aS5oZWFkZXJSZW5kZXJlcnx8aS5wYXRofHxpLmhlYWRlcikpLmxlbmd0aH1fYTExeUdldEZvb3RlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXIpKS5sZW5ndGh9X2ExMXlVcGRhdGVHcmlkU2l6ZShyLG4pe2lmKHI9PT12b2lkIDB8fG49PT12b2lkIDApcmV0dXJuO2xldCBpPW5bbi5sZW5ndGgtMV07dGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIscit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQobikrdGhpcy5fYTExeUdldEZvb3RlclJvd0NvdW50KG4pKSx0aGlzLiQudGFibGUuc2V0QXR0cmlidXRlKCJhcmlhLWNvbGNvdW50IixpJiZpLmxlbmd0aHx8MCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpfV9hMTF5VXBkYXRlSGVhZGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmhlYWRlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLG4rMSkpfV9hMTF5VXBkYXRlRm9vdGVyUm93cygpe0FycmF5LmZyb20odGhpcy4kLmZvb3Rlci5jaGlsZHJlbikuZm9yRWFjaCgocixuKT0+ci5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLHRoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSt0aGlzLnNpemUrbisxKSl9X2ExMXlVcGRhdGVSb3dSb3dpbmRleChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuK3RoaXMuX2ExMXlHZXRIZWFkZXJSb3dDb3VudCh0aGlzLl9jb2x1bW5UcmVlKSsxKX1fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpLEFycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT5pLnNldEF0dHJpYnV0ZSgiYXJpYS1zZWxlY3RlZCIsQm9vbGVhbihuKSkpfV9hMTF5VXBkYXRlUm93TGV2ZWwocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1sZXZlbCIsbisxKX1fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e3R5cGVvZiBuPT0iYm9vbGVhbiI/aS5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLG4pOmkuaGFzQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIikmJmkucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIil9KX1fYTExeVNldFJvd0RldGFpbHNDZWxsKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpIT09biYmaS5zZXRBdHRyaWJ1dGUoImFyaWEtY29udHJvbHMiLG4uaWQpfSl9X2ExMXlVcGRhdGVDZWxsQ29sc3BhbihyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLWNvbHNwYW4iLE51bWJlcihuKSl9X2ExMXlVcGRhdGVTb3J0ZXJzKCl7QXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoInZhYWRpbi1ncmlkLXNvcnRlciIpKS5mb3JFYWNoKHI9PntsZXQgbj1yLnBhcmVudE5vZGU7Zm9yKDtuJiZuLmxvY2FsTmFtZSE9PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiOyluPW4ucGFyZW50Tm9kZTtuJiZuLmFzc2lnbmVkU2xvdCYmbi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtc29ydCIse2FzYzoiYXNjZW5kaW5nIixkZXNjOiJkZXNjZW5kaW5nIn1bU3RyaW5nKHIuZGlyZWN0aW9uKV18fCJub25lIil9KX19O3ZhciBHY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnthY3RpdmVJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6bnVsbH19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQuc2Nyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjZWxsLWFjdGl2YXRlIix0aGlzLl9hY3RpdmF0ZUl0ZW0uYmluZCh0aGlzKSl9X2FjdGl2YXRlSXRlbShyKXtsZXQgbj1yLmRldGFpbC5tb2RlbCxpPW4/bi5pdGVtOm51bGw7aSYmKHRoaXMuYWN0aXZlSXRlbT10aGlzLl9pdGVtc0VxdWFsKHRoaXMuYWN0aXZlSXRlbSxpKT9udWxsOmkpfV9vbkNsaWNrKHIpe2lmKHIuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW5bbi5pbmRleE9mKHRoaXMuJC50YWJsZSktM107aWYoIWl8fGkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik+LTEpcmV0dXJuO2xldCBvPWkuX2NvbnRlbnQsYT10aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudDshby5jb250YWlucyhhKSYmIXRoaXMuX2lzRm9jdXNhYmxlKHIudGFyZ2V0KSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKGkucGFyZW50RWxlbWVudCl9fSkpfV9pc0ZvY3VzYWJsZShyKXtyZXR1cm4gbmhyKHIpfX0sbmhyPWU9PntpZighZS5wYXJlbnROb2RlKXJldHVybiExO2xldCByPUFycmF5LmZyb20oZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0YWJpbmRleF0sIGJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIG9iamVjdCwgaWZyYW1lLCBsYWJlbCwgYVtocmVmXSwgYXJlYVtocmVmXSIpKS5maWx0ZXIobj0+bi5nZXRBdHRyaWJ1dGUoInBhcnQiKSE9PSJjZWxsIGJvZHktY2VsbCIpLmluZGV4T2YoZSkhPT0tMTtyZXR1cm4hZS5kaXNhYmxlZCYmcn07dmFyIFdjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOkFycmF5fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2l0ZW1zQ2hhbmdlZChpdGVtcywgaXRlbXMuKiwgaXNBdHRhY2hlZCkiXX1faXRlbXNDaGFuZ2VkKHIsbixpKXtpZighIWkpe2lmKCFBcnJheS5pc0FycmF5KHIpKXtyPT1udWxsJiYodGhpcy5zaXplPTApLHRoaXMuZGF0YVByb3ZpZGVyPT09dGhpcy5fYXJyYXlEYXRhUHJvdmlkZXImJih0aGlzLmRhdGFQcm92aWRlcj12b2lkIDApO3JldHVybn10aGlzLnNpemU9ci5sZW5ndGgsdGhpcy5kYXRhUHJvdmlkZXI9dGhpcy5kYXRhUHJvdmlkZXJ8fHRoaXMuX2FycmF5RGF0YVByb3ZpZGVyLHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfX1fYXJyYXlEYXRhUHJvdmlkZXIocixuKXtsZXQgaT0oQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKT90aGlzLml0ZW1zOltdKS5zbGljZSgwKTt0aGlzLl9maWx0ZXJzJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX2ZpbHRlcnMsImZpbHRlcmluZyIsaSkmJihpPXRoaXMuX2ZpbHRlcihpKSksdGhpcy5zaXplPWkubGVuZ3RoLHIuc29ydE9yZGVycy5sZW5ndGgmJnRoaXMuX2NoZWNrUGF0aHModGhpcy5fc29ydGVycywic29ydGluZyIsaSkmJihpPWkuc29ydCh0aGlzLl9tdWx0aVNvcnQuYmluZCh0aGlzKSkpO2xldCBvPXIucGFnZSpyLnBhZ2VTaXplLGE9bytyLnBhZ2VTaXplLHM9aS5zbGljZShvLGEpO24ocyxpLmxlbmd0aCl9X2NoZWNrUGF0aHMocixuLGkpe2lmKCFpLmxlbmd0aClyZXR1cm4hMTtsZXQgbz0hMDtmb3IobGV0IGEgaW4gcil7bGV0IHM9clthXS5wYXRoO2lmKCFzfHxzLmluZGV4T2YoIi4iKT09PS0xKWNvbnRpbnVlO2xldCBsPXMucmVwbGFjZSgvXC5bXi5dKiQvLCIiKTtEYS5nZXQobCxpWzBdKT09PXZvaWQgMCYmKGNvbnNvbGUud2FybihgUGF0aCAiJHtzfSIgdXNlZCBmb3IgJHtufSBkb2VzIG5vdCBleGlzdCBpbiBhbGwgb2YgdGhlIGl0ZW1zLCAke259IGlzIGRpc2FibGVkLmApLG89ITEpfXJldHVybiBvfV9tdWx0aVNvcnQocixuKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAoaT0+aS5kaXJlY3Rpb249PT0iYXNjIj90aGlzLl9jb21wYXJlKERhLmdldChpLnBhdGgsciksRGEuZ2V0KGkucGF0aCxuKSk6aS5kaXJlY3Rpb249PT0iZGVzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLG4pLERhLmdldChpLnBhdGgscikpOjApLnJlZHVjZSgoaSxvKT0+aXx8bywwKX1fbm9ybWFsaXplRW1wdHlWYWx1ZShyKXtyZXR1cm5bdm9pZCAwLG51bGxdLmluZGV4T2Yocik+PTA/IiI6aXNOYU4ocik/ci50b1N0cmluZygpOnJ9X2NvbXBhcmUocixuKXtyZXR1cm4gcj10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKHIpLG49dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShuKSxyPG4/LTE6cj5uPzE6MH1fZmlsdGVyKHIpe3JldHVybiByLmZpbHRlcihuPT50aGlzLl9maWx0ZXJzLmZpbHRlcihpPT57bGV0IG89dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShEYS5nZXQoaS5wYXRoLG4pKSxhPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoaS52YWx1ZSkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBvLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEpPT09LTF9KS5sZW5ndGg9PT0wKX19O3ZhciBZY2U9ZT0+Y2xhc3MgZXh0ZW5kcyB5aChlKXtyZWFkeSgpe3N1cGVyLnJlYWR5KCk7bGV0IHI9dGhpcy4kLnNjcm9sbGVyO0VtKHIsInRyYWNrIix0aGlzLl9vbkhlYWRlclRyYWNrLmJpbmQodGhpcykpLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixuPT5yLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikmJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PSJyZXNpemUtaGFuZGxlIiYmbi5wcmV2ZW50RGVmYXVsdCgpKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsbj0+bi50YXJnZXQuZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSl9X29uSGVhZGVyVHJhY2socil7bGV0IG49ci50YXJnZXQ7aWYobi5nZXRBdHRyaWJ1dGUoInBhcnQiKT09PSJyZXNpemUtaGFuZGxlIil7bGV0IG89bi5wYXJlbnRFbGVtZW50Ll9jb2x1bW47Zm9yKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO28ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI7KW89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoby5fY2hpbGRDb2x1bW5zLDApLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gbC5fb3JkZXItYy5fb3JkZXJ9KS5maWx0ZXIoZnVuY3Rpb24obCl7cmV0dXJuIWwuaGlkZGVufSkucG9wKCk7bGV0IGE9QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0icm93Il06bGFzdC1jaGlsZCBbcGFydH49ImNlbGwiXScpKSxzPWEuZmlsdGVyKGw9PmwuX2NvbHVtbj09PW8pWzBdO2lmKHMub2Zmc2V0V2lkdGgpe2xldCBsPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLGM9MTArcGFyc2VJbnQobC5wYWRkaW5nTGVmdCkrcGFyc2VJbnQobC5wYWRkaW5nUmlnaHQpK3BhcnNlSW50KGwuYm9yZGVyTGVmdFdpZHRoKStwYXJzZUludChsLmJvcmRlclJpZ2h0V2lkdGgpK3BhcnNlSW50KGwubWFyZ2luTGVmdCkrcGFyc2VJbnQobC5tYXJnaW5SaWdodCksdT1zLm9mZnNldFdpZHRoKyh0aGlzLl9faXNSVEw/cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXIuZGV0YWlsLng6ci5kZXRhaWwueC1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KTtvLndpZHRoPU1hdGgubWF4KGMsdSkrInB4IixvLmZsZXhHcm93PTB9YS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX2NvbHVtbi5fb3JkZXItYy5fY29sdW1uLl9vcmRlcn0pLmZvckVhY2goZnVuY3Rpb24obCxjLHUpe2M8dS5pbmRleE9mKHMpJiYobC5fY29sdW1uLndpZHRoPWwub2Zmc2V0V2lkdGgrInB4IixsLl9jb2x1bW4uZmxleEdyb3c9MCl9KSxyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciLCExLHRoaXMuJC5zY3JvbGxlciksdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlc2l6ZSIse2RldGFpbDp7cmVzaXplZENvbHVtbjpvfX0pKSksdGhpcy5fcmVzaXplSGFuZGxlcigpfX19O3ZhciBqY2U9Y2xhc3MgWGNle2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmdyaWQ9dCx0aGlzLnBhcmVudENhY2hlPXIsdGhpcy5wYXJlbnRJdGVtPW4sdGhpcy5pdGVtQ2FjaGVzPXt9LHRoaXMuaXRlbXM9e30sdGhpcy5lZmZlY3RpdmVTaXplPTAsdGhpcy5zaXplPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9e319aXNMb2FkaW5nKCl7cmV0dXJuIEJvb2xlYW4oT2JqZWN0LmtleXModGhpcy5wZW5kaW5nUmVxdWVzdHMpLmxlbmd0aHx8T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5maWx0ZXIodD0+dGhpcy5pdGVtQ2FjaGVzW3RdLmlzTG9hZGluZygpKVswXSl9Z2V0SXRlbUZvckluZGV4KHQpe2xldHtjYWNoZTpyLHNjYWxlZEluZGV4Om59PXRoaXMuZ2V0Q2FjaGVBbmRJbmRleCh0KTtyZXR1cm4gci5pdGVtc1tuXX11cGRhdGVTaXplKCl7dGhpcy5lZmZlY3RpdmVTaXplPSF0aGlzLnBhcmVudEl0ZW18fHRoaXMuZ3JpZC5faXNFeHBhbmRlZCh0aGlzLnBhcmVudEl0ZW0pP3RoaXMuc2l6ZStPYmplY3Qua2V5cyh0aGlzLml0ZW1DYWNoZXMpLnJlZHVjZSgodCxyKT0+e2xldCBuPXRoaXMuaXRlbUNhY2hlc1tyXTtyZXR1cm4gbi51cGRhdGVTaXplKCksdCtuLmVmZmVjdGl2ZVNpemV9LDApOjB9ZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh0KXtpZighdGhpcy5pdGVtQ2FjaGVzW3RdKXtsZXQgcj1uZXcgWGNlKHRoaXMuZ3JpZCx0aGlzLHRoaXMuaXRlbXNbdF0pO3RoaXMuaXRlbUNhY2hlc1t0XT1yLHRoaXMuZ3JpZC5fbG9hZFBhZ2UoMCxyKX19Z2V0Q2FjaGVBbmRJbmRleCh0KXtsZXQgcj10LG49T2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89TnVtYmVyKG5baV0pLGE9dGhpcy5pdGVtQ2FjaGVzW29dO2lmKHI8PW8pcmV0dXJue2NhY2hlOnRoaXMsc2NhbGVkSW5kZXg6cn07aWYocjw9bythLmVmZmVjdGl2ZVNpemUpcmV0dXJuIGEuZ2V0Q2FjaGVBbmRJbmRleChyLW8tMSk7ci09YS5lZmZlY3RpdmVTaXplfXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9fX0sJGNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cGFnZVNpemU6e3R5cGU6TnVtYmVyLHZhbHVlOjUwLG9ic2VydmVyOiJfcGFnZVNpemVDaGFuZ2VkIn0sZGF0YVByb3ZpZGVyOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9kYXRhUHJvdmlkZXJDaGFuZ2VkIn0sbG9hZGluZzp7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9jYWNoZTp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpjZSh0aGlzKX19LGl0ZW1JZFBhdGg6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGV4cGFuZGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NpemVDaGFuZ2VkKHNpemUpIiwiX2l0ZW1JZFBhdGhDaGFuZ2VkKGl0ZW1JZFBhdGgpIiwiX2V4cGFuZGVkSXRlbXNDaGFuZ2VkKGV4cGFuZGVkSXRlbXMuKikiXX1fc2l6ZUNoYW5nZWQocil7bGV0IG49ci10aGlzLl9jYWNoZS5zaXplO3RoaXMuX2NhY2hlLnNpemUrPW4sdGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSs9bix0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCl9X2dldEl0ZW0ocixuKXtpZihyPj10aGlzLl9lZmZlY3RpdmVTaXplKXJldHVybjtuLmluZGV4PXI7bGV0e2NhY2hlOmksc2NhbGVkSW5kZXg6b309dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxhPWkuaXRlbXNbb107YT8odGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMSxuKSx0aGlzLl91cGRhdGVJdGVtKG4sYSksdGhpcy5faXNFeHBhbmRlZChhKSYmaS5lbnN1cmVTdWJDYWNoZUZvclNjYWxlZEluZGV4KG8pKToodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsb2FkaW5nIiwhMCxuKSx0aGlzLl9sb2FkUGFnZSh0aGlzLl9nZXRQYWdlRm9ySW5kZXgobyksaSkpfV9leHBhbmRlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7ci5pdGVtIT09dm9pZCAwJiYobj90aGlzLmV4cGFuZEl0ZW0oci5pdGVtKTp0aGlzLmNvbGxhcHNlSXRlbShyLml0ZW0pKX1nZXRJdGVtSWQocil7cmV0dXJuIHRoaXMuaXRlbUlkUGF0aD90aGlzLmdldCh0aGlzLml0ZW1JZFBhdGgscik6cn1faXNFeHBhbmRlZChyKXtyZXR1cm4gdGhpcy5fX2V4cGFuZGVkS2V5cy5oYXModGhpcy5nZXRJdGVtSWQocikpfV9leHBhbmRlZEl0ZW1zQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9lZmZlY3RpdmVTaXplPXRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUsdGhpcy5fYXNzaWduTW9kZWxzKCl9X2l0ZW1JZFBhdGhDaGFuZ2VkKCl7dGhpcy5fX2NhY2hlRXhwYW5kZWRLZXlzKCl9X19jYWNoZUV4cGFuZGVkS2V5cygpe3RoaXMuZXhwYW5kZWRJdGVtcyYmKHRoaXMuX19leHBhbmRlZEtleXM9bmV3IFNldCx0aGlzLmV4cGFuZGVkSXRlbXMuZm9yRWFjaChyPT57dGhpcy5fX2V4cGFuZGVkS2V5cy5hZGQodGhpcy5nZXRJdGVtSWQocikpfSkpfWV4cGFuZEl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKXx8KHRoaXMuZXhwYW5kZWRJdGVtcz1bLi4udGhpcy5leHBhbmRlZEl0ZW1zLHJdKX1jb2xsYXBzZUl0ZW0ocil7dGhpcy5faXNFeHBhbmRlZChyKSYmKHRoaXMuZXhwYW5kZWRJdGVtcz10aGlzLmV4cGFuZGVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZ2V0SW5kZXhMZXZlbChyKXtsZXR7Y2FjaGU6bn09dGhpcy5fY2FjaGUuZ2V0Q2FjaGVBbmRJbmRleChyKSxpPTA7Zm9yKDtuLnBhcmVudENhY2hlOyluPW4ucGFyZW50Q2FjaGUsaSsrO3JldHVybiBpfV9jYW5Qb3B1bGF0ZSgpe3JldHVybiBCb29sZWFuKHRoaXMuX2hhc0RhdGEmJnRoaXMuX2NvbHVtblRyZWUpfV9sb2FkUGFnZShyLG4pe2lmKCFuLnBlbmRpbmdSZXF1ZXN0c1tyXSYmdGhpcy5kYXRhUHJvdmlkZXIpe3RoaXMuX3NldExvYWRpbmcoITApLG4ucGVuZGluZ1JlcXVlc3RzW3JdPSEwO2xldCBpPXtwYWdlOnIscGFnZVNpemU6dGhpcy5wYWdlU2l6ZSxzb3J0T3JkZXJzOnRoaXMuX21hcFNvcnRlcnMoKSxmaWx0ZXJzOnRoaXMuX21hcEZpbHRlcnMoKSxwYXJlbnRJdGVtOm4ucGFyZW50SXRlbX07dGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5kYXRhUHJvdmlkZXIoaSwobyxhKT0+e2EhPT12b2lkIDA/bi5zaXplPWE6aS5wYXJlbnRJdGVtJiYobi5zaXplPW8ubGVuZ3RoKTtsZXQgcz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikubWFwKGw9PmwuX2l0ZW0pO28uZm9yRWFjaCgobCxjKT0+e2xldCB1PXIqdGhpcy5wYWdlU2l6ZStjO24uaXRlbXNbdV09bCx0aGlzLl9pc0V4cGFuZGVkKGwpJiZzLmluZGV4T2YobCk+LTEmJm4uZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleCh1KX0pLHRoaXMuX2hhc0RhdGE9ITAsZGVsZXRlIG4ucGVuZGluZ1JlcXVlc3RzW3JdLHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEsbW8uYWZ0ZXIoMCksKCk9Pnt0aGlzLl9zZXRMb2FkaW5nKCExKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+IWwuaGlkZGVuKS5mb3JFYWNoKGw9Pnt0aGlzLl9jYWNoZS5nZXRJdGVtRm9ySW5kZXgobC5pbmRleCkmJnRoaXMuX2dldEl0ZW0obC5pbmRleCxsKX0pLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpfSksdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fHRoaXMuX2RlYm91bmNlckFwcGx5Q2FjaGVkRGF0YS5mbHVzaCgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCl9KX19X2dldFBhZ2VGb3JJbmRleChyKXtyZXR1cm4gTWF0aC5mbG9vcihyL3RoaXMucGFnZVNpemUpfWNsZWFyQ2FjaGUoKXt0aGlzLl9jYWNoZT1uZXcgamNlKHRoaXMpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PntBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2gobj0+e24uX2luc3RhbmNlJiZuLl9pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KCJpdGVtIix7fSwhMSl9KX0pLHRoaXMuX2NhY2hlLnNpemU9dGhpcy5zaXplfHwwLHRoaXMuX2NhY2hlLnVwZGF0ZVNpemUoKSx0aGlzLl9oYXNEYXRhPSExLHRoaXMuX2Fzc2lnbk1vZGVscygpLCghdGhpcy5fZWZmZWN0aXZlU2l6ZXx8IXRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZCkmJnRoaXMuX2xvYWRQYWdlKDAsdGhpcy5fY2FjaGUpfV9wYWdlU2l6ZUNoYW5nZWQocixuKXtuIT09dm9pZCAwJiZyIT09biYmdGhpcy5jbGVhckNhY2hlKCl9X2NoZWNrU2l6ZSgpe3RoaXMuc2l6ZT09PXZvaWQgMCYmdGhpcy5fZWZmZWN0aXZlU2l6ZT09PTAmJmNvbnNvbGUud2FybigiVGhlIDx2YWFkaW4tZ3JpZD4gbmVlZHMgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiBvcmRlciB0byBkaXNwbGF5IHJvd3MuIFNldCB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRvIHRoZSBgc2l6ZWAgcHJvcGVydHksIG9yIHByb3ZpZGUgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBgZGF0YVByb3ZpZGVyYFx1MjAxOXMgYGNhbGxiYWNrYCBjYWxsLiIpfV9kYXRhUHJvdmlkZXJDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmdGhpcy5jbGVhckNhY2hlKCksciYmdGhpcy5pdGVtcyYmdGhpcy5pdGVtcy5sZW5ndGgmJnRoaXMuX3Njcm9sbFRvSW5kZXgodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpLHRoaXMuX2RlYm91bmNlckNoZWNrU2l6ZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDaGVja1NpemUsbW8uYWZ0ZXIoMmUzKSx0aGlzLl9jaGVja1NpemUuYmluZCh0aGlzKSksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfV9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKXt0aGlzLl9oYXNEYXRhfHx0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1faXRlbXNFcXVhbChyLG4pe3JldHVybiB0aGlzLmdldEl0ZW1JZChyKT09PXRoaXMuZ2V0SXRlbUlkKG4pfV9nZXRJdGVtSW5kZXhJbkFycmF5KHIsbil7bGV0IGk9LTE7cmV0dXJuIG4uZm9yRWFjaCgobyxhKT0+e3RoaXMuX2l0ZW1zRXF1YWwobyxyKSYmKGk9YSl9KSxpfXNjcm9sbFRvSW5kZXgocil7c3VwZXIuc2Nyb2xsVG9JbmRleChyKSwhaXNOYU4ocikmJih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKXx8IXRoaXMuY2xpZW50SGVpZ2h0KSYmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleD1yKX1fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCl7aWYodGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4JiZ0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtsZXQgcj10aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg7ZGVsZXRlIHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCx0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCYmdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wuZmx1c2goKSx0aGlzLnNjcm9sbFRvSW5kZXgocil9fX07dmFyIEtjZT1lPT5jbGFzcyBleHRlbmRzIGV7cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX2FkZE5vZGVPYnNlcnZlcigpfV9oYXNDb2x1bW5Hcm91cHMocil7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIilyZXR1cm4hMDtyZXR1cm4hMX1fZ2V0Q2hpbGRDb2x1bW5zKHIpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2RlcyhyKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KX1fZmxhdHRlbkNvbHVtbkdyb3VwcyhyKXtyZXR1cm4gci5tYXAobj0+bi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj90aGlzLl9nZXRDaGlsZENvbHVtbnMobik6W25dKS5yZWR1Y2UoKG4saSk9Pm4uY29uY2F0KGkpLFtdKX1fZ2V0Q29sdW1uVHJlZSgpe2xldCByPXZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcih0aGlzLl9pc0NvbHVtbkVsZW1lbnQpLG49W107Zm9yKGxldCBpPXI7bi5wdXNoKGkpLCEhdGhpcy5faGFzQ29sdW1uR3JvdXBzKGkpOylpPXRoaXMuX2ZsYXR0ZW5Db2x1bW5Hcm91cHMoaSk7cmV0dXJuIG59X3VwZGF0ZUNvbHVtblRyZWUoKXtsZXQgcj10aGlzLl9nZXRDb2x1bW5UcmVlKCk7dGhpcy5fYXJyYXlFcXVhbHMocix0aGlzLl9jb2x1bW5UcmVlKXx8KHRoaXMuX2NvbHVtblRyZWU9cil9X2FkZE5vZGVPYnNlcnZlcigpe3RoaXMuX29ic2VydmVyPW5ldyB2aCh0aGlzLHI9PntsZXQgbj1yLmFkZGVkTm9kZXMuZmlsdGVyKG89Pm8ubG9jYWxOYW1lPT09InRlbXBsYXRlIiYmby5jbGFzc0xpc3QuY29udGFpbnMoInJvdy1kZXRhaWxzIikpWzBdO24mJnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSE9PW4mJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGU9bik7bGV0IGk9bz0+by5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KS5sZW5ndGg+MDtpZihpKHIuYWRkZWROb2Rlcyl8fGkoci5yZW1vdmVkTm9kZXMpKXtsZXQgbz1yLnJlbW92ZWROb2Rlcy5mbGF0TWFwKHM9PnMuX2FsbENlbGxzKSxhPXM9Pm8uZmlsdGVyKGw9PmwuX2NvbnRlbnQuY29udGFpbnMocykpLmxlbmd0aDt0aGlzLl9fcmVtb3ZlU29ydGVycyh0aGlzLl9zb3J0ZXJzLmZpbHRlcihhKSksdGhpcy5fX3JlbW92ZUZpbHRlcnModGhpcy5fZmlsdGVycy5maWx0ZXIoYSkpLHRoaXMuX3VwZGF0ZUNvbHVtblRyZWUoKX10aGlzLl9kZWJvdW5jZXJDaGVja0ltcG9ydHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tJbXBvcnRzLmJpbmQodGhpcykpLHRoaXMuX2Vuc3VyZUZpcnN0UGFnZUxvYWRlZCgpfSl9X2FycmF5RXF1YWxzKHIsbil7aWYoIXJ8fCFufHxyLmxlbmd0aCE9bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsbz1yLmxlbmd0aDtpPG87aSsrKWlmKHJbaV1pbnN0YW5jZW9mIEFycmF5JiZuW2ldaW5zdGFuY2VvZiBBcnJheSl7aWYoIXRoaXMuX2FycmF5RXF1YWxzKHJbaV0sbltpXSkpcmV0dXJuITF9ZWxzZSBpZihyW2ldIT1uW2ldKXJldHVybiExO3JldHVybiEwfV9jaGVja0ltcG9ydHMoKXtbInZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIsInZhYWRpbi1ncmlkLWZpbHRlciIsInZhYWRpbi1ncmlkLWZpbHRlci1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC10cmVlLXRvZ2dsZSIsInZhYWRpbi1ncmlkLXNlbGVjdGlvbi1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0LWNvbHVtbiIsInZhYWRpbi1ncmlkLXNvcnRlciJdLmZvckVhY2gocj0+e2xldCBuPXRoaXMucXVlcnlTZWxlY3RvcihyKTtuJiYhKG4gaW5zdGFuY2VvZiBtdCkmJmNvbnNvbGUud2FybihgTWFrZSBzdXJlIHlvdSBoYXZlIGltcG9ydGVkIHRoZSByZXF1aXJlZCBtb2R1bGUgZm9yIDwke3J9PiBlbGVtZW50LmApfSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpe0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoInRyIikpLmZvckVhY2gocj0+dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpKX1fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHIpe0FycmF5LmZyb20oci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49ImNlbGwiXTpub3QoW3BhcnR+PSJkZXRhaWxzLWNlbGwiXSknKSkuc29ydCgobixpKT0+bi5fY29sdW1uLl9vcmRlci1pLl9jb2x1bW4uX29yZGVyKS5mb3JFYWNoKChuLGksbyk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0LWNvbHVtbiIsaT09PTAsbiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWNvbHVtbiIsaT09PW8ubGVuZ3RoLTEsbil9KX1faXNDb2x1bW5FbGVtZW50KHIpe3JldHVybiByLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJi9cYmNvbHVtblxiLy50ZXN0KHIubG9jYWxOYW1lKX19O3ZhciBaY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle2dldEV2ZW50Q29udGV4dChyKXtsZXQgbj17fSxpPXIuY29tcG9zZWRQYXRoKCksbz1pW2kuaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO3JldHVybiBvJiYobi5zZWN0aW9uPVsiYm9keSIsImhlYWRlciIsImZvb3RlciIsImRldGFpbHMiXS5maWx0ZXIoYT0+by5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKGEpPi0xKVswXSxvLl9jb2x1bW4mJihuLmNvbHVtbj1vLl9jb2x1bW4pLChuLnNlY3Rpb249PT0iYm9keSJ8fG4uc2VjdGlvbj09PSJkZXRhaWxzIikmJk9iamVjdC5hc3NpZ24obix0aGlzLl9fZ2V0Um93TW9kZWwoby5wYXJlbnRFbGVtZW50KSkpLG59fTt2YXIgSmNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2ZpbHRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmaWx0ZXItY2hhbmdlZCIsdGhpcy5fZmlsdGVyQ2hhbmdlZC5iaW5kKHRoaXMpKX1fZmlsdGVyQ2hhbmdlZChyKXtyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX19hZGRGaWx0ZXIoci50YXJnZXQpLHRoaXMuX19hcHBseUZpbHRlcnMoKX1fX3JlbW92ZUZpbHRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9maWx0ZXJzPXRoaXMuX2ZpbHRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCkpfV9fYWRkRmlsdGVyKHIpe3RoaXMuX2ZpbHRlcnMuaW5kZXhPZihyKT09PS0xJiZ0aGlzLl9maWx0ZXJzLnB1c2gocil9X19hcHBseUZpbHRlcnMoKXt0aGlzLmRhdGFQcm92aWRlciYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLmNsZWFyQ2FjaGUoKX1fbWFwRmlsdGVycygpe3JldHVybiB0aGlzLl9maWx0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLHZhbHVlOnIudmFsdWV9KSl9fTt2YXIgVDA9Y2xhc3MgZXh0ZW5kcyBtdHtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLXRlbXBsYXRpemVyIn1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGF0YUhvc3Q6T2JqZWN0LHRlbXBsYXRlOk9iamVjdCxfdGVtcGxhdGVJbnN0YW5jZXM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wYXJlbnRQYXRoVmFsdWVzOnt2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX0sX2dyaWQ6T2JqZWN0fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZChfdGVtcGxhdGVJbnN0YW5jZXMuKiwgX3BhcmVudFBhdGhWYWx1ZXMuKikiXX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5faW5zdGFuY2VQcm9wcz17ZGV0YWlsc09wZW5lZDohMCxpbmRleDohMCxpdGVtOiEwLHNlbGVjdGVkOiEwLGV4cGFuZGVkOiEwLGxldmVsOiEwfX1jcmVhdGVJbnN0YW5jZSgpe3RoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCk7bGV0IHQ9bmV3IHRoaXMuX1RlbXBsYXRlQ2xhc3Moe30pO3JldHVybiB0aGlzLmFkZEluc3RhbmNlKHQpLHR9YWRkSW5zdGFuY2UodCl7dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuaW5kZXhPZih0KT09PS0xJiYodGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMucHVzaCh0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMubm90aWZ5UGF0aCgiX3RlbXBsYXRlSW5zdGFuY2VzLioiLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzKSkpfXJlbW92ZUluc3RhbmNlKHQpe2xldCByPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk7dGhpcy5zcGxpY2UoIl90ZW1wbGF0ZUluc3RhbmNlcyIsciwxKX1fZW5zdXJlVGVtcGxhdGl6ZWQoKXt0aGlzLl9UZW1wbGF0ZUNsYXNzfHwodGhpcy5fVGVtcGxhdGVDbGFzcz10Yyh0aGlzLnRlbXBsYXRlLHRoaXMse2luc3RhbmNlUHJvcHM6dGhpcy5faW5zdGFuY2VQcm9wcyxwYXJlbnRNb2RlbDohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24odCxyKXt0aGlzLl9mb3J3YXJkUGFyZW50UHJvcCh0LHIpLHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzJiZ0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKHQscixuKXtpZihyPT09ImluZGV4Inx8cj09PSJpdGVtIilyZXR1cm47bGV0IGk9YF9fJHtyfV9fYDtpZih0W2ldPT09bilyZXR1cm47dFtpXT1uO2xldCBvPUFycmF5LmZyb20odGhpcy5fZ3JpZC4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+dGhpcy5fZ3JpZC5faXRlbXNFcXVhbChsLl9pdGVtLHQuaXRlbSkpWzBdO28mJkFycmF5LmZyb20oby5jaGlsZHJlbikuZm9yRWFjaChsPT57bC5faW5zdGFuY2UmJihsLl9pbnN0YW5jZVtpXT1uLGwuX2luc3RhbmNlLm5vdGlmeVBhdGgocixuKSl9KTtsZXQgYT0iaXRlbS4iO2lmKEFycmF5LmlzQXJyYXkodGhpcy5fZ3JpZC5pdGVtcykmJnIuaW5kZXhPZihhKT09PTApe2xldCBsPXRoaXMuX2dyaWQuaXRlbXMuaW5kZXhPZih0Lml0ZW0pLGM9ci5zbGljZShhLmxlbmd0aCk7dGhpcy5fZ3JpZC5ub3RpZnlQYXRoKGBpdGVtcy4ke2x9LiR7Y31gLG4pfWxldCBzPWBfJHtyfUluc3RhbmNlQ2hhbmdlZENhbGxiYWNrYDt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkW3NdJiZ0aGlzLl9ncmlkW3NdKHQsbil9fSkpfV9mb3J3YXJkUGFyZW50UHJvcCh0LHIpe3RoaXMuX3BhcmVudFBhdGhWYWx1ZXNbdF09cix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5mb3JFYWNoKG49Pm4ubm90aWZ5UGF0aCh0LHIpKX1fdGVtcGxhdGVJbnN0YW5jZXNDaGFuZ2VkKHQpe2xldCByLG47aWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcyIpcj0wLG49dGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMubGVuZ3RoO2Vsc2UgaWYodC5wYXRoPT09Il90ZW1wbGF0ZUluc3RhbmNlcy5zcGxpY2VzIilyPXQudmFsdWUuaW5kZXgsbj10LnZhbHVlLmFkZGVkQ291bnQ7ZWxzZSByZXR1cm47T2JqZWN0LmtleXModGhpcy5fcGFyZW50UGF0aFZhbHVlc3x8e30pLmZvckVhY2goaT0+e2ZvcihsZXQgbz1yO288cituO28rKyl0aGlzLl90ZW1wbGF0ZUluc3RhbmNlc1tvXS5zZXQoaSx0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW2ldKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKFQwLmlzLFQwKTt2YXIgUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGV0YWlsc09wZW5lZEl0ZW1zOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcm93RGV0YWlsc1RlbXBsYXRlOk9iamVjdCxyb3dEZXRhaWxzUmVuZGVyZXI6RnVuY3Rpb24sX2RldGFpbHNDZWxsczp7dHlwZTpBcnJheX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChkZXRhaWxzT3BlbmVkSXRlbXMuKiwgX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSIsIl9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChfcm93RGV0YWlsc1RlbXBsYXRlLCByb3dEZXRhaWxzUmVuZGVyZXIpIl19X3Jvd0RldGFpbHNUZW1wbGF0ZU9yUmVuZGVyZXJDaGFuZ2VkKHIsbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSBmb3Igcm93IGRldGFpbHMiKTtpZihyfHxuKXtpZihyJiYhci50ZW1wbGF0aXplcil7bGV0IGk9bmV3IFQwO2kuX2dyaWQ9dGhpcyxpLmRhdGFIb3N0PXRoaXMuZGF0YUhvc3QsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX10aGlzLl9jb2x1bW5UcmVlJiZBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChpPT57aS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpfHwodGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQoaSwhMSkpLGRlbGV0ZSBpLnF1ZXJ5U2VsZWN0b3IoIltwYXJ0fj1kZXRhaWxzLWNlbGxdIikuX2luc3RhbmNlfSksdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMubGVuZ3RoJiYoQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2godGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwsdGhpcyksdGhpcy5fdXBkYXRlKCkpfX1fZGV0YWlsc09wZW5lZEl0ZW1zQ2hhbmdlZChyKXtyLnBhdGg9PT0iZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCJ8fCFyLnZhbHVlfHxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChuPT57dGhpcy5fdG9nZ2xlRGV0YWlsc0NlbGwobixuLl9pdGVtKSx0aGlzLl9hMTF5VXBkYXRlUm93RGV0YWlsc09wZW5lZChuLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkZXRhaWxzLW9wZW5lZCIsdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4uX2l0ZW0pLG4pfSl9X2NvbmZpZ3VyZURldGFpbHNDZWxsKHIpe3Iuc2V0QXR0cmlidXRlKCJwYXJ0IiwiY2VsbCBkZXRhaWxzLWNlbGwiKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIsITAscil9X3RvZ2dsZURldGFpbHNDZWxsKHIsbil7bGV0IGk9ci5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyk7aWYoIWkpcmV0dXJuO2xldCBvPSF0aGlzLl9pc0RldGFpbHNPcGVuZWQobiksYT0hIWkuaGlkZGVuIT09bzsoIWkuX2luc3RhbmNlJiYhaS5fcmVuZGVyZXJ8fGkuaGlkZGVuIT09bykmJihpLmhpZGRlbj1vLG8/ci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iKToodGhpcy5yb3dEZXRhaWxzUmVuZGVyZXI/KGkuX3JlbmRlcmVyPXRoaXMucm93RGV0YWlsc1JlbmRlcmVyLGkuX3JlbmRlcmVyLmNhbGwodGhpcyxpLl9jb250ZW50LHRoaXMse2luZGV4OnIuaW5kZXgsaXRlbTpufSkpOnRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZSYmIWkuX2luc3RhbmNlJiYoaS5faW5zdGFuY2U9dGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCksaS5fY29udGVudC5pbm5lckhUTUw9IiIsaS5fY29udGVudC5hcHBlbmRDaGlsZChpLl9pbnN0YW5jZS5yb290KSx0aGlzLl91cGRhdGVJdGVtKHIsbikpLGNpKCksci5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke2kub2Zmc2V0SGVpZ2h0fXB4YCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSkpLGEmJih0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpKX1fdXBkYXRlRGV0YWlsc0NlbGxIZWlnaHRzKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXTpub3QoW2hpZGRlbl0pJykpLmZvckVhY2gocj0+e3IucGFyZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1ib3R0b20iLGAke3Iub2Zmc2V0SGVpZ2h0fXB4YCl9KX1faXNEZXRhaWxzT3BlbmVkKHIpe3JldHVybiB0aGlzLmRldGFpbHNPcGVuZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zKSE9PS0xfW9wZW5JdGVtRGV0YWlscyhyKXt0aGlzLl9pc0RldGFpbHNPcGVuZWQocil8fCh0aGlzLmRldGFpbHNPcGVuZWRJdGVtcz1bLi4udGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMscl0pfWNsb3NlSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpJiYodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9dGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMuZmlsdGVyKG49PiF0aGlzLl9pdGVtc0VxdWFsKG4scikpKX1fZGV0YWlsc09wZW5lZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLm9wZW5JdGVtRGV0YWlscyhyLml0ZW0pOnRoaXMuY2xvc2VJdGVtRGV0YWlscyhyLml0ZW0pfX07dmFyIHpjdD17U0NST0xMSU5HOjUwMCxJR05PUkVfV0hFRUw6NTAwfSx0dWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfZnJvemVuQ2VsbHM6e3R5cGU6QXJyYXksdmFsdWU6KCk9PltdfSxfcm93V2l0aEZvY3VzZWRFbGVtZW50OkVsZW1lbnQsX2RlbHRhWUFjYzp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3VzZVN0aWNreTp7dHlwZTpCb29sZWFuLHZhbHVlOndpbmRvdy5DU1MmJndpbmRvdy5DU1Muc3VwcG9ydHMmJih3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpfHx3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsIi13ZWJraXQtc3RpY2t5IikpfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQoX3ZpZXdwb3J0SGVpZ2h0KSJdfXNldCBfc2Nyb2xsVG9wKHIpe3RoaXMuJC50YWJsZS5zY3JvbGxUb3A9cn1nZXQgX3Njcm9sbFRvcCgpe3JldHVybiB0aGlzLiQudGFibGUuc2Nyb2xsVG9wfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY3JvbGxMaW5lSGVpZ2h0PXRoaXMuX2dldFNjcm9sbExpbmVIZWlnaHQoKX1fZ2V0U2Nyb2xsTGluZUhlaWdodCgpe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUuZm9udFNpemU9ImluaXRpYWwiLHIuc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKTtsZXQgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKS5mb250U2l6ZTtyZXR1cm4gZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChyKSxuP3dpbmRvdy5wYXJzZUludChuKTp2b2lkIDB9X3Njcm9sbFZpZXdwb3J0SGVpZ2h0VXBkYXRlZChyKXt0aGlzLl9zY3JvbGxQYWdlSGVpZ2h0PXItdGhpcy4kLmhlYWRlci5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5jbGllbnRIZWlnaHQtdGhpcy5fc2Nyb2xsTGluZUhlaWdodH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLm91dGVyc2Nyb2xsZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zY3JvbGxUYXJnZXQ9dGhpcy4kLnRhYmxlLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuX29uV2hlZWwpLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixyPT57bGV0IG49ci5jb21wb3NlZFBhdGgoKS5pbmRleE9mKHRoaXMuJC5pdGVtcyk7dGhpcy5fcm93V2l0aEZvY3VzZWRFbGVtZW50PXIuY29tcG9zZWRQYXRoKClbbi0xXX0pLHRoaXMuJC5pdGVtcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsKCk9PnRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD12b2lkIDApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PnRoaXMuX19tb3VzZURvd249ITApLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT57dGhpcy5fX21vdXNlRG93bj0hMSx0aGlzLl9fcGVuZGluZ1Jlb3JkZXImJih0aGlzLl9fcGVuZGluZ1Jlb3JkZXI9ITEsc2V0VGltZW91dCgoKT0+dGhpcy5fcmVvcmRlclJvd3MoKSx6Y3QuU0NST0xMSU5HKSl9KX1zY3JvbGxUb0luZGV4KHIpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT5zdXBlci5zY3JvbGxUb0luZGV4KHIpKX1fb25XaGVlbChyKXtpZihyLmN0cmxLZXl8fHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci50YXJnZXQsci5kZWx0YVgsci5kZWx0YVkpKXJldHVybjtsZXQgbj10aGlzLiQudGFibGUsaT1yLmRlbHRhWTtpZihyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/aSo9dGhpcy5fc2Nyb2xsTGluZUhlaWdodDpyLmRlbHRhTW9kZT09PVdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0UmJihpKj10aGlzLl9zY3JvbGxQYWdlSGVpZ2h0KSx0aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lKXt0aGlzLl9kZWx0YVlBY2MrPWksci5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pKz10aGlzLl9kZWx0YVlBY2MsdGhpcy5fZGVsdGFZQWNjPTAsdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZT0hMCx0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldoZWVsQW5pbWF0aW9uRnJhbWUsTmksKCk9PnRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITEpO2xldCBvPU1hdGguYWJzKHIuZGVsdGFYKStNYXRoLmFicyhpKTt0aGlzLl9jYW5TY3JvbGwobixyLmRlbHRhWCxpKT8oci5wcmV2ZW50RGVmYXVsdCgpLG4uc2Nyb2xsVG9wKz1pLG4uc2Nyb2xsTGVmdCs9ci5kZWx0YVgsdGhpcy5fc2Nyb2xsSGFuZGxlcigpLHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITAsdGhpcy5faWdub3JlTmV3V2hlZWw9ITAsdGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWw9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VySWdub3JlTmV3V2hlZWwsbW8uYWZ0ZXIoemN0LklHTk9SRV9XSEVFTCksKCk9PnRoaXMuX2lnbm9yZU5ld1doZWVsPSExKSk6dGhpcy5faGFzUmVzaWR1YWxNb21lbnR1bSYmbzw9dGhpcy5fcHJldmlvdXNNb21lbnR1bXx8dGhpcy5faWdub3JlTmV3V2hlZWw/ci5wcmV2ZW50RGVmYXVsdCgpOm8+dGhpcy5fcHJldmlvdXNNb21lbnR1bSYmKHRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW09ITEpLHRoaXMuX3ByZXZpb3VzTW9tZW50dW09b31faGFzU2Nyb2xsZWRBbmNlc3RvcihyLG4saSl7aWYoci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IilyZXR1cm4hMTtpZih0aGlzLl9jYW5TY3JvbGwocixuLGkpJiZbImF1dG8iLCJzY3JvbGwiXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUocikub3ZlcmZsb3cpIT09LTEpcmV0dXJuITA7aWYociE9PXRoaXMmJnIucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5faGFzU2Nyb2xsZWRBbmNlc3RvcihyLnBhcmVudEVsZW1lbnQsbixpKX1fY2FuU2Nyb2xsKHIsbixpKXtyZXR1cm4gaT4wJiZyLnNjcm9sbFRvcDxyLnNjcm9sbEhlaWdodC1yLm9mZnNldEhlaWdodHx8aTwwJiZyLnNjcm9sbFRvcD4wfHxuPjAmJnIuc2Nyb2xsTGVmdDxyLnNjcm9sbFdpZHRoLXIub2Zmc2V0V2lkdGh8fG48MCYmci5zY3JvbGxMZWZ0PjB9X3NjaGVkdWxlU2Nyb2xsaW5nKCl7dGhpcy5fc2Nyb2xsaW5nRnJhbWV8fCh0aGlzLl9zY3JvbGxpbmdGcmFtZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMCx0aGlzLiQuc2Nyb2xsZXIpKSksdGhpcy5fZGVib3VuY2VTY3JvbGxpbmc9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VTY3JvbGxpbmcsbW8uYWZ0ZXIoemN0LlNDUk9MTElORyksKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zY3JvbGxpbmdGcmFtZSksZGVsZXRlIHRoaXMuX3Njcm9sbGluZ0ZyYW1lLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2Nyb2xsaW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuX3Jlb3JkZXJSb3dzKCl9KX1fYWZ0ZXJTY3JvbGwoKXt0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKSx0aGlzLmhhc0F0dHJpYnV0ZSgicmVvcmRlcmluZyIpfHx0aGlzLl9zY2hlZHVsZVNjcm9sbGluZygpLHRoaXMuX3VwZGF0ZU92ZXJmbG93KCl9X3VwZGF0ZU92ZXJmbG93KCl7bGV0IHI9IiIsbj10aGlzLiQudGFibGU7bi5zY3JvbGxUb3A8bi5zY3JvbGxIZWlnaHQtbi5jbGllbnRIZWlnaHQmJihyKz0iIGJvdHRvbSIpLG4uc2Nyb2xsVG9wPjAmJihyKz0iIHRvcCIpLG4uc2Nyb2xsTGVmdDxuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgmJihyKz0iIHJpZ2h0Iiksbi5zY3JvbGxMZWZ0PjAmJihyKz0iIGxlZnQiKSx0aGlzLl9kZWJvdW5jZU92ZXJmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlT3ZlcmZsb3csTmksKCk9PntsZXQgaT1yLnRyaW0oKTtpLmxlbmd0aD4wJiZ0aGlzLmdldEF0dHJpYnV0ZSgib3ZlcmZsb3ciKSE9PWk/dGhpcy5zZXRBdHRyaWJ1dGUoIm92ZXJmbG93IixpKTppLmxlbmd0aD09MCYmdGhpcy5oYXNBdHRyaWJ1dGUoIm92ZXJmbG93IikmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJvdmVyZmxvdyIpfSl9X3Jlb3JkZXJSb3dzKCl7aWYodGhpcy5fX21vdXNlRG93bil7dGhpcy5fX3BlbmRpbmdSZW9yZGVyPSEwO3JldHVybn1sZXQgcj10aGlzLiQuaXRlbXMsbj1yLnF1ZXJ5U2VsZWN0b3JBbGwoInRyIik7aWYoIW4ubGVuZ3RoKXJldHVybjtsZXQgaT10aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fdmlkeE9mZnNldCxvPXRoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudHx8QXJyYXkuZnJvbShuKS5maWx0ZXIobD0+IWwuaGlkZGVuKVswXTtpZighbylyZXR1cm47bGV0IGE9by5pbmRleC1pLHM9QXJyYXkuZnJvbShuKS5pbmRleE9mKG8pLWE7aWYocz4wKWZvcihsZXQgbD0wO2w8cztsKyspci5hcHBlbmRDaGlsZChuW2xdKTtlbHNlIGlmKHM8MClmb3IobGV0IGw9bi5sZW5ndGgrcztsPG4ubGVuZ3RoO2wrKylyLmluc2VydEJlZm9yZShuW2xdLG5bMF0pO2lmKHRoaXMuX3NhZmFyaSl7bGV0e3RyYW5zZm9ybTpsfT10aGlzLiQuaGVhZGVyLnN0eWxlO3RoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPSIiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPWwpfX1fZnJvemVuQ2VsbHNDaGFuZ2VkKCl7dGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJDYWNoZUVsZW1lbnRzLGxpLCgpPT57QXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl0nKSkuZm9yRWFjaChmdW5jdGlvbihyKXtyLnN0eWxlLnRyYW5zZm9ybT0iIn0pLHRoaXMuX2Zyb3plbkNlbGxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuJC50YWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJbZnJvemVuXSIpKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpfSksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpfV91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpe3RoaXMuX2Zyb3plbkNlbGxzLmxlbmd0aD4wJiZ0aGlzLl9faXNSVEwmJih0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzPXtzY3JvbGxXaWR0aDp0aGlzLiQudGFibGUuc2Nyb2xsV2lkdGgsY2xpZW50V2lkdGg6dGhpcy4kLnRhYmxlLmNsaWVudFdpZHRofSl9X3VwZGF0ZUxhc3RGcm96ZW4oKXtpZighdGhpcy5fY29sdW1uVHJlZSlyZXR1cm47bGV0IHI9dGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5zbGljZSgwKTtyLnNvcnQoKGksbyk9PmkuX29yZGVyLW8uX29yZGVyKTtsZXQgbj1yLnJlZHVjZSgoaSxvLGEpPT4oby5fbGFzdEZyb3plbj0hMSxvLmZyb3plbiYmIW8uaGlkZGVuP2E6aSksdm9pZCAwKTtuIT09dm9pZCAwJiYocltuXS5fbGFzdEZyb3plbj0hMCl9X3RyYW5zbGF0ZVN0YXRpb25hcnlFbGVtZW50cygpe2xldCByPU1hdGgubWF4KDAsdGhpcy5fc2Nyb2xsTGVmdCksbj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbFRvcCksaT0wLG89MCxhPTA7aWYodGhpcy5fdXNlU3RpY2t5fHwoaT1yLG89bixhPXRoaXMuJC50YWJsZS5jbGllbnRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRIZWlnaHQtdGhpcy4kLmZvb3Rlci5vZmZzZXRUb3ApLHRoaXMuJC5oZWFkZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8pLHRoaXMuJC5mb290ZXIuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2dldFRyYW5zbGF0ZSgtcitpLG8rYSksdGhpcy4kLml0ZW1zLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSwwKSx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCl7bGV0IHM9dGhpcy5fX2lzUlRMP3RoaXMuX19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdCh0aGlzLiQudGFibGUpK3RoaXMuX19zY3JvbGxlck1ldHJpY3MuY2xpZW50V2lkdGgtdGhpcy5fX3Njcm9sbGVyTWV0cmljcy5zY3JvbGxXaWR0aDp0aGlzLl9zY3JvbGxMZWZ0LGw9dGhpcy5fZ2V0VHJhbnNsYXRlKHMsMCk7Zm9yKGxldCBjPTA7Yzx0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg7YysrKXRoaXMuX2Zyb3plbkNlbGxzW2NdLnN0eWxlLnRyYW5zZm9ybT1sfX1fZ2V0VHJhbnNsYXRlKHIsbil7cmV0dXJuYHRyYW5zbGF0ZSgke3J9cHgsICR7bn1weClgfX07dmFyIGV1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMCx2YWx1ZTooKT0+W119fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHNlbGVjdGVkSXRlbXMuKikiXX1faXNTZWxlY3RlZChyKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLl9nZXRJdGVtSW5kZXhJbkFycmF5KHIsdGhpcy5zZWxlY3RlZEl0ZW1zKT4tMX1zZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocil8fCh0aGlzLnNlbGVjdGVkSXRlbXM9Wy4uLnRoaXMuc2VsZWN0ZWRJdGVtcyxyXSl9ZGVzZWxlY3RJdGVtKHIpe3RoaXMuX2lzU2VsZWN0ZWQocikmJih0aGlzLnNlbGVjdGVkSXRlbXM9dGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X3RvZ2dsZUl0ZW0ocil7dGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk9PT0tMT90aGlzLnNlbGVjdEl0ZW0ocik6dGhpcy5kZXNlbGVjdEl0ZW0ocil9X3NlbGVjdGVkSXRlbXNDaGFuZ2VkKHIpe3RoaXMuJC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJihyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcyJ8fHIucGF0aD09PSJzZWxlY3RlZEl0ZW1zLnNwbGljZXMiKSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3VwZGF0ZUl0ZW0obixuLl9pdGVtKX0pfV9zZWxlY3RlZEluc3RhbmNlQ2hhbmdlZENhbGxiYWNrKHIsbil7bj90aGlzLnNlbGVjdEl0ZW0oci5pdGVtKTp0aGlzLmRlc2VsZWN0SXRlbShyLml0ZW0pfX07dmFyIHJ1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211bHRpU29ydDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfc29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3ByZXZpb3VzU29ydGVyczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19fXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInNvcnRlci1jaGFuZ2VkIix0aGlzLl9vblNvcnRlckNoYW5nZWQpfV9vblNvcnRlckNoYW5nZWQocil7bGV0IG49ci50YXJnZXQ7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fdXBkYXRlU29ydGVyKG4pLHRoaXMuX19hcHBseVNvcnRlcnMoKX1fX3JlbW92ZVNvcnRlcnMocil7ci5sZW5ndGghPTAmJih0aGlzLl9zb3J0ZXJzPXRoaXMuX3NvcnRlcnMuZmlsdGVyKG49PnIuaW5kZXhPZihuKTwwKSx0aGlzLm11bHRpU29ydCYmdGhpcy5fX3VwZGF0ZVNvcnRPcmRlcnMoKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCkpfV9fdXBkYXRlU29ydE9yZGVycygpe3RoaXMuX3NvcnRlcnMuZm9yRWFjaCgocixuKT0+ci5fb3JkZXI9dGhpcy5fc29ydGVycy5sZW5ndGg+MT9uOm51bGwsdGhpcyl9X191cGRhdGVTb3J0ZXIocil7aWYoISghci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMuaW5kZXhPZihyKT09PS0xKSl7aWYoci5fb3JkZXI9bnVsbCx0aGlzLm11bHRpU29ydCl0aGlzLl9yZW1vdmVBcnJheUl0ZW0odGhpcy5fc29ydGVycyxyKSxyLmRpcmVjdGlvbiYmdGhpcy5fc29ydGVycy51bnNoaWZ0KHIpLHRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCk7ZWxzZSBpZihyLmRpcmVjdGlvbil7bGV0IG49dGhpcy5fc29ydGVycy5maWx0ZXIoaT0+aSE9cik7dGhpcy5fc29ydGVycz1bcl0sbi5mb3JFYWNoKGk9PntpLl9vcmRlcj1udWxsLGkuZGlyZWN0aW9uPW51bGx9KX19fV9fYXBwbHlTb3J0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmSlNPTi5zdHJpbmdpZnkodGhpcy5fcHJldmlvdXNTb3J0ZXJzKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMuX21hcFNvcnRlcnMoKSkmJnRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuX2ExMXlVcGRhdGVTb3J0ZXJzKCksdGhpcy5fcHJldmlvdXNTb3J0ZXJzPXRoaXMuX21hcFNvcnRlcnMoKX1fbWFwU29ydGVycygpe3JldHVybiB0aGlzLl9zb3J0ZXJzLm1hcChyPT4oe3BhdGg6ci5wYXRoLGRpcmVjdGlvbjpyLmRpcmVjdGlvbn0pKX1fcmVtb3ZlQXJyYXlJdGVtKHIsbil7bGV0IGk9ci5pbmRleE9mKG4pO2k+LTEmJnIuc3BsaWNlKGksMSl9fTt2YXIgbnVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57Y2VsbENsYXNzTmFtZUdlbmVyYXRvcjpGdW5jdGlvbn19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9fY2VsbENsYXNzTmFtZUdlbmVyYXRvckNoYW5nZWQoY2VsbENsYXNzTmFtZUdlbmVyYXRvcikiXX1fX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKCl7dGhpcy5nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKCl9Z2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKS5mb3JFYWNoKHI9PnRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocix0aGlzLl9fZ2V0Um93TW9kZWwocikpKX1fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyhyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2gobz0+aS5jbGFzc0xpc3QucmVtb3ZlKG8pKSx0aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3Ipe2xldCBvPXRoaXMuY2VsbENsYXNzTmFtZUdlbmVyYXRvcihpLl9jb2x1bW4sbik7aS5fX2dlbmVyYXRlZENsYXNzZXM9byYmby5zcGxpdCgiICIpLmZpbHRlcihhPT5hLmxlbmd0aD4wKSxpLl9fZ2VuZXJhdGVkQ2xhc3NlcyYmaS5fX2dlbmVyYXRlZENsYXNzZXMuZm9yRWFjaChhPT5pLmNsYXNzTGlzdC5hZGQoYSkpfX0pfX07dmFyIFRQPXtCRVRXRUVOOiJiZXR3ZWVuIixPTl9UT1A6Im9uLXRvcCIsT05fVE9QX09SX0JFVFdFRU46Im9uLXRvcC1vci1iZXR3ZWVuIixPTl9HUklEOiJvbi1ncmlkIn0sQzA9e09OX1RPUDoib24tdG9wIixBQk9WRToiYWJvdmUiLEJFTE9XOiJiZWxvdyIsRU1QVFk6ImVtcHR5In0saXVlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZHJvcE1vZGU6U3RyaW5nLHJvd3NEcmFnZ2FibGU6Qm9vbGVhbixkcmFnRmlsdGVyOkZ1bmN0aW9uLGRyb3BGaWx0ZXI6RnVuY3Rpb24sX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkOnt2YWx1ZTo1MH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKHJvd3NEcmFnZ2FibGUsIGRyb3BNb2RlLCBkcmFnRmlsdGVyLCBkcm9wRmlsdGVyKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9vbkRyYWdTdGFydC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsdGhpcy5fb25EcmFnRW5kLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsdGhpcy5fb25EcmFnT3Zlci5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIix0aGlzLl9vbkRyYWdMZWF2ZS5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsdGhpcy5fb25Ecm9wLmJpbmQodGhpcykpLHRoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLHI9Pnt0aGlzLmRyb3BNb2RlJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpfSl9X29uRHJhZ1N0YXJ0KHIpe2lmKHRoaXMucm93c0RyYWdnYWJsZSl7bGV0IG49ci50YXJnZXQ7aWYobi5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50IiYmKG49bi5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZS5wYXJlbnROb2RlKSxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpcmV0dXJuO2lmKHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnZ2luZy1yb3dzIiwhMCx0aGlzKSx0aGlzLl9zYWZhcmkpe2xldCBzPW4uc3R5bGUudHJhbnNmb3JtO24uc3R5bGUudG9wPS90cmFuc2xhdGVZXCgoLiopXCkvLmV4ZWMocylbMV0sbi5zdHlsZS50cmFuc2Zvcm09Im5vbmUiLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e24uc3R5bGUudG9wPSIiLG4uc3R5bGUudHJhbnNmb3JtPXN9KX1sZXQgaT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX2lvcz9yLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2Uobik6ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4sci5jbGllbnRYLWkubGVmdCxyLmNsaWVudFktaS50b3ApO2xldCBvPVtuXTt0aGlzLl9pc1NlbGVjdGVkKG4uX2l0ZW0pJiYobz10aGlzLl9fZ2V0Vmlld3BvcnRSb3dzKCkuZmlsdGVyKHM9PnRoaXMuX2lzU2VsZWN0ZWQocy5faXRlbSkpLmZpbHRlcihzPT4hdGhpcy5kcmFnRmlsdGVyfHx0aGlzLmRyYWdGaWx0ZXIodGhpcy5fX2dldFJvd01vZGVsKHMpKSkpLHIuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQiLHRoaXMuX19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKG8pKSxuLnNldEF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IixvLmxlbmd0aD4xP28ubGVuZ3RoOiIiKSx0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tX2dyaWQtZHJhZy1zdGFydC14IjpgJHtyLmNsaWVudFgtaS5sZWZ0KzIwfXB4YCwiLS1fZ3JpZC1kcmFnLXN0YXJ0LXkiOmAke3IuY2xpZW50WS1pLnRvcCsxMH1weGB9KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ3N0YXJ0IiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6IiIsIi0tX2dyaWQtZHJhZy1zdGFydC15IjoiIn0pfSk7bGV0IGE9bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdzdGFydCIse2RldGFpbDp7ZHJhZ2dlZEl0ZW1zOm8ubWFwKHM9PnMuX2l0ZW0pLHNldERyYWdEYXRhOihzLGwpPT5yLmRhdGFUcmFuc2Zlci5zZXREYXRhKHMsbCksc2V0RHJhZ2dlZEl0ZW1zQ291bnQ6cz0+bi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIscyl9fSk7YS5vcmlnaW5hbEV2ZW50PXIsdGhpcy5kaXNwYXRjaEV2ZW50KGEpfX1fb25EcmFnRW5kKHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITEsdGhpcyksci5zdG9wUHJvcGFnYXRpb24oKTtsZXQgbj1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJhZ2VuZCIpO24ub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChuKX1fb25EcmFnTGVhdmUocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX1fb25EcmFnT3ZlcihyKXtpZih0aGlzLmRyb3BNb2RlKXtpZih0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwLHRoaXMuX2RyYWdPdmVySXRlbT12b2lkIDAsdGhpcy5fX2RuZEF1dG9TY3JvbGwoci5jbGllbnRZKSl7dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCk7cmV0dXJufWxldCBuPXIuY29tcG9zZWRQYXRoKCkuZmlsdGVyKGk9PmkubG9jYWxOYW1lPT09InRyIilbMF07aWYoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fHRoaXMuZHJvcE1vZGU9PT1UUC5PTl9HUklEKXRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5FTVBUWTtlbHNlIGlmKCFufHxuLnBhcmVudE5vZGUhPT10aGlzLiQuaXRlbXMpe2lmKG4pcmV0dXJuO2lmKHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOfHx0aGlzLmRyb3BNb2RlPT09VFAuT05fVE9QX09SX0JFVFdFRU4pbj1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PiFpLmhpZGRlbikucG9wKCksdGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XO2Vsc2UgcmV0dXJufWVsc2V7bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLl9kcm9wTG9jYXRpb249QzAuT05fVE9QLHRoaXMuZHJvcE1vZGU9PT1UUC5CRVRXRUVOKXtsZXQgbz1yLmNsaWVudFktaS50b3A8aS5ib3R0b20tci5jbGllbnRZO3RoaXMuX2Ryb3BMb2NhdGlvbj1vP0MwLkFCT1ZFOkMwLkJFTE9XfWVsc2UgdGhpcy5kcm9wTW9kZT09PVRQLk9OX1RPUF9PUl9CRVRXRUVOJiYoci5jbGllbnRZLWkudG9wPGkuaGVpZ2h0LzM/dGhpcy5fZHJvcExvY2F0aW9uPUMwLkFCT1ZFOnIuY2xpZW50WS1pLnRvcD5pLmhlaWdodC8zKjImJih0aGlzLl9kcm9wTG9jYXRpb249QzAuQkVMT1cpKX1pZihuJiZuLmhhc0F0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIpKXt0aGlzLl9kcm9wTG9jYXRpb249dm9pZCAwO3JldHVybn1yLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKSx0aGlzLl9kcm9wTG9jYXRpb249PT1DMC5FTVBUWT90aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdvdmVyIiwhMCx0aGlzKTpuPyh0aGlzLl9kcmFnT3Zlckl0ZW09bi5faXRlbSxuLmdldEF0dHJpYnV0ZSgiZHJhZ292ZXIiKSE9PXRoaXMuX2Ryb3BMb2NhdGlvbiYmbi5zZXRBdHRyaWJ1dGUoImRyYWdvdmVyIix0aGlzLl9kcm9wTG9jYXRpb24pKTp0aGlzLl9jbGVhckRyYWdTdHlsZXMoKX19X19kbmRBdXRvU2Nyb2xsKHIpe2lmKHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nKXJldHVybiEwO2xldCBuPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tLGk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Asbz1uLXIrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQsYT1yLWkrdGhpcy5fX2RuZEF1dG9TY3JvbGxUaHJlc2hvbGQscz0wO2lmKGE+MD9zPWEqMjpvPjAmJihzPS1vKjIpLHMpe2xldCBsPXRoaXMuJC50YWJsZS5zY3JvbGxUb3A7aWYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9cyxsIT09dGhpcy4kLnRhYmxlLnNjcm9sbFRvcClyZXR1cm4gdGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITAsc2V0VGltZW91dCgoKT0+dGhpcy5fX2RuZEF1dG9TY3JvbGxpbmc9ITEsMjApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSwhMH19X19nZXRWaWV3cG9ydFJvd3MoKXtsZXQgcj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxuPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3JldHVybiBBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGk9PntsZXQgbz1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBvLmJvdHRvbT5yJiZvLnRvcDxufSl9X2NsZWFyRHJhZ1N0eWxlcygpe3RoaXMucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpLEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnIucmVtb3ZlQXR0cmlidXRlKCJkcmFnb3ZlciIpKX1fb25Ecm9wKHIpe2lmKHRoaXMuZHJvcE1vZGUpe3Iuc3RvcFByb3BhZ2F0aW9uKCksci5wcmV2ZW50RGVmYXVsdCgpO2xldCBuPXIuZGF0YVRyYW5zZmVyLnR5cGVzJiZBcnJheS5mcm9tKHIuZGF0YVRyYW5zZmVyLnR5cGVzKS5tYXAobz0+KHt0eXBlOm8sZGF0YTpyLmRhdGFUcmFuc2Zlci5nZXREYXRhKG8pfSkpO3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO2xldCBpPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcm9wIix7YnViYmxlczpyLmJ1YmJsZXMsY2FuY2VsYWJsZTpyLmNhbmNlbGFibGUsZGV0YWlsOntkcm9wVGFyZ2V0SXRlbTp0aGlzLl9kcmFnT3Zlckl0ZW0sZHJvcExvY2F0aW9uOnRoaXMuX2Ryb3BMb2NhdGlvbixkcmFnRGF0YTpufX0pO2kub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChpKX19X19mb3JtYXREZWZhdWx0VHJhbnNmZXJEYXRhKHIpe3JldHVybiByLm1hcChuPT5BcnJheS5mcm9tKG4uY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4mJmkuZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZigiZGV0YWlscy1jZWxsIik9PT0tMSkuc29ydCgoaSxvKT0+aS5fY29sdW1uLl9vcmRlcj5vLl9jb2x1bW4uX29yZGVyPzE6LTEpLm1hcChpPT5pLl9jb250ZW50LnRleHRDb250ZW50LnRyaW0oKSkuZmlsdGVyKGk9PmkpLmpvaW4oIgkiKSkuam9pbihgCmApfV9kcmFnRHJvcEFjY2Vzc0NoYW5nZWQoKXt0aGlzLmZpbHRlckRyYWdBbmREcm9wKCl9ZmlsdGVyRHJhZ0FuZERyb3AoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT57dGhpcy5fZmlsdGVyRHJhZ0FuZERyb3Aocix0aGlzLl9fZ2V0Um93TW9kZWwocikpfSl9X2ZpbHRlckRyYWdBbmREcm9wKHIsbil7bGV0IGk9IXRoaXMucm93c0RyYWdnYWJsZXx8dGhpcy5kcmFnRmlsdGVyJiYhdGhpcy5kcmFnRmlsdGVyKG4pLG89IXRoaXMuZHJvcE1vZGV8fHRoaXMuZHJvcEZpbHRlciYmIXRoaXMuZHJvcEZpbHRlcihuKTtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLm1hcChzPT5zLl9jb250ZW50KS5mb3JFYWNoKHM9PntpP3MucmVtb3ZlQXR0cmlidXRlKCJkcmFnZ2FibGUiKTpzLnNldEF0dHJpYnV0ZSgiZHJhZ2dhYmxlIiwhMCl9KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWctZGlzYWJsZWQiLGksciksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcm9wLWRpc2FibGVkIixvLHIpfX07dmFyIG91ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19oZWFkZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9pdGVtc0ZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX2Zvb3RlckZvY3VzYWJsZTp7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9mb2N1c2FibGVDaGFuZ2VkIn0sX25hdmlnYXRpbmdJc0hpZGRlbjpCb29sZWFuLF9mb2N1c2VkSXRlbUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTowfSxfZm9jdXNlZENvbHVtbk9yZGVyOk51bWJlcixpbnRlcmFjdGluZzp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxyZWFkT25seTohMCxvYnNlcnZlcjoiX2ludGVyYWN0aW5nQ2hhbmdlZCJ9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksISh0aGlzLl9pb3N8fHRoaXMuX2FuZHJvaWQpJiYodGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleURvd24pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX29uS2V5VXApLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25Gb2N1c0luKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkZvY3VzT3V0KSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIsdGhpcy5fb25DZWxsRm9jdXNJbi5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLHRoaXMuX29uQ2VsbEZvY3VzT3V0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5faXNNb3VzZWRvd249ITB9KSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCgpPT50aGlzLl9pc01vdXNlZG93bj0hMSkpfV9mb2N1c2FibGVDaGFuZ2VkKHIsbil7biYmbi5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxyJiZ0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHIpfV9pbnRlcmFjdGluZ0NoYW5nZWQoKXt0aGlzLl91cGRhdGVHcmlkU2VjdGlvbkZvY3VzVGFyZ2V0KHRoaXMuX2hlYWRlckZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9pdGVtc0ZvY3VzYWJsZSksdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9mb290ZXJGb2N1c2FibGUpfV9vbktleURvd24ocil7bGV0IG49ci5rZXksaTtzd2l0Y2gobil7Y2FzZSJBcnJvd1VwIjpjYXNlIkFycm93RG93biI6Y2FzZSJBcnJvd0xlZnQiOmNhc2UiQXJyb3dSaWdodCI6Y2FzZSJQYWdlVXAiOmNhc2UiUGFnZURvd24iOmNhc2UiSG9tZSI6Y2FzZSJFbmQiOmk9Ik5hdmlnYXRpb24iO2JyZWFrO2Nhc2UiRW50ZXIiOmNhc2UiRXNjYXBlIjpjYXNlIkYyIjppPSJJbnRlcmFjdGlvbiI7YnJlYWs7Y2FzZSJUYWIiOmk9IlRhYiI7YnJlYWs7Y2FzZSIgIjppPSJTcGFjZSI7YnJlYWt9dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksdGhpcy5pbnRlcmFjdGluZyYmaSE9PSJJbnRlcmFjdGlvbiImJihpPXZvaWQgMCksaSYmdGhpc1tgX29uJHtpfUtleURvd25gXShyLG4pfV9lbnN1cmVTY3JvbGxlZFRvSW5kZXgocil7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT5pLmluZGV4PT09cilbMF18fHRoaXMuX3Njcm9sbFRvSW5kZXgocil9X29uTmF2aWdhdGlvbktleURvd24ocixuKXt0aGlzLl9zY3JvbGxIYW5kbGVyKCksci5wcmV2ZW50RGVmYXVsdCgpO2Z1bmN0aW9uIGkoQil7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoQi5wYXJlbnROb2RlLmNoaWxkcmVuLEIpfWxldCBvPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXgtdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXgtMSxhPTAscz0wO3N3aXRjaChuKXtjYXNlIkFycm93UmlnaHQiOmE9dGhpcy5fX2lzUlRMPy0xOjE7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOmE9dGhpcy5fX2lzUlRMPzE6LTE7YnJlYWs7Y2FzZSJIb21lIjphPS0xLzAsci5jdHJsS2V5JiYocz0tMS8wKTticmVhaztjYXNlIkVuZCI6YT0xLzAsci5jdHJsS2V5JiYocz0xLzApO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpzPTE7YnJlYWs7Y2FzZSJBcnJvd1VwIjpzPS0xO2JyZWFrO2Nhc2UiUGFnZURvd24iOnM9bzticmVhaztjYXNlIlBhZ2VVcCI6cz0tbzticmVha31sZXQgbD1yLmNvbXBvc2VkUGF0aCgpWzBdLGM9aShsKSx1PXRoaXMuX2VsZW1lbnRNYXRjaGVzKGwsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSxoPWwucGFyZW50Tm9kZSxmPWgucGFyZW50Tm9kZSxwPShmPT09dGhpcy4kLml0ZW1zP3RoaXMuX2VmZmVjdGl2ZVNpemU6Zi5jaGlsZHJlbi5sZW5ndGgpLTEsZD1mPT09dGhpcy4kLml0ZW1zP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXghPT12b2lkIDA/dGhpcy5fZm9jdXNlZEl0ZW1JbmRleDpoLmluZGV4OmkoaCksZz1NYXRoLm1heCgwLE1hdGgubWluKGQrcyxwKSksXz0hMTtpZihmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1oLl9pdGVtLEk9dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGcpO3U/Xz1zPT09MDpfPXM9PT0xJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoQil8fHM9PT0tMSYmZyE9PWQmJnRoaXMuX2lzRGV0YWlsc09wZW5lZChJKSxfIT09dSYmKHM9PT0xJiZffHxzPT09LTEmJiFfKSYmKGc9ZCl9aWYoZiE9PXRoaXMuJC5pdGVtcyl7aWYoZz5kKWZvcig7ZzxwJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZysrO2Vsc2UgaWYoZzxkKWZvcig7Zz4wJiZmLmNoaWxkcmVuW2ddLmhpZGRlbjspZy0tfXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj09PXZvaWQgMCYmKHU/dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPTA6dGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXRoaXMuX2dldENvbHVtbnMoZixkKS5maWx0ZXIoQj0+IUIuaGlkZGVuKVtjXS5fb3JkZXIpO2xldCB5PXRoaXMuX2dldENvbHVtbnMoZixnKS5maWx0ZXIoQj0+IUIuaGlkZGVuKSx4PXkubWFwKEI9PkIuX29yZGVyKS5zb3J0KChCLEkpPT5CLUkpLGI9eC5sZW5ndGgtMSxTPXguaW5kZXhPZih4LnNsaWNlKDApLnNvcnQoKEIsSSk9Pk1hdGguYWJzKEItdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyKS1NYXRoLmFicyhJLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcikpWzBdKSxDPXM9PT0wJiZ1P1M6TWF0aC5tYXgoMCxNYXRoLm1pbihTK2EsYikpO0MhPT1TJiYodGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCksZj09PXRoaXMuJC5pdGVtcyYmdGhpcy5fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KGcpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IGs9eS5yZWR1Y2UoKEIsSSxMKT0+KEJbSS5fb3JkZXJdPUwsQikse30pW3hbQ11dLE89Zj09PXRoaXMuJC5pdGVtcz9BcnJheS5mcm9tKGYuY2hpbGRyZW4pLmZpbHRlcihCPT5CLmluZGV4PT09ZylbMF06Zi5jaGlsZHJlbltnXTtpZighTylyZXR1cm47bGV0IEQ9Xz9BcnJheS5mcm9tKE8uY2hpbGRyZW4pLmZpbHRlcihCPT50aGlzLl9lbGVtZW50TWF0Y2hlcyhCLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpWzBdOk8uY2hpbGRyZW5ba107aWYodGhpcy5fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKEQpLGY9PT10aGlzLiQuaXRlbXMmJih0aGlzLl9mb2N1c2VkSXRlbUluZGV4PWcpLGY9PT10aGlzLiQuaXRlbXMpe2xldCBCPUQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksST10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxMPXRoaXMuJC5oZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO0IuYm90dG9tPkk/KHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPUIuYm90dG9tLUksdGhpcy5fc2Nyb2xsSGFuZGxlcigpKTpCLnRvcDxMJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcC09TC1CLnRvcCx0aGlzLl9zY3JvbGxIYW5kbGVyKCkpfUQuZm9jdXMoKX1fb25JbnRlcmFjdGlvbktleURvd24ocixuKXtsZXQgaT1yLmNvbXBvc2VkUGF0aCgpWzBdLG89aS5sb2NhbE5hbWU9PT0iaW5wdXQiJiYhL14oYnV0dG9ufGNoZWNrYm94fGNvbG9yfGZpbGV8aW1hZ2V8cmFkaW98cmFuZ2V8cmVzZXR8c3VibWl0KSQvaS50ZXN0KGkudHlwZSksYTtzd2l0Y2gobil7Y2FzZSJFbnRlciI6YT10aGlzLmludGVyYWN0aW5nPyFvOiEwO2JyZWFrO2Nhc2UiRXNjYXBlIjphPSExO2JyZWFrO2Nhc2UiRjIiOmE9IXRoaXMuaW50ZXJhY3Rpbmc7YnJlYWt9bGV0e2NlbGw6c309dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7aWYodGhpcy5pbnRlcmFjdGluZyE9PWEmJnMhPT1udWxsKWlmKGEpe2xldCBsPXMuX2NvbnRlbnQucXVlcnlTZWxlY3RvcigiW2ZvY3VzLXRhcmdldF0iKXx8cy5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZDtsJiYoci5wcmV2ZW50RGVmYXVsdCgpLGwuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENvbHVtbk9yZGVyPXZvaWQgMCxzLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITEpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQocixuKXtsZXQgaT1bdGhpcy4kLnRhYmxlLHRoaXMuX2hlYWRlckZvY3VzYWJsZSx0aGlzLl9pdGVtc0ZvY3VzYWJsZSx0aGlzLl9mb290ZXJGb2N1c2FibGUsdGhpcy4kLmZvY3VzZXhpdF0sbz1pLmluZGV4T2Yocik7Zm9yKG8rPW47bz49MCYmbzw9aS5sZW5ndGgtMSYmKCFpW29dfHxpW29dLnBhcmVudE5vZGUuaGlkZGVuKTspbys9bjtyZXR1cm4gaVtvXX1fb25UYWJLZXlEb3duKHIpe2xldCBuPXRoaXMuX3ByZWRpY3RGb2N1c1N0ZXBUYXJnZXQoci5jb21wb3NlZFBhdGgoKVswXSxyLnNoaWZ0S2V5Py0xOjEpO2lmKG49PT10aGlzLiQudGFibGUpdGhpcy4kLnRhYmxlLmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy4kLmZvY3VzZXhpdCl0aGlzLiQuZm9jdXNleGl0LmZvY3VzKCk7ZWxzZSBpZihuPT09dGhpcy5faXRlbXNGb2N1c2FibGUpe2xldCBpPW4sbz10aGlzLl9pdGVtc0ZvY3VzYWJsZS5wYXJlbnROb2RlO2lmKHRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleCh0aGlzLl9mb2N1c2VkSXRlbUluZGV4KSxvLmluZGV4IT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCl7bGV0IGE9QXJyYXkuZnJvbShvLmNoaWxkcmVuKS5pbmRleE9mKHRoaXMuX2l0ZW1zRm9jdXNhYmxlKSxzPUFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIobD0+bC5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpWzBdO3MmJihpPXMuY2hpbGRyZW5bYV0pfXIucHJldmVudERlZmF1bHQoKSxpLmZvY3VzKCl9ZWxzZSByLnByZXZlbnREZWZhdWx0KCksbi5mb2N1cygpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyl9X29uU3BhY2VLZXlEb3duKHIpe3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdOyghbi5fY29udGVudHx8IW4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWFjdGl2YXRlIix7ZGV0YWlsOnttb2RlbDp0aGlzLl9fZ2V0Um93TW9kZWwobi5wYXJlbnRFbGVtZW50KX19KSl9X29uS2V5VXAocil7aWYoIS9eKCB8U3BhY2VCYXIpJC8udGVzdChyLmtleSkpcmV0dXJuO3IucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO2lmKG4uX2NvbnRlbnQmJm4uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCBpPXRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIik7bi5fY29udGVudC5maXJzdEVsZW1lbnRDaGlsZC5jbGljaygpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsaSx0aGlzKX19X29uRm9jdXNJbihyKXt0aGlzLl9pc01vdXNlZG93bnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKTtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpWzBdO249PT10aGlzLiQudGFibGV8fG49PT10aGlzLiQuZm9jdXNleGl0Pyh0aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KG4sbj09PXRoaXMuJC50YWJsZT8xOi0xKS5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSk6dGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uRm9jdXNPdXQocil7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMSx0aGlzKSx0aGlzLl9kZXRlY3RJbnRlcmFjdGluZyhyKX1fb25DZWxsRm9jdXNJbihyKXtsZXR7c2VjdGlvbjpuLGNlbGw6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7dGhpcy5fZGV0ZWN0SW50ZXJhY3RpbmcociksbiYmaSYmKHRoaXMuX2FjdGl2ZVJvd0dyb3VwPW4sdGhpcy4kLmhlYWRlcj09PW4/dGhpcy5faGVhZGVyRm9jdXNhYmxlPWk6dGhpcy4kLml0ZW1zPT09bj90aGlzLl9pdGVtc0ZvY3VzYWJsZT1pOnRoaXMuJC5mb290ZXI9PT1uJiYodGhpcy5fZm9vdGVyRm9jdXNhYmxlPWkpLGkuX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNpbiIse2J1YmJsZXM6ITF9KSksaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1cyIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSkpLHRoaXMuX2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil9X29uQ2VsbEZvY3VzT3V0KHIpe3IuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQudGFibGUpPT09MyYmci5jb21wb3NlZFBhdGgoKVswXS5fY29udGVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1mb2N1c291dCIse2J1YmJsZXM6ITF9KSl9X2RldGVjdEludGVyYWN0aW5nKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCkuc29tZShpPT5pLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTt0aGlzLl9zZXRJbnRlcmFjdGluZyhuKX1fZGV0ZWN0Rm9jdXNlZEl0ZW1JbmRleChyKXtsZXR7c2VjdGlvbjpuLHJvdzppfT10aGlzLl9nZXRHcmlkRXZlbnRMb2NhdGlvbihyKTtuPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1pLmluZGV4KX1fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKXtpZighcilyZXR1cm47bGV0IG49dGhpcy5fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQociksaT10aGlzLmludGVyYWN0aW5nJiZuPT09dGhpcy5fYWN0aXZlUm93R3JvdXA7ci50YWJJbmRleD1pPy0xOjB9X3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHIsbil7ci5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuaGFzQXR0cmlidXRlKCJuYXZpZ2F0aW5nIikmJnRoaXMuX2FjdGl2ZVJvd0dyb3VwPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpLG49PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW4mJih0aGlzLl9uYXZpZ2F0aW5nSXNIaWRkZW49ITEsdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuYXZpZ2F0aW5nIiwhMCx0aGlzKSl9X2dldENvbHVtbnMocixuKXtsZXQgaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xO3JldHVybiByPT09dGhpcy4kLmhlYWRlcj9pPW46cj09PXRoaXMuJC5mb290ZXImJihpPXRoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTEtbiksdGhpcy5fY29sdW1uVHJlZVtpXX1fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKXtpZih0aGlzLiQuaGVhZGVyLmZpcnN0RWxlbWVudENoaWxkJiYodGhpcy5faGVhZGVyRm9jdXNhYmxlPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbilbMF0pLHRoaXMuJC5pdGVtcy5maXJzdEVsZW1lbnRDaGlsZCl7bGV0IHI9dGhpcy5faXRlcmF0ZUl0ZW1zKChuLGkpPT57aWYodGhpcy5fZmlyc3RWaXNpYmxlSW5kZXg9PT1pKXJldHVybiB0aGlzLiQuaXRlbXMuY2hpbGRyZW5bbl19KTtyJiYodGhpcy5faXRlbXNGb2N1c2FibGU9QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5maWx0ZXIobj0+IW4uaGlkZGVuKVswXSl9dGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKX1fc2Nyb2xsSG9yaXpvbnRhbGx5VG9DZWxsKHIpe2lmKHIuaGFzQXR0cmlidXRlKCJmcm96ZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXMociwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKXJldHVybjtsZXQgbj1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ci5wYXJlbnROb2RlLG89QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpLGE9dGhpcy4kLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9YS5sZWZ0LGw9YS5yaWdodDtmb3IobGV0IGM9by0xO2M+PTA7Yy0tKXtsZXQgdT1pLmNoaWxkcmVuW2NdO2lmKCEodS5oYXNBdHRyaWJ1dGUoImhpZGRlbiIpfHx0aGlzLl9lbGVtZW50TWF0Y2hlcyh1LCdbcGFydH49ImRldGFpbHMtY2VsbCJdJykpJiZ1Lmhhc0F0dHJpYnV0ZSgiZnJvemVuIikpe3M9dS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDticmVha319Zm9yKGxldCBjPW8rMTtjPGkuY2hpbGRyZW4ubGVuZ3RoO2MrKyl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtsPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDticmVha319bi5sZWZ0PHMmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLmxlZnQtcykpLG4ucmlnaHQ+bCYmKHRoaXMuJC50YWJsZS5zY3JvbGxMZWZ0Kz1NYXRoLnJvdW5kKG4ucmlnaHQtbCkpfV9lbGVtZW50TWF0Y2hlcyhyLG4pe3JldHVybiByLm1hdGNoZXM/ci5tYXRjaGVzKG4pOkFycmF5LmZyb20oci5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwobikpLmluZGV4T2YocikhPT0tMX1fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocil7bGV0IG49ci5jb21wb3NlZFBhdGgoKSxpPW4uaW5kZXhPZih0aGlzLiQudGFibGUpLG89aT49MT9uW2ktMV06bnVsbCxhPWk+PTI/bltpLTJdOm51bGwscz1pPj0zP25baS0zXTpudWxsO3JldHVybntzZWN0aW9uOm8scm93OmEsY2VsbDpzfX1fZ2V0R3JpZFNlY3Rpb25Gcm9tRm9jdXNUYXJnZXQocil7cmV0dXJuIHI9PT10aGlzLl9oZWFkZXJGb2N1c2FibGU/dGhpcy4kLmhlYWRlcjpyPT09dGhpcy5faXRlbXNGb2N1c2FibGU/dGhpcy4kLml0ZW1zOnI9PT10aGlzLl9mb290ZXJGb2N1c2FibGU/dGhpcy4kLmZvb3RlcjpudWxsfX07ZnVuY3Rpb24gYXVlKGUsdCxyKXtsZXQgbj0xO2UuZm9yRWFjaChpPT57biUxMD09PTAmJm4rKyxpLl9vcmRlcj1yK24qdCxuKyt9KX12YXIgc3VlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9vcmRlckJhc2VTY29wZTp7dHlwZTpOdW1iZXIsdmFsdWU6MWU3fX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl91cGRhdGVPcmRlcnMoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLEVtKHRoaXMsInRyYWNrIix0aGlzLl9vblRyYWNrRXZlbnQpLHRoaXMuX3Jlb3JkZXJHaG9zdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnQ9InJlb3JkZXItZ2hvc3QiXScpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaFN0YXJ0LmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9vblRvdWNoTW92ZS5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9vblRvdWNoRW5kLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX29uQ29udGV4dE1lbnUuYmluZCh0aGlzKSl9X29uQ29udGV4dE1lbnUocil7dGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKSYmci5wcmV2ZW50RGVmYXVsdCgpfV9vblRvdWNoU3RhcnQocil7dGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9vblRyYWNrU3RhcnQoe2RldGFpbDp7eDpyLnRvdWNoZXNbMF0uY2xpZW50WCx5OnIudG91Y2hlc1swXS5jbGllbnRZfX0pfSwxMDApfV9vblRvdWNoTW92ZShyKXt0aGlzLl9kcmFnZ2VkQ29sdW1uJiZyLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCl9X29uVG91Y2hFbmQoKXtjbGVhclRpbWVvdXQodGhpcy5fc3RhcnRUb3VjaFJlb3JkZXJUaW1lb3V0KSx0aGlzLl9vblRyYWNrRW5kKCl9X29uVHJhY2tFdmVudChyKXtpZihyLmRldGFpbC5zdGF0ZT09PSJzdGFydCIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQuaGVhZGVyKS0yXTtpZighaXx8IWkuX2NvbnRlbnR8fGkuX2NvbnRlbnQuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLiQuc2Nyb2xsZXIuaGFzQXR0cmlidXRlKCJjb2x1bW4tcmVzaXppbmciKSlyZXR1cm47dGhpcy5fdG91Y2hEZXZpY2V8fHRoaXMuX29uVHJhY2tTdGFydChyKX1lbHNlIHIuZGV0YWlsLnN0YXRlPT09InRyYWNrIj90aGlzLl9vblRyYWNrKHIpOnIuZGV0YWlsLnN0YXRlPT09ImVuZCImJnRoaXMuX29uVHJhY2tFbmQocil9X29uVHJhY2tTdGFydChyKXtpZighdGhpcy5jb2x1bW5SZW9yZGVyaW5nQWxsb3dlZClyZXR1cm47bGV0IG49ci5jb21wb3NlZFBhdGgmJnIuY29tcG9zZWRQYXRoKCk7aWYobiYmbi5maWx0ZXIobz0+by5oYXNBdHRyaWJ1dGUmJm8uaGFzQXR0cmlidXRlKCJkcmFnZ2FibGUiKSlbMF0pcmV0dXJuO2xldCBpPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImhlYWRlci1jZWxsIik9PT0tMSkpe2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCEwLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW49aS5fY29sdW1uO3RoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudC5jaGlsZEVsZW1lbnRDb3VudD09PTE7KXRoaXMuX2RyYWdnZWRDb2x1bW49dGhpcy5fZHJhZ2dlZENvbHVtbi5wYXJlbnRFbGVtZW50O3RoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCJhbGxvd2VkIiksdGhpcy5fZHJhZ2dlZENvbHVtbi5fcmVvcmRlclN0YXR1cz0iZHJhZ2dpbmciLHRoaXMuX3VwZGF0ZUdob3N0KGkpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIix0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9hdXRvU2Nyb2xsZXIoKX19X29uVHJhY2socil7aWYoIXRoaXMuX2RyYWdnZWRDb2x1bW4pcmV0dXJuO2xldCBuPXRoaXMuX2NlbGxGcm9tUG9pbnQoci5kZXRhaWwueCxyLmRldGFpbC55KTtpZighbilyZXR1cm47bGV0IGk9dGhpcy5fZ2V0VGFyZ2V0Q29sdW1uKG4sdGhpcy5fZHJhZ2dlZENvbHVtbik7dGhpcy5faXNTd2FwQWxsb3dlZCh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpJiZ0aGlzLl9pc1N3YXBwYWJsZUJ5UG9zaXRpb24oaSxyLmRldGFpbC54KSYmdGhpcy5fc3dhcENvbHVtbk9yZGVycyh0aGlzLl9kcmFnZ2VkQ29sdW1uLGkpLHRoaXMuX3VwZGF0ZUdob3N0UG9zaXRpb24oci5kZXRhaWwueCx0aGlzLl90b3VjaERldmljZT9yLmRldGFpbC55LTUwOnIuZGV0YWlsLnkpLHRoaXMuX2xhc3REcmFnQ2xpZW50WD1yLmRldGFpbC54fV9vblRyYWNrRW5kKCl7IXRoaXMuX2RyYWdnZWRDb2x1bW58fCh0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInJlb3JkZXJpbmciLCExLHRoaXMpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9IiIsdGhpcy5fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHRoaXMuX2RyYWdnZWRDb2x1bW4sIiIpLHRoaXMuX2RyYWdnZWRDb2x1bW49bnVsbCx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9bnVsbCx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIix0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2x1bW4tcmVvcmRlciIse2RldGFpbDp7Y29sdW1uczp0aGlzLl9nZXRDb2x1bW5zSW5PcmRlcigpfX0pKSl9X2dldENvbHVtbnNJbk9yZGVyKCl7cmV0dXJuIHRoaXMuX2NvbHVtblRyZWUuc2xpY2UoMCkucG9wKCkuZmlsdGVyKHI9PiFyLmhpZGRlbikuc29ydCgocixuKT0+ci5fb3JkZXItbi5fb3JkZXIpfV9jZWxsRnJvbVBvaW50KHIsbil7cj1yfHwwLG49bnx8MCx0aGlzLl9kcmFnZ2VkQ29sdW1ufHx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCEwLHRoaXMuJC5zY3JvbGxlcik7bGV0IGk9dGhpcy5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQocixuKTtpZih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5vLWNvbnRlbnQtcG9pbnRlci1ldmVudHMiLCExLHRoaXMuJC5zY3JvbGxlciksaSYmaS5fY29sdW1uKXJldHVybiBpfV91cGRhdGVHaG9zdFBvc2l0aW9uKHIsbil7bGV0IGk9dGhpcy5fcmVvcmRlckdob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89ci1pLndpZHRoLzIsYT1uLWkuaGVpZ2h0LzIscz1wYXJzZUludCh0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnR8fDApLGw9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll90b3B8fDApO3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdD1zLShpLmxlZnQtbyksdGhpcy5fcmVvcmRlckdob3N0Ll90b3A9bC0oaS50b3AtYSksdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7dGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fXB4LCAke3RoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfXB4KWB9X3VwZGF0ZUdob3N0KHIpe2xldCBuPXRoaXMuX3Jlb3JkZXJHaG9zdDtuLnRleHRDb250ZW50PXIuX2NvbnRlbnQuaW5uZXJUZXh0O2xldCBpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHIpO3JldHVyblsiYm94U2l6aW5nIiwiZGlzcGxheSIsIndpZHRoIiwiaGVpZ2h0IiwiYmFja2dyb3VuZCIsImFsaWduSXRlbXMiLCJwYWRkaW5nIiwiYm9yZGVyIiwiZmxleC1kaXJlY3Rpb24iLCJvdmVyZmxvdyJdLmZvckVhY2gobz0+bi5zdHlsZVtvXT1pW29dKSxufV91cGRhdGVPcmRlcnMocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHwoclswXS5mb3JFYWNoKGk9PmkuX29yZGVyPTApLGF1ZShyWzBdLHRoaXMuX29yZGVyQmFzZVNjb3BlLDApKX1fc2V0U2libGluZ3NSZW9yZGVyU3RhdHVzKHIsbil7QXJyYXkuZnJvbShyLnBhcmVudE5vZGUuY2hpbGRyZW4pLmZpbHRlcihpPT4vY29sdW1uLy50ZXN0KGkubG9jYWxOYW1lKSYmdGhpcy5faXNTd2FwQWxsb3dlZChpLHIpKS5mb3JFYWNoKGk9PmkuX3Jlb3JkZXJTdGF0dXM9bil9X2F1dG9TY3JvbGxlcigpe2lmKHRoaXMuX2xhc3REcmFnQ2xpZW50WCl7bGV0IHI9dGhpcy5fbGFzdERyYWdDbGllbnRYLXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQrNTAsbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdGhpcy5fbGFzdERyYWdDbGllbnRYKzUwO3I+MD90aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9ci8xMDpuPjAmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdC09bi8xMCksdGhpcy5fc2Nyb2xsSGFuZGxlcigpfXRoaXMuX2RyYWdnZWRDb2x1bW4mJnRoaXMuYXN5bmModGhpcy5fYXV0b1Njcm9sbGVyLDEwKX1faXNTd2FwQWxsb3dlZChyLG4pe2lmKHImJm4pe2xldCBpPXIhPT1uLG89ci5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50LGE9ci5mcm96ZW49PT1uLmZyb3plbjtyZXR1cm4gaSYmbyYmYX19X2lzU3dhcHBhYmxlQnlQb3NpdGlvbihyLG4pe2xldCBpPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpub3QoW2hpZGRlbl0pIFtwYXJ0fj0iY2VsbCJdJykpLmZpbHRlcihzPT5yLmNvbnRhaW5zKHMuX2NvbHVtbikpWzBdLG89dGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yKCJ0cjpub3QoW2hpZGRlbl0pIFtyZW9yZGVyLXN0YXR1cz1kcmFnZ2luZ10iKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGEubGVmdD5vLmxlZnQ/bj5hLnJpZ2h0LW8ud2lkdGg6bjxhLmxlZnQrby53aWR0aH1fc3dhcENvbHVtbk9yZGVycyhyLG4pe2xldCBpPXIuX29yZGVyO3IuX29yZGVyPW4uX29yZGVyLG4uX29yZGVyPWksdGhpcy5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpfV9nZXRUYXJnZXRDb2x1bW4ocixuKXtpZihyJiZuKXtsZXQgaT1yLl9jb2x1bW47Zm9yKDtpLnBhcmVudEVsZW1lbnQhPT1uLnBhcmVudEVsZW1lbnQmJmkhPT10aGlzOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaS5wYXJlbnRFbGVtZW50PT09bi5wYXJlbnRFbGVtZW50P2k6ci5fY29sdW1ufX19O3ZhciBpaHI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntyZXNpemFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuO2xldCByPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gciYmci5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIiYmci5yZXNpemFibGV8fCExfX0sX2hlYWRlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2Zvb3RlclRlbXBsYXRlOnt0eXBlOk9iamVjdH0sZnJvemVuOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGRlbjp7dHlwZTpCb29sZWFufSxoZWFkZXI6e3R5cGU6U3RyaW5nfSx0ZXh0QWxpZ246e3R5cGU6U3RyaW5nfSxfbGFzdEZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXI6TnVtYmVyLF9yZW9yZGVyU3RhdHVzOkJvb2xlYW4sX2VtcHR5Q2VsbHM6QXJyYXksX2hlYWRlckNlbGw6T2JqZWN0LF9mb290ZXJDZWxsOk9iamVjdCxfZ3JpZDpPYmplY3QsaGVhZGVyUmVuZGVyZXI6RnVuY3Rpb24sZm9vdGVyUmVuZGVyZXI6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfd2lkdGhDaGFuZ2VkKHdpZHRoLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9mcm96ZW5DaGFuZ2VkKGZyb3plbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZmxleEdyb3dDaGFuZ2VkKGZsZXhHcm93LCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9wYXRoT3JIZWFkZXJDaGFuZ2VkKHBhdGgsIGhlYWRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKiwgcmVuZGVyZXIsIGhlYWRlclJlbmRlcmVyLCBfYm9keVRlbXBsYXRlLCBfaGVhZGVyVGVtcGxhdGUpIiwiX3RleHRBbGlnbkNoYW5nZWQodGV4dEFsaWduLCBfY2VsbHMuKiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsKSIsIl9vcmRlckNoYW5nZWQoX29yZGVyLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9sYXN0RnJvemVuQ2hhbmdlZChfbGFzdEZyb3plbikiLCJfc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihfYm9keVRlbXBsYXRlLCByZW5kZXJlciwgX2NlbGxzLCBfY2VsbHMuKikiLCJfc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKF9oZWFkZXJUZW1wbGF0ZSwgaGVhZGVyUmVuZGVyZXIsIF9oZWFkZXJDZWxsKSIsIl9zZXRGb290ZXJUZW1wbGF0ZU9yUmVuZGVyZXIoX2Zvb3RlclRlbXBsYXRlLCBmb290ZXJSZW5kZXJlciwgX2Zvb3RlckNlbGwpIiwiX3Jlc2l6YWJsZUNoYW5nZWQocmVzaXphYmxlLCBfaGVhZGVyQ2VsbCkiLCJfcmVvcmRlclN0YXR1c0NoYW5nZWQoX3Jlb3JkZXJTdGF0dXMsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2hpZGRlbkNoYW5nZWQoaGlkZGVuLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9ib2R5VGVtcGxhdGUmJih0aGlzLl9ib2R5VGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5faGVhZGVyVGVtcGxhdGUmJih0aGlzLl9oZWFkZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl9mb290ZXJUZW1wbGF0ZSYmKHRoaXMuX2Zvb3RlclRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLl9ib2R5VGVtcGxhdGV8fHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXIuY2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKHI9PntyLl9jb250ZW50LnBhcmVudE5vZGV8fHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuYXBwZW5kQ2hpbGQoci5fY29udGVudCl9KX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9maW5kSG9zdEdyaWQoKXx8dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlJiZyLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoci5fY29udGVudCl9KX0pLHRoaXMuX2dyaWRWYWx1ZT12b2lkIDB9X2ZpbmRIb3N0R3JpZCgpe2xldCByPXRoaXM7Zm9yKDtyJiYhL152YWFkaW4uKmdyaWQoLXBybyk/JC8udGVzdChyLmxvY2FsTmFtZSk7KXI9ci5hc3NpZ25lZFNsb3Q/ci5hc3NpZ25lZFNsb3QucGFyZW50Tm9kZTpyLnBhcmVudE5vZGU7cmV0dXJuIHJ8fHZvaWQgMH1nZXQgX2dyaWQoKXtyZXR1cm4gdGhpcy5fZ3JpZFZhbHVlfHwodGhpcy5fZ3JpZFZhbHVlPXRoaXMuX2ZpbmRIb3N0R3JpZCgpKSx0aGlzLl9ncmlkVmFsdWV9Z2V0IF9hbGxDZWxscygpe3JldHVybltdLmNvbmNhdCh0aGlzLl9jZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzfHxbXSkuY29uY2F0KHRoaXMuX2hlYWRlckNlbGwpLmNvbmNhdCh0aGlzLl9mb290ZXJDZWxsKS5maWx0ZXIocj0+cil9Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3RlbXBsYXRlT2JzZXJ2ZXI9bmV3IHZoKHRoaXMsKCk9Pnt0aGlzLl9oZWFkZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKSx0aGlzLl9mb290ZXJUZW1wbGF0ZT10aGlzLl9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKSx0aGlzLl9ib2R5VGVtcGxhdGU9dGhpcy5fcHJlcGFyZUJvZHlUZW1wbGF0ZSgpfSl9X3ByZXBhcmVIZWFkZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVGb290ZXJUZW1wbGF0ZSgpe3JldHVybiB0aGlzLl9wcmVwYXJlVGVtcGxhdGl6ZXIodGhpcy5fZmluZFRlbXBsYXRlKCExLCEwKXx8bnVsbCx7fSl9X3ByZXBhcmVCb2R5VGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSgpfHxudWxsKX1fcHJlcGFyZVRlbXBsYXRpemVyKHIsbil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMuX2dyaWQsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkuX2luc3RhbmNlUHJvcHM9bnx8aS5faW5zdGFuY2VQcm9wcyxpLnRlbXBsYXRlPXIsci50ZW1wbGF0aXplcj1pfXJldHVybiByfV9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKXt0aGlzLmhlYWRlclJlbmRlcmVyJiZ0aGlzLl9oZWFkZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5oZWFkZXJSZW5kZXJlcix0aGlzLl9oZWFkZXJDZWxsKSx0aGlzLmZvb3RlclJlbmRlcmVyJiZ0aGlzLl9mb290ZXJDZWxsJiZ0aGlzLl9fcnVuUmVuZGVyZXIodGhpcy5mb290ZXJSZW5kZXJlcix0aGlzLl9mb290ZXJDZWxsKX1fX3J1blJlbmRlcmVyKHIsbixpKXtsZXQgbz1bbi5fY29udGVudCx0aGlzXTtpJiZpLml0ZW0mJm8ucHVzaChpKSxyLmFwcGx5KHRoaXMsbyl9X19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpe2lmKCF0aGlzLmhpZGRlbil7aWYociYmbil0aHJvdyBuZXcgRXJyb3IoIllvdSBzaG91bGQgb25seSB1c2UgZWl0aGVyIGEgcmVuZGVyZXIgb3IgYSB0ZW1wbGF0ZSIpO2kuZm9yRWFjaChvPT57bGV0IGE9dGhpcy5fZ3JpZC5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCk7aWYobilvLl9yZW5kZXJlcj1uLChhLml0ZW18fG49PT10aGlzLmhlYWRlclJlbmRlcmVyfHxuPT09dGhpcy5mb290ZXJSZW5kZXJlcikmJnRoaXMuX19ydW5SZW5kZXJlcihuLG8sYSk7ZWxzZSBpZihvLl90ZW1wbGF0ZSE9PXIpe28uX3RlbXBsYXRlPXIsby5fY29udGVudC5pbm5lckhUTUw9IiIsci50ZW1wbGF0aXplci5fZ3JpZD1yLnRlbXBsYXRpemVyLl9ncmlkfHx0aGlzLl9ncmlkO2xldCBzPXIudGVtcGxhdGl6ZXIuY3JlYXRlSW5zdGFuY2UoKTtvLl9jb250ZW50LmFwcGVuZENoaWxkKHMucm9vdCksby5faW5zdGFuY2U9cyxhLml0ZW0mJm8uX2luc3RhbmNlLnNldFByb3BlcnRpZXMoYSl9fSl9fV9zZXRCb2R5VGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpfV9zZXRIZWFkZXJUZW1wbGF0ZU9yUmVuZGVyZXIocixuLGkpeyhyfHxuKSYmaSYmdGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKX1fc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJih0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixbaV0pLHRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCkpfV9zZWxlY3RGaXJzdFRlbXBsYXRlKHI9ITEsbj0hMSl7cmV0dXJuIHZoLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJoZWFkZXIiKT09PXImJmkuY2xhc3NMaXN0LmNvbnRhaW5zKCJmb290ZXIiKT09PW4pWzBdfV9maW5kVGVtcGxhdGUocixuKXtsZXQgaT10aGlzLl9zZWxlY3RGaXJzdFRlbXBsYXRlKHIsbik7cmV0dXJuIGkmJnRoaXMuZGF0YUhvc3QmJihpLl9yb290RGF0YUhvc3Q9dGhpcy5kYXRhSG9zdC5fcm9vdERhdGFIb3N0fHx0aGlzLmRhdGFIb3N0KSxpfV9mbGV4R3Jvd0NoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmbGV4R3JvdyIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5mbGV4R3Jvdz1yKX1fb3JkZXJDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zdHlsZS5vcmRlcj1yKX1fd2lkdGhDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgid2lkdGgiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUud2lkdGg9ciksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93JiZ0aGlzLl9ncmlkLl9fZm9yY2VSZWZsb3coKX1fZnJvemVuQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoImZyb3plbiIsciksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZyb3plbiIscixuKSksdGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkJiZ0aGlzLl9ncmlkLl9mcm96ZW5DZWxsc0NoYW5nZWQoKX1fbGFzdEZyb3plbkNoYW5nZWQocil7dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoImxhc3QtZnJvemVuIixyLG4pKSx0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJih0aGlzLnBhcmVudEVsZW1lbnQuX2xhc3RGcm96ZW49cil9X3BhdGhPckhlYWRlckNoYW5nZWQocixuLGksbyxhLHMsbCxjLHUpe2xldCBoPW4hPT12b2lkIDA7aWYoIWwmJiF1JiZoJiZpJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCxuKSxyJiZhLnZhbHVlKXtpZighcyYmIWMpe2xldCBmPShwLGQse2l0ZW06Z30pPT50aGlzLl9fc2V0VGV4dENvbnRlbnQocCx0aGlzLmdldChyLGcpKTt0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHZvaWQgMCxmLGEudmFsdWUpfSFsJiYhdSYmIWgmJmkmJm4hPT1udWxsJiZ0aGlzLl9fc2V0VGV4dENvbnRlbnQoaS5fY29udGVudCx0aGlzLl9nZW5lcmF0ZUhlYWRlcihyKSl9aSYmdGhpcy5fZ3JpZC5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkoaS5wYXJlbnRFbGVtZW50KX1fX3NldFRleHRDb250ZW50KHIsbil7ci50ZXh0Q29udGVudCE9PW4mJihyLnRleHRDb250ZW50PW4pfV9nZW5lcmF0ZUhlYWRlcihyKXtyZXR1cm4gci5zdWJzdHIoci5sYXN0SW5kZXhPZigiLiIpKzEpLnJlcGxhY2UoLyhbQS1aXSkvZywiLSQxIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tL2csIiAiKS5yZXBsYWNlKC9eLi8sbj0+bi50b1VwcGVyQ2FzZSgpKX1fdG9nZ2xlQXR0cmlidXRlKHIsbixpKXtpLmhhc0F0dHJpYnV0ZShyKT09PSFuJiYobj9pLnNldEF0dHJpYnV0ZShyLCIiKTppLnJlbW92ZUF0dHJpYnV0ZShyKSl9X3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+bi5zZXRBdHRyaWJ1dGUoInJlb3JkZXItc3RhdHVzIixyKSl9X3Jlc2l6YWJsZUNoYW5nZWQocixuKXtyPT09dm9pZCAwfHxuPT09dm9pZCAwfHxuJiZbbl0uY29uY2F0KHRoaXMuX2VtcHR5Q2VsbHMpLmZvckVhY2goaT0+e2lmKGkpe2xldCBvPWkucXVlcnlTZWxlY3RvcignW3BhcnR+PSJyZXNpemUtaGFuZGxlIl0nKTtpZihvJiZpLnJlbW92ZUNoaWxkKG8pLHIpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc2V0QXR0cmlidXRlKCJwYXJ0IiwicmVzaXplLWhhbmRsZSIpLGkuYXBwZW5kQ2hpbGQoYSl9fX0pfV90ZXh0QWxpZ25DaGFuZ2VkKHIpe2lmKHI9PT12b2lkIDApcmV0dXJuO2lmKFsic3RhcnQiLCJlbmQiLCJjZW50ZXIiXS5pbmRleE9mKHIpPT09LTEpe2NvbnNvbGUud2FybigndGV4dEFsaWduIGNhbiBvbmx5IGJlIHNldCBhcyAic3RhcnQiLCAiZW5kIiBvciAiY2VudGVyIicpO3JldHVybn1sZXQgbjtnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2dyaWQpLmRpcmVjdGlvbj09PSJsdHIiP3I9PT0ic3RhcnQiP249ImxlZnQiOnI9PT0iZW5kIiYmKG49InJpZ2h0Iik6cj09PSJzdGFydCI/bj0icmlnaHQiOnI9PT0iZW5kIiYmKG49ImxlZnQiKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKGk9PntpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1yLGdldENvbXB1dGVkU3R5bGUoaS5fY29udGVudCkudGV4dEFsaWduIT09ciYmKGkuX2NvbnRlbnQuc3R5bGUudGV4dEFsaWduPW4pfSl9X2hpZGRlbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJoaWRkZW4iLHIpLCEhciE9ISF0aGlzLl9wcmV2aW91c0hpZGRlbiYmdGhpcy5fZ3JpZCYmKHI9PT0hMCYmdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bi5fY29udGVudC5wYXJlbnROb2RlJiZuLl9jb250ZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobi5fY29udGVudCl9KSx0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkPXNyLmRlYm91bmNlKHRoaXMuX2dyaWQuX2RlYm91bmNlckhpZGRlbkNoYW5nZWQsTmksKCk9Pnt0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlJiZ0aGlzLl9ncmlkLl9yZW5kZXJDb2x1bW5UcmVlKHRoaXMuX2dyaWQuX2NvbHVtblRyZWUpfSksdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbiYmdGhpcy5fZ3JpZC5fdXBkYXRlTGFzdEZyb3plbigpLHRoaXMuX2dyaWQubm90aWZ5UmVzaXplJiZ0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX2dyaWQuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uJiZ0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpKSx0aGlzLl9wcmV2aW91c0hpZGRlbj1yfX0sZVY9Y2xhc3MgZXh0ZW5kcyBpaHIoWkgobXQpKXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1ncmlkLWNvbHVtbiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3dpZHRoOnt0eXBlOlN0cmluZyx2YWx1ZToiMTAwcHgifSxmbGV4R3Jvdzp7dHlwZTpOdW1iZXIsdmFsdWU6MX0scmVuZGVyZXI6RnVuY3Rpb24scGF0aDp7dHlwZTpTdHJpbmd9LGF1dG9XaWR0aDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfYm9keVRlbXBsYXRlOnt0eXBlOk9iamVjdH0sX2NlbGxzOkFycmF5fX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7amMoInZhYWRpbi1ncmlkIixDaWAKICAgIEBrZXlmcmFtZXMgdmFhZGluLWdyaWQtYXBwZWFyIHsKICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBhbmltYXRpb246IDFtcyB2YWFkaW4tZ3JpZC1hcHBlYXI7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzY3JvbGxlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIHdpZHRoOiBhdXRvOwogICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pIHsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0OwogICAgICBmbGV4LWdyb3c6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIDpob3N0KFtoZWlnaHQtYnktcm93c10pICNzY3JvbGxlciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICAjdGFibGUgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBvdXRsaW5lOiBub25lOwogICAgICAvKiBXb3JrYXJvdW5kIGZvciBhIERlc2t0b3AgU2FmYXJpIGJ1ZzogbmV3IHN0YWNraW5nIGNvbnRleHQgaGVyZSBwcmV2ZW50cyB0aGUgc2Nyb2xsYmFyIGZyb20gZ2V0dGluZyBoaWRkZW4gKi8KICAgICAgei1pbmRleDogMDsKICAgIH0KCiAgICAjaGVhZGVyLAogICAgI2Zvb3RlciB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwb3NpdGlvbjogLXdlYmtpdC1zdGlja3k7CiAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICAjaGVhZGVyIHsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIHRoIHsKICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKICAgIH0KCiAgICAvKiBTYWZhcmkgZG9lc24ndCB3b3JrIHdpdGggImluaGVyaXQiICovCiAgICBbc2FmYXJpXSB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaXRpYWw7CiAgICB9CgogICAgI2Zvb3RlciB7CiAgICAgIGJvdHRvbTogMDsKICAgIH0KCiAgICAjaXRlbXMgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBtYXJnaW46IDA7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtsb2FkaW5nXSBbcGFydH49J2JvZHktY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgb3BhY2l0eTogMDsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIH0KCiAgICAjaXRlbXMgW3BhcnR+PSdyb3cnXTplbXB0eSB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDA7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB9CgogICAgW2hpZGRlbl0gewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW2Zyb3plbl0gewogICAgICB6LWluZGV4OiAyOwogICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgfQoKICAgIFtuby1zY3JvbGxiYXJzXVtzYWZhcmldICN0YWJsZSwKICAgIFtuby1zY3JvbGxiYXJzXVtmaXJlZm94XSAjdGFibGUgewogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC8qIFJlb3JkZXJpbmcgc3R5bGVzICovCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpLAogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSwKICAgICNzY3JvbGxlcltuby1jb250ZW50LXBvaW50ZXItZXZlbnRzXSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBvcGFjaXR5OiAwLjU7CgogICAgICAvKiBQcmV2ZW50IG92ZXJmbG93aW5nIHRoZSBncmlkIGluIEZpcmVmb3ggKi8KICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgewogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBSZXNpemluZyBzdHlsZXMgKi8KICAgIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgei1pbmRleDogMTsKICAgIH0KCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBjb250ZW50OiAnJzsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB3aWR0aDogMzVweDsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgfQoKICAgIFtsYXN0LWNvbHVtbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSwKICAgIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIHJpZ2h0OiAwOwogICAgfQoKICAgICNzY3JvbGxlcltjb2x1bW4tcmVzaXppbmddIHsKICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIH0KCiAgICAvKiBTaXplciBzdHlsZXMgKi8KICAgICNzaXplciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgICNzaXplciBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXVtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgICNzaXplciBbcGFydH49J2NlbGwnXSB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgbGluZS1oZWlnaHQ6IDA7CiAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtaW4taGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIG1heC1oZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ106OmJlZm9yZSB7CiAgICAgIGNvbnRlbnQ6ICctJzsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjaXRlbXMsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2hlYWRlciwKICAgIDpob3N0KFtkaXI9J3J0bCddKSAjZm9vdGVyIHsKICAgICAgbGVmdDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZW9yZGVyLWdob3N0J10gewogICAgICBsZWZ0OiBhdXRvOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10gewogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogYXV0bzsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOwogICAgfQoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtZnJvemVuXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CiAgYCx7bW9kdWxlSWQ6InZhYWRpbi1ncmlkLXN0eWxlcyJ9KTt2YXIgb2hyPSgoKT0+e3RyeXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19KSgpLHJWPWNsYXNzIGV4dGVuZHMgSkgoWEgoJGNlKFdjZShLY2UoR2NlKHR1ZShldWUocnVlKFFjZShvdWUocWNlKEpjZShzdWUoWWNlKFpjZShpdWUobnVlKHRWKSkpKSkpKSkpKSkpKSkpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPGRpdgogICAgICAgIGlkPSJzY3JvbGxlciIKICAgICAgICBzYWZhcmkkPSJbW19zYWZhcmldXSIKICAgICAgICBpb3MkPSJbW19pb3NdXSIKICAgICAgICBsb2FkaW5nJD0iW1tsb2FkaW5nXV0iCiAgICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZCQ9IltbY29sdW1uUmVvcmRlcmluZ0FsbG93ZWRdXSIKICAgICAgPgogICAgICAgIDx0YWJsZSBpZD0idGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbXVsdGlzZWxlY3RhYmxlPSJ0cnVlIiB0YWJpbmRleD0iMCI+CiAgICAgICAgICA8Y2FwdGlvbiBpZD0ic2l6ZXIiIHBhcnQ9InJvdyI+PC9jYXB0aW9uPgogICAgICAgICAgPHRoZWFkIGlkPSJoZWFkZXIiIHJvbGU9InJvd2dyb3VwIj48L3RoZWFkPgogICAgICAgICAgPHRib2R5IGlkPSJpdGVtcyIgcm9sZT0icm93Z3JvdXAiPjwvdGJvZHk+CiAgICAgICAgICA8dGZvb3QgaWQ9ImZvb3RlciIgcm9sZT0icm93Z3JvdXAiPjwvdGZvb3Q+CiAgICAgICAgPC90YWJsZT4KCiAgICAgICAgPGRpdiBwYXJ0PSJyZW9yZGVyLWdob3N0Ij48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGlkPSJmb2N1c2V4aXQiIHRhYmluZGV4PSIwIj48L2Rpdj4KICAgIGB9c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9jb2x1bW5UcmVlQ2hhbmdlZChfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X3NhZmFyaTp7dHlwZTpCb29sZWFuLHZhbHVlOi9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF9pb3M6e3R5cGU6Qm9vbGVhbix2YWx1ZTovaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbXx8bmF2aWdhdG9yLnBsYXRmb3JtPT09Ik1hY0ludGVsIiYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9LF9maXJlZm94Ont0eXBlOkJvb2xlYW4sdmFsdWU6bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImZpcmVmb3giKT4tMX0sX2FuZHJvaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTovYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCl9LF90b3VjaERldmljZTp7dHlwZTpCb29sZWFuLHZhbHVlOm9ocn0saGVpZ2h0QnlSb3dzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfaGVpZ2h0QnlSb3dzQ2hhbmdlZCJ9LF9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix0aGlzLl9vbkFuaW1hdGlvbkVuZCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMucmVjYWxjdWxhdGVDb2x1bW5XaWR0aHMoKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pe3N1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbiksdD09PSJkaXIiJiYodGhpcy5fX2lzUlRMPW49PT0icnRsIix0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpKX1fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCl7cmV0dXJuISFBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHQ9PnQuY2xpZW50SGVpZ2h0KS5sZW5ndGh9X19pdGVtc1JlY2VpdmVkKCl7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQmJiF0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSYmdGhpcy5fX2hhc1Jvd3NXaXRoQ2xpZW50SGVpZ2h0KCkmJih0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCkpfV9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KXt0LmZvckVhY2gocj0+e3Iud2lkdGg9ImF1dG8iLHIuX29yaWdGbGV4R3Jvdz1yLmZsZXhHcm93LHIuZmxleEdyb3c9MH0pLHQuZm9yRWFjaChyPT57ci5fY3VycmVudFdpZHRoPTAsci5fYWxsQ2VsbHMuZm9yRWFjaChuPT57bGV0IGk9bi5vZmZzZXRXaWR0aCsxO3IuX2N1cnJlbnRXaWR0aD1NYXRoLm1heChyLl9jdXJyZW50V2lkdGgsaSl9KX0pLHQuZm9yRWFjaChyPT57ci53aWR0aD1gJHtyLl9jdXJyZW50V2lkdGh9cHhgLHIuZmxleEdyb3c9ci5fb3JpZ0ZsZXhHcm93LHIuX2N1cnJlbnRXaWR0aD12b2lkIDAsci5fb3JpZ0ZsZXhHcm93PXZvaWQgMH0pfXJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl7aWYoISF0aGlzLl9jb2x1bW5UcmVlKWlmKHRoaXMuX2NhY2hlLmlzTG9hZGluZygpKXRoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkPSEwO2Vsc2V7bGV0IHQ9dGhpcy5fZ2V0Q29sdW1ucygpLmZpbHRlcihyPT4hci5oaWRkZW4mJnIuYXV0b1dpZHRoKTt0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRocyh0KX19X2NyZWF0ZVNjcm9sbGVyUm93cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQ7bisrKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO2kuc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93IiksaS5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl91cGRhdGVSb3coaSx0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLCJib2R5IiwhMSwhMCksci5wdXNoKGkpfXJldHVybiB0aGlzLl9jb2x1bW5UcmVlJiZ0aGlzLl9jb2x1bW5UcmVlW3RoaXMuX2NvbHVtblRyZWUubGVuZ3RoLTFdLmZvckVhY2gobj0+bi5pc0Nvbm5lY3RlZCYmbi5ub3RpZnlQYXRoJiZuLm5vdGlmeVBhdGgoIl9jZWxscy4qIixuLl9jZWxscykpLG1ndCh0aGlzLCgpPT57dGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uKCksdGhpcy5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKX0pLHJ9X2dldFJvd1RhcmdldCgpe3JldHVybiB0aGlzLiQuaXRlbXN9X2NyZWF0ZUNlbGwodCl7bGV0IHI9dGhpcy5fY29udGVudEluZGV4PXRoaXMuX2NvbnRlbnRJbmRleCsxfHwwLG49InZhYWRpbi1ncmlkLWNlbGwtY29udGVudC0iK3IsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQiKTtpLnNldEF0dHJpYnV0ZSgic2xvdCIsbik7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtvLmlkPW4ucmVwbGFjZSgiLWNvbnRlbnQtIiwiLSIpLG8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksby5zZXRBdHRyaWJ1dGUoInJvbGUiLHQ9PT0idGQiPyJncmlkY2VsbCI6ImNvbHVtbmhlYWRlciIpO2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNsb3QiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIm5hbWUiLG4pLG8uYXBwZW5kQ2hpbGQoYSksby5fY29udGVudD1pLGkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoKT0+e2lmKHdpbmRvdy5jaHJvbWUpe2xldCBzPSgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixzLCEwKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9ZWxzZSBzZXRUaW1lb3V0KCgpPT57aS5jb250YWlucyh0aGlzLmdldFJvb3ROb2RlKCkuYWN0aXZlRWxlbWVudCl8fG8uZm9jdXMoKX0pfSksb31fdXBkYXRlUm93KHQscixuLGksbyl7bj1ufHwiYm9keSI7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO0FycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChzPT5zLl92YWNhbnQ9ITApLHQuaW5uZXJIVE1MPSIiLHQuaWQhPT0ic2l6ZXIiJiYodC5oaWRkZW49ITApLHIuZmlsdGVyKHM9PiFzLmhpZGRlbikuZm9yRWFjaCgocyxsLGMpPT57bGV0IHU7aWYobj09PSJib2R5Iil7aWYocy5fY2VsbHM9cy5fY2VsbHN8fFtdLHU9cy5fY2VsbHMuZmlsdGVyKGg9PmguX3ZhY2FudClbMF0sdXx8KHU9dGhpcy5fY3JlYXRlQ2VsbCgidGQiKSxzLl9jZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgYm9keS1jZWxsIiksdC5hcHBlbmRDaGlsZCh1KSxsPT09Yy5sZW5ndGgtMSYmKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpKXt0aGlzLl9kZXRhaWxzQ2VsbHM9dGhpcy5fZGV0YWlsc0NlbGxzfHxbXTtsZXQgaD10aGlzLl9kZXRhaWxzQ2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoInRkIik7dGhpcy5fZGV0YWlsc0NlbGxzLmluZGV4T2YoaCk9PT0tMSYmdGhpcy5fZGV0YWlsc0NlbGxzLnB1c2goaCksaC5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKGguX2NvbnRlbnQpLHRoaXMuX2NvbmZpZ3VyZURldGFpbHNDZWxsKGgpLHQuYXBwZW5kQ2hpbGQoaCksdGhpcy5fYTExeVNldFJvd0RldGFpbHNDZWxsKHQsaCksaC5fdmFjYW50PSExfXMubm90aWZ5UGF0aCYmIW8mJnMubm90aWZ5UGF0aCgiX2NlbGxzLioiLHMuX2NlbGxzKX1lbHNle2xldCBoPW49PT0iaGVhZGVyIj8idGgiOiJ0ZCI7aXx8cy5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY29sdW1uLWdyb3VwIj8odT1zW2BfJHtufUNlbGxgXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHNbYF8ke259Q2VsbGBdPXUpOihzLl9lbXB0eUNlbGxzPXMuX2VtcHR5Q2VsbHN8fFtdLHU9cy5fZW1wdHlDZWxscy5maWx0ZXIoZj0+Zi5fdmFjYW50KVswXXx8dGhpcy5fY3JlYXRlQ2VsbChoKSx1Ll9jb2x1bW49cyx0LmFwcGVuZENoaWxkKHUpLHMuX2VtcHR5Q2VsbHMuaW5kZXhPZih1KT09PS0xJiZzLl9lbXB0eUNlbGxzLnB1c2godSkpLHUuc2V0QXR0cmlidXRlKCJwYXJ0IixgY2VsbCAke259LWNlbGxgKSx0aGlzLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KX11Ll9jb250ZW50LnBhcmVudEVsZW1lbnR8fGEuYXBwZW5kQ2hpbGQodS5fY29udGVudCksdS5fdmFjYW50PSExLHUuX2NvbHVtbj1zfSksdGhpcy5hcHBlbmRDaGlsZChhKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW5Gb3JSb3codCl9X191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KHQpe2lmKCF0KXJldHVybjtsZXQgcj1BcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZpbHRlcihuPT57bGV0IGk9bi5fY29sdW1uO2lmKGkuX2VtcHR5Q2VsbHMmJmkuX2VtcHR5Q2VsbHMuaW5kZXhPZihuKT4tMSlyZXR1cm4hMTtpZih0LnBhcmVudEVsZW1lbnQ9PT10aGlzLiQuaGVhZGVyKXtpZihpLmhlYWRlclJlbmRlcmVyfHxpLl9oZWFkZXJUZW1wbGF0ZSlyZXR1cm4hMDtpZihpLmhlYWRlcj09PW51bGwpcmV0dXJuITE7aWYoaS5wYXRofHxpLmhlYWRlciE9PXZvaWQgMClyZXR1cm4hMH1lbHNlIGlmKGkuZm9vdGVyUmVuZGVyZXJ8fGkuX2Zvb3RlclRlbXBsYXRlKXJldHVybiEwfSk7dC5oaWRkZW4hPT0hci5sZW5ndGgmJih0LmhpZGRlbj0hci5sZW5ndGgsdGhpcy5ub3RpZnlSZXNpemUoKSl9X3VwZGF0ZVNjcm9sbGVySXRlbSh0LHIpe3RoaXMuX3ByZXZlbnRTY3JvbGxlclJvdGF0aW5nQ2VsbEZvY3VzKHQsciksdGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZmlyc3QiLHI9PT0wLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgib2RkIixyJTIsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1Jvd2luZGV4KHQsciksdGhpcy5fZ2V0SXRlbShyLHQpKX1fY29sdW1uVHJlZUNoYW5nZWQodCl7dGhpcy5fcmVuZGVyQ29sdW1uVHJlZSh0KSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9X3JlbmRlckNvbHVtblRyZWUodCl7Zm9yKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMV0sbnVsbCwhMSwhMCkpO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPHQubGVuZ3RoOyl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtyLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLHIuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmhlYWRlci5hcHBlbmRDaGlsZChyKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO24uc2V0QXR0cmlidXRlKCJwYXJ0Iiwicm93Iiksbi5zZXRBdHRyaWJ1dGUoInJvbGUiLCJyb3ciKSx0aGlzLiQuZm9vdGVyLmFwcGVuZENoaWxkKG4pfWZvcig7dGhpcy4kLmhlYWRlci5jaGlsZHJlbi5sZW5ndGg+dC5sZW5ndGg7KXRoaXMuJC5oZWFkZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCksdGhpcy4kLmZvb3Rlci5yZW1vdmVDaGlsZCh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkKTtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbbl0sImhlYWRlciIsbj09PXQubGVuZ3RoLTEpKSxBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnRoaXMuX3VwZGF0ZVJvdyhyLHRbdC5sZW5ndGgtMS1uXSwiZm9vdGVyIixuPT09MCkpLHRoaXMuX3VwZGF0ZVJvdyh0aGlzLiQuc2l6ZXIsdFt0Lmxlbmd0aC0xXSksdGhpcy5fcmVzaXplSGFuZGxlcigpLHRoaXMuX2Zyb3plbkNlbGxzQ2hhbmdlZCgpLHRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCksdGhpcy5fYTExeVVwZGF0ZUhlYWRlclJvd3MoKSx0aGlzLl9hMTF5VXBkYXRlRm9vdGVyUm93cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKXt0aGlzLl9maXJlZm94JiYodGhpcy4kLml0ZW1zLnN0eWxlLnBhZGRpbmdCb3R0b209MCx0aGlzLmhlaWdodEJ5Um93c3x8KHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPWAke3RoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0fXB4YCkpLHRoaXMuX2lvcyYmIXdpbmRvdy5DU1Muc3VwcG9ydHMoInBvc2l0aW9uIiwic3RpY2t5IikmJih0aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PSIiLHRoaXMuJC50YWJsZS5zdHlsZS5taW5IZWlnaHQ9IjEwMCUiLHRoaXMuJC50YWJsZS5zdHlsZS5tYXhIZWlnaHQ9IjEwMCUiLHNldFRpbWVvdXQoKCk9PnRoaXMuJC50YWJsZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy4kLnNjcm9sbGVyLm9mZnNldEhlaWdodH1weGApKX1fdXBkYXRlSXRlbSh0LHIpe3QuX2l0ZW09cjtsZXQgbj10aGlzLl9fZ2V0Um93TW9kZWwodCk7dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJzZWxlY3RlZCIsbi5zZWxlY3RlZCx0KSx0aGlzLl9hMTF5VXBkYXRlUm93U2VsZWN0ZWQodCxuLnNlbGVjdGVkKSx0aGlzLl9hMTF5VXBkYXRlUm93TGV2ZWwodCxuLmxldmVsKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImV4cGFuZGVkIixuLmV4cGFuZGVkLHQpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChyKSx0KSwodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX3RvZ2dsZURldGFpbHNDZWxsKHQsciksdGhpcy5fZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcyh0LG4pLHRoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHQsbiksQXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5mb3JFYWNoKGk9PntpZihpLl9yZW5kZXJlcil7bGV0IG89aS5fY29sdW1ufHx0aGlzO2kuX3JlbmRlcmVyLmNhbGwobyxpLl9jb250ZW50LG8sbil9ZWxzZSBpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlLl9fZGV0YWlsc09wZW5lZF9fPW4uZGV0YWlsc09wZW5lZCxpLl9pbnN0YW5jZS5fX3NlbGVjdGVkX189bi5zZWxlY3RlZCxpLl9pbnN0YW5jZS5fX2xldmVsX189bi5sZXZlbCxpLl9pbnN0YW5jZS5fX2V4cGFuZGVkX189bi5leHBhbmRlZCxpLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKG4pKX0pLHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyVXBkYXRlSGVpZ2h0cyxtby5hZnRlcigxKSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9KX1fcmVzaXplSGFuZGxlcigpe3RoaXMuX3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpLHRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHN1cGVyLl9yZXNpemVIYW5kbGVyLCEwKSx0aGlzLl91cGRhdGVTY3JvbGxlck1lYXN1cmVtZW50cygpLHRoaXMuX191cGRhdGVGb290ZXJQb3NpdGlvbmluZygpfV9vbkFuaW1hdGlvbkVuZCh0KXt0LmFuaW1hdGlvbk5hbWUuaW5kZXhPZigidmFhZGluLWdyaWQtYXBwZWFyIik9PT0wJiYodGhpcy5fcmVuZGVyKCksdC5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pdGVtc1JlY2VpdmVkKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fX3Njcm9sbFRvUGVuZGluZ0luZGV4KCksdGhpcy4kLnRhYmxlLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPSJ0b3VjaCJ9KSl9X3RvZ2dsZUF0dHJpYnV0ZSh0LHIsbil7bi5oYXNBdHRyaWJ1dGUodCk9PT0hciYmKHI/bi5zZXRBdHRyaWJ1dGUodCwiIik6bi5yZW1vdmVBdHRyaWJ1dGUodCkpfV9fZ2V0Um93TW9kZWwodCl7cmV0dXJue2luZGV4OnQuaW5kZXgsaXRlbTp0Ll9pdGVtLGxldmVsOnRoaXMuX2dldEluZGV4TGV2ZWwodC5pbmRleCksZXhwYW5kZWQ6dGhpcy5faXNFeHBhbmRlZCh0Ll9pdGVtKSxzZWxlY3RlZDp0aGlzLl9pc1NlbGVjdGVkKHQuX2l0ZW0pLGRldGFpbHNPcGVuZWQ6ISEodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlfHx0aGlzLnJvd0RldGFpbHNSZW5kZXJlcikmJnRoaXMuX2lzRGV0YWlsc09wZW5lZCh0Ll9pdGVtKX19cmVuZGVyKCl7dGhpcy5fY29sdW1uVHJlZSYmKHRoaXMuX2NvbHVtblRyZWUuZm9yRWFjaCh0PT57dC5mb3JFYWNoKHI9PnIuX3JlbmRlckhlYWRlckFuZEZvb3RlcigpKX0pLHRoaXMuX3VwZGF0ZSgpKX1ub3RpZnlSZXNpemUoKXtzdXBlci5ub3RpZnlSZXNpemUoKX1faGVpZ2h0QnlSb3dzQ2hhbmdlZCh0LHIpeyh0fHxyKSYmdGhpcy5ub3RpZnlSZXNpemUoKX1fX2ZvcmNlUmVmbG93KCl7dGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3c9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyRm9yY2VSZWZsb3csTmksKCk9Pnt0aGlzLiQuc2Nyb2xsZXIuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsc2V0VGltZW91dCgoKT0+dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSIiKX0pfX07Y3VzdG9tRWxlbWVudHMuZGVmaW5lKHJWLmlzLHJWKTtmdW5jdGlvbiBsdWUoZSx0KXtyZXR1cm4gRGd0KGUsdCl9dmFyIGMxPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1bj0iIn1fY3N2VXJsKHQscixuKXtyZXR1cm4gcj9NaShuKHQscikse2Zvcm1hdDoiY3N2In0pOiIifV9qc29uVXJsKHQscixuKXtyZXR1cm4gcj9uKHQscik6IiJ9X2Nzdk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uY3N2YDoiIn1fanNvbk5hbWUodCxyKXtyZXR1cm4gcj9gcnVuLSR7cn0tdGFnLSR7dH0uanNvbmA6IiJ9fTtjMS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgIGxhYmVsPSJydW4gdG8gZG93bmxvYWQiCiAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X3J1bn19IgogICAgPgogICAgICA8cGFwZXItbGlzdGJveCBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW3J1bnNdXSI+CiAgICAgICAgICA8cGFwZXItaXRlbSBuby1sYWJlbC1mbG9hdD0idHJ1ZSI+W1tpdGVtXV08L3BhcGVyLWl0ZW0+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5dXSI+CiAgICAgIDxhIGRvd25sb2FkPSJbW19jc3ZOYW1lKHRhZywgX3J1bildXSIgaHJlZj0iW1tfY3N2VXJsKHRhZywgX3J1biwgdXJsRm4pXV0iCiAgICAgICAgPkNTVjwvYQogICAgICA+PCEtLQogICAgICAtLT48YQogICAgICAgIGRvd25sb2FkPSJbW19qc29uTmFtZSh0YWcsIF9ydW4pXV0iCiAgICAgICAgaHJlZj0iW1tfanNvblVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5KU09OPC9hCiAgICAgID4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICB9CiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIHdpZHRoOiAxMDBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIH0KICAgICAgfQogICAgICBhIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAuMmVtOwogICAgICB9CiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBmb250LXNpemU6IDIycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsIl9ydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGMxLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxjMS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjMS5wcm90b3R5cGUsInVybEZuIix2b2lkIDApO2MxPUUoW3l0KCJ0Zi1kb3dubG9hZGVyIildLGMxKTt2YXIgYWhyPTY0LGdsaT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEduPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1udWxsLHRoaXMuX2xvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2lmKG49PW51bGwpe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGRhdGEgZm9yOiIscik7cmV0dXJufWxldCBpPW4ubWFwKGE9Pih7d2FsbF90aW1lOm5ldyBEYXRlKGFbMF0qMWUzKSxzdGVwOmFbMV0sc2NhbGFyOmFbMl19KSksbz10aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHIpO3Quc2V0U2VyaWVzTWV0YWRhdGEobyxyKSx0LnNldFNlcmllc0RhdGEobyxpKX0sdGhpcy5nZXREYXRhTG9hZFVybD0oe3RhZzp0LHJ1bjpyfSk9Pl9lKCkucGx1Z2luUm91dGVGb3JTcmMoInNjYWxhcnMiLCIvc2NhbGFycyIsbmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnQscnVuOnJ9KSksdGhpcy5fZG93bmxvYWRVcmxGbj0odCxyKT0+dGhpcy5nZXREYXRhTG9hZFVybCh7dGFnOnQscnVuOnJ9KSx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PnRoaXMuaW5Db2xhYj90aGlzLl9yZXF1ZXN0RGF0YUdldCh0LHIsbik6dGhpcy5fcmVxdWVzdERhdGFQb3N0KHQscixuKSx0aGlzLl9yZXF1ZXN0RGF0YUdldD0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPU1pKG8se3RhZzphLnRhZyxydW46YS5ydW59KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHMpLnRoZW4obD0+dm9pZCByKHtpdGVtOmEsZGF0YTpsfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fcmVxdWVzdERhdGFQb3N0PSh0LHIsbik9Pnt2YXIgYztsZXQgbz1fZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnNfbXVsdGlydW4iKSxhPW5ldyBNYXA7Zm9yKGxldHt0YWc6dSxydW46aH1vZiB0KXtsZXQgZj1hLmdldCh1KTtmPT1udWxsJiZhLnNldCh1LGY9W10pLGYucHVzaChoKX1sZXQgcz0oYz10aGlzLmJhdGNoU2l6ZSkhPW51bGw/YzphaHIsbD1bXTtmb3IobGV0W3UsaF1vZiBhKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7Zis9cylsLnB1c2goe3RhZzp1LHJ1bnM6aC5zbGljZShmLGYrcyl9KTtQcm9taXNlLmFsbChsLm1hcCgoe3RhZzp1LHJ1bnM6aH0pPT50aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3Qobyx7dGFnOnUscnVuczpofSkudGhlbihmPT57Zm9yKGxldCBwIG9mIGgpe2xldCBkPXt0YWc6dSxydW46cH07T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGYscCk/cih7aXRlbTpkLGRhdGE6ZltwXX0pOnIoe2l0ZW06ZCxkYXRhOm51bGx9KX19KSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fZ2V0RGF0YUxvYWROYW1lPXQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9aXN0LnNsaWNlKCkscj10LmZpbmRJbmRleChuPT5uLnRpdGxlPT0iTmFtZSIpO3JldHVybiB0LnNwbGljZShyLDEse3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT57bGV0IGk9bi5kYXRhc2V0Lm1ldGFkYXRhKCkubWV0YTtyZXR1cm4gdGhpcy5fZ2V0U2VyaWVzRGlzcGxheU5hbWVGcm9tRGF0dW0oaSl9fSksdH0pKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTt0JiZ0LnJlc2V0RG9tYWluKCl9X3VwZGF0ZURvd25sb2FkTGluaygpe3ZhciBuO2xldCB0PXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLmV4cG9ydEFzU3ZnU3RyaW5nKCkscj0obj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDpuLnF1ZXJ5U2VsZWN0b3IoIiNzdmdMaW5rIik7ci5ocmVmPWBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7YnRvYSh0KX1gfV9ydW5zRnJvbURhdGEodCl7cmV0dXJuIHQubWFwKHI9PnIucnVuKX1fZ2V0RGF0YVNlcmllcygpe3JldHVybiB0aGlzLmRhdGFUb0xvYWQubWFwKHQ9PnRoaXMuX2dldFNlcmllc05hbWVGcm9tRGF0dW0odCkpfV9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHtydW46dCxleHBlcmltZW50OnI9e25hbWU6Il9kZWZhdWx0In19KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW3IubmFtZSx0XSl9X2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKHQpe3JldHVybiB0LnJ1bn1fZ2V0Q29sb3JTY2FsZSgpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUhPT1udWxsP3RoaXMuY29sb3JTY2FsZTp7c2NhbGU6dD0+e2xldFsscl09SlNPTi5wYXJzZSh0KTtyZXR1cm4gZm4ocil9fX19O0duLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19nZXRDb2xvclNjYWxlKGNvbG9yU2NhbGUpXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX2dldERhdGFTZXJpZXMoZGF0YVRvTG9hZC4qKV1dIgogICAgICAgIGRhdGEtdG8tbG9hZD0iW1tkYXRhVG9Mb2FkXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC1uYW1lPSJbW19nZXREYXRhTG9hZE5hbWVdXSIKICAgICAgICBnZXQtZGF0YS1sb2FkLXVybD0iW1tnZXREYXRhTG9hZFVybF1dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tyZXF1ZXN0RGF0YV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfbG9hZERhdGFDYWxsYmFja11dIgogICAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICAgIGxvZy1zY2FsZS1hY3RpdmU9IltbX2xvZ1NjYWxlQWN0aXZlXV0iCiAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgdGFnLW1ldGFkYXRhPSJbW3RhZ01ldGFkYXRhXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW190b29sdGlwQ29sdW1uc11dIgogICAgICAgIHRvb2x0aXAtcG9zaXRpb249ImF1dG8iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPHBhcGVyLW1lbnUtYnV0dG9uIG9uLXBhcGVyLWRyb3Bkb3duLW9wZW49Il91cGRhdGVEb3dubG9hZExpbmsiPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi10cmlnZ2VyIgogICAgICAgICAgICBpY29uPSJmaWxlLWRvd25sb2FkIgogICAgICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPgogICAgICAgICAgICAgIDxhIGlkPSJzdmdMaW5rIiBkb3dubG9hZD0iW1t0YWddXS5zdmciPgogICAgICAgICAgICAgICAgRG93bmxvYWQgQ3VycmVudCBDaGFydCBhcyBTVkcKICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLW1lbnUtYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8dGYtZG93bmxvYWRlcgogICAgICAgICAgICBydW5zPSJbW19ydW5zRnJvbURhdGEoZGF0YVRvTG9hZCldXSIKICAgICAgICAgICAgdGFnPSJbW3RhZ11dIgogICAgICAgICAgICB1cmwtZm49IltbX2Rvd25sb2FkVXJsRm5dXSIKICAgICAgICAgID48L3RmLWRvd25sb2FkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgOmhvc3QoW19leHBhbmRlZF0pICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgfQoKICAgICAgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNidXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLmRvd25sb2FkLWxpbmtzIGEgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBhcGVyLW1lbnUtYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CiAgICAgIHBhcGVyLWl0ZW0gYSB7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sR24ucHJvdG90eXBlLCJkYXRhVG9Mb2FkIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEduLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxHbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sR24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic2hvd0Rvd25MaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwic21vb3RoaW5nRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsInNtb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHbi5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEduLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHbi5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEduLnByb3RvdHlwZSwiYmF0Y2hTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxHbi5wcm90b3R5cGUsImluQ29sYWIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfbG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwiZ2V0RGF0YUxvYWRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZG93bmxvYWRVcmxGbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEduLnByb3RvdHlwZSwicmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR24ucHJvdG90eXBlLCJfZ2V0RGF0YUxvYWROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEduLnByb3RvdHlwZSwiX2V4cGFuZGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sR24ucHJvdG90eXBlLCJfbG9nU2NhbGVBY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEduLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0duPUUoW3l0KCJ0Zi1zY2FsYXItY2FyZCIpXSxHbik7dmFyIFZzPWNsYXNzIGV4dGVuZHMgbHVlKFtjV10sbXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlc3Npb25Hcm91cD1udWxsLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fbm9NdWx0aUV4cGVyaW1lbnRzPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntQcm9taXNlLmFsbCh0Lm1hcChpPT57bGV0IG89e2V4cGVyaW1lbnROYW1lOnRoaXMuZXhwZXJpbWVudE5hbWUsc2Vzc2lvbk5hbWU6aS5ydW4sbWV0cmljTmFtZTppLnRhZ307cmV0dXJuIHRoaXMuYmFja2VuZC5saXN0TWV0cmljRXZhbHMobykudGhlbihhPT52b2lkIHIoe2l0ZW06aSxkYXRhOmF9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9jb2xvclNjYWxlPXtzY2FsZTp0PT57bGV0IHI9SlNPTi5wYXJzZSh0KVsxXSxuPXRoaXMuX2luZGV4T2ZTZXNzaW9uLmdldChyKSxpPWlSO3JldHVybiBpWyh0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaCtuKSVpLmxlbmd0aF19fX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5yZWRyYXcuYmluZCh0aGlzKSl9cmVkcmF3KCl7dmFyIHQ7KHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1zY2FsYXItY2FyZCIpLmZvckVhY2gocj0+e3IucmVkcmF3KCl9KX1fc2Vzc2lvbkdyb3VwQ2hhbmdlZCgpe3ZhciB0OyF0aGlzLnNlc3Npb25Hcm91cHx8T2JqZWN0LmtleXModGhpcy5zZXNzaW9uR3JvdXApLmxlbmd0aD09MD8odGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD0wKToodGhpcy5faW5kZXhPZlNlc3Npb249bmV3IE1hcCh0aGlzLnNlc3Npb25Hcm91cC5zZXNzaW9ucy5tYXAoKHIsbik9PltyLm5hbWUsbl0pKSx0aGlzLl9zZXNzaW9uR3JvdXBOYW1lSGFzaD1kY3QodGhpcy5zZXNzaW9uR3JvdXAubmFtZSkpLCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntsZXQgbj1yLGk9bi5nZXQoInRhZyIpO24uc2V0KCJ0YWciLCIiKSxuLnNldCgidGFnIixpKX0pfV9oYXZlTWV0cmljcygpe3JldHVybiB0aGlzLnZpc2libGVTY2hlbWEmJkFycmF5LmlzQXJyYXkodGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zKSYmdGhpcy52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wfV9oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCYmdGhpcy5faGF2ZU1ldHJpY3MoKX1fY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyh0LHIpe3JldHVybiB0PT09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHxyPT09bnVsbD9bXTp0LnNlc3Npb25zLmZpbHRlcihuPT5mMyhuLm1ldHJpY1ZhbHVlcyxyLm5hbWUpIT09dm9pZCAwKS5tYXAobj0+KHt0YWc6ci5uYW1lLHJ1bjpuLm5hbWV9KSl9X2NvbXB1dGVUYWdNZXRhZGF0YSh0KXtyZXR1cm57ZGlzcGxheU5hbWU6UXUodCksZGVzY3JpcHRpb246dC5kZXNjcmlwdGlvbnx8IiJ9fX07VnMudGVtcGxhdGU9UWAKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shc2Vzc2lvbkdyb3VwXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBzZXNzaW9uIGdyb3VwIHNlbGVjdGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2Ugc2VsZWN0IGEgc2Vzc2lvbiBncm91cCB0byBzZWUgaXRzIG1ldHJpYy1ncmFwaHMgaGVyZS48L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2hhdmVNZXRyaWNzKHZpc2libGVTY2hlbWEuKildXSI+CiAgICAgIDxkaXY+CiAgICAgICAgPGgzPk5vIG1ldHJpY3MgYXJlIGVuYWJsZWQ8L2gzPgogICAgICAgIDxwPlBsZWFzZSBlbmFibGUgc29tZSBtZXRyaWNzIHRvIHNlZSBjb250ZW50IGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8ZGl2IGNsYXNzPSJsYXlvdXQgaG9yaXpvbnRhbCB3cmFwIHNlc3Npb24tZ3JvdXAtZGV0YWlscyI+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbX2hhdmVNZXRyaWNzQW5kU2Vzc2lvbkdyb3VwKHZpc2libGVTY2hlbWEuKiwgc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3NdXSIKICAgICAgICAgIGFzPSJtZXRyaWNJbmZvIgogICAgICAgID4KICAgICAgICAgIDwhLS0gTm90ZSB0aGF0IHdlIGRvIG5vdCBwcm92aWRlIGEgcmVxdWVzdC1tYW5hZ2VyIGF0dHJpYnV0ZSBzaW5jZQogICAgICAgICAgICAgICB3ZSBwcm92aWRlIGEgZnVuY3Rpb24gaW4gcmVxdWVzdC1kYXRhIGZvciBjYWxsaW5nIHRoZSBiYWNrZW5kCiAgICAgICAgICAgICAgIHRvIGdldCB0aGUgbWV0cmljcyBkYXRhLgogICAgICAgICAgICAtLT4KICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICBjbGFzcz0ic2NhbGFyLWNhcmQiCiAgICAgICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tfY29tcHV0ZVNlcmllc0ZvclNlc3Npb25Hcm91cE1ldHJpYyhzZXNzaW9uR3JvdXAsIG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHRhZz0iW1ttZXRyaWNJbmZvLm5hbWUudGFnXV0iCiAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfY29tcHV0ZVRhZ01ldGFkYXRhKG1ldHJpY0luZm8pXV0iCiAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX25vTXVsdGlFeHBlcmltZW50c11dIgogICAgICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgICAgIGFjdGl2ZQogICAgICAgICAgPgogICAgICAgICAgPC90Zi1zY2FsYXItY2FyZD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8IS0tICJpcm9uLWZsZXgiIGlzIG5lZWRlZCB0byB1c2UgdGhlIGxheW91dCBjbGFzc2VzIGluIHRoZSBkaXYgYWJvdmUgLS0+CiAgICA8c3R5bGUgaW5jbHVkZT0iaXJvbi1mbGV4Ij4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFZzLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVnMucHJvdG90eXBlLCJfbm9NdWx0aUV4cGVyaW1lbnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2luZGV4T2ZTZXNzaW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cE5hbWVIYXNoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVnMucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sVnMucHJvdG90eXBlLCJfY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3VwLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZzLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cENoYW5nZWQiLG51bGwpO1ZzPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscyIpXSxWcyk7dmFyIEhkPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faHBhcmFtTmFtZT1GZCx0aGlzLl9tZXRyaWNOYW1lPVF1fV92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe2xldCB0PXRoaXMuJC5zZXNzaW9uR3JvdXBzVGFibGUuZ2V0KCJkZXRhaWxzT3BlbmVkSXRlbXMiKTt0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIixbXSksY2koKTtsZXQgcj1uZXcgTWFwO3RoaXMuc2Vzc2lvbkdyb3Vwcy5mb3JFYWNoKG49PntyLnNldChuLm5hbWUsbil9KSx0aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLnNldCgiZGV0YWlsc09wZW5lZEl0ZW1zIix0Lm1hcChuPT5yLmdldChuLm5hbWUpKS5maWx0ZXIoQm9vbGVhbikpfV9zZXNzaW9uR3JvdXBIUGFyYW0odCxyKXtyZXR1cm4gdD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQuaHBhcmFtcyxyKT8iIjpiMCh0LmhwYXJhbXNbcl0pfV9zZXNzaW9uR3JvdXBNZXRyaWModCxyKXtpZih0PT1udWxsfHxPYmplY3Qua2V5cyh0KS5sZW5ndGg9PTApcmV0dXJuIiI7Zm9yKGxldCBuPTA7bjx0Lm1ldHJpY1ZhbHVlcy5sZW5ndGg7KytuKXtsZXQgaT10Lm1ldHJpY1ZhbHVlc1tuXTtpZihpLm5hbWUuZ3JvdXA9PT1yLmdyb3VwJiZpLm5hbWUudGFnPT1yLnRhZylyZXR1cm4gYjAoaS52YWx1ZSl9cmV0dXJuIiJ9X3Jvd051bWJlcih0KXtyZXR1cm4gdCsxfX07SGQudGVtcGxhdGU9UWAKICAgIDx2YWFkaW4tZ3JpZAogICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC10YWJsZSIKICAgICAgaWQ9InNlc3Npb25Hcm91cHNUYWJsZSIKICAgICAgY29sdW1uLXJlb3JkZXJpbmctYWxsb3dlZD0iIgogICAgICBpdGVtcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICA+CiAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5UcmlhbCBJRDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+W1tpdGVtLm5hbWVdXTwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZW5hYmxlU2hvd01ldHJpY3NdXSI+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjAiIGF1dG9XaWR0aD0iIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj5TaG93IE1ldHJpY3M8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjbGFzcz0idGFibGUtY2VsbCIgY2hlY2tlZD0ie3tkZXRhaWxzT3BlbmVkfX0iPgogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlCiAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgaXRlbXM9IltbdmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc11dIgogICAgICAgIGFzPSJocGFyYW1JbmZvIgogICAgICAgIGluZGV4LWFzPSJocGFyYW1JbmRleCIKICAgICAgPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIyIiB3aWR0aD0iMTBlbSIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfaHBhcmFtTmFtZShocGFyYW1JbmZvKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtY2VsbCI+CiAgICAgICAgICAgICAgW1tfc2Vzc2lvbkdyb3VwSFBhcmFtKGl0ZW0sIGhwYXJhbUluZm8ubmFtZSldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJ7e3Zpc2libGVTY2hlbWEubWV0cmljSW5mb3N9fSIKICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICBpbmRleC1hcz0ibWV0cmljSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX21ldHJpY05hbWUobWV0cmljSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cE1ldHJpYyhpdGVtLCBtZXRyaWNJbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgY2xhc3M9InJvdy1kZXRhaWxzIj4KICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW2l0ZW1dXSIKICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICAgIGNsYXNzPSJzZXNzaW9uLWdyb3VwLWRldGFpbHMiCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3ZhYWRpbi1ncmlkPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tbHVtby1iYXNlLWNvbG9yOiAjMzAzMDMwOwogICAgICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHZhYWRpbi1ncmlkIHsKICAgICAgICAtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcjogIzUwNTA1MDsKICAgICAgfQoKICAgICAgLnRhYmxlLWNlbGwgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAudGFibGUtaGVhZGVyIHsKICAgICAgICAvKiBsaW5lLWJyZWFrIG92ZXJmbG93aW5nIGNvbHVtbiBoZWFkZXJzICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLXRhYmxlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnNlc3Npb24tZ3JvdXAtZGV0YWlscyB7CiAgICAgICAgaGVpZ2h0OiAzNjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSGQucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIZC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxIZC5wcm90b3R5cGUsImVuYWJsZVNob3dNZXRyaWNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxIZC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEhkLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtIZD1FKFt5dCgidGYtaHBhcmFtcy10YWJsZS12aWV3IildLEhkKTt2YXIgQ1A9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLnZpc2libGVTY2hlbWE9bnVsbH1fcHJvcGVydGllc0FyZVBvcHVsYXRlZCh0LHIpe3JldHVybiB0IT1udWxsJiZyIT09dm9pZCAwJiZyIT09bnVsbH1fc2luZ2xldG9uU2Vzc2lvbkdyb3Vwcyh0KXtyZXR1cm4gdD09bnVsbD9bXTpbdF19fTtDUC50ZW1wbGF0ZT1RYAogICAgPCEtLSBJZiBzZXNzaW9uR3JvdXAgb3IgdmlzaWJsZVNjaGVtYSBhcmUgbm90IHBvcHVsYXRlZCwgZG8gbm90IGRpc3BsYXkKICAgICAgICAgYW55dGhpbmcuCiAgICAgIC0tPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbW19wcm9wZXJ0aWVzQXJlUG9wdWxhdGVkKHZpc2libGVTY2hlbWEsIHNlc3Npb25Hcm91cCldXSIKICAgID4KICAgICAgPCEtLSBEaXNwbGF5IG9uZSByb3cgd2l0aG91dCBhICJzaG93LW1ldHJpY3MiIGNvbHVtbiAtLT4KICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW3Zpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tfc2luZ2xldG9uU2Vzc2lvbkdyb3VwcyhzZXNzaW9uR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlCiAgICAgIGlzPSJkb20taWYiCiAgICAgIGlmPSJbWyFfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDxkaXY+Q2xpY2sgb3IgaG92ZXIgb3ZlciBhIHNlc3Npb24gZ3JvdXAgdG8gZGlzcGxheSBpdHMgdmFsdWVzIGhlcmUuPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJzZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQ1AucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0NQPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzIildLENQKTt2YXIgQVA9RWUoT2UoKSwxKTtmdW5jdGlvbiBjdWUoZSx0LHIsbil7aWYodC5sZW5ndGg8MilyZXR1cm4gY29uc29sZS5lcnJvcigiTGVzcyB0aGFuIHR3byBheGVzIGluIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QuIiksbnVsbDtsZXQgaT1yWzBdLG89clsxXTtpZihpPD10WzBdfHxpPj10W3QubGVuZ3RoLTFdKXJldHVybiBudWxsO2xldCBhPUFQLnNvcnRlZEluZGV4KHQsaSk7Y29uc29sZS5hc3NlcnQoYT4wKSxjb25zb2xlLmFzc2VydChhPHQubGVuZ3RoKTtsZXQgcz1hLTE7ZnVuY3Rpb24gbChoLGYscCxkKXtsZXQgZz1oLXAsXz1mLWQseT1pLXAseD1vLWQsYj0oZyp5K18qeCkvKGcqZytfKl8pO2lmKGI8PTApcmV0dXJuIHAzKHkseCk7aWYoYj49MSl7bGV0IFM9aC1pLEM9Zi1vO3JldHVybiBwMyhTLEMpfXJldHVybiBwMyh5LWIqZyx4LWIqXyl9bGV0IGM9bnVsbCx1PW51bGw7cmV0dXJuIGUuZm9yRWFjaChoPT57bGV0IGY9bChoLmNvbnRyb2xQb2ludHNbc11bMF0saC5jb250cm9sUG9pbnRzW3NdWzFdLGguY29udHJvbFBvaW50c1thXVswXSxoLmNvbnRyb2xQb2ludHNbYV1bMV0pO2Y+bnx8KGM9PT1udWxsfHxmPGMpJiYoYz1mLHU9aCl9KSx1fWZ1bmN0aW9uIHV1ZShlLHQscil7cmV0dXJuIGUuZG9tYWluKCkuZmlsdGVyKG49PntsZXQgaT1lKG4pO3JldHVybiB0PD1pJiZpPD1yfSl9ZnVuY3Rpb24gaHVlKGUsdCxyKXtsZXQgbj1lLnJhbmdlKCksaT1uLmZpbHRlcihvPT50PD1vJiZvPD1yKS5tYXAobz0+e2xldCBhPWUuaW52ZXJ0RXh0ZW50KG8pO3JldHVybiBvPT09bltuLmxlbmd0aC0xXT9bYVswXSxhWzFdKzFdOmF9KTtyZXR1cm4gaS5sZW5ndGg9PTA/WzAsMF06YWEoSW0oaSkpfWZ1bmN0aW9uIGZ1ZShlLHQscil7cmV0dXJuW2UuaW52ZXJ0KHQpLGUuaW52ZXJ0KHIpXS5zb3J0KChuLGkpPT5uLWkpfWZ1bmN0aW9uIEZjdChlLHQscil7ZnVuY3Rpb24gbigpe2lmKGUubGVuZ3RoPT09MClyZXR1cm5bMSwyXTtsZXRbaSxvXT1hYShlKTtyZXR1cm4gaSE9PW8/W2ksb106aT4wP1tpKi41LGkqMS41XTppPDA/W2kqMS41LGkqLjVdOlstMSwxXX1pZihyPT09IkxJTkVBUiIpcmV0dXJuIE9uKCkuZG9tYWluKG4oKSkucmFuZ2UoW3QsMF0pO2lmKHI9PT0iTE9HIil7bGV0IGk9bigpO3JldHVybiBpWzBdPD0wJiZpWzFdPj0wP0ZjdChlLHQsIkxJTkVBUiIpOmNjKCkuZG9tYWluKGkpLnJhbmdlKFt0LDBdKX1lbHNlIGlmKHI9PT0iUVVBTlRJTEUiKXtsZXQgbz1JcigyMCkubWFwKGE9PnQtYSp0LzE5KTtyZXR1cm4gZS5sZW5ndGg9PT0wJiYoZT1bMV0pLGVnKCkuZG9tYWluKEFQLnVuaXEoZSkpLnJhbmdlKG8pfWVsc2V7aWYocj09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKEFQLnVuaXEoZS5zb3J0KCkpKS5yYW5nZShbdCwwXSkucGFkZGluZyguMSk7dGhyb3cgUmFuZ2VFcnJvcigiVW5rbm93biBzY2FsZTogIityKX19dmFyIHUxOyhmdW5jdGlvbihlKXtlLkxJTkVBUj0iTElORUFSIixlLkxPRz0iTE9HIixlLlFVQU5USUxFPSJRVUFOVElMRSIsZS5OT05fTlVNRVJJQz0iTk9OX05VTUVSSUMifSkodTF8fCh1MT17fSkpO3ZhciBQUD1jbGFzc3tpc1Bhc3NpbmcodCl7cmV0dXJuITB9fSxuVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9sb3dlcj10LHRoaXMuX3VwcGVyPXIsdGhpcy5fbG93ZXJPcGVuPW4sdGhpcy5fdXBwZXJPcGVuPWl9aXNQYXNzaW5nKHQpe2xldCByPXQ7cmV0dXJuIHRoaXMuX2JlZm9yZSh0aGlzLl9sb3dlcixyLCF0aGlzLl9sb3dlck9wZW4pJiZ0aGlzLl9iZWZvcmUocix0aGlzLl91cHBlciwhdGhpcy5fdXBwZXJPcGVuKX1fYmVmb3JlKHQscixuKXtyZXR1cm4gbj90PD1yOnQ8cn19LEhjdD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kb21haW5TZXQ9dH1pc1Bhc3NpbmcodCl7cmV0dXJuIHRoaXMuX2RvbWFpblNldC5maW5kSW5kZXgocj0+cj09PXQpIT09LTF9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bix0aGlzLl9jb2xJbmRleD1pLHRoaXMuX2lzRGlzcGxheWVkPSExLHRoaXMuX3lTY2FsZT1udWxsLHRoaXMuX3NjYWxlVHlwZT1udWxsLHRoaXMuc2V0QnJ1c2hTZWxlY3Rpb24obnVsbCl9Y29sSW5kZXgoKXtyZXR1cm4gdGhpcy5fY29sSW5kZXh9eVNjYWxlKCl7cmV0dXJuIHRoaXMuX3lTY2FsZX1zY2FsZVR5cGUoKXtyZXR1cm4gdGhpcy5fc2NhbGVUeXBlfWJydXNoU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2JydXNoU2VsZWN0aW9ufWlzRGlzcGxheWVkKCl7cmV0dXJuIHRoaXMuX2lzRGlzcGxheWVkfXNldEJydXNoU2VsZWN0aW9uKHQpe3RoaXMuX2JydXNoU2VsZWN0aW9uPXQsdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1zZXREb21haW5BbmRTY2FsZSh0LHIpe3RoaXMuX3NjYWxlVHlwZT1yLHRoaXMuX3lTY2FsZT1GY3QodC5zbGljZSgpLHRoaXMuX3N2Z1Byb3BzLmhlaWdodCx0aGlzLnNjYWxlVHlwZSgpKSx0aGlzLl9icnVzaEZpbHRlcj10aGlzLl9idWlsZEJydXNoRmlsdGVyKHRoaXMuYnJ1c2hTZWxlY3Rpb24oKSx0aGlzLnNjYWxlVHlwZSgpLHRoaXMueVNjYWxlKCkpfWJydXNoRmlsdGVyKCl7cmV0dXJuIHRoaXMuX2JydXNoRmlsdGVyfXVwZGF0ZURPTSh0KXtsZXQgcj1sYih0aGlzLnlTY2FsZSgpKTt0aGlzLnNjYWxlVHlwZSgpPT09dTEuUVVBTlRJTEUmJihyPXIudGlja1ZhbHVlcyh0aGlzLnlTY2FsZSgpLnF1YW50aWxlcygpKS50aWNrRm9ybWF0KHhuKCItLjZnIikpKTtsZXQgbj1IdCh0KTtuLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLG4uYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcyIsITApLmNhbGwocikuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgiYXhpcy10aXRsZSIsITApLnN0eWxlKCJjdXJzb3IiLCJtb3ZlIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieSIsLTkpLnRleHQoYT0+Y2N0KHRoaXMuX3NjaGVtYSxhKSksbi5jYWxsKHBiKCkub24oInN0YXJ0IiwoKT0+e3Quc2V0QXR0cmlidXRlKCJpcy1kcmFnZ2luZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdTdGFydCh0aGlzLmNvbEluZGV4KCkpfSkub24oImRyYWciLCgpPT50aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnKHF0LngpKS5vbigiZW5kIiwoKT0+e3RoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkRyYWdFbmQoKSx0LnJlbW92ZUF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciKX0pKTtsZXQgaT1xTCgpLmV4dGVudChbWy04LDBdLFs4LHRoaXMuX3N2Z1Byb3BzLmhlaWdodCsxXV0pLm9uKCJzdGFydCIsKCk9PnshQmN0KHF0KXx8KHQuc2V0QXR0cmlidXRlKCJpcy1icnVzaGluZyIsIiIpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKSl9KS5vbigiYnJ1c2giLCgpPT57IUJjdChxdCl8fHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbkJydXNoQ2hhbmdlZCh0aGlzLmNvbEluZGV4KCkscXQuc2VsZWN0aW9uKX0pLm9uKCJlbmQiLCgpPT57IUJjdChxdCl8fCh0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbiksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWJydXNoaW5nIikpfSksbz1IdCh0KS5hcHBlbmQoImciKS5jbGFzc2VkKCJicnVzaCIsITApO28uY2FsbChpKSxpLm1vdmUobyx0aGlzLmJydXNoU2VsZWN0aW9uKCkpfXNldERpc3BsYXllZCh0KXt0aGlzLl9pc0Rpc3BsYXllZD10fV9idWlsZEJydXNoRmlsdGVyKHQscixuKXtpZih0PT09bnVsbClyZXR1cm4gbmV3IFBQO2lmKHI9PT1udWxsKXJldHVybiBjb25zb2xlLmVycm9yKCJTY2FsZSB0eXBlIGlzIG51bGwsIGJ1dCBicnVzaFNlbGVjdGlvbiBpc24ndDogIix0KSxuZXcgUFA7c3dpdGNoKHIpe2Nhc2UgdTEuTElORUFSOmNhc2UgdTEuTE9HOntsZXRbaSxvXT1mdWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCExKX1jYXNlIHUxLlFVQU5USUxFOntsZXRbaSxvXT1odWUobix0WzBdLHRbMV0pO3JldHVybiBuZXcgblYoaSxvLCExLCEwKX1jYXNlIHUxLk5PTl9OVU1FUklDOnJldHVybiBuZXcgSGN0KHV1ZShuLHRbMF0sdFsxXSkpfXJldHVybiBjb25zb2xlLmVycm9yKCJVbmtub3duIHNjYWxlIHR5cGU6ICIsciksbmV3IFBQfX0saVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlcz10aGlzLl9jcmVhdGVBeGVzKG4pLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zPXRnKCkucmFuZ2UoWzEsdGhpcy5fc3ZnUHJvcHMud2lkdGgtMV0pLnBhZGRpbmcoLjUpLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuYXhpcy1wYXJlbnQiKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCIuYXhpcy1wYXJlbnQiKX11cGRhdGVBeGVzKHQscil7Y29uc29sZS5hc3NlcnQoIXRoaXMuaXNBeGlzRHJhZ2dpbmcoKSk7bGV0IG49bmV3IFNldDt0LmNvbHVtbnMuZm9yRWFjaChvPT57bGV0IGE9by5hYnNvbHV0ZUluZGV4LHM9dGhpcy5fYXhlc1thXTtzLnNldERpc3BsYXllZCghMCk7bGV0IGw9ci5tYXAoYz0+eDAodGhpcy5fc2NoZW1hLGMsYSkpO3Muc2V0RG9tYWluQW5kU2NhbGUobCxvLnNjYWxlKSxuLmFkZChhKX0pLHRoaXMuX2F4ZXMuZm9yRWFjaChvPT57bi5oYXMoby5jb2xJbmRleCgpKXx8by5zZXREaXNwbGF5ZWQoITEpfSksdGhpcy5fdXBkYXRlU3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMobiksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmRhdGEoQXJyYXkuZnJvbShuKSxvPT5vKSx0aGlzLl9wYXJlbnRzU2VsLmV4aXQoKS5yZW1vdmUoKSx0aGlzLl9wYXJlbnRzU2VsPXRoaXMuX3BhcmVudHNTZWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzLXBhcmVudCIsITApLm1lcmdlKHRoaXMuX3BhcmVudHNTZWwpO2xldCBpPXRoaXM7dGhpcy5fcGFyZW50c1NlbC5jYWxsKG89PnRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTShvKSkuZWFjaChmdW5jdGlvbihvKXtpLl9heGVzW29dLnVwZGF0ZURPTSh0aGlzKX0pfW1hcFZpc2libGVBeGVzKHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5tYXAocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9YWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KHQpe3JldHVybiB0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5ldmVyeShyPT50KHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpLHRoaXMuX2F4ZXNbcl0pKX1nZXRBeGlzRm9yQ29sSW5kZXgodCl7cmV0dXJuIHRoaXMuX2F4ZXNbdF19ZHJhZ1N0YXJ0KHQpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2F4ZXNbdF0uaXNEaXNwbGF5ZWQoKSksdGhpcy5fZHJhZ2dlZEF4aXM9dGhpcy5fYXhlc1t0XSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfWRyYWcodCl7dD1NYXRoLm1pbihNYXRoLm1heCh0LDApLHRoaXMuX3N2Z1Byb3BzLndpZHRoKSx0aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uPXQ7bGV0IHI9dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCk7ci5zb3J0KChuLGkpPT50aGlzLmdldEF4aXNQb3NpdGlvbihuKS10aGlzLmdldEF4aXNQb3NpdGlvbihpKSksdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKHIpLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsKX1kcmFnRW5kKHQpe2NvbnNvbGUuYXNzZXJ0KHRoaXMuaXNBeGlzRHJhZ2dpbmcoKSksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj1udWxsLHRoaXMuX2RyYWdnZWRBeGlzPW51bGwsdGhpcy5fdXBkYXRlQXhlc1Bvc2l0aW9uc0luRE9NKHRoaXMuX3BhcmVudHNTZWwudHJhbnNpdGlvbigpLmR1cmF0aW9uKHQpKX1pc0F4aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGx9Z2V0QXhpc1Bvc2l0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2VkQXhpcyE9PW51bGwmJnRoaXMuX2RyYWdnZWRBeGlzLmNvbEluZGV4KCk9PT10P3RoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb246dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnModCl9X3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpe2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpLmZpbHRlcihpPT50LmhhcyhpKSksbj1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnIsLi4uQXJyYXkuZnJvbSh0KV0pKTt0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4obil9X3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0KXt0LmF0dHIoInRyYW5zZm9ybSIscj0+eVAodGhpcy5nZXRBeGlzUG9zaXRpb24ocikpKX1fY3JlYXRlQXhlcyh0KXtyZXR1cm4gSXIodWN0KHRoaXMuX3NjaGVtYSkpLm1hcChyPT5uZXcgVmN0KHRoaXMuX3N2Z1Byb3BzLHRoaXMuX3NjaGVtYSx0LHIpKX19O2Z1bmN0aW9uIEJjdChlKXtyZXR1cm4gZS5zb3VyY2VFdmVudCE9PW51bGx9dmFyIGpmOyhmdW5jdGlvbihlKXtlW2UuRk9SRUdST1VORD0wXT0iRk9SRUdST1VORCIsZVtlLkJBQ0tHUk9VTkQ9MV09IkJBQ0tHUk9VTkQifSkoamZ8fChqZj17fSkpO3ZhciB0aD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0PT09dm9pZCAwJiYodD1FcChudWxsKSksY29uc29sZS5hc3NlcnQodC5zaXplKCk8PTEpLHRoaXMuX3Nlc3Npb25Hcm91cFNlbD10fXNlc3Npb25Hcm91cCgpe3JldHVybiB0aGlzLl9zZXNzaW9uR3JvdXBTZWwuc2l6ZSgpPT09MT90aGlzLl9zZXNzaW9uR3JvdXBTZWwuZGF0dW0oKTpudWxsfWlzTnVsbCgpe3JldHVybiB0aGlzLnNlc3Npb25Hcm91cCgpPT09bnVsbH1zZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsfWVxdWFsc1RvKHQpe3ZhciByLG47cmV0dXJuIHRoaXMuaXNOdWxsKCk/dC5pc051bGwoKTp0LmlzTnVsbCgpPyExOigocj10LnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6ci5uYW1lKT09KChuPXRoaXMuc2Vzc2lvbkdyb3VwKCkpPT1udWxsP3ZvaWQgMDpuLm5hbWUpfX0sb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5fYXhlc0NvbGxlY3Rpb249bix0aGlzLl9zZXNzaW9uR3JvdXBzPVtdLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmJhY2tncm91bmQiKS5yZW1vdmUoKSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5mb3JlZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJhY2tncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3N2Z1Byb3BzLnN2Z0cuYXBwZW5kKCJnIikuY2xhc3NlZCgiZm9yZWdyb3VuZCIsITApLnNlbGVjdEFsbCgicGF0aCIpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPW5ldyB0aCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fZDNsaW5lPXZ1KCkuY3VydmUoWWgpfWdldFNlc3Npb25Hcm91cEhhbmRsZSh0KXtyZXR1cm4gdD09bnVsbD9uZXcgdGg6bmV3IHRoKHRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKHI9PnIubmFtZT09PXQubmFtZSkpfWhpZGVCYWNrZ3JvdW5kTGluZXMoKXt0aGlzLl9iZ1BhdGhzU2VsLmF0dHIoInZpc2liaWxpdHkiLCJoaWRkZW4iKX1zaG93QmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IixudWxsKX1wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKXtyZXR1cm4gdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlfXNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlfXJlY29tcHV0ZUNvbnRyb2xQb2ludHModCxyPTApeyh0PT09amYuRk9SRUdST1VORD90aGlzLl9mZ1BhdGhzU2VsOnRoaXMuX2JnUGF0aHNTZWwpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihyKS5hdHRyKCJkIixpPT50aGlzLl9wYXRoREF0dHJpYnV0ZShpKSksdD09PWpmLkZPUkVHUk9VTkQmJndpbmRvdy5zZXRUaW1lb3V0KCgpPT57bGV0IGk9dGhpczt0aGlzLl9mZ1BhdGhzU2VsLmVhY2goZnVuY3Rpb24obyl7aS5fc2V0Q29udHJvbFBvaW50c1Byb3BlcnR5KHRoaXMsbyl9KX0pfXJlY29tcHV0ZUZvcmVncm91bmRMaW5lc1Zpc2liaWxpdHkoKXt0aGlzLl9mZ1BhdGhzU2VsLmNsYXNzZWQoImludmlzaWJsZS1wYXRoIix0PT4hdGhpcy5fYXhlc0NvbGxlY3Rpb24uYWxsVmlzaWJsZUF4ZXNTYXRpc2Z5KChyLG4pPT5uLmJydXNoRmlsdGVyKCkuaXNQYXNzaW5nKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpKSksdGhpcy5fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKX1zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcih0LHIsbil7bGV0IGk9dGhpcy5fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pO3RoaXMuX2ZnUGF0aHNTZWwuYXR0cigic3Ryb2tlIixpKX1yZWRyYXcodCxyLG4saSl7bGV0IG89dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpLGE9dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2Vzc2lvbkdyb3VwKCk7dGhpcy5fc2Vzc2lvbkdyb3Vwcz10LHRoaXMuX2ZnUGF0aHNTZWw9dGhpcy5fcmVjb21wdXRlUGF0aFNlbGVjdGlvbih0aGlzLl9mZ1BhdGhzU2VsKSx0aGlzLl9iZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fYmdQYXRoc1NlbCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKG8pLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXRoaXMuZ2V0U2Vzc2lvbkdyb3VwSGFuZGxlKGEpLHRoaXMucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCksdGhpcy5zZXRGb3JlZ3JvdW5kTGluZXNDb2xvcihyLG4saSl9dXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKHQpe3RoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITEpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10LHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJwZWFrZWQtcGF0aCIsITApfWNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCl7dGhpcy51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAobmV3IHRoKX11cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZS5zZWxlY3Rpb24oKS5jbGFzc2VkKCJzZWxlY3RlZC1wYXRoIiwhMCl9ZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKXtsZXQgbj10aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygobyxhKT0+byksaT1jdWUodGhpcy5fdmlzaWJsZUZnUGF0aHNTZWwubm9kZXMoKSxuLFt0LHJdLDEwMCk7cmV0dXJuIGk9PT1udWxsP25ldyB0aDpuZXcgdGgoSHQoaSkpfV9jcmVhdGVMaW5lQ29sb3JGdW5jdGlvbih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuKCk9PiJyZWQiO2xldCBpPU9uKCkuZG9tYWluKGhjdCh0aGlzLl9zY2hlbWEsdGhpcy5fc2Vzc2lvbkdyb3Vwcyx0KSkucmFuZ2UoW3Isbl0pLmludGVycG9sYXRlKE1fKTtyZXR1cm4gbz0+aSh4MCh0aGlzLl9zY2hlbWEsbyx0KSl9X3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odCl7cmV0dXJuIHQ9dC5kYXRhKHRoaXMuX3Nlc3Npb25Hcm91cHMscj0+ci5uYW1lKSx0LmV4aXQoKS5yZW1vdmUoKSx0LmVudGVyKCkuYXBwZW5kKCJwYXRoIikubWVyZ2UodCl9X3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0LHIpe3QuY29udHJvbFBvaW50cz10aGlzLl9jb21wdXRlQ29udHJvbFBvaW50cyhyKX1fY29tcHV0ZUNvbnRyb2xQb2ludHModCl7cmV0dXJuIHRoaXMuX2F4ZXNDb2xsZWN0aW9uLm1hcFZpc2libGVBeGVzKChyLG4pPT5bcixuLnlTY2FsZSgpKHgwKHRoaXMuX3NjaGVtYSx0LG4uY29sSW5kZXgoKSkpXSl9X3BhdGhEQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLl9kM2xpbmUodGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHModCkpfV91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpe3RoaXMuX3Zpc2libGVGZ1BhdGhzU2VsPXRoaXMuX2ZnUGF0aHNTZWwuZmlsdGVyKCI6bm90KC5pbnZpc2libGUtcGF0aCkiKX19O3ZhciBhVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuc3ZnPUh0KHQpO2xldCBuPXt0b3A6MzAscmlnaHQ6MTAsYm90dG9tOjEwLGxlZnQ6MTB9LGk9MTAwLG89MjAwLGE9cippK24ubGVmdCtuLnJpZ2h0LHM9bytuLnRvcCtuLmJvdHRvbTt0aGlzLnN2Zy5hdHRyKCJ2aWV3Qm94IixgMCAwICR7YX0gJHtzfWApLHRoaXMuc3ZnLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4td2lkdGgiLGErInB4IiksdGhpcy5zdmcuc3R5bGUoIm1pbi1oZWlnaHQiLHMrInB4IiksdGhpcy53aWR0aD1hLW4ubGVmdC1uLnJpZ2h0LHRoaXMuaGVpZ2h0PXMtbi50b3Atbi5ib3R0b20sdGhpcy5zdmdHPXRoaXMuc3ZnLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIseVAobi5sZWZ0LG4udG9wKSl9fSxzVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1uLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCPWksdGhpcy5fYXhlc0NvbGxlY3Rpb249bmV3IGlWKHQscix0aGlzKSx0aGlzLl9saW5lc0NvbGxlY3Rpb249bmV3IG9WKHQscix0aGlzLl9heGVzQ29sbGVjdGlvbiksdGhpcy5fc3ZnUHJvcHMuc3ZnLm9uKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKS5vbigibW91c2Vtb3ZlIG1vdXNlZW50ZXIiLCgpPT57bGV0W28sYV09em8odGhpcy5fc3ZnUHJvcHMuc3ZnRy5ub2RlKCkpO3RoaXMub25Nb3VzZU1vdmVkKG8sYSl9KS5vbigibW91c2VsZWF2ZSIsKCk9PnRoaXMub25Nb3VzZUxlYXZlKCkpfW9uRHJhZ1N0YXJ0KHQpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdTdGFydCh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uaGlkZUJhY2tncm91bmRMaW5lcygpfW9uRHJhZyh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnKHQpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkZPUkVHUk9VTkQpfW9uRHJhZ0VuZCgpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmRyYWdFbmQoNTAwKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5ELDUwMCksd2luZG93LnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5CQUNLR1JPVU5EKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2hvd0JhY2tncm91bmRMaW5lcygpfSw1MDApfW9uQnJ1c2hDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZ2V0QXhpc0ZvckNvbEluZGV4KHQpLnNldEJydXNoU2VsZWN0aW9uKHIpLHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl9b25Nb3VzZU1vdmVkKHQscil7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24uZmluZENsb3Nlc3RTZXNzaW9uR3JvdXAodCxyKSksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSl9b25Nb3VzZUxlYXZlKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLmlzTnVsbCgpfHwodGhpcy5fbGluZXNDb2xsZWN0aW9uLmNsZWFyUGVha2VkU2Vzc2lvbkdyb3VwKCksdGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKG51bGwpKX1vbkNsaWNrKCl7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpPT09dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCk/dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKG5ldyB0aCk6dGhpcy5fbGluZXNDb2xsZWN0aW9uLnVwZGF0ZVNlbGVjdGVkU2Vzc2lvbkdyb3VwKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSksdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodCxyKXt0aGlzLl9heGVzQ29sbGVjdGlvbi51cGRhdGVBeGVzKHQscik7bGV0IG49dGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLGk9dGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCk7dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlZHJhdyhyLHQuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwP3QuY29sdW1uc1t0LmNvbG9yQnlDb2x1bW5JbmRleF0uYWJzb2x1dGVJbmRleDpudWxsLHQubWluQ29sb3IsdC5tYXhDb2xvciksbi5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpfHx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKSxpLmVxdWFsc1RvKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0IodGhpcy5fbGluZXNDb2xsZWN0aW9uLnNlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfXNjaGVtYSgpe3JldHVybiB0aGlzLl9zY2hlbWF9fTt2YXIgZWg9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwsdGhpcy5yZWRyYXdDb3VudD0wfV9vcHRpb25zT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3ZhciBuO2lmKCF0aGlzLm9wdGlvbnMpcmV0dXJuO2xldHtjb25maWd1cmF0aW9uOnR9PShuPXRoaXMuX3ByZXZPcHRpb25zKSE9bnVsbD9uOnt9LHtjb25maWd1cmF0aW9uOnJ9PXRoaXMub3B0aW9ucztpZih0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9PT12b2lkIDB8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LnNjaGVtYSxyLnNjaGVtYSl8fCFVY3QuaXNFcXVhbCh0PT1udWxsP3ZvaWQgMDp0LmNvbHVtbnNWaXNpYmlsaXR5LHIuY29sdW1uc1Zpc2liaWxpdHkpKXtIdCh0aGlzLiQuc3ZnKS5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKTtsZXQgaT1uZXcgYVYodGhpcy4kLnN2ZyxyLmNvbHVtbnNWaXNpYmlsaXR5LmZpbHRlcihCb29sZWFuKS5sZW5ndGgpO3RoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlcj1uZXcgc1YoaSxyLnNjaGVtYSxvPT50aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pLG89PnRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKG8pKX10aGlzLl9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCksdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uT3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQodGhpcy5vcHRpb25zLHRoaXMuX3ZhbGlkU2Vzc2lvbkdyb3VwcyksdGhpcy5yZWRyYXdDb3VudCsrLHRoaXMuX3ByZXZPcHRpb25zPXRoaXMub3B0aW9uc31jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZCh0KXt0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9dH1zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD10fV9jb21wdXRlVmFsaWRTZXNzaW9uR3JvdXBzKCl7bGV0IHQ9Y3M7aWYodGhpcy5zZXNzaW9uR3JvdXBzPT09dm9pZCAwKXt0aGlzLl92YWxpZFNlc3Npb25Hcm91cHM9dm9pZCAwO3JldHVybn1sZXQgcj10aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5zY2hlbWE7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXRoaXMuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIobj0+e2ZvcihsZXQgaT0wO2k8dC5udW1Db2x1bW5zKHIpOysraSl7aWYoIXRoaXMub3B0aW9ucy5jb25maWd1cmF0aW9uLmNvbHVtbnNWaXNpYmlsaXR5W2ldKWNvbnRpbnVlO2xldCBvPXQuY29sdW1uVmFsdWVCeUluZGV4KHIsbixpKTtpZihvPT09dm9pZCAwfHxvPT09Ik5hTiIpcmV0dXJuITF9cmV0dXJuITB9KX19O2VoLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3c6IDAgMXB4IDAgI2ZmZiwKICAgICAgICAgIDFweCAwIDAgI2ZmZiwgMCAtMXB4IDAgI2ZmZiwgLTFweCAwIDAgI2ZmZjsKICAgICAgfQogICAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICMwMDAsCiAgICAgICAgICAxcHggMCAwICMwMDAsIDAgLTFweCAwICMwMDAsIC0xcHggMCAwICMwMDA7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5iYWNrZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZGRkOwogICAgICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlczsKICAgICAgfQoKICAgICAgLmZvcmVncm91bmQgcGF0aCB7CiAgICAgICAgZmlsbDogbm9uZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC43OwogICAgICAgIHN0cm9rZS13aWR0aDogMTsKICAgICAgfQoKICAgICAgLyogV2lsbCBiZSBzZXQgb24gZm9yZWdyb3VuZCBwYXRocyB0aGF0IGFyZSBub3QgImNvbnRhaW5lZCIgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgYXhlcyBicnVzaGVzLiBJZiBubyBicnVzaGVzIGFyZSBzZXQsIG5vIHBhdGggd2lsbCBoYXZlIHRoaXMgY2xhc3MuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5pbnZpc2libGUtcGF0aCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogU3R5bGUgZm9yIHRoZSBwYXRoIGNsb3Nlc3QgdG8gdGhlIG1vdXNlIHBvaW50ZXIgKHR5cGljYWxseSB3aWxsIGJlY29tZQogICAgICB0aGUgc2VsZWN0ZWQgcGF0aCB3aGVuIHRoZSB1c2VyIGNsaWNrcykuICovCiAgICAgIC5mb3JlZ3JvdW5kIC5wZWFrZWQtcGF0aCB7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHBhdGggY2xhc3MuIFdlIHVzZSAhaW1wb3J0YW50IHRvIG92ZXJyaWRlIHRoZQogICAgICAgICBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIGNvbG9yIG9mIGEgcGF0aC4gKi8KICAgICAgLmZvcmVncm91bmQgLnNlbGVjdGVkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMyAhaW1wb3J0YW50OwogICAgICAgIHN0cm9rZTogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjY29udGFpbmVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXhpcyB0ZXh0IHsKICAgICAgICB0ZXh0LXNoYWRvdzogdmFyKC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdyk7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxlaC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sZWgucHJvdG90eXBlLCJyZWRyYXdDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwiX3ZhbGlkU2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl9pbnRlcmFjdGlvbk1hbmFnZXIiLHZvaWQgMCk7RShbQnQoIm9wdGlvbnMuKiIsInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZWgucHJvdG90eXBlLCJfb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO2VoPUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90IildLGVoKTt2YXIgQTA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5vcHRpb25zPW51bGx9X2NvbmZpZ3VyYXRpb25DaGFuZ2VkKCl7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEscj10aGlzLmNvbmZpZ3VyYXRpb24uc2NoZW1hLG49KGEscyk9Pih7bmFtZTpGZChhKSxpbmRleDpzLGFic29sdXRlSW5kZXg6ekgocix0LHMpLHNjYWxlOnRoaXMuX2lzTnVtZXJpY0NvbHVtbihzKT8iTElORUFSIjoiTk9OX05VTUVSSUMifSksaT0oYSxzKT0+e2xldCBsPXMrdC5ocGFyYW1JbmZvcy5sZW5ndGg7cmV0dXJue3NjYWxlOiJMSU5FQVIiLG5hbWU6UXUoYSksaW5kZXg6bCxhYnNvbHV0ZUluZGV4OnpIKHIsdCxsKX19LG89e2NvbHVtbnM6dC5ocGFyYW1JbmZvcy5tYXAobikuY29uY2F0KHQubWV0cmljSW5mb3MubWFwKGkpKSxtaW5Db2xvcjoiIzAwMDBGRiIsbWF4Q29sb3I6IiNGRjAwMDAiLGNvbmZpZ3VyYXRpb246dGhpcy5jb25maWd1cmF0aW9ufTt0aGlzLnNldCgib3B0aW9ucyIsbyksY2koKSx0aGlzLnNldCgib3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgiLHRoaXMuX2RlZmF1bHRDb2xvckJ5Q29sdW1uSW5kZXgoKSl9X3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMoKXt0aGlzLm9wdGlvbnMhPT1udWxsJiZ0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHQ9PntsZXQgcj0ib3B0aW9ucy5jb2x1bW5zLiIrdC5pbmRleDshdGhpcy5fYWxsb3dMb2dTY2FsZSh0KSYmdC5zY2FsZT09PSJMT0ciJiZ0aGlzLnNldChyKyIuc2NhbGUiLCJMSU5FQVIiKX0pfV9hbGxvd0xvZ1NjYWxlKHQpe2lmKCF0aGlzLl9pc051bWVyaWNDb2x1bW4odC5pbmRleCl8fCF0aGlzLnNlc3Npb25Hcm91cHMpcmV0dXJuITE7bGV0W3Isbl09X1AodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQuaW5kZXgpO3JldHVybiByPjB8fG48MH1faXNOdW1lcmljQ29sdW1uKHQpe3JldHVybiB0Pj10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGh8fHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zW3RdLnR5cGU9PT0iREFUQV9UWVBFX0ZMT0FUNjQifV9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCl7aWYodGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPjApcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLmhwYXJhbUluZm9zLmxlbmd0aDtsZXQgdD10aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5maW5kSW5kZXgocj0+ci50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0Iik7aWYodCE9PS0xKXJldHVybiB0fX07QTAudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtcGFuZWwiPgogICAgICA8IS0tICdDb2xvciBieScgZHJvcCBkb3duIG1lbnUgLS0+CiAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgbGFiZWw9IkNvbG9yIGJ5IgogICAgICAgIGlkPSJjb2xvckJ5RHJvcERvd25NZW51IgogICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgID4KICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2VsZWN0ZWQ9Int7b3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXh9fSIKICAgICAgICAgIGlkPSJjb2xvckJ5TGlzdEJveCIKICAgICAgICA+CiAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgIGl0ZW1zPSJbW29wdGlvbnMuY29sdW1uc11dIgogICAgICAgICAgICBhcz0iY29sdW1uIgogICAgICAgICAgICBpZD0iY29sb3JCeUNvbHVtblRlbXBsYXRlIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaXRlbSBkaXNhYmxlZD0iW1shX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICAgIFtbY29sdW1uLm5hbWVdXQogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgoKICAgICAgPCEtLSBDb2x1bW5zIHNjYWxlcyAtLT4KICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgIDwhLS0gU2NhbGUgb3B0aW9ucyBmb3IgZWFjaCBudW1lcmljIGZlYXR1cmUgLS0+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tvcHRpb25zLmNvbHVtbnN9fSIgYXM9ImNvbHVtbiI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzTnVtZXJpY0NvbHVtbihjb2x1bW4uaW5kZXgpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi10aXRsZSI+W1tjb2x1bW4ubmFtZV1dPC9kaXY+CiAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgICAgICAgICBjbGFzcz0ic2NhbGUtcmFkaW8tZ3JvdXAiCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e2NvbHVtbi5zY2FsZX19IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IkxJTkVBUiI+CiAgICAgICAgICAgICAgICAgICAgTGluZWFyCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBpZCBoZXJlIGlzIHVzZWQgdG8gYWNjZXNzIHRoaXMgYnV0dG9uIGluIHVuaXQKICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy4tLT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGlkPSJsb2dTY2FsZUJ1dHRvbl9bW2NvbHVtbi5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgbmFtZT0iTE9HIgogICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbWyFfYWxsb3dMb2dTY2FsZShjb2x1bW4sIHNlc3Npb25Hcm91cHMuKildXSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIExvZ2FyaXRobWljCiAgICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IlFVQU5USUxFIj4KICAgICAgICAgICAgICAgICAgICBRdWFudGlsZQogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5jb250cm9sLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQogICAgICAuY29sdW1uIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyOiBzb2xpZCAxcHggZGFya2dyYXk7CiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5jb2x1bW4tdGl0bGUgewogICAgICAgIC8qIEZpdCBldmVyeSB0aXRsZSBpbiBvbmUgbGluZSBzbyB0aGUgcmFkaW8gYm94ZXMgYWxpZ24gdmVydGljYWxseS4gKi8KICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgIC5zY2FsZS1yYWRpby1ncm91cCBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBwYXBlci1saXN0Ym94IHsKICAgICAgICBtYXgtaGVpZ2h0OiAxNWVtOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sQTAucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxBMC5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtCdCgiY29uZmlndXJhdGlvbi4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxBMC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfdW5zZWxlY3REaXNhYmxlZExvZ1NjYWxlcyIsbnVsbCk7QTA9RShbeXQoInRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzIildLEEwKTt2YXIgaDE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07aDEudGVtcGxhdGU9UWAKICAgIDwhLS0gQ29udHJvbHMgYmVoYXZpb3Igb2YgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdAogICAgICAgICBvdXRwdXRzIHNldCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4KICAgICAgLS0+CiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBUaGUgc2NhbGUgYW5kIGNvbG9yIGNvbnRyb2xzLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgcGFyYWxsZWwgY29vcmRpbmF0ZXMgcGxvdCAtLT4KICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QKICAgICAgICBpZD0icGxvdCIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBzZWxlY3RlZC1zZXNzaW9uLWdyb3VwPSJ7e19zZWxlY3RlZEdyb3VwfX0iCiAgICAgICAgY2xvc2VzdC1zZXNzaW9uLWdyb3VwPSJ7e19jbG9zZXN0R3JvdXB9fSIKICAgICAgICBvcHRpb25zPSJbW19vcHRpb25zXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIGlkPSJ2YWx1ZXMiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscwogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfc2VsZWN0ZWRHcm91cF1dIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHM+CiAgICA8L2hwYXJhbXMtc3BsaXQtbGF5b3V0PgoKICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGgxLnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0saDEucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxoMS5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7aDE9RShbeXQoInRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXciKV0saDEpO3ZhciB5Mz1FZShPZSgpLDEpO3ZhciAkbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMuX2NvbnRhaW5lcj1udWxsLHRoaXMuX3N2Zz1udWxsLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9jb250YWluZXI9dGhpcy4kLmNvbnRhaW5lcix0aGlzLl9zdmc9SHQodGhpcy4kLnN2ZyksdGhpcy5fcmVkcmF3KCl9X3Nlc3Npb25Hcm91cHNDaGFuZ2VkKCl7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJih0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwPWZjdCh0aGlzLnNlc3Npb25Hcm91cHMsdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cC5uYW1lKXx8bnVsbCksdGhpcy5fcmVkcmF3KCl9X3Zpc2libGVTY2hlbWFDaGFuZ2VkKCl7dGhpcy5fYnJ1c2hlZENlbGxJbmRleD1udWxsLHRoaXMuX2JydXNoU2VsZWN0aW9uPW51bGwsdGhpcy5fcmVkcmF3KCl9X3JlZHJhdygpe3RoaXMuZGVib3VuY2UoIl9yZWRyYXciLCgpPT57bGV0IHQ9Y3Mscj0xMjAwLG49LjQqcixpPTE1MCxvPS43NSppO3RoaXMud2lkdGg9TWF0aC5tYXgoaSp0Lm51bVZpc2libGVDb2x1bW5zKHRoaXMudmlzaWJsZVNjaGVtYSksciksdGhpcy5oZWlnaHQ9TWF0aC5tYXgobyp0Lm51bVZpc2libGVNZXRyaWNzKHRoaXMudmlzaWJsZVNjaGVtYSksbiksdGhpcy5fY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMud2lkdGgrInB4Iix0aGlzLl9jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0KyJweCIsdGhpcy5fc3ZnLmF0dHIoIndpZHRoIix0aGlzLndpZHRoKS5hdHRyKCJoZWlnaHQiLHRoaXMuaGVpZ2h0KSx0aGlzLl9zdmcuc2VsZWN0QWxsKCJnIikucmVtb3ZlKCksdGhpcy5fZHJhdygpfSwxMDApfV9kcmF3KCl7bGV0IHQ9Y3Mscj10aGlzO2lmKCF0aGlzLnNlc3Npb25Hcm91cHN8fHRoaXMuc2Vzc2lvbkdyb3Vwcy5sZW5ndGg9PTB8fCF0aGlzLnZpc2libGVTY2hlbWF8fHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg9PTApcmV0dXJuO2xldCBuPUlyKHQubnVtVmlzaWJsZUNvbHVtbnMoci52aXNpYmxlU2NoZW1hKSksaT1Jcih0Lm51bVZpc2libGVNZXRyaWNzKHIudmlzaWJsZVNjaGVtYSkpLG89ODAsYT01MCxzPTUsbD1RbSgpLmRvbWFpbihuKS5yYW5nZShbbytzLHRoaXMud2lkdGgtMS1zXSkucGFkZGluZ0lubmVyKC4xKSxjPVFtKCkuZG9tYWluKGkpLnJhbmdlKFt0aGlzLmhlaWdodC0xLXMtYSxzXSkucGFkZGluZ0lubmVyKC4xKSx1PWwuYmFuZHdpZHRoKCksaD1jLmJhbmR3aWR0aCgpLGY9bi5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCxbMCx1LTFdKSkscD1pLm1hcChjdD0+ci5fY2VsbFNjYWxlKGN0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKSxbaC0xLDBdKSksZD10aGlzLl9zdmcuc2VsZWN0QWxsKCIueC1heGlzIikuZGF0YShuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKGwoY3QpLDApKTtmdW5jdGlvbiBnKGN0KXtyZXR1cm4ieC1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIF8oY3Qpe3JldHVybiJ4LWxhYmVsLWNsaXAtcGF0aC0iK2N0fWQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixnKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0LWEvMiksZC5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLF8pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLHIuaGVpZ2h0LWEvMikuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsYS8yKSxkLmFwcGVuZCgiZyIpLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrZyhjdCkrIikiKS5lYWNoKGZ1bmN0aW9uKGN0KXtIdCh0aGlzKS5jYWxsKFMsWjkoZltjdF0pLnRpY2tTaXplKHIuaGVpZ2h0LWEpLHUsNDAsci5vcHRpb25zLmNvbHVtbnNbY3RdLnNjYWxlKX0pLGQuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1heGlzLWxhYmVsIiwhMCkuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIitfKGN0KSsiKSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigieCIsdS8yKS5hdHRyKCJ5IixyLmhlaWdodC0xLWEvNCkudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKS5hcHBlbmQoInRpdGxlIikudGV4dChjdD0+dC5zY2hlbWFWaXNpYmxlQ29sdW1uTmFtZShyLnZpc2libGVTY2hlbWEsY3QpKTtsZXQgeT10aGlzLl9zdmcuc2VsZWN0QWxsKCIueS1heGlzIikuZGF0YShpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcyIsITApLmF0dHIoInRyYW5zZm9ybSIsY3Q9PnQudHJhbnNsYXRlU3RyKHIud2lkdGgtMSxjKGN0KSkpO2Z1bmN0aW9uIHgoY3Qpe3JldHVybiJ5LWF4aXMtY2xpcC1wYXRoLSIrY3R9ZnVuY3Rpb24gYihjdCl7cmV0dXJuInktbGFiZWwtY2xpcC1wYXRoLSIrY3R9eS5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHgpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0oci53aWR0aC1vLzItMSkpLmF0dHIoInkiLC1zKS5hdHRyKCJ3aWR0aCIsci53aWR0aC1vLzIpLmF0dHIoImhlaWdodCIsaCsyKnMpLHkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixiKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtMSkpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixvLzIpLmF0dHIoImhlaWdodCIsaCkseS5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK3goY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLGxiKHBbY3RdKS50aWNrU2l6ZShyLndpZHRoLW8pLGgsMjAsci5vcHRpb25zLmNvbHVtbnNbY3QrdC5udW1WaXNpYmxlSFBhcmFtcyhyLnZpc2libGVTY2hlbWEpXS5zY2FsZSl9KSx5LmFwcGVuZCgiZyIpLmNsYXNzZWQoInktYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrYihjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLC0oci53aWR0aC1vLzQtMSkpLmF0dHIoInkiLGgvMikuYXR0cigidHJhbnNmb3JtIix0LnJvdGF0ZVN0cig5MCwtKHIud2lkdGgtby80LTEpLGgvMikpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQubWV0cmljTmFtZShyLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3NbY3RdKSk7ZnVuY3Rpb24gUyhjdCxYLGV0LGR0LHEpe2xldCBwdD1NYXRoLmZsb29yKGV0L2R0KSxodD1YLnNjYWxlKCk7aWYocT09PSJRVUFOVElMRSIpe2xldCB3dD1odC5xdWFudGlsZXMoKSxrdD1NYXRoLmNlaWwod3QubGVuZ3RoL3B0KTt3dD1JcigwLHd0Lmxlbmd0aCxrdCkubWFwKGllPT53dFtpZV0pLFgudGlja1ZhbHVlcyh3dCkudGlja0Zvcm1hdCh4bigiLS4yZyIpKX0ocT09PSJMSU5FQVIifHxxPT09IkxPRyIpJiZYLnRpY2tzKHB0KSxjdC5jYWxsKFgpLGN0LnNlbGVjdEFsbCgiLmRvbWFpbiIpLnJlbW92ZSgpLGN0LnNlbGVjdEFsbCgiLnRpY2sgbGluZSIpLmF0dHIoInN0cm9rZSIsIiNkZGQiKX1sZXQgQz10aGlzLl9zdmcuc2VsZWN0QWxsKCIuY2VsbCIpLmRhdGEocTkobixpKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjZWxsIiwhMCkuYXR0cigidHJhbnNmb3JtIiwoW2N0LFhdKT0+dC50cmFuc2xhdGVTdHIobChjdCksYyhYKSkpLFA9Qy5hcHBlbmQoImciKS5jbGFzc2VkKCJmcmFtZSIsITApLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC1zKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHUrMipzKS5hdHRyKCJoZWlnaHQiLGgrMipzKS5hdHRyKCJzdHJva2UiLCIjMDAwIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIiksaz1udWxsO3Iub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXghPT12b2lkIDAmJihrPU9uKCkuZG9tYWluKHRoaXMuX2NvbEV4dGVudCh0aGlzLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4KSkucmFuZ2UoW3RoaXMub3B0aW9ucy5taW5Db2xvcix0aGlzLm9wdGlvbnMubWF4Q29sb3JdKS5pbnRlcnBvbGF0ZShNXykpO2xldCBPPXIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXg9PT12b2lkIDA/KCk9PiJyZWQiOih7c2Vzc2lvbkdyb3VwOmN0fSk9PmsodGhpcy5fY29sVmFsdWUoY3Qsci5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpO2Z1bmN0aW9uIEQoY3QsWCl7cmV0dXJuIGZbWF0oci5fY29sVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEIoY3QsWCl7cmV0dXJuIHBbWF0oci5fbWV0cmljVmFsdWUoY3QsWCkpfWZ1bmN0aW9uIEkoY3QsWCl7bGV0IGV0PWN0LnNlbGVjdEFsbCgiLmRhdGEtbWFya2VyIikuZGF0YSgoW3B0LGh0XSk9PnIuc2Vzc2lvbkdyb3Vwcy5maWx0ZXIod3Q9PnIuX2NvbFZhbHVlKHd0LHB0KSE9PXZvaWQgMCYmci5fbWV0cmljVmFsdWUod3QsaHQpIT09dm9pZCAwKS5tYXAod3Q9Pih7Y29sOnB0LG1ldHJpYzpodCxzZXNzaW9uR3JvdXA6d3QseDpEKHd0LHB0KSx5OkIod3QsaHQpLHNlc3Npb25Hcm91cE1hcmtlcnM6bnVsbH0pKSkuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoImRhdGEtbWFya2VyIiwhMCkuYXR0cigiY3giLCh7eDpwdH0pPT5wdCkuYXR0cigiY3kiLCh7eTpwdH0pPT5wdCkuYXR0cigiciIsMikuYXR0cigiZmlsbCIsWCksZHQ9bmV3IE1hcDtyLnNlc3Npb25Hcm91cHMuZm9yRWFjaChwdD0+e2R0LnNldChwdCxbXSl9KSxldC5lYWNoKGZ1bmN0aW9uKHB0KXt2YXIgaHQ7KGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApKT09bnVsbHx8aHQucHVzaCh0aGlzKX0pLGV0LmVhY2gocHQ9PntsZXQgaHQ9ZHQuZ2V0KHB0LnNlc3Npb25Hcm91cCk7cHQuc2Vzc2lvbkdyb3VwTWFya2Vycz1uZXcgU2V0KGh0KX0pO2xldCBxPW4ubWFwKHB0PT5pLm1hcChodD0+ZXQuZmlsdGVyKHd0PT53dC5jb2w9PXB0JiZ3dC5tZXRyaWM9PWh0KSkpO3JldHVybltldCxxLGR0XX1sZXRbTCxSLEZdPUkoQy5hcHBlbmQoImciKSxPKTtmdW5jdGlvbiB6KGN0LFgpe2xldCBldD1bXTtyZXR1cm4gUltjdF1bWF0uZWFjaChmdW5jdGlvbigpe2V0LnB1c2godGhpcyl9KSx6aCgpLngoZHQ9Pkh0KGR0KS5kYXR1bSgpLngpLnkoZHQ9Pkh0KGR0KS5kYXR1bSgpLnkpLmFkZEFsbChldCl9bGV0IFU9bi5tYXAoY3Q9PmkubWFwKFg9PnooY3QsWCkpKSxXPW51bGw7YnQoKSYmKFc9Qy5maWx0ZXIoY3Q9PnkzLmlzRXF1YWwoY3Qsci5fYnJ1c2hlZENlbGxJbmRleCkpLGNvbnNvbGUuYXNzZXJ0KFcuc2l6ZSgpPT0xLFcpKTtsZXQgWj1uZXcgU2V0KEwubm9kZXMoKSk7cnQoKTtmdW5jdGlvbiBydCgpe2xldCBjdD1uZXcgU2V0KEwubm9kZXMoKSk7TXQoKXx8KGN0PW90KHIuX2JydXNoZWRDZWxsSW5kZXgsci5fYnJ1c2hTZWxlY3Rpb24pKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KGN0LFg9PiFaLmhhcyhYKSkpKS5hdHRyKCJmaWxsIixPKSxFcChBcnJheS5mcm9tKHQuZmlsdGVyU2V0KFosWD0+IWN0LmhhcyhYKSkpKS5hdHRyKCJmaWxsIiwiI2RkZCIpLFo9Y3R9ZnVuY3Rpb24gb3QoY3QsWCl7Y29uc29sZS5hc3NlcnQoY3QhPT1udWxsKSxjb25zb2xlLmFzc2VydChYIT09bnVsbCk7bGV0W2V0LGR0XT1jdCxxPW5ldyBTZXQ7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luUmVjdChVW2V0XVtkdF0sWFswXVswXSxYWzBdWzFdLFhbMV1bMF0sWFsxXVsxXSxwdD0+e0h0KHB0KS5kYXR1bSgpLnNlc3Npb25Hcm91cE1hcmtlcnMuZm9yRWFjaCh3dD0+e3EuYWRkKHd0KX0pfSkscX1sZXQgc3Q9R0woKS5leHRlbnQoW1stcysxLC1zKzFdLFt1LTErcy0xLGgtMStzLTFdXSkub24oInN0YXJ0IixmdW5jdGlvbigpe2J0KCkmJlcubm9kZSgpIT10aGlzJiZzdC5tb3ZlKFcsbnVsbCksU3QodGhpcyl9KS5vbigiYnJ1c2giLGZ1bmN0aW9uKCl7U3QodGhpcyl9KS5vbigiZW5kIixmdW5jdGlvbigpe1N0KHRoaXMpfSk7ZnVuY3Rpb24gU3QoY3Qpe2xldCBYPVVMKGN0KTshYnQoKSYmWD09PW51bGx8fGJ0KCkmJmN0PT09Vy5ub2RlKCkmJnkzLmlzRXF1YWwoWCxyLl9icnVzaFNlbGVjdGlvbil8fChyLl9icnVzaFNlbGVjdGlvbj1YLFghPT1udWxsPyhXPUh0KGN0KSxyLl9icnVzaGVkQ2VsbEluZGV4PVcuZGF0dW0oKSk6KFc9bnVsbCxyLl9icnVzaGVkQ2VsbEluZGV4PW51bGwpLHJ0KCkpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIHIuX2JydXNoZWRDZWxsSW5kZXghPT1udWxsJiZyLl9icnVzaFNlbGVjdGlvbiE9PW51bGx9ZnVuY3Rpb24gTXQoKXtyZXR1cm4hYnQoKXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMF09PT1yLl9icnVzaFNlbGVjdGlvblsxXVswXXx8ci5fYnJ1c2hTZWxlY3Rpb25bMF1bMV09PT1yLl9icnVzaFNlbGVjdGlvblsxXVsxXX1DLmNhbGwoc3QpLGJ0KCkmJnN0Lm1vdmUoVyxyLl9icnVzaFNlbGVjdGlvbik7bGV0IGx0PW51bGwsS3Q9bnVsbDt0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwIT09bnVsbCYmKEt0PUVwKEYuZ2V0KHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXApKS5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCEwKSksQy5vbigiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IGN0PWx0PT09S3Q/bnVsbDpsdDtpZihjdD09PUt0KXJldHVybjtLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITEpLEt0PWN0LEt0IT09bnVsbCYmS3QuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCk7bGV0IFg9S3Q9PT1udWxsP251bGw6S3QuZGF0dW0oKS5zZXNzaW9uR3JvdXA7ci5zZWxlY3RlZFNlc3Npb25Hcm91cD1YfSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIixmdW5jdGlvbihbY3QsWF0pe2xldFtldCxkdF09em8odGhpcykscT1fdChjdCxYLGV0LGR0LDIwKTtsdCE9PXEmJihsdCE9PW51bGwmJmx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMSksbHQ9cSxsdCE9PW51bGw/KGx0LmNsYXNzZWQoImNsb3Nlc3QtbWFya2VyIiwhMCksci5jbG9zZXN0U2Vzc2lvbkdyb3VwPWx0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwKTpyLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCl9KS5vbigibW91c2VsZWF2ZSIsZnVuY3Rpb24oW2N0LFhdKXtsdCE9PW51bGwmJihsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PW51bGwsci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSk7ZnVuY3Rpb24gX3QoY3QsWCxldCxkdCxxKXtsZXQgcHQ9MS8wLGh0PW51bGw7cmV0dXJuIHQucXVhZFRyZWVWaXNpdFBvaW50c0luRGlzayhVW2N0XVtYXSxldCxkdCxxLCh3dCxrdCk9PntpZihaLmhhcyh3dCkmJmt0PHB0KXtsZXQgaWU9SHQod3QpLmRhdHVtKCk7cHQ9a3QsaHQ9aWUuc2Vzc2lvbkdyb3VwfX0pLGh0PT09bnVsbD9udWxsOkVwKEYuZ2V0KGh0KSl9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiKiIpLmNsYXNzZWQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IiwhMCl9X2NlbGxTY2FsZSh0LHIpe2xldCBuPXRoaXMuX2NvbEV4dGVudCh0KSxpPU9uKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxJTkVBUiIpcmV0dXJuIGk7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTE9HIilyZXR1cm4gblswXTw9MCYmblsxXT49MD9pOmNjKCkuZG9tYWluKG4pLnJhbmdlKHIpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IlFVQU5USUxFIil7bGV0IG89KHJbMV0tclswXSkvMTksYT1JcigyMCkubWFwKHM9PnJbMF0rbypzKTtyZXR1cm4gZWcoKS5kb21haW4oeTMudW5pcSh0aGlzLnNlc3Npb25Hcm91cHMubWFwKHM9PnRoaXMuX2NvbFZhbHVlKHMsdCkpKSkucmFuZ2UoYSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJOT05fTlVNRVJJQyIpcmV0dXJuIHRnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChvPT50aGlzLl9jb2xWYWx1ZShvLHQpKS5zb3J0KCkpKS5yYW5nZShyKS5wYWRkaW5nKC4xKTt0aHJvdyJVbmtub3duIHNjYWxlIGZvciBjb2x1bW46ICIrdCsiLiBvcHRpb25zOiAiK3RoaXMub3B0aW9uc319X2NvbFZhbHVlKHQscil7cmV0dXJuIEJIKHRoaXMudmlzaWJsZVNjaGVtYSx0LHIpfV9tZXRyaWNWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fY29sRXh0ZW50KHQpe3JldHVybiBfUCh0aGlzLnZpc2libGVTY2hlbWEsdGhpcy5zZXNzaW9uR3JvdXBzLHQpfX07JG8udGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDxzdmcgaWQ9InN2ZyI+PC9zdmc+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICBzdmcgewogICAgICAgIGZvbnQ6IDEwcHggc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgdGV4dCB7CiAgICAgICAgZmlsbDogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAuZnJhbWUgcmVjdCB7CiAgICAgICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjbG9zZXN0IGRhdGEgcG9pbnQgbWFya2VyIHRvIHRoZSBtb3VzZSBwb2ludGVyLiBXZSB1c2UgIWltcG9ydGFudAogICAgICAgICB0byBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4KICAgICAgKi8KICAgICAgLmNsb3Nlc3QtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC8qIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGF0YSBwb2ludCBtYXJrZXIuIFdlIHVzZSAhaW1wb3J0YW50IHRvCiAgICAgICAgIG92ZXJyaWRlIHRoZSBpbmxpbmUgc3R5bGUgdGhhdCBzZXRzIHRoZSByZWd1bGFyIHN0eWxlIG9mIGEgbWFya2VyLiAqLwogICAgICAuc2VsZWN0ZWQtbWFya2VyIHsKICAgICAgICByOiA2ICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogIzBmMCAhaW1wb3J0YW50OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJ2aXNpYmxlU2NoZW1hIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSwkby5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJvcHRpb25zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsInNlbGVjdGVkU2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsImNsb3Nlc3RTZXNzaW9uR3JvdXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsSFRNTEVsZW1lbnQpXSwkby5wcm90b3R5cGUsIl9jb250YWluZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfc3ZnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwid2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sJG8ucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hlZENlbGxJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkby5wcm90b3R5cGUsIl9icnVzaFNlbGVjdGlvbiIsdm9pZCAwKTtFKFtCdCgic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInZpc2libGVTY2hlbWEuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfdmlzaWJsZVNjaGVtYUNoYW5nZWQiLG51bGwpO0UoW0J0KCJvcHRpb25zLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3JlZHJhdyIsbnVsbCk7JG89RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90IildLCRvKTt2YXIgZjE9Y2xhc3MgZXh0ZW5kcyBtdHtfY2xvc2VzdE9yU2VsZWN0ZWQodCxyKXtyZXR1cm4gdCE9PW51bGw/dDpyfX07ZjEudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHRoZSBzY2F0dGVyIHBsb3QgbWF0cml4CiAgICAgICAgICAgICBvdXRwdXRzIHRoZSBjb25maWd1cmVkIG9wdGlvbnMgdG8gdGhlIF9vcHRpb25zIHByb3BlcnR5LiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iY29udHJvbHMiCiAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIG9wdGlvbnM9Int7X29wdGlvbnN9fSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhbGUtYW5kLWNvbG9yLWNvbnRyb2xzPgogICAgICA8IS0tIFRoZSBhY3R1YWwgc2NhdHRlciBwbG90IG1hdHJpeCAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90CiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0icGxvdCIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXBsb3Q+CiAgICAgIDx0Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX2Nsb3Nlc3RPclNlbGVjdGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xvc2VzdEdyb3VwLCBfc2VsZWN0ZWRHcm91cCldXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXM+CiAgICAgIDwhLS0gU2hvd3Mgc2Vzc2lvbiBncm91cCBkZXRhaWxzIGZvciB0aGUgY2xpY2tlZCBtYXJrZXIuIC0tPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGlkPSJkZXRhaWxzIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgLnNlY3Rpb24gewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KICAgICAgI2NvbnRyb2xzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjcGxvdCB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3ZhbHVlcyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiAxMTVweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICNkZXRhaWxzIHsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC1iYXNpczogYXV0bzsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICB2YWFkaW4tc3BsaXQtbGF5b3V0IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZjEucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxmMS5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGYxLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtmMT1FKFt5dCgidGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciKV0sZjEpO3ZhciBYZj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zZWxlY3RlZFRhYj0wLHRoaXMuX3RhYmxlVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlRhYmxlIil9LHRoaXMuX3BhcmFsbGVsQ29vcmRzVGFiQ2xpY2tlZD0oKT0+e3RoaXMubG9nQWN0aW9uKCJUYWIgQ2xpY2tlZCIsIlBhcmFsbGVsIENvb3JkcyIpfSx0aGlzLl9zY2F0dGVyUGxvdE1hdHJpeFRhYkNsaWNrZWQ9KCk9Pnt0aGlzLmxvZ0FjdGlvbigiVGFiIENsaWNrZWQiLCJTY2F0dGVyIFBsb3QgTWF0cml4Iil9LHRoaXMubG9nQWN0aW9uPSh0LHIpPT57KHdpbmRvdy5nYXx8ZnVuY3Rpb24oKXt9KSgic2VuZCIse2hpdFR5cGU6ImV2ZW50IixldmVudENhdGVnb3J5OiJIUGFyYW1zIixldmVudEFjdGlvbjp0LGV2ZW50TGFiZWw6cn0pfSx0aGlzLmxvZ0FjdGlvbigiUGx1Z2luIExvYWQiKX19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIG9uLWNsaWNrPSJfdGFibGVUYWJDbGlja2VkIiB2aWV3LWlkPSJ0YWJsZS12aWV3Ij4KICAgICAgICAgICAgVEFCTEUgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfcGFyYWxsZWxDb29yZHNUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyIKICAgICAgICAgID4KICAgICAgICAgICAgUEFSQUxMRUwgQ09PUkRJTkFURVMgVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8cGFwZXItdGFiCiAgICAgICAgICAgIG9uLWNsaWNrPSJfc2NhdHRlclBsb3RNYXRyaXhUYWJDbGlja2VkIgogICAgICAgICAgICB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciCiAgICAgICAgICA+CiAgICAgICAgICAgIFNDQVRURVIgUExPVCBNQVRSSVggVklFVwogICAgICAgICAgPC9wYXBlci10YWI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWxwLWFuZC1mZWVkYmFjayI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tidWdSZXBvcnRVcmxdXSI+CiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWYkPSJbW2J1Z1JlcG9ydFVybF1dIgogICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiCiAgICAgICAgICAgICAgICByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpZD0iYnVnLXJlcG9ydCIKICAgICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJTZW5kIGEgYnVnIHJlcG9ydCBvciBmZWF0dXJlIHJlcXVlc3QiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIEJ1ZyBSZXBvcnQgLyBGZWF0dXJlIFJlcXVlc3QKICAgICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlbHBVcmxdXSI+CiAgICAgICAgICAgICAgPGEgaHJlZiQ9IltbaGVscFVybF1dIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4KICAgICAgICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICAgICAgICBpY29uPSJoZWxwLW91dGxpbmUiCiAgICAgICAgICAgICAgICAgIHRpdGxlPSJWaWV3IGRvY3VtZW50YXRpb24iCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvcGFwZXItdGFicz4KICAgICAgPC9wYXBlci10b29sYmFyPgogICAgICA8aXJvbi1wYWdlcyBzZWxlY3RlZD0iW1tfc2VsZWN0ZWRUYWJdXSIgY2xhc3M9ImZpdCB0YWItdmlldyI+CiAgICAgICAgPGRpdiBpZD0iMCIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy10YWJsZS12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgICAgZW5hYmxlLXNob3ctbWV0cmljcwogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXRhYmxlLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMSIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBpZD0iMiIgY2xhc3M9InRhYiI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtdmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLXBhZ2VzPgogICAgPC9wYXBlci1oZWFkZXItcGFuZWw+CgogICAgPHN0eWxlPgogICAgICAudGFiLXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICAudGFiLWJhciB7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKAogICAgICAgICAgLS10Yi10b29sYmFyLWJhY2tncm91bmQtY29sb3IsCiAgICAgICAgICB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKQogICAgICAgICk7CiAgICAgIH0KICAgICAgLnRhYiB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLXRhYnMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXItY29sb3I6IHdoaXRlOwogICAgICAgIC0tcGFwZXItdGFicy1jb250ZW50OiB7CiAgICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGYtaHBhcmFtcy10YWJsZS12aWV3IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLmhlbHAtYW5kLWZlZWRiYWNrIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsgLyogRW5zdXJlIHRoYXQgaWNvbnMgc3RheSBhbGlnbmVkICovCiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQogICAgICAjYnVnLXJlcG9ydCB7CiAgICAgICAgYm9yZGVyOiBzb2xpZCBibGFjazsKICAgICAgICBiYWNrZ3JvdW5kOiByZWQ7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkczsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWF4LXdpZHRoOiAxNTBweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayBhIHsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWGYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFhmLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWGYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFhmLnByb3RvdHlwZSwiX3NlbGVjdGVkVGFiIix2b2lkIDApO1hmPUUoW3l0KCJ0Zi1ocGFyYW1zLXNlc3Npb25zLXBhbmUiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxYZik7dmFyIHJoPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlbG9hZCgpe3RoaXMuJFsicXVlcnktcGFuZSJdLnJlbG9hZCgpfX07cmgudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dD4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgPHRmLWhwYXJhbXMtcXVlcnktcGFuZQogICAgICAgICAgaWQ9InF1ZXJ5LXBhbmUiCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgY29uZmlndXJhdGlvbj0ie3tfY29uZmlndXJhdGlvbn19IgogICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Int7X3Nlc3Npb25Hcm91cHN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtbm9uLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgICBkYXRhLWxvYWRlZC13aXRoLWVtcHR5LWhwYXJhbXM9Int7X2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zfX0iCiAgICAgICAgPgogICAgICAgIDwvdGYtaHBhcmFtcy1xdWVyeS1wYW5lPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIGhwYXJhbXMgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhwYXJhbXMgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgRXZlbnQgZmlsZXMgYXJlIHN0aWxsIGJlaW5nIGxvYWRlZCAodHJ5IHJlbG9hZGluZyB0aGlzIHBhZ2UpLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zXV0iPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZQogICAgICAgICAgICBpZD0ic2Vzc2lvbnMtcGFuZSIKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGhlbHAtdXJsPSJbW2hlbHBVcmxdXSIKICAgICAgICAgICAgYnVnLXJlcG9ydC11cmw9IltbYnVnUmVwb3J0VXJsXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW19jb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW19zZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICA+CiAgICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbnMtcGFuZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIGhwYXJhbXMtc3BsaXQtbGF5b3V0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIHdpZHRoOiAyMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtaW4td2lkdGg6IDEwJTsKICAgICAgfQoKICAgICAgLmNlbnRlciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsdTMpXSxyaC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scmgucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scmgucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scmgucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHJoLnByb3RvdHlwZSwiX2RhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7cmg9RShbeXQoInRmLWhwYXJhbXMtbWFpbiIpXSxyaCk7dmFyIGxocj1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgidGVuc29yYm9hcmRDb2xhYiIpPT09InRydWUiLGxWPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9iYWNrZW5kPW5ldyB1MyhuZXcgQWUsbGhyKX1yZWxvYWQoKXt0aGlzLiRbImhwYXJhbXMtbWFpbiJdLnJlbG9hZCgpfX07bFYudGVtcGxhdGU9UWAKICAgIDwhLS0gVGVuc29yQm9hcmQgZG9lcyBub3Qgc3BlY2lmeSBhbiBleHBlcmltZW50TmFtZS4gQ3VycmVudGx5IGl0IG9ubHkKICAgICAgICAgc3VwcG9ydHMgb25lIGV4cGVyaW1lbnQgcGVyIGludm9jYXRpb24uIC0tPgogICAgPHRmLWhwYXJhbXMtbWFpbgogICAgICBpZD0iaHBhcmFtcy1tYWluIgogICAgICBiYWNrZW5kPSJbW19iYWNrZW5kXV0iCiAgICAgIGV4cGVyaW1lbnQtbmFtZT0iIgogICAgPgogICAgPC90Zi1ocGFyYW1zLW1haW4+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxsVi5wcm90b3R5cGUsIl9iYWNrZW5kIix2b2lkIDApO2xWPUUoW3l0KCJ0Zi1ocGFyYW1zLWRhc2hib2FyZCIpXSxsVik7dmFyIHAxPUVlKE9lKCksMSk7dmFyIF9uPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdHVhbFNpemU9ITEsdGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudD0uNSx0aGlzLmNvbnRyYXN0UGVyY2VudGFnZT0wLHRoaXMuX21ldGFkYXRhQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9pbWFnZUNhbmNlbGxlcj1uZXcgYW4sdGhpcy5fc3RlcHM9W10sdGhpcy5faXNJbWFnZUxvYWRpbmc9ITF9Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1nZXQgX2hhc0F0TGVhc3RPbmVTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfWdldCBfaGFzTXVsdGlwbGVTdGVwcygpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXt2YXIgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1nZXQgX21heFN0ZXBJbmRleCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiB0Lmxlbmd0aC0xfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy5vZlNhbXBsZXM7cmV0dXJuIHQ+MX1fZ2V0QXJpYUV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuYWN0dWFsU2l6ZT8idHJ1ZSI6ImZhbHNlIn1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixzYW1wbGU6dGhpcy5zYW1wbGV9KSxyPV9lKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi9pbWFnZXMiLHQpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsdC53YWxsX3RpbWUpO2xldCBuPV9lKCkucGx1Z2luUm91dGVGb3JTcmMoImltYWdlcyIsIi9pbmRpdmlkdWFsSW1hZ2UiLHIpO3JldHVybnt3YWxsX3RpbWU6bmV3IERhdGUodC53YWxsX3RpbWUqMWUzKSxzdGVwOnQuc3RlcCx1cmw6bn19X3VwZGF0ZUltYWdlVXJsKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXAscj10aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50LG49dGhpcy5jb250cmFzdFBlcmNlbnRhZ2U7aWYoIXQpcmV0dXJuO2xldCBpPW5ldyBJbWFnZTt0aGlzLl9pbWFnZUNhbmNlbGxlci5jYW5jZWxBbGwoKSxpLm9ubG9hZD1pLm9uZXJyb3I9dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsbGFibGUobz0+e2lmKG8uY2FuY2VsbGVkKXJldHVybjtsZXQgYT10aGlzLiQkKCIjbWFpbi1pbWFnZS1jb250YWluZXIiKTthJiYoYS50ZXh0Q29udGVudD0iIix6dChhKS5hcHBlbmRDaGlsZChpKSksdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITEpfSkuYmluZCh0aGlzKSxpLnN0eWxlLmZpbHRlcj1gY29udHJhc3QoJHtufSUpIGAsaS5zdHlsZS5maWx0ZXIrPWBicmlnaHRuZXNzKCR7cn0pYCx0aGlzLnNldCgiX2lzSW1hZ2VMb2FkaW5nIiwhMCksaS5zcmM9dC51cmx9X2hhbmRsZVRhcCh0KXt0aGlzLnNldCgiYWN0dWFsU2l6ZSIsIXRoaXMuYWN0dWFsU2l6ZSl9X3RvTG9jYWxlU3RyaW5nKHQpe3JldHVybiB0LnRvTG9jYWxlU3RyaW5nKCl9fTtfbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfc2FtcGxlVGV4dF1dIG9mIFtbb2ZTYW1wbGVzXV08L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNBdExlYXN0T25lU3RlcF1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbX3RvTG9jYWxlU3RyaW5nKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQgZGF0ZXRpbWUiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc0ltYWdlTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzXV0iPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgIGlkPSJzdGVwcyIKICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgICAgbWF4PSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8IS0tIFNlbWFudGljYWxseSBhIGJ1dHRvbiBidXQgPGltZz4gaW5zaWRlIGEgPGJ1dHRvbj4gZGlzYWxsb3dzIHVzZXIgdG8gZG8KICAgIGFuIGludGVyZXN0aW5nIG9wZXJhdGlvbiBsaWtlICJDb3B5IEltYWdlIiBpbiBub24tQ2hyb21pdW0gYnJvd3NlcnMuIC0tPgogICAgPGEKICAgICAgaWQ9Im1haW4taW1hZ2UtY29udGFpbmVyIgogICAgICByb2xlPSJidXR0b24iCiAgICAgIGFyaWEtbGFiZWw9IlRvZ2dsZSBhY3R1YWwgc2l6ZSIKICAgICAgYXJpYS1leHBhbmRlZCQ9IltbX2dldEFyaWFFeHBhbmRlZChhY3R1YWxTaXplKV1dIgogICAgICBvbi10YXA9Il9oYW5kbGVUYXAiCiAgICA+PC9hPgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAvKiogTWFrZSBidXR0b24gYSBkaXYuICovCiAgICAgIGJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IEdldCByaWQgb2YgZG90dGVkIGxpbmUgaW5zaWRlIGJ1dHRvbi4gKi8KICAgICAgYnV0dG9uOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBib3JkZXI6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLyoqIEZpcmVmb3g6IFNpbXVsYXRlIENocm9tZSdzIG91dGVyIGdsb3cgb24gYnV0dG9uIHdoZW4gZm9jdXNlZC4gKi8KICAgICAgYnV0dG9uOi1tb3otZm9jdXNyaW5nIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDBweCAwcHggMXB4IDJweCBIaWdobGlnaHQ7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzUwcHg7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDAgMTVweCA0MHB4IDA7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLyoqIFdoZW4gYWN0dWFsIHNpemUgc2hvd24gaXMgb24sIHVzZSB0aGUgYWN0dWFsIGltYWdlIHdpZHRoLiAqLwogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgIH0KCiAgICAgIDpob3N0KFthY3R1YWwtc2l6ZV0pICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1zcGlubmVyLWxpdGUgewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207CiAgICAgICAgLS1wYXBlci1zcGlubmVyLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKgogICAgICAgICAqIDMxIGNvbWVzIGZyb20gYWRkaW5nIGEgcGFkZGluZyBvZiAxNXB4IGZyb20gYm90aCBzaWRlcyBvZiB0aGUKICAgICAgICAgKiBwYXBlci1zbGlkZXIsIHN1YnRyYWN0aW5nIDFweCBzbyB0aGF0IHRoZSBzbGlkZXIgd2lkdGggYWxpZ25zCiAgICAgICAgICogd2l0aCB0aGUgaW1hZ2UgKHRoZSBsYXN0IHNsaWRlciBtYXJrZXIgdGFrZXMgdXAgMXB4KSwgYW5kCiAgICAgICAgICogYWRkaW5nIDJweCB0byBhY2NvdW50IGZvciBhIGJvcmRlciBvZiAxcHggb24gYm90aCBzaWRlcyBvZgogICAgICAgICAqIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgICAgICAgKi8KICAgICAgICB3aWR0aDogY2FsYygxMDAlICsgMzFweCk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CgogICAgICAjbWFpbi1pbWFnZS1jb250YWluZXIgewogICAgICAgIG1heC1oZWlnaHQ6IDEwMjRweDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sX24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJzYW1wbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJvZlNhbXBsZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxfbi5wcm90b3R5cGUsImFjdHVhbFNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxfbi5wcm90b3R5cGUsImNvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLF9uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfbWV0YWRhdGFDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sX24ucHJvdG90eXBlLCJfaW1hZ2VDYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxfbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJfaXNJbWFnZUxvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJzYW1wbGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9zYW1wbGVUZXh0IixudWxsKTtFKFtSdCgib2ZTYW1wbGVzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU2FtcGxlcyIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAiLCJicmlnaHRuZXNzQWRqdXN0bWVudCIsImNvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sX24ucHJvdG90eXBlLCJfdXBkYXRlSW1hZ2VVcmwiLG51bGwpO19uPUUoW3l0KCJ0Zi1pbWFnZS1sb2FkZXIiKV0sX24pO3ZhciBJbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2RlZmF1bHRDb250cmFzdFBlcmNlbnRhZ2U9MTAwLHRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PTEsdGhpcy5fY29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWV9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkSW1hZ2VzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihwMS5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49cDEubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSW1hZ2VzKCl7dmFyIHQ7KHQ9dGhpcy5yb290KT09bnVsbHx8dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1pbWFnZS1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X3Jlc2V0QnJpZ2h0bmVzcygpe3RoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1fcmVzZXRDb250cmFzdCgpe3RoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfYnJpZ2h0bmVzc0lzRGVmYXVsdCgpe3ZhciB0PXRoaXMuX2JyaWdodG5lc3NBZGp1c3RtZW50O3JldHVybiB0PT09dGhpcy5fZGVmYXVsdEJyaWdodG5lc3NBZGp1c3RtZW50fWdldCBfY29udHJhc3RJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U7cmV0dXJuIHQ9PT10aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtsZXQgbz1wMS5tYXBWYWx1ZXModCxjPT5PYmplY3Qua2V5cyhjKSksYT1RbChvLHIsbik7ZnVuY3Rpb24gcyhjKXtsZXQgdT10W2MucnVuXVtjLnRhZ10uc2FtcGxlcztyZXR1cm4gcDEucmFuZ2UodSkubWFwKGg9Pk9iamVjdC5hc3NpZ24oe30sYyx7c2FtcGxlOmgsb2ZTYW1wbGVzOnV9KSl9cmV0dXJuIGEubWFwKGM9Pk9iamVjdC5hc3NpZ24oe30sYyx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGMuaXRlbXMubWFwKHMpKX0pKX1fdGFnTWV0YWRhdGEodCxyLG4pe3JldHVybiB0W3JdW25dfX07SW8udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJsaW5lLWl0ZW0iPgogICAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19hY3R1YWxTaXplfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBhY3R1YWwgaW1hZ2Ugc2l6ZTwvcGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8aDMgY2xhc3M9InRvb2x0aXAtY29udGFpbmVyIj5CcmlnaHRuZXNzIGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iMiIKICAgICAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgICAgICBwaW4KICAgICAgICAgICAgICAgIHN0ZXA9IjAuMDEiCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfYnJpZ2h0bmVzc0FkanVzdG1lbnR9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRCcmlnaHRuZXNzIgogICAgICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2JyaWdodG5lc3NJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+Q29udHJhc3QgYWRqdXN0bWVudDwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICAgICAgbWF4PSI1MDAiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2NvbnRyYXN0UGVyY2VudGFnZX19IgogICAgICAgICAgICAgICAgaW1tZWRpYXRlLXZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IngtYnV0dG9uIgogICAgICAgICAgICAgICAgb24tdGFwPSJfcmVzZXRDb250cmFzdCIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19jb250cmFzdElzRGVmYXVsdF1dIgogICAgICAgICAgICAgICAgPlJlc2V0PC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBpbWFnZSBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaW1hZ2UgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWltYWdlLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIG9mLXNhbXBsZXM9IltbaXRlbS5vZlNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgYWN0dWFsLXNpemU9IltbX2FjdHVhbFNpemVdXSIKICAgICAgICAgICAgICAgICAgYnJpZ2h0bmVzcy1hZGp1c3RtZW50PSJbW19icmlnaHRuZXNzQWRqdXN0bWVudF1dIgogICAgICAgICAgICAgICAgICBjb250cmFzdC1wZXJjZW50YWdlPSJbW19jb250cmFzdFBlcmNlbnRhZ2VdXSIKICAgICAgICAgICAgICAgID48L3RmLWltYWdlLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1zbGlkZXIgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdW5zZXQ7CiAgICAgIH0KICAgICAgLngtYnV0dG9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBjb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgLS1wYXBlci1zbGlkZXItYWN0aXZlLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItbWFya2Vycy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLXNsaWRlci1waW4tc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9hY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2JyaWdodG5lc3NBZGp1c3RtZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLElvLnByb3RvdHlwZSwiX2NvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9icmlnaHRuZXNzQWRqdXN0bWVudCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzSXNEZWZhdWx0IixudWxsKTtFKFtSdCgiX2NvbnRyYXN0UGVyY2VudGFnZSIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jb250cmFzdElzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLElvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0lvPUUoW3l0KCJ0Zi1pbWFnZS1kYXNoYm9hcmQiKV0sSW8pO3ZhciBzeD1FZShPZSgpLDEpO3ZhciBkMTsoZnVuY3Rpb24oZSl7ZVtlLkNBTkNFTExFRD0xXT0iQ0FOQ0VMTEVEIn0pKGQxfHwoZDE9e30pKTt2YXIgY1Y7KGZ1bmN0aW9uKGUpe2VbZS5WRVJURVg9MV09IlZFUlRFWCIsZVtlLkZBQ0U9Ml09IkZBQ0UiLGVbZS5DT0xPUj0zXT0iQ09MT1IifSkoY1Z8fChjVj17fSkpO3ZhciBxY3Q7KGZ1bmN0aW9uKGUpe2UuVkVSVEVYPSJmbG9hdDMyIixlLkZBQ0U9ImludDMyIixlLkNPTE9SPSJ1aW50OCJ9KShxY3R8fChxY3Q9e30pKTt2YXIgSVA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLl9yZXF1ZXN0TWFuYWdlcj10fXJlbG9hZCh0LHIsbil7cmV0dXJuIHRoaXMuX2NhbmNlbGxlci5jYW5jZWxBbGwoKSx0aGlzLl9mZXRjaE1ldGFkYXRhKHQscixuKX1fZmV0Y2hEYXRhQnlTdGVwKHQscixuLGksbyxhKXtsZXQgcz1fZSgpLnBsdWdpblJvdXRlKCJtZXNoIiwiL2RhdGEiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LGNvbnRlbnRfdHlwZTpuLHNhbXBsZTpTdHJpbmcoaSksc3RlcDpTdHJpbmcobyl9KSksbD1mdW5jdGlvbih1KXtsZXQgZj1bXTtmb3IobGV0IHA9MDtwPHUubGVuZ3RoLzM7cCsrKXtsZXQgZD1bXTtmb3IobGV0IGc9MDtnPDM7ZysrKWQucHVzaCh1W3AqMytnXSk7Zi5wdXNoKGQpfXJldHVybiBmfSxjPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh1PT57aWYodS5jYW5jZWxsZWQpcmV0dXJuIFByb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pO2xldCBoPXUudmFsdWU7c3dpdGNoKG4pe2Nhc2UiVkVSVEVYIjphLnZlcnRpY2VzPWwobmV3IEZsb2F0MzJBcnJheShoKSk7YnJlYWs7Y2FzZSJGQUNFIjphLmZhY2VzPWwobmV3IEludDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiQ09MT1IiOmEuY29sb3JzPWwobmV3IFVpbnQ4QXJyYXkoaCkpO2JyZWFrfXJldHVybiBhfSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLmZldGNoKHMse21ldGhvZDoiR0VUIixoZWFkZXJzOntyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixjb250ZW50VHlwZTpxY3Rbbl19fSkudGhlbih1PT51LmFycmF5QnVmZmVyKCkpLnRoZW4oYyl9ZmV0Y2hEYXRhKHQscixuLGkpe2xldCBvPVtdLGE9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoY1YpLmZvckVhY2gocz0+e2xldCBsPTE8PGNWW3NdO3QuY29tcG9uZW50cyZsJiZvLnB1c2godGhpcy5fZmV0Y2hEYXRhQnlTdGVwKHIsbixzLGksdC5zdGVwLGEpKX0pLFByb21pc2UuYWxsKG8pfV9mZXRjaE1ldGFkYXRhKHQscixuKXt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IGk9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9tZXNoZXMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzpyLHJ1bjp0LHNhbXBsZTpufSkpLG89dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGE9PmEuY2FuY2VsbGVkP1Byb21pc2UucmVqZWN0KHtjb2RlOmQxLkNBTkNFTExFRCxtZXNzYWdlOiJSZXNwb25zZSB3YXMgaW52YWxpZGF0ZWQuIn0pOmEudmFsdWUpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChpKS50aGVuKGE9PmEuanNvbigpKS50aGVuKG8pLnRoZW4odGhpcy5fcHJvY2Vzc01ldGFkYXRhLmJpbmQodGhpcykpfV9wcm9jZXNzTWV0YWRhdGEodCl7aWYoIXQpcmV0dXJuO2xldCByPW5ldyBNYXA7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV07ci5oYXMoby5zdGVwKXx8ci5zZXQoby5zdGVwLFtdKSxyLmdldChvLnN0ZXApLnB1c2gobyl9bGV0IG49W107cmV0dXJuIHIuZm9yRWFjaChpPT57bGV0IG89dGhpcy5fY3JlYXRlU3RlcERhdHVtKGlbMF0pO24ucHVzaChvKX0pLG59X2NyZWF0ZVN0ZXBEYXR1bSh0KXtyZXR1cm57d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsY29uZmlnOnQuY29uZmlnLGNvbnRlbnRfdHlwZTp0LmNvbnRlbnRfdHlwZSxjb21wb25lbnRzOnQuY29tcG9uZW50c319fTt2YXIgd009e307S3Mod00se0FDRVNGaWxtaWNUb25lTWFwcGluZzooKT0+Y2ZlLEFkZEVxdWF0aW9uOigpPT5NMSxBZGRPcGVyYXRpb246KCk9Pm9mZSxBZGRpdGl2ZUFuaW1hdGlvbkJsZW5kTW9kZTooKT0+a2h0LEFkZGl0aXZlQmxlbmRpbmc6KCk9Pk11dCxBbHBoYUZvcm1hdDooKT0+Z2ZlLEFsd2F5c0RlcHRoOigpPT5KaGUsQWx3YXlzU3RlbmNpbEZ1bmM6KCk9PmtmZSxBbWJpZW50TGlnaHQ6KCk9Pkw2LEFtYmllbnRMaWdodFByb2JlOigpPT56VSxBbmltYXRpb25DbGlwOigpPT5RMSxBbmltYXRpb25Mb2FkZXI6KCk9Pm9odCxBbmltYXRpb25NaXhlcjooKT0+VlUsQW5pbWF0aW9uT2JqZWN0R3JvdXA6KCk9PkhVLEFuaW1hdGlvblV0aWxzOigpPT5ZbixBcmNDdXJ2ZTooKT0+bDYsQXJyYXlDYW1lcmE6KCk9Pm42LEFycm93SGVscGVyOigpPT5NaHQsQXVkaW86KCk9PkQ2LEF1ZGlvQW5hbHlzZXI6KCk9PkZVLEF1ZGlvQ29udGV4dDooKT0+emh0LEF1ZGlvTGlzdGVuZXI6KCk9PmNodCxBdWRpb0xvYWRlcjooKT0+RFUsQXhlc0hlbHBlcjooKT0+dk0sQXhpc0hlbHBlcjooKT0+VzByLEJhY2tTaWRlOigpPT5JaSxCYXNpY0RlcHRoUGFja2luZzooKT0+UGZlLEJhc2ljU2hhZG93TWFwOigpPT51aHIsQmluYXJ5VGV4dHVyZUxvYWRlcjooKT0+SzByLEJvbmU6KCk9PnNNLEJvb2xlYW5LZXlmcmFtZVRyYWNrOigpPT5hbSxCb3VuZGluZ0JveEhlbHBlcjooKT0+WTByLEJveDI6KCk9PiQwLEJveDM6KCk9PnRhLEJveDNIZWxwZXI6KCk9PndodCxCb3hCdWZmZXJHZW9tZXRyeTooKT0+UWYsQm94R2VvbWV0cnk6KCk9PlFmLEJveEhlbHBlcjooKT0+eU0sQnVmZmVyQXR0cmlidXRlOigpPT5KZSxCdWZmZXJHZW9tZXRyeTooKT0+UGUsQnVmZmVyR2VvbWV0cnlMb2FkZXI6KCk9PlJVLEJ5dGVUeXBlOigpPT5oZmUsQ2FjaGU6KCk9PnR4LENhbWVyYTooKT0+UjEsQ2FtZXJhSGVscGVyOigpPT5iaHQsQ2FudmFzUmVuZGVyZXI6KCk9PkowcixDYW52YXNUZXh0dXJlOigpPT54VSxDYXRtdWxsUm9tQ3VydmUzOigpPT5jNixDaW5lb25Ub25lTWFwcGluZzooKT0+bGZlLENpcmNsZUJ1ZmZlckdlb21ldHJ5OigpPT5GMSxDaXJjbGVHZW9tZXRyeTooKT0+RjEsQ2xhbXBUb0VkZ2VXcmFwcGluZzooKT0+Sm8sQ2xvY2s6KCk9Pm1NLENvbG9yOigpPT5uZSxDb2xvcktleWZyYW1lVHJhY2s6KCk9Pk02LENvbXByZXNzZWRUZXh0dXJlOigpPT5hNixDb21wcmVzc2VkVGV4dHVyZUxvYWRlcjooKT0+YWh0LENvbmVCdWZmZXJHZW9tZXRyeTooKT0+QjEsQ29uZUdlb21ldHJ5OigpPT5CMSxDdWJlQ2FtZXJhOigpPT5KMyxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6KCk9Pm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzooKT0+aXgsQ3ViZVRleHR1cmU6KCk9PkgwLEN1YmVUZXh0dXJlTG9hZGVyOigpPT5UVSxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzooKT0+eE0sQ3ViZVVWUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pno2LEN1YmljQmV6aWVyQ3VydmU6KCk9PmNNLEN1YmljQmV6aWVyQ3VydmUzOigpPT51NixDdWJpY0ludGVycG9sYW50OigpPT5TVSxDdWxsRmFjZUJhY2s6KCk9PlN1dCxDdWxsRmFjZUZyb250OigpPT56aGUsQ3VsbEZhY2VGcm9udEJhY2s6KCk9PmNocixDdWxsRmFjZU5vbmU6KCk9Pk9oZSxDdXJ2ZTooKT0+ZnMsQ3VydmVQYXRoOigpPT53VSxDdXN0b21CbGVuZGluZzooKT0+QmhlLEN1c3RvbVRvbmVNYXBwaW5nOigpPT51ZmUsQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kZXJHZW9tZXRyeTooKT0+b20sQ3lsaW5kcmljYWw6KCk9Pm1odCxEYXRhVGV4dHVyZTooKT0+SmQsRGF0YVRleHR1cmUyREFycmF5OigpPT50TSxEYXRhVGV4dHVyZTNEOigpPT5yNixEYXRhVGV4dHVyZUxvYWRlcjooKT0+Q1UsRGF0YVV0aWxzOigpPT5UaHQsRGVjcmVtZW50U3RlbmNpbE9wOigpPT5iaHIsRGVjcmVtZW50V3JhcFN0ZW5jaWxPcDooKT0+U2hyLERlZmF1bHRMb2FkaW5nTWFuYWdlcjooKT0+dHBlLERlcHRoRm9ybWF0OigpPT56MCxEZXB0aFN0ZW5jaWxGb3JtYXQ6KCk9PmsxLERlcHRoVGV4dHVyZTooKT0+bk0sRGlyZWN0aW9uYWxMaWdodDooKT0+STYsRGlyZWN0aW9uYWxMaWdodEhlbHBlcjooKT0+eGh0LERpc2NyZXRlSW50ZXJwb2xhbnQ6KCk9Pk1VLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5IMSxEb2RlY2FoZWRyb25HZW9tZXRyeTooKT0+SDEsRG91YmxlU2lkZTooKT0+TDEsRHN0QWxwaGFGYWN0b3I6KCk9PlloZSxEc3RDb2xvckZhY3RvcjooKT0+WGhlLER5bmFtaWNCdWZmZXJBdHRyaWJ1dGU6KCk9PkQwcixEeW5hbWljQ29weVVzYWdlOigpPT56aHIsRHluYW1pY0RyYXdVc2FnZTooKT0+WTMsRHluYW1pY1JlYWRVc2FnZTooKT0+TmhyLEVkZ2VzR2VvbWV0cnk6KCk9PnM2LEVkZ2VzSGVscGVyOigpPT5qMHIsRWxsaXBzZUN1cnZlOigpPT5WMSxFcXVhbERlcHRoOigpPT50ZmUsRXF1YWxTdGVuY2lsRnVuYzooKT0+Q2hyLEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOigpPT5ZUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzooKT0+alAsRXVsZXI6KCk9PnRtLEV2ZW50RGlzcGF0Y2hlcjooKT0+VXMsRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OigpPT5oaCxFeHRydWRlR2VvbWV0cnk6KCk9PmhoLEZhY2VDb2xvcnM6KCk9Pk0wcixGaWxlTG9hZGVyOigpPT5KYyxGbGF0U2hhZGluZzooKT0+QWh0LEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0MzJBdHRyaWJ1dGU6KCk9PnEwcixGbG9hdDMyQnVmZmVyQXR0cmlidXRlOigpPT54ZSxGbG9hdDY0QXR0cmlidXRlOigpPT5HMHIsRmxvYXQ2NEJ1ZmZlckF0dHJpYnV0ZTooKT0+bVUsRmxvYXRUeXBlOigpPT5qZCxGb2c6KCk9PnoxLEZvZ0V4cDI6KCk9Pk8xLEZvbnQ6KCk9Pm9fcixGb250TG9hZGVyOigpPT5pX3IsRnJhbWVidWZmZXJUZXh0dXJlOigpPT52VSxGcm9udFNpZGU6KCk9PkkxLEZydXN0dW06KCk9Pk4xLEdMQnVmZmVyQXR0cmlidXRlOigpPT5xVSxHTFNMMTooKT0+QmhyLEdMU0wzOigpPT5LdXQsR3JlYXRlckRlcHRoOigpPT5yZmUsR3JlYXRlckVxdWFsRGVwdGg6KCk9PmVmZSxHcmVhdGVyRXF1YWxTdGVuY2lsRnVuYzooKT0+TGhyLEdyZWF0ZXJTdGVuY2lsRnVuYzooKT0+UGhyLEdyaWRIZWxwZXI6KCk9PllVLEdyb3VwOigpPT5YZCxIYWxmRmxvYXRUeXBlOigpPT5DMSxIZW1pc3BoZXJlTGlnaHQ6KCk9PlQ2LEhlbWlzcGhlcmVMaWdodEhlbHBlcjooKT0+eWh0LEhlbWlzcGhlcmVMaWdodFByb2JlOigpPT5PVSxJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5HMSxJY29zYWhlZHJvbkdlb21ldHJ5OigpPT5HMSxJbWFnZUJpdG1hcExvYWRlcjooKT0+TlUsSW1hZ2VMb2FkZXI6KCk9PmV4LEltYWdlVXRpbHM6KCk9PktmLEltbWVkaWF0ZVJlbmRlck9iamVjdDooKT0+YV9yLEluY3JlbWVudFN0ZW5jaWxPcDooKT0+eGhyLEluY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PndocixJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnJtLEluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5OigpPT5ONixJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+VVUsSW5zdGFuY2VkTWVzaDooKT0+aTYsSW50MTZBdHRyaWJ1dGU6KCk9PkIwcixJbnQxNkJ1ZmZlckF0dHJpYnV0ZTooKT0+ZlUsSW50MzJBdHRyaWJ1dGU6KCk9PlYwcixJbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+cFUsSW50OEF0dHJpYnV0ZTooKT0+TzByLEludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLEludFR5cGU6KCk9PnBmZSxJbnRlcmxlYXZlZEJ1ZmZlcjooKT0+ZW0sSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6KCk9PnRwLEludGVycG9sYW50OigpPT5maCxJbnRlcnBvbGF0ZURpc2NyZXRlOigpPT5LUCxJbnRlcnBvbGF0ZUxpbmVhcjooKT0+WlAsSW50ZXJwb2xhdGVTbW9vdGg6KCk9PnJVLEludmVydFN0ZW5jaWxPcDooKT0+TWhyLEpTT05Mb2FkZXI6KCk9PlEwcixLZWVwU3RlbmNpbE9wOigpPT5uVSxLZXlmcmFtZVRyYWNrOigpPT5EbCxMT0Q6KCk9Pl9VLExhdGhlQnVmZmVyR2VvbWV0cnk6KCk9PlcxLExhdGhlR2VvbWV0cnk6KCk9PlcxLExheWVyczooKT0+WDMsTGVuc0ZsYXJlOigpPT5lX3IsTGVzc0RlcHRoOigpPT5RaGUsTGVzc0VxdWFsRGVwdGg6KCk9PmlVLExlc3NFcXVhbFN0ZW5jaWxGdW5jOigpPT5BaHIsTGVzc1N0ZW5jaWxGdW5jOigpPT5UaHIsTGlnaHQ6KCk9Pk9sLExpZ2h0UHJvYmU6KCk9PnJ4LExpbmU6KCk9PmNoLExpbmUzOigpPT5HVSxMaW5lQmFzaWNNYXRlcmlhbDooKT0+R2ksTGluZUN1cnZlOigpPT5VMSxMaW5lQ3VydmUzOigpPT5iVSxMaW5lRGFzaGVkTWF0ZXJpYWw6KCk9Pnc2LExpbmVMb29wOigpPT5vNixMaW5lUGllY2VzOigpPT53MHIsTGluZVNlZ21lbnRzOigpPT5BYSxMaW5lU3RyaXA6KCk9PmIwcixMaW5lYXJFbmNvZGluZzooKT0+UWQsTGluZWFyRmlsdGVyOigpPT5paSxMaW5lYXJJbnRlcnBvbGFudDooKT0+UzYsTGluZWFyTWlwTWFwTGluZWFyRmlsdGVyOigpPT5taHIsTGluZWFyTWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZGhyLExpbmVhck1pcG1hcExpbmVhckZpbHRlcjooKT0+b3gsTGluZWFyTWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+TGh0LExpbmVhclRvbmVNYXBwaW5nOigpPT5hZmUsTG9hZGVyOigpPT5lYSxMb2FkZXJVdGlsczooKT0+ZE0sTG9hZGluZ01hbmFnZXI6KCk9PkU2LExvb3BPbmNlOigpPT5FZmUsTG9vcFBpbmdQb25nOigpPT5DZmUsTG9vcFJlcGVhdDooKT0+VGZlLEx1bWluYW5jZUFscGhhRm9ybWF0OigpPT55ZmUsTHVtaW5hbmNlRm9ybWF0OigpPT5fZmUsTU9VU0U6KCk9PkswLE1hdGVyaWFsOigpPT5xaSxNYXRlcmlhbExvYWRlcjooKT0+a1UsTWF0aDooKT0+UWhyLE1hdGhVdGlsczooKT0+UWhyLE1hdHJpeDM6KCk9PmtpLE1hdHJpeDQ6KCk9Pk1lLE1heEVxdWF0aW9uOigpPT5BdXQsTWVzaDooKT0+dGksTWVzaEJhc2ljTWF0ZXJpYWw6KCk9PnNoLE1lc2hEZXB0aE1hdGVyaWFsOigpPT5lTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDooKT0+ck0sTWVzaEZhY2VNYXRlcmlhbDooKT0+VDByLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6KCk9Png2LE1lc2hNYXRjYXBNYXRlcmlhbDooKT0+YjYsTWVzaE5vcm1hbE1hdGVyaWFsOigpPT52NixNZXNoUGhvbmdNYXRlcmlhbDooKT0+XzYsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6KCk9Pmc2LE1lc2hTdGFuZGFyZE1hdGVyaWFsOigpPT5wTSxNZXNoVG9vbk1hdGVyaWFsOigpPT55NixNaW5FcXVhdGlvbjooKT0+Q3V0LE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6KCk9PiRQLE1peE9wZXJhdGlvbjooKT0+aWZlLE11bHRpTWF0ZXJpYWw6KCk9PkMwcixNdWx0aXBseUJsZW5kaW5nOigpPT5UdXQsTXVsdGlwbHlPcGVyYXRpb246KCk9Pk82LE5lYXJlc3RGaWx0ZXI6KCk9PkxpLE5lYXJlc3RNaXBNYXBMaW5lYXJGaWx0ZXI6KCk9PnBocixOZWFyZXN0TWlwTWFwTmVhcmVzdEZpbHRlcjooKT0+ZmhyLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9PmFVLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOigpPT5vVSxOZXZlckRlcHRoOigpPT5aaGUsTmV2ZXJTdGVuY2lsRnVuYzooKT0+RWhyLE5vQmxlbmRpbmc6KCk9PiRkLE5vQ29sb3JzOigpPT5TMHIsTm9Ub25lTWFwcGluZzooKT0+S2QsTm9ybWFsQW5pbWF0aW9uQmxlbmRNb2RlOigpPT4kVSxOb3JtYWxCbGVuZGluZzooKT0+VjMsTm90RXF1YWxEZXB0aDooKT0+bmZlLE5vdEVxdWFsU3RlbmNpbEZ1bmM6KCk9PklocixOdW1iZXJLZXlmcmFtZVRyYWNrOigpPT5aMSxPYmplY3QzRDooKT0+b3IsT2JqZWN0TG9hZGVyOigpPT5zaHQsT2JqZWN0U3BhY2VOb3JtYWxNYXA6KCk9PkxmZSxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PlcwLE9jdGFoZWRyb25HZW9tZXRyeTooKT0+VzAsT25lRmFjdG9yOigpPT5xaGUsT25lTWludXNEc3RBbHBoYUZhY3RvcjooKT0+amhlLE9uZU1pbnVzRHN0Q29sb3JGYWN0b3I6KCk9PiRoZSxPbmVNaW51c1NyY0FscGhhRmFjdG9yOigpPT5JaHQsT25lTWludXNTcmNDb2xvckZhY3RvcjooKT0+V2hlLE9ydGhvZ3JhcGhpY0NhbWVyYTooKT0+RDEsUENGU2hhZG93TWFwOigpPT5DaHQsUENGU29mdFNoYWRvd01hcDooKT0+RmhlLFBNUkVNR2VuZXJhdG9yOigpPT5lNixQYXJhbWV0cmljR2VvbWV0cnk6KCk9PnJfcixQYXJ0aWNsZTooKT0+UDByLFBhcnRpY2xlQmFzaWNNYXRlcmlhbDooKT0+azByLFBhcnRpY2xlU3lzdGVtOigpPT5JMHIsUGFydGljbGVTeXN0ZW1NYXRlcmlhbDooKT0+UjByLFBhdGg6KCk9PnExLFBlcnNwZWN0aXZlQ2FtZXJhOigpPT5VaSxQbGFuZTooKT0+JGMsUGxhbmVCdWZmZXJHZW9tZXRyeTooKT0+VjAsUGxhbmVHZW9tZXRyeTooKT0+VjAsUGxhbmVIZWxwZXI6KCk9PlNodCxQb2ludENsb3VkOigpPT5BMHIsUG9pbnRDbG91ZE1hdGVyaWFsOigpPT5MMHIsUG9pbnRMaWdodDooKT0+UDYsUG9pbnRMaWdodEhlbHBlcjooKT0+X2h0LFBvaW50czooKT0+aW0sUG9pbnRzTWF0ZXJpYWw6KCk9Pm5tLFBvbGFyR3JpZEhlbHBlcjooKT0+dmh0LFBvbHloZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+dWgsUG9seWhlZHJvbkdlb21ldHJ5OigpPT51aCxQb3NpdGlvbmFsQXVkaW86KCk9PnVodCxQcm9wZXJ0eUJpbmRpbmc6KCk9PkNyLFByb3BlcnR5TWl4ZXI6KCk9PkJVLFF1YWRyYXRpY0JlemllckN1cnZlOigpPT51TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6KCk9PmhNLFF1YXRlcm5pb246KCk9PnlpLFF1YXRlcm5pb25LZXlmcmFtZVRyYWNrOigpPT5YMCxRdWF0ZXJuaW9uTGluZWFySW50ZXJwb2xhbnQ6KCk9PkVVLFJFVklTSU9OOigpPT5qVSxSR0JBRGVwdGhQYWNraW5nOigpPT5JZmUsUkdCQUZvcm1hdDooKT0+UW8sUkdCQUludGVnZXJGb3JtYXQ6KCk9PlNmZSxSR0JBX0FTVENfMTB4MTBfRm9ybWF0OigpPT5ZdXQsUkdCQV9BU1RDXzEweDVfRm9ybWF0OigpPT5xdXQsUkdCQV9BU1RDXzEweDZfRm9ybWF0OigpPT5HdXQsUkdCQV9BU1RDXzEweDhfRm9ybWF0OigpPT5XdXQsUkdCQV9BU1RDXzEyeDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMngxMl9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfNHg0X0Zvcm1hdDooKT0+RHV0LFJHQkFfQVNUQ181eDRfRm9ybWF0OigpPT5PdXQsUkdCQV9BU1RDXzV4NV9Gb3JtYXQ6KCk9Pnp1dCxSR0JBX0FTVENfNng1X0Zvcm1hdDooKT0+RnV0LFJHQkFfQVNUQ182eDZfRm9ybWF0OigpPT5CdXQsUkdCQV9BU1RDXzh4NV9Gb3JtYXQ6KCk9Pkh1dCxSR0JBX0FTVENfOHg2X0Zvcm1hdDooKT0+VnV0LFJHQkFfQVNUQ184eDhfRm9ybWF0OigpPT5VdXQsUkdCQV9CUFRDX0Zvcm1hdDooKT0+JHV0LFJHQkFfRVRDMl9FQUNfRm9ybWF0OigpPT5OdXQsUkdCQV9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5rdXQsUkdCQV9QVlJUQ180QlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCQV9TM1RDX0RYVDFfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUM19Gb3JtYXQ6KCk9PnRVLFJHQkFfUzNUQ19EWFQ1X0Zvcm1hdDooKT0+ZVUsUkdCX0VUQzFfRm9ybWF0OigpPT5NZmUsUkdCX0VUQzJfRm9ybWF0OigpPT5SdXQsUkdCX1BWUlRDXzJCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+UHV0LFJHQl9TM1RDX0RYVDFfRm9ybWF0OigpPT5KVixSR0Zvcm1hdDooKT0+YmZlLFJHSW50ZWdlckZvcm1hdDooKT0+d2ZlLFJhd1NoYWRlck1hdGVyaWFsOigpPT5VMCxSYXk6KCk9PkpmLFJheWNhc3RlcjooKT0+cGh0LFJlY3RBcmVhTGlnaHQ6KCk9Pms2LFJlZEZvcm1hdDooKT0+dmZlLFJlZEludGVnZXJGb3JtYXQ6KCk9PnhmZSxSZWluaGFyZFRvbmVNYXBwaW5nOigpPT5zZmUsUmVwZWF0V3JhcHBpbmc6KCk9PlhQLFJlcGxhY2VTdGVuY2lsT3A6KCk9PnZocixSZXZlcnNlU3VidHJhY3RFcXVhdGlvbjooKT0+VmhlLFJpbmdCdWZmZXJHZW9tZXRyeTooKT0+WTEsUmluZ0dlb21ldHJ5OigpPT5ZMSxTY2VuZTooKT0+cTAsU2NlbmVVdGlsczooKT0+dF9yLFNoYWRlckNodW5rOigpPT5ocixTaGFkZXJMaWI6KCk9PmFoLFNoYWRlck1hdGVyaWFsOigpPT5saCxTaGFkb3dNYXRlcmlhbDooKT0+bTYsU2hhcGU6KCk9PktjLFNoYXBlQnVmZmVyR2VvbWV0cnk6KCk9PlkwLFNoYXBlR2VvbWV0cnk6KCk9PlkwLFNoYXBlUGF0aDooKT0+RWh0LFNoYXBlVXRpbHM6KCk9PlpjLFNob3J0VHlwZTooKT0+ZmZlLFNrZWxldG9uOigpPT5sTSxTa2VsZXRvbkhlbHBlcjooKT0+V1UsU2tpbm5lZE1lc2g6KCk9PmFNLFNtb290aFNoYWRpbmc6KCk9PmhocixTcGhlcmU6KCk9PlpmLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OigpPT5qMCxTcGhlcmVHZW9tZXRyeTooKT0+ajAsU3BoZXJpY2FsOigpPT5fTSxTcGhlcmljYWxIYXJtb25pY3MzOigpPT5SNixTcGxpbmVDdXJ2ZTooKT0+Zk0sU3BvdExpZ2h0OigpPT5BNixTcG90TGlnaHRIZWxwZXI6KCk9PmdodCxTcHJpdGU6KCk9Pm9NLFNwcml0ZU1hdGVyaWFsOigpPT5pTSxTcmNBbHBoYUZhY3RvcjooKT0+UGh0LFNyY0FscGhhU2F0dXJhdGVGYWN0b3I6KCk9PktoZSxTcmNDb2xvckZhY3RvcjooKT0+R2hlLFN0YXRpY0NvcHlVc2FnZTooKT0+T2hyLFN0YXRpY0RyYXdVc2FnZTooKT0+VzMsU3RhdGljUmVhZFVzYWdlOigpPT5SaHIsU3RlcmVvQ2FtZXJhOigpPT5saHQsU3RyZWFtQ29weVVzYWdlOigpPT5GaHIsU3RyZWFtRHJhd1VzYWdlOigpPT5raHIsU3RyZWFtUmVhZFVzYWdlOigpPT5EaHIsU3RyaW5nS2V5ZnJhbWVUcmFjazooKT0+c20sU3VidHJhY3RFcXVhdGlvbjooKT0+SGhlLFN1YnRyYWN0aXZlQmxlbmRpbmc6KCk9PkV1dCxUT1VDSDooKT0+WjAsVGFuZ2VudFNwYWNlTm9ybWFsTWFwOigpPT5heCxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5qMSxUZXRyYWhlZHJvbkdlb21ldHJ5OigpPT5qMSxUZXh0R2VvbWV0cnk6KCk9Pm5fcixUZXh0dXJlOigpPT52aSxUZXh0dXJlTG9hZGVyOigpPT5BVSxUb3J1c0J1ZmZlckdlb21ldHJ5OigpPT5YMSxUb3J1c0dlb21ldHJ5OigpPT5YMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTooKT0+JDEsVG9ydXNLbm90R2VvbWV0cnk6KCk9PiQxLFRyaWFuZ2xlOigpPT5vaSxUcmlhbmdsZUZhbkRyYXdNb2RlOigpPT5faHIsVHJpYW5nbGVTdHJpcERyYXdNb2RlOigpPT5naHIsVHJpYW5nbGVzRHJhd01vZGU6KCk9PkFmZSxUdWJlQnVmZmVyR2VvbWV0cnk6KCk9PksxLFR1YmVHZW9tZXRyeTooKT0+SzEsVVZNYXBwaW5nOigpPT5YVSxVaW50MTZBdHRyaWJ1dGU6KCk9PkgwcixVaW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PiQzLFVpbnQzMkF0dHJpYnV0ZTooKT0+VTByLFVpbnQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+SzMsVWludDhBdHRyaWJ1dGU6KCk9PnowcixVaW50OEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVWludDhDbGFtcGVkQXR0cmlidXRlOigpPT5GMHIsVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlOigpPT5oVSxVbmlmb3JtOigpPT5nTSxVbmlmb3Jtc0xpYjooKT0+cmUsVW5pZm9ybXNVdGlsczooKT0+emZlLFVuc2lnbmVkQnl0ZVR5cGU6KCk9PlpkLFVuc2lnbmVkSW50MjQ4VHlwZTooKT0+QTEsVW5zaWduZWRJbnRUeXBlOigpPT5WUCxVbnNpZ25lZFNob3J0NDQ0NFR5cGU6KCk9PmRmZSxVbnNpZ25lZFNob3J0NTU1MVR5cGU6KCk9Pm1mZSxVbnNpZ25lZFNob3J0VHlwZTooKT0+RzMsVlNNU2hhZG93TWFwOigpPT5GMyxWZWN0b3IyOigpPT5MdCxWZWN0b3IzOigpPT5qLFZlY3RvcjQ6KCk9PmVuLFZlY3RvcktleWZyYW1lVHJhY2s6KCk9PkoxLFZlcnRleDooKT0+TjByLFZlcnRleENvbG9yczooKT0+RTByLFZpZGVvVGV4dHVyZTooKT0+eVUsV2ViR0wxUmVuZGVyZXI6KCk9PmdVLFdlYkdMQ3ViZVJlbmRlclRhcmdldDooKT0+UTMsV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM6KCk9PmxVLFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ6KCk9PmozLFdlYkdMUmVuZGVyVGFyZ2V0OigpPT51cyxXZWJHTFJlbmRlclRhcmdldEN1YmU6KCk9PlowcixXZWJHTFJlbmRlcmVyOigpPT5ybixXZWJHTFV0aWxzOigpPT4kZmUsV2lyZWZyYW1lR2VvbWV0cnk6KCk9PmQ2LFdpcmVmcmFtZUhlbHBlcjooKT0+WDByLFdyYXBBcm91bmRFbmRpbmc6KCk9PkpQLFhIUkxvYWRlcjooKT0+JDByLFplcm9DdXJ2YXR1cmVFbmRpbmc6KCk9PkUxLFplcm9GYWN0b3I6KCk9PlVoZSxaZXJvU2xvcGVFbmRpbmc6KCk9PlQxLFplcm9TdGVuY2lsT3A6KCk9PnlocixfU1JHQkFGb3JtYXQ6KCk9PnNVLHNSR0JFbmNvZGluZzooKT0+V259KTt2YXIgalU9IjEzNyIsSzA9e0xFRlQ6MCxNSURETEU6MSxSSUdIVDoyLFJPVEFURTowLERPTExZOjEsUEFOOjJ9LFowPXtST1RBVEU6MCxQQU46MSxET0xMWV9QQU46MixET0xMWV9ST1RBVEU6M30sT2hlPTAsU3V0PTEsemhlPTIsY2hyPTMsdWhyPTAsQ2h0PTEsRmhlPTIsRjM9MyxJMT0wLElpPTEsTDE9MixBaHQ9MSxoaHI9MiwkZD0wLFYzPTEsTXV0PTIsRXV0PTMsVHV0PTQsQmhlPTUsTTE9MTAwLEhoZT0xMDEsVmhlPTEwMixDdXQ9MTAzLEF1dD0xMDQsVWhlPTIwMCxxaGU9MjAxLEdoZT0yMDIsV2hlPTIwMyxQaHQ9MjA0LElodD0yMDUsWWhlPTIwNixqaGU9MjA3LFhoZT0yMDgsJGhlPTIwOSxLaGU9MjEwLFpoZT0wLEpoZT0xLFFoZT0yLGlVPTMsdGZlPTQsZWZlPTUscmZlPTYsbmZlPTcsTzY9MCxpZmU9MSxvZmU9MixLZD0wLGFmZT0xLHNmZT0yLGxmZT0zLGNmZT00LHVmZT01LFhVPTMwMCxueD0zMDEsaXg9MzAyLFlQPTMwMyxqUD0zMDQseE09MzA2LHo2PTMwNyxYUD0xZTMsSm89MTAwMSwkUD0xMDAyLExpPTEwMDMsb1U9MTAwNCxmaHI9MTAwNCxhVT0xMDA1LHBocj0xMDA1LGlpPTEwMDYsTGh0PTEwMDcsZGhyPTEwMDcsb3g9MTAwOCxtaHI9MTAwOCxaZD0xMDA5LGhmZT0xMDEwLGZmZT0xMDExLEczPTEwMTIscGZlPTEwMTMsVlA9MTAxNCxqZD0xMDE1LEMxPTEwMTYsZGZlPTEwMTcsbWZlPTEwMTgsQTE9MTAyMCxnZmU9MTAyMSxRbz0xMDIzLF9mZT0xMDI0LHlmZT0xMDI1LHowPTEwMjYsazE9MTAyNyx2ZmU9MTAyOCx4ZmU9MTAyOSxiZmU9MTAzMCx3ZmU9MTAzMSxTZmU9MTAzMyxKVj0zMzc3NixRVj0zMzc3Nyx0VT0zMzc3OCxlVT0zMzc3OSxQdXQ9MzU4NDAsSXV0PTM1ODQxLEx1dD0zNTg0MixrdXQ9MzU4NDMsTWZlPTM2MTk2LFJ1dD0zNzQ5MixOdXQ9Mzc0OTYsRHV0PTM3ODA4LE91dD0zNzgwOSx6dXQ9Mzc4MTAsRnV0PTM3ODExLEJ1dD0zNzgxMixIdXQ9Mzc4MTMsVnV0PTM3ODE0LFV1dD0zNzgxNSxxdXQ9Mzc4MTYsR3V0PTM3ODE3LFd1dD0zNzgxOCxZdXQ9Mzc4MTksanV0PTM3ODIwLFh1dD0zNzgyMSwkdXQ9MzY0OTIsRWZlPTIyMDAsVGZlPTIyMDEsQ2ZlPTIyMDIsS1A9MjMwMCxaUD0yMzAxLHJVPTIzMDIsRTE9MjQwMCxUMT0yNDAxLEpQPTI0MDIsJFU9MjUwMCxraHQ9MjUwMSxBZmU9MCxnaHI9MSxfaHI9MixRZD0zZTMsV249MzAwMSxQZmU9MzIwMCxJZmU9MzIwMSxheD0wLExmZT0xLHlocj0wLG5VPTc2ODAsdmhyPTc2ODEseGhyPTc2ODIsYmhyPTc2ODMsd2hyPTM0MDU1LFNocj0zNDA1NixNaHI9NTM4NixFaHI9NTEyLFRocj01MTMsQ2hyPTUxNCxBaHI9NTE1LFBocj01MTYsSWhyPTUxNyxMaHI9NTE4LGtmZT01MTksVzM9MzUwNDQsWTM9MzUwNDgsa2hyPTM1MDQwLFJocj0zNTA0NSxOaHI9MzUwNDksRGhyPTM1MDQxLE9ocj0zNTA0Nix6aHI9MzUwNTAsRmhyPTM1MDQyLEJocj0iMTAwIixLdXQ9IjMwMCBlcyIsc1U9MTAzNSxVcz1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQscil7dGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7blt0XT09PXZvaWQgMCYmKG5bdF09W10pLG5bdF0uaW5kZXhPZihyKT09PS0xJiZuW3RdLnB1c2gocil9aGFzRXZlbnRMaXN0ZW5lcih0LHIpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm4hMTtsZXQgbj10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIG5bdF0hPT12b2lkIDAmJm5bdF0uaW5kZXhPZihyKSE9PS0xfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0XTtpZihpIT09dm9pZCAwKXtsZXQgbz1pLmluZGV4T2Yocik7byE9PS0xJiZpLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHRoaXMuX2xpc3RlbmVycz09PXZvaWQgMClyZXR1cm47bGV0IG49dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYobiE9PXZvaWQgMCl7dC50YXJnZXQ9dGhpcztsZXQgaT1uLnNsaWNlKDApO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LEtvPVtdO2ZvcihsZXQgZT0wO2U8MjU2O2UrKylLb1tlXT0oZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpO3ZhciB1Vj0xMjM0NTY3LFAxPU1hdGguUEkvMTgwLFFQPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIE5sKCl7bGV0IGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsdD1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxyPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLG49TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDA7cmV0dXJuKEtvW2UmMjU1XStLb1tlPj44JjI1NV0rS29bZT4+MTYmMjU1XStLb1tlPj4yNCYyNTVdKyItIitLb1t0JjI1NV0rS29bdD4+OCYyNTVdKyItIitLb1t0Pj4xNiYxNXw2NF0rS29bdD4+MjQmMjU1XSsiLSIrS29bciY2M3wxMjhdK0tvW3I+PjgmMjU1XSsiLSIrS29bcj4+MTYmMjU1XStLb1tyPj4yNCYyNTVdK0tvW24mMjU1XStLb1tuPj44JjI1NV0rS29bbj4+MTYmMjU1XStLb1tuPj4yNCYyNTVdKS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFpvKGUsdCxyKXtyZXR1cm4gTWF0aC5tYXgodCxNYXRoLm1pbihyLGUpKX1mdW5jdGlvbiBSaHQoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gSGhyKGUsdCxyLG4saSl7cmV0dXJuIG4rKGUtdCkqKGktbikvKHItdCl9ZnVuY3Rpb24gVmhyKGUsdCxyKXtyZXR1cm4gZSE9PXQ/KHItZSkvKHQtZSk6MH1mdW5jdGlvbiBVUChlLHQscil7cmV0dXJuKDEtcikqZStyKnR9ZnVuY3Rpb24gVWhyKGUsdCxyLG4pe3JldHVybiBVUChlLHQsMS1NYXRoLmV4cCgtcipuKSl9ZnVuY3Rpb24gcWhyKGUsdD0xKXtyZXR1cm4gdC1NYXRoLmFicyhSaHQoZSx0KjIpLXQpfWZ1bmN0aW9uIEdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKigzLTIqZSkpfWZ1bmN0aW9uIFdocihlLHQscil7cmV0dXJuIGU8PXQ/MDplPj1yPzE6KGU9KGUtdCkvKHItdCksZSplKmUqKGUqKGUqNi0xNSkrMTApKX1mdW5jdGlvbiBZaHIoZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSsxKSl9ZnVuY3Rpb24gamhyKGUsdCl7cmV0dXJuIGUrTWF0aC5yYW5kb20oKSoodC1lKX1mdW5jdGlvbiBYaHIoZSl7cmV0dXJuIGUqKC41LU1hdGgucmFuZG9tKCkpfWZ1bmN0aW9uICRocihlKXtyZXR1cm4gZSE9PXZvaWQgMCYmKHVWPWUlMjE0NzQ4MzY0NyksdVY9dVYqMTY4MDclMjE0NzQ4MzY0NywodVYtMSkvMjE0NzQ4MzY0Nn1mdW5jdGlvbiBLaHIoZSl7cmV0dXJuIGUqUDF9ZnVuY3Rpb24gWmhyKGUpe3JldHVybiBlKlFQfWZ1bmN0aW9uIFp1dChlKXtyZXR1cm4oZSZlLTEpPT09MCYmZSE9PTB9ZnVuY3Rpb24gUmZlKGUpe3JldHVybiBNYXRoLnBvdygyLE1hdGguY2VpbChNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIE5mZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4yKSl9ZnVuY3Rpb24gSmhyKGUsdCxyLG4saSl7bGV0IG89TWF0aC5jb3MsYT1NYXRoLnNpbixzPW8oci8yKSxsPWEoci8yKSxjPW8oKHQrbikvMiksdT1hKCh0K24pLzIpLGg9bygodC1uKS8yKSxmPWEoKHQtbikvMikscD1vKChuLXQpLzIpLGQ9YSgobi10KS8yKTtzd2l0Y2goaSl7Y2FzZSJYWVgiOmUuc2V0KHMqdSxsKmgsbCpmLHMqYyk7YnJlYWs7Y2FzZSJZWlkiOmUuc2V0KGwqZixzKnUsbCpoLHMqYyk7YnJlYWs7Y2FzZSJaWFoiOmUuc2V0KGwqaCxsKmYscyp1LHMqYyk7YnJlYWs7Y2FzZSJYWlgiOmUuc2V0KHMqdSxsKmQsbCpwLHMqYyk7YnJlYWs7Y2FzZSJZWFkiOmUuc2V0KGwqcCxzKnUsbCpkLHMqYyk7YnJlYWs7Y2FzZSJaWVoiOmUuc2V0KGwqZCxsKnAscyp1LHMqYyk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLk1hdGhVdGlsczogLnNldFF1YXRlcm5pb25Gcm9tUHJvcGVyRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2kpfX12YXIgUWhyPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLERFRzJSQUQ6UDEsUkFEMkRFRzpRUCxnZW5lcmF0ZVVVSUQ6TmwsY2xhbXA6Wm8sZXVjbGlkZWFuTW9kdWxvOlJodCxtYXBMaW5lYXI6SGhyLGludmVyc2VMZXJwOlZocixsZXJwOlVQLGRhbXA6VWhyLHBpbmdwb25nOnFocixzbW9vdGhzdGVwOkdocixzbW9vdGhlcnN0ZXA6V2hyLHJhbmRJbnQ6WWhyLHJhbmRGbG9hdDpqaHIscmFuZEZsb2F0U3ByZWFkOlhocixzZWVkZWRSYW5kb206JGhyLGRlZ1RvUmFkOktocixyYWRUb0RlZzpaaHIsaXNQb3dlck9mVHdvOlp1dCxjZWlsUG93ZXJPZlR3bzpSZmUsZmxvb3JQb3dlck9mVHdvOk5mZSxzZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyOkpocn0pLEx0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTApe3RoaXMueD10LHRoaXMueT1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1pWzBdKnIraVszXSpuK2lbNl0sdGhpcy55PWlbMV0qcitpWzRdKm4raVs3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55O3JldHVybiByKnIrbipufW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXN9cm90YXRlQXJvdW5kKHQscil7bGV0IG49TWF0aC5jb3MociksaT1NYXRoLnNpbihyKSxvPXRoaXMueC10LngsYT10aGlzLnktdC55O3JldHVybiB0aGlzLng9bypuLWEqaSt0LngsdGhpcy55PW8qaSthKm4rdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0x0LnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIGtpPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPWksdVsyXT1zLHVbM109cix1WzRdPW8sdVs1XT1sLHVbNl09bix1WzddPWEsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0sdGhpc31leHRyYWN0QmFzaXModCxyLG4pe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0scls0XSxyWzhdLHJbMV0scls1XSxyWzldLHJbMl0scls2XSxyWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxyKXtsZXQgbj10LmVsZW1lbnRzLGk9ci5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMsYT1uWzBdLHM9blszXSxsPW5bNl0sYz1uWzFdLHU9bls0XSxoPW5bN10sZj1uWzJdLHA9bls1XSxkPW5bOF0sZz1pWzBdLF89aVszXSx5PWlbNl0seD1pWzFdLGI9aVs0XSxTPWlbN10sQz1pWzJdLFA9aVs1XSxrPWlbOF07cmV0dXJuIG9bMF09YSpnK3MqeCtsKkMsb1szXT1hKl8rcypiK2wqUCxvWzZdPWEqeStzKlMrbCprLG9bMV09YypnK3UqeCtoKkMsb1s0XT1jKl8rdSpiK2gqUCxvWzddPWMqeSt1KlMraCprLG9bMl09ZipnK3AqeCtkKkMsb1s1XT1mKl8rcCpiK2QqUCxvWzhdPWYqeStwKlMrZCprLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzNdKj10LHJbNl0qPXQsclsxXSo9dCxyWzRdKj10LHJbN10qPXQsclsyXSo9dCxyWzVdKj10LHJbOF0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF07cmV0dXJuIHIqYSp1LXIqcypjLW4qbyp1K24qcypsK2kqbypjLWkqYSpsfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD11KmEtcypjLGY9cypsLXUqbyxwPWMqby1hKmwsZD1yKmgrbipmK2kqcDtpZihkPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDApO2xldCBnPTEvZDtyZXR1cm4gdFswXT1oKmcsdFsxXT0oaSpjLXUqbikqZyx0WzJdPShzKm4taSphKSpnLHRbM109ZipnLHRbNF09KHUqci1pKmwpKmcsdFs1XT0oaSpvLXMqcikqZyx0WzZdPXAqZyx0WzddPShuKmwtYypyKSpnLHRbOF09KGEqci1uKm8pKmcsdGhpc310cmFuc3Bvc2UoKXtsZXQgdCxyPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQ9clsxXSxyWzFdPXJbM10sclszXT10LHQ9clsyXSxyWzJdPXJbNl0scls2XT10LHQ9cls1XSxyWzVdPXJbN10scls3XT10LHRoaXN9Z2V0Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLnNldEZyb21NYXRyaXg0KHQpLmludmVydCgpLnRyYW5zcG9zZSgpfXRyYW5zcG9zZUludG9BcnJheSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiB0WzBdPXJbMF0sdFsxXT1yWzNdLHRbMl09cls2XSx0WzNdPXJbMV0sdFs0XT1yWzRdLHRbNV09cls3XSx0WzZdPXJbMl0sdFs3XT1yWzVdLHRbOF09cls4XSx0aGlzfXNldFV2VHJhbnNmb3JtKHQscixuLGksbyxhLHMpe2xldCBsPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7cmV0dXJuIHRoaXMuc2V0KG4qbCxuKmMsLW4qKGwqYStjKnMpK2ErdCwtaSpjLGkqbCwtaSooLWMqYStsKnMpK3MrciwwLDAsMSksdGhpc31zY2FsZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0qPXQsblszXSo9dCxuWzZdKj10LG5bMV0qPXIsbls0XSo9cixuWzddKj1yLHRoaXN9cm90YXRlKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCksaT10aGlzLmVsZW1lbnRzLG89aVswXSxhPWlbM10scz1pWzZdLGw9aVsxXSxjPWlbNF0sdT1pWzddO3JldHVybiBpWzBdPXIqbytuKmwsaVszXT1yKmErbipjLGlbNl09cipzK24qdSxpWzFdPS1uKm8rcipsLGlbNF09LW4qYStyKmMsaVs3XT0tbipzK3IqdSx0aGlzfXRyYW5zbGF0ZSh0LHIpe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIG5bMF0rPXQqblsyXSxuWzNdKz10Km5bNV0sbls2XSs9dCpuWzhdLG5bMV0rPXIqblsyXSxuWzRdKz1yKm5bNV0sbls3XSs9cipuWzhdLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspaWYocltpXSE9PW5baV0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQscj0wKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07a2kucHJvdG90eXBlLmlzTWF0cml4Mz0hMDtmdW5jdGlvbiBEZmUoZSl7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDstLXQpaWYoZVt0XT42NTUzNSlyZXR1cm4hMDtyZXR1cm4hMX12YXIgdGZyPXtJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheX07ZnVuY3Rpb24gQjMoZSx0KXtyZXR1cm4gbmV3IHRmcltlXSh0KX1mdW5jdGlvbiB0NihlKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixlKX12YXIgT2ZlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LG5oPXtoOjAsczowLGw6MH0saFY9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBHY3QoZSx0LHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj9lKyh0LWUpKjYqcjpyPDEvMj90OnI8Mi8zP2UrKHQtZSkqNiooMi8zLXIpOmV9ZnVuY3Rpb24gVTMoZSl7cmV0dXJuIGU8LjA0MDQ1P2UqLjA3NzM5OTM4MDg6TWF0aC5wb3coZSouOTQ3ODY3Mjk4NisuMDUyMTMyNzAxNCwyLjQpfWZ1bmN0aW9uIFdjdChlKXtyZXR1cm4gZTwuMDAzMTMwOD9lKjEyLjkyOjEuMDU1Kk1hdGgucG93KGUsLjQxNjY2KS0uMDU1fXZhciBuZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7cmV0dXJuIHI9PT12b2lkIDAmJm49PT12b2lkIDA/dGhpcy5zZXQodCk6dGhpcy5zZXRSR0IodCxyLG4pfXNldCh0KXtyZXR1cm4gdCYmdC5pc0NvbG9yP3RoaXMuY29weSh0KTp0eXBlb2YgdD09Im51bWJlciI/dGhpcy5zZXRIZXgodCk6dHlwZW9mIHQ9PSJzdHJpbmciJiZ0aGlzLnNldFN0eWxlKHQpLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9dCx0aGlzLmI9dCx0aGlzfXNldEhleCh0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLHRoaXMucj0odD4+MTYmMjU1KS8yNTUsdGhpcy5nPSh0Pj44JjI1NSkvMjU1LHRoaXMuYj0odCYyNTUpLzI1NSx0aGlzfXNldFJHQih0LHIsbil7cmV0dXJuIHRoaXMucj10LHRoaXMuZz1yLHRoaXMuYj1uLHRoaXN9c2V0SFNMKHQscixuKXtpZih0PVJodCh0LDEpLHI9Wm8ociwwLDEpLG49Wm8obiwwLDEpLHI9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPW47ZWxzZXtsZXQgaT1uPD0uNT9uKigxK3IpOm4rci1uKnIsbz0yKm4taTt0aGlzLnI9R2N0KG8saSx0KzEvMyksdGhpcy5nPUdjdChvLGksdCksdGhpcy5iPUdjdChvLGksdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIHIoaSl7aSE9PXZvaWQgMCYmcGFyc2VGbG9hdChpKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBuO2lmKG49L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCBpLG89blsxXSxhPW5bMl07c3dpdGNoKG8pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKGk9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChpWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbM10sMTApKS8yNTUscihpWzRdKSx0aGlzO2lmKGk9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChpWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbM10sMTApKS8xMDAscihpWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKGk9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBzPXBhcnNlRmxvYXQoaVsxXSkvMzYwLGw9cGFyc2VJbnQoaVsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoaVszXSwxMCkvMTAwO3JldHVybiByKGlbNF0pLHRoaXMuc2V0SFNMKHMsbCxjKX1icmVha319ZWxzZSBpZihuPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IGk9blsxXSxvPWkubGVuZ3RoO2lmKG89PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMSkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKG89PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoaS5jaGFyQXQoMCkraS5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoaS5jaGFyQXQoMikraS5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoaS5jaGFyQXQoNCkraS5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCByPU9mZVt0LnRvTG93ZXJDYXNlKCldO3JldHVybiByIT09dm9pZCAwP3RoaXMuc2V0SGV4KHIpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIit0KSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KHQpe3JldHVybiB0aGlzLnI9dC5yLHRoaXMuZz10LmcsdGhpcy5iPXQuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIodCl7cmV0dXJuIHRoaXMucj1VMyh0LnIpLHRoaXMuZz1VMyh0LmcpLHRoaXMuYj1VMyh0LmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQih0KXtyZXR1cm4gdGhpcy5yPVdjdCh0LnIpLHRoaXMuZz1XY3QodC5nKSx0aGlzLmI9V2N0KHQuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIHRoaXMucioyNTU8PDE2XnRoaXMuZyoyNTU8PDhedGhpcy5iKjI1NTw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0wodCl7bGV0IHI9dGhpcy5yLG49dGhpcy5nLGk9dGhpcy5iLG89TWF0aC5tYXgocixuLGkpLGE9TWF0aC5taW4ocixuLGkpLHMsbCxjPShhK28pLzI7aWYoYT09PW8pcz0wLGw9MDtlbHNle2xldCB1PW8tYTtzd2l0Y2gobD1jPD0uNT91LyhvK2EpOnUvKDItby1hKSxvKXtjYXNlIHI6cz0obi1pKS91KyhuPGk/NjowKTticmVhaztjYXNlIG46cz0oaS1yKS91KzI7YnJlYWs7Y2FzZSBpOnM9KHItbikvdSs0O2JyZWFrfXMvPTZ9cmV0dXJuIHQuaD1zLHQucz1sLHQubD1jLHR9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKHRoaXMucioyNTV8MCkrIiwiKyh0aGlzLmcqMjU1fDApKyIsIisodGhpcy5iKjI1NXwwKSsiKSJ9b2Zmc2V0SFNMKHQscixuKXtyZXR1cm4gdGhpcy5nZXRIU0wobmgpLG5oLmgrPXQsbmgucys9cixuaC5sKz1uLHRoaXMuc2V0SFNMKG5oLmgsbmgucyxuaC5sKSx0aGlzfWFkZCh0KXtyZXR1cm4gdGhpcy5yKz10LnIsdGhpcy5nKz10LmcsdGhpcy5iKz10LmIsdGhpc31hZGRDb2xvcnModCxyKXtyZXR1cm4gdGhpcy5yPXQucityLnIsdGhpcy5nPXQuZytyLmcsdGhpcy5iPXQuYityLmIsdGhpc31hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMucis9dCx0aGlzLmcrPXQsdGhpcy5iKz10LHRoaXN9c3ViKHQpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItdC5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctdC5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItdC5iKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLnIqPXQucix0aGlzLmcqPXQuZyx0aGlzLmIqPXQuYix0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLnIqPXQsdGhpcy5nKj10LHRoaXMuYio9dCx0aGlzfWxlcnAodCxyKXtyZXR1cm4gdGhpcy5yKz0odC5yLXRoaXMucikqcix0aGlzLmcrPSh0LmctdGhpcy5nKSpyLHRoaXMuYis9KHQuYi10aGlzLmIpKnIsdGhpc31sZXJwQ29sb3JzKHQscixuKXtyZXR1cm4gdGhpcy5yPXQucisoci5yLXQucikqbix0aGlzLmc9dC5nKyhyLmctdC5nKSpuLHRoaXMuYj10LmIrKHIuYi10LmIpKm4sdGhpc31sZXJwSFNMKHQscil7dGhpcy5nZXRIU0wobmgpLHQuZ2V0SFNMKGhWKTtsZXQgbj1VUChuaC5oLGhWLmgsciksaT1VUChuaC5zLGhWLnMsciksbz1VUChuaC5sLGhWLmwscik7cmV0dXJuIHRoaXMuc2V0SFNMKG4saSxvKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5yPT09dGhpcy5yJiZ0Lmc9PT10aGlzLmcmJnQuYj09PXRoaXMuYn1mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLnI9dFtyXSx0aGlzLmc9dFtyKzFdLHRoaXMuYj10W3IrMl0sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLnIsdFtyKzFdPXRoaXMuZyx0W3IrMl09dGhpcy5iLHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpe3JldHVybiB0aGlzLnI9dC5nZXRYKHIpLHRoaXMuZz10LmdldFkociksdGhpcy5iPXQuZ2V0WihyKSx0Lm5vcm1hbGl6ZWQ9PT0hMCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX07bmUuTkFNRVM9T2ZlO25lLnByb3RvdHlwZS5pc0NvbG9yPSEwO25lLnByb3RvdHlwZS5yPTE7bmUucHJvdG90eXBlLmc9MTtuZS5wcm90b3R5cGUuYj0xO3ZhciB2MyxLZj1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD09InVuZGVmaW5lZCIpcmV0dXJuIHQuc3JjO2xldCByO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudClyPXQ7ZWxzZXt2Mz09PXZvaWQgMCYmKHYzPXQ2KCJjYW52YXMiKSksdjMud2lkdGg9dC53aWR0aCx2My5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49djMuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP24ucHV0SW1hZ2VEYXRhKHQsMCwwKTpuLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxyPXYzfXJldHVybiByLndpZHRoPjIwNDh8fHIuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxyLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTpyLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHI9dDYoImNhbnZhcyIpO3Iud2lkdGg9dC53aWR0aCxyLmhlaWdodD10LmhlaWdodDtsZXQgbj1yLmdldENvbnRleHQoIjJkIik7bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IGk9bi5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89aS5kYXRhO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKW9bYV09VTMob1thXS8yNTUpKjI1NTtyZXR1cm4gbi5wdXRJbWFnZURhdGEoaSwwLDApLHJ9ZWxzZSBpZih0LmRhdGEpe2xldCByPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKylyIGluc3RhbmNlb2YgVWludDhBcnJheXx8ciBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P3Jbbl09TWF0aC5mbG9vcihVMyhyW25dLzI1NSkqMjU1KTpyW25dPVUzKHJbbl0pO3JldHVybntkYXRhOnIsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxlZnI9MCx2aT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQ9dmkuREVGQVVMVF9JTUFHRSxyPXZpLkRFRkFVTFRfTUFQUElORyxuPUpvLGk9Sm8sbz1paSxhPW94LHM9UW8sbD1aZCxjPTEsdT1RZCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTplZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLmltYWdlPXQsdGhpcy5taXBtYXBzPVtdLHRoaXMubWFwcGluZz1yLHRoaXMud3JhcFM9bix0aGlzLndyYXBUPWksdGhpcy5tYWdGaWx0ZXI9byx0aGlzLm1pbkZpbHRlcj1hLHRoaXMuYW5pc290cm9weT1jLHRoaXMuZm9ybWF0PXMsdGhpcy5pbnRlcm5hbEZvcm1hdD1udWxsLHRoaXMudHlwZT1sLHRoaXMub2Zmc2V0PW5ldyBMdCgwLDApLHRoaXMucmVwZWF0PW5ldyBMdCgxLDEpLHRoaXMuY2VudGVyPW5ldyBMdCgwLDApLHRoaXMucm90YXRpb249MCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITAsdGhpcy5tYXRyaXg9bmV3IGtpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSEwLHRoaXMucHJlbXVsdGlwbHlBbHBoYT0hMSx0aGlzLmZsaXBZPSEwLHRoaXMudW5wYWNrQWxpZ25tZW50PTQsdGhpcy5lbmNvZGluZz11LHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5vblVwZGF0ZT1udWxsLHRoaXMuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSExLHRoaXMubmVlZHNQTVJFTVVwZGF0ZT0hMX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5zZXRVdlRyYW5zZm9ybSh0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnksdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55LHRoaXMucm90YXRpb24sdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7aWYoIXImJnQudGV4dHVyZXNbdGhpcy51dWlkXSE9PXZvaWQgMClyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih0aGlzLmltYWdlIT09dm9pZCAwKXtsZXQgaT10aGlzLmltYWdlO2lmKGkudXVpZD09PXZvaWQgMCYmKGkudXVpZD1ObCgpKSwhciYmdC5pbWFnZXNbaS51dWlkXT09PXZvaWQgMCl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1bXTtmb3IobGV0IGE9MCxzPWkubGVuZ3RoO2E8czthKyspaVthXS5pc0RhdGFUZXh0dXJlP28ucHVzaChZY3QoaVthXS5pbWFnZSkpOm8ucHVzaChZY3QoaVthXSkpfWVsc2Ugbz1ZY3QoaSk7dC5pbWFnZXNbaS51dWlkXT17dXVpZDppLnV1aWQsdXJsOm99fW4uaW1hZ2U9aS51dWlkfXJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihuLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHJ8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09biksbn1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKHRoaXMubWFwcGluZyE9PVhVKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgWFA6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWs7Y2FzZSBKbzp0Lng9dC54PDA/MDoxO2JyZWFrO2Nhc2UgJFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpPT09MT90Lng9TWF0aC5jZWlsKHQueCktdC54OnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSBYUDp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIEpvOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAkUDpNYXRoLmFicyhNYXRoLmZsb29yKHQueSklMik9PT0xP3QueT1NYXRoLmNlaWwodC55KS10Lnk6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWt9cmV0dXJuIHRoaXMuZmxpcFkmJih0Lnk9MS10LnkpLHR9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9fTt2aS5ERUZBVUxUX0lNQUdFPXZvaWQgMDt2aS5ERUZBVUxUX01BUFBJTkc9WFU7dmkucHJvdG90eXBlLmlzVGV4dHVyZT0hMDtmdW5jdGlvbiBZY3QoZSl7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwP0tmLmdldERhdGFVUkwoZSk6ZS5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuZGF0YSksd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsdHlwZTplLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX12YXIgZW49Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT0xKXt0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzLnc9aX1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy56fXNldCB3aWR0aCh0KXt0aGlzLno9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMud31zZXQgaGVpZ2h0KHQpe3RoaXMudz10fXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXMudz10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Vyh0KXtyZXR1cm4gdGhpcy53PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7Y2FzZSAzOnRoaXMudz1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtjYXNlIDM6cmV0dXJuIHRoaXMudztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueix0aGlzLncpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXMudz10LnchPT12b2lkIDA/dC53OjEsdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzLncrPXQudyx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXMudys9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpcy56PXQueityLnosdGhpcy53PXQudytyLncsdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXMueis9dC56KnIsdGhpcy53Kz10Lncqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMudy09dC53LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpcy53LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzLno9dC56LXIueix0aGlzLnc9dC53LXIudyx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzLncqPXQudyx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzLncqPXQsdGhpc31hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dGhpcy53LGE9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWFbMF0qcithWzRdKm4rYVs4XSppK2FbMTJdKm8sdGhpcy55PWFbMV0qcithWzVdKm4rYVs5XSppK2FbMTNdKm8sdGhpcy56PWFbMl0qcithWzZdKm4rYVsxMF0qaSthWzE0XSpvLHRoaXMudz1hWzNdKnIrYVs3XSpuK2FbMTFdKmkrYVsxNV0qbyx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfXNldEF4aXNBbmdsZUZyb21RdWF0ZXJuaW9uKHQpe3RoaXMudz0yKk1hdGguYWNvcyh0LncpO2xldCByPU1hdGguc3FydCgxLXQudyp0LncpO3JldHVybiByPDFlLTQ/KHRoaXMueD0xLHRoaXMueT0wLHRoaXMuej0wKToodGhpcy54PXQueC9yLHRoaXMueT10Lnkvcix0aGlzLno9dC56L3IpLHRoaXN9c2V0QXhpc0FuZ2xlRnJvbVJvdGF0aW9uTWF0cml4KHQpe2xldCByLG4saSxvLGw9dC5lbGVtZW50cyxjPWxbMF0sdT1sWzRdLGg9bFs4XSxmPWxbMV0scD1sWzVdLGQ9bFs5XSxnPWxbMl0sXz1sWzZdLHk9bFsxMF07aWYoTWF0aC5hYnModS1mKTwuMDEmJk1hdGguYWJzKGgtZyk8LjAxJiZNYXRoLmFicyhkLV8pPC4wMSl7aWYoTWF0aC5hYnModStmKTwuMSYmTWF0aC5hYnMoaCtnKTwuMSYmTWF0aC5hYnMoZCtfKTwuMSYmTWF0aC5hYnMoYytwK3ktMyk8LjEpcmV0dXJuIHRoaXMuc2V0KDEsMCwwLDApLHRoaXM7cj1NYXRoLlBJO2xldCBiPShjKzEpLzIsUz0ocCsxKS8yLEM9KHkrMSkvMixQPSh1K2YpLzQsaz0oaCtnKS80LE89KGQrXykvNDtyZXR1cm4gYj5TJiZiPkM/YjwuMDE/KG49MCxpPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKToobj1NYXRoLnNxcnQoYiksaT1QL24sbz1rL24pOlM+Qz9TPC4wMT8obj0uNzA3MTA2NzgxLGk9MCxvPS43MDcxMDY3ODEpOihpPU1hdGguc3FydChTKSxuPVAvaSxvPU8vaSk6QzwuMDE/KG49LjcwNzEwNjc4MSxpPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoQyksbj1rL28saT1PL28pLHRoaXMuc2V0KG4saSxvLHIpLHRoaXN9bGV0IHg9TWF0aC5zcXJ0KChfLWQpKihfLWQpKyhoLWcpKihoLWcpKyhmLXUpKihmLXUpKTtyZXR1cm4gTWF0aC5hYnMoeCk8LjAwMSYmKHg9MSksdGhpcy54PShfLWQpL3gsdGhpcy55PShoLWcpL3gsdGhpcy56PShmLXUpL3gsdGhpcy53PU1hdGguYWNvcygoYytwK3ktMSkvMiksdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1pbih0aGlzLncsdC53KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpcy53PU1hdGgubWF4KHRoaXMudyx0LncpLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQudyxNYXRoLm1pbihyLncsdGhpcy53KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMudykpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzLnc9TWF0aC5jZWlsKHRoaXMudyksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzLnc9TWF0aC5yb3VuZCh0aGlzLncpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpcy53PXRoaXMudzwwP01hdGguY2VpbCh0aGlzLncpOk1hdGguZmxvb3IodGhpcy53KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzLnc9LXRoaXMudyx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0LnordGhpcy53KnQud31sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMudyl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopK01hdGguYWJzKHRoaXMudyl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXMudys9KHQudy10aGlzLncpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzLno9dC56KyhyLnotdC56KSpuLHRoaXMudz10LncrKHIudy10LncpKm4sdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnomJnQudz09PXRoaXMud31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLng9dFtyXSx0aGlzLnk9dFtyKzFdLHRoaXMuej10W3IrMl0sdGhpcy53PXRbciszXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdFtyKzNdPXRoaXMudyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzLnc9dC5nZXRXKHIpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXMudz1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnoseWllbGQgdGhpcy53fX07ZW4ucHJvdG90eXBlLmlzVmVjdG9yND0hMDt2YXIgdXM9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIsbj17fSl7c3VwZXIoKSx0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPTEsdGhpcy5zY2lzc29yPW5ldyBlbigwLDAsdCxyKSx0aGlzLnNjaXNzb3JUZXN0PSExLHRoaXMudmlld3BvcnQ9bmV3IGVuKDAsMCx0LHIpLHRoaXMudGV4dHVyZT1uZXcgdmkodm9pZCAwLG4ubWFwcGluZyxuLndyYXBTLG4ud3JhcFQsbi5tYWdGaWx0ZXIsbi5taW5GaWx0ZXIsbi5mb3JtYXQsbi50eXBlLG4uYW5pc290cm9weSxuLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDoxfSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPW4uZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwP24uZ2VuZXJhdGVNaXBtYXBzOiExLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD1uLmludGVybmFsRm9ybWF0IT09dm9pZCAwP24uaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPW4ubWluRmlsdGVyIT09dm9pZCAwP24ubWluRmlsdGVyOmlpLHRoaXMuZGVwdGhCdWZmZXI9bi5kZXB0aEJ1ZmZlciE9PXZvaWQgMD9uLmRlcHRoQnVmZmVyOiEwLHRoaXMuc3RlbmNpbEJ1ZmZlcj1uLnN0ZW5jaWxCdWZmZXIhPT12b2lkIDA/bi5zdGVuY2lsQnVmZmVyOiExLHRoaXMuZGVwdGhUZXh0dXJlPW4uZGVwdGhUZXh0dXJlIT09dm9pZCAwP24uZGVwdGhUZXh0dXJlOm51bGx9c2V0VGV4dHVyZSh0KXt0LmltYWdlPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxkZXB0aDp0aGlzLmRlcHRofSx0aGlzLnRleHR1cmU9dH1zZXRTaXplKHQscixuPTEpeyh0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bikmJih0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW4sdGhpcy50ZXh0dXJlLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZS5pbWFnZS5kZXB0aD1uLHRoaXMuZGlzcG9zZSgpKSx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt1cy5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMDt2YXIgbFU9Y2xhc3MgZXh0ZW5kcyB1c3tjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIodCxyKTtsZXQgaT10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288bjtvKyspdGhpcy50ZXh0dXJlW29dPWkuY2xvbmUoKX1zZXRTaXplKHQscixuPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PXJ8fHRoaXMuZGVwdGghPT1uKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9cix0aGlzLmRlcHRoPW47Zm9yKGxldCBpPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO2k8bztpKyspdGhpcy50ZXh0dXJlW2ldLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW2ldLmltYWdlLmhlaWdodD1yLHRoaXMudGV4dHVyZVtpXS5pbWFnZS5kZXB0aD1uO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxyKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LHIpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCByPTAsbj10LnRleHR1cmUubGVuZ3RoO3I8bjtyKyspdGhpcy50ZXh0dXJlW3JdPXQudGV4dHVyZVtyXS5jbG9uZSgpO3JldHVybiB0aGlzfX07bFUucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIGozPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKHQscixuKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PW4uaWdub3JlRGVwdGghPT12b2lkIDA/bi5pZ25vcmVEZXB0aDohMCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT1uLnVzZVJlbmRlclRvVGV4dHVyZSE9PXZvaWQgMD9uLnVzZVJlbmRlclRvVGV4dHVyZTohMSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10aGlzLnVzZVJlbmRlclRvVGV4dHVyZT09PSExfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuc2FtcGxlcz10LnNhbXBsZXMsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dC51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9dC51c2VSZW5kZXJidWZmZXIsdGhpc319O2ozLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9ITA7dmFyIHlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pfXN0YXRpYyBzbGVycCh0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiBTdGF0aWMgLnNsZXJwKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHFtLnNsZXJwUXVhdGVybmlvbnMoIHFhLCBxYiwgdCApIGluc3RlYWQuIiksbi5zbGVycFF1YXRlcm5pb25zKHQscixpKX1zdGF0aWMgc2xlcnBGbGF0KHQscixuLGksbyxhLHMpe2xldCBsPW5baSswXSxjPW5baSsxXSx1PW5baSsyXSxoPW5baSszXSxmPW9bYSswXSxwPW9bYSsxXSxkPW9bYSsyXSxnPW9bYSszXTtpZihzPT09MCl7dFtyKzBdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWg7cmV0dXJufWlmKHM9PT0xKXt0W3IrMF09Zix0W3IrMV09cCx0W3IrMl09ZCx0W3IrM109ZztyZXR1cm59aWYoaCE9PWd8fGwhPT1mfHxjIT09cHx8dSE9PWQpe2xldCBfPTEtcyx5PWwqZitjKnArdSpkK2gqZyx4PXk+PTA/MTotMSxiPTEteSp5O2lmKGI+TnVtYmVyLkVQU0lMT04pe2xldCBDPU1hdGguc3FydChiKSxQPU1hdGguYXRhbjIoQyx5KngpO189TWF0aC5zaW4oXypQKS9DLHM9TWF0aC5zaW4ocypQKS9DfWxldCBTPXMqeDtpZihsPWwqXytmKlMsYz1jKl8rcCpTLHU9dSpfK2QqUyxoPWgqXytnKlMsXz09PTEtcyl7bGV0IEM9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUraCpoKTtsKj1DLGMqPUMsdSo9QyxoKj1DfX10W3JdPWwsdFtyKzFdPWMsdFtyKzJdPXUsdFtyKzNdPWh9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscixuLGksbyxhKXtsZXQgcz1uW2ldLGw9bltpKzFdLGM9bltpKzJdLHU9bltpKzNdLGg9b1thXSxmPW9bYSsxXSxwPW9bYSsyXSxkPW9bYSszXTtyZXR1cm4gdFtyXT1zKmQrdSpoK2wqcC1jKmYsdFtyKzFdPWwqZCt1KmYrYypoLXMqcCx0W3IrMl09YypkK3UqcCtzKmYtbCpoLHRbciszXT11KmQtcypoLWwqZi1jKnAsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQscixuLGkpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1yLHRoaXMuX3o9bix0aGlzLl93PWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQscil7aWYoISh0JiZ0LmlzRXVsZXIpKXRocm93IG5ldyBFcnJvcigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IG49dC5feCxpPXQuX3ksbz10Ll96LGE9dC5fb3JkZXIscz1NYXRoLmNvcyxsPU1hdGguc2luLGM9cyhuLzIpLHU9cyhpLzIpLGg9cyhvLzIpLGY9bChuLzIpLHA9bChpLzIpLGQ9bChvLzIpO3N3aXRjaChhKXtjYXNlIlhZWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIllYWiI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIlpYWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlpZWCI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztjYXNlIllaWCI6dGhpcy5feD1mKnUqaCtjKnAqZCx0aGlzLl95PWMqcCpoK2YqdSpkLHRoaXMuX3o9Yyp1KmQtZipwKmgsdGhpcy5fdz1jKnUqaC1mKnAqZDticmVhaztjYXNlIlhaWSI6dGhpcy5feD1mKnUqaC1jKnAqZCx0aGlzLl95PWMqcCpoLWYqdSpkLHRoaXMuX3o9Yyp1KmQrZipwKmgsdGhpcy5fdz1jKnUqaCtmKnAqZDticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLnNldEZyb21FdWxlcigpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrYSl9cmV0dXJuIHIhPT0hMSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LHIpe2xldCBuPXIvMixpPU1hdGguc2luKG4pO3JldHVybiB0aGlzLl94PXQueCppLHRoaXMuX3k9dC55KmksdGhpcy5fej10LnoqaSx0aGlzLl93PU1hdGguY29zKG4pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcj10LmVsZW1lbnRzLG49clswXSxpPXJbNF0sbz1yWzhdLGE9clsxXSxzPXJbNV0sbD1yWzldLGM9clsyXSx1PXJbNl0saD1yWzEwXSxmPW4rcytoO2lmKGY+MCl7bGV0IHA9LjUvTWF0aC5zcXJ0KGYrMSk7dGhpcy5fdz0uMjUvcCx0aGlzLl94PSh1LWwpKnAsdGhpcy5feT0oby1jKSpwLHRoaXMuX3o9KGEtaSkqcH1lbHNlIGlmKG4+cyYmbj5oKXtsZXQgcD0yKk1hdGguc3FydCgxK24tcy1oKTt0aGlzLl93PSh1LWwpL3AsdGhpcy5feD0uMjUqcCx0aGlzLl95PShpK2EpL3AsdGhpcy5fej0obytjKS9wfWVsc2UgaWYocz5oKXtsZXQgcD0yKk1hdGguc3FydCgxK3Mtbi1oKTt0aGlzLl93PShvLWMpL3AsdGhpcy5feD0oaSthKS9wLHRoaXMuX3k9LjI1KnAsdGhpcy5fej0obCt1KS9wfWVsc2V7bGV0IHA9MipNYXRoLnNxcnQoMStoLW4tcyk7dGhpcy5fdz0oYS1pKS9wLHRoaXMuX3g9KG8rYykvcCx0aGlzLl95PShsK3UpL3AsdGhpcy5fej0uMjUqcH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQscil7bGV0IG49dC5kb3QocikrMTtyZXR1cm4gbjxOdW1iZXIuRVBTSUxPTj8obj0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PW4pOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9bikpOih0aGlzLl94PXQueSpyLnotdC56KnIueSx0aGlzLl95PXQueipyLngtdC54KnIueix0aGlzLl96PXQueCpyLnktdC55KnIueCx0aGlzLl93PW4pLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoWm8odGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQscil7bGV0IG49dGhpcy5hbmdsZVRvKHQpO2lmKG49PT0wKXJldHVybiB0aGlzO2xldCBpPU1hdGgubWluKDEsci9uKTtyZXR1cm4gdGhpcy5zbGVycCh0LGkpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdD09PTA/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHIpe2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX3cscz1yLl94LGw9ci5feSxjPXIuX3osdT1yLl93O3JldHVybiB0aGlzLl94PW4qdSthKnMraSpjLW8qbCx0aGlzLl95PWkqdSthKmwrbypzLW4qYyx0aGlzLl96PW8qdSthKmMrbipsLWkqcyx0aGlzLl93PWEqdS1uKnMtaSpsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LHIpe2lmKHI9PT0wKXJldHVybiB0aGlzO2lmKHI9PT0xKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IG49dGhpcy5feCxpPXRoaXMuX3ksbz10aGlzLl96LGE9dGhpcy5fdyxzPWEqdC5fdytuKnQuX3graSp0Ll95K28qdC5fejtpZihzPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3oscz0tcyk6dGhpcy5jb3B5KHQpLHM+PTEpcmV0dXJuIHRoaXMuX3c9YSx0aGlzLl94PW4sdGhpcy5feT1pLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtcypzO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgcD0xLXI7cmV0dXJuIHRoaXMuX3c9cCphK3IqdGhpcy5fdyx0aGlzLl94PXAqbityKnRoaXMuX3gsdGhpcy5feT1wKmkrcip0aGlzLl95LHRoaXMuX3o9cCpvK3IqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxzKSxoPU1hdGguc2luKCgxLXIpKnUpL2MsZj1NYXRoLnNpbihyKnUpL2M7cmV0dXJuIHRoaXMuX3c9YSpoK3RoaXMuX3cqZix0aGlzLl94PW4qaCt0aGlzLl94KmYsdGhpcy5feT1pKmgrdGhpcy5feSpmLHRoaXMuX3o9bypoK3RoaXMuX3oqZix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQscixuKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKHIsbil9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxyPU1hdGguc3FydCgxLXQpLG49TWF0aC5zcXJ0KHQpLGk9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQocipNYXRoLmNvcyhpKSxuKk1hdGguc2luKG8pLG4qTWF0aC5jb3MobykscipNYXRoLnNpbihpKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxyPTApe3JldHVybiB0aGlzLl94PXRbcl0sdGhpcy5feT10W3IrMV0sdGhpcy5fej10W3IrMl0sdGhpcy5fdz10W3IrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5feCx0W3IrMV09dGhpcy5feSx0W3IrMl09dGhpcy5feix0W3IrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5feD10LmdldFgociksdGhpcy5feT10LmdldFkociksdGhpcy5fej10LmdldFoociksdGhpcy5fdz10LmdldFcociksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07eWkucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgaj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW59c2V0KHQscixuKXtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9cix0aGlzLno9bix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxyKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1yO2JyZWFrO2Nhc2UgMTp0aGlzLnk9cjticmVhaztjYXNlIDI6dGhpcy56PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxyKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54KnIueCx0aGlzLnk9dC55KnIueSx0aGlzLno9dC56KnIueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQscil7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKGR1ZS5zZXRGcm9tQXhpc0FuZ2xlKHQscikpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bM10qbitvWzZdKmksdGhpcy55PW9bMV0qcitvWzRdKm4rb1s3XSppLHRoaXMuej1vWzJdKnIrb1s1XSpuK29bOF0qaSx0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cyxhPTEvKG9bM10qcitvWzddKm4rb1sxMV0qaStvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSpyK29bNF0qbitvWzhdKmkrb1sxMl0pKmEsdGhpcy55PShvWzFdKnIrb1s1XSpuK29bOV0qaStvWzEzXSkqYSx0aGlzLno9KG9bMl0qcitvWzZdKm4rb1sxMF0qaStvWzE0XSkqYSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LngsYT10Lnkscz10LnosbD10LncsYz1sKnIrYSppLXMqbix1PWwqbitzKnItbyppLGg9bCppK28qbi1hKnIsZj0tbypyLWEqbi1zKmk7cmV0dXJuIHRoaXMueD1jKmwrZiotbyt1Ki1zLWgqLWEsdGhpcy55PXUqbCtmKi1hK2gqLW8tYyotcyx0aGlzLno9aCpsK2YqLXMrYyotYS11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSpyK29bNF0qbitvWzhdKmksdGhpcy55PW9bMV0qcitvWzVdKm4rb1s5XSppLHRoaXMuej1vWzJdKnIrb1s2XSpuK29bMTBdKmksdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKHIueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxyKXtsZXQgbj10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihufHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKHIsbikpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQscil7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKnIsdGhpcy55Kz0odC55LXRoaXMueSkqcix0aGlzLnorPSh0LnotdGhpcy56KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzfWNyb3NzKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LHIpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXIueCxzPXIueSxsPXIuejtyZXR1cm4gdGhpcy54PWkqbC1vKnMsdGhpcy55PW8qYS1uKmwsdGhpcy56PW4qcy1pKmEsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IHI9dC5sZW5ndGhTcSgpO2lmKHI9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IG49dC5kb3QodGhpcykvcjtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKG4pfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqY3QuY29weSh0aGlzKS5wcm9qZWN0T25WZWN0b3IodCksdGhpcy5zdWIoamN0KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihqY3QuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgcj1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYocj09PTApcmV0dXJuIE1hdGguUEkvMjtsZXQgbj10aGlzLmRvdCh0KS9yO3JldHVybiBNYXRoLmFjb3MoWm8obiwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCByPXRoaXMueC10Lngsbj10aGlzLnktdC55LGk9dGhpcy56LXQuejtyZXR1cm4gcipyK24qbitpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxyLG4pe2xldCBpPU1hdGguc2luKHIpKnQ7cmV0dXJuIHRoaXMueD1pKk1hdGguc2luKG4pLHRoaXMueT1NYXRoLmNvcyhyKSp0LHRoaXMuej1pKk1hdGguY29zKG4pLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4ociksdGhpcy55PW4sdGhpcy56PXQqTWF0aC5jb3MociksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMTJdLHRoaXMueT1yWzEzXSx0aGlzLno9clsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksbj10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9cix0aGlzLnk9bix0aGlzLno9aSx0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxyKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxyKjQpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsciozKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy54LHRbcisxXT10aGlzLnksdFtyKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyLG4pe3JldHVybiBuIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKHIpLHRoaXMueT10LmdldFkociksdGhpcy56PXQuZ2V0WihyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PShNYXRoLnJhbmRvbSgpLS41KSoyLHI9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsbj1NYXRoLnNxcnQoMS1USSh0LDIpKTtyZXR1cm4gdGhpcy54PW4qTWF0aC5jb3MociksdGhpcy55PW4qTWF0aC5zaW4ociksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19O2oucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgamN0PW5ldyBqLGR1ZT1uZXcgeWksdGE9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaigxLzAsMS8wLDEvMCkscj1uZXcgaigtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCByPTEvMCxuPTEvMCxpPTEvMCxvPS0xLzAsYT0tMS8wLHM9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ciYmKHI9dSksaDxuJiYobj1oKSxmPGkmJihpPWYpLHU+byYmKG89dSksaD5hJiYoYT1oKSxmPnMmJihzPWYpfXJldHVybiB0aGlzLm1pbi5zZXQocixuLGkpLHRoaXMubWF4LnNldChvLGEscyksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCByPTAsbj10Lmxlbmd0aDtyPG47cisrKXRoaXMuZXhwYW5kQnlQb2ludCh0W3JdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LHIpe2xldCBuPW0xLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfXNldEZyb21PYmplY3QodCxyPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQscil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQscj0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IG49dC5nZW9tZXRyeTtpZihuIT09dm9pZCAwKWlmKHImJm4uYXR0cmlidXRlcyE9bnVsbCYmbi5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgbz1uLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBhPTAscz1vLmNvdW50O2E8czthKyspbTEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShvLGEpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQobTEpfWVsc2Ugbi5ib3VuZGluZ0JveD09PW51bGwmJm4uY29tcHV0ZUJvdW5kaW5nQm94KCksWGN0LmNvcHkobi5ib3VuZGluZ0JveCksWGN0LmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLnVuaW9uKFhjdCk7bGV0IGk9dC5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspdGhpcy5leHBhbmRCeU9iamVjdChpW29dLHIpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsbTEpLG0xLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByLG47cmV0dXJuIHQubm9ybWFsLng+MD8ocj10Lm5vcm1hbC54KnRoaXMubWluLngsbj10Lm5vcm1hbC54KnRoaXMubWF4LngpOihyPXQubm9ybWFsLngqdGhpcy5tYXgueCxuPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhyKz10Lm5vcm1hbC55KnRoaXMubWluLnksbis9dC5ub3JtYWwueSp0aGlzLm1heC55KToocis9dC5ub3JtYWwueSp0aGlzLm1heC55LG4rPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhyKz10Lm5vcm1hbC56KnRoaXMubWluLnosbis9dC5ub3JtYWwueip0aGlzLm1heC56KToocis9dC5ub3JtYWwueip0aGlzLm1heC56LG4rPXQubm9ybWFsLnoqdGhpcy5taW4ueikscjw9LXQuY29uc3RhbnQmJm4+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihMUCksZlYuc3ViVmVjdG9ycyh0aGlzLm1heCxMUCkseDMuc3ViVmVjdG9ycyh0LmEsTFApLGIzLnN1YlZlY3RvcnModC5iLExQKSx3My5zdWJWZWN0b3JzKHQuYyxMUCksUDAuc3ViVmVjdG9ycyhiMyx4MyksSTAuc3ViVmVjdG9ycyh3MyxiMyksZzEuc3ViVmVjdG9ycyh4Myx3Myk7bGV0IHI9WzAsLVAwLnosUDAueSwwLC1JMC56LEkwLnksMCwtZzEueixnMS55LFAwLnosMCwtUDAueCxJMC56LDAsLUkwLngsZzEueiwwLC1nMS54LC1QMC55LFAwLngsMCwtSTAueSxJMC54LDAsLWcxLnksZzEueCwwXTtyZXR1cm4hJGN0KHIseDMsYjMsdzMsZlYpfHwocj1bMSwwLDAsMCwxLDAsMCwwLDFdLCEkY3Qocix4MyxiMyx3MyxmVikpPyExOihwVi5jcm9zc1ZlY3RvcnMoUDAsSTApLHI9W3BWLngscFYueSxwVi56XSwkY3Qocix4MyxiMyx3MyxmVikpfWNsYW1wUG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIG0xLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShtMSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KFZkWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLFZkWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLFZkWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhWZCksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07dGEucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgVmQ9W25ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqLG5ldyBqXSxtMT1uZXcgaixYY3Q9bmV3IHRhLHgzPW5ldyBqLGIzPW5ldyBqLHczPW5ldyBqLFAwPW5ldyBqLEkwPW5ldyBqLGcxPW5ldyBqLExQPW5ldyBqLGZWPW5ldyBqLHBWPW5ldyBqLF8xPW5ldyBqO2Z1bmN0aW9uICRjdChlLHQscixuLGkpe2ZvcihsZXQgbz0wLGE9ZS5sZW5ndGgtMztvPD1hO28rPTMpe18xLmZyb21BcnJheShlLG8pO2xldCBzPWkueCpNYXRoLmFicyhfMS54KStpLnkqTWF0aC5hYnMoXzEueSkraS56Kk1hdGguYWJzKF8xLnopLGw9dC5kb3QoXzEpLGM9ci5kb3QoXzEpLHU9bi5kb3QoXzEpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5zKXJldHVybiExfXJldHVybiEwfXZhciByZnI9bmV3IHRhLG11ZT1uZXcgaixkVj1uZXcgaixLY3Q9bmV3IGosWmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9cix0aGlzfXNldEZyb21Qb2ludHModCxyKXtsZXQgbj10aGlzLmNlbnRlcjtyIT09dm9pZCAwP24uY29weShyKTpyZnIuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIobik7bGV0IGk9MDtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspaT1NYXRoLm1heChpLG4uZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQoaSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgcj10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1yKnJ9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LHIpe2xldCBuPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiByLmNvcHkodCksbj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKHIuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxyLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxyfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtLY3Quc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgcj1LY3QubGVuZ3RoU3EoKTtpZihyPnRoaXMucmFkaXVzKnRoaXMucmFkaXVzKXtsZXQgbj1NYXRoLnNxcnQociksaT0obi10aGlzLnJhZGl1cykqLjU7dGhpcy5jZW50ZXIuYWRkKEtjdC5tdWx0aXBseVNjYWxhcihpL24pKSx0aGlzLnJhZGl1cys9aX1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP2RWLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOmRWLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQobXVlLmNvcHkodC5jZW50ZXIpLmFkZChkVikpLHRoaXMuZXhwYW5kQnlQb2ludChtdWUuY29weSh0LmNlbnRlcikuc3ViKGRWKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sVWQ9bmV3IGosWmN0PW5ldyBqLG1WPW5ldyBqLEwwPW5ldyBqLEpjdD1uZXcgaixnVj1uZXcgaixRY3Q9bmV3IGosSmY9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKDAsMCwtMSkpe3RoaXMub3JpZ2luPXQsdGhpcy5kaXJlY3Rpb249cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0KSx0aGlzLmRpcmVjdGlvbi5jb3B5KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0Lm9yaWdpbiksdGhpcy5kaXJlY3Rpb24uY29weSh0LmRpcmVjdGlvbiksdGhpc31hdCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLm9yaWdpbil9bG9va0F0KHQpe3JldHVybiB0aGlzLmRpcmVjdGlvbi5jb3B5KHQpLnN1Yih0aGlzLm9yaWdpbikubm9ybWFsaXplKCksdGhpc31yZWNhc3QodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodGhpcy5hdCh0LFVkKSksdGhpc31jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7ci5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pO2xldCBuPXIuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gbjwwP3IuY29weSh0aGlzLm9yaWdpbik6ci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihuKS5hZGQodGhpcy5vcmlnaW4pfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodCkpfWRpc3RhbmNlU3FUb1BvaW50KHQpe2xldCByPVVkLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbikuZG90KHRoaXMuZGlyZWN0aW9uKTtyZXR1cm4gcjwwP3RoaXMub3JpZ2luLmRpc3RhbmNlVG9TcXVhcmVkKHQpOihVZC5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5vcmlnaW4pLFVkLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVNxVG9TZWdtZW50KHQscixuLGkpe1pjdC5jb3B5KHQpLmFkZChyKS5tdWx0aXBseVNjYWxhciguNSksbVYuY29weShyKS5zdWIodCkubm9ybWFsaXplKCksTDAuY29weSh0aGlzLm9yaWdpbikuc3ViKFpjdCk7bGV0IG89dC5kaXN0YW5jZVRvKHIpKi41LGE9LXRoaXMuZGlyZWN0aW9uLmRvdChtVikscz1MMC5kb3QodGhpcy5kaXJlY3Rpb24pLGw9LUwwLmRvdChtViksYz1MMC5sZW5ndGhTcSgpLHU9TWF0aC5hYnMoMS1hKmEpLGgsZixwLGQ7aWYodT4wKWlmKGg9YSpsLXMsZj1hKnMtbCxkPW8qdSxoPj0wKWlmKGY+PS1kKWlmKGY8PWQpe2xldCBnPTEvdTtoKj1nLGYqPWcscD1oKihoK2EqZisyKnMpK2YqKGEqaCtmKzIqbCkrY31lbHNlIGY9byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY9LW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPD0tZD8oaD1NYXRoLm1heCgwLC0oLWEqbytzKSksZj1oPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk6Zjw9ZD8oaD0wLGY9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9ZiooZisyKmwpK2MpOihoPU1hdGgubWF4KDAsLShhKm8rcykpLGY9aD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLHA9LWgqaCtmKihmKzIqbCkrYyk7ZWxzZSBmPWE+MD8tbzpvLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO3JldHVybiBuJiZuLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGgpLmFkZCh0aGlzLm9yaWdpbiksaSYmaS5jb3B5KG1WKS5tdWx0aXBseVNjYWxhcihmKS5hZGQoWmN0KSxwfWludGVyc2VjdFNwaGVyZSh0LHIpe1VkLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5vcmlnaW4pO2xldCBuPVVkLmRvdCh0aGlzLmRpcmVjdGlvbiksaT1VZC5kb3QoVWQpLW4qbixvPXQucmFkaXVzKnQucmFkaXVzO2lmKGk+bylyZXR1cm4gbnVsbDtsZXQgYT1NYXRoLnNxcnQoby1pKSxzPW4tYSxsPW4rYTtyZXR1cm4gczwwJiZsPDA/bnVsbDpzPDA/dGhpcy5hdChsLHIpOnRoaXMuYXQocyxyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCByPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYocj09PTApcmV0dXJuIHQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT09PTA/MDpudWxsO2xldCBuPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9yO3JldHVybiBuPj0wP246bnVsbH1pbnRlcnNlY3RQbGFuZSh0LHIpe2xldCBuPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBuPT09bnVsbD9udWxsOnRoaXMuYXQobixyKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IHI9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiByPT09MHx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSpyPDB9aW50ZXJzZWN0Qm94KHQscil7bGV0IG4saSxvLGEscyxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGg9MS90aGlzLmRpcmVjdGlvbi56LGY9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KG49KHQubWluLngtZi54KSpjLGk9KHQubWF4LngtZi54KSpjKToobj0odC5tYXgueC1mLngpKmMsaT0odC5taW4ueC1mLngpKmMpLHU+PTA/KG89KHQubWluLnktZi55KSp1LGE9KHQubWF4LnktZi55KSp1KToobz0odC5tYXgueS1mLnkpKnUsYT0odC5taW4ueS1mLnkpKnUpLG4+YXx8bz5pfHwoKG8+bnx8biE9PW4pJiYobj1vKSwoYTxpfHxpIT09aSkmJihpPWEpLGg+PTA/KHM9KHQubWluLnotZi56KSpoLGw9KHQubWF4LnotZi56KSpoKToocz0odC5tYXguei1mLnopKmgsbD0odC5taW4uei1mLnopKmgpLG4+bHx8cz5pKXx8KChzPm58fG4hPT1uKSYmKG49cyksKGw8aXx8aSE9PWkpJiYoaT1sKSxpPDApP251bGw6dGhpcy5hdChuPj0wP246aSxyKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0aGlzLmludGVyc2VjdEJveCh0LFVkKSE9PW51bGx9aW50ZXJzZWN0VHJpYW5nbGUodCxyLG4saSxvKXtKY3Quc3ViVmVjdG9ycyhyLHQpLGdWLnN1YlZlY3RvcnMobix0KSxRY3QuY3Jvc3NWZWN0b3JzKEpjdCxnVik7bGV0IGE9dGhpcy5kaXJlY3Rpb24uZG90KFFjdCkscztpZihhPjApe2lmKGkpcmV0dXJuIG51bGw7cz0xfWVsc2UgaWYoYTwwKXM9LTEsYT0tYTtlbHNlIHJldHVybiBudWxsO0wwLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9cyp0aGlzLmRpcmVjdGlvbi5kb3QoZ1YuY3Jvc3NWZWN0b3JzKEwwLGdWKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPXMqdGhpcy5kaXJlY3Rpb24uZG90KEpjdC5jcm9zcyhMMCkpO2lmKGM8MHx8bCtjPmEpcmV0dXJuIG51bGw7bGV0IHU9LXMqTDAuZG90KFFjdCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9hLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxNZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxyLG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7bGV0IHk9dGhpcy5lbGVtZW50cztyZXR1cm4geVswXT10LHlbNF09cix5WzhdPW4seVsxMl09aSx5WzFdPW8seVs1XT1hLHlbOV09cyx5WzEzXT1sLHlbMl09Yyx5WzZdPXUseVsxMF09aCx5WzE0XT1mLHlbM109cCx5WzddPWQseVsxMV09Zyx5WzE1XT1fLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgTWUoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclswXT1uWzBdLHJbMV09blsxXSxyWzJdPW5bMl0sclszXT1uWzNdLHJbNF09bls0XSxyWzVdPW5bNV0scls2XT1uWzZdLHJbN109bls3XSxyWzhdPW5bOF0scls5XT1uWzldLHJbMTBdPW5bMTBdLHJbMTFdPW5bMTFdLHJbMTJdPW5bMTJdLHJbMTNdPW5bMTNdLHJbMTRdPW5bMTRdLHJbMTVdPW5bMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO3JldHVybiByWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KHJbMF0sclszXSxyWzZdLDAsclsxXSxyWzRdLHJbN10sMCxyWzJdLHJbNV0scls4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksci5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksbi5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxyLG4pe3JldHVybiB0aGlzLnNldCh0Lngsci54LG4ueCwwLHQueSxyLnksbi55LDAsdC56LHIueixuLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cyxpPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksYT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gclswXT1uWzBdKmksclsxXT1uWzFdKmksclsyXT1uWzJdKmksclszXT0wLHJbNF09bls0XSpvLHJbNV09bls1XSpvLHJbNl09bls2XSpvLHJbN109MCxyWzhdPW5bOF0qYSxyWzldPW5bOV0qYSxyWzEwXT1uWzEwXSphLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQueixhPU1hdGguY29zKG4pLHM9TWF0aC5zaW4obiksbD1NYXRoLmNvcyhpKSxjPU1hdGguc2luKGkpLHU9TWF0aC5jb3MobyksaD1NYXRoLnNpbihvKTtpZih0Lm9yZGVyPT09IlhZWiIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPS1sKmgscls4XT1jLHJbMV09cCtkKmMscls1XT1mLWcqYyxyWzldPS1zKmwsclsyXT1nLWYqYyxyWzZdPWQrcCpjLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWVhaIil7bGV0IGY9bCp1LHA9bCpoLGQ9Yyp1LGc9YypoO3JbMF09ZitnKnMscls0XT1kKnMtcCxyWzhdPWEqYyxyWzFdPWEqaCxyWzVdPWEqdSxyWzldPS1zLHJbMl09cCpzLWQscls2XT1nK2YqcyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpYWSIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYtZypzLHJbNF09LWEqaCxyWzhdPWQrcCpzLHJbMV09cCtkKnMscls1XT1hKnUscls5XT1nLWYqcyxyWzJdPS1hKmMscls2XT1zLHJbMTBdPWEqbH1lbHNlIGlmKHQub3JkZXI9PT0iWllYIil7bGV0IGY9YSp1LHA9YSpoLGQ9cyp1LGc9cypoO3JbMF09bCp1LHJbNF09ZCpjLXAscls4XT1mKmMrZyxyWzFdPWwqaCxyWzVdPWcqYytmLHJbOV09cCpjLWQsclsyXT0tYyxyWzZdPXMqbCxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllaWCIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPWctZipoLHJbOF09ZCpoK3AsclsxXT1oLHJbNV09YSp1LHJbOV09LXMqdSxyWzJdPS1jKnUscls2XT1wKmgrZCxyWzEwXT1mLWcqaH1lbHNlIGlmKHQub3JkZXI9PT0iWFpZIil7bGV0IGY9YSpsLHA9YSpjLGQ9cypsLGc9cypjO3JbMF09bCp1LHJbNF09LWgscls4XT1jKnUsclsxXT1mKmgrZyxyWzVdPWEqdSxyWzldPXAqaC1kLHJbMl09ZCpoLXAscls2XT1zKnUsclsxMF09ZypoK2Z9cmV0dXJuIHJbM109MCxyWzddPTAsclsxMV09MCxyWzEyXT0wLHJbMTNdPTAsclsxNF09MCxyWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShuZnIsdCxpZnIpfWxvb2tBdCh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4ga2wuc3ViVmVjdG9ycyh0LHIpLGtsLmxlbmd0aFNxKCk9PT0wJiYoa2wuej0xKSxrbC5ub3JtYWxpemUoKSxrMC5jcm9zc1ZlY3RvcnMobixrbCksazAubGVuZ3RoU3EoKT09PTAmJihNYXRoLmFicyhuLnopPT09MT9rbC54Kz0xZS00OmtsLnorPTFlLTQsa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpKSxrMC5ub3JtYWxpemUoKSxfVi5jcm9zc1ZlY3RvcnMoa2wsazApLGlbMF09azAueCxpWzRdPV9WLngsaVs4XT1rbC54LGlbMV09azAueSxpWzVdPV9WLnksaVs5XT1rbC55LGlbMl09azAueixpWzZdPV9WLnosaVsxMF09a2wueix0aGlzfW11bHRpcGx5KHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQscikpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bNF0sbD1uWzhdLGM9blsxMl0sdT1uWzFdLGg9bls1XSxmPW5bOV0scD1uWzEzXSxkPW5bMl0sZz1uWzZdLF89blsxMF0seT1uWzE0XSx4PW5bM10sYj1uWzddLFM9blsxMV0sQz1uWzE1XSxQPWlbMF0saz1pWzRdLE89aVs4XSxEPWlbMTJdLEI9aVsxXSxJPWlbNV0sTD1pWzldLFI9aVsxM10sRj1pWzJdLHo9aVs2XSxVPWlbMTBdLFc9aVsxNF0sWj1pWzNdLHJ0PWlbN10sb3Q9aVsxMV0sc3Q9aVsxNV07cmV0dXJuIG9bMF09YSpQK3MqQitsKkYrYypaLG9bNF09YSprK3MqSStsKnorYypydCxvWzhdPWEqTytzKkwrbCpVK2Mqb3Qsb1sxMl09YSpEK3MqUitsKlcrYypzdCxvWzFdPXUqUCtoKkIrZipGK3AqWixvWzVdPXUqaytoKkkrZip6K3AqcnQsb1s5XT11Kk8raCpMK2YqVStwKm90LG9bMTNdPXUqRCtoKlIrZipXK3Aqc3Qsb1syXT1kKlArZypCK18qRit5Klosb1s2XT1kKmsrZypJK18qeit5KnJ0LG9bMTBdPWQqTytnKkwrXypVK3kqb3Qsb1sxNF09ZCpEK2cqUitfKlcreSpzdCxvWzNdPXgqUCtiKkIrUypGK0MqWixvWzddPXgqaytiKkkrUyp6K0MqcnQsb1sxMV09eCpPK2IqTCtTKlUrQypvdCxvWzE1XT14KkQrYipSK1MqVytDKnN0LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gclswXSo9dCxyWzRdKj10LHJbOF0qPXQsclsxMl0qPXQsclsxXSo9dCxyWzVdKj10LHJbOV0qPXQsclsxM10qPXQsclsyXSo9dCxyWzZdKj10LHJbMTBdKj10LHJbMTRdKj10LHJbM10qPXQscls3XSo9dCxyWzExXSo9dCxyWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0sbj10WzRdLGk9dFs4XSxvPXRbMTJdLGE9dFsxXSxzPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLHA9dFsxNF0sZD10WzNdLGc9dFs3XSxfPXRbMTFdLHk9dFsxNV07cmV0dXJuIGQqKCtvKmwqaC1pKmMqaC1vKnMqZituKmMqZitpKnMqcC1uKmwqcCkrZyooK3IqbCpwLXIqYypmK28qYSpmLWkqYSpwK2kqYyp1LW8qbCp1KStfKigrcipjKmgtcipzKnAtbyphKmgrbiphKnArbypzKnUtbipjKnUpK3kqKC1pKnMqdS1yKmwqaCtyKnMqZitpKmEqaC1uKmEqZituKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyO3JldHVybiByPXRbMV0sdFsxXT10WzRdLHRbNF09cixyPXRbMl0sdFsyXT10WzhdLHRbOF09cixyPXRbNl0sdFs2XT10WzldLHRbOV09cixyPXRbM10sdFszXT10WzEyXSx0WzEyXT1yLHI9dFs3XSx0WzddPXRbMTNdLHRbMTNdPXIscj10WzExXSx0WzExXT10WzE0XSx0WzE0XT1yLHRoaXN9c2V0UG9zaXRpb24odCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhpWzEyXT10LngsaVsxM109dC55LGlbMTRdPXQueik6KGlbMTJdPXQsaVsxM109cixpWzE0XT1uKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFsxXSxpPXRbMl0sbz10WzNdLGE9dFs0XSxzPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0scD10WzExXSxkPXRbMTJdLGc9dFsxM10sXz10WzE0XSx5PXRbMTVdLHg9aCpfKmMtZypmKmMrZypsKnAtcypfKnAtaCpsKnkrcypmKnksYj1kKmYqYy11Kl8qYy1kKmwqcCthKl8qcCt1KmwqeS1hKmYqeSxTPXUqZypjLWQqaCpjK2QqcypwLWEqZypwLXUqcyp5K2EqaCp5LEM9ZCpoKmwtdSpnKmwtZCpzKmYrYSpnKmYrdSpzKl8tYSpoKl8sUD1yKngrbipiK2kqUytvKkM7aWYoUD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBrPTEvUDtyZXR1cm4gdFswXT14KmssdFsxXT0oZypmKm8taCpfKm8tZyppKnArbipfKnAraCppKnktbipmKnkpKmssdFsyXT0ocypfKm8tZypsKm8rZyppKmMtbipfKmMtcyppKnkrbipsKnkpKmssdFszXT0oaCpsKm8tcypmKm8taCppKmMrbipmKmMrcyppKnAtbipsKnApKmssdFs0XT1iKmssdFs1XT0odSpfKm8tZCpmKm8rZCppKnAtcipfKnAtdSppKnkrcipmKnkpKmssdFs2XT0oZCpsKm8tYSpfKm8tZCppKmMrcipfKmMrYSppKnktcipsKnkpKmssdFs3XT0oYSpmKm8tdSpsKm8rdSppKmMtcipmKmMtYSppKnArcipsKnApKmssdFs4XT1TKmssdFs5XT0oZCpoKm8tdSpnKm8tZCpuKnArcipnKnArdSpuKnktcipoKnkpKmssdFsxMF09KGEqZypvLWQqcypvK2QqbipjLXIqZypjLWEqbip5K3Iqcyp5KSprLHRbMTFdPSh1KnMqby1hKmgqby11Km4qYytyKmgqYythKm4qcC1yKnMqcCkqayx0WzEyXT1DKmssdFsxM109KHUqZyppLWQqaCppK2QqbipmLXIqZypmLXUqbipfK3IqaCpfKSprLHRbMTRdPShkKnMqaS1hKmcqaS1kKm4qbCtyKmcqbCthKm4qXy1yKnMqXykqayx0WzE1XT0oYSpoKmktdSpzKmkrdSpuKmwtcipoKmwtYSpuKmYrcipzKmYpKmssdGhpc31zY2FsZSh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC54LGk9dC55LG89dC56O3JldHVybiByWzBdKj1uLHJbNF0qPWkscls4XSo9byxyWzFdKj1uLHJbNV0qPWkscls5XSo9byxyWzJdKj1uLHJbNl0qPWksclsxMF0qPW8sclszXSo9bixyWzddKj1pLHJbMTFdKj1vLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0sbj10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxpPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChyLG4saSkpfW1ha2VUcmFuc2xhdGlvbih0LHIsbil7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsciwwLDAsMSxuLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsciwtbiwwLDAsbixyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsMCxuLDAsMCwxLDAsMCwtbiwwLHIsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQociwtbiwwLDAsbixyLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz0xLW4sYT10Lngscz10LnksbD10LnosYz1vKmEsdT1vKnM7cmV0dXJuIHRoaXMuc2V0KGMqYStuLGMqcy1pKmwsYypsK2kqcywwLGMqcytpKmwsdSpzK24sdSpsLWkqYSwwLGMqbC1pKnMsdSpsK2kqYSxvKmwqbCtuLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxyLG4pe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsciwwLDAsMCwwLG4sMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuc2V0KDEsbixvLDAsdCwxLGEsMCxyLGksMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPXIuX3gsYT1yLl95LHM9ci5feixsPXIuX3csYz1vK28sdT1hK2EsaD1zK3MsZj1vKmMscD1vKnUsZD1vKmgsZz1hKnUsXz1hKmgseT1zKmgseD1sKmMsYj1sKnUsUz1sKmgsQz1uLngsUD1uLnksaz1uLno7cmV0dXJuIGlbMF09KDEtKGcreSkpKkMsaVsxXT0ocCtTKSpDLGlbMl09KGQtYikqQyxpWzNdPTAsaVs0XT0ocC1TKSpQLGlbNV09KDEtKGYreSkpKlAsaVs2XT0oXyt4KSpQLGlbN109MCxpWzhdPShkK2IpKmssaVs5XT0oXy14KSprLGlbMTBdPSgxLShmK2cpKSprLGlbMTFdPTAsaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnosaVsxNV09MSx0aGlzfWRlY29tcG9zZSh0LHIsbil7bGV0IGk9dGhpcy5lbGVtZW50cyxvPVMzLnNldChpWzBdLGlbMV0saVsyXSkubGVuZ3RoKCksYT1TMy5zZXQoaVs0XSxpWzVdLGlbNl0pLmxlbmd0aCgpLHM9UzMuc2V0KGlbOF0saVs5XSxpWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9aVsxMl0sdC55PWlbMTNdLHQuej1pWzE0XSxpaC5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvYSxoPTEvcztyZXR1cm4gaWguZWxlbWVudHNbMF0qPWMsaWguZWxlbWVudHNbMV0qPWMsaWguZWxlbWVudHNbMl0qPWMsaWguZWxlbWVudHNbNF0qPXUsaWguZWxlbWVudHNbNV0qPXUsaWguZWxlbWVudHNbNl0qPXUsaWguZWxlbWVudHNbOF0qPWgsaWguZWxlbWVudHNbOV0qPWgsaWguZWxlbWVudHNbMTBdKj1oLHIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGloKSxuLng9byxuLnk9YSxuLno9cyx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LHIsbixpLG8sYSl7YT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTIqby8oci10KSxjPTIqby8obi1pKSx1PShyK3QpLyhyLXQpLGg9KG4raSkvKG4taSksZj0tKGErbykvKGEtbykscD0tMiphKm8vKGEtbyk7cmV0dXJuIHNbMF09bCxzWzRdPTAsc1s4XT11LHNbMTJdPTAsc1sxXT0wLHNbNV09YyxzWzldPWgsc1sxM109MCxzWzJdPTAsc1s2XT0wLHNbMTBdPWYsc1sxNF09cCxzWzNdPTAsc1s3XT0wLHNbMTFdPS0xLHNbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmVsZW1lbnRzLGw9MS8oci10KSxjPTEvKG4taSksdT0xLyhhLW8pLGg9KHIrdCkqbCxmPShuK2kpKmMscD0oYStvKSp1O3JldHVybiBzWzBdPTIqbCxzWzRdPTAsc1s4XT0wLHNbMTJdPS1oLHNbMV09MCxzWzVdPTIqYyxzWzldPTAsc1sxM109LWYsc1syXT0wLHNbNl09MCxzWzEwXT0tMip1LHNbMTRdPS1wLHNbM109MCxzWzddPTAsc1sxMV09MCxzWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCByPXRoaXMuZWxlbWVudHMsbj10LmVsZW1lbnRzO2ZvcihsZXQgaT0wO2k8MTY7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjwxNjtuKyspdGhpcy5lbGVtZW50c1tuXT10W24rcl07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5lbGVtZW50cztyZXR1cm4gdFtyXT1uWzBdLHRbcisxXT1uWzFdLHRbcisyXT1uWzJdLHRbciszXT1uWzNdLHRbcis0XT1uWzRdLHRbcis1XT1uWzVdLHRbcis2XT1uWzZdLHRbcis3XT1uWzddLHRbcis4XT1uWzhdLHRbcis5XT1uWzldLHRbcisxMF09blsxMF0sdFtyKzExXT1uWzExXSx0W3IrMTJdPW5bMTJdLHRbcisxM109blsxM10sdFtyKzE0XT1uWzE0XSx0W3IrMTVdPW5bMTVdLHR9fTtNZS5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciBTMz1uZXcgaixpaD1uZXcgTWUsbmZyPW5ldyBqKDAsMCwwKSxpZnI9bmV3IGooMSwxLDEpLGswPW5ldyBqLF9WPW5ldyBqLGtsPW5ldyBqLGd1ZT1uZXcgTWUsX3VlPW5ldyB5aSx0bT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPXRtLkRlZmF1bHRPcmRlcil7dGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aX1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgb3JkZXIoKXtyZXR1cm4gdGhpcy5fb3JkZXJ9c2V0IG9yZGVyKHQpe3RoaXMuX29yZGVyPXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fb3JkZXI9aSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl9vcmRlcil9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10Ll94LHRoaXMuX3k9dC5feSx0aGlzLl96PXQuX3osdGhpcy5fb3JkZXI9dC5fb3JkZXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVJvdGF0aW9uTWF0cml4KHQscj10aGlzLl9vcmRlcixuPSEwKXtsZXQgaT10LmVsZW1lbnRzLG89aVswXSxhPWlbNF0scz1pWzhdLGw9aVsxXSxjPWlbNV0sdT1pWzldLGg9aVsyXSxmPWlbNl0scD1pWzEwXTtzd2l0Y2gocil7Y2FzZSJYWVoiOnRoaXMuX3k9TWF0aC5hc2luKFpvKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUscCksdGhpcy5fej1NYXRoLmF0YW4yKC1hLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5fej0wKTticmVhaztjYXNlIllYWiI6dGhpcy5feD1NYXRoLmFzaW4oLVpvKHUsLTEsMSkpLE1hdGguYWJzKHUpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIocyxwKSx0aGlzLl96PU1hdGguYXRhbjIobCxjKSk6KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxvKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PU1hdGguYXNpbihabyhmLC0xLDEpKSxNYXRoLmFicyhmKTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKC1oLHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk6KHRoaXMuX3k9MCx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3k9TWF0aC5hc2luKC1abyhoLC0xLDEpKSxNYXRoLmFicyhoKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpOih0aGlzLl94PTAsdGhpcy5fej1NYXRoLmF0YW4yKC1hLGMpKTticmVhaztjYXNlIllaWCI6dGhpcy5fej1NYXRoLmFzaW4oWm8obCwtMSwxKSksTWF0aC5hYnMobCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxjKSx0aGlzLl95PU1hdGguYXRhbjIoLWgsbykpOih0aGlzLl94PTAsdGhpcy5feT1NYXRoLmF0YW4yKHMscCkpO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl96PU1hdGguYXNpbigtWm8oYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3k9TWF0aC5hdGFuMihzLG8pKToodGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3k9MCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLkV1bGVyOiAuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIityKX1yZXR1cm4gdGhpcy5fb3JkZXI9cixuPT09ITAmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21RdWF0ZXJuaW9uKHQscixuKXtyZXR1cm4gZ3VlLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuc2V0RnJvbVJvdGF0aW9uTWF0cml4KGd1ZSxyLG4pfXNldEZyb21WZWN0b3IzKHQscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LHIpfXJlb3JkZXIodCl7cmV0dXJuIF91ZS5zZXRGcm9tRXVsZXIodGhpcyksdGhpcy5zZXRGcm9tUXVhdGVybmlvbihfdWUsdCl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll9vcmRlcj09PXRoaXMuX29yZGVyfWZyb21BcnJheSh0KXtyZXR1cm4gdGhpcy5feD10WzBdLHRoaXMuX3k9dFsxXSx0aGlzLl96PXRbMl0sdFszXSE9PXZvaWQgMCYmKHRoaXMuX29yZGVyPXRbM10pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX29yZGVyLHR9dG9WZWN0b3IzKHQpe3JldHVybiB0P3Quc2V0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KTpuZXcgaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feil9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3RtLnByb3RvdHlwZS5pc0V1bGVyPSEwO3RtLkRlZmF1bHRPcmRlcj0iWFlaIjt0bS5Sb3RhdGlvbk9yZGVycz1bIlhZWiIsIllaWCIsIlpYWSIsIlhaWSIsIllYWiIsIlpZWCJdO3ZhciBYMz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFzaz0xfXNldCh0KXt0aGlzLm1hc2s9KDE8PHR8MCk+Pj4wfWVuYWJsZSh0KXt0aGlzLm1hc2t8PTE8PHR8MH1lbmFibGVBbGwoKXt0aGlzLm1hc2s9LTF9dG9nZ2xlKHQpe3RoaXMubWFza149MTw8dHwwfWRpc2FibGUodCl7dGhpcy5tYXNrJj1+KDE8PHR8MCl9ZGlzYWJsZUFsbCgpe3RoaXMubWFzaz0wfXRlc3QodCl7cmV0dXJuKHRoaXMubWFzayZ0Lm1hc2spIT09MH1pc0VuYWJsZWQodCl7cmV0dXJuKHRoaXMubWFzayYoMTw8dHwwKSkhPT0wfX0sb2ZyPTAseXVlPW5ldyBqLE0zPW5ldyB5aSxxZD1uZXcgTWUseVY9bmV3IGosa1A9bmV3IGosYWZyPW5ldyBqLHNmcj1uZXcgeWksdnVlPW5ldyBqKDEsMCwwKSx4dWU9bmV3IGooMCwxLDApLGJ1ZT1uZXcgaigwLDAsMSksbGZyPXt0eXBlOiJhZGRlZCJ9LHd1ZT17dHlwZToicmVtb3ZlZCJ9LG9yPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOm9mcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPW9yLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBqLHI9bmV3IHRtLG49bmV3IHlpLGk9bmV3IGooMSwxLDEpO2Z1bmN0aW9uIG8oKXtuLnNldEZyb21FdWxlcihyLCExKX1mdW5jdGlvbiBhKCl7ci5zZXRGcm9tUXVhdGVybmlvbihuLHZvaWQgMCwhMSl9ci5fb25DaGFuZ2Uobyksbi5fb25DaGFuZ2UoYSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpufSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6aX0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgTWV9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGtpfX0pLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLm1hdHJpeFdvcmxkPW5ldyBNZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxyKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LHIpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseShNMyksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LHIpe3JldHVybiBNMy5zZXRGcm9tQXhpc0FuZ2xlKHQsciksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHZ1ZSx0KX1yb3RhdGVZKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh4dWUsdCl9cm90YXRlWih0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoYnVlLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LHIpe3JldHVybiB5dWUuY29weSh0KS5hcHBseVF1YXRlcm5pb24odGhpcy5xdWF0ZXJuaW9uKSx0aGlzLnBvc2l0aW9uLmFkZCh5dWUubXVsdGlwbHlTY2FsYXIocikpLHRoaXN9dHJhbnNsYXRlWCh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXModnVlLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHh1ZSx0KX10cmFuc2xhdGVaKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhidWUsdCl9bG9jYWxUb1dvcmxkKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKX13b3JsZFRvTG9jYWwodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHFkLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCkpfWxvb2tBdCh0LHIsbil7dC5pc1ZlY3RvcjM/eVYuY29weSh0KTp5Vi5zZXQodCxyLG4pO2xldCBpPXRoaXMucGFyZW50O3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLGtQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmlzQ2FtZXJhfHx0aGlzLmlzTGlnaHQ/cWQubG9va0F0KGtQLHlWLHRoaXMudXApOnFkLmxvb2tBdCh5VixrUCx0aGlzLnVwKSx0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHFkKSxpJiYocWQuZXh0cmFjdFJvdGF0aW9uKGkubWF0cml4V29ybGQpLE0zLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KE0zLmludmVydCgpKSl9YWRkKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCByPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0aGlzLmFkZChhcmd1bWVudHNbcl0pO3JldHVybiB0aGlzfXJldHVybiB0PT09dGhpcz8oY29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3QgY2FuJ3QgYmUgYWRkZWQgYXMgYSBjaGlsZCBvZiBpdHNlbGYuIix0KSx0aGlzKToodCYmdC5pc09iamVjdDNEPyh0LnBhcmVudCE9PW51bGwmJnQucGFyZW50LnJlbW92ZSh0KSx0LnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW4ucHVzaCh0KSx0LmRpc3BhdGNoRXZlbnQobGZyKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBuPTA7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbbl0pO3JldHVybiB0aGlzfWxldCByPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gciE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShyLDEpLHQuZGlzcGF0Y2hFdmVudCh3dWUpKSx0aGlzfXJlbW92ZUZyb21QYXJlbnQoKXtsZXQgdD10aGlzLnBhcmVudDtyZXR1cm4gdCE9PW51bGwmJnQucmVtb3ZlKHRoaXMpLHRoaXN9Y2xlYXIoKXtmb3IobGV0IHQ9MDt0PHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3QrKyl7bGV0IHI9dGhpcy5jaGlsZHJlblt0XTtyLnBhcmVudD1udWxsLHIuZGlzcGF0Y2hFdmVudCh3dWUpfXJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD0wLHRoaXN9YXR0YWNoKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpLHQucGFyZW50IT09bnVsbCYmKHQucGFyZW50LnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxxZC5tdWx0aXBseSh0LnBhcmVudC5tYXRyaXhXb3JsZCkpLHQuYXBwbHlNYXRyaXg0KHFkKSx0aGlzLmFkZCh0KSx0LnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKSx0aGlzfWdldE9iamVjdEJ5SWQodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgiaWQiLHQpfWdldE9iamVjdEJ5TmFtZSh0KXtyZXR1cm4gdGhpcy5nZXRPYmplY3RCeVByb3BlcnR5KCJuYW1lIix0KX1nZXRPYmplY3RCeVByb3BlcnR5KHQscil7aWYodGhpc1t0XT09PXIpcmV0dXJuIHRoaXM7Zm9yKGxldCBuPTAsaT10aGlzLmNoaWxkcmVuLmxlbmd0aDtuPGk7bisrKXtsZXQgYT10aGlzLmNoaWxkcmVuW25dLmdldE9iamVjdEJ5UHJvcGVydHkodCxyKTtpZihhIT09dm9pZCAwKXJldHVybiBhfX1nZXRXb3JsZFBvc2l0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0LnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKX1nZXRXb3JsZFF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHQsYWZyKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKGtQLHNmcix0KSx0fWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCByPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KHJbOF0scls5XSxyWzEwXSkubm9ybWFsaXplKCl9cmF5Y2FzdCgpe310cmF2ZXJzZSh0KXt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2UodCl9dHJhdmVyc2VWaXNpYmxlKHQpe2lmKHRoaXMudmlzaWJsZT09PSExKXJldHVybjt0KHRoaXMpO2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXJbbl0udHJhdmVyc2VWaXNpYmxlKHQpfXRyYXZlcnNlQW5jZXN0b3JzKHQpe2xldCByPXRoaXMucGFyZW50O3IhPT1udWxsJiYodChyKSxyLnRyYXZlcnNlQW5jZXN0b3JzKHQpKX11cGRhdGVNYXRyaXgoKXt0aGlzLm1hdHJpeC5jb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH11cGRhdGVNYXRyaXhXb3JsZCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksKHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZXx8dCkmJih0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0PSEwKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7bGV0IG49dGhpcy5wYXJlbnQ7aWYodD09PSEwJiZuIT09bnVsbCYmbi51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCkscj09PSEwKXtsZXQgaT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpW29dLnVwZGF0ZVdvcmxkTWF0cml4KCExLCEwKX19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIixuPXt9O3ImJih0PXtnZW9tZXRyaWVzOnt9LG1hdGVyaWFsczp7fSx0ZXh0dXJlczp7fSxpbWFnZXM6e30sc2hhcGVzOnt9LHNrZWxldG9uczp7fSxhbmltYXRpb25zOnt9fSxuLm1ldGFkYXRhPXt2ZXJzaW9uOjQuNSx0eXBlOiJPYmplY3QiLGdlbmVyYXRvcjoiT2JqZWN0M0QudG9KU09OIn0pO2xldCBpPXt9O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY2FzdFNoYWRvdz09PSEwJiYoaS5jYXN0U2hhZG93PSEwKSx0aGlzLnJlY2VpdmVTaGFkb3c9PT0hMCYmKGkucmVjZWl2ZVNoYWRvdz0hMCksdGhpcy52aXNpYmxlPT09ITEmJihpLnZpc2libGU9ITEpLHRoaXMuZnJ1c3R1bUN1bGxlZD09PSExJiYoaS5mcnVzdHVtQ3VsbGVkPSExKSx0aGlzLnJlbmRlck9yZGVyIT09MCYmKGkucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYoaS51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxpLmxheWVycz10aGlzLmxheWVycy5tYXNrLGkubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9PT0hMSYmKGkubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihpLnR5cGU9Ikluc3RhbmNlZE1lc2giLGkuY291bnQ9dGhpcy5jb3VudCxpLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksdGhpcy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKGkuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKTtmdW5jdGlvbiBvKHMsbCl7cmV0dXJuIHNbbC51dWlkXT09PXZvaWQgMCYmKHNbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHRoaXMuaXNTY2VuZSl0aGlzLmJhY2tncm91bmQmJih0aGlzLmJhY2tncm91bmQuaXNDb2xvcj9pLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTigpOnRoaXMuYmFja2dyb3VuZC5pc1RleHR1cmUmJihpLmJhY2tncm91bmQ9dGhpcy5iYWNrZ3JvdW5kLnRvSlNPTih0KS51dWlkKSksdGhpcy5lbnZpcm9ubWVudCYmdGhpcy5lbnZpcm9ubWVudC5pc1RleHR1cmUmJihpLmVudmlyb25tZW50PXRoaXMuZW52aXJvbm1lbnQudG9KU09OKHQpLnV1aWQpO2Vsc2UgaWYodGhpcy5pc01lc2h8fHRoaXMuaXNMaW5lfHx0aGlzLmlzUG9pbnRzKXtpLmdlb21ldHJ5PW8odC5nZW9tZXRyaWVzLHRoaXMuZ2VvbWV0cnkpO2xldCBzPXRoaXMuZ2VvbWV0cnkucGFyYW1ldGVycztpZihzIT09dm9pZCAwJiZzLnNoYXBlcyE9PXZvaWQgMCl7bGV0IGw9cy5zaGFwZXM7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTtjKyspe2xldCBoPWxbY107byh0LnNoYXBlcyxoKX1lbHNlIG8odC5zaGFwZXMsbCl9fWlmKHRoaXMuaXNTa2lubmVkTWVzaCYmKGkuYmluZE1vZGU9dGhpcy5iaW5kTW9kZSxpLmJpbmRNYXRyaXg9dGhpcy5iaW5kTWF0cml4LnRvQXJyYXkoKSx0aGlzLnNrZWxldG9uIT09dm9pZCAwJiYobyh0LnNrZWxldG9ucyx0aGlzLnNrZWxldG9uKSxpLnNrZWxldG9uPXRoaXMuc2tlbGV0b24udXVpZCkpLHRoaXMubWF0ZXJpYWwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheSh0aGlzLm1hdGVyaWFsKSl7bGV0IHM9W107Zm9yKGxldCBsPTAsYz10aGlzLm1hdGVyaWFsLmxlbmd0aDtsPGM7bCsrKXMucHVzaChvKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWxbbF0pKTtpLm1hdGVyaWFsPXN9ZWxzZSBpLm1hdGVyaWFsPW8odC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbCk7aWYodGhpcy5jaGlsZHJlbi5sZW5ndGg+MCl7aS5jaGlsZHJlbj1bXTtmb3IobGV0IHM9MDtzPHRoaXMuY2hpbGRyZW4ubGVuZ3RoO3MrKylpLmNoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltzXS50b0pTT04odCkub2JqZWN0KX1pZih0aGlzLmFuaW1hdGlvbnMubGVuZ3RoPjApe2kuYW5pbWF0aW9ucz1bXTtmb3IobGV0IHM9MDtzPHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg7cysrKXtsZXQgbD10aGlzLmFuaW1hdGlvbnNbc107aS5hbmltYXRpb25zLnB1c2gobyh0LmFuaW1hdGlvbnMsbCkpfX1pZihyKXtsZXQgcz1hKHQuZ2VvbWV0cmllcyksbD1hKHQubWF0ZXJpYWxzKSxjPWEodC50ZXh0dXJlcyksdT1hKHQuaW1hZ2VzKSxoPWEodC5zaGFwZXMpLGY9YSh0LnNrZWxldG9ucykscD1hKHQuYW5pbWF0aW9ucyk7cy5sZW5ndGg+MCYmKG4uZ2VvbWV0cmllcz1zKSxsLmxlbmd0aD4wJiYobi5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKG4udGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKG4uaW1hZ2VzPXUpLGgubGVuZ3RoPjAmJihuLnNoYXBlcz1oKSxmLmxlbmd0aD4wJiYobi5za2VsZXRvbnM9ZikscC5sZW5ndGg+MCYmKG4uYW5pbWF0aW9ucz1wKX1yZXR1cm4gbi5vYmplY3Q9aSxuO2Z1bmN0aW9uIGEocyl7bGV0IGw9W107Zm9yKGxldCBjIGluIHMpe2xldCB1PXNbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMsdCl9Y29weSh0LHI9ITApe2lmKHRoaXMubmFtZT10Lm5hbWUsdGhpcy51cC5jb3B5KHQudXApLHRoaXMucG9zaXRpb24uY29weSh0LnBvc2l0aW9uKSx0aGlzLnJvdGF0aW9uLm9yZGVyPXQucm90YXRpb24ub3JkZXIsdGhpcy5xdWF0ZXJuaW9uLmNvcHkodC5xdWF0ZXJuaW9uKSx0aGlzLnNjYWxlLmNvcHkodC5zY2FsZSksdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPXQubWF0cml4V29ybGROZWVkc1VwZGF0ZSx0aGlzLmxheWVycy5tYXNrPXQubGF5ZXJzLm1hc2ssdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93LHRoaXMucmVjZWl2ZVNoYWRvdz10LnJlY2VpdmVTaGFkb3csdGhpcy5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCx0aGlzLnJlbmRlck9yZGVyPXQucmVuZGVyT3JkZXIsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSxyPT09ITApZm9yKGxldCBuPTA7bjx0LmNoaWxkcmVuLmxlbmd0aDtuKyspe2xldCBpPXQuY2hpbGRyZW5bbl07dGhpcy5hZGQoaS5jbG9uZSgpKX1yZXR1cm4gdGhpc319O29yLkRlZmF1bHRVcD1uZXcgaigwLDEsMCk7b3IuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITA7b3IucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIG9oPW5ldyBqLEdkPW5ldyBqLHR1dD1uZXcgaixXZD1uZXcgaixFMz1uZXcgaixUMz1uZXcgaixTdWU9bmV3IGosZXV0PW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosb2k9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3RoaXMuYT10LHRoaXMuYj1yLHRoaXMuYz1ufXN0YXRpYyBnZXROb3JtYWwodCxyLG4saSl7aS5zdWJWZWN0b3JzKG4sciksb2guc3ViVmVjdG9ycyh0LHIpLGkuY3Jvc3Mob2gpO2xldCBvPWkubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP2kubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOmkuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQscixuLGksbyl7b2guc3ViVmVjdG9ycyhpLHIpLEdkLnN1YlZlY3RvcnMobixyKSx0dXQuc3ViVmVjdG9ycyh0LHIpO2xldCBhPW9oLmRvdChvaCkscz1vaC5kb3QoR2QpLGw9b2guZG90KHR1dCksYz1HZC5kb3QoR2QpLHU9R2QuZG90KHR1dCksaD1hKmMtcypzO2lmKGg9PT0wKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLHA9KGMqbC1zKnUpKmYsZD0oYSp1LXMqbCkqZjtyZXR1cm4gby5zZXQoMS1wLWQsZCxwKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LHIsbixpKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksV2QueD49MCYmV2QueT49MCYmV2QueCtXZC55PD0xfXN0YXRpYyBnZXRVVih0LHIsbixpLG8sYSxzLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LHIsbixpLFdkKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sV2QueCksbC5hZGRTY2FsZWRWZWN0b3IoYSxXZC55KSxsLmFkZFNjYWxlZFZlY3RvcihzLFdkLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxyLG4saSl7cmV0dXJuIG9oLnN1YlZlY3RvcnMobixyKSxHZC5zdWJWZWN0b3JzKHQsciksb2guY3Jvc3MoR2QpLmRvdChpKTwwfXNldCh0LHIsbil7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KHIpLHRoaXMuYy5jb3B5KG4pLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5jb3B5KHRbcl0pLHRoaXMuYi5jb3B5KHRbbl0pLHRoaXMuYy5jb3B5KHRbaV0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxyLG4saSl7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsciksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxuKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBvaC5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLEdkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksb2guY3Jvc3MoR2QpLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIG9pLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LHIpe3JldHVybiBvaS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyKX1nZXRVVih0LHIsbixpLG8pe3JldHVybiBvaS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLHIsbixpLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIG9pLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gb2kuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQscil7bGV0IG49dGhpcy5hLGk9dGhpcy5iLG89dGhpcy5jLGEscztFMy5zdWJWZWN0b3JzKGksbiksVDMuc3ViVmVjdG9ycyhvLG4pLGV1dC5zdWJWZWN0b3JzKHQsbik7bGV0IGw9RTMuZG90KGV1dCksYz1UMy5kb3QoZXV0KTtpZihsPD0wJiZjPD0wKXJldHVybiByLmNvcHkobik7cnV0LnN1YlZlY3RvcnModCxpKTtsZXQgdT1FMy5kb3QocnV0KSxoPVQzLmRvdChydXQpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIHIuY29weShpKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIGE9bC8obC11KSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpO251dC5zdWJWZWN0b3JzKHQsbyk7bGV0IHA9RTMuZG90KG51dCksZD1UMy5kb3QobnV0KTtpZihkPj0wJiZwPD1kKXJldHVybiByLmNvcHkobyk7bGV0IGc9cCpjLWwqZDtpZihnPD0wJiZjPj0wJiZkPD0wKXJldHVybiBzPWMvKGMtZCksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihUMyxzKTtsZXQgXz11KmQtcCpoO2lmKF88PTAmJmgtdT49MCYmcC1kPj0wKXJldHVybiBTdWUuc3ViVmVjdG9ycyhvLGkpLHM9KGgtdSkvKGgtdSsocC1kKSksci5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihTdWUscyk7bGV0IHk9MS8oXytnK2YpO3JldHVybiBhPWcqeSxzPWYqeSxyLmNvcHkobikuYWRkU2NhbGVkVmVjdG9yKEUzLGEpLmFkZFNjYWxlZFZlY3RvcihUMyxzKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxjZnI9MCxxaT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpjZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPVYzLHRoaXMuc2lkZT1JMSx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9UGh0LHRoaXMuYmxlbmREc3Q9SWh0LHRoaXMuYmxlbmRFcXVhdGlvbj1NMSx0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPWlVLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9a2ZlLHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPW5VLHRoaXMuc3RlbmNpbFpGYWlsPW5VLHRoaXMuc3RlbmNpbFpQYXNzPW5VLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHQhPT12b2lkIDApZm9yKGxldCByIGluIHQpe2xldCBuPXRbcl07aWYobj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrcisiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKHI9PT0ic2hhZGluZyIpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9bj09PUFodDtjb250aW51ZX1sZXQgaT10aGlzW3JdO2lmKGk9PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogJyIrcisiJyBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGlzIG1hdGVyaWFsLiIpO2NvbnRpbnVlfWkmJmkuaXNDb2xvcj9pLnNldChuKTppJiZpLmlzVmVjdG9yMyYmbiYmbi5pc1ZlY3RvcjM/aS5jb3B5KG4pOnRoaXNbcl09bn19dG9KU09OKHQpe2xldCByPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtyJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IG49e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07bi51dWlkPXRoaXMudXVpZCxuLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYobi5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYobi5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx0aGlzLnJvdWdobmVzcyE9PXZvaWQgMCYmKG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx0aGlzLm1ldGFsbmVzcyE9PXZvaWQgMCYmKG4ubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx0aGlzLnNoZWVuIT09dm9pZCAwJiYobi5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYobi5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdGhpcy5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKG4uc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYobi5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiZ0aGlzLmVtaXNzaXZlSW50ZW5zaXR5IT09MSYmKG4uZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYobi5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYobi5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYobi5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdGhpcy5zaGluaW5lc3MhPT12b2lkIDAmJihuLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdGhpcy5jbGVhcmNvYXQhPT12b2lkIDAmJihuLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MhPT12b2lkIDAmJihuLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxuLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYobi5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihuLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihuLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYobi5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLG4ubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihuLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsbi5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihuLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLG4uYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYobi5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxuLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYobi5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsbi5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLG4uZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihuLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKG4ubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKG4uZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihuLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYobi5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdGhpcy5jb21iaW5lIT09dm9pZCAwJiYobi5jb21iaW5lPXRoaXMuY29tYmluZSkpLHRoaXMuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYobi5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHRoaXMucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYobi5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHRoaXMucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYobi5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYobi5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKG4udHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYobi50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHRoaXMudGhpY2tuZXNzIT09dm9pZCAwJiYobi50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihuLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdGhpcy5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiYobi5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdGhpcy5zaXplIT09dm9pZCAwJiYobi5zaXplPXRoaXMuc2l6ZSksdGhpcy5zaGFkb3dTaWRlIT09bnVsbCYmKG4uc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHRoaXMuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYobi5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLHRoaXMuYmxlbmRpbmchPT1WMyYmKG4uYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksdGhpcy5zaWRlIT09STEmJihuLnNpZGU9dGhpcy5zaWRlKSx0aGlzLnZlcnRleENvbG9ycyYmKG4udmVydGV4Q29sb3JzPSEwKSx0aGlzLm9wYWNpdHk8MSYmKG4ub3BhY2l0eT10aGlzLm9wYWNpdHkpLHRoaXMudHJhbnNwYXJlbnQ9PT0hMCYmKG4udHJhbnNwYXJlbnQ9dGhpcy50cmFuc3BhcmVudCksbi5kZXB0aEZ1bmM9dGhpcy5kZXB0aEZ1bmMsbi5kZXB0aFRlc3Q9dGhpcy5kZXB0aFRlc3Qsbi5kZXB0aFdyaXRlPXRoaXMuZGVwdGhXcml0ZSxuLmNvbG9yV3JpdGU9dGhpcy5jb2xvcldyaXRlLG4uYWxwaGFXcml0ZT10aGlzLmFscGhhV3JpdGUsbi5zdGVuY2lsV3JpdGU9dGhpcy5zdGVuY2lsV3JpdGUsbi5zdGVuY2lsV3JpdGVNYXNrPXRoaXMuc3RlbmNpbFdyaXRlTWFzayxuLnN0ZW5jaWxGdW5jPXRoaXMuc3RlbmNpbEZ1bmMsbi5zdGVuY2lsUmVmPXRoaXMuc3RlbmNpbFJlZixuLnN0ZW5jaWxGdW5jTWFzaz10aGlzLnN0ZW5jaWxGdW5jTWFzayxuLnN0ZW5jaWxGYWlsPXRoaXMuc3RlbmNpbEZhaWwsbi5zdGVuY2lsWkZhaWw9dGhpcy5zdGVuY2lsWkZhaWwsbi5zdGVuY2lsWlBhc3M9dGhpcy5zdGVuY2lsWlBhc3MsdGhpcy5yb3RhdGlvbiYmdGhpcy5yb3RhdGlvbiE9PTAmJihuLnJvdGF0aW9uPXRoaXMucm90YXRpb24pLHRoaXMucG9seWdvbk9mZnNldD09PSEwJiYobi5wb2x5Z29uT2Zmc2V0PSEwKSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IhPT0wJiYobi5wb2x5Z29uT2Zmc2V0RmFjdG9yPXRoaXMucG9seWdvbk9mZnNldEZhY3RvciksdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMhPT0wJiYobi5wb2x5Z29uT2Zmc2V0VW5pdHM9dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMpLHRoaXMubGluZXdpZHRoJiZ0aGlzLmxpbmV3aWR0aCE9PTEmJihuLmxpbmV3aWR0aD10aGlzLmxpbmV3aWR0aCksdGhpcy5kYXNoU2l6ZSE9PXZvaWQgMCYmKG4uZGFzaFNpemU9dGhpcy5kYXNoU2l6ZSksdGhpcy5nYXBTaXplIT09dm9pZCAwJiYobi5nYXBTaXplPXRoaXMuZ2FwU2l6ZSksdGhpcy5zY2FsZSE9PXZvaWQgMCYmKG4uc2NhbGU9dGhpcy5zY2FsZSksdGhpcy5kaXRoZXJpbmc9PT0hMCYmKG4uZGl0aGVyaW5nPSEwKSx0aGlzLmFscGhhVGVzdD4wJiYobi5hbHBoYVRlc3Q9dGhpcy5hbHBoYVRlc3QpLHRoaXMuYWxwaGFUb0NvdmVyYWdlPT09ITAmJihuLmFscGhhVG9Db3ZlcmFnZT10aGlzLmFscGhhVG9Db3ZlcmFnZSksdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9PT0hMCYmKG4ucHJlbXVsdGlwbGllZEFscGhhPXRoaXMucHJlbXVsdGlwbGllZEFscGhhKSx0aGlzLndpcmVmcmFtZT09PSEwJiYobi53aXJlZnJhbWU9dGhpcy53aXJlZnJhbWUpLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPjEmJihuLndpcmVmcmFtZUxpbmV3aWR0aD10aGlzLndpcmVmcmFtZUxpbmV3aWR0aCksdGhpcy53aXJlZnJhbWVMaW5lY2FwIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWNhcD10aGlzLndpcmVmcmFtZUxpbmVjYXApLHRoaXMud2lyZWZyYW1lTGluZWpvaW4hPT0icm91bmQiJiYobi53aXJlZnJhbWVMaW5lam9pbj10aGlzLndpcmVmcmFtZUxpbmVqb2luKSx0aGlzLmZsYXRTaGFkaW5nPT09ITAmJihuLmZsYXRTaGFkaW5nPXRoaXMuZmxhdFNoYWRpbmcpLHRoaXMudmlzaWJsZT09PSExJiYobi52aXNpYmxlPSExKSx0aGlzLnRvbmVNYXBwZWQ9PT0hMSYmKG4udG9uZU1hcHBlZD0hMSksSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKTtmdW5jdGlvbiBpKG8pe2xldCBhPVtdO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1vW3NdO2RlbGV0ZSBsLm1ldGFkYXRhLGEucHVzaChsKX1yZXR1cm4gYX1pZihyKXtsZXQgbz1pKHQudGV4dHVyZXMpLGE9aSh0LmltYWdlcyk7by5sZW5ndGg+MCYmKG4udGV4dHVyZXM9byksYS5sZW5ndGg+MCYmKG4uaW1hZ2VzPWEpfXJldHVybiBufWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCByPXQuY2xpcHBpbmdQbGFuZXMsbj1udWxsO2lmKHIhPT1udWxsKXtsZXQgaT1yLmxlbmd0aDtuPW5ldyBBcnJheShpKTtmb3IobGV0IG89MDtvIT09aTsrK28pbltvXT1yW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9bix0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07cWkucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtzaC5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgSW49bmV3IGosdlY9bmV3IEx0LEplPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLm5vcm1hbGl6ZWQ9bj09PSEwLHRoaXMudXNhZ2U9VzMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLml0ZW1TaXplLG4qPXIuaXRlbVNpemU7Zm9yKGxldCBpPTAsbz10aGlzLml0ZW1TaXplO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgbmUpLHJbbisrXT1hLnIscltuKytdPWEuZyxyW24rK109YS5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgTHQpLHJbbisrXT1hLngscltuKytdPWEueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGopLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCByPXRoaXMuYXJyYXksbj0wO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7bGV0IGE9dFtpXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsaSksYT1uZXcgZW4pLHJbbisrXT1hLngscltuKytdPWEueSxyW24rK109YS56LHJbbisrXT1hLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKHRoaXMuaXRlbVNpemU9PT0yKWZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKXZWLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxyKSx2Vi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShyLHZWLngsdlYueSk7ZWxzZSBpZih0aGlzLml0ZW1TaXplPT09Mylmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsciksSW4uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKHIsSW4ueCxJbi55LEluLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylJbi54PXRoaXMuZ2V0WChyKSxJbi55PXRoaXMuZ2V0WShyKSxJbi56PXRoaXMuZ2V0WihyKSxJbi5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspSW4ueD10aGlzLmdldFgociksSW4ueT10aGlzLmdldFkociksSW4uej10aGlzLmdldFoociksSW4uYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVoocixJbi54LEluLnksSW4ueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUluLng9dGhpcy5nZXRYKHIpLEluLnk9dGhpcy5nZXRZKHIpLEluLno9dGhpcy5nZXRaKHIpLEluLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihyLEluLngsSW4ueSxJbi56KTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxyKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPXIsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPXIsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPXIsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPXIsdGhpc31zZXRYWSh0LHIsbil7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpc31zZXRYWVpXKHQscixuLGksbyl7cmV0dXJuIHQqPXRoaXMuaXRlbVNpemUsdGhpcy5hcnJheVt0KzBdPXIsdGhpcy5hcnJheVt0KzFdPW4sdGhpcy5hcnJheVt0KzJdPWksdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiB0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1XMyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKHRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0IT09MHx8dGhpcy51cGRhdGVSYW5nZS5jb3VudCE9PS0xKSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O0plLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgY1U9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDhBcnJheSh0KSxyLG4pfX0sdVU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQ4QXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OENsYW1wZWRBcnJheSh0KSxyLG4pfX0sZlU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDE2QXJyYXkodCkscixuKX19LCQzPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX0scFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEludDMyQXJyYXkodCkscixuKX19LEszPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLHIsbil9fTtkVS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciB4ZT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLHIsbil9fSxtVT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgRmxvYXQ2NEFycmF5KHQpLHIsbil9fSx1ZnI9MCxYYz1uZXcgTWUsaXV0PW5ldyBvcixDMz1uZXcgaixSbD1uZXcgdGEsUlA9bmV3IHRhLExvPW5ldyBqLFBlPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOnVmcisrfSksdGhpcy51dWlkPU5sKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsLHRoaXMuZHJhd1JhbmdlPXtzdGFydDowLGNvdW50OjEvMH0sdGhpcy51c2VyRGF0YT17fX1nZXRJbmRleCgpe3JldHVybiB0aGlzLmluZGV4fXNldEluZGV4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RoaXMuaW5kZXg9bmV3KERmZSh0KT9LMzokMykodCwxKTp0aGlzLmluZGV4PXQsdGhpc31nZXRBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XX1zZXRBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdPXIsdGhpc31kZWxldGVBdHRyaWJ1dGUodCl7cmV0dXJuIGRlbGV0ZSB0aGlzLmF0dHJpYnV0ZXNbdF0sdGhpc31oYXNBdHRyaWJ1dGUodCl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XSE9PXZvaWQgMH1hZGRHcm91cCh0LHIsbj0wKXt0aGlzLmdyb3Vwcy5wdXNoKHtzdGFydDp0LGNvdW50OnIsbWF0ZXJpYWxJbmRleDpufSl9Y2xlYXJHcm91cHMoKXt0aGlzLmdyb3Vwcz1bXX1zZXREcmF3UmFuZ2UodCxyKXt0aGlzLmRyYXdSYW5nZS5zdGFydD10LHRoaXMuZHJhd1JhbmdlLmNvdW50PXJ9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbjtyIT09dm9pZCAwJiYoci5hcHBseU1hdHJpeDQodCksci5uZWVkc1VwZGF0ZT0hMCk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtpZihuIT09dm9pZCAwKXtsZXQgbz1uZXcga2koKS5nZXROb3JtYWxNYXRyaXgodCk7bi5hcHBseU5vcm1hbE1hdHJpeChvKSxuLm5lZWRzVXBkYXRlPSEwfWxldCBpPXRoaXMuYXR0cmlidXRlcy50YW5nZW50O3JldHVybiBpIT09dm9pZCAwJiYoaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksaS5uZWVkc1VwZGF0ZT0hMCksdGhpcy5ib3VuZGluZ0JveCE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ1NwaGVyZSE9PW51bGwmJnRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpc31hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblgodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWSh0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWSh0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVaKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25aKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXRyYW5zbGF0ZSh0LHIsbil7cmV0dXJuIFhjLm1ha2VUcmFuc2xhdGlvbih0LHIsbiksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9c2NhbGUodCxyLG4pe3JldHVybiBYYy5tYWtlU2NhbGUodCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfWxvb2tBdCh0KXtyZXR1cm4gaXV0Lmxvb2tBdCh0KSxpdXQudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoaXV0Lm1hdHJpeCksdGhpc31jZW50ZXIoKXtyZXR1cm4gdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSx0aGlzLmJvdW5kaW5nQm94LmdldENlbnRlcihDMykubmVnYXRlKCksdGhpcy50cmFuc2xhdGUoQzMueCxDMy55LEMzLnopLHRoaXN9c2V0RnJvbVBvaW50cyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPXRbbl07ci5wdXNoKG8ueCxvLnksby56fHwwKX1yZXR1cm4gdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksdGhpc31jb21wdXRlQm91bmRpbmdCb3goKXt0aGlzLmJvdW5kaW5nQm94PT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9bmV3IHRhKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBib3guIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nQm94LnNldChuZXcgaigtMS8wLC0xLzAsLTEvMCksbmV3IGooMS8wLDEvMCwxLzApKTtyZXR1cm59aWYodCE9PXZvaWQgMCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO1JsLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUobyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixSbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxSbC5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChMbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoUmwubWF4KSl9fWVsc2UgdGhpcy5ib3VuZGluZ0JveC5tYWtlRW1wdHkoKTsoaXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueCl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnkpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi56KSkmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpOiBDb21wdXRlZCBtaW4vbWF4IGhhdmUgTmFOIHZhbHVlcy4gVGhlICJwb3NpdGlvbiIgYXR0cmlidXRlIGlzIGxpa2VseSB0byBoYXZlIE5hTiB2YWx1ZXMuJyx0aGlzKX1jb21wdXRlQm91bmRpbmdTcGhlcmUoKXt0aGlzLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bmV3IFpmKTtsZXQgdD10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb24scj10aGlzLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbjtpZih0JiZ0LmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2NvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBHTEJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBhIG1hbnVhbCBib3VuZGluZyBzcGhlcmUuIEFsdGVybmF0aXZlbHkgc2V0ICJtZXNoLmZydXN0dW1DdWxsZWQiIHRvICJmYWxzZSIuJyx0aGlzKSx0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaiwxLzApO3JldHVybn1pZih0KXtsZXQgbj10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dO1JQLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUocyksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oTG8uYWRkVmVjdG9ycyhSbC5taW4sUlAubWluKSxSbC5leHBhbmRCeVBvaW50KExvKSxMby5hZGRWZWN0b3JzKFJsLm1heCxSUC5tYXgpLFJsLmV4cGFuZEJ5UG9pbnQoTG8pKTooUmwuZXhwYW5kQnlQb2ludChSUC5taW4pLFJsLmV4cGFuZEJ5UG9pbnQoUlAubWF4KSl9UmwuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10LmNvdW50O288YTtvKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSk7aWYocilmb3IobGV0IG89MCxhPXIubGVuZ3RoO288YTtvKyspe2xldCBzPXJbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9cy5jb3VudDtjPHU7YysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxsJiYoQzMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLExvLmFkZChDMykpLGk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKExvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KGkpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmF0dHJpYnV0ZXM7aWYodD09PW51bGx8fHIucG9zaXRpb249PT12b2lkIDB8fHIubm9ybWFsPT09dm9pZCAwfHxyLnV2PT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVUYW5nZW50cygpIGZhaWxlZC4gTWlzc2luZyByZXF1aXJlZCBhdHRyaWJ1dGVzIChpbmRleCwgcG9zaXRpb24sIG5vcm1hbCBvciB1dikiKTtyZXR1cm59bGV0IG49dC5hcnJheSxpPXIucG9zaXRpb24uYXJyYXksbz1yLm5vcm1hbC5hcnJheSxhPXIudXYuYXJyYXkscz1pLmxlbmd0aC8zO3IudGFuZ2VudD09PXZvaWQgMCYmdGhpcy5zZXRBdHRyaWJ1dGUoInRhbmdlbnQiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KDQqcyksNCkpO2xldCBsPXIudGFuZ2VudC5hcnJheSxjPVtdLHU9W107Zm9yKGxldCBCPTA7QjxzO0IrKyljW0JdPW5ldyBqLHVbQl09bmV3IGo7bGV0IGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IGoseD1uZXcgajtmdW5jdGlvbiBiKEIsSSxMKXtoLmZyb21BcnJheShpLEIqMyksZi5mcm9tQXJyYXkoaSxJKjMpLHAuZnJvbUFycmF5KGksTCozKSxkLmZyb21BcnJheShhLEIqMiksZy5mcm9tQXJyYXkoYSxJKjIpLF8uZnJvbUFycmF5KGEsTCoyKSxmLnN1YihoKSxwLnN1YihoKSxnLnN1YihkKSxfLnN1YihkKTtsZXQgUj0xLyhnLngqXy55LV8ueCpnLnkpOyFpc0Zpbml0ZShSKXx8KHkuY29weShmKS5tdWx0aXBseVNjYWxhcihfLnkpLmFkZFNjYWxlZFZlY3RvcihwLC1nLnkpLm11bHRpcGx5U2NhbGFyKFIpLHguY29weShwKS5tdWx0aXBseVNjYWxhcihnLngpLmFkZFNjYWxlZFZlY3RvcihmLC1fLngpLm11bHRpcGx5U2NhbGFyKFIpLGNbQl0uYWRkKHkpLGNbSV0uYWRkKHkpLGNbTF0uYWRkKHkpLHVbQl0uYWRkKHgpLHVbSV0uYWRkKHgpLHVbTF0uYWRkKHgpKX1sZXQgUz10aGlzLmdyb3VwcztTLmxlbmd0aD09PTAmJihTPVt7c3RhcnQ6MCxjb3VudDpuLmxlbmd0aH1dKTtmb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MyliKG5beiswXSxuW3orMV0sblt6KzJdKX1sZXQgQz1uZXcgaixQPW5ldyBqLGs9bmV3IGosTz1uZXcgajtmdW5jdGlvbiBEKEIpe2suZnJvbUFycmF5KG8sQiozKSxPLmNvcHkoayk7bGV0IEk9Y1tCXTtDLmNvcHkoSSksQy5zdWIoay5tdWx0aXBseVNjYWxhcihrLmRvdChJKSkpLm5vcm1hbGl6ZSgpLFAuY3Jvc3NWZWN0b3JzKE8sSSk7bGV0IFI9UC5kb3QodVtCXSk8MD8tMToxO2xbQio0XT1DLngsbFtCKjQrMV09Qy55LGxbQio0KzJdPUMueixsW0IqNCszXT1SfWZvcihsZXQgQj0wLEk9Uy5sZW5ndGg7QjxJOysrQil7bGV0IEw9U1tCXSxSPUwuc3RhcnQsRj1MLmNvdW50O2ZvcihsZXQgej1SLFU9UitGO3o8VTt6Kz0zKUQoblt6KzBdKSxEKG5beisxXSksRChuW3orMl0pfX1jb21wdXRlVmVydGV4Tm9ybWFscygpe2xldCB0PXRoaXMuaW5kZXgscj10aGlzLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtpZihyIT09dm9pZCAwKXtsZXQgbj10aGlzLmdldEF0dHJpYnV0ZSgibm9ybWFsIik7aWYobj09PXZvaWQgMCluPW5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHIuY291bnQqMyksMyksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbik7ZWxzZSBmb3IobGV0IGY9MCxwPW4uY291bnQ7ZjxwO2YrKyluLnNldFhZWihmLDAsMCwwKTtsZXQgaT1uZXcgaixvPW5ldyBqLGE9bmV3IGoscz1uZXcgaixsPW5ldyBqLGM9bmV3IGosdT1uZXcgaixoPW5ldyBqO2lmKHQpZm9yKGxldCBmPTAscD10LmNvdW50O2Y8cDtmKz0zKXtsZXQgZD10LmdldFgoZiswKSxnPXQuZ2V0WChmKzEpLF89dC5nZXRYKGYrMik7aS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZCksby5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZyksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsXyksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUobixkKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUobixnKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUobixfKSxzLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxuLnNldFhZWihkLHMueCxzLnkscy56KSxuLnNldFhZWihnLGwueCxsLnksbC56KSxuLnNldFhZWihfLGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgZj0wLHA9ci5jb3VudDtmPHA7Zis9MylpLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMSksYS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZisyKSx1LnN1YlZlY3RvcnMoYSxvKSxoLnN1YlZlY3RvcnMoaSxvKSx1LmNyb3NzKGgpLG4uc2V0WFlaKGYrMCx1LngsdS55LHUueiksbi5zZXRYWVooZisxLHUueCx1LnksdS56KSxuLnNldFhZWihmKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLG4ubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQscil7aWYoISh0JiZ0LmlzQnVmZmVyR2VvbWV0cnkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBnZW9tZXRyeSBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkuIix0KTtyZXR1cm59cj09PXZvaWQgMCYmKHI9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBpIGluIG4pe2lmKHQuYXR0cmlidXRlc1tpXT09PXZvaWQgMCljb250aW51ZTtsZXQgYT1uW2ldLmFycmF5LHM9dC5hdHRyaWJ1dGVzW2ldLGw9cy5hcnJheSxjPXMuaXRlbVNpemUqcix1PU1hdGgubWluKGwubGVuZ3RoLGEubGVuZ3RoLWMpO2ZvcihsZXQgaD0wLGY9YztoPHU7aCsrLGYrKylhW2ZdPWxbaF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCByPTAsbj10LmNvdW50O3I8bjtyKyspTG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLExvLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKHIsTG8ueCxMby55LExvLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQocyxsKXtsZXQgYz1zLmFycmF5LHU9cy5pdGVtU2l6ZSxoPXMubm9ybWFsaXplZCxmPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLHA9MCxkPTA7Zm9yKGxldCBnPTAsXz1sLmxlbmd0aDtnPF87ZysrKXtzLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/cD1sW2ddKnMuZGF0YS5zdHJpZGUrcy5vZmZzZXQ6cD1sW2ddKnU7Zm9yKGxldCB5PTA7eTx1O3krKylmW2QrK109Y1twKytdfXJldHVybiBuZXcgSmUoZix1LGgpfWlmKHRoaXMuaW5kZXg9PT1udWxsKXJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LnRvTm9uSW5kZXhlZCgpOiBCdWZmZXJHZW9tZXRyeSBpcyBhbHJlYWR5IG5vbi1pbmRleGVkLiIpLHRoaXM7bGV0IHI9bmV3IFBlLG49dGhpcy5pbmRleC5hcnJheSxpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXSxjPXQobCxuKTtyLnNldEF0dHJpYnV0ZShzLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgcyBpbiBvKXtsZXQgbD1bXSxjPW9bc107Zm9yKGxldCB1PTAsaD1jLmxlbmd0aDt1PGg7dSsrKXtsZXQgZj1jW3VdLHA9dChmLG4pO2wucHVzaChwKX1yLm1vcnBoQXR0cmlidXRlc1tzXT1sfXIubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10aGlzLmdyb3Vwcztmb3IobGV0IHM9MCxsPWEubGVuZ3RoO3M8bDtzKyspe2xldCBjPWFbc107ci5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gcn10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdGhpcy5wYXJhbWV0ZXJzIT09dm9pZCAwKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpbFtjXSE9PXZvaWQgMCYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgcj10aGlzLmluZGV4O3IhPT1udWxsJiYodC5kYXRhLmluZGV4PXt0eXBlOnIuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLmFycmF5KX0pO2xldCBuPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gbil7bGV0IGM9bltsXTt0LmRhdGEuYXR0cmlidXRlc1tsXT1jLnRvSlNPTih0LmRhdGEpfWxldCBpPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grKyl7bGV0IHA9Y1toXTt1LnB1c2gocC50b0pTT04odC5kYXRhKSl9dS5sZW5ndGg+MCYmKGlbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1pLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgYT10aGlzLmdyb3VwczthLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGEpKSk7bGV0IHM9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gcyE9PW51bGwmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjpzLmNlbnRlci50b0FycmF5KCkscmFkaXVzOnMucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGw7bGV0IHI9e307dGhpcy5uYW1lPXQubmFtZTtsZXQgbj10LmluZGV4O24hPT1udWxsJiZ0aGlzLnNldEluZGV4KG4uY2xvbmUocikpO2xldCBpPXQuYXR0cmlidXRlcztmb3IobGV0IGMgaW4gaSl7bGV0IHU9aVtjXTt0aGlzLnNldEF0dHJpYnV0ZShjLHUuY2xvbmUocikpfWxldCBvPXQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiBvKXtsZXQgdT1bXSxoPW9bY107Zm9yKGxldCBmPTAscD1oLmxlbmd0aDtmPHA7ZisrKXUucHVzaChoW2ZdLmNsb25lKHIpKTt0aGlzLm1vcnBoQXR0cmlidXRlc1tjXT11fXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9dC5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgYT10Lmdyb3Vwcztmb3IobGV0IGM9MCx1PWEubGVuZ3RoO2M8dTtjKyspe2xldCBoPWFbY107dGhpcy5hZGRHcm91cChoLnN0YXJ0LGguY291bnQsaC5tYXRlcmlhbEluZGV4KX1sZXQgcz10LmJvdW5kaW5nQm94O3MhPT1udWxsJiYodGhpcy5ib3VuZGluZ0JveD1zLmNsb25lKCkpO2xldCBsPXQuYm91bmRpbmdTcGhlcmU7cmV0dXJuIGwhPT1udWxsJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1sLmNsb25lKCkpLHRoaXMuZHJhd1JhbmdlLnN0YXJ0PXQuZHJhd1JhbmdlLnN0YXJ0LHRoaXMuZHJhd1JhbmdlLmNvdW50PXQuZHJhd1JhbmdlLmNvdW50LHRoaXMudXNlckRhdGE9dC51c2VyRGF0YSx0LnBhcmFtZXRlcnMhPT12b2lkIDAmJih0aGlzLnBhcmFtZXRlcnM9T2JqZWN0LmFzc2lnbih7fSx0LnBhcmFtZXRlcnMpKSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtQZS5wcm90b3R5cGUuaXNCdWZmZXJHZW9tZXRyeT0hMDt2YXIgTXVlPW5ldyBNZSxBMz1uZXcgSmYsb3V0PW5ldyBaZixSMD1uZXcgaixOMD1uZXcgaixEMD1uZXcgaixhdXQ9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaix4Vj1uZXcgaixiVj1uZXcgaix3Vj1uZXcgaixTVj1uZXcgTHQsTVY9bmV3IEx0LEVWPW5ldyBMdCxjdXQ9bmV3IGosVFY9bmV3IGosdGk9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBzaCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHQubW9ycGhUYXJnZXRJbmZsdWVuY2VzIT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdC5tb3JwaFRhcmdldERpY3Rpb25hcnkhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYoaT09PXZvaWQgMHx8KG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLG91dC5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLG91dC5hcHBseU1hdHJpeDQobyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShvdXQpPT09ITEpfHwoTXVlLmNvcHkobykuaW52ZXJ0KCksQTMuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE11ZSksbi5ib3VuZGluZ0JveCE9PW51bGwmJkEzLmludGVyc2VjdHNCb3gobi5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBhO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHM9bi5pbmRleCxsPW4uYXR0cmlidXRlcy5wb3NpdGlvbixjPW4ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9bi5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPW4uYXR0cmlidXRlcy51dixmPW4uYXR0cmlidXRlcy51djIscD1uLmdyb3VwcyxkPW4uZHJhd1JhbmdlO2lmKHMhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKHMuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9cy5nZXRYKEMpLE89cy5nZXRYKEMrMSksRD1zLmdldFgoQysyKTthPUNWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4ocy5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9cy5nZXRYKHkpLFM9cy5nZXRYKHkrMSksQz1zLmdldFgoeSsyKTthPUNWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX1lbHNlIGlmKGwhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGc9MCxfPXAubGVuZ3RoO2c8XztnKyspe2xldCB5PXBbZ10seD1pW3kubWF0ZXJpYWxJbmRleF0sYj1NYXRoLm1heCh5LnN0YXJ0LGQuc3RhcnQpLFM9TWF0aC5taW4obC5jb3VudCxNYXRoLm1pbih5LnN0YXJ0K3kuY291bnQsZC5zdGFydCtkLmNvdW50KSk7Zm9yKGxldCBDPWIsUD1TO0M8UDtDKz0zKXtsZXQgaz1DLE89QysxLEQ9QysyO2E9Q1YodGhpcyx4LHQsQTMsbCxjLHUsaCxmLGssTyxEKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcihDLzMpLGEuZmFjZS5tYXRlcmlhbEluZGV4PXkubWF0ZXJpYWxJbmRleCxyLnB1c2goYSkpfX1lbHNle2xldCBnPU1hdGgubWF4KDAsZC5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LGQuc3RhcnQrZC5jb3VudCk7Zm9yKGxldCB5PWcseD1fO3k8eDt5Kz0zKXtsZXQgYj15LFM9eSsxLEM9eSsyO2E9Q1YodGhpcyxpLHQsQTMsbCxjLHUsaCxmLGIsUyxDKSxhJiYoYS5mYWNlSW5kZXg9TWF0aC5mbG9vcih5LzMpLHIucHVzaChhKSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O3RpLnByb3RvdHlwZS5pc01lc2g9ITA7ZnVuY3Rpb24gaGZyKGUsdCxyLG4saSxvLGEscyl7bGV0IGw7aWYodC5zaWRlPT09SWk/bD1uLmludGVyc2VjdFRyaWFuZ2xlKGEsbyxpLCEwLHMpOmw9bi5pbnRlcnNlY3RUcmlhbmdsZShpLG8sYSx0LnNpZGUhPT1MMSxzKSxsPT09bnVsbClyZXR1cm4gbnVsbDtUVi5jb3B5KHMpLFRWLmFwcGx5TWF0cml4NChlLm1hdHJpeFdvcmxkKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhUVik7cmV0dXJuIGM8ci5uZWFyfHxjPnIuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6VFYuY2xvbmUoKSxvYmplY3Q6ZX19ZnVuY3Rpb24gQ1YoZSx0LHIsbixpLG8sYSxzLGwsYyx1LGgpe1IwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxjKSxOMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksdSksRDAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGgpO2xldCBmPWUubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKG8mJmYpe3hWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKSx3Vi5zZXQoMCwwLDApO2ZvcihsZXQgZD0wLGc9by5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXSx5PW9bZF07XyE9PTAmJihhdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LGMpLHN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksdSksbHV0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxoKSxhPyh4Vi5hZGRTY2FsZWRWZWN0b3IoYXV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihzdXQsXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dCxfKSk6KHhWLmFkZFNjYWxlZFZlY3RvcihhdXQuc3ViKFIwKSxfKSxiVi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihOMCksXyksd1YuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoRDApLF8pKSl9UjAuYWRkKHhWKSxOMC5hZGQoYlYpLEQwLmFkZCh3Vil9ZS5pc1NraW5uZWRNZXNoJiYoZS5ib25lVHJhbnNmb3JtKGMsUjApLGUuYm9uZVRyYW5zZm9ybSh1LE4wKSxlLmJvbmVUcmFuc2Zvcm0oaCxEMCkpO2xldCBwPWhmcihlLHQscixuLFIwLE4wLEQwLGN1dCk7aWYocCl7cyYmKFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjKSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsdSksRVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGgpLHAudXY9b2kuZ2V0VVYoY3V0LFIwLE4wLEQwLFNWLE1WLEVWLG5ldyBMdCkpLGwmJihTVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksTVYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLEVWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxoKSxwLnV2Mj1vaS5nZXRVVihjdXQsUjAsTjAsRDAsU1YsTVYsRVYsbmV3IEx0KSk7bGV0IGQ9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgaixtYXRlcmlhbEluZGV4OjB9O29pLmdldE5vcm1hbChSMCxOMCxEMCxkLm5vcm1hbCkscC5mYWNlPWR9cmV0dXJuIHB9dmFyIFFmPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xLG89MSxhPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLGRlcHRoOm4sd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sZGVwdGhTZWdtZW50czphfTtsZXQgcz10aGlzO2k9TWF0aC5mbG9vcihpKSxvPU1hdGguZmxvb3IobyksYT1NYXRoLmZsb29yKGEpO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxwPTA7ZCgieiIsInkiLCJ4IiwtMSwtMSxuLHIsdCxhLG8sMCksZCgieiIsInkiLCJ4IiwxLC0xLG4sciwtdCxhLG8sMSksZCgieCIsInoiLCJ5IiwxLDEsdCxuLHIsaSxhLDIpLGQoIngiLCJ6IiwieSIsMSwtMSx0LG4sLXIsaSxhLDMpLGQoIngiLCJ5IiwieiIsMSwtMSx0LHIsbixpLG8sNCksZCgieCIsInkiLCJ6IiwtMSwtMSx0LHIsLW4saSxvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGgsMikpO2Z1bmN0aW9uIGQoZyxfLHkseCxiLFMsQyxQLGssTyxEKXtsZXQgQj1TL2ssST1DL08sTD1TLzIsUj1DLzIsRj1QLzIsej1rKzEsVT1PKzEsVz0wLFo9MCxydD1uZXcgajtmb3IobGV0IG90PTA7b3Q8VTtvdCsrKXtsZXQgc3Q9b3QqSS1SO2ZvcihsZXQgU3Q9MDtTdDx6O1N0Kyspe2xldCBidD1TdCpCLUw7cnRbZ109YnQqeCxydFtfXT1zdCpiLHJ0W3ldPUYsYy5wdXNoKHJ0LngscnQueSxydC56KSxydFtnXT0wLHJ0W19dPTAscnRbeV09UD4wPzE6LTEsdS5wdXNoKHJ0LngscnQueSxydC56KSxoLnB1c2goU3QvayksaC5wdXNoKDEtb3QvTyksVys9MX19Zm9yKGxldCBvdD0wO290PE87b3QrKylmb3IobGV0IHN0PTA7c3Q8aztzdCsrKXtsZXQgU3Q9ZitzdCt6Km90LGJ0PWYrc3Qreioob3QrMSksTXQ9Zisoc3QrMSkreioob3QrMSksbHQ9Zisoc3QrMSkreipvdDtsLnB1c2goU3QsYnQsbHQpLGwucHVzaChidCxNdCxsdCksWis9Nn1zLmFkZEdyb3VwKHAsWixEKSxwKz1aLGYrPVd9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFFmKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gWjMoZSl7bGV0IHQ9e307Zm9yKGxldCByIGluIGUpe3Rbcl09e307Zm9yKGxldCBuIGluIGVbcl0pe2xldCBpPWVbcl1bbl07aSYmKGkuaXNDb2xvcnx8aS5pc01hdHJpeDN8fGkuaXNNYXRyaXg0fHxpLmlzVmVjdG9yMnx8aS5pc1ZlY3RvcjN8fGkuaXNWZWN0b3I0fHxpLmlzVGV4dHVyZXx8aS5pc1F1YXRlcm5pb24pP3Rbcl1bbl09aS5jbG9uZSgpOkFycmF5LmlzQXJyYXkoaSk/dFtyXVtuXT1pLnNsaWNlKCk6dFtyXVtuXT1pfX1yZXR1cm4gdH1mdW5jdGlvbiBUYShlKXtsZXQgdD17fTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49WjMoZVtyXSk7Zm9yKGxldCBpIGluIG4pdFtpXT1uW2ldfXJldHVybiB0fXZhciB6ZmU9e2Nsb25lOlozLG1lcmdlOlRhfSxmZnI9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAscGZyPWB2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCAxLjAsIDAuMCwgMC4wLCAxLjAgKTsKfWAsbGg9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPWZmcix0aGlzLmZyYWdtZW50U2hhZGVyPXBmcix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1aMyh0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7ci5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLHIudW5pZm9ybXM9e307Zm9yKGxldCBpIGluIHRoaXMudW5pZm9ybXMpe2xldCBhPXRoaXMudW5pZm9ybXNbaV0udmFsdWU7YSYmYS5pc1RleHR1cmU/ci51bmlmb3Jtc1tpXT17dHlwZToidCIsdmFsdWU6YS50b0pTT04odCkudXVpZH06YSYmYS5pc0NvbG9yP3IudW5pZm9ybXNbaV09e3R5cGU6ImMiLHZhbHVlOmEuZ2V0SGV4KCl9OmEmJmEuaXNWZWN0b3IyP3IudW5pZm9ybXNbaV09e3R5cGU6InYyIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjM/ci51bmlmb3Jtc1tpXT17dHlwZToidjMiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzVmVjdG9yND9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2NCIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXgzP3IudW5pZm9ybXNbaV09e3R5cGU6Im0zIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc01hdHJpeDQ/ci51bmlmb3Jtc1tpXT17dHlwZToibTQiLHZhbHVlOmEudG9BcnJheSgpfTpyLnVuaWZvcm1zW2ldPXt2YWx1ZTphfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoci5kZWZpbmVzPXRoaXMuZGVmaW5lcyksci52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsci5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBuPXt9O2ZvcihsZXQgaSBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW2ldPT09ITAmJihuW2ldPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmV4dGVuc2lvbnM9bikscn19O2xoLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBSMT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgTWUsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgTWV9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtcls4XSwtcls5XSwtclsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxyKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07UjEucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBVaT1jbGFzcyBleHRlbmRzIFIxe2NvbnN0cnVjdG9yKHQ9NTAscj0xLG49LjEsaT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9cix0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgcj0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVFQKjIqTWF0aC5hdGFuKHIpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oUDEqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBRUCoyKk1hdGguYXRhbihNYXRoLnRhbihQMSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLmFzcGVjdD10L3IsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PXIsdGhpcy52aWV3Lm9mZnNldFg9bix0aGlzLnZpZXcub2Zmc2V0WT1pLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIscj10Kk1hdGgudGFuKFAxKi41KnRoaXMuZm92KS90aGlzLnpvb20sbj0yKnIsaT10aGlzLmFzcGVjdCpuLG89LS41KmksYT10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPWEuZnVsbFdpZHRoLGM9YS5mdWxsSGVpZ2h0O28rPWEub2Zmc2V0WCppL2wsci09YS5vZmZzZXRZKm4vYyxpKj1hLndpZHRoL2wsbio9YS5oZWlnaHQvY31sZXQgcz10aGlzLmZpbG1PZmZzZXQ7cyE9PTAmJihvKz10KnMvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8raSxyLHItbix0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5mb3Y9dGhpcy5mb3Ysci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHIub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsci5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksci5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLHIub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LHJ9fTtVaS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgUDM9OTAsSTM9MSxKMz1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsbi5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9bjtsZXQgaT1uZXcgVWkoUDMsSTMsdCxyKTtpLmxheWVycz10aGlzLmxheWVycyxpLnVwLnNldCgwLC0xLDApLGkubG9va0F0KG5ldyBqKDEsMCwwKSksdGhpcy5hZGQoaSk7bGV0IG89bmV3IFVpKFAzLEkzLHQscik7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaigtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgVWkoUDMsSTMsdCxyKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsMSksYS5sb29rQXQobmV3IGooMCwxLDApKSx0aGlzLmFkZChhKTtsZXQgcz1uZXcgVWkoUDMsSTMsdCxyKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsLTEpLHMubG9va0F0KG5ldyBqKDAsLTEsMCkpLHRoaXMuYWRkKHMpO2xldCBsPW5ldyBVaShQMyxJMyx0LHIpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGooMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgVWkoUDMsSTMsdCxyKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBqKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LHIpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBuPXRoaXMucmVuZGVyVGFyZ2V0LFtpLG8sYSxzLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPW4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7bi50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChuLDApLHQucmVuZGVyKHIsaSksdC5zZXRSZW5kZXJUYXJnZXQobiwxKSx0LnJlbmRlcihyLG8pLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMiksdC5yZW5kZXIocixhKSx0LnNldFJlbmRlclRhcmdldChuLDMpLHQucmVuZGVyKHIscyksdC5zZXRSZW5kZXJUYXJnZXQobiw0KSx0LnJlbmRlcihyLGwpLG4udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChuLDUpLHQucmVuZGVyKHIsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsbi50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxIMD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLHI9ciE9PXZvaWQgMD9yOm54LHN1cGVyKHQscixuLGksbyxhLHMsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07SDAucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIFEzPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe051bWJlci5pc0ludGVnZXIocikmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLHI9biksc3VwZXIodCx0LHIpLHI9cnx8e30sdGhpcy50ZXh0dXJlPW5ldyBIMCh2b2lkIDAsci5tYXBwaW5nLHIud3JhcFMsci53cmFwVCxyLm1hZ0ZpbHRlcixyLm1pbkZpbHRlcixyLmZvcm1hdCxyLnR5cGUsci5hbmlzb3Ryb3B5LHIuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9yLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyIT09dm9pZCAwP3IubWluRmlsdGVyOmlpfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQscil7dGhpcy50ZXh0dXJlLnR5cGU9ci50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UW8sdGhpcy50ZXh0dXJlLmVuY29kaW5nPXIuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1yLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXIubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ci5tYWdGaWx0ZXI7bGV0IG49e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0saT1uZXcgUWYoNSw1LDUpLG89bmV3IGxoKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpaMyhuLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6bi52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6bi5mcmFnbWVudFNoYWRlcixzaWRlOklpLGJsZW5kaW5nOiRkfSk7by51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9cjtsZXQgYT1uZXcgdGkoaSxvKSxzPXIubWluRmlsdGVyO3JldHVybiByLm1pbkZpbHRlcj09PW94JiYoci5taW5GaWx0ZXI9aWkpLG5ldyBKMygxLDEwLHRoaXMpLnVwZGF0ZSh0LGEpLHIubWluRmlsdGVyPXMsYS5nZW9tZXRyeS5kaXNwb3NlKCksYS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LHIsbixpKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgYT0wO2E8NjthKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxhKSx0LmNsZWFyKHIsbixpKTt0LnNldFJlbmRlclRhcmdldChvKX19O1EzLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgdXV0PW5ldyBqLGRmcj1uZXcgaixtZnI9bmV3IGtpLCRjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMSwwLDApLHI9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1yLHRoaXN9c2V0Q29tcG9uZW50cyh0LHIsbixpKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQscixuKSx0aGlzLmNvbnN0YW50PWksdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LXIuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LHIsbil7bGV0IGk9dXV0LnN1YlZlY3RvcnMobixyKS5jcm9zcyhkZnIuc3ViVmVjdG9ycyh0LHIpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludChpLHQpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0Lm5vcm1hbCksdGhpcy5jb25zdGFudD10LmNvbnN0YW50LHRoaXN9bm9ybWFsaXplKCl7bGV0IHQ9MS90aGlzLm5vcm1hbC5sZW5ndGgoKTtyZXR1cm4gdGhpcy5ub3JtYWwubXVsdGlwbHlTY2FsYXIodCksdGhpcy5jb25zdGFudCo9dCx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLmNvbnN0YW50Kj0tMSx0aGlzLm5vcm1hbC5uZWdhdGUoKSx0aGlzfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gdGhpcy5ub3JtYWwuZG90KHQpK3RoaXMuY29uc3RhbnR9ZGlzdGFuY2VUb1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVRvUG9pbnQodC5jZW50ZXIpLXQucmFkaXVzfXByb2plY3RQb2ludCh0LHIpe3JldHVybiByLmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmRpc3RhbmNlVG9Qb2ludCh0KSkuYWRkKHQpfWludGVyc2VjdExpbmUodCxyKXtsZXQgbj10LmRlbHRhKHV1dCksaT10aGlzLm5vcm1hbC5kb3Qobik7aWYoaT09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9yLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9pO3JldHVybiBvPDB8fG8+MT9udWxsOnIuY29weShuKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IHI9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksbj10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIHI8MCYmbj4wfHxuPDAmJnI+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxyKXtsZXQgbj1yfHxtZnIuZ2V0Tm9ybWFsTWF0cml4KHQpLGk9dGhpcy5jb3BsYW5hclBvaW50KHV1dCkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKG4pLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1pLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTskYy5wcm90b3R5cGUuaXNQbGFuZT0hMDt2YXIgTDM9bmV3IFpmLEFWPW5ldyBqLE4xPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICRjLHI9bmV3ICRjLG49bmV3ICRjLGk9bmV3ICRjLG89bmV3ICRjLGE9bmV3ICRjKXt0aGlzLnBsYW5lcz1bdCxyLG4saSxvLGFdfXNldCh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5wbGFuZXM7cmV0dXJuIHNbMF0uY29weSh0KSxzWzFdLmNvcHkociksc1syXS5jb3B5KG4pLHNbM10uY29weShpKSxzWzRdLmNvcHkobyksc1s1XS5jb3B5KGEpLHRoaXN9Y29weSh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXJbbl0uY29weSh0LnBsYW5lc1tuXSk7cmV0dXJuIHRoaXN9c2V0RnJvbVByb2plY3Rpb25NYXRyaXgodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmVsZW1lbnRzLGk9blswXSxvPW5bMV0sYT1uWzJdLHM9blszXSxsPW5bNF0sYz1uWzVdLHU9bls2XSxoPW5bN10sZj1uWzhdLHA9bls5XSxkPW5bMTBdLGc9blsxMV0sXz1uWzEyXSx5PW5bMTNdLHg9blsxNF0sYj1uWzE1XTtyZXR1cm4gclswXS5zZXRDb21wb25lbnRzKHMtaSxoLWwsZy1mLGItXykubm9ybWFsaXplKCksclsxXS5zZXRDb21wb25lbnRzKHMraSxoK2wsZytmLGIrXykubm9ybWFsaXplKCksclsyXS5zZXRDb21wb25lbnRzKHMrbyxoK2MsZytwLGIreSkubm9ybWFsaXplKCksclszXS5zZXRDb21wb25lbnRzKHMtbyxoLWMsZy1wLGIteSkubm9ybWFsaXplKCkscls0XS5zZXRDb21wb25lbnRzKHMtYSxoLXUsZy1kLGIteCkubm9ybWFsaXplKCkscls1XS5zZXRDb21wb25lbnRzKHMrYSxoK3UsZytkLGIreCkubm9ybWFsaXplKCksdGhpc31pbnRlcnNlY3RzT2JqZWN0KHQpe2xldCByPXQuZ2VvbWV0cnk7cmV0dXJuIHIuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZyLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEwzLmNvcHkoci5ib3VuZGluZ1NwaGVyZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShMMyl9aW50ZXJzZWN0c1Nwcml0ZSh0KXtyZXR1cm4gTDMuY2VudGVyLnNldCgwLDAsMCksTDMucmFkaXVzPS43MDcxMDY3ODExODY1NDc2LEwzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5wbGFuZXMsbj10LmNlbnRlcixpPS10LnJhZGl1cztmb3IobGV0IG89MDtvPDY7bysrKWlmKHJbb10uZGlzdGFuY2VUb1BvaW50KG4pPGkpcmV0dXJuITE7cmV0dXJuITB9aW50ZXJzZWN0c0JveCh0KXtsZXQgcj10aGlzLnBsYW5lcztmb3IobGV0IG49MDtuPDY7bisrKXtsZXQgaT1yW25dO2lmKEFWLng9aS5ub3JtYWwueD4wP3QubWF4Lng6dC5taW4ueCxBVi55PWkubm9ybWFsLnk+MD90Lm1heC55OnQubWluLnksQVYuej1pLm5vcm1hbC56PjA/dC5tYXguejp0Lm1pbi56LGkuZGlzdGFuY2VUb1BvaW50KEFWKTwwKXJldHVybiExfXJldHVybiEwfWNvbnRhaW5zUG9pbnQodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylpZihyW25dLmRpc3RhbmNlVG9Qb2ludCh0KTwwKXJldHVybiExO3JldHVybiEwfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O2Z1bmN0aW9uIEZmZSgpe2xldCBlPW51bGwsdD0hMSxyPW51bGwsbj1udWxsO2Z1bmN0aW9uIGkobyxhKXtyKG8sYSksbj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJnIhPT1udWxsJiYobj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShpKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe2UuY2FuY2VsQW5pbWF0aW9uRnJhbWUobiksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihvKXtyPW99LHNldENvbnRleHQ6ZnVuY3Rpb24obyl7ZT1vfX19ZnVuY3Rpb24gZ2ZyKGUsdCl7bGV0IHI9dC5pc1dlYkdMMixuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkoYyx1KXtsZXQgaD1jLmFycmF5LGY9Yy51c2FnZSxwPWUuY3JlYXRlQnVmZmVyKCk7ZS5iaW5kQnVmZmVyKHUscCksZS5idWZmZXJEYXRhKHUsaCxmKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZD01MTI2O3JldHVybiBoIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Q9NTEyNjpoIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpoIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/cj9kPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmQ9NTEyMzpoIGluc3RhbmNlb2YgSW50MTZBcnJheT9kPTUxMjI6aCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Q9NTEyNTpoIGluc3RhbmNlb2YgSW50MzJBcnJheT9kPTUxMjQ6aCBpbnN0YW5jZW9mIEludDhBcnJheT9kPTUxMjA6KGggaW5zdGFuY2VvZiBVaW50OEFycmF5fHxoIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZD01MTIxKSx7YnVmZmVyOnAsdHlwZTpkLGJ5dGVzUGVyRWxlbWVudDpoLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX1mdW5jdGlvbiBvKGMsdSxoKXtsZXQgZj11LmFycmF5LHA9dS51cGRhdGVSYW5nZTtlLmJpbmRCdWZmZXIoaCxjKSxwLmNvdW50PT09LTE/ZS5idWZmZXJTdWJEYXRhKGgsMCxmKToocj9lLmJ1ZmZlclN1YkRhdGEoaCxwLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYscC5vZmZzZXQscC5jb3VudCk6ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLnN1YmFycmF5KHAub2Zmc2V0LHAub2Zmc2V0K3AuY291bnQpKSxwLmNvdW50PS0xKX1mdW5jdGlvbiBhKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksbi5nZXQoYyl9ZnVuY3Rpb24gcyhjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9bi5nZXQoYyk7dSYmKGUuZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxuLmRlbGV0ZShjKSl9ZnVuY3Rpb24gbChjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IGY9bi5nZXQoYyk7KCFmfHxmLnZlcnNpb248Yy52ZXJzaW9uKSYmbi5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSk7cmV0dXJufWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgaD1uLmdldChjKTtoPT09dm9pZCAwP24uc2V0KGMsaShjLHUpKTpoLnZlcnNpb248Yy52ZXJzaW9uJiYobyhoLmJ1ZmZlcixjLHUpLGgudmVyc2lvbj1jLnZlcnNpb24pfXJldHVybntnZXQ6YSxyZW1vdmU6cyx1cGRhdGU6bH19dmFyIFYwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9MSxuPTEsaT0xKXtzdXBlcigpLHRoaXMudHlwZT0iUGxhbmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDpyLHdpZHRoU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppfTtsZXQgbz10LzIsYT1yLzIscz1NYXRoLmZsb29yKG4pLGw9TWF0aC5mbG9vcihpKSxjPXMrMSx1PWwrMSxoPXQvcyxmPXIvbCxwPVtdLGQ9W10sZz1bXSxfPVtdO2ZvcihsZXQgeT0wO3k8dTt5Kyspe2xldCB4PXkqZi1hO2ZvcihsZXQgYj0wO2I8YztiKyspe2xldCBTPWIqaC1vO2QucHVzaChTLC14LDApLGcucHVzaCgwLDAsMSksXy5wdXNoKGIvcyksXy5wdXNoKDEteS9sKX19Zm9yKGxldCB5PTA7eTxsO3krKylmb3IobGV0IHg9MDt4PHM7eCsrKXtsZXQgYj14K2MqeSxTPXgrYyooeSsxKSxDPXgrMStjKih5KzEpLFA9eCsxK2MqeTtwLnB1c2goYixTLFApLHAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVjAodC53aWR0aCx0LmhlaWdodCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyl9fSxfZnI9YCNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHZVdiApLmc7CiNlbmRpZmAseWZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx2ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCglpZiAoIGRpZmZ1c2VDb2xvci5hIDwgYWxwaGFUZXN0ICkgZGlzY2FyZDsKI2VuZGlmYCx4ZnI9YCNpZmRlZiBVU0VfQUxQSEFURVNUCgl1bmlmb3JtIGZsb2F0IGFscGhhVGVzdDsKI2VuZGlmYCxiZnI9YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCx3ZnI9YCNpZmRlZiBVU0VfQU9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGFvTWFwOwoJdW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTsKI2VuZGlmYCxTZnI9InZlYzMgdHJhbnNmb3JtZWQgPSB2ZWMzKCBwb3NpdGlvbiApOyIsTWZyPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsRWZyPWB2ZWMzIEJSREZfTGFtYmVydCggY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IgKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjsKfQp2ZWMzIEZfU2NobGljayggY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCBkb3RWSCApIHsKCWZsb2F0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTsKCXJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7Cn0KZmxvYXQgVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkwsIGNvbnN0IGluIGZsb2F0IGRvdE5WICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApOwoJZmxvYXQgZ2wgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApOwoJcmV0dXJuIDAuNSAvIG1heCggZ3YgKyBnbCwgRVBTSUxPTiApOwp9CmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBkZW5vbSA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTsKfQp2ZWMzIEJSREZfR0dYKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICk7CglmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7CglmbG9hdCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIFYgKiBEICk7Cn0KdmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgljb25zdCBmbG9hdCBMVVRfU0laRSA9IDY0LjA7Cgljb25zdCBmbG9hdCBMVVRfU0NBTEUgPSAoIExVVF9TSVpFIC0gMS4wICkgLyBMVVRfU0laRTsKCWNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIE4sIFYgKSApOwoJdmVjMiB1diA9IHZlYzIoIHJvdWdobmVzcywgc3FydCggMS4wIC0gZG90TlYgKSApOwoJdXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTOwoJcmV0dXJuIHV2Owp9CmZsb2F0IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyBmICkgewoJZmxvYXQgbCA9IGxlbmd0aCggZiApOwoJcmV0dXJuIG1heCggKCBsICogbCArIGYueiApIC8gKCBsICsgMS4wICksIDAuMCApOwp9CnZlYzMgTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIHYxLCBjb25zdCBpbiB2ZWMzIHYyICkgewoJZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7CglmbG9hdCB5ID0gYWJzKCB4ICk7CglmbG9hdCBhID0gMC44NTQzOTg1ICsgKCAwLjQ5NjUxNTUgKyAwLjAxNDUyMDYgKiB5ICkgKiB5OwoJZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTsKCWZsb2F0IHYgPSBhIC8gYjsKCWZsb2F0IHRoZXRhX3NpbnRoZXRhID0gKCB4ID4gMC4wICkgPyB2IDogMC41ICogaW52ZXJzZXNxcnQoIG1heCggMS4wIC0geCAqIHgsIDFlLTcgKSApIC0gdjsKCXJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTsKfQp2ZWMzIExUQ19FdmFsdWF0ZSggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIHZlYzMgUCwgY29uc3QgaW4gbWF0MyBtSW52LCBjb25zdCBpbiB2ZWMzIHJlY3RDb29yZHNbIDQgXSApIHsKCXZlYzMgdjEgPSByZWN0Q29vcmRzWyAxIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyBsaWdodE5vcm1hbCA9IGNyb3NzKCB2MSwgdjIgKTsKCWlmKCBkb3QoIGxpZ2h0Tm9ybWFsLCBQIC0gcmVjdENvb3Jkc1sgMCBdICkgPCAwLjAgKSByZXR1cm4gdmVjMyggMC4wICk7Cgl2ZWMzIFQxLCBUMjsKCVQxID0gbm9ybWFsaXplKCBWIC0gTiAqIGRvdCggViwgTiApICk7CglUMiA9IC0gY3Jvc3MoIE4sIFQxICk7CgltYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApOwoJdmVjMyBjb29yZHNbIDQgXTsKCWNvb3Jkc1sgMCBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAwIF0gLSBQICk7Cgljb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApOwoJY29vcmRzWyAyIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDIgXSAtIFAgKTsKCWNvb3Jkc1sgMyBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAzIF0gLSBQICk7Cgljb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTsKCWNvb3Jkc1sgMSBdID0gbm9ybWFsaXplKCBjb29yZHNbIDEgXSApOwoJY29vcmRzWyAyIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMiBdICk7Cgljb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTsKCXZlYzMgdmVjdG9yRm9ybUZhY3RvciA9IHZlYzMoIDAuMCApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMCBdLCBjb29yZHNbIDEgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMiBdLCBjb29yZHNbIDMgXSApOwoJdmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMyBdLCBjb29yZHNbIDAgXSApOwoJZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7CglyZXR1cm4gdmVjMyggcmVzdWx0ICk7Cn0KZmxvYXQgR19CbGlublBob25nX0ltcGxpY2l0KCApIHsKCXJldHVybiAwLjI1Owp9CmZsb2F0IERfQmxpbm5QaG9uZyggY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogKCBzaGluaW5lc3MgKiAwLjUgKyAxLjAgKSAqIHBvdyggZG90TkgsIHNoaW5pbmVzcyApOwp9CnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBzcGVjdWxhckNvbG9yLCAxLjAsIGRvdFZIICk7CglmbG9hdCBHID0gR19CbGlublBob25nX0ltcGxpY2l0KCApOwoJZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApOwoJcmV0dXJuIEYgKiAoIEcgKiBEICk7Cn0KI2lmIGRlZmluZWQoIFVTRV9TSEVFTiApCmZsb2F0IERfQ2hhcmxpZSggZmxvYXQgcm91Z2huZXNzLCBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGFscGhhID0gcG93Miggcm91Z2huZXNzICk7CglmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhOwoJZmxvYXQgY29zMmggPSBkb3ROSCAqIGRvdE5IOwoJZmxvYXQgc2luMmggPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTsKCXJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApOwp9CmZsb2F0IFZfTmV1YmVsdCggZmxvYXQgZG90TlYsIGZsb2F0IGRvdE5MICkgewoJcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7Cn0KdmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBEID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTsKCWZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApOwoJcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7Cn0KI2VuZGlmYCxUZnI9YCNpZmRlZiBVU0VfQlVNUE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDsKCXVuaWZvcm0gZmxvYXQgYnVtcFNjYWxlOwoJdmVjMiBkSGR4eV9md2QoKSB7CgkJdmVjMiBkU1RkeCA9IGRGZHgoIHZVdiApOwoJCXZlYzIgZFNUZHkgPSBkRmR5KCB2VXYgKTsKCQlmbG9hdCBIbGwgPSBidW1wU2NhbGUgKiB0ZXh0dXJlMkQoIGJ1bXBNYXAsIHZVdiApLng7CgkJZmxvYXQgZEJ4ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeCApLnggLSBIbGw7CgkJZmxvYXQgZEJ5ID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKyBkU1RkeSApLnggLSBIbGw7CgkJcmV0dXJuIHZlYzIoIGRCeCwgZEJ5ICk7Cgl9Cgl2ZWMzIHBlcnR1cmJOb3JtYWxBcmIoIHZlYzMgc3VyZl9wb3MsIHZlYzMgc3VyZl9ub3JtLCB2ZWMyIGRIZHh5LCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgdlNpZ21hWCA9IHZlYzMoIGRGZHgoIHN1cmZfcG9zLnggKSwgZEZkeCggc3VyZl9wb3MueSApLCBkRmR4KCBzdXJmX3Bvcy56ICkgKTsKCQl2ZWMzIHZTaWdtYVkgPSB2ZWMzKCBkRmR5KCBzdXJmX3Bvcy54ICksIGRGZHkoIHN1cmZfcG9zLnkgKSwgZEZkeSggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2TiA9IHN1cmZfbm9ybTsKCQl2ZWMzIFIxID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7CgkJdmVjMyBSMiA9IGNyb3NzKCB2TiwgdlNpZ21hWCApOwoJCWZsb2F0IGZEZXQgPSBkb3QoIHZTaWdtYVgsIFIxICkgKiBmYWNlRGlyZWN0aW9uOwoJCXZlYzMgdkdyYWQgPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApOwoJCXJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTsKCX0KI2VuZGlmYCxDZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxBZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247Cgl1bmlmb3JtIHZlYzQgY2xpcHBpbmdQbGFuZXNbIE5VTV9DTElQUElOR19QTEFORVMgXTsKI2VuZGlmYCxQZnI9YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmFyeWluZyB2ZWMzIHZDbGlwUG9zaXRpb247CiNlbmRpZmAsSWZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLExmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCglkaWZmdXNlQ29sb3IgKj0gdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJZGlmZnVzZUNvbG9yLnJnYiAqPSB2Q29sb3I7CiNlbmRpZmAsa2ZyPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZhcnlpbmcgdmVjNCB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLFJmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLE5mcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2Q29sb3IgPSB2ZWM0KCAxLjAgKTsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdkNvbG9yID0gdmVjMyggMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX0NPTE9SCgl2Q29sb3IgKj0gY29sb3I7CiNlbmRpZgojaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1IKCXZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7CiNlbmRpZmAsRGZyPWAjZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzCiNkZWZpbmUgUEkyIDYuMjgzMTg1MzA3MTc5NTg2CiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjYKI2RlZmluZSBSRUNJUFJPQ0FMX1BJIDAuMzE4MzA5ODg2MTgzNzkwNwojZGVmaW5lIFJFQ0lQUk9DQUxfUEkyIDAuMTU5MTU0OTQzMDkxODk1MzUKI2RlZmluZSBFUFNJTE9OIDFlLTYKI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCiNkZWZpbmUgd2hpdGVDb21wbGVtZW50KCBhICkgKCAxLjAgLSBzYXR1cmF0ZSggYSApICkKZmxvYXQgcG93MiggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeDsgfQpmbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH0KZmxvYXQgcG93NCggY29uc3QgaW4gZmxvYXQgeCApIHsgZmxvYXQgeDIgPSB4Kng7IHJldHVybiB4Mip4MjsgfQpmbG9hdCBtYXgzKCBjb25zdCBpbiB2ZWMzIHYgKSB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH0KZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH0KaGlnaHAgZmxvYXQgcmFuZCggY29uc3QgaW4gdmVjMiB1diApIHsKCWNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1MzsKCWhpZ2hwIGZsb2F0IGR0ID0gZG90KCB1di54eSwgdmVjMiggYSxiICkgKSwgc24gPSBtb2QoIGR0LCBQSSApOwoJcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7Cn0KI2lmZGVmIEhJR0hfUFJFQ0lTSU9OCglmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7IHJldHVybiBsZW5ndGgoIHYgKTsgfQojZWxzZQoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgewoJCWZsb2F0IG1heENvbXBvbmVudCA9IG1heDMoIGFicyggdiApICk7CgkJcmV0dXJuIGxlbmd0aCggdiAvIG1heENvbXBvbmVudCApICogbWF4Q29tcG9uZW50OwoJfQojZW5kaWYKc3RydWN0IEluY2lkZW50TGlnaHQgewoJdmVjMyBjb2xvcjsKCXZlYzMgZGlyZWN0aW9uOwoJYm9vbCB2aXNpYmxlOwp9OwpzdHJ1Y3QgUmVmbGVjdGVkTGlnaHQgewoJdmVjMyBkaXJlY3REaWZmdXNlOwoJdmVjMyBkaXJlY3RTcGVjdWxhcjsKCXZlYzMgaW5kaXJlY3REaWZmdXNlOwoJdmVjMyBpbmRpcmVjdFNwZWN1bGFyOwp9OwpzdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7Cgl2ZWMzIHBvc2l0aW9uOwoJdmVjMyBub3JtYWw7Cgl2ZWMzIHZpZXdEaXI7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbDsKI2VuZGlmCn07CnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTsKfQp2ZWMzIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCXJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApOwp9Cm1hdDMgdHJhbnNwb3NlTWF0MyggY29uc3QgaW4gbWF0MyBtICkgewoJbWF0MyB0bXA7Cgl0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTsKCXRtcFsgMSBdID0gdmVjMyggbVsgMCBdLnksIG1bIDEgXS55LCBtWyAyIF0ueSApOwoJdG1wWyAyIF0gPSB2ZWMzKCBtWyAwIF0ueiwgbVsgMSBdLnosIG1bIDIgXS56ICk7CglyZXR1cm4gdG1wOwp9CmZsb2F0IGxpbmVhclRvUmVsYXRpdmVMdW1pbmFuY2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7Cgl2ZWMzIHdlaWdodHMgPSB2ZWMzKCAwLjIxMjYsIDAuNzE1MiwgMC4wNzIyICk7CglyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTsKfQpib29sIGlzUGVyc3BlY3RpdmVNYXRyaXgoIG1hdDQgbSApIHsKCXJldHVybiBtWyAyIF1bIDMgXSA9PSAtIDEuMDsKfQp2ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkgewoJZmxvYXQgdSA9IGF0YW4oIGRpci56LCBkaXIueCApICogUkVDSVBST0NBTF9QSTIgKyAwLjU7CglmbG9hdCB2ID0gYXNpbiggY2xhbXAoIGRpci55LCAtIDEuMCwgMS4wICkgKSAqIFJFQ0lQUk9DQUxfUEkgKyAwLjU7CglyZXR1cm4gdmVjMiggdSwgdiApOwp9YCxPZnI9YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsemZyPWB2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCAvPSB2ZWMzKCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7Cgl0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7CiNpZmRlZiBGTElQX1NJREVECgl0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgdHJhbnNmb3JtZWRUYW5nZW50ID0gKCBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNpZmRlZiBGTElQX1NJREVECgkJdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxGZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7Cgl1bmlmb3JtIGZsb2F0IGRpc3BsYWNlbWVudFNjYWxlOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzOwojZW5kaWZgLEJmcj1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsSGZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTsKCXRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjsKI2VuZGlmYCxWZnI9YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwOwojZW5kaWZgLFVmcj0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixxZnI9YHZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmFsdWU7Cn0KdmVjNCBMaW5lYXJUb3NSR0IoIGluIHZlYzQgdmFsdWUgKSB7CglyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7Cn1gLEdmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2ZWMzIGNhbWVyYVRvRnJhZzsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvRnJhZyA9IG5vcm1hbGl6ZSggdldvcmxkUG9zaXRpb24gLSBjYW1lcmFQb3NpdGlvbiApOwoJCX0KCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApOwoJCSNlbHNlCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZnJhY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2Vsc2UKCQl2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkUKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHJlZmxlY3RWZWMueCwgcmVmbGVjdFZlYy55eiApICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQl2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTsKCSNlbHNlCgkJdmVjNCBlbnZDb2xvciA9IHZlYzQoIDAuMCApOwoJI2VuZGlmCgkjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX01JWCApCgkJb3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgZW52Q29sb3IueHl6LCBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5ICk7CgkjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfQUREICkKCQlvdXRnb2luZ0xpZ2h0ICs9IGVudkNvbG9yLnh5eiAqIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHk7CgkjZW5kaWYKI2VuZGlmYCxXZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsWWZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7CgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggUEhPTkcgKQoJCSNkZWZpbmUgRU5WX1dPUkxEUE9TCgkjZW5kaWYKCSNpZmRlZiBFTlZfV09STERQT1MKCQl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZWxzZQoJCXZhcnlpbmcgdmVjMyB2UmVmbGVjdDsKCSNlbmRpZgojZW5kaWZgLGpmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKI2VuZGlmYCxYZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCwkZnI9YCNpZmRlZiBVU0VfRk9HCgl2Rm9nRGVwdGggPSAtIG12UG9zaXRpb24uejsKI2VuZGlmYCxLZnI9YCNpZmRlZiBVU0VfRk9HCgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKI2VuZGlmYCxaZnI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLEpmcj1gI2lmZGVmIFVTRV9GT0cKCXVuaWZvcm0gdmVjMyBmb2dDb2xvcjsKCXZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoOwoJI2lmZGVmIEZPR19FWFAyCgkJdW5pZm9ybSBmbG9hdCBmb2dEZW5zaXR5OwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGZvZ05lYXI7CgkJdW5pZm9ybSBmbG9hdCBmb2dGYXI7CgkjZW5kaWYKI2VuZGlmYCxRZnI9YCNpZmRlZiBVU0VfR1JBRElFTlRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGdyYWRpZW50TWFwOwojZW5kaWYKdmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkgewoJZmxvYXQgZG90TkwgPSBkb3QoIG5vcm1hbCwgbGlnaHREaXJlY3Rpb24gKTsKCXZlYzIgY29vcmQgPSB2ZWMyKCBkb3ROTCAqIDAuNSArIDAuNSwgMC4wICk7CgkjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgkJcmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApOwoJI2Vsc2UKCQlyZXR1cm4gKCBjb29yZC54IDwgMC43ICkgPyB2ZWMzKCAwLjcgKSA6IHZlYzMoIDEuMCApOwoJI2VuZGlmCn1gLHRwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLGVwcj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7Cgl1bmlmb3JtIGZsb2F0IGxpZ2h0TWFwSW50ZW5zaXR5OwojZW5kaWZgLHJwcj1gdmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7Ckdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnk7Cmdlb21ldHJ5LnBvc2l0aW9uID0gbXZQb3NpdGlvbi54eXo7Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggLW12UG9zaXRpb24ueHl6ICk7Ckdlb21ldHJpY0NvbnRleHQgYmFja0dlb21ldHJ5OwpiYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKYmFja0dlb21ldHJ5Lm5vcm1hbCA9IC1nZW9tZXRyeS5ub3JtYWw7CmJhY2tHZW9tZXRyeS52aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKdkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKdkluZGlyZWN0RnJvbnQgPSB2ZWMzKCAwLjAgKTsKI2lmZGVmIERPVUJMRV9TSURFRAoJdkxpZ2h0QmFjayA9IHZlYzMoIDAuMCApOwoJdkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKZmxvYXQgZG90Tkw7CnZlYzMgZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwp2SW5kaXJlY3RGcm9udCArPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApOwp2SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCXZJbmRpcmVjdEJhY2sgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fRElSX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0hFTUlfTElHSFRTOyBpICsrICkgewoJCXZJbmRpcmVjdEZyb250ICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgZ2VvbWV0cnkubm9ybWFsICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmYCxucHI9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsaXByPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApCgkjaWZkZWYgRU5WTUFQX01PREVfUkVGUkFDVElPTgoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCgl2ZWMzIGdldElCTElycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCB3b3JsZE5vcm1hbCwgMS4wICk7CgkJCXJldHVybiBQSSAqIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9Cgl2ZWMzIGdldElCTFJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHJlZmxlY3RWZWM7CgkJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCQlyZWZsZWN0VmVjID0gcmVmbGVjdCggLSB2aWV3RGlyLCBub3JtYWwgKTsKCQkJCXJlZmxlY3RWZWMgPSBub3JtYWxpemUoIG1peCggcmVmbGVjdFZlYywgbm9ybWFsLCByb3VnaG5lc3MgKiByb3VnaG5lc3MpICk7CgkJCSNlbHNlCgkJCQlyZWZsZWN0VmVjID0gcmVmcmFjdCggLSB2aWV3RGlyLCBub3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCQkjZW5kaWYKCQkJcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7CgkJCXJldHVybiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLG9wcj1gVG9vbk1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiO2AsYXByPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLHNwcj1gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiOwptYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gc3BlY3VsYXI7Cm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzOwptYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoID0gc3BlY3VsYXJTdHJlbmd0aDtgLGxwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhclNoaW5pbmVzczsKCWZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7Cn07CnZvaWQgUkVfRGlyZWN0X0JsaW5uUGhvbmcoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfQmxpbm5QaG9uZyggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzICkgKiBtYXRlcmlhbC5zcGVjdWxhclN0cmVuZ3RoOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfQmxpbm5QaG9uZwojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcKI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApCSgwKWAsY3ByPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCx1cHI9YHN0cnVjdCBQaHlzaWNhbE1hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJZmxvYXQgcm91Z2huZXNzOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJGOTA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGNsZWFyY29hdDsKCQlmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CgkJdmVjMyBjbGVhcmNvYXRGMDsKCQlmbG9hdCBjbGVhcmNvYXRGOTA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQl2ZWMzIHNoZWVuQ29sb3I7CgkJZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjZW5kaWYKfTsKdmVjMyBjbGVhcmNvYXRTcGVjdWxhciA9IHZlYzMoIDAuMCApOwp2ZWMzIHNoZWVuU3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IHIyID0gcm91Z2huZXNzICogcm91Z2huZXNzOwoJZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTsKCWZsb2F0IGIgPSByb3VnaG5lc3MgPCAwLjI1ID8gNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYgOiAxLjk3ICogcjIgLSAzLjI3ICogcm91Z2huZXNzICsgMC43MjsKCWZsb2F0IERHID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApOwoJcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTsKfQp2ZWMyIERGR0FwcHJveCggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJY29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7Cgljb25zdCB2ZWM0IGMxID0gdmVjNCggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTsKCXZlYzQgciA9IHJvdWdobmVzcyAqIGMwICsgYzE7CglmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTsKCXZlYzIgZmFiID0gdmVjMiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dzsKCXJldHVybiBmYWI7Cn0KdmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7Cn0Kdm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXZlYzMgRnNzRXNzID0gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKCWZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7CglmbG9hdCBFbXMgPSAxLjAgLSBFc3M7Cgl2ZWMzIEZhdmcgPSBzcGVjdWxhckNvbG9yICsgKCAxLjAgLSBzcGVjdWxhckNvbG9yICkgKiAwLjA0NzYxOTsJdmVjMyBGbXMgPSBGc3NFc3MgKiBGYXZnIC8gKCAxLjAgLSBFbXMgKiBGYXZnICk7CglzaW5nbGVTY2F0dGVyICs9IEZzc0VzczsKCW11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7Cn0KI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMAoJdm9pZCBSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwoIGNvbnN0IGluIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CgkJdmVjMyBub3JtYWwgPSBnZW9tZXRyeS5ub3JtYWw7CgkJdmVjMyB2aWV3RGlyID0gZ2VvbWV0cnkudmlld0RpcjsKCQl2ZWMzIHBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CgkJdmVjMyBsaWdodFBvcyA9IHJlY3RBcmVhTGlnaHQucG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGggPSByZWN0QXJlYUxpZ2h0LmhhbGZXaWR0aDsKCQl2ZWMzIGhhbGZIZWlnaHQgPSByZWN0QXJlYUxpZ2h0LmhhbGZIZWlnaHQ7CgkJdmVjMyBsaWdodENvbG9yID0gcmVjdEFyZWFMaWdodC5jb2xvcjsKCQlmbG9hdCByb3VnaG5lc3MgPSBtYXRlcmlhbC5yb3VnaG5lc3M7CgkJdmVjMyByZWN0Q29vcmRzWyA0IF07CgkJcmVjdENvb3Jkc1sgMCBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwkJcmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJdmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCQl2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTsKCQl2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTsKCQltYXQzIG1JbnYgPSBtYXQzKAoJCQl2ZWMzKCB0MS54LCAwLCB0MS55ICksCgkJCXZlYzMoICAgIDAsIDEsICAgIDAgKSwKCQkJdmVjMyggdDEueiwgMCwgdDEudyApCgkJKTsKCQl2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTsKCX0KI2VuZGlmCnZvaWQgUkVfRGlyZWN0X1BoeXNpY2FsKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJdmVjMyBpcnJhZGlhbmNlID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TkxjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCQl2ZWMzIGNjSXJyYWRpYW5jZSA9IGRvdE5MY2MgKiBkaXJlY3RMaWdodC5jb2xvcjsKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjY0lycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9TaGVlbiggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNoZWVuQ29sb3IsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgY2xlYXJjb2F0UmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0KSB7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJc2hlZW5TcGVjdWxhciArPSBpcnJhZGlhbmNlICogbWF0ZXJpYWwuc2hlZW5Db2xvciAqIElCTFNoZWVuQlJERiggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCgl2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgbXVsdGlTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZSA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJOwoJY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTsKCXZlYzMgZGlmZnVzZSA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gKCBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nICkgKTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKfQojZGVmaW5lIFJFX0RpcmVjdAkJCQlSRV9EaXJlY3RfUGh5c2ljYWwKI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWEJCVJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZQkJUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhcgkJUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbApmbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglyZXR1cm4gc2F0dXJhdGUoIHBvdyggZG90TlYgKyBhbWJpZW50T2NjbHVzaW9uLCBleHAyKCAtIDE2LjAgKiByb3VnaG5lc3MgLSAxLjAgKSApIC0gMS4wICsgYW1iaWVudE9jY2x1c2lvbiApOwp9YCxocHI9YApHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IC0gdlZpZXdQb3NpdGlvbjsKZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsOwpnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7CiNpZmRlZiBVU0VfQ0xFQVJDT0FUCglnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgpJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0OwojaWYgKCBOVU1fUE9JTlRfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglQb2ludExpZ2h0IHBvaW50TGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93OwoJI2VuZGlmCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0c1sgaSBdOwoJCWdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTICkKCQlwb2ludExpZ2h0U2hhZG93ID0gcG9pbnRMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFBvaW50U2hhZG93KCBwb2ludFNoYWRvd01hcFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd01hcFNpemUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93QmlhcywgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZQb2ludFNoYWRvd0Nvb3JkWyBpIF0sIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFGYXIgKSA6IDEuMDsKCQkjZW5kaWYKCQlSRV9EaXJlY3QoIGRpcmVjdExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmICggTlVNX1NQT1RfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglTcG90TGlnaHQgc3BvdExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodHNbIGkgXTsKCQlnZXRTcG90TGlnaHRJbmZvKCBzcG90TGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyApCgkJc3BvdExpZ2h0U2hhZG93ID0gc3BvdExpZ2h0U2hhZG93c1sgaSBdOwoJCWRpcmVjdExpZ2h0LmNvbG9yICo9IGFsbCggYnZlYzIoIGRpcmVjdExpZ2h0LnZpc2libGUsIHJlY2VpdmVTaGFkb3cgKSApID8gZ2V0U2hhZG93KCBzcG90U2hhZG93TWFwWyBpIF0sIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93Qmlhcywgc3BvdExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdlNwb3RTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9ESVJfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdCApCglEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7CgkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVFM7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRzWyBpIF07CgkJZ2V0RGlyZWN0aW9uYWxMaWdodEluZm8oIGRpcmVjdGlvbmFsTGlnaHQsIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgKCBVTlJPTExFRF9MT09QX0lOREVYIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTICkKCQlkaXJlY3Rpb25hbExpZ2h0U2hhZG93ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMCApICYmIGRlZmluZWQoIFJFX0RpcmVjdF9SZWN0QXJlYSApCglSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUkVDVF9BUkVBX0xJR0hUUzsgaSArKyApIHsKCQlyZWN0QXJlYUxpZ2h0ID0gcmVjdEFyZWFMaWdodHNbIGkgXTsKCQlSRV9EaXJlY3RfUmVjdEFyZWEoIHJlY3RBcmVhTGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCXZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBpcnJhZGlhbmNlID0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKCWlycmFkaWFuY2UgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApCgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQkJaXJyYWRpYW5jZSArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCgl2ZWMzIHJhZGlhbmNlID0gdmVjMyggMC4wICk7Cgl2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7CiNlbmRpZmAsZnByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAscHByPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCVJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJUkVfSW5kaXJlY3RTcGVjdWxhciggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZmAsZHByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCglnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7CiNlbmRpZmAsbXByPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLGdwcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7CgkJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJI2VuZGlmCiNlbmRpZmAsX3ByPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZGcmFnRGVwdGggPSAxLjAgKyBnbF9Qb3NpdGlvbi53OwoJCXZJc1BlcnNwZWN0aXZlID0gZmxvYXQoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApOwoJI2Vsc2UKCQlpZiAoIGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKSApIHsKCQkJZ2xfUG9zaXRpb24ueiA9IGxvZzIoIG1heCggRVBTSUxPTiwgZ2xfUG9zaXRpb24udyArIDEuMCApICkgKiBsb2dEZXB0aEJ1ZkZDIC0gMS4wOwoJCQlnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7CgkJfQoJI2VuZGlmCiNlbmRpZmAseXByPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLHZwcj1gI2lmZGVmIFVTRV9NQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG1hcDsKI2VuZGlmYCx4cHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXZlYzIgdXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggZ2xfUG9pbnRDb29yZC54LCAxLjAgLSBnbF9Qb2ludENvb3JkLnksIDEgKSApLnh5OwojZW5kaWYKI2lmZGVmIFVTRV9NQVAKCWRpZmZ1c2VDb2xvciAqPSB0ZXh0dXJlMkQoIG1hcCwgdXYgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQUxQSEFNQVAKCWRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZzsKI2VuZGlmYCxicHI9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCx3cHI9YGZsb2F0IG1ldGFsbmVzc0ZhY3RvciA9IG1ldGFsbmVzczsKI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVAKCXZlYzQgdGV4ZWxNZXRhbG5lc3MgPSB0ZXh0dXJlMkQoIG1ldGFsbmVzc01hcCwgdlV2ICk7CgltZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjsKI2VuZGlmYCxTcHI9YCNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7CiNlbmRpZmAsTXByPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLEVwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIE1PUlBIVEFSR0VUU19DT1VOVCBdOwoJCXVuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTsKCQl1bmlmb3JtIHZlYzIgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU7CgkJdmVjMyBnZXRNb3JwaCggY29uc3QgaW4gaW50IHZlcnRleEluZGV4LCBjb25zdCBpbiBpbnQgbW9ycGhUYXJnZXRJbmRleCwgY29uc3QgaW4gaW50IG9mZnNldCwgY29uc3QgaW4gaW50IHN0cmlkZSApIHsKCQkJZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIHRleGVsSW5kZXggLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54ICk7CgkJCWZsb2F0IHggPSB0ZXhlbEluZGV4IC0geSAqIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7CgkJCXZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTsKCQkJcmV0dXJuIHRleHR1cmUoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYgKS54eXo7CgkJfQoJI2Vsc2UKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDggXTsKCQkjZWxzZQoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsVHByPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdHJhbnNmb3JtZWQgKj0gbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOwoJI2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFCgkJZm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkgewoJCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2Vsc2UKCQkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQkJI2VuZGlmCgkJfQoJI2Vsc2UKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCQkjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFMKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ0ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ3ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxDcHI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxBcHI9YCNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCW5vcm1hbCA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgkjaWZkZWYgRkxJUF9TSURFRAoJCW5vcm1hbCA9IC0gbm9ybWFsOwoJI2VuZGlmCgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJbm9ybWFsID0gbm9ybWFsaXplKCBub3JtYWxNYXRyaXggKiBub3JtYWwgKTsKI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2ZWMzIG1hcE4gPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJbWFwTi54eSAqPSBub3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCW5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTsKCSNlbHNlCgkJbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VsaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKQoJbm9ybWFsID0gcGVydHVyYk5vcm1hbEFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIGRIZHh5X2Z3ZCgpLCBmYWNlRGlyZWN0aW9uICk7CiNlbmRpZmAsUHByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2YXJ5aW5nIHZlYzMgdk5vcm1hbDsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZhcnlpbmcgdmVjMyB2VGFuZ2VudDsKCQl2YXJ5aW5nIHZlYzMgdkJpdGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLElwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxMcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7CgkJdkJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggY3Jvc3MoIHZOb3JtYWwsIHZUYW5nZW50ICkgKiB0YW5nZW50LncgKTsKCSNlbmRpZgojZW5kaWZgLGtwcj1gI2lmZGVmIFVTRV9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBub3JtYWxTY2FsZTsKI2VuZGlmCiNpZmRlZiBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAKCXVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7CiNlbmRpZgojaWYgISBkZWZpbmVkICggVVNFX1RBTkdFTlQgKSAmJiAoIGRlZmluZWQgKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQICkgKQoJdmVjMyBwZXJ0dXJiTm9ybWFsMkFyYiggdmVjMyBleWVfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMyBtYXBOLCBmbG9hdCBmYWNlRGlyZWN0aW9uICkgewoJCXZlYzMgcTAgPSB2ZWMzKCBkRmR4KCBleWVfcG9zLnggKSwgZEZkeCggZXllX3Bvcy55ICksIGRGZHgoIGV5ZV9wb3MueiApICk7CgkJdmVjMyBxMSA9IHZlYzMoIGRGZHkoIGV5ZV9wb3MueCApLCBkRmR5KCBleWVfcG9zLnkgKSwgZEZkeSggZXllX3Bvcy56ICkgKTsKCQl2ZWMyIHN0MCA9IGRGZHgoIHZVdi5zdCApOwoJCXZlYzIgc3QxID0gZEZkeSggdlV2LnN0ICk7CgkJdmVjMyBOID0gc3VyZl9ub3JtOwoJCXZlYzMgcTFwZXJwID0gY3Jvc3MoIHExLCBOICk7CgkJdmVjMyBxMHBlcnAgPSBjcm9zcyggTiwgcTAgKTsKCQl2ZWMzIFQgPSBxMXBlcnAgKiBzdDAueCArIHEwcGVycCAqIHN0MS54OwoJCXZlYzMgQiA9IHExcGVycCAqIHN0MC55ICsgcTBwZXJwICogc3QxLnk7CgkJZmxvYXQgZGV0ID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTsKCQlmbG9hdCBzY2FsZSA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBUICogKCBtYXBOLnggKiBzY2FsZSApICsgQiAqICggbWFwTi55ICogc2NhbGUgKSArIE4gKiBtYXBOLnogKTsKCX0KI2VuZGlmYCxScHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLE5wcj1gI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQCgl2ZWMzIGNsZWFyY29hdE1hcE4gPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJY2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCWNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTsKCSNlbHNlCgkJY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gdlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7CgkjZW5kaWYKI2VuZGlmYCxEcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDsKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0Tm9ybWFsTWFwOwoJdW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlOwojZW5kaWZgLE9wcj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLHpwcj1gdmVjMyBwYWNrTm9ybWFsVG9SR0IoIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggbm9ybWFsICkgKiAwLjUgKyAwLjU7Cn0KdmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7CglyZXR1cm4gMi4wICogcmdiLnh5eiAtIDEuMDsKfQpjb25zdCBmbG9hdCBQYWNrVXBzY2FsZSA9IDI1Ni4gLyAyNTUuO2NvbnN0IGZsb2F0IFVucGFja0Rvd25zY2FsZSA9IDI1NS4gLyAyNTYuOwpjb25zdCB2ZWMzIFBhY2tGYWN0b3JzID0gdmVjMyggMjU2LiAqIDI1Ni4gKiAyNTYuLCAyNTYuICogMjU2LiwgMjU2LiApOwpjb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTsKY29uc3QgZmxvYXQgU2hpZnRSaWdodDggPSAxLiAvIDI1Ni47CnZlYzQgcGFja0RlcHRoVG9SR0JBKCBjb25zdCBpbiBmbG9hdCB2ICkgewoJdmVjNCByID0gdmVjNCggZnJhY3QoIHYgKiBQYWNrRmFjdG9ycyApLCB2ICk7CglyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4OwlyZXR1cm4gciAqIFBhY2tVcHNjYWxlOwp9CmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7CglyZXR1cm4gZG90KCB2LCBVbnBhY2tGYWN0b3JzICk7Cn0KdmVjNCBwYWNrMkhhbGZUb1JHQkEoIHZlYzIgdiApIHsKCXZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTsKCXJldHVybiB2ZWM0KCByLnggLSByLnkgLyAyNTUuMCwgci55LCByLnogLSByLncgLyAyNTUuMCwgci53ICk7Cn0KdmVjMiB1bnBhY2tSR0JBVG8ySGFsZiggdmVjNCB2ICkgewoJcmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7Cn0KZmxvYXQgdmlld1pUb09ydGhvZ3JhcGhpY0RlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggdmlld1ogKyBuZWFyICkgLyAoIG5lYXIgLSBmYXIgKTsKfQpmbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gbGluZWFyQ2xpcFogKiAoIG5lYXIgLSBmYXIgKSAtIG5lYXI7Cn0KZmxvYXQgdmlld1pUb1BlcnNwZWN0aXZlRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTsKfQpmbG9hdCBwZXJzcGVjdGl2ZURlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgaW52Q2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIG5lYXIgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiBpbnZDbGlwWiAtIGZhciApOwp9YCxGcHI9YCNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBCglnbF9GcmFnQ29sb3IucmdiICo9IGdsX0ZyYWdDb2xvci5hOwojZW5kaWZgLEJwcj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLEhwcj1gI2lmZGVmIERJVEhFUklORwoJZ2xfRnJhZ0NvbG9yLnJnYiA9IGRpdGhlcmluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLFZwcj1gI2lmZGVmIERJVEhFUklORwoJdmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7CgkJZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApOwoJCXZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7CgkJZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTsKCQlyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCOwoJfQojZW5kaWZgLFVwcj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLHFwcj1gI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHJvdWdobmVzc01hcDsKI2VuZGlmYCxHcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcG90U2hhZG93TWFwWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZTcG90U2hhZG93Q29vcmRbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBwb2ludFNoYWRvd01hcFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCglmbG9hdCB0ZXh0dXJlMkRDb21wYXJlKCBzYW1wbGVyMkQgZGVwdGhzLCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICkgewoJCXJldHVybiBzdGVwKCBjb21wYXJlLCB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBkZXB0aHMsIHV2ICkgKSApOwoJfQoJdmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7CgkJcmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApOwoJfQoJZmxvYXQgVlNNU2hhZG93IChzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2LCBmbG9hdCBjb21wYXJlICl7CgkJZmxvYXQgb2NjbHVzaW9uID0gMS4wOwoJCXZlYzIgZGlzdHJpYnV0aW9uID0gdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzaGFkb3csIHV2ICk7CgkJZmxvYXQgaGFyZF9zaGFkb3cgPSBzdGVwKCBjb21wYXJlICwgZGlzdHJpYnV0aW9uLnggKTsKCQlpZiAoaGFyZF9zaGFkb3cgIT0gMS4wICkgewoJCQlmbG9hdCBkaXN0YW5jZSA9IGNvbXBhcmUgLSBkaXN0cmlidXRpb24ueCA7CgkJCWZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7CgkJCWZsb2F0IHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gdmFyaWFuY2UgLyAodmFyaWFuY2UgKyBkaXN0YW5jZSAqIGRpc3RhbmNlICk7CQkJc29mdG5lc3NfcHJvYmFiaWxpdHkgPSBjbGFtcCggKCBzb2Z0bmVzc19wcm9iYWJpbGl0eSAtIDAuMyApIC8gKCAwLjk1IC0gMC4zICksIDAuMCwgMS4wICk7CQkJb2NjbHVzaW9uID0gY2xhbXAoIG1heCggaGFyZF9zaGFkb3csIHNvZnRuZXNzX3Byb2JhYmlsaXR5ICksIDAuMCwgMS4wICk7CgkJfQoJCXJldHVybiBvY2NsdXNpb247Cgl9CglmbG9hdCBnZXRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkICkgewoJCWZsb2F0IHNoYWRvdyA9IDEuMDsKCQlzaGFkb3dDb29yZC54eXogLz0gc2hhZG93Q29vcmQudzsKCQlzaGFkb3dDb29yZC56ICs9IHNoYWRvd0JpYXM7CgkJYnZlYzQgaW5GcnVzdHVtVmVjID0gYnZlYzQgKCBzaGFkb3dDb29yZC54ID49IDAuMCwgc2hhZG93Q29vcmQueCA8PSAxLjAsIHNoYWRvd0Nvb3JkLnkgPj0gMC4wLCBzaGFkb3dDb29yZC55IDw9IDEuMCApOwoJCWJvb2wgaW5GcnVzdHVtID0gYWxsKCBpbkZydXN0dW1WZWMgKTsKCQlidmVjMiBmcnVzdHVtVGVzdFZlYyA9IGJ2ZWMyKCBpbkZydXN0dW0sIHNoYWRvd0Nvb3JkLnogPD0gMS4wICk7CgkJYm9vbCBmcnVzdHVtVGVzdCA9IGFsbCggZnJ1c3R1bVRlc3RWZWMgKTsKCQlpZiAoIGZydXN0dW1UZXN0ICkgewoJCSNpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0YgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHgwID0gLSB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkwID0gLSB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHkxID0gKyB0ZXhlbFNpemUueSAqIHNoYWRvd1JhZGl1czsKCQkJZmxvYXQgZHgyID0gZHgwIC8gMi4wOwoJCQlmbG9hdCBkeTIgPSBkeTAgLyAyLjA7CgkJCWZsb2F0IGR4MyA9IGR4MSAvIDIuMDsKCQkJZmxvYXQgZHkzID0gZHkxIC8gMi4wOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCAwLjAsIGR5MSApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkxICksIHNoYWRvd0Nvb3JkLnogKQoJCQkpICogKCAxLjAgLyAxNy4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKQoJCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgZHggPSB0ZXhlbFNpemUueDsKCQkJZmxvYXQgZHkgPSB0ZXhlbFNpemUueTsKCQkJdmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5OwoJCQl2ZWMyIGYgPSBmcmFjdCggdXYgKiBzaGFkb3dNYXBTaXplICsgMC41ICk7CgkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCXNoYWRvdyA9ICgKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB0ZXhlbFNpemUsIHNoYWRvd0Nvb3JkLnogKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDAuMCApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueCApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkgZi55ICkgKwoJCQkJbWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgLWR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCQkgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCQkgIGYueCApLAoJCQkJCSBmLnkgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQlzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTsKCQkjZWxzZQoJCQlzaGFkb3cgPSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2VuZGlmCgkJfQoJCXJldHVybiBzaGFkb3c7Cgl9Cgl2ZWMyIGN1YmVUb1VWKCB2ZWMzIHYsIGZsb2F0IHRleGVsU2l6ZVkgKSB7CgkJdmVjMyBhYnNWID0gYWJzKCB2ICk7CgkJZmxvYXQgc2NhbGVUb0N1YmUgPSAxLjAgLyBtYXgoIGFic1YueCwgbWF4KCBhYnNWLnksIGFic1YueiApICk7CgkJYWJzViAqPSBzY2FsZVRvQ3ViZTsKCQl2ICo9IHNjYWxlVG9DdWJlICogKCAxLjAgLSAyLjAgKiB0ZXhlbFNpemVZICk7CgkJdmVjMiBwbGFuYXIgPSB2Lnh5OwoJCWZsb2F0IGFsbW9zdEFUZXhlbCA9IDEuNSAqIHRleGVsU2l6ZVk7CgkJZmxvYXQgYWxtb3N0T25lID0gMS4wIC0gYWxtb3N0QVRleGVsOwoJCWlmICggYWJzVi56ID49IGFsbW9zdE9uZSApIHsKCQkJaWYgKCB2LnogPiAwLjAgKQoJCQkJcGxhbmFyLnggPSA0LjAgLSB2Lng7CgkJfSBlbHNlIGlmICggYWJzVi54ID49IGFsbW9zdE9uZSApIHsKCQkJZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTsKCQkJcGxhbmFyLnggPSB2LnogKiBzaWduWCArIDIuMCAqIHNpZ25YOwoJCX0gZWxzZSBpZiAoIGFic1YueSA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25ZID0gc2lnbiggdi55ICk7CgkJCXBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7CgkJCXBsYW5hci55ID0gdi56ICogc2lnblkgLSAyLjA7CgkJfQoJCXJldHVybiB2ZWMyKCAwLjEyNSwgMC4yNSApICogcGxhbmFyICsgdmVjMiggMC4zNzUsIDAuNzUgKTsKCX0KCWZsb2F0IGdldFBvaW50U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCwgZmxvYXQgc2hhZG93Q2FtZXJhTmVhciwgZmxvYXQgc2hhZG93Q2FtZXJhRmFyICkgewoJCXZlYzIgdGV4ZWxTaXplID0gdmVjMiggMS4wICkgLyAoIHNoYWRvd01hcFNpemUgKiB2ZWMyKCA0LjAsIDIuMCApICk7CgkJdmVjMyBsaWdodFRvUG9zaXRpb24gPSBzaGFkb3dDb29yZC54eXo7CgkJZmxvYXQgZHAgPSAoIGxlbmd0aCggbGlnaHRUb1Bvc2l0aW9uICkgLSBzaGFkb3dDYW1lcmFOZWFyICkgLyAoIHNoYWRvd0NhbWVyYUZhciAtIHNoYWRvd0NhbWVyYU5lYXIgKTsJCWRwICs9IHNoYWRvd0JpYXM7CgkJdmVjMyBiZDNEID0gbm9ybWFsaXplKCBsaWdodFRvUG9zaXRpb24gKTsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQgKSB8fCBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9WU00gKQoJCQl2ZWMyIG9mZnNldCA9IHZlYzIoIC0gMSwgMSApICogc2hhZG93UmFkaXVzICogdGV4ZWxTaXplLnk7CgkJCXJldHVybiAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh5LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh4LCB0ZXhlbFNpemUueSApLCBkcCApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApCgkJCSkgKiAoIDEuMCAvIDkuMCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNELCB0ZXhlbFNpemUueSApLCBkcCApOwoJCSNlbmRpZgoJfQojZW5kaWZgLFdwcj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxZcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMCB8fCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCQl2ZWMzIHNoYWRvd1dvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggdHJhbnNmb3JtZWROb3JtYWwsIHZpZXdNYXRyaXggKTsKCQl2ZWM0IHNoYWRvd1dvcmxkUG9zaXRpb247CgkjZW5kaWYKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gPSBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogc3BvdExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gPSBzcG90U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHBvaW50TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZQb2ludFNoYWRvd0Nvb3JkWyBpIF0gPSBwb2ludFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKI2VuZGlmYCxqcHI9YGZsb2F0IGdldFNoYWRvd01hc2soKSB7CglmbG9hdCBzaGFkb3cgPSAxLjA7CgkjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCURpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlkaXJlY3Rpb25hbExpZ2h0ID0gZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggZGlyZWN0aW9uYWxTaGFkb3dNYXBbIGkgXSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dNYXBTaXplLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd0JpYXMsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93UmFkaXVzLCB2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNwb3RMaWdodCA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlzaGFkb3cgKj0gcmVjZWl2ZVNoYWRvdyA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHQuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0LnNoYWRvd0JpYXMsIHNwb3RMaWdodC5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJcG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjZW5kaWYKCXJldHVybiBzaGFkb3c7Cn1gLFhwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsJHByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4SW52ZXJzZTsKCSNpZmRlZiBCT05FX1RFWFRVUkUKCQl1bmlmb3JtIGhpZ2hwIHNhbXBsZXIyRCBib25lVGV4dHVyZTsKCQl1bmlmb3JtIGludCBib25lVGV4dHVyZVNpemU7CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQlmbG9hdCBqID0gaSAqIDQuMDsKCQkJZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IHkgPSBmbG9vciggaiAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCBkeCA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCXkgPSBkeSAqICggeSArIDAuNSApOwoJCQl2ZWM0IHYxID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7CgkJCXZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTsKCQkJdmVjNCB2MyA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMi41ICksIHkgKSApOwoJCQl2ZWM0IHY0ID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7CgkJCW1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7CgkJCXJldHVybiBib25lOwoJCX0KCSNlbHNlCgkJdW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07CgkJbWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkgewoJCQltYXQ0IGJvbmUgPSBib25lTWF0cmljZXNbIGludChpKSBdOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZW5kaWYKI2VuZGlmYCxLcHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXZlYzQgc2tpblZlcnRleCA9IGJpbmRNYXRyaXggKiB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7Cgl2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTsKCXNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogc2tpbldlaWdodC54OwoJc2tpbm5lZCArPSBib25lTWF0WSAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnk7Cglza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejsKCXNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogc2tpbldlaWdodC53OwoJdHJhbnNmb3JtZWQgPSAoIGJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejsKI2VuZGlmYCxacHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsSnByPWBmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwojaWZkZWYgVVNFX1NQRUNVTEFSTUFQCgl2ZWM0IHRleGVsU3BlY3VsYXIgPSB0ZXh0dXJlMkQoIHNwZWN1bGFyTWFwLCB2VXYgKTsKCXNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7CiNlbHNlCglzcGVjdWxhclN0cmVuZ3RoID0gMS4wOwojZW5kaWZgLFFwcj1gI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJNYXA7CiNlbmRpZmAsdGRyPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLGVkcj1gI2lmbmRlZiBzYXR1cmF0ZQojZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wICkKI2VuZGlmCnVuaWZvcm0gZmxvYXQgdG9uZU1hcHBpbmdFeHBvc3VyZTsKdmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCXJldHVybiB0b25lTWFwcGluZ0V4cG9zdXJlICogY29sb3I7Cn0KdmVjMyBSZWluaGFyZFRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgLyAoIHZlYzMoIDEuMCApICsgY29sb3IgKSApOwp9CnZlYzMgT3B0aW1pemVkQ2luZW9uVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJY29sb3IgPSBtYXgoIHZlYzMoIDAuMCApLCBjb2xvciAtIDAuMDA0ICk7CglyZXR1cm4gcG93KCAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDAuNSApICkgLyAoIGNvbG9yICogKCA2LjIgKiBjb2xvciArIDEuNyApICsgMC4wNiApLCB2ZWMzKCAyLjIgKSApOwp9CnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7Cgl2ZWMzIGEgPSB2ICogKCB2ICsgMC4wMjQ1Nzg2ICkgLSAwLjAwMDA5MDUzNzsKCXZlYzMgYiA9IHYgKiAoIDAuOTgzNzI5ICogdiArIDAuNDMyOTUxMCApICsgMC4yMzgwODE7CglyZXR1cm4gYSAvIGI7Cn0KdmVjMyBBQ0VTRmlsbWljVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb25zdCBtYXQzIEFDRVNJbnB1dE1hdCA9IG1hdDMoCgkJdmVjMyggMC41OTcxOSwgMC4wNzYwMCwgMC4wMjg0MCApLAkJdmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLAoJCXZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKQoJKTsKCWNvbnN0IG1hdDMgQUNFU091dHB1dE1hdCA9IG1hdDMoCgkJdmVjMyggIDEuNjA0NzUsIC0wLjEwMjA4LCAtMC4wMDMyNyApLAkJdmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLAoJCXZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKQoJKTsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmUgLyAwLjY7Cgljb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yOwoJY29sb3IgPSBSUlRBbmRPRFRGaXQoIGNvbG9yICk7Cgljb2xvciA9IEFDRVNPdXRwdXRNYXQgKiBjb2xvcjsKCXJldHVybiBzYXR1cmF0ZSggY29sb3IgKTsKfQp2ZWMzIEN1c3RvbVRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gY29sb3I7IH1gLHJkcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCWZsb2F0IHRyYW5zbWlzc2lvbkFscGhhID0gMS4wOwoJZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uOwoJZmxvYXQgdGhpY2tuZXNzRmFjdG9yID0gdGhpY2tuZXNzOwoJI2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVAKCQl0cmFuc21pc3Npb25GYWN0b3IgKj0gdGV4dHVyZTJEKCB0cmFuc21pc3Npb25NYXAsIHZVdiApLnI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEhJQ0tORVNTTUFQCgkJdGhpY2tuZXNzRmFjdG9yICo9IHRleHR1cmUyRCggdGhpY2tuZXNzTWFwLCB2VXYgKS5nOwoJI2VuZGlmCgl2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uOwoJdmVjMyB2ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApOwoJdmVjMyBuID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oCgkJbiwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLAoJCXBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLAoJCWF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTsKCXRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKCXRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCB0cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIHRyYW5zbWlzc2lvbkZhY3RvciApOwojZW5kaWZgLG5kcj1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxpZHI9YCNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKQoJdmFyeWluZyB2ZWMyIHZVdjsKI2VuZGlmYCxvZHI9YCNpZmRlZiBVU0VfVVYKCSNpZmRlZiBVVlNfVkVSVEVYX09OTFkKCQl2ZWMyIHZVdjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMyIHZVdjsKCSNlbmRpZgoJdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwojZW5kaWZgLGFkcj1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCxzZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdmFyeWluZyB2ZWMyIHZVdjI7CiNlbmRpZmAsbGRyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCWF0dHJpYnV0ZSB2ZWMyIHV2MjsKCXZhcnlpbmcgdmVjMiB2VXYyOwoJdW5pZm9ybSBtYXQzIHV2MlRyYW5zZm9ybTsKI2VuZGlmYCxjZHI9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCx1ZHI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OICkKCXZlYzQgd29ybGRQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKCSNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJCXdvcmxkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHdvcmxkUG9zaXRpb247CgkjZW5kaWYKCXdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247CiNlbmRpZmAsaGRyPWB2YXJ5aW5nIHZlYzIgdlV2Owp1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CnZvaWQgbWFpbigpIHsKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApOwp9YCxmZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAscGRyPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1Bvc2l0aW9uLnogPSBnbF9Qb3NpdGlvbi53Owp9YCxkZHI9YCNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJdmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CglnbF9GcmFnQ29sb3IgPSBlbnZDb2xvcjsKCWdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxtZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsZ2RyPWAjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgl1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWRpZmZ1c2VDb2xvci5hID0gb3BhY2l0eTsKCSNlbmRpZgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CglmbG9hdCBmcmFnQ29vcmRaID0gMC41ICogdkhpZ2hQcmVjaXNpb25aV1swXSAvIHZIaWdoUHJlY2lzaW9uWldbMV0gKyAwLjU7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggdmVjMyggMS4wIC0gZnJhZ0Nvb3JkWiApLCBvcGFjaXR5ICk7CgkjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDEKCQlnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTsKCSNlbmRpZgp9YCxfZHI9YCNkZWZpbmUgRElTVEFOQ0UKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6Owp9YCx5ZHI9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLHZkcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+Cn1gLHhkcj1gdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0Owp2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7Cgl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CglnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLGJkcj1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsd2RyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIGZsb2F0IGRhc2hTaXplOwp1bmlmb3JtIGZsb2F0IHRvdGFsU2l6ZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJaWYgKCBtb2QoIHZMaW5lRGlzdGFuY2UsIHRvdGFsU2l6ZSApID4gZGFzaFNpemUgKSB7CgkJZGlzY2FyZDsKCX0KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxTZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2lmIGRlZmluZWQgKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9TS0lOTklORyApCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE1kcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxFZHI9YCNkZWZpbmUgTEFNQkVSVAp2YXJ5aW5nIHZlYzMgdkxpZ2h0RnJvbnQ7CnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDsKI2lmZGVmIERPVUJMRV9TSURFRAoJdmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7Cgl2YXJ5aW5nIHZlYzMgdkluZGlyZWN0QmFjazsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxUZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZJbmRpcmVjdEZyb250IDogdkluZGlyZWN0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250OwoJI2VuZGlmCgkjaW5jbHVkZSA8bGlnaHRtYXBfZnJhZ21lbnQ+CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9ICggZ2xfRnJvbnRGYWNpbmcgKSA/IHZMaWdodEZyb250IDogdkxpZ2h0QmFjazsKCSNlbHNlCgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IHZMaWdodEZyb250OwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApICogZ2V0U2hhZG93TWFzaygpOwoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLENkcj1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxBZHI9YCNkZWZpbmUgTUFUQ0FQCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gc2FtcGxlcjJEIG1hdGNhcDsKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCXZlYzMgdmlld0RpciA9IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwoJdmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApOwoJdmVjMyB5ID0gY3Jvc3MoIHZpZXdEaXIsIHggKTsKCXZlYzIgdXYgPSB2ZWMyKCBkb3QoIHgsIG5vcm1hbCApLCBkb3QoIHksIG5vcm1hbCApICkgKiAwLjQ5NSArIDAuNTsKCSNpZmRlZiBVU0VfTUFUQ0FQCgkJdmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApOwoJI2Vsc2UKCQl2ZWM0IG1hdGNhcENvbG9yID0gdmVjNCggdmVjMyggbWl4KCAwLjIsIDAuOCwgdXYueSApICksIDEuMCApOwoJI2VuZGlmCgl2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxQZHI9YCNkZWZpbmUgTk9STUFMCiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CiNpZiBkZWZpbmVkKCBGTEFUX1NIQURFRCApIHx8IGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApCgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLElkcj1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsTGRyPWAjZGVmaW5lIFBIT05HCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLGtkcj1gI2RlZmluZSBQSE9ORwp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIHZlYzMgc3BlY3VsYXI7CnVuaWZvcm0gZmxvYXQgc2hpbmluZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3Bob25nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Bob25nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLFJkcj1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsTmRyPWAjZGVmaW5lIFNUQU5EQVJECiNpZmRlZiBQSFlTSUNBTAoJI2RlZmluZSBJT1IKCSNkZWZpbmUgU1BFQ1VMQVIKI2VuZGlmCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzOwp1bmlmb3JtIGZsb2F0IG1ldGFsbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWZkZWYgSU9SCgl1bmlmb3JtIGZsb2F0IGlvcjsKI2VuZGlmCiNpZmRlZiBTUEVDVUxBUgoJdW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTsKCXVuaWZvcm0gdmVjMyBzcGVjdWxhckNvbG9yOwoJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFySW50ZW5zaXR5TWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckNvbG9yTWFwOwoJI2VuZGlmCiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXQ7Cgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCXVuaWZvcm0gdmVjMyBzaGVlbkNvbG9yOwoJdW5pZm9ybSBmbG9hdCBzaGVlblJvdWdobmVzczsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlblJvdWdobmVzc01hcDsKCSNlbmRpZgojZW5kaWYKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cm91Z2huZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJdmVjMyB0b3RhbERpZmZ1c2UgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJdmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyOwoJI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaWZkZWYgVVNFX1NIRUVOCgkJZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyOwoJI2VuZGlmCgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5WY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXZlYzMgRmNjID0gRl9TY2hsaWNrKCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBkb3ROVmNjICk7CgkJb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7CgkjZW5kaWYKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsRGRyPWAjZGVmaW5lIFRPT04KdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLE9kcj1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLHpkcj1gdW5pZm9ybSBmbG9hdCBzaXplOwp1bmlmb3JtIGZsb2F0IHNjYWxlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb2ludFNpemUgPSBzaXplOwoJI2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApOwoJI2VuZGlmCgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEZkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50Pgp9YCxCZHI9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsSGRyPWB1bmlmb3JtIHZlYzMgY29sb3I7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggY29sb3IsIG9wYWNpdHkgKiAoIDEuMCAtIGdldFNoYWRvd01hc2soKSApICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsVmRyPWB1bmlmb3JtIGZsb2F0IHJvdGF0aW9uOwp1bmlmb3JtIHZlYzIgY2VudGVyOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCXZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJdmVjMiBzY2FsZTsKCXNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueCwgbW9kZWxNYXRyaXhbIDAgXS55LCBtb2RlbE1hdHJpeFsgMCBdLnogKSApOwoJc2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7CgkjaWZuZGVmIFVTRV9TSVpFQVRURU5VQVRJT04KCQlib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7CgkJaWYgKCBpc1BlcnNwZWN0aXZlICkgc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7CgkjZW5kaWYKCXZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7Cgl2ZWMyIHJvdGF0ZWRQb3NpdGlvbjsKCXJvdGF0ZWRQb3NpdGlvbi54ID0gY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggLSBzaW4oIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCXJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTsKCW12UG9zaXRpb24ueHkgKz0gcm90YXRlZFBvc2l0aW9uOwoJZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxVZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxocj17YWxwaGFtYXBfZnJhZ21lbnQ6X2ZyLGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ6eWZyLGFscGhhdGVzdF9mcmFnbWVudDp2ZnIsYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6eGZyLGFvbWFwX2ZyYWdtZW50OmJmcixhb21hcF9wYXJzX2ZyYWdtZW50OndmcixiZWdpbl92ZXJ0ZXg6U2ZyLGJlZ2lubm9ybWFsX3ZlcnRleDpNZnIsYnNkZnM6RWZyLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpUZnIsY2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50OkNmcixjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudDpBZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OlBmcixjbGlwcGluZ19wbGFuZXNfdmVydGV4Oklmcixjb2xvcl9mcmFnbWVudDpMZnIsY29sb3JfcGFyc19mcmFnbWVudDprZnIsY29sb3JfcGFyc192ZXJ0ZXg6UmZyLGNvbG9yX3ZlcnRleDpOZnIsY29tbW9uOkRmcixjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ6T2ZyLGRlZmF1bHRub3JtYWxfdmVydGV4OnpmcixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6RmZyLGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg6QmZyLGVtaXNzaXZlbWFwX2ZyYWdtZW50OkhmcixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OlZmcixlbmNvZGluZ3NfZnJhZ21lbnQ6VWZyLGVuY29kaW5nc19wYXJzX2ZyYWdtZW50OnFmcixlbnZtYXBfZnJhZ21lbnQ6R2ZyLGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudDpXZnIsZW52bWFwX3BhcnNfZnJhZ21lbnQ6WWZyLGVudm1hcF9wYXJzX3ZlcnRleDpqZnIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6aXByLGVudm1hcF92ZXJ0ZXg6WGZyLGZvZ192ZXJ0ZXg6JGZyLGZvZ19wYXJzX3ZlcnRleDpLZnIsZm9nX2ZyYWdtZW50Olpmcixmb2dfcGFyc19mcmFnbWVudDpKZnIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDpRZnIsbGlnaHRtYXBfZnJhZ21lbnQ6dHByLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6ZXByLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDpycHIsbGlnaHRzX3BhcnNfYmVnaW46bnByLGxpZ2h0c190b29uX2ZyYWdtZW50Om9wcixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OmFwcixsaWdodHNfcGhvbmdfZnJhZ21lbnQ6c3ByLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OmxwcixsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ6Y3ByLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OnVwcixsaWdodHNfZnJhZ21lbnRfYmVnaW46aHByLGxpZ2h0c19mcmFnbWVudF9tYXBzOmZwcixsaWdodHNfZnJhZ21lbnRfZW5kOnBwcixsb2dkZXB0aGJ1Zl9mcmFnbWVudDpkcHIsbG9nZGVwdGhidWZfcGFyc19mcmFnbWVudDptcHIsbG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg6Z3ByLGxvZ2RlcHRoYnVmX3ZlcnRleDpfcHIsbWFwX2ZyYWdtZW50OnlwcixtYXBfcGFyc19mcmFnbWVudDp2cHIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OnhwcixtYXBfcGFydGljbGVfcGFyc19mcmFnbWVudDpicHIsbWV0YWxuZXNzbWFwX2ZyYWdtZW50OndwcixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpTcHIsbW9ycGhub3JtYWxfdmVydGV4Ok1wcixtb3JwaHRhcmdldF9wYXJzX3ZlcnRleDpFcHIsbW9ycGh0YXJnZXRfdmVydGV4OlRwcixub3JtYWxfZnJhZ21lbnRfYmVnaW46Q3ByLG5vcm1hbF9mcmFnbWVudF9tYXBzOkFwcixub3JtYWxfcGFyc19mcmFnbWVudDpQcHIsbm9ybWFsX3BhcnNfdmVydGV4Oklwcixub3JtYWxfdmVydGV4Okxwcixub3JtYWxtYXBfcGFyc19mcmFnbWVudDprcHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjpScHIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOk5wcixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpEcHIsb3V0cHV0X2ZyYWdtZW50Ok9wcixwYWNraW5nOnpwcixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OkZwcixwcm9qZWN0X3ZlcnRleDpCcHIsZGl0aGVyaW5nX2ZyYWdtZW50OkhwcixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpWcHIscm91Z2huZXNzbWFwX2ZyYWdtZW50OlVwcixyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudDpxcHIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6R3ByLHNoYWRvd21hcF9wYXJzX3ZlcnRleDpXcHIsc2hhZG93bWFwX3ZlcnRleDpZcHIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50Ompwcixza2luYmFzZV92ZXJ0ZXg6WHByLHNraW5uaW5nX3BhcnNfdmVydGV4OiRwcixza2lubmluZ192ZXJ0ZXg6S3ByLHNraW5ub3JtYWxfdmVydGV4OlpwcixzcGVjdWxhcm1hcF9mcmFnbWVudDpKcHIsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDpRcHIsdG9uZW1hcHBpbmdfZnJhZ21lbnQ6dGRyLHRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6ZWRyLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpyZHIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6bmRyLHV2X3BhcnNfZnJhZ21lbnQ6aWRyLHV2X3BhcnNfdmVydGV4Om9kcix1dl92ZXJ0ZXg6YWRyLHV2Ml9wYXJzX2ZyYWdtZW50OnNkcix1djJfcGFyc192ZXJ0ZXg6bGRyLHV2Ml92ZXJ0ZXg6Y2RyLHdvcmxkcG9zX3ZlcnRleDp1ZHIsYmFja2dyb3VuZF92ZXJ0OmhkcixiYWNrZ3JvdW5kX2ZyYWc6ZmRyLGN1YmVfdmVydDpwZHIsY3ViZV9mcmFnOmRkcixkZXB0aF92ZXJ0Om1kcixkZXB0aF9mcmFnOmdkcixkaXN0YW5jZVJHQkFfdmVydDpfZHIsZGlzdGFuY2VSR0JBX2ZyYWc6eWRyLGVxdWlyZWN0X3ZlcnQ6dmRyLGVxdWlyZWN0X2ZyYWc6eGRyLGxpbmVkYXNoZWRfdmVydDpiZHIsbGluZWRhc2hlZF9mcmFnOndkcixtZXNoYmFzaWNfdmVydDpTZHIsbWVzaGJhc2ljX2ZyYWc6TWRyLG1lc2hsYW1iZXJ0X3ZlcnQ6RWRyLG1lc2hsYW1iZXJ0X2ZyYWc6VGRyLG1lc2htYXRjYXBfdmVydDpDZHIsbWVzaG1hdGNhcF9mcmFnOkFkcixtZXNobm9ybWFsX3ZlcnQ6UGRyLG1lc2hub3JtYWxfZnJhZzpJZHIsbWVzaHBob25nX3ZlcnQ6TGRyLG1lc2hwaG9uZ19mcmFnOmtkcixtZXNocGh5c2ljYWxfdmVydDpSZHIsbWVzaHBoeXNpY2FsX2ZyYWc6TmRyLG1lc2h0b29uX3ZlcnQ6RGRyLG1lc2h0b29uX2ZyYWc6T2RyLHBvaW50c192ZXJ0Onpkcixwb2ludHNfZnJhZzpGZHIsc2hhZG93X3ZlcnQ6QmRyLHNoYWRvd19mcmFnOkhkcixzcHJpdGVfdmVydDpWZHIsc3ByaXRlX2ZyYWc6VWRyfSxyZT17Y29tbW9uOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHV2MlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfX0sc3BlY3VsYXJtYXA6e3NwZWN1bGFyTWFwOnt2YWx1ZTpudWxsfX0sZW52bWFwOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfSxyZWZsZWN0aXZpdHk6e3ZhbHVlOjF9LGlvcjp7dmFsdWU6MS41fSxyZWZyYWN0aW9uUmF0aW86e3ZhbHVlOi45OH19LGFvbWFwOnthb01hcDp7dmFsdWU6bnVsbH0sYW9NYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fSxsaWdodG1hcDp7bGlnaHRNYXA6e3ZhbHVlOm51bGx9LGxpZ2h0TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sZW1pc3NpdmVtYXA6e2VtaXNzaXZlTWFwOnt2YWx1ZTpudWxsfX0sYnVtcG1hcDp7YnVtcE1hcDp7dmFsdWU6bnVsbH0sYnVtcFNjYWxlOnt2YWx1ZToxfX0sbm9ybWFsbWFwOntub3JtYWxNYXA6e3ZhbHVlOm51bGx9LG5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBuZSgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEx0KC41LC41KX0scm90YXRpb246e3ZhbHVlOjB9LG1hcDp7dmFsdWU6bnVsbH0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH0sdXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX19fSxhaD17YmFzaWM6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5tZXNoYmFzaWNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNoYmFzaWNfZnJhZ30sbGFtYmVydDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5zcGVjdWxhcm1hcCxyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGxhbWJlcnRfZnJhZ30scGhvbmc6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhcjp7dmFsdWU6bmV3IG5lKDExMTg0ODEpfSxzaGluaW5lc3M6e3ZhbHVlOjMwfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBob25nX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBob25nX2ZyYWd9LHN0YW5kYXJkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUucm91Z2huZXNzbWFwLHJlLm1ldGFsbmVzc21hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfSxyb3VnaG5lc3M6e3ZhbHVlOjF9LG1ldGFsbmVzczp7dmFsdWU6MH0sZW52TWFwSW50ZW5zaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHBoeXNpY2FsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaHBoeXNpY2FsX2ZyYWd9LHRvb246e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmdyYWRpZW50bWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNodG9vbl92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2h0b29uX2ZyYWd9LG1hdGNhcDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHttYXRjYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobWF0Y2FwX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG1hdGNhcF9mcmFnfSxwb2ludHM6e3VuaWZvcm1zOlRhKFtyZS5wb2ludHMscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnBvaW50c192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnBvaW50c19mcmFnfSxkYXNoZWQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZm9nLHtzY2FsZTp7dmFsdWU6MX0sZGFzaFNpemU6e3ZhbHVlOjF9LHRvdGFsU2l6ZTp7dmFsdWU6Mn19XSksdmVydGV4U2hhZGVyOmhyLmxpbmVkYXNoZWRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5saW5lZGFzaGVkX2ZyYWd9LGRlcHRoOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmRpc3BsYWNlbWVudG1hcF0pLHZlcnRleFNoYWRlcjpoci5kZXB0aF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRlcHRoX2ZyYWd9LG5vcm1hbDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobm9ybWFsX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaG5vcm1hbF9mcmFnfSxzcHJpdGU6e3VuaWZvcm1zOlRhKFtyZS5zcHJpdGUscmUuZm9nXSksdmVydGV4U2hhZGVyOmhyLnNwcml0ZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLnNwcml0ZV9mcmFnfSxiYWNrZ3JvdW5kOnt1bmlmb3Jtczp7dXZUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sdDJEOnt2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmhyLmJhY2tncm91bmRfdmVydCxmcmFnbWVudFNoYWRlcjpoci5iYWNrZ3JvdW5kX2ZyYWd9LGN1YmU6e3VuaWZvcm1zOlRhKFtyZS5lbnZtYXAse29wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5jdWJlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuY3ViZV9mcmFnfSxlcXVpcmVjdDp7dW5pZm9ybXM6e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5lcXVpcmVjdF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmVxdWlyZWN0X2ZyYWd9LGRpc3RhbmNlUkdCQTp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXAse3JlZmVyZW5jZVBvc2l0aW9uOnt2YWx1ZTpuZXcgan0sbmVhckRpc3RhbmNlOnt2YWx1ZToxfSxmYXJEaXN0YW5jZTp7dmFsdWU6MWUzfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuZGlzdGFuY2VSR0JBX2ZyYWd9LHNoYWRvdzp7dW5pZm9ybXM6VGEoW3JlLmxpZ2h0cyxyZS5mb2cse2NvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LG9wYWNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpoci5zaGFkb3dfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zaGFkb3dfZnJhZ319O2FoLnBoeXNpY2FsPXt1bmlmb3JtczpUYShbYWguc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBMdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgTHR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgbmUoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IG5lKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBxZHIoZSx0LHIsbixpLG8pe2xldCBhPW5ldyBuZSgwKSxzPWk9PT0hMD8wOjEsbCxjLHU9bnVsbCxoPTAsZj1udWxsO2Z1bmN0aW9uIHAoZyxfKXtsZXQgeT0hMSx4PV8uaXNTY2VuZT09PSEwP18uYmFja2dyb3VuZDpudWxsO3gmJnguaXNUZXh0dXJlJiYoeD10LmdldCh4KSk7bGV0IGI9ZS54cixTPWIuZ2V0U2Vzc2lvbiYmYi5nZXRTZXNzaW9uKCk7UyYmUy5lbnZpcm9ubWVudEJsZW5kTW9kZT09PSJhZGRpdGl2ZSImJih4PW51bGwpLHg9PT1udWxsP2QoYSxzKTp4JiZ4LmlzQ29sb3ImJihkKHgsMSkseT0hMCksKGUuYXV0b0NsZWFyfHx5KSYmZS5jbGVhcihlLmF1dG9DbGVhckNvbG9yLGUuYXV0b0NsZWFyRGVwdGgsZS5hdXRvQ2xlYXJTdGVuY2lsKSx4JiYoeC5pc0N1YmVUZXh0dXJlfHx4Lm1hcHBpbmc9PT14TSk/KGM9PT12b2lkIDAmJihjPW5ldyB0aShuZXcgUWYoMSwxLDEpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6WjMoYWguY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOmFoLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmFoLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJ1diIpLGMub25CZWZvcmVSZW5kZXI9ZnVuY3Rpb24oQyxQLGspe3RoaXMubWF0cml4V29ybGQuY29weVBvc2l0aW9uKGsubWF0cml4V29ybGQpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5tYXRlcmlhbCwiZW52TWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMuZW52TWFwLnZhbHVlfX0pLG4udXBkYXRlKGMpKSxjLm1hdGVyaWFsLnVuaWZvcm1zLmVudk1hcC52YWx1ZT14LGMubWF0ZXJpYWwudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT14LmlzQ3ViZVRleHR1cmUmJnguaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSwodSE9PXh8fGghPT14LnZlcnNpb258fGYhPT1lLnRvbmVNYXBwaW5nKSYmKGMubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT14LGg9eC52ZXJzaW9uLGY9ZS50b25lTWFwcGluZyksZy51bnNoaWZ0KGMsYy5nZW9tZXRyeSxjLm1hdGVyaWFsLDAsMCxudWxsKSk6eCYmeC5pc1RleHR1cmUmJihsPT09dm9pZCAwJiYobD1uZXcgdGkobmV3IFYwKDIsMiksbmV3IGxoKHtuYW1lOiJCYWNrZ3JvdW5kTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmJhY2tncm91bmQudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5iYWNrZ3JvdW5kLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5iYWNrZ3JvdW5kLmZyYWdtZW50U2hhZGVyLHNpZGU6STEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGwuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5tYXRlcmlhbCwibWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5pZm9ybXMudDJELnZhbHVlfX0pLG4udXBkYXRlKGwpKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnQyRC52YWx1ZT14LHgubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZ4LnVwZGF0ZU1hdHJpeCgpLGwubWF0ZXJpYWwudW5pZm9ybXMudXZUcmFuc2Zvcm0udmFsdWUuY29weSh4Lm1hdHJpeCksKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihsLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChsLGwuZ2VvbWV0cnksbC5tYXRlcmlhbCwwLDAsbnVsbCkpfWZ1bmN0aW9uIGQoZyxfKXtyLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIoZy5yLGcuZyxnLmIsXyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKGcsXz0xKXthLnNldChnKSxzPV8sZChhLHMpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24oZyl7cz1nLGQoYSxzKX0scmVuZGVyOnB9fWZ1bmN0aW9uIEdkcihlLHQscixuKXtsZXQgaT1lLmdldFBhcmFtZXRlcigzNDkyMSksbz1uLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksYT1uLmlzV2ViR0wyfHxvIT09bnVsbCxzPXt9LGw9ZyhudWxsKSxjPWw7ZnVuY3Rpb24gdShSLEYseixVLFcpe2xldCBaPSExO2lmKGEpe2xldCBydD1kKFUseixGKTtjIT09cnQmJihjPXJ0LGYoYy5vYmplY3QpKSxaPV8oVSxXKSxaJiZ5KFUsVyl9ZWxzZXtsZXQgcnQ9Ri53aXJlZnJhbWU9PT0hMDsoYy5nZW9tZXRyeSE9PVUuaWR8fGMucHJvZ3JhbSE9PXouaWR8fGMud2lyZWZyYW1lIT09cnQpJiYoYy5nZW9tZXRyeT1VLmlkLGMucHJvZ3JhbT16LmlkLGMud2lyZWZyYW1lPXJ0LFo9ITApfVIuaXNJbnN0YW5jZWRNZXNoPT09ITAmJihaPSEwKSxXIT09bnVsbCYmci51cGRhdGUoVywzNDk2MyksWiYmKGsoUixGLHosVSksVyE9PW51bGwmJmUuYmluZEJ1ZmZlcigzNDk2MyxyLmdldChXKS5idWZmZXIpKX1mdW5jdGlvbiBoKCl7cmV0dXJuIG4uaXNXZWJHTDI/ZS5jcmVhdGVWZXJ0ZXhBcnJheSgpOm8uY3JlYXRlVmVydGV4QXJyYXlPRVMoKX1mdW5jdGlvbiBmKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuYmluZFZlcnRleEFycmF5KFIpOm8uYmluZFZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIHAoUil7cmV0dXJuIG4uaXNXZWJHTDI/ZS5kZWxldGVWZXJ0ZXhBcnJheShSKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKFIpfWZ1bmN0aW9uIGQoUixGLHope2xldCBVPXoud2lyZWZyYW1lPT09ITAsVz1zW1IuaWRdO1c9PT12b2lkIDAmJihXPXt9LHNbUi5pZF09Vyk7bGV0IFo9V1tGLmlkXTtaPT09dm9pZCAwJiYoWj17fSxXW0YuaWRdPVopO2xldCBydD1aW1VdO3JldHVybiBydD09PXZvaWQgMCYmKHJ0PWcoaCgpKSxaW1VdPXJ0KSxydH1mdW5jdGlvbiBnKFIpe2xldCBGPVtdLHo9W10sVT1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUZbV109MCx6W1ddPTAsVVtXXT0wO3JldHVybntnZW9tZXRyeTpudWxsLHByb2dyYW06bnVsbCx3aXJlZnJhbWU6ITEsbmV3QXR0cmlidXRlczpGLGVuYWJsZWRBdHRyaWJ1dGVzOnosYXR0cmlidXRlRGl2aXNvcnM6VSxvYmplY3Q6UixhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIF8oUixGKXtsZXQgej1jLmF0dHJpYnV0ZXMsVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9eltaXSxvdD1VW1pdO2lmKHJ0PT09dm9pZCAwfHxydC5hdHRyaWJ1dGUhPT1vdHx8cnQuZGF0YSE9PW90LmRhdGEpcmV0dXJuITA7VysrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1XfHxjLmluZGV4IT09Rn1mdW5jdGlvbiB5KFIsRil7bGV0IHo9e30sVT1SLmF0dHJpYnV0ZXMsVz0wO2ZvcihsZXQgWiBpbiBVKXtsZXQgcnQ9VVtaXSxvdD17fTtvdC5hdHRyaWJ1dGU9cnQscnQuZGF0YSYmKG90LmRhdGE9cnQuZGF0YSkseltaXT1vdCxXKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVcsYy5pbmRleD1GfWZ1bmN0aW9uIHgoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKVJbRl09MH1mdW5jdGlvbiBiKFIpe1MoUiwwKX1mdW5jdGlvbiBTKFIsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLFU9Yy5lbmFibGVkQXR0cmlidXRlcyxXPWMuYXR0cmlidXRlRGl2aXNvcnM7eltSXT0xLFVbUl09PT0wJiYoZS5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShSKSxVW1JdPTEpLFdbUl0hPT1GJiYoKG4uaXNXZWJHTDI/ZTp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtuLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oUixGKSxXW1JdPUYpfWZ1bmN0aW9uIEMoKXtsZXQgUj1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLFU9Ri5sZW5ndGg7ejxVO3orKylGW3pdIT09Ult6XSYmKGUuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gUChSLEYseixVLFcsWil7bi5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9lLnZlcnRleEF0dHJpYklQb2ludGVyKFIsRix6LFcsWik6ZS52ZXJ0ZXhBdHRyaWJQb2ludGVyKFIsRix6LFUsVyxaKX1mdW5jdGlvbiBrKFIsRix6LFUpe2lmKG4uaXNXZWJHTDI9PT0hMSYmKFIuaXNJbnN0YW5jZWRNZXNofHxVLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47eCgpO2xldCBXPVUuYXR0cmlidXRlcyxaPXouZ2V0QXR0cmlidXRlcygpLHJ0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IG90IGluIFope2xldCBzdD1aW290XTtpZihzdC5sb2NhdGlvbj49MCl7bGV0IFN0PVdbb3RdO2lmKFN0PT09dm9pZCAwJiYob3Q9PT0iaW5zdGFuY2VNYXRyaXgiJiZSLmluc3RhbmNlTWF0cml4JiYoU3Q9Ui5pbnN0YW5jZU1hdHJpeCksb3Q9PT0iaW5zdGFuY2VDb2xvciImJlIuaW5zdGFuY2VDb2xvciYmKFN0PVIuaW5zdGFuY2VDb2xvcikpLFN0IT09dm9pZCAwKXtsZXQgYnQ9U3Qubm9ybWFsaXplZCxNdD1TdC5pdGVtU2l6ZSxsdD1yLmdldChTdCk7aWYobHQ9PT12b2lkIDApY29udGludWU7bGV0IEt0PWx0LmJ1ZmZlcixfdD1sdC50eXBlLGN0PWx0LmJ5dGVzUGVyRWxlbWVudDtpZihTdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgWD1TdC5kYXRhLGV0PVguc3RyaWRlLGR0PVN0Lm9mZnNldDtpZihYJiZYLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylTKHN0LmxvY2F0aW9uK3EsWC5tZXNoUGVyQXR0cmlidXRlKTtSLmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZVLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoVS5fbWF4SW5zdGFuY2VDb3VudD1YLm1lc2hQZXJBdHRyaWJ1dGUqWC5jb3VudCl9ZWxzZSBmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspYihzdC5sb2NhdGlvbitxKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgcT0wO3E8c3QubG9jYXRpb25TaXplO3ErKylQKHN0LmxvY2F0aW9uK3EsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LGV0KmN0LChkdCtNdC9zdC5sb2NhdGlvblNpemUqcSkqY3QpfWVsc2V7aWYoU3QuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUpe2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylTKHN0LmxvY2F0aW9uK1gsU3QubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9U3QubWVzaFBlckF0dHJpYnV0ZSpTdC5jb3VudCl9ZWxzZSBmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspYihzdC5sb2NhdGlvbitYKTtlLmJpbmRCdWZmZXIoMzQ5NjIsS3QpO2ZvcihsZXQgWD0wO1g8c3QubG9jYXRpb25TaXplO1grKylQKHN0LmxvY2F0aW9uK1gsTXQvc3QubG9jYXRpb25TaXplLF90LGJ0LE10KmN0LE10L3N0LmxvY2F0aW9uU2l6ZSpYKmN0KX19ZWxzZSBpZihydCE9PXZvaWQgMCl7bGV0IGJ0PXJ0W290XTtpZihidCE9PXZvaWQgMClzd2l0Y2goYnQubGVuZ3RoKXtjYXNlIDI6ZS52ZXJ0ZXhBdHRyaWIyZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgMzplLnZlcnRleEF0dHJpYjNmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7Y2FzZSA0OmUudmVydGV4QXR0cmliNGZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztkZWZhdWx0OmUudmVydGV4QXR0cmliMWZ2KHN0LmxvY2F0aW9uLGJ0KX19fX1DKCl9ZnVuY3Rpb24gTygpe0koKTtmb3IobGV0IFIgaW4gcyl7bGV0IEY9c1tSXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSXX19ZnVuY3Rpb24gRChSKXtpZihzW1IuaWRdPT09dm9pZCAwKXJldHVybjtsZXQgRj1zW1IuaWRdO2ZvcihsZXQgeiBpbiBGKXtsZXQgVT1GW3pdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSBGW3pdfWRlbGV0ZSBzW1IuaWRdfWZ1bmN0aW9uIEIoUil7Zm9yKGxldCBGIGluIHMpe2xldCB6PXNbRl07aWYoeltSLmlkXT09PXZvaWQgMCljb250aW51ZTtsZXQgVT16W1IuaWRdO2ZvcihsZXQgVyBpbiBVKXAoVVtXXS5vYmplY3QpLGRlbGV0ZSBVW1ddO2RlbGV0ZSB6W1IuaWRdfX1mdW5jdGlvbiBJKCl7TCgpLGMhPT1sJiYoYz1sLGYoYy5vYmplY3QpKX1mdW5jdGlvbiBMKCl7bC5nZW9tZXRyeT1udWxsLGwucHJvZ3JhbT1udWxsLGwud2lyZWZyYW1lPSExfXJldHVybntzZXR1cDp1LHJlc2V0OkkscmVzZXREZWZhdWx0U3RhdGU6TCxkaXNwb3NlOk8scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6RCxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOkIsaW5pdEF0dHJpYnV0ZXM6eCxlbmFibGVBdHRyaWJ1dGU6YixkaXNhYmxlVW51c2VkQXR0cmlidXRlczpDfX1mdW5jdGlvbiBXZHIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoYyl7bz1jfWZ1bmN0aW9uIHMoYyx1KXtlLmRyYXdBcnJheXMobyxjLHUpLHIudXBkYXRlKHUsbywxKX1mdW5jdGlvbiBsKGMsdSxoKXtpZihoPT09MClyZXR1cm47bGV0IGYscDtpZihpKWY9ZSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkIjtlbHNlIGlmKGY9dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSxwPSJkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUiLGY9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTtyZXR1cm59ZltwXShvLGMsdSxoKSxyLnVwZGF0ZSh1LG8saCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5yZW5kZXI9cyx0aGlzLnJlbmRlckluc3RhbmNlcz1sfWZ1bmN0aW9uIFlkcihlLHQscil7bGV0IG47ZnVuY3Rpb24gaSgpe2lmKG4hPT12b2lkIDApcmV0dXJuIG47aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBrPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtuPWUuZ2V0UGFyYW1ldGVyKGsuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIG49MDtyZXR1cm4gbn1mdW5jdGlvbiBvKGspe2lmKGs9PT0iaGlnaHAiKXtpZihlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO2s9Im1lZGl1bXAifXJldHVybiBrPT09Im1lZGl1bXAiJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJmUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBhPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmZSBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxzPXIucHJlY2lzaW9uIT09dm9pZCAwP3IucHJlY2lzaW9uOiJoaWdocCIsbD1vKHMpO2whPT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIscywibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIikscz1sKTtsZXQgYz1hfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1yLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPWUuZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPWUuZ2V0UGFyYW1ldGVyKDM1NjYwKSxwPWUuZ2V0UGFyYW1ldGVyKDMzNzkpLGQ9ZS5nZXRQYXJhbWV0ZXIoMzQwNzYpLGc9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLF89ZS5nZXRQYXJhbWV0ZXIoMzYzNDcpLHk9ZS5nZXRQYXJhbWV0ZXIoMzYzNDgpLHg9ZS5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLFM9YXx8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksQz1iJiZTLFA9YT9lLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6YSxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6aSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246cyxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOnAsbWF4Q3ViZW1hcFNpemU6ZCxtYXhBdHRyaWJ1dGVzOmcsbWF4VmVydGV4VW5pZm9ybXM6XyxtYXhWYXJ5aW5nczp5LG1heEZyYWdtZW50VW5pZm9ybXM6eCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpTLGZsb2F0VmVydGV4VGV4dHVyZXM6QyxtYXhTYW1wbGVzOlB9fWZ1bmN0aW9uIGpkcihlKXtsZXQgdD10aGlzLHI9bnVsbCxuPTAsaT0hMSxvPSExLGE9bmV3ICRjLHM9bmV3IGtpLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O3RoaXMudW5pZm9ybT1sLHRoaXMubnVtUGxhbmVzPTAsdGhpcy5udW1JbnRlcnNlY3Rpb249MCx0aGlzLmluaXQ9ZnVuY3Rpb24oaCxmLHApe2xldCBkPWgubGVuZ3RoIT09MHx8Znx8biE9PTB8fGk7cmV0dXJuIGk9ZixyPXUoaCxwLDApLG49aC5sZW5ndGgsZH0sdGhpcy5iZWdpblNoYWRvd3M9ZnVuY3Rpb24oKXtvPSEwLHUobnVsbCl9LHRoaXMuZW5kU2hhZG93cz1mdW5jdGlvbigpe289ITEsYygpfSx0aGlzLnNldFN0YXRlPWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmNsaXBwaW5nUGxhbmVzLGc9aC5jbGlwSW50ZXJzZWN0aW9uLF89aC5jbGlwU2hhZG93cyx5PWUuZ2V0KGgpO2lmKCFpfHxkPT09bnVsbHx8ZC5sZW5ndGg9PT0wfHxvJiYhXylvP3UobnVsbCk6YygpO2Vsc2V7bGV0IHg9bz8wOm4sYj14KjQsUz15LmNsaXBwaW5nU3RhdGV8fG51bGw7bC52YWx1ZT1TLFM9dShkLGYsYixwKTtmb3IobGV0IEM9MDtDIT09YjsrK0MpU1tDXT1yW0NdO3kuY2xpcHBpbmdTdGF0ZT1TLHRoaXMubnVtSW50ZXJzZWN0aW9uPWc/dGhpcy5udW1QbGFuZXM6MCx0aGlzLm51bVBsYW5lcys9eH19O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ciYmKGwudmFsdWU9cixsLm5lZWRzVXBkYXRlPW4+MCksdC5udW1QbGFuZXM9bix0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoaCxmLHAsZCl7bGV0IGc9aCE9PW51bGw/aC5sZW5ndGg6MCxfPW51bGw7aWYoZyE9PTApe2lmKF89bC52YWx1ZSxkIT09ITB8fF89PT1udWxsKXtsZXQgeT1wK2cqNCx4PWYubWF0cml4V29ybGRJbnZlcnNlO3MuZ2V0Tm9ybWFsTWF0cml4KHgpLChfPT09bnVsbHx8Xy5sZW5ndGg8eSkmJihfPW5ldyBGbG9hdDMyQXJyYXkoeSkpO2ZvcihsZXQgYj0wLFM9cDtiIT09ZzsrK2IsUys9NClhLmNvcHkoaFtiXSkuYXBwbHlNYXRyaXg0KHgscyksYS5ub3JtYWwudG9BcnJheShfLFMpLF9bUyszXT1hLmNvbnN0YW50fWwudmFsdWU9XyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1nLHQubnVtSW50ZXJzZWN0aW9uPTAsX319ZnVuY3Rpb24gWGRyKGUpe2xldCB0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHIoYSxzKXtyZXR1cm4gcz09PVlQP2EubWFwcGluZz1ueDpzPT09alAmJihhLm1hcHBpbmc9aXgpLGF9ZnVuY3Rpb24gbihhKXtpZihhJiZhLmlzVGV4dHVyZSYmYS5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMSl7bGV0IHM9YS5tYXBwaW5nO2lmKHM9PT1ZUHx8cz09PWpQKWlmKHQuaGFzKGEpKXtsZXQgbD10LmdldChhKS50ZXh0dXJlO3JldHVybiByKGwsYS5tYXBwaW5nKX1lbHNle2xldCBsPWEuaW1hZ2U7aWYobCYmbC5oZWlnaHQ+MCl7bGV0IGM9bmV3IFEzKGwuaGVpZ2h0LzIpO3JldHVybiBjLmZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKGUsYSksdC5zZXQoYSxjKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpLHIoYy50ZXh0dXJlLGEubWFwcGluZyl9ZWxzZSByZXR1cm4gbnVsbH19cmV0dXJuIGF9ZnVuY3Rpb24gaShhKXtsZXQgcz1hLnRhcmdldDtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGkpO2xldCBsPXQuZ2V0KHMpO2whPT12b2lkIDAmJih0LmRlbGV0ZShzKSxsLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXB9cmV0dXJue2dldDpuLGRpc3Bvc2U6b319dmFyIEQxPWNsYXNzIGV4dGVuZHMgUjF7Y29uc3RydWN0b3IodD0tMSxyPTEsbj0xLGk9LTEsbz0uMSxhPTJlMyl7c3VwZXIoKSx0aGlzLnR5cGU9Ik9ydGhvZ3JhcGhpY0NhbWVyYSIsdGhpcy56b29tPTEsdGhpcy52aWV3PW51bGwsdGhpcy5sZWZ0PXQsdGhpcy5yaWdodD1yLHRoaXMudG9wPW4sdGhpcy5ib3R0b209aSx0aGlzLm5lYXI9byx0aGlzLmZhcj1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubGVmdD10LmxlZnQsdGhpcy5yaWdodD10LnJpZ2h0LHRoaXMudG9wPXQudG9wLHRoaXMuYm90dG9tPXQuYm90dG9tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy56b29tPXQuem9vbSx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzfXNldFZpZXdPZmZzZXQodCxyLG4saSxvLGEpe3RoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS8oMip0aGlzLnpvb20pLHI9KHRoaXMudG9wLXRoaXMuYm90dG9tKS8oMip0aGlzLnpvb20pLG49KHRoaXMucmlnaHQrdGhpcy5sZWZ0KS8yLGk9KHRoaXMudG9wK3RoaXMuYm90dG9tKS8yLG89bi10LGE9bit0LHM9aStyLGw9aS1yO2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgYz0odGhpcy5yaWdodC10aGlzLmxlZnQpL3RoaXMudmlldy5mdWxsV2lkdGgvdGhpcy56b29tLHU9KHRoaXMudG9wLXRoaXMuYm90dG9tKS90aGlzLnZpZXcuZnVsbEhlaWdodC90aGlzLnpvb207bys9Yyp0aGlzLnZpZXcub2Zmc2V0WCxhPW8rYyp0aGlzLnZpZXcud2lkdGgscy09dSp0aGlzLnZpZXcub2Zmc2V0WSxsPXMtdSp0aGlzLnZpZXcuaGVpZ2h0fXRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlT3J0aG9ncmFwaGljKG8sYSxzLGwsdGhpcy5uZWFyLHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC56b29tPXRoaXMuem9vbSxyLm9iamVjdC5sZWZ0PXRoaXMubGVmdCxyLm9iamVjdC5yaWdodD10aGlzLnJpZ2h0LHIub2JqZWN0LnRvcD10aGlzLnRvcCxyLm9iamVjdC5ib3R0b209dGhpcy5ib3R0b20sci5vYmplY3QubmVhcj10aGlzLm5lYXIsci5vYmplY3QuZmFyPXRoaXMuZmFyLHRoaXMudmlldyE9PW51bGwmJihyLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSkscn19O0QxLnByb3RvdHlwZS5pc09ydGhvZ3JhcGhpY0NhbWVyYT0hMDt2YXIgVTA9Y2xhc3MgZXh0ZW5kcyBsaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnR5cGU9IlJhd1NoYWRlck1hdGVyaWFsIn19O1UwLnByb3RvdHlwZS5pc1Jhd1NoYWRlck1hdGVyaWFsPSEwO3ZhciBxMz00LEYwPTgsJGY9TWF0aC5wb3coMixGMCksQmZlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxIZmU9RjAtcTMrMStCZmUubGVuZ3RoLGszPTIwLGh1dD1uZXcgRDEse19sb2RQbGFuZXM6TlAsX3NpemVMb2RzOkV1ZSxfc2lnbWFzOlBWfT0kZHIoKSxUdWU9bmV3IG5lLGZ1dD1udWxsLFMxPSgxK01hdGguc3FydCg1KSkvMixSMz0xL1MxLEN1ZT1bbmV3IGooMSwxLDEpLG5ldyBqKC0xLDEsMSksbmV3IGooMSwxLC0xKSxuZXcgaigtMSwxLC0xKSxuZXcgaigwLFMxLFIzKSxuZXcgaigwLFMxLC1SMyksbmV3IGooUjMsMCxTMSksbmV3IGooLVIzLDAsUzEpLG5ldyBqKFMxLFIzLDApLG5ldyBqKC1TMSxSMywwKV0sZTY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1udWxsLHRoaXMuX2JsdXJNYXRlcmlhbD1LZHIoazMpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LHI9MCxuPS4xLGk9MTAwKXtmdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxuLGksbykscj4wJiZ0aGlzLl9ibHVyKG8sMCwwLHIpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxyPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LHIpfWZyb21DdWJlbWFwKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe3RoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1JdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXt0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxOUC5sZW5ndGg7dCsrKU5QW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoZnV0KSx0LnNjaXNzb3JUZXN0PSExLElWKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpfV9mcm9tVGV4dHVyZSh0LHIpe2Z1dD10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbj1yfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LG4pLHRoaXMuX2FwcGx5UE1SRU0obiksdGhpcy5fY2xlYW51cChuKSxufV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IHI9e21hZ0ZpbHRlcjppaSxtaW5GaWx0ZXI6aWksZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6QzEsZm9ybWF0OlFvLGVuY29kaW5nOlFkLGRlcHRoQnVmZmVyOiExfSxuPUF1ZShyKTtyZXR1cm4gbi5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1BdWUocikpLG59X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgcj1uZXcgdGkoTlBbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShyLGh1dCl9X3NjZW5lVG9DdWJlVVYodCxyLG4saSl7bGV0IHM9bmV3IFVpKDkwLDEscixuKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGg9dS5hdXRvQ2xlYXIsZj11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihUdWUpLHUudG9uZU1hcHBpbmc9S2QsdS5hdXRvQ2xlYXI9ITE7bGV0IHA9bmV3IHNoKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOklpLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZD1uZXcgdGkobmV3IFFmLHApLGc9ITEsXz10LmJhY2tncm91bmQ7Xz9fLmlzQ29sb3ImJihwLmNvbG9yLmNvcHkoXyksdC5iYWNrZ3JvdW5kPW51bGwsZz0hMCk6KHAuY29sb3IuY29weShUdWUpLGc9ITApO2ZvcihsZXQgeT0wO3k8Njt5Kyspe2xldCB4PXklMzt4PT09MD8ocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KGNbeV0sMCwwKSk6eD09PTE/KHMudXAuc2V0KDAsMCxsW3ldKSxzLmxvb2tBdCgwLGNbeV0sMCkpOihzLnVwLnNldCgwLGxbeV0sMCkscy5sb29rQXQoMCwwLGNbeV0pKSxJVihpLHgqJGYseT4yPyRmOjAsJGYsJGYpLHUuc2V0UmVuZGVyVGFyZ2V0KGkpLGcmJnUucmVuZGVyKGQscyksdS5yZW5kZXIodCxzKX1kLmdlb21ldHJ5LmRpc3Bvc2UoKSxkLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPWYsdS5hdXRvQ2xlYXI9aCx0LmJhY2tncm91bmQ9X31fdGV4dHVyZVRvQ3ViZVVWKHQscil7bGV0IG49dGhpcy5fcmVuZGVyZXIsaT10Lm1hcHBpbmc9PT1ueHx8dC5tYXBwaW5nPT09aXg7aT8odGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPUl1ZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9dC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxKTp0aGlzLl9lcXVpcmVjdFNoYWRlcj09PW51bGwmJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1QdWUoKSk7bGV0IG89aT90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLGE9bmV3IHRpKE5QWzBdLG8pLHM9by51bmlmb3JtcztzLmVudk1hcC52YWx1ZT10LGl8fHMudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSVYociwwLDAsMyokZiwyKiRmKSxuLnNldFJlbmRlclRhcmdldChyKSxuLnJlbmRlcihhLGh1dCl9X2FwcGx5UE1SRU0odCl7bGV0IHI9dGhpcy5fcmVuZGVyZXIsbj1yLmF1dG9DbGVhcjtyLmF1dG9DbGVhcj0hMTtmb3IobGV0IGk9MTtpPEhmZTtpKyspe2xldCBvPU1hdGguc3FydChQVltpXSpQVltpXS1QVltpLTFdKlBWW2ktMV0pLGE9Q3VlWyhpLTEpJUN1ZS5sZW5ndGhdO3RoaXMuX2JsdXIodCxpLTEsaSxvLGEpfXIuYXV0b0NsZWFyPW59X2JsdXIodCxyLG4saSxvKXtsZXQgYT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LGEscixuLGksImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihhLHQsbixuLGksImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQscixuLGksbyxhLHMpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsO2EhPT0ibGF0aXR1ZGluYWwiJiZhIT09ImxvbmdpdHVkaW5hbCImJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgdT0zLGg9bmV3IHRpKE5QW2ldLGMpLGY9Yy51bmlmb3JtcyxwPUV1ZVtuXS0xLGQ9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipwKToyKk1hdGguUEkvKDIqazMtMSksZz1vL2QsXz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IodSpnKTprMztfPmszJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke199IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gJHtrM31gKTtsZXQgeT1bXSx4PTA7Zm9yKGxldCBQPTA7UDxrMzsrK1Ape2xldCBrPVAvZyxPPU1hdGguZXhwKC1rKmsvMik7eS5wdXNoKE8pLFA9PT0wP3grPU86UDxfJiYoeCs9MipPKX1mb3IobGV0IFA9MDtQPHkubGVuZ3RoO1ArKyl5W1BdPXlbUF0veDtmLmVudk1hcC52YWx1ZT10LnRleHR1cmUsZi5zYW1wbGVzLnZhbHVlPV8sZi53ZWlnaHRzLnZhbHVlPXksZi5sYXRpdHVkaW5hbC52YWx1ZT1hPT09ImxhdGl0dWRpbmFsIixzJiYoZi5wb2xlQXhpcy52YWx1ZT1zKSxmLmRUaGV0YS52YWx1ZT1kLGYubWlwSW50LnZhbHVlPUYwLW47bGV0IGI9RXVlW2ldLFM9MypNYXRoLm1heCgwLCRmLTIqYiksQz0oaT09PTA/MDoyKiRmKSsyKmIqKGk+RjAtcTM/aS1GMCtxMzowKTtJVihyLFMsQywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChyKSxsLnJlbmRlcihoLGh1dCl9fTtmdW5jdGlvbiAkZHIoKXtsZXQgZT1bXSx0PVtdLHI9W10sbj1GMDtmb3IobGV0IGk9MDtpPEhmZTtpKyspe2xldCBvPU1hdGgucG93KDIsbik7dC5wdXNoKG8pO2xldCBhPTEvbztpPkYwLXEzP2E9QmZlW2ktRjArcTMtMV06aT09PTAmJihhPTApLHIucHVzaChhKTtsZXQgcz0xLyhvLTEpLGw9LXMvMixjPTErcy8yLHU9W2wsbCxjLGwsYyxjLGwsbCxjLGMsbCxjXSxoPTYsZj02LHA9MyxkPTIsZz0xLF89bmV3IEZsb2F0MzJBcnJheShwKmYqaCkseT1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSx4PW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpO2ZvcihsZXQgUz0wO1M8aDtTKyspe2xldCBDPVMlMyoyLzMtMSxQPVM+Mj8wOi0xLGs9W0MsUCwwLEMrMi8zLFAsMCxDKzIvMyxQKzEsMCxDLFAsMCxDKzIvMyxQKzEsMCxDLFArMSwwXTtfLnNldChrLHAqZipTKSx5LnNldCh1LGQqZipTKTtsZXQgTz1bUyxTLFMsUyxTLFNdO3guc2V0KE8sZypmKlMpfWxldCBiPW5ldyBQZTtiLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShfLHApKSxiLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKZSh5LGQpKSxiLnNldEF0dHJpYnV0ZSgiZmFjZUluZGV4IixuZXcgSmUoeCxnKSksZS5wdXNoKGIpLG4+cTMmJm4tLX1yZXR1cm57X2xvZFBsYW5lczplLF9zaXplTG9kczp0LF9zaWdtYXM6cn19ZnVuY3Rpb24gQXVlKGUpe2xldCB0PW5ldyB1cygzKiRmLDMqJGYsZSk7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPXhNLHQudGV4dHVyZS5uYW1lPSJQTVJFTS5jdWJlVXYiLHQuc2Npc3NvclRlc3Q9ITAsdH1mdW5jdGlvbiBJVihlLHQscixuLGkpe2Uudmlld3BvcnQuc2V0KHQscixuLGkpLGUuc2Npc3Nvci5zZXQodCxyLG4saSl9ZnVuY3Rpb24gS2RyKGUpe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoZSkscj1uZXcgaigwLDEsMCk7cmV0dXJuIG5ldyBVMCh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOmV9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTpyfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBQdWUoKXtsZXQgZT1uZXcgTHQoMSwxKTtyZXR1cm4gbmV3IFUwKHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOk5odCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIEl1ZSgpe3JldHVybiBuZXcgVTAoe25hbWU6IkN1YmVtYXBUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sZmxpcEVudk1hcDp7dmFsdWU6LTF9fSx2ZXJ0ZXhTaGFkZXI6Tmh0KCksZnJhZ21lbnRTaGFkZXI6YAoKCQkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCgkJCXZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uOwoKCQkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7CgoJCQl9CgkJYCxibGVuZGluZzokZCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIE5odCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiBaZHIoZSl7bGV0IHQ9bmV3IFdlYWtNYXAscj1udWxsO2Z1bmN0aW9uIG4ocyl7aWYocyYmcy5pc1RleHR1cmUpe2xldCBsPXMubWFwcGluZyxjPWw9PT1ZUHx8bD09PWpQLHU9bD09PW54fHxsPT09aXg7aWYoY3x8dSlpZihzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmcy5uZWVkc1BNUkVNVXBkYXRlPT09ITApe3MubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgaD10LmdldChzKTtyZXR1cm4gcj09PW51bGwmJihyPW5ldyBlNihlKSksaD1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzLGgpOnIuZnJvbUN1YmVtYXAocyxoKSx0LnNldChzLGgpLGgudGV4dHVyZX1lbHNle2lmKHQuaGFzKHMpKXJldHVybiB0LmdldChzKS50ZXh0dXJlO3tsZXQgaD1zLmltYWdlO2lmKGMmJmgmJmguaGVpZ2h0PjB8fHUmJmgmJmkoaCkpe3I9PT1udWxsJiYocj1uZXcgZTYoZSkpO2xldCBmPWM/ci5mcm9tRXF1aXJlY3Rhbmd1bGFyKHMpOnIuZnJvbUN1YmVtYXAocyk7cmV0dXJuIHQuc2V0KHMsZikscy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxmLnRleHR1cmV9ZWxzZSByZXR1cm4gbnVsbH19fXJldHVybiBzfWZ1bmN0aW9uIGkocyl7bGV0IGw9MCxjPTY7Zm9yKGxldCB1PTA7dTxjO3UrKylzW3VdIT09dm9pZCAwJiZsKys7cmV0dXJuIGw9PT1jfWZ1bmN0aW9uIG8ocyl7bGV0IGw9cy50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTtjIT09dm9pZCAwJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfWZ1bmN0aW9uIGEoKXt0PW5ldyBXZWFrTWFwLHIhPT1udWxsJiYoci5kaXNwb3NlKCkscj1udWxsKX1yZXR1cm57Z2V0Om4sZGlzcG9zZTphfX1mdW5jdGlvbiBKZHIoZSl7bGV0IHQ9e307ZnVuY3Rpb24gcihuKXtpZih0W25dIT09dm9pZCAwKXJldHVybiB0W25dO2xldCBpO3N3aXRjaChuKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjppPWUuZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8ZS5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDppPWUuZ2V0RXh0ZW5zaW9uKG4pfXJldHVybiB0W25dPWksaX1yZXR1cm57aGFzOmZ1bmN0aW9uKG4pe3JldHVybiByKG4pIT09bnVsbH0saW5pdDpmdW5jdGlvbihuKXtuLmlzV2ViR0wyP3IoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKToocigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHIoIk9FU190ZXh0dXJlX2Zsb2F0IikscigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikscigiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikscigiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLHIoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikscigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxyKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxyKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxyKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKG4pe2xldCBpPXIobik7cmV0dXJuIGk9PT1udWxsJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrbisiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLGl9fX1mdW5jdGlvbiBRZHIoZSx0LHIsbil7bGV0IGk9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBhKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGQgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tkXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxkZWxldGUgaVtmLmlkXTtsZXQgcD1vLmdldChmKTtwJiYodC5yZW1vdmUocCksby5kZWxldGUoZikpLG4ucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LHIubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGlbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksaVtmLmlkXT0hMCxyLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIGYpdC51cGRhdGUoZltkXSwzNDk2Mik7bGV0IHA9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBkIGluIHApe2xldCBnPXBbZF07Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXQudXBkYXRlKGdbX10sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLHA9aC5pbmRleCxkPWguYXR0cmlidXRlcy5wb3NpdGlvbixnPTA7aWYocCE9PW51bGwpe2xldCB4PXAuYXJyYXk7Zz1wLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aDtiPFM7Yis9Myl7bGV0IEM9eFtiKzBdLFA9eFtiKzFdLGs9eFtiKzJdO2YucHVzaChDLFAsUCxrLGssQyl9fWVsc2V7bGV0IHg9ZC5hcnJheTtnPWQudmVyc2lvbjtmb3IobGV0IGI9MCxTPXgubGVuZ3RoLzMtMTtiPFM7Yis9Myl7bGV0IEM9YiswLFA9YisxLGs9YisyO2YucHVzaChDLFAsUCxrLGssQyl9fWxldCBfPW5ldyhEZmUoZik/SzM6JDMpKGYsMSk7Xy52ZXJzaW9uPWc7bGV0IHk9by5nZXQoaCk7eSYmdC5yZW1vdmUoeSksby5zZXQoaCxfKX1mdW5jdGlvbiB1KGgpe2xldCBmPW8uZ2V0KGgpO2lmKGYpe2xldCBwPWguaW5kZXg7cCE9PW51bGwmJmYudmVyc2lvbjxwLnZlcnNpb24mJmMoaCl9ZWxzZSBjKGgpO3JldHVybiBvLmdldChoKX1yZXR1cm57Z2V0OnMsdXBkYXRlOmwsZ2V0V2lyZWZyYW1lQXR0cmlidXRlOnV9fWZ1bmN0aW9uIHRtcihlLHQscixuKXtsZXQgaT1uLmlzV2ViR0wyLG87ZnVuY3Rpb24gYShmKXtvPWZ9bGV0IHMsbDtmdW5jdGlvbiBjKGYpe3M9Zi50eXBlLGw9Zi5ieXRlc1BlckVsZW1lbnR9ZnVuY3Rpb24gdShmLHApe2UuZHJhd0VsZW1lbnRzKG8scCxzLGYqbCksci51cGRhdGUocCxvLDEpfWZ1bmN0aW9uIGgoZixwLGQpe2lmKGQ9PT0wKXJldHVybjtsZXQgZyxfO2lmKGkpZz1lLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihnPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksXz0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLGc9PT1udWxsKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWdbX10obyxwLHMsZipsLGQpLHIudXBkYXRlKHAsbyxkKX10aGlzLnNldE1vZGU9YSx0aGlzLnNldEluZGV4PWMsdGhpcy5yZW5kZXI9dSx0aGlzLnJlbmRlckluc3RhbmNlcz1ofWZ1bmN0aW9uIGVtcihlKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LHI9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBuKG8sYSxzKXtzd2l0Y2goci5jYWxscysrLGEpe2Nhc2UgNDpyLnRyaWFuZ2xlcys9cyooby8zKTticmVhaztjYXNlIDE6ci5saW5lcys9cyooby8yKTticmVhaztjYXNlIDM6ci5saW5lcys9cyooby0xKTticmVhaztjYXNlIDI6ci5saW5lcys9cypvO2JyZWFrO2Nhc2UgMDpyLnBvaW50cys9cypvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLGEpO2JyZWFrfX1mdW5jdGlvbiBpKCl7ci5mcmFtZSsrLHIuY2FsbHM9MCxyLnRyaWFuZ2xlcz0wLHIucG9pbnRzPTAsci5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6cixwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDppLHVwZGF0ZTpufX12YXIgdE09Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07dE0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHJtcihlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gbm1yKGUsdCl7cmV0dXJuIE1hdGguYWJzKHRbMV0pLU1hdGguYWJzKGVbMV0pfWZ1bmN0aW9uIEx1ZShlLHQpe2xldCByPTEsbj10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7biBpbnN0YW5jZW9mIEludDhBcnJheT9yPTEyNzpuIGluc3RhbmNlb2YgSW50MTZBcnJheT9yPTMyNzY3Om4gaW5zdGFuY2VvZiBJbnQzMkFycmF5P3I9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixuKSxlLmRpdmlkZVNjYWxhcihyKX1mdW5jdGlvbiBpbXIoZSx0LHIpe2xldCBuPXt9LGk9bmV3IEZsb2F0MzJBcnJheSg4KSxvPW5ldyBXZWFrTWFwLGE9bmV3IGoscz1bXTtmb3IobGV0IGM9MDtjPDg7YysrKXNbY109W2MsMF07ZnVuY3Rpb24gbChjLHUsaCxmKXtsZXQgcD1jLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZih0LmlzV2ViR0wyPT09ITApe2xldCBkPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aCxnPW8uZ2V0KHUpO2lmKGc9PT12b2lkIDB8fGcuY291bnQhPT1kKXtsZXQgTD1mdW5jdGlvbigpe0IuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9O2chPT12b2lkIDAmJmcudGV4dHVyZS5kaXNwb3NlKCk7bGV0IHg9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsIT09dm9pZCAwLGI9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sUz11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLEM9dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmNvdW50LFA9eD09PSEwPzI6MSxrPUMqUCxPPTE7az50Lm1heFRleHR1cmVTaXplJiYoTz1NYXRoLmNlaWwoay90Lm1heFRleHR1cmVTaXplKSxrPXQubWF4VGV4dHVyZVNpemUpO2xldCBEPW5ldyBGbG9hdDMyQXJyYXkoaypPKjQqZCksQj1uZXcgdE0oRCxrLE8sZCk7Qi5mb3JtYXQ9UW8sQi50eXBlPWpkLEIubmVlZHNVcGRhdGU9ITA7bGV0IEk9UCo0O2ZvcihsZXQgUj0wO1I8ZDtSKyspe2xldCBGPWJbUl0sej1TW1JdLFU9aypPKjQqUjtmb3IobGV0IFc9MDtXPEYuY291bnQ7VysrKXthLmZyb21CdWZmZXJBdHRyaWJ1dGUoRixXKSxGLm5vcm1hbGl6ZWQ9PT0hMCYmTHVlKGEsRik7bGV0IFo9VypJO0RbVStaKzBdPWEueCxEW1UrWisxXT1hLnksRFtVK1orMl09YS56LERbVStaKzNdPTAseD09PSEwJiYoYS5mcm9tQnVmZmVyQXR0cmlidXRlKHosVyksei5ub3JtYWxpemVkPT09ITAmJkx1ZShhLHopLERbVStaKzRdPWEueCxEW1UrWis1XT1hLnksRFtVK1orNl09YS56LERbVStaKzddPTApfX1nPXtjb3VudDpkLHRleHR1cmU6QixzaXplOm5ldyBMdChrLE8pfSxvLnNldCh1LGcpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsTCl9bGV0IF89MDtmb3IobGV0IHg9MDt4PHAubGVuZ3RoO3grKylfKz1wW3hdO2xldCB5PXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLV87Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIseSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmUiLGcudGV4dHVyZSxyKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUoZSwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLGcuc2l6ZSl9ZWxzZXtsZXQgZD1wPT09dm9pZCAwPzA6cC5sZW5ndGgsZz1uW3UuaWRdO2lmKGc9PT12b2lkIDB8fGcubGVuZ3RoIT09ZCl7Zz1bXTtmb3IobGV0IFM9MDtTPGQ7UysrKWdbU109W1MsMF07blt1LmlkXT1nfWZvcihsZXQgUz0wO1M8ZDtTKyspe2xldCBDPWdbU107Q1swXT1TLENbMV09cFtTXX1nLnNvcnQobm1yKTtmb3IobGV0IFM9MDtTPDg7UysrKVM8ZCYmZ1tTXVsxXT8oc1tTXVswXT1nW1NdWzBdLHNbU11bMV09Z1tTXVsxXSk6KHNbU11bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsc1tTXVsxXT0wKTtzLnNvcnQocm1yKTtsZXQgXz11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix5PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCx4PTA7Zm9yKGxldCBTPTA7Uzw4O1MrKyl7bGV0IEM9c1tTXSxQPUNbMF0saz1DWzFdO1AhPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmaz8oXyYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSE9PV9bUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyxfW1BdKSx5JiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpIT09eVtQXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTLHlbUF0pLGlbU109ayx4Kz1rKTooXyYmdS5oYXNBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKT09PSEwJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MpLHkmJnUuaGFzQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSxpW1NdPTApfWxldCBiPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsYiksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaSl9fXJldHVybnt1cGRhdGU6bH19ZnVuY3Rpb24gb21yKGUsdCxyLG4pe2xldCBpPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG8obCl7bGV0IGM9bi5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gaS5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksaS5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBhKCl7aT1uZXcgV2Vha01hcH1mdW5jdGlvbiBzKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksci5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmci5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOm8sZGlzcG9zZTphfX12YXIgcjY9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDpyLGhlaWdodDpuLGRlcHRoOml9LHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMud3JhcFI9Sm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07cjYucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgVmZlPW5ldyB2aSxVZmU9bmV3IHRNLHFmZT1uZXcgcjYsR2ZlPW5ldyBIMCxrdWU9W10sUnVlPVtdLE51ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxEdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxPdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBiTShlLHQscil7bGV0IG49ZVswXTtpZihuPD0wfHxuPjApcmV0dXJuIGU7bGV0IGk9dCpyLG89a3VlW2ldO2lmKG89PT12b2lkIDAmJihvPW5ldyBGbG9hdDMyQXJyYXkoaSksa3VlW2ldPW8pLHQhPT0wKXtuLnRvQXJyYXkobywwKTtmb3IobGV0IGE9MSxzPTA7YSE9PXQ7KythKXMrPXIsZVthXS50b0FycmF5KG8scyl9cmV0dXJuIG99ZnVuY3Rpb24gaHMoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDYShlLHQpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllW3JdPXRbcl19ZnVuY3Rpb24gS1UoZSx0KXtsZXQgcj1SdWVbdF07cj09PXZvaWQgMCYmKHI9bmV3IEludDMyQXJyYXkodCksUnVlW3RdPXIpO2ZvcihsZXQgbj0wO24hPT10OysrbilyW25dPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiByfWZ1bmN0aW9uIGFtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiBzbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueSkmJihlLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksclswXT10LngsclsxXT10LnkpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiBsbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoclswXSE9PXQueHx8clsxXSE9PXQueXx8clsyXSE9PXQueikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56KTtlbHNlIGlmKHQuciE9PXZvaWQgMCkoclswXSE9PXQucnx8clsxXSE9PXQuZ3x8clsyXSE9PXQuYikmJihlLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLHJbMF09dC5yLHJbMV09dC5nLHJbMl09dC5iKTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTNmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gY21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10Lnp8fHJbM10hPT10LncpJiYoZS51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksclswXT10LngsclsxXT10LnksclsyXT10LnosclszXT10LncpO2Vsc2V7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxDYShyLHQpfX1mdW5jdGlvbiB1bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtPdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsT3VlKSxDYShyLG4pfX1mdW5jdGlvbiBobXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtEdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsRHVlKSxDYShyLG4pfX1mdW5jdGlvbiBmbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlLG49dC5lbGVtZW50cztpZihuPT09dm9pZCAwKXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLENhKHIsdCl9ZWxzZXtpZihocyhyLG4pKXJldHVybjtOdWUuc2V0KG4pLGUudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsTnVlKSxDYShyLG4pfX1mdW5jdGlvbiBwbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gZG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBtbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIGdtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTRpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gX21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksclswXT10KX1mdW5jdGlvbiB5bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB2bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiB4bXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBibXIoZSx0LHIpe2xldCBuPXRoaXMuY2FjaGUsaT1yLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtuWzBdIT09aSYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcixpKSxuWzBdPWkpLHIuc2FmZVNldFRleHR1cmUyRCh0fHxWZmUsaSl9ZnVuY3Rpb24gd21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUzRCh0fHxxZmUsaSl9ZnVuY3Rpb24gU21yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxHZmUsaSl9ZnVuY3Rpb24gTW1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNldFRleHR1cmUyREFycmF5KHR8fFVmZSxpKX1mdW5jdGlvbiBFbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gYW1yO2Nhc2UgMzU2NjQ6cmV0dXJuIHNtcjtjYXNlIDM1NjY1OnJldHVybiBsbXI7Y2FzZSAzNTY2NjpyZXR1cm4gY21yO2Nhc2UgMzU2NzQ6cmV0dXJuIHVtcjtjYXNlIDM1Njc1OnJldHVybiBobXI7Y2FzZSAzNTY3NjpyZXR1cm4gZm1yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBwbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBkbXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBtbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBnbXI7Y2FzZSA1MTI1OnJldHVybiBfbXI7Y2FzZSAzNjI5NDpyZXR1cm4geW1yO2Nhc2UgMzYyOTU6cmV0dXJuIHZtcjtjYXNlIDM2Mjk2OnJldHVybiB4bXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBibXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIHdtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBTbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gTW1yfX1mdW5jdGlvbiBUbXIoZSx0KXtlLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIENtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDIpO2UudW5pZm9ybTJmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gQW1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMyk7ZS51bmlmb3JtM2Z2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBQbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm00ZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIEltcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDQpO2UudW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gTG1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsOSk7ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBrbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwxNik7ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxyKX1mdW5jdGlvbiBSbXIoZSx0KXtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIE5tcihlLHQpe2UudW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gRG1yKGUsdCl7ZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBPbXIoZSx0KXtlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHptcihlLHQpe2UudW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEZtcihlLHQpe2UudW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJtcihlLHQpe2UudW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEhtcihlLHQpe2UudW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFZtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmUyRCh0W29dfHxWZmUsaVtvXSl9ZnVuY3Rpb24gVW1yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPUtVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlM0QodFtvXXx8cWZlLGlbb10pfWZ1bmN0aW9uIHFtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT1LVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fEdmZSxpW29dKX1mdW5jdGlvbiBHbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9S1UocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNldFRleHR1cmUyREFycmF5KHRbb118fFVmZSxpW29dKX1mdW5jdGlvbiBXbXIoZSl7c3dpdGNoKGUpe2Nhc2UgNTEyNjpyZXR1cm4gVG1yO2Nhc2UgMzU2NjQ6cmV0dXJuIENtcjtjYXNlIDM1NjY1OnJldHVybiBBbXI7Y2FzZSAzNTY2NjpyZXR1cm4gUG1yO2Nhc2UgMzU2NzQ6cmV0dXJuIEltcjtjYXNlIDM1Njc1OnJldHVybiBMbXI7Y2FzZSAzNTY3NjpyZXR1cm4ga21yO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBSbXI7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiBObXI7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBEbXI7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPbXI7Y2FzZSA1MTI1OnJldHVybiB6bXI7Y2FzZSAzNjI5NDpyZXR1cm4gRm1yO2Nhc2UgMzYyOTU6cmV0dXJuIEJtcjtjYXNlIDM2Mjk2OnJldHVybiBIbXI7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBWbXI7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIFVtcjtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBxbXI7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gR21yfX1mdW5jdGlvbiBZbXIoZSx0LHIpe3RoaXMuaWQ9ZSx0aGlzLmFkZHI9cix0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9RW1yKHQudHlwZSl9ZnVuY3Rpb24gV2ZlKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9V21yKHQudHlwZSl9V2ZlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihlKXtsZXQgdD10aGlzLmNhY2hlO2UgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09ZS5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgpKSxDYSh0LGUpfTtmdW5jdGlvbiBZZmUoZSl7dGhpcy5pZD1lLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fVlmZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIpe2xldCBuPXRoaXMuc2VxO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT1uW2ldO2Euc2V0VmFsdWUoZSx0W2EuaWRdLHIpfX07dmFyIHB1dD0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24genVlKGUsdCl7ZS5zZXEucHVzaCh0KSxlLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGptcihlLHQscil7bGV0IG49ZS5uYW1lLGk9bi5sZW5ndGg7Zm9yKHB1dC5sYXN0SW5kZXg9MDs7KXtsZXQgbz1wdXQuZXhlYyhuKSxhPXB1dC5sYXN0SW5kZXgscz1vWzFdLGw9b1syXT09PSJdIixjPW9bM107aWYobCYmKHM9c3wwKSxjPT09dm9pZCAwfHxjPT09IlsiJiZhKzI9PT1pKXt6dWUocixjPT09dm9pZCAwP25ldyBZbXIocyxlLHQpOm5ldyBXZmUocyxlLHQpKTticmVha31lbHNle2xldCBoPXIubWFwW3NdO2g9PT12b2lkIDAmJihoPW5ldyBZZmUocyksenVlKHIsaCkpLHI9aH19fWZ1bmN0aW9uIEIwKGUsdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IHI9ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgbj0wO248cjsrK24pe2xldCBpPWUuZ2V0QWN0aXZlVW5pZm9ybSh0LG4pLG89ZS5nZXRVbmlmb3JtTG9jYXRpb24odCxpLm5hbWUpO2ptcihpLG8sdGhpcyl9fUIwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihlLHQscixuKXtsZXQgaT10aGlzLm1hcFt0XTtpIT09dm9pZCAwJiZpLnNldFZhbHVlKGUscixuKX07QjAucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10W3JdO24hPT12b2lkIDAmJnRoaXMuc2V0VmFsdWUoZSxyLG4pfTtCMC51cGxvYWQ9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpIT09bzsrK2kpe2xldCBhPXRbaV0scz1yW2EuaWRdO3MubmVlZHNVcGRhdGUhPT0hMSYmYS5zZXRWYWx1ZShlLHMudmFsdWUsbil9fTtCMC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24oZSx0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPWUubGVuZ3RoO24hPT1pOysrbil7bGV0IG89ZVtuXTtvLmlkIGluIHQmJnIucHVzaChvKX1yZXR1cm4gcn07ZnVuY3Rpb24gRnVlKGUsdCxyKXtsZXQgbj1lLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gZS5zaGFkZXJTb3VyY2UobixyKSxlLmNvbXBpbGVTaGFkZXIobiksbn12YXIgWG1yPTA7ZnVuY3Rpb24gJG1yKGUpe2xldCB0PWUuc3BsaXQoYApgKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXIrMSsiOiAiK3Rbcl07cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIEttcihlKXtzd2l0Y2goZSl7Y2FzZSBRZDpyZXR1cm5bIkxpbmVhciIsIiggdmFsdWUgKSJdO2Nhc2UgV246cmV0dXJuWyJzUkdCIiwiKCB2YWx1ZSApIl07ZGVmYXVsdDpyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIGVuY29kaW5nOiIsZSksWyJMaW5lYXIiLCIoIHZhbHVlICkiXX19ZnVuY3Rpb24gQnVlKGUsdCxyKXtsZXQgbj1lLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxpPWUuZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIG4mJmk9PT0iIj8iIjpyLnRvVXBwZXJDYXNlKCkrYAoKYCtpK2AKCmArJG1yKGUuZ2V0U2hhZGVyU291cmNlKHQpKX1mdW5jdGlvbiBabXIoZSx0KXtsZXQgcj1LbXIodCk7cmV0dXJuInZlYzQgIitlKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrclswXStyWzFdKyI7IH0ifWZ1bmN0aW9uIEptcihlLHQpe2xldCByO3N3aXRjaCh0KXtjYXNlIGFmZTpyPSJMaW5lYXIiO2JyZWFrO2Nhc2Ugc2ZlOnI9IlJlaW5oYXJkIjticmVhaztjYXNlIGxmZTpyPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgY2ZlOnI9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgdWZlOnI9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxyPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrZSsiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIityKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gUW1yKGUpe3JldHVybltlLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxlLmVudk1hcEN1YmVVVnx8ZS5idW1wTWFwfHxlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8ZS5jbGVhcmNvYXROb3JtYWxNYXB8fGUuZmxhdFNoYWRpbmd8fGUuc2hhZGVySUQ9PT0icGh5c2ljYWwiPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKGUuZXh0ZW5zaW9uRnJhZ0RlcHRofHxlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixlLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwfHxlLnRyYW5zbWlzc2lvbikmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoSFApLmpvaW4oYApgKX1mdW5jdGlvbiB0Z3IoZSl7bGV0IHQ9W107Zm9yKGxldCByIGluIGUpe2xldCBuPWVbcl07biE9PSExJiZ0LnB1c2goIiNkZWZpbmUgIityKyIgIituKX1yZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24gZWdyKGUsdCl7bGV0IHI9e30sbj1lLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IG89ZS5nZXRBY3RpdmVBdHRyaWIodCxpKSxhPW8ubmFtZSxzPTE7by50eXBlPT09MzU2NzQmJihzPTIpLG8udHlwZT09PTM1Njc1JiYocz0zKSxvLnR5cGU9PT0zNTY3NiYmKHM9NCksclthXT17dHlwZTpvLnR5cGUsbG9jYXRpb246ZS5nZXRBdHRyaWJMb2NhdGlvbih0LGEpLGxvY2F0aW9uU2l6ZTpzfX1yZXR1cm4gcn1mdW5jdGlvbiBIUChlKXtyZXR1cm4gZSE9PSIifWZ1bmN0aW9uIEh1ZShlLHQpe3JldHVybiBlLnJlcGxhY2UoL05VTV9ESVJfTElHSFRTL2csdC5udW1EaXJMaWdodHMpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUUy9nLHQubnVtU3BvdExpZ2h0cykucmVwbGFjZSgvTlVNX1JFQ1RfQVJFQV9MSUdIVFMvZyx0Lm51bVJlY3RBcmVhTGlnaHRzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRTL2csdC5udW1Qb2ludExpZ2h0cykucmVwbGFjZSgvTlVNX0hFTUlfTElHSFRTL2csdC5udW1IZW1pTGlnaHRzKS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUX1NIQURPV1MvZyx0Lm51bURpckxpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRfU0hBRE9XUy9nLHQubnVtU3BvdExpZ2h0U2hhZG93cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVBvaW50TGlnaHRTaGFkb3dzKX1mdW5jdGlvbiBWdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcykucmVwbGFjZSgvVU5JT05fQ0xJUFBJTkdfUExBTkVTL2csdC5udW1DbGlwcGluZ1BsYW5lcy10Lm51bUNsaXBJbnRlcnNlY3Rpb24pfXZhciByZ3I9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBKdXQoZSl7cmV0dXJuIGUucmVwbGFjZShyZ3IsbmdyKX1mdW5jdGlvbiBuZ3IoZSx0KXtsZXQgcj1oclt0XTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gSnV0KHIpfXZhciBpZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxvZ3I9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBVdWUoZSl7cmV0dXJuIGUucmVwbGFjZShvZ3IsamZlKS5yZXBsYWNlKGlncixhZ3IpfWZ1bmN0aW9uIGFncihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksamZlKGUsdCxyLG4pfWZ1bmN0aW9uIGpmZShlLHQscixuKXtsZXQgaT0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChyKTtvKyspaSs9bi5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIGl9ZnVuY3Rpb24gcXVlKGUpe2xldCB0PSJwcmVjaXNpb24gIitlLnByZWNpc2lvbitgIGZsb2F0OwpwcmVjaXNpb24gYCtlLnByZWNpc2lvbisiIGludDsiO3JldHVybiBlLnByZWNpc2lvbj09PSJoaWdocCI/dCs9YAojZGVmaW5lIEhJR0hfUFJFQ0lTSU9OYDplLnByZWNpc2lvbj09PSJtZWRpdW1wIj90Kz1gCiNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibG93cCImJih0Kz1gCiNkZWZpbmUgTE9XX1BSRUNJU0lPTmApLHR9ZnVuY3Rpb24gc2dyKGUpe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIGUuc2hhZG93TWFwVHlwZT09PUNodD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOmUuc2hhZG93TWFwVHlwZT09PUZoZT90PSJTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCI6ZS5zaGFkb3dNYXBUeXBlPT09RjMmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fWZ1bmN0aW9uIGxncihlKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuZW52TWFwTW9kZSl7Y2FzZSBueDpjYXNlIGl4OnQ9IkVOVk1BUF9UWVBFX0NVQkUiO2JyZWFrO2Nhc2UgeE06Y2FzZSB6Njp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBjZ3IoZSl7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2UgaXg6Y2FzZSB6Njp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiB1Z3IoZSl7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihlLmVudk1hcClzd2l0Y2goZS5jb21iaW5lKXtjYXNlIE82OnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSBpZmU6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSBvZmU6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gaGdyKGUsdCxyLG4pe2xldCBpPWUuZ2V0Q29udGV4dCgpLG89ci5kZWZpbmVzLGE9ci52ZXJ0ZXhTaGFkZXIscz1yLmZyYWdtZW50U2hhZGVyLGw9c2dyKHIpLGM9bGdyKHIpLHU9Y2dyKHIpLGg9dWdyKHIpLGY9ci5pc1dlYkdMMj8iIjpRbXIocikscD10Z3IobyksZD1pLmNyZWF0ZVByb2dyYW0oKSxnLF8seT1yLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK3IuZ2xzbFZlcnNpb24rYApgOiIiO3IuaXNSYXdTaGFkZXJNYXRlcmlhbD8oZz1bcF0uZmlsdGVyKEhQKS5qb2luKGAKYCksZy5sZW5ndGg+MCYmKGcrPWAKYCksXz1bZixwXS5maWx0ZXIoSFApLmpvaW4oYApgKSxfLmxlbmd0aD4wJiYoXys9YApgKSk6KGc9W3F1ZShyKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK3Iuc2hhZGVyTmFtZSxwLHIuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLHIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK3IubWF4Qm9uZXMsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsci5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLHIuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixyLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLHIubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLHIuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLHIuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixyLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsci5kaXNwbGFjZW1lbnRNYXAmJnIuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLHIudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixyLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixyLm1vcnBoTm9ybWFscyYmci5mbGF0U2hhZGluZz09PSExPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLHIubW9ycGhUYXJnZXRzJiZyLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIityLm1vcnBoVGFyZ2V0c0NvdW50OiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCIJYXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiCWF0dHJpYnV0ZSB2ZWMzIGluc3RhbmNlQ29sb3I7IiwiI2VuZGlmIiwiYXR0cmlidXRlIHZlYzMgcG9zaXRpb247IiwiYXR0cmlidXRlIHZlYzMgbm9ybWFsOyIsImF0dHJpYnV0ZSB2ZWMyIHV2OyIsIiNpZmRlZiBVU0VfVEFOR0VOVCIsIglhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIglhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIglhdHRyaWJ1dGUgdmVjMyBjb2xvcjsiLCIjZW5kaWYiLCIjaWYgKCBkZWZpbmVkKCBVU0VfTU9SUEhUQVJHRVRTICkgJiYgISBkZWZpbmVkKCBNT1JQSFRBUkdFVFNfVEVYVFVSRSApICkiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MjsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIgkjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwxOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIgkjZWxzZSIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ1OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIgkJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIgkjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5JbmRleDsiLCIJYXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLGAKYF0uZmlsdGVyKEhQKS5qb2luKGAKYCksXz1bZixxdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLnVzZUZvZyYmci5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsci51c2VGb2cmJnIuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsci5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsci5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrdToiIixyLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixyLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsci5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixyLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixyLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixyLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsci5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsci5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLHIuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsci5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLHIudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLHIudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLHIudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLHIuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9yc3x8ci5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixyLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLHIudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsci51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsci5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLHIuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLHIuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixyLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixyLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixyLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixyLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLHIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmci5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoci5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxyLmVudk1hcCkmJnIucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixyLnRvbmVNYXBwaW5nIT09S2Q/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixyLnRvbmVNYXBwaW5nIT09S2Q/aHIudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixyLnRvbmVNYXBwaW5nIT09S2Q/Sm1yKCJ0b25lTWFwcGluZyIsci50b25lTWFwcGluZyk6IiIsci5kaXRoZXJpbmc/IiNkZWZpbmUgRElUSEVSSU5HIjoiIixyLmFscGhhV3JpdGU/IiI6IiNkZWZpbmUgT1BBUVVFIixoci5lbmNvZGluZ3NfcGFyc19mcmFnbWVudCxabXIoImxpbmVhclRvT3V0cHV0VGV4ZWwiLHIub3V0cHV0RW5jb2RpbmcpLHIuZGVwdGhQYWNraW5nPyIjZGVmaW5lIERFUFRIX1BBQ0tJTkcgIityLmRlcHRoUGFja2luZzoiIixgCmBdLmZpbHRlcihIUCkuam9pbihgCmApKSxhPUp1dChhKSxhPUh1ZShhLHIpLGE9VnVlKGEscikscz1KdXQocykscz1IdWUocyxyKSxzPVZ1ZShzLHIpLGE9VXVlKGEpLHM9VXVlKHMpLHIuaXNXZWJHTDImJnIuaXNSYXdTaGFkZXJNYXRlcmlhbCE9PSEwJiYoeT1gI3ZlcnNpb24gMzAwIGVzCmAsZz1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKGAKYCkrYApgK2csXz1bIiNkZWZpbmUgdmFyeWluZyBpbiIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsci5nbHNsVmVyc2lvbj09PUt1dD8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCtfKTtsZXQgeD15K2crYSxiPXkrXytzLFM9RnVlKGksMzU2MzMseCksQz1GdWUoaSwzNTYzMixiKTtpZihpLmF0dGFjaFNoYWRlcihkLFMpLGkuYXR0YWNoU2hhZGVyKGQsQyksci5pbmRleDBBdHRyaWJ1dGVOYW1lIT09dm9pZCAwP2kuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCxyLmluZGV4MEF0dHJpYnV0ZU5hbWUpOnIubW9ycGhUYXJnZXRzPT09ITAmJmkuYmluZEF0dHJpYkxvY2F0aW9uKGQsMCwicG9zaXRpb24iKSxpLmxpbmtQcm9ncmFtKGQpLGUuZGVidWcuY2hlY2tTaGFkZXJFcnJvcnMpe2xldCBPPWkuZ2V0UHJvZ3JhbUluZm9Mb2coZCkudHJpbSgpLEQ9aS5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSxCPWkuZ2V0U2hhZGVySW5mb0xvZyhDKS50cmltKCksST0hMCxMPSEwO2lmKGkuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE0KT09PSExKXtJPSExO2xldCBSPUJ1ZShpLFMsInZlcnRleCIpLEY9QnVlKGksQywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK2kuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIraS5nZXRQcm9ncmFtUGFyYW1ldGVyKGQsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArTytgCmArUitgCmArRil9ZWxzZSBPIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixPKTooRD09PSIifHxCPT09IiIpJiYoTD0hMSk7TCYmKHRoaXMuZGlhZ25vc3RpY3M9e3J1bm5hYmxlOkkscHJvZ3JhbUxvZzpPLHZlcnRleFNoYWRlcjp7bG9nOkQscHJlZml4Omd9LGZyYWdtZW50U2hhZGVyOntsb2c6QixwcmVmaXg6X319KX1pLmRlbGV0ZVNoYWRlcihTKSxpLmRlbGV0ZVNoYWRlcihDKTtsZXQgUDt0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIFA9PT12b2lkIDAmJihQPW5ldyBCMChpLGQpKSxQfTtsZXQgaztyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGs9PT12b2lkIDAmJihrPWVncihpLGQpKSxrfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtuLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksaS5kZWxldGVQcm9ncmFtKGQpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1yLnNoYWRlck5hbWUsdGhpcy5pZD1YbXIrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09ZCx0aGlzLnZlcnRleFNoYWRlcj1TLHRoaXMuZnJhZ21lbnRTaGFkZXI9Qyx0aGlzfXZhciBmZ3I9MCxRdXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCByPXQudmVydGV4U2hhZGVyLG49dC5mcmFnbWVudFNoYWRlcixpPXRoaXMuX2dldFNoYWRlclN0YWdlKHIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UobiksYT10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiBhLmhhcyhpKT09PSExJiYoYS5hZGQoaSksaS51c2VkVGltZXMrKyksYS5oYXMobyk9PT0hMSYmKGEuYWRkKG8pLG8udXNlZFRpbWVzKyspLHRoaXN9cmVtb3ZlKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZS5nZXQodCk7Zm9yKGxldCBuIG9mIHIpbi51c2VkVGltZXMtLSxuLnVzZWRUaW1lcz09PTAmJnRoaXMuc2hhZGVyQ2FjaGUuZGVsZXRlKG4pO3JldHVybiB0aGlzLm1hdGVyaWFsQ2FjaGUuZGVsZXRlKHQpLHRoaXN9Z2V0VmVydGV4U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQudmVydGV4U2hhZGVyKS5pZH1nZXRGcmFnbWVudFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LmZyYWdtZW50U2hhZGVyKS5pZH1kaXNwb3NlKCl7dGhpcy5zaGFkZXJDYWNoZS5jbGVhcigpLHRoaXMubWF0ZXJpYWxDYWNoZS5jbGVhcigpfV9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpe2xldCByPXRoaXMubWF0ZXJpYWxDYWNoZTtyZXR1cm4gci5oYXModCk9PT0hMSYmci5zZXQodCxuZXcgU2V0KSxyLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IHI9dGhpcy5zaGFkZXJDYWNoZTtpZihyLmhhcyh0KT09PSExKXtsZXQgbj1uZXcgdGh0O3Iuc2V0KHQsbil9cmV0dXJuIHIuZ2V0KHQpfX0sdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD1mZ3IrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZnVuY3Rpb24gcGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPW5ldyBYMyxsPW5ldyBRdXQsYz1bXSx1PWkuaXNXZWJHTDIsaD1pLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIsZj1pLmZsb2F0VmVydGV4VGV4dHVyZXMscD1pLm1heFZlcnRleFVuaWZvcm1zLGQ9aS52ZXJ0ZXhUZXh0dXJlcyxnPWkucHJlY2lzaW9uLF89e01lc2hEZXB0aE1hdGVyaWFsOiJkZXB0aCIsTWVzaERpc3RhbmNlTWF0ZXJpYWw6ImRpc3RhbmNlUkdCQSIsTWVzaE5vcm1hbE1hdGVyaWFsOiJub3JtYWwiLE1lc2hCYXNpY01hdGVyaWFsOiJiYXNpYyIsTWVzaExhbWJlcnRNYXRlcmlhbDoibGFtYmVydCIsTWVzaFBob25nTWF0ZXJpYWw6InBob25nIixNZXNoVG9vbk1hdGVyaWFsOiJ0b29uIixNZXNoU3RhbmRhcmRNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hQaHlzaWNhbE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaE1hdGNhcE1hdGVyaWFsOiJtYXRjYXAiLExpbmVCYXNpY01hdGVyaWFsOiJiYXNpYyIsTGluZURhc2hlZE1hdGVyaWFsOiJkYXNoZWQiLFBvaW50c01hdGVyaWFsOiJwb2ludHMiLFNoYWRvd01hdGVyaWFsOiJzaGFkb3ciLFNwcml0ZU1hdGVyaWFsOiJzcHJpdGUifTtmdW5jdGlvbiB5KEkpe2xldCBSPUkuc2tlbGV0b24uYm9uZXM7aWYoZilyZXR1cm4gMTAyNDt7bGV0IHo9TWF0aC5mbG9vcigocC0yMCkvNCksVT1NYXRoLm1pbih6LFIubGVuZ3RoKTtyZXR1cm4gVTxSLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitSLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1UrIi4iKSwwKTpVfX1mdW5jdGlvbiB4KEksTCxSLEYseil7bGV0IFU9Ri5mb2csVz1JLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Ri5lbnZpcm9ubWVudDpudWxsLFo9KEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9yOnQpLmdldChJLmVudk1hcHx8VykscnQ9X1tJLnR5cGVdLG90PXouaXNTa2lubmVkTWVzaD95KHopOjA7SS5wcmVjaXNpb24hPT1udWxsJiYoZz1pLmdldE1heFByZWNpc2lvbihJLnByZWNpc2lvbiksZyE9PUkucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsSS5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixnLCJpbnN0ZWFkLiIpKTtsZXQgc3QsU3QsYnQsTXQ7aWYocnQpe2xldCBYPWFoW3J0XTtzdD1YLnZlcnRleFNoYWRlcixTdD1YLmZyYWdtZW50U2hhZGVyfWVsc2Ugc3Q9SS52ZXJ0ZXhTaGFkZXIsU3Q9SS5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShJKSxidD1sLmdldFZlcnRleFNoYWRlcklEKEkpLE10PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChJKTtsZXQgbHQ9ZS5nZXRSZW5kZXJUYXJnZXQoKSxLdD1JLmFscGhhVGVzdD4wLF90PUkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6cnQsc2hhZGVyTmFtZTpJLnR5cGUsdmVydGV4U2hhZGVyOnN0LGZyYWdtZW50U2hhZGVyOlN0LGRlZmluZXM6SS5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmJ0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6TXQsaXNSYXdTaGFkZXJNYXRlcmlhbDpJLmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMCxnbHNsVmVyc2lvbjpJLmdsc2xWZXJzaW9uLHByZWNpc2lvbjpnLGluc3RhbmNpbmc6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCxpbnN0YW5jaW5nQ29sb3I6ei5pc0luc3RhbmNlZE1lc2g9PT0hMCYmei5pbnN0YW5jZUNvbG9yIT09bnVsbCxzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmQsb3V0cHV0RW5jb2Rpbmc6bHQ9PT1udWxsP2Uub3V0cHV0RW5jb2Rpbmc6bHQuaXNYUlJlbmRlclRhcmdldD09PSEwP2x0LnRleHR1cmUuZW5jb2Rpbmc6UWQsbWFwOiEhSS5tYXAsbWF0Y2FwOiEhSS5tYXRjYXAsZW52TWFwOiEhWixlbnZNYXBNb2RlOlomJloubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFaJiYoWi5tYXBwaW5nPT09eE18fFoubWFwcGluZz09PXo2KSxsaWdodE1hcDohIUkubGlnaHRNYXAsYW9NYXA6ISFJLmFvTWFwLGVtaXNzaXZlTWFwOiEhSS5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhSS5idW1wTWFwLG5vcm1hbE1hcDohIUkubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PUxmZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6SS5ub3JtYWxNYXBUeXBlPT09YXgsZGVjb2RlVmlkZW9UZXh0dXJlOiEhSS5tYXAmJkkubWFwLmlzVmlkZW9UZXh0dXJlPT09ITAmJkkubWFwLmVuY29kaW5nPT09V24sY2xlYXJjb2F0Ol90LGNsZWFyY29hdE1hcDpfdCYmISFJLmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6X3QmJiEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOl90JiYhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIUkuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIUkucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIUkubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhSS5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIUkuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIUkuYWxwaGFNYXAsYWxwaGFUZXN0Okt0LGFscGhhV3JpdGU6SS5hbHBoYVdyaXRlfHxJLnRyYW5zcGFyZW50LGdyYWRpZW50TWFwOiEhSS5ncmFkaWVudE1hcCxzaGVlbjpJLnNoZWVuPjAsc2hlZW5Db2xvck1hcDohIUkuc2hlZW5Db2xvck1hcCxzaGVlblJvdWdobmVzc01hcDohIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdHJhbnNtaXNzaW9uOkkudHJhbnNtaXNzaW9uPjAsdHJhbnNtaXNzaW9uTWFwOiEhSS50cmFuc21pc3Npb25NYXAsdGhpY2tuZXNzTWFwOiEhSS50aGlja25lc3NNYXAsY29tYmluZTpJLmNvbWJpbmUsdmVydGV4VGFuZ2VudHM6ISFJLm5vcm1hbE1hcCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczpJLnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6SS52ZXJ0ZXhDb2xvcnM9PT0hMCYmISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmei5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCx2ZXJ0ZXhVdnM6ISFJLm1hcHx8ISFJLmJ1bXBNYXB8fCEhSS5ub3JtYWxNYXB8fCEhSS5zcGVjdWxhck1hcHx8ISFJLmFscGhhTWFwfHwhIUkuZW1pc3NpdmVNYXB8fCEhSS5yb3VnaG5lc3NNYXB8fCEhSS5tZXRhbG5lc3NNYXB8fCEhSS5jbGVhcmNvYXRNYXB8fCEhSS5jbGVhcmNvYXRSb3VnaG5lc3NNYXB8fCEhSS5jbGVhcmNvYXROb3JtYWxNYXB8fCEhSS5kaXNwbGFjZW1lbnRNYXB8fCEhSS50cmFuc21pc3Npb25NYXB8fCEhSS50aGlja25lc3NNYXB8fCEhSS5zcGVjdWxhckludGVuc2l0eU1hcHx8ISFJLnNwZWN1bGFyQ29sb3JNYXB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXAsdXZzVmVydGV4T25seTohKCEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHxJLnRyYW5zbWlzc2lvbj4wfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHxJLnNoZWVuPjB8fCEhSS5zaGVlbkNvbG9yTWFwfHwhIUkuc2hlZW5Sb3VnaG5lc3NNYXApJiYhIUkuZGlzcGxhY2VtZW50TWFwLGZvZzohIVUsdXNlRm9nOkkuZm9nLGZvZ0V4cDI6VSYmVS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISFJLmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjpJLnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmgsc2tpbm5pbmc6ei5pc1NraW5uZWRNZXNoPT09ITAmJm90PjAsbWF4Qm9uZXM6b3QsdXNlVmVydGV4VGV4dHVyZTpmLG1vcnBoVGFyZ2V0czohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP3ouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLG51bURpckxpZ2h0czpMLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpMLnBvaW50Lmxlbmd0aCxudW1TcG90TGlnaHRzOkwuc3BvdC5sZW5ndGgsbnVtUmVjdEFyZWFMaWdodHM6TC5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpMLmhlbWkubGVuZ3RoLG51bURpckxpZ2h0U2hhZG93czpMLmRpcmVjdGlvbmFsU2hhZG93TWFwLmxlbmd0aCxudW1Qb2ludExpZ2h0U2hhZG93czpMLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOkwuc3BvdFNoYWRvd01hcC5sZW5ndGgsbnVtQ2xpcHBpbmdQbGFuZXM6YS5udW1QbGFuZXMsbnVtQ2xpcEludGVyc2VjdGlvbjphLm51bUludGVyc2VjdGlvbixkaXRoZXJpbmc6SS5kaXRoZXJpbmcsc2hhZG93TWFwRW5hYmxlZDplLnNoYWRvd01hcC5lbmFibGVkJiZSLmxlbmd0aD4wLHNoYWRvd01hcFR5cGU6ZS5zaGFkb3dNYXAudHlwZSx0b25lTWFwcGluZzpJLnRvbmVNYXBwZWQ/ZS50b25lTWFwcGluZzpLZCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czplLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTpJLnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDpJLnNpZGU9PT1MMSxmbGlwU2lkZWQ6SS5zaWRlPT09SWksZGVwdGhQYWNraW5nOkkuZGVwdGhQYWNraW5nIT09dm9pZCAwP0kuZGVwdGhQYWNraW5nOiExLGluZGV4MEF0dHJpYnV0ZU5hbWU6SS5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fG4uaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8bi5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxuLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpJLmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX1mdW5jdGlvbiBiKEkpe2xldCBMPVtdO2lmKEkuc2hhZGVySUQ/TC5wdXNoKEkuc2hhZGVySUQpOihMLnB1c2goSS5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksTC5wdXNoKEkuY3VzdG9tRnJhZ21lbnRTaGFkZXJJRCkpLEkuZGVmaW5lcyE9PXZvaWQgMClmb3IobGV0IFIgaW4gSS5kZWZpbmVzKUwucHVzaChSKSxMLnB1c2goSS5kZWZpbmVzW1JdKTtyZXR1cm4gSS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITEmJihTKEwsSSksQyhMLEkpLEwucHVzaChlLm91dHB1dEVuY29kaW5nKSksTC5wdXNoKEkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KSxMLmpvaW4oKX1mdW5jdGlvbiBTKEksTCl7SS5wdXNoKEwucHJlY2lzaW9uKSxJLnB1c2goTC5vdXRwdXRFbmNvZGluZyksSS5wdXNoKEwuZW52TWFwTW9kZSksSS5wdXNoKEwuY29tYmluZSksSS5wdXNoKEwudmVydGV4VXZzKSxJLnB1c2goTC5mb2dFeHAyKSxJLnB1c2goTC5zaXplQXR0ZW51YXRpb24pLEkucHVzaChMLm1heEJvbmVzKSxJLnB1c2goTC5tb3JwaFRhcmdldHNDb3VudCksSS5wdXNoKEwubnVtRGlyTGlnaHRzKSxJLnB1c2goTC5udW1Qb2ludExpZ2h0cyksSS5wdXNoKEwubnVtU3BvdExpZ2h0cyksSS5wdXNoKEwubnVtSGVtaUxpZ2h0cyksSS5wdXNoKEwubnVtUmVjdEFyZWFMaWdodHMpLEkucHVzaChMLm51bURpckxpZ2h0U2hhZG93cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVNwb3RMaWdodFNoYWRvd3MpLEkucHVzaChMLnNoYWRvd01hcFR5cGUpLEkucHVzaChMLnRvbmVNYXBwaW5nKSxJLnB1c2goTC5udW1DbGlwcGluZ1BsYW5lcyksSS5wdXNoKEwubnVtQ2xpcEludGVyc2VjdGlvbiksSS5wdXNoKEwuYWxwaGFXcml0ZSl9ZnVuY3Rpb24gQyhJLEwpe3MuZGlzYWJsZUFsbCgpLEwuaXNXZWJHTDImJnMuZW5hYmxlKDApLEwuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmcy5lbmFibGUoMSksTC5pbnN0YW5jaW5nJiZzLmVuYWJsZSgyKSxMLmluc3RhbmNpbmdDb2xvciYmcy5lbmFibGUoMyksTC5tYXAmJnMuZW5hYmxlKDQpLEwubWF0Y2FwJiZzLmVuYWJsZSg1KSxMLmVudk1hcCYmcy5lbmFibGUoNiksTC5lbnZNYXBDdWJlVVYmJnMuZW5hYmxlKDcpLEwubGlnaHRNYXAmJnMuZW5hYmxlKDgpLEwuYW9NYXAmJnMuZW5hYmxlKDkpLEwuZW1pc3NpdmVNYXAmJnMuZW5hYmxlKDEwKSxMLmJ1bXBNYXAmJnMuZW5hYmxlKDExKSxMLm5vcm1hbE1hcCYmcy5lbmFibGUoMTIpLEwub2JqZWN0U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDEzKSxMLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmcy5lbmFibGUoMTQpLEwuY2xlYXJjb2F0JiZzLmVuYWJsZSgxNSksTC5jbGVhcmNvYXRNYXAmJnMuZW5hYmxlKDE2KSxMLmNsZWFyY29hdFJvdWdobmVzc01hcCYmcy5lbmFibGUoMTcpLEwuY2xlYXJjb2F0Tm9ybWFsTWFwJiZzLmVuYWJsZSgxOCksTC5kaXNwbGFjZW1lbnRNYXAmJnMuZW5hYmxlKDE5KSxMLnNwZWN1bGFyTWFwJiZzLmVuYWJsZSgyMCksTC5yb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLm1ldGFsbmVzc01hcCYmcy5lbmFibGUoMjIpLEwuZ3JhZGllbnRNYXAmJnMuZW5hYmxlKDIzKSxMLmFscGhhTWFwJiZzLmVuYWJsZSgyNCksTC5hbHBoYVRlc3QmJnMuZW5hYmxlKDI1KSxMLnZlcnRleENvbG9ycyYmcy5lbmFibGUoMjYpLEwudmVydGV4QWxwaGFzJiZzLmVuYWJsZSgyNyksTC52ZXJ0ZXhVdnMmJnMuZW5hYmxlKDI4KSxMLnZlcnRleFRhbmdlbnRzJiZzLmVuYWJsZSgyOSksTC51dnNWZXJ0ZXhPbmx5JiZzLmVuYWJsZSgzMCksTC5mb2cmJnMuZW5hYmxlKDMxKSxJLnB1c2gocy5tYXNrKSxzLmRpc2FibGVBbGwoKSxMLnVzZUZvZyYmcy5lbmFibGUoMCksTC5mbGF0U2hhZGluZyYmcy5lbmFibGUoMSksTC5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZzLmVuYWJsZSgyKSxMLnNraW5uaW5nJiZzLmVuYWJsZSgzKSxMLnVzZVZlcnRleFRleHR1cmUmJnMuZW5hYmxlKDQpLEwubW9ycGhUYXJnZXRzJiZzLmVuYWJsZSg1KSxMLm1vcnBoTm9ybWFscyYmcy5lbmFibGUoNiksTC5wcmVtdWx0aXBsaWVkQWxwaGEmJnMuZW5hYmxlKDcpLEwuc2hhZG93TWFwRW5hYmxlZCYmcy5lbmFibGUoOCksTC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmcy5lbmFibGUoOSksTC5kb3VibGVTaWRlZCYmcy5lbmFibGUoMTApLEwuZmxpcFNpZGVkJiZzLmVuYWJsZSgxMSksTC5kZXB0aFBhY2tpbmcmJnMuZW5hYmxlKDEyKSxMLmRpdGhlcmluZyYmcy5lbmFibGUoMTMpLEwuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnMuZW5hYmxlKDE0KSxMLnNwZWN1bGFyQ29sb3JNYXAmJnMuZW5hYmxlKDE1KSxMLnRyYW5zbWlzc2lvbiYmcy5lbmFibGUoMTYpLEwudHJhbnNtaXNzaW9uTWFwJiZzLmVuYWJsZSgxNyksTC50aGlja25lc3NNYXAmJnMuZW5hYmxlKDE4KSxMLnNoZWVuJiZzLmVuYWJsZSgxOSksTC5zaGVlbkNvbG9yTWFwJiZzLmVuYWJsZSgyMCksTC5zaGVlblJvdWdobmVzc01hcCYmcy5lbmFibGUoMjEpLEwuZGVjb2RlVmlkZW9UZXh0dXJlJiZzLmVuYWJsZSgyMiksSS5wdXNoKHMubWFzayl9ZnVuY3Rpb24gUChJKXtsZXQgTD1fW0kudHlwZV0sUjtpZihMKXtsZXQgRj1haFtMXTtSPXpmZS5jbG9uZShGLnVuaWZvcm1zKX1lbHNlIFI9SS51bmlmb3JtcztyZXR1cm4gUn1mdW5jdGlvbiBrKEksTCl7bGV0IFI7Zm9yKGxldCBGPTAsej1jLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1jW0ZdO2lmKFUuY2FjaGVLZXk9PT1MKXtSPVUsKytSLnVzZWRUaW1lczticmVha319cmV0dXJuIFI9PT12b2lkIDAmJihSPW5ldyBoZ3IoZSxMLEksbyksYy5wdXNoKFIpKSxSfWZ1bmN0aW9uIE8oSSl7aWYoLS1JLnVzZWRUaW1lcz09PTApe2xldCBMPWMuaW5kZXhPZihJKTtjW0xdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxJLmRlc3Ryb3koKX19ZnVuY3Rpb24gRChJKXtsLnJlbW92ZShJKX1mdW5jdGlvbiBCKCl7bC5kaXNwb3NlKCl9cmV0dXJue2dldFBhcmFtZXRlcnM6eCxnZXRQcm9ncmFtQ2FjaGVLZXk6YixnZXRVbmlmb3JtczpQLGFjcXVpcmVQcm9ncmFtOmsscmVsZWFzZVByb2dyYW06TyxyZWxlYXNlU2hhZGVyQ2FjaGU6RCxwcm9ncmFtczpjLGRpc3Bvc2U6Qn19ZnVuY3Rpb24gZGdyKCl7bGV0IGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gdChvKXtsZXQgYT1lLmdldChvKTtyZXR1cm4gYT09PXZvaWQgMCYmKGE9e30sZS5zZXQobyxhKSksYX1mdW5jdGlvbiByKG8pe2UuZGVsZXRlKG8pfWZ1bmN0aW9uIG4obyxhLHMpe2UuZ2V0KG8pW2FdPXN9ZnVuY3Rpb24gaSgpe2U9bmV3IFdlYWtNYXB9cmV0dXJue2dldDp0LHJlbW92ZTpyLHVwZGF0ZTpuLGRpc3Bvc2U6aX19ZnVuY3Rpb24gbWdyKGUsdCl7cmV0dXJuIGUuZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9lLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOmUucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP2UucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjplLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9lLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6ZS56IT09dC56P2Uuei10Lno6ZS5pZC10LmlkfWZ1bmN0aW9uIEd1ZShlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS56IT09dC56P3Quei1lLno6ZS5pZC10LmlkfWZ1bmN0aW9uIFd1ZSgpe2xldCBlPVtdLHQ9MCxyPVtdLG49W10saT1bXTtmdW5jdGlvbiBvKCl7dD0wLHIubGVuZ3RoPTAsbi5sZW5ndGg9MCxpLmxlbmd0aD0wfWZ1bmN0aW9uIGEoaCxmLHAsZCxnLF8pe2xldCB5PWVbdF07cmV0dXJuIHk9PT12b2lkIDA/KHk9e2lkOmguaWQsb2JqZWN0OmgsZ2VvbWV0cnk6ZixtYXRlcmlhbDpwLGdyb3VwT3JkZXI6ZCxyZW5kZXJPcmRlcjpoLnJlbmRlck9yZGVyLHo6Zyxncm91cDpffSxlW3RdPXkpOih5LmlkPWguaWQseS5vYmplY3Q9aCx5Lmdlb21ldHJ5PWYseS5tYXRlcmlhbD1wLHkuZ3JvdXBPcmRlcj1kLHkucmVuZGVyT3JkZXI9aC5yZW5kZXJPcmRlcix5Lno9Zyx5Lmdyb3VwPV8pLHQrKyx5fWZ1bmN0aW9uIHMoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi5wdXNoKHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnB1c2goeSk6ci5wdXNoKHkpfWZ1bmN0aW9uIGwoaCxmLHAsZCxnLF8pe2xldCB5PWEoaCxmLHAsZCxnLF8pO3AudHJhbnNtaXNzaW9uPjA/bi51bnNoaWZ0KHkpOnAudHJhbnNwYXJlbnQ9PT0hMD9pLnVuc2hpZnQoeSk6ci51bnNoaWZ0KHkpfWZ1bmN0aW9uIGMoaCxmKXtyLmxlbmd0aD4xJiZyLnNvcnQoaHx8bWdyKSxuLmxlbmd0aD4xJiZuLnNvcnQoZnx8R3VlKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8R3VlKX1mdW5jdGlvbiB1KCl7Zm9yKGxldCBoPXQsZj1lLmxlbmd0aDtoPGY7aCsrKXtsZXQgcD1lW2hdO2lmKHAuaWQ9PT1udWxsKWJyZWFrO3AuaWQ9bnVsbCxwLm9iamVjdD1udWxsLHAuZ2VvbWV0cnk9bnVsbCxwLm1hdGVyaWFsPW51bGwscC5ncm91cD1udWxsfX1yZXR1cm57b3BhcXVlOnIsdHJhbnNtaXNzaXZlOm4sdHJhbnNwYXJlbnQ6aSxpbml0Om8scHVzaDpzLHVuc2hpZnQ6bCxmaW5pc2g6dSxzb3J0OmN9fWZ1bmN0aW9uIGdncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobixpKXtsZXQgbztyZXR1cm4gZS5oYXMobik9PT0hMT8obz1uZXcgV3VlLGUuc2V0KG4sW29dKSk6aT49ZS5nZXQobikubGVuZ3RoPyhvPW5ldyBXdWUsZS5nZXQobikucHVzaChvKSk6bz1lLmdldChuKVtpXSxvfWZ1bmN0aW9uIHIoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxkaXNwb3NlOnJ9fWZ1bmN0aW9uIF9ncigpe2xldCBlPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoZVt0LmlkXSE9PXZvaWQgMClyZXR1cm4gZVt0LmlkXTtsZXQgcjtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixjb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtwb3NpdGlvbjpuZXcgaixjb2xvcjpuZXcgbmUsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6cj17ZGlyZWN0aW9uOm5ldyBqLHNreUNvbG9yOm5ldyBuZSxncm91bmRDb2xvcjpuZXcgbmV9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6cj17Y29sb3I6bmV3IG5lLHBvc2l0aW9uOm5ldyBqLGhhbGZXaWR0aDpuZXcgaixoYWxmSGVpZ2h0Om5ldyBqfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX1mdW5jdGlvbiB5Z3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0fTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjpyPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEx0LHNoYWRvd0NhbWVyYU5lYXI6MSxzaGFkb3dDYW1lcmFGYXI6MWUzfTticmVha31yZXR1cm4gZVt0LmlkXT1yLHJ9fX12YXIgdmdyPTA7ZnVuY3Rpb24geGdyKGUsdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShlLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBiZ3IoZSx0KXtsZXQgcj1uZXcgX2dyLG49eWdyKCksaT17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKWkucHJvYmUucHVzaChuZXcgaik7bGV0IG89bmV3IGosYT1uZXcgTWUscz1uZXcgTWU7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAscD0wLGQ9MDtmb3IobGV0IEQ9MDtEPDk7RCsrKWkucHJvYmVbRF0uc2V0KDAsMCwwKTtsZXQgZz0wLF89MCx5PTAseD0wLGI9MCxTPTAsQz0wLFA9MDt1LnNvcnQoeGdyKTtsZXQgaz1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgRD0wLEI9dS5sZW5ndGg7RDxCO0QrKyl7bGV0IEk9dVtEXSxMPUkuY29sb3IsUj1JLmludGVuc2l0eSxGPUkuZGlzdGFuY2Usej1JLnNoYWRvdyYmSS5zaGFkb3cubWFwP0kuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYoSS5pc0FtYmllbnRMaWdodClmKz1MLnIqUiprLHArPUwuZypSKmssZCs9TC5iKlIqaztlbHNlIGlmKEkuaXNMaWdodFByb2JlKWZvcihsZXQgVT0wO1U8OTtVKyspaS5wcm9iZVtVXS5hZGRTY2FsZWRWZWN0b3IoSS5zaC5jb2VmZmljaWVudHNbVV0sUik7ZWxzZSBpZihJLmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5jb2xvci5jb3B5KEkuY29sb3IpLm11bHRpcGx5U2NhbGFyKEkuaW50ZW5zaXR5KmspLEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxpLmRpcmVjdGlvbmFsU2hhZG93W2ddPVosaS5kaXJlY3Rpb25hbFNoYWRvd01hcFtnXT16LGkuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbZ109SS5zaGFkb3cubWF0cml4LFMrK31pLmRpcmVjdGlvbmFsW2ddPVUsZysrfWVsc2UgaWYoSS5pc1Nwb3RMaWdodCl7bGV0IFU9ci5nZXQoSSk7aWYoVS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oSS5tYXRyaXhXb3JsZCksVS5jb2xvci5jb3B5KEwpLm11bHRpcGx5U2NhbGFyKFIqayksVS5kaXN0YW5jZT1GLFUuY29uZUNvcz1NYXRoLmNvcyhJLmFuZ2xlKSxVLnBlbnVtYnJhQ29zPU1hdGguY29zKEkuYW5nbGUqKDEtSS5wZW51bWJyYSkpLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5zcG90U2hhZG93W3ldPVosaS5zcG90U2hhZG93TWFwW3ldPXosaS5zcG90U2hhZG93TWF0cml4W3ldPUkuc2hhZG93Lm1hdHJpeCxQKyt9aS5zcG90W3ldPVUseSsrfWVsc2UgaWYoSS5pc1JlY3RBcmVhTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1UuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKSxVLmhhbGZXaWR0aC5zZXQoSS53aWR0aCouNSwwLDApLFUuaGFsZkhlaWdodC5zZXQoMCxJLmhlaWdodCouNSwwKSxpLnJlY3RBcmVhW3hdPVUseCsrfWVsc2UgaWYoSS5pc1BvaW50TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxVLmRpc3RhbmNlPUkuZGlzdGFuY2UsVS5kZWNheT1JLmRlY2F5LEkuY2FzdFNoYWRvdyl7bGV0IFc9SS5zaGFkb3csWj1uLmdldChJKTtaLnNoYWRvd0JpYXM9Vy5iaWFzLFouc2hhZG93Tm9ybWFsQmlhcz1XLm5vcm1hbEJpYXMsWi5zaGFkb3dSYWRpdXM9Vy5yYWRpdXMsWi5zaGFkb3dNYXBTaXplPVcubWFwU2l6ZSxaLnNoYWRvd0NhbWVyYU5lYXI9Vy5jYW1lcmEubmVhcixaLnNoYWRvd0NhbWVyYUZhcj1XLmNhbWVyYS5mYXIsaS5wb2ludFNoYWRvd1tfXT1aLGkucG9pbnRTaGFkb3dNYXBbX109eixpLnBvaW50U2hhZG93TWF0cml4W19dPUkuc2hhZG93Lm1hdHJpeCxDKyt9aS5wb2ludFtfXT1VLF8rK31lbHNlIGlmKEkuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBVPXIuZ2V0KEkpO1Uuc2t5Q29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZ3JvdW5kQ29sb3IuY29weShJLmdyb3VuZENvbG9yKS5tdWx0aXBseVNjYWxhcihSKmspLGkuaGVtaVtiXT1VLGIrK319eD4wJiYodC5pc1dlYkdMMnx8ZS5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPT09ITA/KGkucmVjdEFyZWFMVEMxPXJlLkxUQ19GTE9BVF8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19GTE9BVF8yKTplLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfSEFMRl8xLGkucmVjdEFyZWFMVEMyPXJlLkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxpLmFtYmllbnRbMF09ZixpLmFtYmllbnRbMV09cCxpLmFtYmllbnRbMl09ZDtsZXQgTz1pLmhhc2g7KE8uZGlyZWN0aW9uYWxMZW5ndGghPT1nfHxPLnBvaW50TGVuZ3RoIT09X3x8Ty5zcG90TGVuZ3RoIT09eXx8Ty5yZWN0QXJlYUxlbmd0aCE9PXh8fE8uaGVtaUxlbmd0aCE9PWJ8fE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzIT09U3x8Ty5udW1Qb2ludFNoYWRvd3MhPT1DfHxPLm51bVNwb3RTaGFkb3dzIT09UCkmJihpLmRpcmVjdGlvbmFsLmxlbmd0aD1nLGkuc3BvdC5sZW5ndGg9eSxpLnJlY3RBcmVhLmxlbmd0aD14LGkucG9pbnQubGVuZ3RoPV8saS5oZW1pLmxlbmd0aD1iLGkuZGlyZWN0aW9uYWxTaGFkb3cubGVuZ3RoPVMsaS5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGg9UyxpLnBvaW50U2hhZG93Lmxlbmd0aD1DLGkucG9pbnRTaGFkb3dNYXAubGVuZ3RoPUMsaS5zcG90U2hhZG93Lmxlbmd0aD1QLGkuc3BvdFNoYWRvd01hcC5sZW5ndGg9UCxpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1TLGkucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPUMsaS5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1QLE8uZGlyZWN0aW9uYWxMZW5ndGg9ZyxPLnBvaW50TGVuZ3RoPV8sTy5zcG90TGVuZ3RoPXksTy5yZWN0QXJlYUxlbmd0aD14LE8uaGVtaUxlbmd0aD1iLE8ubnVtRGlyZWN0aW9uYWxTaGFkb3dzPVMsTy5udW1Qb2ludFNoYWRvd3M9QyxPLm51bVNwb3RTaGFkb3dzPVAsaS52ZXJzaW9uPXZncisrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxwPTAsZD0wLGc9MCxfPTAseT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHg9MCxiPXUubGVuZ3RoO3g8Yjt4Kyspe2xldCBTPXVbeF07aWYoUy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBDPWkuZGlyZWN0aW9uYWxbZl07Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGYrK31lbHNlIGlmKFMuaXNTcG90TGlnaHQpe2xldCBDPWkuc3BvdFtkXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy50YXJnZXQubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnN1YihvKSxDLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oeSksZCsrfWVsc2UgaWYoUy5pc1JlY3RBcmVhTGlnaHQpe2xldCBDPWkucmVjdEFyZWFbZ107Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSkscy5pZGVudGl0eSgpLGEuY29weShTLm1hdHJpeFdvcmxkKSxhLnByZW11bHRpcGx5KHkpLHMuZXh0cmFjdFJvdGF0aW9uKGEpLEMuaGFsZldpZHRoLnNldChTLndpZHRoKi41LDAsMCksQy5oYWxmSGVpZ2h0LnNldCgwLFMuaGVpZ2h0Ki41LDApLEMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChzKSxDLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KHMpLGcrK31lbHNlIGlmKFMuaXNQb2ludExpZ2h0KXtsZXQgQz1pLnBvaW50W3BdO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHArK31lbHNlIGlmKFMuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBDPWkuaGVtaVtfXTtDLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLEMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLF8rK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOml9fWZ1bmN0aW9uIFl1ZShlLHQpe2xldCByPW5ldyBiZ3IoZSx0KSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe24ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgpe24ucHVzaChoKX1mdW5jdGlvbiBzKGgpe2kucHVzaChoKX1mdW5jdGlvbiBsKGgpe3Iuc2V0dXAobixoKX1mdW5jdGlvbiBjKGgpe3Iuc2V0dXBWaWV3KG4saCl9cmV0dXJue2luaXQ6byxzdGF0ZTp7bGlnaHRzQXJyYXk6bixzaGFkb3dzQXJyYXk6aSxsaWdodHM6cn0sc2V0dXBMaWdodHM6bCxzZXR1cExpZ2h0c1ZpZXc6YyxwdXNoTGlnaHQ6YSxwdXNoU2hhZG93OnN9fWZ1bmN0aW9uIHdncihlLHQpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG4obyxhPTApe2xldCBzO3JldHVybiByLmhhcyhvKT09PSExPyhzPW5ldyBZdWUoZSx0KSxyLnNldChvLFtzXSkpOmE+PXIuZ2V0KG8pLmxlbmd0aD8ocz1uZXcgWXVlKGUsdCksci5nZXQobykucHVzaChzKSk6cz1yLmdldChvKVthXSxzfWZ1bmN0aW9uIGkoKXtyPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOml9fXZhciBlTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9UGZlLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2VNLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciByTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgaix0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3JNLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTZ3I9YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApOwp9YCxNZ3I9YHVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzOwp1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjsKdW5pZm9ybSBmbG9hdCByYWRpdXM7CiNpbmNsdWRlIDxwYWNraW5nPgp2b2lkIG1haW4oKSB7Cgljb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7CglmbG9hdCBtZWFuID0gMC4wOwoJZmxvYXQgc3F1YXJlZF9tZWFuID0gMC4wOwoJZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApOwoJZmxvYXQgdXZTdGFydCA9IHNhbXBsZXMgPD0gMS4wID8gMC4wIDogLSAxLjA7Cglmb3IgKCBmbG9hdCBpID0gMC4wOyBpIDwgc2FtcGxlczsgaSArKyApIHsKCQlmbG9hdCB1dk9mZnNldCA9IHV2U3RhcnQgKyBpICogdXZTdHJpZGU7CgkJI2lmZGVmIEhPUklaT05UQUxfUEFTUwoJCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIHV2T2Zmc2V0LCAwLjAgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGlzdHJpYnV0aW9uLng7CgkJCXNxdWFyZWRfbWVhbiArPSBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICsgZGlzdHJpYnV0aW9uLnggKiBkaXN0cmlidXRpb24ueDsKCQkjZWxzZQoJCQlmbG9hdCBkZXB0aCA9IHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIHNoYWRvd19wYXNzLCAoIGdsX0ZyYWdDb29yZC54eSArIHZlYzIoIDAuMCwgdXZPZmZzZXQgKSAqIHJhZGl1cyApIC8gcmVzb2x1dGlvbiApICk7CgkJCW1lYW4gKz0gZGVwdGg7CgkJCXNxdWFyZWRfbWVhbiArPSBkZXB0aCAqIGRlcHRoOwoJCSNlbmRpZgoJfQoJbWVhbiA9IG1lYW4gLyBzYW1wbGVzOwoJc3F1YXJlZF9tZWFuID0gc3F1YXJlZF9tZWFuIC8gc2FtcGxlczsKCWZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApOwoJZ2xfRnJhZ0NvbG9yID0gcGFjazJIYWxmVG9SR0JBKCB2ZWMyKCBtZWFuLCBzdGRfZGV2ICkgKTsKfWA7ZnVuY3Rpb24gWGZlKGUsdCxyKXtsZXQgbj1uZXcgTjEsaT1uZXcgTHQsbz1uZXcgTHQsYT1uZXcgZW4scz1uZXcgZU0oe2RlcHRoUGFja2luZzpJZmV9KSxsPW5ldyByTSxjPXt9LHU9ci5tYXhUZXh0dXJlU2l6ZSxoPXswOklpLDE6STEsMjpMMX0sZj1uZXcgbGgoe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEx0fSxyYWRpdXM6e3ZhbHVlOjR9fSx2ZXJ0ZXhTaGFkZXI6U2dyLGZyYWdtZW50U2hhZGVyOk1ncn0pLHA9Zi5jbG9uZSgpO3AuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZD1uZXcgUGU7ZC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCBnPW5ldyB0aShkLGYpLF89dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPUNodCx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEMsUCl7aWYoXy5lbmFibGVkPT09ITF8fF8uYXV0b1VwZGF0ZT09PSExJiZfLm5lZWRzVXBkYXRlPT09ITF8fFMubGVuZ3RoPT09MClyZXR1cm47bGV0IGs9ZS5nZXRSZW5kZXJUYXJnZXQoKSxPPWUuZ2V0QWN0aXZlQ3ViZUZhY2UoKSxEPWUuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxCPWUuc3RhdGU7Qi5zZXRCbGVuZGluZygkZCksQi5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLEIuYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxCLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IEk9MCxMPVMubGVuZ3RoO0k8TDtJKyspe2xldCBSPVNbSV0sRj1SLnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsUiwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO2kuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoaS5tdWx0aXBseSh6KSxvLmNvcHkoRi5tYXBTaXplKSwoaS54PnV8fGkueT51KSYmKGkueD51JiYoby54PU1hdGguZmxvb3IodS96LngpLGkueD1vLngqei54LEYubWFwU2l6ZS54PW8ueCksaS55PnUmJihvLnk9TWF0aC5mbG9vcih1L3oueSksaS55PW8ueSp6LnksRi5tYXBTaXplLnk9by55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUYzKXtsZXQgVz17bWluRmlsdGVyOmlpLG1hZ0ZpbHRlcjppaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgdXMoaS54LGkueSxXKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVz17bWluRmlsdGVyOkxpLG1hZ0ZpbHRlcjpMaSxmb3JtYXQ6UW99O0YubWFwPW5ldyB1cyhpLngsaS55LFcpLEYubWFwLnRleHR1cmUubmFtZT1SLm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1lLnNldFJlbmRlclRhcmdldChGLm1hcCksZS5jbGVhcigpO2xldCBVPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVz0wO1c8VTtXKyspe2xldCBaPUYuZ2V0Vmlld3BvcnQoVyk7YS5zZXQoby54KloueCxvLnkqWi55LG8ueCpaLnosby55KloudyksQi52aWV3cG9ydChhKSxGLnVwZGF0ZU1hdHJpY2VzKFIsVyksbj1GLmdldEZydXN0dW0oKSxiKEMsUCxGLmNhbWVyYSxSLHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyYmeShGLFApLEYubmVlZHNVcGRhdGU9ITF9Xy5uZWVkc1VwZGF0ZT0hMSxlLnNldFJlbmRlclRhcmdldChrLE8sRCl9O2Z1bmN0aW9uIHkoUyxDKXtsZXQgUD10LnVwZGF0ZShnKTtmLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1TLmJsdXJTYW1wbGVzJiYoZi5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMscC5kZWZpbmVzLlZTTV9TQU1QTEVTPVMuYmx1clNhbXBsZXMsZi5uZWVkc1VwZGF0ZT0hMCxwLm5lZWRzVXBkYXRlPSEwKSxmLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVMubWFwLnRleHR1cmUsZi51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxmLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcFBhc3MpLGUuY2xlYXIoKSxlLnJlbmRlckJ1ZmZlckRpcmVjdChDLG51bGwsUCxmLGcsbnVsbCkscC51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcFBhc3MudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9Uy5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVMucmFkaXVzLGUuc2V0UmVuZGVyVGFyZ2V0KFMubWFwKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAscCxnLG51bGwpfWZ1bmN0aW9uIHgoUyxDLFAsayxPLEQsQil7bGV0IEk9bnVsbCxMPWsuaXNQb2ludExpZ2h0PT09ITA/Uy5jdXN0b21EaXN0YW5jZU1hdGVyaWFsOlMuY3VzdG9tRGVwdGhNYXRlcmlhbDtpZihMIT09dm9pZCAwP0k9TDpJPWsuaXNQb2ludExpZ2h0PT09ITA/bDpzLGUubG9jYWxDbGlwcGluZ0VuYWJsZWQmJlAuY2xpcFNoYWRvd3M9PT0hMCYmUC5jbGlwcGluZ1BsYW5lcy5sZW5ndGghPT0wfHxQLmRpc3BsYWNlbWVudE1hcCYmUC5kaXNwbGFjZW1lbnRTY2FsZSE9PTB8fFAuYWxwaGFNYXAmJlAuYWxwaGFUZXN0PjApe2xldCBSPUkudXVpZCxGPVAudXVpZCx6PWNbUl07ej09PXZvaWQgMCYmKHo9e30sY1tSXT16KTtsZXQgVT16W0ZdO1U9PT12b2lkIDAmJihVPUkuY2xvbmUoKSx6W0ZdPVUpLEk9VX1yZXR1cm4gSS52aXNpYmxlPVAudmlzaWJsZSxJLndpcmVmcmFtZT1QLndpcmVmcmFtZSxCPT09RjM/SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOlAuc2lkZTpJLnNpZGU9UC5zaGFkb3dTaWRlIT09bnVsbD9QLnNoYWRvd1NpZGU6aFtQLnNpZGVdLEkuYWxwaGFNYXA9UC5hbHBoYU1hcCxJLmFscGhhVGVzdD1QLmFscGhhVGVzdCxJLmNsaXBTaGFkb3dzPVAuY2xpcFNoYWRvd3MsSS5jbGlwcGluZ1BsYW5lcz1QLmNsaXBwaW5nUGxhbmVzLEkuY2xpcEludGVyc2VjdGlvbj1QLmNsaXBJbnRlcnNlY3Rpb24sSS5kaXNwbGFjZW1lbnRNYXA9UC5kaXNwbGFjZW1lbnRNYXAsSS5kaXNwbGFjZW1lbnRTY2FsZT1QLmRpc3BsYWNlbWVudFNjYWxlLEkuZGlzcGxhY2VtZW50Qmlhcz1QLmRpc3BsYWNlbWVudEJpYXMsSS53aXJlZnJhbWVMaW5ld2lkdGg9UC53aXJlZnJhbWVMaW5ld2lkdGgsSS5saW5ld2lkdGg9UC5saW5ld2lkdGgsay5pc1BvaW50TGlnaHQ9PT0hMCYmSS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPT09ITAmJihJLnJlZmVyZW5jZVBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihrLm1hdHJpeFdvcmxkKSxJLm5lYXJEaXN0YW5jZT1PLEkuZmFyRGlzdGFuY2U9RCksSX1mdW5jdGlvbiBiKFMsQyxQLGssTyl7aWYoUy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoQy5sYXllcnMpJiYoUy5pc01lc2h8fFMuaXNMaW5lfHxTLmlzUG9pbnRzKSYmKFMuY2FzdFNoYWRvd3x8Uy5yZWNlaXZlU2hhZG93JiZPPT09RjMpJiYoIVMuZnJ1c3R1bUN1bGxlZHx8bi5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7Uy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhQLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKTtsZXQgST10LnVwZGF0ZShTKSxMPVMubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShMKSl7bGV0IFI9SS5ncm91cHM7Zm9yKGxldCBGPTAsej1SLmxlbmd0aDtGPHo7RisrKXtsZXQgVT1SW0ZdLFc9TFtVLm1hdGVyaWFsSW5kZXhdO2lmKFcmJlcudmlzaWJsZSl7bGV0IFo9eChTLEksVyxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxaLFMsVSl9fX1lbHNlIGlmKEwudmlzaWJsZSl7bGV0IFI9eChTLEksTCxrLFAubmVhcixQLmZhcixPKTtlLnJlbmRlckJ1ZmZlckRpcmVjdChQLG51bGwsSSxSLFMsbnVsbCl9fWxldCBCPVMuY2hpbGRyZW47Zm9yKGxldCBJPTAsTD1CLmxlbmd0aDtJPEw7SSsrKWIoQltJXSxDLFAsayxPKX19ZnVuY3Rpb24gRWdyKGUsdCxyKXtsZXQgbj1yLmlzV2ViR0wyO2Z1bmN0aW9uIGkoKXtsZXQgYXQ9ITEsc2U9bmV3IGVuLFF0PW51bGwsQ2U9bmV3IGVuKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFB0KXtRdCE9PVB0JiYhYXQmJihlLmNvbG9yTWFzayhQdCxQdCxQdCxQdCksUXQ9UHQpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCxOdCx6ZSx5bixXaSl7V2k9PT0hMCYmKFB0Kj15bixOdCo9eW4semUqPXluKSxzZS5zZXQoUHQsTnQsemUseW4pLENlLmVxdWFscyhzZSk9PT0hMSYmKGUuY2xlYXJDb2xvcihQdCxOdCx6ZSx5biksQ2UuY29weShzZSkpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLFF0PW51bGwsQ2Uuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIG8oKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oUHQpe1B0P2x0KDI5MjkpOkt0KDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKFB0KXtzZSE9PVB0JiYhYXQmJihlLmRlcHRoTWFzayhQdCksc2U9UHQpfSxzZXRGdW5jOmZ1bmN0aW9uKFB0KXtpZihRdCE9PVB0KXtpZihQdClzd2l0Y2goUHQpe2Nhc2UgWmhlOmUuZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSBKaGU6ZS5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIFFoZTplLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgaVU6ZS5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIHRmZTplLmRlcHRoRnVuYyg1MTQpO2JyZWFrO2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIG5mZTplLmRlcHRoRnVuYyg1MTcpO2JyZWFrO2RlZmF1bHQ6ZS5kZXB0aEZ1bmMoNTE1KX1lbHNlIGUuZGVwdGhGdW5jKDUxNSk7UXQ9UHR9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oUHQpe2F0PVB0fSxzZXRDbGVhcjpmdW5jdGlvbihQdCl7Q2UhPT1QdCYmKGUuY2xlYXJEZXB0aChQdCksQ2U9UHQpfSxyZXNldDpmdW5jdGlvbigpe2F0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsfX19ZnVuY3Rpb24gYSgpe2xldCBhdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oQXIpe2F0fHwoQXI/bHQoMjk2MCk6S3QoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKEFyKXtzZSE9PUFyJiYhYXQmJihlLnN0ZW5jaWxNYXNrKEFyKSxzZT1Bcil9LHNldEZ1bmM6ZnVuY3Rpb24oQXIsUGEsaG8peyhRdCE9PUFyfHxDZSE9PVBhfHxQdCE9PWhvKSYmKGUuc3RlbmNpbEZ1bmMoQXIsUGEsaG8pLFF0PUFyLENlPVBhLFB0PWhvKX0sc2V0T3A6ZnVuY3Rpb24oQXIsUGEsaG8peyhOdCE9PUFyfHx6ZSE9PVBhfHx5biE9PWhvKSYmKGUuc3RlbmNpbE9wKEFyLFBhLGhvKSxOdD1Bcix6ZT1QYSx5bj1obyl9LHNldExvY2tlZDpmdW5jdGlvbihBcil7YXQ9QXJ9LHNldENsZWFyOmZ1bmN0aW9uKEFyKXtXaSE9PUFyJiYoZS5jbGVhclN0ZW5jaWwoQXIpLFdpPUFyKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbCxQdD1udWxsLE50PW51bGwsemU9bnVsbCx5bj1udWxsLFdpPW51bGx9fX1sZXQgcz1uZXcgaSxsPW5ldyBvLGM9bmV3IGEsdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLFI9ZS5nZXRQYXJhbWV0ZXIoMzU2NjEpLEY9ITEsej0wLFU9ZS5nZXRQYXJhbWV0ZXIoNzkzOCk7VS5pbmRleE9mKCJXZWJHTCIpIT09LTE/KHo9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49MSk6VS5pbmRleE9mKCJPcGVuR0wgRVMiKSE9PS0xJiYoej1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoVSlbMV0pLEY9ej49Mik7bGV0IFc9bnVsbCxaPXt9LHJ0PWUuZ2V0UGFyYW1ldGVyKDMwODgpLG90PWUuZ2V0UGFyYW1ldGVyKDI5NzgpLHN0PW5ldyBlbigpLmZyb21BcnJheShydCksU3Q9bmV3IGVuKCkuZnJvbUFycmF5KG90KTtmdW5jdGlvbiBidChhdCxzZSxRdCl7bGV0IENlPW5ldyBVaW50OEFycmF5KDQpLFB0PWUuY3JlYXRlVGV4dHVyZSgpO2UuYmluZFRleHR1cmUoYXQsUHQpLGUudGV4UGFyYW1ldGVyaShhdCwxMDI0MSw5NzI4KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDAsOTcyOCk7Zm9yKGxldCBOdD0wO050PFF0O050KyspZS50ZXhJbWFnZTJEKHNlK050LDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsQ2UpO3JldHVybiBQdH1sZXQgTXQ9e307TXRbMzU1M109YnQoMzU1MywzNTUzLDEpLE10WzM0MDY3XT1idCgzNDA2NywzNDA2OSw2KSxzLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxsdCgyOTI5KSxsLnNldEZ1bmMoaVUpLGh0KCExKSx3dChTdXQpLGx0KDI4ODQpLHEoJGQpO2Z1bmN0aW9uIGx0KGF0KXt1W2F0XSE9PSEwJiYoZS5lbmFibGUoYXQpLHVbYXRdPSEwKX1mdW5jdGlvbiBLdChhdCl7dVthdF0hPT0hMSYmKGUuZGlzYWJsZShhdCksdVthdF09ITEpfWZ1bmN0aW9uIF90KGF0LHNlKXtyZXR1cm4gaFthdF0hPT1zZT8oZS5iaW5kRnJhbWVidWZmZXIoYXQsc2UpLGhbYXRdPXNlLG4mJihhdD09PTM2MDA5JiYoaFszNjE2MF09c2UpLGF0PT09MzYxNjAmJihoWzM2MDA5XT1zZSkpLCEwKTohMX1mdW5jdGlvbiBjdChhdCxzZSl7bGV0IFF0PXAsQ2U9ITE7aWYoYXQpaWYoUXQ9Zi5nZXQoc2UpLFF0PT09dm9pZCAwJiYoUXQ9W10sZi5zZXQoc2UsUXQpKSxhdC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKXtsZXQgUHQ9YXQudGV4dHVyZTtpZihRdC5sZW5ndGghPT1QdC5sZW5ndGh8fFF0WzBdIT09MzYwNjQpe2ZvcihsZXQgTnQ9MCx6ZT1QdC5sZW5ndGg7TnQ8emU7TnQrKylRdFtOdF09MzYwNjQrTnQ7UXQubGVuZ3RoPVB0Lmxlbmd0aCxDZT0hMH19ZWxzZSBRdFswXSE9PTM2MDY0JiYoUXRbMF09MzYwNjQsQ2U9ITApO2Vsc2UgUXRbMF0hPT0xMDI5JiYoUXRbMF09MTAyOSxDZT0hMCk7Q2UmJihyLmlzV2ViR0wyP2UuZHJhd0J1ZmZlcnMoUXQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKFF0KSl9ZnVuY3Rpb24gWChhdCl7cmV0dXJuIGQhPT1hdD8oZS51c2VQcm9ncmFtKGF0KSxkPWF0LCEwKTohMX1sZXQgZXQ9e1tNMV06MzI3NzQsW0hoZV06MzI3NzgsW1ZoZV06MzI3Nzl9O2lmKG4pZXRbQ3V0XT0zMjc3NSxldFtBdXRdPTMyNzc2O2Vsc2V7bGV0IGF0PXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7YXQhPT1udWxsJiYoZXRbQ3V0XT1hdC5NSU5fRVhULGV0W0F1dF09YXQuTUFYX0VYVCl9bGV0IGR0PXtbVWhlXTowLFtxaGVdOjEsW0doZV06NzY4LFtQaHRdOjc3MCxbS2hlXTo3NzYsW1hoZV06Nzc0LFtZaGVdOjc3MixbV2hlXTo3NjksW0lodF06NzcxLFskaGVdOjc3NSxbamhlXTo3NzN9O2Z1bmN0aW9uIHEoYXQsc2UsUXQsQ2UsUHQsTnQsemUseW4pe2lmKGF0PT09JGQpe2c9PT0hMCYmKEt0KDMwNDIpLGc9ITEpO3JldHVybn1pZihnPT09ITEmJihsdCgzMDQyKSxnPSEwKSxhdCE9PUJoZSl7aWYoYXQhPT1ffHx5biE9PWspe2lmKCh5IT09TTF8fFMhPT1NMSkmJihlLmJsZW5kRXF1YXRpb24oMzI3NzQpLHk9TTEsUz1NMSkseW4pc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgTXV0OmUuYmxlbmRGdW5jKDEsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixhdCk7YnJlYWt9ZWxzZSBzd2l0Y2goYXQpe2Nhc2UgVjM6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSg3NzAsNzcxLDEsNzcxKTticmVhaztjYXNlIE11dDplLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmNTZXBhcmF0ZSgwLDc2OSwwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jKDAsNzY4KTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfXg9bnVsbCxiPW51bGwsQz1udWxsLFA9bnVsbCxfPWF0LGs9eW59cmV0dXJufVB0PVB0fHxzZSxOdD1OdHx8UXQsemU9emV8fENlLChzZSE9PXl8fFB0IT09UykmJihlLmJsZW5kRXF1YXRpb25TZXBhcmF0ZShldFtzZV0sZXRbUHRdKSx5PXNlLFM9UHQpLChRdCE9PXh8fENlIT09Ynx8TnQhPT1DfHx6ZSE9PVApJiYoZS5ibGVuZEZ1bmNTZXBhcmF0ZShkdFtRdF0sZHRbQ2VdLGR0W050XSxkdFt6ZV0pLHg9UXQsYj1DZSxDPU50LFA9emUpLF89YXQsaz1udWxsfWZ1bmN0aW9uIHB0KGF0LHNlKXthdC5zaWRlPT09TDE/S3QoMjg4NCk6bHQoMjg4NCk7bGV0IFF0PWF0LnNpZGU9PT1JaTtzZSYmKFF0PSFRdCksaHQoUXQpLGF0LmJsZW5kaW5nPT09VjMmJmF0LnRyYW5zcGFyZW50PT09ITE/cSgkZCk6cShhdC5ibGVuZGluZyxhdC5ibGVuZEVxdWF0aW9uLGF0LmJsZW5kU3JjLGF0LmJsZW5kRHN0LGF0LmJsZW5kRXF1YXRpb25BbHBoYSxhdC5ibGVuZFNyY0FscGhhLGF0LmJsZW5kRHN0QWxwaGEsYXQucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoYXQuZGVwdGhGdW5jKSxsLnNldFRlc3QoYXQuZGVwdGhUZXN0KSxsLnNldE1hc2soYXQuZGVwdGhXcml0ZSkscy5zZXRNYXNrKGF0LmNvbG9yV3JpdGUpO2xldCBDZT1hdC5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KENlKSxDZSYmKGMuc2V0TWFzayhhdC5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoYXQuc3RlbmNpbEZ1bmMsYXQuc3RlbmNpbFJlZixhdC5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoYXQuc3RlbmNpbEZhaWwsYXQuc3RlbmNpbFpGYWlsLGF0LnN0ZW5jaWxaUGFzcykpLGllKGF0LnBvbHlnb25PZmZzZXQsYXQucG9seWdvbk9mZnNldEZhY3RvcixhdC5wb2x5Z29uT2Zmc2V0VW5pdHMpLGF0LmFscGhhVG9Db3ZlcmFnZT09PSEwP2x0KDMyOTI2KTpLdCgzMjkyNil9ZnVuY3Rpb24gaHQoYXQpe08hPT1hdCYmKGF0P2UuZnJvbnRGYWNlKDIzMDQpOmUuZnJvbnRGYWNlKDIzMDUpLE89YXQpfWZ1bmN0aW9uIHd0KGF0KXthdCE9PU9oZT8obHQoMjg4NCksYXQhPT1EJiYoYXQ9PT1TdXQ/ZS5jdWxsRmFjZSgxMDI5KTphdD09PXpoZT9lLmN1bGxGYWNlKDEwMjgpOmUuY3VsbEZhY2UoMTAzMikpKTpLdCgyODg0KSxEPWF0fWZ1bmN0aW9uIGt0KGF0KXthdCE9PUImJihGJiZlLmxpbmVXaWR0aChhdCksQj1hdCl9ZnVuY3Rpb24gaWUoYXQsc2UsUXQpe2F0PyhsdCgzMjgyMyksKEkhPT1zZXx8TCE9PVF0KSYmKGUucG9seWdvbk9mZnNldChzZSxRdCksST1zZSxMPVF0KSk6S3QoMzI4MjMpfWZ1bmN0aW9uIGVlKGF0KXthdD9sdCgzMDg5KTpLdCgzMDg5KX1mdW5jdGlvbiBMZShhdCl7YXQ9PT12b2lkIDAmJihhdD0zMzk4NCtSLTEpLFchPT1hdCYmKGUuYWN0aXZlVGV4dHVyZShhdCksVz1hdCl9ZnVuY3Rpb24gYXIoYXQsc2Upe1c9PT1udWxsJiZMZSgpO2xldCBRdD1aW1ddO1F0PT09dm9pZCAwJiYoUXQ9e3R5cGU6dm9pZCAwLHRleHR1cmU6dm9pZCAwfSxaW1ddPVF0KSwoUXQudHlwZSE9PWF0fHxRdC50ZXh0dXJlIT09c2UpJiYoZS5iaW5kVGV4dHVyZShhdCxzZXx8TXRbYXRdKSxRdC50eXBlPWF0LFF0LnRleHR1cmU9c2UpfWZ1bmN0aW9uIGZyKCl7bGV0IGF0PVpbV107YXQhPT12b2lkIDAmJmF0LnR5cGUhPT12b2lkIDAmJihlLmJpbmRUZXh0dXJlKGF0LnR5cGUsbnVsbCksYXQudHlwZT12b2lkIDAsYXQudGV4dHVyZT12b2lkIDApfWZ1bmN0aW9uIHR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkKCl7dHJ5e2UudGV4U3ViSW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEl0KCl7dHJ5e2UudGV4U3ViSW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uICR0KCl7dHJ5e2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBoZSgpe3RyeXtlLnRleFN0b3JhZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIFR0KCl7dHJ5e2UudGV4U3RvcmFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gYmUoKXt0cnl7ZS50ZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gbnQoKXt0cnl7ZS50ZXhJbWFnZTNELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gQ3QoYXQpe3N0LmVxdWFscyhhdCk9PT0hMSYmKGUuc2Npc3NvcihhdC54LGF0LnksYXQueixhdC53KSxzdC5jb3B5KGF0KSl9ZnVuY3Rpb24gV3QoYXQpe1N0LmVxdWFscyhhdCk9PT0hMSYmKGUudmlld3BvcnQoYXQueCxhdC55LGF0LnosYXQudyksU3QuY29weShhdCkpfWZ1bmN0aW9uIGZlKCl7ZS5kaXNhYmxlKDMwNDIpLGUuZGlzYWJsZSgyODg0KSxlLmRpc2FibGUoMjkyOSksZS5kaXNhYmxlKDMyODIzKSxlLmRpc2FibGUoMzA4OSksZS5kaXNhYmxlKDI5NjApLGUuZGlzYWJsZSgzMjkyNiksZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSxlLmJsZW5kRnVuYygxLDApLGUuYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksZS5jb2xvck1hc2soITAsITAsITAsITApLGUuY2xlYXJDb2xvcigwLDAsMCwwKSxlLmRlcHRoTWFzayghMCksZS5kZXB0aEZ1bmMoNTEzKSxlLmNsZWFyRGVwdGgoMSksZS5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLGUuc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxlLmNsZWFyU3RlbmNpbCgwKSxlLmN1bGxGYWNlKDEwMjkpLGUuZnJvbnRGYWNlKDIzMDUpLGUucG9seWdvbk9mZnNldCgwLDApLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbj09PSEwJiYoZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLGUudXNlUHJvZ3JhbShudWxsKSxlLmxpbmVXaWR0aCgxKSxlLnNjaXNzb3IoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS52aWV3cG9ydCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSx1PXt9LFc9bnVsbCxaPXt9LGg9e30sZj1uZXcgV2Vha01hcCxwPVtdLGQ9bnVsbCxnPSExLF89bnVsbCx5PW51bGwseD1udWxsLGI9bnVsbCxTPW51bGwsQz1udWxsLFA9bnVsbCxrPSExLE89bnVsbCxEPW51bGwsQj1udWxsLEk9bnVsbCxMPW51bGwsc3Quc2V0KDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLFN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxzLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6cyxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOmx0LGRpc2FibGU6S3QsYmluZEZyYW1lYnVmZmVyOl90LGRyYXdCdWZmZXJzOmN0LHVzZVByb2dyYW06WCxzZXRCbGVuZGluZzpxLHNldE1hdGVyaWFsOnB0LHNldEZsaXBTaWRlZDpodCxzZXRDdWxsRmFjZTp3dCxzZXRMaW5lV2lkdGg6a3Qsc2V0UG9seWdvbk9mZnNldDppZSxzZXRTY2lzc29yVGVzdDplZSxhY3RpdmVUZXh0dXJlOkxlLGJpbmRUZXh0dXJlOmFyLHVuYmluZFRleHR1cmU6ZnIsY29tcHJlc3NlZFRleEltYWdlMkQ6dHQsdGV4SW1hZ2UyRDpiZSx0ZXhJbWFnZTNEOm50LHRleFN0b3JhZ2UyRDpoZSx0ZXhTdG9yYWdlM0Q6VHQsdGV4U3ViSW1hZ2UyRDokLHRleFN1YkltYWdlM0Q6SXQsY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6JHQsc2Npc3NvcjpDdCx2aWV3cG9ydDpXdCxyZXNldDpmZX19ZnVuY3Rpb24gVGdyKGUsdCxyLG4saSxvLGEpe2xldCBzPWkuaXNXZWJHTDIsbD1pLm1heFRleHR1cmVzLGM9aS5tYXhDdWJlbWFwU2l6ZSx1PWkubWF4VGV4dHVyZVNpemUsaD1pLm1heFNhbXBsZXMscD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxkPW5ldyBXZWFrTWFwLGcsXz0hMTt0cnl7Xz10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzIT0idW5kZWZpbmVkIiYmbmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpLmdldENvbnRleHQoIjJkIikhPT1udWxsfWNhdGNoKHR0KXt9ZnVuY3Rpb24geSh0dCwkKXtyZXR1cm4gXz9uZXcgT2Zmc2NyZWVuQ2FudmFzKHR0LCQpOnQ2KCJjYW52YXMiKX1mdW5jdGlvbiB4KHR0LCQsSXQsJHQpe2xldCBoZT0xO2lmKCh0dC53aWR0aD4kdHx8dHQuaGVpZ2h0PiR0KSYmKGhlPSR0L01hdGgubWF4KHR0LndpZHRoLHR0LmhlaWdodCkpLGhlPDF8fCQ9PT0hMClpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwIT0idW5kZWZpbmVkIiYmdHQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IFR0PSQ/TmZlOk1hdGguZmxvb3IsYmU9VHQoaGUqdHQud2lkdGgpLG50PVR0KGhlKnR0LmhlaWdodCk7Zz09PXZvaWQgMCYmKGc9eShiZSxudCkpO2xldCBDdD1JdD95KGJlLG50KTpnO3JldHVybiBDdC53aWR0aD1iZSxDdC5oZWlnaHQ9bnQsQ3QuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodHQsMCwwLGJlLG50KSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK3R0LndpZHRoKyJ4Iit0dC5oZWlnaHQrIikgdG8gKCIrYmUrIngiK250KyIpLiIpLEN0fWVsc2UgcmV0dXJuImRhdGEiaW4gdHQmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogSW1hZ2UgaW4gRGF0YVRleHR1cmUgaXMgdG9vIGJpZyAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpLiIpLHR0O3JldHVybiB0dH1mdW5jdGlvbiBiKHR0KXtyZXR1cm4gWnV0KHR0LndpZHRoKSYmWnV0KHR0LmhlaWdodCl9ZnVuY3Rpb24gUyh0dCl7cmV0dXJuIHM/ITE6dHQud3JhcFMhPT1Kb3x8dHQud3JhcFQhPT1Kb3x8dHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIEModHQsJCl7cmV0dXJuIHR0LmdlbmVyYXRlTWlwbWFwcyYmJCYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PWlpfWZ1bmN0aW9uIFAodHQpe2UuZ2VuZXJhdGVNaXBtYXAodHQpfWZ1bmN0aW9uIGsodHQsJCxJdCwkdCxoZT0hMSl7aWYocz09PSExKXJldHVybiAkO2lmKHR0IT09bnVsbCl7aWYoZVt0dF0hPT12b2lkIDApcmV0dXJuIGVbdHRdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIit0dCsiJyIpfWxldCBUdD0kO3JldHVybiAkPT09NjQwMyYmKEl0PT09NTEyNiYmKFR0PTMzMzI2KSxJdD09PTUxMzEmJihUdD0zMzMyNSksSXQ9PT01MTIxJiYoVHQ9MzMzMjEpKSwkPT09MzMzMTkmJihJdD09PTUxMjYmJihUdD0zMzMyOCksSXQ9PT01MTMxJiYoVHQ9MzMzMjcpLEl0PT09NTEyMSYmKFR0PTMzMzIzKSksJD09PTY0MDgmJihJdD09PTUxMjYmJihUdD0zNDgzNiksSXQ9PT01MTMxJiYoVHQ9MzQ4NDIpLEl0PT09NTEyMSYmKFR0PSR0PT09V24mJmhlPT09ITE/MzU5MDc6MzI4NTYpLEl0PT09MzI4MTkmJihUdD0zMjg1NCksSXQ9PT0zMjgyMCYmKFR0PTMyODU1KSksKFR0PT09MzMzMjV8fFR0PT09MzMzMjZ8fFR0PT09MzMzMjd8fFR0PT09MzMzMjh8fFR0PT09MzQ4NDJ8fFR0PT09MzQ4MzYpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLFR0fWZ1bmN0aW9uIE8odHQsJCxJdCl7cmV0dXJuIEModHQsSXQpPT09ITB8fHR0LmlzRnJhbWVidWZmZXJUZXh0dXJlJiZ0dC5taW5GaWx0ZXIhPT1MaSYmdHQubWluRmlsdGVyIT09aWk/TWF0aC5sb2cyKE1hdGgubWF4KCQud2lkdGgsJC5oZWlnaHQpKSsxOnR0Lm1pcG1hcHMhPT12b2lkIDAmJnR0Lm1pcG1hcHMubGVuZ3RoPjA/dHQubWlwbWFwcy5sZW5ndGg6dHQuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheSh0dC5pbWFnZSk/JC5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIEQodHQpe3JldHVybiB0dD09PUxpfHx0dD09PW9VfHx0dD09PWFVPzk3Mjg6OTcyOX1mdW5jdGlvbiBCKHR0KXtsZXQgJD10dC50YXJnZXQ7JC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSxMKCQpLCQuaXNWaWRlb1RleHR1cmUmJmQuZGVsZXRlKCQpLGEubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gSSh0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSSksUigkKX1mdW5jdGlvbiBMKHR0KXtsZXQgJD1uLmdldCh0dCk7JC5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkLl9fd2ViZ2xUZXh0dXJlKSxuLnJlbW92ZSh0dCkpfWZ1bmN0aW9uIFIodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO2lmKCEhdHQpe2lmKCR0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYoZS5kZWxldGVUZXh0dXJlKCR0Ll9fd2ViZ2xUZXh0dXJlKSxhLm1lbW9yeS50ZXh0dXJlcy0tKSx0dC5kZXB0aFRleHR1cmUmJnR0LmRlcHRoVGV4dHVyZS5kaXNwb3NlKCksdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBoZT0wO2hlPDY7aGUrKyllLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcltoZV0pLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyW2hlXSk7ZWxzZSBlLmRlbGV0ZUZyYW1lYnVmZmVyKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksSXQuX193ZWJnbERlcHRoYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhidWZmZXIpLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciYmZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYodHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IGhlPTAsVHQ9JC5sZW5ndGg7aGU8VHQ7aGUrKyl7bGV0IGJlPW4uZ2V0KCRbaGVdKTtiZS5fX3dlYmdsVGV4dHVyZSYmKGUuZGVsZXRlVGV4dHVyZShiZS5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksbi5yZW1vdmUoJFtoZV0pfW4ucmVtb3ZlKCQpLG4ucmVtb3ZlKHR0KX19bGV0IEY9MDtmdW5jdGlvbiB6KCl7Rj0wfWZ1bmN0aW9uIFUoKXtsZXQgdHQ9RjtyZXR1cm4gdHQ+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK3R0KyIgdGV4dHVyZSB1bml0cyB3aGlsZSB0aGlzIEdQVSBzdXBwb3J0cyBvbmx5ICIrbCksRis9MSx0dH1mdW5jdGlvbiBXKHR0LCQpe2xldCBJdD1uLmdldCh0dCk7aWYodHQuaXNWaWRlb1RleHR1cmUmJmt0KHR0KSx0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2xldCAkdD10dC5pbWFnZTtpZigkdD09PXZvaWQgMCljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIHVuZGVmaW5lZCIpO2Vsc2UgaWYoJHQuY29tcGxldGU9PT0hMSljb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKTtlbHNle2x0KEl0LHR0LCQpO3JldHVybn19ci5hY3RpdmVUZXh0dXJlKDMzOTg0KyQpLHIuYmluZFRleHR1cmUoMzU1MyxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gWih0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1ODY2LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBydCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7bHQoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDMyODc5LEl0Ll9fd2ViZ2xUZXh0dXJlKX1mdW5jdGlvbiBvdCh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LnZlcnNpb24+MCYmSXQuX192ZXJzaW9uIT09dHQudmVyc2lvbil7S3QoSXQsdHQsJCk7cmV0dXJufXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM0MDY3LEl0Ll9fd2ViZ2xUZXh0dXJlKX1sZXQgc3Q9e1tYUF06MTA0OTcsW0pvXTozMzA3MSxbJFBdOjMzNjQ4fSxTdD17W0xpXTo5NzI4LFtvVV06OTk4NCxbYVVdOjk5ODYsW2lpXTo5NzI5LFtMaHRdOjk5ODUsW294XTo5OTg3fTtmdW5jdGlvbiBidCh0dCwkLEl0KXtpZihJdD8oZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQyLHN0WyQud3JhcFNdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDMsc3RbJC53cmFwVF0pLCh0dD09PTMyODc5fHx0dD09PTM1ODY2KSYmZS50ZXhQYXJhbWV0ZXJpKHR0LDMyODgyLHN0WyQud3JhcFJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsU3RbJC5tYWdGaWx0ZXJdKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDEsU3RbJC5taW5GaWx0ZXJdKSk6KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MiwzMzA3MSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLDMzMDcxKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MiwzMzA3MSksKCQud3JhcFMhPT1Kb3x8JC53cmFwVCE9PUpvKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MCxEKCQubWFnRmlsdGVyKSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLEQoJC5taW5GaWx0ZXIpKSwkLm1pbkZpbHRlciE9PUxpJiYkLm1pbkZpbHRlciE9PWlpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksdC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCAkdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoJC50eXBlPT09amQmJnQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSExfHxzPT09ITEmJiQudHlwZT09PUMxJiZ0LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT09PSExKXJldHVybjsoJC5hbmlzb3Ryb3B5PjF8fG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYoZS50ZXhQYXJhbWV0ZXJmKHR0LCR0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKCQuYW5pc290cm9weSxpLmdldE1heEFuaXNvdHJvcHkoKSkpLG4uZ2V0KCQpLl9fY3VycmVudEFuaXNvdHJvcHk9JC5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24gTXQodHQsJCl7dHQuX193ZWJnbEluaXQ9PT12b2lkIDAmJih0dC5fX3dlYmdsSW5pdD0hMCwkLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEIpLHR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfWZ1bmN0aW9uIGx0KHR0LCQsSXQpe2xldCAkdD0zNTUzOyQuaXNEYXRhVGV4dHVyZTJEQXJyYXkmJigkdD0zNTg2NiksJC5pc0RhdGFUZXh0dXJlM0QmJigkdD0zMjg3OSksTXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKCR0LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IGhlPVMoJCkmJmIoJC5pbWFnZSk9PT0hMSxUdD14KCQuaW1hZ2UsaGUsITEsdSk7VHQ9aWUoJCxUdCk7bGV0IGJlPWIoVHQpfHxzLG50PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxDdD1vLmNvbnZlcnQoJC50eXBlKSxXdD1rKCQuaW50ZXJuYWxGb3JtYXQsbnQsQ3QsJC5lbmNvZGluZywkLmlzVmlkZW9UZXh0dXJlKTtidCgkdCwkLGJlKTtsZXQgZmUsYXQ9JC5taXBtYXBzLHNlPXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxRdD10dC5fX3ZlcnNpb249PT12b2lkIDAsQ2U9TygkLFR0LGJlKTtpZigkLmlzRGVwdGhUZXh0dXJlKVd0PTY0MDIscz8kLnR5cGU9PT1qZD9XdD0zNjAxMjokLnR5cGU9PT1WUD9XdD0zMzE5MDokLnR5cGU9PT1BMT9XdD0zNTA1NjpXdD0zMzE4OTokLnR5cGU9PT1qZCYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksJC5mb3JtYXQ9PT16MCYmV3Q9PT02NDAyJiYkLnR5cGUhPT1HMyYmJC50eXBlIT09VlAmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZFNob3J0VHlwZSBvciBVbnNpZ25lZEludFR5cGUgZm9yIERlcHRoRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9RzMsQ3Q9by5jb252ZXJ0KCQudHlwZSkpLCQuZm9ybWF0PT09azEmJld0PT09NjQwMiYmKFd0PTM0MDQxLCQudHlwZSE9PUExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRJbnQyNDhUeXBlIGZvciBEZXB0aFN0ZW5jaWxGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLCQudHlwZT1BMSxDdD1vLmNvbnZlcnQoJC50eXBlKSkpLHNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLDEsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LG51bGwpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlKWlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzQ29tcHJlc3NlZFRleHR1cmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sJC5mb3JtYXQhPT1Rbz9udCE9PW51bGw/c2U/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsZmUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLGZlLmRhdGEpOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byBsb2FkIHVuc3VwcG9ydGVkIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQgaW4gLnVwbG9hZFRleHR1cmUoKSIpOnNlP3IudGV4U3ViSW1hZ2UyRCgzNTUzLFB0LDAsMCxmZS53aWR0aCxmZS5oZWlnaHQsbnQsQ3QsZmUuZGF0YSk6ci50ZXhJbWFnZTJEKDM1NTMsUHQsV3QsZmUud2lkdGgsZmUuaGVpZ2h0LDAsbnQsQ3QsZmUuZGF0YSl9ZWxzZSBpZigkLmlzRGF0YVRleHR1cmUyREFycmF5KXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzU4NjYsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzNTg2NiwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0RhdGFUZXh0dXJlM0Qpc2U/KFF0JiZyLnRleFN0b3JhZ2UzRCgzMjg3OSxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgpLHIudGV4U3ViSW1hZ2UzRCgzMjg3OSwwLDAsMCwwLFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCxudCxDdCxUdC5kYXRhKSk6ci50ZXhJbWFnZTNEKDMyODc5LDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLDAsbnQsQ3QsVHQuZGF0YSk7ZWxzZSBpZigkLmlzRnJhbWVidWZmZXJUZXh0dXJlKXNlJiZRdD9yLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKGF0Lmxlbmd0aD4wJiZiZSl7c2UmJlF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LGF0WzBdLndpZHRoLGF0WzBdLmhlaWdodCk7Zm9yKGxldCBQdD0wLE50PWF0Lmxlbmd0aDtQdDxOdDtQdCsrKWZlPWF0W1B0XSxzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsbnQsQ3QsZmUpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LG50LEN0LGZlKTskLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHNlPyhRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpLHIudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLG50LEN0LFR0KSk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxudCxDdCxUdCk7QygkLGJlKSYmUCgkdCksdHQuX192ZXJzaW9uPSQudmVyc2lvbiwkLm9uVXBkYXRlJiYkLm9uVXBkYXRlKCQpfWZ1bmN0aW9uIEt0KHR0LCQsSXQpe2lmKCQuaW1hZ2UubGVuZ3RoIT09NilyZXR1cm47TXQodHQsJCksci5hY3RpdmVUZXh0dXJlKDMzOTg0K0l0KSxyLmJpbmRUZXh0dXJlKDM0MDY3LHR0Ll9fd2ViZ2xUZXh0dXJlKSxlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLGUucGl4ZWxTdG9yZWkoMzc0NDEsJC5wcmVtdWx0aXBseUFscGhhKSxlLnBpeGVsU3RvcmVpKDMzMTcsJC51bnBhY2tBbGlnbm1lbnQpLGUucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0ICR0PSQmJigkLmlzQ29tcHJlc3NlZFRleHR1cmV8fCQuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksaGU9JC5pbWFnZVswXSYmJC5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLFR0PVtdO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspISR0JiYhaGU/VHRbUHRdPXgoJC5pbWFnZVtQdF0sITEsITAsYyk6VHRbUHRdPWhlPyQuaW1hZ2VbUHRdLmltYWdlOiQuaW1hZ2VbUHRdLFR0W1B0XT1pZSgkLFR0W1B0XSk7bGV0IGJlPVR0WzBdLG50PWIoYmUpfHxzLEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9cyYmJC5pc1ZpZGVvVGV4dHVyZSE9PSEwLHNlPXR0Ll9fdmVyc2lvbj09PXZvaWQgMCxRdD1PKCQsYmUsbnQpO2J0KDM0MDY3LCQsbnQpO2xldCBDZTtpZigkdCl7YXQmJnNlJiZyLnRleFN0b3JhZ2UyRCgzNDA2NyxRdCxmZSxiZS53aWR0aCxiZS5oZWlnaHQpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0Kyspe0NlPVR0W1B0XS5taXBtYXBzO2ZvcihsZXQgTnQ9MDtOdDxDZS5sZW5ndGg7TnQrKyl7bGV0IHplPUNlW050XTskLmZvcm1hdCE9PVFvP0N0IT09bnVsbD9hdD9yLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsemUuZGF0YSk6ci5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCx6ZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50LDAsMCx6ZS53aWR0aCx6ZS5oZWlnaHQsQ3QsV3QsemUuZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50LGZlLHplLndpZHRoLHplLmhlaWdodCwwLEN0LFd0LHplLmRhdGEpfX19ZWxzZXtDZT0kLm1pcG1hcHMsYXQmJnNlJiYoQ2UubGVuZ3RoPjAmJlF0Kyssci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsVHRbMF0ud2lkdGgsVHRbMF0uaGVpZ2h0KSk7Zm9yKGxldCBQdD0wO1B0PDY7UHQrKylpZihoZSl7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLFR0W1B0XS53aWR0aCxUdFtQdF0uaGVpZ2h0LEN0LFd0LFR0W1B0XS5kYXRhKTpyLnRleEltYWdlMkQoMzQwNjkrUHQsMCxmZSxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCwwLEN0LFd0LFR0W1B0XS5kYXRhKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB5bj1DZVtOdF0uaW1hZ2VbUHRdLmltYWdlO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCx5bi53aWR0aCx5bi5oZWlnaHQsQ3QsV3QseW4uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUseW4ud2lkdGgseW4uaGVpZ2h0LDAsQ3QsV3QseW4uZGF0YSl9fWVsc2V7YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LDAsMCwwLEN0LFd0LFR0W1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsQ3QsV3QsVHRbUHRdKTtmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07YXQ/ci50ZXhTdWJJbWFnZTJEKDM0MDY5K1B0LE50KzEsMCwwLEN0LFd0LHplLmltYWdlW1B0XSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LE50KzEsZmUsQ3QsV3QsemUuaW1hZ2VbUHRdKX19fUMoJCxudCkmJlAoMzQwNjcpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBfdCh0dCwkLEl0LCR0LGhlKXtsZXQgVHQ9by5jb252ZXJ0KEl0LmZvcm1hdCxJdC5lbmNvZGluZyksYmU9by5jb252ZXJ0KEl0LnR5cGUpLG50PWsoSXQuaW50ZXJuYWxGb3JtYXQsVHQsYmUsSXQuZW5jb2RpbmcpO24uZ2V0KCQpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KGhlPT09MzI4Nzl8fGhlPT09MzU4NjY/ci50ZXhJbWFnZTNEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwkLmRlcHRoLDAsVHQsYmUsbnVsbCk6ci50ZXhJbWFnZTJEKGhlLDAsbnQsJC53aWR0aCwkLmhlaWdodCwwLFR0LGJlLG51bGwpKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwLHd0KCQpKTplLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLCR0LGhlLG4uZ2V0KEl0KS5fX3dlYmdsVGV4dHVyZSwwKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBjdCh0dCwkLEl0KXtpZihlLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsdHQpLCQuZGVwdGhCdWZmZXImJiEkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD0zMzE4OTtpZihJdHx8JC51c2VSZW5kZXJUb1RleHR1cmUpe2xldCBoZT0kLmRlcHRoVGV4dHVyZTtoZSYmaGUuaXNEZXB0aFRleHR1cmUmJihoZS50eXBlPT09amQ/JHQ9MzYwMTI6aGUudHlwZT09PVZQJiYoJHQ9MzMxOTApKTtsZXQgVHQ9d3QoJCk7JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsJHQsJC53aWR0aCwkLmhlaWdodCl9ZWxzZSBlLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsJHQsJC53aWR0aCwkLmhlaWdodCk7ZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSx0dCl9ZWxzZSBpZigkLmRlcHRoQnVmZmVyJiYkLnN0ZW5jaWxCdWZmZXIpe2xldCAkdD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsJHQsMzUwNTYsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLCQud2lkdGgsJC5oZWlnaHQpLGUuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsdHQpfWVsc2V7bGV0ICR0PSQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwPyQudGV4dHVyZVswXTokLnRleHR1cmUsaGU9by5jb252ZXJ0KCR0LmZvcm1hdCwkdC5lbmNvZGluZyksVHQ9by5jb252ZXJ0KCR0LnR5cGUpLGJlPWsoJHQuaW50ZXJuYWxGb3JtYXQsaGUsVHQsJHQuZW5jb2RpbmcpLG50PXd0KCQpO0l0JiYkLnVzZVJlbmRlcmJ1ZmZlcj9lLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTokLnVzZVJlbmRlclRvVGV4dHVyZT9wLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxudCxiZSwkLndpZHRoLCQuaGVpZ2h0KTplLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsYmUsJC53aWR0aCwkLmhlaWdodCl9ZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIFgodHQsJCl7aWYoJCYmJC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx0dCksISgkLmRlcHRoVGV4dHVyZSYmJC5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghbi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHwkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PSQud2lkdGh8fCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PSQuaGVpZ2h0KSYmKCQuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPSQud2lkdGgsJC5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PSQuaGVpZ2h0LCQuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxXKCQuZGVwdGhUZXh0dXJlLDApO2xldCAkdD1uLmdldCgkLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsaGU9d3QoJCk7aWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09ejApJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLCR0LDApO2Vsc2UgaWYoJC5kZXB0aFRleHR1cmUuZm9ybWF0PT09azEpJC51c2VSZW5kZXJUb1RleHR1cmU/cC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMsJHQsMCxoZSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLCR0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBldCh0dCl7bGV0ICQ9bi5nZXQodHQpLEl0PXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITA7aWYodHQuZGVwdGhUZXh0dXJlJiYhJC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyKXtpZihJdCl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7WCgkLl9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCl9ZWxzZSBpZihJdCl7JC5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCAkdD0wOyR0PDY7JHQrKylyLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlclskdF0pLCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XT1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KCQuX193ZWJnbERlcHRoYnVmZmVyWyR0XSx0dCwhMSl9ZWxzZSByLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCwkLl9fd2ViZ2xGcmFtZWJ1ZmZlciksJC5fX3dlYmdsRGVwdGhidWZmZXI9ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlcix0dCwhMSk7ci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gZHQodHQsJCxJdCl7bGV0ICR0PW4uZ2V0KHR0KTskIT09dm9pZCAwJiZfdCgkdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsdHQudGV4dHVyZSwzNjA2NCwzNTUzKSxJdCE9PXZvaWQgMCYmZXQodHQpfWZ1bmN0aW9uIHEodHQpe2xldCAkPXR0LnRleHR1cmUsSXQ9bi5nZXQodHQpLCR0PW4uZ2V0KCQpO3R0LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMhPT0hMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoJHQuX193ZWJnbFRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCkpLCR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sYS5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IGhlPXR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVHQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwLGJlPSQuaXNEYXRhVGV4dHVyZTNEfHwkLmlzRGF0YVRleHR1cmUyREFycmF5LG50PWIodHQpfHxzO2lmKGhlKXtJdC5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdPWUuY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksVHQpaWYoaS5kcmF3QnVmZmVycyl7bGV0IEN0PXR0LnRleHR1cmU7Zm9yKGxldCBXdD0wLGZlPUN0Lmxlbmd0aDtXdDxmZTtXdCsrKXtsZXQgYXQ9bi5nZXQoQ3RbV3RdKTthdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKGF0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpLGEubWVtb3J5LnRleHR1cmVzKyspfX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMiBvciBXRUJHTF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uLiIpO2Vsc2UgaWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe0l0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcj1lLmNyZWF0ZUZyYW1lYnVmZmVyKCksSXQuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IEN0PW8uY29udmVydCgkLmZvcm1hdCwkLmVuY29kaW5nKSxXdD1vLmNvbnZlcnQoJC50eXBlKSxmZT1rKCQuaW50ZXJuYWxGb3JtYXQsQ3QsV3QsJC5lbmNvZGluZyksYXQ9d3QodHQpO2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLGF0LGZlLHR0LndpZHRoLHR0LmhlaWdodCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpLHR0LmRlcHRoQnVmZmVyJiYoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLHR0LCEwKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtpZihoZSl7ci5iaW5kVGV4dHVyZSgzNDA2NywkdC5fX3dlYmdsVGV4dHVyZSksYnQoMzQwNjcsJCxudCk7Zm9yKGxldCBDdD0wO0N0PDY7Q3QrKylfdChJdC5fX3dlYmdsRnJhbWVidWZmZXJbQ3RdLHR0LCQsMzYwNjQsMzQwNjkrQ3QpO0MoJCxudCkmJlAoMzQwNjcpLHIudW5iaW5kVGV4dHVyZSgpfWVsc2UgaWYoVHQpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PUN0W1d0XSxzZT1uLmdldChhdCk7ci5iaW5kVGV4dHVyZSgzNTUzLHNlLl9fd2ViZ2xUZXh0dXJlKSxidCgzNTUzLGF0LG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsYXQsMzYwNjQrV3QsMzU1MyksQyhhdCxudCkmJlAoMzU1Myl9ci51bmJpbmRUZXh0dXJlKCl9ZWxzZXtsZXQgQ3Q9MzU1MztiZSYmKHM/Q3Q9JC5pc0RhdGFUZXh0dXJlM0Q/MzI4Nzk6MzU4NjY6Y29uc29sZS53YXJuKCJUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkgb25seSBzdXBwb3J0ZWQgd2l0aCBXZWJHTDIuIikpLHIuYmluZFRleHR1cmUoQ3QsJHQuX193ZWJnbFRleHR1cmUpLGJ0KEN0LCQsbnQpLF90KEl0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcix0dCwkLDM2MDY0LEN0KSxDKCQsbnQpJiZQKEN0KSxyLnVuYmluZFRleHR1cmUoKX10dC5kZXB0aEJ1ZmZlciYmZXQodHQpfWZ1bmN0aW9uIHB0KHR0KXtsZXQgJD1iKHR0KXx8cyxJdD10dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dHQudGV4dHVyZTpbdHQudGV4dHVyZV07Zm9yKGxldCAkdD0wLGhlPUl0Lmxlbmd0aDskdDxoZTskdCsrKXtsZXQgVHQ9SXRbJHRdO2lmKEMoVHQsJCkpe2xldCBiZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLG50PW4uZ2V0KFR0KS5fX3dlYmdsVGV4dHVyZTtyLmJpbmRUZXh0dXJlKGJlLG50KSxQKGJlKSxyLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIGh0KHR0KXtpZih0dC51c2VSZW5kZXJidWZmZXIpaWYocyl7bGV0ICQ9dHQud2lkdGgsSXQ9dHQuaGVpZ2h0LCR0PTE2Mzg0LGhlPVszNjA2NF0sVHQ9dHQuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5Njt0dC5kZXB0aEJ1ZmZlciYmaGUucHVzaChUdCksdHQuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fCh0dC5kZXB0aEJ1ZmZlciYmKCR0fD0yNTYpLHR0LnN0ZW5jaWxCdWZmZXImJigkdHw9MTAyNCkpO2xldCBiZT1uLmdldCh0dCk7ci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsRnJhbWVidWZmZXIpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYoZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1R0XSksZS5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW1R0XSkpLGUuYmxpdEZyYW1lYnVmZmVyKDAsMCwkLEl0LDAsMCwkLEl0LCR0LDk3MjgpLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LGhlKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxyLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxiZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9ZnVuY3Rpb24gd3QodHQpe3JldHVybiBzJiYodHQudXNlUmVuZGVyYnVmZmVyfHx0dC51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGgsdHQuc2FtcGxlcyk6MH1mdW5jdGlvbiBrdCh0dCl7bGV0ICQ9YS5yZW5kZXIuZnJhbWU7ZC5nZXQodHQpIT09JCYmKGQuc2V0KHR0LCQpLHR0LnVwZGF0ZSgpKX1mdW5jdGlvbiBpZSh0dCwkKXtsZXQgSXQ9dHQuZW5jb2RpbmcsJHQ9dHQuZm9ybWF0LGhlPXR0LnR5cGU7cmV0dXJuIHR0LmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8dHQuaXNWaWRlb1RleHR1cmU9PT0hMHx8dHQuZm9ybWF0PT09c1V8fEl0IT09UWQmJihJdD09PVduP3M9PT0hMT90LmhhcygiRVhUX3NSR0IiKT09PSEwJiYkdD09PVFvPyh0dC5mb3JtYXQ9c1UsdHQubWluRmlsdGVyPWlpLHR0LmdlbmVyYXRlTWlwbWFwcz0hMSk6JD1LZi5zUkdCVG9MaW5lYXIoJCk6KCR0IT09UW98fGhlIT09WmQpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixJdCkpLCR9bGV0IGVlPSExLExlPSExO2Z1bmN0aW9uIGFyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoZWU9PT0hMSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLGVlPSEwKSx0dD10dC50ZXh0dXJlKSxXKHR0LCQpfWZ1bmN0aW9uIGZyKHR0LCQpe3R0JiZ0dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKExlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksTGU9ITApLHR0PXR0LnRleHR1cmUpLG90KHR0LCQpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1VLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1XLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9Wix0aGlzLnNldFRleHR1cmUzRD1ydCx0aGlzLnNldFRleHR1cmVDdWJlPW90LHRoaXMucmViaW5kVGV4dHVyZXM9ZHQsdGhpcy5zZXR1cFJlbmRlclRhcmdldD1xLHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPXB0LHRoaXMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQ9aHQsdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPWV0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9X3QsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWFyLHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZyfWZ1bmN0aW9uICRmZShlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKG8sYT1udWxsKXtsZXQgcztpZihvPT09WmQpcmV0dXJuIDUxMjE7aWYobz09PWRmZSlyZXR1cm4gMzI4MTk7aWYobz09PW1mZSlyZXR1cm4gMzI4MjA7aWYobz09PWhmZSlyZXR1cm4gNTEyMDtpZihvPT09ZmZlKXJldHVybiA1MTIyO2lmKG89PT1HMylyZXR1cm4gNTEyMztpZihvPT09cGZlKXJldHVybiA1MTI0O2lmKG89PT1WUClyZXR1cm4gNTEyNTtpZihvPT09amQpcmV0dXJuIDUxMjY7aWYobz09PUMxKXJldHVybiBuPzUxMzE6KHM9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxzIT09bnVsbD9zLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKG89PT1nZmUpcmV0dXJuIDY0MDY7aWYobz09PVFvKXJldHVybiA2NDA4O2lmKG89PT1fZmUpcmV0dXJuIDY0MDk7aWYobz09PXlmZSlyZXR1cm4gNjQxMDtpZihvPT09ejApcmV0dXJuIDY0MDI7aWYobz09PWsxKXJldHVybiAzNDA0MTtpZihvPT09dmZlKXJldHVybiA2NDAzO2lmKG89PT1zVSlyZXR1cm4gcz10LmdldCgiRVhUX3NSR0IiKSxzIT09bnVsbD9zLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYobz09PXhmZSlyZXR1cm4gMzYyNDQ7aWYobz09PWJmZSlyZXR1cm4gMzMzMTk7aWYobz09PXdmZSlyZXR1cm4gMzMzMjA7aWYobz09PVNmZSlyZXR1cm4gMzYyNDk7aWYobz09PUpWfHxvPT09UVZ8fG89PT10VXx8bz09PWVVKWlmKGE9PT1XbilpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0Y19zcmdiIikscyE9PW51bGwpe2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKG89PT1lVSlyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNlIHJldHVybiBudWxsO2Vsc2UgaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKSxzIT09bnVsbCl7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PVFWKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKG89PT10VSlyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZihvPT09ZVUpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09UHV0fHxvPT09SXV0fHxvPT09THV0fHxvPT09a3V0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLHMhPT1udWxsKXtpZihvPT09UHV0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYobz09PWt1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31lbHNlIHJldHVybiBudWxsO2lmKG89PT1NZmUpcmV0dXJuIHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIikscyE9PW51bGw/cy5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYobz09PVJ1dHx8bz09PU51dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjIikscyE9PW51bGwpe2lmKG89PT1SdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfRVRDMjpzLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKG89PT1OdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOnMuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKG89PT1EdXR8fG89PT1PdXR8fG89PT16dXR8fG89PT1GdXR8fG89PT1CdXR8fG89PT1IdXR8fG89PT1WdXR8fG89PT1VdXR8fG89PT1xdXR8fG89PT1HdXR8fG89PT1XdXR8fG89PT1ZdXR8fG89PT1qdXR8fG89PT1YdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2FzdGMiKSxzIT09bnVsbCl7aWYobz09PUR1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihvPT09T3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDRfS0hSO2lmKG89PT16dXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYobz09PUZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihvPT09QnV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4Nl9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDZfS0hSO2lmKG89PT1IdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYobz09PVZ1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihvPT09VXV0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDhfS0hSO2lmKG89PT1xdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09V24/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVduP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKG89PT1qdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKG89PT1YdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTJfS0hSfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PSR1dClpZihzPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIikscyE9PW51bGwpe2lmKG89PT0kdXQpcmV0dXJuIGE9PT1Xbj9zLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDpzLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKG89PT1BMSlyZXR1cm4gbj8zNDA0Mjoocz10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLHMhPT1udWxsP3MuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6aX19dmFyIG42PWNsYXNzIGV4dGVuZHMgVWl7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O242LnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBYZD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O1hkLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBDZ3I9e3R5cGU6Im1vdmUifSxxUD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RhcmdldFJheT1udWxsLHRoaXMuX2dyaXA9bnVsbCx0aGlzLl9oYW5kPW51bGx9Z2V0SGFuZFNwYWNlKCl7cmV0dXJuIHRoaXMuX2hhbmQ9PT1udWxsJiYodGhpcy5faGFuZD1uZXcgWGQsdGhpcy5faGFuZC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2hhbmQudmlzaWJsZT0hMSx0aGlzLl9oYW5kLmpvaW50cz17fSx0aGlzLl9oYW5kLmlucHV0U3RhdGU9e3BpbmNoaW5nOiExfSksdGhpcy5faGFuZH1nZXRUYXJnZXRSYXlTcGFjZSgpe3JldHVybiB0aGlzLl90YXJnZXRSYXk9PT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5PW5ldyBYZCx0aGlzLl90YXJnZXRSYXkubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSx0aGlzLl90YXJnZXRSYXkuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fdGFyZ2V0UmF5fWdldEdyaXBTcGFjZSgpe3JldHVybiB0aGlzLl9ncmlwPT09bnVsbCYmKHRoaXMuX2dyaXA9bmV3IFhkLHRoaXMuX2dyaXAubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9ncmlwLnZpc2libGU9ITEsdGhpcy5fZ3JpcC5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmxpbmVhclZlbG9jaXR5PW5ldyBqLHRoaXMuX2dyaXAuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAuYW5ndWxhclZlbG9jaXR5PW5ldyBqKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheSE9PW51bGwmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2dyaXAhPT1udWxsJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksdGhpcy5faGFuZCE9PW51bGwmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSx0aGlzLl90YXJnZXRSYXkhPT1udWxsJiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLHRoaXMuX2dyaXAhPT1udWxsJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSx0aGlzLl9oYW5kIT09bnVsbCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxyLG4pe2xldCBpPW51bGwsbz1udWxsLGE9bnVsbCxzPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJnIuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUhPT0idmlzaWJsZS1ibHVycmVkIilpZihzIT09bnVsbCYmKGk9ci5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsbiksaSE9PW51bGwmJihzLm1hdHJpeC5mcm9tQXJyYXkoaS50cmFuc2Zvcm0ubWF0cml4KSxzLm1hdHJpeC5kZWNvbXBvc2Uocy5wb3NpdGlvbixzLnJvdGF0aW9uLHMuc2NhbGUpLGkubGluZWFyVmVsb2NpdHk/KHMuaGFzTGluZWFyVmVsb2NpdHk9ITAscy5saW5lYXJWZWxvY2l0eS5jb3B5KGkubGluZWFyVmVsb2NpdHkpKTpzLmhhc0xpbmVhclZlbG9jaXR5PSExLGkuYW5ndWxhclZlbG9jaXR5PyhzLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxzLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KGkuYW5ndWxhclZlbG9jaXR5KSk6cy5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KENncikpKSxjJiZ0LmhhbmQpe2E9ITA7Zm9yKGxldCBnIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IF89ci5nZXRKb2ludFBvc2UoZyxuKTtpZihjLmpvaW50c1tnLmpvaW50TmFtZV09PT12b2lkIDApe2xldCB4PW5ldyBYZDt4Lm1hdHJpeEF1dG9VcGRhdGU9ITEseC52aXNpYmxlPSExLGMuam9pbnRzW2cuam9pbnROYW1lXT14LGMuYWRkKHgpfWxldCB5PWMuam9pbnRzW2cuam9pbnROYW1lXTtfIT09bnVsbCYmKHkubWF0cml4LmZyb21BcnJheShfLnRyYW5zZm9ybS5tYXRyaXgpLHkubWF0cml4LmRlY29tcG9zZSh5LnBvc2l0aW9uLHkucm90YXRpb24seS5zY2FsZSkseS5qb2ludFJhZGl1cz1fLnJhZGl1cykseS52aXNpYmxlPV8hPT1udWxsfWxldCB1PWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0saD1jLmpvaW50c1sidGh1bWItdGlwIl0sZj11LnBvc2l0aW9uLmRpc3RhbmNlVG8oaC5wb3NpdGlvbikscD0uMDIsZD0uMDA1O2MuaW5wdXRTdGF0ZS5waW5jaGluZyYmZj5wK2Q/KGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoZW5kIixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKTohYy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZmPD1wLWQmJihjLmlucHV0U3RhdGUucGluY2hpbmc9ITAsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaHN0YXJ0IixoYW5kZWRuZXNzOnQuaGFuZGVkbmVzcyx0YXJnZXQ6dGhpc30pKX1lbHNlIGwhPT1udWxsJiZ0LmdyaXBTcGFjZSYmKG89ci5nZXRQb3NlKHQuZ3JpcFNwYWNlLG4pLG8hPT1udWxsJiYobC5tYXRyaXguZnJvbUFycmF5KG8udHJhbnNmb3JtLm1hdHJpeCksbC5tYXRyaXguZGVjb21wb3NlKGwucG9zaXRpb24sbC5yb3RhdGlvbixsLnNjYWxlKSxvLmxpbmVhclZlbG9jaXR5PyhsLmhhc0xpbmVhclZlbG9jaXR5PSEwLGwubGluZWFyVmVsb2NpdHkuY29weShvLmxpbmVhclZlbG9jaXR5KSk6bC5oYXNMaW5lYXJWZWxvY2l0eT0hMSxvLmFuZ3VsYXJWZWxvY2l0eT8obC5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsbC5hbmd1bGFyVmVsb2NpdHkuY29weShvLmFuZ3VsYXJWZWxvY2l0eSkpOmwuaGFzQW5ndWxhclZlbG9jaXR5PSExKSk7cmV0dXJuIHMhPT1udWxsJiYocy52aXNpYmxlPWkhPT1udWxsKSxsIT09bnVsbCYmKGwudmlzaWJsZT1vIT09bnVsbCksYyE9PW51bGwmJihjLnZpc2libGU9YSE9PW51bGwpLHRoaXN9fSxuTT1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUpe2lmKHU9dSE9PXZvaWQgMD91OnowLHUhPT16MCYmdSE9PWsxKXRocm93IG5ldyBFcnJvcigiRGVwdGhUZXh0dXJlIGZvcm1hdCBtdXN0IGJlIGVpdGhlciBUSFJFRS5EZXB0aEZvcm1hdCBvciBUSFJFRS5EZXB0aFN0ZW5jaWxGb3JtYXQiKTtuPT09dm9pZCAwJiZ1PT09ejAmJihuPUczKSxuPT09dm9pZCAwJiZ1PT09azEmJihuPUExKSxzdXBlcihudWxsLGksbyxhLHMsbCx1LG4sYyksdGhpcy5pbWFnZT17d2lkdGg6dCxoZWlnaHQ6cn0sdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOkxpLHRoaXMubWluRmlsdGVyPWwhPT12b2lkIDA/bDpMaSx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bk0ucHJvdG90eXBlLmlzRGVwdGhUZXh0dXJlPSEwO3ZhciBlaHQ9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCk7bGV0IG49dGhpcyxpPW51bGwsbz0xLGE9bnVsbCxzPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwscD0hMSxkPW51bGwsZz1yLmdldENvbnRleHRBdHRyaWJ1dGVzKCksXz1udWxsLHk9bnVsbCx4PVtdLGI9bmV3IE1hcCxTPW5ldyBVaTtTLmxheWVycy5lbmFibGUoMSksUy52aWV3cG9ydD1uZXcgZW47bGV0IEM9bmV3IFVpO0MubGF5ZXJzLmVuYWJsZSgyKSxDLnZpZXdwb3J0PW5ldyBlbjtsZXQgUD1bUyxDXSxrPW5ldyBuNjtrLmxheWVycy5lbmFibGUoMSksay5sYXllcnMuZW5hYmxlKDIpO2xldCBPPW51bGwsRD1udWxsO3RoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKG90KXtsZXQgc3Q9eFtvdF07cmV0dXJuIHN0PT09dm9pZCAwJiYoc3Q9bmV3IHFQLHhbb3RdPXN0KSxzdC5nZXRIYW5kU3BhY2UoKX07ZnVuY3Rpb24gQihvdCl7bGV0IHN0PWIuZ2V0KG90LmlucHV0U291cmNlKTtzdCYmc3QuZGlzcGF0Y2hFdmVudCh7dHlwZTpvdC50eXBlLGRhdGE6b3QuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBJKCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKG90LHN0KXtvdC5kaXNjb25uZWN0KHN0KX0pLGIuY2xlYXIoKSxPPW51bGwsRD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KF8pLGY9bnVsbCxoPW51bGwsdT1udWxsLGk9bnVsbCx5PW51bGwscnQuc3RvcCgpLG4uaXNQcmVzZW50aW5nPSExLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24ob3Qpe289b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgZnJhbWVidWZmZXIgc2NhbGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5zZXRSZWZlcmVuY2VTcGFjZVR5cGU9ZnVuY3Rpb24ob3Qpe3M9b3Qsbi5pc1ByZXNlbnRpbmc9PT0hMCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJYUk1hbmFnZXI6IENhbm5vdCBjaGFuZ2UgcmVmZXJlbmNlIHNwYWNlIHR5cGUgd2hpbGUgcHJlc2VudGluZy4iKX0sdGhpcy5nZXRSZWZlcmVuY2VTcGFjZT1mdW5jdGlvbigpe3JldHVybiBhfSx0aGlzLmdldEJhc2VMYXllcj1mdW5jdGlvbigpe3JldHVybiBoIT09bnVsbD9oOmZ9LHRoaXMuZ2V0QmluZGluZz1mdW5jdGlvbigpe3JldHVybiB1fSx0aGlzLmdldEZyYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMuZ2V0U2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBpfSx0aGlzLnNldFNlc3Npb249ZnVuY3Rpb24ob3Qpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYoaT1vdCxpIT09bnVsbCl7aWYoXz10LmdldFJlbmRlclRhcmdldCgpLGkuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixCKSxpLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIsSSksaS5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLEwpLGcueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCByLm1ha2VYUkNvbXBhdGlibGUoKSksaS5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCBzdD17YW50aWFsaWFzOmkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwP2cuYW50aWFsaWFzOiEwLGFscGhhOmcuYWxwaGEsZGVwdGg6Zy5kZXB0aCxzdGVuY2lsOmcuc3RlbmNpbCxmcmFtZWJ1ZmZlclNjYWxlRmFjdG9yOm99O2Y9bmV3IFhSV2ViR0xMYXllcihpLHIsc3QpLGkudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpmfSkseT1uZXcgdXMoZi5mcmFtZWJ1ZmZlcldpZHRoLGYuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1lbHNle3A9Zy5hbnRpYWxpYXM7bGV0IHN0PW51bGwsU3Q9bnVsbCxidD1udWxsO2cuZGVwdGgmJihidD1nLnN0ZW5jaWw/MzUwNTY6MzMxOTAsc3Q9Zy5zdGVuY2lsP2sxOnowLFN0PWcuc3RlbmNpbD9BMTpHMyk7bGV0IE10PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09V24/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6YnQsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcoaSxyKSxoPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKE10KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2hdfSkscD95PW5ldyBqMyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTp5PW5ldyB1cyhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpRbyx0eXBlOlpkLGRlcHRoVGV4dHVyZTpuZXcgbk0oaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LFN0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHN0KSxzdGVuY2lsQnVmZmVyOmcuc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX15LmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksYT15aWVsZCBpLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShzKSxydC5zZXRDb250ZXh0KGkpLHJ0LnN0YXJ0KCksbi5pc1ByZXNlbnRpbmc9ITAsbi5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIEwob3Qpe2xldCBzdD1pLmlucHV0U291cmNlcztmb3IobGV0IFN0PTA7U3Q8eC5sZW5ndGg7U3QrKyliLnNldChzdFtTdF0seFtTdF0pO2ZvcihsZXQgU3Q9MDtTdDxvdC5yZW1vdmVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QucmVtb3ZlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiYoTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOmJ0fSksYi5kZWxldGUoYnQpKX1mb3IobGV0IFN0PTA7U3Q8b3QuYWRkZWQubGVuZ3RoO1N0Kyspe2xldCBidD1vdC5hZGRlZFtTdF0sTXQ9Yi5nZXQoYnQpO010JiZNdC5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjb25uZWN0ZWQiLGRhdGE6YnR9KX19bGV0IFI9bmV3IGosRj1uZXcgajtmdW5jdGlvbiB6KG90LHN0LFN0KXtSLnNldEZyb21NYXRyaXhQb3NpdGlvbihzdC5tYXRyaXhXb3JsZCksRi5zZXRGcm9tTWF0cml4UG9zaXRpb24oU3QubWF0cml4V29ybGQpO2xldCBidD1SLmRpc3RhbmNlVG8oRiksTXQ9c3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxsdD1TdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEt0PU10WzE0XS8oTXRbMTBdLTEpLF90PU10WzE0XS8oTXRbMTBdKzEpLGN0PShNdFs5XSsxKS9NdFs1XSxYPShNdFs5XS0xKS9NdFs1XSxldD0oTXRbOF0tMSkvTXRbMF0sZHQ9KGx0WzhdKzEpL2x0WzBdLHE9S3QqZXQscHQ9S3QqZHQsaHQ9YnQvKC1ldCtkdCksd3Q9aHQqLWV0O3N0Lm1hdHJpeFdvcmxkLmRlY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC50cmFuc2xhdGVYKHd0KSxvdC50cmFuc2xhdGVaKGh0KSxvdC5tYXRyaXhXb3JsZC5jb21wb3NlKG90LnBvc2l0aW9uLG90LnF1YXRlcm5pb24sb3Quc2NhbGUpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQga3Q9S3QraHQsaWU9X3QraHQsZWU9cS13dCxMZT1wdCsoYnQtd3QpLGFyPWN0Kl90L2llKmt0LGZyPVgqX3QvaWUqa3Q7b3QucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoZWUsTGUsYXIsZnIsa3QsaWUpfWZ1bmN0aW9uIFUob3Qsc3Qpe3N0PT09bnVsbD9vdC5tYXRyaXhXb3JsZC5jb3B5KG90Lm1hdHJpeCk6b3QubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhzdC5tYXRyaXhXb3JsZCxvdC5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KG90Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihvdCl7aWYoaT09PW51bGwpcmV0dXJuO2submVhcj1DLm5lYXI9Uy5uZWFyPW90Lm5lYXIsay5mYXI9Qy5mYXI9Uy5mYXI9b3QuZmFyLChPIT09ay5uZWFyfHxEIT09ay5mYXIpJiYoaS51cGRhdGVSZW5kZXJTdGF0ZSh7ZGVwdGhOZWFyOmsubmVhcixkZXB0aEZhcjprLmZhcn0pLE89ay5uZWFyLEQ9ay5mYXIpO2xldCBzdD1vdC5wYXJlbnQsU3Q9ay5jYW1lcmFzO1UoayxzdCk7Zm9yKGxldCBNdD0wO010PFN0Lmxlbmd0aDtNdCsrKVUoU3RbTXRdLHN0KTtrLm1hdHJpeFdvcmxkLmRlY29tcG9zZShrLnBvc2l0aW9uLGsucXVhdGVybmlvbixrLnNjYWxlKSxvdC5wb3NpdGlvbi5jb3B5KGsucG9zaXRpb24pLG90LnF1YXRlcm5pb24uY29weShrLnF1YXRlcm5pb24pLG90LnNjYWxlLmNvcHkoay5zY2FsZSksb3QubWF0cml4LmNvcHkoay5tYXRyaXgpLG90Lm1hdHJpeFdvcmxkLmNvcHkoay5tYXRyaXhXb3JsZCk7bGV0IGJ0PW90LmNoaWxkcmVuO2ZvcihsZXQgTXQ9MCxsdD1idC5sZW5ndGg7TXQ8bHQ7TXQrKylidFtNdF0udXBkYXRlTWF0cml4V29ybGQoITApO1N0Lmxlbmd0aD09PTI/eihrLFMsQyk6ay5wcm9qZWN0aW9uTWF0cml4LmNvcHkoUy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4ga30sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24ob3Qpe2ghPT1udWxsJiYoaC5maXhlZEZvdmVhdGlvbj1vdCksZiE9PW51bGwmJmYuZml4ZWRGb3ZlYXRpb24hPT12b2lkIDAmJihmLmZpeGVkRm92ZWF0aW9uPW90KX07bGV0IFc9bnVsbDtmdW5jdGlvbiBaKG90LHN0KXtpZihjPXN0LmdldFZpZXdlclBvc2UoYSksZD1zdCxjIT09bnVsbCl7bGV0IGJ0PWMudmlld3M7ZiE9PW51bGwmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKHksZi5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoeSkpO2xldCBNdD0hMTtidC5sZW5ndGghPT1rLmNhbWVyYXMubGVuZ3RoJiYoay5jYW1lcmFzLmxlbmd0aD0wLE10PSEwKTtmb3IobGV0IGx0PTA7bHQ8YnQubGVuZ3RoO2x0Kyspe2xldCBLdD1idFtsdF0sX3Q9bnVsbDtpZihmIT09bnVsbClfdD1mLmdldFZpZXdwb3J0KEt0KTtlbHNle2xldCBYPXUuZ2V0Vmlld1N1YkltYWdlKGgsS3QpO190PVgudmlld3BvcnQsbHQ9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyh5LFguY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlguZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoeSkpfWxldCBjdD1QW2x0XTtjdC5tYXRyaXguZnJvbUFycmF5KEt0LnRyYW5zZm9ybS5tYXRyaXgpLGN0LnByb2plY3Rpb25NYXRyaXguZnJvbUFycmF5KEt0LnByb2plY3Rpb25NYXRyaXgpLGN0LnZpZXdwb3J0LnNldChfdC54LF90LnksX3Qud2lkdGgsX3QuaGVpZ2h0KSxsdD09PTAmJmsubWF0cml4LmNvcHkoY3QubWF0cml4KSxNdD09PSEwJiZrLmNhbWVyYXMucHVzaChjdCl9fWxldCBTdD1pLmlucHV0U291cmNlcztmb3IobGV0IGJ0PTA7YnQ8eC5sZW5ndGg7YnQrKyl7bGV0IE10PXhbYnRdLGx0PVN0W2J0XTtNdC51cGRhdGUobHQsc3QsYSl9VyYmVyhvdCxzdCksZD1udWxsfWxldCBydD1uZXcgRmZlO3J0LnNldEFuaW1hdGlvbkxvb3AoWiksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKG90KXtXPW90fSx0aGlzLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9fX07ZnVuY3Rpb24gQWdyKGUpe2Z1bmN0aW9uIHQoeSx4KXt5LmZvZ0NvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseC5pc0ZvZz8oeS5mb2dOZWFyLnZhbHVlPXgubmVhcix5LmZvZ0Zhci52YWx1ZT14LmZhcik6eC5pc0ZvZ0V4cDImJih5LmZvZ0RlbnNpdHkudmFsdWU9eC5kZW5zaXR5KX1mdW5jdGlvbiByKHkseCxiLFMsQyl7eC5pc01lc2hCYXNpY01hdGVyaWFsP24oeSx4KTp4LmlzTWVzaExhbWJlcnRNYXRlcmlhbD8obih5LHgpLGwoeSx4KSk6eC5pc01lc2hUb29uTWF0ZXJpYWw/KG4oeSx4KSx1KHkseCkpOnguaXNNZXNoUGhvbmdNYXRlcmlhbD8obih5LHgpLGMoeSx4KSk6eC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsPyhuKHkseCkseC5pc01lc2hQaHlzaWNhbE1hdGVyaWFsP2YoeSx4LEMpOmgoeSx4KSk6eC5pc01lc2hNYXRjYXBNYXRlcmlhbD8obih5LHgpLHAoeSx4KSk6eC5pc01lc2hEZXB0aE1hdGVyaWFsPyhuKHkseCksZCh5LHgpKTp4LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw/KG4oeSx4KSxnKHkseCkpOnguaXNNZXNoTm9ybWFsTWF0ZXJpYWw/KG4oeSx4KSxfKHkseCkpOnguaXNMaW5lQmFzaWNNYXRlcmlhbD8oaSh5LHgpLHguaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJm8oeSx4KSk6eC5pc1BvaW50c01hdGVyaWFsP2EoeSx4LGIsUyk6eC5pc1Nwcml0ZU1hdGVyaWFsP3MoeSx4KTp4LmlzU2hhZG93TWF0ZXJpYWw/KHkuY29sb3IudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5KTp4LmlzU2hhZGVyTWF0ZXJpYWwmJih4LnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSl9ZnVuY3Rpb24gbih5LHgpe3kub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseC5jb2xvciYmeS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseC5lbWlzc2l2ZSYmeS5lbWlzc2l2ZS52YWx1ZS5jb3B5KHguZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHguZW1pc3NpdmVJbnRlbnNpdHkpLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguc3BlY3VsYXJNYXAmJih5LnNwZWN1bGFyTWFwLnZhbHVlPXguc3BlY3VsYXJNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI9ZS5nZXQoeCkuZW52TWFwO2ImJih5LmVudk1hcC52YWx1ZT1iLHkuZmxpcEVudk1hcC52YWx1ZT1iLmlzQ3ViZVRleHR1cmUmJmIuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSx5LnJlZmxlY3Rpdml0eS52YWx1ZT14LnJlZmxlY3Rpdml0eSx5Lmlvci52YWx1ZT14Lmlvcix5LnJlZnJhY3Rpb25SYXRpby52YWx1ZT14LnJlZnJhY3Rpb25SYXRpbykseC5saWdodE1hcCYmKHkubGlnaHRNYXAudmFsdWU9eC5saWdodE1hcCx5LmxpZ2h0TWFwSW50ZW5zaXR5LnZhbHVlPXgubGlnaHRNYXBJbnRlbnNpdHkpLHguYW9NYXAmJih5LmFvTWFwLnZhbHVlPXguYW9NYXAseS5hb01hcEludGVuc2l0eS52YWx1ZT14LmFvTWFwSW50ZW5zaXR5KTtsZXQgUzt4Lm1hcD9TPXgubWFwOnguc3BlY3VsYXJNYXA/Uz14LnNwZWN1bGFyTWFwOnguZGlzcGxhY2VtZW50TWFwP1M9eC5kaXNwbGFjZW1lbnRNYXA6eC5ub3JtYWxNYXA/Uz14Lm5vcm1hbE1hcDp4LmJ1bXBNYXA/Uz14LmJ1bXBNYXA6eC5yb3VnaG5lc3NNYXA/Uz14LnJvdWdobmVzc01hcDp4Lm1ldGFsbmVzc01hcD9TPXgubWV0YWxuZXNzTWFwOnguYWxwaGFNYXA/Uz14LmFscGhhTWFwOnguZW1pc3NpdmVNYXA/Uz14LmVtaXNzaXZlTWFwOnguY2xlYXJjb2F0TWFwP1M9eC5jbGVhcmNvYXRNYXA6eC5jbGVhcmNvYXROb3JtYWxNYXA/Uz14LmNsZWFyY29hdE5vcm1hbE1hcDp4LmNsZWFyY29hdFJvdWdobmVzc01hcD9TPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwOnguc3BlY3VsYXJJbnRlbnNpdHlNYXA/Uz14LnNwZWN1bGFySW50ZW5zaXR5TWFwOnguc3BlY3VsYXJDb2xvck1hcD9TPXguc3BlY3VsYXJDb2xvck1hcDp4LnRyYW5zbWlzc2lvbk1hcD9TPXgudHJhbnNtaXNzaW9uTWFwOngudGhpY2tuZXNzTWFwP1M9eC50aGlja25lc3NNYXA6eC5zaGVlbkNvbG9yTWFwP1M9eC5zaGVlbkNvbG9yTWFwOnguc2hlZW5Sb3VnaG5lc3NNYXAmJihTPXguc2hlZW5Sb3VnaG5lc3NNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSk7bGV0IEM7eC5hb01hcD9DPXguYW9NYXA6eC5saWdodE1hcCYmKEM9eC5saWdodE1hcCksQyE9PXZvaWQgMCYmKEMuaXNXZWJHTFJlbmRlclRhcmdldCYmKEM9Qy50ZXh0dXJlKSxDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2MlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gaSh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHl9ZnVuY3Rpb24gbyh5LHgpe3kuZGFzaFNpemUudmFsdWU9eC5kYXNoU2l6ZSx5LnRvdGFsU2l6ZS52YWx1ZT14LmRhc2hTaXplK3guZ2FwU2l6ZSx5LnNjYWxlLnZhbHVlPXguc2NhbGV9ZnVuY3Rpb24gYSh5LHgsYixTKXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHkuc2l6ZS52YWx1ZT14LnNpemUqYix5LnNjYWxlLnZhbHVlPVMqLjUseC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgQzt4Lm1hcD9DPXgubWFwOnguYWxwaGFNYXAmJihDPXguYWxwaGFNYXApLEMhPT12b2lkIDAmJihDLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmQy51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoQy5tYXRyaXgpKX1mdW5jdGlvbiBzKHkseCl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnJvdGF0aW9uLnZhbHVlPXgucm90YXRpb24seC5tYXAmJih5Lm1hcC52YWx1ZT14Lm1hcCkseC5hbHBoYU1hcCYmKHkuYWxwaGFNYXAudmFsdWU9eC5hbHBoYU1hcCkseC5hbHBoYVRlc3Q+MCYmKHkuYWxwaGFUZXN0LnZhbHVlPXguYWxwaGFUZXN0KTtsZXQgYjt4Lm1hcD9iPXgubWFwOnguYWxwaGFNYXAmJihiPXguYWxwaGFNYXApLGIhPT12b2lkIDAmJihiLm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmYi51cGRhdGVNYXRyaXgoKSx5LnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpKX1mdW5jdGlvbiBsKHkseCl7eC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCl9ZnVuY3Rpb24gYyh5LHgpe3kuc3BlY3VsYXIudmFsdWUuY29weSh4LnNwZWN1bGFyKSx5LnNoaW5pbmVzcy52YWx1ZT1NYXRoLm1heCh4LnNoaW5pbmVzcywxZS00KSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIHUoeSx4KXt4LmdyYWRpZW50TWFwJiYoeS5ncmFkaWVudE1hcC52YWx1ZT14LmdyYWRpZW50TWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGgoeSx4KXt5LnJvdWdobmVzcy52YWx1ZT14LnJvdWdobmVzcyx5Lm1ldGFsbmVzcy52YWx1ZT14Lm1ldGFsbmVzcyx4LnJvdWdobmVzc01hcCYmKHkucm91Z2huZXNzTWFwLnZhbHVlPXgucm91Z2huZXNzTWFwKSx4Lm1ldGFsbmVzc01hcCYmKHkubWV0YWxuZXNzTWFwLnZhbHVlPXgubWV0YWxuZXNzTWFwKSx4LmVtaXNzaXZlTWFwJiYoeS5lbWlzc2l2ZU1hcC52YWx1ZT14LmVtaXNzaXZlTWFwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpLGUuZ2V0KHgpLmVudk1hcCYmKHkuZW52TWFwSW50ZW5zaXR5LnZhbHVlPXguZW52TWFwSW50ZW5zaXR5KX1mdW5jdGlvbiBmKHkseCxiKXtoKHkseCkseS5pb3IudmFsdWU9eC5pb3IseC5zaGVlbj4wJiYoeS5zaGVlbkNvbG9yLnZhbHVlLmNvcHkoeC5zaGVlbkNvbG9yKS5tdWx0aXBseVNjYWxhcih4LnNoZWVuKSx5LnNoZWVuUm91Z2huZXNzLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3MseC5zaGVlbkNvbG9yTWFwJiYoeS5zaGVlbkNvbG9yTWFwLnZhbHVlPXguc2hlZW5Db2xvck1hcCkseC5zaGVlblJvdWdobmVzc01hcCYmKHkuc2hlZW5Sb3VnaG5lc3NNYXAudmFsdWU9eC5zaGVlblJvdWdobmVzc01hcCkpLHguY2xlYXJjb2F0PjAmJih5LmNsZWFyY29hdC52YWx1ZT14LmNsZWFyY29hdCx5LmNsZWFyY29hdFJvdWdobmVzcy52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzcyx4LmNsZWFyY29hdE1hcCYmKHkuY2xlYXJjb2F0TWFwLnZhbHVlPXguY2xlYXJjb2F0TWFwKSx4LmNsZWFyY29hdFJvdWdobmVzc01hcCYmKHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnZhbHVlPXguY2xlYXJjb2F0Um91Z2huZXNzTWFwKSx4LmNsZWFyY29hdE5vcm1hbE1hcCYmKHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUuY29weSh4LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx5LmNsZWFyY29hdE5vcm1hbE1hcC52YWx1ZT14LmNsZWFyY29hdE5vcm1hbE1hcCx4LnNpZGU9PT1JaSYmeS5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkpLHgudHJhbnNtaXNzaW9uPjAmJih5LnRyYW5zbWlzc2lvbi52YWx1ZT14LnRyYW5zbWlzc2lvbix5LnRyYW5zbWlzc2lvblNhbXBsZXJNYXAudmFsdWU9Yi50ZXh0dXJlLHkudHJhbnNtaXNzaW9uU2FtcGxlclNpemUudmFsdWUuc2V0KGIud2lkdGgsYi5oZWlnaHQpLHgudHJhbnNtaXNzaW9uTWFwJiYoeS50cmFuc21pc3Npb25NYXAudmFsdWU9eC50cmFuc21pc3Npb25NYXApLHkudGhpY2tuZXNzLnZhbHVlPXgudGhpY2tuZXNzLHgudGhpY2tuZXNzTWFwJiYoeS50aGlja25lc3NNYXAudmFsdWU9eC50aGlja25lc3NNYXApLHkuYXR0ZW51YXRpb25EaXN0YW5jZS52YWx1ZT14LmF0dGVudWF0aW9uRGlzdGFuY2UseS5hdHRlbnVhdGlvbkNvbG9yLnZhbHVlLmNvcHkoeC5hdHRlbnVhdGlvbkNvbG9yKSkseS5zcGVjdWxhckludGVuc2l0eS52YWx1ZT14LnNwZWN1bGFySW50ZW5zaXR5LHkuc3BlY3VsYXJDb2xvci52YWx1ZS5jb3B5KHguc3BlY3VsYXJDb2xvcikseC5zcGVjdWxhckludGVuc2l0eU1hcCYmKHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eU1hcCkseC5zcGVjdWxhckNvbG9yTWFwJiYoeS5zcGVjdWxhckNvbG9yTWFwLnZhbHVlPXguc3BlY3VsYXJDb2xvck1hcCl9ZnVuY3Rpb24gcCh5LHgpe3gubWF0Y2FwJiYoeS5tYXRjYXAudmFsdWU9eC5tYXRjYXApLHguYnVtcE1hcCYmKHkuYnVtcE1hcC52YWx1ZT14LmJ1bXBNYXAseS5idW1wU2NhbGUudmFsdWU9eC5idW1wU2NhbGUseC5zaWRlPT09SWkmJih5LmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx4Lm5vcm1hbE1hcCYmKHkubm9ybWFsTWFwLnZhbHVlPXgubm9ybWFsTWFwLHkubm9ybWFsU2NhbGUudmFsdWUuY29weSh4Lm5vcm1hbFNjYWxlKSx4LnNpZGU9PT1JaSYmeS5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50Qmlhcyl9ZnVuY3Rpb24gZCh5LHgpe3guZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSx5LnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeC5yZWZlcmVuY2VQb3NpdGlvbikseS5uZWFyRGlzdGFuY2UudmFsdWU9eC5uZWFyRGlzdGFuY2UseS5mYXJEaXN0YW5jZS52YWx1ZT14LmZhckRpc3RhbmNlfWZ1bmN0aW9uIF8oeSx4KXt4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfXJldHVybntyZWZyZXNoRm9nVW5pZm9ybXM6dCxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpyfX1mdW5jdGlvbiBQZ3IoKXtsZXQgZT10NigiY2FudmFzIik7cmV0dXJuIGUuc3R5bGUuZGlzcGxheT0iYmxvY2siLGV9ZnVuY3Rpb24gcm4oZT17fSl7bGV0IHQ9ZS5jYW52YXMhPT12b2lkIDA/ZS5jYW52YXM6UGdyKCkscj1lLmNvbnRleHQhPT12b2lkIDA/ZS5jb250ZXh0Om51bGwsbj1lLmFscGhhIT09dm9pZCAwP2UuYWxwaGE6ITEsaT1lLmRlcHRoIT09dm9pZCAwP2UuZGVwdGg6ITAsbz1lLnN0ZW5jaWwhPT12b2lkIDA/ZS5zdGVuY2lsOiEwLGE9ZS5hbnRpYWxpYXMhPT12b2lkIDA/ZS5hbnRpYWxpYXM6ITEscz1lLnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMD9lLnByZW11bHRpcGxpZWRBbHBoYTohMCxsPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyIT09dm9pZCAwP2UucHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLGM9ZS5wb3dlclByZWZlcmVuY2UhPT12b2lkIDA/ZS5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9ZS5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0IT09dm9pZCAwP2UuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDohMSxoPW51bGwsZj1udWxsLHA9W10sZD1bXTt0aGlzLmRvbUVsZW1lbnQ9dCx0aGlzLmRlYnVnPXtjaGVja1NoYWRlckVycm9yczohMH0sdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5hdXRvQ2xlYXJDb2xvcj0hMCx0aGlzLmF1dG9DbGVhckRlcHRoPSEwLHRoaXMuYXV0b0NsZWFyU3RlbmNpbD0hMCx0aGlzLnNvcnRPYmplY3RzPSEwLHRoaXMuY2xpcHBpbmdQbGFuZXM9W10sdGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZD0hMSx0aGlzLm91dHB1dEVuY29kaW5nPVFkLHRoaXMucGh5c2ljYWxseUNvcnJlY3RMaWdodHM9ITEsdGhpcy50b25lTWFwcGluZz1LZCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgZz10aGlzLF89ITEseT0wLHg9MCxiPW51bGwsUz0tMSxDPW51bGwsUD1uZXcgZW4saz1uZXcgZW4sTz1udWxsLEQ9dC53aWR0aCxCPXQuaGVpZ2h0LEk9MSxMPW51bGwsUj1udWxsLEY9bmV3IGVuKDAsMCxELEIpLHo9bmV3IGVuKDAsMCxELEIpLFU9ITEsVz1uZXcgTjEsWj0hMSxydD0hMSxvdD1udWxsLHN0PW5ldyBNZSxTdD1uZXcgaixidD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIE10KCl7cmV0dXJuIGI9PT1udWxsP0k6MX1sZXQgbHQ9cjtmdW5jdGlvbiBLdChLLGd0KXtmb3IobGV0IEV0PTA7RXQ8Sy5sZW5ndGg7RXQrKyl7bGV0IHh0PUtbRXRdLEZ0PXQuZ2V0Q29udGV4dCh4dCxndCk7aWYoRnQhPT1udWxsKXJldHVybiBGdH1yZXR1cm4gbnVsbH10cnl7bGV0IEs9e2FscGhhOiEwLGRlcHRoOmksc3RlbmNpbDpvLGFudGlhbGlhczphLHByZW11bHRpcGxpZWRBbHBoYTpzLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHtqVX1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLGZlLCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixhdCwhMSksbHQ9PT1udWxsKXtsZXQgZ3Q9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKGcuaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZndC5zaGlmdCgpLGx0PUt0KGd0LEspLGx0PT09bnVsbCl0aHJvdyBLdChndCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX1sdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihsdC5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKEspe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrSy5tZXNzYWdlKSxLfWxldCBfdCxjdCxYLGV0LGR0LHEscHQsaHQsd3Qsa3QsaWUsZWUsTGUsYXIsZnIsdHQsJCxJdCwkdCxoZSxUdCxiZSxudDtmdW5jdGlvbiBDdCgpe190PW5ldyBKZHIobHQpLGN0PW5ldyBZZHIobHQsX3QsZSksX3QuaW5pdChjdCksYmU9bmV3ICRmZShsdCxfdCxjdCksWD1uZXcgRWdyKGx0LF90LGN0KSxldD1uZXcgZW1yKGx0KSxkdD1uZXcgZGdyLHE9bmV3IFRncihsdCxfdCxYLGR0LGN0LGJlLGV0KSxwdD1uZXcgWGRyKGcpLGh0PW5ldyBaZHIoZyksd3Q9bmV3IGdmcihsdCxjdCksbnQ9bmV3IEdkcihsdCxfdCx3dCxjdCksa3Q9bmV3IFFkcihsdCx3dCxldCxudCksaWU9bmV3IG9tcihsdCxrdCx3dCxldCksJHQ9bmV3IGltcihsdCxjdCxxKSx0dD1uZXcgamRyKGR0KSxlZT1uZXcgcGdyKGcscHQsaHQsX3QsY3QsbnQsdHQpLExlPW5ldyBBZ3IoZHQpLGFyPW5ldyBnZ3IsZnI9bmV3IHdncihfdCxjdCksSXQ9bmV3IHFkcihnLHB0LFgsaWUsbixzKSwkPW5ldyBYZmUoZyxpZSxjdCksaGU9bmV3IFdkcihsdCxfdCxldCxjdCksVHQ9bmV3IHRtcihsdCxfdCxldCxjdCksZXQucHJvZ3JhbXM9ZWUucHJvZ3JhbXMsZy5jYXBhYmlsaXRpZXM9Y3QsZy5leHRlbnNpb25zPV90LGcucHJvcGVydGllcz1kdCxnLnJlbmRlckxpc3RzPWFyLGcuc2hhZG93TWFwPSQsZy5zdGF0ZT1YLGcuaW5mbz1ldH1DdCgpO2xldCBXdD1uZXcgZWh0KGcsbHQpO3RoaXMueHI9V3QsdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmdldENvbnRleHRBdHRyaWJ1dGVzKCl9LHRoaXMuZm9yY2VDb250ZXh0TG9zcz1mdW5jdGlvbigpe2xldCBLPV90LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7SyYmSy5sb3NlQ29udGV4dCgpfSx0aGlzLmZvcmNlQ29udGV4dFJlc3RvcmU9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksucmVzdG9yZUNvbnRleHQoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIEl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihLKXtLIT09dm9pZCAwJiYoST1LLHRoaXMuc2V0U2l6ZShELEIsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEspe3JldHVybiBLLnNldChELEIpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oSyxndCxFdCl7aWYoV3QuaXNQcmVzZW50aW5nKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpO3JldHVybn1EPUssQj1ndCx0LndpZHRoPU1hdGguZmxvb3IoSypJKSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkkpLEV0IT09ITEmJih0LnN0eWxlLndpZHRoPUsrInB4Iix0LnN0eWxlLmhlaWdodD1ndCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCpJLEIqSSkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihLLGd0LEV0KXtEPUssQj1ndCxJPUV0LHQud2lkdGg9TWF0aC5mbG9vcihLKkV0KSx0LmhlaWdodD1NYXRoLmZsb29yKGd0KkV0KSx0aGlzLnNldFZpZXdwb3J0KDAsMCxLLGd0KX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShQKX0sdGhpcy5nZXRWaWV3cG9ydD1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEYpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P0Yuc2V0KEsueCxLLnksSy56LEsudyk6Ri5zZXQoSyxndCxFdCx4dCksWC52aWV3cG9ydChQLmNvcHkoRikubXVsdGlwbHlTY2FsYXIoSSkuZmxvb3IoKSl9LHRoaXMuZ2V0U2Npc3Nvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KHopfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSyxndCxFdCx4dCl7Sy5pc1ZlY3RvcjQ/ei5zZXQoSy54LEsueSxLLnosSy53KTp6LnNldChLLGd0LEV0LHh0KSxYLnNjaXNzb3Ioay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFV9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSyl7WC5zZXRTY2lzc29yVGVzdChVPUspfSx0aGlzLnNldE9wYXF1ZVNvcnQ9ZnVuY3Rpb24oSyl7TD1LfSx0aGlzLnNldFRyYW5zcGFyZW50U29ydD1mdW5jdGlvbihLKXtSPUt9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihLKXtyZXR1cm4gSy5jb3B5KEl0LmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe0l0LnNldENsZWFyQ29sb3IuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIEl0LmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7SXQuc2V0Q2xlYXJBbHBoYS5hcHBseShJdCxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKEssZ3QsRXQpe2xldCB4dD0wOyhLPT09dm9pZCAwfHxLKSYmKHh0fD0xNjM4NCksKGd0PT09dm9pZCAwfHxndCkmJih4dHw9MjU2KSwoRXQ9PT12b2lkIDB8fEV0KSYmKHh0fD0xMDI0KSxsdC5jbGVhcih4dCl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2xlYXIoITAsITEsITEpfSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCEwLCExKX0sdGhpcy5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCExLCExLCEwKX0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7dC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGFyLmRpc3Bvc2UoKSxmci5kaXNwb3NlKCksZHQuZGlzcG9zZSgpLHB0LmRpc3Bvc2UoKSxodC5kaXNwb3NlKCksaWUuZGlzcG9zZSgpLG50LmRpc3Bvc2UoKSxlZS5kaXNwb3NlKCksV3QuZGlzcG9zZSgpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSxvdCYmKG90LmRpc3Bvc2UoKSxvdD1udWxsKSxXaS5zdG9wKCl9O2Z1bmN0aW9uIGZlKEspe0sucHJldmVudERlZmF1bHQoKSxjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBMb3N0LiIpLF89ITB9ZnVuY3Rpb24gYXQoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSxfPSExO2xldCBLPWV0LmF1dG9SZXNldCxndD0kLmVuYWJsZWQsRXQ9JC5hdXRvVXBkYXRlLHh0PSQubmVlZHNVcGRhdGUsRnQ9JC50eXBlO0N0KCksZXQuYXV0b1Jlc2V0PUssJC5lbmFibGVkPWd0LCQuYXV0b1VwZGF0ZT1FdCwkLm5lZWRzVXBkYXRlPXh0LCQudHlwZT1GdH1mdW5jdGlvbiBzZShLKXtsZXQgZ3Q9Sy50YXJnZXQ7Z3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFF0KGd0KX1mdW5jdGlvbiBRdChLKXtDZShLKSxkdC5yZW1vdmUoSyl9ZnVuY3Rpb24gQ2UoSyl7bGV0IGd0PWR0LmdldChLKS5wcm9ncmFtcztndCE9PXZvaWQgMCYmKGd0LmZvckVhY2goZnVuY3Rpb24oRXQpe2VlLnJlbGVhc2VQcm9ncmFtKEV0KX0pLEsuaXNTaGFkZXJNYXRlcmlhbCYmZWUucmVsZWFzZVNoYWRlckNhY2hlKEspKX10aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0LFZlKXtndD09PW51bGwmJihndD1idCk7bGV0IFVlPUZ0LmlzTWVzaCYmRnQubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLHRyPWNuKEssZ3QsRXQseHQsRnQpO1guc2V0TWF0ZXJpYWwoeHQsVWUpO2xldCBLZT1FdC5pbmRleCxYcj1FdC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKEtlPT09bnVsbCl7aWYoWHI9PT12b2lkIDB8fFhyLmNvdW50PT09MClyZXR1cm59ZWxzZSBpZihLZS5jb3VudD09PTApcmV0dXJuO2xldCBfcj0xO3h0LndpcmVmcmFtZT09PSEwJiYoS2U9a3QuZ2V0V2lyZWZyYW1lQXR0cmlidXRlKEV0KSxfcj0yKSxudC5zZXR1cChGdCx4dCx0cixFdCxLZSk7bGV0IFByLGpuPWhlO0tlIT09bnVsbCYmKFByPXd0LmdldChLZSksam49VHQsam4uc2V0SW5kZXgoUHIpKTtsZXQgbnA9S2UhPT1udWxsP0tlLmNvdW50OlhyLmNvdW50LHVtPUV0LmRyYXdSYW5nZS5zdGFydCpfcixtcj1FdC5kcmF3UmFuZ2UuY291bnQqX3IsRmw9VmUhPT1udWxsP1ZlLnN0YXJ0Kl9yOjAsWG49VmUhPT1udWxsP1ZlLmNvdW50Kl9yOjEvMCxCbD1NYXRoLm1heCh1bSxGbCksdXg9TWF0aC5taW4obnAsdW0rbXIsRmwrWG4pLTEsSGw9TWF0aC5tYXgoMCx1eC1CbCsxKTtpZihIbCE9PTApe2lmKEZ0LmlzTWVzaCl4dC53aXJlZnJhbWU9PT0hMD8oWC5zZXRMaW5lV2lkdGgoeHQud2lyZWZyYW1lTGluZXdpZHRoKk10KCkpLGpuLnNldE1vZGUoMSkpOmpuLnNldE1vZGUoNCk7ZWxzZSBpZihGdC5pc0xpbmUpe2xldCBWbD14dC5saW5ld2lkdGg7Vmw9PT12b2lkIDAmJihWbD0xKSxYLnNldExpbmVXaWR0aChWbCpNdCgpKSxGdC5pc0xpbmVTZWdtZW50cz9qbi5zZXRNb2RlKDEpOkZ0LmlzTGluZUxvb3A/am4uc2V0TW9kZSgyKTpqbi5zZXRNb2RlKDMpfWVsc2UgRnQuaXNQb2ludHM/am4uc2V0TW9kZSgwKTpGdC5pc1Nwcml0ZSYmam4uc2V0TW9kZSg0KTtpZihGdC5pc0luc3RhbmNlZE1lc2gpam4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLEZ0LmNvdW50KTtlbHNlIGlmKEV0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCBWbD1NYXRoLm1pbihFdC5pbnN0YW5jZUNvdW50LEV0Ll9tYXhJbnN0YW5jZUNvdW50KTtqbi5yZW5kZXJJbnN0YW5jZXMoQmwsSGwsVmwpfWVsc2Ugam4ucmVuZGVyKEJsLEhsKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihLLGd0KXtmPWZyLmdldChLKSxmLmluaXQoKSxkLnB1c2goZiksSy50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oRXQpe0V0LmlzTGlnaHQmJkV0LmxheWVycy50ZXN0KGd0LmxheWVycykmJihmLnB1c2hMaWdodChFdCksRXQuY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KEV0KSl9KSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEsudHJhdmVyc2UoZnVuY3Rpb24oRXQpe2xldCB4dD1FdC5tYXRlcmlhbDtpZih4dClpZihBcnJheS5pc0FycmF5KHh0KSlmb3IobGV0IEZ0PTA7RnQ8eHQubGVuZ3RoO0Z0Kyspe2xldCBWZT14dFtGdF07Y20oVmUsSyxFdCl9ZWxzZSBjbSh4dCxLLEV0KX0pLGQucG9wKCksZj1udWxsfTtsZXQgUHQ9bnVsbDtmdW5jdGlvbiBOdChLKXtQdCYmUHQoSyl9ZnVuY3Rpb24gemUoKXtXaS5zdG9wKCl9ZnVuY3Rpb24geW4oKXtXaS5zdGFydCgpfWxldCBXaT1uZXcgRmZlO1dpLnNldEFuaW1hdGlvbkxvb3AoTnQpLHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZXaS5zZXRDb250ZXh0KHdpbmRvdyksdGhpcy5zZXRBbmltYXRpb25Mb29wPWZ1bmN0aW9uKEspe1B0PUssV3Quc2V0QW5pbWF0aW9uTG9vcChLKSxLPT09bnVsbD9XaS5zdG9wKCk6V2kuc3RhcnQoKX0sV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbnN0YXJ0Iix6ZSksV3QuYWRkRXZlbnRMaXN0ZW5lcigic2Vzc2lvbmVuZCIseW4pLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEssZ3Qpe2lmKGd0IT09dm9pZCAwJiZndC5pc0NhbWVyYSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIik7cmV0dXJufWlmKF89PT0hMClyZXR1cm47Sy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlTWF0cml4V29ybGQoKSxndC5wYXJlbnQ9PT1udWxsJiZndC51cGRhdGVNYXRyaXhXb3JsZCgpLFd0LmVuYWJsZWQ9PT0hMCYmV3QuaXNQcmVzZW50aW5nPT09ITAmJihXdC5jYW1lcmFBdXRvVXBkYXRlPT09ITAmJld0LnVwZGF0ZUNhbWVyYShndCksZ3Q9V3QuZ2V0Q2FtZXJhKCkpLEsuaXNTY2VuZT09PSEwJiZLLm9uQmVmb3JlUmVuZGVyKGcsSyxndCxiKSxmPWZyLmdldChLLGQubGVuZ3RoKSxmLmluaXQoKSxkLnB1c2goZiksc3QubXVsdGlwbHlNYXRyaWNlcyhndC5wcm9qZWN0aW9uTWF0cml4LGd0Lm1hdHJpeFdvcmxkSW52ZXJzZSksVy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChzdCkscnQ9dGhpcy5sb2NhbENsaXBwaW5nRW5hYmxlZCxaPXR0LmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxydCxndCksaD1hci5nZXQoSyxwLmxlbmd0aCksaC5pbml0KCkscC5wdXNoKGgpLEFyKEssZ3QsMCxnLnNvcnRPYmplY3RzKSxoLmZpbmlzaCgpLGcuc29ydE9iamVjdHM9PT0hMCYmaC5zb3J0KEwsUiksWj09PSEwJiZ0dC5iZWdpblNoYWRvd3MoKTtsZXQgRXQ9Zi5zdGF0ZS5zaGFkb3dzQXJyYXk7aWYoJC5yZW5kZXIoRXQsSyxndCksWj09PSEwJiZ0dC5lbmRTaGFkb3dzKCksdGhpcy5pbmZvLmF1dG9SZXNldD09PSEwJiZ0aGlzLmluZm8ucmVzZXQoKSxJdC5yZW5kZXIoaCxLKSxmLnNldHVwTGlnaHRzKGcucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLGd0LmlzQXJyYXlDYW1lcmEpe2xldCB4dD1ndC5jYW1lcmFzO2ZvcihsZXQgRnQ9MCxWZT14dC5sZW5ndGg7RnQ8VmU7RnQrKyl7bGV0IFVlPXh0W0Z0XTtQYShoLEssVWUsVWUudmlld3BvcnQpfX1lbHNlIFBhKGgsSyxndCk7YiE9PW51bGwmJihxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkFmdGVyUmVuZGVyKGcsSyxndCksWC5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFguYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxYLmJ1ZmZlcnMuY29sb3Iuc2V0TWFzayghMCksWC5zZXRQb2x5Z29uT2Zmc2V0KCExKSxudC5yZXNldERlZmF1bHRTdGF0ZSgpLFM9LTEsQz1udWxsLGQucG9wKCksZC5sZW5ndGg+MD9mPWRbZC5sZW5ndGgtMV06Zj1udWxsLHAucG9wKCkscC5sZW5ndGg+MD9oPXBbcC5sZW5ndGgtMV06aD1udWxsfTtmdW5jdGlvbiBBcihLLGd0LEV0LHh0KXtpZihLLnZpc2libGU9PT0hMSlyZXR1cm47aWYoSy5sYXllcnMudGVzdChndC5sYXllcnMpKXtpZihLLmlzR3JvdXApRXQ9Sy5yZW5kZXJPcmRlcjtlbHNlIGlmKEsuaXNMT0QpSy5hdXRvVXBkYXRlPT09ITAmJksudXBkYXRlKGd0KTtlbHNlIGlmKEsuaXNMaWdodClmLnB1c2hMaWdodChLKSxLLmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhLKTtlbHNlIGlmKEsuaXNTcHJpdGUpe2lmKCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c1Nwcml0ZShLKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDt0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1lbHNlIGlmKChLLmlzTWVzaHx8Sy5pc0xpbmV8fEsuaXNQb2ludHMpJiYoSy5pc1NraW5uZWRNZXNoJiZLLnNrZWxldG9uLmZyYW1lIT09ZXQucmVuZGVyLmZyYW1lJiYoSy5za2VsZXRvbi51cGRhdGUoKSxLLnNrZWxldG9uLmZyYW1lPWV0LnJlbmRlci5mcmFtZSksIUsuZnJ1c3R1bUN1bGxlZHx8Vy5pbnRlcnNlY3RzT2JqZWN0KEspKSl7eHQmJlN0LnNldEZyb21NYXRyaXhQb3NpdGlvbihLLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoc3QpO2xldCBVZT1pZS51cGRhdGUoSyksdHI9Sy5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KHRyKSl7bGV0IEtlPVVlLmdyb3Vwcztmb3IobGV0IFhyPTAsX3I9S2UubGVuZ3RoO1hyPF9yO1hyKyspe2xldCBQcj1LZVtYcl0sam49dHJbUHIubWF0ZXJpYWxJbmRleF07am4mJmpuLnZpc2libGUmJmgucHVzaChLLFVlLGpuLEV0LFN0LnosUHIpfX1lbHNlIHRyLnZpc2libGUmJmgucHVzaChLLFVlLHRyLEV0LFN0LnosbnVsbCl9fWxldCBWZT1LLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCx0cj1WZS5sZW5ndGg7VWU8dHI7VWUrKylBcihWZVtVZV0sZ3QsRXQseHQpfWZ1bmN0aW9uIFBhKEssZ3QsRXQseHQpe2xldCBGdD1LLm9wYXF1ZSxWZT1LLnRyYW5zbWlzc2l2ZSxVZT1LLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KEV0KSxWZS5sZW5ndGg+MCYmaG8oRnQsZ3QsRXQpLHh0JiZYLnZpZXdwb3J0KFAuY29weSh4dCkpLEZ0Lmxlbmd0aD4wJiZJYShGdCxndCxFdCksVmUubGVuZ3RoPjAmJklhKFZlLGd0LEV0KSxVZS5sZW5ndGg+MCYmSWEoVWUsZ3QsRXQpfWZ1bmN0aW9uIGhvKEssZ3QsRXQpe2lmKG90PT09bnVsbCl7bGV0IFVlPWE9PT0hMCYmY3QuaXNXZWJHTDI9PT0hMD9qMzp1cztvdD1uZXcgVWUoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpiZS5jb252ZXJ0KEMxKSE9PW51bGw/QzE6WmQsbWluRmlsdGVyOm94LG1hZ0ZpbHRlcjpMaSx3cmFwUzpKbyx3cmFwVDpKbyx1c2VSZW5kZXJUb1RleHR1cmU6X3QuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCB4dD1nLmdldFJlbmRlclRhcmdldCgpO2cuc2V0UmVuZGVyVGFyZ2V0KG90KSxnLmNsZWFyKCk7bGV0IEZ0PWcudG9uZU1hcHBpbmc7Zy50b25lTWFwcGluZz1LZCxJYShLLGd0LEV0KSxnLnRvbmVNYXBwaW5nPUZ0LHEudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQob3QpLHEudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKG90KSxnLnNldFJlbmRlclRhcmdldCh4dCl9ZnVuY3Rpb24gSWEoSyxndCxFdCl7bGV0IHh0PWd0LmlzU2NlbmU9PT0hMD9ndC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBGdD0wLFZlPUsubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT1LW0Z0XSx0cj1VZS5vYmplY3QsS2U9VWUuZ2VvbWV0cnksWHI9eHQ9PT1udWxsP1VlLm1hdGVyaWFsOnh0LF9yPVVlLmdyb3VwO3RyLmxheWVycy50ZXN0KEV0LmxheWVycykmJmx4KHRyLGd0LEV0LEtlLFhyLF9yKX19ZnVuY3Rpb24gbHgoSyxndCxFdCx4dCxGdCxWZSl7Sy5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKSxLLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKEV0Lm1hdHJpeFdvcmxkSW52ZXJzZSxLLm1hdHJpeFdvcmxkKSxLLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoSy5tb2RlbFZpZXdNYXRyaXgpLEZ0Lm9uQmVmb3JlUmVuZGVyKGcsZ3QsRXQseHQsSyxWZSksRnQudHJhbnNwYXJlbnQ9PT0hMCYmRnQuc2lkZT09PUwxPyhGdC5zaWRlPUlpLEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9STEsRnQubmVlZHNVcGRhdGU9ITAsZy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksRnQuc2lkZT1MMSk6Zy5yZW5kZXJCdWZmZXJEaXJlY3QoRXQsZ3QseHQsRnQsSyxWZSksSy5vbkFmdGVyUmVuZGVyKGcsZ3QsRXQseHQsRnQsVmUpfWZ1bmN0aW9uIGNtKEssZ3QsRXQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KTtsZXQgeHQ9ZHQuZ2V0KEspLEZ0PWYuc3RhdGUubGlnaHRzLFZlPWYuc3RhdGUuc2hhZG93c0FycmF5LFVlPUZ0LnN0YXRlLnZlcnNpb24sdHI9ZWUuZ2V0UGFyYW1ldGVycyhLLEZ0LnN0YXRlLFZlLGd0LEV0KSxLZT1lZS5nZXRQcm9ncmFtQ2FjaGVLZXkodHIpLFhyPXh0LnByb2dyYW1zO3h0LmVudmlyb25tZW50PUsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHh0LmZvZz1ndC5mb2cseHQuZW52TWFwPShLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldChLLmVudk1hcHx8eHQuZW52aXJvbm1lbnQpLFhyPT09dm9pZCAwJiYoSy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzZSksWHI9bmV3IE1hcCx4dC5wcm9ncmFtcz1Ycik7bGV0IF9yPVhyLmdldChLZSk7aWYoX3IhPT12b2lkIDApe2lmKHh0LmN1cnJlbnRQcm9ncmFtPT09X3ImJnh0LmxpZ2h0c1N0YXRlVmVyc2lvbj09PVVlKXJldHVybiBKMChLLHRyKSxfcn1lbHNlIHRyLnVuaWZvcm1zPWVlLmdldFVuaWZvcm1zKEspLEsub25CdWlsZChFdCx0cixnKSxLLm9uQmVmb3JlQ29tcGlsZSh0cixnKSxfcj1lZS5hY3F1aXJlUHJvZ3JhbSh0cixLZSksWHIuc2V0KEtlLF9yKSx4dC51bmlmb3Jtcz10ci51bmlmb3JtcztsZXQgUHI9eHQudW5pZm9ybXM7KCFLLmlzU2hhZGVyTWF0ZXJpYWwmJiFLLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fEsuY2xpcHBpbmc9PT0hMCkmJihQci5jbGlwcGluZ1BsYW5lcz10dC51bmlmb3JtKSxKMChLLHRyKSx4dC5uZWVkc0xpZ2h0cz1ycChLKSx4dC5saWdodHNTdGF0ZVZlcnNpb249VWUseHQubmVlZHNMaWdodHMmJihQci5hbWJpZW50TGlnaHRDb2xvci52YWx1ZT1GdC5zdGF0ZS5hbWJpZW50LFByLmxpZ2h0UHJvYmUudmFsdWU9RnQuc3RhdGUucHJvYmUsUHIuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWwsUHIuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3csUHIuc3BvdExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5zcG90LFByLnNwb3RMaWdodFNoYWRvd3MudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvdyxQci5yZWN0QXJlYUxpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYSxQci5sdGNfMS52YWx1ZT1GdC5zdGF0ZS5yZWN0QXJlYUxUQzEsUHIubHRjXzIudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMyLFByLnBvaW50TGlnaHRzLnZhbHVlPUZ0LnN0YXRlLnBvaW50LFByLnBvaW50TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93LFByLmhlbWlzcGhlcmVMaWdodHMudmFsdWU9RnQuc3RhdGUuaGVtaSxQci5kaXJlY3Rpb25hbFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hcCxQci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxQci5zcG90U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3dNYXAsUHIuc3BvdFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWF0cml4LFByLnBvaW50U2hhZG93TWFwLnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWFwLFByLnBvaW50U2hhZG93TWF0cml4LnZhbHVlPUZ0LnN0YXRlLnBvaW50U2hhZG93TWF0cml4KTtsZXQgam49X3IuZ2V0VW5pZm9ybXMoKSxucD1CMC5zZXFXaXRoVmFsdWUoam4uc2VxLFByKTtyZXR1cm4geHQuY3VycmVudFByb2dyYW09X3IseHQudW5pZm9ybXNMaXN0PW5wLF9yfWZ1bmN0aW9uIEowKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQub3V0cHV0RW5jb2Rpbmc9Z3Qub3V0cHV0RW5jb2RpbmcsRXQuaW5zdGFuY2luZz1ndC5pbnN0YW5jaW5nLEV0LnNraW5uaW5nPWd0LnNraW5uaW5nLEV0Lm1vcnBoVGFyZ2V0cz1ndC5tb3JwaFRhcmdldHMsRXQubW9ycGhOb3JtYWxzPWd0Lm1vcnBoTm9ybWFscyxFdC5tb3JwaFRhcmdldHNDb3VudD1ndC5tb3JwaFRhcmdldHNDb3VudCxFdC5udW1DbGlwcGluZ1BsYW5lcz1ndC5udW1DbGlwcGluZ1BsYW5lcyxFdC5udW1JbnRlcnNlY3Rpb249Z3QubnVtQ2xpcEludGVyc2VjdGlvbixFdC52ZXJ0ZXhBbHBoYXM9Z3QudmVydGV4QWxwaGFzLEV0LnZlcnRleFRhbmdlbnRzPWd0LnZlcnRleFRhbmdlbnRzLEV0LnRvbmVNYXBwaW5nPWd0LnRvbmVNYXBwaW5nfWZ1bmN0aW9uIGNuKEssZ3QsRXQseHQsRnQpe2d0LmlzU2NlbmUhPT0hMCYmKGd0PWJ0KSxxLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFZlPWd0LmZvZyxVZT14dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2d0LmVudmlyb25tZW50Om51bGwsdHI9Yj09PW51bGw/Zy5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6UWQsS2U9KHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/aHQ6cHQpLmdldCh4dC5lbnZNYXB8fFVlKSxYcj14dC52ZXJ0ZXhDb2xvcnM9PT0hMCYmISFFdC5hdHRyaWJ1dGVzLmNvbG9yJiZFdC5hdHRyaWJ1dGVzLmNvbG9yLml0ZW1TaXplPT09NCxfcj0hIXh0Lm5vcm1hbE1hcCYmISFFdC5hdHRyaWJ1dGVzLnRhbmdlbnQsUHI9ISFFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sam49ISFFdC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG5wPUV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsdW09eHQudG9uZU1hcHBlZD9nLnRvbmVNYXBwaW5nOktkLG1yPWR0LmdldCh4dCksRmw9Zi5zdGF0ZS5saWdodHM7aWYoWj09PSEwJiYocnQ9PT0hMHx8SyE9PUMpKXtsZXQgcXM9Sz09PUMmJnh0LmlkPT09Uzt0dC5zZXRTdGF0ZSh4dCxLLHFzKX1sZXQgWG49ITE7eHQudmVyc2lvbj09PW1yLl9fdmVyc2lvbj8obXIubmVlZHNMaWdodHMmJm1yLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PUZsLnN0YXRlLnZlcnNpb258fG1yLm91dHB1dEVuY29kaW5nIT09dHJ8fEZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSExfHwhRnQuaXNJbnN0YW5jZWRNZXNoJiZtci5pbnN0YW5jaW5nPT09ITB8fEZ0LmlzU2tpbm5lZE1lc2gmJm1yLnNraW5uaW5nPT09ITF8fCFGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSEwfHxtci5lbnZNYXAhPT1LZXx8eHQuZm9nJiZtci5mb2chPT1WZXx8bXIubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihtci5udW1DbGlwcGluZ1BsYW5lcyE9PXR0Lm51bVBsYW5lc3x8bXIubnVtSW50ZXJzZWN0aW9uIT09dHQubnVtSW50ZXJzZWN0aW9uKXx8bXIudmVydGV4QWxwaGFzIT09WHJ8fG1yLnZlcnRleFRhbmdlbnRzIT09X3J8fG1yLm1vcnBoVGFyZ2V0cyE9PVByfHxtci5tb3JwaE5vcm1hbHMhPT1qbnx8bXIudG9uZU1hcHBpbmchPT11bXx8Y3QuaXNXZWJHTDI9PT0hMCYmbXIubW9ycGhUYXJnZXRzQ291bnQhPT1ucCkmJihYbj0hMCk6KFhuPSEwLG1yLl9fdmVyc2lvbj14dC52ZXJzaW9uKTtsZXQgQmw9bXIuY3VycmVudFByb2dyYW07WG49PT0hMCYmKEJsPWNtKHh0LGd0LEZ0KSk7bGV0IHV4PSExLEhsPSExLFZsPSExLFlpPUJsLmdldFVuaWZvcm1zKCksaG09bXIudW5pZm9ybXM7aWYoWC51c2VQcm9ncmFtKEJsLnByb2dyYW0pJiYodXg9ITAsSGw9ITAsVmw9ITApLHh0LmlkIT09UyYmKFM9eHQuaWQsSGw9ITApLHV4fHxDIT09Syl7aWYoWWkuc2V0VmFsdWUobHQsInByb2plY3Rpb25NYXRyaXgiLEsucHJvamVjdGlvbk1hdHJpeCksY3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmWWkuc2V0VmFsdWUobHQsImxvZ0RlcHRoQnVmRkMiLDIvKE1hdGgubG9nKEsuZmFyKzEpL01hdGguTE4yKSksQyE9PUsmJihDPUssSGw9ITAsVmw9ITApLHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuZW52TWFwKXtsZXQgcXM9WWkubWFwLmNhbWVyYVBvc2l0aW9uO3FzIT09dm9pZCAwJiZxcy5zZXRWYWx1ZShsdCxTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkpfSh4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8eHQuaXNNZXNoQmFzaWNNYXRlcmlhbHx8eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8eHQuaXNTaGFkZXJNYXRlcmlhbCkmJllpLnNldFZhbHVlKGx0LCJpc09ydGhvZ3JhcGhpYyIsSy5pc09ydGhvZ3JhcGhpY0NhbWVyYT09PSEwKSwoeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWx8fHh0LmlzU2hhZG93TWF0ZXJpYWx8fEZ0LmlzU2tpbm5lZE1lc2gpJiZZaS5zZXRWYWx1ZShsdCwidmlld01hdHJpeCIsSy5tYXRyaXhXb3JsZEludmVyc2UpfWlmKEZ0LmlzU2tpbm5lZE1lc2gpe1lpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4IiksWWkuc2V0T3B0aW9uYWwobHQsRnQsImJpbmRNYXRyaXhJbnZlcnNlIik7bGV0IHFzPUZ0LnNrZWxldG9uO3FzJiYoY3QuZmxvYXRWZXJ0ZXhUZXh0dXJlcz8ocXMuYm9uZVRleHR1cmU9PT1udWxsJiZxcy5jb21wdXRlQm9uZVRleHR1cmUoKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmUiLHFzLmJvbmVUZXh0dXJlLHEpLFlpLnNldFZhbHVlKGx0LCJib25lVGV4dHVyZVNpemUiLHFzLmJvbmVUZXh0dXJlU2l6ZSkpOllpLnNldE9wdGlvbmFsKGx0LHFzLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFFdCYmKEV0Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMHx8RXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCkmJiR0LnVwZGF0ZShGdCxFdCx4dCxCbCksKEhsfHxtci5yZWNlaXZlU2hhZG93IT09RnQucmVjZWl2ZVNoYWRvdykmJihtci5yZWNlaXZlU2hhZG93PUZ0LnJlY2VpdmVTaGFkb3csWWkuc2V0VmFsdWUobHQsInJlY2VpdmVTaGFkb3ciLEZ0LnJlY2VpdmVTaGFkb3cpKSxIbCYmKFlpLnNldFZhbHVlKGx0LCJ0b25lTWFwcGluZ0V4cG9zdXJlIixnLnRvbmVNYXBwaW5nRXhwb3N1cmUpLG1yLm5lZWRzTGlnaHRzJiZjeChobSxWbCksVmUmJnh0LmZvZyYmTGUucmVmcmVzaEZvZ1VuaWZvcm1zKGhtLFZlKSxMZS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhobSx4dCxJLEIsb3QpLEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkpLHh0LmlzU2hhZGVyTWF0ZXJpYWwmJnh0LnVuaWZvcm1zTmVlZFVwZGF0ZT09PSEwJiYoQjAudXBsb2FkKGx0LG1yLnVuaWZvcm1zTGlzdCxobSxxKSx4dC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLHh0LmlzU3ByaXRlTWF0ZXJpYWwmJllpLnNldFZhbHVlKGx0LCJjZW50ZXIiLEZ0LmNlbnRlciksWWkuc2V0VmFsdWUobHQsIm1vZGVsVmlld01hdHJpeCIsRnQubW9kZWxWaWV3TWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibm9ybWFsTWF0cml4IixGdC5ub3JtYWxNYXRyaXgpLFlpLnNldFZhbHVlKGx0LCJtb2RlbE1hdHJpeCIsRnQubWF0cml4V29ybGQpLEJsfWZ1bmN0aW9uIGN4KEssZ3Qpe0suYW1iaWVudExpZ2h0Q29sb3IubmVlZHNVcGRhdGU9Z3QsSy5saWdodFByb2JlLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9Z3QsSy5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5zcG90TGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1ndCxLLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuaGVtaXNwaGVyZUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndH1mdW5jdGlvbiBycChLKXtyZXR1cm4gSy5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEsuaXNNZXNoVG9vbk1hdGVyaWFsfHxLLmlzTWVzaFBob25nTWF0ZXJpYWx8fEsuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8Sy5pc1NoYWRvd01hdGVyaWFsfHxLLmlzU2hhZGVyTWF0ZXJpYWwmJksubGlnaHRzPT09ITB9dGhpcy5nZXRBY3RpdmVDdWJlRmFjZT1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LHRoaXMuZ2V0UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LHRoaXMuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXM9ZnVuY3Rpb24oSyxndCxFdCl7ZHQuZ2V0KEsudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9Z3QsZHQuZ2V0KEsuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1FdDtsZXQgeHQ9ZHQuZ2V0KEspO3h0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcz0hMCx4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJih4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyPUV0PT09dm9pZCAwLHh0Ll9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEsudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxLLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxLLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEssZ3Qpe2xldCBFdD1kdC5nZXQoSyk7RXQuX193ZWJnbEZyYW1lYnVmZmVyPWd0LEV0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPWd0PT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihLLGd0PTAsRXQ9MCl7Yj1LLHk9Z3QseD1FdDtsZXQgeHQ9ITA7aWYoSyl7bGV0IEtlPWR0LmdldChLKTtLZS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlciE9PXZvaWQgMD8oWC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCkseHQ9ITEpOktlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9xLnNldHVwUmVuZGVyVGFyZ2V0KEspOktlLl9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmcS5yZWJpbmRUZXh0dXJlcyhLLGR0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBGdD1udWxsLFZlPSExLFVlPSExO2lmKEspe2xldCBLZT1LLnRleHR1cmU7KEtlLmlzRGF0YVRleHR1cmUzRHx8S2UuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoVWU9ITApO2xldCBYcj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO0suaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KEZ0PVhyW2d0XSxWZT0hMCk6Sy51c2VSZW5kZXJidWZmZXI/RnQ9ZHQuZ2V0KEspLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcjpGdD1YcixQLmNvcHkoSy52aWV3cG9ydCksay5jb3B5KEsuc2Npc3NvciksTz1LLnNjaXNzb3JUZXN0fWVsc2UgUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksay5jb3B5KHopLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCksTz1VO2lmKFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLEZ0KSYmY3QuZHJhd0J1ZmZlcnMmJnh0JiZYLmRyYXdCdWZmZXJzKEssRnQpLFgudmlld3BvcnQoUCksWC5zY2lzc29yKGspLFguc2V0U2Npc3NvclRlc3QoTyksVmUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKTtsdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStndCxLZS5fX3dlYmdsVGV4dHVyZSxFdCl9ZWxzZSBpZihVZSl7bGV0IEtlPWR0LmdldChLLnRleHR1cmUpLFhyPWd0fHwwO2x0LmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LEtlLl9fd2ViZ2xUZXh0dXJlLEV0fHwwLFhyKX1TPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSxVZSl7aWYoIShLJiZLLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCB0cj1kdC5nZXQoSykuX193ZWJnbEZyYW1lYnVmZmVyO2lmKEsuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJlVlIT09dm9pZCAwJiYodHI9dHJbVWVdKSx0cil7WC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHIpO3RyeXtsZXQgS2U9Sy50ZXh0dXJlLFhyPUtlLmZvcm1hdCxfcj1LZS50eXBlO2lmKFhyIT09UW8mJmJlLmNvbnZlcnQoWHIpIT09bHQuZ2V0UGFyYW1ldGVyKDM1NzM5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFJHQkEgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBmb3JtYXQuIik7cmV0dXJufWxldCBQcj1fcj09PUMxJiYoX3QuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8Y3QuaXNXZWJHTDImJl90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZihfciE9PVpkJiZiZS5jb252ZXJ0KF9yKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOCkmJiEoX3I9PT1qZCYmKGN0LmlzV2ViR0wyfHxfdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fF90LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpKSYmIVByKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gVW5zaWduZWRCeXRlVHlwZSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHR5cGUuIik7cmV0dXJufWx0LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/Z3Q+PTAmJmd0PD1LLndpZHRoLXh0JiZFdD49MCYmRXQ8PUsuaGVpZ2h0LUZ0JiZsdC5yZWFkUGl4ZWxzKGd0LEV0LHh0LEZ0LGJlLmNvbnZlcnQoWHIpLGJlLmNvbnZlcnQoX3IpLFZlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgS2U9YiE9PW51bGw/ZHQuZ2V0KGIpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLEtlKX19fSx0aGlzLmNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0PTApe2lmKGd0LmlzRnJhbWVidWZmZXJUZXh0dXJlIT09ITApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7cmV0dXJufWxldCB4dD1NYXRoLnBvdygyLC1FdCksRnQ9TWF0aC5mbG9vcihndC5pbWFnZS53aWR0aCp4dCksVmU9TWF0aC5mbG9vcihndC5pbWFnZS5oZWlnaHQqeHQpO3Euc2V0VGV4dHVyZTJEKGd0LDApLGx0LmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMsRXQsMCwwLEsueCxLLnksRnQsVmUpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKEssZ3QsRXQseHQ9MCl7bGV0IEZ0PWd0LmltYWdlLndpZHRoLFZlPWd0LmltYWdlLmhlaWdodCxVZT1iZS5jb252ZXJ0KEV0LmZvcm1hdCksdHI9YmUuY29udmVydChFdC50eXBlKTtxLnNldFRleHR1cmUyRChFdCwwKSxsdC5waXhlbFN0b3JlaSgzNzQ0MCxFdC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEsRXQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyxFdC51bnBhY2tBbGlnbm1lbnQpLGd0LmlzRGF0YVRleHR1cmU/bHQudGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksRnQsVmUsVWUsdHIsZ3QuaW1hZ2UuZGF0YSk6Z3QuaXNDb21wcmVzc2VkVGV4dHVyZT9sdC5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNTUzLHh0LEsueCxLLnksZ3QubWlwbWFwc1swXS53aWR0aCxndC5taXBtYXBzWzBdLmhlaWdodCxVZSxndC5taXBtYXBzWzBdLmRhdGEpOmx0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LFVlLHRyLGd0LmltYWdlKSx4dD09PTAmJkV0LmdlbmVyYXRlTWlwbWFwcyYmbHQuZ2VuZXJhdGVNaXBtYXAoMzU1MyksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihLLGd0LEV0LHh0LEZ0PTApe2lmKGcuaXNXZWJHTDFSZW5kZXJlcil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7cmV0dXJufWxldCBWZT1LLm1heC54LUsubWluLngrMSxVZT1LLm1heC55LUsubWluLnkrMSx0cj1LLm1heC56LUsubWluLnorMSxLZT1iZS5jb252ZXJ0KHh0LmZvcm1hdCksWHI9YmUuY29udmVydCh4dC50eXBlKSxfcjtpZih4dC5pc0RhdGFUZXh0dXJlM0QpcS5zZXRUZXh0dXJlM0QoeHQsMCksX3I9MzI4Nzk7ZWxzZSBpZih4dC5pc0RhdGFUZXh0dXJlMkRBcnJheSlxLnNldFRleHR1cmUyREFycmF5KHh0LDApLF9yPTM1ODY2O2Vsc2V7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO3JldHVybn1sdC5waXhlbFN0b3JlaSgzNzQ0MCx4dC5mbGlwWSksbHQucGl4ZWxTdG9yZWkoMzc0NDEseHQucHJlbXVsdGlwbHlBbHBoYSksbHQucGl4ZWxTdG9yZWkoMzMxNyx4dC51bnBhY2tBbGlnbm1lbnQpO2xldCBQcj1sdC5nZXRQYXJhbWV0ZXIoMzMxNCksam49bHQuZ2V0UGFyYW1ldGVyKDMyODc4KSxucD1sdC5nZXRQYXJhbWV0ZXIoMzMxNiksdW09bHQuZ2V0UGFyYW1ldGVyKDMzMTUpLG1yPWx0LmdldFBhcmFtZXRlcigzMjg3NyksRmw9RXQuaXNDb21wcmVzc2VkVGV4dHVyZT9FdC5taXBtYXBzWzBdOkV0LmltYWdlO2x0LnBpeGVsU3RvcmVpKDMzMTQsRmwud2lkdGgpLGx0LnBpeGVsU3RvcmVpKDMyODc4LEZsLmhlaWdodCksbHQucGl4ZWxTdG9yZWkoMzMxNixLLm1pbi54KSxsdC5waXhlbFN0b3JlaSgzMzE1LEsubWluLnkpLGx0LnBpeGVsU3RvcmVpKDMyODc3LEsubWluLnopLEV0LmlzRGF0YVRleHR1cmV8fEV0LmlzRGF0YVRleHR1cmUzRD9sdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsLmRhdGEpOkV0LmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksbHQuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsRmwuZGF0YSkpOmx0LnRleFN1YkltYWdlM0QoX3IsRnQsZ3QueCxndC55LGd0LnosVmUsVWUsdHIsS2UsWHIsRmwpLGx0LnBpeGVsU3RvcmVpKDMzMTQsUHIpLGx0LnBpeGVsU3RvcmVpKDMyODc4LGpuKSxsdC5waXhlbFN0b3JlaSgzMzE2LG5wKSxsdC5waXhlbFN0b3JlaSgzMzE1LHVtKSxsdC5waXhlbFN0b3JlaSgzMjg3NyxtciksRnQ9PT0wJiZ4dC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKF9yKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5pbml0VGV4dHVyZT1mdW5jdGlvbihLKXtxLnNldFRleHR1cmUyRChLLDApLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXt5PTAseD0wLGI9bnVsbCxYLnJlc2V0KCksbnQucmVzZXQoKX0sdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfXJuLnByb3RvdHlwZS5pc1dlYkdMUmVuZGVyZXI9ITA7dmFyIGdVPWNsYXNzIGV4dGVuZHMgcm57fTtnVS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgTzE9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5kZW5zaXR5PXJ9Y2xvbmUoKXtyZXR1cm4gbmV3IE8xKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtPMS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB6MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MSxuPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMubmVhcj1yLHRoaXMuZmFyPW59Y2xvbmUoKXtyZXR1cm4gbmV3IHoxKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt6MS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHEwPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdC5iYWNrZ3JvdW5kIT09bnVsbCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksdC5lbnZpcm9ubWVudCE9PW51bGwmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksdC5mb2chPT1udWxsJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksdC5vdmVycmlkZU1hdGVyaWFsIT09bnVsbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gdGhpcy5mb2chPT1udWxsJiYoci5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxyfX07cTAucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIGVtPWNsYXNze2NvbnN0cnVjdG9yKHQscil7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPXIsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL3I6MCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9TmwoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxyLG4pe3QqPXRoaXMuc3RyaWRlLG4qPXIuc3RyaWRlO2ZvcihsZXQgaT0wLG89dGhpcy5zdHJpZGU7aTxvO2krKyl0aGlzLmFycmF5W3QraV09ci5hcnJheVtuK2ldO3JldHVybiB0aGlzfXNldCh0LHI9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsciksdGhpc31jbG9uZSh0KXt0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IHI9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxuPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHIsdGhpcy5zdHJpZGUpO3JldHVybiBuLnNldFVzYWdlKHRoaXMudXNhZ2UpLG59b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB0LmFycmF5QnVmZmVycz09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzPXt9KSx0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD09PXZvaWQgMCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPU5sKCkpLHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT09PXZvaWQgMCYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07ZW0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIEFpPW5ldyBqLHRwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGk9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPXIsdGhpcy5vZmZzZXQ9bix0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5kYXRhLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixBaS54LEFpLnksQWkueik7cmV0dXJuIHRoaXN9c2V0WCh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1yLHRoaXN9c2V0WSh0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPXIsdGhpc31zZXRaKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09cix0aGlzfXNldFcodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1yLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxyLG4pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpc31zZXRYWVoodCxyLG4saSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPXIsdGhpcy5kYXRhLmFycmF5W3QrMV09bix0aGlzLmRhdGEuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJuIG5ldyBKZShuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihyKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS5jbG9uZSh0KSksbmV3IHRwKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSx0aGlzLml0ZW1TaXplLHRoaXMub2Zmc2V0LHRoaXMubm9ybWFsaXplZCl9dG9KU09OKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS50b0pTT04oKTogU2VyaWFsaXppbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCByPVtdO2ZvcihsZXQgbj0wO248dGhpcy5jb3VudDtuKyspe2xldCBpPW4qdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKXIucHVzaCh0aGlzLmRhdGEuYXJyYXlbaStvXSl9cmV0dXJue2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6cixub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19ZWxzZSByZXR1cm4gdC5pbnRlcmxlYXZlZEJ1ZmZlcnM9PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07dHAucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGlNPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07aU0ucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIE4zLERQPW5ldyBqLEQzPW5ldyBqLE8zPW5ldyBqLHozPW5ldyBMdCxPUD1uZXcgTHQsS2ZlPW5ldyBNZSxMVj1uZXcgaix6UD1uZXcgaixrVj1uZXcgaixqdWU9bmV3IEx0LGR1dD1uZXcgTHQsWHVlPW5ldyBMdCxvTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLE4zPT09dm9pZCAwKXtOMz1uZXcgUGU7bGV0IHI9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksbj1uZXcgZW0ociw1KTtOMy5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxOMy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgdHAobiwzLDAsITEpKSxOMy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgdHAobiwyLDMsITEpKX10aGlzLmdlb21ldHJ5PU4zLHRoaXMubWF0ZXJpYWw9dCE9PXZvaWQgMD90Om5ldyBpTSx0aGlzLmNlbnRlcj1uZXcgTHQoLjUsLjUpfXJheWNhc3QodCxyKXt0LmNhbWVyYT09PW51bGwmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSxEMy5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksS2ZlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLE8zLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmRDMubXVsdGlwbHlTY2FsYXIoLU8zLnopO2xldCBuPXRoaXMubWF0ZXJpYWwucm90YXRpb24saSxvO24hPT0wJiYobz1NYXRoLmNvcyhuKSxpPU1hdGguc2luKG4pKTtsZXQgYT10aGlzLmNlbnRlcjtSVihMVi5zZXQoLS41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoelAuc2V0KC41LC0uNSwwKSxPMyxhLEQzLGksbyksUlYoa1Yuc2V0KC41LC41LDApLE8zLGEsRDMsaSxvKSxqdWUuc2V0KDAsMCksZHV0LnNldCgxLDApLFh1ZS5zZXQoMSwxKTtsZXQgcz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVix6UCxrViwhMSxEUCk7aWYocz09PW51bGwmJihSVih6UC5zZXQoLS41LC41LDApLE8zLGEsRDMsaSxvKSxkdXQuc2V0KDAsMSkscz10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShMVixrVix6UCwhMSxEUCkscz09PW51bGwpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhEUCk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpEUC5jbG9uZSgpLHV2Om9pLmdldFVWKERQLExWLHpQLGtWLGp1ZSxkdXQsWHVlLG5ldyBMdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0LmNlbnRlciE9PXZvaWQgMCYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fTtvTS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7ZnVuY3Rpb24gUlYoZSx0LHIsbixpLG8pe3ozLnN1YlZlY3RvcnMoZSxyKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KG4pLGkhPT12b2lkIDA/KE9QLng9byp6My54LWkqejMueSxPUC55PWkqejMueCtvKnozLnkpOk9QLmNvcHkoejMpLGUuY29weSh0KSxlLngrPU9QLngsZS55Kz1PUC55LGUuYXBwbHlNYXRyaXg0KEtmZSl9dmFyIE5WPW5ldyBqLCR1ZT1uZXcgaixfVT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9jdXJyZW50TGV2ZWw9MCx0aGlzLnR5cGU9IkxPRCIsT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7bGV2ZWxzOntlbnVtZXJhYmxlOiEwLHZhbHVlOltdfSxpc0xPRDp7dmFsdWU6ITB9fSksdGhpcy5hdXRvVXBkYXRlPSEwfWNvcHkodCl7c3VwZXIuY29weSh0LCExKTtsZXQgcj10LmxldmVscztmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspe2xldCBvPXJbbl07dGhpcy5hZGRMZXZlbChvLm9iamVjdC5jbG9uZSgpLG8uZGlzdGFuY2UpfXJldHVybiB0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXN9YWRkTGV2ZWwodCxyPTApe3I9TWF0aC5hYnMocik7bGV0IG49dGhpcy5sZXZlbHMsaTtmb3IoaT0wO2k8bi5sZW5ndGgmJiEocjxuW2ldLmRpc3RhbmNlKTtpKyspO3JldHVybiBuLnNwbGljZShpLDAse2Rpc3RhbmNlOnIsb2JqZWN0OnR9KSx0aGlzLmFkZCh0KSx0aGlzfWdldEN1cnJlbnRMZXZlbCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGV2ZWx9Z2V0T2JqZWN0Rm9yRGlzdGFuY2UodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MCl7bGV0IG4saTtmb3Iobj0xLGk9ci5sZW5ndGg7bjxpJiYhKHQ8cltuXS5kaXN0YW5jZSk7bisrKTtyZXR1cm4gcltuLTFdLm9iamVjdH1yZXR1cm4gbnVsbH1yYXljYXN0KHQscil7aWYodGhpcy5sZXZlbHMubGVuZ3RoPjApe05WLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgaT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOVik7dGhpcy5nZXRPYmplY3RGb3JEaXN0YW5jZShpKS5yYXljYXN0KHQscil9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLmxldmVscztpZihyLmxlbmd0aD4xKXtOVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksJHVlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1hdHJpeFdvcmxkKTtsZXQgbj1OVi5kaXN0YW5jZVRvKCR1ZSkvdC56b29tO3JbMF0ub2JqZWN0LnZpc2libGU9ITA7bGV0IGksbztmb3IoaT0xLG89ci5sZW5ndGg7aTxvJiZuPj1yW2ldLmRpc3RhbmNlO2krKylyW2ktMV0ub2JqZWN0LnZpc2libGU9ITEscltpXS5vYmplY3QudmlzaWJsZT0hMDtmb3IodGhpcy5fY3VycmVudExldmVsPWktMTtpPG87aSsrKXJbaV0ub2JqZWN0LnZpc2libGU9ITF9fXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7dGhpcy5hdXRvVXBkYXRlPT09ITEmJihyLm9iamVjdC5hdXRvVXBkYXRlPSExKSxyLm9iamVjdC5sZXZlbHM9W107bGV0IG49dGhpcy5sZXZlbHM7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXtsZXQgYT1uW2ldO3Iub2JqZWN0LmxldmVscy5wdXNoKHtvYmplY3Q6YS5vYmplY3QudXVpZCxkaXN0YW5jZTphLmRpc3RhbmNlfSl9cmV0dXJuIHJ9fSxLdWU9bmV3IGosWnVlPW5ldyBlbixKdWU9bmV3IGVuLElncj1uZXcgaixRdWU9bmV3IE1lLGFNPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IE1lLHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxyKXt0aGlzLnNrZWxldG9uPXQscj09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxyPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KHIpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShyKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgZW4scj10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7dC54PXIuZ2V0WChuKSx0Lnk9ci5nZXRZKG4pLHQuej1yLmdldFoobiksdC53PXIuZ2V0VyhuKTtsZXQgbz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7byE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKG8pOnQuc2V0KDEsMCwwLDApLHIuc2V0WFlaVyhuLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LHIpe2xldCBuPXRoaXMuc2tlbGV0b24saT10aGlzLmdlb21ldHJ5O1p1ZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luSW5kZXgsdCksSnVlLmZyb21CdWZmZXJBdHRyaWJ1dGUoaS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQsdCksS3VlLmNvcHkocikuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksci5zZXQoMCwwLDApO2ZvcihsZXQgbz0wO288NDtvKyspe2xldCBhPUp1ZS5nZXRDb21wb25lbnQobyk7aWYoYSE9PTApe2xldCBzPVp1ZS5nZXRDb21wb25lbnQobyk7UXVlLm11bHRpcGx5TWF0cmljZXMobi5ib25lc1tzXS5tYXRyaXhXb3JsZCxuLmJvbmVJbnZlcnNlc1tzXSksci5hZGRTY2FsZWRWZWN0b3IoSWdyLmNvcHkoS3VlKS5hcHBseU1hdHJpeDQoUXVlKSxhKX19cmV0dXJuIHIuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07YU0ucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIHNNPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtzTS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBKZD1jbGFzcyBleHRlbmRzIHZpe2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEsbj0xLGksbyxhLHMsbCxjPUxpLHU9TGksaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bn0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O0pkLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciB0aGU9bmV3IE1lLExncj1uZXcgTWUsbE09Y2xhc3N7Y29uc3RydWN0b3IodD1bXSxyPVtdKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLmJvbmVzPXQuc2xpY2UoMCksdGhpcy5ib25lSW52ZXJzZXM9cix0aGlzLmJvbmVNYXRyaWNlcz1udWxsLHRoaXMuYm9uZVRleHR1cmU9bnVsbCx0aGlzLmJvbmVUZXh0dXJlU2l6ZT0wLHRoaXMuZnJhbWU9LTEsdGhpcy5pbml0KCl9aW5pdCgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcztpZih0aGlzLmJvbmVNYXRyaWNlcz1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKjE2KSxyLmxlbmd0aD09PTApdGhpcy5jYWxjdWxhdGVJbnZlcnNlcygpO2Vsc2UgaWYodC5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTnVtYmVyIG9mIGludmVyc2UgYm9uZSBtYXRyaWNlcyBkb2VzIG5vdCBtYXRjaCBhbW91bnQgb2YgYm9uZXMuIiksdGhpcy5ib25lSW52ZXJzZXM9W107Zm9yKGxldCBuPTAsaT10aGlzLmJvbmVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKX19Y2FsY3VsYXRlSW52ZXJzZXMoKXt0aGlzLmJvbmVJbnZlcnNlcy5sZW5ndGg9MDtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPW5ldyBNZTt0aGlzLmJvbmVzW3RdJiZuLmNvcHkodGhpcy5ib25lc1t0XS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksdGhpcy5ib25lSW52ZXJzZXMucHVzaChuKX19cG9zZSgpe2ZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiZuLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5ib25lSW52ZXJzZXNbdF0pLmludmVydCgpfWZvcihsZXQgdD0wLHI9dGhpcy5ib25lcy5sZW5ndGg7dDxyO3QrKyl7bGV0IG49dGhpcy5ib25lc1t0XTtuJiYobi5wYXJlbnQmJm4ucGFyZW50LmlzQm9uZT8obi5tYXRyaXguY29weShuLnBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCksbi5tYXRyaXgubXVsdGlwbHkobi5tYXRyaXhXb3JsZCkpOm4ubWF0cml4LmNvcHkobi5tYXRyaXhXb3JsZCksbi5tYXRyaXguZGVjb21wb3NlKG4ucG9zaXRpb24sbi5xdWF0ZXJuaW9uLG4uc2NhbGUpKX19dXBkYXRlKCl7bGV0IHQ9dGhpcy5ib25lcyxyPXRoaXMuYm9uZUludmVyc2VzLG49dGhpcy5ib25lTWF0cmljZXMsaT10aGlzLmJvbmVUZXh0dXJlO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXT90W29dLm1hdHJpeFdvcmxkOkxncjt0aGUubXVsdGlwbHlNYXRyaWNlcyhzLHJbb10pLHRoZS50b0FycmF5KG4sbyoxNil9aSE9PW51bGwmJihpLm5lZWRzVXBkYXRlPSEwKX1jbG9uZSgpe3JldHVybiBuZXcgbE0odGhpcy5ib25lcyx0aGlzLmJvbmVJbnZlcnNlcyl9Y29tcHV0ZUJvbmVUZXh0dXJlKCl7bGV0IHQ9TWF0aC5zcXJ0KHRoaXMuYm9uZXMubGVuZ3RoKjQpO3Q9UmZlKHQpLHQ9TWF0aC5tYXgodCw0KTtsZXQgcj1uZXcgRmxvYXQzMkFycmF5KHQqdCo0KTtyLnNldCh0aGlzLmJvbmVNYXRyaWNlcyk7bGV0IG49bmV3IEpkKHIsdCx0LFFvLGpkKTtyZXR1cm4gbi5uZWVkc1VwZGF0ZT0hMCx0aGlzLmJvbmVNYXRyaWNlcz1yLHRoaXMuYm9uZVRleHR1cmU9bix0aGlzLmJvbmVUZXh0dXJlU2l6ZT10LHRoaXN9Z2V0Qm9uZUJ5TmFtZSh0KXtmb3IobGV0IHI9MCxuPXRoaXMuYm9uZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMuYm9uZXNbcl07aWYoaS5uYW1lPT09dClyZXR1cm4gaX19ZGlzcG9zZSgpe3RoaXMuYm9uZVRleHR1cmUhPT1udWxsJiYodGhpcy5ib25lVGV4dHVyZS5kaXNwb3NlKCksdGhpcy5ib25lVGV4dHVyZT1udWxsKX1mcm9tSlNPTih0LHIpe3RoaXMudXVpZD10LnV1aWQ7Zm9yKGxldCBuPTAsaT10LmJvbmVzLmxlbmd0aDtuPGk7bisrKXtsZXQgbz10LmJvbmVzW25dLGE9cltvXTthPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5Ta2VsZXRvbjogTm8gYm9uZSBmb3VuZCB3aXRoIFVVSUQ6IixvKSxhPW5ldyBzTSksdGhpcy5ib25lcy5wdXNoKGEpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobmV3IE1lKCkuZnJvbUFycmF5KHQuYm9uZUludmVyc2VzW25dKSl9cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJTa2VsZXRvbiIsZ2VuZXJhdG9yOiJTa2VsZXRvbi50b0pTT04ifSxib25lczpbXSxib25lSW52ZXJzZXM6W119O3QudXVpZD10aGlzLnV1aWQ7bGV0IHI9dGhpcy5ib25lcyxuPXRoaXMuYm9uZUludmVyc2VzO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKyl7bGV0IGE9cltpXTt0LmJvbmVzLnB1c2goYS51dWlkKTtsZXQgcz1uW2ldO3QuYm9uZUludmVyc2VzLnB1c2gocy50b0FycmF5KCkpfXJldHVybiB0fX0scm09Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbixpPTEpe3R5cGVvZiBuPT0ibnVtYmVyIiYmKGk9bixuPSExLGNvbnNvbGUuZXJyb3IoIlRIUkVFLkluc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIG5vcm1hbGl6ZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50LiIpKSxzdXBlcih0LHIsbiksdGhpcy5tZXNoUGVyQXR0cmlidXRlPWl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9dC5tZXNoUGVyQXR0cmlidXRlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsdC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMCx0fX07cm0ucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBlaGU9bmV3IE1lLHJoZT1uZXcgTWUsRFY9W10sRlA9bmV3IHRpLGk2PWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsciksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcm0obmV3IEZsb2F0MzJBcnJheShuKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1uLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxyKXtyLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLm1hdHJpeFdvcmxkLGk9dGhpcy5jb3VudDtpZihGUC5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LEZQLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsRlAubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBvPTA7bzxpO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLGVoZSkscmhlLm11bHRpcGx5TWF0cmljZXMobixlaGUpLEZQLm1hdHJpeFdvcmxkPXJoZSxGUC5yYXljYXN0KHQsRFYpO2ZvcihsZXQgYT0wLHM9RFYubGVuZ3RoO2E8czthKyspe2xldCBsPURWW2FdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsci5wdXNoKGwpfURWLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQscil7dGhpcy5pbnN0YW5jZUNvbG9yPT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgcm0obmV3IEZsb2F0MzJBcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmNvdW50KjMpLDMpKSxyLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9c2V0TWF0cml4QXQodCxyKXtyLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O2k2LnByb3RvdHlwZS5pc0luc3RhbmNlZE1lc2g9ITA7dmFyIEdpPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5saW5ld2lkdGg9MSx0aGlzLmxpbmVjYXA9InJvdW5kIix0aGlzLmxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5saW5ld2lkdGg9dC5saW5ld2lkdGgsdGhpcy5saW5lY2FwPXQubGluZWNhcCx0aGlzLmxpbmVqb2luPXQubGluZWpvaW4sdGhpc319O0dpLnByb3RvdHlwZS5pc0xpbmVCYXNpY01hdGVyaWFsPSEwO3ZhciBuaGU9bmV3IGosaWhlPW5ldyBqLG9oZT1uZXcgTWUsbXV0PW5ldyBKZixPVj1uZXcgWmYsY2g9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBHaSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPXIsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bMF07Zm9yKGxldCBpPTEsbz1yLmNvdW50O2k8bztpKyspbmhlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpLTEpLGloZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSksbltpXT1uW2ktMV0sbltpXSs9bmhlLmRpc3RhbmNlVG8oaWhlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgeGUobiwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLE9WLmNvcHkobi5ib3VuZGluZ1NwaGVyZSksT1YuYXBwbHlNYXRyaXg0KGkpLE9WLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKE9WKT09PSExKXJldHVybjtvaGUuY29weShpKS5pbnZlcnQoKSxtdXQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KG9oZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcyxjPW5ldyBqLHU9bmV3IGosaD1uZXcgaixmPW5ldyBqLHA9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZD1uLmluZGV4LF89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGQhPT1udWxsKXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oZC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtsZXQgQz1kLmdldFgoYiksUD1kLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxDKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxQKSxtdXQuZGlzdGFuY2VTcVRvU2VnbWVudChjLHUsZixoKT5sKWNvbnRpbnVlO2YuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBPPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKGYpO088dC5uZWFyfHxPPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOk8scG9pbnQ6aC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpiLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNle2xldCB5PU1hdGgubWF4KDAsYS5zdGFydCkseD1NYXRoLm1pbihfLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBiPXksUz14LTE7YjxTO2IrPXApe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGIrMSksbXV0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgUD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtQPHQubmVhcnx8UD50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpQLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19fWVsc2Ugbi5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgcj10Lm1vcnBoQXR0cmlidXRlcyxuPU9iamVjdC5rZXlzKHIpO2lmKG4ubGVuZ3RoPjApe2xldCBpPXJbblswXV07aWYoaSE9PXZvaWQgMCl7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1pW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdPW99fX19ZWxzZXtsZXQgcj10Lm1vcnBoVGFyZ2V0cztyIT09dm9pZCAwJiZyLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2NoLnByb3RvdHlwZS5pc0xpbmU9ITA7dmFyIGFoZT1uZXcgaixzaGU9bmV3IGosQWE9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYodC5pbmRleD09PW51bGwpe2xldCByPXQuYXR0cmlidXRlcy5wb3NpdGlvbixuPVtdO2ZvcihsZXQgaT0wLG89ci5jb3VudDtpPG87aSs9MilhaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLHNoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaSsxKSxuW2ldPWk9PT0wPzA6bltpLTFdLG5baSsxXT1uW2ldK2FoZS5kaXN0YW5jZVRvKHNoZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07QWEucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19O282LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBubT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtubS5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgbGhlPW5ldyBNZSxyaHQ9bmV3IEpmLHpWPW5ldyBaZixGVj1uZXcgaixpbT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IFBlLHI9bmV3IG5tKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxhPW4uZHJhd1JhbmdlO2lmKG4uYm91bmRpbmdTcGhlcmU9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHpWLmNvcHkobi5ib3VuZGluZ1NwaGVyZSkselYuYXBwbHlNYXRyaXg0KGkpLHpWLnJhZGl1cys9byx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKHpWKT09PSExKXJldHVybjtsaGUuY29weShpKS5pbnZlcnQoKSxyaHQuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KGxoZSk7bGV0IHM9by8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPXMqcztpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBjPW4uaW5kZXgsaD1uLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoYyE9PW51bGwpe2xldCBmPU1hdGgubWF4KDAsYS5zdGFydCkscD1NYXRoLm1pbihjLmNvdW50LGEuc3RhcnQrYS5jb3VudCk7Zm9yKGxldCBkPWYsZz1wO2Q8ZztkKyspe2xldCBfPWMuZ2V0WChkKTtGVi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsXyksY2hlKEZWLF8sbCxpLHQscix0aGlzKX19ZWxzZXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oaC5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKUZWLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCxkKSxjaGUoRlYsZCxsLGksdCxyLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O2ltLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBjaGUoZSx0LHIsbixpLG8sYSl7bGV0IHM9cmh0LmRpc3RhbmNlU3FUb1BvaW50KGUpO2lmKHM8cil7bGV0IGw9bmV3IGo7cmh0LmNsb3Nlc3RQb2ludFRvUG9pbnQoZSxsKSxsLmFwcGx5TWF0cml4NChuKTtsZXQgYz1pLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPGkubmVhcnx8Yz5pLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KHMpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OmF9KX19dmFyIHlVPWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm1pbkZpbHRlcj1hIT09dm9pZCAwP2E6aWksdGhpcy5tYWdGaWx0ZXI9byE9PXZvaWQgMD9vOmlpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O3lVLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgdlU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OnJ9KSx0aGlzLmZvcm1hdD1uLHRoaXMubWFnRmlsdGVyPUxpLHRoaXMubWluRmlsdGVyPUxpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt2VS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIGE2PWNsYXNzIGV4dGVuZHMgdml7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoLGYpe3N1cGVyKG51bGwsYSxzLGwsYyx1LGksbyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTthNi5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgeFU9Y2xhc3MgZXh0ZW5kcyB2aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyl7c3VwZXIodCxyLG4saSxvLGEscyxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTt4VS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBGMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTgsbj0wLGk9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6cix0aGV0YVN0YXJ0Om4sdGhldGFMZW5ndGg6aX0scj1NYXRoLm1heCgzLHIpO2xldCBvPVtdLGE9W10scz1bXSxsPVtdLGM9bmV3IGosdT1uZXcgTHQ7YS5wdXNoKDAsMCwwKSxzLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBoPTAsZj0zO2g8PXI7aCsrLGYrPTMpe2xldCBwPW4raC9yKmk7Yy54PXQqTWF0aC5jb3MocCksYy55PXQqTWF0aC5zaW4ocCksYS5wdXNoKGMueCxjLnksYy56KSxzLnB1c2goMCwwLDEpLHUueD0oYVtmXS90KzEpLzIsdS55PShhW2YrMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGg9MTtoPD1yO2grKylvLnB1c2goaCxoKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgRjEodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxvbT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9OCxvPTEsYT0hMSxzPTAsbD1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJDeWxpbmRlckdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1c1RvcDp0LHJhZGl1c0JvdHRvbTpyLGhlaWdodDpuLHJhZGlhbFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6byxvcGVuRW5kZWQ6YSx0aGV0YVN0YXJ0OnMsdGhldGFMZW5ndGg6bH07bGV0IGM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pO2xldCB1PVtdLGg9W10sZj1bXSxwPVtdLGQ9MCxnPVtdLF89bi8yLHk9MDt4KCksYT09PSExJiYodD4wJiZiKCEwKSxyPjAmJmIoITEpKSx0aGlzLnNldEluZGV4KHUpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiB4KCl7bGV0IFM9bmV3IGosQz1uZXcgaixQPTAsaz0oci10KS9uO2ZvcihsZXQgTz0wO088PW87TysrKXtsZXQgRD1bXSxCPU8vbyxJPUIqKHItdCkrdDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IFI9TC9pLEY9UipsK3Msej1NYXRoLnNpbihGKSxVPU1hdGguY29zKEYpO0MueD1JKnosQy55PS1CKm4rXyxDLno9SSpVLGgucHVzaChDLngsQy55LEMueiksUy5zZXQoeixrLFUpLm5vcm1hbGl6ZSgpLGYucHVzaChTLngsUy55LFMueikscC5wdXNoKFIsMS1CKSxELnB1c2goZCsrKX1nLnB1c2goRCl9Zm9yKGxldCBPPTA7TzxpO08rKylmb3IobGV0IEQ9MDtEPG87RCsrKXtsZXQgQj1nW0RdW09dLEk9Z1tEKzFdW09dLEw9Z1tEKzFdW08rMV0sUj1nW0RdW08rMV07dS5wdXNoKEIsSSxSKSx1LnB1c2goSSxMLFIpLFArPTZ9Yy5hZGRHcm91cCh5LFAsMCkseSs9UH1mdW5jdGlvbiBiKFMpe2xldCBDPWQsUD1uZXcgTHQsaz1uZXcgaixPPTAsRD1TPT09ITA/dDpyLEI9Uz09PSEwPzE6LTE7Zm9yKGxldCBMPTE7TDw9aTtMKyspaC5wdXNoKDAsXypCLDApLGYucHVzaCgwLEIsMCkscC5wdXNoKC41LC41KSxkKys7bGV0IEk9ZDtmb3IobGV0IEw9MDtMPD1pO0wrKyl7bGV0IEY9TC9pKmwrcyx6PU1hdGguY29zKEYpLFU9TWF0aC5zaW4oRik7ay54PUQqVSxrLnk9XypCLGsuej1EKnosaC5wdXNoKGsueCxrLnksay56KSxmLnB1c2goMCxCLDApLFAueD16Ki41Ky41LFAueT1VKi41KkIrLjUscC5wdXNoKFAueCxQLnkpLGQrK31mb3IobGV0IEw9MDtMPGk7TCsrKXtsZXQgUj1DK0wsRj1JK0w7Uz09PSEwP3UucHVzaChGLEYrMSxSKTp1LnB1c2goRisxLEYsUiksTys9M31jLmFkZEdyb3VwKHksTyxTPT09ITA/MToyKSx5Kz1PfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBvbSh0LnJhZGl1c1RvcCx0LnJhZGl1c0JvdHRvbSx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sQjE9Y2xhc3MgZXh0ZW5kcyBvbXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49OCxpPTEsbz0hMSxhPTAscz1NYXRoLlBJKjIpe3N1cGVyKDAsdCxyLG4saSxvLGEscyksdGhpcy50eXBlPSJDb25lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsaGVpZ2h0OnIscmFkaWFsU2VnbWVudHM6bixoZWlnaHRTZWdtZW50czppLG9wZW5FbmRlZDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBCMSh0LnJhZGl1cyx0LmhlaWdodCx0LnJhZGlhbFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5vcGVuRW5kZWQsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sdWg9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PVtdLHI9W10sbj0xLGk9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvbHloZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt2ZXJ0aWNlczp0LGluZGljZXM6cixyYWRpdXM6bixkZXRhaWw6aX07bGV0IG89W10sYT1bXTtzKGkpLGMobiksdSgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLnNsaWNlKCksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpLGk9PT0wP3RoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTp0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKTtmdW5jdGlvbiBzKHgpe2xldCBiPW5ldyBqLFM9bmV3IGosQz1uZXcgajtmb3IobGV0IFA9MDtQPHIubGVuZ3RoO1ArPTMpcChyW1ArMF0sYikscChyW1ArMV0sUykscChyW1ArMl0sQyksbChiLFMsQyx4KX1mdW5jdGlvbiBsKHgsYixTLEMpe2xldCBQPUMrMSxrPVtdO2ZvcihsZXQgTz0wO088PVA7TysrKXtrW09dPVtdO2xldCBEPXguY2xvbmUoKS5sZXJwKFMsTy9QKSxCPWIuY2xvbmUoKS5sZXJwKFMsTy9QKSxJPVAtTztmb3IobGV0IEw9MDtMPD1JO0wrKylMPT09MCYmTz09PVA/a1tPXVtMXT1EOmtbT11bTF09RC5jbG9uZSgpLmxlcnAoQixML0kpfWZvcihsZXQgTz0wO088UDtPKyspZm9yKGxldCBEPTA7RDwyKihQLU8pLTE7RCsrKXtsZXQgQj1NYXRoLmZsb29yKEQvMik7RCUyPT09MD8oZihrW09dW0IrMV0pLGYoa1tPKzFdW0JdKSxmKGtbT11bQl0pKTooZihrW09dW0IrMV0pLGYoa1tPKzFdW0IrMV0pLGYoa1tPKzFdW0JdKSl9fWZ1bmN0aW9uIGMoeCl7bGV0IGI9bmV3IGo7Zm9yKGxldCBTPTA7UzxvLmxlbmd0aDtTKz0zKWIueD1vW1MrMF0sYi55PW9bUysxXSxiLno9b1tTKzJdLGIubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoeCksb1tTKzBdPWIueCxvW1MrMV09Yi55LG9bUysyXT1iLnp9ZnVuY3Rpb24gdSgpe2xldCB4PW5ldyBqO2ZvcihsZXQgYj0wO2I8by5sZW5ndGg7Yis9Myl7eC54PW9bYiswXSx4Lnk9b1tiKzFdLHguej1vW2IrMl07bGV0IFM9Xyh4KS8yL01hdGguUEkrLjUsQz15KHgpL01hdGguUEkrLjU7YS5wdXNoKFMsMS1DKX1kKCksaCgpfWZ1bmN0aW9uIGgoKXtmb3IobGV0IHg9MDt4PGEubGVuZ3RoO3grPTYpe2xldCBiPWFbeCswXSxTPWFbeCsyXSxDPWFbeCs0XSxQPU1hdGgubWF4KGIsUyxDKSxrPU1hdGgubWluKGIsUyxDKTtQPi45JiZrPC4xJiYoYjwuMiYmKGFbeCswXSs9MSksUzwuMiYmKGFbeCsyXSs9MSksQzwuMiYmKGFbeCs0XSs9MSkpfX1mdW5jdGlvbiBmKHgpe28ucHVzaCh4LngseC55LHgueil9ZnVuY3Rpb24gcCh4LGIpe2xldCBTPXgqMztiLng9dFtTKzBdLGIueT10W1MrMV0sYi56PXRbUysyXX1mdW5jdGlvbiBkKCl7bGV0IHg9bmV3IGosYj1uZXcgaixTPW5ldyBqLEM9bmV3IGosUD1uZXcgTHQsaz1uZXcgTHQsTz1uZXcgTHQ7Zm9yKGxldCBEPTAsQj0wO0Q8by5sZW5ndGg7RCs9OSxCKz02KXt4LnNldChvW0QrMF0sb1tEKzFdLG9bRCsyXSksYi5zZXQob1tEKzNdLG9bRCs0XSxvW0QrNV0pLFMuc2V0KG9bRCs2XSxvW0QrN10sb1tEKzhdKSxQLnNldChhW0IrMF0sYVtCKzFdKSxrLnNldChhW0IrMl0sYVtCKzNdKSxPLnNldChhW0IrNF0sYVtCKzVdKSxDLmNvcHkoeCkuYWRkKGIpLmFkZChTKS5kaXZpZGVTY2FsYXIoMyk7bGV0IEk9XyhDKTtnKFAsQiswLHgsSSksZyhrLEIrMixiLEkpLGcoTyxCKzQsUyxJKX19ZnVuY3Rpb24gZyh4LGIsUyxDKXtDPDAmJngueD09PTEmJihhW2JdPXgueC0xKSxTLng9PT0wJiZTLno9PT0wJiYoYVtiXT1DLzIvTWF0aC5QSSsuNSl9ZnVuY3Rpb24gXyh4KXtyZXR1cm4gTWF0aC5hdGFuMih4LnosLXgueCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gTWF0aC5hdGFuMigteC55LE1hdGguc3FydCh4LngqeC54K3gueip4LnopKX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgdWgodC52ZXJ0aWNlcyx0LmluZGljZXMsdC5yYWRpdXMsdC5kZXRhaWxzKX19LEgxPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49KDErTWF0aC5zcXJ0KDUpKS8yLGk9MS9uLG89Wy0xLC0xLC0xLC0xLC0xLDEsLTEsMSwtMSwtMSwxLDEsMSwtMSwtMSwxLC0xLDEsMSwxLC0xLDEsMSwxLDAsLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwtaSwtbiwwLC1pLG4sMCxpLC1uLDAsaSxuLDAsLW4sMCwtaSxuLDAsLWksLW4sMCxpLG4sMCxpXSxhPVszLDExLDcsMyw3LDE1LDMsMTUsMTMsNywxOSwxNyw3LDE3LDYsNyw2LDE1LDE3LDQsOCwxNyw4LDEwLDE3LDEwLDYsOCwwLDE2LDgsMTYsMiw4LDIsMTAsMCwxMiwxLDAsMSwxOCwwLDE4LDE2LDYsMTAsMiw2LDIsMTMsNiwxMywxNSwyLDE2LDE4LDIsMTgsMywyLDMsMTMsMTgsMSw5LDE4LDksMTEsMTgsMTEsMyw0LDE0LDEyLDQsMTIsMCw0LDAsOCwxMSw5LDUsMTEsNSwxOSwxMSwxOSw3LDE5LDUsMTQsMTksMTQsNCwxOSw0LDE3LDEsMTIsMTQsMSwxNCw1LDEsNSw5XTtzdXBlcihvLGEsdCxyKSx0aGlzLnR5cGU9IkRvZGVjYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBIMSh0LnJhZGl1cyx0LmRldGFpbCl9fSxCVj1uZXcgaixIVj1uZXcgaixndXQ9bmV3IGosVlY9bmV3IG9pLHM2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsLHI9MSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkVkZ2VzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dCx0aHJlc2hvbGRBbmdsZTpyfSx0IT09bnVsbCl7bGV0IGk9TWF0aC5wb3coMTAsNCksbz1NYXRoLmNvcyhQMSpyKSxhPXQuZ2V0SW5kZXgoKSxzPXQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGw9YT9hLmNvdW50OnMuY291bnQsYz1bMCwwLDBdLHU9WyJhIiwiYiIsImMiXSxoPW5ldyBBcnJheSgzKSxmPXt9LHA9W107Zm9yKGxldCBkPTA7ZDxsO2QrPTMpe2E/KGNbMF09YS5nZXRYKGQpLGNbMV09YS5nZXRYKGQrMSksY1syXT1hLmdldFgoZCsyKSk6KGNbMF09ZCxjWzFdPWQrMSxjWzJdPWQrMik7bGV0e2E6ZyxiOl8sYzp5fT1WVjtpZihnLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzBdKSxfLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzFdKSx5LmZyb21CdWZmZXJBdHRyaWJ1dGUocyxjWzJdKSxWVi5nZXROb3JtYWwoZ3V0KSxoWzBdPWAke01hdGgucm91bmQoZy54KmkpfSwke01hdGgucm91bmQoZy55KmkpfSwke01hdGgucm91bmQoZy56KmkpfWAsaFsxXT1gJHtNYXRoLnJvdW5kKF8ueCppKX0sJHtNYXRoLnJvdW5kKF8ueSppKX0sJHtNYXRoLnJvdW5kKF8ueippKX1gLGhbMl09YCR7TWF0aC5yb3VuZCh5LngqaSl9LCR7TWF0aC5yb3VuZCh5LnkqaSl9LCR7TWF0aC5yb3VuZCh5LnoqaSl9YCwhKGhbMF09PT1oWzFdfHxoWzFdPT09aFsyXXx8aFsyXT09PWhbMF0pKWZvcihsZXQgeD0wO3g8Mzt4Kyspe2xldCBiPSh4KzEpJTMsUz1oW3hdLEM9aFtiXSxQPVZWW3VbeF1dLGs9VlZbdVtiXV0sTz1gJHtTfV8ke0N9YCxEPWAke0N9XyR7U31gO0QgaW4gZiYmZltEXT8oZ3V0LmRvdChmW0RdLm5vcm1hbCk8PW8mJihwLnB1c2goUC54LFAueSxQLnopLHAucHVzaChrLngsay55LGsueikpLGZbRF09bnVsbCk6TyBpbiBmfHwoZltPXT17aW5kZXgwOmNbeF0saW5kZXgxOmNbYl0sbm9ybWFsOmd1dC5jbG9uZSgpfSl9fWZvcihsZXQgZCBpbiBmKWlmKGZbZF0pe2xldHtpbmRleDA6ZyxpbmRleDE6X309ZltkXTtCVi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsZyksSFYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLF8pLHAucHVzaChCVi54LEJWLnksQlYueikscC5wdXNoKEhWLngsSFYueSxIVi56KX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShwLDMpKX19fSxmcz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iQ3VydmUiLHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPTIwMH1nZXRQb2ludCgpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1cnZlOiAuZ2V0UG9pbnQoKSBub3QgaW1wbGVtZW50ZWQuIiksbnVsbH1nZXRQb2ludEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRQb2ludChuLHIpfWdldFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50KG4vdCkpO3JldHVybiByfWdldFNwYWNlZFBvaW50cyh0PTUpe2xldCByPVtdO2ZvcihsZXQgbj0wO248PXQ7bisrKXIucHVzaCh0aGlzLmdldFBvaW50QXQobi90KSk7cmV0dXJuIHJ9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19Z2V0TGVuZ3Rocyh0PXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zKXtpZih0aGlzLmNhY2hlQXJjTGVuZ3RocyYmdGhpcy5jYWNoZUFyY0xlbmd0aHMubGVuZ3RoPT09dCsxJiYhdGhpcy5uZWVkc1VwZGF0ZSlyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM7dGhpcy5uZWVkc1VwZGF0ZT0hMTtsZXQgcj1bXSxuLGk9dGhpcy5nZXRQb2ludCgwKSxvPTA7ci5wdXNoKDApO2ZvcihsZXQgYT0xO2E8PXQ7YSsrKW49dGhpcy5nZXRQb2ludChhL3QpLG8rPW4uZGlzdGFuY2VUbyhpKSxyLnB1c2gobyksaT1uO3JldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Rocz1yLHJ9dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5nZXRMZW5ndGhzKCl9Z2V0VXRvVG1hcHBpbmcodCxyKXtsZXQgbj10aGlzLmdldExlbmd0aHMoKSxpPTAsbz1uLmxlbmd0aCxhO3I/YT1yOmE9dCpuW28tMV07bGV0IHM9MCxsPW8tMSxjO2Zvcig7czw9bDspaWYoaT1NYXRoLmZsb29yKHMrKGwtcykvMiksYz1uW2ldLWEsYzwwKXM9aSsxO2Vsc2UgaWYoYz4wKWw9aS0xO2Vsc2V7bD1pO2JyZWFrfWlmKGk9bCxuW2ldPT09YSlyZXR1cm4gaS8oby0xKTtsZXQgdT1uW2ldLGY9bltpKzFdLXUscD0oYS11KS9mO3JldHVybihpK3ApLyhvLTEpfWdldFRhbmdlbnQodCxyKXtsZXQgaT10LTFlLTQsbz10KzFlLTQ7aTwwJiYoaT0wKSxvPjEmJihvPTEpO2xldCBhPXRoaXMuZ2V0UG9pbnQoaSkscz10aGlzLmdldFBvaW50KG8pLGw9cnx8KGEuaXNWZWN0b3IyP25ldyBMdDpuZXcgaik7cmV0dXJuIGwuY29weShzKS5zdWIoYSkubm9ybWFsaXplKCksbH1nZXRUYW5nZW50QXQodCxyKXtsZXQgbj10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFRhbmdlbnQobixyKX1jb21wdXRlRnJlbmV0RnJhbWVzKHQscil7bGV0IG49bmV3IGosaT1bXSxvPVtdLGE9W10scz1uZXcgaixsPW5ldyBNZTtmb3IobGV0IHA9MDtwPD10O3ArKyl7bGV0IGQ9cC90O2lbcF09dGhpcy5nZXRUYW5nZW50QXQoZCxuZXcgail9b1swXT1uZXcgaixhWzBdPW5ldyBqO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhpWzBdLngpLGg9TWF0aC5hYnMoaVswXS55KSxmPU1hdGguYWJzKGlbMF0ueik7dTw9YyYmKGM9dSxuLnNldCgxLDAsMCkpLGg8PWMmJihjPWgsbi5zZXQoMCwxLDApKSxmPD1jJiZuLnNldCgwLDAsMSkscy5jcm9zc1ZlY3RvcnMoaVswXSxuKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhpWzBdLHMpLGFbMF0uY3Jvc3NWZWN0b3JzKGlbMF0sb1swXSk7Zm9yKGxldCBwPTE7cDw9dDtwKyspe2lmKG9bcF09b1twLTFdLmNsb25lKCksYVtwXT1hW3AtMV0uY2xvbmUoKSxzLmNyb3NzVmVjdG9ycyhpW3AtMV0saVtwXSkscy5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7cy5ub3JtYWxpemUoKTtsZXQgZD1NYXRoLmFjb3MoWm8oaVtwLTFdLmRvdChpW3BdKSwtMSwxKSk7b1twXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKHMsZCkpfWFbcF0uY3Jvc3NWZWN0b3JzKGlbcF0sb1twXSl9aWYocj09PSEwKXtsZXQgcD1NYXRoLmFjb3MoWm8ob1swXS5kb3Qob1t0XSksLTEsMSkpO3AvPXQsaVswXS5kb3Qocy5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKHA9LXApO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKW9bZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhpW2RdLHAqZCkpLGFbZF0uY3Jvc3NWZWN0b3JzKGlbZF0sb1tkXSl9cmV0dXJue3RhbmdlbnRzOmksbm9ybWFsczpvLGJpbm9ybWFsczphfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0sVjE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MSxpPTEsbz0wLGE9TWF0aC5QSSoyLHM9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1yLHRoaXMueFJhZGl1cz1uLHRoaXMueVJhZGl1cz1pLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1hLHRoaXMuYUNsb2Nrd2lzZT1zLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQsaT1NYXRoLlBJKjIsbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLGE9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPWk7Zm9yKDtvPmk7KW8tPWk7bzxOdW1iZXIuRVBTSUxPTiYmKGE/bz0wOm89aSksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFhJiYobz09PWk/bz0taTpvPW8taSk7bGV0IHM9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhzKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKHMpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLHA9Yy10aGlzLmFZO2w9Zip1LXAqaCt0aGlzLmFYLGM9ZipoK3AqdSt0aGlzLmFZfXJldHVybiBuLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O1YxLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbDY9Y2xhc3MgZXh0ZW5kcyBWMXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSl7c3VwZXIodCxyLG4sbixpLG8sYSksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtsNi5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiBEaHQoKXtsZXQgZT0wLHQ9MCxyPTAsbj0wO2Z1bmN0aW9uIGkobyxhLHMsbCl7ZT1vLHQ9cyxyPS0zKm8rMyphLTIqcy1sLG49MipvLTIqYStzK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyl7aShhLHMsYyoocy1vKSxjKihsLWEpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8sYSxzLGwsYyx1LGgpe2xldCBmPShhLW8pL2MtKHMtbykvKGMrdSkrKHMtYSkvdSxwPShzLWEpL3UtKGwtYSkvKHUraCkrKGwtcykvaDtmKj11LHAqPXUsaShhLHMsZixwKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgYT1vKm8scz1hKm87cmV0dXJuIGUrdCpvK3IqYStuKnN9fX12YXIgVVY9bmV3IGosX3V0PW5ldyBEaHQseXV0PW5ldyBEaHQsdnV0PW5ldyBEaHQsYzY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdLHI9ITEsbj0iY2VudHJpcGV0YWwiLGk9LjUpe3N1cGVyKCksdGhpcy50eXBlPSJDYXRtdWxsUm9tQ3VydmUzIix0aGlzLnBvaW50cz10LHRoaXMuY2xvc2VkPXIsdGhpcy5jdXJ2ZVR5cGU9bix0aGlzLnRlbnNpb249aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnBvaW50cyxvPWkubGVuZ3RoLGE9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQscz1NYXRoLmZsb29yKGEpLGw9YS1zO3RoaXMuY2xvc2VkP3MrPXM+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKHMpL28pKzEpKm86bD09PTAmJnM9PT1vLTEmJihzPW8tMixsPTEpO2xldCBjLHU7dGhpcy5jbG9zZWR8fHM+MD9jPWlbKHMtMSklb106KFVWLnN1YlZlY3RvcnMoaVswXSxpWzFdKS5hZGQoaVswXSksYz1VVik7bGV0IGg9aVtzJW9dLGY9aVsocysxKSVvXTtpZih0aGlzLmNsb3NlZHx8cysyPG8/dT1pWyhzKzIpJW9dOihVVi5zdWJWZWN0b3JzKGlbby0xXSxpW28tMl0pLmFkZChpW28tMV0pLHU9VVYpLHRoaXMuY3VydmVUeXBlPT09ImNlbnRyaXBldGFsInx8dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCIpe2xldCBwPXRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiPy41Oi4yNSxkPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoaCkscCksZz1NYXRoLnBvdyhoLmRpc3RhbmNlVG9TcXVhcmVkKGYpLHApLF89TWF0aC5wb3coZi5kaXN0YW5jZVRvU3F1YXJlZCh1KSxwKTtnPDFlLTQmJihnPTEpLGQ8MWUtNCYmKGQ9ZyksXzwxZS00JiYoXz1nKSxfdXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCxkLGcsXykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGgueixmLnosdS56LGQsZyxfKX1lbHNlIHRoaXMuY3VydmVUeXBlPT09ImNhdG11bGxyb20iJiYoX3V0LmluaXRDYXRtdWxsUm9tKGMueCxoLngsZi54LHUueCx0aGlzLnRlbnNpb24pLHl1dC5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy56LGgueixmLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBuLnNldChfdXQuY2FsYyhsKSx5dXQuY2FsYyhsKSx2dXQuY2FsYyhsKSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCByPTAsbj10aGlzLnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5wb2ludHNbcl07dC5wb2ludHMucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBqKCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfX07YzYucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDtmdW5jdGlvbiB1aGUoZSx0LHIsbixpKXtsZXQgbz0obi10KSouNSxhPShpLXIpKi41LHM9ZSplLGw9ZSpzO3JldHVybigyKnItMipuK28rYSkqbCsoLTMqciszKm4tMipvLWEpKnMrbyplK3J9ZnVuY3Rpb24ga2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqdH1mdW5jdGlvbiBSZ3IoZSx0KXtyZXR1cm4gMiooMS1lKSplKnR9ZnVuY3Rpb24gTmdyKGUsdCl7cmV0dXJuIGUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4pe3JldHVybiBrZ3IoZSx0KStSZ3IoZSxyKStOZ3IoZSxuKX1mdW5jdGlvbiBEZ3IoZSx0KXtsZXQgcj0xLWU7cmV0dXJuIHIqcipyKnR9ZnVuY3Rpb24gT2dyKGUsdCl7bGV0IHI9MS1lO3JldHVybiAzKnIqciplKnR9ZnVuY3Rpb24gemdyKGUsdCl7cmV0dXJuIDMqKDEtZSkqZSplKnR9ZnVuY3Rpb24gRmdyKGUsdCl7cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gV1AoZSx0LHIsbixpKXtyZXR1cm4gRGdyKGUsdCkrT2dyKGUscikremdyKGUsbikrRmdyKGUsaSl9dmFyIGNNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQsaT1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MixzPXRoaXMudjM7cmV0dXJuIG4uc2V0KFdQKHQsaS54LG8ueCxhLngscy54KSxXUCh0LGkueSxvLnksYS55LHMueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07Y00ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgdTY9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGosbj1uZXcgaixpPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1uLHRoaXMudjM9aX1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChXUCh0LGkueCxvLngsYS54LHMueCksV1AodCxpLnksby55LGEueSxzLnkpLFdQKHQsaS56LG8ueixhLnoscy56KSksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt1Ni5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgVTE9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCxyPW5ldyBMdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yO3JldHVybiB0PT09MT9uLmNvcHkodGhpcy52Mik6KG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksbi5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLG59Z2V0UG9pbnRBdCh0LHIpe3JldHVybiB0aGlzLmdldFBvaW50KHQscil9Z2V0VGFuZ2VudCh0LHIpe2xldCBuPXJ8fG5ldyBMdDtyZXR1cm4gbi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1UxLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1yfWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LHVNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQsbj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW59Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSkpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07dU0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmU9ITA7dmFyIGhNPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGope3N1cGVyKCksdGhpcy50eXBlPSJRdWFkcmF0aWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgail7bGV0IG49cixpPXRoaXMudjAsbz10aGlzLnYxLGE9dGhpcy52MjtyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCksR1AodCxpLnksby55LGEueSksR1AodCxpLnosby56LGEueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07aE0ucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBmTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LHI9bmV3IEx0KXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz0oaS5sZW5ndGgtMSkqdCxhPU1hdGguZmxvb3Iobykscz1vLWEsbD1pW2E9PT0wP2E6YS0xXSxjPWlbYV0sdT1pW2E+aS5sZW5ndGgtMj9pLmxlbmd0aC0xOmErMV0saD1pW2E+aS5sZW5ndGgtMz9pLmxlbmd0aC0xOmErMl07cmV0dXJuIG4uc2V0KHVoZShzLGwueCxjLngsdS54LGgueCksdWhlKHMsbC55LGMueSx1LnksaC55KSksbn1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChpLmNsb25lKCkpfXJldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2gobmV3IEx0KCkuZnJvbUFycmF5KGkpKX1yZXR1cm4gdGhpc319O2ZNLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBPaHQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6bDYsQ2F0bXVsbFJvbUN1cnZlMzpjNixDdWJpY0JlemllckN1cnZlOmNNLEN1YmljQmV6aWVyQ3VydmUzOnU2LEVsbGlwc2VDdXJ2ZTpWMSxMaW5lQ3VydmU6VTEsTGluZUN1cnZlMzpiVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTp1TSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTM6aE0sU3BsaW5lQ3VydmU6Zk19KSx3VT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1cnZlUGF0aCIsdGhpcy5jdXJ2ZXM9W10sdGhpcy5hdXRvQ2xvc2U9ITF9YWRkKHQpe3RoaXMuY3VydmVzLnB1c2godCl9Y2xvc2VQYXRoKCl7bGV0IHQ9dGhpcy5jdXJ2ZXNbMF0uZ2V0UG9pbnQoMCkscj10aGlzLmN1cnZlc1t0aGlzLmN1cnZlcy5sZW5ndGgtMV0uZ2V0UG9pbnQoMSk7dC5lcXVhbHMocil8fHRoaXMuY3VydmVzLnB1c2gobmV3IFUxKHIsdCkpfWdldFBvaW50KHQscil7bGV0IG49dCp0aGlzLmdldExlbmd0aCgpLGk9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKSxvPTA7Zm9yKDtvPGkubGVuZ3RoOyl7aWYoaVtvXT49bil7bGV0IGE9aVtvXS1uLHM9dGhpcy5jdXJ2ZXNbb10sbD1zLmdldExlbmd0aCgpLGM9bD09PTA/MDoxLWEvbDtyZXR1cm4gcy5nZXRQb2ludEF0KGMscil9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLHI9MDtmb3IobGV0IG49MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtuPGk7bisrKXIrPXRoaXMuY3VydmVzW25dLmdldExlbmd0aCgpLHQucHVzaChyKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIucHVzaChyWzBdKSxyfWdldFBvaW50cyh0PTEyKXtsZXQgcj1bXSxuO2ZvcihsZXQgaT0wLG89dGhpcy5jdXJ2ZXM7aTxvLmxlbmd0aDtpKyspe2xldCBhPW9baV0scz1hJiZhLmlzRWxsaXBzZUN1cnZlP3QqMjphJiYoYS5pc0xpbmVDdXJ2ZXx8YS5pc0xpbmVDdXJ2ZTMpPzE6YSYmYS5pc1NwbGluZUN1cnZlP3QqYS5wb2ludHMubGVuZ3RoOnQsbD1hLmdldFBvaW50cyhzKTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtuJiZuLmVxdWFscyh1KXx8KHIucHVzaCh1KSxuPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJnIubGVuZ3RoPjEmJiFyW3IubGVuZ3RoLTFdLmVxdWFscyhyWzBdKSYmci5wdXNoKHJbMF0pLHJ9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXRoaXMuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmN1cnZlc1tyXTt0LmN1cnZlcy5wdXNoKGkudG9KU09OKCkpfXJldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgcj0wLG49dC5jdXJ2ZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuY3VydmVzW3JdO3RoaXMuY3VydmVzLnB1c2gobmV3IE9odFtpLnR5cGVdKCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0scTE9Y2xhc3MgZXh0ZW5kcyB3VXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEx0LHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgcj0xLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmxpbmVUbyh0W3JdLngsdFtyXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31saW5lVG8odCxyKXtsZXQgbj1uZXcgVTEodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe2xldCBvPW5ldyB1TSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe2xldCBzPW5ldyBjTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBMdCh0LHIpLG5ldyBMdChuLGkpLG5ldyBMdChvLGEpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxhKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IHI9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxuPW5ldyBmTShyKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChuKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQscixuLGksbyxhKXtsZXQgcz10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCtzLHIrbCxuLGksbyxhKSx0aGlzfWFic2FyYyh0LHIsbixpLG8sYSl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LHIsbixuLGksbyxhKSx0aGlzfWVsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxyK3UsbixpLG8sYSxzLGwpLHRoaXN9YWJzZWxsaXBzZSh0LHIsbixpLG8sYSxzLGwpe2xldCBjPW5ldyBWMSh0LHIsbixpLG8sYSxzLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sS2M9Y2xhc3MgZXh0ZW5kcyBxMXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ob2xlcy5sZW5ndGg7bjxpO24rKylyW25dPXRoaXMuaG9sZXNbbl0uZ2V0UG9pbnRzKHQpO3JldHVybiByfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmhvbGVzW3JdO3QuaG9sZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCByPTAsbj10LmhvbGVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmhvbGVzW3JdO3RoaXMuaG9sZXMucHVzaChuZXcgcTEoKS5mcm9tSlNPTihpKSl9cmV0dXJuIHRoaXN9fSxCZ3I9e3RyaWFuZ3VsYXRlOmZ1bmN0aW9uKGUsdCxyPTIpe2xldCBuPXQmJnQubGVuZ3RoLGk9bj90WzBdKnI6ZS5sZW5ndGgsbz1aZmUoZSwwLGksciwhMCksYT1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBhO2xldCBzLGwsYyx1LGgsZixwO2lmKG4mJihvPUdncihlLHQsbyxyKSksZS5sZW5ndGg+ODAqcil7cz1jPWVbMF0sbD11PWVbMV07Zm9yKGxldCBkPXI7ZDxpO2QrPXIpaD1lW2RdLGY9ZVtkKzFdLGg8cyYmKHM9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7cD1NYXRoLm1heChjLXMsdS1sKSxwPXAhPT0wPzEvcDowfXJldHVybiBoNihvLGEscixzLGwscCksYX19O2Z1bmN0aW9uIFpmZShlLHQscixuLGkpe2xldCBvLGE7aWYoaT09PWUwcihlLHQscixuKT4wKWZvcihvPXQ7bzxyO28rPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtlbHNlIGZvcihvPXItbjtvPj10O28tPW4pYT1oaGUobyxlW29dLGVbbysxXSxhKTtyZXR1cm4gYSYmWlUoYSxhLm5leHQpJiYocDYoYSksYT1hLm5leHQpLGF9ZnVuY3Rpb24gRzAoZSx0KXtpZighZSlyZXR1cm4gZTt0fHwodD1lKTtsZXQgcj1lLG47ZG8gaWYobj0hMSwhci5zdGVpbmVyJiYoWlUocixyLm5leHQpfHxhaShyLnByZXYscixyLm5leHQpPT09MCkpe2lmKHA2KHIpLHI9dD1yLnByZXYscj09PXIubmV4dClicmVhaztuPSEwfWVsc2Ugcj1yLm5leHQ7d2hpbGUobnx8ciE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIGg2KGUsdCxyLG4saSxvLGEpe2lmKCFlKXJldHVybjshYSYmbyYmJGdyKGUsbixpLG8pO2xldCBzPWUsbCxjO2Zvcig7ZS5wcmV2IT09ZS5uZXh0Oyl7aWYobD1lLnByZXYsYz1lLm5leHQsbz9WZ3IoZSxuLGksbyk6SGdyKGUpKXt0LnB1c2gobC5pL3IpLHQucHVzaChlLmkvciksdC5wdXNoKGMuaS9yKSxwNihlKSxlPWMubmV4dCxzPWMubmV4dDtjb250aW51ZX1pZihlPWMsZT09PXMpe2E/YT09PTE/KGU9VWdyKEcwKGUpLHQsciksaDYoZSx0LHIsbixpLG8sMikpOmE9PT0yJiZxZ3IoZSx0LHIsbixpLG8pOmg2KEcwKGUpLHQscixuLGksbywxKTticmVha319fWZ1bmN0aW9uIEhncihlKXtsZXQgdD1lLnByZXYscj1lLG49ZS5uZXh0O2lmKGFpKHQscixuKT49MClyZXR1cm4hMTtsZXQgaT1lLm5leHQubmV4dDtmb3IoO2khPT1lLnByZXY7KXtpZihIMyh0LngsdC55LHIueCxyLnksbi54LG4ueSxpLngsaS55KSYmYWkoaS5wcmV2LGksaS5uZXh0KT49MClyZXR1cm4hMTtpPWkubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBWZ3IoZSx0LHIsbil7bGV0IGk9ZS5wcmV2LG89ZSxhPWUubmV4dDtpZihhaShpLG8sYSk+PTApcmV0dXJuITE7bGV0IHM9aS54PG8ueD9pLng8YS54P2kueDphLng6by54PGEueD9vLng6YS54LGw9aS55PG8ueT9pLnk8YS55P2kueTphLnk6by55PGEueT9vLnk6YS55LGM9aS54Pm8ueD9pLng+YS54P2kueDphLng6by54PmEueD9vLng6YS54LHU9aS55Pm8ueT9pLnk+YS55P2kueTphLnk6by55PmEueT9vLnk6YS55LGg9bmh0KHMsbCx0LHIsbiksZj1uaHQoYyx1LHQscixuKSxwPWUucHJldlosZD1lLm5leHRaO2Zvcig7cCYmcC56Pj1oJiZkJiZkLno8PWY7KXtpZihwIT09ZS5wcmV2JiZwIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxwLngscC55KSYmYWkocC5wcmV2LHAscC5uZXh0KT49MHx8KHA9cC5wcmV2WixkIT09ZS5wcmV2JiZkIT09ZS5uZXh0JiZIMyhpLngsaS55LG8ueCxvLnksYS54LGEueSxkLngsZC55KSYmYWkoZC5wcmV2LGQsZC5uZXh0KT49MCkpcmV0dXJuITE7ZD1kLm5leHRafWZvcig7cCYmcC56Pj1oOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJmFpKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7cD1wLnByZXZafWZvcig7ZCYmZC56PD1mOyl7aWYoZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJmFpKGQucHJldixkLGQubmV4dCk+PTApcmV0dXJuITE7ZD1kLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIFVncihlLHQscil7bGV0IG49ZTtkb3tsZXQgaT1uLnByZXYsbz1uLm5leHQubmV4dDshWlUoaSxvKSYmSmZlKGksbixuLm5leHQsbykmJmY2KGksbykmJmY2KG8saSkmJih0LnB1c2goaS5pL3IpLHQucHVzaChuLmkvciksdC5wdXNoKG8uaS9yKSxwNihuKSxwNihuLm5leHQpLG49ZT1vKSxuPW4ubmV4dH13aGlsZShuIT09ZSk7cmV0dXJuIEcwKG4pfWZ1bmN0aW9uIHFncihlLHQscixuLGksbyl7bGV0IGE9ZTtkb3tsZXQgcz1hLm5leHQubmV4dDtmb3IoO3MhPT1hLnByZXY7KXtpZihhLmkhPT1zLmkmJkpncihhLHMpKXtsZXQgbD1RZmUoYSxzKTthPUcwKGEsYS5uZXh0KSxsPUcwKGwsbC5uZXh0KSxoNihhLHQscixuLGksbyksaDYobCx0LHIsbixpLG8pO3JldHVybn1zPXMubmV4dH1hPWEubmV4dH13aGlsZShhIT09ZSl9ZnVuY3Rpb24gR2dyKGUsdCxyLG4pe2xldCBpPVtdLG8sYSxzLGwsYztmb3Iobz0wLGE9dC5sZW5ndGg7bzxhO28rKylzPXRbb10qbixsPW88YS0xP3RbbysxXSpuOmUubGVuZ3RoLGM9WmZlKGUscyxsLG4sITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLGkucHVzaChaZ3IoYykpO2ZvcihpLnNvcnQoV2dyKSxvPTA7bzxpLmxlbmd0aDtvKyspWWdyKGlbb10scikscj1HMChyLHIubmV4dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gV2dyKGUsdCl7cmV0dXJuIGUueC10Lnh9ZnVuY3Rpb24gWWdyKGUsdCl7aWYodD1qZ3IoZSx0KSx0KXtsZXQgcj1RZmUodCxlKTtHMCh0LHQubmV4dCksRzAocixyLm5leHQpfX1mdW5jdGlvbiBqZ3IoZSx0KXtsZXQgcj10LG49ZS54LGk9ZS55LG89LTEvMCxhO2Rve2lmKGk8PXIueSYmaT49ci5uZXh0LnkmJnIubmV4dC55IT09ci55KXtsZXQgZj1yLngrKGktci55KSooci5uZXh0Lngtci54KS8oci5uZXh0Lnktci55KTtpZihmPD1uJiZmPm8pe2lmKG89ZixmPT09bil7aWYoaT09PXIueSlyZXR1cm4gcjtpZihpPT09ci5uZXh0LnkpcmV0dXJuIHIubmV4dH1hPXIueDxyLm5leHQueD9yOnIubmV4dH19cj1yLm5leHR9d2hpbGUociE9PXQpO2lmKCFhKXJldHVybiBudWxsO2lmKG49PT1vKXJldHVybiBhO2xldCBzPWEsbD1hLngsYz1hLnksdT0xLzAsaDtyPWE7ZG8gbj49ci54JiZyLng+PWwmJm4hPT1yLngmJkgzKGk8Yz9uOm8saSxsLGMsaTxjP286bixpLHIueCxyLnkpJiYoaD1NYXRoLmFicyhpLXIueSkvKG4tci54KSxmNihyLGUpJiYoaDx1fHxoPT09dSYmKHIueD5hLnh8fHIueD09PWEueCYmWGdyKGEscikpKSYmKGE9cix1PWgpKSxyPXIubmV4dDt3aGlsZShyIT09cyk7cmV0dXJuIGF9ZnVuY3Rpb24gWGdyKGUsdCl7cmV0dXJuIGFpKGUucHJldixlLHQucHJldik8MCYmYWkodC5uZXh0LGUsZS5uZXh0KTwwfWZ1bmN0aW9uICRncihlLHQscixuKXtsZXQgaT1lO2RvIGkuej09PW51bGwmJihpLno9bmh0KGkueCxpLnksdCxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dDt3aGlsZShpIT09ZSk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxLZ3IoaSl9ZnVuY3Rpb24gS2dyKGUpe2xldCB0LHIsbixpLG8sYSxzLGwsYz0xO2Rve2ZvcihyPWUsZT1udWxsLG89bnVsbCxhPTA7cjspe2ZvcihhKyssbj1yLHM9MCx0PTA7dDxjJiYocysrLG49bi5uZXh0WiwhIW4pO3QrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspcyE9PTAmJihsPT09MHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksbz9vLm5leHRaPWk6ZT1pLGkucHJldlo9byxvPWk7cj1ufW8ubmV4dFo9bnVsbCxjKj0yfXdoaWxlKGE+MSk7cmV0dXJuIGV9ZnVuY3Rpb24gbmh0KGUsdCxyLG4saSl7cmV0dXJuIGU9MzI3NjcqKGUtcikqaSx0PTMyNzY3Kih0LW4pKmksZT0oZXxlPDw4KSYxNjcxMTkzNSxlPShlfGU8PDQpJjI1MjY0NTEzNSxlPShlfGU8PDIpJjg1ODk5MzQ1OSxlPShlfGU8PDEpJjE0MzE2NTU3NjUsdD0odHx0PDw4KSYxNjcxMTkzNSx0PSh0fHQ8PDQpJjI1MjY0NTEzNSx0PSh0fHQ8PDIpJjg1ODk5MzQ1OSx0PSh0fHQ8PDEpJjE0MzE2NTU3NjUsZXx0PDwxfWZ1bmN0aW9uIFpncihlKXtsZXQgdD1lLHI9ZTtkbyh0Lng8ci54fHx0Lng9PT1yLngmJnQueTxyLnkpJiYocj10KSx0PXQubmV4dDt3aGlsZSh0IT09ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gSDMoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4oaS1hKSoodC1zKS0oZS1hKSooby1zKT49MCYmKGUtYSkqKG4tcyktKHItYSkqKHQtcyk+PTAmJihyLWEpKihvLXMpLShpLWEpKihuLXMpPj0wfWZ1bmN0aW9uIEpncihlLHQpe3JldHVybiBlLm5leHQuaSE9PXQuaSYmZS5wcmV2LmkhPT10LmkmJiFRZ3IoZSx0KSYmKGY2KGUsdCkmJmY2KHQsZSkmJnQwcihlLHQpJiYoYWkoZS5wcmV2LGUsdC5wcmV2KXx8YWkoZSx0LnByZXYsdCkpfHxaVShlLHQpJiZhaShlLnByZXYsZSxlLm5leHQpPjAmJmFpKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gYWkoZSx0LHIpe3JldHVybih0LnktZS55KSooci54LXQueCktKHQueC1lLngpKihyLnktdC55KX1mdW5jdGlvbiBaVShlLHQpe3JldHVybiBlLng9PT10LngmJmUueT09PXQueX1mdW5jdGlvbiBKZmUoZSx0LHIsbil7bGV0IGk9R1YoYWkoZSx0LHIpKSxvPUdWKGFpKGUsdCxuKSksYT1HVihhaShyLG4sZSkpLHM9R1YoYWkocixuLHQpKTtyZXR1cm4hIShpIT09byYmYSE9PXN8fGk9PT0wJiZxVihlLHIsdCl8fG89PT0wJiZxVihlLG4sdCl8fGE9PT0wJiZxVihyLGUsbil8fHM9PT0wJiZxVihyLHQsbikpfWZ1bmN0aW9uIHFWKGUsdCxyKXtyZXR1cm4gdC54PD1NYXRoLm1heChlLngsci54KSYmdC54Pj1NYXRoLm1pbihlLngsci54KSYmdC55PD1NYXRoLm1heChlLnksci55KSYmdC55Pj1NYXRoLm1pbihlLnksci55KX1mdW5jdGlvbiBHVihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9ZnVuY3Rpb24gUWdyKGUsdCl7bGV0IHI9ZTtkb3tpZihyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZKZmUocixyLm5leHQsZSx0KSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09ZSk7cmV0dXJuITF9ZnVuY3Rpb24gZjYoZSx0KXtyZXR1cm4gYWkoZS5wcmV2LGUsZS5uZXh0KTwwP2FpKGUsdCxlLm5leHQpPj0wJiZhaShlLGUucHJldix0KT49MDphaShlLHQsZS5wcmV2KTwwfHxhaShlLGUubmV4dCx0KTwwfWZ1bmN0aW9uIHQwcihlLHQpe2xldCByPWUsbj0hMSxpPShlLngrdC54KS8yLG89KGUueSt0LnkpLzI7ZG8gci55Pm8hPXIubmV4dC55Pm8mJnIubmV4dC55IT09ci55JiZpPChyLm5leHQueC1yLngpKihvLXIueSkvKHIubmV4dC55LXIueSkrci54JiYobj0hbikscj1yLm5leHQ7d2hpbGUociE9PWUpO3JldHVybiBufWZ1bmN0aW9uIFFmZShlLHQpe2xldCByPW5ldyBpaHQoZS5pLGUueCxlLnkpLG49bmV3IGlodCh0LmksdC54LHQueSksaT1lLm5leHQsbz10LnByZXY7cmV0dXJuIGUubmV4dD10LHQucHJldj1lLHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLG8ubmV4dD1uLG4ucHJldj1vLG59ZnVuY3Rpb24gaGhlKGUsdCxyLG4pe2xldCBpPW5ldyBpaHQoZSx0LHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBwNihlKXtlLm5leHQucHJldj1lLnByZXYsZS5wcmV2Lm5leHQ9ZS5uZXh0LGUucHJldlomJihlLnByZXZaLm5leHRaPWUubmV4dFopLGUubmV4dFomJihlLm5leHRaLnByZXZaPWUucHJldlopfWZ1bmN0aW9uIGlodChlLHQscil7dGhpcy5pPWUsdGhpcy54PXQsdGhpcy55PXIsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9ZnVuY3Rpb24gZTByKGUsdCxyLG4pe2xldCBpPTA7Zm9yKGxldCBvPXQsYT1yLW47bzxyO28rPW4paSs9KGVbYV0tZVtvXSkqKGVbbysxXStlW2ErMV0pLGE9bztyZXR1cm4gaX12YXIgWmM9Y2xhc3N7c3RhdGljIGFyZWEodCl7bGV0IHI9dC5sZW5ndGgsbj0wO2ZvcihsZXQgaT1yLTEsbz0wO288cjtpPW8rKyluKz10W2ldLngqdFtvXS55LXRbb10ueCp0W2ldLnk7cmV0dXJuIG4qLjV9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBaYy5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxyKXtsZXQgbj1bXSxpPVtdLG89W107ZmhlKHQpLHBoZShuLHQpO2xldCBhPXQubGVuZ3RoO3IuZm9yRWFjaChmaGUpO2ZvcihsZXQgbD0wO2w8ci5sZW5ndGg7bCsrKWkucHVzaChhKSxhKz1yW2xdLmxlbmd0aCxwaGUobixyW2xdKTtsZXQgcz1CZ3IudHJpYW5ndWxhdGUobixpKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTMpby5wdXNoKHMuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIGZoZShlKXtsZXQgdD1lLmxlbmd0aDt0PjImJmVbdC0xXS5lcXVhbHMoZVswXSkmJmUucG9wKCl9ZnVuY3Rpb24gcGhlKGUsdCl7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5wdXNoKHRbcl0ueCksZS5wdXNoKHRbcl0ueSl9dmFyIGhoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCguNSwuNSksbmV3IEx0KC0uNSwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOnJ9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgbj10aGlzLGk9W10sbz1bXTtmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc107YShjKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7ZnVuY3Rpb24gYShzKXtsZXQgbD1bXSxjPXIuY3VydmVTZWdtZW50cyE9PXZvaWQgMD9yLmN1cnZlU2VnbWVudHM6MTIsdT1yLnN0ZXBzIT09dm9pZCAwP3Iuc3RlcHM6MSxoPXIuZGVwdGghPT12b2lkIDA/ci5kZXB0aDoxLGY9ci5iZXZlbEVuYWJsZWQhPT12b2lkIDA/ci5iZXZlbEVuYWJsZWQ6ITAscD1yLmJldmVsVGhpY2tuZXNzIT09dm9pZCAwP3IuYmV2ZWxUaGlja25lc3M6LjIsZD1yLmJldmVsU2l6ZSE9PXZvaWQgMD9yLmJldmVsU2l6ZTpwLS4xLGc9ci5iZXZlbE9mZnNldCE9PXZvaWQgMD9yLmJldmVsT2Zmc2V0OjAsXz1yLmJldmVsU2VnbWVudHMhPT12b2lkIDA/ci5iZXZlbFNlZ21lbnRzOjMseT1yLmV4dHJ1ZGVQYXRoLHg9ci5VVkdlbmVyYXRvciE9PXZvaWQgMD9yLlVWR2VuZXJhdG9yOnIwcjtyLmFtb3VudCE9PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxoPXIuYW1vdW50KTtsZXQgYixTPSExLEMsUCxrLE87eSYmKGI9eS5nZXRTcGFjZWRQb2ludHModSksUz0hMCxmPSExLEM9eS5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFA9bmV3IGosaz1uZXcgaixPPW5ldyBqKSxmfHwoXz0wLHA9MCxkPTAsZz0wKTtsZXQgRD1zLmV4dHJhY3RQb2ludHMoYyksQj1ELnNoYXBlLEk9RC5ob2xlcztpZighWmMuaXNDbG9ja1dpc2UoQikpe0I9Qi5yZXZlcnNlKCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO1pjLmlzQ2xvY2tXaXNlKGh0KSYmKElbcV09aHQucmV2ZXJzZSgpKX19bGV0IFI9WmMudHJpYW5ndWxhdGVTaGFwZShCLEkpLEY9Qjtmb3IobGV0IHE9MCxwdD1JLmxlbmd0aDtxPHB0O3ErKyl7bGV0IGh0PUlbcV07Qj1CLmNvbmNhdChodCl9ZnVuY3Rpb24geihxLHB0LGh0KXtyZXR1cm4gcHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IikscHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihodCkuYWRkKHEpfWxldCBVPUIubGVuZ3RoLFc9Ui5sZW5ndGg7ZnVuY3Rpb24gWihxLHB0LGh0KXtsZXQgd3Qsa3QsaWUsZWU9cS54LXB0LngsTGU9cS55LXB0LnksYXI9aHQueC1xLngsZnI9aHQueS1xLnksdHQ9ZWUqZWUrTGUqTGUsJD1lZSpmci1MZSphcjtpZihNYXRoLmFicygkKT5OdW1iZXIuRVBTSUxPTil7bGV0IEl0PU1hdGguc3FydCh0dCksJHQ9TWF0aC5zcXJ0KGFyKmFyK2ZyKmZyKSxoZT1wdC54LUxlL0l0LFR0PXB0LnkrZWUvSXQsYmU9aHQueC1mci8kdCxudD1odC55K2FyLyR0LEN0PSgoYmUtaGUpKmZyLShudC1UdCkqYXIpLyhlZSpmci1MZSphcik7d3Q9aGUrZWUqQ3QtcS54LGt0PVR0K0xlKkN0LXEueTtsZXQgV3Q9d3Qqd3Qra3Qqa3Q7aWYoV3Q8PTIpcmV0dXJuIG5ldyBMdCh3dCxrdCk7aWU9TWF0aC5zcXJ0KFd0LzIpfWVsc2V7bGV0IEl0PSExO2VlPk51bWJlci5FUFNJTE9OP2FyPk51bWJlci5FUFNJTE9OJiYoSXQ9ITApOmVlPC1OdW1iZXIuRVBTSUxPTj9hcjwtTnVtYmVyLkVQU0lMT04mJihJdD0hMCk6TWF0aC5zaWduKExlKT09PU1hdGguc2lnbihmcikmJihJdD0hMCksSXQ/KHd0PS1MZSxrdD1lZSxpZT1NYXRoLnNxcnQodHQpKTood3Q9ZWUsa3Q9TGUsaWU9TWF0aC5zcXJ0KHR0LzIpKX1yZXR1cm4gbmV3IEx0KHd0L2llLGt0L2llKX1sZXQgcnQ9W107Zm9yKGxldCBxPTAscHQ9Ri5sZW5ndGgsaHQ9cHQtMSx3dD1xKzE7cTxwdDtxKyssaHQrKyx3dCsrKWh0PT09cHQmJihodD0wKSx3dD09PXB0JiYod3Q9MCkscnRbcV09WihGW3FdLEZbaHRdLEZbd3RdKTtsZXQgb3Q9W10sc3QsU3Q9cnQuY29uY2F0KCk7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO3N0PVtdO2ZvcihsZXQgd3Q9MCxrdD1odC5sZW5ndGgsaWU9a3QtMSxlZT13dCsxO3d0PGt0O3d0KyssaWUrKyxlZSsrKWllPT09a3QmJihpZT0wKSxlZT09PWt0JiYoZWU9MCksc3Rbd3RdPVooaHRbd3RdLGh0W2llXSxodFtlZV0pO290LnB1c2goc3QpLFN0PVN0LmNvbmNhdChzdCl9Zm9yKGxldCBxPTA7cTxfO3ErKyl7bGV0IHB0PXEvXyxodD1wKk1hdGguY29zKHB0Kk1hdGguUEkvMiksd3Q9ZCpNYXRoLnNpbihwdCpNYXRoLlBJLzIpK2c7Zm9yKGxldCBrdD0wLGllPUYubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT16KEZba3RdLHJ0W2t0XSx3dCk7X3QoZWUueCxlZS55LC1odCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtfdChmci54LGZyLnksLWh0KX19fWxldCBidD1kK2c7Zm9yKGxldCBxPTA7cTxVO3ErKyl7bGV0IHB0PWY/eihCW3FdLFN0W3FdLGJ0KTpCW3FdO1M/KGsuY29weShDLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LngpLFAuY29weShDLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIocHQueSksTy5jb3B5KGJbMF0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChwdC54LHB0LnksMCl9Zm9yKGxldCBxPTE7cTw9dTtxKyspZm9yKGxldCBwdD0wO3B0PFU7cHQrKyl7bGV0IGh0PWY/eihCW3B0XSxTdFtwdF0sYnQpOkJbcHRdO1M/KGsuY29weShDLm5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LngpLFAuY29weShDLmJpbm9ybWFsc1txXSkubXVsdGlwbHlTY2FsYXIoaHQueSksTy5jb3B5KGJbcV0pLmFkZChrKS5hZGQoUCksX3QoTy54LE8ueSxPLnopKTpfdChodC54LGh0LnksaC91KnEpfWZvcihsZXQgcT1fLTE7cT49MDtxLS0pe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSxoK2h0KX1mb3IobGV0IGt0PTAsaWU9SS5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPUlba3RdO3N0PW90W2t0XTtmb3IobGV0IExlPTAsYXI9ZWUubGVuZ3RoO0xlPGFyO0xlKyspe2xldCBmcj16KGVlW0xlXSxzdFtMZV0sd3QpO1M/X3QoZnIueCxmci55K2JbdS0xXS55LGJbdS0xXS54K2h0KTpfdChmci54LGZyLnksaCtodCl9fX1NdCgpLGx0KCk7ZnVuY3Rpb24gTXQoKXtsZXQgcT1pLmxlbmd0aC8zO2lmKGYpe2xldCBwdD0wLGh0PVUqcHQ7Zm9yKGxldCB3dD0wO3d0PFc7d3QrKyl7bGV0IGt0PVJbd3RdO2N0KGt0WzJdK2h0LGt0WzFdK2h0LGt0WzBdK2h0KX1wdD11K18qMixodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFswXStodCxrdFsxXStodCxrdFsyXStodCl9fWVsc2V7Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzJdLGh0WzFdLGh0WzBdKX1mb3IobGV0IHB0PTA7cHQ8VztwdCsrKXtsZXQgaHQ9UltwdF07Y3QoaHRbMF0rVSp1LGh0WzFdK1UqdSxodFsyXStVKnUpfX1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDApfWZ1bmN0aW9uIGx0KCl7bGV0IHE9aS5sZW5ndGgvMyxwdD0wO0t0KEYscHQpLHB0Kz1GLmxlbmd0aDtmb3IobGV0IGh0PTAsd3Q9SS5sZW5ndGg7aHQ8d3Q7aHQrKyl7bGV0IGt0PUlbaHRdO0t0KGt0LHB0KSxwdCs9a3QubGVuZ3RofW4uYWRkR3JvdXAocSxpLmxlbmd0aC8zLXEsMSl9ZnVuY3Rpb24gS3QocSxwdCl7bGV0IGh0PXEubGVuZ3RoO2Zvcig7LS1odD49MDspe2xldCB3dD1odCxrdD1odC0xO2t0PDAmJihrdD1xLmxlbmd0aC0xKTtmb3IobGV0IGllPTAsZWU9dStfKjI7aWU8ZWU7aWUrKyl7bGV0IExlPVUqaWUsYXI9VSooaWUrMSksZnI9cHQrd3QrTGUsdHQ9cHQra3QrTGUsJD1wdCtrdCthcixJdD1wdCt3dCthcjtYKGZyLHR0LCQsSXQpfX19ZnVuY3Rpb24gX3QocSxwdCxodCl7bC5wdXNoKHEpLGwucHVzaChwdCksbC5wdXNoKGh0KX1mdW5jdGlvbiBjdChxLHB0LGh0KXtldChxKSxldChwdCksZXQoaHQpO2xldCB3dD1pLmxlbmd0aC8zLGt0PXguZ2VuZXJhdGVUb3BVVihuLGksd3QtMyx3dC0yLHd0LTEpO2R0KGt0WzBdKSxkdChrdFsxXSksZHQoa3RbMl0pfWZ1bmN0aW9uIFgocSxwdCxodCx3dCl7ZXQocSksZXQocHQpLGV0KHd0KSxldChwdCksZXQoaHQpLGV0KHd0KTtsZXQga3Q9aS5sZW5ndGgvMyxpZT14LmdlbmVyYXRlU2lkZVdhbGxVVihuLGksa3QtNixrdC0zLGt0LTIsa3QtMSk7ZHQoaWVbMF0pLGR0KGllWzFdKSxkdChpZVszXSksZHQoaWVbMV0pLGR0KGllWzJdKSxkdChpZVszXSl9ZnVuY3Rpb24gZXQocSl7aS5wdXNoKGxbcSozKzBdKSxpLnB1c2gobFtxKjMrMV0pLGkucHVzaChsW3EqMysyXSl9ZnVuY3Rpb24gZHQocSl7by5wdXNoKHEueCksby5wdXNoKHEueSl9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXMsbj10aGlzLnBhcmFtZXRlcnMub3B0aW9ucztyZXR1cm4gbjByKHIsbix0KX1zdGF0aWMgZnJvbUpTT04odCxyKXtsZXQgbj1bXTtmb3IobGV0IG89MCxhPXQuc2hhcGVzLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW3Quc2hhcGVzW29dXTtuLnB1c2gocyl9bGV0IGk9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiBpIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBPaHRbaS50eXBlXSgpLmZyb21KU09OKGkpKSxuZXcgaGgobix0Lm9wdGlvbnMpfX0scjByPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKGUsdCxyLG4saSl7bGV0IG89dFtyKjNdLGE9dFtyKjMrMV0scz10W24qM10sbD10W24qMysxXSxjPXRbaSozXSx1PXRbaSozKzFdO3JldHVybltuZXcgTHQobyxhKSxuZXcgTHQocyxsKSxuZXcgTHQoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihlLHQscixuLGksbyl7bGV0IGE9dFtyKjNdLHM9dFtyKjMrMV0sbD10W3IqMysyXSxjPXRbbiozXSx1PXRbbiozKzFdLGg9dFtuKjMrMl0sZj10W2kqM10scD10W2kqMysxXSxkPXRbaSozKzJdLGc9dFtvKjNdLF89dFtvKjMrMV0seT10W28qMysyXTtyZXR1cm4gTWF0aC5hYnMocy11KTxNYXRoLmFicyhhLWMpP1tuZXcgTHQoYSwxLWwpLG5ldyBMdChjLDEtaCksbmV3IEx0KGYsMS1kKSxuZXcgTHQoZywxLXkpXTpbbmV3IEx0KHMsMS1sKSxuZXcgTHQodSwxLWgpLG5ldyBMdChwLDEtZCksbmV3IEx0KF8sMS15KV19fTtmdW5jdGlvbiBuMHIoZSx0LHIpe2lmKHIuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1lW25dO3Iuc2hhcGVzLnB1c2goby51dWlkKX1lbHNlIHIuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdC5leHRydWRlUGF0aCE9PXZvaWQgMCYmKHIub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxyfXZhciBHMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPVstMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLDAsMCwtMSxuLDAsMSxuLDAsLTEsLW4sMCwxLC1uLG4sMCwtMSxuLDAsMSwtbiwwLC0xLC1uLDAsMV0sbz1bMCwxMSw1LDAsNSwxLDAsMSw3LDAsNywxMCwwLDEwLDExLDEsNSw5LDUsMTEsNCwxMSwxMCwyLDEwLDcsNiw3LDEsOCwzLDksNCwzLDQsMiwzLDIsNiwzLDYsOCwzLDgsOSw0LDksNSwyLDQsMTEsNiwyLDEwLDgsNiw3LDksOCwxXTtzdXBlcihpLG8sdCxyKSx0aGlzLnR5cGU9Ikljb3NhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEcxKHQucmFkaXVzLHQuZGV0YWlsKX19LFcxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bbmV3IEx0KDAsLjUpLG5ldyBMdCguNSwwKSxuZXcgTHQoMCwtLjUpXSxyPTEyLG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkxhdGhlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cG9pbnRzOnQsc2VnbWVudHM6cixwaGlTdGFydDpuLHBoaUxlbmd0aDppfSxyPU1hdGguZmxvb3IociksaT1abyhpLDAsTWF0aC5QSSoyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPVtdLHU9MS9yLGg9bmV3IGosZj1uZXcgTHQscD1uZXcgaixkPW5ldyBqLGc9bmV3IGosXz0wLHk9MDtmb3IobGV0IHg9MDt4PD10Lmxlbmd0aC0xO3grKylzd2l0Y2goeCl7Y2FzZSAwOl89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZy5jb3B5KHApLHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KTticmVhaztjYXNlIHQubGVuZ3RoLTE6bC5wdXNoKGcueCxnLnksZy56KTticmVhaztkZWZhdWx0Ol89dFt4KzFdLngtdFt4XS54LHk9dFt4KzFdLnktdFt4XS55LHAueD15KjEscC55PS1fLHAuej15KjAsZC5jb3B5KHApLHAueCs9Zy54LHAueSs9Zy55LHAueis9Zy56LHAubm9ybWFsaXplKCksbC5wdXNoKHAueCxwLnkscC56KSxnLmNvcHkoZCl9Zm9yKGxldCB4PTA7eDw9cjt4Kyspe2xldCBiPW4reCp1KmksUz1NYXRoLnNpbihiKSxDPU1hdGguY29zKGIpO2ZvcihsZXQgUD0wO1A8PXQubGVuZ3RoLTE7UCsrKXtoLng9dFtQXS54KlMsaC55PXRbUF0ueSxoLno9dFtQXS54KkMsYS5wdXNoKGgueCxoLnksaC56KSxmLng9eC9yLGYueT1QLyh0Lmxlbmd0aC0xKSxzLnB1c2goZi54LGYueSk7bGV0IGs9bFszKlArMF0qUyxPPWxbMypQKzFdLEQ9bFszKlArMF0qQztjLnB1c2goayxPLEQpfX1mb3IobGV0IHg9MDt4PHI7eCsrKWZvcihsZXQgYj0wO2I8dC5sZW5ndGgtMTtiKyspe2xldCBTPWIreCp0Lmxlbmd0aCxDPVMsUD1TK3QubGVuZ3RoLGs9Uyt0Lmxlbmd0aCsxLE89UysxO28ucHVzaChDLFAsTyksby5wdXNoKGssTyxQKX10aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGEsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHMsMikpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShjLDMpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBXMSh0LnBvaW50cyx0LnNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgpfX0sVzA9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTEsMCwwLDAsMSwwLDAsLTFdLGk9WzAsMiw0LDAsNCwzLDAsMyw1LDAsNSwyLDEsMiw1LDEsNSwzLDEsMyw0LDEsNCwyXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9Ik9jdGFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgVzAodC5yYWRpdXMsdC5kZXRhaWwpfX0sWTE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PS41LHI9MSxuPTgsaT0xLG89MCxhPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlJpbmdHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtpbm5lclJhZGl1czp0LG91dGVyUmFkaXVzOnIsdGhldGFTZWdtZW50czpuLHBoaVNlZ21lbnRzOmksdGhldGFTdGFydDpvLHRoZXRhTGVuZ3RoOmF9LG49TWF0aC5tYXgoMyxuKSxpPU1hdGgubWF4KDEsaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD10LGY9KHItdCkvaSxwPW5ldyBqLGQ9bmV3IEx0O2ZvcihsZXQgZz0wO2c8PWk7ZysrKXtmb3IobGV0IF89MDtfPD1uO18rKyl7bGV0IHk9bytfL24qYTtwLng9aCpNYXRoLmNvcyh5KSxwLnk9aCpNYXRoLnNpbih5KSxsLnB1c2gocC54LHAueSxwLnopLGMucHVzaCgwLDAsMSksZC54PShwLngvcisxKS8yLGQueT0ocC55L3IrMSkvMix1LnB1c2goZC54LGQueSl9aCs9Zn1mb3IobGV0IGc9MDtnPGk7ZysrKXtsZXQgXz1nKihuKzEpO2ZvcihsZXQgeT0wO3k8bjt5Kyspe2xldCB4PXkrXyxiPXgsUz14K24rMSxDPXgrbisyLFA9eCsxO3MucHVzaChiLFMsUCkscy5wdXNoKFMsQyxQKX19dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgWTEodC5pbm5lclJhZGl1cyx0Lm91dGVyUmFkaXVzLHQudGhldGFTZWdtZW50cyx0LnBoaVNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LFkwPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1uZXcgS2MoW25ldyBMdCgwLC41KSxuZXcgTHQoLS41LC0uNSksbmV3IEx0KC41LC0uNSldKSxyPTEyKXtzdXBlcigpLHRoaXMudHlwZT0iU2hhcGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxjdXJ2ZVNlZ21lbnRzOnJ9O2xldCBuPVtdLGk9W10sbz1bXSxhPVtdLHM9MCxsPTA7aWYoQXJyYXkuaXNBcnJheSh0KT09PSExKWModCk7ZWxzZSBmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKyljKHRbdV0pLHRoaXMuYWRkR3JvdXAocyxsLHUpLHMrPWwsbD0wO3RoaXMuc2V0SW5kZXgobiksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGEsMikpO2Z1bmN0aW9uIGModSl7bGV0IGg9aS5sZW5ndGgvMyxmPXUuZXh0cmFjdFBvaW50cyhyKSxwPWYuc2hhcGUsZD1mLmhvbGVzO1pjLmlzQ2xvY2tXaXNlKHApPT09ITEmJihwPXAucmV2ZXJzZSgpKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107WmMuaXNDbG9ja1dpc2UoeCk9PT0hMCYmKGRbX109eC5yZXZlcnNlKCkpfWxldCBnPVpjLnRyaWFuZ3VsYXRlU2hhcGUocCxkKTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX107cD1wLmNvbmNhdCh4KX1mb3IobGV0IF89MCx5PXAubGVuZ3RoO188eTtfKyspe2xldCB4PXBbX107aS5wdXNoKHgueCx4LnksMCksby5wdXNoKDAsMCwxKSxhLnB1c2goeC54LHgueSl9Zm9yKGxldCBfPTAseT1nLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1nW19dLGI9eFswXStoLFM9eFsxXStoLEM9eFsyXStoO24ucHVzaChiLFMsQyksbCs9M319fXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpLHI9dGhpcy5wYXJhbWV0ZXJzLnNoYXBlcztyZXR1cm4gaTByKHIsdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBpPTAsbz10LnNoYXBlcy5sZW5ndGg7aTxvO2krKyl7bGV0IGE9clt0LnNoYXBlc1tpXV07bi5wdXNoKGEpfXJldHVybiBuZXcgWTAobix0LmN1cnZlU2VnbWVudHMpfX07ZnVuY3Rpb24gaTByKGUsdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2xldCBpPWVbcl07dC5zaGFwZXMucHVzaChpLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChlLnV1aWQpO3JldHVybiB0fXZhciBqMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTMyLG49MTYsaT0wLG89TWF0aC5QSSoyLGE9MCxzPU1hdGguUEkpe3N1cGVyKCksdGhpcy50eXBlPSJTcGhlcmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6bixwaGlTdGFydDppLHBoaUxlbmd0aDpvLHRoZXRhU3RhcnQ6YSx0aGV0YUxlbmd0aDpzfSxyPU1hdGgubWF4KDMsTWF0aC5mbG9vcihyKSksbj1NYXRoLm1heCgyLE1hdGguZmxvb3IobikpO2xldCBsPU1hdGgubWluKGErcyxNYXRoLlBJKSxjPTAsdT1bXSxoPW5ldyBqLGY9bmV3IGoscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PD1uO3krKyl7bGV0IHg9W10sYj15L24sUz0wO3k9PTAmJmE9PTA/Uz0uNS9yOnk9PW4mJmw9PU1hdGguUEkmJihTPS0uNS9yKTtmb3IobGV0IEM9MDtDPD1yO0MrKyl7bGV0IFA9Qy9yO2gueD0tdCpNYXRoLmNvcyhpK1AqbykqTWF0aC5zaW4oYStiKnMpLGgueT10Kk1hdGguY29zKGErYipzKSxoLno9dCpNYXRoLnNpbihpK1AqbykqTWF0aC5zaW4oYStiKnMpLGQucHVzaChoLngsaC55LGgueiksZi5jb3B5KGgpLm5vcm1hbGl6ZSgpLGcucHVzaChmLngsZi55LGYueiksXy5wdXNoKFArUywxLWIpLHgucHVzaChjKyspfXUucHVzaCh4KX1mb3IobGV0IHk9MDt5PG47eSsrKWZvcihsZXQgeD0wO3g8cjt4Kyspe2xldCBiPXVbeV1beCsxXSxTPXVbeV1beF0sQz11W3krMV1beF0sUD11W3krMV1beCsxXTsoeSE9PTB8fGE+MCkmJnAucHVzaChiLFMsUCksKHkhPT1uLTF8fGw8TWF0aC5QSSkmJnAucHVzaChTLEMsUCl9dGhpcy5zZXRJbmRleChwKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShkLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUoXywyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajAodC5yYWRpdXMsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5waGlTdGFydCx0LnBoaUxlbmd0aCx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxqMT1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPVsxLDEsMSwtMSwtMSwxLC0xLDEsLTEsMSwtMSwtMV0saT1bMiwxLDAsMCwzLDIsMSwzLDAsMiwzLDFdO3N1cGVyKG4saSx0LHIpLHRoaXMudHlwZT0iVGV0cmFoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgajEodC5yYWRpdXMsdC5kZXRhaWwpfX0sWDE9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0uNCxuPTgsaT02LG89TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iVG9ydXNHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIscmFkaWFsU2VnbWVudHM6bix0dWJ1bGFyU2VnbWVudHM6aSxhcmM6b30sbj1NYXRoLmZsb29yKG4pLGk9TWF0aC5mbG9vcihpKTtsZXQgYT1bXSxzPVtdLGw9W10sYz1bXSx1PW5ldyBqLGg9bmV3IGosZj1uZXcgajtmb3IobGV0IHA9MDtwPD1uO3ArKylmb3IobGV0IGQ9MDtkPD1pO2QrKyl7bGV0IGc9ZC9pKm8sXz1wL24qTWF0aC5QSSoyO2gueD0odCtyKk1hdGguY29zKF8pKSpNYXRoLmNvcyhnKSxoLnk9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5zaW4oZyksaC56PXIqTWF0aC5zaW4oXykscy5wdXNoKGgueCxoLnksaC56KSx1Lng9dCpNYXRoLmNvcyhnKSx1Lnk9dCpNYXRoLnNpbihnKSxmLnN1YlZlY3RvcnMoaCx1KS5ub3JtYWxpemUoKSxsLnB1c2goZi54LGYueSxmLnopLGMucHVzaChkL2kpLGMucHVzaChwL24pfWZvcihsZXQgcD0xO3A8PW47cCsrKWZvcihsZXQgZD0xO2Q8PWk7ZCsrKXtsZXQgZz0oaSsxKSpwK2QtMSxfPShpKzEpKihwLTEpK2QtMSx5PShpKzEpKihwLTEpK2QseD0oaSsxKSpwK2Q7YS5wdXNoKGcsXyx4KSxhLnB1c2goXyx5LHgpfXRoaXMuc2V0SW5kZXgoYSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGwsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGMsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFgxKHQucmFkaXVzLHQudHViZSx0LnJhZGlhbFNlZ21lbnRzLHQudHVidWxhclNlZ21lbnRzLHQuYXJjKX19LCQxPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj02NCxpPTgsbz0yLGE9Myl7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzS25vdEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHR1YmU6cix0dWJ1bGFyU2VnbWVudHM6bixyYWRpYWxTZWdtZW50czppLHA6byxxOmF9LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IHM9W10sbD1bXSxjPVtdLHU9W10saD1uZXcgaixmPW5ldyBqLHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89bmV3IGoseT1uZXcgajtmb3IobGV0IGI9MDtiPD1uOysrYil7bGV0IFM9Yi9uKm8qTWF0aC5QSSoyO3goUyxvLGEsdCxwKSx4KFMrLjAxLG8sYSx0LGQpLF8uc3ViVmVjdG9ycyhkLHApLHkuYWRkVmVjdG9ycyhkLHApLGcuY3Jvc3NWZWN0b3JzKF8seSkseS5jcm9zc1ZlY3RvcnMoZyxfKSxnLm5vcm1hbGl6ZSgpLHkubm9ybWFsaXplKCk7Zm9yKGxldCBDPTA7Qzw9aTsrK0Mpe2xldCBQPUMvaSpNYXRoLlBJKjIsaz0tcipNYXRoLmNvcyhQKSxPPXIqTWF0aC5zaW4oUCk7aC54PXAueCsoayp5LngrTypnLngpLGgueT1wLnkrKGsqeS55K08qZy55KSxoLno9cC56KyhrKnkueitPKmcueiksbC5wdXNoKGgueCxoLnksaC56KSxmLnN1YlZlY3RvcnMoaCxwKS5ub3JtYWxpemUoKSxjLnB1c2goZi54LGYueSxmLnopLHUucHVzaChiL24pLHUucHVzaChDL2kpfX1mb3IobGV0IGI9MTtiPD1uO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztzLnB1c2goQyxQLE8pLHMucHVzaChQLGssTyl9dGhpcy5zZXRJbmRleChzKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUodSwyKSk7ZnVuY3Rpb24geChiLFMsQyxQLGspe2xldCBPPU1hdGguY29zKGIpLEQ9TWF0aC5zaW4oYiksQj1DL1MqYixJPU1hdGguY29zKEIpO2sueD1QKigyK0kpKi41Kk8say55PVAqKDIrSSkqRCouNSxrLno9UCpNYXRoLnNpbihCKSouNX19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgJDEodC5yYWRpdXMsdC50dWJlLHQudHVidWxhclNlZ21lbnRzLHQucmFkaWFsU2VnbWVudHMsdC5wLHQucSl9fSxLMT1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IGhNKG5ldyBqKC0xLC0xLDApLG5ldyBqKC0xLDEsMCksbmV3IGooMSwxLDApKSxyPTY0LG49MSxpPTgsbz0hMSl7c3VwZXIoKSx0aGlzLnR5cGU9IlR1YmVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtwYXRoOnQsdHVidWxhclNlZ21lbnRzOnIscmFkaXVzOm4scmFkaWFsU2VnbWVudHM6aSxjbG9zZWQ6b307bGV0IGE9dC5jb21wdXRlRnJlbmV0RnJhbWVzKHIsbyk7dGhpcy50YW5nZW50cz1hLnRhbmdlbnRzLHRoaXMubm9ybWFscz1hLm5vcm1hbHMsdGhpcy5iaW5vcm1hbHM9YS5iaW5vcm1hbHM7bGV0IHM9bmV3IGosbD1uZXcgaixjPW5ldyBMdCx1PW5ldyBqLGg9W10sZj1bXSxwPVtdLGQ9W107ZygpLHRoaXMuc2V0SW5kZXgoZCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHAsMikpO2Z1bmN0aW9uIGcoKXtmb3IobGV0IGI9MDtiPHI7YisrKV8oYik7XyhvPT09ITE/cjowKSx4KCkseSgpfWZ1bmN0aW9uIF8oYil7dT10LmdldFBvaW50QXQoYi9yLHUpO2xldCBTPWEubm9ybWFsc1tiXSxDPWEuYmlub3JtYWxzW2JdO2ZvcihsZXQgUD0wO1A8PWk7UCsrKXtsZXQgaz1QL2kqTWF0aC5QSSoyLE89TWF0aC5zaW4oayksRD0tTWF0aC5jb3Moayk7bC54PUQqUy54K08qQy54LGwueT1EKlMueStPKkMueSxsLno9RCpTLnorTypDLnosbC5ub3JtYWxpemUoKSxmLnB1c2gobC54LGwueSxsLnopLHMueD11LngrbipsLngscy55PXUueStuKmwueSxzLno9dS56K24qbC56LGgucHVzaChzLngscy55LHMueil9fWZ1bmN0aW9uIHkoKXtmb3IobGV0IGI9MTtiPD1yO2IrKylmb3IobGV0IFM9MTtTPD1pO1MrKyl7bGV0IEM9KGkrMSkqKGItMSkrKFMtMSksUD0oaSsxKSpiKyhTLTEpLGs9KGkrMSkqYitTLE89KGkrMSkqKGItMSkrUztkLnB1c2goQyxQLE8pLGQucHVzaChQLGssTyl9fWZ1bmN0aW9uIHgoKXtmb3IobGV0IGI9MDtiPD1yO2IrKylmb3IobGV0IFM9MDtTPD1pO1MrKyljLng9Yi9yLGMueT1TL2kscC5wdXNoKGMueCxjLnkpfX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5wYXRoPXRoaXMucGFyYW1ldGVycy5wYXRoLnRvSlNPTigpLHR9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSzEobmV3IE9odFt0LnBhdGgudHlwZV0oKS5mcm9tSlNPTih0LnBhdGgpLHQudHVidWxhclNlZ21lbnRzLHQucmFkaXVzLHQucmFkaWFsU2VnbWVudHMsdC5jbG9zZWQpfX0sZDY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW51bGwpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJXaXJlZnJhbWVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtnZW9tZXRyeTp0fSx0IT09bnVsbCl7bGV0IHI9W10sbj1uZXcgU2V0LGk9bmV3IGosbz1uZXcgajtpZih0LmluZGV4IT09bnVsbCl7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLHM9dC5pbmRleCxsPXQuZ3JvdXBzO2wubGVuZ3RoPT09MCYmKGw9W3tzdGFydDowLGNvdW50OnMuY291bnQsbWF0ZXJpYWxJbmRleDowfV0pO2ZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1OysrYyl7bGV0IGg9bFtjXSxmPWguc3RhcnQscD1oLmNvdW50O2ZvcihsZXQgZD1mLGc9ZitwO2Q8ZztkKz0zKWZvcihsZXQgXz0wO188MztfKyspe2xldCB5PXMuZ2V0WChkK18pLHg9cy5nZXRYKGQrKF8rMSklMyk7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEseSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEseCksZGhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19fWVsc2V7bGV0IGE9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGw9YS5jb3VudC8zO3M8bDtzKyspZm9yKGxldCBjPTA7YzwzO2MrKyl7bGV0IHU9MypzK2MsaD0zKnMrKGMrMSklMztpLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSx1KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSxkaGUoaSxvLG4pPT09ITAmJihyLnB1c2goaS54LGkueSxpLnopLHIucHVzaChvLngsby55LG8ueikpfX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKX19fTtmdW5jdGlvbiBkaGUoZSx0LHIpe2xldCBuPWAke2UueH0sJHtlLnl9LCR7ZS56fS0ke3QueH0sJHt0Lnl9LCR7dC56fWAsaT1gJHt0Lnh9LCR7dC55fSwke3Quen0tJHtlLnh9LCR7ZS55fSwke2Uuen1gO3JldHVybiByLmhhcyhuKT09PSEwfHxyLmhhcyhpKT09PSEwPyExOihyLmFkZChuLGkpLCEwKX12YXIgbWhlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEJveEdlb21ldHJ5OlFmLEJveEJ1ZmZlckdlb21ldHJ5OlFmLENpcmNsZUdlb21ldHJ5OkYxLENpcmNsZUJ1ZmZlckdlb21ldHJ5OkYxLENvbmVHZW9tZXRyeTpCMSxDb25lQnVmZmVyR2VvbWV0cnk6QjEsQ3lsaW5kZXJHZW9tZXRyeTpvbSxDeWxpbmRlckJ1ZmZlckdlb21ldHJ5Om9tLERvZGVjYWhlZHJvbkdlb21ldHJ5OkgxLERvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OkgxLEVkZ2VzR2VvbWV0cnk6czYsRXh0cnVkZUdlb21ldHJ5OmhoLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTpoaCxJY29zYWhlZHJvbkdlb21ldHJ5OkcxLEljb3NhaGVkcm9uQnVmZmVyR2VvbWV0cnk6RzEsTGF0aGVHZW9tZXRyeTpXMSxMYXRoZUJ1ZmZlckdlb21ldHJ5OlcxLE9jdGFoZWRyb25HZW9tZXRyeTpXMCxPY3RhaGVkcm9uQnVmZmVyR2VvbWV0cnk6VzAsUGxhbmVHZW9tZXRyeTpWMCxQbGFuZUJ1ZmZlckdlb21ldHJ5OlYwLFBvbHloZWRyb25HZW9tZXRyeTp1aCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6dWgsUmluZ0dlb21ldHJ5OlkxLFJpbmdCdWZmZXJHZW9tZXRyeTpZMSxTaGFwZUdlb21ldHJ5OlkwLFNoYXBlQnVmZmVyR2VvbWV0cnk6WTAsU3BoZXJlR2VvbWV0cnk6ajAsU3BoZXJlQnVmZmVyR2VvbWV0cnk6ajAsVGV0cmFoZWRyb25HZW9tZXRyeTpqMSxUZXRyYWhlZHJvbkJ1ZmZlckdlb21ldHJ5OmoxLFRvcnVzR2VvbWV0cnk6WDEsVG9ydXNCdWZmZXJHZW9tZXRyeTpYMSxUb3J1c0tub3RHZW9tZXRyeTokMSxUb3J1c0tub3RCdWZmZXJHZW9tZXRyeTokMSxUdWJlR2VvbWV0cnk6SzEsVHViZUJ1ZmZlckdlb21ldHJ5OksxLFdpcmVmcmFtZUdlb21ldHJ5OmQ2fSksbTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319O202LnByb3RvdHlwZS5pc1NoYWRvd01hdGVyaWFsPSEwO3ZhciBwTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIn0sdGhpcy50eXBlPSJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMucm91Z2huZXNzPTEsdGhpcy5tZXRhbG5lc3M9MCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtwTS5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMDt2YXIgZzY9Y2xhc3MgZXh0ZW5kcyBwTXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBabygyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24ocil7dGhpcy5pb3I9KDErLjQqcikvKDEtLjQqcil9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBuZSgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBuZSgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgbmUoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1PNix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtfNi5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17VE9PTjoiIn0sdGhpcy50eXBlPSJNZXNoVG9vbk1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmdyYWRpZW50TWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt5Ni5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwO3ZhciB2Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07djYucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPU82LHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O3g2LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2I2LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMDt2YXIgdzY9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fTt3Ni5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIG8wcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxTaGFkb3dNYXRlcmlhbDptNixTcHJpdGVNYXRlcmlhbDppTSxSYXdTaGFkZXJNYXRlcmlhbDpVMCxTaGFkZXJNYXRlcmlhbDpsaCxQb2ludHNNYXRlcmlhbDpubSxNZXNoUGh5c2ljYWxNYXRlcmlhbDpnNixNZXNoU3RhbmRhcmRNYXRlcmlhbDpwTSxNZXNoUGhvbmdNYXRlcmlhbDpfNixNZXNoVG9vbk1hdGVyaWFsOnk2LE1lc2hOb3JtYWxNYXRlcmlhbDp2NixNZXNoTGFtYmVydE1hdGVyaWFsOng2LE1lc2hEZXB0aE1hdGVyaWFsOmVNLE1lc2hEaXN0YW5jZU1hdGVyaWFsOnJNLE1lc2hCYXNpY01hdGVyaWFsOnNoLE1lc2hNYXRjYXBNYXRlcmlhbDpiNixMaW5lRGFzaGVkTWF0ZXJpYWw6dzYsTGluZUJhc2ljTWF0ZXJpYWw6R2ksTWF0ZXJpYWw6cWl9KSxZbj17YXJyYXlTbGljZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIFluLmlzVHlwZWRBcnJheShlKT9uZXcgZS5jb25zdHJ1Y3RvcihlLnN1YmFycmF5KHQsciE9PXZvaWQgMD9yOmUubGVuZ3RoKSk6ZS5zbGljZSh0LHIpfSxjb252ZXJ0QXJyYXk6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiFlfHwhciYmZS5jb25zdHJ1Y3Rvcj09PXQ/ZTp0eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD09Im51bWJlciI/bmV3IHQoZSk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSl9LGlzVHlwZWRBcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9LGdldEtleWZyYW1lT3JkZXI6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLG8pe3JldHVybiBlW2ldLWVbb119bGV0IHI9ZS5sZW5ndGgsbj1uZXcgQXJyYXkocik7Zm9yKGxldCBpPTA7aSE9PXI7KytpKW5baV09aTtyZXR1cm4gbi5zb3J0KHQpLG59LHNvcnRlZEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtsZXQgbj1lLmxlbmd0aCxpPW5ldyBlLmNvbnN0cnVjdG9yKG4pO2ZvcihsZXQgbz0wLGE9MDthIT09bjsrK28pe2xldCBzPXJbb10qdDtmb3IobGV0IGw9MDtsIT09dDsrK2wpaVthKytdPWVbcytsXX1yZXR1cm4gaX0sZmxhdHRlbkpTT046ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9MSxvPWVbMF07Zm9yKDtvIT09dm9pZCAwJiZvW25dPT09dm9pZCAwOylvPWVbaSsrXTtpZihvPT09dm9pZCAwKXJldHVybjtsZXQgYT1vW25dO2lmKGEhPT12b2lkIDApaWYoQXJyYXkuaXNBcnJheShhKSlkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaC5hcHBseShyLGEpKSxvPWVbaSsrXTt3aGlsZShvIT09dm9pZCAwKTtlbHNlIGlmKGEudG9BcnJheSE9PXZvaWQgMClkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLGEudG9BcnJheShyLHIubGVuZ3RoKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBkbyBhPW9bbl0sYSE9PXZvaWQgMCYmKHQucHVzaChvLnRpbWUpLHIucHVzaChhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCl9LHN1YmNsaXA6ZnVuY3Rpb24oZSx0LHIsbixpPTMwKXtsZXQgbz1lLmNsb25lKCk7by5uYW1lPXQ7bGV0IGE9W107Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXtsZXQgYz1vLnRyYWNrc1tsXSx1PWMuZ2V0VmFsdWVTaXplKCksaD1bXSxmPVtdO2ZvcihsZXQgcD0wO3A8Yy50aW1lcy5sZW5ndGg7KytwKXtsZXQgZD1jLnRpbWVzW3BdKmk7aWYoIShkPHJ8fGQ+PW4pKXtoLnB1c2goYy50aW1lc1twXSk7Zm9yKGxldCBnPTA7Zzx1OysrZylmLnB1c2goYy52YWx1ZXNbcCp1K2ddKX19aC5sZW5ndGghPT0wJiYoYy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkoaCxjLnRpbWVzLmNvbnN0cnVjdG9yKSxjLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkoZixjLnZhbHVlcy5jb25zdHJ1Y3RvciksYS5wdXNoKGMpKX1vLnRyYWNrcz1hO2xldCBzPTEvMDtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpcz5vLnRyYWNrc1tsXS50aW1lc1swXSYmKHM9by50cmFja3NbbF0udGltZXNbMF0pO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClvLnRyYWNrc1tsXS5zaGlmdCgtMSpzKTtyZXR1cm4gby5yZXNldER1cmF0aW9uKCksb30sbWFrZUNsaXBBZGRpdGl2ZTpmdW5jdGlvbihlLHQ9MCxyPWUsbj0zMCl7bjw9MCYmKG49MzApO2xldCBpPXIudHJhY2tzLmxlbmd0aCxvPXQvbjtmb3IobGV0IGE9MDthPGk7KythKXtsZXQgcz1yLnRyYWNrc1thXSxsPXMuVmFsdWVUeXBlTmFtZTtpZihsPT09ImJvb2wifHxsPT09InN0cmluZyIpY29udGludWU7bGV0IGM9ZS50cmFja3MuZmluZChmdW5jdGlvbih5KXtyZXR1cm4geS5uYW1lPT09cy5uYW1lJiZ5LlZhbHVlVHlwZU5hbWU9PT1sfSk7aWYoYz09PXZvaWQgMCljb250aW51ZTtsZXQgdT0wLGg9cy5nZXRWYWx1ZVNpemUoKTtzLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYodT1oLzMpO2xldCBmPTAscD1jLmdldFZhbHVlU2l6ZSgpO2MuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJihmPXAvMyk7bGV0IGQ9cy50aW1lcy5sZW5ndGgtMSxnO2lmKG88PXMudGltZXNbMF0pe2xldCB5PXUseD1oLXU7Zz1Zbi5hcnJheVNsaWNlKHMudmFsdWVzLHkseCl9ZWxzZSBpZihvPj1zLnRpbWVzW2RdKXtsZXQgeT1kKmgrdSx4PXkraC11O2c9WW4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2V7bGV0IHk9cy5jcmVhdGVJbnRlcnBvbGFudCgpLHg9dSxiPWgtdTt5LmV2YWx1YXRlKG8pLGc9WW4uYXJyYXlTbGljZSh5LnJlc3VsdEJ1ZmZlcix4LGIpfWw9PT0icXVhdGVybmlvbiImJm5ldyB5aSgpLmZyb21BcnJheShnKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KGcpO2xldCBfPWMudGltZXMubGVuZ3RoO2ZvcihsZXQgeT0wO3k8XzsrK3kpe2xldCB4PXkqcCtmO2lmKGw9PT0icXVhdGVybmlvbiIpeWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMseCxnLDAsYy52YWx1ZXMseCk7ZWxzZXtsZXQgYj1wLWYqMjtmb3IobGV0IFM9MDtTPGI7KytTKWMudmFsdWVzW3grU10tPWdbU119fX1yZXR1cm4gZS5ibGVuZE1vZGU9a2h0LGV9fSxmaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9aSE9PXZvaWQgMD9pOm5ldyByLmNvbnN0cnVjdG9yKG4pLHRoaXMuc2FtcGxlVmFsdWVzPXIsdGhpcy52YWx1ZVNpemU9bix0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG49dGhpcy5fY2FjaGVkSW5kZXgsaT1yW25dLG89cltuLTFdO3Q6e2U6e2xldCBhO3I6e246aWYoISh0PGkpKXtmb3IobGV0IHM9bisyOzspe2lmKGk9PT12b2lkIDApe2lmKHQ8bylicmVhayBuO3JldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLHQsbyl9aWYobj09PXMpYnJlYWs7aWYobz1pLGk9clsrK25dLHQ8aSlicmVhayBlfWE9ci5sZW5ndGg7YnJlYWsgcn1pZighKHQ+PW8pKXtsZXQgcz1yWzFdO3Q8cyYmKG49MixvPXMpO2ZvcihsZXQgbD1uLTI7Oyl7aWYobz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYobj09PWwpYnJlYWs7aWYoaT1vLG89clstLW4tMV0sdD49bylicmVhayBlfWE9bixuPTA7YnJlYWsgcn1icmVhayB0fWZvcig7bjxhOyl7bGV0IHM9bithPj4+MTt0PHJbc10/YT1zOm49cysxfWlmKGk9cltuXSxvPXJbbi0xXSxvPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxpKTtpZihpPT09dm9pZCAwKXJldHVybiBuPXIubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5hZnRlckVuZF8obi0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9bix0aGlzLmludGVydmFsQ2hhbmdlZF8obixvLGkpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhuLG8sdCxpKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IHI9dGhpcy5yZXN1bHRCdWZmZXIsbj10aGlzLnNhbXBsZVZhbHVlcyxpPXRoaXMudmFsdWVTaXplLG89dCppO2ZvcihsZXQgYT0wO2EhPT1pOysrYSlyW2FdPW5bbythXTtyZXR1cm4gcn1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O2ZoLnByb3RvdHlwZS5iZWZvcmVTdGFydF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87ZmgucHJvdG90eXBlLmFmdGVyRW5kXz1maC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgU1U9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfX1pbnRlcnZhbENoYW5nZWRfKHQscixuKXtsZXQgaT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixhPXQrMSxzPWlbb10sbD1pW2FdO2lmKHM9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgVDE6bz10LHM9MipyLW47YnJlYWs7Y2FzZSBKUDpvPWkubGVuZ3RoLTIscz1yK2lbb10taVtvKzFdO2JyZWFrO2RlZmF1bHQ6bz10LHM9bn1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBUMTphPXQsbD0yKm4tcjticmVhaztjYXNlIEpQOmE9MSxsPW4raVsxXS1pWzBdO2JyZWFrO2RlZmF1bHQ6YT10LTEsbD1yfWxldCBjPShuLXIpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhyLXMpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1uKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PWEqdX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9dCpzLGM9bC1zLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LHA9dGhpcy5fd2VpZ2h0TmV4dCxkPShuLXIpLyhpLXIpLGc9ZCpkLF89ZypkLHk9LWYqXysyKmYqZy1mKmQseD0oMStmKSpfKygtMS41LTIqZikqZysoLS41K2YpKmQrMSxiPSgtMS1wKSpfKygxLjUrcCkqZysuNSpkLFM9cCpfLXAqZztmb3IobGV0IEM9MDtDIT09czsrK0Mpb1tDXT15KmFbdStDXSt4KmFbYytDXStiKmFbbCtDXStTKmFbaCtDXTtyZXR1cm4gb319LFM2PWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PShuLXIpLyhpLXIpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1zOysrZilvW2ZdPWFbYytmXSpoK2FbbCtmXSp1O3JldHVybiBvfX0sTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRGw9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYocj09PXZvaWQgMHx8ci5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Zbi5jb252ZXJ0QXJyYXkocix0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Zbi5jb252ZXJ0QXJyYXkobix0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKGl8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IHI9dC5jb25zdHJ1Y3RvcixuO2lmKHIudG9KU09OIT09dGhpcy50b0pTT04pbj1yLnRvSlNPTih0KTtlbHNle249e25hbWU6dC5uYW1lLHRpbWVzOlluLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6WW4uY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IGk9dC5nZXRJbnRlcnBvbGF0aW9uKCk7aSE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihuLmludGVycG9sYXRpb249aSl9cmV0dXJuIG4udHlwZT10LlZhbHVlVHlwZU5hbWUsbn1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IE1VKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBTNih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgU1UodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IHI7c3dpdGNoKHQpe2Nhc2UgS1A6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgWlA6cj10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIHJVOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYocj09PXZvaWQgMCl7bGV0IG49InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3Iobik7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLG4pLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9cix0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBLUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiBaUDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiByVX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgcj10aGlzLnRpbWVzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXJbbl0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LHIpe2xldCBuPXRoaXMudGltZXMsaT1uLmxlbmd0aCxvPTAsYT1pLTE7Zm9yKDtvIT09aSYmbltvXTx0OykrK287Zm9yKDthIT09LTEmJm5bYV0+cjspLS1hO2lmKCsrYSxvIT09MHx8YSE9PWkpe28+PWEmJihhPU1hdGgubWF4KGEsMSksbz1hLTEpO2xldCBzPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKG4sbyxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qcyxhKnMpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAscj10aGlzLmdldFZhbHVlU2l6ZSgpO3ItTWF0aC5mbG9vcihyKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgbj10aGlzLnRpbWVzLGk9dGhpcy52YWx1ZXMsbz1uLmxlbmd0aDtvPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IGE9bnVsbDtmb3IobGV0IHM9MDtzIT09bztzKyspe2xldCBsPW5bc107aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLHMsbCksdD0hMTticmVha31pZihhIT09bnVsbCYmYT5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMscyxsLGEpLHQ9ITE7YnJlYWt9YT1sfWlmKGkhPT12b2lkIDAmJlluLmlzVHlwZWRBcnJheShpKSlmb3IobGV0IHM9MCxsPWkubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9aVtzXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9WW4uYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxyPVluLmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLG49dGhpcy5nZXRWYWx1ZVNpemUoKSxpPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09clUsbz10Lmxlbmd0aC0xLGE9MTtmb3IobGV0IHM9MTtzPG87KytzKXtsZXQgbD0hMSxjPXRbc10sdT10W3MrMV07aWYoYyE9PXUmJihzIT09MXx8YyE9PXRbMF0pKWlmKGkpbD0hMDtlbHNle2xldCBoPXMqbixmPWgtbixwPWgrbjtmb3IobGV0IGQ9MDtkIT09bjsrK2Qpe2xldCBnPXJbaCtkXTtpZihnIT09cltmK2RdfHxnIT09cltwK2RdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYocyE9PWEpe3RbYV09dFtzXTtsZXQgaD1zKm4sZj1hKm47Zm9yKGxldCBwPTA7cCE9PW47KytwKXJbZitwXT1yW2grcF19KythfX1pZihvPjApe3RbYV09dFtvXTtmb3IobGV0IHM9bypuLGw9YSpuLGM9MDtjIT09bjsrK2MpcltsK2NdPXJbcytjXTsrK2F9cmV0dXJuIGEhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1Zbi5hcnJheVNsaWNlKHQsMCxhKSx0aGlzLnZhbHVlcz1Zbi5hcnJheVNsaWNlKHIsMCxhKm4pKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPXIpLHRoaXN9Y2xvbmUoKXtsZXQgdD1Zbi5hcnJheVNsaWNlKHRoaXMudGltZXMsMCkscj1Zbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLG49dGhpcy5jb25zdHJ1Y3RvcixpPW5ldyBuKHRoaXMubmFtZSx0LHIpO3JldHVybiBpLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQsaX19O0RsLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7RGwucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPVpQO3ZhciBhbT1jbGFzcyBleHRlbmRzIERse307YW0ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO2FtLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7YW0ucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO2FtLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBNNj1jbGFzcyBleHRlbmRzIERse307TTYucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgWjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O1oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBFVT1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD0obi1yKS8oaS1yKSxjPXQqcztmb3IobGV0IHU9YytzO2MhPT11O2MrPTQpeWkuc2xlcnBGbGF0KG8sMCxhLGMtcyxhLGMsbCk7cmV0dXJuIG99fSxYMD1jbGFzcyBleHRlbmRzIERse0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IEVVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1gwLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYMC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249WlA7WDAucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIHNtPWNsYXNzIGV4dGVuZHMgRGx7fTtzbS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtzbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O3NtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtzbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgSjE9Y2xhc3MgZXh0ZW5kcyBEbHt9O0oxLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBRMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9LTEsbixpPSRVKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1uLHRoaXMuZHVyYXRpb249cix0aGlzLmJsZW5kTW9kZT1pLHRoaXMudXVpZD1ObCgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCByPVtdLG49dC50cmFja3MsaT0xLyh0LmZwc3x8MSk7Zm9yKGxldCBhPTAscz1uLmxlbmd0aDthIT09czsrK2Epci5wdXNoKHMwcihuW2FdKS5zY2FsZShpKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24scix0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCByPVtdLG49dC50cmFja3MsaT17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6cix1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLGE9bi5sZW5ndGg7byE9PWE7KytvKXIucHVzaChEbC50b0pTT04obltvXSkpO3JldHVybiBpfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LHIsbixpKXtsZXQgbz1yLmxlbmd0aCxhPVtdO2ZvcihsZXQgcz0wO3M8bztzKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChzK28tMSklbyxzLChzKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9WW4uZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPVluLnNvcnRlZEFycmF5KGwsMSx1KSxjPVluLnNvcnRlZEFycmF5KGMsMSx1KSwhaSYmbFswXT09PTAmJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxhLnB1c2gobmV3IFoxKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrcltzXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvbikpfXJldHVybiBuZXcgdGhpcyh0LC0xLGEpfXN0YXRpYyBmaW5kQnlOYW1lKHQscil7bGV0IG49dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IGk9dDtuPWkuZ2VvbWV0cnkmJmkuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8aS5hbmltYXRpb25zfWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV0ubmFtZT09PXIpcmV0dXJuIG5baV07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQscixuKXtsZXQgaT17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgcz0wLGw9dC5sZW5ndGg7czxsO3MrKyl7bGV0IGM9dFtzXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgaD11WzFdLGY9aVtoXTtmfHwoaVtoXT1mPVtdKSxmLnB1c2goYyl9fWxldCBhPVtdO2ZvcihsZXQgcyBpbiBpKWEucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHMsaVtzXSxyLG4pKTtyZXR1cm4gYX1zdGF0aWMgcGFyc2VBbmltYXRpb24odCxyKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBuPWZ1bmN0aW9uKGgsZixwLGQsZyl7aWYocC5sZW5ndGghPT0wKXtsZXQgXz1bXSx5PVtdO1luLmZsYXR0ZW5KU09OKHAsXyx5LGQpLF8ubGVuZ3RoIT09MCYmZy5wdXNoKG5ldyBoKGYsXyx5KSl9fSxpPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIsYT10LmZwc3x8MzAscz10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGg9MDtoPGMubGVuZ3RoO2grKyl7bGV0IGY9Y1toXS5rZXlzO2lmKCEoIWZ8fGYubGVuZ3RoPT09MCkpaWYoZlswXS5tb3JwaFRhcmdldHMpe2xldCBwPXt9LGQ7Zm9yKGQ9MDtkPGYubGVuZ3RoO2QrKylpZihmW2RdLm1vcnBoVGFyZ2V0cylmb3IobGV0IGc9MDtnPGZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDtnKyspcFtmW2RdLm1vcnBoVGFyZ2V0c1tnXV09LTE7Zm9yKGxldCBnIGluIHApe2xldCBfPVtdLHk9W107Zm9yKGxldCB4PTA7eCE9PWZbZF0ubW9ycGhUYXJnZXRzLmxlbmd0aDsrK3gpe2xldCBiPWZbZF07Xy5wdXNoKGIudGltZSkseS5wdXNoKGIubW9ycGhUYXJnZXQ9PT1nPzE6MCl9aS5wdXNoKG5ldyBaMSgiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlWyIrZysiXSIsXyx5KSl9bD1wLmxlbmd0aCooYXx8MSl9ZWxzZXtsZXQgcD0iLmJvbmVzWyIrcltoXS5uYW1lKyJdIjtuKEoxLHArIi5wb3NpdGlvbiIsZiwicG9zIixpKSxuKFgwLHArIi5xdWF0ZXJuaW9uIixmLCJyb3QiLGkpLG4oSjEscCsiLnNjYWxlIixmLCJzY2wiLGkpfX1yZXR1cm4gaS5sZW5ndGg9PT0wP251bGw6bmV3IHRoaXMobyxsLGkscyl9cmVzZXREdXJhdGlvbigpe2xldCB0PXRoaXMudHJhY2tzLHI9MDtmb3IobGV0IG49MCxpPXQubGVuZ3RoO24hPT1pOysrbil7bGV0IG89dGhpcy50cmFja3Nbbl07cj1NYXRoLm1heChyLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPXIsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0PXQmJnRoaXMudHJhY2tzW3JdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8dGhpcy50cmFja3MubGVuZ3RoO3IrKyl0LnB1c2godGhpcy50cmFja3Nbcl0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIGEwcihlKXtzd2l0Y2goZS50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBaMTtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIEoxO2Nhc2UiY29sb3IiOnJldHVybiBNNjtjYXNlInF1YXRlcm5pb24iOnJldHVybiBYMDtjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIGFtO2Nhc2Uic3RyaW5nIjpyZXR1cm4gc219dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIitlKX1mdW5jdGlvbiBzMHIoZSl7aWYoZS50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1hMHIoZS50eXBlKTtpZihlLnRpbWVzPT09dm9pZCAwKXtsZXQgcj1bXSxuPVtdO1luLmZsYXR0ZW5KU09OKGUua2V5cyxyLG4sInZhbHVlIiksZS50aW1lcz1yLGUudmFsdWVzPW59cmV0dXJuIHQucGFyc2UhPT12b2lkIDA/dC5wYXJzZShlKTpuZXcgdChlLm5hbWUsZS50aW1lcyxlLnZhbHVlcyxlLmludGVycG9sYXRpb24pfXZhciB0eD17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmVuYWJsZWQhPT0hMSYmKHRoaXMuZmlsZXNbZV09dCl9LGdldDpmdW5jdGlvbihlKXtpZih0aGlzLmVuYWJsZWQhPT0hMSlyZXR1cm4gdGhpcy5maWxlc1tlXX0scmVtb3ZlOmZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmZpbGVzW2VdfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxFNj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9dGhpcyxvPSExLGE9MCxzPTAsbCxjPVtdO3RoaXMub25TdGFydD12b2lkIDAsdGhpcy5vbkxvYWQ9dCx0aGlzLm9uUHJvZ3Jlc3M9cix0aGlzLm9uRXJyb3I9bix0aGlzLml0ZW1TdGFydD1mdW5jdGlvbih1KXtzKyssbz09PSExJiZpLm9uU3RhcnQhPT12b2lkIDAmJmkub25TdGFydCh1LGEscyksbz0hMH0sdGhpcy5pdGVtRW5kPWZ1bmN0aW9uKHUpe2ErKyxpLm9uUHJvZ3Jlc3MhPT12b2lkIDAmJmkub25Qcm9ncmVzcyh1LGEscyksYT09PXMmJihvPSExLGkub25Mb2FkIT09dm9pZCAwJiZpLm9uTG9hZCgpKX0sdGhpcy5pdGVtRXJyb3I9ZnVuY3Rpb24odSl7aS5vbkVycm9yIT09dm9pZCAwJiZpLm9uRXJyb3IodSl9LHRoaXMucmVzb2x2ZVVSTD1mdW5jdGlvbih1KXtyZXR1cm4gbD9sKHUpOnV9LHRoaXMuc2V0VVJMTW9kaWZpZXI9ZnVuY3Rpb24odSl7cmV0dXJuIGw9dSx0aGlzfSx0aGlzLmFkZEhhbmRsZXI9ZnVuY3Rpb24odSxoKXtyZXR1cm4gYy5wdXNoKHUsaCksdGhpc30sdGhpcy5yZW1vdmVIYW5kbGVyPWZ1bmN0aW9uKHUpe2xldCBoPWMuaW5kZXhPZih1KTtyZXR1cm4gaCE9PS0xJiZjLnNwbGljZShoLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKz0yKXtsZXQgcD1jW2hdLGQ9Y1toKzFdO2lmKHAuZ2xvYmFsJiYocC5sYXN0SW5kZXg9MCkscC50ZXN0KHUpKXJldHVybiBkfXJldHVybiBudWxsfX19LHRwZT1uZXcgRTYsZWE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tYW5hZ2VyPXQhPT12b2lkIDA/dDp0cGUsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQscil7bGV0IG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLmxvYWQodCxpLHIsbyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sWWQ9e30sSmM9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXR4LmdldCh0KTtpZihvIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntyJiZyKG8pLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxvO2lmKFlkW3RdIT09dm9pZCAwKXtZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7cmV0dXJufVlkW3RdPVtdLFlkW3RdLnB1c2goe29uTG9hZDpyLG9uUHJvZ3Jlc3M6bixvbkVycm9yOml9KTtsZXQgYT1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxzPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChhKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PVlkW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxwPWY/cGFyc2VJbnQoZik6MCxkPXAhPT0wLGc9MCxfPW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoeSl7eCgpO2Z1bmN0aW9uIHgoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOlN9KT0+e2lmKGIpeS5jbG9zZSgpO2Vsc2V7Zys9Uy5ieXRlTGVuZ3RoO2xldCBDPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6ZCxsb2FkZWQ6Zyx0b3RhbDpwfSk7Zm9yKGxldCBQPTAsaz11Lmxlbmd0aDtQPGs7UCsrKXtsZXQgTz11W1BdO08ub25Qcm9ncmVzcyYmTy5vblByb2dyZXNzKEMpfXkuZW5xdWV1ZShTKSx4KCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2UoXyl9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LHMpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHM9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMocyksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAscD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGQ9PnAuZGVjb2RlKGQpKX19fSkudGhlbihjPT57dHguYWRkKHQsYyk7bGV0IHU9WWRbdF07ZGVsZXRlIFlkW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9dVtoXTtwLm9uTG9hZCYmcC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVlkW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkVycm9yJiZwLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sb2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKHRoaXMubWFuYWdlcik7YS5zZXRQYXRoKHRoaXMucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1RMS5wYXJzZSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIHJ9fSxhaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1bXSxzPW5ldyBhNixsPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2wuc2V0UGF0aCh0aGlzLnBhdGgpLGwuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGwuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGwuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKTtsZXQgYz0wO2Z1bmN0aW9uIHUoaCl7bC5sb2FkKHRbaF0sZnVuY3Rpb24oZil7bGV0IHA9by5wYXJzZShmLCEwKTthW2hdPXt3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxmb3JtYXQ6cC5mb3JtYXQsbWlwbWFwczpwLm1pcG1hcHN9LGMrPTEsYz09PTYmJihwLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPWlpKSxzLmltYWdlPWEscy5mb3JtYXQ9cC5mb3JtYXQscy5uZWVkc1VwZGF0ZT0hMCxyJiZyKHMpKX0sbixpKX1pZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgaD0wLGY9dC5sZW5ndGg7aDxmOysraCl1KGgpO2Vsc2UgbC5sb2FkKHQsZnVuY3Rpb24oaCl7bGV0IGY9by5wYXJzZShoLCEwKTtpZihmLmlzQ3ViZW1hcCl7bGV0IHA9Zi5taXBtYXBzLmxlbmd0aC9mLm1pcG1hcENvdW50O2ZvcihsZXQgZD0wO2Q8cDtkKyspe2FbZF09e21pcG1hcHM6W119O2ZvcihsZXQgZz0wO2c8Zi5taXBtYXBDb3VudDtnKyspYVtkXS5taXBtYXBzLnB1c2goZi5taXBtYXBzW2QqZi5taXBtYXBDb3VudCtnXSksYVtkXS5mb3JtYXQ9Zi5mb3JtYXQsYVtkXS53aWR0aD1mLndpZHRoLGFbZF0uaGVpZ2h0PWYuaGVpZ2h0fXMuaW1hZ2U9YX1lbHNlIHMuaW1hZ2Uud2lkdGg9Zi53aWR0aCxzLmltYWdlLmhlaWdodD1mLmhlaWdodCxzLm1pcG1hcHM9Zi5taXBtYXBzO2YubWlwbWFwQ291bnQ9PT0xJiYocy5taW5GaWx0ZXI9aWkpLHMuZm9ybWF0PWYuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKX0sbixpKTtyZXR1cm4gc319LGV4PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBvPXRoaXMsYT10eC5nZXQodCk7aWYoYSE9PXZvaWQgMClyZXR1cm4gby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ciYmcihhKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksYTtsZXQgcz10NigiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSx0eC5hZGQodCx0aGlzKSxyJiZyKHRoaXMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLGkmJmkoaCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKHMuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbiksby5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzLnNyYz10LHN9fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IEgwLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7YS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxhLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgcz0wO2Z1bmN0aW9uIGwoYyl7YS5sb2FkKHRbY10sZnVuY3Rpb24odSl7by5pbWFnZXNbY109dSxzKysscz09PTYmJihvLm5lZWRzVXBkYXRlPSEwLHImJnIobykpfSx2b2lkIDAsaSl9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gb319LENVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpkLHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cmV0dXJuIHMuc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0V2l0aENyZWRlbnRpYWxzKG8ud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1vLnBhcnNlKGwpOyFjfHwoYy5pbWFnZSE9PXZvaWQgMD9hLmltYWdlPWMuaW1hZ2U6Yy5kYXRhIT09dm9pZCAwJiYoYS5pbWFnZS53aWR0aD1jLndpZHRoLGEuaW1hZ2UuaGVpZ2h0PWMuaGVpZ2h0LGEuaW1hZ2UuZGF0YT1jLmRhdGEpLGEud3JhcFM9Yy53cmFwUyE9PXZvaWQgMD9jLndyYXBTOkpvLGEud3JhcFQ9Yy53cmFwVCE9PXZvaWQgMD9jLndyYXBUOkpvLGEubWFnRmlsdGVyPWMubWFnRmlsdGVyIT09dm9pZCAwP2MubWFnRmlsdGVyOmlpLGEubWluRmlsdGVyPWMubWluRmlsdGVyIT09dm9pZCAwP2MubWluRmlsdGVyOmlpLGEuYW5pc290cm9weT1jLmFuaXNvdHJvcHkhPT12b2lkIDA/Yy5hbmlzb3Ryb3B5OjEsYy5lbmNvZGluZyE9PXZvaWQgMCYmKGEuZW5jb2Rpbmc9Yy5lbmNvZGluZyksYy5mbGlwWSE9PXZvaWQgMCYmKGEuZmxpcFk9Yy5mbGlwWSksYy5mb3JtYXQhPT12b2lkIDAmJihhLmZvcm1hdD1jLmZvcm1hdCksYy50eXBlIT09dm9pZCAwJiYoYS50eXBlPWMudHlwZSksYy5taXBtYXBzIT09dm9pZCAwJiYoYS5taXBtYXBzPWMubWlwbWFwcyxhLm1pbkZpbHRlcj1veCksYy5taXBtYXBDb3VudD09PTEmJihhLm1pbkZpbHRlcj1paSksYy5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDAmJihhLmdlbmVyYXRlTWlwbWFwcz1jLmdlbmVyYXRlTWlwbWFwcyksYS5uZWVkc1VwZGF0ZT0hMCxyJiZyKGEsYykpfSxuLGkpLGF9fSxBVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89bmV3IHZpLGE9bmV3IGV4KHRoaXMubWFuYWdlcik7cmV0dXJuIGEuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCksYS5sb2FkKHQsZnVuY3Rpb24ocyl7by5pbWFnZT1zLG8ubmVlZHNVcGRhdGU9ITAsciE9PXZvaWQgMCYmcihvKX0sbixpKSxvfX0sT2w9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLmludGVuc2l0eT1yfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLHIub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoci5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKHIub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihyLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoci5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKHIub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoci5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxyfX07T2wucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFQ2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQsbiksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgbmUocil9Y29weSh0KXtyZXR1cm4gT2wucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VDYucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBnaGU9bmV3IE1lLF9oZT1uZXcgaix5aGU9bmV3IGosQzY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEx0KDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1lLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IE4xLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgTHQoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgZW4oMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IHI9dGhpcy5jYW1lcmEsbj10aGlzLm1hdHJpeDtfaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLHIucG9zaXRpb24uY29weShfaGUpLHloZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLHIubG9va0F0KHloZSksci51cGRhdGVNYXRyaXhXb3JsZCgpLGdoZS5tdWx0aXBseU1hdHJpY2VzKHIucHJvamVjdGlvbk1hdHJpeCxyLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChnaGUpLG4uc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLG4ubXVsdGlwbHkoci5wcm9qZWN0aW9uTWF0cml4KSxuLm11bHRpcGx5KHIubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXt9O3JldHVybiB0aGlzLmJpYXMhPT0wJiYodC5iaWFzPXRoaXMuYmlhcyksdGhpcy5ub3JtYWxCaWFzIT09MCYmKHQubm9ybWFsQmlhcz10aGlzLm5vcm1hbEJpYXMpLHRoaXMucmFkaXVzIT09MSYmKHQucmFkaXVzPXRoaXMucmFkaXVzKSwodGhpcy5tYXBTaXplLnghPT01MTJ8fHRoaXMubWFwU2l6ZS55IT09NTEyKSYmKHQubWFwU2l6ZT10aGlzLm1hcFNpemUudG9BcnJheSgpKSx0LmNhbWVyYT10aGlzLmNhbWVyYS50b0pTT04oITEpLm9iamVjdCxkZWxldGUgdC5jYW1lcmEubWF0cml4LHR9fSxQVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDUwLDEsLjUsNTAwKSksdGhpcy5mb2N1cz0xfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49UVAqMip0LmFuZ2xlKnRoaXMuZm9jdXMsaT10aGlzLm1hcFNpemUud2lkdGgvdGhpcy5tYXBTaXplLmhlaWdodCxvPXQuZGlzdGFuY2V8fHIuZmFyOyhuIT09ci5mb3Z8fGkhPT1yLmFzcGVjdHx8byE9PXIuZmFyKSYmKHIuZm92PW4sci5hc3BlY3Q9aSxyLmZhcj1vLHIudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxzdXBlci51cGRhdGVNYXRyaWNlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzfX07UFUucHJvdG90eXBlLmlzU3BvdExpZ2h0U2hhZG93PSEwO3ZhciBBNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT1NYXRoLlBJLzMsbz0wLGE9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5kaXN0YW5jZT1uLHRoaXMuYW5nbGU9aSx0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1hLHRoaXMuc2hhZG93PW5ldyBQVX1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtBNi5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIHZoZT1uZXcgTWUsQlA9bmV3IGoseHV0PW5ldyBqLElVPWNsYXNzIGV4dGVuZHMgQzZ7Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWkoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDIsMSwxLDEpLG5ldyBlbigwLDEsMSwxKSxuZXcgZW4oMywxLDEsMSksbmV3IGVuKDEsMSwxLDEpLG5ldyBlbigzLDAsMSwxKSxuZXcgZW4oMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgaigxLDAsMCksbmV3IGooLTEsMCwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKSxuZXcgaigwLDEsMCksbmV3IGooMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMCwxKSxuZXcgaigwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LHI9MCl7bGV0IG49dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fG4uZmFyO28hPT1uLmZhciYmKG4uZmFyPW8sbi51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLEJQLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxuLnBvc2l0aW9uLmNvcHkoQlApLHh1dC5jb3B5KG4ucG9zaXRpb24pLHh1dC5hZGQodGhpcy5fY3ViZURpcmVjdGlvbnNbcl0pLG4udXAuY29weSh0aGlzLl9jdWJlVXBzW3JdKSxuLmxvb2tBdCh4dXQpLG4udXBkYXRlTWF0cml4V29ybGQoKSxpLm1ha2VUcmFuc2xhdGlvbigtQlAueCwtQlAueSwtQlAueiksdmhlLm11bHRpcGx5TWF0cmljZXMobi5wcm9qZWN0aW9uTWF0cml4LG4ubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHZoZSl9fTtJVS5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuPTAsaT0xKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1uLHRoaXMuZGVjYXk9aSx0aGlzLnNoYWRvdz1uZXcgSVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KjQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIEM2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IEQxKC01LDUsNSwtNSwuNSw1MDApKX19O0xVLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITA7dmFyIEk2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iRGlyZWN0aW9uYWxMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KG9yLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgb3IsdGhpcy5zaGFkb3c9bmV3IExVfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnRhcmdldD10LnRhcmdldC5jbG9uZSgpLHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0k2LnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19O0w2LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMDt2YXIgazY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0xMCxpPTEwKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWl9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsci5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LHJ9fTtrNi5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBSNj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgail9c2V0KHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspdGhpcy5jb2VmZmljaWVudHNbcl0uY29weSh0W3JdKTtyZXR1cm4gdGhpc316ZXJvKCl7Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50c1t0XS5zZXQoMCwwLDApO3JldHVybiB0aGlzfWdldEF0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56LGE9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIHIuY29weShhWzBdKS5tdWx0aXBseVNjYWxhciguMjgyMDk1KSxyLmFkZFNjYWxlZFZlY3RvcihhWzFdLC40ODg2MDMqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwuNDg4NjAzKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sLjQ4ODYwMypuKSxyLmFkZFNjYWxlZFZlY3RvcihhWzRdLDEuMDkyNTQ4KihuKmkpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDEuMDkyNTQ4KihpKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxyLmFkZFNjYWxlZFZlY3RvcihhWzddLDEuMDkyNTQ4KihuKm8pKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC41NDYyNzQqKG4qbi1pKmkpKSxyfWdldElycmFkaWFuY2VBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjg4NjIyNyksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwyKi41MTE2NjQqaSksci5hZGRTY2FsZWRWZWN0b3IoYVsyXSwyKi41MTE2NjQqbyksci5hZGRTY2FsZWRWZWN0b3IoYVszXSwyKi41MTE2NjQqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwyKi40MjkwNDMqbippKSxyLmFkZFNjYWxlZFZlY3RvcihhWzVdLDIqLjQyOTA0MyppKm8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwyKi40MjkwNDMqbipvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzhdLC40MjkwNDMqKG4qbi1pKmkpKSxyfWFkZCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmFkZCh0LmNvZWZmaWNpZW50c1tyXSk7cmV0dXJuIHRoaXN9YWRkU2NhbGVkU0godCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmFkZFNjYWxlZFZlY3Rvcih0LmNvZWZmaWNpZW50c1tuXSxyKTtyZXR1cm4gdGhpc31zY2FsZSh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLm11bHRpcGx5U2NhbGFyKHQpO3JldHVybiB0aGlzfWxlcnAodCxyKXtmb3IobGV0IG49MDtuPDk7bisrKXRoaXMuY29lZmZpY2llbnRzW25dLmxlcnAodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9ZXF1YWxzKHQpe2ZvcihsZXQgcj0wO3I8OTtyKyspaWYoIXRoaXMuY29lZmZpY2llbnRzW3JdLmVxdWFscyh0LmNvZWZmaWNpZW50c1tyXSkpcmV0dXJuITE7cmV0dXJuITB9Y29weSh0KXtyZXR1cm4gdGhpcy5zZXQodC5jb2VmZmljaWVudHMpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1mcm9tQXJyYXkodCxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS5mcm9tQXJyYXkodCxyK2kqMyk7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7bGV0IG49dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCBpPTA7aTw5O2krKyluW2ldLnRvQXJyYXkodCxyK2kqMyk7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10Lno7clswXT0uMjgyMDk1LHJbMV09LjQ4ODYwMyppLHJbMl09LjQ4ODYwMypvLHJbM109LjQ4ODYwMypuLHJbNF09MS4wOTI1NDgqbippLHJbNV09MS4wOTI1NDgqaSpvLHJbNl09LjMxNTM5MiooMypvKm8tMSkscls3XT0xLjA5MjU0OCpuKm8scls4XT0uNTQ2Mjc0KihuKm4taSppKX19O1I2LnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIHJ4PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodD1uZXcgUjYscj0xKXtzdXBlcih2b2lkIDAsciksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCkscn19O3J4LnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50ZXh0dXJlcz17fX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9dGhpcy50ZXh0dXJlcztmdW5jdGlvbiBuKG8pe3JldHVybiByW29dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsTG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsbykscltvXX1sZXQgaT1uZXcgbzByW3QudHlwZV07aWYodC51dWlkIT09dm9pZCAwJiYoaS51dWlkPXQudXVpZCksdC5uYW1lIT09dm9pZCAwJiYoaS5uYW1lPXQubmFtZSksdC5jb2xvciE9PXZvaWQgMCYmaS5jb2xvciE9PXZvaWQgMCYmaS5jb2xvci5zZXRIZXgodC5jb2xvciksdC5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10LnJvdWdobmVzcyksdC5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyksdC5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dC5zaGVlbiksdC5zaGVlbkNvbG9yIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yPW5ldyBuZSgpLnNldEhleCh0LnNoZWVuQ29sb3IpKSx0LnNoZWVuUm91Z2huZXNzIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzKSx0LmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlIT09dm9pZCAwJiZpLmVtaXNzaXZlLnNldEhleCh0LmVtaXNzaXZlKSx0LnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyIT09dm9pZCAwJiZpLnNwZWN1bGFyLnNldEhleCh0LnNwZWN1bGFyKSx0LnNwZWN1bGFySW50ZW5zaXR5IT09dm9pZCAwJiYoaS5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5KSx0LnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvciE9PXZvaWQgMCYmaS5zcGVjdWxhckNvbG9yLnNldEhleCh0LnNwZWN1bGFyQ29sb3IpLHQuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dC5zaGluaW5lc3MpLHQuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQpLHQuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MpLHQudHJhbnNtaXNzaW9uIT09dm9pZCAwJiYoaS50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24pLHQudGhpY2tuZXNzIT09dm9pZCAwJiYoaS50aGlja25lc3M9dC50aGlja25lc3MpLHQuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UpLHQuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yIT09dm9pZCAwJiZpLmF0dGVudWF0aW9uQ29sb3Iuc2V0SGV4KHQuYXR0ZW51YXRpb25Db2xvciksdC5mb2chPT12b2lkIDAmJihpLmZvZz10LmZvZyksdC5mbGF0U2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyksdC5ibGVuZGluZyE9PXZvaWQgMCYmKGkuYmxlbmRpbmc9dC5ibGVuZGluZyksdC5jb21iaW5lIT09dm9pZCAwJiYoaS5jb21iaW5lPXQuY29tYmluZSksdC5zaWRlIT09dm9pZCAwJiYoaS5zaWRlPXQuc2lkZSksdC5zaGFkb3dTaWRlIT09dm9pZCAwJiYoaS5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSksdC5vcGFjaXR5IT09dm9pZCAwJiYoaS5vcGFjaXR5PXQub3BhY2l0eSksdC50cmFuc3BhcmVudCE9PXZvaWQgMCYmKGkudHJhbnNwYXJlbnQ9dC50cmFuc3BhcmVudCksdC5hbHBoYVRlc3QhPT12b2lkIDAmJihpLmFscGhhVGVzdD10LmFscGhhVGVzdCksdC5kZXB0aFRlc3QhPT12b2lkIDAmJihpLmRlcHRoVGVzdD10LmRlcHRoVGVzdCksdC5kZXB0aFdyaXRlIT09dm9pZCAwJiYoaS5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSksdC5jb2xvcldyaXRlIT09dm9pZCAwJiYoaS5jb2xvcldyaXRlPXQuY29sb3JXcml0ZSksdC5hbHBoYVdyaXRlIT09dm9pZCAwJiYoaS5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSksdC5zdGVuY2lsV3JpdGUhPT12b2lkIDAmJihpLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZSksdC5zdGVuY2lsV3JpdGVNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGVNYXNrPXQuc3RlbmNpbFdyaXRlTWFzayksdC5zdGVuY2lsRnVuYyE9PXZvaWQgMCYmKGkuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyksdC5zdGVuY2lsUmVmIT09dm9pZCAwJiYoaS5zdGVuY2lsUmVmPXQuc3RlbmNpbFJlZiksdC5zdGVuY2lsRnVuY01hc2shPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jTWFzaz10LnN0ZW5jaWxGdW5jTWFzayksdC5zdGVuY2lsRmFpbCE9PXZvaWQgMCYmKGkuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCksdC5zdGVuY2lsWkZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCksdC5zdGVuY2lsWlBhc3MhPT12b2lkIDAmJihpLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyksdC53aXJlZnJhbWUhPT12b2lkIDAmJihpLndpcmVmcmFtZT10LndpcmVmcmFtZSksdC53aXJlZnJhbWVMaW5ld2lkdGghPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCksdC53aXJlZnJhbWVMaW5lY2FwIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCksdC53aXJlZnJhbWVMaW5lam9pbiE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbiksdC5yb3RhdGlvbiE9PXZvaWQgMCYmKGkucm90YXRpb249dC5yb3RhdGlvbiksdC5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dC5saW5ld2lkdGgpLHQuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXQuZGFzaFNpemUpLHQuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10LmdhcFNpemUpLHQuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXQuc2NhbGUpLHQucG9seWdvbk9mZnNldCE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldD10LnBvbHlnb25PZmZzZXQpLHQucG9seWdvbk9mZnNldEZhY3RvciE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IpLHQucG9seWdvbk9mZnNldFVuaXRzIT09dm9pZCAwJiYoaS5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMpLHQuZGl0aGVyaW5nIT09dm9pZCAwJiYoaS5kaXRoZXJpbmc9dC5kaXRoZXJpbmcpLHQuYWxwaGFUb0NvdmVyYWdlIT09dm9pZCAwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UpLHQucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEpLHQudmlzaWJsZSE9PXZvaWQgMCYmKGkudmlzaWJsZT10LnZpc2libGUpLHQudG9uZU1hcHBlZCE9PXZvaWQgMCYmKGkudG9uZU1hcHBlZD10LnRvbmVNYXBwZWQpLHQudXNlckRhdGEhPT12b2lkIDAmJihpLnVzZXJEYXRhPXQudXNlckRhdGEpLHQudmVydGV4Q29sb3JzIT09dm9pZCAwJiYodHlwZW9mIHQudmVydGV4Q29sb3JzPT0ibnVtYmVyIj9pLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycz4wOmkudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzKSx0LnVuaWZvcm1zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LnVuaWZvcm1zKXtsZXQgYT10LnVuaWZvcm1zW29dO3N3aXRjaChpLnVuaWZvcm1zW29dPXt9LGEudHlwZSl7Y2FzZSJ0IjppLnVuaWZvcm1zW29dLnZhbHVlPW4oYS52YWx1ZSk7YnJlYWs7Y2FzZSJjIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBuZSgpLnNldEhleChhLnZhbHVlKTticmVhaztjYXNlInYyIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBMdCgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInYzIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBqKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UidjQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGVuKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTMiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IGtpKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2Nhc2UibTQiOmkudW5pZm9ybXNbb10udmFsdWU9bmV3IE1lKCkuZnJvbUFycmF5KGEudmFsdWUpO2JyZWFrO2RlZmF1bHQ6aS51bmlmb3Jtc1tvXS52YWx1ZT1hLnZhbHVlfX1pZih0LmRlZmluZXMhPT12b2lkIDAmJihpLmRlZmluZXM9dC5kZWZpbmVzKSx0LnZlcnRleFNoYWRlciE9PXZvaWQgMCYmKGkudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyKSx0LmZyYWdtZW50U2hhZGVyIT09dm9pZCAwJiYoaS5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyKSx0LmV4dGVuc2lvbnMhPT12b2lkIDApZm9yKGxldCBvIGluIHQuZXh0ZW5zaW9ucylpLmV4dGVuc2lvbnNbb109dC5leHRlbnNpb25zW29dO2lmKHQuc2hhZGluZyE9PXZvaWQgMCYmKGkuZmxhdFNoYWRpbmc9dC5zaGFkaW5nPT09MSksdC5zaXplIT09dm9pZCAwJiYoaS5zaXplPXQuc2l6ZSksdC5zaXplQXR0ZW51YXRpb24hPT12b2lkIDAmJihpLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbiksdC5tYXAhPT12b2lkIDAmJihpLm1hcD1uKHQubWFwKSksdC5tYXRjYXAhPT12b2lkIDAmJihpLm1hdGNhcD1uKHQubWF0Y2FwKSksdC5hbHBoYU1hcCE9PXZvaWQgMCYmKGkuYWxwaGFNYXA9bih0LmFscGhhTWFwKSksdC5idW1wTWFwIT09dm9pZCAwJiYoaS5idW1wTWFwPW4odC5idW1wTWFwKSksdC5idW1wU2NhbGUhPT12b2lkIDAmJihpLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSksdC5ub3JtYWxNYXAhPT12b2lkIDAmJihpLm5vcm1hbE1hcD1uKHQubm9ybWFsTWFwKSksdC5ub3JtYWxNYXBUeXBlIT09dm9pZCAwJiYoaS5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSksdC5ub3JtYWxTY2FsZSE9PXZvaWQgMCl7bGV0IG89dC5ub3JtYWxTY2FsZTtBcnJheS5pc0FycmF5KG8pPT09ITEmJihvPVtvLG9dKSxpLm5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheShvKX1yZXR1cm4gdC5kaXNwbGFjZW1lbnRNYXAhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudE1hcD1uKHQuZGlzcGxhY2VtZW50TWFwKSksdC5kaXNwbGFjZW1lbnRTY2FsZSE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSksdC5kaXNwbGFjZW1lbnRCaWFzIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50QmlhcyksdC5yb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLnJvdWdobmVzc01hcD1uKHQucm91Z2huZXNzTWFwKSksdC5tZXRhbG5lc3NNYXAhPT12b2lkIDAmJihpLm1ldGFsbmVzc01hcD1uKHQubWV0YWxuZXNzTWFwKSksdC5lbWlzc2l2ZU1hcCE9PXZvaWQgMCYmKGkuZW1pc3NpdmVNYXA9bih0LmVtaXNzaXZlTWFwKSksdC5lbWlzc2l2ZUludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSksdC5zcGVjdWxhck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJNYXA9bih0LnNwZWN1bGFyTWFwKSksdC5zcGVjdWxhckludGVuc2l0eU1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bih0LnNwZWN1bGFySW50ZW5zaXR5TWFwKSksdC5zcGVjdWxhckNvbG9yTWFwIT09dm9pZCAwJiYoaS5zcGVjdWxhckNvbG9yTWFwPW4odC5zcGVjdWxhckNvbG9yTWFwKSksdC5lbnZNYXAhPT12b2lkIDAmJihpLmVudk1hcD1uKHQuZW52TWFwKSksdC5lbnZNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVudk1hcEludGVuc2l0eT10LmVudk1hcEludGVuc2l0eSksdC5yZWZsZWN0aXZpdHkhPT12b2lkIDAmJihpLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSksdC5yZWZyYWN0aW9uUmF0aW8hPT12b2lkIDAmJihpLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyksdC5saWdodE1hcCE9PXZvaWQgMCYmKGkubGlnaHRNYXA9bih0LmxpZ2h0TWFwKSksdC5saWdodE1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSksdC5hb01hcCE9PXZvaWQgMCYmKGkuYW9NYXA9bih0LmFvTWFwKSksdC5hb01hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSksdC5ncmFkaWVudE1hcCE9PXZvaWQgMCYmKGkuZ3JhZGllbnRNYXA9bih0LmdyYWRpZW50TWFwKSksdC5jbGVhcmNvYXRNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE1hcD1uKHQuY2xlYXJjb2F0TWFwKSksdC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdFJvdWdobmVzc01hcD1uKHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwKSksdC5jbGVhcmNvYXROb3JtYWxNYXAhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbE1hcD1uKHQuY2xlYXJjb2F0Tm9ybWFsTWFwKSksdC5jbGVhcmNvYXROb3JtYWxTY2FsZSE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IEx0KCkuZnJvbUFycmF5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpKSx0LnRyYW5zbWlzc2lvbk1hcCE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uTWFwPW4odC50cmFuc21pc3Npb25NYXApKSx0LnRoaWNrbmVzc01hcCE9PXZvaWQgMCYmKGkudGhpY2tuZXNzTWFwPW4odC50aGlja25lc3NNYXApKSx0LnNoZWVuQ29sb3JNYXAhPT12b2lkIDAmJihpLnNoZWVuQ29sb3JNYXA9bih0LnNoZWVuQ29sb3JNYXApKSx0LnNoZWVuUm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5zaGVlblJvdWdobmVzc01hcD1uKHQuc2hlZW5Sb3VnaG5lc3NNYXApKSxpfXNldFRleHR1cmVzKHQpe3JldHVybiB0aGlzLnRleHR1cmVzPXQsdGhpc319LGRNPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9InVuZGVmaW5lZCIpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KTtsZXQgcj0iIjtmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspcis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W25dKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUocikpfWNhdGNoKG4pe3JldHVybiByfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IHI9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybiByPT09LTE/Ii4vIjp0LnN1YnN0cigwLHIrMSl9c3RhdGljIHJlc29sdmVVUkwodCxyKXtyZXR1cm4gdHlwZW9mIHQhPSJzdHJpbmcifHx0PT09IiI/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KHIpJiYvXlwvLy50ZXN0KHQpJiYocj1yLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OnIrdCl9fSxONj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluc3RhbmNlQ291bnQ9MS8wfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5pbnN0YW5jZUNvdW50PXQuaW5zdGFuY2VDb3VudCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fTtONi5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMDt2YXIgUlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmMoby5tYW5hZ2VyKTthLnNldFBhdGgoby5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIoby5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e3Ioby5wYXJzZShKU09OLnBhcnNlKHMpKSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9cGFyc2UodCl7bGV0IHI9e30sbj17fTtmdW5jdGlvbiBpKHAsZCl7aWYocltkXSE9PXZvaWQgMClyZXR1cm4gcltkXTtsZXQgXz1wLmludGVybGVhdmVkQnVmZmVyc1tkXSx5PW8ocCxfLmJ1ZmZlcikseD1CMyhfLnR5cGUseSksYj1uZXcgZW0oeCxfLnN0cmlkZSk7cmV0dXJuIGIudXVpZD1fLnV1aWQscltkXT1iLGJ9ZnVuY3Rpb24gbyhwLGQpe2lmKG5bZF0hPT12b2lkIDApcmV0dXJuIG5bZF07bGV0IF89cC5hcnJheUJ1ZmZlcnNbZF0seT1uZXcgVWludDMyQXJyYXkoXykuYnVmZmVyO3JldHVybiBuW2RdPXkseX1sZXQgYT10LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk/bmV3IE42Om5ldyBQZSxzPXQuZGF0YS5pbmRleDtpZihzIT09dm9pZCAwKXtsZXQgcD1CMyhzLnR5cGUscy5hcnJheSk7YS5zZXRJbmRleChuZXcgSmUocCwxKSl9bGV0IGw9dC5kYXRhLmF0dHJpYnV0ZXM7Zm9yKGxldCBwIGluIGwpe2xldCBkPWxbcF0sZztpZihkLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBfPWkodC5kYXRhLGQuZGF0YSk7Zz1uZXcgdHAoXyxkLml0ZW1TaXplLGQub2Zmc2V0LGQubm9ybWFsaXplZCl9ZWxzZXtsZXQgXz1CMyhkLnR5cGUsZC5hcnJheSkseT1kLmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlP3JtOkplO2c9bmV3IHkoXyxkLml0ZW1TaXplLGQubm9ybWFsaXplZCl9ZC5uYW1lIT09dm9pZCAwJiYoZy5uYW1lPWQubmFtZSksZC51c2FnZSE9PXZvaWQgMCYmZy5zZXRVc2FnZShkLnVzYWdlKSxkLnVwZGF0ZVJhbmdlIT09dm9pZCAwJiYoZy51cGRhdGVSYW5nZS5vZmZzZXQ9ZC51cGRhdGVSYW5nZS5vZmZzZXQsZy51cGRhdGVSYW5nZS5jb3VudD1kLnVwZGF0ZVJhbmdlLmNvdW50KSxhLnNldEF0dHJpYnV0ZShwLGcpfWxldCBjPXQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM7aWYoYylmb3IobGV0IHAgaW4gYyl7bGV0IGQ9Y1twXSxnPVtdO2ZvcihsZXQgXz0wLHk9ZC5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9ZFtfXSxiO2lmKHguaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFM9aSh0LmRhdGEseC5kYXRhKTtiPW5ldyB0cChTLHguaXRlbVNpemUseC5vZmZzZXQseC5ub3JtYWxpemVkKX1lbHNle2xldCBTPUIzKHgudHlwZSx4LmFycmF5KTtiPW5ldyBKZShTLHguaXRlbVNpemUseC5ub3JtYWxpemVkKX14Lm5hbWUhPT12b2lkIDAmJihiLm5hbWU9eC5uYW1lKSxnLnB1c2goYil9YS5tb3JwaEF0dHJpYnV0ZXNbcF09Z310LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmUmJihhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSEwKTtsZXQgaD10LmRhdGEuZ3JvdXBzfHx0LmRhdGEuZHJhd2NhbGxzfHx0LmRhdGEub2Zmc2V0cztpZihoIT09dm9pZCAwKWZvcihsZXQgcD0wLGQ9aC5sZW5ndGg7cCE9PWQ7KytwKXtsZXQgZz1oW3BdO2EuYWRkR3JvdXAoZy5zdGFydCxnLmNvdW50LGcubWF0ZXJpYWxJbmRleCl9bGV0IGY9dC5kYXRhLmJvdW5kaW5nU3BoZXJlO2lmKGYhPT12b2lkIDApe2xldCBwPW5ldyBqO2YuY2VudGVyIT09dm9pZCAwJiZwLmZyb21BcnJheShmLmNlbnRlciksYS5ib3VuZGluZ1NwaGVyZT1uZXcgWmYocCxmLnJhZGl1cyl9cmV0dXJuIHQubmFtZSYmKGEubmFtZT10Lm5hbWUpLHQudXNlckRhdGEmJihhLnVzZXJEYXRhPXQudXNlckRhdGEpLGF9fSxzaHQ9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGE7bGV0IHM9bmV3IEpjKHRoaXMubWFuYWdlcik7cy5zZXRQYXRoKHRoaXMucGF0aCkscy5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlcikscy5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpLHMubG9hZCh0LGZ1bmN0aW9uKGwpe2xldCBjPW51bGw7dHJ5e2M9SlNPTi5wYXJzZShsKX1jYXRjaChoKXtpIT09dm9pZCAwJiZpKGgpLGNvbnNvbGUuZXJyb3IoIlRIUkVFOk9iamVjdExvYWRlcjogQ2FuJ3QgcGFyc2UgIit0KyIuIixoLm1lc3NhZ2UpO3JldHVybn1sZXQgdT1jLm1ldGFkYXRhO2lmKHU9PT12b2lkIDB8fHUudHlwZT09PXZvaWQgMHx8dS50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IENhbid0IGxvYWQgIit0KTtyZXR1cm59by5wYXJzZShjLHIpfSxuLGkpfWxvYWRBc3luYyh0LHIpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IG49dGhpcyxpPXRoaXMucGF0aD09PSIiP2RNLmV4dHJhY3RVcmxCYXNlKHQpOnRoaXMucGF0aDt0aGlzLnJlc291cmNlUGF0aD10aGlzLnJlc291cmNlUGF0aHx8aTtsZXQgbz1uZXcgSmModGhpcy5tYW5hZ2VyKTtvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyk7bGV0IGE9eWllbGQgby5sb2FkQXN5bmModCxyKSxzPUpTT04ucGFyc2UoYSksbD1zLm1ldGFkYXRhO2lmKGw9PT12b2lkIDB8fGwudHlwZT09PXZvaWQgMHx8bC50eXBlLnRvTG93ZXJDYXNlKCk9PT0iZ2VvbWV0cnkiKXRocm93IG5ldyBFcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJuIHlpZWxkIG4ucGFyc2VBc3luYyhzKX0pfXBhcnNlKHQscil7bGV0IG49dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxpPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLG89dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLGkpLGE9dGhpcy5wYXJzZUltYWdlcyh0LmltYWdlcyxmdW5jdGlvbigpe3IhPT12b2lkIDAmJnIoYyl9KSxzPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLGEpLGw9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxzKSxjPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsbyxsLHMsbiksdT10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGMpO2lmKHRoaXMuYmluZFNrZWxldG9ucyhjLHUpLHIhPT12b2lkIDApe2xldCBoPSExO2ZvcihsZXQgZiBpbiBhKWlmKGFbZl1pbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpe2g9ITA7YnJlYWt9aD09PSExJiZyKGMpfXJldHVybiBjfXBhcnNlQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLnBhcnNlQW5pbWF0aW9ucyh0LmFuaW1hdGlvbnMpLG49dGhpcy5wYXJzZVNoYXBlcyh0LnNoYXBlcyksaT10aGlzLnBhcnNlR2VvbWV0cmllcyh0Lmdlb21ldHJpZXMsbiksbz15aWVsZCB0aGlzLnBhcnNlSW1hZ2VzQXN5bmModC5pbWFnZXMpLGE9dGhpcy5wYXJzZVRleHR1cmVzKHQudGV4dHVyZXMsbykscz10aGlzLnBhcnNlTWF0ZXJpYWxzKHQubWF0ZXJpYWxzLGEpLGw9dGhpcy5wYXJzZU9iamVjdCh0Lm9iamVjdCxpLHMsYSxyKSxjPXRoaXMucGFyc2VTa2VsZXRvbnModC5za2VsZXRvbnMsbCk7cmV0dXJuIHRoaXMuYmluZFNrZWxldG9ucyhsLGMpLGx9KX1wYXJzZVNoYXBlcyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wLGk9dC5sZW5ndGg7bjxpO24rKyl7bGV0IG89bmV3IEtjKCkuZnJvbUpTT04odFtuXSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VTa2VsZXRvbnModCxyKXtsZXQgbj17fSxpPXt9O2lmKHIudHJhdmVyc2UoZnVuY3Rpb24obyl7by5pc0JvbmUmJihpW28udXVpZF09byl9KSx0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9bmV3IGxNKCkuZnJvbUpTT04odFtvXSxpKTtuW3MudXVpZF09c31yZXR1cm4gbn1wYXJzZUdlb21ldHJpZXModCxyKXtsZXQgbj17fTtpZih0IT09dm9pZCAwKXtsZXQgaT1uZXcgUlU7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKXtsZXQgcyxsPXRbb107c3dpdGNoKGwudHlwZSl7Y2FzZSJCdWZmZXJHZW9tZXRyeSI6Y2FzZSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSI6cz1pLnBhcnNlKGwpO2JyZWFrO2Nhc2UiR2VvbWV0cnkiOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogVGhlIGxlZ2FjeSBHZW9tZXRyeSB0eXBlIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7YnJlYWs7ZGVmYXVsdDpsLnR5cGUgaW4gbWhlP3M9bWhlW2wudHlwZV0uZnJvbUpTT04obCxyKTpjb25zb2xlLndhcm4oYFRIUkVFLk9iamVjdExvYWRlcjogVW5zdXBwb3J0ZWQgZ2VvbWV0cnkgdHlwZSAiJHtsLnR5cGV9ImApfXMudXVpZD1sLnV1aWQsbC5uYW1lIT09dm9pZCAwJiYocy5uYW1lPWwubmFtZSkscy5pc0J1ZmZlckdlb21ldHJ5PT09ITAmJmwudXNlckRhdGEhPT12b2lkIDAmJihzLnVzZXJEYXRhPWwudXNlckRhdGEpLG5bbC51dWlkXT1zfX1yZXR1cm4gbn1wYXJzZU1hdGVyaWFscyh0LHIpe2xldCBuPXt9LGk9e307aWYodCE9PXZvaWQgMCl7bGV0IG89bmV3IGtVO28uc2V0VGV4dHVyZXMocik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdO2lmKGwudHlwZT09PSJNdWx0aU1hdGVyaWFsIil7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxsLm1hdGVyaWFscy5sZW5ndGg7dSsrKXtsZXQgaD1sLm1hdGVyaWFsc1t1XTtuW2gudXVpZF09PT12b2lkIDAmJihuW2gudXVpZF09by5wYXJzZShoKSksYy5wdXNoKG5baC51dWlkXSl9aVtsLnV1aWRdPWN9ZWxzZSBuW2wudXVpZF09PT12b2lkIDAmJihuW2wudXVpZF09by5wYXJzZShsKSksaVtsLnV1aWRdPW5bbC51dWlkXX19cmV0dXJuIGl9cGFyc2VBbmltYXRpb25zKHQpe2xldCByPXt9O2lmKHQhPT12b2lkIDApZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCBpPXRbbl0sbz1RMS5wYXJzZShpKTtyW28udXVpZF09b31yZXR1cm4gcn1wYXJzZUltYWdlcyh0LHIpe2xldCBuPXRoaXMsaT17fSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIG4ubWFuYWdlci5pdGVtU3RhcnQobCksby5sb2FkKGwsZnVuY3Rpb24oKXtuLm1hbmFnZXIuaXRlbUVuZChsKX0sdm9pZCAwLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FcnJvcihsKSxuLm1hbmFnZXIuaXRlbUVuZChsKX0pfWZ1bmN0aW9uIHMobCl7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtsZXQgYz1sLHU9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3QoYyk/YzpuLnJlc291cmNlUGF0aCtjO3JldHVybiBhKHUpfWVsc2UgcmV0dXJuIGwuZGF0YT97ZGF0YTpCMyhsLnR5cGUsbC5kYXRhKSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH06bnVsbH1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtsZXQgbD1uZXcgRTYocik7bz1uZXcgZXgobCksby5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtmb3IobGV0IGM9MCx1PXQubGVuZ3RoO2M8dTtjKyspe2xldCBoPXRbY10sZj1oLnVybDtpZihBcnJheS5pc0FycmF5KGYpKXtpW2gudXVpZF09W107Zm9yKGxldCBwPTAsZD1mLmxlbmd0aDtwPGQ7cCsrKXtsZXQgZz1mW3BdLF89cyhnKTtfIT09bnVsbCYmKF8gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2lbaC51dWlkXS5wdXNoKF8pOmlbaC51dWlkXS5wdXNoKG5ldyBKZChfLmRhdGEsXy53aWR0aCxfLmhlaWdodCkpKX19ZWxzZXtsZXQgcD1zKGgudXJsKTtwIT09bnVsbCYmKGlbaC51dWlkXT1wKX19fXJldHVybiBpfXBhcnNlSW1hZ2VzQXN5bmModCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgcj10aGlzLG49e30saTtmdW5jdGlvbiBvKGEpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXtsZXQgcz1hLGw9L14oXC9cLyl8KFthLXpdKzooXC9cLyk/KS9pLnRlc3Qocyk/czpyLnJlc291cmNlUGF0aCtzO3JldHVybiB5aWVsZCBpLmxvYWRBc3luYyhsKX1lbHNlIHJldHVybiBhLmRhdGE/e2RhdGE6QjMoYS50eXBlLGEuZGF0YSksd2lkdGg6YS53aWR0aCxoZWlnaHQ6YS5oZWlnaHR9Om51bGx9KX1pZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wKXtpPW5ldyBleCh0aGlzLm1hbmFnZXIpLGkuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBhPTAscz10Lmxlbmd0aDthPHM7YSsrKXtsZXQgbD10W2FdLGM9bC51cmw7aWYoQXJyYXkuaXNBcnJheShjKSl7bltsLnV1aWRdPVtdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXlpZWxkIG8oZik7cCE9PW51bGwmJihwIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9uW2wudXVpZF0ucHVzaChwKTpuW2wudXVpZF0ucHVzaChuZXcgSmQocC5kYXRhLHAud2lkdGgscC5oZWlnaHQpKSl9fWVsc2V7bGV0IHU9eWllbGQgbyhsLnVybCk7dSE9PW51bGwmJihuW2wudXVpZF09dSl9fX1yZXR1cm4gbn0pfXBhcnNlVGV4dHVyZXModCxyKXtmdW5jdGlvbiBuKG8sYSl7cmV0dXJuIHR5cGVvZiBvPT0ibnVtYmVyIj9vOihjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlci5wYXJzZVRleHR1cmU6IENvbnN0YW50IHNob3VsZCBiZSBpbiBudW1lcmljIGZvcm0uIixvKSxhW29dKX1sZXQgaT17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHM9dFtvXTtzLmltYWdlPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9iamVjdExvYWRlcjogTm8gImltYWdlIiBzcGVjaWZpZWQgZm9yJyxzLnV1aWQpLHJbcy5pbWFnZV09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgaW1hZ2UiLHMuaW1hZ2UpO2xldCBsLGM9cltzLmltYWdlXTtBcnJheS5pc0FycmF5KGMpPyhsPW5ldyBIMChjKSxjLmxlbmd0aD09PTYmJihsLm5lZWRzVXBkYXRlPSEwKSk6KGMmJmMuZGF0YT9sPW5ldyBKZChjLmRhdGEsYy53aWR0aCxjLmhlaWdodCk6bD1uZXcgdmkoYyksYyYmKGwubmVlZHNVcGRhdGU9ITApKSxsLnV1aWQ9cy51dWlkLHMubmFtZSE9PXZvaWQgMCYmKGwubmFtZT1zLm5hbWUpLHMubWFwcGluZyE9PXZvaWQgMCYmKGwubWFwcGluZz1uKHMubWFwcGluZyxsMHIpKSxzLm9mZnNldCE9PXZvaWQgMCYmbC5vZmZzZXQuZnJvbUFycmF5KHMub2Zmc2V0KSxzLnJlcGVhdCE9PXZvaWQgMCYmbC5yZXBlYXQuZnJvbUFycmF5KHMucmVwZWF0KSxzLmNlbnRlciE9PXZvaWQgMCYmbC5jZW50ZXIuZnJvbUFycmF5KHMuY2VudGVyKSxzLnJvdGF0aW9uIT09dm9pZCAwJiYobC5yb3RhdGlvbj1zLnJvdGF0aW9uKSxzLndyYXAhPT12b2lkIDAmJihsLndyYXBTPW4ocy53cmFwWzBdLHhoZSksbC53cmFwVD1uKHMud3JhcFsxXSx4aGUpKSxzLmZvcm1hdCE9PXZvaWQgMCYmKGwuZm9ybWF0PXMuZm9ybWF0KSxzLnR5cGUhPT12b2lkIDAmJihsLnR5cGU9cy50eXBlKSxzLmVuY29kaW5nIT09dm9pZCAwJiYobC5lbmNvZGluZz1zLmVuY29kaW5nKSxzLm1pbkZpbHRlciE9PXZvaWQgMCYmKGwubWluRmlsdGVyPW4ocy5taW5GaWx0ZXIsYmhlKSkscy5tYWdGaWx0ZXIhPT12b2lkIDAmJihsLm1hZ0ZpbHRlcj1uKHMubWFnRmlsdGVyLGJoZSkpLHMuYW5pc290cm9weSE9PXZvaWQgMCYmKGwuYW5pc290cm9weT1zLmFuaXNvdHJvcHkpLHMuZmxpcFkhPT12b2lkIDAmJihsLmZsaXBZPXMuZmxpcFkpLHMucHJlbXVsdGlwbHlBbHBoYSE9PXZvaWQgMCYmKGwucHJlbXVsdGlwbHlBbHBoYT1zLnByZW11bHRpcGx5QWxwaGEpLHMudW5wYWNrQWxpZ25tZW50IT09dm9pZCAwJiYobC51bnBhY2tBbGlnbm1lbnQ9cy51bnBhY2tBbGlnbm1lbnQpLHMudXNlckRhdGEhPT12b2lkIDAmJihsLnVzZXJEYXRhPXMudXNlckRhdGEpLGlbcy51dWlkXT1sfXJldHVybiBpfXBhcnNlT2JqZWN0KHQscixuLGksbyl7bGV0IGE7ZnVuY3Rpb24gcyhmKXtyZXR1cm4gcltmXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBnZW9tZXRyeSIsZikscltmXX1mdW5jdGlvbiBsKGYpe2lmKGYhPT12b2lkIDApe2lmKEFycmF5LmlzQXJyYXkoZikpe2xldCBwPVtdO2ZvcihsZXQgZD0wLGc9Zi5sZW5ndGg7ZDxnO2QrKyl7bGV0IF89ZltkXTtuW19dPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixfKSxwLnB1c2gobltfXSl9cmV0dXJuIHB9cmV0dXJuIG5bZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgbWF0ZXJpYWwiLGYpLG5bZl19fWZ1bmN0aW9uIGMoZil7cmV0dXJuIGlbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgdGV4dHVyZSIsZiksaVtmXX1sZXQgdSxoO3N3aXRjaCh0LnR5cGUpe2Nhc2UiU2NlbmUiOmE9bmV3IHEwLHQuYmFja2dyb3VuZCE9PXZvaWQgMCYmKE51bWJlci5pc0ludGVnZXIodC5iYWNrZ3JvdW5kKT9hLmJhY2tncm91bmQ9bmV3IG5lKHQuYmFja2dyb3VuZCk6YS5iYWNrZ3JvdW5kPWModC5iYWNrZ3JvdW5kKSksdC5lbnZpcm9ubWVudCE9PXZvaWQgMCYmKGEuZW52aXJvbm1lbnQ9Yyh0LmVudmlyb25tZW50KSksdC5mb2chPT12b2lkIDAmJih0LmZvZy50eXBlPT09IkZvZyI/YS5mb2c9bmV3IHoxKHQuZm9nLmNvbG9yLHQuZm9nLm5lYXIsdC5mb2cuZmFyKTp0LmZvZy50eXBlPT09IkZvZ0V4cDIiJiYoYS5mb2c9bmV3IE8xKHQuZm9nLmNvbG9yLHQuZm9nLmRlbnNpdHkpKSk7YnJlYWs7Y2FzZSJQZXJzcGVjdGl2ZUNhbWVyYSI6YT1uZXcgVWkodC5mb3YsdC5hc3BlY3QsdC5uZWFyLHQuZmFyKSx0LmZvY3VzIT09dm9pZCAwJiYoYS5mb2N1cz10LmZvY3VzKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LmZpbG1HYXVnZSE9PXZvaWQgMCYmKGEuZmlsbUdhdWdlPXQuZmlsbUdhdWdlKSx0LmZpbG1PZmZzZXQhPT12b2lkIDAmJihhLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0KSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIk9ydGhvZ3JhcGhpY0NhbWVyYSI6YT1uZXcgRDEodC5sZWZ0LHQucmlnaHQsdC50b3AsdC5ib3R0b20sdC5uZWFyLHQuZmFyKSx0Lnpvb20hPT12b2lkIDAmJihhLnpvb209dC56b29tKSx0LnZpZXchPT12b2lkIDAmJihhLnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpKTticmVhaztjYXNlIkFtYmllbnRMaWdodCI6YT1uZXcgTDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjphPW5ldyBJNih0LmNvbG9yLHQuaW50ZW5zaXR5KTticmVhaztjYXNlIlBvaW50TGlnaHQiOmE9bmV3IFA2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmRlY2F5KTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmE9bmV3IGs2KHQuY29sb3IsdC5pbnRlbnNpdHksdC53aWR0aCx0LmhlaWdodCk7YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmE9bmV3IEE2KHQuY29sb3IsdC5pbnRlbnNpdHksdC5kaXN0YW5jZSx0LmFuZ2xlLHQucGVudW1icmEsdC5kZWNheSk7YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmE9bmV3IFQ2KHQuY29sb3IsdC5ncm91bmRDb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJMaWdodFByb2JlIjphPW5ldyByeCgpLmZyb21KU09OKHQpO2JyZWFrO2Nhc2UiU2tpbm5lZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgYU0odSxoKSx0LmJpbmRNb2RlIT09dm9pZCAwJiYoYS5iaW5kTW9kZT10LmJpbmRNb2RlKSx0LmJpbmRNYXRyaXghPT12b2lkIDAmJmEuYmluZE1hdHJpeC5mcm9tQXJyYXkodC5iaW5kTWF0cml4KSx0LnNrZWxldG9uIT09dm9pZCAwJiYoYS5za2VsZXRvbj10LnNrZWxldG9uKTticmVhaztjYXNlIk1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCksYT1uZXcgdGkodSxoKTticmVhaztjYXNlIkluc3RhbmNlZE1lc2giOnU9cyh0Lmdlb21ldHJ5KSxoPWwodC5tYXRlcmlhbCk7bGV0IGY9dC5jb3VudCxwPXQuaW5zdGFuY2VNYXRyaXgsZD10Lmluc3RhbmNlQ29sb3I7YT1uZXcgaTYodSxoLGYpLGEuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkocC5hcnJheSksMTYpLGQhPT12b2lkIDAmJihhLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkoZC5hcnJheSksZC5pdGVtU2l6ZSkpO2JyZWFrO2Nhc2UiTE9EIjphPW5ldyBfVTticmVhaztjYXNlIkxpbmUiOmE9bmV3IGNoKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lTG9vcCI6YT1uZXcgbzYocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkxpbmVTZWdtZW50cyI6YT1uZXcgQWEocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlBvaW50Q2xvdWQiOmNhc2UiUG9pbnRzIjphPW5ldyBpbShzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiU3ByaXRlIjphPW5ldyBvTShsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIkdyb3VwIjphPW5ldyBYZDticmVhaztjYXNlIkJvbmUiOmE9bmV3IHNNO2JyZWFrO2RlZmF1bHQ6YT1uZXcgb3J9aWYoYS51dWlkPXQudXVpZCx0Lm5hbWUhPT12b2lkIDAmJihhLm5hbWU9dC5uYW1lKSx0Lm1hdHJpeCE9PXZvaWQgMD8oYS5tYXRyaXguZnJvbUFycmF5KHQubWF0cml4KSx0Lm1hdHJpeEF1dG9VcGRhdGUhPT12b2lkIDAmJihhLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlKSxhLm1hdHJpeEF1dG9VcGRhdGUmJmEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucXVhdGVybmlvbixhLnNjYWxlKSk6KHQucG9zaXRpb24hPT12b2lkIDAmJmEucG9zaXRpb24uZnJvbUFycmF5KHQucG9zaXRpb24pLHQucm90YXRpb24hPT12b2lkIDAmJmEucm90YXRpb24uZnJvbUFycmF5KHQucm90YXRpb24pLHQucXVhdGVybmlvbiE9PXZvaWQgMCYmYS5xdWF0ZXJuaW9uLmZyb21BcnJheSh0LnF1YXRlcm5pb24pLHQuc2NhbGUhPT12b2lkIDAmJmEuc2NhbGUuZnJvbUFycmF5KHQuc2NhbGUpKSx0LmNhc3RTaGFkb3chPT12b2lkIDAmJihhLmNhc3RTaGFkb3c9dC5jYXN0U2hhZG93KSx0LnJlY2VpdmVTaGFkb3chPT12b2lkIDAmJihhLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93KSx0LnNoYWRvdyYmKHQuc2hhZG93LmJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5iaWFzPXQuc2hhZG93LmJpYXMpLHQuc2hhZG93Lm5vcm1hbEJpYXMhPT12b2lkIDAmJihhLnNoYWRvdy5ub3JtYWxCaWFzPXQuc2hhZG93Lm5vcm1hbEJpYXMpLHQuc2hhZG93LnJhZGl1cyE9PXZvaWQgMCYmKGEuc2hhZG93LnJhZGl1cz10LnNoYWRvdy5yYWRpdXMpLHQuc2hhZG93Lm1hcFNpemUhPT12b2lkIDAmJmEuc2hhZG93Lm1hcFNpemUuZnJvbUFycmF5KHQuc2hhZG93Lm1hcFNpemUpLHQuc2hhZG93LmNhbWVyYSE9PXZvaWQgMCYmKGEuc2hhZG93LmNhbWVyYT10aGlzLnBhcnNlT2JqZWN0KHQuc2hhZG93LmNhbWVyYSkpKSx0LnZpc2libGUhPT12b2lkIDAmJihhLnZpc2libGU9dC52aXNpYmxlKSx0LmZydXN0dW1DdWxsZWQhPT12b2lkIDAmJihhLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkKSx0LnJlbmRlck9yZGVyIT09dm9pZCAwJiYoYS5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LmxheWVycyE9PXZvaWQgMCYmKGEubGF5ZXJzLm1hc2s9dC5sYXllcnMpLHQuY2hpbGRyZW4hPT12b2lkIDApe2xldCBmPXQuY2hpbGRyZW47Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspYS5hZGQodGhpcy5wYXJzZU9iamVjdChmW3BdLHIsbixpLG8pKX1pZih0LmFuaW1hdGlvbnMhPT12b2lkIDApe2xldCBmPXQuYW5pbWF0aW9ucztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXTthLmFuaW1hdGlvbnMucHVzaChvW2RdKX19aWYodC50eXBlPT09IkxPRCIpe3QuYXV0b1VwZGF0ZSE9PXZvaWQgMCYmKGEuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUpO2xldCBmPXQubGV2ZWxzO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKXtsZXQgZD1mW3BdLGc9YS5nZXRPYmplY3RCeVByb3BlcnR5KCJ1dWlkIixkLm9iamVjdCk7ZyE9PXZvaWQgMCYmYS5hZGRMZXZlbChnLGQuZGlzdGFuY2UpfX1yZXR1cm4gYX1iaW5kU2tlbGV0b25zKHQscil7T2JqZWN0LmtleXMocikubGVuZ3RoIT09MCYmdC50cmF2ZXJzZShmdW5jdGlvbihuKXtpZihuLmlzU2tpbm5lZE1lc2g9PT0hMCYmbi5za2VsZXRvbiE9PXZvaWQgMCl7bGV0IGk9cltuLnNrZWxldG9uXTtpPT09dm9pZCAwP2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBObyBza2VsZXRvbiBmb3VuZCB3aXRoIFVVSUQ6IixuLnNrZWxldG9uKTpuLmJpbmQoaSxuLmJpbmRNYXRyaXgpfX0pfXNldFRleHR1cmVQYXRoKHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogLnNldFRleHR1cmVQYXRoKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0UmVzb3VyY2VQYXRoKCkuIiksdGhpcy5zZXRSZXNvdXJjZVBhdGgodCl9fSxsMHI9e1VWTWFwcGluZzpYVSxDdWJlUmVmbGVjdGlvbk1hcHBpbmc6bngsQ3ViZVJlZnJhY3Rpb25NYXBwaW5nOml4LEVxdWlyZWN0YW5ndWxhclJlZmxlY3Rpb25NYXBwaW5nOllQLEVxdWlyZWN0YW5ndWxhclJlZnJhY3Rpb25NYXBwaW5nOmpQLEN1YmVVVlJlZmxlY3Rpb25NYXBwaW5nOnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOno2fSx4aGU9e1JlcGVhdFdyYXBwaW5nOlhQLENsYW1wVG9FZGdlV3JhcHBpbmc6Sm8sTWlycm9yZWRSZXBlYXRXcmFwcGluZzokUH0sYmhlPXtOZWFyZXN0RmlsdGVyOkxpLE5lYXJlc3RNaXBtYXBOZWFyZXN0RmlsdGVyOm9VLE5lYXJlc3RNaXBtYXBMaW5lYXJGaWx0ZXI6YVUsTGluZWFyRmlsdGVyOmlpLExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6TGh0LExpbmVhck1pcG1hcExpbmVhckZpbHRlcjpveH0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9e307cy5jcmVkZW50aWFscz10aGlzLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIscy5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LHMpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt0eC5hZGQodCxsKSxyJiZyKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7aSYmaShsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19O05VLnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBXVix6aHQ9e2dldENvbnRleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1Y9PT12b2lkIDAmJihXVj1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLFdWfSxzZXRDb250ZXh0OmZ1bmN0aW9uKGUpe1dWPWV9fSxEVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7bGV0IGw9cy5zbGljZSgwKTt6aHQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe3IodSl9KX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX19LE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodm9pZCAwLG4pO2xldCBpPW5ldyBuZSgpLnNldCh0KSxvPW5ldyBuZSgpLnNldChyKSxhPW5ldyBqKGkucixpLmcsaS5iKSxzPW5ldyBqKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShhKS5hZGQocykubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShhKS5zdWIocykubXVsdGlwbHlTY2FsYXIoYyl9fTtPVS5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgelU9Y2xhc3MgZXh0ZW5kcyByeHtjb25zdHJ1Y3Rvcih0LHI9MSl7c3VwZXIodm9pZCAwLHIpO2xldCBuPW5ldyBuZSgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQobi5yLG4uZyxuLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O3pVLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB3aGU9bmV3IE1lLFNoZT1uZXcgTWUseTE9bmV3IE1lLGxodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU3RlcmVvQ2FtZXJhIix0aGlzLmFzcGVjdD0xLHRoaXMuZXllU2VwPS4wNjQsdGhpcy5jYW1lcmFMPW5ldyBVaSx0aGlzLmNhbWVyYUwubGF5ZXJzLmVuYWJsZSgxKSx0aGlzLmNhbWVyYUwubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNhbWVyYVI9bmV3IFVpLHRoaXMuY2FtZXJhUi5sYXllcnMuZW5hYmxlKDIpLHRoaXMuY2FtZXJhUi5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2NhY2hlPXtmb2N1czpudWxsLGZvdjpudWxsLGFzcGVjdDpudWxsLG5lYXI6bnVsbCxmYXI6bnVsbCx6b29tOm51bGwsZXllU2VwOm51bGx9fXVwZGF0ZSh0KXtsZXQgcj10aGlzLl9jYWNoZTtpZihyLmZvY3VzIT09dC5mb2N1c3x8ci5mb3YhPT10LmZvdnx8ci5hc3BlY3QhPT10LmFzcGVjdCp0aGlzLmFzcGVjdHx8ci5uZWFyIT09dC5uZWFyfHxyLmZhciE9PXQuZmFyfHxyLnpvb20hPT10Lnpvb218fHIuZXllU2VwIT09dGhpcy5leWVTZXApe3IuZm9jdXM9dC5mb2N1cyxyLmZvdj10LmZvdixyLmFzcGVjdD10LmFzcGVjdCp0aGlzLmFzcGVjdCxyLm5lYXI9dC5uZWFyLHIuZmFyPXQuZmFyLHIuem9vbT10Lnpvb20sci5leWVTZXA9dGhpcy5leWVTZXAseTEuY29weSh0LnByb2plY3Rpb25NYXRyaXgpO2xldCBpPXIuZXllU2VwLzIsbz1pKnIubmVhci9yLmZvY3VzLGE9ci5uZWFyKk1hdGgudGFuKFAxKnIuZm92Ki41KS9yLnpvb20scyxsO1NoZS5lbGVtZW50c1sxMl09LWksd2hlLmVsZW1lbnRzWzEyXT1pLHM9LWEqci5hc3BlY3QrbyxsPWEqci5hc3BlY3Qrbyx5MS5lbGVtZW50c1swXT0yKnIubmVhci8obC1zKSx5MS5lbGVtZW50c1s4XT0obCtzKS8obC1zKSx0aGlzLmNhbWVyYUwucHJvamVjdGlvbk1hdHJpeC5jb3B5KHkxKSxzPS1hKnIuYXNwZWN0LW8sbD1hKnIuYXNwZWN0LW8seTEuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseTEuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFSLnByb2plY3Rpb25NYXRyaXguY29weSh5MSl9dGhpcy5jYW1lcmFMLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoU2hlKSx0aGlzLmNhbWVyYVIubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKS5tdWx0aXBseSh3aGUpfX0sbU09Y2xhc3N7Y29uc3RydWN0b3IodD0hMCl7dGhpcy5hdXRvU3RhcnQ9dCx0aGlzLnN0YXJ0VGltZT0wLHRoaXMub2xkVGltZT0wLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITF9c3RhcnQoKXt0aGlzLnN0YXJ0VGltZT1NaGUoKSx0aGlzLm9sZFRpbWU9dGhpcy5zdGFydFRpbWUsdGhpcy5lbGFwc2VkVGltZT0wLHRoaXMucnVubmluZz0hMH1zdG9wKCl7dGhpcy5nZXRFbGFwc2VkVGltZSgpLHRoaXMucnVubmluZz0hMSx0aGlzLmF1dG9TdGFydD0hMX1nZXRFbGFwc2VkVGltZSgpe3JldHVybiB0aGlzLmdldERlbHRhKCksdGhpcy5lbGFwc2VkVGltZX1nZXREZWx0YSgpe2xldCB0PTA7aWYodGhpcy5hdXRvU3RhcnQmJiF0aGlzLnJ1bm5pbmcpcmV0dXJuIHRoaXMuc3RhcnQoKSwwO2lmKHRoaXMucnVubmluZyl7bGV0IHI9TWhlKCk7dD0oci10aGlzLm9sZFRpbWUpLzFlMyx0aGlzLm9sZFRpbWU9cix0aGlzLmVsYXBzZWRUaW1lKz10fXJldHVybiB0fX07ZnVuY3Rpb24gTWhlKCl7cmV0dXJuKHR5cGVvZiBwZXJmb3JtYW5jZT09InVuZGVmaW5lZCI/RGF0ZTpwZXJmb3JtYW5jZSkubm93KCl9dmFyIHYxPW5ldyBqLEVoZT1uZXcgeWksYzByPW5ldyBqLHgxPW5ldyBqLGNodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkF1ZGlvTGlzdGVuZXIiLHRoaXMuY29udGV4dD16aHQuZ2V0Q29udGV4dCgpLHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCx0aGlzLnRpbWVEZWx0YT0wLHRoaXMuX2Nsb2NrPW5ldyBtTX1nZXRJbnB1dCgpe3JldHVybiB0aGlzLmdhaW59cmVtb3ZlRmlsdGVyKCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbCYmKHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5nYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj1udWxsKSx0aGlzfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlcn1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuZmlsdGVyIT09bnVsbD8odGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXIpLHRoaXMuZmlsdGVyLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSk6dGhpcy5nYWluLmRpc2Nvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKSx0aGlzLmZpbHRlcj10LHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpc31nZXRNYXN0ZXJWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0TWFzdGVyVm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpO2xldCByPXRoaXMuY29udGV4dC5saXN0ZW5lcixuPXRoaXMudXA7aWYodGhpcy50aW1lRGVsdGE9dGhpcy5fY2xvY2suZ2V0RGVsdGEoKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh2MSxFaGUsYzByKSx4MS5zZXQoMCwwLC0xKS5hcHBseVF1YXRlcm5pb24oRWhlKSxyLnBvc2l0aW9uWCl7bGV0IGk9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHYxLngsaSksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodjEueSxpKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2MS56LGkpLHIuZm9yd2FyZFgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeDEueCxpKSxyLmZvcndhcmRZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHgxLnksaSksci5mb3J3YXJkWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4MS56LGkpLHIudXBYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueCxpKSxyLnVwWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLnksaSksci51cFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi56LGkpfWVsc2Ugci5zZXRQb3NpdGlvbih2MS54LHYxLnksdjEueiksci5zZXRPcmllbnRhdGlvbih4MS54LHgxLnkseDEueixuLngsbi55LG4ueil9fSxENj1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IHI9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiByLmJ1ZmZlcj10aGlzLmJ1ZmZlcixyLmxvb3A9dGhpcy5sb29wLHIubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LHIubG9vcEVuZD10aGlzLmxvb3BFbmQsci5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLHIuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPXIsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLHI9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PHI7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fSxiMT1uZXcgaixUaGU9bmV3IHlpLHUwcj1uZXcgaix3MT1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBENntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnBhbm5lcj10aGlzLmNvbnRleHQuY3JlYXRlUGFubmVyKCksdGhpcy5wYW5uZXIucGFubmluZ01vZGVsPSJIUlRGIix0aGlzLnBhbm5lci5jb25uZWN0KHRoaXMuZ2Fpbil9Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMucGFubmVyfWdldFJlZkRpc3RhbmNlKCl7cmV0dXJuIHRoaXMucGFubmVyLnJlZkRpc3RhbmNlfXNldFJlZkRpc3RhbmNlKHQpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZT10LHRoaXN9Z2V0Um9sbG9mZkZhY3Rvcigpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yfXNldFJvbGxvZmZGYWN0b3IodCl7cmV0dXJuIHRoaXMucGFubmVyLnJvbGxvZmZGYWN0b3I9dCx0aGlzfWdldERpc3RhbmNlTW9kZWwoKXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbH1zZXREaXN0YW5jZU1vZGVsKHQpe3JldHVybiB0aGlzLnBhbm5lci5kaXN0YW5jZU1vZGVsPXQsdGhpc31nZXRNYXhEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5tYXhEaXN0YW5jZX1zZXRNYXhEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2U9dCx0aGlzfXNldERpcmVjdGlvbmFsQ29uZSh0LHIsbil7cmV0dXJuIHRoaXMucGFubmVyLmNvbmVJbm5lckFuZ2xlPXQsdGhpcy5wYW5uZXIuY29uZU91dGVyQW5nbGU9cix0aGlzLnBhbm5lci5jb25lT3V0ZXJHYWluPW4sdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtpZihzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSEwJiZ0aGlzLmlzUGxheWluZz09PSExKXJldHVybjt0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShiMSxUaGUsdTByKSx3MS5zZXQoMCwwLDEpLmFwcGx5UXVhdGVybmlvbihUaGUpO2xldCByPXRoaXMucGFubmVyO2lmKHIucG9zaXRpb25YKXtsZXQgbj10aGlzLmNvbnRleHQuY3VycmVudFRpbWUrdGhpcy5saXN0ZW5lci50aW1lRGVsdGE7ci5wb3NpdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYjEueCxuKSxyLnBvc2l0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShiMS55LG4pLHIucG9zaXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGIxLnosbiksci5vcmllbnRhdGlvblgubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodzEueCxuKSxyLm9yaWVudGF0aW9uWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3MS55LG4pLHIub3JpZW50YXRpb25aLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHcxLnosbil9ZWxzZSByLnNldFBvc2l0aW9uKGIxLngsYjEueSxiMS56KSxyLnNldE9yaWVudGF0aW9uKHcxLngsdzEueSx3MS56KX19LEZVPWNsYXNze2NvbnN0cnVjdG9yKHQscj0yMDQ4KXt0aGlzLmFuYWx5c2VyPXQuY29udGV4dC5jcmVhdGVBbmFseXNlcigpLHRoaXMuYW5hbHlzZXIuZmZ0U2l6ZT1yLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLmFuYWx5c2VyLmZyZXF1ZW5jeUJpbkNvdW50KSx0LmdldE91dHB1dCgpLmNvbm5lY3QodGhpcy5hbmFseXNlcil9Z2V0RnJlcXVlbmN5RGF0YSgpe3JldHVybiB0aGlzLmFuYWx5c2VyLmdldEJ5dGVGcmVxdWVuY3lEYXRhKHRoaXMuZGF0YSksdGhpcy5kYXRhfWdldEF2ZXJhZ2VGcmVxdWVuY3koKXtsZXQgdD0wLHI9dGhpcy5nZXRGcmVxdWVuY3lEYXRhKCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspdCs9cltuXTtyZXR1cm4gdC9yLmxlbmd0aH19LEJVPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1uO2xldCBpLG8sYTtzd2l0Y2gocil7Y2FzZSJxdWF0ZXJuaW9uIjppPXRoaXMuX3NsZXJwLG89dGhpcy5fc2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio2KSx0aGlzLl93b3JrSW5kZXg9NTticmVhaztjYXNlInN0cmluZyI6Y2FzZSJib29sIjppPXRoaXMuX3NlbGVjdCxvPXRoaXMuX3NlbGVjdCxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcix0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkobio1KTticmVhaztkZWZhdWx0Omk9dGhpcy5fbGVycCxvPXRoaXMuX2xlcnBBZGRpdGl2ZSxhPXRoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljLHRoaXMuYnVmZmVyPW5ldyBGbG9hdDY0QXJyYXkobio1KX10aGlzLl9taXhCdWZmZXJSZWdpb249aSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZT1vLHRoaXMuX3NldElkZW50aXR5PWEsdGhpcy5fb3JpZ0luZGV4PTMsdGhpcy5fYWRkSW5kZXg9NCx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLHRoaXMudXNlQ291bnQ9MCx0aGlzLnJlZmVyZW5jZUNvdW50PTB9YWNjdW11bGF0ZSh0LHIpe2xldCBuPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUsbz10KmkraSxhPXRoaXMuY3VtdWxhdGl2ZVdlaWdodDtpZihhPT09MCl7Zm9yKGxldCBzPTA7cyE9PWk7KytzKW5bbytzXT1uW3NdO2E9cn1lbHNle2ErPXI7bGV0IHM9ci9hO3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLG8sMCxzLGkpfXRoaXMuY3VtdWxhdGl2ZVdlaWdodD1hfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9hZGRJbmRleDt0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT09PTAmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUocixpLDAsdCxuKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgcj10aGlzLnZhbHVlU2l6ZSxuPXRoaXMuYnVmZmVyLGk9dCpyK3Isbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQsYT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxzPXRoaXMuYmluZGluZztpZih0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSl7bGV0IGw9cip0aGlzLl9vcmlnSW5kZXg7dGhpcy5fbWl4QnVmZmVyUmVnaW9uKG4saSxsLDEtbyxyKX1hPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKG4saSx0aGlzLl9hZGRJbmRleCpyLDEscik7Zm9yKGxldCBsPXIsYz1yK3I7bCE9PWM7KytsKWlmKG5bbF0hPT1uW2wrcl0pe3Muc2V0VmFsdWUobixpKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLmJpbmRpbmcscj10aGlzLmJ1ZmZlcixuPXRoaXMudmFsdWVTaXplLGk9bip0aGlzLl9vcmlnSW5kZXg7dC5nZXRWYWx1ZShyLGkpO2ZvcihsZXQgbz1uLGE9aTtvIT09YTsrK28pcltvXT1yW2krbyVuXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXtsZXQgdD10aGlzLnZhbHVlU2l6ZSozO3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlcix0KX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPXQ7bjxyO24rKyl0aGlzLmJ1ZmZlcltuXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLHI9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBuPTA7bjx0aGlzLnZhbHVlU2l6ZTtuKyspdGhpcy5idWZmZXJbcituXT10aGlzLmJ1ZmZlclt0K25dfV9zZWxlY3QodCxyLG4saSxvKXtpZihpPj0uNSlmb3IobGV0IGE9MDthIT09bzsrK2EpdFtyK2FdPXRbbithXX1fc2xlcnAodCxyLG4saSl7eWkuc2xlcnBGbGF0KHQscix0LHIsdCxuLGkpfV9zbGVycEFkZGl0aXZlKHQscixuLGksbyl7bGV0IGE9dGhpcy5fd29ya0luZGV4Km87eWkubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxhLHQscix0LG4pLHlpLnNsZXJwRmxhdCh0LHIsdCxyLHQsYSxpKX1fbGVycCh0LHIsbixpLG8pe2xldCBhPTEtaTtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBsPXIrczt0W2xdPXRbbF0qYSt0W24rc10qaX19X2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2ZvcihsZXQgYT0wO2EhPT1vOysrYSl7bGV0IHM9cithO3Rbc109dFtzXSt0W24rYV0qaX19fSxGaHQ9IlxcW1xcXVxcLjpcXC8iLGgwcj1uZXcgUmVnRXhwKCJbIitGaHQrIl0iLCJnIiksQmh0PSJbXiIrRmh0KyJdIixmMHI9IlteIitGaHQucmVwbGFjZSgiXFwuIiwiIikrIl0iLHAwcj0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZDByPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLGYwciksbTByPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEJodCksZzByPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixCaHQpLF8wcj1uZXcgUmVnRXhwKCJeIitwMHIrZDByK20wcitnMHIrIiQiKSx5MHI9WyJtYXRlcmlhbCIsIm1hdGVyaWFscyIsImJvbmVzIl0saGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1ufHxDci5wYXJzZVRyYWNrTmFtZShyKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhyLGkpfWdldFZhbHVlKHQscil7dGhpcy5iaW5kKCk7bGV0IG49dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dGhpcy5fYmluZGluZ3Nbbl07aSE9PXZvaWQgMCYmaS5nZXRWYWx1ZSh0LHIpfXNldFZhbHVlKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxuPXQubGVuZ3RoO3IhPT1uOysrcil0W3JdLnVuYmluZCgpfX0sQ3I9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMucGF0aD1yLHRoaXMucGFyc2VkUGF0aD1ufHxDci5wYXJzZVRyYWNrTmFtZShyKSx0aGlzLm5vZGU9Q3IuZmluZE5vZGUodCx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHx0LHRoaXMucm9vdE5vZGU9dCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUodCxyLG4pe3JldHVybiB0JiZ0LmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IENyLkNvbXBvc2l0ZSh0LHIsbik6bmV3IENyKHQscixuKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShoMHIsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgcj1fMHIuZXhlYyh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIit0KTtsZXQgbj17bm9kZU5hbWU6clsyXSxvYmplY3ROYW1lOnJbM10sb2JqZWN0SW5kZXg6cls0XSxwcm9wZXJ0eU5hbWU6cls1XSxwcm9wZXJ0eUluZGV4OnJbNl19LGk9bi5ub2RlTmFtZSYmbi5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKGkhPT12b2lkIDAmJmkhPT0tMSl7bGV0IG89bi5ub2RlTmFtZS5zdWJzdHJpbmcoaSsxKTt5MHIuaW5kZXhPZihvKSE9PS0xJiYobi5ub2RlTmFtZT1uLm5vZGVOYW1lLnN1YnN0cmluZygwLGkpLG4ub2JqZWN0TmFtZT1vKX1pZihuLnByb3BlcnR5TmFtZT09PW51bGx8fG4ucHJvcGVydHlOYW1lLmxlbmd0aD09PTApdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK3QpO3JldHVybiBufXN0YXRpYyBmaW5kTm9kZSh0LHIpe2lmKCFyfHxyPT09IiJ8fHI9PT0iLiJ8fHI9PT0tMXx8cj09PXQubmFtZXx8cj09PXQudXVpZClyZXR1cm4gdDtpZih0LnNrZWxldG9uKXtsZXQgbj10LnNrZWxldG9uLmdldEJvbmVCeU5hbWUocik7aWYobiE9PXZvaWQgMClyZXR1cm4gbn1pZih0LmNoaWxkcmVuKXtsZXQgbj1mdW5jdGlvbihvKXtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKyl7bGV0IHM9b1thXTtpZihzLm5hbWU9PT1yfHxzLnV1aWQ9PT1yKXJldHVybiBzO2xldCBsPW4ocy5jaGlsZHJlbik7aWYobClyZXR1cm4gbH1yZXR1cm4gbnVsbH0saT1uKHQuY2hpbGRyZW4pO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KHQscil7dFtyXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKXRbcisrXT1uW2ldfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0W3JdPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkodCxyKX1fc2V0VmFsdWVfZGlyZWN0KHQscil7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPXRbcl19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KHQscil7bGV0IG49dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aSE9PW87KytpKW5baV09dFtyKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPXRbcl0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KHQsciksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKHQscil9X3NldFZhbHVlX3VuYm91bmQodCxyKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKHQscil9YmluZCgpe2xldCB0PXRoaXMubm9kZSxyPXRoaXMucGFyc2VkUGF0aCxuPXIub2JqZWN0TmFtZSxpPXIucHJvcGVydHlOYW1lLG89ci5wcm9wZXJ0eUluZGV4O2lmKHR8fCh0PUNyLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsci5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPXQpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIG5vZGUgZm9yIHRyYWNrOiAiK3RoaXMucGF0aCsiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIik7cmV0dXJufWlmKG4pe2xldCBjPXIub2JqZWN0SW5kZXg7c3dpdGNoKG4pe2Nhc2UibWF0ZXJpYWxzIjppZighdC5tYXRlcmlhbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtyZXR1cm59aWYoIXQubWF0ZXJpYWwubWF0ZXJpYWxzKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7cmV0dXJufXQ9dC5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIXQuc2tlbGV0b24pe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIGJvbmVzIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIHNrZWxldG9uLiIsdGhpcyk7cmV0dXJufXQ9dC5za2VsZXRvbi5ib25lcztmb3IobGV0IHU9MDt1PHQubGVuZ3RoO3UrKylpZih0W3VdLm5hbWU9PT1jKXtjPXU7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih0W25dPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7cmV0dXJufXQ9dFtuXX1pZihjIT09dm9pZCAwKXtpZih0W2NdPT09dm9pZCAwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLHQpO3JldHVybn10PXRbY119fWxldCBhPXRbaV07aWYoYT09PXZvaWQgMCl7bGV0IGM9ci5ub2RlTmFtZTtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2MrIi4iK2krIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsdCk7cmV0dXJufWxldCBzPXRoaXMuVmVyc2lvbmluZy5Ob25lO3RoaXMudGFyZ2V0T2JqZWN0PXQsdC5uZWVkc1VwZGF0ZSE9PXZvaWQgMD9zPXRoaXMuVmVyc2lvbmluZy5OZWVkc1VwZGF0ZTp0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUhPT12b2lkIDAmJihzPXRoaXMuVmVyc2lvbmluZy5NYXRyaXhXb3JsZE5lZWRzVXBkYXRlKTtsZXQgbD10aGlzLkJpbmRpbmdUeXBlLkRpcmVjdDtpZihvIT09dm9pZCAwKXtpZihpPT09Im1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIpe2lmKCF0Lmdlb21ldHJ5KXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO3JldHVybn1pZih0Lmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpe2lmKCF0Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7cmV0dXJufXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5W29dIT09dm9pZCAwJiYobz10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSl9ZWxzZXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgb24gVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIsdGhpcyk7cmV0dXJufX1sPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1vfWVsc2UgYS5mcm9tQXJyYXkhPT12b2lkIDAmJmEudG9BcnJheSE9PXZvaWQgMD8obD10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhsPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPWk7dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbbF0sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2xdW3NdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fTtDci5Db21wb3NpdGU9aGh0O0NyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtDci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtDci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxDci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO0NyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgSFU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9TmwoKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBuPTAsaT1hcmd1bWVudHMubGVuZ3RoO24hPT1pOysrbil0W2FyZ3VtZW50c1tuXS51dWlkXT1uO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgcj10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiByLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtci5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gci5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9wYXRocyxpPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aCxzLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0scD1mLnV1aWQsZD1yW3BdO2lmKGQ9PT12b2lkIDApe2Q9bCsrLHJbcF09ZCx0LnB1c2goZik7Zm9yKGxldCBnPTAsXz1hO2chPT1fOysrZylvW2ddLnB1c2gobmV3IENyKGYsbltnXSxpW2ddKSl9ZWxzZSBpZihkPGMpe3M9dFtkXTtsZXQgZz0tLWMsXz10W2ddO3JbXy51dWlkXT1kLHRbZF09XyxyW3BdPWcsdFtnXT1mO2ZvcihsZXQgeT0wLHg9YTt5IT09eDsrK3kpe2xldCBiPW9beV0sUz1iW2ddLEM9YltkXTtiW2RdPVMsQz09PXZvaWQgMCYmKEM9bmV3IENyKGYsblt5XSxpW3ldKSksYltnXT1DfX1lbHNlIHRbZF0hPT1zJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBhPTAscz1hcmd1bWVudHMubGVuZ3RoO2EhPT1zOysrYSl7bGV0IGw9YXJndW1lbnRzW2FdLGM9bC51dWlkLHU9cltjXTtpZih1IT09dm9pZCAwJiZ1Pj1vKXtsZXQgaD1vKyssZj10W2hdO3JbZi51dWlkXT11LHRbdV09ZixyW2NdPWgsdFtoXT1sO2ZvcihsZXQgcD0wLGQ9aTtwIT09ZDsrK3Ape2xldCBnPW5bcF0sXz1nW2hdLHk9Z1t1XTtnW3VdPV8sZ1toXT15fX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxyPXRoaXMuX2luZGljZXNCeVVVSUQsbj10aGlzLl9iaW5kaW5ncyxpPW4ubGVuZ3RoLG89dGhpcy5uQ2FjaGVkT2JqZWN0c18sYT10Lmxlbmd0aDtmb3IobGV0IHM9MCxsPWFyZ3VtZW50cy5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hcmd1bWVudHNbc10sdT1jLnV1aWQsaD1yW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIHJbdV0saDxvKXtsZXQgZj0tLW8scD10W2ZdLGQ9LS1hLGc9dFtkXTtyW3AudXVpZF09aCx0W2hdPXAscltnLnV1aWRdPWYsdFtmXT1nLHQucG9wKCk7Zm9yKGxldCBfPTAseT1pO18hPT15OysrXyl7bGV0IHg9bltfXSxiPXhbZl0sUz14W2RdO3hbaF09Yix4W2ZdPVMseC5wb3AoKX19ZWxzZXtsZXQgZj0tLWEscD10W2ZdO2Y+MCYmKHJbcC51dWlkXT1oKSx0W2hdPXAsdC5wb3AoKTtmb3IobGV0IGQ9MCxnPWk7ZCE9PWc7KytkKXtsZXQgXz1uW2RdO19baF09X1tmXSxfLnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189b31zdWJzY3JpYmVfKHQscil7bGV0IG49dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9blt0XSxvPXRoaXMuX2JpbmRpbmdzO2lmKGkhPT12b2lkIDApcmV0dXJuIG9baV07bGV0IGE9dGhpcy5fcGF0aHMscz10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO2k9by5sZW5ndGgsblt0XT1pLGEucHVzaCh0KSxzLnB1c2gociksby5wdXNoKGgpO2ZvcihsZXQgZj11LHA9bC5sZW5ndGg7ZiE9PXA7KytmKXtsZXQgZD1sW2ZdO2hbZl09bmV3IENyKGQsdCxyKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IHI9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLG49clt0XTtpZihuIT09dm9pZCAwKXtsZXQgaT10aGlzLl9wYXRocyxvPXRoaXMuX3BhcnNlZFBhdGhzLGE9dGhpcy5fYmluZGluZ3Mscz1hLmxlbmd0aC0xLGw9YVtzXSxjPXRbc107cltjXT1uLGFbbl09bCxhLnBvcCgpLG9bbl09b1tzXSxvLnBvcCgpLGlbbl09aVtzXSxpLnBvcCgpfX19O0hVLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBmaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49bnVsbCxpPXIuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9cix0aGlzLl9sb2NhbFJvb3Q9bix0aGlzLmJsZW5kTW9kZT1pO2xldCBvPXIudHJhY2tzLGE9by5sZW5ndGgscz1uZXcgQXJyYXkoYSksbD17ZW5kaW5nU3RhcnQ6RTEsZW5kaW5nRW5kOkUxfTtmb3IobGV0IGM9MDtjIT09YTsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7c1tjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPXMsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkoYSksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPVRmZSx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MSx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9MSx0aGlzLndlaWdodD0xLHRoaXMuX2VmZmVjdGl2ZVdlaWdodD0xLHRoaXMucmVwZXRpdGlvbnM9MS8wLHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLmNsYW1wV2hlbkZpbmlzaGVkPSExLHRoaXMuemVyb1Nsb3BlQXRTdGFydD0hMCx0aGlzLnplcm9TbG9wZUF0RW5kPSEwfXBsYXkoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2FjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXN9c3RvcCgpe3JldHVybiB0aGlzLl9taXhlci5fZGVhY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzLnJlc2V0KCl9cmVzZXQoKXtyZXR1cm4gdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMudGltZT0wLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnN0b3BGYWRpbmcoKS5zdG9wV2FycGluZygpfWlzUnVubmluZygpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLnBhdXNlZCYmdGhpcy50aW1lU2NhbGUhPT0wJiZ0aGlzLl9zdGFydFRpbWU9PT1udWxsJiZ0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9aXNTY2hlZHVsZWQoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfXN0YXJ0QXQodCl7cmV0dXJuIHRoaXMuX3N0YXJ0VGltZT10LHRoaXN9c2V0TG9vcCh0LHIpe3JldHVybiB0aGlzLmxvb3A9dCx0aGlzLnJlcGV0aXRpb25zPXIsdGhpc31zZXRFZmZlY3RpdmVXZWlnaHQodCl7cmV0dXJuIHRoaXMud2VpZ2h0PXQsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PXRoaXMuZW5hYmxlZD90OjAsdGhpcy5zdG9wRmFkaW5nKCl9Z2V0RWZmZWN0aXZlV2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodH1mYWRlSW4odCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMCwxKX1mYWRlT3V0KHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDEsMCl9Y3Jvc3NGYWRlRnJvbSh0LHIsbil7aWYodC5mYWRlT3V0KHIpLHRoaXMuZmFkZUluKHIpLG4pe2xldCBpPXRoaXMuX2NsaXAuZHVyYXRpb24sbz10Ll9jbGlwLmR1cmF0aW9uLGE9by9pLHM9aS9vO3Qud2FycCgxLGEsciksdGhpcy53YXJwKHMsMSxyKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LHIsbil7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLHIsbil9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiB0IT09bnVsbCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLnRpbWVTY2FsZSxzPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O3M9PT1udWxsJiYocz1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9cyk7bGV0IGw9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1zLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytuLGNbMF09dC9hLGNbMV09ci9hLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxyLG4saSl7aWYoIXRoaXMuZW5hYmxlZCl7dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO3JldHVybn1sZXQgbz10aGlzLl9zdGFydFRpbWU7aWYobyE9PW51bGwpe2xldCBsPSh0LW8pKm47aWYobDwwfHxuPT09MClyZXR1cm47dGhpcy5fc3RhcnRUaW1lPW51bGwscj1uKmx9cio9dGhpcy5fdXBkYXRlVGltZVNjYWxlKHQpO2xldCBhPXRoaXMuX3VwZGF0ZVRpbWUocikscz10aGlzLl91cGRhdGVXZWlnaHQodCk7aWYocz4wKXtsZXQgbD10aGlzLl9pbnRlcnBvbGFudHMsYz10aGlzLl9wcm9wZXJ0eUJpbmRpbmdzO3N3aXRjaCh0aGlzLmJsZW5kTW9kZSl7Y2FzZSBraHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShzKTticmVhaztjYXNlICRVOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShhKSxjW3VdLmFjY3VtdWxhdGUoaSxzKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IHI9MDtpZih0aGlzLmVuYWJsZWQpe3I9dGhpcy53ZWlnaHQ7bGV0IG49dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobiE9PW51bGwpe2xldCBpPW4uZXZhbHVhdGUodClbMF07cio9aSx0Pm4ucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksaT09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1yLHJ9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgcj0wO2lmKCF0aGlzLnBhdXNlZCl7cj10aGlzLnRpbWVTY2FsZTtsZXQgbj10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtuIT09bnVsbCYmKHIqPW4uZXZhbHVhdGUodClbMF0sdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxyPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1yKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1yLHJ9X3VwZGF0ZVRpbWUodCl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixuPXRoaXMubG9vcCxpPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LGE9bj09PUNmZTtpZih0PT09MClyZXR1cm4gbz09PS0xP2k6YSYmKG8mMSk9PT0xP3ItaTppO2lmKG49PT1FZmUpe289PT0tMSYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTt0OntpZihpPj1yKWk9cjtlbHNlIGlmKGk8MClpPTA7ZWxzZXt0aGlzLnRpbWU9aTticmVhayB0fXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZihvPT09LTEmJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCx0aGlzLnJlcGV0aXRpb25zPT09MCxhKSk6dGhpcy5fc2V0RW5kaW5ncyh0aGlzLnJlcGV0aXRpb25zPT09MCwhMCxhKSksaT49cnx8aTwwKXtsZXQgcz1NYXRoLmZsb29yKGkvcik7aS09cipzLG8rPU1hdGguYWJzKHMpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLGk9dD4wP3I6MCx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZihsPT09MSl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxhKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEsYSk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOnN9KX19ZWxzZSB0aGlzLnRpbWU9aTtpZihhJiYobyYxKT09PTEpcmV0dXJuIHItaX1yZXR1cm4gaX1fc2V0RW5kaW5ncyh0LHIsbil7bGV0IGk9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncztuPyhpLmVuZGluZ1N0YXJ0PVQxLGkuZW5kaW5nRW5kPVQxKToodD9pLmVuZGluZ1N0YXJ0PXRoaXMuemVyb1Nsb3BlQXRTdGFydD9UMTpFMTppLmVuZGluZ1N0YXJ0PUpQLHI/aS5lbmRpbmdFbmQ9dGhpcy56ZXJvU2xvcGVBdEVuZD9UMTpFMTppLmVuZGluZ0VuZD1KUCl9X3NjaGVkdWxlRmFkaW5nKHQscixuKXtsZXQgaT10aGlzLl9taXhlcixvPWkudGltZSxhPXRoaXMuX3dlaWdodEludGVycG9sYW50O2E9PT1udWxsJiYoYT1pLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9YSk7bGV0IHM9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1hLnNhbXBsZVZhbHVlcztyZXR1cm4gc1swXT1vLGxbMF09cixzWzFdPW8rdCxsWzFdPW4sdGhpc319LFZVPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9yb290PXQsdGhpcy5faW5pdE1lbW9yeU1hbmFnZXIoKSx0aGlzLl9hY2N1SW5kZXg9MCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xfV9iaW5kQWN0aW9uKHQscil7bGV0IG49dC5fbG9jYWxSb290fHx0aGlzLl9yb290LGk9dC5fY2xpcC50cmFja3Msbz1pLmxlbmd0aCxhPXQuX3Byb3BlcnR5QmluZGluZ3Mscz10Ll9pbnRlcnBvbGFudHMsbD1uLnV1aWQsYz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsdT1jW2xdO3U9PT12b2lkIDAmJih1PXt9LGNbbF09dSk7Zm9yKGxldCBoPTA7aCE9PW87KytoKXtsZXQgZj1pW2hdLHA9Zi5uYW1lLGQ9dVtwXTtpZihkIT09dm9pZCAwKSsrZC5yZWZlcmVuY2VDb3VudCxhW2hdPWQ7ZWxzZXtpZihkPWFbaF0sZCE9PXZvaWQgMCl7ZC5fY2FjaGVJbmRleD09PW51bGwmJigrK2QucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGQsbCxwKSk7Y29udGludWV9bGV0IGc9ciYmci5fcHJvcGVydHlCaW5kaW5nc1toXS5iaW5kaW5nLnBhcnNlZFBhdGg7ZD1uZXcgQlUoQ3IuY3JlYXRlKG4scCxnKSxmLlZhbHVlVHlwZU5hbWUsZi5nZXRWYWx1ZVNpemUoKSksKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCksYVtoXT1kfXNbaF0ucmVzdWx0QnVmZmVyPWQuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZih0Ll9jYWNoZUluZGV4PT09bnVsbCl7bGV0IG49KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxpPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbaV07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LGksbil9bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTtvLnVzZUNvdW50Kys9PT0wJiYodGhpcy5fbGVuZEJpbmRpbmcobyksby5zYXZlT3JpZ2luYWxTdGF0ZSgpKX10aGlzLl9sZW5kQWN0aW9uKHQpfX1fZGVhY3RpdmF0ZUFjdGlvbih0KXtpZih0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7bGV0IHI9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbil7bGV0IG89cltuXTstLW8udXNlQ291bnQ9PT0wJiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCByPXQuX2NhY2hlSW5kZXg7cmV0dXJuIHIhPT1udWxsJiZyPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsbil7bGV0IGk9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAsYT1vW3JdO2lmKGE9PT12b2lkIDApYT17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW3JdPWE7ZWxzZXtsZXQgcz1hLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX10Ll9jYWNoZUluZGV4PWkubGVuZ3RoLGkucHVzaCh0KSxhLmFjdGlvbkJ5Um9vdFtuXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49cltyLmxlbmd0aC0xXSxpPXQuX2NhY2hlSW5kZXg7bi5fY2FjaGVJbmRleD1pLHJbaV09bixyLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQsYT10aGlzLl9hY3Rpb25zQnlDbGlwLHM9YVtvXSxsPXMua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbDtsZXQgaD1zLmFjdGlvbkJ5Um9vdCxmPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQ7ZGVsZXRlIGhbZl0sbC5sZW5ndGg9PT0wJiZkZWxldGUgYVtvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnJlZmVyZW5jZUNvdW50PT09MCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC5fY2FjaGVJbmRleCxpPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2FkZEluYWN0aXZlQmluZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3MsYT1pW3JdO2E9PT12b2lkIDAmJihhPXt9LGlbcl09YSksYVtuXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10LmJpbmRpbmcsaT1uLnJvb3ROb2RlLnV1aWQsbz1uLnBhdGgsYT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUscz1hW2ldLGw9cltyLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLHJbY109bCxyLnBvcCgpLGRlbGV0ZSBzW29dLE9iamVjdC5rZXlzKHMpLmxlbmd0aD09PTAmJmRlbGV0ZSBhW2ldfV9sZW5kQmluZGluZyh0KXtsZXQgcj10aGlzLl9iaW5kaW5ncyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMscj10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLG49dFtyXTtyZXR1cm4gbj09PXZvaWQgMCYmKG49bmV3IFM2KG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLG4uX19jYWNoZUluZGV4PXIsdFtyXT1uKSxufV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgcj10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLG49dC5fX2NhY2hlSW5kZXgsaT0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89cltpXTt0Ll9fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9fY2FjaGVJbmRleD1uLHJbbl09b31jbGlwQWN0aW9uKHQscixuKXtsZXQgaT1yfHx0aGlzLl9yb290LG89aS51dWlkLGE9dHlwZW9mIHQ9PSJzdHJpbmciP1ExLmZpbmRCeU5hbWUoaSx0KTp0LHM9YSE9PW51bGw/YS51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW3NdLGM9bnVsbDtpZihuPT09dm9pZCAwJiYoYSE9PW51bGw/bj1hLmJsZW5kTW9kZTpuPSRVKSxsIT09dm9pZCAwKXtsZXQgaD1sLmFjdGlvbkJ5Um9vdFtvXTtpZihoIT09dm9pZCAwJiZoLmJsZW5kTW9kZT09PW4pcmV0dXJuIGg7Yz1sLmtub3duQWN0aW9uc1swXSxhPT09bnVsbCYmKGE9Yy5fY2xpcCl9aWYoYT09PW51bGwpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGZodCh0aGlzLGEscixuKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUscyxvKSx1fWV4aXN0aW5nQWN0aW9uKHQscil7bGV0IG49cnx8dGhpcy5fcm9vdCxpPW4udXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9RMS5maW5kQnlOYW1lKG4sdCk6dCxhPW8/by51dWlkOnQscz10aGlzLl9hY3Rpb25zQnlDbGlwW2FdO3JldHVybiBzIT09dm9pZCAwJiZzLmFjdGlvbkJ5Um9vdFtpXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxyPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgbj1yLTE7bj49MDstLW4pdFtuXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCByPXRoaXMuX2FjdGlvbnMsbj10aGlzLl9uQWN0aXZlQWN0aW9ucyxpPXRoaXMudGltZSs9dCxvPU1hdGguc2lnbih0KSxhPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09bjsrK2MpcltjXS5fdXBkYXRlKGksdCxvLGEpO2xldCBzPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylzW2NdLmFwcGx5KGEpO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCByPTA7cjx0aGlzLl9hY3Rpb25zLmxlbmd0aDtyKyspdGhpcy5fYWN0aW9uc1tyXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgcj10aGlzLl9hY3Rpb25zLG49dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcCxvPWlbbl07aWYobyE9PXZvaWQgMCl7bGV0IGE9by5rbm93bkFjdGlvbnM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWFbc107dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9cltyLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxyW3VdPWgsci5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSBpW25dfX11bmNhY2hlUm9vdCh0KXtsZXQgcj10LnV1aWQsbj10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgYSBpbiBuKXtsZXQgcz1uW2FdLmFjdGlvbkJ5Um9vdCxsPXNbcl07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPWlbcl07aWYobyE9PXZvaWQgMClmb3IobGV0IGEgaW4gbyl7bGV0IHM9b1thXTtzLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHMpfX11bmNhY2hlQWN0aW9uKHQscil7bGV0IG49dGhpcy5leGlzdGluZ0FjdGlvbih0LHIpO24hPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihuKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihuKSl9fTtWVS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZ009Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGdNKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0sVVU9Y2xhc3MgZXh0ZW5kcyBlbXtjb25zdHJ1Y3Rvcih0LHIsbj0xKXtzdXBlcih0LHIpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1ufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCByPXN1cGVyLmNsb25lKHQpO3JldHVybiByLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLHIubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUscn19O1VVLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBxVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPXIsdGhpcy5pdGVtU2l6ZT1uLHRoaXMuZWxlbWVudFNpemU9aSx0aGlzLmNvdW50PW8sdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LHIpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPXIsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07cVUucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIHBodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MS8wKXt0aGlzLnJheT1uZXcgSmYodCxyKSx0aGlzLm5lYXI9bix0aGlzLmZhcj1pLHRoaXMuY2FtZXJhPW51bGwsdGhpcy5sYXllcnM9bmV3IFgzLHRoaXMucGFyYW1zPXtNZXNoOnt9LExpbmU6e3RocmVzaG9sZDoxfSxMT0Q6e30sUG9pbnRzOnt0aHJlc2hvbGQ6MX0sU3ByaXRlOnt9fX1zZXQodCxyKXt0aGlzLnJheS5zZXQodCxyKX1zZXRGcm9tQ2FtZXJhKHQscil7ciYmci5pc1BlcnNwZWN0aXZlQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHIubWF0cml4V29ybGQpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQodC54LHQueSwuNSkudW5wcm9qZWN0KHIpLnN1Yih0aGlzLnJheS5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXMuY2FtZXJhPXIpOnImJnIuaXNPcnRob2dyYXBoaWNDYW1lcmE/KHRoaXMucmF5Lm9yaWdpbi5zZXQodC54LHQueSwoci5uZWFyK3IuZmFyKS8oci5uZWFyLXIuZmFyKSkudW5wcm9qZWN0KHIpLHRoaXMucmF5LmRpcmVjdGlvbi5zZXQoMCwwLC0xKS50cmFuc2Zvcm1EaXJlY3Rpb24oci5tYXRyaXhXb3JsZCksdGhpcy5jYW1lcmE9cik6Y29uc29sZS5lcnJvcigiVEhSRUUuUmF5Y2FzdGVyOiBVbnN1cHBvcnRlZCBjYW1lcmEgdHlwZTogIityLnR5cGUpfWludGVyc2VjdE9iamVjdCh0LHI9ITAsbj1bXSl7cmV0dXJuIGRodCh0LHRoaXMsbixyKSxuLnNvcnQoQ2hlKSxufWludGVyc2VjdE9iamVjdHModCxyPSEwLG49W10pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKylkaHQodFtpXSx0aGlzLG4scik7cmV0dXJuIG4uc29ydChDaGUpLG59fTtmdW5jdGlvbiBDaGUoZSx0KXtyZXR1cm4gZS5kaXN0YW5jZS10LmRpc3RhbmNlfWZ1bmN0aW9uIGRodChlLHQscixuKXtpZihlLmxheWVycy50ZXN0KHQubGF5ZXJzKSYmZS5yYXljYXN0KHQsciksbj09PSEwKXtsZXQgaT1lLmNoaWxkcmVuO2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKylkaHQoaVtvXSx0LHIsITApfX12YXIgX009Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMucGhpPXIsdGhpcy50aGV0YT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMucGhpPXQucGhpLHRoaXMudGhldGE9dC50aGV0YSx0aGlzfW1ha2VTYWZlKCl7cmV0dXJuIHRoaXMucGhpPU1hdGgubWF4KDFlLTYsTWF0aC5taW4oTWF0aC5QSS0xZS02LHRoaXMucGhpKSksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtyKnIrbipuKSx0aGlzLnJhZGl1cz09PTA/KHRoaXMudGhldGE9MCx0aGlzLnBoaT0wKToodGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy5waGk9TWF0aC5hY29zKFpvKHIvdGhpcy5yYWRpdXMsLTEsMSkpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LG1odD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTEscj0wLG49MCl7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9c2V0KHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnRoZXRhPXIsdGhpcy55PW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnRoZXRhPXQudGhldGEsdGhpcy55PXQueSx0aGlzfXNldEZyb21WZWN0b3IzKHQpe3JldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModC54LHQueSx0LnopfXNldEZyb21DYXJ0ZXNpYW5Db29yZHModCxyLG4pe3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQodCp0K24qbiksdGhpcy50aGV0YT1NYXRoLmF0YW4yKHQsbiksdGhpcy55PXIsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxBaGU9bmV3IEx0LCQwPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEx0KDEvMCwxLzApLHI9bmV3IEx0KC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KHIpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1BaGUuY29weShyKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKG4pLHRoaXMubWF4LmNvcHkodCkuYWRkKG4pLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxyKXtyZXR1cm4gci5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBBaGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19OyQwLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIFBoZT1uZXcgaixZVj1uZXcgaixHVT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqLHI9bmV3IGope3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfXNldCh0LHIpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodCksdGhpcy5lbmQuY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuc3RhcnQuY29weSh0LnN0YXJ0KSx0aGlzLmVuZC5jb3B5KHQuZW5kKSx0aGlzfWdldENlbnRlcih0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuc3RhcnQsdGhpcy5lbmQpLm11bHRpcGx5U2NhbGFyKC41KX1kZWx0YSh0KXtyZXR1cm4gdC5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpfWRpc3RhbmNlU3EoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvU3F1YXJlZCh0aGlzLmVuZCl9ZGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5zdGFydC5kaXN0YW5jZVRvKHRoaXMuZW5kKX1hdCh0LHIpe3JldHVybiB0aGlzLmRlbHRhKHIpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnN0YXJ0KX1jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscil7UGhlLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSxZVi5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBuPVlWLmRvdChZViksbz1ZVi5kb3QoUGhlKS9uO3JldHVybiByJiYobz1abyhvLDAsMSkpLG99Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIsbil7bGV0IGk9dGhpcy5jbG9zZXN0UG9pbnRUb1BvaW50UGFyYW1ldGVyKHQscik7cmV0dXJuIHRoaXMuZGVsdGEobikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMuc3RhcnQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5zdGFydC5hcHBseU1hdHJpeDQodCksdGhpcy5lbmQuYXBwbHlNYXRyaXg0KHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnN0YXJ0LmVxdWFscyh0aGlzLnN0YXJ0KSYmdC5lbmQuZXF1YWxzKHRoaXMuZW5kKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxJaGU9bmV3IGosZ2h0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1yO2xldCBuPW5ldyBQZSxpPVswLDAsMCwwLDAsMSwwLDAsMCwxLDAsMSwwLDAsMCwtMSwwLDEsMCwwLDAsMCwxLDEsMCwwLDAsMCwtMSwxXTtmb3IobGV0IGE9MCxzPTEsbD0zMjthPGw7YSsrLHMrKyl7bGV0IGM9YS9sKk1hdGguUEkqMix1PXMvbCpNYXRoLlBJKjI7aS5wdXNoKE1hdGguY29zKGMpLE1hdGguc2luKGMpLDEsTWF0aC5jb3ModSksTWF0aC5zaW4odSksMSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMuY29uZT1uZXcgQWEobixvKSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY29uZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5jb25lLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXt0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IHQ9dGhpcy5saWdodC5kaXN0YW5jZT90aGlzLmxpZ2h0LmRpc3RhbmNlOjFlMyxyPXQqTWF0aC50YW4odGhpcy5saWdodC5hbmdsZSk7dGhpcy5jb25lLnNjYWxlLnNldChyLHIsdCksSWhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0LnRhcmdldC5tYXRyaXhXb3JsZCksdGhpcy5jb25lLmxvb2tBdChJaGUpLHRoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3IuY29weSh0aGlzLmxpZ2h0LmNvbG9yKX19LE8wPW5ldyBqLGpWPW5ldyBNZSxidXQ9bmV3IE1lLFdVPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9ZXBlKHQpLG49bmV3IFBlLGk9W10sbz1bXSxhPW5ldyBuZSgwLDAsMSkscz1uZXcgbmUoMCwxLDApO2ZvcihsZXQgYz0wO2M8ci5sZW5ndGg7YysrKXtsZXQgdT1yW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihpLnB1c2goMCwwLDApLGkucHVzaCgwLDAsMCksby5wdXNoKGEucixhLmcsYS5iKSxvLnB1c2gocy5yLHMuZyxzLmIpKX1uLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxuLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShvLDMpKTtsZXQgbD1uZXcgR2koe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSk7c3VwZXIobixsKSx0aGlzLnR5cGU9IlNrZWxldG9uSGVscGVyIix0aGlzLmlzU2tlbGV0b25IZWxwZXI9ITAsdGhpcy5yb290PXQsdGhpcy5ib25lcz1yLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmdlb21ldHJ5LGk9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7YnV0LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxhPTA7bzxyLmxlbmd0aDtvKyspe2xldCBzPXJbb107cy5wYXJlbnQmJnMucGFyZW50LmlzQm9uZSYmKGpWLm11bHRpcGx5TWF0cmljZXMoYnV0LHMubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSxPMC54LE8wLnksTzAueiksalYubXVsdGlwbHlNYXRyaWNlcyhidXQscy5wYXJlbnQubWF0cml4V29ybGQpLE8wLnNldEZyb21NYXRyaXhQb3NpdGlvbihqViksaS5zZXRYWVooYSsxLE8wLngsTzAueSxPMC56KSxhKz0yKX1uLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMCxzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KX19O2Z1bmN0aW9uIGVwZShlKXtsZXQgdD1bXTtlJiZlLmlzQm9uZSYmdC5wdXNoKGUpO2ZvcihsZXQgcj0wO3I8ZS5jaGlsZHJlbi5sZW5ndGg7cisrKXQucHVzaC5hcHBseSh0LGVwZShlLmNoaWxkcmVuW3JdKSk7cmV0dXJuIHR9dmFyIF9odD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQscixuKXtsZXQgaT1uZXcgajAociw0LDIpLG89bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihpLG8pLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5jb2xvcj1uLHRoaXMudHlwZT0iUG9pbnRMaWdodEhlbHBlciIsdGhpcy5tYXRyaXg9dGhpcy5saWdodC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5jb2xvciE9PXZvaWQgMD90aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTp0aGlzLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSx2MHI9bmV3IGosTGhlPW5ldyBuZSxraGU9bmV3IG5lLHlodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uO2xldCBpPW5ldyBXMChyKTtpLnJvdGF0ZVkoTWF0aC5QSSouNSksdGhpcy5tYXRlcmlhbD1uZXcgc2goe3dpcmVmcmFtZTohMCxmb2c6ITEsdG9uZU1hcHBlZDohMX0pLHRoaXMuY29sb3I9PT12b2lkIDAmJih0aGlzLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMCk7bGV0IG89aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIiksYT1uZXcgRmxvYXQzMkFycmF5KG8uY291bnQqMyk7aS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoYSwzKSksdGhpcy5hZGQobmV3IHRpKGksdGhpcy5tYXRlcmlhbCkpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuY2hpbGRyZW5bMF0uZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuY2hpbGRyZW5bMF07aWYodGhpcy5jb2xvciE9PXZvaWQgMCl0aGlzLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKTtlbHNle2xldCByPXQuZ2VvbWV0cnkuZ2V0QXR0cmlidXRlKCJjb2xvciIpO0xoZS5jb3B5KHRoaXMubGlnaHQuY29sb3IpLGtoZS5jb3B5KHRoaXMubGlnaHQuZ3JvdW5kQ29sb3IpO2ZvcihsZXQgbj0wLGk9ci5jb3VudDtuPGk7bisrKXtsZXQgbz1uPGkvMj9MaGU6a2hlO3Iuc2V0WFlaKG4sby5yLG8uZyxvLmIpfXIubmVlZHNVcGRhdGU9ITB9dC5sb29rQXQodjByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKS5uZWdhdGUoKSl9fSxZVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xMCxuPTQ0NzM5MjQsaT04OTQ3ODQ4KXtuPW5ldyBuZShuKSxpPW5ldyBuZShpKTtsZXQgbz1yLzIsYT10L3Iscz10LzIsbD1bXSxjPVtdO2ZvcihsZXQgZj0wLHA9MCxkPS1zO2Y8PXI7ZisrLGQrPWEpe2wucHVzaCgtcywwLGQscywwLGQpLGwucHVzaChkLDAsLXMsZCwwLHMpO2xldCBnPWY9PT1vP246aTtnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zfWxldCB1PW5ldyBQZTt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShjLDMpKTtsZXQgaD1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIodSxoKSx0aGlzLnR5cGU9IkdyaWRIZWxwZXIifX0sdmh0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xMCxyPTE2LG49OCxpPTY0LG89NDQ3MzkyNCxhPTg5NDc4NDgpe289bmV3IG5lKG8pLGE9bmV3IG5lKGEpO2xldCBzPVtdLGw9W107Zm9yKGxldCBoPTA7aDw9cjtoKyspe2xldCBmPWgvciooTWF0aC5QSSoyKSxwPU1hdGguc2luKGYpKnQsZD1NYXRoLmNvcyhmKSp0O3MucHVzaCgwLDAsMCkscy5wdXNoKHAsMCxkKTtsZXQgZz1oJjE/bzphO2wucHVzaChnLnIsZy5nLGcuYiksbC5wdXNoKGcucixnLmcsZy5iKX1mb3IobGV0IGg9MDtoPD1uO2grKyl7bGV0IGY9aCYxP286YSxwPXQtdC9uKmg7Zm9yKGxldCBkPTA7ZDxpO2QrKyl7bGV0IGc9ZC9pKihNYXRoLlBJKjIpLF89TWF0aC5zaW4oZykqcCx5PU1hdGguY29zKGcpKnA7cy5wdXNoKF8sMCx5KSxsLnB1c2goZi5yLGYuZyxmLmIpLGc9KGQrMSkvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwLHMucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKX19bGV0IGM9bmV3IFBlO2Muc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGMuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKGwsMykpO2xldCB1PW5ldyBHaSh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcihjLHUpLHRoaXMudHlwZT0iUG9sYXJHcmlkSGVscGVyIn19LFJoZT1uZXcgaixYVj1uZXcgaixOaGU9bmV3IGoseGh0PWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5saWdodD10LHRoaXMubGlnaHQudXBkYXRlTWF0cml4V29ybGQoKSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmNvbG9yPW4scj09PXZvaWQgMCYmKHI9MSk7bGV0IGk9bmV3IFBlO2kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFstcixyLDAscixyLDAsciwtciwwLC1yLC1yLDAsLXIsciwwXSwzKSk7bGV0IG89bmV3IEdpKHtmb2c6ITEsdG9uZU1hcHBlZDohMX0pO3RoaXMubGlnaHRQbGFuZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLmxpZ2h0UGxhbmUpLGk9bmV3IFBlLGkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDAsMV0sMykpLHRoaXMudGFyZ2V0TGluZT1uZXcgY2goaSxvKSx0aGlzLmFkZCh0aGlzLnRhcmdldExpbmUpLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMubGlnaHRQbGFuZS5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7UmhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLmxpZ2h0Lm1hdHJpeFdvcmxkKSxYVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLE5oZS5zdWJWZWN0b3JzKFhWLFJoZSksdGhpcy5saWdodFBsYW5lLmxvb2tBdChYViksdGhpcy5jb2xvciE9PXZvaWQgMD8odGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHRoaXMuY29sb3IpKToodGhpcy5saWdodFBsYW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcikpLHRoaXMudGFyZ2V0TGluZS5sb29rQXQoWFYpLHRoaXMudGFyZ2V0TGluZS5zY2FsZS56PU5oZS5sZW5ndGgoKX19LCRWPW5ldyBqLF9pPW5ldyBSMSxiaHQ9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0KXtsZXQgcj1uZXcgUGUsbj1uZXcgR2koe2NvbG9yOjE2Nzc3MjE1LHZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSksaT1bXSxvPVtdLGE9e30scz1uZXcgbmUoMTY3NTUyMDApLGw9bmV3IG5lKDE2NzExNjgwKSxjPW5ldyBuZSg0Mzc3NSksdT1uZXcgbmUoMTY3NzcyMTUpLGg9bmV3IG5lKDMzNTU0NDMpO2YoIm4xIiwibjIiLHMpLGYoIm4yIiwibjQiLHMpLGYoIm40IiwibjMiLHMpLGYoIm4zIiwibjEiLHMpLGYoImYxIiwiZjIiLHMpLGYoImYyIiwiZjQiLHMpLGYoImY0IiwiZjMiLHMpLGYoImYzIiwiZjEiLHMpLGYoIm4xIiwiZjEiLHMpLGYoIm4yIiwiZjIiLHMpLGYoIm4zIiwiZjMiLHMpLGYoIm40IiwiZjQiLHMpLGYoInAiLCJuMSIsbCksZigicCIsIm4yIixsKSxmKCJwIiwibjMiLGwpLGYoInAiLCJuNCIsbCksZigidTEiLCJ1MiIsYyksZigidTIiLCJ1MyIsYyksZigidTMiLCJ1MSIsYyksZigiYyIsInQiLHUpLGYoInAiLCJjIixoKSxmKCJjbjEiLCJjbjIiLGgpLGYoImNuMyIsImNuNCIsaCksZigiY2YxIiwiY2YyIixoKSxmKCJjZjMiLCJjZjQiLGgpO2Z1bmN0aW9uIGYoZCxnLF8pe3AoZCxfKSxwKGcsXyl9ZnVuY3Rpb24gcChkLGcpe2kucHVzaCgwLDAsMCksby5wdXNoKGcucixnLmcsZy5iKSxhW2RdPT09dm9pZCAwJiYoYVtkXT1bXSksYVtkXS5wdXNoKGkubGVuZ3RoLzMtMSl9ci5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksci5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSksc3VwZXIocixuKSx0aGlzLnR5cGU9IkNhbWVyYUhlbHBlciIsdGhpcy5jYW1lcmE9dCx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4JiZ0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5wb2ludE1hcD1hLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeSxyPXRoaXMucG9pbnRNYXAsbj0xLGk9MTtfaS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuY2FtZXJhLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSxQaSgiYyIscix0LF9pLDAsMCwtMSksUGkoInQiLHIsdCxfaSwwLDAsMSksUGkoIm4xIixyLHQsX2ksLW4sLWksLTEpLFBpKCJuMiIscix0LF9pLG4sLWksLTEpLFBpKCJuMyIscix0LF9pLC1uLGksLTEpLFBpKCJuNCIscix0LF9pLG4saSwtMSksUGkoImYxIixyLHQsX2ksLW4sLWksMSksUGkoImYyIixyLHQsX2ksbiwtaSwxKSxQaSgiZjMiLHIsdCxfaSwtbixpLDEpLFBpKCJmNCIscix0LF9pLG4saSwxKSxQaSgidTEiLHIsdCxfaSxuKi43LGkqMS4xLC0xKSxQaSgidTIiLHIsdCxfaSwtbiouNyxpKjEuMSwtMSksUGkoInUzIixyLHQsX2ksMCxpKjIsLTEpLFBpKCJjZjEiLHIsdCxfaSwtbiwwLDEpLFBpKCJjZjIiLHIsdCxfaSxuLDAsMSksUGkoImNmMyIscix0LF9pLDAsLWksMSksUGkoImNmNCIscix0LF9pLDAsaSwxKSxQaSgiY24xIixyLHQsX2ksLW4sMCwtMSksUGkoImNuMiIscix0LF9pLG4sMCwtMSksUGkoImNuMyIscix0LF9pLDAsLWksLTEpLFBpKCJjbjQiLHIsdCxfaSwwLGksLTEpLHQuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19O2Z1bmN0aW9uIFBpKGUsdCxyLG4saSxvLGEpeyRWLnNldChpLG8sYSkudW5wcm9qZWN0KG4pO2xldCBzPXRbZV07aWYocyE9PXZvaWQgMCl7bGV0IGw9ci5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKWwuc2V0WFlaKHNbY10sJFYueCwkVi55LCRWLnopfX12YXIgS1Y9bmV3IHRhLHlNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1uZXcgRmxvYXQzMkFycmF5KDgqMyksbz1uZXcgUGU7by5zZXRJbmRleChuZXcgSmUobiwxKSksby5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoaSwzKSksc3VwZXIobyxuZXcgR2koe2NvbG9yOnIsdG9uZU1hcHBlZDohMX0pKSx0aGlzLm9iamVjdD10LHRoaXMudHlwZT0iQm94SGVscGVyIix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy51cGRhdGUoKX11cGRhdGUodCl7aWYodCE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5Cb3hIZWxwZXI6IC51cGRhdGUoKSBoYXMgbm8gbG9uZ2VyIGFyZ3VtZW50cy4iKSx0aGlzLm9iamVjdCE9PXZvaWQgMCYmS1Yuc2V0RnJvbU9iamVjdCh0aGlzLm9iamVjdCksS1YuaXNFbXB0eSgpKXJldHVybjtsZXQgcj1LVi5taW4sbj1LVi5tYXgsaT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24sbz1pLmFycmF5O29bMF09bi54LG9bMV09bi55LG9bMl09bi56LG9bM109ci54LG9bNF09bi55LG9bNV09bi56LG9bNl09ci54LG9bN109ci55LG9bOF09bi56LG9bOV09bi54LG9bMTBdPXIueSxvWzExXT1uLnosb1sxMl09bi54LG9bMTNdPW4ueSxvWzE0XT1yLnosb1sxNV09ci54LG9bMTZdPW4ueSxvWzE3XT1yLnosb1sxOF09ci54LG9bMTldPXIueSxvWzIwXT1yLnosb1syMV09bi54LG9bMjJdPXIueSxvWzIzXT1yLnosaS5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXNldEZyb21PYmplY3QodCl7cmV0dXJuIHRoaXMub2JqZWN0PXQsdGhpcy51cGRhdGUoKSx0aGlzfWNvcHkodCl7cmV0dXJuIEFhLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLm9iamVjdD10Lm9iamVjdCx0aGlzfX0sd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCxyPTE2Nzc2OTYwKXtsZXQgbj1uZXcgVWludDE2QXJyYXkoWzAsMSwxLDIsMiwzLDMsMCw0LDUsNSw2LDYsNyw3LDQsMCw0LDEsNSwyLDYsMyw3XSksaT1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwtMSwtMSwxLC0xLC0xLC0xLC0xLDEsLTEsLTFdLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5ib3g9dCx0aGlzLnR5cGU9IkJveDNIZWxwZXIiLHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IHI9dGhpcy5ib3g7ci5pc0VtcHR5KCl8fChyLmdldENlbnRlcih0aGlzLnBvc2l0aW9uKSxyLmdldFNpemUodGhpcy5zY2FsZSksdGhpcy5zY2FsZS5tdWx0aXBseVNjYWxhciguNSksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCkpfX0sU2h0PWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyPTEsbj0xNjc3Njk2MCl7bGV0IGk9bixvPVsxLC0xLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwtMSwxLDEsMSwxLDAsMCwxLDAsMCwwXSxhPW5ldyBQZTthLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSxhLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHN1cGVyKGEsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJQbGFuZUhlbHBlciIsdGhpcy5wbGFuZT10LHRoaXMuc2l6ZT1yO2xldCBzPVsxLDEsMSwtMSwxLDEsLTEsLTEsMSwxLDEsMSwtMSwtMSwxLDEsLTEsMV0sbD1uZXcgUGU7bC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocywzKSksbC5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzLmFkZChuZXcgdGkobCxuZXcgc2goe2NvbG9yOmksb3BhY2l0eTouMix0cmFuc3BhcmVudDohMCxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITF9KSkpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPS10aGlzLnBsYW5lLmNvbnN0YW50O01hdGguYWJzKHIpPDFlLTgmJihyPTFlLTgpLHRoaXMuc2NhbGUuc2V0KC41KnRoaXMuc2l6ZSwuNSp0aGlzLnNpemUsciksdGhpcy5jaGlsZHJlblswXS5tYXRlcmlhbC5zaWRlPXI8MD9JaTpJMSx0aGlzLmxvb2tBdCh0aGlzLnBsYW5lLm5vcm1hbCksc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fSxEaGU9bmV3IGosWlYsd3V0LE1odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQ9bmV3IGooMCwwLDEpLHI9bmV3IGooMCwwLDApLG49MSxpPTE2Nzc2OTYwLG89biouMixhPW8qLjIpe3N1cGVyKCksdGhpcy50eXBlPSJBcnJvd0hlbHBlciIsWlY9PT12b2lkIDAmJihaVj1uZXcgUGUsWlYuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKFswLDAsMCwwLDEsMF0sMykpLHd1dD1uZXcgb20oMCwuNSwxLDUsMSksd3V0LnRyYW5zbGF0ZSgwLC0uNSwwKSksdGhpcy5wb3NpdGlvbi5jb3B5KHIpLHRoaXMubGluZT1uZXcgY2goWlYsbmV3IEdpKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5saW5lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5saW5lKSx0aGlzLmNvbmU9bmV3IHRpKHd1dCxuZXcgc2goe2NvbG9yOmksdG9uZU1hcHBlZDohMX0pKSx0aGlzLmNvbmUubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLmFkZCh0aGlzLmNvbmUpLHRoaXMuc2V0RGlyZWN0aW9uKHQpLHRoaXMuc2V0TGVuZ3RoKG4sbyxhKX1zZXREaXJlY3Rpb24odCl7aWYodC55Pi45OTk5OSl0aGlzLnF1YXRlcm5pb24uc2V0KDAsMCwwLDEpO2Vsc2UgaWYodC55PC0uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgxLDAsMCwwKTtlbHNle0RoZS5zZXQodC56LDAsLXQueCkubm9ybWFsaXplKCk7bGV0IHI9TWF0aC5hY29zKHQueSk7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUoRGhlLHIpfX1zZXRMZW5ndGgodCxyPXQqLjIsbj1yKi4yKXt0aGlzLmxpbmUuc2NhbGUuc2V0KDEsTWF0aC5tYXgoMWUtNCx0LXIpLDEpLHRoaXMubGluZS51cGRhdGVNYXRyaXgoKSx0aGlzLmNvbmUuc2NhbGUuc2V0KG4scixuKSx0aGlzLmNvbmUucG9zaXRpb24ueT10LHRoaXMuY29uZS51cGRhdGVNYXRyaXgoKX1zZXRDb2xvcih0KXt0aGlzLmxpbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpLHRoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0LCExKSx0aGlzLmxpbmUuY29weSh0LmxpbmUpLHRoaXMuY29uZS5jb3B5KHQuY29uZSksdGhpc319LHZNPWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodD0xKXtsZXQgcj1bMCwwLDAsdCwwLDAsMCwwLDAsMCx0LDAsMCwwLDAsMCwwLHRdLG49WzEsMCwwLDEsLjYsMCwwLDEsMCwuNiwxLDAsMCwwLDEsMCwuNiwxXSxpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShuLDMpKTtsZXQgbz1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLnR5cGU9IkF4ZXNIZWxwZXIifXNldENvbG9ycyh0LHIsbil7bGV0IGk9bmV3IG5lLG89dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yLmFycmF5O3JldHVybiBpLnNldCh0KSxpLnRvQXJyYXkobywwKSxpLnRvQXJyYXkobywzKSxpLnNldChyKSxpLnRvQXJyYXkobyw2KSxpLnRvQXJyYXkobyw5KSxpLnNldChuKSxpLnRvQXJyYXkobywxMiksaS50b0FycmF5KG8sMTUpLHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5uZWVkc1VwZGF0ZT0hMCx0aGlzfWRpc3Bvc2UoKXt0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKX19LEVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudHlwZT0iU2hhcGVQYXRoIix0aGlzLmNvbG9yPW5ldyBuZSx0aGlzLnN1YlBhdGhzPVtdLHRoaXMuY3VycmVudFBhdGg9bnVsbH1tb3ZlVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aD1uZXcgcTEsdGhpcy5zdWJQYXRocy5wdXNoKHRoaXMuY3VycmVudFBhdGgpLHRoaXMuY3VycmVudFBhdGgubW92ZVRvKHQsciksdGhpc31saW5lVG8odCxyKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5saW5lVG8odCxyKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgucXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKSx0aGlzfWJlemllckN1cnZlVG8odCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLmJlemllckN1cnZlVG8odCxyLG4saSxvLGEpLHRoaXN9c3BsaW5lVGhydSh0KXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5zcGxpbmVUaHJ1KHQpLHRoaXN9dG9TaGFwZXModCxyKXtmdW5jdGlvbiBuKHgpe2xldCBiPVtdO2ZvcihsZXQgUz0wLEM9eC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9eFtTXSxrPW5ldyBLYztrLmN1cnZlcz1QLmN1cnZlcyxiLnB1c2goayl9cmV0dXJuIGJ9ZnVuY3Rpb24gaSh4LGIpe2xldCBTPWIubGVuZ3RoLEM9ITE7Zm9yKGxldCBQPVMtMSxrPTA7azxTO1A9aysrKXtsZXQgTz1iW1BdLEQ9YltrXSxCPUQueC1PLngsST1ELnktTy55O2lmKE1hdGguYWJzKEkpPk51bWJlci5FUFNJTE9OKXtpZihJPDAmJihPPWJba10sQj0tQixEPWJbUF0sST0tSSkseC55PE8ueXx8eC55PkQueSljb250aW51ZTtpZih4Lnk9PT1PLnkpe2lmKHgueD09PU8ueClyZXR1cm4hMH1lbHNle2xldCBMPUkqKHgueC1PLngpLUIqKHgueS1PLnkpO2lmKEw9PT0wKXJldHVybiEwO2lmKEw8MCljb250aW51ZTtDPSFDfX1lbHNle2lmKHgueSE9PU8ueSljb250aW51ZTtpZihELng8PXgueCYmeC54PD1PLnh8fE8ueDw9eC54JiZ4Lng8PUQueClyZXR1cm4hMH19cmV0dXJuIEN9bGV0IG89WmMuaXNDbG9ja1dpc2UsYT10aGlzLnN1YlBhdGhzO2lmKGEubGVuZ3RoPT09MClyZXR1cm5bXTtpZihyPT09ITApcmV0dXJuIG4oYSk7bGV0IHMsbCxjLHU9W107aWYoYS5sZW5ndGg9PT0xKXJldHVybiBsPWFbMF0sYz1uZXcgS2MsYy5jdXJ2ZXM9bC5jdXJ2ZXMsdS5wdXNoKGMpLHU7bGV0IGg9IW8oYVswXS5nZXRQb2ludHMoKSk7aD10PyFoOmg7bGV0IGY9W10scD1bXSxkPVtdLGc9MCxfO3BbZ109dm9pZCAwLGRbZ109W107Zm9yKGxldCB4PTAsYj1hLmxlbmd0aDt4PGI7eCsrKWw9YVt4XSxfPWwuZ2V0UG9pbnRzKCkscz1vKF8pLHM9dD8hczpzLHM/KCFoJiZwW2ddJiZnKysscFtnXT17czpuZXcgS2MscDpffSxwW2ddLnMuY3VydmVzPWwuY3VydmVzLGgmJmcrKyxkW2ddPVtdKTpkW2ddLnB1c2goe2g6bCxwOl9bMF19KTtpZighcFswXSlyZXR1cm4gbihhKTtpZihwLmxlbmd0aD4xKXtsZXQgeD0hMSxiPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKylmW1NdPVtdO2ZvcihsZXQgUz0wLEM9cC5sZW5ndGg7UzxDO1MrKyl7bGV0IFA9ZFtTXTtmb3IobGV0IGs9MDtrPFAubGVuZ3RoO2srKyl7bGV0IE89UFtrXSxEPSEwO2ZvcihsZXQgQj0wO0I8cC5sZW5ndGg7QisrKWkoTy5wLHBbQl0ucCkmJihTIT09QiYmYi5wdXNoKHtmcm9tczpTLHRvczpCLGhvbGU6a30pLEQ/KEQ9ITEsZltCXS5wdXNoKE8pKTp4PSEwKTtEJiZmW1NdLnB1c2goTyl9fWIubGVuZ3RoPjAmJih4fHwoZD1mKSl9bGV0IHk7Zm9yKGxldCB4PTAsYj1wLmxlbmd0aDt4PGI7eCsrKXtjPXBbeF0ucyx1LnB1c2goYykseT1kW3hdO2ZvcihsZXQgUz0wLEM9eS5sZW5ndGg7UzxDO1MrKyljLmhvbGVzLnB1c2goeVtTXS5oKX1yZXR1cm4gdX19LHJwZT1uZXcgRmxvYXQzMkFycmF5KDEpLHgwcj1uZXcgSW50MzJBcnJheShycGUuYnVmZmVyKSxUaHQ9Y2xhc3N7c3RhdGljIHRvSGFsZkZsb2F0KHQpe3Q+NjU1MDQmJihjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFVdGlscy50b0hhbGZGbG9hdCgpOiB2YWx1ZSBleGNlZWRzIDY1NTA0LiIpLHQ9NjU1MDQpLHJwZVswXT10O2xldCByPXgwclswXSxuPXI+PjE2JjMyNzY4LGk9cj4+MTImMjA0NyxvPXI+PjIzJjI1NTtyZXR1cm4gbzwxMDM/bjpvPjE0Mj8obnw9MzE3NDQsbnw9KG89PTI1NT8wOjEpJiZyJjgzODg2MDcsbik6bzwxMTM/KGl8PTIwNDgsbnw9KGk+PjExNC1vKSsoaT4+MTEzLW8mMSksbik6KG58PW8tMTEyPDwxMHxpPj4xLG4rPWkmMSxuKX19LGIwcj0wLHcwcj0xLFMwcj0wLE0wcj0xLEUwcj0yO2Z1bmN0aW9uIFQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NZXNoRmFjZU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGV9ZnVuY3Rpb24gQzByKGU9W10pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk11bHRpTWF0ZXJpYWwgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGFuIEFycmF5IGluc3RlYWQuIiksZS5pc011bHRpTWF0ZXJpYWw9ITAsZS5tYXRlcmlhbHM9ZSxlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuc2xpY2UoKX0sZX1mdW5jdGlvbiBBMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIFAwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZSBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlNwcml0ZS4iKSxuZXcgb00oZSl9ZnVuY3Rpb24gSTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW0gaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHMuIiksbmV3IGltKGUsdCl9ZnVuY3Rpb24gTDByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBvaW50Q2xvdWRNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBrMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVCYXNpY01hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIFIwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QYXJ0aWNsZVN5c3RlbU1hdGVyaWFsIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzTWF0ZXJpYWwuIiksbmV3IG5tKGUpfWZ1bmN0aW9uIE4wcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVydGV4IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5WZWN0b3IzIGluc3RlYWQuIiksbmV3IGooZSx0LHIpfWZ1bmN0aW9uIEQwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkR5bmFtaWNCdWZmZXJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoKS5zZXRVc2FnZSggVEhSRUUuRHluYW1pY0RyYXdVc2FnZSApIGluc3RlYWQuIiksbmV3IEplKGUsdCkuc2V0VXNhZ2UoWTMpfWZ1bmN0aW9uIE8wcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgY1UoZSx0KX1mdW5jdGlvbiB6MHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQ4QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBGMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50OENsYW1wZWRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OENsYW1wZWRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBoVShlLHQpfWZ1bmN0aW9uIEIwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDE2QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIEgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQxNkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3ICQzKGUsdCl9ZnVuY3Rpb24gVjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50MzJBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5JbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHBVKGUsdCl9ZnVuY3Rpb24gVTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDMyQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgSzMoZSx0KX1mdW5jdGlvbiBxMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GbG9hdDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IHhlKGUsdCl9ZnVuY3Rpb24gRzByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQ2NEF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0NjRCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBtVShlLHQpfWZzLmNyZWF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZnMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldFBvaW50PXQsZX07cTEucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKGUpfTtmdW5jdGlvbiBXMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQXhpc0hlbHBlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkF4ZXNIZWxwZXIuIiksbmV3IHZNKGUpfWZ1bmN0aW9uIFkwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJvdW5kaW5nQm94SGVscGVyIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIENyZWF0aW5nIGEgVEhSRUUuQm94SGVscGVyIGluc3RlYWQuIiksbmV3IHlNKGUsdCl9ZnVuY3Rpb24gajByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRWRnZXNIZWxwZXIgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkVkZ2VzR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHM2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfVlVLnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9O1dVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2VsZXRvbkhlbHBlcjogdXBkYXRlKCkgbm8gbG9uZ2VyIG5lZWRzIHRvIGJlIGNhbGxlZC4iKX07ZnVuY3Rpb24gWDByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2lyZWZyYW1lSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5XaXJlZnJhbWVHZW9tZXRyeSBpbnN0ZWFkLiIpLG5ldyBBYShuZXcgZDYoZS5nZW9tZXRyeSksbmV3IEdpKHtjb2xvcjp0IT09dm9pZCAwP3Q6MTY3NzcyMTV9KSl9ZWEucHJvdG90eXBlLmV4dHJhY3RVcmxCYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxvYWRlcjogLmV4dHJhY3RVcmxCYXNlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkxvYWRlclV0aWxzLmV4dHJhY3RVcmxCYXNlKCkgaW5zdGVhZC4iKSxkTS5leHRyYWN0VXJsQmFzZShlKX07ZWEuSGFuZGxlcnM9e2FkZDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuYWRkKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmFkZEhhbmRsZXIoKSBpbnN0ZWFkLiIpfSxnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmdldCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5nZXRIYW5kbGVyKCkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uICQwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5YSFJMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5GaWxlTG9hZGVyLiIpLG5ldyBKYyhlKX1mdW5jdGlvbiBLMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQmluYXJ5VGV4dHVyZUxvYWRlciBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLkRhdGFUZXh0dXJlTG9hZGVyLiIpLG5ldyBDVShlKX0kMC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07JDAucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTskMC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07JDAucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKGUpfTt0YS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihlKX07dGEucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTt0YS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O3RhLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07WmYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O04xLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KGUpfTtHVS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O2tpLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O2tpLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtraS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXgzKHRoaXMpfTtraS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07TWUucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24oZSl9O01lLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KGUsdCl9O01lLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgaigpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07TWUucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oZSl9O01lLnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksZS50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O01lLnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4NCh0aGlzKX07TWUucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUoZSx0LG4scixpLG8pfTtNZS5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KGUpLmludmVydCgpfTskYy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKGUpfTt5aS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLGUuYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTt5aS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUoZSl9O0pmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoZSl9O29pLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtvaS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChlLHQpfTtvaS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChlKX07b2kucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwoZSl9O29pLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKGUpfTtvaS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLG9pLmdldEJhcnljb29yZChlLHQscixuLGkpfTtvaS5ub3JtYWw9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxvaS5nZXROb3JtYWwoZSx0LHIsbil9O0tjLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKGUpfTtLYy5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgaGgodGhpcyxlKX07S2MucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgWTAodGhpcyxlKX07THQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHQscil9O0x0LnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07THQucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtqLnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGUpfTtqLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKGUpfTtqLnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsZSl9O2oucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtqLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtqLnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhlKX07ai5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2VuLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtlbi5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O29yLnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUoZSl9O29yLnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtvci5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsZSl9O29yLnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMob3IucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPWV9fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTt0aS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksQWZlfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSk7YU0ucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtVaS5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihlLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx0IT09dm9pZCAwJiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChlKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoT2wucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9ZX19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1lfX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1lfX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9ZX19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPWV9fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9ZX19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPWV9fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPWV9fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9ZX19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9ZX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSmUucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09WTN9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShZMyl9fX0pO0plLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKGU9PT0hMD9ZMzpXMyksdGhpc307SmUucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSmUucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07UGUucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChlKX07UGUucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksISh0JiZ0LmlzQnVmZmVyQXR0cmlidXRlKSYmISh0JiZ0LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShlLG5ldyBKZShhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpOmU9PT0iaW5kZXgiPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShlLHQpfTtQZS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24oZSx0LHIpe3IhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChlLHQpfTtQZS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfTtQZS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtQZS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUoZSl9O1BlLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBlLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSk7ZW0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O2VtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX07aGgucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2hoLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3EwLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Z00ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc307T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocWkucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBuZX19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9ZT09PUFodH19LHN0ZW5jaWxNYXNrOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc3RlbmNpbE1hc2sgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5zdGVuY2lsRnVuY01hc2sgaW5zdGVhZC4iKSx0aGlzLnN0ZW5jaWxGdW5jTWFza30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2s9ZX19LHZlcnRleFRhbmdlbnRzOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC52ZXJ0ZXhUYW5nZW50cyBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsaC5wcm90b3R5cGUse2Rlcml2YXRpdmVzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlc30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuIFNoYWRlck1hdGVyaWFsOiAuZGVyaXZhdGl2ZXMgaGFzIGJlZW4gbW92ZWQgdG8gLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMuIiksdGhpcy5leHRlbnNpb25zLmRlcml2YXRpdmVzPWV9fX0pO3JuLnByb3RvdHlwZS5jbGVhclRhcmdldD1mdW5jdGlvbihlLHQscixuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jbGVhclRhcmdldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0UmVuZGVyVGFyZ2V0KCkgYW5kIC5jbGVhcigpIGluc3RlYWQuIiksdGhpcy5zZXRSZW5kZXJUYXJnZXQoZSksdGhpcy5jbGVhcih0LHIsbil9O3JuLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFuaW1hdGUoKSBpcyBub3cgLnNldEFuaW1hdGlvbkxvb3AoKS4iKSx0aGlzLnNldEFuaW1hdGlvbkxvb3AoZSl9O3JuLnByb3RvdHlwZS5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEN1cnJlbnRSZW5kZXJUYXJnZXQoKSBpcyBub3cgLmdldFJlbmRlclRhcmdldCgpLiIpLHRoaXMuZ2V0UmVuZGVyVGFyZ2V0KCl9O3JuLnByb3RvdHlwZS5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldE1heEFuaXNvdHJvcHkoKSBpcyBub3cgLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkuIiksdGhpcy5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpfTtybi5wcm90b3R5cGUuZ2V0UHJlY2lzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldFByZWNpc2lvbigpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnByZWNpc2lvbi4iKSx0aGlzLmNhcGFiaWxpdGllcy5wcmVjaXNpb259O3JuLnByb3RvdHlwZS5yZXNldEdMU3RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAucmVzZXRHTFN0YXRlKCkgaXMgbm93IC5zdGF0ZS5yZXNldCgpLiIpLHRoaXMuc3RhdGUucmVzZXQoKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzRmxvYXRUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfZmxvYXQnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiT0VTX3RleHR1cmVfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzU3RhbmRhcmREZXJpdmF0aXZlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVMzVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVQVlJUQz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNCbGVuZE1pbk1heD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0JsZW5kTWluTWF4KCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ0VYVF9ibGVuZF9taW5tYXgnICkuIiksdGhpcy5leHRlbnNpb25zLmdldCgiRVhUX2JsZW5kX21pbm1heCIpfTtybi5wcm90b3R5cGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c1ZlcnRleFRleHR1cmVzKCkgaXMgbm93IC5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXMuIiksdGhpcy5jYXBhYmlsaXRpZXMudmVydGV4VGV4dHVyZXN9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0luc3RhbmNlZEFycmF5cz1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zdXBwb3J0c0luc3RhbmNlZEFycmF5cygpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdBTkdMRV9pbnN0YW5jZWRfYXJyYXlzJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKX07cm4ucHJvdG90eXBlLmVuYWJsZVNjaXNzb3JUZXN0PWZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmVuYWJsZVNjaXNzb3JUZXN0KCkgaXMgbm93IC5zZXRTY2lzc29yVGVzdCgpLiIpLHRoaXMuc2V0U2Npc3NvclRlc3QoZSl9O3JuLnByb3RvdHlwZS5pbml0TWF0ZXJpYWw9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5pbml0TWF0ZXJpYWwoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuYWRkUHJlUGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUHJlUGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFBvc3RQbHVnaW49ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hZGRQb3N0UGx1Z2luKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnVwZGF0ZVNoYWRvd01hcD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnVwZGF0ZVNoYWRvd01hcCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRGYWNlQ3VsbGluZz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldEZhY2VDdWxsaW5nKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFsbG9jVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbGxvY1RleHR1cmVVbml0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLnNldFRleHR1cmUyRD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmUyRCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNldFRleHR1cmVDdWJlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmdldEFjdGl2ZU1pcE1hcExldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdldEFjdGl2ZU1pcE1hcExldmVsKCkgaXMgbm93IC5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLiIpLHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMocm4ucHJvdG90eXBlLHtzaGFkb3dNYXBFbmFibGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAuZW5hYmxlZH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEVuYWJsZWQgaXMgbm93IC5zaGFkb3dNYXAuZW5hYmxlZC4iKSx0aGlzLnNoYWRvd01hcC5lbmFibGVkPWV9fSxzaGFkb3dNYXBUeXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFkb3dNYXAudHlwZX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcFR5cGUgaXMgbm93IC5zaGFkb3dNYXAudHlwZS4iKSx0aGlzLnNoYWRvd01hcC50eXBlPWV9fSxzaGFkb3dNYXBDdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwQ3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LGNvbnRleHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5jb250ZXh0IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZ2V0Q29udGV4dCgpIGluc3RlYWQuIiksdGhpcy5nZXRDb250ZXh0KCl9fSx2cjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnZyIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnhyIiksdGhpcy54cn19LGdhbW1hSW5wdXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hSW5wdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IHRoZSBlbmNvZGluZyBmb3IgdGV4dHVyZXMgdmlhIFRleHR1cmUuZW5jb2RpbmcgaW5zdGVhZC4iKX19LGdhbW1hT3V0cHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFPdXRwdXQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IFdlYkdMUmVuZGVyZXIub3V0cHV0RW5jb2RpbmcgaW5zdGVhZC4iKSwhMX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksdGhpcy5vdXRwdXRFbmNvZGluZz1lPT09ITA/V246UWR9fSx0b25lTWFwcGluZ1doaXRlUG9pbnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKSwxfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC50b25lTWFwcGluZ1doaXRlUG9pbnQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LGdhbW1hRmFjdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKSwyfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUZhY3RvciBoYXMgYmVlbiByZW1vdmVkLiIpfX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYZmUucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO2Z1bmN0aW9uIFowcihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXRDdWJlKCB3aWR0aCwgaGVpZ2h0LCBvcHRpb25zICkgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApLiIpLG5ldyBRMyhlLHIpfU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHVzLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPWV9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9ZX19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZX19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZX19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PWV9fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PWV9fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PWV9fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PWV9fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1lfX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lfX19KTtENi5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRFUoKS5sb2FkKGUsZnVuY3Rpb24obil7dC5zZXRCdWZmZXIobil9KSx0aGlzfTtGVS5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O0ozLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKGUsdCl9O0ozLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKGUsdCxyLG4pfTtLZi5jcm9zc09yaWdpbj12b2lkIDA7S2YubG9hZFRleHR1cmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgQVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCBpPW5ldyBUVTtpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBvPWkubG9hZChlLHIsdm9pZCAwLG4pO3JldHVybiB0JiYoby5tYXBwaW5nPXQpLG99O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07S2YubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O2Z1bmN0aW9uIEowcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkNhbnZhc1JlbmRlcmVyIGhhcyBiZWVuIHJlbW92ZWQiKX1mdW5jdGlvbiBRMHIoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5KU09OTG9hZGVyIGhhcyBiZWVuIHJlbW92ZWQuIil9dmFyIHRfcj17Y3JlYXRlTXVsdGlNYXRlcmlhbE9iamVjdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGRldGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9LGF0dGFjaDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lVXRpbHMgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS91dGlscy9TY2VuZVV0aWxzLmpzIil9fTtmdW5jdGlvbiBlX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5MZW5zRmxhcmUgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9vYmplY3RzL0xlbnNmbGFyZS5qcyIpfWZ1bmN0aW9uIHJfcigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5QYXJhbWV0cmljR2VvbWV0cnkgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9nZW9tZXRyaWVzL1BhcmFtZXRyaWNHZW9tZXRyeS5qcyIpLG5ldyBQZX1mdW5jdGlvbiBuX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuVGV4dEdlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9UZXh0R2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gaV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRm9udExvYWRlciBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2xvYWRlcnMvRm9udExvYWRlci5qcyIpfWZ1bmN0aW9uIG9fcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnQgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBhX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbW1lZGlhdGVSZW5kZXJPYmplY3QgaGFzIGJlZW4gcmVtb3ZlZC4iKX10eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246alV9fSkpO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPWpVKTt2YXIgbnBlPXt0eXBlOiJjaGFuZ2UifSxIaHQ9e3R5cGU6InN0YXJ0In0saXBlPXt0eXBlOiJlbmQifSxKVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSxyPT09dm9pZCAwJiZjb25zb2xlLndhcm4oJ1RIUkVFLk9yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyICJkb21FbGVtZW50IiBpcyBub3cgbWFuZGF0b3J5LicpLHI9PT1kb2N1bWVudCYmY29uc29sZS5lcnJvcignVEhSRUUuT3JiaXRDb250cm9sczogImRvY3VtZW50IiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCAiZG9tRWxlbWVudCIuIFBsZWFzZSB1c2UgInJlbmRlcmVyLmRvbUVsZW1lbnQiIGluc3RlYWQuJyksdGhpcy5vYmplY3Q9dCx0aGlzLmRvbUVsZW1lbnQ9cix0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb249Im5vbmUiLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRhcmdldD1uZXcgaix0aGlzLm1pbkRpc3RhbmNlPTAsdGhpcy5tYXhEaXN0YW5jZT0xLzAsdGhpcy5taW5ab29tPTAsdGhpcy5tYXhab29tPTEvMCx0aGlzLm1pblBvbGFyQW5nbGU9MCx0aGlzLm1heFBvbGFyQW5nbGU9TWF0aC5QSSx0aGlzLm1pbkF6aW11dGhBbmdsZT0tMS8wLHRoaXMubWF4QXppbXV0aEFuZ2xlPTEvMCx0aGlzLmVuYWJsZURhbXBpbmc9ITEsdGhpcy5kYW1waW5nRmFjdG9yPS4wNSx0aGlzLmVuYWJsZVpvb209ITAsdGhpcy56b29tU3BlZWQ9MSx0aGlzLmVuYWJsZVJvdGF0ZT0hMCx0aGlzLnJvdGF0ZVNwZWVkPTEsdGhpcy5lbmFibGVQYW49ITAsdGhpcy5wYW5TcGVlZD0xLHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nPSEwLHRoaXMua2V5UGFuU3BlZWQ9Nyx0aGlzLmF1dG9Sb3RhdGU9ITEsdGhpcy5hdXRvUm90YXRlU3BlZWQ9Mix0aGlzLmtleXM9e0xFRlQ6IkFycm93TGVmdCIsVVA6IkFycm93VXAiLFJJR0hUOiJBcnJvd1JpZ2h0IixCT1RUT006IkFycm93RG93biJ9LHRoaXMubW91c2VCdXR0b25zPXtMRUZUOkswLlJPVEFURSxNSURETEU6SzAuRE9MTFksUklHSFQ6SzAuUEFOfSx0aGlzLnRvdWNoZXM9e09ORTpaMC5ST1RBVEUsVFdPOlowLkRPTExZX1BBTn0sdGhpcy50YXJnZXQwPXRoaXMudGFyZ2V0LmNsb25lKCksdGhpcy5wb3NpdGlvbjA9dGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKSx0aGlzLnpvb20wPXRoaXMub2JqZWN0Lnpvb20sdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udWxsLHRoaXMuZ2V0UG9sYXJBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnBoaX0sdGhpcy5nZXRBemltdXRoYWxBbmdsZT1mdW5jdGlvbigpe3JldHVybiBzLnRoZXRhfSx0aGlzLmdldERpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2JqZWN0LnBvc2l0aW9uLmRpc3RhbmNlVG8odGhpcy50YXJnZXQpfSx0aGlzLmxpc3RlblRvS2V5RXZlbnRzPWZ1bmN0aW9uKG50KXtudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmciksdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cz1udH0sdGhpcy5zYXZlU3RhdGU9ZnVuY3Rpb24oKXtuLnRhcmdldDAuY29weShuLnRhcmdldCksbi5wb3NpdGlvbjAuY29weShuLm9iamVjdC5wb3NpdGlvbiksbi56b29tMD1uLm9iamVjdC56b29tfSx0aGlzLnJlc2V0PWZ1bmN0aW9uKCl7bi50YXJnZXQuY29weShuLnRhcmdldDApLG4ub2JqZWN0LnBvc2l0aW9uLmNvcHkobi5wb3NpdGlvbjApLG4ub2JqZWN0Lnpvb209bi56b29tMCxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksbi5kaXNwYXRjaEV2ZW50KG5wZSksbi51cGRhdGUoKSxvPWkuTk9ORX0sdGhpcy51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGosQ3Q9bmV3IHlpKCkuc2V0RnJvbVVuaXRWZWN0b3JzKHQudXAsbmV3IGooMCwxLDApKSxXdD1DdC5jbG9uZSgpLmludmVydCgpLGZlPW5ldyBqLGF0PW5ldyB5aSxzZT0yKk1hdGguUEk7cmV0dXJuIGZ1bmN0aW9uKCl7bGV0IENlPW4ub2JqZWN0LnBvc2l0aW9uO250LmNvcHkoQ2UpLnN1YihuLnRhcmdldCksbnQuYXBwbHlRdWF0ZXJuaW9uKEN0KSxzLnNldEZyb21WZWN0b3IzKG50KSxuLmF1dG9Sb3RhdGUmJm89PT1pLk5PTkUmJkQoaygpKSxuLmVuYWJsZURhbXBpbmc/KHMudGhldGErPWwudGhldGEqbi5kYW1waW5nRmFjdG9yLHMucGhpKz1sLnBoaSpuLmRhbXBpbmdGYWN0b3IpOihzLnRoZXRhKz1sLnRoZXRhLHMucGhpKz1sLnBoaSk7bGV0IFB0PW4ubWluQXppbXV0aEFuZ2xlLE50PW4ubWF4QXppbXV0aEFuZ2xlO3JldHVybiBpc0Zpbml0ZShQdCkmJmlzRmluaXRlKE50KSYmKFB0PC1NYXRoLlBJP1B0Kz1zZTpQdD5NYXRoLlBJJiYoUHQtPXNlKSxOdDwtTWF0aC5QST9OdCs9c2U6TnQ+TWF0aC5QSSYmKE50LT1zZSksUHQ8PU50P3MudGhldGE9TWF0aC5tYXgoUHQsTWF0aC5taW4oTnQscy50aGV0YSkpOnMudGhldGE9cy50aGV0YT4oUHQrTnQpLzI/TWF0aC5tYXgoUHQscy50aGV0YSk6TWF0aC5taW4oTnQscy50aGV0YSkpLHMucGhpPU1hdGgubWF4KG4ubWluUG9sYXJBbmdsZSxNYXRoLm1pbihuLm1heFBvbGFyQW5nbGUscy5waGkpKSxzLm1ha2VTYWZlKCkscy5yYWRpdXMqPWMscy5yYWRpdXM9TWF0aC5tYXgobi5taW5EaXN0YW5jZSxNYXRoLm1pbihuLm1heERpc3RhbmNlLHMucmFkaXVzKSksbi5lbmFibGVEYW1waW5nPT09ITA/bi50YXJnZXQuYWRkU2NhbGVkVmVjdG9yKHUsbi5kYW1waW5nRmFjdG9yKTpuLnRhcmdldC5hZGQodSksbnQuc2V0RnJvbVNwaGVyaWNhbChzKSxudC5hcHBseVF1YXRlcm5pb24oV3QpLENlLmNvcHkobi50YXJnZXQpLmFkZChudCksbi5vYmplY3QubG9va0F0KG4udGFyZ2V0KSxuLmVuYWJsZURhbXBpbmc9PT0hMD8obC50aGV0YSo9MS1uLmRhbXBpbmdGYWN0b3IsbC5waGkqPTEtbi5kYW1waW5nRmFjdG9yLHUubXVsdGlwbHlTY2FsYXIoMS1uLmRhbXBpbmdGYWN0b3IpKToobC5zZXQoMCwwLDApLHUuc2V0KDAsMCwwKSksYz0xLGh8fGZlLmRpc3RhbmNlVG9TcXVhcmVkKG4ub2JqZWN0LnBvc2l0aW9uKT5hfHw4KigxLWF0LmRvdChuLm9iamVjdC5xdWF0ZXJuaW9uKSk+YT8obi5kaXNwYXRjaEV2ZW50KG5wZSksZmUuY29weShuLm9iamVjdC5wb3NpdGlvbiksYXQuY29weShuLm9iamVjdC5xdWF0ZXJuaW9uKSxoPSExLCEwKTohMX19KCksdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7bi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyKSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCksbi5fZG9tRWxlbWVudEtleUV2ZW50cyE9PW51bGwmJm4uX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpfTtsZXQgbj10aGlzLGk9e05PTkU6LTEsUk9UQVRFOjAsRE9MTFk6MSxQQU46MixUT1VDSF9ST1RBVEU6MyxUT1VDSF9QQU46NCxUT1VDSF9ET0xMWV9QQU46NSxUT1VDSF9ET0xMWV9ST1RBVEU6Nn0sbz1pLk5PTkUsYT0xZS02LHM9bmV3IF9NLGw9bmV3IF9NLGM9MSx1PW5ldyBqLGg9ITEsZj1uZXcgTHQscD1uZXcgTHQsZD1uZXcgTHQsZz1uZXcgTHQsXz1uZXcgTHQseT1uZXcgTHQseD1uZXcgTHQsYj1uZXcgTHQsUz1uZXcgTHQsQz1bXSxQPXt9O2Z1bmN0aW9uIGsoKXtyZXR1cm4gMipNYXRoLlBJLzYwLzYwKm4uYXV0b1JvdGF0ZVNwZWVkfWZ1bmN0aW9uIE8oKXtyZXR1cm4gTWF0aC5wb3coLjk1LG4uem9vbVNwZWVkKX1mdW5jdGlvbiBEKG50KXtsLnRoZXRhLT1udH1mdW5jdGlvbiBCKG50KXtsLnBoaS09bnR9bGV0IEk9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50Lm11bHRpcGx5U2NhbGFyKC1XdCksdS5hZGQobnQpfX0oKSxMPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bi5zY3JlZW5TcGFjZVBhbm5pbmc9PT0hMD9udC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDEpOihudC5zZXRGcm9tTWF0cml4Q29sdW1uKGZlLDApLG50LmNyb3NzVmVjdG9ycyhuLm9iamVjdC51cCxudCkpLG50Lm11bHRpcGx5U2NhbGFyKFd0KSx1LmFkZChudCl9fSgpLFI9ZnVuY3Rpb24oKXtsZXQgbnQ9bmV3IGo7cmV0dXJuIGZ1bmN0aW9uKFd0LGZlKXtsZXQgYXQ9bi5kb21FbGVtZW50O2lmKG4ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpe2xldCBzZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KHNlKS5zdWIobi50YXJnZXQpO2xldCBRdD1udC5sZW5ndGgoKTtRdCo9TWF0aC50YW4obi5vYmplY3QuZm92LzIqTWF0aC5QSS8xODApLEkoMipXdCpRdC9hdC5jbGllbnRIZWlnaHQsbi5vYmplY3QubWF0cml4KSxMKDIqZmUqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCl9ZWxzZSBuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8oSShXdCoobi5vYmplY3QucmlnaHQtbi5vYmplY3QubGVmdCkvbi5vYmplY3Quem9vbS9hdC5jbGllbnRXaWR0aCxuLm9iamVjdC5tYXRyaXgpLEwoZmUqKG4ub2JqZWN0LnRvcC1uLm9iamVjdC5ib3R0b20pL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCkpOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIHBhbiBkaXNhYmxlZC4iKSxuLmVuYWJsZVBhbj0hMSl9fSgpO2Z1bmN0aW9uIEYobnQpe24ub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmE/Yy89bnQ6bi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KG4ub2JqZWN0Lnpvb209TWF0aC5tYXgobi5taW5ab29tLE1hdGgubWluKG4ubWF4Wm9vbSxuLm9iamVjdC56b29tKm50KSksbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLGg9ITApOihjb25zb2xlLndhcm4oIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuIiksbi5lbmFibGVab29tPSExKX1mdW5jdGlvbiB6KG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MqPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbS9udCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24gVShudCl7Zi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBXKG50KXt4LnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIFoobnQpe2cuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gcnQobnQpe3Auc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksZC5zdWJWZWN0b3JzKHAsZikubXVsdGlwbHlTY2FsYXIobi5yb3RhdGVTcGVlZCk7bGV0IEN0PW4uZG9tRWxlbWVudDtEKDIqTWF0aC5QSSpkLngvQ3QuY2xpZW50SGVpZ2h0KSxCKDIqTWF0aC5QSSpkLnkvQ3QuY2xpZW50SGVpZ2h0KSxmLmNvcHkocCksbi51cGRhdGUoKX1mdW5jdGlvbiBvdChudCl7Yi5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSxTLnN1YlZlY3RvcnMoYix4KSxTLnk+MD9GKE8oKSk6Uy55PDAmJnooTygpKSx4LmNvcHkoYiksbi51cGRhdGUoKX1mdW5jdGlvbiBzdChudCl7Xy5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKSx5LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIFN0KG50KXtudC5kZWx0YVk8MD96KE8oKSk6bnQuZGVsdGFZPjAmJkYoTygpKSxuLnVwZGF0ZSgpfWZ1bmN0aW9uIGJ0KG50KXtsZXQgQ3Q9ITE7c3dpdGNoKG50LmNvZGUpe2Nhc2Ugbi5rZXlzLlVQOlIoMCxuLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5CT1RUT006UigwLC1uLmtleVBhblNwZWVkKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5MRUZUOlIobi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVhaztjYXNlIG4ua2V5cy5SSUdIVDpSKC1uLmtleVBhblNwZWVkLDApLEN0PSEwO2JyZWFrfUN0JiYobnQucHJldmVudERlZmF1bHQoKSxuLnVwZGF0ZSgpKX1mdW5jdGlvbiBNdCgpe2lmKEMubGVuZ3RoPT09MSlmLnNldChDWzBdLnBhZ2VYLENbMF0ucGFnZVkpO2Vsc2V7bGV0IG50PS41KihDWzBdLnBhZ2VYK0NbMV0ucGFnZVgpLEN0PS41KihDWzBdLnBhZ2VZK0NbMV0ucGFnZVkpO2Yuc2V0KG50LEN0KX19ZnVuY3Rpb24gbHQoKXtpZihDLmxlbmd0aD09PTEpZy5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtnLnNldChudCxDdCl9fWZ1bmN0aW9uIEt0KCl7bGV0IG50PUNbMF0ucGFnZVgtQ1sxXS5wYWdlWCxDdD1DWzBdLnBhZ2VZLUNbMV0ucGFnZVksV3Q9TWF0aC5zcXJ0KG50Km50K0N0KkN0KTt4LnNldCgwLFd0KX1mdW5jdGlvbiBfdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVBhbiYmbHQoKX1mdW5jdGlvbiBjdCgpe24uZW5hYmxlWm9vbSYmS3QoKSxuLmVuYWJsZVJvdGF0ZSYmTXQoKX1mdW5jdGlvbiBYKG50KXtpZihDLmxlbmd0aD09MSlwLnNldChudC5wYWdlWCxudC5wYWdlWSk7ZWxzZXtsZXQgV3Q9YmUobnQpLGZlPS41KihudC5wYWdlWCtXdC54KSxhdD0uNSoobnQucGFnZVkrV3QueSk7cC5zZXQoZmUsYXQpfWQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApfWZ1bmN0aW9uIGV0KG50KXtpZihDLmxlbmd0aD09PTEpXy5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IEN0PWJlKG50KSxXdD0uNSoobnQucGFnZVgrQ3QueCksZmU9LjUqKG50LnBhZ2VZK0N0LnkpO18uc2V0KFd0LGZlKX15LnN1YlZlY3RvcnMoXyxnKS5tdWx0aXBseVNjYWxhcihuLnBhblNwZWVkKSxSKHkueCx5LnkpLGcuY29weShfKX1mdW5jdGlvbiBkdChudCl7bGV0IEN0PWJlKG50KSxXdD1udC5wYWdlWC1DdC54LGZlPW50LnBhZ2VZLUN0LnksYXQ9TWF0aC5zcXJ0KFd0Kld0K2ZlKmZlKTtiLnNldCgwLGF0KSxTLnNldCgwLE1hdGgucG93KGIueS94Lnksbi56b29tU3BlZWQpKSxGKFMueSkseC5jb3B5KGIpfWZ1bmN0aW9uIHEobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUGFuJiZldChudCl9ZnVuY3Rpb24gcHQobnQpe24uZW5hYmxlWm9vbSYmZHQobnQpLG4uZW5hYmxlUm90YXRlJiZYKG50KX1mdW5jdGlvbiBodChudCl7bi5lbmFibGVkIT09ITEmJihDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUobnQucG9pbnRlcklkKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLHd0KSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrdCkpLCR0KG50KSxudC5wb2ludGVyVHlwZT09PSJ0b3VjaCI/dHQobnQpOmVlKG50KSl9ZnVuY3Rpb24gd3QobnQpe24uZW5hYmxlZCE9PSExJiYobnQucG9pbnRlclR5cGU9PT0idG91Y2giPyQobnQpOkxlKG50KSl9ZnVuY3Rpb24ga3QobnQpe2hlKG50KSxDLmxlbmd0aD09PTAmJihuLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSxuLmRpc3BhdGNoRXZlbnQoaXBlKSxvPWkuTk9ORX1mdW5jdGlvbiBpZShudCl7aGUobnQpfWZ1bmN0aW9uIGVlKG50KXtsZXQgQ3Q7c3dpdGNoKG50LmJ1dHRvbil7Y2FzZSAwOkN0PW4ubW91c2VCdXR0b25zLkxFRlQ7YnJlYWs7Y2FzZSAxOkN0PW4ubW91c2VCdXR0b25zLk1JRERMRTticmVhaztjYXNlIDI6Q3Q9bi5tb3VzZUJ1dHRvbnMuUklHSFQ7YnJlYWs7ZGVmYXVsdDpDdD0tMX1zd2l0Y2goQ3Qpe2Nhc2UgSzAuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO1cobnQpLG89aS5ET0xMWTticmVhaztjYXNlIEswLlJPVEFURTppZihudC5jdHJsS2V5fHxudC5tZXRhS2V5fHxudC5zaGlmdEtleSl7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1lbHNle2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9YnJlYWs7Y2FzZSBLMC5QQU46aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO1UobnQpLG89aS5ST1RBVEV9ZWxzZXtpZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtaKG50KSxvPWkuUEFOfWJyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9byE9PWkuTk9ORSYmbi5kaXNwYXRjaEV2ZW50KEhodCl9ZnVuY3Rpb24gTGUobnQpe2lmKG4uZW5hYmxlZCE9PSExKXN3aXRjaChvKXtjYXNlIGkuUk9UQVRFOmlmKG4uZW5hYmxlUm90YXRlPT09ITEpcmV0dXJuO3J0KG50KTticmVhaztjYXNlIGkuRE9MTFk6aWYobi5lbmFibGVab29tPT09ITEpcmV0dXJuO290KG50KTticmVhaztjYXNlIGkuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3N0KG50KTticmVha319ZnVuY3Rpb24gYXIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVpvb209PT0hMXx8byE9PWkuTk9ORXx8KG50LnByZXZlbnREZWZhdWx0KCksbi5kaXNwYXRjaEV2ZW50KEhodCksU3QobnQpLG4uZGlzcGF0Y2hFdmVudChpcGUpKX1mdW5jdGlvbiBmcihudCl7bi5lbmFibGVkPT09ITF8fG4uZW5hYmxlUGFuPT09ITF8fGJ0KG50KX1mdW5jdGlvbiB0dChudCl7c3dpdGNoKFR0KG50KSxDLmxlbmd0aCl7Y2FzZSAxOnN3aXRjaChuLnRvdWNoZXMuT05FKXtjYXNlIFowLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtNdCgpLG89aS5UT1VDSF9ST1RBVEU7YnJlYWs7Y2FzZSBaMC5QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47bHQoKSxvPWkuVE9VQ0hfUEFOO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7Y2FzZSAyOnN3aXRjaChuLnRvdWNoZXMuVFdPKXtjYXNlIFowLkRPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47X3QoKSxvPWkuVE9VQ0hfRE9MTFlfUEFOO2JyZWFrO2Nhc2UgWjAuRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtjdCgpLG89aS5UT1VDSF9ET0xMWV9ST1RBVEU7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChIaHQpfWZ1bmN0aW9uICQobnQpe3N3aXRjaChUdChudCksbyl7Y2FzZSBpLlRPVUNIX1JPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtYKG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9QQU46aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47ZXQobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1BBTjppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVQYW49PT0hMSlyZXR1cm47cShudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfRE9MTFlfUk9UQVRFOmlmKG4uZW5hYmxlWm9vbT09PSExJiZuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtwdChudCksbi51cGRhdGUoKTticmVhaztkZWZhdWx0Om89aS5OT05FfX1mdW5jdGlvbiBJdChudCl7bi5lbmFibGVkIT09ITEmJm50LnByZXZlbnREZWZhdWx0KCl9ZnVuY3Rpb24gJHQobnQpe0MucHVzaChudCl9ZnVuY3Rpb24gaGUobnQpe2RlbGV0ZSBQW250LnBvaW50ZXJJZF07Zm9yKGxldCBDdD0wO0N0PEMubGVuZ3RoO0N0KyspaWYoQ1tDdF0ucG9pbnRlcklkPT1udC5wb2ludGVySWQpe0Muc3BsaWNlKEN0LDEpO3JldHVybn19ZnVuY3Rpb24gVHQobnQpe2xldCBDdD1QW250LnBvaW50ZXJJZF07Q3Q9PT12b2lkIDAmJihDdD1uZXcgTHQsUFtudC5wb2ludGVySWRdPUN0KSxDdC5zZXQobnQucGFnZVgsbnQucGFnZVkpfWZ1bmN0aW9uIGJlKG50KXtsZXQgQ3Q9bnQucG9pbnRlcklkPT09Q1swXS5wb2ludGVySWQ/Q1sxXTpDWzBdO3JldHVybiBQW0N0LnBvaW50ZXJJZF19bi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IixJdCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixodCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGllKSxuLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGFyLHtwYXNzaXZlOiExfSksdGhpcy51cGRhdGUoKX19O3ZhciBGNj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fbGFzdE1lc2g9bnVsbCx0aGlzLl9jbG9jaz1uZXcgbU0sdGhpcy5fY2FudmFzU2l6ZT1udWxsLHRoaXMuX2xheWVyc0NvbmZpZz1udWxsLHRoaXMuX3J1bkNvbG9yPXR9X2lzT2JqZWN0KHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiByPT0ib2JqZWN0IiYmdCE9bnVsbCYmIUFycmF5LmlzQXJyYXkodCl9X2FwcGx5RGVmYXVsdHModCxyKXtsZXQgbj17fSxpPVt0LHJdO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKXtsZXQgYT1pW29dO2ZvcihsZXQgcyBpbiBhKXtsZXQgbD1zIGluIG47dGhpcy5faXNPYmplY3QoYVtzXSk/bltzXT10aGlzLl9hcHBseURlZmF1bHRzKG5bc118fHt9LGFbc10pOmx8fChuW3NdPWFbc10pfX1yZXR1cm4gbn1fY3JlYXRlTGF5ZXJzKCl7aWYoISghdGhpcy5fbGF5ZXJzQ29uZmlnfHwhdGhpcy5fc2NlbmV8fCF0aGlzLl9sYXN0TWVzaCkpe2lmKHRoaXMuX2xheWVyc0NvbmZpZy5zaG93Qm91bmRpbmdCb3gpe3ZhciB0PW5ldyB5TSh0aGlzLl9sYXN0TWVzaCxuZXcgbmUoInJnYigwLCAwLCAyNTUpIikpO3RoaXMuX3NjZW5lLmFkZCh0KX1pZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0F4ZXMpe3ZhciByPW5ldyB2TSg1KTt0aGlzLl9zY2VuZS5hZGQocil9fX1zZXRMYXllcnNDb25maWcodCl7dGhpcy5fbGF5ZXJzQ29uZmlnPXRoaXMuX2FwcGx5RGVmYXVsdHModCx0aGlzLl9sYXllcnNDb25maWd8fHt9KX1fY3JlYXRlV29ybGQodCxyKXt2YXIgYSxzLGwsYztpZih0aGlzLmlzUmVhZHkoKSlyZXR1cm47dGhpcy5fc2NlbmU9bmV3IHEwO3ZhciBuPW5ldyB3TVt0LmNhbWVyYS5jbHNdKHQuY2FtZXJhLmZvdiwoKGE9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmEud2lkdGgpLygocz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6cy5oZWlnaHQpLHQuY2FtZXJhLm5lYXIsdC5jYW1lcmEuZmFyKTt0aGlzLl9jYW1lcmE9bix0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj12b2lkIDAsdC5jYW1lcmEucG9zaXRpb24mJih0aGlzLmluaXRDYW1lcmFQb3NpdGlvbj1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5wb3NpdGlvbikpLHRoaXMuaW5pdENhbWVyYUxvb2tBdD12b2lkIDAsdC5jYW1lcmEubG9va0F0JiYodGhpcy5pbml0Q2FtZXJhTG9va0F0PW5ldyBqKCkuZnJvbUFycmF5KHQuY2FtZXJhLmxvb2tBdCkpO3ZhciBpPW5ldyBKVShuLHIpO2xldCBvPWk7by5sb29rU3BlZWQ9LjQsby5tb3ZlbWVudFNwZWVkPTIwLG8ubm9GbHk9ITAsby5sb29rVmVydGljYWw9ITAsby5jb25zdHJhaW5WZXJ0aWNhbD0hMCxvLnZlcnRpY2FsTWluPTEsby52ZXJ0aWNhbE1heD0yLG8uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX2NhbWVyYUNvbnRyb2xzPWksdGhpcy5fcmVuZGVyZXI9bmV3IHJuKHthbnRpYWxpYXM6ITB9KSx0aGlzLl9yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChsPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpsLndpZHRoLChjPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpjLmhlaWdodCksdGhpcy5fcmVuZGVyZXIuc2V0Q2xlYXJDb2xvcigxNjc3NzIxNSwxKX1fY2xlYXJTY2VuZSgpe3ZhciB0O2lmKHRoaXMuX3NjZW5lKWZvcig7dGhpcy5fc2NlbmUuY2hpbGRyZW4ubGVuZ3RoPjA7KXRoaXMuX3NjZW5lLnJlbW92ZSgodD10aGlzLl9zY2VuZSk9PW51bGw/dm9pZCAwOnQuY2hpbGRyZW5bMF0pfWdldFJlbmRlcmVyKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyfWdldENhbWVyYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2NhbWVyYUNvbnRyb2xzfWlzUmVhZHkoKXtyZXR1cm4hIXRoaXMuX2NhbWVyYSYmISF0aGlzLl9jYW1lcmFDb250cm9sc31nZXRDYW1lcmFQb3NpdGlvbigpe3ZhciB0LHIsbjtyZXR1cm57ZmFyOih0PXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnQuZmFyLHBvc2l0aW9uOihyPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnIucG9zaXRpb24uY2xvbmUoKSx0YXJnZXQ6KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsP3ZvaWQgMDpuLnRhcmdldC5jbG9uZSgpfX1zZXRDYW52YXNTaXplKHQpe3RoaXMuX2NhbnZhc1NpemU9dH1kcmF3KCl7dmFyIHIsbixpLG87dGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uRnJhbWVJbmRleCksdGhpcy5fY2FtZXJhJiYodGhpcy5fY2FtZXJhLmFzcGVjdD0oKHI9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnIud2lkdGgpLygobj10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bi5oZWlnaHQpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX3JlbmRlcmVyLnNldFNpemUoKGk9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOmkud2lkdGgsKG89dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm8uaGVpZ2h0KTtsZXQgdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCk7dGhpcy5fY2FtZXJhQ29udHJvbHMudXBkYXRlKGEpLHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHQpLHRoaXMuX3JlbmRlcmVyLnJlbmRlcih0aGlzLl9zY2VuZSx0aGlzLl9jYW1lcmEpfS5iaW5kKHRoaXMpO3QoKX11cGRhdGVTY2VuZSh0LHIpe2xldCBuPXt9OyJjb25maWciaW4gdCYmdC5jb25maWcmJihuPUpTT04ucGFyc2UodC5jb25maWcpKSx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImJlZm9yZVVwZGF0ZVNjZW5lIn0pO2xldCBpPXtjYW1lcmE6e2NsczoiUGVyc3BlY3RpdmVDYW1lcmEiLGZvdjo3NSxuZWFyOi4xLGZhcjoxZTN9LGxpZ2h0czpbe2NsczoiQW1iaWVudExpZ2h0Iixjb2xvcjoiI2ZmZmZmZiIsaW50ZW5zaXR5Oi43NX0se2NsczoiRGlyZWN0aW9uYWxMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzUscG9zaXRpb246WzAsLTEsMl19XX07bj10aGlzLl9hcHBseURlZmF1bHRzKG4saSksdGhpcy5fY3JlYXRlV29ybGQobixyKSx0aGlzLl9jbGVhclNjZW5lKCksdGhpcy5fY3JlYXRlTGlnaHRzKHRoaXMuX3NjZW5lLG4pLHRoaXMuX2NyZWF0ZUdlb21ldHJ5KHQsbiksdGhpcy5fY3JlYXRlTGF5ZXJzKCksdGhpcy5kcmF3KCl9cmVzZXRWaWV3KHQpe3ZhciBuLGk7aWYoIXRoaXMuaXNSZWFkeSgpKXJldHVybjsobj10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fG4ucmVzZXQoKTtsZXQgcjshdCYmdGhpcy5fbGFzdE1lc2gmJihyPXRoaXMuX2xhc3RNZXNoKSxyJiYodGhpcy5fZml0T2JqZWN0VG9WaWV3cG9ydChyKSx0aGlzLl9sYXN0TWVzaD1yKSwoaT10aGlzLl9jYW1lcmFDb250cm9scyk9PW51bGx8fGkudXBkYXRlKCl9X2NyZWF0ZUdlb21ldHJ5KHQscil7bGV0IG49dC5tZXNoO24udmVydGljZXMmJm4uZmFjZXMmJm4uZmFjZXMubGVuZ3RoP3RoaXMuX2NyZWF0ZU1lc2gobixyKTp0aGlzLl9jcmVhdGVQb2ludENsb3VkKG4scil9X2NyZWF0ZVBvaW50Q2xvdWQodCxyKXt2YXIgaDtsZXQgbj10LnZlcnRpY2VzLGk9dC5jb2xvcnMsbz17bWF0ZXJpYWw6e2NsczoiUG9pbnRzTWF0ZXJpYWwiLHNpemU6LjAwNX19O2kmJmkubGVuZ3RoPT1uLmxlbmd0aD9vLm1hdGVyaWFsLnZlcnRleENvbG9ycz0hMDpvLm1hdGVyaWFsLmNvbG9yPXRoaXMuX3J1bkNvbG9yO2xldCBhPXRoaXMuX2FwcGx5RGVmYXVsdHMocixvKSxzPW5ldyBQZSxsPW5ldyBGbG9hdDMyQXJyYXkobi5mbGF0KCkpO2lmKHMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGwsMykpLGkmJmkubGVuZ3RoPT1uLmxlbmd0aCl7bGV0IGY9bmV3IEZsb2F0MzJBcnJheShpLmZsYXQoKSk7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspZltwXT1mW3BdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShmLDMpKX12YXIgYz1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLHU9bmV3IGltKHMsYyk7KGg9dGhpcy5fc2NlbmUpPT1udWxsfHxoLmFkZCh1KSx0aGlzLl9sYXN0TWVzaD11fXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fc2lsZW50PSEwLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5mYXI9cix0aGlzLl9jYW1lcmEucG9zaXRpb24uc2V0KHQueCx0LnksdC56KSx0aGlzLl9jYW1lcmEubG9va0F0KG4uY2xvbmUoKSksdGhpcy5fY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksdGhpcy5fY2FtZXJhQ29udHJvbHMmJih0aGlzLl9jYW1lcmFDb250cm9scy50YXJnZXQ9bi5jbG9uZSgpLHRoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZSgpKSx0aGlzLl9zaWxlbnQ9ITF9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UodCl7dGhpcy5fc2lsZW50fHx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNhbWVyYVBvc2l0aW9uQ2hhbmdlIixldmVudDp0fSl9X2ZpdE9iamVjdFRvVmlld3BvcnQodCl7dmFyIHAsZCxnO2xldCBuPW5ldyB0YSxpPW5ldyBqLG89bmV3IGo7bi5zZXRGcm9tT2JqZWN0KHQpLG4uZ2V0Q2VudGVyKGkpLG4uZ2V0U2l6ZShvKTtsZXQgYT1NYXRoLm1heChvLngsby55LG8ueikscz0oKHA9dGhpcy5fY2FtZXJhKT09bnVsbD92b2lkIDA6cC5mb3YpKihNYXRoLlBJLzE4MCksbD1NYXRoLmFicyhhLygyKk1hdGgudGFuKHMvMikpKSoxLjI1LGM9bi5taW4ueix1PWM8MD8tYytsOmwtYyxoPShkPXRoaXMuaW5pdENhbWVyYVBvc2l0aW9uKSE9bnVsbD9kOm5ldyBqKGkueCxpLnksbCksZj0oZz10aGlzLmluaXRDYW1lcmFMb29rQXQpIT1udWxsP2c6aTt0aGlzLnNldENhbWVyYVZpZXdwb2ludChoLHUqMyxmKX1fY3JlYXRlTWVzaCh0LHIpe3ZhciBmO2xldCBuPXQudmVydGljZXMsaT10LmZhY2VzLG89dC5jb2xvcnMsYT10aGlzLl9hcHBseURlZmF1bHRzKHIse21hdGVyaWFsOntjbHM6Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIixjb2xvcjoiI2EwYTBhMCIscm91Z2huZXNzOjEsbWV0YWxuZXNzOjB9fSkscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKTtsZXQgYz1uZXcgVWludDE2QXJyYXkoaS5mbGF0KCkpO2lmKG8mJm8ubGVuZ3RoKXtsZXQgcD1vLmZsYXQoKTtmb3IobGV0IGQ9MDtkPHAubGVuZ3RoO2QrKylwW2RdPXBbZF0vMjU1O3Muc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkocCksMykpLGEubWF0ZXJpYWw9YS5tYXRlcmlhbHx8e30sYS5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITB9cy5jZW50ZXIoKSxzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHMuc2V0SW5kZXgobmV3IEplKGMsMSkpLHMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtsZXQgdT1uZXcgd01bYS5tYXRlcmlhbC5jbHNdKGEubWF0ZXJpYWwpLGg9bmV3IHRpKHMsdSk7aC5jYXN0U2hhZG93PSEwLGgucmVjZWl2ZVNoYWRvdz0hMCwoZj10aGlzLl9zY2VuZSk9PW51bGx8fGYuYWRkKGgpLHRoaXMuX2xhc3RNZXNoPWh9X2NyZWF0ZUxpZ2h0cyh0LHIpe2ZvcihsZXQgbj0wO248ci5saWdodHMubGVuZ3RoO24rKyl7bGV0IGk9ci5saWdodHNbbl0sbz1uZXcgd01baS5jbHNdKGkuY29sb3IsaS5pbnRlbnNpdHkpO2kucG9zaXRpb24mJm8ucG9zaXRpb24uc2V0KGkucG9zaXRpb25bMF0saS5wb3NpdGlvblsxXSxpLnBvc2l0aW9uWzJdKSx0LmFkZChvKX19fTt2YXIgTG49Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuYWN0aXZlPSExLHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITEsdGhpcy5fY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZD0hMSx0aGlzLl9pc01lc2hMb2FkaW5nPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZUZ1bmN0aW9uKHQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9kYXRhUHJvdmlkZXI9bmV3IElQKHRoaXMucmVxdWVzdE1hbmFnZXIpO2xldCB0PW5ldyBGNih0aGlzLl9ydW5Db2xvcik7dC5hZGRFdmVudExpc3RlbmVyKCJiZWZvcmVVcGRhdGVTY2VuZSIsdGhpcy5fdXBkYXRlQ2FudmFzU2l6ZS5iaW5kKHRoaXMpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNhbWVyYVBvc2l0aW9uQ2hhbmdlIix0aGlzLl9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlLmJpbmQodGhpcykpLHRoaXMuX21lc2hWaWV3ZXI9dH1yZWxvYWQoKXshdGhpcy5hY3RpdmV8fCF0aGlzLl9kYXRhUHJvdmlkZXJ8fCh0aGlzLl9pc01lc2hMb2FkaW5nPSEwLHRoaXMuX2RhdGFQcm92aWRlci5yZWxvYWQodGhpcy5ydW4sdGhpcy50YWcsdGhpcy5zYW1wbGUpLnRoZW4odD0+eyF0fHwodGhpcy5fc3RlcHM9dCx0aGlzLl9zdGVwSW5kZXg9dC5sZW5ndGgtMSl9KS5jYXRjaCh0PT57aWYoIXR8fCF0LmNvZGV8fHQuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHQ9dHx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHQpfSkpfV91cGRhdGVTY2VuZSgpe3ZhciByO2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwOyF0fHwhdC5tZXNofHwodGhpcy5fbWVzaFZpZXdlci51cGRhdGVTY2VuZSh0LHRoaXMpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWR8fCh0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITApLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZHx8KChyPXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHIuYXBwZW5kQ2hpbGQodGhpcy5fbWVzaFZpZXdlci5nZXRSZW5kZXJlcigpLmRvbUVsZW1lbnQpLHRoaXMuX21lc2hWaWV3ZXJBdHRhY2hlZD0hMCkpfV9kZWJvdW5jZWRGZXRjaE1lc2goKXt0aGlzLmRlYm91bmNlKCJmZXRjaE1lc2giLCgpPT50aGlzLl9tYXliZUZldGNoTWVzaCgpLDEwMCl9X21heWJlRmV0Y2hNZXNoKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtpZighKCF0fHx0Lm1lc2h8fHQubWVzaEZldGNoaW5nKSl7dC5tZXNoRmV0Y2hpbmc9ITAsdGhpcy5faXNNZXNoTG9hZGluZz0hMDt0cnl7bGV0IHI9eWllbGQgdGhpcy5fZGF0YVByb3ZpZGVyLmZldGNoRGF0YSh0LHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKTt0Lm1lc2g9clswXSx0aGlzLm5vdGlmeVBhdGgoIl9jdXJyZW50U3RlcC5tZXNoIil9Y2F0Y2gocil7aWYoIXJ8fCFyLmNvZGV8fHIuY29kZSE9ZDEuQ0FOQ0VMTEVEKXRocm93IHI9cnx8IlJlc3BvbnNlIHByb2Nlc3NpbmcgZmFpbGVkLiIsbmV3IEVycm9yKHIpfWZpbmFsbHl7dGhpcy5faXNNZXNoTG9hZGluZz0hMSx0Lm1lc2hGZXRjaGluZz0hMX19fSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2UoKXtpZighdGhpcy5fbWVzaFZpZXdlci5pc1JlYWR5KCkpcmV0dXJuO2xldCB0PW5ldyBDdXN0b21FdmVudCgiY2FtZXJhLXBvc2l0aW9uLWNoYW5nZSIse2RldGFpbDp0aGlzLl9tZXNoVmlld2VyLmdldENhbWVyYVBvc2l0aW9uKCl9KTt0aGlzLmRpc3BhdGNoRXZlbnQodCl9c2V0Q2FtZXJhVmlld3BvaW50KHQscixuKXt0aGlzLl9tZXNoVmlld2VyLnNldENhbWVyYVZpZXdwb2ludCh0LHIsbil9X3VwZGF0ZUNhbnZhc1NpemUoKXtsZXQgdD10aGlzLm9mZnNldFdpZHRoLHI9dCxuPXRoaXMuJCQoIi50Zi1tZXNoLWxvYWRlci1oZWFkZXIiKS5vZmZzZXRIZWlnaHQsaT17d2lkdGg6dCxoZWlnaHQ6ci1ufTt0aGlzLl9tZXNoVmlld2VyLnNldENhbnZhc1NpemUoaSl9cmVkcmF3KCl7dGhpcy5fdXBkYXRlQ2FudmFzU2l6ZSgpLHRoaXMuaXNDb25uZWN0ZWQmJnRoaXMuX21lc2hWaWV3ZXIuZHJhdygpfV9oYXNBdExlYXN0T25lU3RlcCh0KXtyZXR1cm4hIXQmJnQubGVuZ3RoPjB9X2hhc011bHRpcGxlU3RlcHModCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifV9nZXRNYXhTdGVwSW5kZXgodCl7cmV0dXJuIHQubGVuZ3RoLTF9X2dldFNhbXBsZVRleHQodCl7cmV0dXJuIFN0cmluZyh0KzEpfV9oYXNNdWx0aXBsZVNhbXBsZXModCl7cmV0dXJuIHQ+MX1fdXBkYXRlVmlldygpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWaWV3O3RoaXMuX21lc2hWaWV3ZXImJnQ9PSJhbGwiJiZ0aGlzLl9tZXNoVmlld2VyLnJlc2V0VmlldygpfXRvTG9jYWxlU3RyaW5nXyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07TG4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgY29sb3I9IltbX3J1bkNvbG9yXV0iIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1oZWFkZXIiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlcyhvZlNhbXBsZXMpXV0iPgogICAgICAgIDxkaXY+c2FtcGxlOiBbW19nZXRTYW1wbGVUZXh0KHNhbXBsZSldXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXAoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc3RlcAogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQiCiAgICAgICAgICAgICAgPltbdG9Mb2NhbGVTdHJpbmdfKF9zdGVwVmFsdWUpXV08L3NwYW4KICAgICAgICAgICAgPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIGhlYWRpbmctcmlnaHQiPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2N1cnJlbnRXYWxsVGltZV1dIj4KICAgICAgICAgICAgICBbW19jdXJyZW50V2FsbFRpbWVdXQogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCByaWdodCI+CiAgICAgICAgICAgIDxwYXBlci1zcGlubmVyLWxpdGUgYWN0aXZlIGhpZGRlbiQ9IltbIV9pc01lc2hMb2FkaW5nXV0iPgogICAgICAgICAgICA8L3BhcGVyLXNwaW5uZXItbGl0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHMoX3N0ZXBzKV1dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfZ2V0TWF4U3RlcEluZGV4KF9zdGVwcyldXSIKICAgICAgICAgICAgbWF4LW1hcmtlcnM9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIHNuYXBzCiAgICAgICAgICAgIHN0ZXA9IjEiCiAgICAgICAgICAgIHZhbHVlPSJ7e19zdGVwSW5kZXh9fSIKICAgICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHN0eWxlPgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxcHg7CiAgICAgIH0KICAgICAgLnRmLW1lc2gtbG9hZGVyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDVweDsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExuLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExuLnByb3RvdHlwZSwic2VsZWN0ZWRWaWV3Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxMbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEY2KV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixJUCldLExuLnByb3RvdHlwZSwiX2RhdGFQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMbi5wcm90b3R5cGUsIl9jb2xvclNjYWxlRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxMbi5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTG4ucHJvdG90eXBlLCJfc3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfbWVzaFZpZXdlckF0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sTG4ucHJvdG90eXBlLCJfY2FtZXJhUG9zaXRpb25Jbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExuLnByb3RvdHlwZSwiX2lzTWVzaExvYWRpbmciLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLExuLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiwiYWN0aXZlIiwiX2RhdGFQcm92aWRlciIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcC4qIiwiX21lc2hWaWV3ZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVNjZW5lIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMbi5wcm90b3R5cGUsIl9kZWJvdW5jZWRGZXRjaE1lc2giLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sTG4ucHJvdG90eXBlLCJfY3VycmVudFN0ZXAiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9zdGVwVmFsdWUiLG51bGwpO0UoW1J0KCJfY3VycmVudFN0ZXAiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxMbi5wcm90b3R5cGUsIl9jdXJyZW50V2FsbFRpbWUiLG51bGwpO0UoW0J0KCJzZWxlY3RlZFZpZXciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExuLnByb3RvdHlwZSwiX3VwZGF0ZVZpZXciLG51bGwpO0xuPUUoW3l0KCJ0Zi1tZXNoLWxvYWRlciIpXSxMbik7dmFyIHBoPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9Ii4qIix0aGlzLl9zZWxlY3RlZFZpZXc9ImFsbCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCgpPT57dGhpcy5faGFuZGxlV2luZG93UmVzaXplKCl9LCExKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9X2dldEFsbENoaWxkcmVuKCl7dmFyIHQ7cmV0dXJuIEFycmF5LmZyb20oKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yQWxsKCJ0Zi1tZXNoLWxvYWRlciIpKX1fb25DYW1lcmFQb3NpdGlvbkNoYW5nZWQodCl7dGhpcy5fc2VsZWN0ZWRWaWV3PT0ic2hhcmUiJiZ0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2gocj0+e3QudGFyZ2V0IT1yJiZyLnNldENhbWVyYVZpZXdwb2ludCh0LmRldGFpbC5wb3NpdGlvbix0LmRldGFpbC5mYXIsdC5kZXRhaWwudGFyZ2V0KX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlbG9hZCgpe3RoaXMuX2ZldGNoVGFncygpLnRoZW4odGhpcy5fcmVsb2FkTWVzaGVzLmJpbmQodGhpcykpfV9oYW5kbGVXaW5kb3dSZXNpemUoKXt0aGlzLl9nZXRBbGxDaGlsZHJlbigpLmZvckVhY2godD0+e3QucmVkcmF3KCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoc3guaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXN4Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuX2RhdGFOb3RGb3VuZD1pLmxlbmd0aD09PTAsdGhpcy5fcnVuVG9UYWdJbmZvPXJ9KX1fcmVsb2FkTWVzaGVzKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPXN4Lm1hcFZhbHVlcyh0LGw9Pk9iamVjdC5rZXlzKGwpKSxvPVFsKGkscixuKTtmdW5jdGlvbiBhKGwpe2xldCBjPXRbbC5ydW5dW2wudGFnXS5zYW1wbGVzO3JldHVybiBzeC5yYW5nZShjKS5tYXAodT0+T2JqZWN0LmFzc2lnbih7fSxsLHtzYW1wbGU6dSxvZlNhbXBsZXM6Y30pKX1yZXR1cm4gby5tYXAobD0+T2JqZWN0LmFzc2lnbih7fSxsLHtpdGVtczpbXS5jb25jYXQuYXBwbHkoW10sbC5pdGVtcy5tYXAoYSkpfSkpfX07cGgudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9InNpZGViYXIiIGNsYXNzPSJhbGwtY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiB2aWV3LWNvbnRyb2wiPgogICAgICAgICAgICA8aDMgY2xhc3M9InRpdGxlIj5Qb2ludCBvZiB2aWV3PC9oMz4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgIGlkPSJ2aWV3LXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkVmlld319IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9ImFsbC1yYWRpby1idXR0b24iIG5hbWU9ImFsbCI+CiAgICAgICAgICAgICAgICAgIERpc3BsYXkgYWxsIHBvaW50cwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0iYWxsLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFpvb20gYW5kIGNlbnRlciBjYW1lcmEgdG8gZGlzcGxheSBhbGwgcG9pbnRzIGF0IG9uY2UuIE5vdGUsCiAgICAgICAgICAgICAgICAgIHRoYXQgc29tZSBwb2ludHMgY291bGQgYmUgdG9vIGZhciAoaS5lLiB0b28gc21hbGwpIHRvIGJlCiAgICAgICAgICAgICAgICAgIHZpc2libGUuCiAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJ1c2VyLXJhZGlvLWJ1dHRvbiIgbmFtZT0idXNlciI+CiAgICAgICAgICAgICAgICAgIEN1cnJlbnQgdmlldwogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0idXNlci1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBLZWVwIGN1cnJlbnQgY2FtZXJhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0ic2hhcmUtcmFkaW8tYnV0dG9uIiBuYW1lPSJzaGFyZSI+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludAogICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgIGZvcj0ic2hhcmUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgU2hhcmUgdmlld3BvaW50IGFtb25nIGFsbCBjYW1lcmFzLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tZ3JvdXA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHBvaW50IGNsb3VkIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHBvaW50IGNsb3VkIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1tZXNoLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLXZpZXc9IltbX3NlbGVjdGVkVmlld11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgY2xhc3M9InRmLW1lc2gtbG9hZGVyLWNvbnRhaW5lciIKICAgICAgICAgICAgICAgICAgb24tY2FtZXJhLXBvc2l0aW9uLWNoYW5nZT0iX29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1tZXNoLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1yYWRpby1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgfQogICAgICAuc2lkZWJhci1zZWN0aW9uIGgzIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICB0Zi1ydW5zLXNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIHsKICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAudmlldy1jb250cm9sIGgzLnRpdGxlIHsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC52aWV3LWNvbnRyb2wgcGFwZXItcmFkaW8tZ3JvdXAgewogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQogICAgICAvKiBMYXlvdXQgbXVzdCBiZSBob3Jpem9udGFsLCBpLmUuIGl0ZW1zIGFycmFuZ2VkIGluIGEgcm93LiBJZiBpdGVtcyBjYW5ub3QgZml0IGluIGEgcm93LAogICAgICAgKiB0aGV5IHNob3VsZCBiZSBtb3ZlZCB0byBuZXh0IGxpbmUuIEFsbCBpdGVtcyBtdXN0IGJlIHNxdWFyZSBhdCBhbGwgdGltZXMuIE1pbmltdW0gc2l6ZSBvZgogICAgICAgKiB0aGUgaXRlbSBpcyA0ODBweC4gVGhpcyBtZWFucyB0aGF0IG1heGltdW0gc2l6ZSBvZiB0aGUgaXRlbSBtdXN0IGJlIDQ4MHB4ICsgNDc5cHggPSA5NTlweC4KICAgICAgICogKi8KICAgICAgLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgdGYtbWVzaC1sb2FkZXIgewogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBmbGV4LWJhc2lzOiA0ODBweDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0scGgucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHBoLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHBoLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaC5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtwaD1FKFt5dCgibWVzaC1kYXNoYm9hcmQiKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxwaCk7dmFyIFFVPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pbnN0YWxsQ29tbWFuZD0icGlwIGluc3RhbGwgLVUgdGVuc29yYm9hcmQtcGx1Z2luLXByb2ZpbGUifV9jb3B5SW5zdGFsbENvbW1hbmQoKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCB0PSgpPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy4kLmNvbW1hbmRUZXh0YXJlYS5zZWxlY3QoKTt0cnl7eWllbGQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5faW5zdGFsbENvbW1hbmQpfWNhdGNoKGkpe2lmKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKXJldHVybiBQcm9taXNlLnJlamVjdCgpfX0pLHI9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dHJ5e3lpZWxkIHQoKSxyLmlubmVyVGV4dD0iQ29waWVkLiJ9Y2F0Y2gobil7ci5pbm5lclRleHQ9IkZhaWxlZCB0byBjb3B5IHRvIGNsaXBib2FyZC4ifX0pfV9yZW1vdmVDb3BpZWRNZXNzYWdlKCl7bGV0IHQ9dGhpcy4kLmNvcGllZE1lc3NhZ2U7dC5pbm5lclRleHQ9IiJ9fTtRVS50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgcHJvZmlsZSBwbHVnaW4gaGFzIG1vdmVkLjwvaDM+CiAgICAgIDxwPgogICAgICAgIFBsZWFzZSBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvZmlsZSBwbHVnaW4gZnJvbSBQeVBJIGJ5CiAgICAgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSB0aGUgbWFjaGluZSBydW5uaW5nIFRlbnNvckJvYXJkOgogICAgICA8L3A+CiAgICAgIDx0ZXh0YXJlYQogICAgICAgIGlkPSJjb21tYW5kVGV4dGFyZWEiCiAgICAgICAgcmVhZG9ubHk9IiIKICAgICAgICByb3dzPSIxIgogICAgICAgIG9uLWJsdXI9Il9yZW1vdmVDb3BpZWRNZXNzYWdlIgogICAgICA+CltbX2luc3RhbGxDb21tYW5kXV08L3RleHRhcmVhCiAgICAgID4KICAgICAgPGRpdiBpZD0iY29weUNvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNvcGllZE1lc3NhZ2UiPjwvc3Bhbj4KICAgICAgICA8cGFwZXItYnV0dG9uIHJhaXNlZD0iIiBvbi10YXA9Il9jb3B5SW5zdGFsbENvbW1hbmQiCiAgICAgICAgICA+Q29weSB0byBjbGlwYm9hcmQ8L3BhcGVyLWJ1dHRvbgogICAgICAgID4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgIH0KICAgICAgI2NvbW1hbmRUZXh0YXJlYSB7CiAgICAgICAgbWFyZ2luLXRvcDogMWV4OwogICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAjY29weUNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQogICAgICAjY29waWVkTWVzc2FnZSB7CiAgICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUVUucHJvdG90eXBlLCJfaW5zdGFsbENvbW1hbmQiLHZvaWQgMCk7UVU9RShbeXQoInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIildLFFVKTt2YXIgbG09RWUoT2UoKSwxKTt2YXIgemw9RWUoT2UoKSwxKSx0cT1FZSh3bCgpLDEpO3ZhciBubj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5PXt9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj17c2NhbGU6Zm59LHRoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5feENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD0oKT0+e2xldCB0PW5ldyB0cS5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTp0LGF4aXM6bmV3IHRxLkF4ZXMuTnVtZXJpYyh0LCJib3R0b20iKSxhY2Nlc3NvcjpyPT5yLnJlY2FsbH19LHRoaXMuX3lWYWx1ZUFjY2Vzc29yPXQ9PnQucHJlY2lzaW9uLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PVd1KGUwKSxyPW49PmlzTmFOKG4pPyJOYU4iOnQobik7cmV0dXJuW3t0aXRsZToiUnVuIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlRocmVzaG9sZCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnRocmVzaG9sZHMpfSx7dGl0bGU6IlByZWNpc2lvbiIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnByZWNpc2lvbil9LHt0aXRsZToiUmVjYWxsIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0ucmVjYWxsKX0se3RpdGxlOiJUUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS50cnVlX3Bvc2l0aXZlc30se3RpdGxlOiJGUCIsZXZhbHVhdGU6bj0+bi5kYXR1bS5mYWxzZV9wb3NpdGl2ZXN9LHt0aXRsZToiVE4iLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9uZWdhdGl2ZXN9LHt0aXRsZToiRk4iLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfbmVnYXRpdmVzfV19KSgpLHRoaXMuX3Nlcmllc0RhdGFGaWVsZHM9WyJ0aHJlc2hvbGRzIiwicHJlY2lzaW9uIiwicmVjYWxsIiwidHJ1ZV9wb3NpdGl2ZXMiLCJmYWxzZV9wb3NpdGl2ZXMiLCJ0cnVlX25lZ2F0aXZlcyIsImZhbHNlX25lZ2F0aXZlcyJdLHRoaXMuX2RlZmF1bHRYUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fZGVmYXVsdFlSYW5nZT1bLS4wNSwxLjA1XSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57bGV0IG89X2UoKS5wbHVnaW5Sb3V0ZSgicHJfY3VydmVzIiwiL3ByX2N1cnZlcyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1hLGw9dGhpcy50YWcsYz1NaShvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9zbW9vdGhpbmdFbmFibGVkPSExfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLE9iamVjdC5hc3NpZ24oe30sdGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUsbikpfX1fY29tcHV0ZVJ1bkNvbG9yKHQpe3JldHVybiBmbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYXR0YWNoZWQ9ITAsdGhpcy5yZWxvYWQoKX1fZ2V0Q2hhcnREYXRhTG9hZGVyKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6dC5xdWVyeVNlbGVjdG9yKCJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIil9cmVsb2FkKCl7aWYoISF0aGlzLl9hdHRhY2hlZCl7aWYodGhpcy5ydW5zLmxlbmd0aD09PTApe3RoaXMuc2V0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLHt9KTtyZXR1cm59dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVsb2FkKCl9fV9zZXRDaGFydERhdGEoKXt2YXIgdD10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSxyPXRoaXMuX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnksbj10aGlzLl9zZXRPZlJlbGV2YW50UnVuczt6bC5mb3JPd24odCwoaSxvKT0+e2xldCBhPXJbb107aWYoIShhJiZ0W29dLnN0ZXA9PT1hLnN0ZXApKXtpZighbltvXSl7dGhpcy5fY2xlYXJTZXJpZXNEYXRhKG8pO3JldHVybn10aGlzLl91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKG8saSl9fSl9X3VwZGF0ZVNlcmllc0RhdGFGb3JSdW4odCxyKXtsZXQgbj16bC5yZWR1Y2UodGhpcy5fc2VyaWVzRGF0YUZpZWxkcywoYSxzKT0+KGFbc109cltzXS5zbGljZSgpLnJldmVyc2UoKSxhKSx7fSksaT1uZXcgQXJyYXkoblt0aGlzLl9zZXJpZXNEYXRhRmllbGRzWzBdXS5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV09emwubWFwVmFsdWVzKG4scz0+c1thXSk7bGV0IG89dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7by5zZXRTZXJpZXNEYXRhKHQsaSksby5jb21taXRDaGFuZ2VzKCl9X2NsZWFyU2VyaWVzRGF0YSh0KXtsZXQgcj10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKTtyLnNldFNlcmllc0RhdGEodCxbXSksci5jb21taXRDaGFuZ2VzKCl9X3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5KCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWUscj10aGlzLnJ1blRvU3RlcENhcDtsZXQgbj17fTt6bC5mb3JPd24odCwoaSxvKT0+eyFpfHwhaS5sZW5ndGh8fChuW29dPXRoaXMuX2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHJbb10saSkpfSksdGhpcy5zZXQoIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix0aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeSksdGhpcy5zZXQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsbil9X25vdGlmeURhdGFDaGFuZ2UoKXt2YXIgdD10aGlzLl9ydW5Ub0RhdGFPdmVyVGltZTt0aGlzLm9uRGF0YUNoYW5nZSYmdGhpcy5vbkRhdGFDaGFuZ2UodCl9X2NvbXB1dGVFbnRyeUNsb3Nlc3RPckVxdWFsVG9TdGVwQ2FwKHQscil7bGV0IG49TWF0aC5taW4oemwuc29ydGVkSW5kZXgoci5tYXAoaT0+aS5zdGVwKSx0KSxyLmxlbmd0aC0xKTtyZXR1cm4gcltuXX1nZXQgX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSgpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMuX3J1blRvUHJDdXJ2ZUVudHJ5O3JldHVybiB6bC5maWx0ZXIodCxuPT5yW25dKS5zb3J0KCl9Z2V0IF9zZXRPZlJlbGV2YW50UnVucygpe3ZhciB0PXRoaXMuX3J1bnNXaXRoU3RlcEF2YWlsYWJsZTtsZXQgcj17fTtyZXR1cm4gemwuZm9yRWFjaCh0LG49PntyW25dPSEwfSkscn1fY29tcHV0ZUN1cnJlbnRTdGVwRm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbj9uLnN0ZXA6bnVsbH1fY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bmV3IERhdGUobi53YWxsX3RpbWUqMWUzKS50b1N0cmluZygpOm51bGx9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fcmVzZXREb21haW4oKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZXNldERvbWFpbigpfXJlZHJhdygpe3RoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlZHJhdygpfX07bm4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBkaXNwbGF5LW5hbWU9IltbdGFnTWV0YWRhdGEuZGlzcGxheU5hbWVdXSIKICAgICAgZGVzY3JpcHRpb249IltbdGFnTWV0YWRhdGEuZGVzY3JpcHRpb25dXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KCiAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICB4LWNvbXBvbmVudHMtY3JlYXRpb24tbWV0aG9kPSJbW194Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgIHktdmFsdWUtYWNjZXNzb3I9IltbX3lWYWx1ZUFjY2Vzc29yXV0iCiAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVGdW5jdGlvbl1dIgogICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbX2RlZmF1bHRYUmFuZ2VdXSIKICAgICAgZGVmYXVsdC15LXJhbmdlPSJbW19kZWZhdWx0WVJhbmdlXV0iCiAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICBkYXRhLXNlcmllcz0iW1tydW5zXV0iCiAgICAgIGxvYWQta2V5PSJbW3RhZ11dIgogICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpXV0iCiAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgID48L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CgogICAgPGRpdiBpZD0iYnV0dG9ucy1yb3ciPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJSZXNldCBheGVzIHRvIFswLCAxXS4iCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ic3RlcC1sZWdlbmQiPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFN0ZXBBdmFpbGFibGVdXSIgYXM9InJ1biI+CiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLXJvdyI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJjb2xvci1ib3giCiAgICAgICAgICAgIHN0eWxlPSJiYWNrZ3JvdW5kOiBbW19jb21wdXRlUnVuQ29sb3IocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIFtbcnVuXV0gaXMgYXQKICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGVwLWxhYmVsLXRleHQiPgogICAgICAgICAgICBzdGVwIFtbX2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSA8L3NwYW4KICAgICAgICAgID48YnIgLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3YWxsLXRpbWUtbGFiZWwtdGV4dCI+CiAgICAgICAgICAgIChbW19jb21wdXRlQ3VycmVudFdhbGxUaW1lRm9yUnVuKF9ydW5Ub1ByQ3VydmVFbnRyeSwgcnVuKV1dKQogICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiA1MDBweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIgewogICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDYwMHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgICNidXR0b25zLXJvdyBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KICAgICAgI3N0ZXAtbGVnZW5kIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5sZWdlbmQtcm93IHsKICAgICAgICBtYXJnaW46IDVweCAwIDVweCAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5jb2xvci1ib3ggewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICB9CiAgICAgIC5zdGVwLWxhYmVsLXRleHQgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CiAgICAgIC53YWxsLXRpbWUtbGFiZWwtdGV4dCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC1zaXplOiAwLjhlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbm4ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsInJ1blRvU3RlcENhcCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLG5uLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3J1blRvRGF0YU92ZXJUaW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJvbkRhdGFDaGFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sbm4ucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl95VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFGaWVsZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRYUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX2RlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxubi5wcm90b3R5cGUsIl9yZXF1ZXN0RGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX3Ntb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQnQoInJ1bnMiLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX3J1blRvUHJDdXJ2ZUVudHJ5IiwiX3ByZXZpb3VzUnVuVG9QckN1cnZlRW50cnkiLCJfc2V0T2ZSZWxldmFudFJ1bnMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3NldENoYXJ0RGF0YSIsbnVsbCk7RShbQnQoIl9ydW5Ub0RhdGFPdmVyVGltZSIsInJ1blRvU3RlcENhcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sbm4ucHJvdG90eXBlLCJfdXBkYXRlUnVuVG9QckN1cnZlRW50cnkiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX25vdGlmeURhdGFDaGFuZ2UiLG51bGwpO0UoW1J0KCJydW5zIiwiX3J1blRvUHJDdXJ2ZUVudHJ5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxubi5wcm90b3R5cGUsIl9ydW5zV2l0aFN0ZXBBdmFpbGFibGUiLG51bGwpO0UoW1J0KCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfc2V0T2ZSZWxldmFudFJ1bnMiLG51bGwpO25uPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1jYXJkIildLG5uKTt2YXIgU009RWUoT2UoKSwxKTt2YXIgZXA9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVuVG9TdGVwSW5kZXg9e319X2NvbXB1dGVDb2xvckZvclJ1bih0KXtyZXR1cm4gZm4odCl9X2NvbXB1dGVUaW1lVGV4dEZvclJ1bih0LHIsbixpKXtsZXQgbz1yW25dO2lmKCFTTS5pc051bWJlcihvKSlyZXR1cm4iIjtsZXQgYT10W25dO2lmKCFhKXJldHVybiIiO2xldCBzPWFbb11baV07aWYoaT09PSJzdGVwIilyZXR1cm5gc3RlcCAke3N9YDtpZihpPT09InJlbGF0aXZlIilyZXR1cm4gczwxP2AkeyhzKjFlMykudG9GaXhlZCgyKX0gbXNgOmAke3MudG9GaXhlZCgyKX0gc2A7aWYoaT09PSJ3YWxsX3RpbWUiKXJldHVybiBuZXcgRGF0ZShzKjFlMykudG9TdHJpbmcoKTt0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaXNwbGF5IHR5cGUgb2YgJHtpfSBpcyBub3QgcmVjb2duaXplZC5gKX1fc2xpZGVyVmFsdWVDaGFuZ2VkKHQpe2xldCByPXQudGFyZ2V0LmRhdGFzZXQucnVuLG49dC50YXJnZXQuaW1tZWRpYXRlVmFsdWUsaT1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtpc05hTihuKT9kZWxldGUgaVtyXTppW3JdPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLHRoaXMuX3J1blRvU3RlcEluZGV4PWl9X2NvbXB1dGVNYXhTdGVwSW5kZXhGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuJiZuLmxlbmd0aD9uLmxlbmd0aC0xOjB9X3VwZGF0ZVN0ZXBzRm9yTmV3UnVucygpe3ZhciB0PXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztsZXQgcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvU3RlcEluZGV4KTtTTS5mb3JPd24odCwobixpKT0+e1NNLmlzTnVtYmVyKHJbaV0pfHwocltpXT1uLmxlbmd0aC0xKX0pLHRoaXMuX3J1blRvU3RlcEluZGV4PXJ9X2dldFN0ZXAodCxyKXtyZXR1cm4gdGhpcy5fcnVuVG9TdGVwSW5kZXg/dGhpcy5fcnVuVG9TdGVwSW5kZXhbcl06MH1fY29tcHV0ZVJ1blRvU3RlcCh0LHIpe2xldCBuPXt9O3JldHVybiBTTS5mb3JPd24ociwoaSxvKT0+e2xldCBhPXRbb107IWF8fChuW29dPWFbaV0uc3RlcCl9KSxufWdldCBfcnVuc1dpdGhTbGlkZXJzKCl7dmFyIHQ9dGhpcy5ydW5zLHI9dGhpcy5ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX19O2VwLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19ydW5zV2l0aFNsaWRlcnNdXSIgYXM9InJ1biI+CiAgICAgIDxkaXYgY2xhc3M9InJ1bi13aWRnZXQiPgogICAgICAgIDxkaXYgY2xhc3M9InJ1bi1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJydW4tY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDpbW19jb21wdXRlQ29sb3JGb3JSdW4ocnVuKV1dOyIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJ1bi10ZXh0Ij5bW3J1bl1dPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1kaXNwbGF5LWNvbnRhaW5lciI+CiAgICAgICAgICBbW19jb21wdXRlVGltZVRleHRGb3JSdW4ocnVuVG9BdmFpbGFibGVUaW1lRW50cmllcywgX3J1blRvU3RlcEluZGV4LAogICAgICAgICAgcnVuLCB0aW1lRGlzcGxheVR5cGUpXV0KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBkYXRhLXJ1biQ9IltbcnVuXV0iCiAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgICAgbWluPSIwIgogICAgICAgICAgbWF4PSJbW19jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIHJ1bildXSIKICAgICAgICAgIHZhbHVlPSJbW19nZXRTdGVwKF9ydW5Ub1N0ZXBJbmRleCwgcnVuKV1dIgogICAgICAgICAgb24taW1tZWRpYXRlLXZhbHVlLWNoYW5nZWQ9Il9zbGlkZXJWYWx1ZUNoYW5nZWQiCiAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIC5ydW4td2lkZ2V0IHsKICAgICAgICBtYXJnaW46IDEwcHggMCAwIDA7CiAgICAgIH0KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICBtYXJnaW46IC04cHggMCAwIC0xNXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwLWRpc3BsYXktY29udGFpbmVyIHsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIG1hcmdpbjogMCAxNXB4IDAgMDsKICAgICAgfQogICAgICAucnVuLXRleHQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQogICAgICAucnVuLWNvbG9yLWJveCB7CiAgICAgICAgd2lkdGg6IDEycHg7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZXAucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITAsY29tcHV0ZWQ6Il9jb21wdXRlUnVuVG9TdGVwKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCkifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwicnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGVwLnByb3RvdHlwZSwidGltZURpc3BsYXlUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVwLnByb3RvdHlwZSwiX3J1blRvU3RlcEluZGV4Iix2b2lkIDApO0UoW0J0KCJydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxlcC5wcm90b3R5cGUsIl91cGRhdGVTdGVwc0Zvck5ld1J1bnMiLG51bGwpO0UoW1J0KCJydW5zIiwicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZXAucHJvdG90eXBlLCJfcnVuc1dpdGhTbGlkZXJzIixudWxsKTtlcD1FKFt5dCgidGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3IiKV0sZXApO3ZhciBrbz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3RpbWVEaXNwbGF5VHlwZT0ic3RlcCIsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3J1blRvVGFnSW5mbz17fSx0aGlzLl90YWdUb1J1blRvRGF0YT17fSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX3N0ZXA9MH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfXJlbG9hZCgpe1Byb21pc2UuYWxsKFt0aGlzLl9mZXRjaFRhZ3MoKV0pLnRoZW4oKCk9Pnt0aGlzLl9yZWxvYWRDYXJkcygpfSl9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9X2ZldGNoVGFncygpe2xldCB0PV9lKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYobG0uaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPWxtLm1hcFZhbHVlcyhyLG89PmxtLmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkQ2FyZHMoKXt2YXIgdDtsbS5mb3JFYWNoKCh0PXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtcHItY3VydmUtY2FyZCIpLHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpPWxtLm1hcFZhbHVlcyh0LG89Pk9iamVjdC5rZXlzKG8pKTtyZXR1cm4gaEUoaSxyLG4pfWdldCBfcmVsZXZhbnRTZWxlY3RlZFJ1bnMoKXt2YXIgdD10aGlzLl9zZWxlY3RlZFJ1bnMscj10aGlzLl9ydW5Ub1RhZ0luZm87cmV0dXJuIHQuZmlsdGVyKG49PnJbbl0pfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9e307ci5mb3JFYWNoKGE9PntpW2FdPXRbYV1bbl19KTtsZXQgbz1uLnJlcGxhY2UoL1wvcHJfY3VydmVzJC8sIiIpO3JldHVybiBvUihpLG8pfV9jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2sodCl7cmV0dXJuIHI9Pnt0aGlzLnNldCgiX3RhZ1RvUnVuVG9EYXRhIixNeChLbCh7fSx0aGlzLl90YWdUb1J1blRvRGF0YSkse1t0XTpyfSkpfX1nZXQgX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMoKXt2YXIgdD10aGlzLl90YWdUb1J1blRvRGF0YTtsZXQgcj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyh0KSlmb3IobGV0W2Fdb2YgT2JqZWN0LmVudHJpZXMobykpKHJbYV09PW51bGx8fGk8clthXSkmJihyW2FdPWkpO2xldCBuPXt9O2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHIpKXtsZXQgYT10W29dW2ldO25baV09YS5tYXAocz0+KHtzdGVwOnMuc3RlcCx3YWxsX3RpbWU6cy53YWxsX3RpbWUscmVsYXRpdmU6cy53YWxsX3RpbWUtYVswXS53YWxsX3RpbWV9KSl9cmV0dXJuIG59fTtrby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0idGltZS10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9IlRpbWUgRGlzcGxheSBUeXBlIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lRGlzcGxheVR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICAgIDwhLS0KICAgICAgICAgICAgLS0+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiIgaWQ9InN0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yCiAgICAgICAgICAgICAgICBydW5zPSJbW19yZWxldmFudFNlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgcnVuLXRvLXN0ZXA9Int7X3J1blRvU3RlcH19IgogICAgICAgICAgICAgICAgcnVuLXRvLWF2YWlsYWJsZS10aW1lLWVudHJpZXM9IltbX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXNdXSIKICAgICAgICAgICAgICAgIHRpbWUtZGlzcGxheS10eXBlPSJbW190aW1lRGlzcGxheVR5cGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3Rvcj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwcmVjaXNpb27igJNyZWNhbGwgY3VydmUgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgcHJlY2lzaW9u4oCTcmVjYWxsIGRhdGEgdG8geW91ciBldmVudAogICAgICAgICAgICAgICAgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXByLWN1cnZlLWNhcmQKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW5zPSJbW2l0ZW0ucnVuc11dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1bnMsIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwLWNhcD0iW1tfcnVuVG9TdGVwXV0iCiAgICAgICAgICAgICAgICAgIG9uLWRhdGEtY2hhbmdlPSJbW19jcmVhdGVEYXRhQ2hhbmdlQ2FsbGJhY2soaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1wci1jdXJ2ZS1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAvKiogRG8gbm90IGxldCB0aGUgc3RlcHMgc2VsZWN0b3Igb2NjbHVkZSB0aGUgcnVuIHNlbGVjdG9yLiAqLwogICAgICAjc3RlcHMtc2VsZWN0b3ItY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA2MCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa28ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl90YWdUb1J1blRvRGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfcnVuVG9TdGVwIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sa28ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGtvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxrby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sa28ucHJvdG90eXBlLCJfc3RlcCIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7RShbUnQoIl9zZWxlY3RlZFJ1bnMiLCJfcnVuVG9UYWdJbmZvIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9yZWxldmFudFNlbGVjdGVkUnVucyIsbnVsbCk7RShbUnQoIl90YWdUb1J1blRvRGF0YSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX3J1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLG51bGwpO2tvPUUoW3l0KCJ0Zi1wci1jdXJ2ZS1kYXNoYm9hcmQiKV0sa28pO3ZhciBCNj1FZShPZSgpLDEpO3ZhciB1bz1jbGFzcyBleHRlbmRzIEd0KG5iKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPUVkLlNURVAsdGhpcy5fc2VsZWN0ZWRSdW5zPVtdLHRoaXMuX3RhZ0ZpbHRlcj0iIix0aGlzLl9jYXRlZ29yaWVzPVtdLHRoaXMuX2dldENhdGVnb3J5SXRlbUtleT10PT50LnRhZyx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUoNTApLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj15RSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfWdldCBfc21vb3RoaW5nRW5hYmxlZCgpe3ZhciB0PXRoaXMuX3Ntb290aGluZ1dlaWdodDtyZXR1cm4gdD4wfV9nZXRDYXRlZ29yeUtleSh0KXtyZXR1cm4gdC5tZXRhZGF0YS50eXBlPT1OYS5TRUFSQ0hfUkVTVUxUUz8iIjp0Lm5hbWV9X3Nob3VsZE9wZW4odCl7cmV0dXJuIHQ8PTJ9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2hhcnRzKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9X2UoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoQjYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPUI2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENoYXJ0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9X3VwZGF0ZUNhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGksbz1uLGE9QjYubWFwVmFsdWVzKHQscz0+T2JqZWN0LmtleXMocykpO2k9aEUoYSxyLG8pLGkuZm9yRWFjaChzPT57cy5pdGVtcz1zLml0ZW1zLm1hcChsPT4oe3RhZzpsLnRhZyxzZXJpZXM6bC5ydW5zLm1hcChjPT4oe3J1bjpjLHRhZzpsLnRhZ30pKX0pKX0pLHRoaXMudXBkYXRlQXJyYXlQcm9wKCJfY2F0ZWdvcmllcyIsaSx0aGlzLl9nZXRDYXRlZ29yeUtleSl9X3RhZ01ldGFkYXRhKHQscixuKXtsZXQgaT10Lm5hbWUsbz1uLnRhZyxhPXt9O24uc2VyaWVzLmZvckVhY2goKHtydW46dX0pPT57YVt1XT1yW3VdW29dfSk7bGV0IHM9by5yZXBsYWNlKC9cL3NjYWxhcl9zdW1tYXJ5JC8sIiIpLHtkZXNjcmlwdGlvbjpsLGRpc3BsYXlOYW1lOmN9PW9SKGEscyk7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuUFJFRklYX0dST1VQJiZjLnN0YXJ0c1dpdGgoaSsiLyIpJiYoYz1jLnNsaWNlKGkubGVuZ3RoKzEpKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfX19O3VvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJzaG93LWRvd25sb2FkLWxpbmtzIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfc2hvd0Rvd25sb2FkTGlua3N9fSIKICAgICAgICAgICAgICAgID5TaG93IGRhdGEgZG93bmxvYWQgbGlua3M8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgIGlkPSJpZ25vcmUteS1vdXRsaWVyIgogICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tfaWdub3JlWU91dGxpZXJzfX0iCiAgICAgICAgICAgICAgICA+SWdub3JlIG91dGxpZXJzIGluIGNoYXJ0IHNjYWxpbmc8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nIj4KICAgICAgICAgICAgICA8ZGl2PlRvb2x0aXAgc29ydGluZyBtZXRob2Q6PC9kaXY+CiAgICAgICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e190b29sdGlwU29ydGluZ01ldGhvZH19IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0iMCIKICAgICAgICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVmYXVsdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+ZGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+YXNjZW5kaW5nPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgICA8cGFwZXItaXRlbT5uZWFyZXN0PC9wYXBlci1pdGVtPgogICAgICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1zbW9vdGhpbmctaW5wdXQKICAgICAgICAgICAgICB3ZWlnaHQ9Int7X3Ntb290aGluZ1dlaWdodH19IgogICAgICAgICAgICAgIHN0ZXA9IjAuMDAxIgogICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICBtYXg9IjAuOTk5IgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibm8tZGF0YS13YXJuaW5nIj4KICAgICAgICAgICAgPGgzPk5vIHNjYWxhciBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgc2NhbGFyIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgICBnZXQtY2F0ZWdvcnktaXRlbS1rZXk9IltbX2dldENhdGVnb3J5SXRlbUtleV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLXNjYWxhci1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgZGF0YS10by1sb2FkPSJbW2l0ZW0uc2VyaWVzXV0iCiAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgbXVsdGktZXhwZXJpbWVudHM9IltbX2dldE11bHRpRXhwZXJpbWVudHMoZGF0YVNlbGVjdGlvbildXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgICAgICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW19zbW9vdGhpbmdXZWlnaHRdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShjYXRlZ29yeSwgX3J1blRvVGFnSW5mbywgaXRlbSldXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbX3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgYmF0Y2gtc2l6ZT0iW1tmZWF0dXJlRmxhZ3Muc2NhbGFyc0JhdGNoU2l6ZV1dIgogICAgICAgICAgICAgICAgICBpbi1jb2xhYj0iW1tmZWF0dXJlRmxhZ3MuaW5Db2xhYl1dIgogICAgICAgICAgICAgICAgPjwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CgogICAgICAjdG9vbHRpcC1zb3J0aW5nIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICB3aWR0aDogMTA1cHg7CiAgICAgIH0KCiAgICAgIC5saW5lLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgLmNlbnRlciB7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJmZWF0dXJlRmxhZ3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9zaG93RG93bmxvYWRMaW5rcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixvYnNlcnZlcjoiX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx1by5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHVvLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx1by5wcm90b3R5cGUsIl9nZXRDYXRlZ29yeUl0ZW1LZXkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx1by5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSx1by5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtCdCgiX3J1blRvVGFnSW5mbyIsIl9zZWxlY3RlZFJ1bnMiLCJfdGFnRmlsdGVyIiwiX2NhdGVnb3JpZXNEb21SZWFkeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdW8ucHJvdG90eXBlLCJfdXBkYXRlQ2F0ZWdvcmllcyIsbnVsbCk7dW89RShbeXQoInRmLXNjYWxhci1kYXNoYm9hcmQiKV0sdW8pO3ZhciBvcGU9RWUoT2UoKSwxKTt2YXIgZGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RleHRzPVtdLHRoaXMuX2NhbmNlbGxlcj1uZXcgYW59Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiBmbih0KX1fY2hhbmdlUnVuQ29sb3IoKXt2YXIgdD10aGlzLl9ydW5Db2xvcjt0aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tdGItdGV4dC1sb2FkZXItb3V0bGluZSI6dH0pfWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCk7bGV0IHQ9X2UoKSxyPU1pKHQucGx1Z2luUm91dGUoInRleHQiLCIvdGV4dCIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLG1hcmtkb3duOnRoaXMubWFya2Rvd25FbmFibGVkPyJ0cnVlIjoiZmFsc2UifSksbj10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgbz1pLnZhbHVlLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhLndhbGxfdGltZSoxZTMpLHN0ZXA6YS5zdGVwLHRleHQ6YS50ZXh0fSkpO3RoaXMuc2V0KCJfdGV4dHMiLG8uc2xpY2UoKS5yZXZlcnNlKCkpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2Zvcm1hdFN0ZXAodCl7cmV0dXJuIHhuKCIsIikodCl9fTtkaC50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZyBydW49IltbcnVuXV0iIHRhZz0iW1t0YWddXSIgY29sb3I9IltbX3J1bkNvbG9yXV0iPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8cGFwZXItbWF0ZXJpYWwKICAgICAgZWxldmF0aW9uPSIxIgogICAgICBpZD0ic3RlcHMtY29udGFpbmVyIgogICAgICBjbGFzcz0iY29udGFpbmVyIHNjcm9sbGJhciIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfdGV4dHNdXSI+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InN0ZXAtY29udGFpbmVyIj4KICAgICAgICAgIHN0ZXAgPHNwYW4gY2xhc3M9InN0ZXAtdmFsdWUiPltbX2Zvcm1hdFN0ZXAoaXRlbS5zdGVwKV1dPC9zcGFuPgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9InRleHQiPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tpdGVtLnRleHRdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgLnNjcm9sbGJhciB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQogICAgICAjc3RlcHMtY29udGFpbmVyIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgLyogY29sb3IgY29tcHV0ZWQgYW5kIHNldCBhcyBpbmxpbmUgc3R5bGUgKi87CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXRiLXRleHQtbG9hZGVyLW91dGxpbmUpOwogICAgICB9CiAgICAgIC50ZXh0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgM3B4IDNweCAzcHg7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICAgIH0KICAgICAgLnN0ZXAtY29udGFpbmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tdGItdWktYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBtYXJnaW4tbGVmdDogLTFweDsgLyogdG8gY29ycmVjdCBmb3IgYm9yZGVyICovCiAgICAgICAgcGFkZGluZzogM3B4OwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lcjpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZGgucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkaC5wcm90b3R5cGUsIm1hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZGgucHJvdG90eXBlLCJfdGV4dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxkaC5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sZGgucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkaC5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoIl9ydW5Db2xvciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZGgucHJvdG90eXBlLCJfY2hhbmdlUnVuQ29sb3IiLG51bGwpO2RoPUUoW3l0KCJ0Zi10ZXh0LWxvYWRlciIpXSxkaCk7dmFyIFFjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fbWFya2Rvd25FbmFibGVkPXZwKCJfbWFya2Rvd25FbmFibGVkIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlLHRoaXMuX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlcj14cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX21hcmtkb3duRW5hYmxlZE9ic2VydmVyKF9tYXJrZG93bkVuYWJsZWQpIl19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkVGV4dHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD1fZSgpLnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihvcGUuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnKSlyZXR1cm47bGV0IG49JGkocik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLG4ubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRUZXh0cygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtdGV4dC1sb2FkZXIiKS5mb3JFYWNoKHI9PntyLnJlbG9hZCgpfSl9Z2V0IF9jYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWcscj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7cmV0dXJuIFFsKHQscixuKX1fbWFya2Rvd25FbmFibGVkT2JzZXJ2ZXIoKXt0aGlzLl9yZWxvYWRUZXh0cygpfX07UWMudGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X21hcmtkb3duRW5hYmxlZH19IgogICAgICAgICAgICAgID5FbmFibGUgTWFya2Rvd248L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyB0ZXh0IGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSB0ZXh0IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi10ZXh0LWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBtYXJrZG93bi1lbmFibGVkPSJbW19tYXJrZG93bkVuYWJsZWRdXSIKICAgICAgICAgICAgICAgID48L3RmLXRleHQtbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfbWFya2Rvd25FbmFibGVkU3RvcmFnZU9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfbWFya2Rvd25FbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxRYy5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sUWMucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sUWMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1FjPUUoW3l0KCJ0Zi10ZXh0LWRhc2hib2FyZCIpXSxRYyk7dmFyIFZodD1jbGFzcyBleHRlbmRzIEd0KG10KXt9O1ZodC50ZW1wbGF0ZT1RYAogICAgPGRpdiBjbGFzcz0ibWVzc2FnZSI+CiAgICAgIDxoMz5UaGUgV2hhdC1JZiBUb29sIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuPC9oMz4KICAgICAgPHA+CiAgICAgICAgVGhlCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9wYWlyLWNvZGUuZ2l0aHViLmlvL2xpdC8iCiAgICAgICAgICA+TGVhcm5pbmcgSW50ZXJwcmV0YWJpbGl0eSBUb29sIChMSVQpPC9hCiAgICAgICAgPgogICAgICAgIGlzIGFuIGFjdGl2ZWx5IG1haW50YWluZWQgYWx0ZXJuYXRpdmUuIFBsZWFzZSBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vcGFpci1jb2RlLmdpdGh1Yi5pby9saXQvc2V0dXAvIj5oZXJlPC9hPiB0byBpbnN0YWxsIGFuZAogICAgICAgIHVzZSB0aGlzIHRvb2wuCiAgICAgIDwvcD4KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQoKICAgICAgICAubWVzc2FnZSB7CiAgICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIH0KICAgICAgICAjY29tbWFuZFRleHRhcmVhIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICAgIHBhZGRpbmc6IDFleCAxZW07CiAgICAgICAgICByZXNpemU6IHZlcnRpY2FsOwogICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgfQogICAgICAgICNjb3B5Q29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgfQogICAgICAgICNjb3BpZWRNZXNzYWdlIHsKICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgIDwvZGl2PgogIGA7Vmh0PUUoW3l0KCJ0Zi13aXQtcmVkaXJlY3QtZGFzaGJvYXJkIildLFZodCk7dmFyIGFwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfYmFja2VuZD1SQn19O2FwZT1FKFt5dCgidGYtYmFja2VuZCIpXSxhcGUpO3ZhciBzcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnJ1bnNDb2xvclNjYWxlPWZufX07c3BlPUUoW3l0KCJ0Zi1jb2xvci1zY2FsZSIpXSxzcGUpO3ZhciBscGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2ZlYXR1cmVfZmxhZ3M9dFd9fTtscGU9RShbeXQoInRmLWZlYXR1cmUtZmxhZ3MiKV0sbHBlKTt2YXIgY3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9nbG9iYWxzPWtXfX07Y3BlPUUoW3l0KCJ0Zi1nbG9iYWxzIildLGNwZSk7dmFyIFVodD17fTtLcyhVaHQse1RmRG9tUmVwZWF0OigpPT5PaSxhZGRMaW1pdExpc3RlbmVyOigpPT5VVyxnZXRMaW1pdDooKT0+R1cscmVtb3ZlTGltaXRMaXN0ZW5lcjooKT0+cVcsc2V0TGltaXQ6KCk9Pm4yZX0pO3ZhciB1cGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX3BhZ2luYXRlZF92aWV3PVVodH19O3VwZT1FKFt5dCgidGYtcGFnaW5hdGVkLXZpZXctc3RvcmUiKV0sdXBlKTt2YXIgaHBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9zdG9yYWdlPU9CfX07aHBlPUUoW3l0KCJ0Zi1zdG9yYWdlIildLGhwZSk7fSkoKTsKLyohCiAqIGlzLXBsYWluLW9iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXMtcGxhaW4tb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qIQogKiBpc29iamVjdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvaXNvYmplY3Q+CiAqCiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC4KICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLgogKi8KLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgpUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KClNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucwphbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi8qKgogKiBAZmlsZW92ZXJ2aWV3CiAqIEBzdXBwcmVzcyB7Y2hlY2tQcm90b3R5cGFsVHlwZXN9CiAqIEBsaWNlbnNlIENvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kCiAqIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkKICogYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieQogKiBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQCiAqIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxOCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDIxIFZhYWRpbiBMdGQuCiAqIFRoaXMgcHJvZ3JhbSBpcyBhdmFpbGFibGUgdW5kZXIgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGF2YWlsYWJsZSBhdCBodHRwczovL3ZhYWRpbi5jb20vbGljZW5zZS8KICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIExvZGFzaCA8aHR0cHM6Ly9sb2Rhc2guY29tLz4KICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPgogKiBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZSA8aHR0cHM6Ly9sb2Rhc2guY29tL2xpY2Vuc2U+CiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+CiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9ycwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKgogKiBAZmlsZW92ZXJ2aWV3IG1hbnVhbGx5IGFkZCBkMy1zZWxlY3Rpb24tbXVsdGkgdG8gZDMgZGVmYXVsdCBidW5kbGUuIE1vc3Qgb2YgdGhpcyBjb2RlIGlzCiAqIGNvcGllZCBmcm9tIGQzLXNlbGVjdGlvbi1tdWx0aUAxLjAuMC4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy1zZWxlY3Rpb24tbXVsdGkvaXNzdWVzLzExIGZvciB3aHkgd2UgaGF2ZSB0byBkbyB0aGlzCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGNvbnZlbmllbnQgdGh1bmsgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBjb21tb24gY2FzZQogKiBvZiBjcmVhdGluZyBhIG1lbW9pemVkIGZ1bmN0aW9uIHRoYXQgdGFrZXMgaXRzIGlucHV0cyBmcm9tIG11dGFibGUgY2xhc3MgcHJvcGVydGllcy4KICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICogQGZpbGVvdmVydmlldyBJbXBsZW1lbnRzIGEgZnVuY3Rpb24gbWVtb2l6ZXIgdXNpbmcgdGhlIFNpZ25hdHVyZSBBUEkuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyB0aGUgU2lnbmF0dXJlIEFQSSB0byBoZWxwIGluIGNvbXBhcmluZyB3aGVuIHR3bwogKiBQbG90dGFibGUgb2JqZWN0cyBoYXZlICJjaGFuZ2VkIi4KICoKICogTWVtb2l6YXRpb24gaW4gUGxvdHRhYmxlIGlzIGNvbXBsaWNhdGVkIGJ5IG11dGFibGUgc2NhbGVzIGFuZCBkYXRhc2V0cy4gV2UgY2Fubm90IHNpbXBseQogKiByZWZlcmVuY2UgY29tcGFyZSB0d28gZS5nLiBzY2FsZXMgc2luY2UgaXQgbWF5IGhhdmUgaW50ZXJuYWxseSBtdXRhdGVkLiBUbyByZXNvbHZlIHRoaXMsCiAqIHdlIHdyaXRlIGEgcmVjdXJzaXZlIFNpZ25hdHVyZSBpbnRlcmZhY2UgdGhhdCBob2xkcyBhbiBpbW11dGFibGUgc25hcHNob3Qgb2Ygd2hhdGV2ZXIKICogc3RhdGUgdGhlIHNjYWxlL2RhdGEgd2FzIGluIGF0IHRoZSB0aW1lLiBUaGVuIG9uIG1lbW9pemVkIGZ1bmN0aW9uIGludm9jYXRpb24gd2Ugc2lnbiB0aGUKICogbmV3IGlucHV0cyBhbmQgY29tcGFyZSB0aGUgc2lnbmF0dXJlcyB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIHJlY29tcHV0ZS4KICoKICogV2UgbXVzdCBoYW5kLXdyaXRlIGEgc2lnbmF0dXJlIGZvciBlYWNoIGN1c3RvbSBjbGFzcyB3ZSB3aXNoIHRvIHN1cHBvcnQuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTctcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxOSBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwoKKCgpPT57dmFyIFV1ZT1PYmplY3QuY3JlYXRlLE1PPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx6dWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixqdWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsR3VlPU9iamVjdC5nZXRQcm90b3R5cGVPZixXdWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx1OD0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLFNPPShuLHQpPT57Zm9yKHZhciBlIGluIHQpTU8obixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LGQ4PShuLHQsZSk9PihlPW51bGwhPW4/VXVlKEd1ZShuKSk6e30sKChuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIGp1ZSh0KSkhV3VlLmNhbGwobixyKSYmdW5kZWZpbmVkIT09ciYmTU8obixyLHtnZXQ6KCk9PnRbcl0sZW51bWVyYWJsZTohKGk9enVlKHQscikpfHxpLmVudW1lcmFibGV9KTtyZXR1cm4gbn0pKCF0JiZuJiZuLl9fZXNNb2R1bGU/ZTpNTyhlLCJkZWZhdWx0Iix7dmFsdWU6bixlbnVtZXJhYmxlOiEwfSksbikpLFc4PXU4KChkUWUseVMpPT57dmFyIE04LFM4LEU4LFQ4LEQ4LEE4LEk4LFA4LFI4LF9TLFZPLE84LGs4LEY4LG1nLE44LEw4LEI4LFY4LEg4LFU4LHo4LGo4LEc4LHZTOyFmdW5jdGlvbihuKXt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbD9nbG9iYWw6Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGY6Im9iamVjdCI9PXR5cGVvZiB0aGlzP3RoaXM6e307ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpIT09dCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTppLl9fZXNNb2R1bGU9ITApLGZ1bmN0aW9uKG8scyl7cmV0dXJuIGlbb109cj9yKG8scyk6c319ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoInRzbGliIixbImV4cG9ydHMiXSxmdW5jdGlvbihpKXtuKGUodCxlKGkpKSl9KTpuKCJvYmplY3QiPT10eXBlb2YgeVMmJiJvYmplY3QiPT10eXBlb2YgeVMuZXhwb3J0cz9lKHQsZSh5Uy5leHBvcnRzKSk6ZSh0KSl9KGZ1bmN0aW9uKG4pe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihpLHIpe2kuX19wcm90b19fPXJ9fHxmdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYoaVtvXT1yW29dKX07TTg9ZnVuY3Rpb24oaSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgciYmbnVsbCE9PXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhyKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvKCl7dGhpcy5jb25zdHJ1Y3Rvcj1pfXQoaSxyKSxpLnByb3RvdHlwZT1udWxsPT09cj9PYmplY3QuY3JlYXRlKHIpOihvLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbyl9LFM4PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGkpe2Zvcih2YXIgcixvPTEscz1hcmd1bWVudHMubGVuZ3RoO288cztvKyspZm9yKHZhciBhIGluIHI9YXJndW1lbnRzW29dKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLGEpJiYoaVthXT1yW2FdKTtyZXR1cm4gaX0sRTg9ZnVuY3Rpb24oaSxyKXt2YXIgbz17fTtmb3IodmFyIHMgaW4gaSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxzKSYmci5pbmRleE9mKHMpPDAmJihvW3NdPWlbc10pO2lmKG51bGwhPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgYT0wO2ZvcihzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaSk7YTxzLmxlbmd0aDthKyspci5pbmRleE9mKHNbYV0pPDAmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChpLHNbYV0pJiYob1tzW2FdXT1pW3NbYV1dKX1yZXR1cm4gb30sVDg9ZnVuY3Rpb24oaSxyLG8scyl7dmFyIGMsYT1hcmd1bWVudHMubGVuZ3RoLGw9YTwzP3I6bnVsbD09PXM/cz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk6cztpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0LmRlY29yYXRlKWw9UmVmbGVjdC5kZWNvcmF0ZShpLHIsbyxzKTtlbHNlIGZvcih2YXIgdT1pLmxlbmd0aC0xO3U+PTA7dS0tKShjPWlbdV0pJiYobD0oYTwzP2MobCk6YT4zP2MocixvLGwpOmMocixvKSl8fGwpO3JldHVybiBhPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLG8sbCksbH0sRDg9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtyKG8scyxpKX19LEE4PWZ1bmN0aW9uKGkscil7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSlyZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShpLHIpfSxJOD1mdW5jdGlvbihpLHIsbyxzKXtyZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUoaCl7dHJ5e3Aocy5uZXh0KGgpKX1jYXRjaChmKXtjKGYpfX1mdW5jdGlvbiBkKGgpe3RyeXtwKHMudGhyb3coaCkpfWNhdGNoKGYpe2MoZil9fWZ1bmN0aW9uIHAoaCl7aC5kb25lP2woaC52YWx1ZSk6ZnVuY3Rpb24obCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBvP2w6bmV3IG8oZnVuY3Rpb24oYyl7YyhsKX0pfShoLnZhbHVlKS50aGVuKHUsZCl9cCgocz1zLmFwcGx5KGkscnx8W10pKS5uZXh0KCkpfSl9LFA4PWZ1bmN0aW9uKGkscil7dmFyIHMsYSxsLGMsbz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZsWzBdKXRocm93IGxbMV07cmV0dXJuIGxbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gYz17bmV4dDp1KDApLHRocm93OnUoMSkscmV0dXJuOnUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihjW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGM7ZnVuY3Rpb24gdShwKXtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGZ1bmN0aW9uKHApe2lmKHMpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7YyYmKGM9MCxwWzBdJiYobz0wKSksbzspdHJ5e2lmKHM9MSxhJiYobD0yJnBbMF0/YS5yZXR1cm46cFswXT9hLnRocm93fHwoKGw9YS5yZXR1cm4pJiZsLmNhbGwoYSksMCk6YS5uZXh0KSYmIShsPWwuY2FsbChhLHBbMV0pKS5kb25lKXJldHVybiBsO3N3aXRjaChhPTAsbCYmKHA9WzImcFswXSxsLnZhbHVlXSkscFswXSl7Y2FzZSAwOmNhc2UgMTpsPXA7YnJlYWs7Y2FzZSA0OnJldHVybiBvLmxhYmVsKysse3ZhbHVlOnBbMV0sZG9uZTohMX07Y2FzZSA1Om8ubGFiZWwrKyxhPXBbMV0scD1bMF07Y29udGludWU7Y2FzZSA3OnA9by5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoIShsPShsPW8udHJ5cykubGVuZ3RoPjAmJmxbbC5sZW5ndGgtMV0pJiYoNj09PXBbMF18fDI9PT1wWzBdKSl7bz0wO2NvbnRpbnVlfWlmKDM9PT1wWzBdJiYoIWx8fHBbMV0+bFswXSYmcFsxXTxsWzNdKSl7by5sYWJlbD1wWzFdO2JyZWFrfWlmKDY9PT1wWzBdJiZvLmxhYmVsPGxbMV0pe28ubGFiZWw9bFsxXSxsPXA7YnJlYWt9aWYobCYmby5sYWJlbDxsWzJdKXtvLmxhYmVsPWxbMl0sby5vcHMucHVzaChwKTticmVha31sWzJdJiZvLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWV9cD1yLmNhbGwoaSxvKX1jYXRjaChoKXtwPVs2LGhdLGE9MH1maW5hbGx5e3M9bD0wfWlmKDUmcFswXSl0aHJvdyBwWzFdO3JldHVybnt2YWx1ZTpwWzBdP3BbMV06dm9pZCAwLGRvbmU6ITB9fShbcCxoXSl9fX0sUjg9ZnVuY3Rpb24oaSxyKXtmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJnZTKHIsaSxvKX0sdlM9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihpLHIsbyxzKXt2b2lkIDA9PT1zJiYocz1vKTt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsbyk7KCFhfHwoImdldCJpbiBhPyFyLl9fZXNNb2R1bGU6YS53cml0YWJsZXx8YS5jb25maWd1cmFibGUpKSYmKGE9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHJbb119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGkscyxhKX06ZnVuY3Rpb24oaSxyLG8scyl7dm9pZCAwPT09cyYmKHM9byksaVtzXT1yW29dfSxfUz1mdW5jdGlvbihpKXt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3Isbz1yJiZpW3JdLHM9MDtpZihvKXJldHVybiBvLmNhbGwoaSk7aWYoaSYmIm51bWJlciI9PXR5cGVvZiBpLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBpJiZzPj1pLmxlbmd0aCYmKGk9dm9pZCAwKSx7dmFsdWU6aSYmaVtzKytdLGRvbmU6IWl9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihyPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKX0sVk89ZnVuY3Rpb24oaSxyKXt2YXIgbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZpW1N5bWJvbC5pdGVyYXRvcl07aWYoIW8pcmV0dXJuIGk7dmFyIGEsYyxzPW8uY2FsbChpKSxsPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1yfHxyLS0gPjApJiYhKGE9cy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKX1jYXRjaCh1KXtjPXtlcnJvcjp1fX1maW5hbGx5e3RyeXthJiYhYS5kb25lJiYobz1zLnJldHVybikmJm8uY2FsbChzKX1maW5hbGx5e2lmKGMpdGhyb3cgYy5lcnJvcn19cmV0dXJuIGx9LE84PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWk9aS5jb25jYXQoVk8oYXJndW1lbnRzW3JdKSk7cmV0dXJuIGl9LGs4PWZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAscj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWkrPWFyZ3VtZW50c1tyXS5sZW5ndGg7dmFyIHM9QXJyYXkoaSksYT0wO2ZvcihyPTA7cjxvO3IrKylmb3IodmFyIGw9YXJndW1lbnRzW3JdLGM9MCx1PWwubGVuZ3RoO2M8dTtjKyssYSsrKXNbYV09bFtjXTtyZXR1cm4gc30sRjg9ZnVuY3Rpb24oaSxyLG8pe2lmKG98fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbCxzPTAsYT1yLmxlbmd0aDtzPGE7cysrKShsfHwhKHMgaW4gcikpJiYobHx8KGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwwLHMpKSxsW3NdPXJbc10pO3JldHVybiBpLmNvbmNhdChsfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSl9LG1nPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgbWc/KHRoaXMudj1pLHRoaXMpOm5ldyBtZyhpKX0sTjg9ZnVuY3Rpb24oaSxyLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYSxzPW8uYXBwbHkoaSxyfHxbXSksbD1bXTtyZXR1cm4gYT17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhO2Z1bmN0aW9uIGMobSl7c1ttXSYmKGFbbV09ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKF8seSl7bC5wdXNoKFttLEMsXyx5XSk+MXx8dShtLEMpfSl9KX1mdW5jdGlvbiB1KG0sQyl7dHJ5eyFmdW5jdGlvbihtKXttLnZhbHVlIGluc3RhbmNlb2YgbWc/UHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLGgpOmYobFswXVsyXSxtKX0oc1ttXShDKSl9Y2F0Y2goXyl7ZihsWzBdWzNdLF8pfX1mdW5jdGlvbiBwKG0pe3UoIm5leHQiLG0pfWZ1bmN0aW9uIGgobSl7dSgidGhyb3ciLG0pfWZ1bmN0aW9uIGYobSxDKXttKEMpLGwuc2hpZnQoKSxsLmxlbmd0aCYmdShsWzBdWzBdLGxbMF1bMV0pfX0sTDg9ZnVuY3Rpb24oaSl7dmFyIHIsbztyZXR1cm4gcj17fSxzKCJuZXh0IikscygidGhyb3ciLGZ1bmN0aW9uKGEpe3Rocm93IGF9KSxzKCJyZXR1cm4iKSxyW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30scjtmdW5jdGlvbiBzKGEsbCl7clthXT1pW2FdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6bWcoaVthXShjKSksZG9uZToicmV0dXJuIj09PWF9Omw/bChjKTpjfTpsfX0sQjg9ZnVuY3Rpb24oaSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBvLHI9aVtTeW1ib2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIHI/ci5jYWxsKGkpOihpPV9TKGkpLG89e30scygibmV4dCIpLHMoInRocm93IikscygicmV0dXJuIiksb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sbyk7ZnVuY3Rpb24gcyhsKXtvW2xdPWlbbF0mJmZ1bmN0aW9uKGMpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1LGQpeyFmdW5jdGlvbihsLGMsdSxkKXtQcm9taXNlLnJlc29sdmUoZCkudGhlbihmdW5jdGlvbihwKXtsKHt2YWx1ZTpwLGRvbmU6dX0pfSxjKX0odSxkLChjPWlbbF0oYykpLmRvbmUsYy52YWx1ZSl9KX19fSxWOD1mdW5jdGlvbihpLHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksInJhdyIse3ZhbHVlOnJ9KTppLnJhdz1yLGl9O3ZhciBlPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oaSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6cn0pfTpmdW5jdGlvbihpLHIpe2kuZGVmYXVsdD1yfTtIOD1mdW5jdGlvbihpKXtpZihpJiZpLl9fZXNNb2R1bGUpcmV0dXJuIGk7dmFyIHI9e307aWYobnVsbCE9aSlmb3IodmFyIG8gaW4gaSkiZGVmYXVsdCIhPT1vJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmdlMocixpLG8pO3JldHVybiBlKHIsaSkscn0sVTg9ZnVuY3Rpb24oaSl7cmV0dXJuIGkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9fSx6OD1mdW5jdGlvbihpLHIsbyxzKXtpZigiYSI9PT1vJiYhcyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IXM6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiJtIj09PW8/czoiYSI9PT1vP3MuY2FsbChpKTpzP3MudmFsdWU6ci5nZXQoaSl9LGo4PWZ1bmN0aW9uKGkscixvLHMsYSl7aWYoIm0iPT09cyl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGUiKTtpZigiYSI9PT1zJiYhYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcj9pIT09cnx8IWE6IXIuaGFzKGkpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuImEiPT09cz9hLmNhbGwoaSxvKTphP2EudmFsdWU9bzpyLnNldChpLG8pLG99LEc4PWZ1bmN0aW9uKGkscil7aWYobnVsbD09PXJ8fCJvYmplY3QiIT10eXBlb2YgciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaT9yPT09aTppLmhhcyhyKX0sbigiX19leHRlbmRzIixNOCksbigiX19hc3NpZ24iLFM4KSxuKCJfX3Jlc3QiLEU4KSxuKCJfX2RlY29yYXRlIixUOCksbigiX19wYXJhbSIsRDgpLG4oIl9fbWV0YWRhdGEiLEE4KSxuKCJfX2F3YWl0ZXIiLEk4KSxuKCJfX2dlbmVyYXRvciIsUDgpLG4oIl9fZXhwb3J0U3RhciIsUjgpLG4oIl9fY3JlYXRlQmluZGluZyIsdlMpLG4oIl9fdmFsdWVzIixfUyksbigiX19yZWFkIixWTyksbigiX19zcHJlYWQiLE84KSxuKCJfX3NwcmVhZEFycmF5cyIsazgpLG4oIl9fc3ByZWFkQXJyYXkiLEY4KSxuKCJfX2F3YWl0IixtZyksbigiX19hc3luY0dlbmVyYXRvciIsTjgpLG4oIl9fYXN5bmNEZWxlZ2F0b3IiLEw4KSxuKCJfX2FzeW5jVmFsdWVzIixCOCksbigiX19tYWtlVGVtcGxhdGVPYmplY3QiLFY4KSxuKCJfX2ltcG9ydFN0YXIiLEg4KSxuKCJfX2ltcG9ydERlZmF1bHQiLFU4KSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Iix6OCksbigiX19jbGFzc1ByaXZhdGVGaWVsZFNldCIsajgpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRzgpfSl9KSxaWT11OChWMz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbixNcD1WMyYmVjMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24obix0LGUpe2lmKGV8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbyxpPTAscj10Lmxlbmd0aDtpPHI7aSsrKShvfHwhKGkgaW4gdCkpJiYob3x8KG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwwLGkpKSxvW2ldPXRbaV0pO3JldHVybiBuLmNvbmNhdChvfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSl9O249ZnVuY3Rpb24oKXshZnVuY3Rpb24oVil7dmFyIHRlPVYucGVyZm9ybWFuY2U7ZnVuY3Rpb24gZGUoYnQpe3RlJiZ0ZS5tYXJrJiZ0ZS5tYXJrKGJ0KX1mdW5jdGlvbiBTKGJ0LF9lKXt0ZSYmdGUubWVhc3VyZSYmdGUubWVhc3VyZShidCxfZSl9ZGUoIlpvbmUiKTt2YXIgTD1WLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBxKGJ0KXtyZXR1cm4gTCtidH12YXIgWj0hMD09PVZbcSgiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoVi5ab25lKXtpZihafHwiZnVuY3Rpb24iIT10eXBlb2YgVi5ab25lLl9fc3ltYm9sX18pdGhyb3cgbmV3IEVycm9yKCJab25lIGFscmVhZHkgbG9hZGVkLiIpO3JldHVybiBWLlpvbmV9dmFyIGNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUpe3RoaXMuX3BhcmVudD1fZSx0aGlzLl9uYW1lPWJlP2JlLm5hbWV8fCJ1bm5hbWVkIjoiPHJvb3Q+Iix0aGlzLl9wcm9wZXJ0aWVzPWJlJiZiZS5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3ICRlKHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxiZSl9cmV0dXJuIGJ0LmFzc2VydFpvbmVQYXRjaGVkPWZ1bmN0aW9uKCl7aWYoVi5Qcm9taXNlIT09a24uWm9uZUF3YXJlUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIlpvbmUuanMgaGFzIGRldGVjdGVkIHRoYXQgWm9uZUF3YXJlUHJvbWlzZSBgKHdpbmRvd3xnbG9iYWwpLlByb21pc2VgIGhhcyBiZWVuIG92ZXJ3cml0dGVuLlxuTW9zdCBsaWtlbHkgY2F1c2UgaXMgdGhhdCBhIFByb21pc2UgcG9seWZpbGwgaGFzIGJlZW4gbG9hZGVkIGFmdGVyIFpvbmUuanMgKFBvbHlmaWxsaW5nIFByb21pc2UgYXBpIGlzIG5vdCBuZWNlc3Nhcnkgd2hlbiB6b25lLmpzIGlzIGxvYWRlZC4gSWYgeW91IG11c3QgbG9hZCBvbmUsIGRvIHNvIGJlZm9yZSBsb2FkaW5nIHpvbmUuanMuKSIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIF9lPWJ0LmN1cnJlbnQ7X2UucGFyZW50OylfZT1fZS5wYXJlbnQ7cmV0dXJuIF9lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiBkci56b25lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidCwiY3VycmVudFRhc2siLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQuX19sb2FkX3BhdGNoPWZ1bmN0aW9uKF9lLGJlLERlKXtpZih2b2lkIDA9PT1EZSYmKERlPSExKSxrbi5oYXNPd25Qcm9wZXJ0eShfZSkpe2lmKCFEZSYmWil0aHJvdyBFcnJvcigiQWxyZWFkeSBsb2FkZWQgcGF0Y2g6ICIrX2UpfWVsc2UgaWYoIVZbIl9fWm9uZV9kaXNhYmxlXyIrX2VdKXt2YXIgRW49IlpvbmU6IitfZTtkZShFbiksa25bX2VdPWJlKFYsYnQsZ3IpLFMoRW4sRW4pfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ0LnByb3RvdHlwZSwicGFyZW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJuYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYnQucHJvdG90eXBlLmdldD1mdW5jdGlvbihfZSl7dmFyIGJlPXRoaXMuZ2V0Wm9uZVdpdGgoX2UpO2lmKGJlKXJldHVybiBiZS5fcHJvcGVydGllc1tfZV19LGJ0LnByb3RvdHlwZS5nZXRab25lV2l0aD1mdW5jdGlvbihfZSl7Zm9yKHZhciBiZT10aGlzO2JlOyl7aWYoYmUuX3Byb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoX2UpKXJldHVybiBiZTtiZT1iZS5fcGFyZW50fXJldHVybiBudWxsfSxidC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbihfZSl7aWYoIV9lKXRocm93IG5ldyBFcnJvcigiWm9uZVNwZWMgcmVxdWlyZWQhIik7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5mb3JrKHRoaXMsX2UpfSxidC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihfZSxiZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIF9lKXRocm93IG5ldyBFcnJvcigiRXhwZWN0aW5nIGZ1bmN0aW9uIGdvdDogIitfZSk7dmFyIERlPXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxfZSxiZSksRW49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRW4ucnVuR3VhcmRlZChEZSx0aGlzLGFyZ3VtZW50cyxiZSl9fSxidC5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlKHRoaXMsX2UsYmUsRGUsRW4pfWZpbmFsbHl7ZHI9ZHIucGFyZW50fX0sYnQucHJvdG90eXBlLnJ1bkd1YXJkZWQ9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3ZvaWQgMD09PWJlJiYoYmU9bnVsbCksZHI9e3BhcmVudDpkcix6b25lOnRoaXN9O3RyeXt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxfZSxiZSxEZSxFbil9Y2F0Y2godnIpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHZyKSl0aHJvdyB2cn19ZmluYWxseXtkcj1kci5wYXJlbnR9fSxidC5wcm90b3R5cGUucnVuVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7aWYoX2Uuem9uZSE9dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkEgdGFzayBjYW4gb25seSBiZSBydW4gaW4gdGhlIHpvbmUgb2YgY3JlYXRpb24hIChDcmVhdGlvbjogIisoX2Uuem9uZXx8RHQpLm5hbWUrIjsgRXhlY3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKF9lLnN0YXRlIT09Z2l8fF9lLnR5cGUhPT1faSYmX2UudHlwZSE9PU9uKXt2YXIgRW49X2Uuc3RhdGUhPVhuO0VuJiZfZS5fdHJhbnNpdGlvblRvKFhuLFVuKSxfZS5ydW5Db3VudCsrO3ZhciB2cj1xcztxcz1fZSxkcj17cGFyZW50OmRyLHpvbmU6dGhpc307dHJ5e19lLnR5cGU9PU9uJiZfZS5kYXRhJiYhX2UuZGF0YS5pc1BlcmlvZGljJiYoX2UuY2FuY2VsRm49dm9pZCAwKTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2VUYXNrKHRoaXMsX2UsYmUsRGUpfWNhdGNoKEhsKXtpZih0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxIbCkpdGhyb3cgSGx9fWZpbmFsbHl7X2Uuc3RhdGUhPT1naSYmX2Uuc3RhdGUhPT1qaSYmKF9lLnR5cGU9PV9pfHxfZS5kYXRhJiZfZS5kYXRhLmlzUGVyaW9kaWM/RW4mJl9lLl90cmFuc2l0aW9uVG8oVW4sWG4pOihfZS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksRW4mJl9lLl90cmFuc2l0aW9uVG8oZ2ksWG4sZ2kpKSksZHI9ZHIucGFyZW50LHFzPXZyfX19LGJ0LnByb3RvdHlwZS5zY2hlZHVsZVRhc2s9ZnVuY3Rpb24oX2Upe2lmKF9lLnpvbmUmJl9lLnpvbmUhPT10aGlzKWZvcih2YXIgYmU9dGhpcztiZTspe2lmKGJlPT09X2Uuem9uZSl0aHJvdyBFcnJvcigiY2FuIG5vdCByZXNjaGVkdWxlIHRhc2sgdG8gIi5jb25jYXQodGhpcy5uYW1lLCIgd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgIikuY29uY2F0KF9lLnpvbmUubmFtZSkpO2JlPWJlLnBhcmVudH1fZS5fdHJhbnNpdGlvblRvKGVpLGdpKTt2YXIgRGU9W107X2UuX3pvbmVEZWxlZ2F0ZXM9RGUsX2UuX3pvbmU9dGhpczt0cnl7X2U9dGhpcy5fem9uZURlbGVnYXRlLnNjaGVkdWxlVGFzayh0aGlzLF9lKX1jYXRjaChFbil7dGhyb3cgX2UuX3RyYW5zaXRpb25UbyhqaSxlaSxnaSksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsRW4pLEVufXJldHVybiBfZS5fem9uZURlbGVnYXRlcz09PURlJiZ0aGlzLl91cGRhdGVUYXNrQ291bnQoX2UsMSksX2Uuc3RhdGU9PWVpJiZfZS5fdHJhbnNpdGlvblRvKFVuLGVpKSxfZX0sYnQucHJvdG90eXBlLnNjaGVkdWxlTWljcm9UYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKHduLF9lLGJlLERlLEVuLHZvaWQgMCkpfSxidC5wcm90b3R5cGUuc2NoZWR1bGVNYWNyb1Rhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4sdnIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgV2UoT24sX2UsYmUsRGUsRW4sdnIpKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlRXZlbnRUYXNrPWZ1bmN0aW9uKF9lLGJlLERlLEVuLHZyKXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IFdlKF9pLF9lLGJlLERlLEVuLHZyKSl9LGJ0LnByb3RvdHlwZS5jYW5jZWxUYXNrPWZ1bmN0aW9uKF9lKXtpZihfZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhfZS56b25lfHxEdCkubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYoX2Uuc3RhdGU9PT1Vbnx8X2Uuc3RhdGU9PT1Ybil7X2UuX3RyYW5zaXRpb25UbyhWdCxVbixYbik7dHJ5e3RoaXMuX3pvbmVEZWxlZ2F0ZS5jYW5jZWxUYXNrKHRoaXMsX2UpfWNhdGNoKGJlKXt0aHJvdyBfZS5fdHJhbnNpdGlvblRvKGppLFZ0KSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxiZSksYmV9cmV0dXJuIHRoaXMuX3VwZGF0ZVRhc2tDb3VudChfZSwtMSksX2UuX3RyYW5zaXRpb25UbyhnaSxWdCksX2UucnVuQ291bnQ9MCxfZX19LGJ0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKF9lLGJlKXt2YXIgRGU9X2UuX3pvbmVEZWxlZ2F0ZXM7LTE9PWJlJiYoX2UuX3pvbmVEZWxlZ2F0ZXM9bnVsbCk7Zm9yKHZhciBFbj0wO0VuPERlLmxlbmd0aDtFbisrKURlW0VuXS5fdXBkYXRlVGFza0NvdW50KF9lLnR5cGUsYmUpfSxidH0oKTtjZS5fX3N5bWJvbF9fPXE7dmFyIEppLFVlPXtuYW1lOiIiLG9uSGFzVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0Lmhhc1Rhc2soYmUsRGUpfSxvblNjaGVkdWxlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSl7cmV0dXJuIGJ0LnNjaGVkdWxlVGFzayhiZSxEZSl9LG9uSW52b2tlVGFzazpmdW5jdGlvbihidCxfZSxiZSxEZSxFbix2cil7cmV0dXJuIGJ0Lmludm9rZVRhc2soYmUsRGUsRW4sdnIpfSxvbkNhbmNlbFRhc2s6ZnVuY3Rpb24oYnQsX2UsYmUsRGUpe3JldHVybiBidC5jYW5jZWxUYXNrKGJlLERlKX19LCRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUpe3RoaXMuX3Rhc2tDb3VudHM9e21pY3JvVGFzazowLG1hY3JvVGFzazowLGV2ZW50VGFzazowfSx0aGlzLnpvbmU9X2UsdGhpcy5fcGFyZW50RGVsZWdhdGU9YmUsdGhpcy5fZm9ya1pTPURlJiYoRGUmJkRlLm9uRm9yaz9EZTpiZS5fZm9ya1pTKSx0aGlzLl9mb3JrRGxndD1EZSYmKERlLm9uRm9yaz9iZTpiZS5fZm9ya0RsZ3QpLHRoaXMuX2ZvcmtDdXJyWm9uZT1EZSYmKERlLm9uRm9yaz90aGlzLnpvbmU6YmUuX2ZvcmtDdXJyWm9uZSksdGhpcy5faW50ZXJjZXB0WlM9RGUmJihEZS5vbkludGVyY2VwdD9EZTpiZS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9RGUmJihEZS5vbkludGVyY2VwdD9iZTpiZS5faW50ZXJjZXB0RGxndCksdGhpcy5faW50ZXJjZXB0Q3VyclpvbmU9RGUmJihEZS5vbkludGVyY2VwdD90aGlzLnpvbmU6YmUuX2ludGVyY2VwdEN1cnJab25lKSx0aGlzLl9pbnZva2VaUz1EZSYmKERlLm9uSW52b2tlP0RlOmJlLl9pbnZva2VaUyksdGhpcy5faW52b2tlRGxndD1EZSYmKERlLm9uSW52b2tlP2JlOmJlLl9pbnZva2VEbGd0KSx0aGlzLl9pbnZva2VDdXJyWm9uZT1EZSYmKERlLm9uSW52b2tlP3RoaXMuem9uZTpiZS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9RGUmJihEZS5vbkhhbmRsZUVycm9yP0RlOmJlLl9oYW5kbGVFcnJvclpTKSx0aGlzLl9oYW5kbGVFcnJvckRsZ3Q9RGUmJihEZS5vbkhhbmRsZUVycm9yP2JlOmJlLl9oYW5kbGVFcnJvckRsZ3QpLHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmU9RGUmJihEZS5vbkhhbmRsZUVycm9yP3RoaXMuem9uZTpiZS5faGFuZGxlRXJyb3JDdXJyWm9uZSksdGhpcy5fc2NoZWR1bGVUYXNrWlM9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9EZTpiZS5fc2NoZWR1bGVUYXNrWlMpLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9RGUmJihEZS5vblNjaGVkdWxlVGFzaz9iZTpiZS5fc2NoZWR1bGVUYXNrRGxndCksdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9RGUmJihEZS5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6YmUuX3NjaGVkdWxlVGFza0N1cnJab25lKSx0aGlzLl9pbnZva2VUYXNrWlM9RGUmJihEZS5vbkludm9rZVRhc2s/RGU6YmUuX2ludm9rZVRhc2taUyksdGhpcy5faW52b2tlVGFza0RsZ3Q9RGUmJihEZS5vbkludm9rZVRhc2s/YmU6YmUuX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9RGUmJihEZS5vbkludm9rZVRhc2s/dGhpcy56b25lOmJlLl9pbnZva2VUYXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1EZSYmKERlLm9uQ2FuY2VsVGFzaz9EZTpiZS5fY2FuY2VsVGFza1pTKSx0aGlzLl9jYW5jZWxUYXNrRGxndD1EZSYmKERlLm9uQ2FuY2VsVGFzaz9iZTpiZS5fY2FuY2VsVGFza0RsZ3QpLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT1EZSYmKERlLm9uQ2FuY2VsVGFzaz90aGlzLnpvbmU6YmUuX2NhbmNlbFRhc2tDdXJyWm9uZSksdGhpcy5faGFzVGFza1pTPW51bGwsdGhpcy5faGFzVGFza0RsZ3Q9bnVsbCx0aGlzLl9oYXNUYXNrRGxndE93bmVyPW51bGwsdGhpcy5faGFzVGFza0N1cnJab25lPW51bGw7dmFyIEVuPURlJiZEZS5vbkhhc1Rhc2s7KEVufHxiZSYmYmUuX2hhc1Rhc2taUykmJih0aGlzLl9oYXNUYXNrWlM9RW4/RGU6VWUsdGhpcy5faGFzVGFza0RsZ3Q9YmUsdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1fZSxEZS5vblNjaGVkdWxlVGFza3x8KHRoaXMuX3NjaGVkdWxlVGFza1pTPVVlLHRoaXMuX3NjaGVkdWxlVGFza0RsZ3Q9YmUsdGhpcy5fc2NoZWR1bGVUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxEZS5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9VWUsdGhpcy5faW52b2tlVGFza0RsZ3Q9YmUsdGhpcy5faW52b2tlVGFza0N1cnJab25lPXRoaXMuem9uZSksRGUub25DYW5jZWxUYXNrfHwodGhpcy5fY2FuY2VsVGFza1pTPVVlLHRoaXMuX2NhbmNlbFRhc2tEbGd0PWJlLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1yZXR1cm4gYnQucHJvdG90eXBlLmZvcms9ZnVuY3Rpb24oX2UsYmUpe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlzLnpvbmUsX2UsYmUpOm5ldyBjZShfZSxiZSl9LGJ0LnByb3RvdHlwZS5pbnRlcmNlcHQ9ZnVuY3Rpb24oX2UsYmUsRGUpe3JldHVybiB0aGlzLl9pbnRlcmNlcHRaUz90aGlzLl9pbnRlcmNlcHRaUy5vbkludGVyY2VwdCh0aGlzLl9pbnRlcmNlcHREbGd0LHRoaXMuX2ludGVyY2VwdEN1cnJab25lLF9lLGJlLERlKTpiZX0sYnQucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihfZSxiZSxEZSxFbix2cil7cmV0dXJuIHRoaXMuX2ludm9rZVpTP3RoaXMuX2ludm9rZVpTLm9uSW52b2tlKHRoaXMuX2ludm9rZURsZ3QsdGhpcy5faW52b2tlQ3VyclpvbmUsX2UsYmUsRGUsRW4sdnIpOmJlLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmhhbmRsZUVycm9yPWZ1bmN0aW9uKF9lLGJlKXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLF9lLGJlKX0sYnQucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbihfZSxiZSl7dmFyIERlPWJlO2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmRGUuX3pvbmVEZWxlZ2F0ZXMucHVzaCh0aGlzLl9oYXNUYXNrRGxndE93bmVyKSwoRGU9dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxfZSxiZSkpfHwoRGU9YmUpO2Vsc2UgaWYoYmUuc2NoZWR1bGVGbiliZS5zY2hlZHVsZUZuKGJlKTtlbHNle2lmKGJlLnR5cGUhPXduKXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7bW4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmludm9rZVRhc2s9ZnVuY3Rpb24oX2UsYmUsRGUsRW4pe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsX2UsYmUsRGUsRW4pOmJlLmNhbGxiYWNrLmFwcGx5KERlLEVuKX0sYnQucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24oX2UsYmUpe3ZhciBEZTtpZih0aGlzLl9jYW5jZWxUYXNrWlMpRGU9dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFzayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsX2UsYmUpO2Vsc2V7aWYoIWJlLmNhbmNlbEZuKXRocm93IEVycm9yKCJUYXNrIGlzIG5vdCBjYW5jZWxhYmxlIik7RGU9YmUuY2FuY2VsRm4oYmUpfXJldHVybiBEZX0sYnQucHJvdG90eXBlLmhhc1Rhc2s9ZnVuY3Rpb24oX2UsYmUpe3RyeXt0aGlzLl9oYXNUYXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLF9lLGJlKX1jYXRjaChEZSl7dGhpcy5oYW5kbGVFcnJvcihfZSxEZSl9fSxidC5wcm90b3R5cGUuX3VwZGF0ZVRhc2tDb3VudD1mdW5jdGlvbihfZSxiZSl7dmFyIERlPXRoaXMuX3Rhc2tDb3VudHMsRW49RGVbX2VdLHZyPURlW19lXT1FbitiZTtpZih2cjwwKXRocm93IG5ldyBFcnJvcigiTW9yZSB0YXNrcyBleGVjdXRlZCB0aGVuIHdlcmUgc2NoZWR1bGVkLiIpOzAhPUVuJiYwIT12cnx8dGhpcy5oYXNUYXNrKHRoaXMuem9uZSx7bWljcm9UYXNrOkRlLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpEZS5tYWNyb1Rhc2s+MCxldmVudFRhc2s6RGUuZXZlbnRUYXNrPjAsY2hhbmdlOl9lfSl9LGJ0fSgpLFdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYnQoX2UsYmUsRGUsRW4sdnIsSGwpe2lmKHRoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVsZWQiLHRoaXMudHlwZT1fZSx0aGlzLnNvdXJjZT1iZSx0aGlzLmRhdGE9RW4sdGhpcy5zY2hlZHVsZUZuPXZyLHRoaXMuY2FuY2VsRm49SGwsIURlKXRocm93IG5ldyBFcnJvcigiY2FsbGJhY2sgaXMgbm90IGRlZmluZWQiKTt0aGlzLmNhbGxiYWNrPURlO3ZhciBldD10aGlzO3RoaXMuaW52b2tlPV9lPT09X2kmJkVuJiZFbi51c2VHP2J0Lmludm9rZVRhc2s6ZnVuY3Rpb24oKXtyZXR1cm4gYnQuaW52b2tlVGFzay5jYWxsKFYsZXQsdGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gYnQuaW52b2tlVGFzaz1mdW5jdGlvbihfZSxiZSxEZSl7X2V8fChfZT10aGlzKSxEcisrO3RyeXtyZXR1cm4gX2UucnVuQ291bnQrKyxfZS56b25lLnJ1blRhc2soX2UsYmUsRGUpfWZpbmFsbHl7MT09RHImJlJuKCksRHItLX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShidC5wcm90b3R5cGUsInpvbmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYnQucHJvdG90eXBlLCJzdGF0ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxidC5wcm90b3R5cGUuY2FuY2VsU2NoZWR1bGVSZXF1ZXN0PWZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvblRvKGdpLGVpKX0sYnQucHJvdG90eXBlLl90cmFuc2l0aW9uVG89ZnVuY3Rpb24oX2UsYmUsRGUpe2lmKHRoaXMuX3N0YXRlIT09YmUmJnRoaXMuX3N0YXRlIT09RGUpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdCh0aGlzLnR5cGUsIiAnIikuY29uY2F0KHRoaXMuc291cmNlLCInOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyIpLmNvbmNhdChfZSwiJywgZXhwZWN0aW5nIHN0YXRlICciKS5jb25jYXQoYmUsIiciKS5jb25jYXQoRGU/IiBvciAnIitEZSsiJyI6IiIsIiwgd2FzICciKS5jb25jYXQodGhpcy5fc3RhdGUsIicuIikpO3RoaXMuX3N0YXRlPV9lLF9lPT1naSYmKHRoaXMuX3pvbmVEZWxlZ2F0ZXM9bnVsbCl9LGJ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEmJnR5cGVvZiB0aGlzLmRhdGEuaGFuZGxlSWQ8InUiP3RoaXMuZGF0YS5oYW5kbGVJZC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX0sYnQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOnRoaXMudHlwZSxzdGF0ZTp0aGlzLnN0YXRlLHNvdXJjZTp0aGlzLnNvdXJjZSx6b25lOnRoaXMuem9uZS5uYW1lLHJ1bkNvdW50OnRoaXMucnVuQ291bnR9fSxidH0oKSxydD1xKCJzZXRUaW1lb3V0IiksZHQ9cSgiUHJvbWlzZSIpLFR0PXEoInRoZW4iKSxBdD1bXSxjbj0hMTtmdW5jdGlvbiB4aShidCl7aWYoSml8fFZbZHRdJiYoSmk9VltkdF0ucmVzb2x2ZSgwKSksSmkpe3ZhciBfZT1KaVtUdF07X2V8fChfZT1KaS50aGVuKSxfZS5jYWxsKEppLGJ0KX1lbHNlIFZbcnRdKGJ0LDApfWZ1bmN0aW9uIG1uKGJ0KXswPT09RHImJjA9PT1BdC5sZW5ndGgmJnhpKFJuKSxidCYmQXQucHVzaChidCl9ZnVuY3Rpb24gUm4oKXtpZighY24pe2Zvcihjbj0hMDtBdC5sZW5ndGg7KXt2YXIgYnQ9QXQ7QXQ9W107Zm9yKHZhciBfZT0wO19lPGJ0Lmxlbmd0aDtfZSsrKXt2YXIgYmU9YnRbX2VdO3RyeXtiZS56b25lLnJ1blRhc2soYmUsbnVsbCxudWxsKX1jYXRjaChEZSl7Z3Iub25VbmhhbmRsZWRFcnJvcihEZSl9fX1nci5taWNyb3Rhc2tEcmFpbkRvbmUoKSxjbj0hMX19dmFyIER0PXtuYW1lOiJOTyBaT05FIn0sZ2k9Im5vdFNjaGVkdWxlZCIsZWk9InNjaGVkdWxpbmciLFVuPSJzY2hlZHVsZWQiLFhuPSJydW5uaW5nIixWdD0iY2FuY2VsaW5nIixqaT0idW5rbm93biIsd249Im1pY3JvVGFzayIsT249Im1hY3JvVGFzayIsX2k9ImV2ZW50VGFzayIsa249e30sZ3I9e3N5bWJvbDpxLGN1cnJlbnRab25lRnJhbWU6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LG9uVW5oYW5kbGVkRXJyb3I6X3IsbWljcm90YXNrRHJhaW5Eb25lOl9yLHNjaGVkdWxlTWljcm9UYXNrOm1uLHNob3dVbmNhdWdodEVycm9yOmZ1bmN0aW9uKCl7cmV0dXJuIWNlW3EoImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV19LHBhdGNoRXZlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hPblByb3BlcnRpZXM6X3IscGF0Y2hNZXRob2Q6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LGJpbmRBcmd1bWVudHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hUaGVuOmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaE1hY3JvVGFzazpmdW5jdGlvbigpe3JldHVybiBfcn0scGF0Y2hFdmVudFByb3RvdHlwZTpmdW5jdGlvbigpe3JldHVybiBfcn0saXNJRU9yRWRnZTpmdW5jdGlvbigpe3JldHVybiExfSxnZXRHbG9iYWxPYmplY3RzOmZ1bmN0aW9uKCl7fSxPYmplY3REZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbigpe3JldHVybiBfcn0sT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKCl7fSxPYmplY3RDcmVhdGU6ZnVuY3Rpb24oKXt9LEFycmF5U2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm5bXX0scGF0Y2hDbGFzczpmdW5jdGlvbigpe3JldHVybiBfcn0sd3JhcFdpdGhDdXJyZW50Wm9uZTpmdW5jdGlvbigpe3JldHVybiBfcn0sZmlsdGVyUHJvcGVydGllczpmdW5jdGlvbigpe3JldHVybltdfSxhdHRhY2hPcmlnaW5Ub1BhdGNoZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gX3J9LF9yZWRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIF9yfSxwYXRjaENhbGxiYWNrczpmdW5jdGlvbigpe3JldHVybiBfcn0sbmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2s6eGl9LGRyPXtwYXJlbnQ6bnVsbCx6b25lOm5ldyBjZShudWxsLG51bGwpfSxxcz1udWxsLERyPTA7ZnVuY3Rpb24gX3IoKXt9UygiWm9uZSIsIlpvbmUiKSxWLlpvbmU9Y2V9KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8Z2xvYmFsKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LGU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGk9T2JqZWN0LmNyZWF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZSxvPSJhZGRFdmVudExpc3RlbmVyIixzPSJyZW1vdmVFdmVudExpc3RlbmVyIixhPVpvbmUuX19zeW1ib2xfXyhvKSxsPVpvbmUuX19zeW1ib2xfXyhzKSxjPSJ0cnVlIix1PSJmYWxzZSIsZD1ab25lLl9fc3ltYm9sX18oIiIpO2Z1bmN0aW9uIHAoVix0ZSl7cmV0dXJuIFpvbmUuY3VycmVudC53cmFwKFYsdGUpfWZ1bmN0aW9uIGgoVix0ZSxkZSxTLEwpe3JldHVybiBab25lLmN1cnJlbnQuc2NoZWR1bGVNYWNyb1Rhc2soVix0ZSxkZSxTLEwpfXZhciBmPVpvbmUuX19zeW1ib2xfXyxtPXR5cGVvZiB3aW5kb3c8InUiLEM9bT93aW5kb3c6dm9pZCAwLF89bSYmQ3x8Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmfHxnbG9iYWw7ZnVuY3Rpb24gSShWLHRlKXtmb3IodmFyIGRlPVYubGVuZ3RoLTE7ZGU+PTA7ZGUtLSkiZnVuY3Rpb24iPT10eXBlb2YgVltkZV0mJihWW2RlXT1wKFZbZGVdLHRlKyJfIitkZSkpO3JldHVybiBWfWZ1bmN0aW9uIE8oVil7cmV0dXJuIVZ8fCExIT09Vi53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgVi5nZXQmJnR5cGVvZiBWLnNldD4idSIpfXZhciBlZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUsWD0hKCJudyJpbiBfKSYmdHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSx4ZT0hWCYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksZmU9dHlwZW9mIF8ucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoXy5wcm9jZXNzKSYmIWVlJiYhKCFtfHwhQy5IVE1MRWxlbWVudCksdmU9e30sVD1mdW5jdGlvbihWKXtpZihWPVZ8fF8uZXZlbnQpe3ZhciB0ZT12ZVtWLnR5cGVdO3RlfHwodGU9dmVbVi50eXBlXT1mKCJPTl9QUk9QRVJUWSIrVi50eXBlKSk7dmFyIEwsZGU9dGhpc3x8Vi50YXJnZXR8fF8sUz1kZVt0ZV07aWYoeGUmJmRlPT09QyYmImVycm9yIj09PVYudHlwZSl7dmFyIHE9VjshMD09PShMPVMmJlMuY2FsbCh0aGlzLHEubWVzc2FnZSxxLmZpbGVuYW1lLHEubGluZW5vLHEuY29sbm8scS5lcnJvcikpJiZWLnByZXZlbnREZWZhdWx0KCl9ZWxzZSBudWxsIT0oTD1TJiZTLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkmJiFMJiZWLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIEx9fTtmdW5jdGlvbiBuZShWLHRlLGRlKXt2YXIgUz1uKFYsdGUpO2lmKCFTJiZkZSYmbihkZSx0ZSkmJihTPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLFMmJlMuY29uZmlndXJhYmxlKXt2YXIgcT1mKCJvbiIrdGUrInBhdGNoZWQiKTtpZighVi5oYXNPd25Qcm9wZXJ0eShxKXx8IVZbcV0pe2RlbGV0ZSBTLndyaXRhYmxlLGRlbGV0ZSBTLnZhbHVlO3ZhciBaPVMuZ2V0LGNlPVMuc2V0LFVlPXRlLnNsaWNlKDIpLCRlPXZlW1VlXTskZXx8KCRlPXZlW1VlXT1mKCJPTl9QUk9QRVJUWSIrVWUpKSxTLnNldD1mdW5jdGlvbihXZSl7dmFyIHJ0PXRoaXM7IXJ0JiZWPT09XyYmKHJ0PV8pLHJ0JiYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WyRlXSYmcnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihVZSxUKSxjZSYmY2UuY2FsbChydCxudWxsKSxydFskZV09V2UsImZ1bmN0aW9uIj09dHlwZW9mIFdlJiZydC5hZGRFdmVudExpc3RlbmVyKFVlLFQsITEpKX0sUy5nZXQ9ZnVuY3Rpb24oKXt2YXIgV2U9dGhpcztpZighV2UmJlY9PT1fJiYoV2U9XyksIVdlKXJldHVybiBudWxsO3ZhciBydD1XZVskZV07aWYocnQpcmV0dXJuIHJ0O2lmKFope3ZhciBkdD1aLmNhbGwodGhpcyk7aWYoZHQpcmV0dXJuIFMuc2V0LmNhbGwodGhpcyxkdCksImZ1bmN0aW9uIj09dHlwZW9mIFdlLnJlbW92ZUF0dHJpYnV0ZSYmV2UucmVtb3ZlQXR0cmlidXRlKHRlKSxkdH1yZXR1cm4gbnVsbH0sdChWLHRlLFMpLFZbcV09ITB9fX1mdW5jdGlvbiBsZShWLHRlLGRlKXtpZih0ZSlmb3IodmFyIFM9MDtTPHRlLmxlbmd0aDtTKyspbmUoViwib24iK3RlW1NdLGRlKTtlbHNle3ZhciBMPVtdO2Zvcih2YXIgcSBpbiBWKSJvbiI9PXEuc2xpY2UoMCwyKSYmTC5wdXNoKHEpO2Zvcih2YXIgWj0wO1o8TC5sZW5ndGg7WisrKW5lKFYsTFtaXSxkZSl9fXZhciBoZT1mKCJvcmlnaW5hbEluc3RhbmNlIik7ZnVuY3Rpb24geWUoVil7dmFyIHRlPV9bVl07aWYodGUpe19bZihWKV09dGUsX1tWXT1mdW5jdGlvbigpe3ZhciBMPUkoYXJndW1lbnRzLFYpO3N3aXRjaChMLmxlbmd0aCl7Y2FzZSAwOnRoaXNbaGVdPW5ldyB0ZTticmVhaztjYXNlIDE6dGhpc1toZV09bmV3IHRlKExbMF0pO2JyZWFrO2Nhc2UgMjp0aGlzW2hlXT1uZXcgdGUoTFswXSxMWzFdKTticmVhaztjYXNlIDM6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdKTticmVhaztjYXNlIDQ6dGhpc1toZV09bmV3IHRlKExbMF0sTFsxXSxMWzJdLExbM10pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJBcmcgbGlzdCB0b28gbG9uZy4iKX19LG1lKF9bVl0sdGUpO3ZhciBTLGRlPW5ldyB0ZShmdW5jdGlvbigpe30pO2ZvcihTIGluIGRlKSJYTUxIdHRwUmVxdWVzdCI9PT1WJiYicmVzcG9uc2VCbG9iIj09PVN8fGZ1bmN0aW9uKEwpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZVtMXT9fW1ZdLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB0aGlzW2hlXVtMXS5hcHBseSh0aGlzW2hlXSxhcmd1bWVudHMpfTp0KF9bVl0ucHJvdG90eXBlLEwse3NldDpmdW5jdGlvbihxKXsiZnVuY3Rpb24iPT10eXBlb2YgcT8odGhpc1toZV1bTF09cChxLFYrIi4iK0wpLG1lKHRoaXNbaGVdW0xdLHEpKTp0aGlzW2hlXVtMXT1xfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1toZV1bTF19fSl9KFMpO2ZvcihTIGluIHRlKSJwcm90b3R5cGUiIT09UyYmdGUuaGFzT3duUHJvcGVydHkoUykmJihfW1ZdW1NdPXRlW1NdKX19ZnVuY3Rpb24gSihWLHRlLGRlKXtmb3IodmFyIFM9VjtTJiYhUy5oYXNPd25Qcm9wZXJ0eSh0ZSk7KVM9ZShTKTshUyYmVlt0ZV0mJihTPVYpO3ZhciBMPWYodGUpLHE9bnVsbDtpZihTJiYoIShxPVNbTF0pfHwhUy5oYXNPd25Qcm9wZXJ0eShMKSkmJihxPVNbTF09U1t0ZV0sTyhTJiZuKFMsdGUpKSkpe3ZhciBjZT1kZShxLEwsdGUpO1NbdGVdPWZ1bmN0aW9uKCl7cmV0dXJuIGNlKHRoaXMsYXJndW1lbnRzKX0sbWUoU1t0ZV0scSl9cmV0dXJuIHF9ZnVuY3Rpb24gYWUoVix0ZSxkZSl7dmFyIFM9bnVsbDtmdW5jdGlvbiBMKHEpe3ZhciBaPXEuZGF0YTtyZXR1cm4gWi5hcmdzW1ouY2JJZHhdPWZ1bmN0aW9uKCl7cS5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxTLmFwcGx5KFoudGFyZ2V0LFouYXJncykscX1TPUooVix0ZSxmdW5jdGlvbihxKXtyZXR1cm4gZnVuY3Rpb24oWixjZSl7dmFyIFVlPWRlKFosY2UpO3JldHVybiBVZS5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIGNlW1VlLmNiSWR4XT9oKFVlLm5hbWUsY2VbVWUuY2JJZHhdLFVlLEwpOnEuYXBwbHkoWixjZSl9fSl9ZnVuY3Rpb24gbWUoVix0ZSl7VltmKCJPcmlnaW5hbERlbGVnYXRlIildPXRlfXZhciBqZT0hMSxNZT0hMTtmdW5jdGlvbiB1dCgpe2lmKGplKXJldHVybiBNZTtqZT0hMDt0cnl7dmFyIFY9Qy5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PVYuaW5kZXhPZigiTVNJRSAiKXx8LTEhPT1WLmluZGV4T2YoIlRyaWRlbnQvIil8fC0xIT09Vi5pbmRleE9mKCJFZGdlLyIpKSYmKE1lPSEwKX1jYXRjaHt9cmV0dXJuIE1lfVpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEw9T2JqZWN0LmRlZmluZVByb3BlcnR5LFo9ZGUuc3ltYm9sLGNlPVtdLFVlPSEwPT09VltaKCJESVNBQkxFX1dSQVBQSU5HX1VOQ0FVR0hUX1BST01JU0VfUkVKRUNUSU9OIildLCRlPVooIlByb21pc2UiKSxXZT1aKCJ0aGVuIik7ZGUub25VbmhhbmRsZWRFcnJvcj1mdW5jdGlvbihldCl7aWYoZGUuc2hvd1VuY2F1Z2h0RXJyb3IoKSl7dmFyIFJ0PWV0JiZldC5yZWplY3Rpb247UnQ/Y29uc29sZS5lcnJvcigiVW5oYW5kbGVkIFByb21pc2UgcmVqZWN0aW9uOiIsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5tZXNzYWdlOlJ0LCI7IFpvbmU6IixldC56b25lLm5hbWUsIjsgVGFzazoiLGV0LnRhc2smJmV0LnRhc2suc291cmNlLCI7IFZhbHVlOiIsUnQsUnQgaW5zdGFuY2VvZiBFcnJvcj9SdC5zdGFjazp2b2lkIDApOmNvbnNvbGUuZXJyb3IoZXQpfX0sZGUubWljcm90YXNrRHJhaW5Eb25lPWZ1bmN0aW9uKCl7Zm9yKHZhciBldD1mdW5jdGlvbigpe3ZhciBSdD1jZS5zaGlmdCgpO3RyeXtSdC56b25lLnJ1bkd1YXJkZWQoZnVuY3Rpb24oKXt0aHJvdyBSdC50aHJvd09yaWdpbmFsP1J0LnJlamVjdGlvbjpSdH0pfWNhdGNoKHd0KXshZnVuY3Rpb24oZXQpe2RlLm9uVW5oYW5kbGVkRXJyb3IoZXQpO3RyeXt2YXIgUnQ9dGVbZHRdOyJmdW5jdGlvbiI9PXR5cGVvZiBSdCYmUnQuY2FsbCh0aGlzLGV0KX1jYXRjaHt9fSh3dCl9fTtjZS5sZW5ndGg7KWV0KCl9O3ZhciBkdD1aKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIEF0KGV0KXtyZXR1cm4gZXQmJmV0LnRoZW59ZnVuY3Rpb24gY24oZXQpe3JldHVybiBldH1mdW5jdGlvbiBKaShldCl7cmV0dXJuIGJlLnJlamVjdChldCl9dmFyIHhpPVooInN0YXRlIiksbW49WigidmFsdWUiKSxSbj1aKCJmaW5hbGx5IiksRHQ9WigicGFyZW50UHJvbWlzZVZhbHVlIiksZ2k9WigicGFyZW50UHJvbWlzZVN0YXRlIiksVW49bnVsbCxWdD0hMTtmdW5jdGlvbiB3bihldCxSdCl7cmV0dXJuIGZ1bmN0aW9uKHd0KXt0cnl7Z3IoZXQsUnQsd3QpfWNhdGNoKEtlKXtncihldCwhMSxLZSl9fX12YXIgT249ZnVuY3Rpb24oKXt2YXIgZXQ9ITE7cmV0dXJuIGZ1bmN0aW9uKHd0KXtyZXR1cm4gZnVuY3Rpb24oKXtldHx8KGV0PSEwLHd0LmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fX0sa249WigiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIGdyKGV0LFJ0LHd0KXt2YXIgS2U9T24oKTtpZihldD09PXd0KXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiKTtpZihldFt4aV09PT1Vbil7dmFyIFh0PW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIHd0fHwiZnVuY3Rpb24iPT10eXBlb2Ygd3QpJiYoWHQ9d3QmJnd0LnRoZW4pfWNhdGNoKHNpKXtyZXR1cm4gS2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpLGV0fWlmKFJ0IT09VnQmJnd0IGluc3RhbmNlb2YgYmUmJnd0Lmhhc093blByb3BlcnR5KHhpKSYmd3QuaGFzT3duUHJvcGVydHkobW4pJiZ3dFt4aV0hPT1Vbilxcyh3dCksZ3IoZXQsd3RbeGldLHd0W21uXSk7ZWxzZSBpZihSdCE9PVZ0JiYiZnVuY3Rpb24iPT10eXBlb2YgWHQpdHJ5e1h0LmNhbGwod3QsS2Uod24oZXQsUnQpKSxLZSh3bihldCwhMSkpKX1jYXRjaChzaSl7S2UoZnVuY3Rpb24oKXtncihldCwhMSxzaSl9KSgpfWVsc2V7ZXRbeGldPVJ0O3ZhciBCbj1ldFttbl07aWYoZXRbbW5dPXd0LGV0W1JuXT09PVJuJiYhMD09PVJ0JiYoZXRbeGldPWV0W2dpXSxldFttbl09ZXRbRHRdKSxSdD09PVZ0JiZ3dCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgSW49dGUuY3VycmVudFRhc2smJnRlLmN1cnJlbnRUYXNrLmRhdGEmJnRlLmN1cnJlbnRUYXNrLmRhdGEuX19jcmVhdGlvblRyYWNlX187SW4mJkwod3Qsa24se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOklufSl9Zm9yKHZhciB0aT0wO3RpPEJuLmxlbmd0aDspRHIoZXQsQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10sQm5bdGkrK10pO2lmKDA9PUJuLmxlbmd0aCYmUnQ9PVZ0KXtldFt4aV09MDt2YXIgbmk9d3Q7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uKGV0KXtyZXR1cm4gZXQmJmV0LnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oZXQuY29uc3RydWN0b3ImJmV0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGV0KTpldD9ldC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldCl9KHd0KSsod3QmJnd0LnN0YWNrPyJcbiIrd3Quc3RhY2s6IiIpKX1jYXRjaChzaSl7bmk9c2l9VWUmJihuaS50aHJvd09yaWdpbmFsPSEwKSxuaS5yZWplY3Rpb249d3QsbmkucHJvbWlzZT1ldCxuaS56b25lPXRlLmN1cnJlbnQsbmkudGFzaz10ZS5jdXJyZW50VGFzayxjZS5wdXNoKG5pKSxkZS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIGV0fXZhciBkcj1aKCJyZWplY3Rpb25IYW5kbGVkSGFuZGxlciIpO2Z1bmN0aW9uIHFzKGV0KXtpZigwPT09ZXRbeGldKXt0cnl7dmFyIFJ0PXRlW2RyXTtSdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJ0JiZSdC5jYWxsKHRoaXMse3JlamVjdGlvbjpldFttbl0scHJvbWlzZTpldH0pfWNhdGNoe31ldFt4aV09VnQ7Zm9yKHZhciB3dD0wO3d0PGNlLmxlbmd0aDt3dCsrKWV0PT09Y2Vbd3RdLnByb21pc2UmJmNlLnNwbGljZSh3dCwxKX19ZnVuY3Rpb24gRHIoZXQsUnQsd3QsS2UsWHQpe3FzKGV0KTt2YXIgQm49ZXRbeGldLEluPUJuPyJmdW5jdGlvbiI9PXR5cGVvZiBLZT9LZTpjbjoiZnVuY3Rpb24iPT10eXBlb2YgWHQ/WHQ6Smk7UnQuc2NoZWR1bGVNaWNyb1Rhc2soIlByb21pc2UudGhlbiIsZnVuY3Rpb24oKXt0cnl7dmFyIHRpPWV0W21uXSxuaT0hIXd0JiZSbj09PXd0W1JuXTtuaSYmKHd0W0R0XT10aSx3dFtnaV09Qm4pO3ZhciBzaT1SdC5ydW4oSW4sdm9pZCAwLG5pJiZJbiE9PUppJiZJbiE9PWNuP1tdOlt0aV0pO2dyKHd0LCEwLHNpKX1jYXRjaChDaSl7Z3Iod3QsITEsQ2kpfX0sd3QpfXZhciBidD1mdW5jdGlvbigpe30sX2U9Vi5BZ2dyZWdhdGVFcnJvcixiZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGV0KFJ0KXt2YXIgd3Q9dGhpcztpZighKHd0IGluc3RhbmNlb2YgZXQpKXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhbiBpbnN0YW5jZW9mIFByb21pc2UuIik7d3RbeGldPVVuLHd0W21uXT1bXTt0cnl7dmFyIEtlPU9uKCk7UnQmJlJ0KEtlKHduKHd0LCEwKSksS2Uod24od3QsVnQpKSl9Y2F0Y2goWHQpe2dyKHd0LCExLFh0KX19cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIFpvbmVBd2FyZVByb21pc2UoKSB7IFtuYXRpdmUgY29kZV0gfSJ9LGV0LnJlc29sdmU9ZnVuY3Rpb24oUnQpe3JldHVybiBncihuZXcgdGhpcyhudWxsKSwhMCxSdCl9LGV0LnJlamVjdD1mdW5jdGlvbihSdCl7cmV0dXJuIGdyKG5ldyB0aGlzKG51bGwpLFZ0LFJ0KX0sZXQuYW55PWZ1bmN0aW9uKFJ0KXtpZighUnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBSdFtTeW1ib2wuaXRlcmF0b3JdKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB3dD1bXSxLZT0wO3RyeXtmb3IodmFyIFh0PTAsQm49UnQ7WHQ8Qm4ubGVuZ3RoO1h0KyspS2UrKyx3dC5wdXNoKGV0LnJlc29sdmUoQm5bWHRdKSl9Y2F0Y2h7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBfZShbXSwiQWxsIHByb21pc2VzIHdlcmUgcmVqZWN0ZWQiKSl9aWYoMD09PUtlKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgX2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO3ZhciB0aT0hMSxuaT1bXTtyZXR1cm4gbmV3IGV0KGZ1bmN0aW9uKHNpLENpKXtmb3IodmFyIHlyPTA7eXI8d3QubGVuZ3RoO3lyKyspd3RbeXJdLnRoZW4oZnVuY3Rpb24oUW8pe3RpfHwodGk9ITAsc2koUW8pKX0sZnVuY3Rpb24oUW8pe25pLnB1c2goUW8pLDA9PS0tS2UmJih0aT0hMCxDaShuZXcgX2UobmksIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpKX0pfSl9LGV0LnJhY2U9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZSxYdD1uZXcgdGhpcyhmdW5jdGlvbihDaSx5cil7d3Q9Q2ksS2U9eXJ9KTtmdW5jdGlvbiBCbihDaSl7d3QoQ2kpfWZ1bmN0aW9uIEluKENpKXtLZShDaSl9Zm9yKHZhciB0aT0wLG5pPVJ0O3RpPG5pLmxlbmd0aDt0aSsrKXt2YXIgc2k9bmlbdGldO0F0KHNpKXx8KHNpPXRoaXMucmVzb2x2ZShzaSkpLHNpLnRoZW4oQm4sSW4pfXJldHVybiBYdH0sZXQuYWxsPWZ1bmN0aW9uKFJ0KXtyZXR1cm4gZXQuYWxsV2l0aENhbGxiYWNrKFJ0KX0sZXQuYWxsU2V0dGxlZD1mdW5jdGlvbihSdCl7cmV0dXJuKHRoaXMmJnRoaXMucHJvdG90eXBlIGluc3RhbmNlb2YgZXQ/dGhpczpldCkuYWxsV2l0aENhbGxiYWNrKFJ0LHt0aGVuQ2FsbGJhY2s6ZnVuY3Rpb24oS2Upe3JldHVybntzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6S2V9fSxlcnJvckNhbGxiYWNrOmZ1bmN0aW9uKEtlKXtyZXR1cm57c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOktlfX19KX0sZXQuYWxsV2l0aENhbGxiYWNrPWZ1bmN0aW9uKFJ0LHd0KXtmb3IodmFyIEtlLFh0LEJuPW5ldyB0aGlzKGZ1bmN0aW9uKHNvLFJvKXtLZT1zbyxYdD1Sb30pLEluPTIsdGk9MCxuaT1bXSxzaT1mdW5jdGlvbihzbyl7QXQoc28pfHwoc289Q2kucmVzb2x2ZShzbykpO3ZhciBSbz10aTt0cnl7c28udGhlbihmdW5jdGlvbihacil7bmlbUm9dPXd0P3d0LnRoZW5DYWxsYmFjayhacik6WnIsMD09LS1JbiYmS2UobmkpfSxmdW5jdGlvbihacil7d3Q/KG5pW1JvXT13dC5lcnJvckNhbGxiYWNrKFpyKSwwPT0tLUluJiZLZShuaSkpOlh0KFpyKX0pfWNhdGNoKFpyKXtYdChacil9SW4rKyx0aSsrfSxDaT10aGlzLHlyPTAsUW89UnQ7eXI8UW8ubGVuZ3RoO3lyKyspc2koUW9beXJdKTtyZXR1cm4gMD09KEluLT0yKSYmS2UobmkpLEJufSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZXQucHJvdG90eXBlLFN5bWJvbC50b1N0cmluZ1RhZyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlByb21pc2UifSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldC5wcm90b3R5cGUsU3ltYm9sLnNwZWNpZXMse2dldDpmdW5jdGlvbigpe3JldHVybiBldH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxldC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihSdCx3dCl7dmFyIEtlLFh0PW51bGw9PT0oS2U9dGhpcy5jb25zdHJ1Y3Rvcil8fHZvaWQgMD09PUtlP3ZvaWQgMDpLZVtTeW1ib2wuc3BlY2llc107KCFYdHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFh0KSYmKFh0PXRoaXMuY29uc3RydWN0b3J8fGV0KTt2YXIgQm49bmV3IFh0KGJ0KSxJbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChJbixCbixSdCx3dCk6RHIodGhpcyxJbixCbixSdCx3dCksQm59LGV0LnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihSdCl7cmV0dXJuIHRoaXMudGhlbihudWxsLFJ0KX0sZXQucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oUnQpe3ZhciB3dCxLZT1udWxsPT09KHd0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT13dD92b2lkIDA6d3RbU3ltYm9sLnNwZWNpZXNdOyghS2V8fCJmdW5jdGlvbiIhPXR5cGVvZiBLZSkmJihLZT1ldCk7dmFyIFh0PW5ldyBLZShidCk7WHRbUm5dPVJuO3ZhciBCbj10ZS5jdXJyZW50O3JldHVybiB0aGlzW3hpXT09VW4/dGhpc1ttbl0ucHVzaChCbixYdCxSdCxSdCk6RHIodGhpcyxCbixYdCxSdCxSdCksWHR9LGV0fSgpO2JlLnJlc29sdmU9YmUucmVzb2x2ZSxiZS5yZWplY3Q9YmUucmVqZWN0LGJlLnJhY2U9YmUucmFjZSxiZS5hbGw9YmUuYWxsO3ZhciBEZT1WWyRlXT1WLlByb21pc2U7Vi5Qcm9taXNlPWJlO3ZhciBFbj1aKCJ0aGVuUGF0Y2hlZCIpO2Z1bmN0aW9uIHZyKGV0KXt2YXIgUnQ9ZXQucHJvdG90eXBlLHd0PVMoUnQsInRoZW4iKTtpZighd3R8fCExIT09d3Qud3JpdGFibGUmJnd0LmNvbmZpZ3VyYWJsZSl7dmFyIEtlPVJ0LnRoZW47UnRbV2VdPUtlLGV0LnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKFh0LEJuKXt2YXIgSW49dGhpcztyZXR1cm4gbmV3IGJlKGZ1bmN0aW9uKG5pLHNpKXtLZS5jYWxsKEluLG5pLHNpKX0pLnRoZW4oWHQsQm4pfSxldFtFbl09ITB9fXJldHVybiBkZS5wYXRjaFRoZW49dnIsRGUmJih2cihEZSksSihWLCJmZXRjaCIsZnVuY3Rpb24oZXQpe3JldHVybiBmdW5jdGlvbihldCl7cmV0dXJuIGZ1bmN0aW9uKFJ0LHd0KXt2YXIgS2U9ZXQuYXBwbHkoUnQsd3QpO2lmKEtlIGluc3RhbmNlb2YgYmUpcmV0dXJuIEtlO3ZhciBYdD1LZS5jb25zdHJ1Y3RvcjtyZXR1cm4gWHRbRW5dfHx2cihYdCksS2V9fShldCl9KSksUHJvbWlzZVt0ZS5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMiKV09Y2UsYmV9KSxab25lLl9fbG9hZF9wYXRjaCgidG9TdHJpbmciLGZ1bmN0aW9uKFYpe3ZhciB0ZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsZGU9ZigiT3JpZ2luYWxEZWxlZ2F0ZSIpLFM9ZigiUHJvbWlzZSIpLEw9ZigiRXJyb3IiKSxxPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMpe3ZhciAkZT10aGlzW2RlXTtpZigkZSlyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgJGU/dGUuY2FsbCgkZSk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKCRlKTtpZih0aGlzPT09UHJvbWlzZSl7dmFyIFdlPVZbU107aWYoV2UpcmV0dXJuIHRlLmNhbGwoV2UpfWlmKHRoaXM9PT1FcnJvcil7dmFyIHJ0PVZbTF07aWYocnQpcmV0dXJuIHRlLmNhbGwocnQpfX1yZXR1cm4gdGUuY2FsbCh0aGlzKX07cVtkZV09dGUsRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nPXE7dmFyIFo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpaLmNhbGwodGhpcyl9fSk7dmFyIFN0PSExO2lmKHR5cGVvZiB3aW5kb3c8InUiKXRyeXt2YXIgZ3Q9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OmZ1bmN0aW9uKCl7U3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGd0LGd0KSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsZ3QsZ3QpfWNhdGNoe1N0PSExfXZhciBvaSxVaSx6aSxRLEYsUmU9e3VzZUc6ITB9LEFuPXt9LEV0PXt9LG9uPW5ldyBSZWdFeHAoIl4iK2QrIihcXHcrKSh0cnVlfGZhbHNlKSQiKSxDZT1mKCJwcm9wYWdhdGlvblN0b3BwZWQiKTtmdW5jdGlvbiB2dChWLHRlKXt2YXIgZGU9KHRlP3RlKFYpOlYpK3UsUz0odGU/dGUoVik6VikrYyxMPWQrZGUscT1kK1M7QW5bVl09e30sQW5bVl1bdV09TCxBbltWXVtjXT1xfWZ1bmN0aW9uIF90KFYsdGUsZGUsUyl7dmFyIEw9UyYmUy5hZGR8fG8scT1TJiZTLnJtfHxzLFo9UyYmUy5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsY2U9UyYmUy5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsVWU9ZihMKSwkZT0iLiIrTCsiOiIsZHQ9ZnVuY3Rpb24oUm4sRHQsZ2kpe2lmKCFSbi5pc1JlbW92ZWQpe3ZhciBVbixlaT1Sbi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIGVpJiZlaS5oYW5kbGVFdmVudCYmKFJuLmNhbGxiYWNrPWZ1bmN0aW9uKGppKXtyZXR1cm4gZWkuaGFuZGxlRXZlbnQoamkpfSxSbi5vcmlnaW5hbERlbGVnYXRlPWVpKTt0cnl7Um4uaW52b2tlKFJuLER0LFtnaV0pfWNhdGNoKGppKXtVbj1qaX12YXIgWG49Um4ub3B0aW9ucztyZXR1cm4gWG4mJiJvYmplY3QiPT10eXBlb2YgWG4mJlhuLm9uY2UmJkR0W3FdLmNhbGwoRHQsZ2kudHlwZSxSbi5vcmlnaW5hbERlbGVnYXRlP1JuLm9yaWdpbmFsRGVsZWdhdGU6Um4uY2FsbGJhY2ssWG4pLFVufX07ZnVuY3Rpb24gVHQoUm4sRHQsZ2kpe2lmKER0PUR0fHxWLmV2ZW50KXt2YXIgZWk9Um58fER0LnRhcmdldHx8VixVbj1laVtBbltEdC50eXBlXVtnaT9jOnVdXTtpZihVbil7dmFyIFhuPVtdO2lmKDE9PT1Vbi5sZW5ndGgpKFZ0PWR0KFVuWzBdLGVpLER0KSkmJlhuLnB1c2goVnQpO2Vsc2UgZm9yKHZhciBqaT1Vbi5zbGljZSgpLHduPTA7d248amkubGVuZ3RoJiYoIUR0fHwhMCE9PUR0W0NlXSk7d24rKyl7dmFyIFZ0OyhWdD1kdChqaVt3bl0sZWksRHQpKSYmWG4ucHVzaChWdCl9aWYoMT09PVhuLmxlbmd0aCl0aHJvdyBYblswXTt2YXIgT249ZnVuY3Rpb24oX2kpe3ZhciBrbj1YbltfaV07dGUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBrbn0pfTtmb3Iod249MDt3bjxYbi5sZW5ndGg7d24rKylPbih3bil9fX12YXIgQXQ9ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCExKX0sY249ZnVuY3Rpb24oUm4pe3JldHVybiBUdCh0aGlzLFJuLCEwKX07ZnVuY3Rpb24gSmkoUm4sRHQpe2lmKCFSbilyZXR1cm4hMTt2YXIgZ2k9ITA7RHQmJnZvaWQgMCE9PUR0LnVzZUcmJihnaT1EdC51c2VHKTt2YXIgZWk9RHQmJkR0LnZoLFVuPSEwO0R0JiZ2b2lkIDAhPT1EdC5jaGtEdXAmJihVbj1EdC5jaGtEdXApO3ZhciBYbj0hMTtEdCYmdm9pZCAwIT09RHQucnQmJihYbj1EdC5ydCk7Zm9yKHZhciBWdD1SbjtWdCYmIVZ0Lmhhc093blByb3BlcnR5KEwpOylWdD1lKFZ0KTtpZighVnQmJlJuW0xdJiYoVnQ9Um4pLCFWdHx8VnRbVWVdKXJldHVybiExO3ZhciBkcixqaT1EdCYmRHQuZXZlbnROYW1lVG9TdHJpbmcsd249e30sT249VnRbVWVdPVZ0W0xdLF9pPVZ0W2YocSldPVZ0W3FdLGtuPVZ0W2YoWildPVZ0W1pdLGdyPVZ0W2YoY2UpXT1WdFtjZV07ZnVuY3Rpb24gcXMoS2UsWHQpe3JldHVybiFTdCYmIm9iamVjdCI9PXR5cGVvZiBLZSYmS2U/ISFLZS5jYXB0dXJlOlN0JiZYdD8iYm9vbGVhbiI9PXR5cGVvZiBLZT97Y2FwdHVyZTpLZSxwYXNzaXZlOiEwfTpLZT8ib2JqZWN0Ij09dHlwZW9mIEtlJiYhMSE9PUtlLnBhc3NpdmU/T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEtlKSx7cGFzc2l2ZTohMH0pOktlOntwYXNzaXZlOiEwfTpLZX1EdCYmRHQucHJlcGVuZCYmKGRyPVZ0W2YoRHQucHJlcGVuZCldPVZ0W0R0LnByZXBlbmRdKTt2YXIgRGU9Z2k/ZnVuY3Rpb24oS2Upe2lmKCF3bi5pc0V4aXN0aW5nKXJldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsd24uY2FwdHVyZT9jbjpBdCx3bi5vcHRpb25zKX06ZnVuY3Rpb24oS2Upe3JldHVybiBPbi5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbj1naT9mdW5jdGlvbihLZSl7aWYoIUtlLmlzUmVtb3ZlZCl7dmFyIFh0PUFuW0tlLmV2ZW50TmFtZV0sQm49dm9pZCAwO1h0JiYoQm49WHRbS2UuY2FwdHVyZT9jOnVdKTt2YXIgSW49Qm4mJktlLnRhcmdldFtCbl07aWYoSW4pZm9yKHZhciB0aT0wO3RpPEluLmxlbmd0aDt0aSsrKWlmKEluW3RpXT09PUtlKXtJbi5zcGxpY2UodGksMSksS2UuaXNSZW1vdmVkPSEwLDA9PT1Jbi5sZW5ndGgmJihLZS5hbGxSZW1vdmVkPSEwLEtlLnRhcmdldFtCbl09bnVsbCk7YnJlYWt9fWlmKEtlLmFsbFJlbW92ZWQpcmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5jYXB0dXJlP2NuOkF0LEtlLm9wdGlvbnMpfTpmdW5jdGlvbihLZSl7cmV0dXJuIF9pLmNhbGwoS2UudGFyZ2V0LEtlLmV2ZW50TmFtZSxLZS5pbnZva2UsS2Uub3B0aW9ucyl9LEhsPUR0JiZEdC5kaWZmP0R0LmRpZmY6ZnVuY3Rpb24oS2UsWHQpe3ZhciBCbj10eXBlb2YgWHQ7cmV0dXJuImZ1bmN0aW9uIj09PUJuJiZLZS5jYWxsYmFjaz09PVh0fHwib2JqZWN0Ij09PUJuJiZLZS5vcmlnaW5hbERlbGVnYXRlPT09WHR9LGV0PVpvbmVbZigiVU5QQVRDSEVEX0VWRU5UUyIpXSxSdD1WW2YoIlBBU1NJVkVfRVZFTlRTIildLHd0PWZ1bmN0aW9uKEtlLFh0LEJuLEluLHRpLG5pKXtyZXR1cm4gdm9pZCAwPT09dGkmJih0aT0hMSksdm9pZCAwPT09bmkmJihuaT0hMSksZnVuY3Rpb24oKXt2YXIgc2k9dGhpc3x8VixDaT1hcmd1bWVudHNbMF07RHQmJkR0LnRyYW5zZmVyRXZlbnROYW1lJiYoQ2k9RHQudHJhbnNmZXJFdmVudE5hbWUoQ2kpKTt2YXIgeXI9YXJndW1lbnRzWzFdO2lmKCF5cilyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKFgmJiJ1bmNhdWdodEV4Y2VwdGlvbiI9PT1DaSlyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBRbz0hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgeXIpe2lmKCF5ci5oYW5kbGVFdmVudClyZXR1cm4gS2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO1FvPSEwfWlmKCFlaXx8ZWkoS2UseXIsc2ksYXJndW1lbnRzKSl7dmFyIHF1PVN0JiYhIVJ0JiYtMSE9PVJ0LmluZGV4T2YoQ2kpLHNvPXFzKGFyZ3VtZW50c1syXSxxdSk7aWYoZXQpZm9yKHZhciBSbz0wO1JvPGV0Lmxlbmd0aDtSbysrKWlmKENpPT09ZXRbUm9dKXJldHVybiBxdT9LZS5jYWxsKHNpLENpLHlyLHNvKTpLZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIFpyPSEhc28mJigiYm9vbGVhbiI9PXR5cGVvZiBzb3x8c28uY2FwdHVyZSksYWc9ISghc298fCJvYmplY3QiIT10eXBlb2Ygc28pJiZzby5vbmNlLEh1ZT1ab25lLmN1cnJlbnQsd089QW5bQ2ldO3dPfHwodnQoQ2ksamkpLHdPPUFuW0NpXSk7dmFyIHM4PXdPW1pyP2M6dV0sbGc9c2lbczhdLGE4PSExO2lmKGxnKXtpZihhOD0hMCxVbilmb3IoUm89MDtSbzxsZy5sZW5ndGg7Um8rKylpZihIbChsZ1tSb10seXIpKXJldHVybn1lbHNlIGxnPXNpW3M4XT1bXTt2YXIgaVMsbDg9c2kuY29uc3RydWN0b3IubmFtZSxjOD1FdFtsOF07YzgmJihpUz1jOFtDaV0pLGlTfHwoaVM9bDgrWHQrKGppP2ppKENpKTpDaSkpLHduLm9wdGlvbnM9c28sYWcmJih3bi5vcHRpb25zLm9uY2U9ITEpLHduLnRhcmdldD1zaSx3bi5jYXB0dXJlPVpyLHduLmV2ZW50TmFtZT1DaSx3bi5pc0V4aXN0aW5nPWE4O3ZhciBWeT1naT9SZTp2b2lkIDA7VnkmJihWeS50YXNrRGF0YT13bik7dmFyIFFkPUh1ZS5zY2hlZHVsZUV2ZW50VGFzayhpUyx5cixWeSxCbixJbik7aWYod24udGFyZ2V0PW51bGwsVnkmJihWeS50YXNrRGF0YT1udWxsKSxhZyYmKHNvLm9uY2U9ITApLCFTdCYmImJvb2xlYW4iPT10eXBlb2YgUWQub3B0aW9uc3x8KFFkLm9wdGlvbnM9c28pLFFkLnRhcmdldD1zaSxRZC5jYXB0dXJlPVpyLFFkLmV2ZW50TmFtZT1DaSxRbyYmKFFkLm9yaWdpbmFsRGVsZWdhdGU9eXIpLG5pP2xnLnVuc2hpZnQoUWQpOmxnLnB1c2goUWQpLHRpKXJldHVybiBzaX19fTtyZXR1cm4gVnRbTF09d3QoT24sJGUsRGUsRW4sWG4pLGRyJiYoVnQucHJlcGVuZExpc3RlbmVyPXd0KGRyLCIucHJlcGVuZExpc3RlbmVyOiIsZnVuY3Rpb24oS2Upe3JldHVybiBkci5jYWxsKHduLnRhcmdldCx3bi5ldmVudE5hbWUsS2UuaW52b2tlLHduLm9wdGlvbnMpfSxFbixYbiwhMCkpLFZ0W3FdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7dmFyIEJuPWFyZ3VtZW50c1syXSxJbj0hIUJuJiYoImJvb2xlYW4iPT10eXBlb2YgQm58fEJuLmNhcHR1cmUpLHRpPWFyZ3VtZW50c1sxXTtpZighdGkpcmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZighZWl8fGVpKF9pLHRpLEtlLGFyZ3VtZW50cykpe3ZhciBzaSxuaT1BbltYdF07bmkmJihzaT1uaVtJbj9jOnVdKTt2YXIgQ2k9c2kmJktlW3NpXTtpZihDaSlmb3IodmFyIHlyPTA7eXI8Q2kubGVuZ3RoO3lyKyspe3ZhciBRbz1DaVt5cl07aWYoSGwoUW8sdGkpKXtpZihDaS5zcGxpY2UoeXIsMSksUW8uaXNSZW1vdmVkPSEwLDA9PT1DaS5sZW5ndGgmJihRby5hbGxSZW1vdmVkPSEwLEtlW3NpXT1udWxsLCJzdHJpbmciPT10eXBlb2YgWHQpKXt2YXIgcXU9ZCsiT05fUFJPUEVSVFkiK1h0O0tlW3F1XT1udWxsfXJldHVybiBRby56b25lLmNhbmNlbFRhc2soUW8pLFhuP0tlOnZvaWQgMH19cmV0dXJuIF9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LFZ0W1pdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO0R0JiZEdC50cmFuc2ZlckV2ZW50TmFtZSYmKFh0PUR0LnRyYW5zZmVyRXZlbnROYW1lKFh0KSk7Zm9yKHZhciBCbj1bXSxJbj1pZShLZSxqaT9qaShYdCk6WHQpLHRpPTA7dGk8SW4ubGVuZ3RoO3RpKyspe3ZhciBuaT1Jblt0aV0sc2k9bmkub3JpZ2luYWxEZWxlZ2F0ZT9uaS5vcmlnaW5hbERlbGVnYXRlOm5pLmNhbGxiYWNrO0JuLnB1c2goc2kpfXJldHVybiBCbn0sVnRbY2VdPWZ1bmN0aW9uKCl7dmFyIEtlPXRoaXN8fFYsWHQ9YXJndW1lbnRzWzBdO2lmKFh0KXtEdCYmRHQudHJhbnNmZXJFdmVudE5hbWUmJihYdD1EdC50cmFuc2ZlckV2ZW50TmFtZShYdCkpO3ZhciBDaT1BbltYdF07aWYoQ2kpe3ZhciB5cj1DaVt1XSxRbz1DaVtjXSxxdT1LZVt5cl0sc289S2VbUW9dO2lmKHF1KWZvcih2YXIgUm89cXUuc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXRoaXNbcV0uY2FsbCh0aGlzLFh0LChacj1Sb1tJbl0pLm9yaWdpbmFsRGVsZWdhdGU/WnIub3JpZ2luYWxEZWxlZ2F0ZTpaci5jYWxsYmFjayxaci5vcHRpb25zKTtpZihzbylmb3IoUm89c28uc2xpY2UoKSxJbj0wO0luPFJvLmxlbmd0aDtJbisrKXt2YXIgWnI7dGhpc1txXS5jYWxsKHRoaXMsWHQsKFpyPVJvW0luXSkub3JpZ2luYWxEZWxlZ2F0ZT9aci5vcmlnaW5hbERlbGVnYXRlOlpyLmNhbGxiYWNrLFpyLm9wdGlvbnMpfX19ZWxzZXt2YXIgQm49T2JqZWN0LmtleXMoS2UpO2ZvcihJbj0wO0luPEJuLmxlbmd0aDtJbisrKXt2YXIgdGk9Qm5bSW5dLG5pPW9uLmV4ZWModGkpLHNpPW5pJiZuaVsxXTtzaSYmInJlbW92ZUxpc3RlbmVyIiE9PXNpJiZ0aGlzW2NlXS5jYWxsKHRoaXMsc2kpfXRoaXNbY2VdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZihYbilyZXR1cm4gdGhpc30sbWUoVnRbTF0sT24pLG1lKFZ0W3FdLF9pKSxnciYmbWUoVnRbY2VdLGdyKSxrbiYmbWUoVnRbWl0sa24pLCEwfWZvcih2YXIgeGk9W10sbW49MDttbjxkZS5sZW5ndGg7bW4rKyl4aVttbl09SmkoZGVbbW5dLFMpO3JldHVybiB4aX1mdW5jdGlvbiBpZShWLHRlKXtpZighdGUpe3ZhciBkZT1bXTtmb3IodmFyIFMgaW4gVil7dmFyIEw9b24uZXhlYyhTKSxxPUwmJkxbMV07aWYocSYmKCF0ZXx8cT09PXRlKSl7dmFyIFo9VltTXTtpZihaKWZvcih2YXIgY2U9MDtjZTxaLmxlbmd0aDtjZSsrKWRlLnB1c2goWltjZV0pfX1yZXR1cm4gZGV9dmFyIFVlPUFuW3RlXTtVZXx8KHZ0KHRlKSxVZT1Bblt0ZV0pO3ZhciAkZT1WW1VlW3VdXSxXZT1WW1VlW2NdXTtyZXR1cm4gJGU/V2U/JGUuY29uY2F0KFdlKTokZS5zbGljZSgpOldlP1dlLnNsaWNlKCk6W119ZnVuY3Rpb24gY3QoVix0ZSl7dmFyIGRlPVYuRXZlbnQ7ZGUmJmRlLnByb3RvdHlwZSYmdGUucGF0Y2hNZXRob2QoZGUucHJvdG90eXBlLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLGZ1bmN0aW9uKFMpe3JldHVybiBmdW5jdGlvbihMLHEpe0xbQ2VdPSEwLFMmJlMuYXBwbHkoTCxxKX19KX1mdW5jdGlvbiBZZShWLHRlLGRlLFMsTCl7dmFyIHE9Wm9uZS5fX3N5bWJvbF9fKFMpO2lmKCF0ZVtxXSl7dmFyIFo9dGVbcV09dGVbU107dGVbU109ZnVuY3Rpb24oY2UsVWUsJGUpe3JldHVybiBVZSYmVWUucHJvdG90eXBlJiZMLmZvckVhY2goZnVuY3Rpb24oV2Upe3ZhciBydD0iIi5jb25jYXQoZGUsIi4iKS5jb25jYXQoUywiOjoiKStXZSxkdD1VZS5wcm90b3R5cGU7dHJ5e2lmKGR0Lmhhc093blByb3BlcnR5KFdlKSl7dmFyIFR0PVYuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGR0LFdlKTtUdCYmVHQudmFsdWU/KFR0LnZhbHVlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShUdC52YWx1ZSxydCksVi5fcmVkZWZpbmVQcm9wZXJ0eShVZS5wcm90b3R5cGUsV2UsVHQpKTpkdFtXZV0mJihkdFtXZV09Vi53cmFwV2l0aEN1cnJlbnRab25lKGR0W1dlXSxydCkpfWVsc2UgZHRbV2VdJiYoZHRbV2VdPVYud3JhcFdpdGhDdXJyZW50Wm9uZShkdFtXZV0scnQpKX1jYXRjaHt9fSksWi5jYWxsKHRlLGNlLFVlLCRlKX0sVi5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQodGVbU10sWil9fWZ1bmN0aW9uIHh0KFYsdGUsZGUpe2lmKCFkZXx8MD09PWRlLmxlbmd0aClyZXR1cm4gdGU7dmFyIFM9ZGUuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLnRhcmdldD09PVZ9KTtpZighU3x8MD09PVMubGVuZ3RoKXJldHVybiB0ZTt2YXIgTD1TWzBdLmlnbm9yZVByb3BlcnRpZXM7cmV0dXJuIHRlLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4tMT09PUwuaW5kZXhPZihxKX0pfWZ1bmN0aW9uIGh0KFYsdGUsZGUsUyl7ViYmbGUoVix4dChWLHRlLGRlKSxTKX1mdW5jdGlvbiBzbihWKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoVikuZmlsdGVyKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUuc3RhcnRzV2l0aCgib24iKSYmdGUubGVuZ3RoPjJ9KS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiB0ZS5zdWJzdHJpbmcoMil9KX1mdW5jdGlvbiBDdChWLHRlLGRlKXt2YXIgUz1kZS5jb25maWd1cmFibGU7cmV0dXJuIGduKFYsdGUsZGU9QmUoVix0ZSxkZSksUyl9ZnVuY3Rpb24gdG4oVix0ZSl7cmV0dXJuIFYmJlZbRl0mJlZbRl1bdGVdfWZ1bmN0aW9uIEJlKFYsdGUsZGUpe3JldHVybiBPYmplY3QuaXNGcm96ZW4oZGUpfHwoZGUuY29uZmlndXJhYmxlPSEwKSxkZS5jb25maWd1cmFibGV8fCghVltGXSYmIU9iamVjdC5pc0Zyb3plbihWKSYmVWkoVixGLHt3cml0YWJsZTohMCx2YWx1ZTp7fX0pLFZbRl0mJihWW0ZdW3RlXT0hMCkpLGRlfWZ1bmN0aW9uIGduKFYsdGUsZGUsUyl7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChaKXtpZighZGUuY29uZmlndXJhYmxlKXRocm93IFo7dHlwZW9mIFM+InUiP2RlbGV0ZSBkZS5jb25maWd1cmFibGU6ZGUuY29uZmlndXJhYmxlPVM7dHJ5e3JldHVybiBVaShWLHRlLGRlKX1jYXRjaChjZSl7dmFyIEw9ITE7aWYoKCJjcmVhdGVkQ2FsbGJhY2siPT09dGV8fCJhdHRhY2hlZENhbGxiYWNrIj09PXRlfHwiZGV0YWNoZWRDYWxsYmFjayI9PT10ZXx8ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayI9PT10ZSkmJihMPSEwKSwhTCl0aHJvdyBjZTt2YXIgcT1udWxsO3RyeXtxPUpTT04uc3RyaW5naWZ5KGRlKX1jYXRjaHtxPWRlLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciLmNvbmNhdCh0ZSwiJyB3aXRoIGRlc2NyaXB0b3IgJyIpLmNvbmNhdChxLCInIG9uIG9iamVjdCAnIikuY29uY2F0KFYsIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiKS5jb25jYXQoY2UpKX19fVpvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihWLHRlLGRlKXt2YXIgUz1zbihWKTtkZS5wYXRjaE9uUHJvcGVydGllcz1sZSxkZS5wYXRjaE1ldGhvZD1KLGRlLmJpbmRBcmd1bWVudHM9SSxkZS5wYXRjaE1hY3JvVGFzaz1hZTt2YXIgTD10ZS5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIikscT10ZS5fX3N5bWJvbF9fKCJVTlBBVENIRURfRVZFTlRTIik7VltxXSYmKFZbTF09VltxXSksVltMXSYmKHRlW0xdPXRlW3FdPVZbTF0pLGRlLnBhdGNoRXZlbnRQcm90b3R5cGU9Y3QsZGUucGF0Y2hFdmVudFRhcmdldD1fdCxkZS5pc0lFT3JFZGdlPXV0LGRlLk9iamVjdERlZmluZVByb3BlcnR5PXQsZGUuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPW4sZGUuT2JqZWN0Q3JlYXRlPWksZGUuQXJyYXlTbGljZT1yLGRlLnBhdGNoQ2xhc3M9eWUsZGUud3JhcFdpdGhDdXJyZW50Wm9uZT1wLGRlLmZpbHRlclByb3BlcnRpZXM9eHQsZGUuYXR0YWNoT3JpZ2luVG9QYXRjaGVkPW1lLGRlLl9yZWRlZmluZVByb3BlcnR5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxkZS5wYXRjaENhbGxiYWNrcz1ZZSxkZS5nZXRHbG9iYWxPYmplY3RzPWZ1bmN0aW9uKCl7cmV0dXJue2dsb2JhbFNvdXJjZXM6RXQsem9uZVN5bWJvbEV2ZW50TmFtZXM6QW4sZXZlbnROYW1lczpTLGlzQnJvd3Nlcjp4ZSxpc01peDpmZSxpc05vZGU6WCxUUlVFX1NUUjpjLEZBTFNFX1NUUjp1LFpPTkVfU1lNQk9MX1BSRUZJWDpkLEFERF9FVkVOVF9MSVNURU5FUl9TVFI6byxSRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSOnN9fX0pO3ZhciBWLG9zPU1wKE1wKE1wKE1wKE1wKE1wKE1wKE1wKFtdLFsiYWJvcnQiLCJhbmltYXRpb25jYW5jZWwiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhdXhjbGljayIsImJlZm9yZWlucHV0IiwiYmx1ciIsImNhbmNlbCIsImNhbnBsYXkiLCJjYW5wbGF5dGhyb3VnaCIsImNoYW5nZSIsImNvbXBvc2l0aW9uc3RhcnQiLCJjb21wb3NpdGlvbnVwZGF0ZSIsImNvbXBvc2l0aW9uZW5kIiwiY3VlY2hhbmdlIiwiY2xpY2siLCJjbG9zZSIsImNvbnRleHRtZW51IiwiY3VyZWNoYW5nZSIsImRibGNsaWNrIiwiZHJhZyIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLCJkcmFnZXhpdCIsImRyYWdsZWF2ZSIsImRyYWdvdmVyIiwiZHJvcCIsImR1cmF0aW9uY2hhbmdlIiwiZW1wdGllZCIsImVuZGVkIiwiZXJyb3IiLCJmb2N1cyIsImZvY3VzaW4iLCJmb2N1c291dCIsImdvdHBvaW50ZXJjYXB0dXJlIiwiaW5wdXQiLCJpbnZhbGlkIiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJsb2FkIiwibG9hZHN0YXJ0IiwibG9hZGVkZGF0YSIsImxvYWRlZG1ldGFkYXRhIiwibG9zdHBvaW50ZXJjYXB0dXJlIiwibW91c2Vkb3duIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIm1vdXNlb3ZlciIsIm1vdXNldXAiLCJtb3VzZXdoZWVsIiwib3JpZW50YXRpb25jaGFuZ2UiLCJwYXVzZSIsInBsYXkiLCJwbGF5aW5nIiwicG9pbnRlcmNhbmNlbCIsInBvaW50ZXJkb3duIiwicG9pbnRlcmVudGVyIiwicG9pbnRlcmxlYXZlIiwicG9pbnRlcmxvY2tjaGFuZ2UiLCJtb3pwb2ludGVybG9ja2NoYW5nZSIsIndlYmtpdHBvaW50ZXJsb2NrZXJjaGFuZ2UiLCJwb2ludGVybG9ja2Vycm9yIiwibW96cG9pbnRlcmxvY2tlcnJvciIsIndlYmtpdHBvaW50ZXJsb2NrZXJyb3IiLCJwb2ludGVybW92ZSIsInBvaW50b3V0IiwicG9pbnRlcm92ZXIiLCJwb2ludGVydXAiLCJwcm9ncmVzcyIsInJhdGVjaGFuZ2UiLCJyZXNldCIsInJlc2l6ZSIsInNjcm9sbCIsInNlZWtlZCIsInNlZWtpbmciLCJzZWxlY3QiLCJzZWxlY3Rpb25jaGFuZ2UiLCJzZWxlY3RzdGFydCIsInNob3ciLCJzb3J0Iiwic3RhbGxlZCIsInN1Ym1pdCIsInN1c3BlbmQiLCJ0aW1ldXBkYXRlIiwidm9sdW1lY2hhbmdlIiwidG91Y2hjYW5jZWwiLCJ0b3VjaG1vdmUiLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiLCJ0cmFuc2l0aW9uY2FuY2VsIiwidHJhbnNpdGlvbmVuZCIsIndhaXRpbmciLCJ3aGVlbCJdLCEwKSxbIndlYmdsY29udGV4dHJlc3RvcmVkIiwid2ViZ2xjb250ZXh0bG9zdCIsIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiXSwhMCksWyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVlcnJvciJdLCEwKSxbInRvZ2dsZSJdLCEwKSxbImFmdGVyc2NyaXB0ZXhlY3V0ZSIsImJlZm9yZXNjcmlwdGV4ZWN1dGUiLCJET01Db250ZW50TG9hZGVkIiwiZnJlZXplIiwiZnVsbHNjcmVlbmNoYW5nZSIsIm1vemZ1bGxzY3JlZW5jaGFuZ2UiLCJ3ZWJraXRmdWxsc2NyZWVuY2hhbmdlIiwibXNmdWxsc2NyZWVuY2hhbmdlIiwiZnVsbHNjcmVlbmVycm9yIiwibW96ZnVsbHNjcmVlbmVycm9yIiwid2Via2l0ZnVsbHNjcmVlbmVycm9yIiwibXNmdWxsc2NyZWVuZXJyb3IiLCJyZWFkeXN0YXRlY2hhbmdlIiwidmlzaWJpbGl0eWNoYW5nZSIsInJlc3VtZSJdLCEwKSxbImFic29sdXRlZGV2aWNlb3JpZW50YXRpb24iLCJhZnRlcmlucHV0IiwiYWZ0ZXJwcmludCIsImFwcGluc3RhbGxlZCIsImJlZm9yZWluc3RhbGxwcm9tcHQiLCJiZWZvcmVwcmludCIsImJlZm9yZXVubG9hZCIsImRldmljZWxpZ2h0IiwiZGV2aWNlbW90aW9uIiwiZGV2aWNlb3JpZW50YXRpb24iLCJkZXZpY2VvcmllbnRhdGlvbmFic29sdXRlIiwiZGV2aWNlcHJveGltaXR5IiwiaGFzaGNoYW5nZSIsImxhbmd1YWdlY2hhbmdlIiwibWVzc2FnZSIsIm1vemJlZm9yZXBhaW50Iiwib2ZmbGluZSIsIm9ubGluZSIsInBhaW50IiwicGFnZXNob3ciLCJwYWdlaGlkZSIsInBvcHN0YXRlIiwicmVqZWN0aW9uaGFuZGxlZCIsInN0b3JhZ2UiLCJ1bmhhbmRsZWRyZWplY3Rpb24iLCJ1bmxvYWQiLCJ1c2VycHJveGltaXR5IiwidnJkaXNwbGF5Y29ubmVjdGVkIiwidnJkaXNwbGF5ZGlzY29ubmVjdGVkIiwidnJkaXNwbGF5cHJlc2VudGNoYW5nZSJdLCEwKSxbImJlZm9yZWNvcHkiLCJiZWZvcmVjdXQiLCJiZWZvcmVwYXN0ZSIsImNvcHkiLCJjdXQiLCJwYXN0ZSIsImRyYWdzdGFydCIsImxvYWRlbmQiLCJhbmltYXRpb25zdGFydCIsInNlYXJjaCIsInRyYW5zaXRpb25ydW4iLCJ0cmFuc2l0aW9uc3RhcnQiLCJ3ZWJraXRhbmltYXRpb25lbmQiLCJ3ZWJraXRhbmltYXRpb25pdGVyYXRpb24iLCJ3ZWJraXRhbmltYXRpb25zdGFydCIsIndlYmtpdHRyYW5zaXRpb25lbmQiXSwhMCksWyJhY3RpdmF0ZSIsImFmdGVydXBkYXRlIiwiYXJpYXJlcXVlc3QiLCJiZWZvcmVhY3RpdmF0ZSIsImJlZm9yZWRlYWN0aXZhdGUiLCJiZWZvcmVlZGl0Zm9jdXMiLCJiZWZvcmV1cGRhdGUiLCJjZWxsY2hhbmdlIiwiY29udHJvbHNlbGVjdCIsImRhdGFhdmFpbGFibGUiLCJkYXRhc2V0Y2hhbmdlZCIsImRhdGFzZXRjb21wbGV0ZSIsImVycm9ydXBkYXRlIiwiZmlsdGVyY2hhbmdlIiwibGF5b3V0Y29tcGxldGUiLCJsb3NlY2FwdHVyZSIsIm1vdmUiLCJtb3ZlZW5kIiwibW92ZXN0YXJ0IiwicHJvcGVydHljaGFuZ2UiLCJyZXNpemVlbmQiLCJyZXNpemVzdGFydCIsInJvd2VudGVyIiwicm93ZXhpdCIsInJvd3NkZWxldGUiLCJyb3dzaW5zZXJ0ZWQiLCJjb21tYW5kIiwiY29tcGFzc25lZWRzY2FsaWJyYXRpb24iLCJkZWFjdGl2YXRlIiwiaGVscCIsIm1zY29udGVudHpvb20iLCJtc21hbmlwdWxhdGlvbnN0YXRlY2hhbmdlZCIsIm1zZ2VzdHVyZWNoYW5nZSIsIm1zZ2VzdHVyZWRvdWJsZXRhcCIsIm1zZ2VzdHVyZWVuZCIsIm1zZ2VzdHVyZWhvbGQiLCJtc2dlc3R1cmVzdGFydCIsIm1zZ2VzdHVyZXRhcCIsIm1zZ290cG9pbnRlcmNhcHR1cmUiLCJtc2luZXJ0aWFzdGFydCIsIm1zbG9zdHBvaW50ZXJjYXB0dXJlIiwibXNwb2ludGVyY2FuY2VsIiwibXNwb2ludGVyZG93biIsIm1zcG9pbnRlcmVudGVyIiwibXNwb2ludGVyaG92ZXIiLCJtc3BvaW50ZXJsZWF2ZSIsIm1zcG9pbnRlcm1vdmUiLCJtc3BvaW50ZXJvdXQiLCJtc3BvaW50ZXJvdmVyIiwibXNwb2ludGVydXAiLCJwb2ludGVyb3V0IiwibXNzaXRlbW9kZWp1bXBsaXN0aXRlbXJlbW92ZWQiLCJtc3RodW1ibmFpbGNsaWNrIiwic3RvcCIsInN0b3JhZ2Vjb21taXQiXSwhMCk7KFY9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSlbKCJsZWdhY3lQYXRjaCIsKFYuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iKSsibGVnYWN5UGF0Y2giKV09ZnVuY3Rpb24oKXt2YXIgUz1WLlpvbmU7Uy5fX2xvYWRfcGF0Y2goImRlZmluZVByb3BlcnR5IixmdW5jdGlvbihMLHEsWil7Wi5fcmVkZWZpbmVQcm9wZXJ0eT1DdCxvaT1ab25lLl9fc3ltYm9sX18sVWk9T2JqZWN0W29pKCJkZWZpbmVQcm9wZXJ0eSIpXT1PYmplY3QuZGVmaW5lUHJvcGVydHksemk9T2JqZWN0W29pKCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiKV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixRPU9iamVjdC5jcmVhdGUsRj1vaSgidW5jb25maWd1cmFibGVzIiksT2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKFYsdGUsZGUpe2lmKHRuKFYsdGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhc3NpZ24gdG8gcmVhZCBvbmx5IHByb3BlcnR5ICciK3RlKyInIG9mICIrVik7dmFyIFM9ZGUuY29uZmlndXJhYmxlO3JldHVybiJwcm90b3R5cGUiIT09dGUmJihkZT1CZShWLHRlLGRlKSksZ24oVix0ZSxkZSxTKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9ZnVuY3Rpb24oVix0ZSl7T2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oWil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFYsWix0ZVtaXSl9KTtmb3IodmFyIGRlPTAsUz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRlKTtkZTxTLmxlbmd0aDtkZSsrKXt2YXIgTD1TW2RlXTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlLEwpPy5lbnVtZXJhYmxlJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVixMLHRlW0xdKX1yZXR1cm4gVn0sT2JqZWN0LmNyZWF0ZT1mdW5jdGlvbihWLHRlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRlJiYhT2JqZWN0LmlzRnJvemVuKHRlKSYmT2JqZWN0LmtleXModGUpLmZvckVhY2goZnVuY3Rpb24oZGUpe3RlW2RlXT1CZShWLGRlLHRlW2RlXSl9KSxRKFYsdGUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT16aShWLHRlKTtyZXR1cm4gZGUmJnRuKFYsdGUpJiYoZGUuY29uZmlndXJhYmxlPSExKSxkZX19KSxTLl9fbG9hZF9wYXRjaCgicmVnaXN0ZXJFbGVtZW50IixmdW5jdGlvbihMLHEsWil7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYicmVnaXN0ZXJFbGVtZW50ImluIFYuZG9jdW1lbnQmJnRlLnBhdGNoQ2FsbGJhY2tzKHRlLGRvY3VtZW50LCJEb2N1bWVudCIsInJlZ2lzdGVyRWxlbWVudCIsWyJjcmVhdGVkQ2FsbGJhY2siLCJhdHRhY2hlZENhbGxiYWNrIiwiZGV0YWNoZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oTCxaKX0pLFMuX19sb2FkX3BhdGNoKCJFdmVudFRhcmdldExlZ2FjeSIsZnVuY3Rpb24oTCxxLFopeyhmdW5jdGlvbihWLHRlKXt2YXIgZGU9dGUuZ2V0R2xvYmFsT2JqZWN0cygpLFM9ZGUuZXZlbnROYW1lcyxMPWRlLmdsb2JhbFNvdXJjZXMscT1kZS56b25lU3ltYm9sRXZlbnROYW1lcyxaPWRlLlRSVUVfU1RSLGNlPWRlLkZBTFNFX1NUUixVZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsV2U9IkFwcGxpY2F0aW9uQ2FjaGUsRXZlbnRTb3VyY2UsRmlsZVJlYWRlcixJbnB1dE1ldGhvZENvbnRleHQsTWVkaWFDb250cm9sbGVyLE1lc3NhZ2VQb3J0LE5vZGUsUGVyZm9ybWFuY2UsU1ZHRWxlbWVudEluc3RhbmNlLFNoYXJlZFdvcmtlcixUZXh0VHJhY2ssVGV4dFRyYWNrQ3VlLFRleHRUcmFja0xpc3QsV2ViS2l0TmFtZWRGbG93LFdpbmRvdyxXb3JrZXIsV29ya2VyR2xvYmFsU2NvcGUsWE1MSHR0cFJlcXVlc3QsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCxYTUxIdHRwUmVxdWVzdFVwbG9hZCxJREJSZXF1ZXN0LElEQk9wZW5EQlJlcXVlc3QsSURCRGF0YWJhc2UsSURCVHJhbnNhY3Rpb24sSURCQ3Vyc29yLERCSW5kZXgsV2ViU29ja2V0Ii5zcGxpdCgiLCIpLHJ0PSJFdmVudFRhcmdldCIsZHQ9W10sVHQ9Vi53dGYsQXQ9IkFuY2hvcixBcmVhLEF1ZGlvLEJSLEJhc2UsQmFzZUZvbnQsQm9keSxCdXR0b24sQ2FudmFzLENvbnRlbnQsRExpc3QsRGlyZWN0b3J5LERpdixFbWJlZCxGaWVsZFNldCxGb250LEZvcm0sRnJhbWUsRnJhbWVTZXQsSFIsSGVhZCxIZWFkaW5nLEh0bWwsSUZyYW1lLEltYWdlLElucHV0LEtleWdlbixMSSxMYWJlbCxMZWdlbmQsTGluayxNYXAsTWFycXVlZSxNZWRpYSxNZW51LE1ldGEsTWV0ZXIsTW9kLE9MaXN0LE9iamVjdCxPcHRHcm91cCxPcHRpb24sT3V0cHV0LFBhcmFncmFwaCxQcmUsUHJvZ3Jlc3MsUXVvdGUsU2NyaXB0LFNlbGVjdCxTb3VyY2UsU3BhbixTdHlsZSxUYWJsZUNhcHRpb24sVGFibGVDZWxsLFRhYmxlQ29sLFRhYmxlLFRhYmxlUm93LFRhYmxlU2VjdGlvbixUZXh0QXJlYSxUaXRsZSxUcmFjayxVTGlzdCxVbmtub3duLFZpZGVvIi5zcGxpdCgiLCIpO1R0P2R0PUF0Lm1hcChmdW5jdGlvbihEcil7cmV0dXJuIkhUTUwiK0RyKyJFbGVtZW50In0pLmNvbmNhdChXZSk6VltydF0/ZHQucHVzaChydCk6ZHQ9V2U7Zm9yKHZhciBjbj1WLl9fWm9uZV9kaXNhYmxlX0lFX2NoZWNrfHwhMSxKaT1WLl9fWm9uZV9lbmFibGVfY3Jvc3NfY29udGV4dF9jaGVja3x8ITEseGk9dGUuaXNJRU9yRWRnZSgpLFJuPSJbb2JqZWN0IEZ1bmN0aW9uV3JhcHBlcl0iLER0PSJmdW5jdGlvbiBfX0JST1dTRVJUT09MU19DT05TT0xFX1NBRkVGVU5DKCkgeyBbbmF0aXZlIGNvZGVdIH0iLGdpPXtNU1BvaW50ZXJDYW5jZWw6InBvaW50ZXJjYW5jZWwiLE1TUG9pbnRlckRvd246InBvaW50ZXJkb3duIixNU1BvaW50ZXJFbnRlcjoicG9pbnRlcmVudGVyIixNU1BvaW50ZXJIb3ZlcjoicG9pbnRlcmhvdmVyIixNU1BvaW50ZXJMZWF2ZToicG9pbnRlcmxlYXZlIixNU1BvaW50ZXJNb3ZlOiJwb2ludGVybW92ZSIsTVNQb2ludGVyT3V0OiJwb2ludGVyb3V0IixNU1BvaW50ZXJPdmVyOiJwb2ludGVyb3ZlciIsTVNQb2ludGVyVXA6InBvaW50ZXJ1cCJ9LGVpPTA7ZWk8Uy5sZW5ndGg7ZWkrKyl7dmFyIGppPVVlKygoVW49U1tlaV0pK2NlKSx3bj1VZSsoVW4rWik7cVtVbl09e30scVtVbl1bY2VdPWppLHFbVW5dW1pdPXdufWZvcihlaT0wO2VpPEF0Lmxlbmd0aDtlaSsrKWZvcih2YXIgT249QXRbZWldLF9pPUxbT25dPXt9LGtuPTA7a248Uy5sZW5ndGg7a24rKyl7dmFyIFVuO19pW1VuPVNba25dXT1PbisiLmFkZEV2ZW50TGlzdGVuZXI6IitVbn12YXIgZHI9W107Zm9yKGVpPTA7ZWk8ZHQubGVuZ3RoO2VpKyspe3ZhciBxcz1WW2R0W2VpXV07ZHIucHVzaChxcyYmcXMucHJvdG90eXBlKX10ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsZHIse3ZoOmZ1bmN0aW9uKERyLF9yLGJ0LF9lKXtpZighY24mJnhpKWlmKEppKXRyeXtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9Y2F0Y2h7cmV0dXJuIERyLmFwcGx5KGJ0LF9lKSwhMX1lbHNle3ZhciBiZTtpZigoYmU9X3IudG9TdHJpbmcoKSk9PT1Sbnx8YmU9PUR0KXJldHVybiBEci5hcHBseShidCxfZSksITF9ZWxzZSBpZihKaSl0cnl7X3IudG9TdHJpbmcoKX1jYXRjaHtyZXR1cm4gRHIuYXBwbHkoYnQsX2UpLCExfXJldHVybiEwfSx0cmFuc2ZlckV2ZW50TmFtZTpmdW5jdGlvbihEcil7cmV0dXJuIGdpW0RyXXx8RHJ9fSksWm9uZVt0ZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISFWW3J0XX0pKEwsWiksZnVuY3Rpb24oVix0ZSl7dmFyIGRlPVYuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKCghZGUuaXNOb2RlfHxkZS5pc01peCkmJiFmdW5jdGlvbihWLHRlKXt2YXIgZGU9Vi5nZXRHbG9iYWxPYmplY3RzKCk7aWYoKGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiYhVi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIikmJnR5cGVvZiBFbGVtZW50PCJ1Iil7dmFyIHE9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siKTtpZihxJiYhcS5jb25maWd1cmFibGUpcmV0dXJuITE7aWYocSl7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiEwfX0pO3ZhciBjZT0hIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLm9uY2xpY2s7cmV0dXJuIFYuT2JqZWN0RGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siLHEpLGNlfX12YXIgVWU9dGUuWE1MSHR0cFJlcXVlc3Q7aWYoIVVlKXJldHVybiExO3ZhciAkZT0ib25yZWFkeXN0YXRlY2hhbmdlIixXZT1VZS5wcm90b3R5cGUscnQ9Vi5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoV2UsJGUpO2lmKHJ0KXJldHVybiBWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxjZT0hIShkdD1uZXcgVWUpLm9ucmVhZHlzdGF0ZWNoYW5nZSxWLk9iamVjdERlZmluZVByb3BlcnR5KFdlLCRlLHJ0fHx7fSksY2U7dmFyIFR0PVYuc3ltYm9sKCJmYWtlIik7Vi5PYmplY3REZWZpbmVQcm9wZXJ0eShXZSwkZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbVHRdfSxzZXQ6ZnVuY3Rpb24oeGkpe3RoaXNbVHRdPXhpfX0pO3ZhciBkdCxBdD1mdW5jdGlvbigpe307cmV0dXJuKGR0PW5ldyBVZSkub25yZWFkeXN0YXRlY2hhbmdlPUF0LGNlPWR0W1R0XT09PUF0LGR0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGNlfShWLHRlKSl7dmFyIHE9dHlwZW9mIFdlYlNvY2tldDwidSI7KGZ1bmN0aW9uKFYpe2Zvcih2YXIgdGU9Vi5zeW1ib2woInVuYm91bmQiKSxkZT1mdW5jdGlvbihMKXt2YXIgcT1vc1tMXSxaPSJvbiIrcTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIocSxmdW5jdGlvbihjZSl7dmFyICRlLFdlLFVlPWNlLnRhcmdldDtmb3IoV2U9VWU/VWUuY29uc3RydWN0b3IubmFtZSsiLiIrWjoidW5rbm93bi4iK1o7VWU7KVVlW1pdJiYhVWVbWl1bdGVdJiYoKCRlPVYud3JhcFdpdGhDdXJyZW50Wm9uZShVZVtaXSxXZSkpW3RlXT1VZVtaXSxVZVtaXT0kZSksVWU9VWUucGFyZW50RWxlbWVudH0sITApfSxTPTA7Uzxvcy5sZW5ndGg7UysrKWRlKFMpfSkoViksVi5wYXRjaENsYXNzKCJYTUxIdHRwUmVxdWVzdCIpLHEmJmZ1bmN0aW9uKFYsdGUpe3ZhciBkZT1WLmdldEdsb2JhbE9iamVjdHMoKSxTPWRlLkFERF9FVkVOVF9MSVNURU5FUl9TVFIsTD1kZS5SRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSLHE9dGUuV2ViU29ja2V0O3RlLkV2ZW50VGFyZ2V0fHxWLnBhdGNoRXZlbnRUYXJnZXQodGUsVixbcS5wcm90b3R5cGVdKSx0ZS5XZWJTb2NrZXQ9ZnVuY3Rpb24oVWUsJGUpe3ZhciBydCxkdCxXZT1hcmd1bWVudHMubGVuZ3RoPjE/bmV3IHEoVWUsJGUpOm5ldyBxKFVlKSxUdD1WLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihXZSwib25tZXNzYWdlIik7cmV0dXJuIFR0JiYhMT09PVR0LmNvbmZpZ3VyYWJsZT8ocnQ9Vi5PYmplY3RDcmVhdGUoV2UpLGR0PVdlLFtTLEwsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oQXQpe3J0W0F0XT1mdW5jdGlvbigpe3ZhciBjbj1WLkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKEF0PT09U3x8QXQ9PT1MKXt2YXIgSmk9Y24ubGVuZ3RoPjA/Y25bMF06dm9pZCAwO2lmKEppKXt2YXIgeGk9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrSmkpO1dlW3hpXT1ydFt4aV19fXJldHVybiBXZVtBdF0uYXBwbHkoV2UsY24pfX0pKTpydD1XZSxWLnBhdGNoT25Qcm9wZXJ0aWVzKHJ0LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0sZHQpLHJ0fTt2YXIgWj10ZS5XZWJTb2NrZXQ7Zm9yKHZhciBjZSBpbiBxKVpbY2VdPXFbY2VdfShWLHRlKSxab25lW1Yuc3ltYm9sKCJwYXRjaEV2ZW50cyIpXT0hMH19KFosTCl9KX07dmFyIFdzPWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gVmwoVix0ZSxkZSxTKXt2YXIgTD1udWxsLHE9bnVsbDtkZSs9Uzt2YXIgWj17fTtmdW5jdGlvbiBjZSgkZSl7dmFyIFdlPSRlLmRhdGE7cmV0dXJuIFdlLmFyZ3NbMF09ZnVuY3Rpb24oKXtyZXR1cm4gJGUuaW52b2tlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sV2UuaGFuZGxlSWQ9TC5hcHBseShWLFdlLmFyZ3MpLCRlfWZ1bmN0aW9uIFVlKCRlKXtyZXR1cm4gcS5jYWxsKFYsJGUuZGF0YS5oYW5kbGVJZCl9TD1KKFYsdGUrPVMsZnVuY3Rpb24oJGUpe3JldHVybiBmdW5jdGlvbihXZSxydCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHJ0WzBdKXt2YXIgZHQ9e2lzUGVyaW9kaWM6IkludGVydmFsIj09PVMsZGVsYXk6IlRpbWVvdXQiPT09U3x8IkludGVydmFsIj09PVM/cnRbMV18fDA6dm9pZCAwLGFyZ3M6cnR9LFR0PXJ0WzBdO3J0WzBdPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBUdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtkdC5pc1BlcmlvZGljfHwoIm51bWJlciI9PXR5cGVvZiBkdC5oYW5kbGVJZD9kZWxldGUgWltkdC5oYW5kbGVJZF06ZHQuaGFuZGxlSWQmJihkdC5oYW5kbGVJZFtXc109bnVsbCkpfX07dmFyIEF0PWgodGUscnRbMF0sZHQsY2UsVWUpO2lmKCFBdClyZXR1cm4gQXQ7dmFyIGNuPUF0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjbj9aW2NuXT1BdDpjbiYmKGNuW1dzXT1BdCksY24mJmNuLnJlZiYmY24udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBjbi51bnJlZiYmKEF0LnJlZj1jbi5yZWYuYmluZChjbiksQXQudW5yZWY9Y24udW5yZWYuYmluZChjbikpLCJudW1iZXIiPT10eXBlb2YgY258fGNuP2NuOkF0fXJldHVybiAkZS5hcHBseShWLHJ0KX19KSxxPUooVixkZSxmdW5jdGlvbigkZSl7cmV0dXJuIGZ1bmN0aW9uKFdlLHJ0KXt2YXIgVHQsZHQ9cnRbMF07Im51bWJlciI9PXR5cGVvZiBkdD9UdD1aW2R0XTooVHQ9ZHQmJmR0W1dzXSl8fChUdD1kdCksVHQmJiJzdHJpbmciPT10eXBlb2YgVHQudHlwZT8ibm90U2NoZWR1bGVkIiE9PVR0LnN0YXRlJiYoVHQuY2FuY2VsRm4mJlR0LmRhdGEuaXNQZXJpb2RpY3x8MD09PVR0LnJ1bkNvdW50KSYmKCJudW1iZXIiPT10eXBlb2YgZHQ/ZGVsZXRlIFpbZHRdOmR0JiYoZHRbV3NdPW51bGwpLFR0LnpvbmUuY2FuY2VsVGFzayhUdCkpOiRlLmFwcGx5KFYscnQpfX0pfVpvbmUuX19sb2FkX3BhdGNoKCJsZWdhY3kiLGZ1bmN0aW9uKFYpe3ZhciB0ZT1WW1pvbmUuX19zeW1ib2xfXygibGVnYWN5UGF0Y2giKV07dGUmJnRlKCl9KSxab25lLl9fbG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLGZ1bmN0aW9uKFYsdGUsZGUpe2RlLnBhdGNoTWV0aG9kKFYsInF1ZXVlTWljcm90YXNrIixmdW5jdGlvbihTKXtyZXR1cm4gZnVuY3Rpb24oTCxxKXt0ZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIscVswXSl9fSl9KSxab25lLl9fbG9hZF9wYXRjaCgidGltZXJzIixmdW5jdGlvbihWKXt2YXIgZGU9ImNsZWFyIjtWbChWLCJzZXQiLGRlLCJUaW1lb3V0IiksVmwoViwic2V0IixkZSwiSW50ZXJ2YWwiKSxWbChWLCJzZXQiLGRlLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLGZ1bmN0aW9uKFYpe1ZsKFYsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIm1velJlcXVlc3QiLCJtb3pDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLFZsKFYsIndlYmtpdFJlcXVlc3QiLCJ3ZWJraXRDYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImJsb2NraW5nIixmdW5jdGlvbihWLHRlKXtmb3IodmFyIGRlPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl0sUz0wO1M8ZGUubGVuZ3RoO1MrKylKKFYsZGVbU10sZnVuY3Rpb24ocSxaLGNlKXtyZXR1cm4gZnVuY3Rpb24oVWUsJGUpe3JldHVybiB0ZS5jdXJyZW50LnJ1bihxLFYsJGUsY2UpfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihWLHRlLGRlKXsoZnVuY3Rpb24oVix0ZSl7dGUucGF0Y2hFdmVudFByb3RvdHlwZShWLHRlKX0pKFYsZGUpLGZ1bmN0aW9uKFYsdGUpe2lmKCFab25lW3RlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSl7Zm9yKHZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCksUz1kZS5ldmVudE5hbWVzLEw9ZGUuem9uZVN5bWJvbEV2ZW50TmFtZXMscT1kZS5UUlVFX1NUUixaPWRlLkZBTFNFX1NUUixjZT1kZS5aT05FX1NZTUJPTF9QUkVGSVgsVWU9MDtVZTxTLmxlbmd0aDtVZSsrKXt2YXIgJGU9U1tVZV0sZHQ9Y2UrKCRlK1opLFR0PWNlKygkZStxKTtMWyRlXT17fSxMWyRlXVtaXT1kdCxMWyRlXVtxXT1UdH12YXIgQXQ9Vi5FdmVudFRhcmdldDtBdCYmQXQucHJvdG90eXBlJiZ0ZS5wYXRjaEV2ZW50VGFyZ2V0KFYsdGUsW0F0JiZBdC5wcm90b3R5cGVdKX19KFYsZGUpO3ZhciBTPVYuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtTJiZTLnByb3RvdHlwZSYmZGUucGF0Y2hFdmVudFRhcmdldChWLGRlLFtTLnByb3RvdHlwZV0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLGZ1bmN0aW9uKFYsdGUsZGUpe3llKCJNdXRhdGlvbk9ic2VydmVyIikseWUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsZnVuY3Rpb24oVix0ZSxkZSl7eWUoIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe2lmKCghWHx8ZmUpJiYhWm9uZVtWLnN5bWJvbCgicGF0Y2hFdmVudHMiKV0pe3ZhciBkZT10ZS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXMsUz1bXTtpZih4ZSl7dmFyIEw9d2luZG93O1M9Uy5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1lbnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTt2YXIgcT1mdW5jdGlvbigpe3RyeXt2YXIgVj1DLm5hdmlnYXRvci51c2VyQWdlbnQ7aWYoLTEhPT1WLmluZGV4T2YoIk1TSUUgIil8fC0xIT09Vi5pbmRleE9mKCJUcmlkZW50LyIpKXJldHVybiEwfWNhdGNoe31yZXR1cm4hMX0oKT9be3RhcmdldDpMLGlnbm9yZVByb3BlcnRpZXM6WyJlcnJvciJdfV06W107aHQoTCxzbihMKSxkZSYmZGUuY29uY2F0KHEpLGUoTCkpfVM9Uy5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IodmFyIFo9MDtaPFMubGVuZ3RoO1orKyl7dmFyIGNlPXRlW1NbWl1dO2NlJiZjZS5wcm90b3R5cGUmJmh0KGNlLnByb3RvdHlwZSxzbihjZS5wcm90b3R5cGUpLGRlKX19fShkZSxWKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJjdXN0b21FbGVtZW50cyIsZnVuY3Rpb24oVix0ZSxkZSl7IWZ1bmN0aW9uKFYsdGUpe3ZhciBkZT10ZS5nZXRHbG9iYWxPYmplY3RzKCk7KGRlLmlzQnJvd3Nlcnx8ZGUuaXNNaXgpJiZWLmN1c3RvbUVsZW1lbnRzJiYiY3VzdG9tRWxlbWVudHMiaW4gViYmdGUucGF0Y2hDYWxsYmFja3ModGUsVi5jdXN0b21FbGVtZW50cywiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiLFsiY29ubmVjdGVkQ2FsbGJhY2siLCJkaXNjb25uZWN0ZWRDYWxsYmFjayIsImFkb3B0ZWRDYWxsYmFjayIsImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayJdKX0oVixkZSl9KSxab25lLl9fbG9hZF9wYXRjaCgiWEhSIixmdW5jdGlvbihWLHRlKXshZnVuY3Rpb24oJGUpe3ZhciBXZT0kZS5YTUxIdHRwUmVxdWVzdDtpZihXZSl7dmFyIHJ0PVdlLnByb3RvdHlwZSxUdD1ydFthXSxBdD1ydFtsXTtpZighVHQpe3ZhciBjbj0kZS5YTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0O2lmKGNuKXt2YXIgSmk9Y24ucHJvdG90eXBlO1R0PUppW2FdLEF0PUppW2xdfX12YXIgeGk9InJlYWR5c3RhdGVjaGFuZ2UiLG1uPSJzY2hlZHVsZWQiLGVpPUoocnQsIm9wZW4iLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtyZXR1cm4gT25bU109MD09X2lbMl0sT25bWl09X2lbMV0sZWkuYXBwbHkoT24sX2kpfX0pLFhuPWYoImZldGNoVGFza0Fib3J0aW5nIiksVnQ9ZigiZmV0Y2hUYXNrU2NoZWR1bGluZyIpLGppPUoocnQsInNlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKE9uLF9pKXtpZighMD09PXRlLmN1cnJlbnRbVnRdfHxPbltTXSlyZXR1cm4gamkuYXBwbHkoT24sX2kpO3ZhciBrbj17dGFyZ2V0Ok9uLHVybDpPbltaXSxpc1BlcmlvZGljOiExLGFyZ3M6X2ksYWJvcnRlZDohMX0sZ3I9aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsRHQsa24sUm4sZ2kpO09uJiYhMD09PU9uW2NlXSYmIWtuLmFib3J0ZWQmJmdyLnN0YXRlPT09bW4mJmdyLmludm9rZSgpfX0pLHduPUoocnQsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihPbixfaSl7dmFyIGtuPWZ1bmN0aW9uKE9uKXtyZXR1cm4gT25bZGVdfShPbik7aWYoa24mJiJzdHJpbmciPT10eXBlb2Yga24udHlwZSl7aWYobnVsbD09a24uY2FuY2VsRm58fGtuLmRhdGEmJmtuLmRhdGEuYWJvcnRlZClyZXR1cm47a24uem9uZS5jYW5jZWxUYXNrKGtuKX1lbHNlIGlmKCEwPT09dGUuY3VycmVudFtYbl0pcmV0dXJuIHduLmFwcGx5KE9uLF9pKX19KX1mdW5jdGlvbiBSbihPbil7dmFyIF9pPU9uLmRhdGEsa249X2kudGFyZ2V0O2tuW3FdPSExLGtuW2NlXT0hMTt2YXIgZ3I9a25bTF07VHR8fChUdD1rblthXSxBdD1rbltsXSksZ3ImJkF0LmNhbGwoa24seGksZ3IpO3ZhciBkcj1rbltMXT1mdW5jdGlvbigpe2lmKGtuLnJlYWR5U3RhdGU9PT1rbi5ET05FKWlmKCFfaS5hYm9ydGVkJiZrbltxXSYmT24uc3RhdGU9PT1tbil7dmFyIERyPWtuW3RlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtpZigwIT09a24uc3RhdHVzJiZEciYmRHIubGVuZ3RoPjApe3ZhciBfcj1Pbi5pbnZva2U7T24uaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBidD1rblt0ZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0sX2U9MDtfZTxidC5sZW5ndGg7X2UrKylidFtfZV09PT1PbiYmYnQuc3BsaWNlKF9lLDEpOyFfaS5hYm9ydGVkJiZPbi5zdGF0ZT09PW1uJiZfci5jYWxsKE9uKX0sRHIucHVzaChPbil9ZWxzZSBPbi5pbnZva2UoKX1lbHNlIV9pLmFib3J0ZWQmJiExPT09a25bcV0mJihrbltjZV09ITApfTtyZXR1cm4gVHQuY2FsbChrbix4aSxkciksa25bZGVdfHwoa25bZGVdPU9uKSxqaS5hcHBseShrbixfaS5hcmdzKSxrbltxXT0hMCxPbn1mdW5jdGlvbiBEdCgpe31mdW5jdGlvbiBnaShPbil7dmFyIF9pPU9uLmRhdGE7cmV0dXJuIF9pLmFib3J0ZWQ9ITAsd24uYXBwbHkoX2kudGFyZ2V0LF9pLmFyZ3MpfX0oVik7dmFyIGRlPWYoInhoclRhc2siKSxTPWYoInhoclN5bmMiKSxMPWYoInhockxpc3RlbmVyIikscT1mKCJ4aHJTY2hlZHVsZWQiKSxaPWYoInhoclVSTCIpLGNlPWYoInhockVycm9yQmVmb3JlU2NoZWR1bGVkIil9KSxab25lLl9fbG9hZF9wYXRjaCgiZ2VvbG9jYXRpb24iLGZ1bmN0aW9uKFYpe1YubmF2aWdhdG9yJiZWLm5hdmlnYXRvci5nZW9sb2NhdGlvbiYmZnVuY3Rpb24oVix0ZSl7Zm9yKHZhciBkZT1WLmNvbnN0cnVjdG9yLm5hbWUsUz1mdW5jdGlvbihxKXt2YXIgJGUsV2UsWj10ZVtxXSxjZT1WW1pdO2lmKGNlKXtpZighTyhuKFYsWikpKXJldHVybiJjb250aW51ZSI7VltaXT0oV2U9ZnVuY3Rpb24oKXtyZXR1cm4gJGUuYXBwbHkodGhpcyxJKGFyZ3VtZW50cyxkZSsiLiIrWikpfSxtZShXZSwkZT1jZSksV2UpfX0sTD0wO0w8dGUubGVuZ3RoO0wrKylTKEwpfShWLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihWLHRlKXtmdW5jdGlvbiBkZShTKXtyZXR1cm4gZnVuY3Rpb24oTCl7aWUoVixTKS5mb3JFYWNoKGZ1bmN0aW9uKFope3ZhciBjZT1WLlByb21pc2VSZWplY3Rpb25FdmVudDtpZihjZSl7dmFyIFVlPW5ldyBjZShTLHtwcm9taXNlOkwucHJvbWlzZSxyZWFzb246TC5yZWplY3Rpb259KTtaLmludm9rZShVZSl9fSl9fVYuUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYodGVbZigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKV09ZGUoInVuaGFuZGxlZHJlamVjdGlvbiIpLHRlW2YoInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPWRlKCJyZWplY3Rpb25oYW5kbGVkIikpfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKG4pOm4oKX0pO2Z1bmN0aW9uIGJuKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIGNnKG4pe2xldCBlPW4oaT0+e0Vycm9yLmNhbGwoaSksaS5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfXZhciByUz1jZyhuPT5mdW5jdGlvbihlKXtuKHRoaXMpLHRoaXMubWVzc2FnZT1lP2Ake2UubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuJHtlLm1hcCgoaSxyKT0+YCR7cisxfSkgJHtpLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1lfSk7ZnVuY3Rpb24gQmgobix0KXtpZihuKXtsZXQgZT1uLmluZGV4T2YodCk7MDw9ZSYmbi5zcGxpY2UoZSwxKX19dmFyIHZuPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5pdGlhbFRlYXJkb3duPXQsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IHQ7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtsZXR7X3BhcmVudGFnZTplfT10aGlzO2lmKGUpaWYodGhpcy5fcGFyZW50YWdlPW51bGwsQXJyYXkuaXNBcnJheShlKSlmb3IobGV0IG8gb2YgZSlvLnJlbW92ZSh0aGlzKTtlbHNlIGUucmVtb3ZlKHRoaXMpO2xldHtpbml0aWFsVGVhcmRvd246aX09dGhpcztpZihibihpKSl0cnl7aSgpfWNhdGNoKG8pe3Q9byBpbnN0YW5jZW9mIHJTP28uZXJyb3JzOltvXX1sZXR7X2ZpbmFsaXplcnM6cn09dGhpcztpZihyKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGxldCBvIG9mIHIpdHJ5e3A4KG8pfWNhdGNoKHMpe3Q9dD8/W10scyBpbnN0YW5jZW9mIHJTP3Q9Wy4uLnQsLi4ucy5lcnJvcnNdOnQucHVzaChzKX19aWYodCl0aHJvdyBuZXcgclModCl9fWFkZCh0KXt2YXIgZTtpZih0JiZ0IT09dGhpcylpZih0aGlzLmNsb3NlZClwOCh0KTtlbHNle2lmKHQgaW5zdGFuY2VvZiB2bil7aWYodC5jbG9zZWR8fHQuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47dC5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oZT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09ZT9lOltdKS5wdXNoKHQpfX1faGFzUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7cmV0dXJuIGU9PT10fHxBcnJheS5pc0FycmF5KGUpJiZlLmluY2x1ZGVzKHQpfV9hZGRQYXJlbnQodCl7bGV0e19wYXJlbnRhZ2U6ZX09dGhpczt0aGlzLl9wYXJlbnRhZ2U9QXJyYXkuaXNBcnJheShlKT8oZS5wdXNoKHQpLGUpOmU/W2UsdF06dH1fcmVtb3ZlUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7ZT09PXQ/dGhpcy5fcGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShlKSYmQmgoZSx0KX1yZW1vdmUodCl7bGV0e19maW5hbGl6ZXJzOmV9PXRoaXM7ZSYmQmgoZSx0KSx0IGluc3RhbmNlb2Ygdm4mJnQuX3JlbW92ZVBhcmVudCh0aGlzKX19O3ZuLkVNUFRZPSgoKT0+e2xldCBuPW5ldyB2bjtyZXR1cm4gbi5jbG9zZWQ9ITAsbn0pKCk7dmFyIEVPPXZuLkVNUFRZO2Z1bmN0aW9uIG9TKG4pe3JldHVybiBuIGluc3RhbmNlb2Ygdm58fG4mJiJjbG9zZWQiaW4gbiYmYm4obi5yZW1vdmUpJiZibihuLmFkZCkmJmJuKG4udW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHA4KG4pe2JuKG4pP24oKTpuLnVuc3Vic2NyaWJlKCl9dmFyIFVsPXtvblVuaGFuZGxlZEVycm9yOm51bGwsb25TdG9wcGVkTm90aWZpY2F0aW9uOm51bGwsUHJvbWlzZTp2b2lkIDAsdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzohMSx1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ITF9LHVnPXtzZXRUaW1lb3V0KG4sdCwuLi5lKXtsZXR7ZGVsZWdhdGU6aX09dWc7cmV0dXJuIGk/LnNldFRpbWVvdXQ/aS5zZXRUaW1lb3V0KG4sdCwuLi5lKTpzZXRUaW1lb3V0KG4sdCwuLi5lKX0sY2xlYXJUaW1lb3V0KG4pe2xldHtkZWxlZ2F0ZTp0fT11ZztyZXR1cm4odD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIHNTKG4pe3VnLnNldFRpbWVvdXQoKCk9PntsZXR7b25VbmhhbmRsZWRFcnJvcjp0fT1VbDtpZighdCl0aHJvdyBuO3Qobil9KX1mdW5jdGlvbiB6bCgpe312YXIgaDg9VE8oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIFRPKG4sdCxlKXtyZXR1cm57a2luZDpuLHZhbHVlOnQsZXJyb3I6ZX19dmFyIFZoPW51bGw7ZnVuY3Rpb24gZGcobil7aWYoVWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7bGV0IHQ9IVZoO2lmKHQmJihWaD17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLG4oKSx0KXtsZXR7ZXJyb3JUaHJvd246ZSxlcnJvcjppfT1WaDtpZihWaD1udWxsLGUpdGhyb3cgaX19ZWxzZSBuKCl9dmFyIEhoPWNsYXNzIGV4dGVuZHMgdm57Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSx0Pyh0aGlzLmRlc3RpbmF0aW9uPXQsb1ModCkmJnQuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPVF1ZX1zdGF0aWMgY3JlYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGpsKHQsZSxpKX1uZXh0KHQpe3RoaXMuaXNTdG9wcGVkP0FPKFRPKCJOIix0LHZvaWQgMCksdGhpcyk6dGhpcy5fbmV4dCh0KX1lcnJvcih0KXt0aGlzLmlzU3RvcHBlZD9BTyhUTygiRSIsdm9pZCAwLHQpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcih0KSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9BTyhoOCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fY29tcGxldGUoKSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dCh0KXt0aGlzLmRlc3RpbmF0aW9uLm5leHQodCl9X2Vycm9yKHQpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmVycm9yKHQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19LFl1ZT1GdW5jdGlvbi5wcm90b3R5cGUuYmluZDtmdW5jdGlvbiBETyhuLHQpe3JldHVybiBZdWUuY2FsbChuLHQpfXZhciBqbD1jbGFzcyBleHRlbmRzIEhoe2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcjtpZihzdXBlcigpLGJuKHQpfHwhdClyPXtuZXh0OnQ/P3ZvaWQgMCxlcnJvcjplPz92b2lkIDAsY29tcGxldGU6aT8/dm9pZCAwfTtlbHNle2xldCBvO3RoaXMmJlVsLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8obz1PYmplY3QuY3JlYXRlKHQpLG8udW5zdWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoKSxyPXtuZXh0OnQubmV4dCYmRE8odC5uZXh0LG8pLGVycm9yOnQuZXJyb3ImJkRPKHQuZXJyb3IsbyksY29tcGxldGU6dC5jb21wbGV0ZSYmRE8odC5jb21wbGV0ZSxvKX0pOnI9dH10aGlzLmRlc3RpbmF0aW9uPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBhcnRpYWxPYnNlcnZlcj10fW5leHQodCl7bGV0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUubmV4dCl0cnl7ZS5uZXh0KHQpfWNhdGNoKGkpe2FTKGkpfX1lcnJvcih0KXtsZXR7cGFydGlhbE9ic2VydmVyOmV9PXRoaXM7aWYoZS5lcnJvcil0cnl7ZS5lcnJvcih0KX1jYXRjaChpKXthUyhpKX1lbHNlIGFTKHQpfWNvbXBsZXRlKCl7bGV0e3BhcnRpYWxPYnNlcnZlcjp0fT10aGlzO2lmKHQuY29tcGxldGUpdHJ5e3QuY29tcGxldGUoKX1jYXRjaChlKXthUyhlKX19fShyKX19O2Z1bmN0aW9uIGFTKG4pe1VsLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24obil7VWwudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmVmgmJihWaC5lcnJvclRocm93bj0hMCxWaC5lcnJvcj1uKX0obik6c1Mobil9ZnVuY3Rpb24gQU8obix0KXtsZXR7b25TdG9wcGVkTm90aWZpY2F0aW9uOmV9PVVsO2UmJnVnLnNldFRpbWVvdXQoKCk9PmUobix0KSl9dmFyIFF1ZT17Y2xvc2VkOiEwLG5leHQ6emwsZXJyb3I6ZnVuY3Rpb24obil7dGhyb3cgbn0sY29tcGxldGU6emx9LHBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBNcyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBSTyhuKXtyZXR1cm4gMD09PW4ubGVuZ3RoP01zOjE9PT1uLmxlbmd0aD9uWzBdOmZ1bmN0aW9uKGUpe3JldHVybiBuLnJlZHVjZSgoaSxyKT0+cihpKSxlKX19dmFyIFF0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZSYmKHRoaXMuX3N1YnNjcmliZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfXN1YnNjcmliZShlLGkscil7bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4mJm4gaW5zdGFuY2VvZiBIaHx8ZnVuY3Rpb24obil7cmV0dXJuIG4mJmJuKG4ubmV4dCkmJmJuKG4uZXJyb3IpJiZibihuLmNvbXBsZXRlKX0obikmJm9TKG4pfShlKT9lOm5ldyBqbChlLGkscik7cmV0dXJuIGRnKCgpPT57bGV0e29wZXJhdG9yOnMsc291cmNlOmF9PXRoaXM7by5hZGQocz9zLmNhbGwobyxhKTphP3RoaXMuX3N1YnNjcmliZShvKTp0aGlzLl90cnlTdWJzY3JpYmUobykpfSksb31fdHJ5U3Vic2NyaWJlKGUpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGUpfWNhdGNoKGkpe2UuZXJyb3IoaSl9fWZvckVhY2goZSxpKXtyZXR1cm4gbmV3KGk9XzgoaSkpKChyLG8pPT57bGV0IHM9bmV3IGpsKHtuZXh0OmE9Pnt0cnl7ZShhKX1jYXRjaChsKXtvKGwpLHMudW5zdWJzY3JpYmUoKX19LGVycm9yOm8sY29tcGxldGU6cn0pO3RoaXMuc3Vic2NyaWJlKHMpfSl9X3N1YnNjcmliZShlKXt2YXIgaTtyZXR1cm4gbnVsbD09PShpPXRoaXMuc291cmNlKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zdWJzY3JpYmUoZSl9W3BnXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uZSl7cmV0dXJuIFJPKGUpKHRoaXMpfXRvUHJvbWlzZShlKXtyZXR1cm4gbmV3KGU9XzgoZSkpKChpLHIpPT57bGV0IG87dGhpcy5zdWJzY3JpYmUocz0+bz1zLHM9PnIocyksKCk9PmkobykpfSl9fXJldHVybiBuLmNyZWF0ZT10PT5uZXcgbih0KSxufSkoKTtmdW5jdGlvbiBfOChuKXt2YXIgdDtyZXR1cm4gbnVsbCE9PSh0PW4/P1VsLlByb21pc2UpJiZ2b2lkIDAhPT10P3Q6UHJvbWlzZX1mdW5jdGlvbiBPTyhuKXtyZXR1cm4gYm4obj8ubGlmdCl9ZnVuY3Rpb24gcXQobil7cmV0dXJuIHQ9PntpZihPTyh0KSlyZXR1cm4gdC5saWZ0KGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gbihlLHRoaXMpfWNhdGNoKGkpe3RoaXMuZXJyb3IoaSl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTHQobix0LGUsaSxyKXtyZXR1cm4gbmV3IEh5KG4sdCxlLGkscil9dmFyIGtPLEh5PWNsYXNzIGV4dGVuZHMgSGh7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQpLHRoaXMub25GaW5hbGl6ZT1vLHRoaXMuc2hvdWxkVW5zdWJzY3JpYmU9cyx0aGlzLl9uZXh0PWU/ZnVuY3Rpb24oYSl7dHJ5e2UoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX19OnN1cGVyLl9uZXh0LHRoaXMuX2Vycm9yPXI/ZnVuY3Rpb24oYSl7dHJ5e3IoYSl9Y2F0Y2gobCl7dC5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9lcnJvcix0aGlzLl9jb21wbGV0ZT1pP2Z1bmN0aW9uKCl7dHJ5e2koKX1jYXRjaChhKXt0LmVycm9yKGEpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2NvbXBsZXRlfXVuc3Vic2NyaWJlKCl7dmFyIHQ7aWYoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmV8fHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSl7bGV0e2Nsb3NlZDplfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJlKCksIWUmJihudWxsPT09KHQ9dGhpcy5vbkZpbmFsaXplKXx8dm9pZCAwPT09dHx8dC5jYWxsKHRoaXMpKX19fSxVeT1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLnNvdXJjZT10LHRoaXMuc3ViamVjdEZhY3Rvcnk9ZSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsT08odCkmJih0aGlzLmxpZnQ9dC5saWZ0KX1fc3Vic2NyaWJlKHQpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUodCl9Z2V0U3ViamVjdCgpe2xldCB0PXRoaXMuX3N1YmplY3Q7cmV0dXJuKCF0fHx0LmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2xldHtfY29ubmVjdGlvbjp0fT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVjdGlvbj1udWxsLHQ/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCB0PXRoaXMuX2Nvbm5lY3Rpb247aWYoIXQpe3Q9dGhpcy5fY29ubmVjdGlvbj1uZXcgdm47bGV0IGU9dGhpcy5nZXRTdWJqZWN0KCk7dC5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxlLmNvbXBsZXRlKCl9LGk9Pnt0aGlzLl90ZWFyZG93bigpLGUuZXJyb3IoaSl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLHQuY2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLHQ9dm4uRU1QVFkpfXJldHVybiB0fXJlZkNvdW50KCl7cmV0dXJuIHF0KChuLHQpPT57bGV0IGU9bnVsbDtuLl9yZWZDb3VudCsrO2xldCBpPUx0KHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKCk9PntpZighbnx8bi5fcmVmQ291bnQ8PTB8fDA8LS1uLl9yZWZDb3VudClyZXR1cm4gdm9pZChlPW51bGwpO2xldCByPW4uX2Nvbm5lY3Rpb24sbz1lO2U9bnVsbCxyJiYoIW98fHI9PT1vKSYmci51bnN1YnNjcmliZSgpLHQudW5zdWJzY3JpYmUoKX0pO24uc3Vic2NyaWJlKGkpLGkuY2xvc2VkfHwoZT1uLmNvbm5lY3QoKSl9KSh0aGlzKX19LGhnPXtzY2hlZHVsZShuKXtsZXQgdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1jYW5jZWxBbmltYXRpb25GcmFtZSx7ZGVsZWdhdGU6aX09aGc7aSYmKHQ9aS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZT1pLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtsZXQgcj10KG89PntlPXZvaWQgMCxuKG8pfSk7cmV0dXJuIG5ldyB2bigoKT0+ZT8uKHIpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1oZztyZXR1cm4odD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09aGc7cmV0dXJuKHQ/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4ubil9LGRlbGVnYXRlOnZvaWQgMH0seTg9Y2cobj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLHRoaXMubWVzc2FnZT0ib2JqZWN0IHVuc3Vic2NyaWJlZCJ9KSxUZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoZSl7bGV0IGk9bmV3IGxTKHRoaXMsdGhpcyk7cmV0dXJuIGkub3BlcmF0b3I9ZSxpfV90aHJvd0lmQ2xvc2VkKCl7aWYodGhpcy5jbG9zZWQpdGhyb3cgbmV3IHk4fW5leHQoZSl7ZGcoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmN1cnJlbnRPYnNlcnZlcnN8fCh0aGlzLmN1cnJlbnRPYnNlcnZlcnM9QXJyYXkuZnJvbSh0aGlzLm9ic2VydmVycykpO2ZvcihsZXQgaSBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpaS5uZXh0KGUpfX0pfWVycm9yKGUpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93bkVycm9yPWU7bGV0e29ic2VydmVyczppfT10aGlzO2Zvcig7aS5sZW5ndGg7KWkuc2hpZnQoKS5lcnJvcihlKX19KX1jb21wbGV0ZSgpe2RnKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7bGV0e29ic2VydmVyczplfT10aGlzO2Zvcig7ZS5sZW5ndGg7KWUuc2hpZnQoKS5jb21wbGV0ZSgpfX0pfXVuc3Vic2NyaWJlKCl7dGhpcy5pc1N0b3BwZWQ9dGhpcy5jbG9zZWQ9ITAsdGhpcy5vYnNlcnZlcnM9dGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGx9Z2V0IG9ic2VydmVkKCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT10aGlzLm9ic2VydmVycyl8fHZvaWQgMD09PWU/dm9pZCAwOmUubGVuZ3RoKT4wfV90cnlTdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxzdXBlci5fdHJ5U3Vic2NyaWJlKGUpfV9zdWJzY3JpYmUoZSl7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLHRoaXMuX2lubmVyU3Vic2NyaWJlKGUpfV9pbm5lclN1YnNjcmliZShlKXtsZXR7aGFzRXJyb3I6aSxpc1N0b3BwZWQ6cixvYnNlcnZlcnM6b309dGhpcztyZXR1cm4gaXx8cj9FTzoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsby5wdXNoKGUpLG5ldyB2bigoKT0+e3RoaXMuY3VycmVudE9ic2VydmVycz1udWxsLEJoKG8sZSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXMoZSl7bGV0e2hhc0Vycm9yOmksdGhyb3duRXJyb3I6cixpc1N0b3BwZWQ6b309dGhpcztpP2UuZXJyb3Iocik6byYmZS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2xldCBlPW5ldyBRdDtyZXR1cm4gZS5zb3VyY2U9dGhpcyxlfX1yZXR1cm4gbi5jcmVhdGU9KHQsZSk9Pm5ldyBsUyh0LGUpLG59KSgpLGxTPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuZGVzdGluYXRpb249dCx0aGlzLnNvdXJjZT1lfW5leHQodCl7dmFyIGUsaTtudWxsPT09KGk9bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm5leHQpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1lcnJvcih0KXt2YXIgZSxpO251bGw9PT0oaT1udWxsPT09KGU9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWU/dm9pZCAwOmUuZXJyb3IpfHx2b2lkIDA9PT1pfHxpLmNhbGwoZSx0KX1jb21wbGV0ZSgpe3ZhciB0LGU7bnVsbD09PShlPW51bGw9PT0odD10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jb21wbGV0ZSl8fHZvaWQgMD09PWV8fGUuY2FsbCh0KX1fc3Vic2NyaWJlKHQpe3ZhciBlLGk7cmV0dXJuIG51bGwhPT0oaT1udWxsPT09KGU9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnN1YnNjcmliZSh0KSkmJnZvaWQgMCE9PWk/aTpFT319LFZyPWNsYXNzIGV4dGVuZHMgVGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl92YWx1ZT10fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZSh0KXtsZXQgZT1zdXBlci5fc3Vic2NyaWJlKHQpO3JldHVybiFlLmNsb3NlZCYmdC5uZXh0KHRoaXMuX3ZhbHVlKSxlfWdldFZhbHVlKCl7bGV0e2hhc0Vycm9yOnQsdGhyb3duRXJyb3I6ZSxfdmFsdWU6aX09dGhpcztpZih0KXRocm93IGU7cmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSxpfW5leHQodCl7c3VwZXIubmV4dCh0aGlzLl92YWx1ZT10KX19LHp5PXtub3c6KCk9Pih6eS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfSxVaD1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9MS8wLGU9MS8wLGk9enkpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT10LHRoaXMuX3dpbmRvd1RpbWU9ZSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1pLHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5maW5pdGVUaW1lV2luZG93PWU9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLHQpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxlKX1uZXh0KHQpe2xldHtpc1N0b3BwZWQ6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyLF90aW1lc3RhbXBQcm92aWRlcjpvLF93aW5kb3dUaW1lOnN9PXRoaXM7ZXx8KGkucHVzaCh0KSwhciYmaS5wdXNoKG8ubm93KCkrcykpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5uZXh0KHQpfV9zdWJzY3JpYmUodCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtsZXQgZT10aGlzLl9pbm5lclN1YnNjcmliZSh0KSx7X2luZmluaXRlVGltZVdpbmRvdzppLF9idWZmZXI6cn09dGhpcyxvPXIuc2xpY2UoKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoJiYhdC5jbG9zZWQ7cys9aT8xOjIpdC5uZXh0KG9bc10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKHQpLGV9X3RyaW1CdWZmZXIoKXtsZXR7X2J1ZmZlclNpemU6dCxfdGltZXN0YW1wUHJvdmlkZXI6ZSxfYnVmZmVyOmksX2luZmluaXRlVGltZVdpbmRvdzpyfT10aGlzLG89KHI/MToyKSp0O2lmKHQ8MS8wJiZvPGkubGVuZ3RoJiZpLnNwbGljZSgwLGkubGVuZ3RoLW8pLCFyKXtsZXQgcz1lLm5vdygpLGE9MDtmb3IobGV0IGw9MTtsPGkubGVuZ3RoJiZpW2xdPD1zO2wrPTIpYT1sO2EmJmkuc3BsaWNlKDAsYSsxKX19fSxjUz1jbGFzcyBleHRlbmRzIHZue2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKX1zY2hlZHVsZSh0LGU9MCl7cmV0dXJuIHRoaXN9fSxqeT17c2V0SW50ZXJ2YWwobix0LC4uLmUpe2xldHtkZWxlZ2F0ZTppfT1qeTtyZXR1cm4gaT8uc2V0SW50ZXJ2YWw/aS5zZXRJbnRlcnZhbChuLHQsLi4uZSk6c2V0SW50ZXJ2YWwobix0LC4uLmUpfSxjbGVhckludGVydmFsKG4pe2xldHtkZWxlZ2F0ZTp0fT1qeTtyZXR1cm4odD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkobil9LGRlbGVnYXRlOnZvaWQgMH0sQmM9Y2xhc3MgZXh0ZW5kcyBjU3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZSx0aGlzLnBlbmRpbmc9ITF9c2NoZWR1bGUodCxlPTApe3ZhciBpO2lmKHRoaXMuY2xvc2VkKXJldHVybiB0aGlzO3RoaXMuc3RhdGU9dDtsZXQgcj10aGlzLmlkLG89dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPXImJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQobyxyLGUpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1lLHRoaXMuaWQ9bnVsbCE9PShpPXRoaXMuaWQpJiZ2b2lkIDAhPT1pP2k6dGhpcy5yZXF1ZXN0QXN5bmNJZChvLHRoaXMuaWQsZSksdGhpc31yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gankuc2V0SW50ZXJ2YWwodC5mbHVzaC5iaW5kKHQsdGhpcyksaSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7aWYobnVsbCE9aSYmdGhpcy5kZWxheT09PWkmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBlO251bGwhPWUmJmp5LmNsZWFySW50ZXJ2YWwoZSl9ZXhlY3V0ZSh0LGUpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7bGV0IGk9dGhpcy5fZXhlY3V0ZSh0LGUpO2lmKGkpcmV0dXJuIGk7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4ZWN1dGUodCxlKXtsZXQgcixpPSExO3RyeXt0aGlzLndvcmsodCl9Y2F0Y2gobyl7aT0hMCxyPW98fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKGkpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxyfXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xvc2VkKXtsZXR7aWQ6dCxzY2hlZHVsZXI6ZX09dGhpcyx7YWN0aW9uczppfT1lO3RoaXMud29yaz10aGlzLnN0YXRlPXRoaXMuc2NoZWR1bGVyPW51bGwsdGhpcy5wZW5kaW5nPSExLEJoKGksdGhpcyksbnVsbCE9dCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChlLHQsbnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19LEp1ZT0xLEZPPXt9O2Z1bmN0aW9uIGI4KG4pe3JldHVybiBuIGluIEZPJiYoZGVsZXRlIEZPW25dLCEwKX12YXIgeDg9e3NldEltbWVkaWF0ZShuKXtsZXQgdD1KdWUrKztyZXR1cm4gRk9bdF09ITAsa098fChrTz1Qcm9taXNlLnJlc29sdmUoKSksa08udGhlbigoKT0+YjgodCkmJm4oKSksdH0sY2xlYXJJbW1lZGlhdGUobil7Yjgobil9fSx7c2V0SW1tZWRpYXRlOiR1ZSxjbGVhckltbWVkaWF0ZTplZGV9PXg4LEd5PXtzZXRJbW1lZGlhdGUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PUd5O3JldHVybih0Py5zZXRJbW1lZGlhdGV8fCR1ZSkoLi4ubil9LGNsZWFySW1tZWRpYXRlKG4pe2xldHtkZWxlZ2F0ZTp0fT1HeTtyZXR1cm4odD8uY2xlYXJJbW1lZGlhdGV8fGVkZSkobil9LGRlbGVnYXRlOnZvaWQgMH0sS2Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlPUtkLm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yPXQsdGhpcy5ub3c9ZX1zY2hlZHVsZSh0LGU9MCxpKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcih0aGlzLHQpLnNjaGVkdWxlKGksZSl9fTtLZC5ub3c9enkubm93O3ZhciBWYz1jbGFzcyBleHRlbmRzIEtke2NvbnN0cnVjdG9yKHQsZT1LZC5ub3cpe3N1cGVyKHQsZSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaCh0KXtsZXQgaSx7YWN0aW9uczplfT10aGlzO2lmKHRoaXMuX2FjdGl2ZSllLnB1c2godCk7ZWxzZXt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoaT10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSh0PWUuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGkpe2Zvcig7dD1lLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyBpfX19fSxmZz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1HeS5zZXRJbW1lZGlhdGUodC5mbHVzaC5iaW5kKHQsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKEd5LmNsZWFySW1tZWRpYXRlKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLFl1PW5ldyBWYyhCYyksQzg9WXUsTk89bmV3IGNsYXNzIGV4dGVuZHMgVmN7fShjbGFzcyBleHRlbmRzIEJje2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnNjaGVkdWxlcj10LHRoaXMud29yaz1lfXNjaGVkdWxlKHQsZT0wKXtyZXR1cm4gZT4wP3N1cGVyLnNjaGVkdWxlKHQsZSk6KHRoaXMuZGVsYXk9ZSx0aGlzLnN0YXRlPXQsdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyksdGhpcyl9ZXhlY3V0ZSh0LGUpe3JldHVybiBlPjB8fHRoaXMuY2xvc2VkP3N1cGVyLmV4ZWN1dGUodCxlKTp0aGlzLl9leGVjdXRlKHQsZSl9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPWkmJmk+MHx8bnVsbD09aSYmdGhpcy5kZWxheT4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKHQsZSxpKToodC5mbHVzaCh0aGlzKSwwKX19KSxMTz1uZXcgY2xhc3MgZXh0ZW5kcyBWY3tmbHVzaCh0KXt0aGlzLl9hY3RpdmU9ITA7bGV0IGU9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12b2lkIDA7bGV0IHIse2FjdGlvbnM6aX09dGhpczt0PXR8fGkuc2hpZnQoKTtkb3tpZihyPXQuZXhlY3V0ZSh0LnN0YXRlLHQuZGVsYXkpKWJyZWFrfXdoaWxlKCh0PWlbMF0pJiZ0LmlkPT09ZSYmaS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEscil7Zm9yKDsodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKTspdC51bnN1YnNjcmliZSgpO3Rocm93IHJ9fX0oY2xhc3MgZXh0ZW5kcyBCY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1yZXF1ZXN0QXN5bmNJZCh0LGUsaT0wKXtyZXR1cm4gbnVsbCE9PWkmJmk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuYWN0aW9ucy5wdXNoKHRoaXMpLHQuX3NjaGVkdWxlZHx8KHQuX3NjaGVkdWxlZD1oZy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnQuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZCh0LGUsaT0wKXt2YXIgcjtpZihudWxsIT1pP2k+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKHQsZSxpKTtsZXR7YWN0aW9uczpvfT10O251bGwhPWUmJihudWxsPT09KHI9b1tvLmxlbmd0aC0xXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuaWQpIT09ZSYmKGhnLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGUpLHQuX3NjaGVkdWxlZD12b2lkIDApfX0pLGFvPW5ldyBRdChuPT5uLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIGdTKG4pe3JldHVybiBuJiZibihuLnNjaGVkdWxlKX1mdW5jdGlvbiBCTyhuKXtyZXR1cm4gbltuLmxlbmd0aC0xXX1mdW5jdGlvbiBIYyhuKXtyZXR1cm4gYm4oQk8obikpP24ucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIFVjKG4pe3JldHVybiBnUyhCTyhuKSk/bi5wb3AoKTp2b2lkIDB9dmFyIHE4PWQ4KFc4KCksMSkse19fZGVjb3JhdGU6WTgsX19hd2FpdGVyOlg4LF9fYXdhaXQ6YlMsX19hc3luY0dlbmVyYXRvcjpROCxfX2FzeW5jVmFsdWVzOks4fT1xOC5kZWZhdWx0LGdnPW49Pm4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiBuO2Z1bmN0aW9uIHhTKG4pe3JldHVybiBibihuPy50aGVuKX1mdW5jdGlvbiBDUyhuKXtyZXR1cm4gYm4obltwZ10pfWZ1bmN0aW9uIHdTKG4pe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmYm4obj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9ZnVuY3Rpb24gTVMobil7cmV0dXJuIG5ldyBUeXBlRXJyb3IoYFlvdSBwcm92aWRlZCAke251bGwhPT1uJiYib2JqZWN0Ij09dHlwZW9mIG4/ImFuIGludmFsaWQgb2JqZWN0IjpgJyR7bn0nYH0gd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5gKX12YXIgU1M9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciI7ZnVuY3Rpb24gRVMobil7cmV0dXJuIGJuKG4/LltTU10pfWZ1bmN0aW9uIFRTKG4pe3JldHVybiBROCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtsZXQgZT1uLmdldFJlYWRlcigpO3RyeXtmb3IoOzspe2xldHt2YWx1ZTppLGRvbmU6cn09eWllbGQgYlMoZS5yZWFkKCkpO2lmKHIpcmV0dXJuIHlpZWxkIGJTKHZvaWQgMCk7eWllbGQgeWllbGQgYlMoaSl9fWZpbmFsbHl7ZS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIERTKG4pe3JldHVybiBibihuPy5nZXRSZWFkZXIpfWZ1bmN0aW9uIGFpKG4pe2lmKG4gaW5zdGFuY2VvZiBRdClyZXR1cm4gbjtpZihudWxsIT1uKXtpZihDUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bGV0IGU9bltwZ10oKTtpZihibihlLnN1YnNjcmliZSkpcmV0dXJuIGUuc3Vic2NyaWJlKHQpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0obik7aWYoZ2cobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUXQodD0+e2ZvcihsZXQgZT0wO2U8bi5sZW5ndGgmJiF0LmNsb3NlZDtlKyspdC5uZXh0KG5bZV0pO3QuY29tcGxldGUoKX0pfShuKTtpZih4UyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57bi50aGVuKGU9Pnt0LmNsb3NlZHx8KHQubmV4dChlKSx0LmNvbXBsZXRlKCkpfSxlPT50LmVycm9yKGUpKS50aGVuKG51bGwsc1MpfSl9KG4pO2lmKHdTKG4pKXJldHVybiBaOChuKTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBRdCh0PT57Zm9yKGxldCBlIG9mIG4paWYodC5uZXh0KGUpLHQuY2xvc2VkKXJldHVybjt0LmNvbXBsZXRlKCl9KX0obik7aWYoRFMobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBaOChUUyhuKSl9KG4pfXRocm93IE1TKG4pfWZ1bmN0aW9uIFo4KG4pe3JldHVybiBuZXcgUXQodD0+eyhmdW5jdGlvbihuLHQpe3ZhciBlLGkscixvO3JldHVybiBYOCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dHJ5e2ZvcihlPUs4KG4pOyEoaT15aWVsZCBlLm5leHQoKSkuZG9uZTspaWYodC5uZXh0KGkudmFsdWUpLHQuY2xvc2VkKXJldHVybn1jYXRjaChzKXtyPXtlcnJvcjpzfX1maW5hbGx5e3RyeXtpJiYhaS5kb25lJiYobz1lLnJldHVybikmJih5aWVsZCBvLmNhbGwoZSkpfWZpbmFsbHl7aWYocil0aHJvdyByLmVycm9yfX10LmNvbXBsZXRlKCl9KX0pKG4sdCkuY2F0Y2goZT0+dC5lcnJvcihlKSl9KX1mdW5jdGlvbiBZcyhuLHQsZSxpPTAscj0hMSl7bGV0IG89dC5zY2hlZHVsZShmdW5jdGlvbigpe2UoKSxyP24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxpKSk6dGhpcy51bnN1YnNjcmliZSgpfSxpKTtpZihuLmFkZChvKSwhcilyZXR1cm4gb31mdW5jdGlvbiB6aChuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57ZS5zdWJzY3JpYmUoTHQoaSxyPT5ZcyhpLG4sKCk9PmkubmV4dChyKSx0KSwoKT0+WXMoaSxuLCgpPT5pLmNvbXBsZXRlKCksdCkscj0+WXMoaSxuLCgpPT5pLmVycm9yKHIpLHQpKSl9KX1mdW5jdGlvbiBBUyhuLHQ9MCl7cmV0dXJuIHF0KChlLGkpPT57aS5hZGQobi5zY2hlZHVsZSgoKT0+ZS5zdWJzY3JpYmUoaSksdCkpfSl9ZnVuY3Rpb24gSVMobix0KXtpZighbil0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyBRdChlPT57WXMoZSx0LCgpPT57bGV0IGk9bltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtZcyhlLHQsKCk9PntpLm5leHQoKS50aGVuKHI9PntyLmRvbmU/ZS5jb21wbGV0ZSgpOmUubmV4dChyLnZhbHVlKX0pfSwwLCEwKX0pfSl9ZnVuY3Rpb24gbG8obix0KXtyZXR1cm4gdD9mdW5jdGlvbihuLHQpe2lmKG51bGwhPW4pe2lmKENTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZihnZyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaT0wO3JldHVybiB0LnNjaGVkdWxlKGZ1bmN0aW9uKCl7aT09PW4ubGVuZ3RoP2UuY29tcGxldGUoKTooZS5uZXh0KG5baSsrXSksZS5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KX0pfShuLHQpO2lmKHhTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBhaShuKS5waXBlKEFTKHQpLHpoKHQpKX0obix0KTtpZih3UyhuKSlyZXR1cm4gSVMobix0KTtpZihFUyhuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gbmV3IFF0KGU9PntsZXQgaTtyZXR1cm4gWXMoZSx0LCgpPT57aT1uW1NTXSgpLFlzKGUsdCwoKT0+e2xldCByLG87dHJ5eyh7dmFsdWU6cixkb25lOm99PWkubmV4dCgpKX1jYXRjaChzKXtyZXR1cm4gdm9pZCBlLmVycm9yKHMpfW8/ZS5jb21wbGV0ZSgpOmUubmV4dChyKX0sMCwhMCl9KSwoKT0+Ym4oaT8ucmV0dXJuKSYmaS5yZXR1cm4oKX0pfShuLHQpO2lmKERTKG4pKXJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBJUyhUUyhuKSx0KX0obix0KX10aHJvdyBNUyhuKX0obix0KTphaShuKX1mdW5jdGlvbiBqdCguLi5uKXtyZXR1cm4gbG8obixVYyhuKSl9ZnVuY3Rpb24gR2wobix0KXtsZXQgZT1ibihuKT9uOigpPT5uLGk9cj0+ci5lcnJvcihlKCkpO3JldHVybiBuZXcgUXQodD9yPT50LnNjaGVkdWxlKGksMCxyKTppKX12YXIgdGw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2luZD10LHRoaXMudmFsdWU9ZSx0aGlzLmVycm9yPWksdGhpcy5oYXNWYWx1ZT0iTiI9PT10fW9ic2VydmUodCl7cmV0dXJuIEhPKHRoaXMsdCl9ZG8odCxlLGkpe2xldHtraW5kOnIsdmFsdWU6byxlcnJvcjpzfT10aGlzO3JldHVybiJOIj09PXI/dD8uKG8pOiJFIj09PXI/ZT8uKHMpOmk/LigpfWFjY2VwdCh0LGUsaSl7dmFyIHI7cmV0dXJuIGJuKG51bGw9PT0ocj10KXx8dm9pZCAwPT09cj92b2lkIDA6ci5uZXh0KT90aGlzLm9ic2VydmUodCk6dGhpcy5kbyh0LGUsaSl9dG9PYnNlcnZhYmxlKCl7bGV0e2tpbmQ6dCx2YWx1ZTplLGVycm9yOml9PXRoaXMscj0iTiI9PT10P2p0KGUpOiJFIj09PXQ/R2woKCk9PmkpOiJDIj09PXQ/YW86MDtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICR7dH1gKTtyZXR1cm4gcn1zdGF0aWMgY3JlYXRlTmV4dCh0KXtyZXR1cm4gbmV3IHRsKCJOIix0KX1zdGF0aWMgY3JlYXRlRXJyb3IodCl7cmV0dXJuIG5ldyB0bCgiRSIsdm9pZCAwLHQpfXN0YXRpYyBjcmVhdGVDb21wbGV0ZSgpe3JldHVybiB0bC5jb21wbGV0ZU5vdGlmaWNhdGlvbn19O2Z1bmN0aW9uIEhPKG4sdCl7dmFyIGUsaSxyO2xldHtraW5kOm8sdmFsdWU6cyxlcnJvcjphfT1uO2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIG5vdGlmaWNhdGlvbiwgbWlzc2luZyAia2luZCInKTsiTiI9PT1vP251bGw9PT0oZT10Lm5leHQpfHx2b2lkIDA9PT1lfHxlLmNhbGwodCxzKToiRSI9PT1vP251bGw9PT0oaT10LmVycm9yKXx8dm9pZCAwPT09aXx8aS5jYWxsKHQsYSk6bnVsbD09PShyPXQuY29tcGxldGUpfHx2b2lkIDA9PT1yfHxyLmNhbGwodCl9ZnVuY3Rpb24gV3kobil7cmV0dXJuISFuJiYobiBpbnN0YW5jZW9mIFF0fHxibihuLmxpZnQpJiZibihuLnN1YnNjcmliZSkpfXRsLmNvbXBsZXRlTm90aWZpY2F0aW9uPW5ldyB0bCgiQyIpO3ZhciBfZz1jZyhuPT5mdW5jdGlvbigpe24odGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIFBTKG4sdCl7bGV0IGU9Im9iamVjdCI9PXR5cGVvZiB0O3JldHVybiBuZXcgUHJvbWlzZSgoaSxyKT0+e2xldCBvPW5ldyBqbCh7bmV4dDpzPT57aShzKSxvLnVuc3Vic2NyaWJlKCl9LGVycm9yOnIsY29tcGxldGU6KCk9PntlP2kodC5kZWZhdWx0VmFsdWUpOnIobmV3IF9nKX19KTtuLnN1YnNjcmliZShvKX0pfWZ1bmN0aW9uIEIobix0KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2kubmV4dChuLmNhbGwodCxvLHIrKykpfSkpfSl9dmFye2lzQXJyYXk6bGRlfT1BcnJheTtmdW5jdGlvbiBaZChuKXtyZXR1cm4gQih0PT5mdW5jdGlvbihuLHQpe3JldHVybiBsZGUodCk/biguLi50KTpuKHQpfShuLHQpKX12YXJ7aXNBcnJheTp1ZGV9PUFycmF5LHtnZXRQcm90b3R5cGVPZjpkZGUscHJvdG90eXBlOnBkZSxrZXlzOmhkZX09T2JqZWN0O2Z1bmN0aW9uIFJTKG4pe2lmKDE9PT1uLmxlbmd0aCl7bGV0IHQ9blswXTtpZih1ZGUodCkpcmV0dXJue2FyZ3M6dCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4mJmRkZShuKT09PXBkZX0odCkpe2xldCBlPWhkZSh0KTtyZXR1cm57YXJnczplLm1hcChpPT50W2ldKSxrZXlzOmV9fX1yZXR1cm57YXJnczpuLGtleXM6bnVsbH19ZnVuY3Rpb24gT1Mobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSxyKT0+KGVbaV09dFtyXSxlKSx7fSl9ZnVuY3Rpb24gcG4oLi4ubil7bGV0IHQ9VWMobiksZT1IYyhuKSx7YXJnczppLGtleXM6cn09UlMobik7aWYoMD09PWkubGVuZ3RoKXJldHVybiBsbyhbXSx0KTtsZXQgbz1uZXcgUXQoVU8oaSx0LHI/cz0+T1MocixzKTpNcykpO3JldHVybiBlP28ucGlwZShaZChlKSk6b31mdW5jdGlvbiBVTyhuLHQsZT1Ncyl7cmV0dXJuIGk9Pntvaih0LCgpPT57bGV0e2xlbmd0aDpyfT1uLG89bmV3IEFycmF5KHIpLHM9cixhPXI7Zm9yKGxldCBsPTA7bDxyO2wrKylvaih0LCgpPT57bGV0IGM9bG8obltsXSx0KSx1PSExO2Muc3Vic2NyaWJlKEx0KGksZD0+e29bbF09ZCx1fHwodT0hMCxhLS0pLGF8fGkubmV4dChlKG8uc2xpY2UoKSkpfSwoKT0+ey0tc3x8aS5jb21wbGV0ZSgpfSkpfSxpKX0saSl9fWZ1bmN0aW9uIG9qKG4sdCxlKXtuP1lzKGUsbix0KTp0KCl9ZnVuY3Rpb24gX24obix0LGU9MS8wKXtyZXR1cm4gYm4odCk/X24oKGkscik9PkIoKG8scyk9PnQoaSxvLHIscykpKGFpKG4oaSxyKSkpLGUpOigibnVtYmVyIj09dHlwZW9mIHQmJihlPXQpLHF0KChpLHIpPT5mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsPVtdLGM9MCx1PTAsZD0hMSxwPSgpPT57ZCYmIWwubGVuZ3RoJiYhYyYmdC5jb21wbGV0ZSgpfSxoPW09PmM8aT9mKG0pOmwucHVzaChtKSxmPW09PntjKys7bGV0IEM9ITE7YWkoZShtLHUrKykpLnN1YnNjcmliZShMdCh0LF89Pnt0Lm5leHQoXyl9LCgpPT57Qz0hMH0sdm9pZCAwLCgpPT57aWYoQyl0cnl7Zm9yKGMtLTtsLmxlbmd0aCYmYzxpOyl7bGV0IF89bC5zaGlmdCgpO2YoXyl9cCgpfWNhdGNoKF8pe3QuZXJyb3IoXyl9fSkpfTtyZXR1cm4gbi5zdWJzY3JpYmUoTHQodCxoLCgpPT57ZD0hMCxwKCl9KSksKCk9Pnt9fShpLHIsbixlKSkpfWZ1bmN0aW9uIGtTKG49MS8wKXtyZXR1cm4gX24oTXMsbil9ZnVuY3Rpb24gSmQoLi4ubil7cmV0dXJuIGtTKDEpKGxvKG4sVWMobikpKX1mdW5jdGlvbiBiYShuKXtyZXR1cm4gbmV3IFF0KHQ9PnthaShuKCkpLnN1YnNjcmliZSh0KX0pfWZ1bmN0aW9uIHhvKC4uLm4pe2xldCB0PUhjKG4pLHthcmdzOmUsa2V5czppfT1SUyhuKSxyPW5ldyBRdChvPT57bGV0e2xlbmd0aDpzfT1lO2lmKCFzKXJldHVybiB2b2lkIG8uY29tcGxldGUoKTtsZXQgYT1uZXcgQXJyYXkocyksbD1zLGM9cztmb3IobGV0IHU9MDt1PHM7dSsrKXtsZXQgZD0hMTthaShlW3VdKS5zdWJzY3JpYmUoTHQobyxwPT57ZHx8KGQ9ITAsYy0tKSxhW3VdPXB9LCgpPT5sLS0sdm9pZCAwLCgpPT57KCFsfHwhZCkmJihjfHxvLm5leHQoaT9PUyhpLGEpOmEpLG8uY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIHQ/ci5waXBlKFpkKHQpKTpyfXZhciBtZGU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sZ2RlPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxfZGU9WyJvbiIsIm9mZiJdO2Z1bmN0aW9uIGxpKG4sdCxlLGkpe2lmKGJuKGUpJiYoaT1lLGU9dm9pZCAwKSxpKXJldHVybiBsaShuLHQsZSkucGlwZShaZChpKSk7bGV0W3Isb109ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4uYWRkRXZlbnRMaXN0ZW5lcikmJmJuKG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcil9KG4pP2dkZS5tYXAocz0+YT0+bltzXSh0LGEsZSkpOmZ1bmN0aW9uKG4pe3JldHVybiBibihuLmFkZExpc3RlbmVyKSYmYm4obi5yZW1vdmVMaXN0ZW5lcil9KG4pP21kZS5tYXAobGoobix0KSk6ZnVuY3Rpb24obil7cmV0dXJuIGJuKG4ub24pJiZibihuLm9mZil9KG4pP19kZS5tYXAobGoobix0KSk6W107aWYoIXImJmdnKG4pKXJldHVybiBfbihzPT5saShzLHQsZSkpKGFpKG4pKTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgUXQocz0+e2xldCBhPSguLi5sKT0+cy5uZXh0KDE8bC5sZW5ndGg/bDpsWzBdKTtyZXR1cm4gcihhKSwoKT0+byhhKX0pfWZ1bmN0aW9uIGxqKG4sdCl7cmV0dXJuIGU9Pmk9Pm5bZV0odCxpKX1mdW5jdGlvbiB4YShuPTAsdCxlPUM4KXtsZXQgaT0tMTtyZXR1cm4gbnVsbCE9dCYmKGdTKHQpP2U9dDppPXQpLG5ldyBRdChyPT57bGV0IG89ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obil9KG4pPytuLWUubm93KCk6bjtvPDAmJihvPTApO2xldCBzPTA7cmV0dXJuIGUuc2NoZWR1bGUoZnVuY3Rpb24oKXtyLmNsb3NlZHx8KHIubmV4dChzKyspLDA8PWk/dGhpcy5zY2hlZHVsZSh2b2lkIDAsaSk6ci5jb21wbGV0ZSgpKX0sbyl9KX1mdW5jdGlvbiB1biguLi5uKXtsZXQgdD1VYyhuKSxlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBCTyhuKT9uLnBvcCgpOjEvMH0obiksaT1uO3JldHVybiBpLmxlbmd0aD8xPT09aS5sZW5ndGg/YWkoaVswXSk6a1MoZSkobG8oaSx0KSk6YW99dmFye2lzQXJyYXk6eGRlfT1BcnJheTtmdW5jdGlvbiBGUyhuKXtyZXR1cm4gMT09PW4ubGVuZ3RoJiZ4ZGUoblswXSk/blswXTpufWZ1bmN0aW9uIEhlKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9MDtlLnN1YnNjcmliZShMdChpLG89Pm4uY2FsbCh0LG8scisrKSYmaS5uZXh0KG8pKSl9KX1mdW5jdGlvbiB6YyhuLHQ9WXUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgaT0hMSxyPW51bGwsbz1udWxsLHM9ITEsYT0oKT0+e2lmKG8/LnVuc3Vic2NyaWJlKCksbz1udWxsLGkpe2k9ITE7bGV0IGM9cjtyPW51bGwsZS5uZXh0KGMpfXMmJmUuY29tcGxldGUoKX0sbD0oKT0+e289bnVsbCxzJiZlLmNvbXBsZXRlKCl9O3Quc3Vic2NyaWJlKEx0KGUsYz0+e2k9ITAscj1jLG98fGFpKG4oKSkuc3Vic2NyaWJlKG89THQoZSxhLGwpKX0sKCk9PntzPSEwLCghaXx8IW98fG8uY2xvc2VkKSYmZS5jb21wbGV0ZSgpfSkpfSl9KCgpPT54YShuLHQpKX1mdW5jdGlvbiBDbyhuKXtyZXR1cm4gcXQoKHQsZSk9PntsZXQgbyxpPW51bGwscj0hMTtpPXQuc3Vic2NyaWJlKEx0KGUsdm9pZCAwLHZvaWQgMCxzPT57bz1haShuKHMsQ28obikodCkpKSxpPyhpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKTpyPSEwfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLG8uc3Vic2NyaWJlKGUpKX0pfWZ1bmN0aW9uIHVqKG4sdCxlLGkscil7cmV0dXJuKG8scyk9PntsZXQgYT1lLGw9dCxjPTA7by5zdWJzY3JpYmUoTHQocyx1PT57bGV0IGQ9YysrO2w9YT9uKGwsdSxkKTooYT0hMCx1KSxpJiZzLm5leHQobCl9LHImJigoKT0+e2EmJnMubmV4dChsKSxzLmNvbXBsZXRlKCl9KSkpfX1mdW5jdGlvbiBHTyguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gdD9mdW5jdGlvbiguLi5uKXtyZXR1cm4gUk8obil9KEdPKC4uLm4pLFpkKHQpKTpxdCgoZSxpKT0+e1VPKFtlLC4uLkZTKG4pXSkoaSl9KX1mdW5jdGlvbiBzciguLi5uKXtyZXR1cm4gR08oLi4ubil9ZnVuY3Rpb24gQXIobix0PVl1KXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT0oKT0+e2lmKHIpe3IudW5zdWJzY3JpYmUoKSxyPW51bGw7bGV0IGM9bztvPW51bGwsaS5uZXh0KGMpfX07ZnVuY3Rpb24gbCgpe2xldCBjPXMrbix1PXQubm93KCk7aWYodTxjKXJldHVybiByPXRoaXMuc2NoZWR1bGUodm9pZCAwLGMtdSksdm9pZCBpLmFkZChyKTthKCl9ZS5zdWJzY3JpYmUoTHQoaSxjPT57bz1jLHM9dC5ub3coKSxyfHwocj10LnNjaGVkdWxlKGwsbiksaS5hZGQocikpfSwoKT0+e2EoKSxpLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e289cj1udWxsfSkpfSl9ZnVuY3Rpb24gZGoobil7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT57aXx8ZS5uZXh0KG4pLGUuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIEh0KG4pe3JldHVybiBuPD0wPygpPT5hbzpxdCgodCxlKT0+e2xldCBpPTA7dC5zdWJzY3JpYmUoTHQoZSxyPT57KytpPD1uJiYoZS5uZXh0KHIpLG48PWkmJmUuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBxeSgpe3JldHVybiBxdCgobix0KT0+e24uc3Vic2NyaWJlKEx0KHQsemwpKX0pfWZ1bmN0aW9uIHZnKG4sdCl7cmV0dXJuIHQ/ZT0+SmQodC5waXBlKEh0KDEpLHF5KCkpLGUucGlwZSh2ZyhuKSkpOl9uKChlLGkpPT5uKGUsaSkucGlwZShIdCgxKSxmdW5jdGlvbihuKXtyZXR1cm4gQigoKT0+bil9KGUpKSl9ZnVuY3Rpb24gbmwobix0PVl1KXtsZXQgZT14YShuLHQpO3JldHVybiB2ZygoKT0+ZSl9ZnVuY3Rpb24gZGkobix0PU1zKXtyZXR1cm4gbj1uPz9DZGUscXQoKGUsaSk9PntsZXQgcixvPSEwO2Uuc3Vic2NyaWJlKEx0KGkscz0+e2xldCBhPXQocyk7KG98fCFuKHIsYSkpJiYobz0hMSxyPWEsaS5uZXh0KHMpKX0pKX0pfWZ1bmN0aW9uIENkZShuLHQpe3JldHVybiBuPT09dH1mdW5jdGlvbiBoaihuPXdkZSl7cmV0dXJuIHF0KCh0LGUpPT57bGV0IGk9ITE7dC5zdWJzY3JpYmUoTHQoZSxyPT57aT0hMCxlLm5leHQocil9LCgpPT5pP2UuY29tcGxldGUoKTplLmVycm9yKG4oKSkpKX0pfWZ1bmN0aW9uIHdkZSgpe3JldHVybiBuZXcgX2d9ZnVuY3Rpb24gTFMobix0KXtyZXR1cm4gdD9lPT5lLnBpcGUoTFMoKGkscik9PmFpKG4oaSxyKSkucGlwZShCKChvLHMpPT50KGksbyxyLHMpKSkpKTpxdCgoZSxpKT0+e2xldCByPTAsbz1udWxsLHM9ITE7ZS5zdWJzY3JpYmUoTHQoaSxhPT57b3x8KG89THQoaSx2b2lkIDAsKCk9PntvPW51bGwscyYmaS5jb21wbGV0ZSgpfSksYWkobihhLHIrKykpLnN1YnNjcmliZShvKSl9LCgpPT57cz0hMCwhbyYmaS5jb21wbGV0ZSgpfSkpfSl9ZnVuY3Rpb24gVlMobix0LGUsaSl7cmV0dXJuIHF0KChyLG8pPT57bGV0IHM7dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/KHtkdXJhdGlvbjplLGVsZW1lbnQ6cyxjb25uZWN0b3I6aX09dCk6cz10O2xldCBhPW5ldyBNYXAsbD1mPT57YS5mb3JFYWNoKGYpLGYobyl9LGM9Zj0+bChtPT5tLmVycm9yKGYpKSx1PTAsZD0hMSxwPW5ldyBIeShvLGY9Pnt0cnl7bGV0IG09bihmKSxDPWEuZ2V0KG0pO2lmKCFDKXthLnNldChtLEM9aT9pKCk6bmV3IFRlKTtsZXQgXz1mdW5jdGlvbihmLG0pe2xldCBDPW5ldyBRdChfPT57dSsrO2xldCB5PW0uc3Vic2NyaWJlKF8pO3JldHVybigpPT57eS51bnN1YnNjcmliZSgpLDA9PS0tdSYmZCYmcC51bnN1YnNjcmliZSgpfX0pO3JldHVybiBDLmtleT1mLEN9KG0sQyk7aWYoby5uZXh0KF8pLGUpe2xldCB5PUx0KEMsKCk9PntDLmNvbXBsZXRlKCkseT8udW5zdWJzY3JpYmUoKX0sdm9pZCAwLHZvaWQgMCwoKT0+YS5kZWxldGUobSkpO3AuYWRkKGFpKGUoXykpLnN1YnNjcmliZSh5KSl9fUMubmV4dChzP3MoZik6Zil9Y2F0Y2gobSl7YyhtKX19LCgpPT5sKGY9PmYuY29tcGxldGUoKSksYywoKT0+YS5jbGVhcigpLCgpPT4oZD0hMCwwPT09dSkpO3Iuc3Vic2NyaWJlKHApfSl9ZnVuY3Rpb24geWcoKXtyZXR1cm4gcXQoKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKEx0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIFhzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBUZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCx1PSExLGQ9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGg9KCk9PntwKCkscz1sPXZvaWQgMCx1PWQ9ITF9LGY9KCk9PntsZXQgbT1zO2goKSxtPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gcXQoKG0sQyk9PntjKyssIWQmJiF1JiZwKCk7bGV0IF89bD1sPz90KCk7Qy5hZGQoKCk9PntjLS0sMD09PWMmJiFkJiYhdSYmKGE9Wk8oZixyKSl9KSxfLnN1YnNjcmliZShDKSwhcyYmYz4wJiYocz1uZXcgamwoe25leHQ6eT0+Xy5uZXh0KHkpLGVycm9yOnk9PntkPSEwLHAoKSxhPVpPKGgsZSx5KSxfLmVycm9yKHkpfSxjb21wbGV0ZTooKT0+e3U9ITAscCgpLGE9Wk8oaCxpKSxfLmNvbXBsZXRlKCl9fSksYWkobSkuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBaTyhuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBqbCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIFFzKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsWHMoe2Nvbm5lY3RvcjooKT0+bmV3IFVoKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIENhKG4pe3JldHVybiBIZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gVm4oLi4ubil7bGV0IHQ9VWMobik7cmV0dXJuIHF0KChlLGkpPT57KHQ/SmQobixlLHQpOkpkKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIHZpKG4sdCl7cmV0dXJuIHF0KChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKEx0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCx1PW8rKzthaShuKGwsdSkpLnN1YnNjcmliZShyPUx0KGksZD0+aS5uZXh0KHQ/dChsLGQsdSxjKyspOmQpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIG90KG4pe3JldHVybiBxdCgodCxlKT0+e2FpKG4pLnN1YnNjcmliZShMdChlLCgpPT5lLmNvbXBsZXRlKCksemwpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gWXkobix0PSExKXtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKEx0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBOdChuLHQsZSl7bGV0IGk9Ym4obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/cXQoKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoTHQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOk1zfXZhciBKTz17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYmcobix0PVl1LGU9Sk8pe2xldCBpPXhhKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1KTyl7cmV0dXJuIHF0KChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLHU9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoaCgpLGMmJmkuY29tcGxldGUoKSl9LGQ9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPWY9Pmw9YWkobihmKSkuc3Vic2NyaWJlKEx0KGksdSxkKSksaD0oKT0+e2lmKHMpe3M9ITE7bGV0IGY9YTthPW51bGwsaS5uZXh0KGYpLCFjJiZwKGYpfX07ZS5zdWJzY3JpYmUoTHQoaSxmPT57cz0hMCxhPWYsKCFsfHxsLmNsb3NlZCkmJihyP2goKTpwKGYpKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBHdCguLi5uKXtsZXQgdD1IYyhuKTtyZXR1cm4gcXQoKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWFpKG5bbF0pLnN1YnNjcmliZShMdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KE1zKSkmJihzPW51bGwpKX0semwpKTtlLnN1YnNjcmliZShMdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIGFyKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT1hcilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uICRPKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIGNvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChjbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIGJrKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIE1kZT1hcih7X19mb3J3YXJkX3JlZl9fOmFyfSk7ZnVuY3Rpb24gcmkobil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPXJpLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY28odGhpcygpKX0sbn1mdW5jdGlvbiBxaShuKXtyZXR1cm4gbEcobik/bigpOm59ZnVuY3Rpb24gbEcobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoTWRlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1yaX12YXIgTXQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMobil9JHt0PyI6ICIrdC50cmltKCk6IiJ9YH0odCxlKSksdGhpcy5jb2RlPXR9fTtmdW5jdGlvbiBxbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bjpudWxsPT1uPyIiOlN0cmluZyhuKX1mdW5jdGlvbiBNRihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLm5hbWV8fG4udG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLm5hbWV8fG4udHlwZS50b1N0cmluZygpOnFuKG4pfWZ1bmN0aW9uIFNGKG4sdCl7dGhyb3cgbmV3IE10KC0yMDEsITEpfWZ1bmN0aW9uIGNHKG4sdCxlLGkpe3Rocm93IG5ldyBFcnJvcihgQVNTRVJUSU9OIEVSUk9SOiAke259YCsobnVsbD09aT8iIjpgIFtFeHBlY3RlZD0+ICR7ZX0gJHtpfSAke3R9IDw9QWN0dWFsXWApKX1mdW5jdGlvbiBnZShuKXtyZXR1cm57dG9rZW46bi50b2tlbixwcm92aWRlZEluOm4ucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5Om4uZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIFUobil7cmV0dXJue3Byb3ZpZGVyczpuLnByb3ZpZGVyc3x8W10saW1wb3J0czpuLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBFRihuKXtyZXR1cm4gbWoobix0RSl8fG1qKG4sdUcpfWZ1bmN0aW9uIG1qKG4sdCl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsfWZ1bmN0aW9uIGdqKG4pe3JldHVybiBuJiYobi5oYXNPd25Qcm9wZXJ0eSh4ayl8fG4uaGFzT3duUHJvcGVydHkoSWRlKSk/blt4a106bnVsbH12YXIgQ2ssdEU9YXIoeyJcdTAyNzVwcm92Ijphcn0pLHhrPWFyKHsiXHUwMjc1aW5qIjphcn0pLHVHPWFyKHtuZ0luamVjdGFibGVEZWY6YXJ9KSxJZGU9YXIoe25nSW5qZWN0b3JEZWY6YXJ9KSxpaT0oKCk9PntyZXR1cm4obj1paXx8KGlpPXt9KSlbbi5EZWZhdWx0PTBdPSJEZWZhdWx0IixuW24uSG9zdD0xXT0iSG9zdCIsbltuLlNlbGY9Ml09IlNlbGYiLG5bbi5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLG5bbi5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGlpO3ZhciBufSkoKTtmdW5jdGlvbiBpbChuKXtsZXQgdD1DaztyZXR1cm4gQ2s9bix0fWZ1bmN0aW9uIGRHKG4sdCxlKXtsZXQgaT1FRihuKTtyZXR1cm4gaSYmInJvb3QiPT1pLnByb3ZpZGVkSW4/dm9pZCAwPT09aS52YWx1ZT9pLnZhbHVlPWkuZmFjdG9yeSgpOmkudmFsdWU6ZSZpaS5PcHRpb25hbD9udWxsOnZvaWQgMCE9PXQ/dDp2b2lkIFNGKGNvKG4pKX1mdW5jdGlvbiB0ZihuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX12YXIgS3k9KCgpPT57cmV0dXJuKG49S3l8fChLeT17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixLeTt2YXIgbn0pKCksd2E9KCgpPT57cmV0dXJuKG49d2F8fCh3YT17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIix3YTt2YXIgbn0pKCksV3I9KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLEFnPXt9LFdpPVtdLFRFPWFyKHsiXHUwMjc1Y21wIjphcn0pLFRGPWFyKHsiXHUwMjc1ZGlyIjphcn0pLERGPWFyKHsiXHUwMjc1cGlwZSI6YXJ9KSxwRz1hcih7Ilx1MDI3NW1vZCI6YXJ9KSxRdT1hcih7Ilx1MDI3NWZhYyI6YXJ9KSxaeT1hcih7X19OR19FTEVNRU5UX0lEX186YXJ9KSxSZGU9MDtmdW5jdGlvbiBrKG4pe3JldHVybiB0ZigoKT0+e2xldCBlPSEwPT09bi5zdGFuZGFsb25lLGk9e30scj17dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxkZWNsczpuLmRlY2xzLHZhcnM6bi52YXJzLGZhY3Rvcnk6bnVsbCx0ZW1wbGF0ZTpuLnRlbXBsYXRlfHxudWxsLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6aSxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBc3x8bnVsbCxvblB1c2g6bi5jaGFuZ2VEZXRlY3Rpb249PT1LeS5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsc3RhbmRhbG9uZTplLGRlcGVuZGVuY2llczplJiZuLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bnVsbCxzZWxlY3RvcnM6bi5zZWxlY3RvcnN8fFdpLHZpZXdRdWVyeTpuLnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpuLmZlYXR1cmVzfHxudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8d2EuRW11bGF0ZWQsaWQ6ImMiK1JkZSsrLHN0eWxlczpuLnN0eWxlc3x8V2ksXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz1uLmRlcGVuZGVuY2llcyxzPW4uZmVhdHVyZXM7cmV0dXJuIHIuaW5wdXRzPXZqKG4uaW5wdXRzLGkpLHIub3V0cHV0cz12aihuLm91dHB1dHMpLHMmJnMuZm9yRWFjaChhPT5hKHIpKSxyLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoaEcpLmZpbHRlcihfaik6bnVsbCxyLnBpcGVEZWZzPW8/KCk9PigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6bykubWFwKEt1KS5maWx0ZXIoX2opOm51bGwscn0pfWZ1bmN0aW9uIGJiKG4sdCxlKXtsZXQgaT1uLlx1MDI3NWNtcDtpLmRpcmVjdGl2ZURlZnM9KCk9PigiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCkubWFwKGhHKSxpLnBpcGVEZWZzPSgpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUpLm1hcChLdSl9ZnVuY3Rpb24gaEcobil7cmV0dXJuIG9sKG4pfHxYaChuKX1mdW5jdGlvbiBfaihuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24geihuKXtyZXR1cm4gdGYoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxXaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFdpLGltcG9ydHM6bi5pbXBvcnRzfHxXaSxleHBvcnRzOm4uZXhwb3J0c3x8V2ksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIHZqKG4sdCl7aWYobnVsbD09bilyZXR1cm4gQWc7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX12YXIgT2U9aztmdW5jdGlvbiBCZyhuKXtyZXR1cm57dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsZmFjdG9yeTpudWxsLHB1cmU6ITEhPT1uLnB1cmUsc3RhbmRhbG9uZTohMD09PW4uc3RhbmRhbG9uZSxvbkRlc3Ryb3k6bi50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gb2wobil7cmV0dXJuIG5bVEVdfHxudWxsfWZ1bmN0aW9uIFhoKG4pe3JldHVybiBuW1RGXXx8bnVsbH1mdW5jdGlvbiBLdShuKXtyZXR1cm4gbltERl18fG51bGx9ZnVuY3Rpb24gZkcobil7bGV0IHQ9b2wobil8fFhoKG4pfHxLdShuKTtyZXR1cm4gbnVsbCE9PXQmJnQuc3RhbmRhbG9uZX1mdW5jdGlvbiBJZyhuLHQpe2xldCBlPW5bcEddfHxudWxsO2lmKCFlJiYhMD09PXQpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7Y28obil9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gcWgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgblsxXX1mdW5jdGlvbiBKdShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmITA9PT1uWzFdfWZ1bmN0aW9uIFBGKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX1mdW5jdGlvbiBSRihuKXtyZXR1cm4gMj09KDImbi5mbGFncyl9ZnVuY3Rpb24gQUUobil7cmV0dXJuIDE9PSgxJm4uZmxhZ3MpfWZ1bmN0aW9uIFFsKG4pe3JldHVybiBudWxsIT09bi50ZW1wbGF0ZX1mdW5jdGlvbiBGZGUobil7cmV0dXJuIDAhPSgyNTYmblsyXSl9ZnVuY3Rpb24gUWgobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShRdSk/bltRdV06bnVsbH1mdW5jdGlvbiB6dCgpe3JldHVybiBfR31mdW5jdGlvbiBfRyhuKXtyZXR1cm4gbi50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKG4uc2V0SW5wdXQ9TGRlKSxOZGV9ZnVuY3Rpb24gTmRlKCl7bGV0IG49eUcodGhpcyksdD1uPy5jdXJyZW50O2lmKHQpe2xldCBlPW4ucHJldmlvdXM7aWYoZT09PUFnKW4ucHJldmlvdXM9dDtlbHNlIGZvcihsZXQgaSBpbiB0KWVbaV09dFtpXTtuLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKHQpfX1mdW5jdGlvbiBMZGUobix0LGUsaSl7bGV0IHI9eUcobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bdkddPXR9KG4se3ByZXZpb3VzOkFnLGN1cnJlbnQ6bnVsbH0pLG89ci5jdXJyZW50fHwoci5jdXJyZW50PXt9KSxzPXIucHJldmlvdXMsYT10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLGw9c1thXTtvW2FdPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPWl9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0obCYmbC5jdXJyZW50VmFsdWUsdCxzPT09QWcpLG5baV09dH16dC5uZ0luaGVyaXQ9ITA7dmFyIHZHPSJfX25nU2ltcGxlQ2hhbmdlc19fIjtmdW5jdGlvbiB5RyhuKXtyZXR1cm4gblt2R118fG51bGx9ZnVuY3Rpb24gTWEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bMF07cmV0dXJuIG59ZnVuY3Rpb24gSUUobix0KXtyZXR1cm4gTWEodFtuXSl9ZnVuY3Rpb24gdWwobix0KXtyZXR1cm4gTWEodFtuLmluZGV4XSl9ZnVuY3Rpb24gQ0cobix0KXtyZXR1cm4gbi5kYXRhW3RdfWZ1bmN0aW9uIEhnKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gb3Aobix0KXtsZXQgZT10W25dO3JldHVybiBxaChlKT9lOmVbMF19ZnVuY3Rpb24gb0Uobil7cmV0dXJuIDY0PT0oNjQmblsyXSl9ZnVuY3Rpb24gZXAobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gd0cobil7blsxOF09MH1mdW5jdGlvbiBPRihuLHQpe25bNV0rPXQ7bGV0IGU9bixpPW5bM107Zm9yKDtudWxsIT09aSYmKDE9PT10JiYxPT09ZVs1XXx8LTE9PT10JiYwPT09ZVs1XSk7KWlbNV0rPXQsZT1pLGk9aVszXX12YXIgWW49e2xGcmFtZTpQRyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIE1HKCl7cmV0dXJuIFluLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBaZSgpe3JldHVybiBZbi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRGkoKXtyZXR1cm4gWW4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHJlKG4pe3JldHVybiBZbi5sRnJhbWUuY29udGV4dExWaWV3PW4sbls4XX1mdW5jdGlvbiBvZShuKXtyZXR1cm4gWW4ubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLG59ZnVuY3Rpb24gTW8oKXtsZXQgbj1TRygpO2Zvcig7bnVsbCE9PW4mJjY0PT09bi50eXBlOyluPW4ucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIFNHKCl7cmV0dXJuIFluLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gbGIoKXtsZXQgbj1Zbi5sRnJhbWUsdD1uLmN1cnJlbnRUTm9kZTtyZXR1cm4gbi5pc1BhcmVudD90OnQucGFyZW50fWZ1bmN0aW9uIFdjKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuY3VycmVudFROb2RlPW4sZS5pc1BhcmVudD10fWZ1bmN0aW9uIGtGKCl7cmV0dXJuIFluLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBGRigpe1luLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBFcygpe2xldCBuPVluLmxGcmFtZSx0PW4uYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PXQmJih0PW4uYmluZGluZ1Jvb3RJbmRleD1uLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSx0fWZ1bmN0aW9uICR1KCl7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gRUcobil7cmV0dXJuIFluLmxGcmFtZS5iaW5kaW5nSW5kZXg9bn1mdW5jdGlvbiBVZygpe3JldHVybiBZbi5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gZWQobil7bGV0IHQ9WW4ubEZyYW1lLGU9dC5iaW5kaW5nSW5kZXg7cmV0dXJuIHQuYmluZGluZ0luZGV4PXQuYmluZGluZ0luZGV4K24sZX1mdW5jdGlvbiBURyhuKXtZbi5sRnJhbWUuaW5JMThuPW59ZnVuY3Rpb24gUWRlKG4sdCl7bGV0IGU9WW4ubEZyYW1lO2UuYmluZGluZ0luZGV4PWUuYmluZGluZ1Jvb3RJbmRleD1uLFNrKHQpfWZ1bmN0aW9uIFNrKG4pe1luLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9bn1mdW5jdGlvbiBORihuKXtsZXQgdD1Zbi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09dD9udWxsOm5bdF19ZnVuY3Rpb24gREcoKXtyZXR1cm4gWW4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIExGKG4pe1luLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIFpkZShuKXtsZXQgdD1uWzFdO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bls2XTpudWxsfWZ1bmN0aW9uIEFHKG4sdCxlKXtpZihlJmlpLlNraXBTZWxmKXtsZXQgcj10LG89bjtmb3IoOyEocj1yLnBhcmVudCxudWxsIT09cnx8ZSZpaS5Ib3N0fHwocj1aZGUobyksbnVsbD09PXJ8fChvPW9bMTVdLDEwJnIudHlwZSkpKTspO2lmKG51bGw9PT1yKXJldHVybiExO3Q9cixuPW99bGV0IGk9WW4ubEZyYW1lPUlHKCk7cmV0dXJuIGkuY3VycmVudFROb2RlPXQsaS5sVmlldz1uLCEwfWZ1bmN0aW9uIEJGKG4pe2xldCB0PUlHKCksZT1uWzFdO1luLmxGcmFtZT10LHQuY3VycmVudFROb2RlPWUuZmlyc3RDaGlsZCx0LmxWaWV3PW4sdC50Vmlldz1lLHQuY29udGV4dExWaWV3PW4sdC5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nU3RhcnRJbmRleCx0LmluSTE4bj0hMX1mdW5jdGlvbiBJRygpe2xldCBuPVluLmxGcmFtZSx0PW51bGw9PT1uP251bGw6bi5jaGlsZDtyZXR1cm4gbnVsbD09PXQ/UEcobik6dH1mdW5jdGlvbiBQRyhuKXtsZXQgdD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50Om4sY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09biYmKG4uY2hpbGQ9dCksdH1mdW5jdGlvbiBSRygpe2xldCBuPVluLmxGcmFtZTtyZXR1cm4gWW4ubEZyYW1lPW4ucGFyZW50LG4uY3VycmVudFROb2RlPW51bGwsbi5sVmlldz1udWxsLG59dmFyIE9HPVJHO2Z1bmN0aW9uIFZGKCl7bGV0IG49UkcoKTtuLmlzUGFyZW50PSEwLG4udFZpZXc9bnVsbCxuLnNlbGVjdGVkSW5kZXg9LTEsbi5jb250ZXh0TFZpZXc9bnVsbCxuLmVsZW1lbnREZXB0aENvdW50PTAsbi5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsbi5jdXJyZW50TmFtZXNwYWNlPW51bGwsbi5iaW5kaW5nUm9vdEluZGV4PS0xLG4uYmluZGluZ0luZGV4PS0xLG4uY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBUcygpe3JldHVybiBZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiB0cChuKXtZbi5sRnJhbWUuc2VsZWN0ZWRJbmRleD1ufWZ1bmN0aW9uIHFyKCl7bGV0IG49WW4ubEZyYW1lO3JldHVybiBDRyhuLnRWaWV3LG4uc2VsZWN0ZWRJbmRleCl9ZnVuY3Rpb24gam4oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ic3ZnIn1mdW5jdGlvbiBTYSgpe1luLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPW51bGx9ZnVuY3Rpb24gUEUobix0KXtmb3IobGV0IGU9dC5kaXJlY3RpdmVTdGFydCxpPXQuZGlyZWN0aXZlRW5kO2U8aTtlKyspe2xldCBvPW4uZGF0YVtlXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnMsbmdBZnRlckNvbnRlbnRDaGVja2VkOmEsbmdBZnRlclZpZXdJbml0OmwsbmdBZnRlclZpZXdDaGVja2VkOmMsbmdPbkRlc3Ryb3k6dX09bztzJiYobi5jb250ZW50SG9va3N8fChuLmNvbnRlbnRIb29rcz1bXSkpLnB1c2goLWUscyksYSYmKChuLmNvbnRlbnRIb29rc3x8KG4uY29udGVudEhvb2tzPVtdKSkucHVzaChlLGEpLChuLmNvbnRlbnRDaGVja0hvb2tzfHwobi5jb250ZW50Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxhKSksbCYmKG4udmlld0hvb2tzfHwobi52aWV3SG9va3M9W10pKS5wdXNoKC1lLGwpLGMmJigobi52aWV3SG9va3N8fChuLnZpZXdIb29rcz1bXSkpLnB1c2goZSxjKSwobi52aWV3Q2hlY2tIb29rc3x8KG4udmlld0NoZWNrSG9va3M9W10pKS5wdXNoKGUsYykpLG51bGwhPXUmJihuLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKSkucHVzaChlLHUpfX1mdW5jdGlvbiBxUyhuLHQsZSl7a0cobix0LDMsZSl9ZnVuY3Rpb24gWVMobix0LGUsaSl7KDMmblsyXSk9PT1lJiZrRyhuLHQsZSxpKX1mdW5jdGlvbiBlayhuLHQpe2xldCBlPW5bMl07KDMmZSk9PT10JiYoZSY9MjA0NyxlKz0xLG5bMl09ZSl9ZnVuY3Rpb24ga0cobix0LGUsaSl7bGV0IG89aT8/LTEscz10Lmxlbmd0aC0xLGE9MDtmb3IobGV0IGw9dm9pZCAwIT09aT82NTUzNSZuWzE4XTowO2w8cztsKyspaWYoIm51bWJlciI9PXR5cGVvZiB0W2wrMV0pe2lmKGE9dFtsXSxudWxsIT1pJiZhPj1pKWJyZWFrfWVsc2UgdFtsXTwwJiYoblsxOF0rPTY1NTM2KSwoYTxvfHwtMT09bykmJihycGUobixlLHQsbCksblsxOF09KDQyOTQ5MDE3NjAmblsxOF0pK2wrMiksbCsrfWZ1bmN0aW9uIHJwZShuLHQsZSxpKXtsZXQgcj1lW2ldPDAsbz1lW2krMV0sYT1uW3I/LWVbaV06ZVtpXV07aWYocil7aWYoblsyXT4+MTE8blsxOF0+PjE2JiYoMyZuWzJdKT09PXQpe25bMl0rPTIwNDg7dHJ5e28uY2FsbChhKX1maW5hbGx5e319fWVsc2UgdHJ5e28uY2FsbChhKX1maW5hbGx5e319dmFyIEtoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9ZSx0aGlzLmluamVjdEltcGw9aX19O2Z1bmN0aW9uIHNFKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aDspe2xldCByPWVbaV07aWYoIm51bWJlciI9PXR5cGVvZiByKXtpZigwIT09cilicmVhaztpKys7bGV0IG89ZVtpKytdLHM9ZVtpKytdLGE9ZVtpKytdO24uc2V0QXR0cmlidXRlKHQscyxhLG8pfWVsc2V7bGV0IG89cixzPWVbKytpXTtjcGUobyk/bi5zZXRQcm9wZXJ0eSh0LG8scyk6bi5zZXRBdHRyaWJ1dGUodCxvLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gRkcobil7cmV0dXJuIDM9PT1ufHw0PT09bnx8Nj09PW59ZnVuY3Rpb24gY3BlKG4pe3JldHVybiA2ND09PW4uY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBhRShuLHQpe2lmKG51bGwhPT10JiYwIT09dC5sZW5ndGgpaWYobnVsbD09PW58fDA9PT1uLmxlbmd0aCluPXQuc2xpY2UoKTtlbHNle2xldCBlPS0xO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgcj10W2ldOyJudW1iZXIiPT10eXBlb2Ygcj9lPXI6MD09PWV8fHhqKG4sZSxyLG51bGwsLTE9PT1lfHwyPT09ZT90WysraV06bnVsbCl9fXJldHVybiBufWZ1bmN0aW9uIHhqKG4sdCxlLGkscil7bGV0IG89MCxzPW4ubGVuZ3RoO2lmKC0xPT09dClzPS0xO2Vsc2UgZm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvKytdO2lmKCJudW1iZXIiPT10eXBlb2YgYSl7aWYoYT09PXQpe3M9LTE7YnJlYWt9aWYoYT50KXtzPW8tMTticmVha319fWZvcig7bzxuLmxlbmd0aDspe2xldCBhPW5bb107aWYoIm51bWJlciI9PXR5cGVvZiBhKWJyZWFrO2lmKGE9PT1lKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09ciYmKG5bbysxXT1yKSk7aWYoaT09PW5bbysxXSlyZXR1cm4gdm9pZChuW28rMl09cil9bysrLG51bGwhPT1pJiZvKyssbnVsbCE9PXImJm8rK30tMSE9PXMmJihuLnNwbGljZShzLDAsdCksbz1zKzEpLG4uc3BsaWNlKG8rKywwLGUpLG51bGwhPT1pJiZuLnNwbGljZShvKyssMCxpKSxudWxsIT09ciYmbi5zcGxpY2UobysrLDAscil9ZnVuY3Rpb24gTkcobil7cmV0dXJuLTEhPT1ufWZ1bmN0aW9uIGxFKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIGNFKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVsxNV0sZS0tO3JldHVybiBpfXZhciBFaz0hMDtmdW5jdGlvbiB1RShuKXtsZXQgdD1FaztyZXR1cm4gRWs9bix0fXZhciBwcGU9MCxqYz17fTtmdW5jdGlvbiBjYihuLHQpe2xldCBlPVZHKG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbMV07aS5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9dC5sZW5ndGgsdGsoaS5kYXRhLG4pLHRrKHQsbnVsbCksdGsoaS5ibHVlcHJpbnQsbnVsbCkpO2xldCByPVVGKG4sdCksbz1uLmluamVjdG9ySW5kZXg7aWYoTkcocikpe2xldCBzPWxFKHIpLGE9Y0Uocix0KSxsPWFbMV0uZGF0YTtmb3IobGV0IGM9MDtjPDg7YysrKXRbbytjXT1hW3MrY118bFtzK2NdfXJldHVybiB0W28rOF09cixvfWZ1bmN0aW9uIHRrKG4sdCl7bi5wdXNoKDAsMCwwLDAsMCwwLDAsMCx0KX1mdW5jdGlvbiBWRyhuLHQpe3JldHVybi0xPT09bi5pbmplY3RvckluZGV4fHxuLnBhcmVudCYmbi5wYXJlbnQuaW5qZWN0b3JJbmRleD09PW4uaW5qZWN0b3JJbmRleHx8bnVsbD09PXRbbi5pbmplY3RvckluZGV4KzhdPy0xOm4uaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBVRihuLHQpe2lmKG4ucGFyZW50JiYtMSE9PW4ucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIG4ucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGU9MCxpPW51bGwscj10O2Zvcig7bnVsbCE9PXI7KXtpZihpPUdHKHIpLG51bGw9PT1pKXJldHVybi0xO2lmKGUrKyxyPXJbMTVdLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuLTF9ZnVuY3Rpb24gZEUobix0LGUpeyFmdW5jdGlvbihuLHQsZSl7bGV0IGk7InN0cmluZyI9PXR5cGVvZiBlP2k9ZS5jaGFyQ29kZUF0KDApfHwwOmUuaGFzT3duUHJvcGVydHkoWnkpJiYoaT1lW1p5XSksbnVsbD09aSYmKGk9ZVtaeV09cHBlKyspO2xldCByPTI1NSZpO3QuZGF0YVtuKyhyPj41KV18PTE8PHJ9KG4sdCxlKX1mdW5jdGlvbiBIRyhuLHQsZSl7aWYoZSZpaS5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtTRigpfWZ1bmN0aW9uIFVHKG4sdCxlLGkpe2lmKGUmaWkuT3B0aW9uYWwmJnZvaWQgMD09PWkmJihpPW51bGwpLDA9PShlJihpaS5TZWxmfGlpLkhvc3QpKSl7bGV0IHI9bls5XSxvPWlsKHZvaWQgMCk7dHJ5e3JldHVybiByP3IuZ2V0KHQsaSxlJmlpLk9wdGlvbmFsKTpkRyh0LGksZSZpaS5PcHRpb25hbCl9ZmluYWxseXtpbChvKX19cmV0dXJuIEhHKGksMCxlKX1mdW5jdGlvbiB6RyhuLHQsZSxpPWlpLkRlZmF1bHQscil7aWYobnVsbCE9PW4pe2lmKDEwMjQmdFsyXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzWzJdJiYhKDI1NiZzWzJdKTspe2xldCBhPWpHKG8scyxlLGl8aWkuU2VsZixqYyk7aWYoYSE9PWpjKXJldHVybiBhO2xldCBsPW8ucGFyZW50O2lmKCFsKXtsZXQgYz1zWzIxXTtpZihjKXtsZXQgdT1jLmdldChlLGpjLGkpO2lmKHUhPT1qYylyZXR1cm4gdX1sPUdHKHMpLHM9c1sxNV19bz1sfXJldHVybiByfShuLHQsZSxpLGpjKTtpZihzIT09amMpcmV0dXJuIHN9bGV0IG89akcobix0LGUsaSxqYyk7aWYobyE9PWpjKXJldHVybiBvfXJldHVybiBVRyh0LGUsaSxyKX1mdW5jdGlvbiBqRyhuLHQsZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi5jaGFyQ29kZUF0KDApfHwwO2xldCB0PW4uaGFzT3duUHJvcGVydHkoWnkpP25bWnldOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dD49MD8yNTUmdDpfcGU6dH0oZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKCFBRyh0LG4saSkpcmV0dXJuIGkmaWkuSG9zdD9IRyhyLDAsaSk6VUcodCxlLGkscik7dHJ5e2xldCBzPW8oaSk7aWYobnVsbCE9c3x8aSZpaS5PcHRpb25hbClyZXR1cm4gcztTRigpfWZpbmFsbHl7T0coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pe2xldCBzPW51bGwsYT1WRyhuLHQpLGw9LTEsYz1pJmlpLkhvc3Q/dFsxNl1bNl06bnVsbDtmb3IoKC0xPT09YXx8aSZpaS5Ta2lwU2VsZikmJihsPS0xPT09YT9VRihuLHQpOnRbYSs4XSwtMSE9PWwmJndqKGksITEpPyhzPXRbMV0sYT1sRShsKSx0PWNFKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCB1PXRbMV07aWYoQ2oobyxhLHUuZGF0YSkpe2xldCBkPW1wZShhLHQsZSxzLGksYyk7aWYoZCE9PWpjKXJldHVybiBkfWw9dFthKzhdLC0xIT09bCYmd2ooaSx0WzFdLmRhdGFbYSs4XT09PWMpJiZDaihvLGEsdCk/KHM9dSxhPWxFKGwpLHQ9Y0UobCx0KSk6YT0tMX19cmV0dXJuIHJ9ZnVuY3Rpb24gbXBlKG4sdCxlLGkscixvKXtsZXQgcz10WzFdLGE9cy5kYXRhW24rOF0sdT1YUyhhLHMsZSxudWxsPT1pP1JGKGEpJiZFazppIT1zJiYwIT0oMyZhLnR5cGUpLHImaWkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09dT9DYih0LHMsdSxhKTpqY31mdW5jdGlvbiBYUyhuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCx1PW8+PjIwLHA9cj9hK3U6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBoPWk/YTphK3U7aDxwO2grKyl7bGV0IGY9c1toXTtpZihoPGwmJmU9PT1mfHxoPj1sJiZmLnR5cGU9PT1lKXJldHVybiBofWlmKHIpe2xldCBoPXNbbF07aWYoaCYmUWwoaCkmJmgudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQ2Iobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEtofShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShNRihvW2VdKSk7bGV0IGE9dUUocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/aWwocy5pbmplY3RJbXBsKTpudWxsO0FHKG4saSxpaS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1fRyh0KTsoZS5wcmVPcmRlckhvb2tzfHwoZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rc3x8KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3N8fChlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rc3x8KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3N8fChlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZpbChsKSx1RShhKSxzLnJlc29sdmluZz0hMSxPRygpfX1yZXR1cm4gcn1mdW5jdGlvbiBDaihuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj41KV0mMTw8bil9ZnVuY3Rpb24gd2oobix0KXtyZXR1cm4hKG4maWkuU2VsZnx8biZpaS5Ib3N0JiZ0KX12YXIgWWg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSxpKXtyZXR1cm4gekcodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCxpLGUpfX07ZnVuY3Rpb24gX3BlKCl7cmV0dXJuIG5ldyBZaChNbygpLFplKCkpfWZ1bmN0aW9uIGhpKG4pe3JldHVybiB0ZigoKT0+e2xldCB0PW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGU9dFtRdV18fFRrKHQpLGk9T2JqZWN0LnByb3RvdHlwZSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtyJiZyIT09aTspe2xldCBvPXJbUXVdfHxUayhyKTtpZihvJiZvIT09ZSlyZXR1cm4gbztyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbz0+bmV3IG99KX1mdW5jdGlvbiBUayhuKXtyZXR1cm4gbEcobik/KCk9PntsZXQgdD1UayhxaShuKSk7cmV0dXJuIHQmJnQoKX06UWgobil9ZnVuY3Rpb24gR0cobil7bGV0IHQ9blsxXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bls2XTpudWxsfWZ1bmN0aW9uIEtvKG4pe3JldHVybiBmdW5jdGlvbihuLHQpe2lmKCJjbGFzcyI9PT10KXJldHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2xldCBlPW4uYXR0cnM7aWYoZSl7bGV0IGk9ZS5sZW5ndGgscj0wO2Zvcig7cjxpOyl7bGV0IG89ZVtyXTtpZihGRyhvKSlicmVhaztpZigwPT09bylyKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKWZvcihyKys7cjxpJiYic3RyaW5nIj09dHlwZW9mIGVbcl07KXIrKztlbHNle2lmKG89PT10KXJldHVybiBlW3IrMV07cis9Mn19fXJldHVybiBudWxsfShNbygpLG4pfXZhciB3Zz0iX19hbm5vdGF0aW9uc19fIixNZz0iX19wYXJhbWV0ZXJzX18iLFNnPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIHdiKG4sdCxlLGkscil7cmV0dXJuIHRmKCgpPT57bGV0IG89ekYodCk7ZnVuY3Rpb24gcyguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgcylyZXR1cm4gby5jYWxsKHRoaXMsLi4uYSksdGhpcztsZXQgbD1uZXcgcyguLi5hKTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHImJnIodSwuLi5hKSwodS5oYXNPd25Qcm9wZXJ0eSh3Zyk/dVt3Z106T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsd2cse3ZhbHVlOltdfSlbd2ddKS5wdXNoKGwpLGkmJmkodSksdX19cmV0dXJuIGUmJihzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSkscy5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixzLmFubm90YXRpb25DbHM9cyxzfSl9ZnVuY3Rpb24gekYobil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2lmKG4pe2xldCBpPW4oLi4uZSk7Zm9yKGxldCByIGluIGkpdGhpc1tyXT1pW3JdfX19ZnVuY3Rpb24gemcobix0LGUpe3JldHVybiB0ZigoKT0+e2xldCBpPXpGKHQpO2Z1bmN0aW9uIHIoLi4ubyl7aWYodGhpcyBpbnN0YW5jZW9mIHIpcmV0dXJuIGkuYXBwbHkodGhpcyxvKSx0aGlzO2xldCBzPW5ldyByKC4uLm8pO3JldHVybiBhLmFubm90YXRpb249cyxhO2Z1bmN0aW9uIGEobCxjLHUpe2xldCBkPWwuaGFzT3duUHJvcGVydHkoTWcpP2xbTWddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLE1nLHt2YWx1ZTpbXX0pW01nXTtmb3IoO2QubGVuZ3RoPD11OylkLnB1c2gobnVsbCk7cmV0dXJuKGRbdV09ZFt1XXx8W10pLnB1c2gocyksbH19cmV0dXJuIGUmJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixyLmFubm90YXRpb25DbHM9cixyfSl9ZnVuY3Rpb24gc3Aobix0LGUsaSl7cmV0dXJuIHRmKCgpPT57bGV0IHI9ekYodCk7ZnVuY3Rpb24gbyguLi5zKXtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLHMpLHRoaXM7bGV0IGE9bmV3IG8oLi4ucyk7cmV0dXJuIGZ1bmN0aW9uKGMsdSl7bGV0IGQ9Yy5jb25zdHJ1Y3RvcixwPWQuaGFzT3duUHJvcGVydHkoU2cpP2RbU2ddOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFNnLHt2YWx1ZTp7fX0pW1NnXTtwW3VdPXAuaGFzT3duUHJvcGVydHkodSkmJnBbdV18fFtdLHBbdV0udW5zaGlmdChhKSxpJiZpKGMsdSwuLi5zKX19cmV0dXJuIGUmJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixvLmFubm90YXRpb25DbHM9byxvfSl9dmFyIHlwZT16ZygiQXR0cmlidXRlIixuPT4oe2F0dHJpYnV0ZU5hbWU6bixfX05HX0VMRU1FTlRfSURfXzooKT0+S28obil9KSksc2U9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX19OR19FTEVNRU5UX0lEX189ZTp2b2lkIDAhPT1lJiYodGhpcy5cdTAyNzVwcm92PWdlKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fSxSZz0obmV3IHNlKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiksY2xhc3N7fSk7ZnVuY3Rpb24gc2wobil7bGV0IHQ9V3Iubmc7aWYodCYmdC5cdTAyNzVjb21waWxlckZhY2FkZSlyZXR1cm4gdC5cdTAyNzVjb21waWxlckZhY2FkZTt0aHJvdyBuZXcgRXJyb3IoIkpJVCBjb21waWxlciB1bmF2YWlsYWJsZSIpfXNwKCJDb250ZW50Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLFJnKSxzcCgiQ29udGVudENoaWxkIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxSZyksc3AoIlZpZXdDaGlsZHJlbiIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMCwuLi50fSksUmcpLHNwKCJWaWV3Q2hpbGQiLChuLHQpPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsLi4udH0pLFJnKTt2YXIgYnBlPUZ1bmN0aW9uO2Z1bmN0aW9uIFh5KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIFh1KG4sdCl7dm9pZCAwPT09dCYmKHQ9bik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07QXJyYXkuaXNBcnJheShpKT8odD09PW4mJih0PW4uc2xpY2UoMCxlKSksWHUoaSx0KSk6dCE9PW4mJnQucHVzaChpKX1yZXR1cm4gdH1mdW5jdGlvbiB1YihuLHQpe24uZm9yRWFjaChlPT5BcnJheS5pc0FycmF5KGUpP3ViKGUsdCk6dChlKSl9ZnVuY3Rpb24gcUcobix0LGUpe3Q+PW4ubGVuZ3RoP24ucHVzaChlKTpuLnNwbGljZSh0LDAsZSl9ZnVuY3Rpb24gcEUobix0KXtyZXR1cm4gdD49bi5sZW5ndGgtMT9uLnBvcCgpOm4uc3BsaWNlKHQsMSlbMF19ZnVuY3Rpb24gSnkobix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBFYShuLHQsZSl7bGV0IGk9TWIobix0KTtyZXR1cm4gaT49MD9uWzF8aV09ZTooaT1+aSxmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmxlbmd0aDtpZihyPT10KW4ucHVzaChlLGkpO2Vsc2UgaWYoMT09PXIpbi5wdXNoKGksblswXSksblswXT1lO2Vsc2V7Zm9yKHItLSxuLnB1c2gobltyLTFdLG5bcl0pO3I+dDspbltyXT1uW3ItMl0sci0tO25bdF09ZSxuW3QrMV09aX19KG4saSx0LGUpKSxpfWZ1bmN0aW9uIG5rKG4sdCl7bGV0IGU9TWIobix0KTtpZihlPj0wKXJldHVybiBuWzF8ZV19ZnVuY3Rpb24gTWIobix0KXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPTAscj1uLmxlbmd0aD4+MTtmb3IoO3IhPT1pOyl7bGV0IG89aSsoci1pPj4xKSxzPW5bbzw8MV07aWYodD09PXMpcmV0dXJuIG88PDE7cz50P3I9bzppPW8rMX1yZXR1cm5+KHI8PDEpfShuLHQpfXZhciBNcGU9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpLiopXCkvLFNwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLEVwZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sVHBlPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoXClccyp7W159XSpzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2Z1bmN0aW9uIGlrKG4pe3JldHVybiBuP24ubWFwKHQ9Pm5ldygwLHQudHlwZS5hbm5vdGF0aW9uQ2xzKSguLi50LmFyZ3M/dC5hcmdzOltdKSk6W119ZnVuY3Rpb24gSFMobil7bGV0IHQ9bi5wcm90b3R5cGU/T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKTpudWxsO3JldHVybih0P3QuY29uc3RydWN0b3I6bnVsbCl8fE9iamVjdH12YXIgJHksZGI9e30sQWs9Il9fTkdfRElfRkxBR19fIixoRT0ibmdUZW1wVG9rZW5QYXRoIixQcGU9L1xuL2dtLE1qPSJfX3NvdXJjZSI7ZnVuY3Rpb24geGcobil7bGV0IHQ9JHk7cmV0dXJuICR5PW4sdH1mdW5jdGlvbiBPcGUobix0PWlpLkRlZmF1bHQpe2lmKHZvaWQgMD09PSR5KXRocm93IG5ldyBNdCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PSR5P2RHKG4sdm9pZCAwLHQpOiR5LmdldChuLHQmaWkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gUihuLHQ9aWkuRGVmYXVsdCl7cmV0dXJuKENrfHxPcGUpKHFpKG4pLHQpfWZ1bmN0aW9uIFlHKG4pe3Rocm93IG5ldyBNdCgyMDIsITEpfWZ1bmN0aW9uIFNvKG4sdD1paS5EZWZhdWx0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQmJih0PTB8KHQub3B0aW9uYWwmJjgpfCh0Lmhvc3QmJjEpfCh0LnNlbGYmJjIpfCh0LnNraXBTZWxmJiY0KSksUihuLHQpfWZ1bmN0aW9uIElrKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1xaShuW2VdKTtpZihBcnJheS5pc0FycmF5KGkpKXtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDkwMCwhMSk7bGV0IHIsbz1paS5EZWZhdWx0O2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgYT1pW3NdLGw9a3BlKGEpOyJudW1iZXIiPT10eXBlb2YgbD8tMT09PWw/cj1hLnRva2VuOm98PWw6cj1hfXQucHVzaChSKHIsbykpfWVsc2UgdC5wdXNoKFIoaSkpfXJldHVybiB0fWZ1bmN0aW9uIFNiKG4sdCl7cmV0dXJuIG5bQWtdPXQsbi5wcm90b3R5cGVbQWtdPXQsbn1mdW5jdGlvbiBrcGUobil7cmV0dXJuIG5bQWtdfXZhciBqZz1TYih6ZygiSW5qZWN0IixuPT4oe3Rva2VuOm59KSksLTEpLE9vPVNiKHpnKCJPcHRpb25hbCIpLDgpLGpGPVNiKHpnKCJTZWxmIiksMiksVGE9U2IoemcoIlNraXBTZWxmIiksNCksTHBlPVNiKHpnKCJIb3N0IiksMSksU2o9bnVsbDtmdW5jdGlvbiBHRigpe3JldHVybiBTaj1Tanx8bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8V3IuUmVmbGVjdH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgaTtpPUp5KHR5cGVvZiB0PiJ1Ij9lLmxlbmd0aDp0Lmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT10eXBlb2YgdD4idSI/W106dFtyXSYmdFtyXSE9T2JqZWN0P1t0W3JdXTpbXSxlJiZudWxsIT1lW3JdJiYoaVtyXT1pW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJuIGl9X293blBhcmFtZXRlcnModCxlKXtsZXQgaT10LnRvU3RyaW5nKCk7aWYoTXBlLnRlc3Qobj1pKXx8VHBlLnRlc3Qobil8fFNwZS50ZXN0KG4pJiYhRXBlLnRlc3QobikpcmV0dXJuIG51bGw7dmFyIG47aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztsZXQgcj10LmN0b3JQYXJhbWV0ZXJzO2lmKHImJnIhPT1lLmN0b3JQYXJhbWV0ZXJzKXtsZXQgYT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixsPWEubWFwKHU9PnUmJnUudHlwZSksYz1hLm1hcCh1PT51JiZpayh1LmRlY29yYXRvcnMpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhsLGMpfWxldCBvPXQuaGFzT3duUHJvcGVydHkoTWcpJiZ0W01nXSxzPXRoaXMuX3JlZmxlY3QmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJhbXR5cGVzIix0KTtyZXR1cm4gc3x8bz90aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKHMsbyk6SnkodC5sZW5ndGgpfXBhcmFtZXRlcnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duUGFyYW1ldGVycyh0LGUpO3JldHVybiFpJiZlIT09T2JqZWN0JiYoaT10aGlzLnBhcmFtZXRlcnMoZSkpLGl8fFtdfV9vd25Bbm5vdGF0aW9ucyh0LGUpe2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXtsZXQgaT10LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLmFubm90YXRpb25zJiYoaT1pLmFubm90YXRpb25zKSxpfXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUuZGVjb3JhdG9ycz9payh0LmRlY29yYXRvcnMpOnQuaGFzT3duUHJvcGVydHkod2cpP3Rbd2ddOm51bGx9YW5ub3RhdGlvbnModCl7aWYoIVh5KHQpKXJldHVybltdO2xldCBlPUhTKHQpLGk9dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KGkpfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGk9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkucHJvcE1ldGFkYXRhJiYoaT1pLnByb3BNZXRhZGF0YSksaX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7bGV0IGk9dC5wcm9wRGVjb3JhdG9ycyxyPXt9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntyW29dPWlrKGlbb10pfSkscn1yZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShTZyk/dFtTZ106bnVsbH1wcm9wTWV0YWRhdGEodCl7aWYoIVh5KHQpKXJldHVybnt9O2xldCBlPUhTKHQpLGk9e307aWYoZSE9PU9iamVjdCl7bGV0IG89dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMobykuZm9yRWFjaChzPT57aVtzXT1vW3NdfSl9bGV0IHI9dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2gobz0+e2xldCBzPVtdO2kuaGFzT3duUHJvcGVydHkobykmJnMucHVzaCguLi5pW29dKSxzLnB1c2goLi4ucltvXSksaVtvXT1zfSksaX1vd25Qcm9wTWV0YWRhdGEodCl7cmV0dXJuIFh5KHQpJiZ0aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxIUyh0KSl8fHt9fWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJwZSYmZSBpbiB0LnByb3RvdHlwZX19fWZ1bmN0aW9uIFJFKG4pe3JldHVybiBYRyhHRigpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIFhHKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIE9vfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIFRhfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpGfHwiU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2VsZj0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBMcGV8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpdC5ob3N0PSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGpnKXQudG9rZW49aS50b2tlbjtlbHNlIGlmKGkgaW5zdGFuY2VvZiB5cGUpe2lmKHZvaWQgMD09PWkuYXR0cmlidXRlTmFtZSl0aHJvdyBuZXcgTXQoMjA0LCExKTt0LmF0dHJpYnV0ZT1pLmF0dHJpYnV0ZU5hbWV9ZWxzZSB0LnRva2VuPWl9ZWxzZSB0LnRva2VuPXZvaWQgMD09PW58fEFycmF5LmlzQXJyYXkobikmJjA9PT1uLmxlbmd0aD9udWxsOm47cmV0dXJuIHR9KHQpKX12YXIgcGI9bmV3IE1hcCxRRz1uZXcgU2V0O2Z1bmN0aW9uIEtHKG4pe3JldHVybiEhKG4udGVtcGxhdGVVcmwmJiFuLmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHxuLnN0eWxlVXJscyYmbi5zdHlsZVVybHMubGVuZ3RoKX12YXIgUGssVVMselMsRWo9bmV3IE1hcDtmdW5jdGlvbiBaRyhuLHQpeyhmdW5jdGlvbihuLHQsZSl7aWYodCYmdCE9PWUpdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIHJlZ2lzdGVyZWQgZm9yICR7bn0gLSAke2NvKHQpfSB2cyAke2NvKHQubmFtZSl9YCl9KSh0LEVqLmdldCh0KXx8bnVsbCxuKSxFai5zZXQodCxuKX1mdW5jdGlvbiAkRygpe3JldHVybiB2b2lkIDAhPT1Qaz9Qazp0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMH1mdW5jdGlvbiBlNigpe2lmKHZvaWQgMD09PVVTJiYoVVM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXtVUz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBVU31mdW5jdGlvbiBPZyhuKXtyZXR1cm4gZTYoKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBXRigpe2lmKHZvaWQgMD09PXpTJiYoelM9bnVsbCxXci50cnVzdGVkVHlwZXMpKXRyeXt6Uz1Xci50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIHpTfWZ1bmN0aW9uIFRqKG4pe3JldHVybiBXRigpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIERqKG4pe3JldHVybiBXRigpPy5jcmVhdGVTY3JpcHQobil8fG59ZnVuY3Rpb24gQWoobil7cmV0dXJuIFdGKCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn12YXIgWnU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgfX0sUms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJIVE1MIn19LE9rPWNsYXNzIGV4dGVuZHMgWnV7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX0sa2s9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJTY3JpcHQifX0sRms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJVUkwifX0sTms9Y2xhc3MgZXh0ZW5kcyBadXtnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fTtmdW5jdGlvbiAkcyhuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFp1P24uY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpufWZ1bmN0aW9uIFpsKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBadSYmbi5nZXRUeXBlTmFtZSgpfHxudWxsfShuKTtpZihudWxsIT1lJiZlIT09dCl7aWYoIlJlc291cmNlVVJMIj09PWUmJiJVUkwiPT09dClyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke3R9LCBnb3QgYSAke2V9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gczYobil7bGV0IHQ9bmV3IEJrKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE9nKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBMayh0KTp0fXZhciBMaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhPZyh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSxCaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksbnVsbD09dGhpcy5pbmVydERvY3VtZW50LmJvZHkpe2xldCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7ZS5hcHBlbmRDaGlsZChpKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtpZigiY29udGVudCJpbiBlKXJldHVybiBlLmlubmVySFRNTD1PZyh0KSxlO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7cmV0dXJuIGkuaW5uZXJIVE1MPU9nKHQpLHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGl9c3RyaXBDdXN0b21Oc0F0dHJzKHQpe2xldCBlPXQuYXR0cmlidXRlcztmb3IobGV0IHI9ZS5sZW5ndGgtMTswPHI7ci0tKXtsZXQgcz1lLml0ZW0ocikubmFtZTsoInhtbG5zOm5zMSI9PT1zfHwwPT09cy5pbmRleE9mKCJuczE6IikpJiZ0LnJlbW92ZUF0dHJpYnV0ZShzKX1sZXQgaT10LmZpcnN0Q2hpbGQ7Zm9yKDtpOylpLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGk9aS5uZXh0U2libGluZ319LEtwZT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZGF0YXxmdHB8dGVsfGZpbGV8c21zKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO2Z1bmN0aW9uIEViKG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goS3BlKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIHRkKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuLnNwbGl0KCIsIikpdFtlXT0hMDtyZXR1cm4gdH1mdW5jdGlvbiBUYiguLi5uKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT0hMCk7cmV0dXJuIHR9dmFyIGpTLGE2PXRkKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksbDY9dGQoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxjNj10ZCgicnAscnQiKSxacGU9VGIoYzYsbDYpLEpwZT1UYihsNix0ZCgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksJHBlPVRiKGM2LHRkKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksVms9VGIoYTYsSnBlLCRwZSxacGUpLHFGPXRkKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxlaGU9dGQoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLHRoZT10ZCgiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSx1Nj1UYihxRixlaGUsdGhlKSxuaGU9dGQoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpLGloZT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2cscmhlPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBJaihuKXtyZXR1cm4gbi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShpaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShyaGUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gWUYobix0KXtsZXQgZT1udWxsO3RyeXtqUz1qU3x8czYobik7bGV0IGk9dD9TdHJpbmcodCk6IiI7ZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpO2xldCByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89ZS5pbm5lckhUTUwsZT1qUy5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTtsZXQgYT0obmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsaT0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9pPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxpJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgcj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHIpe2U9cjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighVmsuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFuaGUuaGFzT3duUHJvcGVydHkoZSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7bGV0IGk9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pLml0ZW0ocikscz1vLm5hbWUsYT1zLnRvTG93ZXJDYXNlKCk7aWYoIXU2Lmhhc093blByb3BlcnR5KGEpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgbD1vLnZhbHVlO3FGW2FdJiYobD1FYihsKSksdGhpcy5idWYucHVzaCgiICIscywnPSInLElqKGwpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtWay5oYXNPd25Qcm9wZXJ0eShlKSYmIWE2Lmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChJaih0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19KS5zYW5pdGl6ZUNoaWxkcmVuKFVrKGUpfHxlKTtyZXR1cm4gT2coYSl9ZmluYWxseXtpZihlKXtsZXQgaT1VayhlKXx8ZTtmb3IoO2kuZmlyc3RDaGlsZDspaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpfX19ZnVuY3Rpb24gVWsobil7cmV0dXJuImNvbnRlbnQiaW4gbiYmZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PW4ubm9kZU5hbWV9KG4pP24uY29udGVudDpudWxsfXZhciBKcj0oKCk9PntyZXR1cm4obj1Kcnx8KEpyPXt9KSlbbi5OT05FPTBdPSJOT05FIixuW24uSFRNTD0xXT0iSFRNTCIsbltuLlNUWUxFPTJdPSJTVFlMRSIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uVVJMPTRdPSJVUkwiLG5bbi5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsSnI7dmFyIG59KSgpO2Z1bmN0aW9uIFhGKG4pe2xldCB0PURiKCk7cmV0dXJuIHQ/VGoodC5zYW5pdGl6ZShKci5IVE1MLG4pfHwiIik6WmwobiwiSFRNTCIpP1RqKCRzKG4pKTpZRigkRygpLHFuKG4pKX1mdW5jdGlvbiBkbChuKXtsZXQgdD1EYigpO3JldHVybiB0P3Quc2FuaXRpemUoSnIuVVJMLG4pfHwiIjpabChuLCJVUkwiKT8kcyhuKTpFYihxbihuKSl9ZnVuY3Rpb24gZDYobil7bGV0IHQ9RGIoKTtpZih0KXJldHVybiBBaih0LnNhbml0aXplKEpyLlJFU09VUkNFX1VSTCxuKXx8IiIpO2lmKFpsKG4sIlJlc291cmNlVVJMIikpcmV0dXJuIEFqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA0LCExKX1mdW5jdGlvbiBEYigpe2xldCBuPVplKCk7cmV0dXJuIG4mJm5bMTJdfXZhciBPRT1uZXcgc2UoIkVOVklST05NRU5UX0lOSVRJQUxJWkVSIikscDY9bmV3IHNlKCJJTkpFQ1RPUiIsLTEpLGg2PW5ldyBzZSgiSU5KRUNUT1JfREVGX1RZUEVTIiksZkU9Y2xhc3N7Z2V0KHQsZT1kYil7aWYoZT09PWRiKXtsZXQgaT1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtjbyh0KX0hYCk7dGhyb3cgaS5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsaX1yZXR1cm4gZX19O2Z1bmN0aW9uIHBoZSguLi5uKXtyZXR1cm57Ilx1MDI3NXByb3ZpZGVycyI6ZjYoMCxuKX19ZnVuY3Rpb24gZjYobiwuLi50KXtsZXQgcixlPVtdLGk9bmV3IFNldDtyZXR1cm4gdWIodCxvPT57bGV0IHM9bzt6ayhzLGUsW10saSkmJihyfHwocj1bXSksci5wdXNoKHMpKX0pLHZvaWQgMCE9PXImJm02KHIsZSksZX1mdW5jdGlvbiBtNihuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXR7cHJvdmlkZXJzOnJ9PW5bZV07dWIocixvPT57dC5wdXNoKG8pfSl9fWZ1bmN0aW9uIHprKG4sdCxlLGkpe2lmKCEobj1xaShuKSkpcmV0dXJuITE7bGV0IHI9bnVsbCxvPWdqKG4pLHM9IW8mJm9sKG4pO2lmKG98fHMpe2lmKHMmJiFzLnN0YW5kYWxvbmUpcmV0dXJuITE7cj1ufWVsc2V7bGV0IGw9bi5uZ01vZHVsZTtpZihvPWdqKGwpLCFvKXJldHVybiExO3I9bH1sZXQgYT1pLmhhcyhyKTtpZihzKXtpZihhKXJldHVybiExO2lmKGkuYWRkKHIpLHMuZGVwZW5kZW5jaWVzKXtsZXQgbD0iZnVuY3Rpb24iPT10eXBlb2Ygcy5kZXBlbmRlbmNpZXM/cy5kZXBlbmRlbmNpZXMoKTpzLmRlcGVuZGVuY2llcztmb3IobGV0IGMgb2YgbCl6ayhjLHQsZSxpKX19ZWxzZXtpZighbylyZXR1cm4hMTt7aWYobnVsbCE9by5pbXBvcnRzJiYhYSl7bGV0IGM7aS5hZGQocik7dHJ5e3ViKG8uaW1wb3J0cyx1PT57emsodSx0LGUsaSkmJihjfHwoYz1bXSksYy5wdXNoKHUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PWMmJm02KGMsdCl9aWYoIWEpe2xldCBjPVFoKHIpfHwoKCk9Pm5ldyByKTt0LnB1c2goe3Byb3ZpZGU6cix1c2VGYWN0b3J5OmMsZGVwczpXaX0se3Byb3ZpZGU6aDYsdXNlVmFsdWU6cixtdWx0aTohMH0se3Byb3ZpZGU6T0UsdXNlVmFsdWU6KCk9PlIociksbXVsdGk6ITB9KX1sZXQgbD1vLnByb3ZpZGVycztudWxsPT1sfHxhfHx1YihsLHU9Pnt0LnB1c2godSl9KX19cmV0dXJuIHIhPT1uJiZ2b2lkIDAhPT1uLnByb3ZpZGVyc312YXIgaGhlPWFyKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTphcn0pO2Z1bmN0aW9uIGc2KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZoaGUgaW4gbn1mdW5jdGlvbiBrZyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgcmssa0U9bmV3IHNlKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksUVM9e30sX2hlPXt9O2Z1bmN0aW9uIFFGKCl7cmV0dXJuIHZvaWQgMD09PXJrJiYocms9bmV3IGZFKSxya312YXIgbnA9Y2xhc3N7fSxtRT1jbGFzcyBleHRlbmRzIG5we2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxHayh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KHA2LEVnKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQobnAsRWcodm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KGtFKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChoNi5tdWx0aSxXaSxpaS5TZWxmKSl9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9eGcodGhpcyksaT1pbCh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7eGcoZSksaWwoaSl9fWdldCh0LGU9ZGIsaT1paS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2xldCByPXhnKHRoaXMpLG89aWwodm9pZCAwKTt0cnl7aWYoIShpJmlpLlNraXBTZWxmKSl7bGV0IGE9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1hKXtsZXQgbD0oImZ1bmN0aW9uIj09dHlwZW9mKG49dCl8fCJvYmplY3QiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIHNlKSYmRUYodCk7YT1sJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKGwpP0VnKGprKHQpLFFTKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQodCxhKX1pZihudWxsIT1hKXJldHVybiB0aGlzLmh5ZHJhdGUodCxhKX1yZXR1cm4oaSZpaS5TZWxmP1FGKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9aSZpaS5PcHRpb25hbCYmZT09PWRiP251bGw6ZSl9Y2F0Y2gocyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PXMubmFtZSl7aWYoKHNbaEVdPXNbaEVdfHxbXSkudW5zaGlmdChjbyh0KSkscil0aHJvdyBzO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW2hFXTt0aHJvdyB0W01qXSYmci51bnNoaWZ0KHRbTWpdKSxuLm1lc3NhZ2U9ZnVuY3Rpb24obix0LGUsaT1udWxsKXtuPW4mJiJcbiI9PT1uLmNoYXJBdCgwKSYmIlx1MDI3NSI9PW4uY2hhckF0KDEpP24uc2xpY2UoMik6bjtsZXQgcj1jbyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAoY28pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpjbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZShQcGUsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksbi5uZ1Rva2VuUGF0aD1yLG5baEVdPW51bGwsbn0ocyx0LCJSM0luamVjdG9yRXJyb3IiLHRoaXMuc291cmNlKX10aHJvdyBzfWZpbmFsbHl7aWwobykseGcocil9dmFyIG59cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7bGV0IHQ9eGcodGhpcyksZT1pbCh2b2lkIDApO3RyeXtsZXQgaT10aGlzLmdldChPRS5tdWx0aSxXaSxpaS5TZWxmKTtmb3IobGV0IHIgb2YgaSlyKCl9ZmluYWxseXt4Zyh0KSxpbChlKX19dG9TdHJpbmcoKXtsZXQgdD1bXSxlPXRoaXMucmVjb3Jkcztmb3IobGV0IGkgb2YgZS5rZXlzKCkpdC5wdXNoKGNvKGkpKTtyZXR1cm5gUjNJbmplY3Rvclske3Quam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IE10KDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKHQpe2xldCBlPWtnKHQ9cWkodCkpP3Q6cWkodCYmdC5wcm92aWRlKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBnNihuKT9FZyh2b2lkIDAsbi51c2VWYWx1ZSk6RWcoXzYobiksUVMpfSh0KTtpZihrZyh0KXx8ITAhPT10Lm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoZSk7ZWxzZXtsZXQgcj10aGlzLnJlY29yZHMuZ2V0KGUpO3J8fChyPUVnKHZvaWQgMCxRUywhMCksci5mYWN0b3J5PSgpPT5JayhyLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGUscikpLGU9dCxyLm11bHRpLnB1c2godCl9dGhpcy5yZWNvcmRzLnNldChlLGkpfWh5ZHJhdGUodCxlKXtyZXR1cm4gZS52YWx1ZT09PVFTJiYoZS52YWx1ZT1faGUsZS52YWx1ZT1lLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBlLnZhbHVlJiZlLnZhbHVlJiZudWxsIT09KG49ZS52YWx1ZSkmJiJvYmplY3QiPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3kmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGUudmFsdWUpLGUudmFsdWU7dmFyIG59aW5qZWN0YWJsZURlZkluU2NvcGUodCl7aWYoIXQucHJvdmlkZWRJbilyZXR1cm4hMTtsZXQgZT1xaSh0LnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iYW55Ij09PWV8fHRoaXMuc2NvcGVzLmhhcyhlKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGUpfX07ZnVuY3Rpb24gamsobil7bGV0IHQ9RUYobiksZT1udWxsIT09dD90LmZhY3Rvcnk6UWgobik7aWYobnVsbCE9PWUpcmV0dXJuIGU7aWYobiBpbnN0YW5jZW9mIHNlKXRocm93IG5ldyBNdCgyMDQsITEpO2lmKG4gaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7aWYodD4wKXRocm93IEp5KHQsIj8iKSxuZXcgTXQoMjA0LCExKTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uJiYoblt0RV18fG5bdUddKTtpZih0KXtsZXQgZT1mdW5jdGlvbihuKXtpZihuLmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIG4ubmFtZTtsZXQgdD0oIiIrbikubWF0Y2goL15mdW5jdGlvblxzKihbXlxzKF0rKS8pO3JldHVybiBudWxsPT09dD8iIjp0WzFdfShuKTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7ZX0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7ZX0iIGNsYXNzLmApLHR9cmV0dXJuIG51bGx9KG4pO3JldHVybiBudWxsIT09ZT8oKT0+ZS5mYWN0b3J5KG4pOigpPT5uZXcgbn0obik7dGhyb3cgbmV3IE10KDIwNCwhMSl9ZnVuY3Rpb24gXzYobix0LGUpe2xldCBpO2lmKGtnKG4pKXtsZXQgcj1xaShuKTtyZXR1cm4gUWgocil8fGprKHIpfWlmKGc2KG4pKWk9KCk9PnFpKG4udXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24obil7cmV0dXJuISghbnx8IW4udXNlRmFjdG9yeSl9KG4pKWk9KCk9Pm4udXNlRmFjdG9yeSguLi5JayhuLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VFeGlzdGluZyl9KG4pKWk9KCk9PlIocWkobi51c2VFeGlzdGluZykpO2Vsc2V7bGV0IHI9cWkobiYmKG4udXNlQ2xhc3N8fG4ucHJvdmlkZSkpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hIW4uZGVwc30obikpcmV0dXJuIFFoKHIpfHxqayhyKTtpPSgpPT5uZXcgciguLi5JayhuLmRlcHMpKX1yZXR1cm4gaX1mdW5jdGlvbiBFZyhuLHQsZT0hMSl7cmV0dXJue2ZhY3Rvcnk6bix2YWx1ZTp0LG11bHRpOmU/W106dm9pZCAwfX1mdW5jdGlvbiB3aGUobil7cmV0dXJuISFuLlx1MDI3NXByb3ZpZGVyc31mdW5jdGlvbiBHayhuLHQpe2ZvcihsZXQgZSBvZiBuKUFycmF5LmlzQXJyYXkoZSk/R2soZSx0KTp3aGUoZSk/R2soZS5cdTAyNzVwcm92aWRlcnMsdCk6dChlKX12YXIgV2s9Y2xhc3N7fSxnRT1jbGFzc3t9LHFrPWNsYXNze3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe3Rocm93IGZ1bmN0aW9uKG4pe2xldCB0PUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtjbyhuKX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIHQubmdDb21wb25lbnQ9bix0fSh0KX19LEVvPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5VTEw9bmV3IHFrLG59KSgpO2Z1bmN0aW9uIEVoZSgpe3JldHVybiBHZyhNbygpLFplKCkpfWZ1bmN0aW9uIEdnKG4sdCl7cmV0dXJuIG5ldyBBZSh1bChuLHQpKX12YXIgQWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9ZX19cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189RWhlLG59KSgpO2Z1bmN0aW9uIFRoZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufW5ldyBzZSgiUmVuZGVyZXIySW50ZXJjZXB0b3IiKTt2YXIgcWM9Y2xhc3N7fSxYYz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1aZSgpLGU9b3AoTW8oKS5pbmRleCxuKTtyZXR1cm4ocWgoZSk/ZTpuKVsxMV19KCksbn0pKCksQWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLEtsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LEloZT1uZXcgS2woIjE0LjIuMTEiKSxvaz17fTtmdW5jdGlvbiBzayhuKXtyZXR1cm4gbi5uZ09yaWdpbmFsRXJyb3J9dmFyIFNzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2xldCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIix0KSxlJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsZSl9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPXQmJnNrKHQpO2Zvcig7ZSYmc2soZSk7KWU9c2soZSk7cmV0dXJuIGV8fG51bGx9fSxSaGU9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxPaGU9Lyg8fD4pLyx2Nj1uZXcgTWFwLE5oZT0wLFBqPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBZYyhuLHQpe3FoKHQpPyhuW1BqXT10WzIwXSxmdW5jdGlvbihuKXt2Ni5zZXQoblsyMF0sbil9KHQpKTpuW1BqXT10fWZ1bmN0aW9uIEZFKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gS1Mobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdW5jdGlvbj9uKCk6bn12YXIgWWssYWw9KCgpPT57cmV0dXJuKG49YWx8fChhbD17fSkpW24uSW1wb3J0YW50PTFdPSJJbXBvcnRhbnQiLG5bbi5EYXNoQ2FzZT0yXT0iRGFzaENhc2UiLGFsO3ZhciBufSkoKTtmdW5jdGlvbiBLRihuLHQpe3JldHVybiBZayhuLHQpfWZ1bmN0aW9uIFpGKG4pe2xldCB0PW5bM107cmV0dXJuIEp1KHQpP3RbM106dH1mdW5jdGlvbiBKRihuKXtyZXR1cm4gYjYoblsxM10pfWZ1bmN0aW9uICRGKG4pe3JldHVybiBiNihuWzRdKX1mdW5jdGlvbiBiNihuKXtmb3IoO251bGwhPT1uJiYhSnUobik7KW49bls0XTtyZXR1cm4gbn1mdW5jdGlvbiBUZyhuLHQsZSxpLHIpe2lmKG51bGwhPWkpe2xldCBvLHM9ITE7SnUoaSk/bz1pOnFoKGkpJiYocz0hMCxpPWlbMF0pO2xldCBhPU1hKGkpOzA9PT1uJiZudWxsIT09ZT9udWxsPT1yP0U2KHQsZSxhKTpaaCh0LGUsYSxyfHxudWxsLCEwKToxPT09biYmbnVsbCE9PWU/WmgodCxlLGEscnx8bnVsbCwhMCk6Mj09PW4/UjYodCxhLHMpOjM9PT1uJiZ0LmRlc3Ryb3lOb2RlKGEpLG51bGwhPW8mJmZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89ZVs3XTtvIT09TWEoZSkmJlRnKHQsbixpLG8scik7Zm9yKGxldCBhPTEwO2E8ZS5sZW5ndGg7YSsrKXtsZXQgbD1lW2FdO0FiKGxbMV0sbCxuLHQsaSxvKX19KHQsbixvLGUscil9fWZ1bmN0aW9uIGVOKG4sdCl7cmV0dXJuIG4uY3JlYXRlVGV4dCh0KX1mdW5jdGlvbiB4NihuLHQsZSl7bi5zZXRWYWx1ZSh0LGUpfWZ1bmN0aW9uIEdoZShuLHQpe3JldHVybiBuLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShSaGUsdD0+dC5yZXBsYWNlKE9oZSwiXHUyMDBiJDFcdTIwMGIiKSl9KHQpKX1mdW5jdGlvbiB0TihuLHQsZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudCh0LGUpfWZ1bmN0aW9uIEM2KG4sdCl7bGV0IGU9bls5XSxpPWUuaW5kZXhPZih0KSxyPXRbM107NTEyJnRbMl0mJih0WzJdJj0tNTEzLE9GKHIsLTEpKSxlLnNwbGljZShpLDEpfWZ1bmN0aW9uIFhrKG4sdCl7aWYobi5sZW5ndGg8PTEwKXJldHVybjtsZXQgZT0xMCt0LGk9bltlXTtpZihpKXtsZXQgcj1pWzE3XTtudWxsIT09ciYmciE9PW4mJkM2KHIsaSksdD4wJiYobltlLTFdWzRdPWlbNF0pO2xldCBvPXBFKG4sMTArdCk7IWZ1bmN0aW9uKG4sdCl7QWIobix0LHRbMTFdLDIsbnVsbCxudWxsKSx0WzBdPW51bGwsdFs2XT1udWxsfShpWzFdLGkpO2xldCBzPW9bMTldO251bGwhPT1zJiZzLmRldGFjaFZpZXcob1sxXSksaVszXT1udWxsLGlbNF09bnVsbCxpWzJdJj0tNjV9cmV0dXJuIGl9ZnVuY3Rpb24gdzYobix0KXtpZighKDEyOCZ0WzJdKSl7bGV0IGU9dFsxMV07ZS5kZXN0cm95Tm9kZSYmQWIobix0LGUsMyxudWxsLG51bGwpLGZ1bmN0aW9uKG4pe2xldCB0PW5bMTNdO2lmKCF0KXJldHVybiBhayhuWzFdLG4pO2Zvcig7dDspe2xldCBlPW51bGw7aWYocWgodCkpZT10WzEzXTtlbHNle2xldCBpPXRbMTBdO2kmJihlPWkpfWlmKCFlKXtmb3IoO3QmJiF0WzRdJiZ0IT09bjspcWgodCkmJmFrKHRbMV0sdCksdD10WzNdO251bGw9PT10JiYodD1uKSxxaCh0KSYmYWsodFsxXSx0KSxlPXQmJnRbNF19dD1lfX0odCl9fWZ1bmN0aW9uIGFrKG4sdCl7aWYoISgxMjgmdFsyXSkpe3RbMl0mPS02NSx0WzJdfD0xMjgsZnVuY3Rpb24obix0KXtsZXQgZTtpZihudWxsIT1uJiZudWxsIT0oZT1uLmRlc3Ryb3lIb29rcykpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj10W2VbaV1dO2lmKCEociBpbnN0YW5jZW9mIEtoKSl7bGV0IG89ZVtpKzFdO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKz0yKXtsZXQgYT1yW29bc11dLGw9b1tzKzFdO3RyeXtsLmNhbGwoYSl9ZmluYWxseXt9fWVsc2UgdHJ5e28uY2FsbChyKX1maW5hbGx5e319fX0obix0KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY2xlYW51cCxpPXRbN10scj0tMTtpZihudWxsIT09ZSlmb3IobGV0IG89MDtvPGUubGVuZ3RoLTE7bys9MilpZigic3RyaW5nIj09dHlwZW9mIGVbb10pe2xldCBzPWVbbysxXSxhPSJmdW5jdGlvbiI9PXR5cGVvZiBzP3ModCk6TWEodFtzXSksbD1pW3I9ZVtvKzJdXSxjPWVbbyszXTsiYm9vbGVhbiI9PXR5cGVvZiBjP2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihlW29dLGwsYyk6Yz49MD9pW3I9Y10oKTppW3I9LWNdLnVuc3Vic2NyaWJlKCksbys9Mn1lbHNle2xldCBzPWlbcj1lW28rMV1dO2Vbb10uY2FsbChzKX1pZihudWxsIT09aSl7Zm9yKGxldCBvPXIrMTtvPGkubGVuZ3RoO28rKykoMCxpW29dKSgpO3RbN109bnVsbH19KG4sdCksMT09PXRbMV0udHlwZSYmdFsxMV0uZGVzdHJveSgpO2xldCBlPXRbMTddO2lmKG51bGwhPT1lJiZKdSh0WzNdKSl7ZSE9PXRbM10mJkM2KGUsdCk7bGV0IGk9dFsxOV07bnVsbCE9PWkmJmkuZGV0YWNoVmlldyhuKX0hZnVuY3Rpb24obil7djYuZGVsZXRlKG5bMjBdKX0odCl9fWZ1bmN0aW9uIE02KG4sdCxlKXtyZXR1cm4gUzYobix0LnBhcmVudCxlKX1mdW5jdGlvbiBTNihuLHQsZSl7bGV0IGk9dDtmb3IoO251bGwhPT1pJiY0MCZpLnR5cGU7KWk9KHQ9aSkucGFyZW50O2lmKG51bGw9PT1pKXJldHVybiBlWzBdO2lmKDImaS5mbGFncyl7bGV0IHI9bi5kYXRhW2kuZGlyZWN0aXZlU3RhcnRdLmVuY2Fwc3VsYXRpb247aWYocj09PXdhLk5vbmV8fHI9PT13YS5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gdWwoaSxlKX1mdW5jdGlvbiBaaChuLHQsZSxpLHIpe24uaW5zZXJ0QmVmb3JlKHQsZSxpLHIpfWZ1bmN0aW9uIEU2KG4sdCxlKXtuLmFwcGVuZENoaWxkKHQsZSl9ZnVuY3Rpb24gUmoobix0LGUsaSxyKXtudWxsIT09aT9aaChuLHQsZSxpLHIpOkU2KG4sdCxlKX1mdW5jdGlvbiBORShuLHQpe3JldHVybiBuLnBhcmVudE5vZGUodCl9ZnVuY3Rpb24gVDYobix0LGUpe3JldHVybiBBNihuLHQsZSl9ZnVuY3Rpb24gRDYobix0LGUpe3JldHVybiA0MCZuLnR5cGU/dWwobixlKTpudWxsfXZhciBRayxBNj1ENjtmdW5jdGlvbiBJNihuLHQpe0E2PW4sUWs9dH1mdW5jdGlvbiBMRShuLHQsZSxpKXtsZXQgcj1NNihuLGksdCksbz10WzExXSxhPVQ2KGkucGFyZW50fHx0WzZdLGksdCk7aWYobnVsbCE9cilpZihBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKVJqKG8scixlW2xdLGEsITEpO2Vsc2UgUmoobyxyLGUsYSwhMSk7dm9pZCAwIT09UWsmJlFrKG8saSx0LGUscil9ZnVuY3Rpb24gWlMobix0KXtpZihudWxsIT09dCl7bGV0IGU9dC50eXBlO2lmKDMmZSlyZXR1cm4gdWwodCxuKTtpZig0JmUpcmV0dXJuIEtrKC0xLG5bdC5pbmRleF0pO2lmKDgmZSl7bGV0IGk9dC5jaGlsZDtpZihudWxsIT09aSlyZXR1cm4gWlMobixpKTt7bGV0IHI9blt0LmluZGV4XTtyZXR1cm4gSnUocik/S2soLTEscik6TWEocil9fWlmKDMyJmUpcmV0dXJuIEtGKHQsbikoKXx8TWEoblt0LmluZGV4XSk7e2xldCBpPVA2KG4sdCk7cmV0dXJuIG51bGwhPT1pP0FycmF5LmlzQXJyYXkoaSk/aVswXTpaUyhaRihuWzE2XSksaSk6WlMobix0Lm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBQNihuLHQpe3JldHVybiBudWxsIT09dD9uWzE2XVs2XS5wcm9qZWN0aW9uW3QucHJvamVjdGlvbl06bnVsbH1mdW5jdGlvbiBLayhuLHQpe2xldCBlPTEwK24rMTtpZihlPHQubGVuZ3RoKXtsZXQgaT10W2VdLHI9aVsxXS5maXJzdENoaWxkO2lmKG51bGwhPT1yKXJldHVybiBaUyhpLHIpfXJldHVybiB0WzddfWZ1bmN0aW9uIFI2KG4sdCxlKXtsZXQgaT1ORShuLHQpO2kmJmZ1bmN0aW9uKG4sdCxlLGkpe24ucmVtb3ZlQ2hpbGQodCxlLGkpfShuLGksdCxlKX1mdW5jdGlvbiBuTihuLHQsZSxpLHIsbyxzKXtmb3IoO251bGwhPWU7KXtsZXQgYT1pW2UuaW5kZXhdLGw9ZS50eXBlO2lmKHMmJjA9PT10JiYoYSYmWWMoTWEoYSksaSksZS5mbGFnc3w9NCksNjQhPSg2NCZlLmZsYWdzKSlpZig4Jmwpbk4obix0LGUuY2hpbGQsaSxyLG8sITEpLFRnKHQsbixyLGEsbyk7ZWxzZSBpZigzMiZsKXtsZXQgdSxjPUtGKGUsaSk7Zm9yKDt1PWMoKTspVGcodCxuLHIsdSxvKTtUZyh0LG4scixhLG8pfWVsc2UgMTYmbD9PNihuLHQsaSxlLHIsbyk6VGcodCxuLHIsYSxvKTtlPXM/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9fWZ1bmN0aW9uIEFiKG4sdCxlLGkscixvKXtuTihlLGksbi5maXJzdENoaWxkLHQscixvLCExKX1mdW5jdGlvbiBPNihuLHQsZSxpLHIsbyl7bGV0IHM9ZVsxNl0sbD1zWzZdLnByb2plY3Rpb25baS5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKVRnKHQsbixyLGxbY10sbyk7ZWxzZSBuTihuLHQsbCxzWzNdLHIsbywhMCl9ZnVuY3Rpb24gazYobix0LGUpe24uc2V0QXR0cmlidXRlKHQsInN0eWxlIixlKX1mdW5jdGlvbiBpTihuLHQsZSl7IiI9PT1lP24ucmVtb3ZlQXR0cmlidXRlKHQsImNsYXNzIik6bi5zZXRBdHRyaWJ1dGUodCwiY2xhc3MiLGUpfWZ1bmN0aW9uIEY2KG4sdCxlKXtsZXQgaT1uLmxlbmd0aDtmb3IoOzspe2xldCByPW4uaW5kZXhPZih0LGUpO2lmKC0xPT09cilyZXR1cm4gcjtpZigwPT09cnx8bi5jaGFyQ29kZUF0KHItMSk8PTMyKXtsZXQgbz10Lmxlbmd0aDtpZihyK289PT1pfHxuLmNoYXJDb2RlQXQocitvKTw9MzIpcmV0dXJuIHJ9ZT1yKzF9fXZhciBONj0ibmctdGVtcGxhdGUiO2Z1bmN0aW9uIHJmZShuLHQsZSl7bGV0IGk9MDtmb3IoO2k8bi5sZW5ndGg7KXtsZXQgcj1uW2krK107aWYoZSYmImNsYXNzIj09PXIpe2lmKHI9bltpXSwtMSE9PUY2KHIudG9Mb3dlckNhc2UoKSx0LDApKXJldHVybiEwfWVsc2UgaWYoMT09PXIpe2Zvcig7aTxuLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihyPW5baSsrXSk7KWlmKHIudG9Mb3dlckNhc2UoKT09PXQpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiExfWZ1bmN0aW9uIEw2KG4pe3JldHVybiA0PT09bi50eXBlJiZuLnZhbHVlIT09TjZ9ZnVuY3Rpb24gb2ZlKG4sdCxlKXtyZXR1cm4gdD09PSg0IT09bi50eXBlfHxlP24udmFsdWU6TjYpfWZ1bmN0aW9uIHNmZShuLHQsZSl7bGV0IGk9NCxyPW4uYXR0cnN8fFtdLG89ZnVuY3Rpb24obil7Zm9yKGxldCB0PTA7dDxuLmxlbmd0aDt0KyspaWYoRkcoblt0XSkpcmV0dXJuIHQ7cmV0dXJuIG4ubGVuZ3RofShyKSxzPSExO2ZvcihsZXQgYT0wO2E8dC5sZW5ndGg7YSsrKXtsZXQgbD10W2FdO2lmKCJudW1iZXIiIT10eXBlb2YgbCl7aWYoIXMpaWYoNCZpKXtpZihpPTJ8MSZpLCIiIT09bCYmIW9mZShuLGwsZSl8fCIiPT09bCYmMT09PXQubGVuZ3RoKXtpZihXbChpKSlyZXR1cm4hMTtzPSEwfX1lbHNle2xldCBjPTgmaT9sOnRbKythXTtpZig4JmkmJm51bGwhPT1uLmF0dHJzKXtpZighcmZlKG4uYXR0cnMsYyxlKSl7aWYoV2woaSkpcmV0dXJuITE7cz0hMH1jb250aW51ZX1sZXQgZD1hZmUoOCZpPyJjbGFzcyI6bCxyLEw2KG4pLGUpO2lmKC0xPT09ZCl7aWYoV2woaSkpcmV0dXJuITE7cz0hMDtjb250aW51ZX1pZigiIiE9PWMpe2xldCBwO3A9ZD5vPyIiOnJbZCsxXS50b0xvd2VyQ2FzZSgpO2xldCBoPTgmaT9wOm51bGw7aWYoaCYmLTEhPT1GNihoLGMsMCl8fDImaSYmYyE9PXApe2lmKFdsKGkpKXJldHVybiExO3M9ITB9fX19ZWxzZXtpZighcyYmIVdsKGkpJiYhV2wobCkpcmV0dXJuITE7aWYocyYmV2wobCkpY29udGludWU7cz0hMSxpPWx8MSZpfX1yZXR1cm4gV2woaSl8fHN9ZnVuY3Rpb24gV2wobil7cmV0dXJuIDA9PSgxJm4pfWZ1bmN0aW9uIGFmZShuLHQsZSxpKXtpZihudWxsPT09dClyZXR1cm4tMTtsZXQgcj0wO2lmKGl8fCFlKXtsZXQgbz0hMTtmb3IoO3I8dC5sZW5ndGg7KXtsZXQgcz10W3JdO2lmKHM9PT1uKXJldHVybiByO2lmKDM9PT1zfHw2PT09cylvPSEwO2Vsc2V7aWYoMT09PXN8fDI9PT1zKXtsZXQgYT10Wysrcl07Zm9yKDsic3RyaW5nIj09dHlwZW9mIGE7KWE9dFsrK3JdO2NvbnRpbnVlfWlmKDQ9PT1zKWJyZWFrO2lmKDA9PT1zKXtyKz00O2NvbnRpbnVlfX1yKz1vPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YoNCk7aWYoZT4tMSlmb3IoZSsrO2U8bi5sZW5ndGg7KXtsZXQgaT1uW2VdO2lmKCJudW1iZXIiPT10eXBlb2YgaSlyZXR1cm4tMTtpZihpPT09dClyZXR1cm4gZTtlKyt9cmV0dXJuLTF9KHQsbil9ZnVuY3Rpb24gQjYobix0LGU9ITEpe2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKWlmKHNmZShuLHRbaV0sZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZGZlKG4sdCl7ZTpmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXTtpZihuLmxlbmd0aD09PWkubGVuZ3RoKXtmb3IobGV0IHI9MDtyPG4ubGVuZ3RoO3IrKylpZihuW3JdIT09aVtyXSljb250aW51ZSBlO3JldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiBPaihuLHQpe3JldHVybiBuPyI6bm90KCIrdC50cmltKCkrIikiOnR9ZnVuY3Rpb24gcGZlKG4pe2xldCB0PW5bMF0sZT0xLGk9MixyPSIiLG89ITE7Zm9yKDtlPG4ubGVuZ3RoOyl7bGV0IHM9bltlXTtpZigic3RyaW5nIj09dHlwZW9mIHMpaWYoMiZpKXtsZXQgYT1uWysrZV07cis9IlsiK3MrKGEubGVuZ3RoPjA/Jz0iJythKyciJzoiIikrIl0ifWVsc2UgOCZpP3IrPSIuIitzOjQmaSYmKHIrPSIgIitzKTtlbHNlIiIhPT1yJiYhV2wocykmJih0Kz1PaihvLHIpLHI9IiIpLGk9cyxvPW98fCFXbChpKTtlKyt9cmV0dXJuIiIhPT1yJiYodCs9T2oobyxyKSksdH12YXIgR249e307ZnVuY3Rpb24geChuKXtWNihEaSgpLFplKCksVHMoKStuLCExKX1mdW5jdGlvbiBWNihuLHQsZSxpKXtpZighaSlpZigzPT0oMyZ0WzJdKSl7bGV0IG89bi5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PW8mJnFTKHQsbyxlKX1lbHNle2xldCBvPW4ucHJlT3JkZXJIb29rcztudWxsIT09byYmWVModCxvLDAsZSl9dHAoZSl9dmFyIGtqPXsiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSI6Z2UsIlx1MDI3NVx1MDI3NWRlZmluZUluamVjdG9yIjpVLCJcdTAyNzVcdTAyNzVpbmplY3QiOlIsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRyxyZXNvbHZlRm9yd2FyZFJlZjpxaX07dmFyIGdmZT1hcih7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6YXJ9KTtmdW5jdGlvbiBGaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VDbGFzc31mdW5jdGlvbiBOaihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VGYWN0b3J5fXZhciBINj13YigiSW5qZWN0YWJsZSIsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7bi5oYXNPd25Qcm9wZXJ0eSh0RSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHRFLHtnZXQ6KCk9PihudWxsPT09ZSYmKGU9c2woKS5jb21waWxlSW5qZWN0YWJsZShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NXByb3YuanNgLGZ1bmN0aW9uKG4sdCl7bGV0IGU9dHx8e3Byb3ZpZGVkSW46bnVsbH0saT17bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjplLnByb3ZpZGVkSW59O3JldHVybihGaihlKXx8TmooZSkpJiZ2b2lkIDAhPT1lLmRlcHMmJihpLmRlcHM9WEcoZS5kZXBzKSksRmooZSk/aS51c2VDbGFzcz1lLnVzZUNsYXNzOmZ1bmN0aW9uKG4pe3JldHVybiBnZmUgaW4gbn0oZSk/aS51c2VWYWx1ZT1lLnVzZVZhbHVlOk5qKGUpP2kudXNlRmFjdG9yeT1lLnVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIHZvaWQgMCE9PW4udXNlRXhpc3Rpbmd9KGUpJiYoaS51c2VFeGlzdGluZz1lLnVzZUV4aXN0aW5nKSxpfShuLHQpKSksZSl9KSxuLmhhc093blByb3BlcnR5KFF1KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj1zbCgpO2k9ci5jb21waWxlRmFjdG9yeShraixgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bix0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0OnIuRmFjdG9yeVRhcmdldC5JbmplY3RhYmxlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMH0pfShuLHQpKTtmdW5jdGlvbiBMaihuLHQ9bnVsbCxlPW51bGwsaSl7bGV0IHI9VTYobix0LGUsaSk7cmV0dXJuIHIucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCkscn1mdW5jdGlvbiBVNihuLHQ9bnVsbCxlPW51bGwsaSxyPW5ldyBTZXQpe2xldCBvPVtlfHxXaSxwaGUobildO3JldHVybiBpPWl8fCgib2JqZWN0Ij09dHlwZW9mIG4/dm9pZCAwOmNvKG4pKSxuZXcgbUUobyx0fHxRRigpLGl8fG51bGwscil9dmFyIHpuPSgoKT0+e2NsYXNzIG57c3RhdGljIGNyZWF0ZShlLGkpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIExqKHtuYW1lOiIifSxpLGUsIiIpO3tsZXQgcj1lLm5hbWU/PyIiO3JldHVybiBMaih7bmFtZTpyfSxlLnBhcmVudCxlLnByb3ZpZGVycyxyKX19fXJldHVybiBuLlRIUk9XX0lGX05PVF9GT1VORD1kYixuLk5VTEw9bmV3IGZFLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PlIocDYpfSksbi5fX05HX0VMRU1FTlRfSURfXz0tMSxufSkoKSxlYj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHRoaXMudG9rZW49dCx0aGlzLmlkPWUsIXQpdGhyb3cgbmV3IE10KDIwOCwhMSk7dGhpcy5kaXNwbGF5TmFtZT1jbyh0aGlzLnRva2VuKX1zdGF0aWMgZ2V0KHQpe3JldHVybiBCai5nZXQocWkodCkpfXN0YXRpYyBnZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIEJqLm51bWJlck9mS2V5c319LEJqPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FsbEtleXM9bmV3IE1hcH1nZXQodCl7aWYodCBpbnN0YW5jZW9mIGViKXJldHVybiB0O2lmKHRoaXMuX2FsbEtleXMuaGFzKHQpKXJldHVybiB0aGlzLl9hbGxLZXlzLmdldCh0KTtsZXQgZT1uZXcgZWIodCxlYi5udW1iZXJPZktleXMpO3JldHVybiB0aGlzLl9hbGxLZXlzLnNldCh0LGUpLGV9Z2V0IG51bWJlck9mS2V5cygpe3JldHVybiB0aGlzLl9hbGxLZXlzLnNpemV9fTtmdW5jdGlvbiB3KG4sdD1paS5EZWZhdWx0KXtsZXQgZT1aZSgpO3JldHVybiBudWxsPT09ZT9SKG4sdCk6ekcoTW8oKSxlLHFpKG4pLHQpfWZ1bmN0aW9uIEpsKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9ZnVuY3Rpb24gR1Mobix0KXtyZXR1cm4gbjw8MTd8dDw8Mn1mdW5jdGlvbiBKaChuKXtyZXR1cm4gbj4+MTcmMzI3Njd9ZnVuY3Rpb24gSmsobil7cmV0dXJuIDJ8bn1mdW5jdGlvbiBGZyhuKXtyZXR1cm4oMTMxMDY4Jm4pPj4yfWZ1bmN0aW9uIGxrKG4sdCl7cmV0dXJuLTEzMTA2OSZufHQ8PDJ9ZnVuY3Rpb24gJGsobil7cmV0dXJuIDF8bn1mdW5jdGlvbiB6NihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKXtsZXQgcj1lW2ldLG89ZVtpKzFdO2lmKC0xIT09byl7bGV0IHM9bi5kYXRhW29dO0xGKHIpLHMuY29udGVudFF1ZXJpZXMoMix0W29dLG8pfX19ZnVuY3Rpb24gQkUobix0LGUsaSxyLG8scyxhLGwsYyx1KXtsZXQgZD10LmJsdWVwcmludC5zbGljZSgpO3JldHVybiBkWzBdPXIsZFsyXT03NnxpLChudWxsIT09dXx8biYmMTAyNCZuWzJdKSYmKGRbMl18PTEwMjQpLHdHKGQpLGRbM109ZFsxNV09bixkWzhdPWUsZFsxMF09c3x8biYmblsxMF0sZFsxMV09YXx8biYmblsxMV0sZFsxMl09bHx8biYmblsxMl18fG51bGwsZFs5XT1jfHxuJiZuWzldfHxudWxsLGRbNl09byxkWzIwXT1OaGUrKyxkWzIxXT11LGRbMTZdPTI9PXQudHlwZT9uWzE2XTpkLGR9ZnVuY3Rpb24gV2cobix0LGUsaSxyKXtsZXQgbz1uLmRhdGFbdF07aWYobnVsbD09PW8pbz1yTihuLHQsZSxpLHIpLFluLmxGcmFtZS5pbkkxOG4mJihvLmZsYWdzfD02NCk7ZWxzZSBpZig2NCZvLnR5cGUpe28udHlwZT1lLG8udmFsdWU9aSxvLmF0dHJzPXI7bGV0IHM9bGIoKTtvLmluamVjdG9ySW5kZXg9bnVsbD09PXM/LTE6cy5pbmplY3RvckluZGV4fXJldHVybiBXYyhvLCEwKSxvfWZ1bmN0aW9uIHJOKG4sdCxlLGkscil7bGV0IG89U0coKSxzPWtGKCksbD1uLmRhdGFbdF09ZnVuY3Rpb24obix0LGUsaSxyLG8pe3JldHVybnt0eXBlOmUsaW5kZXg6aSxpbnNlcnRCZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6dD90LmluamVjdG9ySW5kZXg6LTEsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczowLHByb3ZpZGVySW5kZXhlczowLHZhbHVlOnIsYXR0cnM6byxtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXdzOm51bGwsbmV4dDpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6dCxwcm9qZWN0aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAscz9vOm8mJm8ucGFyZW50LGUsdCxpLHIpO3JldHVybiBudWxsPT09bi5maXJzdENoaWxkJiYobi5maXJzdENoaWxkPWwpLG51bGwhPT1vJiYocz9udWxsPT1vLmNoaWxkJiZudWxsIT09bC5wYXJlbnQmJihvLmNoaWxkPWwpOm51bGw9PT1vLm5leHQmJihvLm5leHQ9bCkpLGx9ZnVuY3Rpb24gcWcobix0LGUsaSl7aWYoMD09PWUpcmV0dXJuLTE7bGV0IHI9dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxlO28rKyl0LnB1c2goaSksbi5ibHVlcHJpbnQucHVzaChpKSxuLmRhdGEucHVzaChudWxsKTtyZXR1cm4gcn1mdW5jdGlvbiBvTihuLHQsZSl7QkYodCk7dHJ5e2xldCBpPW4udmlld1F1ZXJ5O251bGwhPT1pJiZ0RigxLGksZSk7bGV0IHI9bi50ZW1wbGF0ZTtudWxsIT09ciYmajYobix0LHIsMSxlKSxuLmZpcnN0Q3JlYXRlUGFzcyYmKG4uZmlyc3RDcmVhdGVQYXNzPSExKSxuLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLG4uc3RhdGljVmlld1F1ZXJpZXMmJnRGKDIsbi52aWV3UXVlcnksZSk7bGV0IG89bi5jb21wb25lbnRzO251bGwhPT1vJiZmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKWpmZShuLHRbZV0pfSh0LG8pfWNhdGNoKGkpe3Rocm93IG4uZmlyc3RDcmVhdGVQYXNzJiYobi5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLG4uZmlyc3RDcmVhdGVQYXNzPSExKSxpfWZpbmFsbHl7dFsyXSY9LTUsVkYoKX19ZnVuY3Rpb24gVkUobix0LGUsaSl7bGV0IHI9dFsyXTtpZigxMjghPSgxMjgmcikpe0JGKHQpO3RyeXt3Ryh0KSxFRyhuLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09ZSYmajYobix0LGUsMixpKTtsZXQgcz0zPT0oMyZyKTtpZihzKXtsZXQgYz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09YyYmcVModCxjLG51bGwpfWVsc2V7bGV0IGM9bi5wcmVPcmRlckhvb2tzO251bGwhPT1jJiZZUyh0LGMsMCxudWxsKSxlayh0LDApfWlmKGZ1bmN0aW9uKG4pe2ZvcihsZXQgdD1KRihuKTtudWxsIT09dDt0PSRGKHQpKXtpZighdFsyXSljb250aW51ZTtsZXQgZT10WzldO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLG89clszXTswPT0oNTEyJnJbMl0pJiZPRihvLDEpLHJbMl18PTUxMn19fSh0KSxmdW5jdGlvbihuKXtmb3IobGV0IHQ9SkYobik7bnVsbCE9PXQ7dD0kRih0KSlmb3IobGV0IGU9MTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBpPXRbZV0scj1pWzFdO29FKGkpJiZWRShyLGksci50ZW1wbGF0ZSxpWzhdKX19KHQpLG51bGwhPT1uLmNvbnRlbnRRdWVyaWVzJiZ6NihuLHQpLHMpe2xldCBjPW4uY29udGVudENoZWNrSG9va3M7bnVsbCE9PWMmJnFTKHQsYyl9ZWxzZXtsZXQgYz1uLmNvbnRlbnRIb29rcztudWxsIT09YyYmWVModCxjLDEpLGVrKHQsMSl9IWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PWUpdHJ5e2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldO2lmKHI8MCl0cCh+cik7ZWxzZXtsZXQgbz1yLHM9ZVsrK2ldLGE9ZVsrK2ldO1FkZShzLG8pLGEoMix0W29dKX19fWZpbmFsbHl7dHAoLTEpfX0obix0KTtsZXQgYT1uLmNvbXBvbmVudHM7bnVsbCE9PWEmJmZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspemZlKG4sdFtlXSl9KHQsYSk7bGV0IGw9bi52aWV3UXVlcnk7aWYobnVsbCE9PWwmJnRGKDIsbCxpKSxzKXtsZXQgYz1uLnZpZXdDaGVja0hvb2tzO251bGwhPT1jJiZxUyh0LGMpfWVsc2V7bGV0IGM9bi52aWV3SG9va3M7bnVsbCE9PWMmJllTKHQsYywyKSxlayh0LDIpfSEwPT09bi5maXJzdFVwZGF0ZVBhc3MmJihuLmZpcnN0VXBkYXRlUGFzcz0hMSksdFsyXSY9LTQxLDUxMiZ0WzJdJiYodFsyXSY9LTUxMyxPRih0WzNdLC0xKSl9ZmluYWxseXtWRigpfX19ZnVuY3Rpb24gajYobix0LGUsaSxyKXtsZXQgbz1UcygpLHM9MiZpO3RyeXt0cCgtMSkscyYmdC5sZW5ndGg+MjImJlY2KG4sdCwyMiwhMSksZShpLHIpfWZpbmFsbHl7dHAobyl9fWZ1bmN0aW9uIEc2KG4sdCxlKXtpZihQRih0KSl7bGV0IHI9dC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBvPXQuZGlyZWN0aXZlU3RhcnQ7bzxyO28rKyl7bGV0IHM9bi5kYXRhW29dO3MuY29udGVudFF1ZXJpZXMmJnMuY29udGVudFF1ZXJpZXMoMSxlW29dLG8pfX19ZnVuY3Rpb24gc04obix0LGUpeyFNRygpfHwoZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZS5kaXJlY3RpdmVTdGFydCxvPWUuZGlyZWN0aXZlRW5kO24uZmlyc3RDcmVhdGVQYXNzfHxjYihlLHQpLFljKGksdCk7bGV0IHM9ZS5pbml0aWFsSW5wdXRzO2ZvcihsZXQgYT1yO2E8bzthKyspe2xldCBsPW4uZGF0YVthXSxjPVFsKGwpO2MmJkxmZSh0LGUsbCk7bGV0IHU9Q2IodCxuLGEsZSk7WWModSx0KSxudWxsIT09cyYmQmZlKDAsYS1yLHUsbCwwLHMpLGMmJihvcChlLmluZGV4LHQpWzhdPXUpfX0obix0LGUsdWwoZSx0KSksMTI4PT0oMTI4JmUuZmxhZ3MpJiZmdW5jdGlvbihuLHQsZSl7bGV0IGk9ZS5kaXJlY3RpdmVTdGFydCxyPWUuZGlyZWN0aXZlRW5kLG89ZS5pbmRleCxzPVluLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7dHJ5e3RwKG8pO2ZvcihsZXQgYT1pO2E8cjthKyspe2xldCBsPW4uZGF0YVthXSxjPXRbYV07U2soYSksKG51bGwhPT1sLmhvc3RCaW5kaW5nc3x8MCE9PWwuaG9zdFZhcnN8fG51bGwhPT1sLmhvc3RBdHRycykmJks2KGwsYyl9fWZpbmFsbHl7dHAoLTEpLFNrKHMpfX0obix0LGUpKX1mdW5jdGlvbiBhTihuLHQsZT11bCl7bGV0IGk9dC5sb2NhbE5hbWVzO2lmKG51bGwhPT1pKXtsZXQgcj10LmluZGV4KzE7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKz0yKXtsZXQgcz1pW28rMV0sYT0tMT09PXM/ZSh0LG4pOm5bc107bltyKytdPWF9fX1mdW5jdGlvbiBXNihuKXtsZXQgdD1uLnRWaWV3O3JldHVybiBudWxsPT09dHx8dC5pbmNvbXBsZXRlRmlyc3RQYXNzP24udFZpZXc9bE4oMSxudWxsLG4udGVtcGxhdGUsbi5kZWNscyxuLnZhcnMsbi5kaXJlY3RpdmVEZWZzLG4ucGlwZURlZnMsbi52aWV3UXVlcnksbi5zY2hlbWFzLG4uY29uc3RzKTp0fWZ1bmN0aW9uIGxOKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCB1PTIyK2ksZD11K3IscD1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKGk8bj9udWxsOkduKTtyZXR1cm4gZX0odSxkKSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2MoKTpjO3JldHVybiBwWzFdPXt0eXBlOm4sYmx1ZXByaW50OnAsdGVtcGxhdGU6ZSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OmEsZGVjbFROb2RlOnQsZGF0YTpwLnNsaWNlKCkuZmlsbChudWxsLHUpLGJpbmRpbmdTdGFydEluZGV4OnUsZXhwYW5kb1N0YXJ0SW5kZXg6ZCxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygcz9zKCk6cyxmaXJzdENoaWxkOm51bGwsc2NoZW1hczpsLGNvbnN0czpoLGluY29tcGxldGVGaXJzdFBhc3M6ITF9fWZ1bmN0aW9uIHE2KG4sdCxlLGkpe2xldCByPWlXKHQpO251bGw9PT1lP3IucHVzaChpKTooci5wdXNoKGUpLG4uZmlyc3RDcmVhdGVQYXNzJiZyVyhuKS5wdXNoKGksci5sZW5ndGgtMSkpfWZ1bmN0aW9uIFZqKG4sdCxlKXtmb3IobGV0IGkgaW4gbilpZihuLmhhc093blByb3BlcnR5KGkpKXtsZXQgcj1uW2ldOyhlPW51bGw9PT1lP3t9OmUpLmhhc093blByb3BlcnR5KGkpP2VbaV0ucHVzaCh0LHIpOmVbaV09W3Qscl19cmV0dXJuIGV9ZnVuY3Rpb24gWTYobix0KXtsZXQgaT10LmRpcmVjdGl2ZUVuZCxyPW4uZGF0YSxvPXQuYXR0cnMscz1bXSxhPW51bGwsbD1udWxsO2ZvcihsZXQgYz10LmRpcmVjdGl2ZVN0YXJ0O2M8aTtjKyspe2xldCB1PXJbY10sZD11LmlucHV0cyxwPW51bGw9PT1vfHxMNih0KT9udWxsOlZmZShkLG8pO3MucHVzaChwKSxhPVZqKGQsYyxhKSxsPVZqKHUub3V0cHV0cyxjLGwpfW51bGwhPT1hJiYoYS5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKHQuZmxhZ3N8PTE2KSxhLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYodC5mbGFnc3w9MzIpKSx0LmluaXRpYWxJbnB1dHM9cyx0LmlucHV0cz1hLHQub3V0cHV0cz1sfWZ1bmN0aW9uIERhKG4sdCxlLGkscixvLHMsYSl7bGV0IHUsbD11bCh0LGUpLGM9dC5pbnB1dHM7IWEmJm51bGwhPWMmJih1PWNbaV0pPyhkTihuLGUsdSxpLHIpLFJGKHQpJiZYNihlLHQuaW5kZXgpKTozJnQudHlwZSYmKGk9ZnVuY3Rpb24obil7cmV0dXJuImNsYXNzIj09PW4/ImNsYXNzTmFtZSI6ImZvciI9PT1uPyJodG1sRm9yIjoiZm9ybWFjdGlvbiI9PT1uPyJmb3JtQWN0aW9uIjoiaW5uZXJIdG1sIj09PW4/ImlubmVySFRNTCI6InJlYWRvbmx5Ij09PW4/InJlYWRPbmx5IjoidGFiaW5kZXgiPT09bj8idGFiSW5kZXgiOm59KGkpLHI9bnVsbCE9cz9zKHIsdC52YWx1ZXx8IiIsaSk6cixvLnNldFByb3BlcnR5KGwsaSxyKSl9ZnVuY3Rpb24gWDYobix0KXtsZXQgZT1vcCh0LG4pOzE2JmVbMl18fChlWzJdfD0zMil9ZnVuY3Rpb24gY04obix0LGUsaSl7bGV0IHI9ITE7aWYoTUcoKSl7bGV0IG89ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGlyZWN0aXZlUmVnaXN0cnkscj1udWxsO2lmKGkpZm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBzPWlbb107QjYoZSxzLnNlbGVjdG9ycywhMSkmJihyfHwocj1bXSksZEUoY2IoZSx0KSxuLHMudHlwZSksUWwocyk/KFo2KG4sZSksci51bnNoaWZ0KHMpKTpyLnB1c2gocykpfXJldHVybiByfShuLHQsZSkscz1udWxsPT09aT9udWxsOnsiIjotMX07aWYobnVsbCE9PW8pe3I9ITAsSjYoZSxuLmRhdGEubGVuZ3RoLG8ubGVuZ3RoKTtmb3IobGV0IHU9MDt1PG8ubGVuZ3RoO3UrKyl7bGV0IGQ9b1t1XTtkLnByb3ZpZGVyc1Jlc29sdmVyJiZkLnByb3ZpZGVyc1Jlc29sdmVyKGQpfWxldCBhPSExLGw9ITEsYz1xZyhuLHQsby5sZW5ndGgsbnVsbCk7Zm9yKGxldCB1PTA7dTxvLmxlbmd0aDt1Kyspe2xldCBkPW9bdV07ZS5tZXJnZWRBdHRycz1hRShlLm1lcmdlZEF0dHJzLGQuaG9zdEF0dHJzKSwkNihuLGUsdCxjLGQpLE5mZShjLGQscyksbnVsbCE9PWQuY29udGVudFF1ZXJpZXMmJihlLmZsYWdzfD04KSwobnVsbCE9PWQuaG9zdEJpbmRpbmdzfHxudWxsIT09ZC5ob3N0QXR0cnN8fDAhPT1kLmhvc3RWYXJzKSYmKGUuZmxhZ3N8PTEyOCk7bGV0IHA9ZC50eXBlLnByb3RvdHlwZTshYSYmKHAubmdPbkNoYW5nZXN8fHAubmdPbkluaXR8fHAubmdEb0NoZWNrKSYmKChuLnByZU9yZGVySG9va3N8fChuLnByZU9yZGVySG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGE9ITApLCFsJiYocC5uZ09uQ2hhbmdlc3x8cC5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJDaGVja0hvb2tzfHwobi5wcmVPcmRlckNoZWNrSG9va3M9W10pKS5wdXNoKGUuaW5kZXgpLGw9ITApLGMrK31ZNihuLGUpfXMmJmZ1bmN0aW9uKG4sdCxlKXtpZih0KXtsZXQgaT1uLmxvY2FsTmFtZXM9W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKz0yKXtsZXQgbz1lW3RbcisxXV07aWYobnVsbD09byl0aHJvdyBuZXcgTXQoLTMwMSwhMSk7aS5wdXNoKHRbcl0sbyl9fX0oZSxpLHMpfXJldHVybiBlLm1lcmdlZEF0dHJzPWFFKGUubWVyZ2VkQXR0cnMsZS5hdHRycykscn1mdW5jdGlvbiBRNihuLHQsZSxpLHIsbyl7bGV0IHM9by5ob3N0QmluZGluZ3M7aWYocyl7bGV0IGE9bi5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PWEmJihhPW4uaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtsZXQgbD1+dC5pbmRleDsoZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7Zm9yKDt0PjA7KXtsZXQgZT1uWy0tdF07aWYoIm51bWJlciI9PXR5cGVvZiBlJiZlPDApcmV0dXJuIGV9cmV0dXJuIDB9KShhKSE9bCYmYS5wdXNoKGwpLGEucHVzaChpLHIscyl9fWZ1bmN0aW9uIEs2KG4sdCl7bnVsbCE9PW4uaG9zdEJpbmRpbmdzJiZuLmhvc3RCaW5kaW5ncygxLHQpfWZ1bmN0aW9uIFo2KG4sdCl7dC5mbGFnc3w9Miwobi5jb21wb25lbnRzfHwobi5jb21wb25lbnRzPVtdKSkucHVzaCh0LmluZGV4KX1mdW5jdGlvbiBOZmUobix0LGUpe2lmKGUpe2lmKHQuZXhwb3J0QXMpZm9yKGxldCBpPTA7aTx0LmV4cG9ydEFzLmxlbmd0aDtpKyspZVt0LmV4cG9ydEFzW2ldXT1uO1FsKHQpJiYoZVsiIl09bil9fWZ1bmN0aW9uIEo2KG4sdCxlKXtuLmZsYWdzfD0xLG4uZGlyZWN0aXZlU3RhcnQ9dCxuLmRpcmVjdGl2ZUVuZD10K2Usbi5wcm92aWRlckluZGV4ZXM9dH1mdW5jdGlvbiAkNihuLHQsZSxpLHIpe24uZGF0YVtpXT1yO2xldCBvPXIuZmFjdG9yeXx8KHIuZmFjdG9yeT1RaChyLnR5cGUpKSxzPW5ldyBLaChvLFFsKHIpLHcpO24uYmx1ZXByaW50W2ldPXMsZVtpXT1zLFE2KG4sdCwwLGkscWcobixlLHIuaG9zdFZhcnMsR24pLHIpfWZ1bmN0aW9uIExmZShuLHQsZSl7bGV0IGk9dWwodCxuKSxyPVc2KGUpLG89blsxMF0scz1IRShuLEJFKG4scixudWxsLGUub25QdXNoPzMyOjE2LGksdCxvLG8uY3JlYXRlUmVuZGVyZXIoaSxlKSxudWxsLG51bGwsbnVsbCkpO25bdC5pbmRleF09c31mdW5jdGlvbiBRYyhuLHQsZSxpLHIsbyl7bGV0IHM9dWwobix0KTt1Tih0WzExXSxzLG8sbi52YWx1ZSxlLGkscil9ZnVuY3Rpb24gdU4obix0LGUsaSxyLG8scyl7aWYobnVsbD09byluLnJlbW92ZUF0dHJpYnV0ZSh0LHIsZSk7ZWxzZXtsZXQgYT1udWxsPT1zP3FuKG8pOnMobyxpfHwiIixyKTtuLnNldEF0dHJpYnV0ZSh0LHIsYSxlKX19ZnVuY3Rpb24gQmZlKG4sdCxlLGkscixvKXtsZXQgcz1vW3RdO2lmKG51bGwhPT1zKXtsZXQgYT1pLnNldElucHV0O2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7KXtsZXQgYz1zW2wrK10sdT1zW2wrK10sZD1zW2wrK107bnVsbCE9PWE/aS5zZXRJbnB1dChlLGQsYyx1KTplW3VdPWR9fX1mdW5jdGlvbiBWZmUobix0KXtsZXQgZT1udWxsLGk9MDtmb3IoO2k8dC5sZW5ndGg7KXtsZXQgcj10W2ldO2lmKDAhPT1yKWlmKDUhPT1yKXtpZigibnVtYmVyIj09dHlwZW9mIHIpYnJlYWs7bi5oYXNPd25Qcm9wZXJ0eShyKSYmKG51bGw9PT1lJiYoZT1bXSksZS5wdXNoKHIsbltyXSx0W2krMV0pKSxpKz0yfWVsc2UgaSs9MjtlbHNlIGkrPTR9cmV0dXJuIGV9ZnVuY3Rpb24gZVcobix0LGUsaSl7cmV0dXJuIG5ldyBBcnJheShuLCEwLCExLHQsbnVsbCwwLGksZSxudWxsLG51bGwpfWZ1bmN0aW9uIHpmZShuLHQpe2xldCBlPW9wKHQsbik7aWYob0UoZSkpe2xldCBpPWVbMV07NDgmZVsyXT9WRShpLGUsaS50ZW1wbGF0ZSxlWzhdKTplWzVdPjAmJmVGKGUpfX1mdW5jdGlvbiBlRihuKXtmb3IobGV0IGk9SkYobik7bnVsbCE9PWk7aT0kRihpKSlmb3IobGV0IHI9MTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07aWYob0UobykpaWYoNTEyJm9bMl0pe2xldCBzPW9bMV07VkUocyxvLHMudGVtcGxhdGUsb1s4XSl9ZWxzZSBvWzVdPjAmJmVGKG8pfWxldCBlPW5bMV0uY29tcG9uZW50cztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9b3AoZVtpXSxuKTtvRShyKSYmcls1XT4wJiZlRihyKX19ZnVuY3Rpb24gamZlKG4sdCl7bGV0IGU9b3AodCxuKSxpPWVbMV07KGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPXQubGVuZ3RoO2U8bi5ibHVlcHJpbnQubGVuZ3RoO2UrKyl0LnB1c2gobi5ibHVlcHJpbnRbZV0pfSkoaSxlKSxvTihpLGUsZVs4XSl9ZnVuY3Rpb24gSEUobix0KXtyZXR1cm4gblsxM10/blsxNF1bNF09dDpuWzEzXT10LG5bMTRdPXQsdH1mdW5jdGlvbiB0VyhuKXtmb3IoO247KXtuWzJdfD0zMjtsZXQgdD1aRihuKTtpZihGZGUobikmJiF0KXJldHVybiBuO249dH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBuVyhuLHQsZSxpPSEwKXtsZXQgcj10WzEwXTtyLmJlZ2luJiZyLmJlZ2luKCk7dHJ5e1ZFKG4sdCxuLnRlbXBsYXRlLGUpfWNhdGNoKHMpe3Rocm93IGkmJnNXKHQscyksc31maW5hbGx5e3IuZW5kJiZyLmVuZCgpfX1mdW5jdGlvbiB0RihuLHQsZSl7TEYoMCksdChuLGUpfWZ1bmN0aW9uIGlXKG4pe3JldHVybiBuWzddfHwobls3XT1bXSl9ZnVuY3Rpb24gclcobil7cmV0dXJuIG4uY2xlYW51cHx8KG4uY2xlYW51cD1bXSl9ZnVuY3Rpb24gb1cobix0LGUpe3JldHVybihudWxsPT09bnx8UWwobikpJiYoZT1mdW5jdGlvbihuKXtmb3IoO0FycmF5LmlzQXJyYXkobik7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bMV0pcmV0dXJuIG47bj1uWzBdfXJldHVybiBudWxsfShlW3QuaW5kZXhdKSksZVsxMV19ZnVuY3Rpb24gc1cobix0KXtsZXQgZT1uWzldLGk9ZT9lLmdldChTcyxudWxsKTpudWxsO2kmJmkuaGFuZGxlRXJyb3IodCl9ZnVuY3Rpb24gZE4obix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoOyl7bGV0IHM9ZVtvKytdLGE9ZVtvKytdLGw9dFtzXSxjPW4uZGF0YVtzXTtudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwscixpLGEpOmxbYV09cn19ZnVuY3Rpb24gbmQobix0LGUpe2xldCBpPUlFKHQsbik7eDYoblsxMV0saSxlKX1mdW5jdGlvbiBfRShuLHQsZSl7bGV0IGk9ZT9uLnN0eWxlczpudWxsLHI9ZT9uLmNsYXNzZXM6bnVsbCxvPTA7aWYobnVsbCE9PXQpZm9yKGxldCBzPTA7czx0Lmxlbmd0aDtzKyspe2xldCBhPXRbc107Im51bWJlciI9PXR5cGVvZiBhP289YToxPT1vP3I9YmsocixhKToyPT1vJiYoaT1iayhpLGErIjogIit0Wysrc10rIjsiKSl9ZT9uLnN0eWxlcz1pOm4uc3R5bGVzV2l0aG91dEhvc3Q9aSxlP24uY2xhc3Nlcz1yOm4uY2xhc3Nlc1dpdGhvdXRIb3N0PXJ9ZnVuY3Rpb24gSlMobix0LGUsaSxyPSExKXtmb3IoO251bGwhPT1lOyl7bGV0IG89dFtlLmluZGV4XTtpZihudWxsIT09byYmaS5wdXNoKE1hKG8pKSxKdShvKSlmb3IobGV0IGE9MTA7YTxvLmxlbmd0aDthKyspe2xldCBsPW9bYV0sYz1sWzFdLmZpcnN0Q2hpbGQ7bnVsbCE9PWMmJkpTKGxbMV0sbCxjLGkpfWxldCBzPWUudHlwZTtpZig4JnMpSlMobix0LGUuY2hpbGQsaSk7ZWxzZSBpZigzMiZzKXtsZXQgbCxhPUtGKGUsdCk7Zm9yKDtsPWEoKTspaS5wdXNoKGwpfWVsc2UgaWYoMTYmcyl7bGV0IGE9UDYodCxlKTtpZihBcnJheS5pc0FycmF5KGEpKWkucHVzaCguLi5hKTtlbHNle2xldCBsPVpGKHRbMTZdKTtKUyhsWzFdLGwsYSxpLCEwKX19ZT1yP2UucHJvamVjdGlvbk5leHQ6ZS5uZXh0fXJldHVybiBpfXZhciAkaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2xWaWV3PXQsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWUsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IHJvb3ROb2Rlcygpe2xldCB0PXRoaXMuX2xWaWV3LGU9dFsxXTtyZXR1cm4gSlMoZSx0LGUuZmlyc3RDaGlsZCxbXSl9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbOF19c2V0IGNvbnRleHQodCl7dGhpcy5fbFZpZXdbOF09dH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIDEyOD09KDEyOCZ0aGlzLl9sVmlld1syXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtsZXQgdD10aGlzLl9sVmlld1szXTtpZihKdSh0KSl7bGV0IGU9dFs4XSxpPWU/ZS5pbmRleE9mKHRoaXMpOi0xO2k+LTEmJihYayh0LGkpLHBFKGUsaSkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfXc2KHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kodCl7cTYodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcsbnVsbCx0KX1tYXJrRm9yQ2hlY2soKXt0Vyh0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXd8fHRoaXMuX2xWaWV3KX1kZXRhY2goKXt0aGlzLl9sVmlld1syXSY9LTY1fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbMl18PTY0fWRldGVjdENoYW5nZXMoKXtuVyh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgTXQoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dmFyIHQ7dGhpcy5fYXBwUmVmPW51bGwsQWIodGhpcy5fbFZpZXdbMV0sdD10aGlzLl9sVmlldyx0WzExXSwyLG51bGwsbnVsbCl9YXR0YWNoVG9BcHBSZWYodCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhyb3cgbmV3IE10KDkwMiwhMSk7dGhpcy5fYXBwUmVmPXR9fSxuRj1jbGFzcyBleHRlbmRzICRoe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMuX3ZpZXc9dH1kZXRlY3RDaGFuZ2VzKCl7bGV0IHQ9dGhpcy5fdmlldztuVyh0WzFdLHQsdFs4XSwhMSl9Y2hlY2tOb0NoYW5nZXMoKXt9Z2V0IGNvbnRleHQoKXtyZXR1cm4gbnVsbH19LGhiPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPXR9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodCl7bGV0IGU9b2wodCk7cmV0dXJuIG5ldyB2RShlLHRoaXMubmdNb2R1bGUpfX07ZnVuY3Rpb24gSGoobil7bGV0IHQ9W107Zm9yKGxldCBlIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShlKSYmdC5wdXNoKHtwcm9wTmFtZTpuW2VdLHRlbXBsYXRlTmFtZTplfSk7cmV0dXJuIHR9dmFyIHZFPWNsYXNzIGV4dGVuZHMgZ0V7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPXQsdGhpcy5uZ01vZHVsZT1lLHRoaXMuY29tcG9uZW50VHlwZT10LnR5cGUsdGhpcy5zZWxlY3Rvcj10LnNlbGVjdG9ycy5tYXAocGZlKS5qb2luKCIsIiksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9dC5uZ0NvbnRlbnRTZWxlY3RvcnM/dC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFlfWdldCBpbnB1dHMoKXtyZXR1cm4gSGoodGhpcy5jb21wb25lbnREZWYuaW5wdXRzKX1nZXQgb3V0cHV0cygpe3JldHVybiBIaih0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jcmVhdGUodCxlLGkscil7bGV0IG89KHI9cnx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIG5wP3I6cj8uaW5qZWN0b3I7byYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKG89dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKG8pfHxvKTtsZXQgcz1vP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuaW5qZWN0b3I9dCx0aGlzLnBhcmVudEluamVjdG9yPWV9Z2V0KHQsZSxpKXtsZXQgcj10aGlzLmluamVjdG9yLmdldCh0LG9rLGkpO3JldHVybiByIT09b2t8fGU9PT1vaz9yOnRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KHQsZSxpKX19KHQsbyk6dCxhPXMuZ2V0KHFjLG51bGwpO2lmKG51bGw9PT1hKXRocm93IG5ldyBNdCg0MDcsITEpO2xldCBtLEMsbD1zLmdldChBaGUsbnVsbCksYz1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLHU9dGhpcy5jb21wb25lbnREZWYuc2VsZWN0b3JzWzBdWzBdfHwiZGl2IixkPWk/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuLnNlbGVjdFJvb3RFbGVtZW50KHQsZT09PXdhLlNoYWRvd0RvbSl9KGMsaSx0aGlzLmNvbXBvbmVudERlZi5lbmNhcHN1bGF0aW9uKTp0TihjLHUsZnVuY3Rpb24obil7bGV0IHQ9bi50b0xvd2VyQ2FzZSgpO3JldHVybiJzdmciPT09dD8ic3ZnIjoibWF0aCI9PT10PyJtYXRoIjpudWxsfSh1KSkscD10aGlzLmNvbXBvbmVudERlZi5vblB1c2g/Mjg4OjI3MixoPWxOKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwpLGY9QkUobnVsbCxoLG51bGwscCxudWxsLG51bGwsYSxjLGwscyxudWxsKTtCRihmKTt0cnl7bGV0IF89ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWVbMV07ZVsyMl09bjtsZXQgbD1XZyhzLDIyLDIsIiNob3N0IixudWxsKSxjPWwubWVyZ2VkQXR0cnM9dC5ob3N0QXR0cnM7bnVsbCE9PWMmJihfRShsLGMsITApLG51bGwhPT1uJiYoc0UocixuLGMpLG51bGwhPT1sLmNsYXNzZXMmJmlOKHIsbixsLmNsYXNzZXMpLG51bGwhPT1sLnN0eWxlcyYmazYocixuLGwuc3R5bGVzKSkpO2xldCB1PWkuY3JlYXRlUmVuZGVyZXIobix0KSxkPUJFKGUsVzYodCksbnVsbCx0Lm9uUHVzaD8zMjoxNixlWzIyXSxsLGksdSxudWxsLG51bGwsbnVsbCk7cmV0dXJuIHMuZmlyc3RDcmVhdGVQYXNzJiYoZEUoY2IobCxlKSxzLHQudHlwZSksWjYocyxsKSxKNihsLGUubGVuZ3RoLDEpKSxIRShlLGQpLGVbMjJdPWR9KGQsdGhpcy5jb21wb25lbnREZWYsZixhLGMpO2lmKGQpaWYoaSlzRShjLGQsWyJuZy12ZXJzaW9uIixJaGUuZnVsbF0pO2Vsc2V7bGV0e2F0dHJzOnksY2xhc3NlczpJfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTI7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IG89bltpXTtpZigic3RyaW5nIj09dHlwZW9mIG8pMj09PXI/IiIhPT1vJiZ0LnB1c2gobyxuWysraV0pOjg9PT1yJiZlLnB1c2gobyk7ZWxzZXtpZighV2wocikpYnJlYWs7cj1vfWkrK31yZXR1cm57YXR0cnM6dCxjbGFzc2VzOmV9fSh0aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF0pO3kmJnNFKGMsZCx5KSxJJiZJLmxlbmd0aD4wJiZpTihjLGQsSS5qb2luKCIgIikpfWlmKEM9Q0coaCwyMiksdm9pZCAwIT09ZSl7bGV0IHk9Qy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgST0wO0k8dGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMubGVuZ3RoO0krKyl7bGV0IEE9ZVtJXTt5LnB1c2gobnVsbCE9QT9BcnJheS5mcm9tKEEpOm51bGwpfX1tPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPWVbMV0sbz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9TW8oKTtuLmZpcnN0Q3JlYXRlUGFzcyYmKGUucHJvdmlkZXJzUmVzb2x2ZXImJmUucHJvdmlkZXJzUmVzb2x2ZXIoZSksJDYobixpLHQscWcobix0LDEsbnVsbCksZSksWTYobixpKSk7bGV0IHI9Q2IodCxuLGkuZGlyZWN0aXZlU3RhcnQsaSk7WWMocix0KTtsZXQgbz11bChpLHQpO3JldHVybiBvJiZZYyhvLHQpLHJ9KHIsZSx0KTtpZihuWzhdPWVbOF09byxudWxsIT09aSlmb3IobGV0IGEgb2YgaSlhKG8sdCk7aWYodC5jb250ZW50UXVlcmllcyl7bGV0IGE9TW8oKTt0LmNvbnRlbnRRdWVyaWVzKDEsbyxhLmRpcmVjdGl2ZVN0YXJ0KX1sZXQgcz1NbygpO3JldHVybiFyLmZpcnN0Q3JlYXRlUGFzc3x8bnVsbD09PXQuaG9zdEJpbmRpbmdzJiZudWxsPT09dC5ob3N0QXR0cnN8fCh0cChzLmluZGV4KSxRNihlWzFdLHMsMCxzLmRpcmVjdGl2ZVN0YXJ0LHMuZGlyZWN0aXZlRW5kLHQpLEs2KHQsbykpLG99KF8sdGhpcy5jb21wb25lbnREZWYsZixbWGZlXSksb04oaCxmLG51bGwpfWZpbmFsbHl7VkYoKX1yZXR1cm4gbmV3IHJGKHRoaXMuY29tcG9uZW50VHlwZSxtLEdnKEMsZiksZixDKX19LHJGPShuZXcgaGIsY2xhc3MgZXh0ZW5kcyBXa3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKCksdGhpcy5sb2NhdGlvbj1pLHRoaXMuX3Jvb3RMVmlldz1yLHRoaXMuX3ROb2RlPW8sdGhpcy5pbnN0YW5jZT1lLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgbkYociksdGhpcy5jb21wb25lbnRUeXBlPXR9c2V0SW5wdXQodCxlKXtsZXQgcixpPXRoaXMuX3ROb2RlLmlucHV0cztpZihudWxsIT09aSYmKHI9aVt0XSkpe2xldCBvPXRoaXMuX3Jvb3RMVmlldztkTihvWzFdLG8scix0LGUpLFg2KG8sdGhpcy5fdE5vZGUuaW5kZXgpfX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IFloKHRoaXMuX3ROb2RlLHRoaXMuX3Jvb3RMVmlldyl9ZGVzdHJveSgpe3RoaXMuaG9zdFZpZXcuZGVzdHJveSgpfW9uRGVzdHJveSh0KXt0aGlzLmhvc3RWaWV3Lm9uRGVzdHJveSh0KX19KTtmdW5jdGlvbiBYZmUoKXtsZXQgbj1NbygpO1BFKFplKClbMV0sbil9ZnVuY3Rpb24gYVcobil7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3J9ZnVuY3Rpb24gdHQobil7bGV0IHQ9YVcobi50eXBlKSxlPSEwLGk9W25dO2Zvcig7dDspe2xldCByO2lmKFFsKG4pKXI9dC5cdTAyNzVjbXB8fHQuXHUwMjc1ZGlyO2Vsc2V7aWYodC5cdTAyNzVjbXApdGhyb3cgbmV3IE10KDkwMywhMSk7cj10Llx1MDI3NWRpcn1pZihyKXtpZihlKXtpLnB1c2gocik7bGV0IHM9bjtzLmlucHV0cz1jayhuLmlucHV0cykscy5kZWNsYXJlZElucHV0cz1jayhuLmRlY2xhcmVkSW5wdXRzKSxzLm91dHB1dHM9Y2sobi5vdXRwdXRzKTtsZXQgYT1yLmhvc3RCaW5kaW5nczthJiZKZmUobixhKTtsZXQgbD1yLnZpZXdRdWVyeSxjPXIuY29udGVudFF1ZXJpZXM7aWYobCYmS2ZlKG4sbCksYyYmWmZlKG4sYyksJE8obi5pbnB1dHMsci5pbnB1dHMpLCRPKG4uZGVjbGFyZWRJbnB1dHMsci5kZWNsYXJlZElucHV0cyksJE8obi5vdXRwdXRzLHIub3V0cHV0cyksUWwocikmJnIuZGF0YS5hbmltYXRpb24pe2xldCB1PW4uZGF0YTt1LmFuaW1hdGlvbj0odS5hbmltYXRpb258fFtdKS5jb25jYXQoci5kYXRhLmFuaW1hdGlvbil9fWxldCBvPXIuZmVhdHVyZXM7aWYobylmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGE9b1tzXTthJiZhLm5nSW5oZXJpdCYmYShuKSxhPT09dHQmJihlPSExKX19dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCl9IWZ1bmN0aW9uKG4pe2xldCB0PTAsZT1udWxsO2ZvcihsZXQgaT1uLmxlbmd0aC0xO2k+PTA7aS0tKXtsZXQgcj1uW2ldO3IuaG9zdFZhcnM9dCs9ci5ob3N0VmFycyxyLmhvc3RBdHRycz1hRShyLmhvc3RBdHRycyxlPWFFKGUsci5ob3N0QXR0cnMpKX19KGkpfWZ1bmN0aW9uIGNrKG4pe3JldHVybiBuPT09QWc/e306bj09PVdpP1tdOm59ZnVuY3Rpb24gS2ZlKG4sdCl7bGV0IGU9bi52aWV3UXVlcnk7bi52aWV3UXVlcnk9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9ZnVuY3Rpb24gWmZlKG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllcztuLmNvbnRlbnRRdWVyaWVzPWU/KGkscixvKT0+e3QoaSxyLG8pLGUoaSxyLG8pfTp0fWZ1bmN0aW9uIEpmZShuLHQpe2xldCBlPW4uaG9zdEJpbmRpbmdzO24uaG9zdEJpbmRpbmdzPWU/KGkscik9Pnt0KGksciksZShpLHIpfTp0fXZhciAkZmU9WyJwcm92aWRlcnNSZXNvbHZlciJdLGVtZT1bInRlbXBsYXRlIiwiZGVjbHMiLCJjb25zdHMiLCJ2YXJzIiwib25QdXNoIiwibmdDb250ZW50U2VsZWN0b3JzIiwic3R5bGVzIiwiZW5jYXBzdWxhdGlvbiIsInNjaGVtYXMiXTt2YXIgV1M9bnVsbDtmdW5jdGlvbiBVRSgpe2lmKCFXUyl7bGV0IG49V3IuU3ltYm9sO2lmKG4mJm4uaXRlcmF0b3IpV1M9bi5pdGVyYXRvcjtlbHNle2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE1hcC5wcm90b3R5cGUpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7KytlKXtsZXQgaT10W2VdOyJlbnRyaWVzIiE9PWkmJiJzaXplIiE9PWkmJk1hcC5wcm90b3R5cGVbaV09PT1NYXAucHJvdG90eXBlLmVudHJpZXMmJihXUz1pKX19fXJldHVybiBXU31mdW5jdGlvbiB6RShuKXtyZXR1cm4hIXBOKG4pJiYoQXJyYXkuaXNBcnJheShuKXx8IShuIGluc3RhbmNlb2YgTWFwKSYmVUUoKWluIG4pfWZ1bmN0aW9uIHBOKG4pe3JldHVybiBudWxsIT09biYmKCJmdW5jdGlvbiI9PXR5cGVvZiBufHwib2JqZWN0Ij09dHlwZW9mIG4pfWZ1bmN0aW9uIEtjKG4sdCxlKXtyZXR1cm4gblt0XT1lfWZ1bmN0aW9uIEliKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gc3Mobix0LGUpe3JldHVybiFPYmplY3QuaXMoblt0XSxlKSYmKG5bdF09ZSwhMCl9ZnVuY3Rpb24gZWYobix0LGUsaSl7bGV0IHI9c3Mobix0LGUpO3JldHVybiBzcyhuLHQrMSxpKXx8cn1mdW5jdGlvbiBqRShuLHQsZSxpLHIpe2xldCBvPWVmKG4sdCxlLGkpO3JldHVybiBzcyhuLHQrMixyKXx8b31mdW5jdGlvbiBsbChuLHQsZSxpLHIsbyl7bGV0IHM9ZWYobix0LGUsaSk7cmV0dXJuIGVmKG4sdCsyLHIsbyl8fHN9ZnVuY3Rpb24gemUobix0LGUsaSl7bGV0IHI9WmUoKTtyZXR1cm4gc3MocixVZygpLHQpJiYoRGkoKSxRYyhxcigpLHIsbix0LGUsaSkpLHplfWZ1bmN0aW9uIFlnKG4sdCl7bGV0IGU9ITEsaT0kdSgpO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MillPXNzKG4saSsrLHRbb10pfHxlO2lmKEVHKGkpLCFlKXJldHVybiBHbjtsZXQgcj10WzBdO2ZvcihsZXQgbz0xO288dC5sZW5ndGg7bys9MilyKz1xbih0W29dKSt0W28rMV07cmV0dXJuIHJ9ZnVuY3Rpb24gWGcobix0LGUsaSl7cmV0dXJuIHNzKG4sVWcoKSxlKT90K3FuKGUpK2k6R259ZnVuY3Rpb24gUWcobix0LGUsaSxyLG8pe2xldCBhPWVmKG4sJHUoKSxlLHIpO3JldHVybiBlZCgyKSxhP3QrcW4oZSkraStxbihyKStvOkdufWZ1bmN0aW9uIEtnKG4sdCxlLGkscixvLHMsYSl7bGV0IGM9akUobiwkdSgpLGUscixzKTtyZXR1cm4gZWQoMyksYz90K3FuKGUpK2krcW4ocikrbytxbihzKSthOkdufWZ1bmN0aW9uIFpnKG4sdCxlLGkscixvLHMsYSxsLGMpe2xldCBkPWxsKG4sJHUoKSxlLHIscyxsKTtyZXR1cm4gZWQoNCksZD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2M6R259ZnVuY3Rpb24gSmcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQpe2xldCBwPSR1KCksaD1sbChuLHAsZSxyLHMsbCk7cmV0dXJuIGg9c3MobixwKzQsdSl8fGgsZWQoNSksaD90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZDpHbn1mdW5jdGlvbiAkZyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe2xldCBmPSR1KCksbT1sbChuLGYsZSxyLHMsbCk7cmV0dXJuIG09ZWYobixmKzQsdSxwKXx8bSxlZCg2KSxtP3QrcW4oZSkraStxbihyKStvK3FuKHMpK2ErcW4obCkrYytxbih1KStkK3FuKHApK2g6R259ZnVuY3Rpb24gZTAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9JHUoKSxfPWxsKG4sQyxlLHIscyxsKTtyZXR1cm4gXz1qRShuLEMrNCx1LHAsZil8fF8sZWQoNyksXz90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK206R259ZnVuY3Rpb24gdDAobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pe2xldCB5PSR1KCksST1sbChuLHksZSxyLHMsbCk7cmV0dXJuIEk9bGwobix5KzQsdSxwLGYsQyl8fEksZWQoOCksST90K3FuKGUpK2krcW4ocikrbytxbihzKSthK3FuKGwpK2MrcW4odSkrZCtxbihwKStoK3FuKGYpK20rcW4oQykrXzpHbn1mdW5jdGlvbiBFKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9WmUoKSxjPURpKCksdT1uKzIyLGQ9Yy5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQuY29uc3RzLHU9V2codCxuLDQsc3x8bnVsbCxlcChjLGEpKTtjTih0LGUsdSxlcChjLGwpKSxQRSh0LHUpO2xldCBkPXUudFZpZXdzPWxOKDIsdSxpLHIsbyx0LmRpcmVjdGl2ZVJlZ2lzdHJ5LHQucGlwZVJlZ2lzdHJ5LG51bGwsdC5zY2hlbWFzLGMpO3JldHVybiBudWxsIT09dC5xdWVyaWVzJiYodC5xdWVyaWVzLnRlbXBsYXRlKHQsdSksZC5xdWVyaWVzPXQucXVlcmllcy5lbWJlZGRlZFRWaWV3KHUpKSx1fSh1LGMsbCx0LGUsaSxyLG8scyk6Yy5kYXRhW3VdO1djKGQsITEpO2xldCBwPWxbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO0xFKGMsbCxwLGQpLFljKHAsbCksSEUobCxsW3VdPWVXKHAsbCxwLGQpKSxBRShkKSYmc04oYyxsLGQpLG51bGwhPXMmJmFOKGwsZCxhKX1mdW5jdGlvbiBzdChuKXtyZXR1cm4gSGcoWW4ubEZyYW1lLmNvbnRleHRMVmlldywyMituKX1mdW5jdGlvbiBiKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCExKSxifWZ1bmN0aW9uIG9GKG4sdCxlLGkscil7bGV0IHM9cj8iY2xhc3MiOiJzdHlsZSI7ZE4obixlLHQuaW5wdXRzW3NdLHMsaSl9ZnVuY3Rpb24gZyhuLHQsZSxpKXtsZXQgcj1aZSgpLG89RGkoKSxzPTIyK24sYT1yWzExXSxsPXJbc109dE4oYSx0LFluLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlKSxjPW8uZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscixvLHMpe2xldCBhPXQuY29uc3RzLGM9V2codCxuLDIscixlcChhLG8pKTtyZXR1cm4gY04odCxlLGMsZXAoYSxzKSksbnVsbCE9PWMuYXR0cnMmJl9FKGMsYy5hdHRycywhMSksbnVsbCE9PWMubWVyZ2VkQXR0cnMmJl9FKGMsYy5tZXJnZWRBdHRycywhMCksbnVsbCE9PXQucXVlcmllcyYmdC5xdWVyaWVzLmVsZW1lbnRTdGFydCh0LGMpLGN9KHMsbyxyLDAsdCxlLGkpOm8uZGF0YVtzXTtXYyhjLCEwKTtsZXQgdT1jLm1lcmdlZEF0dHJzO251bGwhPT11JiZzRShhLGwsdSk7bGV0IGQ9Yy5jbGFzc2VzO251bGwhPT1kJiZpTihhLGwsZCk7bGV0IHA9Yy5zdHlsZXM7cmV0dXJuIG51bGwhPT1wJiZrNihhLGwscCksNjQhPSg2NCZjLmZsYWdzKSYmTEUobyxyLGwsYyksMD09PVluLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCYmWWMobCxyKSxZbi5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQrKyxBRShjKSYmKHNOKG8scixjKSxHNihvLGMscikpLG51bGwhPT1pJiZhTihyLGMpLGd9ZnVuY3Rpb24gdigpe2xldCBuPU1vKCk7a0YoKT9GRigpOihuPW4ucGFyZW50LFdjKG4sITEpKTtsZXQgdD1uO1luLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tO2xldCBlPURpKCk7cmV0dXJuIGUuZmlyc3RDcmVhdGVQYXNzJiYoUEUoZSxuKSxQRihuKSYmZS5xdWVyaWVzLmVsZW1lbnRFbmQobikpLG51bGwhPXQuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbihuKXtyZXR1cm4gMCE9KDE2Jm4uZmxhZ3MpfSh0KSYmb0YoZSx0LFplKCksdC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPXQuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oMzImbi5mbGFncyl9KHQpJiZvRihlLHQsWmUoKSx0LnN0eWxlc1dpdGhvdXRIb3N0LCExKSx2fWZ1bmN0aW9uIE4obix0LGUsaSl7cmV0dXJuIGcobix0LGUsaSksdigpLE59ZnVuY3Rpb24gS3Qobix0LGUpe2xldCBpPVplKCkscj1EaSgpLG89bisyMixzPXIuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89dC5jb25zdHMscz1lcChvLGkpLGE9V2codCxuLDgsIm5nLWNvbnRhaW5lciIscyk7cmV0dXJuIG51bGwhPT1zJiZfRShhLHMsITApLGNOKHQsZSxhLGVwKG8scikpLG51bGwhPT10LnF1ZXJpZXMmJnQucXVlcmllcy5lbGVtZW50U3RhcnQodCxhKSxhfShvLHIsaSx0LGUpOnIuZGF0YVtvXTtXYyhzLCEwKTtsZXQgYT1pW29dPWlbMTFdLmNyZWF0ZUNvbW1lbnQoIiIpO3JldHVybiBMRShyLGksYSxzKSxZYyhhLGkpLEFFKHMpJiYoc04ocixpLHMpLEc2KHIscyxpKSksbnVsbCE9ZSYmYU4oaSxzKSxLdH1mdW5jdGlvbiBadCgpe2xldCBuPU1vKCksdD1EaSgpO3JldHVybiBrRigpP0ZGKCk6KG49bi5wYXJlbnQsV2MobiwhMSkpLHQuZmlyc3RDcmVhdGVQYXNzJiYoUEUodCxuKSxQRihuKSYmdC5xdWVyaWVzLmVsZW1lbnRFbmQobikpLFp0fWZ1bmN0aW9uIEFpKG4sdCxlKXtyZXR1cm4gS3Qobix0LGUpLFp0KCksQWl9ZnVuY3Rpb24gSWUoKXtyZXR1cm4gWmUoKX1mdW5jdGlvbiBuMChuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnRoZW59ZnVuY3Rpb24gaE4obil7cmV0dXJuISFuJiYiZnVuY3Rpb24iPT10eXBlb2Ygbi5zdWJzY3JpYmV9dmFyIGZOPWhOO2Z1bmN0aW9uIFAobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1NbygpO3JldHVybiBfVyhvLHIsclsxMV0scyxuLHQsMCxpKSxQfWZ1bmN0aW9uIGkwKG4sdCl7bGV0IGU9TW8oKSxpPVplKCkscj1EaSgpO3JldHVybiBfVyhyLGksb1coTkYoci5kYXRhKSxlLGkpLGUsbix0KSxpMH1mdW5jdGlvbiBfVyhuLHQsZSxpLHIsbyxzLGEpe2xldCBsPUFFKGkpLHU9bi5maXJzdENyZWF0ZVBhc3MmJnJXKG4pLHA9aVcodCksaD0hMDtpZigzJmkudHlwZXx8YSl7bGV0IEM9dWwoaSx0KSxfPWE/YShDKTpDLHk9cC5sZW5ndGgsST1hP089PmEoTWEoT1tpLmluZGV4XSkpOmkuaW5kZXgsQT1udWxsO2lmKCFhJiZsJiYoQT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmNsZWFudXA7aWYobnVsbCE9cilmb3IobGV0IG89MDtvPHIubGVuZ3RoLTE7bys9Mil7bGV0IHM9cltvXTtpZihzPT09ZSYmcltvKzFdPT09aSl7bGV0IGE9dFs3XSxsPXJbbysyXTtyZXR1cm4gYS5sZW5ndGg+bD9hW2xdOm51bGx9InN0cmluZyI9PXR5cGVvZiBzJiYobys9Mil9cmV0dXJuIG51bGx9KG4sdCxyLGkuaW5kZXgpKSxudWxsIT09QSkoQS5fX25nTGFzdExpc3RlbmVyRm5fX3x8QSkuX19uZ05leHRMaXN0ZW5lckZuX189byxBLl9fbmdMYXN0TGlzdGVuZXJGbl9fPW8saD0hMTtlbHNle289emooaSx0LDAsbywhMSk7bGV0IE89ZS5saXN0ZW4oXyxyLG8pO3AucHVzaChvLE8pLHUmJnUucHVzaChyLEkseSx5KzEpfX1lbHNlIG89emooaSx0LDAsbywhMSk7bGV0IG0sZj1pLm91dHB1dHM7aWYoaCYmbnVsbCE9PWYmJihtPWZbcl0pKXtsZXQgQz1tLmxlbmd0aDtpZihDKWZvcihsZXQgXz0wO188QztfKz0yKXtsZXQgZWU9dFttW19dXVttW18rMV1dLnN1YnNjcmliZShvKSxYPXAubGVuZ3RoO3AucHVzaChvLGVlKSx1JiZ1LnB1c2gocixpLmluZGV4LFgsLShYKzEpKX19fWZ1bmN0aW9uIFVqKG4sdCxlLGkpe3RyeXtyZXR1cm4hMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIHNXKG4sciksITF9fWZ1bmN0aW9uIHpqKG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3RXKDImbi5mbGFncz9vcChuLmluZGV4LHQpOnQpO2xldCBsPVVqKHQsMCxpLHMpLGM9by5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9VWoodCwwLGMscykmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiByJiYhMT09PWwmJihzLnByZXZlbnREZWZhdWx0KCkscy5yZXR1cm5WYWx1ZT0hMSksbH19ZnVuY3Rpb24gTShuPTEpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4oWW4ubEZyYW1lLmNvbnRleHRMVmlldz1mdW5jdGlvbihuLHQpe2Zvcig7bj4wOyl0PXRbMTVdLG4tLTtyZXR1cm4gdH0obixZbi5sRnJhbWUuY29udGV4dExWaWV3KSlbOF19KG4pfWZ1bmN0aW9uIGxtZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT9CNihuLG8sITApOmRmZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIHdpKG4pe2xldCB0PVplKClbMTZdWzZdO2lmKCF0LnByb2plY3Rpb24pe2xldCBpPXQucHJvamVjdGlvbj1KeShuP24ubGVuZ3RoOjEsbnVsbCkscj1pLnNsaWNlKCksbz10LmNoaWxkO2Zvcig7bnVsbCE9PW87KXtsZXQgcz1uP2xtZShvLG4pOjA7bnVsbCE9PXMmJihyW3NdP3Jbc10ucHJvamVjdGlvbk5leHQ9bzppW3NdPW8scltzXT1vKSxvPW8ubmV4dH19fWZ1bmN0aW9uIE5uKG4sdD0wLGUpe2xldCBpPVplKCkscj1EaSgpLG89V2cociwyMituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PW8ucHJvamVjdGlvbiYmKG8ucHJvamVjdGlvbj10KSxGRigpLDY0IT0oNjQmby5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtPNih0WzExXSwwLHQsZSxNNihuLGUsdCksVDYoZS5wYXJlbnR8fHRbNl0sZSx0KSl9KHIsaSxvKX1mdW5jdGlvbiB4cihuLHQsZSl7cmV0dXJuIFBiKG4sIiIsdCwiIixlKSx4cn1mdW5jdGlvbiBQYihuLHQsZSxpLHIpe2xldCBvPVplKCkscz1YZyhvLHQsZSxpKTtyZXR1cm4gcyE9PUduJiZEYShEaSgpLHFyKCksbyxuLHMsb1sxMV0sciwhMSksUGJ9ZnVuY3Rpb24gR0Uobix0LGUsaSxyLG8scyl7bGV0IGE9WmUoKSxsPVFnKGEsdCxlLGkscixvKTtyZXR1cm4gbCE9PUduJiZEYShEaSgpLHFyKCksYSxuLGwsYVsxMV0scywhMSksR0V9ZnVuY3Rpb24gamoobix0LGUsaSxyKXtsZXQgbz1uW2UrMV0scz1udWxsPT09dCxhPWk/Smgobyk6RmcobyksbD0hMTtmb3IoOzAhPT1hJiYoITE9PT1sfHxzKTspe2xldCB1PW5bYSsxXTtkbWUoblthXSx0KSYmKGw9ITAsblthKzFdPWk/JGsodSk6SmsodSkpLGE9aT9KaCh1KTpGZyh1KX1sJiYobltlKzFdPWk/Smsobyk6JGsobykpfWZ1bmN0aW9uIGRtZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJk1iKG4sdCk+PTB9dmFyIHdvPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBTVyhuKXtyZXR1cm4gbi5zdWJzdHJpbmcod28ua2V5LHdvLmtleUVuZCl9ZnVuY3Rpb24gcG1lKG4pe3JldHVybiBuLnN1YnN0cmluZyh3by52YWx1ZSx3by52YWx1ZUVuZCl9ZnVuY3Rpb24gRVcobix0KXtsZXQgZT13by50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD13by5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk+MzI7KXQrKztyZXR1cm4gdH0obix3by5rZXk9dCxlKSxOZyhuLHQsZSkpfWZ1bmN0aW9uIFRXKG4sdCl7bGV0IGU9d28udGV4dEVuZCxpPXdvLmtleT1OZyhuLHQsZSk7cmV0dXJuIGU9PT1pPy0xOihpPXdvLmtleUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk7Zm9yKDt0PGUmJig0NT09PShpPW4uY2hhckNvZGVBdCh0KSl8fDk1PT09aXx8KC0zMyZpKT49NjUmJigtMzMmaSk8PTkwfHxpPj00OCYmaTw9NTcpOyl0Kys7cmV0dXJuIHR9KG4saSxlKSxpPUdqKG4saSxlKSxpPXdvLnZhbHVlPU5nKG4saSxlKSxpPXdvLnZhbHVlRW5kPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0tMSxyPS0xLG89LTEscz10LGE9cztmb3IoO3M8ZTspe2xldCBsPW4uY2hhckNvZGVBdChzKyspO2lmKDU5PT09bClyZXR1cm4gYTszND09PWx8fDM5PT09bD9hPXM9V2oobixsLHMsZSk6dD09PXMtNCYmODU9PT1vJiY4Mj09PXImJjc2PT09aSYmNDA9PT1sP2E9cz1XaihuLDQxLHMsZSk6bD4zMiYmKGE9cyksbz1yLHI9aSxpPS0zMyZsfXJldHVybiBhfShuLGksZSksR2oobixpLGUpKX1mdW5jdGlvbiBEVyhuKXt3by5rZXk9MCx3by5rZXlFbmQ9MCx3by52YWx1ZT0wLHdvLnZhbHVlRW5kPTAsd28udGV4dEVuZD1uLmxlbmd0aH1mdW5jdGlvbiBOZyhuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBHaihuLHQsZSxpKXtyZXR1cm4odD1OZyhuLHQsZSkpPGUmJnQrKyx0fWZ1bmN0aW9uIFdqKG4sdCxlLGkpe2xldCByPS0xLG89ZTtmb3IoO288aTspe2xldCBzPW4uY2hhckNvZGVBdChvKyspO2lmKHM9PXQmJjkyIT09cilyZXR1cm4gbztyPTkyPT1zJiY5Mj09PXI/MDpzfXRocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBPdChuLHQsZSl7cmV0dXJuICRsKG4sdCxlLCExKSxPdH1mdW5jdGlvbiBhdChuLHQpe3JldHVybiAkbChuLHQsbnVsbCwhMCksYXR9ZnVuY3Rpb24gcGwobil7ZWMoUFcsdm1lLG4sITEpfWZ1bmN0aW9uIHZtZShuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gRFcobiksVFcobixOZyhuLDAsd28udGV4dEVuZCkpfSh0KTtlPj0wO2U9VFcodCxlKSlQVyhuLFNXKHQpLHBtZSh0KSl9ZnVuY3Rpb24gZWEobil7ZWMoRWEsWmMsbiwhMCl9ZnVuY3Rpb24gWmMobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIERXKG4pLEVXKG4sTmcobiwwLHdvLnRleHRFbmQpKX0odCk7ZT49MDtlPUVXKHQsZSkpRWEobixTVyh0KSwhMCl9ZnVuY3Rpb24gJGwobix0LGUsaSl7bGV0IHI9WmUoKSxvPURpKCkscz1lZCgyKTtvLmZpcnN0VXBkYXRlUGFzcyYmSVcobyxuLHMsaSksdCE9PUduJiZzcyhyLHMsdCkmJlJXKG8sby5kYXRhW1RzKCldLHIsclsxMV0sbixyW3MrMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49Y28oJHMobikpKSksbn0odCxlKSxpLHMpfWZ1bmN0aW9uIGVjKG4sdCxlLGkpe2xldCByPURpKCksbz1lZCgyKTtyLmZpcnN0VXBkYXRlUGFzcyYmSVcocixudWxsLG8saSk7bGV0IHM9WmUoKTtpZihlIT09R24mJnNzKHMsbyxlKSl7bGV0IGE9ci5kYXRhW1RzKCldO2lmKE9XKGEsaSkmJiFBVyhyLG8pKXtsZXQgbD1pP2EuY2xhc3Nlc1dpdGhvdXRIb3N0OmEuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PWwmJihlPWJrKGwsZXx8IiIpKSxvRihyLGEscyxlLGkpfWVsc2UhZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtyPT09R24mJihyPVdpKTtsZXQgbD0wLGM9MCx1PTA8ci5sZW5ndGg/clswXTpudWxsLGQ9MDxvLmxlbmd0aD9vWzBdOm51bGw7Zm9yKDtudWxsIT09dXx8bnVsbCE9PWQ7KXtsZXQgbSxwPWw8ci5sZW5ndGg/cltsKzFdOnZvaWQgMCxoPWM8by5sZW5ndGg/b1tjKzFdOnZvaWQgMCxmPW51bGw7dT09PWQ/KGwrPTIsYys9MixwIT09aCYmKGY9ZCxtPWgpKTpudWxsPT09ZHx8bnVsbCE9PXUmJnU8ZD8obCs9MixmPXUpOihjKz0yLGY9ZCxtPWgpLG51bGwhPT1mJiZSVyhuLHQsZSxpLGYsbSxzLGEpLHU9bDxyLmxlbmd0aD9yW2xdOm51bGwsZD1jPG8ubGVuZ3RoP29bY106bnVsbH19KHIsYSxzLHNbMTFdLHNbbysxXSxzW28rMV09ZnVuY3Rpb24obix0LGUpe2lmKG51bGw9PWV8fCIiPT09ZSlyZXR1cm4gV2k7bGV0IGk9W10scj0kcyhlKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKW4oaSxyW29dLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Ygcilmb3IobGV0IG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZuKGksbyxyW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiByJiZ0KGkscik7cmV0dXJuIGl9KG4sdCxlKSxpLG8pfX1mdW5jdGlvbiBBVyhuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIElXKG4sdCxlLGkpe2xldCByPW4uZGF0YTtpZihudWxsPT09cltlKzFdKXtsZXQgbz1yW1RzKCldLHM9QVcobixlKTtPVyhvLGkpJiZudWxsPT09dCYmIXMmJih0PSExKSx0PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPU5GKG4pLG89aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1yKTA9PT0oaT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKSYmKGU9ZmIoZT11ayhudWxsLG4sdCxlLGkpLHQuYXR0cnMsaSksbz1udWxsKTtlbHNle2xldCBzPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT1zfHxuW3NdIT09cilpZihlPXVrKHIsbix0LGUsaSksbnVsbD09PW8pe2xldCBsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3M7aWYoMCE9PUZnKGkpKXJldHVybiBuW0poKGkpXX0obix0LGkpO3ZvaWQgMCE9PWwmJkFycmF5LmlzQXJyYXkobCkmJihsPXVrKG51bGwsbix0LGxbMV0saSksbD1mYihsLHQuYXR0cnMsaSksZnVuY3Rpb24obix0LGUsaSl7bltKaChlP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpXT1pfShuLHQsaSxsKSl9ZWxzZSBvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaSxyPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbz0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7bzxyO28rKylpPWZiKGksbltvXS5ob3N0QXR0cnMsZSk7cmV0dXJuIGZiKGksdC5hdHRycyxlKX0obix0LGkpfXJldHVybiB2b2lkIDAhPT1vJiYoaT90LnJlc2lkdWFsQ2xhc3Nlcz1vOnQucmVzaWR1YWxTdHlsZXM9byksZX0ocixvLHQsaSksZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW8/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxhPUpoKHMpLGw9Rmcocyk7bltpXT1lO2xldCB1LGM9ITE7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IGQ9ZTt1PWRbMV0sKG51bGw9PT11fHxNYihkLHUpPjApJiYoYz0hMCl9ZWxzZSB1PWU7aWYocilpZigwIT09bCl7bGV0IHA9SmgoblthKzFdKTtuW2krMV09R1MocCxhKSwwIT09cCYmKG5bcCsxXT1sayhuW3ArMV0saSkpLG5bYSsxXT1mdW5jdGlvbihuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30oblthKzFdLGkpfWVsc2UgbltpKzFdPUdTKGEsMCksMCE9PWEmJihuW2ErMV09bGsoblthKzFdLGkpKSxhPWk7ZWxzZSBuW2krMV09R1MobCwwKSwwPT09YT9hPWk6bltsKzFdPWxrKG5bbCsxXSxpKSxsPWk7YyYmKG5baSsxXT1KayhuW2krMV0pKSxqaihuLHUsaSwhMCksamoobix1LGksITEpLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89cj9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgdCYmTWIobyx0KT49MCYmKGVbaSsxXT0kayhlW2krMV0pKX0odCx1LG4saSxvKSxzPUdTKGEsbCksbz90LmNsYXNzQmluZGluZ3M9czp0LnN0eWxlQmluZGluZ3M9c30ocixvLHQsZSxzLGkpfX1mdW5jdGlvbiB1ayhuLHQsZSxpLHIpe2xldCBvPW51bGwscz1lLmRpcmVjdGl2ZUVuZCxhPWUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09YT9hPWUuZGlyZWN0aXZlU3RhcnQ6YSsrO2E8cyYmKG89dFthXSxpPWZiKGksby5ob3N0QXR0cnMsciksbyE9PW4pOylhKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1hKSxpfWZ1bmN0aW9uIGZiKG4sdCxlKXtsZXQgaT1lPzE6MixyPS0xO2lmKG51bGwhPT10KWZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyJudW1iZXIiPT10eXBlb2Ygcz9yPXM6cj09PWkmJihBcnJheS5pc0FycmF5KG4pfHwobj12b2lkIDA9PT1uP1tdOlsiIixuXSksRWEobixzLCEhZXx8dFsrK29dKSl9cmV0dXJuIHZvaWQgMD09PW4/bnVsbDpufWZ1bmN0aW9uIFBXKG4sdCxlKXtFYShuLHQsJHMoZSkpfWZ1bmN0aW9uIFJXKG4sdCxlLGkscixvLHMsYSl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2xldCBsPW4uZGF0YSxjPWxbYSsxXSx1PWZ1bmN0aW9uKG4pe3JldHVybiAxPT0oMSZuKX0oYyk/cWoobCx0LGUscixGZyhjKSxzKTp2b2lkIDA7eUUodSl8fCh5RShvKXx8ZnVuY3Rpb24obil7cmV0dXJuIDI9PSgyJm4pfShjKSYmKG89cWoobCxudWxsLGUscixhLHMpKSxmdW5jdGlvbihuLHQsZSxpLHIpe2lmKHQpcj9uLmFkZENsYXNzKGUsaSk6bi5yZW1vdmVDbGFzcyhlLGkpO2Vsc2V7bGV0IG89LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6YWwuRGFzaENhc2U7bnVsbD09cj9uLnJlbW92ZVN0eWxlKGUsaSxvKTooInN0cmluZyI9PXR5cGVvZiByJiZyLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihyPXIuc2xpY2UoMCwtMTApLG98PWFsLkltcG9ydGFudCksbi5zZXRTdHlsZShlLGkscixvKSl9fShpLHMsSUUoVHMoKSxlKSxyLG8pKX1mdW5jdGlvbiBxaihuLHQsZSxpLHIsbyl7bGV0IGEscz1udWxsPT09dDtmb3IoO3I+MDspe2xldCBsPW5bcl0sYz1BcnJheS5pc0FycmF5KGwpLHU9Yz9sWzFdOmwsZD1udWxsPT09dSxwPWVbcisxXTtwPT09R24mJihwPWQ/V2k6dm9pZCAwKTtsZXQgaD1kP25rKHAsaSk6dT09PWk/cDp2b2lkIDA7aWYoYyYmIXlFKGgpJiYoaD1uayhsLGkpKSx5RShoKSYmKGE9aCxzKSlyZXR1cm4gYTtsZXQgZj1uW3IrMV07cj1zP0poKGYpOkZnKGYpfWlmKG51bGwhPT10KXtsZXQgbD1vP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9bCYmKGE9bmsobCxpKSl9cmV0dXJuIGF9ZnVuY3Rpb24geUUobil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gT1cobix0KXtyZXR1cm4gMCE9KG4uZmxhZ3MmKHQ/MTY6MzIpKX1mdW5jdGlvbiBEKG4sdD0iIil7bGV0IGU9WmUoKSxpPURpKCkscj1uKzIyLG89aS5maXJzdENyZWF0ZVBhc3M/V2coaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPWVOKGVbMTFdLHQpO0xFKGksZSxzLG8pLFdjKG8sITEpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBxZSgiIixuLCIiKSx5dH1mdW5jdGlvbiBxZShuLHQsZSl7bGV0IGk9WmUoKSxyPVhnKGksbix0LGUpO3JldHVybiByIT09R24mJm5kKGksVHMoKSxyKSxxZX1mdW5jdGlvbiBhcChuLHQsZSxpLHIpe2xldCBvPVplKCkscz1RZyhvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1HbiYmbmQobyxUcygpLHMpLGFwfWZ1bmN0aW9uIFdFKG4sdCxlLGkscixvLHMpe2xldCBhPVplKCksbD1LZyhhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09R24mJm5kKGEsVHMoKSxsKSxXRX1mdW5jdGlvbiBSYihuLHQsZSl7ZWMoRWEsWmMsWGcoWmUoKSxuLHQsZSksITApfWZ1bmN0aW9uIEFhKG4sdCxlKXtsZXQgaT1aZSgpO3JldHVybiBzcyhpLFVnKCksdCkmJkRhKERpKCkscXIoKSxpLG4sdCxpWzExXSxlLCEwKSxBYX1mdW5jdGlvbiByMChuLHQsZSl7bGV0IGk9WmUoKTtpZihzcyhpLFVnKCksdCkpe2xldCBvPURpKCkscz1xcigpO0RhKG8scyxpLG4sdCxvVyhORihvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIHIwfXZhciBqaD12b2lkIDAsR21lPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0samhdLFtbIkFNIiwiUE0iXSxqaCxqaF0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0samgsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLGpoLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsamgsInsxfSAnYXQnIHswfSIsamhdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0sZGs9e307ZnVuY3Rpb24gdGEobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1Zaih0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPVlqKGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIEdtZTt0aHJvdyBuZXcgTXQoNzAxLCExKX1mdW5jdGlvbiBZaihuKXtyZXR1cm4gbiBpbiBka3x8KGRrW25dPVdyLm5nJiZXci5uZy5jb21tb24mJldyLm5nLmNvbW1vbi5sb2NhbGVzJiZXci5uZy5jb21tb24ubG9jYWxlc1tuXSksZGtbbl19dmFyIGJyPSgoKT0+e3JldHVybihuPWJyfHwoYnI9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixicjt2YXIgbn0pKCkscW1lPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgYkU9ImVuLVVTIixLVz17bWFya2VyOiJlbGVtZW50In0sWlc9e21hcmtlcjoiSUNVIn0scWw9KCgpPT57cmV0dXJuKG49cWx8fChxbD17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIscWw7dmFyIG59KSgpLEpXPWJFO2Z1bmN0aW9uICRXKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP0Q2KG4sMCxlKTpNYShlW3JdKX1mdW5jdGlvbiBlNyhuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmMD09KDImdC5mbGFncykpZm9yKGxldCBsPTE7bDxvLmxlbmd0aDtsKyspWmgobixzLGVbb1tsXV0sYSwhMSl9fWZ1bmN0aW9uIHQ3KG4sdCl7aWYobi5wdXNoKHQpLG4ubGVuZ3RoPjEpZm9yKGxldCBlPW4ubGVuZ3RoLTI7ZT49MDtlLS0pe2xldCBpPW5bZV07bjcoaSl8fFptZShpLHQpJiZudWxsPT09Sm1lKGkpJiYkbWUoaSx0LmluZGV4KX19ZnVuY3Rpb24gbjcobil7cmV0dXJuISg2NCZuLnR5cGUpfWZ1bmN0aW9uIFptZShuLHQpe3JldHVybiBuNyh0KXx8bi5pbmRleD50LmluZGV4fWZ1bmN0aW9uIEptZShuKXtsZXQgdD1uLmluc2VydEJlZm9yZUluZGV4O3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMF06dH1mdW5jdGlvbiAkbWUobix0KXtsZXQgZT1uLmluc2VydEJlZm9yZUluZGV4O0FycmF5LmlzQXJyYXkoZSk/ZVswXT10OihJNigkVyxlNyksbi5pbnNlcnRCZWZvcmVJbmRleD10KX1mdW5jdGlvbiB0YihuLHQpe2xldCBlPW4uZGF0YVt0XTtyZXR1cm4gbnVsbD09PWV8fCJzdHJpbmciPT10eXBlb2YgZT9udWxsOmUuaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP2U6ZS52YWx1ZX1mdW5jdGlvbiBuZ2Uobix0LGUpe2xldCBpPXJOKG4sZSw2NCxudWxsLG51bGwpO3JldHVybiB0Nyh0LGkpLGl9ZnVuY3Rpb24gcUUobix0KXtsZXQgZT10W24uY3VycmVudENhc2VMVmlld0luZGV4XTtyZXR1cm4gbnVsbD09PWU/ZTplPDA/fmU6ZX1mdW5jdGlvbiBpZ2Uobil7cmV0dXJuIG4+Pj4xN31mdW5jdGlvbiByZ2Uobil7cmV0dXJuKDEzMTA3MCZuKT4+PjF9dmFyIG1iPTAsbmI9MDtmdW5jdGlvbiBpNyhuLHQsZSxpKXtsZXQgcyxyPWVbMTFdLG89bnVsbDtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2xldCBjPXRbKythXTtudWxsPT09ZVtjXSYmKGVbY109ZU4ocixsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmxldCB1LGQsYz1pZ2UobCk7aWYobnVsbD09PW8mJihvPWMscz1ORShyLGkpKSxjPT09bz8odT1pLGQ9cyk6KHU9bnVsbCxkPU1hKGVbY10pKSxudWxsIT09ZCl7bGV0IG09cmdlKGwpO1poKHIsZCxlW21dLHUsITEpO2xldCBfPXRiKG4sbSk7aWYobnVsbCE9PV8mJiJvYmplY3QiPT10eXBlb2YgXyl7bGV0IHk9cUUoXyxlKTtudWxsIT09eSYmaTcobixfLmNyZWF0ZVt5XSxlLGVbXy5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmxldCBoPXRbKythXSxmPXRbKythXTt1TihyLElFKGw+Pj4xLGUpLG51bGwsbnVsbCxoLGYsbnVsbCl9ZWxzZSBzd2l0Y2gobCl7Y2FzZSBaVzpsZXQgYz10WysrYV0sdT10WysrYV07bnVsbD09PWVbdV0mJlljKGVbdV09R2hlKHIsYyksZSk7YnJlYWs7Y2FzZSBLVzpsZXQgZD10WysrYV0scD10WysrYV07bnVsbD09PWVbcF0mJlljKGVbcF09dE4ocixkLG51bGwpLGUpfX19ZnVuY3Rpb24gcjcobix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXSxhPWVbKytvXTtpZihzJnIpe2xldCBsPSIiO2ZvcihsZXQgYz1vKzE7Yzw9bythO2MrKyl7bGV0IHU9ZVtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbCs9dTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdSlpZih1PDApbCs9cW4odFtpLXVdKTtlbHNle2xldCBkPXU+Pj4yO3N3aXRjaCgzJnUpe2Nhc2UgMTpsZXQgcD1lWysrY10saD1lWysrY10sZj1uLmRhdGFbZF07InN0cmluZyI9PXR5cGVvZiBmP3VOKHRbMTFdLHRbZF0sbnVsbCxmLHAsbCxoKTpEYShuLGYsdCxwLGwsdFsxMV0saCwhMSk7YnJlYWs7Y2FzZSAwOmxldCBtPXRbZF07bnVsbCE9PW0mJng2KHRbMTFdLG0sbCk7YnJlYWs7Y2FzZSAyOmNnZShuLHRiKG4sZCksdCxsKTticmVhaztjYXNlIDM6WGoobix0YihuLGQpLGksdCl9fX19ZWxzZXtsZXQgbD1lW28rMV07aWYobD4wJiYzPT0oMyZsKSl7bGV0IHU9dGIobixsPj4+Mik7dFt1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF08MCYmWGoobix1LGksdCl9fW8rPWF9fWZ1bmN0aW9uIFhqKG4sdCxlLGkpe2xldCByPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO2lmKG51bGwhPT1yKXtsZXQgbz1tYjtyPDAmJihyPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPX5yLG89LTEpLHI3KG4saSx0LnVwZGF0ZVtyXSxlLG8pfX1mdW5jdGlvbiBjZ2Uobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1uLmNhc2VzLmluZGV4T2YodCk7aWYoLTE9PT1lKXN3aXRjaChuLnR5cGUpe2Nhc2UgMTp7bGV0IGk9ZnVuY3Rpb24obix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gdGEobilbYnIuUGx1cmFsQ2FzZV19KHQpKHBhcnNlSW50KG4sMTApKSxpPXFtZVtlXTtyZXR1cm4gdm9pZCAwIT09aT9pOiJvdGhlciJ9KHQsSlcpO2U9bi5jYXNlcy5pbmRleE9mKGkpLC0xPT09ZSYmIm90aGVyIiE9PWkmJihlPW4uY2FzZXMuaW5kZXhPZigib3RoZXIiKSk7YnJlYWt9Y2FzZSAwOmU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpfXJldHVybi0xPT09ZT9udWxsOmV9KHQsaSk7aWYocUUodCxlKSE9PXImJihvNyhuLHQsZSksZVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09bnVsbD09PXI/bnVsbDp+cixudWxsIT09cikpe2xldCBzPWVbdC5hbmNob3JJZHhdO3MmJmk3KG4sdC5jcmVhdGVbcl0sZSxzKX19ZnVuY3Rpb24gbzcobix0LGUpe2xldCBpPXFFKHQsZSk7aWYobnVsbCE9PWkpe2xldCByPXQucmVtb3ZlW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHM+MCl7bGV0IGE9SUUocyxlKTtudWxsIT09YSYmUjYoZVsxMV0sYSl9ZWxzZSBvNyhuLHRiKG4sfnMpLGUpfX19ZnVuY3Rpb24gZGdlKCl7bGV0IGUsaSxuPVtdLHQ9LTE7ZnVuY3Rpb24gbyhhLGwpe3Q9MDtsZXQgYz1xRShhLGwpO2k9bnVsbCE9PWM/YS5yZW1vdmVbY106V2l9ZnVuY3Rpb24gcygpe2lmKHQ8aS5sZW5ndGgpe2xldCBhPWlbdCsrXTtyZXR1cm4gYT4wP2VbYV06KG4ucHVzaCh0LGkpLG8oZVsxXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgeEU9L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2kscGdlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSxoZ2U9L1x1ZmZmZChcZCspXHVmZmZkLyxzNz0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sZmdlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxtZ2U9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLGdnZT0vXHVFNTAwL2c7ZnVuY3Rpb24gYTcobix0LGUsaSxyLG8scyl7bGV0IGE9cWcobixpLDEsbnVsbCksbD1hPDxxbC5TSElGVCxjPWxiKCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9cWwuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1xbC5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PVlrJiYoWWs9bigpKX0oZGdlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IHU9ck4obixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO3Q3KGUsdSk7bGV0IGQ9dS5pbmRleDtyZXR1cm4gV2ModSwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KEk2KCRXLGU3KSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmY0coIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLGQpLHV9ZnVuY3Rpb24geWdlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goeEUpLGw9YTcobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZyYihyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gcmIobix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoeEUpLHU9MDtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXTtpZigxJmQpe2xldCBoPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWgpLHV8PWw3KGgpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT11LG5bYV09bi5sZW5ndGgtbCx1fWZ1bmN0aW9uIHhnZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24gbDcobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIFFqKG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD1mZ2UuZXhlYyhuKSk7KXI/dFswXT09PWBcdWZmZmQvKiR7b31cdWZmZmRgJiYoaT10LmluZGV4LHI9ITEpOihlKz1uLnN1YnN0cmluZyhpLHQuaW5kZXgrdFswXS5sZW5ndGgpLG89dFsxXSxyPSEwKTtyZXR1cm4gZSs9bi5zbGljZShpKSxlfWZ1bmN0aW9uIGM3KG4sdCxlLGkscixvKXtsZXQgcz0wLGE9e3R5cGU6ci50eXBlLGN1cnJlbnRDYXNlTFZpZXdJbmRleDpxZyhuLHQsMSxudWxsKSxhbmNob3JJZHg6byxjYXNlczpbXSxjcmVhdGU6W10scmVtb3ZlOltdLHVwZGF0ZTpbXX07KGZ1bmN0aW9uKG4sdCxlKXtuLnB1c2gobDcodC5tYWluQmluZGluZyksMiwtMS10Lm1haW5CaW5kaW5nLGU8PDJ8Mil9KShlLHIsbyksZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGF0YVt0XTtudWxsPT09aT9uLmRhdGFbdF09ZTppLnZhbHVlPWV9KG4sbyxhKTtsZXQgbD1yLnZhbHVlcztmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXSxkPVtdO2ZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXtsZXQgaD11W3BdO2lmKCJzdHJpbmciIT10eXBlb2YgaCl7bGV0IGY9ZC5wdXNoKGgpLTE7dVtwXT1gXHgzYyEtLVx1ZmZmZCR7Zn1cdWZmZmQtLVx4M2VgfX1zPVNnZShuLGEsdCxlLGksci5jYXNlc1tjXSx1LmpvaW4oIiIpLGQpfHN9cyYmZnVuY3Rpb24obix0LGUpe24ucHVzaCh0LDEsZTw8MnwzKX0oZSxzLG8pfWZ1bmN0aW9uIE1nZShuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTAsbz1zRihuPW4ucmVwbGFjZShzNyxmdW5jdGlvbihzLGEsbCl7cmV0dXJuIGk9InNlbGVjdCI9PT1sPzA6MSxyPXBhcnNlSW50KGEuc2xpY2UoMSksMTApLCIifSkpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7KXtsZXQgYT1vW3MrK10udHJpbSgpOzE9PT1pJiYoYT1hLnJlcGxhY2UoL1xzKig/Oj0pPyhcdyspXHMqLywiJDEiKSksYS5sZW5ndGgmJnQucHVzaChhKTtsZXQgbD1zRihvW3MrK10pO3QubGVuZ3RoPmUubGVuZ3RoJiZlLnB1c2gobCl9cmV0dXJue3R5cGU6aSxtYWluQmluZGluZzpyLGNhc2VzOnQsdmFsdWVzOmV9fWZ1bmN0aW9uIHNGKG4pe2lmKCFuKXJldHVybltdO2xldCBvLHQ9MCxlPVtdLGk9W10scj0vW3t9XS9nO2ZvcihyLmxhc3RJbmRleD0wO289ci5leGVjKG4pOyl7bGV0IGE9by5pbmRleDtpZigifSI9PW9bMF0pe2lmKGUucG9wKCksMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7czcudGVzdChsKT9pLnB1c2goTWdlKGwpKTppLnB1c2gobCksdD1hKzF9fWVsc2V7aWYoMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7aS5wdXNoKGwpLHQ9YSsxfWUucHVzaCgieyIpfX1sZXQgcz1uLnN1YnN0cmluZyh0KTtyZXR1cm4gaS5wdXNoKHMpLGl9ZnVuY3Rpb24gU2dlKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz1bXSx1PVtdO3QuY2FzZXMucHVzaChvKSx0LmNyZWF0ZS5wdXNoKGwpLHQucmVtb3ZlLnB1c2goYyksdC51cGRhdGUucHVzaCh1KTtsZXQgcD1zNigkRygpKS5nZXRJbmVydEJvZHlFbGVtZW50KHMpLGg9VWsocCl8fHA7cmV0dXJuIGg/dTcobix0LGUsaSxsLGMsdSxoLHIsYSwwKTowfWZ1bmN0aW9uIHU3KG4sdCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9MCxwPWEuZmlyc3RDaGlsZDtmb3IoO3A7KXtsZXQgaD1xZyhuLGUsMSxudWxsKTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpsZXQgZj1wLG09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoVmsuaGFzT3duUHJvcGVydHkobSkpe3BrKHIsS1csbSxsLGgpLG4uZGF0YVtoXT1tO2xldCBJPWYuYXR0cmlidXRlcztmb3IobGV0IEE9MDtBPEkubGVuZ3RoO0ErKyl7bGV0IE89SS5pdGVtKEEpLGVlPU8ubmFtZS50b0xvd2VyQ2FzZSgpO08udmFsdWUubWF0Y2goeEUpP3U2Lmhhc093blByb3BlcnR5KGVlKSYmcmIocyxPLnZhbHVlLGgsTy5uYW1lLDAscUZbZWVdP0ViOm51bGwpOkFnZShyLGgsTyl9ZD11NyhuLHQsZSxpLHIsbyxzLHAsaCxjLHUrMSl8ZCxLaihvLGgsdSl9YnJlYWs7Y2FzZSBOb2RlLlRFWFRfTk9ERTpsZXQgQz1wLnRleHRDb250ZW50fHwiIixfPUMubWF0Y2goeEUpO3BrKHIsbnVsbCxfPyIiOkMsbCxoKSxLaihvLGgsdSksXyYmKGQ9cmIocyxDLGgsbnVsbCwwLG51bGwpfGQpO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6bGV0IHk9aGdlLmV4ZWMocC50ZXh0Q29udGVudHx8IiIpO2lmKHkpe2xldCBBPWNbcGFyc2VJbnQoeVsxXSwxMCldO3BrKHIsWlcsIiIsbCxoKSxjNyhuLGUsaSxsLEEsaCksRWdlKG8saCx1KX19cD1wLm5leHRTaWJsaW5nfXJldHVybiBkfWZ1bmN0aW9uIEtqKG4sdCxlKXswPT09ZSYmbi5wdXNoKHQpfWZ1bmN0aW9uIEVnZShuLHQsZSl7MD09PWUmJihuLnB1c2gofnQpLG4ucHVzaCh0KSl9ZnVuY3Rpb24gcGsobix0LGUsaSxyKXtudWxsIT09dCYmbi5wdXNoKHQpLG4ucHVzaChlLHIsZnVuY3Rpb24obix0LGUpe3JldHVybiAwfHQ8PDE3fGU8PDF9KDAsaSxyKSl9ZnVuY3Rpb24gQWdlKG4sdCxlKXtuLnB1c2godDw8MXwxLGUubmFtZSxlLnZhbHVlKX12YXIgSWdlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxQZ2U9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyxSZ2U9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxPZ2U9L3soW0EtWjAtOV9dKyl9L2csa2dlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxGZ2U9L1wvXCovLE5nZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gZDcobix0LGU9LTEpe2xldCBpPURpKCkscj1aZSgpLG89MjIrbixzPWVwKGkuY29uc3RzLHQpLGE9bGIoKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPWxiKCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4gUWoobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH1cdWZmZmRgKSsyK3QudG9TdHJpbmcoKS5sZW5ndGgsaT1uLnNlYXJjaChuZXcgUmVnRXhwKGBcdWZmZmRcXC9cXCpcXGQrOiR7dH1cdWZmZmRgKSk7cmV0dXJuIFFqKG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgdT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGdnZSwiICIpfShyKS5zcGxpdChtZ2UpO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXtsZXQgcD11W2RdO2lmKDA9PSgxJmQpKXtsZXQgaD1zRihwKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IG09aFtmXTtpZigwPT0oMSZmKSl7bGV0IEM9bTsiIiE9PUMmJnlnZShuLHMsY1swXSxhLGwsZSxDKX1lbHNle2xldCBDPW07aWYoIm9iamVjdCIhPXR5cGVvZiBDKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO2M3KG4sZSxsLHQsQyxhNyhuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGg9NDc9PT1wLmNoYXJDb2RlQXQoMCksbT0ocC5jaGFyQ29kZUF0KGg/MTowKSwyMitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoaD8yOjEpKSk7aWYoaCljLnNoaWZ0KCksV2MobGIoKSwhMSk7ZWxzZXtsZXQgQz1uZ2UobixjWzBdLG0pO2MudW5zaGlmdChbXSksV2MoQywhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLHU9UzYoaSxhPT09cls2XT9udWxsOmEscik7KGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bMTFdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W28rK10sYT10W29dLGw9KHMmcWwuQ09NTUVOVCk9PT1xbC5DT01NRU5ULGM9KHMmcWwuQVBQRU5EX0VBR0VSTFkpPT09cWwuQVBQRU5EX0VBR0VSTFksdT1zPj4+cWwuU0hJRlQsZD1uW3VdO251bGw9PT1kJiYoZD1uW3VdPWw/ci5jcmVhdGVDb21tZW50KGEpOmVOKHIsYSkpLGMmJm51bGwhPT1lJiZaaChyLGUsZCxpLCExKX19KShyLGwuY3JlYXRlLHUsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxURyghMCl9ZnVuY3Rpb24gcDcoKXtURyghMSl9ZnVuY3Rpb24gWUUobix0LGUpe2Q3KG4sdCxlKSxwNygpfWZ1bmN0aW9uIE9iKG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYobWJ8PTE8PE1hdGgubWluKG5iLDMxKSksbmIrK30oc3MoWmUoKSxVZygpLG4pKSxPYn1mdW5jdGlvbiBYRShuKXshZnVuY3Rpb24obix0LGUpe2lmKG5iPjApe2xldCBpPW4uZGF0YVtlXTtyNyhuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLCR1KCktbmItMSxtYil9bWI9MCxuYj0wfShEaSgpLFplKCksbisyMil9ZnVuY3Rpb24gUUUobix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKElnZS50ZXN0KG4pKXtsZXQgaT17fSxyPVswXTtlPWUucmVwbGFjZShQZ2UsKG8scyxhKT0+e2xldCBsPXN8fGEsYz1pW2xdfHxbXTtpZihjLmxlbmd0aHx8KGwuc3BsaXQoInwiKS5mb3JFYWNoKG09PntsZXQgQz1tLm1hdGNoKE5nZSksXz1DP3BhcnNlSW50KENbMV0sMTApOjAseT1GZ2UudGVzdChtKTtjLnB1c2goW18seSxtXSl9KSxpW2xdPWMpLCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7bH1gKTtsZXQgdT1yW3IubGVuZ3RoLTFdLGQ9MDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rKylpZihjW21dWzBdPT09dSl7ZD1tO2JyZWFrfWxldFtwLGgsZl09Y1tkXTtyZXR1cm4gaD9yLnBvcCgpOnUhPT1wJiZyLnB1c2gocCksYy5zcGxpY2UoZCwxKSxmfSl9cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKGU9ZS5yZXBsYWNlKFJnZSwoaSxyLG8scyxhLGwpPT50Lmhhc093blByb3BlcnR5KG8pP2Ake3J9JHt0W29dfSR7bH1gOmkpLGU9ZS5yZXBsYWNlKE9nZSwoaSxyKT0+dC5oYXNPd25Qcm9wZXJ0eShyKT90W3JdOmkpLGU9ZS5yZXBsYWNlKGtnZSwoaSxyKT0+e2lmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIElDVSAtICR7aX0gd2l0aCBrZXk6ICR7cn1gKTtyZXR1cm4gby5zaGlmdCgpfXJldHVybiBpfSkpLGV9KG4sdCl9ZnVuY3Rpb24gYUYobix0LGUsaSxyKXtpZihuPXFpKG4pLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspYUYobltvXSx0LGUsaSxyKTtlbHNle2xldCBvPURpKCkscz1aZSgpLGE9a2cobik/bjpxaShuLnByb3ZpZGUpLGw9XzYobiksYz1NbygpLHU9MTA0ODU3NSZjLnByb3ZpZGVySW5kZXhlcyxkPWMuZGlyZWN0aXZlU3RhcnQscD1jLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoa2cobil8fCFuLm11bHRpKXtsZXQgaD1uZXcgS2gobCxyLHcpLGY9ZmsoYSx0LHI/dTp1K3AsZCk7LTE9PT1mPyhkRShjYihjLHMpLG8sYSksaGsobyxuLHQubGVuZ3RoKSx0LnB1c2goYSksYy5kaXJlY3RpdmVTdGFydCsrLGMuZGlyZWN0aXZlRW5kKyssciYmKGMucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxlLnB1c2goaCkscy5wdXNoKGgpKTooZVtmXT1oLHNbZl09aCl9ZWxzZXtsZXQgaD1mayhhLHQsdStwLGQpLGY9ZmsoYSx0LHUsdStwKSxtPWg+PTAmJmVbaF0sQz1mPj0wJiZlW2ZdO2lmKHImJiFDfHwhciYmIW0pe2RFKGNiKGMscyksbyxhKTtsZXQgXz1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBLaChuLGUsdyk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsaDcobyxyLGkmJiFlKSxvfShyP1VnZTpIZ2UsZS5sZW5ndGgscixpLGwpOyFyJiZDJiYoZVtmXS5wcm92aWRlckZhY3Rvcnk9XyksaGsobyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChfKSxzLnB1c2goXyl9ZWxzZSBoayhvLG4saD4tMT9oOmYsaDcoZVtyP2Y6aF0sbCwhciYmaSkpOyFyJiZpJiZDJiZlW2ZdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gaGsobix0LGUsaSl7bGV0IHI9a2codCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP3FpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IHU9Yy5pbmRleE9mKGUpOy0xPT09dT9jLnB1c2goZSxbaSxsXSk6Y1t1KzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gaDcobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIGZrKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gSGdlKG4sdCxlLGkpe3JldHVybiBsRih0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBVZ2Uobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT1DYihlLGVbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7bz1hLnNsaWNlKDAscyksbEYocixvKTtmb3IobGV0IGw9cztsPGEubGVuZ3RoO2wrKylvLnB1c2goYVtsXSl9ZWxzZSBvPVtdLGxGKHIsbyk7cmV0dXJuIG99ZnVuY3Rpb24gbEYobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gJHQobix0PVtdKXtyZXR1cm4gZT0+e2UucHJvdmlkZXJzUmVzb2x2ZXI9KGkscik9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1EaSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtsZXQgcj1RbChuKTthRihlLGkuZGF0YSxpLmJsdWVwcmludCxyLCEwKSxhRih0LGkuZGF0YSxpLmJsdWVwcmludCxyLCExKX19KGkscj9yKG4pOm4sdCl9fXZhciBpcD1jbGFzc3t9LGNGPWNsYXNze30sdUY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IGhiKHRoaXMpO2xldCBpPUlnKHQpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9S1MoaS5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9VTYodCxlLFt7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGNvKHQpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtsZXQgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fSxkRj1jbGFzcyBleHRlbmRzIGNGe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXR9Y3JlYXRlKHQpe3JldHVybiBuZXcgdUYodGhpcy5tb2R1bGVUeXBlLHQpfX0scEY9Y2xhc3MgZXh0ZW5kcyBpcHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgaGIodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2xldCByPW5ldyBtRShbLi4udCx7cHJvdmlkZTppcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpFbyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGV8fFFGKCksaSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9cixyLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kodCl9fSxHZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZSl7aWYoIWUuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGUuaWQpKXtsZXQgaT1mNigwLGUudHlwZSkscj1pLmxlbmd0aD4wP2Z1bmN0aW9uKG4sdCxlPW51bGwpe3JldHVybiBuZXcgcEYobix0LGUpLmluamVjdG9yfShbaV0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHtlLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoZS5pZCxyKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGUuaWQpfW5nT25EZXN0cm95KCl7dHJ5e2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09ZSYmZS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IG4oUihucCkpfSksbn0pKCk7ZnVuY3Rpb24gbHAobix0LGUpe2xldCBpPUVzKCkrbixyPVplKCk7cmV0dXJuIHJbaV09PT1Hbj9LYyhyLGksZT90LmNhbGwoZSk6dCgpKTpJYihyLGkpfWZ1bmN0aW9uIEhuKG4sdCxlLGkpe3JldHVybiBmNyhaZSgpLEVzKCksbix0LGUsaSl9ZnVuY3Rpb24gdG8obix0LGUsaSxyKXtyZXR1cm4gbTcoWmUoKSxFcygpLG4sdCxlLGkscil9ZnVuY3Rpb24ga2Iobix0LGUsaSxyLG8pe3JldHVybiBnNyhaZSgpLEVzKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIG1OKG4sdCxlLGkscixvLHMpe3JldHVybiBfNyhaZSgpLEVzKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gZ04obix0LGUsaSxyLG8scyxhKXtsZXQgbD1FcygpK24sYz1aZSgpLHU9bGwoYyxsLGUsaSxyLG8pO3JldHVybiBzcyhjLGwrNCxzKXx8dT9LYyhjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpJYihjLGwrNSl9ZnVuY3Rpb24gRmIobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09R24/dm9pZCAwOmV9ZnVuY3Rpb24gZjcobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gc3MobixzLHIpP0tjKG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6RmIobixzKzEpfWZ1bmN0aW9uIG03KG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gZWYobixhLHIsbyk/S2MobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6RmIobixhKzIpfWZ1bmN0aW9uIGc3KG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBqRShuLGwscixvLHMpP0tjKG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpGYihuLGwrMyl9ZnVuY3Rpb24gXzcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gbGwobixjLHIsbyxzLGEpP0tjKG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6RmIobixjKzQpfWZ1bmN0aW9uIHY3KG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylzcyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP0tjKG4scyxpLmFwcGx5KG8scikpOkZiKG4scyl9ZnVuY3Rpb24gaihuLHQpe2xldCBpLGU9RGkoKSxyPW4rMjI7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzfHwoZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9UWgoaS50eXBlKSkscz1pbCh3KTt0cnl7bGV0IGE9dUUoITEpLGw9bygpO3JldHVybiB1RShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLFplKCkscixsKSxsfWZpbmFsbHl7aWwocyl9fWZ1bmN0aW9uIFcobix0LGUpe2xldCBpPW4rMjIscj1aZSgpLG89SGcocixpKTtyZXR1cm4gTmIocixpKT9mNyhyLEVzKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIG5mKG4sdCxlLGkpe2xldCByPW4rMjIsbz1aZSgpLHM9SGcobyxyKTtyZXR1cm4gTmIobyxyKT9tNyhvLEVzKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBfTihuLHQsZSxpLHIpe2xldCBvPW4rMjIscz1aZSgpLGE9SGcocyxvKTtyZXR1cm4gTmIocyxvKT9nNyhzLEVzKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gTmIobix0KXtyZXR1cm4gblsxXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gbWsobil7cmV0dXJuIHQ9PntzZXRUaW1lb3V0KG4sdm9pZCAwLHQpfX12YXIgRz1jbGFzcyBleHRlbmRzIFRle2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxpKXtsZXQgcj10LG89ZXx8KCgpPT5udWxsKSxzPWk7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbD10O3I9bC5uZXh0Py5iaW5kKGwpLG89bC5lcnJvcj8uYmluZChsKSxzPWwuY29tcGxldGU/LmJpbmQobCl9dGhpcy5fX2lzQXN5bmMmJihvPW1rKG8pLHImJihyPW1rKHIpKSxzJiYocz1tayhzKSkpO2xldCBhPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpyLGVycm9yOm8sY29tcGxldGU6c30pO3JldHVybiB0IGluc3RhbmNlb2Ygdm4mJnQuYWRkKGEpLGF9fTtmdW5jdGlvbiAkZ2UoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tVRSgpXSgpfXZhciBjbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtsZXQgZT1VRSgpLGk9Y2wucHJvdG90eXBlO2lbZV18fChpW2VdPSRnZSl9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEcpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9WHUodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sT2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189bjBlLG59KSgpLGUwZT1PaSx0MGU9Y2xhc3MgZXh0ZW5kcyBlMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Mscj1CRSh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGksdCwxNixudWxsLGkuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwsZXx8bnVsbCk7clsxN109dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO2xldCBzPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09cyYmKHJbMTldPXMuY3JlYXRlRW1iZWRkZWRWaWV3KGkpKSxvTihpLHIsdCksbmV3ICRoKHIpfX07ZnVuY3Rpb24gbjBlKCl7cmV0dXJuIEtFKE1vKCksWmUoKSl9ZnVuY3Rpb24gS0Uobix0KXtyZXR1cm4gNCZuLnR5cGU/bmV3IHQwZSh0LG4sR2cobix0KSk6bnVsbH12YXIgeWk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189aTBlLG59KSgpO2Z1bmN0aW9uIGkwZSgpe3JldHVybiBiNyhNbygpLFplKCkpfXZhciByMGU9eWkseTc9Y2xhc3MgZXh0ZW5kcyByMGV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fbENvbnRhaW5lcj10LHRoaXMuX2hvc3RUTm9kZT1lLHRoaXMuX2hvc3RMVmlldz1pfWdldCBlbGVtZW50KCl7cmV0dXJuIEdnKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgWWgodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IHBhcmVudEluamVjdG9yKCl7bGV0IHQ9VUYodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoTkcodCkpe2xldCBlPWNFKHQsdGhpcy5faG9zdExWaWV3KSxpPWxFKHQpO3JldHVybiBuZXcgWWgoZVsxXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBZaChudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC0xMH1jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiFYeSh0KTtpZihzKWE9ZTtlbHNle2xldCBkPWV8fHt9O2E9ZC5pbmRleCxpPWQuaW5qZWN0b3Iscj1kLnByb2plY3RhYmxlTm9kZXMsbz1kLmVudmlyb25tZW50SW5qZWN0b3J8fGQubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyB2RShvbCh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChucCxudWxsKTtwJiYobz1wKX1sZXQgdT1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydCh1Lmhvc3RWaWV3LGEpLHV9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pWzFdO2lmKEp1KGlbM10pKXtsZXQgdT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT11KXRoaXMuZGV0YWNoKHUpO2Vsc2V7bGV0IGQ9aVszXSxwPW5ldyB5NyhkLGRbNl0sZFszXSk7cC5kZXRhY2gocC5pbmRleE9mKHQpKX19bGV0IG89dGhpcy5fYWRqdXN0SW5kZXgoZSkscz10aGlzLl9sQ29udGFpbmVyOyFmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xMCtpLG89ZS5sZW5ndGg7aT4wJiYoZVtyLTFdWzRdPXQpLGk8by0xMD8odFs0XT1lW3JdLHFHKGUsMTAraSx0KSk6KGUucHVzaCh0KSx0WzRdPW51bGwpLHRbM109ZTtsZXQgcz10WzE3XTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bls5XTt0WzE2XSE9PXRbM11bM11bMTZdJiYoblsyXT0hMCksbnVsbD09PWU/bls5XT1bdF06ZS5wdXNoKHQpfShzLHQpO2xldCBhPXRbMTldO251bGwhPT1hJiZhLmluc2VydFZpZXcobiksdFsyXXw9NjR9KHIsaSxzLG8pO2xldCBhPUtrKG8scyksbD1pWzExXSxjPU5FKGwsc1s3XSk7cmV0dXJuIG51bGwhPT1jJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7aVswXT1yLGlbNl09dCxBYihuLGksZSwxLHIsbyl9KHIsc1s2XSxsLGksYyxhKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHFHKGdrKHMpLG8sdCksdH1tb3ZlKHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtsZXQgZT1Kaih0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7aSYmKHBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpLHc2KGlbMV0saSkpfWRldGFjaCh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPVhrKHRoaXMuX2xDb250YWluZXIsZSk7cmV0dXJuIGkmJm51bGwhPXBFKGdrKHRoaXMuX2xDb250YWluZXIpLGUpP25ldyAkaChpKTpudWxsfV9hZGp1c3RJbmRleCh0LGU9MCl7cmV0dXJuIHQ/P3RoaXMubGVuZ3RoK2V9fTtmdW5jdGlvbiBKaihuKXtyZXR1cm4gbls4XX1mdW5jdGlvbiBnayhuKXtyZXR1cm4gbls4XXx8KG5bOF09W10pfWZ1bmN0aW9uIGI3KG4sdCl7bGV0IGUsaT10W24uaW5kZXhdO2lmKEp1KGkpKWU9aTtlbHNle2xldCByO2lmKDgmbi50eXBlKXI9TWEoaSk7ZWxzZXtsZXQgbz10WzExXTtyPW8uY3JlYXRlQ29tbWVudCgiIik7bGV0IHM9dWwobix0KTtaaChvLE5FKG8scykscixmdW5jdGlvbihuLHQpe3JldHVybiBuLm5leHRTaWJsaW5nKHQpfShvLHMpLCExKX10W24uaW5kZXhdPWU9ZVcoaSx0LHIsbiksSEUodCxlKX1yZXR1cm4gbmV3IHk3KGUsbix0KX12YXIgZ2I9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeUxpc3Q9dCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgZ2IodGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19LF9iPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtsZXQgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2xldCBpPW51bGwhPT10LmNvbnRlbnRRdWVyaWVzP3QuY29udGVudFF1ZXJpZXNbMF06ZS5sZW5ndGgscj1bXTtmb3IobGV0IG89MDtvPGk7bysrKXtsZXQgcz1lLmdldEJ5SW5kZXgobyk7ci5wdXNoKHRoaXMucXVlcmllc1tzLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgX2Iocil9cmV0dXJuIG51bGx9aW5zZXJ0Vmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRldGFjaFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KXtmb3IobGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKW51bGwhPT1NNyh0LGUpLm1hdGNoZXMmJnRoaXMucXVlcmllc1tlXS5zZXREaXJ0eSgpfX0sQ0U9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPWl9fSx2Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1lbGVtZW50U3RhcnQodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtsZXQgcj1udWxsIT09ZT9lLmxlbmd0aDowLG89dGhpcy5nZXRCeUluZGV4KGkpLmVtYmVkZGVkVFZpZXcodCxyKTtvJiYoby5pbmRleEluRGVjbGFyYXRpb25WaWV3PWksbnVsbCE9PWU/ZS5wdXNoKG8pOmU9W29dKX1yZXR1cm4gbnVsbCE9PWU/bmV3IHZiKGUpOm51bGx9dGVtcGxhdGUodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fSx5Yj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEpe3RoaXMubWV0YWRhdGE9dCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1lfWVsZW1lbnRTdGFydCh0LGUpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShlKSYmdGhpcy5tYXRjaFROb2RlKHQsZSl9ZWxlbWVudEVuZCh0KXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PXQuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUodCxlKXt0aGlzLmVsZW1lbnRTdGFydCh0LGUpfWVtYmVkZGVkVFZpZXcodCxlKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLXQuaW5kZXgsZSksbmV3IHliKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUodCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEhPSgxJnRoaXMubWV0YWRhdGEuZmxhZ3MpKXtsZXQgZT10aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleCxpPXQucGFyZW50O2Zvcig7bnVsbCE9PWkmJjgmaS50eXBlJiZpLmluZGV4IT09ZTspaT1pLnBhcmVudDtyZXR1cm4gZT09PShudWxsIT09aT9pLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZSh0LGUpe2xldCBpPXRoaXMubWV0YWRhdGEucHJlZGljYXRlO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGEwZShlLG8pKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LG8sITEsITEpKX1lbHNlIGk9PT1PaT80JmUudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsWFMoZSx0LGksITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGkpe2lmKG51bGwhPT1pKXtsZXQgcj10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PXIpaWYocj09PUFlfHxyPT09eWl8fHI9PT1PaSYmNCZlLnR5cGUpdGhpcy5hZGRNYXRjaChlLmluZGV4LC0yKTtlbHNle2xldCBvPVhTKGUsdCxyLCExLCExKTtudWxsIT09byYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG8pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LGkpfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fTtmdW5jdGlvbiBhMGUobix0KXtsZXQgZT1uLmxvY2FsTmFtZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKWlmKGVbaV09PT10KXJldHVybiBlW2krMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gYzBlKG4sdCxlLGkpe3JldHVybi0xPT09ZT9mdW5jdGlvbihuLHQpe3JldHVybiAxMSZuLnR5cGU/R2cobix0KTo0Jm4udHlwZT9LRShuLHQpOm51bGx9KHQsbik6LTI9PT1lP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZT09PUFlP0dnKHQsbik6ZT09PU9pP0tFKHQsbik6ZT09PXlpP2I3KHQsbik6dm9pZCAwfShuLHQsaSk6Q2IobixuWzFdLGUsdCl9ZnVuY3Rpb24geDcobix0LGUsaSl7bGV0IHI9dFsxOV0ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOmMwZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gZkYobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPXg3KG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sdT10Wy1sXTtmb3IobGV0IGQ9MTA7ZDx1Lmxlbmd0aDtkKyspe2xldCBwPXVbZF07cFsxN109PT1wWzNdJiZmRihwWzFdLHAsYyxpKX1pZihudWxsIT09dVs5XSl7bGV0IGQ9dVs5XTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGg9ZFtwXTtmRihoWzFdLGgsYyxpKX19fX19cmV0dXJuIGl9ZnVuY3Rpb24gTmUobil7bGV0IHQ9WmUoKSxlPURpKCksaT1ERygpO0xGKGkrMSk7bGV0IHI9TTcoZSxpKTtpZihuLmRpcnR5JiZmdW5jdGlvbihuKXtyZXR1cm4gND09KDQmblsyXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/ZkYoZSx0LGksW10pOng3KGUsdCxyLGkpO24ucmVzZXQobyxUaGUpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbHQobix0LGUpe2xldCBpPURpKCk7aS5maXJzdENyZWF0ZVBhc3MmJih3NyhpLG5ldyBDRShuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLEM3KGksWmUoKSx0KX1mdW5jdGlvbiBOaShuLHQsZSxpKXtsZXQgcj1EaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz1NbygpO3c3KHIsbmV3IENFKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9QzcocixaZSgpLGUpfWZ1bmN0aW9uIExlKCl7cmV0dXJuIG49WmUoKSx0PURHKCksblsxOV0ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBDNyhuLHQsZSl7bGV0IGk9bmV3IGNsKDQ9PSg0JmUpKTtxNihuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10WzE5XSYmKHRbMTldPW5ldyBfYiksdFsxOV0ucXVlcmllcy5wdXNoKG5ldyBnYihpKSl9ZnVuY3Rpb24gdzcobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IHZiKSxuLnF1ZXJpZXMudHJhY2sobmV3IHliKHQsZSkpfWZ1bmN0aW9uIE03KG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIGVuKG4sdCl7cmV0dXJuIEtFKG4sdCl9dmFyICRkPXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjp6ZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBsVyhuLHQsZSxpLHIsbyl7bGV0IHM9WmUoKSxhPVhnKHMsdCxlLGkpO3JldHVybiBhIT09R24mJlFjKHFyKCkscyxuLGEscixvKSxsV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gY1cobix0LGUsaSxyLG8scyxhKXtsZXQgbD1aZSgpLGM9UWcobCx0LGUsaSxyLG8pO3JldHVybiBjIT09R24mJlFjKHFyKCksbCxuLGMscyxhKSxjV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdVcobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9WmUoKSxkPUtnKHUsdCxlLGkscixvLHMsYSk7cmV0dXJuIGQhPT1HbiYmUWMocXIoKSx1LG4sZCxsLGMpLHVXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBkVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9WmUoKSxoPVpnKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBoIT09R24mJlFjKHFyKCkscCxuLGgsdSxkKSxkV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gcFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXtsZXQgZj1aZSgpLG09SmcoZix0LGUsaSxyLG8scyxhLGwsYyx1LGQpO3JldHVybiBtIT09R24mJlFjKHFyKCksZixuLG0scCxoKSxwV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gaFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IEM9WmUoKSxfPSRnKEMsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCk7cmV0dXJuIF8hPT1HbiYmUWMocXIoKSxDLG4sXyxmLG0pLGhXfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBmVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyl7bGV0IHk9WmUoKSxJPWUwKHksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0pO3JldHVybiBJIT09R24mJlFjKHFyKCkseSxuLEksQyxfKSxmV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gbVcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSxJKXtsZXQgQT1aZSgpLE89dDAoQSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8pO3JldHVybiBPIT09R24mJlFjKHFyKCksQSxuLE8seSxJKSxtV30sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24gZ1cobix0LGUsaSl7bGV0IHI9WmUoKSxvPVlnKHIsdCk7cmV0dXJuIG8hPT1HbiYmUWMocXIoKSxyLG4sbyxlLGkpLGdXfSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjprLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOk9lLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjpnZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlUsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjp6LCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpCZywiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0Ijp3LCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpoaSwiXHUwMjc1XHUwMjc1aW5qZWN0IjpSLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOktvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6SmwsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpZRywiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOmVuLCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOm9lLCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOnp0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjokdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PWFXKG4udHlwZSk7ZT1RbChuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiAkZmUpaVtyXT1lW3JdO2lmKFFsKGUpKWZvcihsZXQgciBvZiBlbWUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjp0dCwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOmZ1bmN0aW9uKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KEdnZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9LCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6TSwiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6U2EsIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtZbi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ibWF0aCJ9LCJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciOmpuLCJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtZbi5iaW5kaW5nc0VuYWJsZWQ9ITB9LCJcdTAyNzVcdTAyNzVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uKCl7WW4uYmluZGluZ3NFbmFibGVkPSExfSwiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0IjpnLCJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIjp2LCJcdTAyNzVcdTAyNzVlbGVtZW50IjpOLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiOkt0LCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIjpadCwiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lciI6QWksIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiOmxwLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIjpIbiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMiI6dG8sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiOmtiLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240IjptTiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNSI6Z04sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1FcygpK24sdT1aZSgpLGQ9bGwodSxjLGUsaSxyLG8pO3JldHVybiBlZih1LGMrNCxzLGEpfHxkP0tjKHUsYys2LGw/dC5jYWxsKGwsZSxpLHIsbyxzLGEpOnQoZSxpLHIsbyxzLGEpKTpJYih1LGMrNil9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjKXtsZXQgdT1FcygpK24sZD1aZSgpLHA9bGwoZCx1LGUsaSxyLG8pO3JldHVybiBqRShkLHUrNCxzLGEsbCl8fHA/S2MoZCx1KzcsYz90LmNhbGwoYyxlLGkscixvLHMsYSxsKTp0KGUsaSxyLG8scyxhLGwpKTpJYihkLHUrNyl9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPUVzKCkrbixwPVplKCksaD1sbChwLGQsZSxpLHIsbyk7cmV0dXJuIGxsKHAsZCs0LHMsYSxsLGMpfHxoP0tjKHAsZCs4LHU/dC5jYWxsKHUsZSxpLHIsbyxzLGEsbCxjKTp0KGUsaSxyLG8scyxhLGwsYykpOkliKHAsZCs4KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiOmZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiB2NyhaZSgpLEVzKCksbix0LGUsaSl9LCJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyI6SWUsIlx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3IjpyZSwiXHUwMjc1XHUwMjc1bGlzdGVuZXIiOlAsIlx1MDI3NVx1MDI3NXByb2plY3Rpb24iOk5uLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiOnIwLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOmkwLCJcdTAyNzVcdTAyNzVwaXBlQmluZDEiOlcsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMiI6bmYsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMyI6X04sIlx1MDI3NVx1MDI3NXBpcGVCaW5kNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW4rMjIsYT1aZSgpLGw9SGcoYSxzKTtyZXR1cm4gTmIoYSxzKT9fNyhhLEVzKCksdCxsLnRyYW5zZm9ybSxlLGkscixvLGwpOmwudHJhbnNmb3JtKGUsaSxyLG8pfSwiXHUwMjc1XHUwMjc1cGlwZUJpbmRWIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bisyMixyPVplKCksbz1IZyhyLGkpO3JldHVybiBOYihyLGkpP3Y3KHIsRXMoKSx0LG8udHJhbnNmb3JtLGUsbyk6by50cmFuc2Zvcm0uYXBwbHkobyxlKX0sIlx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiOndpLCJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiOkFhLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eSI6YiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSI6eHIsIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIjpQYiwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTIiOkdFLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gdlcobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1LZyhjLHQsZSxpLHIsbyxzLGEpO3JldHVybiB1IT09R24mJkRhKERpKCkscXIoKSxjLG4sdSxjWzExXSxsLCExKSx2V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiB5VyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1aZyhkLHQsZSxpLHIsbyxzLGEsbCxjKTtyZXR1cm4gcCE9PUduJiZEYShEaSgpLHFyKCksZCxuLHAsZFsxMV0sdSwhMSkseVd9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gYlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPUpnKGgsdCxlLGkscixvLHMsYSxsLGMsdSxkKTtyZXR1cm4gZiE9PUduJiZEYShEaSgpLHFyKCksaCxuLGYsaFsxMV0scCwhMSksYld9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24geFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz0kZyhtLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpO3JldHVybiBDIT09R24mJkRhKERpKCkscXIoKSxtLG4sQyxtWzExXSxmLCExKSx4V30sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBDVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT1lMChfLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKTtyZXR1cm4geSE9PUduJiZEYShEaSgpLHFyKCksXyxuLHksX1sxMV0sQywhMSksQ1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gd1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDLF8seSl7bGV0IEk9WmUoKSxBPXQwKEksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKTtyZXR1cm4gQSE9PUduJiZEYShEaSgpLHFyKCksSSxuLEEsSVsxMV0seSwhMSksd1d9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24gTVcobix0LGUpe2xldCBpPVplKCkscj1ZZyhpLHQpO3JldHVybiByIT09R24mJkRhKERpKCkscXIoKSxpLG4scixpWzExXSxlLCExKSxNV30sIlx1MDI3NVx1MDI3NXBpcGUiOmosIlx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCI6TmUsIlx1MDI3NVx1MDI3NXZpZXdRdWVyeSI6bHQsIlx1MDI3NVx1MDI3NWxvYWRRdWVyeSI6TGUsIlx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSI6TmksIlx1MDI3NVx1MDI3NXJlZmVyZW5jZSI6c3QsIlx1MDI3NVx1MDI3NWNsYXNzTWFwIjplYSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiOlJiLCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtlYyhFYSxaYyxRZyhaZSgpLG4sdCxlLGksciksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe2VjKEVhLFpjLEtnKFplKCksbix0LGUsaSxyLG8scyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtlYyhFYSxaYyxaZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1KXtlYyhFYSxaYyxKZyhaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe2VjKEVhLFpjLCRnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKXtlYyhFYSxaYyxlMChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtlYyhFYSxaYyx0MChaZSgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe2VjKEVhLFpjLFlnKFplKCksbiksITApfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXAiOnBsLCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24obix0LGUpe3BsKFhnKFplKCksbix0LGUpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbihuLHQsZSxpLHIpe3BsKFFnKFplKCksbix0LGUsaSxyKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7cGwoS2coWmUoKSxuLHQsZSxpLHIsbyxzKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe3BsKFpnKFplKCksbix0LGUsaSxyLG8scyxhLGwpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe3BsKEpnKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cGwoJGcoWmUoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3BsKGUwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe3BsKHQwKFplKCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViI6ZnVuY3Rpb24obil7cGwoWWcoWmUoKSxuKSl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3AiOk90LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIEhXKG4sdCxlLGkscil7cmV0dXJuICRsKG4sWGcoWmUoKSx0LGUsaSksciwhMSksSFd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIFVXKG4sdCxlLGkscixvLHMpe3JldHVybiAkbChuLFFnKFplKCksdCxlLGkscixvKSxzLCExKSxVV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gelcobix0LGUsaSxyLG8scyxhLGwpe3JldHVybiAkbChuLEtnKFplKCksdCxlLGkscixvLHMsYSksbCwhMSkseld9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGpXKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7cmV0dXJuICRsKG4sWmcoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyksdSwhMSksald9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIEdXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3JldHVybiAkbChuLEpnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkKSxwLCExKSxHV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gV1cobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3JldHVybiAkbChuLCRnKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCksZiwhMSksV1d9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHFXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyl7cmV0dXJuICRsKG4sZTAoWmUoKSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSksQywhMSkscVd9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIFlXKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfLHkpe3JldHVybiAkbChuLHQwKFplKCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxfKSx5LCExKSxZV30sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gWFcobix0LGUpe3JldHVybiAkbChuLFlnKFplKCksdCksZSwhMSksWFd9LCJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiOmF0LCJcdTAyNzVcdTAyNzVhZHZhbmNlIjp4LCJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSI6RSwiXHUwMjc1XHUwMjc1dGV4dCI6RCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlIjp5dCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSI6cWUsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiOmFwLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUzIjpXRSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCI6ZnVuY3Rpb24ga1cobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPVplKCksdT1aZyhjLG4sdCxlLGkscixvLHMsYSxsKTtyZXR1cm4gdSE9PUduJiZuZChjLFRzKCksdSksa1d9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiBGVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVplKCkscD1KZyhkLG4sdCxlLGkscixvLHMsYSxsLGMsdSk7cmV0dXJuIHAhPT1HbiYmbmQoZCxUcygpLHApLEZXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gTlcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9WmUoKSxmPSRnKGgsbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCk7cmV0dXJuIGYhPT1HbiYmbmQoaCxUcygpLGYpLE5XfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyI6ZnVuY3Rpb24gTFcobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPVplKCksQz1lMChtLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKTtyZXR1cm4gQyE9PUduJiZuZChtLFRzKCksQyksTFd9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBCVyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMpe2xldCBfPVplKCkseT10MChfLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyk7cmV0dXJuIHkhPT1HbiYmbmQoXyxUcygpLHkpLEJXfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gVlcobil7bGV0IHQ9WmUoKSxlPVlnKHQsbik7cmV0dXJuIGUhPT1HbiYmbmQodCxUcygpLGUpLFZXfSwiXHUwMjc1XHUwMjc1aTE4biI6WUUsIlx1MDI3NVx1MDI3NWkxOG5BdHRyaWJ1dGVzIjpmdW5jdGlvbihuLHQpe2xldCBlPURpKCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1NbygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKHBnZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTtyYihvLGwscixhLHhnZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rMjIsZXAoZS5jb25zdHMsdCkpfSwiXHUwMjc1XHUwMjc1aTE4bkV4cCI6T2IsIlx1MDI3NVx1MDI3NWkxOG5TdGFydCI6ZDcsIlx1MDI3NVx1MDI3NWkxOG5FbmQiOnA3LCJcdTAyNzVcdTAyNzVpMThuQXBwbHkiOlhFLCJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiOlFFLCJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93IjpmdW5jdGlvbihuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSwiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50IjpGRSwiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuYm9keX0sIlx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIjpiYiwiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSI6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGYoKCk9PntsZXQgZT1JZyhuLCEwKTtlLmRlY2xhcmF0aW9ucz10LmRlY2xhcmF0aW9uc3x8V2ksZS5pbXBvcnRzPXQuaW1wb3J0c3x8V2ksZS5leHBvcnRzPXQuZXhwb3J0c3x8V2l9KX0sIlx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIjpaRywiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIjpYRiwiXHUwMjc1XHUwMjc1c2FuaXRpemVTdHlsZSI6ZnVuY3Rpb24obil7bGV0IHQ9RGIoKTtyZXR1cm4gdD90LnNhbml0aXplKEpyLlNUWUxFLG4pfHwiIjpabChuLCJTdHlsZSIpPyRzKG4pOnFuKG4pfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCI6ZDYsIlx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0IjpmdW5jdGlvbihuKXtsZXQgdD1EYigpO2lmKHQpcmV0dXJuIERqKHQuc2FuaXRpemUoSnIuU0NSSVBULG4pfHwiIik7aWYoWmwobiwiU2NyaXB0IikpcmV0dXJuIERqKCRzKG4pKTt0aHJvdyBuZXcgTXQoOTA1LCExKX0sIlx1MDI3NVx1MDI3NXNhbml0aXplVXJsIjpkbCwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuInNyYyI9PT10JiYoImVtYmVkIj09PW58fCJmcmFtZSI9PT1ufHwiaWZyYW1lIj09PW58fCJtZWRpYSI9PT1ufHwic2NyaXB0Ij09PW4pfHwiaHJlZiI9PT10JiYoImJhc2UiPT09bnx8ImxpbmsiPT09bik/ZDY6ZGx9KHQsZSkobil9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCI6ZnVuY3Rpb24obil7cmV0dXJuIE9nKG5bMF0pfSwiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsIjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGU2KCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn0oblswXSl9LGZvcndhcmRSZWY6cmkscmVzb2x2ZUZvcndhcmRSZWY6cWl9O2Z1bmN0aW9uIFM3KG4pe3JldHVybiEhSWcobil9dmFyICRTPVtdLF9rPSExO2Z1bmN0aW9uIEU3KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZXZlcnkoRTcpOiEhcWkobil9ZnVuY3Rpb24gYjBlKG4sdCl7bGV0IGU9WHUodC5kZWNsYXJhdGlvbnN8fFdpKSxpPUxnKG4pO2UuZm9yRWFjaChyPT57KHI9cWkocikpLmhhc093blByb3BlcnR5KFRFKT9UNyhvbChyKSxpKTohci5oYXNPd25Qcm9wZXJ0eShURikmJiFyLmhhc093blByb3BlcnR5KERGKSYmKHIubmdTZWxlY3RvclNjb3BlPW4pfSl9ZnVuY3Rpb24gVDcobix0KXtuLmRpcmVjdGl2ZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5kaXJlY3RpdmVzKS5tYXAoZT0+ZS5oYXNPd25Qcm9wZXJ0eShURSk/b2woZSk6WGgoZSkpLmZpbHRlcihlPT4hIWUpLG4ucGlwZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5waXBlcykubWFwKGU9Pkt1KGUpKSxuLnNjaGVtYXM9dC5zY2hlbWFzLG4udFZpZXc9bnVsbH1mdW5jdGlvbiBMZyhuKXtpZihTNyhuKSlyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9SWcobiwhMCk7aWYobnVsbCE9PXQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMpcmV0dXJuIHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM7bGV0IGU9e3NjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fX07cmV0dXJuIEtTKHQuaW1wb3J0cykuZm9yRWFjaChpPT57bGV0IHI9TGcoaSk7ci5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChvKSksci5leHBvcnRlZC5waXBlcy5mb3JFYWNoKG89PmUuY29tcGlsYXRpb24ucGlwZXMuYWRkKG8pKX0pLEtTKHQuZGVjbGFyYXRpb25zKS5mb3JFYWNoKGk9PntLdShpKT9lLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpKTplLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGkpfSksS1ModC5leHBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1pO2lmKFM3KHIpKXtsZXQgbz1MZyhyKTtvLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChzPT57ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChzKSxlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHMpfSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChzKSxlLmV4cG9ydGVkLnBpcGVzLmFkZChzKX0pfWVsc2UgS3Uocik/ZS5leHBvcnRlZC5waXBlcy5hZGQocik6ZS5leHBvcnRlZC5kaXJlY3RpdmVzLmFkZChyKX0pLHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9ZSxlfShuKTtpZihmRyhuKSl7aWYobnVsbCE9PShvbChuKXx8WGgobikpKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0KFtuXSkscGlwZXM6bmV3IFNldH19O2lmKG51bGwhPT1LdShuKSlyZXR1cm57c2NoZW1hczpudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0KFtuXSl9fX10aHJvdyBuZXcgRXJyb3IoYCR7bi5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoXHUwMjc1bW9kIHByb3BlcnR5KWApfWZ1bmN0aW9uICRqKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ01vZHVsZX0obik/bi5uZ01vZHVsZTpufXZhciB2az0wO2Z1bmN0aW9uIEQ3KG4sdCl7bGV0IGU9bnVsbDtJNyhuLHR8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixURix7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCBpPUE3KG4sdHx8e30pO2U9c2woKS5jb21waWxlRGlyZWN0aXZlKCRkLGkuc291cmNlTWFwVXJsLGkubWV0YWRhdGEpfXJldHVybiBlfSxjb25maWd1cmFibGU6ITF9KX1mdW5jdGlvbiBBNyhuLHQpe2xldCBlPW4mJm4ubmFtZSxpPWBuZzovLy8ke2V9L1x1MDI3NWRpci5qc2Ascj1zbCgpLG89UDcobix0KTtyZXR1cm4gby50eXBlU291cmNlU3Bhbj1yLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixlLGkpLG8udXNlc0luaGVyaXRhbmNlJiZSNyhuKSx7bWV0YWRhdGE6byxzb3VyY2VNYXBVcmw6aX19ZnVuY3Rpb24gSTcobix0KXtsZXQgZT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFF1LHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9QTcobix0KSxyPXNsKCk7ZT1yLmNvbXBpbGVGYWN0b3J5KCRkLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTppLm1ldGFkYXRhLm5hbWUsdHlwZTppLm1ldGFkYXRhLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOlJFKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIFMwZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gUDcobix0KXtsZXQgZT1HRigpLGk9ZS5vd25Qcm9wTWV0YWRhdGEobik7cmV0dXJue25hbWU6bi5uYW1lLHR5cGU6bixzZWxlY3Rvcjp2b2lkIDAhPT10LnNlbGVjdG9yP3Quc2VsZWN0b3I6bnVsbCxob3N0OnQuaG9zdHx8QWcscHJvcE1ldGFkYXRhOmksaW5wdXRzOnQuaW5wdXRzfHxXaSxvdXRwdXRzOnQub3V0cHV0c3x8V2kscXVlcmllczplRyhuLGksTzcpLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczplLmhhc0xpZmVjeWNsZUhvb2sobiwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IVMwZShuKSxleHBvcnRBczpEMGUodC5leHBvcnRBcykscHJvdmlkZXJzOnQucHJvdmlkZXJzfHxudWxsLHZpZXdRdWVyaWVzOmVHKG4saSxrNyksaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX1mdW5jdGlvbiBSNyhuKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2UmJmUhPT10OykhWGgoZSkmJiFvbChlKSYmSTBlKGUpJiZENyhlLG51bGwpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfWZ1bmN0aW9uIEUwZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/Tjcobik6cWkobil9ZnVuY3Rpb24gVDBlKG4sdCl7cmV0dXJue3Byb3BlcnR5TmFtZTpuLHByZWRpY2F0ZTpFMGUodC5zZWxlY3RvciksZGVzY2VuZGFudHM6dC5kZXNjZW5kYW50cyxmaXJzdDp0LmZpcnN0LHJlYWQ6dC5yZWFkP3QucmVhZDpudWxsLHN0YXRpYzohIXQuc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEhdC5lbWl0RGlzdGluY3RDaGFuZ2VzT25seX19ZnVuY3Rpb24gZUcobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07by5mb3JFYWNoKHM9PntpZihlKHMpKXtpZighcy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7cn0iIG9mICIke01GKG4pfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKG8uc29tZShGNykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtpLnB1c2goVDBlKHIscykpfX0pfXJldHVybiBpfWZ1bmN0aW9uIEQwZShuKXtyZXR1cm4gdm9pZCAwPT09bj9udWxsOk43KG4pfWZ1bmN0aW9uIE83KG4pe2xldCB0PW4ubmdNZXRhZGF0YU5hbWU7cmV0dXJuIkNvbnRlbnRDaGlsZCI9PT10fHwiQ29udGVudENoaWxkcmVuIj09PXR9ZnVuY3Rpb24gazcobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iVmlld0NoaWxkIj09PXR8fCJWaWV3Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiBGNyhuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBONyhuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSl9dmFyIEEwZT1bIm5nT25DaGFuZ2VzIiwibmdPbkluaXQiLCJuZ09uRGVzdHJveSIsIm5nRG9DaGVjayIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCJdO2Z1bmN0aW9uIEkwZShuKXtsZXQgdD1HRigpO2lmKEEwZS5zb21lKGk9PnQuaGFzTGlmZWN5Y2xlSG9vayhuLGkpKSlyZXR1cm4hMDtsZXQgZT10LnByb3BNZXRhZGF0YShuKTtmb3IobGV0IGkgaW4gZSl7bGV0IHI9ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXSxhPXMubmdNZXRhZGF0YU5hbWU7aWYoRjcocyl8fE83KHMpfHxrNyhzKXx8Ik91dHB1dCI9PT1hfHwiSG9zdEJpbmRpbmciPT09YXx8Ikhvc3RMaXN0ZW5lciI9PT1hKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB0RyhuLHQpe3JldHVybnt0eXBlOm4sbmFtZTpuLm5hbWUscGlwZU5hbWU6dC5uYW1lLHB1cmU6dm9pZCAwPT09dC5wdXJlfHx0LnB1cmUsaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX12YXIgUjBlPXdiKCJEaXJlY3RpdmUiLChuPXt9KT0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5ENyhuLHQpKTtmdW5jdGlvbiB3RSguLi5uKXt9d2IoIkNvbXBvbmVudCIsKG49e30pPT4oe2NoYW5nZURldGVjdGlvbjpLeS5EZWZhdWx0LC4uLm59KSxSMGUsdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGw7KGZ1bmN0aW9uKG4sdCl7S0codCkmJihwYi5zZXQobix0KSxRRy5hZGQobikpfSkobix0KSxJNyhuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFRFLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9c2woKTtpZihLRyh0KSl7bGV0IGM9W2BDb21wb25lbnQgJyR7bi5uYW1lfScgaXMgbm90IHJlc29sdmVkOmBdO3Rocm93IHQudGVtcGxhdGVVcmwmJmMucHVzaChgIC0gdGVtcGxhdGVVcmw6ICR7dC50ZW1wbGF0ZVVybH1gKSx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoJiZjLnB1c2goYCAtIHN0eWxlVXJsczogJHtKU09OLnN0cmluZ2lmeSh0LnN0eWxlVXJscyl9YCksYy5wdXNoKCJEaWQgeW91IHJ1biBhbmQgd2FpdCBmb3IgJ3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMoKSc/IiksbmV3IEVycm9yKGMuam9pbigiXG4iKSl9bGV0IHI9bnVsbCxvPXQucHJlc2VydmVXaGl0ZXNwYWNlczt2b2lkIDA9PT1vJiYobz1udWxsIT09ciYmdm9pZCAwIT09ci5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZyLnByZXNlcnZlV2hpdGVzcGFjZXMpO2xldCBzPXQuZW5jYXBzdWxhdGlvbjt2b2lkIDA9PT1zJiYocz1udWxsIT09ciYmdm9pZCAwIT09ci5kZWZhdWx0RW5jYXBzdWxhdGlvbj9yLmRlZmF1bHRFbmNhcHN1bGF0aW9uOndhLkVtdWxhdGVkKTtsZXQgYT10LnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHtuLm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9ey4uLlA3KG4sdCksdHlwZVNvdXJjZVNwYW46aS5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsbi5uYW1lLGEpLHRlbXBsYXRlOnQudGVtcGxhdGV8fCIiLHByZXNlcnZlV2hpdGVzcGFjZXM6byxzdHlsZXM6dC5zdHlsZXN8fFdpLGFuaW1hdGlvbnM6dC5hbmltYXRpb25zLGRlY2xhcmF0aW9uczpbXSxjaGFuZ2VEZXRlY3Rpb246dC5jaGFuZ2VEZXRlY3Rpb24sZW5jYXBzdWxhdGlvbjpzLGludGVycG9sYXRpb246dC5pbnRlcnBvbGF0aW9uLHZpZXdQcm92aWRlcnM6dC52aWV3UHJvdmlkZXJzfHxudWxsLGlzU3RhbmRhbG9uZTohIXQuc3RhbmRhbG9uZX07dmsrKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJlI3KG4pLGU9aS5jb21waWxlQ29tcG9uZW50KCRkLGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz1YdSh0LmltcG9ydHN8fFdpKSx7ZGlyZWN0aXZlRGVmczp1LHBpcGVEZWZzOmR9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bb2wobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IGQ9b2wodSl8fFhoKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGUucHVzaChkKSl9fWVsc2V7bGV0IGM9b2wobCl8fFhoKGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPXFpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJZyhsKSl7bGV0IGM9TGcobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCBkPUt1KHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGkucHVzaChkKSl9fWVsc2V7bGV0IGM9S3UobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9dSxlLnBpcGVEZWZzPWQsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKHFpKX19ZmluYWxseXt2ay0tfWlmKDA9PT12ayYmZnVuY3Rpb24oKXtpZighX2spe19rPSEwO3RyeXtmb3IobGV0IG49JFMubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09JFNbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KEU3KSYmKCRTLnNwbGljZShuLDEpLGIwZSh0LGUpKX19ZmluYWxseXtfaz0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPUxnKG4ubmdTZWxlY3RvclNjb3BlKTtUNyhlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7TUYobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHdiKCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj10RyhuLHQpLG89c2woKTtpPW8uY29tcGlsZUZhY3RvcnkoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6UkUobiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLERGLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9dEcobix0KTtlPXNsKCkuY29tcGlsZVBpcGUoJGQsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLHNwKCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksc3AoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxzcCgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksd2IoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT1YdSh0LmRlY2xhcmF0aW9uc3x8V2kpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixwRyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1zbCgpLmNvbXBpbGVOZ01vZHVsZSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6WHUodC5ib290c3RyYXB8fFdpKS5tYXAocWkpLGRlY2xhcmF0aW9uczppLm1hcChxaSksaW1wb3J0czpYdSh0LmltcG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksZXhwb3J0czpYdSh0LmV4cG9ydHN8fFdpKS5tYXAocWkpLm1hcCgkaiksc2NoZW1hczp0LnNjaGVtYXM/WHUodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sUXUse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1zbCgpO289YS5jb21waWxlRmFjdG9yeSgkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOlJFKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLHhrLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFdpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFdpKS5tYXAocWkpLCh0LmV4cG9ydHN8fFdpKS5tYXAocWkpXX07cz1zbCgpLmNvbXBpbGVJbmplY3RvcigkZCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZaRyhuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7JFMucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyIHZOPW5ldyBzZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxaRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9d0UsdGhpcy5yZWplY3Q9d0UsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYobjAobykpZS5wdXNoKG8pO2Vsc2UgaWYoZk4obykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2Tiw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscmY9bmV3IHNlKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHt5aygpfSR7eWsoKX0ke3lrKCl9YH19KTtmdW5jdGlvbiB5aygpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciB5Tj1uZXcgc2UoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksaWQ9bmV3IHNlKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxrMGU9bmV3IHNlKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLExpPShuZXcgc2UoIkFwcGxpY2F0aW9uIFBhY2thZ2VzIFJvb3QgVVJMIiksbmV3IHNlKCJBbmltYXRpb25Nb2R1bGVUeXBlIikpLHJkPW5ldyBzZSgiTG9jYWxlSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TbyhyZCxpaS5PcHRpb25hbHxpaS5Ta2lwU2VsZil8fHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxiRX0pLEIwZT0obmV3IHNlKCJEZWZhdWx0Q3VycmVuY3lDb2RlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlVTRCJ9KSxuZXcgc2UoIlRyYW5zbGF0aW9ucyIpLG5ldyBzZSgiVHJhbnNsYXRpb25zRm9ybWF0IiksbmV3IHNlKCJjb21waWxlck9wdGlvbnMiKSxQcm9taXNlLnJlc29sdmUoMCkpO2Z1bmN0aW9uIG1GKG4pe3R5cGVvZiBab25lPiJ1Ij9CMGUudGhlbigoKT0+e24mJm4uYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLG4pfXZhciBwdD1jbGFzc3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246aT0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBHKCExKSx0aGlzLm9uU3RhYmxlPW5ldyBHKCExKSx0aGlzLm9uRXJyb3I9bmV3IEcoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgTXQoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7bGV0IHI9dGhpcztpZihyLl9uZXN0aW5nPTAsci5fb3V0ZXI9ci5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuQXN5bmNTdGFja1RhZ2dpbmdab25lU3BlYyl7bGV0IG89Wm9uZS5Bc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjO3IuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IG8oIkFuZ3VsYXIiKSl9Wm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSx0JiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHIuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haSYmZSxyLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWksci5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsci5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtsZXQgbj1Xci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD1Xci5jYW5jZWxBbmltYXRpb25GcmFtZTtpZih0eXBlb2YgWm9uZTwidSImJm4mJnQpe2xldCBlPW5bWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2UmJihuPWUpO2xldCBpPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2kmJih0PWkpfXJldHVybntuYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bixuYXRpdmVDYW5jZWxBbmltYXRpb25GcmFtZTp0fX0oKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZnVuY3Rpb24obil7bGV0IHQ9KCk9PnshZnVuY3Rpb24obil7bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KG4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPW4ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwoV3IsKCk9PntuLmZha2VUb3BFdmVudFRhc2t8fChuLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e24ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGdGKG4pLG4uaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsYk4obiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxuLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxnRihuKSl9KG4pfTtuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGUsaSxyLG8scyxhKT0+e3RyeXtyZXR1cm4gbkcobiksZS5pbnZva2VUYXNrKHIsbyxzLGEpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1vLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCksaUcobil9fSxvbkludm9rZTooZSxpLHIsbyxzLGEsbCk9Pnt0cnl7cmV0dXJuIG5HKG4pLGUuaW52b2tlKHIsbyxzLGEsbCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZ0KCksaUcobil9fSxvbkhhc1Rhc2s6KGUsaSxyLG8pPT57ZS5oYXNUYXNrKHIsbyksaT09PXImJigibWljcm9UYXNrIj09by5jaGFuZ2U/KG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPW8ubWljcm9UYXNrLGdGKG4pLGJOKG4pKToibWFjcm9UYXNrIj09by5jaGFuZ2UmJihuLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPW8ubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGUsaSxyLG8pPT4oZS5oYW5kbGVFcnJvcihyLG8pLG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ub25FcnJvci5lbWl0KG8pKSwhMSl9KX0ocil9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBNdCg5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYocHQuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IE10KDkwOSwhMSl9cnVuKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxpKX1ydW5UYXNrKHQsZSxpLHIpe2xldCBvPXRoaXMuX2lubmVyLHM9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LEgwZSx3RSx3RSk7dHJ5e3JldHVybiBvLnJ1blRhc2socyxlLGkpfWZpbmFsbHl7by5jYW5jZWxUYXNrKHMpfX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19LEgwZT17fTtmdW5jdGlvbiBiTihuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBnRihuKXtuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gbkcobil7bi5fbmVzdGluZysrLG4uaXNTdGFibGUmJihuLmlzU3RhYmxlPSExLG4ub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBpRyhuKXtuLl9uZXN0aW5nLS0sYk4obil9dmFyIENOLHhOPW5ldyBzZSgiIiksTGI9bmV3IHNlKCIiKSxKRT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLENOfHwoZnVuY3Rpb24obil7Q049bn0ociksci5hZGRUb1dpbmRvdyhpKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntwdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksbUYoKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSltRigoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSk7ZWxzZXtsZXQgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGk9PiFpLnVwZGF0ZUNifHwhaS51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dChpLnRpbWVvdXRJZCksITEpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChlPT4oe3NvdXJjZTplLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmUuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmUuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhlLGkscil7bGV0IG89LTE7aSYmaT4wJiYobz1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIocz0+cy50aW1lb3V0SWQhPT1vKSxlKHRoaXMuX2RpZFdvcmssdGhpcy5nZXRQZW5kaW5nVGFza3MoKSl9LGkpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmUsdGltZW91dElkOm8sdXBkYXRlQ2I6cn0pfXdoZW5TdGFibGUoZSxpLHIpe2lmKHImJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soZSxpLHIpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihlLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKX1maW5kUHJvdmlkZXJzKGUsaSxyKXtyZXR1cm5bXX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihwdCksUigkRSksUihMYikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLCRFPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGUsaSl7dGhpcy5fYXBwbGljYXRpb25zLnNldChlLGkpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGUpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShlKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxpPSEwKXtyZXR1cm4gQ04/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGUsaSk/P251bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKSxvYj1udWxsLEw3PW5ldyBzZSgiQWxsb3dNdWx0aXBsZVRva2VuIiksQjc9bmV3IHNlKCJQbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMiKTtmdW5jdGlvbiB3TihuLHQsZT1bXSl7bGV0IGk9YFBsYXRmb3JtOiAke3R9YCxyPW5ldyBzZShpKTtyZXR1cm4obz1bXSk9PntsZXQgcz1WNygpO2lmKCFzfHxzLmluamVjdG9yLmdldChMNywhMSkpe2xldCBhPVsuLi5lLC4uLm8se3Byb3ZpZGU6cix1c2VWYWx1ZTohMH1dO24/bihhKTpmdW5jdGlvbihuKXtpZihvYiYmIW9iLmdldChMNywhMSkpdGhyb3cgbmV3IE10KDQwMCwhMSk7b2I9bjtsZXQgdD1uLmdldChINyk7KGZ1bmN0aW9uKG4pe2xldCB0PW4uZ2V0KHlOLG51bGwpO3QmJnQuZm9yRWFjaChlPT5lKCkpfSkobil9KGZ1bmN0aW9uKG49W10sdCl7cmV0dXJuIHpuLmNyZWF0ZSh7bmFtZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6a0UsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6QjcsdXNlVmFsdWU6bmV3IFNldChbKCk9Pm9iPW51bGxdKX0sLi4ubl19KX0oYSxpKSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PVY3KCk7aWYoIXQpdGhyb3cgbmV3IE10KDQwMSwhMSk7cmV0dXJuIHR9KCl9fWZ1bmN0aW9uIFY3KCl7cmV0dXJuIG9iPy5nZXQoSDcpPz9udWxsfXZhciBINz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2luamVjdG9yPWUsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZTtyZXR1cm4gZT0ibm9vcCI9PT1uP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEcsdGhpcy5vblN0YWJsZT1uZXcgRyx0aGlzLm9uRXJyb3I9bmV3IEd9cnVuKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0LmFwcGx5KGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHQoKX1ydW5UYXNrKHQsZSxpLHIpe3JldHVybiB0LmFwcGx5KGUsaSl9fTooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBwdCh0KSxlfShpPy5uZ1pvbmUsZnVuY3Rpb24obil7cmV0dXJue2VuYWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lRXZlbnRDb2FsZXNjaW5nKXx8ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lUnVuQ29hbGVzY2luZyl8fCExfX0oaSkpLG89W3twcm92aWRlOnB0LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oKCk9PntsZXQgcz16bi5jcmVhdGUoe3Byb3ZpZGVyczpvLHBhcmVudDp0aGlzLmluamVjdG9yLG5hbWU6ZS5tb2R1bGVUeXBlLm5hbWV9KSxhPWUuY3JlYXRlKHMpLGw9YS5pbmplY3Rvci5nZXQoU3MsbnVsbCk7aWYoIWwpdGhyb3cgbmV3IE10KDQwMiwhMSk7cmV0dXJuIHIucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgYz1yLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OnU9PntsLmhhbmRsZUVycm9yKHUpfX0pO2Eub25EZXN0cm95KCgpPT57ZUUodGhpcy5fbW9kdWxlcyxhKSxjLnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uKG4sdCxlKXt0cnl7bGV0IGk9ZSgpO3JldHVybiBuMChpKT9pLmNhdGNoKHI9Pnt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKHIpKSxyfSk6aX1jYXRjaChpKXt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKGkpKSxpfX0obCxyLCgpPT57bGV0IGM9YS5pbmplY3Rvci5nZXQoWkUpO3JldHVybiBjLnJ1bkluaXRpYWxpemVycygpLGMuZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uKG4peyhmdW5jdGlvbihuLHQpe251bGw9PW4mJmNHKCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIixuLG51bGwsIiE9Iil9KShuKSwic3RyaW5nIj09dHlwZW9mIG4mJihKVz1uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfShhLmluamVjdG9yLmdldChyZCxiRSl8fGJFKSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChhKSxhKSl9KX0pfWJvb3RzdHJhcE1vZHVsZShlLGk9W10pe2xldCByPVU3KHt9LGkpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IGRGKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9KDAsMCxlKS50aGVuKG89PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShvLHIpKX1fbW9kdWxlRG9Cb290c3RyYXAoZSl7bGV0IGk9ZS5pbmplY3Rvci5nZXQoSmMpO2lmKGUuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApZS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKHI9PmkuYm9vdHN0cmFwKHIpKTtlbHNle2lmKCFlLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IE10KDQwMywhMSk7ZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGkpfXRoaXMuX21vZHVsZXMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBNdCg0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goaT0+aSgpKTtsZXQgZT10aGlzLl9pbmplY3Rvci5nZXQoQjcsbnVsbCk7ZSYmKGUuZm9yRWFjaChpPT5pKCkpLGUuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHpuKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIFU3KG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2UoVTcsbik6ey4uLm4sLi4udH19dmFyIEpjPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgUXQoYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgUXQoYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57cHQuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLG1GKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntwdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9dW4obyxzLnBpcGUoWHMoKSkpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoZSxpKXtsZXQgcyxyPWUgaW5zdGFuY2VvZiBnRTtpZighdGhpcy5faW5qZWN0b3IuZ2V0KFpFKS5kb25lKXRocm93IXImJmZHKGUpLG5ldyBNdCg0MDUsZmFsc2UpO3M9cj9lOnRoaXMuX2luamVjdG9yLmdldChFbykucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHMuY29tcG9uZW50VHlwZSk7bGV0IGE9ZnVuY3Rpb24obil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfShzKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KGlwKSxjPXMuY3JlYXRlKHpuLk5VTEwsW10saXx8cy5zZWxlY3RvcixhKSx1PWMubG9jYXRpb24ubmF0aXZlRWxlbWVudCxkPWMuaW5qZWN0b3IuZ2V0KHhOLG51bGwpO3JldHVybiBkPy5yZWdpc3RlckFwcGxpY2F0aW9uKHUpLGMub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KGMuaG9zdFZpZXcpLGVFKHRoaXMuY29tcG9uZW50cyxjKSxkPy51bnJlZ2lzdGVyQXBwbGljYXRpb24odSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KGMpLGN9dGljaygpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBNdCgxMDEsITEpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IGUgb2YgdGhpcy5fdmlld3MpZS5kZXRlY3RDaGFuZ2VzKCl9Y2F0Y2goZSl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcihlKSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMX19YXR0YWNoVmlldyhlKXtsZXQgaT1lO3RoaXMuX3ZpZXdzLnB1c2goaSksaS5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGUpe2xldCBpPWU7ZUUodGhpcy5fdmlld3MsaSksaS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoZSl7dGhpcy5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGUpLHRoaXMuX2luamVjdG9yLmdldChrMGUsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2gocj0+cihlKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZT0+ZSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGUpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSksKCk9PmVFKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsZSl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgTXQoNDA2LCExKTtsZXQgZT10aGlzLl9pbmplY3RvcjtlLmRlc3Ryb3kmJiFlLmRlc3Ryb3llZCYmZS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKG5wKSxSKFNzKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gZUUobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX12YXIgejc9ITAsajc9ITE7ZnVuY3Rpb24gQmIoKXtyZXR1cm4gajc9ITAsejd9dmFyIG5uPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPWVfZSxufSkoKTtmdW5jdGlvbiBlX2Uobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihSRihuKSYmIWUpe2xldCBpPW9wKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyAkaChpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3ICRoKHRbMTZdLHQpOm51bGx9KE1vKCksWmUoKSwxNj09KDE2Jm4pKX12YXIgTUU9Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHpFKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3IHZGKHQpfX0sbl9lPShuLHQpPT50LHZGPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxuX2V9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PG9HKGkscixvKT9lOmksYT1vRyhzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcix1PWwtcjtpZihjIT11KXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgaD1wPG8ubGVuZ3RoP29bcF06b1twXT0wLGY9aCtwO3U8PWYmJmY8YyYmKG9bcF09aCsxKX1vW3MucHJldmlvdXNJbmRleF09dS1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIXpFKHQpKXRocm93IG5ldyBNdCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW1VFKCldKCk7Zm9yKDshKGk9ZS5uZXh0KCkpLmRvbmU7KXQoaS52YWx1ZSl9fSh0LGE9PntzPXRoaXMuX3RyYWNrQnlGbihyLGEpLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQscyk/KGkmJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUsYSxzLHIpKSxPYmplY3QuaXMoZS5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLGEpKTooZT10aGlzLl9taXNtYXRjaChlLGEscyxyKSxpPSEwKSxlPWUuX25leHQscisrfSksdGhpcy5sZW5ndGg9cjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLGkscil7bGV0IG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaSxudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGkscikpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IHlGKGUsaSksbyxyKSx0fV92ZXJpZnlSZWluc2VydGlvbih0LGUsaSxyKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpO3JldHVybiBudWxsIT09bz90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9X3RydW5jYXRlKHQpe2Zvcig7bnVsbCE9PXQ7KXtsZXQgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLGkpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7bGV0IHI9dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fbW92ZUFmdGVyKHQsZSxpKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fYWRkQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsaSksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH1faW5zZXJ0QWZ0ZXIodCxlLGkpe2xldCByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9aSx0fV9yZW1vdmUodCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX1fdW5saW5rKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgZT10Ll9wcmV2LGk9dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPWk6ZS5fbmV4dD1pLG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBTRSksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19LHlGPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fSxTRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2xldCBlPXQudHJhY2tCeUlkLGk9dGhpcy5tYXAuZ2V0KGUpO2l8fChpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX1nZXQodCxlKXtsZXQgaTtmb3IoaT10aGlzLl9oZWFkO251bGwhPT1pO2k9aS5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PWkuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGkudHJhY2tCeUlkLHQpKXJldHVybiBpO3JldHVybiBudWxsfXJlbW92ZSh0KXtsZXQgZT10Ll9wcmV2RHVwLGk9dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1pOmUuX25leHREdXA9aSxudWxsPT09aT90aGlzLl90YWlsPWU6aS5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX0sdGhpcy5tYXAuc2V0KGUsaSkpLGkuYWRkKHQpfWdldCh0LGUpe2xldCByPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2xldCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fTtmdW5jdGlvbiBvRyhuLHQsZSl7bGV0IGk9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1pKXJldHVybiBpO2xldCByPTA7cmV0dXJuIGUmJmk8ZS5sZW5ndGgmJihyPWVbaV0pLGkrdCtyfXZhciBFRT1jbGFzc3tjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8cE4odCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyB4Rn19LHhGPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fHBOKHQpKSl0aHJvdyBuZXcgTXQoOTAwLCExKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGU9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCwoaSxyKT0+e2lmKGUmJmUua2V5PT09cil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLGkpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7bGV0IG89dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocixpKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsbyl9fSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCBpPWU7bnVsbCE9PWk7aT1pLl9uZXh0UmVtb3ZlZClpPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoaS5rZXkpLGkuX25leHRSZW1vdmVkPWkuX25leHQsaS5wcmV2aW91c1ZhbHVlPWkuY3VycmVudFZhbHVlLGkuY3VycmVudFZhbHVlPW51bGwsaS5fcHJldj1udWxsLGkuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7bGV0IGk9dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9aSx0Ll9wcmV2PWUsaSYmKGkuX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkodCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7bGV0IHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMocixlKTtsZXQgbz1yLl9wcmV2LHM9ci5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9cykscyYmKHMuX3ByZXY9byksci5fbmV4dD1udWxsLHIuX3ByZXY9bnVsbCxyfWxldCBpPW5ldyBDRih0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxpKSxpLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKGkpLGl9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PmUodFtpXSxpKSl9fSxDRj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fTtmdW5jdGlvbiBzRygpe3JldHVybiBuZXcgdGMoW25ldyBNRV0pfXZhciB0Yz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKG51bGwhPWkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxzRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihudWxsIT1pKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6c0d9KSxufSkoKTtmdW5jdGlvbiBhRygpe3JldHVybiBuZXcgVmIoW25ldyBFRV0pfXZhciBWYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKGkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxhRygpKSxkZXBzOltbbixuZXcgVGEsbmV3IE9vXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihpKXJldHVybiBpO3Rocm93IG5ldyBNdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6YUd9KSxufSkoKSxpX2U9W25ldyBFRV0scl9lPVtuZXcgTUVdLFc3PShuZXcgdGMocl9lKSxuZXcgVmIoaV9lKSx3TihudWxsLCJjb3JlIixbXSkpLHE3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEpjKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGUxKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn12YXIgZmw9KCgpPT57cmV0dXJuKG49Zmx8fChmbD17fSkpW24uUkFXX1RFWFQ9MF09IlJBV19URVhUIixuW24uRVNDQVBBQkxFX1JBV19URVhUPTFdPSJFU0NBUEFCTEVfUkFXX1RFWFQiLG5bbi5QQVJTQUJMRV9EQVRBPTJdPSJQQVJTQUJMRV9EQVRBIixmbDt2YXIgbn0pKCk7ZnVuY3Rpb24gY2Qobil7aWYoIjoiIT1uWzBdKXJldHVybltudWxsLG5dO2xldCB0PW4uaW5kZXhPZigiOiIsMSk7aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0ICIke259IiBleHBlY3RpbmcgIjpuYW1lc3BhY2U6bmFtZSJgKTtyZXR1cm5bbi5zbGljZSgxLHQpLG4uc2xpY2UodCsxKV19ZnVuY3Rpb24gVU4obil7cmV0dXJuIm5nLWNvbnRhaW5lciI9PT1jZChuKVsxXX1mdW5jdGlvbiB6TihuKXtyZXR1cm4ibmctY29udGVudCI9PT1jZChuKVsxXX1mdW5jdGlvbiBZNyhuKXtyZXR1cm4gbnVsbD09PW4/bnVsbDpjZChuKVswXX1mdW5jdGlvbiBqTihuLHQpe3JldHVybiBuP2A6JHtufToke3R9YDp0fXZhciBYNyx0MSxRbj1jbGFzc3tjb25zdHJ1Y3Rvcih7Y2xvc2VkQnlDaGlsZHJlbjp0LGltcGxpY2l0TmFtZXNwYWNlUHJlZml4OmUsY29udGVudFR5cGU6aT1mbC5QQVJTQUJMRV9EQVRBLGNsb3NlZEJ5UGFyZW50OnI9ITEsaXNWb2lkOm89ITEsaWdub3JlRmlyc3RMZjpzPSExLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTphPSExfT17fSl7dGhpcy5jbG9zZWRCeUNoaWxkcmVuPXt9LHRoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITEsdCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGw9PnRoaXMuY2xvc2VkQnlDaGlsZHJlbltsXT0hMCksdGhpcy5pc1ZvaWQ9byx0aGlzLmNsb3NlZEJ5UGFyZW50PXJ8fG8sdGhpcy5pbXBsaWNpdE5hbWVzcGFjZVByZWZpeD1lfHxudWxsLHRoaXMuY29udGVudFR5cGU9aSx0aGlzLmlnbm9yZUZpcnN0TGY9cyx0aGlzLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZT1hfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4gdGhpcy5pc1ZvaWR8fHQudG9Mb3dlckNhc2UoKWluIHRoaXMuY2xvc2VkQnlDaGlsZHJlbn1nZXRDb250ZW50VHlwZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRoaXMuY29udGVudFR5cGU/KHZvaWQgMD09PXQ/dm9pZCAwOnRoaXMuY29udGVudFR5cGVbdF0pPz90aGlzLmNvbnRlbnRUeXBlLmRlZmF1bHQ6dGhpcy5jb250ZW50VHlwZX19O2Z1bmN0aW9uIGUzKG4pe3JldHVybiB0MXx8KFg3PW5ldyBRbix0MT17YmFzZTpuZXcgUW4oe2lzVm9pZDohMH0pLG1ldGE6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxhcmVhOm5ldyBRbih7aXNWb2lkOiEwfSksZW1iZWQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxsaW5rOm5ldyBRbih7aXNWb2lkOiEwfSksaW1nOm5ldyBRbih7aXNWb2lkOiEwfSksaW5wdXQ6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxwYXJhbTpuZXcgUW4oe2lzVm9pZDohMH0pLGhyOm5ldyBRbih7aXNWb2lkOiEwfSksYnI6bmV3IFFuKHtpc1ZvaWQ6ITB9KSxzb3VyY2U6bmV3IFFuKHtpc1ZvaWQ6ITB9KSx0cmFjazpuZXcgUW4oe2lzVm9pZDohMH0pLHdicjpuZXcgUW4oe2lzVm9pZDohMH0pLHA6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJsb2NrcXVvdGUiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImhyIiwibWFpbiIsIm5hdiIsIm9sIiwicCIsInByZSIsInNlY3Rpb24iLCJ0YWJsZSIsInVsIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0aGVhZDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il19KSx0Ym9keTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0Zm9vdDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksdHI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsidHIiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRkOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRoOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLGNvbDpuZXcgUW4oe2lzVm9pZDohMH0pLHN2ZzpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmcifSksZm9yZWlnbk9iamVjdDpuZXcgUW4oe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmciLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTohMH0pLG1hdGg6bmV3IFFuKHtpbXBsaWNpdE5hbWVzcGFjZVByZWZpeDoibWF0aCJ9KSxsaTpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJsaSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksZHQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdfSksZGQ6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdLGNsb3NlZEJ5UGFyZW50OiEwfSkscmI6bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsicmIiLCJydCIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxydDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHJ0YzpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxycDpuZXcgUW4oe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLG9wdGdyb3VwOm5ldyBRbih7Y2xvc2VkQnlDaGlsZHJlbjpbIm9wdGdyb3VwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxvcHRpb246bmV3IFFuKHtjbG9zZWRCeUNoaWxkcmVuOlsib3B0aW9uIiwib3B0Z3JvdXAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHByZTpuZXcgUW4oe2lnbm9yZUZpcnN0TGY6ITB9KSxsaXN0aW5nOm5ldyBRbih7aWdub3JlRmlyc3RMZjohMH0pLHN0eWxlOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuUkFXX1RFWFR9KSxzY3JpcHQ6bmV3IFFuKHtjb250ZW50VHlwZTpmbC5SQVdfVEVYVH0pLHRpdGxlOm5ldyBRbih7Y29udGVudFR5cGU6e2RlZmF1bHQ6ZmwuRVNDQVBBQkxFX1JBV19URVhULHN2ZzpmbC5QQVJTQUJMRV9EQVRBfX0pLHRleHRhcmVhOm5ldyBRbih7Y29udGVudFR5cGU6ZmwuRVNDQVBBQkxFX1JBV19URVhULGlnbm9yZUZpcnN0TGY6ITB9KX0pLHQxW25dPz90MVtuLnRvTG93ZXJDYXNlKCldPz9YN312YXIgUTc9bmV3IFJlZ0V4cCgiKFxcOm5vdFxcKCl8KChbXFwuXFwjXT8pWy1cXHddKyl8KD86XFxbKFstLlxcdypcXFxcJF0rKSg/Oj0oW1wiJ10/KShbXlxcXVwiJ10qKVxcNSk/XFxdKXwoXFwpKXwoXFxzKixcXHMqKSIsImciKSx1ZD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudD1udWxsLHRoaXMuY2xhc3NOYW1lcz1bXSx0aGlzLmF0dHJzPVtdLHRoaXMubm90U2VsZWN0b3JzPVtdfXN0YXRpYyBwYXJzZSh0KXtsZXQgbyxlPVtdLGk9KGwsYyk9PntjLm5vdFNlbGVjdG9ycy5sZW5ndGg+MCYmIWMuZWxlbWVudCYmMD09Yy5jbGFzc05hbWVzLmxlbmd0aCYmMD09Yy5hdHRycy5sZW5ndGgmJihjLmVsZW1lbnQ9IioiKSxsLnB1c2goYyl9LHI9bmV3IHVkLHM9cixhPSExO2ZvcihRNy5sYXN0SW5kZXg9MDtvPVE3LmV4ZWModCk7KXtpZihvWzFdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTmVzdGluZyA6bm90IGluIGEgc2VsZWN0b3IgaXMgbm90IGFsbG93ZWQiKTthPSEwLHM9bmV3IHVkLHIubm90U2VsZWN0b3JzLnB1c2gocyl9bGV0IGw9b1syXTtpZihsKXtsZXQgdT1vWzNdOyIjIj09PXU/cy5hZGRBdHRyaWJ1dGUoImlkIixsLnNsaWNlKDEpKToiLiI9PT11P3MuYWRkQ2xhc3NOYW1lKGwuc2xpY2UoMSkpOnMuc2V0RWxlbWVudChsKX1sZXQgYz1vWzRdO2lmKGMmJnMuYWRkQXR0cmlidXRlKHMudW5lc2NhcGVBdHRyaWJ1dGUoYyksb1s2XSksb1s3XSYmKGE9ITEscz1yKSxvWzhdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgc2VsZWN0b3JzIGluIDpub3QgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpKGUscikscj1zPW5ldyB1ZH19cmV0dXJuIGkoZSxyKSxlfXVuZXNjYXBlQXR0cmlidXRlKHQpe2xldCBlPSIiLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBvPXQuY2hhckF0KHIpO2lmKCJcXCIhPT1vKXtpZigiJCI9PT1vJiYhaSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIGF0dHJpYnV0ZSBzZWxlY3RvciAiJHt0fSIuIFVuZXNjYXBlZCAiJCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGVzY2FwZSB3aXRoICJcXCQiLmApO2k9ITEsZSs9b31lbHNlIGk9ITB9cmV0dXJuIGV9ZXNjYXBlQXR0cmlidXRlKHQpe3JldHVybiB0LnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC9cJC9nLCJcXCQiKX1pc0VsZW1lbnRTZWxlY3Rvcigpe3JldHVybiB0aGlzLmhhc0VsZW1lbnRTZWxlY3RvcigpJiYwPT10aGlzLmNsYXNzTmFtZXMubGVuZ3RoJiYwPT10aGlzLmF0dHJzLmxlbmd0aCYmMD09PXRoaXMubm90U2VsZWN0b3JzLmxlbmd0aH1oYXNFbGVtZW50U2VsZWN0b3IoKXtyZXR1cm4hIXRoaXMuZWxlbWVudH1zZXRFbGVtZW50KHQ9bnVsbCl7dGhpcy5lbGVtZW50PXR9Z2V0TWF0Y2hpbmdFbGVtZW50VGVtcGxhdGUoKXtsZXQgdD10aGlzLmVsZW1lbnR8fCJkaXYiLGU9dGhpcy5jbGFzc05hbWVzLmxlbmd0aD4wP2AgY2xhc3M9IiR7dGhpcy5jbGFzc05hbWVzLmpvaW4oIiAiKX0iYDoiIixpPSIiO2ZvcihsZXQgcj0wO3I8dGhpcy5hdHRycy5sZW5ndGg7cis9MilpKz1gICR7dGhpcy5hdHRyc1tyXX0keyIiIT09dGhpcy5hdHRyc1tyKzFdP2A9IiR7dGhpcy5hdHRyc1tyKzFdfSJgOiIifWA7cmV0dXJuIGUzKHQpLmlzVm9pZD9gPCR7dH0ke2V9JHtpfS8+YDpgPCR7dH0ke2V9JHtpfT48LyR7dH0+YH1nZXRBdHRycygpe2xldCB0PVtdO3JldHVybiB0aGlzLmNsYXNzTmFtZXMubGVuZ3RoPjAmJnQucHVzaCgiY2xhc3MiLHRoaXMuY2xhc3NOYW1lcy5qb2luKCIgIikpLHQuY29uY2F0KHRoaXMuYXR0cnMpfWFkZEF0dHJpYnV0ZSh0LGU9IiIpe3RoaXMuYXR0cnMucHVzaCh0LGUmJmUudG9Mb3dlckNhc2UoKXx8IiIpfWFkZENsYXNzTmFtZSh0KXt0aGlzLmNsYXNzTmFtZXMucHVzaCh0LnRvTG93ZXJDYXNlKCkpfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5lbGVtZW50fHwiIjtpZih0aGlzLmNsYXNzTmFtZXMmJnRoaXMuY2xhc3NOYW1lcy5mb3JFYWNoKGU9PnQrPWAuJHtlfWApLHRoaXMuYXR0cnMpZm9yKGxldCBlPTA7ZTx0aGlzLmF0dHJzLmxlbmd0aDtlKz0yKXtsZXQgaT10aGlzLmVzY2FwZUF0dHJpYnV0ZSh0aGlzLmF0dHJzW2VdKSxyPXRoaXMuYXR0cnNbZSsxXTt0Kz1gWyR7aX0ke3I/Ij0iK3I6IiJ9XWB9cmV0dXJuIHRoaXMubm90U2VsZWN0b3JzLmZvckVhY2goZT0+dCs9YDpub3QoJHtlfSlgKSx0fX0sb2Q9KCgpPT57cmV0dXJuKG49b2R8fChvZD17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixvZDt2YXIgbn0pKCkscWI9KCgpPT57cmV0dXJuKG49cWJ8fChxYj17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixxYjt2YXIgbn0pKCksWXI9KCgpPT57cmV0dXJuKG49WXJ8fChZcj17fSkpW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJMIixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLFlyO3ZhciBufSkoKTtmdW5jdGlvbiBsX2Uobil7bGV0IHQ9ZnVuY3Rpb24obil7bGV0IHQ9bi5jbGFzc05hbWVzJiZuLmNsYXNzTmFtZXMubGVuZ3RoP1s4LC4uLm4uY2xhc3NOYW1lc106W107cmV0dXJuW24uZWxlbWVudCYmIioiIT09bi5lbGVtZW50P24uZWxlbWVudDoiIiwuLi5uLmF0dHJzLC4uLnRdfShuKSxlPW4ubm90U2VsZWN0b3JzJiZuLm5vdFNlbGVjdG9ycy5sZW5ndGg/bi5ub3RTZWxlY3RvcnMubWFwKGk9PmZ1bmN0aW9uKG4pe2xldCB0PW4uY2xhc3NOYW1lcyYmbi5jbGFzc05hbWVzLmxlbmd0aD9bOCwuLi5uLmNsYXNzTmFtZXNdOltdO3JldHVybiBuLmVsZW1lbnQ/WzUsbi5lbGVtZW50LC4uLm4uYXR0cnMsLi4udF06bi5hdHRycy5sZW5ndGg/WzMsLi4ubi5hdHRycywuLi50XTpuLmNsYXNzTmFtZXMmJm4uY2xhc3NOYW1lcy5sZW5ndGg/WzksLi4ubi5jbGFzc05hbWVzXTpbXX0oaSkpOltdO3JldHVybiB0LmNvbmNhdCguLi5lKX1mdW5jdGlvbiB0MyhuKXtyZXR1cm4gbj91ZC5wYXJzZShuKS5tYXAobF9lKTpbXX12YXIgY19lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBtcShuLHQsZSl7bGV0IGk9bi5pbmRleE9mKHQpO3JldHVybi0xPT1pP2U6W24uc2xpY2UoMCxpKS50cmltKCksbi5zbGljZShpKzEpLnRyaW0oKV19ZnVuY3Rpb24gaDEobil7dGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBFcnJvcjogJHtufWApfWZ1bmN0aW9uIG4zKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uLmNoYXJDb2RlQXQoZSk7aWYoaT49NTUyOTYmJmk8PTU2MzE5JiZuLmxlbmd0aD5lKzEpe2xldCByPW4uY2hhckNvZGVBdChlKzEpO3I+PTU2MzIwJiZyPD01NzM0MyYmKGUrKyxpPShpLTU1Mjk2PDwxMCkrci01NjMyMCs2NTUzNil9aTw9MTI3P3QucHVzaChpKTppPD0yMDQ3P3QucHVzaChpPj42JjMxfDE5Miw2MyZpfDEyOCk6aTw9NjU1MzU/dC5wdXNoKGk+PjEyfDIyNCxpPj42JjYzfDEyOCw2MyZpfDEyOCk6aTw9MjA5NzE1MSYmdC5wdXNoKGk+PjE4Jjd8MjQwLGk+PjEyJjYzfDEyOCxpPj42JjYzfDEyOCw2MyZpfDEyOCl9cmV0dXJuIHR9ZnVuY3Rpb24gZ3Eobil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIlsiK24ubWFwKGdxKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1uKXJldHVybiIiK247aWYobi5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtuLm92ZXJyaWRkZW5OYW1lfWA7aWYobi5uYW1lKXJldHVybmAke24ubmFtZX1gO2lmKCFuLnRvU3RyaW5nKXJldHVybiJvYmplY3QiO2xldCB0PW4udG9TdHJpbmcoKTtpZihudWxsPT10KXJldHVybiIiK3Q7bGV0IGU9dC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09ZT90OnQuc3Vic3RyaW5nKDAsZSl9dmFyIHAwPSgoKT0+dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksbXA9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1zdGF0aWMgemVybygpe3JldHVybiBuZXcgbXAoWzBdKX1zdGF0aWMgb25lKCl7cmV0dXJuIG5ldyBtcChbMV0pfWNsb25lKCl7cmV0dXJuIG5ldyBtcCh0aGlzLmRpZ2l0cy5zbGljZSgpKX1hZGQodCl7bGV0IGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLmFkZFRvU2VsZih0KSxlfWFkZFRvU2VsZih0KXtsZXQgZT1NYXRoLm1heCh0aGlzLmRpZ2l0cy5sZW5ndGgsdC5kaWdpdHMubGVuZ3RoKSxpPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89aTtyPHRoaXMuZGlnaXRzLmxlbmd0aCYmKG8rPXRoaXMuZGlnaXRzW3JdKSxyPHQuZGlnaXRzLmxlbmd0aCYmKG8rPXQuZGlnaXRzW3JdKSxvPj0xMD8odGhpcy5kaWdpdHNbcl09by0xMCxpPTEpOih0aGlzLmRpZ2l0c1tyXT1vLGk9MCl9aT4wJiYodGhpcy5kaWdpdHNbZV09MSl9dG9TdHJpbmcoKXtsZXQgdD0iIjtmb3IobGV0IGU9dGhpcy5kaWdpdHMubGVuZ3RoLTE7ZT49MDtlLS0pdCs9dGhpcy5kaWdpdHNbZV07cmV0dXJuIHR9fSxmMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvd2VyT2ZUd29zPVt0XX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnBvd2VyT2ZUd29zWzBdfW11bHRpcGx5QnkodCl7bGV0IGU9bXAuemVybygpO3JldHVybiB0aGlzLm11bHRpcGx5QnlBbmRBZGRUbyh0LGUpLGV9bXVsdGlwbHlCeUFuZEFkZFRvKHQsZSl7Zm9yKGxldCBpPTA7MCE9PXQ7dD4+Pj0xLGkrKylpZigxJnQpe2xldCByPXRoaXMuZ2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byhpKTtlLmFkZFRvU2VsZihyKX19Z2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byh0KXtmb3IobGV0IGU9dGhpcy5wb3dlck9mVHdvcy5sZW5ndGg7ZTw9dDtlKyspe2xldCBpPXRoaXMucG93ZXJPZlR3b3NbZS0xXTt0aGlzLnBvd2VyT2ZUd29zW2VdPWkuYWRkKGkpfXJldHVybiB0aGlzLnBvd2VyT2ZUd29zW3RdfX07ZnVuY3Rpb24gbV9lKG4pe3JldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uMyhuKSxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5sZW5ndGgrMz4+PjIsaT1bXTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09b2Yobiw0KnIsdCk7cmV0dXJuIGl9KHQsbmMuQmlnKSxpPTgqdC5sZW5ndGgscj1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8ODA7aSsrKWUucHVzaCh1bmRlZmluZWQpO3JldHVybiBlfSgpLG89MTczMjU4NDE5MyxzPTQwMjMyMzM0MTcsYT0yNTYyMzgzMTAyLGw9MjcxNzMzODc4LGM9MzI4NTM3NzUyMDtlW2k+PjVdfD0xMjg8PDI0LWklMzIsZVsxNSsoaSs2ND4+OTw8NCldPWk7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kz0xNil7bGV0IGQ9byxwPXMsaD1hLGY9bCxtPWM7Zm9yKGxldCBDPTA7Qzw4MDtDKyspe3JbQ109QzwxNj9lW3UrQ106TU4ocltDLTNdXnJbQy04XV5yW0MtMTRdXnJbQy0xNl0sMSk7bGV0IF89Yl9lKEMscyxhLGwpLHk9X1swXSxJPV9bMV0sQT1bTU4obyw1KSx5LGMsSSxyW0NdXS5yZWR1Y2UoQXMpO2M9bCxsPWEsYT1NTihzLDMwKSxzPW8sbz1BfW89QXMobyxkKSxzPUFzKHMscCksYT1BcyhhLGgpLGw9QXMobCxmKSxjPUFzKGMsbSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1ZTihuLGUpO3QrPShpPj4+NCkudG9TdHJpbmcoMTYpKygxNSZpKS50b1N0cmluZygxNil9cmV0dXJuIHQudG9Mb3dlckNhc2UoKX0oZnVuY3Rpb24obil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT50LmNvbmNhdChmdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPDQ7ZSsrKXQucHVzaChuPj4+OCooMy1lKSYyNTUpO3JldHVybiB0fShlKSksW10pfShbbyxzLGEsbCxjXSkpfShmdW5jdGlvbihuKXtyZXR1cm4gbi5tYXAodD0+dC52aXNpdChfX2UsbnVsbCkpfShuLm5vZGVzKS5qb2luKCIiKStgWyR7bi5tZWFuaW5nfV1gKX1mdW5jdGlvbiBfcShuKXtsZXQgdD1uZXcgcU47cmV0dXJuIFkxKG4ubm9kZXMubWFwKGk9PmkudmlzaXQodCxudWxsKSkuam9pbigiIiksbi5tZWFuaW5nKX12YXIgbTE9Y2xhc3N7dmlzaXRUZXh0KHQsZSl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCxlKXtyZXR1cm5gWyR7dC5jaGlsZHJlbi5tYXAoaT0+aS52aXNpdCh0aGlzKSkuam9pbigiLCAiKX1dYH12aXNpdEljdSh0LGUpe2xldCBpPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9ufSwgJHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQuaXNWb2lkP2A8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ii8+YDpgPHBoIHRhZyBuYW1lPSIke3Quc3RhcnROYW1lfSI+JHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfTwvcGggbmFtZT0iJHt0LmNsb3NlTmFtZX0iPmB9dmlzaXRQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0LnZhbHVlP2A8cGggbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWV9PC9waD5gOmA8cGggbmFtZT0iJHt0Lm5hbWV9Ii8+YH12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuYDxwaCBpY3UgbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWUudmlzaXQodGhpcyl9PC9waD5gfX0sX19lPW5ldyBtMSxxTj1jbGFzcyBleHRlbmRzIG0xe3Zpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH19O2Z1bmN0aW9uIGJfZShuLHQsZSxpKXtyZXR1cm4gbjwyMD9bdCZlfH50JmksMTUxODUwMDI0OV06bjw0MD9bdF5lXmksMTg1OTc3NTM5M106bjw2MD9bdCZlfHQmaXxlJmksMjQwMDk1OTcwOF06W3ReZV5pLDMzOTU0Njk3ODJdfWZ1bmN0aW9uIEo3KG4pe2xldCB0PW4zKG4pLGU9JDcodCwwKSxpPSQ3KHQsMTAyMDcyKTtyZXR1cm4gMD09ZSYmKDA9PWl8fDE9PWkpJiYoZV49MzE5NzkwMDYzLGlePS0xODAxNDEwMjY0KSxbZSxpXX1mdW5jdGlvbiBZMShuLHQ9IiIpe2xldCBlPUo3KG4pO2lmKHQpe2xldCBvPUo3KHQpO2U9ZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLHI9dFswXSxzPXZxKG5bMV0sdFsxXSksYT1zWzBdLGw9c1sxXTtyZXR1cm5bQXMoQXMoZSxyKSxhKSxsXX0oZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLGk9blsxXTtyZXR1cm5bZTw8MXxpPj4+MzEsaTw8MXxlPj4+MzFdfShlKSxvKX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT10OS50b1RoZVBvd2VyT2YoMCkubXVsdGlwbHlCeSh0KTtyZXR1cm4gdDkudG9UaGVQb3dlck9mKDQpLm11bHRpcGx5QnlBbmRBZGRUbyhuLGUpLGUudG9TdHJpbmcoKX0oMjE0NzQ4MzY0NyZlWzBdLGVbMV0pfWZ1bmN0aW9uICQ3KG4sdCl7bGV0IHIsZT0yNjU0NDM1NzY5LGk9MjY1NDQzNTc2OSxvPW4ubGVuZ3RoO2ZvcihyPTA7cisxMjw9bztyKz0xMil7ZT1BcyhlLG9mKG4scixuYy5MaXR0bGUpKSxpPUFzKGksb2YobixyKzQsbmMuTGl0dGxlKSk7bGV0IHM9ZTkoZSxpLHQ9QXModCxvZihuLHIrOCxuYy5MaXR0bGUpKSk7ZT1zWzBdLGk9c1sxXSx0PXNbMl19cmV0dXJuIGU9QXMoZSxvZihuLHIsbmMuTGl0dGxlKSksaT1BcyhpLG9mKG4scis0LG5jLkxpdHRsZSkpLHQ9QXModCxvKSxlOShlLGksdD1Bcyh0LG9mKG4scis4LG5jLkxpdHRsZSk8PDgpKVsyXX1mdW5jdGlvbiBlOShuLHQsZSl7cmV0dXJuIG49a28obix0KSxuPWtvKG4sZSksbl49ZT4+PjEzLHQ9a28odCxlKSx0PWtvKHQsbiksdF49bjw8OCxlPWtvKGUsbiksZT1rbyhlLHQpLGVePXQ+Pj4xMyxuPWtvKG4sdCksbj1rbyhuLGUpLG5ePWU+Pj4xMix0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDE2LGU9a28oZSxuKSxlPWtvKGUsdCksZV49dD4+PjUsbj1rbyhuLHQpLG49a28obixlKSxuXj1lPj4+Myx0PWtvKHQsZSksdD1rbyh0LG4pLHRePW48PDEwLGU9a28oZSxuKSxlPWtvKGUsdCksW24sdCxlXj10Pj4+MTVdfXZhciBuYz0oKCk9PntyZXR1cm4obj1uY3x8KG5jPXt9KSlbbi5MaXR0bGU9MF09IkxpdHRsZSIsbltuLkJpZz0xXT0iQmlnIixuYzt2YXIgbn0pKCk7ZnVuY3Rpb24gQXMobix0KXtyZXR1cm4gdnEobix0KVsxXX1mdW5jdGlvbiB2cShuLHQpe2xldCBlPSg2NTUzNSZuKSsoNjU1MzUmdCksaT0obj4+PjE2KSsodD4+PjE2KSsoZT4+PjE2KTtyZXR1cm5baT4+PjE2LGk8PDE2fDY1NTM1JmVdfWZ1bmN0aW9uIGtvKG4sdCl7bGV0IGU9KDY1NTM1Jm4pLSg2NTUzNSZ0KTtyZXR1cm4obj4+MTYpLSh0Pj4xNikrKGU+PjE2KTw8MTZ8NjU1MzUmZX1mdW5jdGlvbiBNTihuLHQpe3JldHVybiBuPDx0fG4+Pj4zMi10fWZ1bmN0aW9uIFlOKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoPzA6blt0XX1mdW5jdGlvbiBvZihuLHQsZSl7bGV0IGk9MDtpZihlPT09bmMuQmlnKWZvcihsZXQgcj0wO3I8NDtyKyspaSs9WU4obix0K3IpPDwyNC04KnI7ZWxzZSBmb3IobGV0IHI9MDtyPDQ7cisrKWkrPVlOKG4sdCtyKTw8OCpyO3JldHVybiBpfXZhciB0OT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBmMShtcC5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgZjEoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KSxhMT0oKCk9PntyZXR1cm4obj1hMXx8KGExPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uQ29uc3Q9MV09IkNvbnN0IixhMTt2YXIgbn0pKCksZzE9Y2xhc3N7Y29uc3RydWN0b3IodD1hMS5Ob25lKXt0aGlzLm1vZGlmaWVycz10fWhhc01vZGlmaWVyKHQpe3JldHVybiAwIT0odGhpcy5tb2RpZmllcnMmdCl9fSxvYz0oKCk9PntyZXR1cm4obj1vY3x8KG9jPXt9KSlbbi5EeW5hbWljPTBdPSJEeW5hbWljIixuW24uQm9vbD0xXT0iQm9vbCIsbltuLlN0cmluZz0yXT0iU3RyaW5nIixuW24uSW50PTNdPSJJbnQiLG5bbi5OdW1iZXI9NF09Ik51bWJlciIsbltuLkZ1bmN0aW9uPTVdPSJGdW5jdGlvbiIsbltuLkluZmVycmVkPTZdPSJJbmZlcnJlZCIsbltuLk5vbmU9N109Ik5vbmUiLG9jO3ZhciBufSkoKSxzdT1jbGFzcyBleHRlbmRzIGcxe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZSksdGhpcy5uYW1lPXR9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRCdWlsdGluVHlwZSh0aGlzLGUpfX0sc2M9Y2xhc3MgZXh0ZW5kcyBnMXtjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXtzdXBlcihlKSx0aGlzLnZhbHVlPXQsdGhpcy50eXBlUGFyYW1zPWl9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uVHlwZSh0aGlzLGUpfX0sVjA9bmV3IHN1KG9jLkR5bmFtaWMpLGlhPW5ldyBzdShvYy5JbmZlcnJlZCksRF9lPW5ldyBzdShvYy5Cb29sKSxreD0obmV3IHN1KG9jLkludCksbmV3IHN1KG9jLk51bWJlcikpLHlxPW5ldyBzdShvYy5TdHJpbmcpLGRkPShuZXcgc3Uob2MuRnVuY3Rpb24pLG5ldyBzdShvYy5Ob25lKSkscGY9KCgpPT57cmV0dXJuKG49cGZ8fChwZj17fSkpW24uTWludXM9MF09Ik1pbnVzIixuW24uUGx1cz0xXT0iUGx1cyIscGY7dmFyIG59KSgpLGhuPSgoKT0+e3JldHVybihuPWhufHwoaG49e30pKVtuLkVxdWFscz0wXT0iRXF1YWxzIixuW24uTm90RXF1YWxzPTFdPSJOb3RFcXVhbHMiLG5bbi5JZGVudGljYWw9Ml09IklkZW50aWNhbCIsbltuLk5vdElkZW50aWNhbD0zXT0iTm90SWRlbnRpY2FsIixuW24uTWludXM9NF09Ik1pbnVzIixuW24uUGx1cz01XT0iUGx1cyIsbltuLkRpdmlkZT02XT0iRGl2aWRlIixuW24uTXVsdGlwbHk9N109Ik11bHRpcGx5IixuW24uTW9kdWxvPThdPSJNb2R1bG8iLG5bbi5BbmQ9OV09IkFuZCIsbltuLk9yPTEwXT0iT3IiLG5bbi5CaXR3aXNlQW5kPTExXT0iQml0d2lzZUFuZCIsbltuLkxvd2VyPTEyXT0iTG93ZXIiLG5bbi5Mb3dlckVxdWFscz0xM109Ikxvd2VyRXF1YWxzIixuW24uQmlnZ2VyPTE0XT0iQmlnZ2VyIixuW24uQmlnZ2VyRXF1YWxzPTE1XT0iQmlnZ2VyRXF1YWxzIixuW24uTnVsbGlzaENvYWxlc2NlPTE2XT0iTnVsbGlzaENvYWxlc2NlIixobjt2YXIgbn0pKCk7ZnVuY3Rpb24gYnEobix0LGUpe2xldCBpPW4ubGVuZ3RoO2lmKGkhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGk7cisrKWlmKCFlKG5bcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbGMobix0KXtyZXR1cm4gYnEobix0LChlLGkpPT5lLmlzRXF1aXZhbGVudChpKSl9dmFyIENyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50eXBlPXR8fG51bGwsdGhpcy5zb3VyY2VTcGFuPWV8fG51bGx9cHJvcCh0LGUpe3JldHVybiBuZXcgYjAodGhpcyx0LG51bGwsZSl9a2V5KHQsZSxpKXtyZXR1cm4gbmV3IHN4KHRoaXMsdCxlLGkpfWNhbGxGbih0LGUsaSl7cmV0dXJuIG5ldyB2cCh0aGlzLHQsbnVsbCxlLGkpfWluc3RhbnRpYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGdmKHRoaXMsdCxlLGkpfWNvbmRpdGlvbmFsKHQsZT1udWxsLGkpe3JldHVybiBuZXcgaXgodGhpcyx0LGUsbnVsbCxpKX1lcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLkVxdWFscyx0aGlzLHQsbnVsbCxlKX1ub3RFcXVhbHModCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdEVxdWFscyx0aGlzLHQsbnVsbCxlKX1pZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLklkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1ub3RJZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk5vdElkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1taW51cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTWludXMsdGhpcyx0LG51bGwsZSl9cGx1cyh0LGUpe3JldHVybiBuZXcgbHIoaG4uUGx1cyx0aGlzLHQsbnVsbCxlKX1kaXZpZGUodCxlKXtyZXR1cm4gbmV3IGxyKGhuLkRpdmlkZSx0aGlzLHQsbnVsbCxlKX1tdWx0aXBseSh0LGUpe3JldHVybiBuZXcgbHIoaG4uTXVsdGlwbHksdGhpcyx0LG51bGwsZSl9bW9kdWxvKHQsZSl7cmV0dXJuIG5ldyBscihobi5Nb2R1bG8sdGhpcyx0LG51bGwsZSl9YW5kKHQsZSl7cmV0dXJuIG5ldyBscihobi5BbmQsdGhpcyx0LG51bGwsZSl9Yml0d2lzZUFuZCh0LGUsaT0hMCl7cmV0dXJuIG5ldyBscihobi5CaXR3aXNlQW5kLHRoaXMsdCxudWxsLGUsaSl9b3IodCxlKXtyZXR1cm4gbmV3IGxyKGhuLk9yLHRoaXMsdCxudWxsLGUpfWxvd2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5Mb3dlcix0aGlzLHQsbnVsbCxlKX1sb3dlckVxdWFscyh0LGUpe3JldHVybiBuZXcgbHIoaG4uTG93ZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9YmlnZ2VyKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXIsdGhpcyx0LG51bGwsZSl9YmlnZ2VyRXF1YWxzKHQsZSl7cmV0dXJuIG5ldyBscihobi5CaWdnZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9aXNCbGFuayh0KXtyZXR1cm4gdGhpcy5lcXVhbHMoYzEsdCl9bnVsbGlzaENvYWxlc2NlKHQsZSl7cmV0dXJuIG5ldyBscihobi5OdWxsaXNoQ29hbGVzY2UsdGhpcyx0LG51bGwsZSl9dG9TdG10KCl7cmV0dXJuIG5ldyBsdSh0aGlzLG51bGwpfX0sbWY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLm5hbWU9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBtZiYmdGhpcy5uYW1lPT09dC5uYW1lfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRWYXJFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgJGIodGhpcy5uYW1lLHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdjA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmV4cHI9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFR5cGVvZkV4cHIodGhpcyxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2MCYmdC5leHByLmlzRXF1aXZhbGVudCh0aGlzLmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4gdGhpcy5leHByLmlzQ29uc3RhbnQoKX19LERuPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5ub2RlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG4mJnRoaXMubm9kZT09PXQubm9kZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcmFwcGVkTm9kZUV4cHIodGhpcyxlKX19LCRiPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaXx8ZS50eXBlLHIpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiAkYiYmdGhpcy5uYW1lPT09dC5uYW1lJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZVZhckV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBhdSh0aGlzLm5hbWUsdGhpcy52YWx1ZSx0LGUsdGhpcy5zb3VyY2VTcGFuKX10b0NvbnN0RGVjbCgpe3JldHVybiB0aGlzLnRvRGVjbFN0bXQoaWEsa2EuRmluYWwpfX0sZXg9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHJ8fGkudHlwZSxvKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5pbmRleD1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBleCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZUtleUV4cHIodGhpcyxlKX19LHR4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihyfHxpLnR5cGUsbyksdGhpcy5yZWNlaXZlcj10LHRoaXMubmFtZT1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0eCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMubmFtZT09PXQubmFtZSYmdGhpcy52YWx1ZS5pc0VxdWl2YWxlbnQodC52YWx1ZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0V3JpdGVQcm9wRXhwcih0aGlzLGUpfX0sdnA9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3N1cGVyKGksciksdGhpcy5mbj10LHRoaXMuYXJncz1lLHRoaXMucHVyZT1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHZwJiZ0aGlzLmZuLmlzRXF1aXZhbGVudCh0LmZuKSYmbGModGhpcy5hcmdzLHQuYXJncykmJnRoaXMucHVyZT09PXQucHVyZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodGhpcyxlKX19LG54PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnRhZz10LHRoaXMudGVtcGxhdGU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBueCYmdGhpcy50YWcuaXNFcXVpdmFsZW50KHQudGFnKSYmYnEodGhpcy50ZW1wbGF0ZS5lbGVtZW50cyx0LnRlbXBsYXRlLmVsZW1lbnRzLChlLGkpPT5lLnRleHQ9PT1pLnRleHQpJiZsYyh0aGlzLnRlbXBsYXRlLmV4cHJlc3Npb25zLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0aGlzLGUpfX0sZ2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihpLHIpLHRoaXMuY2xhc3NFeHByPXQsdGhpcy5hcmdzPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZ2YmJnRoaXMuY2xhc3NFeHByLmlzRXF1aXZhbGVudCh0LmNsYXNzRXhwcikmJmxjKHRoaXMuYXJncyx0LmFyZ3MpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdEluc3RhbnRpYXRlRXhwcih0aGlzLGUpfX0sRmE9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLnZhbHVlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRmEmJnRoaXMudmFsdWU9PT10LnZhbHVlfWlzQ29uc3RhbnQoKXtyZXR1cm4hMH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExpdGVyYWxFeHByKHRoaXMsZSl9fSxfMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZWxlbWVudHM9dCx0aGlzLmV4cHJlc3Npb25zPWV9fSx2MT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5yYXdUZXh0PWk/P2U/LnRvU3RyaW5nKCk/P1FOKGwxKHQpKX19LGhmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWV9fSxoMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5hc3NvY2lhdGVkTWVzc2FnZT1pfX0sWE49Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHlxLG8pLHRoaXMubWV0YUJsb2NrPXQsdGhpcy5tZXNzYWdlUGFydHM9ZSx0aGlzLnBsYWNlSG9sZGVyTmFtZXM9aSx0aGlzLmV4cHJlc3Npb25zPXJ9aXNFcXVpdmFsZW50KHQpe3JldHVybiExfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExvY2FsaXplZFN0cmluZyh0aGlzLGUpfXNlcmlhbGl6ZUkxOG5IZWFkKCl7bGV0IHQ9dGhpcy5tZXRhQmxvY2suZGVzY3JpcHRpb258fCIiO3JldHVybiB0aGlzLm1ldGFCbG9jay5tZWFuaW5nJiYodD1gJHt0aGlzLm1ldGFCbG9jay5tZWFuaW5nfXwke3R9YCksdGhpcy5tZXRhQmxvY2suY3VzdG9tSWQmJih0PWAke3R9QEAke3RoaXMubWV0YUJsb2NrLmN1c3RvbUlkfWApLHRoaXMubWV0YUJsb2NrLmxlZ2FjeUlkcyYmdGhpcy5tZXRhQmxvY2subGVnYWN5SWRzLmZvckVhY2goZT0+e3Q9YCR7dH1cdTI0MWYke2V9YH0pLGk5KHQsdGhpcy5tZXNzYWdlUGFydHNbMF0udGV4dCx0aGlzLmdldE1lc3NhZ2VQYXJ0U291cmNlU3BhbigwKSl9Z2V0TWVzc2FnZVBhcnRTb3VyY2VTcGFuKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VQYXJ0c1t0XT8uc291cmNlU3Bhbj8/dGhpcy5zb3VyY2VTcGFufWdldFBsYWNlaG9sZGVyU291cmNlU3Bhbih0KXtyZXR1cm4gdGhpcy5wbGFjZUhvbGRlck5hbWVzW3RdPy5zb3VyY2VTcGFuPz90aGlzLmV4cHJlc3Npb25zW3RdPy5zb3VyY2VTcGFuPz90aGlzLnNvdXJjZVNwYW59c2VyaWFsaXplSTE4blRlbXBsYXRlUGFydCh0KXtsZXQgZT10aGlzLnBsYWNlSG9sZGVyTmFtZXNbdC0xXSxpPXRoaXMubWVzc2FnZVBhcnRzW3RdLHI9ZS50ZXh0O3JldHVybiAwPT09ZS5hc3NvY2lhdGVkTWVzc2FnZT8ubGVnYWN5SWRzLmxlbmd0aCYmKHIrPWBAQCR7WTEoZS5hc3NvY2lhdGVkTWVzc2FnZS5tZXNzYWdlU3RyaW5nLGUuYXNzb2NpYXRlZE1lc3NhZ2UubWVhbmluZyl9YCksaTkocixpLnRleHQsdGhpcy5nZXRNZXNzYWdlUGFydFNvdXJjZVNwYW4odCkpfX0sbDE9bj0+bi5yZXBsYWNlKC9cXC9nLCJcXFxcIiksUl9lPW49Pm4ucmVwbGFjZSgvXjovLCJcXDoiKSxPX2U9bj0+bi5yZXBsYWNlKC86L2csIlxcOiIpLFFOPW49Pm4ucmVwbGFjZSgvYC9nLCJcXGAiKS5yZXBsYWNlKC9cJHsvZywiJFxceyIpO2Z1bmN0aW9uIGk5KG4sdCxlKXtyZXR1cm4iIj09PW4/e2Nvb2tlZDp0LHJhdzpRTihSX2UobDEodCkpKSxyYW5nZTplfTp7Y29va2VkOmA6JHtufToke3R9YCxyYXc6UU4oYDoke09fZShsMShuKSl9OiR7bDEodCl9YCkscmFuZ2U6ZX19dmFyIHkwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnR5cGVQYXJhbXM9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5MCYmdGhpcy52YWx1ZS5uYW1lPT09dC52YWx1ZS5uYW1lJiZ0aGlzLnZhbHVlLm1vZHVsZU5hbWU9PT10LnZhbHVlLm1vZHVsZU5hbWUmJnRoaXMudmFsdWUucnVudGltZT09PXQudmFsdWUucnVudGltZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRFeHRlcm5hbEV4cHIodGhpcyxlKX19LGl4PWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyLG8pe3N1cGVyKHJ8fGUudHlwZSxvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMuZmFsc2VDYXNlPWksdGhpcy50cnVlQ2FzZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZ0aGlzLnRydWVDYXNlLmlzRXF1aXZhbGVudCh0LnRydWVDYXNlKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8bnVsbD09dD9uPT10Om4uaXNFcXVpdmFsZW50KHQpfSh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Q29uZGl0aW9uYWxFeHByKHRoaXMsZSl9fSxyeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoRF9lLGUpLHRoaXMuY29uZGl0aW9uPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgcngmJnRoaXMuY29uZGl0aW9uLmlzRXF1aXZhbGVudCh0LmNvbmRpdGlvbil9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Tm90RXhwcih0aGlzLGUpfX0sUnM9Y2xhc3N7Y29uc3RydWN0b3IodCxlPW51bGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdGhpcy5uYW1lPT09dC5uYW1lfX0sX2Y9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGksciksdGhpcy5wYXJhbXM9dCx0aGlzLnN0YXRlbWVudHM9ZSx0aGlzLm5hbWU9b31pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfZiYmbGModGhpcy5wYXJhbXMsdC5wYXJhbXMpJiZsYyh0aGlzLnN0YXRlbWVudHMsdC5zdGF0ZW1lbnRzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRGdW5jdGlvbkV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBheCh0LHRoaXMucGFyYW1zLHRoaXMuc3RhdGVtZW50cyx0aGlzLnR5cGUsZSx0aGlzLnNvdXJjZVNwYW4pfX0sb3g9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITApe3N1cGVyKGl8fGt4LHIpLHRoaXMub3BlcmF0b3I9dCx0aGlzLmV4cHI9ZSx0aGlzLnBhcmVucz1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG94JiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHRoaXMsZSl9fSxscj1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPSEwKXtzdXBlcihyfHxlLnR5cGUsbyksdGhpcy5vcGVyYXRvcj10LHRoaXMucmhzPWksdGhpcy5wYXJlbnM9cyx0aGlzLmxocz1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGxyJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5saHMuaXNFcXVpdmFsZW50KHQubGhzKSYmdGhpcy5yaHMuaXNFcXVpdmFsZW50KHQucmhzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodGhpcyxlKX19LGIwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5uYW1lPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYjAmJnRoaXMucmVjZWl2ZXIuaXNFcXVpdmFsZW50KHQucmVjZWl2ZXIpJiZ0aGlzLm5hbWU9PT10Lm5hbWV9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0UmVhZFByb3BFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgdHgodGhpcy5yZWNlaXZlcix0aGlzLm5hbWUsdCxudWxsLHRoaXMuc291cmNlU3Bhbil9fSxzeD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKGksciksdGhpcy5yZWNlaXZlcj10LHRoaXMuaW5kZXg9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBzeCYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRLZXlFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgZXgodGhpcy5yZWNlaXZlcix0aGlzLmluZGV4LHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdmY9Y2xhc3MgZXh0ZW5kcyBDcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVudHJpZXM9dH1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LmlzQ29uc3RhbnQoKSl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgdmYmJmxjKHRoaXMuZW50cmllcyx0LmVudHJpZXMpfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5RXhwcih0aGlzLGUpfX0seTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2V5PXQsdGhpcy52YWx1ZT1lLHRoaXMucXVvdGVkPWl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX19LHgwPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbnRyaWVzPXQsdGhpcy52YWx1ZVR5cGU9bnVsbCxlJiYodGhpcy52YWx1ZVR5cGU9ZS52YWx1ZVR5cGUpfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHgwJiZsYyh0aGlzLmVudHJpZXMsdC5lbnRyaWVzKX1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LnZhbHVlLmlzQ29uc3RhbnQoKSl9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwRXhwcih0aGlzLGUpfX0sS049bmV3IEZhKG51bGwsbnVsbCxudWxsKSxjMT1uZXcgRmEobnVsbCxpYSxudWxsKSxrYT0oKCk9PntyZXR1cm4obj1rYXx8KGthPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uRmluYWw9MV09IkZpbmFsIixuW24uUHJpdmF0ZT0yXT0iUHJpdmF0ZSIsbltuLkV4cG9ydGVkPTRdPSJFeHBvcnRlZCIsbltuLlN0YXRpYz04XT0iU3RhdGljIixrYTt2YXIgbn0pKCksWk49Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudGV4dD10LHRoaXMubXVsdGlsaW5lPWUsdGhpcy50cmFpbGluZ05ld2xpbmU9aX10b1N0cmluZygpe3JldHVybiB0aGlzLm11bHRpbGluZT9gICR7dGhpcy50ZXh0fSBgOnRoaXMudGV4dH19LGIxPWNsYXNzIGV4dGVuZHMgWk57Y29uc3RydWN0b3IodCl7c3VwZXIoIiIsITAsITApLHRoaXMudGFncz10fXRvU3RyaW5nKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4iIjtpZigxPT09bi5sZW5ndGgmJm5bMF0udGFnTmFtZSYmIW5bMF0udGV4dClyZXR1cm5gKiR7bzkoblswXSl9IGA7bGV0IHQ9IipcbiI7Zm9yKGxldCBlIG9mIG4pdCs9IiAqIix0Kz1vOShlKS5yZXBsYWNlKC9cbi9nLCJcbiAqICIpLHQrPSJcbiI7cmV0dXJuIHQrPSIgIix0fSh0aGlzLnRhZ3MpfX0seWY9Y2xhc3N7Y29uc3RydWN0b3IodD1rYS5Ob25lLGU9bnVsbCxpKXt0aGlzLm1vZGlmaWVycz10LHRoaXMuc291cmNlU3Bhbj1lLHRoaXMubGVhZGluZ0NvbW1lbnRzPWl9aGFzTW9kaWZpZXIodCl7cmV0dXJuIDAhPSh0aGlzLm1vZGlmaWVycyZ0KX1hZGRMZWFkaW5nQ29tbWVudCh0KXt0aGlzLmxlYWRpbmdDb21tZW50cz10aGlzLmxlYWRpbmdDb21tZW50cz8/W10sdGhpcy5sZWFkaW5nQ29tbWVudHMucHVzaCh0KX19LGF1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHIsbyxzKSx0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy50eXBlPWl8fGUmJmUudHlwZXx8bnVsbH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhdSYmdGhpcy5uYW1lPT09dC5uYW1lJiYodGhpcy52YWx1ZT8hIXQudmFsdWUmJnRoaXMudmFsdWUuaXNFcXVpdmFsZW50KHQudmFsdWUpOiF0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0RGVjbGFyZVZhclN0bXQodGhpcyxlKX19LGF4PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSl7c3VwZXIobyxzLGEpLHRoaXMubmFtZT10LHRoaXMucGFyYW1zPWUsdGhpcy5zdGF0ZW1lbnRzPWksdGhpcy50eXBlPXJ8fG51bGx9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYXgmJmxjKHRoaXMucGFyYW1zLHQucGFyYW1zKSYmbGModGhpcy5zdGF0ZW1lbnRzLHQuc3RhdGVtZW50cyl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodGhpcyxlKX19LGx1PWNsYXNzIGV4dGVuZHMgeWZ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGthLk5vbmUsZSxpKSx0aGlzLmV4cHI9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBsdSYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfXZpc2l0U3RhdGVtZW50KHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uU3RtdCh0aGlzLGUpfX0sdW89Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGU9bnVsbCxpKXtzdXBlcihrYS5Ob25lLGUsaSksdGhpcy52YWx1ZT10fWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHVvJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0UmV0dXJuU3RtdCh0aGlzLGUpfX0sbHg9Y2xhc3MgZXh0ZW5kcyB5Zntjb25zdHJ1Y3Rvcih0LGUsaT1bXSxyLG8pe3N1cGVyKGthLk5vbmUscixvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMudHJ1ZUNhc2U9ZSx0aGlzLmZhbHNlQ2FzZT1pfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGx4JiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZsYyh0aGlzLnRydWVDYXNlLHQudHJ1ZUNhc2UpJiZsYyh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdElmU3RtdCh0aGlzLGUpfX07ZnVuY3Rpb24gTWkobix0LGUpe3JldHVybiBuZXcgbWYobix0LGUpfWZ1bmN0aW9uIHhuKG4sdD1udWxsLGUpe3JldHVybiBuZXcgeTAobixudWxsLHQsZSl9ZnVuY3Rpb24gTmEobix0LGUpe3JldHVybiBuZXcgc2Mobix0LGUpfWZ1bmN0aW9uIGkzKG4pe3JldHVybiBuZXcgdjAobil9ZnVuY3Rpb24gY3Iobix0LGUpe3JldHVybiBuZXcgdmYobix0LGUpfWZ1bmN0aW9uIG1sKG4sdD1udWxsKXtyZXR1cm4gbmV3IHgwKG4ubWFwKGU9Pm5ldyB5MShlLmtleSxlLnZhbHVlLGUucXVvdGVkKSksdCxudWxsKX1mdW5jdGlvbiBPcyhuLHQsZSxpLHIpe3JldHVybiBuZXcgX2Yobix0LGUsaSxyKX1mdW5jdGlvbiByMyhuLHQsZSxpLHIpe3JldHVybiBuZXcgbHgobix0LGUsaSxyKX1mdW5jdGlvbiByOShuLHQsZSxpKXtyZXR1cm4gbmV3IG54KG4sdCxlLGkpfWZ1bmN0aW9uIG50KG4sdCxlKXtyZXR1cm4gbmV3IEZhKG4sdCxlKX1mdW5jdGlvbiB4cShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiZudWxsPT09bi52YWx1ZX1mdW5jdGlvbiBvOShuKXtsZXQgdD0iIjtpZihuLnRhZ05hbWUmJih0Kz1gIEAke24udGFnTmFtZX1gKSxuLnRleHQpe2lmKG4udGV4dC5tYXRjaCgvXC9cKnxcKlwvLykpdGhyb3cgbmV3IEVycm9yKCdKU0RvYyB0ZXh0IGNhbm5vdCBjb250YWluICIvKiIgYW5kICIqLyInKTt0Kz0iICIrbi50ZXh0LnJlcGxhY2UoL0AvZywiXFxAIil9cmV0dXJuIHR9dmFyIHM5PU1pKCI8dW5rbm93bj4iKSxDcT17fSxDMD1jbGFzcyBleHRlbmRzIENye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQudHlwZSksdGhpcy5yZXNvbHZlZD10LHRoaXMub3JpZ2luYWw9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gZT09PUNxP3RoaXMub3JpZ2luYWwudmlzaXRFeHByZXNzaW9uKHQsZSk6dGhpcy5yZXNvbHZlZC52aXNpdEV4cHJlc3Npb24odCxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDMCYmdGhpcy5yZXNvbHZlZC5pc0VxdWl2YWxlbnQodC5yZXNvbHZlZCl9aXNDb25zdGFudCgpe3JldHVybiEwfWZpeHVwKHQpe3RoaXMucmVzb2x2ZWQ9dCx0aGlzLnNoYXJlZD0hMH19LHgxPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITEpe3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkPXQsdGhpcy5zdGF0ZW1lbnRzPVtdLHRoaXMubGl0ZXJhbHM9bmV3IE1hcCx0aGlzLmxpdGVyYWxGYWN0b3JpZXM9bmV3IE1hcCx0aGlzLm5leHROYW1lSW5kZXg9MH1nZXRDb25zdExpdGVyYWwodCxlKXtpZih0IGluc3RhbmNlb2YgRmEmJiFhOSh0KXx8dCBpbnN0YW5jZW9mIEMwKXJldHVybiB0O2xldCBpPXRoaXMua2V5T2YodCkscj10aGlzLmxpdGVyYWxzLmdldChpKSxvPSExO2lmKHJ8fChyPW5ldyBDMCh0KSx0aGlzLmxpdGVyYWxzLnNldChpLHIpLG89ITApLCFvJiYhci5zaGFyZWR8fG8mJmUpe2xldCBhLGwscz10aGlzLmZyZXNoTmFtZSgpO3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkJiZhOSh0KT8oYT1NaShzKS5zZXQobmV3IF9mKFtdLFtuZXcgdW8odCldKSksbD1NaShzKS5jYWxsRm4oW10pKTooYT1NaShzKS5zZXQodCksbD1NaShzKSksdGhpcy5zdGF0ZW1lbnRzLnB1c2goYS50b0RlY2xTdG10KGlhLGthLkZpbmFsKSksci5maXh1cChsKX1yZXR1cm4gcn1nZXRMaXRlcmFsRmFjdG9yeSh0KXtpZih0IGluc3RhbmNlb2YgdmYpe2xldCBlPXQuZW50cmllcy5tYXAocj0+ci5pc0NvbnN0YW50KCk/cjpzOSksaT10aGlzLmtleU9mKGNyKGUpKTtyZXR1cm4gdGhpcy5fZ2V0TGl0ZXJhbEZhY3RvcnkoaSx0LmVudHJpZXMscj0+Y3IocikpfXtsZXQgZT1tbCh0LmVudHJpZXMubWFwKHI9Pih7a2V5OnIua2V5LHZhbHVlOnIudmFsdWUuaXNDb25zdGFudCgpP3IudmFsdWU6czkscXVvdGVkOnIucXVvdGVkfSkpKSxpPXRoaXMua2V5T2YoZSk7cmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KGksdC5lbnRyaWVzLm1hcChyPT5yLnZhbHVlKSxyPT5tbChyLm1hcCgobyxzKT0+KHtrZXk6dC5lbnRyaWVzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmVudHJpZXNbc10ucXVvdGVkfSkpKSl9fV9nZXRMaXRlcmFsRmFjdG9yeSh0LGUsaSl7bGV0IHI9dGhpcy5saXRlcmFsRmFjdG9yaWVzLmdldCh0KSxvPWUuZmlsdGVyKHM9PiFzLmlzQ29uc3RhbnQoKSk7aWYoIXIpe2xldCBzPWUubWFwKCh1LGQpPT51LmlzQ29uc3RhbnQoKT90aGlzLmdldENvbnN0TGl0ZXJhbCh1LCEwKTpNaShgYSR7ZH1gKSksbD1PcyhzLmZpbHRlcihIX2UpLm1hcCh1PT5uZXcgUnModS5uYW1lLFYwKSksW25ldyB1byhpKHMpKV0saWEpLGM9dGhpcy5mcmVzaE5hbWUoKTt0aGlzLnN0YXRlbWVudHMucHVzaChNaShjKS5zZXQobCkudG9EZWNsU3RtdChpYSxrYS5GaW5hbCkpLHI9TWkoYyksdGhpcy5saXRlcmFsRmFjdG9yaWVzLnNldCh0LHIpfXJldHVybntsaXRlcmFsRmFjdG9yeTpyLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOm99fXVuaXF1ZU5hbWUodCl7cmV0dXJuYCR7dH0ke3RoaXMubmV4dE5hbWVJbmRleCsrfWB9ZnJlc2hOYW1lKCl7cmV0dXJuIHRoaXMudW5pcXVlTmFtZSgiX2MiKX1rZXlPZih0KXtyZXR1cm4gdC52aXNpdEV4cHJlc3Npb24obmV3IEpOLENxKX19LEpOPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aXNpdFdyYXBwZWROb2RlRXhwcj1Gbyx0aGlzLnZpc2l0V3JpdGVWYXJFeHByPUZvLHRoaXMudmlzaXRXcml0ZUtleUV4cHI9Rm8sdGhpcy52aXNpdFdyaXRlUHJvcEV4cHI9Rm8sdGhpcy52aXNpdEludm9rZUZ1bmN0aW9uRXhwcj1Gbyx0aGlzLnZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByPUZvLHRoaXMudmlzaXRJbnN0YW50aWF0ZUV4cHI9Rm8sdGhpcy52aXNpdENvbmRpdGlvbmFsRXhwcj1Gbyx0aGlzLnZpc2l0Tm90RXhwcj1Gbyx0aGlzLnZpc2l0QXNzZXJ0Tm90TnVsbEV4cHI9Rm8sdGhpcy52aXNpdENhc3RFeHByPUZvLHRoaXMudmlzaXRGdW5jdGlvbkV4cHI9Rm8sdGhpcy52aXNpdFVuYXJ5T3BlcmF0b3JFeHByPUZvLHRoaXMudmlzaXRCaW5hcnlPcGVyYXRvckV4cHI9Rm8sdGhpcy52aXNpdFJlYWRQcm9wRXhwcj1Gbyx0aGlzLnZpc2l0UmVhZEtleUV4cHI9Rm8sdGhpcy52aXNpdENvbW1hRXhwcj1Gbyx0aGlzLnZpc2l0TG9jYWxpemVkU3RyaW5nPUZvfXZpc2l0TGl0ZXJhbEV4cHIodCl7cmV0dXJuYCR7InN0cmluZyI9PXR5cGVvZiB0LnZhbHVlPyciJyt0LnZhbHVlKyciJzp0LnZhbHVlfWB9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuYFske3QuZW50cmllcy5tYXAoaT0+aS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSkuam9pbigiLCIpfV1gfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm5geyR7dC5lbnRyaWVzLm1hcChvPT5gJHsobz0+e2xldCBzPW8ucXVvdGVkPyciJzoiIjtyZXR1cm5gJHtzfSR7by5rZXl9JHtzfWB9KShvKX06JHtvLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfWApLmpvaW4oIiwiKX1gfXZpc2l0RXh0ZXJuYWxFeHByKHQpe3JldHVybiB0LnZhbHVlLm1vZHVsZU5hbWU/YEVYOiR7dC52YWx1ZS5tb2R1bGVOYW1lfToke3QudmFsdWUubmFtZX1gOmBFWDoke3QudmFsdWUucnVudGltZS5uYW1lfWB9dmlzaXRSZWFkVmFyRXhwcih0KXtyZXR1cm5gVkFSOiR7dC5uYW1lfWB9dmlzaXRUeXBlb2ZFeHByKHQsZSl7cmV0dXJuYFRZUEVPRjoke3QuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX1gfX07ZnVuY3Rpb24gRm8obil7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBWaXNpdG9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2Vzbid0IGhhbmRsZSAke24uY29uc3RydWN0b3IubmFtZX1gKX1mdW5jdGlvbiBIX2Uobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBtZn1mdW5jdGlvbiBhOShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZhJiYic3RyaW5nIj09dHlwZW9mIG4udmFsdWUmJm4udmFsdWUubGVuZ3RoPj01MH12YXIgcGU9IkBhbmd1bGFyL2NvcmUiLEs9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uTkVXX01FVEhPRD0iZmFjdG9yeSIsbi5UUkFOU0ZPUk1fTUVUSE9EPSJ0cmFuc2Zvcm0iLG4uUEFUQ0hfREVQUz0icGF0Y2hlZERlcHMiLG4uY29yZT17bmFtZTpudWxsLG1vZHVsZU5hbWU6cGV9LG4ubmFtZXNwYWNlSFRNTD17bmFtZToiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VNYXRoTUw9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCIsbW9kdWxlTmFtZTpwZX0sbi5uYW1lc3BhY2VTVkc9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZVNWRyIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRTdGFydD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRFbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRFbmQiLG1vZHVsZU5hbWU6cGV9LG4uYWR2YW5jZT17bmFtZToiXHUwMjc1XHUwMjc1YWR2YW5jZSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5zeW50aGV0aWNIb3N0TGlzdGVuZXI9e25hbWU6Ilx1MDI3NVx1MDI3NXN5bnRoZXRpY0hvc3RMaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc1Byb3A9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyU3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXJTdGFydCIsbW9kdWxlTmFtZTpwZX0sbi5lbGVtZW50Q29udGFpbmVyRW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIixtb2R1bGVOYW1lOnBlfSxuLmVsZW1lbnRDb250YWluZXI9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRDb250YWluZXIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXA9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlMj17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUzIixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlNT17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU2Iixtb2R1bGVOYW1lOnBlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZU1hcEludGVycG9sYXRlOD17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGVWIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcCIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5jbGFzc01hcEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3A9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNSIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlOCIsbW9kdWxlTmFtZTpwZX0sbi5zdHlsZVByb3BJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5uZXh0Q29udGV4dD17bmFtZToiXHUwMjc1XHUwMjc1bmV4dENvbnRleHQiLG1vZHVsZU5hbWU6cGV9LG4ucmVzZXRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNldFZpZXciLG1vZHVsZU5hbWU6cGV9LG4udGVtcGxhdGVDcmVhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRlbXBsYXRlIixtb2R1bGVOYW1lOnBlfSxuLnRleHQ9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHQiLG1vZHVsZU5hbWU6cGV9LG4uZW5hYmxlQmluZGluZ3M9e25hbWU6Ilx1MDI3NVx1MDI3NWVuYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmRpc2FibGVCaW5kaW5ncz17bmFtZToiXHUwMjc1XHUwMjc1ZGlzYWJsZUJpbmRpbmdzIixtb2R1bGVOYW1lOnBlfSxuLmdldEN1cnJlbnRWaWV3PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi50ZXh0SW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnBlfSxuLnRleHRJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6cGV9LG4udGV4dEludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5yZXN0b3JlVmlldz17bmFtZToiXHUwMjc1XHUwMjc1cmVzdG9yZVZpZXciLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMD17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMCIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb24xPXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjI9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjIiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uMz17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMyIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb240PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjU9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjUiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uNj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNiIsbW9kdWxlTmFtZTpwZX0sbi5wdXJlRnVuY3Rpb243PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243Iixtb2R1bGVOYW1lOnBlfSxuLnB1cmVGdW5jdGlvbjg9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjgiLG1vZHVsZU5hbWU6cGV9LG4ucHVyZUZ1bmN0aW9uVj17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uViIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDE9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMSIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDI9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMiIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDM9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kMyIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZDQ9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kNCIsbW9kdWxlTmFtZTpwZX0sbi5waXBlQmluZFY9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGVCaW5kViIsbW9kdWxlTmFtZTpwZX0sbi5ob3N0UHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NWhvc3RQcm9wZXJ0eSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHkiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiIsbW9kdWxlTmFtZTpwZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6cGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnBlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViIsbW9kdWxlTmFtZTpwZX0sbi5pMThuPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5BdHRyaWJ1dGVzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXR0cmlidXRlcyIsbW9kdWxlTmFtZTpwZX0sbi5pMThuRXhwPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuRXhwIixtb2R1bGVOYW1lOnBlfSxuLmkxOG5TdGFydD17bmFtZToiXHUwMjc1XHUwMjc1aTE4blN0YXJ0Iixtb2R1bGVOYW1lOnBlfSxuLmkxOG5FbmQ9e25hbWU6Ilx1MDI3NVx1MDI3NWkxOG5FbmQiLG1vZHVsZU5hbWU6cGV9LG4uaTE4bkFwcGx5PXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuQXBwbHkiLG1vZHVsZU5hbWU6cGV9LG4uaTE4blBvc3Rwcm9jZXNzPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiLG1vZHVsZU5hbWU6cGV9LG4ucGlwZT17bmFtZToiXHUwMjc1XHUwMjc1cGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5wcm9qZWN0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uIixtb2R1bGVOYW1lOnBlfSxuLnByb2plY3Rpb25EZWY9e25hbWU6Ilx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiLG1vZHVsZU5hbWU6cGV9LG4ucmVmZXJlbmNlPXtuYW1lOiJcdTAyNzVcdTAyNzVyZWZlcmVuY2UiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW5qZWN0QXR0cmlidXRlPXtuYW1lOiJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiLG1vZHVsZU5hbWU6cGV9LG4uZGlyZWN0aXZlSW5qZWN0PXtuYW1lOiJcdTAyNzVcdTAyNzVkaXJlY3RpdmVJbmplY3QiLG1vZHVsZU5hbWU6cGV9LG4uaW52YWxpZEZhY3Rvcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLmludmFsaWRGYWN0b3J5RGVwPXtuYW1lOiJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeURlcCIsbW9kdWxlTmFtZTpwZX0sbi50ZW1wbGF0ZVJlZkV4dHJhY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZm9yd2FyZFJlZj17bmFtZToiZm9yd2FyZFJlZiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlRm9yd2FyZFJlZj17bmFtZToicmVzb2x2ZUZvcndhcmRSZWYiLG1vZHVsZU5hbWU6cGV9LG4uXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlSW5qZWN0YWJsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlSW5qZWN0YWJsZSIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RhYmxlRGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdGFibGVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5yZXNvbHZlV2luZG93PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVEb2N1bWVudD17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50Iixtb2R1bGVOYW1lOnBlfSxuLnJlc29sdmVCb2R5PXtuYW1lOiJcdTAyNzVcdTAyNzVyZXNvbHZlQm9keSIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVDb21wb25lbnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUNvbXBvbmVudCIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ29tcG9uZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVDb21wb25lbnQiLG1vZHVsZU5hbWU6cGV9LG4uc2V0Q29tcG9uZW50U2NvcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIixtb2R1bGVOYW1lOnBlfSxuLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5PXtuYW1lOiJDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSIsbW9kdWxlTmFtZTpwZX0sbi5WaWV3RW5jYXBzdWxhdGlvbj17bmFtZToiVmlld0VuY2Fwc3VsYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uQ29tcG9uZW50RGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUNvbXBvbmVudERlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1RmFjdG9yeURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLkZhY3RvcnlUYXJnZXQ9e25hbWU6Ilx1MDI3NVx1MDI3NUZhY3RvcnlUYXJnZXQiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lRGlyZWN0aXZlPXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZURpcmVjdGl2ZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlRGlyZWN0aXZlIixtb2R1bGVOYW1lOnBlfSxuLkRpcmVjdGl2ZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVEaXJlY3RpdmVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5JbmplY3RvckRlZj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWYiLG1vZHVsZU5hbWU6cGV9LG4uSW5qZWN0b3JEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1SW5qZWN0b3JEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTpwZX0sbi5kZWZpbmVJbmplY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiLG1vZHVsZU5hbWU6cGV9LG4uZGVjbGFyZUluamVjdG9yPXtuYW1lOiJcdTAyNzVcdTAyNzVuZ0RlY2xhcmVJbmplY3RvciIsbW9kdWxlTmFtZTpwZX0sbi5OZ01vZHVsZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVOZ01vZHVsZURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnBlfSxuLk1vZHVsZVdpdGhQcm92aWRlcnM9e25hbWU6Ik1vZHVsZVdpdGhQcm92aWRlcnMiLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lTmdNb2R1bGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIixtb2R1bGVOYW1lOnBlfSxuLmRlY2xhcmVOZ01vZHVsZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlTmdNb2R1bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2V0TmdNb2R1bGVTY29wZT17bmFtZToiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSIsbW9kdWxlTmFtZTpwZX0sbi5yZWdpc3Rlck5nTW9kdWxlVHlwZT17bmFtZToiXHUwMjc1XHUwMjc1cmVnaXN0ZXJOZ01vZHVsZVR5cGUiLG1vZHVsZU5hbWU6cGV9LG4uUGlwZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVQaXBlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6cGV9LG4uZGVmaW5lUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlUGlwZT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlUGlwZSIsbW9kdWxlTmFtZTpwZX0sbi5kZWNsYXJlQ2xhc3NNZXRhZGF0YT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSIsbW9kdWxlTmFtZTpwZX0sbi5zZXRDbGFzc01ldGFkYXRhPXtuYW1lOiJcdTAyNzVzZXRDbGFzc01ldGFkYXRhIixtb2R1bGVOYW1lOnBlfSxuLnF1ZXJ5UmVmcmVzaD17bmFtZToiXHUwMjc1XHUwMjc1cXVlcnlSZWZyZXNoIixtb2R1bGVOYW1lOnBlfSxuLnZpZXdRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1dmlld1F1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmxvYWRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1bG9hZFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLmNvbnRlbnRRdWVyeT17bmFtZToiXHUwMjc1XHUwMjc1Y29udGVudFF1ZXJ5Iixtb2R1bGVOYW1lOnBlfSxuLk5nT25DaGFuZ2VzRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1TmdPbkNoYW5nZXNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkluaGVyaXREZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLkNvcHlEZWZpbml0aW9uRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLlN0YW5kYWxvbmVGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVTdGFuZGFsb25lRmVhdHVyZSIsbW9kdWxlTmFtZTpwZX0sbi5Qcm92aWRlcnNGZWF0dXJlPXtuYW1lOiJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIixtb2R1bGVOYW1lOnBlfSxuLmxpc3RlbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVsaXN0ZW5lciIsbW9kdWxlTmFtZTpwZX0sbi5nZXRJbmhlcml0ZWRGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5Iixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplSHRtbD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplU3R5bGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplU3R5bGUiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbi5zYW5pdGl6ZVNjcmlwdD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVTY3JpcHQiLG1vZHVsZU5hbWU6cGV9LG4uc2FuaXRpemVVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplVXJsIixtb2R1bGVOYW1lOnBlfSxuLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybD17bmFtZToiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIixtb2R1bGVOYW1lOnBlfSxuLnRydXN0Q29uc3RhbnRIdG1sPXtuYW1lOiJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCIsbW9kdWxlTmFtZTpwZX0sbi50cnVzdENvbnN0YW50UmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTpwZX0sbn0pKCk7ZnVuY3Rpb24gbjEobil7bj1uPDA/MSsoLW48PDEpOm48PDE7bGV0IHQ9IiI7ZG97bGV0IGU9MzEmbjsobj4+PTUpPjAmJihlfD0zMiksdCs9amIoZSl9d2hpbGUobj4wKTtyZXR1cm4gdH1mdW5jdGlvbiBqYihuKXtpZihuPDB8fG4+PTY0KXRocm93IG5ldyBFcnJvcigiQ2FuIG9ubHkgZW5jb2RlIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgNjNdIik7cmV0dXJuIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iW25dfXZhciBXX2U9Lyd8XFx8XG58XHJ8XCQvZyxxX2U9L15bJEEtWl9dWzAtOUEtWl8kXSokL2ksQzE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbmRlbnQ9dCx0aGlzLnBhcnRzTGVuZ3RoPTAsdGhpcy5wYXJ0cz1bXSx0aGlzLnNyY1NwYW5zPVtdfX0sY3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5faW5kZW50PXQsdGhpcy5fbGluZXM9W25ldyBDMSh0KV19c3RhdGljIGNyZWF0ZVJvb3QoKXtyZXR1cm4gbmV3IGN4KDApfWdldCBfY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5fbGluZXNbdGhpcy5fbGluZXMubGVuZ3RoLTFdfXByaW50bG4odCxlPSIiKXt0aGlzLnByaW50KHR8fG51bGwsZSwhMCl9bGluZUlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLmxlbmd0aH1saW5lTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudCoiICAiLmxlbmd0aCt0aGlzLl9jdXJyZW50TGluZS5wYXJ0c0xlbmd0aH1wcmludCh0LGUsaT0hMSl7ZS5sZW5ndGg+MCYmKHRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzLnB1c2goZSksdGhpcy5fY3VycmVudExpbmUucGFydHNMZW5ndGgrPWUubGVuZ3RoLHRoaXMuX2N1cnJlbnRMaW5lLnNyY1NwYW5zLnB1c2godCYmdC5zb3VyY2VTcGFufHxudWxsKSksaSYmdGhpcy5fbGluZXMucHVzaChuZXcgQzEodGhpcy5faW5kZW50KSl9cmVtb3ZlRW1wdHlMYXN0TGluZSgpe3RoaXMubGluZUlzRW1wdHkoKSYmdGhpcy5fbGluZXMucG9wKCl9aW5jSW5kZW50KCl7dGhpcy5faW5kZW50KyssdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9ZGVjSW5kZW50KCl7dGhpcy5faW5kZW50LS0sdGhpcy5saW5lSXNFbXB0eSgpJiYodGhpcy5fY3VycmVudExpbmUuaW5kZW50PXRoaXMuX2luZGVudCl9dG9Tb3VyY2UoKXtyZXR1cm4gdGhpcy5zb3VyY2VMaW5lcy5tYXAodD0+dC5wYXJ0cy5sZW5ndGg+MD9sOSh0LmluZGVudCkrdC5wYXJ0cy5qb2luKCIiKToiIikuam9pbigiXG4iKX10b1NvdXJjZU1hcEdlbmVyYXRvcih0LGU9MCl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQ9bnVsbCl7dGhpcy5maWxlPXQsdGhpcy5zb3VyY2VzQ29udGVudD1uZXcgTWFwLHRoaXMubGluZXM9W10sdGhpcy5sYXN0Q29sMD0wLHRoaXMuaGFzTWFwcGluZ3M9ITF9YWRkU291cmNlKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5oYXModCl8fHRoaXMuc291cmNlc0NvbnRlbnQuc2V0KHQsZSksdGhpc31hZGRMaW5lKCl7cmV0dXJuIHRoaXMubGluZXMucHVzaChbXSksdGhpcy5sYXN0Q29sMD0wLHRoaXN9YWRkTWFwcGluZyh0LGUsaSxyKXtpZighdGhpcy5jdXJyZW50TGluZSl0aHJvdyBuZXcgRXJyb3IoIkEgbGluZSBtdXN0IGJlIGFkZGVkIGJlZm9yZSBtYXBwaW5ncyBjYW4gYmUgYWRkZWQiKTtpZihudWxsIT1lJiYhdGhpcy5zb3VyY2VzQ29udGVudC5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHNvdXJjZSBmaWxlICIke2V9ImApO2lmKG51bGw9PXQpdGhyb3cgbmV3IEVycm9yKCJUaGUgY29sdW1uIGluIHRoZSBnZW5lcmF0ZWQgY29kZSBtdXN0IGJlIHByb3ZpZGVkIik7aWYodDx0aGlzLmxhc3RDb2wwKXRocm93IG5ldyBFcnJvcigiTWFwcGluZyBzaG91bGQgYmUgYWRkZWQgaW4gb3V0cHV0IG9yZGVyIik7aWYoZSYmKG51bGw9PWl8fG51bGw9PXIpKXRocm93IG5ldyBFcnJvcigiVGhlIHNvdXJjZSBsb2NhdGlvbiBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gYSBzb3VyY2UgdXJsIGlzIHByb3ZpZGVkIik7cmV0dXJuIHRoaXMuaGFzTWFwcGluZ3M9ITAsdGhpcy5sYXN0Q29sMD10LHRoaXMuY3VycmVudExpbmUucHVzaCh7Y29sMDp0LHNvdXJjZVVybDplLHNvdXJjZUxpbmUwOmksc291cmNlQ29sMDpyfSksdGhpc31nZXQgY3VycmVudExpbmUoKXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSgtMSlbMF19dG9KU09OKCl7aWYoIXRoaXMuaGFzTWFwcGluZ3MpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IE1hcCxlPVtdLGk9W107QXJyYXkuZnJvbSh0aGlzLnNvdXJjZXNDb250ZW50LmtleXMoKSkuZm9yRWFjaCgoYyx1KT0+e3Quc2V0KGMsdSksZS5wdXNoKGMpLGkucHVzaCh0aGlzLnNvdXJjZXNDb250ZW50LmdldChjKXx8bnVsbCl9KTtsZXQgcj0iIixvPTAscz0wLGE9MCxsPTA7cmV0dXJuIHRoaXMubGluZXMuZm9yRWFjaChjPT57bz0wLHIrPWMubWFwKHU9PntsZXQgZD1uMSh1LmNvbDAtbyk7cmV0dXJuIG89dS5jb2wwLG51bGwhPXUuc291cmNlVXJsJiYoZCs9bjEodC5nZXQodS5zb3VyY2VVcmwpLXMpLHM9dC5nZXQodS5zb3VyY2VVcmwpLGQrPW4xKHUuc291cmNlTGluZTAtYSksYT11LnNvdXJjZUxpbmUwLGQrPW4xKHUuc291cmNlQ29sMC1sKSxsPXUuc291cmNlQ29sMCksZH0pLmpvaW4oIiwiKSxyKz0iOyJ9KSxyPXIuc2xpY2UoMCwtMSkse2ZpbGU6dGhpcy5maWxlfHwiIix2ZXJzaW9uOjMsc291cmNlUm9vdDoiIixzb3VyY2VzOmUsc291cmNlc0NvbnRlbnQ6aSxtYXBwaW5nczpyfX10b0pzQ29tbWVudCgpe3JldHVybiB0aGlzLmhhc01hcHBpbmdzPyIvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LCIrZnVuY3Rpb24obil7bGV0IHQ9IiIsZT1uMyhuKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoOyl7bGV0IHI9ZVtpKytdLG89aTxlLmxlbmd0aD9lW2krK106bnVsbCxzPWk8ZS5sZW5ndGg/ZVtpKytdOm51bGw7dCs9amIocj4+MiksdCs9amIoKDMmcik8PDR8KG51bGw9PT1vPzA6bz4+NCkpLHQrPW51bGw9PT1vPyI9IjpqYigoMTUmbyk8PDJ8KG51bGw9PT1zPzA6cz4+NikpLHQrPW51bGw9PT1vfHxudWxsPT09cz8iPSI6amIoNjMmcyl9cmV0dXJuIHR9KEpTT04uc3RyaW5naWZ5KHRoaXMsbnVsbCwwKSk6IiJ9fSh0KSxyPSExLG89KCk9PntyfHwoaS5hZGRTb3VyY2UodCwiICIpLmFkZE1hcHBpbmcoMCx0LDAsMCkscj0hMCl9O2ZvcihsZXQgcz0wO3M8ZTtzKyspaS5hZGRMaW5lKCksbygpO3JldHVybiB0aGlzLnNvdXJjZUxpbmVzLmZvckVhY2goKHMsYSk9PntpLmFkZExpbmUoKTtsZXQgbD1zLnNyY1NwYW5zLGM9cy5wYXJ0cyx1PXMuaW5kZW50KiIgICIubGVuZ3RoLGQ9MDtmb3IoO2Q8bC5sZW5ndGgmJiFsW2RdOyl1Kz1jW2RdLmxlbmd0aCxkKys7Zm9yKGQ8bC5sZW5ndGgmJjA9PT1hJiYwPT09dT9yPSEwOm8oKTtkPGwubGVuZ3RoOyl7bGV0IHA9bFtkXSxoPXAuc3RhcnQuZmlsZSxmPXAuc3RhcnQubGluZSxtPXAuc3RhcnQuY29sO2ZvcihpLmFkZFNvdXJjZShoLnVybCxoLmNvbnRlbnQpLmFkZE1hcHBpbmcodSxoLnVybCxmLG0pLHUrPWNbZF0ubGVuZ3RoLGQrKztkPGwubGVuZ3RoJiYocD09PWxbZF18fCFsW2RdKTspdSs9Y1tkXS5sZW5ndGgsZCsrfX0pLGl9c3Bhbk9mKHQsZSl7bGV0IGk9dGhpcy5fbGluZXNbdF07aWYoaSl7bGV0IHI9ZS1sOShpLmluZGVudCkubGVuZ3RoO2ZvcihsZXQgbz0wO288aS5wYXJ0cy5sZW5ndGg7bysrKXtsZXQgcz1pLnBhcnRzW29dO2lmKHMubGVuZ3RoPnIpcmV0dXJuIGkuc3JjU3BhbnNbb107ci09cy5sZW5ndGh9fXJldHVybiBudWxsfWdldCBzb3VyY2VMaW5lcygpe3JldHVybiB0aGlzLl9saW5lcy5sZW5ndGgmJjA9PT10aGlzLl9saW5lc1t0aGlzLl9saW5lcy5sZW5ndGgtMV0ucGFydHMubGVuZ3RoP3RoaXMuX2xpbmVzLnNsaWNlKDAsLTEpOnRoaXMuX2xpbmVzfX0sdEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZXNjYXBlRG9sbGFySW5TdHJpbmdzPXR9cHJpbnRMZWFkaW5nQ29tbWVudHModCxlKXtpZih2b2lkIDAhPT10LmxlYWRpbmdDb21tZW50cylmb3IobGV0IGkgb2YgdC5sZWFkaW5nQ29tbWVudHMpaSBpbnN0YW5jZW9mIGIxP2UucHJpbnQodCxgLyoke2kudG9TdHJpbmcoKX0qL2AsaS50cmFpbGluZ05ld2xpbmUpOmkubXVsdGlsaW5lP2UucHJpbnQodCxgLyogJHtpLnRleHR9ICovYCxpLnRyYWlsaW5nTmV3bGluZSk6aS50ZXh0LnNwbGl0KCJcbiIpLmZvckVhY2gocj0+e2UucHJpbnRsbih0LGAvLyAke3J9YCl9KX12aXNpdEV4cHJlc3Npb25TdG10KHQsZSl7cmV0dXJuIHRoaXMucHJpbnRMZWFkaW5nQ29tbWVudHModCxlKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0UmV0dXJuU3RtdCh0LGUpe3JldHVybiB0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJyZXR1cm4gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50bG4odCwiOyIpLG51bGx9dmlzaXRJZlN0bXQodCxlKXt0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksZS5wcmludCh0LCJpZiAoIiksdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIpIHsiKTtsZXQgaT1udWxsIT10LmZhbHNlQ2FzZSYmdC5mYWxzZUNhc2UubGVuZ3RoPjA7cmV0dXJuIHQudHJ1ZUNhc2UubGVuZ3RoPD0xJiYhaT8oZS5wcmludCh0LCIgIiksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLnJlbW92ZUVtcHR5TGFzdExpbmUoKSxlLnByaW50KHQsIiAiKSk6KGUucHJpbnRsbigpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC50cnVlQ2FzZSxlKSxlLmRlY0luZGVudCgpLGkmJihlLnByaW50bG4odCwifSBlbHNlIHsiKSxlLmluY0luZGVudCgpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQuZmFsc2VDYXNlLGUpLGUuZGVjSW5kZW50KCkpKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRXcml0ZVZhckV4cHIodCxlKXtsZXQgaT1lLmxpbmVJc0VtcHR5KCk7cmV0dXJuIGl8fGUucHJpbnQodCwiKCIpLGUucHJpbnQodCxgJHt0Lm5hbWV9ID0gYCksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVLZXlFeHByKHQsZSl7bGV0IGk9ZS5saW5lSXNFbXB0eSgpO3JldHVybiBpfHxlLnByaW50KHQsIigiKSx0LnJlY2VpdmVyLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiWyIpLHQuaW5kZXgudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJdID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0V3JpdGVQcm9wRXhwcih0LGUpe2xldCBpPWUubGluZUlzRW1wdHkoKTtyZXR1cm4gaXx8ZS5wcmludCh0LCIoIiksdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsYC4ke3QubmFtZX0gPSBgKSx0LnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGl8fGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodCxlKXtyZXR1cm4gdC5mbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5hcmdzLGUsIiwiKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7dC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJgIit0LnRlbXBsYXRlLmVsZW1lbnRzWzBdLnJhd1RleHQpO2ZvcihsZXQgaT0xO2k8dC50ZW1wbGF0ZS5lbGVtZW50cy5sZW5ndGg7aSsrKWUucHJpbnQodCwiJHsiKSx0LnRlbXBsYXRlLmV4cHJlc3Npb25zW2ktMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnRlbXBsYXRlLmVsZW1lbnRzW2ldLnJhd1RleHR9YCk7cmV0dXJuIGUucHJpbnQodCwiYCIpLG51bGx9dmlzaXRXcmFwcGVkTm9kZUV4cHIodCxlKXt0aHJvdyBuZXcgRXJyb3IoIkFic3RyYWN0IGVtaXR0ZXIgY2Fubm90IHZpc2l0IFdyYXBwZWROb2RlRXhwci4iKX12aXNpdFR5cGVvZkV4cHIodCxlKXtlLnByaW50KHQsInR5cGVvZiAiKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9dmlzaXRSZWFkVmFyRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0SW5zdGFudGlhdGVFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwibmV3ICIpLHQuY2xhc3NFeHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiKCIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmFyZ3MsZSwiLCIpLGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRMaXRlcmFsRXhwcih0LGUpe2xldCBpPXQudmFsdWU7cmV0dXJuIGUucHJpbnQodCwic3RyaW5nIj09dHlwZW9mIGk/Y2YoaSx0aGlzLl9lc2NhcGVEb2xsYXJJblN0cmluZ3MpOmAke2l9YCksbnVsbH12aXNpdExvY2FsaXplZFN0cmluZyh0LGUpe2xldCBpPXQuc2VyaWFsaXplSTE4bkhlYWQoKTtlLnByaW50KHQsIiRsb2NhbGl6ZSBgIitpLnJhdyk7Zm9yKGxldCByPTE7cjx0Lm1lc3NhZ2VQYXJ0cy5sZW5ndGg7cisrKWUucHJpbnQodCwiJHsiKSx0LmV4cHJlc3Npb25zW3ItMV0udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGB9JHt0LnNlcmlhbGl6ZUkxOG5UZW1wbGF0ZVBhcnQocikucmF3fWApO3JldHVybiBlLnByaW50KHQsImAiKSxudWxsfXZpc2l0Q29uZGl0aW9uYWxFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiKCIpLHQuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiPyAiKSx0LnRydWVDYXNlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiOiAiKSx0LmZhbHNlQ2FzZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0Tm90RXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIiEiKSx0LmNvbmRpdGlvbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxudWxsfXZpc2l0VW5hcnlPcGVyYXRvckV4cHIodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRvcil7Y2FzZSBwZi5QbHVzOmk9IisiO2JyZWFrO2Nhc2UgcGYuTWludXM6aT0iLSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiB0LnBhcmVucyYmZS5wcmludCh0LCIoIiksZS5wcmludCh0LGkpLHQuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSx0LnBhcmVucyYmZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEJpbmFyeU9wZXJhdG9yRXhwcih0LGUpe2xldCBpO3N3aXRjaCh0Lm9wZXJhdG9yKXtjYXNlIGhuLkVxdWFsczppPSI9PSI7YnJlYWs7Y2FzZSBobi5JZGVudGljYWw6aT0iPT09IjticmVhaztjYXNlIGhuLk5vdEVxdWFsczppPSIhPSI7YnJlYWs7Y2FzZSBobi5Ob3RJZGVudGljYWw6aT0iIT09IjticmVhaztjYXNlIGhuLkFuZDppPSImJiI7YnJlYWs7Y2FzZSBobi5CaXR3aXNlQW5kOmk9IiYiO2JyZWFrO2Nhc2UgaG4uT3I6aT0ifHwiO2JyZWFrO2Nhc2UgaG4uUGx1czppPSIrIjticmVhaztjYXNlIGhuLk1pbnVzOmk9Ii0iO2JyZWFrO2Nhc2UgaG4uRGl2aWRlOmk9Ii8iO2JyZWFrO2Nhc2UgaG4uTXVsdGlwbHk6aT0iKiI7YnJlYWs7Y2FzZSBobi5Nb2R1bG86aT0iJSI7YnJlYWs7Y2FzZSBobi5Mb3dlcjppPSI8IjticmVhaztjYXNlIGhuLkxvd2VyRXF1YWxzOmk9Ijw9IjticmVhaztjYXNlIGhuLkJpZ2dlcjppPSI+IjticmVhaztjYXNlIGhuLkJpZ2dlckVxdWFsczppPSI+PSI7YnJlYWs7Y2FzZSBobi5OdWxsaXNoQ29hbGVzY2U6aT0iPz8iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdC5wYXJlbnMmJmUucHJpbnQodCwiKCIpLHQubGhzLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgICR7aX0gYCksdC5yaHMudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksdC5wYXJlbnMmJmUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRSZWFkUHJvcEV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIi4iKSxlLnByaW50KHQsdC5uYW1lKSxudWxsfXZpc2l0UmVhZEtleUV4cHIodCxlKXtyZXR1cm4gdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIlsiKSx0LmluZGV4LnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCwiWyIpLHRoaXMudmlzaXRBbGxFeHByZXNzaW9ucyh0LmVudHJpZXMsZSwiLCIpLGUucHJpbnQodCwiXSIpLG51bGx9dmlzaXRMaXRlcmFsTWFwRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsInsiKSx0aGlzLnZpc2l0QWxsT2JqZWN0cyhpPT57ZS5wcmludCh0LGAke2NmKGkua2V5LHRoaXMuX2VzY2FwZURvbGxhckluU3RyaW5ncyxpLnF1b3RlZCl9OmApLGkudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9LHQuZW50cmllcyxlLCIsIiksZS5wcmludCh0LCJ9IiksbnVsbH12aXNpdENvbW1hRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5wYXJ0cyxlLCIsIiksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEFsbEV4cHJlc3Npb25zKHQsZSxpKXt0aGlzLnZpc2l0QWxsT2JqZWN0cyhyPT5yLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLHQsZSxpKX12aXNpdEFsbE9iamVjdHModCxlLGkscil7bGV0IG89ITE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspcz4wJiYoaS5saW5lTGVuZ3RoKCk+ODA/KGkucHJpbnQobnVsbCxyLCEwKSxvfHwoaS5pbmNJbmRlbnQoKSxpLmluY0luZGVudCgpLG89ITApKTppLnByaW50KG51bGwsciwhMSkpLHQoZVtzXSk7byYmKGkuZGVjSW5kZW50KCksaS5kZWNJbmRlbnQoKSl9dmlzaXRBbGxTdGF0ZW1lbnRzKHQsZSl7dC5mb3JFYWNoKGk9PmkudmlzaXRTdGF0ZW1lbnQodGhpcyxlKSl9fTtmdW5jdGlvbiBjZihuLHQsZT0hMCl7aWYobnVsbD09bilyZXR1cm4gbnVsbDtsZXQgaT1uLnJlcGxhY2UoV19lLCguLi5vKT0+IiQiPT1vWzBdP3Q/IlxcJCI6IiQiOiJcbiI9PW9bMF0/IlxcbiI6IlxyIj09b1swXT8iXFxyIjpgXFwke29bMF19YCk7cmV0dXJuIGV8fCFxX2UudGVzdChpKT9gJyR7aX0nYDppfWZ1bmN0aW9uIGw5KG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bjtlKyspdCs9IiAgIjtyZXR1cm4gdH1mdW5jdGlvbiBYMShuLHQpe2lmKDA9PT10KXJldHVybiBOYShuKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHQ7aSsrKWUucHVzaChWMCk7cmV0dXJuIE5hKG4sdm9pZCAwLGUpfWZ1bmN0aW9uIE1xKG4pe3JldHVybmBAJHtufWB9ZnVuY3Rpb24gWF9lKG4sdCl7bGV0IGU9Y2YodCwhMSwhMSk7cmV0dXJuIGUhPT10P2Ake259WyR7ZX1dYDpgJHtufS4ke3R9YH1mdW5jdGlvbiBTcShuLHQpe3JldHVybmBhbmltYXRpb25fJHtufV8ke3R9YH1mdW5jdGlvbiBhcyhuKXtsZXQgdD1uZXcgRG4obik7cmV0dXJue3ZhbHVlOnQsdHlwZTp0fX1mdW5jdGlvbiB1ZihuLHQpe2xldCBlPWNyKG4ubWFwKGk9PmkudmFsdWUpKTtyZXR1cm4gdD9PcyhbXSxbbmV3IHVvKGUpXSk6ZX1mdW5jdGlvbiBvMyhuLHQpe3JldHVybntleHByZXNzaW9uOm4sZm9yd2FyZFJlZjp0fX12YXIgZjA9KCgpPT57cmV0dXJuKG49ZjB8fChmMD17fSkpW24uQ2xhc3M9MF09IkNsYXNzIixuW24uRnVuY3Rpb249MV09IkZ1bmN0aW9uIixmMDt2YXIgbn0pKCksaWM9KCgpPT57cmV0dXJuKG49aWN8fChpYz17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5Db21wb25lbnQ9MV09IkNvbXBvbmVudCIsbltuLkluamVjdGFibGU9Ml09IkluamVjdGFibGUiLG5bbi5QaXBlPTNdPSJQaXBlIixuW24uTmdNb2R1bGU9NF09Ik5nTW9kdWxlIixpYzt2YXIgbn0pKCk7ZnVuY3Rpb24gYWYobil7bGV0IHQ9TWkoInQiKSxlPW51bGwsaT11OShuKT90Om5ldyBscihobi5Pcix0LG4uaW50ZXJuYWxUeXBlKSxyPW51bGw7bnVsbCE9PW4uZGVwcz8iaW52YWxpZCIhPT1uLmRlcHMmJihyPW5ldyBnZihpLGM5KG4uZGVwcyxuLnRhcmdldCkpKTooZT1NaShgXHUwMjc1JHtuLm5hbWV9X0Jhc2VGYWN0b3J5YCkscj1lLmNhbGxGbihbaV0pKTtsZXQgbz1bXSxzPW51bGw7ZnVuY3Rpb24gYShjKXtsZXQgdT1NaSgiciIpO28ucHVzaCh1LnNldChLTikudG9EZWNsU3RtdCgpKTtsZXQgZD1udWxsIT09cj91LnNldChyKS50b1N0bXQoKTp4bihLLmludmFsaWRGYWN0b3J5KS5jYWxsRm4oW10pLnRvU3RtdCgpO3JldHVybiBvLnB1c2gocjModCxbZF0sW3Uuc2V0KGMpLnRvU3RtdCgpXSkpLHV9aWYodTkobikpe2xldCBjPWM5KG4uZGVsZWdhdGVEZXBzLG4udGFyZ2V0KTtzPWEobmV3KG4uZGVsZWdhdGVUeXBlPT09ZjAuQ2xhc3M/Z2Y6dnApKG4uZGVsZWdhdGUsYykpfWVsc2Ugcz1mdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5leHByZXNzaW9ufShuKT9hKG4uZXhwcmVzc2lvbik6cjtpZihudWxsPT09cylvLnB1c2goeG4oSy5pbnZhbGlkRmFjdG9yeSkuY2FsbEZuKFtdKS50b1N0bXQoKSk7ZWxzZSBpZihudWxsIT09ZSl7bGV0IGM9eG4oSy5nZXRJbmhlcml0ZWRGYWN0b3J5KS5jYWxsRm4oW24uaW50ZXJuYWxUeXBlXSksdT1uZXcgbHIoaG4uT3IsZSxlLnNldChjKSk7by5wdXNoKG5ldyB1byh1LmNhbGxGbihbaV0pKSl9ZWxzZSBvLnB1c2gobmV3IHVvKHMpKTtsZXQgbD1PcyhbbmV3IFJzKCJ0IixWMCldLG8saWEsdm9pZCAwLGAke24ubmFtZX1fRmFjdG9yeWApO3JldHVybiBudWxsIT09ZSYmKGw9T3MoW10sW25ldyBhdShlLm5hbWUpLG5ldyB1byhsKV0pLmNhbGxGbihbXSx2b2lkIDAsITApKSx7ZXhwcmVzc2lvbjpsLHN0YXRlbWVudHM6W10sdHlwZTokX2Uobil9fWZ1bmN0aW9uICRfZShuKXtsZXQgdD1udWxsIT09bi5kZXBzJiYiaW52YWxpZCIhPT1uLmRlcHM/ZnVuY3Rpb24obil7bGV0IHQ9ITEsZT1uLm1hcChpPT57bGV0IHI9ZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIG51bGwhPT1uLmF0dHJpYnV0ZU5hbWVUeXBlJiZ0LnB1c2goe2tleToiYXR0cmlidXRlIix2YWx1ZTpuLmF0dHJpYnV0ZU5hbWVUeXBlLHF1b3RlZDohMX0pLG4ub3B0aW9uYWwmJnQucHVzaCh7a2V5OiJvcHRpb25hbCIsdmFsdWU6bnQoITApLHF1b3RlZDohMX0pLG4uaG9zdCYmdC5wdXNoKHtrZXk6Imhvc3QiLHZhbHVlOm50KCEwKSxxdW90ZWQ6ITF9KSxuLnNlbGYmJnQucHVzaCh7a2V5OiJzZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksbi5za2lwU2VsZiYmdC5wdXNoKHtrZXk6InNraXBTZWxmIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSksdC5sZW5ndGg+MD9tbCh0KTpudWxsfShpKTtyZXR1cm4gbnVsbCE9PXI/KHQ9ITAscik6bnQobnVsbCl9KTtyZXR1cm4gdD9OYShjcihlKSk6ZGR9KG4uZGVwcyk6ZGQ7cmV0dXJuIE5hKHhuKEsuRmFjdG9yeURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KSx0XSkpfWZ1bmN0aW9uIGM5KG4sdCl7cmV0dXJuIG4ubWFwKChlLGkpPT5mdW5jdGlvbihuLHQsZSl7aWYobnVsbD09PW4udG9rZW4pcmV0dXJuIHhuKEsuaW52YWxpZEZhY3RvcnlEZXApLmNhbGxGbihbbnQoZSldKTtpZihudWxsPT09bi5hdHRyaWJ1dGVOYW1lVHlwZSl7bGV0IGk9MHwobi5zZWxmPzI6MCl8KG4uc2tpcFNlbGY/NDowKXwobi5ob3N0PzE6MCl8KG4ub3B0aW9uYWw/ODowKXwodD09PWljLlBpcGU/MTY6MCkscj0wIT09aXx8bi5vcHRpb25hbD9udChpKTpudWxsLG89W24udG9rZW5dO3ImJm8ucHVzaChyKTtsZXQgcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBpYy5Db21wb25lbnQ6Y2FzZSBpYy5EaXJlY3RpdmU6Y2FzZSBpYy5QaXBlOnJldHVybiBLLmRpcmVjdGl2ZUluamVjdDtkZWZhdWx0OnJldHVybiBLLmluamVjdH19KHQpO3JldHVybiB4bihzKS5jYWxsRm4obyl9cmV0dXJuIHhuKEsuaW5qZWN0QXR0cmlidXRlKS5jYWxsRm4oW24udG9rZW5dKX0oZSx0LGkpKX1mdW5jdGlvbiB1OShuKXtyZXR1cm4gdm9pZCAwIT09bi5kZWxlZ2F0ZVR5cGV9dmFyIHcwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzKX19LHV4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5pMThuPWl9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRCb3VuZFRleHQodGhpcyl9fSxkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy5pMThuPXN9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRUZXh0QXR0cmlidXRlKHRoaXMpfX0sTTA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuc2VjdXJpdHlDb250ZXh0PWksdGhpcy52YWx1ZT1yLHRoaXMudW5pdD1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMua2V5U3Bhbj1hLHRoaXMudmFsdWVTcGFuPWwsdGhpcy5pMThuPWN9c3RhdGljIGZyb21Cb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LGUpe2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBhdHRyaWJ1dGVzIGJ1dCB3YXMgbm90IGZvciAke3QubmFtZX06ICR7dC5zb3VyY2VTcGFufWApO3JldHVybiBuZXcgTTAodC5uYW1lLHQudHlwZSx0LnNlY3VyaXR5Q29udGV4dCx0LnZhbHVlLHQudW5pdCx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLGUpfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRBdHRyaWJ1dGUodGhpcyl9fSxTMD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlcj1pLHRoaXMudGFyZ2V0PXIsdGhpcy5waGFzZT1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMuaGFuZGxlclNwYW49YSx0aGlzLmtleVNwYW49bH1zdGF0aWMgZnJvbVBhcnNlZEV2ZW50KHQpe2xldCBlPTA9PT10LnR5cGU/dC50YXJnZXRPclBoYXNlOm51bGwsaT0xPT09dC50eXBlP3QudGFyZ2V0T3JQaGFzZTpudWxsO2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBldmVudCBidXQgd2FzIG5vdCBmb3IgJHt0Lm5hbWV9OiAke3Quc291cmNlU3Bhbn1gKTtyZXR1cm4gbmV3IFMwKHQubmFtZSx0LnR5cGUsdC5oYW5kbGVyLGUsaSx0LnNvdXJjZVNwYW4sdC5oYW5kbGVyU3Bhbix0LmtleVNwYW4pfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRFdmVudCh0aGlzKX19LEUwPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMubmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy5jaGlsZHJlbj1vLHRoaXMucmVmZXJlbmNlcz1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWMsdGhpcy5pMThuPXV9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRFbGVtZW50KHRoaXMpfX0sWWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMudGFnTmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy50ZW1wbGF0ZUF0dHJzPW8sdGhpcy5jaGlsZHJlbj1zLHRoaXMucmVmZXJlbmNlcz1hLHRoaXMudmFyaWFibGVzPWwsdGhpcy5zb3VyY2VTcGFuPWMsdGhpcy5zdGFydFNvdXJjZVNwYW49dSx0aGlzLmVuZFNvdXJjZVNwYW49ZCx0aGlzLmkxOG49cH12aXNpdCh0KXtyZXR1cm4gdC52aXNpdFRlbXBsYXRlKHRoaXMpfX0sdzE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5rZXlTcGFuPXIsdGhpcy52YWx1ZVNwYW49b312aXNpdCh0KXtyZXR1cm4gdC52aXNpdFZhcmlhYmxlKHRoaXMpfX0sTTE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy52YXJzPXQsdGhpcy5wbGFjZWhvbGRlcnM9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmkxOG49cn12aXNpdCh0KXtyZXR1cm4gdC52aXNpdEljdSh0aGlzKX19O2Z1bmN0aW9uIGQ5KG4sdCl7bGV0IGU9W107aWYobi52aXNpdClmb3IobGV0IGkgb2YgdCluLnZpc2l0KGkpfHxpLnZpc2l0KG4pO2Vsc2UgZm9yKGxldCBpIG9mIHQpe2xldCByPWkudmlzaXQobik7ciYmZS5wdXNoKHIpfXJldHVybiBlfXZhciBpdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5ub2Rlcz10LHRoaXMucGxhY2Vob2xkZXJzPWUsdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZT1pLHRoaXMubWVhbmluZz1yLHRoaXMuZGVzY3JpcHRpb249byx0aGlzLmN1c3RvbUlkPXMsdGhpcy5pZD10aGlzLmN1c3RvbUlkLHRoaXMubGVnYWN5SWRzPVtdLHRoaXMubWVzc2FnZVN0cmluZz1mdW5jdGlvbihuKXtsZXQgdD1uZXcgc0w7cmV0dXJuIG4ubWFwKGk9PmkudmlzaXQodCkpLmpvaW4oIiIpfSh0aGlzLm5vZGVzKSx0aGlzLnNvdXJjZXM9dC5sZW5ndGg/W3tmaWxlUGF0aDp0WzBdLnNvdXJjZVNwYW4uc3RhcnQuZmlsZS51cmwsc3RhcnRMaW5lOnRbMF0uc291cmNlU3Bhbi5zdGFydC5saW5lKzEsc3RhcnRDb2w6dFswXS5zb3VyY2VTcGFuLnN0YXJ0LmNvbCsxLGVuZExpbmU6dFt0Lmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZC5saW5lKzEsZW5kQ29sOnRbMF0uc291cmNlU3Bhbi5zdGFydC5jb2wrMX1dOltdfX0sbDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRleHQodGhpcyxlKX19LGJmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGlsZHJlbj10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb250YWluZXIodGhpcyxlKX19LFMxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1lLHRoaXMuY2FzZXM9aSx0aGlzLnNvdXJjZVNwYW49cn12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1KHRoaXMsZSl9fSxFMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52YWx1ZT10LHRoaXMubmFtZT1lLHRoaXMuc291cmNlU3Bhbj1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRQbGFjZWhvbGRlcih0aGlzLGUpfX0sVDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnNvdXJjZVNwYW49aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1UGxhY2Vob2xkZXIodGhpcyxlKX19LHNMPWNsYXNze3Zpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7bGV0IGU9T2JqZWN0LmtleXModC5jYXNlcykubWFwKGk9PmAke2l9IHske3QuY2FzZXNbaV0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb25QbGFjZWhvbGRlcn0sICR7dC50eXBlfSwgJHtlLmpvaW4oIiAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe2xldCBlPXQuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiIpO3JldHVybmB7JCR7dC5zdGFydE5hbWV9fSR7ZX17JCR7dC5jbG9zZU5hbWV9fWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm5geyQke3QubmFtZX19YH12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3JldHVybmB7JCR7dC5uYW1lfX1gfX07bmV3IGNsYXNze3Zpc2l0VGFnKHQpe2xldCBlPXRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyk7aWYoMD09dC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuYDwke3QubmFtZX0ke2V9Lz5gO2xldCBpPXQuY2hpbGRyZW4ubWFwKHI9PnIudmlzaXQodGhpcykpO3JldHVybmA8JHt0Lm5hbWV9JHtlfT4ke2kuam9pbigiIil9PC8ke3QubmFtZX0+YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXREZWNsYXJhdGlvbih0KXtyZXR1cm5gPD94bWwke3RoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyl9ID8+YH1fc2VyaWFsaXplQXR0cmlidXRlcyh0KXtsZXQgZT1PYmplY3Qua2V5cyh0KS5tYXAoaT0+YCR7aX09IiR7dFtpXX0iYCkuam9pbigiICIpO3JldHVybiBlLmxlbmd0aD4wPyIgIitlOiIifXZpc2l0RG9jdHlwZSh0KXtyZXR1cm5gPCFET0NUWVBFICR7dC5yb290VGFnfSBbXG4ke3QuZHRkfVxuXT5gfX07dmFyIGxMPSJpMThuLSI7ZnVuY3Rpb24gcHgobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBpdX1mdW5jdGlvbiBpMShuKXtyZXR1cm4gcHgobikmJjE9PT1uLm5vZGVzLmxlbmd0aCYmbi5ub2Rlc1swXWluc3RhbmNlb2YgUzF9ZnVuY3Rpb24gcHZlKG4pe3JldHVybiEhbi5pMThufWZ1bmN0aW9uIFRxKG4pe3JldHVybiBuLm5vZGVzWzBdfWZ1bmN0aW9uIFExKG4sdD0wKXtyZXR1cm5gXHVmZmZkJHtufSR7dD4wP2A6JHt0fWA6IiJ9XHVmZmZkYH1mdW5jdGlvbiBtdmUobj0wKXtsZXQgdD1uO3JldHVybigpPT50Kyt9ZnVuY3Rpb24gaDkobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+e3RbaV09bnQoZS5sZW5ndGg+MT9gWyR7ZS5qb2luKCJ8Iil9XWA6ZVswXSl9KSx0fWZ1bmN0aW9uIHUxKG4sdCwuLi5lKXtsZXQgaT1uLmdldCh0KXx8W107aS5wdXNoKC4uLmUpLG4uc2V0KHQsaSl9ZnVuY3Rpb24gRHEobix0PTAsZT0wKXtsZXQgaT10LHI9bmV3IE1hcCxvPW4gaW5zdGFuY2VvZiBpdT9uLm5vZGVzLmZpbmQocz0+cyBpbnN0YW5jZW9mIGJmKTpuO3JldHVybiBvJiZvLmNoaWxkcmVuLmZpbHRlcihzPT5zIGluc3RhbmNlb2YgRTEpLmZvckVhY2goKHMsYSk9PntsZXQgbD1RMShpK2EsZSk7dTEocixzLm5hbWUsbCl9KSxyfWZ1bmN0aW9uIHMzKG49e30sdCl7bGV0IGU9e307cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmT2JqZWN0LmtleXMobikuZm9yRWFjaChpPT5lW0Z4KGksdCldPW5baV0pLGV9ZnVuY3Rpb24gRngobix0PSEwKXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teQS1aMC05X10vZywiXyIpfShuKTtpZighdClyZXR1cm4gZTtsZXQgcixpPWUuc3BsaXQoIl8iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsvXlxkKyQvLnRlc3QoaVtpLmxlbmd0aC0xXSkmJihyPWkucG9wKCkpO2xldCBvPWkuc2hpZnQoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBpLmxlbmd0aCYmKG8rPWkubWFwKHM9PnMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKS5qb2luKCIiKSkscj9gJHtvfV8ke3J9YDpvfWZ1bmN0aW9uIGY5KG4pe3JldHVybmBNU0dfJHtufWAudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBndmUobil7cmV0dXJuIG5ldyBhdShuLm5hbWUsdm9pZCAwLGlhLHZvaWQgMCxuLnNvdXJjZVNwYW4pfXZhciBfdmU9L1stLl0vLGFjPSJjdHgiLE54PSJyZiIsQXE9InJlc3RvcmVkQ3R4IixDdmU9bmV3IFNldChbSy5lbGVtZW50LEsuZWxlbWVudFN0YXJ0LEsuZWxlbWVudEVuZCxLLmVsZW1lbnRDb250YWluZXIsSy5lbGVtZW50Q29udGFpbmVyU3RhcnQsSy5lbGVtZW50Q29udGFpbmVyRW5kLEsuaTE4bkV4cCxLLmxpc3RlbmVyLEsuY2xhc3NQcm9wLEsuc3ludGhldGljSG9zdExpc3RlbmVyLEsuaG9zdFByb3BlcnR5LEsuc3ludGhldGljSG9zdFByb3BlcnR5LEsucHJvcGVydHksSy5wcm9wZXJ0eUludGVycG9sYXRlMSxLLnByb3BlcnR5SW50ZXJwb2xhdGUyLEsucHJvcGVydHlJbnRlcnBvbGF0ZTMsSy5wcm9wZXJ0eUludGVycG9sYXRlNCxLLnByb3BlcnR5SW50ZXJwb2xhdGU1LEsucHJvcGVydHlJbnRlcnBvbGF0ZTYsSy5wcm9wZXJ0eUludGVycG9sYXRlNyxLLnByb3BlcnR5SW50ZXJwb2xhdGU4LEsucHJvcGVydHlJbnRlcnBvbGF0ZVYsSy5hdHRyaWJ1dGUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTEsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTIsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTMsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTUsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTYsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTcsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTgsSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVYsSy5zdHlsZVByb3AsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTEsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTIsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTMsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTQsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTUsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTYsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTcsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTgsSy5zdHlsZVByb3BJbnRlcnBvbGF0ZVYsSy50ZXh0SW50ZXJwb2xhdGUsSy50ZXh0SW50ZXJwb2xhdGUxLEsudGV4dEludGVycG9sYXRlMixLLnRleHRJbnRlcnBvbGF0ZTMsSy50ZXh0SW50ZXJwb2xhdGU0LEsudGV4dEludGVycG9sYXRlNSxLLnRleHRJbnRlcnBvbGF0ZTYsSy50ZXh0SW50ZXJwb2xhdGU3LEsudGV4dEludGVycG9sYXRlOCxLLnRleHRJbnRlcnBvbGF0ZVZdKTtmdW5jdGlvbiB4ZihuLHQsZSl7cmV0dXJuIHhuKHQsbnVsbCxuKS5jYWxsRm4oZSxuKX1mdW5jdGlvbiBJcShuLHQpe2xldCBlPW51bGw7cmV0dXJuKCk9PihlfHwobi5wdXNoKG5ldyBhdSgiX3QiLHZvaWQgMCxWMCkpLGU9TWkodCkpLGUpfWZ1bmN0aW9uIEhiKG4pe3Rocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZTogVmlzaXRvciAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZG9lc24ndCBoYW5kbGUgJHtuLmNvbnN0cnVjdG9yLm5hbWV9YCl9ZnVuY3Rpb24gcnUobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/Y3Iobi5tYXAocnUpKTpudChuLGlhKX1mdW5jdGlvbiBtOShuLHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5sZW5ndGg+MD9mdW5jdGlvbihuLHQpe3JldHVybiBtbChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5tYXAoZT0+e2xldCByLG8scyxhLGk9bltlXTtyZXR1cm4gQXJyYXkuaXNBcnJheShpKT8oW28scl09aSxzPWUsYT1vIT09cik6KHM9cj1lLG89aSxhPSExKSx7a2V5OnMscXVvdGVkOl92ZS50ZXN0KHMpLHZhbHVlOnQmJmE/Y3IoW3J1KG8pLHJ1KHIpXSk6cnUobyl9fSkpfShuLHQpOm51bGx9ZnVuY3Rpb24gU04obil7Zm9yKDt4cShuW24ubGVuZ3RoLTFdKTspbi5wb3AoKTtyZXR1cm4gbn1mdW5jdGlvbiBNdmUobix0KXtpZihBcnJheS5pc0FycmF5KG4ucHJlZGljYXRlKSl7bGV0IGU9W107cmV0dXJuIG4ucHJlZGljYXRlLmZvckVhY2goaT0+e2xldCByPWkuc3BsaXQoIiwiKS5tYXAobz0+bnQoby50cmltKCkpKTtlLnB1c2goLi4ucil9KSx0LmdldENvbnN0TGl0ZXJhbChjcihlKSwhMCl9c3dpdGNoKG4ucHJlZGljYXRlLmZvcndhcmRSZWYpe2Nhc2UgMDpjYXNlIDI6cmV0dXJuIG4ucHJlZGljYXRlLmV4cHJlc3Npb247Y2FzZSAxOnJldHVybiB4bihLLnJlc29sdmVGb3J3YXJkUmVmKS5jYWxsRm4oW24ucHJlZGljYXRlLmV4cHJlc3Npb25dKX19dmFyIHlwPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZXM9W119c2V0KHQsZSl7ZSYmdGhpcy52YWx1ZXMucHVzaCh7a2V5OnQsdmFsdWU6ZSxxdW90ZWQ6ITF9KX10b0xpdGVyYWxNYXAoKXtyZXR1cm4gbWwodGhpcy52YWx1ZXMpfX07ZnVuY3Rpb24gQWYobil7bGV0e2V4cHJlc3Npb25zOnQsc3RyaW5nczplfT1uO3JldHVybiAxPT09dC5sZW5ndGgmJjI9PT1lLmxlbmd0aCYmIiI9PT1lWzBdJiYiIj09PWVbMV0/MTp0Lmxlbmd0aCtlLmxlbmd0aH1mdW5jdGlvbiBUMShuKXtsZXQgdD1bXSxlPW51bGwsaT1udWxsLHI9MDtmb3IobGV0IG8gb2Ygbil7bGV0IHM9KCJmdW5jdGlvbiI9PXR5cGVvZiBvLnBhcmFtc09yRm4/by5wYXJhbXNPckZuKCk6by5wYXJhbXNPckZuKT8/W10sYT1BcnJheS5pc0FycmF5KHMpP3M6W3NdO3I8NTAwJiZpPT09by5yZWZlcmVuY2UmJkN2ZS5oYXMoaSk/KGU9ZS5jYWxsRm4oYSxlLnNvdXJjZVNwYW4pLHIrKyk6KG51bGwhPT1lJiZ0LnB1c2goZS50b1N0bXQoKSksZT14ZihvLnNwYW4sby5yZWZlcmVuY2UsYSksaT1vLnJlZmVyZW5jZSxyPTApfXJldHVybiBudWxsIT09ZSYmdC5wdXNoKGUudG9TdG10KCkpLHR9ZnVuY3Rpb24gZzkobix0KXtsZXQgZT1udWxsLGk9e25hbWU6bi5uYW1lLHR5cGU6bi50eXBlLGludGVybmFsVHlwZTpuLmludGVybmFsVHlwZSx0eXBlQXJndW1lbnRDb3VudDpuLnR5cGVBcmd1bWVudENvdW50LGRlcHM6W10sdGFyZ2V0OmljLkluamVjdGFibGV9O2lmKHZvaWQgMCE9PW4udXNlQ2xhc3Mpe2xldCBsLGE9bi51c2VDbGFzcy5leHByZXNzaW9uLmlzRXF1aXZhbGVudChuLmludGVybmFsVHlwZSk7dm9pZCAwIT09bi5kZXBzJiYobD1uLmRlcHMpLGU9dm9pZCAwIT09bD9hZih7Li4uaSxkZWxlZ2F0ZTpuLnVzZUNsYXNzLmV4cHJlc3Npb24sZGVsZWdhdGVEZXBzOmwsZGVsZWdhdGVUeXBlOmYwLkNsYXNzfSk6YT9hZihpKTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLnVzZUNsYXNzLmV4cHJlc3Npb24sdCl9fWVsc2UgZT12b2lkIDAhPT1uLnVzZUZhY3Rvcnk/dm9pZCAwIT09bi5kZXBzP2FmKHsuLi5pLGRlbGVnYXRlOm4udXNlRmFjdG9yeSxkZWxlZ2F0ZURlcHM6bi5kZXBzfHxbXSxkZWxlZ2F0ZVR5cGU6ZjAuRnVuY3Rpb259KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOk9zKFtdLFtuZXcgdW8obi51c2VGYWN0b3J5LmNhbGxGbihbXSkpXSl9OnZvaWQgMCE9PW4udXNlVmFsdWU/YWYoey4uLmksZXhwcmVzc2lvbjpuLnVzZVZhbHVlLmV4cHJlc3Npb259KTp2b2lkIDAhPT1uLnVzZUV4aXN0aW5nP2FmKHsuLi5pLGV4cHJlc3Npb246eG4oSy5pbmplY3QpLmNhbGxGbihbbi51c2VFeGlzdGluZy5leHByZXNzaW9uXSl9KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOl85KG4udHlwZS52YWx1ZSxuLmludGVybmFsVHlwZSx0KX07bGV0IHI9bi5pbnRlcm5hbFR5cGUsbz1uZXcgeXA7cmV0dXJuIG8uc2V0KCJ0b2tlbiIsciksby5zZXQoImZhY3RvcnkiLGUuZXhwcmVzc2lvbiksbnVsbCE9PW4ucHJvdmlkZWRJbi5leHByZXNzaW9uLnZhbHVlJiZvLnNldCgicHJvdmlkZWRJbiIsZnVuY3Rpb24oe2V4cHJlc3Npb246bixmb3J3YXJkUmVmOnR9KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gbjtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB4bihLLmZvcndhcmRSZWYpLmNhbGxGbihbT3MoW10sW25ldyB1byhuKV0pXSl9KG4pfX0obi5wcm92aWRlZEluKSkse2V4cHJlc3Npb246eG4oSy5cdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlKS5jYWxsRm4oW28udG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksdHlwZTpTdmUobiksc3RhdGVtZW50czplLnN0YXRlbWVudHN9fWZ1bmN0aW9uIFN2ZShuKXtyZXR1cm4gbmV3IHNjKHhuKEsuSW5qZWN0YWJsZURlY2xhcmF0aW9uLFtYMShuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KV0pKX1mdW5jdGlvbiBfOShuLHQsZSl7cmV0dXJuIG4ubm9kZT09PXQubm9kZT90LnByb3AoIlx1MDI3NWZhYyIpOnY5KGU/eG4oSy5yZXNvbHZlRm9yd2FyZFJlZikuY2FsbEZuKFt0XSk6dCl9ZnVuY3Rpb24gdjkobil7cmV0dXJuIE9zKFtuZXcgUnMoInQiLFYwKV0sW25ldyB1byhuLnByb3AoIlx1MDI3NWZhYyIpLmNhbGxGbihbTWkoInQiKV0pKV0pfXZhciBFdmU9Wy9eXHMqJC8sL1s8Pl0vLC9eW3t9XSQvLC8mKCN8W2Etel0pL2ksL15cL1wvL10sRDA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX1zdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiB0PyhmdW5jdGlvbihuLHQpe2lmKG51bGwhPXQmJighQXJyYXkuaXNBcnJheSh0KXx8MiE9dC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgJ2ludGVycG9sYXRpb24nIHRvIGJlIGFuIGFycmF5LCBbc3RhcnQsIGVuZF0uIik7aWYobnVsbCE9dCl7bGV0IGU9dFswXSxpPXRbMV07RXZlLmZvckVhY2gocj0+e2lmKHIudGVzdChlKXx8ci50ZXN0KGkpKXRocm93IG5ldyBFcnJvcihgWycke2V9JywgJyR7aX0nXSBjb250YWlucyB1bnVzYWJsZSBpbnRlcnBvbGF0aW9uIHN5bWJvbC5gKX0pfX0oMCx0KSxuZXcgRDAodFswXSx0WzFdKSk6JGN9fSwkYz1uZXcgRDAoInt7IiwifX0iKSxmcD0xMjMsdHU9MTI1O2Z1bmN0aW9uIGYzKG4pe3JldHVybiBuPj05JiZuPD0zMnx8MTYwPT1ufWZ1bmN0aW9uIHBwKG4pe3JldHVybiA0ODw9biYmbjw9NTd9ZnVuY3Rpb24gbTMobil7cmV0dXJuIG4+PTk3JiZuPD0xMjJ8fG4+PTY1JiZuPD05MH1mdW5jdGlvbiBXcShuKXtyZXR1cm4gMTA9PT1ufHwxMz09PW59ZnVuY3Rpb24geDkobil7cmV0dXJuIDQ4PD1uJiZuPD01NX1mdW5jdGlvbiB1TChuKXtyZXR1cm4gMzk9PT1ufHwzND09PW58fDk2PT09bn12YXIgd2Y9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5maWxlPXQsdGhpcy5vZmZzZXQ9ZSx0aGlzLmxpbmU9aSx0aGlzLmNvbD1yfXRvU3RyaW5nKCl7cmV0dXJuIG51bGwhPXRoaXMub2Zmc2V0P2Ake3RoaXMuZmlsZS51cmx9QCR7dGhpcy5saW5lfToke3RoaXMuY29sfWA6dGhpcy5maWxlLnVybH1tb3ZlQnkodCl7bGV0IGU9dGhpcy5maWxlLmNvbnRlbnQsaT1lLmxlbmd0aCxyPXRoaXMub2Zmc2V0LG89dGhpcy5saW5lLHM9dGhpcy5jb2w7Zm9yKDtyPjAmJnQ8MDspaWYoci0tLHQrKywxMD09ZS5jaGFyQ29kZUF0KHIpKXtvLS07bGV0IGw9ZS5zdWJzdHJpbmcoMCxyLTEpLmxhc3RJbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoMTApKTtzPWw+MD9yLWw6cn1lbHNlIHMtLTtmb3IoO3I8aSYmdD4wOyl7bGV0IGE9ZS5jaGFyQ29kZUF0KHIpO3IrKyx0LS0sMTA9PWE/KG8rKyxzPTApOnMrK31yZXR1cm4gbmV3IHdmKHRoaXMuZmlsZSxyLG8scyl9Z2V0Q29udGV4dCh0LGUpe2xldCBpPXRoaXMuZmlsZS5jb250ZW50LHI9dGhpcy5vZmZzZXQ7aWYobnVsbCE9cil7cj5pLmxlbmd0aC0xJiYocj1pLmxlbmd0aC0xKTtsZXQgbz1yLHM9MCxhPTA7Zm9yKDtzPHQmJnI+MCYmKHItLSxzKyssIlxuIiE9aVtyXXx8KythIT1lKTspO2ZvcihzPTAsYT0wO3M8dCYmbzxpLmxlbmd0aC0xJiYobysrLHMrKywiXG4iIT1pW29dfHwrK2EhPWUpOyk7cmV0dXJue2JlZm9yZTppLnN1YnN0cmluZyhyLHRoaXMub2Zmc2V0KSxhZnRlcjppLnN1YnN0cmluZyh0aGlzLm9mZnNldCxvKzEpfX1yZXR1cm4gbnVsbH19LEkxPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jb250ZW50PXQsdGhpcy51cmw9ZX19LFRvPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPXQscj1udWxsKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZSx0aGlzLmZ1bGxTdGFydD1pLHRoaXMuZGV0YWlscz1yfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuc3RhcnQuZmlsZS5jb250ZW50LnN1YnN0cmluZyh0aGlzLnN0YXJ0Lm9mZnNldCx0aGlzLmVuZC5vZmZzZXQpfX0sbnU9KCgpPT57cmV0dXJuKG49bnV8fChudT17fSkpW24uV0FSTklORz0wXT0iV0FSTklORyIsbltuLkVSUk9SPTFdPSJFUlJPUiIsbnU7dmFyIG59KSgpLE1mPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLnNwYW49dCx0aGlzLm1zZz1lLHRoaXMubGV2ZWw9aX1jb250ZXh0dWFsTWVzc2FnZSgpe2xldCB0PXRoaXMuc3Bhbi5zdGFydC5nZXRDb250ZXh0KDEwMCwzKTtyZXR1cm4gdD9gJHt0aGlzLm1zZ30gKCIke3QuYmVmb3JlfVske251W3RoaXMubGV2ZWxdfSAtPl0ke3QuYWZ0ZXJ9IilgOnRoaXMubXNnfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5zcGFuLmRldGFpbHM/YCwgJHt0aGlzLnNwYW4uZGV0YWlsc31gOiIiO3JldHVybmAke3RoaXMuY29udGV4dHVhbE1lc3NhZ2UoKX06ICR7dGhpcy5zcGFuLnN0YXJ0fSR7dH1gfX0sVXZlPTA7ZnVuY3Rpb24gbTAobil7cmV0dXJuIG4ucmVwbGFjZSgvXFcvZywiXyIpfXZhciByMSxDOT0nKHRoaXMmJnRoaXMuX19tYWtlVGVtcGxhdGVPYmplY3R8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicmF3Iix7dmFsdWU6dH0pOmUucmF3PXQsZX0pJyxkTD1jbGFzcyBleHRlbmRzIHRMe2NvbnN0cnVjdG9yKCl7c3VwZXIoITEpfXZpc2l0V3JhcHBlZE5vZGVFeHByKHQsZSl7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW1pdCBhIFdyYXBwZWROb2RlRXhwciBpbiBKYXZhc2NyaXB0LiIpfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gZS5wcmludCh0LGB2YXIgJHt0Lm5hbWV9YCksdC52YWx1ZSYmKGUucHJpbnQodCwiID0gIiksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByKHQsZSl7bGV0IGk9dC50ZW1wbGF0ZS5lbGVtZW50cztyZXR1cm4gdC50YWcudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGAoJHtDOX0oYCksZS5wcmludCh0LGBbJHtpLm1hcChyPT5jZihyLnRleHQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXdUZXh0LCExKSkuam9pbigiLCAiKX1dKWApLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMuZm9yRWFjaChyPT57ZS5wcmludCh0LCIsICIpLHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9KSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0RnVuY3Rpb25FeHByKHQsZSl7cmV0dXJuIGUucHJpbnQodCxgZnVuY3Rpb24ke3QubmFtZT8iICIrdC5uYW1lOiIifShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50KHQsIn0iKSxudWxsfXZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpe3JldHVybiBlLnByaW50KHQsYGZ1bmN0aW9uICR7dC5uYW1lfShgKSx0aGlzLl92aXNpdFBhcmFtcyh0LnBhcmFtcyxlKSxlLnByaW50bG4odCwiKSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LnN0YXRlbWVudHMsZSksZS5kZWNJbmRlbnQoKSxlLnByaW50bG4odCwifSIpLG51bGx9dmlzaXRMb2NhbGl6ZWRTdHJpbmcodCxlKXtlLnByaW50KHQsYCRsb2NhbGl6ZSgke0M5fShgKTtsZXQgaT1bdC5zZXJpYWxpemVJMThuSGVhZCgpXTtmb3IobGV0IHI9MTtyPHQubWVzc2FnZVBhcnRzLmxlbmd0aDtyKyspaS5wdXNoKHQuc2VyaWFsaXplSTE4blRlbXBsYXRlUGFydChyKSk7cmV0dXJuIGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5jb29rZWQsITEpKS5qb2luKCIsICIpfV0sIGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+Y2Yoci5yYXcsITEpKS5qb2luKCIsICIpfV0pYCksdC5leHByZXNzaW9ucy5mb3JFYWNoKHI9PntlLnByaW50KHQsIiwgIiksci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX0pLGUucHJpbnQodCwiKSIpLG51bGx9X3Zpc2l0UGFyYW1zKHQsZSl7dGhpcy52aXNpdEFsbE9iamVjdHMoaT0+ZS5wcmludChudWxsLGkubmFtZSksdCxlLCIsIil9fTtmdW5jdGlvbiB3OSguLi5uKXtpZighcDAudHJ1c3RlZFR5cGVzKXJldHVybiBuZXcgRnVuY3Rpb24oLi4ubik7bGV0IGk9YChmdW5jdGlvbiBhbm9ueW1vdXMoJHtuLnNsaWNlKDAsLTEpLmpvaW4oIiwiKX1cbikgeyAke25bbi5sZW5ndGgtMV19XG59KWAscj1wMC5ldmFsKGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PXIxJiYocjE9bnVsbCxwMC50cnVzdGVkVHlwZXMpKXRyeXtyMT1wMC50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1qaXQiLHtjcmVhdGVTY3JpcHQ6bj0+bn0pfWNhdGNoe31yZXR1cm4gcjF9KCk/LmNyZWF0ZVNjcmlwdChuKXx8bn0oaSkpO3JldHVybiB2b2lkIDA9PT1yLmJpbmQ/bmV3IEZ1bmN0aW9uKC4uLm4pOihyLnRvU3RyaW5nPSgpPT5pLHIuYmluZChwMCkpfXZhciBoTD1jbGFzcyBleHRlbmRzIGRMe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5yZWZSZXNvbHZlcj10LHRoaXMuX2V2YWxBcmdOYW1lcz1bXSx0aGlzLl9ldmFsQXJnVmFsdWVzPVtdLHRoaXMuX2V2YWxFeHBvcnRlZFZhcnM9W119Y3JlYXRlUmV0dXJuU3RtdCh0KXtuZXcgdW8obmV3IHgwKHRoaXMuX2V2YWxFeHBvcnRlZFZhcnMubWFwKGk9Pm5ldyB5MShpLE1pKGkpLCExKSkpKS52aXNpdFN0YXRlbWVudCh0aGlzLHQpfWdldEFyZ3MoKXtsZXQgdD17fTtmb3IobGV0IGU9MDtlPHRoaXMuX2V2YWxBcmdOYW1lcy5sZW5ndGg7ZSsrKXRbdGhpcy5fZXZhbEFyZ05hbWVzW2VdXT10aGlzLl9ldmFsQXJnVmFsdWVzW2VdO3JldHVybiB0fXZpc2l0RXh0ZXJuYWxFeHByKHQsZSl7cmV0dXJuIHRoaXMuX2VtaXRSZWZlcmVuY2VUb0V4dGVybmFsKHQsdGhpcy5yZWZSZXNvbHZlci5yZXNvbHZlRXh0ZXJuYWxSZWZlcmVuY2UodC52YWx1ZSksZSksbnVsbH12aXNpdFdyYXBwZWROb2RlRXhwcih0LGUpe3JldHVybiB0aGlzLl9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LHQubm9kZSxlKSxudWxsfXZpc2l0RGVjbGFyZVZhclN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZVZhclN0bXQodCxlKX12aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKXtyZXR1cm4gdC5oYXNNb2RpZmllcihrYS5FeHBvcnRlZCkmJnRoaXMuX2V2YWxFeHBvcnRlZFZhcnMucHVzaCh0Lm5hbWUpLHN1cGVyLnZpc2l0RGVjbGFyZUZ1bmN0aW9uU3RtdCh0LGUpfV9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LGUsaSl7bGV0IHI9dGhpcy5fZXZhbEFyZ1ZhbHVlcy5pbmRleE9mKGUpO2lmKC0xPT09cil7cj10aGlzLl9ldmFsQXJnVmFsdWVzLmxlbmd0aCx0aGlzLl9ldmFsQXJnVmFsdWVzLnB1c2goZSk7bGV0IG89ZnVuY3Rpb24obil7aWYoIW58fCFuLnJlZmVyZW5jZSlyZXR1cm4gbnVsbDtsZXQgdD1uLnJlZmVyZW5jZTtpZih0Ll9fYW5vbnltb3VzVHlwZSlyZXR1cm4gdC5fX2Fub255bW91c1R5cGU7aWYodC5fX2ZvcndhcmRfcmVmX18pcmV0dXJuIl9fZm9yd2FyZF9yZWZfXyI7bGV0IGU9Z3EodCk7cmV0dXJuIGUuaW5kZXhPZigiKCIpPj0wPyhlPSJhbm9ueW1vdXNfIitVdmUrKyx0Ll9fYW5vbnltb3VzVHlwZT1lKTplPW0wKGUpLGV9KHtyZWZlcmVuY2U6ZX0pfHwidmFsIjt0aGlzLl9ldmFsQXJnTmFtZXMucHVzaChgaml0XyR7b31fJHtyfWApfWkucHJpbnQodCx0aGlzLl9ldmFsQXJnTmFtZXNbcl0pfX07ZnVuY3Rpb24gTTkobil7bGV0IHQ9bmV3IHlwO251bGwhPT1uLnByb3ZpZGVycyYmdC5zZXQoInByb3ZpZGVycyIsbi5wcm92aWRlcnMpLG4uaW1wb3J0cy5sZW5ndGg+MCYmdC5zZXQoImltcG9ydHMiLGNyKG4uaW1wb3J0cykpO2xldCBlPXhuKEsuZGVmaW5lSW5qZWN0b3IpLmNhbGxGbihbdC50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBuZXcgc2MoeG4oSy5JbmplY3RvckRlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlLnR5cGUpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgZzA9KCgpPT57cmV0dXJuKG49ZzB8fChnMD17fSkpW24uSW5saW5lPTBdPSJJbmxpbmUiLG5bbi5TaWRlRWZmZWN0PTFdPSJTaWRlRWZmZWN0IixuW24uT21pdD0yXT0iT21pdCIsZzA7dmFyIG59KSgpO2Z1bmN0aW9uIFl2ZShuKXtsZXR7YWRqYWNlbnRUeXBlOnQsaW50ZXJuYWxUeXBlOmUsYm9vdHN0cmFwOmksZGVjbGFyYXRpb25zOnIsaW1wb3J0czpvLGV4cG9ydHM6cyxzY2hlbWFzOmEsY29udGFpbnNGb3J3YXJkRGVjbHM6bCxzZWxlY3RvclNjb3BlTW9kZTpjLGlkOnV9PW4sZD1bXSxwPW5ldyB5cDtpZihwLnNldCgidHlwZSIsZSksaS5sZW5ndGg+MCYmcC5zZXQoImJvb3RzdHJhcCIsdWYoaSxsKSksYz09PWcwLklubGluZSlyLmxlbmd0aD4wJiZwLnNldCgiZGVjbGFyYXRpb25zIix1ZihyLGwpKSxvLmxlbmd0aD4wJiZwLnNldCgiaW1wb3J0cyIsdWYobyxsKSkscy5sZW5ndGg+MCYmcC5zZXQoImV4cG9ydHMiLHVmKHMsbCkpO2Vsc2UgaWYoYz09PWcwLlNpZGVFZmZlY3Qpe2xldCBtPWZ1bmN0aW9uKG4pe2xldHthZGphY2VudFR5cGU6dCxkZWNsYXJhdGlvbnM6ZSxpbXBvcnRzOmksZXhwb3J0czpyLGNvbnRhaW5zRm9yd2FyZERlY2xzOm99PW4scz1uZXcgeXA7aWYoZS5sZW5ndGg+MCYmcy5zZXQoImRlY2xhcmF0aW9ucyIsdWYoZSxvKSksaS5sZW5ndGg+MCYmcy5zZXQoImltcG9ydHMiLHVmKGksbykpLHIubGVuZ3RoPjAmJnMuc2V0KCJleHBvcnRzIix1ZihyLG8pKSwwPT09T2JqZWN0LmtleXMocy52YWx1ZXMpLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgeTAoe25hbWU6Im5nSml0TW9kZSIsbW9kdWxlTmFtZTpudWxsfSksaT1uZXcgbHIoaG4uSWRlbnRpY2FsLG5ldyB2MChlKSxudCgidW5kZWZpbmVkIikpLHI9bmV3IGxyKGhuLk9yLGksZSx2b2lkIDAsdm9pZCAwLCEwKTtyZXR1cm4gbmV3IGxyKGhuLkFuZCxyLHQpfSgwLG4pfShuZXcgdnAoeG4oSy5zZXROZ01vZHVsZVNjb3BlKSxbdCxzLnRvTGl0ZXJhbE1hcCgpXSkpLGM9bmV3IF9mKFtdLFtsLnRvU3RtdCgpXSk7cmV0dXJuIG5ldyB2cChjLFtdKS50b1N0bXQoKX0obik7bnVsbCE9PW0mJmQucHVzaChtKX1udWxsIT09YSYmYS5sZW5ndGg+MCYmcC5zZXQoInNjaGVtYXMiLGNyKGEubWFwKG09Pm0udmFsdWUpKSksbnVsbCE9PXUmJihwLnNldCgiaWQiLHUpLGQucHVzaCh4bihLLnJlZ2lzdGVyTmdNb2R1bGVUeXBlKS5jYWxsRm4oW3QsdV0pLnRvU3RtdCgpKSk7bGV0IGg9eG4oSy5kZWZpbmVOZ01vZHVsZSkuY2FsbEZuKFtwLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGY9ZnVuY3Rpb24oe3R5cGU6bixkZWNsYXJhdGlvbnM6dCxleHBvcnRzOmUsaW1wb3J0czppLGluY2x1ZGVJbXBvcnRUeXBlczpyLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6b30pe3JldHVybiBuZXcgc2MoeG4oSy5OZ01vZHVsZURlY2xhcmF0aW9uLFtuZXcgc2Mobi50eXBlKSxudWxsPT09bz9FTih0KTpadmUobykscj9FTihpKTpkZCxFTihlKV0pKX0obik7cmV0dXJue2V4cHJlc3Npb246aCx0eXBlOmYsc3RhdGVtZW50czpkfX1mdW5jdGlvbiBFTihuKXtsZXQgdD1uLm1hcChlPT5pMyhlLnR5cGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gWnZlKG4pe2xldCB0PW4ubWFwKGU9PmkzKGUpKTtyZXR1cm4gbi5sZW5ndGg+MD9OYShjcih0KSk6ZGR9ZnVuY3Rpb24gUzkobil7bGV0IHQ9W107dC5wdXNoKHtrZXk6Im5hbWUiLHZhbHVlOm50KG4ucGlwZU5hbWUpLHF1b3RlZDohMX0pLHQucHVzaCh7a2V5OiJ0eXBlIix2YWx1ZTpuLnR5cGUudmFsdWUscXVvdGVkOiExfSksdC5wdXNoKHtrZXk6InB1cmUiLHZhbHVlOm50KG4ucHVyZSkscXVvdGVkOiExfSksbi5pc1N0YW5kYWxvbmUmJnQucHVzaCh7a2V5OiJzdGFuZGFsb25lIix2YWx1ZTpudCghMCkscXVvdGVkOiExfSk7bGV0IGU9eG4oSy5kZWZpbmVQaXBlKS5jYWxsRm4oW21sKHQpXSx2b2lkIDAsITApLGk9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBzYyh4bihLLlBpcGVEZWNsYXJhdGlvbixbWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbmV3IHNjKG5ldyBGYShuLnBpcGVOYW1lKSksbmV3IHNjKG5ldyBGYShuLmlzU3RhbmRhbG9uZSkpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgXzA9KCgpPT57cmV0dXJuKG49XzB8fChfMD17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5QaXBlPTFdPSJQaXBlIixuW24uTmdNb2R1bGU9Ml09Ik5nTW9kdWxlIixfMDt2YXIgbn0pKCksbXg9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pbnB1dD1lLHRoaXMuZXJyTG9jYXRpb249aSx0aGlzLmN0eExvY2F0aW9uPXIsdGhpcy5tZXNzYWdlPWBQYXJzZXIgRXJyb3I6ICR7dH0gJHtpfSBbJHtlfV0gaW4gJHtyfWB9fSxTZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1lfXRvQWJzb2x1dGUodCl7cmV0dXJuIG5ldyBPYSh0K3RoaXMuc3RhcnQsdCt0aGlzLmVuZCl9fSxwbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3Bhbj10LHRoaXMuc291cmNlU3Bhbj1lfXRvU3RyaW5nKCl7cmV0dXJuIkFTVCJ9fSxBMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMubmFtZVNwYW49aX19LG5hPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe319LEVmPWNsYXNzIGV4dGVuZHMgcG97dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0SW1wbGljaXRSZWNlaXZlcih0aGlzLGUpfX0sZ3g9Y2xhc3MgZXh0ZW5kcyBFZnt2aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRUaGlzUmVjZWl2ZXI/Lih0aGlzLGUpfX0sX3g9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0Q2hhaW4odGhpcyxlKX19LHZ4PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMuY29uZGl0aW9uPWksdGhpcy50cnVlRXhwPXIsdGhpcy5mYWxzZUV4cD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdENvbmRpdGlvbmFsKHRoaXMsZSl9fSxvdT1jbGFzcyBleHRlbmRzIEEwe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlLGkpLHRoaXMucmVjZWl2ZXI9cix0aGlzLm5hbWU9b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRQcm9wZXJ0eVJlYWQodGhpcyxlKX19LHl4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpKSx0aGlzLnJlY2VpdmVyPXIsdGhpcy5uYW1lPW8sdGhpcy52YWx1ZT1zfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByb3BlcnR5V3JpdGUodGhpcyxlKX19LGJ4PWNsYXNzIGV4dGVuZHMgQTB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUsaSksdGhpcy5yZWNlaXZlcj1yLHRoaXMubmFtZT1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFNhZmVQcm9wZXJ0eVJlYWQodGhpcyxlKX19LEkwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRLZXllZFJlYWQodGhpcyxlKX19LFAwPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlS2V5ZWRSZWFkKHRoaXMsZSl9fSx4eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cix0aGlzLnZhbHVlPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0S2V5ZWRXcml0ZSh0aGlzLGUpfX0sUjA9Y2xhc3MgZXh0ZW5kcyBBMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLHMpLHRoaXMuZXhwPWksdGhpcy5uYW1lPXIsdGhpcy5hcmdzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0UGlwZSh0aGlzLGUpfX0sSXM9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLnZhbHVlPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0aGlzLGUpfX0sTzA9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5KHRoaXMsZSl9fSxDeD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5rZXlzPWksdGhpcy52YWx1ZXM9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwKHRoaXMsZSl9fSxabz1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5zdHJpbmdzPWksdGhpcy5leHByZXNzaW9ucz1yfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEludGVycG9sYXRpb24odGhpcyxlKX19LGhsPWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMub3BlcmF0aW9uPWksdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEJpbmFyeSh0aGlzLGUpfX0sY2M9Y2xhc3MgZXh0ZW5kcyBobHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcih0LGUsbyxzLGEpLHRoaXMub3BlcmF0b3I9aSx0aGlzLmV4cHI9cix0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy5vcGVyYXRpb249bnVsbH1zdGF0aWMgY3JlYXRlTWludXModCxlLGkpe3JldHVybiBuZXcgY2ModCxlLCItIixpLCItIixuZXcgSXModCxlLDApLGkpfXN0YXRpYyBjcmVhdGVQbHVzKHQsZSxpKXtyZXR1cm4gbmV3IGNjKHQsZSwiKyIsaSwiLSIsaSxuZXcgSXModCxlLDApKX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHZvaWQgMCE9PXQudmlzaXRVbmFyeT90LnZpc2l0VW5hcnkodGhpcyxlKTp0LnZpc2l0QmluYXJ5KHRoaXMsZSl9fSx3eD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuZXhwcmVzc2lvbj1pfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByZWZpeE5vdCh0aGlzLGUpfX0sTXg9Y2xhc3MgZXh0ZW5kcyBwb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb249aX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXROb25OdWxsQXNzZXJ0KHRoaXMsZSl9fSxicD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRDYWxsKHRoaXMsZSl9fSxrMD1jbGFzcyBleHRlbmRzIHBve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlQ2FsbCh0aGlzLGUpfX0sT2E9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX19LGV1PWNsYXNzIGV4dGVuZHMgcG97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihuZXcgU2YoMCxudWxsPT09ZT8wOmUubGVuZ3RoKSxuZXcgT2EocixudWxsPT09ZT9yOnIrZS5sZW5ndGgpKSx0aGlzLmFzdD10LHRoaXMuc291cmNlPWUsdGhpcy5sb2NhdGlvbj1pLHRoaXMuZXJyb3JzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0QVNUV2l0aFNvdXJjZT90LnZpc2l0QVNUV2l0aFNvdXJjZSh0aGlzLGUpOnRoaXMuYXN0LnZpc2l0KHQsZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZX0gaW4gJHt0aGlzLmxvY2F0aW9ufWB9fSxTeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fSxnTD1jbGFzc3t2aXNpdCh0LGUpe3QudmlzaXQodGhpcyxlKX12aXNpdFVuYXJ5KHQsZSl7dGhpcy52aXNpdCh0LmV4cHIsZSl9dmlzaXRCaW5hcnkodCxlKXt0aGlzLnZpc2l0KHQubGVmdCxlKSx0aGlzLnZpc2l0KHQucmlnaHQsZSl9dmlzaXRDaGFpbih0LGUpe3RoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7dGhpcy52aXNpdCh0LmNvbmRpdGlvbixlKSx0aGlzLnZpc2l0KHQudHJ1ZUV4cCxlKSx0aGlzLnZpc2l0KHQuZmFsc2VFeHAsZSl9dmlzaXRQaXBlKHQsZSl7dGhpcy52aXNpdCh0LmV4cCxlKSx0aGlzLnZpc2l0QWxsKHQuYXJncyxlKX12aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXt9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXt9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0S2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSksdGhpcy52aXNpdCh0LnZhbHVlLGUpfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0TGl0ZXJhbE1hcCh0LGUpe3RoaXMudmlzaXRBbGwodC52YWx1ZXMsZSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7fXZpc2l0UHJlZml4Tm90KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXROb25OdWxsQXNzZXJ0KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC52YWx1ZSxlKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRDYWxsKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXRBbGwodC5hcmdzLGUpfXZpc2l0U2FmZUNhbGwodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSksdGhpcy52aXNpdEFsbCh0LmFyZ3MsZSl9dmlzaXRBbGwodCxlKXtmb3IobGV0IGkgb2YgdCl0aGlzLnZpc2l0KGksZSl9fSxfTD1jbGFzc3t2aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdFRoaXNSZWNlaXZlcih0LGUpe3JldHVybiB0fXZpc2l0SW50ZXJwb2xhdGlvbih0LGUpe3JldHVybiBuZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7cmV0dXJuIG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQudmFsdWUpfXZpc2l0UHJvcGVydHlSZWFkKHQsZSl7cmV0dXJuIG5ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sdC5yZWNlaXZlci52aXNpdCh0aGlzKSx0Lm5hbWUpfXZpc2l0UHJvcGVydHlXcml0ZSh0LGUpe3JldHVybiBuZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0U2FmZVByb3BlcnR5UmVhZCh0LGUpe3JldHVybiBuZXcgYngodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgTzAodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpKX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IEN4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5rZXlzLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpKX12aXNpdFVuYXJ5KHQsZSl7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHIudmlzaXQodGhpcykpO2Nhc2UiLSI6cmV0dXJuIGNjLmNyZWF0ZU1pbnVzKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5leHByLnZpc2l0KHRoaXMpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biB1bmFyeSBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9fXZpc2l0QmluYXJ5KHQsZSl7cmV0dXJuIG5ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLHQubGVmdC52aXNpdCh0aGlzKSx0LnJpZ2h0LnZpc2l0KHRoaXMpKX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBuZXcgd3godC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBuZXcgTXgodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Q29uZGl0aW9uYWwodCxlKXtyZXR1cm4gbmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5jb25kaXRpb24udmlzaXQodGhpcyksdC50cnVlRXhwLnZpc2l0KHRoaXMpLHQuZmFsc2VFeHAudmlzaXQodGhpcykpfXZpc2l0UGlwZSh0LGUpe3JldHVybiBuZXcgUjAodC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cC52aXNpdCh0aGlzKSx0Lm5hbWUsdGhpcy52aXNpdEFsbCh0LmFyZ3MpLHQubmFtZVNwYW4pfXZpc2l0S2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBJMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfXZpc2l0S2V5ZWRXcml0ZSh0LGUpe3JldHVybiBuZXcgeHgodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHQua2V5LnZpc2l0KHRoaXMpLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0Q2FsbCh0LGUpe3JldHVybiBuZXcgYnAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRTYWZlQ2FsbCh0LGUpe3JldHVybiBuZXcgazAodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRBbGwodCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT10W2ldLnZpc2l0KHRoaXMpO3JldHVybiBlfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gbmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBQMCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfX0sdkw9Y2xhc3N7dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIHR9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdEludGVycG9sYXRpb24odCxlKXtsZXQgaT10aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpO3JldHVybiBpIT09dC5leHByZXNzaW9ucz9uZXcgWm8odC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsaSk6dH12aXNpdExpdGVyYWxQcmltaXRpdmUodCxlKXtyZXR1cm4gdH12aXNpdFByb3BlcnR5UmVhZCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyP25ldyBvdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4saSx0Lm5hbWUpOnR9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKSxyPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC52YWx1ZT9uZXcgeXgodC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLGksdC5uYW1lLHIpOnR9dmlzaXRTYWZlUHJvcGVydHlSZWFkKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQucmVjZWl2ZXI/bmV3IGJ4KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixpLHQubmFtZSk6dH12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyk7cmV0dXJuIGkhPT10LmV4cHJlc3Npb25zP25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpOnR9dmlzaXRMaXRlcmFsTWFwKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LnZhbHVlcyk7cmV0dXJuIGkhPT10LnZhbHVlcz9uZXcgQ3godC5zcGFuLHQuc291cmNlU3Bhbix0LmtleXMsaSk6dH12aXNpdFVuYXJ5KHQsZSl7bGV0IGk9dC5leHByLnZpc2l0KHRoaXMpO2lmKGkhPT10LmV4cHIpc3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIGNjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3BhbixpKTtjYXNlIi0iOnJldHVybiBjYy5jcmVhdGVNaW51cyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHVuYXJ5IG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdH12aXNpdEJpbmFyeSh0LGUpe2xldCBpPXQubGVmdC52aXNpdCh0aGlzKSxyPXQucmlnaHQudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmxlZnR8fHIhPT10LnJpZ2h0P25ldyBobCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLGkscik6dH12aXNpdFByZWZpeE5vdCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgd3godC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgTXgodC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Q29uZGl0aW9uYWwodCxlKXtsZXQgaT10LmNvbmRpdGlvbi52aXNpdCh0aGlzKSxyPXQudHJ1ZUV4cC52aXNpdCh0aGlzKSxvPXQuZmFsc2VFeHAudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmNvbmRpdGlvbnx8ciE9PXQudHJ1ZUV4cHx8byE9PXQuZmFsc2VFeHA/bmV3IHZ4KHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyLG8pOnR9dmlzaXRQaXBlKHQsZSl7bGV0IGk9dC5leHAudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LmV4cHx8ciE9PXQuYXJncz9uZXcgUjAodC5zcGFuLHQuc291cmNlU3BhbixpLHQubmFtZSxyLHQubmFtZVNwYW4pOnR9dmlzaXRLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IEkwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fXZpc2l0S2V5ZWRXcml0ZSh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10LmtleS52aXNpdCh0aGlzKSxvPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXl8fG8hPT10LnZhbHVlP25ldyB4eCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscixvKTp0fXZpc2l0QWxsKHQpe2xldCBlPVtdLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3Ipe2xldCBvPXRbcl0scz1vLnZpc2l0KHRoaXMpO2Vbcl09cyxpPWl8fHMhPT1vfXJldHVybiBpP2U6dH12aXNpdENoYWluKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbnM/bmV3IF94KHQuc3Bhbix0LnNvdXJjZVNwYW4saSk6dH12aXNpdENhbGwodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MpO3JldHVybiBpIT09dC5yZWNlaXZlcnx8ciE9PXQuYXJncz9uZXcgYnAodC5zcGFuLHQuc291cmNlU3BhbixpLHIsdC5hcmd1bWVudFNwYW4pOnR9dmlzaXRTYWZlQ2FsbCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5hcmdzP25ldyBrMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscix0LmFyZ3VtZW50U3Bhbik6dH12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IFAwKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fX0sUWI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3RoaXMubmFtZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMudHlwZT1pLHRoaXMuc291cmNlU3Bhbj1yLHRoaXMua2V5U3Bhbj1vLHRoaXMudmFsdWVTcGFuPXMsdGhpcy5pc0xpdGVyYWw9dGhpcy50eXBlPT09Z3AuTElURVJBTF9BVFRSLHRoaXMuaXNBbmltYXRpb249dGhpcy50eXBlPT09Z3AuQU5JTUFUSU9OfX0sZ3A9KCgpPT57cmV0dXJuKG49Z3B8fChncD17fSkpW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkxJVEVSQUxfQVRUUj0xXT0iTElURVJBTF9BVFRSIixuW24uQU5JTUFUSU9OPTJdPSJBTklNQVRJT04iLGdwO3ZhciBufSkoKSxQMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLm5hbWU9dCx0aGlzLnRhcmdldE9yUGhhc2U9ZSx0aGlzLnR5cGU9aSx0aGlzLmhhbmRsZXI9cix0aGlzLnNvdXJjZVNwYW49byx0aGlzLmhhbmRsZXJTcGFuPXMsdGhpcy5rZXlTcGFuPWF9fSx5TD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vfX0sUjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlY3VyaXR5Q29udGV4dD1pLHRoaXMudmFsdWU9cix0aGlzLnVuaXQ9byx0aGlzLnNvdXJjZVNwYW49cyx0aGlzLmtleVNwYW49YSx0aGlzLnZhbHVlU3Bhbj1sfX0sRXg9Y2xhc3N7fTtmdW5jdGlvbiAkdmUobix0LGUsaSxyLG8scyl7bnx8KG49bmV3IE8xKHMpKTtsZXQgYT1mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBDTChuKTtyZXR1cm4gdC52aXNpdChlKX0obix0KX0oe2NyZWF0ZUxpdGVyYWxBcnJheUNvbnZlcnRlcjpkPT5wPT5jcihwKSxjcmVhdGVMaXRlcmFsTWFwQ29udmVydGVyOmQ9PnA9Pm1sKGQubWFwKChmLG0pPT4oe2tleTpmLmtleSx2YWx1ZTpwW21dLHF1b3RlZDpmLnF1b3RlZH0pKSksY3JlYXRlUGlwZUNvbnZlcnRlcjpkPT57dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIFN0YXRlOiBBY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBpcGVzLiBQaXBlOiAke2R9YCl9fSxlKSxsPW5ldyBUeChuLHQsaSwhMSxyLG8pLGM9W107UXEoYS52aXNpdChsLEJpLlN0YXRlbWVudCksYyksZnVuY3Rpb24obix0LGUpe2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pZS51bnNoaWZ0KFhxKHQsaSkpfShsLnRlbXBvcmFyeUNvdW50LGksYyksbC51c2VzSW1wbGljaXRSZWNlaXZlciYmbi5ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCk7bGV0IHU9Yy5sZW5ndGgtMTtpZih1Pj0wKXtsZXQgZD1jW3VdO2QgaW5zdGFuY2VvZiBsdSYmKGNbdV09bmV3IHVvKGQuZXhwcikpfXJldHVybiBjfWZ1bmN0aW9uIHFxKG4sdCxlLGkpe258fChuPW5ldyBPMSk7bGV0IHI9bmV3IFR4KG4sdCxpLCExKSxvPWUudmlzaXQocixCaS5FeHByZXNzaW9uKSxzPVlxKHIsaSk7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RtdHM9dCx0aGlzLmN1cnJWYWxFeHByPWV9fShzLG8pfWZ1bmN0aW9uIFlxKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuLnRlbXBvcmFyeUNvdW50O2krKyllLnB1c2goWHEodCxpKSk7cmV0dXJuIGV9ZnVuY3Rpb24geEwobix0KXtyZXR1cm5gdG1wXyR7bn1fJHt0fWB9ZnVuY3Rpb24gWHEobix0KXtyZXR1cm4gbmV3IGF1KHhMKG4sdCkpfUV4LmV2ZW50PU1pKCIkZXZlbnQiKTt2YXIgQmk9KCgpPT57cmV0dXJuKG49Qml8fChCaT17fSkpW24uU3RhdGVtZW50PTBdPSJTdGF0ZW1lbnQiLG5bbi5FeHByZXNzaW9uPTFdPSJFeHByZXNzaW9uIixCaTt2YXIgbn0pKCk7ZnVuY3Rpb24gRTkobix0KXtpZihuIT09QmkuRXhwcmVzc2lvbil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGV4cHJlc3Npb24sIGJ1dCBzYXcgJHt0fWApfWZ1bmN0aW9uIERzKG4sdCl7cmV0dXJuIG49PT1CaS5TdGF0ZW1lbnQ/dC50b1N0bXQoKTp0fXZhciBDTD1jbGFzcyBleHRlbmRzIF9Me2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29udmVydGVyRmFjdG9yeT10fXZpc2l0UGlwZSh0LGUpe2xldCBpPVt0LmV4cCwuLi50LmFyZ3NdLm1hcChyPT5yLnZpc2l0KHRoaXMsZSkpO3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3BhbixpLHRoaXMuX2NvbnZlcnRlckZhY3RvcnkuY3JlYXRlUGlwZUNvbnZlcnRlcih0Lm5hbWUsaS5sZW5ndGgpKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbnMubWFwKHI9PnIudmlzaXQodGhpcyxlKSk7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLGksdGhpcy5fY29udmVydGVyRmFjdG9yeS5jcmVhdGVMaXRlcmFsQXJyYXlDb252ZXJ0ZXIodC5leHByZXNzaW9ucy5sZW5ndGgpKX12aXNpdExpdGVyYWxNYXAodCxlKXtsZXQgaT10LnZhbHVlcy5tYXAocj0+ci52aXNpdCh0aGlzLGUpKTtyZXR1cm4gbmV3IF9wKHQuc3Bhbix0LnNvdXJjZVNwYW4saSx0aGlzLl9jb252ZXJ0ZXJGYWN0b3J5LmNyZWF0ZUxpdGVyYWxNYXBDb252ZXJ0ZXIodC5rZXlzKSl9fSxUeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5fbG9jYWxSZXNvbHZlcj10LHRoaXMuX2ltcGxpY2l0UmVjZWl2ZXI9ZSx0aGlzLmJpbmRpbmdJZD1pLHRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uPXIsdGhpcy5iYXNlU291cmNlU3Bhbj1vLHRoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzPXMsdGhpcy5fbm9kZU1hcD1uZXcgTWFwLHRoaXMuX3Jlc3VsdE1hcD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRUZW1wb3Jhcnk9MCx0aGlzLnRlbXBvcmFyeUNvdW50PTAsdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMX12aXNpdFVuYXJ5KHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6aT1wZi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1wZi5NaW51czticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiBEcyhlLG5ldyBveChpLHRoaXMuX3Zpc2l0KHQuZXhwcixCaS5FeHByZXNzaW9uKSx2b2lkIDAsdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRCaW5hcnkodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRpb24pe2Nhc2UiKyI6aT1obi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1obi5NaW51czticmVhaztjYXNlIioiOmk9aG4uTXVsdGlwbHk7YnJlYWs7Y2FzZSIvIjppPWhuLkRpdmlkZTticmVhaztjYXNlIiUiOmk9aG4uTW9kdWxvO2JyZWFrO2Nhc2UiJiYiOmk9aG4uQW5kO2JyZWFrO2Nhc2UifHwiOmk9aG4uT3I7YnJlYWs7Y2FzZSI9PSI6aT1obi5FcXVhbHM7YnJlYWs7Y2FzZSIhPSI6aT1obi5Ob3RFcXVhbHM7YnJlYWs7Y2FzZSI9PT0iOmk9aG4uSWRlbnRpY2FsO2JyZWFrO2Nhc2UiIT09IjppPWhuLk5vdElkZW50aWNhbDticmVhaztjYXNlIjwiOmk9aG4uTG93ZXI7YnJlYWs7Y2FzZSI+IjppPWhuLkJpZ2dlcjticmVhaztjYXNlIjw9IjppPWhuLkxvd2VyRXF1YWxzO2JyZWFrO2Nhc2UiPj0iOmk9aG4uQmlnZ2VyRXF1YWxzO2JyZWFrO2Nhc2UiPz8iOnJldHVybiB0aGlzLmNvbnZlcnROdWxsaXNoQ29hbGVzY2UodCxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uICR7dC5vcGVyYXRpb259YCl9cmV0dXJuIERzKGUsbmV3IGxyKGksdGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQucmlnaHQsQmkuRXhwcmVzc2lvbiksdm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZihuIT09QmkuU3RhdGVtZW50KXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQsIGJ1dCBzYXcgJHt0fWApfShlLHQpLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7cmV0dXJuIERzKGUsdGhpcy5fdmlzaXQodC5jb25kaXRpb24sQmkuRXhwcmVzc2lvbikuY29uZGl0aW9uYWwodGhpcy5fdmlzaXQodC50cnVlRXhwLEJpLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQuZmFsc2VFeHAsQmkuRXhwcmVzc2lvbiksdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRQaXBlKHQsZSl7dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIHN0YXRlOiBQaXBlcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucy4gUGlwZTogJHt0Lm5hbWV9YCl9dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIEU5KGUsdCksdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyfXZpc2l0VGhpc1JlY2VpdmVyKHQsZSl7cmV0dXJuIHRoaXMudmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7aWYoIXRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIik7RTkoZSx0KTtsZXQgaT1bXTtmb3IobGV0IG89MDtvPHQuc3RyaW5ncy5sZW5ndGgtMTtvKyspaS5wdXNoKG50KHQuc3RyaW5nc1tvXSkpLGkucHVzaCh0aGlzLl92aXNpdCh0LmV4cHJlc3Npb25zW29dLEJpLkV4cHJlc3Npb24pKTtpLnB1c2gobnQodC5zdHJpbmdzW3Quc3RyaW5ncy5sZW5ndGgtMV0pKTtsZXQgcj10LnN0cmluZ3M7cmV0dXJuIDI9PT1yLmxlbmd0aCYmIiI9PT1yWzBdJiYiIj09PXJbMV0/aT1baVsxXV06dC5leHByZXNzaW9ucy5sZW5ndGg+PTkmJihpPVtjcihpKV0pLG5ldyB3TChpKX12aXNpdEtleWVkUmVhZCh0LGUpe2xldCBpPXRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KTtyZXR1cm4gaT90aGlzLmNvbnZlcnRTYWZlQWNjZXNzKHQsaSxlKTpEcyhlLHRoaXMuX3Zpc2l0KHQucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbikua2V5KHRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pKSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKSxyPXRoaXMuX3Zpc2l0KHQua2V5LEJpLkV4cHJlc3Npb24pLG89dGhpcy5fdmlzaXQodC52YWx1ZSxCaS5FeHByZXNzaW9uKTtyZXR1cm4gaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJnRoaXMuX2xvY2FsUmVzb2x2ZXIubWF5YmVSZXN0b3JlVmlldygpLERzKGUsaS5rZXkocikuc2V0KG8pKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogbGl0ZXJhbCBhcnJheXMgc2hvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBmdW5jdGlvbnMiKX12aXNpdExpdGVyYWxNYXAodCxlKXt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGxpdGVyYWwgbWFwcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucyIpfXZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0LGUpe3JldHVybiBEcyhlLG50KHQudmFsdWUsbnVsbD09dC52YWx1ZXx8ITA9PT10LnZhbHVlfHwhMD09PXQudmFsdWU/aWE6dm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfV9nZXRMb2NhbCh0LGUpe3JldHVybiB0aGlzLl9sb2NhbFJlc29sdmVyLmdsb2JhbHM/Lmhhcyh0KSYmZSBpbnN0YW5jZW9mIGd4P251bGw6dGhpcy5fbG9jYWxSZXNvbHZlci5nZXRMb2NhbCh0KX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBEcyhlLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyByeChuLHZvaWQgMCl9KHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSkpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBEcyhlLHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbixCaS5FeHByZXNzaW9uKSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7e2xldCByPW51bGwsbz10aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyLHM9dGhpcy5fdmlzaXQodC5yZWNlaXZlcixCaS5FeHByZXNzaW9uKTtyZXR1cm4gcz09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJihyPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKSxyJiYodGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj1vLHRoaXMuYWRkSW1wbGljaXRSZWNlaXZlckFjY2Vzcyh0Lm5hbWUpKSksbnVsbD09ciYmKHI9cy5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLHIpfX12aXNpdFByb3BlcnR5V3JpdGUodCxlKXtsZXQgaT10aGlzLl92aXNpdCh0LnJlY2VpdmVyLEJpLkV4cHJlc3Npb24pLHI9dGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcixvPW51bGw7aWYoaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXIpe2xldCBzPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKTtpZihzKXtpZighKHMgaW5zdGFuY2VvZiBiMCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXNzaWduIHZhbHVlICIke3QudmFsdWUgaW5zdGFuY2VvZiBvdT90LnZhbHVlLm5hbWU6dm9pZCAwfSIgdG8gdGVtcGxhdGUgdmFyaWFibGUgIiR7dC5uYW1lfSIuIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LmApO289cyx0aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyPXIsdGhpcy5hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQubmFtZSl9fXJldHVybiBudWxsPT09byYmKG89aS5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSxEcyhlLG8uc2V0KHRoaXMuX3Zpc2l0KHQudmFsdWUsQmkuRXhwcmVzc2lvbikpKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdEFsbCh0LGUpe3JldHVybiB0Lm1hcChpPT50aGlzLl92aXNpdChpLGUpKX12aXNpdENhbGwodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7bGV0IHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MsQmkuRXhwcmVzc2lvbik7aWYodCBpbnN0YW5jZW9mIF9wKXJldHVybiBEcyhlLHQuY29udmVydGVyKHIpKTtsZXQgbz10LnJlY2VpdmVyO2lmKG8gaW5zdGFuY2VvZiBvdSYmby5yZWNlaXZlciBpbnN0YW5jZW9mIEVmJiYhKG8ucmVjZWl2ZXIgaW5zdGFuY2VvZiBneCkmJiIkYW55Ij09PW8ubmFtZSl7aWYoMSE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYWxsIHRvICRhbnksIGV4cGVjdGVkIDEgYXJndW1lbnQgYnV0IHJlY2VpdmVkICR7ci5sZW5ndGh8fCJub25lIn1gKTtyZXR1cm4gRHMoZSxyWzBdKX1yZXR1cm4gRHMoZSx0aGlzLl92aXNpdChvLEJpLkV4cHJlc3Npb24pLmNhbGxGbihyLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0U2FmZUNhbGwodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX1fdmlzaXQodCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0TWFwLmdldCh0KXx8KHRoaXMuX25vZGVNYXAuZ2V0KHQpfHx0KS52aXNpdCh0aGlzLGUpfWNvbnZlcnRTYWZlQWNjZXNzKHQsZSxpKXtsZXQgbyxyPXRoaXMuX3Zpc2l0KGUucmVjZWl2ZXIsQmkuRXhwcmVzc2lvbik7dGhpcy5uZWVkc1RlbXBvcmFyeUluU2FmZUFjY2VzcyhlLnJlY2VpdmVyKSYmKG89dGhpcy5hbGxvY2F0ZVRlbXBvcmFyeSgpLHI9by5zZXQociksdGhpcy5fcmVzdWx0TWFwLnNldChlLnJlY2VpdmVyLG8pKTtsZXQgcz1yLmlzQmxhbmsoKTt0aGlzLl9ub2RlTWFwLnNldChlLGUgaW5zdGFuY2VvZiBrMD9uZXcgYnAoZS5zcGFuLGUuc291cmNlU3BhbixlLnJlY2VpdmVyLGUuYXJncyxlLmFyZ3VtZW50U3Bhbik6ZSBpbnN0YW5jZW9mIFAwP25ldyBJMChlLnNwYW4sZS5zb3VyY2VTcGFuLGUucmVjZWl2ZXIsZS5rZXkpOm5ldyBvdShlLnNwYW4sZS5zb3VyY2VTcGFuLGUubmFtZVNwYW4sZS5yZWNlaXZlcixlLm5hbWUpKTtsZXQgYT10aGlzLl92aXNpdCh0LEJpLkV4cHJlc3Npb24pO3JldHVybiB0aGlzLl9ub2RlTWFwLmRlbGV0ZShlKSxvJiZ0aGlzLnJlbGVhc2VUZW1wb3JhcnkobyksRHMoaSxzLmNvbmRpdGlvbmFsKEtOLGEpKX1jb252ZXJ0TnVsbGlzaENvYWxlc2NlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5sZWZ0LEJpLkV4cHJlc3Npb24pLHI9dGhpcy5fdmlzaXQodC5yaWdodCxCaS5FeHByZXNzaW9uKSxvPXRoaXMuYWxsb2NhdGVUZW1wb3JhcnkoKTtyZXR1cm4gdGhpcy5yZWxlYXNlVGVtcG9yYXJ5KG8pLERzKGUsby5zZXQoaSkubm90SWRlbnRpY2FsKEtOKS5hbmQoby5ub3RJZGVudGljYWwobnQodm9pZCAwKSkpLmNvbmRpdGlvbmFsKG8scikpfWxlZnRNb3N0U2FmZU5vZGUodCl7bGV0IGU9KGkscik9Pih0aGlzLl9ub2RlTWFwLmdldChyKXx8cikudmlzaXQoaSk7cmV0dXJuIHQudmlzaXQoe3Zpc2l0VW5hcnk6aT0+bnVsbCx2aXNpdEJpbmFyeTppPT5udWxsLHZpc2l0Q2hhaW46aT0+bnVsbCx2aXNpdENvbmRpdGlvbmFsOmk9Pm51bGwsdmlzaXRDYWxsKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil9LHZpc2l0U2FmZUNhbGwoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKXx8aX0sdmlzaXRJbXBsaWNpdFJlY2VpdmVyOmk9Pm51bGwsdmlzaXRUaGlzUmVjZWl2ZXI6aT0+bnVsbCx2aXNpdEludGVycG9sYXRpb246aT0+bnVsbCx2aXNpdEtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfSx2aXNpdEtleWVkV3JpdGU6aT0+bnVsbCx2aXNpdExpdGVyYWxBcnJheTppPT5udWxsLHZpc2l0TGl0ZXJhbE1hcDppPT5udWxsLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTppPT5udWxsLHZpc2l0UGlwZTppPT5udWxsLHZpc2l0UHJlZml4Tm90Omk9Pm51bGwsdmlzaXROb25OdWxsQXNzZXJ0Omk9Pm51bGwsdmlzaXRQcm9wZXJ0eVJlYWQoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKX0sdmlzaXRQcm9wZXJ0eVdyaXRlOmk9Pm51bGwsdmlzaXRTYWZlUHJvcGVydHlSZWFkKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil8fGl9LHZpc2l0U2FmZUtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfHxpfX0pfW5lZWRzVGVtcG9yYXJ5SW5TYWZlQWNjZXNzKHQpe2xldCBlPShyLG8pPT5vJiYodGhpcy5fbm9kZU1hcC5nZXQobyl8fG8pLnZpc2l0KHIpO3JldHVybiB0LnZpc2l0KHt2aXNpdFVuYXJ5KHIpe3JldHVybiBlKHRoaXMsci5leHByKX0sdmlzaXRCaW5hcnkocil7cmV0dXJuIGUodGhpcyxyLmxlZnQpfHxlKHRoaXMsci5yaWdodCl9LHZpc2l0Q2hhaW46cj0+ITEsdmlzaXRDb25kaXRpb25hbChyKXtyZXR1cm4gZSh0aGlzLHIuY29uZGl0aW9uKXx8ZSh0aGlzLHIudHJ1ZUV4cCl8fGUodGhpcyxyLmZhbHNlRXhwKX0sdmlzaXRDYWxsOnI9PiEwLHZpc2l0U2FmZUNhbGw6cj0+ITAsdmlzaXRJbXBsaWNpdFJlY2VpdmVyOnI9PiExLHZpc2l0VGhpc1JlY2VpdmVyOnI9PiExLHZpc2l0SW50ZXJwb2xhdGlvbihyKXtyZXR1cm4oKHIsbyk9Pm8uc29tZShzPT5lKHIscykpKSh0aGlzLHIuZXhwcmVzc2lvbnMpfSx2aXNpdEtleWVkUmVhZDpyPT4hMSx2aXNpdEtleWVkV3JpdGU6cj0+ITEsdmlzaXRMaXRlcmFsQXJyYXk6cj0+ITAsdmlzaXRMaXRlcmFsTWFwOnI9PiEwLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTpyPT4hMSx2aXNpdFBpcGU6cj0+ITAsdmlzaXRQcmVmaXhOb3Qocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdE5vbk51bGxBc3NlcnQocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdFByb3BlcnR5UmVhZDpyPT4hMSx2aXNpdFByb3BlcnR5V3JpdGU6cj0+ITEsdmlzaXRTYWZlUHJvcGVydHlSZWFkOnI9PiExLHZpc2l0U2FmZUtleWVkUmVhZDpyPT4hMX0pfWFsbG9jYXRlVGVtcG9yYXJ5KCl7bGV0IHQ9dGhpcy5fY3VycmVudFRlbXBvcmFyeSsrO3JldHVybiB0aGlzLnRlbXBvcmFyeUNvdW50PU1hdGgubWF4KHRoaXMuX2N1cnJlbnRUZW1wb3JhcnksdGhpcy50ZW1wb3JhcnlDb3VudCksbmV3IG1mKHhMKHRoaXMuYmluZGluZ0lkLHQpKX1yZWxlYXNlVGVtcG9yYXJ5KHQpe2lmKHRoaXMuX2N1cnJlbnRUZW1wb3JhcnktLSx0Lm5hbWUhPXhMKHRoaXMuYmluZGluZ0lkLHRoaXMuX2N1cnJlbnRUZW1wb3JhcnkpKXRocm93IG5ldyBFcnJvcihgVGVtcG9yYXJ5ICR7dC5uYW1lfSByZWxlYXNlZCBvdXQgb2Ygb3JkZXJgKX1jb252ZXJ0U291cmNlU3Bhbih0KXtpZih0aGlzLmJhc2VTb3VyY2VTcGFuKXtsZXQgZT10aGlzLmJhc2VTb3VyY2VTcGFuLnN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KSxpPXRoaXMuYmFzZVNvdXJjZVNwYW4uc3RhcnQubW92ZUJ5KHQuZW5kKSxyPXRoaXMuYmFzZVNvdXJjZVNwYW4uZnVsbFN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KTtyZXR1cm4gbmV3IFRvKGUsaSxyKX1yZXR1cm4gbnVsbH1hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQpe3RoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzJiZ0aGlzLmltcGxpY2l0UmVjZWl2ZXJBY2Nlc3Nlcy5hZGQodCl9fTtmdW5jdGlvbiBRcShuLHQpe0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKGU9PlFxKGUsdCkpOnQucHVzaChuKX1mdW5jdGlvbiBUTigpe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uIil9dmFyIHdMPWNsYXNzIGV4dGVuZHMgQ3J7Y29uc3RydWN0b3IodCl7c3VwZXIobnVsbCxudWxsKSx0aGlzLmFyZ3M9dCx0aGlzLmlzQ29uc3RhbnQ9VE4sdGhpcy5pc0VxdWl2YWxlbnQ9VE4sdGhpcy52aXNpdEV4cHJlc3Npb249VE59fSxPMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbHM9dH1ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCl7fW1heWJlUmVzdG9yZVZpZXcoKXt9Z2V0TG9jYWwodCl7cmV0dXJuIHQ9PT1FeC5ldmVudC5uYW1lP0V4LmV2ZW50Om51bGx9fSxfcD1jbGFzcyBleHRlbmRzIGJwe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxuZXcgbmEodCxlKSxpLG51bGwpLHRoaXMuY29udmVydGVyPXJ9fSxveWU9L3BvbHlmaWxsLW5leHQtc2VsZWN0b3JbXn1dKmNvbnRlbnQ6W1xzXSo/KFsnIl0pKC4qPylcMVs7XHNdKn0oW157XSo/KXsvZ2ltLHN5ZT0vKHBvbHlmaWxsLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxUOT0vKHBvbHlmaWxsLXVuc2NvcGVkLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxrMT0iLXNoYWRvd2Nzc2hvc3QiLGczPSItc2hhZG93Y3NzY29udGV4dCIsXzM9Iig/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSk/KFteLHtdKikiLGF5ZT1uZXcgUmVnRXhwKGsxK18zLCJnaW0iKSxseWU9bmV3IFJlZ0V4cChnMytfMywiZ2ltIiksY3llPW5ldyBSZWdFeHAoZzMrXzMsImltIiksc2Y9azErIi1uby1jb21iaW5hdG9yIixEOT0vLXNoYWRvd2Nzc2hvc3Qtbm8tY29tYmluYXRvcihbXlxzXSopLyx1eWU9Wy86OnNoYWRvdy9nLC86OmNvbnRlbnQvZywvXC9zaGFkb3ctZGVlcFwvL2csL1wvc2hhZG93XC8vZ10sQTk9Lyg/Oj4+Pil8KD86XC9kZWVwXC8pfCg/Ojo6bmctZGVlcCkvZyxkMD0vLXNoYWRvd2Nzc2hvc3QvZ2ltLHB5ZT0vOmhvc3QvZ2ltLGh5ZT0vOmhvc3QtY29udGV4dC9naW0sZnllPS9cL1wqW1xzXFNdKj9cKlwvL2csZ3llPS9cL1wqXHMqI1xzKnNvdXJjZShNYXBwaW5nKT9VUkw9W1xzXFNdKz9cKlwvL2csRE49IiVCTE9DSyUiLHl5ZT0vKFxzKikoW147XHtcfV0rPykoXHMqKSgoPzp7JUJMT0NLJX0/XHMqOz8pfCg/OlxzKjspKS9nLGJ5ZT0vJVFVT1RFRCUvZyx4eWU9bmV3IE1hcChbWyJ7IiwifSJdXSksQ3llPW5ldyBNYXAoW1snIicsJyInXSxbIiciLCInIl1dKSxEeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc2VsZWN0b3I9dCx0aGlzLmNvbnRlbnQ9ZX19O2Z1bmN0aW9uIEk5KG4sdCl7bGV0IGU9UDkobixDeWUsIiVRVU9URUQlIiksaT1QOShlLmVzY2FwZWRTdHJpbmcseHllLEROKSxyPTAsbz0wO3JldHVybiBpLmVzY2FwZWRTdHJpbmcucmVwbGFjZSh5eWUsKC4uLnMpPT57bGV0IGE9c1syXSxsPSIiLGM9c1s0XSx1PSIiO2MmJmMuc3RhcnRzV2l0aCgieyIrRE4pJiYobD1pLmJsb2Nrc1tyKytdLGM9Yy5zdWJzdHJpbmcoRE4ubGVuZ3RoKzEpLHU9InsiKTtsZXQgZD10KG5ldyBEeChhLGwpKTtyZXR1cm5gJHtzWzFdfSR7ZC5zZWxlY3Rvcn0ke3NbM119JHt1fSR7ZC5jb250ZW50fSR7Y31gfSkucmVwbGFjZShieWUsKCk9PmUuYmxvY2tzW28rK10pfWZ1bmN0aW9uIFA5KG4sdCxlKXtsZXQgbCxjLGk9W10scj1bXSxvPTAscz0wLGE9LTE7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kyspe2xldCBkPW5bdV07IlxcIj09PWQ/dSsrOmQ9PT1jPyhvLS0sMD09PW8mJihyLnB1c2gobi5zdWJzdHJpbmcoYSx1KSksaS5wdXNoKGUpLHM9dSxhPS0xLGw9Yz12b2lkIDApKTpkPT09bD9vKys6MD09PW8mJnQuaGFzKGQpJiYobD1kLGM9dC5nZXQoZCksbz0xLGE9dSsxLGkucHVzaChuLnN1YnN0cmluZyhzLGEpKSl9cmV0dXJuLTEhPT1hPyhyLnB1c2gobi5zdWJzdHJpbmcoYSkpLGkucHVzaChlKSk6aS5wdXNoKG4uc3Vic3RyaW5nKHMpKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmVzY2FwZWRTdHJpbmc9dCx0aGlzLmJsb2Nrcz1lfX0oaS5qb2luKCIiKSxyKX1mdW5jdGlvbiBNeWUobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IobGV0IGk9MTtpPHQ7aSsrKWZvcihsZXQgcj0wO3I8ZTtyKyspbltyK2kqZV09bltyXS5zbGljZSgwKX1mdW5jdGlvbiBSOShuKXtsZXQgdD1uLmNoYXJDb2RlQXQoMCk7aWYodD09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoMzk9PXR8fDM0PT10KSl7bGV0IGk9bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKTstMT09aS5pbmRleE9mKCInIikmJi0xPT1pLmluZGV4T2YoJyInKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gS3Eobil7cmV0dXJuIG4ucmVwbGFjZSgvW2Etel1bQS1aXS9nLHQ9PnQuY2hhckF0KDApKyItIit0LmNoYXJBdCgxKSkudG9Mb3dlckNhc2UoKX12YXIgTjE9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZGlyZWN0aXZlRXhwcj10LHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITEsdGhpcy5oYXNCaW5kaW5ncz0hMSx0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSExLHRoaXMuX2NsYXNzTWFwSW5wdXQ9bnVsbCx0aGlzLl9zdHlsZU1hcElucHV0PW51bGwsdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9bnVsbCx0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz1udWxsLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9bnVsbCx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD1udWxsLHRoaXMuX3N0eWxlc0luZGV4PW5ldyBNYXAsdGhpcy5fY2xhc3Nlc0luZGV4PW5ldyBNYXAsdGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzPVtdLHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz1bXX1yZWdpc3RlckJvdW5kSW5wdXQodCl7bGV0IGU9bnVsbCxpPXQubmFtZTtzd2l0Y2godC50eXBlKXtjYXNlIDA6ZT10aGlzLnJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZShpLHQudmFsdWUsdC5zb3VyY2VTcGFuKTticmVhaztjYXNlIDM6ZT10aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChpLCExLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudW5pdCk7YnJlYWs7Y2FzZSAyOmU9dGhpcy5yZWdpc3RlckNsYXNzSW5wdXQoaSwhMSx0LnZhbHVlLHQuc291cmNlU3Bhbil9cmV0dXJuISFlfXJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZSh0LGUsaSl7bGV0IHI9bnVsbCxvPXQuc3Vic3RyaW5nKDAsNikscz0ic3R5bGUiPT09dHx8InN0eWxlLiI9PT1vfHwic3R5bGUhIj09PW87aWYoc3x8IXMmJigiY2xhc3MiPT09dHx8ImNsYXNzLiI9PT1vfHwiY2xhc3MhIj09PW8pKXtsZXQgbD0iLiIhPT10LmNoYXJBdCg1KSxjPXQuc2xpY2UobD81OjYpO3I9cz90aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChjLGwsZSxpKTp0aGlzLnJlZ2lzdGVyQ2xhc3NJbnB1dChjLGwsZSxpKX1yZXR1cm4gcn1yZWdpc3RlclN0eWxlSW5wdXQodCxlLGkscixvKXtpZihGOShpKSlyZXR1cm4gbnVsbDt0LnN0YXJ0c1dpdGgoIi0tIil8fCh0PUtxKHQpKTtsZXR7cHJvcGVydHk6cyxoYXNPdmVycmlkZUZsYWc6YSxzdWZmaXg6bH09azkodCksYz17bmFtZTpzLHN1ZmZpeDpvPSJzdHJpbmciPT10eXBlb2YgbyYmMCE9PW8ubGVuZ3RoP286bCx2YWx1ZTppLHNvdXJjZVNwYW46cixoYXNPdmVycmlkZUZsYWc6YX07cmV0dXJuIGU/dGhpcy5fc3R5bGVNYXBJbnB1dD1jOigodGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9dGhpcy5fc2luZ2xlU3R5bGVJbnB1dHN8fFtdKS5wdXNoKGMpLE85KHRoaXMuX3N0eWxlc0luZGV4LHMpKSx0aGlzLl9sYXN0U3R5bGluZ0lucHV0PWMsdGhpcy5fZmlyc3RTdHlsaW5nSW5wdXQ9dGhpcy5fZmlyc3RTdHlsaW5nSW5wdXR8fGMsdGhpcy5fY2hlY2tGb3JQaXBlcyhpKSx0aGlzLmhhc0JpbmRpbmdzPSEwLGN9cmVnaXN0ZXJDbGFzc0lucHV0KHQsZSxpLHIpe2lmKEY5KGkpKXJldHVybiBudWxsO2xldHtwcm9wZXJ0eTpvLGhhc092ZXJyaWRlRmxhZzpzfT1rOSh0KSxhPXtuYW1lOm8sdmFsdWU6aSxzb3VyY2VTcGFuOnIsaGFzT3ZlcnJpZGVGbGFnOnMsc3VmZml4Om51bGx9O3JldHVybiBlP3RoaXMuX2NsYXNzTWFwSW5wdXQ9YTooKHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzPXRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzfHxbXSkucHVzaChhKSxPOSh0aGlzLl9jbGFzc2VzSW5kZXgsbykpLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9YSx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD10aGlzLl9maXJzdFN0eWxpbmdJbnB1dHx8YSx0aGlzLl9jaGVja0ZvclBpcGVzKGkpLHRoaXMuaGFzQmluZGluZ3M9ITAsYX1fY2hlY2tGb3JQaXBlcyh0KXt0IGluc3RhbmNlb2YgZXUmJnQuYXN0IGluc3RhbmNlb2YgUjAmJih0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSEwKX1yZWdpc3RlclN0eWxlQXR0cih0KXt0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXM9ZnVuY3Rpb24obil7bGV0IHQ9W10sZT0wLGk9MCxyPTAsbz0wLHM9MCxhPW51bGwsbD0hMTtmb3IoO2U8bi5sZW5ndGg7KXN3aXRjaChuLmNoYXJDb2RlQXQoZSsrKSl7Y2FzZSA0MDppKys7YnJlYWs7Y2FzZSA0MTppLS07YnJlYWs7Y2FzZSAzOTpsPWx8fG8+MCwwPT09cj9yPTM5OjM5PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSAzNDpsPWx8fG8+MCwwPT09cj9yPTM0OjM0PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSA1ODohYSYmMD09PWkmJjA9PT1yJiYoYT1LcShuLnN1YnN0cmluZyhzLGUtMSkudHJpbSgpKSxvPWUpO2JyZWFrO2Nhc2UgNTk6aWYoYSYmbz4wJiYwPT09aSYmMD09PXIpe2xldCB1PW4uc3Vic3RyaW5nKG8sZS0xKS50cmltKCk7dC5wdXNoKGEsbD9SOSh1KTp1KSxzPWUsbz0wLGE9bnVsbCxsPSExfX1pZihhJiZvKXtsZXQgYz1uLnNsaWNlKG8pLnRyaW0oKTt0LnB1c2goYSxsP1I5KGMpOmMpfXJldHVybiB0fSh0KSx0aGlzLl9oYXNJbml0aWFsVmFsdWVzPSEwfXJlZ2lzdGVyQ2xhc3NBdHRyKHQpe3RoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz10LnRyaW0oKS5zcGxpdCgvXHMrL2cpLHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITB9cG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKHQpe2lmKHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcy5sZW5ndGgpe3QucHVzaChudCgxKSk7Zm9yKGxldCBlPTA7ZTx0aGlzLl9pbml0aWFsQ2xhc3NWYWx1ZXMubGVuZ3RoO2UrKyl0LnB1c2gobnQodGhpcy5faW5pdGlhbENsYXNzVmFsdWVzW2VdKSl9aWYodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzLmxlbmd0aCl7dC5wdXNoKG50KDIpKTtmb3IobGV0IGU9MDtlPHRoaXMuX2luaXRpYWxTdHlsZVZhbHVlcy5sZW5ndGg7ZSs9Mil0LnB1c2gobnQodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzW2VdKSxudCh0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXNbZSsxXSkpfX1hc3NpZ25Ib3N0QXR0cnModCxlKXt0aGlzLl9kaXJlY3RpdmVFeHByJiYodC5sZW5ndGh8fHRoaXMuX2hhc0luaXRpYWxWYWx1ZXMpJiYodGhpcy5wb3B1bGF0ZUluaXRpYWxTdHlsaW5nQXR0cnModCksZS5zZXQoImhvc3RBdHRycyIsY3IodCkpKX1idWlsZENsYXNzTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX2NsYXNzTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITAsdGhpcy5fY2xhc3NNYXBJbnB1dCk6bnVsbH1idWlsZFN0eWxlTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0eWxlTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITEsdGhpcy5fc3R5bGVNYXBJbnB1dCk6bnVsbH1fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsZSxpKXtsZXQgcyxyPTIsbz1pLnZhbHVlLnZpc2l0KHQpO3JldHVybiBvIGluc3RhbmNlb2YgWm8/KHIrPW8uZXhwcmVzc2lvbnMubGVuZ3RoLHM9ZT9mdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5jbGFzc01hcDtjYXNlIDM6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsuY2xhc3NNYXBJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5jbGFzc01hcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLmNsYXNzTWFwSW50ZXJwb2xhdGVWfX0obyk6ZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsuc3R5bGVNYXA7Y2FzZSAzOnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlTWFwSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsuc3R5bGVNYXBJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5zdHlsZU1hcEludGVycG9sYXRlVn19KG8pKTpzPWU/Sy5jbGFzc01hcDpLLnN0eWxlTWFwLHtyZWZlcmVuY2U6cyxjYWxsczpbe3N1cHBvcnRzSW50ZXJwb2xhdGlvbjohMCxzb3VyY2VTcGFuOmkuc291cmNlU3BhbixhbGxvY2F0ZUJpbmRpbmdTbG90czpyLHBhcmFtczphPT57bGV0IGw9YShvKTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sOltsXX19XX19X2J1aWxkU2luZ2xlSW5wdXRzKHQsZSxpLHIsbyl7bGV0IHM9W107cmV0dXJuIGUuZm9yRWFjaChhPT57bGV0IGw9c1tzLmxlbmd0aC0xXSxjPWEudmFsdWUudmlzaXQoaSksdT10LGQ9MjtjIGluc3RhbmNlb2YgWm8mJihkKz1jLmV4cHJlc3Npb25zLmxlbmd0aCxyJiYodT1yKGMpKSk7bGV0IHA9e3NvdXJjZVNwYW46YS5zb3VyY2VTcGFuLGFsbG9jYXRlQmluZGluZ1Nsb3RzOmQsc3VwcG9ydHNJbnRlcnBvbGF0aW9uOiEhcixwYXJhbXM6aD0+e2xldCBmPVtdO2YucHVzaChudChhLm5hbWUpKTtsZXQgbT1oKGMpO3JldHVybiBBcnJheS5pc0FycmF5KG0pP2YucHVzaCguLi5tKTpmLnB1c2gobSksIW8mJm51bGwhPT1hLnN1ZmZpeCYmZi5wdXNoKG50KGEuc3VmZml4KSksZn19O2wmJmwucmVmZXJlbmNlPT09dT9sLmNhbGxzLnB1c2gocCk6cy5wdXNoKHtyZWZlcmVuY2U6dSxjYWxsczpbcF19KX0pLHN9X2J1aWxkQ2xhc3NJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuY2xhc3NQcm9wLHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzLHQsbnVsbCwhMCk6W119X2J1aWxkU3R5bGVJbnB1dHModCl7cmV0dXJuIHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzP3RoaXMuX2J1aWxkU2luZ2xlSW5wdXRzKEsuc3R5bGVQcm9wLHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzLHQsQXllLCExKTpbXX1idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKHQpe2xldCBlPVtdO2lmKHRoaXMuaGFzQmluZGluZ3Mpe2xldCBpPXRoaXMuYnVpbGRTdHlsZU1hcEluc3RydWN0aW9uKHQpO2kmJmUucHVzaChpKTtsZXQgcj10aGlzLmJ1aWxkQ2xhc3NNYXBJbnN0cnVjdGlvbih0KTtyJiZlLnB1c2gociksZS5wdXNoKC4uLnRoaXMuX2J1aWxkU3R5bGVJbnB1dHModCkpLGUucHVzaCguLi50aGlzLl9idWlsZENsYXNzSW5wdXRzKHQpKX1yZXR1cm4gZX19O2Z1bmN0aW9uIE85KG4sdCl7bi5oYXModCl8fG4uc2V0KHQsbi5zaXplKX1mdW5jdGlvbiBrOShuKXtsZXQgdD0hMSxlPW4uaW5kZXhPZigiIWltcG9ydGFudCIpOy0xIT09ZSYmKG49ZT4wP24uc3Vic3RyaW5nKDAsZSk6IiIsdD0hMCk7bGV0IGk9bnVsbCxyPW4sbz1uLmxhc3RJbmRleE9mKCIuIik7cmV0dXJuIG8+MCYmKGk9bi5zbGljZShvKzEpLHI9bi5zdWJzdHJpbmcoMCxvKSkse3Byb3BlcnR5OnIsc3VmZml4OmksaGFzT3ZlcnJpZGVGbGFnOnR9fWZ1bmN0aW9uIEF5ZShuKXtzd2l0Y2goQWYobikpe2Nhc2UgMTpyZXR1cm4gSy5zdHlsZVByb3A7Y2FzZSAzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlMTtjYXNlIDU6cmV0dXJuIEsuc3R5bGVQcm9wSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5zdHlsZVByb3BJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNDtjYXNlIDExOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlNztjYXNlIDE3OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnN0eWxlUHJvcEludGVycG9sYXRlVn19ZnVuY3Rpb24gRjkobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBldSYmKG49bi5hc3QpLG4gaW5zdGFuY2VvZiBuYX12YXIgSm49KCgpPT57cmV0dXJuKG49Sm58fChKbj17fSkpW24uQ2hhcmFjdGVyPTBdPSJDaGFyYWN0ZXIiLG5bbi5JZGVudGlmaWVyPTFdPSJJZGVudGlmaWVyIixuW24uUHJpdmF0ZUlkZW50aWZpZXI9Ml09IlByaXZhdGVJZGVudGlmaWVyIixuW24uS2V5d29yZD0zXT0iS2V5d29yZCIsbltuLlN0cmluZz00XT0iU3RyaW5nIixuW24uT3BlcmF0b3I9NV09Ik9wZXJhdG9yIixuW24uTnVtYmVyPTZdPSJOdW1iZXIiLG5bbi5FcnJvcj03XT0iRXJyb3IiLEpuO3ZhciBufSkoKSxQeWU9WyJ2YXIiLCJsZXQiLCJhcyIsIm51bGwiLCJ1bmRlZmluZWQiLCJ0cnVlIiwiZmFsc2UiLCJpZiIsImVsc2UiLCJ0aGlzIl0sTDE9Y2xhc3N7dG9rZW5pemUodCl7bGV0IGU9bmV3IFRMKHQpLGk9W10scj1lLnNjYW5Ub2tlbigpO2Zvcig7bnVsbCE9cjspaS5wdXNoKHIpLHI9ZS5zY2FuVG9rZW4oKTtyZXR1cm4gaX19LHVjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5pbmRleD10LHRoaXMuZW5kPWUsdGhpcy50eXBlPWksdGhpcy5udW1WYWx1ZT1yLHRoaXMuc3RyVmFsdWU9b31pc0NoYXJhY3Rlcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5DaGFyYWN0ZXImJnRoaXMubnVtVmFsdWU9PXR9aXNOdW1iZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5OdW1iZXJ9aXNTdHJpbmcoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5TdHJpbmd9aXNPcGVyYXRvcih0KXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5PcGVyYXRvciYmdGhpcy5zdHJWYWx1ZT09dH1pc0lkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5JZGVudGlmaWVyfWlzUHJpdmF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5Qcml2YXRlSWRlbnRpZmllcn1pc0tleXdvcmQoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkfWlzS2V5d29yZExldCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJsZXQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmImFzIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmROdWxsKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uS2V5d29yZCYmIm51bGwiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFVuZGVmaW5lZCgpe3JldHVybiB0aGlzLnR5cGU9PUpuLktleXdvcmQmJiJ1bmRlZmluZWQiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRydWUoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidHJ1ZSI9PXRoaXMuc3RyVmFsdWV9aXNLZXl3b3JkRmFsc2UoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYiZmFsc2UiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZFRoaXMoKXtyZXR1cm4gdGhpcy50eXBlPT1Kbi5LZXl3b3JkJiYidGhpcyI9PXRoaXMuc3RyVmFsdWV9aXNFcnJvcigpe3JldHVybiB0aGlzLnR5cGU9PUpuLkVycm9yfXRvTnVtYmVyKCl7cmV0dXJuIHRoaXMudHlwZT09Sm4uTnVtYmVyP3RoaXMubnVtVmFsdWU6LTF9dG9TdHJpbmcoKXtzd2l0Y2godGhpcy50eXBlKXtjYXNlIEpuLkNoYXJhY3RlcjpjYXNlIEpuLklkZW50aWZpZXI6Y2FzZSBKbi5LZXl3b3JkOmNhc2UgSm4uT3BlcmF0b3I6Y2FzZSBKbi5Qcml2YXRlSWRlbnRpZmllcjpjYXNlIEpuLlN0cmluZzpjYXNlIEpuLkVycm9yOnJldHVybiB0aGlzLnN0clZhbHVlO2Nhc2UgSm4uTnVtYmVyOnJldHVybiB0aGlzLm51bVZhbHVlLnRvU3RyaW5nKCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19fTtmdW5jdGlvbiBOOShuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uQ2hhcmFjdGVyLGUsU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZnVuY3Rpb24gQU4obix0LGUpe3JldHVybiBuZXcgdWMobix0LEpuLk9wZXJhdG9yLDAsZSl9dmFyIElOPW5ldyB1YygtMSwtMSxKbi5DaGFyYWN0ZXIsMCwiIiksVEw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5pbnB1dD10LHRoaXMucGVlaz0wLHRoaXMuaW5kZXg9LTEsdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5hZHZhbmNlKCl9YWR2YW5jZSgpe3RoaXMucGVlaz0rK3RoaXMuaW5kZXg+PXRoaXMubGVuZ3RoPzA6dGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpfXNjYW5Ub2tlbigpe2xldCB0PXRoaXMuaW5wdXQsZT10aGlzLmxlbmd0aCxpPXRoaXMucGVlayxyPXRoaXMuaW5kZXg7Zm9yKDtpPD0zMjspe2lmKCsrcj49ZSl7aT0wO2JyZWFrfWk9dC5jaGFyQ29kZUF0KHIpfWlmKHRoaXMucGVlaz1pLHRoaXMuaW5kZXg9cixyPj1lKXJldHVybiBudWxsO2lmKEw5KGkpKXJldHVybiB0aGlzLnNjYW5JZGVudGlmaWVyKCk7aWYocHAoaSkpcmV0dXJuIHRoaXMuc2Nhbk51bWJlcihyKTtsZXQgbz1yO3N3aXRjaChpKXtjYXNlIDQ2OnJldHVybiB0aGlzLmFkdmFuY2UoKSxwcCh0aGlzLnBlZWspP3RoaXMuc2Nhbk51bWJlcihvKTpOOShvLHRoaXMuaW5kZXgsNDYpO2Nhc2UgNDA6Y2FzZSA0MTpjYXNlIGZwOmNhc2UgdHU6Y2FzZSA5MTpjYXNlIDkzOmNhc2UgNDQ6Y2FzZSA1ODpjYXNlIDU5OnJldHVybiB0aGlzLnNjYW5DaGFyYWN0ZXIobyxpKTtjYXNlIDM5OmNhc2UgMzQ6cmV0dXJuIHRoaXMuc2NhblN0cmluZygpO2Nhc2UgMzU6cmV0dXJuIHRoaXMuc2NhblByaXZhdGVJZGVudGlmaWVyKCk7Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDI6Y2FzZSA0NzpjYXNlIDM3OmNhc2UgOTQ6cmV0dXJuIHRoaXMuc2Nhbk9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7Y2FzZSA2MzpyZXR1cm4gdGhpcy5zY2FuUXVlc3Rpb24obyk7Y2FzZSA2MDpjYXNlIDYyOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iik7Y2FzZSAzMzpjYXNlIDYxOnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobyxTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLDYxLCI9Iiw2MSwiPSIpO2Nhc2UgMzg6cmV0dXJuIHRoaXMuc2NhbkNvbXBsZXhPcGVyYXRvcihvLCImIiwzOCwiJiIpO2Nhc2UgMTI0OnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobywifCIsMTI0LCJ8Iik7Y2FzZSAxNjA6Zm9yKDtmMyh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtyZXR1cm4gdGhpcy5zY2FuVG9rZW4oKX1yZXR1cm4gdGhpcy5hZHZhbmNlKCksdGhpcy5lcnJvcihgVW5leHBlY3RlZCBjaGFyYWN0ZXIgWyR7U3RyaW5nLmZyb21DaGFyQ29kZShpKX1dYCwwKX1zY2FuQ2hhcmFjdGVyKHQsZSl7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLE45KHQsdGhpcy5pbmRleCxlKX1zY2FuT3BlcmF0b3IodCxlKXtyZXR1cm4gdGhpcy5hZHZhbmNlKCksQU4odCx0aGlzLmluZGV4LGUpfXNjYW5Db21wbGV4T3BlcmF0b3IodCxlLGkscixvLHMpe3RoaXMuYWR2YW5jZSgpO2xldCBhPWU7cmV0dXJuIHRoaXMucGVlaz09aSYmKHRoaXMuYWR2YW5jZSgpLGErPXIpLG51bGwhPW8mJnRoaXMucGVlaz09byYmKHRoaXMuYWR2YW5jZSgpLGErPXMpLEFOKHQsdGhpcy5pbmRleCxhKX1zY2FuSWRlbnRpZmllcigpe2xldCB0PXRoaXMuaW5kZXg7Zm9yKHRoaXMuYWR2YW5jZSgpO0I5KHRoaXMucGVlayk7KXRoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7cmV0dXJuIFB5ZS5pbmRleE9mKGUpPi0xP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5LZXl3b3JkLDAsZSl9KHQsdGhpcy5pbmRleCxlKTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uSWRlbnRpZmllciwwLGUpfSh0LHRoaXMuaW5kZXgsZSl9c2NhblByaXZhdGVJZGVudGlmaWVyKCl7bGV0IHQ9dGhpcy5pbmRleDtpZih0aGlzLmFkdmFuY2UoKSwhTDkodGhpcy5wZWVrKSlyZXR1cm4gdGhpcy5lcnJvcigiSW52YWxpZCBjaGFyYWN0ZXIgWyNdIiwtMSk7Zm9yKDtCOSh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uUHJpdmF0ZUlkZW50aWZpZXIsMCxlKX0odCx0aGlzLmluZGV4LGUpfXNjYW5OdW1iZXIodCl7bGV0IGU9dGhpcy5pbmRleD09PXQsaT0hMTtmb3IodGhpcy5hZHZhbmNlKCk7Oyl7aWYoIXBwKHRoaXMucGVlaykpaWYoOTU9PT10aGlzLnBlZWspe2lmKCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleC0xKSl8fCFwcCh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5pbmRleCsxKSkpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgbnVtZXJpYyBzZXBhcmF0b3IiLDApO2k9ITB9ZWxzZSBpZig0Nj09PXRoaXMucGVlayllPSExO2Vsc2V7aWYoMTAxIT0obj10aGlzLnBlZWspJiY2OSE9bilicmVhaztpZih0aGlzLmFkdmFuY2UoKSxWeWUodGhpcy5wZWVrKSYmdGhpcy5hZHZhbmNlKCksIXBwKHRoaXMucGVlaykpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgZXhwb25lbnQiLC0xKTtlPSExfXRoaXMuYWR2YW5jZSgpfXZhciBuO2xldCByPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbmRleCk7aSYmKHI9ci5yZXBsYWNlKC9fL2csIiIpKTtsZXQgbz1lP2Z1bmN0aW9uKG4pe2xldCB0PXBhcnNlSW50KG4pO2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrbik7cmV0dXJuIHR9KHIpOnBhcnNlRmxvYXQocik7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5OdW1iZXIsZSwiIil9KHQsdGhpcy5pbmRleCxvKX1zY2FuU3RyaW5nKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMucGVlazt0aGlzLmFkdmFuY2UoKTtsZXQgaT0iIixyPXRoaXMuaW5kZXgsbz10aGlzLmlucHV0O2Zvcig7dGhpcy5wZWVrIT1lOylpZig5Mj09dGhpcy5wZWVrKXtsZXQgYTtpZihpKz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpLHRoaXMuYWR2YW5jZSgpLHRoaXMucGVlaz10aGlzLnBlZWssMTE3PT10aGlzLnBlZWspe2xldCBsPW8uc3Vic3RyaW5nKHRoaXMuaW5kZXgrMSx0aGlzLmluZGV4KzUpO2lmKCEvXlswLTlhLWZdKyQvaS50ZXN0KGwpKXJldHVybiB0aGlzLmVycm9yKGBJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIFtcXHUke2x9XWAsMCk7YT1wYXJzZUludChsLDE2KTtmb3IobGV0IGM9MDtjPDU7YysrKXRoaXMuYWR2YW5jZSgpfWVsc2UgYT1IeWUodGhpcy5wZWVrKSx0aGlzLmFkdmFuY2UoKTtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpLHI9dGhpcy5pbmRleH1lbHNle2lmKDA9PXRoaXMucGVlaylyZXR1cm4gdGhpcy5lcnJvcigiVW50ZXJtaW5hdGVkIHF1b3RlIiwwKTt0aGlzLmFkdmFuY2UoKX1sZXQgcz1vLnN1YnN0cmluZyhyLHRoaXMuaW5kZXgpO3JldHVybiB0aGlzLmFkdmFuY2UoKSxmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyB1YyhuLHQsSm4uU3RyaW5nLDAsZSl9KHQsdGhpcy5pbmRleCxpK3MpfXNjYW5RdWVzdGlvbih0KXt0aGlzLmFkdmFuY2UoKTtsZXQgZT0iPyI7cmV0dXJuKDYzPT09dGhpcy5wZWVrfHw0Nj09PXRoaXMucGVlaykmJihlKz00Nj09PXRoaXMucGVlaz8iLiI6Ij8iLHRoaXMuYWR2YW5jZSgpKSxBTih0LHRoaXMuaW5kZXgsZSl9ZXJyb3IodCxlKXtsZXQgaT10aGlzLmluZGV4K2U7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IHVjKG4sdCxKbi5FcnJvciwwLGUpfShpLHRoaXMuaW5kZXgsYExleGVyIEVycm9yOiAke3R9IGF0IGNvbHVtbiAke2l9IGluIGV4cHJlc3Npb24gWyR7dGhpcy5pbnB1dH1dYCl9fTtmdW5jdGlvbiBMOShuKXtyZXR1cm4gOTc8PW4mJm48PTEyMnx8NjU8PW4mJm48PTkwfHw5NT09bnx8MzY9PW59ZnVuY3Rpb24gQjkobil7cmV0dXJuIG0zKG4pfHxwcChuKXx8OTU9PW58fDM2PT1ufWZ1bmN0aW9uIFZ5ZShuKXtyZXR1cm4gNDU9PW58fDQzPT1ufWZ1bmN0aW9uIEh5ZShuKXtzd2l0Y2gobil7Y2FzZSAxMTA6cmV0dXJuIDEwO2Nhc2UgMTAyOnJldHVybiAxMjtjYXNlIDExNDpyZXR1cm4gMTM7Y2FzZSAxMTY6cmV0dXJuIDk7Y2FzZSAxMTg6cmV0dXJuIDExO2RlZmF1bHQ6cmV0dXJuIG59fXZhciBCMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9sZXhlcj10LHRoaXMuZXJyb3JzPVtdfXBhcnNlQWN0aW9uKHQsZSxpLHIsbz0kYyl7dGhpcy5fY2hlY2tOb0ludGVycG9sYXRpb24odCxpLG8pO2xldCBzPXRoaXMuX3N0cmlwQ29tbWVudHModCksYT10aGlzLl9sZXhlci50b2tlbml6ZShzKSxsPTE7ZSYmKGx8PTIpO2xldCBjPW5ldyBsZih0LGkscixhLGwsdGhpcy5lcnJvcnMsMCkucGFyc2VDaGFpbigpO3JldHVybiBuZXcgZXUoYyx0LGkscix0aGlzLmVycm9ycyl9cGFyc2VCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKTtyZXR1cm4gbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfWNoZWNrU2ltcGxlRXhwcmVzc2lvbih0KXtsZXQgZT1uZXcgSUw7cmV0dXJuIHQudmlzaXQoZSksZS5lcnJvcnN9cGFyc2VTaW1wbGVCaW5kaW5nKHQsZSxpLHI9JGMpe2xldCBvPXRoaXMuX3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKSxzPXRoaXMuY2hlY2tTaW1wbGVFeHByZXNzaW9uKG8pO3JldHVybiBzLmxlbmd0aD4wJiZ0aGlzLl9yZXBvcnRFcnJvcihgSG9zdCBiaW5kaW5nIGV4cHJlc3Npb24gY2Fubm90IGNvbnRhaW4gJHtzLmpvaW4oIiAiKX1gLHQsZSksbmV3IGV1KG8sdCxlLGksdGhpcy5lcnJvcnMpfV9yZXBvcnRFcnJvcih0LGUsaSxyKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBteCh0LGUsaSxyKSl9X3BhcnNlQmluZGluZ0FzdCh0LGUsaSxyKXt0aGlzLl9jaGVja05vSW50ZXJwb2xhdGlvbih0LGUscik7bGV0IG89dGhpcy5fc3RyaXBDb21tZW50cyh0KSxzPXRoaXMuX2xleGVyLnRva2VuaXplKG8pO3JldHVybiBuZXcgbGYodCxlLGkscywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKX1wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz10aGlzLl9sZXhlci50b2tlbml6ZShlKTtyZXR1cm4gbmV3IGxmKGUsaSxvLHMsMCx0aGlzLmVycm9ycywwKS5wYXJzZVRlbXBsYXRlQmluZGluZ3Moe3NvdXJjZTp0LHNwYW46bmV3IE9hKHIscit0Lmxlbmd0aCl9KX1wYXJzZUludGVycG9sYXRpb24odCxlLGkscixvPSRjKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmEsb2Zmc2V0czpsfT10aGlzLnNwbGl0SW50ZXJwb2xhdGlvbih0LGUscixvKTtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGM9W107Zm9yKGxldCB1PTA7dTxhLmxlbmd0aDsrK3Upe2xldCBwPXRoaXMuX3N0cmlwQ29tbWVudHMoYVt1XS50ZXh0KSxoPXRoaXMuX2xleGVyLnRva2VuaXplKHApLGY9bmV3IGxmKHQsZSxpLGgsMCx0aGlzLmVycm9ycyxsW3VdKS5wYXJzZUNoYWluKCk7Yy5wdXNoKGYpfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYXRpb25Bc3Qocy5tYXAodT0+dS50ZXh0KSxjLHQsZSxpKX1wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsZSxpKXtsZXQgcj10aGlzLl9zdHJpcENvbW1lbnRzKHQpLG89dGhpcy5fbGV4ZXIudG9rZW5pemUocikscz1uZXcgbGYodCxlLGksbywwLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKTtyZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KFsiIiwiIl0sW3NdLHQsZSxpKX1jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KHQsZSxpLHIsbyl7bGV0IHM9bmV3IFNmKDAsaS5sZW5ndGgpLGE9bmV3IFpvKHMscy50b0Fic29sdXRlKG8pLHQsZSk7cmV0dXJuIG5ldyBldShhLGkscixvLHRoaXMuZXJyb3JzKX1zcGxpdEludGVycG9sYXRpb24odCxlLGkscj0kYyl7bGV0IG89W10scz1bXSxhPVtdLGw9aT9mdW5jdGlvbihuKXtsZXQgdD1uZXcgTWFwLGU9MCxpPTAscj0wO2Zvcig7cjxuLmxlbmd0aDspe2xldCBvPW5bcl07aWYoOT09PW8udHlwZSl7bGV0W3MsYV09by5wYXJ0cztlKz1hLmxlbmd0aCxpKz1zLmxlbmd0aH1lbHNle2xldCBzPW8ucGFydHMucmVkdWNlKChhLGwpPT5hK2wubGVuZ3RoLDApO2krPXMsZSs9c310LnNldChpLGUpLHIrK31yZXR1cm4gdH0oaSk6bnVsbCxjPTAsdT0hMSxkPSExLHtzdGFydDpwLGVuZDpofT1yO2Zvcig7Yzx0Lmxlbmd0aDspaWYodSl7bGV0IGY9YyxtPWYrcC5sZW5ndGgsQz10aGlzLl9nZXRJbnRlcnBvbGF0aW9uRW5kSW5kZXgodCxoLG0pO2lmKC0xPT09Qyl7dT0hMSxkPSEwO2JyZWFrfWxldCBfPUMraC5sZW5ndGgseT10LnN1YnN0cmluZyhtLEMpOzA9PT15LnRyaW0oKS5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJCbGFuayBleHByZXNzaW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJwb2xhdGVkIHN0cmluZ3MiLHQsYGF0IGNvbHVtbiAke2N9IGluYCxlKSxzLnB1c2goe3RleHQ6eSxzdGFydDpmLGVuZDpffSk7bGV0IEE9KGw/LmdldChmKT8/ZikrcC5sZW5ndGg7YS5wdXNoKEEpLGM9Xyx1PSExfWVsc2V7bGV0IGY9YztjPXQuaW5kZXhPZihwLGMpLC0xPT09YyYmKGM9dC5sZW5ndGgpO2xldCBtPXQuc3Vic3RyaW5nKGYsYyk7by5wdXNoKHt0ZXh0Om0sc3RhcnQ6ZixlbmQ6Y30pLHU9ITB9aWYoIXUpaWYoZCl7bGV0IGY9b1tvLmxlbmd0aC0xXTtmLnRleHQrPXQuc3Vic3RyaW5nKGMpLGYuZW5kPXQubGVuZ3RofWVsc2Ugby5wdXNoKHt0ZXh0OnQuc3Vic3RyaW5nKGMpLHN0YXJ0OmMsZW5kOnQubGVuZ3RofSk7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zdHJpbmdzPXQsdGhpcy5leHByZXNzaW9ucz1lLHRoaXMub2Zmc2V0cz1pfX0obyxzLGEpfXdyYXBMaXRlcmFsUHJpbWl0aXZlKHQsZSxpKXtsZXQgcj1uZXcgU2YoMCxudWxsPT10PzA6dC5sZW5ndGgpO3JldHVybiBuZXcgZXUobmV3IElzKHIsci50b0Fic29sdXRlKGkpLHQpLHQsZSxpLHRoaXMuZXJyb3JzKX1fc3RyaXBDb21tZW50cyh0KXtsZXQgZT10aGlzLl9jb21tZW50U3RhcnQodCk7cmV0dXJuIG51bGwhPWU/dC5zdWJzdHJpbmcoMCxlKTp0fV9jb21tZW50U3RhcnQodCl7bGV0IGU9bnVsbDtmb3IobGV0IGk9MDtpPHQubGVuZ3RoLTE7aSsrKXtsZXQgcj10LmNoYXJDb2RlQXQoaSksbz10LmNoYXJDb2RlQXQoaSsxKTtpZig0Nz09PXImJjQ3PT1vJiZudWxsPT1lKXJldHVybiBpO2U9PT1yP2U9bnVsbDpudWxsPT1lJiZ1TChyKSYmKGU9cil9cmV0dXJuIG51bGx9X2NoZWNrTm9JbnRlcnBvbGF0aW9uKHQsZSx7c3RhcnQ6aSxlbmQ6cn0pe2xldCBvPS0xLHM9LTE7Zm9yKGxldCBhIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCwwKSlpZigtMT09PW8pdC5zdGFydHNXaXRoKGkpJiYobz1hKTtlbHNlIGlmKHM9dGhpcy5fZ2V0SW50ZXJwb2xhdGlvbkVuZEluZGV4KHQscixhKSxzPi0xKWJyZWFrO28+LTEmJnM+LTEmJnRoaXMuX3JlcG9ydEVycm9yKGBHb3QgaW50ZXJwb2xhdGlvbiAoJHtpfSR7cn0pIHdoZXJlIGV4cHJlc3Npb24gd2FzIGV4cGVjdGVkYCx0LGBhdCBjb2x1bW4gJHtvfSBpbmAsZSl9X2dldEludGVycG9sYXRpb25FbmRJbmRleCh0LGUsaSl7Zm9yKGxldCByIG9mIHRoaXMuX2ZvckVhY2hVbnF1b3RlZENoYXIodCxpKSl7aWYodC5zdGFydHNXaXRoKGUscikpcmV0dXJuIHI7aWYodC5zdGFydHNXaXRoKCIvLyIscikpcmV0dXJuIHQuaW5kZXhPZihlLHIpfXJldHVybi0xfSpfZm9yRWFjaFVucXVvdGVkQ2hhcih0LGUpe2xldCBpPW51bGwscj0wO2ZvcihsZXQgbz1lO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyF1TCh0LmNoYXJDb2RlQXQobykpfHxudWxsIT09aSYmaSE9PXN8fHIlMiE9MD9udWxsPT09aSYmKHlpZWxkIG8pOmk9bnVsbD09PWk/czpudWxsLHI9IlxcIj09PXM/cisxOjB9fX0sZGY9KCgpPT57cmV0dXJuKG49ZGZ8fChkZj17fSkpW24uTm9uZT0wXT0iTm9uZSIsbltuLldyaXRhYmxlPTFdPSJXcml0YWJsZSIsZGY7dmFyIG59KSgpLGxmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3RoaXMuaW5wdXQ9dCx0aGlzLmxvY2F0aW9uPWUsdGhpcy5hYnNvbHV0ZU9mZnNldD1pLHRoaXMudG9rZW5zPXIsdGhpcy5wYXJzZUZsYWdzPW8sdGhpcy5lcnJvcnM9cyx0aGlzLm9mZnNldD1hLHRoaXMucnBhcmVuc0V4cGVjdGVkPTAsdGhpcy5yYnJhY2tldHNFeHBlY3RlZD0wLHRoaXMucmJyYWNlc0V4cGVjdGVkPTAsdGhpcy5jb250ZXh0PWRmLk5vbmUsdGhpcy5zb3VyY2VTcGFuQ2FjaGU9bmV3IE1hcCx0aGlzLmluZGV4PTB9cGVlayh0KXtsZXQgZT10aGlzLmluZGV4K3Q7cmV0dXJuIGU8dGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zW2VdOklOfWdldCBuZXh0KCl7cmV0dXJuIHRoaXMucGVlaygwKX1nZXQgYXRFT0YoKXtyZXR1cm4gdGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RofWdldCBpbnB1dEluZGV4KCl7cmV0dXJuIHRoaXMuYXRFT0Y/dGhpcy5jdXJyZW50RW5kSW5kZXg6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50RW5kSW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleD4wP3RoaXMucGVlaygtMSkuZW5kK3RoaXMub2Zmc2V0OjA9PT10aGlzLnRva2Vucy5sZW5ndGg/dGhpcy5pbnB1dC5sZW5ndGgrdGhpcy5vZmZzZXQ6dGhpcy5uZXh0LmluZGV4K3RoaXMub2Zmc2V0fWdldCBjdXJyZW50QWJzb2x1dGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5hYnNvbHV0ZU9mZnNldCt0aGlzLmlucHV0SW5kZXh9c3Bhbih0LGUpe2xldCBpPXRoaXMuY3VycmVudEVuZEluZGV4O2lmKHZvaWQgMCE9PWUmJmU+dGhpcy5jdXJyZW50RW5kSW5kZXgmJihpPWUpLHQ+aSl7bGV0IHI9aTtpPXQsdD1yfXJldHVybiBuZXcgU2YodCxpKX1zb3VyY2VTcGFuKHQsZSl7bGV0IGk9YCR7dH1AJHt0aGlzLmlucHV0SW5kZXh9OiR7ZX1gO3JldHVybiB0aGlzLnNvdXJjZVNwYW5DYWNoZS5oYXMoaSl8fHRoaXMuc291cmNlU3BhbkNhY2hlLnNldChpLHRoaXMuc3Bhbih0LGUpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCkpLHRoaXMuc291cmNlU3BhbkNhY2hlLmdldChpKX1hZHZhbmNlKCl7dGhpcy5pbmRleCsrfXdpdGhDb250ZXh0KHQsZSl7dGhpcy5jb250ZXh0fD10O2xldCBpPWUoKTtyZXR1cm4gdGhpcy5jb250ZXh0Xj10LGl9Y29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKHQpe3JldHVybiEhdGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpJiYodGhpcy5hZHZhbmNlKCksITApfXBlZWtLZXl3b3JkTGV0KCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRMZXQoKX1wZWVrS2V5d29yZEFzKCl7cmV0dXJuIHRoaXMubmV4dC5pc0tleXdvcmRBcygpfWV4cGVjdENoYXJhY3Rlcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0KXx8dGhpcy5lcnJvcihgTWlzc2luZyBleHBlY3RlZCAke1N0cmluZy5mcm9tQ2hhckNvZGUodCl9YCl9Y29uc3VtZU9wdGlvbmFsT3BlcmF0b3IodCl7cmV0dXJuISF0aGlzLm5leHQuaXNPcGVyYXRvcih0KSYmKHRoaXMuYWR2YW5jZSgpLCEwKX1leHBlY3RPcGVyYXRvcih0KXt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKHQpfHx0aGlzLmVycm9yKGBNaXNzaW5nIGV4cGVjdGVkIG9wZXJhdG9yICR7dH1gKX1wcmV0dHlQcmludFRva2VuKHQpe3JldHVybiB0PT09SU4/ImVuZCBvZiBpbnB1dCI6YHRva2VuICR7dH1gfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKXtsZXQgdD10aGlzLm5leHQ7cmV0dXJuIHQuaXNJZGVudGlmaWVyKCl8fHQuaXNLZXl3b3JkKCk/KHRoaXMuYWR2YW5jZSgpLHQudG9TdHJpbmcoKSk6KHQuaXNQcml2YXRlSWRlbnRpZmllcigpP3RoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodCwiZXhwZWN0ZWQgaWRlbnRpZmllciBvciBrZXl3b3JkIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIgb3Iga2V5d29yZGApLG51bGwpfWV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpe2xldCB0PXRoaXMubmV4dDtyZXR1cm4gdC5pc0lkZW50aWZpZXIoKXx8dC5pc0tleXdvcmQoKXx8dC5pc1N0cmluZygpPyh0aGlzLmFkdmFuY2UoKSx0LnRvU3RyaW5nKCkpOih0LmlzUHJpdmF0ZUlkZW50aWZpZXIoKT90aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsImV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQgb3Igc3RyaW5nIik6dGhpcy5lcnJvcihgVW5leHBlY3RlZCAke3RoaXMucHJldHR5UHJpbnRUb2tlbih0KX0sIGV4cGVjdGVkIGlkZW50aWZpZXIsIGtleXdvcmQsIG9yIHN0cmluZ2ApLCIiKX1wYXJzZUNoYWluKCl7bGV0IHQ9W10sZT10aGlzLmlucHV0SW5kZXg7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aDspe2xldCBpPXRoaXMucGFyc2VQaXBlKCk7aWYodC5wdXNoKGkpLHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDU5KSlmb3IoMSZ0aGlzLnBhcnNlRmxhZ3N8fHRoaXMuZXJyb3IoIkJpbmRpbmcgZXhwcmVzc2lvbiBjYW5ub3QgY29udGFpbiBjaGFpbmVkIGV4cHJlc3Npb24iKTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OSk7KTtlbHNlIGlmKHRoaXMuaW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoKXtsZXQgcj10aGlzLmluZGV4O2lmKHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW4gJyR7dGhpcy5uZXh0fSdgKSx0aGlzLmluZGV4PT09cilicmVha319aWYoMD09PXQubGVuZ3RoKXtsZXQgaT10aGlzLm9mZnNldCxyPXRoaXMub2Zmc2V0K3RoaXMuaW5wdXQubGVuZ3RoO3JldHVybiBuZXcgbmEodGhpcy5zcGFuKGksciksdGhpcy5zb3VyY2VTcGFuKGkscikpfXJldHVybiAxPT10Lmxlbmd0aD90WzBdOm5ldyBfeCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQpfXBhcnNlUGlwZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFeHByZXNzaW9uKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKXsxJnRoaXMucGFyc2VGbGFncyYmdGhpcy5lcnJvcigiQ2Fubm90IGhhdmUgYSBwaXBlIGluIGFuIGFjdGlvbiBleHByZXNzaW9uIik7ZG97bGV0IG8scyxpPXRoaXMuaW5wdXRJbmRleCxyPXRoaXMuZXhwZWN0SWRlbnRpZmllck9yS2V5d29yZCgpO251bGwhPT1yP289dGhpcy5zb3VyY2VTcGFuKGkpOihyPSIiLHM9LTEhPT10aGlzLm5leHQuaW5kZXg/dGhpcy5uZXh0LmluZGV4OnRoaXMuaW5wdXQubGVuZ3RoK3RoaXMub2Zmc2V0LG89bmV3IFNmKHMscykudG9BYnNvbHV0ZSh0aGlzLmFic29sdXRlT2Zmc2V0KSk7bGV0IGE9W107Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7KWEucHVzaCh0aGlzLnBhcnNlRXhwcmVzc2lvbigpKTtlPW5ldyBSMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQscyksZSxyLGEsbyl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifCIpKX1yZXR1cm4gZX1wYXJzZUV4cHJlc3Npb24oKXtyZXR1cm4gdGhpcy5wYXJzZUNvbmRpdGlvbmFsKCl9cGFyc2VDb25kaXRpb25hbCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VMb2dpY2FsT3IoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI/Iikpe2xldCByLGk9dGhpcy5wYXJzZVBpcGUoKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpcj10aGlzLnBhcnNlUGlwZSgpO2Vsc2V7bGV0IHM9dGhpcy5pbnB1dC5zdWJzdHJpbmcodCx0aGlzLmlucHV0SW5kZXgpO3RoaXMuZXJyb3IoYENvbmRpdGlvbmFsIGV4cHJlc3Npb24gJHtzfSByZXF1aXJlcyBhbGwgMyBleHByZXNzaW9uc2ApLHI9bmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpfXJldHVybiBuZXcgdngodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlLGkscil9cmV0dXJuIGV9cGFyc2VMb2dpY2FsT3IoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlTG9naWNhbEFuZCgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigifHwiKTspe2xldCBpPXRoaXMucGFyc2VMb2dpY2FsQW5kKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwifHwiLGUsaSl9cmV0dXJuIGV9cGFyc2VMb2dpY2FsQW5kKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCImJiIpOyl7bGV0IGk9dGhpcy5wYXJzZU51bGxpc2hDb2FsZXNjaW5nKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwiJiYiLGUsaSl9cmV0dXJuIGV9cGFyc2VOdWxsaXNoQ29hbGVzY2luZygpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VFcXVhbGl0eSgpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPz8iKTspe2xldCBpPXRoaXMucGFyc2VFcXVhbGl0eSgpO2U9bmV3IGhsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksIj8/IixlLGkpfXJldHVybiBlfXBhcnNlRXF1YWxpdHkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlUmVsYXRpb25hbCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIj09IjpjYXNlIj09PSI6Y2FzZSIhPSI6Y2FzZSIhPT0iOnRoaXMuYWR2YW5jZSgpO2xldCByPXRoaXMucGFyc2VSZWxhdGlvbmFsKCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VSZWxhdGlvbmFsKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZUFkZGl0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiPCI6Y2FzZSI+IjpjYXNlIjw9IjpjYXNlIj49Ijp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlQWRkaXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZUFkZGl0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZU11bHRpcGxpY2F0aXZlKCk7Zm9yKDt0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3I7KXtsZXQgaT10aGlzLm5leHQuc3RyVmFsdWU7c3dpdGNoKGkpe2Nhc2UiKyI6Y2FzZSItIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlTXVsdGlwbGljYXRpdmUoKTtlPW5ldyBobCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGksZSxyKTtjb250aW51ZX1icmVha31yZXR1cm4gZX1wYXJzZU11bHRpcGxpY2F0aXZlKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByZWZpeCgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PUpuLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIioiOmNhc2UiJSI6Y2FzZSIvIjp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlUHJlZml4KCk7ZT1uZXcgaGwodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VQcmVmaXgoKXtpZih0aGlzLm5leHQudHlwZT09Sm4uT3BlcmF0b3Ipe2xldCBpLHQ9dGhpcy5pbnB1dEluZGV4O3N3aXRjaCh0aGlzLm5leHQuc3RyVmFsdWUpe2Nhc2UiKyI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLGNjLmNyZWF0ZVBsdXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKTtjYXNlIi0iOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSxjYy5jcmVhdGVNaW51cyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpO2Nhc2UiISI6cmV0dXJuIHRoaXMuYWR2YW5jZSgpLGk9dGhpcy5wYXJzZVByZWZpeCgpLG5ldyB3eCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGkpfX1yZXR1cm4gdGhpcy5wYXJzZUNhbGxDaGFpbigpfXBhcnNlQ2FsbENoYWluKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVByaW1hcnkoKTtmb3IoOzspaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDYpKWU9dGhpcy5wYXJzZUFjY2Vzc01lbWJlcihlLHQsITEpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPy4iKSllPXRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQwKT90aGlzLnBhcnNlQ2FsbChlLHQsITApOnRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKT90aGlzLnBhcnNlS2V5ZWRSZWFkT3JXcml0ZShlLHQsITApOnRoaXMucGFyc2VBY2Nlc3NNZW1iZXIoZSx0LCEwKTtlbHNlIGlmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDkxKSllPXRoaXMucGFyc2VLZXllZFJlYWRPcldyaXRlKGUsdCwhMSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0MCkpZT10aGlzLnBhcnNlQ2FsbChlLHQsITEpO2Vsc2V7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIiEiKSlyZXR1cm4gZTtlPW5ldyBNeCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfX1wYXJzZVByaW1hcnkoKXtsZXQgdD10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDApKXt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBlPXRoaXMucGFyc2VQaXBlKCk7cmV0dXJuIHRoaXMucnBhcmVuc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLGV9aWYodGhpcy5uZXh0LmlzS2V5d29yZE51bGwoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksbnVsbCk7aWYodGhpcy5uZXh0LmlzS2V5d29yZFVuZGVmaW5lZCgpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgSXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSx2b2lkIDApO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUcnVlKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCEwKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkRmFsc2UoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksITEpO2lmKHRoaXMubmV4dC5pc0tleXdvcmRUaGlzKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBneCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSkpe3RoaXMucmJyYWNrZXRzRXhwZWN0ZWQrKztsZXQgZT10aGlzLnBhcnNlRXhwcmVzc2lvbkxpc3QoOTMpO3JldHVybiB0aGlzLnJicmFja2V0c0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIoOTMpLG5ldyBPMCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc0NoYXJhY3RlcihmcCkpcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsTWFwKCk7aWYodGhpcy5uZXh0LmlzSWRlbnRpZmllcigpKXJldHVybiB0aGlzLnBhcnNlQWNjZXNzTWVtYmVyKG5ldyBFZih0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSx0LCExKTtpZih0aGlzLm5leHQuaXNOdW1iZXIoKSl7bGV0IGU9dGhpcy5uZXh0LnRvTnVtYmVyKCk7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyBJcyh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfWlmKHRoaXMubmV4dC5pc1N0cmluZygpKXtsZXQgZT10aGlzLm5leHQudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IElzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksZSl9cmV0dXJuIHRoaXMubmV4dC5pc1ByaXZhdGVJZGVudGlmaWVyKCk/KHRoaXMuX3JlcG9ydEVycm9yRm9yUHJpdmF0ZUlkZW50aWZpZXIodGhpcy5uZXh0LG51bGwpLG5ldyBuYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSk6dGhpcy5pbmRleD49dGhpcy50b2tlbnMubGVuZ3RoPyh0aGlzLmVycm9yKGBVbmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uOiAke3RoaXMuaW5wdXR9YCksbmV3IG5hKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpKToodGhpcy5lcnJvcihgVW5leHBlY3RlZCB0b2tlbiAke3RoaXMubmV4dH1gKSxuZXcgbmEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSkpfXBhcnNlRXhwcmVzc2lvbkxpc3QodCl7bGV0IGU9W107ZG97aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKHQpKWJyZWFrO2UucHVzaCh0aGlzLnBhcnNlUGlwZSgpKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3JldHVybiBlfXBhcnNlTGl0ZXJhbE1hcCgpe2xldCB0PVtdLGU9W10saT10aGlzLmlucHV0SW5kZXg7aWYodGhpcy5leHBlY3RDaGFyYWN0ZXIoZnApLCF0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0dSkpe3RoaXMucmJyYWNlc0V4cGVjdGVkKys7ZG97bGV0IHI9dGhpcy5pbnB1dEluZGV4LG89dGhpcy5uZXh0LmlzU3RyaW5nKCkscz10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmRPclN0cmluZygpO2lmKHQucHVzaCh7a2V5OnMscXVvdGVkOm99KSxvKXRoaXMuZXhwZWN0Q2hhcmFjdGVyKDU4KSxlLnB1c2godGhpcy5wYXJzZVBpcGUoKSk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCkpZS5wdXNoKHRoaXMucGFyc2VQaXBlKCkpO2Vsc2V7bGV0IGE9dGhpcy5zcGFuKHIpLGw9dGhpcy5zb3VyY2VTcGFuKHIpO2UucHVzaChuZXcgb3UoYSxsLGwsbmV3IEVmKGEsbCkscykpfX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCkpO3RoaXMucmJyYWNlc0V4cGVjdGVkLS0sdGhpcy5leHBlY3RDaGFyYWN0ZXIodHUpfXJldHVybiBuZXcgQ3godGhpcy5zcGFuKGkpLHRoaXMuc291cmNlU3BhbihpKSx0LGUpfXBhcnNlQWNjZXNzTWVtYmVyKHQsZSxpKXtsZXQgYSxyPXRoaXMuaW5wdXRJbmRleCxvPXRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9PntsZXQgbD10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKT8/IiI7cmV0dXJuIDA9PT1sLmxlbmd0aCYmdGhpcy5lcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciBmb3IgcHJvcGVydHkgYWNjZXNzIix0LnNwYW4uZW5kKSxsfSkscz10aGlzLnNvdXJjZVNwYW4ocik7aWYoaSl0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKT8odGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxhPW5ldyBuYSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpKSk6YT1uZXcgYngodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSxzLHQsbyk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKSl7aWYoISgxJnRoaXMucGFyc2VGbGFncykpcmV0dXJuIHRoaXMuZXJyb3IoIkJpbmRpbmdzIGNhbm5vdCBjb250YWluIGFzc2lnbm1lbnRzIiksbmV3IG5hKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkpO2xldCBsPXRoaXMucGFyc2VDb25kaXRpb25hbCgpO2E9bmV3IHl4KHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkscyx0LG8sbCl9ZWxzZSBhPW5ldyBvdSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHMsdCxvKTtyZXR1cm4gYX1wYXJzZUNhbGwodCxlLGkpe2xldCByPXRoaXMuaW5wdXRJbmRleDt0aGlzLnJwYXJlbnNFeHBlY3RlZCsrO2xldCBvPXRoaXMucGFyc2VDYWxsQXJndW1lbnRzKCkscz10aGlzLnNwYW4ocix0aGlzLmlucHV0SW5kZXgpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCk7dGhpcy5leHBlY3RDaGFyYWN0ZXIoNDEpLHRoaXMucnBhcmVuc0V4cGVjdGVkLS07bGV0IGE9dGhpcy5zcGFuKGUpLGw9dGhpcy5zb3VyY2VTcGFuKGUpO3JldHVybiBpP25ldyBrMChhLGwsdCxvLHMpOm5ldyBicChhLGwsdCxvLHMpfWNvbnN1bWVPcHRpb25hbEFzc2lnbm1lbnQoKXtyZXR1cm4gMiZ0aGlzLnBhcnNlRmxhZ3MmJnRoaXMubmV4dC5pc09wZXJhdG9yKCIhIikmJnRoaXMucGVlaygxKS5pc09wZXJhdG9yKCI9Iik/KHRoaXMuYWR2YW5jZSgpLHRoaXMuYWR2YW5jZSgpLCEwKTp0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCI9Iil9cGFyc2VDYWxsQXJndW1lbnRzKCl7aWYodGhpcy5uZXh0LmlzQ2hhcmFjdGVyKDQxKSlyZXR1cm5bXTtsZXQgdD1bXTtkb3t0LnB1c2godGhpcy5wYXJzZVBpcGUoKSl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTtyZXR1cm4gdH1leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKXtsZXQgdD0iIixlPSExLGk9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7ZG97dCs9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKSxlPXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIi0iKSxlJiYodCs9Ii0iKX13aGlsZShlKTtyZXR1cm57c291cmNlOnQsc3BhbjpuZXcgT2EoaSxpK3QubGVuZ3RoKX19cGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQpe2xldCBlPVtdO2ZvcihlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KSk7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGg7KXtsZXQgaT10aGlzLnBhcnNlTGV0QmluZGluZygpO2lmKGkpZS5wdXNoKGkpO2Vsc2V7bGV0IHI9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxvPXRoaXMucGFyc2VBc0JpbmRpbmcocik7bz9lLnB1c2gobyk6KHIuc291cmNlPXQuc291cmNlK3Iuc291cmNlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Iuc291cmNlLnN1YnN0cmluZygxKSxlLnB1c2goLi4udGhpcy5wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyhyKSkpfXRoaXMuY29uc3VtZVN0YXRlbWVudFRlcm1pbmF0b3IoKX1yZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnRlbXBsYXRlQmluZGluZ3M9dCx0aGlzLndhcm5pbmdzPWUsdGhpcy5lcnJvcnM9aX19KGUsW10sdGhpcy5lcnJvcnMpfXBhcnNlS2V5ZWRSZWFkT3JXcml0ZSh0LGUsaSl7cmV0dXJuIHRoaXMud2l0aENvbnRleHQoZGYuV3JpdGFibGUsKCk9Pnt0aGlzLnJicmFja2V0c0V4cGVjdGVkKys7bGV0IHI9dGhpcy5wYXJzZVBpcGUoKTtpZihyIGluc3RhbmNlb2YgbmEmJnRoaXMuZXJyb3IoIktleSBhY2Nlc3MgY2Fubm90IGJlIGVtcHR5IiksdGhpcy5yYnJhY2tldHNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDkzKSwhdGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpKXJldHVybiBpP25ldyBQMCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscik6bmV3IEkwKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSksdCxyKTtpZighaSl7bGV0IG89dGhpcy5wYXJzZUNvbmRpdGlvbmFsKCk7cmV0dXJuIG5ldyB4eCh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscixvKX1yZXR1cm4gdGhpcy5lcnJvcigiVGhlICc/Licgb3BlcmF0b3IgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGFzc2lnbm1lbnQiKSxuZXcgbmEodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSl9KX1wYXJzZURpcmVjdGl2ZUtleXdvcmRCaW5kaW5ncyh0KXtsZXQgZT1bXTt0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OCk7bGV0IGk9dGhpcy5nZXREaXJlY3RpdmVCb3VuZFRhcmdldCgpLHI9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQsbz10aGlzLnBhcnNlQXNCaW5kaW5nKHQpO298fCh0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCkscj10aGlzLmN1cnJlbnRBYnNvbHV0ZU9mZnNldCk7bGV0IHM9bmV3IE9hKHQuc3Bhbi5zdGFydCxyKTtyZXR1cm4gZS5wdXNoKG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fShzLHQsaSkpLG8mJmUucHVzaChvKSxlfWdldERpcmVjdGl2ZUJvdW5kVGFyZ2V0KCl7aWYodGhpcy5uZXh0PT09SU58fHRoaXMucGVla0tleXdvcmRBcygpfHx0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5wYXJzZVBpcGUoKSx7c3RhcnQ6ZSxlbmQ6aX09dC5zcGFuLHI9dGhpcy5pbnB1dC5zdWJzdHJpbmcoZSxpKTtyZXR1cm4gbmV3IGV1KHQscix0aGlzLmxvY2F0aW9uLHRoaXMuYWJzb2x1dGVPZmZzZXQrZSx0aGlzLmVycm9ycyl9cGFyc2VBc0JpbmRpbmcodCl7aWYoIXRoaXMucGVla0tleXdvcmRBcygpKXJldHVybiBudWxsO3RoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCk7dGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpO2xldCBpPW5ldyBPYSh0LnNwYW4uc3RhcnQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3goaSxlLHQpfXBhcnNlTGV0QmluZGluZygpe2lmKCF0aGlzLnBlZWtLZXl3b3JkTGV0KCkpcmV0dXJuIG51bGw7bGV0IHQ9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQ7dGhpcy5hZHZhbmNlKCk7bGV0IGU9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSxpPW51bGw7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpJiYoaT10aGlzLmV4cGVjdFRlbXBsYXRlQmluZGluZ0tleSgpKSx0aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCk7bGV0IHI9bmV3IE9hKHQsdGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO3JldHVybiBuZXcgU3gocixlLGkpfWNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCl7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTkpfHx0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0NCl9ZXJyb3IodCxlPW51bGwpe3RoaXMuZXJyb3JzLnB1c2gobmV3IG14KHQsdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dChlKSx0aGlzLmxvY2F0aW9uKSksdGhpcy5za2lwKCl9bG9jYXRpb25UZXh0KHQ9bnVsbCl7cmV0dXJuIG51bGw9PXQmJih0PXRoaXMuaW5kZXgpLHQ8dGhpcy50b2tlbnMubGVuZ3RoP2BhdCBjb2x1bW4gJHt0aGlzLnRva2Vuc1t0XS5pbmRleCsxfSBpbmA6ImF0IHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24ifV9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsZSl7bGV0IGk9YFByaXZhdGUgaWRlbnRpZmllcnMgYXJlIG5vdCBzdXBwb3J0ZWQuIFVuZXhwZWN0ZWQgcHJpdmF0ZSBpZGVudGlmaWVyOiAke3R9YDtudWxsIT09ZSYmKGkrPWAsICR7ZX1gKSx0aGlzLmVycm9yKGkpfXNraXAoKXtsZXQgdD10aGlzLm5leHQ7Zm9yKDt0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aCYmIXQuaXNDaGFyYWN0ZXIoNTkpJiYhdC5pc09wZXJhdG9yKCJ8IikmJih0aGlzLnJwYXJlbnNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoNDEpKSYmKHRoaXMucmJyYWNlc0V4cGVjdGVkPD0wfHwhdC5pc0NoYXJhY3Rlcih0dSkpJiYodGhpcy5yYnJhY2tldHNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoOTMpKSYmISh0aGlzLmNvbnRleHQmZGYuV3JpdGFibGUmJnQuaXNPcGVyYXRvcigiPSIpKTspdGhpcy5uZXh0LmlzRXJyb3IoKSYmdGhpcy5lcnJvcnMucHVzaChuZXcgbXgodGhpcy5uZXh0LnRvU3RyaW5nKCksdGhpcy5pbnB1dCx0aGlzLmxvY2F0aW9uVGV4dCgpLHRoaXMubG9jYXRpb24pKSx0aGlzLmFkdmFuY2UoKSx0PXRoaXMubmV4dH19LElMPWNsYXNzIGV4dGVuZHMgZ0x7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZXJyb3JzPVtdfXZpc2l0UGlwZSgpe3RoaXMuZXJyb3JzLnB1c2goInBpcGVzIil9fSxUZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlU3Bhbj10LHRoaXMuaTE4bj1lfX0sRjA9Y2xhc3MgZXh0ZW5kcyBUZntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnRva2Vucz1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRUZXh0KHRoaXMsZSl9fSxOMD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcihyLHMpLHRoaXMuc3dpdGNoVmFsdWU9dCx0aGlzLnR5cGU9ZSx0aGlzLmNhc2VzPWksdGhpcy5zd2l0Y2hWYWx1ZVNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uKHRoaXMsZSl9fSxSTD1jbGFzcyBleHRlbmRzIFRme2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEpe3N1cGVyKGksYSksdGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy52YWx1ZVRva2Vucz1zfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRBdHRyaWJ1dGUodGhpcyxlKX19LEF4PWNsYXNzIGV4dGVuZHMgVGZ7Y29uc3RydWN0b3IodCxlLGkscixvLHM9bnVsbCxhKXtzdXBlcihyLGEpLHRoaXMubmFtZT10LHRoaXMuYXR0cnM9ZSx0aGlzLmNoaWxkcmVuPWksdGhpcy5zdGFydFNvdXJjZVNwYW49byx0aGlzLmVuZFNvdXJjZVNwYW49c312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RWxlbWVudCh0aGlzLGUpfX0sVjE9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdENvbW1lbnQodGhpcyxlKX19O2Z1bmN0aW9uIGN1KG4sdCxlPW51bGwpe2xldCBpPVtdLHI9bi52aXNpdD9vPT5uLnZpc2l0KG8sZSl8fG8udmlzaXQobixlKTpvPT5vLnZpc2l0KG4sZSk7cmV0dXJuIHQuZm9yRWFjaChvPT57bGV0IHM9cihvKTtzJiZpLnB1c2gocyl9KSxpfXZhciBIMT17QUVsaWc6Ilx4YzYiLEFNUDoiJiIsYW1wOiImIixBYWN1dGU6Ilx4YzEiLEFicmV2ZToiXHUwMTAyIixBY2lyYzoiXHhjMiIsQWN5OiJcdTA0MTAiLEFmcjoiXHVkODM1XHVkZDA0IixBZ3JhdmU6Ilx4YzAiLEFscGhhOiJcdTAzOTEiLEFtYWNyOiJcdTAxMDAiLEFuZDoiXHUyYTUzIixBb2dvbjoiXHUwMTA0IixBb3BmOiJcdWQ4MzVcdWRkMzgiLEFwcGx5RnVuY3Rpb246Ilx1MjA2MSIsYWY6Ilx1MjA2MSIsQXJpbmc6Ilx4YzUiLGFuZ3N0OiJceGM1IixBc2NyOiJcdWQ4MzVcdWRjOWMiLEFzc2lnbjoiXHUyMjU0Iixjb2xvbmU6Ilx1MjI1NCIsY29sb25lcToiXHUyMjU0IixBdGlsZGU6Ilx4YzMiLEF1bWw6Ilx4YzQiLEJhY2tzbGFzaDoiXHUyMjE2IixzZXRtaW51czoiXHUyMjE2IixzZXRtbjoiXHUyMjE2IixzbWFsbHNldG1pbnVzOiJcdTIyMTYiLHNzZXRtbjoiXHUyMjE2IixCYXJ2OiJcdTJhZTciLEJhcndlZDoiXHUyMzA2Iixkb3VibGViYXJ3ZWRnZToiXHUyMzA2IixCY3k6Ilx1MDQxMSIsQmVjYXVzZToiXHUyMjM1IixiZWNhdXM6Ilx1MjIzNSIsYmVjYXVzZToiXHUyMjM1IixCZXJub3VsbGlzOiJcdTIxMmMiLEJzY3I6Ilx1MjEyYyIsYmVybm91OiJcdTIxMmMiLEJldGE6Ilx1MDM5MiIsQmZyOiJcdWQ4MzVcdWRkMDUiLEJvcGY6Ilx1ZDgzNVx1ZGQzOSIsQnJldmU6Ilx1MDJkOCIsYnJldmU6Ilx1MDJkOCIsQnVtcGVxOiJcdTIyNGUiLEh1bXBEb3duSHVtcDoiXHUyMjRlIixidW1wOiJcdTIyNGUiLENIY3k6Ilx1MDQyNyIsQ09QWToiXHhhOSIsY29weToiXHhhOSIsQ2FjdXRlOiJcdTAxMDYiLENhcDoiXHUyMmQyIixDYXBpdGFsRGlmZmVyZW50aWFsRDoiXHUyMTQ1IixERDoiXHUyMTQ1IixDYXlsZXlzOiJcdTIxMmQiLENmcjoiXHUyMTJkIixDY2Fyb246Ilx1MDEwYyIsQ2NlZGlsOiJceGM3IixDY2lyYzoiXHUwMTA4IixDY29uaW50OiJcdTIyMzAiLENkb3Q6Ilx1MDEwYSIsQ2VkaWxsYToiXHhiOCIsY2VkaWw6Ilx4YjgiLENlbnRlckRvdDoiXHhiNyIsY2VudGVyZG90OiJceGI3IixtaWRkb3Q6Ilx4YjciLENoaToiXHUwM2E3IixDaXJjbGVEb3Q6Ilx1MjI5OSIsb2RvdDoiXHUyMjk5IixDaXJjbGVNaW51czoiXHUyMjk2IixvbWludXM6Ilx1MjI5NiIsQ2lyY2xlUGx1czoiXHUyMjk1IixvcGx1czoiXHUyMjk1IixDaXJjbGVUaW1lczoiXHUyMjk3IixvdGltZXM6Ilx1MjI5NyIsQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzIiLGN3Y29uaW50OiJcdTIyMzIiLENsb3NlQ3VybHlEb3VibGVRdW90ZToiXHUyMDFkIixyZHF1bzoiXHUyMDFkIixyZHF1b3I6Ilx1MjAxZCIsQ2xvc2VDdXJseVF1b3RlOiJcdTIwMTkiLHJzcXVvOiJcdTIwMTkiLHJzcXVvcjoiXHUyMDE5IixDb2xvbjoiXHUyMjM3IixQcm9wb3J0aW9uOiJcdTIyMzciLENvbG9uZToiXHUyYTc0IixDb25ncnVlbnQ6Ilx1MjI2MSIsZXF1aXY6Ilx1MjI2MSIsQ29uaW50OiJcdTIyMmYiLERvdWJsZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjJmIixDb250b3VySW50ZWdyYWw6Ilx1MjIyZSIsY29uaW50OiJcdTIyMmUiLG9pbnQ6Ilx1MjIyZSIsQ29wZjoiXHUyMTAyIixjb21wbGV4ZXM6Ilx1MjEwMiIsQ29wcm9kdWN0OiJcdTIyMTAiLGNvcHJvZDoiXHUyMjEwIixDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOiJcdTIyMzMiLGF3Y29uaW50OiJcdTIyMzMiLENyb3NzOiJcdTJhMmYiLENzY3I6Ilx1ZDgzNVx1ZGM5ZSIsQ3VwOiJcdTIyZDMiLEN1cENhcDoiXHUyMjRkIixhc3ltcGVxOiJcdTIyNGQiLEREb3RyYWhkOiJcdTI5MTEiLERKY3k6Ilx1MDQwMiIsRFNjeToiXHUwNDA1IixEWmN5OiJcdTA0MGYiLERhZ2dlcjoiXHUyMDIxIixkZGFnZ2VyOiJcdTIwMjEiLERhcnI6Ilx1MjFhMSIsRGFzaHY6Ilx1MmFlNCIsRG91YmxlTGVmdFRlZToiXHUyYWU0IixEY2Fyb246Ilx1MDEwZSIsRGN5OiJcdTA0MTQiLERlbDoiXHUyMjA3IixuYWJsYToiXHUyMjA3IixEZWx0YToiXHUwMzk0IixEZnI6Ilx1ZDgzNVx1ZGQwNyIsRGlhY3JpdGljYWxBY3V0ZToiXHhiNCIsYWN1dGU6Ilx4YjQiLERpYWNyaXRpY2FsRG90OiJcdTAyZDkiLGRvdDoiXHUwMmQ5IixEaWFjcml0aWNhbERvdWJsZUFjdXRlOiJcdTAyZGQiLGRibGFjOiJcdTAyZGQiLERpYWNyaXRpY2FsR3JhdmU6ImAiLGdyYXZlOiJgIixEaWFjcml0aWNhbFRpbGRlOiJcdTAyZGMiLHRpbGRlOiJcdTAyZGMiLERpYW1vbmQ6Ilx1MjJjNCIsZGlhbToiXHUyMmM0IixkaWFtb25kOiJcdTIyYzQiLERpZmZlcmVudGlhbEQ6Ilx1MjE0NiIsZGQ6Ilx1MjE0NiIsRG9wZjoiXHVkODM1XHVkZDNiIixEb3Q6Ilx4YTgiLERvdWJsZURvdDoiXHhhOCIsZGllOiJceGE4Iix1bWw6Ilx4YTgiLERvdERvdDoiXHUyMGRjIixEb3RFcXVhbDoiXHUyMjUwIixkb3RlcToiXHUyMjUwIixlc2RvdDoiXHUyMjUwIixEb3VibGVEb3duQXJyb3c6Ilx1MjFkMyIsRG93bmFycm93OiJcdTIxZDMiLGRBcnI6Ilx1MjFkMyIsRG91YmxlTGVmdEFycm93OiJcdTIxZDAiLExlZnRhcnJvdzoiXHUyMWQwIixsQXJyOiJcdTIxZDAiLERvdWJsZUxlZnRSaWdodEFycm93OiJcdTIxZDQiLExlZnRyaWdodGFycm93OiJcdTIxZDQiLGhBcnI6Ilx1MjFkNCIsaWZmOiJcdTIxZDQiLERvdWJsZUxvbmdMZWZ0QXJyb3c6Ilx1MjdmOCIsTG9uZ2xlZnRhcnJvdzoiXHUyN2Y4Iix4bEFycjoiXHUyN2Y4IixEb3VibGVMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmYSIsTG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZmEiLHhoQXJyOiJcdTI3ZmEiLERvdWJsZUxvbmdSaWdodEFycm93OiJcdTI3ZjkiLExvbmdyaWdodGFycm93OiJcdTI3ZjkiLHhyQXJyOiJcdTI3ZjkiLERvdWJsZVJpZ2h0QXJyb3c6Ilx1MjFkMiIsSW1wbGllczoiXHUyMWQyIixSaWdodGFycm93OiJcdTIxZDIiLHJBcnI6Ilx1MjFkMiIsRG91YmxlUmlnaHRUZWU6Ilx1MjJhOCIsdkRhc2g6Ilx1MjJhOCIsRG91YmxlVXBBcnJvdzoiXHUyMWQxIixVcGFycm93OiJcdTIxZDEiLHVBcnI6Ilx1MjFkMSIsRG91YmxlVXBEb3duQXJyb3c6Ilx1MjFkNSIsVXBkb3duYXJyb3c6Ilx1MjFkNSIsdkFycjoiXHUyMWQ1IixEb3VibGVWZXJ0aWNhbEJhcjoiXHUyMjI1IixwYXI6Ilx1MjIyNSIscGFyYWxsZWw6Ilx1MjIyNSIsc2hvcnRwYXJhbGxlbDoiXHUyMjI1IixzcGFyOiJcdTIyMjUiLERvd25BcnJvdzoiXHUyMTkzIixTaG9ydERvd25BcnJvdzoiXHUyMTkzIixkYXJyOiJcdTIxOTMiLGRvd25hcnJvdzoiXHUyMTkzIixEb3duQXJyb3dCYXI6Ilx1MjkxMyIsRG93bkFycm93VXBBcnJvdzoiXHUyMWY1IixkdWFycjoiXHUyMWY1IixEb3duQnJldmU6Ilx1MDMxMSIsRG93bkxlZnRSaWdodFZlY3RvcjoiXHUyOTUwIixEb3duTGVmdFRlZVZlY3RvcjoiXHUyOTVlIixEb3duTGVmdFZlY3RvcjoiXHUyMWJkIixsZWZ0aGFycG9vbmRvd246Ilx1MjFiZCIsbGhhcmQ6Ilx1MjFiZCIsRG93bkxlZnRWZWN0b3JCYXI6Ilx1Mjk1NiIsRG93blJpZ2h0VGVlVmVjdG9yOiJcdTI5NWYiLERvd25SaWdodFZlY3RvcjoiXHUyMWMxIixyaGFyZDoiXHUyMWMxIixyaWdodGhhcnBvb25kb3duOiJcdTIxYzEiLERvd25SaWdodFZlY3RvckJhcjoiXHUyOTU3IixEb3duVGVlOiJcdTIyYTQiLHRvcDoiXHUyMmE0IixEb3duVGVlQXJyb3c6Ilx1MjFhNyIsbWFwc3RvZG93bjoiXHUyMWE3IixEc2NyOiJcdWQ4MzVcdWRjOWYiLERzdHJvazoiXHUwMTEwIixFTkc6Ilx1MDE0YSIsRVRIOiJceGQwIixFYWN1dGU6Ilx4YzkiLEVjYXJvbjoiXHUwMTFhIixFY2lyYzoiXHhjYSIsRWN5OiJcdTA0MmQiLEVkb3Q6Ilx1MDExNiIsRWZyOiJcdWQ4MzVcdWRkMDgiLEVncmF2ZToiXHhjOCIsRWxlbWVudDoiXHUyMjA4IixpbjoiXHUyMjA4Iixpc2luOiJcdTIyMDgiLGlzaW52OiJcdTIyMDgiLEVtYWNyOiJcdTAxMTIiLEVtcHR5U21hbGxTcXVhcmU6Ilx1MjVmYiIsRW1wdHlWZXJ5U21hbGxTcXVhcmU6Ilx1MjVhYiIsRW9nb246Ilx1MDExOCIsRW9wZjoiXHVkODM1XHVkZDNjIixFcHNpbG9uOiJcdTAzOTUiLEVxdWFsOiJcdTJhNzUiLEVxdWFsVGlsZGU6Ilx1MjI0MiIsZXFzaW06Ilx1MjI0MiIsZXNpbToiXHUyMjQyIixFcXVpbGlicml1bToiXHUyMWNjIixyaWdodGxlZnRoYXJwb29uczoiXHUyMWNjIixybGhhcjoiXHUyMWNjIixFc2NyOiJcdTIxMzAiLGV4cGVjdGF0aW9uOiJcdTIxMzAiLEVzaW06Ilx1MmE3MyIsRXRhOiJcdTAzOTciLEV1bWw6Ilx4Y2IiLEV4aXN0czoiXHUyMjAzIixleGlzdDoiXHUyMjAzIixFeHBvbmVudGlhbEU6Ilx1MjE0NyIsZWU6Ilx1MjE0NyIsZXhwb25lbnRpYWxlOiJcdTIxNDciLEZjeToiXHUwNDI0IixGZnI6Ilx1ZDgzNVx1ZGQwOSIsRmlsbGVkU21hbGxTcXVhcmU6Ilx1MjVmYyIsRmlsbGVkVmVyeVNtYWxsU3F1YXJlOiJcdTI1YWEiLGJsYWNrc3F1YXJlOiJcdTI1YWEiLHNxdWFyZjoiXHUyNWFhIixzcXVmOiJcdTI1YWEiLEZvcGY6Ilx1ZDgzNVx1ZGQzZCIsRm9yQWxsOiJcdTIyMDAiLGZvcmFsbDoiXHUyMjAwIixGb3VyaWVydHJmOiJcdTIxMzEiLEZzY3I6Ilx1MjEzMSIsR0pjeToiXHUwNDAzIixHVDoiPiIsZ3Q6Ij4iLEdhbW1hOiJcdTAzOTMiLEdhbW1hZDoiXHUwM2RjIixHYnJldmU6Ilx1MDExZSIsR2NlZGlsOiJcdTAxMjIiLEdjaXJjOiJcdTAxMWMiLEdjeToiXHUwNDEzIixHZG90OiJcdTAxMjAiLEdmcjoiXHVkODM1XHVkZDBhIixHZzoiXHUyMmQ5IixnZ2c6Ilx1MjJkOSIsR29wZjoiXHVkODM1XHVkZDNlIixHcmVhdGVyRXF1YWw6Ilx1MjI2NSIsZ2U6Ilx1MjI2NSIsZ2VxOiJcdTIyNjUiLEdyZWF0ZXJFcXVhbExlc3M6Ilx1MjJkYiIsZ2VsOiJcdTIyZGIiLGd0cmVxbGVzczoiXHUyMmRiIixHcmVhdGVyRnVsbEVxdWFsOiJcdTIyNjciLGdFOiJcdTIyNjciLGdlcXE6Ilx1MjI2NyIsR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMiIsR3JlYXRlckxlc3M6Ilx1MjI3NyIsZ2w6Ilx1MjI3NyIsZ3RybGVzczoiXHUyMjc3IixHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlIixnZXFzbGFudDoiXHUyYTdlIixnZXM6Ilx1MmE3ZSIsR3JlYXRlclRpbGRlOiJcdTIyNzMiLGdzaW06Ilx1MjI3MyIsZ3Ryc2ltOiJcdTIyNzMiLEdzY3I6Ilx1ZDgzNVx1ZGNhMiIsR3Q6Ilx1MjI2YiIsTmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MjI2YiIsZ2c6Ilx1MjI2YiIsSEFSRGN5OiJcdTA0MmEiLEhhY2VrOiJcdTAyYzciLGNhcm9uOiJcdTAyYzciLEhhdDoiXiIsSGNpcmM6Ilx1MDEyNCIsSGZyOiJcdTIxMGMiLFBvaW5jYXJlcGxhbmU6Ilx1MjEwYyIsSGlsYmVydFNwYWNlOiJcdTIxMGIiLEhzY3I6Ilx1MjEwYiIsaGFtaWx0OiJcdTIxMGIiLEhvcGY6Ilx1MjEwZCIscXVhdGVybmlvbnM6Ilx1MjEwZCIsSG9yaXpvbnRhbExpbmU6Ilx1MjUwMCIsYm94aDoiXHUyNTAwIixIc3Ryb2s6Ilx1MDEyNiIsSHVtcEVxdWFsOiJcdTIyNGYiLGJ1bXBlOiJcdTIyNGYiLGJ1bXBlcToiXHUyMjRmIixJRWN5OiJcdTA0MTUiLElKbGlnOiJcdTAxMzIiLElPY3k6Ilx1MDQwMSIsSWFjdXRlOiJceGNkIixJY2lyYzoiXHhjZSIsSWN5OiJcdTA0MTgiLElkb3Q6Ilx1MDEzMCIsSWZyOiJcdTIxMTEiLEltOiJcdTIxMTEiLGltYWdlOiJcdTIxMTEiLGltYWdwYXJ0OiJcdTIxMTEiLElncmF2ZToiXHhjYyIsSW1hY3I6Ilx1MDEyYSIsSW1hZ2luYXJ5SToiXHUyMTQ4IixpaToiXHUyMTQ4IixJbnQ6Ilx1MjIyYyIsSW50ZWdyYWw6Ilx1MjIyYiIsaW50OiJcdTIyMmIiLEludGVyc2VjdGlvbjoiXHUyMmMyIixiaWdjYXA6Ilx1MjJjMiIseGNhcDoiXHUyMmMyIixJbnZpc2libGVDb21tYToiXHUyMDYzIixpYzoiXHUyMDYzIixJbnZpc2libGVUaW1lczoiXHUyMDYyIixpdDoiXHUyMDYyIixJb2dvbjoiXHUwMTJlIixJb3BmOiJcdWQ4MzVcdWRkNDAiLElvdGE6Ilx1MDM5OSIsSXNjcjoiXHUyMTEwIixpbWFnbGluZToiXHUyMTEwIixJdGlsZGU6Ilx1MDEyOCIsSXVrY3k6Ilx1MDQwNiIsSXVtbDoiXHhjZiIsSmNpcmM6Ilx1MDEzNCIsSmN5OiJcdTA0MTkiLEpmcjoiXHVkODM1XHVkZDBkIixKb3BmOiJcdWQ4MzVcdWRkNDEiLEpzY3I6Ilx1ZDgzNVx1ZGNhNSIsSnNlcmN5OiJcdTA0MDgiLEp1a2N5OiJcdTA0MDQiLEtIY3k6Ilx1MDQyNSIsS0pjeToiXHUwNDBjIixLYXBwYToiXHUwMzlhIixLY2VkaWw6Ilx1MDEzNiIsS2N5OiJcdTA0MWEiLEtmcjoiXHVkODM1XHVkZDBlIixLb3BmOiJcdWQ4MzVcdWRkNDIiLEtzY3I6Ilx1ZDgzNVx1ZGNhNiIsTEpjeToiXHUwNDA5IixMVDoiPCIsbHQ6IjwiLExhY3V0ZToiXHUwMTM5IixMYW1iZGE6Ilx1MDM5YiIsTGFuZzoiXHUyN2VhIixMYXBsYWNldHJmOiJcdTIxMTIiLExzY3I6Ilx1MjExMiIsbGFncmFuOiJcdTIxMTIiLExhcnI6Ilx1MjE5ZSIsdHdvaGVhZGxlZnRhcnJvdzoiXHUyMTllIixMY2Fyb246Ilx1MDEzZCIsTGNlZGlsOiJcdTAxM2IiLExjeToiXHUwNDFiIixMZWZ0QW5nbGVCcmFja2V0OiJcdTI3ZTgiLGxhbmc6Ilx1MjdlOCIsbGFuZ2xlOiJcdTI3ZTgiLExlZnRBcnJvdzoiXHUyMTkwIixTaG9ydExlZnRBcnJvdzoiXHUyMTkwIixsYXJyOiJcdTIxOTAiLGxlZnRhcnJvdzoiXHUyMTkwIixzbGFycjoiXHUyMTkwIixMZWZ0QXJyb3dCYXI6Ilx1MjFlNCIsbGFycmI6Ilx1MjFlNCIsTGVmdEFycm93UmlnaHRBcnJvdzoiXHUyMWM2IixsZWZ0cmlnaHRhcnJvd3M6Ilx1MjFjNiIsbHJhcnI6Ilx1MjFjNiIsTGVmdENlaWxpbmc6Ilx1MjMwOCIsbGNlaWw6Ilx1MjMwOCIsTGVmdERvdWJsZUJyYWNrZXQ6Ilx1MjdlNiIsbG9icms6Ilx1MjdlNiIsTGVmdERvd25UZWVWZWN0b3I6Ilx1Mjk2MSIsTGVmdERvd25WZWN0b3I6Ilx1MjFjMyIsZGhhcmw6Ilx1MjFjMyIsZG93bmhhcnBvb25sZWZ0OiJcdTIxYzMiLExlZnREb3duVmVjdG9yQmFyOiJcdTI5NTkiLExlZnRGbG9vcjoiXHUyMzBhIixsZmxvb3I6Ilx1MjMwYSIsTGVmdFJpZ2h0QXJyb3c6Ilx1MjE5NCIsaGFycjoiXHUyMTk0IixsZWZ0cmlnaHRhcnJvdzoiXHUyMTk0IixMZWZ0UmlnaHRWZWN0b3I6Ilx1Mjk0ZSIsTGVmdFRlZToiXHUyMmEzIixkYXNodjoiXHUyMmEzIixMZWZ0VGVlQXJyb3c6Ilx1MjFhNCIsbWFwc3RvbGVmdDoiXHUyMWE0IixMZWZ0VGVlVmVjdG9yOiJcdTI5NWEiLExlZnRUcmlhbmdsZToiXHUyMmIyIix2YXJ0cmlhbmdsZWxlZnQ6Ilx1MjJiMiIsdmx0cmk6Ilx1MjJiMiIsTGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2YiLExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyYjQiLGx0cmllOiJcdTIyYjQiLHRyaWFuZ2xlbGVmdGVxOiJcdTIyYjQiLExlZnRVcERvd25WZWN0b3I6Ilx1Mjk1MSIsTGVmdFVwVGVlVmVjdG9yOiJcdTI5NjAiLExlZnRVcFZlY3RvcjoiXHUyMWJmIix1aGFybDoiXHUyMWJmIix1cGhhcnBvb25sZWZ0OiJcdTIxYmYiLExlZnRVcFZlY3RvckJhcjoiXHUyOTU4IixMZWZ0VmVjdG9yOiJcdTIxYmMiLGxlZnRoYXJwb29udXA6Ilx1MjFiYyIsbGhhcnU6Ilx1MjFiYyIsTGVmdFZlY3RvckJhcjoiXHUyOTUyIixMZXNzRXF1YWxHcmVhdGVyOiJcdTIyZGEiLGxlZzoiXHUyMmRhIixsZXNzZXFndHI6Ilx1MjJkYSIsTGVzc0Z1bGxFcXVhbDoiXHUyMjY2IixsRToiXHUyMjY2IixsZXFxOiJcdTIyNjYiLExlc3NHcmVhdGVyOiJcdTIyNzYiLGxlc3NndHI6Ilx1MjI3NiIsbGc6Ilx1MjI3NiIsTGVzc0xlc3M6Ilx1MmFhMSIsTGVzc1NsYW50RXF1YWw6Ilx1MmE3ZCIsbGVxc2xhbnQ6Ilx1MmE3ZCIsbGVzOiJcdTJhN2QiLExlc3NUaWxkZToiXHUyMjcyIixsZXNzc2ltOiJcdTIyNzIiLGxzaW06Ilx1MjI3MiIsTGZyOiJcdWQ4MzVcdWRkMGYiLExsOiJcdTIyZDgiLExsZWZ0YXJyb3c6Ilx1MjFkYSIsbEFhcnI6Ilx1MjFkYSIsTG1pZG90OiJcdTAxM2YiLExvbmdMZWZ0QXJyb3c6Ilx1MjdmNSIsbG9uZ2xlZnRhcnJvdzoiXHUyN2Y1Iix4bGFycjoiXHUyN2Y1IixMb25nTGVmdFJpZ2h0QXJyb3c6Ilx1MjdmNyIsbG9uZ2xlZnRyaWdodGFycm93OiJcdTI3ZjciLHhoYXJyOiJcdTI3ZjciLExvbmdSaWdodEFycm93OiJcdTI3ZjYiLGxvbmdyaWdodGFycm93OiJcdTI3ZjYiLHhyYXJyOiJcdTI3ZjYiLExvcGY6Ilx1ZDgzNVx1ZGQ0MyIsTG93ZXJMZWZ0QXJyb3c6Ilx1MjE5OSIsc3dhcnI6Ilx1MjE5OSIsc3dhcnJvdzoiXHUyMTk5IixMb3dlclJpZ2h0QXJyb3c6Ilx1MjE5OCIsc2VhcnI6Ilx1MjE5OCIsc2VhcnJvdzoiXHUyMTk4IixMc2g6Ilx1MjFiMCIsbHNoOiJcdTIxYjAiLExzdHJvazoiXHUwMTQxIixMdDoiXHUyMjZhIixOZXN0ZWRMZXNzTGVzczoiXHUyMjZhIixsbDoiXHUyMjZhIixNYXA6Ilx1MjkwNSIsTWN5OiJcdTA0MWMiLE1lZGl1bVNwYWNlOiJcdTIwNWYiLE1lbGxpbnRyZjoiXHUyMTMzIixNc2NyOiJcdTIxMzMiLHBobW1hdDoiXHUyMTMzIixNZnI6Ilx1ZDgzNVx1ZGQxMCIsTWludXNQbHVzOiJcdTIyMTMiLG1ucGx1czoiXHUyMjEzIixtcDoiXHUyMjEzIixNb3BmOiJcdWQ4MzVcdWRkNDQiLE11OiJcdTAzOWMiLE5KY3k6Ilx1MDQwYSIsTmFjdXRlOiJcdTAxNDMiLE5jYXJvbjoiXHUwMTQ3IixOY2VkaWw6Ilx1MDE0NSIsTmN5OiJcdTA0MWQiLE5lZ2F0aXZlTWVkaXVtU3BhY2U6Ilx1MjAwYiIsTmVnYXRpdmVUaGlja1NwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVGhpblNwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVmVyeVRoaW5TcGFjZToiXHUyMDBiIixaZXJvV2lkdGhTcGFjZToiXHUyMDBiIixOZXdMaW5lOiJcbiIsTmZyOiJcdWQ4MzVcdWRkMTEiLE5vQnJlYWs6Ilx1MjA2MCIsTm9uQnJlYWtpbmdTcGFjZToiXHhhMCIsbmJzcDoiXHhhMCIsTm9wZjoiXHUyMTE1IixuYXR1cmFsczoiXHUyMTE1IixOb3Q6Ilx1MmFlYyIsTm90Q29uZ3J1ZW50OiJcdTIyNjIiLG5lcXVpdjoiXHUyMjYyIixOb3RDdXBDYXA6Ilx1MjI2ZCIsTm90RG91YmxlVmVydGljYWxCYXI6Ilx1MjIyNiIsbnBhcjoiXHUyMjI2IixucGFyYWxsZWw6Ilx1MjIyNiIsbnNob3J0cGFyYWxsZWw6Ilx1MjIyNiIsbnNwYXI6Ilx1MjIyNiIsTm90RWxlbWVudDoiXHUyMjA5Iixub3RpbjoiXHUyMjA5Iixub3RpbnZhOiJcdTIyMDkiLE5vdEVxdWFsOiJcdTIyNjAiLG5lOiJcdTIyNjAiLE5vdEVxdWFsVGlsZGU6Ilx1MjI0Mlx1MDMzOCIsbmVzaW06Ilx1MjI0Mlx1MDMzOCIsTm90RXhpc3RzOiJcdTIyMDQiLG5leGlzdDoiXHUyMjA0IixuZXhpc3RzOiJcdTIyMDQiLE5vdEdyZWF0ZXI6Ilx1MjI2ZiIsbmd0OiJcdTIyNmYiLG5ndHI6Ilx1MjI2ZiIsTm90R3JlYXRlckVxdWFsOiJcdTIyNzEiLG5nZToiXHUyMjcxIixuZ2VxOiJcdTIyNzEiLE5vdEdyZWF0ZXJGdWxsRXF1YWw6Ilx1MjI2N1x1MDMzOCIsbmdFOiJcdTIyNjdcdTAzMzgiLG5nZXFxOiJcdTIyNjdcdTAzMzgiLE5vdEdyZWF0ZXJHcmVhdGVyOiJcdTIyNmJcdTAzMzgiLG5HdHY6Ilx1MjI2Ylx1MDMzOCIsTm90R3JlYXRlckxlc3M6Ilx1MjI3OSIsbnRnbDoiXHUyMjc5IixOb3RHcmVhdGVyU2xhbnRFcXVhbDoiXHUyYTdlXHUwMzM4IixuZ2Vxc2xhbnQ6Ilx1MmE3ZVx1MDMzOCIsbmdlczoiXHUyYTdlXHUwMzM4IixOb3RHcmVhdGVyVGlsZGU6Ilx1MjI3NSIsbmdzaW06Ilx1MjI3NSIsTm90SHVtcERvd25IdW1wOiJcdTIyNGVcdTAzMzgiLG5idW1wOiJcdTIyNGVcdTAzMzgiLE5vdEh1bXBFcXVhbDoiXHUyMjRmXHUwMzM4IixuYnVtcGU6Ilx1MjI0Zlx1MDMzOCIsTm90TGVmdFRyaWFuZ2xlOiJcdTIyZWEiLG5sdHJpOiJcdTIyZWEiLG50cmlhbmdsZWxlZnQ6Ilx1MjJlYSIsTm90TGVmdFRyaWFuZ2xlQmFyOiJcdTI5Y2ZcdTAzMzgiLE5vdExlZnRUcmlhbmdsZUVxdWFsOiJcdTIyZWMiLG5sdHJpZToiXHUyMmVjIixudHJpYW5nbGVsZWZ0ZXE6Ilx1MjJlYyIsTm90TGVzczoiXHUyMjZlIixubGVzczoiXHUyMjZlIixubHQ6Ilx1MjI2ZSIsTm90TGVzc0VxdWFsOiJcdTIyNzAiLG5sZToiXHUyMjcwIixubGVxOiJcdTIyNzAiLE5vdExlc3NHcmVhdGVyOiJcdTIyNzgiLG50bGc6Ilx1MjI3OCIsTm90TGVzc0xlc3M6Ilx1MjI2YVx1MDMzOCIsbkx0djoiXHUyMjZhXHUwMzM4IixOb3RMZXNzU2xhbnRFcXVhbDoiXHUyYTdkXHUwMzM4IixubGVxc2xhbnQ6Ilx1MmE3ZFx1MDMzOCIsbmxlczoiXHUyYTdkXHUwMzM4IixOb3RMZXNzVGlsZGU6Ilx1MjI3NCIsbmxzaW06Ilx1MjI3NCIsTm90TmVzdGVkR3JlYXRlckdyZWF0ZXI6Ilx1MmFhMlx1MDMzOCIsTm90TmVzdGVkTGVzc0xlc3M6Ilx1MmFhMVx1MDMzOCIsTm90UHJlY2VkZXM6Ilx1MjI4MCIsbnByOiJcdTIyODAiLG5wcmVjOiJcdTIyODAiLE5vdFByZWNlZGVzRXF1YWw6Ilx1MmFhZlx1MDMzOCIsbnByZToiXHUyYWFmXHUwMzM4IixucHJlY2VxOiJcdTJhYWZcdTAzMzgiLE5vdFByZWNlZGVzU2xhbnRFcXVhbDoiXHUyMmUwIixucHJjdWU6Ilx1MjJlMCIsTm90UmV2ZXJzZUVsZW1lbnQ6Ilx1MjIwYyIsbm90bmk6Ilx1MjIwYyIsbm90bml2YToiXHUyMjBjIixOb3RSaWdodFRyaWFuZ2xlOiJcdTIyZWIiLG5ydHJpOiJcdTIyZWIiLG50cmlhbmdsZXJpZ2h0OiJcdTIyZWIiLE5vdFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMFx1MDMzOCIsTm90UmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyZWQiLG5ydHJpZToiXHUyMmVkIixudHJpYW5nbGVyaWdodGVxOiJcdTIyZWQiLE5vdFNxdWFyZVN1YnNldDoiXHUyMjhmXHUwMzM4IixOb3RTcXVhcmVTdWJzZXRFcXVhbDoiXHUyMmUyIixuc3FzdWJlOiJcdTIyZTIiLE5vdFNxdWFyZVN1cGVyc2V0OiJcdTIyOTBcdTAzMzgiLE5vdFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjJlMyIsbnNxc3VwZToiXHUyMmUzIixOb3RTdWJzZXQ6Ilx1MjI4Mlx1MjBkMiIsbnN1YnNldDoiXHUyMjgyXHUyMGQyIix2bnN1YjoiXHUyMjgyXHUyMGQyIixOb3RTdWJzZXRFcXVhbDoiXHUyMjg4Iixuc3ViZToiXHUyMjg4Iixuc3Vic2V0ZXE6Ilx1MjI4OCIsTm90U3VjY2VlZHM6Ilx1MjI4MSIsbnNjOiJcdTIyODEiLG5zdWNjOiJcdTIyODEiLE5vdFN1Y2NlZWRzRXF1YWw6Ilx1MmFiMFx1MDMzOCIsbnNjZToiXHUyYWIwXHUwMzM4Iixuc3VjY2VxOiJcdTJhYjBcdTAzMzgiLE5vdFN1Y2NlZWRzU2xhbnRFcXVhbDoiXHUyMmUxIixuc2NjdWU6Ilx1MjJlMSIsTm90U3VjY2VlZHNUaWxkZToiXHUyMjdmXHUwMzM4IixOb3RTdXBlcnNldDoiXHUyMjgzXHUyMGQyIixuc3Vwc2V0OiJcdTIyODNcdTIwZDIiLHZuc3VwOiJcdTIyODNcdTIwZDIiLE5vdFN1cGVyc2V0RXF1YWw6Ilx1MjI4OSIsbnN1cGU6Ilx1MjI4OSIsbnN1cHNldGVxOiJcdTIyODkiLE5vdFRpbGRlOiJcdTIyNDEiLG5zaW06Ilx1MjI0MSIsTm90VGlsZGVFcXVhbDoiXHUyMjQ0Iixuc2ltZToiXHUyMjQ0Iixuc2ltZXE6Ilx1MjI0NCIsTm90VGlsZGVGdWxsRXF1YWw6Ilx1MjI0NyIsbmNvbmc6Ilx1MjI0NyIsTm90VGlsZGVUaWxkZToiXHUyMjQ5IixuYXA6Ilx1MjI0OSIsbmFwcHJveDoiXHUyMjQ5IixOb3RWZXJ0aWNhbEJhcjoiXHUyMjI0IixubWlkOiJcdTIyMjQiLG5zaG9ydG1pZDoiXHUyMjI0Iixuc21pZDoiXHUyMjI0IixOc2NyOiJcdWQ4MzVcdWRjYTkiLE50aWxkZToiXHhkMSIsTnU6Ilx1MDM5ZCIsT0VsaWc6Ilx1MDE1MiIsT2FjdXRlOiJceGQzIixPY2lyYzoiXHhkNCIsT2N5OiJcdTA0MWUiLE9kYmxhYzoiXHUwMTUwIixPZnI6Ilx1ZDgzNVx1ZGQxMiIsT2dyYXZlOiJceGQyIixPbWFjcjoiXHUwMTRjIixPbWVnYToiXHUwM2E5IixvaG06Ilx1MDNhOSIsT21pY3JvbjoiXHUwMzlmIixPb3BmOiJcdWQ4MzVcdWRkNDYiLE9wZW5DdXJseURvdWJsZVF1b3RlOiJcdTIwMWMiLGxkcXVvOiJcdTIwMWMiLE9wZW5DdXJseVF1b3RlOiJcdTIwMTgiLGxzcXVvOiJcdTIwMTgiLE9yOiJcdTJhNTQiLE9zY3I6Ilx1ZDgzNVx1ZGNhYSIsT3NsYXNoOiJceGQ4IixPdGlsZGU6Ilx4ZDUiLE90aW1lczoiXHUyYTM3IixPdW1sOiJceGQ2IixPdmVyQmFyOiJcdTIwM2UiLG9saW5lOiJcdTIwM2UiLE92ZXJCcmFjZToiXHUyM2RlIixPdmVyQnJhY2tldDoiXHUyM2I0Iix0YnJrOiJcdTIzYjQiLE92ZXJQYXJlbnRoZXNpczoiXHUyM2RjIixQYXJ0aWFsRDoiXHUyMjAyIixwYXJ0OiJcdTIyMDIiLFBjeToiXHUwNDFmIixQZnI6Ilx1ZDgzNVx1ZGQxMyIsUGhpOiJcdTAzYTYiLFBpOiJcdTAzYTAiLFBsdXNNaW51czoiXHhiMSIscGx1c21uOiJceGIxIixwbToiXHhiMSIsUG9wZjoiXHUyMTE5IixwcmltZXM6Ilx1MjExOSIsUHI6Ilx1MmFiYiIsUHJlY2VkZXM6Ilx1MjI3YSIscHI6Ilx1MjI3YSIscHJlYzoiXHUyMjdhIixQcmVjZWRlc0VxdWFsOiJcdTJhYWYiLHByZToiXHUyYWFmIixwcmVjZXE6Ilx1MmFhZiIsUHJlY2VkZXNTbGFudEVxdWFsOiJcdTIyN2MiLHByY3VlOiJcdTIyN2MiLHByZWNjdXJseWVxOiJcdTIyN2MiLFByZWNlZGVzVGlsZGU6Ilx1MjI3ZSIscHJlY3NpbToiXHUyMjdlIixwcnNpbToiXHUyMjdlIixQcmltZToiXHUyMDMzIixQcm9kdWN0OiJcdTIyMGYiLHByb2Q6Ilx1MjIwZiIsUHJvcG9ydGlvbmFsOiJcdTIyMWQiLHByb3A6Ilx1MjIxZCIscHJvcHRvOiJcdTIyMWQiLHZhcnByb3B0bzoiXHUyMjFkIix2cHJvcDoiXHUyMjFkIixQc2NyOiJcdWQ4MzVcdWRjYWIiLFBzaToiXHUwM2E4IixRVU9UOiciJyxxdW90OiciJyxRZnI6Ilx1ZDgzNVx1ZGQxNCIsUW9wZjoiXHUyMTFhIixyYXRpb25hbHM6Ilx1MjExYSIsUXNjcjoiXHVkODM1XHVkY2FjIixSQmFycjoiXHUyOTEwIixkcmJrYXJvdzoiXHUyOTEwIixSRUc6Ilx4YWUiLGNpcmNsZWRSOiJceGFlIixyZWc6Ilx4YWUiLFJhY3V0ZToiXHUwMTU0IixSYW5nOiJcdTI3ZWIiLFJhcnI6Ilx1MjFhMCIsdHdvaGVhZHJpZ2h0YXJyb3c6Ilx1MjFhMCIsUmFycnRsOiJcdTI5MTYiLFJjYXJvbjoiXHUwMTU4IixSY2VkaWw6Ilx1MDE1NiIsUmN5OiJcdTA0MjAiLFJlOiJcdTIxMWMiLFJmcjoiXHUyMTFjIixyZWFsOiJcdTIxMWMiLHJlYWxwYXJ0OiJcdTIxMWMiLFJldmVyc2VFbGVtZW50OiJcdTIyMGIiLFN1Y2hUaGF0OiJcdTIyMGIiLG5pOiJcdTIyMGIiLG5pdjoiXHUyMjBiIixSZXZlcnNlRXF1aWxpYnJpdW06Ilx1MjFjYiIsbGVmdHJpZ2h0aGFycG9vbnM6Ilx1MjFjYiIsbHJoYXI6Ilx1MjFjYiIsUmV2ZXJzZVVwRXF1aWxpYnJpdW06Ilx1Mjk2ZiIsZHVoYXI6Ilx1Mjk2ZiIsUmhvOiJcdTAzYTEiLFJpZ2h0QW5nbGVCcmFja2V0OiJcdTI3ZTkiLHJhbmc6Ilx1MjdlOSIscmFuZ2xlOiJcdTI3ZTkiLFJpZ2h0QXJyb3c6Ilx1MjE5MiIsU2hvcnRSaWdodEFycm93OiJcdTIxOTIiLHJhcnI6Ilx1MjE5MiIscmlnaHRhcnJvdzoiXHUyMTkyIixzcmFycjoiXHUyMTkyIixSaWdodEFycm93QmFyOiJcdTIxZTUiLHJhcnJiOiJcdTIxZTUiLFJpZ2h0QXJyb3dMZWZ0QXJyb3c6Ilx1MjFjNCIscmlnaHRsZWZ0YXJyb3dzOiJcdTIxYzQiLHJsYXJyOiJcdTIxYzQiLFJpZ2h0Q2VpbGluZzoiXHUyMzA5IixyY2VpbDoiXHUyMzA5IixSaWdodERvdWJsZUJyYWNrZXQ6Ilx1MjdlNyIscm9icms6Ilx1MjdlNyIsUmlnaHREb3duVGVlVmVjdG9yOiJcdTI5NWQiLFJpZ2h0RG93blZlY3RvcjoiXHUyMWMyIixkaGFycjoiXHUyMWMyIixkb3duaGFycG9vbnJpZ2h0OiJcdTIxYzIiLFJpZ2h0RG93blZlY3RvckJhcjoiXHUyOTU1IixSaWdodEZsb29yOiJcdTIzMGIiLHJmbG9vcjoiXHUyMzBiIixSaWdodFRlZToiXHUyMmEyIix2ZGFzaDoiXHUyMmEyIixSaWdodFRlZUFycm93OiJcdTIxYTYiLG1hcDoiXHUyMWE2IixtYXBzdG86Ilx1MjFhNiIsUmlnaHRUZWVWZWN0b3I6Ilx1Mjk1YiIsUmlnaHRUcmlhbmdsZToiXHUyMmIzIix2YXJ0cmlhbmdsZXJpZ2h0OiJcdTIyYjMiLHZydHJpOiJcdTIyYjMiLFJpZ2h0VHJpYW5nbGVCYXI6Ilx1MjlkMCIsUmlnaHRUcmlhbmdsZUVxdWFsOiJcdTIyYjUiLHJ0cmllOiJcdTIyYjUiLHRyaWFuZ2xlcmlnaHRlcToiXHUyMmI1IixSaWdodFVwRG93blZlY3RvcjoiXHUyOTRmIixSaWdodFVwVGVlVmVjdG9yOiJcdTI5NWMiLFJpZ2h0VXBWZWN0b3I6Ilx1MjFiZSIsdWhhcnI6Ilx1MjFiZSIsdXBoYXJwb29ucmlnaHQ6Ilx1MjFiZSIsUmlnaHRVcFZlY3RvckJhcjoiXHUyOTU0IixSaWdodFZlY3RvcjoiXHUyMWMwIixyaGFydToiXHUyMWMwIixyaWdodGhhcnBvb251cDoiXHUyMWMwIixSaWdodFZlY3RvckJhcjoiXHUyOTUzIixSb3BmOiJcdTIxMWQiLHJlYWxzOiJcdTIxMWQiLFJvdW5kSW1wbGllczoiXHUyOTcwIixScmlnaHRhcnJvdzoiXHUyMWRiIixyQWFycjoiXHUyMWRiIixSc2NyOiJcdTIxMWIiLHJlYWxpbmU6Ilx1MjExYiIsUnNoOiJcdTIxYjEiLHJzaDoiXHUyMWIxIixSdWxlRGVsYXllZDoiXHUyOWY0IixTSENIY3k6Ilx1MDQyOSIsU0hjeToiXHUwNDI4IixTT0ZUY3k6Ilx1MDQyYyIsU2FjdXRlOiJcdTAxNWEiLFNjOiJcdTJhYmMiLFNjYXJvbjoiXHUwMTYwIixTY2VkaWw6Ilx1MDE1ZSIsU2NpcmM6Ilx1MDE1YyIsU2N5OiJcdTA0MjEiLFNmcjoiXHVkODM1XHVkZDE2IixTaG9ydFVwQXJyb3c6Ilx1MjE5MSIsVXBBcnJvdzoiXHUyMTkxIix1YXJyOiJcdTIxOTEiLHVwYXJyb3c6Ilx1MjE5MSIsU2lnbWE6Ilx1MDNhMyIsU21hbGxDaXJjbGU6Ilx1MjIxOCIsY29tcGZuOiJcdTIyMTgiLFNvcGY6Ilx1ZDgzNVx1ZGQ0YSIsU3FydDoiXHUyMjFhIixyYWRpYzoiXHUyMjFhIixTcXVhcmU6Ilx1MjVhMSIsc3F1OiJcdTI1YTEiLHNxdWFyZToiXHUyNWExIixTcXVhcmVJbnRlcnNlY3Rpb246Ilx1MjI5MyIsc3FjYXA6Ilx1MjI5MyIsU3F1YXJlU3Vic2V0OiJcdTIyOGYiLHNxc3ViOiJcdTIyOGYiLHNxc3Vic2V0OiJcdTIyOGYiLFNxdWFyZVN1YnNldEVxdWFsOiJcdTIyOTEiLHNxc3ViZToiXHUyMjkxIixzcXN1YnNldGVxOiJcdTIyOTEiLFNxdWFyZVN1cGVyc2V0OiJcdTIyOTAiLHNxc3VwOiJcdTIyOTAiLHNxc3Vwc2V0OiJcdTIyOTAiLFNxdWFyZVN1cGVyc2V0RXF1YWw6Ilx1MjI5MiIsc3FzdXBlOiJcdTIyOTIiLHNxc3Vwc2V0ZXE6Ilx1MjI5MiIsU3F1YXJlVW5pb246Ilx1MjI5NCIsc3FjdXA6Ilx1MjI5NCIsU3NjcjoiXHVkODM1XHVkY2FlIixTdGFyOiJcdTIyYzYiLHNzdGFyZjoiXHUyMmM2IixTdWI6Ilx1MjJkMCIsU3Vic2V0OiJcdTIyZDAiLFN1YnNldEVxdWFsOiJcdTIyODYiLHN1YmU6Ilx1MjI4NiIsc3Vic2V0ZXE6Ilx1MjI4NiIsU3VjY2VlZHM6Ilx1MjI3YiIsc2M6Ilx1MjI3YiIsc3VjYzoiXHUyMjdiIixTdWNjZWVkc0VxdWFsOiJcdTJhYjAiLHNjZToiXHUyYWIwIixzdWNjZXE6Ilx1MmFiMCIsU3VjY2VlZHNTbGFudEVxdWFsOiJcdTIyN2QiLHNjY3VlOiJcdTIyN2QiLHN1Y2NjdXJseWVxOiJcdTIyN2QiLFN1Y2NlZWRzVGlsZGU6Ilx1MjI3ZiIsc2NzaW06Ilx1MjI3ZiIsc3VjY3NpbToiXHUyMjdmIixTdW06Ilx1MjIxMSIsc3VtOiJcdTIyMTEiLFN1cDoiXHUyMmQxIixTdXBzZXQ6Ilx1MjJkMSIsU3VwZXJzZXQ6Ilx1MjI4MyIsc3VwOiJcdTIyODMiLHN1cHNldDoiXHUyMjgzIixTdXBlcnNldEVxdWFsOiJcdTIyODciLHN1cGU6Ilx1MjI4NyIsc3Vwc2V0ZXE6Ilx1MjI4NyIsVEhPUk46Ilx4ZGUiLFRSQURFOiJcdTIxMjIiLHRyYWRlOiJcdTIxMjIiLFRTSGN5OiJcdTA0MGIiLFRTY3k6Ilx1MDQyNiIsVGFiOiJcdCIsVGF1OiJcdTAzYTQiLFRjYXJvbjoiXHUwMTY0IixUY2VkaWw6Ilx1MDE2MiIsVGN5OiJcdTA0MjIiLFRmcjoiXHVkODM1XHVkZDE3IixUaGVyZWZvcmU6Ilx1MjIzNCIsdGhlcmU0OiJcdTIyMzQiLHRoZXJlZm9yZToiXHUyMjM0IixUaGV0YToiXHUwMzk4IixUaGlja1NwYWNlOiJcdTIwNWZcdTIwMGEiLFRoaW5TcGFjZToiXHUyMDA5Iix0aGluc3A6Ilx1MjAwOSIsVGlsZGU6Ilx1MjIzYyIsc2ltOiJcdTIyM2MiLHRoaWNrc2ltOiJcdTIyM2MiLHRoa3NpbToiXHUyMjNjIixUaWxkZUVxdWFsOiJcdTIyNDMiLHNpbWU6Ilx1MjI0MyIsc2ltZXE6Ilx1MjI0MyIsVGlsZGVGdWxsRXF1YWw6Ilx1MjI0NSIsY29uZzoiXHUyMjQ1IixUaWxkZVRpbGRlOiJcdTIyNDgiLGFwOiJcdTIyNDgiLGFwcHJveDoiXHUyMjQ4Iixhc3ltcDoiXHUyMjQ4Iix0aGlja2FwcHJveDoiXHUyMjQ4Iix0aGthcDoiXHUyMjQ4IixUb3BmOiJcdWQ4MzVcdWRkNGIiLFRyaXBsZURvdDoiXHUyMGRiIix0ZG90OiJcdTIwZGIiLFRzY3I6Ilx1ZDgzNVx1ZGNhZiIsVHN0cm9rOiJcdTAxNjYiLFVhY3V0ZToiXHhkYSIsVWFycjoiXHUyMTlmIixVYXJyb2NpcjoiXHUyOTQ5IixVYnJjeToiXHUwNDBlIixVYnJldmU6Ilx1MDE2YyIsVWNpcmM6Ilx4ZGIiLFVjeToiXHUwNDIzIixVZGJsYWM6Ilx1MDE3MCIsVWZyOiJcdWQ4MzVcdWRkMTgiLFVncmF2ZToiXHhkOSIsVW1hY3I6Ilx1MDE2YSIsVW5kZXJCYXI6Il8iLGxvd2JhcjoiXyIsVW5kZXJCcmFjZToiXHUyM2RmIixVbmRlckJyYWNrZXQ6Ilx1MjNiNSIsYmJyazoiXHUyM2I1IixVbmRlclBhcmVudGhlc2lzOiJcdTIzZGQiLFVuaW9uOiJcdTIyYzMiLGJpZ2N1cDoiXHUyMmMzIix4Y3VwOiJcdTIyYzMiLFVuaW9uUGx1czoiXHUyMjhlIix1cGx1czoiXHUyMjhlIixVb2dvbjoiXHUwMTcyIixVb3BmOiJcdWQ4MzVcdWRkNGMiLFVwQXJyb3dCYXI6Ilx1MjkxMiIsVXBBcnJvd0Rvd25BcnJvdzoiXHUyMWM1Iix1ZGFycjoiXHUyMWM1IixVcERvd25BcnJvdzoiXHUyMTk1Iix1cGRvd25hcnJvdzoiXHUyMTk1Iix2YXJyOiJcdTIxOTUiLFVwRXF1aWxpYnJpdW06Ilx1Mjk2ZSIsdWRoYXI6Ilx1Mjk2ZSIsVXBUZWU6Ilx1MjJhNSIsYm90OiJcdTIyYTUiLGJvdHRvbToiXHUyMmE1IixwZXJwOiJcdTIyYTUiLFVwVGVlQXJyb3c6Ilx1MjFhNSIsbWFwc3RvdXA6Ilx1MjFhNSIsVXBwZXJMZWZ0QXJyb3c6Ilx1MjE5NiIsbndhcnI6Ilx1MjE5NiIsbndhcnJvdzoiXHUyMTk2IixVcHBlclJpZ2h0QXJyb3c6Ilx1MjE5NyIsbmVhcnI6Ilx1MjE5NyIsbmVhcnJvdzoiXHUyMTk3IixVcHNpOiJcdTAzZDIiLHVwc2loOiJcdTAzZDIiLFVwc2lsb246Ilx1MDNhNSIsVXJpbmc6Ilx1MDE2ZSIsVXNjcjoiXHVkODM1XHVkY2IwIixVdGlsZGU6Ilx1MDE2OCIsVXVtbDoiXHhkYyIsVkRhc2g6Ilx1MjJhYiIsVmJhcjoiXHUyYWViIixWY3k6Ilx1MDQxMiIsVmRhc2g6Ilx1MjJhOSIsVmRhc2hsOiJcdTJhZTYiLFZlZToiXHUyMmMxIixiaWd2ZWU6Ilx1MjJjMSIseHZlZToiXHUyMmMxIixWZXJiYXI6Ilx1MjAxNiIsVmVydDoiXHUyMDE2IixWZXJ0aWNhbEJhcjoiXHUyMjIzIixtaWQ6Ilx1MjIyMyIsc2hvcnRtaWQ6Ilx1MjIyMyIsc21pZDoiXHUyMjIzIixWZXJ0aWNhbExpbmU6InwiLHZlcmJhcjoifCIsdmVydDoifCIsVmVydGljYWxTZXBhcmF0b3I6Ilx1Mjc1OCIsVmVydGljYWxUaWxkZToiXHUyMjQwIix3cjoiXHUyMjQwIix3cmVhdGg6Ilx1MjI0MCIsVmVyeVRoaW5TcGFjZToiXHUyMDBhIixoYWlyc3A6Ilx1MjAwYSIsVmZyOiJcdWQ4MzVcdWRkMTkiLFZvcGY6Ilx1ZDgzNVx1ZGQ0ZCIsVnNjcjoiXHVkODM1XHVkY2IxIixWdmRhc2g6Ilx1MjJhYSIsV2NpcmM6Ilx1MDE3NCIsV2VkZ2U6Ilx1MjJjMCIsYmlnd2VkZ2U6Ilx1MjJjMCIseHdlZGdlOiJcdTIyYzAiLFdmcjoiXHVkODM1XHVkZDFhIixXb3BmOiJcdWQ4MzVcdWRkNGUiLFdzY3I6Ilx1ZDgzNVx1ZGNiMiIsWGZyOiJcdWQ4MzVcdWRkMWIiLFhpOiJcdTAzOWUiLFhvcGY6Ilx1ZDgzNVx1ZGQ0ZiIsWHNjcjoiXHVkODM1XHVkY2IzIixZQWN5OiJcdTA0MmYiLFlJY3k6Ilx1MDQwNyIsWVVjeToiXHUwNDJlIixZYWN1dGU6Ilx4ZGQiLFljaXJjOiJcdTAxNzYiLFljeToiXHUwNDJiIixZZnI6Ilx1ZDgzNVx1ZGQxYyIsWW9wZjoiXHVkODM1XHVkZDUwIixZc2NyOiJcdWQ4MzVcdWRjYjQiLFl1bWw6Ilx1MDE3OCIsWkhjeToiXHUwNDE2IixaYWN1dGU6Ilx1MDE3OSIsWmNhcm9uOiJcdTAxN2QiLFpjeToiXHUwNDE3IixaZG90OiJcdTAxN2IiLFpldGE6Ilx1MDM5NiIsWmZyOiJcdTIxMjgiLHplZXRyZjoiXHUyMTI4Iixab3BmOiJcdTIxMjQiLGludGVnZXJzOiJcdTIxMjQiLFpzY3I6Ilx1ZDgzNVx1ZGNiNSIsYWFjdXRlOiJceGUxIixhYnJldmU6Ilx1MDEwMyIsYWM6Ilx1MjIzZSIsbXN0cG9zOiJcdTIyM2UiLGFjRToiXHUyMjNlXHUwMzMzIixhY2Q6Ilx1MjIzZiIsYWNpcmM6Ilx4ZTIiLGFjeToiXHUwNDMwIixhZWxpZzoiXHhlNiIsYWZyOiJcdWQ4MzVcdWRkMWUiLGFncmF2ZToiXHhlMCIsYWxlZnN5bToiXHUyMTM1IixhbGVwaDoiXHUyMTM1IixhbHBoYToiXHUwM2IxIixhbWFjcjoiXHUwMTAxIixhbWFsZzoiXHUyYTNmIixhbmQ6Ilx1MjIyNyIsd2VkZ2U6Ilx1MjIyNyIsYW5kYW5kOiJcdTJhNTUiLGFuZGQ6Ilx1MmE1YyIsYW5kc2xvcGU6Ilx1MmE1OCIsYW5kdjoiXHUyYTVhIixhbmc6Ilx1MjIyMCIsYW5nbGU6Ilx1MjIyMCIsYW5nZToiXHUyOWE0Iixhbmdtc2Q6Ilx1MjIyMSIsbWVhc3VyZWRhbmdsZToiXHUyMjIxIixhbmdtc2RhYToiXHUyOWE4Iixhbmdtc2RhYjoiXHUyOWE5Iixhbmdtc2RhYzoiXHUyOWFhIixhbmdtc2RhZDoiXHUyOWFiIixhbmdtc2RhZToiXHUyOWFjIixhbmdtc2RhZjoiXHUyOWFkIixhbmdtc2RhZzoiXHUyOWFlIixhbmdtc2RhaDoiXHUyOWFmIixhbmdydDoiXHUyMjFmIixhbmdydHZiOiJcdTIyYmUiLGFuZ3J0dmJkOiJcdTI5OWQiLGFuZ3NwaDoiXHUyMjIyIixhbmd6YXJyOiJcdTIzN2MiLGFvZ29uOiJcdTAxMDUiLGFvcGY6Ilx1ZDgzNVx1ZGQ1MiIsYXBFOiJcdTJhNzAiLGFwYWNpcjoiXHUyYTZmIixhcGU6Ilx1MjI0YSIsYXBwcm94ZXE6Ilx1MjI0YSIsYXBpZDoiXHUyMjRiIixhcG9zOiInIixhcmluZzoiXHhlNSIsYXNjcjoiXHVkODM1XHVkY2I2Iixhc3Q6IioiLG1pZGFzdDoiKiIsYXRpbGRlOiJceGUzIixhdW1sOiJceGU0Iixhd2ludDoiXHUyYTExIixiTm90OiJcdTJhZWQiLGJhY2tjb25nOiJcdTIyNGMiLGJjb25nOiJcdTIyNGMiLGJhY2tlcHNpbG9uOiJcdTAzZjYiLGJlcHNpOiJcdTAzZjYiLGJhY2twcmltZToiXHUyMDM1IixicHJpbWU6Ilx1MjAzNSIsYmFja3NpbToiXHUyMjNkIixic2ltOiJcdTIyM2QiLGJhY2tzaW1lcToiXHUyMmNkIixic2ltZToiXHUyMmNkIixiYXJ2ZWU6Ilx1MjJiZCIsYmFyd2VkOiJcdTIzMDUiLGJhcndlZGdlOiJcdTIzMDUiLGJicmt0YnJrOiJcdTIzYjYiLGJjeToiXHUwNDMxIixiZHF1bzoiXHUyMDFlIixsZHF1b3I6Ilx1MjAxZSIsYmVtcHR5djoiXHUyOWIwIixiZXRhOiJcdTAzYjIiLGJldGg6Ilx1MjEzNiIsYmV0d2VlbjoiXHUyMjZjIix0d2l4dDoiXHUyMjZjIixiZnI6Ilx1ZDgzNVx1ZGQxZiIsYmlnY2lyYzoiXHUyNWVmIix4Y2lyYzoiXHUyNWVmIixiaWdvZG90OiJcdTJhMDAiLHhvZG90OiJcdTJhMDAiLGJpZ29wbHVzOiJcdTJhMDEiLHhvcGx1czoiXHUyYTAxIixiaWdvdGltZXM6Ilx1MmEwMiIseG90aW1lOiJcdTJhMDIiLGJpZ3NxY3VwOiJcdTJhMDYiLHhzcWN1cDoiXHUyYTA2IixiaWdzdGFyOiJcdTI2MDUiLHN0YXJmOiJcdTI2MDUiLGJpZ3RyaWFuZ2xlZG93bjoiXHUyNWJkIix4ZHRyaToiXHUyNWJkIixiaWd0cmlhbmdsZXVwOiJcdTI1YjMiLHh1dHJpOiJcdTI1YjMiLGJpZ3VwbHVzOiJcdTJhMDQiLHh1cGx1czoiXHUyYTA0Iixia2Fyb3c6Ilx1MjkwZCIscmJhcnI6Ilx1MjkwZCIsYmxhY2tsb3plbmdlOiJcdTI5ZWIiLGxvemY6Ilx1MjllYiIsYmxhY2t0cmlhbmdsZToiXHUyNWI0Iix1dHJpZjoiXHUyNWI0IixibGFja3RyaWFuZ2xlZG93bjoiXHUyNWJlIixkdHJpZjoiXHUyNWJlIixibGFja3RyaWFuZ2xlbGVmdDoiXHUyNWMyIixsdHJpZjoiXHUyNWMyIixibGFja3RyaWFuZ2xlcmlnaHQ6Ilx1MjViOCIscnRyaWY6Ilx1MjViOCIsYmxhbms6Ilx1MjQyMyIsYmxrMTI6Ilx1MjU5MiIsYmxrMTQ6Ilx1MjU5MSIsYmxrMzQ6Ilx1MjU5MyIsYmxvY2s6Ilx1MjU4OCIsYm5lOiI9XHUyMGU1IixibmVxdWl2OiJcdTIyNjFcdTIwZTUiLGJub3Q6Ilx1MjMxMCIsYm9wZjoiXHVkODM1XHVkZDUzIixib3d0aWU6Ilx1MjJjOCIsYm94REw6Ilx1MjU1NyIsYm94RFI6Ilx1MjU1NCIsYm94RGw6Ilx1MjU1NiIsYm94RHI6Ilx1MjU1MyIsYm94SDoiXHUyNTUwIixib3hIRDoiXHUyNTY2Iixib3hIVToiXHUyNTY5Iixib3hIZDoiXHUyNTY0Iixib3hIdToiXHUyNTY3Iixib3hVTDoiXHUyNTVkIixib3hVUjoiXHUyNTVhIixib3hVbDoiXHUyNTVjIixib3hVcjoiXHUyNTU5Iixib3hWOiJcdTI1NTEiLGJveFZIOiJcdTI1NmMiLGJveFZMOiJcdTI1NjMiLGJveFZSOiJcdTI1NjAiLGJveFZoOiJcdTI1NmIiLGJveFZsOiJcdTI1NjIiLGJveFZyOiJcdTI1NWYiLGJveGJveDoiXHUyOWM5Iixib3hkTDoiXHUyNTU1Iixib3hkUjoiXHUyNTUyIixib3hkbDoiXHUyNTEwIixib3hkcjoiXHUyNTBjIixib3hoRDoiXHUyNTY1Iixib3hoVToiXHUyNTY4Iixib3hoZDoiXHUyNTJjIixib3hodToiXHUyNTM0Iixib3htaW51czoiXHUyMjlmIixtaW51c2I6Ilx1MjI5ZiIsYm94cGx1czoiXHUyMjllIixwbHVzYjoiXHUyMjllIixib3h0aW1lczoiXHUyMmEwIix0aW1lc2I6Ilx1MjJhMCIsYm94dUw6Ilx1MjU1YiIsYm94dVI6Ilx1MjU1OCIsYm94dWw6Ilx1MjUxOCIsYm94dXI6Ilx1MjUxNCIsYm94djoiXHUyNTAyIixib3h2SDoiXHUyNTZhIixib3h2TDoiXHUyNTYxIixib3h2UjoiXHUyNTVlIixib3h2aDoiXHUyNTNjIixib3h2bDoiXHUyNTI0Iixib3h2cjoiXHUyNTFjIixicnZiYXI6Ilx4YTYiLGJzY3I6Ilx1ZDgzNVx1ZGNiNyIsYnNlbWk6Ilx1MjA0ZiIsYnNvbDoiXFwiLGJzb2xiOiJcdTI5YzUiLGJzb2xoc3ViOiJcdTI3YzgiLGJ1bGw6Ilx1MjAyMiIsYnVsbGV0OiJcdTIwMjIiLGJ1bXBFOiJcdTJhYWUiLGNhY3V0ZToiXHUwMTA3IixjYXA6Ilx1MjIyOSIsY2FwYW5kOiJcdTJhNDQiLGNhcGJyY3VwOiJcdTJhNDkiLGNhcGNhcDoiXHUyYTRiIixjYXBjdXA6Ilx1MmE0NyIsY2FwZG90OiJcdTJhNDAiLGNhcHM6Ilx1MjIyOVx1ZmUwMCIsY2FyZXQ6Ilx1MjA0MSIsY2NhcHM6Ilx1MmE0ZCIsY2Nhcm9uOiJcdTAxMGQiLGNjZWRpbDoiXHhlNyIsY2NpcmM6Ilx1MDEwOSIsY2N1cHM6Ilx1MmE0YyIsY2N1cHNzbToiXHUyYTUwIixjZG90OiJcdTAxMGIiLGNlbXB0eXY6Ilx1MjliMiIsY2VudDoiXHhhMiIsY2ZyOiJcdWQ4MzVcdWRkMjAiLGNoY3k6Ilx1MDQ0NyIsY2hlY2s6Ilx1MjcxMyIsY2hlY2ttYXJrOiJcdTI3MTMiLGNoaToiXHUwM2M3IixjaXI6Ilx1MjVjYiIsY2lyRToiXHUyOWMzIixjaXJjOiJcdTAyYzYiLGNpcmNlcToiXHUyMjU3IixjaXJlOiJcdTIyNTciLGNpcmNsZWFycm93bGVmdDoiXHUyMWJhIixvbGFycjoiXHUyMWJhIixjaXJjbGVhcnJvd3JpZ2h0OiJcdTIxYmIiLG9yYXJyOiJcdTIxYmIiLGNpcmNsZWRTOiJcdTI0YzgiLG9TOiJcdTI0YzgiLGNpcmNsZWRhc3Q6Ilx1MjI5YiIsb2FzdDoiXHUyMjliIixjaXJjbGVkY2lyYzoiXHUyMjlhIixvY2lyOiJcdTIyOWEiLGNpcmNsZWRkYXNoOiJcdTIyOWQiLG9kYXNoOiJcdTIyOWQiLGNpcmZuaW50OiJcdTJhMTAiLGNpcm1pZDoiXHUyYWVmIixjaXJzY2lyOiJcdTI5YzIiLGNsdWJzOiJcdTI2NjMiLGNsdWJzdWl0OiJcdTI2NjMiLGNvbG9uOiI6Iixjb21tYToiLCIsY29tbWF0OiJAIixjb21wOiJcdTIyMDEiLGNvbXBsZW1lbnQ6Ilx1MjIwMSIsY29uZ2RvdDoiXHUyYTZkIixjb3BmOiJcdWQ4MzVcdWRkNTQiLGNvcHlzcjoiXHUyMTE3IixjcmFycjoiXHUyMWI1Iixjcm9zczoiXHUyNzE3Iixjc2NyOiJcdWQ4MzVcdWRjYjgiLGNzdWI6Ilx1MmFjZiIsY3N1YmU6Ilx1MmFkMSIsY3N1cDoiXHUyYWQwIixjc3VwZToiXHUyYWQyIixjdGRvdDoiXHUyMmVmIixjdWRhcnJsOiJcdTI5MzgiLGN1ZGFycnI6Ilx1MjkzNSIsY3VlcHI6Ilx1MjJkZSIsY3VybHllcXByZWM6Ilx1MjJkZSIsY3Vlc2M6Ilx1MjJkZiIsY3VybHllcXN1Y2M6Ilx1MjJkZiIsY3VsYXJyOiJcdTIxYjYiLGN1cnZlYXJyb3dsZWZ0OiJcdTIxYjYiLGN1bGFycnA6Ilx1MjkzZCIsY3VwOiJcdTIyMmEiLGN1cGJyY2FwOiJcdTJhNDgiLGN1cGNhcDoiXHUyYTQ2IixjdXBjdXA6Ilx1MmE0YSIsY3VwZG90OiJcdTIyOGQiLGN1cG9yOiJcdTJhNDUiLGN1cHM6Ilx1MjIyYVx1ZmUwMCIsY3VyYXJyOiJcdTIxYjciLGN1cnZlYXJyb3dyaWdodDoiXHUyMWI3IixjdXJhcnJtOiJcdTI5M2MiLGN1cmx5dmVlOiJcdTIyY2UiLGN1dmVlOiJcdTIyY2UiLGN1cmx5d2VkZ2U6Ilx1MjJjZiIsY3V3ZWQ6Ilx1MjJjZiIsY3VycmVuOiJceGE0Iixjd2ludDoiXHUyMjMxIixjeWxjdHk6Ilx1MjMyZCIsZEhhcjoiXHUyOTY1IixkYWdnZXI6Ilx1MjAyMCIsZGFsZXRoOiJcdTIxMzgiLGRhc2g6Ilx1MjAxMCIsaHlwaGVuOiJcdTIwMTAiLGRia2Fyb3c6Ilx1MjkwZiIsckJhcnI6Ilx1MjkwZiIsZGNhcm9uOiJcdTAxMGYiLGRjeToiXHUwNDM0IixkZGFycjoiXHUyMWNhIixkb3duZG93bmFycm93czoiXHUyMWNhIixkZG90c2VxOiJcdTJhNzciLGVERG90OiJcdTJhNzciLGRlZzoiXHhiMCIsZGVsdGE6Ilx1MDNiNCIsZGVtcHR5djoiXHUyOWIxIixkZmlzaHQ6Ilx1Mjk3ZiIsZGZyOiJcdWQ4MzVcdWRkMjEiLGRpYW1vbmRzdWl0OiJcdTI2NjYiLGRpYW1zOiJcdTI2NjYiLGRpZ2FtbWE6Ilx1MDNkZCIsZ2FtbWFkOiJcdTAzZGQiLGRpc2luOiJcdTIyZjIiLGRpdjoiXHhmNyIsZGl2aWRlOiJceGY3IixkaXZpZGVvbnRpbWVzOiJcdTIyYzciLGRpdm9ueDoiXHUyMmM3IixkamN5OiJcdTA0NTIiLGRsY29ybjoiXHUyMzFlIixsbGNvcm5lcjoiXHUyMzFlIixkbGNyb3A6Ilx1MjMwZCIsZG9sbGFyOiIkIixkb3BmOiJcdWQ4MzVcdWRkNTUiLGRvdGVxZG90OiJcdTIyNTEiLGVEb3Q6Ilx1MjI1MSIsZG90bWludXM6Ilx1MjIzOCIsbWludXNkOiJcdTIyMzgiLGRvdHBsdXM6Ilx1MjIxNCIscGx1c2RvOiJcdTIyMTQiLGRvdHNxdWFyZToiXHUyMmExIixzZG90YjoiXHUyMmExIixkcmNvcm46Ilx1MjMxZiIsbHJjb3JuZXI6Ilx1MjMxZiIsZHJjcm9wOiJcdTIzMGMiLGRzY3I6Ilx1ZDgzNVx1ZGNiOSIsZHNjeToiXHUwNDU1Iixkc29sOiJcdTI5ZjYiLGRzdHJvazoiXHUwMTExIixkdGRvdDoiXHUyMmYxIixkdHJpOiJcdTI1YmYiLHRyaWFuZ2xlZG93bjoiXHUyNWJmIixkd2FuZ2xlOiJcdTI5YTYiLGR6Y3k6Ilx1MDQ1ZiIsZHppZ3JhcnI6Ilx1MjdmZiIsZWFjdXRlOiJceGU5IixlYXN0ZXI6Ilx1MmE2ZSIsZWNhcm9uOiJcdTAxMWIiLGVjaXI6Ilx1MjI1NiIsZXFjaXJjOiJcdTIyNTYiLGVjaXJjOiJceGVhIixlY29sb246Ilx1MjI1NSIsZXFjb2xvbjoiXHUyMjU1IixlY3k6Ilx1MDQ0ZCIsZWRvdDoiXHUwMTE3IixlZkRvdDoiXHUyMjUyIixmYWxsaW5nZG90c2VxOiJcdTIyNTIiLGVmcjoiXHVkODM1XHVkZDIyIixlZzoiXHUyYTlhIixlZ3JhdmU6Ilx4ZTgiLGVnczoiXHUyYTk2IixlcXNsYW50Z3RyOiJcdTJhOTYiLGVnc2RvdDoiXHUyYTk4IixlbDoiXHUyYTk5IixlbGludGVyczoiXHUyM2U3IixlbGw6Ilx1MjExMyIsZWxzOiJcdTJhOTUiLGVxc2xhbnRsZXNzOiJcdTJhOTUiLGVsc2RvdDoiXHUyYTk3IixlbWFjcjoiXHUwMTEzIixlbXB0eToiXHUyMjA1IixlbXB0eXNldDoiXHUyMjA1IixlbXB0eXY6Ilx1MjIwNSIsdmFybm90aGluZzoiXHUyMjA1IixlbXNwMTM6Ilx1MjAwNCIsZW1zcDE0OiJcdTIwMDUiLGVtc3A6Ilx1MjAwMyIsZW5nOiJcdTAxNGIiLGVuc3A6Ilx1MjAwMiIsZW9nb246Ilx1MDExOSIsZW9wZjoiXHVkODM1XHVkZDU2IixlcGFyOiJcdTIyZDUiLGVwYXJzbDoiXHUyOWUzIixlcGx1czoiXHUyYTcxIixlcHNpOiJcdTAzYjUiLGVwc2lsb246Ilx1MDNiNSIsZXBzaXY6Ilx1MDNmNSIsc3RyYWlnaHRlcHNpbG9uOiJcdTAzZjUiLHZhcmVwc2lsb246Ilx1MDNmNSIsZXF1YWxzOiI9IixlcXVlc3Q6Ilx1MjI1ZiIscXVlc3RlcToiXHUyMjVmIixlcXVpdkREOiJcdTJhNzgiLGVxdnBhcnNsOiJcdTI5ZTUiLGVyRG90OiJcdTIyNTMiLHJpc2luZ2RvdHNlcToiXHUyMjUzIixlcmFycjoiXHUyOTcxIixlc2NyOiJcdTIxMmYiLGV0YToiXHUwM2I3IixldGg6Ilx4ZjAiLGV1bWw6Ilx4ZWIiLGV1cm86Ilx1MjBhYyIsZXhjbDoiISIsZmN5OiJcdTA0NDQiLGZlbWFsZToiXHUyNjQwIixmZmlsaWc6Ilx1ZmIwMyIsZmZsaWc6Ilx1ZmIwMCIsZmZsbGlnOiJcdWZiMDQiLGZmcjoiXHVkODM1XHVkZDIzIixmaWxpZzoiXHVmYjAxIixmamxpZzoiZmoiLGZsYXQ6Ilx1MjY2ZCIsZmxsaWc6Ilx1ZmIwMiIsZmx0bnM6Ilx1MjViMSIsZm5vZjoiXHUwMTkyIixmb3BmOiJcdWQ4MzVcdWRkNTciLGZvcms6Ilx1MjJkNCIscGl0Y2hmb3JrOiJcdTIyZDQiLGZvcmt2OiJcdTJhZDkiLGZwYXJ0aW50OiJcdTJhMGQiLGZyYWMxMjoiXHhiZCIsaGFsZjoiXHhiZCIsZnJhYzEzOiJcdTIxNTMiLGZyYWMxNDoiXHhiYyIsZnJhYzE1OiJcdTIxNTUiLGZyYWMxNjoiXHUyMTU5IixmcmFjMTg6Ilx1MjE1YiIsZnJhYzIzOiJcdTIxNTQiLGZyYWMyNToiXHUyMTU2IixmcmFjMzQ6Ilx4YmUiLGZyYWMzNToiXHUyMTU3IixmcmFjMzg6Ilx1MjE1YyIsZnJhYzQ1OiJcdTIxNTgiLGZyYWM1NjoiXHUyMTVhIixmcmFjNTg6Ilx1MjE1ZCIsZnJhYzc4OiJcdTIxNWUiLGZyYXNsOiJcdTIwNDQiLGZyb3duOiJcdTIzMjIiLHNmcm93bjoiXHUyMzIyIixmc2NyOiJcdWQ4MzVcdWRjYmIiLGdFbDoiXHUyYThjIixndHJlcXFsZXNzOiJcdTJhOGMiLGdhY3V0ZToiXHUwMWY1IixnYW1tYToiXHUwM2IzIixnYXA6Ilx1MmE4NiIsZ3RyYXBwcm94OiJcdTJhODYiLGdicmV2ZToiXHUwMTFmIixnY2lyYzoiXHUwMTFkIixnY3k6Ilx1MDQzMyIsZ2RvdDoiXHUwMTIxIixnZXNjYzoiXHUyYWE5IixnZXNkb3Q6Ilx1MmE4MCIsZ2VzZG90bzoiXHUyYTgyIixnZXNkb3RvbDoiXHUyYTg0IixnZXNsOiJcdTIyZGJcdWZlMDAiLGdlc2xlczoiXHUyYTk0IixnZnI6Ilx1ZDgzNVx1ZGQyNCIsZ2ltZWw6Ilx1MjEzNyIsZ2pjeToiXHUwNDUzIixnbEU6Ilx1MmE5MiIsZ2xhOiJcdTJhYTUiLGdsajoiXHUyYWE0IixnbkU6Ilx1MjI2OSIsZ25lcXE6Ilx1MjI2OSIsZ25hcDoiXHUyYThhIixnbmFwcHJveDoiXHUyYThhIixnbmU6Ilx1MmE4OCIsZ25lcToiXHUyYTg4IixnbnNpbToiXHUyMmU3Iixnb3BmOiJcdWQ4MzVcdWRkNTgiLGdzY3I6Ilx1MjEwYSIsZ3NpbWU6Ilx1MmE4ZSIsZ3NpbWw6Ilx1MmE5MCIsZ3RjYzoiXHUyYWE3IixndGNpcjoiXHUyYTdhIixndGRvdDoiXHUyMmQ3IixndHJkb3Q6Ilx1MjJkNyIsZ3RsUGFyOiJcdTI5OTUiLGd0cXVlc3Q6Ilx1MmE3YyIsZ3RyYXJyOiJcdTI5NzgiLGd2ZXJ0bmVxcToiXHUyMjY5XHVmZTAwIixndm5FOiJcdTIyNjlcdWZlMDAiLGhhcmRjeToiXHUwNDRhIixoYXJyY2lyOiJcdTI5NDgiLGhhcnJ3OiJcdTIxYWQiLGxlZnRyaWdodHNxdWlnYXJyb3c6Ilx1MjFhZCIsaGJhcjoiXHUyMTBmIixoc2xhc2g6Ilx1MjEwZiIscGxhbmNrOiJcdTIxMGYiLHBsYW5rdjoiXHUyMTBmIixoY2lyYzoiXHUwMTI1IixoZWFydHM6Ilx1MjY2NSIsaGVhcnRzdWl0OiJcdTI2NjUiLGhlbGxpcDoiXHUyMDI2IixtbGRyOiJcdTIwMjYiLGhlcmNvbjoiXHUyMmI5IixoZnI6Ilx1ZDgzNVx1ZGQyNSIsaGtzZWFyb3c6Ilx1MjkyNSIsc2VhcmhrOiJcdTI5MjUiLGhrc3dhcm93OiJcdTI5MjYiLHN3YXJoazoiXHUyOTI2Iixob2FycjoiXHUyMWZmIixob210aHQ6Ilx1MjIzYiIsaG9va2xlZnRhcnJvdzoiXHUyMWE5IixsYXJyaGs6Ilx1MjFhOSIsaG9va3JpZ2h0YXJyb3c6Ilx1MjFhYSIscmFycmhrOiJcdTIxYWEiLGhvcGY6Ilx1ZDgzNVx1ZGQ1OSIsaG9yYmFyOiJcdTIwMTUiLGhzY3I6Ilx1ZDgzNVx1ZGNiZCIsaHN0cm9rOiJcdTAxMjciLGh5YnVsbDoiXHUyMDQzIixpYWN1dGU6Ilx4ZWQiLGljaXJjOiJceGVlIixpY3k6Ilx1MDQzOCIsaWVjeToiXHUwNDM1IixpZXhjbDoiXHhhMSIsaWZyOiJcdWQ4MzVcdWRkMjYiLGlncmF2ZToiXHhlYyIsaWlpaW50OiJcdTJhMGMiLHFpbnQ6Ilx1MmEwYyIsaWlpbnQ6Ilx1MjIyZCIsdGludDoiXHUyMjJkIixpaW5maW46Ilx1MjlkYyIsaWlvdGE6Ilx1MjEyOSIsaWpsaWc6Ilx1MDEzMyIsaW1hY3I6Ilx1MDEyYiIsaW1hdGg6Ilx1MDEzMSIsaW5vZG90OiJcdTAxMzEiLGltb2Y6Ilx1MjJiNyIsaW1wZWQ6Ilx1MDFiNSIsaW5jYXJlOiJcdTIxMDUiLGluZmluOiJcdTIyMWUiLGluZmludGllOiJcdTI5ZGQiLGludGNhbDoiXHUyMmJhIixpbnRlcmNhbDoiXHUyMmJhIixpbnRsYXJoazoiXHUyYTE3IixpbnRwcm9kOiJcdTJhM2MiLGlwcm9kOiJcdTJhM2MiLGlvY3k6Ilx1MDQ1MSIsaW9nb246Ilx1MDEyZiIsaW9wZjoiXHVkODM1XHVkZDVhIixpb3RhOiJcdTAzYjkiLGlxdWVzdDoiXHhiZiIsaXNjcjoiXHVkODM1XHVkY2JlIixpc2luRToiXHUyMmY5Iixpc2luZG90OiJcdTIyZjUiLGlzaW5zOiJcdTIyZjQiLGlzaW5zdjoiXHUyMmYzIixpdGlsZGU6Ilx1MDEyOSIsaXVrY3k6Ilx1MDQ1NiIsaXVtbDoiXHhlZiIsamNpcmM6Ilx1MDEzNSIsamN5OiJcdTA0MzkiLGpmcjoiXHVkODM1XHVkZDI3IixqbWF0aDoiXHUwMjM3Iixqb3BmOiJcdWQ4MzVcdWRkNWIiLGpzY3I6Ilx1ZDgzNVx1ZGNiZiIsanNlcmN5OiJcdTA0NTgiLGp1a2N5OiJcdTA0NTQiLGthcHBhOiJcdTAzYmEiLGthcHBhdjoiXHUwM2YwIix2YXJrYXBwYToiXHUwM2YwIixrY2VkaWw6Ilx1MDEzNyIsa2N5OiJcdTA0M2EiLGtmcjoiXHVkODM1XHVkZDI4IixrZ3JlZW46Ilx1MDEzOCIsa2hjeToiXHUwNDQ1IixramN5OiJcdTA0NWMiLGtvcGY6Ilx1ZDgzNVx1ZGQ1YyIsa3NjcjoiXHVkODM1XHVkY2MwIixsQXRhaWw6Ilx1MjkxYiIsbEJhcnI6Ilx1MjkwZSIsbEVnOiJcdTJhOGIiLGxlc3NlcXFndHI6Ilx1MmE4YiIsbEhhcjoiXHUyOTYyIixsYWN1dGU6Ilx1MDEzYSIsbGFlbXB0eXY6Ilx1MjliNCIsbGFtYmRhOiJcdTAzYmIiLGxhbmdkOiJcdTI5OTEiLGxhcDoiXHUyYTg1IixsZXNzYXBwcm94OiJcdTJhODUiLGxhcXVvOiJceGFiIixsYXJyYmZzOiJcdTI5MWYiLGxhcnJmczoiXHUyOTFkIixsYXJybHA6Ilx1MjFhYiIsbG9vcGFycm93bGVmdDoiXHUyMWFiIixsYXJycGw6Ilx1MjkzOSIsbGFycnNpbToiXHUyOTczIixsYXJydGw6Ilx1MjFhMiIsbGVmdGFycm93dGFpbDoiXHUyMWEyIixsYXQ6Ilx1MmFhYiIsbGF0YWlsOiJcdTI5MTkiLGxhdGU6Ilx1MmFhZCIsbGF0ZXM6Ilx1MmFhZFx1ZmUwMCIsbGJhcnI6Ilx1MjkwYyIsbGJicms6Ilx1Mjc3MiIsbGJyYWNlOiJ7IixsY3ViOiJ7IixsYnJhY2s6IlsiLGxzcWI6IlsiLGxicmtlOiJcdTI5OGIiLGxicmtzbGQ6Ilx1Mjk4ZiIsbGJya3NsdToiXHUyOThkIixsY2Fyb246Ilx1MDEzZSIsbGNlZGlsOiJcdTAxM2MiLGxjeToiXHUwNDNiIixsZGNhOiJcdTI5MzYiLGxkcmRoYXI6Ilx1Mjk2NyIsbGRydXNoYXI6Ilx1Mjk0YiIsbGRzaDoiXHUyMWIyIixsZToiXHUyMjY0IixsZXE6Ilx1MjI2NCIsbGVmdGxlZnRhcnJvd3M6Ilx1MjFjNyIsbGxhcnI6Ilx1MjFjNyIsbGVmdHRocmVldGltZXM6Ilx1MjJjYiIsbHRocmVlOiJcdTIyY2IiLGxlc2NjOiJcdTJhYTgiLGxlc2RvdDoiXHUyYTdmIixsZXNkb3RvOiJcdTJhODEiLGxlc2RvdG9yOiJcdTJhODMiLGxlc2c6Ilx1MjJkYVx1ZmUwMCIsbGVzZ2VzOiJcdTJhOTMiLGxlc3Nkb3Q6Ilx1MjJkNiIsbHRkb3Q6Ilx1MjJkNiIsbGZpc2h0OiJcdTI5N2MiLGxmcjoiXHVkODM1XHVkZDI5IixsZ0U6Ilx1MmE5MSIsbGhhcnVsOiJcdTI5NmEiLGxoYmxrOiJcdTI1ODQiLGxqY3k6Ilx1MDQ1OSIsbGxoYXJkOiJcdTI5NmIiLGxsdHJpOiJcdTI1ZmEiLGxtaWRvdDoiXHUwMTQwIixsbW91c3Q6Ilx1MjNiMCIsbG1vdXN0YWNoZToiXHUyM2IwIixsbkU6Ilx1MjI2OCIsbG5lcXE6Ilx1MjI2OCIsbG5hcDoiXHUyYTg5IixsbmFwcHJveDoiXHUyYTg5IixsbmU6Ilx1MmE4NyIsbG5lcToiXHUyYTg3IixsbnNpbToiXHUyMmU2Iixsb2FuZzoiXHUyN2VjIixsb2FycjoiXHUyMWZkIixsb25nbWFwc3RvOiJcdTI3ZmMiLHhtYXA6Ilx1MjdmYyIsbG9vcGFycm93cmlnaHQ6Ilx1MjFhYyIscmFycmxwOiJcdTIxYWMiLGxvcGFyOiJcdTI5ODUiLGxvcGY6Ilx1ZDgzNVx1ZGQ1ZCIsbG9wbHVzOiJcdTJhMmQiLGxvdGltZXM6Ilx1MmEzNCIsbG93YXN0OiJcdTIyMTciLGxvejoiXHUyNWNhIixsb3plbmdlOiJcdTI1Y2EiLGxwYXI6IigiLGxwYXJsdDoiXHUyOTkzIixscmhhcmQ6Ilx1Mjk2ZCIsbHJtOiJcdTIwMGUiLGxydHJpOiJcdTIyYmYiLGxzYXF1bzoiXHUyMDM5Iixsc2NyOiJcdWQ4MzVcdWRjYzEiLGxzaW1lOiJcdTJhOGQiLGxzaW1nOiJcdTJhOGYiLGxzcXVvcjoiXHUyMDFhIixzYnF1bzoiXHUyMDFhIixsc3Ryb2s6Ilx1MDE0MiIsbHRjYzoiXHUyYWE2IixsdGNpcjoiXHUyYTc5IixsdGltZXM6Ilx1MjJjOSIsbHRsYXJyOiJcdTI5NzYiLGx0cXVlc3Q6Ilx1MmE3YiIsbHRyUGFyOiJcdTI5OTYiLGx0cmk6Ilx1MjVjMyIsdHJpYW5nbGVsZWZ0OiJcdTI1YzMiLGx1cmRzaGFyOiJcdTI5NGEiLGx1cnVoYXI6Ilx1Mjk2NiIsbHZlcnRuZXFxOiJcdTIyNjhcdWZlMDAiLGx2bkU6Ilx1MjI2OFx1ZmUwMCIsbUREb3Q6Ilx1MjIzYSIsbWFjcjoiXHhhZiIsc3RybnM6Ilx4YWYiLG1hbGU6Ilx1MjY0MiIsbWFsdDoiXHUyNzIwIixtYWx0ZXNlOiJcdTI3MjAiLG1hcmtlcjoiXHUyNWFlIixtY29tbWE6Ilx1MmEyOSIsbWN5OiJcdTA0M2MiLG1kYXNoOiJcdTIwMTQiLG1mcjoiXHVkODM1XHVkZDJhIixtaG86Ilx1MjEyNyIsbWljcm86Ilx4YjUiLG1pZGNpcjoiXHUyYWYwIixtaW51czoiXHUyMjEyIixtaW51c2R1OiJcdTJhMmEiLG1sY3A6Ilx1MmFkYiIsbW9kZWxzOiJcdTIyYTciLG1vcGY6Ilx1ZDgzNVx1ZGQ1ZSIsbXNjcjoiXHVkODM1XHVkY2MyIixtdToiXHUwM2JjIixtdWx0aW1hcDoiXHUyMmI4IixtdW1hcDoiXHUyMmI4IixuR2c6Ilx1MjJkOVx1MDMzOCIsbkd0OiJcdTIyNmJcdTIwZDIiLG5MZWZ0YXJyb3c6Ilx1MjFjZCIsbmxBcnI6Ilx1MjFjZCIsbkxlZnRyaWdodGFycm93OiJcdTIxY2UiLG5oQXJyOiJcdTIxY2UiLG5MbDoiXHUyMmQ4XHUwMzM4IixuTHQ6Ilx1MjI2YVx1MjBkMiIsblJpZ2h0YXJyb3c6Ilx1MjFjZiIsbnJBcnI6Ilx1MjFjZiIsblZEYXNoOiJcdTIyYWYiLG5WZGFzaDoiXHUyMmFlIixuYWN1dGU6Ilx1MDE0NCIsbmFuZzoiXHUyMjIwXHUyMGQyIixuYXBFOiJcdTJhNzBcdTAzMzgiLG5hcGlkOiJcdTIyNGJcdTAzMzgiLG5hcG9zOiJcdTAxNDkiLG5hdHVyOiJcdTI2NmUiLG5hdHVyYWw6Ilx1MjY2ZSIsbmNhcDoiXHUyYTQzIixuY2Fyb246Ilx1MDE0OCIsbmNlZGlsOiJcdTAxNDYiLG5jb25nZG90OiJcdTJhNmRcdTAzMzgiLG5jdXA6Ilx1MmE0MiIsbmN5OiJcdTA0M2QiLG5kYXNoOiJcdTIwMTMiLG5lQXJyOiJcdTIxZDciLG5lYXJoazoiXHUyOTI0IixuZWRvdDoiXHUyMjUwXHUwMzM4IixuZXNlYXI6Ilx1MjkyOCIsdG9lYToiXHUyOTI4IixuZnI6Ilx1ZDgzNVx1ZGQyYiIsbmhhcnI6Ilx1MjFhZSIsbmxlZnRyaWdodGFycm93OiJcdTIxYWUiLG5ocGFyOiJcdTJhZjIiLG5pczoiXHUyMmZjIixuaXNkOiJcdTIyZmEiLG5qY3k6Ilx1MDQ1YSIsbmxFOiJcdTIyNjZcdTAzMzgiLG5sZXFxOiJcdTIyNjZcdTAzMzgiLG5sYXJyOiJcdTIxOWEiLG5sZWZ0YXJyb3c6Ilx1MjE5YSIsbmxkcjoiXHUyMDI1Iixub3BmOiJcdWQ4MzVcdWRkNWYiLG5vdDoiXHhhYyIsbm90aW5FOiJcdTIyZjlcdTAzMzgiLG5vdGluZG90OiJcdTIyZjVcdTAzMzgiLG5vdGludmI6Ilx1MjJmNyIsbm90aW52YzoiXHUyMmY2Iixub3RuaXZiOiJcdTIyZmUiLG5vdG5pdmM6Ilx1MjJmZCIsbnBhcnNsOiJcdTJhZmRcdTIwZTUiLG5wYXJ0OiJcdTIyMDJcdTAzMzgiLG5wb2xpbnQ6Ilx1MmExNCIsbnJhcnI6Ilx1MjE5YiIsbnJpZ2h0YXJyb3c6Ilx1MjE5YiIsbnJhcnJjOiJcdTI5MzNcdTAzMzgiLG5yYXJydzoiXHUyMTlkXHUwMzM4Iixuc2NyOiJcdWQ4MzVcdWRjYzMiLG5zdWI6Ilx1MjI4NCIsbnN1YkU6Ilx1MmFjNVx1MDMzOCIsbnN1YnNldGVxcToiXHUyYWM1XHUwMzM4Iixuc3VwOiJcdTIyODUiLG5zdXBFOiJcdTJhYzZcdTAzMzgiLG5zdXBzZXRlcXE6Ilx1MmFjNlx1MDMzOCIsbnRpbGRlOiJceGYxIixudToiXHUwM2JkIixudW06IiMiLG51bWVybzoiXHUyMTE2IixudW1zcDoiXHUyMDA3IixudkRhc2g6Ilx1MjJhZCIsbnZIYXJyOiJcdTI5MDQiLG52YXA6Ilx1MjI0ZFx1MjBkMiIsbnZkYXNoOiJcdTIyYWMiLG52Z2U6Ilx1MjI2NVx1MjBkMiIsbnZndDoiPlx1MjBkMiIsbnZpbmZpbjoiXHUyOWRlIixudmxBcnI6Ilx1MjkwMiIsbnZsZToiXHUyMjY0XHUyMGQyIixudmx0OiI8XHUyMGQyIixudmx0cmllOiJcdTIyYjRcdTIwZDIiLG52ckFycjoiXHUyOTAzIixudnJ0cmllOiJcdTIyYjVcdTIwZDIiLG52c2ltOiJcdTIyM2NcdTIwZDIiLG53QXJyOiJcdTIxZDYiLG53YXJoazoiXHUyOTIzIixud25lYXI6Ilx1MjkyNyIsb2FjdXRlOiJceGYzIixvY2lyYzoiXHhmNCIsb2N5OiJcdTA0M2UiLG9kYmxhYzoiXHUwMTUxIixvZGl2OiJcdTJhMzgiLG9kc29sZDoiXHUyOWJjIixvZWxpZzoiXHUwMTUzIixvZmNpcjoiXHUyOWJmIixvZnI6Ilx1ZDgzNVx1ZGQyYyIsb2dvbjoiXHUwMmRiIixvZ3JhdmU6Ilx4ZjIiLG9ndDoiXHUyOWMxIixvaGJhcjoiXHUyOWI1IixvbGNpcjoiXHUyOWJlIixvbGNyb3NzOiJcdTI5YmIiLG9sdDoiXHUyOWMwIixvbWFjcjoiXHUwMTRkIixvbWVnYToiXHUwM2M5IixvbWljcm9uOiJcdTAzYmYiLG9taWQ6Ilx1MjliNiIsb29wZjoiXHVkODM1XHVkZDYwIixvcGFyOiJcdTI5YjciLG9wZXJwOiJcdTI5YjkiLG9yOiJcdTIyMjgiLHZlZToiXHUyMjI4IixvcmQ6Ilx1MmE1ZCIsb3JkZXI6Ilx1MjEzNCIsb3JkZXJvZjoiXHUyMTM0Iixvc2NyOiJcdTIxMzQiLG9yZGY6Ilx4YWEiLG9yZG06Ilx4YmEiLG9yaWdvZjoiXHUyMmI2Iixvcm9yOiJcdTJhNTYiLG9yc2xvcGU6Ilx1MmE1NyIsb3J2OiJcdTJhNWIiLG9zbGFzaDoiXHhmOCIsb3NvbDoiXHUyMjk4IixvdGlsZGU6Ilx4ZjUiLG90aW1lc2FzOiJcdTJhMzYiLG91bWw6Ilx4ZjYiLG92YmFyOiJcdTIzM2QiLHBhcmE6Ilx4YjYiLHBhcnNpbToiXHUyYWYzIixwYXJzbDoiXHUyYWZkIixwY3k6Ilx1MDQzZiIscGVyY250OiIlIixwZXJpb2Q6Ii4iLHBlcm1pbDoiXHUyMDMwIixwZXJ0ZW5rOiJcdTIwMzEiLHBmcjoiXHVkODM1XHVkZDJkIixwaGk6Ilx1MDNjNiIscGhpdjoiXHUwM2Q1IixzdHJhaWdodHBoaToiXHUwM2Q1Iix2YXJwaGk6Ilx1MDNkNSIscGhvbmU6Ilx1MjYwZSIscGk6Ilx1MDNjMCIscGl2OiJcdTAzZDYiLHZhcnBpOiJcdTAzZDYiLHBsYW5ja2g6Ilx1MjEwZSIscGx1czoiKyIscGx1c2FjaXI6Ilx1MmEyMyIscGx1c2NpcjoiXHUyYTIyIixwbHVzZHU6Ilx1MmEyNSIscGx1c2U6Ilx1MmE3MiIscGx1c3NpbToiXHUyYTI2IixwbHVzdHdvOiJcdTJhMjciLHBvaW50aW50OiJcdTJhMTUiLHBvcGY6Ilx1ZDgzNVx1ZGQ2MSIscG91bmQ6Ilx4YTMiLHByRToiXHUyYWIzIixwcmFwOiJcdTJhYjciLHByZWNhcHByb3g6Ilx1MmFiNyIscHJlY25hcHByb3g6Ilx1MmFiOSIscHJuYXA6Ilx1MmFiOSIscHJlY25lcXE6Ilx1MmFiNSIscHJuRToiXHUyYWI1IixwcmVjbnNpbToiXHUyMmU4Iixwcm5zaW06Ilx1MjJlOCIscHJpbWU6Ilx1MjAzMiIscHJvZmFsYXI6Ilx1MjMyZSIscHJvZmxpbmU6Ilx1MjMxMiIscHJvZnN1cmY6Ilx1MjMxMyIscHJ1cmVsOiJcdTIyYjAiLHBzY3I6Ilx1ZDgzNVx1ZGNjNSIscHNpOiJcdTAzYzgiLHB1bmNzcDoiXHUyMDA4IixxZnI6Ilx1ZDgzNVx1ZGQyZSIscW9wZjoiXHVkODM1XHVkZDYyIixxcHJpbWU6Ilx1MjA1NyIscXNjcjoiXHVkODM1XHVkY2M2IixxdWF0aW50OiJcdTJhMTYiLHF1ZXN0OiI/IixyQXRhaWw6Ilx1MjkxYyIsckhhcjoiXHUyOTY0IixyYWNlOiJcdTIyM2RcdTAzMzEiLHJhY3V0ZToiXHUwMTU1IixyYWVtcHR5djoiXHUyOWIzIixyYW5nZDoiXHUyOTkyIixyYW5nZToiXHUyOWE1IixyYXF1bzoiXHhiYiIscmFycmFwOiJcdTI5NzUiLHJhcnJiZnM6Ilx1MjkyMCIscmFycmM6Ilx1MjkzMyIscmFycmZzOiJcdTI5MWUiLHJhcnJwbDoiXHUyOTQ1IixyYXJyc2ltOiJcdTI5NzQiLHJhcnJ0bDoiXHUyMWEzIixyaWdodGFycm93dGFpbDoiXHUyMWEzIixyYXJydzoiXHUyMTlkIixyaWdodHNxdWlnYXJyb3c6Ilx1MjE5ZCIscmF0YWlsOiJcdTI5MWEiLHJhdGlvOiJcdTIyMzYiLHJiYnJrOiJcdTI3NzMiLHJicmFjZToifSIscmN1YjoifSIscmJyYWNrOiJdIixyc3FiOiJdIixyYnJrZToiXHUyOThjIixyYnJrc2xkOiJcdTI5OGUiLHJicmtzbHU6Ilx1Mjk5MCIscmNhcm9uOiJcdTAxNTkiLHJjZWRpbDoiXHUwMTU3IixyY3k6Ilx1MDQ0MCIscmRjYToiXHUyOTM3IixyZGxkaGFyOiJcdTI5NjkiLHJkc2g6Ilx1MjFiMyIscmVjdDoiXHUyNWFkIixyZmlzaHQ6Ilx1Mjk3ZCIscmZyOiJcdWQ4MzVcdWRkMmYiLHJoYXJ1bDoiXHUyOTZjIixyaG86Ilx1MDNjMSIscmhvdjoiXHUwM2YxIix2YXJyaG86Ilx1MDNmMSIscmlnaHRyaWdodGFycm93czoiXHUyMWM5IixycmFycjoiXHUyMWM5IixyaWdodHRocmVldGltZXM6Ilx1MjJjYyIscnRocmVlOiJcdTIyY2MiLHJpbmc6Ilx1MDJkYSIscmxtOiJcdTIwMGYiLHJtb3VzdDoiXHUyM2IxIixybW91c3RhY2hlOiJcdTIzYjEiLHJubWlkOiJcdTJhZWUiLHJvYW5nOiJcdTI3ZWQiLHJvYXJyOiJcdTIxZmUiLHJvcGFyOiJcdTI5ODYiLHJvcGY6Ilx1ZDgzNVx1ZGQ2MyIscm9wbHVzOiJcdTJhMmUiLHJvdGltZXM6Ilx1MmEzNSIscnBhcjoiKSIscnBhcmd0OiJcdTI5OTQiLHJwcG9saW50OiJcdTJhMTIiLHJzYXF1bzoiXHUyMDNhIixyc2NyOiJcdWQ4MzVcdWRjYzciLHJ0aW1lczoiXHUyMmNhIixydHJpOiJcdTI1YjkiLHRyaWFuZ2xlcmlnaHQ6Ilx1MjViOSIscnRyaWx0cmk6Ilx1MjljZSIscnVsdWhhcjoiXHUyOTY4IixyeDoiXHUyMTFlIixzYWN1dGU6Ilx1MDE1YiIsc2NFOiJcdTJhYjQiLHNjYXA6Ilx1MmFiOCIsc3VjY2FwcHJveDoiXHUyYWI4IixzY2Fyb246Ilx1MDE2MSIsc2NlZGlsOiJcdTAxNWYiLHNjaXJjOiJcdTAxNWQiLHNjbkU6Ilx1MmFiNiIsc3VjY25lcXE6Ilx1MmFiNiIsc2NuYXA6Ilx1MmFiYSIsc3VjY25hcHByb3g6Ilx1MmFiYSIsc2Nuc2ltOiJcdTIyZTkiLHN1Y2Nuc2ltOiJcdTIyZTkiLHNjcG9saW50OiJcdTJhMTMiLHNjeToiXHUwNDQxIixzZG90OiJcdTIyYzUiLHNkb3RlOiJcdTJhNjYiLHNlQXJyOiJcdTIxZDgiLHNlY3Q6Ilx4YTciLHNlbWk6IjsiLHNlc3dhcjoiXHUyOTI5Iix0b3NhOiJcdTI5MjkiLHNleHQ6Ilx1MjczNiIsc2ZyOiJcdWQ4MzVcdWRkMzAiLHNoYXJwOiJcdTI2NmYiLHNoY2hjeToiXHUwNDQ5IixzaGN5OiJcdTA0NDgiLHNoeToiXHhhZCIsc2lnbWE6Ilx1MDNjMyIsc2lnbWFmOiJcdTAzYzIiLHNpZ21hdjoiXHUwM2MyIix2YXJzaWdtYToiXHUwM2MyIixzaW1kb3Q6Ilx1MmE2YSIsc2ltZzoiXHUyYTllIixzaW1nRToiXHUyYWEwIixzaW1sOiJcdTJhOWQiLHNpbWxFOiJcdTJhOWYiLHNpbW5lOiJcdTIyNDYiLHNpbXBsdXM6Ilx1MmEyNCIsc2ltcmFycjoiXHUyOTcyIixzbWFzaHA6Ilx1MmEzMyIsc21lcGFyc2w6Ilx1MjllNCIsc21pbGU6Ilx1MjMyMyIsc3NtaWxlOiJcdTIzMjMiLHNtdDoiXHUyYWFhIixzbXRlOiJcdTJhYWMiLHNtdGVzOiJcdTJhYWNcdWZlMDAiLHNvZnRjeToiXHUwNDRjIixzb2w6Ii8iLHNvbGI6Ilx1MjljNCIsc29sYmFyOiJcdTIzM2YiLHNvcGY6Ilx1ZDgzNVx1ZGQ2NCIsc3BhZGVzOiJcdTI2NjAiLHNwYWRlc3VpdDoiXHUyNjYwIixzcWNhcHM6Ilx1MjI5M1x1ZmUwMCIsc3FjdXBzOiJcdTIyOTRcdWZlMDAiLHNzY3I6Ilx1ZDgzNVx1ZGNjOCIsc3RhcjoiXHUyNjA2IixzdWI6Ilx1MjI4MiIsc3Vic2V0OiJcdTIyODIiLHN1YkU6Ilx1MmFjNSIsc3Vic2V0ZXFxOiJcdTJhYzUiLHN1YmRvdDoiXHUyYWJkIixzdWJlZG90OiJcdTJhYzMiLHN1Ym11bHQ6Ilx1MmFjMSIsc3VibkU6Ilx1MmFjYiIsc3Vic2V0bmVxcToiXHUyYWNiIixzdWJuZToiXHUyMjhhIixzdWJzZXRuZXE6Ilx1MjI4YSIsc3VicGx1czoiXHUyYWJmIixzdWJyYXJyOiJcdTI5NzkiLHN1YnNpbToiXHUyYWM3IixzdWJzdWI6Ilx1MmFkNSIsc3Vic3VwOiJcdTJhZDMiLHN1bmc6Ilx1MjY2YSIsc3VwMToiXHhiOSIsc3VwMjoiXHhiMiIsc3VwMzoiXHhiMyIsc3VwRToiXHUyYWM2IixzdXBzZXRlcXE6Ilx1MmFjNiIsc3VwZG90OiJcdTJhYmUiLHN1cGRzdWI6Ilx1MmFkOCIsc3VwZWRvdDoiXHUyYWM0IixzdXBoc29sOiJcdTI3YzkiLHN1cGhzdWI6Ilx1MmFkNyIsc3VwbGFycjoiXHUyOTdiIixzdXBtdWx0OiJcdTJhYzIiLHN1cG5FOiJcdTJhY2MiLHN1cHNldG5lcXE6Ilx1MmFjYyIsc3VwbmU6Ilx1MjI4YiIsc3Vwc2V0bmVxOiJcdTIyOGIiLHN1cHBsdXM6Ilx1MmFjMCIsc3Vwc2ltOiJcdTJhYzgiLHN1cHN1YjoiXHUyYWQ0IixzdXBzdXA6Ilx1MmFkNiIsc3dBcnI6Ilx1MjFkOSIsc3dud2FyOiJcdTI5MmEiLHN6bGlnOiJceGRmIix0YXJnZXQ6Ilx1MjMxNiIsdGF1OiJcdTAzYzQiLHRjYXJvbjoiXHUwMTY1Iix0Y2VkaWw6Ilx1MDE2MyIsdGN5OiJcdTA0NDIiLHRlbHJlYzoiXHUyMzE1Iix0ZnI6Ilx1ZDgzNVx1ZGQzMSIsdGhldGE6Ilx1MDNiOCIsdGhldGFzeW06Ilx1MDNkMSIsdGhldGF2OiJcdTAzZDEiLHZhcnRoZXRhOiJcdTAzZDEiLHRob3JuOiJceGZlIix0aW1lczoiXHhkNyIsdGltZXNiYXI6Ilx1MmEzMSIsdGltZXNkOiJcdTJhMzAiLHRvcGJvdDoiXHUyMzM2Iix0b3BjaXI6Ilx1MmFmMSIsdG9wZjoiXHVkODM1XHVkZDY1Iix0b3Bmb3JrOiJcdTJhZGEiLHRwcmltZToiXHUyMDM0Iix0cmlhbmdsZToiXHUyNWI1Iix1dHJpOiJcdTI1YjUiLHRyaWFuZ2xlcToiXHUyMjVjIix0cmllOiJcdTIyNWMiLHRyaWRvdDoiXHUyNWVjIix0cmltaW51czoiXHUyYTNhIix0cmlwbHVzOiJcdTJhMzkiLHRyaXNiOiJcdTI5Y2QiLHRyaXRpbWU6Ilx1MmEzYiIsdHJwZXppdW06Ilx1MjNlMiIsdHNjcjoiXHVkODM1XHVkY2M5Iix0c2N5OiJcdTA0NDYiLHRzaGN5OiJcdTA0NWIiLHRzdHJvazoiXHUwMTY3Iix1SGFyOiJcdTI5NjMiLHVhY3V0ZToiXHhmYSIsdWJyY3k6Ilx1MDQ1ZSIsdWJyZXZlOiJcdTAxNmQiLHVjaXJjOiJceGZiIix1Y3k6Ilx1MDQ0MyIsdWRibGFjOiJcdTAxNzEiLHVmaXNodDoiXHUyOTdlIix1ZnI6Ilx1ZDgzNVx1ZGQzMiIsdWdyYXZlOiJceGY5Iix1aGJsazoiXHUyNTgwIix1bGNvcm46Ilx1MjMxYyIsdWxjb3JuZXI6Ilx1MjMxYyIsdWxjcm9wOiJcdTIzMGYiLHVsdHJpOiJcdTI1ZjgiLHVtYWNyOiJcdTAxNmIiLHVvZ29uOiJcdTAxNzMiLHVvcGY6Ilx1ZDgzNVx1ZGQ2NiIsdXBzaToiXHUwM2M1Iix1cHNpbG9uOiJcdTAzYzUiLHVwdXBhcnJvd3M6Ilx1MjFjOCIsdXVhcnI6Ilx1MjFjOCIsdXJjb3JuOiJcdTIzMWQiLHVyY29ybmVyOiJcdTIzMWQiLHVyY3JvcDoiXHUyMzBlIix1cmluZzoiXHUwMTZmIix1cnRyaToiXHUyNWY5Iix1c2NyOiJcdWQ4MzVcdWRjY2EiLHV0ZG90OiJcdTIyZjAiLHV0aWxkZToiXHUwMTY5Iix1dW1sOiJceGZjIix1d2FuZ2xlOiJcdTI5YTciLHZCYXI6Ilx1MmFlOCIsdkJhcnY6Ilx1MmFlOSIsdmFuZ3J0OiJcdTI5OWMiLHZhcnN1YnNldG5lcToiXHUyMjhhXHVmZTAwIix2c3VibmU6Ilx1MjI4YVx1ZmUwMCIsdmFyc3Vic2V0bmVxcToiXHUyYWNiXHVmZTAwIix2c3VibkU6Ilx1MmFjYlx1ZmUwMCIsdmFyc3Vwc2V0bmVxOiJcdTIyOGJcdWZlMDAiLHZzdXBuZToiXHUyMjhiXHVmZTAwIix2YXJzdXBzZXRuZXFxOiJcdTJhY2NcdWZlMDAiLHZzdXBuRToiXHUyYWNjXHVmZTAwIix2Y3k6Ilx1MDQzMiIsdmVlYmFyOiJcdTIyYmIiLHZlZWVxOiJcdTIyNWEiLHZlbGxpcDoiXHUyMmVlIix2ZnI6Ilx1ZDgzNVx1ZGQzMyIsdm9wZjoiXHVkODM1XHVkZDY3Iix2c2NyOiJcdWQ4MzVcdWRjY2IiLHZ6aWd6YWc6Ilx1Mjk5YSIsd2NpcmM6Ilx1MDE3NSIsd2VkYmFyOiJcdTJhNWYiLHdlZGdlcToiXHUyMjU5Iix3ZWllcnA6Ilx1MjExOCIsd3A6Ilx1MjExOCIsd2ZyOiJcdWQ4MzVcdWRkMzQiLHdvcGY6Ilx1ZDgzNVx1ZGQ2OCIsd3NjcjoiXHVkODM1XHVkY2NjIix4ZnI6Ilx1ZDgzNVx1ZGQzNSIseGk6Ilx1MDNiZSIseG5pczoiXHUyMmZiIix4b3BmOiJcdWQ4MzVcdWRkNjkiLHhzY3I6Ilx1ZDgzNVx1ZGNjZCIseWFjdXRlOiJceGZkIix5YWN5OiJcdTA0NGYiLHljaXJjOiJcdTAxNzciLHljeToiXHUwNDRiIix5ZW46Ilx4YTUiLHlmcjoiXHVkODM1XHVkZDM2Iix5aWN5OiJcdTA0NTciLHlvcGY6Ilx1ZDgzNVx1ZGQ2YSIseXNjcjoiXHVkODM1XHVkY2NlIix5dWN5OiJcdTA0NGUiLHl1bWw6Ilx4ZmYiLHphY3V0ZToiXHUwMTdhIix6Y2Fyb246Ilx1MDE3ZSIsemN5OiJcdTA0MzciLHpkb3Q6Ilx1MDE3YyIsemV0YToiXHUwM2I2Iix6ZnI6Ilx1ZDgzNVx1ZGQzNyIsemhjeToiXHUwNDM2Iix6aWdyYXJyOiJcdTIxZGQiLHpvcGY6Ilx1ZDgzNVx1ZGQ2YiIsenNjcjoiXHVkODM1XHVkY2NmIix6d2o6Ilx1MjAwZCIsenduajoiXHUyMDBjIixuZ3NwOiJcdWU1MDAifSxLYj1jbGFzcyBleHRlbmRzIE1me2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihpLHQpLHRoaXMudG9rZW5UeXBlPWV9fSxHeWU9L1xyXG4/L2c7ZnVuY3Rpb24gVWIobil7cmV0dXJuYFVuZXhwZWN0ZWQgY2hhcmFjdGVyICIkezA9PT1uPyJFT0YiOlN0cmluZy5mcm9tQ2hhckNvZGUobil9ImB9ZnVuY3Rpb24gVjkobil7cmV0dXJuYFVua25vd24gZW50aXR5ICIke259IiAtIHVzZSB0aGUgIiYjPGRlY2ltYWw+OyIgb3IgICImI3g8aGV4PjsiIHN5bnRheGB9dmFyIFpiPSgoKT0+e3JldHVybihuPVpifHwoWmI9e30pKS5IRVg9ImhleGFkZWNpbWFsIixuLkRFQz0iZGVjaW1hbCIsWmI7dmFyIG59KSgpLEpiPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3I9dH19O2Z1bmN0aW9uIElhKG4pe3JldHVybiFmMyhuKXx8MD09PW59ZnVuY3Rpb24gSDkobil7cmV0dXJuIGYzKG4pfHw2Mj09PW58fDYwPT09bnx8NDc9PT1ufHwzOT09PW58fDM0PT09bnx8NjE9PT1ufHwwPT09bn1mdW5jdGlvbiBZeWUobil7cmV0dXJuIDU5PT09bnx8MD09PW58fCFmdW5jdGlvbihuKXtyZXR1cm4gbj49OTcmJm48PTEwMnx8bj49NjUmJm48PTcwfHxwcChuKX0obil9ZnVuY3Rpb24gWHllKG4pe3JldHVybiA1OT09PW58fDA9PT1ufHwhbTMobil9ZnVuY3Rpb24gVTkobil7cmV0dXJuIG4+PTk3JiZuPD0xMjI/bi05Nys2NTpufXZhciBEZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe2lmKHQgaW5zdGFuY2VvZiBEZil7dGhpcy5maWxlPXQuZmlsZSx0aGlzLmlucHV0PXQuaW5wdXQsdGhpcy5lbmQ9dC5lbmQ7bGV0IGk9dC5zdGF0ZTt0aGlzLnN0YXRlPXtwZWVrOmkucGVlayxvZmZzZXQ6aS5vZmZzZXQsbGluZTppLmxpbmUsY29sdW1uOmkuY29sdW1ufX1lbHNle2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvZ3JhbW1pbmcgZXJyb3I6IHRoZSByYW5nZSBhcmd1bWVudCBtdXN0IGJlIHByb3ZpZGVkIHdpdGggYSBmaWxlIGFyZ3VtZW50LiIpO3RoaXMuZmlsZT10LHRoaXMuaW5wdXQ9dC5jb250ZW50LHRoaXMuZW5kPWUuZW5kUG9zLHRoaXMuc3RhdGU9e3BlZWs6LTEsb2Zmc2V0OmUuc3RhcnRQb3MsbGluZTplLnN0YXJ0TGluZSxjb2x1bW46ZS5zdGFydENvbH19fWNsb25lKCl7cmV0dXJuIG5ldyBEZih0aGlzKX1wZWVrKCl7cmV0dXJuIHRoaXMuc3RhdGUucGVla31jaGFyc0xlZnQoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGF0ZS5vZmZzZXR9ZGlmZih0KXtyZXR1cm4gdGhpcy5zdGF0ZS5vZmZzZXQtdC5zdGF0ZS5vZmZzZXR9YWR2YW5jZSgpe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuc3RhdGUpfWluaXQoKXt0aGlzLnVwZGF0ZVBlZWsodGhpcy5zdGF0ZSl9Z2V0U3Bhbih0LGUpe2xldCBpPXQ9dHx8dGhpcztpZihlKWZvcig7dGhpcy5kaWZmKHQpPjAmJi0xIT09ZS5pbmRleE9mKHQucGVlaygpKTspaT09PXQmJih0PXQuY2xvbmUoKSksdC5hZHZhbmNlKCk7bGV0IHI9dGhpcy5sb2NhdGlvbkZyb21DdXJzb3IodCksbz10aGlzLmxvY2F0aW9uRnJvbUN1cnNvcih0aGlzKSxzPWkhPT10P3RoaXMubG9jYXRpb25Gcm9tQ3Vyc29yKGkpOnI7cmV0dXJuIG5ldyBUbyhyLG8scyl9Z2V0Q2hhcnModCl7cmV0dXJuIHRoaXMuaW5wdXQuc3Vic3RyaW5nKHQuc3RhdGUub2Zmc2V0LHRoaXMuc3RhdGUub2Zmc2V0KX1jaGFyQXQodCl7cmV0dXJuIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0KX1hZHZhbmNlU3RhdGUodCl7aWYodC5vZmZzZXQ+PXRoaXMuZW5kKXRocm93IHRoaXMuc3RhdGU9dCxuZXcgSXgoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyICJFT0YiJyx0aGlzKTtsZXQgZT10aGlzLmNoYXJBdCh0Lm9mZnNldCk7MTA9PT1lPyh0LmxpbmUrKyx0LmNvbHVtbj0wKTpXcShlKXx8dC5jb2x1bW4rKyx0Lm9mZnNldCsrLHRoaXMudXBkYXRlUGVlayh0KX11cGRhdGVQZWVrKHQpe3QucGVlaz10Lm9mZnNldD49dGhpcy5lbmQ/MDp0aGlzLmNoYXJBdCh0Lm9mZnNldCl9bG9jYXRpb25Gcm9tQ3Vyc29yKHQpe3JldHVybiBuZXcgd2YodC5maWxlLHQuc3RhdGUub2Zmc2V0LHQuc3RhdGUubGluZSx0LnN0YXRlLmNvbHVtbil9fSxMMD1jbGFzcyBleHRlbmRzIERme2NvbnN0cnVjdG9yKHQsZSl7dCBpbnN0YW5jZW9mIEwwPyhzdXBlcih0KSx0aGlzLmludGVybmFsU3RhdGU9ey4uLnQuaW50ZXJuYWxTdGF0ZX0pOihzdXBlcih0LGUpLHRoaXMuaW50ZXJuYWxTdGF0ZT10aGlzLnN0YXRlKX1hZHZhbmNlKCl7dGhpcy5zdGF0ZT10aGlzLmludGVybmFsU3RhdGUsc3VwZXIuYWR2YW5jZSgpLHRoaXMucHJvY2Vzc0VzY2FwZVNlcXVlbmNlKCl9aW5pdCgpe3N1cGVyLmluaXQoKSx0aGlzLnByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpfWNsb25lKCl7cmV0dXJuIG5ldyBMMCh0aGlzKX1nZXRDaGFycyh0KXtsZXQgZT10LmNsb25lKCksaT0iIjtmb3IoO2UuaW50ZXJuYWxTdGF0ZS5vZmZzZXQ8dGhpcy5pbnRlcm5hbFN0YXRlLm9mZnNldDspaSs9U3RyaW5nLmZyb21Db2RlUG9pbnQoZS5wZWVrKCkpLGUuYWR2YW5jZSgpO3JldHVybiBpfXByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpe2xldCB0PSgpPT50aGlzLmludGVybmFsU3RhdGUucGVlaztpZig5Mj09PXQoKSlpZih0aGlzLmludGVybmFsU3RhdGU9ey4uLnRoaXMuc3RhdGV9LHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksMTEwPT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMDtlbHNlIGlmKDExND09PXQoKSl0aGlzLnN0YXRlLnBlZWs9MTM7ZWxzZSBpZigxMTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTExO2Vsc2UgaWYoMTE2PT09dCgpKXRoaXMuc3RhdGUucGVlaz05O2Vsc2UgaWYoOTg9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTg7ZWxzZSBpZigxMDI9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTEyO2Vsc2UgaWYoMTE3PT09dCgpKWlmKHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdCgpPT09ZnApe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSk7bGV0IGU9dGhpcy5jbG9uZSgpLGk9MDtmb3IoO3QoKSE9PXR1Oyl0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSxpKX1lbHNle2xldCBlPXRoaXMuY2xvbmUoKTt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSw0KX1lbHNlIGlmKDEyMD09PXQoKSl7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKTtsZXQgZT10aGlzLmNsb25lKCk7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlLnBlZWs9dGhpcy5kZWNvZGVIZXhEaWdpdHMoZSwyKX1lbHNlIGlmKHg5KHQoKSkpe2xldCBlPSIiLGk9MCxyPXRoaXMuY2xvbmUoKTtmb3IoO3g5KHQoKSkmJmk8Mzspcj10aGlzLmNsb25lKCksZSs9U3RyaW5nLmZyb21Db2RlUG9pbnQodCgpKSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLGkrKzt0aGlzLnN0YXRlLnBlZWs9cGFyc2VJbnQoZSw4KSx0aGlzLmludGVybmFsU3RhdGU9ci5pbnRlcm5hbFN0YXRlfWVsc2UgV3EodGhpcy5pbnRlcm5hbFN0YXRlLnBlZWspPyh0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuc3RhdGU9dGhpcy5pbnRlcm5hbFN0YXRlKTp0aGlzLnN0YXRlLnBlZWs9dGhpcy5pbnRlcm5hbFN0YXRlLnBlZWt9ZGVjb2RlSGV4RGlnaXRzKHQsZSl7bGV0IGk9dGhpcy5pbnB1dC5zbGljZSh0LmludGVybmFsU3RhdGUub2Zmc2V0LHQuaW50ZXJuYWxTdGF0ZS5vZmZzZXQrZSkscj1wYXJzZUludChpLDE2KTtpZihpc05hTihyKSl0aHJvdyB0LnN0YXRlPXQuaW50ZXJuYWxTdGF0ZSxuZXcgSXgoIkludmFsaWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIix0KTtyZXR1cm4gcn19LEl4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5tc2c9dCx0aGlzLmN1cnNvcj1lfX0sUGE9Y2xhc3MgZXh0ZW5kcyBNZntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVsZW1lbnROYW1lPXR9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIG5ldyBQYSh0LGUsaSl9fSxVMT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdE5vZGVzPXQsdGhpcy5lcnJvcnM9ZX19LEZMPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZ2V0VGFnRGVmaW5pdGlvbj10fXBhcnNlKHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuLHQsZSxpPXt9KXtsZXQgcj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX2dldFRhZ0RlZmluaXRpb249ZSx0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2s9W10sdGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMudG9rZW5zPVtdLHRoaXMuZXJyb3JzPVtdLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPVtdLHRoaXMuX3Rva2VuaXplSWN1PWkudG9rZW5pemVFeHBhbnNpb25Gb3Jtc3x8ITEsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1pLmludGVycG9sYXRpb25Db25maWd8fCRjLHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzPWkubGVhZGluZ1RyaXZpYUNoYXJzJiZpLmxlYWRpbmdUcml2aWFDaGFycy5tYXAobz0+by5jb2RlUG9pbnRBdCgwKXx8MCk7bGV0IHI9aS5yYW5nZXx8e2VuZFBvczp0LmNvbnRlbnQubGVuZ3RoLHN0YXJ0UG9zOjAsc3RhcnRMaW5lOjAsc3RhcnRDb2w6MH07dGhpcy5fY3Vyc29yPWkuZXNjYXBlZFN0cmluZz9uZXcgTDAodCxyKTpuZXcgRGYodCxyKSx0aGlzLl9wcmVzZXJ2ZUxpbmVFbmRpbmdzPWkucHJlc2VydmVMaW5lRW5kaW5nc3x8ITEsdGhpcy5fZXNjYXBlZFN0cmluZz1pLmVzY2FwZWRTdHJpbmd8fCExLHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcz1pLmkxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVc3x8ITE7dHJ5e3RoaXMuX2N1cnNvci5pbml0KCl9Y2F0Y2gobyl7dGhpcy5oYW5kbGVFcnJvcihvKX19X3Byb2Nlc3NDYXJyaWFnZVJldHVybnModCl7cmV0dXJuIHRoaXMuX3ByZXNlcnZlTGluZUVuZGluZ3M/dDp0LnJlcGxhY2UoR3llLCJcbiIpfXRva2VuaXplKCl7Zm9yKDswIT09dGhpcy5fY3Vyc29yLnBlZWsoKTspe2xldCB0PXRoaXMuX2N1cnNvci5jbG9uZSgpO3RyeXt0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjApP3RoaXMuX2F0dGVtcHRDaGFyQ29kZSgzMyk/dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDkxKT90aGlzLl9jb25zdW1lQ2RhdGEodCk6dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ1KT90aGlzLl9jb25zdW1lQ29tbWVudCh0KTp0aGlzLl9jb25zdW1lRG9jVHlwZSh0KTp0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpP3RoaXMuX2NvbnN1bWVUYWdDbG9zZSh0KTp0aGlzLl9jb25zdW1lVGFnT3Blbih0KTp0aGlzLl90b2tlbml6ZUljdSYmdGhpcy5fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl8fHRoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbig1LDgsKCk9PnRoaXMuX2lzVGV4dEVuZCgpLCgpPT50aGlzLl9pc1RhZ1N0YXJ0KCkpfWNhdGNoKGUpe3RoaXMuaGFuZGxlRXJyb3IoZSl9fXRoaXMuX2JlZ2luVG9rZW4oMjQpLHRoaXMuX2VuZFRva2VuKFtdKX1fdG9rZW5pemVFeHBhbnNpb25Gb3JtKCl7aWYodGhpcy5pc0V4cGFuc2lvbkZvcm1TdGFydCgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uRm9ybVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKSE9PXR1JiZ0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZVN0YXJ0KCksITA7aWYodGhpcy5fY3Vyc29yLnBlZWsoKT09PXR1KXtpZih0aGlzLl9pc0luRXhwYW5zaW9uQ2FzZSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uQ2FzZUVuZCgpLCEwO2lmKHRoaXMuX2lzSW5FeHBhbnNpb25Gb3JtKCkpcmV0dXJuIHRoaXMuX2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCksITB9cmV0dXJuITF9X2JlZ2luVG9rZW4odCxlPXRoaXMuX2N1cnNvci5jbG9uZSgpKXt0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1lLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9dH1fZW5kVG9rZW4odCxlKXtpZihudWxsPT09dGhpcy5fY3VycmVudFRva2VuU3RhcnQpdGhyb3cgbmV3IEtiKCJQcm9ncmFtbWluZyBlcnJvciAtIGF0dGVtcHRlZCB0byBlbmQgYSB0b2tlbiB3aGVuIHRoZXJlIHdhcyBubyBzdGFydCB0byB0aGUgdG9rZW4iLHRoaXMuX2N1cnJlbnRUb2tlblR5cGUsdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpO2lmKG51bGw9PT10aGlzLl9jdXJyZW50VG9rZW5UeXBlKXRocm93IG5ldyBLYigiUHJvZ3JhbW1pbmcgZXJyb3IgLSBhdHRlbXB0ZWQgdG8gZW5kIGEgdG9rZW4gd2hpY2ggaGFzIG5vIHRva2VuIHR5cGUiLG51bGwsdGhpcy5fY3Vyc29yLmdldFNwYW4odGhpcy5fY3VycmVudFRva2VuU3RhcnQpKTtsZXQgaT17dHlwZTp0aGlzLl9jdXJyZW50VG9rZW5UeXBlLHBhcnRzOnQsc291cmNlU3BhbjooZT8/dGhpcy5fY3Vyc29yKS5nZXRTcGFuKHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0LHRoaXMuX2xlYWRpbmdUcml2aWFDb2RlUG9pbnRzKX07cmV0dXJuIHRoaXMudG9rZW5zLnB1c2goaSksdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsaX1fY3JlYXRlRXJyb3IodCxlKXt0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpJiYodCs9JyAoRG8geW91IGhhdmUgYW4gdW5lc2NhcGVkICJ7IiBpbiB5b3VyIHRlbXBsYXRlPyBVc2UgInt7IFwne1wnIH19IikgdG8gZXNjYXBlIGl0LiknKTtsZXQgaT1uZXcgS2IodCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlLGUpO3JldHVybiB0aGlzLl9jdXJyZW50VG9rZW5TdGFydD1udWxsLHRoaXMuX2N1cnJlbnRUb2tlblR5cGU9bnVsbCxuZXcgSmIoaSl9aGFuZGxlRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIEl4JiYodD10aGlzLl9jcmVhdGVFcnJvcih0Lm1zZyx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0LmN1cnNvcikpKSwhKHQgaW5zdGFuY2VvZiBKYikpdGhyb3cgdDt0aGlzLmVycm9ycy5wdXNoKHQuZXJyb3IpfV9hdHRlbXB0Q2hhckNvZGUodCl7cmV0dXJuIHRoaXMuX2N1cnNvci5wZWVrKCk9PT10JiYodGhpcy5fY3Vyc29yLmFkdmFuY2UoKSwhMCl9X2F0dGVtcHRDaGFyQ29kZUNhc2VJbnNlbnNpdGl2ZSh0KXtyZXR1cm4hIWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFU5KG4pPT09VTkodCl9KHRoaXMuX2N1cnNvci5wZWVrKCksdCkmJih0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLCEwKX1fcmVxdWlyZUNoYXJDb2RlKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKCF0aGlzLl9hdHRlbXB0Q2hhckNvZGUodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0U3RyKHQpe2xldCBlPXQubGVuZ3RoO2lmKHRoaXMuX2N1cnNvci5jaGFyc0xlZnQoKTxlKXJldHVybiExO2xldCBpPXRoaXMuX2N1cnNvci5jbG9uZSgpO2ZvcihsZXQgcj0wO3I8ZTtyKyspaWYoIXRoaXMuX2F0dGVtcHRDaGFyQ29kZSh0LmNoYXJDb2RlQXQocikpKXJldHVybiB0aGlzLl9jdXJzb3I9aSwhMTtyZXR1cm4hMH1fYXR0ZW1wdFN0ckNhc2VJbnNlbnNpdGl2ZSh0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylpZighdGhpcy5fYXR0ZW1wdENoYXJDb2RlQ2FzZUluc2Vuc2l0aXZlKHQuY2hhckNvZGVBdChlKSkpcmV0dXJuITE7cmV0dXJuITB9X3JlcXVpcmVTdHIodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYoIXRoaXMuX2F0dGVtcHRTdHIodCkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpfV9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpe2Zvcig7IXQodGhpcy5fY3Vyc29yLnBlZWsoKSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlcXVpcmVDaGFyQ29kZVVudGlsRm4odCxlKXtsZXQgaT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHQpLHRoaXMuX2N1cnNvci5kaWZmKGkpPGUpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoVWIodGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oaSkpfV9hdHRlbXB0VW50aWxDaGFyKHQpe2Zvcig7dGhpcy5fY3Vyc29yLnBlZWsoKSE9PXQ7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCl9X3JlYWRDaGFyKCl7bGV0IHQ9U3RyaW5nLmZyb21Db2RlUG9pbnQodGhpcy5fY3Vyc29yLnBlZWsoKSk7cmV0dXJuIHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdH1fY29uc3VtZUVudGl0eSh0KXt0aGlzLl9iZWdpblRva2VuKDkpO2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDM1KSl7bGV0IGk9dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDEyMCl8fHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg4OCkscj10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKFl5ZSksNTkhPXRoaXMuX2N1cnNvci5wZWVrKCkpdGhyb3cgdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSx0aGlzLl9jcmVhdGVFcnJvcihmdW5jdGlvbihuLHQpe3JldHVybmBVbmFibGUgdG8gcGFyc2UgZW50aXR5ICIke3R9IiAtICR7bn0gY2hhcmFjdGVyIHJlZmVyZW5jZSBlbnRpdGllcyBtdXN0IGVuZCB3aXRoICI7ImB9KGk/WmIuSEVYOlpiLkRFQyx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO2xldCBvPXRoaXMuX2N1cnNvci5nZXRDaGFycyhyKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpO3RyeXtsZXQgcz1wYXJzZUludChvLGk/MTY6MTApO3RoaXMuX2VuZFRva2VuKFtTdHJpbmcuZnJvbUNoYXJDb2RlKHMpLHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKV0pfWNhdGNoe3Rocm93IHRoaXMuX2NyZWF0ZUVycm9yKFY5KHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKSksdGhpcy5fY3Vyc29yLmdldFNwYW4oKSl9fWVsc2V7bGV0IGk9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihYeWUpLDU5IT10aGlzLl9jdXJzb3IucGVlaygpKXRoaXMuX2JlZ2luVG9rZW4odCxlKSx0aGlzLl9jdXJzb3I9aSx0aGlzLl9lbmRUb2tlbihbIiYiXSk7ZWxzZXtsZXQgcj10aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSk7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTtsZXQgbz1IMVtyXTtpZighbyl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihWOShyKSx0aGlzLl9jdXJzb3IuZ2V0U3BhbihlKSk7dGhpcy5fZW5kVG9rZW4oW28sYCYke3J9O2BdKX19fV9jb25zdW1lUmF3VGV4dCh0LGUpe3RoaXMuX2JlZ2luVG9rZW4odD82OjcpO2xldCBpPVtdO2Zvcig7Oyl7bGV0IHI9dGhpcy5fY3Vyc29yLmNsb25lKCksbz1lKCk7aWYodGhpcy5fY3Vyc29yPXIsbylicmVhazt0JiYzOD09PXRoaXMuX2N1cnNvci5wZWVrKCk/KHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKGkuam9pbigiIikpXSksaS5sZW5ndGg9MCx0aGlzLl9jb25zdW1lRW50aXR5KDYpLHRoaXMuX2JlZ2luVG9rZW4oNikpOmkucHVzaCh0aGlzLl9yZWFkQ2hhcigpKX10aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhpLmpvaW4oIiIpKV0pfV9jb25zdW1lQ29tbWVudCh0KXt0aGlzLl9iZWdpblRva2VuKDEwLHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NSksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2NvbnN1bWVSYXdUZXh0KCExLCgpPT50aGlzLl9hdHRlbXB0U3RyKCItLVx4M2UiKSksdGhpcy5fYmVnaW5Ub2tlbigxMSksdGhpcy5fcmVxdWlyZVN0cigiLS1ceDNlIiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lQ2RhdGEodCl7dGhpcy5fYmVnaW5Ub2tlbigxMix0KSx0aGlzLl9yZXF1aXJlU3RyKCJDREFUQVsiKSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fY29uc3VtZVJhd1RleHQoITEsKCk9PnRoaXMuX2F0dGVtcHRTdHIoIl1dPiIpKSx0aGlzLl9iZWdpblRva2VuKDEzKSx0aGlzLl9yZXF1aXJlU3RyKCJdXT4iKSx0aGlzLl9lbmRUb2tlbihbXSl9X2NvbnN1bWVEb2NUeXBlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTgsdCk7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7dGhpcy5fYXR0ZW1wdFVudGlsQ2hhcig2Mik7bGV0IGk9dGhpcy5fY3Vyc29yLmdldENoYXJzKGUpO3RoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW2ldKX1fY29uc3VtZVByZWZpeEFuZE5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPSIiO2Zvcig7NTghPT10aGlzLl9jdXJzb3IucGVlaygpJiYhKCgobj10aGlzLl9jdXJzb3IucGVlaygpKTw5N3x8MTIyPG4pJiYobjw2NXx8OTA8bikmJihuPDQ4fHxuPjU3KSk7KXRoaXMuX2N1cnNvci5hZHZhbmNlKCk7dmFyIG47bGV0IGk7cmV0dXJuIDU4PT09dGhpcy5fY3Vyc29yLnBlZWsoKT8oZT10aGlzLl9jdXJzb3IuZ2V0Q2hhcnModCksdGhpcy5fY3Vyc29yLmFkdmFuY2UoKSxpPXRoaXMuX2N1cnNvci5jbG9uZSgpKTppPXQsdGhpcy5fcmVxdWlyZUNoYXJDb2RlVW50aWxGbihIOSwiIj09PWU/MDoxKSxbZSx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoaSldfV9jb25zdW1lVGFnT3Blbih0KXtsZXQgZSxpLHI7dHJ5e2lmKCFtMyh0aGlzLl9jdXJzb3IucGVlaygpKSl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihVYih0aGlzLl9jdXJzb3IucGVlaygpKSx0aGlzLl9jdXJzb3IuZ2V0U3Bhbih0KSk7Zm9yKHI9dGhpcy5fY29uc3VtZVRhZ09wZW5TdGFydCh0KSxpPXIucGFydHNbMF0sZT1yLnBhcnRzWzFdLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpOzQ3IT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmNjIhPT10aGlzLl9jdXJzb3IucGVlaygpJiY2MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJjAhPT10aGlzLl9jdXJzb3IucGVlaygpOyl0aGlzLl9jb25zdW1lQXR0cmlidXRlTmFtZSgpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MSkmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9jb25zdW1lQXR0cmlidXRlVmFsdWUoKSksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSk7dGhpcy5fY29uc3VtZVRhZ09wZW5FbmQoKX1jYXRjaChzKXtpZihzIGluc3RhbmNlb2YgSmIpcmV0dXJuIHZvaWQocj9yLnR5cGU9NDoodGhpcy5fYmVnaW5Ub2tlbig1LHQpLHRoaXMuX2VuZFRva2VuKFsiPCJdKSkpO3Rocm93IHN9bGV0IG89dGhpcy5fZ2V0VGFnRGVmaW5pdGlvbihlKS5nZXRDb250ZW50VHlwZShpKTtvPT09ZmwuUkFXX1RFWFQ/dGhpcy5fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UoaSxlLCExKTpvPT09ZmwuRVNDQVBBQkxFX1JBV19URVhUJiZ0aGlzLl9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZShpLGUsITApfV9jb25zdW1lUmF3VGV4dFdpdGhUYWdDbG9zZSh0LGUsaSl7dGhpcy5fY29uc3VtZVJhd1RleHQoaSwoKT0+ISEodGhpcy5fYXR0ZW1wdENoYXJDb2RlKDYwKSYmdGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRTdHJDYXNlSW5zZW5zaXRpdmUoZSkpKSYmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MikpKSx0aGlzLl9iZWdpblRva2VuKDMpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZVVudGlsRm4ocj0+NjI9PT1yLDMpLHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fZW5kVG9rZW4oW3QsZV0pfV9jb25zdW1lVGFnT3BlblN0YXJ0KHQpe3RoaXMuX2JlZ2luVG9rZW4oMCx0KTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3JldHVybiB0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUF0dHJpYnV0ZU5hbWUoKXtsZXQgdD10aGlzLl9jdXJzb3IucGVlaygpO2lmKDM5PT09dHx8MzQ9PT10KXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKFViKHQpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpO3RoaXMuX2JlZ2luVG9rZW4oMTQpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVBdHRyaWJ1dGVWYWx1ZSgpe2lmKDM5PT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8MzQ9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgZT10aGlzLl9jdXJzb3IucGVlaygpO3RoaXMuX2NvbnN1bWVRdW90ZShlKTtsZXQgaT0oKT0+dGhpcy5fY3Vyc29yLnBlZWsoKT09PWU7dGhpcy5fY29uc3VtZVdpdGhJbnRlcnBvbGF0aW9uKDE2LDE3LGksaSksdGhpcy5fY29uc3VtZVF1b3RlKGUpfWVsc2V7bGV0IGU9KCk9Pkg5KHRoaXMuX2N1cnNvci5wZWVrKCkpO3RoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbigxNiwxNyxlLGUpfX1fY29uc3VtZVF1b3RlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTUpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSh0KSx0aGlzLl9lbmRUb2tlbihbU3RyaW5nLmZyb21Db2RlUG9pbnQodCldKX1fY29uc3VtZVRhZ09wZW5FbmQoKXtsZXQgdD10aGlzLl9hdHRlbXB0Q2hhckNvZGUoNDcpPzI6MTt0aGlzLl9iZWdpblRva2VuKHQpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg2MiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lVGFnQ2xvc2UodCl7dGhpcy5fYmVnaW5Ub2tlbigzLHQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpO2xldCBlPXRoaXMuX2NvbnN1bWVQcmVmaXhBbmROYW1lKCk7dGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKDYyKSx0aGlzLl9lbmRUb2tlbihlKX1fY29uc3VtZUV4cGFuc2lvbkZvcm1TdGFydCgpe3RoaXMuX2JlZ2luVG9rZW4oMTkpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDE5KSx0aGlzLl9iZWdpblRva2VuKDcpO2xldCB0PXRoaXMuX3JlYWRVbnRpbCg0NCksZT10aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKHQpO2lmKHRoaXMuX2kxOG5Ob3JtYWxpemVMaW5lRW5kaW5nc0luSUNVcyl0aGlzLl9lbmRUb2tlbihbZV0pO2Vsc2V7bGV0IHI9dGhpcy5fZW5kVG9rZW4oW3RdKTtlIT09dCYmdGhpcy5ub25Ob3JtYWxpemVkSWN1RXhwcmVzc2lvbnMucHVzaChyKX10aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oNyk7bGV0IGk9dGhpcy5fcmVhZFVudGlsKDQ0KTt0aGlzLl9lbmRUb2tlbihbaV0pLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg0NCksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihJYSl9X2NvbnN1bWVFeHBhbnNpb25DYXNlU3RhcnQoKXt0aGlzLl9iZWdpblRva2VuKDIwKTtsZXQgdD10aGlzLl9yZWFkVW50aWwoZnApLnRyaW0oKTt0aGlzLl9lbmRUb2tlbihbdF0pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2JlZ2luVG9rZW4oMjEpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShmcCksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4oSWEpLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wdXNoKDIxKX1fY29uc3VtZUV4cGFuc2lvbkNhc2VFbmQoKXt0aGlzLl9iZWdpblRva2VuKDIyKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodHUpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKElhKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucG9wKCl9X2NvbnN1bWVFeHBhbnNpb25Gb3JtRW5kKCl7dGhpcy5fYmVnaW5Ub2tlbigyMyksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKHR1KSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLnBvcCgpfV9jb25zdW1lV2l0aEludGVycG9sYXRpb24odCxlLGkscil7dGhpcy5fYmVnaW5Ub2tlbih0KTtsZXQgbz1bXTtmb3IoOyFpKCk7KXtsZXQgcz10aGlzLl9jdXJzb3IuY2xvbmUoKTt0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnJiZ0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0scyksby5sZW5ndGg9MCx0aGlzLl9jb25zdW1lSW50ZXJwb2xhdGlvbihlLHMsciksdGhpcy5fYmVnaW5Ub2tlbih0KSk6Mzg9PT10aGlzLl9jdXJzb3IucGVlaygpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0pLG8ubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUVudGl0eSh0KSx0aGlzLl9iZWdpblRva2VuKHQpKTpvLnB1c2godGhpcy5fcmVhZENoYXIoKSl9dGhpcy5faW5JbnRlcnBvbGF0aW9uPSExLHRoaXMuX2VuZFRva2VuKFt0aGlzLl9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKG8uam9pbigiIikpXSl9X2NvbnN1bWVJbnRlcnBvbGF0aW9uKHQsZSxpKXtsZXQgcj1bXTt0aGlzLl9iZWdpblRva2VuKHQsZSksci5wdXNoKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpO2xldCBvPXRoaXMuX2N1cnNvci5jbG9uZSgpLHM9bnVsbCxhPSExO2Zvcig7MCE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJihudWxsPT09aXx8IWkoKSk7KXtsZXQgbD10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9pc1RhZ1N0YXJ0KCkpcmV0dXJuIHRoaXMuX2N1cnNvcj1sLHIucHVzaCh0aGlzLl9nZXRQcm9jZXNzZWRDaGFycyhvLGwpKSx2b2lkIHRoaXMuX2VuZFRva2VuKHIpO2lmKG51bGw9PT1zKXtpZih0aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuZW5kKSlyZXR1cm4gci5wdXNoKHRoaXMuX2dldFByb2Nlc3NlZENoYXJzKG8sbCkpLHIucHVzaCh0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLmVuZCksdm9pZCB0aGlzLl9lbmRUb2tlbihyKTt0aGlzLl9hdHRlbXB0U3RyKCIvLyIpJiYoYT0hMCl9bGV0IGM9dGhpcy5fY3Vyc29yLnBlZWsoKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLDkyPT09Yz90aGlzLl9jdXJzb3IuYWR2YW5jZSgpOmM9PT1zP3M9bnVsbDohYSYmbnVsbD09PXMmJnVMKGMpJiYocz1jKX1yLnB1c2godGhpcy5fZ2V0UHJvY2Vzc2VkQ2hhcnMobyx0aGlzLl9jdXJzb3IpKSx0aGlzLl9lbmRUb2tlbihyKX1fZ2V0UHJvY2Vzc2VkQ2hhcnModCxlKXtyZXR1cm4gdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhlLmdldENoYXJzKHQpKX1faXNUZXh0RW5kKCl7cmV0dXJuISEodGhpcy5faXNUYWdTdGFydCgpfHwwPT09dGhpcy5fY3Vyc29yLnBlZWsoKXx8dGhpcy5fdG9rZW5pemVJY3UmJiF0aGlzLl9pbkludGVycG9sYXRpb24mJih0aGlzLmlzRXhwYW5zaW9uRm9ybVN0YXJ0KCl8fHRoaXMuX2N1cnNvci5wZWVrKCk9PT10dSYmdGhpcy5faXNJbkV4cGFuc2lvbkNhc2UoKSkpfV9pc1RhZ1N0YXJ0KCl7aWYoNjA9PT10aGlzLl9jdXJzb3IucGVlaygpKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKTt0LmFkdmFuY2UoKTtsZXQgZT10LnBlZWsoKTtpZig5Nzw9ZSYmZTw9MTIyfHw2NTw9ZSYmZTw9OTB8fDQ3PT09ZXx8MzM9PT1lKXJldHVybiEwfXJldHVybiExfV9yZWFkVW50aWwodCl7bGV0IGU9dGhpcy5fY3Vyc29yLmNsb25lKCk7cmV0dXJuIHRoaXMuX2F0dGVtcHRVbnRpbENoYXIodCksdGhpcy5fY3Vyc29yLmdldENoYXJzKGUpfV9pc0luRXhwYW5zaW9uQ2FzZSgpe3JldHVybiB0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoPjAmJjIxPT09dGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrW3RoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGgtMV19X2lzSW5FeHBhbnNpb25Gb3JtKCl7cmV0dXJuIHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGg+MCYmMTk9PT10aGlzLl9leHBhbnNpb25DYXNlU3RhY2tbdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLmxlbmd0aC0xXX1pc0V4cGFuc2lvbkZvcm1TdGFydCgpe2lmKHRoaXMuX2N1cnNvci5wZWVrKCkhPT1mcClyZXR1cm4hMTtpZih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKSxlPXRoaXMuX2F0dGVtcHRTdHIodGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZy5zdGFydCk7cmV0dXJuIHRoaXMuX2N1cnNvcj10LCFlfXJldHVybiEwfX0obmV3IEkxKG4sdCksZSxpKTtyZXR1cm4gci50b2tlbml6ZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50b2tlbnM9dCx0aGlzLmVycm9ycz1lLHRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zPWl9fShmdW5jdGlvbihuKXtsZXQgZSx0PVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO2UmJjU9PT1lLnR5cGUmJjU9PT1yLnR5cGV8fGUmJjE2PT09ZS50eXBlJiYxNj09PXIudHlwZT8oZS5wYXJ0c1swXSs9ci5wYXJ0c1swXSxlLnNvdXJjZVNwYW4uZW5kPXIuc291cmNlU3Bhbi5lbmQpOihlPXIsdC5wdXNoKGUpKX1yZXR1cm4gdH0oci50b2tlbnMpLHIuZXJyb3JzLHIubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zKX0odCxlLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbixpKSxvPW5ldyBQeChyLnRva2Vucyx0aGlzLmdldFRhZ0RlZmluaXRpb24pO3JldHVybiBvLmJ1aWxkKCksbmV3IFUxKG8ucm9vdE5vZGVzLHIuZXJyb3JzLmNvbmNhdChvLmVycm9ycykpfX0sUHg9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnRva2Vucz10LHRoaXMuZ2V0VGFnRGVmaW5pdGlvbj1lLHRoaXMuX2luZGV4PS0xLHRoaXMuX2VsZW1lbnRTdGFjaz1bXSx0aGlzLnJvb3ROb2Rlcz1bXSx0aGlzLmVycm9ycz1bXSx0aGlzLl9hZHZhbmNlKCl9YnVpbGQoKXtmb3IoOzI0IT09dGhpcy5fcGVlay50eXBlOykwPT09dGhpcy5fcGVlay50eXBlfHw0PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVTdGFydFRhZyh0aGlzLl9hZHZhbmNlKCkpOjM9PT10aGlzLl9wZWVrLnR5cGU/dGhpcy5fY29uc3VtZUVuZFRhZyh0aGlzLl9hZHZhbmNlKCkpOjEyPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNkYXRhKHRoaXMuX2FkdmFuY2UoKSkpOjEwPT09dGhpcy5fcGVlay50eXBlPyh0aGlzLl9jbG9zZVZvaWRFbGVtZW50KCksdGhpcy5fY29uc3VtZUNvbW1lbnQodGhpcy5fYWR2YW5jZSgpKSk6NT09PXRoaXMuX3BlZWsudHlwZXx8Nz09PXRoaXMuX3BlZWsudHlwZXx8Nj09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVUZXh0KHRoaXMuX2FkdmFuY2UoKSkpOjE5PT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVFeHBhbnNpb24odGhpcy5fYWR2YW5jZSgpKTp0aGlzLl9hZHZhbmNlKCl9X2FkdmFuY2UoKXtsZXQgdD10aGlzLl9wZWVrO3JldHVybiB0aGlzLl9pbmRleDx0aGlzLnRva2Vucy5sZW5ndGgtMSYmdGhpcy5faW5kZXgrKyx0aGlzLl9wZWVrPXRoaXMudG9rZW5zW3RoaXMuX2luZGV4XSx0fV9hZHZhbmNlSWYodCl7cmV0dXJuIHRoaXMuX3BlZWsudHlwZT09PXQ/dGhpcy5fYWR2YW5jZSgpOm51bGx9X2NvbnN1bWVDZGF0YSh0KXt0aGlzLl9jb25zdW1lVGV4dCh0aGlzLl9hZHZhbmNlKCkpLHRoaXMuX2FkdmFuY2VJZigxMyl9X2NvbnN1bWVDb21tZW50KHQpe2xldCBlPXRoaXMuX2FkdmFuY2VJZig3KTt0aGlzLl9hZHZhbmNlSWYoMTEpO2xldCBpPW51bGwhPWU/ZS5wYXJ0c1swXS50cmltKCk6bnVsbDt0aGlzLl9hZGRUb1BhcmVudChuZXcgVjEoaSx0LnNvdXJjZVNwYW4pKX1fY29uc3VtZUV4cGFuc2lvbih0KXtsZXQgZT10aGlzLl9hZHZhbmNlKCksaT10aGlzLl9hZHZhbmNlKCkscj1bXTtmb3IoOzIwPT09dGhpcy5fcGVlay50eXBlOyl7bGV0IHM9dGhpcy5fcGFyc2VFeHBhbnNpb25DYXNlKCk7aWYoIXMpcmV0dXJuO3IucHVzaChzKX1pZigyMyE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdm9pZCB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHRoaXMuX3BlZWsuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpO2xldCBvPW5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsdGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KTt0aGlzLl9hZGRUb1BhcmVudChuZXcgTjAoZS5wYXJ0c1swXSxpLnBhcnRzWzBdLHIsbyxlLnNvdXJjZVNwYW4pKSx0aGlzLl9hZHZhbmNlKCl9X3BhcnNlRXhwYW5zaW9uQ2FzZSgpe2xldCB0PXRoaXMuX2FkdmFuY2UoKTtpZigyMSE9PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0aGlzLl9wZWVrLnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ3snLiIpKSxudWxsO2xldCBlPXRoaXMuX2FkdmFuY2UoKSxpPXRoaXMuX2NvbGxlY3RFeHBhbnNpb25FeHBUb2tlbnMoZSk7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9dGhpcy5fYWR2YW5jZSgpO2kucHVzaCh7dHlwZToyNCxwYXJ0czpbXSxzb3VyY2VTcGFuOnIuc291cmNlU3Bhbn0pO2xldCBvPW5ldyBQeChpLHRoaXMuZ2V0VGFnRGVmaW5pdGlvbik7aWYoby5idWlsZCgpLG8uZXJyb3JzLmxlbmd0aD4wKXJldHVybiB0aGlzLmVycm9ycz10aGlzLmVycm9ycy5jb25jYXQoby5lcnJvcnMpLG51bGw7bGV0IHM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGE9bmV3IFRvKGUuc291cmNlU3Bhbi5zdGFydCxyLnNvdXJjZVNwYW4uZW5kLGUuc291cmNlU3Bhbi5mdWxsU3RhcnQpO3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnZhbHVlPXQsdGhpcy5leHByZXNzaW9uPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy52YWx1ZVNvdXJjZVNwYW49cix0aGlzLmV4cFNvdXJjZVNwYW49b312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0RXhwYW5zaW9uQ2FzZSh0aGlzLGUpfX0odC5wYXJ0c1swXSxvLnJvb3ROb2RlcyxzLHQuc291cmNlU3BhbixhKX1fY29sbGVjdEV4cGFuc2lvbkV4cFRva2Vucyh0KXtsZXQgZT1bXSxpPVsyMV07Zm9yKDs7KXtpZigoMTk9PT10aGlzLl9wZWVrLnR5cGV8fDIxPT09dGhpcy5fcGVlay50eXBlKSYmaS5wdXNoKHRoaXMuX3BlZWsudHlwZSksMjI9PT10aGlzLl9wZWVrLnR5cGUpe2lmKCF6OShpLDIxKSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobnVsbCx0LnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKSxudWxsO2lmKGkucG9wKCksMD09PWkubGVuZ3RoKXJldHVybiBlfWlmKDIzPT09dGhpcy5fcGVlay50eXBlKXtpZighejkoaSwxOSkpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG51bGwsdC5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd9Jy4iKSksbnVsbDtpLnBvcCgpfWlmKDI0PT09dGhpcy5fcGVlay50eXBlKXJldHVybiB0aGlzLmVycm9ycy5wdXNoKFBhLmNyZWF0ZShudWxsLHQuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpLG51bGw7ZS5wdXNoKHRoaXMuX2FkdmFuY2UoKSl9fV9jb25zdW1lVGV4dCh0KXtsZXQgZT1bdF0saT10LnNvdXJjZVNwYW4scj10LnBhcnRzWzBdO2lmKHIubGVuZ3RoPjAmJiJcbiI9PT1yWzBdKXtsZXQgbz10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7bnVsbCE9byYmMD09PW8uY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oby5uYW1lKS5pZ25vcmVGaXJzdExmJiYocj1yLnN1YnN0cmluZygxKSxlWzBdPXt0eXBlOnQudHlwZSxzb3VyY2VTcGFuOnQuc291cmNlU3BhbixwYXJ0czpbcl19KX1mb3IoOzg9PT10aGlzLl9wZWVrLnR5cGV8fDU9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXQ9dGhpcy5fYWR2YW5jZSgpLGUucHVzaCh0KSxyKz04PT09dC50eXBlP3QucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT10LnR5cGU/dC5wYXJ0c1swXTp0LnBhcnRzLmpvaW4oIiIpO3IubGVuZ3RoPjAmJnRoaXMuX2FkZFRvUGFyZW50KG5ldyBGMChyLG5ldyBUbyhpLnN0YXJ0LHQuc291cmNlU3Bhbi5lbmQsaS5mdWxsU3RhcnQsaS5kZXRhaWxzKSxlKSl9X2Nsb3NlVm9pZEVsZW1lbnQoKXtsZXQgdD10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7dCYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKHQubmFtZSkuaXNWb2lkJiZ0aGlzLl9lbGVtZW50U3RhY2sucG9wKCl9X2NvbnN1bWVTdGFydFRhZyh0KXtsZXRbZSxpXT10LnBhcnRzLHI9W107Zm9yKDsxND09PXRoaXMuX3BlZWsudHlwZTspci5wdXNoKHRoaXMuX2NvbnN1bWVBdHRyKHRoaXMuX2FkdmFuY2UoKSkpO2xldCBvPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZShlLGksdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKSxzPSExO2lmKDI9PT10aGlzLl9wZWVrLnR5cGUpe3RoaXMuX2FkdmFuY2UoKSxzPSEwO2xldCBkPXRoaXMuZ2V0VGFnRGVmaW5pdGlvbihvKTtkLmNhblNlbGZDbG9zZXx8bnVsbCE9PVk3KG8pfHxkLmlzVm9pZHx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUobyx0LnNvdXJjZVNwYW4sYE9ubHkgdm9pZCBhbmQgZm9yZWlnbiBlbGVtZW50cyBjYW4gYmUgc2VsZiBjbG9zZWQgIiR7dC5wYXJ0c1sxXX0iYCkpfWVsc2UgMT09PXRoaXMuX3BlZWsudHlwZSYmKHRoaXMuX2FkdmFuY2UoKSxzPSExKTtsZXQgYT10aGlzLl9wZWVrLnNvdXJjZVNwYW4uZnVsbFN0YXJ0LGw9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLGM9bmV3IFRvKHQuc291cmNlU3Bhbi5zdGFydCxhLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQpLHU9bmV3IEF4KG8scixbXSxsLGMsdm9pZCAwKTt0aGlzLl9wdXNoRWxlbWVudCh1KSxzP3RoaXMuX3BvcEVsZW1lbnQobyxsKTo0PT09dC50eXBlJiYodGhpcy5fcG9wRWxlbWVudChvLG51bGwpLHRoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKG8sbCxgT3BlbmluZyB0YWcgIiR7b30iIG5vdCB0ZXJtaW5hdGVkLmApKSl9X3B1c2hFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtlJiZ0aGlzLmdldFRhZ0RlZmluaXRpb24oZS5uYW1lKS5pc0Nsb3NlZEJ5Q2hpbGQodC5uYW1lKSYmdGhpcy5fZWxlbWVudFN0YWNrLnBvcCgpLHRoaXMuX2FkZFRvUGFyZW50KHQpLHRoaXMuX2VsZW1lbnRTdGFjay5wdXNoKHQpfV9jb25zdW1lRW5kVGFnKHQpe2xldCBlPXRoaXMuX2dldEVsZW1lbnRGdWxsTmFtZSh0LnBhcnRzWzBdLHQucGFydHNbMV0sdGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpKTt0aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaXNWb2lkP3RoaXMuZXJyb3JzLnB1c2goUGEuY3JlYXRlKGUsdC5zb3VyY2VTcGFuLGBWb2lkIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGVuZCB0YWdzICIke3QucGFydHNbMV19ImApKTp0aGlzLl9wb3BFbGVtZW50KGUsdC5zb3VyY2VTcGFuKXx8dGhpcy5lcnJvcnMucHVzaChQYS5jcmVhdGUoZSx0LnNvdXJjZVNwYW4sYFVuZXhwZWN0ZWQgY2xvc2luZyB0YWcgIiR7ZX0iLiBJdCBtYXkgaGFwcGVuIHdoZW4gdGhlIHRhZyBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCBieSBhbm90aGVyIHRhZy4gRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2Nsb3NpbmctZWxlbWVudHMtdGhhdC1oYXZlLWltcGxpZWQtZW5kLXRhZ3NgKSl9X3BvcEVsZW1lbnQodCxlKXtsZXQgaT0hMTtmb3IobGV0IHI9dGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC0xO3I+PTA7ci0tKXtsZXQgbz10aGlzLl9lbGVtZW50U3RhY2tbcl07aWYoby5uYW1lPT09dClyZXR1cm4gby5lbmRTb3VyY2VTcGFuPWUsby5zb3VyY2VTcGFuLmVuZD1udWxsIT09ZT9lLmVuZDpvLnNvdXJjZVNwYW4uZW5kLHRoaXMuX2VsZW1lbnRTdGFjay5zcGxpY2Uocix0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLXIpLCFpO3RoaXMuZ2V0VGFnRGVmaW5pdGlvbihvLm5hbWUpLmNsb3NlZEJ5UGFyZW50fHwoaT0hMCl9cmV0dXJuITF9X2NvbnN1bWVBdHRyKHQpe2xldCBlPWpOKHQucGFydHNbMF0sdC5wYXJ0c1sxXSksaT10LnNvdXJjZVNwYW4uZW5kOzE1PT09dGhpcy5fcGVlay50eXBlJiZ0aGlzLl9hZHZhbmNlKCk7bGV0IHMsYSxyPSIiLG89W107aWYoMTY9PT10aGlzLl9wZWVrLnR5cGUpZm9yKHM9dGhpcy5fcGVlay5zb3VyY2VTcGFuLGE9dGhpcy5fcGVlay5zb3VyY2VTcGFuLmVuZDsxNj09PXRoaXMuX3BlZWsudHlwZXx8MTc9PT10aGlzLl9wZWVrLnR5cGV8fDk9PT10aGlzLl9wZWVrLnR5cGU7KXtsZXQgdT10aGlzLl9hZHZhbmNlKCk7by5wdXNoKHUpLHIrPTE3PT09dS50eXBlP3UucGFydHMuam9pbigiIikucmVwbGFjZSgvJihbXjtdKyk7L2csajkpOjk9PT11LnR5cGU/dS5wYXJ0c1swXTp1LnBhcnRzLmpvaW4oIiIpLGE9aT11LnNvdXJjZVNwYW4uZW5kfTE1PT09dGhpcy5fcGVlay50eXBlJiYoaT10aGlzLl9hZHZhbmNlKCkuc291cmNlU3Bhbi5lbmQpO2xldCBjPXMmJmEmJm5ldyBUbyhzLnN0YXJ0LGEscy5mdWxsU3RhcnQpO3JldHVybiBuZXcgUkwoZSxyLG5ldyBUbyh0LnNvdXJjZVNwYW4uc3RhcnQsaSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSx0LnNvdXJjZVNwYW4sYyxvLmxlbmd0aD4wP286dm9pZCAwLHZvaWQgMCl9X2dldFBhcmVudEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aD4wP3RoaXMuX2VsZW1lbnRTdGFja1t0aGlzLl9lbGVtZW50U3RhY2subGVuZ3RoLTFdOm51bGx9X2FkZFRvUGFyZW50KHQpe2xldCBlPXRoaXMuX2dldFBhcmVudEVsZW1lbnQoKTtudWxsIT1lP2UuY2hpbGRyZW4ucHVzaCh0KTp0aGlzLnJvb3ROb2Rlcy5wdXNoKHQpfV9nZXRFbGVtZW50RnVsbE5hbWUodCxlLGkpe2lmKCIiPT09dCYmIiI9PT0odD10aGlzLmdldFRhZ0RlZmluaXRpb24oZSkuaW1wbGljaXROYW1lc3BhY2VQcmVmaXh8fCIiKSYmbnVsbCE9aSl7bGV0IHI9Y2QoaS5uYW1lKVsxXTt0aGlzLmdldFRhZ0RlZmluaXRpb24ocikucHJldmVudE5hbWVzcGFjZUluaGVyaXRhbmNlfHwodD1ZNyhpLm5hbWUpKX1yZXR1cm4gak4odCxlKX19O2Z1bmN0aW9uIHo5KG4sdCl7cmV0dXJuIG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV09PT10fWZ1bmN0aW9uIGo5KG4sdCl7cmV0dXJuIHZvaWQgMCE9PUgxW3RdP0gxW3RdfHxuOi9eI3hbYS1mMC05XSskL2kudGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDIpLDE2KSk6L14jXGQrJC8udGVzdCh0KT9TdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnNsaWNlKDEpLDEwKSk6bn12YXIgcDEsTkw9Y2xhc3MgZXh0ZW5kcyBGTHtjb25zdHJ1Y3Rvcigpe3N1cGVyKGUzKX1wYXJzZSh0LGUsaSl7cmV0dXJuIHN1cGVyLnBhcnNlKHQsZSxpKX19LEpxPSJuZ1ByZXNlcnZlV2hpdGVzcGFjZXMiLEp5ZT1uZXcgU2V0KFsicHJlIiwidGVtcGxhdGUiLCJ0ZXh0YXJlYSIsInNjcmlwdCIsInN0eWxlIl0pLCRxPSIgXGZcblxyXHRcdlx1MTY4MFx1MTgwZVx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBcdWZlZmYiLCR5ZT1uZXcgUmVnRXhwKGBbXiR7JHF9XWApLGViZT1uZXcgUmVnRXhwKGBbJHskcX1dezIsfWAsImciKTtmdW5jdGlvbiBlWShuKXtyZXR1cm4gbi5yZXBsYWNlKG5ldyBSZWdFeHAoIlx1ZTUwMCIsImciKSwiICIpfWZ1bmN0aW9uIHRZKG4pe3JldHVybiBlWShuKS5yZXBsYWNlKGViZSwiICIpfWZ1bmN0aW9uIHoxKG4sdD0hMSl7cmV0dXJuIG1sKE9iamVjdC5rZXlzKG4pLm1hcChlPT4oe2tleTplLHF1b3RlZDp0LHZhbHVlOm5bZV19KSkpfWZ1bmN0aW9uIEc5KCl7cmV0dXJuIHAxfHwocDE9e30sbzEoWXIuSFRNTCxbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVySFRNTCIsIip8b3V0ZXJIVE1MIl0pLG8xKFlyLlNUWUxFLFsiKnxzdHlsZSJdKSxvMShZci5VUkwsWyIqfGZvcm1BY3Rpb24iLCJhcmVhfGhyZWYiLCJhcmVhfHBpbmciLCJhdWRpb3xzcmMiLCJhfGhyZWYiLCJhfHBpbmciLCJibG9ja3F1b3RlfGNpdGUiLCJib2R5fGJhY2tncm91bmQiLCJkZWx8Y2l0ZSIsImZvcm18YWN0aW9uIiwiaW1nfHNyYyIsImlucHV0fHNyYyIsImluc3xjaXRlIiwicXxjaXRlIiwic291cmNlfHNyYyIsInRyYWNrfHNyYyIsInZpZGVvfHBvc3RlciIsInZpZGVvfHNyYyJdKSxvMShZci5SRVNPVVJDRV9VUkwsWyJhcHBsZXR8Y29kZSIsImFwcGxldHxjb2RlYmFzZSIsImJhc2V8aHJlZiIsImVtYmVkfHNyYyIsImZyYW1lfHNyYyIsImhlYWR8cHJvZmlsZSIsImh0bWx8bWFuaWZlc3QiLCJpZnJhbWV8c3JjIiwibGlua3xocmVmIiwibWVkaWF8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiLCJzY3JpcHR8c3JjIl0pKSxwMX1mdW5jdGlvbiBvMShuLHQpe2ZvcihsZXQgZSBvZiB0KXAxW2UudG9Mb3dlckNhc2UoKV09bn12YXIgQkw9Y2xhc3N7fSxsYmU9WyJbRWxlbWVudF18dGV4dENvbnRlbnQsJWNsYXNzTGlzdCxjbGFzc05hbWUsaWQsaW5uZXJIVE1MLCpiZWZvcmVjb3B5LCpiZWZvcmVjdXQsKmJlZm9yZXBhc3RlLCpjb3B5LCpjdXQsKnBhc3RlLCpzZWFyY2gsKnNlbGVjdHN0YXJ0LCp3ZWJraXRmdWxsc2NyZWVuY2hhbmdlLCp3ZWJraXRmdWxsc2NyZWVuZXJyb3IsKndoZWVsLG91dGVySFRNTCwjc2Nyb2xsTGVmdCwjc2Nyb2xsVG9wLHNsb3QsKm1lc3NhZ2UsKm1vemZ1bGxzY3JlZW5jaGFuZ2UsKm1vemZ1bGxzY3JlZW5lcnJvciwqbW96cG9pbnRlcmxvY2tjaGFuZ2UsKm1venBvaW50ZXJsb2NrZXJyb3IsKndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IsKndlYmdsY29udGV4dGxvc3QsKndlYmdsY29udGV4dHJlc3RvcmVkIiwiW0hUTUxFbGVtZW50XV5bRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJhYmJyLGFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiLGJkaSxiZG8sY2l0ZSxjb2RlLGRkLGRmbixkdCxlbSxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGksa2JkLG1haW4sbWFyayxuYXYsbm9zY3JpcHQscmIscnAscnQscnRjLHJ1YnkscyxzYW1wLHNlY3Rpb24sc21hbGwsc3Ryb25nLHN1YixzdXAsdSx2YXIsd2JyXltIVE1MRWxlbWVudF18YWNjZXNzS2V5LGNvbnRlbnRFZGl0YWJsZSxkaXIsIWRyYWdnYWJsZSwhaGlkZGVuLGlubmVyVGV4dCxsYW5nLCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLG91dGVyVGV4dCwhc3BlbGxjaGVjaywlc3R5bGUsI3RhYkluZGV4LHRpdGxlLCF0cmFuc2xhdGUiLCJtZWRpYV5bSFRNTEVsZW1lbnRdfCFhdXRvcGxheSwhY29udHJvbHMsJWNvbnRyb2xzTGlzdCwlY3Jvc3NPcmlnaW4sI2N1cnJlbnRUaW1lLCFkZWZhdWx0TXV0ZWQsI2RlZmF1bHRQbGF5YmFja1JhdGUsIWRpc2FibGVSZW1vdGVQbGF5YmFjaywhbG9vcCwhbXV0ZWQsKmVuY3J5cHRlZCwqd2FpdGluZ2ZvcmtleSwjcGxheWJhY2tSYXRlLHByZWxvYWQsc3JjLCVzcmNPYmplY3QsI3ZvbHVtZSIsIjpzdmc6XltIVE1MRWxlbWVudF18KmFib3J0LCphdXhjbGljaywqYmx1ciwqY2FuY2VsLCpjYW5wbGF5LCpjYW5wbGF5dGhyb3VnaCwqY2hhbmdlLCpjbGljaywqY2xvc2UsKmNvbnRleHRtZW51LCpjdWVjaGFuZ2UsKmRibGNsaWNrLCpkcmFnLCpkcmFnZW5kLCpkcmFnZW50ZXIsKmRyYWdsZWF2ZSwqZHJhZ292ZXIsKmRyYWdzdGFydCwqZHJvcCwqZHVyYXRpb25jaGFuZ2UsKmVtcHRpZWQsKmVuZGVkLCplcnJvciwqZm9jdXMsKmdvdHBvaW50ZXJjYXB0dXJlLCppbnB1dCwqaW52YWxpZCwqa2V5ZG93biwqa2V5cHJlc3MsKmtleXVwLCpsb2FkLCpsb2FkZWRkYXRhLCpsb2FkZWRtZXRhZGF0YSwqbG9hZHN0YXJ0LCpsb3N0cG9pbnRlcmNhcHR1cmUsKm1vdXNlZG93biwqbW91c2VlbnRlciwqbW91c2VsZWF2ZSwqbW91c2Vtb3ZlLCptb3VzZW91dCwqbW91c2VvdmVyLCptb3VzZXVwLCptb3VzZXdoZWVsLCpwYXVzZSwqcGxheSwqcGxheWluZywqcG9pbnRlcmNhbmNlbCwqcG9pbnRlcmRvd24sKnBvaW50ZXJlbnRlciwqcG9pbnRlcmxlYXZlLCpwb2ludGVybW92ZSwqcG9pbnRlcm91dCwqcG9pbnRlcm92ZXIsKnBvaW50ZXJ1cCwqcHJvZ3Jlc3MsKnJhdGVjaGFuZ2UsKnJlc2V0LCpyZXNpemUsKnNjcm9sbCwqc2Vla2VkLCpzZWVraW5nLCpzZWxlY3QsKnNob3csKnN0YWxsZWQsKnN1Ym1pdCwqc3VzcGVuZCwqdGltZXVwZGF0ZSwqdG9nZ2xlLCp2b2x1bWVjaGFuZ2UsKndhaXRpbmcsJXN0eWxlLCN0YWJJbmRleCIsIjpzdmc6Z3JhcGhpY3NeOnN2Zzp8IiwiOnN2ZzphbmltYXRpb25eOnN2Zzp8KmJlZ2luLCplbmQsKnJlcGVhdCIsIjpzdmc6Z2VvbWV0cnleOnN2Zzp8IiwiOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uXjpzdmc6fCIsIjpzdmc6Z3JhZGllbnReOnN2Zzp8IiwiOnN2Zzp0ZXh0Q29udGVudF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6dGV4dFBvc2l0aW9uaW5nXjpzdmc6dGV4dENvbnRlbnR8IiwiYV5bSFRNTEVsZW1lbnRdfGNoYXJzZXQsY29vcmRzLGRvd25sb2FkLGhhc2gsaG9zdCxob3N0bmFtZSxocmVmLGhyZWZsYW5nLG5hbWUscGFzc3dvcmQscGF0aG5hbWUscGluZyxwb3J0LHByb3RvY29sLHJlZmVycmVyUG9saWN5LHJlbCxyZXYsc2VhcmNoLHNoYXBlLHRhcmdldCx0ZXh0LHR5cGUsdXNlcm5hbWUiLCJhcmVhXltIVE1MRWxlbWVudF18YWx0LGNvb3Jkcyxkb3dubG9hZCxoYXNoLGhvc3QsaG9zdG5hbWUsaHJlZiwhbm9IcmVmLHBhc3N3b3JkLHBhdGhuYW1lLHBpbmcscG9ydCxwcm90b2NvbCxyZWZlcnJlclBvbGljeSxyZWwsc2VhcmNoLHNoYXBlLHRhcmdldCx1c2VybmFtZSIsImF1ZGlvXm1lZGlhfCIsImJyXltIVE1MRWxlbWVudF18Y2xlYXIiLCJiYXNlXltIVE1MRWxlbWVudF18aHJlZix0YXJnZXQiLCJib2R5XltIVE1MRWxlbWVudF18YUxpbmssYmFja2dyb3VuZCxiZ0NvbG9yLGxpbmssKmJlZm9yZXVubG9hZCwqYmx1ciwqZXJyb3IsKmZvY3VzLCpoYXNoY2hhbmdlLCpsYW5ndWFnZWNoYW5nZSwqbG9hZCwqbWVzc2FnZSwqb2ZmbGluZSwqb25saW5lLCpwYWdlaGlkZSwqcGFnZXNob3csKnBvcHN0YXRlLCpyZWplY3Rpb25oYW5kbGVkLCpyZXNpemUsKnNjcm9sbCwqc3RvcmFnZSwqdW5oYW5kbGVkcmVqZWN0aW9uLCp1bmxvYWQsdGV4dCx2TGluayIsImJ1dHRvbl5bSFRNTEVsZW1lbnRdfCFhdXRvZm9jdXMsIWRpc2FibGVkLGZvcm1BY3Rpb24sZm9ybUVuY3R5cGUsZm9ybU1ldGhvZCwhZm9ybU5vVmFsaWRhdGUsZm9ybVRhcmdldCxuYW1lLHR5cGUsdmFsdWUiLCJjYW52YXNeW0hUTUxFbGVtZW50XXwjaGVpZ2h0LCN3aWR0aCIsImNvbnRlbnReW0hUTUxFbGVtZW50XXxzZWxlY3QiLCJkbF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGF0YWxpc3ReW0hUTUxFbGVtZW50XXwiLCJkZXRhaWxzXltIVE1MRWxlbWVudF18IW9wZW4iLCJkaWFsb2deW0hUTUxFbGVtZW50XXwhb3BlbixyZXR1cm5WYWx1ZSIsImRpcl5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwiZGl2XltIVE1MRWxlbWVudF18YWxpZ24iLCJlbWJlZF5bSFRNTEVsZW1lbnRdfGFsaWduLGhlaWdodCxuYW1lLHNyYyx0eXBlLHdpZHRoIiwiZmllbGRzZXReW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbmFtZSIsImZvbnReW0hUTUxFbGVtZW50XXxjb2xvcixmYWNlLHNpemUiLCJmb3JtXltIVE1MRWxlbWVudF18YWNjZXB0Q2hhcnNldCxhY3Rpb24sYXV0b2NvbXBsZXRlLGVuY29kaW5nLGVuY3R5cGUsbWV0aG9kLG5hbWUsIW5vVmFsaWRhdGUsdGFyZ2V0IiwiZnJhbWVeW0hUTUxFbGVtZW50XXxmcmFtZUJvcmRlcixsb25nRGVzYyxtYXJnaW5IZWlnaHQsbWFyZ2luV2lkdGgsbmFtZSwhbm9SZXNpemUsc2Nyb2xsaW5nLHNyYyIsImZyYW1lc2V0XltIVE1MRWxlbWVudF18Y29scywqYmVmb3JldW5sb2FkLCpibHVyLCplcnJvciwqZm9jdXMsKmhhc2hjaGFuZ2UsKmxhbmd1YWdlY2hhbmdlLCpsb2FkLCptZXNzYWdlLCpvZmZsaW5lLCpvbmxpbmUsKnBhZ2VoaWRlLCpwYWdlc2hvdywqcG9wc3RhdGUsKnJlamVjdGlvbmhhbmRsZWQsKnJlc2l6ZSwqc2Nyb2xsLCpzdG9yYWdlLCp1bmhhbmRsZWRyZWplY3Rpb24sKnVubG9hZCxyb3dzIiwiaHJeW0hUTUxFbGVtZW50XXxhbGlnbixjb2xvciwhbm9TaGFkZSxzaXplLHdpZHRoIiwiaGVhZF5bSFRNTEVsZW1lbnRdfCIsImgxLGgyLGgzLGg0LGg1LGg2XltIVE1MRWxlbWVudF18YWxpZ24iLCJodG1sXltIVE1MRWxlbWVudF18dmVyc2lvbiIsImlmcmFtZV5bSFRNTEVsZW1lbnRdfGFsaWduLCFhbGxvd0Z1bGxzY3JlZW4sZnJhbWVCb3JkZXIsaGVpZ2h0LGxvbmdEZXNjLG1hcmdpbkhlaWdodCxtYXJnaW5XaWR0aCxuYW1lLHJlZmVycmVyUG9saWN5LCVzYW5kYm94LHNjcm9sbGluZyxzcmMsc3JjZG9jLHdpZHRoIiwiaW1nXltIVE1MRWxlbWVudF18YWxpZ24sYWx0LGJvcmRlciwlY3Jvc3NPcmlnaW4sI2hlaWdodCwjaHNwYWNlLCFpc01hcCxsb25nRGVzYyxsb3dzcmMsbmFtZSxyZWZlcnJlclBvbGljeSxzaXplcyxzcmMsc3Jjc2V0LHVzZU1hcCwjdnNwYWNlLCN3aWR0aCIsImlucHV0XltIVE1MRWxlbWVudF18YWNjZXB0LGFsaWduLGFsdCxhdXRvY2FwaXRhbGl6ZSxhdXRvY29tcGxldGUsIWF1dG9mb2N1cywhY2hlY2tlZCwhZGVmYXVsdENoZWNrZWQsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCVmaWxlcyxmb3JtQWN0aW9uLGZvcm1FbmN0eXBlLGZvcm1NZXRob2QsIWZvcm1Ob1ZhbGlkYXRlLGZvcm1UYXJnZXQsI2hlaWdodCwhaW5jcmVtZW50YWwsIWluZGV0ZXJtaW5hdGUsbWF4LCNtYXhMZW5ndGgsbWluLCNtaW5MZW5ndGgsIW11bHRpcGxlLG5hbWUscGF0dGVybixwbGFjZWhvbGRlciwhcmVhZE9ubHksIXJlcXVpcmVkLHNlbGVjdGlvbkRpcmVjdGlvbiwjc2VsZWN0aW9uRW5kLCNzZWxlY3Rpb25TdGFydCwjc2l6ZSxzcmMsc3RlcCx0eXBlLHVzZU1hcCx2YWx1ZSwldmFsdWVBc0RhdGUsI3ZhbHVlQXNOdW1iZXIsI3dpZHRoIiwibGleW0hUTUxFbGVtZW50XXx0eXBlLCN2YWx1ZSIsImxhYmVsXltIVE1MRWxlbWVudF18aHRtbEZvciIsImxlZ2VuZF5bSFRNTEVsZW1lbnRdfGFsaWduIiwibGlua15bSFRNTEVsZW1lbnRdfGFzLGNoYXJzZXQsJWNyb3NzT3JpZ2luLCFkaXNhYmxlZCxocmVmLGhyZWZsYW5nLGludGVncml0eSxtZWRpYSxyZWZlcnJlclBvbGljeSxyZWwsJXJlbExpc3QscmV2LCVzaXplcyx0YXJnZXQsdHlwZSIsIm1hcF5bSFRNTEVsZW1lbnRdfG5hbWUiLCJtYXJxdWVlXltIVE1MRWxlbWVudF18YmVoYXZpb3IsYmdDb2xvcixkaXJlY3Rpb24saGVpZ2h0LCNoc3BhY2UsI2xvb3AsI3Njcm9sbEFtb3VudCwjc2Nyb2xsRGVsYXksIXRydWVTcGVlZCwjdnNwYWNlLHdpZHRoIiwibWVudV5bSFRNTEVsZW1lbnRdfCFjb21wYWN0IiwibWV0YV5bSFRNTEVsZW1lbnRdfGNvbnRlbnQsaHR0cEVxdWl2LG5hbWUsc2NoZW1lIiwibWV0ZXJeW0hUTUxFbGVtZW50XXwjaGlnaCwjbG93LCNtYXgsI21pbiwjb3B0aW11bSwjdmFsdWUiLCJpbnMsZGVsXltIVE1MRWxlbWVudF18Y2l0ZSxkYXRlVGltZSIsIm9sXltIVE1MRWxlbWVudF18IWNvbXBhY3QsIXJldmVyc2VkLCNzdGFydCx0eXBlIiwib2JqZWN0XltIVE1MRWxlbWVudF18YWxpZ24sYXJjaGl2ZSxib3JkZXIsY29kZSxjb2RlQmFzZSxjb2RlVHlwZSxkYXRhLCFkZWNsYXJlLGhlaWdodCwjaHNwYWNlLG5hbWUsc3RhbmRieSx0eXBlLHVzZU1hcCwjdnNwYWNlLHdpZHRoIiwib3B0Z3JvdXBeW0hUTUxFbGVtZW50XXwhZGlzYWJsZWQsbGFiZWwiLCJvcHRpb25eW0hUTUxFbGVtZW50XXwhZGVmYXVsdFNlbGVjdGVkLCFkaXNhYmxlZCxsYWJlbCwhc2VsZWN0ZWQsdGV4dCx2YWx1ZSIsIm91dHB1dF5bSFRNTEVsZW1lbnRdfGRlZmF1bHRWYWx1ZSwlaHRtbEZvcixuYW1lLHZhbHVlIiwicF5bSFRNTEVsZW1lbnRdfGFsaWduIiwicGFyYW1eW0hUTUxFbGVtZW50XXxuYW1lLHR5cGUsdmFsdWUsdmFsdWVUeXBlIiwicGljdHVyZV5bSFRNTEVsZW1lbnRdfCIsInByZV5bSFRNTEVsZW1lbnRdfCN3aWR0aCIsInByb2dyZXNzXltIVE1MRWxlbWVudF18I21heCwjdmFsdWUiLCJxLGJsb2NrcXVvdGUsY2l0ZV5bSFRNTEVsZW1lbnRdfCIsInNjcmlwdF5bSFRNTEVsZW1lbnRdfCFhc3luYyxjaGFyc2V0LCVjcm9zc09yaWdpbiwhZGVmZXIsZXZlbnQsaHRtbEZvcixpbnRlZ3JpdHksc3JjLHRleHQsdHlwZSIsInNlbGVjdF5bSFRNTEVsZW1lbnRdfGF1dG9jb21wbGV0ZSwhYXV0b2ZvY3VzLCFkaXNhYmxlZCwjbGVuZ3RoLCFtdWx0aXBsZSxuYW1lLCFyZXF1aXJlZCwjc2VsZWN0ZWRJbmRleCwjc2l6ZSx2YWx1ZSIsInNoYWRvd15bSFRNTEVsZW1lbnRdfCIsInNsb3ReW0hUTUxFbGVtZW50XXxuYW1lIiwic291cmNlXltIVE1MRWxlbWVudF18bWVkaWEsc2l6ZXMsc3JjLHNyY3NldCx0eXBlIiwic3Bhbl5bSFRNTEVsZW1lbnRdfCIsInN0eWxlXltIVE1MRWxlbWVudF18IWRpc2FibGVkLG1lZGlhLHR5cGUiLCJjYXB0aW9uXltIVE1MRWxlbWVudF18YWxpZ24iLCJ0aCx0ZF5bSFRNTEVsZW1lbnRdfGFiYnIsYWxpZ24sYXhpcyxiZ0NvbG9yLGNoLGNoT2ZmLCNjb2xTcGFuLGhlYWRlcnMsaGVpZ2h0LCFub1dyYXAsI3Jvd1NwYW4sc2NvcGUsdkFsaWduLHdpZHRoIiwiY29sLGNvbGdyb3VwXltIVE1MRWxlbWVudF18YWxpZ24sY2gsY2hPZmYsI3NwYW4sdkFsaWduLHdpZHRoIiwidGFibGVeW0hUTUxFbGVtZW50XXxhbGlnbixiZ0NvbG9yLGJvcmRlciwlY2FwdGlvbixjZWxsUGFkZGluZyxjZWxsU3BhY2luZyxmcmFtZSxydWxlcyxzdW1tYXJ5LCV0Rm9vdCwldEhlYWQsd2lkdGgiLCJ0cl5bSFRNTEVsZW1lbnRdfGFsaWduLGJnQ29sb3IsY2gsY2hPZmYsdkFsaWduIiwidGZvb3QsdGhlYWQsdGJvZHleW0hUTUxFbGVtZW50XXxhbGlnbixjaCxjaE9mZix2QWxpZ24iLCJ0ZW1wbGF0ZV5bSFRNTEVsZW1lbnRdfCIsInRleHRhcmVhXltIVE1MRWxlbWVudF18YXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLCFhdXRvZm9jdXMsI2NvbHMsZGVmYXVsdFZhbHVlLGRpck5hbWUsIWRpc2FibGVkLCNtYXhMZW5ndGgsI21pbkxlbmd0aCxuYW1lLHBsYWNlaG9sZGVyLCFyZWFkT25seSwhcmVxdWlyZWQsI3Jvd3Msc2VsZWN0aW9uRGlyZWN0aW9uLCNzZWxlY3Rpb25FbmQsI3NlbGVjdGlvblN0YXJ0LHZhbHVlLHdyYXAiLCJ0aXRsZV5bSFRNTEVsZW1lbnRdfHRleHQiLCJ0cmFja15bSFRNTEVsZW1lbnRdfCFkZWZhdWx0LGtpbmQsbGFiZWwsc3JjLHNyY2xhbmciLCJ1bF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0LHR5cGUiLCJ1bmtub3duXltIVE1MRWxlbWVudF18IiwidmlkZW9ebWVkaWF8I2hlaWdodCxwb3N0ZXIsI3dpZHRoIiwiOnN2ZzphXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzphbmltYXRlXjpzdmc6YW5pbWF0aW9ufCIsIjpzdmc6YW5pbWF0ZU1vdGlvbl46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOmFuaW1hdGVUcmFuc2Zvcm1eOnN2ZzphbmltYXRpb258IiwiOnN2ZzpjaXJjbGVeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmNsaXBQYXRoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZWZzXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpkZXNjXjpzdmc6fCIsIjpzdmc6ZGlzY2FyZF46c3ZnOnwiLCI6c3ZnOmVsbGlwc2VeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmZlQmxlbmReOnN2Zzp8IiwiOnN2ZzpmZUNvbG9yTWF0cml4Xjpzdmc6fCIsIjpzdmc6ZmVDb21wb25lbnRUcmFuc2Zlcl46c3ZnOnwiLCI6c3ZnOmZlQ29tcG9zaXRlXjpzdmc6fCIsIjpzdmc6ZmVDb252b2x2ZU1hdHJpeF46c3ZnOnwiLCI6c3ZnOmZlRGlmZnVzZUxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVEaXNwbGFjZW1lbnRNYXBeOnN2Zzp8IiwiOnN2ZzpmZURpc3RhbnRMaWdodF46c3ZnOnwiLCI6c3ZnOmZlRHJvcFNoYWRvd146c3ZnOnwiLCI6c3ZnOmZlRmxvb2ReOnN2Zzp8IiwiOnN2ZzpmZUZ1bmNBXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlRnVuY0JeOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9ufCIsIjpzdmc6ZmVGdW5jR146c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUZ1bmNSXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlR2F1c3NpYW5CbHVyXjpzdmc6fCIsIjpzdmc6ZmVJbWFnZV46c3ZnOnwiLCI6c3ZnOmZlTWVyZ2VeOnN2Zzp8IiwiOnN2ZzpmZU1lcmdlTm9kZV46c3ZnOnwiLCI6c3ZnOmZlTW9ycGhvbG9neV46c3ZnOnwiLCI6c3ZnOmZlT2Zmc2V0Xjpzdmc6fCIsIjpzdmc6ZmVQb2ludExpZ2h0Xjpzdmc6fCIsIjpzdmc6ZmVTcGVjdWxhckxpZ2h0aW5nXjpzdmc6fCIsIjpzdmc6ZmVTcG90TGlnaHReOnN2Zzp8IiwiOnN2ZzpmZVRpbGVeOnN2Zzp8IiwiOnN2ZzpmZVR1cmJ1bGVuY2VeOnN2Zzp8IiwiOnN2ZzpmaWx0ZXJeOnN2Zzp8IiwiOnN2Zzpmb3JlaWduT2JqZWN0Xjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpnXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzppbWFnZV46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6bGluZV46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6bGluZWFyR3JhZGllbnReOnN2ZzpncmFkaWVudHwiLCI6c3ZnOm1wYXRoXjpzdmc6fCIsIjpzdmc6bWFya2VyXjpzdmc6fCIsIjpzdmc6bWFza146c3ZnOnwiLCI6c3ZnOm1ldGFkYXRhXjpzdmc6fCIsIjpzdmc6cGF0aF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6cGF0dGVybl46c3ZnOnwiLCI6c3ZnOnBvbHlnb25eOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnBvbHlsaW5lXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpyYWRpYWxHcmFkaWVudF46c3ZnOmdyYWRpZW50fCIsIjpzdmc6cmVjdF46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6c3ZnXjpzdmc6Z3JhcGhpY3N8I2N1cnJlbnRTY2FsZSwjem9vbUFuZFBhbiIsIjpzdmc6c2NyaXB0Xjpzdmc6fHR5cGUiLCI6c3ZnOnNldF46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOnN0b3BeOnN2Zzp8IiwiOnN2ZzpzdHlsZV46c3ZnOnwhZGlzYWJsZWQsbWVkaWEsdGl0bGUsdHlwZSIsIjpzdmc6c3dpdGNoXjpzdmc6Z3JhcGhpY3N8IiwiOnN2ZzpzeW1ib2xeOnN2Zzp8IiwiOnN2Zzp0c3Bhbl46c3ZnOnRleHRQb3NpdGlvbmluZ3wiLCI6c3ZnOnRleHReOnN2Zzp0ZXh0UG9zaXRpb25pbmd8IiwiOnN2Zzp0ZXh0UGF0aF46c3ZnOnRleHRDb250ZW50fCIsIjpzdmc6dGl0bGVeOnN2Zzp8IiwiOnN2Zzp1c2VeOnN2ZzpncmFwaGljc3wiLCI6c3ZnOnZpZXdeOnN2Zzp8I3pvb21BbmRQYW4iLCJkYXRhXltIVE1MRWxlbWVudF18dmFsdWUiLCJrZXlnZW5eW0hUTUxFbGVtZW50XXwhYXV0b2ZvY3VzLGNoYWxsZW5nZSwhZGlzYWJsZWQsZm9ybSxrZXl0eXBlLG5hbWUiLCJtZW51aXRlbV5bSFRNTEVsZW1lbnRdfHR5cGUsbGFiZWwsaWNvbiwhZGlzYWJsZWQsIWNoZWNrZWQscmFkaW9ncm91cCwhZGVmYXVsdCIsInN1bW1hcnleW0hUTUxFbGVtZW50XXwiLCJ0aW1lXltIVE1MRWxlbWVudF18ZGF0ZVRpbWUiLCI6c3ZnOmN1cnNvcl46c3ZnOnwiXSxuWT1uZXcgTWFwKE9iamVjdC5lbnRyaWVzKHtjbGFzczoiY2xhc3NOYW1lIixmb3I6Imh0bWxGb3IiLGZvcm1hY3Rpb246ImZvcm1BY3Rpb24iLGlubmVySHRtbDoiaW5uZXJIVE1MIixyZWFkb25seToicmVhZE9ubHkiLHRhYmluZGV4OiJ0YWJJbmRleCJ9KSksY2JlPUFycmF5LmZyb20oblkpLnJlZHVjZSgobixbdCxlXSk9PihuLnNldCh0LGUpLG4pLG5ldyBNYXApLGoxPWNsYXNzIGV4dGVuZHMgQkx7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3NjaGVtYT1uZXcgTWFwLHRoaXMuX2V2ZW50U2NoZW1hPW5ldyBNYXAsbGJlLmZvckVhY2godD0+e2xldCBlPW5ldyBNYXAsaT1uZXcgU2V0LFtyLG9dPXQuc3BsaXQoInwiKSxzPW8uc3BsaXQoIiwiKSxbYSxsXT1yLnNwbGl0KCJeIik7YS5zcGxpdCgiLCIpLmZvckVhY2godT0+e3RoaXMuX3NjaGVtYS5zZXQodS50b0xvd2VyQ2FzZSgpLGUpLHRoaXMuX2V2ZW50U2NoZW1hLnNldCh1LnRvTG93ZXJDYXNlKCksaSl9KTtsZXQgYz1sJiZ0aGlzLl9zY2hlbWEuZ2V0KGwudG9Mb3dlckNhc2UoKSk7aWYoYyl7Zm9yKGxldFt1LGRdb2YgYyllLnNldCh1LGQpO2ZvcihsZXQgdSBvZiB0aGlzLl9ldmVudFNjaGVtYS5nZXQobC50b0xvd2VyQ2FzZSgpKSlpLmFkZCh1KX1zLmZvckVhY2godT0+e2lmKHUubGVuZ3RoPjApc3dpdGNoKHVbMF0pe2Nhc2UiKiI6aS5hZGQodS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UiISI6ZS5zZXQodS5zdWJzdHJpbmcoMSksImJvb2xlYW4iKTticmVhaztjYXNlIiMiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJudW1iZXIiKTticmVhaztjYXNlIiUiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJvYmplY3QiKTticmVhaztkZWZhdWx0OmUuc2V0KHUsInN0cmluZyIpfX0pfSl9aGFzUHJvcGVydHkodCxlLGkpe2lmKGkuc29tZShvPT4ibm8tZXJyb3JzLXNjaGVtYSI9PT1vLm5hbWUpKXJldHVybiEwO2lmKHQuaW5kZXhPZigiLSIpPi0xKXtpZihVTih0KXx8ek4odCkpcmV0dXJuITE7aWYoaS5zb21lKG89PiJjdXN0b20tZWxlbWVudHMiPT09by5uYW1lKSlyZXR1cm4hMH1yZXR1cm4odGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIikpLmhhcyhlKX1oYXNFbGVtZW50KHQsZSl7cmV0dXJuISEoZS5zb21lKGk9PiJuby1lcnJvcnMtc2NoZW1hIj09PWkubmFtZSl8fHQuaW5kZXhPZigiLSIpPi0xJiYoVU4odCl8fHpOKHQpfHxlLnNvbWUoaT0+ImN1c3RvbS1lbGVtZW50cyI9PT1pLm5hbWUpKSl8fHRoaXMuX3NjaGVtYS5oYXModC50b0xvd2VyQ2FzZSgpKX1zZWN1cml0eUNvbnRleHQodCxlLGkpe2kmJihlPXRoaXMuZ2V0TWFwcGVkUHJvcE5hbWUoZSkpLHQ9dC50b0xvd2VyQ2FzZSgpLGU9ZS50b0xvd2VyQ2FzZSgpO2xldCByPUc5KClbdCsifCIrZV07cmV0dXJuIHJ8fChyPUc5KClbIip8IitlXSxyfHxZci5OT05FKX1nZXRNYXBwZWRQcm9wTmFtZSh0KXtyZXR1cm4gblkuZ2V0KHQpPz90fWdldERlZmF1bHRDb21wb25lbnRFbGVtZW50TmFtZSgpe3JldHVybiJuZy1jb21wb25lbnQifXZhbGlkYXRlUHJvcGVydHkodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJvbiIpP3tlcnJvcjohMCxtc2c6YEJpbmRpbmcgdG8gZXZlbnQgcHJvcGVydHkgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLlxuSWYgJyR7dH0nIGlzIGEgZGlyZWN0aXZlIGlucHV0LCBtYWtlIHN1cmUgdGhlIGRpcmVjdGl2ZSBpcyBpbXBvcnRlZCBieSB0aGUgY3VycmVudCBtb2R1bGUuYH06e2Vycm9yOiExfX12YWxpZGF0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gdC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoIm9uIik/e2Vycm9yOiEwLG1zZzpgQmluZGluZyB0byBldmVudCBhdHRyaWJ1dGUgJyR7dH0nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHBsZWFzZSB1c2UgKCR7dC5zbGljZSgyKX0pPS4uLmB9OntlcnJvcjohMX19YWxsS25vd25FbGVtZW50TmFtZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zY2hlbWEua2V5cygpKX1hbGxLbm93bkF0dHJpYnV0ZXNPZkVsZW1lbnQodCl7bGV0IGU9dGhpcy5fc2NoZW1hLmdldCh0LnRvTG93ZXJDYXNlKCkpfHx0aGlzLl9zY2hlbWEuZ2V0KCJ1bmtub3duIik7cmV0dXJuIEFycmF5LmZyb20oZS5rZXlzKCkpLm1hcChpPT5jYmUuZ2V0KGkpPz9pKX1hbGxLbm93bkV2ZW50c09mRWxlbWVudCh0KXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9ldmVudFNjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKT8/W10pfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlUHJvcGVydHkodCl7cmV0dXJuIHQucmVwbGFjZShjX2UsKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpfW5vcm1hbGl6ZUFuaW1hdGlvblN0eWxlVmFsdWUodCxlLGkpe2xldCByPSIiLG89aS50b1N0cmluZygpLnRyaW0oKSxzPW51bGw7aWYoZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2Uid2lkdGgiOmNhc2UiaGVpZ2h0IjpjYXNlIm1pbldpZHRoIjpjYXNlIm1pbkhlaWdodCI6Y2FzZSJtYXhXaWR0aCI6Y2FzZSJtYXhIZWlnaHQiOmNhc2UibGVmdCI6Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlInJpZ2h0IjpjYXNlImZvbnRTaXplIjpjYXNlIm91dGxpbmVXaWR0aCI6Y2FzZSJvdXRsaW5lT2Zmc2V0IjpjYXNlInBhZGRpbmdUb3AiOmNhc2UicGFkZGluZ0xlZnQiOmNhc2UicGFkZGluZ0JvdHRvbSI6Y2FzZSJwYWRkaW5nUmlnaHQiOmNhc2UibWFyZ2luVG9wIjpjYXNlIm1hcmdpbkxlZnQiOmNhc2UibWFyZ2luQm90dG9tIjpjYXNlIm1hcmdpblJpZ2h0IjpjYXNlImJvcmRlclJhZGl1cyI6Y2FzZSJib3JkZXJXaWR0aCI6Y2FzZSJib3JkZXJUb3BXaWR0aCI6Y2FzZSJib3JkZXJMZWZ0V2lkdGgiOmNhc2UiYm9yZGVyUmlnaHRXaWR0aCI6Y2FzZSJib3JkZXJCb3R0b21XaWR0aCI6Y2FzZSJ0ZXh0SW5kZW50IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0odCkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlyPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJihzPWBQbGVhc2UgcHJvdmlkZSBhIENTUyB1bml0IHZhbHVlIGZvciAke2V9OiR7aX1gKX1yZXR1cm57ZXJyb3I6cyx2YWx1ZTpvK3J9fX0sVzk9bmV3IFNldChbImlmcmFtZXxzcmNkb2MiLCIqfGlubmVyaHRtbCIsIip8b3V0ZXJodG1sIiwiZW1iZWR8c3JjIiwib2JqZWN0fGNvZGViYXNlIiwib2JqZWN0fGRhdGEiXSk7ZnVuY3Rpb24gaVkobix0KXtyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksdD10LnRvTG93ZXJDYXNlKCksVzkuaGFzKG4rInwiK3QpfHxXOS5oYXMoIip8Iit0KX12YXIgUE49ImFuaW1hdGUtIjtmdW5jdGlvbiBSTihuKXtyZXR1cm4iQCI9PW5bMF19ZnVuY3Rpb24gT04obix0LGUsaSl7bGV0IHI9W107cmV0dXJuIHVkLnBhcnNlKHQpLmZvckVhY2gobz0+e2xldCBzPW8uZWxlbWVudD9bby5lbGVtZW50XTpuLmFsbEtub3duRWxlbWVudE5hbWVzKCksYT1uZXcgU2V0KG8ubm90U2VsZWN0b3JzLmZpbHRlcihjPT5jLmlzRWxlbWVudFNlbGVjdG9yKCkpLm1hcChjPT5jLmVsZW1lbnQpKSxsPXMuZmlsdGVyKGM9PiFhLmhhcyhjKSk7ci5wdXNoKC4uLmwubWFwKGM9Pm4uc2VjdXJpdHlDb250ZXh0KGMsZSxpKSkpfSksMD09PXIubGVuZ3RoP1tZci5OT05FXTpBcnJheS5mcm9tKG5ldyBTZXQocikpLnNvcnQoKX1mdW5jdGlvbiBjcChuLHQpe2xldCBlPXQuc3RhcnQtbi5zdGFydC5vZmZzZXQsaT10LmVuZC1uLmVuZC5vZmZzZXQ7cmV0dXJuIG5ldyBUbyhuLnN0YXJ0Lm1vdmVCeShlKSxuLmVuZC5tb3ZlQnkoaSksbi5mdWxsU3RhcnQubW92ZUJ5KGUpLG4uZGV0YWlscyl9dmFyIGdiZT0vXihbXjovPyNdKyk6LztmdW5jdGlvbiByWShuKXtsZXQgdD1udWxsLGU9bnVsbCxpPW51bGwscj0hMSxvPSIiO24uYXR0cnMuZm9yRWFjaChsPT57bGV0IGM9bC5uYW1lLnRvTG93ZXJDYXNlKCk7InNlbGVjdCI9PWM/dD1sLnZhbHVlOiJocmVmIj09Yz9lPWwudmFsdWU6InJlbCI9PWM/aT1sLnZhbHVlOiJuZ05vbkJpbmRhYmxlIj09bC5uYW1lP3I9ITA6Im5nUHJvamVjdEFzIj09bC5uYW1lJiZsLnZhbHVlLmxlbmd0aD4wJiYobz1sLnZhbHVlKX0pLHQ9ZnVuY3Rpb24obil7cmV0dXJuIG51bGw9PT1ufHwwPT09bi5sZW5ndGg/IioiOm59KHQpO2xldCBzPW4ubmFtZS50b0xvd2VyQ2FzZSgpLGE9UHMuT1RIRVI7cmV0dXJuIHpOKHMpP2E9UHMuTkdfQ09OVEVOVDoic3R5bGUiPT1zP2E9UHMuU1RZTEU6InNjcmlwdCI9PXM/YT1Qcy5TQ1JJUFQ6ImxpbmsiPT1zJiYic3R5bGVzaGVldCI9PWkmJihhPVBzLlNUWUxFU0hFRVQpLG5ldyBITChhLHQsZSxyLG8pfXZhciBQcz0oKCk9PntyZXR1cm4obj1Qc3x8KFBzPXt9KSlbbi5OR19DT05URU5UPTBdPSJOR19DT05URU5UIixuW24uU1RZTEU9MV09IlNUWUxFIixuW24uU1RZTEVTSEVFVD0yXT0iU1RZTEVTSEVFVCIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uT1RIRVI9NF09Ik9USEVSIixQczt2YXIgbn0pKCksSEw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdEF0dHI9ZSx0aGlzLmhyZWZBdHRyPWksdGhpcy5ub25CaW5kYWJsZT1yLHRoaXMucHJvamVjdEFzPW99fSxUYmU9L14oPzooYmluZC0pfChsZXQtKXwocmVmLXwjKXwob24tKXwoYmluZG9uLSl8KEApKSguKikkLyx1cF9CQU5BTkFfQk9YPXtzdGFydDoiWygiLGVuZDoiKV0ifSx1cF9QUk9QRVJUWT17c3RhcnQ6IlsiLGVuZDoiXSJ9LHVwX0VWRU5UPXtzdGFydDoiKCIsZW5kOiIpIn0sSWJlPW5ldyBjbGFzc3t2aXNpdEVsZW1lbnQodCl7bGV0IGU9clkodCk7aWYoZS50eXBlPT09UHMuU0NSSVBUfHxlLnR5cGU9PT1Qcy5TVFlMRXx8ZS50eXBlPT09UHMuU1RZTEVTSEVFVClyZXR1cm4gbnVsbDtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sbnVsbCk7cmV0dXJuIG5ldyBFMCh0Lm5hbWUsY3UodGhpcyx0LmF0dHJzKSxbXSxbXSxpLFtdLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pfXZpc2l0Q29tbWVudCh0KXtyZXR1cm4gbnVsbH12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIG5ldyB3MCh0LnZhbHVlLHQuc291cmNlU3Bhbil9dmlzaXRFeHBhbnNpb24odCl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb25DYXNlKHQpe3JldHVybiBudWxsfX07ZnVuY3Rpb24gJDkobil7cmV0dXJuL15kYXRhLS9pLnRlc3Qobik/bi5zdWJzdHJpbmcoNSk6bn1mdW5jdGlvbiBrTihuLHQpe3QucHVzaCguLi5uLm1hcChlPT5TMC5mcm9tUGFyc2VkRXZlbnQoZSkpKX12YXIgcmM9KCgpPT57cmV0dXJuKG49cmN8fChyYz17fSkpW24uRUxFTUVOVD0wXT0iRUxFTUVOVCIsbltuLlRFTVBMQVRFPTFdPSJURU1QTEFURSIscmM7dmFyIG59KSgpLFJ4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPTAscj1udWxsLG8scyl7dGhpcy5pbmRleD10LHRoaXMucmVmPWUsdGhpcy5sZXZlbD1pLHRoaXMudGVtcGxhdGVJbmRleD1yLHRoaXMubWV0YT1vLHRoaXMucmVnaXN0cnk9cyx0aGlzLmJpbmRpbmdzPW5ldyBTZXQsdGhpcy5wbGFjZWhvbGRlcnM9bmV3IE1hcCx0aGlzLmlzRW1pdHRlZD0hMSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQ9MCx0aGlzLl9yZWdpc3RyeT1zfHx7Z2V0VW5pcXVlSWQ6bXZlKCksaWN1czpuZXcgTWFwfSx0aGlzLmlkPXRoaXMuX3JlZ2lzdHJ5LmdldFVuaXF1ZUlkKCl9YXBwZW5kVGFnKHQsZSxpLHIpe2UuaXNWb2lkJiZyfHx1MSh0aGlzLnBsYWNlaG9sZGVycyxlLmlzVm9pZHx8IXI/ZS5zdGFydE5hbWU6ZS5jbG9zZU5hbWUse3R5cGU6dCxpbmRleDppLGN0eDp0aGlzLmlkLGlzVm9pZDplLmlzVm9pZCxjbG9zZWQ6cn0pfWdldCBpY3VzKCl7cmV0dXJuIHRoaXMuX3JlZ2lzdHJ5LmljdXN9Z2V0IGlzUm9vdCgpe3JldHVybiAwPT09dGhpcy5sZXZlbH1nZXQgaXNSZXNvbHZlZCgpe3JldHVybiAwPT09dGhpcy5fdW5yZXNvbHZlZEN0eENvdW50fWdldFNlcmlhbGl6ZWRQbGFjZWhvbGRlcnMoKXtsZXQgdD1uZXcgTWFwO3JldHVybiB0aGlzLnBsYWNlaG9sZGVycy5mb3JFYWNoKChlLGkpPT50LnNldChpLGUubWFwKEZiZSkpKSx0fWFwcGVuZEJpbmRpbmcodCl7dGhpcy5iaW5kaW5ncy5hZGQodCl9YXBwZW5kSWN1KHQsZSl7dTEodGhpcy5fcmVnaXN0cnkuaWN1cyx0LGUpfWFwcGVuZEJvdW5kVGV4dCh0KXtEcSh0LHRoaXMuYmluZGluZ3Muc2l6ZSx0aGlzLmlkKS5mb3JFYWNoKChpLHIpPT51MSh0aGlzLnBsYWNlaG9sZGVycyxyLC4uLmkpKX1hcHBlbmRUZW1wbGF0ZSh0LGUpe3RoaXMuYXBwZW5kVGFnKHJjLlRFTVBMQVRFLHQsZSwhMSksdGhpcy5hcHBlbmRUYWcocmMuVEVNUExBVEUsdCxlLCEwKSx0aGlzLl91bnJlc29sdmVkQ3R4Q291bnQrK31hcHBlbmRFbGVtZW50KHQsZSxpKXt0aGlzLmFwcGVuZFRhZyhyYy5FTEVNRU5ULHQsZSxpKX1hcHBlbmRQcm9qZWN0aW9uKHQsZSl7dGhpcy5hcHBlbmRUYWcocmMuRUxFTUVOVCx0LGUsITEpLHRoaXMuYXBwZW5kVGFnKHJjLkVMRU1FTlQsdCxlLCEwKX1mb3JrQ2hpbGRDb250ZXh0KHQsZSxpKXtyZXR1cm4gbmV3IFJ4KHQsdGhpcy5yZWYsdGhpcy5sZXZlbCsxLGUsaSx0aGlzLl9yZWdpc3RyeSl9cmVjb25jaWxlQ2hpbGRDb250ZXh0KHQpe1sic3RhcnQiLCJjbG9zZSJdLmZvckVhY2goaT0+e2xldCBzPSh0aGlzLnBsYWNlaG9sZGVycy5nZXQodC5tZXRhW2Ake2l9TmFtZWBdKXx8W10pLmZpbmQoZXEodGhpcy5pZCx0LnRlbXBsYXRlSW5kZXgpKTtzJiYocy5jdHg9dC5pZCl9KSx0LnBsYWNlaG9sZGVycy5mb3JFYWNoKChpLHIpPT57bGV0IG89dGhpcy5wbGFjZWhvbGRlcnMuZ2V0KHIpO2lmKCFvKXJldHVybiB2b2lkIHRoaXMucGxhY2Vob2xkZXJzLnNldChyLGkpO2xldCBzPW8uZmluZEluZGV4KGVxKHQuaWQsdC50ZW1wbGF0ZUluZGV4KSk7aWYocz49MCl7bGV0IGE9ci5zdGFydHNXaXRoKCJDTE9TRSIpO3IuZW5kc1dpdGgoIk5HLVRFTVBMQVRFIik/by5zcGxpY2UocysoYT8wOjEpLDAsLi4uaSk6KGlbYT9pLmxlbmd0aC0xOjBdLnRtcGw9b1tzXSxvLnNwbGljZShzLDEsLi4uaSkpfWVsc2Ugby5wdXNoKC4uLmkpO3RoaXMucGxhY2Vob2xkZXJzLnNldChyLG8pfSksdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50LS19fTtmdW5jdGlvbiBGTihuLHQsZSxpKXtyZXR1cm4gUTEoYCR7aT8iLyI6IiJ9JHtufSR7dH1gLGUpfWZ1bmN0aW9uIE5OKG4se2luZGV4OnQsY3R4OmUsaXNWb2lkOml9LHIpe3JldHVybiBpP0ZOKG4sdCxlKStGTihuLHQsZSwhMCk6Rk4obix0LGUscil9ZnVuY3Rpb24gZXEobix0KXtyZXR1cm4gZT0+Im9iamVjdCI9PXR5cGVvZiBlJiZlLnR5cGU9PT1yYy5URU1QTEFURSYmZS5pbmRleD09PXQmJmUuY3R4PT09bn1mdW5jdGlvbiBGYmUobil7bGV0IHQ9KHIsbyk9Pk5OKCIjIixyLG8pLGU9KHIsbyk9Pk5OKCIqIixyLG8pO3N3aXRjaChuLnR5cGUpe2Nhc2UgcmMuRUxFTUVOVDpyZXR1cm4gbi5jbG9zZWQ/dChuLCEwKSsobi50bXBsP2Uobi50bXBsLCEwKToiIik6bi50bXBsP2Uobi50bXBsKSt0KG4pKyhuLmlzVm9pZD9lKG4udG1wbCwhMCk6IiIpOnQobik7Y2FzZSByYy5URU1QTEFURTpyZXR1cm4gZShuLG4uY2xvc2VkKTtkZWZhdWx0OnJldHVybiBufX12YXIgTmJlPW5ldyBjbGFzc3t2aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCl7cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfXZpc2l0SWN1KHQpe2xldCBlPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9uUGxhY2Vob2xkZXJ9LCAke3QudHlwZX0sICR7ZS5qb2luKCIgIil9fWB9dmlzaXRUYWdQbGFjZWhvbGRlcih0KXtyZXR1cm4gdC5pc1ZvaWQ/dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSk6YCR7dGhpcy5mb3JtYXRQaCh0LnN0YXJ0TmFtZSl9JHt0LmNoaWxkcmVuLm1hcChlPT5lLnZpc2l0KHRoaXMpKS5qb2luKCIiKX0ke3RoaXMuZm9ybWF0UGgodC5jbG9zZU5hbWUpfWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCxlKXtyZXR1cm4gdGhpcy5mb3JtYXRQaCh0Lm5hbWUpfWZvcm1hdFBoKHQpe3JldHVybmB7JHtGeCh0LCExKX19YH19O2Z1bmN0aW9uIG9ZKG4pe3JldHVybiBuLnZpc2l0KE5iZSl9dmFyIHRxPXtBOiJMSU5LIixCOiJCT0xEX1RFWFQiLEJSOiJMSU5FX0JSRUFLIixFTToiRU1QSEFTSVNFRF9URVhUIixIMToiSEVBRElOR19MRVZFTDEiLEgyOiJIRUFESU5HX0xFVkVMMiIsSDM6IkhFQURJTkdfTEVWRUwzIixINDoiSEVBRElOR19MRVZFTDQiLEg1OiJIRUFESU5HX0xFVkVMNSIsSDY6IkhFQURJTkdfTEVWRUw2IixIUjoiSE9SSVpPTlRBTF9SVUxFIixJOiJJVEFMSUNfVEVYVCIsTEk6IkxJU1RfSVRFTSIsTElOSzoiTUVESUFfTElOSyIsT0w6Ik9SREVSRURfTElTVCIsUDoiUEFSQUdSQVBIIixROiJRVU9UQVRJT04iLFM6IlNUUklLRVRIUk9VR0hfVEVYVCIsU01BTEw6IlNNQUxMX1RFWFQiLFNVQjoiU1VCU1RSSVBUIixTVVA6IlNVUEVSU0NSSVBUIixUQk9EWToiVEFCTEVfQk9EWSIsVEQ6IlRBQkxFX0NFTEwiLFRGT09UOiJUQUJMRV9GT09URVIiLFRIOiJUQUJMRV9IRUFERVJfQ0VMTCIsVEhFQUQ6IlRBQkxFX0hFQURFUiIsVFI6IlRBQkxFX1JPVyIsVFQ6Ik1PTk9TUEFDRURfVEVYVCIsVToiVU5ERVJMSU5FRF9URVhUIixVTDoiVU5PUkRFUkVEX0xJU1QifSxHTD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50cz17fSx0aGlzLl9zaWduYXR1cmVUb05hbWU9e319Z2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodCxlLGkpe2xldCByPXRoaXMuX2hhc2hUYWcodCxlLGkpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdO2xldCBvPXQudG9VcHBlckNhc2UoKSxzPXRxW29dfHxgVEFHXyR7b31gLGE9dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGk/czpgU1RBUlRfJHtzfWApO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09YSxhfWdldENsb3NlVGFnUGxhY2Vob2xkZXJOYW1lKHQpe2xldCBlPXRoaXMuX2hhc2hDbG9zaW5nVGFnKHQpO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdO2xldCBpPXQudG9VcHBlckNhc2UoKSxvPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShgQ0xPU0VfJHt0cVtpXXx8YFRBR18ke2l9YH1gKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW2VdPW8sb31nZXRQbGFjZWhvbGRlck5hbWUodCxlKXtsZXQgaT10LnRvVXBwZXJDYXNlKCkscj1gUEg6ICR7aX09JHtlfWA7aWYodGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdKXJldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl07bGV0IG89dGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKGkpO3JldHVybiB0aGlzLl9zaWduYXR1cmVUb05hbWVbcl09byxvfWdldFVuaXF1ZVBsYWNlaG9sZGVyKHQpe3JldHVybiB0aGlzLl9nZW5lcmF0ZVVuaXF1ZU5hbWUodC50b1VwcGVyQ2FzZSgpKX1faGFzaFRhZyh0LGUsaSl7cmV0dXJuYDwke3R9YCtPYmplY3Qua2V5cyhlKS5zb3J0KCkubWFwKGE9PmAgJHthfT0ke2VbYV19YCkuam9pbigiIikrKGk/Ii8+IjpgPjwvJHt0fT5gKX1faGFzaENsb3NpbmdUYWcodCl7cmV0dXJuIHRoaXMuX2hhc2hUYWcoYC8ke3R9YCx7fSwhMSl9X2dlbmVyYXRlVW5pcXVlTmFtZSh0KXtpZighdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHNbdF09MSx0O2xldCBpPXRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50c1t0XTtyZXR1cm4gdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzW3RdPWkrMSxgJHt0fV8ke2l9YH19LExiZT1uZXcgQjEobmV3IEwxKTtmdW5jdGlvbiBWYmUobix0KXtyZXR1cm4gdH12YXIgamJlPS9cL1wvW1xzXFNdKmkxOG5bXHNcU10qXChbXHNcU10qcGhbXHNcU10qPVtcc1xTXSooInwnKShbXHNcU10qPylcMVtcc1xTXSpcKS9nLHFMPWNsYXNzIGV4dGVuZHMgTWZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpfX0sV2JlPShuLHQpPT4obiBpbnN0YW5jZW9mIFRmJiYodCBpbnN0YW5jZW9mIFQwJiZuLmkxOG4gaW5zdGFuY2VvZiBpdSYmKHQucHJldmlvdXNNZXNzYWdlPW4uaTE4biksbi5pMThuPXQpLHQpLEcxPWNsYXNze2NvbnN0cnVjdG9yKHQ9JGMsZT0hMSxpPSExKXt0aGlzLmludGVycG9sYXRpb25Db25maWc9dCx0aGlzLmtlZXBJMThuQXR0cnM9ZSx0aGlzLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ9aSx0aGlzLmhhc0kxOG5NZXRhPSExLHRoaXMuX2Vycm9ycz1bXSx0aGlzLl9jcmVhdGVJMThuTWVzc2FnZT1mdW5jdGlvbihuKXtsZXQgdD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9leHByZXNzaW9uUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lfXRvSTE4bk1lc3NhZ2UodCxlPSIiLGk9IiIscj0iIixvKXtsZXQgcz17aXNJY3U6MT09dC5sZW5ndGgmJnRbMF1pbnN0YW5jZW9mIE4wLGljdURlcHRoOjAscGxhY2Vob2xkZXJSZWdpc3RyeTpuZXcgR0wscGxhY2Vob2xkZXJUb0NvbnRlbnQ6e30scGxhY2Vob2xkZXJUb01lc3NhZ2U6e30sdmlzaXROb2RlRm46b3x8VmJlfSxhPWN1KHRoaXMsdCxzKTtyZXR1cm4gbmV3IGl1KGEscy5wbGFjZWhvbGRlclRvQ29udGVudCxzLnBsYWNlaG9sZGVyVG9NZXNzYWdlLGUsaSxyKX12aXNpdEVsZW1lbnQodCxlKXtsZXQgaT1jdSh0aGlzLHQuY2hpbGRyZW4sZSkscj17fTt0LmF0dHJzLmZvckVhY2goYz0+e3JbYy5uYW1lXT1jLnZhbHVlfSk7bGV0IG89ZTModC5uYW1lKS5pc1ZvaWQscz1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0U3RhcnRUYWdQbGFjZWhvbGRlck5hbWUodC5uYW1lLHIsbyk7ZS5wbGFjZWhvbGRlclRvQ29udGVudFtzXT17dGV4dDp0LnN0YXJ0U291cmNlU3Bhbi50b1N0cmluZygpLHNvdXJjZVNwYW46dC5zdGFydFNvdXJjZVNwYW59O2xldCBhPSIiO298fChhPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRDbG9zZVRhZ1BsYWNlaG9sZGVyTmFtZSh0Lm5hbWUpLGUucGxhY2Vob2xkZXJUb0NvbnRlbnRbYV09e3RleHQ6YDwvJHt0Lm5hbWV9PmAsc291cmNlU3Bhbjp0LmVuZFNvdXJjZVNwYW4/P3Quc291cmNlU3Bhbn0pO2xldCBsPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7dGhpcy50YWc9dCx0aGlzLmF0dHJzPWUsdGhpcy5zdGFydE5hbWU9aSx0aGlzLmNsb3NlTmFtZT1yLHRoaXMuY2hpbGRyZW49byx0aGlzLmlzVm9pZD1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWN9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRhZ1BsYWNlaG9sZGVyKHRoaXMsZSl9fSh0Lm5hbWUscixzLGEsaSxvLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsbCl9dmlzaXRBdHRyaWJ1dGUodCxlKXtsZXQgaT12b2lkIDA9PT10LnZhbHVlVG9rZW5zfHwxPT09dC52YWx1ZVRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC52YWx1ZVNwYW58fHQuc291cmNlU3Bhbik6dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC52YWx1ZVRva2Vucyx0LnZhbHVlU3Bhbnx8dC5zb3VyY2VTcGFuLGUsdC5pMThuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGkpfXZpc2l0VGV4dCh0LGUpe2xldCBpPTE9PT10LnRva2Vucy5sZW5ndGg/bmV3IGwwKHQudmFsdWUsdC5zb3VyY2VTcGFuKTp0aGlzLl92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LnRva2Vucyx0LnNvdXJjZVNwYW4sZSx0LmkxOG4pO3JldHVybiBlLnZpc2l0Tm9kZUZuKHQsaSl9dmlzaXRDb21tZW50KHQsZSl7cmV0dXJuIG51bGx9dmlzaXRFeHBhbnNpb24odCxlKXtlLmljdURlcHRoKys7bGV0IGk9e30scj1uZXcgUzEodC5zd2l0Y2hWYWx1ZSx0LnR5cGUsaSx0LnNvdXJjZVNwYW4pO2lmKHQuY2FzZXMuZm9yRWFjaChhPT57aVthLnZhbHVlXT1uZXcgYmYoYS5leHByZXNzaW9uLm1hcChsPT5sLnZpc2l0KHRoaXMsZSkpLGEuZXhwU291cmNlU3Bhbil9KSxlLmljdURlcHRoLS0sZS5pc0ljdXx8ZS5pY3VEZXB0aD4wKXtsZXQgYT1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0VW5pcXVlUGxhY2Vob2xkZXIoYFZBUl8ke3QudHlwZX1gKTtyZXR1cm4gci5leHByZXNzaW9uUGxhY2Vob2xkZXI9YSxlLnBsYWNlaG9sZGVyVG9Db250ZW50W2FdPXt0ZXh0OnQuc3dpdGNoVmFsdWUsc291cmNlU3Bhbjp0LnN3aXRjaFZhbHVlU291cmNlU3Bhbn0sZS52aXNpdE5vZGVGbih0LHIpfWxldCBvPWUucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRQbGFjZWhvbGRlck5hbWUoIklDVSIsdC5zb3VyY2VTcGFuLnRvU3RyaW5nKCkpO2UucGxhY2Vob2xkZXJUb01lc3NhZ2Vbb109dGhpcy50b0kxOG5NZXNzYWdlKFt0XSwiIiwiIiwiIix2b2lkIDApO2xldCBzPW5ldyBUMChyLG8sdC5zb3VyY2VTcGFuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LHMpfXZpc2l0RXhwYW5zaW9uQ2FzZSh0LGUpe3Rocm93IG5ldyBFcnJvcigiVW5yZWFjaGFibGUgY29kZSIpfV92aXNpdFRleHRXaXRoSW50ZXJwb2xhdGlvbih0LGUsaSxyKXtsZXQgbz1bXSxzPSExO2ZvcihsZXQgYSBvZiB0KXN3aXRjaChhLnR5cGUpe2Nhc2UgODpjYXNlIDE3OnM9ITA7bGV0IGw9YS5wYXJ0c1sxXSxjPWwuc3BsaXQoamJlKVsyXXx8IklOVEVSUE9MQVRJT04iLHU9aS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFBsYWNlaG9sZGVyTmFtZShjLGwpO2kucGxhY2Vob2xkZXJUb0NvbnRlbnRbdV09e3RleHQ6YS5wYXJ0cy5qb2luKCIiKSxzb3VyY2VTcGFuOmEuc291cmNlU3Bhbn0sby5wdXNoKG5ldyBFMShsLHUsYS5zb3VyY2VTcGFuKSk7YnJlYWs7ZGVmYXVsdDppZihhLnBhcnRzWzBdLmxlbmd0aD4wKXtsZXQgZD1vW28ubGVuZ3RoLTFdO2QgaW5zdGFuY2VvZiBsMD8oZC52YWx1ZSs9YS5wYXJ0c1swXSxkLnNvdXJjZVNwYW49bmV3IFRvKGQuc291cmNlU3Bhbi5zdGFydCxhLnNvdXJjZVNwYW4uZW5kLGQuc291cmNlU3Bhbi5mdWxsU3RhcnQsZC5zb3VyY2VTcGFuLmRldGFpbHMpKTpvLnB1c2gobmV3IGwwKGEucGFydHNbMF0sYS5zb3VyY2VTcGFuKSl9fXJldHVybiBzPyhmdW5jdGlvbihuLHQpe2lmKHQgaW5zdGFuY2VvZiBpdSYmKGZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZXM7aWYoMSE9PXQubGVuZ3RofHwhKHRbMF1pbnN0YW5jZW9mIGJmKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcHJldmlvdXMgaTE4biBtZXNzYWdlIC0gZXhwZWN0ZWQgaXQgdG8gY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIGBDb250YWluZXJgIG5vZGUuIil9KHQpLHQ9dC5ub2Rlc1swXSksdCBpbnN0YW5jZW9mIGJmKXshZnVuY3Rpb24obix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIG51bWJlciBvZiBpMThuIG1lc3NhZ2UgY2hpbGRyZW4gY2hhbmdlZCBiZXR3ZWVuIGZpcnN0IGFuZCBzZWNvbmQgcGFzcy4iKTtpZihuLnNvbWUoKGUsaSk9PnRbaV0uY29uc3RydWN0b3IhPT1lLmNvbnN0cnVjdG9yKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlcyBvZiB0aGUgaTE4biBtZXNzYWdlIGNoaWxkcmVuIGNoYW5nZWQgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIHBhc3MuIil9KHQuY2hpbGRyZW4sbik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5zb3VyY2VTcGFuPXQuY2hpbGRyZW5bZV0uc291cmNlU3Bhbn19KG8sciksbmV3IGJmKG8sZSkpOm9bMF19fShMYmUsbik7cmV0dXJuKGUsaSxyLG8scyk9PnQudG9JMThuTWVzc2FnZShlLGkscixvLHMpfSh0aGlzLmludGVycG9sYXRpb25Db25maWcpfV9nZW5lcmF0ZUkxOG5NZXNzYWdlKHQsZT0iIixpKXtsZXR7bWVhbmluZzpyLGRlc2NyaXB0aW9uOm8sY3VzdG9tSWQ6c309dGhpcy5fcGFyc2VNZXRhZGF0YShlKSxhPXRoaXMuX2NyZWF0ZUkxOG5NZXNzYWdlKHQscixvLHMsaSk7cmV0dXJuIHRoaXMuX3NldE1lc3NhZ2VJZChhLGUpLHRoaXMuX3NldExlZ2FjeUlkcyhhLGUpLGF9dmlzaXRBbGxXaXRoRXJyb3JzKHQpe2xldCBlPXQubWFwKGk9PmkudmlzaXQodGhpcyxudWxsKSk7cmV0dXJuIG5ldyBVMShlLHRoaXMuX2Vycm9ycyl9dmlzaXRFbGVtZW50KHQpe2xldCBlO2lmKGZ1bmN0aW9uKG4pe3JldHVybiBuLmF0dHJzLnNvbWUodD0+ZnVuY3Rpb24obil7cmV0dXJuImkxOG4iPT09bnx8bi5zdGFydHNXaXRoKGxMKX0odC5uYW1lKSl9KHQpKXt0aGlzLmhhc0kxOG5NZXRhPSEwO2xldCBpPVtdLHI9e307Zm9yKGxldCBvIG9mIHQuYXR0cnMpaWYoImkxOG4iPT09by5uYW1lKWU9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZSh0LmNoaWxkcmVuLHQuaTE4bnx8by52YWx1ZSxXYmUpLDA9PT1lLm5vZGVzLmxlbmd0aCYmKGU9dm9pZCAwKSx0LmkxOG49ZTtlbHNlIGlmKG8ubmFtZS5zdGFydHNXaXRoKGxMKSl7bGV0IHM9by5uYW1lLnNsaWNlKGxMLmxlbmd0aCk7aVkodC5uYW1lLHMpP3RoaXMuX3JlcG9ydEVycm9yKG8sYFRyYW5zbGF0aW5nIGF0dHJpYnV0ZSAnJHtzfScgaXMgZGlzYWxsb3dlZCBmb3Igc2VjdXJpdHkgcmVhc29ucy5gKTpyW3NdPW8udmFsdWV9ZWxzZSBpLnB1c2gobyk7aWYoT2JqZWN0LmtleXMocikubGVuZ3RoKWZvcihsZXQgbyBvZiBpKXtsZXQgcz1yW28ubmFtZV07dm9pZCAwIT09cyYmby52YWx1ZSYmKG8uaTE4bj10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFtvXSxvLmkxOG58fHMpKX10aGlzLmtlZXBJMThuQXR0cnN8fCh0LmF0dHJzPWkpfXJldHVybiBjdSh0aGlzLHQuY2hpbGRyZW4sZSksdH12aXNpdEV4cGFuc2lvbih0LGUpe2xldCBpLHI9dC5pMThuO2lmKHRoaXMuaGFzSTE4bk1ldGE9ITAsciBpbnN0YW5jZW9mIFQwKXtsZXQgbz1yLm5hbWU7aT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxyKSxUcShpKS5uYW1lPW8sbnVsbCE9PWUmJihlLnBsYWNlaG9sZGVyVG9NZXNzYWdlW29dPWkpfWVsc2UgaT10aGlzLl9nZW5lcmF0ZUkxOG5NZXNzYWdlKFt0XSxlfHxyKTtyZXR1cm4gdC5pMThuPWksdH12aXNpdFRleHQodCl7cmV0dXJuIHR9dmlzaXRBdHRyaWJ1dGUodCl7cmV0dXJuIHR9dmlzaXRDb21tZW50KHQpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gdH1fcGFyc2VNZXRhZGF0YSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24obj0iIil7bGV0IHQsZSxpO2lmKG49bi50cmltKCkpe2xldCBzLHI9bi5pbmRleE9mKCJAQCIpLG89bi5pbmRleE9mKCJ8Iik7W3MsdF09cj4tMT9bbi5zbGljZSgwLHIpLG4uc2xpY2UocisyKV06W24sIiJdLFtlLGldPW8+LTE/W3Muc2xpY2UoMCxvKSxzLnNsaWNlKG8rMSldOlsiIixzXX1yZXR1cm57Y3VzdG9tSWQ6dCxtZWFuaW5nOmUsZGVzY3JpcHRpb246aX19KHQpOnQgaW5zdGFuY2VvZiBpdT90Ont9fV9zZXRNZXNzYWdlSWQodCxlKXt2YXIgbjt0LmlkfHwodC5pZD1lIGluc3RhbmNlb2YgaXUmJmUuaWR8fChuPXQpLmlkfHxfcShuKSl9X3NldExlZ2FjeUlkcyh0LGUpe2lmKHRoaXMuZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdCl0LmxlZ2FjeUlkcz1bbV9lKHQpLF9xKHQpXTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgZSl7bGV0IGk9ZSBpbnN0YW5jZW9mIGl1P2U6ZSBpbnN0YW5jZW9mIFQwP2UucHJldmlvdXNNZXNzYWdlOnZvaWQgMDt0LmxlZ2FjeUlkcz1pP2kubGVnYWN5SWRzOltdfX1fcmVwb3J0RXJyb3IodCxlKXt0aGlzLl9lcnJvcnMucHVzaChuZXcgcUwodC5zb3VyY2VTcGFuLGUpKX19O2Z1bmN0aW9uIFpiZShuLHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4gbi5ub2Rlcy5tYXAodD0+dC52aXNpdChKYmUsbnVsbCkpLmpvaW4oIiIpfSh0KSxvPVtudChyKV07T2JqZWN0LmtleXMoaSkubGVuZ3RoJiYoby5wdXNoKHoxKHMzKGksITApLCEwKSksby5wdXNoKHoxKHtvcmlnaW5hbF9jb2RlOm1sKE9iamVjdC5rZXlzKGkpLm1hcChsPT4oe2tleTpGeChsKSxxdW90ZWQ6ITAsdmFsdWU6bnQodC5wbGFjZWhvbGRlcnNbbF0/dC5wbGFjZWhvbGRlcnNbbF0uc291cmNlU3Bhbi50b1N0cmluZygpOnQucGxhY2Vob2xkZXJUb01lc3NhZ2VbbF0ubm9kZXMubWFwKGM9PmMuc291cmNlU3Bhbi50b1N0cmluZygpKS5qb2luKCIiKSl9KSkpfSkpKTtsZXQgcz1lLnNldChNaSgiZ29vZy5nZXRNc2ciKS5jYWxsRm4obykpLnRvQ29uc3REZWNsKCk7cmV0dXJuIHMuYWRkTGVhZGluZ0NvbW1lbnQoZnVuY3Rpb24obil7bGV0IHQ9W107cmV0dXJuIHQucHVzaChuLmRlc2NyaXB0aW9uP3t0YWdOYW1lOiJkZXNjIix0ZXh0Om4uZGVzY3JpcHRpb259Ont0YWdOYW1lOiJzdXBwcmVzcyIsdGV4dDoie21zZ0Rlc2NyaXB0aW9uc30ifSksbi5tZWFuaW5nJiZ0LnB1c2goe3RhZ05hbWU6Im1lYW5pbmciLHRleHQ6bi5tZWFuaW5nfSksZnVuY3Rpb24obj1bXSl7cmV0dXJuIG5ldyBiMShuKX0odCl9KHQpKSxbcyxuZXcgbHUobi5zZXQoZSkpXX12YXIgSmJlPW5ldyBjbGFzc3tmb3JtYXRQaCh0KXtyZXR1cm5geyQke0Z4KHQpfX1gfXZpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7cmV0dXJuIG9ZKHQpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7cmV0dXJuIHQuaXNWb2lkP3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpOmAke3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpfSR7dC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9JHt0aGlzLmZvcm1hdFBoKHQuY2xvc2VOYW1lKX1gfXZpc2l0UGxhY2Vob2xkZXIodCl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX19O2Z1bmN0aW9uIGV4ZShuLHQsZSl7bGV0e21lc3NhZ2VQYXJ0czppLHBsYWNlSG9sZGVyczpyfT1mdW5jdGlvbihuKXtsZXQgdD1bXSxlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucGxhY2Vob2xkZXJUb01lc3NhZ2U9dCx0aGlzLnBpZWNlcz1lfXZpc2l0VGV4dCh0KXtpZih0aGlzLnBpZWNlc1t0aGlzLnBpZWNlcy5sZW5ndGgtMV1pbnN0YW5jZW9mIGhmKXRoaXMucGllY2VzW3RoaXMucGllY2VzLmxlbmd0aC0xXS50ZXh0Kz10LnZhbHVlO2Vsc2V7bGV0IGU9bmV3IFRvKHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5kZXRhaWxzKTt0aGlzLnBpZWNlcy5wdXNoKG5ldyBoZih0LnZhbHVlLGUpKX19dmlzaXRDb250YWluZXIodCl7dC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpfXZpc2l0SWN1KHQpe3RoaXMucGllY2VzLnB1c2gobmV3IGhmKG9ZKHQpLHQuc291cmNlU3BhbikpfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5zdGFydE5hbWUsdC5zdGFydFNvdXJjZVNwYW4/P3Quc291cmNlU3BhbikpLHQuaXNWb2lkfHwodC5jaGlsZHJlbi5mb3JFYWNoKGU9PmUudmlzaXQodGhpcykpLHRoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQuY2xvc2VOYW1lLHQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSkpfXZpc2l0UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3BhbikpfXZpc2l0SWN1UGxhY2Vob2xkZXIodCl7dGhpcy5waWVjZXMucHVzaCh0aGlzLmNyZWF0ZVBsYWNlaG9sZGVyUGllY2UodC5uYW1lLHQuc291cmNlU3Bhbix0aGlzLnBsYWNlaG9sZGVyVG9NZXNzYWdlW3QubmFtZV0pKX1jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQsZSxpKXtyZXR1cm4gbmV3IGgwKEZ4KHQsITEpLGUsaSl9fShuLnBsYWNlaG9sZGVyVG9NZXNzYWdlLHQpO3JldHVybiBuLm5vZGVzLmZvckVhY2goaT0+aS52aXNpdChlKSksZnVuY3Rpb24obil7bGV0IHQ9W10sZT1bXTtuWzBdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bMF0uc291cmNlU3Bhbi5zdGFydCkpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgcj1uW2ldO3IgaW5zdGFuY2VvZiBoZj90LnB1c2gocik6KGUucHVzaChyKSxuW2ktMV1pbnN0YW5jZW9mIGgwJiZ0LnB1c2goTE4obltpLTFdLnNvdXJjZVNwYW4uZW5kKSkpfXJldHVybiBuW24ubGVuZ3RoLTFdaW5zdGFuY2VvZiBoMCYmdC5wdXNoKExOKG5bbi5sZW5ndGgtMV0uc291cmNlU3Bhbi5lbmQpKSx7bWVzc2FnZVBhcnRzOnQscGxhY2VIb2xkZXJzOmV9fSh0KX0odCksbz1mdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVzWzBdO3JldHVybiBuZXcgVG8odC5zb3VyY2VTcGFuLmZ1bGxTdGFydCxuLm5vZGVzW24ubm9kZXMubGVuZ3RoLTFdLnNvdXJjZVNwYW4uZW5kLHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsdC5zb3VyY2VTcGFuLmRldGFpbHMpfSh0KSxzPXIubWFwKGM9PmVbYy50ZXh0XSksYT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuZXcgWE4obix0LGUsaSxyKX0odCxpLHIscyxvKSxsPW4uc2V0KGEpO3JldHVybltuZXcgbHUobCldfWZ1bmN0aW9uIExOKG4pe3JldHVybiBuZXcgaGYoIiIsbmV3IFRvKG4sbikpfXZhciBzWT1uZXcgU2V0KFsiJGV2ZW50Il0pLEJOPW5ldyBNYXAoW1sid2luZG93IixLLnJlc29sdmVXaW5kb3ddLFsiZG9jdW1lbnQiLEsucmVzb2x2ZURvY3VtZW50XSxbImJvZHkiLEsucmVzb2x2ZUJvZHldXSksc3hlPVsiICIsIlxuIiwiXHIiLCJcdCJdO2Z1bmN0aW9uIHhwKG4sdCl7cmV0dXJuIHIzKE1pKE54KS5iaXR3aXNlQW5kKG50KG4pLG51bGwsITEpLHQpfWZ1bmN0aW9uIGFZKG4sdD1udWxsLGU9bnVsbCl7bGV0e3R5cGU6aSxuYW1lOnIsdGFyZ2V0Om8scGhhc2U6cyxoYW5kbGVyOmF9PW47aWYobyYmIUJOLmhhcyhvKSl0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZ2xvYmFsIHRhcmdldCAnJHtvfScgZGVmaW5lZCBmb3IgJyR7cn0nIGV2ZW50LlxuICAgICAgICBTdXBwb3J0ZWQgbGlzdCBvZiBnbG9iYWwgdGFyZ2V0czogJHtBcnJheS5mcm9tKEJOLmtleXMoKSl9LmApO2xldCBsPSIkZXZlbnQiLGM9bmV3IFNldCx1PW51bGw9PT1lfHwwPT09ZS5iaW5kaW5nTGV2ZWw/TWkoYWMpOmUuZ2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKDApLGQ9JHZlKGUsdSxhLCJiIixuLmhhbmRsZXJTcGFuLGMsc1kpLHA9W10saD1lPy52YXJpYWJsZURlY2xhcmF0aW9ucygpLGY9ZT8ucmVzdG9yZVZpZXdTdGF0ZW1lbnQoKTtpZihoJiZwLnB1c2goLi4uaCkscC5wdXNoKC4uLmQpLGYpe3AudW5zaGlmdChmKTtsZXQgQT1wW3AubGVuZ3RoLTFdO0EgaW5zdGFuY2VvZiB1bz9wW3AubGVuZ3RoLTFdPW5ldyB1byh4ZihBLnZhbHVlLnNvdXJjZVNwYW4sSy5yZXNldFZpZXcsW0EudmFsdWVdKSk6cC5wdXNoKG5ldyBsdSh4ZihudWxsLEsucmVzZXRWaWV3LFtdKSkpfWxldCBtPTE9PT1pP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYEAke259LiR7dH1gfShyLHMpOnIsQz10JiZtMCh0KSxfPVtdO2MuaGFzKGwpJiZfLnB1c2gobmV3IFJzKGwsVjApKTtsZXQgeT1PcyhfLHAsaWEsbnVsbCxDKSxJPVtudChtKSx5XTtyZXR1cm4gbyYmSS5wdXNoKG50KCExKSx4bihCTi5nZXQobykpKSxJfXZhciBPeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHIsbyxzLGEsbCxjLHUsZD1mdW5jdGlvbigpe3JldHVybntwcmVwYXJlU3RhdGVtZW50czpbXSxjb25zdEV4cHJlc3Npb25zOltdLGkxOG5WYXJSZWZzQ2FjaGU6bmV3IE1hcH19KCkpe3RoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5sZXZlbD1pLHRoaXMuY29udGV4dE5hbWU9cix0aGlzLmkxOG5Db250ZXh0PW8sdGhpcy50ZW1wbGF0ZUluZGV4PXMsdGhpcy50ZW1wbGF0ZU5hbWU9YSx0aGlzLl9uYW1lc3BhY2U9bCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcz11LHRoaXMuX2NvbnN0YW50cz1kLHRoaXMuX2RhdGFJbmRleD0wLHRoaXMuX2JpbmRpbmdDb250ZXh0PTAsdGhpcy5fcHJlZml4Q29kZT1bXSx0aGlzLl9jcmVhdGlvbkNvZGVGbnM9W10sdGhpcy5fdXBkYXRlQ29kZUZucz1bXSx0aGlzLl9jdXJyZW50SW5kZXg9MCx0aGlzLl90ZW1wVmFyaWFibGVzPVtdLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zPVtdLHRoaXMuaTE4bj1udWxsLHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzPTAsdGhpcy5fYmluZGluZ1Nsb3RzPTAsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cz1bXSx0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9MCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj1udWxsLHRoaXMudmlzaXRSZWZlcmVuY2U9SGIsdGhpcy52aXNpdFZhcmlhYmxlPUhiLHRoaXMudmlzaXRUZXh0QXR0cmlidXRlPUhiLHRoaXMudmlzaXRCb3VuZEF0dHJpYnV0ZT1IYix0aGlzLnZpc2l0Qm91bmRFdmVudD1IYix0aGlzLl9iaW5kaW5nU2NvcGU9ZS5uZXN0ZWRTY29wZShpKSx0aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXg9Yy5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpKyJfIix0aGlzLl92YWx1ZUNvbnZlcnRlcj1uZXcgVzEodCwoKT0+dGhpcy5hbGxvY2F0ZURhdGFTbG90KCkscD0+dGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzKHApLChwLGgsZixtKT0+e3RoaXMuX2JpbmRpbmdTY29wZS5zZXQodGhpcy5sZXZlbCxoLG0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLEsucGlwZSxbbnQoZiksbnQocCldKX0pfWJ1aWxkVGVtcGxhdGVGdW5jdGlvbih0LGUsaT0wLHIpe3RoaXMuX25nQ29udGVudFNlbGVjdG9yc09mZnNldD1pLHRoaXMuX25hbWVzcGFjZSE9PUsubmFtZXNwYWNlSFRNTCYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKG51bGwsdGhpcy5fbmFtZXNwYWNlKSxlLmZvckVhY2goaD0+dGhpcy5yZWdpc3RlckNvbnRleHRWYXJpYWJsZXMoaCkpO2xldCBvPXRoaXMuaTE4bkNvbnRleHR8fHB4KHIpJiYhaTEocikmJiEoMT09PShuPXQpLmxlbmd0aCYmblswXWluc3RhbmNlb2YgRTAmJnRbMF0uaTE4bj09PXIpLHM9Vk4odCk7dmFyIG47aWYobyYmdGhpcy5pMThuU3RhcnQobnVsbCxyLHMpLGQ5KHRoaXMsdCksdGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHMrPXRoaXMuX2JpbmRpbmdTbG90cyx0aGlzLl92YWx1ZUNvbnZlcnRlci51cGRhdGVQaXBlU2xvdE9mZnNldHModGhpcy5fYmluZGluZ1Nsb3RzKSx0aGlzLl9uZXN0ZWRUZW1wbGF0ZUZucy5mb3JFYWNoKGg9PmgoKSksMD09PXRoaXMubGV2ZWwmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoKXtsZXQgaD1bXTtpZih0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD4xfHwiKiIhPT10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzWzBdKXtsZXQgZj10aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLm1hcChtPT4iKiIhPT1tP3QzKG0pOm0pO2gucHVzaCh0aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUoZiksITApKX10aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24obnVsbCxLLnByb2plY3Rpb25EZWYsaCwhMCl9byYmdGhpcy5pMThuRW5kKG51bGwscyk7bGV0IGE9VDEodGhpcy5fY3JlYXRpb25Db2RlRm5zKSxsPVQxKHRoaXMuX3VwZGF0ZUNvZGVGbnMpLGM9dGhpcy5fYmluZGluZ1Njb3BlLnZpZXdTbmFwc2hvdFN0YXRlbWVudHMoKSx1PXRoaXMuX2JpbmRpbmdTY29wZS52YXJpYWJsZURlY2xhcmF0aW9ucygpLmNvbmNhdCh0aGlzLl90ZW1wVmFyaWFibGVzKSxkPWEubGVuZ3RoPjA/W3hwKDEsYy5jb25jYXQoYSkpXTpbXSxwPWwubGVuZ3RoPjA/W3hwKDIsdS5jb25jYXQobCkpXTpbXTtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbLi4udGhpcy5fcHJlZml4Q29kZSwuLi5kLC4uLnBdLGlhLG51bGwsdGhpcy50ZW1wbGF0ZU5hbWUpfWdldExvY2FsKHQpe3JldHVybiB0aGlzLl9iaW5kaW5nU2NvcGUuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXt0aGlzLl9iaW5kaW5nU2NvcGUubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLl9iaW5kaW5nU2NvcGUubWF5YmVSZXN0b3JlVmlldygpfWkxOG5UcmFuc2xhdGUodCxlPXt9LGkscil7bGV0IG89aXx8dGhpcy5pMThuR2VuZXJhdGVNYWluQmxvY2tWYXIoKSxhPWZ1bmN0aW9uKG4sdCxlLGk9e30scil7bGV0IG89W2d2ZSh0KSxyMyhpMyhNaShvcSkpLm5vdElkZW50aWNhbChudCgidW5kZWZpbmVkIix5cSkpLmFuZChNaShvcSkpLFpiZSh0LG4sZSxpKSxleGUodCxuLHMzKGksITEpKSldO3JldHVybiByJiZvLnB1c2gobmV3IGx1KHQuc2V0KHIodCkpKSksb30odCxvLHRoaXMuaTE4bkdlbmVyYXRlQ2xvc3VyZVZhcih0LmlkKSxlLHIpO3JldHVybiB0aGlzLl9jb25zdGFudHMucHJlcGFyZVN0YXRlbWVudHMucHVzaCguLi5hKSxvfXJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyh0KXtsZXQgZT10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCksaT10aGlzLmxldmVsLHI9TWkodC5uYW1lK2UpO3RoaXMuX2JpbmRpbmdTY29wZS5zZXQoaSx0Lm5hbWUsciwxLChvLHMpPT57bGV0IGE7cmV0dXJuIG8uYmluZGluZ0xldmVsPT09aT9vLmlzTGlzdGVuZXJTY29wZSgpJiZvLmhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKT8oYT1NaShBcSksby5ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCkpOmE9TWkoYWMpOmE9by5nZXRTaGFyZWRDb250ZXh0TmFtZShpKXx8UUwocyksW3Iuc2V0KGEucHJvcCh0LnZhbHVlfHwiJGltcGxpY2l0IikpLnRvQ29uc3REZWNsKCldfSl9aTE4bkFwcGVuZEJpbmRpbmdzKHQpe3QubGVuZ3RoPjAmJnQuZm9yRWFjaChlPT50aGlzLmkxOG4uYXBwZW5kQmluZGluZyhlKSl9aTE4bkJpbmRQcm9wcyh0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dFtpXTtpZihyIGluc3RhbmNlb2YgdzApZVtpXT1udChyLnZhbHVlKTtlbHNle2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMobyksbyBpbnN0YW5jZW9mIFpvKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmF9PW8se2lkOmwsYmluZGluZ3M6Y309dGhpcy5pMThuLHU9ZnVuY3Rpb24obix0PTAsZT0wKXtpZighbi5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9IiIscj1uLmxlbmd0aC0xO2ZvcihsZXQgbz0wO288cjtvKyspaSs9YCR7bltvXX0ke1ExKHQrbyxlKX1gO3JldHVybiBpKz1uW3JdLGl9KHMsYy5zaXplLGwpO3RoaXMuaTE4bkFwcGVuZEJpbmRpbmdzKGEpLGVbaV09bnQodSl9fX0pLGV9aTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCl7cmV0dXJuIE1pKHRoaXMuY29uc3RhbnRQb29sLnVuaXF1ZU5hbWUoImkxOG5fIikpfWkxOG5HZW5lcmF0ZUNsb3N1cmVWYXIodCl7bGV0IGUsaT10aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXgudG9VcHBlckNhc2UoKTtpZih0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyl7bGV0IHI9ZjkoIkVYVEVSTkFMXyIpLG89dGhpcy5jb25zdGFudFBvb2wudW5pcXVlTmFtZShpKTtlPWAke3J9JHttMCh0KX0kJCR7b31gfWVsc2V7bGV0IHI9ZjkoaSk7ZT10aGlzLmNvbnN0YW50UG9vbC51bmlxdWVOYW1lKHIpfXJldHVybiBNaShlKX1pMThuVXBkYXRlUmVmKHQpe2xldHtpY3VzOmUsbWV0YTppLGlzUm9vdDpyLGlzUmVzb2x2ZWQ6byxpc0VtaXR0ZWQ6c309dDtpZihyJiZvJiYhcyYmIWkxKGkpKXt0LmlzRW1pdHRlZD0hMDtsZXQgZCxhPXQuZ2V0U2VyaWFsaXplZFBsYWNlaG9sZGVycygpLGw9e30sYz1hLnNpemU/aDkoYSk6e307ZS5zaXplJiZlLmZvckVhY2goKHAsaCk9PntpZigxPT09cC5sZW5ndGgpY1toXT1wWzBdO2Vsc2V7bGV0IGY9UTEoYEkxOE5fRVhQXyR7aH1gKTtjW2hdPW50KGYpLGxbaF09Y3IocCl9fSksKEFycmF5LmZyb20oYS52YWx1ZXMoKSkuc29tZShwPT5wLmxlbmd0aD4xKXx8T2JqZWN0LmtleXMobCkubGVuZ3RoKSYmKGQ9cD0+e2xldCBoPVtwXTtyZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiZoLnB1c2goejEobCwhMCkpLHhmKG51bGwsSy5pMThuUG9zdHByb2Nlc3MsaCl9KSx0aGlzLmkxOG5UcmFuc2xhdGUoaSxjLHQucmVmLGQpfX1pMThuU3RhcnQodD1udWxsLGUsaSl7bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCk7dGhpcy5pMThuPXRoaXMuaTE4bkNvbnRleHQ/dGhpcy5pMThuQ29udGV4dC5mb3JrQ2hpbGRDb250ZXh0KHIsdGhpcy50ZW1wbGF0ZUluZGV4LGUpOm5ldyBSeChyLHRoaXMuaTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCksMCx0aGlzLnRlbXBsYXRlSW5kZXgsZSk7bGV0e2lkOm8scmVmOnN9PXRoaXMuaTE4bixhPVtudChyKSx0aGlzLmFkZFRvQ29uc3RzKHMpXTtvPjAmJmEucHVzaChudChvKSksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsaT9LLmkxOG46Sy5pMThuU3RhcnQsYSl9aTE4bkVuZCh0PW51bGwsZSl7aWYoIXRoaXMuaTE4bil0aHJvdyBuZXcgRXJyb3IoImkxOG5FbmQgaXMgZXhlY3V0ZWQgd2l0aCBubyBpMThuIGNvbnRleHQgcHJlc2VudCIpO3RoaXMuaTE4bkNvbnRleHQ/KHRoaXMuaTE4bkNvbnRleHQucmVjb25jaWxlQ2hpbGRDb250ZXh0KHRoaXMuaTE4biksdGhpcy5pMThuVXBkYXRlUmVmKHRoaXMuaTE4bkNvbnRleHQpKTp0aGlzLmkxOG5VcGRhdGVSZWYodGhpcy5pMThuKTtsZXR7aW5kZXg6aSxiaW5kaW5nczpyfT10aGlzLmkxOG47aWYoci5zaXplKXtmb3IobGV0IG8gb2Ygcil0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UodGhpcy5nZXRDb25zdENvdW50KCktMSx0LEsuaTE4bkV4cCwoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKG8pKTt0aGlzLnVwZGF0ZUluc3RydWN0aW9uKHQsSy5pMThuQXBwbHksW250KGkpXSl9ZXx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQsSy5pMThuRW5kKSx0aGlzLmkxOG49bnVsbH1pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKHQsZSxpKXtsZXQgcj0hMSxvPVtdO2lmKGUuZm9yRWFjaChzPT57bGV0IGE9cy5pMThuLGw9cy52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhsKSxsIGluc3RhbmNlb2YgWm8pe2xldCB1PWg5KERxKGEpKTtvLnB1c2gobnQocy5uYW1lKSx0aGlzLmkxOG5UcmFuc2xhdGUoYSx1KSksbC5leHByZXNzaW9ucy5mb3JFYWNoKGQ9PntyPSEwLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGksSy5pMThuRXhwLCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcoZCkpfSl9fSksby5sZW5ndGg+MCl7bGV0IHM9bnQodGhpcy5hbGxvY2F0ZURhdGFTbG90KCkpLGE9dGhpcy5hZGRUb0NvbnN0cyhjcihvKSk7dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGksSy5pMThuQXR0cmlidXRlcyxbcyxhXSksciYmdGhpcy51cGRhdGVJbnN0cnVjdGlvbihpLEsuaTE4bkFwcGx5LFtzXSl9fWdldE5hbWVzcGFjZUluc3RydWN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIm1hdGgiOnJldHVybiBLLm5hbWVzcGFjZU1hdGhNTDtjYXNlInN2ZyI6cmV0dXJuIEsubmFtZXNwYWNlU1ZHO2RlZmF1bHQ6cmV0dXJuIEsubmFtZXNwYWNlSFRNTH19YWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24odCxlKXt0aGlzLl9uYW1lc3BhY2U9dCx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZS5zdGFydFNvdXJjZVNwYW4sdCl9aW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkscixvLHMpe3RoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHIuc291cmNlU3Bhbix0LCgpPT5bbnQoaSksLi4udGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhvKSwuLi5zXSl9dmlzaXRDb250ZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9dGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0K3RoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoLHI9W250KGUpXTt0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2godC5zZWxlY3Rvcik7bGV0IG89dC5hdHRyaWJ1dGVzLmZpbHRlcihhPT4ic2VsZWN0IiE9PWEubmFtZS50b0xvd2VyQ2FzZSgpKSxzPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLG8sW10sW10pO3MubGVuZ3RoPjA/ci5wdXNoKG50KGkpLGNyKHMpKTowIT09aSYmci5wdXNoKG50KGkpKSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsucHJvamVjdGlvbixyKSx0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRQcm9qZWN0aW9uKHQuaTE4bixlKX12aXNpdEVsZW1lbnQodCl7bGV0IGU9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksaT1uZXcgTjEobnVsbCkscj0hMSxvPXB4KHQuaTE4bikmJiFpMSh0LmkxOG4pLHM9W10sW2EsbF09Y2QodC5uYW1lKSxjPVVOKHQubmFtZSk7Zm9yKGxldCBmZSBvZiB0LmF0dHJpYnV0ZXMpe2xldHtuYW1lOnZlLHZhbHVlOlR9PWZlOyJuZ05vbkJpbmRhYmxlIj09PXZlP3I9ITA6InN0eWxlIj09PXZlP2kucmVnaXN0ZXJTdHlsZUF0dHIoVCk6ImNsYXNzIj09PXZlP2kucmVnaXN0ZXJDbGFzc0F0dHIoVCk6cy5wdXNoKGZlKX1sZXQgdT1bbnQoZSldO2N8fHUucHVzaChudChsKSk7bGV0IGQ9W10scD1bXTt0LmlucHV0cy5mb3JFYWNoKGZlPT57aS5yZWdpc3RlckJvdW5kSW5wdXQoZmUpfHwoMD09PWZlLnR5cGUmJmZlLmkxOG4/cC5wdXNoKGZlKTpkLnB1c2goZmUpKX0pO2xldCBoPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLHMsZCx0Lm91dHB1dHMsaSxbXSxwKTt1LnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGgpKTtsZXQgZj10aGlzLnByZXBhcmVSZWZzQXJyYXkodC5yZWZlcmVuY2VzKTt1LnB1c2godGhpcy5hZGRUb0NvbnN0cyhmKSk7bGV0IG09dGhpcy5fbmFtZXNwYWNlLEM9dGhpcy5nZXROYW1lc3BhY2VJbnN0cnVjdGlvbihhKTtDIT09bSYmdGhpcy5hZGROYW1lc3BhY2VJbnN0cnVjdGlvbihDLHQpLHRoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZEVsZW1lbnQodC5pMThuLGUpO2xldCBfPSFvJiZ0aGlzLmkxOG4/IVZOKHQuY2hpbGRyZW4pOnQuY2hpbGRyZW4ubGVuZ3RoPjAseT0haS5oYXNCaW5kaW5nc1dpdGhQaXBlcyYmMD09PXQub3V0cHV0cy5sZW5ndGgmJjA9PT1wLmxlbmd0aCYmIV8sST0heSYmVk4odC5jaGlsZHJlbik7aWYoeSl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLGM/Sy5lbGVtZW50Q29udGFpbmVyOksuZWxlbWVudCxTTih1KSk7ZWxzZXtpZih0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sYz9LLmVsZW1lbnRDb250YWluZXJTdGFydDpLLmVsZW1lbnRTdGFydCxTTih1KSksciYmdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc3RhcnRTb3VyY2VTcGFuLEsuZGlzYWJsZUJpbmRpbmdzKSxwLmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oZSxwLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLHQub3V0cHV0cy5sZW5ndGg+MClmb3IobGV0IGZlIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKHQubmFtZSxmZSxlKSk7byYmdGhpcy5pMThuU3RhcnQodC5zdGFydFNvdXJjZVNwYW4sdC5pMThuLEkpfWxldCBBPWkuYnVpbGRVcGRhdGVMZXZlbEluc3RydWN0aW9ucyh0aGlzLl92YWx1ZUNvbnZlcnRlciksTz1BLmxlbmd0aC0xO2ZvcihsZXQgZmU9MDtmZTw9TztmZSsrKXRoaXMuX2JpbmRpbmdTbG90cys9dGhpcy5wcm9jZXNzU3R5bGluZ1VwZGF0ZUluc3RydWN0aW9uKGUsQVtmZV0pO2xldCBlZT1udCh2b2lkIDApLFg9W10seGU9W107ZC5mb3JFYWNoKGZlPT57bGV0IHZlPWZlLnR5cGU7aWYoND09PXZlKXtsZXQgVD1mZS52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlciksbmU9IShUIGluc3RhbmNlb2YgSXMmJiFULnZhbHVlKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLFgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9Pm5lP3RoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKTplZSxNcShmZS5uYW1lKSl9KX1lbHNle2lmKGZlLmkxOG4pcmV0dXJuO2xldCBUPWZlLnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTtpZih2b2lkIDAhPT1UKXtsZXQgbmU9W10sW2xlLGhlXT1jZChmZS5uYW1lKSxKPWNZKGZlLnNlY3VyaXR5Q29udGV4dCwxPT09dmUpO2lmKEomJm5lLnB1c2goSiksbGUpe2xldCBhZT1udChsZSk7Sj9uZS5wdXNoKGFlKTpuZS5wdXNoKG50KG51bGwpLGFlKX1pZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKFQpLDA9PT12ZSlUIGluc3RhbmNlb2YgWm8/dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShUKSxlLGhlLGZlLFQsbmUpOlgucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSxoZSxuZSl9KTtlbHNlIGlmKDE9PT12ZSlpZihUIGluc3RhbmNlb2YgWm8mJkFmKFQpPjEpdGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihmdW5jdGlvbihuKXtzd2l0Y2goQWYobikpe2Nhc2UgMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLmF0dHJpYnV0ZUludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIEsuYXR0cmlidXRlSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gSy5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVZ9fShUKSxlLGhlLGZlLFQsbmUpO2Vsc2V7bGV0IGFlPVQgaW5zdGFuY2VvZiBabz9ULmV4cHJlc3Npb25zWzBdOlQ7eGUucHVzaCh7c3BhbjpmZS5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhhZSksaGUsbmUpfSl9ZWxzZSB0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSxmZS5zb3VyY2VTcGFuLEsuY2xhc3NQcm9wLCgpPT5bbnQoZSksbnQoaGUpLHRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhUKSwuLi5uZV0pfX19KTtmb3IobGV0IGZlIG9mIFgpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLnByb3BlcnR5LGZlLnBhcmFtc09yRm4pO2ZvcihsZXQgZmUgb2YgeGUpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsZmUuc3BhbixLLmF0dHJpYnV0ZSxmZS5wYXJhbXNPckZuKTtpZihkOSh0aGlzLHQuY2hpbGRyZW4pLCFvJiZ0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlLCEwKSwheSl7bGV0IGZlPXQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuO28mJnRoaXMuaTE4bkVuZChmZSxJKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZmUsSy5lbmFibGVCaW5kaW5ncyksdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKGZlLGM/Sy5lbGVtZW50Q29udGFpbmVyRW5kOksuZWxlbWVudEVuZCl9fXZpc2l0VGVtcGxhdGUodCl7bGV0IGU9Im5nLXRlbXBsYXRlIixpPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZFRlbXBsYXRlKHQuaTE4bixpKTtsZXQgcj10LnRhZ05hbWU/Y2QodC50YWdOYW1lKVsxXTp0LnRhZ05hbWUsbz1gJHt0aGlzLmNvbnRleHROYW1lfSR7dC50YWdOYW1lPyJfIittMCh0LnRhZ05hbWUpOiIifV8ke2l9YCxzPWAke299X1RlbXBsYXRlYCxhPVtudChpKSxNaShzKSxudChyKV0sbD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKGUsdC5hdHRyaWJ1dGVzLHQuaW5wdXRzLHQub3V0cHV0cyx2b2lkIDAsdC50ZW1wbGF0ZUF0dHJzKTtpZihhLnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGwpKSx0LnJlZmVyZW5jZXMmJnQucmVmZXJlbmNlcy5sZW5ndGgpe2xldCB1PXRoaXMucHJlcGFyZVJlZnNBcnJheSh0LnJlZmVyZW5jZXMpO2EucHVzaCh0aGlzLmFkZFRvQ29uc3RzKHUpKSxhLnB1c2goeG4oSy50ZW1wbGF0ZVJlZkV4dHJhY3RvcikpfWxldCBjPW5ldyBPeCh0aGlzLmNvbnN0YW50UG9vbCx0aGlzLl9iaW5kaW5nU2NvcGUsdGhpcy5sZXZlbCsxLG8sdGhpcy5pMThuLGkscyx0aGlzLl9uYW1lc3BhY2UsdGhpcy5maWxlQmFzZWRJMThuU3VmZml4LHRoaXMuaTE4blVzZUV4dGVybmFsSWRzLHRoaXMuX2NvbnN0YW50cyk7aWYodGhpcy5fbmVzdGVkVGVtcGxhdGVGbnMucHVzaCgoKT0+e2xldCB1PWMuYnVpbGRUZW1wbGF0ZUZ1bmN0aW9uKHQuY2hpbGRyZW4sdC52YXJpYWJsZXMsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgrdGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0LHQuaTE4bik7dGhpcy5jb25zdGFudFBvb2wuc3RhdGVtZW50cy5wdXNoKHUudG9EZWNsU3RtdChzKSksYy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgmJnRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMucHVzaCguLi5jLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzKX0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih0LnNvdXJjZVNwYW4sSy50ZW1wbGF0ZUNyZWF0ZSwoKT0+KGEuc3BsaWNlKDIsMCxudChjLmdldENvbnN0Q291bnQoKSksbnQoYy5nZXRWYXJDb3VudCgpKSksU04oYSkpKSx0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLHQudGVtcGxhdGVBdHRycykscj09PWUpe2xldFt1LGRdPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXTtmb3IobGV0IHIgb2YgbikodChyKT9lOmkpLnB1c2gocik7cmV0dXJuW2UsaV19KHQuaW5wdXRzLHB2ZSk7dS5sZW5ndGg+MCYmdGhpcy5pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKGksdSx0LnN0YXJ0U291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuKSxkLmxlbmd0aD4wJiZ0aGlzLnRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyhpLGQpO2ZvcihsZXQgcCBvZiB0Lm91dHB1dHMpdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHAuc291cmNlU3BhbixLLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKCJuZ190ZW1wbGF0ZSIscCxpKSl9fXZpc2l0Qm91bmRUZXh0KHQpe2lmKHRoaXMuaTE4bil7bGV0IHI9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7cmV0dXJuIHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMociksdm9pZChyIGluc3RhbmNlb2YgWm8mJih0aGlzLmkxOG4uYXBwZW5kQm91bmRUZXh0KHQuaTE4biksdGhpcy5pMThuQXBwZW5kQmluZGluZ3Moci5leHByZXNzaW9ucykpKX1sZXQgZT10aGlzLmFsbG9jYXRlRGF0YVNsb3QoKTt0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLEsudGV4dCxbbnQoZSldKTtsZXQgaT10LnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTt0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKGkpLGkgaW5zdGFuY2VvZiBabz90aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSx0LnNvdXJjZVNwYW4sZnVuY3Rpb24obil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlO2Nhc2UgMzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIEsudGV4dEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gSy50ZXh0SW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIEsudGV4dEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnRleHRJbnRlcnBvbGF0ZVZ9fShpKSwoKT0+dGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhpKSk6aDEoIlRleHQgbm9kZXMgc2hvdWxkIGJlIGludGVycG9sYXRlZCBhbmQgbmV2ZXIgYm91bmQgZGlyZWN0bHkuIil9dmlzaXRUZXh0KHQpe3RoaXMuaTE4bnx8dGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc291cmNlU3BhbixLLnRleHQsW250KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxudCh0LnZhbHVlKV0pfXZpc2l0SWN1KHQpe2xldCBlPSExO3RoaXMuaTE4bnx8KGU9ITAsdGhpcy5pMThuU3RhcnQobnVsbCx0LmkxOG4sITApKTtsZXQgaT10aGlzLmkxOG4scj10aGlzLmkxOG5CaW5kUHJvcHModC52YXJzKSxvPXRoaXMuaTE4bkJpbmRQcm9wcyh0LnBsYWNlaG9sZGVycykscz10LmkxOG4sYT1sPT57bGV0IHU9czMoey4uLnIsLi4ub30sITEpO3JldHVybiB4ZihudWxsLEsuaTE4blBvc3Rwcm9jZXNzLFtsLHoxKHUsITApXSl9O2lmKGkxKGkubWV0YSkpdGhpcy5pMThuVHJhbnNsYXRlKHMse30saS5yZWYsYSk7ZWxzZXtsZXQgbD10aGlzLmkxOG5UcmFuc2xhdGUocyx7fSx2b2lkIDAsYSk7aS5hcHBlbmRJY3UoVHEocykubmFtZSxsKX1yZXR1cm4gZSYmdGhpcy5pMThuRW5kKG51bGwsITApLG51bGx9YWxsb2NhdGVEYXRhU2xvdCgpe3JldHVybiB0aGlzLl9kYXRhSW5kZXgrK31nZXRDb25zdENvdW50KCl7cmV0dXJuIHRoaXMuX2RhdGFJbmRleH1nZXRWYXJDb3VudCgpe3JldHVybiB0aGlzLl9wdXJlRnVuY3Rpb25TbG90c31nZXRDb25zdHMoKXtyZXR1cm4gdGhpcy5fY29uc3RhbnRzfWdldE5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiB0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLmxlbmd0aD90aGlzLmNvbnN0YW50UG9vbC5nZXRDb25zdExpdGVyYWwocnUodGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cyksITApOm51bGx9YmluZGluZ0NvbnRleHQoKXtyZXR1cm4iIit0aGlzLl9iaW5kaW5nQ29udGV4dCsrfXRlbXBsYXRlUHJvcGVydHlCaW5kaW5ncyh0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKXtpZighKHIgaW5zdGFuY2VvZiBNMCkpY29udGludWU7bGV0IG89ci52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodm9pZCAwIT09bylpZih0aGlzLmFsbG9jYXRlQmluZGluZ1Nsb3RzKG8pLG8gaW5zdGFuY2VvZiBabyl7bGV0IHM9W107dGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihycShvKSx0LHIubmFtZSxyLG8scyl9ZWxzZSBpLnB1c2goe3NwYW46ci5zb3VyY2VTcGFuLHBhcmFtc09yRm46czEoKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSxyLm5hbWUpfSl9Zm9yKGxldCByIG9mIGkpdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsci5zcGFuLEsucHJvcGVydHksci5wYXJhbXNPckZuKX1pbnN0cnVjdGlvbkZuKHQsZSxpLHIsbz0hMSl7dFtvPyJ1bnNoaWZ0IjoicHVzaCJdKHtzcGFuOmUscmVmZXJlbmNlOmkscGFyYW1zT3JGbjpyfSl9cHJvY2Vzc1N0eWxpbmdVcGRhdGVJbnN0cnVjdGlvbih0LGUpe2xldCBpPTA7aWYoZSlmb3IobGV0IHIgb2YgZS5jYWxscylpKz1yLmFsbG9jYXRlQmluZGluZ1Nsb3RzLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LHIuc291cmNlU3BhbixlLnJlZmVyZW5jZSwoKT0+ci5wYXJhbXMobz0+ci5zdXBwb3J0c0ludGVycG9sYXRpb24mJm8gaW5zdGFuY2VvZiBabz90aGlzLmdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKG8pOnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSkpO3JldHVybiBpfWNyZWF0aW9uSW5zdHJ1Y3Rpb24odCxlLGkscil7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX2NyZWF0aW9uQ29kZUZucyx0LGUsaXx8W10scil9dXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGUsaSxyKXt0aGlzLmFkZEFkdmFuY2VJbnN0cnVjdGlvbklmTmVjZXNzYXJ5KHQsZSksdGhpcy51cGRhdGVJbnN0cnVjdGlvbihlLGkscil9dXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkpe3RoaXMuaW5zdHJ1Y3Rpb25Gbih0aGlzLl91cGRhdGVDb2RlRm5zLHQsZSxpfHxbXSl9YWRkQWR2YW5jZUluc3RydWN0aW9uSWZOZWNlc3NhcnkodCxlKXtpZih0IT09dGhpcy5fY3VycmVudEluZGV4KXtsZXQgaT10LXRoaXMuX2N1cnJlbnRJbmRleDtpZihpPDEpdGhyb3cgbmV3IEVycm9yKCJhZHZhbmNlIGluc3RydWN0aW9uIGNhbiBvbmx5IGdvIGZvcndhcmRzIik7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX3VwZGF0ZUNvZGVGbnMsZSxLLmFkdmFuY2UsW250KGkpXSksdGhpcy5fY3VycmVudEluZGV4PXR9fWFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHModCl7bGV0IGU9dGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHM7cmV0dXJuIHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzKz10LGV9YWxsb2NhdGVCaW5kaW5nU2xvdHModCl7dGhpcy5fYmluZGluZ1Nsb3RzKz10IGluc3RhbmNlb2YgWm8/dC5leHByZXNzaW9ucy5sZW5ndGg6MX1nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpe3JldHVybiB0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj90aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcjp0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj0wPT09dGhpcy5sZXZlbD9NaShhYyk6dGhpcy5fYmluZGluZ1Njb3BlLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKX1jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHQpe2xldCBlPXFxKHRoaXMsdGhpcy5nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpLHQsdGhpcy5iaW5kaW5nQ29udGV4dCgpKSxpPWUuY3VyclZhbEV4cHI7cmV0dXJuIHRoaXMuX3RlbXBWYXJpYWJsZXMucHVzaCguLi5lLnN0bXRzKSxpfWdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKHQpe2xldHthcmdzOmUsc3RtdHM6aX09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bmV3IFR4KG4sdCxpLCEwKSxvPXIudmlzaXRJbnRlcnBvbGF0aW9uKGUsQmkuRXhwcmVzc2lvbik7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLHtzdG10czpZcShyLGkpLGFyZ3M6by5hcmdzfX0odGhpcyx0aGlzLmdldEltcGxpY2l0UmVjZWl2ZXJFeHByKCksdCx0aGlzLmJpbmRpbmdDb250ZXh0KCkpO3JldHVybiB0aGlzLl90ZW1wVmFyaWFibGVzLnB1c2goLi4uaSksZX1nZXRBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LGUsaSxyLG8scz1bXSxhPVtdKXtsZXQgdSxsPW5ldyBTZXQsYz1bXTtmb3IobGV0IHAgb2YgZSlpZigibmdQcm9qZWN0QXMiPT09cC5uYW1lJiYodT1wKSxwLmkxOG4pe2xldCBmLHtpMThuVmFyUmVmc0NhY2hlOmh9PXRoaXMuX2NvbnN0YW50cztoLmhhcyhwLmkxOG4pP2Y9aC5nZXQocC5pMThuKTooZj10aGlzLmkxOG5UcmFuc2xhdGUocC5pMThuKSxoLnNldChwLmkxOG4sZikpLGMucHVzaChudChwLm5hbWUpLGYpfWVsc2UgYy5wdXNoKC4uLmlxKHAubmFtZSksZ3hlKHQscCkpO2Z1bmN0aW9uIGQocCxoKXsic3RyaW5nIj09dHlwZW9mIHA/bC5oYXMocCl8fChjLnB1c2goLi4uaXEocCkpLHZvaWQgMCE9PWgmJmMucHVzaChoKSxsLmFkZChwKSk6Yy5wdXNoKG50KHApKX1pZih1JiZjLnB1c2goLi4uZnVuY3Rpb24obil7bGV0IHQ9dDMobi52YWx1ZSlbMF07cmV0dXJuW250KDUpLHJ1KHQpXX0odSkpLG8mJm8ucG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKGMpLGkubGVuZ3RofHxyLmxlbmd0aCl7bGV0IHA9Yy5sZW5ndGg7Zm9yKGxldCBoPTA7aDxpLmxlbmd0aDtoKyspe2xldCBmPWlbaF07NCE9PWYudHlwZSYmMSE9PWYudHlwZSYmZChmLm5hbWUpfWZvcihsZXQgaD0wO2g8ci5sZW5ndGg7aCsrKXtsZXQgZj1yW2hdOzEhPT1mLnR5cGUmJmQoZi5uYW1lKX1jLmxlbmd0aCE9PXAmJmMuc3BsaWNlKHAsMCxudCgzKSl9cmV0dXJuIHMubGVuZ3RoJiYoYy5wdXNoKG50KDQpKSxzLmZvckVhY2gocD0+ZChwLm5hbWUpKSksYS5sZW5ndGgmJihjLnB1c2gobnQoNikpLGEuZm9yRWFjaChwPT5kKHAubmFtZSkpKSxjfWFkZFRvQ29uc3RzKHQpe2lmKHhxKHQpKXJldHVybiBjMTtsZXQgZT10aGlzLl9jb25zdGFudHMuY29uc3RFeHByZXNzaW9ucztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlzRXF1aXZhbGVudCh0KSlyZXR1cm4gbnQoaSk7cmV0dXJuIG50KGUucHVzaCh0KS0xKX1hZGRBdHRyc1RvQ29uc3RzKHQpe3JldHVybiB0Lmxlbmd0aD4wP3RoaXMuYWRkVG9Db25zdHMoY3IodCkpOmMxfXByZXBhcmVSZWZzQXJyYXkodCl7cmV0dXJuIHQmJjAhPT10Lmxlbmd0aD9ydSh1WSh0Lm1hcChpPT57bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksbz10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCkscz10aGlzLmxldmVsLGE9TWkobyk7cmV0dXJuIHRoaXMuX2JpbmRpbmdTY29wZS5zZXQocyxpLm5hbWUsYSwwLChsLGMpPT57bGV0IHU9Yz4wP1tRTChjKS50b1N0bXQoKV06W10sZD1hLnNldCh4bihLLnJlZmVyZW5jZSkuY2FsbEZuKFtudChyKV0pKTtyZXR1cm4gdS5jb25jYXQoZC50b0NvbnN0RGVjbCgpKX0sITApLFtpLm5hbWUsaS52YWx1ZV19KSkpOmMxfXByZXBhcmVMaXN0ZW5lclBhcmFtZXRlcih0LGUsaSl7cmV0dXJuKCk9PntsZXQgcj1lLm5hbWUsbz0xPT09ZS50eXBlP1NxKHIsZS5waGFzZSk6bTAocikscz1gJHt0aGlzLnRlbXBsYXRlTmFtZX1fJHt0fV8ke299XyR7aX1fbGlzdGVuZXJgLGE9dGhpcy5fYmluZGluZ1Njb3BlLm5lc3RlZFNjb3BlKHRoaXMuX2JpbmRpbmdTY29wZS5iaW5kaW5nTGV2ZWwsc1kpO3JldHVybiBhWShlLHMsYSl9fX0sVzE9Y2xhc3MgZXh0ZW5kcyB2THtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5hbGxvY2F0ZVNsb3Q9ZSx0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHM9aSx0aGlzLmRlZmluZVBpcGU9cix0aGlzLl9waXBlQmluZEV4cHJzPVtdfXZpc2l0UGlwZSh0LGUpe2xldCBpPXRoaXMuYWxsb2NhdGVTbG90KCkscj1gUElQRToke2l9YCxvPXRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cygyK3QuYXJncy5sZW5ndGgpLHM9bmV3IG91KHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixuZXcgRWYodC5zcGFuLHQuc291cmNlU3Bhbikscikse2lkZW50aWZpZXI6YSxpc1Zhckxlbmd0aDpsfT1mdW5jdGlvbihuKXtsZXQgdD1seGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucGlwZUJpbmRWLGlzVmFyTGVuZ3RoOiF0fX0odC5hcmdzKTt0aGlzLmRlZmluZVBpcGUodC5uYW1lLHIsaSx4bihhKSk7bGV0IGM9W3QuZXhwLC4uLnQuYXJnc10sdT10aGlzLnZpc2l0QWxsKGw/W25ldyBPMCh0LnNwYW4sdC5zb3VyY2VTcGFuLGMpXTpjKSxkPW5ldyBicCh0LnNwYW4sdC5zb3VyY2VTcGFuLHMsW25ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpLG5ldyBJcyh0LnNwYW4sdC5zb3VyY2VTcGFuLG8pLC4uLnVdLG51bGwpO3JldHVybiB0aGlzLl9waXBlQmluZEV4cHJzLnB1c2goZCksZH11cGRhdGVQaXBlU2xvdE9mZnNldHModCl7dGhpcy5fcGlwZUJpbmRFeHBycy5mb3JFYWNoKGU9PntlLmFyZ3NbMV0udmFsdWUrPXR9KX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgX3AodC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpLGk9PntsZXQgcj1jcihpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9dmlzaXRMaXRlcmFsTWFwKHQsZSl7cmV0dXJuIG5ldyBfcCh0LnNwYW4sdC5zb3VyY2VTcGFuLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpLGk9PntsZXQgcj1tbChpLm1hcCgobyxzKT0+KHtrZXk6dC5rZXlzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmtleXNbc10ucXVvdGVkfSkpKTtyZXR1cm4gbnEodGhpcy5jb25zdGFudFBvb2wscix0aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMpfSl9fSxseGU9W0sucGlwZUJpbmQxLEsucGlwZUJpbmQyLEsucGlwZUJpbmQzLEsucGlwZUJpbmQ0XSx1eGU9W0sucHVyZUZ1bmN0aW9uMCxLLnB1cmVGdW5jdGlvbjEsSy5wdXJlRnVuY3Rpb24yLEsucHVyZUZ1bmN0aW9uMyxLLnB1cmVGdW5jdGlvbjQsSy5wdXJlRnVuY3Rpb241LEsucHVyZUZ1bmN0aW9uNixLLnB1cmVGdW5jdGlvbjcsSy5wdXJlRnVuY3Rpb244XTtmdW5jdGlvbiBRTChuKXtyZXR1cm4geG4oSy5uZXh0Q29udGV4dCkuY2FsbEZuKG4+MT9bbnQobildOltdKX1mdW5jdGlvbiBucShuLHQsZSl7bGV0e2xpdGVyYWxGYWN0b3J5OmksbGl0ZXJhbEZhY3RvcnlBcmd1bWVudHM6cn09bi5nZXRMaXRlcmFsRmFjdG9yeSh0KSxvPWUoMStyLmxlbmd0aCkse2lkZW50aWZpZXI6cyxpc1Zhckxlbmd0aDphfT1mdW5jdGlvbihuKXtsZXQgdD11eGVbbi5sZW5ndGhdO3JldHVybntpZGVudGlmaWVyOnR8fEsucHVyZUZ1bmN0aW9uVixpc1Zhckxlbmd0aDohdH19KHIpLGw9W250KG8pLGldO3JldHVybiBhP2wucHVzaChjcihyKSk6bC5wdXNoKC4uLnIpLHhuKHMpLmNhbGxGbihsKX1mdW5jdGlvbiBpcShuKXtsZXRbdCxlXT1jZChuKSxpPW50KGUpO3JldHVybiB0P1tudCgwKSxudCh0KSxpXTpbaV19dmFyIG8wPSIkJHNoYXJlZF9jdHgkJCIsQjA9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9bnVsbCxpKXtpZih0aGlzLmJpbmRpbmdMZXZlbD10LHRoaXMucGFyZW50PWUsdGhpcy5nbG9iYWxzPWksdGhpcy5tYXA9bmV3IE1hcCx0aGlzLnJlZmVyZW5jZU5hbWVJbmRleD0wLHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZT1udWxsLHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ9ITEsdm9pZCAwIT09aSlmb3IobGV0IHIgb2YgaSl0aGlzLnNldCgwLHIsTWkocikpfXN0YXRpYyBjcmVhdGVSb290U2NvcGUoKXtyZXR1cm4gbmV3IEIwfWdldCh0KXtsZXQgZT10aGlzO2Zvcig7ZTspe2xldCBpPWUubWFwLmdldCh0KTtpZihudWxsIT1pKXJldHVybiBlIT09dGhpcyYmKGk9e3JldHJpZXZhbExldmVsOmkucmV0cmlldmFsTGV2ZWwsbGhzOmkubGhzLGRlY2xhcmVMb2NhbENhbGxiYWNrOmkuZGVjbGFyZUxvY2FsQ2FsbGJhY2ssZGVjbGFyZTohMSxwcmlvcml0eTppLnByaW9yaXR5fSx0aGlzLm1hcC5zZXQodCxpKSx0aGlzLm1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKGkpLHRoaXMubWF5YmVSZXN0b3JlVmlldygpKSxpLmRlY2xhcmVMb2NhbENhbGxiYWNrJiYhaS5kZWNsYXJlJiYoaS5kZWNsYXJlPSEwKSxpLmxocztlPWUucGFyZW50fXJldHVybiAwPT09dGhpcy5iaW5kaW5nTGV2ZWw/bnVsbDp0aGlzLmdldENvbXBvbmVudFByb3BlcnR5KHQpfXNldCh0LGUsaSxyPTAsbyxzKXtpZih0aGlzLm1hcC5oYXMoZSkpe2lmKHMpcmV0dXJuIHRoaXM7aDEoYFRoZSBuYW1lICR7ZX0gaXMgYWxyZWFkeSBkZWZpbmVkIGluIHNjb3BlIHRvIGJlICR7dGhpcy5tYXAuZ2V0KGUpfWApfXJldHVybiB0aGlzLm1hcC5zZXQoZSx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6aSxkZWNsYXJlOiExLGRlY2xhcmVMb2NhbENhbGxiYWNrOm8scHJpb3JpdHk6cn0pLHRoaXN9Z2V0TG9jYWwodCl7cmV0dXJuIHRoaXMuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXswIT09dGhpcy5iaW5kaW5nTGV2ZWwmJih0aGlzLm1hcC5nZXQobzArMCkuZGVjbGFyZT0hMCl9bmVzdGVkU2NvcGUodCxlKXtsZXQgaT1uZXcgQjAodCx0aGlzLGUpO3JldHVybiB0PjAmJmkuZ2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKDApLGl9Z2V0T3JDcmVhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2xldCBlPW8wK3Q7cmV0dXJuIHRoaXMubWFwLmhhcyhlKXx8dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodCksdGhpcy5tYXAuZ2V0KGUpLmxoc31nZXRTaGFyZWRDb250ZXh0TmFtZSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArdCk7cmV0dXJuIGUmJmUuZGVjbGFyZT9lLmxoczpudWxsfW1heWJlR2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2lmKDE9PT10LnByaW9yaXR5JiZ0LnJldHJpZXZhbExldmVsPHRoaXMuYmluZGluZ0xldmVsKXtsZXQgZT10aGlzLm1hcC5nZXQobzArdC5yZXRyaWV2YWxMZXZlbCk7ZT9lLmRlY2xhcmU9ITA6dGhpcy5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodC5yZXRyaWV2YWxMZXZlbCl9fWdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0KXtsZXQgZT1NaShhYyt0aGlzLmZyZXNoUmVmZXJlbmNlTmFtZSgpKTt0aGlzLm1hcC5zZXQobzArdCx7cmV0cmlldmFsTGV2ZWw6dCxsaHM6ZSxkZWNsYXJlTG9jYWxDYWxsYmFjazooaSxyKT0+W2Uuc2V0KFFMKHIpKS50b0NvbnN0RGVjbCgpXSxkZWNsYXJlOiExLHByaW9yaXR5OjJ9KX1nZXRDb21wb25lbnRQcm9wZXJ0eSh0KXtsZXQgZT10aGlzLm1hcC5nZXQobzArMCk7cmV0dXJuIGUuZGVjbGFyZT0hMCx0aGlzLm1heWJlUmVzdG9yZVZpZXcoKSxlLmxocy5wcm9wKHQpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLmlzTGlzdGVuZXJTY29wZSgpJiYodGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZXx8KHRoaXMucGFyZW50LnJlc3RvcmVWaWV3VmFyaWFibGU9TWkodGhpcy5wYXJlbnQuZnJlc2hSZWZlcmVuY2VOYW1lKCkpKSx0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU9dGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZSl9cmVzdG9yZVZpZXdTdGF0ZW1lbnQoKXtpZih0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGUpe2xldCB0PXhmKG51bGwsSy5yZXN0b3JlVmlldyxbdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlXSk7cmV0dXJuIHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ/TWkoQXEpLnNldCh0KS50b0NvbnN0RGVjbCgpOnQudG9TdG10KCl9cmV0dXJuIG51bGx9dmlld1NuYXBzaG90U3RhdGVtZW50cygpe3JldHVybiB0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU/W3RoaXMucmVzdG9yZVZpZXdWYXJpYWJsZS5zZXQoeGYobnVsbCxLLmdldEN1cnJlbnRWaWV3LFtdKSkudG9Db25zdERlY2woKV06W119aXNMaXN0ZW5lclNjb3BlKCl7cmV0dXJuIHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5iaW5kaW5nTGV2ZWw9PT10aGlzLmJpbmRpbmdMZXZlbH12YXJpYWJsZURlY2xhcmF0aW9ucygpe2xldCB0PTA7cmV0dXJuIEFycmF5LmZyb20odGhpcy5tYXAudmFsdWVzKCkpLmZpbHRlcihlPT5lLmRlY2xhcmUpLnNvcnQoKGUsaSk9PmkucmV0cmlldmFsTGV2ZWwtZS5yZXRyaWV2YWxMZXZlbHx8aS5wcmlvcml0eS1lLnByaW9yaXR5KS5yZWR1Y2UoKGUsaSk9PntsZXQgcj10aGlzLmJpbmRpbmdMZXZlbC1pLnJldHJpZXZhbExldmVsLG89aS5kZWNsYXJlTG9jYWxDYWxsYmFjayh0aGlzLHItdCk7cmV0dXJuIHQ9cixlLmNvbmNhdChvKX0sW10pfWZyZXNoUmVmZXJlbmNlTmFtZSgpe2xldCB0PXRoaXM7Zm9yKDt0LnBhcmVudDspdD10LnBhcmVudDtyZXR1cm4iX3IiK3QucmVmZXJlbmNlTmFtZUluZGV4Kyt9aGFzUmVzdG9yZVZpZXdWYXJpYWJsZSgpe3JldHVybiEhdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlfW5vdGlmeVJlc3RvcmVkVmlld0NvbnRleHRVc2UoKXt0aGlzLnVzZXNSZXN0b3JlZFZpZXdDb250ZXh0PSEwfX07ZnVuY3Rpb24gcnEobil7c3dpdGNoKEFmKG4pKXtjYXNlIDE6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTtjYXNlIDM6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIEsucHJvcGVydHlJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gSy5wcm9wZXJ0eUludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiBLLnByb3BlcnR5SW50ZXJwb2xhdGVWfX1mdW5jdGlvbiBteGUobix0LGU9e30pe2xldHtpbnRlcnBvbGF0aW9uQ29uZmlnOmkscHJlc2VydmVXaGl0ZXNwYWNlczpyLGVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQ6b309ZSxzPXExKGkpLGw9KG5ldyBOTCkucGFyc2Uobix0LHtsZWFkaW5nVHJpdmlhQ2hhcnM6c3hlLC4uLmUsdG9rZW5pemVFeHBhbnNpb25Gb3JtczohMH0pO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmwuZXJyb3JzJiZsLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmwuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9bGV0IGM9bC5yb290Tm9kZXMsdT1uZXcgRzEoaSwhcixvKSxkPXUudmlzaXRBbGxXaXRoRXJyb3JzKGMpO2lmKCFlLmFsd2F5c0F0dGVtcHRIdG1sVG9SM0FzdENvbnZlcnNpb24mJmQuZXJyb3JzJiZkLmVycm9ycy5sZW5ndGg+MCl7bGV0IEk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmQuZXJyb3JzLG5vZGVzOltdLHN0eWxlVXJsczpbXSxzdHlsZXM6W10sbmdDb250ZW50U2VsZWN0b3JzOltdfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYoSS5jb21tZW50Tm9kZXM9W10pLEl9Yz1kLnJvb3ROb2RlcyxyfHwoYz1jdShuZXcgY2xhc3N7dmlzaXRFbGVtZW50KHQsZSl7cmV0dXJuIEp5ZS5oYXModC5uYW1lKXx8dC5hdHRycy5zb21lKHQ9PnQubmFtZT09PUpxKT9uZXcgQXgodC5uYW1lLGN1KHRoaXMsdC5hdHRycyksdC5jaGlsZHJlbix0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bik6bmV3IEF4KHQubmFtZSx0LmF0dHJzLGZ1bmN0aW9uKG4sdCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaCgoaSxyKT0+e2xldCBzPWkudmlzaXQobix7cHJldjp0W3ItMV0sbmV4dDp0W3IrMV19KTtzJiZlLnB1c2gocyl9KSxlfSh0aGlzLHQuY2hpbGRyZW4pLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKX12aXNpdEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0Lm5hbWUhPT1KcT90Om51bGx9dmlzaXRUZXh0KHQsZSl7aWYodC52YWx1ZS5tYXRjaCgkeWUpfHxlJiYoZS5wcmV2IGluc3RhbmNlb2YgTjB8fGUubmV4dCBpbnN0YW5jZW9mIE4wKSl7bGV0IG89dC50b2tlbnMubWFwKGE9PjU9PT1hLnR5cGU/ZnVuY3Rpb24oe3R5cGU6bixwYXJ0czp0LHNvdXJjZVNwYW46ZX0pe3JldHVybnt0eXBlOm4scGFydHM6W3RZKHRbMF0pXSxzb3VyY2VTcGFuOmV9fShhKTphKSxzPXRZKHQudmFsdWUpO3JldHVybiBuZXcgRjAocyx0LnNvdXJjZVNwYW4sbyx0LmkxOG4pfXJldHVybiBudWxsfXZpc2l0Q29tbWVudCh0LGUpe3JldHVybiB0fXZpc2l0RXhwYW5zaW9uKHQsZSl7cmV0dXJuIHR9dmlzaXRFeHBhbnNpb25DYXNlKHQsZSl7cmV0dXJuIHR9fSxjKSx1Lmhhc0kxOG5NZXRhJiYoYz1jdShuZXcgRzEoaSwhMSksYykpKTtsZXR7bm9kZXM6cCxlcnJvcnM6aCxzdHlsZVVybHM6ZixzdHlsZXM6bSxuZ0NvbnRlbnRTZWxlY3RvcnM6Qyxjb21tZW50Tm9kZXM6X309ZnVuY3Rpb24obix0LGUpe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuYmluZGluZ1BhcnNlcj10LHRoaXMub3B0aW9ucz1lLHRoaXMuZXJyb3JzPVtdLHRoaXMuc3R5bGVzPVtdLHRoaXMuc3R5bGVVcmxzPVtdLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPVtdLHRoaXMuY29tbWVudE5vZGVzPVtdLHRoaXMuaW5JMThuQmxvY2s9ITF9dmlzaXRFbGVtZW50KHQpe2xldCBlPXB4KHQuaTE4bik7ZSYmKHRoaXMuaW5JMThuQmxvY2smJnRoaXMucmVwb3J0RXJyb3IoIkNhbm5vdCBtYXJrIGFuIGVsZW1lbnQgYXMgdHJhbnNsYXRhYmxlIGluc2lkZSBvZiBhIHRyYW5zbGF0YWJsZSBzZWN0aW9uLiBQbGVhc2UgcmVtb3ZlIHRoZSBuZXN0ZWQgaTE4biBtYXJrZXIuIix0LnNvdXJjZVNwYW4pLHRoaXMuaW5JMThuQmxvY2s9ITApO2xldCBpPXJZKHQpO2lmKGkudHlwZT09PVBzLlNDUklQVClyZXR1cm4gbnVsbDtpZihpLnR5cGU9PT1Qcy5TVFlMRSl7bGV0IEM9MT09PShuPXQpLmNoaWxkcmVuLmxlbmd0aCYmbi5jaGlsZHJlblswXWluc3RhbmNlb2YgRjA/bi5jaGlsZHJlblswXS52YWx1ZTpudWxsO3JldHVybiBudWxsIT09QyYmdGhpcy5zdHlsZXMucHVzaChDKSxudWxsfWlmKGkudHlwZT09PVBzLlNUWUxFU0hFRVQmJmZ1bmN0aW9uKG4pe2lmKG51bGw9PW58fDA9PT1uLmxlbmd0aHx8Ii8iPT1uWzBdKXJldHVybiExO2xldCB0PW4ubWF0Y2goZ2JlKTtyZXR1cm4gbnVsbD09PXR8fCJwYWNrYWdlIj09dFsxXXx8ImFzc2V0Ij09dFsxXX0oaS5ocmVmQXR0cikpcmV0dXJuIHRoaXMuc3R5bGVVcmxzLnB1c2goaS5ocmVmQXR0ciksbnVsbDt2YXIgbjtsZXQgcj1mdW5jdGlvbihuKXtyZXR1cm4ibmctdGVtcGxhdGUiPT09Y2QobilbMV19KHQubmFtZSksbz1bXSxzPVtdLGE9W10sbD1bXSxjPVtdLHU9e30sZD1bXSxwPVtdLGg9ITE7Zm9yKGxldCBDIG9mIHQuYXR0cnMpe2xldCBfPSExLHk9JDkoQy5uYW1lKSxJPSExO2lmKEMuaTE4biYmKHVbQy5uYW1lXT1DLmkxOG4pLHkuc3RhcnRzV2l0aCgiKiIpKXtoJiZ0aGlzLnJlcG9ydEVycm9yKCJDYW4ndCBoYXZlIG11bHRpcGxlIHRlbXBsYXRlIGJpbmRpbmdzIG9uIG9uZSBlbGVtZW50LiBVc2Ugb25seSBvbmUgYXR0cmlidXRlIHByZWZpeGVkIHdpdGggKiIsQy5zb3VyY2VTcGFuKSxJPSEwLGg9ITA7bGV0IEE9Qy52YWx1ZSxPPXkuc3Vic3RyaW5nKCIqIi5sZW5ndGgpLGVlPVtdO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUlubGluZVRlbXBsYXRlQmluZGluZyhPLEEsQy5zb3VyY2VTcGFuLEMudmFsdWVTcGFuP0MudmFsdWVTcGFuLnN0YXJ0Lm9mZnNldDpDLnNvdXJjZVNwYW4uc3RhcnQub2Zmc2V0K0MubmFtZS5sZW5ndGgsW10sZCxlZSwhMCkscC5wdXNoKC4uLmVlLm1hcCh4ZT0+bmV3IHcxKHhlLm5hbWUseGUudmFsdWUseGUuc291cmNlU3Bhbix4ZS5rZXlTcGFuLHhlLnZhbHVlU3BhbikpKX1lbHNlIF89dGhpcy5wYXJzZUF0dHJpYnV0ZShyLEMsW10sbyxzLGEsbCk7IV8mJiFJJiZjLnB1c2godGhpcy52aXNpdEF0dHJpYnV0ZShDKSl9bGV0IG0sZj1jdShpLm5vbkJpbmRhYmxlP0liZTp0aGlzLHQuY2hpbGRyZW4pO2lmKGkudHlwZT09PVBzLk5HX0NPTlRFTlQpe3QuY2hpbGRyZW4mJiF0LmNoaWxkcmVuLmV2ZXJ5KHk9PmZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRjAmJjA9PW4udmFsdWUudHJpbSgpLmxlbmd0aH0oeSl8fGZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgVjF9KHkpKSYmdGhpcy5yZXBvcnRFcnJvcigiPG5nLWNvbnRlbnQ+IGVsZW1lbnQgY2Fubm90IGhhdmUgY29udGVudC4iLHQuc291cmNlU3Bhbik7bGV0IEM9aS5zZWxlY3RBdHRyLF89dC5hdHRycy5tYXAoeT0+dGhpcy52aXNpdEF0dHJpYnV0ZSh5KSk7bT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5zZWxlY3Rvcj10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMuaTE4bj1yLHRoaXMubmFtZT0ibmctY29udGVudCJ9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRDb250ZW50KHRoaXMpfX0oQyxfLHQuc291cmNlU3Bhbix0LmkxOG4pLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLnB1c2goQyl9ZWxzZSBpZihyKXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IFliKHQubmFtZSxjLEMuYm91bmQscyxbXSxmLGwsYSx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bil9ZWxzZXtsZXQgQz10aGlzLmV4dHJhY3RBdHRyaWJ1dGVzKHQubmFtZSxvLHUpO209bmV3IEUwKHQubmFtZSxjLEMuYm91bmQscyxmLGwsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3Bhbix0LmkxOG4pfWlmKGgpe2xldCBDPXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXMoIm5nLXRlbXBsYXRlIixkLHUpLF89W107Qy5saXRlcmFsLmZvckVhY2goTz0+Xy5wdXNoKE8pKSxDLmJvdW5kLmZvckVhY2goTz0+Xy5wdXNoKE8pKTtsZXQgeT1tIGluc3RhbmNlb2YgRTA/e2F0dHJpYnV0ZXM6bS5hdHRyaWJ1dGVzLGlucHV0czptLmlucHV0cyxvdXRwdXRzOm0ub3V0cHV0c306e2F0dHJpYnV0ZXM6W10saW5wdXRzOltdLG91dHB1dHM6W119O209bmV3IFliKG0gaW5zdGFuY2VvZiBZYj9udWxsOm0ubmFtZSx5LmF0dHJpYnV0ZXMseS5pbnB1dHMseS5vdXRwdXRzLF8sW21dLFtdLHAsdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3BhbixyJiZlP3ZvaWQgMDp0LmkxOG4pfXJldHVybiBlJiYodGhpcy5pbkkxOG5CbG9jaz0hMSksbX12aXNpdEF0dHJpYnV0ZSh0KXtyZXR1cm4gbmV3IGR4KHQubmFtZSx0LnZhbHVlLHQuc291cmNlU3Bhbix0LmtleVNwYW4sdC52YWx1ZVNwYW4sdC5pMThuKX12aXNpdFRleHQodCl7cmV0dXJuIHRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudG9rZW5zLHQuaTE4bil9dmlzaXRFeHBhbnNpb24odCl7aWYoIXQuaTE4bilyZXR1cm4gbnVsbDtpZighcHgodC5pMThuKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSAiJHt0LmkxOG4uY29uc3RydWN0b3J9IiBmb3IgImkxOG4iIHByb3BlcnR5IG9mICR7dC5zb3VyY2VTcGFuLnRvU3RyaW5nKCl9LiBFeHBlY3RlZCBhICJNZXNzYWdlImApO2xldCBlPXQuaTE4bixpPXt9LHI9e307cmV0dXJuIE9iamVjdC5rZXlzKGUucGxhY2Vob2xkZXJzKS5mb3JFYWNoKG89PntsZXQgcz1lLnBsYWNlaG9sZGVyc1tvXTtpZihvLnN0YXJ0c1dpdGgoIlZBUl8iKSl7bGV0IGE9by50cmltKCksbD10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihzLnRleHQscy5zb3VyY2VTcGFuKTtpW2FdPW5ldyB1eChsLHMuc291cmNlU3Bhbil9ZWxzZSByW29dPXRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHMudGV4dCxzLnNvdXJjZVNwYW4sbnVsbCl9KSxuZXcgTTEoaSxyLHQuc291cmNlU3BhbixlKX12aXNpdEV4cGFuc2lvbkNhc2UodCl7cmV0dXJuIG51bGx9dmlzaXRDb21tZW50KHQpe3JldHVybiB0aGlzLm9wdGlvbnMuY29sbGVjdENvbW1lbnROb2RlcyYmdGhpcy5jb21tZW50Tm9kZXMucHVzaChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCl7dGhyb3cgbmV3IEVycm9yKCJ2aXNpdCgpIG5vdCBpbXBsZW1lbnRlZCBmb3IgQ29tbWVudCIpfX0odC52YWx1ZXx8IiIsdC5zb3VyY2VTcGFuKSksbnVsbH1leHRyYWN0QXR0cmlidXRlcyh0LGUsaSl7bGV0IHI9W10sbz1bXTtyZXR1cm4gZS5mb3JFYWNoKHM9PntsZXQgYT1pW3MubmFtZV07aWYocy5pc0xpdGVyYWwpby5wdXNoKG5ldyBkeChzLm5hbWUscy5leHByZXNzaW9uLnNvdXJjZXx8IiIscy5zb3VyY2VTcGFuLHMua2V5U3BhbixzLnZhbHVlU3BhbixhKSk7ZWxzZXtsZXQgbD10aGlzLmJpbmRpbmdQYXJzZXIuY3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxzLCEwLCExKTtyLnB1c2goTTAuZnJvbUJvdW5kRWxlbWVudFByb3BlcnR5KGwsYSkpfX0pLHtib3VuZDpyLGxpdGVyYWw6b319cGFyc2VBdHRyaWJ1dGUodCxlLGkscixvLHMsYSl7bGV0IGw9JDkoZS5uYW1lKSxjPWUudmFsdWUsdT1lLnNvdXJjZVNwYW4sZD1lLnZhbHVlU3Bhbj9lLnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQ6dS5zdGFydC5vZmZzZXQ7ZnVuY3Rpb24gcChfLHksSSl7bGV0IE89Xy5zdGFydC5tb3ZlQnkoeS5sZW5ndGgrKGUubmFtZS5sZW5ndGgtbC5sZW5ndGgpKSxlZT1PLm1vdmVCeShJLmxlbmd0aCk7cmV0dXJuIG5ldyBUbyhPLGVlLE8sSSl9bGV0IGg9bC5tYXRjaChUYmUpO2lmKGgpe2lmKG51bGwhPWhbMV0pe2xldCBfPWhbN10seT1wKHUsaFsxXSxfKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSl9ZWxzZSBpZihoWzJdKWlmKHQpe2xldCBfPWhbN10seT1wKHUsaFsyXSxfKTt0aGlzLnBhcnNlVmFyaWFibGUoXyxjLHUseSxlLnZhbHVlU3BhbixzKX1lbHNlIHRoaXMucmVwb3J0RXJyb3IoJyJsZXQtIiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBuZy10ZW1wbGF0ZSBlbGVtZW50cy4nLHUpO2Vsc2UgaWYoaFszXSl7bGV0IF89aFs3XSx5PXAodSxoWzNdLF8pO3RoaXMucGFyc2VSZWZlcmVuY2UoXyxjLHUseSxlLnZhbHVlU3BhbixhKX1lbHNlIGlmKGhbNF0pe2xldCBfPVtdLHk9aFs3XSxJPXAodSxoWzRdLHkpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUV2ZW50KHksYywhMSx1LGUudmFsdWVTcGFufHx1LGksXyxJKSxrTihfLG8pfWVsc2UgaWYoaFs1XSl7bGV0IF89aFs3XSx5PXAodSxoWzVdLF8pO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KX1lbHNlIGlmKGhbNl0pe2xldCBfPXAodSwiIixsKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VMaXRlcmFsQXR0cihsLGMsdSxkLGUudmFsdWVTcGFuLGkscixfKX1yZXR1cm4hMH1sZXQgZj1udWxsO2lmKGwuc3RhcnRzV2l0aCh1cF9CQU5BTkFfQk9YLnN0YXJ0KT9mPXVwX0JBTkFOQV9CT1g6bC5zdGFydHNXaXRoKHVwX1BST1BFUlRZLnN0YXJ0KT9mPXVwX1BST1BFUlRZOmwuc3RhcnRzV2l0aCh1cF9FVkVOVC5zdGFydCkmJihmPXVwX0VWRU5UKSxudWxsIT09ZiYmbC5lbmRzV2l0aChmLmVuZCkmJmwubGVuZ3RoPmYuc3RhcnQubGVuZ3RoK2YuZW5kLmxlbmd0aCl7bGV0IF89bC5zdWJzdHJpbmcoZi5zdGFydC5sZW5ndGgsbC5sZW5ndGgtZi5lbmQubGVuZ3RoKSx5PXAodSxmLnN0YXJ0LF8pO2lmKGYuc3RhcnQ9PT11cF9CQU5BTkFfQk9YLnN0YXJ0KXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhfLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscix5KSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KF8sYyx1LGUudmFsdWVTcGFuLGksbyx5KTtlbHNlIGlmKGYuc3RhcnQ9PT11cF9QUk9QRVJUWS5zdGFydCl0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoXyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIseSk7ZWxzZXtsZXQgST1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChfLGMsITEsdSxlLnZhbHVlU3Bhbnx8dSxpLEkseSksa04oSSxvKX1yZXR1cm4hMH1sZXQgbT1wKHUsIiIsbCk7cmV0dXJuIHRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5SW50ZXJwb2xhdGlvbihsLGMsdSxlLnZhbHVlU3BhbixpLHIsbSxlLnZhbHVlVG9rZW5zPz9udWxsKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89ZVkodCkscz10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uKG8sZSxpKTtyZXR1cm4gcz9uZXcgdXgocyxlLHIpOm5ldyB3MChvLGUpfXBhcnNlVmFyaWFibGUodCxlLGkscixvLHMpe3QuaW5kZXhPZigiLSIpPi0xP3RoaXMucmVwb3J0RXJyb3IoJyItIiBpcyBub3QgYWxsb3dlZCBpbiB2YXJpYWJsZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoJiZ0aGlzLnJlcG9ydEVycm9yKCJWYXJpYWJsZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSkscy5wdXNoKG5ldyB3MSh0LGUsaSxyLG8pKX1wYXJzZVJlZmVyZW5jZSh0LGUsaSxyLG8scyl7dC5pbmRleE9mKCItIik+LTE/dGhpcy5yZXBvcnRFcnJvcignIi0iIGlzIG5vdCBhbGxvd2VkIGluIHJlZmVyZW5jZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoP3RoaXMucmVwb3J0RXJyb3IoIlJlZmVyZW5jZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSk6cy5zb21lKGE9PmEubmFtZT09PXQpJiZ0aGlzLnJlcG9ydEVycm9yKGBSZWZlcmVuY2UgIiMke3R9IiBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlYCxpKSxzLnB1c2gobmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW99dmlzaXQodCl7cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UodGhpcyl9fSh0LGUsaSxyLG8pKX1wYXJzZUFzc2lnbm1lbnRFdmVudCh0LGUsaSxyLG8scyxhKXtsZXQgbD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChgJHt0fUNoYW5nZWAsYCR7ZX0gPSRldmVudGAsITAsaSxyfHxpLG8sbCxhKSxrTihsLHMpfXJlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfX0odCxlKSxzPXtub2RlczpjdShpLG4pLGVycm9yczp0LmVycm9ycy5jb25jYXQoaS5lcnJvcnMpLHN0eWxlVXJsczppLnN0eWxlVXJscyxzdHlsZXM6aS5zdHlsZXMsbmdDb250ZW50U2VsZWN0b3JzOmkubmdDb250ZW50U2VsZWN0b3JzfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYocy5jb21tZW50Tm9kZXM9aS5jb21tZW50Tm9kZXMpLHN9KGMscyx7Y29sbGVjdENvbW1lbnROb2RlczohIWUuY29sbGVjdENvbW1lbnROb2Rlc30pO2gucHVzaCguLi5sLmVycm9ycywuLi5kLmVycm9ycyk7bGV0IHk9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmgubGVuZ3RoPjA/aDpudWxsLG5vZGVzOnAsc3R5bGVVcmxzOmYsc3R5bGVzOm0sbmdDb250ZW50U2VsZWN0b3JzOkN9O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJih5LmNvbW1lbnROb2Rlcz1fKSx5fXZhciBsWT1uZXcgajE7ZnVuY3Rpb24gcTEobj0kYyl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9leHByUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lLHRoaXMuX3NjaGVtYVJlZ2lzdHJ5PWksdGhpcy5lcnJvcnM9cn1nZXQgaW50ZXJwb2xhdGlvbkNvbmZpZygpe3JldHVybiB0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnfWNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VQcm9wZXJ0eUJpbmRpbmcocixvLCEwLGUsZS5zdGFydC5vZmZzZXQsdm9pZCAwLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IHByb3BlcnR5IGJpbmRpbmcgIiR7cn0iIG5lZWRzIHRvIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIGJ1dCBnb3QgIiR7b30iICgke3R5cGVvZiBvfSlgLGUpfXJldHVybiBpfWNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VFdmVudChyLG8sITEsZSxlLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IGxpc3RlbmVyICIke3J9IiBuZWVkcyB0byBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBidXQgZ290ICIke299IiAoJHt0eXBlb2Ygb30pYCxlKX1yZXR1cm4gaX1wYXJzZUludGVycG9sYXRpb24odCxlLGkpe2xldCByPWUuc3RhcnQudG9TdHJpbmcoKSxvPWUuZnVsbFN0YXJ0Lm9mZnNldDt0cnl7bGV0IHM9dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb24odCxyLG8saSx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxlKSxzfWNhdGNoKHMpe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtzfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbyl9fXBhcnNlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24odCxlKXtsZXQgaT1lLnN0YXJ0LnRvU3RyaW5nKCkscj1lLnN0YXJ0Lm9mZnNldDt0cnl7bGV0IG89dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsaSxyKTtyZXR1cm4gbyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhvLmVycm9ycyxlKSxvfWNhdGNoKG8pe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtvfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLGkscil9fXBhcnNlSW5saW5lVGVtcGxhdGVCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCl7bGV0IHU9dGhpcy5fcGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLGkuc3RhcnQub2Zmc2V0KyIqIi5sZW5ndGgscik7Zm9yKGxldCBkIG9mIHUpe2xldCBwPWNwKGksZC5zb3VyY2VTcGFuKSxoPWQua2V5LnNvdXJjZSxmPWNwKGksZC5rZXkuc3Bhbik7aWYoZCBpbnN0YW5jZW9mIFN4KXtsZXQgbT1kLnZhbHVlP2QudmFsdWUuc291cmNlOiIkaW1wbGljaXQiLEM9ZC52YWx1ZT9jcChpLGQudmFsdWUuc3Bhbik6dm9pZCAwO2EucHVzaChuZXcgeUwoaCxtLHAsZixDKSl9ZWxzZSBpZihkLnZhbHVlKXtsZXQgbT1sP3A6aSxDPWNwKGksZC52YWx1ZS5hc3Quc291cmNlU3Bhbik7dGhpcy5fcGFyc2VQcm9wZXJ0eUFzdChoLGQudmFsdWUsbSxmLEMsbyxzKX1lbHNlIG8ucHVzaChbaCwiIl0pLHRoaXMucGFyc2VMaXRlcmFsQXR0cihoLG51bGwsZixyLHZvaWQgMCxvLHMsZil9fV9wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz1pLnN0YXJ0LnRvU3RyaW5nKCk7dHJ5e2xldCBhPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxzLHIsbyk7cmV0dXJuIHRoaXMuX3JlcG9ydEV4cHJlc3Npb25QYXJzZXJFcnJvcnMoYS5lcnJvcnMsaSksYS53YXJuaW5ncy5mb3JFYWNoKGw9Pnt0aGlzLl9yZXBvcnRFcnJvcihsLGksbnUuV0FSTklORyl9KSxhLnRlbXBsYXRlQmluZGluZ3N9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke2F9YCxpKSxbXX19cGFyc2VMaXRlcmFsQXR0cih0LGUsaSxyLG8scyxhLGwpe1JOKHQpPyh0PXQuc3Vic3RyaW5nKDEpLHZvaWQgMCE9PWwmJihsPWNwKGwsbmV3IE9hKGwuc3RhcnQub2Zmc2V0KzEsbC5lbmQub2Zmc2V0KSkpLGUmJnRoaXMuX3JlcG9ydEVycm9yKCdBc3NpZ25pbmcgYW5pbWF0aW9uIHRyaWdnZXJzIHZpYSBAcHJvcD0iZXhwIiBhdHRyaWJ1dGVzIHdpdGggYW4gZXhwcmVzc2lvbiBpcyBpbnZhbGlkLiBVc2UgcHJvcGVydHkgYmluZGluZ3MgKGUuZy4gW0Bwcm9wXT0iZXhwIikgb3IgdXNlIGFuIGF0dHJpYnV0ZSB3aXRob3V0IGEgdmFsdWUgKGUuZy4gQHByb3ApIGluc3RlYWQuJyxpLG51LkVSUk9SKSx0aGlzLl9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLGwsbyxzLGEpKTphLnB1c2gobmV3IFFiKHQsdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZShlLCIiLHIpLGdwLkxJVEVSQUxfQVRUUixpLGwsbykpfXBhcnNlUHJvcGVydHlCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCxjKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJQcm9wZXJ0eSBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIscik7bGV0IHU9ITE7dC5zdGFydHNXaXRoKFBOKT8odT0hMCx0PXQuc3Vic3RyaW5nKFBOLmxlbmd0aCksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrUE4ubGVuZ3RoLGMuZW5kLm9mZnNldCkpKSk6Uk4odCkmJih1PSEwLHQ9dC5zdWJzdHJpbmcoMSksdm9pZCAwIT09YyYmKGM9Y3AoYyxuZXcgT2EoYy5zdGFydC5vZmZzZXQrMSxjLmVuZC5vZmZzZXQpKSkpLHU/dGhpcy5fcGFyc2VBbmltYXRpb24odCxlLHIsbyxjLHMsYSxsKTp0aGlzLl9wYXJzZVByb3BlcnR5QXN0KHQsdGhpcy5fcGFyc2VCaW5kaW5nKGUsaSxzfHxyLG8pLHIsYyxzLGEsbCl9cGFyc2VQcm9wZXJ0eUludGVycG9sYXRpb24odCxlLGkscixvLHMsYSxsKXtsZXQgYz10aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihlLHJ8fGksbCk7cmV0dXJuISFjJiYodGhpcy5fcGFyc2VQcm9wZXJ0eUFzdCh0LGMsaSxhLHIsbyxzKSwhMCl9X3BhcnNlUHJvcGVydHlBc3QodCxlLGkscixvLHMsYSl7cy5wdXNoKFt0LGUuc291cmNlXSksYS5wdXNoKG5ldyBRYih0LGUsZ3AuREVGQVVMVCxpLHIsbykpfV9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLG8scyxhLGwpezA9PT10Lmxlbmd0aCYmdGhpcy5fcmVwb3J0RXJyb3IoIkFuaW1hdGlvbiB0cmlnZ2VyIGlzIG1pc3NpbmciLGkpO2xldCBjPXRoaXMuX3BhcnNlQmluZGluZyhlfHwidW5kZWZpbmVkIiwhMSxzfHxpLHIpO2EucHVzaChbdCxjLnNvdXJjZV0pLGwucHVzaChuZXcgUWIodCxjLGdwLkFOSU1BVElPTixpLG8scykpfV9wYXJzZUJpbmRpbmcodCxlLGkscil7bGV0IG89KGkmJmkuc3RhcnR8fCIodW5rbm93bikiKS50b1N0cmluZygpO3RyeXtsZXQgcz1lP3RoaXMuX2V4cHJQYXJzZXIucGFyc2VTaW1wbGVCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpOnRoaXMuX2V4cHJQYXJzZXIucGFyc2VCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpO3JldHVybiBzJiZ0aGlzLl9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHMuZXJyb3JzLGkpLHN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIsbyxyKX19Y3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxlLGk9ITEscj0hMCl7aWYoZS5pc0FuaW1hdGlvbilyZXR1cm4gbmV3IFIxKGUubmFtZSw0LFlyLk5PTkUsZS5leHByZXNzaW9uLG51bGwsZS5zb3VyY2VTcGFuLGUua2V5U3BhbixlLnZhbHVlU3Bhbik7bGV0IHMsYyxvPW51bGwsYT1udWxsLGw9ZS5uYW1lLnNwbGl0KCIuIik7aWYobC5sZW5ndGg+MSlpZigiYXR0ciI9PWxbMF0pe2E9bC5zbGljZSgxKS5qb2luKCIuIiksaXx8dGhpcy5fdmFsaWRhdGVQcm9wZXJ0eU9yQXR0cmlidXRlTmFtZShhLGUuc291cmNlU3BhbiwhMCksYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LGEsITApO2xldCB1PWEuaW5kZXhPZigiOiIpO2lmKHU+LTEpe2xldCBkPWEuc3Vic3RyaW5nKDAsdSkscD1hLnN1YnN0cmluZyh1KzEpO2E9ak4oZCxwKX1zPTF9ZWxzZSJjbGFzcyI9PWxbMF0/KGE9bFsxXSxzPTIsYz1bWXIuTk9ORV0pOiJzdHlsZSI9PWxbMF0mJihvPWwubGVuZ3RoPjI/bFsyXTpudWxsLGE9bFsxXSxzPTMsYz1bWXIuU1RZTEVdKTtpZihudWxsPT09YSl7bGV0IHU9dGhpcy5fc2NoZW1hUmVnaXN0cnkuZ2V0TWFwcGVkUHJvcE5hbWUoZS5uYW1lKTthPXI/dTplLm5hbWUsYz1PTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHUsITEpLHM9MCxpfHx0aGlzLl92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHUsZS5zb3VyY2VTcGFuLCExKX1yZXR1cm4gbmV3IFIxKGEscyxjWzBdLGUuZXhwcmVzc2lvbixvLGUuc291cmNlU3BhbixlLmtleVNwYW4sZS52YWx1ZVNwYW4pfXBhcnNlRXZlbnQodCxlLGkscixvLHMsYSxsKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJFdmVudCBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIsciksUk4odCk/KHQ9dC5zbGljZSgxKSx2b2lkIDAhPT1sJiYobD1jcChsLG5ldyBPYShsLnN0YXJ0Lm9mZnNldCsxLGwuZW5kLm9mZnNldCkpKSx0aGlzLl9wYXJzZUFuaW1hdGlvbkV2ZW50KHQsZSxpLHIsbyxhLGwpKTp0aGlzLl9wYXJzZVJlZ3VsYXJFdmVudCh0LGUsaSxyLG8scyxhLGwpfWNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHModCxlLGkpe2xldCByPXRoaXMuX3NjaGVtYVJlZ2lzdHJ5LmdldE1hcHBlZFByb3BOYW1lKGUpO3JldHVybiBPTih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHIsaSl9X3BhcnNlQW5pbWF0aW9uRXZlbnQodCxlLGkscixvLHMsYSl7bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiLiIsdCl9KHQsW3QsIiJdKSxjPWxbMF0sdT1sWzFdLnRvTG93ZXJDYXNlKCksZD10aGlzLl9wYXJzZUFjdGlvbihlLGksbyk7cy5wdXNoKG5ldyBQMShjLHUsMSxkLHIsbyxhKSksMD09PWMubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQW5pbWF0aW9uIGV2ZW50IG5hbWUgaXMgbWlzc2luZyBpbiBiaW5kaW5nIixyKSx1PyJzdGFydCIhPT11JiYiZG9uZSIhPT11JiZ0aGlzLl9yZXBvcnRFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiBvdXRwdXQgcGhhc2UgdmFsdWUgIiR7dX0iIGZvciAiQCR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgKHVzZSBzdGFydCBvciBkb25lKWAscik6dGhpcy5fcmVwb3J0RXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciBvdXRwdXQgZXZlbnQgKEAke2N9KSBpcyBtaXNzaW5nIGl0cyBwaGFzZSB2YWx1ZSBuYW1lIChzdGFydCBvciBkb25lIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkKWAscil9X3BhcnNlUmVndWxhckV2ZW50KHQsZSxpLHIsbyxzLGEsbCl7bGV0W2MsdV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbXEobiwiOiIsdCl9KHQsW251bGwsdF0pLGQ9dGhpcy5fcGFyc2VBY3Rpb24oZSxpLG8pO3MucHVzaChbdCxkLnNvdXJjZV0pLGEucHVzaChuZXcgUDEodSxjLDAsZCxyLG8sbCkpfV9wYXJzZUFjdGlvbih0LGUsaSl7bGV0IHI9KGkmJmkuc3RhcnR8fCIodW5rbm93biIpLnRvU3RyaW5nKCksbz1pJiZpLnN0YXJ0P2kuc3RhcnQub2Zmc2V0OjA7dHJ5e2xldCBzPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VBY3Rpb24odCxlLHIsbyx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxpKSwhc3x8cy5hc3QgaW5zdGFuY2VvZiBuYT8odGhpcy5fcmVwb3J0RXJyb3IoIkVtcHR5IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCIsaSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbykpOnN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIscixvKX19X3JlcG9ydEVycm9yKHQsZSxpPW51LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBNZihlLHQsaSkpfV9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHQsZSl7Zm9yKGxldCBpIG9mIHQpdGhpcy5fcmVwb3J0RXJyb3IoaS5tZXNzYWdlLGUpfV92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHQsZSxpKXtsZXQgcj1pP3RoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlQXR0cmlidXRlKHQpOnRoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlUHJvcGVydHkodCk7ci5lcnJvciYmdGhpcy5fcmVwb3J0RXJyb3Ioci5tc2csZSxudS5FUlJPUil9fShuZXcgQjEobmV3IEwxKSxuLGxZLFtdKX1mdW5jdGlvbiBjWShuLHQpe3N3aXRjaChuKXtjYXNlIFlyLkhUTUw6cmV0dXJuIHhuKEsuc2FuaXRpemVIdG1sKTtjYXNlIFlyLlNDUklQVDpyZXR1cm4geG4oSy5zYW5pdGl6ZVNjcmlwdCk7Y2FzZSBZci5TVFlMRTpyZXR1cm4gdD94bihLLnNhbml0aXplU3R5bGUpOm51bGw7Y2FzZSBZci5VUkw6cmV0dXJuIHhuKEsuc2FuaXRpemVVcmwpO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiB4bihLLnNhbml0aXplUmVzb3VyY2VVcmwpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGd4ZShuLHQpe2xldCBlPXJ1KHQudmFsdWUpO2lmKCFpWShuLHQubmFtZSkpcmV0dXJuIGU7c3dpdGNoKGxZLnNlY3VyaXR5Q29udGV4dChuLHQubmFtZSwhMCkpe2Nhc2UgWXIuSFRNTDpyZXR1cm4gcjkoeG4oSy50cnVzdENvbnN0YW50SHRtbCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2Nhc2UgWXIuUkVTT1VSQ0VfVVJMOnJldHVybiByOSh4bihLLnRydXN0Q29uc3RhbnRSZXNvdXJjZVVybCksbmV3IF8xKFtuZXcgdjEodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2RlZmF1bHQ6cmV0dXJuIGV9fWZ1bmN0aW9uIHZ4ZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHcwfHxuIGluc3RhbmNlb2YgdXh8fG4gaW5zdGFuY2VvZiBNMX1mdW5jdGlvbiBWTihuKXtyZXR1cm4gbi5ldmVyeSh2eGUpfWZ1bmN0aW9uIHMxKG4sdCxlKXtyZXR1cm4oKT0+e2xldCBpPW4oKSxyPUFycmF5LmlzQXJyYXkoaSk/aTpbaV07cmV0dXJuIGUmJnIucHVzaCguLi5lKSx0JiZyLnVuc2hpZnQobnQodCkpLHJ9fXZhciBvcT0ibmdJMThuQ2xvc3VyZU1vZGUiO2Z1bmN0aW9uIHVZKG4pe3JldHVybiBuLnJlZHVjZSgodCxlKT0+e2xldCBpPUFycmF5LmlzQXJyYXkoZSk/dVkoZSk6ZTtyZXR1cm4gdC5jb25jYXQoaSl9LFtdKX12YXIgeHhlPS9hdHRyXC4oW15cXV0rKS87ZnVuY3Rpb24gcFkobix0LGUpe2xldCBpPW5ldyB5cCxyPXQzKG4uc2VsZWN0b3IpO3JldHVybiBpLnNldCgidHlwZSIsbi5pbnRlcm5hbFR5cGUpLHIubGVuZ3RoPjAmJmkuc2V0KCJzZWxlY3RvcnMiLHJ1KHIpKSxuLnF1ZXJpZXMubGVuZ3RoPjAmJmkuc2V0KCJjb250ZW50UXVlcmllcyIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO2ZvcihsZXQgYSBvZiBuKXtpLnB1c2goeG4oSy5jb250ZW50UXVlcnkpLmNhbGxGbihbTWkoImRpckluZGV4IiksLi4uZlkoYSx0KV0pLnRvU3RtdCgpKTtsZXQgbD1vKCksYz14bihLLmxvYWRRdWVyeSkuY2FsbEZuKFtdKSx1PXhuKEsucXVlcnlSZWZyZXNoKS5jYWxsRm4oW2wuc2V0KGMpXSksZD1NaShhYykucHJvcChhLnByb3BlcnR5TmFtZSkuc2V0KGEuZmlyc3Q/bC5wcm9wKCJmaXJzdCIpOmwpO3IucHVzaCh1LmFuZChkKS50b1N0bXQoKSl9bGV0IHM9ZT9gJHtlfV9Db250ZW50UXVlcmllc2A6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpLG5ldyBScygiZGlySW5kZXgiLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnF1ZXJpZXMsdCxuLm5hbWUpKSxuLnZpZXdRdWVyaWVzLmxlbmd0aCYmaS5zZXQoInZpZXdRdWVyeSIsZnVuY3Rpb24obix0LGUpe2xldCBpPVtdLHI9W10sbz1JcShyLCJfdCIpO24uZm9yRWFjaChhPT57bGV0IGw9eG4oSy52aWV3UXVlcnkpLmNhbGxGbihmWShhLHQpKTtpLnB1c2gobC50b1N0bXQoKSk7bGV0IGM9bygpLHU9eG4oSy5sb2FkUXVlcnkpLmNhbGxGbihbXSksZD14bihLLnF1ZXJ5UmVmcmVzaCkuY2FsbEZuKFtjLnNldCh1KV0pLHA9TWkoYWMpLnByb3AoYS5wcm9wZXJ0eU5hbWUpLnNldChhLmZpcnN0P2MucHJvcCgiZmlyc3QiKTpjKTtyLnB1c2goZC5hbmQocCkudG9TdG10KCkpfSk7bGV0IHM9ZT9gJHtlfV9RdWVyeWA6bnVsbDtyZXR1cm4gT3MoW25ldyBScyhOeCxreCksbmV3IFJzKGFjLG51bGwpXSxbeHAoMSxpKSx4cCgyLHIpXSxpYSxudWxsLHMpfShuLnZpZXdRdWVyaWVzLHQsbi5uYW1lKSksaS5zZXQoImhvc3RCaW5kaW5ncyIsZnVuY3Rpb24obix0LGUsaSxyLG8scyl7bGV0IGE9TWkoYWMpLGw9bmV3IE4xKGEpLHtzdHlsZUF0dHI6YyxjbGFzc0F0dHI6dX09bi5zcGVjaWFsQXR0cmlidXRlczt2b2lkIDAhPT1jJiZsLnJlZ2lzdGVyU3R5bGVBdHRyKGMpLHZvaWQgMCE9PXUmJmwucmVnaXN0ZXJDbGFzc0F0dHIodSk7bGV0IGQ9W10scD1bXSxoPVtdLGY9dCxtPWUuY3JlYXRlRGlyZWN0aXZlSG9zdEV2ZW50QXN0cyhuLmxpc3RlbmVycyxmKTttJiZtLmxlbmd0aCYmZC5wdXNoKC4uLmZ1bmN0aW9uKG4sdCl7bGV0IGU9W10saT1bXSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtsZXQgcz1vLm5hbWUmJm0wKG8ubmFtZSksYT0xPT09by50eXBlP1NxKHMsby50YXJnZXRPclBoYXNlKTpzLGw9dCYmcz9gJHt0fV8ke2F9X0hvc3RCaW5kaW5nSGFuZGxlcmA6bnVsbCxjPWFZKFMwLmZyb21QYXJzZWRFdmVudChvKSxsKTsxPT1vLnR5cGU/aS5wdXNoKGMpOmUucHVzaChjKX1mb3IobGV0IG8gb2YgaSlyLnB1c2goe3JlZmVyZW5jZTpLLnN5bnRoZXRpY0hvc3RMaXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7Zm9yKGxldCBvIG9mIGUpci5wdXNoKHtyZWZlcmVuY2U6Sy5saXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7cmV0dXJuIHJ9KG0sbykpO2xldCBDPWUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsZiksXz1bXSx5PTA7QyYmQy5mb3JFYWNoKGZlPT57bC5yZWdpc3RlcklucHV0QmFzZWRPbk5hbWUoZmUubmFtZSxmZS5leHByZXNzaW9uLGYpP3krPTI6KF8ucHVzaChmZSkseSsrKX0pO2xldCBJLEE9KCk9PihJfHwoST1uZXcgVzEoaSwoKT0+aDEoIlVuZXhwZWN0ZWQgbm9kZSIpLHZlPT57bGV0IFQ9eTtyZXR1cm4geSs9dmUsVH0sKCk9PmgxKCJVbmV4cGVjdGVkIHBpcGUiKSkpLEkpLE89W10sZWU9W10sWD1bXTtmb3IobGV0IGZlIG9mIF8pe2xldCB2ZT1mZS5leHByZXNzaW9uLnZpc2l0KEEoKSksVD1hcShhLHZlKSx7YmluZGluZ05hbWU6bmUsaW5zdHJ1Y3Rpb246bGUsaXNBdHRyaWJ1dGU6aGV9PU54ZShmZSkseWU9ZS5jYWxjUG9zc2libGVTZWN1cml0eUNvbnRleHRzKHIsbmUsaGUpLmZpbHRlcihtZT0+bWUhPT1Zci5OT05FKSxKPW51bGw7eWUubGVuZ3RoJiYoSj0yPT09eWUubGVuZ3RoJiZ5ZS5pbmRleE9mKFlyLlVSTCk+LTEmJnllLmluZGV4T2YoWXIuUkVTT1VSQ0VfVVJMKT4tMT94bihLLnNhbml0aXplVXJsT3JSZXNvdXJjZVVybCk6Y1koeWVbMF0saGUpKTtsZXQgYWU9W250KG5lKSxULmN1cnJWYWxFeHByXTtKJiZhZS5wdXNoKEopLGgucHVzaCguLi5ULnN0bXRzKSxsZT09PUsuaG9zdFByb3BlcnR5P08ucHVzaChhZSk6bGU9PT1LLmF0dHJpYnV0ZT9lZS5wdXNoKGFlKTpsZT09PUsuc3ludGhldGljSG9zdFByb3BlcnR5P1gucHVzaChhZSk6cC5wdXNoKHtyZWZlcmVuY2U6bGUscGFyYW1zT3JGbjphZSxzcGFuOm51bGx9KX1mb3IobGV0IGZlIG9mIE8pcC5wdXNoKHtyZWZlcmVuY2U6Sy5ob3N0UHJvcGVydHkscGFyYW1zT3JGbjpmZSxzcGFuOm51bGx9KTtmb3IobGV0IGZlIG9mIGVlKXAucHVzaCh7cmVmZXJlbmNlOksuYXR0cmlidXRlLHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7Zm9yKGxldCBmZSBvZiBYKXAucHVzaCh7cmVmZXJlbmNlOksuc3ludGhldGljSG9zdFByb3BlcnR5LHBhcmFtc09yRm46ZmUsc3BhbjpudWxsfSk7bGV0IHhlPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKSl7bGV0IGk9bltlXTt0LnB1c2gobnQoZSksaSl9cmV0dXJuIHR9KG4uYXR0cmlidXRlcyk7aWYobC5hc3NpZ25Ib3N0QXR0cnMoeGUscyksbC5oYXNCaW5kaW5ncyYmbC5idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKEEoKSkuZm9yRWFjaChmZT0+e2ZvcihsZXQgdmUgb2YgZmUuY2FsbHMpeSs9TWF0aC5tYXgodmUuYWxsb2NhdGVCaW5kaW5nU2xvdHMtMiwwKSxwLnB1c2goe3JlZmVyZW5jZTpmZS5yZWZlcmVuY2UscGFyYW1zT3JGbjpGeGUodmUsYSxhcSksc3BhbjpudWxsfSl9KSx5JiZzLnNldCgiaG9zdFZhcnMiLG50KHkpKSxkLmxlbmd0aD4wfHxwLmxlbmd0aD4wKXtsZXQgZmU9bz9gJHtvfV9Ib3N0QmluZGluZ3NgOm51bGwsdmU9W107cmV0dXJuIGQubGVuZ3RoPjAmJnZlLnB1c2goeHAoMSxUMShkKSkpLHAubGVuZ3RoPjAmJnZlLnB1c2goeHAoMixoLmNvbmNhdChUMShwKSkpKSxPcyhbbmV3IFJzKE54LGt4KSxuZXcgUnMoYWMsbnVsbCldLHZlLGlhLG51bGwsZmUpfXJldHVybiBudWxsfShuLmhvc3Qsbi50eXBlU291cmNlU3BhbixlLHQsbi5zZWxlY3Rvcnx8IiIsbi5uYW1lLGkpKSxpLnNldCgiaW5wdXRzIixtOShuLmlucHV0cywhMCkpLGkuc2V0KCJvdXRwdXRzIixtOShuLm91dHB1dHMpKSxudWxsIT09bi5leHBvcnRBcyYmaS5zZXQoImV4cG9ydEFzIixjcihuLmV4cG9ydEFzLm1hcChvPT5udChvKSkpKSxuLmlzU3RhbmRhbG9uZSYmaS5zZXQoInN0YW5kYWxvbmUiLG50KCEwKSksaX1mdW5jdGlvbiBoWShuLHQpe2xldCBlPVtdLGk9dC5wcm92aWRlcnMscj10LnZpZXdQcm92aWRlcnM7aWYoaXx8cil7bGV0IG89W2l8fG5ldyB2ZihbXSldO3ImJm8ucHVzaChyKSxlLnB1c2goeG4oSy5Qcm92aWRlcnNGZWF0dXJlKS5jYWxsRm4obykpfXQudXNlc0luaGVyaXRhbmNlJiZlLnB1c2goeG4oSy5Jbmhlcml0RGVmaW5pdGlvbkZlYXR1cmUpKSx0LmZ1bGxJbmhlcml0YW5jZSYmZS5wdXNoKHhuKEsuQ29weURlZmluaXRpb25GZWF0dXJlKSksdC5saWZlY3ljbGUudXNlc09uQ2hhbmdlcyYmZS5wdXNoKHhuKEsuTmdPbkNoYW5nZXNGZWF0dXJlKSksdC5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKSYmdC5pc1N0YW5kYWxvbmUmJmUucHVzaCh4bihLLlN0YW5kYWxvbmVGZWF0dXJlKSksZS5sZW5ndGgmJm4uc2V0KCJmZWF0dXJlcyIsY3IoZSkpfWZ1bmN0aW9uIGZZKG4sdCl7bGV0IGU9W012ZShuLHQpLG50KER4ZShuKSldO3JldHVybiBuLnJlYWQmJmUucHVzaChuLnJlYWQpLGV9ZnVuY3Rpb24gRHhlKG4pe3JldHVybihuLmRlc2NlbmRhbnRzPzE6MCl8KG4uc3RhdGljPzI6MCl8KG4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk/NDowKX1mdW5jdGlvbiBQeGUobil7cmV0dXJuIE5hKG50KG4pKX1mdW5jdGlvbiBzcShuKXtyZXR1cm4gTmEobWwoT2JqZWN0LmtleXMobikubWFwKGU9Pih7a2V5OmUsdmFsdWU6bnQoQXJyYXkuaXNBcnJheShuW2VdKT9uW2VdWzBdOm5bZV0pLHF1b3RlZDohMH0pKSkpfWZ1bmN0aW9uIEtMKG4pe3JldHVybiBuLmxlbmd0aD4wP05hKGNyKG4ubWFwKHQ9Pm50KHQpKSkpOmRkfWZ1bmN0aW9uIG1ZKG4pe2xldCB0PW51bGwhPT1uLnNlbGVjdG9yP24uc2VsZWN0b3IucmVwbGFjZSgvXG4vZywiIik6bnVsbDtyZXR1cm5bWDEobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbnVsbCE9PXQ/UHhlKHQpOmRkLG51bGwhPT1uLmV4cG9ydEFzP0tMKG4uZXhwb3J0QXMpOmRkLHNxKG4uaW5wdXRzKSxzcShuLm91dHB1dHMpLEtMKG4ucXVlcmllcy5tYXAoZT0+ZS5wcm9wZXJ0eU5hbWUpKV19ZnVuY3Rpb24gYXEobix0KXtyZXR1cm4gcXEobnVsbCxuLHQsImIiKX1mdW5jdGlvbiBGeGUobix0LGUpe3JldHVybiBuLnBhcmFtcyhpPT5lKHQsaSkuY3VyclZhbEV4cHIpfWZ1bmN0aW9uIE54ZShuKXtsZXQgZSx0PW4ubmFtZSxpPXQubWF0Y2goeHhlKTtyZXR1cm4gaT8odD1pWzFdLGU9Sy5hdHRyaWJ1dGUpOm4uaXNBbmltYXRpb24/KHQ9TXEodCksZT1LLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eSk6ZT1LLmhvc3RQcm9wZXJ0eSx7YmluZGluZ05hbWU6dCxpbnN0cnVjdGlvbjplLGlzQXR0cmlidXRlOiEhaX19dmFyIG4sQnhlPS9eKD86XFsoW15cXV0rKVxdKXwoPzpcKChbXlwpXSspXCkpJC8sWkw9Y2xhc3N7fTtmdW5jdGlvbiBscShuKXtyZXR1cm57Li4ubixwcmVkaWNhdGU6Z1kobi5wcmVkaWNhdGUpLHJlYWQ6bi5yZWFkP25ldyBEbihuLnJlYWQpOm51bGwsc3RhdGljOm4uc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5Om4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHl9fWZ1bmN0aW9uIGNxKG4pe3JldHVybntwcm9wZXJ0eU5hbWU6bi5wcm9wZXJ0eU5hbWUsZmlyc3Q6bi5maXJzdD8/ITEscHJlZGljYXRlOmdZKG4ucHJlZGljYXRlKSxkZXNjZW5kYW50czpuLmRlc2NlbmRhbnRzPz8hMSxyZWFkOm4ucmVhZD9uZXcgRG4obi5yZWFkKTpudWxsLHN0YXRpYzpuLnN0YXRpYz8/ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6bi5lbWl0RGlzdGluY3RDaGFuZ2VzT25seT8/ITB9fWZ1bmN0aW9uIGdZKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP246bzMobmV3IERuKG4pLDEpfWZ1bmN0aW9uIHVxKG4pe2xldCB0PWZxKG4uaW5wdXRzfHxbXSksZT1mcShuLm91dHB1dHN8fFtdKSxpPW4ucHJvcE1ldGFkYXRhLHI9e30sbz17fTtmb3IobGV0IHMgaW4gaSlpLmhhc093blByb3BlcnR5KHMpJiZpW3NdLmZvckVhY2goYT0+e0p4ZShhKT9yW3NdPWEuYmluZGluZ1Byb3BlcnR5TmFtZT9bYS5iaW5kaW5nUHJvcGVydHlOYW1lLHNdOnM6JHhlKGEpJiYob1tzXT1hLmJpbmRpbmdQcm9wZXJ0eU5hbWV8fHMpfSk7cmV0dXJuey4uLm4sdHlwZUFyZ3VtZW50Q291bnQ6MCx0eXBlU291cmNlU3BhbjpuLnR5cGVTb3VyY2VTcGFuLHR5cGU6YXMobi50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksZGVwczpudWxsLGhvc3Q6UXhlKG4ucHJvcE1ldGFkYXRhLG4udHlwZVNvdXJjZVNwYW4sbi5ob3N0KSxpbnB1dHM6ey4uLnQsLi4ucn0sb3V0cHV0czp7Li4uZSwuLi5vfSxxdWVyaWVzOm4ucXVlcmllcy5tYXAobHEpLHByb3ZpZGVyczpudWxsIT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsdmlld1F1ZXJpZXM6bi52aWV3UXVlcmllcy5tYXAobHEpLGZ1bGxJbmhlcml0YW5jZTohMX19ZnVuY3Rpb24gX1kobix0KXtyZXR1cm57bmFtZTpuLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksdHlwZVNvdXJjZVNwYW46dCxpbnRlcm5hbFR5cGU6bmV3IERuKG4udHlwZSksc2VsZWN0b3I6bi5zZWxlY3Rvcj8/bnVsbCxpbnB1dHM6bi5pbnB1dHM/P3t9LG91dHB1dHM6bi5vdXRwdXRzPz97fSxob3N0Onp4ZShuLmhvc3QpLHF1ZXJpZXM6KG4ucXVlcmllcz8/W10pLm1hcChjcSksdmlld1F1ZXJpZXM6KG4udmlld1F1ZXJpZXM/P1tdKS5tYXAoY3EpLHByb3ZpZGVyczp2b2lkIDAhPT1uLnByb3ZpZGVycz9uZXcgRG4obi5wcm92aWRlcnMpOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBcz8/bnVsbCx1c2VzSW5oZXJpdGFuY2U6bi51c2VzSW5oZXJpdGFuY2U/PyExLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczpuLnVzZXNPbkNoYW5nZXM/PyExfSxkZXBzOm51bGwsdHlwZUFyZ3VtZW50Q291bnQ6MCxmdWxsSW5oZXJpdGFuY2U6ITEsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX19ZnVuY3Rpb24genhlKG49e30pe3JldHVybnthdHRyaWJ1dGVzOmp4ZShuLmF0dHJpYnV0ZXM/P3t9KSxsaXN0ZW5lcnM6bi5saXN0ZW5lcnM/P3t9LHByb3BlcnRpZXM6bi5wcm9wZXJ0aWVzPz97fSxzcGVjaWFsQXR0cmlidXRlczp7Y2xhc3NBdHRyOm4uY2xhc3NBdHRyaWJ1dGUsc3R5bGVBdHRyOm4uc3R5bGVBdHRyaWJ1dGV9fX1mdW5jdGlvbiBqeGUobil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXRbZV09bmV3IERuKG5bZV0pO3JldHVybiB0fWZ1bmN0aW9uIFd4ZShuKXtyZXR1cm57Li4ubix0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiBITihuLHQ9bnVsbCl7cmV0dXJue2tpbmQ6XzAuRGlyZWN0aXZlLGlzQ29tcG9uZW50OnR8fCJjb21wb25lbnQiPT09bi5raW5kLHNlbGVjdG9yOm4uc2VsZWN0b3IsdHlwZTpuZXcgRG4obi50eXBlKSxpbnB1dHM6bi5pbnB1dHM/P1tdLG91dHB1dHM6bi5vdXRwdXRzPz9bXSxleHBvcnRBczpuLmV4cG9ydEFzPz9udWxsfX1mdW5jdGlvbiBZeGUobil7cmV0dXJue2tpbmQ6XzAuUGlwZSxuYW1lOm4ubmFtZSx0eXBlOm5ldyBEbihuLnR5cGUpfX1mdW5jdGlvbiB2WShuLHQsZSxpLHIpe2xldCBvPXI/RDAuZnJvbUFycmF5KHIpOiRjLHM9bXhlKG4sZSx7cHJlc2VydmVXaGl0ZXNwYWNlczppLGludGVycG9sYXRpb25Db25maWc6b30pO2lmKG51bGwhPT1zLmVycm9ycyl7bGV0IGE9cy5lcnJvcnMubWFwKGw9PmwudG9TdHJpbmcoKSkuam9pbigiLCAiKTt0aHJvdyBuZXcgRXJyb3IoYEVycm9ycyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uIG9mIHRlbXBsYXRlIGZvciAke3R9OiAke2F9YCl9cmV0dXJue3RlbXBsYXRlOnMsaW50ZXJwb2xhdGlvbjpvfX1mdW5jdGlvbiBzMChuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG8zKG5ldyBEbihuW3RdKSwwKX1mdW5jdGlvbiBkcShuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG5ldyBEbihuW3RdKX1mdW5jdGlvbiBwcShuKXtyZXR1cm4gbzMoImZ1bmN0aW9uIj09dHlwZW9mIG4/bmV3IERuKG4pOm5ldyBGYShuPz9udWxsKSwwKX1mdW5jdGlvbiB5WShuKXtsZXQgdD1udWxsIT1uLmF0dHJpYnV0ZSxlPW51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pO3JldHVybiBiWSh0P25ldyBEbihuLmF0dHJpYnV0ZSk6ZSx0LG4uaG9zdCxuLm9wdGlvbmFsLG4uc2VsZixuLnNraXBTZWxmKX1mdW5jdGlvbiBocShuKXtsZXQgdD1uLmF0dHJpYnV0ZT8/ITE7cmV0dXJuIGJZKG51bGw9PT1uLnRva2VuP251bGw6bmV3IERuKG4udG9rZW4pLHQsbi5ob3N0Pz8hMSxuLm9wdGlvbmFsPz8hMSxuLnNlbGY/PyExLG4uc2tpcFNlbGY/PyExKX1mdW5jdGlvbiBiWShuLHQsZSxpLHIsbyl7cmV0dXJue3Rva2VuOm4sYXR0cmlidXRlTmFtZVR5cGU6dD9udCgidW5rbm93biIpOm51bGwsaG9zdDplLG9wdGlvbmFsOmksc2VsZjpyLHNraXBTZWxmOm99fWZ1bmN0aW9uIFF4ZShuLHQsZSl7bGV0IGk9ZnVuY3Rpb24obil7bGV0IHQ9e30sZT17fSxpPXt9LHI9e307Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcz1uW29dLGE9by5tYXRjaChCeGUpO2lmKG51bGw9PT1hKXN3aXRjaChvKXtjYXNlImNsYXNzIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJDbGFzcyBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5jbGFzc0F0dHI9czticmVhaztjYXNlInN0eWxlIjppZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJTdHlsZSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7ci5zdHlsZUF0dHI9czticmVhaztkZWZhdWx0OnRbb109InN0cmluZyI9PXR5cGVvZiBzP250KHMpOnN9ZWxzZSBpZihudWxsIT1hWzFdKXtpZigic3RyaW5nIiE9dHlwZW9mIHMpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eSBiaW5kaW5nIG11c3QgYmUgc3RyaW5nIik7aVthWzFdXT1zfWVsc2UgaWYobnVsbCE9YVsyXSl7aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiRXZlbnQgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO2VbYVsyXV09c319cmV0dXJue2F0dHJpYnV0ZXM6dCxsaXN0ZW5lcnM6ZSxwcm9wZXJ0aWVzOmksc3BlY2lhbEF0dHJpYnV0ZXM6cn19KGV8fHt9KSxyPWZ1bmN0aW9uKG4sdCl7bGV0IGU9cTEoKTtyZXR1cm4gZS5jcmVhdGVEaXJlY3RpdmVIb3N0RXZlbnRBc3RzKG4ubGlzdGVuZXJzLHQpLGUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsdCksZS5lcnJvcnN9KGksdCk7aWYoci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKHIubWFwKG89Pm8ubXNnKS5qb2luKCJcbiIpKTtmb3IobGV0IG8gaW4gbiluLmhhc093blByb3BlcnR5KG8pJiZuW29dLmZvckVhY2gocz0+e0t4ZShzKT9pLnByb3BlcnRpZXNbcy5ob3N0UHJvcGVydHlOYW1lfHxvXT1YX2UoInRoaXMiLG8pOlp4ZShzKSYmKGkubGlzdGVuZXJzW3MuZXZlbnROYW1lfHxvXT1gJHtvfSgkeyhzLmFyZ3N8fFtdKS5qb2luKCIsIil9KWApfSk7cmV0dXJuIGl9ZnVuY3Rpb24gS3hlKG4pe3JldHVybiJIb3N0QmluZGluZyI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIFp4ZShuKXtyZXR1cm4iSG9zdExpc3RlbmVyIj09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gSnhlKG4pe3JldHVybiJJbnB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uICR4ZShuKXtyZXR1cm4iT3V0cHV0Ij09PW4ubmdNZXRhZGF0YU5hbWV9ZnVuY3Rpb24gZnEobil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT57bGV0W2kscl09ZS5zcGxpdCgiOiIsMikubWFwKG89Pm8udHJpbSgpKTtyZXR1cm4gdFtpXT1yfHxpLHR9LHt9KX1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mdWxsPXQ7bGV0IGU9dC5zcGxpdCgiLiIpO3RoaXMubWFqb3I9ZVswXSx0aGlzLm1pbm9yPWVbMV0sdGhpcy5wYXRjaD1lLnNsaWNlKDIpLmpvaW4oIi4iKX19KCIxNC4yLjExIiksbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jbG9zZWRCeVBhcmVudD0hMSx0aGlzLmlzVm9pZD0hMSx0aGlzLmlnbm9yZUZpcnN0TGY9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITAsdGhpcy5wcmV2ZW50TmFtZXNwYWNlSW5oZXJpdGFuY2U9ITF9cmVxdWlyZUV4dHJhUGFyZW50KHQpe3JldHVybiExfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4hMX1nZXRDb250ZW50VHlwZSgpe3JldHVybiBmbC5QQVJTQUJMRV9EQVRBfX0sKChuPXAwKS5uZ3x8KG4ubmc9e30pKS5cdTAyNzVjb21waWxlckZhY2FkZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodD1uZXcgY2xhc3N7ZXZhbHVhdGVTdGF0ZW1lbnRzKHQsZSxpLHIpe2xldCBvPW5ldyBoTChpKSxzPWN4LmNyZWF0ZVJvb3QoKTtyZXR1cm4gZS5sZW5ndGg+MCYmIWVbMF0uaXNFcXVpdmFsZW50KG50KCJ1c2Ugc3RyaWN0IikudG9TdG10KCkpJiYoZT1bbnQoInVzZSBzdHJpY3QiKS50b1N0bXQoKSwuLi5lXSksby52aXNpdEFsbFN0YXRlbWVudHMoZSxzKSxvLmNyZWF0ZVJldHVyblN0bXQocyksdGhpcy5ldmFsdWF0ZUNvZGUodCxzLG8uZ2V0QXJncygpLHIpfWV2YWx1YXRlQ29kZSh0LGUsaSxyKXtsZXQgbz1gInVzZSBzdHJpY3QiOyR7ZS50b1NvdXJjZSgpfVxuLy8jIHNvdXJjZVVSTD0ke3R9YCxzPVtdLGE9W107Zm9yKGxldCBjIGluIGkpYS5wdXNoKGlbY10pLHMucHVzaChjKTtpZihyKXtsZXQgYz13OSguLi5zLmNvbmNhdCgicmV0dXJuIG51bGw7IikpLnRvU3RyaW5nKCksdT1jLnNsaWNlKDAsYy5pbmRleE9mKCJyZXR1cm4gbnVsbDsiKSkuc3BsaXQoIlxuIikubGVuZ3RoLTE7bys9YFxuJHtlLnRvU291cmNlTWFwR2VuZXJhdG9yKHQsdSkudG9Kc0NvbW1lbnQoKX1gfWxldCBsPXc5KC4uLnMuY29uY2F0KG8pKTtyZXR1cm4gdGhpcy5leGVjdXRlRnVuY3Rpb24obCxhKX1leGVjdXRlRnVuY3Rpb24odCxlKXtyZXR1cm4gdCguLi5lKX19KXt0aGlzLmppdEV2YWx1YXRvcj10LHRoaXMuRmFjdG9yeVRhcmdldD1pYyx0aGlzLlJlc291cmNlTG9hZGVyPVpMLHRoaXMuZWxlbWVudFNjaGVtYVJlZ2lzdHJ5PW5ldyBqMX1jb21waWxlUGlwZSh0LGUsaSl7bGV0IG89Uzkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOm51bGwscGlwZU5hbWU6aS5waXBlTmFtZSxwdXJlOmkucHVyZSxpc1N0YW5kYWxvbmU6aS5pc1N0YW5kYWxvbmV9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVQaXBlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPVM5KHtuYW1lOihuPWkpLnR5cGUubmFtZSx0eXBlOmFzKG4udHlwZSksaW50ZXJuYWxUeXBlOm5ldyBEbihuLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAscGlwZU5hbWU6bi5uYW1lLGRlcHM6bnVsbCxwdXJlOm4ucHVyZT8/ITAsaXNTdGFuZGFsb25lOm4uaXNTdGFuZGFsb25lPz8hMX0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZUluamVjdGFibGUodCxlLGkpe2xldHtleHByZXNzaW9uOnIsc3RhdGVtZW50czpvfT1nOSh7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LHByb3ZpZGVkSW46cHEoaS5wcm92aWRlZEluKSx1c2VDbGFzczpzMChpLCJ1c2VDbGFzcyIpLHVzZUZhY3Rvcnk6ZHEoaSwidXNlRmFjdG9yeSIpLHVzZVZhbHVlOnMwKGksInVzZVZhbHVlIiksdXNlRXhpc3Rpbmc6czAoaSwidXNlRXhpc3RpbmciKSxkZXBzOmkuZGVwcz8ubWFwKHlZKX0sITApO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocix0LGUsbyl9Y29tcGlsZUluamVjdGFibGVEZWNsYXJhdGlvbih0LGUsaSl7bGV0e2V4cHJlc3Npb246cixzdGF0ZW1lbnRzOm99PWc5KHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOnBxKGkucHJvdmlkZWRJbiksdXNlQ2xhc3M6czAoaSwidXNlQ2xhc3MiKSx1c2VGYWN0b3J5OmRxKGksInVzZUZhY3RvcnkiKSx1c2VWYWx1ZTpzMChpLCJ1c2VWYWx1ZSIpLHVzZUV4aXN0aW5nOnMwKGksInVzZUV4aXN0aW5nIiksZGVwczppLmRlcHM/Lm1hcChocSl9LCEwKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLG8pfWNvbXBpbGVJbmplY3Rvcih0LGUsaSl7bGV0IG89TTkoe25hbWU6aS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSkscHJvdmlkZXJzOmkucHJvdmlkZXJzJiZpLnByb3ZpZGVycy5sZW5ndGg+MD9uZXcgRG4oaS5wcm92aWRlcnMpOm51bGwsaW1wb3J0czppLmltcG9ydHMubWFwKHM9Pm5ldyBEbihzKSl9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVJbmplY3RvckRlY2xhcmF0aW9uKHQsZSxpKXtsZXQgcj17bmFtZToobj1pKS50eXBlLm5hbWUsdHlwZTphcyhuLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4obi50eXBlKSxwcm92aWRlcnM6dm9pZCAwIT09bi5wcm92aWRlcnMmJm4ucHJvdmlkZXJzLmxlbmd0aD4wP25ldyBEbihuLnByb3ZpZGVycyk6bnVsbCxpbXBvcnRzOnZvaWQgMCE9PW4uaW1wb3J0cz9uLmltcG9ydHMubWFwKHQ9Pm5ldyBEbih0KSk6W119LG89TTkocik7dmFyIG47cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlTmdNb2R1bGUodCxlLGkpe2xldCBvPVl2ZSh7dHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSxhZGphY2VudFR5cGU6bmV3IERuKGkudHlwZSksYm9vdHN0cmFwOmkuYm9vdHN0cmFwLm1hcChhcyksZGVjbGFyYXRpb25zOmkuZGVjbGFyYXRpb25zLm1hcChhcykscHVibGljRGVjbGFyYXRpb25UeXBlczpudWxsLGltcG9ydHM6aS5pbXBvcnRzLm1hcChhcyksaW5jbHVkZUltcG9ydFR5cGVzOiEwLGV4cG9ydHM6aS5leHBvcnRzLm1hcChhcyksc2VsZWN0b3JTY29wZU1vZGU6ZzAuSW5saW5lLGNvbnRhaW5zRm9yd2FyZERlY2xzOiExLHNjaGVtYXM6aS5zY2hlbWFzP2kuc2NoZW1hcy5tYXAoYXMpOm51bGwsaWQ6aS5pZD9uZXcgRG4oaS5pZCk6bnVsbH0pO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZU5nTW9kdWxlRGVjbGFyYXRpb24odCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyB5cDtyZXR1cm4gdC5zZXQoInR5cGUiLG5ldyBEbihuLnR5cGUpKSx2b2lkIDAhPT1uLmJvb3RzdHJhcCYmdC5zZXQoImJvb3RzdHJhcCIsbmV3IERuKG4uYm9vdHN0cmFwKSksdm9pZCAwIT09bi5kZWNsYXJhdGlvbnMmJnQuc2V0KCJkZWNsYXJhdGlvbnMiLG5ldyBEbihuLmRlY2xhcmF0aW9ucykpLHZvaWQgMCE9PW4uaW1wb3J0cyYmdC5zZXQoImltcG9ydHMiLG5ldyBEbihuLmltcG9ydHMpKSx2b2lkIDAhPT1uLmV4cG9ydHMmJnQuc2V0KCJleHBvcnRzIixuZXcgRG4obi5leHBvcnRzKSksdm9pZCAwIT09bi5zY2hlbWFzJiZ0LnNldCgic2NoZW1hcyIsbmV3IERuKG4uc2NoZW1hcykpLHZvaWQgMCE9PW4uaWQmJnQuc2V0KCJpZCIsbmV3IERuKG4uaWQpKSx4bihLLmRlZmluZU5nTW9kdWxlKS5jYWxsRm4oW3QudG9MaXRlcmFsTWFwKCldKX0oaSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLHQsZSxbXSl9Y29tcGlsZURpcmVjdGl2ZSh0LGUsaSl7bGV0IHI9dXEoaSk7cmV0dXJuIHRoaXMuY29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxyKX1jb21waWxlRGlyZWN0aXZlRGVjbGFyYXRpb24odCxlLGkpe2xldCBvPV9ZKGksdGhpcy5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkRpcmVjdGl2ZSIsaS50eXBlLm5hbWUsZSkpO3JldHVybiB0aGlzLmNvbXBpbGVEaXJlY3RpdmVGcm9tTWV0YSh0LGUsbyl9Y29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxpKXtsZXQgcj1uZXcgeDEscz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9cFkobix0LGUpO2hZKGksbik7bGV0IHI9eG4oSy5kZWZpbmVEaXJlY3RpdmUpLmNhbGxGbihbaS50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxvPWZ1bmN0aW9uKG4pe2xldCB0PW1ZKG4pO3JldHVybiB0LnB1c2goZGQpLHQucHVzaChOYShudChuLmlzU3RhbmRhbG9uZSkpKSxOYSh4bihLLkRpcmVjdGl2ZURlY2xhcmF0aW9uLHQpKX0obik7cmV0dXJue2V4cHJlc3Npb246cix0eXBlOm8sc3RhdGVtZW50czpbXX19KGkscixxMSgpKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHMuZXhwcmVzc2lvbix0LGUsci5zdGF0ZW1lbnRzKX1jb21waWxlQ29tcG9uZW50KHQsZSxpKXtsZXR7dGVtcGxhdGU6cixpbnRlcnBvbGF0aW9uOm99PXZZKGkudGVtcGxhdGUsaS5uYW1lLGUsaS5wcmVzZXJ2ZVdoaXRlc3BhY2VzLGkuaW50ZXJwb2xhdGlvbikscz17Li4uaSwuLi51cShpKSxzZWxlY3RvcjppLnNlbGVjdG9yfHx0aGlzLmVsZW1lbnRTY2hlbWFSZWdpc3RyeS5nZXREZWZhdWx0Q29tcG9uZW50RWxlbWVudE5hbWUoKSx0ZW1wbGF0ZTpyLGRlY2xhcmF0aW9uczppLmRlY2xhcmF0aW9ucy5tYXAoV3hlKSxkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZTowLHN0eWxlczpbLi4uaS5zdHlsZXMsLi4uci5zdHlsZXNdLGVuY2Fwc3VsYXRpb246aS5lbmNhcHN1bGF0aW9uLGludGVycG9sYXRpb246byxjaGFuZ2VEZXRlY3Rpb246aS5jaGFuZ2VEZXRlY3Rpb24sYW5pbWF0aW9uczpudWxsIT1pLmFuaW1hdGlvbnM/bmV3IERuKGkuYW5pbWF0aW9ucyk6bnVsbCx2aWV3UHJvdmlkZXJzOm51bGwhPWkudmlld1Byb3ZpZGVycz9uZXcgRG4oaS52aWV3UHJvdmlkZXJzKTpudWxsLHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiIiLGkxOG5Vc2VFeHRlcm5hbElkczohMH07cmV0dXJuIHRoaXMuY29tcGlsZUNvbXBvbmVudEZyb21NZXRhKHQsYG5nOi8vLyR7aS5uYW1lfS5qc2Ascyl9Y29tcGlsZUNvbXBvbmVudERlY2xhcmF0aW9uKHQsZSxpKXtsZXQgbz1mdW5jdGlvbihuLHQsZSl7bGV0e3RlbXBsYXRlOmksaW50ZXJwb2xhdGlvbjpyfT12WShuLnRlbXBsYXRlLG4udHlwZS5uYW1lLGUsbi5wcmVzZXJ2ZVdoaXRlc3BhY2VzPz8hMSxuLmludGVycG9sYXRpb24pLG89W107aWYobi5kZXBlbmRlbmNpZXMpZm9yKGxldCBzIG9mIG4uZGVwZW5kZW5jaWVzKXN3aXRjaChzLmtpbmQpe2Nhc2UiZGlyZWN0aXZlIjpjYXNlImNvbXBvbmVudCI6by5wdXNoKEhOKHMpKTticmVhaztjYXNlInBpcGUiOm8ucHVzaChZeGUocykpfWVsc2Uobi5jb21wb25lbnRzfHxuLmRpcmVjdGl2ZXN8fG4ucGlwZXMpJiYobi5jb21wb25lbnRzJiZvLnB1c2goLi4ubi5jb21wb25lbnRzLm1hcChzPT5ITihzLCEwKSkpLG4uZGlyZWN0aXZlcyYmby5wdXNoKC4uLm4uZGlyZWN0aXZlcy5tYXAocz0+SE4ocykpKSxuLnBpcGVzJiZvLnB1c2goLi4uZnVuY3Rpb24obil7cmV0dXJuIG4/T2JqZWN0LmtleXMobikubWFwKHQ9Pih7a2luZDpfMC5QaXBlLG5hbWU6dCx0eXBlOm5ldyBEbihuW3RdKX0pKTpbXX0obi5waXBlcykpKTtyZXR1cm57Li4uX1kobix0KSx0ZW1wbGF0ZTppLHN0eWxlczpuLnN0eWxlcz8/W10sZGVjbGFyYXRpb25zOm8sdmlld1Byb3ZpZGVyczp2b2lkIDAhPT1uLnZpZXdQcm92aWRlcnM/bmV3IERuKG4udmlld1Byb3ZpZGVycyk6bnVsbCxhbmltYXRpb25zOnZvaWQgMCE9PW4uYW5pbWF0aW9ucz9uZXcgRG4obi5hbmltYXRpb25zKTpudWxsLGNoYW5nZURldGVjdGlvbjpuLmNoYW5nZURldGVjdGlvbj8/cWIuRGVmYXVsdCxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbj8/b2QuRW11bGF0ZWQsaW50ZXJwb2xhdGlvbjpyLGRlY2xhcmF0aW9uTGlzdEVtaXRNb2RlOjIscmVsYXRpdmVDb250ZXh0RmlsZVBhdGg6IiIsaTE4blVzZUV4dGVybmFsSWRzOiEwfX0oaSx0aGlzLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiQ29tcG9uZW50IixpLnR5cGUubmFtZSxlKSxlKTtyZXR1cm4gdGhpcy5jb21waWxlQ29tcG9uZW50RnJvbU1ldGEodCxlLG8pfWNvbXBpbGVDb21wb25lbnRGcm9tTWV0YSh0LGUsaSl7bGV0IHI9bmV3IHgxLHM9ZnVuY3Rpb24obix0LGUpe2xldCBpPXBZKG4sdCxlKTtoWShpLG4pO2xldCByPW4uc2VsZWN0b3ImJnVkLnBhcnNlKG4uc2VsZWN0b3IpLG89ciYmclswXTtpZihvKXtsZXQgXz1vLmdldEF0dHJzKCk7Xy5sZW5ndGgmJmkuc2V0KCJhdHRycyIsdC5nZXRDb25zdExpdGVyYWwoY3IoXy5tYXAoeT0+bnQobnVsbCE9eT95OnZvaWQgMCkpKSwhMCkpfWxldCBzPW4ubmFtZSxhPXM/YCR7c31fVGVtcGxhdGVgOm51bGwsbD1uLmNoYW5nZURldGVjdGlvbixjPW4udGVtcGxhdGUsdT1uZXcgT3godCxCMC5jcmVhdGVSb290U2NvcGUoKSwwLHMsbnVsbCxudWxsLGEsSy5uYW1lc3BhY2VIVE1MLG4ucmVsYXRpdmVDb250ZXh0RmlsZVBhdGgsbi5pMThuVXNlRXh0ZXJuYWxJZHMpLGQ9dS5idWlsZFRlbXBsYXRlRnVuY3Rpb24oYy5ub2RlcyxbXSkscD11LmdldE5nQ29udGVudFNlbGVjdG9ycygpO3AmJmkuc2V0KCJuZ0NvbnRlbnRTZWxlY3RvcnMiLHApLGkuc2V0KCJkZWNscyIsbnQodS5nZXRDb25zdENvdW50KCkpKSxpLnNldCgidmFycyIsbnQodS5nZXRWYXJDb3VudCgpKSk7bGV0e2NvbnN0RXhwcmVzc2lvbnM6aCxwcmVwYXJlU3RhdGVtZW50czpmfT11LmdldENvbnN0cygpO2lmKGgubGVuZ3RoPjApe2xldCBfPWNyKGgpO2YubGVuZ3RoPjAmJihfPU9zKFtdLFsuLi5mLG5ldyB1byhfKV0pKSxpLnNldCgiY29uc3RzIixfKX1pZihpLnNldCgidGVtcGxhdGUiLGQpLG4uZGVjbGFyYXRpb25zLmxlbmd0aD4wJiZpLnNldCgiZGVwZW5kZW5jaWVzIixmdW5jdGlvbihuLHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIG47Y2FzZSAxOnJldHVybiBPcyhbXSxbbmV3IHVvKG4pXSk7Y2FzZSAyOmxldCBlPW4ucHJvcCgibWFwIikuY2FsbEZuKFt4bihLLnJlc29sdmVGb3J3YXJkUmVmKV0pO3JldHVybiBPcyhbXSxbbmV3IHVvKGUpXSl9fShjcihuLmRlY2xhcmF0aW9ucy5tYXAoXz0+Xy50eXBlKSksbi5kZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSkpLG51bGw9PT1uLmVuY2Fwc3VsYXRpb24mJihuLmVuY2Fwc3VsYXRpb249b2QuRW11bGF0ZWQpLG4uc3R5bGVzJiZuLnN0eWxlcy5sZW5ndGgpe2xldCB5PShuLmVuY2Fwc3VsYXRpb249PW9kLkVtdWxhdGVkP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmljdFN0eWxpbmc9ITB9c2hpbUNzc1RleHQodCxlLGk9IiIpe2xldCByPXQubWF0Y2goZ3llKXx8W107cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShmeWUsIiIpfSh0KSx0PXRoaXMuX2luc2VydERpcmVjdGl2ZXModCksW3RoaXMuX3Njb3BlQ3NzVGV4dCh0LGUsaSksLi4ucl0uam9pbigiXG4iKX1faW5zZXJ0RGlyZWN0aXZlcyh0KXtyZXR1cm4gdD10aGlzLl9pbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQodCksdGhpcy5faW5zZXJ0UG9seWZpbGxSdWxlc0luQ3NzVGV4dCh0KX1faW5zZXJ0UG9seWZpbGxEaXJlY3RpdmVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uob3llLGZ1bmN0aW9uKC4uLmUpe3JldHVybiBlWzJdKyJ7In0pfV9pbnNlcnRQb2x5ZmlsbFJ1bGVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2Uoc3llLCguLi5lKT0+e2xldCBpPWVbMF0ucmVwbGFjZShlWzFdLCIiKS5yZXBsYWNlKGVbMl0sIiIpO3JldHVybiBlWzRdK2l9KX1fc2NvcGVDc3NUZXh0KHQsZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpO3JldHVybiB0PXRoaXMuX2luc2VydFBvbHlmaWxsSG9zdEluQ3NzVGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRDb2xvbkhvc3QodCksdD10aGlzLl9jb252ZXJ0Q29sb25Ib3N0Q29udGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRTaGFkb3dET01TZWxlY3RvcnModCksZSYmKHQ9dGhpcy5fc2NvcGVTZWxlY3RvcnModCxlLGkpKSwodD10KyJcbiIrcikudHJpbSgpfV9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpe2xldCBpLGU9IiI7Zm9yKFQ5Lmxhc3RJbmRleD0wO251bGwhPT0oaT1UOS5leGVjKHQpKTspZSs9aVswXS5yZXBsYWNlKGlbMl0sIiIpLnJlcGxhY2UoaVsxXSxpWzRdKSsiXG5cbiI7cmV0dXJuIGV9X2NvbnZlcnRDb2xvbkhvc3QodCl7cmV0dXJuIHQucmVwbGFjZShheWUsKGUsaSxyKT0+e2lmKGkpe2xldCBvPVtdLHM9aS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhIG9mIHMpe2lmKCFhKWJyZWFrO2xldCBsPXNmK2EucmVwbGFjZShrMSwiIikrcjtvLnB1c2gobCl9cmV0dXJuIG8uam9pbigiLCIpfXJldHVybiBzZityfSl9X2NvbnZlcnRDb2xvbkhvc3RDb250ZXh0KHQpe3JldHVybiB0LnJlcGxhY2UobHllLGU9PntsZXQgcixpPVtbXV07Zm9yKDtyPWN5ZS5leGVjKGUpOyl7bGV0IG89KHJbMV0/PyIiKS50cmltKCkuc3BsaXQoIiwiKS5tYXAoYT0+YS50cmltKCkpLmZpbHRlcihhPT4iIiE9PWEpLHM9aS5sZW5ndGg7TXllKGksby5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWZvcihsZXQgbD0wO2w8cztsKyspaVtsK2Eqc10ucHVzaChvW2FdKTtlPXJbMl19cmV0dXJuIGkubWFwKG89PmZ1bmN0aW9uKG4sdCl7bGV0IGU9c2Y7ZDAubGFzdEluZGV4PTA7bGV0IGk9ZDAudGVzdCh0KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuIGUrdDtsZXQgcj1bbi5wb3AoKXx8IiJdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBvPXIubGVuZ3RoLHM9bi5wb3AoKTtmb3IobGV0IGE9MDthPG87YSsrKXtsZXQgbD1yW2FdO3JbMipvK2FdPWwrIiAiK3MscltvK2FdPXMrIiAiK2wsclthXT1zK2x9fXJldHVybiByLm1hcChvPT5pP2Ake299JHt0fWA6YCR7b30ke2V9JHt0fSwgJHtvfSAke2V9JHt0fWApLmpvaW4oIiwiKX0obyxlKSkuam9pbigiLCAiKX0pfV9jb252ZXJ0U2hhZG93RE9NU2VsZWN0b3JzKHQpe3JldHVybiB1eWUucmVkdWNlKChlLGkpPT5lLnJlcGxhY2UoaSwiICIpLHQpfV9zY29wZVNlbGVjdG9ycyh0LGUsaSl7cmV0dXJuIEk5KHQscj0+e2xldCBvPXIuc2VsZWN0b3Iscz1yLmNvbnRlbnQ7cmV0dXJuIkAiIT09ci5zZWxlY3RvclswXT9vPXRoaXMuX3Njb3BlU2VsZWN0b3Ioci5zZWxlY3RvcixlLGksdGhpcy5zdHJpY3RTdHlsaW5nKTpyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBtZWRpYSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBzdXBwb3J0cyIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBkb2N1bWVudCIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBsYXllciIpP3M9dGhpcy5fc2NvcGVTZWxlY3RvcnMoci5jb250ZW50LGUsaSk6KHIuc2VsZWN0b3Iuc3RhcnRzV2l0aCgiQGZvbnQtZmFjZSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBwYWdlIikpJiYocz10aGlzLl9zdHJpcFNjb3BpbmdTZWxlY3RvcnMoci5jb250ZW50KSksbmV3IER4KG8scyl9KX1fc3RyaXBTY29waW5nU2VsZWN0b3JzKHQpe3JldHVybiBJOSh0LGU9PntsZXQgaT1lLnNlbGVjdG9yLnJlcGxhY2UoQTksIiAiKS5yZXBsYWNlKEQ5LCIgIik7cmV0dXJuIG5ldyBEeChpLGUuY29udGVudCl9KX1fc2NvcGVTZWxlY3Rvcih0LGUsaSxyKXtyZXR1cm4gdC5zcGxpdCgiLCIpLm1hcChvPT5vLnRyaW0oKS5zcGxpdChBOSkpLm1hcChvPT57bGV0W3MsLi4uYV09bztyZXR1cm5bKGM9PnRoaXMuX3NlbGVjdG9yTmVlZHNTY29waW5nKGMsZSk/cj90aGlzLl9hcHBseVN0cmljdFNlbGVjdG9yU2NvcGUoYyxlLGkpOnRoaXMuX2FwcGx5U2VsZWN0b3JTY29wZShjLGUsaSk6YykocyksLi4uYV0uam9pbigiICIpfSkuam9pbigiLCAiKX1fc2VsZWN0b3JOZWVkc1Njb3BpbmcodCxlKXtyZXR1cm4hdGhpcy5fbWFrZVNjb3BlTWF0Y2hlcihlKS50ZXN0KHQpfV9tYWtlU2NvcGVNYXRjaGVyKHQpe3JldHVybiB0PXQucmVwbGFjZSgvXFsvZywiXFxbIikucmVwbGFjZSgvXF0vZywiXFxdIiksbmV3IFJlZ0V4cCgiXigiK3QrIikoWz5cXHN+K1suLHs6XVtcXHNcXFNdKik/JCIsIm0iKX1fYXBwbHlTZWxlY3RvclNjb3BlKHQsZSxpKXtyZXR1cm4gdGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKX1fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKXtpZihkMC5sYXN0SW5kZXg9MCxkMC50ZXN0KHQpKXtsZXQgcj10aGlzLnN0cmljdFN0eWxpbmc/YFske2l9XWA6ZTtyZXR1cm4gdC5yZXBsYWNlKEQ5LChvLHMpPT5zLnJlcGxhY2UoLyhbXjpdKikoOiopKC4qKS8sKGEsbCxjLHUpPT5sK3IrYyt1KSkucmVwbGFjZShkMCxyKyIgIil9cmV0dXJuIGUrIiAiK3R9X2FwcGx5U3RyaWN0U2VsZWN0b3JTY29wZSh0LGUsaSl7bGV0IHUsbz0iWyIrKGU9ZS5yZXBsYWNlKC9cW2lzPShbXlxdXSopXF0vZywobSwuLi5DKT0+Q1swXSkpKyJdIixzPW09PntsZXQgQz1tLnRyaW0oKTtpZighQylyZXR1cm4iIjtpZihtLmluZGV4T2Yoc2YpPi0xKUM9dGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKG0sZSxpKTtlbHNle2xldCBfPW0ucmVwbGFjZShkMCwiIik7aWYoXy5sZW5ndGg+MCl7bGV0IHk9Xy5tYXRjaCgvKFteOl0qKSg6KikoLiopLyk7eSYmKEM9eVsxXStvK3lbMl0reVszXSl9fXJldHVybiBDfSxhPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYWNlaG9sZGVycz1bXSx0aGlzLmluZGV4PTAsdD10aGlzLl9lc2NhcGVSZWdleE1hdGNoZXModCwvKFxbW15cXV0qXF0pL2cpLHQ9dGhpcy5fZXNjYXBlUmVnZXhNYXRjaGVzKHQsLyhcXC4pL2cpLHRoaXMuX2NvbnRlbnQ9dC5yZXBsYWNlKC8oOm50aC1bLVx3XSspKFwoW14pXStcKSkvZywoZSxpLHIpPT57bGV0IG89YF9fcGgtJHt0aGlzLmluZGV4fV9fYDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMucHVzaChyKSx0aGlzLmluZGV4KyssaStvfSl9cmVzdG9yZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9fX3BoLShcZCspX18vZywoZSxpKT0+dGhpcy5wbGFjZWhvbGRlcnNbK2ldKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9X2VzY2FwZVJlZ2V4TWF0Y2hlcyh0LGUpe3JldHVybiB0LnJlcGxhY2UoZSwoaSxyKT0+e2xldCBvPWBfX3BoLSR7dGhpcy5pbmRleH1fX2A7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLnB1c2gociksdGhpcy5pbmRleCsrLG99KX19KHQpLGw9IiIsYz0wLGQ9LyggfD58XCt8fig/IT0pKVxzKi9nLGg9ISgodD1hLmNvbnRlbnQoKSkuaW5kZXhPZihzZik+LTEpO2Zvcig7bnVsbCE9PSh1PWQuZXhlYyh0KSk7KXtsZXQgbT11WzFdLEM9dC5zbGljZShjLHUuaW5kZXgpLnRyaW0oKTtoPWh8fEMuaW5kZXhPZihzZik+LTEsbCs9YCR7aD9zKEMpOkN9ICR7bX0gYCxjPWQubGFzdEluZGV4fWxldCBmPXQuc3Vic3RyaW5nKGMpO3JldHVybiBoPWh8fGYuaW5kZXhPZihzZik+LTEsbCs9aD9zKGYpOmYsYS5yZXN0b3JlKGwpfV9pbnNlcnRQb2x5ZmlsbEhvc3RJbkNzc1RleHQodCl7cmV0dXJuIHQucmVwbGFjZShoeWUsZzMpLnJlcGxhY2UocHllLGsxKX19O3JldHVybiBuLm1hcChyPT5pLnNoaW1Dc3NUZXh0KHIsIl9uZ2NvbnRlbnQtJUNPTVAlIiwiX25naG9zdC0lQ09NUCUiKSl9KG4uc3R5bGVzKTpuLnN0eWxlcykucmVkdWNlKChJLEEpPT4oQS50cmltKCkubGVuZ3RoPjAmJkkucHVzaCh0LmdldENvbnN0TGl0ZXJhbChudChBKSkpLEkpLFtdKTt5Lmxlbmd0aD4wJiZpLnNldCgic3R5bGVzIixjcih5KSl9ZWxzZSBuLmVuY2Fwc3VsYXRpb249PT1vZC5FbXVsYXRlZCYmKG4uZW5jYXBzdWxhdGlvbj1vZC5Ob25lKTtuLmVuY2Fwc3VsYXRpb24hPT1vZC5FbXVsYXRlZCYmaS5zZXQoImVuY2Fwc3VsYXRpb24iLG50KG4uZW5jYXBzdWxhdGlvbikpLG51bGwhPT1uLmFuaW1hdGlvbnMmJmkuc2V0KCJkYXRhIixtbChbe2tleToiYW5pbWF0aW9uIix2YWx1ZTpuLmFuaW1hdGlvbnMscXVvdGVkOiExfV0pKSxudWxsIT1sJiZsIT09cWIuRGVmYXVsdCYmaS5zZXQoImNoYW5nZURldGVjdGlvbiIsbnQobCkpO2xldCBtPXhuKEsuZGVmaW5lQ29tcG9uZW50KS5jYWxsRm4oW2kudG9MaXRlcmFsTWFwKCldLHZvaWQgMCwhMCksQz1mdW5jdGlvbihuKXtsZXQgdD1tWShuKTtyZXR1cm4gdC5wdXNoKEtMKG4udGVtcGxhdGUubmdDb250ZW50U2VsZWN0b3JzKSksdC5wdXNoKE5hKG50KG4uaXNTdGFuZGFsb25lKSkpLE5hKHhuKEsuQ29tcG9uZW50RGVjbGFyYXRpb24sdCkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjptLHR5cGU6QyxzdGF0ZW1lbnRzOltdfX0oaSxyLHExKGkuaW50ZXJwb2xhdGlvbikpO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24ocy5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5KHQsZSxpKXtsZXQgcj1hZih7bmFtZTppLm5hbWUsdHlwZTphcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgRG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDppLnR5cGVBcmd1bWVudENvdW50LGRlcHM6KG49aS5kZXBzLG51bGw9PW4/bnVsbDpuLm1hcCh5WSkpLHRhcmdldDppLnRhcmdldH0pO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oci5leHByZXNzaW9uLHQsZSxyLnN0YXRlbWVudHMpfWNvbXBpbGVGYWN0b3J5RGVjbGFyYXRpb24odCxlLGkpe2xldCByPWFmKHtuYW1lOmkudHlwZS5uYW1lLHR5cGU6YXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IERuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOkFycmF5LmlzQXJyYXkoaS5kZXBzKT9pLmRlcHMubWFwKGhxKTppLmRlcHMsdGFyZ2V0OmkudGFyZ2V0fSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y3JlYXRlUGFyc2VTb3VyY2VTcGFuKHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCByPW5ldyBJMSgiIixgaW4gJHtufSAke3R9IGluICR7ZX1gKTtyZXR1cm4gbmV3IFRvKG5ldyB3ZihyLC0xLC0xLC0xKSxuZXcgd2YociwtMSwtMSwtMSkpfSh0LGUsaSl9aml0RXhwcmVzc2lvbih0LGUsaSxyKXtsZXQgbz1bLi4ucixuZXcgYXUoIiRkZWYiLHQsdm9pZCAwLGthLkV4cG9ydGVkKV07cmV0dXJuIHRoaXMuaml0RXZhbHVhdG9yLmV2YWx1YXRlU3RhdGVtZW50cyhpLG8sbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY29udGV4dD10fXJlc29sdmVFeHRlcm5hbFJlZmVyZW5jZSh0KXtpZigiQGFuZ3VsYXIvY29yZSIhPT10Lm1vZHVsZU5hbWUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBleHRlcm5hbCByZWZlcmVuY2UgdG8gJHt0Lm1vZHVsZU5hbWV9LCBvbmx5IHJlZmVyZW5jZXMgdG8gQGFuZ3VsYXIvY29yZSBhcmUgc3VwcG9ydGVkLmApO2lmKCF0aGlzLmNvbnRleHQuaGFzT3duUHJvcGVydHkodC5uYW1lKSl0aHJvdyBuZXcgRXJyb3IoYE5vIHZhbHVlIHByb3ZpZGVkIGZvciBAYW5ndWxhci9jb3JlIHN5bWJvbCAnJHt0Lm5hbWV9Jy5gKTtyZXR1cm4gdGhpcy5jb250ZXh0W3QubmFtZV19fShlKSwhMCkuJGRlZn19O3ZhciBaMT1mdW5jdGlvbihuLC4uLnQpe2lmKFoxLnRyYW5zbGF0ZSl7bGV0IGk9WjEudHJhbnNsYXRlKG4sdCk7bj1pWzBdLHQ9aVsxXX1sZXQgZT14WShuWzBdLG4ucmF3WzBdKTtmb3IobGV0IGk9MTtpPG4ubGVuZ3RoO2krKyllKz10W2ktMV0reFkobltpXSxuLnJhd1tpXSk7cmV0dXJuIGV9O2Z1bmN0aW9uIHhZKG4sdCl7cmV0dXJuIjoiPT09dC5jaGFyQXQoMCk/bi5zdWJzdHJpbmcoZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MSxpPTE7ZTxuLmxlbmd0aDtlKyssaSsrKWlmKCJcXCI9PT10W2ldKWkrKztlbHNlIGlmKCI6Ij09PW5bZV0pcmV0dXJuIGU7dGhyb3cgbmV3IEVycm9yKGBVbnRlcm1pbmF0ZWQgJGxvY2FsaXplIG1ldGFkYXRhIGJsb2NrIGluICIke3R9Ii5gKX0obix0KSsxKTpufSgoKT0+dHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzfHx0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93fHx0eXBlb2Ygc2VsZjwidSImJnR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmc2VsZikoKS4kbG9jYWxpemU9WjE7dmFyIHczPW51bGw7ZnVuY3Rpb24gZ2woKXtyZXR1cm4gdzN9dmFyIHNUPWNsYXNze30sQnQ9bmV3IHNlKCJEb2N1bWVudFRva2VuIiksUlk9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFIoT1kpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtuZXcgc2UoIkxvY2F0aW9uIEluaXRpYWxpemVkIik7dmFyIE9ZPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBSWXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX2RvYz1lLHRoaXMuX2luaXQoKX1faW5pdCgpe3RoaXMubG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJuIGdsKCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKGUpe2xldCBpPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGUpfW9uSGFzaENoYW5nZShlKXtsZXQgaT1nbCgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuX2RvYywid2luZG93Iik7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSwhMSksKCk9PmkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsZSl9Z2V0IGhyZWYoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhvc3RuYW1lfWdldCBwb3J0KCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uc2VhcmNofWdldCBoYXNoKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoZSl7dGhpcy5sb2NhdGlvbi5wYXRobmFtZT1lfXB1c2hTdGF0ZShlLGkscil7d1koKT90aGlzLl9oaXN0b3J5LnB1c2hTdGF0ZShlLGkscik6dGhpcy5sb2NhdGlvbi5oYXNoPXJ9cmVwbGFjZVN0YXRlKGUsaSxyKXt3WSgpP3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGUsaSxyKTp0aGlzLmxvY2F0aW9uLmhhc2g9cn1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2hpc3RvcnkuZ28oZSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgT1koUihCdCkpfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKTtmdW5jdGlvbiB3WSgpe3JldHVybiEhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlfWZ1bmN0aW9uIGtZKG4sdCl7aWYoMD09bi5sZW5ndGgpcmV0dXJuIHQ7aWYoMD09dC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9MDtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpJiZlKyssdC5zdGFydHNXaXRoKCIvIikmJmUrKywyPT1lP24rdC5zdWJzdHJpbmcoMSk6MT09ZT9uK3Q6bisiLyIrdH1mdW5jdGlvbiBNWShuKXtsZXQgdD1uLm1hdGNoKC8jfFw/fCQvKSxlPXQmJnQuaW5kZXh8fG4ubGVuZ3RoO3JldHVybiBuLnNsaWNlKDAsZS0oIi8iPT09bltlLTFdPzE6MCkpK24uc2xpY2UoZSl9ZnVuY3Rpb24gSWYobil7cmV0dXJuIG4mJiI/IiE9PW5bMF0/Ij8iK246bn12YXIgRDM9KCgpPT57Y2xhc3MgbntoaXN0b3J5R28oZSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIFNvKGNDZSl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbENlPW5ldyBzZSgiYXBwQmFzZUhyZWYiKSxjQ2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEQze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWUsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9aT8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/U28oQnQpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShlKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShlKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShlKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBrWSh0aGlzLl9iYXNlSHJlZixlKX1wYXRoKGU9ITEpe2xldCBpPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrSWYodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLHI9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiByJiZlP2Ake2l9JHtyfWA6aX1wdXNoU3RhdGUoZSxpLHIsbyl7bGV0IHM9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwocitJZihvKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoZSxpLHMpfXJlcGxhY2VTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK0lmKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShlLGkscyl9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSWSksUihsQ2UsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEh4PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fc3ViamVjdD1uZXcgRyx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1lO2xldCBpPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0QmFzZUhyZWYoKTt0aGlzLl9iYXNlSHJlZj1NWShTWShpKSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKHI9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpyLnN0YXRlLHR5cGU6ci50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChlPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGUpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0aEVxdWFsVG8oZSxpPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGUrSWYoaSkpfW5vcm1hbGl6ZShlKXtyZXR1cm4gbi5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24obix0KXtyZXR1cm4gbiYmdC5zdGFydHNXaXRoKG4pP3Quc3Vic3RyaW5nKG4ubGVuZ3RoKTp0fSh0aGlzLl9iYXNlSHJlZixTWShlKSkpfXByZXBhcmVFeHRlcm5hbFVybChlKXtyZXR1cm4gZSYmIi8iIT09ZVswXSYmKGU9Ii8iK2UpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGUpfWdvKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9cmVwbGFjZVN0YXRlKGUsaT0iIixyPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKHIsIiIsZSxpKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoZStJZihpKSkscil9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGUpfW9uVXJsQ2hhbmdlKGUpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChlKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb258fCh0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5zdWJzY3JpYmUoaT0+e3RoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhpLnVybCxpLnN0YXRlKX0pKSwoKT0+e2xldCBpPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGUpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoaSwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZT0iIixpKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChyPT5yKGUsaSkpfXN1YnNjcmliZShlLGkscil7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmUsZXJyb3I6aSxjb21wbGV0ZTpyfSl9fXJldHVybiBuLm5vcm1hbGl6ZVF1ZXJ5UGFyYW1zPUlmLG4uam9pbldpdGhTbGFzaD1rWSxuLnN0cmlwVHJhaWxpbmdTbGFzaD1NWSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoRDMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEh4KFIoRDMpKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBTWShuKXtyZXR1cm4gbi5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIHJUPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EZWNpbWFsPTBdPSJEZWNpbWFsIixuW24uUGVyY2VudD0xXT0iUGVyY2VudCIsbltuLkN1cnJlbmN5PTJdPSJDdXJyZW5jeSIsbltuLlNjaWVudGlmaWM9M109IlNjaWVudGlmaWMifShyVHx8KHJUPXt9KSksclQpKSgpLEpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5Gb3JtYXQ9MF09IkZvcm1hdCIsbltuLlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUifShKb3x8KEpvPXt9KSksSm8pKSgpLCRpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OYXJyb3c9MF09Ik5hcnJvdyIsbltuLkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsbltuLldpZGU9Ml09IldpZGUiLG5bbi5TaG9ydD0zXT0iU2hvcnQifSgkaXx8KCRpPXt9KSksJGkpKSgpLGtzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5NZWRpdW09MV09Ik1lZGl1bSIsbltuLkxvbmc9Ml09IkxvbmciLG5bbi5GdWxsPTNdPSJGdWxsIn0oa3N8fChrcz17fSkpLGtzKSkoKSxscz0oKCk9PihmdW5jdGlvbihuKXtuW24uRGVjaW1hbD0wXT0iRGVjaW1hbCIsbltuLkdyb3VwPTFdPSJHcm91cCIsbltuLkxpc3Q9Ml09Ikxpc3QiLG5bbi5QZXJjZW50U2lnbj0zXT0iUGVyY2VudFNpZ24iLG5bbi5QbHVzU2lnbj00XT0iUGx1c1NpZ24iLG5bbi5NaW51c1NpZ249NV09Ik1pbnVzU2lnbiIsbltuLkV4cG9uZW50aWFsPTZdPSJFeHBvbmVudGlhbCIsbltuLlN1cGVyc2NyaXB0aW5nRXhwb25lbnQ9N109IlN1cGVyc2NyaXB0aW5nRXhwb25lbnQiLG5bbi5QZXJNaWxsZT04XT0iUGVyTWlsbGUiLG5bbi5JbmZpbml0eT05XT0iSW5maW5pdHkiLG5bbi5OYU49MTBdPSJOYU4iLG5bbi5UaW1lU2VwYXJhdG9yPTExXT0iVGltZVNlcGFyYXRvciIsbltuLkN1cnJlbmN5RGVjaW1hbD0xMl09IkN1cnJlbmN5RGVjaW1hbCIsbltuLkN1cnJlbmN5R3JvdXA9MTNdPSJDdXJyZW5jeUdyb3VwIn0obHN8fChscz17fSkpLGxzKSkoKTtmdW5jdGlvbiBKMShuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlRm9ybWF0XSx0KX1mdW5jdGlvbiAkMShuLHQpe3JldHVybiBfbCh0YShuKVtici5UaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBlVChuLHQpe3JldHVybiBfbCh0YShuKVtici5EYXRlVGltZUZvcm1hdF0sdCl9ZnVuY3Rpb24gaGQobix0KXtsZXQgZT10YShuKSxpPWVbYnIuTnVtYmVyU3ltYm9sc11bdF07aWYodHlwZW9mIGk+InUiKXtpZih0PT09bHMuQ3VycmVuY3lEZWNpbWFsKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkRlY2ltYWxdO2lmKHQ9PT1scy5DdXJyZW5jeUdyb3VwKXJldHVybiBlW2JyLk51bWJlclN5bWJvbHNdW2xzLkdyb3VwXX1yZXR1cm4gaX1mdW5jdGlvbiBGWShuKXtpZighbltici5FeHRyYURhdGFdKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBleHRyYSBsb2NhbGUgZGF0YSBmb3IgdGhlIGxvY2FsZSAiJHtuW2JyLkxvY2FsZUlkXX0iLiBVc2UgInJlZ2lzdGVyTG9jYWxlRGF0YSIgdG8gbG9hZCBuZXcgZGF0YS4gU2VlIHRoZSAiSTE4biBndWlkZSIgb24gYW5ndWxhci5pbyB0byBrbm93IG1vcmUuYCl9ZnVuY3Rpb24gX2wobix0KXtmb3IobGV0IGU9dDtlPi0xO2UtLSlpZih0eXBlb2YgbltlXTwidSIpcmV0dXJuIG5bZV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIHYzKG4pe2xldFt0LGVdPW4uc3BsaXQoIjoiKTtyZXR1cm57aG91cnM6K3QsbWludXRlczorZX19dmFyIGJDZT0vXihcZHs0LH0pLT8oXGRcZCktPyhcZFxkKSg/OlQoXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86XC4oXGQrKSk/KT8pPyhafChbKy1dKShcZFxkKTo/KFxkXGQpKT8pPyQvLEJ4PXt9LHhDZT0vKCg/OlteQkVHSExNT1NXWVphYmNkaG1zd3l6J10rKXwoPzonKD86W14nXXwnJykqJyl8KD86R3sxLDV9fHl7MSw0fXxZezEsNH18TXsxLDV9fEx7MSw1fXx3ezEsMn18V3sxfXxkezEsMn18RXsxLDZ9fGN7MSw2fXxhezEsNX18YnsxLDV9fEJ7MSw1fXxoezEsMn18SHsxLDJ9fG17MSwyfXxzezEsMn18U3sxLDN9fHp7MSw0fXxaezEsNX18T3sxLDR9KSkoW1xzXFNdKikvLHBjPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TaG9ydD0wXT0iU2hvcnQiLG5bbi5TaG9ydEdNVD0xXT0iU2hvcnRHTVQiLG5bbi5Mb25nPTJdPSJMb25nIixuW24uRXh0ZW5kZWQ9M109IkV4dGVuZGVkIn0ocGN8fChwYz17fSkpLHBjKSkoKSxGaT0oKCk9PihmdW5jdGlvbihuKXtuW24uRnVsbFllYXI9MF09IkZ1bGxZZWFyIixuW24uTW9udGg9MV09Ik1vbnRoIixuW24uRGF0ZT0yXT0iRGF0ZSIsbltuLkhvdXJzPTNdPSJIb3VycyIsbltuLk1pbnV0ZXM9NF09Ik1pbnV0ZXMiLG5bbi5TZWNvbmRzPTVdPSJTZWNvbmRzIixuW24uRnJhY3Rpb25hbFNlY29uZHM9Nl09IkZyYWN0aW9uYWxTZWNvbmRzIixuW24uRGF5PTddPSJEYXkifShGaXx8KEZpPXt9KSksRmkpKSgpLGtpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EYXlQZXJpb2RzPTBdPSJEYXlQZXJpb2RzIixuW24uRGF5cz0xXT0iRGF5cyIsbltuLk1vbnRocz0yXT0iTW9udGhzIixuW24uRXJhcz0zXT0iRXJhcyJ9KGtpfHwoa2k9e30pKSxraSkpKCk7ZnVuY3Rpb24gQ0NlKG4sdCxlLGkpe2xldCByPWZ1bmN0aW9uKG4pe2lmKEVZKG4pKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbiYmIWlzTmFOKG4pKXJldHVybiBuZXcgRGF0ZShuKTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2lmKG49bi50cmltKCksL14oXGR7NH0oLVxkezEsMn0oLVxkezEsMn0pPyk/KSQvLnRlc3Qobikpe2xldFtyLG89MSxzPTFdPW4uc3BsaXQoIi0iKS5tYXAoYT0+K2EpO3JldHVybiBhVChyLG8tMSxzKX1sZXQgaSxlPXBhcnNlRmxvYXQobik7aWYoIWlzTmFOKG4tZSkpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKGk9bi5tYXRjaChiQ2UpKXJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1uZXcgRGF0ZSgwKSxlPTAsaT0wLHI9bls4XT90LnNldFVUQ0Z1bGxZZWFyOnQuc2V0RnVsbFllYXIsbz1uWzhdP3Quc2V0VVRDSG91cnM6dC5zZXRIb3VycztuWzldJiYoZT1OdW1iZXIobls5XStuWzEwXSksaT1OdW1iZXIobls5XStuWzExXSkpLHIuY2FsbCh0LE51bWJlcihuWzFdKSxOdW1iZXIoblsyXSktMSxOdW1iZXIoblszXSkpO2xldCBzPU51bWJlcihuWzRdfHwwKS1lLGE9TnVtYmVyKG5bNV18fDApLWksbD1OdW1iZXIobls2XXx8MCksYz1NYXRoLmZsb29yKDFlMypwYXJzZUZsb2F0KCIwLiIrKG5bN118fDApKSk7cmV0dXJuIG8uY2FsbCh0LHMsYSxsLGMpLHR9KGkpfWxldCB0PW5ldyBEYXRlKG4pO2lmKCFFWSh0KSl0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb252ZXJ0ICIke259IiBpbnRvIGEgZGF0ZWApO3JldHVybiB0fShuKTt0PXBkKGUsdCl8fHQ7bGV0IGEscz1bXTtmb3IoO3Q7KXtpZihhPXhDZS5leGVjKHQpLCFhKXtzLnB1c2godCk7YnJlYWt9e3M9cy5jb25jYXQoYS5zbGljZSgxKSk7bGV0IHU9cy5wb3AoKTtpZighdSlicmVhazt0PXV9fWxldCBsPXIuZ2V0VGltZXpvbmVPZmZzZXQoKTtpJiYobD1MWShpLGwpLHI9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4obj1uZXcgRGF0ZShuLmdldFRpbWUoKSkpLnNldE1pbnV0ZXMobi5nZXRNaW51dGVzKCkrdCksbn0obiwtMSooTFkodCxyKS1yKSl9KHIsaSkpO2xldCBjPSIiO3JldHVybiBzLmZvckVhY2godT0+e2xldCBkPWZ1bmN0aW9uKG4pe2lmKGIzW25dKXJldHVybiBiM1tuXTtsZXQgdDtzd2l0Y2gobil7Y2FzZSJHIjpjYXNlIkdHIjpjYXNlIkdHRyI6dD1wcihraS5FcmFzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkdHR0ciOnQ9cHIoa2kuRXJhcywkaS5XaWRlKTticmVhaztjYXNlIkdHR0dHIjp0PXByKGtpLkVyYXMsJGkuTmFycm93KTticmVhaztjYXNlInkiOnQ9aG8oRmkuRnVsbFllYXIsMSwwLCExLCEwKTticmVhaztjYXNlInl5Ijp0PWhvKEZpLkZ1bGxZZWFyLDIsMCwhMCwhMCk7YnJlYWs7Y2FzZSJ5eXkiOnQ9aG8oRmkuRnVsbFllYXIsMywwLCExLCEwKTticmVhaztjYXNlInl5eXkiOnQ9aG8oRmkuRnVsbFllYXIsNCwwLCExLCEwKTticmVhaztjYXNlIlkiOnQ9aVQoMSk7YnJlYWs7Y2FzZSJZWSI6dD1pVCgyLCEwKTticmVhaztjYXNlIllZWSI6dD1pVCgzKTticmVhaztjYXNlIllZWVkiOnQ9aVQoNCk7YnJlYWs7Y2FzZSJNIjpjYXNlIkwiOnQ9aG8oRmkuTW9udGgsMSwxKTticmVhaztjYXNlIk1NIjpjYXNlIkxMIjp0PWhvKEZpLk1vbnRoLDIsMSk7YnJlYWs7Y2FzZSJNTU0iOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIk1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLldpZGUpO2JyZWFrO2Nhc2UiTU1NTU0iOnQ9cHIoa2kuTW9udGhzLCRpLk5hcnJvdyk7YnJlYWs7Y2FzZSJMTEwiOnQ9cHIoa2kuTW9udGhzLCRpLkFiYnJldmlhdGVkLEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTCI6dD1wcihraS5Nb250aHMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlIkxMTExMIjp0PXByKGtpLk1vbnRocywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJ3Ijp0PXkzKDEpO2JyZWFrO2Nhc2Uid3ciOnQ9eTMoMik7YnJlYWs7Y2FzZSJXIjp0PXkzKDEsITApO2JyZWFrO2Nhc2UiZCI6dD1obyhGaS5EYXRlLDEpO2JyZWFrO2Nhc2UiZGQiOnQ9aG8oRmkuRGF0ZSwyKTticmVhaztjYXNlImMiOmNhc2UiY2MiOnQ9aG8oRmkuRGF5LDEpO2JyZWFrO2Nhc2UiY2NjIjp0PXByKGtpLkRheXMsJGkuQWJicmV2aWF0ZWQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjIjp0PXByKGtpLkRheXMsJGkuV2lkZSxKby5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2NjIjp0PXByKGtpLkRheXMsJGkuTmFycm93LEpvLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2NjIjp0PXByKGtpLkRheXMsJGkuU2hvcnQsSm8uU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJFIjpjYXNlIkVFIjpjYXNlIkVFRSI6dD1wcihraS5EYXlzLCRpLkFiYnJldmlhdGVkKTticmVhaztjYXNlIkVFRUUiOnQ9cHIoa2kuRGF5cywkaS5XaWRlKTticmVhaztjYXNlIkVFRUVFIjp0PXByKGtpLkRheXMsJGkuTmFycm93KTticmVhaztjYXNlIkVFRUVFRSI6dD1wcihraS5EYXlzLCRpLlNob3J0KTticmVhaztjYXNlImEiOmNhc2UiYWEiOmNhc2UiYWFhIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiYWFhYSI6dD1wcihraS5EYXlQZXJpb2RzLCRpLldpZGUpO2JyZWFrO2Nhc2UiYWFhYWEiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3cpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJiYiI6Y2FzZSJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5BYmJyZXZpYXRlZCxKby5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlImJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5XaWRlLEpvLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYmIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJCIjpjYXNlIkJCIjpjYXNlIkJCQiI6dD1wcihraS5EYXlQZXJpb2RzLCRpLkFiYnJldmlhdGVkLEpvLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCIjp0PXByKGtpLkRheVBlcmlvZHMsJGkuV2lkZSxKby5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiQkJCQkIiOnQ9cHIoa2kuRGF5UGVyaW9kcywkaS5OYXJyb3csSm8uRm9ybWF0LCEwKTticmVhaztjYXNlImgiOnQ9aG8oRmkuSG91cnMsMSwtMTIpO2JyZWFrO2Nhc2UiaGgiOnQ9aG8oRmkuSG91cnMsMiwtMTIpO2JyZWFrO2Nhc2UiSCI6dD1obyhGaS5Ib3VycywxKTticmVhaztjYXNlIkhIIjp0PWhvKEZpLkhvdXJzLDIpO2JyZWFrO2Nhc2UibSI6dD1obyhGaS5NaW51dGVzLDEpO2JyZWFrO2Nhc2UibW0iOnQ9aG8oRmkuTWludXRlcywyKTticmVhaztjYXNlInMiOnQ9aG8oRmkuU2Vjb25kcywxKTticmVhaztjYXNlInNzIjp0PWhvKEZpLlNlY29uZHMsMik7YnJlYWs7Y2FzZSJTIjp0PWhvKEZpLkZyYWN0aW9uYWxTZWNvbmRzLDEpO2JyZWFrO2Nhc2UiU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMik7YnJlYWs7Y2FzZSJTU1MiOnQ9aG8oRmkuRnJhY3Rpb25hbFNlY29uZHMsMyk7YnJlYWs7Y2FzZSJaIjpjYXNlIlpaIjpjYXNlIlpaWiI6dD1uVChwYy5TaG9ydCk7YnJlYWs7Y2FzZSJaWlpaWiI6dD1uVChwYy5FeHRlbmRlZCk7YnJlYWs7Y2FzZSJPIjpjYXNlIk9PIjpjYXNlIk9PTyI6Y2FzZSJ6IjpjYXNlInp6IjpjYXNlInp6eiI6dD1uVChwYy5TaG9ydEdNVCk7YnJlYWs7Y2FzZSJPT09PIjpjYXNlIlpaWloiOmNhc2Uienp6eiI6dD1uVChwYy5Mb25nKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBiM1tuXT10LHR9KHUpO2MrPWQ/ZChyLGUsbCk6IicnIj09PXU/IiciOnUucmVwbGFjZSgvKF4nfCckKS9nLCIiKS5yZXBsYWNlKC8nJy9nLCInIil9KSxjfWZ1bmN0aW9uIGFUKG4sdCxlKXtsZXQgaT1uZXcgRGF0ZSgwKTtyZXR1cm4gaS5zZXRGdWxsWWVhcihuLHQsZSksaS5zZXRIb3VycygwLDAsMCksaX1mdW5jdGlvbiBwZChuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3JldHVybiB0YShuKVtici5Mb2NhbGVJZF19KG4pO2lmKEJ4W2VdPUJ4W2VdfHx7fSxCeFtlXVt0XSlyZXR1cm4gQnhbZV1bdF07bGV0IGk9IiI7c3dpdGNoKHQpe2Nhc2Uic2hvcnREYXRlIjppPUoxKG4sa3MuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtRGF0ZSI6aT1KMShuLGtzLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nRGF0ZSI6aT1KMShuLGtzLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbERhdGUiOmk9SjEobixrcy5GdWxsKTticmVhaztjYXNlInNob3J0VGltZSI6aT0kMShuLGtzLlNob3J0KTticmVhaztjYXNlIm1lZGl1bVRpbWUiOmk9JDEobixrcy5NZWRpdW0pO2JyZWFrO2Nhc2UibG9uZ1RpbWUiOmk9JDEobixrcy5Mb25nKTticmVhaztjYXNlImZ1bGxUaW1lIjppPSQxKG4sa3MuRnVsbCk7YnJlYWs7Y2FzZSJzaG9ydCI6bGV0IHI9cGQobiwic2hvcnRUaW1lIiksbz1wZChuLCJzaG9ydERhdGUiKTtpPXRUKGVUKG4sa3MuU2hvcnQpLFtyLG9dKTticmVhaztjYXNlIm1lZGl1bSI6bGV0IHM9cGQobiwibWVkaXVtVGltZSIpLGE9cGQobiwibWVkaXVtRGF0ZSIpO2k9dFQoZVQobixrcy5NZWRpdW0pLFtzLGFdKTticmVhaztjYXNlImxvbmciOmxldCBsPXBkKG4sImxvbmdUaW1lIiksYz1wZChuLCJsb25nRGF0ZSIpO2k9dFQoZVQobixrcy5Mb25nKSxbbCxjXSk7YnJlYWs7Y2FzZSJmdWxsIjpsZXQgdT1wZChuLCJmdWxsVGltZSIpLGQ9cGQobiwiZnVsbERhdGUiKTtpPXRUKGVUKG4sa3MuRnVsbCksW3UsZF0pfXJldHVybiBpJiYoQnhbZV1bdF09aSksaX1mdW5jdGlvbiB0VChuLHQpe3JldHVybiB0JiYobj1uLnJlcGxhY2UoL1x7KFtefV0rKX0vZyxmdW5jdGlvbihlLGkpe3JldHVybiBudWxsIT10JiZpIGluIHQ/dFtpXTplfSkpLG59ZnVuY3Rpb24gZGMobix0LGU9Ii0iLGkscil7bGV0IG89IiI7KG48MHx8ciYmbjw9MCkmJihyP249MS1uOihuPS1uLG89ZSkpO2xldCBzPVN0cmluZyhuKTtmb3IoO3MubGVuZ3RoPHQ7KXM9IjAiK3M7cmV0dXJuIGkmJihzPXMuc2xpY2Uocy5sZW5ndGgtdCkpLG8rc31mdW5jdGlvbiBobyhuLHQsZT0wLGk9ITEscj0hMSl7cmV0dXJuIGZ1bmN0aW9uKG8scyl7bGV0IGE9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSBGaS5GdWxsWWVhcjpyZXR1cm4gdC5nZXRGdWxsWWVhcigpO2Nhc2UgRmkuTW9udGg6cmV0dXJuIHQuZ2V0TW9udGgoKTtjYXNlIEZpLkRhdGU6cmV0dXJuIHQuZ2V0RGF0ZSgpO2Nhc2UgRmkuSG91cnM6cmV0dXJuIHQuZ2V0SG91cnMoKTtjYXNlIEZpLk1pbnV0ZXM6cmV0dXJuIHQuZ2V0TWludXRlcygpO2Nhc2UgRmkuU2Vjb25kczpyZXR1cm4gdC5nZXRTZWNvbmRzKCk7Y2FzZSBGaS5GcmFjdGlvbmFsU2Vjb25kczpyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIEZpLkRheTpyZXR1cm4gdC5nZXREYXkoKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBEYXRlVHlwZSB2YWx1ZSAiJHtufSIuYCl9fShuLG8pO2lmKChlPjB8fGE+LWUpJiYoYSs9ZSksbj09PUZpLkhvdXJzKTA9PT1hJiYtMTI9PT1lJiYoYT0xMik7ZWxzZSBpZihuPT09RmkuRnJhY3Rpb25hbFNlY29uZHMpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGRjKG4sMykuc3Vic3RyaW5nKDAsdCl9KGEsdCk7bGV0IGw9aGQocyxscy5NaW51c1NpZ24pO3JldHVybiBkYyhhLHQsbCxpLHIpfX1mdW5jdGlvbiBwcihuLHQsZT1Kby5Gb3JtYXQsaT0hMSl7cmV0dXJuIGZ1bmN0aW9uKHIsbyl7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvKXtzd2l0Y2goZSl7Y2FzZSBraS5Nb250aHM6cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10YShuKSxvPV9sKFtpW2JyLk1vbnRoc0Zvcm1hdF0saVtici5Nb250aHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtuLmdldE1vbnRoKCldO2Nhc2Uga2kuRGF5czpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPXRhKG4pLG89X2woW2lbYnIuRGF5c0Zvcm1hdF0saVtici5EYXlzU3RhbmRhbG9uZV1dLHQpO3JldHVybiBfbChvLGUpfSh0LHIsaSlbbi5nZXREYXkoKV07Y2FzZSBraS5EYXlQZXJpb2RzOmxldCBzPW4uZ2V0SG91cnMoKSxhPW4uZ2V0TWludXRlcygpO2lmKG8pe2xldCBjPWZ1bmN0aW9uKG4pe2xldCB0PXRhKG4pO3JldHVybiBGWSh0KSwodFtici5FeHRyYURhdGFdWzJdfHxbXSkubWFwKGk9PiJzdHJpbmciPT10eXBlb2YgaT92MyhpKTpbdjMoaVswXSksdjMoaVsxXSldKX0odCksdT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobik7RlkoaSk7bGV0IG89X2woW2lbYnIuRXh0cmFEYXRhXVswXSxpW2JyLkV4dHJhRGF0YV1bMV1dLHQpfHxbXTtyZXR1cm4gX2wobyxlKXx8W119KHQscixpKSxkPWMuZmluZEluZGV4KHA9PntpZihBcnJheS5pc0FycmF5KHApKXtsZXRbaCxmXT1wLG09cz49aC5ob3VycyYmYT49aC5taW51dGVzLEM9czxmLmhvdXJzfHxzPT09Zi5ob3VycyYmYTxmLm1pbnV0ZXM7aWYoaC5ob3VyczxmLmhvdXJzKXtpZihtJiZDKXJldHVybiEwfWVsc2UgaWYobXx8QylyZXR1cm4hMH1lbHNlIGlmKHAuaG91cnM9PT1zJiZwLm1pbnV0ZXM9PT1hKXJldHVybiEwO3JldHVybiExfSk7aWYoLTEhPT1kKXJldHVybiB1W2RdfXJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9dGEobiksbz1fbChbaVtici5EYXlQZXJpb2RzRm9ybWF0XSxpW2JyLkRheVBlcmlvZHNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIF9sKG8sZSl9KHQscixpKVtzPDEyPzA6MV07Y2FzZSBraS5FcmFzOnJldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiBfbCh0YShuKVtici5FcmFzXSx0KX0odCxpKVtuLmdldEZ1bGxZZWFyKCk8PTA/MDoxXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB0cmFuc2xhdGlvbiB0eXBlICR7ZX1gKX19KHIsbyxuLHQsZSxpKX19ZnVuY3Rpb24gblQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxpKXtsZXQgcj0tMSppLG89aGQoZSxscy5NaW51c1NpZ24pLHM9cj4wP01hdGguZmxvb3Ioci82MCk6TWF0aC5jZWlsKHIvNjApO3N3aXRjaChuKXtjYXNlIHBjLlNob3J0OnJldHVybihyPj0wPyIrIjoiIikrZGMocywyLG8pK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5TaG9ydEdNVDpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK2RjKHMsMSxvKTtjYXNlIHBjLkxvbmc6cmV0dXJuIkdNVCIrKHI+PTA/IisiOiIiKStkYyhzLDIsbykrIjoiK2RjKE1hdGguYWJzKHIlNjApLDIsbyk7Y2FzZSBwYy5FeHRlbmRlZDpyZXR1cm4gMD09PWk/IloiOihyPj0wPyIrIjoiIikrZGMocywyLG8pKyI6IitkYyhNYXRoLmFicyhyJTYwKSwyLG8pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHpvbmUgd2lkdGggIiR7bn0iYCl9fX1mdW5jdGlvbiBOWShuKXtyZXR1cm4gYVQobi5nZXRGdWxsWWVhcigpLG4uZ2V0TW9udGgoKSxuLmdldERhdGUoKSsoNC1uLmdldERheSgpKSl9ZnVuY3Rpb24geTMobix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcjtpZih0KXtsZXQgbz1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLDEpLmdldERheSgpLTEscz1lLmdldERhdGUoKTtyPTErTWF0aC5mbG9vcigocytvKS83KX1lbHNle2xldCBvPU5ZKGUpLHM9ZnVuY3Rpb24obil7bGV0IHQ9YVQobiwwLDEpLmdldERheSgpO3JldHVybiBhVChuLDAsMSsodDw9ND80OjExKS10KX0oby5nZXRGdWxsWWVhcigpKSxhPW8uZ2V0VGltZSgpLXMuZ2V0VGltZSgpO3I9MStNYXRoLnJvdW5kKGEvNjA0OGU1KX1yZXR1cm4gZGMocixuLGhkKGksbHMuTWludXNTaWduKSl9fWZ1bmN0aW9uIGlUKG4sdD0hMSl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGRjKE5ZKGUpLmdldEZ1bGxZZWFyKCksbixoZChpLGxzLk1pbnVzU2lnbiksdCl9fXZhciBiMz17fTtmdW5jdGlvbiBMWShuLHQpe249bi5yZXBsYWNlKC86L2csIiIpO2xldCBlPURhdGUucGFyc2UoIkphbiAwMSwgMTk3MCAwMDowMDowMCAiK24pLzZlNDtyZXR1cm4gaXNOYU4oZSk/dDplfWZ1bmN0aW9uIEVZKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4udmFsdWVPZigpKX12YXIgT0NlPS9eKFxkKyk/XC4oKFxkKykoLShcZCspKT8pPyQvO2Z1bmN0aW9uIEEzKG4sdCxlKXtsZXQgaT1mdW5jdGlvbihuLHQpe3JldHVybiB0YShuKVtici5OdW1iZXJGb3JtYXRzXVt0XX0odCxyVC5EZWNpbWFsKSxyPWZ1bmN0aW9uKG4sdD0iLSIpe2xldCBlPXttaW5JbnQ6MSxtaW5GcmFjOjAsbWF4RnJhYzowLHBvc1ByZToiIixwb3NTdWY6IiIsbmVnUHJlOiIiLG5lZ1N1ZjoiIixnU2l6ZTowLGxnU2l6ZTowfSxpPW4uc3BsaXQoIjsiKSxyPWlbMF0sbz1pWzFdLHM9LTEhPT1yLmluZGV4T2YoIi4iKT9yLnNwbGl0KCIuIik6W3Iuc3Vic3RyaW5nKDAsci5sYXN0SW5kZXhPZigiMCIpKzEpLHIuc3Vic3RyaW5nKHIubGFzdEluZGV4T2YoIjAiKSsxKV0sYT1zWzBdLGw9c1sxXXx8IiI7ZS5wb3NQcmU9YS5zdWJzdHJpbmcoMCxhLmluZGV4T2YoIiMiKSk7Zm9yKGxldCB1PTA7dTxsLmxlbmd0aDt1Kyspe2xldCBkPWwuY2hhckF0KHUpOyIwIj09PWQ/ZS5taW5GcmFjPWUubWF4RnJhYz11KzE6IiMiPT09ZD9lLm1heEZyYWM9dSsxOmUucG9zU3VmKz1kfWxldCBjPWEuc3BsaXQoIiwiKTtpZihlLmdTaXplPWNbMV0/Y1sxXS5sZW5ndGg6MCxlLmxnU2l6ZT1jWzJdfHxjWzFdPyhjWzJdfHxjWzFdKS5sZW5ndGg6MCxvKXtsZXQgdT1yLmxlbmd0aC1lLnBvc1ByZS5sZW5ndGgtZS5wb3NTdWYubGVuZ3RoLGQ9by5pbmRleE9mKCIjIik7ZS5uZWdQcmU9by5zdWJzdHJpbmcoMCxkKS5yZXBsYWNlKC8nL2csIiIpLGUubmVnU3VmPW8uc2xpY2UoZCt1KS5yZXBsYWNlKC8nL2csIiIpfWVsc2UgZS5uZWdQcmU9dCtlLnBvc1ByZSxlLm5lZ1N1Zj1lLnBvc1N1ZjtyZXR1cm4gZX0oaSxoZCh0LGxzLk1pbnVzU2lnbikpO3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIsbyxzPSExKXtsZXQgYT0iIixsPSExO2lmKGlzRmluaXRlKG4pKXtsZXQgYz1mdW5jdGlvbihuKXtsZXQgaSxyLG8scyxhLHQ9TWF0aC5hYnMobikrIiIsZT0wO2Zvcigocj10LmluZGV4T2YoIi4iKSk+LTEmJih0PXQucmVwbGFjZSgiLiIsIiIpKSwobz10LnNlYXJjaCgvZS9pKSk+MD8ocjwwJiYocj1vKSxyKz0rdC5zbGljZShvKzEpLHQ9dC5zdWJzdHJpbmcoMCxvKSk6cjwwJiYocj10Lmxlbmd0aCksbz0wOyIwIj09PXQuY2hhckF0KG8pO28rKyk7aWYobz09PShhPXQubGVuZ3RoKSlpPVswXSxyPTE7ZWxzZXtmb3IoYS0tOyIwIj09PXQuY2hhckF0KGEpOylhLS07Zm9yKHItPW8saT1bXSxzPTA7bzw9YTtvKysscysrKWlbc109TnVtYmVyKHQuY2hhckF0KG8pKX1yZXR1cm4gcj4yMiYmKGk9aS5zcGxpY2UoMCwyMSksZT1yLTEscj0xKSx7ZGlnaXRzOmksZXhwb25lbnQ6ZSxpbnRlZ2VyTGVuOnJ9fShuKTtzJiYoYz1mdW5jdGlvbihuKXtpZigwPT09bi5kaWdpdHNbMF0pcmV0dXJuIG47bGV0IHQ9bi5kaWdpdHMubGVuZ3RoLW4uaW50ZWdlckxlbjtyZXR1cm4gbi5leHBvbmVudD9uLmV4cG9uZW50Kz0yOigwPT09dD9uLmRpZ2l0cy5wdXNoKDAsMCk6MT09PXQmJm4uZGlnaXRzLnB1c2goMCksbi5pbnRlZ2VyTGVuKz0yKSxufShjKSk7bGV0IHU9dC5taW5JbnQsZD10Lm1pbkZyYWMscD10Lm1heEZyYWM7aWYobyl7bGV0IHk9by5tYXRjaChPQ2UpO2lmKG51bGw9PT15KXRocm93IG5ldyBFcnJvcihgJHtvfSBpcyBub3QgYSB2YWxpZCBkaWdpdCBpbmZvYCk7bGV0IEk9eVsxXSxBPXlbM10sTz15WzVdO251bGwhPUkmJih1PUMzKEkpKSxudWxsIT1BJiYoZD1DMyhBKSksbnVsbCE9Tz9wPUMzKE8pOm51bGwhPUEmJmQ+cCYmKHA9ZCl9IWZ1bmN0aW9uKG4sdCxlKXtpZih0PmUpdGhyb3cgbmV3IEVycm9yKGBUaGUgbWluaW11bSBudW1iZXIgb2YgZGlnaXRzIGFmdGVyIGZyYWN0aW9uICgke3R9KSBpcyBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bSAoJHtlfSkuYCk7bGV0IGk9bi5kaWdpdHMscj1pLmxlbmd0aC1uLmludGVnZXJMZW4sbz1NYXRoLm1pbihNYXRoLm1heCh0LHIpLGUpLHM9bytuLmludGVnZXJMZW4sYT1pW3NdO2lmKHM+MCl7aS5zcGxpY2UoTWF0aC5tYXgobi5pbnRlZ2VyTGVuLHMpKTtmb3IobGV0IGQ9cztkPGkubGVuZ3RoO2QrKylpW2RdPTB9ZWxzZXtyPU1hdGgubWF4KDAsciksbi5pbnRlZ2VyTGVuPTEsaS5sZW5ndGg9TWF0aC5tYXgoMSxzPW8rMSksaVswXT0wO2ZvcihsZXQgZD0xO2Q8cztkKyspaVtkXT0wfWlmKGE+PTUpaWYocy0xPDApe2ZvcihsZXQgZD0wO2Q+cztkLS0paS51bnNoaWZ0KDApLG4uaW50ZWdlckxlbisrO2kudW5zaGlmdCgxKSxuLmludGVnZXJMZW4rK31lbHNlIGlbcy0xXSsrO2Zvcig7cjxNYXRoLm1heCgwLG8pO3IrKylpLnB1c2goMCk7bGV0IGw9MCE9PW8sYz10K24uaW50ZWdlckxlbix1PWkucmVkdWNlUmlnaHQoZnVuY3Rpb24oZCxwLGgsZil7cmV0dXJuIGZbaF09KHArPWQpPDEwP3A6cC0xMCxsJiYoMD09PWZbaF0mJmg+PWM/Zi5wb3AoKTpsPSExKSxwPj0xMD8xOjB9LDApO3UmJihpLnVuc2hpZnQodSksbi5pbnRlZ2VyTGVuKyspfShjLGQscCk7bGV0IGg9Yy5kaWdpdHMsZj1jLmludGVnZXJMZW4sbT1jLmV4cG9uZW50LEM9W107Zm9yKGw9aC5ldmVyeSh5PT4heSk7Zjx1O2YrKyloLnVuc2hpZnQoMCk7Zm9yKDtmPDA7ZisrKWgudW5zaGlmdCgwKTtmPjA/Qz1oLnNwbGljZShmLGgubGVuZ3RoKTooQz1oLGg9WzBdKTtsZXQgXz1bXTtmb3IoaC5sZW5ndGg+PXQubGdTaXplJiZfLnVuc2hpZnQoaC5zcGxpY2UoLXQubGdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGg+dC5nU2l6ZTspXy51bnNoaWZ0KGguc3BsaWNlKC10LmdTaXplLGgubGVuZ3RoKS5qb2luKCIiKSk7aC5sZW5ndGgmJl8udW5zaGlmdChoLmpvaW4oIiIpKSxhPV8uam9pbihoZChlLGkpKSxDLmxlbmd0aCYmKGErPWhkKGUscikrQy5qb2luKCIiKSksbSYmKGErPWhkKGUsbHMuRXhwb25lbnRpYWwpKyIrIittKX1lbHNlIGE9aGQoZSxscy5JbmZpbml0eSk7cmV0dXJuIGE9bjwwJiYhbD90Lm5lZ1ByZSthK3QubmVnU3VmOnQucG9zUHJlK2ErdC5wb3NTdWYsYX0obixyLHQsbHMuR3JvdXAsbHMuRGVjaW1hbCxlKX1mdW5jdGlvbiBDMyhuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fWZ1bmN0aW9uIHVUKG4sdCl7dD1lbmNvZGVVUklDb21wb25lbnQodCk7Zm9yKGxldCBlIG9mIG4uc3BsaXQoIjsiKSl7bGV0IGk9ZS5pbmRleE9mKCI9IiksW3Isb109LTE9PWk/W2UsIiJdOltlLnNsaWNlKDAsaSksZS5zbGljZShpKzEpXTtpZihyLnRyaW0oKT09PXQpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChvKX1yZXR1cm4gbnVsbH12YXIgUG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9pdGVyYWJsZURpZmZlcnM9ZSx0aGlzLl9rZXlWYWx1ZURpZmZlcnM9aSx0aGlzLl9uZ0VsPXIsdGhpcy5fcmVuZGVyZXI9byx0aGlzLl9pdGVyYWJsZURpZmZlcj1udWxsLHRoaXMuX2tleVZhbHVlRGlmZmVyPW51bGwsdGhpcy5faW5pdGlhbENsYXNzZXM9W10sdGhpcy5fcmF3Q2xhc3M9bnVsbH1zZXQga2xhc3MoZSl7dGhpcy5fcmVtb3ZlQ2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faW5pdGlhbENsYXNzZXM9InN0cmluZyI9PXR5cGVvZiBlP2Uuc3BsaXQoL1xzKy8pOltdLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKX1zZXQgbmdDbGFzcyhlKXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX3Jhd0NsYXNzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5faW5pdGlhbENsYXNzZXMpLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgvXHMrLyk6ZSx0aGlzLl9yYXdDbGFzcyYmKHpFKHRoaXMuX3Jhd0NsYXNzKT90aGlzLl9pdGVyYWJsZURpZmZlcj10aGlzLl9pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCk6dGhpcy5fa2V5VmFsdWVEaWZmZXI9dGhpcy5fa2V5VmFsdWVEaWZmZXJzLmZpbmQodGhpcy5fcmF3Q2xhc3MpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9pdGVyYWJsZURpZmZlcil7bGV0IGU9dGhpcy5faXRlcmFibGVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlJdGVyYWJsZUNoYW5nZXMoZSl9ZWxzZSBpZih0aGlzLl9rZXlWYWx1ZURpZmZlcil7bGV0IGU9dGhpcy5fa2V5VmFsdWVEaWZmZXIuZGlmZih0aGlzLl9yYXdDbGFzcyk7ZSYmdGhpcy5fYXBwbHlLZXlWYWx1ZUNoYW5nZXMoZSl9fV9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaS5rZXksaS5jdXJyZW50VmFsdWUpKSxlLmZvckVhY2hDaGFuZ2VkSXRlbShpPT50aGlzLl90b2dnbGVDbGFzcyhpLmtleSxpLmN1cnJlbnRWYWx1ZSkpLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PntpLnByZXZpb3VzVmFsdWUmJnRoaXMuX3RvZ2dsZUNsYXNzKGkua2V5LCExKX0pfV9hcHBseUl0ZXJhYmxlQ2hhbmdlcyhlKXtlLmZvckVhY2hBZGRlZEl0ZW0oaT0+e2lmKCJzdHJpbmciIT10eXBlb2YgaS5pdGVtKXRocm93IG5ldyBFcnJvcihgTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAke2NvKGkuaXRlbSl9YCk7dGhpcy5fdG9nZ2xlQ2xhc3MoaS5pdGVtLCEwKX0pLGUuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGkuaXRlbSwhMSkpfV9hcHBseUNsYXNzZXMoZSl7ZSYmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQ/ZS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITApKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksISFlW2ldKSkpfV9yZW1vdmVDbGFzc2VzKGUpe2UmJihBcnJheS5pc0FycmF5KGUpfHxlIGluc3RhbmNlb2YgU2V0P2UuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChpPT50aGlzLl90b2dnbGVDbGFzcyhpLCExKSkpfV90b2dnbGVDbGFzcyhlLGkpeyhlPWUudHJpbSgpKSYmZS5zcGxpdCgvXHMrL2cpLmZvckVhY2gocj0+e2k/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxyKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHRjKSx3KFZiKSx3KEFlKSx3KFhjKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHluPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0Zvck9mKGUpe3RoaXMuX25nRm9yT2Y9ZSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShlKXt0aGlzLl90cmFja0J5Rm49ZX1nZXQgbmdGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX3RyYWNrQnlGbn1zZXQgbmdGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fdGVtcGxhdGU9ZSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fbmdGb3JPZkRpcnR5KXt0aGlzLl9uZ0Zvck9mRGlydHk9ITE7bGV0IGU9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUodGhpcy5uZ0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X2FwcGx5Q2hhbmdlcyhlKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyO2UuZm9yRWFjaE9wZXJhdGlvbigocixvLHMpPT57aWYobnVsbD09ci5wcmV2aW91c0luZGV4KWkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLiRpbXBsaWNpdD10LHRoaXMubmdGb3JPZj1lLHRoaXMuaW5kZXg9aSx0aGlzLmNvdW50PXJ9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX0oci5pdGVtLHRoaXMuX25nRm9yT2YsLTEsLTEpLG51bGw9PT1zP3ZvaWQgMDpzKTtlbHNlIGlmKG51bGw9PXMpaS5yZW1vdmUobnVsbD09PW8/dm9pZCAwOm8pO2Vsc2UgaWYobnVsbCE9PW8pe2xldCBhPWkuZ2V0KG8pO2kubW92ZShhLHMpLEFZKGEscil9fSk7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKXtsZXQgYT1pLmdldChyKS5jb250ZXh0O2EuaW5kZXg9cixhLmNvdW50PW8sYS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9ZS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2Uocj0+e0FZKGkuZ2V0KHIuY3VycmVudEluZGV4KSxyKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJuZ0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksbn0pKCk7ZnVuY3Rpb24gQVkobix0KXtuLmNvbnRleHQuJGltcGxpY2l0PXQuaXRlbX12YXIgWGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3ZpZXdDb250YWluZXI9ZSx0aGlzLl9jb250ZXh0PW5ldyBTMyx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWl9c2V0IG5nSWYoZSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWUsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihlKXtJWSgibmdJZlRoZW4iLGUpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1lLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShlKXtJWSgibmdJZkVsc2UiLGUpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1lLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGUsaSl7cmV0dXJuITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLFMzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19O2Z1bmN0aW9uIElZKG4sdCl7aWYodCYmIXQuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtufSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtjbyh0KX0nLmApfXZhciBjVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9dCx0aGlzLl90ZW1wbGF0ZVJlZj1lLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZSh0KXt0JiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiF0JiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19LGhyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChlKXt0aGlzLl9uZ1N3aXRjaD1lLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoZSl7dGhpcy5fZGVmYXVsdFZpZXdzfHwodGhpcy5fZGVmYXVsdFZpZXdzPVtdKSx0aGlzLl9kZWZhdWx0Vmlld3MucHVzaChlKX1fbWF0Y2hDYXNlKGUpe2xldCBpPWU9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fGksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxpfV91cGRhdGVEZWZhdWx0Q2FzZXMoZSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzJiZlIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWU7Zm9yKGxldCBpPTA7aTx0aGlzLl9kZWZhdWx0Vmlld3MubGVuZ3RoO2krKyl0aGlzLl9kZWZhdWx0Vmlld3NbaV0uZW5mb3JjZVN0YXRlKGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLElyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMubmdTd2l0Y2g9cixyLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgY1QoZSxpKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhPaSksdyhociw5KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLENwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3IuX2FkZERlZmF1bHQobmV3IGNUKGUsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSx3KE9pKSx3KGhyLDkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hEZWZhdWx0IiwiIl1dLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx3cD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ0VsPWUsdGhpcy5fZGlmZmVycz1pLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5fbmdTdHlsZT1udWxsLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ1N0eWxlKGUpe3RoaXMuX25nU3R5bGU9ZSwhdGhpcy5fZGlmZmVyJiZlJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChlKS5jcmVhdGUoKSl9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyKXtsZXQgZT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTtlJiZ0aGlzLl9hcHBseUNoYW5nZXMoZSl9fV9zZXRTdHlsZShlLGkpe2xldFtyLG9dPWUuc3BsaXQoIi4iKSxzPS0xPT09ci5pbmRleE9mKCItIik/dm9pZCAwOmFsLkRhc2hDYXNlO251bGwhPWk/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIsbz9gJHtpfSR7b31gOmkscyk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIscyl9X2FwcGx5Q2hhbmdlcyhlKXtlLmZvckVhY2hSZW1vdmVkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxudWxsKSksZS5mb3JFYWNoQWRkZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoQ2hhbmdlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhWYiksdyhYYykpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKSxObz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl92aWV3UmVmPW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoZSl7aWYoZS5uZ1RlbXBsYXRlT3V0bGV0fHxlLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7bGV0IGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZpLnJlbW92ZShpLmluZGV4T2YodGhpcy5fdmlld1JlZikpLHRoaXMubmdUZW1wbGF0ZU91dGxldCl7bGV0e25nVGVtcGxhdGVPdXRsZXQ6cixuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDpvLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjpzfT10aGlzO3RoaXMuX3ZpZXdSZWY9aS5jcmVhdGVFbWJlZGRlZFZpZXcocixvLHM/e2luamVjdG9yOnN9OnZvaWQgMCl9ZWxzZSB0aGlzLl92aWV3UmVmPW51bGx9ZWxzZSB0aGlzLl92aWV3UmVmJiZlLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiZ0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0JiYodGhpcy5fdmlld1JlZi5jb250ZXh0PXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHlpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbenRdfSksbn0pKCk7ZnVuY3Rpb24gZFQobix0KXtyZXR1cm4gbmV3IE10KDIxMDAsITEpfXZhciB6Q2U9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnRoZW4oZSxpPT57dGhyb3cgaX0pfWRpc3Bvc2UodCl7fX0sakNlPW5ldyBjbGFzc3tjcmVhdGVTdWJzY3JpcHRpb24odCxlKXtyZXR1cm4gdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppPT57dGhyb3cgaX19KX1kaXNwb3NlKHQpe3QudW5zdWJzY3JpYmUoKX19LGZ0PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9zdHJhdGVneT1udWxsLHRoaXMuX3JlZj1lfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGUpe3JldHVybiB0aGlzLl9vYmo/ZSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGUpKTp0aGlzLl9sYXRlc3RWYWx1ZTooZSYmdGhpcy5fc3Vic2NyaWJlKGUpLHRoaXMuX2xhdGVzdFZhbHVlKX1fc3Vic2NyaWJlKGUpe3RoaXMuX29iaj1lLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGUpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oZSxpPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShlLGkpKX1fc2VsZWN0U3RyYXRlZ3koZSl7aWYobjAoZSkpcmV0dXJuIHpDZTtpZihoTihlKSlyZXR1cm4gakNlO3Rocm93IGRUKCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoZSxpKXtlPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9aSx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uLDE2KSl9LG4uXHUwMjc1cGlwZT1CZyh7bmFtZToiYXN5bmMiLHR5cGU6bixwdXJlOiExLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxHQ2U9bmV3IHNlKCJEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORSIpLFUwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmxvY2FsZT1lLHRoaXMuZGVmYXVsdFRpbWV6b25lPWl9dHJhbnNmb3JtKGUsaT0ibWVkaXVtRGF0ZSIscixvKXtpZihudWxsPT1lfHwiIj09PWV8fGUhPWUpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBDQ2UoZSxpLG98fHRoaXMubG9jYWxlLHI/P3RoaXMuZGVmYXVsdFRpbWV6b25lPz92b2lkIDApfWNhdGNoKHMpe3Rocm93IGRUKCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHJkLDE2KSx3KEdDZSwyNCkpfSxuLlx1MDI3NXBpcGU9Qmcoe25hbWU6ImRhdGUiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSx2bD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2xvY2FsZT1lfXRyYW5zZm9ybShlLGkscil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiEobnVsbD09bnx8IiI9PT1ufHxuIT1uKX0oZSkpcmV0dXJuIG51bGw7cj1yfHx0aGlzLl9sb2NhbGU7dHJ5e2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbiYmIWlzTmFOKE51bWJlcihuKS1wYXJzZUZsb2F0KG4pKSlyZXR1cm4gTnVtYmVyKG4pO2lmKCJudW1iZXIiIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoYCR7bn0gaXMgbm90IGEgbnVtYmVyYCk7cmV0dXJuIG59KGUpO3JldHVybiBBMyhvLHIsaSl9Y2F0Y2gobyl7dGhyb3cgZFQoKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQsMTYpKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJudW1iZXIiLHR5cGU6bixwdXJlOiEwLHN0YW5kYWxvbmU6ITB9KSxufSkoKSxCWT0oKCk9PntjbGFzcyBue3RyYW5zZm9ybShlLGkscil7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZighdGhpcy5zdXBwb3J0cyhlKSl0aHJvdyBkVCgpO3JldHVybiBlLnNsaWNlKGkscil9c3VwcG9ydHMoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwaXBlPUJnKHtuYW1lOiJzbGljZSIsdHlwZTpuLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLG59KSgpLGtlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxJMz0iYnJvd3NlciI7ZnVuY3Rpb24gcFQobil7cmV0dXJuIG49PT1JM31uZXcgS2woIjE0LjIuMTEiKTt2YXIgUGY9Y2xhc3N7fTtmdW5jdGlvbiBLQ2Uobil7cmV0dXJuIG4uc3RhcnRzV2l0aCgiLyIpP24uc2xpY2UoMSk6bn1uZXcgc2UoIlBSRUNPTk5FQ1RfQ0hFQ0tfQkxPQ0tMSVNUIik7dmFyIFpDZT1uPT5uLnNyYyxKQ2U9bmV3IHNlKCJJbWFnZUxvYWRlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PlpDZX0pO2Z1bmN0aW9uIGhUKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGkscj17ZW5zdXJlUHJlY29ubmVjdDohMH0pe3JldHVybiBmdW5jdGlvbihuKXtpZigic3RyaW5nIiE9dHlwZW9mIG58fCIiPT09bi50cmltKCkpcmV0dXJuITE7dHJ5e3JldHVybiBuZXcgVVJMKG4pLCEwfWNhdGNoe3JldHVybiExfX0oaSl8fGZ1bmN0aW9uKG4sdCl7dGhyb3cgbmV3IE10KDI5NTksITEpfSgpLGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uZW5kc1dpdGgoIi8iKT9uLnNsaWNlKDAsLTEpOm59KGkpLFt7cHJvdmlkZTpKQ2UsdXNlVmFsdWU6YT0+KGZ1bmN0aW9uKG4pe3JldHVybi9eaHR0cHM/OlwvXC8vLnRlc3Qobil9KGEuc3JjKSYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgTXQoMjk1OSwhMSl9KCksbihpLHsuLi5hLHNyYzpLQ2UoYS5zcmMpfSkpfV19fWhUKGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZvcm1hdD1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd2lkdGg9JHt0LndpZHRofWApLGAke259L2Nkbi1jZ2kvaW1hZ2UvJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPSJmX2F1dG8scV9hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsd18ke3Qud2lkdGh9YCksYCR7bn0vaW1hZ2UvdXBsb2FkLyR7ZX0vJHt0LnNyY31gfSksaFQoZnVuY3Rpb24obix0KXtsZXQgZT0idHI6cS1hdXRvIjtyZXR1cm4gdC53aWR0aCYmKGUrPWAsdy0ke3Qud2lkdGh9YCksYCR7bn0vJHtlfS8ke3Quc3JjfWB9KSxoVChmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBVUkwoYCR7bn0vJHt0LnNyY31gKTtyZXR1cm4gZS5zZWFyY2hQYXJhbXMuc2V0KCJhdXRvIiwiZm9ybWF0IiksdC53aWR0aCYmZS5zZWFyY2hQYXJhbXMuc2V0KCJ3Iix0LndpZHRoLnRvU3RyaW5nKCkpLGUuaHJlZn0pO3ZhciBmVCxSMz1jbGFzcyBleHRlbmRzIHNUe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX0sR3g9Y2xhc3MgZXh0ZW5kcyBSM3tzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24obil7dzN8fCh3Mz1uKX0obmV3IEd4KX1vbkFuZENhbmNlbCh0LGUsaSl7cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihlLGksITEpLCgpPT57dC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSwhMSl9fWRpc3BhdGNoRXZlbnQodCxlKXt0LmRpc3BhdGNoRXZlbnQoZSl9cmVtb3ZlKHQpe3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4oZT1lfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KHQpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKHQpe3JldHVybiB0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldCh0LGUpe3JldHVybiJ3aW5kb3ciPT09ZT93aW5kb3c6ImRvY3VtZW50Ij09PWU/dDoiYm9keSI9PT1lP3QuYm9keTpudWxsfWdldEJhc2VIcmVmKHQpe2xldCBlPShVeD1VeHx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpKT9VeC5nZXRBdHRyaWJ1dGUoImhyZWYiKTpudWxsO3JldHVybiBudWxsPT1lP251bGw6ZnVuY3Rpb24obil7KGZUPWZUfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLnNldEF0dHJpYnV0ZSgiaHJlZiIsbik7bGV0IHQ9ZlQucGF0aG5hbWU7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCk/dDpgLyR7dH1gfShlKX1yZXNldEJhc2VFbGVtZW50KCl7VXg9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKHQpe3JldHVybiB1VChkb2N1bWVudC5jb29raWUsdCl9fSxVeD1udWxsLFdZPW5ldyBzZSgiVFJBTlNJVElPTl9JRCIpLGN3ZT1be3Byb3ZpZGU6dk4sdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuKCk9PntlLmdldChaRSkuZG9uZVByb21pc2UudGhlbigoKT0+e2xldCBpPWdsKCkscj10LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlW25nLXRyYW5zaXRpb249IiR7bn0iXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKWkucmVtb3ZlKHJbb10pfSl9fSxkZXBzOltXWSxCdCx6bl0sbXVsdGk6ITB9XSx1d2U9KCgpPT57Y2xhc3MgbntidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG1UPW5ldyBzZSgiRXZlbnRNYW5hZ2VyUGx1Z2lucyIpLGdUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl96b25lPWksdGhpcy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxlLmZvckVhY2gocj0+ci5tYW5hZ2VyPXRoaXMpLHRoaXMuX3BsdWdpbnM9ZS5zbGljZSgpLnJldmVyc2UoKX1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRFdmVudExpc3RlbmVyKGUsaSxyKX1hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihpKS5hZGRHbG9iYWxFdmVudExpc3RlbmVyKGUsaSxyKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQbHVnaW5Gb3IoZSl7bGV0IGk9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KGUpO2lmKGkpcmV0dXJuIGk7bGV0IHI9dGhpcy5fcGx1Z2lucztmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXTtpZihzLnN1cHBvcnRzKGUpKXJldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQoZSxzKSxzfXRocm93IG5ldyBFcnJvcihgTm8gZXZlbnQgbWFuYWdlciBwbHVnaW4gZm91bmQgZm9yIGV2ZW50ICR7ZX1gKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihtVCksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9UPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2RvYz10fWFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLGkpe2xldCByPWdsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7cn0gZm9yIGV2ZW50ICR7ZX1gKTtyZXR1cm4gdGhpcy5hZGRFdmVudExpc3RlbmVyKHIsZSxpKX19LHFZPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9zdHlsZXNTZXQ9bmV3IFNldH1hZGRTdHlsZXMoZSl7bGV0IGk9bmV3IFNldDtlLmZvckVhY2gocj0+e3RoaXMuX3N0eWxlc1NldC5oYXMocil8fCh0aGlzLl9zdHlsZXNTZXQuYWRkKHIpLGkuYWRkKHIpKX0pLHRoaXMub25TdHlsZXNBZGRlZChpKX1vblN0eWxlc0FkZGVkKGUpe31nZXRBbGxTdHlsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9zdHlsZXNTZXQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx6eD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcVl7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZSx0aGlzLl9ob3N0Tm9kZXM9bmV3IE1hcCx0aGlzLl9ob3N0Tm9kZXMuc2V0KGUuaGVhZCxbXSl9X2FkZFN0eWxlc1RvSG9zdChlLGkscil7ZS5mb3JFYWNoKG89PntsZXQgcz10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtzLnRleHRDb250ZW50PW8sci5wdXNoKGkuYXBwZW5kQ2hpbGQocykpfSl9YWRkSG9zdChlKXtsZXQgaT1bXTt0aGlzLl9hZGRTdHlsZXNUb0hvc3QodGhpcy5fc3R5bGVzU2V0LGUsaSksdGhpcy5faG9zdE5vZGVzLnNldChlLGkpfXJlbW92ZUhvc3QoZSl7bGV0IGk9dGhpcy5faG9zdE5vZGVzLmdldChlKTtpJiZpLmZvckVhY2goVlkpLHRoaXMuX2hvc3ROb2Rlcy5kZWxldGUoZSl9b25TdHlsZXNBZGRlZChlKXt0aGlzLl9ob3N0Tm9kZXMuZm9yRWFjaCgoaSxyKT0+e3RoaXMuX2FkZFN0eWxlc1RvSG9zdChlLHIsaSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKGU9PmUuZm9yRWFjaChWWSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gVlkobil7Z2woKS5yZW1vdmUobil9dmFyIFAzPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LE4zPS8lQ09NUCUvZztmdW5jdGlvbiB2VChuLHQsZSl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT92VChuLHIsZSk6KHI9ci5yZXBsYWNlKE4zLG4pLGUucHVzaChyKSl9cmV0dXJuIGV9ZnVuY3Rpb24gVVkobil7cmV0dXJuIHQ9PntpZigiX19uZ1Vud3JhcF9fIj09PXQpcmV0dXJuIG47ITE9PT1uKHQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLHQucmV0dXJuVmFsdWU9ITEpfX12YXIgang9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5ldmVudE1hbmFnZXI9ZSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9aSx0aGlzLmFwcElkPXIsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IFd4KGUpfWNyZWF0ZVJlbmRlcmVyKGUsaSl7aWYoIWV8fCFpKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjtzd2l0Y2goaS5lbmNhcHN1bGF0aW9uKXtjYXNlIHdhLkVtdWxhdGVkOntsZXQgcj10aGlzLnJlbmRlcmVyQnlDb21wSWQuZ2V0KGkuaWQpO3JldHVybiByfHwocj1uZXcgazModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGksdGhpcy5hcHBJZCksdGhpcy5yZW5kZXJlckJ5Q29tcElkLnNldChpLmlkLHIpKSxyLmFwcGx5VG9Ib3N0KGUpLHJ9Y2FzZSAxOmNhc2Ugd2EuU2hhZG93RG9tOnJldHVybiBuZXcgRjModGhpcy5ldmVudE1hbmFnZXIsdGhpcy5zaGFyZWRTdHlsZXNIb3N0LGUsaSk7ZGVmYXVsdDppZighdGhpcy5yZW5kZXJlckJ5Q29tcElkLmhhcyhpLmlkKSl7bGV0IHI9dlQoaS5pZCxpLnN0eWxlcyxbXSk7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyhyKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGkuaWQsdGhpcy5kZWZhdWx0UmVuZGVyZXIpfXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcn19YmVnaW4oKXt9ZW5kKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGdUKSxSKHp4KSxSKHJmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksV3g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ldmVudE1hbmFnZXI9dCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRlc3Ryb3lOb2RlPW51bGx9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIGU/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFAzW2VdfHxlLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0KX1hcHBlbmRDaGlsZCh0LGUpeyhqWSh0KT90LmNvbnRlbnQ6dCkuYXBwZW5kQ2hpbGQoZSl9aW5zZXJ0QmVmb3JlKHQsZSxpKXt0JiYoalkodCk/dC5jb250ZW50OnQpLmluc2VydEJlZm9yZShlLGkpfXJlbW92ZUNoaWxkKHQsZSl7dCYmdC5yZW1vdmVDaGlsZChlKX1zZWxlY3RSb290RWxlbWVudCh0LGUpe2xldCBpPSJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpOnQ7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBUaGUgc2VsZWN0b3IgIiR7dH0iIGRpZCBub3QgbWF0Y2ggYW55IGVsZW1lbnRzYCk7cmV0dXJuIGV8fChpLnRleHRDb250ZW50PSIiKSxpfXBhcmVudE5vZGUodCl7cmV0dXJuIHQucGFyZW50Tm9kZX1uZXh0U2libGluZyh0KXtyZXR1cm4gdC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUodCxlLGkscil7aWYocil7ZT1yKyI6IitlO2xldCBvPVAzW3JdO28/dC5zZXRBdHRyaWJ1dGVOUyhvLGUsaSk6dC5zZXRBdHRyaWJ1dGUoZSxpKX1lbHNlIHQuc2V0QXR0cmlidXRlKGUsaSl9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXtpZihpKXtsZXQgcj1QM1tpXTtyP3QucmVtb3ZlQXR0cmlidXRlTlMocixlKTp0LnJlbW92ZUF0dHJpYnV0ZShgJHtpfToke2V9YCl9ZWxzZSB0LnJlbW92ZUF0dHJpYnV0ZShlKX1hZGRDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LmFkZChlKX1yZW1vdmVDbGFzcyh0LGUpe3QuY2xhc3NMaXN0LnJlbW92ZShlKX1zZXRTdHlsZSh0LGUsaSxyKXtyJihhbC5EYXNoQ2FzZXxhbC5JbXBvcnRhbnQpP3Quc3R5bGUuc2V0UHJvcGVydHkoZSxpLHImYWwuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTp0LnN0eWxlW2VdPWl9cmVtb3ZlU3R5bGUodCxlLGkpe2kmYWwuRGFzaENhc2U/dC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0LnN0eWxlW2VdPSIifXNldFByb3BlcnR5KHQsZSxpKXt0W2VdPWl9c2V0VmFsdWUodCxlKXt0Lm5vZGVWYWx1ZT1lfWxpc3Rlbih0LGUsaSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIodCxlLFVZKGkpKTp0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHQsZSxVWShpKSl9fTtmdW5jdGlvbiBqWShuKXtyZXR1cm4iVEVNUExBVEUiPT09bi50YWdOYW1lJiZ2b2lkIDAhPT1uLmNvbnRlbnR9IkAiLmNoYXJDb2RlQXQoMCk7dmFyIGszPWNsYXNzIGV4dGVuZHMgV3h7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCksdGhpcy5jb21wb25lbnQ9aTtsZXQgbz12VChyKyItIitpLmlkLGkuc3R5bGVzLFtdKTtlLmFkZFN0eWxlcyhvKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uKG4pe3JldHVybiJfbmdjb250ZW50LSVDT01QJSIucmVwbGFjZShOMyxuKX0ocisiLSIraS5pZCksdGhpcy5ob3N0QXR0cj1mdW5jdGlvbihuKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UoTjMsbil9KHIrIi0iK2kuaWQpfWFwcGx5VG9Ib3N0KHQpe3N1cGVyLnNldEF0dHJpYnV0ZSh0LHRoaXMuaG9zdEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQodCxlKXtsZXQgaT1zdXBlci5jcmVhdGVFbGVtZW50KHQsZSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShpLHRoaXMuY29udGVudEF0dHIsIiIpLGl9fSxGMz1jbGFzcyBleHRlbmRzIFd4e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1lLHRoaXMuaG9zdEVsPWksdGhpcy5zaGFkb3dSb290PWkuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7bGV0IG89dlQoci5pZCxyLnN0eWxlcyxbXSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS50ZXh0Q29udGVudD1vW3NdLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChhKX19bm9kZU9yU2hhZG93Um9vdCh0KXtyZXR1cm4gdD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDp0fWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfWFwcGVuZENoaWxkKHQsZSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSxlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdCh0KSkpfX0sZ3dlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBfVHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1zdXBwb3J0cyhlKXtyZXR1cm4hMH1hZGRFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKGksciwhMSksKCk9PnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil9cmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkscil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR1k9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sX3dlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSx2d2U9e2FsdDpuPT5uLmFsdEtleSxjb250cm9sOm49Pm4uY3RybEtleSxtZXRhOm49Pm4ubWV0YUtleSxzaGlmdDpuPT5uLnNoaWZ0S2V5fSx5d2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIF9Ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiBudWxsIT1uLnBhcnNlRXZlbnROYW1lKGUpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe2xldCBvPW4ucGFyc2VFdmVudE5hbWUoaSkscz1uLmV2ZW50Q2FsbGJhY2soby5mdWxsS2V5LHIsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmdsKCkub25BbmRDYW5jZWwoZSxvLmRvbUV2ZW50TmFtZSxzKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGUpe2xldCBpPWUudG9Mb3dlckNhc2UoKS5zcGxpdCgiLiIpLHI9aS5zaGlmdCgpO2lmKDA9PT1pLmxlbmd0aHx8ImtleWRvd24iIT09ciYmImtleXVwIiE9PXIpcmV0dXJuIG51bGw7bGV0IG89bi5fbm9ybWFsaXplS2V5KGkucG9wKCkpLHM9IiIsYT1pLmluZGV4T2YoImNvZGUiKTtpZihhPi0xJiYoaS5zcGxpY2UoYSwxKSxzPSJjb2RlLiIpLEdZLmZvckVhY2goYz0+e2xldCB1PWkuaW5kZXhPZihjKTt1Pi0xJiYoaS5zcGxpY2UodSwxKSxzKz1jKyIuIil9KSxzKz1vLDAhPWkubGVuZ3RofHwwPT09by5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGw9e307cmV0dXJuIGwuZG9tRXZlbnROYW1lPXIsbC5mdWxsS2V5PXMsbH1zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGUsaSl7bGV0IHI9X3dlW2Uua2V5XXx8ZS5rZXksbz0iIjtyZXR1cm4gaS5pbmRleE9mKCJjb2RlLiIpPi0xJiYocj1lLmNvZGUsbz0iY29kZS4iKSwhKG51bGw9PXJ8fCFyKSYmKHI9ci50b0xvd2VyQ2FzZSgpLCIgIj09PXI/cj0ic3BhY2UiOiIuIj09PXImJihyPSJkb3QiKSxHWS5mb3JFYWNoKHM9PntzIT09ciYmKDAsdndlW3NdKShlKSYmKG8rPXMrIi4iKX0pLG8rPXIsbz09PWkpfXN0YXRpYyBldmVudENhbGxiYWNrKGUsaSxyKXtyZXR1cm4gbz0+e24ubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKG8sZSkmJnIucnVuR3VhcmRlZCgoKT0+aShvKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGUpe3JldHVybiJlc2MiPT09ZT8iZXNjYXBlIjplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd3dlPVt7cHJvdmlkZTppZCx1c2VWYWx1ZTpJM30se3Byb3ZpZGU6eU4sdXNlVmFsdWU6ZnVuY3Rpb24oKXtHeC5tYWtlQ3VycmVudCgpfSxtdWx0aTohMH0se3Byb3ZpZGU6QnQsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtQaz1ufShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxCMz13TihXNywiYnJvd3NlciIsd3dlKSxYWT1uZXcgc2UoIiIpLE13ZT1be3Byb3ZpZGU6TGIsdXNlQ2xhc3M6Y2xhc3N7YWRkVG9XaW5kb3codCl7V3IuZ2V0QW5ndWxhclRlc3RhYmlsaXR5PShpLHI9ITApPT57bGV0IG89dC5maW5kVGVzdGFiaWxpdHlJblRyZWUoaSxyKTtpZihudWxsPT1vKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgdGVzdGFiaWxpdHkgZm9yIGVsZW1lbnQuIik7cmV0dXJuIG99LFdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT50LmdldEFsbFRlc3RhYmlsaXRpZXMoKSxXci5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT50LmdldEFsbFJvb3RFbGVtZW50cygpLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoV3IuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFdyLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goaT0+e2xldCByPVdyLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzKCksbz1yLmxlbmd0aCxzPSExLGE9ZnVuY3Rpb24obCl7cz1zfHxsLG8tLSwwPT1vJiZpKHMpfTtyLmZvckVhY2goZnVuY3Rpb24obCl7bC53aGVuU3RhYmxlKGEpfSl9KX1maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLGkpe3JldHVybiBudWxsPT1lP251bGw6dC5nZXRUZXN0YWJpbGl0eShlKT8/KGk/Z2woKS5pc1NoYWRvd1Jvb3QoZSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKHQsZS5wYXJlbnRFbGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnhOLHVzZUNsYXNzOkpFLGRlcHM6W3B0LCRFLExiXX0se3Byb3ZpZGU6SkUsdXNlQ2xhc3M6SkUsZGVwczpbcHQsJEUsTGJdfV0sU3dlPVt7cHJvdmlkZTprRSx1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOlNzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFNzfSxkZXBzOltdfSx7cHJvdmlkZTptVCx1c2VDbGFzczpnd2UsbXVsdGk6ITAsZGVwczpbQnQscHQsaWRdfSx7cHJvdmlkZTptVCx1c2VDbGFzczp5d2UsbXVsdGk6ITAsZGVwczpbQnRdfSx7cHJvdmlkZTpqeCx1c2VDbGFzczpqeCxkZXBzOltnVCx6eCxyZl19LHtwcm92aWRlOnFjLHVzZUV4aXN0aW5nOmp4fSx7cHJvdmlkZTpxWSx1c2VFeGlzdGluZzp6eH0se3Byb3ZpZGU6engsdXNlQ2xhc3M6engsZGVwczpbQnRdfSx7cHJvdmlkZTpnVCx1c2VDbGFzczpnVCxkZXBzOlttVCxwdF19LHtwcm92aWRlOlBmLHVzZUNsYXNzOnV3ZSxkZXBzOltdfSxbXV0seVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6cmYsdXNlVmFsdWU6ZS5hcHBJZH0se3Byb3ZpZGU6V1ksdXNlRXhpc3Rpbmc6cmZ9LGN3ZV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFhZLDEyKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbLi4uU3dlLC4uLk13ZV0saW1wb3J0czpba2UscTddfSksbn0pKCksUmY9KG5ldyBzZSgiSGFtbWVyR2VzdHVyZUNvbmZpZyIpLG5ldyBzZSgiSGFtbWVyTG9hZGVyIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcoZXx8bik6UihRWSksaX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSksUVk9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJme2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWV9c2FuaXRpemUoZSxpKXtpZihudWxsPT1pKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlIEpyLk5PTkU6cmV0dXJuIGk7Y2FzZSBKci5IVE1MOnJldHVybiBabChpLCJIVE1MIik/JHMoaSk6WUYodGhpcy5fZG9jLFN0cmluZyhpKSkudG9TdHJpbmcoKTtjYXNlIEpyLlNUWUxFOnJldHVybiBabChpLCJTdHlsZSIpPyRzKGkpOmk7Y2FzZSBKci5TQ1JJUFQ6aWYoWmwoaSwiU2NyaXB0IikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSBzY3JpcHQgY29udGV4dCIpO2Nhc2UgSnIuVVJMOnJldHVybiBabChpLCJVUkwiKT8kcyhpKTpFYihTdHJpbmcoaSkpO2Nhc2UgSnIuUkVTT1VSQ0VfVVJMOmlmKFpsKGksIlJlc291cmNlVVJMIikpcmV0dXJuICRzKGkpO3Rocm93IG5ldyBFcnJvcigidW5zYWZlIHZhbHVlIHVzZWQgaW4gYSByZXNvdXJjZSBVUkwgY29udGV4dCAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgU2VjdXJpdHlDb250ZXh0ICR7ZX0gKHNlZSBodHRwczovL2cuY28vbmcvc2VjdXJpdHkjeHNzKWApfX1ieXBhc3NTZWN1cml0eVRydXN0SHRtbChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBSayhuKX0oZSl9YnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IE9rKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0U2NyaXB0KGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGtrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0VXJsKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IEZrKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgTmsobil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKGUpe2xldCBpPW51bGw7cmV0dXJuIGk9ZT9uZXcgZTpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFFZKG4uZ2V0KEJ0KSl9KFIoem4pKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHF4PShuZXcgS2woIjE0LjIuMTEiKSxkOChaWSgpLDEpLGNsYXNze30pLGJUPWNsYXNze30sdXU9IioiO2Z1bmN0aW9uIEhyKG4sdCl7cmV0dXJue3R5cGU6NyxuYW1lOm4sZGVmaW5pdGlvbnM6dCxvcHRpb25zOnt9fX1mdW5jdGlvbiBWaShuLHQ9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6dCx0aW1pbmdzOm59fWZ1bmN0aW9uIEgzKG4sdD1udWxsKXtyZXR1cm57dHlwZTozLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiB4VChuLHQ9bnVsbCl7cmV0dXJue3R5cGU6MixzdGVwczpuLG9wdGlvbnM6dH19ZnVuY3Rpb24gcm4obil7cmV0dXJue3R5cGU6NixzdHlsZXM6bixvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gRWkobix0LGUpe3JldHVybnt0eXBlOjAsbmFtZTpuLHN0eWxlczp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gT2Yobil7cmV0dXJue3R5cGU6NSxzdGVwczpufX1mdW5jdGlvbiBJaShuLHQsZT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGtmKG49bnVsbCl7cmV0dXJue3R5cGU6OSxvcHRpb25zOm59fWZ1bmN0aW9uIEZmKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjExLHNlbGVjdG9yOm4sYW5pbWF0aW9uOnQsb3B0aW9uczplfX1mdW5jdGlvbiBKWShuKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKG4pfXZhciBTcD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT10K2V9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7SlkoKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9c2V0UG9zaXRpb24odCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/dCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LFl4PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPXQ7bGV0IGU9MCxpPTAscj0wLG89dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1vP0pZKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaChzPT57cy5vbkRvbmUoKCk9PnsrK2U9PW8mJnRoaXMuX29uRmluaXNoKCl9KSxzLm9uRGVzdHJveSgoKT0+eysraT09byYmdGhpcy5fb25EZXN0cm95KCl9KSxzLm9uU3RhcnQoKCk9PnsrK3I9PW8mJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgocyxhKT0+TWF0aC5tYXgocyxhLnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuaW5pdCgpKX1vblN0YXJ0KHQpe3RoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUodCl7dGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT50LnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe2xldCBlPXQqdGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goaT0+e2xldCByPWkudG90YWxUaW1lP01hdGgubWluKDEsZS9pLnRvdGFsVGltZSk6MTtpLnNldFBvc2l0aW9uKHIpfSl9Z2V0UG9zaXRpb24oKXtsZXQgdD10aGlzLnBsYXllcnMucmVkdWNlKChlLGkpPT5udWxsPT09ZXx8aS50b3RhbFRpbWU+ZS50b3RhbFRpbWU/aTplLG51bGwpO3JldHVybiBudWxsIT10P3QuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaCh0PT57dC5iZWZvcmVEZXN0cm95JiZ0LmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT0ic3RhcnQiPT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fTtmdW5jdGlvbiAkWShuKXtyZXR1cm4gbmV3IE10KDNlMywhMSl9ZnVuY3Rpb24gYUIoKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHByb2Nlc3MpfWZ1bmN0aW9uIEVwKG4pe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgU3A7Y2FzZSAxOnJldHVybiBuWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBZeChuKX19ZnVuY3Rpb24gZlgobix0LGUsaSxyPW5ldyBNYXAsbz1uZXcgTWFwKXtsZXQgcz1bXSxhPVtdLGw9LTEsYz1udWxsO2lmKGkuZm9yRWFjaCh1PT57bGV0IGQ9dS5nZXQoIm9mZnNldCIpLHA9ZD09bCxoPXAmJmN8fG5ldyBNYXA7dS5mb3JFYWNoKChmLG0pPT57bGV0IEM9bSxfPWY7aWYoIm9mZnNldCIhPT1tKXN3aXRjaChDPXQubm9ybWFsaXplUHJvcGVydHlOYW1lKEMscyksXyl7Y2FzZSIhIjpfPXIuZ2V0KG0pO2JyZWFrO2Nhc2UgdXU6Xz1vLmdldChtKTticmVhaztkZWZhdWx0Ol89dC5ub3JtYWxpemVTdHlsZVZhbHVlKG0sQyxfLHMpfWguc2V0KEMsXyl9KSxwfHxhLnB1c2goaCksYz1oLGw9ZH0pLHMubGVuZ3RoKXRocm93IG5ldyBNdCgzNTAyLCExKTtyZXR1cm4gYX1mdW5jdGlvbiBsQihuLHQsZSxpKXtzd2l0Y2godCl7Y2FzZSJzdGFydCI6bi5vblN0YXJ0KCgpPT5pKGUmJlUzKGUsInN0YXJ0IixuKSkpO2JyZWFrO2Nhc2UiZG9uZSI6bi5vbkRvbmUoKCk9PmkoZSYmVTMoZSwiZG9uZSIsbikpKTticmVhaztjYXNlImRlc3Ryb3kiOm4ub25EZXN0cm95KCgpPT5pKGUmJlUzKGUsImRlc3Ryb3kiLG4pKSl9fWZ1bmN0aW9uIFUzKG4sdCxlKXtsZXQgbz1jQihuLmVsZW1lbnQsbi50cmlnZ2VyTmFtZSxuLmZyb21TdGF0ZSxuLnRvU3RhdGUsdHx8bi5waGFzZU5hbWUsZS50b3RhbFRpbWU/P24udG90YWxUaW1lLCEhZS5kaXNhYmxlZCkscz1uLl9kYXRhO3JldHVybiBudWxsIT1zJiYoby5fZGF0YT1zKSxvfWZ1bmN0aW9uIGNCKG4sdCxlLGkscj0iIixvPTAscyl7cmV0dXJue2VsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGZyb21TdGF0ZTplLHRvU3RhdGU6aSxwaGFzZU5hbWU6cix0b3RhbFRpbWU6byxkaXNhYmxlZDohIXN9fWZ1bmN0aW9uIEJhKG4sdCxlKXtsZXQgaT1uLmdldCh0KTtyZXR1cm4gaXx8bi5zZXQodCxpPWUpLGl9ZnVuY3Rpb24gZVgobil7bGV0IHQ9bi5pbmRleE9mKCI6Iik7cmV0dXJuW24uc3Vic3RyaW5nKDEsdCksbi5zbGljZSh0KzEpXX12YXIgWTM9KG4sdCk9PiExLG1YPShuLHQsZSk9PltdLGdYPW51bGw7ZnVuY3Rpb24gdUIobil7bGV0IHQ9bi5wYXJlbnROb2RlfHxuLmhvc3Q7cmV0dXJuIHQ9PT1nWD9udWxsOnR9KGFCKCl8fHR5cGVvZiBFbGVtZW50PCJ1IikmJih0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSI/KGdYPSgoKT0+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSgpLFkzPShuLHQpPT57Zm9yKDt0Oyl7aWYodD09PW4pcmV0dXJuITA7dD11Qih0KX1yZXR1cm4hMX0pOlkzPShuLHQpPT5uLmNvbnRhaW5zKHQpLG1YPShuLHQsZSk9PntpZihlKXJldHVybiBBcnJheS5mcm9tKG4ucXVlcnlTZWxlY3RvckFsbCh0KSk7bGV0IGk9bi5xdWVyeVNlbGVjdG9yKHQpO3JldHVybiBpP1tpXTpbXX0pO3ZhciBOZj1udWxsLHRYPSExO3ZhciBfWD1ZMyx2WD1tWCxkQj0oKCk9PntjbGFzcyBue3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShlKXtyZXR1cm4gZnVuY3Rpb24obil7TmZ8fChOZj0odHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5ib2R5Om51bGwpfHx7fSx0WD0hIU5mLnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBOZi5zdHlsZSk7bGV0IHQ9ITA7cmV0dXJuIE5mLnN0eWxlJiYhZnVuY3Rpb24obil7cmV0dXJuImVia2l0Ij09bi5zdWJzdHJpbmcoMSw2KX0obikmJih0PW4gaW4gTmYuc3R5bGUsIXQmJnRYJiYodD0iV2Via2l0IituLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK24uc2xpY2UoMSlpbiBOZi5zdHlsZSkpLHR9KGUpfW1hdGNoZXNFbGVtZW50KGUsaSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGUsaSl7cmV0dXJuIF9YKGUsaSl9Z2V0UGFyZW50RWxlbWVudChlKXtyZXR1cm4gdUIoZSl9cXVlcnkoZSxpLHIpe3JldHVybiB2WChlLGkscil9Y29tcHV0ZVN0eWxlKGUsaSxyKXtyZXR1cm4gcnx8IiJ9YW5pbWF0ZShlLGkscixvLHMsYT1bXSxsKXtyZXR1cm4gbmV3IFNwKHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHRDPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5PT1A9bmV3IGRCLG59KSgpLGJYPSJuZy1lbnRlciIsWDM9Im5nLWxlYXZlIix3VD0ibmctdHJpZ2dlciIsVFQ9Ii5uZy10cmlnZ2VyIixuWD0ibmctYW5pbWF0aW5nIixRMz0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gZmQobil7aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBuO2xldCB0PW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIXR8fHQubGVuZ3RoPDI/MDpLMyhwYXJzZUZsb2F0KHRbMV0pLHRbMl0pfWZ1bmN0aW9uIEszKG4sdCl7cmV0dXJuInMiPT09dD8xZTMqbjpufWZ1bmN0aW9uIERUKG4sdCxlKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9uOmZ1bmN0aW9uKG4sdCxlKXtsZXQgcixvPTAscz0iIjtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBhPW4ubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1hKXJldHVybiB0LnB1c2goJFkoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O3I9SzMocGFyc2VGbG9hdChhWzFdKSxhWzJdKTtsZXQgbD1hWzNdO251bGwhPWwmJihvPUszKHBhcnNlRmxvYXQobCksYVs0XSkpO2xldCBjPWFbNV07YyYmKHM9Yyl9ZWxzZSByPW47aWYoIWUpe2xldCBhPSExLGw9dC5sZW5ndGg7cjwwJiYodC5wdXNoKG5ldyBNdCgzMTAwLCExKSksYT0hMCksbzwwJiYodC5wdXNoKG5ldyBNdCgzMTAxLCExKSksYT0hMCksYSYmdC5zcGxpY2UobCwwLCRZKCkpfXJldHVybntkdXJhdGlvbjpyLGRlbGF5Om8sZWFzaW5nOnN9fShuLHQsZSl9ZnVuY3Rpb24gbkMobix0PXt9KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChlPT57dFtlXT1uW2VdfSksdH1mdW5jdGlvbiB4WChuKXtsZXQgdD1uZXcgTWFwO3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0LnNldChlLG5bZV0pfSksdH1mdW5jdGlvbiBqMChuLHQ9bmV3IE1hcCxlKXtpZihlKWZvcihsZXRbaSxyXW9mIGUpdC5zZXQoaSxyKTtmb3IobGV0W2kscl1vZiBuKXQuc2V0KGkscik7cmV0dXJuIHR9ZnVuY3Rpb24gaVgobix0LGUpe3JldHVybiBlP3QrIjoiK2UrIjsiOiIifWZ1bmN0aW9uIENYKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5zdHlsZS5sZW5ndGg7ZSsrKXtsZXQgaT1uLnN0eWxlLml0ZW0oZSk7dCs9aVgoMCxpLG4uc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShpKSl9Zm9yKGxldCBlIGluIG4uc3R5bGUpbi5zdHlsZS5oYXNPd25Qcm9wZXJ0eShlKSYmIWUuc3RhcnRzV2l0aCgiXyIpJiYodCs9aVgoMCxtTWUoZSksbi5zdHlsZVtlXSkpO24uc2V0QXR0cmlidXRlKCJzdHlsZSIsdCl9ZnVuY3Rpb24gZHUobix0LGUpe24uc3R5bGUmJih0LmZvckVhY2goKGkscik9PntsZXQgbz1wQihyKTtlJiYhZS5oYXMocikmJmUuc2V0KHIsbi5zdHlsZVtvXSksbi5zdHlsZVtvXT1pfSksYUIoKSYmQ1gobikpfWZ1bmN0aW9uIEJmKG4sdCl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoZSxpKT0+e2xldCByPXBCKGkpO24uc3R5bGVbcl09IiJ9KSxhQigpJiZDWChuKSl9ZnVuY3Rpb24gWHgobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/MT09bi5sZW5ndGg/blswXTp4VChuKTpufXZhciBaMz1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB3WChuKXtsZXQgdD1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2xldCBlO2Zvcig7ZT1aMy5leGVjKG4pOyl0LnB1c2goZVsxXSk7WjMubGFzdEluZGV4PTB9cmV0dXJuIHR9ZnVuY3Rpb24gS3gobix0LGUpe2xldCBpPW4udG9TdHJpbmcoKSxyPWkucmVwbGFjZShaMywobyxzKT0+e2xldCBhPXRbc107cmV0dXJuIG51bGw9PWEmJihlLnB1c2gobmV3IE10KDMwMDMsITEpKSxhPSIiKSxhLnRvU3RyaW5nKCl9KTtyZXR1cm4gcj09aT9uOnJ9ZnVuY3Rpb24gQVQobil7bGV0IHQ9W10sZT1uLm5leHQoKTtmb3IoOyFlLmRvbmU7KXQucHVzaChlLnZhbHVlKSxlPW4ubmV4dCgpO3JldHVybiB0fXZhciBmTWU9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9uIHBCKG4pe3JldHVybiBuLnJlcGxhY2UoZk1lLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBtTWUobil7cmV0dXJuIG4ucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIExhKG4sdCxlKXtzd2l0Y2godC50eXBlKXtjYXNlIDc6cmV0dXJuIG4udmlzaXRUcmlnZ2VyKHQsZSk7Y2FzZSAwOnJldHVybiBuLnZpc2l0U3RhdGUodCxlKTtjYXNlIDE6cmV0dXJuIG4udmlzaXRUcmFuc2l0aW9uKHQsZSk7Y2FzZSAyOnJldHVybiBuLnZpc2l0U2VxdWVuY2UodCxlKTtjYXNlIDM6cmV0dXJuIG4udmlzaXRHcm91cCh0LGUpO2Nhc2UgNDpyZXR1cm4gbi52aXNpdEFuaW1hdGUodCxlKTtjYXNlIDU6cmV0dXJuIG4udmlzaXRLZXlmcmFtZXModCxlKTtjYXNlIDY6cmV0dXJuIG4udmlzaXRTdHlsZSh0LGUpO2Nhc2UgODpyZXR1cm4gbi52aXNpdFJlZmVyZW5jZSh0LGUpO2Nhc2UgOTpyZXR1cm4gbi52aXNpdEFuaW1hdGVDaGlsZCh0LGUpO2Nhc2UgMTA6cmV0dXJuIG4udmlzaXRBbmltYXRlUmVmKHQsZSk7Y2FzZSAxMTpyZXR1cm4gbi52aXNpdFF1ZXJ5KHQsZSk7Y2FzZSAxMjpyZXR1cm4gbi52aXNpdFN0YWdnZXIodCxlKTtkZWZhdWx0OnRocm93IG5ldyBNdCgzMDA0LCExKX19ZnVuY3Rpb24gTVgobix0KXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUobilbdF19ZnVuY3Rpb24gYk1lKG4sdCl7bGV0IGU9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGk9PmZ1bmN0aW9uKG4sdCxlKXtpZigiOiI9PW5bMF0pe2xldCBsPWZ1bmN0aW9uKG4sdCl7c3dpdGNoKG4pe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKT5wYXJzZUZsb2F0KGUpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGUsaSk9PnBhcnNlRmxvYXQoaSk8cGFyc2VGbG9hdChlKTtkZWZhdWx0OnJldHVybiB0LnB1c2gobmV3IE10KDMwMTYsITEpKSwiKiA9PiAqIn19KG4sZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGwpcmV0dXJuIHZvaWQgdC5wdXNoKGwpO249bH1sZXQgaT1uLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1pfHxpLmxlbmd0aDw0KXJldHVybiBlLnB1c2gobmV3IE10KDMwMTUsITEpKSx0O2xldCByPWlbMV0sbz1pWzJdLHM9aVszXTt0LnB1c2goclgocixzKSksIjwiPT1vWzBdJiYhKCIqIj09ciYmIioiPT1zKSYmdC5wdXNoKHJYKHMscikpfShpLGUsdCkpOmUucHVzaChuKSxlfXZhciBNVD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksU1Q9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5jdGlvbiByWChuLHQpe2xldCBlPU1ULmhhcyhuKXx8U1QuaGFzKG4pLGk9TVQuaGFzKHQpfHxTVC5oYXModCk7cmV0dXJuKHIsbyk9PntsZXQgcz0iKiI9PW58fG49PXIsYT0iKiI9PXR8fHQ9PW87cmV0dXJuIXMmJmUmJiJib29sZWFuIj09dHlwZW9mIHImJihzPXI/TVQuaGFzKG4pOlNULmhhcyhuKSksIWEmJmkmJiJib29sZWFuIj09dHlwZW9mIG8mJihhPW8/TVQuaGFzKHQpOlNULmhhcyh0KSkscyYmYX19dmFyIHdNZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBEWChuLHQsZSxpKXtyZXR1cm4gbmV3IEozKG4pLmJ1aWxkKHQsZSxpKX12YXIgSjM9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZHJpdmVyPXR9YnVpbGQodCxlLGkpe2xldCByPW5ldyAkMyhlKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShyKSxMYSh0aGlzLFh4KHQpLHIpfV9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHQpe3QuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsdC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0LmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksdC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcih0LGUpe2xldCBpPWUucXVlcnlDb3VudD0wLHI9ZS5kZXBDb3VudD0wLG89W10scz1bXTtyZXR1cm4iQCI9PXQubmFtZS5jaGFyQXQoMCkmJmUuZXJyb3JzLnB1c2gobmV3IE10KDMwMDYsITEpKSx0LmRlZmluaXRpb25zLmZvckVhY2goYT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoZSksMD09YS50eXBlKXtsZXQgbD1hLGM9bC5uYW1lO2MudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2godT0+e2wubmFtZT11LG8ucHVzaCh0aGlzLnZpc2l0U3RhdGUobCxlKSl9KSxsLm5hbWU9Y31lbHNlIGlmKDE9PWEudHlwZSl7bGV0IGw9dGhpcy52aXNpdFRyYW5zaXRpb24oYSxlKTtpKz1sLnF1ZXJ5Q291bnQscis9bC5kZXBDb3VudCxzLnB1c2gobCl9ZWxzZSBlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA3LCExKSl9KSx7dHlwZTo3LG5hbWU6dC5uYW1lLHN0YXRlczpvLHRyYW5zaXRpb25zOnMscXVlcnlDb3VudDppLGRlcENvdW50OnIsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKHQsZSl7bGV0IGk9dGhpcy52aXNpdFN0eWxlKHQuc3R5bGVzLGUpLHI9dC5vcHRpb25zJiZ0Lm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGkuY29udGFpbnNEeW5hbWljU3R5bGVzKXtsZXQgbz1uZXcgU2V0LHM9cnx8e307aS5zdHlsZXMuZm9yRWFjaChhPT57YSBpbnN0YW5jZW9mIE1hcCYmYS5mb3JFYWNoKGw9Pnt3WChsKS5mb3JFYWNoKGM9PntzLmhhc093blByb3BlcnR5KGMpfHxvLmFkZChjKX0pfSl9KSxvLnNpemUmJihBVChvLnZhbHVlcygpKSxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDA4LCExKSkpfXJldHVybnt0eXBlOjAsbmFtZTp0Lm5hbWUsc3R5bGU6aSxvcHRpb25zOnI/e3BhcmFtczpyfTpudWxsfX12aXNpdFRyYW5zaXRpb24odCxlKXtlLnF1ZXJ5Q291bnQ9MCxlLmRlcENvdW50PTA7bGV0IGk9TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSk7cmV0dXJue3R5cGU6MSxtYXRjaGVyczpiTWUodC5leHByLGUuZXJyb3JzKSxhbmltYXRpb246aSxxdWVyeUNvdW50OmUucXVlcnlDb3VudCxkZXBDb3VudDplLmRlcENvdW50LG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZSh0LGUpe3JldHVybnt0eXBlOjIsc3RlcHM6dC5zdGVwcy5tYXAoaT0+TGEodGhpcyxpLGUpKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0R3JvdXAodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lLHI9MCxvPXQuc3RlcHMubWFwKHM9PntlLmN1cnJlbnRUaW1lPWk7bGV0IGE9TGEodGhpcyxzLGUpO3JldHVybiByPU1hdGgubWF4KHIsZS5jdXJyZW50VGltZSksYX0pO3JldHVybiBlLmN1cnJlbnRUaW1lPXIse3R5cGU6MyxzdGVwczpvLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlKHQsZSl7bGV0IGk9ZnVuY3Rpb24obix0KXtpZihuLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKXJldHVybiBuO2lmKCJudW1iZXIiPT10eXBlb2YgbilyZXR1cm4gejMoRFQobix0KS5kdXJhdGlvbiwwLCIiKTtsZXQgZT1uO2lmKGUuc3BsaXQoL1xzKy8pLnNvbWUobz0+InsiPT1vLmNoYXJBdCgwKSYmInsiPT1vLmNoYXJBdCgxKSkpe2xldCBvPXozKDAsMCwiIik7cmV0dXJuIG8uZHluYW1pYz0hMCxvLnN0clZhbHVlPWUsb31sZXQgcj1EVChlLHQpO3JldHVybiB6MyhyLmR1cmF0aW9uLHIuZGVsYXksci5lYXNpbmcpfSh0LnRpbWluZ3MsZS5lcnJvcnMpO2UuY3VycmVudEFuaW1hdGVUaW1pbmdzPWk7bGV0IHIsbz10LnN0eWxlcz90LnN0eWxlczpybih7fSk7aWYoNT09by50eXBlKXI9dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpO2Vsc2V7bGV0IHM9dC5zdHlsZXMsYT0hMTtpZighcyl7YT0hMDtsZXQgYz17fTtpLmVhc2luZyYmKGMuZWFzaW5nPWkuZWFzaW5nKSxzPXJuKGMpfWUuY3VycmVudFRpbWUrPWkuZHVyYXRpb24raS5kZWxheTtsZXQgbD10aGlzLnZpc2l0U3R5bGUocyxlKTtsLmlzRW1wdHlTdGVwPWEscj1sfXJldHVybiBlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczppLHN0eWxlOnIsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKHQsZSl7bGV0IGk9dGhpcy5fbWFrZVN0eWxlQXN0KHQsZSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoaSxlKSxpfV9tYWtlU3R5bGVBc3QodCxlKXtsZXQgaT1bXSxyPUFycmF5LmlzQXJyYXkodC5zdHlsZXMpP3Quc3R5bGVzOlt0LnN0eWxlc107Zm9yKGxldCBhIG9mIHIpInN0cmluZyI9PXR5cGVvZiBhP2E9PT11dT9pLnB1c2goYSk6ZS5lcnJvcnMucHVzaChuZXcgTXQoMzAwMiwhMSkpOmkucHVzaCh4WChhKSk7bGV0IG89ITEscz1udWxsO3JldHVybiBpLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJihhLmhhcygiZWFzaW5nIikmJihzPWEuZ2V0KCJlYXNpbmciKSxhLmRlbGV0ZSgiZWFzaW5nIikpLCFvKSlmb3IobGV0IGwgb2YgYS52YWx1ZXMoKSlpZihsLnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7bz0hMDticmVha319KSx7dHlwZTo2LHN0eWxlczppLGVhc2luZzpzLG9mZnNldDp0Lm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6byxvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lLG89ZS5jdXJyZW50VGltZTtpJiZvPjAmJihvLT1pLmR1cmF0aW9uK2kuZGVsYXkpLHQuc3R5bGVzLmZvckVhY2gocz0+eyJzdHJpbmciIT10eXBlb2YgcyYmcy5mb3JFYWNoKChhLGwpPT57bGV0IGM9ZS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGUuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLHU9Yy5nZXQobCksZD0hMDt1JiYobyE9ciYmbz49dS5zdGFydFRpbWUmJnI8PXUuZW5kVGltZSYmKGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTAsITEpKSxkPSExKSxvPXUuc3RhcnRUaW1lKSxkJiZjLnNldChsLHtzdGFydFRpbWU6byxlbmRUaW1lOnJ9KSxlLm9wdGlvbnMmJmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10LnBhcmFtc3x8e30scj13WChuKTtyLmxlbmd0aCYmci5mb3JFYWNoKG89PntpLmhhc093blByb3BlcnR5KG8pfHxlLnB1c2gobmV3IE10KDMwMDEsITEpKX0pfShhLGUub3B0aW9ucyxlLmVycm9ycyl9KX0pfXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9e3R5cGU6NSxzdHlsZXM6W10sb3B0aW9uczpudWxsfTtpZighZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGUuZXJyb3JzLnB1c2gobmV3IE10KDMwMTEsITEpKSxpO2xldCBvPTAscz1bXSxhPSExLGw9ITEsYz0wLHU9dC5zdGVwcy5tYXAoXz0+e2xldCB5PXRoaXMuX21ha2VTdHlsZUFzdChfLGUpLEk9bnVsbCE9eS5vZmZzZXQ/eS5vZmZzZXQ6ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBudWxsO2xldCB0PW51bGw7aWYoQXJyYXkuaXNBcnJheShuKSluLmZvckVhY2goZT0+e2lmKGUgaW5zdGFuY2VvZiBNYXAmJmUuaGFzKCJvZmZzZXQiKSl7bGV0IGk9ZTt0PXBhcnNlRmxvYXQoaS5nZXQoIm9mZnNldCIpKSxpLmRlbGV0ZSgib2Zmc2V0Iil9fSk7ZWxzZSBpZihuIGluc3RhbmNlb2YgTWFwJiZuLmhhcygib2Zmc2V0Iikpe2xldCBlPW47dD1wYXJzZUZsb2F0KGUuZ2V0KCJvZmZzZXQiKSksZS5kZWxldGUoIm9mZnNldCIpfXJldHVybiB0fSh5LnN0eWxlcyksQT0wO3JldHVybiBudWxsIT1JJiYobysrLEE9eS5vZmZzZXQ9SSksbD1sfHxBPDB8fEE+MSxhPWF8fEE8YyxjPUEscy5wdXNoKEEpLHl9KTtsJiZlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEyLCExKSksYSYmZS5lcnJvcnMucHVzaChuZXcgTXQoMzIwMCwhMSkpO2xldCBkPXQuc3RlcHMubGVuZ3RoLHA9MDtvPjAmJm88ZD9lLmVycm9ycy5wdXNoKG5ldyBNdCgzMjAyLCExKSk6MD09byYmKHA9MS8oZC0xKSk7bGV0IGg9ZC0xLGY9ZS5jdXJyZW50VGltZSxtPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzLEM9bS5kdXJhdGlvbjtyZXR1cm4gdS5mb3JFYWNoKChfLHkpPT57bGV0IEk9cD4wP3k9PWg/MTpwKnk6c1t5XSxBPUkqQztlLmN1cnJlbnRUaW1lPWYrbS5kZWxheStBLG0uZHVyYXRpb249QSx0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KF8sZSksXy5vZmZzZXQ9SSxpLnN0eWxlcy5wdXNoKF8pfSksaX12aXNpdFJlZmVyZW5jZSh0LGUpe3JldHVybnt0eXBlOjgsYW5pbWF0aW9uOkxhKHRoaXMsWHgodC5hbmltYXRpb24pLGUpLG9wdGlvbnM6TGYodC5vcHRpb25zKX19dmlzaXRBbmltYXRlQ2hpbGQodCxlKXtyZXR1cm4gZS5kZXBDb3VudCsrLHt0eXBlOjksb3B0aW9uczpMZih0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYodCxlKXtyZXR1cm57dHlwZToxMCxhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixlKSxvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRRdWVyeVNlbGVjdG9yLHI9dC5vcHRpb25zfHx7fTtlLnF1ZXJ5Q291bnQrKyxlLmN1cnJlbnRRdWVyeT10O2xldFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PSEhbi5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoZT0+IjpzZWxmIj09ZSk7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSh3TWUsIiIpKSxuPW4ucmVwbGFjZSgvQFwqL2csVFQpLnJlcGxhY2UoL0BcdysvZyxlPT5UVCsiLSIrZS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLFEzKSxbbix0XX0odC5zZWxlY3Rvcik7ZS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1pLmxlbmd0aD9pKyIgIitvOm8sQmEoZS5jb2xsZWN0ZWRTdHlsZXMsZS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtsZXQgYT1MYSh0aGlzLFh4KHQuYW5pbWF0aW9uKSxlKTtyZXR1cm4gZS5jdXJyZW50UXVlcnk9bnVsbCxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWkse3R5cGU6MTEsc2VsZWN0b3I6byxsaW1pdDpyLmxpbWl0fHwwLG9wdGlvbmFsOiEhci5vcHRpb25hbCxpbmNsdWRlU2VsZjpzLGFuaW1hdGlvbjphLG9yaWdpbmFsU2VsZWN0b3I6dC5zZWxlY3RvcixvcHRpb25zOkxmKHQub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcih0LGUpe2UuY3VycmVudFF1ZXJ5fHxlLmVycm9ycy5wdXNoKG5ldyBNdCgzMDEzLCExKSk7bGV0IGk9ImZ1bGwiPT09dC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06RFQodC50aW1pbmdzLGUuZXJyb3JzLCEwKTtyZXR1cm57dHlwZToxMixhbmltYXRpb246TGEodGhpcyxYeCh0LmFuaW1hdGlvbiksZSksdGltaW5nczppLG9wdGlvbnM6bnVsbH19fSwkMz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmVycm9ycz10LHRoaXMucXVlcnlDb3VudD0wLHRoaXMuZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5kPW5ldyBTZXR9fTtmdW5jdGlvbiBMZihuKXtyZXR1cm4gbj8obj1uQyhuKSkucGFyYW1zJiYobi5wYXJhbXM9ZnVuY3Rpb24obil7cmV0dXJuIG4/bkMobik6bnVsbH0obi5wYXJhbXMpKTpuPXt9LG59ZnVuY3Rpb24gejMobix0LGUpe3JldHVybntkdXJhdGlvbjpuLGRlbGF5OnQsZWFzaW5nOmV9fWZ1bmN0aW9uIGhCKG4sdCxlLGkscixvLHM9bnVsbCxhPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6bixrZXlmcmFtZXM6dCxwcmVTdHlsZVByb3BzOmUscG9zdFN0eWxlUHJvcHM6aSxkdXJhdGlvbjpyLGRlbGF5Om8sdG90YWxUaW1lOnIrbyxlYXNpbmc6cyxzdWJUaW1lbGluZTphfX12YXIgWng9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQodCl7cmV0dXJuIHRoaXMuX21hcC5nZXQodCl8fFtdfWFwcGVuZCh0LGUpe2xldCBpPXRoaXMuX21hcC5nZXQodCk7aXx8dGhpcy5fbWFwLnNldCh0LGk9W10pLGkucHVzaCguLi5lKX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19LElNZT1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksUk1lPW5ldyBSZWdFeHAoIjpsZWF2ZSIsImciKTtmdW5jdGlvbiBBWChuLHQsZSxpLHIsbz1uZXcgTWFwLHM9bmV3IE1hcCxhLGwsYz1bXSl7cmV0dXJuKG5ldyBlQikuYnVpbGRLZXlmcmFtZXMobix0LGUsaSxyLG8scyxhLGwsYyl9dmFyIGVCPWNsYXNze2J1aWxkS2V5ZnJhbWVzKHQsZSxpLHIsbyxzLGEsbCxjLHU9W10pe2M9Y3x8bmV3IFp4O2xldCBkPW5ldyBKeCh0LGUsYyxyLG8sdSxbXSk7ZC5vcHRpb25zPWw7bGV0IHA9bC5kZWxheT9mZChsLmRlbGF5KTowO2QuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAocCksZC5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtzXSxudWxsLGQuZXJyb3JzLGwpLExhKHRoaXMsaSxkKTtsZXQgaD1kLnRpbWVsaW5lcy5maWx0ZXIoZj0+Zi5jb250YWluc0FuaW1hdGlvbigpKTtpZihoLmxlbmd0aCYmYS5zaXplKXtsZXQgZjtmb3IobGV0IG09aC5sZW5ndGgtMTttPj0wO20tLSl7bGV0IEM9aFttXTtpZihDLmVsZW1lbnQ9PT1lKXtmPUM7YnJlYWt9fWYmJiFmLmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJmYuc2V0U3R5bGVzKFthXSxudWxsLGQuZXJyb3JzLGwpfXJldHVybiBoLmxlbmd0aD9oLm1hcChmPT5mLmJ1aWxkS2V5ZnJhbWVzKCkpOltoQihlLFtdLFtdLFtdLDAscCwiIiwhMSldfXZpc2l0VHJpZ2dlcih0LGUpe312aXNpdFN0YXRlKHQsZSl7fXZpc2l0VHJhbnNpdGlvbih0LGUpe312aXNpdEFuaW1hdGVDaGlsZCh0LGUpe2xldCBpPWUuc3ViSW5zdHJ1Y3Rpb25zLmdldChlLmVsZW1lbnQpO2lmKGkpe2xldCByPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpLG89ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUscz10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhpLHIsci5vcHRpb25zKTtvIT1zJiZlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShzKX1lLnByZXZpb3VzTm9kZT10fXZpc2l0QW5pbWF0ZVJlZih0LGUpe2xldCBpPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO2kudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW3Qub3B0aW9ucyx0LmFuaW1hdGlvbi5vcHRpb25zXSxlLGkpLHRoaXMudmlzaXRSZWZlcmVuY2UodC5hbmltYXRpb24saSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGUucHJldmlvdXNOb2RlPXR9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKHQsZSxpKXtmb3IobGV0IHIgb2YgdCl7bGV0IG89cj8uZGVsYXk7aWYobyl7bGV0IHM9Im51bWJlciI9PXR5cGVvZiBvP286ZmQoS3gobyxyPy5wYXJhbXM/P3t9LGUuZXJyb3JzKSk7aS5kZWxheU5leHRTdGVwKHMpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKHQsZSxpKXtsZXQgbz1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxzPW51bGwhPWkuZHVyYXRpb24/ZmQoaS5kdXJhdGlvbik6bnVsbCxhPW51bGwhPWkuZGVsYXk/ZmQoaS5kZWxheSk6bnVsbDtyZXR1cm4gMCE9PXMmJnQuZm9yRWFjaChsPT57bGV0IGM9ZS5hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUobCxzLGEpO289TWF0aC5tYXgobyxjLmR1cmF0aW9uK2MuZGVsYXkpfSksb312aXNpdFJlZmVyZW5jZSh0LGUpe2UudXBkYXRlT3B0aW9ucyh0Lm9wdGlvbnMsITApLExhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dH12aXNpdFNlcXVlbmNlKHQsZSl7bGV0IGk9ZS5zdWJDb250ZXh0Q291bnQscj1lLG89dC5vcHRpb25zO2lmKG8mJihvLnBhcmFtc3x8by5kZWxheSkmJihyPWUuY3JlYXRlU3ViQ29udGV4dChvKSxyLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPW8uZGVsYXkpKXs2PT1yLnByZXZpb3VzTm9kZS50eXBlJiYoci5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksci5wcmV2aW91c05vZGU9UFQpO2xldCBzPWZkKG8uZGVsYXkpO3IuZGVsYXlOZXh0U3RlcChzKX10LnN0ZXBzLmxlbmd0aCYmKHQuc3RlcHMuZm9yRWFjaChzPT5MYSh0aGlzLHMscikpLHIuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHIuc3ViQ29udGV4dENvdW50PmkmJnIudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRHcm91cCh0LGUpe2xldCBpPVtdLHI9ZS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsbz10Lm9wdGlvbnMmJnQub3B0aW9ucy5kZWxheT9mZCh0Lm9wdGlvbnMuZGVsYXkpOjA7dC5zdGVwcy5mb3JFYWNoKHM9PntsZXQgYT1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zKTtvJiZhLmRlbGF5TmV4dFN0ZXAobyksTGEodGhpcyxzLGEpLHI9TWF0aC5tYXgocixhLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksaS5wdXNoKGEuY3VycmVudFRpbWVsaW5lKX0pLGkuZm9yRWFjaChzPT5lLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHMpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyKSxlLnByZXZpb3VzTm9kZT10fV92aXNpdFRpbWluZyh0LGUpe2lmKHQuZHluYW1pYyl7bGV0IGk9dC5zdHJWYWx1ZTtyZXR1cm4gRFQoZS5wYXJhbXM/S3goaSxlLnBhcmFtcyxlLmVycm9ycyk6aSxlLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOnQuZHVyYXRpb24sZGVsYXk6dC5kZWxheSxlYXNpbmc6dC5lYXNpbmd9fXZpc2l0QW5pbWF0ZSh0LGUpe2xldCBpPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKHQudGltaW5ncyxlKSxyPWUuY3VycmVudFRpbWVsaW5lO2kuZGVsYXkmJihlLmluY3JlbWVudFRpbWUoaS5kZWxheSksci5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7bGV0IG89dC5zdHlsZTs1PT1vLnR5cGU/dGhpcy52aXNpdEtleWZyYW1lcyhvLGUpOihlLmluY3JlbWVudFRpbWUoaS5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKG8sZSksci5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxlLnByZXZpb3VzTm9kZT10fXZpc2l0U3R5bGUodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZSxyPWUuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFyJiZpLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSYmaS5mb3J3YXJkRnJhbWUoKTtsZXQgbz1yJiZyLmVhc2luZ3x8dC5lYXNpbmc7dC5pc0VtcHR5U3RlcD9pLmFwcGx5RW1wdHlTdGVwKG8pOmkuc2V0U3R5bGVzKHQuc3R5bGVzLG8sZS5lcnJvcnMsZS5vcHRpb25zKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0S2V5ZnJhbWVzKHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3Mscj1lLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixvPWkuZHVyYXRpb24sYT1lLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7YS5lYXNpbmc9aS5lYXNpbmcsdC5zdHlsZXMuZm9yRWFjaChsPT57YS5mb3J3YXJkVGltZSgobC5vZmZzZXR8fDApKm8pLGEuc2V0U3R5bGVzKGwuc3R5bGVzLGwuZWFzaW5nLGUuZXJyb3JzLGUub3B0aW9ucyksYS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoYSksZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocitvKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0UXVlcnkodCxlKXtsZXQgaT1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxyPXQub3B0aW9uc3x8e30sbz1yLmRlbGF5P2ZkKHIuZGVsYXkpOjA7byYmKDY9PT1lLnByZXZpb3VzTm9kZS50eXBlfHwwPT1pJiZlLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksZS5wcmV2aW91c05vZGU9UFQpO2xldCBzPWksYT1lLmludm9rZVF1ZXJ5KHQuc2VsZWN0b3IsdC5vcmlnaW5hbFNlbGVjdG9yLHQubGltaXQsdC5pbmNsdWRlU2VsZiwhIXIub3B0aW9uYWwsZS5lcnJvcnMpO2UuY3VycmVudFF1ZXJ5VG90YWw9YS5sZW5ndGg7bGV0IGw9bnVsbDthLmZvckVhY2goKGMsdSk9PntlLmN1cnJlbnRRdWVyeUluZGV4PXU7bGV0IGQ9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyxjKTtvJiZkLmRlbGF5TmV4dFN0ZXAobyksYz09PWUuZWxlbWVudCYmKGw9ZC5jdXJyZW50VGltZWxpbmUpLExhKHRoaXMsdC5hbmltYXRpb24sZCksZC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkscz1NYXRoLm1heChzLGQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGUuY3VycmVudFF1ZXJ5SW5kZXg9MCxlLmN1cnJlbnRRdWVyeVRvdGFsPTAsZS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUocyksbCYmKGUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCksZS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTdGFnZ2VyKHQsZSl7bGV0IGk9ZS5wYXJlbnRDb250ZXh0LHI9ZS5jdXJyZW50VGltZWxpbmUsbz10LnRpbWluZ3Mscz1NYXRoLmFicyhvLmR1cmF0aW9uKSxhPXMqKGUuY3VycmVudFF1ZXJ5VG90YWwtMSksbD1zKmUuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKG8uZHVyYXRpb248MD8icmV2ZXJzZSI6by5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6bD1hLWw7YnJlYWs7Y2FzZSJmdWxsIjpsPWkuY3VycmVudFN0YWdnZXJUaW1lfWxldCB1PWUuY3VycmVudFRpbWVsaW5lO2wmJnUuZGVsYXlOZXh0U3RlcChsKTtsZXQgZD11LmN1cnJlbnRUaW1lO0xhKHRoaXMsdC5hbmltYXRpb24sZSksZS5wcmV2aW91c05vZGU9dCxpLmN1cnJlbnRTdGFnZ2VyVGltZT1yLmN1cnJlbnRUaW1lLWQrKHIuc3RhcnRUaW1lLWkuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fSxQVD17fSxKeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMuX2RyaXZlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWksdGhpcy5fZW50ZXJDbGFzc05hbWU9cix0aGlzLl9sZWF2ZUNsYXNzTmFtZT1vLHRoaXMuZXJyb3JzPXMsdGhpcy50aW1lbGluZXM9YSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVBULHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1sfHxuZXcgRzAodGhpcy5fZHJpdmVyLGUsMCksYS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBkYXRlT3B0aW9ucyh0LGUpe2lmKCF0KXJldHVybjtsZXQgaT10LHI9dGhpcy5vcHRpb25zO251bGwhPWkuZHVyYXRpb24mJihyLmR1cmF0aW9uPWZkKGkuZHVyYXRpb24pKSxudWxsIT1pLmRlbGF5JiYoci5kZWxheT1mZChpLmRlbGF5KSk7bGV0IG89aS5wYXJhbXM7aWYobyl7bGV0IHM9ci5wYXJhbXM7c3x8KHM9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMobykuZm9yRWFjaChhPT57KCFlfHwhcy5oYXNPd25Qcm9wZXJ0eShhKSkmJihzW2FdPUt4KG9bYV0scyx0aGlzLmVycm9ycykpfSl9fV9jb3B5T3B0aW9ucygpe2xldCB0PXt9O2lmKHRoaXMub3B0aW9ucyl7bGV0IGU9dGhpcy5vcHRpb25zLnBhcmFtcztpZihlKXtsZXQgaT10LnBhcmFtcz17fTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntpW3JdPWVbcl19KX19cmV0dXJuIHR9Y3JlYXRlU3ViQ29udGV4dCh0PW51bGwsZSxpKXtsZXQgcj1lfHx0aGlzLmVsZW1lbnQsbz1uZXcgSngodGhpcy5fZHJpdmVyLHIsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGluZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhyLGl8fDApKTtyZXR1cm4gby5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsby5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3Msby5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksby51cGRhdGVPcHRpb25zKHQpLG8uY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxvLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsby5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxvfXRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh0KXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9UFQsdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsdCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKHQsZSxpKXtsZXQgcj17ZHVyYXRpb246ZT8/dC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoaT8/MCkrdC5kZWxheSxlYXNpbmc6IiJ9LG89bmV3IHRCKHRoaXMuX2RyaXZlcix0LmVsZW1lbnQsdC5rZXlmcmFtZXMsdC5wcmVTdHlsZVByb3BzLHQucG9zdFN0eWxlUHJvcHMscix0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChvKSxyfWluY3JlbWVudFRpbWUodCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24rdCl9ZGVsYXlOZXh0U3RlcCh0KXt0PjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAodCl9aW52b2tlUXVlcnkodCxlLGkscixvLHMpe2xldCBhPVtdO2lmKHImJmEucHVzaCh0aGlzLmVsZW1lbnQpLHQubGVuZ3RoPjApe3Q9KHQ9dC5yZXBsYWNlKElNZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKFJNZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBjPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsdCwxIT1pKTswIT09aSYmKGM9aTwwP2Muc2xpY2UoYy5sZW5ndGgraSxjLmxlbmd0aCk6Yy5zbGljZSgwLGkpKSxhLnB1c2goLi4uYyl9cmV0dXJuIW8mJjA9PWEubGVuZ3RoJiZzLnB1c2gobmV3IE10KDMwMTQsITEpKSxhfX0sRzA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdGFydFRpbWU9aSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9cix0aGlzLmR1cmF0aW9uPTAsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChlLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAodCl7bGV0IGU9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8ZT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK3QpLGUmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpOnRoaXMuc3RhcnRUaW1lKz10fWZvcmsodCxlKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgRzAodGhpcy5fZHJpdmVyLHQsZXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9jdXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUodCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0aGlzLmR1cmF0aW9uPXQsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKHQsZSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQodCxlKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KHQse3RpbWU6dGhpcy5jdXJyZW50VGltZSx2YWx1ZTplfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKHQpe3QmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLHQpO2ZvcihsZXRbZSxpXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChlLGl8fHV1KSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdXUpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVzKHQsZSxpLHIpe2UmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGUpO2xldCBvPXImJnIucGFyYW1zfHx7fSxzPWZ1bmN0aW9uKG4sdCl7bGV0IGksZT1uZXcgTWFwO3JldHVybiBuLmZvckVhY2gocj0+e2lmKCIqIj09PXIpe2k9aXx8dC5rZXlzKCk7Zm9yKGxldCBvIG9mIGkpZS5zZXQobyx1dSl9ZWxzZSBqMChyLGUpfSksZX0odCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFthLGxdb2Ygcyl7bGV0IGM9S3gobCxvLGkpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGEsYyksdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoYSl8fHRoaXMuX2JhY2tGaWxsLnNldChhLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChhKT8/dXUpLHRoaXMuX3VwZGF0ZVN0eWxlKGEsYyl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKHQsZSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGUpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGUsdCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFt0LGVdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldCh0LGUpLHRoaXMuX3VwZGF0ZVN0eWxlKHQsZSl9Z2V0RmluYWxLZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7bGV0IHQ9W107Zm9yKGxldCBlIGluIHRoaXMuX2N1cnJlbnRLZXlmcmFtZSl0LnB1c2goZSk7cmV0dXJuIHR9bWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyh0KXt0Ll9zdHlsZVN1bW1hcnkuZm9yRWFjaCgoZSxpKT0+e2xldCByPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoaSk7KCFyfHxlLnRpbWU+ci50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoaSxlLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtsZXQgdD1uZXcgU2V0LGU9bmV3IFNldCxpPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb24scj1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoYSxsKT0+e2xldCBjPWowKGEsbmV3IE1hcCx0aGlzLl9iYWNrRmlsbCk7Yy5mb3JFYWNoKCh1LGQpPT57IiEiPT09dT90LmFkZChkKTp1PT09dXUmJmUuYWRkKGQpfSksaXx8Yy5zZXQoIm9mZnNldCIsbC90aGlzLmR1cmF0aW9uKSxyLnB1c2goYyl9KTtsZXQgbz10LnNpemU/QVQodC52YWx1ZXMoKSk6W10scz1lLnNpemU/QVQoZS52YWx1ZXMoKSk6W107aWYoaSl7bGV0IGE9clswXSxsPW5ldyBNYXAoYSk7YS5zZXQoIm9mZnNldCIsMCksbC5zZXQoIm9mZnNldCIsMSkscj1bYSxsXX1yZXR1cm4gaEIodGhpcy5lbGVtZW50LHIsbyxzLHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX0sdEI9Y2xhc3MgZXh0ZW5kcyBHMHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhPSExKXtzdXBlcih0LGUscy5kZWxheSksdGhpcy5rZXlmcmFtZXM9aSx0aGlzLnByZVN0eWxlUHJvcHM9cix0aGlzLnBvc3RTdHlsZVByb3BzPW8sdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9YSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnMuZHVyYXRpb24sZGVsYXk6cy5kZWxheSxlYXNpbmc6cy5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IHQ9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmUsZHVyYXRpb246aSxlYXNpbmc6cn09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZlKXtsZXQgbz1bXSxzPWkrZSxhPWUvcyxsPWowKHRbMF0pO2wuc2V0KCJvZmZzZXQiLDApLG8ucHVzaChsKTtsZXQgYz1qMCh0WzBdKTtjLnNldCgib2Zmc2V0IixzWChhKSksby5wdXNoKGMpO2xldCB1PXQubGVuZ3RoLTE7Zm9yKGxldCBkPTE7ZDw9dTtkKyspe2xldCBwPWowKHRbZF0pLGg9cC5nZXQoIm9mZnNldCIpO3Auc2V0KCJvZmZzZXQiLHNYKChlK2gqaSkvcykpLG8ucHVzaChwKX1pPXMsZT0wLHI9IiIsdD1vfXJldHVybiBoQih0aGlzLmVsZW1lbnQsdCx0aGlzLnByZVN0eWxlUHJvcHMsdGhpcy5wb3N0U3R5bGVQcm9wcyxpLGUsciwhMCl9fTtmdW5jdGlvbiBzWChuLHQ9Myl7bGV0IGU9TWF0aC5wb3coMTAsdC0xKTtyZXR1cm4gTWF0aC5yb3VuZChuKmUpL2V9dmFyIFZmPWNsYXNze30sa01lPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0IiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKSxSVD1jbGFzcyBleHRlbmRzIFZme25vcm1hbGl6ZVByb3BlcnR5TmFtZSh0LGUpe3JldHVybiBwQih0KX1ub3JtYWxpemVTdHlsZVZhbHVlKHQsZSxpLHIpe2xldCBvPSIiLHM9aS50b1N0cmluZygpLnRyaW0oKTtpZihrTWUuaGFzKGUpJiYwIT09aSYmIjAiIT09aSlpZigibnVtYmVyIj09dHlwZW9mIGkpbz0icHgiO2Vsc2V7bGV0IGE9aS5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiZyLnB1c2gobmV3IE10KDMwMDUsITEpKX1yZXR1cm4gcytvfX07ZnVuY3Rpb24gYVgobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7cmV0dXJue3R5cGU6MCxlbGVtZW50Om4sdHJpZ2dlck5hbWU6dCxpc1JlbW92YWxUcmFuc2l0aW9uOnIsZnJvbVN0YXRlOmUsZnJvbVN0eWxlczpvLHRvU3RhdGU6aSx0b1N0eWxlczpzLHRpbWVsaW5lczphLHF1ZXJpZWRFbGVtZW50czpsLHByZVN0eWxlUHJvcHM6Yyxwb3N0U3R5bGVQcm9wczp1LHRvdGFsVGltZTpkLGVycm9yczpwfX12YXIgajM9e30sT1Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3RyaWdnZXJOYW1lPXQsdGhpcy5hc3Q9ZSx0aGlzLl9zdGF0ZVN0eWxlcz1pfW1hdGNoKHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBuLnNvbWUobz0+byh0LGUsaSxyKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLHQsZSxpLHIpfWJ1aWxkU3R5bGVzKHQsZSxpKXtsZXQgcj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09dCYmKHI9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KHQ/LnRvU3RyaW5nKCkpfHxyKSxyP3IuYnVpbGRTdHlsZXMoZSxpKTpuZXcgTWFwfWJ1aWxkKHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPVtdLHA9dGhpcy5hc3Qub3B0aW9ucyYmdGhpcy5hc3Qub3B0aW9ucy5wYXJhbXN8fGozLGY9dGhpcy5idWlsZFN0eWxlcyhpLGEmJmEucGFyYW1zfHxqMyxkKSxtPWwmJmwucGFyYW1zfHxqMyxDPXRoaXMuYnVpbGRTdHlsZXMocixtLGQpLF89bmV3IFNldCx5PW5ldyBNYXAsST1uZXcgTWFwLEE9InZvaWQiPT09cixPPXtwYXJhbXM6Tk1lKG0scCksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LGVlPXU/W106QVgodCxlLHRoaXMuYXN0LmFuaW1hdGlvbixvLHMsZixDLE8sYyxkKSxYPTA7aWYoZWUuZm9yRWFjaChmZT0+e1g9TWF0aC5tYXgoZmUuZHVyYXRpb24rZmUuZGVsYXksWCl9KSxkLmxlbmd0aClyZXR1cm4gYVgoZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsQSxmLEMsW10sW10seSxJLFgsZCk7ZWUuZm9yRWFjaChmZT0+e2xldCB2ZT1mZS5lbGVtZW50LFQ9QmEoeSx2ZSxuZXcgU2V0KTtmZS5wcmVTdHlsZVByb3BzLmZvckVhY2gobGU9PlQuYWRkKGxlKSk7bGV0IG5lPUJhKEksdmUsbmV3IFNldCk7ZmUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChsZT0+bmUuYWRkKGxlKSksdmUhPT1lJiZfLmFkZCh2ZSl9KTtsZXQgeGU9QVQoXy52YWx1ZXMoKSk7cmV0dXJuIGFYKGUsdGhpcy5fdHJpZ2dlck5hbWUsaSxyLEEsZixDLGVlLHhlLHksSSxYKX19O2Z1bmN0aW9uIE5NZShuLHQpe2xldCBlPW5DKHQpO2ZvcihsZXQgaSBpbiBuKW4uaGFzT3duUHJvcGVydHkoaSkmJm51bGwhPW5baV0mJihlW2ldPW5baV0pO3JldHVybiBlfWZ1bmN0aW9uIGxYKG4sdCxlKXtuLmhhcyh0KT9uLmhhcyhlKXx8bi5zZXQoZSxuLmdldCh0KSk6bi5oYXMoZSkmJm4uc2V0KHQsbi5nZXQoZSkpfXZhciBWTWU9bmV3IFp4LGNYPSJuZy1hbmltYXRlLXF1ZXVlZCIsRzM9Im5nLWFuaW1hdGUtZGlzYWJsZWQiLEdNZT1bXSxJWD17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sV01lPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSx5bD0iX19uZ19yZW1vdmVkIiwkeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9IiIpe3RoaXMubmFtZXNwYWNlSWQ9ZTtsZXQgaT10JiZ0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIG4/P251bGx9KGk/dC52YWx1ZTp0KSxpKXtsZXQgbz1uQyh0KTtkZWxldGUgby52YWx1ZSx0aGlzLm9wdGlvbnM9b31lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfWFic29yYk9wdGlvbnModCl7bGV0IGU9dC5wYXJhbXM7aWYoZSl7bGV0IGk9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHI9PntudWxsPT1pW3JdJiYoaVtyXT1lW3JdKX0pfX19LFF4PSJ2b2lkIixXMz1uZXcgJHgoUXgpLGVDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy50cmlnZ2VyTmFtZT1lLHRoaXMuZWxlbWVudD1pLHRoaXMuX3BsYXllcj1uZXcgU3AsdGhpcy5fY29udGFpbnNSZWFsUGxheWVyPSExLHRoaXMuX3F1ZXVlZENhbGxiYWNrcz1uZXcgTWFwLHRoaXMuZGVzdHJveWVkPSExLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcih0KXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9dCx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgoZSxpKT0+e2UuZm9yRWFjaChyPT5sQih0LGksdm9pZCAwLHIpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5jbGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKHQudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUodCl7dGhpcy50b3RhbFRpbWU9dH1zeW5jUGxheWVyRXZlbnRzKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmdC5vblN0YXJ0KCgpPT5lLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksdC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLHQub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQodCxlKXtCYSh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsdCxbXSkucHVzaChlKX1vbkRvbmUodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLHQpLHRoaXMuX3BsYXllci5vbkRvbmUodCl9b25TdGFydCh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLHQpLHRoaXMuX3BsYXllci5vblN0YXJ0KHQpfW9uRGVzdHJveSh0KXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsdCksdGhpcy5fcGxheWVyLm9uRGVzdHJveSh0KX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbih0KXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPXRoaXMuX3BsYXllcjtlLnRyaWdnZXJDYWxsYmFjayYmZS50cmlnZ2VyQ2FsbGJhY2sodCl9fTtmdW5jdGlvbiBFVChuKXtyZXR1cm4gbiYmMT09PW4ubm9kZVR5cGV9ZnVuY3Rpb24gdVgobix0KXtsZXQgZT1uLnN0eWxlLmRpc3BsYXk7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT10Pz8ibm9uZSIsZX1mdW5jdGlvbiBkWChuLHQsZSxpLHIpe2xldCBvPVtdO2UuZm9yRWFjaChsPT5vLnB1c2godVgobCkpKTtsZXQgcz1bXTtpLmZvckVhY2goKGwsYyk9PntsZXQgdT1uZXcgTWFwO2wuZm9yRWFjaChkPT57bGV0IHA9dC5jb21wdXRlU3R5bGUoYyxkLHIpO3Uuc2V0KGQscCksKCFwfHwwPT1wLmxlbmd0aCkmJihjW3lsXT1XTWUscy5wdXNoKGMpKX0pLG4uc2V0KGMsdSl9KTtsZXQgYT0wO3JldHVybiBlLmZvckVhY2gobD0+dVgobCxvW2ErK10pKSxzfWZ1bmN0aW9uIHBYKG4sdCl7bGV0IGU9bmV3IE1hcDtpZihuLmZvckVhY2goYT0+ZS5zZXQoYSxbXSkpLDA9PXQubGVuZ3RoKXJldHVybiBlO2xldCByPW5ldyBTZXQodCksbz1uZXcgTWFwO2Z1bmN0aW9uIHMoYSl7aWYoIWEpcmV0dXJuIDE7bGV0IGw9by5nZXQoYSk7aWYobClyZXR1cm4gbDtsZXQgYz1hLnBhcmVudE5vZGU7cmV0dXJuIGw9ZS5oYXMoYyk/YzpyLmhhcyhjKT8xOnMoYyksby5zZXQoYSxsKSxsfXJldHVybiB0LmZvckVhY2goYT0+e2xldCBsPXMoYSk7MSE9PWwmJmUuZ2V0KGwpLnB1c2goYSl9KSxlfWZ1bmN0aW9uIGJsKG4sdCl7bi5jbGFzc0xpc3Q/LmFkZCh0KX1mdW5jdGlvbiB6MChuLHQpe24uY2xhc3NMaXN0Py5yZW1vdmUodCl9ZnVuY3Rpb24gUU1lKG4sdCxlKXtFcChlKS5vbkRvbmUoKCk9Pm4ucHJvY2Vzc0xlYXZlTm9kZSh0KSl9ZnVuY3Rpb24gUFgobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl7bGV0IGk9bltlXTtpIGluc3RhbmNlb2YgWXg/UFgoaS5wbGF5ZXJzLHQpOnQucHVzaChpKX19ZnVuY3Rpb24gaFgobix0LGUpe2xldCBpPWUuZ2V0KG4pO2lmKCFpKXJldHVybiExO2xldCByPXQuZ2V0KG4pO3JldHVybiByP2kuZm9yRWFjaChvPT5yLmFkZChvKSk6dC5zZXQobixpKSxlLmRlbGV0ZShuKSwhMH12YXIgVHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuYm9keU5vZGU9dCx0aGlzLl9kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5kcml2ZXI9ZSx0aGlzLl9ub3JtYWxpemVyPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMubmV3SG9zdEVsZW1lbnRzPW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudD1uZXcgTWFwLHRoaXMuc3RhdGVzQnlFbGVtZW50PW5ldyBNYXAsdGhpcy5kaXNhYmxlZE5vZGVzPW5ldyBTZXQsdGhpcy50b3RhbEFuaW1hdGlvbnM9MCx0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuX25hbWVzcGFjZUxvb2t1cD17fSx0aGlzLl9uYW1lc3BhY2VMaXN0PVtdLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucz1bXSx0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50PW5ldyBNYXAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzPVtdLHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cz1bXSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fX1fb25SZW1vdmFsQ29tcGxldGUodCxlKXt0aGlzLm9uUmVtb3ZhbENvbXBsZXRlKHQsZSl9Z2V0IHF1ZXVlZFBsYXllcnMoKXtsZXQgdD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGU9PntlLnBsYXllcnMuZm9yRWFjaChpPT57aS5xdWV1ZWQmJnQucHVzaChpKX0pfSksdH1jcmVhdGVOYW1lc3BhY2UodCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuaWQ9dCx0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5fZW5naW5lPWksdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK3QsYmwoZSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4odCxlLGkscil7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhlKSl0aHJvdyBuZXcgTXQoMzMwMiwhMSk7aWYobnVsbD09aXx8MD09aS5sZW5ndGgpdGhyb3cgbmV3IE10KDMzMDMsITEpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4ic3RhcnQiPT1ufHwiZG9uZSI9PW59KGkpKXRocm93IG5ldyBNdCgzNDAwLCExKTtsZXQgbz1CYSh0aGlzLl9lbGVtZW50TGlzdGVuZXJzLHQsW10pLHM9e25hbWU6ZSxwaGFzZTppLGNhbGxiYWNrOnJ9O28ucHVzaChzKTtsZXQgYT1CYSh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LHQsbmV3IE1hcCk7cmV0dXJuIGEuaGFzKGUpfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksYS5zZXQoZSxXMykpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntsZXQgbD1vLmluZGV4T2Yocyk7bD49MCYmby5zcGxpY2UobCwxKSx0aGlzLl90cmlnZ2Vycy5oYXMoZSl8fGEuZGVsZXRlKGUpfSl9fXJlZ2lzdGVyKHQsZSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyh0KSYmKHRoaXMuX3RyaWdnZXJzLnNldCh0LGUpLCEwKX1fZ2V0VHJpZ2dlcih0KXtsZXQgZT10aGlzLl90cmlnZ2Vycy5nZXQodCk7aWYoIWUpdGhyb3cgbmV3IE10KDM0MDEsITEpO3JldHVybiBlfXRyaWdnZXIodCxlLGkscj0hMCl7bGV0IG89dGhpcy5fZ2V0VHJpZ2dlcihlKSxzPW5ldyBlQyh0aGlzLmlkLGUsdCksYT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTthfHwoYmwodCx3VCksYmwodCx3VCsiLSIrZSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQodCxhPW5ldyBNYXApKTtsZXQgbD1hLmdldChlKSxjPW5ldyAkeChpLHRoaXMuaWQpO2lmKCEoaSYmaS5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJmwmJmMuYWJzb3JiT3B0aW9ucyhsLm9wdGlvbnMpLGEuc2V0KGUsYyksbHx8KGw9VzMpLGMudmFsdWUhPT1ReCYmbC52YWx1ZT09PWMudmFsdWUpe2lmKCFmdW5jdGlvbihuLHQpe2xldCBlPU9iamVjdC5rZXlzKG4pLGk9T2JqZWN0LmtleXModCk7aWYoZS5sZW5ndGghPWkubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbz1lW3JdO2lmKCF0Lmhhc093blByb3BlcnR5KG8pfHxuW29dIT09dFtvXSlyZXR1cm4hMX1yZXR1cm4hMH0obC5wYXJhbXMsYy5wYXJhbXMpKXtsZXQgbT1bXSxDPW8ubWF0Y2hTdHlsZXMobC52YWx1ZSxsLnBhcmFtcyxtKSxfPW8ubWF0Y2hTdHlsZXMoYy52YWx1ZSxjLnBhcmFtcyxtKTttLmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IobSk6dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntCZih0LEMpLGR1KHQsXyl9KX1yZXR1cm59bGV0IHA9QmEodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsdCxbXSk7cC5mb3JFYWNoKG09PnttLm5hbWVzcGFjZUlkPT10aGlzLmlkJiZtLnRyaWdnZXJOYW1lPT1lJiZtLnF1ZXVlZCYmbS5kZXN0cm95KCl9KTtsZXQgaD1vLm1hdGNoVHJhbnNpdGlvbihsLnZhbHVlLGMudmFsdWUsdCxjLnBhcmFtcyksZj0hMTtpZighaCl7aWYoIXIpcmV0dXJuO2g9by5mYWxsYmFja1RyYW5zaXRpb24sZj0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTplLHRyYW5zaXRpb246aCxmcm9tU3RhdGU6bCx0b1N0YXRlOmMscGxheWVyOnMsaXNGYWxsYmFja1RyYW5zaXRpb246Zn0pLGZ8fChibCh0LGNYKSxzLm9uU3RhcnQoKCk9Pnt6MCh0LGNYKX0pKSxzLm9uRG9uZSgoKT0+e2xldCBtPXRoaXMucGxheWVycy5pbmRleE9mKHMpO20+PTAmJnRoaXMucGxheWVycy5zcGxpY2UobSwxKTtsZXQgQz10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoQyl7bGV0IF89Qy5pbmRleE9mKHMpO18+PTAmJkMuc3BsaWNlKF8sMSl9fSksdGhpcy5wbGF5ZXJzLnB1c2gocykscC5wdXNoKHMpLHN9ZGVyZWdpc3Rlcih0KXt0aGlzLl90cmlnZ2Vycy5kZWxldGUodCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGU9PmUuZGVsZXRlKHQpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGUsaSk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJzLnNldChpLGUuZmlsdGVyKHI9PnIubmFtZSE9dCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUodCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUodCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUodCk7bGV0IGU9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2UmJihlLmZvckVhY2goaT0+aS5kZXN0cm95KCkpLHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmRlbGV0ZSh0KSl9X3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeSh0LFRULCEwKTtpLmZvckVhY2gocj0+e2lmKHJbeWxdKXJldHVybjtsZXQgbz10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KHIpO28uc2l6ZT9vLmZvckVhY2gocz0+cy50cmlnZ2VyTGVhdmVBbmltYXRpb24ocixlLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKX0pLHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmkuZm9yRWFjaChyPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKHIpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSxpLHIpe2xldCBvPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpLHM9bmV3IE1hcDtpZihvKXtsZXQgYT1bXTtpZihvLmZvckVhY2goKGwsYyk9PntpZihzLnNldChjLGwudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhjKSl7bGV0IHU9dGhpcy50cmlnZ2VyKHQsYyxReCxyKTt1JiZhLnB1c2godSl9fSksYS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITAsZSxzKSxpJiZFcChhKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKHQpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCl7bGV0IGU9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQodCksaT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihlJiZpKXtsZXQgcj1uZXcgU2V0O2UuZm9yRWFjaChvPT57bGV0IHM9by5uYW1lO2lmKHIuaGFzKHMpKXJldHVybjtyLmFkZChzKTtsZXQgbD10aGlzLl90cmlnZ2Vycy5nZXQocykuZmFsbGJhY2tUcmFuc2l0aW9uLGM9aS5nZXQocyl8fFczLHU9bmV3ICR4KFF4KSxkPW5ldyBlQyh0aGlzLmlkLHMsdCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6dCx0cmlnZ2VyTmFtZTpzLHRyYW5zaXRpb246bCxmcm9tU3RhdGU6Yyx0b1N0YXRlOnUscGxheWVyOmQsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKHQsZSl7bGV0IGk9dGhpcy5fZW5naW5lO2lmKHQuY2hpbGRFbGVtZW50Q291bnQmJnRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHQsZSksdGhpcy50cmlnZ2VyTGVhdmVBbmltYXRpb24odCxlLCEwKSlyZXR1cm47bGV0IHI9ITE7aWYoaS50b3RhbEFuaW1hdGlvbnMpe2xldCBvPWkucGxheWVycy5sZW5ndGg/aS5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk6W107aWYobyYmby5sZW5ndGgpcj0hMDtlbHNle2xldCBzPXQ7Zm9yKDtzPXMucGFyZW50Tm9kZTspaWYoaS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHMpKXtyPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnModCkscilpLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsdCwhMSxlKTtlbHNle2xldCBvPXRbeWxdOyghb3x8bz09PUlYKSYmKGkuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZSh0KSksaS5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpLGkuX29uUmVtb3ZhbENvbXBsZXRlKHQsZSkpfX1pbnNlcnROb2RlKHQsZSl7YmwodCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKHQpe2xldCBlPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGk9PntsZXQgcj1pLnBsYXllcjtpZihyLmRlc3Ryb3llZClyZXR1cm47bGV0IG89aS5lbGVtZW50LHM9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQobyk7cyYmcy5mb3JFYWNoKGE9PntpZihhLm5hbWU9PWkudHJpZ2dlck5hbWUpe2xldCBsPWNCKG8saS50cmlnZ2VyTmFtZSxpLmZyb21TdGF0ZS52YWx1ZSxpLnRvU3RhdGUudmFsdWUpO2wuX2RhdGE9dCxsQihpLnBsYXllcixhLnBoYXNlLGwsYS5jYWxsYmFjayl9fSksci5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57ci5kZXN0cm95KCl9KTplLnB1c2goaSl9KSx0aGlzLl9xdWV1ZT1bXSxlLnNvcnQoKGkscik9PntsZXQgbz1pLnRyYW5zaXRpb24uYXN0LmRlcENvdW50LHM9ci50cmFuc2l0aW9uLmFzdC5kZXBDb3VudDtyZXR1cm4gMD09b3x8MD09cz9vLXM6dGhpcy5fZW5naW5lLmRyaXZlci5jb250YWluc0VsZW1lbnQoaS5lbGVtZW50LHIuZWxlbWVudCk/MTotMX0pfWRlc3Ryb3kodCl7dGhpcy5wbGF5ZXJzLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX3NpZ25hbFJlbW92YWxGb3JJbm5lclRyaWdnZXJzKHRoaXMuaG9zdEVsZW1lbnQsdCl9ZWxlbWVudENvbnRhaW5zRGF0YSh0KXtsZXQgZT0hMTtyZXR1cm4gdGhpcy5fZWxlbWVudExpc3RlbmVycy5oYXModCkmJihlPSEwKSxlPSEhdGhpcy5fcXVldWUuZmluZChpPT5pLmVsZW1lbnQ9PT10KXx8ZSxlfX0odCxlLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxlKT90aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChpLGUpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoZSxpKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XT1pfV9iYWxhbmNlTmFtZXNwYWNlTGlzdCh0LGUpe2xldCBpPXRoaXMuX25hbWVzcGFjZUxpc3Qscj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50O2lmKGkubGVuZ3RoLTE+PTApe2xldCBzPSExLGE9dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChlKTtmb3IoO2E7KXtsZXQgbD1yLmdldChhKTtpZihsKXtsZXQgYz1pLmluZGV4T2YobCk7aS5zcGxpY2UoYysxLDAsdCkscz0hMDticmVha31hPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSl9c3x8aS51bnNoaWZ0KHQpfWVsc2UgaS5wdXNoKHQpO3JldHVybiByLnNldChlLHQpLHR9cmVnaXN0ZXIodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07cmV0dXJuIGl8fChpPXRoaXMuY3JlYXRlTmFtZXNwYWNlKHQsZSkpLGl9cmVnaXN0ZXJUcmlnZ2VyKHQsZSxpKXtsZXQgcj10aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07ciYmci5yZWdpc3RlcihlLGkpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kodCxlKXtpZighdClyZXR1cm47bGV0IGk9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7dGhpcy5hZnRlckZsdXNoKCgpPT57dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoaS5ob3N0RWxlbWVudCksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XTtsZXQgcj10aGlzLl9uYW1lc3BhY2VMaXN0LmluZGV4T2YoaSk7cj49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UociwxKX0pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmRlc3Ryb3koZSkpfV9mZXRjaE5hbWVzcGFjZSh0KXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudCh0KXtsZXQgZT1uZXcgU2V0LGk9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHQpO2lmKGkpZm9yKGxldCByIG9mIGkudmFsdWVzKCkpaWYoci5uYW1lc3BhY2VJZCl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2Uoci5uYW1lc3BhY2VJZCk7byYmZS5hZGQobyl9cmV0dXJuIGV9dHJpZ2dlcih0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7aWYobylyZXR1cm4gby50cmlnZ2VyKGUsaSxyKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKHQsZSxpLHIpe2lmKCFFVChlKSlyZXR1cm47bGV0IG89ZVt5bF07aWYobyYmby5zZXRGb3JSZW1vdmFsKXtvLnNldEZvclJlbW92YWw9ITEsby5zZXRGb3JNb3ZlPSEwO2xldCBzPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGUpO3M+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UocywxKX1pZih0KXtsZXQgcz10aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTtzJiZzLmluc2VydE5vZGUoZSxpKX1yJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoZSl9Y29sbGVjdEVudGVyRWxlbWVudCh0KXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaCh0KX1tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKXtlP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXModCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKHQpLGJsKHQsRzMpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZSh0KSx6MCh0LEczKSl9cmVtb3ZlTm9kZSh0LGUsaSxyKXtpZihFVChlKSl7bGV0IG89dD90aGlzLl9mZXRjaE5hbWVzcGFjZSh0KTpudWxsO2lmKG8/by5yZW1vdmVOb2RlKGUscik6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0LGUsITEsciksaSl7bGV0IHM9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoZSk7cyYmcy5pZCE9PXQmJnMucmVtb3ZlTm9kZShlLHIpfX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGUscil9bWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLGkscixvKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChlKSxlW3lsXT17bmFtZXNwYWNlSWQ6dCxzZXRGb3JSZW1vdmFsOnIsaGFzQW5pbWF0aW9uOmkscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpvfX1saXN0ZW4odCxlLGkscixvKXtyZXR1cm4gRVQoZSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkubGlzdGVuKGUsaSxyLG8pOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbih0LGUsaSxyLG8pe3JldHVybiB0LnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsdC5lbGVtZW50LHQuZnJvbVN0YXRlLnZhbHVlLHQudG9TdGF0ZS52YWx1ZSxpLHIsdC5mcm9tU3RhdGUub3B0aW9ucyx0LnRvU3RhdGUub3B0aW9ucyxlLG8pfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnModCl7bGV0IGU9dGhpcy5kcml2ZXIucXVlcnkodCxUVCwhMCk7ZS5mb3JFYWNoKGk9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGkpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsUTMsITApLGUuZm9yRWFjaChpPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoaSkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiZlLmZvckVhY2goaT0+e2kucXVldWVkP2kubWFya2VkRm9yRGVzdHJveT0hMDppLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQodCl7bGV0IGU9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PmkuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntpZih0aGlzLnBsYXllcnMubGVuZ3RoKXJldHVybiBFcCh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+dCgpKTt0KCl9KX1wcm9jZXNzTGVhdmVOb2RlKHQpe2xldCBlPXRbeWxdO2lmKGUmJmUuc2V0Rm9yUmVtb3ZhbCl7aWYodFt5bF09SVgsZS5uYW1lc3BhY2VJZCl7dGhpcy5kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGUubmFtZXNwYWNlSWQpO2kmJmkuY2xlYXJFbGVtZW50Q2FjaGUodCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUodCxlLnNldEZvclJlbW92YWwpfXQuY2xhc3NMaXN0Py5jb250YWlucyhHMykmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KHQsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChpPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQoaSwhMSl9KX1mbHVzaCh0PS0xKXtsZXQgZT1bXTtpZih0aGlzLm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoaSxyKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxyKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2krKylibCh0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbaV0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7bGV0IGk9W107dHJ5e2U9dGhpcy5fZmx1c2hBbmltYXRpb25zKGksdCl9ZmluYWxseXtmb3IobGV0IHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdKCl9fWVsc2UgZm9yKGxldCBpPTA7aTx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2krKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2ldKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChpPT5pKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2xldCBpPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sZS5sZW5ndGg/RXAoZSkub25Eb25lKCgpPT57aS5mb3JFYWNoKHI9PnIoKSl9KTppLmZvckVhY2gocj0+cigpKX19cmVwb3J0RXJyb3IodCl7dGhyb3cgbmV3IE10KDM0MDIsITEpfV9mbHVzaEFuaW1hdGlvbnModCxlKXtsZXQgaT1uZXcgWngscj1bXSxvPW5ldyBNYXAscz1bXSxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx1PW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goSj0+e3UuYWRkKEopO2xldCBhZT10aGlzLmRyaXZlci5xdWVyeShKLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0IG1lPTA7bWU8YWUubGVuZ3RoO21lKyspdS5hZGQoYWVbbWVdKX0pO2xldCBkPXRoaXMuYm9keU5vZGUscD1BcnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksaD1wWChwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksZj1uZXcgTWFwLG09MDtoLmZvckVhY2goKEosYWUpPT57bGV0IG1lPWJYK20rKztmLnNldChhZSxtZSksSi5mb3JFYWNoKGplPT5ibChqZSxtZSkpfSk7bGV0IEM9W10sXz1uZXcgU2V0LHk9bmV3IFNldDtmb3IobGV0IEo9MDtKPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7SisrKXtsZXQgYWU9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW0pdLG1lPWFlW3lsXTttZSYmbWUuc2V0Rm9yUmVtb3ZhbCYmKEMucHVzaChhZSksXy5hZGQoYWUpLG1lLmhhc0FuaW1hdGlvbj90aGlzLmRyaXZlci5xdWVyeShhZSwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKGplPT5fLmFkZChqZSkpOnkuYWRkKGFlKSl9bGV0IEk9bmV3IE1hcCxBPXBYKHAsQXJyYXkuZnJvbShfKSk7QS5mb3JFYWNoKChKLGFlKT0+e2xldCBtZT1YMyttKys7SS5zZXQoYWUsbWUpLEouZm9yRWFjaChqZT0+YmwoamUsbWUpKX0pLHQucHVzaCgoKT0+e2guZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9Zi5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEEuZm9yRWFjaCgoSixhZSk9PntsZXQgbWU9SS5nZXQoYWUpO0ouZm9yRWFjaChqZT0+ejAoamUsbWUpKX0pLEMuZm9yRWFjaChKPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKEopfSl9KTtsZXQgTz1bXSxlZT1bXTtmb3IobGV0IEo9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtKPj0wO0otLSl0aGlzLl9uYW1lc3BhY2VMaXN0W0pdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChtZT0+e2xldCBqZT1tZS5wbGF5ZXIsTWU9bWUuZWxlbWVudDtpZihPLnB1c2goamUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2xldCBFdD1NZVt5bF07aWYoRXQmJkV0LnNldEZvck1vdmUpe2lmKEV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJkV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKG1lLnRyaWdnZXJOYW1lKSl7bGV0IG9uPUV0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KG1lLnRyaWdnZXJOYW1lKSxDZT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobWUuZWxlbWVudCk7aWYoQ2UmJkNlLmhhcyhtZS50cmlnZ2VyTmFtZSkpe2xldCB2dD1DZS5nZXQobWUudHJpZ2dlck5hbWUpO3Z0LnZhbHVlPW9uLENlLnNldChtZS50cmlnZ2VyTmFtZSx2dCl9fXJldHVybiB2b2lkIGplLmRlc3Ryb3koKX19bGV0IEZlPSFkfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQsTWUpLHV0PUkuZ2V0KE1lKSxTdD1mLmdldChNZSksZ3Q9dGhpcy5fYnVpbGRJbnN0cnVjdGlvbihtZSxpLFN0LHV0LEZlKTtpZihndC5lcnJvcnMmJmd0LmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgZWUucHVzaChndCk7aWYoRmUpcmV0dXJuIGplLm9uU3RhcnQoKCk9PkJmKE1lLGd0LmZyb21TdHlsZXMpKSxqZS5vbkRlc3Ryb3koKCk9PmR1KE1lLGd0LnRvU3R5bGVzKSksdm9pZCByLnB1c2goamUpO2lmKG1lLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBqZS5vblN0YXJ0KCgpPT5CZihNZSxndC5mcm9tU3R5bGVzKSksamUub25EZXN0cm95KCgpPT5kdShNZSxndC50b1N0eWxlcykpLHZvaWQgci5wdXNoKGplKTtsZXQgUmU9W107Z3QudGltZWxpbmVzLmZvckVhY2goRXQ9PntFdC5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2FibGVkTm9kZXMuaGFzKEV0LmVsZW1lbnQpfHxSZS5wdXNoKEV0KX0pLGd0LnRpbWVsaW5lcz1SZSxpLmFwcGVuZChNZSxndC50aW1lbGluZXMpLHMucHVzaCh7aW5zdHJ1Y3Rpb246Z3QscGxheWVyOmplLGVsZW1lbnQ6TWV9KSxndC5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChFdD0+QmEoYSxFdCxbXSkucHVzaChqZSkpLGd0LnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoRXQsb24pPT57aWYoRXQuc2l6ZSl7bGV0IENlPWwuZ2V0KG9uKTtDZXx8bC5zZXQob24sQ2U9bmV3IFNldCksRXQuZm9yRWFjaCgodnQsX3QpPT5DZS5hZGQoX3QpKX19KSxndC5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKChFdCxvbik9PntsZXQgQ2U9Yy5nZXQob24pO0NlfHxjLnNldChvbixDZT1uZXcgU2V0KSxFdC5mb3JFYWNoKCh2dCxfdCk9PkNlLmFkZChfdCkpfSl9KTtpZihlZS5sZW5ndGgpe2xldCBKPVtdO2VlLmZvckVhY2goYWU9PntKLnB1c2gobmV3IE10KDM1MDUsITEpKX0pLE8uZm9yRWFjaChhZT0+YWUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKEopfWxldCBYPW5ldyBNYXAseGU9bmV3IE1hcDtzLmZvckVhY2goSj0+e2xldCBhZT1KLmVsZW1lbnQ7aS5oYXMoYWUpJiYoeGUuc2V0KGFlLGFlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChKLnBsYXllci5uYW1lc3BhY2VJZCxKLmluc3RydWN0aW9uLFgpKX0pLHIuZm9yRWFjaChKPT57bGV0IGFlPUouZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYWUsITEsSi5uYW1lc3BhY2VJZCxKLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goamU9PntCYShYLGFlLFtdKS5wdXNoKGplKSxqZS5kZXN0cm95KCl9KX0pO2xldCBmZT1DLmZpbHRlcihKPT5oWChKLGwsYykpLHZlPW5ldyBNYXA7ZFgodmUsdGhpcy5kcml2ZXIseSxjLHV1KS5mb3JFYWNoKEo9PntoWChKLGwsYykmJmZlLnB1c2goSil9KTtsZXQgbmU9bmV3IE1hcDtoLmZvckVhY2goKEosYWUpPT57ZFgobmUsdGhpcy5kcml2ZXIsbmV3IFNldChKKSxsLCIhIil9KSxmZS5mb3JFYWNoKEo9PntsZXQgYWU9dmUuZ2V0KEopLG1lPW5lLmdldChKKTt2ZS5zZXQoSixuZXcgTWFwKFsuLi5BcnJheS5mcm9tKGFlPy5lbnRyaWVzKCk/P1tdKSwuLi5BcnJheS5mcm9tKG1lPy5lbnRyaWVzKCk/P1tdKV0pKX0pO2xldCBsZT1bXSxoZT1bXSx5ZT17fTtzLmZvckVhY2goSj0+e2xldHtlbGVtZW50OmFlLHBsYXllcjptZSxpbnN0cnVjdGlvbjpqZX09SjtpZihpLmhhcyhhZSkpe2lmKHUuaGFzKGFlKSlyZXR1cm4gbWUub25EZXN0cm95KCgpPT5kdShhZSxqZS50b1N0eWxlcykpLG1lLmRpc2FibGVkPSEwLG1lLm92ZXJyaWRlVG90YWxUaW1lKGplLnRvdGFsVGltZSksdm9pZCByLnB1c2gobWUpO2xldCBNZT15ZTtpZih4ZS5zaXplPjEpe2xldCB1dD1hZSxTdD1bXTtmb3IoO3V0PXV0LnBhcmVudE5vZGU7KXtsZXQgZ3Q9eGUuZ2V0KHV0KTtpZihndCl7TWU9Z3Q7YnJlYWt9U3QucHVzaCh1dCl9U3QuZm9yRWFjaChndD0+eGUuc2V0KGd0LE1lKSl9bGV0IEZlPXRoaXMuX2J1aWxkQW5pbWF0aW9uKG1lLm5hbWVzcGFjZUlkLGplLFgsbyxuZSx2ZSk7aWYobWUuc2V0UmVhbFBsYXllcihGZSksTWU9PT15ZSlsZS5wdXNoKG1lKTtlbHNle2xldCB1dD10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KE1lKTt1dCYmdXQubGVuZ3RoJiYobWUucGFyZW50UGxheWVyPUVwKHV0KSksci5wdXNoKG1lKX19ZWxzZSBCZihhZSxqZS5mcm9tU3R5bGVzKSxtZS5vbkRlc3Ryb3koKCk9PmR1KGFlLGplLnRvU3R5bGVzKSksaGUucHVzaChtZSksdS5oYXMoYWUpJiZyLnB1c2gobWUpfSksaGUuZm9yRWFjaChKPT57bGV0IGFlPW8uZ2V0KEouZWxlbWVudCk7aWYoYWUmJmFlLmxlbmd0aCl7bGV0IG1lPUVwKGFlKTtKLnNldFJlYWxQbGF5ZXIobWUpfX0pLHIuZm9yRWFjaChKPT57Si5wYXJlbnRQbGF5ZXI/Si5zeW5jUGxheWVyRXZlbnRzKEoucGFyZW50UGxheWVyKTpKLmRlc3Ryb3koKX0pO2ZvcihsZXQgSj0wO0o8Qy5sZW5ndGg7SisrKXtsZXQgYWU9Q1tKXSxtZT1hZVt5bF07aWYoejAoYWUsWDMpLG1lJiZtZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGplPVtdO2lmKGEuc2l6ZSl7bGV0IEZlPWEuZ2V0KGFlKTtGZSYmRmUubGVuZ3RoJiZqZS5wdXNoKC4uLkZlKTtsZXQgdXQ9dGhpcy5kcml2ZXIucXVlcnkoYWUsUTMsITApO2ZvcihsZXQgU3Q9MDtTdDx1dC5sZW5ndGg7U3QrKyl7bGV0IGd0PWEuZ2V0KHV0W1N0XSk7Z3QmJmd0Lmxlbmd0aCYmamUucHVzaCguLi5ndCl9fWxldCBNZT1qZS5maWx0ZXIoRmU9PiFGZS5kZXN0cm95ZWQpO01lLmxlbmd0aD9RTWUodGhpcyxhZSxNZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGFlKX1yZXR1cm4gQy5sZW5ndGg9MCxsZS5mb3JFYWNoKEo9Pnt0aGlzLnBsYXllcnMucHVzaChKKSxKLm9uRG9uZSgoKT0+e0ouZGVzdHJveSgpO2xldCBhZT10aGlzLnBsYXllcnMuaW5kZXhPZihKKTt0aGlzLnBsYXllcnMuc3BsaWNlKGFlLDEpfSksSi5wbGF5KCl9KSxsZX1lbGVtZW50Q29udGFpbnNEYXRhKHQsZSl7bGV0IGk9ITEscj1lW3lsXTtyZXR1cm4gciYmci5zZXRGb3JSZW1vdmFsJiYoaT0hMCksdGhpcy5wbGF5ZXJzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5zdGF0ZXNCeUVsZW1lbnQuaGFzKGUpJiYoaT0hMCksdGhpcy5fZmV0Y2hOYW1lc3BhY2UodCkuZWxlbWVudENvbnRhaW5zRGF0YShlKXx8aX1hZnRlckZsdXNoKHQpe3RoaXMuX2ZsdXNoRm5zLnB1c2godCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKHQpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKHQpfV9nZXRQcmV2aW91c1BsYXllcnModCxlLGkscixvKXtsZXQgcz1bXTtpZihlKXtsZXQgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldCh0KTthJiYocz1hKX1lbHNle2xldCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7aWYoYSl7bGV0IGw9IW98fG89PVF4O2EuZm9yRWFjaChjPT57Yy5xdWV1ZWR8fCFsJiZjLnRyaWdnZXJOYW1lIT1yfHxzLnB1c2goYyl9KX19cmV0dXJuKGl8fHIpJiYocz1zLmZpbHRlcihhPT4hKGkmJmkhPWEubmFtZXNwYWNlSWR8fHImJnIhPWEudHJpZ2dlck5hbWUpKSksc31fYmVmb3JlQW5pbWF0aW9uQnVpbGQodCxlLGkpe2xldCBvPWUuZWxlbWVudCxzPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6dCxhPWUuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6ZS50cmlnZ2VyTmFtZTtmb3IobGV0IGwgb2YgZS50aW1lbGluZXMpe2xldCBjPWwuZWxlbWVudCx1PWMhPT1vLGQ9QmEoaSxjLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYyx1LHMsYSxlLnRvU3RhdGUpLmZvckVhY2goaD0+e2xldCBmPWguZ2V0UmVhbFBsYXllcigpO2YuYmVmb3JlRGVzdHJveSYmZi5iZWZvcmVEZXN0cm95KCksaC5kZXN0cm95KCksZC5wdXNoKGgpfSl9QmYobyxlLmZyb21TdHlsZXMpfV9idWlsZEFuaW1hdGlvbih0LGUsaSxyLG8scyl7bGV0IGE9ZS50cmlnZ2VyTmFtZSxsPWUuZWxlbWVudCxjPVtdLHU9bmV3IFNldCxkPW5ldyBTZXQscD1lLnRpbWVsaW5lcy5tYXAoZj0+e2xldCBtPWYuZWxlbWVudDt1LmFkZChtKTtsZXQgQz1tW3lsXTtpZihDJiZDLnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgU3AoZi5kdXJhdGlvbixmLmRlbGF5KTtsZXQgXz1tIT09bCx5PWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBQWChuLHQpLHR9KChpLmdldChtKXx8R01lKS5tYXAoWD0+WC5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoWD0+ISFYLmVsZW1lbnQmJlguZWxlbWVudD09PW0pLEk9by5nZXQobSksQT1zLmdldChtKSxPPWZYKDAsdGhpcy5fbm9ybWFsaXplciwwLGYua2V5ZnJhbWVzLEksQSksZWU9dGhpcy5fYnVpbGRQbGF5ZXIoZixPLHkpO2lmKGYuc3ViVGltZWxpbmUmJnImJmQuYWRkKG0pLF8pe2xldCBYPW5ldyBlQyh0LGEsbSk7WC5zZXRSZWFsUGxheWVyKGVlKSxjLnB1c2goWCl9cmV0dXJuIGVlfSk7Yy5mb3JFYWNoKGY9PntCYSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGYuZWxlbWVudCxbXSkucHVzaChmKSxmLm9uRG9uZSgoKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZ2V0KHQpO2lmKGkpe2lmKGkubGVuZ3RoKXtsZXQgcj1pLmluZGV4T2YoZSk7aS5zcGxpY2UociwxKX0wPT1pLmxlbmd0aCYmbi5kZWxldGUodCl9cmV0dXJuIGl9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsZi5lbGVtZW50LGYpKX0pLHUuZm9yRWFjaChmPT5ibChmLG5YKSk7bGV0IGg9RXAocCk7cmV0dXJuIGgub25EZXN0cm95KCgpPT57dS5mb3JFYWNoKGY9PnowKGYsblgpKSxkdShsLGUudG9TdHlsZXMpfSksZC5mb3JFYWNoKGY9PntCYShyLGYsW10pLnB1c2goaCl9KSxofV9idWlsZFBsYXllcih0LGUsaSl7cmV0dXJuIGUubGVuZ3RoPjA/dGhpcy5kcml2ZXIuYW5pbWF0ZSh0LmVsZW1lbnQsZSx0LmR1cmF0aW9uLHQuZGVsYXksdC5lYXNpbmcsaSk6bmV3IFNwKHQuZHVyYXRpb24sdC5kZWxheSl9fSh0LGUsaSksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3Rlcih0LGUpe2xldCBpPVtdLG89RFgodGhpcy5fZHJpdmVyLGUsaSxbXSk7aWYoaS5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDMsITEpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KHQsbyl9X2J1aWxkUGxheWVyKHQsZSxpKXtsZXQgcj10LmVsZW1lbnQsbz1mWCgwLHRoaXMuX25vcm1hbGl6ZXIsMCx0LmtleWZyYW1lcyxlLGkpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShyLG8sdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLFtdLCEwKX1jcmVhdGUodCxlLGk9e30pe2xldCBzLHI9W10sbz10aGlzLl9hbmltYXRpb25zLmdldCh0KSxhPW5ldyBNYXA7aWYobz8ocz1BWCh0aGlzLl9kcml2ZXIsZSxvLGJYLFgzLG5ldyBNYXAsbmV3IE1hcCxpLFZNZSxyKSxzLmZvckVhY2godT0+e2xldCBkPUJhKGEsdS5lbGVtZW50LG5ldyBNYXApO3UucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChwPT5kLnNldChwLG51bGwpKX0pKTooci5wdXNoKG5ldyBNdCgzMzAwLCExKSkscz1bXSksci5sZW5ndGgpdGhyb3cgbmV3IE10KDM1MDQsITEpO2EuZm9yRWFjaCgodSxkKT0+e3UuZm9yRWFjaCgocCxoKT0+e3Uuc2V0KGgsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZShkLGgsdXUpKX0pfSk7bGV0IGM9RXAocy5tYXAodT0+e2xldCBkPWEuZ2V0KHUuZWxlbWVudCk7cmV0dXJuIHRoaXMuX2J1aWxkUGxheWVyKHUsbmV3IE1hcCxkKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KHQsYyksYy5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSh0KSksdGhpcy5wbGF5ZXJzLnB1c2goYyksY31kZXN0cm95KHQpe2xldCBlPXRoaXMuX2dldFBsYXllcih0KTtlLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUodCk7bGV0IGk9dGhpcy5wbGF5ZXJzLmluZGV4T2YoZSk7aT49MCYmdGhpcy5wbGF5ZXJzLnNwbGljZShpLDEpfV9nZXRQbGF5ZXIodCl7bGV0IGU9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBNdCgzMzAxLCExKTtyZXR1cm4gZX1saXN0ZW4odCxlLGkscil7bGV0IG89Y0IoZSwiIiwiIiwiIik7cmV0dXJuIGxCKHRoaXMuX2dldFBsYXllcih0KSxpLG8sciksKCk9Pnt9fWNvbW1hbmQodCxlLGkscil7aWYoInJlZ2lzdGVyIj09aSlyZXR1cm4gdm9pZCB0aGlzLnJlZ2lzdGVyKHQsclswXSk7aWYoImNyZWF0ZSI9PWkpcmV0dXJuIHZvaWQgdGhpcy5jcmVhdGUodCxlLHJbMF18fHt9KTtsZXQgbz10aGlzLl9nZXRQbGF5ZXIodCk7c3dpdGNoKGkpe2Nhc2UicGxheSI6by5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6by5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOm8ucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOm8ucmVzdGFydCgpO2JyZWFrO2Nhc2UiZmluaXNoIjpvLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6by5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6by5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KHJbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveSh0KX19fSh0LGUsaSksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShyLG8pfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSxyLG8pe2xldCBzPXQrIi0iK3IsYT10aGlzLl90cmlnZ2VyQ2FjaGVbc107aWYoIWEpe2xldCBsPVtdLHU9RFgodGhpcy5fZHJpdmVyLG8sbCxbXSk7aWYobC5sZW5ndGgpdGhyb3cgbmV3IE10KDM0MDQsITEpO2E9ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMubmFtZT10LHRoaXMuYXN0PWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGUuc3RhdGVzLmZvckVhY2gocj0+e2xldCBvPXIub3B0aW9ucyYmci5vcHRpb25zLnBhcmFtc3x8e307dGhpcy5zdGF0ZXMuc2V0KHIubmFtZSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc3R5bGVzPXQsdGhpcy5kZWZhdWx0UGFyYW1zPWUsdGhpcy5ub3JtYWxpemVyPWl9YnVpbGRTdHlsZXModCxlKXtsZXQgaT1uZXcgTWFwLHI9bkModGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChvPT57bGV0IHM9dFtvXTtudWxsIT09cyYmKHJbb109cyl9KSx0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChvPT57InN0cmluZyIhPXR5cGVvZiBvJiZvLmZvckVhY2goKHMsYSk9PntzJiYocz1LeChzLHIsZSkpO2xldCBsPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoYSxlKTtzPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKGEsbCxzLGUpLGkuc2V0KGwscyl9KX0pLGl9fShyLnN0eWxlLG8saSkpfSksbFgodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksbFgodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIpLGUudHJhbnNpdGlvbnMuZm9yRWFjaChyPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IE9UKHQscix0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgT1Qobix7dHlwZToxLGFuaW1hdGlvbjp7dHlwZToyLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6WyhzLGEpPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSx0KX0odCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKHQsZSxpLHIpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZChzPT5zLm1hdGNoKHQsZSxpLHIpKXx8bnVsbH1tYXRjaFN0eWxlcyh0LGUsaSl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKHQsZSxpKX19KG4sdCxlKX0ocix1LHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVtzXT1hfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGUscixhKX1yZWdpc3Rlcih0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIodCxlKX1kZXN0cm95KHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KHQsZSl9b25JbnNlcnQodCxlLGkscil7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKHQsZSxpLHIpfW9uUmVtb3ZlKHQsZSxpLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZSh0LGUscnx8ITEsaSl9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LGUpfXByb2Nlc3ModCxlLGkscil7aWYoIkAiPT1pLmNoYXJBdCgwKSl7bGV0W28sc109ZVgoaSk7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChvLGUscyxyKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcih0LGUsaSxyKX1saXN0ZW4odCxlLGkscixvKXtpZigiQCI9PWkuY2hhckF0KDApKXtsZXRbcyxhXT1lWChpKTtyZXR1cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKHMsZSxhLG8pfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3Rlbih0LGUsaSxyLG8pfWZsdXNoKHQ9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2godCl9Z2V0IHBsYXllcnMoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5wbGF5ZXJzLmNvbmNhdCh0aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJzKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fSwkTWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3N0YXJ0U3R5bGVzPWksdGhpcy5fZW5kU3R5bGVzPXIsdGhpcy5fc3RhdGU9MDtsZXQgbz1uLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGUpO298fG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQoZSxvPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9b31zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxlcyYmZHUodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzJiYoZHUodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYobi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmRlbGV0ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9zdGFydFN0eWxlcyYmKEJmKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9lbmRTdHlsZXMmJihCZih0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLGR1KHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9Myl9fXJldHVybiBuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXAsbn0pKCk7ZnVuY3Rpb24gcTMobil7bGV0IHQ9bnVsbDtyZXR1cm4gbi5mb3JFYWNoKChlLGkpPT57KGZ1bmN0aW9uKG4pe3JldHVybiJkaXNwbGF5Ij09PW58fCJwb3NpdGlvbiI9PT1ufSkoaSkmJih0PXR8fG5ldyBNYXAsdC5zZXQoaSxlKSl9KSx0fXZhciBrVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmVsZW1lbnQ9dCx0aGlzLmtleWZyYW1lcz1lLHRoaXMub3B0aW9ucz1pLHRoaXMuX3NwZWNpYWxTdHlsZXM9cix0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1pLmR1cmF0aW9uLHRoaXMuX2RlbGF5PWkuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtsZXQgdD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCx0LHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT10Lmxlbmd0aD90W3QubGVuZ3RoLTFdOm5ldyBNYXAsdGhpcy5kb21QbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZmluaXNoIiwoKT0+dGhpcy5fb25GaW5pc2goKSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpe3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QodCl7bGV0IGU9W107cmV0dXJuIHQuZm9yRWFjaChpPT57ZS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhpKSl9KSxlfV90cmlnZ2VyV2ViQW5pbWF0aW9uKHQsZSxpKXtyZXR1cm4gdC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChlKSxpKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24odCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPXQqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lL3RoaXMudGltZX1nZXQgdG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuX2RlbGF5K3RoaXMuX2R1cmF0aW9ufWJlZm9yZURlc3Ryb3koKXtsZXQgdD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGkscik9Pnsib2Zmc2V0IiE9PXImJnQuc2V0KHIsdGhpcy5fZmluaXNoZWQ/aTpNWCh0aGlzLmVsZW1lbnQscikpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9dH10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19LG5TZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcXh7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX25leHRBbmltYXRpb25JZD0wLHRoaXMuX3JlbmRlcmVyPWUuY3JlYXRlUmVuZGVyZXIoaS5ib2R5LHtpZDoiMCIsZW5jYXBzdWxhdGlvbjp3YS5Ob25lLHN0eWxlczpbXSxkYXRhOnthbmltYXRpb246W119fSl9YnVpbGQoZSl7bGV0IGk9dGhpcy5fbmV4dEFuaW1hdGlvbklkLnRvU3RyaW5nKCk7dGhpcy5fbmV4dEFuaW1hdGlvbklkKys7bGV0IHI9QXJyYXkuaXNBcnJheShlKT94VChlKTplO3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcixudWxsLGksInJlZ2lzdGVyIixbcl0pLG5ldyBmQihpLHRoaXMuX3JlbmRlcmVyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxYyksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGZCPWNsYXNzIGV4dGVuZHMgYlR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpLHRoaXMuX2lkPXQsdGhpcy5fcmVuZGVyZXI9ZX1jcmVhdGUodCxlKXtyZXR1cm4gbmV3IG1CKHRoaXMuX2lkLHQsZXx8e30sdGhpcy5fcmVuZGVyZXIpfX0sbUI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pZD10LHRoaXMuZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPXIsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLl9zdGFydGVkPSExLHRoaXMudG90YWxUaW1lPTAsdGhpcy5fY29tbWFuZCgiY3JlYXRlIixpKX1fbGlzdGVuKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQsYEBAJHt0aGlzLmlkfToke3R9YCxlKX1fY29tbWFuZCh0LC4uLmUpe3JldHVybiBPWCh0aGlzLl9yZW5kZXJlcix0aGlzLmVsZW1lbnQsdGhpcy5pZCx0LGUpfW9uRG9uZSh0KXt0aGlzLl9saXN0ZW4oImRvbmUiLHQpfW9uU3RhcnQodCl7dGhpcy5fbGlzdGVuKCJzdGFydCIsdCl9b25EZXN0cm95KHQpe3RoaXMuX2xpc3RlbigiZGVzdHJveSIsdCl9aW5pdCgpe3RoaXMuX2NvbW1hbmQoImluaXQiKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMuX2NvbW1hbmQoInBsYXkiKSx0aGlzLl9zdGFydGVkPSEwfXBhdXNlKCl7dGhpcy5fY29tbWFuZCgicGF1c2UiKX1yZXN0YXJ0KCl7dGhpcy5fY29tbWFuZCgicmVzdGFydCIpfWZpbmlzaCgpe3RoaXMuX2NvbW1hbmQoImZpbmlzaCIpfWRlc3Ryb3koKXt0aGlzLl9jb21tYW5kKCJkZXN0cm95Iil9cmVzZXQoKXt0aGlzLl9jb21tYW5kKCJyZXNldCIpLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7dGhpcy5fY29tbWFuZCgic2V0UG9zaXRpb24iLHQpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVyLmVuZ2luZS5wbGF5ZXJzWyt0aGlzLmlkXT8uZ2V0UG9zaXRpb24oKT8/MH19O2Z1bmN0aW9uIE9YKG4sdCxlLGkscil7cmV0dXJuIG4uc2V0UHJvcGVydHkodCxgQEAke2V9OiR7aX1gLHIpfXZhciBrWD0iQC5kaXNhYmxlZCIsaVNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1pLHRoaXMuX3pvbmU9cix0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsdGhpcy5wcm9taXNlPVByb21pc2UucmVzb2x2ZSgwKSxpLm9uUmVtb3ZhbENvbXBsZXRlPShvLHMpPT57bGV0IGE9cz8ucGFyZW50Tm9kZShvKTthJiZzLnJlbW92ZUNoaWxkKGEsbyl9fWNyZWF0ZVJlbmRlcmVyKGUsaSl7bGV0IG89dGhpcy5kZWxlZ2F0ZS5jcmVhdGVSZW5kZXJlcihlLGkpO2lmKCEoZSYmaSYmaS5kYXRhJiZpLmRhdGEuYW5pbWF0aW9uKSl7bGV0IHU9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQobyk7cmV0dXJuIHV8fCh1PW5ldyBMVCgiIixvLHRoaXMuZW5naW5lLCgpPT50aGlzLl9yZW5kZXJlckNhY2hlLmRlbGV0ZShvKSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQobyx1KSksdX1sZXQgcz1pLmlkLGE9aS5pZCsiLSIrdGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKGEsZSk7bGV0IGw9dT0+e0FycmF5LmlzQXJyYXkodSk/dS5mb3JFYWNoKGwpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihzLGEsZSx1Lm5hbWUsdSl9O3JldHVybiBpLmRhdGEuYW5pbWF0aW9uLmZvckVhY2gobCksbmV3IGdCKHRoaXMsYSxvLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXt0aGlzLnByb21pc2UudGhlbigoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soZSxpLHIpe2U+PTAmJmU8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oKCk9PmkocikpOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmZvckVhY2gobz0+e2xldFtzLGFdPW87cyhhKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLnB1c2goW2kscl0pKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9jZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocWMpLFIoVHApLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxMVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLm5hbWVzcGFjZUlkPXQsdGhpcy5kZWxlZ2F0ZT1lLHRoaXMuZW5naW5lPWksdGhpcy5fb25EZXN0cm95PXIsdGhpcy5kZXN0cm95Tm9kZT10aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlP289PmUuZGVzdHJveU5vZGUobyk6bnVsbH1nZXQgZGF0YSgpe3JldHVybiB0aGlzLmRlbGVnYXRlLmRhdGF9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmRlbGVnYXRlLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KHQsZSl9Y3JlYXRlQ29tbWVudCh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dCh0KX1hcHBlbmRDaGlsZCh0LGUpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQodCxlKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCwhMSl9aW5zZXJ0QmVmb3JlKHQsZSxpLHI9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKHQsZSxpKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGUsdCxyKX1yZW1vdmVDaGlsZCh0LGUsaSl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxlLHRoaXMuZGVsZWdhdGUsaSl9c2VsZWN0Um9vdEVsZW1lbnQodCxlKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudCh0LGUpfXBhcmVudE5vZGUodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZSh0KX1uZXh0U2libGluZyh0KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyh0KX1zZXRBdHRyaWJ1dGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUodCxlLGkscil9cmVtb3ZlQXR0cmlidXRlKHQsZSxpKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl9YWRkQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKHQsZSl9cmVtb3ZlQ2xhc3ModCxlKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKHQsZSl9c2V0U3R5bGUodCxlLGkscil7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZSh0LGUsaSxyKX1yZW1vdmVTdHlsZSh0LGUsaSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZSh0LGUsaSl9c2V0UHJvcGVydHkodCxlLGkpeyJAIj09ZS5jaGFyQXQoMCkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCwhIWkpOnRoaXMuZGVsZWdhdGUuc2V0UHJvcGVydHkodCxlLGkpfXNldFZhbHVlKHQsZSl7dGhpcy5kZWxlZ2F0ZS5zZXRWYWx1ZSh0LGUpfWxpc3Rlbih0LGUsaSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX1kaXNhYmxlQW5pbWF0aW9ucyh0LGUpe3RoaXMuZW5naW5lLmRpc2FibGVBbmltYXRpb25zKHQsZSl9fSxnQj1jbGFzcyBleHRlbmRzIExUe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyksdGhpcy5mYWN0b3J5PXQsdGhpcy5uYW1lc3BhY2VJZD1lfXNldFByb3BlcnR5KHQsZSxpKXsiQCI9PWUuY2hhckF0KDApPyIuIj09ZS5jaGFyQXQoMSkmJmU9PWtYP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnModCxpPXZvaWQgMD09PWl8fCEhaSk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLHQsZS5zbGljZSgxKSxpKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxpKX1saXN0ZW4odCxlLGkpe2lmKCJAIj09ZS5jaGFyQXQoMCkpe2xldCByPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBufX0odCksbz1lLnNsaWNlKDEpLHM9IiI7cmV0dXJuIkAiIT1vLmNoYXJBdCgwKSYmKFtvLHNdPWZ1bmN0aW9uKG4pe2xldCB0PW4uaW5kZXhPZigiLiIpO3JldHVybltuLnN1YnN0cmluZygwLHQpLG4uc2xpY2UodCsxKV19KG8pKSx0aGlzLmVuZ2luZS5saXN0ZW4odGhpcy5uYW1lc3BhY2VJZCxyLG8scyxhPT57dGhpcy5mYWN0b3J5LnNjaGVkdWxlTGlzdGVuZXJDYWxsYmFjayhhLl9kYXRhfHwtMSxpLGEpfSl9cmV0dXJuIHRoaXMuZGVsZWdhdGUubGlzdGVuKHQsZSxpKX19LHNTZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVHB7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZS5ib2R5LGkscil9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodEMpLFIoVmYpLFIoSmMpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxGWD1be3Byb3ZpZGU6cXgsdXNlQ2xhc3M6blNlfSx7cHJvdmlkZTpWZix1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBSVH19LHtwcm92aWRlOlRwLHVzZUNsYXNzOnNTZX0se3Byb3ZpZGU6cWMsdXNlRmFjdG9yeTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBpU2Uobix0LGUpfSxkZXBzOltqeCxUcCxwdF19XSxSWD1be3Byb3ZpZGU6dEMsdXNlRmFjdG9yeTooKT0+bmV3IGNsYXNze3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KHQpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KHQsZSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KHQsZSl7cmV0dXJuIF9YKHQsZSl9Z2V0UGFyZW50RWxlbWVudCh0KXtyZXR1cm4gdUIodCl9cXVlcnkodCxlLGkpe3JldHVybiB2WCh0LGUsaSl9Y29tcHV0ZVN0eWxlKHQsZSxpKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV19YW5pbWF0ZSh0LGUsaSxyLG8scz1bXSl7bGV0IGw9e2R1cmF0aW9uOmksZGVsYXk6cixmaWxsOjA9PXI/ImJvdGgiOiJmb3J3YXJkcyJ9O28mJihsLmVhc2luZz1vKTtsZXQgYz1uZXcgTWFwLHU9cy5maWx0ZXIoaD0+aCBpbnN0YW5jZW9mIGtUKTsoZnVuY3Rpb24obix0KXtyZXR1cm4gMD09PW58fDA9PT10fSkoaSxyKSYmdS5mb3JFYWNoKGg9PntoLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChmLG0pPT5jLnNldChtLGYpKX0pO2xldCBkPWZ1bmN0aW9uKG4pe3JldHVybiBuLmxlbmd0aD9uWzBdaW5zdGFuY2VvZiBNYXA/bjpuLm1hcCh0PT54WCh0KSk6W119KGUpLm1hcChoPT5qMChoKSk7ZD1mdW5jdGlvbihuLHQsZSl7aWYoZS5zaXplJiZ0Lmxlbmd0aCl7bGV0IGk9dFswXSxyPVtdO2lmKGUuZm9yRWFjaCgobyxzKT0+e2kuaGFzKHMpfHxyLnB1c2gocyksaS5zZXQocyxvKX0pLHIubGVuZ3RoKWZvcihsZXQgbz0xO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dO3IuZm9yRWFjaChhPT5zLnNldChhLE1YKG4sYSkpKX19cmV0dXJuIHR9KHQsZCxjKTtsZXQgcD1mdW5jdGlvbihuLHQpe2xldCBlPW51bGwsaT1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD8oZT1xMyh0WzBdKSx0Lmxlbmd0aD4xJiYoaT1xMyh0W3QubGVuZ3RoLTFdKSkpOnQgaW5zdGFuY2VvZiBNYXAmJihlPXEzKHQpKSxlfHxpP25ldyAkTWUobixlLGkpOm51bGx9KHQsZCk7cmV0dXJuIG5ldyBrVCh0LGQsbCxwKX19fSx7cHJvdmlkZTpMaSx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5GWF0sY1NlPVt7cHJvdmlkZTp0Qyx1c2VDbGFzczpkQn0se3Byb3ZpZGU6TGksdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uRlhdLE5YPSgoKT0+e2NsYXNzIG57c3RhdGljIHdpdGhDb25maWcoZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOmUuZGlzYWJsZUFuaW1hdGlvbnM/Y1NlOlJYfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpSWCxpbXBvcnRzOlt5VF19KSxufSkoKSxiQj17fTtmdW5jdGlvbiB3ZShuLHQpe2lmKGJCW25dPShiQltuXXx8MCkrMSwiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gX0IobiwoLi4uaSk9Pih7Li4udCguLi5pKSx0eXBlOm59KSk7c3dpdGNoKHQ/dC5fYXM6ImVtcHR5Iil7Y2FzZSJlbXB0eSI6cmV0dXJuIF9CKG4sKCk9Pih7dHlwZTpufSkpO2Nhc2UicHJvcHMiOnJldHVybiBfQihuLGk9Pih7Li4uaSx0eXBlOm59KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY29uZmlnLiIpfX1mdW5jdGlvbiBfQihuLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidHlwZSIse3ZhbHVlOm4sd3JpdGFibGU6ITF9KX12YXIgSlg9IkBuZ3J4L3N0b3JlL2luaXQiLHEwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBWcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHt0eXBlOkpYfSl9bmV4dChlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJcbiAgICAgICAgRGlzcGF0Y2ggZXhwZWN0ZWQgYW4gb2JqZWN0LCBpbnN0ZWFkIGl0IHJlY2VpdmVkIGEgZnVuY3Rpb24uXG4gICAgICAgIElmIHlvdSdyZSB1c2luZyB0aGUgY3JlYXRlQWN0aW9uIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvblxuICAgICAgICBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIGFjdGlvbi4gRm9yIGV4YW1wbGUsIHNvbWVBY3Rpb24gc2hvdWxkIGJlIHNvbWVBY3Rpb24oKS4iKTtpZih0eXBlb2YgZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGJlIG9iamVjdHMiKTtpZih0eXBlb2YgZS50eXBlPiJ1Iil0aHJvdyBuZXcgVHlwZUVycm9yKCJBY3Rpb25zIG11c3QgaGF2ZSBhIHR5cGUgcHJvcGVydHkiKTtzdXBlci5uZXh0KGUpfWNvbXBsZXRlKCl7fW5nT25EZXN0cm95KCl7c3VwZXIuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdVNlPVtxMF0sJFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSb290IEd1YXJkIiksTFg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBJbml0aWFsIFN0YXRlIiksTUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbml0aWFsIFN0YXRlIiksZVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBSZWR1Y2VyIEZhY3RvcnkiKSxCWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlZHVjZXIgRmFjdG9yeSBQcm92aWRlciIpLHRRPW5ldyBzZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBSZWR1Y2VycyIpLHZCPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBSZWR1Y2VycyIpLFZYPW5ldyBzZSgiQG5ncngvc3RvcmUgU3RvcmUgRmVhdHVyZXMiKSxIWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIFJlZHVjZXJzIikseUI9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIiksVVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIENvbmZpZ3MiKSxuUT1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFN0b3JlIEZlYXR1cmVzIikselg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBGZWF0dXJlIFJlZHVjZXJzIFRva2VuIiksaVE9bmV3IHNlKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFJlZHVjZXJzIiksalg9bmV3IHNlKCJAbmdyeC9zdG9yZSBVc2VyIFByb3ZpZGVkIE1ldGEgUmVkdWNlcnMiKSxXMD1uZXcgc2UoIkBuZ3J4L3N0b3JlIE1ldGEgUmVkdWNlcnMiKSxHWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJlc29sdmVkIE1ldGEgUmVkdWNlcnMiKSxXWD1uZXcgc2UoIkBuZ3J4L3N0b3JlIFVzZXIgUnVudGltZSBDaGVja3MgQ29uZmlnIikscVg9bmV3IHNlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLGlDPW5ldyBzZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUnVudGltZSBDaGVja3MiKSxTQj1uZXcgc2UoIkBuZ3J4L3N0b3JlIENoZWNrIGlmIEFjdGlvbiB0eXBlcyBhcmUgdW5pcXVlIik7ZnVuY3Rpb24gSGYobix0PXt9KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPXt9O2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXtsZXQgcz1lW29dOyJmdW5jdGlvbiI9PXR5cGVvZiBuW3NdJiYoaVtzXT1uW3NdKX1sZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gZnVuY3Rpb24ocyxhKXtzPXZvaWQgMD09PXM/dDpzO2xldCBsPSExLGM9e307Zm9yKGxldCB1PTA7dTxyLmxlbmd0aDt1Kyspe2xldCBkPXJbdV0saD1zW2RdLGY9KDAsaVtkXSkoaCxhKTtjW2RdPWYsbD1sfHxmIT09aH1yZXR1cm4gbD9jOnN9fWZ1bmN0aW9uIFVUKC4uLm4pe3JldHVybiBmdW5jdGlvbih0KXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIHQ7bGV0IGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gbi5zbGljZSgwLC0xKS5yZWR1Y2VSaWdodCgocixvKT0+byhyKSxlKHQpKX19ZnVuY3Rpb24gclEobix0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MCYmKG49VVQuYXBwbHkobnVsbCxbLi4udCxuXSkpLChlLGkpPT57bGV0IHI9bihlKTtyZXR1cm4obyxzKT0+cihvPXZvaWQgMD09PW8/aTpvLHMpfX1uZXcgc2UoIkBuZ3J4L3N0b3JlIFJvb3QgU3RvcmUgUHJvdmlkZXIiKSxuZXcgc2UoIkBuZ3J4L3N0b3JlIEZlYXR1cmUgU3RhdGUgUHJvdmlkZXIiKTt2YXIgckM9Y2xhc3MgZXh0ZW5kcyBRdHt9LEJUPWNsYXNzIGV4dGVuZHMgcTB7fSxWVD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyhyLGkpKSx0aGlzLmRpc3BhdGNoZXI9ZSx0aGlzLmluaXRpYWxTdGF0ZT1pLHRoaXMucmVkdWNlcnM9cix0aGlzLnJlZHVjZXJGYWN0b3J5PW99Z2V0IGN1cnJlbnRSZWR1Y2Vycygpe3JldHVybiB0aGlzLnJlZHVjZXJzfWFkZEZlYXR1cmUoZSl7dGhpcy5hZGRGZWF0dXJlcyhbZV0pfWFkZEZlYXR1cmVzKGUpe2xldCBpPWUucmVkdWNlKChyLHtyZWR1Y2VyczpvLHJlZHVjZXJGYWN0b3J5OnMsbWV0YVJlZHVjZXJzOmEsaW5pdGlhbFN0YXRlOmwsa2V5OmN9KT0+e2xldCB1PSJmdW5jdGlvbiI9PXR5cGVvZiBvP2Z1bmN0aW9uKG4pe2xldCB0PUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjA/VVQoLi4ubik6ZT0+ZTtyZXR1cm4oZSxpKT0+KGU9dChlKSwocixvKT0+ZShyPXZvaWQgMD09PXI/aTpyLG8pKX0oYSkobyxsKTpyUShzLGEpKG8sbCk7cmV0dXJuIHJbY109dSxyfSx7fSk7dGhpcy5hZGRSZWR1Y2VycyhpKX1yZW1vdmVGZWF0dXJlKGUpe3RoaXMucmVtb3ZlRmVhdHVyZXMoW2VdKX1yZW1vdmVGZWF0dXJlcyhlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKGUubWFwKGk9Pmkua2V5KSl9YWRkUmVkdWNlcihlLGkpe3RoaXMuYWRkUmVkdWNlcnMoe1tlXTppfSl9YWRkUmVkdWNlcnMoZSl7dGhpcy5yZWR1Y2Vycz17Li4udGhpcy5yZWR1Y2VycywuLi5lfSx0aGlzLnVwZGF0ZVJlZHVjZXJzKE9iamVjdC5rZXlzKGUpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVtb3ZlUmVkdWNlcnMoW2VdKX1yZW1vdmVSZWR1Y2VycyhlKXtlLmZvckVhY2goaT0+e3RoaXMucmVkdWNlcnM9ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmtleXMobikuZmlsdGVyKGU9PmUhPT10KS5yZWR1Y2UoKGUsaSk9Pk9iamVjdC5hc3NpZ24oZSx7W2ldOm5baV19KSx7fSl9KHRoaXMucmVkdWNlcnMsaSl9KSx0aGlzLnVwZGF0ZVJlZHVjZXJzKGUpfXVwZGF0ZVJlZHVjZXJzKGUpe3RoaXMubmV4dCh0aGlzLnJlZHVjZXJGYWN0b3J5KHRoaXMucmVkdWNlcnMsdGhpcy5pbml0aWFsU3RhdGUpKSx0aGlzLmRpc3BhdGNoZXIubmV4dCh7dHlwZToiQG5ncngvc3RvcmUvdXBkYXRlLXJlZHVjZXJzIixmZWF0dXJlczplfSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQlQpLFIoTUIpLFIodFEpLFIoZVEpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxnU2U9W1ZULHtwcm92aWRlOnJDLHVzZUV4aXN0aW5nOlZUfSx7cHJvdmlkZTpCVCx1c2VFeGlzdGluZzpxMH1dLG9DPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtuZ09uRGVzdHJveSgpe3RoaXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF9TZT1bb0NdLEhUPWNsYXNzIGV4dGVuZHMgUXR7fSxZWD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVnJ7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIobyk7bGV0IGM9ZS5waXBlKHpoKE5PKSkucGlwZShHdChpKSkucGlwZShmdW5jdGlvbihuLHQpe3JldHVybiBxdCh1aihuLHQsYXJndW1lbnRzLmxlbmd0aD49MiwhMCkpfSh2U2Use3N0YXRlOm99KSk7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1jLnN1YnNjcmliZSgoe3N0YXRlOnUsYWN0aW9uOmR9KT0+e3RoaXMubmV4dCh1KSxyLm5leHQoZCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLklOSVQ9Slgsbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHEwKSxSKHJDKSxSKG9DKSxSKE1CKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gdlNlKG49e3N0YXRlOnZvaWQgMH0sW3QsZV0pe2xldHtzdGF0ZTppfT1uO3JldHVybntzdGF0ZTplKGksdCksYWN0aW9uOnR9fXZhciB5U2U9W1lYLHtwcm92aWRlOkhULHVzZUV4aXN0aW5nOllYfV0sUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuYWN0aW9uc09ic2VydmVyPWksdGhpcy5yZWR1Y2VyTWFuYWdlcj1yLHRoaXMuc291cmNlPWV9c2VsZWN0KGUsLi4uaSl7cmV0dXJuIGZuLmNhbGwobnVsbCxlLC4uLmkpKHRoaXMpfWxpZnQoZSl7bGV0IGk9bmV3IG4odGhpcyx0aGlzLmFjdGlvbnNPYnNlcnZlcix0aGlzLnJlZHVjZXJNYW5hZ2VyKTtyZXR1cm4gaS5vcGVyYXRvcj1lLGl9ZGlzcGF0Y2goZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIubmV4dChlKX1uZXh0KGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLm5leHQoZSl9ZXJyb3IoZSl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIuZXJyb3IoZSl9Y29tcGxldGUoKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5jb21wbGV0ZSgpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLmFkZFJlZHVjZXIoZSxpKX1yZW1vdmVSZWR1Y2VyKGUpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlUmVkdWNlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihIVCksUihxMCksUihWVCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGJTZT1bUGVdO2Z1bmN0aW9uIGZuKG4sdCwuLi5lKXtyZXR1cm4gZnVuY3Rpb24ocil7bGV0IG87aWYoInN0cmluZyI9PXR5cGVvZiBuKXtsZXQgcz1bdCwuLi5lXS5maWx0ZXIoQm9vbGVhbik7bz1yLnBpcGUoZnVuY3Rpb24oLi4ubil7bGV0IHQ9bi5sZW5ndGg7aWYoMD09PXQpdGhyb3cgbmV3IEVycm9yKCJsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LiIpO3JldHVybiBCKGU9PntsZXQgaT1lO2ZvcihsZXQgcj0wO3I8dDtyKyspe2xldCBvPWk/LltuW3JdXTtpZighKHR5cGVvZiBvPCJ1IikpcmV0dXJuO2k9b31yZXR1cm4gaX0pfShuLC4uLnMpKX1lbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoYFVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlb2Ygbn0nIGluIHNlbGVjdCBvcGVyYXRvciwgZXhwZWN0ZWQgJ3N0cmluZycgb3IgJ2Z1bmN0aW9uJ2ApO289ci5waXBlKEIocz0+bihzLHQpKSl9cmV0dXJuIG8ucGlwZShkaSgpKX19dmFyIEVCPSJodHRwczovL25ncnguaW8vZ3VpZGUvc3RvcmUvY29uZmlndXJhdGlvbi9ydW50aW1lLWNoZWNrcyI7ZnVuY3Rpb24gWFgobil7cmV0dXJuIHZvaWQgMD09PW59ZnVuY3Rpb24gUVgobil7cmV0dXJuIG51bGw9PT1ufWZ1bmN0aW9uIG9RKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pfWZ1bmN0aW9uIHNRKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW59ZnVuY3Rpb24geEIobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG59ZnVuY3Rpb24gS1gobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gSVNlKG4sdCxlKXtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZighZShuW2ldLHRbaV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGFRKG4sdD1LWCxlPUtYKXtsZXQgbyxpPW51bGwscj1udWxsO3JldHVybnttZW1vaXplZDpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PW8pcmV0dXJuIG8ucmVzdWx0O2lmKCFpKXJldHVybiByPW4uYXBwbHkobnVsbCxhcmd1bWVudHMpLGk9YXJndW1lbnRzLHI7aWYoIUlTZShhcmd1bWVudHMsaSx0KSlyZXR1cm4gcjtsZXQgdT1uLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gaT1hcmd1bWVudHMsZShyLHUpP3I6KHI9dSx1KX0scmVzZXQ6ZnVuY3Rpb24oKXtpPW51bGwscj1udWxsfSxzZXRSZXN1bHQ6ZnVuY3Rpb24odSl7bz17cmVzdWx0OnV9fSxjbGVhclJlc3VsdDpmdW5jdGlvbigpe289dm9pZCAwfX19ZnVuY3Rpb24gWSguLi5uKXtyZXR1cm4gZnVuY3Rpb24obix0PXtzdGF0ZUZuOlBTZX0pe3JldHVybiBmdW5jdGlvbiguLi5lKXtsZXQgaT1lO2lmKEFycmF5LmlzQXJyYXkoaVswXSkpe2xldFt1LC4uLmRdPWk7aT1bLi4udSwuLi5kXX1sZXQgcj1pLnNsaWNlKDAsaS5sZW5ndGgtMSksbz1pW2kubGVuZ3RoLTFdLHM9ci5maWx0ZXIodT0+dS5yZWxlYXNlJiYiZnVuY3Rpb24iPT10eXBlb2YgdS5yZWxlYXNlKSxhPW4oZnVuY3Rpb24oLi4udSl7cmV0dXJuIG8uYXBwbHkobnVsbCx1KX0pLGw9YVEoZnVuY3Rpb24odSxkKXtyZXR1cm4gdC5zdGF0ZUZuLmFwcGx5KG51bGwsW3UscixkLGFdKX0pO3JldHVybiBPYmplY3QuYXNzaWduKGwubWVtb2l6ZWQse3JlbGVhc2U6ZnVuY3Rpb24oKXtsLnJlc2V0KCksYS5yZXNldCgpLHMuZm9yRWFjaCh1PT51LnJlbGVhc2UoKSl9LHByb2plY3RvcjphLm1lbW9pemVkLHNldFJlc3VsdDpsLnNldFJlc3VsdCxjbGVhclJlc3VsdDpsLmNsZWFyUmVzdWx0fSl9fShhUSkoLi4ubil9ZnVuY3Rpb24gUFNlKG4sdCxlLGkpe2lmKHZvaWQgMD09PWUpe2xldCBvPXQubWFwKHM9PnMobikpO3JldHVybiBpLm1lbW9pemVkLmFwcGx5KG51bGwsbyl9bGV0IHI9dC5tYXAobz0+byhuLGUpKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLFsuLi5yLGVdKX1mdW5jdGlvbiBQcihuKXtyZXR1cm4gWSh0PT57bGV0IGU9dFtuXTtyZXR1cm4gQmIoKSYmIShuIGluIHQpJiZjb25zb2xlLndhcm4oYEBuZ3J4L3N0b3JlOiBUaGUgZmVhdHVyZSBuYW1lICIke259IiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc3RhdGUsIHRoZXJlZm9yZSBjcmVhdGVGZWF0dXJlU2VsZWN0b3IgY2Fubm90IGFjY2VzcyBpdC4gIEJlIHN1cmUgaXQgaXMgaW1wb3J0ZWQgaW4gYSBsb2FkZWQgbW9kdWxlIHVzaW5nIFN0b3JlTW9kdWxlLmZvclJvb3QoJyR7bn0nLCAuLi4pIG9yIFN0b3JlTW9kdWxlLmZvckZlYXR1cmUoJyR7bn0nLCAuLi4pLiAgSWYgdGhlIGRlZmF1bHQgc3RhdGUgaXMgaW50ZW5kZWQgdG8gYmUgdW5kZWZpbmVkLCBhcyBpcyB0aGUgY2FzZSB3aXRoIHJvdXRlciBzdGF0ZSwgdGhpcyBkZXZlbG9wbWVudC1vbmx5IHdhcm5pbmcgbWVzc2FnZSBjYW4gYmUgaWdub3JlZC5gKSxlfSx0PT50KX1mdW5jdGlvbiBPU2Uobix0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHNlP24uZ2V0KHQpOnR9ZnVuY3Rpb24ga1NlKG4sdCxlKXtyZXR1cm4gZS5tYXAoKGkscik9PntpZih0W3JdaW5zdGFuY2VvZiBzZSl7bGV0IG89bi5nZXQodFtyXSk7cmV0dXJue2tleTppLmtleSxyZWR1Y2VyRmFjdG9yeTpvLnJlZHVjZXJGYWN0b3J5P28ucmVkdWNlckZhY3Rvcnk6SGYsbWV0YVJlZHVjZXJzOm8ubWV0YVJlZHVjZXJzP28ubWV0YVJlZHVjZXJzOltdLGluaXRpYWxTdGF0ZTpvLmluaXRpYWxTdGF0ZX19cmV0dXJuIGl9KX1mdW5jdGlvbiBGU2Uobix0KXtyZXR1cm4gdC5tYXAoaT0+aSBpbnN0YW5jZW9mIHNlP24uZ2V0KGkpOmkpfWZ1bmN0aW9uIGxRKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24oKTpufWZ1bmN0aW9uIE5TZShuLHQpe3JldHVybiBuLmNvbmNhdCh0KX1mdW5jdGlvbiBMU2Uobil7aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgcm9vdCBTdG9yZSBoYXMgYmVlbiBwcm92aWRlZCBtb3JlIHRoYW4gb25jZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCBwcm92aWRlIGZlYXR1cmUgc3RhdGVzIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIENCKG4pe09iamVjdC5mcmVlemUobik7bGV0IHQ9eEIobik7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pLmZvckVhY2goZT0+e2lmKCFlLnN0YXJ0c1dpdGgoIlx1MDI3NSIpJiZmdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobix0KX0obixlKSYmKCF0fHwiY2FsbGVyIiE9PWUmJiJjYWxsZWUiIT09ZSYmImFyZ3VtZW50cyIhPT1lKSl7bGV0IGk9bltlXTsoc1EoaSl8fHhCKGkpKSYmIU9iamVjdC5pc0Zyb3plbihpKSYmQ0IoaSl9fSksbn1mdW5jdGlvbiB3QihuLHQ9W10pe3JldHVybihYWChuKXx8UVgobikpJiYwPT09dC5sZW5ndGg/e3BhdGg6WyJyb290Il0sdmFsdWU6bn06T2JqZWN0LmtleXMobikucmVkdWNlKChpLHIpPT57aWYoaSlyZXR1cm4gaTtsZXQgbz1uW3JdO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4geEIobikmJm4uaGFzT3duUHJvcGVydHkoIlx1MDI3NWNtcCIpfShvKT9pOiEoWFgobyl8fFFYKG8pfHxmdW5jdGlvbihuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG59KG8pfHxmdW5jdGlvbihuKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBufShvKXx8ZnVuY3Rpb24obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBufShvKXx8b1EobykpJiYoZnVuY3Rpb24obil7aWYoIWZ1bmN0aW9uKG4pe3JldHVybiBzUShuKSYmIW9RKG4pfShuKSlyZXR1cm4hMTtsZXQgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIHQ9PT1PYmplY3QucHJvdG90eXBlfHxudWxsPT09dH0obyk/d0IobyxbLi4udCxyXSk6e3BhdGg6Wy4uLnQscl0sdmFsdWU6b30pfSwhMSl9ZnVuY3Rpb24gWlgobix0KXtpZighMT09PW4pcmV0dXJuO2xldCBlPW4ucGF0aC5qb2luKCIuIiksaT1uZXcgRXJyb3IoYERldGVjdGVkIHVuc2VyaWFsaXphYmxlICR7dH0gYXQgIiR7ZX0iLiAke0VCfSNzdHJpY3Qke3R9c2VyaWFsaXphYmlsaXR5YCk7dGhyb3cgaS52YWx1ZT1uLnZhbHVlLGkudW5zZXJpYWxpemFibGVQYXRoPWUsaX1mdW5jdGlvbiBVU2Uobil7cmV0dXJuIEJiKCk/e3N0cmljdFN0YXRlU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTohMCxzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uV2l0aGluTmdab25lOiExLHN0cmljdEFjdGlvblR5cGVVbmlxdWVuZXNzOiExLC4uLm59OntzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbldpdGhpbk5nWm9uZTohMSxzdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzczohMX19ZnVuY3Rpb24gelNlKHtzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6bixzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXt0LmFjdGlvbihpKSYmWlgod0IoaSksImFjdGlvbiIpO2xldCByPW4oZSxpKTtyZXR1cm4gdC5zdGF0ZSgpJiZaWCh3QihyKSwic3RhdGUiKSxyfX0oZSx7YWN0aW9uOmk9Pm4mJiFUQihpKSxzdGF0ZTooKT0+dH0pOmV9ZnVuY3Rpb24galNlKHtzdHJpY3RBY3Rpb25JbW11dGFiaWxpdHk6bixzdHJpY3RTdGF0ZUltbXV0YWJpbGl0eTp0fSl7cmV0dXJuIGU9Pm58fHQ/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtsZXQgcj10LmFjdGlvbihpKT9DQihpKTppLG89bihlLHIpO3JldHVybiB0LnN0YXRlKCk/Q0Iobyk6b319KGUse2FjdGlvbjppPT5uJiYhVEIoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uIFRCKG4pe3JldHVybiBuLnR5cGUuc3RhcnRzV2l0aCgiQG5ncngiKX1mdW5jdGlvbiBHU2Uoe3N0cmljdEFjdGlvbldpdGhpbk5nWm9uZTpufSl7cmV0dXJuIHQ9Pm4/ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtpZih0LmFjdGlvbihpKSYmIXB0LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBFcnJvcihgQWN0aW9uICcke2kudHlwZX0nIHJ1bm5pbmcgb3V0c2lkZSBOZ1pvbmUuICR7RUJ9I3N0cmljdGFjdGlvbndpdGhpbm5nem9uZWApO3JldHVybiBuKGUsaSl9fSh0LHthY3Rpb246ZT0+biYmIVRCKGUpfSk6dH1mdW5jdGlvbiBXU2Uobil7cmV0dXJuW3twcm92aWRlOnFYLHVzZVZhbHVlOm59LHtwcm92aWRlOldYLHVzZUZhY3Rvcnk6cVNlLGRlcHM6W3FYXX0se3Byb3ZpZGU6aUMsZGVwczpbV1hdLHVzZUZhY3Rvcnk6VVNlfSx7cHJvdmlkZTpXMCxtdWx0aTohMCxkZXBzOltpQ10sdXNlRmFjdG9yeTpqU2V9LHtwcm92aWRlOlcwLG11bHRpOiEwLGRlcHM6W2lDXSx1c2VGYWN0b3J5OnpTZX0se3Byb3ZpZGU6VzAsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6R1NlfV19ZnVuY3Rpb24gY1EoKXtyZXR1cm5be3Byb3ZpZGU6U0IsbXVsdGk6ITAsZGVwczpbaUNdLHVzZUZhY3Rvcnk6WVNlfV19ZnVuY3Rpb24gcVNlKG4pe3JldHVybiBufWZ1bmN0aW9uIFlTZShuKXtpZighbi5zdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzcylyZXR1cm47bGV0IHQ9T2JqZWN0LmVudHJpZXMoYkIpLmZpbHRlcigoWyxlXSk9PmU+MSkubWFwKChbZV0pPT5lKTtpZih0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiB0eXBlcyBhcmUgcmVnaXN0ZXJlZCBtb3JlIHRoYW4gb25jZSwgJHt0Lm1hcChlPT5gIiR7ZX0iYCkuam9pbigiLCAiKX0uICR7RUJ9I3N0cmljdGFjdGlvbnR5cGV1bmlxdWVuZXNzYCl9ZnVuY3Rpb24gWFNlKG4sdCl7cmV0dXJuW3twcm92aWRlOiRYLHVzZUZhY3Rvcnk6TFNlLGRlcHM6W1tQZSxuZXcgT28sbmV3IFRhXV19LHtwcm92aWRlOkxYLHVzZVZhbHVlOnQuaW5pdGlhbFN0YXRlfSx7cHJvdmlkZTpNQix1c2VGYWN0b3J5OmxRLGRlcHM6W0xYXX0se3Byb3ZpZGU6dkIsdXNlVmFsdWU6bn0se3Byb3ZpZGU6SFgsdXNlRXhpc3Rpbmc6biBpbnN0YW5jZW9mIHNlP246dkJ9LHtwcm92aWRlOnRRLGRlcHM6W3puLHZCLFtuZXcgamcoSFgpXV0sdXNlRmFjdG9yeTpPU2V9LHtwcm92aWRlOmpYLHVzZVZhbHVlOnQubWV0YVJlZHVjZXJzP3QubWV0YVJlZHVjZXJzOltdfSx7cHJvdmlkZTpHWCxkZXBzOltXMCxqWF0sdXNlRmFjdG9yeTpOU2V9LHtwcm92aWRlOkJYLHVzZVZhbHVlOnQucmVkdWNlckZhY3Rvcnk/dC5yZWR1Y2VyRmFjdG9yeTpIZn0se3Byb3ZpZGU6ZVEsZGVwczpbQlgsR1hdLHVzZUZhY3Rvcnk6clF9LHVTZSxnU2UsX1NlLHlTZSxiU2UsV1NlKHQucnVudGltZUNoZWNrcyksY1EoKV19ZnVuY3Rpb24gUVNlKG4sdCxlPXt9KXtyZXR1cm5be3Byb3ZpZGU6VVgsbXVsdGk6ITAsdXNlVmFsdWU6biBpbnN0YW5jZW9mIE9iamVjdD97fTplfSx7cHJvdmlkZTpWWCxtdWx0aTohMCx1c2VWYWx1ZTp7a2V5Om4gaW5zdGFuY2VvZiBPYmplY3Q/bi5uYW1lOm4scmVkdWNlckZhY3Rvcnk6ZSBpbnN0YW5jZW9mIHNlfHwhZS5yZWR1Y2VyRmFjdG9yeT9IZjplLnJlZHVjZXJGYWN0b3J5LG1ldGFSZWR1Y2VyczplIGluc3RhbmNlb2Ygc2V8fCFlLm1ldGFSZWR1Y2Vycz9bXTplLm1ldGFSZWR1Y2Vycyxpbml0aWFsU3RhdGU6ZSBpbnN0YW5jZW9mIHNlfHwhZS5pbml0aWFsU3RhdGU/dm9pZCAwOmUuaW5pdGlhbFN0YXRlfX0se3Byb3ZpZGU6blEsZGVwczpbem4sVVgsVlhdLHVzZUZhY3Rvcnk6a1NlfSx7cHJvdmlkZTp5QixtdWx0aTohMCx1c2VWYWx1ZTpuIGluc3RhbmNlb2YgT2JqZWN0P24ucmVkdWNlcjp0fSx7cHJvdmlkZTp6WCxtdWx0aTohMCx1c2VFeGlzdGluZzp0IGluc3RhbmNlb2Ygc2U/dDp5Qn0se3Byb3ZpZGU6aVEsbXVsdGk6ITAsZGVwczpbem4seUIsW25ldyBqZyh6WCldXSx1c2VGYWN0b3J5OkZTZX0sY1EoKV19dmFyIHNDPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihxMCksUihyQyksUihvQyksUihQZSksUigkWCw4KSxSKFNCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCkselQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuZmVhdHVyZXM9ZSx0aGlzLmZlYXR1cmVSZWR1Y2Vycz1pLHRoaXMucmVkdWNlck1hbmFnZXI9cjtsZXQgYT1lLm1hcCgobCxjKT0+e2xldCBkPWkuc2hpZnQoKVtjXTtyZXR1cm57Li4ubCxyZWR1Y2VyczpkLGluaXRpYWxTdGF0ZTpsUShsLmluaXRpYWxTdGF0ZSl9fSk7ci5hZGRGZWF0dXJlcyhhKX1uZ09uRGVzdHJveSgpe3RoaXMucmVkdWNlck1hbmFnZXIucmVtb3ZlRmVhdHVyZXModGhpcy5mZWF0dXJlcyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoblEpLFIoaVEpLFIoVlQpLFIoc0MpLFIoU0IsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxScj0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JSb290KGUsaT17fSl7cmV0dXJue25nTW9kdWxlOnNDLHByb3ZpZGVyczpbLi4uWFNlKGUsaSldfX1zdGF0aWMgZm9yRmVhdHVyZShlLGkscj17fSl7cmV0dXJue25nTW9kdWxlOnpULHByb3ZpZGVyczpbLi4uUVNlKGUsaSxyKV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gU2UoLi4ubil7cmV0dXJue3JlZHVjZXI6bi5wb3AoKSx0eXBlczpuLm1hcChpPT5pLnR5cGUpfX1mdW5jdGlvbiB3cihuLC4uLnQpe2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIHQpZm9yKGxldCByIG9mIGkudHlwZXMpe2xldCBvPWUuZ2V0KHIpO2Uuc2V0KHIsbz8oYSxsKT0+aS5yZWR1Y2VyKG8oYSxsKSxsKTppLnJlZHVjZXIpfXJldHVybiBmdW5jdGlvbihpPW4scil7bGV0IG89ZS5nZXQoci50eXBlKTtyZXR1cm4gbz9vKGkscik6aX19dmFyIEtTZT17ZGlzcGF0Y2g6ITAsdXNlRWZmZWN0c0Vycm9ySGFuZGxlcjohMH0sR1Q9Il9fQG5ncngvZWZmZWN0c19jcmVhdGVfXyI7ZnVuY3Rpb24gVXIobix0KXtsZXQgZT1uKCksaT17Li4uS1NlLC4uLnR9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxHVCx7dmFsdWU6aX0pLGV9ZnVuY3Rpb24gWlNlKG4pe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5maWx0ZXIoaT0+ISghbltpXXx8IW5baV0uaGFzT3duUHJvcGVydHkoR1QpKSYmbltpXVtHVF0uaGFzT3duUHJvcGVydHkoImRpc3BhdGNoIikpLm1hcChpPT4oe3Byb3BlcnR5TmFtZTppLC4uLm5baV1bR1RdfSkpfWZ1bmN0aW9uIEFCKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobil9dmFyIHBRPSJfX0BuZ3J4L2VmZmVjdHNfXyI7ZnVuY3Rpb24gSlNlKG4pe3JldHVybiBVVChlRWUsQUIpKG4pfWZ1bmN0aW9uIGVFZShuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4uY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkocFEpfShuKT9uLmNvbnN0cnVjdG9yW3BRXTpbXX1mdW5jdGlvbiBoUShuLHQsZT0xMCl7cmV0dXJuIG4ucGlwZShDbyhpPT4odCYmdC5oYW5kbGVFcnJvcihpKSxlPD0xP246aFEobix0LGUtMSkpKSl9dmFyIGNzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBRdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigpLGUmJih0aGlzLnNvdXJjZT1lKX1saWZ0KGUpe2xldCBpPW5ldyBuO3JldHVybiBpLnNvdXJjZT10aGlzLGkub3BlcmF0b3I9ZSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKG9DKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gVGkoLi4ubil7cmV0dXJuIEhlKHQ9Pm4uc29tZShlPT4ic3RyaW5nIj09dHlwZW9mIGU/ZT09PXQudHlwZTplLnR5cGU9PT10LnR5cGUpKX12YXIgZlE9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgR3VhcmQiKSxqVD1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgVXNlciBQcm92aWRlZCBFZmZlY3RzIiksREI9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIFJvb3QgRWZmZWN0cyIpLG1RPW5ldyBzZSgiQG5ncngvZWZmZWN0cyBSb290IEVmZmVjdHMiKSx1UT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgSW50ZXJuYWwgRmVhdHVyZSBFZmZlY3RzIiksZ1E9bmV3IHNlKCJAbmdyeC9lZmZlY3RzIEZlYXR1cmUgRWZmZWN0cyIpLHJFZT1uZXcgc2UoIkBuZ3J4L2VmZmVjdHMgRWZmZWN0cyBFcnJvciBIYW5kbGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+aFF9KSxfUT0iQG5ncngvZWZmZWN0cy9pbml0IjtmdW5jdGlvbiBmRWUobil7cmV0dXJuIElCKG4sIm5ncnhPbkluaXRFZmZlY3RzIil9ZnVuY3Rpb24gSUIobix0KXtyZXR1cm4gbiYmdCBpbiBuJiYiZnVuY3Rpb24iPT10eXBlb2Ygblt0XX13ZShfUSk7dmFyIHZRPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBUZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5lcnJvckhhbmRsZXI9ZSx0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXI9aX1hZGRFZmZlY3RzKGUpe3RoaXMubmV4dChlKX10b0FjdGlvbnMoKXtyZXR1cm4gdGhpcy5waXBlKFZTKEFCKSxfbihlPT5lLnBpcGUoVlMobUVlKSkpLF9uKGU9PntsZXQgaT1lLnBpcGUoTFMobz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gZT0+e2xldCBpPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BQihuKS5jb25zdHJ1Y3Rvci5uYW1lLHI9ZnVuY3Rpb24obil7cmV0dXJuW0pTZSxaU2VdLnJlZHVjZSgoZSxpKT0+ZS5jb25jYXQoaShuKSksW10pfShuKS5tYXAoKHtwcm9wZXJ0eU5hbWU6byxkaXNwYXRjaDpzLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6YX0pPT57bGV0IGw9ImZ1bmN0aW9uIj09dHlwZW9mIG5bb10/bltvXSgpOm5bb10sYz1hP2UobCx0KTpsO3JldHVybiExPT09cz9jLnBpcGUocXkoKSk6Yy5waXBlKHF0KChuLHQpPT57bi5zdWJzY3JpYmUoTHQodCxlPT57dC5uZXh0KHRsLmNyZWF0ZU5leHQoZSkpfSwoKT0+e3QubmV4dCh0bC5jcmVhdGVDb21wbGV0ZSgpKSx0LmNvbXBsZXRlKCl9LGU9Pnt0Lm5leHQodGwuY3JlYXRlRXJyb3IoZSkpLHQuY29tcGxldGUoKX0pKX0pKS5waXBlKEIoZD0+KHtlZmZlY3Q6bltvXSxub3RpZmljYXRpb246ZCxwcm9wZXJ0eU5hbWU6byxzb3VyY2VOYW1lOmksc291cmNlSW5zdGFuY2U6bn0pKSl9KTtyZXR1cm4gdW4oLi4ucil9KGUsbix0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIElCKG4sIm5ncnhPblJ1bkVmZmVjdHMiKX0oZSk/ZS5uZ3J4T25SdW5FZmZlY3RzKGkpOml9fSh0aGlzLmVycm9ySGFuZGxlcix0aGlzLmVmZmVjdHNFcnJvckhhbmRsZXIpKG8pKSxCKG89PihmdW5jdGlvbihuLHQpe2lmKCJOIj09PW4ubm90aWZpY2F0aW9uLmtpbmQpe2xldCBlPW4ubm90aWZpY2F0aW9uLnZhbHVlOyFmdW5jdGlvbihuKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgbiYmbiYmbi50eXBlJiYic3RyaW5nIj09dHlwZW9mIG4udHlwZX0oZSkmJnQuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFZmZlY3QgJHtmdW5jdGlvbih7cHJvcGVydHlOYW1lOm4sc291cmNlSW5zdGFuY2U6dCxzb3VyY2VOYW1lOmV9KXtsZXQgaT0iZnVuY3Rpb24iPT10eXBlb2YgdFtuXTtyZXR1cm5gIiR7ZX0uJHtTdHJpbmcobil9JHtpPyIoKSI6IiJ9ImB9KG4pfSBkaXNwYXRjaGVkIGFuIGludmFsaWQgYWN0aW9uOiAke2Z1bmN0aW9uKG4pe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9Y2F0Y2h7cmV0dXJuIG59fShlKX1gKSl9fShvLHRoaXMuZXJyb3JIYW5kbGVyKSxvLm5vdGlmaWNhdGlvbikpLEhlKG89PiJOIj09PW8ua2luZCYmbnVsbCE9by52YWx1ZSkscXQoKG4sdCk9PntuLnN1YnNjcmliZShMdCh0LGU9PkhPKGUsdCkpKX0pKTtyZXR1cm4gdW4oaSxlLnBpcGUoSHQoMSksSGUoZkVlKSxCKG89Pm8ubmdyeE9uSW5pdEVmZmVjdHMoKSkpKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihTcyksUihyRWUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBtRWUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBJQihuLCJuZ3J4T25JZGVudGlmeUVmZmVjdHMiKX0obik/bi5uZ3J4T25JZGVudGlmeUVmZmVjdHMoKToiIn12YXIgeVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZWZmZWN0U291cmNlcz1lLHRoaXMuc3RvcmU9aSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbH1nZXQgaXNTdGFydGVkKCl7cmV0dXJuISF0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb259c3RhcnQoKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb258fCh0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249dGhpcy5lZmZlY3RTb3VyY2VzLnRvQWN0aW9ucygpLnN1YnNjcmliZSh0aGlzLnN0b3JlKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24mJih0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmVmZmVjdHNTdWJzY3JpcHRpb249bnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodlEpLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuc291cmNlcz1lLGkuc3RhcnQoKSxvLmZvckVhY2goYz0+ZS5hZGRFZmZlY3RzKGMpKSxyLmRpc3BhdGNoKHt0eXBlOl9RfSl9YWRkRWZmZWN0cyhlKXt0aGlzLnNvdXJjZXMuYWRkRWZmZWN0cyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih2USksUih5USksUihQZSksUihtUSksUihzQyw4KSxSKHpULDgpLFIoZlEsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxfRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXtpLmZvckVhY2gocz0+cy5mb3JFYWNoKGE9PmUuYWRkRWZmZWN0cyhhKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGJRKSxSKGdRKSxSKHNDLDgpLFIoelQsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxMbz0oKCk9PntjbGFzcyBue3N0YXRpYyBmb3JGZWF0dXJlKGU9W10pe3JldHVybntuZ01vZHVsZTpfRWUscHJvdmlkZXJzOltlLHtwcm92aWRlOnVRLG11bHRpOiEwLHVzZVZhbHVlOmV9LHtwcm92aWRlOmpULG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTpnUSxtdWx0aTohMCx1c2VGYWN0b3J5OmRRLGRlcHM6W3puLHVRLGpUXX1dfX1zdGF0aWMgZm9yUm9vdChlPVtdKXtyZXR1cm57bmdNb2R1bGU6YlEscHJvdmlkZXJzOltlLHtwcm92aWRlOkRCLHVzZVZhbHVlOltlXX0se3Byb3ZpZGU6ZlEsdXNlRmFjdG9yeTp5RWUsZGVwczpbW3lRLG5ldyBPbyxuZXcgVGFdLFtEQixuZXcgakZdXX0se3Byb3ZpZGU6alQsbXVsdGk6ITAsdXNlVmFsdWU6W119LHtwcm92aWRlOm1RLHVzZUZhY3Rvcnk6ZFEsZGVwczpbem4sREIsalRdfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCk7ZnVuY3Rpb24gZFEobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBvZiB0KWkucHVzaCguLi5yKTtmb3IobGV0IHIgb2YgZSlpLnB1c2goLi4ucik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQubWFwKGU9Pm4uZ2V0KGUpKX0obixpKX1mdW5jdGlvbiB5RWUobix0KXtpZigoMSE9PXQubGVuZ3RofHwwIT09dFswXS5sZW5ndGgpJiZuKXRocm93IG5ldyBUeXBlRXJyb3IoIkVmZmVjdHNNb2R1bGUuZm9yUm9vdCgpIGNhbGxlZCB0d2ljZS4gRmVhdHVyZSBtb2R1bGVzIHNob3VsZCB1c2UgRWZmZWN0c01vZHVsZS5mb3JGZWF0dXJlKCkgaW5zdGVhZC4iKTtyZXR1cm4iZ3VhcmRlZCJ9dmFyIGZpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTktOT1dOPTBdPSJVTktOT1dOIixuW24uRVhQRVJJTUVOVFM9MV09IkVYUEVSSU1FTlRTIixuW24uRVhQRVJJTUVOVD0yXT0iRVhQRVJJTUVOVCIsbltuLkNPTVBBUkVfRVhQRVJJTUVOVD0zXT0iQ09NUEFSRV9FWFBFUklNRU5UIixuW24uTk9UX1NFVD00XT0iTk9UX1NFVCJ9KGZpfHwoZmk9e30pKSxmaSkpKCksV1Q9ImRlZmF1bHRFeHBlcmltZW50SWQiLFkwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UUz0wXT0iRVhQRVJJTUVOVFMiLG5bbi5EQVNIQk9BUkQ9MV09IkRBU0hCT0FSRCJ9KFkwfHwoWTA9e30pKSxZMCkpKCk7ZnVuY3Rpb24gbEMobil7cmV0dXJuIG4uc3BsaXQoIiwiKS5tYXAodD0+e2xldCBlPXQuaW5kZXhPZigiOiIpO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBjb2xvbiBkZWxpbWl0aW5nIG5hbWUgYW5kIElEOiAke3R9YCk7bGV0IGk9dC5zbGljZSgwLGUpLHI9dC5zbGljZShlKzEpO2lmKCFyKXRocm93IG5ldyBFcnJvcihgRXhwZWN0IGlkIHRvIGJlIG5vbi1mYWxzeTogJHt0fWApO3JldHVybntuYW1lOmksaWQ6cn19KX1mdW5jdGlvbiB4UShuKXtyZXR1cm4gbi5tYXAoKHthbGlhczp0LGlkOmV9KT0+YCR7dH06JHtlfWApLmpvaW4oIiwiKX1mdW5jdGlvbiBhQyhuLHQpe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlQ6cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJleHBlcmltZW50SWQiKT9bdC5leHBlcmltZW50SWRdOltXVF07Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIGxDKHQuZXhwZXJpbWVudElkcykubWFwKCh7aWQ6aX0pPT5pKTtkZWZhdWx0OnJldHVybiBudWxsfX1mdW5jdGlvbiB1cyhuLHQpe2lmKCFufHwhdClyZXR1cm4gbj09PXQ7aWYobi5yb3V0ZUtpbmQhPT10LnJvdXRlS2luZClyZXR1cm4hMTtsZXQgZT1hQyhuLnJvdXRlS2luZCxuLnBhcmFtcyksaT1hQyh0LnJvdXRlS2luZCx0LnBhcmFtcyk7aWYobnVsbD09PWV8fG51bGw9PT1pKXJldHVybiBlPT09aTtpZihlLmxlbmd0aCE9PWkubGVuZ3RoKXJldHVybiExO2xldCByPWkuc29ydCgpO3JldHVybiBlLnNvcnQoKS5ldmVyeSgobyxzKT0+cltzXT09PW8pfWZ1bmN0aW9uIFBCKG4pe3N3aXRjaChuKXtjYXNlIGZpLkVYUEVSSU1FTlRTOnJldHVybiBZMC5FWFBFUklNRU5UUztjYXNlIGZpLkVYUEVSSU1FTlQ6Y2FzZSBmaS5DT01QQVJFX0VYUEVSSU1FTlQ6cmV0dXJuIFkwLkRBU0hCT0FSRDtjYXNlIGZpLlVOS05PV046Y2FzZSBmaS5OT1RfU0VUOnJldHVybiBudWxsfX1mdW5jdGlvbiBxVChuLHQsZSl7bGV0IGk9UEIobik7cmV0dXJuIG51bGwhPT1pJiYhZS5zb21lKHI9PnIuZGVlcExpbmtHcm91cD09PWkmJnIubmFtZXNwYWNlSWQ9PT10KX12YXIgU1FfZ2V0SHJlZj0oKT0+d2luZG93LmxvY2F0aW9uLmhyZWYsVWY9KCgpPT57Y2xhc3MgbntnZXRIcmVmKCl7cmV0dXJuIFNRX2dldEhyZWYoKX1nZXRTZWFyY2goKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGk9W107cmV0dXJuIGUuZm9yRWFjaCgocixvKT0+e2kucHVzaCh7a2V5Om8sdmFsdWU6cn0pfSksaX1nZXRIYXNoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNofWdldFBhdGgoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWdldEhpc3RvcnlTdGF0ZSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZX1yZXBsYWNlU3RhdGVVcmwoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfXB1c2hTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIixlKX1yZXBsYWNlU3RhdGVEYXRhKGUpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLCIiKX1vblBvcFN0YXRlKCl7cmV0dXJuIGxpKHdpbmRvdywicG9wc3RhdGUiKS5waXBlKEIoZT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxzdGF0ZTplLnN0YXRlfSkpKX1nZXRSZXNvbHZlZFBhdGgoZSl7cmV0dXJuIG5ldyBVUkwoZSxTUV9nZXRIcmVmKCkpLnBhdGhuYW1lfWdldEZ1bGxQYXRoKGUsaSxyKXtsZXQgbz10aGlzLmdldFJlc29sdmVkUGF0aChlKSxzPSIiO3JldHVybiBpLmxlbmd0aCYmKHM9Ij8iK2Z1bmN0aW9uKG4pe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldHtrZXk6ZSx2YWx1ZTppfW9mIG4pdC5hcHBlbmQoZSxpKTtyZXR1cm4gdH0oaSkudG9TdHJpbmcoKSksYCR7b30ke3N9JHtyP3RoaXMuZ2V0SGFzaCgpOiIifWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHpmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudChlKX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpe2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighaSlyZXR1cm4iLyI7bGV0e3BhdGhuYW1lOnJ9PW5ldyBVUkwoaS5jb250ZW50LGUuZ2V0SHJlZigpKTtyZXR1cm4gci5yZXBsYWNlKC9cLyokLywiLyIpfWdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSl7cmV0dXJuIHRoaXMuYXBwUm9vdC5zbGljZSgwLC0xKStlfWdldEFwcFJvb3RsZXNzUGF0aG5hbWUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCh0aGlzLmFwcFJvb3QpPyIvIitlLnNsaWNlKHRoaXMuYXBwUm9vdC5sZW5ndGgpOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVWYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltVZl19KSxufSkoKSxRMD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6Zl0saW1wb3J0czpbWDBdfSksbn0pKCksa0I9bmV3IHNlKCJbQXBwIFJvdXRpbmddIERpcnR5IFVwZGF0ZXMiKSxZVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHlVcGRhdGVzU2VsZWN0b3JGYWN0b3JpZXM9ZX1nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz8/W119c3RhdGljIHJlZ2lzdGVyRGlydHlVcGRhdGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6a0IsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGtCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksRVE9d2UoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxLMD13ZSgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWFQ9d2UoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZCPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFowPXdlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkseGw9d2UoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLExCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIiksUVQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGkuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7aS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChpLmFjdGlvbkNyZWF0b3IudHlwZSxpLmxhbWJkYSl9fWdldE5hdmlnYXRpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOkxCLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihMQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGNDKG4pe3JldHVybiBudWxsIT1uLnJvdXRlS2luZH1mdW5jdGlvbiBIQihuKXtyZXR1cm4gQVEobikubWFwKGU9PntsZXQgaT1lLnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gaT97cGF0aFBhcnQ6ZSxpc1BhcmFtOiEwLHBhcmFtTmFtZTplLnNsaWNlKDEpfTp7cGF0aFBhcnQ6ZSxpc1BhcmFtOml9fSl9dmFyIEowPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPUhCKHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX1zdGF0aWMgZ2V0TWF0Y2hlcih0KXtyZXR1cm4gY0ModCk/bmV3IHVDKHQpOmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLnJlZGlyZWN0aW9uUGF0aH0odCk/bmV3IEJCKHQpOm5ldyBWQih0KX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sdUM9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LEJCPWNsYXNzIGV4dGVuZHMgSjB7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1IQih0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0sVkI9Y2xhc3MgZXh0ZW5kcyBKMHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LGRDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPUowLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiB1QyYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKGNDKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oSEIobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPUFRKHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czp1LGlzUmVkaXJlY3Rpb246ZH09bDtpZihkKXtlPXUscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiB1QykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGg9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpEUSh1KSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLHUpfTtyZXR1cm4gcj97Li4uaCxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmgsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6RFEoci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gQVEobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBEUShuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIFVCPW5ldyBzZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxoYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBkQyhbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgZEMoaSksaS5mb3JFYWNoKHI9PntjQyhyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VUIsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVCLDgpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksS1Q9ImFwcF9yb3V0aW5nIixwQz1QcihLVCkscmE9WShwQyxuPT5uLmFjdGl2ZVJvdXRlKSxSUT1ZKHBDLG49Pm4ubmV4dFJvdXRlKSxPUT1ZKHBDLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLGtRPVkocEMsbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxGUT1ZKHBDLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cykscHU9WShyYSxuPT5uP24ucm91dGVLaW5kOmZpLk5PVF9TRVQpLGpCPVkocmEsbj0+bj9uLnBhcmFtczp7fSksJG89WShwdSxqQiwobix0KT0+YUMobix0KSksaHU9KFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLFkocHUsakIsKG4sdCk9PntpZihuIT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1sQyhuLmV4cGVyaW1lbnRJZHMpLGk9MDtmb3IobGV0e2lkOnIsbmFtZTpvfW9mIGUpaSsrLCF0LmhhcyhyKSYmdC5zZXQocix7YWxpYXNUZXh0Om8sYWxpYXNOdW1iZXI6aX0pO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pKSxHQj13ZSgiW0FwcCBSb3V0aW5nXSBFZmZlY3RzIEluaXQiKSxGcz0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIn0oRnN8fChGcz17fSkpLEZzKSkoKSxOUT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5sb2NhdGlvbj1yLHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnk9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZT1hLHRoaXMuYXBwUm9vdFByb3ZpZGVyPWwsdGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShGQiksQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoYy5wYXRobmFtZSk6dGhpcy5sb2NhdGlvbi5nZXRSZXNvbHZlZFBhdGgoYy5wYXRobmFtZSksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMSxyZXBsYWNlU3RhdGU6Yy5yZXBsYWNlU3RhdGU/PyExLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmMucmVzZXROYW1lc3BhY2VkU3RhdGU/RnMuTkVXOkZzLlVOQ0hBTkdFRH19fSkpKSx0aGlzLmJvb3RzdHJhcFJlZHVjZXJzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSxCKCgpPT5YVCh7cm91dGVLaW5kczpuZXcgU2V0KHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJvdXRlS2luZHMoKSl9KSkpKSx0aGlzLm9uSW5pdCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKEdCKSkucGlwZShubCgwKSxCKCgpPT57bGV0IGM9dGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKT8ubmFtZXNwYWNlSWQsdT12b2lkIDA9PT1jP3tvcHRpb246RnMuTkVXfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjfTtyZXR1cm57cGF0aG5hbWU6dGhpcy5sb2NhdGlvbi5nZXRQYXRoKCksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnV9fX0pKSx0aGlzLm9uUG9wU3RhdGUkPXRoaXMubG9jYXRpb24ub25Qb3BTdGF0ZSgpLnBpcGUoQihjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUsb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnZvaWQgMD09PWMuc3RhdGU/Lm5hbWVzcGFjZUlkP3tvcHRpb246RnMuVU5DSEFOR0VEfTp7b3B0aW9uOkZzLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjLnN0YXRlLm5hbWVzcGFjZUlkfX19KSkpLHRoaXMudXNlckluaXROYXZSb3V0ZSQ9dW4odGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkLHRoaXMub25Jbml0JCx0aGlzLm9uUG9wU3RhdGUkKS5waXBlKEIoYz0+e2lmKCFjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoYFtBcHAgcm91dGluZ10gcGF0aG5hbWUgbXVzdCBzdGFydCB3aXRoICcvJy4gR290OiAke2MucGF0aG5hbWV9YCk7cmV0dXJuey4uLmMscGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZShjLnBhdGhuYW1lKX19KSxCKGM9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncy5tYXRjaChjKSxvcHRpb25zOmMub3B0aW9uc30pKSksdGhpcy5wcm9ncmFtbWF0aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoQihjPT50aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlLmdldE5hdmlnYXRpb24oYykpLEhlKGM9Pm51bGwhPT1jKSxCKGM9PntsZXQgZix1PWMse3JlcGxhY2VTdGF0ZTpkPSExLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnAscm91dGVLaW5kOmh9PXU7cmV0dXJuIGY9dS5yb3V0ZUtpbmQ9PT1maS5DT01QQVJFX0VYUEVSSU1FTlQ/e2V4cGVyaW1lbnRJZHM6eFEodS5yb3V0ZVBhcmFtcy5hbGlhc0FuZEV4cGVyaW1lbnRJZHMpfTp1LnJvdXRlUGFyYW1zLHtyZXBsYWNlU3RhdGU6ZCxyb3V0ZUtpbmQ6aCxyb3V0ZVBhcmFtczpmLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9fSksQigoe3JlcGxhY2VTdGF0ZTpjLHJvdXRlS2luZDp1LHJvdXRlUGFyYW1zOmQscmVzZXROYW1lc3BhY2VkU3RhdGU6cH0pPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3M/dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2hCeVJvdXRlS2luZCh1LGQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOmMsYnJvd3NlckluaXRpYXRlZDohMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpwP0ZzLk5FVzpGcy5VTkNIQU5HRUR9fX0pKSksdGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJD11bih0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQpLnBpcGUoSGUoKHtyb3V0ZU1hdGNoOmN9KT0+Qm9vbGVhbihjKSksQigoe3JvdXRlTWF0Y2g6YyxvcHRpb25zOnV9KT0+KHtyb3V0ZU1hdGNoOmMsb3B0aW9uczp1fSkpKSx0aGlzLm5hdmlnYXRlJD1VcigoKT0+dGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJC5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHJhKSksX24oKFtkLHBdKT0+e2xldCBoPW51bGwhPT1wJiZ1cyhwLGQucm91dGVNYXRjaCksZj10aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpO3JldHVybiBofHwhZi5sZW5ndGg/anQoZCk6eG8odGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKS5tYXAobT0+dGhpcy5zdG9yZS5zZWxlY3QobSkucGlwZShIdCgxKSkpKS5waXBlKEIobT0+dm9pZCAwIT09bVswXS5leHBlcmltZW50SWRzJiZtWzBdLmV4cGVyaW1lbnRJZHMubGVuZ3RoPjApLEhlKG09PntpZihtKXtsZXQgQz13aW5kb3cuY29uZmlybSgiWW91IGhhdmUgdW5zYXZlZCBlZGl0cywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlbT8iKTtyZXR1cm4gQyYmdGhpcy5zdG9yZS5kaXNwYXRjaChFUSgpKSxDfXJldHVybiEwfSksQigoKT0+ZCkpfSksR3QodGhpcy5zdG9yZS5zZWxlY3Qoa1EpKSxOdCgoW3tyb3V0ZU1hdGNoOmQsb3B0aW9uczpwfSxoXSk9PntpZighcC5icm93c2VySW5pdGlhdGVkfHwhZC5kZWVwTGlua1Byb3ZpZGVyfHxwLm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5GUk9NX0hJU1RPUlkmJiFxVChkLnJvdXRlS2luZCxwLm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZCxoKSlyZXR1cm47bGV0IGY9ZC5vcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb24mJmQucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM/ZC5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLG09ZC5kZWVwTGlua1Byb3ZpZGVyLmRlc2VyaWFsaXplUXVlcnlQYXJhbXMoZik7dGhpcy5zdG9yZS5kaXNwYXRjaChLMCh7cm91dGVLaW5kOmQucm91dGVLaW5kLHBhcnRpYWxTdGF0ZTptfSkpfSksTnQoKFt7cm91dGVNYXRjaDpkfV0pPT57ZC5hY3Rpb24mJnRoaXMuc3RvcmUuZGlzcGF0Y2goZC5hY3Rpb24pfSksdmkoKFt7cm91dGVNYXRjaDpkLG9wdGlvbnM6cH1dKT0+bnVsbD09PWQuZGVlcExpbmtQcm92aWRlcj9qdCh7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6W10sb3B0aW9uczpwfSk6ZC5kZWVwTGlua1Byb3ZpZGVyLnNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0aGlzLnN0b3JlKS5waXBlKEIoKGgsZik9Pih7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6aCxvcHRpb25zOjA9PT1mP3A6ey4uLnAsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246RnMuVU5DSEFOR0VEfSxyZXBsYWNlU3RhdGU6ITB9fSkpKSksTnQoKHtyb3V0ZTpkfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFowKHthZnRlcjpkfSkpfSksQXIoMCkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpKSxCKChbZCxwXSk9PntsZXQgaD1udWxsPT09cHx8bnVsbD09PWQucm91dGV8fHVzKHAsZC5yb3V0ZSk7cmV0dXJuey4uLmQscHJlc2VydmVIYXNoOmh9fSksTnQoKHtwcmVzZXJ2ZUhhc2g6ZCxwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmgsb3B0aW9uczpmfSk9PnsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5wYXRobmFtZT09PXQucGF0aG5hbWUmJm4ucXVlcnlQYXJhbXMubGVuZ3RoPT09dC5xdWVyeVBhcmFtcy5sZW5ndGgmJm4ucXVlcnlQYXJhbXMuZXZlcnkoKGUsaSk9PntsZXQgcj10LnF1ZXJ5UGFyYW1zW2ldO3JldHVybiBlLmtleT09PXIua2V5JiZlLnZhbHVlPT09ci52YWx1ZX0pfSkoe3BhdGhuYW1lOnAscXVlcnlQYXJhbXM6aH0se3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodGhpcy5sb2NhdGlvbi5nZXRQYXRoKCkpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCl9KXx8KGYucmVwbGFjZVN0YXRlP3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlVXJsKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aChwLGgsZCkpKTp0aGlzLmxvY2F0aW9uLnB1c2hTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxoLGQpKSkpfSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KE9RKSksQigoW3tyb3V0ZTpkLG9wdGlvbnM6cH0saCxmXSk9PntsZXQgbT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIHQubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PUZzLkZST01fSElTVE9SWT90Lm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZDpudWxsPT1lfHx0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1Gcy5ORVc/YCR7RGF0ZS5ub3coKS50b1N0cmluZygpfToke2Z1bmN0aW9uKCl7bGV0IG49bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMobik7bGV0IHQ9IiI7Zm9yKGxldCBlIG9mIG4pdCs9KGU+PjQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gdH0oKX1gOmV9KDAscCxmKTtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGVEYXRhKHsuLi50aGlzLmxvY2F0aW9uLmdldEhpc3RvcnlTdGF0ZSgpLG5hbWVzcGFjZUlkOm19KSx4bCh7YmVmb3JlOmgsYWZ0ZXI6ZCxiZWZvcmVOYW1lc3BhY2VJZDpmLGFmdGVyTmFtZXNwYWNlSWQ6bX0pfSkpKSx0aGlzLnJvdXRlQ29uZmlncz1zLmdldFJvdXRlQ29uZmlncygpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIEdCKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoVWYpLFIoWVQpLFIoaGMpLFIoUVQpLFIoemYpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNRWU9d3Ioe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6bnVsbCxyZWh5ZHJhdGVkRGVlcExpbmtzOltdLHJlZ2lzdGVyZWRSb3V0ZUtleXM6bmV3IFNldH0sU2UoWjAsKG4se2FmdGVyOnR9KT0+KHsuLi5uLG5leHRSb3V0ZTp0fSkpLFNlKHhsLChuLHthZnRlcjp0LGFmdGVyTmFtZXNwYWNlSWQ6ZX0pPT57bGV0IGk9bi5yZWh5ZHJhdGVkRGVlcExpbmtzO3JldHVybiBxVCh0LnJvdXRlS2luZCxlLGkpJiYoaT1bLi4uaV0saS5wdXNoKHtkZWVwTGlua0dyb3VwOlBCKHQucm91dGVLaW5kKSxuYW1lc3BhY2VJZDplfSkpLHsuLi5uLGFjdGl2ZVJvdXRlOnQsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6ZSxyZWh5ZHJhdGVkRGVlcExpbmtzOml9fSksU2UoWFQsKG4se3JvdXRlS2luZHM6dH0pPT4oey4uLm4scmVnaXN0ZXJlZFJvdXRlS2V5czp0fSkpKTtmdW5jdGlvbiBMUShuLHQpe3JldHVybiBNRWUobix0KX12YXIgJDA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbWVQsUVRdLGltcG9ydHM6W2hjLFJyLmZvckZlYXR1cmUoS1QsTFEpLExvLmZvckZlYXR1cmUoW05RXSksUTAsWDBdfSksbn0pKCksQlE9Il9fdGFiX18iLFZRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRmU3RvcmFnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIiksZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZ2xvYmFscyIpLnRmX2dsb2JhbHMuc2V0VXNlSGFzaCghMCksdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5taWdyYXRlTGVnYWN5VVJMU2NoZW1lKCl9Z2V0U3RyaW5nKGUpe3JldHVybiB0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLmdldFN0cmluZyhlKX1zZXRTdHJpbmcoZSxpLHIpe3RoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2Uuc2V0U3RyaW5nKGUsaSxyKX1nZXRQbHVnaW5JZCgpe3JldHVybiB0aGlzLmdldFN0cmluZyhCUSl9c2V0UGx1Z2luSWQoZSxpKXt0aGlzLnNldFN0cmluZyhCUSxlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxBcD1jbGFzc3t9LFdCPW5ldyBzZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyIpLG5yPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPVtdLGUmJih0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9ZS5tYXAoaT0+aSgpKSl9Z2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM/P1tdfXN0YXRpYyBkZWZpbmVHbG9iYWxTZXR0aW5nKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6V0IsbXVsdGk6ITAsdXNlVmFsdWU6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihXQiw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLG9hPSgoKT0+KGZ1bmN0aW9uKG4pe24uQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsifShvYXx8KG9hPXt9KSksb2EpKSgpLEhRPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLFVRPSJfdGJfZ2xvYmFsX3NldHRpbmdzIix6UT0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiLFpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEpUPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHFCPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKVHt1aVRvQmFja2VuZChlKXtsZXQgaT17fTtyZXR1cm4gdm9pZCAwIT09ZS5pZ25vcmVPdXRsaWVycyYmKGkuaWdub3JlT3V0bGllcnM9ZS5pZ25vcmVPdXRsaWVycyksdm9pZCAwIT09ZS5zY2FsYXJTbW9vdGhpbmcmJihpLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksdm9pZCAwIT09ZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyYmKGkuYXV0b1JlbG9hZFBlcmlvZEluTXM9ZS5hdXRvUmVsb2FkUGVyaW9kSW5Ncyksdm9pZCAwIT09ZS5wYWdlU2l6ZSYmKGkucGFnaW5hdGlvblNpemU9ZS5wYWdlU2l6ZSksdm9pZCAwIT09ZS50aGVtZU92ZXJyaWRlJiYoaS50aGVtZT1lLnRoZW1lT3ZlcnJpZGUpLHZvaWQgMCE9PWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLHZvaWQgMCE9PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLHZvaWQgMCE9PWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLHZvaWQgMCE9PWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLHZvaWQgMCE9PWUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLHZvaWQgMCE9PWUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLHZvaWQgMCE9PWUuc2luZ2xlU2VsZWN0aW9uSGVhZGVycyYmKGkuc2luZ2xlU2VsZWN0aW9uSGVhZGVycz1lLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzJiYoaS5yYW5nZVNlbGVjdGlvbkhlYWRlcnM9ZS5yYW5nZVNlbGVjdGlvbkhlYWRlcnMpLGl9YmFja2VuZFRvVWkoZSl7bGV0IGk9e307cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLGUuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLGUuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmF1dG9SZWxvYWQmJihpLmF1dG9SZWxvYWQ9ZS5hdXRvUmVsb2FkKSxlLmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLGUuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgZS5wYWdpbmF0aW9uU2l6ZSYmKGkucGFnZVNpemU9ZS5wYWdpbmF0aW9uU2l6ZSksZS5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiBlLnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMob2EpKS5oYXMoZS50aGVtZSkmJihpLnRoZW1lT3ZlcnJpZGU9ZS50aGVtZSksZS5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGUuaGFzT3duUHJvcGVydHkoInNpZGVCYXJXaWR0aEluUGVyY2VudCIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkJiYoaS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCksZS5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc0NhcmRNaW5XaWR0aCIpJiYibnVtYmVyIj09dHlwZW9mIGUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLGUuaGFzT3duUHJvcGVydHkoInN0ZXBTZWxlY3RvckVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5zdGVwU2VsZWN0b3JFbmFibGVkJiYoaS5zdGVwU2VsZWN0b3JFbmFibGVkPWUuc3RlcFNlbGVjdG9yRW5hYmxlZCksZS5oYXNPd25Qcm9wZXJ0eSgicmFuZ2VTZWxlY3Rpb25FbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoImxpbmtlZFRpbWVFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoInNpbmdsZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMmJihpLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnM9ZS5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxlLmhhc093blByb3BlcnR5KCJyYW5nZVNlbGVjdGlvbkhlYWRlcnMiKSYmIm9iamVjdCI9PXR5cGVvZiBlLnJhbmdlU2VsZWN0aW9uSGVhZGVycyYmKGkucmFuZ2VTZWxlY3Rpb25IZWFkZXJzPWUucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksalE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnZlcnRlcj1lfXNldFNldHRpbmdzKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKT90aGlzLmdldFNldHRpbmdzKCkucGlwZShOdChpPT57d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKFVRLEpTT04uc3RyaW5naWZ5KHRoaXMuY29udmVydGVyLnVpVG9CYWNrZW5kKHsuLi5pLC4uLmV9KSkpLHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShIUSksd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHpRKX0pLEIoKCk9Pnt9KSk6YW99ZGVzZXJpYWxpemUoZSl7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoe3JldHVybnt9fX1nZXRTZXR0aW5ncygpe2xldCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh6USk7cmV0dXJuIGp0KHsuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGU/SlNPTi5zdHJpbmdpZnkoe25vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXM6TnVtYmVyKGUpfSk6Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEhRKT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUod2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFVRKT8/Int9IikpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoSlQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxHUT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpaVCx1c2VDbGFzczpqUX0scUIse3Byb3ZpZGU6SlQsdXNlRXhpc3Rpbmc6cUJ9XX0pLG59KSgpLGZjPXdlKCJbUGVyc2lzdGVudCBTZXR0aW5nc10gR2xvYmFsIFNldHRpbmdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLCRUPSJwZXJzaXN0ZW50X3NldHRpbmdzIixXUT1ZKFByKCRUKSxuPT5uLnNob3VsZFBlcnNpc3RTZXR0aW5ncykscVE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuY29uZmlnTW9kdWxlPXIsdGhpcy5kYXRhU291cmNlPW8sdGhpcy5pbml0aWFsaXplQW5kVXBkYXRlU2V0dGluZ3MkPVVyKCgpPT57bGV0IHM9dGhpcy5hY3Rpb25zJC5waXBlKFRpKFowKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChXUSkpLEhlKChbLGFdKT0+YSksX24oKCk9PnRoaXMuZGF0YVNvdXJjZS5nZXRTZXR0aW5ncygpKSxOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChmYyh7cGFydGlhbFNldHRpbmdzOmF9KSl9KSxubCgwKSxfbigoKT0+dW4oLi4udGhpcy5jb25maWdNb2R1bGUuZ2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpLm1hcChsPT50aGlzLnN0b3JlLnNlbGVjdChsKS5waXBlKGRpKChjLHUpPT57bGV0IGQ9T2JqZWN0LnZhbHVlcyhjKSxwPU9iamVjdC52YWx1ZXModSk7cmV0dXJuIGQubGVuZ3RoPT09cC5sZW5ndGgmJmQuZXZlcnkoKGgsZik9Pmg9PT1wW2ZdKX0pLENhKDEpKSkpKSxYcygpKTtyZXR1cm4gcy5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpPVtdO3JldHVybiB0LnN1YnNjcmliZShMdChlLHI9PmkucHVzaChyKSwoKT0+e2UubmV4dChpKSxlLmNvbXBsZXRlKCl9KSksbi5zdWJzY3JpYmUoTHQoZSwoKT0+e2xldCByPWk7aT1bXSxlLm5leHQocil9LHpsKSksKCk9PntpPW51bGx9fSl9KHMucGlwZShBcig1MDApKSksX24oYT0+e2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gYW87bGV0IGw9e307Zm9yKGxldCBjIG9mIGEpT2JqZWN0LmFzc2lnbihsLGMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2Uuc2V0U2V0dGluZ3MobCl9KSl9LHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKG5yKSxSKFpUKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksSUVlPXdyKHtzaG91bGRQZXJzaXN0U2V0dGluZ3M6ITB9KTtmdW5jdGlvbiBZUShuLHQpe3JldHVybiBJRWUobix0KX12YXIgWUI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbbnJdLGltcG9ydHM6W1JyLmZvckZlYXR1cmUoJFQsWVEpLExvLmZvckZlYXR1cmUoW3FRXSksR1FdfSksbn0pKCksdEQ9Y2xhc3N7fSxuRD1jbGFzc3t9LFZhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsdD90aGlzLmxhenlJbml0PSJzdHJpbmciPT10eXBlb2YgdD8oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLHQuc3BsaXQoIlxuIikuZm9yRWFjaChlPT57bGV0IGk9ZS5pbmRleE9mKCI6Iik7aWYoaT4wKXtsZXQgcj1lLnNsaWNlKDAsaSksbz1yLnRvTG93ZXJDYXNlKCkscz1lLnNsaWNlKGkrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShyLG8pLHRoaXMuaGVhZGVycy5oYXMobyk/dGhpcy5oZWFkZXJzLmdldChvKS5wdXNoKHMpOnRoaXMuaGVhZGVycy5zZXQobyxbc10pfX0pfTooKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5rZXlzKHQpLmZvckVhY2goZT0+e2xldCBpPXRbZV0scj1lLnRvTG93ZXJDYXNlKCk7InN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLGkubGVuZ3RoPjAmJih0aGlzLmhlYWRlcnMuc2V0KHIsaSksdGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGUscikpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyh0LnRvTG93ZXJDYXNlKCkpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSk7cmV0dXJuIGUmJmUubGVuZ3RoPjA/ZVswXTpudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy52YWx1ZXMoKSl9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuZ2V0KHQudG9Mb3dlckNhc2UoKSl8fG51bGx9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJhIn0pfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoicyJ9KX1kZWxldGUodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6ImQifSl9bWF5YmVTZXROb3JtYWxpemVkTmFtZSh0LGUpe3RoaXMubm9ybWFsaXplZE5hbWVzLmhhcyhlKXx8dGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdCl9aW5pdCgpe3RoaXMubGF6eUluaXQmJih0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5jb3B5RnJvbSh0aGlzLmxhenlJbml0KTp0aGlzLmxhenlJbml0KCksdGhpcy5sYXp5SW5pdD1udWxsLHRoaXMubGF6eVVwZGF0ZSYmKHRoaXMubGF6eVVwZGF0ZS5mb3JFYWNoKHQ9PnRoaXMuYXBwbHlVcGRhdGUodCkpLHRoaXMubGF6eVVwZGF0ZT1udWxsKSl9Y29weUZyb20odCl7dC5pbml0KCksQXJyYXkuZnJvbSh0LmhlYWRlcnMua2V5cygpKS5mb3JFYWNoKGU9Pnt0aGlzLmhlYWRlcnMuc2V0KGUsdC5oZWFkZXJzLmdldChlKSksdGhpcy5ub3JtYWxpemVkTmFtZXMuc2V0KGUsdC5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpKX0pfWNsb25lKHQpe2xldCBlPW5ldyBWYTtyZXR1cm4gZS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgVmE/dGhpcy5sYXp5SW5pdDp0aGlzLGUubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFt0XSksZX1hcHBseVVwZGF0ZSh0KXtsZXQgZT10Lm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBpPXQudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBpJiYoaT1baV0pLDA9PT1pLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKHQubmFtZSxlKTtsZXQgcj0oImEiPT09dC5vcD90aGlzLmhlYWRlcnMuZ2V0KGUpOnZvaWQgMCl8fFtdO3IucHVzaCguLi5pKSx0aGlzLmhlYWRlcnMuc2V0KGUscik7YnJlYWs7Y2FzZSJkIjpsZXQgbz10LnZhbHVlO2lmKG8pe2xldCBzPXRoaXMuaGVhZGVycy5nZXQoZSk7aWYoIXMpcmV0dXJuO3M9cy5maWx0ZXIoYT0+LTE9PT1vLmluZGV4T2YoYSkpLDA9PT1zLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShlKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoZSkpOnRoaXMuaGVhZGVycy5zZXQoZSxzKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpfX1mb3JFYWNoKHQpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGU9PnQodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGUpLHRoaXMuaGVhZGVycy5nZXQoZSkpKX19LFJFZT0vJShcZFthLWYwLTldKS9naSxPRWU9ezQwOiJAIiwiM0EiOiI6IiwyNDoiJCIsIjJDIjoiLCIsIjNCIjoiOyIsIjNEIjoiPSIsIjNGIjoiPyIsIjJGIjoiLyJ9O2Z1bmN0aW9uIFhRKG4pe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQobikucmVwbGFjZShSRWUsKHQsZSk9Pk9FZVtlXT8/dCl9ZnVuY3Rpb24gZUQobil7cmV0dXJuYCR7bn1gfXZhciBmdT1jbGFzc3tjb25zdHJ1Y3Rvcih0PXt9KXtpZih0aGlzLnVwZGF0ZXM9bnVsbCx0aGlzLmNsb25lRnJvbT1udWxsLHRoaXMuZW5jb2Rlcj10LmVuY29kZXJ8fG5ldyBjbGFzc3tlbmNvZGVLZXkodCl7cmV0dXJuIFhRKHQpfWVuY29kZVZhbHVlKHQpe3JldHVybiBYUSh0KX1kZWNvZGVLZXkodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1kZWNvZGVWYWx1ZSh0KXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfX0sdC5mcm9tU3RyaW5nKXtpZih0LmZyb21PYmplY3QpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGZyb21TdHJpbmcgYW5kIGZyb21PYmplY3QuIik7dGhpcy5tYXA9ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgTWFwO3JldHVybiBuLmxlbmd0aD4wJiZuLnJlcGxhY2UoL15cPy8sIiIpLnNwbGl0KCImIikuZm9yRWFjaChyPT57bGV0IG89ci5pbmRleE9mKCI9IiksW3MsYV09LTE9PW8/W3QuZGVjb2RlS2V5KHIpLCIiXTpbdC5kZWNvZGVLZXkoci5zbGljZSgwLG8pKSx0LmRlY29kZVZhbHVlKHIuc2xpY2UobysxKSldLGw9ZS5nZXQocyl8fFtdO2wucHVzaChhKSxlLnNldChzLGwpfSksZX0odC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSB0LmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXModC5mcm9tT2JqZWN0KS5mb3JFYWNoKGU9PntsZXQgaT10LmZyb21PYmplY3RbZV0scj1BcnJheS5pc0FycmF5KGkpP2kubWFwKGVEKTpbZUQoaSldO3RoaXMubWFwLnNldChlLHIpfSkpOnRoaXMubWFwPW51bGx9aGFzKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXModCl9Z2V0KHQpe3RoaXMuaW5pdCgpO2xldCBlPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gZT9lWzBdOm51bGx9Z2V0QWxsKHQpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5nZXQodCl8fG51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubWFwLmtleXMoKSl9YXBwZW5kKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiYSJ9KX1hcHBlbmRBbGwodCl7bGV0IGU9W107cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e2xldCByPXRbaV07QXJyYXkuaXNBcnJheShyKT9yLmZvckVhY2gobz0+e2UucHVzaCh7cGFyYW06aSx2YWx1ZTpvLG9wOiJhIn0pfSk6ZS5wdXNoKHtwYXJhbTppLHZhbHVlOnIsb3A6ImEifSl9KSx0aGlzLmNsb25lKGUpfXNldCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOnQsdmFsdWU6ZSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAodD0+e2xldCBlPXRoaXMuZW5jb2Rlci5lbmNvZGVLZXkodCk7cmV0dXJuIHRoaXMubWFwLmdldCh0KS5tYXAoaT0+ZSsiPSIrdGhpcy5lbmNvZGVyLmVuY29kZVZhbHVlKGkpKS5qb2luKCImIil9KS5maWx0ZXIodD0+IiIhPT10KS5qb2luKCImIil9Y2xvbmUodCl7bGV0IGU9bmV3IGZ1KHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBlLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxlLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdCh0KSxlfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2godD0+dGhpcy5tYXAuc2V0KHQsdGhpcy5jbG9uZUZyb20ubWFwLmdldCh0KSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKHQ9Pntzd2l0Y2godC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBlPSgiYSI9PT10Lm9wP3RoaXMubWFwLmdldCh0LnBhcmFtKTp2b2lkIDApfHxbXTtlLnB1c2goZUQodC52YWx1ZSkpLHRoaXMubWFwLnNldCh0LnBhcmFtLGUpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09dC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pO2JyZWFrfXtsZXQgaT10aGlzLm1hcC5nZXQodC5wYXJhbSl8fFtdLHI9aS5pbmRleE9mKGVEKHQudmFsdWUpKTstMSE9PXImJmkuc3BsaWNlKHIsMSksaS5sZW5ndGg+MD90aGlzLm1hcC5zZXQodC5wYXJhbSxpKTp0aGlzLm1hcC5kZWxldGUodC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19O2Z1bmN0aW9uIFFRKG4pe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZuIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gS1Eobil7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmbiBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gWlEobil7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJm4gaW5zdGFuY2VvZiBGb3JtRGF0YX12YXIgamY9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7bGV0IG87aWYodGhpcy51cmw9ZSx0aGlzLmJvZHk9bnVsbCx0aGlzLnJlcG9ydFByb2dyZXNzPSExLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucmVzcG9uc2VUeXBlPSJqc29uIix0aGlzLm1ldGhvZD10LnRvVXBwZXJDYXNlKCksZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fHI/KHRoaXMuYm9keT12b2lkIDAhPT1pP2k6bnVsbCxvPXIpOm89aSxvJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIW8ucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFvLndpdGhDcmVkZW50aWFscyxvLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPW8ucmVzcG9uc2VUeXBlKSxvLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9by5oZWFkZXJzKSxvLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9by5jb250ZXh0KSxvLnBhcmFtcyYmKHRoaXMucGFyYW1zPW8ucGFyYW1zKSksdGhpcy5oZWFkZXJzfHwodGhpcy5oZWFkZXJzPW5ldyBWYSksdGhpcy5jb250ZXh0fHwodGhpcy5jb250ZXh0PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWFwLnNldCh0LGUpLHRoaXN9Z2V0KHQpe3JldHVybiB0aGlzLm1hcC5oYXModCl8fHRoaXMubWFwLnNldCh0LHQuZGVmYXVsdFZhbHVlKCkpLHRoaXMubWFwLmdldCh0KX1kZWxldGUodCl7cmV0dXJuIHRoaXMubWFwLmRlbGV0ZSh0KSx0aGlzfWhhcyh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfWtleXMoKXtyZXR1cm4gdGhpcy5tYXAua2V5cygpfX0pLHRoaXMucGFyYW1zKXtsZXQgcz10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT1zLmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9ZTtlbHNle2xldCBhPWUuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1lKygtMT09PWE/Ij8iOmE8ZS5sZW5ndGgtMT8iJiI6IiIpK3N9fWVsc2UgdGhpcy5wYXJhbXM9bmV3IGZ1LHRoaXMudXJsV2l0aFBhcmFtcz1lfXNlcmlhbGl6ZUJvZHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlFRKHRoaXMuYm9keSl8fEtRKHRoaXMuYm9keSl8fFpRKHRoaXMuYm9keSl8fGZ1bmN0aW9uKG4pe3JldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmbiBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30odGhpcy5ib2R5KXx8InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIGZ1P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fFpRKHRoaXMuYm9keSk/bnVsbDpLUSh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOlFRKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgZnU/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZSh0PXt9KXtsZXQgZT10Lm1ldGhvZHx8dGhpcy5tZXRob2QsaT10LnVybHx8dGhpcy51cmwscj10LnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsbz12b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxzPXZvaWQgMCE9PXQud2l0aENyZWRlbnRpYWxzP3Qud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLGE9dm9pZCAwIT09dC5yZXBvcnRQcm9ncmVzcz90LnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3MsbD10LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxjPXQucGFyYW1zfHx0aGlzLnBhcmFtcyx1PXQuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT10LnNldEhlYWRlcnMmJihsPU9iamVjdC5rZXlzKHQuc2V0SGVhZGVycykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0SGVhZGVyc1twXSksbCkpLHQuc2V0UGFyYW1zJiYoYz1PYmplY3Qua2V5cyh0LnNldFBhcmFtcykucmVkdWNlKChkLHApPT5kLnNldChwLHQuc2V0UGFyYW1zW3BdKSxjKSksbmV3IGpmKGUsaSxvLHtwYXJhbXM6YyxoZWFkZXJzOmwsY29udGV4dDp1LHJlcG9ydFByb2dyZXNzOmEscmVzcG9uc2VUeXBlOnIsd2l0aENyZWRlbnRpYWxzOnN9KX19LElwPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TZW50PTBdPSJTZW50IixuW24uVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixuW24uUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIixuW24uRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsbltuLlVzZXI9NV09IlVzZXIifShJcHx8KElwPXt9KSksSXApKSgpLGZDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0yMDAsaT0iT0siKXt0aGlzLmhlYWRlcnM9dC5oZWFkZXJzfHxuZXcgVmEsdGhpcy5zdGF0dXM9dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6ZSx0aGlzLnN0YXR1c1RleHQ9dC5zdGF0dXNUZXh0fHxpLHRoaXMudXJsPXQudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX0sbUM9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0PXt9KXtzdXBlcih0KSx0aGlzLnR5cGU9SXAuUmVzcG9uc2VIZWFkZXJ9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBtQyh7aGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19LGVfPWNsYXNzIGV4dGVuZHMgZkN7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPUlwLlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT10LmJvZHk/dC5ib2R5Om51bGx9Y2xvbmUodD17fSl7cmV0dXJuIG5ldyBlXyh7Ym9keTp2b2lkIDAhPT10LmJvZHk/dC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOnQuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT10LnN0YXR1cz90LnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0OnQuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDp0LnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX0sbWQ9Y2xhc3MgZXh0ZW5kcyBmQ3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0LDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVyZSBkdXJpbmcgcGFyc2luZyBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHt0LnVybHx8Iih1bmtub3duIHVybCkifTogJHt0LnN0YXR1c30gJHt0LnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPXQuZXJyb3J8fG51bGx9fTtmdW5jdGlvbiBYQihuLHQpe3JldHVybntib2R5OnQsaGVhZGVyczpuLmhlYWRlcnMsY29udGV4dDpuLmNvbnRleHQsb2JzZXJ2ZTpuLm9ic2VydmUscGFyYW1zOm4ucGFyYW1zLHJlcG9ydFByb2dyZXNzOm4ucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOm4ucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFsc319dmFyIEdmPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5oYW5kbGVyPWV9cmVxdWVzdChlLGkscj17fSl7bGV0IG87aWYoZSBpbnN0YW5jZW9mIGpmKW89ZTtlbHNle2xldCBsLGM7bD1yLmhlYWRlcnMgaW5zdGFuY2VvZiBWYT9yLmhlYWRlcnM6bmV3IFZhKHIuaGVhZGVycyksci5wYXJhbXMmJihjPXIucGFyYW1zIGluc3RhbmNlb2YgZnU/ci5wYXJhbXM6bmV3IGZ1KHtmcm9tT2JqZWN0OnIucGFyYW1zfSkpLG89bmV3IGpmKGUsaSx2b2lkIDAhPT1yLmJvZHk/ci5ib2R5Om51bGwse2hlYWRlcnM6bCxjb250ZXh0OnIuY29udGV4dCxwYXJhbXM6YyxyZXBvcnRQcm9ncmVzczpyLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpyLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpyLndpdGhDcmVkZW50aWFsc30pfWxldCBzPWp0KG8pLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gYm4odCk/X24obix0LDEpOl9uKG4sMSl9KGw9PnRoaXMuaGFuZGxlci5oYW5kbGUobCkpKTtpZihlIGluc3RhbmNlb2YgamZ8fCJldmVudHMiPT09ci5vYnNlcnZlKXJldHVybiBzO2xldCBhPXMucGlwZShIZShsPT5sIGluc3RhbmNlb2YgZV8pKTtzd2l0Y2goci5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKG8ucmVzcG9uc2VUeXBlKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiEobC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiBsLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gYS5waXBlKEIobD0+e2lmKG51bGwhPT1sLmJvZHkmJiJzdHJpbmciIT10eXBlb2YgbC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiBsLmJvZHl9KSk7ZGVmYXVsdDpyZXR1cm4gYS5waXBlKEIobD0+bC5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIGE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVhY2hhYmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICR7ci5vYnNlcnZlfX1gKX19ZGVsZXRlKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixlLGkpfWdldChlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsZSxpKX1oZWFkKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSEVBRCIsZSxpKX1qc29ucChlLGkpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIixlLHtwYXJhbXM6KG5ldyBmdSkuYXBwZW5kKGksIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJPUFRJT05TIixlLGkpfXBhdGNoKGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsZSxYQihyLGkpKX1wb3N0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixlLFhCKHIsaSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUFVUIixlLFhCKHIsaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHREKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksckQ9bmV3IHNlKCJIVFRQX0lOVEVSQ0VQVE9SUyIpLE5FZT0oKCk9PntjbGFzcyBue2ludGVyY2VwdChlLGkpe3JldHVybiBpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksTEVlPS9eXClcXVx9Jyw/XG4vLEpRPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy54aHJGYWN0b3J5PWV9aGFuZGxlKGUpe2lmKCJKU09OUCI9PT1lLm1ldGhvZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjb25zdHJ1Y3QgSnNvbnAgcmVxdWVzdCB3aXRob3V0IEh0dHBDbGllbnRKc29ucE1vZHVsZSBpbnN0YWxsZWQuIik7cmV0dXJuIG5ldyBRdChpPT57bGV0IHI9dGhpcy54aHJGYWN0b3J5LmJ1aWxkKCk7aWYoci5vcGVuKGUubWV0aG9kLGUudXJsV2l0aFBhcmFtcyksZS53aXRoQ3JlZGVudGlhbHMmJihyLndpdGhDcmVkZW50aWFscz0hMCksZS5oZWFkZXJzLmZvckVhY2goKGgsZik9PnIuc2V0UmVxdWVzdEhlYWRlcihoLGYuam9pbigiLCIpKSksZS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fHIuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWUuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtsZXQgaD1lLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWgmJnIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixoKX1pZihlLnJlc3BvbnNlVHlwZSl7bGV0IGg9ZS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTtyLnJlc3BvbnNlVHlwZT0ianNvbiIhPT1oP2g6InRleHQifWxldCBvPWUuc2VyaWFsaXplQm9keSgpLHM9bnVsbCxhPSgpPT57aWYobnVsbCE9PXMpcmV0dXJuIHM7bGV0IGg9ci5zdGF0dXNUZXh0fHwiT0siLGY9bmV3IFZhKHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG09ZnVuY3Rpb24obil7cmV0dXJuInJlc3BvbnNlVVJMImluIG4mJm4ucmVzcG9uc2VVUkw/bi5yZXNwb25zZVVSTDovXlgtUmVxdWVzdC1VUkw6L20udGVzdChuLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKT9uLmdldFJlc3BvbnNlSGVhZGVyKCJYLVJlcXVlc3QtVVJMIik6bnVsbH0ocil8fGUudXJsO3JldHVybiBzPW5ldyBtQyh7aGVhZGVyczpmLHN0YXR1czpyLnN0YXR1cyxzdGF0dXNUZXh0OmgsdXJsOm19KSxzfSxsPSgpPT57bGV0e2hlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOkN9PWEoKSxfPW51bGw7MjA0IT09ZiYmKF89dHlwZW9mIHIucmVzcG9uc2U+InUiP3IucmVzcG9uc2VUZXh0OnIucmVzcG9uc2UpLDA9PT1mJiYoZj1fPzIwMDowKTtsZXQgeT1mPj0yMDAmJmY8MzAwO2lmKCJqc29uIj09PWUucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIF8pe2xldCBJPV87Xz1fLnJlcGxhY2UoTEVlLCIiKTt0cnl7Xz0iIiE9PV8/SlNPTi5wYXJzZShfKTpudWxsfWNhdGNoKEEpe189SSx5JiYoeT0hMSxfPXtlcnJvcjpBLHRleHQ6X30pfX15PyhpLm5leHQobmV3IGVfKHtib2R5Ol8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpLGkuY29tcGxldGUoKSk6aS5lcnJvcihuZXcgbWQoe2Vycm9yOl8saGVhZGVyczpoLHN0YXR1czpmLHN0YXR1c1RleHQ6bSx1cmw6Q3x8dm9pZCAwfSkpfSxjPWg9PntsZXR7dXJsOmZ9PWEoKSxtPW5ldyBtZCh7ZXJyb3I6aCxzdGF0dXM6ci5zdGF0dXN8fDAsc3RhdHVzVGV4dDpyLnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6Znx8dm9pZCAwfSk7aS5lcnJvcihtKX0sdT0hMSxkPWg9Pnt1fHwoaS5uZXh0KGEoKSksdT0hMCk7bGV0IGY9e3R5cGU6SXAuRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6aC5sb2FkZWR9O2gubGVuZ3RoQ29tcHV0YWJsZSYmKGYudG90YWw9aC50b3RhbCksInRleHQiPT09ZS5yZXNwb25zZVR5cGUmJiEhci5yZXNwb25zZVRleHQmJihmLnBhcnRpYWxUZXh0PXIucmVzcG9uc2VUZXh0KSxpLm5leHQoZil9LHA9aD0+e2xldCBmPXt0eXBlOklwLlVwbG9hZFByb2dyZXNzLGxvYWRlZDpoLmxvYWRlZH07aC5sZW5ndGhDb21wdXRhYmxlJiYoZi50b3RhbD1oLnRvdGFsKSxpLm5leHQoZil9O3JldHVybiByLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksci5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnNlbmQobyksaS5uZXh0KHt0eXBlOklwLlNlbnR9KSwoKT0+e3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCksci5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjKSxlLnJlcG9ydFByb2dyZXNzJiYoci5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZCksbnVsbCE9PW8mJnIudXBsb2FkJiZyLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscCkpLHIucmVhZHlTdGF0ZSE9PXIuRE9ORSYmci5hYm9ydCgpfX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBmKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJEI9bmV3IHNlKCJYU1JGX0NPT0tJRV9OQU1FIiksZVY9bmV3IHNlKCJYU1JGX0hFQURFUl9OQU1FIiksaUQ9Y2xhc3N7fSxWRWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5kb2M9ZSx0aGlzLnBsYXRmb3JtPWksdGhpcy5jb29raWVOYW1lPXIsdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gZSE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPXVUKGUsdGhpcy5jb29raWVOYW1lKSx0aGlzLmxhc3RDb29raWVTdHJpbmc9ZSksdGhpcy5sYXN0VG9rZW59fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIoaWQpLFIoJEIpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRQj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy50b2tlblNlcnZpY2U9ZSx0aGlzLmhlYWRlck5hbWU9aX1pbnRlcmNlcHQoZSxpKXtsZXQgcj1lLnVybC50b0xvd2VyQ2FzZSgpO2lmKCJHRVQiPT09ZS5tZXRob2R8fCJIRUFEIj09PWUubWV0aG9kfHxyLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8ci5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBpLmhhbmRsZShlKTtsZXQgbz10aGlzLnRva2VuU2VydmljZS5nZXRUb2tlbigpO3JldHVybiBudWxsIT09byYmIWUuaGVhZGVycy5oYXModGhpcy5oZWFkZXJOYW1lKSYmKGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KHRoaXMuaGVhZGVyTmFtZSxvKX0pKSxpLmhhbmRsZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihpRCksUihlVikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhFZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5iYWNrZW5kPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY2hhaW49bnVsbH1oYW5kbGUoZSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2xldCBpPXRoaXMuaW5qZWN0b3IuZ2V0KHJELFtdKTt0aGlzLmNoYWluPWkucmVkdWNlUmlnaHQoKHIsbyk9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubmV4dD10LHRoaXMuaW50ZXJjZXB0b3I9ZX1oYW5kbGUodCl7cmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuaW50ZXJjZXB0KHQsdGhpcy5uZXh0KX19KHIsbyksdGhpcy5iYWNrZW5kKX1yZXR1cm4gdGhpcy5jaGFpbi5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIobkQpLFIoem4pKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxVRWU9KCgpPT57Y2xhc3MgbntzdGF0aWMgZGlzYWJsZSgpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UUIsdXNlQ2xhc3M6TkVlfV19fXN0YXRpYyB3aXRoT3B0aW9ucyhlPXt9KXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W2UuY29va2llTmFtZT97cHJvdmlkZTokQix1c2VWYWx1ZTplLmNvb2tpZU5hbWV9OltdLGUuaGVhZGVyTmFtZT97cHJvdmlkZTplVix1c2VWYWx1ZTplLmhlYWRlck5hbWV9OltdXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1FCLHtwcm92aWRlOnJELHVzZUV4aXN0aW5nOlFCLG11bHRpOiEwfSx7cHJvdmlkZTppRCx1c2VDbGFzczpWRWV9LHtwcm92aWRlOiRCLHVzZVZhbHVlOiJYU1JGLVRPS0VOIn0se3Byb3ZpZGU6ZVYsdXNlVmFsdWU6IlgtWFNSRi1UT0tFTiJ9XX0pLG59KSgpLCRRPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W0dmLHtwcm92aWRlOnRELHVzZUNsYXNzOkhFZX0sSlEse3Byb3ZpZGU6bkQsdXNlRXhpc3Rpbmc6SlF9XSxpbXBvcnRzOltVRWUud2l0aE9wdGlvbnMoe2Nvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLGhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiJ9KV19KSxufSkoKSxvRD0iZmVhdHVyZSIsdF89UHIob0QpLFBwPVkodF8sbj0+bi5pc0ZlYXR1cmVGbGFnc0xvYWRlZCksQm89WSh0XyxuPT4oey4uLm4uZGVmYXVsdEZsYWdzLC4uLm4uZmxhZ092ZXJyaWRlc30pKSx0Sz1ZKHRfLG49Pm4uZGVmYXVsdEZsYWdzKSxnQz1ZKHRfLG49Pm4uZmxhZ092ZXJyaWRlc3x8e30pLFdmPVkodF8sbj0+bi5tZXRhZGF0YSksbl89WSh0XyxuPT57bGV0IHQ9e307Zm9yKGxldCBlIGluIG4uZmxhZ092ZXJyaWRlcyl7bGV0IGk9bi5tZXRhZGF0YVtlXTtpJiZpLnF1ZXJ5UGFyYW1PdmVycmlkZSYmaS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbiYmKHRbZV09bi5mbGFnT3ZlcnJpZGVzW2VdKX1yZXR1cm4gdH0pLG5LPVkoQm8sbj0+bi5pc0F1dG9EYXJrTW9kZUFsbG93ZWQpLG11PVkoQm8sbj0+bnVsbCE9PW4uZW5hYmxlRGFya01vZGVPdmVycmlkZT9uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6bi5kZWZhdWx0RW5hYmxlRGFya01vZGUpLHNEPVkoQm8sbj0+bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlKSxpSz1ZKEJvLG49Pm4uZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnMpLHJLPVkoQm8sbj0+bi5pbkNvbGFiKSxhRD1ZKEJvLG49Pm4ubWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQpLG9LPVkoQm8sbj0+bi5lbmFibGVkTGlua2VkVGltZSksc0s9WShCbyxuPT5uLmZvcmNlU3ZnKSxhSz1ZKEJvLG49Pm4uZW5hYmxlZFNjYWxhckRhdGFUYWJsZSksbEs9WShCbyxuPT52b2lkIDAhPT1uLnNob3dGbGFncyksY0s9WShCbyxuPT5uLmFsbG93UmFuZ2VTZWxlY3Rpb24pLHVLPVkoQm8sbj0+bi5lbmFibGVkUHJvc3BlY3RpdmVGb2IpLGxEPVkoQm8sbj0+bi5lbmFibGVTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uKSxkSz1ZKEJvLG49Pm4uZW5hYmxlSHBhcmFtc0luVGltZVNlcmllcyk7ZnVuY3Rpb24gakVlKG4sdCl7aWYoIW4pcmV0dXJuO2xldCBlPW4gaW5zdGFuY2VvZiBGb3JtRGF0YT9mdW5jdGlvbihuKXtsZXQgdD17fTtmb3IobGV0W2UsaV1vZiBuLmVudHJpZXMoKSl0W2VdPWk7cmV0dXJuIHR9KG4pOm47cmV0dXJuIHQ/e1t0XTpKU09OLnN0cmluZ2lmeShlKX06ZX1mdW5jdGlvbiB0VihuKXtsZXQgdD1uLmhlYWRlcnN8fG5ldyBWYTtyZXR1cm4gdD10LmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSx7Li4ubixoZWFkZXJzOnR9fXZhciBndT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFwcFJvb3RQcm92aWRlcj1lLHRoaXMuaHR0cD1pLHRoaXMuc3RvcmU9cn1yZXNvbHZlQXBwUm9vdChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCIvIik/dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKTplfWdldChlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSl9cG9zdChlLGkscj17fSxvKXtyZXR1cm4gcj10VihyKSx0aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShzPT5Cb29sZWFuKHMpKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChySykpLF9uKChbLHNdKT0+e2xldCBhPXRoaXMucmVzb2x2ZUFwcFJvb3QoZSk7cmV0dXJuIHM/dGhpcy5odHRwLmdldChhLHtoZWFkZXJzOnIuaGVhZGVycz8/e30scGFyYW1zOmpFZShpLG8pfSk6dGhpcy5odHRwLnBvc3QoYSxpLHIpfSkpfXB1dChlLGkscj17fSl7cmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5yZXNvbHZlQXBwUm9vdChlKSxpLHRWKHIpKX1kZWxldGUoZSxpPXt9KXtyZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLnJlc29sdmVBcHBSb290KGUpLHRWKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih6ZiksUihHZiksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGlfPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W2d1XSxpbXBvcnRzOlskUSxRMF19KSxufSkoKSxDbD0oKCk9PihmdW5jdGlvbihuKXtuLlVOS05PV049IlVOS05PV04iLG4uTk9UX0ZPVU5EPSJOT1RfRk9VTkQiLG4uUEVSTUlTU0lPTl9ERU5JRUQ9IlBFUk1JU1NJT05fREVOSUVEIn0oQ2x8fChDbD17fSkpLENsKSkoKSxwSz1uZXcgc2UoIlRlbnNvckJvYXJkIGJyYW5kIG5hbWUiKSxmbz0oKCk9PihmdW5jdGlvbihuKXtuLlNURVA9InN0ZXAiLG4uV0FMTF9USU1FPSJ3YWxsX3RpbWUiLG4uUkVMQVRJVkU9InJlbGF0aXZlIn0oZm98fChmbz17fSkpLGZvKSkoKSxPcj0oKCk9PihmdW5jdGlvbihuKXtuLk9GRlNFVD0ib2Zmc2V0IixuLk9WRVJMQVk9Im92ZXJsYXkifShPcnx8KE9yPXt9KSksT3IpKSgpO2Z1bmN0aW9uIGhLKG4pe2xldCB0PUNsLlVOS05PV047cmV0dXJuIG4gaW5zdGFuY2VvZiBtZCYmKDQwND09PW4uc3RhdHVzJiYodD1DbC5OT1RfRk9VTkQpLDQwMz09PW4uc3RhdHVzJiYodD1DbC5QRVJNSVNTSU9OX0RFTklFRCkpLEdsKG5ldyBfQyh0KSl9dmFyIF9DPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFpbHVyZUNvZGU9dH19LHVEPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5odHRwPWUsdGhpcy50ZkJhY2tlbmQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9ZmV0Y2hQbHVnaW5zTGlzdGluZyhlKXtsZXQgaT1mdW5jdGlvbihuKXtpZighbi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0IGUgb2Ygbil0LmFwcGVuZCgiZXhwZXJpbWVudGFsUGx1Z2luIixlKTtyZXR1cm4gdH0oZSkscj1pP2BkYXRhL3BsdWdpbnNfbGlzdGluZz8ke2kudG9TdHJpbmcoKX1gOiJkYXRhL3BsdWdpbnNfbGlzdGluZyI7cmV0dXJuIHRoaXMuaHR0cC5nZXQocikucGlwZShDbyhoSykpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4geG8oW3RoaXMuaHR0cC5nZXQoImRhdGEvZW52aXJvbm1lbnQiKSxsbyh0aGlzLnRmQmFja2VuZC5lbnZpcm9ubWVudFN0b3JlLnJlZnJlc2goKSldKS5waXBlKEIoKFtyXSk9PnIpLENvKGhLKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoZ3UpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmSz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt1RF0saW1wb3J0czpbaV9dfSksbn0pKCksRWU9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PVF9MT0FERUQ9MF09Ik5PVF9MT0FERUQiLG5bbi5MT0FERUQ9MV09IkxPQURFRCIsbltuLkxPQURJTkc9Ml09IkxPQURJTkciLG5bbi5GQUlMRUQ9M109IkZBSUxFRCJ9KEVlfHwoRWU9e30pKSxFZSkpKCksX3U9d2UoIltDb3JlXSBQbHVnaW4gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGREPXdlKCJbQ29yZV0gUGx1Z2luIFVybCBIYXNoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxtSz13ZSgiW0NvcmVdIExvYWRlZCIpLHdsPXdlKCJbQ29yZV0gVXNlciBUcmlnZ2VyZWQgUmVsb2FkIiksSGE9d2UoIltDb3JlXSBBdXRvIFJlbG9hZCIpLHBEPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBSZXF1ZXN0ZWQiKSxxZj13ZSgiW0NvcmVdIFBsdWdpbkxpc3RpbmcgRmV0Y2ggU3VjY2Vzc2Z1bCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZDPXdlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBGYWlsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggUmVxdWVzdGVkIiksZkQ9d2UoIltDb3JlXSBQb2x5bWVyIENvbXBvbmVudCBSdW5zIEZldGNoIFN1Y2Nlc3NmdWwiKSxtRD13ZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggRmFpbGVkIiksZ0Q9d2UoIltDb3JlXSBFbnZpcm9ubWVudCBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ0s9d2UoIltDb3JlXSBSdW4gU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfSz13ZSgiW0NvcmVdIFJ1biBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscl89d2UoIltDb3JlXSBTaWRlIEJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gWWYobix0LGUpe2xldCBpPU9iamVjdC5rZXlzKG4pLHI9ey4uLm4sLi4udCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnt9fTtyZXR1cm57aW5pdGlhbFN0YXRlOnIscmVkdWNlcnM6d3IocixTZSh4bCwoYSx7YmVmb3JlOmwsYWZ0ZXI6YyxiZWZvcmVOYW1lc3BhY2VJZDp1LGFmdGVyTmFtZXNwYWNlSWQ6ZH0pPT57bGV0IHA9YTtyZXR1cm4gdSE9PWQmJihwPWZ1bmN0aW9uKGEsbCxjKXtsZXQgdT17Li4uYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlfTtpZihsKXtsZXQgcD17fTtmb3IobGV0IGggb2YgaSlwW2hdPWFbaF07dT17Li4udSxbbF06cH19bGV0IGQ9e307cmV0dXJuIGEucHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZT8uW2NdP2Q9YS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlW2NdOmwmJihkPW4pLHsuLi5hLC4uLmQscHJpdmF0ZU5hbWVzcGFjZWRTdGF0ZTp1fX0oYSx1LGQpKSxlJiYocD1lKHAsbCxjKSkscH0pKX19ZnVuY3Rpb24gWGYoLi4ubil7cmV0dXJuKHQsZSk9PntsZXQgaT10O2ZvcihsZXQgciBvZiBuKWk9cihpLGUpO3JldHVybiBpfX12YXIgeUM9e2FjdGl2ZVBsdWdpbjpudWxsLHBsdWdpbnM6e30sY29yZURhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBsdWdpbnNMaXN0TG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsLGZhaWx1cmVDb2RlOm51bGx9LGVudmlyb25tZW50OntkYXRhX2xvY2F0aW9uOiIiLHdpbmRvd190aXRsZToiIn0scG9seW1lclJ1bnNMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHBvbHltZXJJbnRlcm9wUnVuczpbXSxwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0LHNpZGVCYXJXaWR0aEluUGVyY2VudDoyMH0sWUVlPXdyKHlDLFNlKF91LGRELChuLHtwbHVnaW46dH0pPT4oey4uLm4sYWN0aXZlUGx1Z2luOnR9KSksU2UocEQsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOkVlLkxPQURJTkd9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHZDLChuLHtmYWlsdXJlQ29kZTp0fSk9Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBsdWdpbnNMaXN0TG9hZGVkOnsuLi5uLnBsdWdpbnNMaXN0TG9hZGVkLHN0YXRlOkVlLkZBSUxFRCxmYWlsdXJlQ29kZTp0fX0pKSxTZShxZiwobix7cGx1Z2luczp0fSk9PntsZXQgZT1PYmplY3Qua2V5cyh0KS5maW5kKHM9PnRbc10uZW5hYmxlZCl8fG51bGwsaT1uLmFjdGl2ZVBsdWdpbnx8ZSxyPURhdGUubm93KCksbz1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBvbHltZXJSdW5zTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BREVEJiYobz17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyfSksey4uLm4sYWN0aXZlUGx1Z2luOmksY29yZURhdGFMb2FkU3RhdGU6byxwbHVnaW5zOnQscGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6cixmYWlsdXJlQ29kZTpudWxsfX19KSxTZShoRCxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR30scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6RWUuTE9BRElOR319KSksU2UoZkQsbj0+e2xldCB0PURhdGUubm93KCksZT1uLmNvcmVEYXRhTG9hZFN0YXRlO3JldHVybiBuLnBsdWdpbnNMaXN0TG9hZGVkLnN0YXRlPT09RWUuTE9BREVEJiYoZT17c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5Nczp0fSksey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ZSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9fX0pLFNlKG1ELG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5GQUlMRUR9LHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoZ0QsKG4se2Vudmlyb25tZW50OnR9KT0+KHsuLi5uLGVudmlyb25tZW50OnR9KSksU2UoX0ssKG4se3J1bnM6dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5zOnR9KSksU2UoZ0ssKG4se25leHRTZWxlY3Rpb246dH0pPT4oey4uLm4scG9seW1lckludGVyb3BSdW5TZWxlY3Rpb246bmV3IFNldCh0KX0pKSxTZShyXywobix7d2lkdGhJblBlcmNlbnQ6dH0pPT4oey4uLm4sc2lkZUJhcldpZHRoSW5QZXJjZW50Ok1hdGgubWluKE1hdGgubWF4KDAsdCksMTAwKX0pKSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXsuLi5ufSxpPXQuc2lkZUJhcldpZHRoSW5QZXJjZW50O3JldHVybiJudW1iZXIiPT10eXBlb2YgaSYmaT49MCYmaTw9MTAwJiYoZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9aSksZX0pKSx7cmVkdWNlcnM6WEVlfT1ZZih5Qyx7fSk7ZnVuY3Rpb24gdksobix0KXtyZXR1cm4gWGYoWUVlLFhFZSkobix0KX12YXIgUnA9UHIoImNvcmUiKSx5RD1ZKFJwLG49Pm4ucGx1Z2luc0xpc3RMb2FkZWQpLHlLPVkoUnAsbj0+bi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSksYks9WShScCxuPT5uLmNvcmVEYXRhTG9hZFN0YXRlLnN0YXRlKSxvXz1ZKFJwLG49Pm4uY29yZURhdGFMb2FkU3RhdGUubGFzdExvYWRlZFRpbWVJbk1zKSxkcz1ZKFJwLG49Pm4uYWN0aXZlUGx1Z2luKSxzXz1ZKFJwLG49Pm4ucGx1Z2lucyksYkQ9WShScCxuPT5uLmVudmlyb25tZW50KSx4RD1ZKFJwLG49Pm4uc2lkZUJhcldpZHRoSW5QZXJjZW50KSx4Sz1uZXcgU2V0KFtmaS5DT01QQVJFX0VYUEVSSU1FTlQsZmkuRVhQRVJJTUVOVCxmaS5OT1RfU0VUXSksQ0s9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLndlYmFwcERhdGFTb3VyY2U9cix0aGlzLnRmQmFja2VuZD17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWJhY2tlbmQiKS50Zl9iYWNrZW5kfSx0aGlzLm9uRGFzaGJvYXJkTG9hZCQ9dW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKG1LLHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKEhhLHdsKSkpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpKSxIZSgoWyxvXSk9PnhLLmhhcyhvKSksYmcoMSx2b2lkIDAse2xlYWRpbmc6ITB9KSksdGhpcy5mZXRjaFdlYkFwcERhdGEkPVVyKCgpPT57bGV0IG89dGhpcy5vbkRhc2hib2FyZExvYWQkLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoeUQpLHRoaXMuc3RvcmUuc2VsZWN0KGlLKSksSGUoKFsse3N0YXRlOmF9XSk9PmEhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChwRCgpKSksX24oKFssLGFdKT0+ZnVuY3Rpb24oLi4ubil7bGV0IHQ9SGMobiksZT1GUyhuKTtyZXR1cm4gZS5sZW5ndGg/bmV3IFF0KGk9PntsZXQgcj1lLm1hcCgoKT0+W10pLG89ZS5tYXAoKCk9PiExKTtpLmFkZCgoKT0+e3I9bz1udWxsfSk7Zm9yKGxldCBzPTA7IWkuY2xvc2VkJiZzPGUubGVuZ3RoO3MrKylhaShlW3NdKS5zdWJzY3JpYmUoTHQoaSxhPT57aWYocltzXS5wdXNoKGEpLHIuZXZlcnkobD0+bC5sZW5ndGgpKXtsZXQgbD1yLm1hcChjPT5jLnNoaWZ0KCkpO2kubmV4dCh0P3QoLi4ubCk6bCksci5zb21lKChjLHUpPT4hYy5sZW5ndGgmJm9bdV0pJiZpLmNvbXBsZXRlKCl9fSwoKT0+e29bc109ITAsIXJbc10ubGVuZ3RoJiZpLmNvbXBsZXRlKCl9KSk7cmV0dXJuKCk9PntyPW89bnVsbH19KTphb30odGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoUGx1Z2luc0xpc3RpbmcoYSksdGhpcy5mZXRjaEVudmlyb25tZW50KCkpLnBpcGUoQigoW2xdKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gocWYoe3BsdWdpbnM6bH0pKX0pLENvKGw9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHZDKGwgaW5zdGFuY2VvZiBfQz97ZmFpbHVyZUNvZGU6bC5mYWlsdXJlQ29kZX06e2ZhaWx1cmVDb2RlOkNsLlVOS05PV059KSksYW8pKSkpKTtyZXR1cm4gdW4obyx0aGlzLm9uRGFzaGJvYXJkTG9hZCQucGlwZShCKChbLGFdKT0+YSksdmkoYT0+YSE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9qdChbXSk6dGhpcy5zdG9yZS5zZWxlY3QoaHUpLnBpcGUoZGkoKGwsYyk9PntsZXQgdT1PYmplY3QuZW50cmllcyhsKSxkPW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoYykpO2lmKHUubGVuZ3RoIT09ZC5zaXplKXJldHVybiExO2ZvcihsZXRbcCxoXW9mIHUpaWYoIWQuZ2V0KHApfHxkLmdldChwKS5hbGlhc1RleHQhPT1oLmFsaWFzVGV4dHx8ZC5nZXQocCkuYWxpYXNOdW1iZXIhPT1oLmFsaWFzTnVtYmVyKXJldHVybiExO3JldHVybiEwfSksbmwoMCksYmcoNTAwLHZvaWQgMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pKSksR3QodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuc3RvcmUuc2VsZWN0KHlLKSksSGUoKFssYSxsXSk9PnhLLmhhcyhhKSYmbC5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChoRCgpKX0pLHZpKCgpPT50aGlzLnJlZnJlc2hQb2x5bWVyUnVucygpKSxOdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goZkQoKSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2gobUQoKSksYW8pKSkpfSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLmRpc3BhdGNoQ2hhbmdlUGx1Z2luJD1VcigoKT0+dW4odGhpcy5vbkRhc2hib2FyZExvYWQkLHRoaXMuYWN0aW9ucyQucGlwZShUaShxZikpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksQigoWyxvXSk9Pm8pLGRpKCksSGUobz0+bnVsbCE9PW8pLEh0KDEpLE50KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKF91KHtwbHVnaW46b30pKX0pKSx7ZGlzcGF0Y2g6ITF9KX1yZWZyZXNoUG9seW1lclJ1bnMoKXtyZXR1cm4gbG8odGhpcy50ZkJhY2tlbmQucmVmLnJ1bnNTdG9yZS5yZWZyZXNoKCkpfWZldGNoRW52aXJvbm1lbnQoKXtyZXR1cm4gdGhpcy53ZWJhcHBEYXRhU291cmNlLmZldGNoRW52aXJvbm1lbnQoKS5waXBlKE50KGU9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGdEKHtlbnZpcm9ubWVudDplfSkpfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksblY9bmV3IHNlKCJDb3JlIEZlYXR1cmUgQ29uZmlnIik7ZnVuY3Rpb24gd0sobil7cmV0dXJue2luaXRpYWxTdGF0ZTp7Li4ueUMsYWN0aXZlUGx1Z2luOm4uZ2V0UGx1Z2luSWQoKXx8bnVsbH19fWZ1bmN0aW9uIFpFZSgpe3JldHVybiBZKHhELG49Pih7c2lkZUJhcldpZHRoSW5QZXJjZW50Om59KSl9dmFyIE1sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOm5WLGRlcHM6W0FwXSx1c2VGYWN0b3J5OndLfV0saW1wb3J0czpbTG8uZm9yRmVhdHVyZShbQ0tdKSxSci5mb3JGZWF0dXJlKCJjb3JlIix2SyxuViksZkssbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhaRWUpXX0pLG59KSgpLE1LPW5ldyBzZSgiW0FsZXJ0XSBBY3Rpb24tVG8tQWxlcnQgUHJvdmlkZXIiKSx2dT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucHJvdmlkZXJzPW5ldyBNYXA7Zm9yKGxldCBpIG9mIGV8fFtdKWZvcihsZXQgciBvZiBpKXtpZih0aGlzLnByb3ZpZGVycy5oYXMoci5hY3Rpb25DcmVhdG9yLnR5cGUpKXRocm93IG5ldyBSYW5nZUVycm9yKGAiJHtyLmFjdGlvbkNyZWF0b3IudHlwZX0iIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgYWxlcnRzLiBNdWx0aXBsZSBhbGVydHMgZm9yIHRoZSBzYW1lIGFjdGlvbiBpcyBub3QgYWxsb3dlZC5gKTt0aGlzLnByb3ZpZGVycy5zZXQoci5hY3Rpb25DcmVhdG9yLnR5cGUsci5hbGVydEZyb21BY3Rpb24pfX1nZXRBbGVydEZyb21BY3Rpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlckFsZXJ0QWN0aW9ucyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOk1LLG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihNSyw4KSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLENEPXdlKCJbUnVuc10gRmV0Y2ggUnVucyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPcD13ZSgiW1J1bnNdIEZldGNoIFJ1bnMgU3VjY2VlZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYV89d2UoIltSdW5zXSBGZXRjaCBSdW5zIEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHdEPXdlKCJbUnVuc10gUnVuIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTUQ9d2UoIltSdW5zXSBTaW5nbGUgUnVuIFNlbGVjdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU0Q9d2UoIltSdW5zXSBSdW4gUGFnZSBTZWxlY3Rpb24gVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVEPXdlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFBhZ2luYXRpb24gT3B0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxURD13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBTb3J0IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxiQz13ZSgiW1J1bnNdIFJ1biBTZWxlY3RvciBSZWdleCBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEREPXdlKCJbUnVuc10gUnVuIENvbG9yIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRD13ZSgiW1J1bnNdIFJ1biBUYWJsZSBTaG93biIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGxfPXdlKCJbUnVuc10gUnVuIEdyb3VwIEJ5IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxrcD0oKCk9PihmdW5jdGlvbihuKXtuLlNUQVRVU19VTktOT1dOPSJTVEFUVVNfVU5LTk9XTiIsbi5TVEFUVVNfU1VDQ0VTUz0iU1RBVFVTX1NVQ0NFU1MiLG4uU1RBVFVTX0ZBSUxVUkU9IlNUQVRVU19GQUlMVVJFIixuLlNUQVRVU19SVU5OSU5HPSJTVEFUVVNfUlVOTklORyJ9KGtwfHwoa3A9e30pKSxrcCkpKCksS249KCgpPT4oZnVuY3Rpb24obil7bltuLkRJU0NSRVRFPTBdPSJESVNDUkVURSIsbltuLklOVEVSVkFMPTFdPSJJTlRFUlZBTCJ9KEtufHwoS249e30pKSxLbikpKCksSUQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUWY9e307U08oUWYse2hwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9Pm9WLGhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQ6KCk9PnNWLGhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkOigpPT5hVn0pO3ZhciBvVj13ZSgiW0hwYXJhbXNdIEhwYXJhbXMgRGlzY3JldGUgSHBhcmFtIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1Y9d2UoIltIcGFyYW1zXSBIcGFyYW1zIEludGVydmFsIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFWPXdlKCJbSHBhcmFtc10gSHBhcmFtcyBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiBLZihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWy4uLm5dLnNvcnQoKSl9ZnVuY3Rpb24geEMobil7bGV0IHQ9bmV3IE1hcCxlPW5ldyBNYXAsaT1uZXcgTWFwO2ZvcihsZXQgciBvZiBuKWZvcihsZXRbbyxzXW9mIHIpaWYocy50eXBlPT09S24uRElTQ1JFVEUpe2xldHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfT1lLmdldChvKXx8e3Bvc3NpYmxlVmFsdWVzOm5ldyBTZXQsdmFsdWVzOm5ldyBTZXR9O2ZvcihsZXQgYyBvZiBzLmZpbHRlclZhbHVlcylsLmFkZChjKTtmb3IobGV0IGMgb2Ygcy5wb3NzaWJsZVZhbHVlcylhLmFkZChjKTtlLnNldChvLHtwb3NzaWJsZVZhbHVlczphLHZhbHVlczpsfSl9ZWxzZXtsZXQgYT1pLmdldChvKTtpLnNldChvLHtmaWx0ZXJMb3dlclZhbHVlOk1hdGgubWluKHMuZmlsdGVyTG93ZXJWYWx1ZSxhPy5maWx0ZXJMb3dlclZhbHVlPz8xLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgocy5maWx0ZXJVcHBlclZhbHVlLGE/LmZpbHRlclVwcGVyVmFsdWU/Py0xLzApLG1pblZhbHVlOk1hdGgubWluKHMubWluVmFsdWUsYT8ubWluVmFsdWU/PzEvMCksbWF4VmFsdWU6TWF0aC5tYXgocy5tYXhWYWx1ZSxhPy5tYXhWYWx1ZT8/LTEvMCl9KX1mb3IobGV0W3Ise3ZhbHVlczpvLHBvc3NpYmxlVmFsdWVzOnN9XW9mIGUpdC5zZXQocix7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5zXSxmaWx0ZXJWYWx1ZXM6Wy4uLm9dfSk7Zm9yKGxldFtyLHttaW5WYWx1ZTpvLG1heFZhbHVlOnMsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6bH1db2YgaSl7aWYodC5oYXMocikpe2xldCBjPXQuZ2V0KHIpO2lmKGMudHlwZT09PUtuLkRJU0NSRVRFJiZjLnBvc3NpYmxlVmFsdWVzLnNvbWUodT0+dSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENhbm5vdCBjb21iaW5lIGhwYXJhbSwgJHtyfSwgYXMgaXQgaXMgb2YgbWl4ZWQgdHlwZXMuYCl9dC5zZXQocix7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOm8sbWF4VmFsdWU6cyxmaWx0ZXJMb3dlclZhbHVlOmEsZmlsdGVyVXBwZXJWYWx1ZTpsfSl9cmV0dXJuIHR9ZnVuY3Rpb24gUEQobil7bGV0IHQ9bmV3IE1hcDtmb3IobGV0IGUgb2Ygbilmb3IobGV0W2kscl1vZiBlKXtsZXQgbz10LmdldChpKTt0LnNldChpLHt0eXBlOktuLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsLi4ubyxtaW5WYWx1ZTpNYXRoLm1pbihyLm1pblZhbHVlLG8/Lm1pblZhbHVlPz8xLzApLG1heFZhbHVlOk1hdGgubWF4KHIubWF4VmFsdWUsbz8ubWF4VmFsdWU/Py0xLzApLGZpbHRlckxvd2VyVmFsdWU6TWF0aC5taW4oci5maWx0ZXJMb3dlclZhbHVlLG8/LmZpbHRlckxvd2VyVmFsdWU/PzEvMCksZmlsdGVyVXBwZXJWYWx1ZTpNYXRoLm1heChyLmZpbHRlclVwcGVyVmFsdWUsbz8uZmlsdGVyVXBwZXJWYWx1ZT8/LTEvMCl9KX1yZXR1cm4gdH12YXIgaTFlPXdyKHtzcGVjczp7fSxmaWx0ZXJzOnt9fSxTZShvViwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309dCxzPUtmKGUpLGE9bi5maWx0ZXJzW3NdPz97aHBhcmFtczpuZXcgTWFwfSxsPWEuaHBhcmFtcy5nZXQoaSk7aWYobCYmbC50eXBlIT09S24uRElTQ1JFVEUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBkaXNjcmV0ZSBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArS25bbC50eXBlXSk7bGV0IGM9eEMoZS5maWx0ZXIoaD0+Qm9vbGVhbihuLnNwZWNzW2hdKSkubWFwKGg9Pm4uc3BlY3NbaF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYW0sICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtpZihjLnR5cGUhPT1Lbi5ESVNDUkVURSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgJHtpfSB3aGVuIGRlZmF1bHQgZmlsdGVyIGlzIG5vdCBvZiBkaXNjcmV0ZSB0eXBlLmApO2xldCB1PW5ldyBTZXQoYy5wb3NzaWJsZVZhbHVlcyksZD1bLi4ucl0uZmlsdGVyKGg9PiF1LmhhcyhoKSk7aWYoZC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBOZXcgZmlsdGVyIGZvciAke2l9IGhhcyBtb3JlIHRoYW4gb25lIHZhbHVlIHRoYXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHNwZWMuIEJhZCB2YWx1ZXM6ICR7ZC5qb2luKCIsICIpfWApO2xldCBwPW5ldyBNYXAoYS5ocGFyYW1zKTtyZXR1cm4gcC5zZXQoaSx7Li4ubCx0eXBlOktuLkRJU0NSRVRFLGluY2x1ZGVVbmRlZmluZWQ6byxwb3NzaWJsZVZhbHVlczpbLi4udV0sZmlsdGVyVmFsdWVzOnJ9KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW3NdOnsuLi5hLGhwYXJhbXM6cH19fX0pLFNlKHNWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxocGFyYW1OYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1LZihlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9bC5ocGFyYW1zLmdldChpKTtpZihjJiZjLnR5cGUhPT1Lbi5JTlRFUlZBTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgTmV3IGludGVydmFsIGZpbHRlciBvZiAke2l9IGNvbmZsaWN0cyBleGlzdGluZyBmaWx0ZXIgb2YgYCtLbltjLnR5cGVdKTtsZXQgdT14QyhlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5ocGFyYW0uZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIXUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGhwYXJhLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYodS50eXBlIT09S24uSU5URVJWQUwpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgaW50ZXJ2YWwgdHlwZS5gKTtsZXQgZD1uZXcgTWFwKGwuaHBhcmFtcyk7cmV0dXJuIGQuc2V0KGksey4uLmMsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6dS5taW5WYWx1ZSxtYXhWYWx1ZTp1Lm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLGhwYXJhbXM6ZH19fX0pLFNlKGFWLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZHM6ZSxtZXRyaWNUYWc6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309dCxhPUtmKGUpLGw9bi5maWx0ZXJzW2FdPz97bWV0cmljczpuZXcgTWFwLGhwYXJhbXM6bmV3IE1hcH0sYz1QRChlLmZpbHRlcihwPT5Cb29sZWFuKG4uc3BlY3NbcF0pKS5tYXAocD0+bi5zcGVjc1twXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpKS5nZXQoaSk7aWYoIWMpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IG1ldHJpYywgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2xldCB1PWwubWV0cmljcy5nZXQoaSksZD1uZXcgTWFwKGwubWV0cmljcyk7cmV0dXJuIGQuc2V0KGksey4uLnUsdHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOnMsbWluVmFsdWU6Yy5taW5WYWx1ZSxtYXhWYWx1ZTpjLm1heFZhbHVlLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm99KSx7Li4ubixmaWx0ZXJzOnsuLi5uLmZpbHRlcnMsW2FdOnsuLi5sLG1ldHJpY3M6ZH19fX0pLFNlKE9wLChuLHQpPT57aWYoMD09PU9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKS5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4uc3BlY3N9LGk9bmV3IE1hcCxyPW5ldyBTZXQ7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0IHM9bmV3IE1hcCxhPW5ldyBNYXAsbD1uZXcgTWFwLGM9bmV3IE1hcCx7cnVuczp1LG1ldGFkYXRhOmR9PXQubmV3UnVuc0FuZE1ldGFkYXRhW29dO2ZvcihsZXQgcCBvZiB1KXtsZXQgaD1kLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbcC5pZF07aWYoaClmb3IobGV0IGYgb2YgaC5tZXRyaWNzKXtsZXQgbT1pLmdldChmLnRhZyk7aS5zZXQoZi50YWcse21pbjptP01hdGgubWluKG0ubWluLGYudmFsdWUpOmYudmFsdWUsbWF4Om0/TWF0aC5tYXgobS5tYXgsZi52YWx1ZSk6Zi52YWx1ZX0pfX1mb3IobGV0e25hbWU6cCxkb21haW46aH1vZiBkLmhwYXJhbVNwZWNzKWlmKGgudHlwZT09PUtuLkRJU0NSRVRFKXtsZXQgZj1sLmdldChwKXx8bmV3IFNldDtmb3IobGV0IG0gb2YgaC52YWx1ZXMpZi5hZGQobSk7bC5zZXQocCxmKX1lbHNle2xldCBmPWMuZ2V0KHApO2Muc2V0KHAse21pblZhbHVlOmY/TWF0aC5taW4oaC5taW5WYWx1ZSxmLm1pblZhbHVlKTpoLm1pblZhbHVlLG1heFZhbHVlOmY/TWF0aC5tYXgoaC5tYXhWYWx1ZSxmLm1heFZhbHVlKTpoLm1heFZhbHVlfSl9Zm9yKGxldCBwIG9mIGQubWV0cmljU3BlY3Mpci5hZGQocC50YWcpO2ZvcihsZXRbcCxoXW9mIGwpcy5zZXQocCx7dHlwZTpLbi5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOiEwLHBvc3NpYmxlVmFsdWVzOlsuLi5oXSxmaWx0ZXJWYWx1ZXM6Wy4uLmhdfSk7Zm9yKGxldFtwLHttaW5WYWx1ZTpoLG1heFZhbHVlOmZ9XW9mIGMpcy5zZXQocCx7dHlwZTpLbi5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLG1pblZhbHVlOmgsbWF4VmFsdWU6ZixmaWx0ZXJMb3dlclZhbHVlOmgsZmlsdGVyVXBwZXJWYWx1ZTpmfSk7Zm9yKGxldCBwIG9mIHIpe2xldCBoPWkuZ2V0KHApLGY9aD8ubWluPz8wLG09aD8ubWF4Pz8wO2Euc2V0KHAse3R5cGU6S24uSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpmLG1heFZhbHVlOm0sZmlsdGVyTG93ZXJWYWx1ZTpmLGZpbHRlclVwcGVyVmFsdWU6bX0pfWVbb109e2hwYXJhbTp7Li4uZVtvXT8uaHBhcmFtLHNwZWNzOmQuaHBhcmFtU3BlY3MsZGVmYXVsdEZpbHRlcnM6c30sbWV0cmljOnsuLi5lW29dPy5tZXRyaWMsc3BlY3M6ZC5tZXRyaWNTcGVjcyxkZWZhdWx0RmlsdGVyczphfX19cmV0dXJuey4uLm4sc3BlY3M6ZX19KSk7ZnVuY3Rpb24gVEsobix0KXtyZXR1cm4gaTFlKG4sdCl9dmFyIFJEPSJocGFyYW1zIixESz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShSRCxUSyldfSksbn0pKCksT0Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0RLXX0pLG59KSgpLEFLPSJkYXRhL3BsdWdpbi9ocGFyYW1zIjtmdW5jdGlvbiByMWUobix0KXtyZXR1cm5gJHt0fS8ke259YH1mdW5jdGlvbiBvMWUobil7bGV0IHQ7cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImRvbWFpbkRpc2NyZXRlIil9KG4pP3t0eXBlOktuLkRJU0NSRVRFLHZhbHVlczpuLmRvbWFpbkRpc2NyZXRlfTpmdW5jdGlvbihuKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZG9tYWluSW50ZXJ2YWwiKX0obik/ey4uLm4uZG9tYWluSW50ZXJ2YWwsdHlwZTpLbi5JTlRFUlZBTH06e3R5cGU6S24uSU5URVJWQUwsbWluVmFsdWU6LTEvMCxtYXhWYWx1ZToxLzB9LHtkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGRpc3BsYXlOYW1lOm4uZGlzcGxheU5hbWUsbmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsZG9tYWluOnR9fWZ1bmN0aW9uIHMxZShuKXtsZXR7bmFtZTp0LC4uLmV9PW47cmV0dXJuey4uLmUsdGFnOnQudGFnfX12YXIgSUs9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoImRhdGEvcnVucyIpLnBpcGUoQihpPT5pLm1hcChyPT4oe2lkOnIxZShyLGUpLG5hbWU6cixzdGFydFRpbWU6MH0pKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKGUpe3JldHVybiB0aGlzLmh0dHAucG9zdChgL2V4cGVyaW1lbnQvJHtlfS8ke0FLfS9leHBlcmltZW50YCx7ZXhwZXJpbWVudE5hbWU6ZX0se30sInJlcXVlc3QiKS5waXBlKEIocj0+e2xldCBvPVtdO2ZvcihsZXQgYSBvZiByLmhwYXJhbUluZm9zKW8ucHVzaCh7aHBhcmFtOmEubmFtZX0pO2ZvcihsZXQgYSBvZiByLm1ldHJpY0luZm9zKW8ucHVzaCh7bWV0cmljOmEubmFtZX0pO3JldHVybntleHBlcmltZW50SHBhcmFtc0luZm86cixsaXN0U2Vzc2lvblJlcXVlc3RQYXJhbXM6e2V4cGVyaW1lbnROYW1lOmUsYWxsb3dlZFN0YXR1c2VzOltrcC5TVEFUVVNfRkFJTFVSRSxrcC5TVEFUVVNfUlVOTklORyxrcC5TVEFUVVNfU1VDQ0VTUyxrcC5TVEFUVVNfVU5LTk9XTl0sY29sUGFyYW1zOm8sc3RhcnRJbmRleDowLHNsaWNlU2l6ZToxZTZ9fX0pLF9uKCh7ZXhwZXJpbWVudEhwYXJhbXNJbmZvOnIsbGlzdFNlc3Npb25SZXF1ZXN0UGFyYW1zOm99KT0+dGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7ZX0vJHtBS30vc2Vzc2lvbl9ncm91cHNgLG8se30sInJlcXVlc3QiKS5waXBlKEIocz0+KHtleHBlcmltZW50SHBhcmFtc0luZm86cixzZXNzaW9uR3JvdXBzTGlzdDpzfSkpKSksQigoe2V4cGVyaW1lbnRIcGFyYW1zSW5mbzpyLHNlc3Npb25Hcm91cHNMaXN0Om99KT0+e2xldCBzPXt9O2ZvcihsZXQgYSBvZiBvLnNlc3Npb25Hcm91cHMpe2xldCBsPU9iamVjdC5lbnRyaWVzKGEuaHBhcmFtcykubWFwKGM9PntsZXRbdSxkXT1jO3JldHVybntuYW1lOnUsdmFsdWU6ZH19KTtmb3IobGV0IGMgb2YgYS5zZXNzaW9ucylmb3IobGV0IHUgb2YgYy5tZXRyaWNWYWx1ZXMpe2xldCBwPWAke2V9LyR7dS5uYW1lLmdyb3VwP2Ake2MubmFtZX0vJHt1Lm5hbWUuZ3JvdXB9YDpjLm5hbWV9YCxoPXNbcF18fHttZXRyaWNzOltdLGhwYXJhbXM6bH07aC5tZXRyaWNzLnB1c2goe3RhZzp1Lm5hbWUudGFnLHRyYWluaW5nU3RlcDp1LnRyYWluaW5nU3RlcCx2YWx1ZTp1LnZhbHVlfSksc1twXT1ofX1yZXR1cm57aHBhcmFtU3BlY3M6ci5ocGFyYW1JbmZvcy5tYXAobzFlKSxtZXRyaWNTcGVjczpyLm1ldHJpY0luZm9zLm1hcChzMWUpLHJ1blRvSHBhcmFtc0FuZE1ldHJpY3M6c319KSxDbyhyPT5yIGluc3RhbmNlb2YgbWQmJjQwMD09PXIuc3RhdHVzP2p0KHtocGFyYW1TcGVjczpbXSxtZXRyaWNTcGVjczpbXSxydW5Ub0hwYXJhbXNBbmRNZXRyaWNzOnt9fSk6R2wocikpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFBLPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOklELHVzZUNsYXNzOklLfV19KSxufSkoKSxSSz1ZKFByKCJhbGVydHMiKSxuPT5uLmxhdGVzdEFsZXJ0KSxGRD0iZXhwZXJpbWVudHMiLGMxZT1ZKFByKEZEKSxuPT5uLmRhdGEpLE5EPVkoYzFlLChuLHQpPT57bGV0e2V4cGVyaW1lbnRJZDplfT10O3JldHVybiBuLmV4cGVyaW1lbnRNYXBbZV18fG51bGx9KTtmdW5jdGlvbiBMRChuLHQsZSl7cmV0dXJuIG48dD90Om4+ZT9lOm59ZnVuY3Rpb24gY18obix0LGUpe2xldCBpPUxEKG4uc3RhcnQuc3RlcCx0LGUpLHI9bi5lbmQ/TEQobi5lbmQuc3RlcCx0LGUpOm51bGw7cmV0dXJue3N0YXJ0U3RlcDppLGVuZFN0ZXA6cixjbGlwcGVkOmkhPT1uLnN0YXJ0LnN0ZXB8fHIhPT0obi5lbmQ/LnN0ZXA/P251bGwpfX1mdW5jdGlvbiBCRChuLHQpe2xldCBlPXRbbi5pZF07cmV0dXJuIGUmJmUudmlzaWJsZSYmIUJvb2xlYW4oZS5hdXgpfWZ1bmN0aW9uIGxWKG4sdCl7cmV0dXJuIHQ/bjp7c3RhcnQ6bi5zdGFydCxlbmQ6bnVsbH19ZnVuY3Rpb24gY1Yobix0LGUpe3JldHVybiBsVihmdW5jdGlvbihuLHttaW5TdGVwOnQsbWF4U3RlcDplfSl7cmV0dXJue3N0YXJ0OntzdGVwOkxEKG4uc3RhcnQuc3RlcCx0LGUpfSxlbmQ6bi5lbmQ/e3N0ZXA6TEQobi5lbmQuc3RlcCx0LGUpfTpudWxsfX0obix0KSxlKX12YXIgV249KCgpPT4oZnVuY3Rpb24obil7bi5TQ0FMQVJTPSJzY2FsYXJzIixuLkhJU1RPR1JBTVM9Imhpc3RvZ3JhbXMiLG4uSU1BR0VTPSJpbWFnZXMifShXbnx8KFduPXt9KSksV24pKSgpLFlpPSgoKT0+KGZ1bmN0aW9uKG4pe24uU1RFUD0ic3RlcCIsbi5SRUxBVElWRT0icmVsYXRpdmUiLG4uV0FMTF9USU1FPSJ3YWxsdGltZSJ9KFlpfHwoWWk9e30pKSxZaSkpKCksQ0M9InRpbWVzZXJpZXMiO2Z1bmN0aW9uIExLKG4pe3JldHVybiBuPT09V24uU0NBTEFSU3x8bj09PVduLkhJU1RPR1JBTVN8fG49PT1Xbi5JTUFHRVN9dmFyIHAxZT1bV24uSU1BR0VTXTtmdW5jdGlvbiBVYShuKXtyZXR1cm4gcDFlLmluY2x1ZGVzKG4pfXZhciBoMWU9W1duLkhJU1RPR1JBTVMsV24uSU1BR0VTXTtmdW5jdGlvbiB6YShuKXtyZXR1cm4gaDFlLmluY2x1ZGVzKG4pfWZ1bmN0aW9uIHVWKG4pe3JldHVybiB6YShuLnBsdWdpbil9dmFyIHl1PWNsYXNze307ZnVuY3Rpb24gSEQobil7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoImVycm9yIil9dmFyIGRWPSJkYXRhL3BsdWdpbi90aW1lc2VyaWVzIjtmdW5jdGlvbiBCSyhuKXtsZXQgdD1uLmluZGV4T2YoIi8iKTtyZXR1cm57cnVuOm4uc3Vic3RyaW5nKHQrMSksZXhwZXJpbWVudElkOm4uc3Vic3RyaW5nKDAsdCl9fWZ1bmN0aW9uIEhLKG4sdCl7cmV0dXJuYCR7dH0vJHtufWB9ZnVuY3Rpb24gVksobix0KXtsZXR7cnVuVG9TZXJpZXM6ZSxydW46aSwuLi5yfT1uLG89ey4uLnJ9O3JldHVybiBlJiYoby5ydW5Ub1Nlcmllcz1wVihlLHQpKSxpJiYoby5ydW5JZD1ISyhpLHQpKSxvfWZ1bmN0aW9uIHBWKG4sdCl7bGV0IGU9e307Zm9yKGxldCBpIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShpKSYmKGVbSEsoaSx0KV09bltpXSk7cmV0dXJuIGV9dmFyIFVLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmh0dHA9ZSx0aGlzLnN0b3JlPWl9ZmV0Y2hUYWdNZXRhZGF0YShlKXtsZXQgaT1lLm1hcChvPT50aGlzLmh0dHAuZ2V0KGAvZXhwZXJpbWVudC8ke299LyR7ZFZ9L3RhZ3NgKS5waXBlKEIoYT0+ZnVuY3Rpb24obix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpe2xldCByPWk7aWYoVWEocikpe2xldHt0YWdSdW5TYW1wbGVkSW5mbzpvLC4uLnN9PW5bcl0sYT17fTtmb3IobGV0IGwgaW4gbylvLmhhc093blByb3BlcnR5KGwpJiYoYVtsXT1wVihvW2xdLHQpKTtlW3JdPXsuLi5zLHRhZ1J1blNhbXBsZWRJbmZvOmF9fWVsc2V7bGV0e3J1blRhZ0luZm86bywuLi5zfT1uW3JdO2Vbcl09ey4uLnMscnVuVGFnSW5mbzpwVihvLHQpfX19cmV0dXJuIGV9KGEsbykpKSkscj10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssb10pPT5vKSk7cmV0dXJuIHhvKGkpLnBpcGUoR3QociksQigoW28sc10pPT57bGV0IGE9ZnVuY3Rpb24obil7bGV0IHQ9e307Zm9yKGxldCBlIG9mIG4pZm9yKGxldCBpIG9mIE9iamVjdC52YWx1ZXMoV24pKWlmKFVhKGkpKXt0W2ldPXRbaV18fHt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319O2xldHt0YWdEZXNjcmlwdGlvbnM6cix0YWdSdW5TYW1wbGVkSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfTtsZXQgcz10W2ldLnRhZ1J1blNhbXBsZWRJbmZvO2ZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvKSl7c1thXT1zW2FdfHx7fTtmb3IobGV0IGwgb2YgT2JqZWN0LmtleXMob1thXSkpc1thXVtsXT1vW2FdW2xdfX1lbHNle3RbaV09dFtpXXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSxydW5UYWdJbmZvOnt9fTtsZXR7dGFnRGVzY3JpcHRpb25zOnIscnVuVGFnSW5mbzpvfT1lW2ldO3RbaV0udGFnRGVzY3JpcHRpb25zPXsuLi50W2ldLnRhZ0Rlc2NyaXB0aW9ucywuLi5yfSx0W2ldLnJ1blRhZ0luZm89ey4uLnRbaV0ucnVuVGFnSW5mbywuLi5vfX1yZXR1cm4gdH0obyk7cmV0dXJuIHN8fChhW1duLklNQUdFU109e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX0pLGF9KSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe2xldCBpPWUubWFwKHI9PntpZih6YShyLnBsdWdpbikpe2xldHtydW5JZDpsLC4uLmN9PXIse3J1bjp1LGV4cGVyaW1lbnRJZDpkfT1CSyhsKSxwPXsuLi5jLHJ1bjp1fTtyZXR1cm4gdGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChwLGQpLnBpcGUoQigoe3Jlc3BvbnNlOmgsZXhwZXJpbWVudElkOmZ9KT0+VksoaCxmKSkpfWxldHtleHBlcmltZW50SWRzOm8sLi4uc309cjtyZXR1cm4geG8oby5tYXAobD0+dGhpcy5mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChzLGwpKSkucGlwZShCKGw9PntsZXR7cnVuVG9TZXJpZXM6YyxlcnJvcjp1LC4uLmR9PWxbMF0ucmVzcG9uc2UscD1kO2ZvcihsZXR7cmVzcG9uc2U6aCxleHBlcmltZW50SWQ6Zn1vZiBsKXtsZXQgbT1WSyhoLGYpO2lmKHAuZXJyb3IpY29udGludWU7bGV0e3J1blRvU2VyaWVzOkMsZXJyb3I6X309bTtpZihfKXAuZXJyb3I9XyxwLnJ1blRvU2VyaWVzPXZvaWQgMDtlbHNle3AucnVuVG9TZXJpZXM9cC5ydW5Ub1Nlcmllc3x8e307Zm9yKGxldCB5IG9mIE9iamVjdC5rZXlzKEMpKXAucnVuVG9TZXJpZXNbeV09Q1t5XX19cmV0dXJuIHB9KSl9KTtyZXR1cm4geG8oaSl9ZmV0Y2hUaW1lU2VyaWVzQmFja2VuZFJlcXVlc3QoZSxpKXtsZXQgcj1uZXcgRm9ybURhdGE7cmV0dXJuIHIuYXBwZW5kKCJyZXF1ZXN0cyIsSlNPTi5zdHJpbmdpZnkoW2VdKSksdGhpcy5odHRwLnBvc3QoYC9leHBlcmltZW50LyR7aX0vJHtkVn0vdGltZVNlcmllc2AscikucGlwZShCKG89Pih7cmVzcG9uc2U6b1swXSxleHBlcmltZW50SWQ6aX0pKSl9aW1hZ2VVcmwoZSl7cmV0dXJuYCR7ZFZ9L2ltYWdlRGF0YT9pbWFnZUlkPSR7ZX1gfWRvd25sb2FkVXJsKGUsaSxyLG8pe2xldCBsLHtydW46cyxleHBlcmltZW50SWQ6YX09Qksocik7aWYoZSE9PVduLlNDQUxBUlMpdGhyb3cgbmV3IEVycm9yKGBOb3QgaW1wbGVtZW50ZWQ6IGRvd25sb2FkVXJsIGZvciAke2V9IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRgKTtpZihsPSJzY2FsYXJzL3NjYWxhcnMiLCFhKXRocm93IG5ldyBFcnJvcigiZXhwZXJpbWVudElkIGlzIGVtcHR5OyBpdCBpcyByZXF1aXJlZCB0byBmb3JtIGRvd25sb2FkVXJsLiIpO3JldHVybmAvZXhwZXJpbWVudC8ke2F9L2RhdGEvcGx1Z2luL3NjYWxhcnMvc2NhbGFycz8ke25ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzppLHJ1bjpzLGZvcm1hdDpvfSl9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSksUihQZSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLF8xZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLFVEPSgoKT0+e2NsYXNzIG57Z2V0UGFyYW1zKCl7cmV0dXJuIF8xZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd0M9InRiX2ZlYXR1cmVfZmxhZ19zdG9yYWdlX2tleSIsaFY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXJ5UGFyYW1zPWV9Z2V0RmVhdHVyZXMoZSxpKXtsZXQgcj1lP3RoaXMuZ2V0UGFydGlhbEZlYXR1cmVzRnJvbU1lZGlhUXVlcnkoKTp7fSxvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgoZSxbaSxyXSk9PntsZXQgbz1mdW5jdGlvbihuLHQpe2xldCBlPW4ucXVlcnlQYXJhbU92ZXJyaWRlO2lmKCFlfHwhdC5oYXMoZSkpcmV0dXJuIG51bGw7bGV0IGk9dC5nZXQoZSk7cmV0dXJuIG51bGw9PWk/bnVsbDpuLnBhcnNlVmFsdWUoaSl9KHIsdCk7cmV0dXJuIG51bGwhPT1vJiYoZVtpXT1vKSxlfSx7fSl9KGksdGhpcy5xdWVyeVBhcmFtcy5nZXRQYXJhbXMoKSk7cmV0dXJuey4uLnIsLi4uT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpKS5maWx0ZXIoKFthXSk9PmlbYV0pKSwuLi5vfX1wZXJzaXN0RmVhdHVyZUZsYWdzKGUpe2xldCByPXsuLi50aGlzLmdldFBlcnNpc3RlbnRGZWF0dXJlRmxhZ3MoKSwuLi5lfTt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0od0MsSlNPTi5zdHJpbmdpZnkocikpfXJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoZSl7bGV0IGk9dGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCk7aWYobnVsbCE9aVtlXSl7aWYoZGVsZXRlIGlbZV0sMD09PU9iamVjdC5rZXlzKGkpLmxlbmd0aClyZXR1cm4gdm9pZCB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0od0MpO3dpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh3QyxKU09OLnN0cmluZ2lmeShpKSl9fXJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl7d2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHdDKX1nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCl7bGV0IGU9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKHdDKTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVEKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksekQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksR0s9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaFYsVUQse3Byb3ZpZGU6ekQsdXNlQ2xhc3M6aFZ9XX0pLG59KSgpLE1DPXdlKCJbRkVBVFVSRSBGTEFHXSBQYXJ0aWFsIEZlYXR1cmUgRmxhZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksakQ9d2UoIltGRUFUVVJFIEZMQUddIEVuYWJsZSBEYXJrIE1vZGUgT3ZlcnJpZGUgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFpmPXdlKCJbRkVBVFVSRSBGTEFHXSBTdG9yZSB0aGUgZmVhdHVyZSBmbGFncyBpbiBwZXJzaXN0ZW50IGxvY2FsU3RvcmFnZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEZwPXdlKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdV89d2UoIltGRUFUVVJFIEZMQUddIFJlc2V0IGFsbCBmZWF0dXJlIGZsYWcgb3ZlcnJpZGVzIiksV0s9d2UoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLHFLPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy50ZkZlYXR1cmVGbGFncz17cmVmOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLWZlYXR1cmUtZmxhZ3MiKS50Zl9mZWF0dXJlX2ZsYWdzfSx0aGlzLmdldEZlYXR1cmVGbGFncyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShXSyksc3IodGhpcy5zdG9yZS5zZWxlY3QobkspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSksQigoWyxvLHNdKT0+e2xldCBhPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhvLHMpO3JldHVybiBNQyh7ZmVhdHVyZXM6YX0pfSkpKSx0aGlzLnVwZGF0ZVBvbHltZXJGZWF0dXJlRmxhZ3MkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoTUMpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KEJvKSx0aGlzLnN0b3JlLnNlbGVjdChuXykpLE50KChbLG8sc10pPT57dGhpcy50ZkZlYXR1cmVGbGFncy5yZWYuc2V0RmVhdHVyZUZsYWdzKG8scyl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5zdG9yZUZlYXR1cmVGbGFnJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKFpmKSxOdCgoe2ZsYWdzOm99KT0+e3RoaXMuZGF0YVNvdXJjZS5wZXJzaXN0RmVhdHVyZUZsYWdzKG8pfSkpLHtkaXNwYXRjaDohMX0pLHRoaXMucmVzZXRGZWF0dXJlRmxhZ092ZXJyaWRlcyQ9VXIoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShUaShGcCksTnQoKHtmbGFnczpvfSk9PntvLmZvckVhY2gocz0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKHMpfSl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEFsbEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1VcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKFRpKHVfKSxOdCgoKT0+e3RoaXMuZGF0YVNvdXJjZS5yZXNldEFsbFBlcnNpc3RlZEZlYXR1cmVGbGFncygpfSkpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIFdLKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoY3MpLFIoUGUpLFIoekQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRSz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX1pbnRlcmNlcHQoZSxpKXtyZXR1cm4gdGhpcy5zdG9yZS5waXBlKGZuKG5fKSxmdW5jdGlvbihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGk9PmkucGlwZShuP0hlKChyLG8pPT5uKHIsbyxpKSk6TXMsSHQoMSksZT9kaih0KTpoaigoKT0+bmV3IF9nKSl9KCksdmkocj0+KGU9ZS5jbG9uZSh7aGVhZGVyczplLmhlYWRlcnMuc2V0KCJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiLEpTT04uc3RyaW5naWZ5KHIpKX0pLGkuaGFuZGxlKGUpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFBlKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCk7ZnVuY3Rpb24gZ2Qobil7cmV0dXJuImZhbHNlIiE9PW59dmFyIGZWPXtzY2FsYXJzQmF0Y2hTaXplOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2NhbGFyc0JhdGNoU2l6ZSIscGFyc2VWYWx1ZTpwYXJzZUludH0sZW5hYmxlZEV4cGVyaW1lbnRhbFBsdWdpbnM6e2RlZmF1bHRWYWx1ZTpbXSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImV4cGVyaW1lbnRhbFBsdWdpbiIscGFyc2VWYWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4gbj9uLnNwbGl0KCIsIik6W119fSxlbmFibGVkTGlua2VkVGltZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlTGlua2VkVGltZSIscGFyc2VWYWx1ZTpnZH0sZW5hYmxlZFNjYWxhckRhdGFUYWJsZTp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlRGF0YVRhYmxlIixwYXJzZVZhbHVlOmdkfSxmb3JjZVN2Zzp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZm9yY2VTVkciLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZURhcmtNb2RlT3ZlcnJpZGU6e2RlZmF1bHRWYWx1ZTpudWxsLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxkZWZhdWx0RW5hYmxlRGFya01vZGU6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImRhcmtNb2RlIixwYXJzZVZhbHVlOmdkfSxpc0F1dG9EYXJrTW9kZUFsbG93ZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0saW5Db2xhYjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToidGVuc29yYm9hcmRDb2xhYiIscGFyc2VWYWx1ZTpnZH0sbWV0cmljc0ltYWdlU3VwcG9ydEVuYWJsZWQ6e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6bnVsbH0sc2hvd0ZsYWdzOntkZWZhdWx0VmFsdWU6dm9pZCAwLHF1ZXJ5UGFyYW1PdmVycmlkZToic2hvd0ZsYWdzIixwYXJzZVZhbHVlOm49Pm59LGFsbG93UmFuZ2VTZWxlY3Rpb246e2RlZmF1bHRWYWx1ZTohMCxxdWVyeVBhcmFtT3ZlcnJpZGU6ImFsbG93UmFuZ2VTZWxlY3Rpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZWRQcm9zcGVjdGl2ZUZvYjp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlUHJvc3BlY3RpdmVGb2IiLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb246e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZVNjYWxhckNvbHVtbkN1c3RvbWl6YXRpb24iLHBhcnNlVmFsdWU6Z2R9LGVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXM6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6ImVuYWJsZUhwYXJhbXNJblRpbWVTZXJpZXMiLHBhcnNlVmFsdWU6Z2R9fSxtVj17aXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITEsZGVmYXVsdEZsYWdzOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKHQsW2UsaV0pPT4odFtlXT1pLmRlZmF1bHRWYWx1ZSx0KSx7fSl9KGZWKSxtZXRhZGF0YTpmVixmbGFnT3ZlcnJpZGVzOnt9fSxnVj1uZXcgc2UoIltGZWF0dXJlIEZsYWddIFN0b3JlIENvbmZpZyIpO2Z1bmN0aW9uIFpLKCl7cmV0dXJue2luaXRpYWxTdGF0ZTptVn19dmFyIE0xZT13cihtVixTZShNQywobix7ZmVhdHVyZXM6dH0pPT4oey4uLm4saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITAsZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnR9fSkpLFNlKGpELChuLHtlbmFibGVEYXJrTW9kZTp0fSk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTp0fX0pKSxTZShaZiwobix0KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50LmZsYWdzfX0pKSxTZShGcCwobix0KT0+e2lmKCF0fHwhdC5mbGFnc3x8IXQuZmxhZ3MubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLmZsYWdPdmVycmlkZXN9O3JldHVybiB0LmZsYWdzLmZvckVhY2goaT0+e2RlbGV0ZSBlW2ldfSksey4uLm4sZmxhZ092ZXJyaWRlczplfX0pLFNlKHVfLG49Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnt9fSkpLFNlKGZjLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57aWYoIXQudGhlbWVPdmVycmlkZSlyZXR1cm4gbjtsZXQgZTtzd2l0Y2godC50aGVtZU92ZXJyaWRlKXtjYXNlIG9hLkJST1dTRVJfREVGQVVMVDplPW51bGw7YnJlYWs7Y2FzZSBvYS5EQVJLOmU9ITA7YnJlYWs7Y2FzZSBvYS5MSUdIVDplPSExfXJldHVybnsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOmV9fX0pKTtmdW5jdGlvbiBKSyhuLHQpe3JldHVybiBNMWUobix0KX1mdW5jdGlvbiBTMWUoKXtyZXR1cm4gWShzRCxuPT5udWxsPT09bj97dGhlbWVPdmVycmlkZTpvYS5CUk9XU0VSX0RFRkFVTFR9Ont0aGVtZU92ZXJyaWRlOm4/b2EuREFSSzpvYS5MSUdIVH0pfXZhciBkXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt7cHJvdmlkZTpnVix1c2VGYWN0b3J5OlpLfSx7cHJvdmlkZTpyRCx1c2VDbGFzczpRSyxtdWx0aTohMH1dLGltcG9ydHM6W0dLLFJyLmZvckZlYXR1cmUob0QsSkssZ1YpLExvLmZvckZlYXR1cmUoW3FLXSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhTMWUpXX0pLG59KSgpLEdEPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W3twcm92aWRlOnl1LHVzZUNsYXNzOlVLfV0saW1wb3J0czpbZF8saV9dfSksbn0pKCksbW89KCgpPT4oZnVuY3Rpb24obil7bi5ERUZBVUxUPSJkZWZhdWx0IixuLkFMUEhBQkVUSUNBTD0iYWxwaGFiZXRpY2FsIixuLkFTQ0VORElORz0iYXNjZW5kaW5nIixuLkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLG4uTkVBUkVTVD0ibmVhcmVzdCIsbi5ORUFSRVNUX1k9Im5lYXJlc3RfWSJ9KG1vfHwobW89e30pKSxtbykpKCksV0Q9Im1ldHJpY3MiLHNhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uT1ZFUlJJREVfQVNfRU5BQkxFRD0xXT0iT1ZFUlJJREVfQVNfRU5BQkxFRCIsbltuLk9WRVJSSURFX0FTX0RJU0FCTEVEPTJdPSJPVkVSUklERV9BU19ESVNBQkxFRCJ9KHNhfHwoc2E9e30pKSxzYSkpKCkscUQ9e2NhcmRNaW5XaWR0aDpudWxsLHRvb2x0aXBTb3J0Om1vLkFMUEhBQkVUSUNBTCxpZ25vcmVPdXRsaWVyczohMCx4QXhpc1R5cGU6WWkuU1RFUCxoaWRlRW1wdHlDYXJkczohMCxzY2FsYXJTbW9vdGhpbmc6LjYsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDohMSxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOjFlMyxpbWFnZUNvbnRyYXN0SW5NaWxsaToxZTMsaW1hZ2VTaG93QWN0dWFsU2l6ZTohMSxoaXN0b2dyYW1Nb2RlOk9yLk9GRlNFVH07ZnVuY3Rpb24gX2Qobix0LGUsaSl7cmV0dXJuIG5bdF0uaGFzT3duUHJvcGVydHkoZSk/VWEodCk/blt0XVtlXS5oYXNPd25Qcm9wZXJ0eShpKT9uW3RdW2VdW2ldOm51bGw6blt0XVtlXTpudWxsfWZ1bmN0aW9uIFlEKG4sdCxlLGkpe2lmKFVhKHQpKXtsZXQgcz17Li4ublt0XX0sYT1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5oYXNPd25Qcm9wZXJ0eSh0KT97Li4ublt0XX06e30sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn0ocyxlLGkpO3JldHVybiBzW2VdPWEsc31sZXQgcj17Li4ublt0XX0sbz1yLmhhc093blByb3BlcnR5KGUpO3JldHVybiByW2VdPW8/ey4uLnJbZV19OntydW5Ub1Nlcmllczp7fSxydW5Ub0xvYWRTdGF0ZTp7fX0scn1mdW5jdGlvbiBfVihuKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobil9ZnVuY3Rpb24gWEQobix0LGUpe2xldCBpPXsuLi5lfTtmb3IobGV0IHIgb2YgdClpW3JdPW47cmV0dXJuIGl9ZnVuY3Rpb24gcF8obix0LGUsaSl7aWYoVWEodCkpe2xldCBvPW5bdF0udGFnUnVuU2FtcGxlZEluZm87cmV0dXJuIG8uaGFzT3duUHJvcGVydHkoZSk/T2JqZWN0LmtleXMob1tlXSkuZmlsdGVyKGE9Pmk8b1tlXVthXS5tYXhTYW1wbGVzUGVyU3RlcCk6W119bGV0IHI9blt0XS50YWdUb1J1bnM7cmV0dXJuIHIuaGFzT3duUHJvcGVydHkoZSk/cltlXTpbXX1mdW5jdGlvbiBBMWUobix0KXtyZXR1cm4gbi5wbHVnaW49PT10LnBsdWdpbiYmbi50YWc9PT10LnRhZyYmbi5zYW1wbGU9PT10LnNhbXBsZSYmKG4ucnVuSWQ9PT10LnJ1bklkfHwhbi5ydW5JZCYmIXQucnVuSWQpfWZ1bmN0aW9uIHZWKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9bmV3IFNldChuKSxjPVtdO2ZvcihsZXQgZCBvZiBuKWZvcihsZXQgcCBvZiB0KWlmKEExZShlW3BdLGQpKXtjLnB1c2gocCksbC5kZWxldGUoZCk7YnJlYWt9aWYoIWMubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkU3RhdGVNYXA6YX07bGV0IHU9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZSxjYXJkU3RhdGVNYXA6YX07Zm9yKGxldCBkIG9mIGMpdT15VihkLHUuY2FyZFRvUGlubmVkQ29weSx1LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSx1LnBpbm5lZENhcmRUb09yaWdpbmFsLHUuY2FyZFN0ZXBJbmRleCx1LmNhcmRNZXRhZGF0YU1hcCxhKTtyZXR1cm57Li4udSx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbLi4ubF19fWZ1bmN0aW9uIHlWKG4sdCxlLGkscixvLHMpe2lmKHQuaGFzKG4pKXJldHVybntjYXJkVG9QaW5uZWRDb3B5OnQsY2FyZFRvUGlubmVkQ29weUNhY2hlOmUscGlubmVkQ2FyZFRvT3JpZ2luYWw6aSxjYXJkU3RlcEluZGV4OnIsY2FyZE1ldGFkYXRhTWFwOm8sY2FyZFN0YXRlTWFwOnN9O2xldCBhPW5ldyBNYXAodCksbD1uZXcgTWFwKGUpLGM9bmV3IE1hcChpKSx1PXsuLi5yfSxkPXsuLi5vfSxwPXsuLi5zfSxoPWZ1bmN0aW9uKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeSh7YmFzZUNhcmRJZDpufSl9KG4pO2Euc2V0KG4saCksbC5zZXQobixoKSxjLnNldChoLG4pLHIuaGFzT3duUHJvcGVydHkobikmJih1W2hdPXJbbl0pO2xldCBmPW9bbl07aWYoIWYpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcGluIGEgY2FyZCB3aXRob3V0IG1ldGFkYXRhIik7cmV0dXJuIGRbaF09ZixwW25dJiYocFtoXT1wW25dKSx7Y2FyZFRvUGlubmVkQ29weTphLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpsLHBpbm5lZENhcmRUb09yaWdpbmFsOmMsY2FyZFN0ZXBJbmRleDp1LGNhcmRNZXRhZGF0YU1hcDpkLGNhcmRTdGF0ZU1hcDpwfX1mdW5jdGlvbiBRRChuKXtyZXR1cm4gbi5waW5uZWRDYXJkVG9PcmlnaW5hbC5zaXplK24udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMubGVuZ3RoPDEwfWZ1bmN0aW9uIGJWKG4sdCxlLGkpe2xldCByPXsuLi5ufTtyZXR1cm4gT2JqZWN0LmtleXMobikuZm9yRWFjaChvPT57aWYoIW8uaW5jbHVkZXMoJyJwbHVnaW4iOiJpbWFnZXMiJykpcmV0dXJuO2xldCBzPXhWKG8sdCxlKSxhPW51bGw7aWYobnVsbD09PWkuZW5kKWE9ZnVuY3Rpb24obix0KXtsZXQgZT10LmluZGV4T2Yobik7aWYoLTEhPT1lKXJldHVybntpbmRleDplLGlzQ2xvc2VzdDohMX07Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dFtpXSxvPXRbaSsxXSxzPS4xKihvLXIpO2lmKG48cilyZXR1cm4gbnVsbDtpZighKG4+bykpe2lmKG4tcjw9cylyZXR1cm57aW5kZXg6aSxpc0Nsb3Nlc3Q6ITB9O2lmKG8tbjw9cylyZXR1cm57aW5kZXg6aSsxLGlzQ2xvc2VzdDohMH19fXJldHVybiBudWxsfShpLnN0YXJ0LnN0ZXAscyk7ZWxzZXtsZXQgYz1zW25bb10uaW5kZXhdLHU9ZnVuY3Rpb24obix0KXtpZighbilyZXR1cm5bXTtpZihudWxsPT09bi5lbmQpcmV0dXJuLTEhPT10LmluZGV4T2Yobi5zdGFydC5zdGVwKT9bbi5zdGFydC5zdGVwXTpbXTtsZXQgZT1bXTtmb3IobGV0IGkgb2YgdClpPj1uLnN0YXJ0LnN0ZXAmJmk8PW4uZW5kLnN0ZXAmJmUucHVzaChpKTtyZXR1cm4gZX0oaSxzKTthPWZ1bmN0aW9uKG4sdCxlKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG51bGw7bGV0IGk9blswXSxyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU+cj97aW5kZXg6dC5pbmRleE9mKHIpLGlzQ2xvc2VzdDohMX06ZTxpP3tpbmRleDp0LmluZGV4T2YoaSksaXNDbG9zZXN0OiExfTpudWxsfSh1LHMsYyl9bnVsbCE9PWEmJihyW29dPWEpfSkscn1mdW5jdGlvbiB4VihuLHQsZSl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuW107bGV0e3BsdWdpbjppLHRhZzpyLHNhbXBsZTpvLHJ1bklkOnN9PXRbbl07aWYobnVsbD09PXMpcmV0dXJuW107bGV0IGE9X2QoZSxpLHIsbyk7cmV0dXJuIG51bGwhPT1hJiZhLnJ1blRvU2VyaWVzLmhhc093blByb3BlcnR5KHMpP2EucnVuVG9TZXJpZXNbc10ubWFwKGw9Pmwuc3RlcCk6W119ZnVuY3Rpb24gQ1Yobil7bGV0e2RhdGFNaW5NYXg6dCx1c2VyVmlld0JveDplfT1uLGk9ZT8ueDtpZighaSlyZXR1cm4gdDtsZXQgcj1pWzBdPGlbMV0/aVswXTppWzFdLG89cj09PWlbMF0/aVsxXTppWzBdO3JldHVybnttaW5TdGVwOk1hdGguY2VpbChyKSxtYXhTdGVwOk1hdGguZmxvb3Iobyl9fWZ1bmN0aW9uIEtEKG4sdCl7c3dpdGNoKG4pe2Nhc2Ugc2EuT1ZFUlJJREVfQVNfRU5BQkxFRDpyZXR1cm4hMDtjYXNlIHNhLk9WRVJSSURFX0FTX0RJU0FCTEVEOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuIHR9fXZhciBYaT1QcihXRCksU0M9WShYaSxuPT5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlKSxyWj1ZKFhpLG49Pm4udGFnTWV0YWRhdGEpLEYxZT1ZKFhpLG49Pm4uY2FyZExpc3QpLE5wPVkoWGksKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0e3BsdWdpbjplLHRhZzppLHJ1bklkOnIsc2FtcGxlOm99PW4uY2FyZE1ldGFkYXRhTWFwW3RdLHM9X2Qobi50aW1lU2VyaWVzRGF0YSxlLGksbyk7aWYoIXMpcmV0dXJuIEVlLk5PVF9MT0FERUQ7bGV0IGE9cy5ydW5Ub0xvYWRTdGF0ZTtpZihyKXJldHVybiBhLmhhc093blByb3BlcnR5KHIpP2Fbcl06RWUuTk9UX0xPQURFRDtsZXQgbD1wXyhuLnRhZ01ldGFkYXRhLGUsaSxvKTtpZighbC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbG9hZCBhIGNhcmQgd2hvc2UgdGFnIGhhcyBubyBydW5zIik7cmV0dXJuIGwuZXZlcnkoYz0+YVtjXT09PUVlLkxPQURFRCk/RWUuTE9BREVEOmwuc29tZShjPT5hW2NdPT09RWUuTE9BRElORyk/RWUuTE9BRElORzpFZS5OT1RfTE9BREVEfSksTHA9WShYaSwobix0KT0+e2lmKCFuLmNhcmRNZXRhZGF0YU1hcC5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gbnVsbDtsZXR7cGx1Z2luOmUsdGFnOmksc2FtcGxlOnJ9PW4uY2FyZE1ldGFkYXRhTWFwW3RdLG89X2Qobi50aW1lU2VyaWVzRGF0YSxlLGkscik7cmV0dXJuIG8/by5ydW5Ub1NlcmllczpudWxsfSksd1Y9WShYaSxuPT5uLmNhcmRNZXRhZGF0YU1hcCksU2w9WSh3Viwobix0KT0+bi5oYXNPd25Qcm9wZXJ0eSh0KT9uW3RdOm51bGwpLG1jPVkoWGksbj0+bi5jYXJkU3RhdGVNYXApLE4xZT1ZKFhpLG49Pm4udmlzaWJsZUNhcmRNYXApLG9aPVkoTjFlLG49Pm5ldyBTZXQobi52YWx1ZXMoKSkpLFpEPVkoRjFlLHdWLChuLHQpPT5uLmZpbHRlcihlPT50Lmhhc093blByb3BlcnR5KGUpKS5tYXAoZT0+KHtjYXJkSWQ6ZSwuLi50W2VdfSkpKSxNVj1ZKFhpLChuLHQpPT5uLmNhcmRTdGVwSW5kZXguaGFzT3duUHJvcGVydHkodCk/bi5jYXJkU3RlcEluZGV4W3RdOm51bGwpLHNaPVkoWGksKG4sdCk9PnhWKHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLGFaPVkoWGksbj0+bi5jYXJkVG9QaW5uZWRDb3B5KSxMMWU9WShYaSxuPT5uLnBpbm5lZENhcmRUb09yaWdpbmFsKSxFQz1ZKGFaLHdWLChuLHQpPT5bLi4ubi52YWx1ZXMoKV0uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLEJwPVkoYVosTDFlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSksbFo9WShYaSxuPT5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzKSxjWj1ZKFhpLG49PlFEKG4pKSxnYz1ZKFhpLG49Pih7Li4ubi5zZXR0aW5ncywuLi5uLnNldHRpbmdPdmVycmlkZXN9KSksdVo9WShYaSxuPT5uLnNldHRpbmdPdmVycmlkZXMpLGhfPVkoZ2Msbj0+bi5jYXJkTWluV2lkdGgpLGZfPVkoZ2Msbj0+bi50b29sdGlwU29ydCksbV89WShnYyxuPT5uLmlnbm9yZU91dGxpZXJzKSxidT1ZKGdjLG49Pm4ueEF4aXNUeXBlKSxKRD1ZKGdjLG49Pm4uaGlzdG9ncmFtTW9kZSksZFo9WShnYyxuPT5uLmhpZGVFbXB0eUNhcmRzKSx2ZD1ZKGdjLG49Pm4uc2NhbGFyU21vb3RoaW5nKSwkRD1ZKGdjLG49Pm4uc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCksZUE9WShnYyxuPT5uLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpLHRBPVkoZ2Msbj0+bi5pbWFnZUNvbnRyYXN0SW5NaWxsaSksbkE9WShnYyxuPT5uLmltYWdlU2hvd0FjdHVhbFNpemUpLF9jPVkoWGksbj0+bi50YWdGaWx0ZXIpLGlBPVkoWGksKG4sdCk9PkJvb2xlYW4obi50YWdHcm91cEV4cGFuZGVkLmdldCh0KSkpLFZwPVkoWGksbj0+bi5saW5rZWRUaW1lRW5hYmxlZCksVEM9WShYaSxuPT5uLnN0ZXBTZWxlY3RvckVuYWJsZWQpLEhwPVkoWGksbj0+bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLFNWPVkoWGksbj0+e2xldHttaW46dCxtYXg6ZX09bi5zdGVwTWluTWF4O3JldHVybnttaW46dD09PTEvMD8wOnQsbWF4OmU9PT0tMS8wPzFlMzplfX0pLGdfPVkoWGksbj0+bi5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzKSxfXz1ZKFhpLG49Pm4ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzKSxFVj1ZKFhpLFNWLChuLHQpPT5uLmxpbmtlZFRpbWVTZWxlY3Rpb24/bi5saW5rZWRUaW1lU2VsZWN0aW9uOntzdGFydDp7c3RlcDp0Lm1pbn0sZW5kOm51bGx9KSxVcD1ZKFhpLEVWLChuLHQpPT5uLmxpbmtlZFRpbWVFbmFibGVkP3Q6bnVsbCkseHU9WShYaSxuPT5uLmZpbHRlcmVkUGx1Z2luVHlwZXMpLHJBPVkoWGksbj0+bi5pc1NldHRpbmdzUGFuZU9wZW4pLG9BPVkoWGksbj0+bi5pc1NsaWRlb3V0TWVudU9wZW4pLHBaPVkoWGksbj0+bi50YWJsZUVkaXRvclNlbGVjdGVkVGFiKSxoWj1ZKEhwLFZwLG1jLChuLHQsZSxpKT0+dD9uOktEKGVbaV0/LnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsbikpLGZaPVkobWMsKG4sdCk9PntpZihuW3RdKXJldHVybiBDVihuW3RdKX0pLG1aPVkobWMsKG4sdCk9Pm5bdF0/LmRhdGFNaW5NYXgpLGdaPVkobWMsVEMsSHAsVnAsVXAsKG4sdCxlLGkscixvKT0+e2xldCBzPW5bb107aWYoIXMpcmV0dXJuO2xldCBhPUNWKHMpO2lmKCFhKXJldHVybjtpZihpJiZyKXJldHVybiBjVihyLGEsZSk7aWYoIUtEKHMuc3RlcFNlbGVjdGlvbk92ZXJyaWRlLHQpKXJldHVybjtsZXQgbD1LRChzLnJhbmdlU2VsZWN0aW9uT3ZlcnJpZGUsZSk7cmV0dXJuIGNWKHtzdGFydDp7c3RlcDpzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA/P2EubWluU3RlcH0sZW5kOntzdGVwOnMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwPz9hLm1heFN0ZXB9fSxhLGwpfSksdlo9UHIoIm5vdGlmaWNhdGlvbiIpLEN1PShZKHZaLG49Pm4ubm90aWZpY2F0aW9ucyksWSh2WixuPT5uLmxhc3RSZWFkVGltZXN0YW1wSW5Ncz8/LTEpLCgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWFBFUklNRU5UX05BTUU9MF09IkVYUEVSSU1FTlRfTkFNRSIsbltuLkhQQVJBTT0xXT0iSFBBUkFNIixuW24uTUVUUklDPTJdPSJNRVRSSUMiLG5bbi5SVU5fTkFNRT0zXT0iUlVOX05BTUUifShDdXx8KEN1PXt9KSksQ3UpKSgpKSxlcj0oKCk9PihmdW5jdGlvbihuKXtuW24uUlVOPTBdPSJSVU4iLG5bbi5FWFBFUklNRU5UPTFdPSJFWFBFUklNRU5UIixuW24uUkVHRVg9Ml09IlJFR0VYIn0oZXJ8fChlcj17fSkpLGVyKSkoKTtmdW5jdGlvbiBBQyhuLHQsZSl7bGV0IGk9e30scj1bXSxvPXttYXRjaGVzOmksbm9uTWF0Y2hlczpyfTtzd2l0Y2gobi5rZXkpe2Nhc2UgZXIuUlVOOmZvcihsZXQgYSBvZiB0KWlbYS5pZF09W2FdO2JyZWFrO2Nhc2UgZXIuRVhQRVJJTUVOVDpmb3IobGV0IGEgb2YgdCl7bGV0IGw9ZVthLmlkXSxjPWlbbF18fFtdO2MucHVzaChhKSxpW2xdPWN9YnJlYWs7Y2FzZSBlci5SRUdFWDppZighbi5yZWdleFN0cmluZylicmVhaztsZXQgczt0cnl7cz1uZXcgUmVnRXhwKG4ucmVnZXhTdHJpbmcpfWNhdGNoe2JyZWFrfWZvcihsZXQgYSBvZiB0KXtsZXQgbD1hLm5hbWUubWF0Y2gocyk7aWYobCl7bGV0IHU9bC5sZW5ndGg+MT9KU09OLnN0cmluZ2lmeShsLnNsaWNlKDEpKToicHNldWRvX2dyb3VwIixkPWlbdV18fFtdO2QucHVzaChhKSxpW3VdPWR9ZWxzZSByLnB1c2goYSl9fXJldHVybiBvfWZ1bmN0aW9uIGFBKG4sdCl7cmV0dXJuIG49PT1lci5SRUdFWD97a2V5Om4scmVnZXhTdHJpbmc6dD8/IiJ9OntrZXk6bn19dmFyIHlaPVByKCJydW5zIiksamE9WSh5WixuPT5uLmRhdGEpLGJaPVkoamEsbj0+bi5ydW5JZFRvRXhwSWQpLGxBPVkoamEsKG4sdCk9Pm4ucnVuSWRUb0V4cElkW3QucnVuSWRdPz9udWxsKSxjQT1ZKGphLChuLHQpPT5uLnJ1bk1ldGFkYXRhW3QucnVuSWRdPz9udWxsKSx3dT1ZKGphLChuLHQpPT4obi5ydW5JZHNbdC5leHBlcmltZW50SWRdfHxbXSkuZmlsdGVyKGk9PkJvb2xlYW4obi5ydW5NZXRhZGF0YVtpXSkpLm1hcChpPT5uLnJ1bk1ldGFkYXRhW2ldKSkseFo9WShqYSwobix0KT0+bi5ydW5JZHNbdC5leHBlcmltZW50SWRdPz9bXSksQ1o9WShqYSxuPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKG4ucnVuTWV0YWRhdGEpKSksSUM9WShqYSwobix0KT0+bi5ydW5zTG9hZFN0YXRlW3QuZXhwZXJpbWVudElkXXx8e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOkVlLk5PVF9MT0FERUR9KSxUVj1ZKGphLG49Pm51bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5P2FBKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpLHdaPVkoVFYsamEsKG4sdCk9Pm4/P3QuaW5pdGlhbEdyb3VwQnkpLEpmPVkoamEsbj0+bi5yZWdleEZpbHRlciksRFY9WSh5WixuPT5uLnVpKSxBVj1ZKERWLG49Pm4ucGFnaW5hdGlvbk9wdGlvbiksSVY9WShEVixuPT5uLnNvcnQpLE1aPVkoRFYsbj0+bi5zZWxlY3Rpb25TdGF0ZSksU1o9WShqYSxuPT5uLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KSxFWj1ZKGphLG49Pm4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSx1QT1ZKGphLG49Pm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSxkQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgRW5hYmxlIFRvZ2dsZWQiKSxwQT13ZSgiW1NldHRpbmdzXSBSZWxvYWQgUGVyaW9kIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGhBPXdlKCJbU2V0dGluZ3NdIFBhZ2UgU2l6ZSBDaGFuZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhYT17fTtTTyhhYSx7Z2V0Q29sb3JQYWxldHRlOigpPT5CMWUsZ2V0UGFnZVNpemU6KCk9PiRmLGdldFJlbG9hZEVuYWJsZWQ6KCk9PlJDLGdldFJlbG9hZFBlcmlvZEluTXM6KCk9Pk9DLGdldFNldHRpbmdzTG9hZFN0YXRlOigpPT5QVn0pO3ZhciBmQT0ic2V0dGluZ3MiLEFaPXtzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LFBDPVByKGZBKSxQVj1ZKFBDLG49Pm4uc3RhdGUpLFJDPVkoUEMsbj0+bi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkKSxPQz1ZKFBDLG49Pm4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcyksJGY9WShQQyxuPT5uLnNldHRpbmdzLnBhZ2VTaXplKSxCMWU9WShQQyxuPT5uLnNldHRpbmdzLmNvbG9yUGFsZXR0ZSk7ZnVuY3Rpb24gbUEobix0LGUpe2lmKCF0KXJldHVybiEwO2xldCBpO3RyeXtpPW5ldyBSZWdFeHAodCwiaSIpfWNhdGNoe3JldHVybiExfWxldCByPVtuLnJ1bk5hbWVdO3JldHVybiBlJiZyLnB1c2gobi5leHBlcmltZW50QWxpYXMuYWxpYXNUZXh0LGAke24uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dH0vJHtuLnJ1bk5hbWV9YCksci5zb21lKG89PmkudGVzdChvKSl9dmFyIFYxZT1ZKCRvLE1aLGJaLChuLHQsZSk9PntpZighbilyZXR1cm4gbmV3IE1hcDtsZXQgaT1uZXcgTWFwO2ZvcihsZXRbcixvXW9mIHQuZW50cmllcygpKXtsZXQgcz1lW3JdO3MmJm4uaW5kZXhPZihzKT49MCYmaS5zZXQocixvKX1yZXR1cm4gaX0pLGVtPVkoJG8sVjFlLEpmLG49PntsZXQgdD0kbyhuKT8/W10sZT1odShuKSxpPW5ldyBNYXA7Zm9yKGxldCByIG9mIHQpe2xldCBvPXd1KG4se2V4cGVyaW1lbnRJZDpyfSk7Zm9yKGxldCBzIG9mIG8paS5zZXQocy5pZCx7cnVuTmFtZTpzLm5hbWUsZXhwZXJpbWVudEFsaWFzOmVbcl19KX1yZXR1cm4gaX0scHUsKG4sdCxlLGkscik9PntpZighbilyZXR1cm4gbnVsbDtsZXQgbz1yPT09ZmkuQ09NUEFSRV9FWFBFUklNRU5ULHM9bmV3IE1hcDtmb3IobGV0W2EsbF1vZiB0LmVudHJpZXMoKSl7bGV0IGM9aS5nZXQoYSk7cy5zZXQoYSxtQShjLGUsbykmJmwpfXJldHVybiBzfSksdl89WShhYS5nZXRDb2xvclBhbGV0dGUsRVosU1osbXUsKG4sdCxlLGkpPT57bGV0IHI9e307cmV0dXJuIHQuZm9yRWFjaCgobyxzKT0+e2xldCBhPWk/bi5pbmFjdGl2ZS5kYXJrSGV4Om4uaW5hY3RpdmUubGlnaHRIZXg7aWYoZS5oYXMocykpYT1lLmdldChzKTtlbHNlIGlmKG8+PTApe2xldCBsPW4uY29sb3JzW28lbi5jb2xvcnMubGVuZ3RoXTthPWk/bC5kYXJrSGV4OmwubGlnaHRIZXh9cltzXT1hfSkscn0pLElaPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5ydW5zRGF0YVNvdXJjZT1yLHRoaXMubG9hZFJ1bnNPblJ1blRhYmxlU2hvd24kPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoVGkoQUQpLF9uKCh7ZXhwZXJpbWVudElkczpvfSk9PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8sYT0+YT09PUVlLkZBSUxFRHx8YT09PUVlLk5PVF9MT0FERUQpLnBpcGUoSGUoYT0+ISFhLmxlbmd0aCksX24oYT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8sYSkpKSkpLHtkaXNwYXRjaDohMX0pLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHhsKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChyYSkpLGRpKChbLG9dLFssc10pPT51cyhvLHMpKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG9dKT0+ISFvKSxCKChbLG9dKT0+byksX24obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zPT09RWUuRkFJTEVEfHxzPT09RWUuTk9UX0xPQURFRCkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkPXRoaXMuYWN0aW9ucyQucGlwZShUaShIYSx3bCksR3QodGhpcy5zdG9yZS5zZWxlY3QoJG8pKSxIZSgoWyxvXSk9PiEhbyksQigoWyxvXSk9Pm8pLF9uKG89PnRoaXMuZ2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKG8scz0+cyE9PUVlLkxPQURJTkcpLnBpcGUoQihzPT4oe2V4cGVyaW1lbnRJZHM6byxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6c30pKSkpKSx0aGlzLmxvYWRSdW5zT25OYXZpZ2F0aW9uT3JSZWxvYWQkPVVyKCgpPT51bih0aGlzLmV4cGVyaW1lbnRzV2l0aFN0YWxlUnVuc09uUm91dGVDaGFuZ2UkLHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25SZWxvYWQkKS5waXBlKF9uKCh7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSk9PnRoaXMuZmV0Y2hBbGxSdW5zTGlzdChvLHMpKSkse2Rpc3BhdGNoOiExfSl9Z2V0UnVuc0xpc3RMb2FkU3RhdGUoZSl7cmV0dXJuIHRoaXMuc3RvcmUuc2VsZWN0KElDLHtleHBlcmltZW50SWQ6ZX0pLnBpcGUoSHQoMSkpfWdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZShlLGkpe3JldHVybiB4byhlLm1hcChyPT50aGlzLmdldFJ1bnNMaXN0TG9hZFN0YXRlKHIpKSkucGlwZShCKHI9PmUuZmlsdGVyKChvLHMpPT5pKHJbc10uc3RhdGUpKSkpfWZldGNoQWxsUnVuc0xpc3QoZSxpKXtyZXR1cm4ganQoe2V4cGVyaW1lbnRJZHM6ZSxleHBlcmltZW50SWRzVG9CZUZldGNoZWQ6aX0pLnBpcGUoTnQoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENEKHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpfSksX24oKCk9PntsZXQgcj1uZXcgU2V0KGkpO3JldHVybiB4byhlLm1hcChzPT5yLmhhcyhzKT90aGlzLmZldGNoUnVuc0ZvckV4cGVyaW1lbnQocyk6dGhpcy5tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhzKSkpfSksQihyPT57bGV0IG89e30scz1bXTtmb3IobGV0IGEgb2YgcilzLnB1c2goLi4uYS5ydW5zKSxhLmZyb21SZW1vdGUmJihvW2EuZXhwZXJpbWVudElkXT17cnVuczphLnJ1bnMsbWV0YWRhdGE6YS5tZXRhZGF0YX0pO3JldHVybntuZXdSdW5zQW5kTWV0YWRhdGE6byxydW5zRm9yQWxsRXhwZXJpbWVudHM6c319KSxOdCgoe25ld1J1bnNBbmRNZXRhZGF0YTpyLHJ1bnNGb3JBbGxFeHBlcmltZW50czpvfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKE9wKHtleHBlcmltZW50SWRzOmUsbmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KSl9KSxDbyhyPT4odGhpcy5zdG9yZS5kaXNwYXRjaChhXyh7ZXhwZXJpbWVudElkczplLHJlcXVlc3RlZEV4cGVyaW1lbnRJZHM6aX0pKSxqdChudWxsKSkpLEIoKCk9Pm51bGwpKX1tYXliZVdhaXRGb3JSdW5zQW5kR2V0UnVucyhlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoSUMse2V4cGVyaW1lbnRJZDplfSkucGlwZShIZShpPT5pLnN0YXRlIT09RWUuTE9BRElORyksSHQoMSksX24oaT0+aS5zdGF0ZT09PUVlLkZBSUxFRD9HbChuZXcgRXJyb3IoIlBlbmRpbmcgcmVxdWVzdCBmYWlsZWQiKSk6anQoaSkpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KHd1LHtleHBlcmltZW50SWQ6ZX0pKSxCKChbLGldKT0+KHtmcm9tUmVtb3RlOiExLGV4cGVyaW1lbnRJZDplLHJ1bnM6aX0pKSl9ZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChlKXtyZXR1cm4geG8oW3RoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hSdW5zKGUpLHRoaXMucnVuc0RhdGFTb3VyY2UuZmV0Y2hIcGFyYW1zTWV0YWRhdGEoZSldKS5waXBlKEIoKFtpLHJdKT0+KHtmcm9tUmVtb3RlOiEwLGV4cGVyaW1lbnRJZDplLHJ1bnM6aSxtZXRhZGF0YTpyfSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihJRCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEVsPSgoKT0+KGZ1bmN0aW9uKG4pe24uQVNDPSJhc2MiLG4uREVTQz0iZGVzYyIsbi5VTlNFVD0iIn0oRWx8fChFbD17fSkpLEVsKSkoKSx7aW5pdGlhbFN0YXRlOkgxZSxyZWR1Y2VyczpVMWV9PVlmKHtydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTpuZXcgTWFwLGdyb3VwS2V5VG9Db2xvcklkOm5ldyBNYXAsaW5pdGlhbEdyb3VwQnk6e2tleTplci5SVU59LHVzZXJTZXRHcm91cEJ5S2V5Om51bGwsY29sb3JHcm91cFJlZ2V4U3RyaW5nOiIiLHJlZ2V4RmlsdGVyOiIifSx7cnVuSWRzOnt9LHJ1bklkVG9FeHBJZDp7fSxydW5NZXRhZGF0YTp7fSxydW5zTG9hZFN0YXRlOnt9fSwobix0LGUpPT51cyh0LGUpP246ey4uLm4saW5pdGlhbEdyb3VwQnk6e2tleTplLnJvdXRlS2luZD09PWZpLkNPTVBBUkVfRVhQRVJJTUVOVD9lci5FWFBFUklNRU5UOmVyLlJVTn19KSx6MWU9d3IoSDFlLFNlKEswLChuLHtyb3V0ZUtpbmQ6dCxwYXJ0aWFsU3RhdGU6ZX0pPT57aWYodCE9PWZpLkNPTVBBUkVfRVhQRVJJTUVOVCYmdCE9PWZpLkVYUEVSSU1FTlQpcmV0dXJuIG47bGV0IHI9ZS5ydW5zLmdyb3VwQnksbz1lLnJ1bnMucmVnZXhGaWx0ZXI/PyIiO2lmKCFyJiYhbylyZXR1cm4gbjtsZXR7Y29sb3JHcm91cFJlZ2V4U3RyaW5nOnMsdXNlclNldEdyb3VwQnlLZXk6YX09bjtyZXR1cm4gciYmKHM9ci5rZXk9PT1lci5SRUdFWD9yLnJlZ2V4U3RyaW5nOm4uY29sb3JHcm91cFJlZ2V4U3RyaW5nLGE9ci5rZXk/P251bGwpLHsuLi5uLGNvbG9yR3JvdXBSZWdleFN0cmluZzpzLHJlZ2V4RmlsdGVyOm8sdXNlclNldEdyb3VwQnlLZXk6YX19KSxTZShDRCwobix0KT0+e2xldCBlPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgaSBvZiB0LnJlcXVlc3RlZEV4cGVyaW1lbnRJZHMpZVtpXT1lW2ldP3suLi5lW2ldLHN0YXRlOkVlLkxPQURJTkd9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpFZS5MT0FESU5HfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5JZHN9LGk9ey4uLm4ucnVuTWV0YWRhdGF9LHI9ey4uLm4ucnVuSWRUb0V4cElkfSxvPXsuLi5uLnJ1bnNMb2FkU3RhdGV9O2ZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldHtydW5zOmEsbWV0YWRhdGE6bH09dC5uZXdSdW5zQW5kTWV0YWRhdGFbc107ZVtzXT1hLm1hcCgoe2lkOmN9KT0+Yyksb1tzXT17Li4ub1tzXSxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKSxzdGF0ZTpFZS5MT0FERUR9O2ZvcihsZXQgYyBvZiBhKXtsZXQgdT1sLnJ1blRvSHBhcmFtc0FuZE1ldHJpY3NbYy5pZF07aVtjLmlkXT17Li4uYyxocGFyYW1zOnU/dS5ocGFyYW1zOm51bGwsbWV0cmljczp1P3UubWV0cmljczpudWxsfSxyW2MuaWRdPXN9fXJldHVybnsuLi5uLHJ1bklkczplLHJ1bklkVG9FeHBJZDpyLHJ1bk1ldGFkYXRhOmkscnVuc0xvYWRTdGF0ZTpvfX0pLFNlKGFfLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6RWUuRkFJTEVEfTp7bGFzdExvYWRlZFRpbWVJbk1zOm51bGwsc3RhdGU6RWUuRkFJTEVEfTtyZXR1cm57Li4ubixydW5zTG9hZFN0YXRlOmV9fSksU2UoT3AsKG4se3J1bnNGb3JBbGxFeHBlcmltZW50czp0fSk9PntsZXQgZT1uZXcgTWFwKG4uZ3JvdXBLZXlUb0NvbG9ySWQpLGk9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscj1uLmluaXRpYWxHcm91cEJ5O251bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5JiYocj1hQShuLnVzZXJTZXRHcm91cEJ5S2V5LG4uY29sb3JHcm91cFJlZ2V4U3RyaW5nKSk7bGV0IG89QUMocix0LG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhvLm1hdGNoZXMpLmZvckVhY2goKFtzLGFdKT0+e2xldCBsPWUuZ2V0KHMpPz9lLnNpemU7ZS5zZXQocyxsKTtmb3IobGV0IGMgb2YgYSlpLnNldChjLmlkLGwpfSk7Zm9yKGxldCBzIG9mIG8ubm9uTWF0Y2hlcylpLnNldChzLmlkLC0xKTtyZXR1cm57Li4ubixkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6aSxncm91cEtleVRvQ29sb3JJZDplfX0pLFNlKGxfLChuLHtleHBlcmltZW50SWRzOnQsZ3JvdXBCeTplfSk9PntsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcChuLmRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeSkscz1BQyhlLHQuZmxhdE1hcChsPT5uLnJ1bklkc1tsXSkubWFwKGw9Pm4ucnVuTWV0YWRhdGFbbF0pLG4ucnVuSWRUb0V4cElkKTtPYmplY3QuZW50cmllcyhzLm1hdGNoZXMpLmZvckVhY2goKFtsLGNdKT0+e2xldCB1PWkuZ2V0KGwpPz9pLnNpemU7aS5zZXQobCx1KTtmb3IobGV0IGQgb2YgYylyLnNldChkLmlkLHUpfSk7Zm9yKGxldCBsIG9mIHMubm9uTWF0Y2hlcylyLnNldChsLmlkLC0xKTtsZXQgYT1lLmtleT09PWVyLlJFR0VYP2UucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmc7cmV0dXJuey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOmEsdXNlclNldEdyb3VwQnlLZXk6ZS5rZXksZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5OnIsZ3JvdXBLZXlUb0NvbG9ySWQ6aSxydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTpuZXcgTWFwfX0pLFNlKERELChuLHtydW5JZDp0LG5ld0NvbG9yOmV9KT0+e2xldCBpPW5ldyBNYXAobi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSk7cmV0dXJuIGkuc2V0KHQsZSksey4uLm4scnVuQ29sb3JPdmVycmlkZUZvckdyb3VwQnk6aX19KSxTZShiQywobix0KT0+KHsuLi5uLHJlZ2V4RmlsdGVyOnQucmVnZXhTdHJpbmd9KSkpLGoxZT1YZih6MWUsVTFlKSxHMWU9e2tleTpudWxsLGRpcmVjdGlvbjpFbC5VTlNFVH0se2luaXRpYWxTdGF0ZTpXMWUscmVkdWNlcnM6cTFlfT1ZZih7cGFnaW5hdGlvbk9wdGlvbjp7cGFnZUluZGV4OjAscGFnZVNpemU6MTB9LHNvcnQ6RzFlLHNlbGVjdGlvblN0YXRlOm5ldyBNYXB9LHt9KSxZMWU9d3IoVzFlLFNlKEVELChuLHtwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfSk9Pih7Li4ubixwYWdpbmF0aW9uT3B0aW9uOntwYWdlU2l6ZTp0LHBhZ2VJbmRleDplfX0pKSxTZShiQywobix0KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246ey4uLm4ucGFnaW5hdGlvbk9wdGlvbixwYWdlSW5kZXg6MH19KSksU2UoVEQsKG4sdCk9Pih7Li4ubixzb3J0OntrZXk6dC5rZXksZGlyZWN0aW9uOnQuZGlyZWN0aW9ufX0pKSxTZShPcCwobix0KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT10LnJ1bnNGb3JBbGxFeHBlcmltZW50cy5sZW5ndGg8PTUwMDtmb3IobGV0IHIgb2YgdC5ydW5zRm9yQWxsRXhwZXJpbWVudHMpZS5oYXMoci5pZCl8fGUuc2V0KHIuaWQsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZSh3RCwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKTtyZXR1cm4gZS5zZXQodCwhQm9vbGVhbihlLmdldCh0KSkpLHsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoTUQsKG4se3J1bklkOnR9KT0+e2xldCBlPW5ldyBNYXA7Zm9yKGxldCBpIG9mIG4uc2VsZWN0aW9uU3RhdGUua2V5cygpKWUuc2V0KGksdD09PWkpO3JldHVybnsuLi5uLHNlbGVjdGlvblN0YXRlOmV9fSksU2UoU0QsKG4se3J1bklkczp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpLGk9IXQuZXZlcnkocj0+Qm9vbGVhbihlLmdldChyKSkpO2ZvcihsZXQgciBvZiB0KWUuc2V0KHIsaSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSksWDFlPVhmKFkxZSxxMWUpO2Z1bmN0aW9uIFBaKG4sdCl7cmV0dXJuIEhmKHtkYXRhOmoxZSx1aTpYMWV9KShuLHQpfWZ1bmN0aW9uIFExZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjphXyxhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgZ0E9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JyLmZvckZlYXR1cmUoInJ1bnMiLFBaKSxMby5mb3JGZWF0dXJlKFtJWl0pLFBLLHZ1LnJlZ2lzdGVyQWxlcnRBY3Rpb25zKFExZSksT0RdfSksbn0pKCkseWQ9KCgpPT4oZnVuY3Rpb24obil7bi5SVU5TX0NIQU5HRUQ9ImV4cGVyaW1lbnRhbC5SdW5zQ2hhbmdlZCIsbi5HRVRfUlVOUz0iZXhwZXJpbWVudGFsLkdldFJ1bnMiLG4uR0VUX1VSTF9EQVRBPSJleHBlcmltZW50YWwuR2V0VVJMUGx1Z2luRGF0YSIsbi5EQVRBX1JFTE9BREVEPSJleHBlcmltZW50YWwuRGF0YVJlbG9hZGVkIn0oeWR8fCh5ZD17fSkpLHlkKSkoKSxPWj1uZXcgV2Vha01hcCx5Xz1uZXcgU2V0LFJWPW5ldyBNYXAsdkE9bmV3IE1hcDtmdW5jdGlvbiBrWihuLHQpe3JldHVybiBlPT57bGV0IGk9dkEuZ2V0KHQpLHI9T1ouZ2V0KGkpfHxudWxsO3JldHVybiBuKHIsZSl9fXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuPT57aWYoImV4cGVyaW1lbnRhbC5ib290c3RyYXAiIT09bi5kYXRhKXJldHVybjtsZXQgdD1uLnBvcnRzWzBdO2lmKCF0KXJldHVybjtsZXQgZT1uLnNvdXJjZT9uLnNvdXJjZS5mcmFtZUVsZW1lbnQ6bnVsbDshZXx8ZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wb3J0PXQsdGhpcy5pZD0wLHRoaXMucmVzcG9uc2VXYWl0cz1uZXcgTWFwLHRoaXMubGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5wb3J0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGU9PnRoaXMub25NZXNzYWdlKGUpKX1saXN0ZW4odCxlKXt0aGlzLmxpc3RlbmVycy5zZXQodCxlKX11bmxpc3Rlbih0KXt0aGlzLmxpc3RlbmVycy5kZWxldGUodCl9YXN5bmMgb25NZXNzYWdlKHQpe2xldCBlPUpTT04ucGFyc2UodC5kYXRhKSxpPWUudHlwZSxyPWUuaWQsbz1lLnBheWxvYWQscz1lLmVycm9yO2lmKGUuaXNSZXBseSl7aWYoIXRoaXMucmVzcG9uc2VXYWl0cy5oYXMocikpcmV0dXJuO2xldHtyZXNvbHZlOmQscmVqZWN0OnB9PXRoaXMucmVzcG9uc2VXYWl0cy5nZXQocik7cmV0dXJuIHRoaXMucmVzcG9uc2VXYWl0cy5kZWxldGUociksdm9pZChzP3AobmV3IEVycm9yKHMpKTpkKG8pKX1sZXQgbD1udWxsLGM9bnVsbDtpZih0aGlzLmxpc3RlbmVycy5oYXMoaSkpe2xldCBkPXRoaXMubGlzdGVuZXJzLmdldChpKTt0cnl7bD1hd2FpdCBkKG8pfWNhdGNoKHApe2M9cH19dGhpcy5wb3N0TWVzc2FnZSh7dHlwZTppLGlkOnIscGF5bG9hZDpsLGVycm9yOmMsaXNSZXBseTohMH0pfXBvc3RNZXNzYWdlKHQpe3RoaXMucG9ydC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0KSl9c2VuZE1lc3NhZ2UodCxlKXtsZXQgaT10aGlzLmlkKys7cmV0dXJuIHRoaXMucG9zdE1lc3NhZ2Uoe3R5cGU6dCxpZDppLHBheWxvYWQ6ZSxlcnJvcjpudWxsLGlzUmVwbHk6ITF9KSxuZXcgUHJvbWlzZSgobyxzKT0+e3RoaXMucmVzcG9uc2VXYWl0cy5zZXQoaSx7cmVzb2x2ZTpvLHJlamVjdDpzfSl9KX19KG4pO3lfLmFkZChlKSx2QS5zZXQoZSx0KSxuLnN0YXJ0KCk7Zm9yKGxldFtpLHJdb2YgUlYpe2xldCBvPWtaKHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIga1YsYl89KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgeV8pdkEuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoeV8uZGVsZXRlKGkpLHZBLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLnlfXS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7UlYuc2V0KG4sdCk7Zm9yKGxldCBlIG9mIHlfKXtsZXQgaT1rWih0LGUpO2UubGlzdGVuKG4saSl9fShlLGkpfXVubGlzdGVuKGUpeyFmdW5jdGlvbihuKXtSVi5kZWxldGUobik7Zm9yKGxldCB0IG9mIHlfKXQudW5saXN0ZW4obil9KGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx5QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXN0b3JhZ2UiKTt0aGlzLmlwYy5saXN0ZW4oeWQuR0VUX1VSTF9EQVRBLGk9PntpZighaSlyZXR1cm47bGV0IHI9YHAuJHtpLnBsdWdpbk5hbWV9LmAsbz17fSxzPWUudGZfc3RvcmFnZS5nZXRVcmxIYXNoRGljdCgpO2ZvcihsZXQgYSBpbiBzKWEuc3RhcnRzV2l0aChyKSYmKG9bYS5zdWJzdHJpbmcoci5sZW5ndGgpXT1zW2FdKTtyZXR1cm4gb30pLHRoaXMuc3RvcmUuc2VsZWN0KG9fKS5waXBlKEhlKGk9Pm51bGwhPT1pKSxkaSgpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmlwYy5icm9hZGNhc3QoeWQuREFUQV9SRUxPQURFRCx2b2lkIDApfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pcGM9ZSx0aGlzLnN0b3JlPWl9aW5pdCgpe2xldCBlPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKF9uKGk9Pmk/cG4oaS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3Qod3Use2V4cGVyaW1lbnRJZDpvfSkpKS5waXBlKEIobz0+by5mbGF0KCkpLGRpKChvLHMpPT5vLmxlbmd0aD09PXMubGVuZ3RoJiZvLmV2ZXJ5KChhLGwpPT5zW2xdLmlkPT09YS5pZCkpLEIobz0+by5tYXAoKHtuYW1lOnN9KT0+cykpKTpqdChbXSkpKTtlLnN1YnNjcmliZShpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHlkLlJVTlNfQ0hBTkdFRCxpKX0pLHRoaXMuaXBjLmxpc3Rlbih5ZC5HRVRfUlVOUywoKT0+ZS5waXBlKEh0KDEpKS50b1Byb21pc2UoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYl8pLFIoUGUpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx4QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7aS5pbml0KCksZS5pbml0KCl9cmVnaXN0ZXJQbHVnaW5JZnJhbWUoZSxpKXshZnVuY3Rpb24obix0KXtPWi5zZXQobix7cGx1Z2luTmFtZTp0fSl9KGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoYkEpLFIoeUEpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltiXyx5QSxiQV0saW1wb3J0czpbJDAsTWwsZ0FdfSksbn0pKCkseF89d2UoIltBbGVydF0gQWxlcnQgUmVwb3J0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxMWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuYWxlcnRBY3Rpb25Nb2R1bGU9cix0aGlzLnJlcG9ydFJlZ2lzdGVyZWRBY3Rpb25BbGVydHMkPVVyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoTnQobz0+e2xldCBzPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKG8pO3MmJnRoaXMuc3RvcmUuZGlzcGF0Y2goeF8ocykpfSkpLHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGNzKSxSKFBlKSxSKHZ1KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksb1RlPXdyKHtsYXRlc3RBbGVydDpudWxsfSxTZSh4Xywobix7bG9jYWxpemVkTWVzc2FnZTp0LGZvbGxvd3VwQWN0aW9uOmV9KT0+e2xldCBpPXtsb2NhbGl6ZWRNZXNzYWdlOnQsY3JlYXRlZDpEYXRlLm5vdygpfTtyZXR1cm4gZSYmKGkuZm9sbG93dXBBY3Rpb249ZSksey4uLm4sbGF0ZXN0QWxlcnQ6aX19KSk7ZnVuY3Rpb24gQloobix0KXtyZXR1cm4gb1RlKG4sdCl9dHJ5e2tWPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9Y2F0Y2h7a1Y9ITF9dmFyIENfLEZDLENBLHRtLE9WLHVpPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fcGxhdGZvcm1JZD1lLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/cFQodGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYha1YpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaWQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxWWj1bImNvbG9yIiwiYnV0dG9uIiwiY2hlY2tib3giLCJkYXRlIiwiZGF0ZXRpbWUtbG9jYWwiLCJlbWFpbCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsIm1vbnRoIiwibnVtYmVyIiwicGFzc3dvcmQiLCJyYWRpbyIsInJhbmdlIiwicmVzZXQiLCJzZWFyY2giLCJzdWJtaXQiLCJ0ZWwiLCJ0ZXh0IiwidGltZSIsInVybCIsIndlZWsiXTtmdW5jdGlvbiBGVigpe2lmKENfKXJldHVybiBDXztpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIENfPW5ldyBTZXQoVlopO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIENfPW5ldyBTZXQoVlouZmlsdGVyKHQ9PihuLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbi50eXBlPT09dCkpKX1mdW5jdGlvbiBOcyhuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZihudWxsPT1GQyYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+RkM9ITB9KSl9ZmluYWxseXtGQz1GQ3x8ITF9cmV0dXJuIEZDfSgpP246ISFuLmNhcHR1cmV9ZnVuY3Rpb24gd0EoKXtpZihudWxsPT10bSl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxlbWVudHx8IUVsZW1lbnQpcmV0dXJuIHRtPSExO2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpdG09ITA7ZWxzZXtsZXQgbj1FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxUbzt0bT0hIW4mJiEvXHtccypcW25hdGl2ZSBjb2RlXF1ccypcfS8udGVzdChuLnRvU3RyaW5nKCkpfX1yZXR1cm4gdG19ZnVuY3Rpb24gd18oKXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIDA7aWYobnVsbD09Q0Epe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9bi5zdHlsZTtuLmRpcj0icnRsIix0LndpZHRoPSIxcHgiLHQub3ZlcmZsb3c9ImF1dG8iLHQudmlzaWJpbGl0eT0iaGlkZGVuIix0LnBvaW50ZXJFdmVudHM9Im5vbmUiLHQucG9zaXRpb249ImFic29sdXRlIjtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxpPWUuc3R5bGU7aS53aWR0aD0iMnB4IixpLmhlaWdodD0iMXB4IixuLmFwcGVuZENoaWxkKGUpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobiksQ0E9MCwwPT09bi5zY3JvbGxMZWZ0JiYobi5zY3JvbGxMZWZ0PTEsQ0E9MD09PW4uc2Nyb2xsTGVmdD8xOjIpLG4ucmVtb3ZlKCl9cmV0dXJuIENBfWZ1bmN0aW9uIE1BKG4pe2lmKGZ1bmN0aW9uKCl7aWYobnVsbD09T1Ype2xldCBuPXR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO09WPSEoIW58fCFuLmNyZWF0ZVNoYWRvd1Jvb3QmJiFuLmF0dGFjaFNoYWRvdyl9cmV0dXJuIE9WfSgpKXtsZXQgdD1uLmdldFJvb3ROb2RlP24uZ2V0Um9vdE5vZGUoKTpudWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hhZG93Um9vdCYmdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIHR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTkMoKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGw7Zm9yKDtuJiZuLnNoYWRvd1Jvb3Q7KXtsZXQgdD1uLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudDtpZih0PT09bilicmVhaztuPXR9cmV0dXJuIG59ZnVuY3Rpb24gdmMobil7cmV0dXJuIG4uY29tcG9zZWRQYXRoP24uY29tcG9zZWRQYXRoKClbMF06bi50YXJnZXR9ZnVuY3Rpb24gTEMoKXtyZXR1cm4gdHlwZW9mIF9fa2FybWFfXzwidSImJiEhX19rYXJtYV9ffHx0eXBlb2YgamFzbWluZTwidSImJiEhamFzbWluZXx8dHlwZW9mIGplc3Q8InUiJiYhIWplc3R8fHR5cGVvZiBNb2NoYTwidSImJiEhTW9jaGF9ZnVuY3Rpb24gTXIobiwuLi50KXtyZXR1cm4gdC5sZW5ndGg/dC5zb21lKGU9Pm5bZV0pOm4uYWx0S2V5fHxuLnNoaWZ0S2V5fHxuLmN0cmxLZXl8fG4ubWV0YUtleX1mdW5jdGlvbiBXdChuKXtyZXR1cm4gbnVsbCE9biYmImZhbHNlIiE9YCR7bn1gfWZ1bmN0aW9uIFBpKG4sdD0wKXtyZXR1cm4gTlYobik/TnVtYmVyKG4pOnR9ZnVuY3Rpb24gTlYobil7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQobikpJiYhaXNOYU4oTnVtYmVyKG4pKX1mdW5jdGlvbiBNXyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOltuXX1mdW5jdGlvbiBubyhuKXtyZXR1cm4gbnVsbD09bj8iIjoic3RyaW5nIj09dHlwZW9mIG4/bjpgJHtufXB4YH1mdW5jdGlvbiBjYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEFlP24ubmF0aXZlRWxlbWVudDpufXZhciBFXyxVWj0oKCk9PntjbGFzcyBue2NyZWF0ZShlKXtyZXR1cm4gdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXI+InUiP251bGw6bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGxUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5PWUsdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cz1uZXcgTWFwfW5nT25EZXN0cm95KCl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoaSkpfW9ic2VydmUoZSl7bGV0IGk9Y2EoZSk7cmV0dXJuIG5ldyBRdChyPT57bGV0IHM9dGhpcy5fb2JzZXJ2ZUVsZW1lbnQoaSkuc3Vic2NyaWJlKHIpO3JldHVybigpPT57cy51bnN1YnNjcmliZSgpLHRoaXMuX3Vub2JzZXJ2ZUVsZW1lbnQoaSl9fSl9X29ic2VydmVFbGVtZW50KGUpe2lmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuaGFzKGUpKXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50Kys7ZWxzZXtsZXQgaT1uZXcgVGUscj10aGlzLl9tdXRhdGlvbk9ic2VydmVyRmFjdG9yeS5jcmVhdGUobz0+aS5uZXh0KG8pKTtyJiZyLm9ic2VydmUoZSx7Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLHRoaXMuX29ic2VydmVkRWxlbWVudHMuc2V0KGUse29ic2VydmVyOnIsc3RyZWFtOmksY291bnQ6MX0pfXJldHVybiB0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5zdHJlYW19X3Vub2JzZXJ2ZUVsZW1lbnQoZSl7dGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkmJih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKS5jb3VudC0tLHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50fHx0aGlzLl9jbGVhbnVwT2JzZXJ2ZXIoZSkpfV9jbGVhbnVwT2JzZXJ2ZXIoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpe2xldHtvYnNlcnZlcjppLHN0cmVhbTpyfT10aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmdldChlKTtpJiZpLmRpc2Nvbm5lY3QoKSxyLmNvbXBsZXRlKCksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5kZWxldGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFVaKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksU189KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEcsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5fdW5zdWJzY3JpYmUoKTp0aGlzLl9zdWJzY3JpYmUoKX1nZXQgZGVib3VuY2UoKXtyZXR1cm4gdGhpcy5fZGVib3VuY2V9c2V0IGRlYm91bmNlKGUpe3RoaXMuX2RlYm91bmNlPVBpKGUpLHRoaXMuX3N1YnNjcmliZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKEFyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGxUZSksdyhBZSksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksenA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbVVpdfSksbn0pKCkselo9bmV3IFNldCxjVGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX21hdGNoTWVkaWE9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ3aW5kb3cubWF0Y2hNZWRpYT93aW5kb3cubWF0Y2hNZWRpYS5iaW5kKHdpbmRvdyk6ZFRlfW1hdGNoTWVkaWEoZSl7cmV0dXJuKHRoaXMuX3BsYXRmb3JtLldFQktJVHx8dGhpcy5fcGxhdGZvcm0uQkxJTkspJiZmdW5jdGlvbihuKXtpZighelouaGFzKG4pKXRyeXtFX3x8KChFXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoRV8pKSxFXy5zaGVldCYmKEVfLnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCkselouYWRkKG4pKX1jYXRjaCh0KXtjb25zb2xlLmVycm9yKHQpfX0oZSksdGhpcy5fbWF0Y2hNZWRpYShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGRUZShuKXtyZXR1cm57bWF0Y2hlczoiYWxsIj09PW58fCIiPT09bixtZWRpYTpuLGFkZExpc3RlbmVyOigpPT57fSxyZW1vdmVMaXN0ZW5lcjooKT0+e319fXZhciBubT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fbWVkaWFNYXRjaGVyPWUsdGhpcy5fem9uZT1pLHRoaXMuX3F1ZXJpZXM9bmV3IE1hcCx0aGlzLl9kZXN0cm95U3ViamVjdD1uZXcgVGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95U3ViamVjdC5uZXh0KCksdGhpcy5fZGVzdHJveVN1YmplY3QuY29tcGxldGUoKX1pc01hdGNoZWQoZSl7cmV0dXJuIGpaKE1fKGUpKS5zb21lKHI9PnRoaXMuX3JlZ2lzdGVyUXVlcnkocikubXFsLm1hdGNoZXMpfW9ic2VydmUoZSl7bGV0IG89cG4oalooTV8oZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1KZChvLnBpcGUoSHQoMSkpLG8ucGlwZShDYSgxKSxBcigwKSkpLG8ucGlwZShCKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IFF0KHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZShWbihpKSxCKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksb3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjVGUpLFIocHQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBqWihuKXtyZXR1cm4gbi5tYXAodD0+dC5zcGxpdCgiLCIpKS5yZWR1Y2UoKHQsZSk9PnQuY29uY2F0KGUpKS5tYXAodD0+dC50cmltKCkpfWZ1bmN0aW9uIERBKG4sdCl7cmV0dXJuKG4uZ2V0QXR0cmlidXRlKHQpfHwiIikubWF0Y2goL1xTKy9nKXx8W119dmFyIEtaPSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZSIsRUE9ImNkay1kZXNjcmliZWRieS1ob3N0IixIVj0wLElBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX21lc3NhZ2VSZWdpc3RyeT1uZXcgTWFwLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwsdGhpcy5faWQ9IiIrSFYrKyx0aGlzLl9kb2N1bWVudD1lLHRoaXMuX2lkPVNvKHJmKSsiLSIrSFYrK31kZXNjcmliZShlLGkscil7aWYoIXRoaXMuX2NhbkJlRGVzY3JpYmVkKGUsaSkpcmV0dXJuO2xldCBvPUJWKGkscik7InN0cmluZyIhPXR5cGVvZiBpPyhXWihpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89QlYoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7RUF9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUoRUEpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1daKHIsdGhpcy5faWQpLHIudGV4dENvbnRlbnQ9ZSxpJiZyLnNldEF0dHJpYnV0ZSgicm9sZSIsaSksdGhpcy5fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KEJWKGUsaSkse21lc3NhZ2VFbGVtZW50OnIscmVmZXJlbmNlQ291bnQ6MH0pfV9kZWxldGVNZXNzYWdlRWxlbWVudChlKXt0aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGUpPy5tZXNzYWdlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmRlbGV0ZShlKX1fY3JlYXRlTWVzc2FnZXNDb250YWluZXIoKXtpZih0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcilyZXR1cm47bGV0IGU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlLWNvbnRhaW5lciIsaT10aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtlfVtwbGF0Zm9ybT0ic2VydmVyIl1gKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpW29dLnJlbW92ZSgpO2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixyLmNsYXNzTGlzdC5hZGQoZSksci5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdGhpcy5fcGxhdGZvcm0mJiF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnIuc2V0QXR0cmlidXRlKCJwbGF0Zm9ybSIsInNlcnZlciIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZXNDb250YWluZXI9cn1fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZSl7bGV0IGk9REEoZSwiYXJpYS1kZXNjcmliZWRieSIpLmZpbHRlcihyPT4wIT1yLmluZGV4T2YoS1opKTtlLnNldEF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIsaS5qb2luKCIgIikpfV9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsaSl7bGV0IHI9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKTsoZnVuY3Rpb24obix0LGUpe2xldCBpPURBKG4sdCk7aS5zb21lKHI9PnIudHJpbSgpPT1lLnRyaW0oKSl8fChpLnB1c2goZS50cmltKCkpLG4uc2V0QXR0cmlidXRlKHQsaS5qb2luKCIgIikpKX0pKGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUuc2V0QXR0cmlidXRlKEVBLHRoaXMuX2lkKSxyLnJlZmVyZW5jZUNvdW50Kyt9X3JlbW92ZU1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpO3IucmVmZXJlbmNlQ291bnQtLSxmdW5jdGlvbihuLHQsZSl7bGV0IHI9REEobix0KS5maWx0ZXIobz0+byE9ZS50cmltKCkpO3IubGVuZ3RoP24uc2V0QXR0cmlidXRlKHQsci5qb2luKCIgIikpOm4ucmVtb3ZlQXR0cmlidXRlKHQpfShlLCJhcmlhLWRlc2NyaWJlZGJ5IixyLm1lc3NhZ2VFbGVtZW50LmlkKSxlLnJlbW92ZUF0dHJpYnV0ZShFQSl9X2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLGkpe2xldCByPURBKGUsImFyaWEtZGVzY3JpYmVkYnkiKSxvPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSkscz1vJiZvLm1lc3NhZ2VFbGVtZW50LmlkO3JldHVybiEhcyYmLTEhPXIuaW5kZXhPZihzKX1fY2FuQmVEZXNjcmliZWQoZSxpKXtpZighdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm4hMTtpZihpJiYib2JqZWN0Ij09dHlwZW9mIGkpcmV0dXJuITA7bGV0IHI9bnVsbD09aT8iIjpgJHtpfWAudHJpbSgpLG89ZS5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKTtyZXR1cm4hKCFyfHxvJiZvLnRyaW0oKT09PXIpfV9pc0VsZW1lbnROb2RlKGUpe3JldHVybiBlLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gQlYobix0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/YCR7dHx8IiJ9LyR7bn1gOm59ZnVuY3Rpb24gV1oobix0KXtuLmlkfHwobi5pZD1gJHtLWn0tJHt0fS0ke0hWKyt9YCl9dmFyIEFBPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2l0ZW1zPXQsdGhpcy5fYWN0aXZlSXRlbUluZGV4PS0xLHRoaXMuX2FjdGl2ZUl0ZW09bnVsbCx0aGlzLl93cmFwPSExLHRoaXMuX2xldHRlcktleVN0cmVhbT1uZXcgVGUsdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3ZlcnRpY2FsPSEwLHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9W10sdGhpcy5faG9tZUFuZEVuZD0hMSx0aGlzLl9za2lwUHJlZGljYXRlRm49ZT0+ZS5kaXNhYmxlZCx0aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0aGlzLnRhYk91dD1uZXcgVGUsdGhpcy5jaGFuZ2U9bmV3IFRlLHQgaW5zdGFuY2VvZiBjbCYmdC5jaGFuZ2VzLnN1YnNjcmliZShlPT57aWYodGhpcy5fYWN0aXZlSXRlbSl7bGV0IHI9ZS50b0FycmF5KCkuaW5kZXhPZih0aGlzLl9hY3RpdmVJdGVtKTtyPi0xJiZyIT09dGhpcy5fYWN0aXZlSXRlbUluZGV4JiYodGhpcy5fYWN0aXZlSXRlbUluZGV4PXIpfX0pfXNraXBQcmVkaWNhdGUodCl7cmV0dXJuIHRoaXMuX3NraXBQcmVkaWNhdGVGbj10LHRoaXN9d2l0aFdyYXAodD0hMCl7cmV0dXJuIHRoaXMuX3dyYXA9dCx0aGlzfXdpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKHQ9ITApe3JldHVybiB0aGlzLl92ZXJ0aWNhbD10LHRoaXN9d2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0KXtyZXR1cm4gdGhpcy5faG9yaXpvbnRhbD10LHRoaXN9d2l0aEFsbG93ZWRNb2RpZmllcktleXModCl7cmV0dXJuIHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXM9dCx0aGlzfXdpdGhUeXBlQWhlYWQodD0yMDApe3JldHVybiB0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90eXBlYWhlYWRTdWJzY3JpcHRpb249dGhpcy5fbGV0dGVyS2V5U3RyZWFtLnBpcGUoTnQoZT0+dGhpcy5fcHJlc3NlZExldHRlcnMucHVzaChlKSksQXIodCksSGUoKCk9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLmxlbmd0aD4wKSxCKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5qb2luKCIiKSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgcj0xO3I8aS5sZW5ndGgrMTtyKyspe2xldCBvPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrciklaS5sZW5ndGgscz1pW29dO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4ocykmJjA9PT1zLmdldExhYmVsKCkudG9VcHBlckNhc2UoKS50cmltKCkuaW5kZXhPZihlKSl7dGhpcy5zZXRBY3RpdmVJdGVtKG8pO2JyZWFrfX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXX0pLHRoaXN9d2l0aEhvbWVBbmRFbmQodD0hMCl7cmV0dXJuIHRoaXMuX2hvbWVBbmRFbmQ9dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fYWN0aXZlSXRlbTt0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0odCksdGhpcy5fYWN0aXZlSXRlbSE9PWUmJnRoaXMuY2hhbmdlLm5leHQodGhpcy5fYWN0aXZlSXRlbUluZGV4KX1vbktleWRvd24odCl7bGV0IGU9dC5rZXlDb2RlLHI9WyJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNoaWZ0S2V5Il0uZXZlcnkobz0+IXRbb118fHRoaXMuX2FsbG93ZWRNb2RpZmllcktleXMuaW5kZXhPZihvKT4tMSk7c3dpdGNoKGUpe2Nhc2UgOTpyZXR1cm4gdm9pZCB0aGlzLnRhYk91dC5uZXh0KCk7Y2FzZSA0MDppZih0aGlzLl92ZXJ0aWNhbCYmcil7dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM4OmlmKHRoaXMuX3ZlcnRpY2FsJiZyKXt0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM5OmlmKHRoaXMuX2hvcml6b250YWwmJnIpeyJydGwiPT09dGhpcy5faG9yaXpvbnRhbD90aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpOnRoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNzppZih0aGlzLl9ob3Jpem9udGFsJiZyKXsicnRsIj09PXRoaXMuX2hvcml6b250YWw/dGhpcy5zZXROZXh0SXRlbUFjdGl2ZSgpOnRoaXMuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzY6aWYodGhpcy5faG9tZUFuZEVuZCYmcil7dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzNTppZih0aGlzLl9ob21lQW5kRW5kJiZyKXt0aGlzLnNldExhc3RJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2RlZmF1bHQ6cmV0dXJuIHZvaWQoKHJ8fE1yKHQsInNoaWZ0S2V5IikpJiYodC5rZXkmJjE9PT10LmtleS5sZW5ndGg/dGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQodC5rZXkudG9Mb2NhbGVVcHBlckNhc2UoKSk6KGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3KSYmdGhpcy5fbGV0dGVyS2V5U3RyZWFtLm5leHQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSkpKX10aGlzLl9wcmVzc2VkTGV0dGVycz1bXSx0LnByZXZlbnREZWZhdWx0KCl9Z2V0IGFjdGl2ZUl0ZW1JbmRleCgpe3JldHVybiB0aGlzLl9hY3RpdmVJdGVtSW5kZXh9Z2V0IGFjdGl2ZUl0ZW0oKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbX1pc1R5cGluZygpe3JldHVybiB0aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MH1zZXRGaXJzdEl0ZW1BY3RpdmUoKXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCgwLDEpfXNldExhc3RJdGVtQWN0aXZlKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5faXRlbXMubGVuZ3RoLTEsLTEpfXNldE5leHRJdGVtQWN0aXZlKCl7dGhpcy5fYWN0aXZlSXRlbUluZGV4PDA/dGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTp0aGlzLl9zZXRBY3RpdmVJdGVtQnlEZWx0YSgxKX1zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKXt0aGlzLl9hY3RpdmVJdGVtSW5kZXg8MCYmdGhpcy5fd3JhcD90aGlzLnNldExhc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoLTEpfXVwZGF0ZUFjdGl2ZUl0ZW0odCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpLGk9Im51bWJlciI9PXR5cGVvZiB0P3Q6ZS5pbmRleE9mKHQpO3RoaXMuX2FjdGl2ZUl0ZW09ZVtpXT8/bnVsbCx0aGlzLl9hY3RpdmVJdGVtSW5kZXg9aX1fc2V0QWN0aXZlSXRlbUJ5RGVsdGEodCl7dGhpcy5fd3JhcD90aGlzLl9zZXRBY3RpdmVJbldyYXBNb2RlKHQpOnRoaXMuX3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl9X3NldEFjdGl2ZUluV3JhcE1vZGUodCl7bGV0IGU9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2ZvcihsZXQgaT0xO2k8PWUubGVuZ3RoO2krKyl7bGV0IHI9KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCt0KmkrZS5sZW5ndGgpJWUubGVuZ3RoO2lmKCF0aGlzLl9za2lwUHJlZGljYXRlRm4oZVtyXSkpcmV0dXJuIHZvaWQgdGhpcy5zZXRBY3RpdmVJdGVtKHIpfX1fc2V0QWN0aXZlSW5EZWZhdWx0TW9kZSh0KXt0aGlzLl9zZXRBY3RpdmVJdGVtQnlJbmRleCh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCx0KX1fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodCxlKXtsZXQgaT10aGlzLl9nZXRJdGVtc0FycmF5KCk7aWYoaVt0XSl7Zm9yKDt0aGlzLl9za2lwUHJlZGljYXRlRm4oaVt0XSk7KWlmKCFpW3QrPWVdKXJldHVybjt0aGlzLnNldEFjdGl2ZUl0ZW0odCl9fV9nZXRJdGVtc0FycmF5KCl7cmV0dXJuIHRoaXMuX2l0ZW1zIGluc3RhbmNlb2YgY2w/dGhpcy5faXRlbXMudG9BcnJheSgpOnRoaXMuX2l0ZW1zfX0sRF89Y2xhc3MgZXh0ZW5kcyBBQXtzZXRBY3RpdmVJdGVtKHQpe3RoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLnNldEluYWN0aXZlU3R5bGVzKCksc3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRBY3RpdmVTdHlsZXMoKX19LEFfPWNsYXNzIGV4dGVuZHMgQUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29yaWdpbj0icHJvZ3JhbSJ9c2V0Rm9jdXNPcmlnaW4odCl7cmV0dXJuIHRoaXMuX29yaWdpbj10LHRoaXN9c2V0QWN0aXZlSXRlbSh0KXtzdXBlci5zZXRBY3RpdmVJdGVtKHQpLHRoaXMuYWN0aXZlSXRlbSYmdGhpcy5hY3RpdmVJdGVtLmZvY3VzKHRoaXMuX29yaWdpbil9fSxJXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtPWV9aXNEaXNhYmxlZChlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hIShuLm9mZnNldFdpZHRofHxuLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIG4uZ2V0Q2xpZW50UmVjdHMmJm4uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShlKSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZShlKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtsZXQgaT1mdW5jdGlvbihuKXt0cnl7cmV0dXJuIG4uZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24obil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGUpKTtpZihpJiYoLTE9PT1xWihpKXx8IXRoaXMuaXNWaXNpYmxlKGkpKSlyZXR1cm4hMTtsZXQgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz1xWihlKTtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09bzohKCJpZnJhbWUiPT09cnx8Im9iamVjdCI9PT1yfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlPSJpbnB1dCI9PT10JiZuLnR5cGU7cmV0dXJuInRleHQiPT09ZXx8InBhc3N3b3JkIj09PWV8fCJzZWxlY3QiPT09dHx8InRleHRhcmVhIj09PXR9KGUpKSYmKCJhdWRpbyI9PT1yPyEhZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09bzoidmlkZW8iPT09cj8tMSE9PW8mJihudWxsIT09b3x8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8ZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmUudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiFmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXR8fCJzZWxlY3QiPT09dHx8ImJ1dHRvbiI9PT10fHwidGV4dGFyZWEiPT09dH0obil8fGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fFpaKG4pKX0oZSkmJiF0aGlzLmlzRGlzYWJsZWQoZSkmJihpPy5pZ25vcmVWaXNpYmlsaXR5fHx0aGlzLmlzVmlzaWJsZShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBaWihuKXtpZighbi5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PW4udGFiSW5kZXgpcmV0dXJuITE7bGV0IHQ9bi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghdHx8aXNOYU4ocGFyc2VJbnQodCwxMCkpKX1mdW5jdGlvbiBxWihuKXtpZighWloobikpcmV0dXJuIG51bGw7bGV0IHQ9cGFyc2VJbnQobi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4odCk/LTE6dH12YXIgQkM9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXJ9Y3JlYXRlKGUsaT0hMSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3RoaXMuX2VsZW1lbnQ9dCx0aGlzLl9jaGVja2VyPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9oYXNBdHRhY2hlZD0hMSx0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5lbmRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5fZW5hYmxlZD0hMCxvfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKHQpe3RoaXMuX2VuYWJsZWQ9dCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1kZXN0cm95KCl7bGV0IHQ9dGhpcy5fc3RhcnRBbmNob3IsZT10aGlzLl9lbmRBbmNob3I7dCYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksdC5yZW1vdmUoKSksZSYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpLGUucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFuY2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5nKSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkodCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmUodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KHQpKSl9KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke3R9XSwgW2Nka0ZvY3VzUmVnaW9uJHt0fV0sIFtjZGstZm9jdXMtJHt0fV1gKTtyZXR1cm4ic3RhcnQiPT10P2UubGVuZ3RoP2VbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6ZS5sZW5ndGg/ZVtlLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKGUpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGUpKXtsZXQgaT10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlKTtyZXR1cm4gaT8uZm9jdXModCksISFpfXJldHVybiBlLmZvY3VzKHQpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KHQpe2xldCBlPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gZSYmZS5mb2N1cyh0KSwhIWV9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHQpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUodCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZSh0KSlyZXR1cm4gdDtsZXQgZT10LmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1lW2ldLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGVbaV0pOm51bGw7aWYocilyZXR1cm4gcn1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9yKCl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsdCksdC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksdC5jbGFzc0xpc3QuYWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSx0LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCxlKXt0P2Uuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTplLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVBbmNob3JzKHQpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0LHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUodCl7dGhpcy5fbmdab25lLmlzU3RhYmxlP3QoKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKHQpfX0oZSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihJXyksUihwdCksUihCdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIFZDKG4pe3JldHVybiAwPT09bi5idXR0b25zfHwwPT09bi5vZmZzZXRYJiYwPT09bi5vZmZzZXRZfWZ1bmN0aW9uIEhDKG4pe2xldCB0PW4udG91Y2hlcyYmbi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzJiZuLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIXR8fC0xIT09dC5pZGVudGlmaWVyfHxudWxsIT10LnJhZGl1c1gmJjEhPT10LnJhZGl1c1h8fG51bGwhPXQucmFkaXVzWSYmMSE9PXQucmFkaXVzWSl9bmV3IHNlKCJGT0NVU19UUkFQX0lORVJUX1NUUkFURUdZIik7dmFyIFJUZT1uZXcgc2UoImNkay1pbnB1dC1tb2RhbGl0eS1kZXRlY3Rvci1vcHRpb25zIiksT1RlPXtpZ25vcmVLZXlzOlsxOCwxNywyMjQsOTEsMTZdfSxUXz1Ocyh7cGFzc2l2ZTohMCxjYXB0dXJlOiEwfSksa1RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PW51bGwsdGhpcy5fbW9kYWxpdHk9bmV3IFZyKG51bGwpLHRoaXMuX2xhc3RUb3VjaE1zPTAsdGhpcy5fb25LZXlkb3duPXM9Pnt0aGlzLl9vcHRpb25zPy5pZ25vcmVLZXlzPy5zb21lKGE9PmE9PT1zLmtleUNvZGUpfHwodGhpcy5fbW9kYWxpdHkubmV4dCgia2V5Ym9hcmQiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb25Nb3VzZWRvd249cz0+e0RhdGUubm93KCktdGhpcy5fbGFzdFRvdWNoTXM8NjUwfHwodGhpcy5fbW9kYWxpdHkubmV4dChWQyhzKT8ia2V5Ym9hcmQiOiJtb3VzZSIpLHRoaXMuX21vc3RSZWNlbnRUYXJnZXQ9dmMocykpfSx0aGlzLl9vblRvdWNoc3RhcnQ9cz0+e0hDKHMpP3RoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIik6KHRoaXMuX2xhc3RUb3VjaE1zPURhdGUubm93KCksdGhpcy5fbW9kYWxpdHkubmV4dCgidG91Y2giKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PXZjKHMpKX0sdGhpcy5fb3B0aW9ucz17Li4uT1RlLC4uLm99LHRoaXMubW9kYWxpdHlEZXRlY3RlZD10aGlzLl9tb2RhbGl0eS5waXBlKENhKDEpKSx0aGlzLm1vZGFsaXR5Q2hhbmdlZD10aGlzLm1vZGFsaXR5RGV0ZWN0ZWQucGlwZShkaSgpKSxlLmlzQnJvd3NlciYmaS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlkb3duLFRfKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sVF8pLHIuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKX0pfWdldCBtb3N0UmVjZW50TW9kYWxpdHkoKXtyZXR1cm4gdGhpcy5fbW9kYWxpdHkudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RhbGl0eS5jb21wbGV0ZSgpLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5ZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlZG93bixUXyksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fb25Ub3VjaHN0YXJ0LFRfKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQpLFIoUlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxGVGU9bmV3IHNlKCJsaXZlQW5ub3VuY2VyRWxlbWVudCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSxMVGU9bmV3IHNlKCJMSVZFX0FOTk9VTkNFUl9ERUZBVUxUX09QVElPTlMiKSxVQz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX25nWm9uZT1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPW8sdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9saXZlRWxlbWVudD1lfHx0aGlzLl9jcmVhdGVMaXZlRWxlbWVudCgpfWFubm91bmNlKGUsLi4uaSl7bGV0IG8scyxyPXRoaXMuX2RlZmF1bHRPcHRpb25zO3JldHVybiAxPT09aS5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgaVswXT9zPWlbMF06W28sc109aSx0aGlzLmNsZWFyKCksY2xlYXJUaW1lb3V0KHRoaXMuX3ByZXZpb3VzVGltZW91dCksb3x8KG89ciYmci5wb2xpdGVuZXNzP3IucG9saXRlbmVzczoicG9saXRlIiksbnVsbD09cyYmciYmKHM9ci5kdXJhdGlvbiksdGhpcy5fbGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxpdmUiLG8pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+KHRoaXMuX2N1cnJlbnRQcm9taXNlfHwodGhpcy5fY3VycmVudFByb21pc2U9bmV3IFByb21pc2UoYT0+dGhpcy5fY3VycmVudFJlc29sdmU9YSkpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLHRoaXMuX3ByZXZpb3VzVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9ZSwibnVtYmVyIj09dHlwZW9mIHMmJih0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5jbGVhcigpLHMpKSx0aGlzLl9jdXJyZW50UmVzb2x2ZSgpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH0sMTAwKSx0aGlzLl9jdXJyZW50UHJvbWlzZSkpfWNsZWFyKCl7dGhpcy5fbGl2ZUVsZW1lbnQmJih0aGlzLl9saXZlRWxlbWVudC50ZXh0Q29udGVudD0iIil9bmdPbkRlc3Ryb3koKXtjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9saXZlRWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fbGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9jdXJyZW50UmVzb2x2ZT8uKCksdGhpcy5fY3VycmVudFByb21pc2U9dGhpcy5fY3VycmVudFJlc29sdmU9dm9pZCAwfV9jcmVhdGVMaXZlRWxlbWVudCgpe2xldCBlPSJjZGstbGl2ZS1hbm5vdW5jZXItZWxlbWVudCIsaT10aGlzLl9kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpLHI9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtyZXR1cm4gci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHIuc2V0QXR0cmlidXRlKCJhcmlhLWF0b21pYyIsInRydWUiKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChyKSxyfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEZUZSw4KSxSKHB0KSxSKEJ0KSxSKExUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQlRlPW5ldyBzZSgiY2RrLWZvY3VzLW1vbml0b3ItZGVmYXVsdC1vcHRpb25zIiksVEE9TnMoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLHpyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvcj1yLHRoaXMuX29yaWdpbj1udWxsLHRoaXMuX3dpbmRvd0ZvY3VzZWQ9ITEsdGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb249ITEsdGhpcy5fZWxlbWVudEluZm89bmV3IE1hcCx0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQ9MCx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudD1uZXcgTWFwLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXI9KCk9Pnt0aGlzLl93aW5kb3dGb2N1c2VkPSEwLHRoaXMuX3dpbmRvd0ZvY3VzVGltZW91dElkPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT50aGlzLl93aW5kb3dGb2N1c2VkPSExKX0sdGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3Rvcj1uZXcgVGUsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcj1hPT57Zm9yKGxldCBjPXZjKGEpO2M7Yz1jLnBhcmVudEVsZW1lbnQpImZvY3VzIj09PWEudHlwZT90aGlzLl9vbkZvY3VzKGEsYyk6dGhpcy5fb25CbHVyKGEsYyl9LHRoaXMuX2RvY3VtZW50PW8sdGhpcy5fZGV0ZWN0aW9uTW9kZT1zPy5kZXRlY3Rpb25Nb2RlfHwwfW1vbml0b3IoZSxpPSExKXtsZXQgcj1jYShlKTtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwxIT09ci5ub2RlVHlwZSlyZXR1cm4ganQobnVsbCk7bGV0IG89TUEocil8fHRoaXMuX2dldERvY3VtZW50KCkscz10aGlzLl9lbGVtZW50SW5mby5nZXQocik7aWYocylyZXR1cm4gaSYmKHMuY2hlY2tDaGlsZHJlbj0hMCkscy5zdWJqZWN0O2xldCBhPXtjaGVja0NoaWxkcmVuOmksc3ViamVjdDpuZXcgVGUscm9vdE5vZGU6b307cmV0dXJuIHRoaXMuX2VsZW1lbnRJbmZvLnNldChyLGEpLHRoaXMuX3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGEpLGEuc3ViamVjdH1zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1jYShlKSxyPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKTtyJiYoci5zdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbGVtZW50SW5mby5kZWxldGUoaSksdGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKHIpKX1mb2N1c1ZpYShlLGkscil7bGV0IG89Y2EoZSk7bz09PXRoaXMuX2dldERvY3VtZW50KCkuYWN0aXZlRWxlbWVudD90aGlzLl9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKG8pLmZvckVhY2goKFthLGxdKT0+dGhpcy5fb3JpZ2luQ2hhbmdlZChhLGksbCkpOih0aGlzLl9zZXRPcmlnaW4oaSksImZ1bmN0aW9uIj09dHlwZW9mIG8uZm9jdXMmJm8uZm9jdXMocikpfW5nT25EZXN0cm95KCl7dGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgoZSxpKT0+dGhpcy5zdG9wTW9uaXRvcmluZyhpKSl9X2dldERvY3VtZW50KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50fHxkb2N1bWVudH1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2dldERvY3VtZW50KCkuZGVmYXVsdFZpZXd8fHdpbmRvd31fZ2V0Rm9jdXNPcmlnaW4oZSl7cmV0dXJuIHRoaXMuX29yaWdpbj90aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj90aGlzLl9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpPyJ0b3VjaCI6InByb2dyYW0iOnRoaXMuX29yaWdpbjp0aGlzLl93aW5kb3dGb2N1c2VkJiZ0aGlzLl9sYXN0Rm9jdXNPcmlnaW4/dGhpcy5fbGFzdEZvY3VzT3JpZ2luOmUmJnRoaXMuX2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSk/Im1vdXNlIjoicHJvZ3JhbSJ9X3Nob3VsZEJlQXR0cmlidXRlZFRvVG91Y2goZSl7cmV0dXJuIDE9PT10aGlzLl9kZXRlY3Rpb25Nb2RlfHwhIWU/LmNvbnRhaW5zKHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5fbW9zdFJlY2VudFRhcmdldCl9X3NldENsYXNzZXMoZSxpKXtlLmNsYXNzTGlzdC50b2dnbGUoImNkay1mb2N1c2VkIiwhIWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXRvdWNoLWZvY3VzZWQiLCJ0b3VjaCI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1rZXlib2FyZC1mb2N1c2VkIiwia2V5Ym9hcmQiPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstbW91c2UtZm9jdXNlZCIsIm1vdXNlIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLXByb2dyYW0tZm9jdXNlZCIsInByb2dyYW0iPT09aSl9X3NldE9yaWdpbihlLGk9ITEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX29yaWdpbj1lLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSJ0b3VjaCI9PT1lJiZpLDA9PT10aGlzLl9kZXRlY3Rpb25Nb2RlJiYoY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCksdGhpcy5fb3JpZ2luVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuX29yaWdpbj1udWxsLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPzY1MDoxKSl9KX1fb25Gb2N1cyhlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRJbmZvLmdldChpKSxvPXZjKGUpOyFyfHwhci5jaGVja0NoaWxkcmVuJiZpIT09b3x8dGhpcy5fb3JpZ2luQ2hhbmdlZChpLHRoaXMuX2dldEZvY3VzT3JpZ2luKG8pLHIpfV9vbkJsdXIoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7IXJ8fHIuY2hlY2tDaGlsZHJlbiYmZS5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgTm9kZSYmaS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpfHwodGhpcy5fc2V0Q2xhc3NlcyhpKSx0aGlzLl9lbWl0T3JpZ2luKHIsbnVsbCkpfV9lbWl0T3JpZ2luKGUsaSl7ZS5zdWJqZWN0Lm9ic2VydmVycy5sZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9PmUuc3ViamVjdC5uZXh0KGkpKX1fcmVnaXN0ZXJHbG9iYWxMaXN0ZW5lcnMoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47bGV0IGk9ZS5yb290Tm9kZSxyPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKXx8MDtyfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSxpLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsVEEpfSksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGkscisxKSwxPT0rK3RoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudCYmKHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2dldFdpbmRvdygpLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKX0pLHRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3Rvci5tb2RhbGl0eURldGVjdGVkLnBpcGUob3QodGhpcy5fc3RvcElucHV0TW9kYWxpdHlEZXRlY3RvcikpLnN1YnNjcmliZShvPT57dGhpcy5fc2V0T3JpZ2luKG8sITApfSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcnMoZSl7bGV0IGk9ZS5yb290Tm9kZTtpZih0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5oYXMoaSkpe2xldCByPXRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LmdldChpKTtyPjE/dGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuc2V0KGksci0xKTooaS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixUQSksaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLFRBKSx0aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5kZWxldGUoaSkpfS0tdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50fHwodGhpcy5fZ2V0V2luZG93KCkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3dpbmRvd0ZvY3VzTGlzdGVuZXIpLHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IubmV4dCgpLGNsZWFyVGltZW91dCh0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZCksY2xlYXJUaW1lb3V0KHRoaXMuX29yaWdpblRpbWVvdXRJZCkpfV9vcmlnaW5DaGFuZ2VkKGUsaSxyKXt0aGlzLl9zZXRDbGFzc2VzKGUsaSksdGhpcy5fZW1pdE9yaWdpbihyLGkpLHRoaXMuX2xhc3RGb2N1c09yaWdpbj1pfV9nZXRDbG9zZXN0RWxlbWVudHNJbmZvKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5mb3JFYWNoKChyLG8pPT57KG89PT1lfHxyLmNoZWNrQ2hpbGRyZW4mJm8uY29udGFpbnMoZSkpJiZpLnB1c2goW28scl0pfSksaX1faXNMYXN0SW50ZXJhY3Rpb25Gcm9tSW5wdXRMYWJlbChlKXtsZXR7X21vc3RSZWNlbnRUYXJnZXQ6aSxtb3N0UmVjZW50TW9kYWxpdHk6cn09dGhpcy5faW5wdXRNb2RhbGl0eURldGVjdG9yO2lmKCJtb3VzZSIhPT1yfHwhaXx8aT09PWV8fCJJTlBVVCIhPT1lLm5vZGVOYW1lJiYiVEVYVEFSRUEiIT09ZS5ub2RlTmFtZXx8ZS5kaXNhYmxlZClyZXR1cm4hMTtsZXQgbz1lLmxhYmVscztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWlmKG9bc10uY29udGFpbnMoaSkpcmV0dXJuITA7cmV0dXJuITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocHQpLFIodWkpLFIoa1RlKSxSKEJ0LDgpLFIoQlRlLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSwkWj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2ZvY3VzT3JpZ2luPW51bGwsdGhpcy5jZGtGb2N1c0NoYW5nZT1uZXcgR31nZXQgZm9jdXNPcmlnaW4oKXtyZXR1cm4gdGhpcy5fZm9jdXNPcmlnaW59bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX21vbml0b3JTdWJzY3JpcHRpb249dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IoZSwxPT09ZS5ub2RlVHlwZSYmZS5oYXNBdHRyaWJ1dGUoImNka01vbml0b3JTdWJ0cmVlRm9jdXMiKSkuc3Vic2NyaWJlKGk9Pnt0aGlzLl9mb2N1c09yaWdpbj1pLHRoaXMuY2RrRm9jdXNDaGFuZ2UuZW1pdChpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24mJnRoaXMuX21vbml0b3JTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh6cikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIl0sWyIiLCJjZGtNb25pdG9yU3VidHJlZUZvY3VzIiwiIl1dLG91dHB1dHM6e2Nka0ZvY3VzQ2hhbmdlOiJjZGtGb2N1c0NoYW5nZSJ9LGV4cG9ydEFzOlsiY2RrTW9uaXRvckZvY3VzIl19KSxufSkoKSxZWj0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLFhaPSJjZGstaGlnaC1jb250cmFzdC13aGl0ZS1vbi1ibGFjayIsVlY9ImNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSIscVY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9icmVha3BvaW50U3Vic2NyaXB0aW9uPVNvKG5tKS5vYnNlcnZlKCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKSIpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlJiYodGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITEsdGhpcy5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSl9KX1nZXRIaWdoQ29udHJhc3RNb2RlKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gMDtsZXQgZT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0icmdiKDEsMiwzKSIsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdyxyPWkmJmkuZ2V0Q29tcHV0ZWRTdHlsZT9pLmdldENvbXB1dGVkU3R5bGUoZSk6bnVsbCxvPShyJiZyLmJhY2tncm91bmRDb2xvcnx8IiIpLnJlcGxhY2UoLyAvZywiIik7c3dpdGNoKGUucmVtb3ZlKCksbyl7Y2FzZSJyZ2IoMCwwLDApIjpjYXNlInJnYig0NSw1MCw1NCkiOmNhc2UicmdiKDMyLDMyLDMyKSI6cmV0dXJuIDI7Y2FzZSJyZ2IoMjU1LDI1NSwyNTUpIjpjYXNlInJnYigyNTUsMjUwLDIzOSkiOnJldHVybiAxfXJldHVybiAwfW5nT25EZXN0cm95KCl7dGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3Nlcygpe2lmKCF0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9kb2N1bWVudC5ib2R5KXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdDtlLnJlbW92ZShWVixZWixYWiksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQoVlYsWVopOjI9PT1pJiZlLmFkZChWVixYWil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHVpKSxSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksUF89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLl9hcHBseUJvZHlIaWdoQ29udHJhc3RNb2RlQ3NzQ2xhc3NlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHFWKSl9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3pwXX0pLG59KSgpLFZUZT1uZXcgc2UoImNkay1kaXItZG9jIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhCdCl9fSksVVRlPS9eKGFyfGNrYnxkdnxoZXxpd3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pLGlyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYodGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgRyxlKXtsZXQgcj1lLmRvY3VtZW50RWxlbWVudD9lLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbDt0aGlzLnZhbHVlPWZ1bmN0aW9uKG4pe2xldCB0PW4/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PXQmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP1VUZS50ZXN0KG5hdmlnYXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT10PyJydGwiOiJsdHIifSgoZS5ib2R5P2UuYm9keS5kaXI6bnVsbCl8fHJ8fCJsdHIiKX19bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFZUZSw4KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksV3A9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpO2Z1bmN0aW9uIGpUZShuLHQpe2lmKDEmbiYmTigwLCJtYXQtcHNldWRvLWNoZWNrYm94Iiw0KSwyJm4pe2xldCBlPU0oKTtiKCJzdGF0ZSIsZS5zZWxlY3RlZD8iY2hlY2tlZCI6InVuY2hlY2tlZCIpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCl9fWZ1bmN0aW9uIEdUZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNSksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIigiLGUuZ3JvdXAubGFiZWwsIikiKX19dmFyIFdUZT1bIioiXSxpSj0obmV3IEtsKCIxNC4yLjciKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5TVEFOREFSRF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIixuLkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixuLkFDQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMSwxKSIsbi5TSEFSUF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC42LDEpIixufSkoKSkscko9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uQ09NUExFWD0iMzc1bXMiLG4uRU5URVJJTkc9IjIyNW1zIixuLkVYSVRJTkc9IjE5NW1zIixufSkoKSxZVGU9bmV3IHNlKCJtYXQtc2FuaXR5LWNoZWNrcyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxkbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9zYW5pdHlDaGVja3M9aSx0aGlzLl9kb2N1bWVudD1yLHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITEsZS5fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKSx0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzfHwodGhpcy5faGFzRG9uZUdsb2JhbENoZWNrcz0hMCl9X2NoZWNrSXNFbmFibGVkKGUpe3JldHVybiFMQygpJiYoImJvb2xlYW4iPT10eXBlb2YgdGhpcy5fc2FuaXR5Q2hlY2tzP3RoaXMuX3Nhbml0eUNoZWNrczohIXRoaXMuX3Nhbml0eUNoZWNrc1tlXSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIocVYpLFIoWVRlLDgpLFIoQnQpKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbV3AsV3BdfSksbn0pKCk7ZnVuY3Rpb24gZ28obil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLl9kaXNhYmxlZD0hMX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKHQpe3RoaXMuX2Rpc2FibGVkPVd0KHQpfX19ZnVuY3Rpb24gcHMobix0KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLmUpe3N1cGVyKC4uLmUpLHRoaXMuZGVmYXVsdENvbG9yPXQsdGhpcy5jb2xvcj10fWdldCBjb2xvcigpe3JldHVybiB0aGlzLl9jb2xvcn1zZXQgY29sb3IoZSl7bGV0IGk9ZXx8dGhpcy5kZWZhdWx0Q29sb3I7aSE9PXRoaXMuX2NvbG9yJiYodGhpcy5fY29sb3ImJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtJHt0aGlzLl9jb2xvcn1gKSxpJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LSR7aX1gKSx0aGlzLl9jb2xvcj1pKX19fWZ1bmN0aW9uIExzKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKHQpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QodCl9fX1mdW5jdGlvbiBxcChuLHQ9MCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLl90YWJJbmRleD10LHRoaXMuZGVmYXVsdFRhYkluZGV4PXR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/LTE6dGhpcy5fdGFiSW5kZXh9c2V0IHRhYkluZGV4KGUpe3RoaXMuX3RhYkluZGV4PW51bGwhPWU/UGkoZSk6dGhpcy5kZWZhdWx0VGFiSW5kZXh9fX1mdW5jdGlvbiBSQShuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuZXJyb3JTdGF0ZT0hMX11cGRhdGVFcnJvclN0YXRlKCl7bGV0IHQ9dGhpcy5lcnJvclN0YXRlLG89KHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXJ8fHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcikuaXNFcnJvclN0YXRlKHRoaXMubmdDb250cm9sP3RoaXMubmdDb250cm9sLmNvbnRyb2w6bnVsbCx0aGlzLl9wYXJlbnRGb3JtR3JvdXB8fHRoaXMuX3BhcmVudEZvcm0pO28hPT10JiYodGhpcy5lcnJvclN0YXRlPW8sdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX19fWZ1bmN0aW9uIE9BKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9W10sdGhpcy5pbml0aWFsaXplZD1uZXcgUXQoZT0+e3RoaXMuX2lzSW5pdGlhbGl6ZWQ/dGhpcy5fbm90aWZ5U3Vic2NyaWJlcihlKTp0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMucHVzaChlKX0pfV9tYXJrSW5pdGlhbGl6ZWQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycy5mb3JFYWNoKHRoaXMuX25vdGlmeVN1YnNjcmliZXIpLHRoaXMuX3BlbmRpbmdTdWJzY3JpYmVycz1udWxsfV9ub3RpZnlTdWJzY3JpYmVyKHQpe3QubmV4dCgpLHQuY29tcGxldGUoKX19fW5ldyBzZSgiTUFUX0RBVEVfTE9DQUxFIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBTbyhyZCl9fSksbmV3IHNlKCJtYXQtZGF0ZS1mb3JtYXRzIik7dmFyIFJfPSgoKT0+e2NsYXNzIG57aXNFcnJvclN0YXRlKGUsaSl7cmV0dXJuISEoZSYmZS5pbnZhbGlkJiYoZS50b3VjaGVkfHxpJiZpLnN1Ym1pdHRlZCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxlSj17ZW50ZXJEdXJhdGlvbjoyMjUsZXhpdER1cmF0aW9uOjE1MH0sWVY9TnMoe3Bhc3NpdmU6ITB9KSx0Sj1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxuSj1bIm1vdXNldXAiLCJtb3VzZWxlYXZlIiwidG91Y2hlbmQiLCJ0b3VjaGNhbmNlbCJdLG9KPW5ldyBzZSgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLGVzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1jYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uZUosLi4uaS5hbmltYXRpb259O2kuY2VudGVyZWQmJih0PXIubGVmdCtyLndpZHRoLzIsZT1yLnRvcCtyLmhlaWdodC8yKTtsZXQgcz1pLnJhZGl1c3x8ZnVuY3Rpb24obix0LGUpe2xldCBpPU1hdGgubWF4KE1hdGguYWJzKG4tZS5sZWZ0KSxNYXRoLmFicyhuLWUucmlnaHQpKSxyPU1hdGgubWF4KE1hdGguYWJzKHQtZS50b3ApLE1hdGguYWJzKHQtZS5ib3R0b20pKTtyZXR1cm4gTWF0aC5zcXJ0KGkqaStyKnIpfSh0LGUsciksYT10LXIubGVmdCxsPWUtci50b3AsYz1vLmVudGVyRHVyYXRpb24sdT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LmNsYXNzTGlzdC5hZGQoIm1hdC1yaXBwbGUtZWxlbWVudCIpLHUuc3R5bGUubGVmdD1hLXMrInB4Iix1LnN0eWxlLnRvcD1sLXMrInB4Iix1LnN0eWxlLmhlaWdodD0yKnMrInB4Iix1LnN0eWxlLndpZHRoPTIqcysicHgiLG51bGwhPWkuY29sb3ImJih1LnN0eWxlLmJhY2tncm91bmRDb2xvcj1pLmNvbG9yKSx1LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHtjfW1zYCx0aGlzLl9jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHUpO2xldCBkPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHUpLGg9ZC50cmFuc2l0aW9uRHVyYXRpb24sZj0ibm9uZSI9PT1kLnRyYW5zaXRpb25Qcm9wZXJ0eXx8IjBzIj09PWh8fCIwcywgMHMiPT09aCxtPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuZWxlbWVudD1lLHRoaXMuY29uZmlnPWksdGhpcy5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3M9cix0aGlzLnN0YXRlPTN9ZmFkZU91dCgpe3RoaXMuX3JlbmRlcmVyLmZhZGVPdXRSaXBwbGUodGhpcyl9fSh0aGlzLHUsaSxmKTt1LnN0eWxlLnRyYW5zZm9ybT0ic2NhbGUzZCgxLCAxLCAxKSIsbS5zdGF0ZT0wLGkucGVyc2lzdGVudHx8KHRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGU9bSk7bGV0IEM9bnVsbDtyZXR1cm4hZiYmKGN8fG8uZXhpdER1cmF0aW9uKSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IF89KCk9PnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24obSkseT0oKT0+dGhpcy5fZGVzdHJveVJpcHBsZShtKTt1LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLF8pLHUuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmNhbmNlbCIseSksQz17b25UcmFuc2l0aW9uRW5kOl8sb25UcmFuc2l0aW9uQ2FuY2VsOnl9fSksdGhpcy5fYWN0aXZlUmlwcGxlcy5zZXQobSxDKSwoZnx8IWMpJiZ0aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKG0pLG19ZmFkZU91dFJpcHBsZSh0KXtpZigyPT09dC5zdGF0ZXx8Mz09PXQuc3RhdGUpcmV0dXJuO2xldCBlPXQuZWxlbWVudCxpPXsuLi5lSiwuLi50LmNvbmZpZy5hbmltYXRpb259O2Uuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2kuZXhpdER1cmF0aW9ufW1zYCxlLnN0eWxlLm9wYWNpdHk9IjAiLHQuc3RhdGU9MiwodC5fYW5pbWF0aW9uRm9yY2libHlEaXNhYmxlZFRocm91Z2hDc3N8fCFpLmV4aXREdXJhdGlvbikmJnRoaXMuX2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl9ZmFkZU91dEFsbCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnQuZmFkZU91dCgpKX1mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpe3RoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9Pnt0LmNvbmZpZy5wZXJzaXN0ZW50fHx0LmZhZGVPdXQoKX0pfXNldHVwVHJpZ2dlckV2ZW50cyh0KXtsZXQgZT1jYSh0KTshZXx8ZT09PXRoaXMuX3RyaWdnZXJFbGVtZW50fHwodGhpcy5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpLHRoaXMuX3RyaWdnZXJFbGVtZW50PWUsdGhpcy5fcmVnaXN0ZXJFdmVudHModEopKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKG5KKSx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSEwKX1fZmluaXNoUmlwcGxlVHJhbnNpdGlvbih0KXswPT09dC5zdGF0ZT90aGlzLl9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpOjI9PT10LnN0YXRlJiZ0aGlzLl9kZXN0cm95UmlwcGxlKHQpfV9zdGFydEZhZGVPdXRUcmFuc2l0aW9uKHQpe2xldCBlPXQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlLHtwZXJzaXN0ZW50Oml9PXQuY29uZmlnO3Quc3RhdGU9MSwhaSYmKCFlfHwhdGhpcy5faXNQb2ludGVyRG93bikmJnQuZmFkZU91dCgpfV9kZXN0cm95UmlwcGxlKHQpe2xldCBlPXRoaXMuX2FjdGl2ZVJpcHBsZXMuZ2V0KHQpPz9udWxsO3RoaXMuX2FjdGl2ZVJpcHBsZXMuZGVsZXRlKHQpLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2l6ZXx8KHRoaXMuX2NvbnRhaW5lclJlY3Q9bnVsbCksdD09PXRoaXMuX21vc3RSZWNlbnRUcmFuc2llbnRSaXBwbGUmJih0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW51bGwpLHQuc3RhdGU9MyxudWxsIT09ZSYmKHQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixlLm9uVHJhbnNpdGlvbkVuZCksdC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25jYW5jZWwiLGUub25UcmFuc2l0aW9uQ2FuY2VsKSksdC5lbGVtZW50LnJlbW92ZSgpfV9vbk1vdXNlZG93bih0KXtsZXQgZT1WQyh0KSxpPXRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQmJkRhdGUubm93KCk8dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudCs4MDA7IXRoaXMuX3RhcmdldC5yaXBwbGVEaXNhYmxlZCYmIWUmJiFpJiYodGhpcy5faXNQb2ludGVyRG93bj0hMCx0aGlzLmZhZGVJblJpcHBsZSh0LmNsaWVudFgsdC5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpKX1fb25Ub3VjaFN0YXJ0KHQpe2lmKCF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFIQyh0KSl7dGhpcy5fbGFzdFRvdWNoU3RhcnRFdmVudD1EYXRlLm5vdygpLHRoaXMuX2lzUG9pbnRlckRvd249ITA7bGV0IGU9dC5jaGFuZ2VkVG91Y2hlcztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0aGlzLmZhZGVJblJpcHBsZShlW2ldLmNsaWVudFgsZVtpXS5jbGllbnRZLHRoaXMuX3RhcmdldC5yaXBwbGVDb25maWcpfX1fb25Qb2ludGVyVXAoKXshdGhpcy5faXNQb2ludGVyRG93bnx8KHRoaXMuX2lzUG9pbnRlckRvd249ITEsdGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+eyF0LmNvbmZpZy5wZXJzaXN0ZW50JiYoMT09PXQuc3RhdGV8fHQuY29uZmlnLnRlcm1pbmF0ZU9uUG9pbnRlclVwJiYwPT09dC5zdGF0ZSkmJnQuZmFkZU91dCgpfSkpfV9yZWdpc3RlckV2ZW50cyh0KXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0LmZvckVhY2goZT0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZSx0aGlzLFlWKX0pfSl9X2dldEFjdGl2ZVJpcHBsZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hY3RpdmVSaXBwbGVzLmtleXMoKSl9X3JlbW92ZVRyaWdnZXJFdmVudHMoKXt0aGlzLl90cmlnZ2VyRWxlbWVudCYmKHRKLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pLHRoaXMuX3BvaW50ZXJVcEV2ZW50c1JlZ2lzdGVyZWQmJm5KLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLFlWKX0pKX19KHRoaXMsaSxlLHIpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7ZSYmdGhpcy5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpLHRoaXMuX2Rpc2FibGVkPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcnx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fXNldCB0cmlnZ2VyKGUpe3RoaXMuX3RyaWdnZXI9ZSx0aGlzLl9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKX1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITAsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5fcmVtb3ZlVHJpZ2dlckV2ZW50cygpfWZhZGVPdXRBbGwoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsKCl9ZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKXt0aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlT3V0QWxsTm9uUGVyc2lzdGVudCgpfWdldCByaXBwbGVDb25maWcoKXtyZXR1cm57Y2VudGVyZWQ6dGhpcy5jZW50ZXJlZCxyYWRpdXM6dGhpcy5yYWRpdXMsY29sb3I6dGhpcy5jb2xvcixhbmltYXRpb246ey4uLnRoaXMuX2dsb2JhbE9wdGlvbnMuYW5pbWF0aW9uLC4uLiJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlP3tlbnRlckR1cmF0aW9uOjAsZXhpdER1cmF0aW9uOjB9Ont9LC4uLnRoaXMuYW5pbWF0aW9ufSx0ZXJtaW5hdGVPblBvaW50ZXJVcDp0aGlzLl9nbG9iYWxPcHRpb25zLnRlcm1pbmF0ZU9uUG9pbnRlclVwfX1nZXQgcmlwcGxlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8ISF0aGlzLl9nbG9iYWxPcHRpb25zLmRpc2FibGVkfV9zZXR1cFRyaWdnZXJFdmVudHNJZkVuYWJsZWQoKXshdGhpcy5kaXNhYmxlZCYmdGhpcy5faXNJbml0aWFsaXplZCYmdGhpcy5fcmlwcGxlUmVuZGVyZXIuc2V0dXBUcmlnZ2VyRXZlbnRzKHRoaXMudHJpZ2dlcil9bGF1bmNoKGUsaT0wLHIpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZT90aGlzLl9yaXBwbGVSZW5kZXJlci5mYWRlSW5SaXBwbGUoZSxpLHsuLi50aGlzLnJpcHBsZUNvbmZpZywuLi5yfSk6dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKDAsMCx7Li4udGhpcy5yaXBwbGVDb25maWcsLi4uZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHB0KSx3KHVpKSx3KG9KLDgpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtcmlwcGxlIiwiIl0sWyIiLCJtYXRSaXBwbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtcmlwcGxlIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcmlwcGxlLXVuYm91bmRlZCIsaS51bmJvdW5kZWQpfSxpbnB1dHM6e2NvbG9yOlsibWF0UmlwcGxlQ29sb3IiLCJjb2xvciJdLHVuYm91bmRlZDpbIm1hdFJpcHBsZVVuYm91bmRlZCIsInVuYm91bmRlZCJdLGNlbnRlcmVkOlsibWF0UmlwcGxlQ2VudGVyZWQiLCJjZW50ZXJlZCJdLHJhZGl1czpbIm1hdFJpcHBsZVJhZGl1cyIsInJhZGl1cyJdLGFuaW1hdGlvbjpbIm1hdFJpcHBsZUFuaW1hdGlvbiIsImFuaW1hdGlvbiJdLGRpc2FibGVkOlsibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHRyaWdnZXI6WyJtYXRSaXBwbGVUcmlnZ2VyIiwidHJpZ2dlciJdfSxleHBvcnRBczpbIm1hdFJpcHBsZSJdfSksbn0pKCkseGM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLFpUZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2FuaW1hdGlvbk1vZGU9ZSx0aGlzLnN0YXRlPSJ1bmNoZWNrZWQiLHRoaXMuZGlzYWJsZWQ9ITF9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wc2V1ZG8tY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtcHNldWRvLWNoZWNrYm94Il0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUiLCJpbmRldGVybWluYXRlIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQiLCJjaGVja2VkIj09PWkuc3RhdGUpKCJtYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkIixpLmRpc2FibGVkKSgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX0saW5wdXRzOntzdGF0ZToic3RhdGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WycubWF0LXBzZXVkby1jaGVja2JveHt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JvcmRlcjoycHggc29saWQ7Ym9yZGVyLXJhZGl1czoycHg7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4LXNocmluazowO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKSxiYWNrZ3JvdW5kLWNvbG9yIDkwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO2NvbnRlbnQ6IiI7Ym9yZGVyLWJvdHRvbToycHggc29saWQgY3VycmVudENvbG9yO3RyYW5zaXRpb246b3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3gubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtcHNldWRvLWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZTo6YWZ0ZXJ7dG9wOjVweDtsZWZ0OjFweDt3aWR0aDoxMHB4O29wYWNpdHk6MTtib3JkZXItcmFkaXVzOjJweH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkOjphZnRlcnt0b3A6Mi40cHg7bGVmdDoxcHg7d2lkdGg6OHB4O2hlaWdodDozcHg7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7b3BhY2l0eToxO2JveC1zaXppbmc6Y29udGVudC1ib3h9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSlRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbl19KSxufSkoKSxqQz1uZXcgc2UoIk1BVF9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCIpLEdDPShnbyhjbGFzc3t9KSxuZXcgc2UoIk1hdE9wdGdyb3VwIikpLCRUZT0wLHpDPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0hMSl7dGhpcy5zb3VyY2U9dCx0aGlzLmlzVXNlcklucHV0PWV9fSxlRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYXJlbnQ9cix0aGlzLmdyb3VwPW8sdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9IiIsdGhpcy5pZD0ibWF0LW9wdGlvbi0iKyRUZSsrLHRoaXMub25TZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZX1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQubXVsdGlwbGV9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmRpc2FibGVkfHx0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSl9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4hKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlzYWJsZVJpcHBsZSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLl9hY3RpdmV9Z2V0IHZpZXdWYWx1ZSgpe3JldHVybih0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnRleHRDb250ZW50fHwiIikudHJpbSgpfXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWRlc2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWQmJih0aGlzLl9zZWxlY3RlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLl9lbWl0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoKSl9Zm9jdXMoZSxpKXtsZXQgcj10aGlzLl9nZXRIb3N0RWxlbWVudCgpOyJmdW5jdGlvbiI9PXR5cGVvZiByLmZvY3VzJiZyLmZvY3VzKGkpfXNldEFjdGl2ZVN0eWxlcygpe3RoaXMuX2FjdGl2ZXx8KHRoaXMuX2FjdGl2ZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2V0SW5hY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmUmJih0aGlzLl9hY3RpdmU9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldExhYmVsKCl7cmV0dXJuIHRoaXMudmlld1ZhbHVlfV9oYW5kbGVLZXlkb3duKGUpeygxMz09PWUua2V5Q29kZXx8MzI9PT1lLmtleUNvZGUpJiYhTXIoZSkmJih0aGlzLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLGUucHJldmVudERlZmF1bHQoKSl9X3NlbGVjdFZpYUludGVyYWN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8KHRoaXMuX3NlbGVjdGVkPSF0aGlzLm11bHRpcGxlfHwhdGhpcy5fc2VsZWN0ZWQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCEwKSl9X2dldEFyaWFTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGVkfHwhdGhpcy5tdWx0aXBsZSYmbnVsbH1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2lmKHRoaXMuX3NlbGVjdGVkKXtsZXQgZT10aGlzLnZpZXdWYWx1ZTtlIT09dGhpcy5fbW9zdFJlY2VudFZpZXdWYWx1ZSYmKHRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWU9ZSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KGU9ITEpe3RoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXcgekModGhpcyxlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7dmFsdWU6InZhbHVlIixpZDoiaWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e29uU2VsZWN0aW9uQ2hhbmdlOiJvblNlbGVjdGlvbkNoYW5nZSJ9fSksbn0pKCksdWE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGVEZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhqQyw4KSx3KEdDLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtb3B0aW9uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJvcHRpb24iLDEsIm1hdC1vcHRpb24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pLDImZSYmKEFhKCJpZCIsaS5pZCksemUoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1zZWxlY3RlZCIsaS5fZ2V0QXJpYVNlbGVjdGVkKCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJtYXQtc2VsZWN0ZWQiLGkuc2VsZWN0ZWQpKCJtYXQtb3B0aW9uLW11bHRpcGxlIixpLm11bHRpcGxlKSgibWF0LWFjdGl2ZSIsaS5hY3RpdmUpKCJtYXQtb3B0aW9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGV4cG9ydEFzOlsibWF0T3B0aW9uIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6V1RlLGRlY2xzOjUsdmFyczo0LGNvbnN0czpbWyJjbGFzcyIsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIiw0LCJuZ0lmIl0sWzEsIm1hdC1vcHRpb24tdGV4dCJdLFsiY2xhc3MiLCJjZGstdmlzdWFsbHktaGlkZGVuIiw0LCJuZ0lmIl0sWyJtYXQtcmlwcGxlIiwiIiwxLCJtYXQtb3B0aW9uLXJpcHBsZSIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIl0sWzEsIm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94IiwzLCJzdGF0ZSIsImRpc2FibGVkIl0sWzEsImNkay12aXN1YWxseS1oaWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxqVGUsMSwyLCJtYXQtcHNldWRvLWNoZWNrYm94IiwwKSxnKDEsInNwYW4iLDEpLE5uKDIpLHYoKSxFKDMsR1RlLDIsMSwic3BhbiIsMiksTig0LCJkaXYiLDMpKSwyJmUmJihiKCJuZ0lmIixpLm11bHRpcGxlKSx4KDMpLGIoIm5nSWYiLGkuZ3JvdXAmJmkuZ3JvdXAuX2luZXJ0KSx4KDEpLGIoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlZHx8aS5kaXNhYmxlUmlwcGxlKSl9LGRlcGVuZGVuY2llczpbZXMsWGUsWlRlXSxzdHlsZXM6WycubWF0LW9wdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDo0OHB4O2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246bm9uZTttYXgtd2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtb3B0aW9uW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1vcHRpb257dGV4dC1hbGlnbjpyaWdodH0ubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtb3B0aW9uIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW9wdGlvbiAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVdey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1vcHRncm91cCAubWF0LW9wdGlvbjpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe3BhZGRpbmctbGVmdDoxNnB4O3BhZGRpbmctcmlnaHQ6MzJweH0ubWF0LW9wdGlvbi5tYXQtYWN0aXZlOjpiZWZvcmV7Y29udGVudDoiIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17b3BhY2l0eTouNX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoxMHB4O2hlaWdodDowO2JvcmRlci1ib3R0b206c29saWQgMTBweDtib3JkZXItcmFkaXVzOjEwcHh9W2Rpcj1ydGxdIC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6OmFmdGVye3JpZ2h0OmF1dG87bGVmdDoxNnB4fS5tYXQtb3B0aW9uLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1hdC1vcHRpb24gLm1hdC1vcHRpb24tcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1vcHRpb24tcHNldWRvLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gV0Mobix0LGUpe2lmKGUubGVuZ3RoKXtsZXQgaT10LnRvQXJyYXkoKSxyPWUudG9BcnJheSgpLG89MDtmb3IobGV0IHM9MDtzPG4rMTtzKyspaVtzXS5ncm91cCYmaVtzXS5ncm91cD09PXJbb10mJm8rKztyZXR1cm4gb31yZXR1cm4gMH1mdW5jdGlvbiBrQShuLHQsZSxpKXtyZXR1cm4gbjxlP246bit0PmUraT9NYXRoLm1heCgwLG4taSt0KTplfXZhciBPXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsa2UsZG4sSlRlXX0pLG59KSgpLHNKPVsibWF0LWJ1dHRvbiIsIiJdLGFKPVsiKiJdLGlEZT1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxyRGU9cHMoZ28oTHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksJG49KCgpPT57Y2xhc3MgbiBleHRlbmRzIHJEZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuaXNSb3VuZEJ1dHRvbj10aGlzLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHRoaXMuaXNJY29uQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IobGV0IG8gb2YgaURlKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKG8pJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQobyk7ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLmUpe3JldHVybiBlLnNvbWUoaT0+dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHpyKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoZXMsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yaXBwbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRkE9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGksZSxyKSx0aGlzLl9uZ1pvbmU9byx0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHM9cz0+e3RoaXMuZGlzYWJsZWQmJihzLnByZXZlbnREZWZhdWx0KCkscy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9KTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cyl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6ciksdyhBZSksdyhMaSw4KSx3KHB0LDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhIiwibWF0LWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1yYWlzZWQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJhIiwibWF0LWZhYiIsIiJdLFsiYSIsIm1hdC1taW5pLWZhYiIsIiJdLFsiYSIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYSIsIm1hdC1mbGF0LWJ1dHRvbiIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD8tMTppLnRhYkluZGV4KSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpLGF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKCJtYXQtYnV0dG9uLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpzSixuZ0NvbnRlbnRTZWxlY3RvcnM6YUosZGVjbHM6NCx2YXJzOjUsY29uc3RzOltbMSwibWF0LWJ1dHRvbi13cmFwcGVyIl0sWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1idXR0b24tcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlVHJpZ2dlciJdLFsxLCJtYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLGcoMCwic3BhbiIsMCksTm4oMSksdigpLE4oMiwic3BhbiIsMSkoMywic3BhbiIsMikpLDImZSYmKHgoMiksYXQoIm1hdC1idXR0b24tcmlwcGxlLXJvdW5kIixpLmlzUm91bmRCdXR0b258fGkuaXNJY29uQnV0dG9uKSxiKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5faXNSaXBwbGVEaXNhYmxlZCgpKSgibWF0UmlwcGxlQ2VudGVyZWQiLGkuaXNJY29uQnV0dG9uKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSkpfSxkZXBlbmRlbmNpZXM6W2VzXSxzdHlsZXM6WyIubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b246aG92ZXI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH19Lm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKX0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1yYWlzZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1yYWlzZWQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LXJhaXNlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1yYWlzZWQtYnV0dG9uLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1zdHJva2VkLWJ1dHRvbntib3JkZXI6MXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtwYWRkaW5nOjAgMTVweDtsaW5lLWhlaWdodDozNHB4fS5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDotMXB4O2xlZnQ6LTFweDtyaWdodDotMXB4O2JvdHRvbTotMXB4fS5tYXQtZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6MTZweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1taW5pLWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LW1pbmktZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1taW5pLWZhYi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVye3BhZGRpbmc6OHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWljb24tYnV0dG9ue3BhZGRpbmc6MDttaW4td2lkdGg6MDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2ZsZXgtc2hyaW5rOjA7bGluZS1oZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJX0ubWF0LWljb24tYnV0dG9uIGksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bGluZS1oZWlnaHQ6MjRweH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7Ym9yZGVyLXJhZGl1czppbmhlcml0fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dHJhbnNpdGlvbjpub25lfS5tYXQtYnV0dG9uLXJpcHBsZS1yb3VuZHtib3JkZXItcmFkaXVzOjUwJTt6LWluZGV4OjF9Lm1hdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmxhdC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtcmFpc2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcj4qe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6aW5oZXJpdDt3aWR0aDoyLjVlbTtoZWlnaHQ6Mi41ZW19Lm1hdC1mbGF0LWJ1dHRvbjo6YmVmb3JlLC5tYXQtcmFpc2VkLWJ1dHRvbjo6YmVmb3JlLC5tYXQtZmFiOjpiZWZvcmUsLm1hdC1taW5pLWZhYjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3Ryb2tlZC1idXR0b246OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgM3B4KSAqIC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mbGF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmFpc2VkLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaWNvbi1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZhYiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWluaS1mYWJ7b3V0bGluZTpzb2xpZCAxcHh9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUmk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3hjLGRuLGRuXX0pLG59KSgpLGtfPWNsYXNze30sTkE9Y2xhc3MgZXh0ZW5kcyBrX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2RhdGE9dH1jb25uZWN0KCl7cmV0dXJuIFd5KHRoaXMuX2RhdGEpP3RoaXMuX2RhdGE6anQodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319LExBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aWV3Q2FjaGVTaXplPTIwLHRoaXMuX3ZpZXdDYWNoZT1bXX1hcHBseUNoYW5nZXModCxlLGkscixvKXt0LmZvckVhY2hPcGVyYXRpb24oKHMsYSxsKT0+e2xldCBjLHU7bnVsbD09cy5wcmV2aW91c0luZGV4PyhjPXRoaXMuX2luc2VydFZpZXcoKCk9PmkocyxhLGwpLGwsZSxyKHMpKSx1PWM/MTowKTpudWxsPT1sPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoYSxlKSx1PTMpOihjPXRoaXMuX21vdmVWaWV3KGEsbCxlLHIocykpLHU9MiksbyYmbyh7Y29udGV4dDpjPy5jb250ZXh0LG9wZXJhdGlvbjp1LHJlY29yZDpzfSl9KX1kZXRhY2goKXtmb3IobGV0IHQgb2YgdGhpcy5fdmlld0NhY2hlKXQuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1faW5zZXJ0Vmlldyh0LGUsaSxyKXtsZXQgbz10aGlzLl9pbnNlcnRWaWV3RnJvbUNhY2hlKGUsaSk7aWYobylyZXR1cm4gdm9pZChvLmNvbnRleHQuJGltcGxpY2l0PXIpO2xldCBzPXQoKTtyZXR1cm4gaS5jcmVhdGVFbWJlZGRlZFZpZXcocy50ZW1wbGF0ZVJlZixzLmNvbnRleHQscy5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyh0LGUpe2xldCBpPWUuZGV0YWNoKHQpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGksZSl9X21vdmVWaWV3KHQsZSxpLHIpe2xldCBvPWkuZ2V0KHQpO3JldHVybiBpLm1vdmUobyxlKSxvLmNvbnRleHQuJGltcGxpY2l0PXIsb31fbWF5YmVDYWNoZVZpZXcodCxlKXtpZih0aGlzLl92aWV3Q2FjaGUubGVuZ3RoPHRoaXMudmlld0NhY2hlU2l6ZSl0aGlzLl92aWV3Q2FjaGUucHVzaCh0KTtlbHNle2xldCBpPWUuaW5kZXhPZih0KTstMT09PWk/dC5kZXN0cm95KCk6ZS5yZW1vdmUoaSl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKHQsZSl7bGV0IGk9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBpJiZlLmluc2VydChpLHQpLGl8fG51bGx9fSxGXz1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExLGUsaT0hMCxyKXt0aGlzLl9tdWx0aXBsZT10LHRoaXMuX2VtaXRDaGFuZ2VzPWksdGhpcy5jb21wYXJlV2l0aD1yLHRoaXMuX3NlbGVjdGlvbj1uZXcgU2V0LHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5fc2VsZWN0ZWRUb0VtaXQ9W10sdGhpcy5jaGFuZ2VkPW5ldyBUZSxlJiZlLmxlbmd0aCYmKHQ/ZS5mb3JFYWNoKG89PnRoaXMuX21hcmtTZWxlY3RlZChvKSk6dGhpcy5fbWFya1NlbGVjdGVkKGVbMF0pLHRoaXMuX3NlbGVjdGVkVG9FbWl0Lmxlbmd0aD0wKX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD1BcnJheS5mcm9tKHRoaXMuX3NlbGVjdGlvbi52YWx1ZXMoKSkpLHRoaXMuX3NlbGVjdGVkfXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX21hcmtTZWxlY3RlZChpKSk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWRlc2VsZWN0KC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KSx0LmZvckVhY2goaT0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1zZXRTZWxlY3Rpb24oLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpO2xldCBlPXRoaXMuc2VsZWN0ZWQsaT1uZXcgU2V0KHQpO3QuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpLGUuZmlsdGVyKG89PiFpLmhhcyhvKSkuZm9yRWFjaChvPT50aGlzLl91bm1hcmtTZWxlY3RlZChvKSk7bGV0IHI9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxyfXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHQpP3RoaXMuZGVzZWxlY3QodCk6dGhpcy5zZWxlY3QodCl9Y2xlYXIodD0hMCl7dGhpcy5fdW5tYXJrQWxsKCk7bGV0IGU9dGhpcy5faGFzUXVldWVkQ2hhbmdlcygpO3JldHVybiB0JiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSxlfWlzU2VsZWN0ZWQodCl7aWYodGhpcy5jb21wYXJlV2l0aCl7Zm9yKGxldCBlIG9mIHRoaXMuX3NlbGVjdGlvbilpZih0aGlzLmNvbXBhcmVXaXRoKGUsdCkpcmV0dXJuITA7cmV0dXJuITF9cmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5oYXModCl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5fc2VsZWN0aW9uLnNpemV9aGFzVmFsdWUoKXtyZXR1cm4hdGhpcy5pc0VtcHR5KCl9c29ydCh0KXt0aGlzLl9tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmdGhpcy5fc2VsZWN0ZWQuc29ydCh0KX1pc011bHRpcGxlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9zZWxlY3RlZD1udWxsLCh0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGh8fHRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKSYmKHRoaXMuY2hhbmdlZC5uZXh0KHtzb3VyY2U6dGhpcyxhZGRlZDp0aGlzLl9zZWxlY3RlZFRvRW1pdCxyZW1vdmVkOnRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXR9KSx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdKX1fbWFya1NlbGVjdGVkKHQpe3RoaXMuaXNTZWxlY3RlZCh0KXx8KHRoaXMuX211bHRpcGxlfHx0aGlzLl91bm1hcmtBbGwoKSx0aGlzLmlzU2VsZWN0ZWQodCl8fHRoaXMuX3NlbGVjdGlvbi5hZGQodCksdGhpcy5fZW1pdENoYW5nZXMmJnRoaXMuX3NlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCkmJih0aGlzLl9zZWxlY3Rpb24uZGVsZXRlKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9kZXNlbGVjdGVkVG9FbWl0LnB1c2godCkpfV91bm1hcmtBbGwoKXt0aGlzLmlzRW1wdHkoKXx8dGhpcy5fc2VsZWN0aW9uLmZvckVhY2godD0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQodCkpfV92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCl7fV9oYXNRdWV1ZWRDaGFuZ2VzKCl7cmV0dXJuISghdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5sZW5ndGgmJiF0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGgpfX0sUVY9bmV3IHNlKCJfVmlld1JlcGVhdGVyIiksb0RlPVsiY29udGVudFdyYXBwZXIiXSxzRGU9WyIqIl0sZEo9bmV3IHNlKCJWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSIpO2Z1bmN0aW9uIGFEZShuKXtyZXR1cm4gbi5fc2Nyb2xsU3RyYXRlZ3l9dmFyIHBKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtU2l6ZT0yMCx0aGlzLl9taW5CdWZmZXJQeD0xMDAsdGhpcy5fbWF4QnVmZmVyUHg9MjAwLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgVGUsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPXRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UucGlwZShkaSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pfWF0dGFjaCh0KXt0aGlzLl92aWV3cG9ydD10LHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodCxlLGkpe3RoaXMuX2l0ZW1TaXplPXQsdGhpcy5fbWluQnVmZmVyUHg9ZSx0aGlzLl9tYXhCdWZmZXJQeD1pLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRhTGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJlZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleCh0LGUpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92aWV3cG9ydC5zY3JvbGxUb09mZnNldCh0KnRoaXMuX2l0ZW1TaXplLGUpfV91cGRhdGVUb3RhbENvbnRlbnRTaXplKCl7IXRoaXMuX3ZpZXdwb3J0fHx0aGlzLl92aWV3cG9ydC5zZXRUb3RhbENvbnRlbnRTaXplKHRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSp0aGlzLl9pdGVtU2l6ZSl9X3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKXtpZighdGhpcy5fdmlld3BvcnQpcmV0dXJuO2xldCB0PXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxlPXtzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZH0saT10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxyPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKSxvPXRoaXMuX3ZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoKSxzPXRoaXMuX2l0ZW1TaXplPjA/by90aGlzLl9pdGVtU2l6ZTowO2lmKGUuZW5kPnIpe2xldCBsPU1hdGguY2VpbChpL3RoaXMuX2l0ZW1TaXplKSxjPU1hdGgubWF4KDAsTWF0aC5taW4ocyxyLWwpKTtzIT1jJiYocz1jLG89Yyp0aGlzLl9pdGVtU2l6ZSxlLnN0YXJ0PU1hdGguZmxvb3IocykpLGUuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4ocixlLnN0YXJ0K2wpKX1sZXQgYT1vLWUuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYoYTx0aGlzLl9taW5CdWZmZXJQeCYmMCE9ZS5zdGFydCl7bGV0IGw9TWF0aC5jZWlsKCh0aGlzLl9tYXhCdWZmZXJQeC1hKS90aGlzLl9pdGVtU2l6ZSk7ZS5zdGFydD1NYXRoLm1heCgwLGUuc3RhcnQtbCksZS5lbmQ9TWF0aC5taW4ocixNYXRoLmNlaWwocysoaSt0aGlzLl9taW5CdWZmZXJQeCkvdGhpcy5faXRlbVNpemUpKX1lbHNle2xldCBsPWUuZW5kKnRoaXMuX2l0ZW1TaXplLShvK2kpO2lmKGw8dGhpcy5fbWluQnVmZmVyUHgmJmUuZW5kIT1yKXtsZXQgYz1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWwpL3RoaXMuX2l0ZW1TaXplKTtjPjAmJihlLmVuZD1NYXRoLm1pbihyLGUuZW5kK2MpLGUuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHMtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNpemUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoZSksdGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmUuc3RhcnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKHMpKX19KHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX1nZXQgaXRlbVNpemUoKXtyZXR1cm4gdGhpcy5faXRlbVNpemV9c2V0IGl0ZW1TaXplKGUpe3RoaXMuX2l0ZW1TaXplPVBpKGUpfWdldCBtaW5CdWZmZXJQeCgpe3JldHVybiB0aGlzLl9taW5CdWZmZXJQeH1zZXQgbWluQnVmZmVyUHgoZSl7dGhpcy5fbWluQnVmZmVyUHg9UGkoZSl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21heEJ1ZmZlclB4fXNldCBtYXhCdWZmZXJQeChlKXt0aGlzLl9tYXhCdWZmZXJQeD1QaShlKX1uZ09uQ2hhbmdlcygpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuaXRlbVNpemUsdGhpcy5taW5CdWZmZXJQeCx0aGlzLm1heEJ1ZmZlclB4KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsIml0ZW1TaXplIiwiIl1dLGlucHV0czp7aXRlbVNpemU6Iml0ZW1TaXplIixtaW5CdWZmZXJQeDoibWluQnVmZmVyUHgiLG1heEJ1ZmZlclB4OiJtYXhCdWZmZXJQeCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6ZEosdXNlRmFjdG9yeTphRGUsZGVwczpbcmkoKCk9Pm4pXX1dKSx6dF19KSxufSkoKSxpbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX3Njcm9sbGVkPW5ldyBUZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9cn1yZWdpc3RlcihlKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGUpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGUsZS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoZSkpKX1kZXJlZ2lzdGVyKGUpe2xldCBpPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoZSk7aSYmKGkudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGUpKX1zY3JvbGxlZChlPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBRdChpPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2xldCByPWU+MD90aGlzLl9zY3JvbGxlZC5waXBlKHpjKGUpKS5zdWJzY3JpYmUoaSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGkpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntyLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6anQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGUsaSk9PnRoaXMuZGVyZWdpc3RlcihpKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGUsaSl7bGV0IHI9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoaSkucGlwZShIZShvPT4hb3x8ci5pbmRleE9mKG8pPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgocixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyxlKSYmaS5wdXNoKG8pfSksaX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZSxpKXtsZXQgcj1jYShpKSxvPWUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYocj09bylyZXR1cm4hMH13aGlsZShyPXIucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bGkodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKHB0KSxSKHVpKSxSKEJ0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxZcD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuZWxlbWVudFJlZj1lLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1pLHRoaXMubmdab25lPXIsdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgUXQocz0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmxpKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShzKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1lLmxlZnQmJihlLmxlZnQ9cj9lLmVuZDplLnN0YXJ0KSxudWxsPT1lLnJpZ2h0JiYoZS5yaWdodD1yP2Uuc3RhcnQ6ZS5lbmQpLG51bGwhPWUuYm90dG9tJiYoZS50b3A9aS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQtZS5ib3R0b20pLHImJjAhPXdfKCk/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUubGVmdCksMj09d18oKT9lLmxlZnQ9ZS5yaWdodDoxPT13XygpJiYoZS5sZWZ0PWUucmlnaHQ/LWUucmlnaHQ6ZS5yaWdodCkpOm51bGwhPWUucmlnaHQmJihlLmxlZnQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGUpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt3QSgpP2kuc2Nyb2xsVG8oZSk6KG51bGwhPWUudG9wJiYoaS5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKGkuc2Nyb2xsTGVmdD1lLmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpPSJsZWZ0IixyPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09ZSlyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWUpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2xldCBzPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPXM/cjppOiJlbmQiPT1lJiYoZT1zP2k6cikscyYmMj09d18oKT9lPT1pP28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnQ6by5zY3JvbGxMZWZ0OnMmJjE9PXdfKCk/ZT09aT9vLnNjcm9sbExlZnQrby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoOi1vLnNjcm9sbExlZnQ6ZT09aT9vLnNjcm9sbExlZnQ6by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksbn0pKCksZGE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IFRlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZSh6YyhlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIodWkpLFIocHQpLFIoQnQsOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGNKPW5ldyBzZSgiVklSVFVBTF9TQ1JPTExBQkxFIiksdURlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZcHtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKX1tZWFzdXJlVmlld3BvcnRTaXplKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWU/aS5jbGllbnRXaWR0aDppLmNsaWVudEhlaWdodH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpbSksdyhwdCksdyhpciw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHBEZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9MTzpmZyxxQz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxhLHIscyksdGhpcy5lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuc2Nyb2xsYWJsZT1jLHRoaXMuX3BsYXRmb3JtPVNvKHVpKSx0aGlzLl9kZXRhY2hlZFN1YmplY3Q9bmV3IFRlLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyBUZSx0aGlzLl9vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX2FwcGVuZE9ubHk9ITEsdGhpcy5zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBRdCh1PT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShkPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9PnUubmV4dChkKSkpKSksdGhpcy5yZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LHRoaXMuX3RvdGFsQ29udGVudFNpemU9MCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iIix0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9IiIsdGhpcy5fcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH0sdGhpcy5fZGF0YUxlbmd0aD0wLHRoaXMuX3ZpZXdwb3J0U2l6ZT0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W10sdGhpcy5fdmlld3BvcnRDaGFuZ2VzPXZuLkVNUFRZLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1sLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xsYWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlvbihlKXt0aGlzLl9vcmllbnRhdGlvbiE9PWUmJih0aGlzLl9vcmllbnRhdGlvbj1lLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Z2V0IGFwcGVuZE9ubHkoKXtyZXR1cm4gdGhpcy5fYXBwZW5kT25seX1zZXQgYXBwZW5kT25seShlKXt0aGlzLl9hcHBlbmRPbmx5PVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKFZuKG51bGwpLHpjKDAscERlKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9YXR0YWNoKGUpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9ZSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUob3QodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGk9PntsZXQgcj1pLmxlbmd0aDtyIT09dGhpcy5fZGF0YUxlbmd0aCYmKHRoaXMuX2RhdGFMZW5ndGg9cix0aGlzLl9zY3JvbGxTdHJhdGVneS5vbkRhdGFMZW5ndGhDaGFuZ2VkKCkpLHRoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KX0pfWRldGFjaCgpe3RoaXMuX2Zvck9mPW51bGwsdGhpcy5fZGV0YWNoZWRTdWJqZWN0Lm5leHQoKX1nZXREYXRhTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RhdGFMZW5ndGh9Z2V0Vmlld3BvcnRTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0U2l6ZX1nZXRSZW5kZXJlZFJhbmdlKCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkUmFuZ2V9bWVhc3VyZUJvdW5kaW5nQ2xpZW50UmVjdFdpdGhTY3JvbGxPZmZzZXQoZSl7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19c2V0VG90YWxDb250ZW50U2l6ZShlKXt0aGlzLl90b3RhbENvbnRlbnRTaXplIT09ZSYmKHRoaXMuX3RvdGFsQ29udGVudFNpemU9ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpKX1zZXRSZW5kZXJlZFJhbmdlKGUpeyhmdW5jdGlvbihuLHQpe3JldHVybiBuLnN0YXJ0PT10LnN0YXJ0JiZuLmVuZD09dC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGUpfHwodGhpcy5hcHBlbmRPbmx5JiYoZT17c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsZS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWUpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoZSxpPSJ0by1zdGFydCIpe2U9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09aT8wOmU7bGV0IG89Imhvcml6b250YWwiPT10aGlzLm9yaWVudGF0aW9uLHM9bz8iWCI6IlkiLGw9YHRyYW5zbGF0ZSR7c30oJHtOdW1iZXIoKG8mJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU/LTE6MSkqZSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9ZSwidG8tZW5kIj09PWkmJihsKz1gIHRyYW5zbGF0ZSR7c30oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9bCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1sLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkpfXNjcm9sbFRvT2Zmc2V0KGUsaT0iYXV0byIpe2xldCByPXtiZWhhdmlvcjppfTsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP3Iuc3RhcnQ9ZTpyLnRvcD1lLHRoaXMuc2Nyb2xsYWJsZS5zY3JvbGxUbyhyKX1zY3JvbGxUb0luZGV4KGUsaT0iYXV0byIpe3RoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbFRvSW5kZXgoZSxpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpO3JldHVybiBpPXRoaXMuc2Nyb2xsYWJsZT09dGhpcz9yPT5zdXBlci5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpOnI9PnRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlU2Nyb2xsT2Zmc2V0KHIpLE1hdGgubWF4KDAsaShlPz8oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ic3RhcnQiOiJ0b3AiKSktdGhpcy5tZWFzdXJlVmlld3BvcnRPZmZzZXQoKSl9bWVhc3VyZVZpZXdwb3J0T2Zmc2V0KGUpe2xldCBpLHI9ImxlZnQiLG89InJpZ2h0IixzPSJydGwiPT10aGlzLmRpcj8udmFsdWU7aT0ic3RhcnQiPT1lP3M/bzpyOiJlbmQiPT1lP3M/cjpvOmV8fCgiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoidG9wIik7bGV0IGE9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGkpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtpXS1hfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7bGV0IGU9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShlKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShlLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKGUpe2UmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goZSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtsZXQgZT10aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbjt0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbj1bXTtmb3IobGV0IGkgb2YgZSlpKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVudFNpemV9cHhgOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHB0KSx3KGRKLDgpLHcoaXIsOCksdyhpbSksdyhkYSksdyhjSiw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQob0RlLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpZcCx1c2VGYWN0b3J5Oih0LGUpPT50fHxlLGRlcHM6W1tuZXcgT28sbmV3IGpnKGNKKV0sbl19XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpzRGUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlciJdLFsiY29udGVudFdyYXBwZXIiLCIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDAsMSksTm4oMiksdigpLE4oMywiZGl2IiwyKSksMiZlJiYoeCgzKSxPdCgid2lkdGgiLGkuX3RvdGFsQ29udGVudFdpZHRoKSgiaGVpZ2h0IixpLl90b3RhbENvbnRlbnRIZWlnaHQpKX0sc3R5bGVzOlsiY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay12aXJ0dWFsLXNjcm9sbGFibGV7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTpzY3JvbGwtcG9zaXRpb247Y29udGFpbjpzdHJpY3Q7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO2NvbnRhaW46Y29udGVudH1bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi1oZWlnaHQ6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4td2lkdGg6MTAwJX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj50YWJsZTpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye2hlaWdodDoxcHg7dHJhbnNmb3JtLW9yaWdpbjowIDA7ZmxleDowIDAgYXV0b31bZGlyPXJ0bF0gLmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gdUoobix0LGUpe2lmKCFlLmdldEJvdW5kaW5nQ2xpZW50UmVjdClyZXR1cm4gMDtsZXQgcj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiJob3Jpem9udGFsIj09PW4/InN0YXJ0Ij09PXQ/ci5sZWZ0OnIucmlnaHQ6InN0YXJ0Ij09PXQ/ci50b3A6ci5ib3R0b219dmFyIGhKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9ZSx0aGlzLl90ZW1wbGF0ZT1pLHRoaXMuX2RpZmZlcnM9cix0aGlzLl92aWV3UmVwZWF0ZXI9byx0aGlzLl92aWV3cG9ydD1zLHRoaXMudmlld0NoYW5nZT1uZXcgVGUsdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXM9bmV3IFRlLHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKFZuKG51bGwpLHlnKCksdmkoKFtsLGNdKT0+dGhpcy5fY2hhbmdlRGF0YVNvdXJjZShsLGMpKSxRcygxKSksdGhpcy5fZGlmZmVyPW51bGwsdGhpcy5fbmVlZHNVcGRhdGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBUZSx0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKGw9Pnt0aGlzLl9kYXRhPWwsdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUobD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9bCx0aGlzLnZpZXdDaGFuZ2Uub2JzZXJ2ZXJzLmxlbmd0aCYmYS5ydW4oKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQuYXR0YWNoKHRoaXMpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoZSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWUsZnVuY3Rpb24obil7cmV0dXJuIG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbm5lY3QmJiEobiBpbnN0YW5jZW9mIFV5KX0oZSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChlKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KG5ldyBOQShXeShlKT9lOkFycmF5LmZyb20oZXx8W10pKSl9Z2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeShlKXt0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeT1lPyhpLHIpPT5lKGkrKHRoaXMuX3JlbmRlcmVkUmFuZ2U/dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydDowKSxyKTp2b2lkIDB9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZShlKXtlJiYodGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fdGVtcGxhdGU9ZSl9Z2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplPVBpKGUpfW1lYXN1cmVSYW5nZVNpemUoZSxpKXtpZihlLnN0YXJ0Pj1lLmVuZClyZXR1cm4gMDtsZXQgcyxhLHI9ZS5zdGFydC10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LG89ZS5lbmQtZS5zdGFydDtmb3IobGV0IGw9MDtsPG87bCsrKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7cz1hPWMucm9vdE5vZGVzWzBdO2JyZWFrfX1mb3IobGV0IGw9by0xO2w+LTE7bC0tKXtsZXQgYz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChsK3IpO2lmKGMmJmMucm9vdE5vZGVzLmxlbmd0aCl7YT1jLnJvb3ROb2Rlc1tjLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiBzJiZhP3VKKGksImVuZCIsYSktdUooaSwic3RhcnQiLHMpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7bGV0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fcmVuZGVyZWRJdGVtcyk7ZT90aGlzLl9hcHBseUNoYW5nZXMoZSk6dGhpcy5fdXBkYXRlQ29udGV4dCgpLHRoaXMuX25lZWRzVXBkYXRlPSExfX1uZ09uRGVzdHJveSgpe3RoaXMuX3ZpZXdwb3J0LmRldGFjaCgpLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQodm9pZCAwKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMudmlld0NoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fdmlld1JlcGVhdGVyLmRldGFjaCgpfV9vblJlbmRlcmVkRGF0YUNoYW5nZSgpeyF0aGlzLl9yZW5kZXJlZFJhbmdlfHwodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChlLGkpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoZSxpKTppKSksdGhpcy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGUsaSl7cmV0dXJuIGUmJmUuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxpP2kuY29ubmVjdCh0aGlzKTpqdCgpfV91cGRhdGVDb250ZXh0KCl7bGV0IGU9dGhpcy5fZGF0YS5sZW5ndGgsaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2ktLTspe2xldCByPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGkpO3IuY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2ksci5jb250ZXh0LmNvdW50PWUsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhyLmNvbnRleHQpLHIuZGV0ZWN0Q2hhbmdlcygpfX1fYXBwbHlDaGFuZ2VzKGUpe3RoaXMuX3ZpZXdSZXBlYXRlci5hcHBseUNoYW5nZXMoZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLChvLHMsYSk9PnRoaXMuX2dldEVtYmVkZGVkVmlld0FyZ3MobyxhKSxvPT5vLml0ZW0pLGUuZm9yRWFjaElkZW50aXR5Q2hhbmdlKG89Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChvLmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9by5pdGVtfSk7bGV0IGk9dGhpcy5fZGF0YS5sZW5ndGgscj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO3ItLTspe2xldCBvPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KHIpO28uY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K3Isby5jb250ZXh0LmNvdW50PWksdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhvLmNvbnRleHQpfX1fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhlKXtlLmZpcnN0PTA9PT1lLmluZGV4LGUubGFzdD1lLmluZGV4PT09ZS5jb3VudC0xLGUuZXZlbj1lLmluZGV4JTI9PTAsZS5vZGQ9IWUuZXZlbn1fZ2V0RW1iZWRkZWRWaWV3QXJncyhlLGkpe3JldHVybnt0ZW1wbGF0ZVJlZjp0aGlzLl90ZW1wbGF0ZSxjb250ZXh0OnskaW1wbGljaXQ6ZS5pdGVtLGNka1ZpcnR1YWxGb3JPZjp0aGlzLl9jZGtWaXJ0dWFsRm9yT2YsaW5kZXg6LTEsY291bnQ6LTEsZmlyc3Q6ITEsbGFzdDohMSxvZGQ6ITEsZXZlbjohMX0saW5kZXg6aX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoeWkpLHcoT2kpLHcodGMpLHcoUVYpLHcocUMsNCksdyhwdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtWaXJ0dWFsRm9yIiwiIiwiY2RrVmlydHVhbEZvck9mIiwiIl1dLGlucHV0czp7Y2RrVmlydHVhbEZvck9mOiJjZGtWaXJ0dWFsRm9yT2YiLGNka1ZpcnR1YWxGb3JUcmFja0J5OiJjZGtWaXJ0dWFsRm9yVHJhY2tCeSIsY2RrVmlydHVhbEZvclRlbXBsYXRlOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGUiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpRVix1c2VDbGFzczpMQX1dKV19KSxufSkoKSxTdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7fSksbn0pKCksQ2Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1dwLFN1LFdwLFN1XX0pLG59KSgpLFlDPWNsYXNze2F0dGFjaCh0KXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRIb3N0PXQsdC5hdHRhY2godGhpcyl9ZGV0YWNoKCl7bGV0IHQ9dGhpcy5fYXR0YWNoZWRIb3N0O251bGwhPXQmJih0aGlzLl9hdHRhY2hlZEhvc3Q9bnVsbCx0LmRldGFjaCgpKX1nZXQgaXNBdHRhY2hlZCgpe3JldHVybiBudWxsIT10aGlzLl9hdHRhY2hlZEhvc3R9c2V0QXR0YWNoZWRIb3N0KHQpe3RoaXMuX2F0dGFjaGVkSG9zdD10fX0sQ2M9Y2xhc3MgZXh0ZW5kcyBZQ3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMuY29tcG9uZW50PXQsdGhpcy52aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5pbmplY3Rvcj1pLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXJ9fSxocz1jbGFzcyBleHRlbmRzIFlDe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy50ZW1wbGF0ZVJlZj10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuY29udGV4dD1pLHRoaXMuaW5qZWN0b3I9cn1nZXQgb3JpZ2luKCl7cmV0dXJuIHRoaXMudGVtcGxhdGVSZWYuZWxlbWVudFJlZn1hdHRhY2godCxlPXRoaXMuY29udGV4dCl7cmV0dXJuIHRoaXMuY29udGV4dD1lLHN1cGVyLmF0dGFjaCh0KX1kZXRhY2goKXtyZXR1cm4gdGhpcy5jb250ZXh0PXZvaWQgMCxzdXBlci5kZXRhY2goKX19LFpWPWNsYXNzIGV4dGVuZHMgWUN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmVsZW1lbnQ9dCBpbnN0YW5jZW9mIEFlP3QubmF0aXZlRWxlbWVudDp0fX0sWHA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW51bGx9aGFzQXR0YWNoZWQoKXtyZXR1cm4hIXRoaXMuX2F0dGFjaGVkUG9ydGFsfWF0dGFjaCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENjPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpKTp0IGluc3RhbmNlb2YgaHM/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hUZW1wbGF0ZVBvcnRhbCh0KSk6dGhpcy5hdHRhY2hEb21Qb3J0YWwmJnQgaW5zdGFuY2VvZiBaVj8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaERvbVBvcnRhbCh0KSk6dm9pZCAwfWRldGFjaCgpe3RoaXMuX2F0dGFjaGVkUG9ydGFsJiYodGhpcy5fYXR0YWNoZWRQb3J0YWwuc2V0QXR0YWNoZWRIb3N0KG51bGwpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPW51bGwpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpfWRpc3Bvc2UoKXt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuZGV0YWNoKCksdGhpcy5faW52b2tlRGlzcG9zZUZuKCksdGhpcy5faXNEaXNwb3NlZD0hMH1zZXREaXNwb3NlRm4odCl7dGhpcy5fZGlzcG9zZUZuPXR9X2ludm9rZURpc3Bvc2VGbigpe3RoaXMuX2Rpc3Bvc2VGbiYmKHRoaXMuX2Rpc3Bvc2VGbigpLHRoaXMuX2Rpc3Bvc2VGbj1udWxsKX19LFhDPWNsYXNzIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcigpLHRoaXMub3V0bGV0RWxlbWVudD10LHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX2FwcFJlZj1pLHRoaXMuX2RlZmF1bHRJbmplY3Rvcj1yLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXM9PntsZXQgYT1zLmVsZW1lbnQsbD10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7YS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLGEpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1zLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+e2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChhLGwpfSl9LHRoaXMuX2RvY3VtZW50PW99YXR0YWNoQ29tcG9uZW50UG9ydGFsKHQpe2xldCByLGk9KHQuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfHx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHQuY29tcG9uZW50KTtyZXR1cm4gdC52aWV3Q29udGFpbmVyUmVmPyhyPXQudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoaSx0LnZpZXdDb250YWluZXJSZWYubGVuZ3RoLHQuaW5qZWN0b3J8fHQudmlld0NvbnRhaW5lclJlZi5pbmplY3RvciksdGhpcy5zZXREaXNwb3NlRm4oKCk9PnIuZGVzdHJveSgpKSk6KHI9aS5jcmVhdGUodC5pbmplY3Rvcnx8dGhpcy5fZGVmYXVsdEluamVjdG9yfHx6bi5OVUxMKSx0aGlzLl9hcHBSZWYuYXR0YWNoVmlldyhyLmhvc3RWaWV3KSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e3RoaXMuX2FwcFJlZi52aWV3Q291bnQ+MCYmdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcoci5ob3N0Vmlldyksci5kZXN0cm95KCl9KSksdGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2dldENvbXBvbmVudFJvb3ROb2RlKHIpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHJ9YXR0YWNoVGVtcGxhdGVQb3J0YWwodCl7bGV0IGU9dC52aWV3Q29udGFpbmVyUmVmLGk9ZS5jcmVhdGVFbWJlZGRlZFZpZXcodC50ZW1wbGF0ZVJlZix0LmNvbnRleHQse2luamVjdG9yOnQuaW5qZWN0b3J9KTtyZXR1cm4gaS5yb290Tm9kZXMuZm9yRWFjaChyPT50aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQocikpLGkuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT57bGV0IHI9ZS5pbmRleE9mKGkpOy0xIT09ciYmZS5yZW1vdmUocil9KSx0aGlzLl9hdHRhY2hlZFBvcnRhbD10LGl9ZGlzcG9zZSgpe3N1cGVyLmRpc3Bvc2UoKSx0aGlzLm91dGxldEVsZW1lbnQucmVtb3ZlKCl9X2dldENvbXBvbmVudFJvb3ROb2RlKHQpe3JldHVybiB0Lmhvc3RWaWV3LnJvb3ROb2Rlc1swXX19LGZKPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoc3tjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcoeWkpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsIiwiIl1dLGV4cG9ydEFzOlsiY2RrUG9ydGFsIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJzPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBYcHtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWksdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLmF0dGFjaGVkPW5ldyBHLHRoaXMuYXR0YWNoRG9tUG9ydGFsPW89PntsZXQgcz1vLmVsZW1lbnQsYT10aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCJkb20tcG9ydGFsIik7by5zZXRBdHRhY2hlZEhvc3QodGhpcykscy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHMpLHRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocyksdGhpcy5fYXR0YWNoZWRQb3J0YWw9byxzdXBlci5zZXREaXNwb3NlRm4oKCk9PnthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQocyxhKX0pfSx0aGlzLl9kb2N1bWVudD1yfWdldCBwb3J0YWwoKXtyZXR1cm4gdGhpcy5fYXR0YWNoZWRQb3J0YWx9c2V0IHBvcnRhbChlKXt0aGlzLmhhc0F0dGFjaGVkKCkmJiFlJiYhdGhpcy5faXNJbml0aWFsaXplZHx8KHRoaXMuaGFzQXR0YWNoZWQoKSYmc3VwZXIuZGV0YWNoKCksZSYmc3VwZXIuYXR0YWNoKGUpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWV8fG51bGwpfWdldCBhdHRhY2hlZFJlZigpe3JldHVybiB0aGlzLl9hdHRhY2hlZFJlZn1uZ09uSW5pdCgpe3RoaXMuX2lzSW5pdGlhbGl6ZWQ9ITB9bmdPbkRlc3Ryb3koKXtzdXBlci5kaXNwb3NlKCksdGhpcy5fYXR0YWNoZWRQb3J0YWw9bnVsbCx0aGlzLl9hdHRhY2hlZFJlZj1udWxsfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT1udWxsIT1lLnZpZXdDb250YWluZXJSZWY/ZS52aWV3Q29udGFpbmVyUmVmOnRoaXMuX3ZpZXdDb250YWluZXJSZWYsbz0oZS5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ8fHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZS5jb21wb25lbnQpLHM9aS5jcmVhdGVDb21wb25lbnQobyxpLmxlbmd0aCxlLmluamVjdG9yfHxpLmluamVjdG9yKTtyZXR1cm4gaSE9PXRoaXMuX3ZpZXdDb250YWluZXJSZWYmJnRoaXMuX2dldFJvb3ROb2RlKCkuYXBwZW5kQ2hpbGQocy5ob3N0Vmlldy5yb290Tm9kZXNbMF0pLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+cy5kZXN0cm95KCkpLHRoaXMuX2F0dGFjaGVkUG9ydGFsPWUsdGhpcy5fYXR0YWNoZWRSZWY9cyx0aGlzLmF0dGFjaGVkLmVtaXQocyksc31hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXtlLnNldEF0dGFjaGVkSG9zdCh0aGlzKTtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhlLnRlbXBsYXRlUmVmLGUuY29udGV4dCx7aW5qZWN0b3I6ZS5pbmplY3Rvcn0pO3JldHVybiBzdXBlci5zZXREaXNwb3NlRm4oKCk9PnRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1pLHRoaXMuYXR0YWNoZWQuZW1pdChpKSxpfV9nZXRSb290Tm9kZSgpe2xldCBlPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiBlLm5vZGVUeXBlPT09ZS5FTEVNRU5UX05PREU/ZTplLnBhcmVudE5vZGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pLHcoeWkpLHcoQnQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLGlucHV0czp7cG9ydGFsOlsiY2RrUG9ydGFsT3V0bGV0IiwicG9ydGFsIl19LG91dHB1dHM6e2F0dGFjaGVkOiJhdHRhY2hlZCJ9LGV4cG9ydEFzOlsiY2RrUG9ydGFsT3V0bGV0Il0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHdjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxtSj13QSgpLFZBPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIGU1KG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gZ0oobix0KXtyZXR1cm4gdC5zb21lKGU9Pm4udG9wPGUudG9wfHxuLmJvdHRvbT5lLmJvdHRvbXx8bi5sZWZ0PGUubGVmdHx8bi5yaWdodD5lLnJpZ2h0KX12YXIgb209Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj10LHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jb25maWc9cix0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbH1hdHRhY2godCl7dGhpcy5fb3ZlcmxheVJlZj10fWVuYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbnx8KHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKHRoaXMuX2NvbmZpZz90aGlzLl9jb25maWcuc2Nyb2xsVGhyb3R0bGU6MCkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLmF1dG9DbG9zZSl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNpemUoKTtlNShlLFt7d2lkdGg6aSxoZWlnaHQ6cixib3R0b206cixyaWdodDppLHRvcDowLGxlZnQ6MH1dKSYmKHRoaXMuZGlzYWJsZSgpLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCkpKX19KSl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSxoRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX25nWm9uZT1yLHRoaXMubm9vcD0oKT0+bmV3IFZBLHRoaXMuY2xvc2U9cz0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl92aWV3cG9ydFJ1bGVyPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fZGV0YWNoPSgpPT57dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKX19YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXtpZih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24pcmV0dXJuO2xldCB0PXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoMCk7dGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcudGhyZXNob2xkJiZ0aGlzLl9jb25maWcudGhyZXNob2xkPjE/KHRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKS50b3AsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXQuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wO01hdGguYWJzKGUtdGhpcy5faW5pdGlhbFNjcm9sbFBvc2l0aW9uKT50aGlzLl9jb25maWcudGhyZXNob2xkP3RoaXMuX2RldGFjaCgpOnRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKX0pKTp0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dC5zdWJzY3JpYmUodGhpcy5fZGV0YWNoKX1kaXNhYmxlKCl7dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uJiYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGwpfWRldGFjaCgpe3RoaXMuZGlzYWJsZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbH19KHRoaXMuX3Njcm9sbERpc3BhdGNoZXIsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIscyksdGhpcy5ibG9jaz0oKT0+bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld3BvcnRSdWxlcj10LHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcz17dG9wOiIiLGxlZnQ6IiJ9LHRoaXMuX2lzRW5hYmxlZD0hMSx0aGlzLl9kb2N1bWVudD1lfWF0dGFjaCgpe31lbmFibGUoKXtpZih0aGlzLl9jYW5CZUVuYWJsZWQoKSl7bGV0IHQ9dGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3RoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCksdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLmxlZnQ9dC5zdHlsZS5sZWZ0fHwiIix0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wPXQuc3R5bGUudG9wfHwiIix0LnN0eWxlLmxlZnQ9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCksdC5zdHlsZS50b3A9bm8oLXRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSx0LmNsYXNzTGlzdC5hZGQoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKSx0aGlzLl9pc0VuYWJsZWQ9ITB9fWRpc2FibGUoKXtpZih0aGlzLl9pc0VuYWJsZWQpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpPXQuc3R5bGUscj10aGlzLl9kb2N1bWVudC5ib2R5LnN0eWxlLG89aS5zY3JvbGxCZWhhdmlvcnx8IiIscz1yLnNjcm9sbEJlaGF2aW9yfHwiIjt0aGlzLl9pc0VuYWJsZWQ9ITEsaS5sZWZ0PXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0LGkudG9wPXRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy50b3AsdC5jbGFzc0xpc3QucmVtb3ZlKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksbUomJihpLnNjcm9sbEJlaGF2aW9yPXIuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iKSx3aW5kb3cuc2Nyb2xsKHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24ubGVmdCx0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksbUomJihpLnNjcm9sbEJlaGF2aW9yPW8sci5zY3JvbGxCZWhhdmlvcj1zKX19X2NhbkJlRW5hYmxlZCgpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiBlLnNjcm9sbEhlaWdodD5pLmhlaWdodHx8ZS5zY3JvbGxXaWR0aD5pLndpZHRofX0odGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCksdGhpcy5yZXBvc2l0aW9uPXM9Pm5ldyBvbSh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fbmdab25lLHMpLHRoaXMuX2RvY3VtZW50PW99fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoaW0pLFIoZGEpLFIocHQpLFIoQnQpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxEbD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyBWQSx0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtsZXQgZT1PYmplY3Qua2V5cyh0KTtmb3IobGV0IGkgb2YgZSl2b2lkIDAhPT10W2ldJiYodGhpc1tpXT10W2ldKX19fSx4Sj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2F0dGFjaGVkT3ZlcmxheXM9W10sdGhpcy5fZG9jdW1lbnQ9ZX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCl9YWRkKGUpe3RoaXMucmVtb3ZlKGUpLHRoaXMuX2F0dGFjaGVkT3ZlcmxheXMucHVzaChlKX1yZW1vdmUoZSl7bGV0IGk9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5pbmRleE9mKGUpO2k+LTEmJnRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuc3BsaWNlKGksMSksMD09PXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMubGVuZ3RoJiZ0aGlzLmRldGFjaCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksZkRlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB4Sntjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKGUpLHRoaXMuX25nWm9uZT1pLHRoaXMuX2tleWRvd25MaXN0ZW5lcj1yPT57bGV0IG89dGhpcy5fYXR0YWNoZWRPdmVybGF5cztmb3IobGV0IHM9by5sZW5ndGgtMTtzPi0xO3MtLSlpZihvW3NdLl9rZXlkb3duRXZlbnRzLm9ic2VydmVycy5sZW5ndGg+MCl7bGV0IGE9b1tzXS5fa2V5ZG93bkV2ZW50czt0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bigoKT0+YS5uZXh0KHIpKTphLm5leHQocik7YnJlYWt9fX1hZGQoZSl7c3VwZXIuYWRkKGUpLHRoaXMuX2lzQXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT50aGlzLl9kb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lcikpOnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSx0aGlzLl9pc0F0dGFjaGVkPSEwKX1kZXRhY2goKXt0aGlzLl9pc0F0dGFjaGVkJiYodGhpcy5fZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxtRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcj1vPT57dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD12YyhvKX0sdGhpcy5fY2xpY2tMaXN0ZW5lcj1vPT57bGV0IHM9dmMobyksYT0iY2xpY2siPT09by50eXBlJiZ0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0P3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ6czt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW51bGw7bGV0IGw9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zbGljZSgpO2ZvcihsZXQgYz1sLmxlbmd0aC0xO2M+LTE7Yy0tKXtsZXQgdT1sW2NdO2lmKHUuX291dHNpZGVQb2ludGVyRXZlbnRzLm9ic2VydmVycy5sZW5ndGg8MXx8IXUuaGFzQXR0YWNoZWQoKSljb250aW51ZTtpZih1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHMpfHx1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGEpKWJyZWFrO2xldCBkPXUuX291dHNpZGVQb2ludGVyRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5kLm5leHQobykpOmQubmV4dChvKX19fWFkZChlKXtpZihzdXBlci5hZGQoZSksIXRoaXMuX2lzQXR0YWNoZWQpe2xldCBpPXRoaXMuX2RvY3VtZW50LmJvZHk7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSkpOnRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKGkpLHRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlPWkuc3R5bGUuY3Vyc29yLGkuc3R5bGUuY3Vyc29yPSJwb2ludGVyIix0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSEwKSx0aGlzLl9pc0F0dGFjaGVkPSEwfX1kZXRhY2goKXtpZih0aGlzLl9pc0F0dGFjaGVkKXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKGUuc3R5bGUuY3Vyc29yPXRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSksdGhpcy5faXNBdHRhY2hlZD0hMX19X2FkZEV2ZW50TGlzdGVuZXJzKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEJ0KSxSKHVpKSxSKHB0LDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxOXz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5fY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCl9Z2V0Q29udGFpbmVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fV9jcmVhdGVDb250YWluZXIoKXtsZXQgZT0iY2RrLW92ZXJsYXktY29udGFpbmVyIjtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fExDKCkpe2xldCByPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2V9W3BsYXRmb3JtPSJzZXJ2ZXIiXSwgLiR7ZX1bcGxhdGZvcm09InRlc3QiXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb10ucmVtb3ZlKCl9bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc0xpc3QuYWRkKGUpLExDKCk/aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoQnQpLFIodWkpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxUdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1PSExKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fbG9jYXRpb249bCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXUsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcgVGUsdGhpcy5fYXR0YWNobWVudHM9bmV3IFRlLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBUZSx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXI9ZD0+dGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KGQpLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXI9ZD0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcChkLnRhcmdldCl9LHRoaXMuX2tleWRvd25FdmVudHM9bmV3IFRlLHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzPW5ldyBUZSxyLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ci5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ci5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXshdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KTtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSx0aGlzLl9jb25maWcuZGlzcG9zZU9uTmF2aWdhdGlvbiYmKHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz10aGlzLl9sb2NhdGlvbi5zdWJzY3JpYmUoKCk9PnRoaXMuZGlzcG9zZSgpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksImZ1bmN0aW9uIj09dHlwZW9mIGU/Lm9uRGVzdHJveSYmZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5kZXRhY2goKSkpfSksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtsZXQgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH1kaXNwb3NlKCl7bGV0IHQ9dGhpcy5oYXNBdHRhY2hlZCgpO3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9ob3N0Py5yZW1vdmUoKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT10aGlzLl9ob3N0PW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZywuLi50fSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfXNldERpcmVjdGlvbih0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZyxkaXJlY3Rpb246dH0sdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpfWFkZFBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITApfXJlbW92ZVBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITEpfWdldERpcmVjdGlvbigpe2xldCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtsZXQgdD10aGlzLl9wYW5lLnN0eWxlO3Qud2lkdGg9bm8odGhpcy5fY29uZmlnLndpZHRoKSx0LmhlaWdodD1ubyh0aGlzLl9jb25maWcuaGVpZ2h0KSx0Lm1pbldpZHRoPW5vKHRoaXMuX2NvbmZpZy5taW5XaWR0aCksdC5taW5IZWlnaHQ9bm8odGhpcy5fY29uZmlnLm1pbkhlaWdodCksdC5tYXhXaWR0aD1ubyh0aGlzLl9jb25maWcubWF4V2lkdGgpLHQubWF4SGVpZ2h0PW5vKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpfV90b2dnbGVQb2ludGVyRXZlbnRzKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyIiOiJub25lIn1fYXR0YWNoQmFja2Ryb3AoKXtsZXQgdD0iY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyI7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9uIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSwhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9iYWNrZHJvcEVsZW1lbnQmJnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0PXRoaXMuX2JhY2tkcm9wRWxlbWVudDtpZih0KXtpZih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHQpO3QuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcil9KSx0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuX2JhY2tkcm9wVGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCl9LDUwMCkpfX1fdG9nZ2xlQ2xhc3Nlcyh0LGUsaSl7bGV0IHI9TV8oZXx8W10pLmZpbHRlcihvPT4hIW8pO3IubGVuZ3RoJiYoaT90LmNsYXNzTGlzdC5hZGQoLi4ucik6dC5jbGFzc0xpc3QucmVtb3ZlKC4uLnIpKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh1bih0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCk9PnsoIXRoaXMuX3BhbmV8fCF0aGlzLl9ob3N0fHwwPT09dGhpcy5fcGFuZS5jaGlsZHJlbi5sZW5ndGgpJiYodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9ob3N0LnJlbW92ZSgpKSx0LnVuc3Vic2NyaWJlKCkpfSl9KX1fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCl7bGV0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX1fZGlzcG9zZUJhY2tkcm9wKHQpe3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKSx0LnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wRWxlbWVudD09PXQmJih0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCkpLHRoaXMuX2JhY2tkcm9wVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9iYWNrZHJvcFRpbWVvdXQpLHRoaXMuX2JhY2tkcm9wVGltZW91dD12b2lkIDApfX0sX0o9ImNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3giLGdEZT0vKFtBLVphLXolXSspJC87ZnVuY3Rpb24gcm0obix0KXtmb3IobGV0IGUgaW4gdCl0Lmhhc093blByb3BlcnR5KGUpJiYobltlXT10W2VdKTtyZXR1cm4gbn1mdW5jdGlvbiB2SihuKXtpZigibnVtYmVyIiE9dHlwZW9mIG4mJm51bGwhPW4pe2xldFt0LGVdPW4uc3BsaXQoZ0RlKTtyZXR1cm4gZSYmInB4IiE9PWU/bnVsbDpwYXJzZUZsb2F0KHQpfXJldHVybiBufHxudWxsfWZ1bmN0aW9uIHlKKG4pe3JldHVybnt0b3A6TWF0aC5mbG9vcihuLnRvcCkscmlnaHQ6TWF0aC5mbG9vcihuLnJpZ2h0KSxib3R0b206TWF0aC5mbG9vcihuLmJvdHRvbSksbGVmdDpNYXRoLmZsb29yKG4ubGVmdCksd2lkdGg6TWF0aC5mbG9vcihuLndpZHRoKSxoZWlnaHQ6TWF0aC5mbG9vcihuLmhlaWdodCl9fXZhciBiSj0iY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXIiLF9EZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX3BsYXRmb3JtPXIsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1vfWdsb2JhbCgpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9jc3NQb3NpdGlvbj0ic3RhdGljIix0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PSIiLHRoaXMuX2FsaWduSXRlbXM9IiIsdGhpcy5feFBvc2l0aW9uPSIiLHRoaXMuX3hPZmZzZXQ9IiIsdGhpcy5fd2lkdGg9IiIsdGhpcy5faGVpZ2h0PSIiLHRoaXMuX2lzRGlzcG9zZWQ9ITF9YXR0YWNoKHQpe2xldCBlPXQuZ2V0Q29uZmlnKCk7dGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX3dpZHRoJiYhZS53aWR0aCYmdC51cGRhdGVTaXplKHt3aWR0aDp0aGlzLl93aWR0aH0pLHRoaXMuX2hlaWdodCYmIWUuaGVpZ2h0JiZ0LnVwZGF0ZVNpemUoe2hlaWdodDp0aGlzLl9oZWlnaHR9KSx0Lmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoYkopLHRoaXMuX2lzRGlzcG9zZWQ9ITF9dG9wKHQ9IiIpe3JldHVybiB0aGlzLl9ib3R0b21PZmZzZXQ9IiIsdGhpcy5fdG9wT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1zdGFydCIsdGhpc31sZWZ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJsZWZ0Iix0aGlzfWJvdHRvbSh0PSIiKXtyZXR1cm4gdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD10LHRoaXMuX2FsaWduSXRlbXM9ImZsZXgtZW5kIix0aGlzfXJpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJyaWdodCIsdGhpc31zdGFydCh0PSIiKXtyZXR1cm4gdGhpcy5feE9mZnNldD10LHRoaXMuX3hQb3NpdGlvbj0ic3RhcnQiLHRoaXN9ZW5kKHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJlbmQiLHRoaXN9d2lkdGgodD0iIil7cmV0dXJuIHRoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0fSk6dGhpcy5fd2lkdGg9dCx0aGlzfWhlaWdodCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe2hlaWdodDp0fSk6dGhpcy5faGVpZ2h0PXQsdGhpc31jZW50ZXJIb3Jpem9udGFsbHkodD0iIil7cmV0dXJuIHRoaXMubGVmdCh0KSx0aGlzLl94UG9zaXRpb249ImNlbnRlciIsdGhpc31jZW50ZXJWZXJ0aWNhbGx5KHQ9IiIpe3JldHVybiB0aGlzLnRvcCh0KSx0aGlzLl9hbGlnbkl0ZW1zPSJjZW50ZXIiLHRoaXN9YXBwbHkoKXtpZighdGhpcy5fb3ZlcmxheVJlZnx8IXRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5zdHlsZSxlPXRoaXMuX292ZXJsYXlSZWYuaG9zdEVsZW1lbnQuc3R5bGUsaT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLHt3aWR0aDpyLGhlaWdodDpvLG1heFdpZHRoOnMsbWF4SGVpZ2h0OmF9PWksbD0hKCIxMDAlIiE9PXImJiIxMDB2dyIhPT1yfHxzJiYiMTAwJSIhPT1zJiYiMTAwdnciIT09cyksYz0hKCIxMDAlIiE9PW8mJiIxMDB2aCIhPT1vfHxhJiYiMTAwJSIhPT1hJiYiMTAwdmgiIT09YSksdT10aGlzLl94UG9zaXRpb24sZD10aGlzLl94T2Zmc2V0LHA9InJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLmRpcmVjdGlvbixoPSIiLGY9IiIsbT0iIjtsP209ImZsZXgtc3RhcnQiOiJjZW50ZXIiPT09dT8obT0iY2VudGVyIixwP2Y9ZDpoPWQpOnA/ImxlZnQiPT09dXx8ImVuZCI9PT11PyhtPSJmbGV4LWVuZCIsaD1kKTooInJpZ2h0Ij09PXV8fCJzdGFydCI9PT11KSYmKG09ImZsZXgtc3RhcnQiLGY9ZCk6ImxlZnQiPT09dXx8InN0YXJ0Ij09PXU/KG09ImZsZXgtc3RhcnQiLGg9ZCk6KCJyaWdodCI9PT11fHwiZW5kIj09PXUpJiYobT0iZmxleC1lbmQiLGY9ZCksdC5wb3NpdGlvbj10aGlzLl9jc3NQb3NpdGlvbix0Lm1hcmdpbkxlZnQ9bD8iMCI6aCx0Lm1hcmdpblRvcD1jPyIwIjp0aGlzLl90b3BPZmZzZXQsdC5tYXJnaW5Cb3R0b209dGhpcy5fYm90dG9tT2Zmc2V0LHQubWFyZ2luUmlnaHQ9bD8iMCI6ZixlLmp1c3RpZnlDb250ZW50PW0sZS5hbGlnbkl0ZW1zPWM/ImZsZXgtc3RhcnQiOnRoaXMuX2FsaWduSXRlbXN9ZGlzcG9zZSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9vdmVybGF5UmVmKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudCxpPWUuc3R5bGU7ZS5jbGFzc0xpc3QucmVtb3ZlKGJKKSxpLmp1c3RpZnlDb250ZW50PWkuYWxpZ25JdGVtcz10Lm1hcmdpblRvcD10Lm1hcmdpbkJvdHRvbT10Lm1hcmdpbkxlZnQ9dC5tYXJnaW5SaWdodD10LnBvc2l0aW9uPSIiLHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwfX19ZmxleGlibGVDb25uZWN0ZWRUbyhlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW8sdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuX3Njcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IFRlLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChfSiksdGhpcy5fb3ZlcmxheVJlZj10LHRoaXMuX2JvdW5kaW5nQm94PXQuaG9zdEVsZW1lbnQsdGhpcy5fcGFuZT10Lm92ZXJsYXlFbGVtZW50LHRoaXMuX2lzRGlzcG9zZWQ9ITEsdGhpcy5faXNJbml0aWFsUmVuZGVyPSEwLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLmFwcGx5KCl9KX1hcHBseSgpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2lmKCF0aGlzLl9pc0luaXRpYWxSZW5kZXImJnRoaXMuX3Bvc2l0aW9uTG9ja2VkJiZ0aGlzLl9sYXN0UG9zaXRpb24pcmV0dXJuIHZvaWQgdGhpcy5yZWFwcGx5TGFzdFBvc2l0aW9uKCk7dGhpcy5fY2xlYXJQYW5lbENsYXNzZXMoKSx0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX29yaWdpblJlY3Q9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLHRoaXMuX292ZXJsYXlSZWN0PXRoaXMuX3BhbmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fY29udGFpbmVyUmVjdD10aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgcyx0PXRoaXMuX29yaWdpblJlY3QsZT10aGlzLl9vdmVybGF5UmVjdCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2NvbnRhaW5lclJlY3Qsbz1bXTtmb3IobGV0IGEgb2YgdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zKXtsZXQgbD10aGlzLl9nZXRPcmlnaW5Qb2ludCh0LHIsYSksYz10aGlzLl9nZXRPdmVybGF5UG9pbnQobCxlLGEpLHU9dGhpcy5fZ2V0T3ZlcmxheUZpdChjLGUsaSxhKTtpZih1LmlzQ29tcGxldGVseVdpdGhpblZpZXdwb3J0KXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYSxsKTt0aGlzLl9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHUsYyxpKT9vLnB1c2goe3Bvc2l0aW9uOmEsb3JpZ2luOmwsb3ZlcmxheVJlY3Q6ZSxib3VuZGluZ0JveFJlY3Q6dGhpcy5fY2FsY3VsYXRlQm91bmRpbmdCb3hSZWN0KGwsYSl9KTooIXN8fHMub3ZlcmxheUZpdC52aXNpYmxlQXJlYTx1LnZpc2libGVBcmVhKSYmKHM9e292ZXJsYXlGaXQ6dSxvdmVybGF5UG9pbnQ6YyxvcmlnaW5Qb2ludDpsLHBvc2l0aW9uOmEsb3ZlcmxheVJlY3Q6ZX0pfWlmKG8ubGVuZ3RoKXtsZXQgYT1udWxsLGw9LTE7Zm9yKGxldCBjIG9mIG8pe2xldCB1PWMuYm91bmRpbmdCb3hSZWN0LndpZHRoKmMuYm91bmRpbmdCb3hSZWN0LmhlaWdodCooYy5wb3NpdGlvbi53ZWlnaHR8fDEpO3U+bCYmKGw9dSxhPWMpfXJldHVybiB0aGlzLl9pc1B1c2hlZD0hMSx2b2lkIHRoaXMuX2FwcGx5UG9zaXRpb24oYS5wb3NpdGlvbixhLm9yaWdpbil9aWYodGhpcy5fY2FuUHVzaClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITAsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKHMucG9zaXRpb24scy5vcmlnaW5Qb2ludCk7dGhpcy5fYXBwbHlQb3NpdGlvbihzLnBvc2l0aW9uLHMub3JpZ2luUG9pbnQpfWRldGFjaCgpe3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fbGFzdFBvc2l0aW9uPW51bGwsdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50PW51bGwsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9ib3VuZGluZ0JveCYmcm0odGhpcy5fYm91bmRpbmdCb3guc3R5bGUse3RvcDoiIixsZWZ0OiIiLHJpZ2h0OiIiLGJvdHRvbToiIixoZWlnaHQ6IiIsd2lkdGg6IiIsYWxpZ25JdGVtczoiIixqdXN0aWZ5Q29udGVudDoiIn0pLHRoaXMuX3BhbmUmJnRoaXMuX3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoX0opLHRoaXMuZGV0YWNoKCksdGhpcy5fcG9zaXRpb25DaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9ib3VuZGluZ0JveD1udWxsLHRoaXMuX2lzRGlzcG9zZWQ9ITApfXJlYXBwbHlMYXN0UG9zaXRpb24oKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtsZXQgdD10aGlzLl9sYXN0UG9zaXRpb247aWYodCl7dGhpcy5fb3JpZ2luUmVjdD10aGlzLl9nZXRPcmlnaW5SZWN0KCksdGhpcy5fb3ZlcmxheVJlY3Q9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBlPXRoaXMuX2dldE9yaWdpblBvaW50KHRoaXMuX29yaWdpblJlY3QsdGhpcy5fY29udGFpbmVyUmVjdCx0KTt0aGlzLl9hcHBseVBvc2l0aW9uKHQsZSl9ZWxzZSB0aGlzLmFwcGx5KCl9d2l0aFNjcm9sbGFibGVDb250YWluZXJzKHQpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlcz10LHRoaXN9d2l0aFBvc2l0aW9ucyh0KXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zPXQsLTE9PT10LmluZGV4T2YodGhpcy5fbGFzdFBvc2l0aW9uKSYmKHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsKSx0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHRoaXN9d2l0aFZpZXdwb3J0TWFyZ2luKHQpe3JldHVybiB0aGlzLl92aWV3cG9ydE1hcmdpbj10LHRoaXN9d2l0aEZsZXhpYmxlRGltZW5zaW9ucyh0PSEwKXtyZXR1cm4gdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zPXQsdGhpc313aXRoR3Jvd0FmdGVyT3Blbih0PSEwKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbj10LHRoaXN9d2l0aFB1c2godD0hMCl7cmV0dXJuIHRoaXMuX2NhblB1c2g9dCx0aGlzfXdpdGhMb2NrZWRQb3NpdGlvbih0PSEwKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25Mb2NrZWQ9dCx0aGlzfXNldE9yaWdpbih0KXtyZXR1cm4gdGhpcy5fb3JpZ2luPXQsdGhpc313aXRoRGVmYXVsdE9mZnNldFgodCl7cmV0dXJuIHRoaXMuX29mZnNldFg9dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WSh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WT10LHRoaXN9d2l0aFRyYW5zZm9ybU9yaWdpbk9uKHQpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcj10LHRoaXN9X2dldE9yaWdpblBvaW50KHQsZSxpKXtsZXQgcixvO2lmKCJjZW50ZXIiPT1pLm9yaWdpblgpcj10LmxlZnQrdC53aWR0aC8yO2Vsc2V7bGV0IHM9dGhpcy5faXNSdGwoKT90LnJpZ2h0OnQubGVmdCxhPXRoaXMuX2lzUnRsKCk/dC5sZWZ0OnQucmlnaHQ7cj0ic3RhcnQiPT1pLm9yaWdpblg/czphfXJldHVybiBlLmxlZnQ8MCYmKHItPWUubGVmdCksbz0iY2VudGVyIj09aS5vcmlnaW5ZP3QudG9wK3QuaGVpZ2h0LzI6InRvcCI9PWkub3JpZ2luWT90LnRvcDp0LmJvdHRvbSxlLnRvcDwwJiYoby09ZS50b3ApLHt4OnIseTpvfX1fZ2V0T3ZlcmxheVBvaW50KHQsZSxpKXtsZXQgcixvO3JldHVybiByPSJjZW50ZXIiPT1pLm92ZXJsYXlYPy1lLndpZHRoLzI6InN0YXJ0Ij09PWkub3ZlcmxheVg/dGhpcy5faXNSdGwoKT8tZS53aWR0aDowOnRoaXMuX2lzUnRsKCk/MDotZS53aWR0aCxvPSJjZW50ZXIiPT1pLm92ZXJsYXlZPy1lLmhlaWdodC8yOiJ0b3AiPT1pLm92ZXJsYXlZPzA6LWUuaGVpZ2h0LHt4OnQueCtyLHk6dC55K299fV9nZXRPdmVybGF5Rml0KHQsZSxpLHIpe2xldCBvPXlKKGUpLHt4OnMseTphfT10LGw9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxjPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7bCYmKHMrPWwpLGMmJihhKz1jKTtsZXQgcD0wLWEsaD1hK28uaGVpZ2h0LWkuaGVpZ2h0LGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby53aWR0aCwwLXMscytvLndpZHRoLWkud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby5oZWlnaHQscCxoKSxDPWYqbTtyZXR1cm57dmlzaWJsZUFyZWE6Qyxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDpvLndpZHRoKm8uaGVpZ2h0PT09QyxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PW8uaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmY9PW8ud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxpKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2xldCByPWkuYm90dG9tLWUueSxvPWkucmlnaHQtZS54LHM9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5IZWlnaHQpLGE9dkoodGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5taW5XaWR0aCksYz10LmZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5fHxudWxsIT1hJiZhPD1vO3JldHVybih0LmZpdHNJblZpZXdwb3J0VmVydGljYWxseXx8bnVsbCE9cyYmczw9cikmJmN9cmV0dXJuITF9X3B1c2hPdmVybGF5T25TY3JlZW4odCxlLGkpe2lmKHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudCYmdGhpcy5fcG9zaXRpb25Mb2NrZWQpcmV0dXJue3g6dC54K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC54LHk6dC55K3RoaXMuX3ByZXZpb3VzUHVzaEFtb3VudC55fTtsZXQgcj15SihlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSx1PTAsZD0wO3JldHVybiB1PXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsZD1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDp1LHk6ZH0se3g6dC54K3UseTp0LnkrZH19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSx1LGQscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBoPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmgscz10LnktaCxvPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHU9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpZD10LngsdT1pLnJpZ2h0LXQueDtlbHNle2xldCBoPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDt1PTIqaCxkPXQueC1oLHU+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihkPXQueC1mLzIpfXJldHVybnt0b3A6cyxsZWZ0OmQsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDp1LGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD1ubyhpLmhlaWdodCksci50b3A9bm8oaS50b3ApLHIuYm90dG9tPW5vKGkuYm90dG9tKSxyLndpZHRoPW5vKGkud2lkdGgpLHIubGVmdD1ubyhpLmxlZnQpLHIucmlnaHQ9bm8oaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD1ubyhvKSkscyYmKHIubWF4V2lkdGg9bm8ocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSxybSh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3JtKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXtybSh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCB1PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3JtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsdSkpLHJtKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsdSkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PW5vKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPW5vKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSkscm0odGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPW5vKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9bm8oby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOmdKKHQsaSksaXNPcmlnaW5PdXRzaWRlVmlldzplNSh0LGkpLGlzT3ZlcmxheUNsaXBwZWQ6Z0ooZSxpKSxpc092ZXJsYXlPdXRzaWRlVmlldzplNShlLGkpfX1fc3VidHJhY3RPdmVyZmxvd3ModCwuLi5lKXtyZXR1cm4gZS5yZWR1Y2UoKGkscik9PmktTWF0aC5tYXgociwwKSx0KX1fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsZT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGk9dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3RvcDppLnRvcCt0aGlzLl92aWV3cG9ydE1hcmdpbixsZWZ0OmkubGVmdCt0aGlzLl92aWV3cG9ydE1hcmdpbixyaWdodDppLmxlZnQrdC10aGlzLl92aWV3cG9ydE1hcmdpbixib3R0b206aS50b3ArZS10aGlzLl92aWV3cG9ydE1hcmdpbix3aWR0aDp0LTIqdGhpcy5fdmlld3BvcnRNYXJnaW4saGVpZ2h0OmUtMip0aGlzLl92aWV3cG9ydE1hcmdpbn19X2lzUnRsKCl7cmV0dXJuInJ0bCI9PT10aGlzLl9vdmVybGF5UmVmLmdldERpcmVjdGlvbigpfV9oYXNFeGFjdFBvc2l0aW9uKCl7cmV0dXJuIXRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9uc3x8dGhpcy5faXNQdXNoZWR9X2dldE9mZnNldCh0LGUpe3JldHVybiJ4Ij09PWU/bnVsbD09dC5vZmZzZXRYP3RoaXMuX29mZnNldFg6dC5vZmZzZXRYOm51bGw9PXQub2Zmc2V0WT90aGlzLl9vZmZzZXRZOnQub2Zmc2V0WX1fdmFsaWRhdGVQb3NpdGlvbnMoKXt9X2FkZFBhbmVsQ2xhc3Nlcyh0KXt0aGlzLl9wYW5lJiZNXyh0KS5mb3JFYWNoKGU9PnsiIiE9PWUmJi0xPT09dGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5pbmRleE9mKGUpJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5wdXNoKGUpLHRoaXMuX3BhbmUuY2xhc3NMaXN0LmFkZChlKSl9KX1fY2xlYXJQYW5lbENsYXNzZXMoKXt0aGlzLl9wYW5lJiYodGhpcy5fYXBwbGllZFBhbmVsQ2xhc3Nlcy5mb3JFYWNoKHQ9Pnt0aGlzLl9wYW5lLmNsYXNzTGlzdC5yZW1vdmUodCl9KSx0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzPVtdKX1fZ2V0T3JpZ2luUmVjdCgpe2xldCB0PXRoaXMuX29yaWdpbjtpZih0IGluc3RhbmNlb2YgQWUpcmV0dXJuIHQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0IGluc3RhbmNlb2YgRWxlbWVudClyZXR1cm4gdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgZT10LndpZHRofHwwLGk9dC5oZWlnaHR8fDA7cmV0dXJue3RvcDp0LnksYm90dG9tOnQueStpLGxlZnQ6dC54LHJpZ2h0OnQueCtlLGhlaWdodDppLHdpZHRoOmV9fX0oZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RvY3VtZW50LHRoaXMuX3BsYXRmb3JtLHRoaXMuX292ZXJsYXlDb250YWluZXIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKGRhKSxSKEJ0KSxSKHVpKSxSKE5fKSl9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksdkRlPTAsUWk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7dGhpcy5zY3JvbGxTdHJhdGVnaWVzPWUsdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1pLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yLHRoaXMuX3Bvc2l0aW9uQnVpbGRlcj1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2luamVjdG9yPWEsdGhpcy5fbmdab25lPWwsdGhpcy5fZG9jdW1lbnQ9Yyx0aGlzLl9kaXJlY3Rpb25hbGl0eT11LHRoaXMuX2xvY2F0aW9uPWQsdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlcj1wLHRoaXMuX2FuaW1hdGlvbnNNb2R1bGVUeXBlPWh9Y3JlYXRlKGUpe2xldCBpPXRoaXMuX2NyZWF0ZUhvc3RFbGVtZW50KCkscj10aGlzLl9jcmVhdGVQYW5lRWxlbWVudChpKSxvPXRoaXMuX2NyZWF0ZVBvcnRhbE91dGxldChyKSxzPW5ldyBEbChlKTtyZXR1cm4gcy5kaXJlY3Rpb249cy5kaXJlY3Rpb258fHRoaXMuX2RpcmVjdGlvbmFsaXR5LnZhbHVlLG5ldyBUdShvLGkscixzLHRoaXMuX25nWm9uZSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fbG9jYXRpb24sdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlciwiTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGUpfXBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9uQnVpbGRlcn1fY3JlYXRlUGFuZUVsZW1lbnQoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGkuaWQ9ImNkay1vdmVybGF5LSIrdkRlKyssaS5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1wYW5lIiksZS5hcHBlbmRDaGlsZChpKSxpfV9jcmVhdGVIb3N0RWxlbWVudCgpe2xldCBlPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl9vdmVybGF5Q29udGFpbmVyLmdldENvbnRhaW5lckVsZW1lbnQoKS5hcHBlbmRDaGlsZChlKSxlfV9jcmVhdGVQb3J0YWxPdXRsZXQoZSl7cmV0dXJuIHRoaXMuX2FwcFJlZnx8KHRoaXMuX2FwcFJlZj10aGlzLl9pbmplY3Rvci5nZXQoSmMpKSxuZXcgWEMoZSx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsdGhpcy5fYXBwUmVmLHRoaXMuX2luamVjdG9yLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihoRGUpLFIoTl8pLFIoRW8pLFIoX0RlKSxSKGZEZSksUih6biksUihwdCksUihCdCksUihpciksUihIeCksUihtRGUpLFIoTGksOCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHlEZT1be29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6InRvcCJ9LHtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WDoic3RhcnQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJib3R0b20ifSx7b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJlbmQiLG92ZXJsYXlZOiJ0b3AifV0sQ0o9bmV3IHNlKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5Iiksc209KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdfSksbn0pKCksUXA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kaXI9cyx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPXZuLkVNUFRZLHRoaXMudmlld3BvcnRNYXJnaW49MCx0aGlzLm9wZW49ITEsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy5iYWNrZHJvcENsaWNrPW5ldyBHLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5hdHRhY2g9bmV3IEcsdGhpcy5kZXRhY2g9bmV3IEcsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgRyx0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2s9bmV3IEcsdGhpcy5fdGVtcGxhdGVQb3J0YWw9bmV3IGhzKGksciksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PW8sdGhpcy5zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKX1nZXQgb2Zmc2V0WCgpe3JldHVybiB0aGlzLl9vZmZzZXRYfXNldCBvZmZzZXRYKGUpe3RoaXMuX29mZnNldFg9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IG9mZnNldFkoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WX1zZXQgb2Zmc2V0WShlKXt0aGlzLl9vZmZzZXRZPWUsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9Z2V0IGxvY2tQb3NpdGlvbigpe3JldHVybiB0aGlzLl9sb2NrUG9zaXRpb259c2V0IGxvY2tQb3NpdGlvbihlKXt0aGlzLl9sb2NrUG9zaXRpb249V3QoZSl9Z2V0IGZsZXhpYmxlRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnN9c2V0IGZsZXhpYmxlRGltZW5zaW9ucyhlKXt0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9V3QoZSl9Z2V0IGdyb3dBZnRlck9wZW4oKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbn1zZXQgZ3Jvd0FmdGVyT3BlbihlKXt0aGlzLl9ncm93QWZ0ZXJPcGVuPVd0KGUpfWdldCBwdXNoKCl7cmV0dXJuIHRoaXMuX3B1c2h9c2V0IHB1c2goZSl7dGhpcy5fcHVzaD1XdChlKX1nZXQgb3ZlcmxheVJlZigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIn1uZ09uRGVzdHJveSgpe3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxtaW5XaWR0aDp0aGlzLm1pbldpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxtaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSxlLm9yaWdpbiYmdGhpcy5vcGVuJiZ0aGlzLl9wb3NpdGlvbi5hcHBseSgpKSxlLm9wZW4mJih0aGlzLm9wZW4/dGhpcy5fYXR0YWNoT3ZlcmxheSgpOnRoaXMuX2RldGFjaE92ZXJsYXkoKSl9X2NyZWF0ZU92ZXJsYXkoKXsoIXRoaXMucG9zaXRpb25zfHwhdGhpcy5wb3NpdGlvbnMubGVuZ3RoKSYmKHRoaXMucG9zaXRpb25zPXlEZSk7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9idWlsZENvbmZpZygpKTt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249ZS5hdHRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249ZS5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5kZXRhY2guZW1pdCgpKSxlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheUtleWRvd24ubmV4dChpKSwyNz09PWkua2V5Q29kZSYmIXRoaXMuZGlzYWJsZUNsb3NlJiYhTXIoaSkmJihpLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGV0YWNoT3ZlcmxheSgpKX0pLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheU91dHNpZGVDbGljay5uZXh0KGkpfSl9X2J1aWxkQ29uZmlnKCl7bGV0IGU9dGhpcy5fcG9zaXRpb249dGhpcy5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCksaT1uZXcgRGwoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTplLHNjcm9sbFN0cmF0ZWd5OnRoaXMuc2Nyb2xsU3RyYXRlZ3ksaGFzQmFja2Ryb3A6dGhpcy5oYXNCYWNrZHJvcH0pO3JldHVybih0aGlzLndpZHRofHwwPT09dGhpcy53aWR0aCkmJihpLndpZHRoPXRoaXMud2lkdGgpLCh0aGlzLmhlaWdodHx8MD09PXRoaXMuaGVpZ2h0KSYmKGkuaGVpZ2h0PXRoaXMuaGVpZ2h0KSwodGhpcy5taW5XaWR0aHx8MD09PXRoaXMubWluV2lkdGgpJiYoaS5taW5XaWR0aD10aGlzLm1pbldpZHRoKSwodGhpcy5taW5IZWlnaHR8fDA9PT10aGlzLm1pbkhlaWdodCkmJihpLm1pbkhlaWdodD10aGlzLm1pbkhlaWdodCksdGhpcy5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPXRoaXMuYmFja2Ryb3BDbGFzcyksdGhpcy5wYW5lbENsYXNzJiYoaS5wYW5lbENsYXNzPXRoaXMucGFuZWxDbGFzcyksaX1fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKXtsZXQgaT10aGlzLnBvc2l0aW9ucy5tYXAocj0+KHtvcmlnaW5YOnIub3JpZ2luWCxvcmlnaW5ZOnIub3JpZ2luWSxvdmVybGF5WDpyLm92ZXJsYXlYLG92ZXJsYXlZOnIub3ZlcmxheVksb2Zmc2V0WDpyLm9mZnNldFh8fHRoaXMub2Zmc2V0WCxvZmZzZXRZOnIub2Zmc2V0WXx8dGhpcy5vZmZzZXRZLHBhbmVsQ2xhc3M6ci5wYW5lbENsYXNzfHx2b2lkIDB9KSk7cmV0dXJuIGUuc2V0T3JpZ2luKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKS53aXRoUG9zaXRpb25zKGkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnModGhpcy5mbGV4aWJsZURpbWVuc2lvbnMpLndpdGhQdXNoKHRoaXMucHVzaCkud2l0aEdyb3dBZnRlck9wZW4odGhpcy5ncm93QWZ0ZXJPcGVuKS53aXRoVmlld3BvcnRNYXJnaW4odGhpcy52aWV3cG9ydE1hcmdpbikud2l0aExvY2tlZFBvc2l0aW9uKHRoaXMubG9ja1Bvc2l0aW9uKS53aXRoVHJhbnNmb3JtT3JpZ2luT24odGhpcy50cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil9X2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKSk7cmV0dXJuIHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koZSksZX1fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luIGluc3RhbmNlb2Ygc20/dGhpcy5vcmlnaW4uZWxlbWVudFJlZjp0aGlzLm9yaWdpbn1fYXR0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5oYXNCYWNrZHJvcD10aGlzLmhhc0JhY2tkcm9wOnRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCl8fHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3RlbXBsYXRlUG9ydGFsKSx0aGlzLmhhc0JhY2tkcm9wP3RoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShlPT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoZSl9KTp0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjAmJih0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj10aGlzLl9wb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZShZeSgoKT0+dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjApKS5zdWJzY3JpYmUoZT0+e3RoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChlKSwwPT09dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSkpfV9kZXRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUWkpLHcoT2kpLHcoeWkpLHcoQ0opLHcoaXIsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiXSxbIiIsImNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIl1dLGlucHV0czp7b3JpZ2luOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsIm9yaWdpbiJdLHBvc2l0aW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMiLCJwb3NpdGlvbnMiXSxwb3NpdGlvblN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uU3RyYXRlZ3kiLCJwb3NpdGlvblN0cmF0ZWd5Il0sb2Zmc2V0WDpbImNka0Nvbm5lY3RlZE92ZXJsYXlPZmZzZXRYIiwib2Zmc2V0WCJdLG9mZnNldFk6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WSIsIm9mZnNldFkiXSx3aWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlXaWR0aCIsIndpZHRoIl0saGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhlaWdodCIsImhlaWdodCJdLG1pbldpZHRoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwibWluV2lkdGgiXSxtaW5IZWlnaHQ6WyJjZGtDb25uZWN0ZWRPdmVybGF5TWluSGVpZ2h0IiwibWluSGVpZ2h0Il0sYmFja2Ryb3BDbGFzczpbImNka0Nvbm5lY3RlZE92ZXJsYXlCYWNrZHJvcENsYXNzIiwiYmFja2Ryb3BDbGFzcyJdLHBhbmVsQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5UGFuZWxDbGFzcyIsInBhbmVsQ2xhc3MiXSx2aWV3cG9ydE1hcmdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlWaWV3cG9ydE1hcmdpbiIsInZpZXdwb3J0TWFyZ2luIl0sc2Nyb2xsU3RyYXRlZ3k6WyJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJzY3JvbGxTdHJhdGVneSJdLG9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5T3BlbiIsIm9wZW4iXSxkaXNhYmxlQ2xvc2U6WyJjZGtDb25uZWN0ZWRPdmVybGF5RGlzYWJsZUNsb3NlIiwiZGlzYWJsZUNsb3NlIl0sdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3I6WyJjZGtDb25uZWN0ZWRPdmVybGF5VHJhbnNmb3JtT3JpZ2luT24iLCJ0cmFuc2Zvcm1PcmlnaW5TZWxlY3RvciJdLGhhc0JhY2tkcm9wOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiaGFzQmFja2Ryb3AiXSxsb2NrUG9zaXRpb246WyJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwibG9ja1Bvc2l0aW9uIl0sZmxleGlibGVEaW1lbnNpb25zOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUZsZXhpYmxlRGltZW5zaW9ucyIsImZsZXhpYmxlRGltZW5zaW9ucyJdLGdyb3dBZnRlck9wZW46WyJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImdyb3dBZnRlck9wZW4iXSxwdXNoOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVB1c2giLCJwdXNoIl19LG91dHB1dHM6e2JhY2tkcm9wQ2xpY2s6ImJhY2tkcm9wQ2xpY2siLHBvc2l0aW9uQ2hhbmdlOiJwb3NpdGlvbkNoYW5nZSIsYXR0YWNoOiJhdHRhY2giLGRldGFjaDoiZGV0YWNoIixvdmVybGF5S2V5ZG93bjoib3ZlcmxheUtleWRvd24iLG92ZXJsYXlPdXRzaWRlQ2xpY2s6Im92ZXJsYXlPdXRzaWRlQ2xpY2sifSxleHBvcnRBczpbImNka0Nvbm5lY3RlZE92ZXJsYXkiXSxmZWF0dXJlczpbenRdfSksbn0pKCkseERlPXtwcm92aWRlOkNKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sVm89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUWkseERlXSxpbXBvcnRzOltXcCx3YyxDZCxDZF19KSxufSkoKTtmdW5jdGlvbiBDRGUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIpKDEsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5hY3Rpb24oKSl9KSxEKDIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMikseXQoZS5kYXRhLmFjdGlvbil9fWZ1bmN0aW9uIHdEZShuLHQpe312YXIgSEE9bmV3IHNlKCJNYXRTbmFja0JhckRhdGEiKSxMXz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucG9saXRlbmVzcz0iYXNzZXJ0aXZlIix0aGlzLmFubm91bmNlbWVudE1lc3NhZ2U9IiIsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZGF0YT1udWxsLHRoaXMuaG9yaXpvbnRhbFBvc2l0aW9uPSJjZW50ZXIiLHRoaXMudmVydGljYWxQb3NpdGlvbj0iYm90dG9tIn19LE1EZT1NYXRoLnBvdygyLDMxKS0xLGFtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fb3ZlcmxheVJlZj1lLHRoaXMuX2FmdGVyRGlzbWlzc2VkPW5ldyBUZSx0aGlzLl9hZnRlck9wZW5lZD1uZXcgVGUsdGhpcy5fb25BY3Rpb249bmV3IFRlLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExLHRoaXMuY29udGFpbmVySW5zdGFuY2U9dCx0Ll9vbkV4aXQuc3Vic2NyaWJlKCgpPT50aGlzLl9maW5pc2hEaXNtaXNzKCkpfWRpc21pc3MoKXt0aGlzLl9hZnRlckRpc21pc3NlZC5jbG9zZWR8fHRoaXMuY29udGFpbmVySW5zdGFuY2UuZXhpdCgpLGNsZWFyVGltZW91dCh0aGlzLl9kdXJhdGlvblRpbWVvdXRJZCl9ZGlzbWlzc1dpdGhBY3Rpb24oKXt0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fCh0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMCx0aGlzLl9vbkFjdGlvbi5uZXh0KCksdGhpcy5fb25BY3Rpb24uY29tcGxldGUoKSx0aGlzLmRpc21pc3MoKSksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1jbG9zZVdpdGhBY3Rpb24oKXt0aGlzLmRpc21pc3NXaXRoQWN0aW9uKCl9X2Rpc21pc3NBZnRlcih0KXt0aGlzLl9kdXJhdGlvblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLmRpc21pc3MoKSxNYXRoLm1pbih0LE1EZSkpfV9vcGVuKCl7dGhpcy5fYWZ0ZXJPcGVuZWQuY2xvc2VkfHwodGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCkpfV9maW5pc2hEaXNtaXNzKCl7dGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb25BY3Rpb24uY2xvc2VkfHx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyRGlzbWlzc2VkLm5leHQoe2Rpc21pc3NlZEJ5QWN0aW9uOnRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9ufSksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQuY29tcGxldGUoKSx0aGlzLl9kaXNtaXNzZWRCeUFjdGlvbj0hMX1hZnRlckRpc21pc3NlZCgpe3JldHVybiB0aGlzLl9hZnRlckRpc21pc3NlZH1hZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9vbkVudGVyfW9uQWN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQWN0aW9ufX0sU0RlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnNuYWNrQmFyUmVmPWUsdGhpcy5kYXRhPWl9YWN0aW9uKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzV2l0aEFjdGlvbigpfWdldCBoYXNBY3Rpb24oKXtyZXR1cm4hIXRoaXMuZGF0YS5hY3Rpb259fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzaW1wbGUtc25hY2stYmFyIl1dLGhvc3RBdHRyczpbMSwibWF0LXNpbXBsZS1zbmFja2JhciJdLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsIm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnQiXSxbImNsYXNzIiwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iLDQsIm5nSWYiXSxbMSwibWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24iXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsQ0RlLDMsMSwiZGl2IiwxKSksMiZlJiYoeCgxKSx5dChpLmRhdGEubWVzc2FnZSkseCgxKSxiKCJuZ0lmIixpLmhhc0FjdGlvbikpfSxkZXBlbmRlbmNpZXM6W1hlLCRuXSxzdHlsZXM6WyIubWF0LXNpbXBsZS1zbmFja2JhcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO2xpbmUtaGVpZ2h0OjIwcHg7b3BhY2l0eToxfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntmbGV4LXNocmluazowO21hcmdpbjotOHB4IC04cHggLThweCA4cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9uIGJ1dHRvbnttYXgtaGVpZ2h0OjM2cHg7bWluLXdpZHRoOjB9W2Rpcj1ydGxdIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbnttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDo4cHh9Lm1hdC1zaW1wbGUtc25hY2stYmFyLWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRURlPXtzbmFja0JhclN0YXRlOkhyKCJzdGF0ZSIsW0VpKCJ2b2lkLCBoaWRkZW4iLHJuKHt0cmFuc2Zvcm06InNjYWxlKDAuOCkiLG9wYWNpdHk6MH0pKSxFaSgidmlzaWJsZSIscm4oe3RyYW5zZm9ybToic2NhbGUoMSkiLG9wYWNpdHk6MX0pKSxJaSgiKiA9PiB2aXNpYmxlIixWaSgiMTUwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiKSksSWkoIiogPT4gdm9pZCwgKiA9PiBoaWRkZW4iLFZpKCI3NW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LFREZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nWm9uZT1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX3BsYXRmb3JtPW8sdGhpcy5zbmFja0JhckNvbmZpZz1zLHRoaXMuX2Fubm91bmNlRGVsYXk9MTUwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9vbkFubm91bmNlPW5ldyBUZSx0aGlzLl9vbkV4aXQ9bmV3IFRlLHRoaXMuX29uRW50ZXI9bmV3IFRlLHRoaXMuX2FuaW1hdGlvblN0YXRlPSJ2b2lkIix0aGlzLmF0dGFjaERvbVBvcnRhbD1hPT57dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgbD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKGEpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksbH0sdGhpcy5fbGl2ZT0iYXNzZXJ0aXZlIiE9PXMucG9saXRlbmVzc3x8cy5hbm5vdW5jZW1lbnRNZXNzYWdlPyJvZmYiPT09cy5wb2xpdGVuZXNzPyJvZmYiOiJwb2xpdGUiOiJhc3NlcnRpdmUiLHRoaXMuX3BsYXRmb3JtLkZJUkVGT1gmJigicG9saXRlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJzdGF0dXMiKSwiYXNzZXJ0aXZlIj09PXRoaXMuX2xpdmUmJih0aGlzLl9yb2xlPSJhbGVydCIpKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fYXNzZXJ0Tm90QXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLGl9b25BbmltYXRpb25FbmQoZSl7bGV0e2Zyb21TdGF0ZTppLHRvU3RhdGU6cn09ZTtpZigoInZvaWQiPT09ciYmInZvaWQiIT09aXx8ImhpZGRlbiI9PT1yKSYmdGhpcy5fY29tcGxldGVFeGl0KCksInZpc2libGUiPT09cil7bGV0IG89dGhpcy5fb25FbnRlcjt0aGlzLl9uZ1pvbmUucnVuKCgpPT57by5uZXh0KCksby5jb21wbGV0ZSgpfSl9fWVudGVyKCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fYW5pbWF0aW9uU3RhdGU9InZpc2libGUiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpKX1leGl0KCl7cmV0dXJuIHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9hbmltYXRpb25TdGF0ZT0iaGlkZGVuIix0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXQtZXhpdCIsIiIpLGNsZWFyVGltZW91dCh0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZCl9KSx0aGlzLl9vbkV4aXR9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fY29tcGxldGVFeGl0KCl9X2NvbXBsZXRlRXhpdCgpe3RoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9vbkV4aXQubmV4dCgpLHRoaXMuX29uRXhpdC5jb21wbGV0ZSgpfSl9KX1fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuc25hY2tCYXJDb25maWcucGFuZWxDbGFzcztpJiYoQXJyYXkuaXNBcnJheShpKT9pLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKTplLmNsYXNzTGlzdC5hZGQoaSkpfV9hc3NlcnROb3RBdHRhY2hlZCgpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpfV9zY3JlZW5SZWFkZXJBbm5vdW5jZSgpe3RoaXMuX2Fubm91bmNlVGltZW91dElkfHx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9hbm5vdW5jZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWhpZGRlbl0iKSxpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbYXJpYS1saXZlXSIpO2lmKGUmJmkpe2xldCByPW51bGw7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJihyPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGUucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGkuYXBwZW5kQ2hpbGQoZSkscj8uZm9jdXMoKSx0aGlzLl9vbkFubm91bmNlLm5leHQoKSx0aGlzLl9vbkFubm91bmNlLmNvbXBsZXRlKCl9fSx0aGlzLl9hbm5vdW5jZURlbGF5KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KHVpKSx3KExfKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxmZWF0dXJlczpbdHRdfSksbn0pKCksRERlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBURGV7X2FmdGVyUG9ydGFsQXR0YWNoZWQoKXtzdXBlci5fYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpLCJjZW50ZXIiPT09dGhpcy5zbmFja0JhckNvbmZpZy5ob3Jpem9udGFsUG9zaXRpb24mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLWNlbnRlciIpLCJ0b3AiPT09dGhpcy5zbmFja0JhckNvbmZpZy52ZXJ0aWNhbFBvc2l0aW9uJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgibWF0LXNuYWNrLWJhci10b3AiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNuYWNrLWJhci1jb250YWluZXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc25hY2stYmFyLWNvbnRhaW5lciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZpMCgiQHN0YXRlLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQW5pbWF0aW9uRW5kKG8pfSksMiZlJiZyMCgiQHN0YXRlIixpLl9hbmltYXRpb25TdGF0ZSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsiY2RrUG9ydGFsT3V0bGV0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSx3RGUsMCwwLCJuZy10ZW1wbGF0ZSIsMSksdigpLE4oMiwiZGl2IikpLDImZSYmKHgoMiksemUoImFyaWEtbGl2ZSIsaS5fbGl2ZSkoInJvbGUiLGkuX3JvbGUpKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1zbmFjay1iYXItY29udGFpbmVye2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjoyNHB4O21heC13aWR0aDozM3Z3O21pbi13aWR0aDozNDRweDtwYWRkaW5nOjE0cHggMTZweDttaW4taGVpZ2h0OjQ4cHg7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyOnNvbGlkIDFweH0ubWF0LXNuYWNrLWJhci1oYW5kc2V0e3dpZHRoOjEwMCV9Lm1hdC1zbmFjay1iYXItaGFuZHNldCAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7bWFyZ2luOjhweDttYXgtd2lkdGg6MTAwJTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W0VEZS5zbmFja0JhclN0YXRlXX19KSxufSkoKSxyNT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbVm8sd2Msa2UsUmksZG4sZG5dfSksbn0pKCksd0o9bmV3IHNlKCJtYXQtc25hY2stYmFyLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExffX0pLElEZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fbGl2ZT1pLHRoaXMuX2luamVjdG9yPXIsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPW8sdGhpcy5fcGFyZW50U25hY2tCYXI9cyx0aGlzLl9kZWZhdWx0Q29uZmlnPWEsdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfWdldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtsZXQgZT10aGlzLl9wYXJlbnRTbmFja0JhcjtyZXR1cm4gZT9lLl9vcGVuZWRTbmFja0JhclJlZjp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsfXNldCBfb3BlbmVkU25hY2tCYXJSZWYoZSl7dGhpcy5fcGFyZW50U25hY2tCYXI/dGhpcy5fcGFyZW50U25hY2tCYXIuX29wZW5lZFNuYWNrQmFyUmVmPWU6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1lfW9wZW5Gcm9tQ29tcG9uZW50KGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW5Gcm9tVGVtcGxhdGUoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbihlLGk9IiIscil7bGV0IG89ey4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4ucn07cmV0dXJuIG8uZGF0YT17bWVzc2FnZTplLGFjdGlvbjppfSxvLmFubm91bmNlbWVudE1lc3NhZ2U9PT1lJiYoby5hbm5vdW5jZW1lbnRNZXNzYWdlPXZvaWQgMCksdGhpcy5vcGVuRnJvbUNvbXBvbmVudCh0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50LG8pfWRpc21pc3MoKXt0aGlzLl9vcGVuZWRTbmFja0JhclJlZiYmdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpfW5nT25EZXN0cm95KCl7dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCYmdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCl9X2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKGUsaSl7bGV0IG89em4uY3JlYXRlKHtwYXJlbnQ6aSYmaS52aWV3Q29udGFpbmVyUmVmJiZpLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6TF8sdXNlVmFsdWU6aX1dfSkscz1uZXcgQ2ModGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxpLnZpZXdDb250YWluZXJSZWYsbyksYT1lLmF0dGFjaChzKTtyZXR1cm4gYS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1pLGEuaW5zdGFuY2V9X2F0dGFjaChlLGkpe2xldCByPXsuLi5uZXcgTF8sLi4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5pfSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkocikscz10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLHIpLGE9bmV3IGFtKHMsbyk7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgbD1uZXcgaHMoZSxudWxsLHskaW1wbGljaXQ6ci5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwobCl9ZWxzZXtsZXQgbD10aGlzLl9jcmVhdGVJbmplY3RvcihyLGEpLGM9bmV3IENjKGUsdm9pZCAwLGwpLHU9cy5hdHRhY2hDb21wb25lbnRQb3J0YWwoYyk7YS5pbnN0YW5jZT11Lmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLnBpcGUob3Qoby5kZXRhY2htZW50cygpKSkuc3Vic2NyaWJlKGw9PntvLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MsbC5tYXRjaGVzKX0pLHIuYW5ub3VuY2VtZW50TWVzc2FnZSYmcy5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKHIuYW5ub3VuY2VtZW50TWVzc2FnZSxyLnBvbGl0ZW5lc3MpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKGEsciksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9YSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn1fYW5pbWF0ZVNuYWNrQmFyKGUsaSl7ZS5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT1lJiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksaS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9PntlLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOmUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxpLmR1cmF0aW9uJiZpLmR1cmF0aW9uPjAmJmUuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCk9PmUuX2Rpc21pc3NBZnRlcihpLmR1cmF0aW9uKSl9X2NyZWF0ZU92ZXJsYXkoZSl7bGV0IGk9bmV3IERsO2kuZGlyZWN0aW9uPWUuZGlyZWN0aW9uO2xldCByPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxvPSJydGwiPT09ZS5kaXJlY3Rpb24scz0ibGVmdCI9PT1lLmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFzJiYiY2VudGVyIiE9PWUuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBzP3IubGVmdCgiMCIpOmE/ci5yaWdodCgiMCIpOnIuY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT1lLnZlcnRpY2FsUG9zaXRpb24/ci50b3AoIjAiKTpyLmJvdHRvbSgiMCIpLGkucG9zaXRpb25TdHJhdGVneT1yLHRoaXMuX292ZXJsYXkuY3JlYXRlKGkpfV9jcmVhdGVJbmplY3RvcihlLGkpe3JldHVybiB6bi5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTphbSx1c2VWYWx1ZTppfSx7cHJvdmlkZTpIQSx1c2VWYWx1ZTplLmRhdGF9XX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKFVDKSxSKHpuKSxSKG5tKSxSKG4sMTIpLFIod0opKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxNSj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSURle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlLGkscixvLHMsYSksdGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudD1TRGUsdGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudD1ERGUsdGhpcy5oYW5kc2V0Q3NzQ2xhc3M9Im1hdC1zbmFjay1iYXItaGFuZHNldCJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoVUMpLFIoem4pLFIobm0pLFIobiwxMiksUih3SikpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOnI1fSksbn0pKCksUERlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxFSj0iXFx1MDAwMC1cXHUwMDIwXFx1MDA3Zi1cXHUwMDlmIixPRGU9bmV3IFJlZ0V4cCgiKD86W2EtekEtWl1bYS16QS1aMC05Ky4tXXsyLH06XFwvXFwvfGRhdGE6fHd3d1xcLilbXlxccyIrRUorJyJdezIsfVteXFxzJytFSisiXCInKX1cXF0sOjsuIT9dIiwiZ3UiKTtmdW5jdGlvbiBESihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXt0LmZsYWdzLmluY2x1ZGVzKCJnIil8fCh0PW5ldyBSZWdFeHAodCx0LmZsYWdzKyJnIikpO2xldCBlPVtdLGk9MDtmb3IobGV0IHIgb2Ygbi5tYXRjaEFsbCh0KSl7bGV0IG89ci5pbmRleCxzPXJbMF07bz5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG8pLG1hdGNoZXNSZWdleDohMX0pLGUucHVzaCh7aW5kZXg6byx0ZXh0OnMsbWF0Y2hlc1JlZ2V4OiEwfSksaT1vK3MubGVuZ3RofXJldHVybiBuLmxlbmd0aD5pJiZlLnB1c2goe2luZGV4OmksdGV4dDpuLnN1YnN0cmluZyhpLG4ubGVuZ3RoKSxtYXRjaGVzUmVnZXg6ITF9KSxlfShuLE9EZSkubWFwKCh7bWF0Y2hlc1JlZ2V4OnQsdGV4dDplfSk9Pih7aXNVUkw6dCx0ZXh0OmV9KSl9ZnVuY3Rpb24ga0RlKG4sdCl7aWYoMSZuJiYoS3QoMCksRCgxKSxadCgpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7eCgxKSxxZSgiICIsZS50ZXh0LCIgIil9fWZ1bmN0aW9uIEZEZShuLHQpe2lmKDEmbiYmKGcoMCwiYSIsNyksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4cigiaHJlZiIsZS50ZXh0LGRsKSx4KDEpLHl0KGUudGV4dCl9fWZ1bmN0aW9uIE5EZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxrRGUsMiwxLCJuZy1jb250YWluZXIiLDUpLEUoMixGRGUsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoMyk7eCgxKSxiKCJuZ0lmIiwhZS5pc1VSTCkoIm5nSWZFbHNlIixpKX19ZnVuY3Rpb24gTERlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWN0aW9uQnV0dG9uQ2xpY2tlZCgpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO3goMSkscWUoIiAiLGUuYWxlcnQuZm9sbG93dXBBY3Rpb24ubG9jYWxpemVkTGFiZWwsIiAiKX19dmFyIEFKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLnVua25vd25EYXRhPWksdGhpcy5zdG9yZT1yLHRoaXMuc3BsaXRCeVVSTD1ESix0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbih0aGlzLnN0b3JlKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGUpfW9uQ2xvc2VCdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYW0pLHcoSEEpLHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydC1kaXNwbGF5LXNuYWNrYmFyIl1dLGRlY2xzOjYsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gY2xvc2UgdGhlIHNuYWNrYmFyIG1lc3NhZ2XikJ9lYTRkOWZlNjE0MjBhM2ZjZTgxY2Y1NGM0YzYxNWUzYzE5YzY0NmE24pCfMTUzNjA4NzUxOTc0MzcwNzM2MjpEaXNtaXNzYCxbWzEsIm1lc3NhZ2UiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJkaXNtaXNzLWJ1dHRvbiIsMywiY2xpY2siXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsaW5rUGllY2UiLCIiXSxbInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLDMsImhyZWYiXSxbIm1hdC1idXR0b24iLCIiLDEsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApLEUoMSxORGUsNCwyLCJuZy1jb250YWluZXIiLDEpLHYoKSxnKDIsImRpdiIsMiksRSgzLExEZSwyLDEsImJ1dHRvbiIsMyksZyg0LCJidXR0b24iLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VCdXR0b25DbGlja2VkKCl9KSxEKDUsIiBEaXNtaXNzICIpLHYoKSgpKSwyJmUmJih4KDEpLGIoIm5nRm9yT2YiLGkuc3BsaXRCeVVSTChpLmFsZXJ0LmxvY2FsaXplZE1lc3NhZ2UpKSx4KDIpLGIoIm5nSWYiLGkuYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbjo1cHggMDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tbGVmdDphdXRvfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSUo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLnNuYWNrQmFyPWksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuc2VsZWN0KFJLKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoZT0+Qm9vbGVhbihlKSkpLnN1YnNjcmliZShlPT57dGhpcy5zaG93QWxlcnQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvd0FsZXJ0KGUpe3RoaXMuc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoQUose2R1cmF0aW9uOjVlMyxob3Jpem9udGFsUG9zaXRpb246InN0YXJ0Iix2ZXJ0aWNhbFBvc2l0aW9uOiJib3R0b20iLGRhdGE6ZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1KKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnQtc25hY2tiYXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFVBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxSaSxyNV19KSxufSkoKSx6QT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbdnUsVUEsUnIuZm9yRmVhdHVyZSgiYWxlcnRzIixCWiksTG8uZm9yRmVhdHVyZShbTFpdKV19KSxufSkoKTtmdW5jdGlvbiBWRGUobix0KXt9dmFyIGxtPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5yb2xlPSJkaWFsb2ciLHRoaXMucGFuZWxDbGFzcz0iIix0aGlzLmhhc0JhY2tkcm9wPSEwLHRoaXMuYmFja2Ryb3BDbGFzcz0iIix0aGlzLmRpc2FibGVDbG9zZT0hMSx0aGlzLndpZHRoPSIiLHRoaXMuaGVpZ2h0PSIiLHRoaXMuZGF0YT1udWxsLHRoaXMuYXJpYURlc2NyaWJlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWxsZWRCeT1udWxsLHRoaXMuYXJpYUxhYmVsPW51bGwsdGhpcy5hcmlhTW9kYWw9ITAsdGhpcy5hdXRvRm9jdXM9ImZpcnN0LXRhYmJhYmxlIix0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLmNsb3NlT25OYXZpZ2F0aW9uPSEwLHRoaXMuY2xvc2VPbkRlc3Ryb3k9ITB9fSxzNT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgWHB7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWksdGhpcy5fY29uZmlnPW8sdGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXI9cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdmVybGF5UmVmPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9bnVsbCx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsLHRoaXMuYXR0YWNoRG9tUG9ydGFsPXU9Pnt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgZD10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoRG9tUG9ydGFsKHUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxkfSx0aGlzLl9hcmlhTGFiZWxsZWRCeT10aGlzLl9jb25maWcuYXJpYUxhYmVsbGVkQnl8fG51bGwsdGhpcy5fZG9jdW1lbnQ9cn1fY29udGVudEF0dGFjaGVkKCl7dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCksdGhpcy5fY2FwdHVyZUluaXRpYWxGb2N1cygpfV9jYXB0dXJlSW5pdGlhbEZvY3VzKCl7dGhpcy5fdHJhcEZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXN0b3JlRm9jdXMoKX1hdHRhY2hDb21wb25lbnRQb3J0YWwoZSl7dGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoVGVtcGxhdGVQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLGl9X3JlY2FwdHVyZUZvY3VzKCl7dGhpcy5fY29udGFpbnNGb2N1cygpfHx0aGlzLl90cmFwRm9jdXMoKX1fZm9yY2VGb2N1cyhlLGkpe3RoaXMuX2ludGVyYWN0aXZpdHlDaGVja2VyLmlzRm9jdXNhYmxlKGUpfHwoZS50YWJJbmRleD0tMSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgcj0oKT0+e2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpLGUucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfTtlLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixyKX0pKSxlLmZvY3VzKGkpfV9mb2N1c0J5Q3NzU2VsZWN0b3IoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlKTtyJiZ0aGlzLl9mb3JjZUZvY3VzKHIsaSl9X3RyYXBGb2N1cygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtzd2l0Y2godGhpcy5fY29uZmlnLmF1dG9Gb2N1cyl7Y2FzZSExOmNhc2UiZGlhbG9nIjp0aGlzLl9jb250YWluc0ZvY3VzKCl8fGUuZm9jdXMoKTticmVhaztjYXNlITA6Y2FzZSJmaXJzdC10YWJiYWJsZSI6dGhpcy5fZm9jdXNUcmFwLmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS50aGVuKGk9PntpfHx0aGlzLl9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpfSk7YnJlYWs7Y2FzZSJmaXJzdC1oZWFkaW5nIjp0aGlzLl9mb2N1c0J5Q3NzU2VsZWN0b3IoJ2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIFtyb2xlPSJoZWFkaW5nIl0nKTticmVhaztkZWZhdWx0OnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3Rvcih0aGlzLl9jb25maWcuYXV0b0ZvY3VzKX19X3Jlc3RvcmVGb2N1cygpe2xldCBlPXRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMsaT1udWxsO2lmKCJzdHJpbmciPT10eXBlb2YgZT9pPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6ImJvb2xlYW4iPT10eXBlb2YgZT9pPWU/dGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ6bnVsbDplJiYoaT1lKSx0aGlzLl9jb25maWcucmVzdG9yZUZvY3VzJiZpJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5mb2N1cyl7bGV0IHI9TkMoKSxvPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsoIXJ8fHI9PT10aGlzLl9kb2N1bWVudC5ib2R5fHxyPT09b3x8by5jb250YWlucyhyKSkmJih0aGlzLl9mb2N1c01vbml0b3I/KHRoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYShpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlKSx0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZT1udWxsKTppLmZvY3VzKCkpfXRoaXMuX2ZvY3VzVHJhcCYmdGhpcy5fZm9jdXNUcmFwLmRlc3Ryb3koKX1fZm9jdXNEaWFsb2dDb250YWluZXIoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfV9jb250YWluc0ZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9TkMoKTtyZXR1cm4gZT09PWl8fGUuY29udGFpbnMoaSl9X2luaXRpYWxpemVGb2N1c1RyYXAoKXt0aGlzLl9mb2N1c1RyYXA9dGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLl9kb2N1bWVudCYmKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkPU5DKCkpfV9oYW5kbGVCYWNrZHJvcENsaWNrcygpe3RoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NvbmZpZy5kaXNhYmxlQ2xvc2UmJnRoaXMuX3JlY2FwdHVyZUZvY3VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCQyksdyhCdCw4KSx3KGxtKSx3KElfKSx3KHB0KSx3KFR1KSx3KHpyKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLWRpYWxvZy1jb250YWluZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxPdXRsZXQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIi0xIiwxLCJjZGstZGlhbG9nLWNvbnRhaW5lciJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuX2NvbmZpZy5pZHx8bnVsbCkoInJvbGUiLGkuX2NvbmZpZy5yb2xlKSgiYXJpYS1tb2RhbCIsaS5fY29uZmlnLmFyaWFNb2RhbCkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpfSxmZWF0dXJlczpbdHRdLGRlY2xzOjEsdmFyczowLGNvbnN0czpbWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkUoMCxWRGUsMCwwLCJuZy10ZW1wbGF0ZSIsMCl9LGRlcGVuZGVuY2llczpbQnNdLHN0eWxlczpbIi5jZGstZGlhbG9nLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bWluLWhlaWdodDppbmhlcml0O21heC1oZWlnaHQ6aW5oZXJpdH0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMub3ZlcmxheVJlZj10LHRoaXMuY29uZmlnPWUsdGhpcy5jbG9zZWQ9bmV3IFRlLHRoaXMuZGlzYWJsZUNsb3NlPWUuZGlzYWJsZUNsb3NlLHRoaXMuYmFja2Ryb3BDbGljaz10LmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHM9dC5rZXlkb3duRXZlbnRzKCksdGhpcy5vdXRzaWRlUG9pbnRlckV2ZW50cz10Lm91dHNpZGVQb2ludGVyRXZlbnRzKCksdGhpcy5pZD1lLmlkLHRoaXMua2V5ZG93bkV2ZW50cy5zdWJzY3JpYmUoaT0+ezI3PT09aS5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihpKSYmKGkucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46ImtleWJvYXJkIn0pKX0pLHRoaXMuYmFja2Ryb3BDbGljay5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRpc2FibGVDbG9zZXx8dGhpcy5jbG9zZSh2b2lkIDAse2ZvY3VzT3JpZ2luOiJtb3VzZSJ9KX0pfWNsb3NlKHQsZSl7aWYodGhpcy5jb250YWluZXJJbnN0YW5jZSl7bGV0IGk9dGhpcy5jbG9zZWQ7dGhpcy5jb250YWluZXJJbnN0YW5jZS5fY2xvc2VJbnRlcmFjdGlvblR5cGU9ZT8uZm9jdXNPcmlnaW58fCJwcm9ncmFtIix0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpLGkubmV4dCh0KSxpLmNvbXBsZXRlKCksdGhpcy5jb21wb25lbnRJbnN0YW5jZT10aGlzLmNvbnRhaW5lckluc3RhbmNlPW51bGx9fXVwZGF0ZVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHRoaXN9dXBkYXRlU2l6ZSh0PSIiLGU9IiIpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXN9YWRkUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3ModCksdGhpc31yZW1vdmVQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcyh0KSx0aGlzfX0sUEo9bmV3IHNlKCJEaWFsb2dTY3JvbGxTdHJhdGVneSIpLEhEZT1uZXcgc2UoIkRpYWxvZ0RhdGEiKSxVRGU9bmV3IHNlKCJEZWZhdWx0RGlhbG9nQ29uZmlnIiksakRlPXtwcm92aWRlOlBKLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKX19LEdEZT0wLGE1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcj1zLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W10sdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbD1uZXcgVGUsdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzPW5ldyBNYXAsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWF9Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfW9wZW4oZSxpKXsoaT17Li4udGhpcy5fZGVmYXVsdE9wdGlvbnN8fG5ldyBsbSwuLi5pfSkuaWQ9aS5pZHx8ImNkay1kaWFsb2ctIitHRGUrKyxpLmlkJiZ0aGlzLmdldERpYWxvZ0J5SWQoaS5pZCk7bGV0IG89dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhpKSxzPXRoaXMuX292ZXJsYXkuY3JlYXRlKG8pLGE9bmV3IFFDKHMsaSksbD10aGlzLl9hdHRhY2hDb250YWluZXIocyxhLGkpO3JldHVybiBhLmNvbnRhaW5lckluc3RhbmNlPWwsdGhpcy5fYXR0YWNoRGlhbG9nQ29udGVudChlLGEsbCxpKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpLHRoaXMub3BlbkRpYWxvZ3MucHVzaChhKSxhLmNsb3NlZC5zdWJzY3JpYmUoKCk9PnRoaXMuX3JlbW92ZU9wZW5EaWFsb2coYSwhMCkpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChhKSxhfWNsb3NlQWxsKCl7bzUodGhpcy5vcGVuRGlhbG9ncyxlPT5lLmNsb3NlKCkpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXtvNSh0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLGU9PnshMT09PWUuY29uZmlnLmNsb3NlT25EZXN0cm95JiZ0aGlzLl9yZW1vdmVPcGVuRGlhbG9nKGUsITEpfSksbzUodGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCxlPT5lLmNsb3NlKCkpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXX1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtsZXQgaT1uZXcgRGwoe3Bvc2l0aW9uU3RyYXRlZ3k6ZS5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLHNjcm9sbFN0cmF0ZWd5OmUuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCkscGFuZWxDbGFzczplLnBhbmVsQ2xhc3MsaGFzQmFja2Ryb3A6ZS5oYXNCYWNrZHJvcCxkaXJlY3Rpb246ZS5kaXJlY3Rpb24sbWluV2lkdGg6ZS5taW5XaWR0aCxtaW5IZWlnaHQ6ZS5taW5IZWlnaHQsbWF4V2lkdGg6ZS5tYXhXaWR0aCxtYXhIZWlnaHQ6ZS5tYXhIZWlnaHQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHQsZGlzcG9zZU9uTmF2aWdhdGlvbjplLmNsb3NlT25OYXZpZ2F0aW9ufSk7cmV0dXJuIGUuYmFja2Ryb3BDbGFzcyYmKGkuYmFja2Ryb3BDbGFzcz1lLmJhY2tkcm9wQ2xhc3MpLGl9X2F0dGFjaENvbnRhaW5lcihlLGkscil7bGV0IGEsbz1yLmluamVjdG9yfHxyLnZpZXdDb250YWluZXJSZWY/LmluamVjdG9yLHM9W3twcm92aWRlOmxtLHVzZVZhbHVlOnJ9LHtwcm92aWRlOlFDLHVzZVZhbHVlOml9LHtwcm92aWRlOlR1LHVzZVZhbHVlOmV9XTtyLmNvbnRhaW5lcj8iZnVuY3Rpb24iPT10eXBlb2Ygci5jb250YWluZXI/YT1yLmNvbnRhaW5lcjooYT1yLmNvbnRhaW5lci50eXBlLHMucHVzaCguLi5yLmNvbnRhaW5lci5wcm92aWRlcnMocikpKTphPXM1O2xldCBsPW5ldyBDYyhhLHIudmlld0NvbnRhaW5lclJlZix6bi5jcmVhdGUoe3BhcmVudDpvfHx0aGlzLl9pbmplY3Rvcixwcm92aWRlcnM6c30pLHIuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKTtyZXR1cm4gZS5hdHRhY2gobCkuaW5zdGFuY2V9X2F0dGFjaERpYWxvZ0NvbnRlbnQoZSxpLHIsbyl7aWYoZSBpbnN0YW5jZW9mIE9pKXtsZXQgcz10aGlzLl9jcmVhdGVJbmplY3RvcihvLGkscix2b2lkIDApLGE9eyRpbXBsaWNpdDpvLmRhdGEsZGlhbG9nUmVmOml9O28udGVtcGxhdGVDb250ZXh0JiYoYT17Li4uYSwuLi4iZnVuY3Rpb24iPT10eXBlb2Ygby50ZW1wbGF0ZUNvbnRleHQ/by50ZW1wbGF0ZUNvbnRleHQoKTpvLnRlbXBsYXRlQ29udGV4dH0pLHIuYXR0YWNoVGVtcGxhdGVQb3J0YWwobmV3IGhzKGUsbnVsbCxhLHMpKX1lbHNle2xldCBzPXRoaXMuX2NyZWF0ZUluamVjdG9yKG8saSxyLHRoaXMuX2luamVjdG9yKSxhPXIuYXR0YWNoQ29tcG9uZW50UG9ydGFsKG5ldyBDYyhlLG8udmlld0NvbnRhaW5lclJlZixzLG8uY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSk7aS5jb21wb25lbnRJbnN0YW5jZT1hLmluc3RhbmNlfX1fY3JlYXRlSW5qZWN0b3IoZSxpLHIsbyl7bGV0IHM9ZS5pbmplY3Rvcnx8ZS52aWV3Q29udGFpbmVyUmVmPy5pbmplY3RvcixhPVt7cHJvdmlkZTpIRGUsdXNlVmFsdWU6ZS5kYXRhfSx7cHJvdmlkZTpRQyx1c2VWYWx1ZTppfV07cmV0dXJuIGUucHJvdmlkZXJzJiYoImZ1bmN0aW9uIj09dHlwZW9mIGUucHJvdmlkZXJzP2EucHVzaCguLi5lLnByb3ZpZGVycyhpLGUscikpOmEucHVzaCguLi5lLnByb3ZpZGVycykpLGUuZGlyZWN0aW9uJiYoIXN8fCFzLmdldChpcixudWxsLGlpLk9wdGlvbmFsKSkmJmEucHVzaCh7cHJvdmlkZTppcix1c2VWYWx1ZTp7dmFsdWU6ZS5kaXJlY3Rpb24sY2hhbmdlOmp0KCl9fSksem4uY3JlYXRlKHtwYXJlbnQ6c3x8byxwcm92aWRlcnM6YX0pfV9yZW1vdmVPcGVuRGlhbG9nKGUsaSl7bGV0IHI9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKGUpO3I+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShyLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHwodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmZvckVhY2goKG8scyk9PntvP3Muc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsbyk6cy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIil9KSx0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuY2xlYXIoKSxpJiZ0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSkpfV9oaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCk7aWYoZS5wYXJlbnRFbGVtZW50KXtsZXQgaT1lLnBhcmVudEVsZW1lbnQuY2hpbGRyZW47Zm9yKGxldCByPWkubGVuZ3RoLTE7cj4tMTtyLS0pe2xldCBvPWlbcl07byE9PWUmJiJTQ1JJUFQiIT09by5ub2RlTmFtZSYmIlNUWUxFIiE9PW8ubm9kZU5hbWUmJiFvLmhhc0F0dHJpYnV0ZSgiYXJpYS1saXZlIikmJih0aGlzLl9hcmlhSGlkZGVuRWxlbWVudHMuc2V0KG8sby5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpLG8uc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSl9fX1fZ2V0QWZ0ZXJBbGxDbG9zZWQoKXtsZXQgZT10aGlzLl9wYXJlbnREaWFsb2c7cmV0dXJuIGU/ZS5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKFFpKSxSKHpuKSxSKFVEZSw4KSxSKG4sMTIpLFIoTl8pLFIoUEopKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBvNShuLHQpe2xldCBlPW4ubGVuZ3RoO2Zvcig7ZS0tOyl0KG5bZV0pfXZhciBSSj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthNSxqRGVdLGltcG9ydHM6W1ZvLHdjLFBfLHdjXX0pLG59KSgpO2Z1bmN0aW9uIFdEZShuLHQpe312YXIgQl89e3BhcmFtczp7ZW50ZXJBbmltYXRpb25EdXJhdGlvbjoiMTUwbXMiLGV4aXRBbmltYXRpb25EdXJhdGlvbjoiNzVtcyJ9fSxxRGU9e2RpYWxvZ0NvbnRhaW5lcjpIcigiZGlhbG9nQ29udGFpbmVyIixbRWkoInZvaWQsIGV4aXQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxFaSgiZW50ZXIiLHJuKHt0cmFuc2Zvcm06Im5vbmUifSkpLElpKCIqID0+IGVudGVyIixIMyhbVmkoInt7ZW50ZXJBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7dHJhbnNmb3JtOiJub25lIixvcGFjaXR5OjF9KSksRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSksQl8pLElpKCIqID0+IHZvaWQsICogPT4gZXhpdCIsSDMoW1ZpKCJ7e2V4aXRBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIscm4oe29wYWNpdHk6MH0pKSxGZigiQCoiLGtmKCkse29wdGlvbmFsOiEwfSldKSxCXyldKX0sVl89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuZGVsYXlGb2N1c1RyYXA9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmVudGVyQW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmVudGVyQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5leGl0QW5pbWF0aW9uRHVyYXRpb249Ql8ucGFyYW1zLmV4aXRBbmltYXRpb25EdXJhdGlvbn19LFlEZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgczV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGkscixvLHMsYSxsLGMpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgR31fY2FwdHVyZUluaXRpYWxGb2N1cygpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcHx8dGhpcy5fdHJhcEZvY3VzKCl9X29wZW5BbmltYXRpb25Eb25lKGUpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcCYmdGhpcy5fdHJhcEZvY3VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuZWQiLHRvdGFsVGltZTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxmZWF0dXJlczpbdHRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxYRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFlEZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIoZSxpLHIsbyxzLGEsbCx1KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1jLHRoaXMuX3N0YXRlPSJlbnRlciJ9X29uQW5pbWF0aW9uRG9uZSh7dG9TdGF0ZTplLHRvdGFsVGltZTppfSl7ImVudGVyIj09PWU/dGhpcy5fb3BlbkFuaW1hdGlvbkRvbmUoaSk6ImV4aXQiPT09ZSYmdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTppfSl9X29uQW5pbWF0aW9uU3RhcnQoe3RvU3RhdGU6ZSx0b3RhbFRpbWU6aX0peyJlbnRlciI9PT1lP3RoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmluZyIsdG90YWxUaW1lOml9KTooImV4aXQiPT09ZXx8InZvaWQiPT09ZSkmJnRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOml9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRBbmltYXRpb25TdGF0ZSgpe3JldHVybnt2YWx1ZTp0aGlzLl9zdGF0ZSxwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246dGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb258fEJfLnBhcmFtcy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uLGV4aXRBbmltYXRpb25EdXJhdGlvbjp0aGlzLl9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufHxCXy5wYXJhbXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoQkMpLHcoQnQsOCksdyhWXyksdyhJXyksdyhwdCksdyhUdSksdyhubiksdyh6cikpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmkwKCJAZGlhbG9nQ29udGFpbmVyLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25BbmltYXRpb25TdGFydChvKX0pKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkFuaW1hdGlvbkRvbmUobyl9KSwyJmUmJihBYSgiaWQiLGkuX2NvbmZpZy5pZCksemUoImFyaWEtbW9kYWwiLGkuX2NvbmZpZy5hcmlhTW9kYWwpKCJyb2xlIixpLl9jb25maWcucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpLHIwKCJAZGlhbG9nQ29udGFpbmVyIixpLl9nZXRBbmltYXRpb25TdGF0ZSgpKSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFdEZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltCc10sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9ucy5tYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyLC5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMubWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCwubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbcURlLmRpYWxvZ0NvbnRhaW5lcl19fSksbn0pKCksTWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IFRlLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcgVGUsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoSGUocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxIdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShIZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx1bih0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKEhlKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFNcihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLE9KKHRoaXMsImtleWRvd24iPT09ci50eXBlPyJrZXlib2FyZCI6Im1vdXNlIikpfSl9Y2xvc2UodCl7dGhpcy5fcmVzdWx0PXQsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5waXBlKEhlKGU9PiJjbG9zaW5nIj09PWUuc3RhdGUpLEh0KDEpKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2JlZm9yZUNsb3NlZC5uZXh0KHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX3JlZi5vdmVybGF5UmVmLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5fZmluaXNoRGlhbG9nQ2xvc2UoKSxlLnRvdGFsVGltZSsxMDApfSksdGhpcy5fc3RhdGU9MSx0aGlzLl9jb250YWluZXJJbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCl9YWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fYWZ0ZXJPcGVuZWR9YWZ0ZXJDbG9zZWQoKXtyZXR1cm4gdGhpcy5fcmVmLmNsb3NlZH1iZWZvcmVDbG9zZWQoKXtyZXR1cm4gdGhpcy5fYmVmb3JlQ2xvc2VkfWJhY2tkcm9wQ2xpY2soKXtyZXR1cm4gdGhpcy5fcmVmLmJhY2tkcm9wQ2xpY2t9a2V5ZG93bkV2ZW50cygpe3JldHVybiB0aGlzLl9yZWYua2V5ZG93bkV2ZW50c311cGRhdGVQb3NpdGlvbih0KXtsZXQgZT10aGlzLl9yZWYuY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3k7cmV0dXJuIHQmJih0LmxlZnR8fHQucmlnaHQpP3QubGVmdD9lLmxlZnQodC5sZWZ0KTplLnJpZ2h0KHQucmlnaHQpOmUuY2VudGVySG9yaXpvbnRhbGx5KCksdCYmKHQudG9wfHx0LmJvdHRvbSk/dC50b3A/ZS50b3AodC50b3ApOmUuYm90dG9tKHQuYm90dG9tKTplLmNlbnRlclZlcnRpY2FsbHkoKSx0aGlzLl9yZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzfXVwZGF0ZVNpemUodD0iIixlPSIiKXtyZXR1cm4gdGhpcy5fcmVmLnVwZGF0ZVNpemUodCxlKSx0aGlzfWFkZFBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5hZGRQYW5lbENsYXNzKHQpLHRoaXN9cmVtb3ZlUGFuZWxDbGFzcyh0KXtyZXR1cm4gdGhpcy5fcmVmLnJlbW92ZVBhbmVsQ2xhc3ModCksdGhpc31nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1fZmluaXNoRGlhbG9nQ2xvc2UoKXt0aGlzLl9zdGF0ZT0yLHRoaXMuX3JlZi5jbG9zZSh0aGlzLl9yZXN1bHQse2ZvY3VzT3JpZ2luOnRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlfSksdGhpcy5jb21wb25lbnRJbnN0YW5jZT1udWxsfX07ZnVuY3Rpb24gT0oobix0LGUpe3JldHVybiBuLl9jbG9zZUludGVyYWN0aW9uVHlwZT10LG4uY2xvc2UoZSl9dmFyIEtDPW5ldyBzZSgiTWF0RGlhbG9nRGF0YSIpLFFEZT1uZXcgc2UoIm1hdC1kaWFsb2ctZGVmYXVsdC1vcHRpb25zIiksa0o9bmV3IHNlKCJtYXQtZGlhbG9nLXNjcm9sbC1zdHJhdGVneSIpLFpEZT17cHJvdmlkZTprSixkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fSxKRGU9MCwkRGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9wYXJlbnREaWFsb2c9byx0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3Rvcj1sLHRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGU9Yyx0aGlzLl9kaWFsb2dEYXRhVG9rZW49dSx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IFRlLHRoaXMuX2lkUHJlZml4PSJtYXQtZGlhbG9nLSIsdGhpcy5hZnRlckFsbENsb3NlZD1iYSgoKT0+dGhpcy5vcGVuRGlhbG9ncy5sZW5ndGg/dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKTp0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoVm4odm9pZCAwKSkpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWEsdGhpcy5fZGlhbG9nPWkuZ2V0KGE1KX1nZXQgb3BlbkRpYWxvZ3MoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5vcGVuRGlhbG9nczp0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsfWdldCBhZnRlck9wZW5lZCgpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLmFmdGVyT3BlbmVkOnRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWx9X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH1vcGVuKGUsaSl7bGV0IHI7KGk9ey4uLnRoaXMuX2RlZmF1bHRPcHRpb25zfHxuZXcgVl8sLi4uaX0pLmlkPWkuaWR8fGAke3RoaXMuX2lkUHJlZml4fSR7SkRlKyt9YCxpLnNjcm9sbFN0cmF0ZWd5PWkuc2Nyb2xsU3RyYXRlZ3l8fHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCk7bGV0IG89dGhpcy5fZGlhbG9nLm9wZW4oZSx7Li4uaSxwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCksZGlzYWJsZUNsb3NlOiEwLGNsb3NlT25EZXN0cm95OiExLGNvbnRhaW5lcjp7dHlwZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHByb3ZpZGVyczooKT0+W3twcm92aWRlOlZfLHVzZVZhbHVlOml9LHtwcm92aWRlOmxtLHVzZVZhbHVlOml9XX0sdGVtcGxhdGVDb250ZXh0OigpPT4oe2RpYWxvZ1JlZjpyfSkscHJvdmlkZXJzOihzLGEsbCk9PihyPW5ldyB0aGlzLl9kaWFsb2dSZWZDb25zdHJ1Y3RvcihzLGksbCksci51cGRhdGVQb3NpdGlvbihpPy5wb3NpdGlvbiksW3twcm92aWRlOnRoaXMuX2RpYWxvZ0NvbnRhaW5lclR5cGUsdXNlVmFsdWU6bH0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nRGF0YVRva2VuLHVzZVZhbHVlOmEuZGF0YX0se3Byb3ZpZGU6dGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IsdXNlVmFsdWU6cn1dKX0pO3JldHVybiByLmNvbXBvbmVudEluc3RhbmNlPW8uY29tcG9uZW50SW5zdGFuY2UsdGhpcy5vcGVuRGlhbG9ncy5wdXNoKHIpLHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChyKSxyLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpPT57bGV0IHM9dGhpcy5vcGVuRGlhbG9ncy5pbmRleE9mKHIpO3M+LTEmJih0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShzLDEpLHRoaXMub3BlbkRpYWxvZ3MubGVuZ3RofHx0aGlzLl9nZXRBZnRlckFsbENsb3NlZCgpLm5leHQoKSl9KSxyfWNsb3NlQWxsKCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMub3BlbkRpYWxvZ3MpfWdldERpYWxvZ0J5SWQoZSl7cmV0dXJuIHRoaXMub3BlbkRpYWxvZ3MuZmluZChpPT5pLmlkPT09ZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jbG9zZURpYWxvZ3ModGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCksdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWwuY29tcGxldGUoKX1fY2xvc2VEaWFsb2dzKGUpe2xldCBpPWUubGVuZ3RoO2Zvcig7aS0tOyllW2ldLmNsb3NlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE1jPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyAkRGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGksbyxhLGwscyxNZCxYRGUsS0MsYyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoUWkpLFIoem4pLFIoSHgsOCksUihRRGUsOCksUihrSiksUihuLDEyKSxSKE5fKSxSKExpLDgpKX0sbi5cdTAyNzVwcm92PWdlKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxlQWU9MCxqQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmRpYWxvZ1JlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9kaWFsb2c9cix0aGlzLnR5cGU9ImJ1dHRvbiJ9bmdPbkluaXQoKXt0aGlzLmRpYWxvZ1JlZnx8KHRoaXMuZGlhbG9nUmVmPU5KKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5fbWF0RGlhbG9nQ2xvc2V8fGUuX21hdERpYWxvZ0Nsb3NlUmVzdWx0O2kmJih0aGlzLmRpYWxvZ1Jlc3VsdD1pLmN1cnJlbnRWYWx1ZSl9X29uQnV0dG9uQ2xpY2soZSl7T0oodGhpcy5kaWFsb2dSZWYsMD09PWUuc2NyZWVuWCYmMD09PWUuc2NyZWVuWT8ia2V5Ym9hcmQiOiJtb3VzZSIsdGhpcy5kaWFsb2dSZXN1bHQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1kLDgpLHcoQWUpLHcoTWMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LWRpYWxvZy1jbG9zZSIsIiJdLFsiIiwibWF0RGlhbG9nQ2xvc2UiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25CdXR0b25DbGljayhvKX0pLDImZSYmemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgidHlwZSIsaS50eXBlKX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sdHlwZToidHlwZSIsZGlhbG9nUmVzdWx0OlsibWF0LWRpYWxvZy1jbG9zZSIsImRpYWxvZ1Jlc3VsdCJdLF9tYXREaWFsb2dDbG9zZTpbIm1hdERpYWxvZ0Nsb3NlIiwiX21hdERpYWxvZ0Nsb3NlIl19LGV4cG9ydEFzOlsibWF0RGlhbG9nQ2xvc2UiXSxmZWF0dXJlczpbenRdfSksbn0pKCksRko9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMuaWQ9Im1hdC1kaWFsb2ctdGl0bGUtIitlQWUrK31uZ09uSW5pdCgpe3RoaXMuX2RpYWxvZ1JlZnx8KHRoaXMuX2RpYWxvZ1JlZj1OSih0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhNZCw4KSx3KEFlKSx3KE1jKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy10aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZBYSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEdBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctY29udGVudCJdfSksbn0pKCksV0E9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWxpZ249InN0YXJ0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyIiwiY2VudGVyIj09PWkuYWxpZ24pKCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gTkoobix0KXtsZXQgZT1uLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2UmJiFlLmNsYXNzTGlzdC5jb250YWlucygibWF0LWRpYWxvZy1jb250YWluZXIiKTspZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGU/dC5maW5kKGk9PmkuaWQ9PT1lLmlkKTpudWxsfXZhciBIXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltNYyxaRGVdLGltcG9ydHM6W1JKLFZvLHdjLGRuLGRuXX0pLG59KSgpLHRBZT1bImNvbm5lY3Rpb25Db250YWluZXIiXSxuQWU9WyJpbnB1dENvbnRhaW5lciJdLGlBZT1bImxhYmVsIl07ZnVuY3Rpb24gckFlKG4sdCl7MSZuJiYoS3QoMCksZygxLCJkaXYiLDE0KSxOKDIsImRpdiIsMTUpKDMsImRpdiIsMTYpKDQsImRpdiIsMTcpLHYoKSxnKDUsImRpdiIsMTgpLE4oNiwiZGl2IiwxNSkoNywiZGl2IiwxNikoOCwiZGl2IiwxNyksdigpLFp0KCkpfWZ1bmN0aW9uIG9BZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTkpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLE5uKDEsMSksdigpfTImbiYmYigiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsIm91dGxpbmUiIT1NKCkuYXBwZWFyYW5jZSl9ZnVuY3Rpb24gc0FlKG4sdCl7aWYoMSZuJiYoS3QoMCksTm4oMSwyKSxnKDIsInNwYW4iKSxEKDMpLHYoKSxadCgpKSwyJm4pe2xldCBlPU0oMik7eCgzKSx5dChlLl9jb250cm9sLnBsYWNlaG9sZGVyKX19ZnVuY3Rpb24gYUFlKG4sdCl7MSZuJiZObigwLDMsWyIqbmdTd2l0Y2hDYXNlIiwidHJ1ZSJdKX1mdW5jdGlvbiBsQWUobix0KXsxJm4mJihnKDAsInNwYW4iLDIzKSxEKDEsIiAqIiksdigpKX1mdW5jdGlvbiBjQWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJsYWJlbCIsMjAsMjEpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkudXBkYXRlT3V0bGluZUdhcCgpKX0pLEUoMixzQWUsNCwxLCJuZy1jb250YWluZXIiLDEyKSxFKDMsYUFlLDEsMCwibmctY29udGVudCIsMTIpLEUoNCxsQWUsMiwwLCJzcGFuIiwyMiksdigpfWlmKDImbil7bGV0IGU9TSgpO2F0KCJtYXQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWZvcm0tZmllbGQtZW1wdHkiLGUuX2NvbnRyb2wuZW1wdHkmJiFlLl9zaG91bGRBbHdheXNGbG9hdCgpKSgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKSxiKCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwib3V0bGluZSIhPWUuYXBwZWFyYW5jZSkoImlkIixlLl9sYWJlbElkKSgibmdTd2l0Y2giLGUuX2hhc0xhYmVsKCkpLHplKCJmb3IiLGUuX2NvbnRyb2wuaWQpKCJhcmlhLW93bnMiLGUuX2NvbnRyb2wuaWQpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nSWYiLCFlLmhpZGVSZXF1aXJlZE1hcmtlciYmZS5fY29udHJvbC5yZXF1aXJlZCYmIWUuX2NvbnRyb2wuZGlzYWJsZWQpfX1mdW5jdGlvbiB1QWUobix0KXsxJm4mJihnKDAsImRpdiIsMjQpLE5uKDEsNCksdigpKX1mdW5jdGlvbiBkQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLE4oMSwic3BhbiIsMjYpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxhdCgibWF0LWFjY2VudCIsImFjY2VudCI9PWUuY29sb3IpKCJtYXQtd2FybiIsIndhcm4iPT1lLmNvbG9yKX19ZnVuY3Rpb24gcEFlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxObigxLDUpLHYoKSksMiZuJiZiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixNKCkuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKX1mdW5jdGlvbiBoQWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMzApLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7YigiaWQiLGUuX2hpbnRMYWJlbElkKSx4KDEpLHl0KGUuaGludExhYmVsKX19ZnVuY3Rpb24gZkFlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI3KSxFKDEsaEFlLDIsMiwiZGl2IiwyOCksTm4oMiw2KSxOKDMsImRpdiIsMjkpLE5uKDQsNyksdigpKSwyJm4pe2xldCBlPU0oKTtiKCJAdHJhbnNpdGlvbk1lc3NhZ2VzIixlLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSkseCgxKSxiKCJuZ0lmIixlLmhpbnRMYWJlbCl9fXZhciBtQWU9WyIqIixbWyIiLCJtYXRQcmVmaXgiLCIiXV0sW1sibWF0LXBsYWNlaG9sZGVyIl1dLFtbIm1hdC1sYWJlbCJdXSxbWyIiLCJtYXRTdWZmaXgiLCIiXV0sW1sibWF0LWVycm9yIl1dLFtbIm1hdC1oaW50IiwzLCJhbGlnbiIsImVuZCJdXSxbWyJtYXQtaGludCIsImFsaWduIiwiZW5kIl1dXSxnQWU9WyIqIiwiW21hdFByZWZpeF0iLCJtYXQtcGxhY2Vob2xkZXIiLCJtYXQtbGFiZWwiLCJbbWF0U3VmZml4XSIsIm1hdC1lcnJvciIsIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKSIsIm1hdC1oaW50W2FsaWduPSdlbmQnXSJdLF9BZT0wLFZKPW5ldyBzZSgiTWF0RXJyb3IiKSxISj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5pZD0ibWF0LWVycm9yLSIrX0FlKyssZXx8aS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIiwicG9saXRlIil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKEtvKCJhcmlhLWxpdmUiKSx3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1lcnJvciJdXSxob3N0QXR0cnM6WyJhcmlhLWF0b21pYyIsInRydWUiLDEsIm1hdC1lcnJvciJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VkosdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSx2QWU9e3RyYW5zaXRpb25NZXNzYWdlczpIcigidHJhbnNpdGlvbk1lc3NhZ2VzIixbRWkoImVudGVyIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToidHJhbnNsYXRlWSgwJSkifSkpLElpKCJ2b2lkID0+IGVudGVyIixbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTVweCkifSksVmkoIjMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfSxVXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHlBZT1uZXcgc2UoIk1hdEhpbnQiKSx6Xz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWxhYmVsIl1dfSksbn0pKCksYkFlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcGxhY2Vob2xkZXIiXV19KSxufSkoKSx4QWU9bmV3IHNlKCJNYXRQcmVmaXgiKSxDQWU9bmV3IHNlKCJNYXRTdWZmaXgiKSxMSj0wLE1BZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSwicHJpbWFyeSIpLFNBZT1uZXcgc2UoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHVtPW5ldyBzZSgiTWF0Rm9ybUZpZWxkIiksRHU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE1BZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2RlZmF1bHRzPW8sdGhpcy5fcGxhdGZvcm09cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hMSx0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMSx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGludExhYmVsSWQ9Im1hdC1oaW50LSIrTEorKyx0aGlzLl9sYWJlbElkPSJtYXQtZm9ybS1maWVsZC1sYWJlbC0iK0xKKyssdGhpcy5mbG9hdExhYmVsPXRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9hbmltYXRpb25zRW5hYmxlZD0iTm9vcEFuaW1hdGlvbnMiIT09bCx0aGlzLmFwcGVhcmFuY2U9bz8uYXBwZWFyYW5jZXx8ImxlZ2FjeSIsbyYmKHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj1Cb29sZWFuKG8uaGlkZVJlcXVpcmVkTWFya2VyKSxvLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1vLmNvbG9yKSl9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXtsZXQgaT10aGlzLl9hcHBlYXJhbmNlO3RoaXMuX2FwcGVhcmFuY2U9ZXx8dGhpcy5fZGVmYXVsdHM/LmFwcGVhcmFuY2V8fCJsZWdhY3kiLCJvdXRsaW5lIj09PXRoaXMuX2FwcGVhcmFuY2UmJmkhPT1lJiYodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITApfWdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKXtyZXR1cm4gdGhpcy5faGlkZVJlcXVpcmVkTWFya2VyfXNldCBoaWRlUmVxdWlyZWRNYXJrZXIoZSl7dGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPVd0KGUpfV9zaG91bGRBbHdheXNGbG9hdCgpe3JldHVybiJhbHdheXMiPT09dGhpcy5mbG9hdExhYmVsJiYhdGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGV9X2NhbkxhYmVsRmxvYXQoKXtyZXR1cm4ibmV2ZXIiIT09dGhpcy5mbG9hdExhYmVsfWdldCBoaW50TGFiZWwoKXtyZXR1cm4gdGhpcy5faGludExhYmVsfXNldCBoaW50TGFiZWwoZSl7dGhpcy5faGludExhYmVsPWUsdGhpcy5fcHJvY2Vzc0hpbnRzKCl9Z2V0IGZsb2F0TGFiZWwoKXtyZXR1cm4ibGVnYWN5IiE9PXRoaXMuYXBwZWFyYW5jZSYmIm5ldmVyIj09PXRoaXMuX2Zsb2F0TGFiZWw/ImF1dG8iOnRoaXMuX2Zsb2F0TGFiZWx9c2V0IGZsb2F0TGFiZWwoZSl7ZSE9PXRoaXMuX2Zsb2F0TGFiZWwmJih0aGlzLl9mbG9hdExhYmVsPWV8fHRoaXMuX2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IF9jb250cm9sKCl7cmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbHx8dGhpcy5fY29udHJvbE5vblN0YXRpY3x8dGhpcy5fY29udHJvbFN0YXRpY31zZXQgX2NvbnRyb2woZSl7dGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sPWV9Z2V0TGFiZWxJZCgpe3JldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCk/dGhpcy5fbGFiZWxJZDpudWxsfWdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKXtyZXR1cm4gdGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZnx8dGhpcy5fZWxlbWVudFJlZn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpO2xldCBlPXRoaXMuX2NvbnRyb2w7ZS5jb250cm9sVHlwZSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC1mb3JtLWZpZWxkLXR5cGUtJHtlLmNvbnRyb2xUeXBlfWApLGUuc3RhdGVDaGFuZ2VzLnBpcGUoVm4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxlLm5nQ29udHJvbCYmZS5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9KX0pLHVuKHRoaXMuX3ByZWZpeENoaWxkcmVuLmNoYW5nZXMsdGhpcy5fc3VmZml4Q2hpbGRyZW4uY2hhbmdlcykuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSx0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9wcm9jZXNzSGludHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5waXBlKFZuKG51bGwpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLnVwZGF0ZU91dGxpbmVHYXAoKSl9KTp0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCksdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHkmJnRoaXMudXBkYXRlT3V0bGluZUdhcCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlPSJlbnRlciIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1fc2hvdWxkRm9yd2FyZChlKXtsZXQgaT10aGlzLl9jb250cm9sP3RoaXMuX2NvbnRyb2wubmdDb250cm9sOm51bGw7cmV0dXJuIGkmJmlbZV19X2hhc1BsYWNlaG9sZGVyKCl7cmV0dXJuISEodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5wbGFjZWhvbGRlcnx8dGhpcy5fcGxhY2Vob2xkZXJDaGlsZCl9X2hhc0xhYmVsKCl7cmV0dXJuISghdGhpcy5fbGFiZWxDaGlsZE5vblN0YXRpYyYmIXRoaXMuX2xhYmVsQ2hpbGRTdGF0aWMpfV9zaG91bGRMYWJlbEZsb2F0KCl7cmV0dXJuIHRoaXMuX2NhbkxhYmVsRmxvYXQoKSYmKHRoaXMuX2NvbnRyb2wmJnRoaXMuX2NvbnRyb2wuc2hvdWxkTGFiZWxGbG9hdHx8dGhpcy5fc2hvdWxkQWx3YXlzRmxvYXQoKSl9X2hpZGVDb250cm9sUGxhY2Vob2xkZXIoKXtyZXR1cm4ibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmIXRoaXMuX2hhc0xhYmVsKCl8fHRoaXMuX2hhc0xhYmVsKCkmJiF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCl9X2hhc0Zsb2F0aW5nTGFiZWwoKXtyZXR1cm4gdGhpcy5faGFzTGFiZWwoKXx8ImxlZ2FjeSI9PT10aGlzLmFwcGVhcmFuY2UmJnRoaXMuX2hhc1BsYWNlaG9sZGVyKCl9X2dldERpc3BsYXllZE1lc3NhZ2VzKCl7cmV0dXJuIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJnRoaXMuX2Vycm9yQ2hpbGRyZW4ubGVuZ3RoPjAmJnRoaXMuX2NvbnRyb2wuZXJyb3JTdGF0ZT8iZXJyb3IiOiJoaW50In1fYW5pbWF0ZUFuZExvY2tMYWJlbCgpe3RoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKSYmdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQmJnRoaXMuX2xhYmVsJiYodGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITAsbGkodGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudCwidHJhbnNpdGlvbmVuZCIpLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Nob3dBbHdheXNBbmltYXRlPSExfSkpLHRoaXMuZmxvYXRMYWJlbD0iYWx3YXlzIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X3ZhbGlkYXRlUGxhY2Vob2xkZXJzKCl7fV9wcm9jZXNzSGludHMoKXt0aGlzLl92YWxpZGF0ZUhpbnRzKCksdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCl9X3ZhbGlkYXRlSGludHMoKXt9X2dldERlZmF1bHRGbG9hdExhYmVsU3RhdGUoKXtyZXR1cm4gdGhpcy5fZGVmYXVsdHMmJnRoaXMuX2RlZmF1bHRzLmZsb2F0TGFiZWx8fCJhdXRvIn1fc3luY0Rlc2NyaWJlZEJ5SWRzKCl7aWYodGhpcy5fY29udHJvbCl7bGV0IGU9W107aWYodGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiYic3RyaW5nIj09dHlwZW9mIHRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeSYmZS5wdXNoKC4uLnRoaXMuX2NvbnRyb2wudXNlckFyaWFEZXNjcmliZWRCeS5zcGxpdCgiICIpKSwiaGludCI9PT10aGlzLl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpKXtsZXQgaT10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+InN0YXJ0Ij09PW8uYWxpZ24pOm51bGwscj10aGlzLl9oaW50Q2hpbGRyZW4/dGhpcy5faGludENoaWxkcmVuLmZpbmQobz0+ImVuZCI9PT1vLmFsaWduKTpudWxsO2k/ZS5wdXNoKGkuaWQpOnRoaXMuX2hpbnRMYWJlbCYmZS5wdXNoKHRoaXMuX2hpbnRMYWJlbElkKSxyJiZlLnB1c2goci5pZCl9ZWxzZSB0aGlzLl9lcnJvckNoaWxkcmVuJiZlLnB1c2goLi4udGhpcy5fZXJyb3JDaGlsZHJlbi5tYXAoaT0+aS5pZCkpO3RoaXMuX2NvbnRyb2wuc2V0RGVzY3JpYmVkQnlJZHMoZSl9fV92YWxpZGF0ZUNvbnRyb2xDaGlsZCgpe311cGRhdGVPdXRsaW5lR2FwKCl7bGV0IGU9dGhpcy5fbGFiZWw/dGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudDpudWxsLGk9dGhpcy5fY29ubmVjdGlvbkNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LHI9Ii5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0IixvPSIubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiO2lmKCJvdXRsaW5lIiE9PXRoaXMuYXBwZWFyYW5jZXx8IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm47aWYoIWV8fCFlLmNoaWxkcmVuLmxlbmd0aHx8IWUudGV4dENvbnRlbnQudHJpbSgpKXtsZXQgdT1pLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7cn0sICR7b31gKTtmb3IobGV0IGQ9MDtkPHUubGVuZ3RoO2QrKyl1W2RdLnN0eWxlLndpZHRoPSIwIjtyZXR1cm59aWYoIXRoaXMuX2lzQXR0YWNoZWRUb0RPTSgpKXJldHVybiB2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSEwKTtsZXQgcz0wLGE9MCxsPWkucXVlcnlTZWxlY3RvckFsbChyKSxjPWkucXVlcnlTZWxlY3RvckFsbChvKTtpZih0aGlzLl9sYWJlbCYmdGhpcy5fbGFiZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpe2xldCB1PWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoMD09PXUud2lkdGgmJjA9PT11LmhlaWdodClyZXR1cm4gdGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9ITAsdm9pZCh0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSk7bGV0IGQ9dGhpcy5fZ2V0U3RhcnRFbmQodSkscD1lLmNoaWxkcmVuLGg9dGhpcy5fZ2V0U3RhcnRFbmQocFswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksZj0wO2ZvcihsZXQgbT0wO208cC5sZW5ndGg7bSsrKWYrPXBbbV0ub2Zmc2V0V2lkdGg7cz1NYXRoLmFicyhoLWQpLTUsYT1mPjA/Ljc1KmYrMTA6MH1mb3IobGV0IHU9MDt1PGwubGVuZ3RoO3UrKylsW3VdLnN0eWxlLndpZHRoPWAke3N9cHhgO2ZvcihsZXQgdT0wO3U8Yy5sZW5ndGg7dSsrKWNbdV0uc3R5bGUud2lkdGg9YCR7YX1weGA7dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkT25TdGFibGU9dGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITF9X2dldFN0YXJ0RW5kKGUpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlP2UucmlnaHQ6ZS5sZWZ0fV9pc0F0dGFjaGVkVG9ET00oKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aWYoZS5nZXRSb290Tm9kZSl7bGV0IGk9ZS5nZXRSb290Tm9kZSgpO3JldHVybiBpJiZpIT09ZX1yZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGlyLDgpLHcoU0FlLDgpLHcodWkpLHcocHQpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1mb3JtLWZpZWxkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLFVfLDUpLE5pKHIsVV8sNyksTmkocix6Xyw1KSxOaShyLHpfLDcpLE5pKHIsYkFlLDUpLE5pKHIsVkosNSksTmkocix5QWUsNSksTmkocix4QWUsNSksTmkocixDQWUsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2NvbnRyb2xOb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2NvbnRyb2xTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX3BsYWNlaG9sZGVyQ2hpbGQ9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKSxOZShvPUxlKCkpJiYoaS5fcHJlZml4Q2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX3N1ZmZpeENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodEFlLDcpLGx0KG5BZSw1KSxsdChpQWUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX2lucHV0Q29udGFpbmVyUmVmPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IiwibGVnYWN5Ij09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSgibWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IixpLl9jYW5MYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLGkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCIsaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciIsaS5faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpKSgibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixpLl9jb250cm9sLmF1dG9maWxsZWQpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsaGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGhpbnRMYWJlbDoiaGludExhYmVsIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOnVtLHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpnQWUsZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4IiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm5nU3dpdGNoIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsIiwiIl0sWyJjbGFzcyIsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIiwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2kobUFlKSxnKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxFKDMsckFlLDksMCwibmctY29udGFpbmVyIiwzKSxFKDQsb0FlLDIsMSwiZGl2Iiw0KSxnKDUsImRpdiIsNSw2KSxObig3KSxnKDgsInNwYW4iLDcpLEUoOSxjQWUsNSwxNiwibGFiZWwiLDgpLHYoKSgpLEUoMTAsdUFlLDIsMCwiZGl2Iiw5KSx2KCksRSgxMSxkQWUsMiw0LCJkaXYiLDEwKSxnKDEyLCJkaXYiLDExKSxFKDEzLHBBZSwyLDEsImRpdiIsMTIpLEUoMTQsZkFlLDUsMiwiZGl2IiwxMyksdigpKCkpLDImZSYmKHgoMyksYigibmdJZiIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdJZiIsaS5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSx4KDUpLGIoIm5nSWYiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSkseCgxKSxiKCJuZ0lmIixpLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLHgoMSksYigibmdJZiIsIm91dGxpbmUiIT1pLmFwcGVhcmFuY2UpLHgoMSksYigibmdTd2l0Y2giLGkuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsU19dLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwnLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO3BhZGRpbmc6Ljc1ZW0gLjc1ZW0gMCAuNzVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmUtY29sb3I6R3JheVRleHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6ZGFzaGVkIDNweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjFweDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGw6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye3BhZGRpbmc6MCAxZW19JywnLm1hdC1pbnB1dC1lbGVtZW50e2ZvbnQ6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207dGV4dC1hbGlnbjppbmhlcml0O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY29udGFjdHMtYXV0by1maWxsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2Fwcy1sb2NrLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6bm90KFt0eXBlPXBhc3N3b3JkXSk6Oi13ZWJraXQtY3JlZGVudGlhbHMtYXV0by1maWxsLWJ1dHRvbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV06OmFmdGVye2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jbGVhci1idXR0b257Zm9udC1zaXplOi43NWVtfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6MWVtO3RvcDotMWVtO21hcmdpbi1ib3R0b206LTFlbX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yaWdodDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItdG9wOjVweCBzb2xpZDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotMi41cHg7cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntyaWdodDphdXRvO2xlZnQ6MH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDoxNXB4fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxMHB4KX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcnttYXJnaW4tdG9wOi01cHh9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotMTBweH0nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbnt3aWR0aDoxZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2ZvbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntmb250LXNpemU6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dG9wOjA7aGVpZ2h0OjJweDtvdmVyZmxvdzpoaWRkZW59LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym9yZGVyLXRvcC1jb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcnttYXJnaW46LjI1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmc6MCAuNzVlbSAwIC43NWVtO21hcmdpbi10b3A6LTAuMjVlbTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3VmZml4e3RvcDouMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjI1ZW07bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO21pbi13aWR0aDo1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4O2JvcmRlci1yaWdodC1zdHlsZTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6MCA1cHggNXB4IDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMDtib3JkZXItbGVmdC1zdHlsZTpub25lO2ZsZXgtZ3JvdzoxfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6bm9uZTtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci1yYWRpdXM6LjAwMDAwMXB4O2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6R3JheVRleHR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvcmRlci10b3Atc3R5bGU6ZG90dGVkO2JvcmRlci10b3Atd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDYwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbdkFlLnRyYW5zaXRpb25NZXNzYWdlc119LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZG09KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGRuLHpwLGRuXX0pLG59KSgpLEtKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9yZW5kZXJlcj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLm9uQ2hhbmdlPXI9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShlLGkpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLGkpfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoWGMpLHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bn0pLG59KSgpLHBtPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLSnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxIbz1uZXcgc2UoIk5nVmFsdWVBY2Nlc3NvciIpLEVBZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+VEFlKSxtdWx0aTohMH0sVEFlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFtFQWVdKSx0dF19KSxufSkoKSxEQWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PnRJKSxtdWx0aTohMH0sSUFlPW5ldyBzZSgiQ29tcG9zaXRpb25FdmVudE1vZGUiKSx0ST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS0p7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY29tcG9zaXRpb25Nb2RlPXIsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24oKXtsZXQgbj1nbCgpP2dsKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3Qobi50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfV9oYW5kbGVJbnB1dChlKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShlKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoZSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhYYyksdyhBZSksdyhJQWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9jb21wb3NpdGlvbkVuZChvLnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6WyR0KFtEQWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBLcChuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBaSihuKXtyZXR1cm4gbnVsbCE9biYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aH12YXIgVW89bmV3IHNlKCJOZ1ZhbGlkYXRvcnMiKSxacD1uZXcgc2UoIk5nQXN5bmNWYWxpZGF0b3JzIiksUkFlPS9eKD89LnsxLDI1NH0kKSg/PS57MSw2NH1AKVthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcLlthLXpBLVowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sU2M9Y2xhc3N7c3RhdGljIG1pbih0KXtyZXR1cm4gSkoodCl9c3RhdGljIG1heCh0KXtyZXR1cm4gJEoodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBlJCh0KX1zdGF0aWMgcmVxdWlyZWRUcnVlKHQpe3JldHVybiB0JCh0KX1zdGF0aWMgZW1haWwodCl7cmV0dXJuIG4kKHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIGkkKHQpfXN0YXRpYyBtYXhMZW5ndGgodCl7cmV0dXJuIHIkKHQpfXN0YXRpYyBwYXR0ZXJuKHQpe3JldHVybiBvJCh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gZCQodCl9c3RhdGljIGNvbXBvc2VBc3luYyh0KXtyZXR1cm4gcCQodCl9fTtmdW5jdGlvbiBKSihuKXtyZXR1cm4gdD0+e2lmKEtwKHQudmFsdWUpfHxLcChuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gJEoobil7cmV0dXJuIHQ9PntpZihLcCh0LnZhbHVlKXx8S3AobikpcmV0dXJuIG51bGw7bGV0IGU9cGFyc2VGbG9hdCh0LnZhbHVlKTtyZXR1cm4haXNOYU4oZSkmJmU+bj97bWF4OnttYXg6bixhY3R1YWw6dC52YWx1ZX19Om51bGx9fWZ1bmN0aW9uIGUkKG4pe3JldHVybiBLcChuLnZhbHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gdCQobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBuJChuKXtyZXR1cm4gS3Aobi52YWx1ZSl8fFJBZS50ZXN0KG4udmFsdWUpP251bGw6e2VtYWlsOiEwfX1mdW5jdGlvbiBpJChuKXtyZXR1cm4gdD0+S3AodC52YWx1ZSl8fCFaSih0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHIkKG4pe3JldHVybiB0PT5aSih0LnZhbHVlKSYmdC52YWx1ZS5sZW5ndGg+bj97bWF4bGVuZ3RoOntyZXF1aXJlZExlbmd0aDpuLGFjdHVhbExlbmd0aDp0LnZhbHVlLmxlbmd0aH19Om51bGx9ZnVuY3Rpb24gbyQobil7aWYoIW4pcmV0dXJuIFlBO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihLcChpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiBZQShuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzJChuKXtyZXR1cm4gbnVsbCE9bn1mdW5jdGlvbiBhJChuKXtyZXR1cm4gbjAobik/bG8obik6bn1mdW5jdGlvbiBsJChuKXtsZXQgdD17fTtyZXR1cm4gbi5mb3JFYWNoKGU9Pnt0PW51bGwhPWU/ey4uLnQsLi4uZX06dH0pLDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/bnVsbDp0fWZ1bmN0aW9uIGMkKG4sdCl7cmV0dXJuIHQubWFwKGU9PmUobikpfWZ1bmN0aW9uIHUkKG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtyZXR1cm4hbi52YWxpZGF0ZX0odCk/dDplPT50LnZhbGlkYXRlKGUpKX1mdW5jdGlvbiBkJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGwkKGMkKGUsdCkpfX1mdW5jdGlvbiBkNShuKXtyZXR1cm4gbnVsbCE9bj9kJCh1JChuKSk6bnVsbH1mdW5jdGlvbiBwJChuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzJCk7cmV0dXJuIDA9PXQubGVuZ3RoP251bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHhvKGMkKGUsdCkubWFwKGEkKSkucGlwZShCKGwkKSl9fWZ1bmN0aW9uIHA1KG4pe3JldHVybiBudWxsIT1uP3AkKHUkKG4pKTpudWxsfWZ1bmN0aW9uIFVKKG4sdCl7cmV0dXJuIG51bGw9PT1uP1t0XTpBcnJheS5pc0FycmF5KG4pP1suLi5uLHRdOltuLHRdfWZ1bmN0aW9uIGgkKG4pe3JldHVybiBuLl9yYXdWYWxpZGF0b3JzfWZ1bmN0aW9uIGYkKG4pe3JldHVybiBuLl9yYXdBc3luY1ZhbGlkYXRvcnN9ZnVuY3Rpb24gbDUobil7cmV0dXJuIG4/QXJyYXkuaXNBcnJheShuKT9uOltuXTpbXX1mdW5jdGlvbiBYQShuLHQpe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uaW5jbHVkZXModCk6bj09PXR9ZnVuY3Rpb24gekoobix0KXtsZXQgZT1sNSh0KTtyZXR1cm4gbDUobikuZm9yRWFjaChyPT57WEEoZSxyKXx8ZS5wdXNoKHIpfSksZX1mdW5jdGlvbiBqSihuLHQpe3JldHVybiBsNSh0KS5maWx0ZXIoZT0+IVhBKG4sZSkpfXZhciBRQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQgZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10fHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWQ1KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9zZXRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1wNSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVsbH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveSh0KXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaCh0KX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119cmVzZXQodCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQodCl9aGFzRXJyb3IodCxlKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKHQsZSl9Z2V0RXJyb3IodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcih0LGUpOm51bGx9fSxmcz1jbGFzcyBleHRlbmRzIFFBe2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19LHBhPWNsYXNzIGV4dGVuZHMgUUF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX0sYzU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fY2Q9dH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlzUGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX0sbSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGM1e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHBhLDIpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJuZy11bnRvdWNoZWQiLGkuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixpLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixpLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaS5pc0RpcnR5KSgibmctdmFsaWQiLGkuaXNWYWxpZCkoIm5nLWludmFsaWQiLGkuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaS5pc1BlbmRpbmcpfSxmZWF0dXJlczpbdHRdfSksbn0pKCksSkM9IlZBTElEIixxQT0iSU5WQUxJRCIsal89IlBFTkRJTkciLCRDPSJESVNBQkxFRCI7ZnVuY3Rpb24gXyQobil7cmV0dXJuKG5JKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBHSihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9kNShuKTpufHxudWxsfWZ1bmN0aW9uIHYkKG4sdCl7cmV0dXJuKG5JKHQpP3QuYXN5bmNWYWxpZGF0b3JzOm4pfHxudWxsfWZ1bmN0aW9uIFdKKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP3A1KG4pOm58fG51bGx9ZnVuY3Rpb24gbkkobil7cmV0dXJuIG51bGwhPW4mJiFBcnJheS5pc0FycmF5KG4pJiYib2JqZWN0Ij09dHlwZW9mIG59dmFyIEtBPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1lLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodGhpcy5fcmF3VmFsaWRhdG9ycyksdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPVdKKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IodCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPXR9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IodCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj10fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PUpDfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09cUF9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PWpffWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PSRDfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09JEN9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnModCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R0oodCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XSih0KX1hZGRWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyh6Sih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoekoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhqSih0LHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnModCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoakoodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsdCl9aGFzQXN5bmNWYWxpZGF0b3IodCl7cmV0dXJuIFhBKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyx0KX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKHQpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKHQ9PnQubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRvdWNoZWQodD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChlPT57ZS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQodCl9bWFya0FzRGlydHkodD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkodCl9bWFya0FzUHJpc3RpbmUodD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1tYXJrQXNQZW5kaW5nKHQ9e30pe3RoaXMuc3RhdHVzPWpfLCExIT09dC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyh0KX1kaXNhYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPSRDLHRoaXMuZXJyb3JzPW51bGwsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmRpc2FibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMuX3VwZGF0ZVZhbHVlKCksITEhPT10LmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCEwKSl9ZW5hYmxlKHQ9e30pe2xldCBlPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KHQub25seVNlbGYpO3RoaXMuc3RhdHVzPUpDLHRoaXMuX2ZvckVhY2hDaGlsZChpPT57aS5lbmFibGUoey4uLnQsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OnQuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi50LHNraXBQcmlzdGluZUNoZWNrOmV9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goaT0+aSghMSkpfV91cGRhdGVBbmNlc3RvcnModCl7dGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpLHQuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KHQpe3RoaXMuX3BhcmVudD10fWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0PXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PUpDfHx0aGlzLnN0YXR1cz09PWpfKSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IodC5lbWl0RXZlbnQpKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQpfV91cGRhdGVUcmVlVmFsaWRpdHkodD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGU9PmUuX3VwZGF0ZVRyZWVWYWxpZGl0eSh0KSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT8kQzpKQ31fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKHQpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPWpfLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtsZXQgZT1hJCh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEcsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBHfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpPyRDOnRoaXMuZXJyb3JzP3FBOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGpfKT9qXzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMocUEpP3FBOkpDfV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7bkkodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH19LFpBPWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKF8kKGUpLHYkKGksZSkpLHRoaXMuY29udHJvbHM9dCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKHQsZSl7cmV0dXJuIHRoaXMuY29udHJvbHNbdF0/dGhpcy5jb250cm9sc1t0XToodGhpcy5jb250cm9sc1t0XT1lLGUuc2V0UGFyZW50KHRoaXMpLGUuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksZSl9YWRkQ29udHJvbCh0LGUsaT17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wodCxlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDppLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wodCxlPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbCh0LGUsaT17fSl7dGhpcy5jb250cm9sc1t0XSYmdGhpcy5jb250cm9sc1t0XS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1t0XSxlJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkodCkmJnRoaXMuY29udHJvbHNbdF0uZW5hYmxlZH1zZXRWYWx1ZSh0LGU9e30peyhmdW5jdGlvbihuLHQsZSl7bi5fZm9yRWFjaENoaWxkKChpLHIpPT57aWYodm9pZCAwPT09ZVtyXSl0aHJvdyBuZXcgTXQoMTAwMiwiIil9KX0pKHRoaXMsMCx0KSxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PnsoZnVuY3Rpb24obix0LGUpe2xldCBpPW4uY29udHJvbHM7aWYoISh0P09iamVjdC5rZXlzKGkpOmkpLmxlbmd0aCl0aHJvdyBuZXcgTXQoMWUzLCIiKTtpZighaVtlXSl0aHJvdyBuZXcgTXQoMTAwMSwiIil9KSh0aGlzLCEwLGkpLHRoaXMuY29udHJvbHNbaV0uc2V0VmFsdWUodFtpXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe251bGwhPXQmJihPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10aGlzLmNvbnRyb2xzW2ldO3ImJnIucGF0Y2hWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKSl9cmVzZXQodD17fSxlPXt9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpLnJlc2V0KHRbcl0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoZSksdGhpcy5fdXBkYXRlVG91Y2hlZChlKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKHQsZSxpKT0+KHRbaV09ZS5nZXRSYXdWYWx1ZSgpLHQpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCB0PXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLChlLGkpPT4hIWkuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8ZSk7cmV0dXJuIHQmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSx0fV9mb3JFYWNoQ2hpbGQodCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChlPT57bGV0IGk9dGhpcy5jb250cm9sc1tlXTtpJiZ0KGksZSl9KX1fc2V0VXBDb250cm9scygpe3RoaXMuX2ZvckVhY2hDaGlsZCh0PT57dC5zZXRQYXJlbnQodGhpcyksdC5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKX0pfV91cGRhdGVWYWx1ZSgpe3RoaXMudmFsdWU9dGhpcy5fcmVkdWNlVmFsdWUoKX1fYW55Q29udHJvbHModCl7Zm9yKGxldFtlLGldb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhlKSYmdChpKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGUsaSxyKT0+KChpLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoZVtyXT1pLnZhbHVlKSxlKSl9X3JlZHVjZUNoaWxkcmVuKHQsZSl7bGV0IGk9dDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChyLG8pPT57aT1lKGkscixvKX0pLGl9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IobGV0IHQgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1t0XS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZCh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KT90aGlzLmNvbnRyb2xzW3RdOm51bGx9fTtmdW5jdGlvbiBpSShuLHQpe3JldHVyblsuLi50LnBhdGgsbl19ZnVuY3Rpb24gdHcobix0KXtoNShuLHQpLHQudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKG4udmFsdWUpLG4uZGlzYWJsZWQmJnQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oITApLGZ1bmN0aW9uKG4sdCl7dC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoZT0+e24uX3BlbmRpbmdWYWx1ZT1lLG4uX3BlbmRpbmdDaGFuZ2U9ITAsbi5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09bi51cGRhdGVPbiYmeSQobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnkkKG4sdCksInN1Ym1pdCIhPT1uLnVwZGF0ZU9uJiZuLm1hcmtBc1RvdWNoZWQoKX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7aWYodC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUpe2xldCBlPWk9Pnt0LnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShpKX07bi5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShlKX0pfX0obix0KX1mdW5jdGlvbiBKQShuLHQsZT0hMCl7bGV0IGk9KCk9Pnt9O3QudmFsdWVBY2Nlc3NvciYmKHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGkpLHQudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZChpKSksZUkobix0KSxuJiYodC5faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCksbi5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSl9ZnVuY3Rpb24gJEEobix0KXtuLmZvckVhY2goZT0+e2UucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmZS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKHQpfSl9ZnVuY3Rpb24gaDUobix0KXtsZXQgZT1oJChuKTtudWxsIT09dC52YWxpZGF0b3I/bi5zZXRWYWxpZGF0b3JzKFVKKGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9ZiQobik7bnVsbCE9PXQuYXN5bmNWYWxpZGF0b3I/bi5zZXRBc3luY1ZhbGlkYXRvcnMoVUooaSx0LmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4uc2V0QXN5bmNWYWxpZGF0b3JzKFtpXSk7bGV0IHI9KCk9Pm4udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOyRBKHQuX3Jhd1ZhbGlkYXRvcnMsciksJEEodC5fcmF3QXN5bmNWYWxpZGF0b3JzLHIpfWZ1bmN0aW9uIGVJKG4sdCl7bGV0IGU9ITE7aWYobnVsbCE9PW4pe2lmKG51bGwhPT10LnZhbGlkYXRvcil7bGV0IHI9aCQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9ZiQobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQuYXN5bmNWYWxpZGF0b3IpO28ubGVuZ3RoIT09ci5sZW5ndGgmJihlPSEwLG4uc2V0QXN5bmNWYWxpZGF0b3JzKG8pKX19fWxldCBpPSgpPT57fTtyZXR1cm4gJEEodC5fcmF3VmFsaWRhdG9ycyxpKSwkQSh0Ll9yYXdBc3luY1ZhbGlkYXRvcnMsaSksZX1mdW5jdGlvbiB5JChuLHQpe24uX3BlbmRpbmdEaXJ0eSYmbi5tYXJrQXNEaXJ0eSgpLG4uc2V0VmFsdWUobi5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSx0LnZpZXdUb01vZGVsVXBkYXRlKG4uX3BlbmRpbmdWYWx1ZSksbi5fcGVuZGluZ0NoYW5nZT0hMX1mdW5jdGlvbiBiJChuLHQpe2g1KG4sdCl9ZnVuY3Rpb24gZjUobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24geCQobix0KXtuLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksdC5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2w7InN1Ym1pdCI9PT1pLnVwZGF0ZU9uJiZpLl9wZW5kaW5nQ2hhbmdlJiYoZS52aWV3VG9Nb2RlbFVwZGF0ZShpLl9wZW5kaW5nVmFsdWUpLGkuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9ZnVuY3Rpb24gbTUobix0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZSxpLHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCksdC5mb3JFYWNoKG89PntvLmNvbnN0cnVjdG9yPT09dEk/ZT1vOmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobi5jb25zdHJ1Y3Rvcik9PT1wbX0obyk/aT1vOnI9b30pLHJ8fGl8fGV8fG51bGx9dmFyIFlBZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+R18pfSxldz1Qcm9taXNlLnJlc29sdmUoKSxHXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBHLHRoaXMuZm9ybT1uZXcgWkEoe30sZDUoZSkscDUoaSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQgY29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKTtlLmNvbnRyb2w9aS5yZWdpc3RlckNvbnRyb2woZS5uYW1lLGUuY29udHJvbCksdHcoZS5jb250cm9sLGUpLGUuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChlKX0pfWdldENvbnRyb2woZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX1yZW1vdmVDb250cm9sKGUpe2V3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSksdGhpcy5fZGlyZWN0aXZlcy5kZWxldGUoZSl9KX1hZGRGb3JtR3JvdXAoZSl7ZXcudGhlbigoKT0+e2xldCBpPXRoaXMuX2ZpbmRDb250YWluZXIoZS5wYXRoKSxyPW5ldyBaQSh7fSk7YiQocixlKSxpLnJlZ2lzdGVyQ29udHJvbChlLm5hbWUsciksci51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChlKXtldy50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpfSl9Z2V0Rm9ybUdyb3VwKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9dXBkYXRlTW9kZWwoZSxpKXtldy50aGVuKCgpPT57dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfSl9c2V0VmFsdWUoZSl7dGhpcy5jb250cm9sLnNldFZhbHVlKGUpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihlKXtyZXR1cm4gZS5wb3AoKSxlLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGUpOnRoaXMuZm9ybX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhVbywxMCksdyhacCwxMCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbWUFlXSksdHRdfSksbn0pKCk7ZnVuY3Rpb24gcUoobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX1mdW5jdGlvbiBZSihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uJiYyPT09T2JqZWN0LmtleXMobikubGVuZ3RoJiYidmFsdWUiaW4gbiYmImRpc2FibGVkImluIG59dmFyIG53PWNsYXNzIGV4dGVuZHMgS0F7Y29uc3RydWN0b3IodD1udWxsLGUsaSl7c3VwZXIoXyQoZSksdiQoaSxlKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVsbCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLG5JKGUpJiYoZS5ub25OdWxsYWJsZXx8ZS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9WUoodCk/dC52YWx1ZTp0KX1zZXRWYWx1ZSh0LGU9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWUuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGk9PmkodGhpcy52YWx1ZSwhMSE9PWUuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpfXBhdGNoVmFsdWUodCxlPXt9KXt0aGlzLnNldFZhbHVlKHQsZSl9cmVzZXQodD10aGlzLmRlZmF1bHRWYWx1ZSxlPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLm1hcmtBc1ByaXN0aW5lKGUpLHRoaXMubWFya0FzVW50b3VjaGVkKGUpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxlKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHModCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKHQpe3RoaXMuX29uQ2hhbmdlLnB1c2godCl9X3VucmVnaXN0ZXJPbkNoYW5nZSh0KXtxSih0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtxSih0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLHQpfV9mb3JFYWNoQ2hpbGQodCl7fV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRWYWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUodCl7WUoodCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPXQudmFsdWUsdC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dH19LEMkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmc3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBpSShudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxRQWU9e3Byb3ZpZGU6ZnMsdXNlRXhpc3Rpbmc6cmkoKCk9PktBZSl9LEtBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcyw1KSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWxHcm91cCIsIiJdXSxpbnB1dHM6e25hbWU6WyJuZ01vZGVsR3JvdXAiLCJuYW1lIl19LGV4cG9ydEFzOlsibmdNb2RlbEdyb3VwIl0sZmVhdHVyZXM6WyR0KFtRQWVdKSx0dF19KSxufSkoKSxaQWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PkpBZSl9LFhKPVByb21pc2UucmVzb2x2ZSgpLEpBZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5jb250cm9sPW5ldyBudyx0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMudXBkYXRlPW5ldyBHLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGUpe2lmKHRoaXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUpKXtsZXQgaT1lLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh7bmFtZTppLHBhdGg6dGhpcy5fZ2V0UGF0aChpKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGUmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGUpLGY1KGUsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShlKXt0aGlzLnZpZXdNb2RlbD1lLHRoaXMudXBkYXRlLmVtaXQoZSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFsb25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXt0dyh0aGlzLmNvbnRyb2wsdGhpcyksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoZSl7WEoudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZlMShpKTtYSi50aGVuKCgpPT57ciYmIXRoaXMuY29udHJvbC5kaXNhYmxlZD90aGlzLmNvbnRyb2wuZGlzYWJsZSgpOiFyJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWQmJnRoaXMuY29udHJvbC5lbmFibGUoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fZ2V0UGF0aChlKXtyZXR1cm4gdGhpcy5fcGFyZW50P2lJKGUsdGhpcy5fcGFyZW50KTpbZV19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsOSksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhubiw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOlsibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOlskdChbWkFlXSksdHQsenRdfSksbn0pKCksJEFlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5nNSksbXVsdGk6ITB9LGc1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixlPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntlKCIiPT1pP251bGw6cGFyc2VGbG9hdChpKSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6WyR0KFskQWVdKSx0dF19KSxufSkoKSxlSWU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9Pm5JZSksbXVsdGk6ITB9LHckPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx0SWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoZSxpKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbZSxpXSl9cmVtb3ZlKGUpe2ZvcihsZXQgaT10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7aT49MDstLWkpaWYodGhpcy5fYWNjZXNzb3JzW2ldWzFdPT09ZSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGksMSl9c2VsZWN0KGUpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGk9Pnt0aGlzLl9pc1NhbWVHcm91cChpLGUpJiZpWzFdIT09ZSYmaVsxXS5maXJlVW5jaGVjayhlLnZhbHVlKX0pfV9pc1NhbWVHcm91cChlLGkpe3JldHVybiEhZVswXS5jb250cm9sJiZlWzBdLl9wYXJlbnQ9PT1pLl9jb250cm9sLl9wYXJlbnQmJmVbMV0ubmFtZT09PWkubmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46dyR9KSxufSkoKSxuSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMub25DaGFuZ2U9KCk9Pnt9fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQocGEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFhjKSx3KEFlKSx3KHRJZSksdyh6bikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbJHQoW2VJZV0pLHR0XX0pLG59KSgpLGlJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ckllKSxtdWx0aTohMH0sckllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwbXt3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW2lJZV0pLHR0XX0pLG59KSgpLF81PW5ldyBzZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxvSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnY1KX0sdjU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBhe2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLnVwZGF0ZT1uZXcgRyx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPW01KDAscil9c2V0IGlzRGlzYWJsZWQoZSl7fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJkpBKGksdGhpcywhMSksdHcodGhpcy5mb3JtLHRoaXMpLHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1mNShlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuZm9ybS5zZXRWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmSkEodGhpcy5mb3JtLHRoaXMsITEpfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1faXNDb250cm9sQ2hhbmdlZChlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoVW8sMTApLHcoWnAsMTApLHcoSG8sMTApLHcoXzUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW29JZV0pLHR0LHp0XX0pLG59KSgpLHNJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+V18pfSxXXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKGVJKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiB0dyhpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtKQShlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCx4JCh0aGlzLmZvcm0sdGhpcy5kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoZSksImRpYWxvZyI9PT1lPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oZSl7dGhpcy5mb3JtLnJlc2V0KGUpLHRoaXMuc3VibWl0dGVkPSExfV91cGRhdGVEb21WYWx1ZSgpe3RoaXMuZGlyZWN0aXZlcy5mb3JFYWNoKGU9PntsZXQgaT1lLmNvbnRyb2wscj10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSE9PXImJihKQShpfHxudWxsLGUpLChuPT5uIGluc3RhbmNlb2YgbncpKHIpJiYodHcocixlKSxlLmNvbnRyb2w9cikpfSksdGhpcy5mb3JtLl91cGRhdGVUcmVlVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9zZXRVcEZvcm1Db250YWluZXIoZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO2IkKGksZSksaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2xlYW5VcEZvcm1Db250YWluZXIoZSl7aWYodGhpcy5mb3JtKXtsZXQgaT10aGlzLmZvcm0uZ2V0KGUucGF0aCk7aSYmZnVuY3Rpb24obix0KXtyZXR1cm4gZUkobix0KX0oaSxlKSYmaS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX19X3VwZGF0ZVJlZ2lzdHJhdGlvbnMoKXt0aGlzLmZvcm0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksdGhpcy5fb2xkRm9ybSYmdGhpcy5fb2xkRm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KX1fdXBkYXRlVmFsaWRhdG9ycygpe2g1KHRoaXMuZm9ybSx0aGlzKSx0aGlzLl9vbGRGb3JtJiZlSSh0aGlzLl9vbGRGb3JtLHRoaXMpfV9jaGVja0Zvcm1QcmVzZW50KCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Hcm91cCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoInN1Ym1pdCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdWJtaXQobyl9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNldCgpfSl9LGlucHV0czp7Zm9ybTpbImZvcm1Hcm91cCIsImZvcm0iXX0sb3V0cHV0czp7bmdTdWJtaXQ6Im5nU3VibWl0In0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW3NJZV0pLHR0LHp0XX0pLG59KSgpLGFJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+TSQpfSxNJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQyR7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9X2NoZWNrUGFyZW50VHlwZSgpe0UkKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoZnMsMTMpLHcoVW8sMTApLHcoWnAsMTApKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbJHQoW2FJZV0pLHR0XX0pLG59KSgpLGxJZT17cHJvdmlkZTpmcyx1c2VFeGlzdGluZzpyaSgoKT0+UyQpfSxTJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMocil9bmdPbkluaXQoKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmZvcm1EaXJlY3RpdmUuYWRkRm9ybUFycmF5KHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlRm9ybUFycmF5KHRoaXMpfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybURpcmVjdGl2ZS5nZXRGb3JtQXJyYXkodGhpcyl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gaUkobnVsbD09dGhpcy5uYW1lP3RoaXMubmFtZTp0aGlzLm5hbWUudG9TdHJpbmcoKSx0aGlzLl9wYXJlbnQpfV9jaGVja1BhcmVudFR5cGUoKXtFJCh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KGZzLDEzKSx3KFVvLDEwKSx3KFpwLDEwKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6WyR0KFtsSWVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBFJChuKXtyZXR1cm4hKG4gaW5zdGFuY2VvZiBNJHx8biBpbnN0YW5jZW9mIFdffHxuIGluc3RhbmNlb2YgUyQpfXZhciBjSWU9e3Byb3ZpZGU6cGEsdXNlRXhpc3Rpbmc6cmkoKCk9PnVJZSl9LHVJZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcGF7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPXMsdGhpcy5fYWRkZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1tNSgwLG8pfXNldCBpc0Rpc2FibGVkKGUpe31uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksZjUoZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIGlJKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhmcywxMyksdyhVbywxMCksdyhacCwxMCksdyhIbywxMCksdyhfNSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOlskdChbY0llXSksdHQsenRdfSksbn0pKCksZEllPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5EJCksbXVsdGk6ITB9O2Z1bmN0aW9uIFQkKG4sdCl7cmV0dXJuIG51bGw9PW4/YCR7dH1gOih0JiYib2JqZWN0Ij09dHlwZW9mIHQmJih0PSJPYmplY3QiKSxgJHtufTogJHt0fWAuc2xpY2UoMCw1MCkpfXZhciBEJD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgcG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj1UJCh0aGlzLl9nZXRPcHRpb25JZChlKSxlKTt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIscil9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGkpLGUodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKTplfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6WyR0KFtkSWVdKSx0dF19KSxufSkoKSxBJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoZSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsZSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKFQkKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoRCQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpLGhJZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+SSQpLG11bHRpOiEwfTtmdW5jdGlvbiBRSihuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgSSQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWV9d3JpdGVWYWx1ZShlKXtsZXQgaTtpZih0aGlzLnZhbHVlPWUsQXJyYXkuaXNBcnJheShlKSl7bGV0IHI9ZS5tYXAobz0+dGhpcy5fZ2V0T3B0aW9uSWQobykpO2k9KG8scyk9PntvLl9zZXRTZWxlY3RlZChyLmluZGV4T2Yocy50b1N0cmluZygpKT4tMSl9fWVsc2UgaT0ocixvKT0+e3IuX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2goaSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWk9PntsZXQgcj1bXSxvPWkuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PW8pe2xldCBzPW87Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKHNbYV0udmFsdWUpO3IucHVzaChjKX19ZWxzZXtsZXQgcz1pLm9wdGlvbnM7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBsPXNbYV07aWYobC5zZWxlY3RlZCl7bGV0IGM9dGhpcy5fZ2V0T3B0aW9uVmFsdWUobC52YWx1ZSk7ci5wdXNoKGMpfX19dGhpcy52YWx1ZT1yLGUocil9fV9yZWdpc3Rlck9wdGlvbihlKXtsZXQgaT0odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5zZXQoaSxlKSxpfV9nZXRPcHRpb25JZChlKXtmb3IobGV0IGkgb2YgQXJyYXkuZnJvbSh0aGlzLl9vcHRpb25NYXAua2V5cygpKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGkpLl92YWx1ZSxlKSlyZXR1cm4gaTtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoZSl7bGV0IGk9ZnVuY3Rpb24obil7cmV0dXJuIG4uc3BsaXQoIjoiKVswXX0oZSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoaSk/dGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWU6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOlskdChbaEllXSksdHRdfSksbn0pKCksUCQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudD1lLHRoaXMuX3JlbmRlcmVyPWksdGhpcy5fc2VsZWN0PXIsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRSih0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKTp0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSl9X3NldEVsZW1lbnRWYWx1ZShlKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInZhbHVlIixlKX1fc2V0U2VsZWN0ZWQoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJzZWxlY3RlZCIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWGMpLHcoSSQsOSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLG59KSgpO2Z1bmN0aW9uIFIkKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIE8kKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlRmxvYXQobil9dmFyIGhtPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9WUF9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gZSl7bGV0IGk9dGhpcy5ub3JtYWxpemVJbnB1dChlW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKGkpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGkpOllBLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxpZGF0ZShlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGUpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1lbmFibGVkKGUpe3JldHVybiBudWxsIT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCksbUllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5nSWUpLG11bHRpOiEwfSxnSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4Iix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9Pk8kKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PiRKKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbJHQoW21JZV0pLHR0XX0pLG59KSgpLF9JZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+dkllKSxtdWx0aTohMH0sdkllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5PJChlKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5KSihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgibWluIixpLl9lbmFibGVkP2kubWluOm51bGwpfSxpbnB1dHM6e21pbjoibWluIn0sZmVhdHVyZXM6WyR0KFtfSWVdKSx0dF19KSxufSkoKSx5SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9PmskKSxtdWx0aTohMH0sYkllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT55NSksbXVsdGk6ITB9LGskPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PWUxLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PmUkfWVuYWJsZWQoZSl7cmV0dXJuIGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOlskdChbeUllXSksdHRdfSksbn0pKCkseTU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGske2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT50JH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOlskdChbYkllXSksdHRdfSksbn0pKCkseEllPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5DSWUpLG11bHRpOiEwfSxDSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0iZW1haWwiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZTEsdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+biR9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwiZW1haWwiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwiZW1haWwiLCIiLCJuZ01vZGVsIiwiIl1dLGlucHV0czp7ZW1haWw6ImVtYWlsIn0sZmVhdHVyZXM6WyR0KFt4SWVdKSx0dF19KSxufSkoKSx3SWU9e3Byb3ZpZGU6VW8sdXNlRXhpc3Rpbmc6cmkoKCk9Pk1JZSksbXVsdGk6ITB9LE1JZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaG17Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJtaW5sZW5ndGgiLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+UiQoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+aSQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJtaW5sZW5ndGgiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoIm1pbmxlbmd0aCIsaS5fZW5hYmxlZD9pLm1pbmxlbmd0aDpudWxsKX0saW5wdXRzOnttaW5sZW5ndGg6Im1pbmxlbmd0aCJ9LGZlYXR1cmVzOlskdChbd0llXSksdHRdfSksbn0pKCksU0llPXtwcm92aWRlOlVvLHVzZUV4aXN0aW5nOnJpKCgpPT5FSWUpLG11bHRpOiEwfSxFSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhte2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlucHV0TmFtZT0ibWF4bGVuZ3RoIix0aGlzLm5vcm1hbGl6ZUlucHV0PWU9PlIkKGUpLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9PnIkKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbJHQoW1NJZV0pLHR0XX0pLG59KSgpLFRJZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+REllKSxtdWx0aTohMH0sREllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBobXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5vJChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsInBhdHRlcm4iLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicGF0dGVybiIsaS5fZW5hYmxlZD9pLnBhdHRlcm46bnVsbCl9LGlucHV0czp7cGF0dGVybjoicGF0dGVybiJ9LGZlYXR1cmVzOlskdChbVEllXSksdHRdfSksbn0pKCksRiQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W3ckXX0pLG59KSgpLHJJPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltGJF19KSxufSkoKSxOJD0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6XzUsdXNlVmFsdWU6ZS53YXJuT25OZ01vZGVsV2l0aEZvcm1Db250cm9sfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbRiRdfSksbn0pKCksQUllPShuZXcgS2woIjE0LjIuMTEiKSxbInRyaWdnZXIiXSksSUllPVsicGFuZWwiXTtmdW5jdGlvbiBQSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHl0KGUucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBSSWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkseXQoZS50cmlnZ2VyVmFsdWUpfX1mdW5jdGlvbiBPSWUobix0KXsxJm4mJk5uKDAsMCxbIipuZ1N3aXRjaENhc2UiLCJ0cnVlIl0pfWZ1bmN0aW9uIGtJZShuLHQpezEmbiYmKGcoMCwic3BhbiIsOSksRSgxLFJJZSwyLDEsInNwYW4iLDEwKSxFKDIsT0llLDEsMCwibmctY29udGVudCIsMTEpLHYoKSksMiZuJiYoYigibmdTd2l0Y2giLCEhTSgpLmN1c3RvbVRyaWdnZXIpLHgoMiksYigibmdTd2l0Y2hDYXNlIiwhMCkpfWZ1bmN0aW9uIEZJZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMTMpKDEsImRpdiIsMTQsMTUpLFAoIkB0cmFuc2Zvcm1QYW5lbC5kb25lIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW0ubmV4dChyLnRvU3RhdGUpKX0pKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pLE5uKDMsMSksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQHRyYW5zZm9ybVBhbmVsV3JhcCIsdm9pZCAwKSx4KDEpLFJiKCJtYXQtc2VsZWN0LXBhbmVsICIsZS5fZ2V0UGFuZWxUaGVtZSgpLCIiKSxPdCgidHJhbnNmb3JtLW9yaWdpbiIsZS5fdHJhbnNmb3JtT3JpZ2luKSgiZm9udC1zaXplIixlLl90cmlnZ2VyRm9udFNpemUsInB4IiksYigibmdDbGFzcyIsZS5wYW5lbENsYXNzKSgiQHRyYW5zZm9ybVBhbmVsIixlLm11bHRpcGxlPyJzaG93aW5nLW11bHRpcGxlIjoic2hvd2luZyIpLHplKCJpZCIsZS5pZCsiLXBhbmVsIikoImFyaWEtbXVsdGlzZWxlY3RhYmxlIixlLm11bHRpcGxlKSgiYXJpYS1sYWJlbCIsZS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGUuX2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoKSl9fXZhciBOSWU9W1tbIm1hdC1zZWxlY3QtdHJpZ2dlciJdXSwiKiJdLExJZT1bIm1hdC1zZWxlY3QtdHJpZ2dlciIsIioiXSxMJD17dHJhbnNmb3JtUGFuZWxXcmFwOkhyKCJ0cmFuc2Zvcm1QYW5lbFdyYXAiLFtJaSgiKiA9PiB2b2lkIixGZigiQHRyYW5zZm9ybVBhbmVsIixba2YoKV0se29wdGlvbmFsOiEwfSkpXSksdHJhbnNmb3JtUGFuZWw6SHIoInRyYW5zZm9ybVBhbmVsIixbRWkoInZvaWQiLHJuKHt0cmFuc2Zvcm06InNjYWxlWSgwLjgpIixtaW5XaWR0aDoiMTAwJSIsb3BhY2l0eTowfSkpLEVpKCJzaG93aW5nIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyAzMnB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLEVpKCJzaG93aW5nLW11bHRpcGxlIixybih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyA2NHB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLElpKCJ2b2lkID0+ICoiLFZpKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSl9LEIkPTAsSCQ9bmV3IHNlKCJtYXQtc2VsZWN0LXNjcm9sbC1zdHJhdGVneSIpLFVJZT1uZXcgc2UoIk1BVF9TRUxFQ1RfQ09ORklHIiksekllPXtwcm92aWRlOkgkLGRlcHM6W1FpXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sakllPUxzKHFwKGdvKFJBKGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBUZX19KSkpKSxHSWU9bmV3IHNlKCJNYXRTZWxlY3RUcmlnZ2VyIiksV0llPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBqSWV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtzdXBlcihzLG8sbCxjLGQpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD11LHRoaXMuX2xpdmVBbm5vdW5jZXI9Zix0aGlzLl9kZWZhdWx0T3B0aW9ucz1tLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oQyxfKT0+Qz09PV8sdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrQiQrKyx0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9bnVsbCx0aGlzLl9kZXN0cm95PW5ldyBUZSx0aGlzLl9vbkNoYW5nZT0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl92YWx1ZUlkPSJtYXQtc2VsZWN0LXZhbHVlLSIrQiQrKyx0aGlzLl9wYW5lbERvbmVBbmltYXRpbmdTdHJlYW09bmV3IFRlLHRoaXMuX292ZXJsYXlQYW5lbENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5fZm9jdXNlZD0hMSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtc2VsZWN0Iix0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPz8hMSx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXM9YmEoKCk9PntsZXQgQz10aGlzLm9wdGlvbnM7cmV0dXJuIEM/Qy5jaGFuZ2VzLnBpcGUoVm4oQyksdmkoKCk9PnVuKC4uLkMubWFwKF89Pl8ub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpLHZpKCgpPT50aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpKX0pLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBHLHRoaXMuX29wZW5lZFN0cmVhbT10aGlzLm9wZW5lZENoYW5nZS5waXBlKEhlKEM9PkMpLEIoKCk9Pnt9KSksdGhpcy5fY2xvc2VkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoSGUoQz0+IUMpLEIoKCk9Pnt9KSksdGhpcy5zZWxlY3Rpb25DaGFuZ2U9bmV3IEcsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyksbnVsbCE9bT8udHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw9bS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsKSx0aGlzLl9zY3JvbGxTdHJhdGVneUZhY3Rvcnk9aCx0aGlzLl9zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKSx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHApfHwwLHRoaXMuaWQ9dGhpcy5pZH1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9mb2N1c2VkfHx0aGlzLl9wYW5lbE9wZW59Z2V0IHBsYWNlaG9sZGVyKCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoU2MucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9V3QoZSl9Z2V0IGRpc2FibGVPcHRpb25DZW50ZXJpbmcoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZU9wdGlvbkNlbnRlcmluZ31zZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZyhlKXt0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nPVd0KGUpfWdldCBjb21wYXJlV2l0aCgpe3JldHVybiB0aGlzLl9jb21wYXJlV2l0aH1zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZSx0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5faW5pdGlhbGl6ZVNlbGVjdGlvbigpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSkmJnRoaXMuX29uQ2hhbmdlKGUpfWdldCB0eXBlYWhlYWREZWJvdW5jZUludGVydmFsKCl7cmV0dXJuIHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWx9c2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoZSl7dGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1QaShlKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgRl8odGhpcy5tdWx0aXBsZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5waXBlKGRpKCksb3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+dGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nKHRoaXMucGFuZWxPcGVuKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5faW5pdEtleU1hbmFnZXIoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShlPT57ZS5hZGRlZC5mb3JFYWNoKGk9Pmkuc2VsZWN0KCkpLGUucmVtb3ZlZC5mb3JFYWNoKGk9PmkuZGVzZWxlY3QoKSl9KSx0aGlzLm9wdGlvbnMuY2hhbmdlcy5waXBlKFZuKG51bGwpLG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9yZXNldE9wdGlvbnMoKSx0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9KX1uZ0RvQ2hlY2soKXtsZXQgZT10aGlzLl9nZXRUcmlnZ2VyQXJpYUxhYmVsbGVkYnkoKSxpPXRoaXMubmdDb250cm9sO2lmKGUhPT10aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl90cmlnZ2VyQXJpYUxhYmVsbGVkQnk9ZSxlP3Iuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiLGUpOnIucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiKX1pJiYodGhpcy5fcHJldmlvdXNDb250cm9sIT09aS5jb250cm9sJiYodm9pZCAwIT09dGhpcy5fcHJldmlvdXNDb250cm9sJiZudWxsIT09aS5kaXNhYmxlZCYmaS5kaXNhYmxlZCE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLmRpc2FibGVkPWkuZGlzYWJsZWQpLHRoaXMuX3ByZXZpb3VzQ29udHJvbD1pLmNvbnRyb2wpLHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpKX1uZ09uQ2hhbmdlcyhlKXsoZS5kaXNhYmxlZHx8ZS51c2VyQXJpYURlc2NyaWJlZEJ5KSYmdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpLGUudHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCYmdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci53aXRoVHlwZUFoZWFkKHRoaXMuX3R5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveS5uZXh0KCksdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpLHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9dG9nZ2xlKCl7dGhpcy5wYW5lbE9wZW4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfW9wZW4oKXt0aGlzLl9jYW5PcGVuKCkmJih0aGlzLl9wYW5lbE9wZW49ITAsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKG51bGwpLHRoaXMuX2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Y2xvc2UoKXt0aGlzLl9wYW5lbE9wZW4mJih0aGlzLl9wYW5lbE9wZW49ITEsdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX29uVG91Y2hlZCgpKX13cml0ZVZhbHVlKGUpe3RoaXMuX2Fzc2lnblZhbHVlKGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9wYW5lbE9wZW59Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHRyaWdnZXJWYWx1ZSgpe2lmKHRoaXMuZW1wdHkpcmV0dXJuIiI7aWYodGhpcy5fbXVsdGlwbGUpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLm1hcChpPT5pLnZpZXdWYWx1ZSk7cmV0dXJuIHRoaXMuX2lzUnRsKCkmJmUucmV2ZXJzZSgpLGUuam9pbigiLCAiKX1yZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF0udmlld1ZhbHVlfV9pc1J0bCgpe3JldHVybiEhdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZX1faGFuZGxlS2V5ZG93bihlKXt0aGlzLmRpc2FibGVkfHwodGhpcy5wYW5lbE9wZW4/dGhpcy5faGFuZGxlT3BlbktleWRvd24oZSk6dGhpcy5faGFuZGxlQ2xvc2VkS2V5ZG93bihlKSl9X2hhbmRsZUNsb3NlZEtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9NDA9PT1pfHwzOD09PWl8fDM3PT09aXx8Mzk9PT1pLG89MTM9PT1pfHwzMj09PWkscz10aGlzLl9rZXlNYW5hZ2VyO2lmKCFzLmlzVHlwaW5nKCkmJm8mJiFNcihlKXx8KHRoaXMubXVsdGlwbGV8fGUuYWx0S2V5KSYmcillLnByZXZlbnREZWZhdWx0KCksdGhpcy5vcGVuKCk7ZWxzZSBpZighdGhpcy5tdWx0aXBsZSl7bGV0IGE9dGhpcy5zZWxlY3RlZDtzLm9uS2V5ZG93bihlKTtsZXQgbD10aGlzLnNlbGVjdGVkO2wmJmEhPT1sJiZ0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKGwudmlld1ZhbHVlLDFlNCl9fV9oYW5kbGVPcGVuS2V5ZG93bihlKXtsZXQgaT10aGlzLl9rZXlNYW5hZ2VyLHI9ZS5rZXlDb2RlLG89NDA9PT1yfHwzOD09PXIscz1pLmlzVHlwaW5nKCk7aWYobyYmZS5hbHRLZXkpZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UoKTtlbHNlIGlmKHN8fDEzIT09ciYmMzIhPT1yfHwhaS5hY3RpdmVJdGVtfHxNcihlKSlpZighcyYmdGhpcy5fbXVsdGlwbGUmJjY1PT09ciYmZS5jdHJsS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7bGV0IGE9dGhpcy5vcHRpb25zLnNvbWUobD0+IWwuZGlzYWJsZWQmJiFsLnNlbGVjdGVkKTt0aGlzLm9wdGlvbnMuZm9yRWFjaChsPT57bC5kaXNhYmxlZHx8KGE/bC5zZWxlY3QoKTpsLmRlc2VsZWN0KCkpfSl9ZWxzZXtsZXQgYT1pLmFjdGl2ZUl0ZW1JbmRleDtpLm9uS2V5ZG93bihlKSx0aGlzLl9tdWx0aXBsZSYmbyYmZS5zaGlmdEtleSYmaS5hY3RpdmVJdGVtJiZpLmFjdGl2ZUl0ZW1JbmRleCE9PWEmJmkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1lbHNlIGUucHJldmVudERlZmF1bHQoKSxpLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9X29uRm9jdXMoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fZm9jdXNlZD0hMCx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkJsdXIoKXt0aGlzLl9mb2N1c2VkPSExLCF0aGlzLmRpc2FibGVkJiYhdGhpcy5wYW5lbE9wZW4mJih0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9vbkF0dGFjaGVkKCl7dGhpcy5fb3ZlcmxheURpci5wb3NpdGlvbkNoYW5nZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5fcG9zaXRpb25pbmdTZXR0bGVkKCl9KX1fZ2V0UGFuZWxUaGVtZSgpe3JldHVybiB0aGlzLl9wYXJlbnRGb3JtRmllbGQ/YG1hdC0ke3RoaXMuX3BhcmVudEZvcm1GaWVsZC5jb2xvcn1gOiIifWdldCBlbXB0eSgpe3JldHVybiF0aGlzLl9zZWxlY3Rpb25Nb2RlbHx8dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpfV9pbml0aWFsaXplU2VsZWN0aW9uKCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMubmdDb250cm9sJiYodGhpcy5fdmFsdWU9dGhpcy5uZ0NvbnRyb2wudmFsdWUpLHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5fdmFsdWUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe2lmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goaT0+aS5zZXRJbmFjdGl2ZVN0eWxlcygpKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLHRoaXMubXVsdGlwbGUmJmUpQXJyYXkuaXNBcnJheShlKSxlLmZvckVhY2goaT0+dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShpKSksdGhpcy5fc29ydFZhbHVlcygpO2Vsc2V7bGV0IGk9dGhpcy5fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKTtpP3RoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShpKTp0aGlzLnBhbmVsT3Blbnx8dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKC0xKX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fc2VsZWN0T3B0aW9uQnlWYWx1ZShlKXtsZXQgaT10aGlzLm9wdGlvbnMuZmluZChyPT57aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChyKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG51bGwhPXIudmFsdWUmJnRoaXMuX2NvbXBhcmVXaXRoKHIudmFsdWUsZSl9Y2F0Y2h7cmV0dXJuITF9fSk7cmV0dXJuIGkmJnRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSxpfV9hc3NpZ25WYWx1ZShlKXtyZXR1cm4hIShlIT09dGhpcy5fdmFsdWV8fHRoaXMuX211bHRpcGxlJiZBcnJheS5pc0FycmF5KGUpKSYmKHRoaXMub3B0aW9ucyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZShlKSx0aGlzLl92YWx1ZT1lLCEwKX1faW5pdEtleU1hbmFnZXIoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyBEXyh0aGlzLm9wdGlvbnMpLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2lzUnRsKCk/InJ0bCI6Imx0ciIpLndpdGhIb21lQW5kRW5kKCkud2l0aEFsbG93ZWRNb2RpZmllcktleXMoWyJzaGlmdEtleSJdKSx0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5waXBlKG90KHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhbmVsT3BlbiYmKCF0aGlzLm11bHRpcGxlJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0mJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLmZvY3VzKCksdGhpcy5jbG9zZSgpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnBpcGUob3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3BhbmVsT3BlbiYmdGhpcy5wYW5lbD90aGlzLl9zY3JvbGxPcHRpb25JbnRvVmlldyh0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleHx8MCk6IXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfSl9X3Jlc2V0T3B0aW9ucygpe2xldCBlPXVuKHRoaXMub3B0aW9ucy5jaGFuZ2VzLHRoaXMuX2Rlc3Ryb3kpO3RoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcy5waXBlKG90KGUpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX29uU2VsZWN0KGkuc291cmNlLGkuaXNVc2VySW5wdXQpLGkuaXNVc2VySW5wdXQmJiF0aGlzLm11bHRpcGxlJiZ0aGlzLl9wYW5lbE9wZW4mJih0aGlzLmNsb3NlKCksdGhpcy5mb2N1cygpKX0pLHVuKC4uLnRoaXMub3B0aW9ucy5tYXAoaT0+aS5fc3RhdGVDaGFuZ2VzKSkucGlwZShvdChlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9X29uU2VsZWN0KGUsaSl7bGV0IHI9dGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKTtudWxsIT1lLnZhbHVlfHx0aGlzLl9tdWx0aXBsZT8ociE9PWUuc2VsZWN0ZWQmJihlLnNlbGVjdGVkP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKSksaSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpLHRoaXMubXVsdGlwbGUmJih0aGlzLl9zb3J0VmFsdWVzKCksaSYmdGhpcy5mb2N1cygpKSk6KGUuZGVzZWxlY3QoKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpLG51bGwhPXRoaXMudmFsdWUmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoZS52YWx1ZSkpLHIhPT10aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpJiZ0aGlzLl9wcm9wYWdhdGVDaGFuZ2VzKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9zb3J0VmFsdWVzKCl7aWYodGhpcy5tdWx0aXBsZSl7bGV0IGU9dGhpcy5vcHRpb25zLnRvQXJyYXkoKTt0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zb3J0KChpLHIpPT50aGlzLnNvcnRDb21wYXJhdG9yP3RoaXMuc29ydENvbXBhcmF0b3IoaSxyLGUpOmUuaW5kZXhPZihpKS1lLmluZGV4T2YocikpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX19X3Byb3BhZ2F0ZUNoYW5nZXMoZSl7bGV0IGk9bnVsbDtpPXRoaXMubXVsdGlwbGU/dGhpcy5zZWxlY3RlZC5tYXAocj0+ci52YWx1ZSk6dGhpcy5zZWxlY3RlZD90aGlzLnNlbGVjdGVkLnZhbHVlOmUsdGhpcy5fdmFsdWU9aSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoaSksdGhpcy5fb25DaGFuZ2UoaSksdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLl9nZXRDaGFuZ2VFdmVudChpKSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2hpZ2hsaWdodENvcnJlY3RPcHRpb24oKXt0aGlzLl9rZXlNYW5hZ2VyJiYodGhpcy5lbXB0eT90aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpOnRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXSkpfV9jYW5PcGVuKCl7cmV0dXJuIXRoaXMuX3BhbmVsT3BlbiYmIXRoaXMuZGlzYWJsZWQmJnRoaXMub3B0aW9ucz8ubGVuZ3RoPjB9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCk7cmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkYnk/KGU/ZSsiICI6IiIpK3RoaXMuYXJpYUxhYmVsbGVkYnk6ZX1fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKXtyZXR1cm4gdGhpcy5wYW5lbE9wZW4mJnRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbT90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaWQ6bnVsbH1fZ2V0VHJpZ2dlckFyaWFMYWJlbGxlZGJ5KCl7aWYodGhpcy5hcmlhTGFiZWwpcmV0dXJuIG51bGw7bGV0IGU9dGhpcy5fcGFyZW50Rm9ybUZpZWxkPy5nZXRMYWJlbElkKCksaT0oZT9lKyIgIjoiIikrdGhpcy5fdmFsdWVJZDtyZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRieSYmKGkrPSIgIit0aGlzLmFyaWFMYWJlbGxlZGJ5KSxpfV9wYW5lbERvbmVBbmltYXRpbmcoZSl7dGhpcy5vcGVuZWRDaGFuZ2UuZW1pdChlKX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzKCksdGhpcy5vcGVuKCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fcGFuZWxPcGVufHwhdGhpcy5lbXB0eXx8dGhpcy5fZm9jdXNlZCYmISF0aGlzLl9wbGFjZWhvbGRlcn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhkYSksdyhubiksdyhwdCksdyhSXyksdyhBZSksdyhpciw4KSx3KEdfLDgpLHcoV18sOCksdyh1bSw4KSx3KHBhLDEwKSxLbygidGFiaW5kZXgiKSx3KEgkKSx3KFVDKSx3KFVJZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQUllLDUpLGx0KElJZSw1KSxsdChRcCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50cmlnZ2VyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9vdmVybGF5RGlyPXIuZmlyc3QpfX0saW5wdXRzOnt1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxwYW5lbENsYXNzOiJwYW5lbENsYXNzIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw6InR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLHNvcnRDb21wYXJhdG9yOiJzb3J0Q29tcGFyYXRvciIsaWQ6ImlkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLEpwPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXSWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX3RyaWdnZXJGb250U2l6ZT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0idG9wIix0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25zPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9XX1fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChlLGkscil7bGV0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qZS1pK28vMikscil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZShvdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJih0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1vcGVuKCl7c3VwZXIuX2Nhbk9wZW4oKSYmKHN1cGVyLm9wZW4oKSx0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl90cmlnZ2VyRm9udFNpemU9cGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCkuZm9udFNpemV8fCIwIiksdGhpcy5fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQmJih0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSl9X3Njcm9sbE9wdGlvbkludG9WaWV3KGUpe2xldCBpPVdDKGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxyPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPTA9PT1lJiYxPT09aT8wOmtBKChlK2kpKnIscix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLDI1Nil9X3Bvc2l0aW9uaW5nU2V0dGxlZCgpe3RoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCksdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10aGlzLl9zY3JvbGxUb3B9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLnBhbmVsT3Blbj90aGlzLl9zY3JvbGxUb3A9MDoodGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPTAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHN1cGVyLl9wYW5lbERvbmVBbmltYXRpbmcoZSl9X2dldENoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsZSl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7bGV0IHMsZT10aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5faXNSdGwoKSxvPXRoaXMubXVsdGlwbGU/NTY6MzI7aWYodGhpcy5tdWx0aXBsZSlzPTQwO2Vsc2UgaWYodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKXM9MTY7ZWxzZXtsZXQgYz10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXXx8dGhpcy5vcHRpb25zLmZpcnN0O3M9YyYmYy5ncm91cD8zMjoxNn1yfHwocyo9LTEpO2xldCBhPTAtKGUubGVmdCtzLShyP286MCkpLGw9ZS5yaWdodCtzLWkud2lkdGgrKHI/MDpvKTthPjA/cys9YSs4Omw+MCYmKHMtPWwrOCksdGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQocyksdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGUsaSxyKXtsZXQgbCxvPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxzPShvLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMixhPU1hdGguZmxvb3IoMjU2L28pO3JldHVybiB0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmc/MDoobD0wPT09dGhpcy5fc2Nyb2xsVG9wP2Uqbzp0aGlzLl9zY3JvbGxUb3A9PT1yPyhlLSh0aGlzLl9nZXRJdGVtQ291bnQoKS1hKSkqbysoby0odGhpcy5fZ2V0SXRlbUNvdW50KCkqby0yNTYpJW8pOmktby8yLE1hdGgucm91bmQoLTEqbC1zKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KGUpe2xldCBpPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxyPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbz10aGlzLl90cmlnZ2VyUmVjdC50b3AtOCxzPXIuaGVpZ2h0LXRoaXMuX3RyaWdnZXJSZWN0LmJvdHRvbS04LGE9TWF0aC5hYnModGhpcy5fb2Zmc2V0WSksYz1NYXRoLm1pbih0aGlzLl9nZXRJdGVtQ291bnQoKSppLDI1NiktYS10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQ7Yz5zP3RoaXMuX2FkanVzdFBhbmVsVXAoYyxzKTphPm8/dGhpcy5fYWRqdXN0UGFuZWxEb3duKGEsbyxlKTp0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpfV9hZGp1c3RQYW5lbFVwKGUsaSl7bGV0IHI9TWF0aC5yb3VuZChlLWkpO3RoaXMuX3Njcm9sbFRvcC09cix0aGlzLl9vZmZzZXRZLT1yLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKGUsaSxyKXtsZXQgbz1NYXRoLnJvdW5kKGUtaSk7aWYodGhpcy5fc2Nyb2xsVG9wKz1vLHRoaXMuX29mZnNldFkrPW8sdGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKSx0aGlzLl9zY3JvbGxUb3A+PXIpcmV0dXJuIHRoaXMuX3Njcm9sbFRvcD1yLHRoaXMuX29mZnNldFk9MCx2b2lkKHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIHRvcCAwcHgiKX1fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCl7bGV0IGEsZT10aGlzLl9nZXRJdGVtSGVpZ2h0KCksaT10aGlzLl9nZXRJdGVtQ291bnQoKSxyPU1hdGgubWluKGkqZSwyNTYpLHM9aSplLXI7YT10aGlzLmVtcHR5PzA6TWF0aC5tYXgodGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSwwKSxhKz1XQyhhLHRoaXMub3B0aW9ucyx0aGlzLm9wdGlvbkdyb3Vwcyk7bGV0IGw9ci8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGEsbCxzKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGEsbCxzKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChzKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2xldCBlPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxpPShlLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMjtyZXR1cm5gNTAlICR7TWF0aC5hYnModGhpcy5fb2Zmc2V0WSktaStlLzJ9cHggMHB4YH1fZ2V0SXRlbUhlaWdodCgpe3JldHVybiAzKnRoaXMuX3RyaWdnZXJGb250U2l6ZX1fZ2V0SXRlbUNvdW50KCl7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGgrdGhpcy5vcHRpb25Hcm91cHMubGVuZ3RofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixHSWUsNSksTmkocix1YSw1KSxOaShyLEdDLDUpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksTmUobz1MZSgpKSYmKGkub3B0aW9ucz1vKSxOZShvPUxlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwibWF0LXNlbGVjdCJdLGhvc3RWYXJzOjE5LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJsdXIoKX0pLDImZSYmKHplKCJpZCIsaS5pZCkoInRhYmluZGV4IixpLnRhYkluZGV4KSgiYXJpYS1jb250cm9scyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5wYW5lbE9wZW4pKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQudG9TdHJpbmcoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLl9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpKSxhdCgibWF0LXNlbGVjdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LXNlbGVjdC1yZXF1aXJlZCIsaS5yZXF1aXJlZCkoIm1hdC1zZWxlY3QtZW1wdHkiLGkuZW1wdHkpKCJtYXQtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6VV8sdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOkxJZSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih3aShOSWUpLGcoMCwiZGl2IiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksZygzLCJkaXYiLDIpLEUoNCxQSWUsMiwxLCJzcGFuIiwzKSxFKDUsa0llLDMsMiwic3BhbiIsNCksdigpLGcoNiwiZGl2Iiw1KSxOKDcsImRpdiIsNiksdigpKCksRSg4LEZJZSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksUCgiYmFja2Ryb3BDbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkoImF0dGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25BdHRhY2hlZCgpfSkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkpLDImZSl7bGV0IHI9c3QoMSk7emUoImFyaWEtb3ducyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSx4KDMpLGIoIm5nU3dpdGNoIixpLmVtcHR5KSx6ZSgiaWQiLGkuX3ZhbHVlSWQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwhMCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLCExKSx4KDMpLGIoImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIixpLl9vdmVybGF5UGFuZWxDbGFzcykoImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsaS5fc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixyKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkucGFuZWxPcGVuKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS5fcG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIixudWxsPT1pLl90cmlnZ2VyUmVjdD9udWxsOmkuX3RyaWdnZXJSZWN0LndpZHRoKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLGkuX29mZnNldFkpfX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxRcCxzbV0sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtc2VsZWN0LXZhbHVle3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo1cHggc29saWQ7bWFyZ2luOjAgNHB4fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmlzaWJpbGl0eTpoaWRkZW59J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbTCQudHJhbnNmb3JtUGFuZWxXcmFwLEwkLnRyYW5zZm9ybVBhbmVsXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJbD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlt6SWVdLGltcG9ydHM6W2tlLFZvLE9fLGRuLFN1LGRtLE9fLGRuXX0pLG59KSgpO2Z1bmN0aW9uIHFJZShuLHQpezEmbiYmKEt0KDApLGcoMSwiZGl2IiwxKSxEKDIsIiBUaGVyZSBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBEZWZhdWx0IC0gKEVuYWJsZWQvRGlzYWJsZWQpIGFuZCAoRW5hYmxlZC9EaXNhYmxlZCkgIiksdigpLGcoMywiZGl2IiwxKSxEKDQsIiBPbmx5IGZsYWdzIHdpdGggbm9uIGRlZmF1bHQgdmFsdWVzIGFyZSBzZW50IHRvIHRoZSBiYWNrZW5kLiAiKSx2KCksWnQoKSl9ZnVuY3Rpb24gWUllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJkaXYiLDEpLEQoMiksdigpLFp0KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoJyBGZWF0dXJlIEZsYWdzIGFyZSBmaWx0ZXJlZCB0byBvbmx5IHNob3cgZmVhdHVyZXMgY29udGFpbmluZyAiJyxlLnNob3dGbGFnc0ZpbHRlciwnIiAnKX19ZnVuY3Rpb24gWEllKG4sdCl7MSZuJiYoZygwLCJzdXAiLDExKSxEKDEsIjEiKSx2KCkpfWZ1bmN0aW9uIFFJZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24gS0llKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNlbGVjdCIsMTIpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLmZsYWdDaGFuZ2VkLmVtaXQoe2ZsYWc6by5mbGFnLHN0YXR1czpyLnZhbHVlfSkpfSksZygxLCJtYXQtb3B0aW9uIiwxMyksRCgyKSx2KCksZygzLCJtYXQtb3B0aW9uIiwxNCksRCg0LCJFbmFibGVkIiksdigpLGcoNSwibWF0LW9wdGlvbiIsMTUpLEQoNiwiRGlzYWJsZWQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7YigidmFsdWUiLGUuc3RhdHVzKSx4KDIpLHFlKCIgRGVmYXVsdCAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUuZGVmYXVsdFZhbHVlKSwiICIpfX1mdW5jdGlvbiBaSWUobix0KXtpZigxJm4mJihnKDAsInRkIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLHFlKCJVbnN1cHBvcnRlZCBCeSBVSSAiLGkuZm9ybWF0RmxhZ1ZhbHVlKGUudmFsdWUpLCIiKX19ZnVuY3Rpb24gSkllKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIpKDIsInRkIikoMywiZGl2IiksRCg0KSxFKDUsWEllLDIsMCwic3VwIiw3KSx2KCkoKSxFKDYsUUllLDEsMCwibmctY29udGFpbmVyIiw4KSxFKDcsS0llLDcsMiwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksRSg5LFpJZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSx2KCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXN0KDgpLHI9c3QoMTApLG89TSgpO3goNCkscWUoIiAiLGUuZmxhZywiICIpLHgoMSksYigibmdJZiIsZS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikseCgxKSxiKCJuZ0lmIixvLmlzRWRpdGFibGUoZSkpKCJuZ0lmVGhlbiIsaSkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gJEllKG4sdCl7MSZuJiYoZygwLCJkaXYiLDExKSxEKDEsIiAxLiBTZW50IHRvIHNlcnZlciB3aGVuIG92ZXJyaWRkZW4gIiksdigpKX12YXIgbEksVSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXI9ITEsdGhpcy5mbGFnQ2hhbmdlZD1uZXcgRyx0aGlzLmFsbEZsYWdzUmVzZXQ9bmV3IEd9c2VyaWFsaXplRmxhZ1ZhbHVlKGUpe3JldHVybiEwPT09ZT8iRW5hYmxlZCI6ITE9PT1lPyJEaXNhYmxlZCI6bnVsbD09ZT8ibnVsbCI6QXJyYXkuaXNBcnJheShlKT9KU09OLnN0cmluZ2lmeShlKTplLnRvU3RyaW5nKCl9aXNFZGl0YWJsZShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmRlZmF1bHRWYWx1ZX1mb3JtYXRGbGFnVmFsdWUoZSl7bGV0IGk9dGhpcy5zZXJpYWxpemVGbGFnVmFsdWUoZSk7cmV0dXJuIDA9PT1pLmxlbmd0aD8iIjpgLSAke2l9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntmZWF0dXJlRmxhZ1N0YXR1c2VzOiJmZWF0dXJlRmxhZ1N0YXR1c2VzIixoYXNGbGFnc1NlbnRUb1NlcnZlcjoiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLHNob3dGbGFnc0ZpbHRlcjoic2hvd0ZsYWdzRmlsdGVyIn0sb3V0cHV0czp7ZmxhZ0NoYW5nZWQ6ImZsYWdDaGFuZ2VkIixhbGxGbGFnc1Jlc2V0OiJhbGxGbGFnc1Jlc2V0In0sZGVjbHM6MTIsdmFyczo0LGNvbnN0czpbWzEsInNjcm9sbGluZy1wYWdlIl0sWzEsIm1lc3NhZ2UiXSxbMSwid2FybmluZyJdLFs0LCJuZ0lmIl0sWzEsImZlYXR1cmUtZmxhZy10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl0sWyJjbGFzcyIsIm5vdGUtMSIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdLFsic2VsZWN0QmxvY2siLCIiXSxbInVuc3VwcG9ydGVkQmxvY2siLCIiXSxbMSwibm90ZS0xIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWyJ2YWx1ZSIsImRlZmF1bHQiXSxbInZhbHVlIiwiZW5hYmxlZCJdLFsidmFsdWUiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgyIiwyKSxEKDMsIldBUk5JTkc6IEVYUEVSSU1FTlRBTCBGRUFUVVJFUyBBSEVBRCEiKSx2KCksRCg0LCIgQnkgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIHlvdSBjb3VsZCBwdXQgdGhlIGFwcGxpY2F0aW9uIGluIGFuIHVudXNhYmxlIHN0YXRlIG9yIGV4cG9zZSB5b3Vyc2VsZiB0byB1bnRlc3RlZCBmZWF0dXJlcyBvciBwb3RlbnRpYWwgYnVncy4gIiksdigpLEUoNSxxSWUsNSwwLCJuZy1jb250YWluZXIiLDMpLEUoNixZSWUsMywxLCJuZy1jb250YWluZXIiLDMpLGcoNywidGFibGUiLDQpLEUoOCxKSWUsMTEsNSwibmctY29udGFpbmVyIiw1KSx2KCksZyg5LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmFsbEZsYWdzUmVzZXQuZW1pdCgpfSksRCgxMCwiUmVzZXQgQWxsIiksdigpLEUoMTEsJEllLDIsMCwiZGl2Iiw3KSx2KCkpLDImZSYmKHgoNSksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikseCgxKSxiKCJuZ0lmIixpLnNob3dGbGFnc0ZpbHRlcikseCgyKSxiKCJuZ0Zvck9mIixpLmZlYXR1cmVGbGFnU3RhdHVzZXMpLHgoMyksYigibmdJZiIsaS5oYXNGbGFnc1NlbnRUb1NlcnZlcikpfSxkZXBlbmRlbmNpZXM6W3luLFhlLCRuLEpwLHVhXSxzdHlsZXM6WyIubWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxNnB4fS5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjQ0MzM2fS5ub3RlLTFbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZjk4MDB9LnNjcm9sbGluZy1wYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0Ojkwdmh9LmZlYXR1cmUtZmxhZy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0iXX0pLG59KSgpLHokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0ZsYWdzRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChnQykucGlwZShCKGk9Pmkuc2hvd0ZsYWdzPy50b0xvd2VyQ2FzZSgpKSksdGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlciQ9dGhpcy5zdG9yZS5zZWxlY3QoV2YpLnBpcGUoQihpPT5PYmplY3QudmFsdWVzKGkpLnNvbWUocj0+ci5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikpKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ0MpLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QodEspLHRoaXMuc3RvcmUuc2VsZWN0KFdmKSx0aGlzLnNob3dGbGFnc0ZpbHRlciQpLEIoKFtpLHIsbyxzXSk9Pk9iamVjdC5lbnRyaWVzKHIpLmZpbHRlcigoW2FdKT0+IXN8fGEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzKSkubWFwKChbYSxsXSk9PntsZXQgYz1mdW5jdGlvbihuLHQpe3JldHVybiB2b2lkIDA9PT10W25dPyJkZWZhdWx0Ijp0W25dPyJlbmFibGVkIjoiZGlzYWJsZWQifShhLGkpO3JldHVybntmbGFnOmEsZGVmYXVsdFZhbHVlOmwsc3RhdHVzOmMsc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW46b1thXS5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbn19KSkpfW9uRmxhZ0NoYW5nZWQoe2ZsYWc6ZSxzdGF0dXM6aX0pe3N3aXRjaChpKXtjYXNlImRlZmF1bHQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goRnAoe2ZsYWdzOltlXX0pKTticmVhaztjYXNlImVuYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITB9fSkpO2JyZWFrO2Nhc2UiZGlzYWJsZWQiOnRoaXMuc3RvcmUuZGlzcGF0Y2goWmYoe2ZsYWdzOntbZV06ITF9fSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGbGFnIGNoYW5nZWQgdG8gaW52YWxpZCBzdGF0dXMiKX19b25BbGxGbGFnc1Jlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1XygpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImZlYXR1cmUtZmxhZy1kaWFsb2ciXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZmVhdHVyZUZsYWdTdGF0dXNlcyIsImhhc0ZsYWdzU2VudFRvU2VydmVyIiwic2hvd0ZsYWdzRmlsdGVyIiwiZmxhZ0NoYW5nZWQiLCJhbGxGbGFnc1Jlc2V0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJmZWF0dXJlLWZsYWctZGlhbG9nLWNvbXBvbmVudCIsMCksUCgiZmxhZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmxhZ0NoYW5nZWQobyl9KSgiYWxsRmxhZ3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFsbEZsYWdzUmVzZXQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJmZWF0dXJlRmxhZ1N0YXR1c2VzIixXKDEsMyxpLmZlYXR1cmVGbGFncyQpKSgiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLFcoMiw1LGkuaGFzRmxhZ3NTZW50VG9TZXJ2ZXIkKSkoInNob3dGbGFnc0ZpbHRlciIsVygzLDcsaS5zaG93RmxhZ3NGaWx0ZXIkKSl9LGRlcGVuZGVuY2llczpbVSQsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGokPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kaWFsb2c9aSx0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZT16JCx0aGlzLnNob3dGZWF0dXJlRmxhZ3MkPXRoaXMuc3RvcmUuc2VsZWN0KGxLKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfW5nT25Jbml0KCl7dGhpcy5zaG93RmVhdHVyZUZsYWdzJC5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57aWYoZSlyZXR1cm4gdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2c9dGhpcy5kaWFsb2cub3Blbih0aGlzLmZlYXR1cmVGbGFnRGlhbG9nVHlwZSksdm9pZCB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZy5hZnRlckNsb3NlZCgpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChGcCh7ZmxhZ3M6WyJzaG93RmxhZ3MiXX0pKSxzZXRUaW1lb3V0KCgpPT57d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwxKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLW1vZGFsLXRyaWdnZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJQZT1bInJvdXRlQ29udGFpbmVyIl0sRyQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lfW5nT25DaGFuZ2VzKGUpe2xldCBpPWUuYWN0aXZlTmdDb21wb25lbnQ7aWYoaSYmKHRoaXMucm91dGVDb250YWluZXIuY2xlYXIoKSxpLmN1cnJlbnRWYWx1ZSkpe2xldCByPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGkuY3VycmVudFZhbHVlKTt0aGlzLnJvdXRlQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChyKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoRW8pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJQZSw3LHlpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnJvdXRlQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVOZ0NvbXBvbmVudDoiYWN0aXZlTmdDb21wb25lbnQifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3V0ZUNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmQWkoMCxudWxsLDApfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMucmVnaXN0cnk9aSx0aGlzLmFjdGl2ZU5nQ29tcG9uZW50JD1wbihbdGhpcy5zdG9yZS5zZWxlY3QocmEpLHRoaXMuc3RvcmUuc2VsZWN0KFJRKV0pLnBpcGUoQigoW3Isb10pPT5yJiYobnVsbD09PW98fHVzKHIsbykpP3RoaXMucmVnaXN0cnkuZ2V0TmdDb21wb25lbnRCeVJvdXRlS2luZChyLnJvdXRlS2luZCk6bnVsbCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KGhjKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVOZ0NvbXBvbmVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicm91dGVyLW91dGxldC1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSksMiZlJiZiKCJhY3RpdmVOZ0NvbXBvbmVudCIsVygxLDEsaS5hY3RpdmVOZ0NvbXBvbmVudCQpKX0sZGVwZW5kZW5jaWVzOltHJCxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscSQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtlLnNlbGVjdChtdSkuc3Vic2NyaWJlKGk9Pntkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsaSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhcmstbW9kZS1zdXBwb3J0ZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWV89KCgpPT4oZnVuY3Rpb24obil7bltuLkFDVElWRV9QTFVHSU49MF09IkFDVElWRV9QTFVHSU4ifShZX3x8KFlfPXt9KSksWV8pKSgpLFkkPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5kZWVwTGlua2VyPWUsdGhpcy5vblZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGUsdGhpcy5vbkhhc2hDaGFuZ2U9bGkod2luZG93LCJwb3BzdGF0ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpfW5nT25Jbml0KCl7dGhpcy5vbkhhc2hDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5kZWVwTGlua2VyLmdldFBsdWdpbklkKCk7ZSE9PXRoaXMuYWN0aXZlUGx1Z2luSWQmJnRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtwcm9wOllfLkFDVElWRV9QTFVHSU4sdmFsdWU6ZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUuYWN0aXZlUGx1Z2luSWQpe2xldCBpPWUuYWN0aXZlUGx1Z2luSWQ7dGhpcy5kZWVwTGlua2VyLnNldFBsdWdpbklkKG51bGw9PT1pLmN1cnJlbnRWYWx1ZT8iIjppLmN1cnJlbnRWYWx1ZSx7ZGVmYXVsdFZhbHVlOiIiLHVzZUxvY2F0aW9uUmVwbGFjZTpudWxsPT09aS5wcmV2aW91c1ZhbHVlfHxpLmZpcnN0Q2hhbmdlfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFwKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGFzaC1zdG9yYWdlLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCJ9LG91dHB1dHM6e29uVmFsdWVDaGFuZ2U6Im9uVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbenRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKX1vblZhbHVlQ2hhbmdlZChlKXtlLnByb3A9PT1ZXy5BQ1RJVkVfUExVR0lOJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKGREKHtwbHVnaW46ZS52YWx1ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5JZCIsIm9uVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhhc2gtc3RvcmFnZS1jb21wb25lbnQiLDApLFAoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5JZCIsVygxLDEsaS5hY3RpdmVQbHVnaW5JZCQpKX0sZGVwZW5kZW5jaWVzOltZJCxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1UGU9WyIqIl07ZnVuY3Rpb24gcncobil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodm9pZCAwPT09bEkmJihsST1udWxsLHR5cGVvZiB3aW5kb3c8InUiKSl7bGV0IG49d2luZG93O3ZvaWQgMCE9PW4udHJ1c3RlZFR5cGVzJiYobEk9bi50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI2NvbXBvbmVudHMiLHtjcmVhdGVIVE1MOnQ9PnR9KSl9cmV0dXJuIGxJfSgpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIFEkKG4pe3JldHVybiBFcnJvcihgVW5hYmxlIHRvIGZpbmQgaWNvbiB3aXRoIHRoZSBuYW1lICIke259ImApfWZ1bmN0aW9uIEskKG4pe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHtufSIuYCl9ZnVuY3Rpb24gWiQobil7cmV0dXJuIEVycm9yKGBUaGUgbGl0ZXJhbCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIHNhZmUgSFRNTCBieSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgbGl0ZXJhbCB3YXMgIiR7bn0iLmApfXZhciBTZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy51cmw9dCx0aGlzLnN2Z1RleHQ9ZSx0aGlzLm9wdGlvbnM9aX19LFhfPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5faHR0cENsaWVudD1lLHRoaXMuX3Nhbml0aXplcj1pLHRoaXMuX2Vycm9ySGFuZGxlcj1vLHRoaXMuX3N2Z0ljb25Db25maWdzPW5ldyBNYXAsdGhpcy5faWNvblNldENvbmZpZ3M9bmV3IE1hcCx0aGlzLl9jYWNoZWRJY29uc0J5VXJsPW5ldyBNYXAsdGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXM9bmV3IE1hcCx0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXM9bmV3IE1hcCx0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1bIm1hdGVyaWFsLWljb25zIiwibWF0LWxpZ2F0dXJlLWZvbnQiXSx0aGlzLl9kb2N1bWVudD1yfWFkZFN2Z0ljb24oZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgiIixlLGkscil9YWRkU3ZnSWNvbkxpdGVyYWwoZSxpLHIpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25Jbk5hbWVzcGFjZShlLGkscixvKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IFNkKHIsbnVsbCxvKSl9YWRkU3ZnSWNvblJlc29sdmVyKGUpe3JldHVybiB0aGlzLl9yZXNvbHZlcnMucHVzaChlKSx0aGlzfWFkZFN2Z0ljb25MaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIsbyl7bGV0IHM9dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKEpyLkhUTUwscik7aWYoIXMpdGhyb3cgWiQocik7bGV0IGE9cncocyk7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBTZCgiIixhLG8pKX1hZGRTdmdJY29uU2V0KGUsaSl7cmV0dXJuIHRoaXMuYWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldExpdGVyYWwoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0TGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSl9YWRkU3ZnSWNvblNldEluTmFtZXNwYWNlKGUsaSxyKXtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvblNldENvbmZpZyhlLG5ldyBTZChpLG51bGwscikpfWFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoZSxpLHIpe2xldCBvPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5IVE1MLGkpO2lmKCFvKXRocm93IFokKGkpO2xldCBzPXJ3KG8pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IFNkKCIiLHMscikpfXJlZ2lzdGVyRm9udENsYXNzQWxpYXMoZSxpPWUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KGUsaSksdGhpc31jbGFzc05hbWVGb3JGb250QWxpYXMoZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQoZSl8fGV9c2V0RGVmYXVsdEZvbnRTZXRDbGFzcyguLi5lKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1lLHRoaXN9Z2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfWdldFN2Z0ljb25Gcm9tVXJsKGUpe2xldCBpPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsZSk7aWYoIWkpdGhyb3cgSyQoZSk7bGV0IHI9dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5nZXQoaSk7cmV0dXJuIHI/anQoY0kocikpOnRoaXMuX2xvYWRTdmdJY29uRnJvbUNvbmZpZyhuZXcgU2QoZSxudWxsKSkucGlwZShOdChvPT50aGlzLl9jYWNoZWRJY29uc0J5VXJsLnNldChpLG8pKSxCKG89PmNJKG8pKSl9Z2V0TmFtZWRTdmdJY29uKGUsaT0iIil7bGV0IHI9SiQoaSxlKSxvPXRoaXMuX3N2Z0ljb25Db25maWdzLmdldChyKTtpZihvKXJldHVybiB0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2lmKG89dGhpcy5fZ2V0SWNvbkNvbmZpZ0Zyb21SZXNvbHZlcnMoaSxlKSxvKXJldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQocixvKSx0aGlzLl9nZXRTdmdGcm9tQ29uZmlnKG8pO2xldCBzPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChpKTtyZXR1cm4gcz90aGlzLl9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxzKTpHbChRJChyKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fc3ZnSWNvbkNvbmZpZ3MuY2xlYXIoKSx0aGlzLl9pY29uU2V0Q29uZmlncy5jbGVhcigpLHRoaXMuX2NhY2hlZEljb25zQnlVcmwuY2xlYXIoKX1fZ2V0U3ZnRnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P2p0KGNJKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpLnBpcGUoQihpPT5jSShpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO3JldHVybiByP2p0KHIpOnhvKGkuZmlsdGVyKHM9PiFzLnN2Z1RleHQpLm1hcChzPT50aGlzLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcocykucGlwZShDbyhhPT57bGV0IGM9YExvYWRpbmcgaWNvbiBzZXQgVVJMOiAke3RoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwscy51cmwpfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWA7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYykpLGp0KG51bGwpfSkpKSkucGlwZShCKCgpPT57bGV0IHM9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtpZighcyl0aHJvdyBRJChlKTtyZXR1cm4gc30pKX1fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKXtmb3IobGV0IHI9aS5sZW5ndGgtMTtyPj0wO3ItLSl7bGV0IG89aVtyXTtpZihvLnN2Z1RleHQmJm8uc3ZnVGV4dC50b1N0cmluZygpLmluZGV4T2YoZSk+LTEpe2xldCBzPXRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKG8pLGE9dGhpcy5fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KHMsZSxvLm9wdGlvbnMpO2lmKGEpcmV0dXJuIGF9fXJldHVybiBudWxsfV9sb2FkU3ZnSWNvbkZyb21Db25maWcoZSl7cmV0dXJuIHRoaXMuX2ZldGNoSWNvbihlKS5waXBlKE50KGk9PmUuc3ZnVGV4dD1pKSxCKCgpPT50aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKSkpfV9sb2FkU3ZnSWNvblNldEZyb21Db25maWcoZSl7cmV0dXJuIGUuc3ZnVGV4dD9qdChudWxsKTp0aGlzLl9mZXRjaEljb24oZSkucGlwZShOdChpPT5lLnN2Z1RleHQ9aSkpfV9leHRyYWN0U3ZnSWNvbkZyb21TZXQoZSxpLHIpe2xldCBvPWUucXVlcnlTZWxlY3RvcihgW2lkPSIke2l9Il1gKTtpZighbylyZXR1cm4gbnVsbDtsZXQgcz1vLmNsb25lTm9kZSghMCk7aWYocy5yZW1vdmVBdHRyaWJ1dGUoImlkIiksInN2ZyI9PT1zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMocyxyKTtpZigic3ltYm9sIj09PXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdGhpcy5fc2V0U3ZnQXR0cmlidXRlcyh0aGlzLl90b1N2Z0VsZW1lbnQocykscik7bGV0IGE9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcocncoIjxzdmc+PC9zdmc+IikpO3JldHVybiBhLmFwcGVuZENoaWxkKHMpLHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoYSxyKX1fc3ZnRWxlbWVudEZyb21TdHJpbmcoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7aS5pbm5lckhUTUw9ZTtsZXQgcj1pLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpO2lmKCFyKXRocm93IEVycm9yKCI8c3ZnPiB0YWcgbm90IGZvdW5kIik7cmV0dXJuIHJ9X3RvU3ZnRWxlbWVudChlKXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhydygiPHN2Zz48L3N2Zz4iKSkscj1lLmF0dHJpYnV0ZXM7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspe2xldHtuYW1lOnMsdmFsdWU6YX09cltvXTsiaWQiIT09cyYmaS5zZXRBdHRyaWJ1dGUocyxhKX1mb3IobGV0IG89MDtvPGUuY2hpbGROb2Rlcy5sZW5ndGg7bysrKWUuY2hpbGROb2Rlc1tvXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERSYmaS5hcHBlbmRDaGlsZChlLmNoaWxkTm9kZXNbb10uY2xvbmVOb2RlKCEwKSk7cmV0dXJuIGl9X3NldFN2Z0F0dHJpYnV0ZXMoZSxpKXtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImZpdCIsIiIpLGUuc2V0QXR0cmlidXRlKCJoZWlnaHQiLCIxMDAlIiksZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLGUuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGkmJmkudmlld0JveCYmZS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLGkudmlld0JveCksZX1fZmV0Y2hJY29uKGUpe2xldHt1cmw6aSxvcHRpb25zOnJ9PWUsbz1yPy53aXRoQ3JlZGVudGlhbHM/PyExO2lmKCF0aGlzLl9odHRwQ2xpZW50KXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBIdHRwQ2xpZW50IHByb3ZpZGVyIGZvciB1c2Ugd2l0aCBBbmd1bGFyIE1hdGVyaWFsIGljb25zLiBQbGVhc2UgaW5jbHVkZSB0aGUgSHR0cENsaWVudE1vZHVsZSBmcm9tIEBhbmd1bGFyL2NvbW1vbi9odHRwIGluIHlvdXIgYXBwIGltcG9ydHMuIik7aWYobnVsbD09aSl0aHJvdyBFcnJvcihgQ2Fubm90IGZldGNoIGljb24gZnJvbSBVUkwgIiR7aX0iLmApO2xldCBzPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShKci5SRVNPVVJDRV9VUkwsaSk7aWYoIXMpdGhyb3cgSyQoaSk7bGV0IGE9dGhpcy5faW5Qcm9ncmVzc1VybEZldGNoZXMuZ2V0KHMpO2lmKGEpcmV0dXJuIGE7bGV0IGw9dGhpcy5faHR0cENsaWVudC5nZXQocyx7cmVzcG9uc2VUeXBlOiJ0ZXh0Iix3aXRoQ3JlZGVudGlhbHM6b30pLnBpcGUoQihjPT5ydyhjKSksZnVuY3Rpb24obil7cmV0dXJuIHF0KCh0LGUpPT57dHJ5e3Quc3Vic2NyaWJlKGUpfWZpbmFsbHl7ZS5hZGQobil9fSl9KCgpPT50aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5kZWxldGUocykpLFhzKCkpO3JldHVybiB0aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5zZXQocyxsKSxsfV9hZGRTdmdJY29uQ29uZmlnKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbkNvbmZpZ3Muc2V0KEokKGUsaSksciksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyhlLGkpe2xldCByPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gcj9yLnB1c2goaSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KGUsW2ldKSx0aGlzfV9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKXtpZighZS5zdmdFbGVtZW50KXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhlLnN2Z1RleHQpO3RoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSxlLm9wdGlvbnMpLGUuc3ZnRWxlbWVudD1pfXJldHVybiBlLnN2Z0VsZW1lbnR9X2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGUsaSl7Zm9yKGxldCByPTA7cjx0aGlzLl9yZXNvbHZlcnMubGVuZ3RoO3IrKyl7bGV0IG89dGhpcy5fcmVzb2x2ZXJzW3JdKGksZSk7aWYobylyZXR1cm4gZlBlKG8pP25ldyBTZChvLnVybCxudWxsLG8ub3B0aW9ucyk6bmV3IFNkKG8sbnVsbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShSKEdmLDgpLFIoUmYpLFIoQnQsOCksUihTcykpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGNJKG4pe3JldHVybiBuLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gSiQobix0KXtyZXR1cm4gbisiOiIrdH1mdW5jdGlvbiBmUGUobil7cmV0dXJuISghbi51cmx8fCFuLm9wdGlvbnMpfW5ldyBPbyxuZXcgVGEsbmV3IE9vLG5ldyBPbzt2YXIgbVBlPXBzKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSxnUGU9bmV3IHNlKCJNQVRfSUNPTl9ERUZBVUxUX09QVElPTlMiKSxfUGU9bmV3IHNlKCJtYXQtaWNvbi1sb2NhdGlvbiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtsZXQgbj1TbyhCdCksdD1uP24ubG9jYXRpb246bnVsbDtyZXR1cm57Z2V0UGF0aG5hbWU6KCk9PnQ/dC5wYXRobmFtZSt0LnNlYXJjaDoiIn19fSksJCQ9WyJjbGlwLXBhdGgiLCJjb2xvci1wcm9maWxlIiwic3JjIiwiY3Vyc29yIiwiZmlsbCIsImZpbHRlciIsIm1hcmtlciIsIm1hcmtlci1zdGFydCIsIm1hcmtlci1taWQiLCJtYXJrZXItZW5kIiwibWFzayIsInN0cm9rZSJdLHlQZT0kJC5tYXAobj0+YFske259XWApLmpvaW4oIiwgIiksYlBlPS9edXJsXChbJyJdPyMoLio/KVsnIl0/XCkkLyxabj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbVBle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXZuLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9V3QoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfV9zcGxpdEljb25OYW1lKGUpe2lmKCFlKXJldHVyblsiIiwiIl07bGV0IGk9ZS5zcGxpdCgiOiIpO3N3aXRjaChpLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixpWzBdXTtjYXNlIDI6cmV0dXJuIGk7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke2V9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpZihlJiZlLnNpemUpe2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7aSE9PXRoaXMuX3ByZXZpb3VzUGF0aCYmKHRoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKX1fdXNpbmdGb250SWNvbigpe3JldHVybiF0aGlzLnN2Z0ljb259X3NldFN2Z0VsZW1lbnQoZSl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTt0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9X2NsZWFyU3ZnRWxlbWVudCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUuY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCk7aS0tOyl7bGV0IHI9ZS5jaGlsZE5vZGVzW2ldOygxIT09ci5ub2RlVHlwZXx8InN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZyLnJlbW92ZSgpfX1fdXBkYXRlRm9udEljb25DbGFzc2VzKCl7aWYoIXRoaXMuX3VzaW5nRm9udEljb24oKSlyZXR1cm47bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9KHRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCkuc3BsaXQoLyArLyk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKSkuZmlsdGVyKHI9PnIubGVuZ3RoPjApO3RoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QucmVtb3ZlKHIpKSxpLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1pLHRoaXMuZm9udEljb24hPT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJiFpLmluY2x1ZGVzKCJtYXQtbGlnYXR1cmUtZm9udCIpJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZlLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZlLmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfV9jbGVhbnVwRm9udFZhbHVlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdCgiICIpWzBdOmV9X3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGUpe2xldCBpPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpJiZpLmZvckVhY2goKHIsbyk9PntyLmZvckVhY2gocz0+e28uc2V0QXR0cmlidXRlKHMubmFtZSxgdXJsKCcke2V9IyR7cy52YWx1ZX0nKWApfSl9KX1fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yQWxsKHlQZSkscj10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzfHxuZXcgTWFwO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKSQkLmZvckVhY2gocz0+e2xldCBhPWlbb10sbD1hLmdldEF0dHJpYnV0ZShzKSxjPWw/bC5tYXRjaChiUGUpOm51bGw7aWYoYyl7bGV0IHU9ci5nZXQoYSk7dXx8KHU9W10sci5zZXQoYSx1KSksdS5wdXNoKHtuYW1lOnMsdmFsdWU6Y1sxXX0pfX0pfV91cGRhdGVTdmdJY29uKGUpe2lmKHRoaXMuX3N2Z05hbWVzcGFjZT1udWxsLHRoaXMuX3N2Z05hbWU9bnVsbCx0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksZSl7bGV0W2kscl09dGhpcy5fc3BsaXRJY29uTmFtZShlKTtpJiYodGhpcy5fc3ZnTmFtZXNwYWNlPWkpLHImJih0aGlzLl9zdmdOYW1lPXIpLHRoaXMuX2N1cnJlbnRJY29uRmV0Y2g9dGhpcy5faWNvblJlZ2lzdHJ5LmdldE5hbWVkU3ZnSWNvbihyLGkpLnBpcGUoSHQoMSkpLnN1YnNjcmliZShvPT50aGlzLl9zZXRTdmdFbGVtZW50KG8pLG89Pnt0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IobmV3IEVycm9yKGBFcnJvciByZXRyaWV2aW5nIGljb24gJHtpfToke3J9ISAke28ubWVzc2FnZX1gKSl9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoWF8pLEtvKCJhcmlhLWhpZGRlbiIpLHcoX1BlKSx3KFNzKSx3KGdQZSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWljb24iXV0saG9zdEF0dHJzOlsicm9sZSIsImltZyIsMSwibWF0LWljb24iLCJub3RyYW5zbGF0ZSJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoemUoImRhdGEtbWF0LWljb24tdHlwZSIsaS5fdXNpbmdGb250SWNvbigpPyJmb250Ijoic3ZnIikoImRhdGEtbWF0LWljb24tbmFtZSIsaS5fc3ZnTmFtZXx8aS5mb250SWNvbikoImRhdGEtbWF0LWljb24tbmFtZXNwYWNlIixpLl9zdmdOYW1lc3BhY2V8fGkuZm9udFNldCkoImZvbnRJY29uIixpLl91c2luZ0ZvbnRJY29uKCk/aS5mb250SWNvbjpudWxsKSxhdCgibWF0LWljb24taW5saW5lIixpLmlubGluZSkoIm1hdC1pY29uLW5vLWNvbG9yIiwicHJpbWFyeSIhPT1pLmNvbG9yJiYiYWNjZW50IiE9PWkuY29sb3ImJiJ3YXJuIiE9PWkuY29sb3IpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGlubGluZToiaW5saW5lIixzdmdJY29uOiJzdmdJY29uIixmb250U2V0OiJmb250U2V0Iixmb250SWNvbjoiZm9udEljb24ifSxleHBvcnRBczpbIm1hdEljb24iXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczp1UGUsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLE5uKDApKX0sc3R5bGVzOlsiLm1hdC1pY29uey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtkaXNwbGF5OmlubGluZS1ibG9jaztmaWxsOmN1cnJlbnRDb2xvcjtoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O292ZXJmbG93OmhpZGRlbn0ubWF0LWljb24ubWF0LWljb24taW5saW5le2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7d2lkdGg6aW5oZXJpdH0ubWF0LWljb24ubWF0LWxpZ2F0dXJlLWZvbnRbZm9udEljb25dOjpiZWZvcmV7Y29udGVudDphdHRyKGZvbnRJY29uKX1bZGlyPXJ0bF0gLm1hdC1pY29uLXJ0bC1taXJyb3J7dHJhbnNmb3JtOnNjYWxlKC0xLCAxKX0ubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257bWFyZ2luOmF1dG99Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLGRuXX0pLG59KSgpLHhQZT1bIioiLFtbIm1hdC10b29sYmFyLXJvdyJdXV0sQ1BlPVsiKiIsIm1hdC10b29sYmFyLXJvdyJdLHdQZT1wcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksTVBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhci1yb3ciXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhci1yb3ciXSxleHBvcnRBczpbIm1hdFRvb2xiYXJSb3ciXX0pLG59KSgpLGVlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgd1Ble2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2RvY3VtZW50PXJ9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiYodGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpLHRoaXMuX3Rvb2xiYXJSb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGVja1Rvb2xiYXJNaXhlZE1vZGVzKCkpKX1fY2hlY2tUb29sYmFyTWl4ZWRNb2Rlcygpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyh1aSksdyhCdCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10b29sYmFyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsTVBlLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX3Rvb2xiYXJSb3dzPW8pfX0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbGJhciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgibWF0LXRvb2xiYXItbXVsdGlwbGUtcm93cyIsaS5fdG9vbGJhclJvd3MubGVuZ3RoPjApKCJtYXQtdG9vbGJhci1zaW5nbGUtcm93IiwwPT09aS5fdG9vbGJhclJvd3MubGVuZ3RoKX0saW5wdXRzOntjb2xvcjoiY29sb3IifSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpDUGUsZGVjbHM6Mix2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSh4UGUpLE5uKDApLE5uKDEsMSkpfSxzdHlsZXM6WyIuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbGJhcntvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2Rpc3BsYXk6ZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowIDE2cHg7d2lkdGg6MTAwJTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHRlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZG4sZG5dfSksbn0pKCk7ZnVuY3Rpb24geDUobil7cmV0dXJuIG4uc3RhdGUhPT1FZS5OT1RfTE9BREVEJiZuLnN0YXRlIT09RWUuTE9BRElOR312YXIgRVBlPXdyKEFaLFNlKGRBLG49Png1KG4pP3suLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHJlbG9hZEVuYWJsZWQ6IW4uc2V0dGluZ3MucmVsb2FkRW5hYmxlZH19Om4pLFNlKHBBLChuLHtwZXJpb2RJbk1zOnR9KT0+e2lmKCF4NShuKSlyZXR1cm4gbjtsZXQgZT10Pj0zZTQ/dDpuLnNldHRpbmdzLnJlbG9hZFBlcmlvZEluTXM7cmV0dXJuey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkUGVyaW9kSW5NczplfX19KSxTZShoQSwobix7c2l6ZTp0fSk9PntpZigheDUobikpcmV0dXJuIG47bGV0IGU9dD4wP3Q6bi5zZXR0aW5ncy5wYWdlU2l6ZTtyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxwYWdlU2l6ZTplfX19KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3JldHVybiBOdW1iZXIuaXNGaW5pdGUodC5wYWdlU2l6ZSkmJnQucGFnZVNpemU+MCYmKGUucGFnZVNpemU9TnVtYmVyKHQucGFnZVNpemUpKSwiYm9vbGVhbiI9PXR5cGVvZiB0LmF1dG9SZWxvYWQmJihlLnJlbG9hZEVuYWJsZWQ9dC5hdXRvUmVsb2FkKSxOdW1iZXIuaXNGaW5pdGUodC5hdXRvUmVsb2FkUGVyaW9kSW5NcykmJnQuYXV0b1JlbG9hZFBlcmlvZEluTXM+M2U0JiYoZS5yZWxvYWRQZXJpb2RJbk1zPU51bWJlcih0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSksey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MsLi4uZX19fSkpO2Z1bmN0aW9uIG5lZShuLHQpe3JldHVybiBFUGUobix0KX12YXIgVFBlPVsiaW5wdXQiXSxEUGU9WyJsYWJlbCJdLEFQZT1mdW5jdGlvbihuKXtyZXR1cm57ZW50ZXJEdXJhdGlvbjpufX0sSVBlPVsiKiJdLFBQZT1uZXcgc2UoIm1hdC1jaGVja2JveC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2NvbG9yOiJhY2NlbnQiLGNsaWNrQWN0aW9uOiJjaGVjay1pbmRldGVybWluYXRlIn19fSk7dmFyIFJQZT0wLGllZT17Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifSxPUGU9e3Byb3ZpZGU6SG8sdXNlRXhpc3Rpbmc6cmkoKCk9PkVkKSxtdWx0aTohMH0sa1BlPXFwKHBzKExzKGdvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSxGUGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2FuaW1hdGlvbk1vZGU9YSx0aGlzLl9vcHRpb25zPWwsdGhpcy5hcmlhTGFiZWw9IiIsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMubGFiZWxQb3NpdGlvbj0iYWZ0ZXIiLHRoaXMubmFtZT1udWxsLHRoaXMuY2hhbmdlPW5ldyBHLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZT1uZXcgRyx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcz0iIix0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT0wLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLl9vcHRpb25zPXRoaXMuX29wdGlvbnN8fGllZSx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXRoaXMuX29wdGlvbnMuY29sb3J8fGllZS5jb2xvcix0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQ9YCR7ZX0keysrUlBlfWB9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZH1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3luY0luZGV0ZXJtaW5hdGUodGhpcy5faW5kZXRlcm1pbmF0ZSl9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5fY2hlY2tlZH1zZXQgY2hlY2tlZChlKXtsZXQgaT1XdChlKTtpIT10aGlzLmNoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuZGlzYWJsZWQmJih0aGlzLl9kaXNhYmxlZD1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgaW5kZXRlcm1pbmF0ZSgpe3JldHVybiB0aGlzLl9pbmRldGVybWluYXRlfXNldCBpbmRldGVybWluYXRlKGUpe2xldCBpPWUhPXRoaXMuX2luZGV0ZXJtaW5hdGU7dGhpcy5faW5kZXRlcm1pbmF0ZT1XdChlKSxpJiYodGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5faW5kZXRlcm1pbmF0ZT8zOnRoaXMuY2hlY2tlZD8xOjIpLHRoaXMuaW5kZXRlcm1pbmF0ZUNoYW5nZS5lbWl0KHRoaXMuX2luZGV0ZXJtaW5hdGUpKSx0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X29uTGFiZWxUZXh0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfXdyaXRlVmFsdWUoZSl7dGhpcy5jaGVja2VkPSEhZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZX1fZ2V0QXJpYUNoZWNrZWQoKXtyZXR1cm4gdGhpcy5jaGVja2VkPyJ0cnVlIjp0aGlzLmluZGV0ZXJtaW5hdGU/Im1peGVkIjoiZmFsc2UifV90cmFuc2l0aW9uQ2hlY2tTdGF0ZShlKXtsZXQgaT10aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZSxyPXRoaXMuX2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKTtpZihpIT09ZSYmciYmKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyYmci5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyksdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPXRoaXMuX2dldEFuaW1hdGlvbkNsYXNzRm9yQ2hlY2tTdGF0ZVRyYW5zaXRpb24oaSxlKSx0aGlzLl9jdXJyZW50Q2hlY2tTdGF0ZT1lLHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcy5sZW5ndGg+MCkpe3IuY2xhc3NMaXN0LmFkZCh0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3MpO2xldCBvPXRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzczt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57ci5jbGFzc0xpc3QucmVtb3ZlKG8pfSwxZTMpfSl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCksdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCh0aGlzLmNoZWNrZWQpKSx0aGlzLl9pbnB1dEVsZW1lbnQmJih0aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZCl9dG9nZ2xlKCl7dGhpcy5jaGVja2VkPSF0aGlzLmNoZWNrZWQsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbih0aGlzLmNoZWNrZWQpfV9oYW5kbGVJbnB1dENsaWNrKCl7bGV0IGU9dGhpcy5fb3B0aW9ucz8uY2xpY2tBY3Rpb247dGhpcy5kaXNhYmxlZHx8Im5vb3AiPT09ZT8hdGhpcy5kaXNhYmxlZCYmIm5vb3AiPT09ZSYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkLHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9dGhpcy5pbmRldGVybWluYXRlKToodGhpcy5pbmRldGVybWluYXRlJiYiY2hlY2siIT09ZSYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2luZGV0ZXJtaW5hdGU9ITEsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSl9KSx0aGlzLl9jaGVja2VkPSF0aGlzLl9jaGVja2VkLHRoaXMuX3RyYW5zaXRpb25DaGVja1N0YXRlKHRoaXMuX2NoZWNrZWQ/MToyKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSl9X29uSW50ZXJhY3Rpb25FdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpfV9vbkJsdXIoKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihlLGkpe2lmKCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25Nb2RlKXJldHVybiIiO3N3aXRjaChlKXtjYXNlIDA6aWYoMT09PWkpcmV0dXJuIHRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9DaGVja2VkO2lmKDM9PWkpcmV0dXJuIHRoaXMuX2NoZWNrZWQ/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5jaGVja2VkVG9JbmRldGVybWluYXRlOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMudW5jaGVja2VkVG9JbmRldGVybWluYXRlO2JyZWFrO2Nhc2UgMjpyZXR1cm4gMT09PWk/dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAxOnJldHVybiAyPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb1VuY2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7Y2FzZSAzOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb0NoZWNrZWQ6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy5pbmRldGVybWluYXRlVG9VbmNoZWNrZWR9cmV0dXJuIiJ9X3N5bmNJbmRldGVybWluYXRlKGUpe2xldCBpPXRoaXMuX2lucHV0RWxlbWVudDtpJiYoaS5uYXRpdmVFbGVtZW50LmluZGV0ZXJtaW5hdGU9ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFRQZSw1KSxsdChEUGUsNSksbHQoZXMsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lucHV0RWxlbWVudD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fbGFiZWxFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnJpcHBsZT1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0saWQ6ImlkIixyZXF1aXJlZDoicmVxdWlyZWQiLGxhYmVsUG9zaXRpb246ImxhYmVsUG9zaXRpb24iLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsY2hlY2tlZDoiY2hlY2tlZCIsZGlzYWJsZWQ6ImRpc2FibGVkIixpbmRldGVybWluYXRlOiJpbmRldGVybWluYXRlIn0sb3V0cHV0czp7Y2hhbmdlOiJjaGFuZ2UiLGluZGV0ZXJtaW5hdGVDaGFuZ2U6ImluZGV0ZXJtaW5hdGVDaGFuZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksRWQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcigibWF0LWNoZWNrYm94LSIsZSxpLG8scyxhLGwpLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX2FuaW1hdGlvbkNsYXNzZXM9e3VuY2hlY2tlZFRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQiLHVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUiLGNoZWNrZWRUb1VuY2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQiLGNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6Im1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIixpbmRldGVybWluYXRlVG9VbmNoZWNrZWQ6Im1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIn19X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLnNvdXJjZT10aGlzLGkuY2hlY2tlZD1lLGl9X2dldEFuaW1hdGlvblRhcmdldEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3N1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpLHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57ZXx8dGhpcy5fb25CbHVyKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKX1fb25JbnB1dENsaWNrKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksc3VwZXIuX2hhbmRsZUlucHV0Q2xpY2soKX1mb2N1cyhlLGkpe2U/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxlLGkpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KHpyKSx3KHB0KSxLbygidGFiaW5kZXgiKSx3KExpLDgpLHcoUFBlLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hlY2tib3giXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJihBYSgiaWQiLGkuaWQpLHplKCJ0YWJpbmRleCIsbnVsbCkoImFyaWEtbGFiZWwiLG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLG51bGwpLGF0KCJtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSIsaS5pbmRldGVybWluYXRlKSgibWF0LWNoZWNrYm94LWNoZWNrZWQiLGkuY2hlY2tlZCkoIm1hdC1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUiLCJiZWZvcmUiPT1pLmxhYmVsUG9zaXRpb24pKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixjb2xvcjoiY29sb3IiLHRhYkluZGV4OiJ0YWJJbmRleCJ9LGV4cG9ydEFzOlsibWF0Q2hlY2tib3giXSxmZWF0dXJlczpbJHQoW09QZV0pLHR0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6SVBlLGRlY2xzOjE3LHZhcnM6MjEsY29uc3RzOltbMSwibWF0LWNoZWNrYm94LWxheW91dCJdLFsibGFiZWwiLCIiXSxbMSwibWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lciJdLFsidHlwZSIsImNoZWNrYm94IiwxLCJtYXQtY2hlY2tib3gtaW5wdXQiLCJjZGstdmlzdWFsbHktaGlkZGVuIiwzLCJpZCIsInJlcXVpcmVkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidGFiSW5kZXgiLCJjaGFuZ2UiLCJjbGljayJdLFsiaW5wdXQiLCIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWNoZWNrYm94LXJpcHBsZSIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVJhZGl1cyIsIm1hdFJpcHBsZUNlbnRlcmVkIiwibWF0UmlwcGxlQW5pbWF0aW9uIl0sWzEsIm1hdC1yaXBwbGUtZWxlbWVudCIsIm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtY2hlY2tib3gtZnJhbWUiXSxbMSwibWF0LWNoZWNrYm94LWJhY2tncm91bmQiXSxbInZlcnNpb24iLCIxLjEiLCJmb2N1c2FibGUiLCJmYWxzZSIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1hdC1jaGVja2JveC1jaGVja21hcmsiXSxbImZpbGwiLCJub25lIiwic3Ryb2tlIiwid2hpdGUiLCJkIiwiTTQuMSwxMi43IDksMTcuNiAyMC4zLDYuMyIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoIl0sWzEsIm1hdC1jaGVja2JveC1taXhlZG1hcmsiXSxbMSwibWF0LWNoZWNrYm94LWxhYmVsIiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsiY2hlY2tib3hMYWJlbCIsIiJdLFsyLCJkaXNwbGF5Iiwibm9uZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJsYWJlbCIsMCwxKSgyLCJzcGFuIiwyKSgzLCJpbnB1dCIsMyw0KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkludGVyYWN0aW9uRXZlbnQobyl9KSgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbklucHV0Q2xpY2sobyl9KSx2KCksZyg1LCJzcGFuIiw1KSxOKDYsInNwYW4iLDYpLHYoKSxOKDcsInNwYW4iLDcpLGcoOCwic3BhbiIsOCksam4oKSxnKDksInN2ZyIsOSksTigxMCwicGF0aCIsMTApLHYoKSxTYSgpLE4oMTEsInNwYW4iLDExKSx2KCkoKSxnKDEyLCJzcGFuIiwxMiwxMyksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTGFiZWxUZXh0Q2hhbmdlKCl9KSxnKDE0LCJzcGFuIiwxNCksRCgxNSwiXHhhMCIpLHYoKSxObigxNiksdigpKCkpLDImZSl7bGV0IHI9c3QoMSksbz1zdCgxMyk7emUoImZvciIsaS5pbnB1dElkKSx4KDIpLGF0KCJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2luIiwhby50ZXh0Q29udGVudHx8IW8udGV4dENvbnRlbnQudHJpbSgpKSx4KDEpLGIoImlkIixpLmlucHV0SWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCkoImNoZWNrZWQiLGkuY2hlY2tlZCkoImRpc2FibGVkIixpLmRpc2FibGVkKSgidGFiSW5kZXgiLGkudGFiSW5kZXgpLHplKCJ2YWx1ZSIsaS52YWx1ZSkoIm5hbWUiLGkubmFtZSkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1jaGVja2VkIixpLl9nZXRBcmlhQ2hlY2tlZCgpKSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpLHgoMiksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQ2VudGVyZWQiLCEwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixIbigxOSxBUGUsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGU/MDoxNTApKX19LGRlcGVuZGVuY2llczpbZXMsU19dLHN0eWxlczpbJ0BrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZHswJXtvcGFjaXR5OjB9NTAle29wYWNpdHk6MX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZHswJSw1MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtY2hlY2tlZC1jaGVja21hcmstcGF0aHswJSw1MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjIuOTEwMjU5fTUwJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9MTAwJXtzdHJva2UtZGFzaG9mZnNldDowfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7MCUsNjguMiV7dHJhbnNmb3JtOnNjYWxlWCgwKX02OC4yJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLCAxKX0xMDAle3RyYW5zZm9ybTpzY2FsZVgoMSl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtdW5jaGVja2VkLWNoZWNrbWFyay1wYXRoe2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtzdHJva2UtZGFzaG9mZnNldDowfXRve3N0cm9rZS1kYXNob2Zmc2V0Oi0yMi45MTAyNTl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAuMTQsIDAsIDAsIDEpO29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfXRve29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDMxNWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya3swJXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmxpbmVhcjtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKX0zMi44JSwxMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApfX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1mcmFtZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZSl7b3BhY2l0eTouMTZ9Lm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LXJpcHBsZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OmNhbGMoNTAlIC0gMjBweCk7dG9wOmNhbGMoNTAlIC0gMjBweCk7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDt6LWluZGV4OjE7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWNoZWNrYm94LWxheW91dHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6aW5oZXJpdDthbGlnbi1pdGVtczpiYXNlbGluZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtZmxleDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC1jaGVja2JveC1sYWJlbHstd2Via2l0LXVzZXItc2VsZWN0OmF1dG87dXNlci1zZWxlY3Q6YXV0b30ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDowO21hcmdpbjphdXRvO21hcmdpbi1yaWdodDo4cHg7b3JkZXI6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjE2cHg7ZmxleC1zaHJpbms6MH1bZGlyPXJ0bF0gLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1jaGVja2JveC1mcmFtZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWZyYW1le3RyYW5zaXRpb246bm9uZX0ubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpLG9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpOy13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdH0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3ggLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQ6bm9uZX0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0cmFuc2Zvcm06bm9uZX0ubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjA0fS5tYXQtY2hlY2tib3guY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4xMn0ubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtY2hlY2tib3gubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTowfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtkaXNwbGF5Om5vbmV9fS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCV9Lm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTk7c3Ryb2tlLWRhc2hhcnJheToyMi45MTAyNTk7c3Ryb2tlLXdpZHRoOjIuMTMzMzMzMzMzM3B4fS5jZGstaGlnaC1jb250cmFzdC1ibGFjay1vbi13aGl0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMDAwICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7d2lkdGg6Y2FsYygxMDAlIC0gNnB4KTtoZWlnaHQ6MnB4O29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGVYKDApIHJvdGF0ZSgwZGVnKTtib3JkZXItcmFkaXVzOjJweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O21hcmdpbi10b3A6MnB4fS5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye29yZGVyOjE7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDphdXRvO21hcmdpbi1yaWdodDo4cHh9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MX0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3t0cmFuc2Zvcm06c2NhbGVYKDEpIHJvdGF0ZSgtNDVkZWcpfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlLWRhc2hvZmZzZXQ6MH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKDBkZWcpfS5tYXQtY2hlY2tib3gtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jaGVja2JveC1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLWluLWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRofS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtb3V0LWJhY2tncm91bmR9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjkwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS1jaGVja2VkIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo1MDBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtY2hlY2ttYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YW5pbWF0aW9uOjMwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtdW5jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWlucHV0e2JvdHRvbTowO2xlZnQ6NTAlfS5tYXQtY2hlY2tib3gtaW5wdXQ6Zm9jdXN+Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE5QZT17cHJvdmlkZTpVbyx1c2VFeGlzdGluZzpyaSgoKT0+TFBlKSxtdWx0aTohMH0sTFBlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5NXt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1oaShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LWNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIl1dLGZlYXR1cmVzOlskdChbTlBlXSksdHRdfSksbn0pKCkscmVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSwkcD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbeGMsZG4senAscmVlLGRuLHJlZV19KSxufSkoKSxzZWU9TnMoe3Bhc3NpdmU6ITB9KSxhZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbmdab25lPWksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHM9bmV3IE1hcH1tb25pdG9yKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIGFvO2xldCBpPWNhKGUpLHI9dGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZ2V0KGkpO2lmKHIpcmV0dXJuIHIuc3ViamVjdDtsZXQgbz1uZXcgVGUscz0iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIsYT1sPT57ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IiE9PWwuYW5pbWF0aW9uTmFtZXx8aS5jbGFzc0xpc3QuY29udGFpbnMocyk/ImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCI9PT1sLmFuaW1hdGlvbk5hbWUmJmkuY2xhc3NMaXN0LmNvbnRhaW5zKHMpJiYoaS5jbGFzc0xpc3QucmVtb3ZlKHMpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pm8ubmV4dCh7dGFyZ2V0OmwudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMX0pKSk6KGkuY2xhc3NMaXN0LmFkZChzKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT5vLm5leHQoe3RhcmdldDpsLnRhcmdldCxpc0F1dG9maWxsZWQ6ITB9KSkpfTtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aS5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpLGkuY2xhc3NMaXN0LmFkZCgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIil9KSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5zZXQoaSx7c3ViamVjdDpvLHVubGlzdGVuOigpPT57aS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYSxzZWUpfX0pLG99c3RvcE1vbml0b3JpbmcoZSl7bGV0IGk9Y2EoZSkscj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoaSk7ciYmKHIudW5saXN0ZW4oKSxyLnN1YmplY3QuY29tcGxldGUoKSxpLmNsYXNzTGlzdC5yZW1vdmUoImNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZCIpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGxlZCIpLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmRlbGV0ZShpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb25pdG9yZWRFbGVtZW50cy5mb3JFYWNoKChlLGkpPT50aGlzLnN0b3BNb25pdG9yaW5nKGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUih1aSksUihwdCkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHc1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxWUGU9bmV3IHNlKCJNQVRfSU5QVVRfVkFMVUVfQUNDRVNTT1IiKSxIUGU9WyJidXR0b24iLCJjaGVja2JveCIsImZpbGUiLCJoaWRkZW4iLCJpbWFnZSIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInN1Ym1pdCJdLFVQZT0wLHpQZT1SQShjbGFzc3tjb25zdHJ1Y3RvcihuLHQsZSxpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9bix0aGlzLl9wYXJlbnRGb3JtPXQsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWUsdGhpcy5uZ0NvbnRyb2w9aSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGV9fSksUV89KCgpPT57Y2xhc3MgbiBleHRlbmRzIHpQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkKXtzdXBlcihhLG8scyxyKSx0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9hdXRvZmlsbE1vbml0b3I9Yyx0aGlzLl9mb3JtRmllbGQ9ZCx0aGlzLl91aWQ9Im1hdC1pbnB1dC0iK1VQZSsrLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcgVGUsdGhpcy5jb250cm9sVHlwZT0ibWF0LWlucHV0Iix0aGlzLmF1dG9maWxsZWQ9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdHlwZT0idGV4dCIsdGhpcy5fcmVhZG9ubHk9ITEsdGhpcy5fbmV2ZXJFbXB0eUlucHV0VHlwZXM9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiXS5maWx0ZXIoZj0+RlYoKS5oYXMoZikpLHRoaXMuX2lPU0tleXVwTGlzdGVuZXI9Zj0+e2xldCBtPWYudGFyZ2V0OyFtLnZhbHVlJiYwPT09bS5zZWxlY3Rpb25TdGFydCYmMD09PW0uc2VsZWN0aW9uRW5kJiYobS5zZXRTZWxlY3Rpb25SYW5nZSgxLDEpLG0uc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKSl9O2xldCBwPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxoPXAubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3I9bHx8cCx0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPXRoaXMudmFsdWUsdGhpcy5pZD10aGlzLmlkLGkuSU9TJiZ1LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57ZS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX0pLHRoaXMuX2lzU2VydmVyPSF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIsdGhpcy5faXNOYXRpdmVTZWxlY3Q9InNlbGVjdCI9PT1oLHRoaXMuX2lzVGV4dGFyZWE9InRleHRhcmVhIj09PWgsdGhpcy5faXNJbkZvcm1GaWVsZD0hIWQsdGhpcy5faXNOYXRpdmVTZWxlY3QmJih0aGlzLmNvbnRyb2xUeXBlPXAubXVsdGlwbGU/Im1hdC1uYXRpdmUtc2VsZWN0LW11bHRpcGxlIjoibWF0LW5hdGl2ZS1zZWxlY3QiKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5uZ0NvbnRyb2wmJm51bGwhPT10aGlzLm5nQ29udHJvbC5kaXNhYmxlZD90aGlzLm5nQ29udHJvbC5kaXNhYmxlZDp0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChlKXt0aGlzLl9pZD1lfHx0aGlzLl91aWR9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkPz90aGlzLm5nQ29udHJvbD8uY29udHJvbD8uaGFzVmFsaWRhdG9yKFNjLnJlcXVpcmVkKT8/ITF9c2V0IHJlcXVpcmVkKGUpe3RoaXMuX3JlcXVpcmVkPVd0KGUpfWdldCB0eXBlKCl7cmV0dXJuIHRoaXMuX3R5cGV9c2V0IHR5cGUoZSl7dGhpcy5fdHlwZT1lfHwidGV4dCIsdGhpcy5fdmFsaWRhdGVUeXBlKCksIXRoaXMuX2lzVGV4dGFyZWEmJkZWKCkuaGFzKHRoaXMuX3R5cGUpJiYodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnR5cGU9dGhpcy5fdHlwZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSE9PXRoaXMudmFsdWUmJih0aGlzLl9pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfWdldCByZWFkb25seSgpe3JldHVybiB0aGlzLl9yZWFkb25seX1zZXQgcmVhZG9ubHkoZSl7dGhpcy5fcmVhZG9ubHk9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZ0aGlzLl9hdXRvZmlsbE1vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShlPT57dGhpcy5hdXRvZmlsbGVkPWUuaXNBdXRvZmlsbGVkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9pT1NLZXl1cExpc3RlbmVyKX1uZ0RvQ2hlY2soKXt0aGlzLm5nQ29udHJvbCYmdGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5fZGlydHlDaGVja05hdGl2ZVZhbHVlKCksdGhpcy5fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl9Zm9jdXMoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9mb2N1c0NoYW5nZWQoZSl7ZSE9PXRoaXMuZm9jdXNlZCYmKHRoaXMuZm9jdXNlZD1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uSW5wdXQoKXt9X2RpcnR5Q2hlY2tQbGFjZWhvbGRlcigpe2xldCBlPXRoaXMuX2Zvcm1GaWVsZCxpPWUmJiJsZWdhY3kiPT09ZS5hcHBlYXJhbmNlJiYhZS5faGFzTGFiZWw/LigpP251bGw6dGhpcy5wbGFjZWhvbGRlcjtpZihpIT09dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcil7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3ByZXZpb3VzUGxhY2Vob2xkZXI9aSxpP3Iuc2V0QXR0cmlidXRlKCJwbGFjZWhvbGRlciIsaSk6ci5yZW1vdmVBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIil9fV9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU7dGhpcy5fcHJldmlvdXNOYXRpdmVWYWx1ZSE9PWUmJih0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fdmFsaWRhdGVUeXBlKCl7SFBlLmluZGV4T2YodGhpcy5fdHlwZSl9X2lzTmV2ZXJFbXB0eSgpe3JldHVybiB0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcy5pbmRleE9mKHRoaXMuX3R5cGUpPi0xfV9pc0JhZElucHV0KCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbGlkaXR5O3JldHVybiBlJiZlLmJhZElucHV0fWdldCBlbXB0eSgpe3JldHVybiEodGhpcy5faXNOZXZlckVtcHR5KCl8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZXx8dGhpcy5faXNCYWRJbnB1dCgpfHx0aGlzLmF1dG9maWxsZWQpfWdldCBzaG91bGRMYWJlbEZsb2F0KCl7aWYodGhpcy5faXNOYXRpdmVTZWxlY3Qpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUub3B0aW9uc1swXTtyZXR1cm4gdGhpcy5mb2N1c2VkfHxlLm11bHRpcGxlfHwhdGhpcy5lbXB0eXx8ISEoZS5zZWxlY3RlZEluZGV4Pi0xJiZpJiZpLmxhYmVsKX1yZXR1cm4gdGhpcy5mb2N1c2VkfHwhdGhpcy5lbXB0eX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfW9uQ29udGFpbmVyQ2xpY2soKXt0aGlzLmZvY3VzZWR8fHRoaXMuZm9jdXMoKX1faXNJbmxpbmVTZWxlY3QoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIHRoaXMuX2lzTmF0aXZlU2VsZWN0JiYoZS5tdWx0aXBsZXx8ZS5zaXplPjEpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KHVpKSx3KHBhLDEwKSx3KEdfLDgpLHcoV18sOCksdyhSXyksdyhWUGUsMTApLHcoYWVlKSx3KHB0KSx3KHVtLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJtYXRJbnB1dCIsIiJdLFsidGV4dGFyZWEiLCJtYXRJbnB1dCIsIiJdLFsic2VsZWN0IiwibWF0TmF0aXZlQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5wdXQtZWxlbWVudCIsIm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2wiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9mb2N1c0NoYW5nZWQoITApfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMSl9KSgiaW5wdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uSW5wdXQoKX0pLDImZSYmKEFhKCJkaXNhYmxlZCIsaS5kaXNhYmxlZCkoInJlcXVpcmVkIixpLnJlcXVpcmVkKSx6ZSgiaWQiLGkuaWQpKCJkYXRhLXBsYWNlaG9sZGVyIixpLnBsYWNlaG9sZGVyKSgibmFtZSIsaS5uYW1lfHxudWxsKSgicmVhZG9ubHkiLGkucmVhZG9ubHkmJiFpLl9pc05hdGl2ZVNlbGVjdHx8bnVsbCkoImFyaWEtaW52YWxpZCIsaS5lbXB0eSYmaS5yZXF1aXJlZD9udWxsOmkuZXJyb3JTdGF0ZSkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQpLGF0KCJtYXQtaW5wdXQtc2VydmVyIixpLl9pc1NlcnZlcikoIm1hdC1uYXRpdmUtc2VsZWN0LWlubGluZSIsaS5faXNJbmxpbmVTZWxlY3QoKSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsaWQ6ImlkIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLG5hbWU6Im5hbWUiLHJlcXVpcmVkOiJyZXF1aXJlZCIsdHlwZToidHlwZSIsZXJyb3JTdGF0ZU1hdGNoZXI6ImVycm9yU3RhdGVNYXRjaGVyIix1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSx2YWx1ZToidmFsdWUiLHJlYWRvbmx5OiJyZWFkb25seSJ9LGV4cG9ydEFzOlsibWF0SW5wdXQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlVfLHVzZUV4aXN0aW5nOm59XSksdHQsenRdfSksbn0pKCksQXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbUl9dLGltcG9ydHM6W3c1LGRtLGRuLHc1LGRtXX0pLG59KSgpO2Z1bmN0aW9uIGpQZShuLHQpe2lmKDEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSkscWUoIiBSZWxvYWQgcGVyaW9kIGhhcyB0byBiZSBtaW5pbXVtIG9mICIsZS5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLCIgc2Vjb25kcy4gIil9fWZ1bmN0aW9uIEdQZShuLHQpezEmbiYmKGcoMCwibWF0LWVycm9yIiksRCgxLCIgUGFnZSBzaXplIGhhcyB0byBiZSBhIHBvc2l0aXZlIGludGVnZXIuICIpLHYoKSl9dmFyIGxlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5yZWxvYWRUb2dnbGVkPW5ldyBHLHRoaXMucmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ9bmV3IEcsdGhpcy5wYWdlU2l6ZUNoYW5nZWQ9bmV3IEcsdGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TPTMwLHRoaXMucmVsb2FkUGVyaW9kQ29udHJvbD1uZXcgbncodGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TLFtTYy5yZXF1aXJlZCxTYy5taW4odGhpcy5NSU5fUkVMT0FEX1BFUklPRF9JTl9TKV0pLHRoaXMucGFnaW5hdGlvbkNvbnRyb2w9bmV3IG53KDEsW1NjLnJlcXVpcmVkLFNjLm1pbigxKSxuPT57bGV0IHQ9TnVtYmVyKG4udmFsdWUpO3JldHVybiBNYXRoLnJvdW5kKHQpPT09bi52YWx1ZT9udWxsOntpbnRlZ2VyOnt2YWx1ZTpuLnZhbHVlfX19XSksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWxpZCYmdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZC5lbWl0KDFlMyp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wudmFsdWUpfSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEFyKDUwMCksSGUoKCk9PnRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsaWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHRoaXMucGFnaW5hdGlvbkNvbnRyb2wudmFsdWUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25DaGFuZ2VzKGUpe2lmKGUucmVsb2FkUGVyaW9kSW5Ncyl7bGV0IGk9ZS5yZWxvYWRQZXJpb2RJbk1zO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuc2V0VmFsdWUoaS5jdXJyZW50VmFsdWUvMWUzKX1pZihlLnJlbG9hZEVuYWJsZWQmJihlLnJlbG9hZEVuYWJsZWQuY3VycmVudFZhbHVlP3RoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5lbmFibGUoKTp0aGlzLnJlbG9hZFBlcmlvZENvbnRyb2wuZGlzYWJsZSgpKSxlLnBhZ2VTaXplKXtsZXQgaT1lLnBhZ2VTaXplO2kucHJldmlvdXNWYWx1ZSE9PWkuY3VycmVudFZhbHVlJiZ0aGlzLnBhZ2luYXRpb25Db250cm9sLnNldFZhbHVlKGkuY3VycmVudFZhbHVlKX19b25SZWxvYWRUb2dnbGUoKXt0aGlzLnJlbG9hZFRvZ2dsZWQuZW1pdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1kaWFsb2ctY29tcG9uZW50Il1dLGlucHV0czp7cmVsb2FkRW5hYmxlZDoicmVsb2FkRW5hYmxlZCIscmVsb2FkUGVyaW9kSW5NczoicmVsb2FkUGVyaW9kSW5NcyIscGFnZVNpemU6InBhZ2VTaXplIn0sb3V0cHV0czp7cmVsb2FkVG9nZ2xlZDoicmVsb2FkVG9nZ2xlZCIscmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQ6InJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkIixwYWdlU2l6ZUNoYW5nZWQ6InBhZ2VTaXplQ2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTQsdmFyczo1LGNvbnN0czpbWzEsInJlbG9hZC10b2dnbGUiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJSZWxvYWQgUGVyaW9kIChzZWNvbmRzKSIsMSwicmVsb2FkLXBlcmlvZCIsMywiZm9ybUNvbnRyb2wiXSxbNCwibmdJZiJdLFsibWF0SW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwicGxhY2Vob2xkZXIiLCJQYWdpbmF0aW9uIExpbWl0IiwxLCJwYWdlLXNpemUiLDMsImZvcm1Db250cm9sIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJoMyIpLEQoMSwiU2V0dGluZ3MiKSx2KCksZygyLCJkaXYiKSgzLCJkaXYiLDApKDQsIm1hdC1jaGVja2JveCIsMSksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVsb2FkVG9nZ2xlKCl9KSxEKDUsIlJlbG9hZCBkYXRhIiksdigpKCksZyg2LCJkaXYiKSg3LCJtYXQtZm9ybS1maWVsZCIpLE4oOCwiaW5wdXQiLDIpLHYoKSxFKDksalBlLDIsMSwibWF0LWVycm9yIiwzKSx2KCkoKSxnKDEwLCJkaXYiKSgxMSwibWF0LWZvcm0tZmllbGQiKSxOKDEyLCJpbnB1dCIsNCksdigpLEUoMTMsR1BlLDIsMCwibWF0LWVycm9yIiwzKSx2KCkpLDImZSYmKHgoNCksYigiY2hlY2tlZCIsaS5yZWxvYWRFbmFibGVkKSx4KDQpLGIoImZvcm1Db250cm9sIixpLnJlbG9hZFBlcmlvZENvbnRyb2wpLHgoMSksYigibmdJZiIsaS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJtaW4iKXx8aS5yZWxvYWRQZXJpb2RDb250cm9sLmhhc0Vycm9yKCJyZXF1aXJlZCIpKSx4KDMpLGIoImZvcm1Db250cm9sIixpLnBhZ2luYXRpb25Db250cm9sKSx4KDEpLGIoIm5nSWYiLGkucGFnaW5hdGlvbkNvbnRyb2wuaW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W1hlLHRJLGc1LG0kLHY1LEVkLEhKLER1LFFfXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5oM1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDIwcHg7XG59XG5cbi5yZWxvYWQtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59Il19KSxufSkoKSxjZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChSQyksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChPQyksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoJGYpfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZEEoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHBBKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChoQSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLFAoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWxvYWRFbmFibGVkIixXKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFcoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFcoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbbGVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSx1ZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lfWlzQnV0dG9uRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1FZS5MT0FESU5HfW9wZW5EaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKGNlZSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLE4oMSwibWF0LWljb24iLDEpLHYoKSksMiZlJiZiKCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6WyRuLFpuXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxkZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUFYpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIikpLDImZSYmYigic2V0dGluZ3NMb2FkU3RhdGUiLFcoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbdWVlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxRUGU9WyJtYXQtbWVudS1pdGVtIiwiIl07ZnVuY3Rpb24gS1BlKG4sdCl7MSZuJiYoam4oKSxnKDAsInN2ZyIsMiksTigxLCJwb2x5Z29uIiwzKSx2KCkpfXZhciBoZWU9WyIqIl07ZnVuY3Rpb24gWlBlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwwKSxQKCJrZXlkb3duIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9oYW5kbGVLZXlkb3duKHIpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmNsb3NlZC5lbWl0KCJjbGljayIpKX0pKCJAdHJhbnNmb3JtTWVudS5zdGFydCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25TdGFydChyKSl9KSgiQHRyYW5zZm9ybU1lbnUuZG9uZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5fb25BbmltYXRpb25Eb25lKHIpKX0pLGcoMSwiZGl2IiwxKSxObigyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJpZCIsZS5wYW5lbElkKSgibmdDbGFzcyIsZS5fY2xhc3NMaXN0KSgiQHRyYW5zZm9ybU1lbnUiLGUuX3BhbmVsQW5pbWF0aW9uU3RhdGUpLHplKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsZS5hcmlhTGFiZWxsZWRieXx8bnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLGUuYXJpYURlc2NyaWJlZGJ5fHxudWxsKX19dmFyIHBJPXt0cmFuc2Zvcm1NZW51OkhyKCJ0cmFuc2Zvcm1NZW51IixbRWkoInZvaWQiLHJuKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjgpIn0pKSxJaSgidm9pZCA9PiBlbnRlciIsVmkoIjEyMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixybih7b3BhY2l0eToxLHRyYW5zZm9ybToic2NhbGUoMSkifSkpKSxJaSgiKiA9PiB2b2lkIixWaSgiMTAwbXMgMjVtcyBsaW5lYXIiLHJuKHtvcGFjaXR5OjB9KSkpXSksZmFkZUluSXRlbXM6SHIoImZhZGVJbkl0ZW1zIixbRWkoInNob3dpbmciLHJuKHtvcGFjaXR5OjF9KSksSWkoInZvaWQgPT4gKiIsW3JuKHtvcGFjaXR5OjB9KSxWaSgiNDAwbXMgMTAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LEpQZT1uZXcgc2UoIk1hdE1lbnVDb250ZW50IiksUzU9bmV3IHNlKCJNQVRfTUVOVV9QQU5FTCIpLCRQZT1McyhnbyhjbGFzc3t9KSksRWM9KCgpPT57Y2xhc3MgbiBleHRlbmRzICRQZXtjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fZm9jdXNNb25pdG9yPXIsdGhpcy5fcGFyZW50TWVudT1vLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXMsdGhpcy5yb2xlPSJtZW51aXRlbSIsdGhpcy5faG92ZXJlZD1uZXcgVGUsdGhpcy5fZm9jdXNlZD1uZXcgVGUsdGhpcy5faGlnaGxpZ2h0ZWQ9ITEsdGhpcy5fdHJpZ2dlcnNTdWJtZW51PSExLG8/LmFkZEl0ZW0/Lih0aGlzKX1mb2N1cyhlLGkpe3RoaXMuX2ZvY3VzTW9uaXRvciYmZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSksdGhpcy5fZm9jdXNlZC5uZXh0KHRoaXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvciYmdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKSx0aGlzLl9wYXJlbnRNZW51JiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0mJnRoaXMuX3BhcmVudE1lbnUucmVtb3ZlSXRlbSh0aGlzKSx0aGlzLl9ob3ZlcmVkLmNvbXBsZXRlKCksdGhpcy5fZm9jdXNlZC5jb21wbGV0ZSgpfV9nZXRUYWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPyItMSI6IjAifV9nZXRIb3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9X2NoZWNrRGlzYWJsZWQoZSl7dGhpcy5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX1faGFuZGxlTW91c2VFbnRlcigpe3RoaXMuX2hvdmVyZWQubmV4dCh0aGlzKX1nZXRMYWJlbCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUoITApLGk9ZS5xdWVyeVNlbGVjdG9yQWxsKCJtYXQtaWNvbiwgLm1hdGVyaWFsLWljb25zIik7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXS5yZW1vdmUoKTtyZXR1cm4gZS50ZXh0Q29udGVudD8udHJpbSgpfHwiIn1fc2V0SGlnaGxpZ2h0ZWQoZSl7dGhpcy5faGlnaGxpZ2h0ZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X2hhc0ZvY3VzKCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhCdCksdyh6ciksdyhTNSw4KSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtaXRlbSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY2hlY2tEaXNhYmxlZChvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVNb3VzZUVudGVyKCl9KSwyJmUmJih6ZSgicm9sZSIsaS5yb2xlKSgidGFiaW5kZXgiLGkuX2dldFRhYkluZGV4KCkpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksYXQoIm1hdC1tZW51LWl0ZW0iLCEwKSgibWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZCIsaS5faGlnaGxpZ2h0ZWQpKCJtYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlciIsaS5fdHJpZ2dlcnNTdWJtZW51KSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixyb2xlOiJyb2xlIn0sZXhwb3J0QXM6WyJtYXRNZW51SXRlbSJdLGZlYXR1cmVzOlt0dF0sYXR0cnM6UVBlLG5nQ29udGVudFNlbGVjdG9yczpoZWUsZGVjbHM6Myx2YXJzOjMsY29uc3RzOltbIm1hdFJpcHBsZSIsIiIsMSwibWF0LW1lbnUtcmlwcGxlIiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbImNsYXNzIiwibWF0LW1lbnUtc3VibWVudS1pY29uIiwidmlld0JveCIsIjAgMCA1IDEwIiwiZm9jdXNhYmxlIiwiZmFsc2UiLDQsIm5nSWYiXSxbInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtbWVudS1zdWJtZW51LWljb24iXSxbInBvaW50cyIsIjAsMCA1LDUgMCwxMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksTm4oMCksTigxLCJkaXYiLDApLEUoMixLUGUsMiwwLCJzdmciLDEpKSwyJmUmJih4KDEpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSx4KDEpLGIoIm5nSWYiLGkuX3RyaWdnZXJzU3VibWVudSkpfSxkZXBlbmRlbmNpZXM6W1hlLGVzXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmZWU9bmV3IHNlKCJtYXQtbWVudS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue292ZXJsYXBUcmlnZ2VyOiExLHhQb3NpdGlvbjoiYWZ0ZXIiLHlQb3NpdGlvbjoiYmVsb3ciLGJhY2tkcm9wQ2xhc3M6ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIn19fSksdFJlPTAsb3c9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fbmdab25lPWksdGhpcy5fZGVmYXVsdE9wdGlvbnM9cix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1vLHRoaXMuX3hQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy54UG9zaXRpb24sdGhpcy5feVBvc2l0aW9uPXRoaXMuX2RlZmF1bHRPcHRpb25zLnlQb3NpdGlvbix0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXM9bmV3IGNsLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0idm9pZCIsdGhpcy5fYW5pbWF0aW9uRG9uZT1uZXcgVGUsdGhpcy5vdmVybGF5UGFuZWxDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5vdmVybGF5UGFuZWxDbGFzc3x8IiIsdGhpcy5iYWNrZHJvcENsYXNzPXRoaXMuX2RlZmF1bHRPcHRpb25zLmJhY2tkcm9wQ2xhc3MsdGhpcy5fb3ZlcmxhcFRyaWdnZXI9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxhcFRyaWdnZXIsdGhpcy5faGFzQmFja2Ryb3A9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGFzQmFja2Ryb3AsdGhpcy5jbG9zZWQ9bmV3IEcsdGhpcy5jbG9zZT10aGlzLmNsb3NlZCx0aGlzLnBhbmVsSWQ9Im1hdC1tZW51LXBhbmVsLSIrdFJlKyt9Z2V0IHhQb3NpdGlvbigpe3JldHVybiB0aGlzLl94UG9zaXRpb259c2V0IHhQb3NpdGlvbihlKXt0aGlzLl94UG9zaXRpb249ZSx0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfWdldCB5UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feVBvc2l0aW9ufXNldCB5UG9zaXRpb24oZSl7dGhpcy5feVBvc2l0aW9uPWUsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgb3ZlcmxhcFRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fb3ZlcmxhcFRyaWdnZXJ9c2V0IG92ZXJsYXBUcmlnZ2VyKGUpe3RoaXMuX292ZXJsYXBUcmlnZ2VyPVd0KGUpfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9V3QoZSl9c2V0IHBhbmVsQ2xhc3MoZSl7bGV0IGk9dGhpcy5fcHJldmlvdXNQYW5lbENsYXNzO2kmJmkubGVuZ3RoJiZpLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSExfSksdGhpcy5fcHJldmlvdXNQYW5lbENsYXNzPWUsZSYmZS5sZW5ndGgmJihlLnNwbGl0KCIgIikuZm9yRWFjaChyPT57dGhpcy5fY2xhc3NMaXN0W3JdPSEwfSksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIil9Z2V0IGNsYXNzTGlzdCgpe3JldHVybiB0aGlzLnBhbmVsQ2xhc3N9c2V0IGNsYXNzTGlzdChlKXt0aGlzLnBhbmVsQ2xhc3M9ZX1uZ09uSW5pdCgpe3RoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fdXBkYXRlRGlyZWN0RGVzY2VuZGFudHMoKSx0aGlzLl9rZXlNYW5hZ2VyPW5ldyBBXyh0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLndpdGhXcmFwKCkud2l0aFR5cGVBaGVhZCgpLndpdGhIb21lQW5kRW5kKCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uPXRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZSgoKT0+dGhpcy5jbG9zZWQuZW1pdCgidGFiIikpLHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSx2aShlPT51biguLi5lLm1hcChpPT5pLl9mb2N1c2VkKSkpKS5zdWJzY3JpYmUoZT0+dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuX2tleU1hbmFnZXI7aWYoImVudGVyIj09PXRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUmJmkuYWN0aXZlSXRlbT8uX2hhc0ZvY3VzKCkpe2xldCByPWUudG9BcnJheSgpLG89TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0xLGkuYWN0aXZlSXRlbUluZGV4fHwwKSk7cltvXSYmIXJbb10uZGlzYWJsZWQ/aS5zZXRBY3RpdmVJdGVtKG8pOmkuc2V0TmV4dEl0ZW1BY3RpdmUoKX19KX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5kZXN0cm95KCksdGhpcy5fdGFiU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5jbG9zZWQuY29tcGxldGUoKX1faG92ZXJlZCgpe3JldHVybiB0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksdmkoaT0+dW4oLi4uaS5tYXAocj0+ci5faG92ZXJlZCkpKSl9YWRkSXRlbShlKXt9cmVtb3ZlSXRlbShlKXt9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9dGhpcy5fa2V5TWFuYWdlcjtzd2l0Y2goaSl7Y2FzZSAyNzpNcihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIikpO2JyZWFrO2Nhc2UgMzc6dGhpcy5wYXJlbnRNZW51JiYibHRyIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7Y2FzZSAzOTp0aGlzLnBhcmVudE1lbnUmJiJydGwiPT09dGhpcy5kaXJlY3Rpb24mJnRoaXMuY2xvc2VkLmVtaXQoImtleWRvd24iKTticmVhaztkZWZhdWx0OnJldHVybigzOD09PWl8fDQwPT09aSkmJnIuc2V0Rm9jdXNPcmlnaW4oImtleWJvYXJkIiksdm9pZCByLm9uS2V5ZG93bihlKX1lLnN0b3BQcm9wYWdhdGlvbigpfWZvY3VzRmlyc3RJdGVtKGU9InByb2dyYW0iKXt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShIdCgxKSkuc3Vic2NyaWJlKCgpPT57bGV0IGk9bnVsbDtpZih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubGVuZ3RoJiYoaT10aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZmlyc3QuX2dldEhvc3RFbGVtZW50KCkuY2xvc2VzdCgnW3JvbGU9Im1lbnUiXScpKSwhaXx8IWkuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpe2xldCByPXRoaXMuX2tleU1hbmFnZXI7ci5zZXRGb2N1c09yaWdpbihlKS5zZXRGaXJzdEl0ZW1BY3RpdmUoKSwhci5hY3RpdmVJdGVtJiZpJiZpLmZvY3VzKCl9fSl9cmVzZXRBY3RpdmVJdGVtKCl7dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKX1zZXRFbGV2YXRpb24oZSl7bGV0IGk9TWF0aC5taW4odGhpcy5fYmFzZUVsZXZhdGlvbitlLDI0KSxyPWAke3RoaXMuX2VsZXZhdGlvblByZWZpeH0ke2l9YCxvPU9iamVjdC5rZXlzKHRoaXMuX2NsYXNzTGlzdCkuZmluZChzPT5zLnN0YXJ0c1dpdGgodGhpcy5fZWxldmF0aW9uUHJlZml4KSk7KCFvfHxvPT09dGhpcy5fcHJldmlvdXNFbGV2YXRpb24pJiYodGhpcy5fcHJldmlvdXNFbGV2YXRpb24mJih0aGlzLl9jbGFzc0xpc3RbdGhpcy5fcHJldmlvdXNFbGV2YXRpb25dPSExKSx0aGlzLl9jbGFzc0xpc3Rbcl09ITAsdGhpcy5fcHJldmlvdXNFbGV2YXRpb249cil9c2V0UG9zaXRpb25DbGFzc2VzKGU9dGhpcy54UG9zaXRpb24saT10aGlzLnlQb3NpdGlvbil7bGV0IHI9dGhpcy5fY2xhc3NMaXN0O3JbIm1hdC1tZW51LWJlZm9yZSJdPSJiZWZvcmUiPT09ZSxyWyJtYXQtbWVudS1hZnRlciJdPSJhZnRlciI9PT1lLHJbIm1hdC1tZW51LWFib3ZlIl09ImFib3ZlIj09PWksclsibWF0LW1lbnUtYmVsb3ciXT0iYmVsb3ciPT09aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9X3N0YXJ0QW5pbWF0aW9uKCl7dGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZT0iZW50ZXIifV9yZXNldEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQifV9vbkFuaW1hdGlvbkRvbmUoZSl7dGhpcy5fYW5pbWF0aW9uRG9uZS5uZXh0KGUpLHRoaXMuX2lzQW5pbWF0aW5nPSExfV9vbkFuaW1hdGlvblN0YXJ0KGUpe3RoaXMuX2lzQW5pbWF0aW5nPSEwLCJlbnRlciI9PT1lLnRvU3RhdGUmJjA9PT10aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCYmKGUuZWxlbWVudC5zY3JvbGxUb3A9MCl9X3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCl7dGhpcy5fYWxsSXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2FsbEl0ZW1zKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMucmVzZXQoZS5maWx0ZXIoaT0+aS5fcGFyZW50TWVudT09PXRoaXMpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMubm90aWZ5T25DaGFuZ2VzKCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhmZWUpLHcobm4pKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoTmkocixKUGUsNSksTmkocixFYyw1KSxOaShyLEVjLDQpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmxhenlDb250ZW50PW8uZmlyc3QpLE5lKG89TGUoKSkmJihpLl9hbGxJdGVtcz1vKSxOZShvPUxlKCkpJiYoaS5pdGVtcz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50ZW1wbGF0ZVJlZj1yLmZpcnN0KX19LGlucHV0czp7YmFja2Ryb3BDbGFzczoiYmFja2Ryb3BDbGFzcyIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxhcmlhRGVzY3JpYmVkYnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwiYXJpYURlc2NyaWJlZGJ5Il0seFBvc2l0aW9uOiJ4UG9zaXRpb24iLHlQb3NpdGlvbjoieVBvc2l0aW9uIixvdmVybGFwVHJpZ2dlcjoib3ZlcmxhcFRyaWdnZXIiLGhhc0JhY2tkcm9wOiJoYXNCYWNrZHJvcCIscGFuZWxDbGFzczpbImNsYXNzIiwicGFuZWxDbGFzcyJdLGNsYXNzTGlzdDoiY2xhc3NMaXN0In0sb3V0cHV0czp7Y2xvc2VkOiJjbG9zZWQiLGNsb3NlOiJjbG9zZSJ9fSksbn0pKCksSXU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIG93e2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuX2VsZXZhdGlvblByZWZpeD0ibWF0LWVsZXZhdGlvbi16Iix0aGlzLl9iYXNlRWxldmF0aW9uPTR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcocHQpLHcoZmVlKSx3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW1lbnUiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiYXJpYS1kZXNjcmliZWRieSIsbnVsbCl9LGV4cG9ydEFzOlsibWF0TWVudSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6UzUsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOmhlZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sidGFiaW5kZXgiLCItMSIsInJvbGUiLCJtZW51IiwxLCJtYXQtbWVudS1wYW5lbCIsMywiaWQiLCJuZ0NsYXNzIiwia2V5ZG93biIsImNsaWNrIl0sWzEsIm1hdC1tZW51LWNvbnRlbnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxaUGUsMyw2LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsnbWF0LW1lbnV7ZGlzcGxheTpub25lfS5tYXQtbWVudS1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7bWF4LWhlaWdodDpjYWxjKDEwMHZoIC0gNDhweCk7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowO21pbi1oZWlnaHQ6NjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1lbnUtcGFuZWwubmctYW5pbWF0aW5ne3BvaW50ZXItZXZlbnRzOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1tZW51LWNvbnRlbnQ6bm90KDplbXB0eSl7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LW1lbnUtaXRlbXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LWl0ZW06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbXt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tcmlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uIHN2Z3t2ZXJ0aWNhbC1hbGlnbjp0b3B9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbnttYXJnaW4tbGVmdDoxNnB4O21hcmdpbi1yaWdodDowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXTo6YWZ0ZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO3RvcDowO2xlZnQ6MDtib3R0b206MDtyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LWl0ZW17bWFyZ2luLXRvcDoxcHh9Lm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MzJweH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW0tc3VibWVudS10cmlnZ2Vye3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MzJweH0ubWF0LW1lbnUtc3VibWVudS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTZweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDo1cHg7aGVpZ2h0OjEwcHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtbWVudS1zdWJtZW51LWljb257cmlnaHQ6YXV0bztsZWZ0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgc2NhbGVYKC0xKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1zdWJtZW51LWljb257ZmlsbDpDYW52YXNUZXh0fWJ1dHRvbi5tYXQtbWVudS1pdGVte3dpZHRoOjEwMCV9Lm1hdC1tZW51LWl0ZW0gLm1hdC1tZW51LXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfSddLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W3BJLnRyYW5zZm9ybU1lbnUscEkuZmFkZUluSXRlbXNdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG1lZT1uZXcgc2UoIm1hdC1tZW51LXNjcm9sbC1zdHJhdGVneSIpLGlSZT17cHJvdmlkZTptZWUsZGVwczpbUWldLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxwZWU9TnMoe3Bhc3NpdmU6ITB9KSxyUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2VsZW1lbnQ9aSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPXIsdGhpcy5fbWVudUl0ZW1JbnN0YW5jZT1hLHRoaXMuX2Rpcj1sLHRoaXMuX2ZvY3VzTW9uaXRvcj1jLHRoaXMuX25nWm9uZT11LHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9tZW51T3Blbj0hMSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5faGFuZGxlVG91Y2hTdGFydD1kPT57SEMoZCl8fCh0aGlzLl9vcGVuZWRCeT0idG91Y2giKX0sdGhpcy5fb3BlbmVkQnk9dm9pZCAwLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMubWVudU9wZW5lZD1uZXcgRyx0aGlzLm9uTWVudU9wZW49dGhpcy5tZW51T3BlbmVkLHRoaXMubWVudUNsb3NlZD1uZXcgRyx0aGlzLm9uTWVudUNsb3NlPXRoaXMubWVudUNsb3NlZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1vLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT1zIGluc3RhbmNlb2Ygb3c/czp2b2lkIDAsaS5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQscGVlKSxhJiYoYS5fdHJpZ2dlcnNTdWJtZW51PXRoaXMudHJpZ2dlcnNTdWJtZW51KCkpfWdldCBfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yKCl7cmV0dXJuIHRoaXMubWVudX1zZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcihlKXt0aGlzLm1lbnU9ZX1nZXQgbWVudSgpe3JldHVybiB0aGlzLl9tZW51fXNldCBtZW51KGUpe2UhPT10aGlzLl9tZW51JiYodGhpcy5fbWVudT1lLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGUmJih0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb249ZS5jbG9zZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2Rlc3Ryb3lNZW51KGkpLCgiY2xpY2siPT09aXx8InRhYiI9PT1pKSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51JiZ0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkLmVtaXQoaSl9KSkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2hhbmRsZUhvdmVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKSx0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5faGFuZGxlVG91Y2hTdGFydCxwZWUpLHRoaXMuX21lbnVDbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5faG92ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1nZXQgbWVudU9wZW4oKXtyZXR1cm4gdGhpcy5fbWVudU9wZW59Z2V0IGRpcigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifXRyaWdnZXJzU3VibWVudSgpe3JldHVybiEoIXRoaXMuX21lbnVJdGVtSW5zdGFuY2V8fCF0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUpfXRvZ2dsZU1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudU9wZW4/dGhpcy5jbG9zZU1lbnUoKTp0aGlzLm9wZW5NZW51KCl9b3Blbk1lbnUoKXtsZXQgZT10aGlzLm1lbnU7aWYodGhpcy5fbWVudU9wZW58fCFlKXJldHVybjtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KGUpLHI9aS5nZXRDb25maWcoKSxvPXIucG9zaXRpb25TdHJhdGVneTt0aGlzLl9zZXRQb3NpdGlvbihlLG8pLHIuaGFzQmFja2Ryb3A9bnVsbD09ZS5oYXNCYWNrZHJvcD8hdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKTplLmhhc0JhY2tkcm9wLGkuYXR0YWNoKHRoaXMuX2dldFBvcnRhbChlKSksZS5sYXp5Q29udGVudCYmZS5sYXp5Q29udGVudC5hdHRhY2godGhpcy5tZW51RGF0YSksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fbWVudUNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKCgpPT50aGlzLmNsb3NlTWVudSgpKSx0aGlzLl9pbml0TWVudShlKSxlIGluc3RhbmNlb2Ygb3cmJihlLl9zdGFydEFuaW1hdGlvbigpLGUuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzLnBpcGUob3QoZS5jbG9zZSkpLnN1YnNjcmliZSgoKT0+e28ud2l0aExvY2tlZFBvc2l0aW9uKCExKS5yZWFwcGx5TGFzdFBvc2l0aW9uKCksby53aXRoTG9ja2VkUG9zaXRpb24oITApfSkpfWNsb3NlTWVudSgpe3RoaXMubWVudT8uY2xvc2UuZW1pdCgpfWZvY3VzKGUsaSl7dGhpcy5fZm9jdXNNb25pdG9yJiZlP3RoaXMuX2ZvY3VzTW9uaXRvci5mb2N1c1ZpYSh0aGlzLl9lbGVtZW50LGUsaSk6dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGkpfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fb3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKX1fZGVzdHJveU1lbnUoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWZ8fCF0aGlzLm1lbnVPcGVuKXJldHVybjtsZXQgaT10aGlzLm1lbnU7dGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMucmVzdG9yZUZvY3VzJiYoImtleWRvd24iPT09ZXx8IXRoaXMuX29wZW5lZEJ5fHwhdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSkmJnRoaXMuZm9jdXModGhpcy5fb3BlbmVkQnkpLHRoaXMuX29wZW5lZEJ5PXZvaWQgMCxpIGluc3RhbmNlb2Ygb3c/KGkuX3Jlc2V0QW5pbWF0aW9uKCksaS5sYXp5Q29udGVudD9pLl9hbmltYXRpb25Eb25lLnBpcGUoSGUocj0+InZvaWQiPT09ci50b1N0YXRlKSxIdCgxKSxvdChpLmxhenlDb250ZW50Ll9hdHRhY2hlZCkpLnN1YnNjcmliZSh7bmV4dDooKT0+aS5sYXp5Q29udGVudC5kZXRhY2goKSxjb21wbGV0ZTooKT0+dGhpcy5fc2V0SXNNZW51T3BlbighMSl9KTp0aGlzLl9zZXRJc01lbnVPcGVuKCExKSk6KHRoaXMuX3NldElzTWVudU9wZW4oITEpLGk/LmxhenlDb250ZW50Py5kZXRhY2goKSl9X2luaXRNZW51KGUpe2UucGFyZW50TWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpP3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudTp2b2lkIDAsZS5kaXJlY3Rpb249dGhpcy5kaXIsdGhpcy5fc2V0TWVudUVsZXZhdGlvbihlKSxlLmZvY3VzRmlyc3RJdGVtKHRoaXMuX29wZW5lZEJ5fHwicHJvZ3JhbSIpLHRoaXMuX3NldElzTWVudU9wZW4oITApfV9zZXRNZW51RWxldmF0aW9uKGUpe2lmKGUuc2V0RWxldmF0aW9uKXtsZXQgaT0wLHI9ZS5wYXJlbnRNZW51O2Zvcig7cjspaSsrLHI9ci5wYXJlbnRNZW51O2Uuc2V0RWxldmF0aW9uKGkpfX1fc2V0SXNNZW51T3BlbihlKXt0aGlzLl9tZW51T3Blbj1lLHRoaXMuX21lbnVPcGVuP3RoaXMubWVudU9wZW5lZC5lbWl0KCk6dGhpcy5tZW51Q2xvc2VkLmVtaXQoKSx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZ0aGlzLl9tZW51SXRlbUluc3RhbmNlLl9zZXRIaWdobGlnaHRlZChlKX1fY3JlYXRlT3ZlcmxheShlKXtpZighdGhpcy5fb3ZlcmxheVJlZil7bGV0IGk9dGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhlKTt0aGlzLl9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkucG9zaXRpb25TdHJhdGVneSksdGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZShpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKX1yZXR1cm4gdGhpcy5fb3ZlcmxheVJlZn1fZ2V0T3ZlcmxheUNvbmZpZyhlKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2VsZW1lbnQpLndpdGhMb2NrZWRQb3NpdGlvbigpLndpdGhHcm93QWZ0ZXJPcGVuKCkud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCIubWF0LW1lbnUtcGFuZWwsIC5tYXQtbWRjLW1lbnUtcGFuZWwiKSxiYWNrZHJvcENsYXNzOmUuYmFja2Ryb3BDbGFzc3x8ImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wIixwYW5lbENsYXNzOmUub3ZlcmxheVBhbmVsQ2xhc3Msc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxkaXJlY3Rpb246dGhpcy5fZGlyfSl9X3N1YnNjcmliZVRvUG9zaXRpb25zKGUsaSl7ZS5zZXRQb3NpdGlvbkNsYXNzZXMmJmkucG9zaXRpb25DaGFuZ2VzLnN1YnNjcmliZShyPT57bGV0IG89InN0YXJ0Ij09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVg/ImFmdGVyIjoiYmVmb3JlIixzPSJ0b3AiPT09ci5jb25uZWN0aW9uUGFpci5vdmVybGF5WT8iYmVsb3ciOiJhYm92ZSI7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW4oKCk9PmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scykpOmUuc2V0UG9zaXRpb25DbGFzc2VzKG8scyl9KX1fc2V0UG9zaXRpb24oZSxpKXtsZXRbcixvXT0iYmVmb3JlIj09PWUueFBvc2l0aW9uP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl0sW3MsYV09ImFib3ZlIj09PWUueVBvc2l0aW9uP1siYm90dG9tIiwidG9wIl06WyJ0b3AiLCJib3R0b20iXSxbbCxjXT1bcyxhXSxbdSxkXT1bcixvXSxwPTA7aWYodGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSl7aWYoZD1yPSJiZWZvcmUiPT09ZS54UG9zaXRpb24/InN0YXJ0IjoiZW5kIixvPXU9ImVuZCI9PT1yPyJzdGFydCI6ImVuZCIsdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51KXtpZihudWxsPT10aGlzLl9wYXJlbnRJbm5lclBhZGRpbmcpe2xldCBoPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5pdGVtcy5maXJzdDt0aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc9aD9oLl9nZXRIb3N0RWxlbWVudCgpLm9mZnNldFRvcDowfXA9ImJvdHRvbSI9PT1zP3RoaXMuX3BhcmVudElubmVyUGFkZGluZzotdGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nfX1lbHNlIGUub3ZlcmxhcFRyaWdnZXJ8fChsPSJ0b3AiPT09cz8iYm90dG9tIjoidG9wIixjPSJ0b3AiPT09YT8iYm90dG9tIjoidG9wIik7aS53aXRoUG9zaXRpb25zKFt7b3JpZ2luWDpyLG9yaWdpblk6bCxvdmVybGF5WDp1LG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpvLG9yaWdpblk6bCxvdmVybGF5WDpkLG92ZXJsYXlZOnMsb2Zmc2V0WTpwfSx7b3JpZ2luWDpyLG9yaWdpblk6YyxvdmVybGF5WDp1LG92ZXJsYXlZOmEsb2Zmc2V0WTotcH0se29yaWdpblg6byxvcmlnaW5ZOmMsb3ZlcmxheVg6ZCxvdmVybGF5WTphLG9mZnNldFk6LXB9XSl9X21lbnVDbG9zaW5nQWN0aW9ucygpe2xldCBlPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLGk9dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpO3JldHVybiB1bihlLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuY2xvc2VkOmp0KCksdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51P3RoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoSGUocz0+cyE9PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UpLEhlKCgpPT50aGlzLl9tZW51T3BlbikpOmp0KCksaSl9X2hhbmRsZU1vdXNlZG93bihlKXtWQyhlKXx8KHRoaXMuX29wZW5lZEJ5PTA9PT1lLmJ1dHRvbj8ibW91c2UiOnZvaWQgMCx0aGlzLnRyaWdnZXJzU3VibWVudSgpJiZlLnByZXZlbnREZWZhdWx0KCkpfV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZTsoMTM9PT1pfHwzMj09PWkpJiYodGhpcy5fb3BlbmVkQnk9ImtleWJvYXJkIiksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmKDM5PT09aSYmImx0ciI9PT10aGlzLmRpcnx8Mzc9PT1pJiYicnRsIj09PXRoaXMuZGlyKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIsdGhpcy5vcGVuTWVudSgpKX1faGFuZGxlQ2xpY2soZSl7dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKT8oZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm9wZW5NZW51KCkpOnRoaXMudG9nZ2xlTWVudSgpfV9oYW5kbGVIb3ZlcigpeyF0aGlzLnRyaWdnZXJzU3VibWVudSgpfHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51fHwodGhpcy5faG92ZXJTdWJzY3JpcHRpb249dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51Ll9ob3ZlcmVkKCkucGlwZShIZShlPT5lPT09dGhpcy5fbWVudUl0ZW1JbnN0YW5jZSYmIWUuZGlzYWJsZWQpLG5sKDAsZmcpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vcGVuZWRCeT0ibW91c2UiLHRoaXMubWVudSBpbnN0YW5jZW9mIG93JiZ0aGlzLm1lbnUuX2lzQW5pbWF0aW5nP3RoaXMubWVudS5fYW5pbWF0aW9uRG9uZS5waXBlKEh0KDEpLG5sKDAsZmcpLG90KHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLm9wZW5NZW51KCkpOnRoaXMub3Blbk1lbnUoKX0pKX1fZ2V0UG9ydGFsKGUpe3JldHVybighdGhpcy5fcG9ydGFsfHx0aGlzLl9wb3J0YWwudGVtcGxhdGVSZWYhPT1lLnRlbXBsYXRlUmVmKSYmKHRoaXMuX3BvcnRhbD1uZXcgaHMoZS50ZW1wbGF0ZVJlZix0aGlzLl92aWV3Q29udGFpbmVyUmVmKSksdGhpcy5fcG9ydGFsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KHlpKSx3KG1lZSksdyhTNSw4KSx3KEVjLDEwKSx3KGlyLDgpLHcoenIpLHcocHQpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVDbGljayhvKX0pKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVNb3VzZWRvd24obyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJnplKCJhcmlhLWhhc3BvcHVwIixpLm1lbnU/Im1lbnUiOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLm1lbnVPcGVufHxudWxsKSgiYXJpYS1jb250cm9scyIsaS5tZW51T3Blbj9pLm1lbnUucGFuZWxJZDpudWxsKX0saW5wdXRzOntfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJfZGVwcmVjYXRlZE1hdE1lbnVUcmlnZ2VyRm9yIl0sbWVudTpbIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudSJdLG1lbnVEYXRhOlsibWF0TWVudVRyaWdnZXJEYXRhIiwibWVudURhdGEiXSxyZXN0b3JlRm9jdXM6WyJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyIsInJlc3RvcmVGb2N1cyJdfSxvdXRwdXRzOnttZW51T3BlbmVkOiJtZW51T3BlbmVkIixvbk1lbnVPcGVuOiJvbk1lbnVPcGVuIixtZW51Q2xvc2VkOiJtZW51Q2xvc2VkIixvbk1lbnVDbG9zZToib25NZW51Q2xvc2UifX0pLG59KSgpLFB1PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyByUmV7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCIiXSxbIiIsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LW1lbnUtdHJpZ2dlciJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZWg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbaVJlXSxpbXBvcnRzOltrZSxkbix4YyxWbyxTdSxkbl19KSxufSkoKTtmdW5jdGlvbiBvUmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDgpfWZ1bmN0aW9uIHNSZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsOSl9ZnVuY3Rpb24gYVJlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwxMCl9dmFyIGhhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5ERUZBVUxUPTBdPSJERUZBVUxUIixuW24uREFSS19NT0RFX09OPTFdPSJEQVJLX01PREVfT04iLG5bbi5EQVJLX01PREVfT0ZGPTJdPSJEQVJLX01PREVfT0ZGIn0oaGF8fChoYT17fSkpLGhhKSkoKSxnZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGFya01vZGVPdmVycmlkZT1oYSx0aGlzLm9uT3ZlcnJpZGVDaGFuZ2VkPW5ldyBHfWdldEJ1dHRvblRpdGxlKCl7bGV0IGU7c3dpdGNoKHRoaXMuZGFya01vZGVPdmVycmlkZSl7Y2FzZSBoYS5ERUZBVUxUOmU9IkJyb3dzZXIgZGVmYXVsdCI7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046ZT0iRGFyayBtb2RlIjticmVhaztjYXNlIGhhLkRBUktfTU9ERV9PRkY6ZT0iTGlnaHQgbW9kZSJ9cmV0dXJuYEN1cnJlbnQgbW9kZTogWyR7ZX1dLiBTd2l0Y2ggYmV0d2VlbiBicm93c2VyIGRlZmF1bHQsIGxpZ2h0LCBvciBkYXJrIHRoZW1lLmB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiXV0saW5wdXRzOntkYXJrTW9kZU92ZXJyaWRlOiJkYXJrTW9kZU92ZXJyaWRlIn0sb3V0cHV0czp7b25PdmVycmlkZUNoYW5nZWQ6Im9uT3ZlcnJpZGVDaGFuZ2VkIn0sZGVjbHM6MTUsdmFyczo2LGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIiwiTWVudSBmb3IgY2hhbmdpbmcgbGlnaHQgb3IgZGFyayB0aGVtZSIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJuZ1N3aXRjaCIsInRpdGxlIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzdmdJY29uIiwiZGFya19tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJ0aXRsZSIsIlNldCB0aGUgdGhlbWUgdG8gbWF0Y2ggdGhlIGRlZmF1bHQgbW9kZSBpbiB0aGUgYnJvd3Nlci4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBsaWdodCBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJGb3JjZSBkYXJrIFRlbnNvckJvYXJkIHRoZW1lLiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJicmlnaHRuZXNzXzZfMjRweCJdLFsic3ZnSWNvbiIsImxpZ2h0X21vZGVfMjRweCJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLEUoMSxvUmUsMSwwLCJtYXQtaWNvbiIsMSksRSgyLHNSZSwxLDAsIm1hdC1pY29uIiwyKSxFKDMsYVJlLDEsMCwibWF0LWljb24iLDMpLHYoKSxnKDQsIm1hdC1tZW51IixudWxsLDQpKDYsImJ1dHRvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCl9KSxnKDcsImxhYmVsIiksRCg4LCJCcm93c2VyIGRlZmF1bHQiKSx2KCkoKSxnKDksImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRil9KSxnKDEwLCJsYWJlbCIpLEQoMTEsIkxpZ2h0IiksdigpKCksZygxMiwiYnV0dG9uIiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk92ZXJyaWRlQ2hhbmdlZC5lbWl0KGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pfSksZygxMywibGFiZWwiKSxEKDE0LCJEYXJrIiksdigpKCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDUpKSgibmdTd2l0Y2giLGkuZGFya01vZGVPdmVycmlkZSkoInRpdGxlIixpLmdldEJ1dHRvblRpdGxlKCkpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREVGQVVMVCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT0ZGKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PTikpfSxkZXBlbmRlbmNpZXM6WyRuLFpuLEl1LEVjLFB1LGhyLElyXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxfZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXJrTW9kZU92ZXJyaWRlJD10aGlzLnN0b3JlLnNlbGVjdChzRCkucGlwZShCKGk9Pm51bGw9PT1pP2hhLkRFRkFVTFQ6aT9oYS5EQVJLX01PREVfT046aGEuREFSS19NT0RFX09GRikpfWNoYW5nZURhcmtNb2RlKGUpe2xldCBpPW51bGw7c3dpdGNoKGUpe2Nhc2UgaGEuREVGQVVMVDppPW51bGw7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT0ZGOmk9ITE7YnJlYWs7Y2FzZSBoYS5EQVJLX01PREVfT046aT0hMH10aGlzLnN0b3JlLmRpc3BhdGNoKGpEKHtlbmFibGVEYXJrTW9kZTppfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImRhcmtNb2RlT3ZlcnJpZGUiLCJvbk92ZXJyaWRlQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYXBwLWhlYWRlci1kYXJrLW1vZGUtdG9nZ2xlLWNvbXBvbmVudCIsMCksUCgib25PdmVycmlkZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmNoYW5nZURhcmtNb2RlKG8pfSksaigxLCJhc3luYyIpLHYoKSksMiZlJiZiKCJkYXJrTW9kZU92ZXJyaWRlIixXKDEsMSxpLmRhcmtNb2RlT3ZlcnJpZGUkKSl9LGRlcGVuZGVuY2llczpbZ2VlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiB1UmUobix0KXsxJm4mJk5uKDApfXZhciB4ZWU9WyIqIl07ZnVuY3Rpb24gZFJlKG4sdCl7fXZhciBwUmU9ZnVuY3Rpb24obil7cmV0dXJue2FuaW1hdGlvbkR1cmF0aW9uOm59fSxoUmU9ZnVuY3Rpb24obix0KXtyZXR1cm57dmFsdWU6bixwYXJhbXM6dH19LGZSZT1bInRhYkxpc3RDb250YWluZXIiXSxtUmU9WyJ0YWJMaXN0Il0sZ1JlPVsidGFiTGlzdElubmVyIl0sX1JlPVsibmV4dFBhZ2luYXRvciJdLHZSZT1bInByZXZpb3VzUGFnaW5hdG9yIl0seVJlPVsidGFiQm9keVdyYXBwZXIiXSxiUmU9WyJ0YWJIZWFkZXIiXTtmdW5jdGlvbiB4UmUobix0KXt9ZnVuY3Rpb24gQ1JlKG4sdCl7MSZuJiZFKDAseFJlLDAsMCwibmctdGVtcGxhdGUiLDEwKSwyJm4mJmIoImNka1BvcnRhbE91dGxldCIsTSgpLiRpbXBsaWNpdC50ZW1wbGF0ZUxhYmVsKX1mdW5jdGlvbiB3UmUobix0KXsxJm4mJkQoMCksMiZuJiZ5dChNKCkuJGltcGxpY2l0LnRleHRMYWJlbCl9ZnVuY3Rpb24gTVJlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgcj1yZShlKSxvPXIuJGltcGxpY2l0LHM9ci5pbmRleCxhPU0oKSxsPXN0KDEpO3JldHVybiBvZShhLl9oYW5kbGVDbGljayhvLGwscykpfSkoImNka0ZvY3VzQ2hhbmdlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgpLl90YWJGb2N1c0NoYW5nZWQocixzKSl9KSxnKDEsImRpdiIsNyksRSgyLENSZSwxLDEsIm5nLXRlbXBsYXRlIiw4KSxFKDMsd1JlLDEsMSwibmctdGVtcGxhdGUiLG51bGwsOSxlbiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1zdCg0KSxvPU0oKTthdCgibWF0LXRhYi1sYWJlbC1hY3RpdmUiLG8uc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixvLl9nZXRUYWJMYWJlbElkKGkpKSgibmdDbGFzcyIsZS5sYWJlbENsYXNzKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJtYXRSaXBwbGVEaXNhYmxlZCIsZS5kaXNhYmxlZHx8by5kaXNhYmxlUmlwcGxlKSx6ZSgidGFiSW5kZXgiLG8uX2dldFRhYkluZGV4KGUsaSkpKCJhcmlhLXBvc2luc2V0IixpKzEpKCJhcmlhLXNldHNpemUiLG8uX3RhYnMubGVuZ3RoKSgiYXJpYS1jb250cm9scyIsby5fZ2V0VGFiQ29udGVudElkKGkpKSgiYXJpYS1zZWxlY3RlZCIsby5zZWxlY3RlZEluZGV4PT09aSkoImFyaWEtbGFiZWwiLGUuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IiwhZS5hcmlhTGFiZWwmJmUuYXJpYUxhYmVsbGVkYnk/ZS5hcmlhTGFiZWxsZWRieTpudWxsKSx4KDIpLGIoIm5nSWYiLGUudGVtcGxhdGVMYWJlbCkoIm5nSWZFbHNlIixyKX19ZnVuY3Rpb24gU1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXRhYi1ib2R5IiwxMSksUCgiX29uQ2VudGVyZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fcmVtb3ZlVGFiQm9keVdyYXBwZXJIZWlnaHQoKSl9KSgiX29uQ2VudGVyaW5nIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLl9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKCk7YXQoIm1hdC10YWItYm9keS1hY3RpdmUiLHIuc2VsZWN0ZWRJbmRleD09PWkpLGIoImlkIixyLl9nZXRUYWJDb250ZW50SWQoaSkpKCJuZ0NsYXNzIixlLmJvZHlDbGFzcykoImNvbnRlbnQiLGUuY29udGVudCkoInBvc2l0aW9uIixlLnBvc2l0aW9uKSgib3JpZ2luIixlLm9yaWdpbikoImFuaW1hdGlvbkR1cmF0aW9uIixyLmFuaW1hdGlvbkR1cmF0aW9uKSgicHJlc2VydmVDb250ZW50IixyLnByZXNlcnZlQ29udGVudCksemUoInRhYmluZGV4IixudWxsIT1yLmNvbnRlbnRUYWJJbmRleCYmci5zZWxlY3RlZEluZGV4PT09aT9yLmNvbnRlbnRUYWJJbmRleDpudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixyLl9nZXRUYWJMYWJlbElkKGkpKX19dmFyIEVSZT1uZXcgc2UoIk1hdElua0JhclBvc2l0aW9uZXIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIHQ9Pih7bGVmdDp0Pyh0Lm9mZnNldExlZnR8fDApKyJweCI6IjAiLHdpZHRoOnQ/KHQub2Zmc2V0V2lkdGh8fDApKyJweCI6IjAifSl9fSksdmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2lua0JhclBvc2l0aW9uZXI9cix0aGlzLl9hbmltYXRpb25Nb2RlPW99YWxpZ25Ub0VsZW1lbnQoZSl7dGhpcy5zaG93KCksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUoKCk9PntsZXQgaT10aGlzLl9pbmtCYXJQb3NpdGlvbmVyKGUpLHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubGVmdD1pLmxlZnQsci5zdHlsZS53aWR0aD1pLndpZHRofSl9KX1zaG93KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9InZpc2libGUifWhpZGUoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhwdCksdyhFUmUpLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtaW5rLWJhciJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbmstYmFyIl0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpfX0pLG59KSgpLERSZT1uZXcgc2UoIk1hdFRhYkNvbnRlbnQiKSxDZWU9bmV3IHNlKCJNYXRUYWJMYWJlbCIpLHdlZT1uZXcgc2UoIk1BVF9UQUIiKSxNZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGZKe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkpLHRoaXMuX2Nsb3Nlc3RUYWI9cn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPaSksdyh5aSksdyh3ZWUsOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtdGFiLWxhYmVsIiwiIl0sWyIiLCJtYXRUYWJMYWJlbCIsIiJdXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOkNlZSx1c2VFeGlzdGluZzpufV0pLHR0XX0pLG59KSgpLEFSZT1nbyhjbGFzc3t9KSxTZWU9bmV3IHNlKCJNQVRfVEFCX0dST1VQIiksYXc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEFSZXtjb25zdHJ1Y3RvcihlLGkpe3N1cGVyKCksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX2Nsb3Nlc3RUYWJHcm91cD1pLHRoaXMudGV4dExhYmVsPSIiLHRoaXMuX2NvbnRlbnRQb3J0YWw9bnVsbCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFRlLHRoaXMucG9zaXRpb249bnVsbCx0aGlzLm9yaWdpbj1udWxsLHRoaXMuaXNBY3RpdmU9ITF9Z2V0IHRlbXBsYXRlTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGVtcGxhdGVMYWJlbH1zZXQgdGVtcGxhdGVMYWJlbChlKXt0aGlzLl9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl9Z2V0IGNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fY29udGVudFBvcnRhbH1uZ09uQ2hhbmdlcyhlKXsoZS5oYXNPd25Qcm9wZXJ0eSgidGV4dExhYmVsIil8fGUuaGFzT3duUHJvcGVydHkoImRpc2FibGVkIikpJiZ0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpfW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9bmdPbkluaXQoKXt0aGlzLl9jb250ZW50UG9ydGFsPW5ldyBocyh0aGlzLl9leHBsaWNpdENvbnRlbnR8fHRoaXMuX2ltcGxpY2l0Q29udGVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKX1fc2V0VGVtcGxhdGVMYWJlbElucHV0KGUpe2UmJmUuX2Nsb3Nlc3RUYWI9PT10aGlzJiYodGhpcy5fdGVtcGxhdGVMYWJlbD1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhTZWUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKE5pKHIsQ2VlLDUpLE5pKHIsRFJlLDcsT2kpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLnRlbXBsYXRlTGFiZWw9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2V4cGxpY2l0Q29udGVudD1vLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoT2ksNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW1wbGljaXRDb250ZW50PXIuZmlyc3QpfX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLHRleHRMYWJlbDpbImxhYmVsIiwidGV4dExhYmVsIl0sYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxsYWJlbENsYXNzOiJsYWJlbENsYXNzIixib2R5Q2xhc3M6ImJvZHlDbGFzcyJ9LGV4cG9ydEFzOlsibWF0VGFiIl0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTp3ZWUsdXNlRXhpc3Rpbmc6bn1dKSx0dCx6dF0sbmdDb250ZW50U2VsZWN0b3JzOnhlZSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLHVSZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxJUmU9e3RyYW5zbGF0ZVRhYjpIcigidHJhbnNsYXRlVGFiIixbRWkoImNlbnRlciwgdm9pZCwgbGVmdC1vcmlnaW4tY2VudGVyLCByaWdodC1vcmlnaW4tY2VudGVyIixybih7dHJhbnNmb3JtOiJub25lIn0pKSxFaSgibGVmdCIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoLTEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxFaSgicmlnaHQiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIixtaW5IZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pKSxJaSgiKiA9PiBsZWZ0LCAqID0+IHJpZ2h0LCBsZWZ0ID0+IGNlbnRlciwgcmlnaHQgPT4gY2VudGVyIixWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpKSxJaSgidm9pZCA9PiBsZWZ0LW9yaWdpbi1jZW50ZXIiLFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxWaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSksSWkoInZvaWQgPT4gcmlnaHQtb3JpZ2luLWNlbnRlciIsW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKDEwMCUsIDAsIDApIix2aXNpYmlsaXR5OiJoaWRkZW4ifSksVmkoInt7YW5pbWF0aW9uRHVyYXRpb259fSBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSkiKV0pXSl9LFBSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQnN7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLG8pLHRoaXMuX2hvc3Q9cix0aGlzLl9jZW50ZXJpbmdTdWI9dm4uRU1QVFksdGhpcy5fbGVhdmluZ1N1Yj12bi5FTVBUWX1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5fY2VudGVyaW5nU3ViPXRoaXMuX2hvc3QuX2JlZm9yZUNlbnRlcmluZy5waXBlKFZuKHRoaXMuX2hvc3QuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5faG9zdC5fcG9zaXRpb24pKSkuc3Vic2NyaWJlKGU9PntlJiYhdGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmF0dGFjaCh0aGlzLl9ob3N0Ll9jb250ZW50KX0pLHRoaXMuX2xlYXZpbmdTdWI9dGhpcy5faG9zdC5fYWZ0ZXJMZWF2aW5nQ2VudGVyLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hvc3QucHJlc2VydmVDb250ZW50fHx0aGlzLmRldGFjaCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuX2NlbnRlcmluZ1N1Yi51bnN1YnNjcmliZSgpLHRoaXMuX2xlYXZpbmdTdWIudW5zdWJzY3JpYmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhFbyksdyh5aSksdyhyaSgoKT0+RWVlKSksdyhCdCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJCb2R5SG9zdCIsIiJdXSxmZWF0dXJlczpbdHRdfSksbn0pKCksUlJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kaXI9aSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dm4uRU1QVFksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGU9bmV3IFRlLHRoaXMuX29uQ2VudGVyaW5nPW5ldyBHLHRoaXMuX2JlZm9yZUNlbnRlcmluZz1uZXcgRyx0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXI9bmV3IEcsdGhpcy5fb25DZW50ZXJlZD1uZXcgRyghMCksdGhpcy5hbmltYXRpb25EdXJhdGlvbj0iNTAwbXMiLHRoaXMucHJlc2VydmVDb250ZW50PSExLGkmJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249aS5jaGFuZ2Uuc3Vic2NyaWJlKG89Pnt0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShvKSxyLm1hcmtGb3JDaGVjaygpfSkpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLnBpcGUoZGkoKG8scyk9Pm8uZnJvbVN0YXRlPT09cy5mcm9tU3RhdGUmJm8udG9TdGF0ZT09PXMudG9TdGF0ZSkpLnN1YnNjcmliZShvPT57dGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLnRvU3RhdGUpJiZ0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fb25DZW50ZXJlZC5lbWl0KCksdGhpcy5faXNDZW50ZXJQb3NpdGlvbihvLmZyb21TdGF0ZSkmJiF0aGlzLl9pc0NlbnRlclBvc2l0aW9uKHRoaXMuX3Bvc2l0aW9uKSYmdGhpcy5fYWZ0ZXJMZWF2aW5nQ2VudGVyLmVtaXQoKX0pfXNldCBwb3NpdGlvbihlKXt0aGlzLl9wb3NpdGlvbkluZGV4PWUsdGhpcy5fY29tcHV0ZVBvc2l0aW9uQW5pbWF0aW9uU3RhdGUoKX1uZ09uSW5pdCgpeyJjZW50ZXIiPT10aGlzLl9wb3NpdGlvbiYmbnVsbCE9dGhpcy5vcmlnaW4mJih0aGlzLl9wb3NpdGlvbj10aGlzLl9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKHRoaXMub3JpZ2luKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZS5jb21wbGV0ZSgpfV9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQoZSl7bGV0IGk9dGhpcy5faXNDZW50ZXJQb3NpdGlvbihlLnRvU3RhdGUpO3RoaXMuX2JlZm9yZUNlbnRlcmluZy5lbWl0KGkpLGkmJnRoaXMuX29uQ2VudGVyaW5nLmVtaXQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCl9X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV9pc0NlbnRlclBvc2l0aW9uKGUpe3JldHVybiJjZW50ZXIiPT1lfHwibGVmdC1vcmlnaW4tY2VudGVyIj09ZXx8InJpZ2h0LW9yaWdpbi1jZW50ZXIiPT1lfV9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZShlPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpKXt0aGlzLl9wb3NpdGlvbj10aGlzLl9wb3NpdGlvbkluZGV4PDA/Imx0ciI9PWU/ImxlZnQiOiJyaWdodCI6dGhpcy5fcG9zaXRpb25JbmRleD4wPyJsdHIiPT1lPyJyaWdodCI6ImxlZnQiOiJjZW50ZXIifV9jb21wdXRlUG9zaXRpb25Gcm9tT3JpZ2luKGUpe2xldCBpPXRoaXMuX2dldExheW91dERpcmVjdGlvbigpO3JldHVybiJsdHIiPT1pJiZlPD0wfHwicnRsIj09aSYmZT4wPyJsZWZ0LW9yaWdpbi1jZW50ZXIiOiJyaWdodC1vcmlnaW4tY2VudGVyIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhpciw4KSx3KG5uKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntfY29udGVudDpbImNvbnRlbnQiLCJfY29udGVudCJdLG9yaWdpbjoib3JpZ2luIixhbmltYXRpb25EdXJhdGlvbjoiYW5pbWF0aW9uRHVyYXRpb24iLHByZXNlcnZlQ29udGVudDoicHJlc2VydmVDb250ZW50Iixwb3NpdGlvbjoicG9zaXRpb24ifSxvdXRwdXRzOntfb25DZW50ZXJpbmc6Il9vbkNlbnRlcmluZyIsX2JlZm9yZUNlbnRlcmluZzoiX2JlZm9yZUNlbnRlcmluZyIsX2FmdGVyTGVhdmluZ0NlbnRlcjoiX2FmdGVyTGVhdmluZ0NlbnRlciIsX29uQ2VudGVyZWQ6Il9vbkNlbnRlcmVkIn19KSxufSkoKSxFZWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFJSZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KGlyLDgpLHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWJvZHkiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChCcyw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9wb3J0YWxIb3N0PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWJvZHkiXSxmZWF0dXJlczpbdHRdLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWyJjZGtTY3JvbGxhYmxlIiwiIiwxLCJtYXQtdGFiLWJvZHktY29udGVudCJdLFsiY29udGVudCIsIiJdLFsibWF0VGFiQm9keUhvc3QiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJAdHJhbnNsYXRlVGFiLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25UcmFuc2xhdGVUYWJTdGFydGVkKG8pfSkoIkB0cmFuc2xhdGVUYWIuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLm5leHQobyl9KSxFKDIsZFJlLDAsMCwibmctdGVtcGxhdGUiLDIpLHYoKSksMiZlJiZiKCJAdHJhbnNsYXRlVGFiIix0bygzLGhSZSxpLl9wb3NpdGlvbixIbigxLHBSZSxpLmFuaW1hdGlvbkR1cmF0aW9uKSkpfSxkZXBlbmRlbmNpZXM6W1BSZV0sc3R5bGVzOlsnLm1hdC10YWItYm9keS1jb250ZW50e2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQgLm1hdC10YWItYm9keS1jb250ZW50e292ZXJmbG93OmhpZGRlbn0ubWF0LXRhYi1ib2R5LWNvbnRlbnRbc3R5bGUqPSJ2aXNpYmlsaXR5OiBoaWRkZW4iXXtkaXNwbGF5Om5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbSVJlLnRyYW5zbGF0ZVRhYl19fSksbn0pKCksVGVlPW5ldyBzZSgiTUFUX1RBQlNfQ09ORklHIiksT1JlPWdvKGNsYXNze30pLERlZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT1Jle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5lbGVtZW50UmVmPWV9Zm9jdXMoKXt0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfWdldE9mZnNldExlZnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdH1nZXRPZmZzZXRXaWR0aCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih6ZSgiYXJpYS1kaXNhYmxlZCIsISFpLmRpc2FibGVkKSxhdCgibWF0LXRhYi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx5ZWU9TnMoe3Bhc3NpdmU6ITB9KSxOUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl92aWV3cG9ydFJ1bGVyPXIsdGhpcy5fZGlyPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hbmltYXRpb25Nb2RlPWwsdGhpcy5fc2Nyb2xsRGlzdGFuY2U9MCx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFRlLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITEsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPSEwLHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITAsdGhpcy5fc3RvcFNjcm9sbGluZz1uZXcgVGUsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD0wLHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4PW5ldyBHLHRoaXMuaW5kZXhGb2N1c2VkPW5ldyBHLHMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsaShlLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbGVhdmUiKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N0b3BJbnRlcnZhbCgpfSl9KX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBzZWxlY3RlZEluZGV4KCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXh9c2V0IHNlbGVjdGVkSW5kZXgoZSl7ZT1QaShlKSx0aGlzLl9zZWxlY3RlZEluZGV4IT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQ9ITAsdGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2tleU1hbmFnZXImJnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSl9bmdBZnRlclZpZXdJbml0KCl7bGkodGhpcy5fcHJldmlvdXNQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiKX0pLGxpKHRoaXMuX25leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwidG91Y2hzdGFydCIseWVlKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7bGV0IGU9dGhpcy5fZGlyP3RoaXMuX2Rpci5jaGFuZ2U6anQoImx0ciIpLGk9dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTUwKSxyPSgpPT57dGhpcy51cGRhdGVQYWdpbmF0aW9uKCksdGhpcy5fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl9O3RoaXMuX2tleU1hbmFnZXI9bmV3IEFfKHRoaXMuX2l0ZW1zKS53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKS53aXRoSG9tZUFuZEVuZCgpLndpdGhXcmFwKCksdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEh0KDEpKS5zdWJzY3JpYmUociksdW4oZSxpLHRoaXMuX2l0ZW1zLmNoYW5nZXMsdGhpcy5faXRlbXNSZXNpemVkKCkpLnBpcGUob3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKHRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fc2Nyb2xsRGlzdGFuY2UpKSxyKCl9KX0pLHRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKSl9KSx0aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShvPT57dGhpcy5pbmRleEZvY3VzZWQuZW1pdChvKSx0aGlzLl9zZXRUYWJGb2N1cyhvKX0pfV9pdGVtc1Jlc2l6ZWQoKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXI/YW86dGhpcy5faXRlbXMuY2hhbmdlcy5waXBlKFZuKHRoaXMuX2l0ZW1zKSx2aShlPT5uZXcgUXQoaT0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57bGV0IHI9bmV3IFJlc2l6ZU9ic2VydmVyKG89PmkubmV4dChvKSk7cmV0dXJuIGUuZm9yRWFjaChvPT5yLm9ic2VydmUoby5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpKSwoKT0+e3IuZGlzY29ubmVjdCgpfX0pKSksQ2EoMSksSGUoZT0+ZS5zb21lKGk9PmkuY29udGVudFJlY3Qud2lkdGg+MCYmaS5jb250ZW50UmVjdC5oZWlnaHQ+MCkpKX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXt0aGlzLl90YWJMYWJlbENvdW50IT10aGlzLl9pdGVtcy5sZW5ndGgmJih0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl90YWJMYWJlbENvdW50PXRoaXMuX2l0ZW1zLmxlbmd0aCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2VsZWN0ZWRJbmRleENoYW5nZWQmJih0aGlzLl9zY3JvbGxUb0xhYmVsKHRoaXMuX3NlbGVjdGVkSW5kZXgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSksdGhpcy5fc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkJiYodGhpcy5fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nLmNvbXBsZXRlKCl9X2hhbmRsZUtleWRvd24oZSl7aWYoIU1yKGUpKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAzMjp0aGlzLmZvY3VzSW5kZXghPT10aGlzLnNlbGVjdGVkSW5kZXgmJih0aGlzLnNlbGVjdEZvY3VzZWRJbmRleC5lbWl0KHRoaXMuZm9jdXNJbmRleCksdGhpcy5faXRlbVNlbGVjdGVkKGUpKTticmVhaztkZWZhdWx0OnRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpfX1fb25Db250ZW50Q2hhbmdlcygpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtlIT09dGhpcy5fY3VycmVudFRleHRDb250ZW50JiYodGhpcy5fY3VycmVudFRleHRDb250ZW50PWV8fCIiLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpLHRoaXMuX2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKSx0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpfWdldCBmb2N1c0luZGV4KCl7cmV0dXJuIHRoaXMuX2tleU1hbmFnZXI/dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXg6MH1zZXQgZm9jdXNJbmRleChlKXshdGhpcy5faXNWYWxpZEluZGV4KGUpfHx0aGlzLmZvY3VzSW5kZXg9PT1lfHwhdGhpcy5fa2V5TWFuYWdlcnx8dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKGUpfV9pc1ZhbGlkSW5kZXgoZSl7aWYoIXRoaXMuX2l0ZW1zKXJldHVybiEwO2xldCBpPXRoaXMuX2l0ZW1zP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKVtlXTpudWxsO3JldHVybiEhaSYmIWkuZGlzYWJsZWR9X3NldFRhYkZvY3VzKGUpe2lmKHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX3Njcm9sbFRvTGFiZWwoZSksdGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aCl7dGhpcy5faXRlbXMudG9BcnJheSgpW2VdLmZvY3VzKCk7bGV0IGk9dGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50O2kuc2Nyb2xsTGVmdD0ibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/MDppLnNjcm9sbFdpZHRoLWkub2Zmc2V0V2lkdGh9fV9nZXRMYXlvdXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1fdXBkYXRlVGFiU2Nyb2xsUG9zaXRpb24oKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgZT10aGlzLnNjcm9sbERpc3RhbmNlLGk9Imx0ciI9PT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8tZTplO3RoaXMuX3RhYkxpc3QubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGkpfXB4KWAsKHRoaXMuX3BsYXRmb3JtLlRSSURFTlR8fHRoaXMuX3BsYXRmb3JtLkVER0UpJiYodGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ9MCl9Z2V0IHNjcm9sbERpc3RhbmNlKCl7cmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlfXNldCBzY3JvbGxEaXN0YW5jZShlKXt0aGlzLl9zY3JvbGxUbyhlKX1fc2Nyb2xsSGVhZGVyKGUpe3JldHVybiB0aGlzLl9zY3JvbGxUbyh0aGlzLl9zY3JvbGxEaXN0YW5jZSsoImJlZm9yZSI9PWU/LTE6MSkqdGhpcy5fdGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLzMpfV9oYW5kbGVQYWdpbmF0b3JDbGljayhlKXt0aGlzLl9zdG9wSW50ZXJ2YWwoKSx0aGlzLl9zY3JvbGxIZWFkZXIoZSl9X3Njcm9sbFRvTGFiZWwoZSl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm47bGV0IGk9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW2VdOm51bGw7aWYoIWkpcmV0dXJuO2xldCBhLGwscj10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgse29mZnNldExlZnQ6byxvZmZzZXRXaWR0aDpzfT1pLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsibHRyIj09dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk/KGE9byxsPWErcyk6KGw9dGhpcy5fdGFiTGlzdElubmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgtbyxhPWwtcyk7bGV0IGM9dGhpcy5zY3JvbGxEaXN0YW5jZSx1PXRoaXMuc2Nyb2xsRGlzdGFuY2UrcjthPGM/dGhpcy5zY3JvbGxEaXN0YW5jZS09Yy1hKzYwOmw+dSYmKHRoaXMuc2Nyb2xsRGlzdGFuY2UrPWwtdSs2MCl9X2NoZWNrUGFnaW5hdGlvbkVuYWJsZWQoKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ITE7ZWxzZXtsZXQgZT10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aD50aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7ZXx8KHRoaXMuc2Nyb2xsRGlzdGFuY2U9MCksZSE9PXRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHMmJnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX3Nob3dQYWdpbmF0aW9uQ29udHJvbHM9ZX19X2NoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKXt0aGlzLmRpc2FibGVQYWdpbmF0aW9uP3RoaXMuX2Rpc2FibGVTY3JvbGxBZnRlcj10aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPSEwOih0aGlzLl9kaXNhYmxlU2Nyb2xsQmVmb3JlPTA9PXRoaXMuc2Nyb2xsRGlzdGFuY2UsdGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuc2Nyb2xsRGlzdGFuY2U9PXRoaXMuX2dldE1heFNjcm9sbERpc3RhbmNlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpe3JldHVybiB0aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aC10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDB9X2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpe2xldCBlPXRoaXMuX2l0ZW1zJiZ0aGlzLl9pdGVtcy5sZW5ndGg/dGhpcy5faXRlbXMudG9BcnJheSgpW3RoaXMuc2VsZWN0ZWRJbmRleF06bnVsbCxpPWU/ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ6bnVsbDtpP3RoaXMuX2lua0Jhci5hbGlnblRvRWxlbWVudChpKTp0aGlzLl9pbmtCYXIuaGlkZSgpfV9zdG9wSW50ZXJ2YWwoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nLm5leHQoKX1faGFuZGxlUGFnaW5hdG9yUHJlc3MoZSxpKXtpJiZudWxsIT1pLmJ1dHRvbiYmMCE9PWkuYnV0dG9ufHwodGhpcy5fc3RvcEludGVydmFsKCkseGEoNjUwLDEwMCkucGlwZShvdCh1bih0aGlzLl9zdG9wU2Nyb2xsaW5nLHRoaXMuX2Rlc3Ryb3llZCkpKS5zdWJzY3JpYmUoKCk9PntsZXR7bWF4U2Nyb2xsRGlzdGFuY2U6cixkaXN0YW5jZTpvfT10aGlzLl9zY3JvbGxIZWFkZXIoZSk7KDA9PT1vfHxvPj1yKSYmdGhpcy5fc3RvcEludGVydmFsKCl9KSl9X3Njcm9sbFRvKGUpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJue21heFNjcm9sbERpc3RhbmNlOjAsZGlzdGFuY2U6MH07bGV0IGk9dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2U9TWF0aC5tYXgoMCxNYXRoLm1pbihpLGUpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQ9ITAsdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHttYXhTY3JvbGxEaXN0YW5jZTppLGRpc3RhbmNlOnRoaXMuX3Njcm9sbERpc3RhbmNlfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhubiksdyhkYSksdyhpciw4KSx3KHB0KSx3KHVpKSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVQYWdpbmF0aW9uOiJkaXNhYmxlUGFnaW5hdGlvbiJ9fSksbn0pKCksTFJlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOUmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoZSxpLHIsbyxzLGEsbCksdGhpcy5fZGlzYWJsZVJpcHBsZT0hMX1nZXQgZGlzYWJsZVJpcHBsZSgpe3JldHVybiB0aGlzLl9kaXNhYmxlUmlwcGxlfXNldCBkaXNhYmxlUmlwcGxlKGUpe3RoaXMuX2Rpc2FibGVSaXBwbGU9V3QoZSl9X2l0ZW1TZWxlY3RlZChlKXtlLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcobm4pLHcoZGEpLHcoaXIsOCksdyhwdCksdyh1aSksdyhMaSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLEJSZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTFJle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGUsaSxyLG8scyxhLGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KGRhKSx3KGlyLDgpLHcocHQpLHcodWkpLHcoTGksOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItaGVhZGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsRGVlLDQpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2l0ZW1zPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQodmVlLDcpLGx0KGZSZSw3KSxsdChtUmUsNyksbHQoZ1JlLDcpLGx0KF9SZSw1KSxsdCh2UmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2lua0Jhcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdENvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdD1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5fdGFiTGlzdElubmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9uZXh0UGFnaW5hdG9yPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9wcmV2aW91c1BhZ2luYXRvcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1oZWFkZXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCIsaS5fc2hvd1BhZ2luYXRpb25Db250cm9scykoIm1hdC10YWItaGVhZGVyLXJ0bCIsInJ0bCI9PWkuX2dldExheW91dERpcmVjdGlvbigpKX0saW5wdXRzOntzZWxlY3RlZEluZGV4OiJzZWxlY3RlZEluZGV4In0sb3V0cHV0czp7c2VsZWN0Rm9jdXNlZEluZGV4OiJzZWxlY3RGb2N1c2VkSW5kZXgiLGluZGV4Rm9jdXNlZDoiaW5kZXhGb2N1c2VkIn0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6eGVlLGRlY2xzOjE0LHZhcnM6MTAsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJtYXQtcmlwcGxlIiwiIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiIsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsImNsaWNrIiwibW91c2Vkb3duIiwidG91Y2hlbmQiXSxbInByZXZpb3VzUGFnaW5hdG9yIiwiIl0sWzEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRhaW5lciIsMywia2V5ZG93biJdLFsidGFiTGlzdENvbnRhaW5lciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLDEsIm1hdC10YWItbGlzdCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbInRhYkxpc3QiLCIiXSxbMSwibWF0LXRhYi1sYWJlbHMiXSxbInRhYkxpc3RJbm5lciIsIiJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciIsIm1hdC1lbGV2YXRpb24tejQiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiLCJtb3VzZWRvd24iLCJjbGljayIsInRvdWNoZW5kIl0sWyJuZXh0UGFnaW5hdG9yIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koKSxnKDAsImJ1dHRvbiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yQ2xpY2soImJlZm9yZSIpfSkoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJiZWZvcmUiLG8pfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLE4oMiwiZGl2IiwyKSx2KCksZygzLCJkaXYiLDMsNCksUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSxnKDUsImRpdiIsNSw2KSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Db250ZW50Q2hhbmdlcygpfSksZyg3LCJkaXYiLDcsOCksTm4oOSksdigpLE4oMTAsIm1hdC1pbmstYmFyIiksdigpKCksZygxMSwiYnV0dG9uIiw5LDEwKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JQcmVzcygiYWZ0ZXIiLG8pfSkoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYWZ0ZXIiKX0pKCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc3RvcEludGVydmFsKCl9KSxOKDEzLCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmUpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxpLmRpc2FibGVSaXBwbGUpKCJkaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZXx8bnVsbCkseCg1KSxhdCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSx4KDYpLGF0KCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXIpLGIoIm1hdFJpcHBsZURpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQWZ0ZXJ8fG51bGwpKX0sZGVwZW5kZW5jaWVzOltlcyxTXyx2ZWVdLHN0eWxlczpbIi5tYXQtdGFiLWhlYWRlcntkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtc2hyaW5rOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDozMnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTt0b3VjaC1hY3Rpb246bm9uZTtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNvbnRyb2xzLWVuYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257ZGlzcGxheTpmbGV4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVye3BhZGRpbmctbGVmdDo0cHh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoLTEzNWRlZyl9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUsLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1yaWdodDo0cHh9Lm1hdC10YWItaGVhZGVyLXJ0bCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDoycHggMnB4IDAgMDtoZWlnaHQ6OHB4O3dpZHRoOjhweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHtib3gtc2hhZG93Om5vbmU7Y3Vyc29yOmRlZmF1bHR9Lm1hdC10YWItbGlzdHtmbGV4LWdyb3c6MTtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2hlaWdodDoycHg7dHJhbnNpdGlvbjo1MDBtcyBjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSl9Lm1hdC1pbmstYmFyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtaW5rLWJhcntib3R0b206YXV0bzt0b3A6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtaW5rLWJhcntvdXRsaW5lOnNvbGlkIDJweDtoZWlnaHQ6MH0ubWF0LXRhYi1sYWJlbHN7ZGlzcGxheTpmbGV4fVttYXQtYWxpZ24tdGFicz1jZW50ZXJdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bbWF0LWFsaWduLXRhYnM9ZW5kXT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWxze2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjF9Lm1hdC10YWItbGlzdC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWxhYmVse2hlaWdodDo0OHB4O3BhZGRpbmc6MCAyNHB4O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5Oi42O21pbi13aWR0aDoxNjBweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXRhYi1sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC10YWItbGFiZWw6Zm9jdXM6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtvcGFjaXR5OjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWR7b3BhY2l0eTouNX0ubWF0LXRhYi1sYWJlbCAubWF0LXRhYi1sYWJlbC1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWx7b3BhY2l0eToxfS5tYXQtdGFiLWxhYmVsOjpiZWZvcmV7bWFyZ2luOjVweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjcycHh9fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFZSZT0wLEhSZT1wcyhMcyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksInByaW1hcnkiKSxVUmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEhSZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2FuaW1hdGlvbk1vZGU9byx0aGlzLl90YWJzPW5ldyBjbCx0aGlzLl9pbmRleFRvU2VsZWN0PTAsdGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1udWxsLHRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0PTAsdGhpcy5fdGFic1N1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9keW5hbWljSGVpZ2h0PSExLHRoaXMuX3NlbGVjdGVkSW5kZXg9bnVsbCx0aGlzLmhlYWRlclBvc2l0aW9uPSJhYm92ZSIsdGhpcy5fZGlzYWJsZVBhZ2luYXRpb249ITEsdGhpcy5fcHJlc2VydmVDb250ZW50PSExLHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZT1uZXcgRyx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBHLHRoaXMuYW5pbWF0aW9uRG9uZT1uZXcgRyx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLl9ncm91cElkPVZSZSsrLHRoaXMuYW5pbWF0aW9uRHVyYXRpb249ciYmci5hbmltYXRpb25EdXJhdGlvbj9yLmFuaW1hdGlvbkR1cmF0aW9uOiI1MDBtcyIsdGhpcy5kaXNhYmxlUGFnaW5hdGlvbj0hKCFyfHxudWxsPT1yLmRpc2FibGVQYWdpbmF0aW9uKSYmci5kaXNhYmxlUGFnaW5hdGlvbix0aGlzLmR5bmFtaWNIZWlnaHQ9ISghcnx8bnVsbD09ci5keW5hbWljSGVpZ2h0KSYmci5keW5hbWljSGVpZ2h0LHRoaXMuY29udGVudFRhYkluZGV4PXI/LmNvbnRlbnRUYWJJbmRleD8/bnVsbCx0aGlzLnByZXNlcnZlQ29udGVudD0hIXI/LnByZXNlcnZlQ29udGVudH1nZXQgZHluYW1pY0hlaWdodCgpe3JldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0fXNldCBkeW5hbWljSGVpZ2h0KGUpe3RoaXMuX2R5bmFtaWNIZWlnaHQ9V3QoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXt0aGlzLl9pbmRleFRvU2VsZWN0PVBpKGUsbnVsbCl9Z2V0IGFuaW1hdGlvbkR1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGlvbkR1cmF0aW9ufXNldCBhbmltYXRpb25EdXJhdGlvbihlKXt0aGlzLl9hbmltYXRpb25EdXJhdGlvbj0vXlxkKyQvLnRlc3QoZSsiIik/ZSsibXMiOmV9Z2V0IGNvbnRlbnRUYWJJbmRleCgpe3JldHVybiB0aGlzLl9jb250ZW50VGFiSW5kZXh9c2V0IGNvbnRlbnRUYWJJbmRleChlKXt0aGlzLl9jb250ZW50VGFiSW5kZXg9UGkoZSxudWxsKX1nZXQgZGlzYWJsZVBhZ2luYXRpb24oKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVBhZ2luYXRpb259c2V0IGRpc2FibGVQYWdpbmF0aW9uKGUpe3RoaXMuX2Rpc2FibGVQYWdpbmF0aW9uPVd0KGUpfWdldCBwcmVzZXJ2ZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcHJlc2VydmVDb250ZW50fXNldCBwcmVzZXJ2ZUNvbnRlbnQoZSl7dGhpcy5fcHJlc2VydmVDb250ZW50PVd0KGUpfWdldCBiYWNrZ3JvdW5kQ29sb3IoKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbG9yfXNldCBiYWNrZ3JvdW5kQ29sb3IoZSl7bGV0IGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2kuY2xhc3NMaXN0LnJlbW92ZShgbWF0LWJhY2tncm91bmQtJHt0aGlzLmJhY2tncm91bmRDb2xvcn1gKSxlJiZpLmNsYXNzTGlzdC5hZGQoYG1hdC1iYWNrZ3JvdW5kLSR7ZX1gKSx0aGlzLl9iYWNrZ3JvdW5kQ29sb3I9ZX1uZ0FmdGVyQ29udGVudENoZWNrZWQoKXtsZXQgZT10aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX2NsYW1wVGFiSW5kZXgodGhpcy5faW5kZXhUb1NlbGVjdCk7aWYodGhpcy5fc2VsZWN0ZWRJbmRleCE9ZSl7bGV0IGk9bnVsbD09dGhpcy5fc2VsZWN0ZWRJbmRleDtpZighaSl7dGhpcy5zZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKTtsZXQgcj10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O3Iuc3R5bGUubWluSGVpZ2h0PXIuY2xpZW50SGVpZ2h0KyJweCJ9UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX3RhYnMuZm9yRWFjaCgocixvKT0+ci5pc0FjdGl2ZT1vPT09ZSksaXx8KHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KGUpLHRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluSGVpZ2h0PSIiKX0pfXRoaXMuX3RhYnMuZm9yRWFjaCgoaSxyKT0+e2kucG9zaXRpb249ci1lLG51bGwhPXRoaXMuX3NlbGVjdGVkSW5kZXgmJjA9PWkucG9zaXRpb24mJiFpLm9yaWdpbiYmKGkub3JpZ2luPWUtdGhpcy5fc2VsZWN0ZWRJbmRleCl9KSx0aGlzLl9zZWxlY3RlZEluZGV4IT09ZSYmKHRoaXMuX3NlbGVjdGVkSW5kZXg9ZSx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3N1YnNjcmliZVRvQWxsVGFiQ2hhbmdlcygpLHRoaXMuX3N1YnNjcmliZVRvVGFiTGFiZWxzKCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbj10aGlzLl90YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57bGV0IGU9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZihlPT09dGhpcy5fc2VsZWN0ZWRJbmRleCl7bGV0IHIsaT10aGlzLl90YWJzLnRvQXJyYXkoKTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKylpZihpW29dLmlzQWN0aXZlKXt0aGlzLl9pbmRleFRvU2VsZWN0PXRoaXMuX3NlbGVjdGVkSW5kZXg9byx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwscj1pW29dO2JyZWFrfSFyJiZpW2VdJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aVtlXS5pc0FjdGl2ZT0hMCx0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpfSl9dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KX1fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCl7dGhpcy5fYWxsVGFicy5jaGFuZ2VzLnBpcGUoVm4odGhpcy5fYWxsVGFicykpLnN1YnNjcmliZShlPT57dGhpcy5fdGFicy5yZXNldChlLmZpbHRlcihpPT5pLl9jbG9zZXN0VGFiR3JvdXA9PT10aGlzfHwhaS5fY2xvc2VzdFRhYkdyb3VwKSksdGhpcy5fdGFicy5ub3RpZnlPbkNoYW5nZXMoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdGFicy5kZXN0cm95KCksdGhpcy5fdGFic1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cmVhbGlnbklua0Jhcigpe3RoaXMuX3RhYkhlYWRlciYmdGhpcy5fdGFiSGVhZGVyLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX11cGRhdGVQYWdpbmF0aW9uKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIudXBkYXRlUGFnaW5hdGlvbigpfWZvY3VzVGFiKGUpe2xldCBpPXRoaXMuX3RhYkhlYWRlcjtpJiYoaS5mb2N1c0luZGV4PWUpfV9mb2N1c0NoYW5nZWQoZSl7dGhpcy5fbGFzdEZvY3VzZWRUYWJJbmRleD1lLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBjbGFzc3t9O3JldHVybiBpLmluZGV4PWUsdGhpcy5fdGFicyYmdGhpcy5fdGFicy5sZW5ndGgmJihpLnRhYj10aGlzLl90YWJzLnRvQXJyYXkoKVtlXSksaX1fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKXt0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbiYmdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbj11biguLi50aGlzLl90YWJzLm1hcChlPT5lLl9zdGF0ZUNoYW5nZXMpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fY2xhbXBUYWJJbmRleChlKXtyZXR1cm4gTWF0aC5taW4odGhpcy5fdGFicy5sZW5ndGgtMSxNYXRoLm1heChlfHwwLDApKX1fZ2V0VGFiTGFiZWxJZChlKXtyZXR1cm5gbWF0LXRhYi1sYWJlbC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9nZXRUYWJDb250ZW50SWQoZSl7cmV0dXJuYG1hdC10YWItY29udGVudC0ke3RoaXMuX2dyb3VwSWR9LSR7ZX1gfV9zZXRUYWJCb2R5V3JhcHBlckhlaWdodChlKXtpZighdGhpcy5fZHluYW1pY0hlaWdodHx8IXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KXJldHVybjtsZXQgaT10aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O2kuc3R5bGUuaGVpZ2h0PXRoaXMuX3RhYkJvZHlXcmFwcGVySGVpZ2h0KyJweCIsdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQmJihpLnN0eWxlLmhlaWdodD1lKyJweCIpfV9yZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpe2xldCBlPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9ZS5jbGllbnRIZWlnaHQsZS5zdHlsZS5oZWlnaHQ9IiIsdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKX1faGFuZGxlQ2xpY2soZSxpLHIpe2UuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVkSW5kZXg9aS5mb2N1c0luZGV4PXIpfV9nZXRUYWJJbmRleChlLGkpe3JldHVybiBlLmRpc2FibGVkP251bGw6aT09PSh0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4Pz90aGlzLnNlbGVjdGVkSW5kZXgpPzA6LTF9X3RhYkZvY3VzQ2hhbmdlZChlLGkpe2UmJiJtb3VzZSIhPT1lJiYidG91Y2giIT09ZSYmKHRoaXMuX3RhYkhlYWRlci5mb2N1c0luZGV4PWkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2R5bmFtaWNIZWlnaHQ6ImR5bmFtaWNIZWlnaHQiLHNlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgiLGhlYWRlclBvc2l0aW9uOiJoZWFkZXJQb3NpdGlvbiIsYW5pbWF0aW9uRHVyYXRpb246ImFuaW1hdGlvbkR1cmF0aW9uIixjb250ZW50VGFiSW5kZXg6ImNvbnRlbnRUYWJJbmRleCIsZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIixwcmVzZXJ2ZUNvbnRlbnQ6InByZXNlcnZlQ29udGVudCIsYmFja2dyb3VuZENvbG9yOiJiYWNrZ3JvdW5kQ29sb3IifSxvdXRwdXRzOntzZWxlY3RlZEluZGV4Q2hhbmdlOiJzZWxlY3RlZEluZGV4Q2hhbmdlIixmb2N1c0NoYW5nZToiZm9jdXNDaGFuZ2UiLGFuaW1hdGlvbkRvbmU6ImFuaW1hdGlvbkRvbmUiLHNlbGVjdGVkVGFiQ2hhbmdlOiJzZWxlY3RlZFRhYkNoYW5nZSJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSxoST0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVVJle2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSx3KG5uKSx3KFRlZSw4KSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdGFiLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJk5pKHIsYXcsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYWxsVGFicz1vKX19LHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHlSZSw1KSxsdChiUmUsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3RhYkJvZHlXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJIZWFkZXI9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItZ3JvdXAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmYXQoIm1hdC10YWItZ3JvdXAtZHluYW1pYy1oZWlnaHQiLGkuZHluYW1pY0hlaWdodCkoIm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIiwiYmVsb3ciPT09aS5oZWFkZXJQb3NpdGlvbil9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIn0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6U2VlLHVzZUV4aXN0aW5nOm59XSksdHRdLGRlY2xzOjYsdmFyczo3LGNvbnN0czpbWzMsInNlbGVjdGVkSW5kZXgiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJpbmRleEZvY3VzZWQiLCJzZWxlY3RGb2N1c2VkSW5kZXgiXSxbInRhYkhlYWRlciIsIiJdLFsiY2xhc3MiLCJtYXQtdGFiLWxhYmVsIG1hdC1mb2N1cy1pbmRpY2F0b3IiLCJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDMsImlkIiwibWF0LXRhYi1sYWJlbC1hY3RpdmUiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtYXQtdGFiLWJvZHktd3JhcHBlciJdLFsidGFiQm9keVdyYXBwZXIiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMywiaWQiLCJtYXQtdGFiLWJvZHktYWN0aXZlIiwibmdDbGFzcyIsImNvbnRlbnQiLCJwb3NpdGlvbiIsIm9yaWdpbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwicHJlc2VydmVDb250ZW50IiwiX29uQ2VudGVyZWQiLCJfb25DZW50ZXJpbmciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsInRhYiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiIsIm1hdC1yaXBwbGUiLCIiLCJjZGtNb25pdG9yRWxlbWVudEZvY3VzIiwiIiwxLCJtYXQtdGFiLWxhYmVsIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywiaWQiLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtYXRSaXBwbGVEaXNhYmxlZCIsImNsaWNrIiwiY2RrRm9jdXNDaGFuZ2UiXSxbMSwibWF0LXRhYi1sYWJlbC1jb250ZW50Il0sWzMsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidGFiVGV4dExhYmVsIiwiIl0sWzMsImNka1BvcnRhbE91dGxldCJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm5nQ2xhc3MiLCJjb250ZW50IiwicG9zaXRpb24iLCJvcmlnaW4iLCJhbmltYXRpb25EdXJhdGlvbiIsInByZXNlcnZlQ29udGVudCIsIl9vbkNlbnRlcmVkIiwiX29uQ2VudGVyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtYXQtdGFiLWhlYWRlciIsMCwxKSxQKCJpbmRleEZvY3VzZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9mb2N1c0NoYW5nZWQobyl9KSgic2VsZWN0Rm9jdXNlZEluZGV4IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3RlZEluZGV4PW99KSxFKDIsTVJlLDUsMTUsImRpdiIsMiksdigpLGcoMywiZGl2IiwzLDQpLEUoNSxTUmUsMSwxMSwibWF0LXRhYi1ib2R5Iiw1KSx2KCkpLDImZSYmKGIoInNlbGVjdGVkSW5kZXgiLGkuc2VsZWN0ZWRJbmRleHx8MCkoImRpc2FibGVSaXBwbGUiLGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVQYWdpbmF0aW9uIixpLmRpc2FibGVQYWdpbmF0aW9uKSx4KDIpLGIoIm5nRm9yT2YiLGkuX3RhYnMpLHgoMSksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkseCgyKSxiKCJuZ0Zvck9mIixpLl90YWJzKSl9LGRlcGVuZGVuY2llczpbUG4seW4sWGUsQnMsZXMsJFosRGVlLEVlZSxCUmVdLHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCV9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWJvZHktd3JhcHBlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxmST0ocXAoTHMoZ28oY2xhc3N7fSkpKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZG4sd2MseGMsenAsUF8sZG5dfSksbn0pKCkpO2Z1bmN0aW9uIHpSZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25BY3RpdmVQbHVnaW5TZWxlY3Rpb24ocixvLmlkKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQ7emUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSx4KDEpLHFlKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIGpSZShuLHQpezEmbiYmKGcoMCwibWF0LXRhYiIsMyksRSgxLHpSZSwyLDIsIm5nLXRlbXBsYXRlIiw0KSx2KCkpLDImbiYmYigiZGlzYWJsZWQiLCF0LiRpbXBsaWNpdC5lbmFibGVkKX1mdW5jdGlvbiBHUmUobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDkpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx6ZSgiZGF0YS1wbHVnaW4taWQiLGUuaWQpLHgoMSkscWUoIiAiLGUudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gV1JlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDYpKDEsIm1hdC1sYWJlbCIpLEQoMiwiSW5hY3RpdmUiKSx2KCksZygzLCJtYXQtc2VsZWN0Iiw3KSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQocikpfSksRSg0LEdSZSwyLDMsIm1hdC1vcHRpb24iLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksYigidmFsdWUiLGUuc2VsZWN0ZWRQbHVnaW4pLHgoMSksYigibmdGb3JPZiIsZS5kaXNhYmxlZFBsdWdpbnMpfX12YXIgSWVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgR31nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiw0LCJuZ0lmIl0sWzMsImRpc2FibGVkIl0sWyJtYXQtdGFiLWxhYmVsIiwiIl0sWzEsInBsdWdpbi1uYW1lIiwzLCJjbGljayJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC10YWItZ3JvdXAiLDApLEUoMSxqUmUsMiwxLCJtYXQtdGFiIiwxKSx2KCksRSgyLFdSZSw1LDIsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoYigic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSx4KDEpLGIoIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucykseCgxKSxiKCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2hJLE1lZSxhdyxEdSx6XyxKcCx1YSx5bixYZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMDttYXJnaW4tdG9wOjVweDt3aWR0aDoxMzBweH1tYXQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYWN0aXZlLXBsdWdpbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59LnBsdWdpbi1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCAxMnB4O3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saXN0IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmt7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWwubWF0LXRhYi1sYWJlbC1hY3RpdmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGluay5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtvcGFjaXR5OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWRpc2FibGVke2Rpc3BsYXk6bm9uZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItbGlzdCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0iXX0pLG59KSgpLFBlZT1ZKHNfLG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLFlSZT1ZKFBlZSxuPT5uLmZpbHRlcih0PT4hdC5lbmFibGVkKSksUmVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luJD10aGlzLnN0b3JlLnBpcGUoZm4oZHMpKSx0aGlzLnBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZShmbihQZWUpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKGZuKFlSZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX3Uoe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksUCgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJhY3RpdmVQbHVnaW5zIixXKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVygyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixXKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltJZWUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFFSZT1ZKHNfLGRzLChuLHQpPT4hKCF0fHwhblt0XSkmJm5bdF0uZGlzYWJsZV9yZWxvYWQpLE9lZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlbG9hZERpc2FibGVkJD10aGlzLnN0b3JlLnNlbGVjdChRUmUpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KGJLKS5waXBlKHNyKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxCKChbaSxyXSk9PiFyJiZpPT09RWUuTE9BRElORykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyl9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2god2woKSl9Z2V0UmVsb2FkVGl0bGUoZSl7cmV0dXJuIGU/YExhc3QgVXBkYXRlZDogJHtlfWA6IkxvYWRpbmcuLi4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1yZWxvYWQiXV0sZGVjbHM6Nix2YXJzOjEzLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDEsInJlbG9hZC1idXR0b24iLDMsInRpdGxlIiwiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInJlZnJlc2hfMjRweCIsMSwicmVmcmVzaC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRyaWdnZXJSZWxvYWQoKX0pLGooMSwiYXN5bmMiKSxqKDIsImRhdGUiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLE4oNSwibWF0LWljb24iLDEpLHYoKSksMiZlJiYoYXQoImxvYWRpbmciLFcoMSw0LGkuaXNSZWxvYWRpbmckKSksYigidGl0bGUiLGkuZ2V0UmVsb2FkVGl0bGUobmYoMiw2LFcoMyw5LGkubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixXKDQsMTEsaS5yZWxvYWREaXNhYmxlZCQpKSl9LGRlcGVuZGVuY2llczpbJG4sWm4sZnQsVTBdLHN0eWxlczpbIi5yZWxvYWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlZnJlc2gtaWNvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnJlbG9hZC1idXR0b24ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9Il19KSxufSkoKSxrZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczo5LHZhcnM6MCxjb25zdHM6W1sxLCJicmFuZCJdLFsxLCJwbHVnaW5zIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIiwicmVsIiwibm9vcGVuZXIgbm9yZWZlcnJlciIsInRhcmdldCIsIl9ibGFuayIsImFyaWEtbGFiZWwiLCJIZWxwIiwxLCJyZWFkbWUiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWF0LXRvb2xiYXIiKSgxLCJzcGFuIiwwKSxEKDIsIlRlbnNvckJvYXJkIiksdigpLE4oMywicGx1Z2luLXNlbGVjdG9yIiwxKSg0LCJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUiKSg1LCJhcHAtaGVhZGVyLXJlbG9hZCIpKDYsInNldHRpbmdzLWJ1dHRvbiIpLGcoNywiYSIsMiksTig4LCJtYXQtaWNvbiIsMyksdigpKCkpfSxkZXBlbmRlbmNpZXM6W0ZBLFpuLGVlZSxkZWUsX2VlLFJlZSxPZWVdLHN0eWxlczpbIm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlYWRtZVtfbmdjb250ZW50LSVDT01QJV0sIGFwcC1oZWFkZXItcmVsb2FkW19uZ2NvbnRlbnQtJUNPTVAlXSwgc2V0dGluZ3MtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMCBhdXRvfS5icmFuZFtfbmdjb250ZW50LSVDT01QJV17bGV0dGVyLXNwYWNpbmc6LTAuMDI1ZW07bWFyZ2luLWxlZnQ6MTBweDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmb250LXNpemU6MTRweDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Il19KSxufSkoKSwkUmVfc2V0RG9jdW1lbnRUaXRsZT1mdW5jdGlvbihuKXtkb2N1bWVudC50aXRsZT1ufSxGZWU9KCgpPT57Y2xhc3MgbntuZ09uQ2hhbmdlcyhlKXtlLnRpdGxlJiYkUmVfc2V0RG9jdW1lbnRUaXRsZShlLnRpdGxlLmN1cnJlbnRWYWx1ZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUtY29tcG9uZW50Il1dLGlucHV0czp7dGl0bGU6InRpdGxlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTmVlPSJUZW5zb3JCb2FyZCIsTGVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5jdXN0b21CcmFuZE5hbWU9aSx0aGlzLmdldEV4cGVyaW1lbnRJZCQ9dGhpcy5zdG9yZS5zZWxlY3QoJG8pLnBpcGUoQihyPT5yPy5bMF0pKSx0aGlzLmV4cGVyaW1lbnROYW1lJD10aGlzLmdldEV4cGVyaW1lbnRJZCQucGlwZShIZShCb29sZWFuKSxfbihyPT50aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOnJ9KSksQihyPT5yP3IubmFtZTpudWxsKSksdGhpcy50aXRsZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYkQpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QocHUpLHRoaXMuZXhwZXJpbWVudE5hbWUkKSxCKChbcixvLHNdKT0+e2xldCBhPXRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWU7cmV0dXJuIHIud2luZG93X3RpdGxlP3Iud2luZG93X3RpdGxlOm89PT1maS5FWFBFUklNRU5UJiZzP2Ake3N9IC0gJHthfWA6YX0pLFZuKHRoaXMuY3VzdG9tQnJhbmROYW1lfHxOZWUpLGRpKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KHBLLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwYWdlLXRpdGxlIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJwYWdlLXRpdGxlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoInRpdGxlIixXKDEsMSxpLnRpdGxlJCkpfSxkZXBlbmRlbmNpZXM6W0ZlZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmdldFBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUoZm4oJGYpKSx0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1wYWdpbmF0ZWQtdmlldy1zdG9yZSIpLnRmX3BhZ2luYXRlZF92aWV3fW5nT25Jbml0KCl7dGhpcy5nZXRQYWdlU2l6ZSQucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLGRpKCkpLnN1YnNjcmliZShlPT57dGhpcy5wYWdpbmF0ZWRWaWV3U3RvcmUuc2V0TGltaXQoZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZXR0aW5ncy1wb2x5bWVyLWludGVyb3AiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFZlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMudmNSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXdlYmFwcCJdXSxkZWNsczo5LHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiYXBwLWhlYWRlciIpLGcoMSwibWFpbiIpLE4oMiwicm91dGVyLW91dGxldCIpLHYoKSxOKDMsImFsZXJ0LXNuYWNrYmFyIikoNCwiaGFzaC1zdG9yYWdlIikoNSwicGFnZS10aXRsZSIpKDYsInNldHRpbmdzLXBvbHltZXItaW50ZXJvcCIpKDcsImRhcmstbW9kZS1zdXBwb3J0ZXIiKSg4LCJmZWF0dXJlLWZsYWctbW9kYWwtdHJpZ2dlciIpKX0sZGVwZW5kZW5jaWVzOltqJCxXJCxJSixxJCxYJCxrZWUsTGVlLEJlZV0sc3R5bGVzOlsiaHRtbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHlbX25nY29udGVudC0lQ09NUCVde2ZvbnQtZmFtaWx5OlJvYm90byxzYW5zLXNlcmlmO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MH1bX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1ZjVmNTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfWFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCAxcHggM3B4IDNweCByZ2JhKDAsMCwwLC4yNSk7ZmxleDowIDA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIGFwcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgyNTUsMjU1LDI1NSwuMSl9bWFpbltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30iXX0pLG59KSgpLEhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUTAsWDAsaGNdfSksbn0pKCksVWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSx6ZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6QXAsdXNlQ2xhc3M6VlF9XX0pLG59KSgpLGplZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsemVlXX0pLG59KSgpLEdlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksV2VlPXtpZDpXVCxuYW1lOiIiLHN0YXJ0X3RpbWU6MH0scjJlPXdyKHtleHBlcmltZW50TWFwOntbV2VlLmlkXTpXZWV9fSk7ZnVuY3Rpb24gcWVlKG4sdCl7cmV0dXJuIEhmKHtkYXRhOnIyZX0pKG4sdCl9dmFyIFllZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShGRCxxZWUpXX0pLG59KSgpLFhlZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsUmksSWxdfSksbn0pKCksUWVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxYZWVdfSksbn0pKCksS2VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxySSxOJCxSaSwkcCxIXyxTaSxBdV19KSxufSkoKTtmdW5jdGlvbiBvMmUoKXtyZXR1cm4gWShSQyxuPT4oe2F1dG9SZWxvYWQ6bn0pKX1mdW5jdGlvbiBzMmUoKXtyZXR1cm4gWShPQyxuPT4oe2F1dG9SZWxvYWRQZXJpb2RJbk1zOm59KSl9ZnVuY3Rpb24gYTJlKCl7cmV0dXJuIFkoJGYsbj0+KHtwYWdlU2l6ZTpufSkpfXZhciBtST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbUnIuZm9yRmVhdHVyZShmQSxuZWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcobzJlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKHMyZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhhMmUpLEtlZV19KSxufSkoKSxaZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1JpLFNpLGZJLHRlZSxJbCxlaCxrZSxNbCxtSV19KSxufSkoKSxKZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe2xldCByPWUuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKCIuL2ljb25fYnVuZGxlLnN2ZyIpO2kuYWRkU3ZnSWNvblNldChyKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihSZiksUihYXykpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltTaV19KSxufSkoKSxUNT1uZXcgc2UoIltwbHVnaW5zXSBQbHVnaW4gcmVnaXN0cnkgY29uZmlnIiksJGVlPW5ldyBNYXAsUnU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZighZSlyZXR1cm47bGV0IGk9bmV3IFNldChlLm1hcChyPT5yLnBsdWdpbk5hbWUpKTtjb25zb2xlLmFzc2VydChpLnNpemU9PT1lLmxlbmd0aCwiQ2Fubm90IHJlZ2lzdGVyIHRoZSBzYW1lIHBsdWdpbiBtdWx0aXBsZSB0aW1lcy4iKTtmb3IobGV0IHIgb2YgZSl7bGV0e3BsdWdpbk5hbWU6byxjb21wb25lbnRDbGFzczpzfT1yOyRlZS5zZXQobyxzKX19c3RhdGljIGZvclBsdWdpbihlLGkpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VDUsbXVsdGk6ITAsdXNlVmFsdWU6e3BsdWdpbk5hbWU6ZSxjb21wb25lbnRDbGFzczppfX1dfX1nZXRDb21wb25lbnQoZSl7cmV0dXJuICRlZS5nZXQoZSl8fG51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKFIoVDUsOCkpfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxnST0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL2RlYnVnZ2VyLXYyIn1mZXRjaFJ1bnMoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvcnVucyIpfWZldGNoRXhlY3V0aW9uRGlnZXN0cyhlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEV4ZWN1dGlvbkRhdGEoZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoZSxpLHIsbyl7aWYodm9pZCAwIT09byl0aHJvdyBuZXcgRXJyb3IoInRyYWNlX2lkIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMoKSB5ZXQiKTtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhfZXhlY3V0aW9uL2RpZ2VzdHMiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EYXRhKGUsaSxyLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EYXRhKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kYXRhIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoT3BJbmZvKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZ3JhcGhzL29wX2luZm8iLHtwYXJhbXM6e3J1bjplLGdyYXBoX2lkOmksb3BfbmFtZTpyfX0pfWZldGNoU291cmNlRmlsZUxpc3QoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9saXN0Iix7cGFyYW1zOntydW46ZX19KX1mZXRjaFNvdXJjZUZpbGUoZSxpKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvc291cmNlX2ZpbGVzL2ZpbGUiLHtwYXJhbXM6e3J1bjplLGluZGV4OlN0cmluZyhpKX19KX1mZXRjaFN0YWNrRnJhbWVzKGUsaSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3N0YWNrX2ZyYW1lcy9zdGFja19mcmFtZXMiLHtwYXJhbXM6e3J1bjplLHN0YWNrX2ZyYW1lX2lkczppLmpvaW4oIiwiKX19KS5waXBlKEIocj0+KHtzdGFja19mcmFtZXM6ci5zdGFja19mcmFtZXMubWFwKG89PmZ1bmN0aW9uKG4pe3JldHVybntob3N0X25hbWU6blswXSxmaWxlX3BhdGg6blsxXSxsaW5lbm86blsyXSxmdW5jdGlvbl9uYW1lOm5bM119fShvKSl9KSkpfWZldGNoQWxlcnRzKGUsaSxyLG8pe2xldCBzPXtydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX07cmV0dXJuIHZvaWQgMCE9PW8mJihzLmFsZXJ0X3R5cGU9byksdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvYWxlcnRzIix7cGFyYW1zOnN9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihndSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGV0ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltnSV0saW1wb3J0czpbaV9dfSksbn0pKCksX0k9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgTG9hZGVkIiksdkk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgVW5sb2FkZWQiKSxsdz13ZSgiW0RlYnVnZ2VyXSBBIE5ldyBEZWJ1Z2dlciBEYXRhIFBvbGxpbmcgRXZlbnQgQmVnaW5zIikseUk9d2UoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0ZWQiKSxiST13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHR0ZT13ZSgiW0RlYnVnZ2VyXSBEZWJ1Z2dlciBSdW5zIFJlcXVlc3QgRmFpbGVkIiksY3c9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIGFuZCBCcmVha2Rvd24gb2YgQWxlcnRzIFJlcXVlc3RlZCIpLHhJPXdlKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxDST13ZSgiW0RlYnVnZ2VyXSBBbGVydHMgRGF0YSBvZiBhbiBBbGVydFR5cGUgSXMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS189d2UoIltEZWJ1Z2dlcl0gQWxlcnQgVHlwZSBGb2N1cyBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksd0k9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIFRvcC1MZXZlbCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLE1JPXdlKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxTST13ZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEVJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbkRpZ2VzdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWl89d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIExlZnR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSxKXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgUmlnaHR3YXJkIG9uIHRoZSBFeGVjdXRpb24gVGltZWxpbmUiKSwkXz13ZSgiW0RlYnVnZ2VyXSBTY3JvbGwgdGhlIEV4ZWN1dGlvbiBUaW1lbGluZSB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGV2PXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgQmVpbmcgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRJPXdlKCJbRGVidWdnZXJdIEV4ZWN1dGlvbiBEYXRhIE9iamVjdHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksREk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgUmVxdWVzdGVkIiksQUk9d2UoIltEZWJ1Z2dlcl0gTnVtYmVyIG9mIEludHJhLUdyYXBoIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUEk9d2UoIltEZWJ1Z2dlcl0gSW50cmEtR3JhcGggRXhlY3V0aW9uIERhdGEgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdHY9d2UoIltEZWJ1Z2dlcl0gU2Nyb2xsIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBMaXN0IHRvIEdpdmVuIEluZGV4Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbnY9d2UoIltEZWJ1Z2dlcl0gR3JhcGggRXhlY3V0aW9uIGlzIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxpdj13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUkk9d2UoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPST13ZSgiW0RlYnVnZ2VyXSBHcmFwaCBPcCBJbmZvIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGtJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgUmVxdWVzdGVkLiIpLEZJPXdlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpc3QgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscnY9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTGluZSBJcyBGb2N1c2VkIG9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTkk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEk9d2UoIltEZWJ1Z2dlcl0gU291cmNlIEZpbGUgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdXc9d2UoIltEZWJ1Z2dlcl0gQSBTZXQgb2YgU3RhY2sgRnJhbWVzIEhhdmUgQmVlbiBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdz0iZGVidWdnZXIiLHpvPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5VTlNQRUNJRklFRD0wXT0iVU5TUEVDSUZJRUQiLG5bbi5OT19URU5TT1I9MV09Ik5PX1RFTlNPUiIsbltuLkNVUlRfSEVBTFRIPTJdPSJDVVJUX0hFQUxUSCIsbltuLkNPTkNJU0VfSEVBTFRIPTNdPSJDT05DSVNFX0hFQUxUSCIsbltuLkZVTExfSEVBTFRIPTRdPSJGVUxMX0hFQUxUSCIsbltuLlNIQVBFPTVdPSJTSEFQRSIsbltuLkZVTExfTlVNRVJJQ1M9Nl09IkZVTExfTlVNRVJJQ1MiLG5bbi5GVUxMX1RFTlNPUj03XT0iRlVMTF9URU5TT1IiLG5bbi5SRURVQ0VfSU5GX05BTl9USFJFRV9TTE9UUz04XT0iUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFMifSh6b3x8KHpvPXt9KSksem8pKSgpLE91PSgoKT0+KGZ1bmN0aW9uKG4pe24uRlVOQ1RJT05fUkVDT01QSUxFX0FMRVJUPSJGdW5jdGlvblJlY29tcGlsZXNBbGVydCIsbi5JTkZfTkFOX0FMRVJUPSJJbmZOYW5BbGVydCIsbi5URU5TT1JfU0hBUEVfQUxFUlQ9IlRlbnNvclNoYXBlQWxlcnQifShPdXx8KE91PXt9KSksT3UpKSgpLHRzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5FWEVDVVRJT049MF09IkVYRUNVVElPTiIsbltuLkdSQVBIX09QX0NSRUFUSU9OPTFdPSJHUkFQSF9PUF9DUkVBVElPTiJ9KHRzfHwodHM9e30pKSx0cykpKCk7ZnVuY3Rpb24gb3Yobil7aWYobnVsbD09PW4uY29kZUxvY2F0aW9uRm9jdXNUeXBlKXJldHVybiBudWxsO2xldCB0PVtdO2lmKG4uY29kZUxvY2F0aW9uRm9jdXNUeXBlPT09dHMuRVhFQ1VUSU9OKXtsZXR7Zm9jdXNJbmRleDppLGV4ZWN1dGlvbkRhdGE6cn09bi5leGVjdXRpb25zO2lmKG51bGw9PT1pfHx2b2lkIDA9PT1yW2ldKXJldHVybiBudWxsO3Q9cltpXS5zdGFja19mcmFtZV9pZHN9ZWxzZXtpZihudWxsPT09bi5ncmFwaHMuZm9jdXNlZE9wKXJldHVybiBudWxsO2xldHtncmFwaElkOmksb3BOYW1lOnJ9PW4uZ3JhcGhzLmZvY3VzZWRPcDtpZih2b2lkIDA9PT1uLmdyYXBocy5vcHNbaV18fCFuLmdyYXBocy5vcHNbaV0uaGFzKHIpKXJldHVybiBudWxsO3Q9bi5ncmFwaHMub3BzW2ldLmdldChyKS5zdGFja19mcmFtZV9pZHN9bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpe2lmKG51bGw9PW4uc3RhY2tGcmFtZXNbaV0pcmV0dXJuIG51bGw7ZS5wdXNoKG4uc3RhY2tGcmFtZXNbaV0pfXJldHVybiBlfWZ1bmN0aW9uIHB3KG4sdCl7cmV0dXJuIG4uZmluZEluZGV4KGU9PmUuaG9zdF9uYW1lPT09dC5ob3N0X25hbWUmJmUuZmlsZV9wYXRoPT09dC5maWxlX3BhdGgpfWZ1bmN0aW9uIEE1KG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybiBuLmZpbmRJbmRleChpPT5pLmJlZ2luPT09dCYmaS5lbmQ9PT1lKX1mdW5jdGlvbiBCSShuKXtsZXQgdD1uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYztpZighbi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSlyZXR1cm4gdDtsZXQgZT1vdihuKTtpZihudWxsPT09ZSlyZXR1cm4gdDtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG51bGw9PT10KXJldHVybiBudWxsO2ZvcihsZXQgZT1uLmxlbmd0aC0xO2U+PTA7LS1lKXtsZXQgaT1uW2VdLHtob3N0X25hbWU6cixmaWxlX3BhdGg6b309aTtpZihyPT09dC5ob3N0X25hbWUmJm89PT10LmZpbGVfcGF0aClyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSx0KTtyZXR1cm4gbnVsbD09PWk/dDppfXZhciB5MmU9d3Ioe3J1bnM6e30scnVuc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sYWN0aXZlUnVuSWQ6bnVsbCxsYXN0RGF0YVBvbGxPbnNldFRpbWVNczotMSxsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczoxLGFsZXJ0czp7YWxlcnRzTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxudW1BbGVydHM6MCxhbGVydHNCcmVha2Rvd246e30sYWxlcnRzOnt9LGV4ZWN1dGlvbkluZGljZXM6e30sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnt9LGZvY3VzVHlwZTpudWxsfSxleGVjdXRpb25zOntudW1FeGVjdXRpb25zTG9hZGVkOntzdGF0ZTpFZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOntsb2FkaW5nUmFuZ2VzOltdLG51bUV4ZWN1dGlvbnM6MCxwYWdlTG9hZGVkU2l6ZXM6e319LGRpc3BsYXlDb3VudDo1MCxwYWdlU2l6ZToxMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxleGVjdXRpb25EaWdlc3RzOnt9LGV4ZWN1dGlvbkRhdGE6e319LGdyYXBoRXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6MTAwLHBhZ2VTaXplOjIwMCxzY3JvbGxCZWdpbkluZGV4OjAsZm9jdXNJbmRleDpudWxsLGdyYXBoRXhlY3V0aW9uRGlnZXN0czp7fSxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6W10sZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnt9LGdyYXBoRXhlY3V0aW9uRGF0YTp7fX0sZ3JhcGhzOntvcHM6e30sbG9hZGluZ09wczp7fSxmb2N1c2VkT3A6bnVsbH0sc3RhY2tGcmFtZXM6e30sY29kZUxvY2F0aW9uRm9jdXNUeXBlOm51bGwsc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGU6ITEsc291cmNlQ29kZTp7c291cmNlRmlsZUxpc3RMb2FkZWQ6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHNvdXJjZUZpbGVMaXN0OltdLGZpbGVDb250ZW50czpbXSxmb2N1c0xpbmVTcGVjOm51bGx9fSxTZSh5SSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fSkpLFNlKHR0ZSxuPT4oey4uLm4scnVuc0xvYWRlZDp7Li4ubi5ydW5zTG9hZGVkLHN0YXRlOkVlLkZBSUxFRH19KSksU2UoYkksKG4se3J1bnM6dH0pPT57bGV0IGU9T2JqZWN0LmtleXModCksaT1lLmxlbmd0aD4wJiZudWxsPT09bi5hY3RpdmVSdW5JZDtyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczppP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxydW5zOnQscnVuc0xvYWRlZDp7c3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxhY3RpdmVSdW5JZDplLmxlbmd0aD4wP2VbMF06bnVsbH19KSxTZShsdyxuPT4oey4uLm4sbGFzdERhdGFQb2xsT25zZXRUaW1lTXM6RGF0ZS5ub3coKX0pKSxTZShjdyxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoeEksKG4se251bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgcj10Pm4uYWxlcnRzLm51bUFsZXJ0cztyZXR1cm57Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczpyP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sbnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmV9fX0pLFNlKENJLChuLHtudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZSxhbGVydFR5cGU6aSxiZWdpbjpyLGFsZXJ0czpvfSk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgYT17fSxsPW4uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV0/bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdLGM9bi5hbGVydHMuZ3JhcGhFeGVjdXRpb25JbmRpY2VzW2ldP24uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tpXS5zbGljZSgpOltdO2ZvcihsZXQgcD0wO3A8by5sZW5ndGg7KytwKXtsZXQgaD1yK3AsZj1vW3BdO2lmKGFbaF09ZixmLmFsZXJ0X3R5cGU9PT1PdS5JTkZfTkFOX0FMRVJUKXtsZXQgbT1mO2xbaF09bS5leGVjdXRpb25faW5kZXgsbnVsbCE9PW0uZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4JiYoY1toXT1tLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCl9fXZvaWQgMCE9PW4uYWxlcnRzLmFsZXJ0c1tpXSYmT2JqZWN0LmFzc2lnbihhLG4uYWxlcnRzLmFsZXJ0c1tpXSk7bGV0IHU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZD1uLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4O2lmKGk9PT1PdS5JTkZfTkFOX0FMRVJUJiYwPT09cil7bGV0IHA9b1swXTt1PU1hdGgubWF4KDAscC5leGVjdXRpb25faW5kZXgtTWF0aC5mbG9vcihuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKSxudWxsIT09cC5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgmJihkPXAuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4KX1yZXR1cm57Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp1fSxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGZvY3VzSW5kZXg6ZH0sYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LG51bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplLGFsZXJ0czp7Li4ubi5hbGVydHMuYWxlcnRzLFtpXTphfSxleGVjdXRpb25JbmRpY2VzOnsuLi5uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzLFtpXTpsfSxncmFwaEV4ZWN1dGlvbkluZGljZXM6ey4uLm4uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyxbaV06Y319fX0pLFNlKEtfLChuLHthbGVydFR5cGU6dH0pPT57bGV0IGU9ey4uLm4sYWxlcnRzOnsuLi5uLmFsZXJ0cyxmb2N1c1R5cGU6bi5hbGVydHMuZm9jdXNUeXBlPT09dD9udWxsOnR9fSxpPWUuYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsIT09aSl7bGV0IHI9ZS5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tpXXx8W107dm9pZCAwIT09clswXSYmKGUuZXhlY3V0aW9ucz17Li4uZS5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6TWF0aC5tYXgoMCxOdW1iZXIoclswXSktTWF0aC5mbG9vcihlLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LzIpKX0pfXJldHVybiBlfSksU2Uod0ksbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BRElOR319fSksU2UoTUksKG4se251bUV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9dD5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zLHI9ey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6aT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0fX19O3JldHVybiB0PjAmJm51bGw9PT1uLmV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKHIuZXhlY3V0aW9ucy5mb2N1c0luZGV4PTApLHJ9KSxTZShTSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPVsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5sb2FkaW5nUmFuZ2VzXTtyZXR1cm4tMT09PUE1KGksdC5iZWdpbix0LmVuZCkmJmkucHVzaCh7YmVnaW46dC5iZWdpbixlbmQ6dC5lbmR9KSx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbG9hZGluZ1JhbmdlczppfX19fSksU2UoRUksKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT1bLi4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc10scj1BNShpLHQuYmVnaW4sdC5lbmQpOy0xIT09ciYmaS5zcGxpY2UociwxKTtsZXQgbz17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQsbnVtRXhlY3V0aW9uczp0Lm51bV9kaWdlc3RzLGxvYWRpbmdSYW5nZXM6aX0sZXhlY3V0aW9uRGlnZXN0czp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHN9fX07Zm9yKGxldCBzPXQuYmVnaW47czx0LmVuZDsrK3Mpby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNbc109dC5leGVjdXRpb25fZGlnZXN0c1tzLXQuYmVnaW5dO3JldHVybiB0LmVuZD50LmJlZ2luJiYoby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzPXsuLi5vLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5wYWdlTG9hZGVkU2l6ZXMsW3QuYmVnaW4vbi5leGVjdXRpb25zLnBhZ2VTaXplXTp0LmVuZC10LmJlZ2lufSksb30pLFNlKFpfLG49PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleDtyZXR1cm4gZT4wJiZlLS0sey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6ZX19fSksU2UoSl8sbj0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4O3JldHVybiBlK24uZXhlY3V0aW9ucy5kaXNwbGF5Q291bnQrMTw9bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyYmZSsrLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmV9fX0pLFNlKCRfLChuLHQpPT57aWYodC5pbmRleDwwfHwhTnVtYmVyLmlzSW50ZWdlcih0LmluZGV4KSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIG5lZ2F0aXZlIG9yIG5vbi1pbnRlZ2VyIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSlgKTtsZXR7ZGlzcGxheUNvdW50OmV9PW4uZXhlY3V0aW9ucyx7bnVtRXhlY3V0aW9uczppfT1uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDtpZih0LmluZGV4Pk1hdGgubWF4KDAsaS1lKSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIGV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSksIHdoaWNoIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGluZGV4IChudW1FeGVjdXRpb25zPSR7aX07IGRpc3BsYXlDb3VudD0ke2V9KWApO3JldHVybnsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OnQuaW5kZXh9fX0pLFNlKGV2LChuLHQpPT57bGV0IGU9ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGZvY3VzSW5kZXg6bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrdC5kaXNwbGF5SW5kZXh9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5FWEVDVVRJT04sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIGUuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUJJKGUpLGV9KSxTZShUSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxleGVjdXRpb25EYXRhOnsuLi5uLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YX19fTtmb3IobGV0IHI9dC5iZWdpbjtyPHQuZW5kOysrcilpLmV4ZWN1dGlvbnMuZXhlY3V0aW9uRGF0YVtyXT10LmV4ZWN1dGlvbnNbci10LmJlZ2luXTtyZXR1cm4gaX0pLFNlKERJLG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOkVlLkxPQURJTkd9fX0pLFNlKEFJLChuLHtudW1HcmFwaEV4ZWN1dGlvbnM6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9dD5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMsaT17Li4ubixsYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNczplP0RhdGUubm93KCk6bi5sYXN0Tm9uRW1wdHlQb2xsRGF0YVRpbWVNcyxncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLm51bUV4ZWN1dGlvbnNMb2FkZWQsc3RhdGU6RWUuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxleGVjdXRpb25EaWdlc3RzTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dH19fTtyZXR1cm4gdD4wJiZudWxsPT09bi5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleCYmKGkuZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXg9MCksaX0pLFNlKElJLChuLHtwYWdlSW5kZXg6dH0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzLnNsaWNlKCk7cmV0dXJuLTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KSx7Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLGdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlczplfX19KSxTZShQSSwobix0KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldHtwYWdlU2l6ZTplfT1uLmdyYXBoRXhlY3V0aW9ucyxpPW4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpLHI9ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplc30sbz17Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZ3JhcGhFeGVjdXRpb25EYXRhfTtmb3IobGV0IHM9dC5iZWdpbjtzPHQuZW5kOysrcyl7bGV0IGE9TWF0aC5mbG9vcihzL2UpOy0xIT09aS5pbmRleE9mKGEpJiZpLnNwbGljZShpLmluZGV4T2YoYSksMSksdm9pZCAwPT09clthXSYmKHJbYV09MCksdm9pZCAwPT09b1tzXSYmclthXSsrLG9bc109dC5ncmFwaF9leGVjdXRpb25zW3MtdC5iZWdpbl19cmV0dXJuey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6aSxncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXM6cixncmFwaEV4ZWN1dGlvbkRhdGE6b319fSksU2UodHYsKG4sdCk9PntpZih0LmluZGV4PDB8fCFOdW1iZXIuaXNJbnRlZ2VyKHQuaW5kZXgpKXRocm93IG5ldyBFcnJvcihgQXR0ZW1wdCB0byBzY3JvbGwgdG8gbmVnYXRpdmUgb3Igbm9uLWludGVnZXIgZ3JhcGgtZXhlY3V0aW9uIGluZGV4ICgke3QuaW5kZXh9KWApO3JldHVybnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp0LmluZGV4fX19KSxTZShudiwobix0KT0+cnRlKG4sdC5ncmFwaF9pZCx0Lm9wX25hbWUsdC5pbmRleCkpLFNlKGl2LChuLHQpPT5ydGUobix0LmdyYXBoX2lkLHQub3BfbmFtZSkpLFNlKFJJLChuLHQpPT57bGV0e2dyYXBoX2lkOmUsb3BfbmFtZTppfT10LHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzfX19O3JldHVybiB2b2lkIDA9PT1yLmdyYXBocy5sb2FkaW5nT3BzW2VdJiYoci5ncmFwaHMubG9hZGluZ09wc1tlXT1uZXcgTWFwKSxyLmdyYXBocy5sb2FkaW5nT3BzW2VdLmhhcyhpKXx8ci5ncmFwaHMubG9hZGluZ09wc1tlXS5zZXQoaSxFZS5MT0FESU5HKSxyfSksU2UoT0ksKG4sdCk9PntsZXR7Z3JhcGhPcEluZm9SZXNwb25zZTplfT10LHtncmFwaF9pZHM6aX09ZSxyPWlbaS5sZW5ndGgtMV0sbz17Li4ubixncmFwaHM6ey4uLm4uZ3JhcGhzLG9wczp7Li4ubi5ncmFwaHMub3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLm9wc1tyXSl9LGxvYWRpbmdPcHM6ey4uLm4uZ3JhcGhzLmxvYWRpbmdPcHMsW3JdOm5ldyBNYXAobi5ncmFwaHMubG9hZGluZ09wc1tyXSl9fX07Zm9yKGxldCBzIG9mIGUuaW5wdXRzKSFzLmRhdGF8fG8uZ3JhcGhzLm9wc1tyXS5zZXQocy5vcF9uYW1lLHMuZGF0YSk7Zm9yKGxldCBzPTA7czxlLmNvbnN1bWVycy5sZW5ndGg7KytzKWZvcihsZXQgYSBvZiBlLmNvbnN1bWVyc1tzXSkhYS5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KGEub3BfbmFtZSxhLmRhdGEpO3JldHVybiBvLmdyYXBocy5vcHNbcl0uc2V0KGUub3BfbmFtZSx7Li4uZSxpbnB1dHM6ZS5pbnB1dHMubWFwKHM9Pih7b3BfbmFtZTpzLm9wX25hbWUsb3V0cHV0X3Nsb3Q6cy5vdXRwdXRfc2xvdH0pKSxjb25zdW1lcnM6ZS5jb25zdW1lcnMubWFwKHM9PnMubWFwKGE9Pih7b3BfbmFtZTphLm9wX25hbWUsaW5wdXRfc2xvdDphLmlucHV0X3Nsb3R9KSkpfSksby5ncmFwaHMubG9hZGluZ09wc1tyXS5zZXQoZS5vcF9uYW1lLEVlLkxPQURFRCksb30pLFNlKGtJLG49Pih7Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FESU5HfX19KSksU2UoRkksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsc291cmNlRmlsZUxpc3RMb2FkZWQ6ey4uLm4uc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdExvYWRlZCxzdGF0ZTpFZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LHNvdXJjZUZpbGVMaXN0OnQuc291cmNlRmlsZXMsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9dC5zb3VyY2VGaWxlcy5sZW5ndGgse2ZpbGVDb250ZW50czpyfT1lLnNvdXJjZUNvZGU7Zm9yKGxldCBvPTA7bzxpOysrbylyW29dPW4uc291cmNlQ29kZS5maWxlQ29udGVudHNbb10/P3tsb2FkU3RhdGU6RWUuTk9UX0xPQURFRCxsaW5lczpudWxsfTtyZXR1cm4gZX0pLFNlKHJ2LChuLHQpPT57bGV0IGU9b3YobiksaT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZm9jdXNMaW5lU3BlYzp0LnN0YWNrRnJhbWV9fTtyZXR1cm4gbnVsbCE9PWUmJihpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9LTEsaT0tMTtpZihuLmZvckVhY2goKHtmaWxlX3BhdGg6cixsaW5lbm86b30scyk9PntyPT09dC5maWxlX3BhdGgmJihpPXMsbz09PXQubGluZW5vJiYoZT1zKSl9KSwtMT09PWUpdGhyb3cgbmV3IEVycm9yKGBTdGFjayBmcmFtZSAke0pTT04uc3RyaW5naWZ5KHQpfSBpcyBub3QgZm91bmQuYCk7cmV0dXJuIGU9PT1pfShlLHQuc3RhY2tGcmFtZSkpLGl9KSxTZShOSSwobix0KT0+e2xldCBlPXsuLi5uLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZSxmaWxlQ29udGVudHM6bi5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zbGljZSgpfX0saT1wdyhlLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3QsdCk7aWYoIShpPj0wKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHRoZSBmb2xsb3dpbmcgZmlsZSBpbiBmaWxlIGxpc3Q6IGhvc3RfbmFtZT0iJHt0Lmhvc3RfbmFtZX0iLCBmaWxlX3BhdGg9IiR7dC5maWxlX3BhdGh9ImApO3JldHVybiBlLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNwbGljZShpLDEsey4uLmUuc291cmNlQ29kZS5maWxlQ29udGVudHNbaV0sbG9hZFN0YXRlOkVlLkxPQURJTkd9KSxlfSksU2UoTEksKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9cHcoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHtsb2FkU3RhdGU6RWUuTE9BREVELGxpbmVzOnQubGluZXN9KSxlfSksU2UodXcsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixzdGFja0ZyYW1lczp7Li4ubi5zdGFja0ZyYW1lcywuLi50LnN0YWNrRnJhbWVzfSxzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gaS5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9QkkoaSksaX0pKTtmdW5jdGlvbiBydGUobix0LGUsaSl7bGV0IHI9ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxmb2N1c2VkT3A6e2dyYXBoSWQ6dCxvcE5hbWU6ZX19LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTp0cy5HUkFQSF9PUF9DUkVBVElPTixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGV9fTtyZXR1cm4gci5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM9Qkkociksdm9pZCAwIT09aSYmKHIuZ3JhcGhFeGVjdXRpb25zPXsuLi5uLmdyYXBoRXhlY3V0aW9ucyxmb2N1c0luZGV4Oml9KSxyfWZ1bmN0aW9uIG90ZShuLHQpe3JldHVybiB5MmUobix0KX12YXIgam89UHIoZHcpLGZtPVkoam8sbj0+bi5ydW5zKSxJNT1ZKGpvLG49Pm4ucnVuc0xvYWRlZCksbXM9WShqbyxuPT5uLmFjdGl2ZVJ1bklkKSxzdGU9WShqbyxuPT5uLmxhc3REYXRhUG9sbE9uc2V0VGltZU1zLW4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMpLHN2PVkoam8sbj0+bi5hbGVydHMpLFA1PVkoc3Ysbj0+bi5hbGVydHNMb2FkZWQpLGF0ZT1ZKHN2LG49Pm4ubnVtQWxlcnRzKSxWST1ZKHN2LG49Pm4uZm9jdXNUeXBlKSxsdGU9WShzdixuPT5udWxsPT09bi5mb2N1c1R5cGU/MDpuLmFsZXJ0c0JyZWFrZG93bltuLmZvY3VzVHlwZV18fDApLGN0ZT1ZKHN2LG49Pm51bGw9PT1uLmZvY3VzVHlwZXx8dm9pZCAwPT09bi5hbGVydHNbbi5mb2N1c1R5cGVdP251bGw6bi5hbGVydHNbbi5mb2N1c1R5cGVdKSx1dGU9WShzdixuPT5uLmFsZXJ0c0JyZWFrZG93biksbW09WShqbyxuPT5uLmV4ZWN1dGlvbnMpLEhJPVkobW0sbj0+bi5udW1FeGVjdXRpb25zTG9hZGVkKSxodz1ZKG1tLG49Pm4uZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCksdGg9WShtbSxuPT5uLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyksZnc9WShtbSxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGF2PVkobW0sbj0+bi5wYWdlU2l6ZSksbHY9WShtbSxuPT5uLmRpc3BsYXlDb3VudCksZHRlPVkobW0sbj0+e2xldCB0PVtdO2ZvcihsZXQgZT1uLnNjcm9sbEJlZ2luSW5kZXg7ZTxuLnNjcm9sbEJlZ2luSW5kZXgrbi5kaXNwbGF5Q291bnQ7KytlKXQucHVzaChlIGluIG4uZXhlY3V0aW9uRGlnZXN0cz9uLmV4ZWN1dGlvbkRpZ2VzdHNbZV06bnVsbCk7cmV0dXJuIHR9KSxuaD1ZKGpvLG49Pm4uZ3JhcGhFeGVjdXRpb25zKSxwdGU9WShuaCxuPT5uLm51bUV4ZWN1dGlvbnNMb2FkZWQpLG13PVkoam8sbj0+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zKSxodGU9WShuaCxuPT5uLnNjcm9sbEJlZ2luSW5kZXgpLGZ0ZT1ZKG5oLG49Pm4uZGlzcGxheUNvdW50KSxtdGU9WShuaCxuPT5uLnBhZ2VTaXplKSxndGU9WShuaCxuPT5uLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcyksX3RlPVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXMpLFI1PVkobmgsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGEpLE81PVkobmgsbj0+bi5mb2N1c0luZGV4KSxrNT1ZKGpvLG49Pm4uZ3JhcGhzKSxGNT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47cmV0dXJuIG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF0/bnVsbDplW3QuZ3JhcGhJZF0uZ2V0KHQub3BOYW1lKXx8bnVsbH0pLE41PVkoazUsbj0+e2xldHtmb2N1c2VkT3A6dCxvcHM6ZX09bjtpZihudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdfHwhZVt0LmdyYXBoSWRdLmhhcyh0Lm9wTmFtZSkpcmV0dXJuIG51bGw7e2xldCBpPWVbdC5ncmFwaElkXSx7aW5wdXRzOnJ9PWkuZ2V0KHQub3BOYW1lKTtyZXR1cm4gci5tYXAobz0+e2xldCBzPXsuLi5vfTtyZXR1cm4gaS5oYXMoby5vcF9uYW1lKSYmKHMuZGF0YT1pLmdldChvLm9wX25hbWUpKSxzfSl9fSksdnRlPVkoTzUsUjUsTjUsKG4sdCxlKT0+e2lmKG51bGw9PT1ufHxudWxsPT09ZSlyZXR1cm4gbnVsbDtsZXQgaT1lLm1hcChhPT4hMSkscj1bXTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHI7bGV0IG89dFtuXS5ncmFwaF9pZCxzPU1hdGgubWF4KDAsbi0yMDApO2ZvcihsZXQgYT1uLTE7YT49czstLWEpaWYodm9pZCAwIT09dFthXSlmb3IobGV0IGw9MDtsPGUubGVuZ3RoJiYoaVtsXXx8dFthXS5ncmFwaF9pZCE9PW98fHRbYV0ub3BfbmFtZSE9PWVbbF0ub3BfbmFtZXx8dFthXS5vdXRwdXRfc2xvdCE9PWVbbF0ub3V0cHV0X3Nsb3R8fChyLnB1c2goYSksaVtsXT0hMCxyLmxlbmd0aCE9PWUubGVuZ3RoKSk7KytsKTtyZXR1cm4gcn0pLHl0ZT1ZKGs1LG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2NvbnN1bWVyczpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89Pm8ubWFwKHM9PntsZXQgYT17Li4uc307cmV0dXJuIGkuaGFzKHMub3BfbmFtZSkmJihhLmRhdGE9aS5nZXQocy5vcF9uYW1lKSksYX0pKX19KSxidGU9WShqbyxuPT57bGV0IHQ9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgsZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleCtuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50LGk9bmV3IEFycmF5KGUtdCkuZmlsbChudWxsKSxyPW4uYWxlcnRzLmZvY3VzVHlwZTtpZihudWxsPT09cilyZXR1cm4gaTtsZXQgbz1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW3JdO2lmKHZvaWQgMD09PW8pcmV0dXJuIGk7Zm9yKGxldCBzPXQ7czxlOysrcylvLmluY2x1ZGVzKHMpJiYoaVtzLXRdPW4uYWxlcnRzLmZvY3VzVHlwZSk7cmV0dXJuIGl9KSxVST1ZKGpvLG49Pm4uZXhlY3V0aW9ucyksTDU9WShVSSxuPT5uLmZvY3VzSW5kZXgpLHh0ZT1ZKFVJLG49PntpZihudWxsPT09bi5mb2N1c0luZGV4KXJldHVybiBudWxsO2xldHtmb2N1c0luZGV4OnQsc2Nyb2xsQmVnaW5JbmRleDplLGRpc3BsYXlDb3VudDppfT1uO3JldHVybiB0PGV8fHQ+PWUraT9udWxsOnQtZX0pLEI1PVkoVUksbj0+bi5leGVjdXRpb25EYXRhKSxDdGU9WShqbyxuPT5uLmdyYXBocy5sb2FkaW5nT3BzKSxWNT1ZKGpvLG49Pm4uc3RhY2tGcmFtZXMpLGdtPVkoVUksbj0+e2xldHtmb2N1c0luZGV4OnQsZXhlY3V0aW9uRGF0YTplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0XT9udWxsOmVbdF19KSxndz1ZKGpvLEw1LGdtLEY1LChuLHQsZSxpKT0+e2xldHtjb2RlTG9jYXRpb25Gb2N1c1R5cGU6cn09bjtyZXR1cm4gbnVsbD09PXI/bnVsbDpyPT09dHMuRVhFQ1VUSU9OP251bGw9PT10fHxudWxsPT09ZT9udWxsOntjb2RlTG9jYXRpb25UeXBlOnRzLkVYRUNVVElPTixvcFR5cGU6ZS5vcF90eXBlLGV4ZWN1dGlvbkluZGV4OnR9Om51bGw9PT1pP251bGw6e2NvZGVMb2NhdGlvblR5cGU6dHMuR1JBUEhfT1BfQ1JFQVRJT04sb3BUeXBlOmkub3BfdHlwZSxvcE5hbWU6aS5vcF9uYW1lfX0pLHd0ZT1ZKGpvLG92KSx6ST1ZKGpvLG49Pm4uc291cmNlQ29kZSksTXRlPVkoekksbj0+bi5zb3VyY2VGaWxlTGlzdExvYWRlZCksSDU9KFkoekksbj0+bi5zb3VyY2VGaWxlTGlzdCksWSh6SSxuPT57bGV0e3NvdXJjZUZpbGVMaXN0OnQsZm9jdXNMaW5lU3BlYzplfT1uO3JldHVybiBudWxsPT09ZT8tMTpwdyh0LGUpfSkpLGpJPVkoekksSDUsKG4sdCk9Pi0xPT09dD9udWxsOm4uZmlsZUNvbnRlbnRzW3RdfHxudWxsKSxHST1ZKGpvLG49Pm4uc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjKSxTdGU9WShqbyxuPT5uLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlKSxFdGU9ZnVuY3Rpb24obil7cmV0dXJuW25dfTtmdW5jdGlvbiB4MmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLm9uVG9nZ2xlRm9jdXNUeXBlLmVtaXQoby50eXBlKSl9KSxnKDEsImRpdiIsOCksRCgyKSx2KCksZygzLCJkaXYiLDkpLEQoNCksdigpLE4oNSwiZGl2IiksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7YigibmdDbGFzcyIsSG4oNCxFdGUsZS50eXBlPT09aS5mb2N1c1R5cGU/ImZvY3VzIjoiIikpLHgoMikseXQoZS5kaXNwbGF5TmFtZSkseCgyKSxhcCgiICIsZS5kaXNwbGF5U3ltYm9sLCI6ICIsZS5jb3VudCwiICIpfX12YXIgVHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm51bUFsZXJ0cz0wLHRoaXMuYWxlcnRzQnJlYWtkb3duPVtdLHRoaXMuZm9jdXNUeXBlPW51bGwsdGhpcy5vblRvZ2dsZUZvY3VzVHlwZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnRzLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFsZXJ0czoibnVtQWxlcnRzIixhbGVydHNCcmVha2Rvd246ImFsZXJ0c0JyZWFrZG93biIsZm9jdXNUeXBlOiJmb2N1c1R5cGUifSxvdXRwdXRzOntvblRvZ2dsZUZvY3VzVHlwZToib25Ub2dnbGVGb2N1c1R5cGUifSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMSwiYWxlcnRzLWNvbnRhaW5lciJdLFsxLCJkZWJ1Z2dpbmctdGl0bGUiXSxbMSwibnVtLWFsZXJ0cy1jb250YWluZXIiXSxbMSwibnVtLWFsZXJ0cy1sYWJlbCJdLFsxLCJudW0tYWxlcnRzLXZhbHVlIiwzLCJuZ0NsYXNzIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tY29udGFpbmVyIl0sWyJjbGFzcyIsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiYWxlcnRzLWJyZWFrZG93bi10eXBlIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYWxlcnQtdHlwZS1uYW1lIl0sWzEsImFsZXJ0LXR5cGUtY291bnQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxEKDIsIkRlYnVnZ2luZyIpLHYoKSxnKDMsImRpdiIsMikoNCwiZGl2IiwzKSxEKDUsIkFsZXJ0cyIpLHYoKSxnKDYsImRpdiIsNCksRCg3KSx2KCkoKSxnKDgsImRpdiIsNSksRSg5LHgyZSw2LDYsImRpdiIsNiksdigpKCkpLDImZSYmKHgoNiksYigibmdDbGFzcyIsSG4oMyxFdGUsaS5udW1BbGVydHM+MD8ibm9uLXplcm8iOiIiKSkseCgxKSxxZSgiICIsaS5udW1BbGVydHMsIiAiKSx4KDIpLGIoIm5nRm9yT2YiLGkuYWxlcnRzQnJlYWtkb3duKSl9LGRlcGVuZGVuY2llczpbUG4seW5dLHN0eWxlczpbIi5hbGVydHMtYnJlYWtkb3duLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzcHg7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMCAxMHB4IDEwcHggMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiA2cHggMCA2cHggNTBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0cy1icmVha2Rvd24tdHlwZS5mb2N1c1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlZWUwO1xufVxuXG4uYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LWZhbWlseTogJ1JvYm90bycsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG59XG5cbi5hbGVydC10eXBlLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmFsZXJ0LXR5cGUtbmFtZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDNweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmRlYnVnZ2luZy10aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDE4cHg7XG59XG5cbi5udW0tYWxlcnRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZzogMTBweCAxMHB4IDEwcHggMzBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubnVtLWFsZXJ0cy1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAyMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAyNHB4O1xufVxuXG4ubnVtLWFsZXJ0cy12YWx1ZS5ub24temVyb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZiNzgwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn0iXX0pLG59KSgpLHcyZT17W091LkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJGdW5jdGlvbiByZWNvbXBpbGVzIixkaXNwbGF5U3ltYm9sOiJDIn0sW091LklORl9OQU5fQUxFUlRdOntkaXNwbGF5TmFtZToiTmFOL1x1MjIxZSIsZGlzcGxheVN5bWJvbDoiXHUyMjFlIn0sW091LlRFTlNPUl9TSEFQRV9BTEVSVF06e2Rpc3BsYXlOYW1lOiJUZW5zb3Igc2hhcGUiLGRpc3BsYXlTeW1ib2w6Ilx1MjVhMCJ9fSxEdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1BbGVydHMkPXRoaXMuc3RvcmUucGlwZShmbihhdGUpKSx0aGlzLmFsZXJ0c0JyZWFrZG93biQ9dGhpcy5zdG9yZS5waXBlKGZuKFkodXRlLGk9PntsZXQgcj1PYmplY3Qua2V5cyhpKTtyZXR1cm4gci5zb3J0KCksci5tYXAobz0+KHt0eXBlOm8sLi4udzJlW29dLGNvdW50Omlbb119KSl9KSkpLHRoaXMuZm9jdXNUeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oVkkpKX1vblRvZ2dsZUZvY3VzVHlwZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEtfKHthbGVydFR5cGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJudW1BbGVydHMiLCJhbGVydHNCcmVha2Rvd24iLCJmb2N1c1R5cGUiLCJvblRvZ2dsZUZvY3VzVHlwZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiYWxlcnRzLWNvbXBvbmVudCIsMCksUCgib25Ub2dnbGVGb2N1c1R5cGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVG9nZ2xlRm9jdXNUeXBlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUFsZXJ0cyIsVygxLDMsaS5udW1BbGVydHMkKSkoImFsZXJ0c0JyZWFrZG93biIsVygyLDUsaS5hbGVydHNCcmVha2Rvd24kKSkoImZvY3VzVHlwZSIsVygzLDcsaS5mb2N1c1R5cGUkKSl9LGRlcGVuZGVuY2llczpbVHRlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxfdz17MTk6ImZsb2F0MTYiLDE6ImZsb2F0MzIiLDI6ImZsb2F0NjQiLDM6ImludDMyIiw0OiJ1aW50OCIsMTc6InVpbnQxNiIsMjI6InVpbnQzMiIsMjM6InVpbnQ2NCIsNToiaW50MTYiLDY6ImludDgiLDc6InN0cmluZyIsODoiY29tcGxleDY0IiwxODoiY29tcGxleDEyOCIsOToiaW50NjQiLDEwOiJib29sIiwxMToicWludDgiLDEyOiJxdWludDgiLDE1OiJxaW50MTYiLDE2OiJxdWludDE2IiwxMzoicWludDMyIiwxNDoiYmZsb2F0MTYiLDIwOiJyZXNvdXJjZSIsMjE6InZhcmlhbnQiLDExOToiZmxvYXQxNl9yZWYiLDEwMToiZmxvYXQzMl9yZWYiLDEwMjoiZmxvYXQ2NF9yZWYiLDEwMzoiaW50MzJfcmVmIiwxMjI6InVpbnQzMl9yZWYiLDEwNDoidWludDhfcmVmIiwxMTc6InVpbnQxNl9yZWYiLDEwNToiaW50MTZfcmVmIiwxMDY6ImludDhfcmVmIiwxMDc6InN0cmluZ19yZWYiLDEwODoiY29tcGxleDY0X3JlZiIsMTE4OiJjb21wbGV4MTI4X3JlZiIsMTA5OiJpbnQ2NF9yZWYiLDEyMzoidWludDY0X3JlZiIsMTEwOiJib29sX3JlZiIsMTExOiJxaW50OF9yZWYiLDExMjoicXVpbnQ4X3JlZiIsMTE1OiJxaW50MTZfcmVmIiwxMTY6InF1aW50MTZfcmVmIiwxMTM6InFpbnQzMl9yZWYiLDExNDoiYmZsb2F0MTZfcmVmIiwxMjA6InJlc291cmNlX3JlZiIsMTIxOiJ2YXJpYW50X3JlZiJ9O2Z1bmN0aW9uIFdJKG4pe2xldHt0ZW5zb3JEZWJ1Z01vZGU6dCxhcnJheTplfT1uO3N3aXRjaCh0KXtjYXNlIHpvLk5PX1RFTlNPUjppZihudWxsIT09ZSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWRseSByZWNlaXZlZCBub24tbnVsbCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdW5kZXIgTk9fVEVOU09SIG1vZGUiKTtyZXR1cm57fTtjYXNlIHpvLkNVUlRfSEVBTFRIOmlmKG51bGw9PT1lfHwyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBDVVJUX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMiwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO3JldHVybntoYXNJbmZPck5hTjpCb29sZWFuKGVbMV0pfTtjYXNlIHpvLkNPTkNJU0VfSEVBTFRIOntpZihudWxsPT09ZXx8NSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ09OQ0lTRV9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDUsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT17c2l6ZTplWzFdfTtyZXR1cm4gZVsyXT4wJiYoaS5udW1OZWdhdGl2ZUluZnM9ZVsyXSksZVszXT4wJiYoaS5udW1Qb3NpdGl2ZUluZnM9ZVszXSksZVs0XT4wJiYoaS5udW1OYU5zPWVbNF0pLGl9Y2FzZSB6by5TSEFQRTp7aWYobnVsbD09PWV8fDEwIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBTSEFQRSBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTAsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgaT1lWzJdLHI9ZS5zbGljZSg0LE1hdGgubWluKDQraSxlLmxlbmd0aCkpO3JldHVybiByLmxlbmd0aDxpJiYocj1uZXcgQXJyYXkoaS1yLmxlbmd0aCkuY29uY2F0KHIpKSx7ZHR5cGU6X3dbZVsxXV0scmFuazppLHNpemU6ZVszXSxzaGFwZTpyfX1jYXNlIHpvLkZVTExfSEVBTFRIOntpZihudWxsPT09ZXx8MTEhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIEZVTExfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCAxMSwgYnV0IGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO2xldCByPXtkdHlwZTpfd1tlWzJdXSxyYW5rOmVbM10sc2l6ZTplWzRdfTtyZXR1cm4gZVs1XT4wJiYoci5udW1OZWdhdGl2ZUluZnM9ZVs1XSksZVs2XT4wJiYoci5udW1Qb3NpdGl2ZUluZnM9ZVs2XSksZVs3XT4wJiYoci5udW1OYU5zPWVbN10pLGVbOF0+MCYmKHIubnVtTmVnYXRpdmVGaW5pdGVzPWVbOF0pLGVbOV0+MCYmKHIubnVtWmVyb3M9ZVs5XSksZVsxMF0+MCYmKHIubnVtUG9zaXRpdmVGaW5pdGVzPWVbMTBdKSxyfWNhc2Ugem8uRlVMTF9URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIEZVTExfVEVOU09SIG1vZGUiKTtyZXR1cm57fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIHRlbnNvckRlYnVnTW9kZTogJHt0fWApfX12YXIgVTU9Iltfbmdob3N0LSVDT01QJV0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBoZWlnaHQ6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE0cHg7XG4gICAgbWFyZ2luOiAwIDJweDtcbiAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgfSI7ZnVuY3Rpb24gUzJlKG4sdCl7MSZuJiZOKDAsImRpdiIsNCl9ZnVuY3Rpb24gRTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDgpLEQoMiwiTmFOIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtTmFOcywiIil9fWZ1bmN0aW9uIFQyZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxEKDIsIi1cdTIyMWUiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUluZnMsIiIpfX1mdW5jdGlvbiBEMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsOCksRCgyLCIrXHUyMjFlIiksdigpLGcoMywic3BhbiIsOSksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkscWUoIlx4ZDciLGUubnVtUG9zaXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gQTJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIi0iKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1OZWdhdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBJMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNykoMSwic3BhbiIsMTApLEQoMiwiMCIpLHYoKSxnKDMsInNwYW4iLDkpLEQoNCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDQpLHFlKCJceGQ3IixlLm51bVplcm9zLCIiKX19ZnVuY3Rpb24gUDJlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxEKDIsIisiKSx2KCksZygzLCJzcGFuIiw5KSxEKDQpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCg0KSxxZSgiXHhkNyIsZS5udW1Qb3NpdGl2ZUZpbml0ZXMsIiIpfX1mdW5jdGlvbiBSMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSksRSgxLEUyZSw1LDEsImRpdiIsNiksRSgyLFQyZSw1LDEsImRpdiIsNiksRSgzLEQyZSw1LDEsImRpdiIsNiksRSg0LEEyZSw1LDEsImRpdiIsNiksRSg1LEkyZSw1LDEsImRpdiIsNiksRSg2LFAyZSw1LDEsImRpdiIsNiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmFOcyYmZS5udW1OYU5zPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUluZnMmJmUubnVtTmVnYXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1Qb3NpdGl2ZUluZnMmJmUubnVtUG9zaXRpdmVJbmZzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1OZWdhdGl2ZUZpbml0ZXMmJmUubnVtTmVnYXRpdmVGaW5pdGVzPjApLHgoMSksYigibmdJZiIsdm9pZCAwIT09ZS5udW1aZXJvcyYmZS5udW1aZXJvcz4wKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVGaW5pdGVzJiZlLm51bVBvc2l0aXZlRmluaXRlcz4wKX19dmFyIE8yZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbnRhaW5lciIsbl19O2Z1bmN0aW9uIGsyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDUpLDImbiYmYigiZHR5cGUiLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmR0eXBlKX1mdW5jdGlvbiBGMmUobix0KXsxJm4mJk4oMCwiZGVidWctdGVuc29yLXJhbmsiLDYpLDImbiYmYigicmFuayIsTSgpLmRlYnVnVGVuc29yVmFsdWUucmFuayl9ZnVuY3Rpb24gTjJlKG4sdCl7MSZuJiZOKDAsImRlYnVnLXRlbnNvci1zaGFwZSIsNyksMiZuJiZiKCJzaGFwZSIsTSgpLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpfWZ1bmN0aW9uIEwyZShuLHQpezEmbiYmTigwLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDgpLDImbiYmYigiaGFzSW5mT3JOYU4iLE0oKS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKX1mdW5jdGlvbiBCMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIiw5KSwyJm4pe2xldCBlPU0oKTt4cigic2l6ZSIsZS5kZWJ1Z1RlbnNvclZhbHVlLnNpemUpLGIoIm51bU5lZ2F0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlSW5mcykoIm51bVBvc2l0aXZlSW5mcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlSW5mcykoIm51bU5hTnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OYU5zKSgibnVtTmVnYXRpdmVGaW5pdGVzIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmVnYXRpdmVGaW5pdGVzKSgibnVtWmVyb3MiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1aZXJvcykoIm51bVBvc2l0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bVBvc2l0aXZlRmluaXRlcyl9fXZhciBWMmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLWR0eXBlIl1dLGlucHV0czp7ZHR5cGU6ImR0eXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiICIsaS5kdHlwZSwiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLEgyZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItcmFuayJdXSxpbnB1dHM6e3Jhbms6InJhbmsifSxkZWNsczoxLHZhcnM6MSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRCgwKSwyJmUmJnFlKCIgIixpLnJhbmssIkQgIil9LHN0eWxlczpbVTVdfSksbn0pKCksVTJlPSgoKT0+e2NsYXNzIG57Z2V0IHNoYXBlU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc2hhcGUubWFwKGU9PnZvaWQgMD09PWU/Ij8iOlN0cmluZyhlKSkuam9pbigiLCIpKyJdIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXNoYXBlIl1dLGlucHV0czp7c2hhcGU6InNoYXBlIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkQoMCksMiZlJiZxZSgiIHNoYXBlOiIsaS5zaGFwZVN0cmluZywiICIpfSxzdHlsZXM6W1U1XX0pLG59KSgpLHoyZT0oKCk9PntjbGFzcyBue2dldCBicmVha2Rvd25FeGlzdHMoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5udW1OYU5zfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlSW5mc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtTmVnYXRpdmVGaW5pdGVzfHx2b2lkIDAhPT10aGlzLm51bVplcm9zfHx2b2lkIDAhPT10aGlzLm51bVBvc2l0aXZlRmluaXRlc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLW51bWVyaWMtYnJlYWtkb3duIl1dLGlucHV0czp7c2l6ZToic2l6ZSIsbnVtTmFOczoibnVtTmFOcyIsbnVtTmVnYXRpdmVJbmZzOiJudW1OZWdhdGl2ZUluZnMiLG51bVBvc2l0aXZlSW5mczoibnVtUG9zaXRpdmVJbmZzIixudW1OZWdhdGl2ZUZpbml0ZXM6Im51bU5lZ2F0aXZlRmluaXRlcyIsbnVtWmVyb3M6Im51bVplcm9zIixudW1Qb3NpdGl2ZUZpbml0ZXM6Im51bVBvc2l0aXZlRmluaXRlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpemUiXSxbMSwic2l6ZS12YWx1ZSJdLFsiY2xhc3MiLCJicmVhayIsNCwibmdJZiJdLFsiY2xhc3MiLCJicmVha2Rvd24iLDQsIm5nSWYiXSxbMSwiYnJlYWsiXSxbMSwiYnJlYWtkb3duIl0sWyJjbGFzcyIsImNhdGVnb3J5Iiw0LCJuZ0lmIl0sWzEsImNhdGVnb3J5Il0sWzEsImNhdGVnb3J5LXRhZyIsImluZmluaXRlIl0sWzEsImNhdGVnb3J5LWNvdW50Il0sWzEsImNhdGVnb3J5LXRhZyIsImZpbml0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJzcGFuIiksRCgyLCJzaXplOiIpLHYoKSxnKDMsInNwYW4iLDEpLEQoNCksdigpKCksRSg1LFMyZSwxLDAsImRpdiIsMiksRSg2LFIyZSw3LDYsImRpdiIsMykpLDImZSYmKHgoNCkseXQoaS5zaXplKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSx4KDEpLGIoIm5nSWYiLGkuYnJlYWtkb3duRXhpc3RzKSl9LGRlcGVuZGVuY2llczpbWGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgICAgfVxuICAgICAgLmJyZWFrW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGZsZXgtYmFzaXM6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLnNpemVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTFweDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDExcHg7XG4gICAgICAgIG1hcmdpbjogMCAzcHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuYnJlYWtkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMTIpO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBwYWRkaW5nOiAycHg7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICB9XG4gICAgICAuY2F0ZWdvcnlbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICBtYXJnaW4tbGVmdDogNHB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIGhlaWd0aDogMTAwJTtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5LXRhZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMnB4O1xuICAgICAgfVxuICAgICAgLmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhO1xuICAgICAgICBjb2xvcjogI2ZlZmVmZTtcbiAgICAgIH1cbiAgICAgIC5pbmZpbml0ZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH0iXX0pLG59KSgpLGoyZT0oKCk9PntjbGFzcyBue2dldCBpbmZvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaGFzSW5mT3JOYU4/IkhhcyBcdTIyMWUvTmFOIjoiTm8gXHUyMjFlL05hTiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiJdXSxpbnB1dHM6e2hhc0luZk9yTmFOOiJoYXNJbmZPck5hTiJ9LGRlY2xzOjIsdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRCgxKSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLEhuKDIsTzJlLGkuaGFzSW5mT3JOYU4/Imhhcy1pbmYtb3ItbmFuIjoiIikpLHgoMSkscWUoIiAiLGkuaW5mb1N0cmluZywiICIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYzBjMGMwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGNvbG9yOiAjNjY2NjY2O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBoZWlnaHQ6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgICAgICBtYXJnaW46IDAgMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4O1xuICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAuaGFzLWluZi1vci1uYW5bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxxST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItdmFsdWUiXV0saW5wdXRzOntkZWJ1Z1RlbnNvclZhbHVlOiJkZWJ1Z1RlbnNvclZhbHVlIn0sZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbMywiZHR5cGUiLDQsIm5nSWYiXSxbMywicmFuayIsNCwibmdJZiJdLFszLCJzaGFwZSIsNCwibmdJZiJdLFszLCJoYXNJbmZPck5hTiIsNCwibmdJZiJdLFszLCJzaXplIiwibnVtTmVnYXRpdmVJbmZzIiwibnVtUG9zaXRpdmVJbmZzIiwibnVtTmFOcyIsIm51bU5lZ2F0aXZlRmluaXRlcyIsIm51bVplcm9zIiwibnVtUG9zaXRpdmVGaW5pdGVzIiw0LCJuZ0lmIl0sWzMsImR0eXBlIl0sWzMsInJhbmsiXSxbMywic2hhcGUiXSxbMywiaGFzSW5mT3JOYU4iXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxrMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItZHR5cGUiLDApLEUoMSxGMmUsMSwxLCJkZWJ1Zy10ZW5zb3ItcmFuayIsMSksRSgyLE4yZSwxLDEsImRlYnVnLXRlbnNvci1zaGFwZSIsMiksRSgzLEwyZSwxLDEsImRlYnVnLXRlbnNvci1oYXMtaW5mLW9yLW5hbiIsMyksRSg0LEIyZSwxLDcsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsNCkpLDImZSYmKGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUucmFuaykseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2hhcGUpLHgoMSksYigibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLmhhc0luZk9yTmFOKSx4KDEpLGIoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSl9LGRlcGVuZGVuY2llczpbWGUsVjJlLGoyZSx6MmUsSDJlLFUyZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgIH1cbiAgICAgIGRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBHMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTIpLEQoMSwiXHUyNWI2IiksdigpKX12YXIgVzJlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBxMmUobix0KXtpZigxJm4mJk4oMCwiZGVidWctdGVuc29yLXZhbHVlIiwxNyksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oMik7YigiZGVidWdUZW5zb3JWYWx1ZSIsaS5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMSxXMmUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0udGVuc29yX2RlYnVnX21vZGUsaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKSkpfX1mdW5jdGlvbiBZMmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSgxLCJkaXYiLDEzKSgyLCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0LG89TSgyKTtyZXR1cm4gb2Uoby5vblRlbnNvck5hbWVDbGljay5lbWl0KHtpbmRleDpyLGdyYXBoX2lkOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLmdyYXBoX2lkLG9wX25hbWU6by5ncmFwaEV4ZWN1dGlvbkRhdGFbcl0ub3BfbmFtZX0pKX0pLEQoMyksdigpLGcoNCwiZGl2IiwxNSksRCg1KSx2KCkoKSxFKDYscTJlLDEsNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNiksdigpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7eCgyKSx4cigidGl0bGUiLGkuZ2V0VGVuc29yTmFtZShlKSkseCgxKSxxZSgiICIsaS5nZXRUZW5zb3JOYW1lKGUpLCIgIikseCgyKSx5dChpLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF90eXBlKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5kZWJ1Z190ZW5zb3JfdmFsdWUpfX1mdW5jdGlvbiBYMmUobix0KXsxJm4mJihnKDAsImRpdiIsMTgpLEQoMSwiIExvYWRpbmcuLi4gIiksdigpKX12YXIgUTJlPWZ1bmN0aW9uKG4pe3JldHVybnsiaW5wdXQtb2YtZm9jdXMiOm59fTtmdW5jdGlvbiBLMmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNSkoMSwiZGl2Iiw2KSgyLCJkaXYiLDcpLEUoMyxHMmUsMiwwLCJkaXYiLDgpLEQoNCksdigpLEUoNSxZMmUsNyw0LCJkaXYiLDkpLEUoNixYMmUsMiwwLCJuZy10ZW1wbGF0ZSIsMTAsMTEsZW4pLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9c3QoNykscj1NKDIpO3goMSksYigibmdDbGFzcyIsSG4oNSxRMmUsci5pc0lucHV0T2ZGb2N1cyhlKSkpLHgoMiksYigibmdJZiIsZT09PXIuZm9jdXNJbmRleCkseCgxKSxxZSgiICIsZSwiICIpLHgoMSksYigibmdJZiIsci5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0pKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIFoyZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMyksUCgic2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblNjcm9sbGVkSW5kZXhDaGFuZ2UuZW1pdChyKSl9KSxFKDEsSzJlLDgsNywiZGl2Iiw0KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJjZGtWaXJ0dWFsRm9yT2YiLGUuZ3JhcGhFeGVjdXRpb25JbmRpY2VzKX19dmFyIEl0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblNjcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IEcsdGhpcy5vblRlbnNvck5hbWVDbGljaz1uZXcgRyx0aGlzLnBhcnNlRGVidWdUZW5zb3JWYWx1ZT1XSSx0aGlzLlRFU1RfT05MWT17Z2V0Vmlld1BvcnQ6KCk9PnRoaXMudmlld1BvcnR9fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMudmlld1BvcnQmJmUuZm9jdXNJbmRleCYmbnVsbCE9PWUuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUpe2xldCBpPXRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLHI9ZS5mb2N1c0luZGV4LmN1cnJlbnRWYWx1ZSxvPU1hdGgucm91bmQoKGkuZW5kLWkuc3RhcnQpLzMpLHM9TWF0aC5tYXgoci1vLDApO3RoaXMudmlld1BvcnQuc2Nyb2xsVG9JbmRleChzLHI+PWkuc3RhcnQmJnI8aS5lbmQ/InNtb290aCI6dm9pZCAwKX19Z2V0VGVuc29yTmFtZShlKXtyZXR1cm5gJHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vcF9uYW1lfToke3RoaXMuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLm91dHB1dF9zbG90fWB9aXNJbnB1dE9mRm9jdXMoZSl7cmV0dXJuIG51bGwhPT10aGlzLmZvY3VzSW5wdXRJbmRpY2VzJiZ0aGlzLmZvY3VzSW5wdXRJbmRpY2VzLmluY2x1ZGVzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1leGVjdXRpb25zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHFDLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkudmlld1BvcnQ9ci5maXJzdCl9fSxpbnB1dHM6e251bUdyYXBoRXhlY3V0aW9uczoibnVtR3JhcGhFeGVjdXRpb25zIixncmFwaEV4ZWN1dGlvbkRhdGE6ImdyYXBoRXhlY3V0aW9uRGF0YSIsZ3JhcGhFeGVjdXRpb25JbmRpY2VzOiJncmFwaEV4ZWN1dGlvbkluZGljZXMiLGZvY3VzSW5kZXg6ImZvY3VzSW5kZXgiLGZvY3VzSW5wdXRJbmRpY2VzOiJmb2N1c0lucHV0SW5kaWNlcyJ9LG91dHB1dHM6e29uU2Nyb2xsZWRJbmRleENoYW5nZToib25TY3JvbGxlZEluZGV4Q2hhbmdlIixvblRlbnNvck5hbWVDbGljazoib25UZW5zb3JOYW1lQ2xpY2sifSxmZWF0dXJlczpbenRdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyIl0sWzEsImdyYXBoLWV4ZWN1dGlvbnMtdGl0bGUiXSxbIml0ZW1TaXplIiwiMzgiLCJjbGFzcyIsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiLDQsIm5nSWYiXSxbIml0ZW1TaXplIiwiMzgiLDEsImdyYXBoLWV4ZWN1dGlvbnMtdmlld3BvcnQiLDMsInNjcm9sbGVkSW5kZXhDaGFuZ2UiXSxbImNsYXNzIiwidGVuc29yLWNvbnRhaW5lciIsNCwiY2RrVmlydHVhbEZvciIsImNka1ZpcnR1YWxGb3JPZiJdLFsxLCJ0ZW5zb3ItY29udGFpbmVyIl0sWzEsInRlbnNvci1pdGVtIiwzLCJuZ0NsYXNzIl0sWzEsImdyYXBoLWV4ZWN1dGlvbi1pbmRleCJdLFsiY2xhc3MiLCJncmFwaC1leGVjdXRpb24tZm9jdXMiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJjbGFzcyIsInRlbnNvci1pdGVtIl0sWyJkYXRhTG9hZGluZyIsIiJdLFsxLCJncmFwaC1leGVjdXRpb24tZm9jdXMiXSxbMSwidGVuc29yLW5hbWUtYW5kLW9wLXR5cGUiXSxbMSwidGVuc29yLW5hbWUiLDMsInRpdGxlIiwiY2xpY2siXSxbMSwib3AtdHlwZSJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIiw0LCJuZ0lmIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXSxbMSwibG9hZGluZy1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRCgyKSx2KCksRSgzLFoyZSwyLDEsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMiksdigpKSwyJmUmJih4KDIpLHFlKCIgR3JhcGggRXhlY3V0aW9ucyAoIixpLm51bUdyYXBoRXhlY3V0aW9ucywiKSAiKSx4KDEpLGIoIm5nSWYiLG51bGwhPT1pLm51bUdyYXBoRXhlY3V0aW9ucyYmaS5udW1HcmFwaEV4ZWN1dGlvbnM+MCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLHFJLHBKLGhKLHFDXSxzdHlsZXM6WycuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7bWFyZ2luLWxlZnQ6OHB4O3BhZGRpbmctbGVmdDoxMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LmdyYXBoLWV4ZWN1dGlvbi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXJpZ2h0OjRweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyYXBoLWV4ZWN1dGlvbi1pbmRleFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncmFwaC1leGVjdXRpb25zLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgNXB4IDNweCAtM3B4ICNjY2M7cGFkZGluZy1ib3R0b206NXB4fS5ncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtmb250LXNpemU6MTJweDt3aWR0aDoxMDAlO292ZXJmbG93LXg6aGlkZGVufS5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmMDk5fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5pbnB1dC1vZi1mb2N1c1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5sb2FkaW5nLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlY2VmZjE7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7cGFkZGluZzoxcHggM3B4O3dpZHRoOm1heC1jb250ZW50O2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS50ZW5zb3ItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcDtoZWlnaHQ6MzhweDtsaW5lLWhlaWdodDozOHB4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRlbnNvci1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjpub25lO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO2RpcmVjdGlvbjpydGw7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4O21hcmdpbjoycHggMCAxcHg7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDJweCk7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCAycHg7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50ZW5zb3ItbmFtZVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZToxcHggc29saWQgI2M2Y2FkMX0udGVuc29yLW5hbWUtYW5kLW9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2RpcmVjdGlvbjpydGw7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctcmlnaHQ6OHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjQwcHh9ZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MnB4IDB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxQdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5udW1HcmFwaEV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihtdykpLHRoaXMuZ3JhcGhFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oUjUpKSx0aGlzLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkobXcsaT0+MD09PWk/bnVsbDpBcnJheS5mcm9tKHtsZW5ndGg6aX0pLm1hcCgocixvKT0+bykpKSksdGhpcy5mb2N1c0luZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oTzUpKSx0aGlzLmZvY3VzSW5wdXRJbmRpY2VzJD10aGlzLnN0b3JlLnBpcGUoZm4odnRlKSl9b25TY3JvbGxlZEluZGV4Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godHYoe2luZGV4OmV9KSl9b25UZW5zb3JOYW1lQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChudihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJudW1HcmFwaEV4ZWN1dGlvbnMiLCJncmFwaEV4ZWN1dGlvbkRhdGEiLCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLCJmb2N1c0luZGV4IiwiZm9jdXNJbnB1dEluZGljZXMiLCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLCJvblRlbnNvck5hbWVDbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiLDApLFAoIm9uU2Nyb2xsZWRJbmRleENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY3JvbGxlZEluZGV4Q2hhbmdlKG8pfSkoIm9uVGVuc29yTmFtZUNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRlbnNvck5hbWVDbGljayhvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoIm51bUdyYXBoRXhlY3V0aW9ucyIsVygxLDUsaS5udW1HcmFwaEV4ZWN1dGlvbnMkKSkoImdyYXBoRXhlY3V0aW9uRGF0YSIsVygyLDcsaS5ncmFwaEV4ZWN1dGlvbkRhdGEkKSkoImdyYXBoRXhlY3V0aW9uSW5kaWNlcyIsVygzLDksaS5ncmFwaEV4ZWN1dGlvbkluZGljZXMkKSkoImZvY3VzSW5kZXgiLFcoNCwxMSxpLmZvY3VzSW5kZXgkKSkoImZvY3VzSW5wdXRJbmRpY2VzIixXKDUsMTMsaS5mb2N1c0lucHV0SW5kaWNlcyQpKX0sZGVwZW5kZW5jaWVzOltJdGUsZnRdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIGVPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIE91dHB1dCAiKSx2KCkpfWZ1bmN0aW9uIHRPZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiIElucHV0ICIpLHYoKSl9ZnVuY3Rpb24gbk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpKDEsInNwYW4iLDcpLEUoMixlT2UsMiwwLCJzcGFuIiw4KSxFKDMsdE9lLDIsMCwic3BhbiIsOCksdigpLEQoNCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nU3dpdGNoIixlLmtpbmQpLHgoMSksYigibmdTd2l0Y2hDYXNlIiwiaW5wdXQiKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsImNvbnN1bWVyIikseCgxKSxxZSgiIHNsb3Q6ICIsZS5zbG90LCIgIil9fWZ1bmN0aW9uIGlPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiICIsZS5vcERhdGEub3BfdHlwZSwiICIpfX1mdW5jdGlvbiByT2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDEwKSxEKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLHYoKSl9dmFyIG9PZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LFJ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbk9wTmFtZUNsaWNrPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1vcCJdXSxpbnB1dHM6e2tpbmQ6ImtpbmQiLG9wTmFtZToib3BOYW1lIixzbG90OiJzbG90IixvcERhdGE6Im9wRGF0YSJ9LG91dHB1dHM6e29uT3BOYW1lQ2xpY2s6Im9uT3BOYW1lQ2xpY2sifSxkZWNsczo5LHZhcnM6Nyxjb25zdHM6W1sxLCJvcC1jb250YWluZXIiXSxbMSwiaW5wdXQtdGVuc29yLW5hbWUiXSxbMSwib3AtbmFtZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJjbGFzcyIsInNsb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWzEsInNsb3QiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm9wLXR5cGUiXSxbMSwib3AtaW5mby1taXNzaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJidXR0b24iLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk9wTmFtZUNsaWNrLmVtaXQoe29wX25hbWU6aS5vcE5hbWV9KX0pLGcoMywic3BhbiIpLEQoNCksdigpKCksRSg1LG5PZSw1LDQsImRpdiIsMyksdigpLEUoNixpT2UsMiwxLCJkaXYiLDQpLEUoNyxyT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSxiKCJuZ0NsYXNzIixIbig1LG9PZSwic2VsZiI9PT1pLmtpbmQ/InNlbGYtb3AtbmFtZSI6IiIpKSx4KDIpLHl0KGkub3BOYW1lKSx4KDEpLGIoIm5nSWYiLCJzZWxmIiE9PWkua2luZCkseCgxKSxiKCJuZ0lmIix2b2lkIDAhPT1pLm9wRGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbUG4sWGUsaHIsSXJdLHN0eWxlczpbJy5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjJweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaGFkb3c6MXB4IDNweCAjZWVlO2N1cnNvcjpwb2ludGVyO21hcmdpbjowIDVweCAwIDA7cGFkZGluZzoycHggNnB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MjAwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzoxcHggM3B4ICM3NTc1NzV9Lm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTowfS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlcjoycHggc29saWQgI2ZmZDNiMn0ub3AtaW5mby1taXNzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdy13cmFwOmFueXdoZXJlO3BhZGRpbmc6MDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7d2hpdGUtc3BhY2U6cHJlLXdyYXB9Lm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNDU1YTY0fS5zZWxmLW9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xvdFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9J119KSxufSkoKTtmdW5jdGlvbiBhT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxEKDIpLHYoKSxnKDMsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgzKTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleDt4KDIpLHFlKCJJbnB1dCBzbG90ICIsaSwiOiIpLHgoMSksYigia2luZCIsImlucHV0IikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5vdXRwdXRfc2xvdCkoIm9wRGF0YSIsZS5kYXRhKX19ZnVuY3Rpb24gbE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDExKSgxLCJkaXYiKSxFKDIsYU9lLDQsNSwiZGl2IiwxMiksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nRm9yT2YiLGUuaW5wdXRPcHMpfX1mdW5jdGlvbiBjT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMTYpLEQoMSwiIChUaGlzIG9wIGhhcyBubyBpbnB1dCB0ZW5zb3IuKSAiKSx2KCkpfWZ1bmN0aW9uIHVPZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjMpKDEsImdyYXBoLW9wIiwxNSksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSg0KTtyZXR1cm4gb2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigia2luZCIsImNvbnN1bWVyIikoIm9wTmFtZSIsZS5vcF9uYW1lKSgic2xvdCIsZS5pbnB1dF9zbG90KSgib3BEYXRhIixlLmRhdGEpfX1mdW5jdGlvbiBkT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTkpKDEsImRpdiIsMjApLEQoMiksZygzLCJzcGFuIiksWUUoNCwyMSksdigpLEQoNSwiKSAiKSx2KCksRSg2LHVPZSwyLDQsImRpdiIsMjIpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7eCgyKSxhcCgiIE91dHB1dCBzbG90ICIsaSwiOiAoIixlLmxlbmd0aCwiICIpLHgoMiksT2IoZS5sZW5ndGgpLFhFKDQpLHgoMiksYigibmdGb3JPZiIsZSl9fWZ1bmN0aW9uIHBPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNykoMSwiZGl2IiksRSgyLGRPZSw3LDQsImRpdiIsMTgpLHYoKSgpKSwyJm4pe2xldCBlPU0oMik7eCgyKSxiKCJuZ0Zvck9mIixlLmNvbnN1bWVyT3BzKX19ZnVuY3Rpb24gaE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI0KSxEKDEpLGcoMiwic3BhbiIpLFlFKDMsMjUpLHYoKSxEKDQsIiBhbmQgbm8gY29uc3VtZXIuKSAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHFlKCIgKFRoaXMgb3AgaGFzICIsZS5vcEluZm8uY29uc3VtZXJzLmxlbmd0aCwiIG91dHB1dCAiKSx4KDIpLE9iKGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgpLFhFKDMpfX1mdW5jdGlvbiBmT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiKSxFKDEsbE9lLDMsMSwiZGl2Iiw0KSxFKDIsY09lLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxlbiksZyg0LCJkaXYiLDYpKDUsImRpdiIsNyksRCg2LCJPcDoiKSx2KCksZyg3LCJncmFwaC1vcCIsOCksUCgib25PcE5hbWVDbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uR3JhcGhPcE5hdmlnYXRlLmVtaXQoe29wX25hbWU6ci5vcF9uYW1lLGdyYXBoX2lkOm8uZ3JhcGhJZH0pKX0pLHYoKSgpLEUoOCxwT2UsMywxLCJkaXYiLDkpLEUoOSxoT2UsNSwyLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxlbiksdigpfWlmKDImbil7bGV0IGU9c3QoMyksaT1zdCgxMCkscj1NKCk7eCgxKSxiKCJuZ0lmIixyLmlucHV0T3BzLmxlbmd0aD4wKSgibmdJZkVsc2UiLGUpLHgoNiksYigia2luZCIsInNlbGYiKSgib3BOYW1lIixyLm9wSW5mby5vcF9uYW1lKSgib3BEYXRhIixyLm9wSW5mbykseCgxKSxiKCJuZ0lmIixyLnRvdGFsTnVtQ29uc3VtZXJzPjApKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIG1PZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMjYpLEQoMSwiIChPcCBpbmZvIHVuYXZhaWxhYmxlLikgIiksdigpKX1mdW5jdGlvbiBnT2Uobix0KXsxJm4mJihnKDAsImRpdiIsMjcpLEQoMSwiIE5vIGdyYXBoIG9wIHNlbGVjdGVkLiBDbGljayBhIHRlbnNvciBuYW1lIGluIHRoZSBHcmFwaCBFeGVjdXRpb25zIHRhYmxlIHRvIHZpZXcgdGhlIG5laWdoYm9yaG9vZCBvZiB0aGUgdGVuc29yJ3Mgb3AgaW4gaXRzIGdyYXBoLiAiKSx2KCkpfXZhciBPdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25HcmFwaE9wTmF2aWdhdGU9bmV3IEd9Z2V0IGdyYXBoSWQoKXtyZXR1cm4gdGhpcy5vcEluZm8uZ3JhcGhfaWRzW3RoaXMub3BJbmZvLmdyYXBoX2lkcy5sZW5ndGgtMV19Z2V0IHRvdGFsTnVtQ29uc3VtZXJzKCl7cmV0dXJuIHRoaXMuY29uc3VtZXJPcHMucmVkdWNlKChlLGkpPT5lK2kubGVuZ3RoLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJncmFwaC1jb21wb25lbnQiXV0saW5wdXRzOntvcEluZm86Im9wSW5mbyIsaW5wdXRPcHM6ImlucHV0T3BzIixjb25zdW1lck9wczoiY29uc3VtZXJPcHMifSxvdXRwdXRzOntvbkdyYXBoT3BOYXZpZ2F0ZToib25HcmFwaE9wTmF2aWdhdGUifSxkZWNsczo5LHZhcnM6Mixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscjtyZXR1cm4gdD0kbG9jYWxpemVgOuKQn2ZlNTVmOWIxOTNlYTIwYWFlNWI1NjM1ZTY4ZDkzODY1MDM4NDc3NDbikJ80OTU1MTMzNzQwODQxMjk5ODUxOntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHtjb25zdW1lcn0gPTEge2NvbnN1bWVyfSBvdGhlciB7Y29uc3VtZXJzfX1gLHQ9UUUodCx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxlPSRsb2NhbGl6ZWA64pCfYmFhNDYwZTJmMmI4NTdlMjYyOTJiMjQ2ZmMxOGFlMGVhOWI1ZTUzN+KQnzU1NTYzNDAzNDM4NTAxNjU1MTY6ICR7dH06SUNVOmAsaT0kbG9jYWxpemVgOuKQnzZhYTc1ZjYyN2UwZGMxNjE1MGVmNDQ4NDY0ZTBjODU3YWFhMGRjMTjikJ81MTU2NzEyOTM1MTUwNTg2ODc4OntWQVJfUExVUkFMLCBwbHVyYWwsID0wIHt0ZW5zb3J9ID0xIHt0ZW5zb3J9IG90aGVyIHt0ZW5zb3JzfX1gLGk9UUUoaSx7VkFSX1BMVVJBTDoiXHVmZmZkMFx1ZmZmZCJ9KSxyPSRsb2NhbGl6ZWA64pCfODkzNDc2YzJjNDIxY2VlNDc2NjNjOTczMmZhNDFhNzUwZDNhNzNkZuKQnzI0NjA2NzA1MzczNTE2MjYzNDogJHtpfTpJQ1U6YCxbWzEsImdyYXBoLXN0cnVjdHVyZS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvcEluZm9NaXNzaW5nIiwiIl0sWyJub09wRm9jdXNlZCIsIiJdLFsiY2xhc3MiLCJpbnB1dHMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vSW5wdXRzIiwiIl0sWzEsInNlbGYtb3AtY29udGFpbmVyIl0sWzEsInNlbGYtb3AtaGVhZGVyIl0sWzMsImtpbmQiLCJvcE5hbWUiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWyJjbGFzcyIsImNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9Db25zdW1lcnMiLCIiXSxbMSwiaW5wdXRzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJpbnB1dC1vcC1zZWN0aW9uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaW5wdXQtb3Atc2VjdGlvbiJdLFsxLCJpbnB1dC1zbG90LWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwic2xvdCIsIm9wRGF0YSIsIm9uT3BOYW1lQ2xpY2siXSxbMSwiaW5wdXRzLWNvbnRhaW5lciIsIm5vLWlucHV0cy1pbmRpY2F0b3IiXSxbMSwiY29uc3VtZXJzLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzbG90LWNvbnN1bWVycy1jb250YWluZXIiXSxbMSwic2xvdC1jb25zdW1lcnMtaGVhZGVyIl0sZSxbImNsYXNzIiwiY29uc3VtZXItc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnN1bWVyLXNlY3Rpb24iXSxbMSwib3AtY29uc3VtZXJzLWNvbnRhaW5lciJdLHIsWzEsIm9wLWluZm8tbWlzc2luZyJdLFsxLCJuby1vcC1mb2N1c2VkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IikoMSwiZGl2IiksRCgyLCJHcmFwaCBTdHJ1Y3R1cmUiKSx2KCksZygzLCJkaXYiLDApLEUoNCxmT2UsMTEsNywiZGl2IiwxKSx2KCksRSg1LG1PZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLEUoNyxnT2UsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLGVuKSx2KCkpLDImZSl7bGV0IHI9c3QoOCk7eCg0KSxiKCJuZ0lmIixudWxsIT1pLm9wSW5mbykoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbeW4sWGUsUnRlXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde292ZXJmbG93LXk6YXV0b30uY29uc3VtZXJzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206NXB4O292ZXJmbG93LXg6YXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmNvbnN1bWVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjVweCAwfS5ncmFwaC1zdHJ1Y3R1cmUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtvdmVyZmxvdy15OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7bWFyZ2luLXRvcDo1cHg7b3ZlcmZsb3cteDphdXRvO3BhZGRpbmctYm90dG9tOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1vcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctYm90dG9tOjVweH0uaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OTttYXJnaW4tYm90dG9tOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtc2xvdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0uaW5wdXQtdGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5uby1vcC1mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5O2ZvbnQtZmFtaWx5OiJSb2JvdG8iLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O3doaXRlLXNwYWNlOm5vcm1hbH0uc2VsZi1vcC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbTo1cHh9LnNlbGYtb3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZy1ib3R0b206NXB4fS5zbG90LWNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDo1cHg7cGFkZGluZy10b3A6NXB4O3ZlcnRpY2FsLWFsaWduOnRvcH0uc2xvdC1jb25zdW1lcnMtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxrdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5vcEluZm8kPXRoaXMuc3RvcmUucGlwZShmbihGNSkpLHRoaXMuaW5wdXRPcHMkPXRoaXMuc3RvcmUucGlwZShmbihONSkpLHRoaXMuY29uc3VtZXJPcHMkPXRoaXMuc3RvcmUucGlwZShmbih5dGUpKX1vbkdyYXBoT3BOYXZpZ2F0ZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGl2KGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWdyYXBoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsIm9wSW5mbyIsImlucHV0T3BzIiwiY29uc3VtZXJPcHMiLCJvbkdyYXBoT3BOYXZpZ2F0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZ3JhcGgtY29tcG9uZW50IiwwKSxQKCJvbkdyYXBoT3BOYXZpZ2F0ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25HcmFwaE9wTmF2aWdhdGUobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigib3BJbmZvIixXKDEsMyxpLm9wSW5mbyQpKSgiaW5wdXRPcHMiLFcoMiw1LGkuaW5wdXRPcHMkKSkoImNvbnN1bWVyT3BzIixXKDMsNyxpLmNvbnN1bWVyT3BzJCkpfSxkZXBlbmRlbmNpZXM6W090ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksRnRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImluYWN0aXZlLWNvbXBvbmVudCJdXSxkZWNsczo1NCx2YXJzOjAsY29uc3RzOltbMSwiY29udGFpbmVyIl0sWzEsInRpdGxlIl0sWzEsImNvZGUiXSxbMSwiYXJnIl0sWzEsImV4aGliaXRzLWNvbnRhaW5lciJdLFsxLCJleGhpYml0Il0sWzEsInNjcmVlbnNob3QiXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQW95SHBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphclp4cGRoeTVjb1gvWXhWZUF1WmhPUmdDNTNnSFhyNi9pMkpyZW1xcm4rMVdpNlNLeFV3a0VIR0hRSURPL3VzL3Ivc1AvaHV0WlpkTDYzWFU2dmt2anp6aTVJdnVQLytOOXpINC9ENisvMUw5K2lyOC9Mcjc5bzNJNTZSM2ZyN1I1dWR6bUx4ZXZ2L0FYL2NJNitmWFhmLzZUdXhmRi9yNkJoZitqRUIzMXRmbngwSHlldnk4SHZMWGhZWjl2cWlqdHgrSHVyNHV0TC9lK0lieTlUZC9HOWJuay83dGZucWhNVXVuY0tNVW82V1EvUHVZUHlOSW43K1R2KzE5akx3djhOcE1LUVgzK2ZSMU1TYmtwOGY3NjdQM1AwN1FUNVA4MTFmdTE5bi85dFV2a3gvbjErdnBsN21zWDNQazYrKy9FY292cjZkdnQ0ay9oY08zRWNXZnYzRjd6UC95T0Y5Lzd6MzlYdnM4M2N5VkdhMWZFZlVtKzY4WjBoc1hVNTdlajFYK05QNFd2bTd2eitCUDk5TnZsdno0N1JkL2RoZ2hzaXJYaFJ4T21PRUdlNTkzMkF3eFI0dU56ekh1bU41clBiVTQ0azVhcDZ3LzRjYVdSanFwczI0N21tUE5jb3JmeGhMZWZjZTczdzZkTzUvQVcyUGdZbHJxdi8zai9xZHYvanQvM0wxYlV4UjgvelpYakNzcXJobUdWazRmZVJkTEVPN1h1cFUzd1gvOStWcCsvMFA4RUtxc1lIblQzSG5BNmRmbkVxdUU3N0dWM2pvbjNsZjQvRm5qNE5yNXVnQlR4TDBMZ3dtSkZmQTFwQkpxOEMzR0ZnTHoyRm1neWNoanluR3hBcUdVZUJoa3pDblY2RnJzVWZmbVoxcDQ3NDBsMXFpWHdTWVdvcVJLYm5WV2FMSllPUmZpcCtWT0RNMlNTaTZsMU5KS2QyV1VXVlBOdGRSYVd4WEl6WlphYnFYVjFscHZvODJlZXU2bDE5NTY3NlBQRVVjQ0E4dW9vNDAreHBnenVzbU5KdGVhdkgveXlvb3JyYnpLcXF1dHZzYWFtL0RaZVpkZGQ5dDlqejFQUE9rQUU2ZWVkdm9aWjFwd0JsSll0bUxWbW5VYk5pK3hkdFBOdDl4NjIrMTMzUGx0MWI1VzlWLysvQnVyRnI1V0xiNlYwdnZhdDFYalZkZmFYNWNJZ3BPaU5XUEZZZzZzZU5NS0VOQlJhK1o3eURscTViUm1ma1NTb2tRR1diUTI3Z1N0R0V1WUxjUnl3N2UxKzc1eS8yamRYT24vYU4zaW4xYk9hZW4rUDFiT3NYVC91bTYvV2JVam50dHZ4VDVacURuMWlleTdaWnk0M0k1eDFUTG50SmxhUzJYdUZYTUxhWmVRV3oyMXJucUJrOXZQTHQzSHhyZTZaNVlQbk1Na0hMOXlQYUhvUXIybWZPUHhFM2hmcGQwMTAyRnBrNTZ5TTQ2OVRyNjUzMVVZTFpjRy84NDhPN1JqM0xTc3VGZFk1dG8wbml1bGZYbmtsdkkrbnFRc0J3QmRmVzhtZGQ4V29tK3NaT285NTU3KzRvWWtLTDlsbmpaakp5RDVPSFZ6bTZXdVdjNWNaWmVUSnludnpmTzQyWWM2Um84UnJTR1NQbmxNUzIzbmNRbTFmSS9DeGFVZVRpM3dkZHNnd3RwMzdicHV5TVhhWWJKcnYxWUE3dVhUYWNiVDVkRGEzS3pEQ20weWY1VXhNMzNiNVFrOWhGMW40YVozU1JTRXMyOGZ6V0k2Vm1lSXlXeHM0MXErcmg3V09DMGFWekRpdUsvR1BCRVF3U21KQ09uK3hFUmFZOTdNMEViYnZoeml0bmF5b0xHRVBNSnN1MXBpa1FmZ05jdGw2WHNJMXRmTmxoMXozRzhvZHBLRndjTWh1eTZQNGxFVFFPSHVNNDJ5N0I3TlNDSU9UN3A5WHlZL0hPWDJRaUsxZlJaejFIWUVPWGlZZmtyTithUmx1L2hWZlIrUm1HUnR5VEk3blptb2ljZzcvdVp5RDhHOUR6azZFb05vc2FHUGFneDVaUktOY1laOFd6bjdpQXZQOWJQWktHWWtKdmNOUE5EMW5ZYytQQ1J3UFkxUXlIRHRhdFhjNnJYQ3hKZEpiWk9STWhlVmRMQithMHVSbXhJUmhjbGsyT2UwYm9jdzdpeUVKK1p6Vk1EeWdmK2R4TjJZZXNycnIvWFR5Tmk5V3BuNTlNMDAzV09OQlNZVkV2ZFY2QmF1SFBaS0RETldHeFZZS2JlNFdFY1NjR3crRTZFa3hzbkowQk05dEJLWXQ2QWJWejFPR2d1Z0lmZnZIRVQ2SkZvTDR3UWN6bUN5Szh6V1NLTWFod2ZIeUdHR2txWUdFTllCVG5PRGpNdGNaeEZZMmJZVmNBT1FJMklodDd1TnBTUkY5a1JDZENZWVBPVHJHeUEvVnJjdVltSGNYYStGblJseU9Zblp0VkRTM2p3T29kcHRTZkFrd1U4eU55NloxWGpBS2FCWXVaK3doYlVrRkFoYUEvUkpGdm8rUVFWYkF6Q3ViU2NGb3lka0pwTi9iaUhtSElIT3R3dWh0bmRPZTBtRXdRZkxHOGhSMHdnbEt4UkoyMkp4RTFDRGZONFRlcmRid0VER3lQVldkRHN0QUdPMkM4TGI2Qy9tUmdQTG1KaDRnS3JXenlTbWdmNEZGbGZ3ajVjSlVGRGtLa3dPa1hQbmNZMVpKZ0tQRVZhZ0c2blFvSlNJZGtzeGQ4VlFPMW15K1M0a21TMkZ4QllFVk5ZdWx5UWtZNUZRL2lFTWI2Y1FqdU9za3hKaWxGZ0RNb3p3OEtZQkdWRTZSaGl4MWhJOXQyOWtYeWRLWWp5ekxsWWhJMnVZeXBHQ2dlTTFBWGZlR3lBMDg5T2txSnRNZW1mMGkxd0hNRjYrZjI0a0pNaEZoRVhRaWpnQ0hiRU81QnY4dUMvNUltSWxCZ09NQ21vQ2cyUDdUYWlCM0FFQUJWdFJtSk1GSmlTenFHSEFLYTd1QVVPUEJwcDBCbVNRNGdVTklSTmZZUDFGVk56Yy9ENEFkMEdlb28wclV1MENZUkFCVHlxV3UyazRVQlR0dFhoV0l3Uk5yQXN4RGpKM3JkMVg3Y0lLaFd1VEtTQVNlU0JtSDBpWXl0V05zQWFoaHJtamxTV1ZXQ0x6MnpKRU9zWTlGUTZyd3ZiZWJWOGlrRXVrc2xseUxOQ05zemFBNktZSjN5MkxBY3kydVJnMHlaaFdtdWlVeGhVRUFMVlpJbFFQY01UVkd6UlBzdkxvbXhDY0Z4QWFyV1JDd3RhMUNFbTZUUGdRdXhpL2phNnYrQUFlR3NRaXF3MThJdHBZUjBKZU9Dd1dBVWxMWXVyMktzTUkwbzRuSU5YTjVUU1kraHhaOVhQNUZwZGNDbGVnc0VQSFlHSmg0VWoyVWxZZy9OcmxHbk1zSm1NalZMaFpZRVhUbG1JREZWbVd4SlNqb3pBT3hCY3EyWVBsVVU0M041SFUvWWFGdi8vczlFVUd0a3NtYXJvQWRPOExCWkVFWnlJbGRrSlE5VEJyUlI4Y1VyYklYb01QTWszTVNnT3pab0ZGN0JJWEZ6RllHcU5ackJ4NnlMTmVnRXNpbi9xR3VJS3VqaHpQSFRteVJIQ0VCcmxtRWpSOGU5VGxrT2RubGF0WlBhdW53d2ZqbmR3OEkxb1dkQWI3b3lNazQ5QmVxWEhQR01sbEVtT1VSc0FNTkV3MzVxaEFud0J5T2NnOGtET1RtMnY0WXdVaGdLSElCS1VGcENEUEMvcXh0UDU2VUdSc1lMOEZDUThnTFRtSW5wOHhLWkF1ZE1DSThzT1hmQU9vQUxrOERnK1Z6amFXcDBwSG5BZVI2Q2xtNWFUWmk1WFRGOW0vejE3RUoxbU1jb2w1QXgxTUplQU93Y3E5NEIyUlBRZ0pRaGpVSHVnVnBCeU1kQVc0QUdXVU9IUHRqZ0k4Ly9LeVhtM0tBd3h3MlFOUVFocVFOOEZTWC9ub0ViR1c1V0E5MGE3TXJYY0xXMlZvU2lJeUNla3ZySCtUeEtvRXpnMWkxMFpXMkRwRzhnellkM2Q0STI4bWdYVWhjcVJkajBOaWlYZVFCbVErUzVvQnExU1FDUFBGdk1JRXpHNUZvclNSK0loRzVCd2lPeXRtRTdDQXJKODdPVGlJTllSbHhLOXozNW1ZOTdvV0lnZm9aa2FnTVM3TTRJQUpjQzRkbnBtQmNvdUw2WWRIdHRla3VDQnNxdWVBSk9RMnF5bnhESHNzekFEWVRIREJCd2huSHBVdkNJY05tUFlKODJFSWdoSXpTTnd2aDYyL3FGc3doYWVUa0NJMFlDeFNIV3lYK3I5RFRtS0JUajBiOEVBNHMrNHNDeCtoYzUrUmFYdkRJb2hoWTdxMTVIeGo0SnBLWVdhR3lVRVV5RHFzUmt4MTY1M0Z1TUlXeFhWRnpFR1pDSTJUSlhoZFFoekFXNENwdUFIeVpSUm9OQVlML1JnUDI1RVJnWGtvOEdmZWltK1VRMGZBTGNLU2pPQ0JRYkx0OW43Z2F2Q1RzZkRjbmpTMTlBWlZpSG5NRm9NZjh4UkJHcWc1R0JEZmcrbDZ3MDFKd203MHUxdGdXRldnWENSekp2MlJOUTJHSjlZbmlMbXc1MFJySmtpTXlRVnAwb0pLa1RRcXNzMG5Kb1ltM0JVRi9FQzk2TVlFU1VORzgwenh6UkRBakd0b09MdXFkVitFMkVsZDZvSDVLS3JUbGZEMTJZVmZYdmoxTTg4Qmtac25DbGp5eG1JeVVGSzN5dG9OTFE4cXNVK0Uxc0I0SUZnMnVoOCtSQkloRDhrZVJEaHZ3UzB1RkFUMlUrYXBpcThObzFnRFZnWHJwZVVETTJGSWMwQ2V4OUMwcCtQQkw2SVJUYTRNK2Qyckt5ZEV5bnhnalIwQ2JrRWFNQWRWeXd1SnJMeGRzNDdzeFh6aVVnbG1GbjRsd0JrN0FkSGphSnNQYlMydXdHQU54b0JlMGFHUUY3QkdISGtVb2ljeFR3ZlJWRUVCQUlvaXY0cEZpZkR0S3c0bjRTMEdFOXdKZFZnUmJEdG5zOEI0aWFUS1FITVhKWUlXNnZJc1RLN2hpdURDblFGSkpneTloN2NHUzBHNXhGdkp2cWFFaDNJbVNiZEltYXFVYU0xeDM0cmNRUGZpSTlDSHZVYUZqdzNtc2hLQWd4aEg1c0hPQURrMEVGUEFxUjVWaGRmWDB2SnhaZ2VNRWk2YnFTTWZFUzlkdzdFYjVDTWxSN2tkN0RQSVY3SUJHN3RFQ1pmd0dnMEZIQWNUZmdqQTdiQSt0NkpNSTR4dGsrbkVUbHkvSUkyRGwwMVpNcjBVNG5VRG5TajlQVUg5S2prUDlWd0VKaTVoZ0crT3Q2QVlLdmlCYkNETU10UW1kc3prdXlvdGQrRXZzWDVRTUltUDZpWDRXWktPOVFlbE8yQVo4VHU1T0d3NVVBeWgrUVpSamd1WGJpQk5kRWwrR3c2S0M0MUVrbTlpT1pBODFhOVIwWnk0TGloQWhXMVdGb0lrc1J2RSt5aTF3Vmt6TjJSakJ0K3d0Z1NTS2d1NkczR3lBZU83aENsSFZvaGJvWWFpYkpCTlJ3QTI1bzdjUmxlU3UxYzJoY1ZsWmdGZzFwMHhtT1Myblp3TmFnR0lXQlhRRWlXRlk2N2dzRExaVFRDOE5WVkJ5SDl1TFdGM3lId01mVlJkMTBmSWxEQkRCYWFTNWxCUS9lN216alEyd0xaQzE3OFoyei8rcnZzZnZvM2dIWmkzeWRSVUtMczJTUkNNak9GRXZDcER5TWs0VHdEemVuVG80SHQ1dEJWNU51Z2FUTjk4WjRtMjhZZnBDV0pzZjg4a2ZTakk2Z1QrSWtUQ1NJQXl1cmJzQnRnNWVETmwvR1Z0d1dxMURaVjFnZytkamhDend6eXBOb04wUWI1K2dMWFV2dlFWMmdYMlJWa3RlVXlFVnBtcVFudkJKOCtHaWNkKzRUd2J1blFUMndENUJXdHlSQThOVkJ2UFF5RGpJOUFhcjhhQVJXQXNqdHh2Q0VWNEVHL2pzUkZIUWtRQ0UrZWgwVi9CS2tsRFhCWFFNT0ZYVVZwZ0ZtU25Za1p2cW03OGJrU0FkRVNuSTZUSnhiaE5QbkxqcGcyc0JKY2JNbWc5TTA5aU56eTI3Y0JGSFhaVThnUjl4M1NyYXNFaUJsYnd4U1g0SlcwWGtDbmtlSW1JeGJMRkgrVEU1Q21aS1dWRkdzY2pqM0V1NEFnRElZTFIyQ1VPcEEvS0RLMkxZdVk5ZXlxdXF5MzQ0RjVMQjhPbFM3eVBjV0xJN2kxRWRnRzFmbFZyT0ttR2pPOHBRV212Mm5pSU54Z3g0N1RRUXd2elhQd3dINkpRaW9zNDNCKzQrRDdnQlBCSTZYTlJyb0NJR2ZLb3FSSWNoRWc0aVFCaC9ZSmxuUFRLRUJsU0NIWURLaHhra29UR2ozaE93V3lSU3dnejNtODVTQmtmQ0ZBZWhWczJwb21YcWt6OVFFQTErQUlLQmZ6TlhjZ2NqVGtoTXE4S0NuNGtraGhBUnBYckRQQzh5Qnk4eEFGTVpCYk9aSmNxZjRkd3c1aWhDdEVoSkMzeENRWlBSb3ZiNTJhQU92Zm43ZkJLMFZjQmpWRndQSjJuSXc1c1Y3UVhERUpBRUVFb3ZnaHk0bW1OTWJKUzRhcllTcnFxL25zbVM0WDVneDhMZW42QUg3dE1CV2Jnc2ZkVzlSUGtoc2tOa0x3NVl0Y0JKY3kyYXF3TlQwR3VIZFlEcFRWeG1zd2ZBRlFCK29reElRTHc0N1YyOEpNMXhER2VjRkYzR2VyT3ljV0FCT011aUdnRUVLcHF5Sm1RYXdOSzZVT0tHbUlqRXJhUGVFOUd2YmhDWFRsM01wSjFOSW5maW9oQTJ5MWtQSzRSK1lJTTQ1MVFUdVhmQ0hPVkVaSmtQSlBVV2RJTE1HUkJySHlyN0FWNkhVNjRyVHBaS213dlZITVNiSGV4ZWd1Ym5VT3ZTT25FeHpFUVl5dDY4WkxIQ1NBTGlXK0NCQVZNanNZWm5zNldqYnZJQVVNV2NHTXlxd2tIa1FnZUVpcXF2ZkNvd1BpUmVjSlRkZVViZ2dMaU9vUUl5UzNUVkYzUXM3QWl2ak9mczkvU29tMjRDMHNhSVllTG9tem5WVUhIRURrejVxeDYrZXg1QXhlcVEvaFpnWkZ3dE5raCtjZzZUR050VFNWZjhOeS9FaDJvZytoRFBiK3FKdlluUU12R2NyRUVRN1Y0THllOXRodTRicHhEd0EyZ1ZWQkJYcFZuTXYvakoxWHJCODJEWnlGSVhpL0JlQkx1QlRXSFlxL0llaVFVb3dMOHhkam5xSnlBZEF0RitRRlFza1pqU0NWRHJVaTNoSEt6RElGZ3NqekNvOHJ3a3ozanF0VEh1RjNEaVdPRThheFlIdXlvU0lKVVZIWDU3clZBUTYzOVVCMXNUT3ZvU0RqR0JrNys2NHZOdFU4MGdJMkhHdWhBeE5yVlpzRUowbVBNSUJHS0NHeHlwZmRnTFM3UHRVT2RxZ2hweDhaam9WUjNOMlRocks1Q1krT0JDTG8xdnkvMVJTRXlEY2tXK0RmakIrOUlqZmpBbFM5QnVsNEVuYnhpNVNHWVF4ZUc5N1crcUN5Vzl2YUVrcis5K0U4Ly9lMUhCYnZ1NjZkYlRLbytCRlJ4cmR0dlpCQjhwdklNTVlrNlJHYUdxKzJkRmpzcVRvVm5ySStzWFJmVjE0aUZHQkZ6cXQwZTZkTktsdGpXcm9CQzhFck5HUUJ6dURzMGIzRDAxZzVFT3BYcHFxck40TFFyVjNmaUNvS2lvM3VnUmtnVTBUb0FjOUlyUkJGWnNpelBnek1XOHhUVktyQTJrSTU4SHNhNkU1a1dyMHNKc0FocnFCb0N2MGtoSkhTV2FvbS9HMWw0U3ZQb1ZjVUpXWHVGSmdFWUdmQlV4TVpma2grZm04WXowb2g0TEFoY29rSkpQV21URVBDejEyNnFhbzNaZ3lhRVFCeXd6Q0lFbmZhMnQwcFI4QXlhUEwzU2tYUXljcnFYbXlLWWx5T3d3cGZvWTc1R09hSkFtREVZdmdGZEx5U3V3OTVGV0VGVnRneUt4YXpCTFBUOGxtYkU2U0hyUzBoZVZYU2dIWW1lc1FZcklhako1dkZZVnNiTC9ZNkVZWnA0eHVhS2VSRW1hQ1pCbnlsODhHYWtZekR1Yzg2SThQQ0FYQkdWYm5obUtpZzlxeHl6bkJtQVBCSGpxRmtUbXNCNVZzaUoxeVF5WmNaaE9TZ1RFSUFXeUhRVmZ4b3d3a3dEV0VBMHN1NG13SVhVVEhQQ21vQ3RxclJra3JnS0xESTVHV0FUeHN0UGhxT1hWWkJDN1Rpc1FZQitONmtFWlJ0TEtoUkVScU8vRm9NbGdRRThucFh3dy9zeE5pZ1E5cTRxeXV3bG1FWW1abm1SSHNsOU1rZENTK1VWeEwzMkV1NitNQ0wzYkNRSElRajFRYVg0aEE1dXBKTHhVRUhpRjRhdXpLMDI2Z3hGempLRGc3V2NqRE1uNDdSWmh0c2srdkYzQ1AyTDVnQ3A0WjJsblFrMEhpRmZNVERjcTRvcVhjWjBxdXdudlFJOVZOZ1hsa2xoeTZGY1pET0crdzZicHlEL3NMcEhtdy9ZeUNDcjI3WTIrSFpQK3lMWUkwTUh1Q2RpaEF0Z0V3blpDVjVXeEFoQktLT1hDcEZhWW9GaVgzS1FpdVEvT1lLZVpRV1FQT3BBV054ODVZdmIzdW81V05JVGcwRjZtWkl3aXFvMWhRZ0pTeG1OdDBKV0Z0RXZjaFRXa3JQeWkxd0QxSGU4ZW1ORVJuVnQyMTdwcTRrTVpoNFlFcm9maEJ5bDk2WktWZGNtTWhJSTVRMHFJNXo4d1dBNGVWNjBDN09aNE1vcnpVVEt6anVKeTUyYXNPWUU3UndpUnJURkZBTEVLSmxlVlV5T2pjV2ZSQ1pNU3c2U01RUGdERis3Y21IUFgzY2MvdnpaL2MwM1htSFNFNXcvU04ydmN1VXZyNnBIakNkeXFreWtsTENXYzJ6c1hjS0dJN25nUXBBRGEzRWFHTnFUZ2xKSUFwL0FzUU5OVW1QVHRyK3hGancrOHZnUUZSMVFnTkd5N0dZQ1FsUmd5MHdTcnArOGdlSUlERHlzb1RwMjJFOGNXMGZqc2M0TkVHNTRmVGZsV3JWbkpqZFZ0RHRkRDdKTEdhaUV2ZDZ5akpzQjdKaWhzSGJ2R2RPaktobWtzeUNUS05VK0hIU3Y0bVF3d0dtK1RYK3l0V0VqTmhtSm9vRngxZ3MxZkZHVDd1SG5rTmZKdzNLZElHVmNtRDB1aE1iY0lpaE1pQm5XYThtS1NxV055dU9CbVZmS0hCMkROc1pUdHpXSWtSclgxUDRLdUt4U0xmZU9yazN5R1dtTzMxUHhrZmpSTmh6RDV6NEJMd3BtSXp1MVZjZlBBSDJxRFFOSFFObFJ1d3hRYzNLSkhxZ0ZjZUdscXQyVTNobHdXREZCZkhoRzFJZ0s5eVNqdE93YkFnbU9oMk0yVUxza0xGUUppRi9GT2JsMm1WVFVJWXpieHVFeVRMTlhwcVBGVkpBUFN1NVc0T0JscXBLUkZkclNhZHBKQ1VjNGdpaTczU25BTU1DR3hzR081MUs4NGFvWEQ4Zno1M2FzN1BISVNGeFlWRkJTRldoRm5odEd4WkJtTWdXOGQraUpnVTBHQjRIYXVyRmZBQVBNcG5JZlFzMlBpWHNhVUFiVXJGS0FxY2hVYnhsM2VoVTNWQXcxZExzakVNdFpTRVVpSitNU3h6YjhPalBVQ0lQSmRHT3d5cCtLbFh4MmYzckQrNXpiVTBFL0VWejgrVlgzZVRtckN3RTFMTXdIU0dTM2VWazg4c2M4NC9NYkVkcjBkTDVvaWVBZWlKbmJTWnBUbVNCQWlIeXBRL1VtVm8ybGVjME9zb21nY3VTeFFTNGl2aWdVSFNxL0JrL1VSdUlaQThDaXdRR21iWkVJaFZvNW9seXV0MGxzRUJCWFNKVFd5VzBydDhRY1RmU3piYWZTMWxGVHlXaVZjRlJSQ1c3V1B1a2NRbEdZa3JRUDVFd0k2UGtCQUlqMTRHbUdoanhBU0VPdUN6RUt3ajVmalFyS2hRa2k2azBiaFR3L2RBNnBRSnZFZzk1VENUNlVOTStMV1VyeUhLai9oaFFuVFJ6QWpPSkNaR1FZYTZtS2ZER0pBQk42Zld0UEVmTzhrdTJDTGtFOU1PY2dRNUJwU1ZQa1dERUxyWTZ0elFPeTVMeVo1NUg5djQvV244L3UvNHJXbitqUWhWNkFJTjVlaUJEN3Y0bW1EZmVlRWJCdjJCWSthL0RhR3BvenY2NGVkSzUzMGhqd040WW1MTWdXYVlwcmtPL3J1SlZVK3V6cFpLK2V5Ym04ZHVteTloQ0taRG82bmlraDVUcjZ3cW5KRE5nWnVCVDFUWGpWN0dBWGRXQVl3dnVvMVlEQUF5bjR1WWxuRGIxTDNsUVZZVkdDL2FJYk54WUMyTFBYK1lBeFJLUGFSZTBsaExsS3Y5TURSaDZVMkVXOVVvQUF4dXlxazJHczBodTJaOVpTRnBOUjBVY3NPSk1Xc1dUQXdsak1RRk43QlJKK3FXbWt5NldpQWZqT1BnVDR4QVZtK0JvSXhvYmg0OUNUQ1B2dXdCY0dweDNxSExzdUxxL1oxUWdKbXRYTmNzRmFEWHZLYW5BWFZSWFUwem0xU2RCVTVzWFRJMG1Td3pLamgwL3RYYjA2blZERXR2TG9VTVpSRlloSHIxZWx2ZkRLNHZCdlVMK05qT3dabDhsRUE2cEx4bUhJNzl1MmV3VngrYkpqcjNxdkhXdkVJYWxMOGlCOUcxQnZ0Y2JwVlFkZm9BSitBZnI3Q2tEM3Z3N2xueU5ZWXZRM0lmeEx4ZTJIRVA0UjRJZ1RNTEloWG10UmkxNk8rR1A4ZUN5TDljWktWNVF2RDQ5VnE3YXJIRGlDMEJQQlhxVWNuRUJDQTdJQTBGbU1XQWh0bDNPaHMydGxQVnZIZktwWEVnRWF1am9zSnJvWTB1RTJQVmVWWm1CTkVBakVTMHVYWkFXWENoc3A1UnJVTXR6eDlBb2RtQ2hPUk9ZR2FJOHdWOXhWUUdCK0pEZXAvSml2akZocVRNQ0RmUnpIM1JJV016MkNIS2dZVFFXOGhUaE9GUVcwc0dUb0R6K3h5bDBOZmFCY1VrK2IvaTRRRG43VVprZGhOUkhTWXpnVkdEZnordmJhMFVmaFU2WEVEQmIrNzlwemozSFhyZFJWcVZjRGtMU2U0aDZpR3JFd3dJREFaTVBQVUhwN1pTcDhSWWpTWGdKbDhsTjdudHlsbzVIMHM0Qzh1cW53ZkpnV0ZhdHRxUDJOVkdwZ2RuNmRZdkF5d2tyOWt0cTNTeUpuaUFPUm9KMkRBOTFqUWZFVEpLUnlRclk5WTcxNFhsRDRZcDNkWkxWbXVuNnBsUTJsc3hUejFZTUc2clVpc0M3U1hwMTd2cXV2aTFFQWFVbm1VQW9HeGM2VHMvTFplUXpLM2xQY2J6cTNFQ2ZtRk8vZUZrL3pRd3I4S2NMZFAwMkJQMldBKzY2NUp6RkFrQmIxZEJncUdYYUN0dmREOUxZd0hOQWlHTWVIb3ViVlg2RGQvUXUyQTNTWVpnVDB4dWdGbWUwQTZrMFlMMnJuSGlTREg4cFNHR3NuL1ZXZG1XV25NaWdzZ0RndlNkMkNXNW9XVFF4b0V2cEZFQmRHWk9INTMyUUVNb0RmVkhvbEpxd2tOVlduMVlkRHprRXBFdi8xcXB6ZUVZSmphZGRoRXBuVnQ2Rk95MnEzUklYY0FSbW45bzZJMnlFc1o5eXY1OGdWYlEva0dsbHBobll6U1pLbHU1Y2hHZ3IzSzRYbkFSejVCbUc2TXRrMmNOWXdpWFpReUFpOE9DRGd1QXBFUHRST2NORE9mVExSUk9CYytMcklEWGlDSkgwYWRITGd6akNaYXJDL2c4cjFYQmdzWmd4alBtNW45ZmlOT3pMZUQ4SERpNjlmUzVWRXlHRTh6NHAxcVFuQjM5WHdlUlBMSVFIUDhoWGIwSjE2TlJ3alYvRnRta3BwaUgxU0tsMzFjUUh2eHljbXpBaDRGV2JnNG55bnlnN0UrVkJoYkRRUHdpK0diOEFJcGtmb3JqSUQ2UTFXb2F5RERoUGNYdFJBaHNJMjZXdnRwNWRaQTA0VkZjZWpxWDlwa0NwcTA1N05aZGJ1OWxmeHZyM0pES3NYaUp3cGFnR00yaVZJMmtKSzVvV1FoNGYwOEE1b0JhV3BDV1BDNkFDbnF3aFRWby9waG1NQndTVWRwZE0xVVR2Y1hmWDZCb1l2aENTZUFvU2VjM3oyM0h0Vm5YUjF0Q3ByNG5EMG1EVWNFRWE3NHRYQjFqVDd0NDM0Zi96Wi9jMDMvbkVIUVBjUlZSRVdUS3VlOENITGtyU0IxWkJCVmFVaWdLMEFLT1I0K29XaGdEcmQ4TEZKN0V4ZnFBTlpvMi9xY0FuQ3lxdWlGcjJha2hIS1JITHlhaWxSNDJwR2plRmFNSGRvS0J3ZFlsNGRIT0ZEN1RndEorOWNCK0hpdFZtTzk4UjJ0L3FxVk1nUE5Xek85Yng4WGdnUndjTHhPRGJBQ3A5L2tDQTRjaUk1NGlDemYvNFllSnJxQXQ3STRsN1UxeFl5RDZ2K1gzZ0xndEttcVRRTGtTbzJKWkVKOFM2Nnprd1o1bGlubjFqOHJrTTROWWxRaDdZbFZpbmkrNXEzNnAyS2Z2U2FRZmJocUtyWXlKNWR5MmNYSWRma3VFbUJVUHZDZU12S1hXM1lzQkxZZnVZOUlIYU9PdXlnQWpYTFFabHhuMC9IRjNDR2NpZC84VHpadTJ6dzVGb3lKK3JnWGMxNFoxUTV3UjZwNkZqS1ZJc2hkcDgxU0RMQ1pLR0Z2WGJ6UXkxeitFdWZuSHlrUi9oOStyOVJXbG1OOGlnT2kxUFpScVozYmF0VUJjNGVMS2k2TDBFMWtrQWRPOUFaQ0J1M2s5S056V3Q3cTZrM2w4eGdtdFdsSGRRdWh1TzRBV1M4SW1Jc2pxbStEa0hrckZ1Z1RCZWEwemVienZmWExYSzBjdW9OcS85V1luei83UDV2aWZFOUw5eTN4QWo0Uk9RL0RpbURtQWlURVY0RElsNjN2K1JJbURINVpkT1JNZVNacm5lZTE5TS9uSURBTnI0RGFRTDlxMXVNREF0TDRxbCtkaGplUDhSckJuSTJYQ0N6MWlRTHB0cE1rQ0RFZm5OZUxlc0l5c0p0Tzl4MmNZeFJPOUhNY28zcXRjY3E0MzRhY1lQZ1ltSURaQlFHTE1GZFdTaHR2K0NFQVRaN0hlbllHcEJkNTE5QWFSUjhLd2pEWVF1RkFmYm1nbEdHNzVPMHEwNDhxTzl5cVhZR0d1c3d5WFJYeDBSSXU2QkdXZmpiQXFGOGNNUVdrQVRxNDlldWRvWkJzVFBjUGh2dU5KUFVHVis3dFdIcHB6YitIZTdFOTVuZ09TUURvMndyOTc1MEtJWG9RZGRsRlVSaWJ3ZmszV0JwcXFxV29Va3dNQk5ZelVHbGlOSWN6d0JyQU11Z016bE50QUxTNnBEMUt1WWExTkpLVUhKNWJOWk40RDVLTnV5dFhzUWJNcE9nMHgrWW1taWVhYjd2dUNUMnBUSXo0R01KbUczRTR0WDJQTXQ1WHU4ekNTaU5oc3IwT2dUME5udkZFVWdBNXNoVXBCM3Ewb3dhNTZ2aXF2VmxGNTNDUEZzTlNpVE0rbkRIVUNFclZKUm5Kd3F6Q3VyKzFWMmNIZXRvZy8xNkNab2ttdHFyMGl6L3FJenovYlA3VFgzbmQ5V2RIMTk3cFIzTUpkYXU3cFhSYVlBSnk3K0JYaWtWTW1mc2pBaTFRZndVc21ab245bE9RSEdvS0ZpMHAzTFFZSFY0U2UzUzFCYXJuWGZzdEF2cXdrZi9xbHFwWGkva0lkWmF4dVlNc1NiWEJ4NW0wZUdLaVVBQ0pra1VRRnoxUTNCT0xaT3EvamdTcFduL0hOcVdKQXZpQUxSVWxaa1lhbVFGL2RXb1JGamhQR1RSMUxhaFJsa05IVFdGWmpqekhBY1RsWTVHclZqcFJwQ0NtK1I0bTdlOTB3N1ZKeHpHOTlFa1pROXNGWS9DcE5TbVBXbFpCTGRoa0tyeG9QMzk4QWRpcW5vV0s3eVpZUEhhbndzSlZPSEhkQmYxSXZZZ1p3dW5RYTJEL0sxSFVKdlUyNXZHYXlsL2JieERYYmg3YVljUXlGaVlrS0YyT2dGV3JYSmpUQ05jcTYzUnF0YW5UdlFXWnd3OG9xRG02K0RSOWdTdTRTSjhIbVRob2RZTlFXWW9QZGpHQ1pZTENJSkFvYWt5VFNaS20zcW5iVTBVZG1aQTZ0QU42ajVnK1JFUUdSTkhITVUrSUNwbVQ3M3RpR3F6dHFPMk45b3BVWEtQVUlhZWRYNHRxV1c5ZFo5ZjR4M3FLZXJmQ1p5UTcwRmdDQzNSbUZ4Q3g0VlcvNXlwMWxGd1NVaHNJL2JXU1NZam50WHBpK3lkYitXbTltNlV6RldWVlJ3TE1oblFqeGsvZ0hKWEd5eXBPdS9DSEVKSWt1L2RhWThMVFlHczFvYks3QzNxekp0d2oxemd2ZTBsSzU0bmdRVTZtWWNXNnRsWG5Td2RQSWZPa0xGc0h1NC9Gek9vR3JKT3dPbUlVMUVMNjZoSzQ2UGpCZHRRUUhVUDFNM1N4dUxybitTQm5vRUlrbFRBaXNzcUhrMDFQWU1XMHVPTUNRT3BwblVnbm9qQllDTm1vVDNlcGZYc0M3QmNHNVZtekI3NENBQ0dGcHdLcGR5Zmh3cmEybEhKQzhHRTZsVmp2NDVZUnBEMW5SbHAwa293M0lycVFkd3FNUFNrWXpYdm9JNUxCRHJXZzJBR2pEVFFGZFdzaVl3anUzbHN4V3NpS0ZGK2hiUWhqeit0bkJlVjNsRVEyN1RwaFJWZHFhdEJ3VlRvZ2oySzlpQjErby9rMDZteXJoYWNQeHc2ZUovZHJ5L005THVkMi9FM3I3T2VxSnVHbDNPZWh3R3NWSVpZdGhJY3FiTmhwWXlrVXdGRVhLNXFHQXlxZE1FM3BpTmpxRkI3dS9OcU1EYlpCdnhhOE5ORDE3dkwvY2s2TWpqMU9FaUJialZvUytzT25ZOVVwSVdHNkQxRmlLQitWQWxFd3BwL2RLZDhKV1lqL09FSkxrbFRuZW5EMGxpb1IzWkp2VzFCRnErVC93RktVNnBsakJqeUJCdEU3c3Z2dWxXSWEvUnBtOEFOWVVGV3ZnWGRFcGtaOEVDOElna200cFVNVzhHdnJqT01ZYXNyQ0FEUTBTQUFEMzJFYmh6S3BsNVFRS0FuajAwRUdHTXg5VnV5Nk9yMXdIbGxIV3U5d042Vkt1OWxJS1hxYStVTndKUmpQZFNUcno2bnJhMFMxVUVLUU9WNVo1L29SQkRRZ3A3Z3lOb2lPV1dscG9TMnBXaGJKWXNPUWp1OGJxaGRsbk9oWDh0V1I3anN2Rnc3czZ6ejZJUzJDRncxQWVndnFXYVRYNmRSd0JLaTBPZnJpWWhadmZsSmhqQXh2MXEyT3NMTVY4M21yOU9DcEFRbWN0b2RKVVRlYlIxbkpLbTZqblF3ejZCV3l1YlVkcmluQXFkbWdIcngrSk1sQlpzZ1YvV0E0THEzZlB4bEZDU2Nlb0o3ZjNRRVovS2Rxak9YSXpwQ1U2azZuZ3ByYWpTS2tuMldkZm9MMnBpdnNxNU5nMlpiQWd6M1BKcGtxK3FGRWFRbDZkVVBTVTR2OVVsai9PUFY0UXhGL2xUZm9qYjgwSHVHeG9NVFpvU3BKMitwWUhsOGpXRkxUV2JjOGJVRU9mSmJKMTZBRVNPSmwxcEljQVozRTBYYTF6cWZRajVDT3dlVUtnWXBNOWNYczR4ZXJWRERWZUVlZ25MSTZsZHEwakdmNUYrUE9nQ0t3UENBVFh6dDE4aEtLT2tkU24wSFVPTWVDUmZlV05Ld0paRkx4ZmZQdEhHSVVlNzBDME9ISGdLRnJPT0hPb1h4cmltMkFMTlJPR3IzVVJkTWZtMzdPZ0JVTTRiUGZXN1pzRHM2akR0MUlyUEtQbzFJTW5ENXc0cnNxZTBySXAyNWI2bzJ2T08vK00ycmZqRUdpdlNBKzYrT2hiR3NDeXR3R2ZSZ0RVR0pGZ09HTFJsOEFIZXkzTWp0dzgrbEYxczZqd2xwNDRhSWFsWFEzSzA2SnNQVWtpSjg1SnVIUkFPUGp4Nm9pek1CSHlHMk9vUzlQQXlXc0d2VnA4NG5JYWdRTmI0NmozTWsrSEJyeUUxQ2ZhcHd5OUJFdDR4WVBRVjRrSUpPUHlwUUZCMFAxVzdUaHZrQlpsUjhFbGNXTG9SOWtsYkRxZjBCbG45Q1kzN2lnN3RDWGJDWXlKYXRWbGxoRTZGQko0ZVpFeDN6RzJBR3l6KzBWMkllb0YwQmtVMHVCektBbjJMd09wYW1rM2g0U3ZEbzZLd25ZWTJoVklPS2dFMEt0S21BWFZ0VzZUY0RzV1NjamtzT25ocEpvVUtqam9TK3ZnZlVTSEpFQWg1Nlh2Vm5EMEMzNlZpZ05JeUtGc0Fxcm5vZG5SYnM2dFhJMWxxR0owYVh6SHRPU3NlWFJ5bHV2aE1ES2VvYWdWVTY3OGpNdWtYblVMWVJFc2dpdUpqNXlmbWRrOUZPVEkwNHlxc3lzN3F4dFJQc0pKU2hBclZTVjBtRmhlUFdyNjI1NnQ3UHFobnZaRStiQS93MXFidEtuU2lpSnBBY3lPa2dJdUh0VkRjSlJ5YzVNc0dUbVlaeUZFOXhERFd1RVFvb3RLUTZkYml2WmZNcGJWVEc4VHJZcitvMWRKeW1XK0NsS3ZQQUhnWTBKamtxNExFdWRVMlRyb3I1T0tzaVZoeUtlckRQZm5aV1I0eUJST0tDdDhIUzFGUSs5UXNJTWhuOGRqOVZxaVBSWjFDSHRhb1hxQVVKVDlQdnFDRFJnSE5XaTRUU3IySkk2cUVFYWhrZFdWUlAyYS95QSs5Y0RXUU83ZkhMdnBPNEJFL1NNYnNkbWVXVnRCc2NNSlVIWWEwVEkvNkMyVk9IWC9Ec3dPVzRiNGNCTzRvOE5rblFxOU5HTnBOYTNsL2ZLTm1nTTJNQTF3RjhWVkt4TEFSdEZhYkZlQ1BCQ2srUEwwbUszdTVmK1g2dDE0TkNXSHkwQjZScXFQcnhkVjkxM00ybnhuWHZ0OEh5NiszVjRNWUFqclF5bksvRGpKTHdFUnRRNitmNHE5cml3TkpmeTRkcFpLVVpNWVgxdFQ3R1VjeThaVldoYTBvSkJwQWtMY0dpdWc2NURHOEkrdDBOREV2S2YrbjNWRFMxMzZvU0VnUk5iWVhQK1Q0Y0hjZ1QxZEdpWHNKUWxCZkkzWGNtMGRUT05QeCtIY1U2VG4zZWhvcllweDZOaVNUZjJ1a0RNSnZPVm1vZlVJQ3ZYN1lCWlZicFZjRU9VZTYxSjQ0Q3VNeXhtMTd0T1BoczlCYjZCQXA4OUlPS2FXckMwV1pQbDNnRjE4QTRSTmRhOEJLbzYwZFBIUytONkFFbHN0TzJWd096V2FEWHVRdHZYMi9JMFVTR0tOUGlpam9CSDFHRW9LRWVHUThFOFJIeGFxV2FSQmpMa1Z3UlBML3FCYTVOT3h3NGYvMCtEWlYyZWxFbEFSYUVFb1BNVTlwUGhPRmR1Vi9mWDdVQTJUMEJXM2o5SmloU0xFMUNGOXV1T3ErbDN4UVE5QnQrNXRhdnBqQVUzMmc2RTN1Zkw3MEhVYmtNUzBWMHhLNytvL2RUcjU2b0k5ZjhHeFJsVGhFK1RTNVNwZThoUVlwcTRPblJ2VjNTUUQwL3JFWlFYd3h4YWc3dW5Jb1FKQ3BmcUtYNjg3c2ZqbjZ6Q1c5YThBc29kWmR5R3JRaDlYRWRXK2NLY2xUYnNrNEdBYTZPV2ZTTVl1aFg2YWh6WDRwMWZCMGdJTWFBQ0l1U25UbXJaQnJIZk16NzJWZmxXZFJ2dEl3bmRYM2ppZkRxYW1OcUtNQUlUT3R3SWlLVm1OK1cvWTZDZkdndmFnOTZwUFNNNEg2U0Z5eUR3TlUwNS9DQ0FkRFdXWkNzTGR3dWNhSGZ6aFdDVHFxb2s2UWhNVmo4aGJoQytwYWpYeUtoQmhCMVdPZ2IyTGdWbkZ3cTRrNlRxczR0cG5hdFhaWitwWWM2NS9WZHNhNU9DNkpsbU9oY2xVZ3JhYWNDa0dvK2VUMmpBeEszMnM5WDBMbU5kRmpOZ1JObnBwcnlROGR3MVN5Y1ZDTXNQREpKa0xYRnFaTnhPakx6MTYvTWNnaUU5ZmVWSVJ3ajV0VDlOOUN1dGhqZzZ0MTRBQUFCZzJsRFExQkpRME1nY0hKdlptbHNaUUFBZUp4OWtUMUl3MEFjeFY5VHBhSVZCVHVJT0dTb1RoWkVSUnkxQ2tXb0VHcUZWaDFNTHYyQ0pnMUppb3VqNEZwdzhHT3g2dURpckt1RHF5QUlmb0E0T1RvcHVraUovMHNLTFdJOE9PN0h1M3VQdTNlQVVDOHp6ZW9ZQnpUZE5sT0p1SmpKcm9xaFY0UWdvQjg5Q01qTU11WWtLUW5mOFhXUEFGL3ZZanpMLzl5Zm8xZk5XUXdJaU1TenpEQnQ0ZzNpNlUzYjRMeFBIR0ZGV1NVK0p4NHo2WUxFajF4WFBIN2pYSEJaNEprUk01MmFKNDRRaTRVMlZ0cVlGVTJOZUlvNHFtbzY1UXNaajFYT1c1eTFjcFUxNzhsZkdNN3BLOHRjcHptTUJCYXhCQWtpRkZSUlFoazJZclRxcEZoSTBYN2N4ei9rK2lWeUtlUXFnWkZqQVJWb2tGMC8rQi84N3RiS1QwNTRTZUU0MFBuaU9COGpRR2dYYU5RYzUvdlljUm9uUVBBWnVOSmIva29kbVBra3ZkYlNva2RBM3pad2NkM1NsRDNnY2djWWZESmtVM2FsSUUwaG53ZmV6K2lic3NEQUxkQzk1dlhXM01mcEE1Q21ycEkzd01FaE1GcWc3SFdmZDNlMTkvYnZtV1ovUDhhN2NtTHcwWHh2QUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDVBY0NFQjhmQlZ4SHRBQUFJQUJKUkVGVWVOcnNuWGw4Vk9XOS85L1BtUzA3a0lXd2hNVUVBUkVFcEFXMEltb1JwWXExaUZXdy9rVEZ1clNpWGNDNjBOcUNYYkQxdXR3cVdtcXhyZEQySXJkWHNiVEk5WXBMQ3lpaVV0a0RFUklnZXpLVFdjK2M4L3orbUhNbUo1TUppeUlrOEx4ZnIvTUtaQ1l6a3pOblB2bnVYL0g5cjEzQW1xMVZSSDE5R1RieFp1WmQrQUczejF0RjBSMnJXRHR2R0ZETGlobmptTGRoSElzK1dNNzBQS0Q4R2E2NDlGSEtMMTNNOW1jbjA0cWZGYlBHTXUvTjBTellzSndiaXV6dlJ5bGZzWUNIRnIvQzVqMEJmSVZuTWY3bWU3aW1iZ0YzL0M3S3pHVWJXVGllTGtrNEhPYkFnUVBVMU5SUVYxZEhZMk1qVFUxTkJBSUJXbHBhQ0FhRGhNTmh3dUV3MFdpVWFEUktMQllqRm91aDZ6cTZyaE9QeDVPSFlSakpyNFpoWUpxbTg5L0NORTJjaDVUUy9pcWtsTmdISUZLL0FrZ3BoZlhTazE5VHZpZDI3ZHBWWEZCUTBOdm44eFc3WEs1aVRkT0tORTByRUVMa0F6MkFQQ0ZFSHBBTlpBR1pnTmM2WElCbVBaNEpHRURNT3NKQUNBaEtLZjJBWDByWkpLVnNrRkxXRzRaUnArdDZkU1FTcVRsNDhPREJrU05IMWxpUEl4MUh1LzhMSVZKdnM3OEhJSVVRN2I0NkRxbHBHa0lJTkUxTFBhVEw1Y0xsY3FGcEd2YS8zVzUzOHF0OWVEd2UzRzQzaG1IUXZYdDNmRDRmUHArUHpNeE1Nak16eWM3T0ppY25oOXpjWExwMzcwNlBIajBvTEN5a1o4K2U5T25UaDh6TXpHTzQ2dnlzbXp1Sm16ZFBaZFhhK1F4RGtZcDkwYmVlc2hXekdEdnZUVVl2Mk1EeVZtWDZISWl5YnM1WWJsNVZ4QjJyMWpLdmk3MDdzVmlNQXdjT2NPalFJZXJxNm1ob2FLQ3BxUW0vMzU4VXRGQW9SQ1FTSVJLSkhGSFFuR0xtUEV6VEZMYkFwWWhaR3lHenhja3BVcW1DNWZ4L1RVM040SnljbkVGdXQ3dE0wN1JTSWNSQUljUUFZQUNRMFVsT2N3VFlKNlg4eERUTkNzTXc5c1ppc1QyTmpZM2xBd1lNMkowaWNQSXdndGRPQUczaEUwSzBFVHBOMDJTcXlGbkNsaFE1NStFVU41ZkxoV0VZNU9YbDRmVjY4WHE5K0h3K01qSXl5TWpJSUNzckt5bHdlWGw1ZE8vZW5mejhmQW9MQytuVnF4ZDkrdlRCNi9VZVZ0QzJybmlSbDk1Y3hZcFZsUXhiOENyTGJ5aFJLcFlHZHkzUWFsaHRaZkh2MWhQakxDNGNYM1RjQkd6ck0zTlpWaktQK1ZOTDhObmZMVi9CNG5VQjZEdVZTN3VZcU8zZnY1OURodzVSVzF0TGZYMDlqWTJOK1AxK0FvRkFVdERDNGZCaEJVM1g5YVIxbGlwcTZjVE10c3BzWWJQL0tLVVJzamIvMzdWclY4OCtmZnFNOEhnOEkxd3UxOWxDaUxPQnN5RDVWblJtTW9EQlFvakJ0cEI0dlY1eWNuSXdUVE1LYkROTmMyczhIdDhhRG9jLzNybHo1OGZqeG8ycnN5eEZLUk1uU3RyL2Q0cWNsRklLSWV6N0pBWE9NSXlrOVdaYmM5WWhPaEk1cDdDWnBvbW1hWGc4SGp3ZUQxNnZsM0E0ak0vbkl4UUtFUXdHYVdscElSQUk0UGY3YVdwcW9yR3hrWWFHQm1wcmErblZxeGY5K3ZYcitMTzA2Z2wrdDc2SWNUYy95Wk5LMURxMjJJWmNjRDJUSnc2amlGbzJyMXZEQjFWUWV2TlNWczRmVDk1eGVZcEtWc3lheHJ3My9mUWROWkdKbzB2QXY1WDFyMnhnVDZ3dlZ5NWV5Wk9UaTdyRXlhcXVybTduZGpZM055ZmRUcWVnUlNLUmRvSjJCQ3ROMkc1bmlxQ0pEcXl5ZGhiWnRkZGU2MXF5Wk1rWE16SXl2dUJ5dWNZSUljNEZCcDltMS9RdTB6VGYxM1Y5czkvdmYvL3JYLy82Kyt2V3JUTWQ0cFlVT1NHRW1jNmlTMmZOYVpvbTAxaHh1Rnl1TmlJbnBTUXJLeXZwbmpvRnp1djFKcTIzek14TXNyS3lrdTVwdDI3ZDJybW54Y1hGU3FFK3JiQjkvNmF2c0c3OU51cklwYkJzTkZOdm5zYzkwNGNkSjFHenFXWDlpMCt3ZU5rNk5wZFhFYUNRMHZHVHVmbWVlN2hoZE9jWHRlYm1acXFxcXBKV1dqcTNNMTBjVGRkMVlyRlkwa0pMRTBjVHpqaGFHc3RNcEltWDJWYVorTjczdnVkNitPR0hML0Q1Zk9kcG1uYStFT0k4SUVkZDFtMW9rVkt1ajhmajZ3T0J3TWE3N3Jwci9WLys4cGQ0R3FFem5hNnJRK1NjY1RtWmFzbWx4TitrbEpLTWpJeDJzVGV2MTVzVXVJN2liMDczdEtpb2lGNjlldEczYjErNmRldW0zc1hQR21OVHRLTHJPdnYzNzI5anBUVTFOU1d0dEtPSm82VkxEdGlDbG1LZEpkMU1oMFdHVThpa2xGcERROE93bkp5Y2kxd3UxNFZDaUltQXV1cVA4ZStVYVpwdjZicitkblYxOWRzREJ3N2Nib2xiTzZ2T2FkSFoxcHZ6MzNhQ3dTbHlVa3A4UHA5TWwxeEl0ZDdTeGQ5czY2MTc5KzV0ckxkKy9mcmg4WGpVdTZlRTdiTng2TkFoS2lzcjJ5VUhuRzZuTFdxMmxXWmJhRWNyYUlaaEpOMU0welE3RkxOUUtIU3gxK3VkcEduYUpHQ0VlbmVPSy8rT3grT3YrLzMrTndvTEM5OG1rY1UxVThXdUk1R3prdzIydXdyZzlYcVRGbHhIQW1kYmNMYjFab3ViMHoxTlRTNlVsSlRRcTFjdjlZNHBZVHQyZ3NFZysvYnQ0OENCQTFSWFY2ZE5EaHlwZkNQRjdSUXBpUUduZFNaU0xMU2ttSVhENFNsZXIzZUtFR0lLMEZlOU15ZUVLc013L2hFSUJOYm01K2V2cGJWY0phM0lPV055dHFzSzRIYTdwYk04eEJhNUkxbHZxZTVwYm00dWVYbDU5T2pSZzRLQ0FvcUxpK25UcHcvOSsvY25PenRidlZ0SzJJNk8vZnYzSjYwMFp5d3RYWElnTlphV3hrbzdrcUNKMUpoWk1CaTh4T2Z6WFNXRXVGS0pXYWNRdWRWTlRVMnJpNHFLYkV1dWpjaWxXbkgydngzdWFUdUJjN3ZkSFFxYzAzcExUUzZreHQ1S1Nrb09rejFWS0dFREFvRUFuM3p5Q1ZWVlZXMnN0T2JtNWpZMWFVZFpaQ3RzMTlOMk53OWpuV21OalkzRGMzSnl2cVpwMnRXZ2FpMDdLZHRpc2RnckJ3NGMrRnRwYWVsV2g4QVpEcEZ6eHViYVdIRjI5dFFXT1V2WVpEcjNOTlY2YzlhKzJabFQyM3JyMjdjdkF3WU1JRGMzVjcxRFN0amFXMmwyZ2lCZHhyT2pFZzViMU5JSm1yTkx3Q2xvdHBpdFdyVXFZOUtrU2RlNjNlN3BRb2pMMUdYWWRUQk5jMDBvRkhyNXFhZWVldVhCQng4TUEvR09SQzZkd0RscjROSUpuQzF1SFpXR3BHWk83Y1NDc3Q2VXNBRVFDb1hZdTNkdnV3U0JiYVcxdExRa1kybEg2Qnc0bktBSnA5dloxTlEwSWpzNyt6cE4wNjREMUpYWXhmOG02cnIrMHY3OSsvODZhTkNnYlE1WDFVaDFWUjBDSjQ4a2NCMWxUdTNZVzA1T1R0SjZTMDBzbkhIR0dXUmxaYWwzNW5RVnRvTUhEeVpkejVxYW1qWUpnaVBWcFRsRUxhMmdXUVcxYmR6TlVDZzB4ZXYxemhCQ1hLc3V1VlBTaWx2WjFOVDBVbUZoNGV0U3lyZ1F3aWx3aHRPQ3M0WE9HWWRMRmJpT1ltL3A2dDVzMTdSbno1NUoxN1IzNzk2bi9YdmlQcDErV2NNd0tDOHZaOSsrZlJ3OGVERFpFdFhjM0l6Zjd5Y1lEQ1pGTFJxTnB1MGVzQVhORVVkTEsyZzMzbmlqYThtU0pUZTYzZTRiZ1F2VXgvL1VSZE8wYWZuNStkTmlzZGc3TzNmdS9QTXR0OXp5MHNhTkcrT1dtMnBJS2R0bFZnM0RrS1pwU2szVDdGaXNkSllFeGVOeDZTd1hzajBFWnlqRS9xTnIveEVPaFVMSmRxMnlzakpjTHBjU3RsT2RwcVltOXV6WjB5YnI2V3lKT2xLeGJScTNVemk2QkpLQ3RtblRwdHdSSTBiTWNybGNONkZxems0djkwZUlMMlZuWjMvcFgvLzYxemNqa2NqeVpjdVcvZVcyMjI3elc5WmJ2Q09CazFKS1I2RzJVK0JrYWd1ZXM5ZjRTQUpYV2xwSzkrN2RsU3Q2cWxKWldVbEZSUVdWbFpWcGE5UFNGZHNleGtwTEcwUGJ0bTFiajdLeXNsdGNMdGN0d0NEMU1ULzlNQXlEeXNwS0Jnd1lZSCtyUEJLSi9PR1ZWMTc1ODNYWFhkZG9XM0QyWWNYZ3pIUXhPR2ZkbTlNOVRTMExzWXQ2MDlXOGxaU1VNSERnUUVwS1NwU3duVXBJS2RtNWN5ZWZmUEpKc3VEMmNGblAxQTZDRHR4T084dXBTU25GaHg5K21IZldXV2ZOZHJsY3M0RXk5ZkZXd3VZUU5wczk0WEQ0OTMvNjA1K1czM3JycmMxSEVEalQwWFNmMnJrZzAzVXNkSlExdFF0NkJ3d1l3T0RCZzdHNkpaU3dkV1VDZ1FDN2QrOU94dE5xYW1xU1dVOW53VzBIcnFkSWJZVktzZEswK2ZQbnUrYlBuLzlObDh2MVRWVDkyUWw4WXc5QjlRNW9xSUJ3VStJQXlPeWVPUElIUXZFUXlPM1ZtWVROL2tPN0xSUUt2ZkQxcjM5OTJlclZxMk9Xd05raVp6b0V6a3kxM3B3QzUvRjRaRWY5cHM1cElmbjUrZlRzMlpQZXZYdlR2MzkvQmcwYWROclV2SjJTd2xaZFhVMTVlVG43OSsvbjRNR0Q3VW81VXVOcHpvQnNPcmZUVGd6WVdjNUlKSEs5eCtPNUV4aW5sT1lFMFZBQnU5Y2x2aDROK1FOaDBNVEUxMDRpYkE2QjIrajMrNWQyNzk3OUZTR0VuaUp3N1Z4VVJ3ZURUTFhlVW12ZVVndDY3WktRM3IxNzA2OWZQOHJLeWs2TGNVaW5YUEtnb3FLaVRaTEFucHZXVVR6TmFhWFpnVm1uMitsSURHaWhVT2dTcjlkN2w5WHlwRGhSYlBrclZIMTQ3RUs0c1FMNmpvSVJYKzFjMW9RUVk3dDE2emJXTUl3cmEycHFsdmJ1M2Z1ZlRvRkxUVExZQ1FacldJSk1tZDluLy8rb2tneVJTSVJ3T016QWdRT1ZzSFdWZU5xT0hUdllzMmRQc2pYS0hqUFVVVHl0QTllem5kdlowTkF3T0M4djcxdENpRHVVeXB4QTRoSFk4RUxDL2Z5MFZIMlFjRmZQdlE3Y0daM3ExOU0wN1N1OWV2WDZTaXdXVy9MeHh4Ly9mdlRvMGVVT2diUExSQXpBTkUzVHRQZGIyTmxUdTJYUEtXNnBJbWNud0ZMRkxSS0pNR1RJa0ZNMjduWktDRnM0SEdiSGpoMVVWRlMwNmZlMDY5TTZpcWVsV21tV3FDWGR6bG16WnJtZWUrNjV1MTB1MXh4QXpXRSswV3hZQ29IcTQrUEd2djluR0h0VHAvdzFQUjdQN0ZHalJrMEpCb1BQVHBndzRmZWJOMitPQWJwbHZXbTJpeXFsTk8xeDVsWUNTenFISzZRS1hMcFNFV2ZZeFJhM1kxc2tvNFR0aE5EWTJNak9uVHVwcUtoSURvUjBUdVZJVjU5bS9SVnppcHJUU3RPa2xDSVVDazMyK1h6M0FsOVdDbk9TM00vaklXcE9jZHZ5UDUzT0xYWFFOeXNyNnlmdnZ2dnV4VFUxTlV0NjkrNzlsaEFpNW5CUEJhMDlxVExGZ25NS25FeTNGQ2lkZTJwWEFRd2VQSmdlUFhxY1lzTG1YOEdNVWZQWWtIc052L3Z3VVNaMm9SZGZYVjNkcHB6RGJtSlBWM1RyS09VUXRubWV4a3JUS2lzcmV4VVhGOStyYWRwM2xMcWNKQm9xamoybWRyUnVhZCtSSnpTaDhDbmMwNHQ3OWVwMWNUUWEvZlhycjcvK3V5bFRwaHl5M0ZQTktYQ0pYVFRDN01oNmM3aXFISTJiT25qdzRGTXFxZEJsTGJiOSsvZXphOWN1UHZua2syUTVoN09USUYyU0lOVktNd3pEYWFWcGtVaGt1c2ZqK1E0d1JxbkxTV1RYRzYzLzFnL3gwSS8vd2JJR0dEZmo2eXlma0FrWVZINjRpWWRlM2N2NnlnaGtaak42NUFqbVRSL0NhS3NIUExwL053dFdiT0dWdlg0Q1pGQTZ1RDkzVEIvTDlOM3JZT3pBVG44S3ZGN3Z0eTY3N0xMejYrdnJueTBvS0ZndGhIQlo3cW51aUwwSlovd3RqY0IxR0h0THRlQnNnZXZ5VTBMODVheDdaUm51U2FQbXNRY2c4QkkzbDY1ajVrc2JXVmkybFJjWFBNVGlOVnVwaXZyb08yd2lOODlmeUMyajh6ckZheTh2TDJmMzd0MUpVYlBMT1ZLYjJEc1NOV2ZHVTBxcFZWZFg5eXNvS1BpdUVPSXVwU29ubWNBaGFQd2srZCt0cjI5a1JVUEt0ZnZ4djVqeGJEbFZlQ2dkV0l5dm9aWU42OWN6b3g3V2ZtY0lKYzE3bWZQNE83d1doc0xpWW9iUnpJYXRPNW4zZUl5OEg3cVlmTmFoazFMbmRxd0lJVWJuNStjdmpzVml2M25ublhlZXYvamlpeXVGRUpyRFBZMWp0ZkxaazBUc3pLbFQzSnhiejV6TGcrellzbk80UXl3V282eXNLOWFabDdOaXpod1dyZG1HMzVlTGUrYk1DL25kc2plcDhwWnk2UTNYY0dtUm4zVVB6V0wrS2o5OUw1ek9IU1hsdkxKc0ZRdG4rY2xidTVUcEozbXAxUGJ0MjVPRnQ4NmV6OE5rUG9XejE5TlJsNlpKS1VVa0Vwbm04WGkrQjN4QnFVcG5pQzlzYi8xMy9RNFd2TnBJTE9VdVc3ZldFczNMNXNJckxtZnBoQndJN1diV0Q5N2h6YjM3V0I4YXd1U0tmV3oxWk5CMzJGaFczbm9HUmJUdy9LS1hXRmhSeGFxOU1MbStva3NJbTQzSDQ3bHQ0c1NKWTJwcmF4Y1hGUld0c1dKdm1pVnF0dlZHd25DVHFkYWJTSW5Ea2VxaU9qZW4yUUkzZE9qUUxuYmhSS0hvR3VZdm44cmt2Qlc0YjVsM0phOHRlNU1xMzJobXpyK1RpWlR6VEhrZFVNclVlZk9aTnl6S3BXY3RadFdlWFBMOE9MWXJuMWlrbEh6ODhjZnMzcjI3emNKaWUydVVQWmtqSlVtUUttckplTnIyN2R1N2w1V1ZmVi9UdEhsS1RUb1I5UlhXUDJLcytlc0hiS0FINHdhMnNLRkNUOTVsL0xWZlkyTzZBVkFlTDNrZXlCczVrYmRHcG50d0Yza2VTendIanU5U3AwVUljVzVoWWVGemtVamtpVC8rOFkrL25UMTdkcU5sdmVtMGpzZ3liRUZ6eHQ3c1FhZE9jVXRkKzVnUXVTaE5GZS95NXlmMlVqanJQM2xzNXRsZHFCeGtHTlBuRDdPTnQzUXh0akltWGptS0o3Wjl3T0lyeDdKbTFIakdYM29OTSsrWnpMQ1Q1SW5xdXM3SEgzK2M3Q1pJTGJ4TkxlZXcwdG1wV2M5a2dpQVlERjdvOC9ubUNpRW1LeVhwWkZndFV0RzltMWl3S1VMZkN5WnljM3hkRzJHenFmMXdFd3ZlYTZaMmJ4VWI0aGxjZU8wb0pqczMxQjNhelVPdlZsRlpmNGoxRlJwOXg0emxqc0ZBUE5wbFQ0L1A1N3ZuNXB0dlBudlNwRW5QRGh3NDhGMHI5aGF6WEZNaGhEQVNobHByM00zcG1xWk1Fa2tJV3p4QzNkNHR2TDUvUHdmOEp1Nk1Ya3lkdklNUFA0eHo5dGxuZDhtMWYybVRCOFB1WE03YTBTdFl0dXcxMXExZng3SkhYMlBaNzY1azhkb25tWHlDeFMwU2lhUVZOYnZ3TnQwK0FvZWxsdXA2YXJGWTdIYVh5M1VmMEVlcFNDY2swZ3cwOC96eTNWUmw5dU9KcTN1UnR5TDlYZjE3OTdGcWt6L3huN3h1REN0T3FjZnkxN0ptVXdWMUFPNXNocDNSTGJFSS9MTVUvSFlDTkUyYk5HREFnR0Yrdi84LzgvTHkvZ3hvbG51YXROeHdKQlpzajhleTNvVGxzbUthVVJxcnlxbHRDcU9qNGMzcnlhQnpoelAyM0hNNFM2dGc1ODZFcTNyMjJXZVRrWkhSdGM0UmdNL3lVYU5Sd0wrZVorYk1aZEZyZWN4OGNpbXZibHpMUTZPQXVuV3MybnhpWDF3d0dPU2pqejQ2YkoxYVNseE54R0l4WWZkOFdtYTJacHFtVmxWVjFTY2Vqei9tY3JtZVVLTFd1YW45MTBZV1Y4SzRxOGN5OVRDVHJzdXUvaHA3bnY0R0crNDlpN05DMVN4KzlsK3NDVG51TVBnOE5qNTlFOXNXWE13MUJVRmVXL0U2aS9ZYXA4cHA2cE9ibS92VGFEUjYvNnBWcTBxa2xCbldSOWtMZUtTVUxpbWxabC8vVmd4TjJONU1KQklSNFdBejFRMGhvcVlnbytnTVJvNFl6QmtGR2VqTk5SdzRjSUNLaWdwMjd0ekpSeDk5UkRBWTdHSVdtNitJdkZ3Z3NJWUYwMlpSdm5BaGViVnJXTFZxSFZzclAyQnlTUzNyeWdGdkdhTk9ZTElrRUFpMHNkU2NMVksyb0RuSGQ5dXVwMVdmMWlickdRd0dKL2g4dnZ1RUVKY3EyZWprWkJpcytMOERCSUFOeTEraWRIbnJUUnVXLzRVSis3L0NxNWQ1cWRWZDVCWGtVT1J4VVRSNEdOZVViR05oUlMwYnFtRmlmZ3VWWVFOZlhqZEtzc0JYMEorWnc3SjVxVHJJNXAwdGNNN2dVK1owZWIzZTJWT21UQ25kdTNmdk0yZWNjY1o3VnR6TlRpd0lJWVJobXFacEwzaHVHM2R6aVc3ZE1tVkxNRUs0ZWpjYmF6OGh0N0F2WldjT1lxakRYYldQczg4K3U4dE1CM0hqbThnOTg2OWs2NEkxN0NrdnB5cGF3cDFQTHNYLzBBSit0KzUzTEk1NUtUenJVdTZZdDVCYlRsQlRVWE56YzFMVTdHYjIrdnI2ZHU3bllUS2Z5WGhhTkJyOWh0dnR2aDgxL0xGcmtObVRzalA3Y0tFajVGRmJlWWh0ZnBQYzRtTEdueUZZcy94bDVtMkZjVE8reHZJSk9SQnE0SU1HQUMrRm1WQzUvblV1L1o5R2NzZGN6RnUzOWllUE1PWFZZVUFqTDgvYjZYcEdqNE5yZXNtQUFRTUdORFEwUEpXZm4vK0s1WnFLRk5jVVo5ek5Gam1QSjFOMEwrd21QZWdFQTM2YWF6L2hnOW9xYXVPWGNxSFYyZURzVVQzNzdMUHAxcTFiMTRpeGxVMS9rclhUbmQ4ZXo1M1B2c3FkSitFRk5UVTFmV3BSY3lRSnRGdHV1Y1cxZVBIaUgyaWE5aUNuMlc2SExrM0JjQ1pmZXluT3JNNzYzLytabWVzakRMdGtJbytlbDBtdHB5K0ZXL2V6WWZuTFRIb3ZIMTkxTGR2OGtIdm1FS2IyZ2hMUEVNYXRXYytHVGV1WVZGMUVtZDdNaG1vVDh2b3hjMWdtRkE4OTVVNmJFS0tzUjQ4ZXZ3eUZRbjNHangrLzVLT1BQdEljMXB0dWlWa3k3aGFQeDl0a1RLWFhLM01LZWxQWUcyTEJJTzVvTTQyTnliS1JOc2ZaWjUvZDZVZU9kNm9QZkdOajR4RkZMWjM3bVpva09IVG9VTCtDZ29MN2hSQ3psVkowTVlxSEp1YXVIWWFpTDB4a09adFlzR1l2NjNkVlEyWWU0eTRZd2Z5ckJ5VW1GUlFNNGRsN1hTeGFzWVUxZTZ2WlFBWm5EVHVMTzZhUFlXbzNvR0RncVhyMjNKbVptZlBlZSsrOTR0ZGZmLzAzbDE5K2VhVnR1Vm5XVzl5K1k3cWtRdUtMajh6Y0FqSmxDODNONllYTkZyZk8zRi9hYVFaTk9rWE56bjdhb3VhTXFhV3gxT3pXS00wMFRSRUlCTDZRbVpuNWdKcVoxb1hac0xSTjk4RnhwY2NBR0RmcmMzbm9veDAwZVNJd0RHUDF6cDA3Rnc4Yk5td0xFTFd5cGpxUVhBK29hWm9VUXBqV2RGNXA3VlNRenBIajlrVGU3dDI3VTFCUVFLOWV2WklES3p1enVIVUtpODNwZnFhSzJ1SGNUNnZmTStsK2hzUGh5N3hlNzRPb3liWmRtek12Z28wdmZINlBmUnJnY3JtbURCMDZ0S0N5c3ZMcGtwS1N0NnhFZ20yNUlZVEFtVlN3ZzI2dGxsc3lGc2ZoakovaHc0ZDNTcmYwcEF1Yk0xSGdGTFhHeHNhMEV6cFMzTStrcUVXajBSbHV0L3RCNEV5bERGMmMvSUdKS1J6SGU4SkhKNS9zOFRuRTNjYjI2ZE1udjY2dTdxbkN3c0svU1NtZFNRVWRSMUxCSVdEU2NsM2JxVms2Z1JOQ01IejQ4RTZYVURpcHd1WXM2WERHMUd4Uk81ejc2UlMxV0N4Mmg4dmxlb2lUMXZDbE9PNk11QnI4aDQ3ZlRMWWVBeEtQZVpvaGhCaFVVRkR3VUZOVFUwNzM3dDMveTJHNXRRbEYyZUlXajhmVGlsdEhvbVlmSTBhTTZGU2xJQ2ROMklMQllJZUpnalIxYXNLNTQ5TXBhcnF1ejlVMDdTRWdRNm5CS2NhNFdjZG5pbTZQQVREbSt0UDVUQloxNjladGZrdExTM1pPVHM3dm5XNnBVN1RTaVp1ZFhFZ1Z0RlJoMHpTTkVTTkdrSjJkM1NsK1llMWtQS216VGVvb3NwL0N1VUhLanFrOS9mVFRIbDNYZjZocDJrSWxhcWNvN2d6NDBoMEpGL0t6dUovalpwMXl0V3VmZ296czdPd0hRcUhRN1ZkZWVXVzJvMVBCQTdpdFRnV1hhWnJDTUF6aDZGSWdHbzBLKy9NWURBYngrLzAwTlRWUlgxL1BvVU9IcUt5c3BMeThuSTgvL3BoSUpOSXBmbG5Yd3c4L2ZFS2ZVTmQxL3YzdmY3Y1pQZVMwMUZKaWFzTGV5RzRuQ3FTVTR0MTMzODM1eWxlKzhpTk4wMzZnUHYybkFjVkRFN0d4VUpQVlMzcVVWdG81VjUvUUtSNVNTdngrZjZldThmSjRQT2RObXpZTmw4dTFkZDI2ZGZFT3BuZklOSWtEa2VxU09wcnMyeHhGUlVXNFhLN1RSOWlrbEd6WnNxV05xS1hiSkpVNmRzZ3BhanQyN09neGRPalFIMnFhOWwzMWlUK055T3dPSmFNU0l1ZkxTVGhLbmd5SVdUMk11Y1dRWFpnUXNpR1RvUFNDeE0rY1FMcUNzQUc0M2U2eDU1OS92aWd1THQ3K3Q3LzlUWGRtUmpzU042Y0FPdXZaVWdYTy9scGNYSHhTUng2ZDBCaGJSNzJmVHZlem81SU9LYVVvTHk4djZOKy8vNE5DaUx2VkovMDBKYmRYNGxBTmNwOEpuODkzKzIyMzNhWjV2ZDRsdDk5K2V5MjB4czRjVnBsaEdJYnRhYlZKS0RqamE4NDRtOHZsd3Q1YVAzejQ4Rk5mMk96SnR4Mk5IanBNOFczU1VsT2lwbEFjVjNHNzdhYWJiaUlhalQ0M1o4NmNCcWRsbGs3Y2NHUkxPeEsyVkhFN1daTjRUNGdyV2w1ZW50d21kZkRnd1E3SGVhY3I2YkJqYXBiN09VZGRqb3JPU2xkeFJWUGMwakVqUjQ2VVFvaC92L25tbTRabGpiVnpTMVBFcmwyOHpYa09uTzZweStVaVB6Ly8xTFBZOXUvZmY5UXh0WFIxYWs4Ly9iUm41TWlSRDJxYWRvLzY2Q2dVeDUrTWpJemJIM2pnZ2ZpbVRadWVYYjE2TmVrc045TTBEV2d0QmJIS1JlVGgzRkdYeTRYVnBuWEN0MTk5cnNKV1hWMmRYSkdYdW5qbGNERTFaNTNhN05tekg5UTA3ZnZxOGxNb1BqOHlNek8vdFdMRmlsaDJkdlp2YlVGemlKdkVXdEpzK2FiSm1Kc1FRanJkVU9kaHU2TzJ1SjNJdmFXZm03RFpHOXFkN21kSDQ3eFRZMm9weGJjUHFzdE9vZmo4eWNySytrNGdFSWprNXViK2tiWlpVcGxheEd0L1h5U1FIY1haYkt2TkZyY1QxVFQvdVFoYk9CeHVJMnIyNHBYbTV1YkR1cC9XS085a201VFZVYUJRS0U0UU9UazUzMmxzYkF6MTZORmpwV1cxU1ZKaWJKYTRPUzAySVlTUXRxZzVCYzYyMkd4aE8rZWNjOGpNek94NndpYWxaTWVPSGUxMkZLUmFhdFkyS2VjU1kreUZLOUZvZEliVis2azZDaFNLRTB0RzkrN2Q1MVJYVndlTGk0di9MaFA5VjIwKzMvWlhlMkNsWmEyMXNkeWNGcHZUSmZYNWZJd2NPZkp6cjNFNzdzTG1GTFhVN0tlOTk3T2p5YmVtYVlwd09IeVpOYVZETmJRckZDZUhvcUtpb3J2Mjd0M3JQK09NTS82Wllyblo4VGE3OUFPSG9BbE4wMlJIY1RaYjJESXlNajczTXBEakttd1ZGUlhzMmJPSHFxcXFwS1dXNm40NnVncElLZXZRQW9IQUY2eDVhbXIwa0VKeEVoRkNET3Jmdi8vdG16ZHZiaG85ZXZUSGx1V1duTnNtaEdoanRaR1NJVTJOczduZGJ0eHVOMTZ2RjYvWFMwWkdCZ01IRHV6OHdsWmRYWjBVdGVycTZxU28yZjJmRHZlelRhdVVjNXgzWm1ibUE2Z2hrUXBGcDBEVHRDK09HREZpOXNxVkt4K2RObTFhbFVQY3BHTjJHNlpwbW5hbU5KM1Zac2ZhbkJsU2UwTHY1NVVwUFM3Q0ZnZ0VrcE02cXF1cjJ6UzFPMk5xNmNvNnBKVGlsbHR1Y1ZrN0N0UTRiNFdpRStGeXVTNi80b29yYW9jT0hmclk5dTNielJSeHN6T24wdDRxYjR1Yk01bGdXMnoyVjYvWG0zUkpzN0t5UHBjNWJwOVoyS1NVN1ZxbG5KWmF1cWIyMUF6bzRzV0xmNkFXcnlnVW5ST3YxM3ZqdSsrK1c1T2JtL3Q3UzlETUZIR1RxWmxTVGRQYVdHN3BTajk4UGgrWm1abU1HalhxdUNjVFByT3c3ZHk1azMzNzlpWExPbzVtVFY1S0J2UWJxbFpOb2VqYzVPVGszRk5kWFgyb3VMajQ3NENaeGkxdEUzT3p5ajZTNG5hNFdGdFdWaFpEaGd6cFBNSldXVm5acmxhdGcxWXAwbVZBZzhIZ0JHdVpzZHI3cVZCMGJ0eEZSVVYzYk4yNjlkQ3dZY1BldDZ3ejIwcHJseW1OeCtPeW80TGRkTEcyN094c1NrcU8zMGIyVHkwb1RVMU5hV3ZWT2hBMWtiS2xYVHR3NEVBZm44OTNIMm9BalVMUkpSQkNsQTBlUFBpV0YxOTg4Y0FOTjl4d3dPR1NKaTI0bFBxMnBFdWFUdGljNHBhVmxVVk9UczV4R3lEZy9qVDdHdzNUWk0rL3QxSzVldy9WKzZ0b09GUkRjMzA5Z2FabVF2NEFrV0NJU0NoRU5CSkJqOFNFcnNlSTYzRmhHcWFRTWlGc1BUM2hlYUpwMzZYcWNsR2NuRStwQmk0UGFKN0V3RXB2dGpvblI0SEw1YnA0MnJScEZjQlR0TWJiVE5Ja0UxTEZ6WmxJY0xxa3prVEN5SkVqajh2MDNVOWxzWlh2L1lUS3FvTlUxOVRSME5CSXM5OVBTMHVRVUNoTU9CSWhFbzBTamNYUVk3clE0M0hpY1NNeE5saEtJU1ZhckhyMzdVS0l1OVJsb2pocFNCUGlVU0FLc1JZSU5VSkdMbVRrMmQ2VW9nTXlNakp1cnErdnJ5Z29LUGdyWUhTVVRCQkNTRHZlbG1xNU9kMVJwN0RsNU9Rd2VQRGdFeTlzQjZ0cjJGZFp4YUhxV3VvYkdtbHE5aE1JdEJBTWhRaUZJMFFpVWFMUkdIcE1KeUZxY1JJeE5TbWtsQ0pZdGUxQ2w4dDFuN284RkoxTDZBd0lONEVlaHB5ZUNZdE8wU0g1K2ZsM2JOMjZ0Y0tLdDVrcGg1UlN5b1MyQ2VMeGVESTdHbzFHNlVqY01qTXprK1Vmdlh2M1BuSENGZ3FGK1dSL0pRY1AxVkJiWDA5alV6TW9NaklCQUFBZ0FFbEVRVlQrUUFzdFNWR0xFSTNGaU9reDlIaGM2UEU0aHRFNmdtajdodi90N3ZQNTVnSjkxS1doNkpURW8rQS9tQkEzbCtkemY3cDE2OVoxbWwvOW9vc3VPcGE3OXdadUF2YVNpTEcxRVRaQVdpVmRwbUVZeE9OeEdZdkZSRFFhbGZhMnE1YVdsdVMycStycWFxcXFxcWlvcUdEbnpwMlVsWldSa2ZIcFc4V1BTZGoyN3R0UDFjRnFhdXRzVVF2UUVuUllhckVZc1ppT3JzZUZyc2N4REJORFdpNG9pTEl6Qm54ZndHVDE2VkYwYXN3NGhPb1R1eFZPQUdWbmZyYSt5ZkpkMndIdzlmM2lwMzZNYU5XN0FGU2QrZVN4L05nbFlUTzJiVkQ1OTM5TFlxdThnWjFJQUNrUVVrZ3BNRTFKWEVMVWdHQmNhQ0ltTldKb0lvSkxoSENKSUc2WEg3ZXJDWStuRG8vM0VBY1haWEhHR1dkdzVtMGZmYXJmNTZqdDdmMVZCNmlzT2toTmJSMzFqVTAwK3dNRVdvS0V3bUVpNFVSY0xSYUxFZE4xZEQxTzNEQXdERk5JTXhGWGl4emNPVTNUdEhucVU2UG9NcGJiMGE3Nk80M0oxTHpmZW5mZ2p5ZVFtTVRqQTd5V3dlU1NTSmNFVFNLRmlSUUdramdtT2dZeDRrUmxuSWpVQ2Nzb1FUTkt3QXpUYUFTcGkvdXByYTJscHFibVU3K3VveEsyUUVzTCt5c1BjS2ltbHZyNlJwcWIvUVJhV2hMSkFxZW9XZFphc2w3TnlvQlc3M2l2bjhmai9wNjZEQlJkaW5CeklzbWdPTHhQNnVrKzY5bWlXYjA3RURkTmdtWTZ4RTJYcGtpS0d6b1JxUk9TVVZyTUNINGpUR004bUhSUFc0eFB0NEQ1cUZ6UlQvWlZjYUM2aHJyNkJocWJFM0cxWURCTXlKRUJqU1dTQmJhb1lab1NLYVdRU0swZ3Y4ZDNnUytvUytBVTh0YWFZd1NlMjBIa1g5VVlWYUV1OFpwZGZiUEpPSzhudWQ4Y2d0Yk5leFEvSVJON1MzMjVKKzAxZi9MWEozbUdhL241MWIxUDl0bkQ5L09iS0xpaWpzWXhMeE9PdGQ0aUVLTXZ6UnZ4ZFdyNXRlMlNTakNFTTVrQTBrUktBeE1CYU5JUUxpR2tTMnE0aFlaYnV2Q1lVYnpDamM5d296VTNrNW1aU2FVZVlhanIyRVB5UjdUWTlsY2RwT3JnSVdycjZtbXdrZ1dKREtpenNWMXY2NEphR2RDRUM3cHJ1aXJ0T1BYd1AvRXh3UlY3dTR5b0FSaFZRWUlyOXVKLzR1T2oveUU5ck43c284Q25lVzUrYitCUEpqZ3NOaS9nQWR3U3FRR2FCR0ZDV3BjMEtuWENVcmRjMGdoK3Y1K21waVlPNlUwYzBCdVByOFVXRElhb1BIQ1E2dG82R2hxYWt2VnF3WkF0YWpHaWxxakY0M0VSTjZ3c3FPV0NWbjY4dnBmSDQvNk9ldHRQUFNML3F1bXlyejI2cWY3bzd4eVBkc25mc2ZvZmovRFMzbUlLM0g1YUdnTzRoMDFrY0dBTGU1cjhOSWVMR2YrTm16aTM2UGhtZlh0NXV0MEVmSnpPYXBOSUNVS2FTRk1BQmxMR3BTazBZVWczY2FKb3VIRVJsaTY4cGhzUkROTGMzRXl0SGlWSHk2QzdLNHNzelhkOExMWkV2VnBOc2w3TkZyVkVFVzRzVVlTYkdCaHB1YUFtcGpSdEYxUVVGeFhkQzR4Uk1uQnFJUU02WmtPMHk3NStvemFNR2RDUDhwZnR1akcyZU9HWCtPcnM3M0xydHk4blkrTmE2cys5Z3h2dWVKQ1pZLzI4dmE3aXVEK2ZRSXdDcGx0V213L3dTaXZXWm1tTklHRzFZVnR0Y1dtSUdBWXhhUkNWT2hFWkl5U2poRUloV2xwYWFJd0hxWTM3cVlvMUhCOVg5RkIxTFFjT1ZWTmIxNUFvN1docG9TVVlJaHdKRTdXS2NHTkphODJ3dXd2c0xLZ0lIZGd4V2RPRXN0Wk9RVVN1cDJ2L0FvWkU2K3Evd3hIeGtKMmJtMWdha3BsUGRrNHgvZnNsZnVlYzNFemlrYy9OeGY3bUgvLzR4M1BUdUtSMmxsU2taa25qR09qRWlVa3JVMnJxUkNJUlFxRVFUVWFJK25pQVEzb3pOYnIvc3dtYkhvOWJMbWc5RFZacHh5ZnZyT0t2ZjkvQTN1WW9rVmcwVVlTcjY4U2pBZEhVN0Nlc3QzWVh6SnB4amN2bjlkNmI3ckUzLy9SNlNzKzdseGNQcE54UTl6SXp6cHZHUSsrbGNSMys3eWVNdldrWjVVcFRUaU95eVBqMUxmVForVFd5Q3gwWDdJVHp5Rjk5QzcxMzNrM3ZkNjZueHpmN3Q3bUlqM1M3NHZPblQ1OCtNd2VJN2hrT3E4MWpoYjAwYWNYYVpFTFlFdUxXSmtzYUowSkMyTUxoY0tJRUpCNmlMaDdnb041SVhCcWZYdGlTcFIwTmpUVDUvYlFFZzBSMEEwdy9GZVhWaEdLNm5RVWxiaVJNZGRsYWlLczk5L2pQN3dhKzNPR3p4ajVrMGE5ZXAvYW9YbUlMYTFaOVFNblVTeWhUMTh6cFl4Vk9ta0MzUzFNYTAwdkhrUC8wQ0Z3Yi8wbjlWWCtrN3BkMXVPKytuTzVmeXpxNjJ4VW5CRTNUSnE0KzR3ZFRIVmFicDFYY3BJdWt1TFc2cERwRzRwQnhZbEluR28wU2lVUUlHaEg4Um9qR2VJdmxralorT21GcjlnYzRjS2c2VWRyUjFKem9BdzJHaU1STnBBRFpjcENxeG9qZEJ5cmloa3k0MTFJS3BCUU41UjhNZHJsY2N3NzdyRG5aOE1aL3N1aWZMVWQraFhWdjg5SjdnNWg1VVM5MXhad3U1UFluNzRFQkdLOVZZanBDZWU1SlorS3AzVW56STl1SmJXOUUvKzgzYWRuZ3dqZXA3MUhkcmpoeGRITmwzZlRINHR2N09jV050clZ0d2xuYjVyVGFZc1NKeFdKRW8xRkNNa2FMR2FIWkNGRWZiNkU2M2tUQUNCKzdzRlVkU0hRWE5EUTJPVnFtd3NUaUpyaTdrWjhoQ2RmWEVkVGoxdURJNUtRU0laRmFYcDc0MXVabFB5bVpObmt5cFdNbU0vYWFlU3o2Wjl2QW4zZmdWZHd6R1Y3NjZYTnNQa0lNdXZhTnY3UDVDNWN6dWZCdzRyZVB6VnYyNFZmWFV5Y1RxQjU0Si9URjdTd0RHM3NSUmUvZFFON1lqa2JUdVBEY1BZSE11azAwLzNmYlVwTDQwdi9pME9WdkVZdWwvSWpQZFZTM2QwVUdYRDNuVTlXd0ZWODJqMXN2c3djM25zbVZjKy9tSEd0UHNmdWNPL251Tjg0NXhrYzBpUDdnZVE2TWFGdkRkaGo2bnA4eitHcFNFd2xDdUt4RFF4TkpxODFJSkJLSVc0a0VYZGVKeFdLRVpZeVFHU1ZnUkdpS0I2azdveS9oMzF4RXo5ZHZTaDVGLzNGbXUza3NiY285cW12ck9GUlRTNTA5dGNOcW1RcEhvc1RpRWt4QlpsRTNYQWVhOERlN1JKYTN0UThVaVFnZjJINUozYXI1ZDh4Nk5zWU5QMXZDczROaDYvS2ZNK2YreHpocjFVS21KaS93ZkNaLzc5dHN1T2JuUFBUY1ZieDZkMGV6SmcveHlpdjdHRDlyTEhuMnR3Njh6WUtmTG1OenJEL1gzUDF0SmdlZVk4N1NGc3A2dDdENXFWRTgrdFJNaHZtVXBweHd2SVZrL2VKaXNrdmp4RmYraytZTlJYVDd5Wm13SjRycmdiRkV2dk15TGRzTnFOcEg1TlVvK3A0T1lpVkR4OUo5R29SdS9RQzlhRkpLQ01OQU9nVFFOV0VjT2VPaVJPN2JkM1MzbnlZYzJGZkJDOC8reHhIdk4rbUtyL0hGOHk4NnFzZjBYVFNRZ3VlbUFoQmF1WTJtSDZ3OThzOW9ucHZlNlBmQU94ZnQvK2ttSUc0ZGlYNVNwQW5DTkVHQXhBQnBJSVdPSVYzRUVaYXdSV1Nja0JuREp5SmtHbDZhbTNiUXdCZW85NFNURzY1aWRhT1E3T3BZMkE0Y1RHUkJtNXFhQ2JRa0NuSERZYXNJMTVCSWFhRExESEo5UWpSR3drUTBqOUJNS1VpOE9NM3I5ZDZWZDk2M1diazhuN0krT1FCTW5IRTV3NVl0NDRNS21EckM4V1NGbHpELzdwZVo5S3ZIZVA2YXA3a2xYU0g0M3RkNTZlQW81cDJmay96VytxWEw0UGJIV2RsN0s0c2V1SXNadWRONTlybXJLQVBXLy9SZVh0bzVrMkVqbE02YzhMakt0UFBKcW4yVDJ2dGlaUHppTW9xdTkrUC8xbjhUM2dQaWExZFJjRVVQV3JiWFFkVWVBai9hMDhHajlDRDdKeU1Rci82ZHdJY0dUT3JBb252Z2VncG41Q044Y2VJci8wSHozMExIY1B1cFQ1LytBN24va1NlTzYyTkczNmpnd09Dbmp2bm5TbjA5cndIK0RlaUFMcVdNQzd2T1RhS1I2RXJBQk9LWVVwTkN4SVVoUlR5ZXNOcGtuQWh1UW1iQ0pXMm9yR0hIZFM4UXp5aG1lR2EvSTd1aSs2dGFYZEJtZjhJRlRmU0JKa1lSNllZRWFSQ1B4OEhud3lVa2hoN0hxdkxSN3YvYnJ1dUZFRmY2Q25Pby9jZGpUTHZ5U29hZU41blN5LzZERGJFWTZUek9rdW5mNXA2QnUzbmlwMytuTXMzdFcxZjlIZjlGVnpIZVlZSDV2RkM1WXg5YmQrNm1QT29sTDdDUHlnQkFDLzVBNG5iRmlVZjY0NGlpSG5oSEZlUHJDMmJNaDZjdzhXWm9lUzVrNE1qWkxOZjFFOGp0K3duK1grNXpXRjd0WFNMOXViOVJlKzFmYVBqaEx1U2tTZlM0cWNjeDNLNDRrYmlFZHRtbWdUKzV3T0dTZWxwcjI1SWRDWmhPbDVURTlGMWQxNU5kQ1JFWlMzUWxHR0dhakNCMWV1Q3dIUWx1Z0ppdWM2aTZwdFVGRGJaT3c3WHIxZUptUXRpTWVGekVEWUhISllRUk40VmhDbTFvWHFGTGM3bnZCQ2hmOWhDelh1ckZ3bC85bnFsRDh2RUYvczZNeWM5MThQU0R1T1dCcTNocDFuTXNlbU42cXF5eDdCOHhKdjlzRkU3UGN2VGRQK0RLNTVieHU0cEIzUHlySll5dWY1bTUzNzZMeGJRUUhUaUxKNGVvaStta0NOdmYzc0JmZEQ3Wk0rTEVubnFWNW0wOXlQdVBhUlRsdVlCcUFuY2RJWnZsTFNiN213UFFpcURIUDB1dHYySnVCTkR0Lys0a2ErbC9VZnVyT2l1bTJraThEdUxiNnpEUDZrdkJ0S0c0WC9nWDhXVE05UWkzSzA0b1BUM2RyaDJoOWY3WEZ2T2dibGx1VHBkVWdwQVNhVnJpSnVQU0ZDSWVseTZYQ3gwelVRSWlkY0ptakJZalFyTVdwc0Zvb1VadnBzaWRoMGU0MGd2YkFhc1h0TEdweVdwd1Q4eFlpOW9ON3JwTzNBQ2thWThqd2hRdU5CRVhwcFRDazkvdm04QTRhR0h6UDNlVE4rYWJUQitTbjNpR1FBdUh5dy80UnN4aS9wV3ZjL05UeThpTmVaTWxIZEgzWG1hTjd4S1dwcnFWdnY1TXZmc0hURTI2dEZmeDVBdFhFWTJDVDhYV1RpSWhvaStzSmZxQy9mOEEvaHYzZ2RjRnNhT29QWXJWMFRKN09TR254VDNxZkFwL2trWHcxcldFOS9qeFBuQTkzVXUzMFREN3c2Ukl5U2lKbkJzdXZBOWNlNWpiRlNjdFRJSDQ0cklCZDA4ZXNmZUJWVW1YRkd5WDFHcTVRaVJNcDBUNWg1WVlUb2t1VFhSY1JORUp5eGcrMDBPTEViRUtkMXM0cERmUnoxdlEvam5Ea1FpSGFscG5yTFVFZzRuQmtkRldhMDNYZGVKU0lqR0ZFVTh1T2haQ0NIRk5XZSs4RmlHK21YaTRITW9HNWxQM3IyVTgvOC9kYkgzdjd6eDAvMUkraUVHMFEzWExZZUxkMytaU2dnUmFyM0xXdmJTUm9pc3ZaOWhSbmp3bGFwMlVWRkhyVzBydXo4L0RWOWpleFRUMzFCSGY3ampxb2hDTkpyNWZGMFBmV0ljWU40YThiNWJpTHUyQlo5Slk4cTdJSXY3V25rVDErbUZ2VjV4TWVyaXpyNzA3NTh1NXBEVElKMXhScWFWMkpCaUdJUXpEd0ZrQ2ttaVVqeEUwSXdTczhVYTF1cCtJMmI0OVRtdFhzNVpjbmRjcWFyb2V4N0NHajVpbWFTMW1RVWlFZUd6dTJObGVXdlZuOU8wLzVLRVJoM2ppZTdjeDdZRVYrQytieGN6aE9VVHJEMU96Vm5nSjgrOGUyZnFITmZBMkwvMnpGOWRjMWw5ZEVhY2FmZnVUT2FrVVg5OWpMOEdRYS8rUCtoL3VRWHh0RWtWLy93YUZQeTVGdnJxV3hsOVdIOVh0aXBPSFFBeTlzK2VsbDlLMmFMZE5INmxkdEdzbWhBM0RTSlIvNk5MdUpVMklXOGgyU1kwUTlVWUwxWHBUKytmNzV6OWVZbGQ1UmJzRkxmNFd5eVZ0M1R3bG90SEVMb080WVFocFNtM3Jodi9OSDF4MnhqdHduSnNDRHJ6TjgvL01ZZXIwVVJTcGE2SlRjbURjeTEzNjlmZlpjTlV4bUJzRGp1cHVobUZRV1ZuSmdBRURqdnFodS9ET2d3NTU0NDAzMHY5aGtuTFBILzd3aHp1ZWYvNzVPaUFJaElDd0VDSm11YWlHRU1LMHRsbEphOUdMdExkWTJjdGVjbkp5Nk5hdEcvbjUrUlFYRjFOU1VzS2dRWVBhN0VodzE5VzNyMW16VnVjbHJEVnIwMVE4Ym1CWTFwcVVDWFV0R3pqZ2x1TXVhZ0I5THVDVzZVbzhGS2MrRXlkTzdEU3ZwWFV0Nk9kRzZhaFJveVk5Ly96eksrMVlteEJDeHlyL0VFS1lRb2prbWo3bjNsRjdXM3hPVGc1NWVYbms1K2RUVkZSRTc5Njk2ZCsvUDRNR0RhS3NyRldLTkhzcFN6RG9xRm16ZHhmWW9tYjV1NlpwQ3ROcW5kcjBmNnR5WFM3dEZuVnBLaFNLbzZWYnQyN1h6SjA3TnpmcGprcnBzZHpScEV1YVdOZHBDbXU3bGJCTFB4THJCeEt0VnZhbUs3L2ZUMk5qSXpVMU5ZUkNyZldLbWoxbkxSUU90NDc1dHVKcXVwNFV0bmJXMm9oaFEyWUJnOVJiZFhyaTZwVjFlcngyemFYZTdPT0lFS0xzdnZ2dXU1ajJTUVNYbEZKTFRONld3alJOTEdGTDFyVFo0bVkzeU5zejIrd1Zmb2NPSFdwOTJ4SWRCZ2tYTkdLTitVNjRvRHB4bzYyMUppMXI3Y2F2WCsxeXVWdzNxYmZwOU1VM3BxRHJ2dll2RkI2RENxcGFrZU5OZm43K1YwdExTNzFwckRiTnR0b3NjV3RudGRuaVpvODFDZ2FEQkFJQkdoc2JxYTJ0SlJKSkxIL1JuTmFhTXd0cUQ0ODBEQVBUTUszbExBbHJiY21UaTI0RVZPUFNhVXplUFdlVGRYVi9YSDJ6dTQ2bDFqZUw3T2xua0RkbjJOSC9rQ2RUdmRuSDMybzcrKzIzMzU1d05GYmI0U3czcDlYVzNOemN4bXB6Si9ZWFJOUEcxaEsxSkNhR1phMVpGcHZtZHJ0dlZHL1A2WTNXelV2MyswZWQ0cDlBRGJ3NTZzMytIQ2d1THI0Q2VOTVN0cGlVMGkyRWNKTklKR2d5Z2JES1BxUmhHQ0llajh2VVdGc2tFbWxqdGRYVjFWRlNVb0xiS3VXd2Q0SW1sVEZ1MVpFWXBvRXBKVkpLSklqUXdSMVRnQXZVVzZNNDVjbnNCa0o4L3M5akduQm9LN1RVbkRaYnNUUTRiK2VyaTBjTnZ1S09qWmJGNWtGS0hZRkxTZ3dTaGhTbU5ER2tnU0YxNG1hVXVCRW1IZytpeHdQRVlrMUVvZzJFSXpXMGhBL1FIUHlFK3BiZEhQTC9PeUZzeVdMY3VHMnRHUmkyRzJwS3BKbFl6Z0pTZUQyZUdlcUtWNXp5dUgzZ3kvdjhueWZVQ0pXYlFRK2RkcWQ0WU4vaVNjQUhTYXNOUEVJU1IwZ1hDRk1paFpSZ1Npa053OFF3VE9LR2lXNFk2THBCVEk4VDFYWENrU2pCY0pSQU1FeFRvSVc2eG1hMGFDVGhndXB4dlcwVzFISkRyYVFCVWlLYTltNFpJWVM0VmwzMWlsUGJuSEJCVHM4VDgxd3ROYWVscUFGNDNPNnIvdmUzQy9zbExiWkVuQzFsTndLWVVnb2pFV3NUY1NNUis5ZU5PSG84VGl5bUU0MVo0aFlLMHh3STBkQVVRSE9XZHlRTGNXMFgxRFFUYm1qQ1d0T3lzN091VTFlOTRwUzMxUEo2SitKcko0TG1BNmYxNlI0N1lzaUZwR3l6UWxvWlVva21wUlNtbEppbXhMQVRDYmE0eFExaThUalJtRTRrR2lNWWlSSUlobWdNQk5HU1RlNU9VVXRhYTNiQ0FMSHFUNy9MMERSTkNadmkxRVM0d0pzTnViMFMvejVSbk9hYjVuT3lNcTZZT1dWQ2htMjFTVnZjRXJQYUJJbVpSaUpodFVrTXd4UUpsOVNhL3FISGllbHhJcGJWMWhLTzRBOEUwZXdzcUc2NW9IYlNJR210V1NVZWt5NjY0RnFnbi9vRUtFNE5JZE1TMXBrM0I3SUxvWHNKYmZiOG5TaTY4RUxtNDBUSm8zTnZIWmZHSFhWSjBLUzBoWTJrMVJZM1RPSnhFOTIyMnZSV3F5MFVqaElJaFhIcnVJbmp4c0JGWEFvTUtZUWhCWVlsYUpacWF1N0MwdWtuSkVPa1VDaE9LM29XZEw4RWVOdGh0Ym1GeElXUVd1SXZrSlJTSWd3cE1Vd3BEZE1RY2NPUXR1V214MU9zdGxBRXJkVU5qU2RIaFNSYXA2UjlpTWJHeHVGQ2lNdlVXNkJRZEQyaWIvNkdvWGU4ek5aTyt2cmNMdGNsYTVjc1NFMGl1Q3lyTFRuT1NKclNLdGcxTGN1dE5kWm1KeElTVmxzRWQ3SnV6UkkyTTlrVG1oQTFRT1RrNUh4TlhSNEt4UW1rOGpXdXVQTVZ0clYrL01udE9aREowNmN4ZjBvSmh5MUVhZHpGaS8vclovejBNU2R3eWZndUhycnhLWmFsamtiem5NdmlsYk9ZZklTZi91THd3ZU9BVDFLc05oMkJoaVJSK2lHUXBta2xFcXpTRHp0ODFqYldGbXNWdHRha2dUWEZ3elJ0TjFSb21uYTF1dElVaWhPTVp4QUxmanVIRzNvQTZGUnVXczJjUjU5aWJ2YVBlUGJDd3pUeU4yN2pkOHVxeUx0OERHVW50SEhDemFVUFBzYXo0NC85SjNPek15Y0IvMDNiT0pzYlpOeXFraGFtRldzelRGTWFpVDVTbVlpM0dlaEdhNnd0SEkyaHBicWc5b0hWaUJvTUJpOEJocW1yVEtFNHFTcEh5WmdwM0R4RVovT1dHaXIvNTFkdDNjdnFONWcyN1JmODhyK2VZZXdEYjdCSDM4WGMyUTh6ZDVOMXUxN05TNC8vaWduVDVqRDArb1hNV1Z1ZDNFVVNyZHpFUS9jL3pNaHAzMlhvamIvZzloVzdxTFZ1Vy8vNGc0ejkwWitaZS84dm1IVGpmWXk4NHhtZTMzNk1kWGV4U3A2WjgxMnVXRnFaZU03R1RkeCsvWVBjL3FhMTRyejZJeFkrOE1qUVFmMzZEYlVFcmRVZGxiaE1LVFhEbENKdW1DSnFtQmlteE5RakhLenpVeCt6eXovQzdQN3czN3k1UDhUdURXK2gyYUtXTHI0R0NKL1BkNVc2cUJTS2s0MU83ZlozV0xiRHc3QWgrWlJjT0k3Uk5SK3h5bHJSV3Z2K1Iyd3RPWmV2WFhzbkczOTZFYVdlTTNsMHljTThPc2I2OFpvcWFvZC9nMWRYL29xMXM0dFp2K1JsMXJRQXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyazg5Y1Z4bm0wbnZ2WSswZkZySjBURDJMWG5nL0tYeEhoYmVFVys2OUNQNytaMTZzOUxQdU55dlpQUHdxRmw2WUI3RUtGdnpvUlRZUHVZN1gvL3I0ZWM0NG03UXlvNENtQ1NGY0FqQk5Jb2JFTUVGQ011YVdHSzBHcG1IUzgreHpFNjZvdy8zRWJuYTNEazBJY2FXNnFCU0trNkZsdTVuLy8rWXdQeGxqNjh2RTZiT1pQeWtQT0lkcmhxeGs4WnVWekN2Tlo5MzZLc291dks3am1GcmZjN2xqVWpGNVFONlljeWg3K2cxcWd4RGQ4VFlyZ2lONGR1YVppVEg4SldPWVAvMGRKcXgrbi9JcGx3SlFPT0pMVEM1T1dJMmpSNVRBK21vcUljM1kvaml2UFRLSFVzZDNMcnpuNXl5ZGxJV3ZkQXFQWHI2TkdRdWZKQzlZd3J3bngxRUVSTGU4d1lyZ0NKNmNlU2I5dkZ3Q0xFMjEyb1JJZENJZ2hLbUJRRXJNaFBVbFRNT1VpVGliaGlIQnRGeFNkNnExWnJ1aGdBaUh3MU9BdnVvS1V5aE9kb3d0bFR3bWZ2bE1Gcnk4amZMcCtieTJJNThyYnlzK1dxODI0WUxxRUcwTUVDMCtpeExIMkxtaW52bjRHcXM3dE1wOG55ckc1bUhZVnk5aTlNc3ZVdjdsNjVodS9VN1JSaitCcGdwdXYvNTlnRDREQnZRZjhja24rOTVyRzJkREJ3UVNJWVFRbWtDYTFoUnowelN0amdRd3BVd0ttNVlxYXBhbEJpQzhYdThVZFhVcEZKMlRvdkZqR1YzelBzdit2b1hOSmVPWVduTHNqK0hya1ltdnVwcktXT3YzYW1zYWlQWW9QczZMbEVLc1g3YWF6U1VEOEwyMW1oZXR4V0crbkR4eWUzNko1U3NmWS92S3g5aSs4aisrbUdxeFNkbmFpV0JLaVNHbE1HV3FLMm9tRnBTYWlkSVB6UkkwZTZpYnNNczhMRGRVQ1p0QzBWbkpPWXRyaGpmdzRyS1BLSmt3Z3FTdWVUUHhFYUt5NmNoQmZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODQ5cnFVaTBTMnZNUGV0Zk9ZOU9JZEh2K3huMGVOdlV3bjRobzlsTWh0WnRLSUNQNUNoTjE2VVlxMGxWL1JKcEdaYW9tYUNFRWlpRVYzb1JweHd3RTlkSEtTWnFHdHpweVlOYkRjMEZBcGRyTnhRaGFJems4WEVTWVB3YmZCejVYakhxUGFTYzdqNTNIZDQ2TTRmcyszQmhUeDZ1SWZ3RG1UZWo3L09nbDh2WmRJMFA5SHNmQ1orZFRaUFR2azBvOS9ieDlqZ0xCYTlNSWtQZnIyQm9objNjVU94QjJaTVkvSTlMekIzOVZrc256S01oVCtleG9KZkwyWENNajlSYjE2ZnkyWitlOGcvbHYzbmh5VDdSbkZKbVJnWmpoQkNBeUdsa0Y2WElLcEhPVmdmdytWeTQ5TWtwbFgrSVhyMjdFazBHaFd4V0l4NFBDNU0wOVNrbEM1ZDEzK21hZHAzMU1XalVCd2RuMmF2S0IrditteVcwS1kvTW1sNUNjdC9lUkVscDhoNURJWWlTM0xHWHZzaTBBSUVnS0NBTUlLb1FPaENZR2hDbUc2WEpyMGVGejZ2UjJiNnZHVDZmR1JsK3NqT3pFQkx6WWFTcUYvVE5FMmJwQzVWaGFMekVtMnM0UGtWMnlqNThybW5qS2dCWkdYNnprdm5pbUxOYWNOdXM1SlNKRG9SVEd1RmdaSHNSTkJTaW5LUlVvcUdob1pocUdVdENrWG5aYy9MWEhIck03elU0eW9XVHNrN3BYNDFJY1RacTUvNVVlOE94RTFJaVVDQ0thMU1xTE9IMURyY3FRM3ZKSHBETDFKWGprTFJpU205aXJVclQ5M2ErVEZubnprTTJHOExtd1NYa0dnSTIyS1RRb0tVZHUrb2RkaGJyWkpaVVZwSEZBbVh5M1dodW5JVUNzWEpvbnRlemlqTFNrdE8ra2djc2xXcnBOMC9LcE9WSFlaMWFLa1cyL2UrOXoyWEVHS2lPclVLaGVKazRYRzd6aHQ1WnIrVWh2aGtuSzExbEJHV0t5cmJ1cU5haWh2S3d3OC9mQUhRVFoxYWhVSnhFdW4yL0NQZkxYVmFiVExSRkovWUZpL0JtcTZMdEVRdE9kTElhYkZaQ0ovUGQ1NDZwd3FGNG1SVFd0SnJTSHRYRkszVkhVMFlaYVoxR0xJMUVhbzV5enhJekY0N1g1MVNoVUp4c3NuSnpqekhZYkcxS2Z1dzlVcGFXVkpwN1Q4MlpHS3NrV1piYTFKS2NlMjExN3FFRU1waVV5Z1VKeDIzeS9XRkFiM3lYU2tXbThzU05FMUtCRmh4dGpidWFHdU1UUUJpeVpJbFh3UnkxQ2xWS0JTZHdXaGI5dWg5L1oyaUpxMTlvemhXOHlYaWJNNmFOb2ZGQnBDUmtmRUZkUzRWQ2tWbjRjd0JmZHNrRUdnYlp5TTF6aWFsaVNuTlZ1VWpVYjgyUnAxS2hVTFJXZWlXbXpXRWRzbUR0bkUySEhFMjAweTBXYmtkWTRxRUVPSmNkU29WQ2tWbndlTjJENmQ5akMzWkw0cXpuaTNwanJaYWJPemF0YXNuTUZpZFNvVkMwVmtRUWd6NjVmZG01WFFrYmlSVUxWblBacnVsZG94TjlPblRSelc5S3hTS1RzZWw1NS9ieHhJeWErQWtHaEpoVDlXVldKVWRWaGVDbEk3c2dzZmpVY0ttVUNnNkhYMkxDL283ckxSMnRXeFlJNHhhdXhBU3dvYVVVcmhjcnJQVktWUW9GSjJObkt6TU14eWkxa2JZckRoYndpT1ZDTXNWRlpyZEl5cUVVTUttVUNnNkhSNlBlMUNLcUxrY0ZodXQ0cFpJSU5pdUtOWWR6bEtuVUtGUWREWTBJWVk0ckxUMkpSOXBFZ2dhSUdwcWFnWnp1SFdCQ29WQ2NTU3FOekYzem9NTW5Yb2ZjOWJyeC9PUmZTc2Z2Ny9RS1dqU21zZEdzdVREVGlBNExMYWNuSnhCNmwxUktFNVgvTHg0L3k5WVZBbFV2OEcwNzc5QjVURS9oczZhRi83Q3VwNVhzZmFsWC9Ea2VFL2JtN2UveElRYmw3SW05dWxlNGREU2ZrV2tMZEsxT3hBU2dxYnJCdUc0WmJHNTNlNHk5ZVlxRktjcExidDRzM0VnRjVaQTdaWnRSSWNQK2hUTFljTFVOdXFVakJqVVpxdDhrdEtMZUhMZUZNWjdQOTFMTE95UlY1ekdIUlZ0RHlrTTB4UzZBVzRwcGRBMHJWUzl1d3JGNmNaVzV0NzZJdXVDWWVwaUhqYmYrQkhSWUlDb3Q1SUpOZGV4ZHQ0NWJlTlRzVXBlZlByUExGNWZSUzJaRER0M0NndnZ1b0JoT1pVODgvMW5lR0pIbk5pT1JZeGRQWlpuRjEvRGFPZlA3bGpMN1kvb1BQcW5iekQremQ4d2NobmNVQnBtM1k1cWFtT1pUTHpwTmg2ZFZJeXY4VzFtM1BvT2VSZG1Vcm05Z2RvbUtQdnlOQmJjT0tSUFcwc3RHVjhUSmxKb2dHN2F4bU0wNFlvS0lRYXFOMW1oT04wWXhxTy9mWVNWTS9veWF1WjMyZmlIT2R4Uk1vajV6enpDVzZtaVJvZzFqei9ERTQxamVIYkpZMnhmY2lmWEJGY3o2L0ZOMUZMQ25iKzhqL25EM1l5NmFSNGJVMFV0SFRVTk1HVVdhMy83Q0cvZE81RDFTMTVtVFV1cmE4endHMWk1K0dFMlBqT05vdlV2OHBNM1E3MHR5Nnk5dUFGU0NPRjJpY1FkM043RURVS0lBZXBOVmloT1IzUzI3Z2hRZGtZeHRGVHlRYXd2dzNxa2MxZTNzR3g5SnROdnVvaGhPVUJPQ1RmY05vNjg5OTloWGVPbmVOcWVaM0hOaU1UYXdMelNNeW1MTlZBYnRHOHM1c0l4QlFsaDdYRU9kMHpJWmVNN08wbzZFRFY3c1Fza0J4VkozTllOU3RnVWl0T015dFhQTUdOWkpmNm1NR3g1a0hXRXFRdDYySHhyQlRjLytEM3VkQWFvbXZ6VVVrQnBUNmM0OWFXRWo5alRDUFQ0REMvRXlqTkVkU0JOREs2b09BLytIZW1YWXJFSkNacEltYVpyeTV1MmE5ZXVZaUJEdmMwS3hlbEZ5WlE3ZWV1WmFZenYreVdXL3VFUlhwMTVKbWRkZFRjYmY1c2lhZ0RkOHlpaW5qMDFiZDNKV3ZJbzdmSDV2czdLeWdiSXpzMzQyYnhiY2pxMDJGTFFDZ29LZXF1M1dLRTRUYW1wb0prdkJxQUFBQ0FBU1VSQlZMeTRoREtnZkU4OUphWEY2ZStYTTRLWjQ4T3NlT0Z0dHJZQUxaVzh1UFFOYXMvOUVoT1B1N0JWc2VwL0svQUQwY3EzZWVMTk1PTW5uTWtYQjUrUjV4Q3kxbnEyRktScDR2YjVmTVhxM1ZVb1RrLzhsUTFRTW9ZOC9KUlhlaWliNHVuZ25sbE12dmRPYXAvK003Tm1yOFFmeTZScy9CU2V2V3NNUmNmOVZlV1NWN21hYWRmdm9qS1d4K2dwTi9Eb3BEeWFkL2ZJNjhCYWExMUdKUkNHYVVnUmpVYnY5SHE5VDZ1M1dLSDRiQmlHUVdWbEpRTUdIRVBJK3VOVjZzUTVhWHliR2JlK3o1Vy9uY01OS1paZ1pYWGRnbjVmdnZrZElHQWZBa0lJSWdJUkV3SkRFOEowYVpwMGE1cFdwTTZtUXFIbzdHUmwrUEljYm1nYlM4MDU1UU1rbXFacEJlcVVLUlNLem83WDQyNFhZeU5kakExd0N5SHkxU2xUS0JTZGdoNFhzSHpsQldsdmNydmJDRnY3UXlKc21kUDRiQlVvQ29WQ2NVSndhVm82VjVRMlZwdFZxS3NCZWVxVUtSU0t6bzZtaVJ6U3hkWmtHM0VURXRDRUVFcllGQXBGcDBlSTlzS1dhcm5aWFZVYWtLMU9tVUtoNlBUQ2x0QXFwL3VacHV0QUpvVXRTNTB5aFVMUkJTeTJ6QlJSYzJpZWJDTndHcENwVHBsQ29lZ0NaQnpHRFcxanRXbWs3YWRYS0JTS1RvZTN2WGVhVHRaUXdxWlFLSTZHRUp0WFBNT0U2Ny9MME8rL1J2bkpFN1oyQ1lOMkFpZGI1NGNyRklwVGxTMS9adExDajRpaXMyN1JRdVp1K2hRYnBDcmY0YUZsZmlZL3ZKRHR2N3lVNDdja3BaNTEvL01HYTZxUDZzNnV3MWhzMWtaNE1HbHRTMUFvRktjb1d6ZFZVRFJtSUQ2cWVHMVBNUmNPOFJ6N2d6UTJVSnZkbHd1SEh1OWNZd092clZqTmEwZTNGa3ZyMEVxelRMWEVKbmdRVWtxcDNucUY0clBUMmFaN2xQL1BrOHhZVVlXL1NjZlhQUk9mbmxqYVVwamRrNXQvM0g2WVpPMm1sNW43bTNkWVg2UGo2M2ttMDJkOW5mbmpDNGl1WDhxRXh6K2lMZ2k1MlptTW4zMGZ6MDVxVy80YXJkekVnbCsvd2lzNy9FU3ppNW40MVdrc25ING1SY0M2UmZjeE4zczJHNzkxWnVMTzYzL0QwTi9rcy96SGVTeTRmeTFibThLUW5Vdlo1YmZ4NmxjcjB5NXplZlMyY3lnQnhQQ3AwNEFnaWVrZWZxQUZDQXFJU3RDQk9DQTFFcGFiUXFFNHhTajc2aHcyL3ZZbXB2WThoMGQvK3dodjNYc09mUytjemNZL3BKbVFXL2thc3g3OWlKSlo4L2h3NVM5WWUxcys2eDVmd3FJOTRCcy9pNDBQanFPdys3azgrYWRIMm9rYXNRb1dMZndMVzRmY3dOcVZqL0hoenliaFc3MkVPYXZyRC84Q1N5NWw1UjltTTcxN0psUG5Qc0tyc3daYU43UmY1dkxRV2orSDFTcVJtQk9lR01xbW9RR0d1Z1FVaWxPVW1pcktldzVpbUJmS3QxZFROcnh2MnJ0dFh2ME9sY09uTUc5OEFUNDhGSTJaeXJ6aERheFlYWEhFcDRodWVac1Z3UkhNbTVtdzBId2xZNWcvdlMrYlY3Ly9LWk1NN1plNXJIOXJHLzcyV3RXK1Y5VENEY1JJcmxOUUtCU25CbHQ1Nkk2L3NLYkpUMTBzazJrM3JrN3NETTEraEFudlQrUFZlV1BhTkluWE5vYkpLeTV3ZkMrTGtwSmMvSlgxUkJtWXNvb3ZSZGdhQTBTTHoycXpLTG1vWno2K3htcHFqOE52a2xqbUVzYWYwS3FqUXVNWTdxeFFLTG9LdzFpNCtHR1dmam1mQys5NmtJMS9tTVhVbmlNU0xtbUtxQUVVOWNqRVgxMlBQL2tkbmNxYUFIazlDZzRyYWdDK0hwbjRxcXVwZENoSmJVMEQwUjdGaWJIaG43R2d6RnJtUWw1N3JaSXBYOXNJVzFoZEJBckZxVWlJOG1vb0s4bUN4bXJLdmNXVWRTQXlvNmQ4aVpKL3IyWFJKajlSRW9tRUo5N1BaL3FVZ1VkOEZ0K0lpNWp1Zlo5Rnl5cW9CYUxWbTFpd29vclJVODZsRENncHljZS81U1BXTitwRUd5dDRmbldGUTZFOCtMdzZ0VFgxUkpQZlM3L01KUThpUi9Wcnk0UXJHbElYZ0VKeEt0TEFCNVVGbkZVQzdLMml0dWVnanV2UFNpNWw2ZHd3YzMvekNDTWZzYktpOTg1bVh1bFJQSTEzSVBOKy9IVVcvSG9wazZiNWlXYm5NL0dyczNseVNtSTRkOW5sMTNIUGxxWGMvdi9XRWUwK2dLa2o4c2xOL25CZnJwa3lrRm0vZVlSSmUrN2tyWm5RMFRJWEtXVTRqWFhtK0w5QUNJa3BUU21rbEI4QUk5VkZvRkI4TnRReWwrUEFZWmE1bUZKdWNZMjQ2b2UwbG5zNEY3cEVCVUlYZ3JnbWhLbEpLZjNxYkNvVWlzNk9sTEtsWTJ2Tm5wMmJRQU9Vc0NrVWlrNlBhY29XaDRESmRJSm1lYVM0cFpSTlFnaDExaFFLeGNubk1NdGNETU1JSE1aaWMrb2FtcFN5UVoxTmhVTFIyWWtiaGovRllwUHB4VTJnU1NucjFTbFRLQlNkbldoTTkzZmdma3JIdWdNQU5NTXc2dFFwVXlnVW5aMVFKQnFnZld4TnRuZEVRZE4xdlZxZE1vVkMwZGxwOGdjN2NrV1RZbWRuQzl5UlNLUW1KeWRIblRXRm9oUHh5WUVhZFJKUytHRDdua0RIb2lhdEZhT0pRV3p1Z3djUEhpd3NMRlJuVGFIb1JBem8wMU9kaEJTcTZ4dnRjZy9URmpXUjhENmw3WUlLSWRBMGdUWnk1TWdhanJZSFM2RlFLRTRPa2JtL1dobzZqQ3Y2Lzl0NzgvaW82bnYvLy9VNTIreExsc2tlRWhLV0VFUkFLK0R2aWxoLzZOV3FiUzlZV3JTOVNsdSthUHVyMUc4TDFRcTl0cUJ0b2N0RmJ5dFdyMWhic0ZxZ1ZXcFJSQlRVRmxjVU5TeWFSQ0FRUXNqQ3pHU1ptWFBPNS9mSG5IUHltWk16U2JCc3d1ZjFlQndUQW1hWk0vUE02NzE5M3RUYUNZKytvM2IzODhlTmk0dnJUQldsOUlBTlpEcmozREpFRExCUlN1aysvdEJ4Y1hHZHFkSjAvYUFOYWhsdXpkeVliQVNrYWJEcHV2NHhmK2k0dUxqT1ZDV1Rhck9EWTNOcytTQWt2Zk9BYXByV3lCODZMaTZ1TTFYeDdwNW1oeEEwYSt1SGxLWmhza0ZSK041a0xpNnVNMEVwYkZqNkE4eC9UVTMvc1dBYWZuN0haMW94aEJ3YklTUmRHUVZBT3pvNjZ2bUR5Y1YxWmluUjlCWVczWGszeGw5M0cycSs5a3NzMk56RW5ESTdORURVYlg0ZWEzZWZyTE5rVzdCcDdTdlkzbkdpUDYrTTZ4YjlDcnZXL1JMdkxCZ0hCVUJEL2I0MkJtWTIxMmFPVXhIcnZ3SUFXbEZSOFJGd25JOFpGeGZYeVZQeVF5eForaVIyVk0zQStzZC9oczBMejBmVHd3OWd3ZmJqZ1ZRUGRyeXdFV3Yybkt6VC8xdXdiczFMMk5aeGNqNjdTNUVSVEFlU2lUdSt2N3pEN3RRSW9JTms5TFNsQ3dna0hZcWExbTRYZ0FuOEdjWEZkZm9WM2Y0U05tQVNIcDE3ZnZvNDczRlhZT24xYitPYXA5NUQ2NVRKaURpY05MdHA2Zi9Ga3NMYjhQTGNTdXg0OU9lWTkydzdvbDBxa251V1lmempBT1FSV0h6ZlhGeWZBMFEzUDRCSmF5VmNWOWlPSFEzdGFGVktjZjNjRzdGNFN2bzQ3OFMyaHpCK1RTSFdyL3c4YWdFQUgyTFIxeDVHOUxzL3gzMFh0dUNSTysvRGlrWVZpVlFQdHY3d0IxZ053RFg4YWp6KzA4dXlIeitlb1c1c1g3c2FTNTdhaGZvdUlGZzJCblBtZmhtM2pnczYvRnU2eHdZMUhZQk9BUW9LQ3FTM3ZoTmlMQmFsZWpySGhuUmx0RTRRQkE0MkxxNHpRRTBOTFVEVlpBTXFhVldQcmtUd3FROVJqOG5wN1U4RGFPTE5QOERyTjBleCtzNjdzVzdLUXF6L1FsNy9mOVNwWXNLaS80dmxaVEphdHorS0dmKzlHbFVyYnNPTmhZTjlkNFg0K2svdndkZXhFL05tUEkzcWV4Y05iVGNDRzJhL3RSNjNQUVVzL09uUGNYMVpDblViZjQrYjcxbVA2b2R2eHBXMkNVOWQxK3ZSUDdlbUE5Q0oyWlJMUVRWS0lZR0FDQ0lFUWdnRlFGVlZyZU5QSnk2dU0wT0pMaFV1UmNwY2ZlZVQ0RXFwSnk1blZEQUNVOHJTSzRValU2N0dEUVVmNDIvdm5hSUR0UlVacmxRUFdqdWlpTUtMMnF1L2ljMFB6TUkwaDdGMVhVdnVRLy84R2hPQ0Vpb1FBSlJDQTFNOEFFQjdlbm8rNEU4bkxxNHpReTZmaEVUU0JyRXVGUWxaR25UUDV5ZFRBR1U1UUxUejFHempkSTJiZ2NlL093YTcxanlBNlYrNUM5UC9hejAydEtpT1AxdXlOMzdRQmpRTjlwWVBRaWhKVDhKVFF2cEdxdWpldlhzNTJMaTR6aEJWMXhRQ2V6NUVYVVo0Mm9SbzJVZ2poeVVEU0NGeHd0YWR4OURVQWdURG5qUjRGQm11Vk9xa1ZSUVRMUzFJakw0TTkvMTBFVjcvMDEyNGIyb1BWdDY5R21zZENoSFI5Z010QnNBMEJtckdaVlJFS1FVRklCQ1N2a3ppVFo0OCtTaUFEL2xUaW92ckRIQnNGMXlCNitYWHNlU2hPdFRIdTlHNit5VXNXTnVPSzc4d0xwMWZ5eWxGYmNGQi9PM2xKa1NSUXV2dTU3SHFmZFgyV1R3b3k1RlIvL1l1MUNlQlJEeUtLQXZDSXp1eGFYYzNnQlRxTnorTlZVY3FjYTJadkI5ZWllcU9YZmpiZTkwQXVsRzMrU1ZzNnJSL2wwR1U1YlJqKzl0TmlBS0lkblFQR1lTdDI1L0FOWGMrZ1UwdEtRQmVSQW9EY0NYN2c3UTNnWStPSGQ3Wmc2eXRIdWxMcHdDSUFKbWtpd2hXOFFDQXJ1djYyNElnak9SUEt5NnUweXlsRWdzWHpjS1MzenlKYTJhM0ErRlNYSG5EclZnK3hXdjhnekxNLy9abG1QZmZ2OEtFMzhzb1BlOENYSGxlQUUwWm4wVEd0SnRtNE1wN25zWTFNNThFd2hXWWY5ZjNjR3VOOGRjK0wzWTkvaXRNZXE4ZDBaeEtYTC93eHI3Q1FlRy9ZZWxOSCtLMmV4WmhWZEtEQ1pkZWdDbWw5bSt5RXJmTW5ZeDV2L2tWSnZ3ZUNKVCtHKzY3YnlhbURhSFh2K3dMTitQQmp2Vlk5djBmNExZdXdGVlFpZXUvZTZOUjRlMXIwS1dVZnVBVWhwSjBWVlNuNmVQWEFFS29MS2JkR2lFRVJCUkZXZGQxQ1lEYzA5TnpxOHZsK2hsL1ZuRnhIYjgrVFF1VG81c2Z3S1NuUitDWis2NFlZbnZHNmRIaG94Mi9MTDdzUDE5RmVrbHlISmxMa25zQmtoSUlWRUtJTGdrQ1ZTU0JLb3FjenJHWmxkRm9OUG8yZjNweWNYR2RLZHJkY0dDZnphMnhPVFpLakpFcW96R1hrblNPalFwc25EcHIxcXkzRFNweWNYRnhuVzdGdi9hRDVTM0lySVJtZ00yOENDR1VrTDRUZENWQ2lIRktPUFN0VzdmcWxOTHRoSkRwL0RIbDRqcDdGWngrSzNhZjRhOXlWZFBlYW1ydDdBYzFZNVNLQXNSd2JlYU1hQnBxYkI4YmpMZTZxcXJiK1czbjR1STYzWXJHdTk5M0NFUFpjSlNtWTFCWWJvMlk3UjdHSDZpWlo0dkZZcS96aDVTTGkrdDBhKy9IQnhzR2dockpPRG1YUUNCR0g1c2dJQ1BIQmtELzFyZSt0UjNBTWY2d2NuRnhuVVlkKzhhaVh6ZGxnWnBEamcyVUNBU0NRS2dnR0k2TkVYM3l5U2RWWGRkZjVvOHJGeGVYa3lnOStWOGpwYXF2MVRVZVlzTlFOUk51Zldld01lRW5DQkVnRUNGZFBDQ0VtSDF1RklDZVNxVmVjYmxjMS9KYnlNWEZCYVM3WVErblBEaVNVS0NCSUo3UVR1clhhMnRyMjVrdERLWHBBZ0tsNXRRQkNGS1VBRlFFcUFpcWkybXdBVll2bTA0cHBTMHRMYThNR3phTTMwMHVMaTdvRk5nUkN3S3VBUHg1UWZoOGZoU2U1Sy81NFVkL3IzZUFtZ1pBTTFsRkNLRkVFQ0FJQW1SWmhxSzQ0SEs1NEhhNzA4Y1dtWVVEMDdGVlZsYnVCdkErdjZWY1hGeUhVMjdBRlVCaFVRbDhQdjhwQ0hWcDNkeHZmcjNORm9hcUJ0UnNSeGFaUFd5Q2tWOUxnMDRRQkFGTW5zMkNtNnFxVy9ndDVlTGlPcEpRNEE4RVQ5blg2K3JxZWczT3ViVytpbWpha0JrdEhnSUVnY0NDbWloWTdSNW1LQXJqZjlTajBlaEwvSlp5Y1ozYm9oVFFxSkRkcWJWdHg4cnZmUVdmdS94aVRML3FQL0REdnpjREFKcWYvQ1l1dmVSaTQvb20vdHc4OUs5WlgvOVJIVEx6YTdiQ0FYVExpQm1UQm9JZ2dCaFFFd1VSa3VuWUdMaFJTcW1lbjUvL2lwN2V2bHpLYnk4WDE3a3BRb0I0VXN1U1U0dmg1ZnNXNDFsOEN5dWUrZytNVkdLSUlRQUFLSjcxTUxaOUlZRkUrOSt4NE1abmp1ZExIcnIyYzFmdHQ0V2d4bVVQUXlrMFZZY2twNkVtc283TnNHOU9TMGMxVGRPZTQ3ZVdpNHZMV2MzNDRNTWthcS8rSEVZR0FMZ0NDTEJINExwY2NCM251dUtlbnA1dDJkd2FJZENRc1hLUFVsM1hxSjUyYkZRUVJJaUNDRkh2N08vWXpMbFJBSG9zRnRzY0RvZS96bThnRnhjWEUzOWk0NTMvaWZ0M0pKR01KNEZmWEl2UC9RS0FNZ1YzL25rSnBycUc5amxlKytNeVBQamtkdXlQS3lpYWVBM21mZis3eU85c2ZOY0dOYXR3WUxSNTZBUklBODM0VE1sNEhPM3hPQVJQQkZWbFBvakVuUWFiZWVtNm5nRzMzTnpjelR3YzVlTGl5bFFlcnY3cE03Z2FlN0h5aHJuWS8vVy80ZDdweDdlSllkK1RQOENQLzE2Qk94L2NoS201Y2J5MjhuYjgrSHUvUGZUZTFwODBHc1pLdFlNTmxPb2doSUlRS2dvaVJLSWhxUko0d2lFRWpUWVBVUlFnZW5JZ3BDMmNrREV2eXBSVWRVM1ROdklieWNYRmRlSzBGeHYvK2lGcXYvcGRUQzEyQWE0OFRMN2xHNWg0OU9tWDRKaGI2ejlLUlVoNk94VWhBREhDVUVFVUlZb2lSRW1DSUlxaTVkak1rQlI5Ky91MHpzNU9Eall1THE0VHFIYTB0L3RSVkJ6bys1Q3JBZ0Z2MjQ1c1lhZ0Z0NHcyRHdBZ1NFTXRYUTBWUlJHU0tLYkJac0tOZ1pyVnp4YUpSRjVCZWtzOEZ4Y1gxd2xRTG5KejR6amNGck0rUW51Yjkvem1qUVAyYW1qS2hCckpQREhYT0NrMy9mK3lVQk5GQ1pJVzY2dUttbStaWTR5c0FkUmtNcm1CM3d3dUxxNVBySXcxZ2FOdzlSZEhvdTZSMytMbDVnU0FOcnp5MndkZVF2OUpnNHpDZ1hXd3BNRW9RUlJBb05ORWtrSVVDWFFLU0pJSWljWWdzWTZOeWJVUnBqcXFIVHAwNk8rVmxaVUwrZDNoNHVJYWlwcWYvQ2ErZkYvZnF1SjNicndZOXdPWTlNTk4rTVhuQXFpWTlYUDhWOXNTM0QvdlN2dzRya0FMalhqWHdhM1pHM01wVE9NbENCQmtCWDZ0Ry9HT0kyanNKSkQ5WlJpWG13TTVNQkpreElnUjZPM3RSVzl2TDBra0VraWxVa1JWVmFMcnVrQXBsWkRlek9wU1ZmV1BnaUJjeVc4WkY1ZXpQazFicW9ZcVNvRzNZMkVVVnB5OHJaeXFxcjQ0dktKc0pZQmU5RzJqTXE5dVFrZ0NRSW9Rb2hKQ2RGRVVxU1RKVkZFVXVOd3U2bmE3NFhGNzRQVjY0ZlA3RVF3RUlFaVNaRHEyak9xb1BSenQ3dTUrbWo5MXViak9MUkVDU0VSSFY5ZkoyL0hVM0h6b1ZZY1FOQVZBSllSa2JxVXkyQ1FJQWtSUm9GWnVUUkloU1JKa1NZS3NLSDNGQTNzUndWWWQxZSsvLy80TkFBN3dXODNGZFc2cFFFbWdLM1p5RHRXbWxEYjkxNDhXNzJMQWxyS0ZvVHJNSTRyTW5RYlcyRlFmdHlSUlNvTk5scUVvU3A5alkvTnNnaUNBb2FNT1FMdnJycnQ2VXFuVU9uNmJ1YmpPTFJVcENkQkVIRWVhbTA2NGM0dkg0ODg5dittNWxKTmJBNGc5djVhR216RVhhb2VhSk11UUZRVXVsd3VTSktVL2FQd2pLb29pMFRTTkNvSUFUZE1vNDlyVUF3Y08vTFdxcXVxNy9GWnpjWjFiNGVnRmdTaU9KTHB4dUMyTzJGRVJYY2tUYzRMdUs2Kzg4bllXdDZZQzFCeDhUM09JR3RKMWFKcEdOVTJGcXFhUVNvbElKa1ZJdlNKNlpRazlMcVVQYkV5dWpRMUhNMlpIUjR3WXNVdFYxZldDSU16Z3Q1dUw2OXlDVzZGYlJhRTdCa3FCekZVcG4weUpaT3B2bHkxYWROVG0xRklBVWdSUVFjd3dGRlFnb0NJQlpCRlFKTUN0RUhnVXdPc0N2RzRnNEFWQ2ZpQTNDQlRrQUlJc3k3QzVOdGdINDQxUkt3M3BTUVFlam5KeG5lT1FPeEhhM1hqZ1ZRZTNsdEhta2JGaXp6aDNUUlRUb2Fna2lwQWtFYklrUXBZa0tJb010MHVCMStQdUE1c29pdVpiYW9hbHpKSGhWblUwUHo5L0M2WDBWWDU3dWJpNFBxazBUZDgrWWViOHhnSGNtdFozL2xyYVhJbUVVRkVnRUFXUlNxSUlVVXpEVFpZa0tMSUV0eUxENDNiQjczVkRVQlFGc2l6RDd0eHNEYnRXRVFHQTJ0WFY5UVMvTlZ4Y1hKOVVCdzYzdmpDQVcxTU50NmFUOUpaM0toQkFFSWpoMUFSSWttQTROUkdLTE1GbHVUVVhBbDVQSDlnY2lnam1pRlhHN0NnQWJmcjA2ZXNvcFh6WkN4Y1gxM0ZMcDdSdTZsZS8vMzRXdDJiTWgvWVZEZEpnTTl5YUtGRFRxYVhiTzJ4dXplTkdNT0NENEhLNWtBVnVHYTZORFVkZmYvMTF0YmUzOTNGK2k3aTR1STVYUjlvNm4yMXE3V1NobGpTdU5OU0llWkpIdW45Tk1QWWFtQzBlYkc1TmtmcmNtcy90UXNEblJZNGRiRGE0c2E3TlBoaXZybG16NWtrQTlmdzJjWEZ4RFZXVTBvWWYzZitISFlPRW9kWkp1UVJBMnEwSkVNVjBiazJTUk1paVpCVU1YSVpiODNrOUNBVzh5QTBISUhnOEhqakJ6VlloWlVOU0RZQTJkKzdjYUc5djd4LzRyZUxpNGhxcVdqdWlHeDVhOTN6Q3lhMFJJR1VVRFRUQVBFZ3k3ZGhFVVRDS0JRSmtVWVFzRzdrMTJZQ2F4NFdBejROd3dJLzhuRkFhYkc2M3UxODRtcVg5STZQMVk4T0dEVThBYU9DM2k0dUxhd2h1clhIWncwKytaWU1hNjlqNldqelNSUU1JaEVDMGlnWnB0MmJPaENxeURMZExoc2Vsd08vMUlCVHdJUzhjUUZGZURnU2Z6d2UzMjIyNU5oWnc5dFlQVzY1Ti9mS1h2OXpSMDlQekdMOWxYRnhjZzdxMTltTlAvL0t4cDN0dElhanAxbFNRdmhWN3Bsc1RCVUxUYmkwZGhxYUJsbGtKOVhuY0NQZzh5QW1tM1pva2lSRDhmais4WG0rR2F6dWUxbzgvL2VsUGoxTksrUW03WEZ4Y0E3bTFQWGYvNW85dk9rRE5kRzBPTFI1RzBVQVVqUllQZXpPdURLL2JCYi9QY0d1aEFJcnljd0FBUWlBUWdNL25nejBrWmVEbTFQcGhWVWkvOFkxdkhPdnU3djQ5djNWY1hGeloxTnphL3ZRRFR6NDNXRzR0b3lGWE1OeWFKQXEwSDlRVUdSNlhLOE90UlhKRGNCdUxUSVZ3T0F6V3RRMVFKYzNxMm1iTm1yV0dVdm82djMxY1hGeDI2YnIrNXZSdi9IQ0hBOVFHY0d1QUtCQklnamxkMERkaDRKSmx1SlYwTTY3ZjUwRTQ0RU5lT0lpaS9GenJhd281T1RrSUJvT1dhM1BLdGJHdWpka2FiMjFyM3JoeFl6SWFqVDdLYnlFWEY1ZGREVTJIbjluVmVFakY0SlZRSFNCVVNCOGtTVVZCZ0NTSmhsdExRMDJSbWZZT2p4dEJueGM1d1FBS2NzUHdldnAybXdyNStma0loOE1JQkFMd2VyMFczRXpITmxUWEZnNkhOK2k2L25kK0c3bTR1RXlsVlBYNWtaK2J0OHZCcVEzdTFzUk10eVliQlFPUDJ4aWQ4bmtRRHZxUW54TkVVU1FuNCtzS0JRVUZ5TTNOUlRBWWhOL3Z0M0p0RGhNSkE3azJsUkNTT25Ma0NIZHRYRnhjbG5ic3F0K0V6R1pjQzJ5R1cxT0g2dFpjVm51SE1Ucmw5eUkzRkVCQlhoZytqenNUYkNVbEpjalB6MGRPVGc3TVFzSlFjbTFtTVlGMWJjWEZ4ZjlJcFZJUDg5dkp4Y1hWMWRPN1p2THM3eCt3UVMyUnphMEpSaVhVeWEwcHNnU1h5Mnp2Y0NIZzkxcnRIU1dSdkg1ZlcvQjRQQ2dxS2tKZVhoNUNvVkRXUW9KVGhkVGUxMFlJU1gzd3dRZVBBVGpJYnlzWDE3a3JDaHo4NitaL2JvTnp3WUIxYXhsOWExWWwxTzdXRktOZzRIYW4yenY4WHVTRmdpakt6NEhIcmZRSEd3Q1VsSlFnRW9tQUxTUjR2VjY0WEM1a0c1TFBsbXViT0hGaWZYZDM5NFA4MW5KeG5iczZjclRqeWEvZSthc09tMVBMNnRaSWhsc1RNODVaY3lreVhJb0NyMXVCejJzVURFSUJSSEpES0NuSWMvejZBZ0FvaW9LaW9pSmtLeVRZcXFUVW5FcXdyK2d6WGR2VXFWTWYwM1g5Ulg1N3ViZ0drZUk3NjM0a1ZkTmUvc3lYYm50akNHNU5NOXlhYms0WlNFYmZXcjhxcUhFeWJzQ2JidS9JRHdkUkZNbUZJa3Zad1FZQTVlWGxNQXNKWmtqcVZFaGdoK1NaR1ZLZGRXMDdkdXhJSGpseWhPZmF1TGdHVTZqa3JQdVJkdTVwZkthcHRkTStYWkFBa0NETUJpckRyZW5FT2tTU1dFNU50bzFOZVR6cGszSE4wenNLOHNJb0w4clArajBJN0IvTWtOUjBiUVAwdGxtdWpabElZSjFicXJpNCtPVmtNdmtiL3N6bDRocEFrWkZubFd1THhyc2Z2WERXN1I4YmJvMkZXdC9BZS8vejFxaElDRTBQdUlzMGZTcXVuT0hXMGhNR1hvU0Rma1J5c29lZ2ptQXJMQ3pNR3BJNmpGdFJTWkl5Q2dtc2F5T0VKTGRzMmJLS1VycURQM3U1dUxLSUNFRDFwVUJPQlNCN1B0VS9pcTdUZHgvNDB6UDJnb0dWV3lOQTBneEJtZlBXcUdDRm9HbW9aWnlLNnhTQzV1ZWlNQzg4NFBmU0wwQXRMUzFGZTNzN290RW80dkU0ZW5wNmtFZ2trRXdta1V3bWtVcWxvS29xVkZXRnBtblFOQTI2cm9OWjA2ZFJTZ1VBNnRWWFgzMjRyYTN0d2R6YzNKWDhHY3pGbGMxZWlFREp1RS85ai9IaG5qM3I3L2p2eCtJT1VFczdOa0xTQlFOQ05DTjlSUVZSaENqTGtGd3VTQzRYWkk4SGl0Y0xsOThQZHpBSWJ6Z01mMTRlZ29XRnlCMDJEQVVqUnFCMDNEZ2dGQnE2WXdPQVVDZ0VwOTYyTEkyN0dTRXBISnAyOC9MeU5xWlNxWWY0czVlTDYreFZQQjVmWFZOVHM0Y0pRVE9nUmdoaDErcnBBTktOdUtKSXpWWXlXWmFoR0p2YzNXNDNQQjRQZkQ0ZkFvRUFjbkp5a0orZmo1S1NFb1FHZ1pvajJJQjBJY0hzYldPSDVMUE5rdHFhZG5WQ2lOVnBUQWhKdmZycXE0OVFTdC9tdDUrTDYreVRydXZ2UFByb295K2lmMTZOaFZyS01Ec2FJVVEzSnBpc3RaOG0xRXl3ZVR3ZWVMMWUrUDEraE1OaDVPWGxvYWlvQ09YbDVVTXp3VTRmbEdVWlpXVmxLQ3dzN0ZjbGRUaHhkNkJDZ2dvZzlkblBmcmFwcmEyTmg2TmNYR2VoOXV6WnMvNDczL2xPTkdzSTJ0ZTNabXgySjFuZG11blVQQjRQL0g0L1FxRVFjbk56VVZoWWlMS3lNc2l5UEtUdlNjcjJGMFZGUmVqbzZFQTBHa1ZYVjFmV1hCdWJaOU4xbmVxNmJtNjEwaWlseEhCdFFpUVMyZFRiMjd2QzVYTE41MDhGTHE2elE4ZU9IWHU0dHJaMjd3QnV6ZG8rWmJnMWFvTE5iUGhublpycDF2eCtQNExCSUhKeWNoQ0pSRkJTVW9LaW9xSWhmMS9TUUg4NWJOZ3dkSFoySWhhTG9idTdPd051WmdIQnVLaXU2OFJXU0tBQWRFcXBWU1g5NHgvLytMOXo1c3daS3dqQ2RQNlU0T0lDOXUzYjk2bjkzbFZWZmVtZWUrNTUyUWExWHB0Ynk4aXJBYUNFRU90ekdDWUlBSkRHUnZxdHdSSHJZOGY3V0EwSU5wL1BoN0t5TXN1MWRYZDNXMkJMcFZKMjEwWTFUU082cmxQakc5TU54MmJtMjRSdmZ2T2JIZE9uVDMrd29xS2lGa0FKZjFwem5ldXFxS2o0dEg3cnphKysrdXFHVmF0VzlUaUVvTDJ3RlF5TXZKcHVPRFZxT0RScTV0TE1Ja0U0SEVadWJpNEtDZ3BRVmxhR3Fxb3ExTmJXRGptM05pU3dBZWxDd3JGanh5elgxdHZibXdFM3R2WERDRWRCMDRMUjEwWW9wV29hemtTb3JLeDhJeHFOL2s4Z0VMaVhQNjI1dUQ2ZE9uanc0Qjh2dWVTU0pnTnFMTkRzSWFocVRpWVJRcXk4bXIxWTRIYTdMY0FGZzBIazV1WWlFb21ndExUMHVLRUdaQ2tlT1AxV1lWdEEyRUY1V3dzSWRSaVNaOGV0VW9TUVpEQVlmQ0taVFBLUkt5NnVNMVIxUzZhaXF1cG1ySTMyLzd0NFBMNjZyS3pzYldTMmRsZ2hxQzJ2WmtITlZnV2wyYURHdG5aOFVrYzdKTEFGQW9HTUZwQlFLT1E0bFdDRG0xa2x6UmlTTngrSTU1OS8vbUZkMTdmd3B4QVhWMXJSdXJWWU11OGFUQjFmZzZxcUdveWZOQjJ6Rnp5Q3JhMW56dmVvcXVyV2xTdFhib0Z6QmRTQUcwMVNTbFZLcWFicnVxNXBtcTVwT3RWaHVUV3FLQXBFdFF2dDdURWs1WFE0R2dnRUVBcUZNbG83QW9IQUovbytwYUgrdy9MeWNzZHBCSWRjVzdhUUZFYk9UU1dFSksrOTl0cERqWTJORDFSVVZGUVFRcXI1MDVyclhGYnIxZ1dZUFc4ZEdvSVRjTzMxODNGREtSRGJ0UTBiTml6Rm5LMnZZY1V6RCtLNnlPbjlIaW1sRGR1M2IzOTZ3WUlGTVljUXRCZnBJZmNrcFdiQmdHaUVwRWVuS05WcEt0R0RoTWVIZ0dHQ3hHZ3ptbzhvQ05lY2x3RTFNNy8yU1VMUTR3WWJBQXdmUHR5eFF1b3daa1YxWFNkbVpRTUExWFdkYlFFaGhCQmgrUERoYjdhM3Q5K2ZrNVB6aStQOVhyaTR6aDZydGhYTEZxeERRMlFtVnExZmpta1d3RzdGTFRjc3dZeVpxN0JrMlZaY3VYd2FYS2ZSckRVMk5xNlpPblZxazgydFpZYWdsS1lMQmtUUVJNSHFWNE1rYU9qdVNhRTNucUJDWGhBdWx3dWlMSUFRRVc1dlptdEhhV2twaGc4Zi9pOTlzOEx4L0dPdjE0dUtpZ29VRnhkbkhFeVo1ZFJkS3N0eXY1RFVOcFdReU0zTjNkRFQwL01yL3V6bU9uZTV0Z1liamlxNGRQNUMwU0F4c2dBQUlBQkpSRUZVQm1wcEJTZmVnc1VMYnNDVmtRUmFiZm12WmFzWFlNYlVHbFNOWDRDdGFkK0hyUS9jaGhsVHg2T21xZ28xazY3QnpVczJvU25CZk1LdHQyRjgxWFFzV3JzYWkyWlB4L2lhS3RTTW40b1pDOWFpemlHZmxxamZnRVd6cDJQc2lJcUhxcXVyMzJlY1dpOTdFVUlTWUErUVRKL2NvWnVOdUxMTEI3OGtVSUhxSUhvNzluN3dBZDQ3bEFRaGNieS82Uzk0NUsvdkl4V0pvUGpJVTVnemF3NXUvLzJmY05zMWsxQlROUlZMNmdCc21vZWFxa2xZc0Qzeis5dTZZRHlxYXVaaEUvdkJwcTNINzVLS2k0c0hkRzFtT01xR3BHWUxpQkdhc3ZrMkFZQXdaY3FVaDk5ODg4MUNXWlp2NGs5enJuTk5kYS90UUJLMXVHS0tVNndad2JSYmwySmF2NDl2dzhwbFZiamkrdmxZVkZXTGFrU3hkZEVNekZtVHdPUWI1bVBwQkJkYVgxdUhsYXR1d2V6b0ttek9jSHNOV0xOb0ZhNmRQeC8zelE4aXVtMFZscTFjaU5sUkZ6WS9lQjM2dm92dFdIWnpIU28rKy9rbjlyZjhnKzFYNnhlQ3NsQURvRk1LU296RlQrbThtZ0ovVVNtS3ZWNzRQQkp5eHBZQnh4cnd3V0UzeGw0eEhSZVBIb054UlVVWTVnMUJrUko0ZnZrS2pMbjJSc3lmV1lXSkVRQk5RM2UvQzJiUCtXVGhYM1YxTmVMeGVOYjJEd1pzR1NFcHBaVHF1bTV2QVNFN2QrNFV0bXpaOHREMDZkTUxSRkc4bWovVnVjNGRKZERhR2dXVUNDSXMxNkt0YUdXZEZsd0lSb0lNbkVveDg3NzFXRDR0YVB6N1RWaXhIWmh3eTRONGRPSEU5TCs3L2pwRVdpZGg0YWEvWWZ2eWFRd2NGVXhlL0RqdXU5SDRnbE9tb0N3eEhUTlhyY0NxdXV1d3NMYnZhNDYvODRuTm56bXk0ZmtOOFI2blhqVjdGVlFsQXRHaFU1MVNuYVpTS1ZBSVVFUVpzaXhUYTdqZGx3NDlKYmtadTQ1NFVUbHVJaTQ1dndMRHk4cFFmU3k5UnEvcWxzZXhmbUh0Y1lmZWRTdVhZTjNCcWs4R05sRVVVVlZWMVE5czdEU0NiY3lLbUlVRUkrZkdGaE1JSVVTNDZxcXJtdXJxNmxiVzFOVGtFVUltOFNjODE3a0N0a1FpRFJFWDh5cmV2dVFhM0xEdWFOOEhBak94NnQzbERKeXFNWGxpa0lsWnI4VHl6VmZhUG5jUTFXVVJZSHNyb2dtZ2p4SXVSTW9pR2RDY09QTTZWSzFhaWUwN1dvRmE4KzhtdkZXdTdIMTYvdno1VVZ0T3JjZTRlbTM5YXVsR1hJbFFVSjFxdWs3VlpDK090U2RvM09WSFVYa0llVVpyUnlBUWdCU1ZJWW91QlBNTHJXWmM4VjBDSUlEYXliV2ZJSjlZajYxYkc0QXhDejU1d2o0Y0RxT3lzdEtDVzdZS0tldmNUTGdaVXdrZ2hKakZCSUVRUW1wcmE5OXJhbXI2YlVsSlNTNGhaQVIvMG5PZC9US0JaZ0RPZURYWDNuSWZWbDJiQUJERnRtWHpzV29vb1ZpMERtdFhyTUNhVGR0UmR6Q0dwR1hRcXROSUdvZ1VaVlVvQTFEZjBBUWdBa3BSMzlQVDl1ZDdaMTdWWW9OYVh3V1V5YXNadVhNcnJ5YkxMaXJMTW1SQnAycWlGL0dlT0pvYlBnTDFUY2Jra3JSamt6c1VTSklMNGNJU1ZGWldJaHdPLzR1UFpTc2FXZ0ZsWXZXL1Zva3NLeXV6QnVSWnVHWEx0UmxRTTRlL3pMQlVNeDRjQWtBb0t5dDcrZWpSby9mbjVlVXRBaERoVDN5dXN4MXNrVWdRU0RhaHFSVkFtZUcxcXFkZ1dqVUFSTkc2U2hsQ2pxa09EOHllZ2VXdEV6Rm40WElzckM1RDBBWFVyYndaQ3pjTjFUdGFPbnFndlh2MTRjT3ZOQ0p6c0wzWElhK1dNdk5xNWpKMWRyckE3WGJEazErRVNpV0ZwcjM3Y0tUaE1EQ2hDams1T1ZEYVhaQWtEL0xMS2xCV1ZuWkNIOVYvdWNWaTFLaFJHYTZORFVudEozOVFTdGw4bTI0T3d4cmhLU0dFRUVvcHljL1AvM3RuWjZjL0ZBb3RCdURtVDM2dXMxbTFsMDVFWU0xVy9HMVRFNzcrOVUvNEF0K3hCbXQyQVpldWVCQ0xyK3NMVVJQQklRWjA5ZStnQ1VDa3FxejM0TUdEcTY1ZThYWWQrdG82elBDVGRXdjlRbEJDcUs0bWswaUpMbmg5TWhSRnNmSnEza0FleXZNUG9MTXRpVlFnalB6OGZMaU91cUVvUGhSVmpSclNMd0Fna1VIZi9vcWdLZ0lrbTVxT3I5M0RTWVFRakJneHdwcE15TS9QdHlZVDdHTlhaZ3VJYmZHeU9YSmx0b0FrQVNUQzRmQ2Z1N3E2ZUJzSTExbXY0TFJiY0gxcEV1K3NXSUJINmhMOXdxdlcxdVFRN0ZZQ1VRQ0pLUFAvSitydy9JNVd1eHNERUVOOVhUMGJ3MkxUcWswNGlER1lNZ29QR2VOU0xOUjZHYmhsbkxGbXZuN05maldCZ0ZJOWhTVHBLeFo0dlY3NFBDbkU0Z1NDUHc5bGhma29LaXBDUldFSWlxSWdtU1NELzN5UkNDS0lvYjYrS2VQbmU2MHV4dnlqYWt5YlZnWHNXbk5pbW1JRGdRQ3FxNnY3RlJJMFRjczJJRDlZTVlGUVNvbmY3MytzdTd2YjQvRjRidWRQZjY2ek54cWRpSVVQTGtMZDdLVllPbU02bnIvdVNsdzZwaFE0Mm9EWE5tM0F0b1lBSnR3eUV4TUh0SDNYNHNyOGRWaTNaRGJtTlZ5SmFyUml4NllOMkhFd0NTQ0tSQlFBVTJ2WXRYdzJaalJjajJzbjVPUG9hMnV3K205SEViNzA5Z2QvTUtuZ0h3Nmhadzh5anlPeU9UV3pFVmVpYmg4UTYwclMrTkVXSkx1RHlBbW4wQk5ydzc3Mk5yUW5YYWllUGhVWEdJZEdqblNOUXVpSkxWaXpaQWx3eGFXNDdzWnBLQnZvNXl0ZGhWWExic2E4Z3pNeHdYVVE3MnphZ09jYkFEQ0w0R3R2V1l5WkcrYWN1Rzcvd3NKQ3gxeWJxcXBzUDF0R1dNb1dFNHhQbzluRDBsbXpaajM4NXovL1dYRzczZC9tcndDdXM1WnR0Vi9INDV0cjhjaXlGVml6ZFMxV3JJc2hxZVNqcW5ZYWJsazVIL092ckI2NFNoaWNocVdQTDROcjBRcHNXTDBTVzExVm1ITDlmWGg4d3ZOWXRMSUpCNW44SFJEQUZZc1dvMnpiQ3F4YzBvQ29xeFFqcjczN2tmcFhmN2tWL2FjS3JCQ1VFQ1FvTlZmb1dWRHJhOEtWWlNpS2o1YUdLSHFpY2NSN1kyZzlITU5SUVVHNHNBcFRwMTZPYS85dEpFcExTMUZWVllYeXkrL0U0amVic1d6REtxeG96Y2UwRzZjTkRQOUhseUc2WUFVMnJWcU9yWUVxVEx4dU1aWk5YSUdGR3pJZmgrV1Byd1JoRDNJN0VkcTllemQyNzk2TnhzWkdIRHAwQ0VlT0hFRjdlM3ZHMFVjR0FBa0RRR0wwdXdrQVJFcXBCRUFHNEtLVXVuLzBveCtGZi9qREg5N2ljcm5tOFpjQTE1a3FUZFBRMU5SMFpwK3h0dlUyakorekZkTld2WXY3REk3RVlySGZmL3ZiMzk3OGh6LzhvWWR4WlQwQXVvMjNQWVFRcTJCQWpHMVQ3UGxxek5IZTFobHI1dnluZWI1YVNVa0poZzhmanBxYUd0VFUxSnpVSC9PRXoyZU9IajNhQ2tudDdSOVpYSnQ1NGk2UVdTbTF3dEtmL09Rbm5aRkk1T0c1YytjS0xwZHJMbjhKY1hHZEdNVmlzVDhzWHJ4NGl3RzFKQU8xSGdacS9VN0RkYXFBc3NVQ244L25lTHgzWldVbFJvOGVmZEovcmhNT05rSUlSbzhlYllITjN2cWhhWnAxNUMrVGI4dFdLYlUrNTNlKzg1MDJSVkVldnVtbW04RGh4c1YxWXFDMmRPblN6U3RXck9oQ1pxR0FiY0RObGxmVEJVRmdOMHhSY3hHTC9jQkkwNjJaVUdPUEJ2L1VnQTBBUEI0UFJvMGExYTlwMTliUDFxK1lZTGcwMDdXeGNDT0VFREp2M3J6V1JDTHh1N2x6NStwdXQ1dUhwVnhjbjFESjd0anZGeTlldkdVQXFMRk9yZC9xUE9QQVNHcDNhdWJLdkZBb1pCMFlXVnhjaklxS0Nvd2FOUW9lejZuWmRpL2VmZmZkSitVVG13ZFFtbkF6SzZRczNHelhZQmluQUxCeDQ4WVVJZVQ5aXkrK1dKVmxtWTllY1oweG9wUWlHbzJlZ0E3Nms2aktxM0hEelRjODh2U3kvMi9MNzM3M3UrNXNUZzBPa3dWc29jQ0Vtc3Zsb3V3SnVQYVZlV2FoWU15WU1jalB6ejlsUCtaSlBRT3RzTEN3M3pTQ1E0VVVUSjdOcXBRQ2dHMWdIb1FRVUVxeGRPbFN2UFhXV3crdVhiczI2ZlY2ZVNzSUY5Y1ExZEhSOGVBVlYxeXg5YTIzM2twbWMycXdIVVBFVmo4eks2QjlUczNjMnM3bTFJcUtpbEJSVVlHUkkwZWlzTER3bFA2Y0ovMXd4L0x5OGd6WHhrNGoyRjFiK3BjZUpRQ29xcW9tM0RRMkxEWGh0bkhqUnZoOHZ2K054V0s5ZnIvL2R2QUpCUzZ1Z2RUYjJ0cjZVRUZCd1QvUS8vVGJnYUNtRVVJMG9lOElvcXpoWnpBWVJEaWNuaW9vS2lyQ3NHSERyT2I5VTYxVGNtcHRkWFYxMXVQRG1WTjJUVHR2NWRwVVZUWC96aEZ1QUJBSUJQN1kwZEhSSFE2SGJ3T2ZMZVhpY3RMUmd3Y1ByakltQ3RqWnp4NWIrT2tJTldiQmNRYlVuRmJubVZBckx5L0hpQkVqVUYxOWVrNzlQMlhIY2RmVTFHVGJpK0RvM0V5NEFlbitvQUhnUm5OeWN0YTN0TFIwUlNLUmIvRlRRYmk0d0JxRit2cjYrdFVqUjQ2c0c4U3BKYkpCamMycFpRcy9uYUIyc252VnpnaXdBY0RZc1dQN3dTMEwyQ3k0bVFtM2JIQXovMXhZV1Boc1kyTmpkTml3WWZNRVFiaUlQNlc1em5WcG12Yld1KysrKytjTEw3eXdFZjFuUHdkcjZiQ2dObGhPellSYVlXRWh5c3ZMVVYxZGpiRmp4NTdXbi8yVWdvMFFnckZqeDJaMWJRNi9iVmdINXdnMzQvTlNTaWtkUG56NFAzYnMyTkU1YnR5NGI0cWllQlYvYW5PZDhUcjJ1NVB5YVZNcGJmT1diYnVldm1ybS9TMU0rR21mL2V3aHhycThUS2hSalJCS1JZRlFVYUJVbG5USW9nNlhwTUl0cS9BcUtmamRTUVE5Q1lTOVBjanpkNkV3RkVkNVhoVFZoWjBZVzk0R0VuMzkzQUViQU1peWJNRnRFTWZHNXR1eXdZMGFINmRtYURweDRzUVAxcTlmdi95YWE2NXBWUlRsYS95VnczV3VxYnM3K2NURGoyMTdmdjRkZjQ0T0FMVmVBaVJBWUt0K1FpTUVhYWlKaE1xeUFFVVc0WEpKMU8yVzRmVW84UGxjQ1BqZENJZTh5TXYxbzZnd2hQTFNYRlFQTDhEWW1sTElrbmphSDRQVHN2TE83WFpqN05peGpuazIxcTJ4SVNraEJLbFVLbjBVU1ByLzAvcllsdW5jWnN5WWNiQ21wdVpYYjd6eHhoRy8zejhmZkxVZjE3a2h0YTA5L3RENGYvdXZsdzgyeCswN0N0anoxRXlvMlp3YWRJR0FDZ0toa2dFMVdSYVE2RXpRenFBTFkzTFNVQXNHR0tnVmhGQldtb3ZxNFJHTUhWTUN0MXMrSXg2STAvYUM5L2w4RnR6c1lMT0hwWVFRYXVUVDdLMGc5Z2tGYXNKdDkrN2RlaUFRZUt5bHBlVndKQks1aFM5bDVqcFR0ZjJlKzNIejBmOFg3LzY2OWhQdkRhV1VOalR1TzdxbWVzS2k5NUc1VGFyZmVXb00xTlNCb0tZb0luVXBJcWlRUkZLUjRmZTVFVENobHVkSFVVR3dEMm8xcGZCNVhhaC85cC9Zbmo4T04zN0c3L0JkeHJIMXZtZXc1T245YUlwSmlJd2JoOFUvbVk0clM4NGlzQUhwYzl6R2poM3I2TmpZdkJ4Ny93YUJHMldkR3dCYVdGajRiRjFkM2VGUm8wWjlYUlRGei9LWEVkZFpaOU5VYmV2Mk54cWVubnIxTDV5V0dkdVA4MDZBOUIzcDNRYzFRZ1VCVkpJRUtrdkVnSm9NdDF1QUpoS0lMaGNDQVRkeVdLZFcxZ2UxUU1BTlFFWGRjNjlnWlVtVkk5aGFuMzBHdHowdFllbGp0K082a2w1cy9kRWF6THZqRFd4KzdDS1VuVTFnQTRCUUtHVEJiUkNvOVlPYmtXOWp6M096Z0diQVRRZWcxOWJXdnIxNjllcERNMmJNK05qdGRzL2hMd1d1TTFXSlo5ZGgvSVBBamFNVDJMcXpEYTFKRjZiZE5oUExQNThIRjFxdzdEL1dZUHZvS3JqMnRLQXBsb0JZTldiMWVTUFZMYis1NXk4eFpMWnoyTU5QYSs2VFVxUUVRalFRNkNiVVJBRlVUZWswbWRRQlFxZ2dFNVNWeXZCNlJHZ1MwTzEyR1ZEelFEdTBIMzk2TG9aTzNZdnlDOGZqaHo4ZWp1dUMrN0hrUDU3QzJrTWFZbGlEU1hzdXdlTVBYNFMrTUVuRmp1Y09JZmp2czNCZGlRVEFqMmx6eHFINkt4OWllK3dpWEorb3c3eXZiRVhrWjdkaTZXZk9BckFCNlkxWEE1V0hUY0FSUXN5TEVrS0ltWE16YzIyNnJsTzJ2NDExYmpmZWVPTWhBUGUzdGJWOW5KdWJld3VBWXY0eTRqb2pkZWdZY05jc2JQNlpIOUZYbjhIME8xN0Nwcy9PeEhVQkFFaWdWUm1EOVgvNVFuUHk0LzEvTEp0d3o5dGIrNWFxSkJtSXNVZDVKd2hCa2xLa1FLQUtJQm9JTklHQUVvSG9va0JBVXhyVmlJQ2NQQmYxU3hUdHJRbTBkSXNvSzNCQmxRVW8zblQ0NlRuNk1WYnZDdUsySDgvQXZNdHo4ZkZqeitMbWIyOUc1QzlYWWZGZmJzV0UyMytOWlNVMzRPVUY5aEdxWHJUR1ZFUktHQ2VYNzBjRXZXZzlDbUQ0TU54eTE3OGpPTzRzY1d5bWNuSnlNdURHUUt3ZjJPek9EUUJoNWtyN09UY0F1dUhlYUY1ZTNsL3I2dW8rSGpWcTFFMmlLRjdPWDBWY1o1eEtxakRUQ09XQ280ZWhPdmtHV21NQUFnQWdvbVp5eFV0N3QzKzQ0WktyZnRHRWdiZXo5OXBDVHhWSWg1NkVRQmNFUWdXQlFKSUlKUnBCVWdjbGdnaVgzNFVSdVVFb1hpK0NBUWtwUlVEVTcwTnhnUXYxcjNXaCtrdWZ4N3pMaHlFbjdFWE9iWmZodXFmWFljMC9wbVBLWUltZWZxc2JSQUFxWWtrQThHUGlaLzFuVHlocWg5dDU1NTNYRDJvRFFJNlN0UHJsM0N3YjE5Y09Zb2FtV20xdDdkcy8rOW5QR3Ivem5lL3M4bnE5L01oeHJqTlhSalVoWVd4ajZVbHBENy95Mk5xWEgzNXVXNDh0bjlaLzd5ZVFwRUNLV0ZDRER2UkJUUlFKbFNRQ1dSS2dlQ1hxN2traDJ0Nk56clllQkNLNU9ML1lqWnl3Z3FSYlJHY29pUEl5TnhwVUwyb3ZISUdjc05kTUpxR3FSTVh6UjNzeDZMaTJZditBQmtCQ1FEbnhEOXNaMXdZUkRvZUhCRGQ3V0dxK2J4eU5wSnRBWTRvS09pSEVkRzc2SFhmY29kOXh4eDMvZStEQWdiMmxwYVUzRTBJbThsY1IxNWtxcXROM2R1MDVzdjd1VnhyM0FvMnFRejR0dzZVUmdpU29CVFNORUdpZzBFRkFCWkZRU1NCVWt0THRISW9pVWdrRXZrSS95djBLZkxLTzVvK080dDJtZkV3WTRVZlNJNkV0TndjanF2TVFyWGdmcjBaMTVqdUxvK0dvaEVqK1lHZFF1QkhKbDlCNktBNGdsUDdRMFRoYTRVUGtKSnhtSkp5Sk56RVVDbUhjdUhFWU9YSWtoZzBiaHVMaVlrUWlFZVRrNUdSYjdVY1ZSUUd6Mm84eXEvMDA0NHoyRklBa0lTUkJDREhQYys4dUx5L2Z1bTdkdWgvMjl2YXU0aThmcmpOUnFxNnRmdkdKTGY5VE8vbC9kaU56ejZmMVBHWXVhMFVlTloyYWNaWmEraGM4Mjg0aEdJMjNJbExIZXJDL1RZWHNkU09VNDBlK1g0TGk4Nkc0S0loOG40SkFRVDdHamFuQkYyY1BSOTJxRjdEaGtBcWdGenNlMllvTkdJTWIvaDhKZ0FTWFMwS2k3UmhhRS8wOTFKVExoaUg2M0hhc2JWU0J4REZzV3ZVTzZzZU53cFJBR3BBN1hteEFmZUlzZFd5bUFvRUF4bzBiQjBFUUhDOUNpUDJ0NWR4U3FaUlpNV1dMQ3BRSlRVMzNwZ0hRdnZTbEx6VUIrRTFUVTlQT2twS1Ntd2doRS9qTGlldDBTOWZwdXgvV3Q2OWYrK0diZTdEc1RaVUpQWk9PTG8yQkdhVjkrd2xJdWo5TkZ5aEZTdGRwVDFLRXp5dENVU1RxZGtsd3UyWGtqMUNnSEl6aG5UZmpvS0tNZ29waG1IMVZHU3JLdlVnRVhEaFlXb0pBd0kzQTU3K0FCNDgrZ3lYLytXc3NpRW1JakI2RHhiK1pqaWxHeUR6bCtuRW91K01wVFAzUFMvRE1FeGVEYlI0Tlh2WHZlUERRYzFnMDk5ZFlaUFN4M2ZlVGllbFdqNlA3c2ZKSFcxSDJtMXV4K1B4Ly9iRTc0VnVxVHJSNmUzdnh3UWNmb0w2K0hnY09ITURodzRkeDlPaFJkSFoySWhxTm9xdXJ5OXA4bFVna3pGMExoTmwrQlYzWENhVlVNQzhqYXlrQmtDbWxpcEhKY0FGd3JWcTFLakpyMXF6cnZWN3YvK0V2TGE3ajBTZmFVcFZsVmpRYTYzbjBnZjk5Y2RzZGR6OFZSMStCZ0IyUFlzUFFkT2dKTnZRa09rSC9Jb0VzQ1pCbGticVV0THZ5dUdWNHZhNk1pWUw4dkFDS0NrSW9MOHV4eHFUT2xJbUNUNzFqc3lKenR4dm5uMzgrUkZIc2Q3SHV6ZWJnc2hVVktKTjdNNHNLT3RKVlV3MkFPbWZPSEczT25Ea1A3ZDI3OTYycXFxb2JSRkdjeGwreVhLY3M3RlQxbDNlK2YrQ1pDeSs3OTJNRFVuYVh4dWJVa2dSSVprd1JvSzgvelhCcVZCU1lJb0VpVWtXUjRIYkpjQnRROC90Y0NBWTh5QWw1a1ovSHpINVdGV0RzbUROajl2T3NBeHVRSHB3ZlAzNDhKRW5xQnpiN1d3WjJWQkFFSWdnQ1ZGV2x6TDZGOU42L3Z0RFVxQlFSelF4TkFhaWpSbzE2ZmNTSUVUdGZmLzMxNjNKeWNtNENVTXBmZGx3blM1VGk0SkhXWTA5K1p0cFAzbWhLejNteVVFczRYRWtIbDlZWGVwcVRCR0pma1NEdDFHUzQzUkxjYmdVK2IzcjJNeFR3SUJ6MklXSkNyU3dYSTRZWFl1eVlVcHlDaFZMbkx0aUFkSHZIZWVlZEIwbVNqZ2R3L1NxbWhCQnFoS1pnblp1WmQwTjZHNzBHUVAzb280L1UzTnpjOVJzM2Juempzc3N1KzZMYjdiNkp2d1M1VHFoQy93ZGRYVjFyL3ZyWHYyNzc2bGZuZFF6aTBneWdFUk5vS2VNWHNYVitHck9iQUpJa09lNzhORSsrdGUvOVpJL3pQcDJIUko1VFlETlZVMU1EV1piTkNpaU1OV0NPSWFvSk4rTXRZZUFHUFMzclNDU3pnZGZKdlYxOTlkV05BSDViVjFmMzZzaVJJMmRLa3ZUdi9CWEo5YThxbFVvOXYyUEhqazJUSjA4K3dBQXRHOVNTRE5SVTlBMndteEdIdFd6Rk9NYmJmSjFRUlZGZ1B5RFNoRnB1Ym03R2lyelRlWnozT1EwMklMMUR3V3p2TUM4V2NFNmhxWEhEcmRDVXFacGFybzBKVFRYR3ZWbFBvdHJhMnJjQXZOL1UxUFJDY1hIeGwvaEp2VnlmUkxxdXY5blEwUERNeUpFamQ1bS9QRzFBU3pxNHRKU0RTOU9aaXhxLzJMTkN6ZXYxd3V2MUloQUlXSHMvQ3dvS0xLaU5IRG55dEN4ZTRXQmpWRjVlbmdFMzgyYWFvYXJkeFJtZ3MrQ1dTcVVvSWNRODhOSmVXTkFad0dXNE53Q3Bzckt5RnkrODhNSi9QdnZzczFmbTVlVjlpUkJTdzErdVhJUG4wZWllNXVibXA2ZFBuNzVqMTY1ZEtwTWZZM05wN051a0RXb3E4MHZYQXBxNUVrOFVSZmFYUFhXNVhCbFFNNWV1bUhzL0k1RUlTa3BLckdYR3AzcEYzc25VU1Z1WWZDcGsybW1uZkp6NWRvQnhMSHRhMUp3cmhRRTRHSEN6R24xTjJBSFFtNXVidGVYTGx6ZWtVcWtYTHJqZ2dtYTMyMTFDQ01uaEw5OXpHbHlPQzVNcHBZMnRyYTJQTFZ5NDhFK3paOC9lZi9Ub1Vic3I2M2RrTjlMTFZYcnQrVFJtY2JIVFJuWW9pa0lWUmVtWFMyT0J4aTVkcWE2dVB1WExqTGxqRzRKeWNuSncvdm5udy96dHhFd2daT1RoMkN1UlNEaUdwb3g3TTRmckJWdDRxZ0ZRamZBMEJTQjE3NzMzSnUrOTk5Ni9MRjI2OUlWdmYvdmIwME9oMEV4K3FDV1hBYlNHMXRiV0RjdVdMWHZybDcvOFpTK1RHM1BLcGJGaGFBcnA0NFZVUW1CR0N4cEEra1lGQVVwQWFQcXBTa0JCUUNtb1RnRktDWFFLYURxRnBnT3FScEhTZ0pRR0pGV0toQW9rVWtCdmlxQW5SYkQ3b3dNQURweFZqLzJuMnJHWmttVVpoWVdGanFlQURISGUxRzdnekJONzJSTkM3TlZUeTcwQjBMWnMyWkw0K2M5L3ZyZTd1L3Y1Q3k2NG9Nbmo4ZVFTUWdyNHkvdmNjMnpCWUxDdXBhWGxEOS83M3ZjZW56MTdkdU0vLy9uUFhnZUgxbStucHkybnBoSmlnZERJcDZXZmk0UUlFQVdSaXBJSVNUSnlhYklNUlVuL2NuZTUzWEM3UGZCNmZmRDUvQWdFQXdpRndzakp5VVYrcEFERnhTVW9IellNVmRVaklFbnlXWGt2enZqSmcrUFZ4eDkvaklhR0JqUTFOVmxUQ2gwZEhZaEdvNGpGWXVqdTdrWjNkemQ2ZTN1UlNDU1FUQ2JOVGZXRVhlcXM2em94TCtOeE1xY1cyTWtGaVZJcUE1Q1JQcnZBdXFxcXFwUlhYbmxsYW1GaDRUV0NJRnpNWC9abnY1TEo1UFkzM25qamhhOTg1U3Z2TnpVMW1TTk5yRU96RndneUhKb3gwOHlNUWhIemx5aGxLNTVtb1l3dEVHUXJFcGp0SEdiNFdWWldocXFxS2xSV1ZwN1Y5K0tzVzNKU1dWa0pqOGRqRHNlYmVZZWhGQmlvVVUwbHFxcGE0YW5aOTJhNk5TTTgxUWNJVDVNQWxJYUdCcVdrcE9RRkFOdjI3dDA3b2JLeWNyb3N5NS9uTC8relQ0bEU0bSs3ZCs5K2RjS0VDWTBNek5pd00ra0FOUloycWdFMXE5cHBnSTJheFFIanVVbVo1NjRGTkRPbnhoWUovSDUvUms2dHVMall5cW1kVFVXQ2N3WnNBRkJZV0FpdjEyc0J6dTEyZzMwUzJPSFcyOXRyQVM2WlRHYkx2VkZLS1dIUGVEUFBkMk9lbUNuRHdWbUFBNkNNR2pYcWRRRHZ2UERDQzA5TW1qVHBVci9mZncxd3dvOTU1enExWVdkVExCWjc3c1VYWDN6N2kxLzg0dEVzUUhPQ211bk9yR0YxSTQrbTI2dWRCdFJnVmp6TjU2dVRTek9oWmk4VW1PMGNadU50SUJBNEorN1BXUmVLMm5NZWUvZnV4YjU5KzNEbzBDRzB0TFNndmIzZEdxQ1B4K1BXQUwwWm1ocEQ5RWdtazFCVjFYUnZHZUdwc1hoR29KUVN3OEdaNGFsNXNTRXFHNnJLQUpRYmJyakJ2WHo1OHNrRkJRV1hTNUxFVC9IOUZFbFYxUmNQSERqdzZ1MjMzNzdycWFlZVNnMFJhQ2s3MEFDMktKQUJNOTJjZDJiRFR0YWx5YklNdHBYRFBra1FEb2VSbTV1THdzTENqSFlPOG1tZGorSmdjMVpUVXhNKy92aGpORFUxb2FXbEJXMXRiUVBtM2N6Y1d5cVZnbmxLQ0FNNFlxd01KT3cxQU9Da0xJQ1RBY2liTjI4dXYraWlpeVlIQW9IcHZCL3VqUDBGdWFlenMvT2xiZHUydmZ2RkwzNnhqUUdTRTlCU1dZQ20yb0ZtSG54cWhwdDJsOFlDemV4UE0xM2FRUG0wdkx3OEZCWVdvcXlzREpXVmxTZ3JPL2VDZzNNQ2JBRFEyZG1aVVZSb2JXMUZSMGNIamgwN2hsZ3NaaDEvMU52YjYxUllnQUUyWXJvM0ZuQk1nWUVGSEZ0a0VBMEhaNGRjeHZYZWUrL1ZWRmRYWCt6eGVDNEhVTUtSY2xwaGRxaTd1L3VsdXJxNkhaTW1UZHFQdmlyNFlFQ3o1ODVZVjJjUE9hbDVJQU9UNDJWZEdqdnI2Umg2c2syMzdNeW5XU1N3OTlSeHNKMkYwalFOOWZYMTJMOS9QNXFibTlIYTJvcTJ0alljTzNiTU90dXRxNnZMT3R1dHQ3YzNBMjRPN3MwTVQ4MHozd1lDM0ZBZ1ozNU0ycjE3OTdpS2lvcUwzRzczWlJ4eXB3NW1QVDA5Mno3NjZLTjN4NDhmMzJnTEY1MkFwZzRSWnYyQUJtc1BCeWdSQ0JSWjdoZDJzaTdOTEJDNFhDNXIzdFBuOHlFWURDSVVDaUV2THcrUlNNVEtwMVZYVjBNVXhYUDJYcDVUWURQVjNOeU1mZnYyNGVEQmd6aHk1RWhHYUJxUHh5MjRzWWRYc25CakFjY1VGd1lDSERIQUpqaUVxWklOYXJMdFk5TE9uVHRIVjFWVlRmQjZ2UmNUUXNaeUJKMDQ2YnBlMTlYVjlkcWVQWHZxTHJyb0l0YVo2UXlZQmdLYXlnQk5wWlNxUnFYYzZuRTBONld4UURNcm5icXVVMEVRNFhhNytnSE5IbnA2UEo1K1EreG02RmxRVUlEUzBsSlVWRlNndUpodmxqd253UVlBM2QzZGFHeHN6T2gzYTI5dng3Rmp4eENQeHhHUHh5MjRPWVdtV2NKVEMzQU9PVGpDT0xpTVhCd0RPQ2ZRWmZ6ZHhvMGJpeSs4OE1MYWNEZzhRWmJsaTJGdHh1QWFvbzZsVXFuWDJ0cmFkdjd6bi8rc256RmpScHNCSUgwQWQrWUVOZmFFalg3RkFNYWhXYmt6Tm9kbUZnWTBUWWNvaXZENXZPendlci9RMDRTYTMrL3YxOHBoaHA3RGh3K0gxK3ZsZC9oY0JwdXBBd2NPNE1DQkF6aDA2QkJhVzFzSHJKcXlvYWt0OXpZWTRNQVdHV3lRTTUyY0dhYUtkcGc1QVE2QU9INzhlUG1SUng2cHFxcXFHdTMzKzgrWEpPa3pBUHo4YVoyaHVLcXFiMFdqMGZmMzd0M2I4STF2ZktPcHJxNnUzK1NJTFhUTUJqUVdadXovbzl1QVpqazA0NElkYUdiWXFhb2FGU1VKQWI4dkEyaHNiMXEycXFjNXhGNWVYbjdXbk1yQndYWUNGWXZGck5DVXJacWE3czFwcjBJVzk1WUJPRjNYN1ZWVVpBbFQ3WkF6UTFVckwrY0FOc24yZDJKRlJZVzRaczJhWVNOSGpxd0toVUtqWlZrK2p4QXk0aHpMazMyVVRDWS82T2pvK0dqMzd0Mzd2dmExcjdVME5UWHBObGZtNU02eXVUVHI3OHhtYk52bnlJQ1p6YUdCclhLYXgybXhoWUZrU29Va1NRaUhnaGt1elF3OTdRMjNiTlhUREQzUGxkNDBEclovd2IyeFZWUFR2Y1Zpc2F3OWJ3NjVOd3R3cG5zeklXY1BVeG5BT1lXcTluQlZ0QUhPNlgzUmZ2M2lGNy93WDNIRkZTV2xwYVhEL0g3L2NGbVdSd2lDTUJyV0t0NVByUks2cnU5SkpwUDFzVmhzMy83OSt3OCs5OXh6TFhmZGRWZVBDWmhCWUpZTmFobnZNODRzSTh4a1EwM1k1b21adzAySXBRaVhBQUFHR1VsRVFWUXRtREV1alRLTnRrZ2tVNUFrR1htNTRheTlhWUZBSU1PbG1hRW5kMmtjYkVOV1YxY1g5dS9mYnpYMDJudmVzaFVXc2dGTzA3VEJBR2QzY1NiZ2lBUGtCQWZJRGZhKzZPQUdoZlhyMStmWDFOUkU4dlB6Qy8xK2Y0a3N5OFdpS0pZUlFzb3g2RXJ2VTZaZVN1a0JUZE1PSnBQSjVuZzgzbnpreUpIV3VycTZ0aTkvK2NzZFlBNG1HQVJtMlJ5YTQvdjI1RDhMTS9RdEFLSnNNY0IwWndBZ1NWSS9vTEY5YVd4eG9LYzNtVDdFb1NDL1g0SEFxVGV0cEtRRXc0WU5nOC9uNHk5V0RyYmoxK0hEaC9zVkZ1enV6ZDdVYTA0c09MZzNxL2VOQlp5bWFTYll3UFRDd2NIRjJTRm5BWXFCM0dDWFlIdGZzTDF2NWY5Ky9ldGYrOGVOR3hjc0tpb0toa0tob05mckRTcUtFcFFrS1NpS1lsQVFCRDhoeEU4SThSRkNQQVlJelFNQXpNOEpCZ3pXMmpoS2FRK2x0SXRTR3RkMVBhNXBXa3hWMVdnaWtZaDJkM2ZIT2pzN284M056YkdkTzNmR0Z5eFkwTTNBaTlwQVJnZUFtVzV6V05wZ2wvMjh2V3d3WTBGbXVqTm1TeG9GQUVWUkxKalpXamd5aWdPeUxLTzdKd2xGVVZCU1hHQTEyOXBkR2xzZ0tDb3E0aTlPRHJaL1RhbFV5aW9zSERseXhOcG5PdFNtM3FFQ3p1YmlXQWMzRU9RY1ljZE1Qd2dEUUUxMEFKdjlZci9PUUJjYzN0cmZ6MGlET2J6UHZoM29zb1BNZm1WemFmM2VONDkrZDRMWVlEQXozN2Z0MUlBb2lxQ1V3dVZ5WlFXYXZlSVo3K3FGeStWQ3hiRFNqR2JiY0RpTS9QeDhGQlFVV0FVQ1daYjVpNUtEN2NUcDJMRmpPSGp3WUwvYzIxRDYzb3laVTN0NG1oR21HdTdOZ3B3eHpXQ0Zxc3g5c3Vma2lBT0Vzc0ZPeUFJemNRaGdZd0VuT0VCdElNQU5CRGM3ME9BQXNZRWNtcDdGcmRrVCs0TkNqQ2tBVUZ1WWFjTE1LZ1F3RmM2TUhSdWlLRkpLS2R4dWR3YlFKRW15SEpxOU9CQ05kY1B0OFdEVWlPSDlLcDVGUlVVb0xTMUZLTVE3ZWpqWVRxSmFXbG95M0JzN2tqVlFhMGcyOThhMmg1alZVNXVMQXpOMGI3bzNlMDRPRG81dVVPRFpxckZPUUJzSWJzZmozSTRIYk1jVGRqb0NqcWxPWmdVWUF5OFdubUJ6WnVhZjJUQ1RYUTdFQUkyeXVUUktLYnhlYjFhWFptL2g2SXgyd2V2MTRmenphcXh6MDB5WGRpNGNMOFRCZGdicHdJRURsbnR6S2k3WXE2ZE9yU0dwVk1weWJqYkFRZGQxNGdBNDFzbkJGcXJhM1p6OXozWW9aWFZpRHVFdUdRUnMyVnliUFNTbEE4QnRJTURwVG45bW9EU1FzN1AvUHhsZmkvMnpMZFNFM1puWmdFWnRsVTdyYkQ5ZDErSHorUVpzdEdWblBOczZZZ2dFZ3BneWFhTGwwbmkxazRQdHRDbVpUT0xRb1VQOWlndHNlRHBZL20wQTl6WWc1TXhpQStQazdHNE9XUnlkSFVSTzE2RE9qQTJIVDBhT3piWlVodzRSZVBZTHRpUGRZUWVaM1pXWnpvekpuMldGbVIxcUp0ZzBUVU13R0J4d2FKMXR0RzA1ZWd6aGNBNnV1UHdTbEpTVVFGRVUvdUxpWUR2OTZ1bnA2UmVlc3RYVG9iU0gyT0ZtbTJCd21rZTFRNDV0SFlGRFhnNDJLTUhCMldFQUp6YlVmSm9UekxJNXRxRVdFdXlBd3dBQWd4MWM5andaa3krRExXOW0zME9iQVRPMmZZTmQxRzNQcFdtYWhuQTRuSFcrMDZ4Mm1tSG53Y1B0eUk4VTRMSkwrSXJhRXltSlB3VC9tandlRDZxcnExRlVWSVREaHc5bkROV3orVGNUY0hZSE4xRDExQUZ3bE1uREVSdmdxQTEwNWtWTm9GRkt6Y01HMlY5b2c0TEtDWVlEd0d5b3B4blNvVUxPWVMwaWJDRWwrMjh6M21lY21TUElISUJHN1V1M0J3TWFlMm1haHB5Y25INWIxOW1qaGN5aDlhS2lJa0NxNXk4aURyWXpWejZmRDlYVjFTZ3VMdTZYZjJQYlEreUFzOCtlWm1rUGNRcFJxUWsxVGRPcy9Kc1Q2RXpBTWE3T2hGMC8xODVBYkRCb1pRUFlKd1ZiVnNBeEo3LzIwYmdQZHJBNXNneUkyY0xNZmlBek42amJROC9Cd2s1N0RzMjhWRlZGZm42K2RheVFIV2htSG8wUHEzT3dmYXJrOVhwUlZWV0ZrcElTSy8vVzF0YVcwZi9tVkVFOUhnZG5DMDh6M0J5YmczTndjSGJZbVhCajMyWkFqLzI3VTVIQ1lCMlg3V1A5NEdWNzZ3Z3hCNkJsNU5CWXFObkR6c0VjbWoySDVuYTdrVXFsVUZKU2t0R1BscGVYWnpYWnV0MXUvaUxoWVB2MHl1MTJXOGN5c3dVR3RvTEtBdTU0Y25BTzdzMnBUY1FPdW40RkI5UFoyUUhIL0preVJRblcxZldqbWhQOGh1TFVuTTdoWnovR2dzdm14dXp1TEFObWJJdEdsdnlaWTdnNVZJZG16NkdaVXdPcFZBcVZsWlhJeWNuSm1CcVFKUDVTTzVYNi93SEYxRm5aOGoxaXh3QUFBQUJKUlU1RXJrSmdnZz09Il0sWzEsImRlc2NyaXB0aW9uIl0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJNQzNwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJmMVp0aVc1bFdVTC9rc3JvZ2tpcUFSb0Rpb1o0L1VnbTU5ejRpaU5SdEk5SXZ4bG1sSUwzbnV1Rk1BdTF0b1ZydjMvK1grKzYzLzlyLy8xdktta0srVzNsbGJLelgrcHBSWTYvNmozNzc5Mi9uenVkUDQ4LzhYeTUxL1B2Mzc5K3VzYmdiK2puL3g5NCsyL3Y1L08xL00vZitBZjkzakd2Mzc5cW4rK0UrcWZDLzM1QmhmK1BZRjM5dC9yN3cvSjE4UHY2MC82YzZHMmYvOG9yYjUvZjlUeDUwTHp6d2ZQby96NW5mNTZyTjlmL3Yvclg3N3dza29yYzZNWXdvNVB2TStmNmZjRThmZTc4L3M5ZndZKzkvQzFIbU1zRjM4OThmMXpNUmJrWDE3dkgzL2Y5OThYNkY4VytSLy91djU5OWYvNjE3OHRmdWgvdmg3L2JTM0xuelc2eTMvOWpTZi8yOWZqWDdjSi95SU9mejFSK05kdjNDSEYvM2lkUDcrL2I5WHYyNyszNjBoaFMrV1BSSjNGZnY1eEdUNDRXUEo0ZnF6dzYrVjM1dC92K2RYNFZlOStUN1o4M2ZNZS9KcFBld0s3OGwxUGV0YlRuKy9aNSsvNVRCNHhoUjFlL2c1aGhuaStWdU1iV3BqUmZVcitlcjd3eGhaWHJPemJEUHRpNjFJTWZ6M0xjKzdienYzbVU3bnpldmhvZUxpWVcvM2YvcnIrZDkvOG4veTZ2bSs2Uk05ZC8xb3JuaXNvMXp5R08rZWZmSW9OZWI0Lys1YlBBdi9qMTUvdHYvOG1QNGdxTzVqUE1sZGVzTi9qZDRtUm4zL0tWano3SFBsYzV1K2ZDajNYdS81Y2dDWGkzcG1IZVNJN2NKY241cWM4OXh2Qyt6eXNZMldET2s4ZVlncURIWGh5RG91SFJGNWlDZGNiYXZEZS9NejduTStHSEVyd3k5Z21OaUxIZ201VmRxaXpXU2xsNU9kTkZSbnFPZWFVY3k3NXpmWEtMZmNTU3lxNWxQSVdqVngvNDV2ZS9KYjNmZXZiM2w1alRUWFhVdDlhYTZ1OWhSYXhnYm1WOXJiYVd1czlYSjBiZGE3VitYem5LeU9NT05MSW80eDMxTkZHbjRqUFREUFBNdDlaWjV0OWhSVVhabUtWOWE2NjJ1cjd1VGFXWXFlZGQ5bnZycnZ0L2lGclgvelNsNy95dlYvOTJ0Zi8yclUvdS9vZnYvNEh1L2I4MmJWd2RzclB2WC90R2wrOTN2Y2ZsM2cwSjlrOVk4ZENldGp4MXgxQW9JTjdkdGNucGVET3VXZDNDeWhGRGp4a2RtK3U5YmhqYkdIYVQ4amY4OWZlL1hQbi9xLzI3Y3IxLzJyZnd2OXA1eTYzN3Y4Zk8zZXhkZis1Yi8vRnJpMzkzRHc3OXROQzEvU09hQitmNmFGZS9MNXYvdmpyYng2cDdwN0w2SG4xa1dkZXFhTWk5NzdmRjRmeWNObVpZbjkzdjFOWU82VXZocFRlSzliUWE4Wk81YStOc2Q1N2JOYzhzRFp2K3VwVDhGclBkcW5penBVMXJuMitiWS82MUw3ak84dkhoM2R1VjRtNHlCRXdaWVZscjJGekU0eGYvN2hvU3l6QnlPL3FmYzMwM2pQdzFud1hieHZZMGR4YS9ZbytPbzc3WXNPL09ubVorTDVmcVd6RDJobWZIc1lJdmV5TVJ3UUlQTHhsbmFPdHROTllMZk9jdVlYTXBuN0lFd0pVcjRFUlhwWG5DcW4xUFYvZXVlYjFmbThyOWV1MWpQWStYMEVvSXErNVcxOGRPOU16Ky9IdVozQ2hOMjA4d1hzOTdCNHVvdll2NTQ4djFQeWw4ZDFuVC9IZ2RjZTYyVS8ycnFlRW9JNVVTd2hydHZmRncxUldaQjNkdWNvN25sMTR6VmxIaWp6TllBay8xQUlkd0g0OXBha01uMUw1N2Z6bCtaWEpvOFZudDd6MnF1K2VIMXRjVUpGNWYzM3R3ZDUrTWRZNzl6QlN1dG1kOTVsMXphVVhXdC9kZWNiOERsNXZmVWhQV09OYisvbG1yeXU5Kzd0NGlxeDQ3UGNwNzNkdmZNSEx6OHhSMm14WXlQZDk0c2F2enBCdjlndWREM2ZKZGFQckc2ZjI3SW5FUFN0Y0kwMWVrajhpdCtvKzloZm5qWmNiM3JPbFhka3lkaTZ1Kzlzam9Wbzk4WWc3c0lNWWx6SkNyU0d4L1JPUmFDbjB2VldudVQ3V2xsdVArYjBvM1U0RnVZajM3clBpZFhkZ0M5QzV3YzY5TGgxWHcvWWdGL25DUG9Ua3hTcHFGbmZ4L2R0dXdiL1hOOC8vZjNwaHM1Nm5aVFM3M1RFMmZYZ1liM2kvMkhkZUk2MXJMRjRtM1BWTHJHRmlEenNPS2JjUmUvdFFjT0J1VzJOZ21DYmJ3Zjh3Vm14VGIvRWJvV0Nwa0tuVTN0d3ZmTk5DTXdjN0hWSkJxZ2VHQjdBQXNwdklGelp1YllUanJldkxBMlVaZS9LWU55L2xEU0pyMitabXQ2K05UajF6RlV4YlExYjd5bHZkZjdGSTkrQlJFS0cxUUl4ejhyRTNIRDBzV0krZXhoeiticXYwOWFDMDJpYmM1NDVlTGN6R005MnJwcktScjRhdGlieDFmN25MZzB6c2pxbGFxN1FXTUZBcGxkcnZ2TGdPeUw5aXhQWWNEeVlaUk5YQlZ4R2JJaTVlNmR0UC9saFdWZ3ZKU2JraU1hM3hrYlhxTE9sN0VOUVhGVTF4UWlFKzNqUnJUQkhWK21Jd3NBWCtMOFRCNXM0K1o4UWZvTHgzVGhnbDlCZ2wzOXc5THBUM2V3RjZvUTlzZHJ2ZFl2UVQrTVhiOCsrWSsxMnd6YkgzdDk1alloZmkzZG8zSzR2Q1U5MjVZVTE0aFRsQi9yRXNsdnZDek1YTmpzeGNucFI3VFJqcThLUTNJSU1kTHFDSHV3dUxneWZJZzQwYWhlY2N1d0ZXeHV4bGxZU0hBRVRVbVBKNGNrVFVKMnBYc084VDNMcmJmTit1TUxIM3JPUERzaURzdlBsdUdBM1cwVjNFcDdFay9VWXZMcGE1cE1ETEQyMUw0c1ZRSUM1MmYvNTRYaXhmd2dFTlJHVy8yTitNU3FMMGZLNDJibzZ3aDgwRjl0VzRZNHQ1cnJjTzFCem5zSEJ5dURLRUR1L1YwZmZZNTUxS0tNL0h2MnY1VUY5TU9UOHhQOXhGM0R2anhhRlpHNXVYRTUvQUFLWStzRTY4YnVVdlRENWVBdUY4ZTZxajNCT0ZCbVVETmpGeGVYd0ZiVVlpTXo3andXV3ZoUnRwWGg5bm05N2FlbVpWMFFoV0Z2SEg2bUtHZmVmQk15TmhyNUx4ZklNbmEvVjQzdlcxV2E5SEN5S3c1eG5SRnN4NUx3RkJ3STY2L0E4K0d5ZVJ0SWpOVmVUYkJiRFBXN0RTN0ZoVDBsNFpwRnVNVVFOS1lIa2p0cFJYeTFoUlZpYS82RCtDV1ZyR2tDTSsrR0YwclFxbnY3bGJTWURSa2p2T1pWelNndzlHOElZUlpzVUF5VlhDOXVJZG1VSmxrSjVVUGtES2hpdjBnWWdqSDBYUDlXSE1jWWhMYTMwOXFPVVJwWFhqejlhSDJyZHYrWUg3UXhLaEVBVVFrR0NtTENieXhZOGhBN21pTkI4cnpSODM5dll0MTFzbkYwY0pWd2U4N2JleUl3cmRNeFl1ODFiZXNONVR3SUF2akJxMnIyYzgyQXg0eHc5UitmYis4Q0s4SytnQTRJSVJ3b2hqOFlCbGoyNmQ3V3Y3Z3gwTkVNOUNLRUZCS0M2QzhHMFdQN0o2SDc0Qng5QVJodXZHQ29SM0RGejBERHpqM1dOUkZWa3NTQUtQMnBDRDJZb2NXQlB6WWNBQk9Ed1M5OGFWWWtqdzdSSGp2M2paamRGSndDVllJVGRhZU8xajlNZUdaUDM5SnhyS3picC83NUdma0F1N2dZWlhEUGVGN2VVaURTZ3hwRVRsUlZ0QkZHOTlYTlZieGVkR1BDdTdFU2FlVDBjTGF2eGFqZ3BPeGcxaTBGOEFPeVlVQlh1ZlVQQUtlQSswbGdzQXk5Qlp4SGgvZ3hYTEdLRGVubmV5K3FrOEQ1Z25nVGg1SWxaUWczYTlFL1BMT3BaUFUrbEs3YWNDSDBabDYzc3JlYlQwRnFBVzBvaWZIamp5K1FEWXBqR0NxcmlpM1R3WFFHdlA5dUVBRmV3RjZzR2xjR0hVRkNlUGlSTTVndDJ3VDAvSEZVajlVRHBzVlB0dXR2RURmTU9Obm5JMW5BWXFnM0haQmJERjVvQWZzVnFaalgzQU9NMTM1MllWZzg0LzhYMlFYY3dsL2pHT3dpYmphUkhBZENIdFNGbGNRVU1PbW4vVGdpRUNWc1E0b1VBcWNvQktsSXhqdUpWdGRBaVpQOGdETkFFdUwySGdsYTVibUlOb0taTVF4M0dXSGhkWGdhWW85WU92QmdLK0dHTitQSlNXbG55UzF3c1pnY1gvSWNaM25lbWFGVE8xVmU4bXdjZER4L3VOMEZYV1RjU1IwVXpFSFMvT1ZvTlhjcGh6QXdyeGlZSEwzQ3c3TnFpVks3SUhXTGdHL0FNN0k3MW9PU3Yxdks3eWc1NkhoZy9EK0FZd05nUVB1UHNoZWVLdG1yazVxcFVnVFB2cTZCUXdJUmVjV0FJeklBZ29QcThGT1lZYUpZZ0hkMEh5SjJDVkhaL0lGWmoxdzNOdnZBSGZPVngrWFZpbXg4akpDeVg1eDllUHZ5NTFQVEtHOWZzQUZ1VHZINW5IcHYzdEo2Ly85ei82cno5NW5SL2RvK1M3WWd4N2F0aWVDSnFjWTJKT1lTbUk2SVBSaFphQzlMRGZDR25MRUlDWEhTcWlrZC9iWHZOSUs5Ymh4ZTIvOCtBQWRMVCtZeVYrMzRCRitDMlY5MEFaVE5ETnphS2F6eTNuVGhjQ09QRnlvTCtBSG1GdFhpQXI2b082SHVUSFBrSms4Z3NkMkYySGt6SHU3S0M0SFVCWC9mUERNMStMN1VHNzN4VUVkZy9NQU1VT01zOGN2VFdrWmVEbWNXOTR1dyt2SkU2TGdNUTNkamowRFJBZlJqb3VjSERCR1dPQnNac05nY0dBaHhlNENLWm1LYmduZG0wQWNnR2JQR3BNY1dnVEVxaDFwTHVCYWhOeTNPTjFieTRGcWNHUGJSWm5vQzJzQk9hUGp3VEpJSzQrUkZ3WVZvbEhHYkFqckxEUlQ0aGpiM3VQdmRhbzMyWG9DdUFxb0ZMUDBTelVEWjRjV0JBWU5adGJFbWF2cy8wTkdaMDRwcG1mTU1TbjdEUFVHMk4wZi9tcWNHdUFKZENndmtwSmlobjNCUHY0S3A0NUQ1eCtydHh6ZGhGWVNWS01oQ0dhK203czBvSTJMNjU5VFRRU1NsamZJVHBpalhDV2NUenBHOUQvUGxnMWVQNkh6TUNTeDFmeGRqc0hIQlppMVdTUkQyNityUEZnMkxqekIrd0FqZUJESUFqdm01OThLQVIrQWxTR0NQWENZdDBpL1RkTTlMNjlBVjVRUlNKdzZ3UmtYeGVxSGZSVUJidUJ0SDFmKzRQSEFPOXhZNWphRVZoZ0lkWXN3bmcvWE5QODhEdm9pQnl4QXRUWnp5dGovUnF3SDZ6K3BNQnQ1ZUxuaDFHS0cvekE0K1hJM21ON2VDM2VuMzFubFo4TUZvcEE4WTRGRGUwRnNiRWZRRTJlQTFvQjJVS3FOb1JpcHdSNVlVZUN6QXVVOG9DY01KNll4QWc5d3RtaHVDelhEZVNTb2x6RlhjZkRBWFIxbkJtbUpibzNwaWd3TGVnZnNBR1V6dTQwT0lBc21wL2xIYll1YWNKOU1XUGh1WDc4ck9MdG9KYTd2MndUb3BCNWQ1VDFabFZ1VER1MjFUQUdEQjZ6Q1ppTE9NQ2huMDI4WGtxbzdydzZJQnRFaGs0VWJTK09DSGpUV1V6OENZNUJ6b1RvWWVqaE14MUVDQk9GVGtpMjJNNEhhQVhrZkRSc0NUM283eDRzUFJzeThLcUdIOUNXRFBERGMyRW5CTU0za09jYjJBQnNUeEFuZWowZUwyRE1XYjN5WG1VamU5c2NBekNzMyt4U3llOUJoMi9HdjdGRU9OWlZXUkxqYnM4TFRPa2JHN0x3ZExPQWpockVtblcvUU5aWWlpQlpLdm5CaVJvMUFhYkEyTytXSDNYemhNTEV2RGpZd3JPM0ZjTXFBRng0Q2VqdlpRM3ZjcTNxSG1TbGNIVE1Sb1hpSkw0SUJJMlNZdkFOc0czaGpZYVNBdHlJaWdXaTlPb0gxUW53ejQyS0hDWVBtTUpVOFNCcnZTQjZsQi9oNEw2YlZjS0pZYzRDQ2kwWkc1V05CY0hOVzdXOTN3RWhoRzdzQzRJTDlrSFV3ZGY1L011ZGcrT3pZcENxZ0kxR1lQa1NXTmVRNHR3dk9CZWJuc0V1aGlSUVhBUzhYNENZZ0YvQUM1YU5QT0NLdFZ0VG1NRHl1ZXlvVGw4R0NtS29idzRxY3BlMnNtNExFUXlWRndQNnNUZ1lEVVFNdFVSY3VUZXlFUnFNSE13R2FoQ2xWR3c4SGtxdml6MWx6WkNNelRibWdUSFJoT1BicjVNNkFhQXZzUld3Qm16NUhTZ2RjQ0RmMjNIdXJDRzYvQUVPY0pPZjRmWVhIS2tDQVg0MmN1Sy9UVUpwRU1ieFo0TmJJZnBZZm9CV1FMNXF5TytFTFhXOERsNElLNDJkbCtrQkdQazhKQUtXaVZLOXo1VmcrVGphdHU3ZHE2ckFOcUlEckdMSUlqak1icm1CS3dOZXQ5bkhKUDJHb2Y3alNmN3hJTmVmSjBFUCtyR0tCbjBFMVh5SzNVRkl2N3hPZkplMWhnMFhTRFBZQzhWaWRlSmROSjYzRHYzS01GZE1yczVBRXQxUWJYNmcxSUpBWTdaaGM0akFnNmJmZmNsWnZ2TG4xbmp4OVAzejl0ZmY3eDgvd0sxb0F5TEtBcDBGN1N2ajBnRzZCbG1rUWMzb21ORS9CYlBINTJ1WXROd3ZURnFTaWhiSWZ4TkFnOEZiZERGbHNDOE1EUG4rak9nbTZhQ3hJSmdqdHBVdE5jUjlGbjIwY0NVOFVPQ3hmRGZNTnFBVi93YWlEcytJUU9JQWoxUm1jYWI1T1NMellzV2hWTU9jNE4vQ0dwZHhqZFlibmdIZmNvUmdISkFsc1AwRHQvNXRmLzdyN2JuKzJoOHQvd0NCNEN6eWcvK0YzK0JaRjZRSEd3YnN5TFZnT2xJNFVjVWJwTERuMFU4ajZTakx0YkNRYStiS0MwekRCZ0hsWWRNYjJzYzJicnhVbEZzY29MNm1pQXQrTm5CNzZBQVB4eGFEVEZoWUxPUytIeUQ5MHpvdktNM0xFM3M0MEV5TWJOREh3MGw1NmdlSzYxN2lZOS96cW8veDhyMzdUMW11dTVRNzdxckZFeGd2dlB0RUd5RzFrcTRURTRPWHlScll1eE9kVG51QU96NXN6RjVWNW84Q2xIcE5IQ0hLWFRMd3B3Q1RFSVEzd25OQnFCQVVLSGRmVDNCdEIxNk42L085VlFXdWZDTHlUT3dydXJrMEk0anlQV0RBS0JSbW1MWHBFU0tNbTB3UlVJSGx1Q1Zhc21EZUh5dUUxUVVsU1lDZVZlSEtHM2YwakF1RU53d2FHTjFIWmhkcUpOVjh4MmQ4R0JRTWJPblF3aGhpVWRrTldBL2o4SzlCbEtYeGI2dUVkU0hOTUdtRG5Ed2prZzFkZ0thT2IyWWM3YU5aNkJXeWdLeGxLTXFlMHFHeXNaUEdwa1BTbmlKVkkxMUd6bHBubFg1N1d4dE9RQWdIcW1oUWQ3T3JyQ0Uvelpla3B4aGhRK25pdXNERmNaVGdLL2pLVlJzVzJEVDMvYXBMb3J4dkYwWFlUQVJNc3FPQ09JcVYyc2J3c3pOQTA2NVMzRkJsdkRyUGlud1lRS2g0aW5yamJpclVxT25raGlRS1JJKzNpUk1VQTdQN01zdUNnWTN6Qjd3Z2VSR29rbVlBOEVNbzZoVkVRaER1bGNGUCsyQTE0T3YzYmlRYVVpd0kzem5pOHlGbkgxcXc4Ym52QjVUaEpoK1dISk5UOEpoVHhKYkJIK3JzUE9xNGpTMFhWZzI4T1NlMGMrQWpqQUZEUW5HdllHTjR4c2RGY2VHWXpGWnJpZERRQzE3OExwZGQwYTA0RGZnUnEyaUFrNFZQT0dXZUZ3K3dZaDlyNTJXQXc0MVBPck9HRUppb3h0NWY0Snh0M0NFMGJyaGtMM2xVMEUweUFZQVRPK0lYUG53c1duaVhiNlBhS1R6b2Z0WG56VGRXZ05LYVY5MjRiMURZbDJ0Q3NjRE1DTzhOOFgxZ05pdHh1N3FCT3hEdS9EN2dINU1uY0RVdzJNMXRBQXREM1dueE1qUTBaY2NRNm9DdHdEd2x0UmlTZ0dEK0kzUmZzVTFQaHRpKzBFaDBialhFUndlUVZvc2dqU2RmQVMxeVlUZGVlRWltOTZ0MTI1aUNEREsrTzdnVWZ3cnZpMGEwUUxJYkMzaFhjekdGSmZwKzBQN2tSWkJnby9PUEllMG5KYUF6QXNVK0JoMHkwZzNPM2RLQ1J6ZGw0bjdNOVFCSmNWTy9uQkpMbks4aEdETGtnUkZwaUJ2YWJqRHhSSStCSlZKWUVGWXZFcGtRVVNIZUQ1SEZ0Y016dExwUVg2U3FYeGlVa1JBRVZnRi9OdlBocjF0bkFMaUlRcldGSEdKM3NSY0w4OGJydzlJU3VBaWZlWnM0ZUJhVWFGKzZTendIMndTSGhvYTJwMFlBUENKeWcwL3lFWGJJTDZ6dzQ0RmZTQ0FmUUdLNWIwYnVRZjVnUlJ6WkJYcGNieXFEYjQwSi94NzhSalc1aEtIbkFxb0VSeGovdUxHendNY25MK0g0L1Z2aXB4cWdXeXc0K0tpYXQ5ZWNpWE1OdjJoMHFrYkpid0J4bnR1ZzI5MTF5WWFsMEg1WTJtNXhQWGxHSlFIbHVNU01ZS0tOMFVSV09oQnFwaStFYm5YTjFwMXJ0K2FTR2d5SkFQaVVaY05oY1MrTWNZakJqRW9HUkZTd1pQOFA0UlBuLzIzZE1BaDhNR09ySS9BaG9vV1ovOTdYZVBhZEowK0s4VzhtcGRDeEpkbXl4Q2ViSkdXZkRURmhGZmNHNjBNUEJDYi9manNFOHNjRDQ2VTR4bi9lL2NGVFlDbnJNSTJrU0p0clN5Y3FBaitCZE1TVGhHTFhhOCt4Ui9OK3JZZnhYcCtGTGJWalAxSFIyOWcxUk9NRi9KZit6OXVkdTAyREFGdDRPdXVCRUR3UTNuUGh1d0JQRjhKZkUzZ2Y0SVE1eDhzVUF3SjREM3dxZnROMFg2eVloMSt1RDdNWmtzOHdOL0tCUWdCVnh0RFdYUHpiVDZZdllpaTNBZnp2WkFsOTE3TWdmeTBIK0pnSGlUZHdQT0NDc1cyNDFsWngxWERrKzJLSHh6M2h1cmp6cmFpQk5iV3ZrbzErdGg0OGhkbHIvNGViWFArNFN6NFNBVWptM1lFR2FMVUxEOFpENFRDWXVMc09UOG5uOFYvQS9NdDJBQTdteWZMaGZDN2diUnpZNTR4dmVqNFVHb3ZzbXM2VGpmM1hCL2pidHYvTGU4WWFRUDRzRFJ3REl3Rml3b1ZrVGZHSjZXQXlHOXVDRFVIWlFaZEdrYnFrNWUrN2gvWEMrdlN4TDBnNldvbFV5dEFOT09LWEkyWVZNWmJzakNkQzVORkY3REc4NTMyQnYrQTVKS2RYNUMvcXZrenhLWkQ0YnpZQUlpU016bFdhTnF1R3pqaUNGQkZZQnJvcVg5RUdoWm54UkRqdzl5OVFXaWFROFNyQ3VmRUhtcU9WRTRxTFA4VWxRNUFiMmdRVktDK1diVXYvYnBPRnoxR0NabUprUDloUmRIYysxNUJjR01xQnd0enhYdWptTU04SzFvVE5taHpCaEpaM2M5Rzh6d2FBUlQ0enRaQWhQMzFqUExBb2x6NXZtT21ZK0lOOUloRGNqMlhHeDZmNjRXNHhsU2JKd0NhTlp3UTVyY0x5c3VLc25RVmxHYVRSOTJYQWNuMG1ia3J2WEFWbmhJaU1lbWRaRlR1QzZaOW8wSy9LWmZMcTIxZ1lQamF6UWRVOHZrWVN1cjRUeGlQd1hpYlJYK09kNFBScFRka1RQak5VOG9yZXNaWGJJQnY4MzJqWlNRVWE2Q3JyYWV3UHFMWUI4aDgwZnhnOWovMEJFTEd6Y24xY1NHZGpKcVprakNQU1ZVSWhpREFTemNydllPWTRocThIdkVnNzlZbHd1ME1sUHJqbGhMc1ZUR1FHcFVXcjZmZ1paQzByS1ZQSlI2WndhOXorUzVnU3J2Mll6bEE0VFRWSGxwMVZnU3hiaHZDTGFZSDd1NVVqM0RzTmdCNTcyTER5TDh4UlB3aGdCdFVDTFo1OVJlQWxaQ0dEeE9SNG90MjNJWGxKWklodkxTdkRxMXFZNlFTbjJFeUFDK3lETlRTK1h2UEo1RDJtNlJ0MExCWFRHY2FvOFMxY1RFdHV2WU4wVlN5cytjUEhyRU9WWUlOZ2p2UWtCSjM3NDIyeGtkZnptSFNva3gzQVdJeGpXOFBQKzhLanVPTWI0SU1MaElDSUFIQlJhTVRydFdnbWZnQXpBQW52SFBjRlJ2QmJxSk5xdytzaGpMTjNKQjhvQmwrdGVMWnZRZUdXZ1k3OEdMSlMvLys2NDdtZnlVejkweERpb3lUb2RjVHg0TEFnL2pIaGJzVmhpVjJER0NCSCtIU1RnUG5GVTZNQmo5OFB4a3UrZmpYOE5ONW5BblhhKzVqNkJDV0M4WEEyUXFCUWpBTHhMbENXdUZHa2x2QlhKOWxkQVErZ3laR0tNT3JpVVlCd0E0dUREdDVZVThnQ05HcURBU3JZTytYNFlMYVEvMmNOOXEwY0hnYktRWW5CNFA2NUVKaUpQZnBiamtIY0QwQkt0NG5vWDhidnh4VWp5cHpMNFlxWUdmalJCL1FCNUpna1MrOER3Uy9YMXdjWUtpMWVDU2tDSWdMU3A3YnpPWWtIeGRtNm9CdWptdzB5Z3preGozbGpKdzJyOFB3WStyb25oaTNrb1o1dU1XMHlWN3RNdTNmTE9VQ0NTR1FVdExlbDdSUm5Md1AzM1NEaFNVekdYOHIrMHZGSGpPVUh1TTNscERSK2JQN0J1ZTRIQk1iM3Y2YVIrcjJNMG94d3ZMb0JNVFJlQS9xTzBsYVVITitiSVNuV3ZTQ2tCaTd4aVR4L1J5eXl0VXlnRi9CQnJnQ2h1azRCTlVDTHI0RGg0YTVKTk5KTWVrUlVKUFZYVHplTnpnRmFVNDl2d2lJaWdZWWhlU3VVdmNSa3JBNXZQWUJJMGJEY1l4WVJRbnhGODVQc1RyQktSY3FLalZZTnhoaStoN1JCcnhLTHNWV2NTTVhaWW1DeExqaTdjcTlmREtDVUN3c0NyVGdMRmtvK1A0UVJnT2dCL2pDL3JBK0FBNXVCYU93RjhBY0NBcUVtR2phd0pwZ1M3aHRHWFNCL2ZLSkpBTmxOUlJSV3g2RVpOK0RkYmpsQ040akJicUhYVm9weHp3UytFbTZNdjczNEJVK0hHRm1PdHdZdzRzRk9mTUhhRlRnak1tNGxqd2dKbSszV205RUFxeVFnR080WXVDaGVoSzNkMjByZnVBQUZ0UjVCNFBkU0g3SDRIK2dQQUc3cXE4UGxBK3hyak00aWxjejZXRHRpNlZHMFhNRDgyZ2N1aEd3K3hnQS85dVhCcVBQS3JHUnNRMFdDa3FOZ3dMSnlGcTJlOVFQUW16cWYzSVJyWVJMcTFhQVBrSU1ialc4dzluTFNveDlXRVhPSDgrTDN4cDRNakg5OVRmbnZDbWZsZmdLYzIwVFc4YjRqWHRFUTFYbVg4UDZXTUJzVndIWkIzVzVqN29BdGtDTW9CRVNVZ2hsQlNCR2NXNS95R3ZaK2tKNThJWmEzRjBMZVlEd3NVTG9iajlqUjduYkNFam1mdEJhMElxQjdWaXhpa3RrTHNhakpVdlBGT05lejJKWEw1SGREaTRlbEFZY1ZRU0JBRWF3S3lHNXVFSXFBUWJMQVhtQUxjQjVJc01WU1pSbzltWmVSUVpacytkN28xUnJzY0RReXRBeWU2VG0ybVFjNG82Vi9vby83TTBzeEFhdDgwWW9qci9kZE1JV2VyZUVTTW9kYWNJbzMxczJ5aHdTQTJQR1lpUnRuQXhQY2x2NEJDbnZkRFU4Q1dNMElHRVJ0dGdzTGJFUkdlSmg3TlErRlBxTG5HTFo2U20wQXl0V0VOSStYWXNaNkEvQkFoVkNqOVZoU2NHUHVNQWlBQ0o4SDZHRFdMWnJiUndicVFoYkJUK1UrSmRrWnNqMXcyaGJJWTdBTndBRDhkVVliRnkzZ3llT2FXSWVOQi84c21RSlUxMnJBUWIyTTNDSVhnekhmSVJHc3RlbDYxamRYby9pbXdaRHFWSkc0TmkremY1dDdmNERLOXZaaTZHcytJRHVYR0E2QUlOekJNT1g5amZHcjNMOTNISllWQ3NuTnY3SnFMMDhVNzdSUHJTRWdoMGV0cHJjTTJRd2xQT0NkTUtVR2kzQWNpYlY5bXFVTXhnaTNWZWdBc1g1cVF5K3NNcFRLekUweUNtbHBPbERBU2dZeGlMY0hZbVJFeitvQjYzYkFRUjBFanMxN0UzSTF1blVYRDd0V1VUME1NRGZNMnpJelh1M1JqbjI4UGpDaFdTZG9jQTJ2MExSZFlMM0JUc09WbGNOVmVYYkFON3EydDZVVkpvWUFZNy9rUE1TZWEvbyswTGREQTVCa05CYy9oSERMQkxKNTcySlFOb1lUdVYyc2tmZ0llUVludkJWUVBqSkVKQmpEZkRBZ3dMTStoNldURmVqRzZrSUYrNHVBRnhZWkV6YjdBeUR1YjduMkN4UkZiZ0EyWnJSYTNOTTBtcFV2Z0IzaklkKzB3SEVhY0R2NTBSUGJUMzU1TEdReEh3VDJvR3RUSjQxTzdveHQ0WGRTcmpWOGVLWUVlOENXM01naVd4V01WdFlwU2VhS0FsM1E2N1FjTmdmcklRM001WEkva0JaV2hFdmkrcE5PYW9mT3ZyQVh0NFdsNzdES3cyenVsRHVlY0hzM2pKaGVFT0ZsTmVTZnJFUFYxa2JyUmZqaUwxZUwwVFNDekplZzVjbXlhYXRXMUFSNWk2V2UrME1KY0R3Zy93Y0VCUy9PMll2MXRuR01PTS8zUmErbjRSS1RaRHdRV0FBRDJ3empyMmd4Z0xWalNpVk1qQVc4MHZydkh2YmZuMVZUYlREelZ5TVJiaFpDN3d3UVp6L0RaWmhMYVR4MW1LZzlHS0Nua0tCKzBEUTBLV0NacGd5bDUxTyswR1JCVmpKTlhBZG1Ca0lGQTQvcENtd0NnQWhROWVpcXpCQWExZWFudnYvcXFmNDgvbC9KalQ4dk1QSmwwZnc2M3dJcEhCdUZtQlJjNllrQ2hjT3RjenN4M21DVUVvcWJtb0YxSE9EM0V6TGp3Zmw2MVhkMFBJckhrVEVBeWR4OFNzZ0tsSHQxMDEyc2dyeTk3TU1OMTFxditCV29CL01HQjdNb3NLT3EyWVA4VDR2cUJDalZOSElDL21KdThzbGdKK1N2WWVzQVFCYXZKUFBxa05NTUdKbFkrRzRjQjNka08wRDY2VWI0ZmtwUWZsVnN1azZBblJVMXI3c2FUelhiOGF6YjZrRTRMRitZRFNkWjhnVUJZTjlnUmV3WXptSGpBbmx6WEhFQ3lHUFo1MHdnbmhNUldzYWVIMnM1Z1IxQVZaYm13Nyt4YXZsYjEwa1BRRnh1cUhUYkp0T01oVUFzc0grUHhaTGhHMko4bnE3OEl4bjExNk1kMGpST1U4bUZoRXR1VDJ6OXMwSmxHUWxvL3JpUDBIbzB2NkkxSHZoTXN6bTV6aUFWVXZqNXMwNDg0dXFYRnVqR3dUYXd1dVdrMVlMbFZYaE5pQXQyQmM2RUh3WlNscHdOQ2NrT0FpNGlXL0J6M2hIT0JBYStEQTdNZitUSlhPWHh5NkQ5YzVYLzgyVitVT2JGb1lsc29rYjVRWTRPMjhERUE2QlNNTXp5enZITFZvbS9oQ213aHBGWnhWQnV1OFFDNjgxYW5DUkNBd0ZqUHRFMXl4NEVJVkNiKzFldkx1ZEZzd0xNQmljZnNSd3dDQUFsUUJQNkF2Y01tbGFXaDFkRDlMRmFzb01yS1hRNG5BZEVpSWdpaWpDQS9QNWFmVjVERWMxQThuZGFackNTMnR3aGZZYnlCMUNwVFB3R0YxNUdPSU5PMDRRRmFONW1rLy9wcW8wT3AvMUxPTlAzV3pZWWJJNTJKeVRRL1lpamJMTmtKcGZTdEpRQlMyTWR2dVd5ZVJvZEttMWo4VnpzbUc1Z1dNTkNza0R1UFdhUzJ4c1BBMzBYaUdyRy9YSVIvQU9Zb2dQTit1RVcxb1ZEN0VMZ0JhOW45T2VuWWN0V2pHS2NnL1VWclUwNDlyT2EvbnZITzFjdk8wVVArRGFjTDVRWHNIbi85SE9mcEhnL0pGTmptdUl2NEcySjJIRzEvVFV6S1RWM0RmQ01acFBZNWJidUNlZTAxSHh1Q0NPNkZxcmRWY2JPY1VDMkpKZzNlMW13WllrTW9CMUVqZ3V3akJta2lnQmFZR1kwNXpIcmZVUlR2M0VwT1hIVzMxNTgzQlVlUE8yQ1lUMStYN1BraEZkQWhJOFh4VWppUW5oM05nTHppRU8yL21GZUZyN3hxaFhrcjc0OXVNME9vUVF2c1Y3TE5FblpBOXFDRmJFYWN6MW1IaXhtZk15K1ZlUHQ3T29ET1k0NjBQRWZxd01xdjMreWhHRndFYlg4K1FDVytBdmF3YWp2MzRMWk9IQk4yelVSdTN0TGFSQXZaQmJNaEttd3pjc2FJOGpEampnUkMxOTdmV2Y4UUkvc0t5eENYdnZsWW16NytsanhhaTJMelNSWlBwdngwYmZ0TGkvT0FlLzE5dnNFVlgydUIzS04yMnRZbTEydEFVSEYwVHN3TUo2Mnd3M1JSVjU4V2M5a2p1WlRwbUlwa0M0QlNZVGdQbmlhaWRtTDJDalFLMWJpQkdhbXhkNUFMeE4xMml6OGVRbWdKTU5LcGxUdmFtMEFVTHNBWTRWWXRoeFptd0pJKzdSKzRLenZUNUxsdDdzWEx0UTBtWjRudlBCUGxobWJ6MlpJK0FNcktWNkRackhoRnYxSTBvSEttUFFuVnd0ajd0ZmkvejJ1ekRmYk5vQWM1ZytUdlVheE9raFpKQUFUQ0xZbHhYeHlXZmlXK2t6SXJFVlFBZnJiakI1YW9IOHRnQVVnSVNCZDFlUjlZWGRuTFR3RkdQUzI1OHNWV0pZSmdqS0xKWW80WHcwVlZoWEEvaHBWZzNkY3I5MFhjZ0owcWhpUmg4RStXaXBUTGpPQ1NOZW9keHNOaWRnYlc4bHF2OFppbzQwVnBXTlN4b1BzWHRrNkJIemQrMkJ5Z2xIQitTdkFRYmFCRzQvMTNValQ5QVhaZDVNSXNCbXJkTmtIYkhoa2I4Q2J6OVhNVkcxb3h5bTNoc3MrVm1qRENrQjdvSE13R3JUaWZubkJ0NTMvaSt3OHdJZkM0NWI3eTgrbzJKUUpZcHQyUFVCcWpvdkVmaUVxN0NuSU52Q0R2QWI4aTMxL0Nnd01lbXY1MHdPaGd5c0F2bkpHMEFPWUxkNlhqMnpqajdsTWtOakhtMWRiUWxsTGtWMHhEbjRiZGhrbm1vK2t0bWJlRklsNVBvc1dSQzZQRHZKVEVjNDJjbWZ3RDQ3TnFzTXRSOVNzeFpQWHQwVUxGTmpFZmJOYVVNSUw1OU1qOHV3S283dXlyWFFEeTEveUNDZ1M1aXpmS1ExZkIwYkFRMmJjOTJNczB0b1JNMVJ2ejZlMUNkTTVnRkxSeXFyN21paE5BcXdIaVNEMk5PT2EwaTgzYW1yZjZrbzA1OWxOeW1SZWZwWmZkVmNDYzMwTFd3a2wrdVVnc1VVL2ExT3M5VWtuUFduOVpZVDkzeWM2Rk4vL3ZOamY3bm51ZUV3dHlCWklhY0V2bG9WZGVMSFJvVC80K1JmOEJhS0d0UmdOQk12SUNic0I5OWZvaUltUmIwNlVOVi90Ly9LTy83d2grQVlUdml4RHJTYTg3YzVGYWEzd1NSSFBnREIydUdjSGZleW84N3J4QXljYTlWb2hnYW5VdW9TVFBaQWduU0lDRVlOZUNRWlpRSGw5TmE2UC83VDdnMGMyM1JsaHNSRGZvVnRLRWR4eGVqOHdVYk5ZSklXaFJ5Y0JlQmxrYlJFdHZoOVl4N1hjL0lCMVEyM1JWOVFPbWRQNk50OEQwcCtSLzJVN0ZwK0hwRTE0NUVKYjhaSmNHOFp4d1NXVEtkaGZLOVFHWHFIcEZ2MW1TR0RoU3NzTU1wU1l4MEJoaDJuYlVYRExCWE13Wmg0R2NRVVJ6ekJuY1dCTHNYQ25tVHAvMFVVOGNMYXdEM2lDOEQzUmN0YmJMUFJ0bjJOUGFMaWhTalFScWxXUTdGUWI3OXZTblpHemQxbHpjb3YzT2g5ZkZVS2F0dlY1Q1JObk1NeGtxc0VHNjlnQ1hzVU9UdnZQcnJzZ0hiYStueHdQL3k0ejdPM0RBV1hRUW4wcFc0YmMvT3FScFU1NGw5UFJDcjh3QXdlbnVOc1YwQXRydU5Lako3NFBUbjRWb2JFTUFVRXQ4ZjRiUkpPZko3MFdMNXJBd3loQUt1dmRyWm01YlhpNUxNTXg3V3I0OUhQYnJIdVozUzVsaUxpdG9XWWR6Ly9rODM3QlVoYWtJRFpBVmx0OCtFRXFMNzBremdHaWpWTkRIbitVWloyWUNzOVhzbDAxdHNXODJVNndiOThMNjQ3ODNnYVFSb21vVk5peEE5Z25iZ21pZ3hldnZCeUdOZHZMdGF6N2U1QzlPN1lLbEY2R1RTZlMxSzF1Wkd0aE11aW1WWE8zelpHWHdBQXRPRzA0M1M0NFdJaTE0QWFBeStoSlRtaWpkYlVOVkZ6SGZvN0dTeGE4R2dhQ1MvRXlrSnBxWVVlMFR0Z1FOV3NIZU9rZDN3cUJ3NDNWOXJKSkEzRTBoSG9IYlBtOHhRc1p0cnB2T1N6dmsyYTZVS014dWpLQVkwRWlZSkJXQmtQanpLMmNlcEtWTEtCQjhLMXJRTXBDTWRVL2JCL2IvdUJudzlZRnYzaGF0Sm5Gc29rQXhjM0JlUmYzcjlidVJuZnRkc2FpUG5iZEJRdFJjbzg4S0x4MlFwTXR0T0VScmxvd1hKYUw1ZklyNGx0VzRDZjRLeXNRQkZiVHd2VngrbTROUDBBZlpoSjNSQi9KZm9udEY2NXBFQ3lDUEFNN3lRNmR2SVVKSWR1T3JkaFd1RzhiWG80K2RvakhpWjBsYkRJMDZaVVRBQ2NhaUMzYkNZVWtBOWNBQ3ZNR2wvSmNHS2JIUWtUK0Z5SFpFMkNMYnpzWGh1R2hTSjkxcHNrY0J1UWVNUHE5eTQ2QnZaZUZFVHh3MDZIanZMQitFN2VRd3BrZmczSkdheFhTeEQ4Nm9jTW5xVkNjKzdITE9kMFhUSFBxUjVMSkt2WUhEeFAxMHlDR1lZSHpLb2FnNUErMVlRVWVwOGRnVEIzK1lldkdON1hJNzNkZnRqbEE2Y3FKTTBGVTY3QktwMzVyMWV3NjFjOE12c2g0L1lDQnFNbHNBQ0RsRVdBQXd1NDA4MVY5bTJ3N245NzBzL2UxL0JyWDVtNkdsUnFMZ0sycDVvd2UrTTNhVWxOSkZMU2ExWURlRyt3RytWdkdZNzdIM21BMGtLZDVnRlZmaXZZTVRzdUVPeUsxb3kzaEZRT2FkZmpXMmUzYkpCNm9kd1BKcm1KVlNtT0RiNlhSdmNCbnJiQ2JuWlh3M1c3VmtCR0s3TndJNjdRRm90RTFLOUFkSU9MSE5oVjgvelRpakUxOGJQSkh5SGwrOERPU1p2a2IzcVRaK1hCcXRZQkdwdy84Tlo3UDB4a0gyWGsvTDFoM1h3NmpFTk4rMDU3Sk5uUWt4WWc2R0JuUUFZNDNhMmZhK2IxMXhVRjJEWFlBVU5wNTNwTFY5M2RmMXRXZWR0MWhXNER4WTc0Tk9zTU5JSXdmYm5uV2hCV1BCZ1FRZUFQb0ZkWlJtcGp6VFNrT25TbFUxTmdzUDVBQTYxZ3RLOGJITkVsclZwZWwvekJoUm5kcjBoNThBTnBuV1hsLzkvWktYSGpZZUtvVnJ4V3RJUWkxc0JlZ1k2Zzdvb0FPZ1RkZmROT3VOaXo5YWNROWxCMVViVHZMQnpFQWgyQzVYeXZWNTc3YStCV1pEbXNQZGJ0bXhnUG10cUFaN1o4QmoxOVY4bXQxQ0FvZ285c0YycmJtYTZRNVAxNEkwYmp6MDRDY3ZHK3lwdmdCdFg4RkRXVDVnTDQxb0dHUHIvdVlxYnF0Uzc3TmVlZFdPZzdJZlBuMS9xcnhoNE5jOERsUEhJWURwb0hvejNRREtzSnF1dFJnak1lSW5WV3RwcFFOa3RoaW5ubjUrVnc0QlR1UldBdWNyQ0pxdEJOMStVNWhFbTRjQjJBUExONm0zS2dDcUw0cVU3Y0Y0U2lJVVVCem5sZTI2djdyanJWd3B0T3ZJanR1eWZnN3NYamdlREFHdUczaDY3Q2p1T1JpTlFPMFl1c1owMzc3aGpkY1dDS00xTVFzN1JhNEsvY0ZhQ0diZ3FLVEdMVFVZYkZJOVFiRmZraVY3UENKb0NORXIvRkpmTUtLRjVhZGwwSUoyVXRjb0ROTE9tK0thaTV6NmFjRkhYc045YmVieFhqTXRPTUM4Y0w1N2RIdDlXUTN3b1VUc2Nwaldlc0lXMlB2UU9vTDA3Vk1jdHBtanBHMGZBVCtEN1JmV2VVd2lZQVhlaHhLMEZLSEp0Y0xrTm1xZVNxdzl2MUFsRjQ3eVJxdXhraE5ONHhnZWJ3c09laVgrTmZEVXE1VHBldGJQalpqM2VXeWxla3RQNmxGZ3NISHhoTGk5eE8yQlVuL0pyTFBBd3dqK3JvS3FCNXVHUmRtbmhSMGhIM285NFZmL0xhanZuZ0ExdGU1Tm05SmVpSk10L2xJYS9WUS9mYldkVHVNQnZDVjlPV2dNRVF1Yjl0Zys4YlRzc3ZSeGdRdzlPbi9LRnpEZkgwMndqenN0dWtuczVxc1h4Qms4WDc3QVBvTndaNGlnNDFEdjlBZnE0cmlabHRmRUhKSTNEajVpbVpqV0RTZ3haTlBCOGs3ZVV3YjZONWs4M0VDOUo3WUp0YmlUbGMxeExiakVjVFhDb2J5TEhOMm16VjVPdVRPTWxKOVg1ejJHSlFUMjRoQUFXTWtDYkxDRG9BWnRpb0NKbTAyNFFGdmwyTnFESWFGVTRzTWpnY293bVpWOTNVeU5MeFVzRFNqbi9BOWdORWVSejV4L1I4K01qVjRqaFZ3QkUyMjlRbDZISVRQdVFnVG12U2c3VEV1bHVPRWt1b25BRDVZSFAvUXJWNXpoQXZDYkR3K0FUeFo3aTdFd2p3Q2NEQWVlbDVuTmZRT2w3MldOVnZMSG5XMjNqamo1NVFTU0REbU5waUtyS2U2NmdSMGJMbEIrT0VxQmdoNUpKTjZFOU1BNmRhd0xXTXhXRmNnQnNZODNGYStOMXcrWkFiYk5MdVc2Yk5DTEM1OFZiWlFxanFKQjVjSEFnSzJodzFndHlZa3VndjVzWnFrVDhFTU9qMDZTQXlpNEpnTmk5YmdReG5sQWtuQU5CQ0xHMUF2OXVqSUdSRHh1d0xpL3FIengrWTFhUjBQaiswelBsVW4ydzZrUU9vVHB2UERKSnRZMFgxdHl4ZmduY1hDT0V6dGdJc0FLOUgzZnFyUkM3b2hjUi9WK241OGJNYUJRTCtlSUZuWXAyOHJhd3M2QUdvTHE0OFZBb2RmV2xyOUV0TEhTMWg2K0oxRjVnYnZ2NGlEZEREYkFTOXpTSFl5c2s3b0FCQUhyQUFWeGM5ejlSSE5LNE1WeXd0d0dNRVVCMjRmSzNTZnlVaC9YVk42YnpEMng1WEdMMExBQ2x4bjJKSlZhNWhhczByclYzUno2bDMvN2N2RzBITDlieTU1L2ZPYS83OWQ4dnF2SHZQL3pTV3YvLzJiczd5b0lpUTBZRzV2YStLRTBpZjZrSDRMZVRjY24zRklKejhzZyt6MytJL0wvQ3lIY3hCK3RzTXNwZTIrTVBlZ252ZmY0SUJUdTN6OSs5Y05IdjBYTDJ1ZEpPWUZOZDZJbzUxVXVmMW8xN0xNOUF1WFExdWdaSmdpZkNkVzBNTG5Qait3SWh3cGgybzhoSFd3Wk85VEZHMW0xQ1RvaDBRVHVEV3JOc3ZWM20wUEtmYndYTisrS0J6eHJLNFpvR1pWc0RVZUQ3dXd3cHdPdlVHWjRKSExrbmowUmtoczZPYjZiT2I3ckhVR1c1U0JaZGhXZ3pWNzlEc2VheHNVL09JeDNWWnliSXRoYjl1QkhQMFJzRG1mSTVRc3EzN3QrZnF3elJsc2lFTkV4Wko5YXYxNUxJUUFEZk0xVE1vQ2htclA3Q2ZBQW42R21kakU2YlNEMUM4c2FJZkR0RlFDak8wV2pqdEQ3eGpPTjd6THJqSEwvWUp4TlNjZzdRRGdkdnJNNTJ3MTUwN0FDWnBnRk9XSENzT3VvZzJyZU96UDhIODUxWnJSQnVwa21mVm5kYUxmMUNkRE81Rkt5STNKMHUva3RpNFdDNE1KN3Rxd1NDaUNwc2R3ZExGMHlkaTVmdmZPUHB3ellaQkE4UWtJeUM0bDJ5QUNIaUdZcDUxbjlscTNsWDdjRWtNcHhiUXF4Z2Q3VHFPRkpYcXV6MGtmbWRHRUFkejFjTXJIbUR3c0hONlBpdVR1OXA5Q1dNVHh3MlZEN1NQR1pqeXVaUlVHRnlpcDJhdzE4QU1CcDFLQlIxQkV4ZkNiVmlBNDYwTU90VXdhaFZPZkc1emZ4ZzRub3phVzRTNG43U1FMR3V4VWorQXNiUE50UlFxK3JEM3c0eXZjZ29xU3dRYThUY1R4NXo4Vm8zc3NpZFp0WU1PeHBILzl6Zk82RzlYSmZBQnJLT2Q2KzJrNlpZc0ZLamY3QnZDMFZ1aXpNc1FhVllBOGtFYWkxRSt2L3lmYTNXQk9tT1NMVHp5N0NFLzhlRFVUZElvanFNbm04NDRvZ2M1aWJhQkI1eVhzYWY4RlBnWFFCNUp1eHJUZ0NwSzc1THlPamg5YSs4cllvd25LZi9LcDFFZ1dQeWN1RVIxamd4cW5XRXl6Qk9kQ0RXdlljVTdnOVR3aDNSVStMRlYyVE5hRmxDYzI2OHVIcVlJZGRGK0RIWjIrSDhBR2pKWWN1bW1GRFI1OGRoT2lmaFZENHJnWk5JbWRYSmRSSWhNUW9KaU5YSDJ2cERuZXpyNTY0WDRxVjA4akE2YWRXY1crckZTY0ZLZ0REWTVYbTg0OEt0bW8zOWRPSTlkMkxnK3lETDhRbTIyTVUxYjlUMjJ0ZzV6QTNOemxEbVhQMCtBMnNKbVFLR3U4OXJwMHE5QWpPT1pHSmV5N0dNQWdlSkRCTXJHM1JvRFhXYzZGM2ZPa3VrOXgyTnJQbVRsa3JSRlk1bkxTaGZrdExyRGhmMWdpVUt3OXJvNGNhbGhHN004d0NnUVlTaCs2RDIxaC9leGJDZllKWXRjL2N5QVhhQkwvMEU5UzFwQ1ZMc0ZhdFdMT3o1UkR3VmFjVVlmOU9mV2RJZzZ6UVFzQXI3a3JnSVFTeDNWaW5MRllDZHJ2VmNvOWZHM2N1SE1FNnNNWGlnR3RaQVZBZkQ2UXJ6MHM2N1NQYUtqR3I5UXpYVGFyWlhZQk84SnRSc0MyZDJmZzJhMThRMWJ0ZVVnZENXZEo0VkNBYlg4WTJ4a21ycVpOMlBZMFQyUy95Qm03QnVGN0R4NTZONHNrUTg2aVZNU3UyS2pGbi9kb0xMSnhOaU5ucDZNcG41U01jMENRYkpocXNMYnZrTjdxYUtUMWE4MEY5Wm5ZUEpNNVdqVmRtaUhoblo5dk1lUG53bE1iaU1iWmNuMlB5d1FlNzRrdk5uUTUyc24rTzUzUWNWdFlBc2NFYXA0c2NqMnp3Nnh6Y3ppRjB4ak9hdy9SS2RBUDlKNmp5cE5ZNTJVMzFRamxRY1N4VHJFa3kzcHU3MitGNlBQc1dqRDhUcmw3TFNacnR4TjJIcmp0ZGFmakQ4dy9yejJqdFZIZHlISjJobDl1em5jS1JVTGZUNWs5aG5qeDJmdXhiUGlaaGc2YzZ3VmQvL25YZWlxYkhjVmg0ZWRuL3dYNm9iSUgrK2JMWTVQeGQ0dnBIWGgxaGlnYUhyVmMwMExDbmk5WEptRUxNL3R1YkxMYk8zUjNqSThpblo2K2tuT3k3dXhrcEZoNEcyQUpCaW80ZCtwR3E4Nk9MOW1SUGRZMkNaY1BVQXBzeHJJajdOREtZRWtHUGhkYmJWSHJOSXI5dnBGcnB2WWFjc0NsWUFaUlpCemVaWWtRSnBkZnh0anc2Z2dYcERTYmNJeEFHa0dXeVFNY0UwYldHVWRMaWV0Mkx5Sy9xWnJEUi9pdkh0OWpkNFdEZVZ2Q3NoeXlkaGVuRmpxV1l0c0Q4Q0MyR2FZNzdhZVAwYkdNRmlmYUFZeHd3SG4yOVNURnlqSTJRelN2UmFaV3RGblpDV000Q1ZVYkh4elhOL01OSTMyek5YeHMxVDR6Ry9qQmJ1bm1sYzR3UDd1VExhRnc3aGxMNTU3ajNuU01mQXREWWVVc2l6OC95NTk1OU9lTVQwVFJxMmxBVEVtNEZvNm5JMXloTzIvcVBVbUo5U3dzbXoyR1RrZUM3VXdzTnM0aldyeWFMVWFTejhDRjdER2NKclhMZDdHcEFkRWNmQmljQlNiQWU3Q3I5Mm1CZ0pEZ3pzemtETXpZc2xyRE1rellDaUp1bEd3WVlhaldLRjdSOFpOdlNoTllaREwvTnhjeXNxbjZLQTBscEZ1ZG5mWjhuZ0dnYjNST1N2dWdheGpqTUhyQUZrSkY0V3UzMC92TWlnS2dINmpxWjBzTTJtd3I4R09zekM3MVlWTDJzZllyNUk3VzI1WGk0Rm9NZkovOXNvL0hvVzdRK2ZLY1dBSzJIbmdGRkhvNmNtckxTM1JpREFidlVEVTg4SXZCc3NEVEVHZVZRdS8yWHY5KzE2YzVqTEtPdi9jOGZZYm1ZL3lYai83NnN2NzY4SHV0OTlkVy8xOSsyb28ybTJZY3MyRTIwWG04dU05OU85UmdSSXhMZXh6WFluRUZGZzhuc2o0aHB5WGIrMUVOWUFzWmZ5QkJmTWRVdXZsak9rdXRtalVCeWlLbXhjRmZyOVdhVmVMMzNkVnFKZENRUFBxSGplS2ZSTUZwZEJIQ0c3ZGF6YWhzTXFBRU5FaC9taW02NGNocEVnb2R4dVUxaDhvNHRndGJheGNNTG1WYnhCckFSc3ZlZFdjVW1WZDAxSWR3ekVsc2dGZm5XWHd2YkpnMVNoWnhPbm9EVmNkdk81bkYydVFIWTVmNEY1UTRkSWUxMmd6bkZJVzdDZzJSSFQ2emJLaTNjdmU3T202a3h0amRWRXdGTmxhaHRvUnhWa3lpcWZmZEg1Tmh3QlV3eTBRSFR2QjQyQzJCcDhyMloyS1BCdHVHR1J5T3RJTHl4OU15UEgvVk0vdXpFRktKRjlDZU52UDNoeS90TU1nc084c2F1cFBhL296aytYM2l6L2Vmdnk3WC8zNDVuRUw5MTd2NTdiL3VkZjF1OXU4WCszT3pZWnY3KzRBNXdWbzRHSUM1ZnRZSmV1dTBBSm5RUWNEYm50ZWZCV25sdjdqZC8rM0xPWFhwTW1nSkttR2xMVEhGQm1sZklVYWZVb1ZYaGhYQ1g5N3o5ZGFIeGN0RGFobFAvTkZSRFRndDAvU25nK1kzWFhTViswOWxKazl3aXNrUTAxT3lqSE0zRHY0Q2NFYzZVVDRINTVuM2h1RmFIeEZRMnBGTzJXaHp1RkpDbVVCM1RsdnFqckxVNFJ6QVA3czVxWk1NZ1AwKy9UUGJacmV2ZFJ3MzhEcGV1Nlh0dUJIczJENnIwK2RaZk50Sy96enM3MUZ0MVhQU2I5UmxPaThRZC9SYVpmZllmRjJ1VXV1WVozelV2RSt6VE5vQ01qMDJTL0hzcms1N3lBTm9CUHk1bmFXS0FZZEFSTjFXL2NmY0U1RC9mejRKcE5zaEtkRVorZEJ1YTN1TElkb2MwWFZuWUJRMEpGbjNaSjNLWjA5NXU4Qkx2cXdlSXI0aUhpOW9tOG5FYnlaVEozek1OaVY4VzBOZzdFWlhkRWFNelp6M3dOb0tqSzVvYk1GSm1OYitQK0FTcDVjMHAwM01GSVVXay9mb2o2MjExWEc0SVFHUU1USHhWR25nMjRlOWZXVmNqOFBFQnRwbEZCaW9hT1U4Zmo5aGtuTUZhNHJOeStoeWhkMTJjWnpTRkJra0VCN290STZZdWcyMGw2MVYzU1lDUG4xTTFZMG5ldXhtNDRraXZpZndvbkQxM2NOcnRQZ2RDYnJqcXQ0T2NWYjZNRXRmdll6em5xNnp4eXBIVUtqMW5lY2dDZXhLa0gvYjBkUUJHZFpKWWUxNFRJK1hlREIzRDg0WFI4NFNMVlRFZEFBT3lFamx4NElEY2Ezc2M5ekZzbitUSmNNM2RTSENWZ2Ewejh1U1FHN3NTSVIvekNmSEhUbWtDY0M1Q2p6ZXdZZmdGNFVrR3ZBM2JlSElqZkE2d2hoOFVSMXVCcjIwUUxJMWdLVXpYKzFydHUzTStsN0FvNTFyeHIyWDRSQ2JvMWFSa2JYeHE2Und0eDNmaEMxWmpyYnNOdDA2bXJUWkpoMHV4eCtFaEg4RklJSUNiOGU2R01rNEpZb3hPeGtITUhVYjRyUnJhY3ZHckJoNlBXakRnbjBUREVqOGhZWVg2Yk1KV3JNWUMzTDE4R0pwREljQlliZC9NNkRPZkkvYlFWcE9ZZ05RU0hZVjd3ZVozMjFkZGErVFJuZWtLcHdqTy9kMU9FWWt2bzREZGhqK0djRTBucnV5dUdjMkZvRFNzckU3OVpxbFdPV2N3dkR1bk9ZNE15dXpnL0dCYXdyaTQ5em1NNGhrbEYvaG5vYlVtSVVzSHdQZ3pDelRTaGlDQmRHLzBFaFFITlRWdVRaQ25MYVBWZXY2dVhRN1p2Nk1lVisyemZJU29oZHJZVnQzSUlLbGFyQktRT2pGN2pkc2UvSkpIL2t4OStuamNkemN0b0tGMVRlU2J3R1Vsc2lBRkFyOG1DT2Jwb1k3dEFjb0VDNlA0bkE2aHVVTXAxUlNaQXUxL1pWTXZHY3k3ZW5yZDlhVk9lbmwrUS9RUWg3dHBIczYzaFk1WWRmczNPZS9aYk1pVW1TZ1dDNEQvTXZSbWppSFg2RDMzNGtyNlZKTVhyWlNMRmdLMWlzaXM3a0RqNDA3T2t3aE9CaXVRSHZDeWVNNW9VTHNhbkhhWWd1ZEZ2QnQzUUo3S2tWdlR0aVMrRmwyczY1ZG0wMDF3UmpQNUhtZHZNdWwzcE1iZzBBNTNXN0FPRHFJWTlvTEVneldMSHZjc2pLNk16QUE4Ym84cldHaVhzVmhQZ2tFYmwwd0dJR2ZldTM5QSt0SDUyMWlEcjVwODJNcGdoRWJwTzFTYmJhUGFnSXVQcEhuTktYY25QLytBdmRaVVpPUTJRNTlGSGFoM0V1MzdieVFWTGNRMEs0SkdOeGZZNnNReVBjNHhYOGJYU1U3TmdCNUI4ZFEyQnpDbDE5WDNjd29QdEVDQjE4K1FVMjNTWmIzUWw4dytzV3VKMjluSGF3VG1DcytvVGtZMzk2WmFuK2VrUmhkcTEzOWF4Z3lmUzN5UDJWTWQ3b3YwVlpsMjUyNlpnc05FcThZdjZmZGFUazN4dk9Gd3EvQkhxWUU3Ri9SbWhTbk85OUdmZmNKbjF4bzl3ZU4rRHl5Qld6czNNdHpwc2lYbm1pUnFaMGsyUmR5dE42L0pJTnQ0UG5uOUtyckgrT3JUS0RDR1ROY1o3RzVEaWMwL0dYenRPYzFGQ3YxK002MkpnWlB3UVo4VHRSeElqUU9NYldyQkFzNllNUGZWL0swWVE3U1o5UTFzejBRNHJVMTNwYk9Jay93WFNFUUsycHJFdHVLeW1wRTBhekxtY2VtaW02TXFIUFFVU3hXODhYcllhdTFOZEdPdTU0ek1vQjJzOEFzVnJIYkdHeGcvL2hJNHdNMlgvekViZ1dLZHVielduSUwvd3c0clhMR0w3L0FzQWFZRlpwaG84YXRNTllEWlhHMlJsRVFQbEJMdXh5MVpXOHlaSHBiWFZ4US9TQmN5cGEvcy8rc2lpMHNFK1Z6cUluaXNrOVN6V0J4YzJnNE9qNDMwSzh0eStudEdKeVc3ejdPdUxUekZsS0NKUGRqZHJHWThqMEVGa3A0VzhnVzdTMHZkalZhN3ZhT0s1WnNsNS9sbHVaYkxWcEhzT3B2c3VGdGRHSGdZdkNkR3ZjWm5aZFRuSXlRNjNJOVR3Sk5ZQWluL1pPNk94bGQwVU5VTVIwYTR1a1ZSdHFHRXdhaHFvZ2J6Z1FENUtEdzRXd3g0SktqVkR3bTVESzAvMWl0Q1RNMWh1ZjhWNHdHckFUcVlEN0U2Z04rMnFrZ0huNnc5bTVOUDJER0huVlBJempMT1Y5R2N3VmF4YzRzWHVqTVZpeUNZWFNXbDEvT202MU9sd3ptTVQzSVkySnRicTRNamlwWWFSczdXN3lTSmN3V2UzZ1NUN2RkeHE2Wnp3SkI1Nzg3MkRlbHoyS1U3cUJvVzVSOXdBWVE4WkFKamJyenZMN0w3cDdITWo5ci9lMVl6YzV0QmtMd0FqZHd4RzVlNEtUZGNmZm5EQlI3MjdOczEra2tnS2xsRnRTb0g1TG9kSGVZUFU0ME9lcjZYbzdkNG9HcUk1UU02emxWeGxaT0FGV1Foajl2cWc2akFzS01BWjVCQ0s4Y3ExV2p4OHJaTGZJdHAvS2lBT09NZER6YW5mcDYwalRnbUFxUW96alV5cWJGS0RjbzQ0VGpyN2dkTlpSQWpzYWg4Q0dhTlJ2MzdQVzMwdmFjS3VBRXlSSzVQZThlSGd2UERYTy80YlI0bm5rV0YwaU1hK05ieTRCMHoxMnRyTm0ybnpza0paaitCM0k1dTk2aFA5aU1kaVl1QThHclUwT0FBVHJxV2ZCcjRjbkcrZmM2UlgrYWZGYmx6QUZ3aERsNjVVU284Zm9zemFsYzFlbkhqNTJjRS92blJ2Q0NrSnJQU2FMZENiMjJ3L01Hd2VnaDdCZFcvc3lGRllxWkpXdmwxcnc2dE43REVTQWFxS2I5cEkrVHR1TzRUa2xqUGlOdGVYVUhFUlM3a3M0RzhNcjl6SVhVVE85VHkrR0V0MkszK1BLNEJZQklldkZ2MElQTGVwZDU2dGlzcGtBRnN4bDJHM2lUNGNWMHlwMUJ5S2MxcmhlYkdCOXIyRUcraUFZd3J0NW5jUDNGYXRnNmNzVFplcTBqMEZiTW1pZHF2L1RKZzVmL2paMCtFWXBkQnliQzNwdS82Y0FGTk1oT3JuQW9POThZOVVGcDU2K3QrKzNoc3gzODN5NTUzTVcvL0JUN2Z2MVRxSjczRGhXYzhadGZZckZyLy9kTDVwOVgvdHZQOFBRT3g1N3JPbTJUKzBhZHNSdFNhdERGdWoxbUFTY2QyK256WDh0SjFyRmdYdS84cGpQTzRIWkduYk9qMmpodmVQMXpYWDd2S0VQOVBlLy83UG11ZjMzQWZ6eGZCQXkxVlJ5bSs4QVQrMnRhYmp2SXltcmhRMXl6aFdUM2hIZ0hlKzh2Si9hbDkwK2IxOUVXREdob1dIL2tlK1V6Z2p3QWRvS1JHbmI5SElqenJDK2ZTanFMYUNOUTlKa1hacVpGQi9zdW85Vm5Ndmo0NEVleHZ0bm9mTFVrc1owT2lnZU54Rm5EUkR5MkIzNjZmS0w2RnVOL09NaHpSb1V6MVZ5YU5OZzdRTy9lVHA1ajllMVhyTGFpbndwcGlFVURuajhOV2pyMGZjMTRDY3YzWGF2Vlg1djA5MXRJQ2E3elVESXdkd3RPUUFnVGtRZC9ZV3FEWFp2WWs5Y1JCbVU3Ui9nSTZjMGFtV3Q1REV6djRUU3p3Q3Fpc3RZYkJ0Ti9Ob0VOY1VYVnZ3V25yR0VmdjM0N0ZOUVJjSjQwOGE1d2RZODYrdXhmOEFYT21GdkxWbmZ3K0ozdDZ6Nk92SE0yY1hWMkpaWUVZTHVhQ25lT0g5aW5GaVZmbHFQYVRIeE9mTE4xSU5qQ2J3SUVQYmYwZnZ4NjUrQjJtQ3Nza29YUnhlcFE0KzFHdzlLUksvdjd2OXVoSXlmYnlzOVpCV2pmb3FNWnJDMndXVDJmVXlhSDFYVk8vLzh6YXVXY0paWnhwZTB0OGJJWXhrazUzUW01TmlUb3pWNGpNN2dBOGU5WDg2L3lvUUFxTXErRGV3TDBKUHNFdUFOYytuR3c5OFVLZUpsdDdRRTNQNE94c3pkK2s0ZXN4TjRobUNGM1l6cmRvc2o4Y1p2eFdGenVYSWJqeDVEMHF6dkdjejhuaUtIdnJUYm1aTFBpYk13Wk1tcXpUZ2Rhb25RQlJ1bm8zZjQ2WGRKdW1uRG5DY1Z0VHF0K3pWREpIZU1haGp5QmRmYW1PRWpRR0M4S2dWbSsyN2JjYWxxQ09VNWVFRGZhOFJQR3doY28rS3IxeklhWVFxVG1DSU8yeHVOSktmSUttNVF4SXUxZEh0amxxVkZHMEl5L0EvS2NNeFZDZGd5RXNSR1dZWTFpQXl0SzQ4UUE1NDJiQzdZTFlOdEo2SW1ZemRQV0tqaW1DMTBkaXJlc0szRGUza25Jd1duWm1OZFl6YXRCeHNGQkdCMTlaUWUzalh6T0ZzV0ZoWFBnbUFIV1J6RGtsT3BxLzQ1VEJWN0lTZ2NlNHpsWE94cnlaL1N1cDJ2QWR4T0FFTjRJYnVGQy9PY2NEUWRjUEwybWF1TnBIcFpRWVFYcVBuWCtzTmd6NldlOURqVEJ2TDRPRUpsUS9XV0I5N1pIUERudTFRbW1BOUtQNlFBQ2R0WURhY0pwclFlcGdFSmc5QUtJSlRzWFpNOEhON2xnSlU5ZTZEWTR5NVkrYkxUSFVEUlBXektHSEhqR3gzSnBRZloyd0Jpa0pqdEVibjNPemJiSDdBN2I0SlBSRmRUVzdybGx6WnFKdzVGc3REdmI5OERaUEJPdzVXankzOU5WMkRVNzNMZW54bGh3NGlHc096bnpGdkF5RUIzbnpOZ0RjM3VjWEMvL01ndmJ3cVl5L3ZUVHJyK1pzNXovL3ExLy9jNFptbW5hMElIWXcrRjRTOVNRem5sc0ZqSlZxRGtneTU0OUozNGoxL0VjMVZOdFFSdW5yZ1loVHNueDBKYmNJQWpiM3JMVkZwN2Y4ZXpEYWNUMWdqMEQ4bkowSU1ZcGJiSkw1VDBaaVBramR1Q2svKzdyRzNRS0NhczlOb2Nwc0pvNVFKNnFjMlphc01FNnozTjQwV3RJTldHN25qNGQ2M3BtVE5zMGRRcElteFgvQUc4ZStZa1hGc3l3OFRZMWZsc045ajk4cG1LZmZCd0RtcldPcTBxMVNxOGZFSmVlRnhLQVpRNnZoWXlmQjl2QkFaYjcxb0tWQWw4emNPdEpUWFo1UEU0WnhvUlg2eUtBMG0xRDBXMHlkNmJTaVNMWFgyVFlzMjRNVW5pNG5tTWg0NWxZZ3BOMHJ2Q0p1K1Z3cllWN21WYm9POW9SOFppdjRZUHFxQmN3Tjl0NG5qLy82YS8vRFFhM21lc2M5MlVtNk1oTHZJNjRIR0ZoMWY0cFNQSGZ2aTU5M2JxcWZCRC9hMEdEVll0V21zQUVlcnlLM1NnQTh3cTczc1hJMkZxZUJ3QnlIQTcvZENZemJNMDVkbllreE5xQ25pT1krUmVkUDVLaENJVzROZHJzV0xJWWY4azFrM05qMlYvRGljTW12QS9XMEkyS25LbXJ3VnJuNHJGY0ZsSTRJZVdrMWEvL05xL3VtWGIyWWV1NFVZY3prQW9HNGxRVXlQUDBFS1VCV2hTTTQ4UHlKZkMrblV4Z0JiZlJRS2VncmVuOFM2T1pnODEzcUxlVkx2czljNnN0MDlKYWFFL0RtOUY5UXdZWE1LTURUQ1FRY0xKdUlIS2hoUG11VGxWL25DTnVCMkg5bkwvRXowaEwwam5BemtIb0EvNTlnNGJnSW13aE8zWG5BdXBvNW4wL1IxNkJOWndVTmswR2RTbmU2N3dMUkpBMTNBWnJzRWlHcnozaVlJQXNjNGNjODNPbUwvczlTbUczcG1jdW5CcG0yTFZJQmF2bHFaaUlQSTZTSGZIY1NLZytUc3ltclZHSHVZam53b0FCY1l6ZExOU2dUVXc4cmcvbytTNEw4WjdIdHVuaTNOeHNPKzNub0JnYjd5d1pibmZCVEJlanAvQitUS2FuQVZUcmhMTjFFL0djM2dPZ3ZIZkZjSDlHSEVCaVdGV0xXSVlENDdkRE1MbjE2N2xOc0U3ZUJGMnp2QitIZXRjS0JuRzBlUDg4eEk3bk5HY1RuMmRZWi9mbnlDdVB3b0hTL3M3SWFyZ293K1hoSEp5RXE3SC8rM01NdHVld05tZTA0QzdSWUtSb2ZSVWJ3U1dkVStRWXpISnlMYTloeUF6QkJlMTRFa091bDNQSFc3V1h3bmx0ck84SHRrYWVuWWtsbFB0ekdpT2dFUTd4MDd4UExPM1FobmVkempsWTUwVDdiNFBtT3g2bGdmLzliMzdVb0hZOThZVHFKSlhpYVdmQlRuZFcxTUM0VSs2c25KYm1lOUFkZ3Y3OEFOV050Sm5nRzhsTUNWemRtd0h0SEFFenpsR1JxNkRZb0RHbkREZjcweE13cVlLUW5EWDdIQ0x0eU5LN2ZkWFRPejA1OWN4M1FmcnJjRHlEZHJMQUxJRDdEbEQ1S3J1bXhKeUlpWlRIczE4OFpRL2s3YUc0dytIK3dTRkw4VDdCbHBvZHZnZUtWNTVQZHZCclRxcXpXMHhvNFBTNjRjUkZEMGV0UUtLNlBDUFM4U3hkc3V5cjhrOUFoVlUvejMwYUFUeWYwN3A0YkVudjdUcUpGOUNsZzJhVmllaWg1WkM5UitvdkI3REJBb2RRN0hBby9WUWEyMEpsMVE4bTBIR0pTTjFiQUtOcm56TW5vR0JCL1p1Ty9Cb3ZiQnNEYWsyZFo1M1lsb3ZpUEFHaTFQM0JkZWJWb2pPZXc0YkphNWZwL2pySzQwUUtYTXp6TEQzZEVna0oydTNhVC9ZemRyUGxZR2d3RkovSmY1MTNXcitUKzIrWGRZSDNPZHJIQks1UlRNdTFxb25pWUR0TFlWMkFOcERJSTJKL0JBeGt6RlliY3dkbDJpQ1lFY2hUc1c4OThmQW93SGxLWmw2bkhqaFFFMlZ6aXA1OXlSQ2RmV3V0djJqRjdqNk5uTk9CZFpDdmpvWHN2NGtoeTlFUDZWK1Z3b2cvTUJiejI2b0htb0phV2NFRG5XMTVsWDBYNXp4N0NvTVRiMDZ4Mll1dUJ5VVZNMncweFZOdVlyQUZyVnJwNDZrdGtBZnJHZi8yaWtlSGpnWmQ5emxDcHRXRDZJc1RLb0taaXZ2YnhUa1ljWGhnQVlUVUh1dlg4ZGU1ZUE0Wmh0VVUrdHhXaUdEQjM4dVdCQ2R3Mld0NzZ2L3pMMGJDNHRaUWYyWHAzNS8zenZpUCtEcGtPR0liWXJubFpmMTBIcS9MZzJYUVZDZlFUSDRZeEZxc1Q0Mi9uaFljMWZyZlhmcmtyWUtEMDY4bCtMWnRBUmlNT0ZyZGhqbVl4NDk1Mk5BNTZRNi9GZlJYNW91dHpFUHpEVnhDQVlQdE9pYkFMMzJDZ1NlRGpZNmJEeDRQZ0dMQ2NzN1p3STdBZkR6cEdMVjUwMWgydUtmYndmYnY4YTNnVzZoV0hGYzk3V2FtZE9YeVJWeGN6UzNvZjdjVkVjT2h3Q2ExQzQ3S2s1QTlabU1iZ0JxZVZYc0x1a3l3T0hJWExDbjdpNmJjUHFjdEd0TXNRVXAwVGlscUo2ZDVvMzJtSXg4blY1YUQ1aEgrYUlOem1QUDZwU29GYXNIMHROT2YwMkQ5bHFOM25kRWI0enJUbWMyc3RUT1l6VURmNDRtb3poN3BKeTN6b212ak50MWpxV0p4aXFPbE0veVk4MU1xSy9VQXBSMm1XVytQdXdSSEZEdGNBQmt0Z2ZkZTV5SzNQL05xZVVpWThNblF6TlNkQzJTZStINHdBTHVlU1BHTXU4YmtNYjdaREJlT3VucWVGTXpRTXQxNENtRytDd2RXSCtjQ3ZtVTFzQTk0Mm41YnozNTF2TUE2WTF3ODBleHhMay8rZFZNOGY4N1Z3c0J0VDY0QmRGMVdUTnVRNy9HQXJMT1QvZmM1SE9aOHRCNjNQSm9ub0p3SVRzQzdyNG9yaTU1NitwMVJxeDdNbU9EOVZyRkFRSjBYamJleWlMLzhUUzA5Ly91RkJNZm1hUXBPZFRRRVpxT0RTZnVURVR4RFVDOU1qR2JaZVFmSXlHMEZuUU9tSEhhMFR6cXQ1Tjg1UHRaZEZhZXMyMEg0bi9wLzZVS2RvL0NkdlAzZks4M2ZadkFXUkhMYUJUM2w3VTM0eFZvZFRGQTgzdkp6T1BuNzRnKzNaL253bzlwS2VJaGQzazZVQ3c1OXkwaVEyNDM4VktNcjAyTlZzSDhuVHZTZTA3V2hDajFZRGNvbnJuaHFUWkRrVTNuVG5aNTRzeUxvd0x6UElRT2oyVzZKRUU4bktOcDhiM0d5SWJieU9Ea1poZ0RvU0pjTkx0YVBXVG0yaHZQaGtzZmtnYUVmaDhNSEo1YS9uZ3I2Mmd6ZG5PMnBMM0w2cVJXWW5yV0J2RUhYMzlmanc4VHhqL044K1Jtbk8rQ0lkYVpXN0s3b3NNOXUvUTRPK3daMk8zcjhPY1Z5ZUFCMmFEcE00RG9oRkFDNStHVTYyZ0ZnNWJBZ2c5UFJVOEtEeHhFNS9NekRUNnl0aE94Nzh0M3lhRGxJaEFLUzhQMC8wb0tjTjFOaWdHWkQxMkU2cmNhSjJxK05EaW44OHRIMmJpZlU4UFdjS1N1dGNlWEpRdWRRN3N0Y2RRd1oxbStlZHppdVl0M0NRanZSRGV1Yks1SXh6eE9UdzMyV09UQWxveDhrMGV1SUtET28xck1Ta1dYZFRJRkkyS2xSREpuK0NpdzFUTTZlM3RGRGZLM3g3UmFFYnVNTDJHSGtkVHYwc1RuWjY4OWswN25QSVhNZTBwREZhR3hyR3lmVmhLa2YyOWxtRW1qUFMweW1mOHpqLzg0N0F1cjlacks4QzFPQmVTMmUrUHhyZ2JRbXBKNGhua1hHNlFHTjFWbmlGaVpoNHExbWZteDF4S2ZiakhRNldLWm52enpid1ZPNGpUZWVmQjJ2M2U5d3N1YU9uclJvekJTVnc1ejVUQTdBaHZyMWc5YnZEeVhEdFhtMldKYVlwdGtTQW96bU90SGZFNmxONFFHbHpwRkdOcFFBOHl3TEhSNjEzaDJpM0o1cXM0SDlXTTZybFdBODV0M1J5eGgyUUdNTW5qMm1EeDNRVUIyY1d5eWVsdVp0TEhnemNlRXVPNURXSkNPc3RsMW53aXcyMi9PL3krZTVndmFOVEpkbHRHTTVrY1BuOUkwNkNPSjJCb09EWWhUTlpGdnJPUXNsTFk5eWFpZjV4MjRhWGJIeHFXbmVUdnJPWkp3elJ0WFk3V25BVmt4Z0V1SDEvdGpkalZMakE2dERGSk1CYnE5L2gyTWhEcEhTWEVIZWx0bjltTTVSV3g3QXhMN1pHOHU3MnJpaHF6WWN1YkgybDlVZXJ6bnpjelM5REdlbk03YXBXZk53Q2xkVzV6WGY5M1I4WTVGd21kbkdHNk9BbnZzVHo3SGZGK1ROZ2pWTFM1cjhJdU81N3p3OGRDSmo2UlpiWUNWRkVoMDYrUTAzalgzVElYZ3YrWkJkcDlhd3Z4N2VpZzJ3RU1hS0pydzZUMlgwZEZwMyttWHJZVDh1Q01IQ3VaZmxvUjNZeDlJTlpUM3VnTW5UeTAxWVo5Nzk0TW51NVpFWUNJQnpSb1NrRm0rSm9MZkYzR2RtMWhsbzdSQ3d1czhCMzFhN2xQWmRBUy9aN00wS1R0d2Q5em5zT1ZuVHREekJRalY5ekN1YkVuUzRQUGFlYjJlSHdsYjcxN09uRmZlK0w5dWpIVCtGM21WUDMrck9CdkRjUC90WHduTU9WUExRR0E5eHFpYmcyRi9KWnZmSWVnK3R3YXpwZjY1ekxDckk1ZnIvQXBZVHFBOGFKZXJZQUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUNRU1IxL1VNUUFBSUFCSlJFRlVlTnJzWFdkNEZGWGJ2cy9NMW5UU0V3SkpxRUtvU3ErQ1NGRXNLS0orb29DZ2lJclN1d2d2dlNnZFFTa1dSSDFGUklvRkMvS0NnQ0NDUWlDMGtKQzJ1OGx1eXZhZGNyNGZPek5zR29ZU2l1eHpYWE50c2p1N00zUG1uSHVlZWorRVVvcTdWZjc4ODArTUdERUNmLy85TjhMRHc5R3paMC9FeHNiaXE2Kyt3dG16WndFQUd6ZHV4T3paczVHYm00dEhIMzBVTE1zaUpDUUVhOWFzQVFEczNic1hJMGVPeE9uVHA1R1ltSWhHalJyaHQ5OSt3OWl4WTJHejJiQjU4MllVRmhiaTBVY2ZoZHZ0aHNQaHdOR2pSMkV5bVFBQW9hR2hTRTVPaGlpSzRIa2VnaUFvcjRJZ1FCUkYzNytKS0lydzNTaWw4aXVobEVMZUFKQ3lyd0JBS1NYUzVTdXZaZDRqNTg2ZGk0bUlpSWpUYXJVeExNdkdNQXdUeFRCTUJDRWtIRUFOQUNHRWtCQUFnUUFDQU9nQmFLU05CY0JJdnljQ0VBQjRwTTBKd0FIQVRpa3RBVkJDS1MyaWxGb29wV1pCRUFvNGpqTzZYQzVUWGw1ZVh2UG16VTNTNzFDZnJkei9oSkN5bjhudkFRQWxoSlI3OWRrb3d6QWdoSUJobUxJYlpWa1dMTXVDWVJqSWY2dFVLdVZWM3RScU5kUnFOVFFhRFRRYURiUmFMYlJhTGZSNlBmUjZQUUlEQXhFVUZJVGc0R0NFaFlXaFJvMGFpSXlNUkhSME5PTGo0M0g0OEdIVXJYOFAvSEpqaE56TndIWTk0dkY0a0p1YkM0UEJnSUtDQWxnc0ZoUVZGYUdrcEFRMm13MTJ1eDBPaHdNdWx3c3Vsd3R1dHhzZWp3Y2Vqd2NjeDRIak9QQThYMnFUQWN4M0UwV1J5QUJYQnN4S0FabjhmeGtBS3dWWXZ2OXYyN2F0Z1Y2dnI4ZXliRjJHWWVvQVNDS0VKQUpJQktDN1RZYlpCZUFTcFRTVFVwb2hpdUpGanVQU3JWYnJoUUVEQnB5WHdjMEgyQ29EdkhJQVNBaWgwbmhSRUhKNVlBZ3BCWHkrSU9jTGVtWEJ6aGYwZk1GT3A5ZERwOVVpTkRRVU1URXhDc0NGaElRZ0xDd000ZUhoaUl5TVJFWkdCdHEyN3dTMVd1MWZYSDVndTNZWk9YSWtWcTVjZVZ1ZFUzUjB0RmZOcVFETVpLMU1CamI1M3NtYW1pOTQrZjYvYi8vQjZKalkyS1pxdGJvcHd6QXBoSkFVQUkwQWFPL3dXK2dHY0ZvVXhWT0NJSnh5dVp5cDZSZlNVeC9wMjZkQTBoUjlRVTBzQTRDZ2xDci9YMEdqbzRSaHdCQUdERVBBTURLWU1aUmgyQXBCalZXeFVLblVVS3RVVUtuVjBLalZFaGdTcURVYTFFcElRRUJBQUFJREF4RWNISXlRa0JEVXFGRURPVGs1YU5xc0pRUkJRRXhNakIrWi9NQjI4OFJvTkNJM054Y21rd2tGQlFVb0xDeEVjWEV4ckZZcmJEWWJIQTRIbkU2bm9xV1YxZEQrUVVzanN0bFpCdEI4TmJOUzJsaFpVSHU0N3lQczRuZVd0TmJwZEswWWhybVBFSEl2Z0FaMzJXMDZKNHJpbjdrNVdjYzBHdldmWThlTStYUHYzcjJpRDlpSmxRQ2VaTVlTU2dnb1FFQklaU0RIZ0dFWnNBd0RobUZwS1lCVHNWQ3hsN1UybFd5aXF0VVFSUkhCd1VHSWlJaUFYcTlIUUVDQVlwNGFqVWJVYjNBUGFrZ2FYR3hNTENLam92eUx6ZzlzMVNmRnhjWEl5Y21Cd1dCQWZuNStoV2FuMCttRTArbUUyKzFXekU2TzQrRHhlTUR6ZkNsUTgvR2pFVjgvV2dXYUdhbkFYNlpvWm1QSGptVWZlK3p4VHVHUlVlMkRnb0k3RUVMYUF3ankzekhBYnJmQldsS01WdmZkYTZPVUh1SjUvcERWYWozODZxdXZIdnJpaXk5NFFraFpvQk1yTW0zTGFIRzBsRitPVWNBTkxNdUFZYjBncDJKWnNMN2dKZ0Vjd3pCZ2lGY3pMK3QvTTV2TnFGVTdDYUdob1Y0VE5TSUMwZEhSaUl1TFEzQndpUCtHK29IdHhnbkhjY2pLeWlxbHBSVVZGU2xhV2xYOGFHVzFORms3OHcwT3lKcVpiR2I2YUdTK3ZqSkNLV1VzRmt2am9LQ2crMW1XN1FLUXJrZU9IQW1OVDZqdHYxa1ZTRzdPSmJScDNicmNjK3JRNzRmM1JVWEg3aThveU4vZnZtM3JOQW5VS3RMcXhFcEE3cklteHpDVUlUNGFITXVDbGJXNGN0cWJDcUlnSWpJeVFna3c2SFE2NkhRNkZCVVZJUzZ1SmdLREFoRWNISUxRMEZCRmU0dUppVVZ3VUJDeXN6Smh0OXNxdmQ3QXdDQWtKZGRGU0dqb0xSdnprdUppWkZ5OGNNdlBVM1czVFhaS0tRd0dBMHdtRTNoQmdNMXFyWEEvaThVQ2s4bFVTanV6MisyS2R1WUxaUDhBWWhWR05XV0h2MlQvZ1BqNHg4cUNtY1BoNktiUmFIb3dETk1EUUZQZjgzUTZIWDRFcTBTY2pnckhKdFR0Y3ZiVmFyVjlhOVpNd0tYc3ZKTTh6LzlpczlsK2JaclNhRDhoRUh5QmpsSmFUcU9UL0hNQUlaU0lJa1JDd0lnTUJNSlFoaEhBc2d4aEdCWXN6MUtlNWFGU1NSb2NwNElnOExEWnROQm9OSXAyNzNLNVVGSlNBcTFPRDZmTHEvazdITjY1WnJOYVVWSlNnaUpMQVFJREF4RVdGblpGTFRYajRnVTBhM0h2TFJ2emkrbm40WERZLzFHYnJ1N3pWTjF0b0hiczJER0FNQWdNQ2taZ1lCQmlZa3Z2NDNBNGtKT1REYmVIQjhlTDRBUVJna2doVWlpdkZLVDBSbEZtbzZBVUVDbUZLRklpS3BGTDcxYld4S1NVRWlxWm1jUWJybU9jVG1jZmpVYlRoeERTQjBETmE3M21IM2YvZ0kwYjFzTmtNaUkrUGg0ZmIvb001ODZkeGRBaGc1UjlKazJaaG9jZWV2aHV4YjhtS3BXcVNWaFkyQnRaT1hrNWdpRDhZTGZiZjBwcDFPQW55VndWS2dVNVNpa0ZvZDRBS3dVaElrU1JRQkI4QUk1bHdmTXNXQlZQVmJ3S29pakE0WENBNHppbzFXckZYV0czMjZFcExsYUFUblp0T0J4MjJPdzJGSmlNQ0EwTmhjMW1RMlJrSkhRNlhhV2djU3ZsbjBEdFpwM25YUVZzQm9NQklBeWlZK0lxTmwxeWM1R1htd3RUdmdsbXN4bEZoWVdLSDgzaHNNTXBtNTF1Tnp4dU56eWNCNXhIMHRaNEh4OGFMMEFRZU1uY0ZDR0tzc2xKQ2FVaUtBVUJLTGxzY25yLy8rMjNBOTBURTJzL0doOGYzL2Q2d016M2VoYk1uNHVacythZ2RlczJLQ2twQVFEVXExY2ZQLzc4S3dEZ3BhR0RxMjI4TjZ4Zmg4Y2U3NGVJaUloeTU3VnN5VHM0Y2VKdmFEUWE5SGl3RjBhOCtocFlsZ1VBWkdkblk4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEcEdPV2ZQRXlSTXZhclhhRjZkTW5aWXpkTmpMMzludDl1K2FOV20wWHdJNG9ZelpXbGFMazRJUElrU1JnU2dTeWdnQ0JJWUZLekJFWUhtSW9raWRUbWM1WUhNNEhGQ3JOVjVYaGpTLzNHNDNuRTRYSEE0bkNpMEZFdEE1WUxmYkVSRVJnY2pJU0w5YTdnYzJ3R1RLUjJCUWNMbjNiVFlic3JPenZEbHArZm13RkZwUVhDVDcwUzVITzkwdUY5d2VOenh1anhmVU9BNDh4NEZUQUkwSEx3Y0VGRkFUSlRDVEUyaTlJQ2FibWFkT24yMFNFQmpZajJHWXgrMTJXK1A4L0h6RXg4ZmZrT3M5azNZYWtaR1I2Tml4RXdBb0M0RVFBcTFXcS94ZFhmTGh4dlhvM0tWTE9XQ2I4ZlkwTkduU0ZQK1pQUmZGUlVVWU0vcE4xRXlvaVg3OW5vUW9pcGcwWVJ5NmRYOEFzK2JNZzhsb3hMaXhveEFWRlkzK1R3Mm9sdk9zNUpnMW82S2loL1YvYXNDd3JCekQ2YzRkMiszNHoreTUzNzR3OFA5T0FSQWs3VTBneEt1WVg5YmtLS1dVVUVJRVNpa2hvaWhTUWtRSUFrTloxdXVPY0xsY1VLbFVWQTRxcWRWcXVGd3VxTlIyeWFYaDlkTzZQUjdKWEhXaHVLaFEwZVpjTGhjY0RnY2NEZ2Vpb3FLZzErdXY2YnEvMnZJbDNsdTlFai85c2hjQThNckx3MkN4V0VxNVl5Wk5ub0llRC9ZRUFKdytmUXE3ZHU1QTgrWXQ4R0RQWHRXK1hoZk1uNHR2ZCsxVTV1anJJOTlFLzZjR0lEMDlIVXZlWFl5UzRpSUVoNFJpNHFUSnFGWEw2MmMrZU9BM3JGbXordTRDTmw3Z0VSZ1lWRVo3eUVGdVRpNk1SaVBNWm04S2gxZExzMTcycDhuUlRvL2tVL1BJL2pRdnFBazhENTczRFFnSXZta2FwSFJBQU14SEgzK2k2OXlsNjFNc3kvWW5oUFR5ZGFyYVNvcXUrenFQSHorR0dkT25LWnJBNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWdmo3Smt6eW1LcUVSNk81d1lPaEVhalFVS3RXdWpZcVRQUzBrNVgyN3lvd2pFYkVVSWF4Y2JHVHJpVW5iZmI2WFJzbnpIOXJSMmZmYmJaQ1lDWE5EY1o3QlNRazMxeGhGQlE2alZUS2FYVTdYYUQ1M2tpQlJVb3ovTnd1OTFnV1JWNE5RK092K3l6NWFSZ2xMV2tSQWxNZVR5ZVVnQVhHUmxab2ZZbWlpSVloaW4zTndEazVlWGgyMTA3UysyLzV2MTF5dDl1bHd0REJyK0FqcDA2QXdCV3IxcUo5UFFMY05qdHFGZXYvdFhaK2syYUtJbnNWenJIc3Y5YnpHYTh0K1lETkU1SktmV2RXZjk1RzZOR2pVSHpGaTJ4YStjT0xGKzJGSXNXdnd1WHk0bUZDK1poNWVxMVlPNG1ZUE1ORkRpZFRwdzVjd1puejU3RnhZdnB5TTdPUWw1ZUh2THpUUXJBRlJjWHd5cVpvamE3SFE2N0EwNkgweWRYelEyMzIwM2NiZy94QmhFODRIbU9TRGxwUkJSRlJoUkZobExLVWtyWjFOTm5tMmRjeXA3ZHJmc0RKMVFxMVFlK29PYXJQVjZ2dEdqUkV0dTI3OEtibzhhZ1pzMEViTnUrQzl1Mjc2b3lxRjA0Zng1dlRadUNFYSs5amwzZjdjWlRBNTdHbU5GdndHUTBBZ0F5TXpNd2U5Wk1USnc0QlR1Ly9RR1BQUElZcGs2ZERJZmtyRit4Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXU5SldnTXcrQzVnYzhqTEt5RzE5bDhNUjBIZnZzTmJkdTJVN1RLRlN0WFE2ZlRLeFA5K0xGamFOYXNlYlhOaTZzNUppR2taMEJBNE1vRmk5N1pYNzlCZ3lscjMxL1hqRktxaFRmaFdRTkFEVkFWcFZRbDMzZDVIa2h6Z25BY1J6eVNOdVp5dVlqTDVTSXlXRG1kVGpnZFRqanNEdGpzZHRoc05saWx3SlhOWmtOeGNURUtDd3RoTnB0aE1wbVFsNWVIckt3c1hMcDBDVzYzV3puUEkwY09ZK3JraWVBNERoYUxCUzhOSFZKS0cxdTBjRDVHdnZGbXBXUHkzWGZmb2xQbkxvbzJPT3lsbDdING5TV29VN2Z1Vlk5dlNFZ0lOQnBOaFordFgvYytObis2Q1FCdzRzVGZlUE9OMThzOWNNcjZ5Ujk5N0hFMGI5RVNBSERQUFkxZ2xnQXpMeThQWVdFMVVMTm16YnN2S3VvMVNZM0l6c3FXbmlMNUtDeTA0TUtGQzlqOXcvZm8xdTBCdUZ4T09GMnV5NmFucEtWbFptWWdyRVlORUVJZzhEemhlYStHNXZHNElRZ0NZVlVxOEJ4SFpKSE56ZDY5Ky9SWis4SDZaL2Y5Yis5VEgyN2NBSTdqVUxkZVBVeWFQRVZaVExlVDdOeTVIVjN2NzZhWXNMMzdQSVR2dnR1RjNidC93TURuWDBCRVJDUTJiUHdZdFdwNzFmOUhIbjBNUzVlOGc2eXNTMmpZc0dyMWpxa25UMkwwcUpGd3VWeTR2MXQzZE9sNmY0WDdyWGx2RmZRQkFYam80YjQzN2ZxcmNreENTSzJJOEloUlFjSEJvekt6Y3JlV2xCUi8xVFNsMFM4QTRhWElxaUJwYllLdkJnZUE4anhQR1lhUjh4ZXBsTmRJR0lZQkw2Z29ML2dtY1h2OXQwNkhvMVErcEt6UmVSUnoxV3VtUmtsSnZhMWF0Y2F2ZTM3QnpCblRrWk9UalNlZmZBcmhFa2hzLzJZYjZ0YXRoMGFOVXlvMXpiZCs5U1VXTG41WGVhOHlZTHBlZWZiL0JtTDBxRGRnTmhkZzMvLytoMWx6NWlxZm1TMW1USjgyQldhTEdXM2F0TVhvTWVPZzFXclJyOStUeWo1ZmZQNFpldmJ1RFFDSWpZMkR4V0pHZW5yNjNhV3hpYUtJOVBRTE9IUG1qS1NsWFVKZVhoNU1KaFBPcEtXQjUzbGN5cnFrVkJMSWVXcE9oeE5PbHhPVVVuamNIdUp4dTB0cGFGTGFCcUdpeUJCQ0dFb3AwKytKSjFVWExsNGFQRzc4aEIrN2RMMS9xOWxzZm1yRjhtVjRkK2t5ZlBMcFoxQ3IxTmo2MVZlM2JaQWxMcTYwbjY5MjdTUVlESGtBZ0tDZ0lCdzkrZ2VHdnp3VXp6MzdOQWEvTUZBWjM2cEtTcE1tMlAzVEhueng1VmJrNWVWaHcvcDE1ZmI1K0tNUDhmdnZoekIzN255b1ZEZm5HVnpWWTFKS1lTbTBJQ2d3Q0F6RFBCRVdWdVBUUzlsNVc5TE9ubisyZWZNV2VrcXBEcGVKQVh3MU9JWlN5Z2lDd1BBOFQzaWVKeHpIRVo3bjVjQUJjYnZjeE9WeWVWTS9IRTRsVjFJT0h2QThyMVFzaElhR1FxL1h3MlF5SVRjM0YxbFpXVWhQdndCS0tZWVBINEUvai80QnJVYXJnTFRSYU1DTzdkOWcyTENYS3IyMjMvYnZRMUp5SGNUR3hsM1hXUGJ1M1J2OSsvZEhmSHc4T25Ub2dQNzkrNk54NDhhbDlna0tDc0lycjd5S0wvLzdCYnAxNzE3cXdUaCsvRVM4OCs1U2JQcjBjNWpOWm55OWRVdXA3Mjc1OHI4b01CZmdxYWVlQmdEbzlYcE1uaklOOCtmTnZuczB0cUtpSXB3L2Z4NnNTZ3RUdmhFV3N6Yy96V3IxbXBwWldaY1FHeGVIM053Y3hNVEVLRTlDUTE0ZU9JNERJUVNVVXNKeEhnQUVITWNSUWVDQjBqV2FaUE5uWHdRdldqaC84SktseXdjUlFwb2VQSGdBOCtZdkJCVkZ2REZxdEdLQ05iem5IdVRsNWQ2V1l4VVRFd05EWGw2cDkzSnlzdEd5cFRmdmFOLy85dUxUVFo5Z3lkTGxTS2hWQ3dEUXBWUDdpclNhY21EbmRybnczWGZmb2srZmg2RFY2UkFYRjRjZVBSN0UvdjM3eWszYUgzZi9nR1VyVnQyMGhOT3JPZWFSSTRlaFVhdlJvR0ZEMyt2dEdCZ1kySEg3em05ZmRydmRuMzM5OVZmL25UQnViQWtoUkpCOGNiSVdwL2ppQkVHZ2xGSXFpaUk0am9NZ2lKUmxSUWlpUUFSQm9JSktnQ0I0UWM4M0o5SnV0ME9qMFVDbjB5bmxXYkwvN2Z5NTh5aklMOENhTmFzdzhQbEJPSHNtRFF2bXo4V2t5Vk94YzhjT1dHMVd2REw4SllCNHlSeUdESG9lYTlaK0FLMlVRdkxGNTUvaDVWZEdYUGQ0ZnYvOTl3Q0FEaDA2SUNNakE3bTU1ZWY3aFFzWE1IL2VIUHhuMWh4czNMQU90Uk9UOFBERGZTRUlBbHEwdkZjeGhYdjI3SVhEdi8rdWZPL1hQYi9neHg5L3dMdExscGVLbHJkcjN3SHQybmU0T3pTMjdPeHNuRHg1RWxsWldjakt1b1M4M0R5WVRKZURCVWFEQVlJZ0lpZ3dDRVdGaFlvZnJTQS9INElnSUNRa2xHaTFPa0lwaFNBSWhCZDRJZ2c4WVNRQndEejVaUC93aTVuWll6dDE3bklvSmpaMmNkcnBVMDJ6c2k0QkFKS1NraEVWSFkzT25ic29pM3ZIam0vUW84ZUR0eTZRSXBrNkFFQWx5aVFaaEI3dSt3ajI3dDJEdzRkL0I4L3orT1dYbjVGNjhnUjY5dks2Qk0xbU13Z0JHSlpGY1hHUjRpT2hZdWtxbHJqNGVCdzZlQkFjeHlGZm9tblNhTFg0NU9PUDhQbm5tOEZ4SElxS0NyRnYzLy9RckZtenk2YndqdTNZOXZWV0xGMitVakdmcXQzOHJ1SXgzVzQzZmo5MEVQUG56Y0h3VjE1RllHQmdSWURlUktmVHpYbjIyZWUrUDM4aFk4VHE5OVpHU1JxY2xsS3FvWlNxZlRVNHlRL0xlTWtQZU1MeEhQRUdEZHpFN1hZVGw4c05INTljS2UzTmJyZkRLaVh4eXI2M3JLeExPSFRvQU9yVXFZdHUzUi9BdE9rem9ORm9ZYkZZTUhUWVMvajhpeTNZK05FbldMTjJIVFFhRFRaKzlJa0NhcWRQbllMYjQ2bFduNmF2SFAzakNDWk5ub3I3dTNYSHUwdFg0RlRxU1ZCS1VWeGNqQmNHL3ArU29uVDgrREVrSlNjcmYzLzA0VWJNWDdDb3d2RUgvdVhwSHBSU25EMTdGcG1abVFyRkVLdFNvNlM0QkZhYkZRNjdIUTZuRTlrNTJRZ0kwRXZPVjRMaTRtSVFoc0RsY2hPMVdnVVA1NEVvQ2dCQWZPaUJHQURraHg5L0NibDBLWFBZZ2YzN2hqRU1VeGNBT25ic2pJTUhEeUl3TUJDZE8zY3RadzdQbVRNTER6elFvMUlmUjNWTDJRVGRCZlBuWXNIOHVYaXdaeSs4TlgwRzZ0ZHZnTGRuenNKN3ExZkNrSmVIMm9tSldMajRYY1JJMmN4OUhub1lKMCtld05BaEw0QmxWWGpzOFg2b1g3OEJMSVdXVXNjWk0yWWNGaTlhNkgwUzE2Nk5kUnMrZ2thandZS0ZpN0Z5eFRKODhmbG5VS3ZWNkhwL053d2EvQ0lBUUJBRUxGcm9OUU9mZmJwL2FUTngwK2JyTm84cWtxb2VjK1JycjRJUUlERXhDV1BIVFZCOGtGZVF1bHFkYmtiZlJ4NTlvY2VEUFQvK1p0dlhuNDBiTzdwWTF0NGsvNXVpeFhsVFE0aElLQVgxVnFoUVFSUWhpZ0xoZVI0c3kxSzVjcVVpaWl2NVlXVXc1S0ZHalhBMGFOQVFaOCtlZ2NQaHdKaXg0NnFVMnZQNVo1L2lxUnVjVm5QZ3dJRktQeHZ3OURQSzN4RVJFUmcvWVJJQUlEdzhIQzhPRzRiWFh4ME9Tb0hrT25YUTd3bXZiMjMrdkRsd3U5MFk1Uk5vbVByVzIyalFvQ0VLQ3kxNGVkalFmMit0cU5WcXhmbno1M0hwMG1VLzJsOS8vUVdHVmNGdXM4SHVrNXVXbG5iNnN2WkNLZFJxTmRIcGRMQmFyVEx2RnBHSUlBbkRNSVJTeWlRbEpiRjc5dTUvbVdYWmwzLzY2Y2ZHKy8rM0Z6UCtNeHNBa0o2ZWpubHpaeU1vTUJDRFh4eUs1czFiS09lMWJPbTc0RGdPNDhaUHJEZ2llUzROWGJ0MnJmSjE3dDI3MTA5UVdJbFVOcGEzY014T3A1NDQvdEh5NWNzM2YvZmRkeDRKNEJRVEZkN2FWUG1WeXNYMkRNTlFRUkFVL2plVlNrVlpsb1ZhcllaS3BWTElMV1hUTkNtNWpzVDNKcEZaeHNTZ1pzMEVKQ2NubFV0M3V0Rnk4TGYvVlhuZjloMjdWTnQ1L0NzMU5xUFJpQXNYTGlBcnk1dkM0VXNFeWJBcXJ6UFc2WVRMN1lMZGJnZlA4NGlPaVFIUGNYQzZYTVJodDROaFdSQkNpQ0FJY2k2YUV1VThmZWI4TXk4TS9MOFJScU94Ylh4OFBQTEsrQTdxMUtrRHU4Mkdnb0o4TkcxNjJjVGEvT2ttbU0xbXpKZzU2NFpkcTE0ZjRFZXdxeHliV3pobWpXclVDSisvYytmT0owcEtTajRNQ3d2YlFRamhmQUZPMHVLSVY0c0RwVlNnb2xTckovbmpJSW9pVWFsVTFKY1ZSdGJhQUlLaW9pTHdISzhrKzdyZGJyaGRMcmhjVGlRbEpsVXJIVkpBUUdDVnlxb0NBZ0tyZGFEL2RjQ1drWkdCOVBSMFpHZG5LMG1CY3RLdDFXb0Z3N0JLS29mSDQ0SEZiSUZLcFlMYjVTWTh6NE5LQmVyZXRBMkdpQ0pQQkVFZ0FKZzJiZHAyZjJmSjBsY0RBd1A3VHBveUZWTW5UMFNOOEhDb1ZDd0N5aXlXanAwNm82UzRTRWsyTkJvTldQUGVLaVFrMU1LUVFkNG9Jc093MlBqUko5ZDF2U3pMd202M1ZmdVQrRTRUdTgxYWFRa1djNHZHekc2emdsV3BRQWhwRXhvYTJrWVFoTDRtaytuRHVMaTRBNFFRamxMS0UwSmtnQk5CSUlKQ2hDZ3FCSm1pNk0wYWthbXRSRkZVekZNQTBPbjBzSmFVZUZOQ2VEa2xoTHRjeWVCeXcrbHlvWllVOUxuUmtseW4zajhXd2djRUJDSzVUcjFxSGV0L2pTbEtLY1daTTJlUW5wNk9uSndjR0kxR2hXWklydmZNeWNrQllSZ3ZLMGVwc2lpZWVOazRlRi82SUZsTFkwNmtwalVJRGc1K2pSRHl5cTB5bnlvSDhreVlMUmJFeE1iNzBjeFhhemZrSWpJeUFvbTF5MU02WldSbXdteSsrV05tTk9RaUlpSUNTWW1sejRuanVIV3BxYWtmdDJ6WjhnSUFEZ0F2UlZJVkg1ek1IK2ZMQ2VkRGNFbkxtcVV5SlpJY01aVlRROExEd3hFVkZZVzR1RGpVcmwyN1drdnFicVg4S3pRMnVZb2dJeU5EQVRXejJZemk0bUtmSW5ZSDNHNDNSRXA5eTZJSXovUGdCUjZpUWl0RUNRVWxvSlQwZjJvQXUzRFJPeU5abG4wRFFNTE51SmFnNE9DcjJqOHhzVGJ5ODAwd0duSVJGQnh5MTJ0dWRwc1ZOcHNWQXM5WENHb0FrSlNZQ0pQcDVvMlpmRTZpSUpRRE5RQlFxOVhEV3JSbzBjZHV0Ni90M0xueng4ZU9IZlBJQUFkdmtNcTNBRi9oaHBOQmptRVlJdm5mcUV4Ujd0dGNSZ1k0WDlaZXVlZEN3NFlOcjduVzlIYVdPMTVqS3l3c3hObXpaNVU4R1Y4T3RiSmtrSVdGaGZCV0MvRGdLdGZTR0FEazNJV01uaHFOWmhTQUIyN21vblM3bldqV3RPbFZhNnNYTXpKaHNaZ2g4Q0pjcnJ1VG8wMnZEd0REc29pTWlFUmlZcTEvMUVZeU15OGh2NkFBQWk5VTI1anA5UUZnVmFvS05iV0tSQlRGUFNhVGFWMWNYTncrUW9odmdJR1hORGRCQWpSUkRpNndMRXQ5d0l5cTFlcFNKSmErUFJia0JqSnlkNnlrcENRMGFOQUFOV3JVOEFQYmJXTnVHSTJsMGpsazJ1NktHRzdkYmpmc2RqdGNMaGNSS1lVZ0VVRXFXaHFsQktETWthUEhZcU9pb2tjUlFrYmY3T3N4R2ZNUUZ4dUR1TGc0K09YdUZvL0hzK3FYWDM3WjJLZFBINE1VWUpBMU9NRW5jaXFERzVXMU5WbFRVNnZWVkc0QldCYmNmRTNTK1BoNEpDWW1va0dEQnYrcUpqSjNyQ21hbFpXRmMrZk9JVE16VTBubjhHMnVJdE82K0RMZENvSkFQQjZ1SXZZTkJnQno0ZUtsL2lxVmFqU0ErMjdtdFRqc050aXNKUUNvSDlUOEFnRFFhRFN2OWVyVnE0UFpiRjRiRVJIeEhTR0VsY0NOODhsL0kxNGxUeFI5R3Y1UUg2cDVXbG11VzJWMXA5VVZWUEFEV3hYa3dvVUxPSC8rdkFKcWNqcEgyZVlxWmVpN0NjZHhBS2g4MCtVdVQ4eTJiZHRxaFlTRWpNbThlUDdWbTMwdHdjSEJVS2xVaUkrUFEyeHNySDlGKytXeU9VVkl5L0R3OERVZWorZUQzMzc3YlVPM2J0MnlDU0dNYkpwU1NubGNabDRXdlY0SjZoc3BKYjVSMDdMcElUSjl2UysxdmNmalFkMXJZUER3QTl0MVNscGFtcEo0SzNlTktpekZkT3NvQzJyRXB4ZUI0a3VEVkRuZ2RydWZVS3ZWWXdHMDhpOGx2OXlPb2xhclgrcmF0ZXQ5K2ZuNWE2S2lvblpMdmpkR0FqVlplNU5UUWNwcWIrWFNRc3BXTHZoMlRwTUI3cDU3N3V5a2I1S1JrWEZIbktoY0hpVUhDWHo5YVdXMU5KOU9VY1JiV096dERDV25jRkJLeWM4Ly94eVdtSmc0am1HWUNmNmw0NWM3eVBlMmJPdldyZXNuVFpwVUNNRGprK0FyeVA0M3VXcEJTZ254OWIxUjN3b0Z1ZlZmVUZCUU9iK2JIRlM0VTlOQlZJbUppYmY5U1hJY2g5VFVWTVYzVmxHSHFBcTZRdmwyVS9jRk5jWnV0M2ZSYXJYakNTRTkvVXZGTDNlWXZEbCsvUGlVWjU1NVptMVNVdElSQUN3QU9YcEtVSnJKRjZJb2doQWlsMlFSbWYrdHJJYm1XMlR2Y0RoZ3RWcFJWRlNFbEpRVXFOVnF2eWw2bzhYbGNpRTFOVlVwa1pLckNYeGI0aWs5Q1NUQ1BWbFRrMDFQQ2RnWVNpbmo4WGlHc3l3N0VZQS9vOVV2ZDZRd0ROTWpNVEd4Y1VsSnljcVFrSkF2QURDU2VTb25sWmNLTE1nV0QvVUtrYXNYZlByWTRrckY5U2twS1pWMnhicHRUZEhiT2QzRGJyZVhBcld5MVFSbEd4YkwvalRKL0pUclBCbFJGRWx1Ym01OGRIVDBCRUxJcS82bDRaZmIxZDFpTUJoZ05Kb2dDQUpzTnVzL2ZvZm4rWFZIamh4Wk4zbnk1RnhKYzVNckY1VGllcCs4TjBpcElYSVNyNUx6Sm5lbUwxdWxFQjBkalpvMWF5STVPZm0yQUxmZzRCQ3dMSVBvNk9nclpoRGN0aHFiMVdxdEZOUmtobHU1OTZKdmtFQUdOWi9JSjJPMzJ6dHJ0ZHFKaEpBSC9jdkhMN2NycUIwN2Rnd1VSS21HcUdKVzJiRDZEUnZYNmRydGdmYzZ0R3Z6QndBRzNzaXBUSURxcFVYeS9rT2x2cmRlalkxU0wwT1MxQWRYM3VRZXVvSkl3UXNVSEMvQzdSR1FtSnlBb0tCYlg5bGl0OXVRbTJkQWJsNGU3cnYzM2pzSDJJcUxpeFZRazR2WnpXWnpoWnBhSlpGUHhaL21kcnNIcWxTcXlRRHErWmVQWDI1WE1SZ01vQ0RYVkwvS01FejNXclZxSjU1TVRWdlJKT1dlSGFDVW9ZQnYzdzFCb2dzUnZiRUFDc2tDQmJ6cmhDb21xUnhSbGN4VVVhUVFxUlJOcFNJYU5taUk0SkNRV3pwV2dZRkJDQXdNZ3NtWUI0UEJVR0dhMUczRm9QdkREeitnZmZ2MmlJbUpRZGV1WFRGaHdnVHMyYk5IWWVpb0tBTHFWdm9QZUgxcTBzYUlvcWlhUDMvK2xQVDA5TFhmZi8vOWJRTnFQTTlqMUtoUmlJNk9SbWhvS0lZUEg2NTBkL0xMM1NzbVV6NkNncThMTU9xR2hvVXRQbmYrNHZDRzl6UUtBS0NUdW1mSlBSZFlTc0ZTS25mTEVnalBjL0J3bkplcDErV1dlaXg0dTJOWnJWWVVGeFhCWWpIRFpEUWhKeWNIR1Jjdkl1MU1Ha3FLaTIrTE1Rc01Db1pSNnB4V1Z0Z1pNMmJjRmllNWQrOWU5T3paRXlrcEtYamdnUWVRbEpTRW9xSWlIRDU4V0k3c0tJQlcxdnlVdFRRdnRiTEFwS1NrMVByODg4L25kdTNhZGN5QUFRT1lrSkFRZE9uUzViYTR6b2tUSjJMYnRtMzQ5Tk5QOGV5enoyTHAwcVU0ZGVvVUhudnNNZi9xdm9zbE56Y1hOY0lqcnZwN3AwK2xZdDVVN01lSEFBQWdBRWxFUVZTYzJlalZ1dzhBTUNxMXV1T3ovL2RjU0t2V2JTNTh2ZlVyQitCVjNTb3pmeWxBY0xtUnQyU08wc3VicEtrVkZPVGowTUdES0N3c1JFUkVCSUtDZ3FIVDZmRDExMTloL3R6WjJMWnRLd290aFdncG1ZYjUrZmw0YTlvVWJONjhDVC8vOUJPYU5HMkswTkF3QU1CZmZ4M0h0Q21Uc0hYckZody85aWRhdDJsN1RWMndOQm9Ock5aaXhGZmdhN3R0VE5HMWE5ZWlhZE9tZU9hWlo1Q1ZsUVZDQ0ZxMmJJbUNnZ0tjT1hNR0tTa3BsU1hlbGdvU1BQamdnNjBhTldvMHBWdTNibjNsbTNlN2lOMXV4NnBWcTdCcDB5YUZtdWo5OTk5SHo1NDlzV0RCZ2dxYjN2cmw3aENydFFUUjEyQ0dOcnluRWQ2ZStaOVM3Nm5WNmtGZHVuU0ovdVhYLzYzcGZuK1hFNVJTUmtJM3hUU1ZzVTBVQkpHWGZHMkE5OVVMZUJLd2dlSkMrZ1Z3SEFlV1lSRVJFWUdNakF4UUFJR0JnZGk2WlF2V2ZyQWVHbzBHWThlOGlTTkhEcU4xNnpaWXZXb0Z1bmQvQUgwZmVSUi8vSEVFQytiTnhhcjMxb0xuZWN5Yk13dnpGeTVHVWxJeTFuM2c3U3Y2MHN2RHIybmNmSHNGMzNhbWFGRlJFZXgyTzNKeWNuRGh3b1ZTUHJYRXhFUWtKaVlxS1IxMnV4MzUrZm1rc0xBUU5wdU51Rnd1SWdnQ0k0b2lrNVNVMVB2SEgzOWNzbno1OHI2RUVIVHAwZ1ZIang3RlcyKzloWGJ0dkExNTI3VnJoOW16WjZONzkrNElDQWhBdlhyMThQMzMzMlBac21WSVNFaEFhR2dvaGcwYnBoRDNVVW94Yjk0ODFLOWZIeHFOQmhFUkVSZzBhQkRzZGpzOEhnK2FObTJLQngrOEhKUFl0R2tUdEZvdGpoOC9EZ0RvMzc4L1dyWHlGalVjTzNZTVRxZXpGTjlhNTg3ZVR0c0hEeDcwcjI2L2xCT3oyWXl4WTBaaDBQUC9oOEdEQnVMM1E5NTVrcDJkalFIOW44Q1QvUjdGcURkR2x2ck81SW5qTVdUUTgzMW0vMmZHMUpTVWxDNEFkS0RVdDVFTUs0b2lLNjhicFlrTXg2R2twSmdZREhsZVFrcW50M0Z6WkdRa0dqWm9DSTFXZzVLU0V1VG01aUF6SXdPN2YvZ0JLVTJhSUNEQVM3SmFJNndHL3BMbS9WOS9IVWVYTHQ1NUhob2FpclMwMC9CNFBERGs1VUduMXlNcHlkdVlKVHc4SEg4ZFAzYkR4KzJXYTJ4eW9LQmR1M2I0OXR0dk1YZnVYTVRGeFNFa0pBUjZ2UjR5MTd1YzBtRTJtd2tBcUZRcVFpbVZ1NjR6VnF2MVdZMUdNN1Z2Mzc3MUd6WnNpRVdMRm9GaEdMUnYzeDZQUFBJSXBreVpvaHh6L3Z6NTJMRmpCenAxNm9SWFhua0YvZnIxdytPUFA0N1RwMC9qMUtsVDZOYXRHeDU2NkNFODhjUVRXTFZxRlJZdVhJak5temVqY2VQR09INzhPQVlPSElqbXpadGp6Smd4K1BEREQ5R3VYVHQ4OHNrbjZONjlPMGFPSEltWk0yZWlSWXNXQ3JBVkZoWUNBSEp5Y2hSdzlIbTZJaUlpQXRuWjJmNVY3SmR5OHNYbm05R3NXVE1NR3Z3aTB0UFRzWHJWQ3JSdDF4NEpDUW40NzVhdE9IZnVMT2JPTGswMVAyL0JJbWx0RmJVWi90TFE4QTgvK21URjRFSFBmeXNwTWtTeVRqa0tDTjRIT0JHbGZGNFFRcWhLcFNKdXQ5dXJ4QUdnb0NDRWdkdmxnczFtUTc0cEh3QkJabVlHQWdJQ2NQRmlPbFlzV3dwQkZCQXMrUW1MaTR1aDFlbXdZL3MzK09tbjNkQm9OTERaYkNncEtZRldxNFhINDhIS0ZjdVFtNXVMb3FLaUd6NXV0MVJqODAzcEVFVVJBd2NPUk4yNmRXRXltWERxMUNrY1BYb1VxYW1wS0NrcGdkdnRSa2xKQ1pIQVFJbjRNQXpEQkFjSHYvTGxsMTh1MG1nMDllV0dGenFkRGhxTkJvUVFoVmxVbG43OStxRmJ0MjVRcTlWNDRva240SEs1TUhmdVhBUUhCNk50MjdabzBxUUpVbE5UQVFCSlNVbFl2MzQ5K3ZUcGc4VEVSRHoyMkdQbzJyV3I4dmw5OTkySFNaTW1ZZno0OFJneVpBaWFOR21DQ1JNdVYyazk4OHd6R0RIQzI2UFI0WEJVbUF1azFXcWxEbGwrOFV0cGFkMm1MWDcrNlVkODlPRkd1RjB1TEg1blNaVytKNG9pWnM1NEd3LzNmYlRlQXowZW5IWXE3ZHdBQURwcDAxQksxYUJVQllBRktLT2tSd0dFWlZYZ09BL3h1RDArcmY3c2NIczhjRGdjc0JSYWtKOXZRbEZSRVU3OC9SZkdqeHVENTU1L0FkMjZsYVl1bkRkbkZqSXlMbUx4TzB1aDFXcExLVE5qUnIrSnhvMVRNUEtOTjZ0bDNHNFpzUGttMzhvcEhTNlhDM1hxMUVHclZxM1F1SEZqUkVSRVFCQUVHSTFHNG5hN0pYWU83eE5IemxIak9HNThTa3JLZ3RUVTFDcDNxUEF0STVNSFBDRWhvWlJUVWdhYXZuMzdvbmJ0MnBnNWN5YWVlKzQ1dEdqUkF0OTk5NTNVT01NcjA2ZFBSMFJFQlBiczJZT1BQLzVZNlhOUVZ2UjZQVHdlVDduMzNXNTNwZjBSL1hLWEExdnJObGk1YWcxcUppVGc0NDgyNHUyM3BsYnBlK3ZYdlErZFRvZUJ6NzhBQUZIQndjRnZmZjNOOXNFQTlCSzRhUWtoYWtLSWlsTEtBbUI4QW5DRTQzaDRPQTlSSXFaT0p6aVBGK2hLaW90aHNWamdjYnRSWEZLQ3h4OS9BZ1FFSmRZU2hJYUZLZVpuaDQ2ZE1QS05VVkNyMWZCNFBBcHpiMGx4TVVhUEdZZmVmUjZDeStWQ21QU2RPeDdZZk11a3NyT3prWk9UZ3kxYnR1RGl4WXRLbmhySGNkRHI5UWdKQ1NHQWwvN2JGOVJXcjE2dDVqaHVPc013czBWUjFKWHRPSDVGKzF0VjNnS3ZyTmgzeVpJbDZOQ2hBekl6TTlHaFF3ZXNYYnNXdlh2M0xyV1AwV2hFVGs0T0tLWDQ5ZGRmS3oxdVFrSUNYQzVYS2RXYjR6aVl6V2JVckZuVHY0cjlVazdteloyTncwY09vMGVQQnpGNXlqUWNPblFRL3pUWDkrL2ZoNzIvL29vcFU5L3luZGU2SmsyYVRybjMzbnVITjJ2V1BCQlNPZ2lsVkEwcEhRUUFTMFdSOER4SEJJRW5QRmM2SFlUbmViamRic1drVkdzMGNEZ2NLQ2pJeDhXTDZkajl3L2RvMUxneEFLQkZpNWJLZWY1NTlDaVNrcEtoMFdnUUd4ZUgwTEF3YUNVTGF2KytmV2plb3NXZDcyT1RDOXA5YXorTGlvcVFuNThQaDhPQjVPUmszK1JiSW1zNGN2czdBR1RuenAxQlBYdjJuTW93ekxpaW9pS2NPblVLUTRjT3JmQjQxOHRPc0dUSkVreWVQQmt6Wjg1VTNzdkl5Q2dWd1h6cHBaZlFva1VMOU92WEQ2TkhqMGJQbmowckJLcVdMVnRDcjlkajM3NTllT1NSUjZSSnVCOE13eWpCRGIvNHhWY0dEbndCaXhjdndPZWJQNFVvaWhnemRqd1loa0YyZGpiR2pIb0RIT2RCY1hFeEJ2Ui9BdmZlZHg4bVRaNktsY3VYd3VWeTRiVVJMeXUvczNMMVdnUUhCMlBCb25kR3Y3Tm9vYWFnSUg5ZGJtNnUvSVNWbzZXOHROWUViMk1zd2V0aWsvYmhlWUY2T0s4NUNnSUVCd1VqTGk0ZW4yN3lkcEsvOTk3N0VCd2NESjduOGVwckl6Ri8zaHg4K2Q4dm9OZnJNWEh5RkVXcG1ETDFMY3lhTlFPY2gwT3RXclV3WWRLVU94dllLS1hseXFUazZHZHljakxPbnorUDFOUlVCQVFFUUJBRXVOM2Vwd1FoUkNiVEl5a3BLVFZtejU0OU5TSWk0azIxV28wcFU2WWdKQ1FFQXdaVTNMMDZLQ2dJQnc4ZXhLRkRoNjRKUE1MRHczSGd3QUhrNXVaQ0VBUXNYTGdRcDA2ZFFsT3BMOEg2OWV1eFo4OGUvUDMzMzZoWHJ4NDJiZHFFbDE1NkNkOSsreTBBNFBQUFAwZGhZU0ZHakJpQndNQkFEQjA2RksrLy9qcUNnNE9oMFdnd2ZQaHdEQmt5Qk9IaDRmNVY3SmR5VXF0MmJTeGJ2cXBDN2YrL1c3WlcrSjNQLy90VnBiOTN6ejJOOE1INmphKzUzVzdWNWs4M3JadisxbFN6dExaOGxBRUdsSXFDS0RLbHdDMG9LQWdhclVhMm5rQkFVQ01zREVsSlNZaUlpRUJNVEN3eU16TEFzaXdhTjA2cDFCL1l0R2t6ckgxL2ZiV08yMDAxUmE5VTBCNFVGSVRZMkZpSW9paWJvMFFHTlpabENhV1VYTGh3SWVMNzc3OS9LeTR1N3MwSEhuZ0FYYnAwZ1ZhcnhmNzkreXUxMDE5NzdUVWNPSEFBZ3djUHZxWnozckJoQTBwS1NsQzNibDIwYTljT05wc05reVpOd3A5Ly9vbXNyQ3lNR1RNR1U2ZE9SWU1HRGNBd0RENzQ0QVA4K09PUDJMQmhBd0JneTVZdFdMLys4azFjdkhneEhucm9JVHorK09QbzI3Y3Y3ci8vZml4YnRzeS9ndjF5VTBXcjFRNS9idURBbCtjdFdCUUZRQ3RWS2FpOXlvNVNwVUJFMFp0NTRHM0E3QTBvdU4zZUtnV0h3K0UxU3lXZm04bGtRbTV1TGpJeU1uRDJ6SmxiZW4wM2pkMGpMUzBOYVdscFNvczh1WnVVWENibHkzeGJKdm1XVUVySm1UTm5hdFNwVStjdFFzaEkvN1FzTGFJb0lpUHpFaXdXQ3dSQmdNdDVkNVpvNmZSNnNDeUw4Qm9SU0VxcVhXa1FSN1lldkdObUJzOVgzNWpwOUhxb1ZDcEVoRWNnS2FseTdzTzllL2VpYnYyYnoxcnJjYnMvMkxUcGsvZmZuajdOQXNCRkNIRkRhUnhEQkVJZ0VNSW9EV1BVYWhYVUdnM1ZhcVMrcFFFQkNBb01STERVemk4aUloS3hzYkdvWGJzMjZ0YXJqM3IxcXJlYXNiSSt2RGZGRkpWN0ZKVGxVNU03U1IwL2Z0eTNRb0Q0MnYzU0ZsU3ZYcjJwQVA3Vm9HWXdHSzY2VTVEYjdjRmZmLzBGVnFWQ2NFaW92NitvM1liQ29rSVVITTFIaStZdG9OR29Ld1MxUC80NENvWmxFUlJjL1dObXQ5dGd0bGlRWDVDUDFxMnV6RUNmYy9QekdWL3ExcTI3ZUhISWkycy8zTGhCV1lkZTA5UmJZZ1dJZ2loU1VHOHhQQlVFa1FpOFFKVnU4ejRrbFU2SEEzYTdEVlpyQ1lvS2kyQXVLQ2lWY1hBanBlWVZmcmZhZ1Mwcks2dFVqNEt5M2RrZERnZHExNjZ0YUdvZWo2ZFU3ZWZxMWF2Vnc0WU5tOG93ekp2d1N6bkpNK1NCVmFuOG5lQWxrWmtmaklaYzVPYmxJcWtDaHVpTEdabGdXUGFtalpudk9XVm1Ya0xpRmZxTDFreEl1QlhETm56cXRPbDhSa2JHMmwvMy9GS1poaXRjQmp1UlVpb1NTc3YzVWVBbFpsNlBoNFBMNDgyQkk0UWcvaVpIL2FzVjJJeEdvOUlpcjJ6amxRbzZTWkdLdU5Ra1VCdm5YN0lWaTduQWpLQ1FVUDlBbEpHZzRCQVVGSmdyQkRhTHhZTGdXekJtUWNFaEtEQVhYQkhZYnBrWnI5Tzk5djRINnowTjZpV3ZsN1ZhT2FCQXZkRUZLcGJLTXlFVUlBUWdjbGQ2RUVMQWVNa3N3VEFzV0phRmlsVkI1VFZmRVJVVmRlY0RtOXloWFc2Umw1K2ZYeW1kZDFtZm1tL3lMY013VS8zTHRESS9FU0FJd2wxdmZsYW1KUlVYV1NyODdGYU5XV0JnRUlvTExkZjAzWkxpWW1SY3ZBQzczWGJGMzA5S3JvdVEwR3NEYmIxZVB6cnQ3QVhYUFEzcWJwTHdUSmxxUG1NblhtN2Z4MUdPOHhBSitFQVlBc0l3RXJBeFlGa0dLcFhDMWd1TlJvUFEwTkE3RjlpY1RtY3BVQ3ZMcDFZSlNhVGNmSVZJdlFsZVlSaG0ycFVYOXRWVEtkOXVVbFdxNDRxRUVNRHA5SE81VlRvUEsrRzV1NVhCbFd1OVh4ZlR6OFBoc0Y5eEg3dmRob3lMRjlDc3hiM1hBYjZCbzArZU91Tm8wcmpoVmg5UW8yVTBPQkVBRlVXUjhEeFBuVTRIWVZtV01vU0FFQVlNUXlDWE5ubzNGVlJxTlRScURSbzFibnhUS01adk9MQlJTbkhtekJtbFRaNGMvU3lycVpXSmZzcU5KUmlKOWZaWmxtV253VnY2VWVseHJwRksrYmFUcWxBZFg2djh1UHNIYk55d0hpYVRFZkh4OGZoNDAyYzRkKzRzaGc0WnBPd3phY28wUFBUUXczNGt2STNsbjBETmR5NWRyMVVhR2hyNnhyRy9UdHBiTm0veXZhKzJWZ2JjQUVDa2xIcDlhcHlIZUhzclhBWTJobVhCTWhLd3lWcWJWb1BHalZPcXZhM2ZEUWMyWDFBcjI4ellicmRYU09mdDYxZHpPcDI5VkNyVlZBQlhOTWl2aDByNWRqU2Ivb25xK0Zva056Y1hDK2JQeGN4WmM5QzZkUnVVbEpRQUFPclZxNDhmZi80VkFQRFMwTUhWZGwwYjFxL0RZNC8zSzhWbUlwL1hzaVh2NE1TSnY2SFJhTkRqd1Y0WThlcHJZRmtXZ0plU1o4V3lKVGh4OGdTMFdpMTY5dXlGbDRlUFVENnZEdm1uWTNicDFCNXF0UnFFTUVoS1NzS1FvY1BRc1dPbmZ5dU9Sa1ZFUkx5NmN1WEtrdGRmZi8xQUdjMk5Fa0tvOUQrUm0yRHhIT2ZsSW1jSUpRd0JReVEvbTZTNUtjQ20xa0NyMGFKZS9mclZlZ0UzTkVFM0l5TUQ2ZW5wbGVhcHlkUkRVb3M4K0xMZlVrb1pxOVhhU3FQUlRBWHdqMWQ5QTZpVWJ6K0F1d0xWOFRVOVpOSk9Jekl5RWgwN2RvSkdvMUhLd0FnaFNtZWk2bnh5ZnJoeFBTd1djN24zWjd3OURUVVRFdkQxTnp2eC9nY2JjT2pnQVd6ZnZnMkFOeWR2MG9SeGFORHdIbXo3WmlkV3JGaU52Yi91d2RkYnY2cTI4NnpxTVZldVhvTWR1NzdEa0tIRHNIamhmR3o5YXNzdG1TZUVFTng3NzczbzJiTW5ldlRvZ2ZqNHEzdTRDNEtBMzM3Ymo4a1R4eU03SzZ1eVk5U0xpb29hdm1EQmdzYVM1U1RUakt1VnVsSks1VzcwaE9kNThKdzM5Y05US3ZYRGpzS2lRdnowNDI2c1hmTWU1cytmZy8zNzl5RkxPbTdXcFVzWStmcXJlUGFacHpCbTFCc29LaXBVenVHakR6Zml1V2VmeGpOUDk4ZXVuVHR1amNabU5Cb1ZVRE1halFxb3libHF2bDNhZlRxMEs2Qm1NQmhxNmZYNktRRGFWdlhtL051YzVvR0JRYkJacjU5UC92anhZNWd4ZlJvOEVzM000NDk2emN4K1QvVEhvTUZEcXZRYmh3NGV3TW9WeTJFdzVDRXhNUWxqeG81SFNwTW15dWQ3ZjkyRERSdldJZDlrUWt4c0xJWVBINEYyN1RzQUFFYSsvaXF5TG1VQ0FFYS8rUVpVS2hZSkNiV3djdlVhaUtLSXJsMjc0ZUcrZmFIVmFoRWRFNE5XclZzcm1lb1dpd1Uxd3NQeDNNQ0IwR2cwU0toVkN4MDdkVVphMnVscUcvZXJPYVplcjBmSGpwMmduaklOYjArZmhsNjkrOXgwWnBiazVHU3dMSXZkdTNkRHE5V2llL2Z1eU0vUGg4UitVd3F3NVNSbDM3L2ZmT04xMUt4WkU2ZFBuNElnQ2xjQzBOYUppWW5EeG80ZHUraWRkOTdKa2JVMkg1K2JIR0FRQlVFRUlieTM3cEV3bERBTUNFUEFzQXh5YzNOQkNNRURQWG9BbEdMRCtuV29WNzgrOURvZGxpNTVCNDg5M2c4OWVqeUlMejcvRE8rdFhvWEpVNmJoeEltL3ZYTnM0MGR3dTkwWVBud1lXdDU3WDVWQi9JWm9iRmFyVldIcThLMy9sRHUzWHltdGcxSktYbnp4UlRZaUltSXlJYVJ2MVk5WmNrTW5pOWxzeHVSSkUvRGNzMDlqM3R6WnR3emNLcU02dmhwcDBhSWx0bTNmaFRkSGpVSE5tZ25ZdG4wWHRtM2ZWV1ZRdTNEK1BONmFOZ1VqWG5zZHU3N2JqYWNHUEkweG85K0FTZEltTXpNek1IdldURXljT0FVN3YvMEJqenp5R0taT25hdzBwVm14Y2pXMmJkOEZBRml5YkRtMmJkK0ZsYXZYZUNjY3crQzVnYzhqTEt5RzF5bCtNUjBIZnZzTmJkdDY2M2dqSXlPeFl1VnE2SFI2WlVFZVAzWU16Wm8xcjdZeHY1Wmp0bTdURmg2T3V5V2xRNUdSa2NqTnpWVjhYYUlvb2thTkdxWDJPWExrTUtaT25naU80MkN4V1BEUzBDR3dXTHdSMlhlWExNUGtLZE9xcEJnd0ROUDd2dnZ1R3h3VEU2T1h0RGFmMGl1d0FCaHZSemlSdUZ3dTRuSzV3SEVlWWpHYmtaZWJDNWZUaGVMaUlnUUdCcUtrcEFRcXRScUNJQ0QxNUFsa1pHWWdMZTIwY3U4ZmVyZ3ZEdjkrQ0FCdy90eFp0R2paRWxxZERpR2hvV2pmdmdQK09ITDQ1cG1pbE5KeVZRVyttcHB2Qk5TM1E3dHZCSFRObWpXVENDSERic1JOLzJyTGwzanUyYWZ4N0ROUFlmNjhPWEM3WEZYNjN2dHIzOE05OXpUQ3A1OTlnYkhqTGhORm1veEc3Tnl4L2E1eVZPL2N1UjFkNysrR2poMDdRYXZWb25lZmgzQlBvMGJZdmZzSEFFQkVSQ1EyYlB3WWpWTlN3REFNSG5uME1YQWVEN0t5TGxYNUdLa25UNkpuajI0WTlQeHp1S2RSSTNUcGVuK0YrNjE1YnhYMEFRRjQ2T0crTiszNnEzSk1RZ2pDYTRURGR2M08rcXNXalVZRFFSQVFFUkdCVHAwNlFSVEZVa1NPQU5DcVZXdUVSMFJnNW96cEdEdm1UZlI3NGttRmFPRnFHNmVvVktybkZ5MWFOQkJlTGpkZmsxUWxZUWdqVWtvWWhvSEg0eUUybXcwdWw0c0VCZ2JDN1haRHBWTEJZTWlEMVdwRmRuWTJDZ3N0eU0zTlJXNU9EaUlqb3lBbkJSODZlQUJXcTNjODY5U3RoNk4vSEZFb2tsSlRUOEptczkwOFlEdDc5aXd1WGJxa3BIVlVwZmRubVFqb3dCdVZxM2JpeE4vWXN1Vy9XUHZCZW55NitRc3dESVAxNjlkVjZidm56NTFEaDQ0ZHk5MzQvUHg4N05qeHpWMEZiQWFEQVhGeHBWWCsycldUWUREa0FmQ3lQQnc5K2dlR3Z6d1V6ejM3TkFhL01GRFJkS29xS1UyYVlQZFBlL0RGbDF1Umw1ZUhEUlhjcDQ4LytoQy8vMzRJYytmT3I1QkRyenFrcXNla2xNSlNhRUhRTFhLSEpDY25vMUdqUnZqdHQ5K1VvRkJaNEIwK2ZBVCtQUG9IdEJydGRUMFk5SG85Qmc0YytLYkJZT2haZ2IvTnE3bDUvVzBNSVFTQ0lFQ3Qxa0FRQk9MeHVCRVVGQXhlRUhENDkwTTRmU29WRE1QQTRYREFaREtoVjYvZStPYWJyekZrOFBOSVRUMkp3RUJ2LzRUbXpWdWdaNjgrR1BuNkNFeWZOZ1VCK2dEb0EvUTN4OGVXbloxZExsZk50MVRLQjlSUVVRVFVicmQzbHBvWjM1QlphN05hRVJRVWpJQ0FBREFNZ3hlSHZvU0xGOU9seFpxSFJRc1hJTjlrUkdoWURZd2JQd0dKaVVuNCtlZWY4Tjh2UGtObVppYm16cGtGalVhRDU1NTdIbDI2M28rbFM5N0JzVCtQd21Bd1lQakxYcjYzdGUrdng0YjE2L0RubjBkaE5CaVEwcVFKTHFaZlFHUlVOTjU1ZHlrb3BWaTlhaVgrK09Nd09BK0g5aDA2NHJYWFI0SlNpbkZqUnVIK2J0M3h5S09QNGNTSnZ6Rm45bit3YnYySHQwVjNiVitKaVltQklTK3YxSHM1T2RsbzJkS2Jpckx2ZjN2eDZhWlBzR1RwY2lUVXFnWEFHeldzYUhHVkJUdTN5NFh2dnZzV2ZmbzhCSzFPaDdpNE9QVG84U0QyNzk5WGFyOHRYLzRYUCs3K0FjdFdyTHJtaE5PcmxhczU1cEVqaDZGUnE5R2dZY09iZm4ra3NrUDgrZWVmQUFDV1pjdFJ5OXRzTm93ZlB3WURueCtFczJmU3NHRCtYRXlhUFBXYWdrVk9weE5idG14UkFYamxyNy8rTWpSdjN2eFB5ZGNtU3Y0MkpXSktLU1VNdzhMamNWT24wOXVVbmpBTW9xS2lFQkFRQUoxT2g3Ly8rZ3VpSU1KaU1VTWJGNC9uWHhpTUJnMGE0bUo2T2k1bFppckhmVzdnODNodTRQTUFnSmVHdllpNmRhdGVVSC9OR2x0UlVWR0Z1V3FWZ0JvcDA2V2R5YzNOamRkcXRSTnhBenUwdDI3VEZqVnIxc1RMdzE3RTExdTNRS2ZUb1hYck5nQ0FPYk5ub1dmUFh2aDQwMmQ0L29WQm1DNVJMRC93UUErc2ZYODlhdGFNeDdTM1ptRHQrK3NWczJqVTZMR1lNSEVLa3BLVHNmYjk5YVU0cE5xMmJZY1pNMmNoTXpNREgzMnlHWmN5TTJHeFdHQTBHaEFZR0lBTkd6L0d4NXMySS9Ya0NSdy9mZ3lFRUV5Wk5oMmZidm9ZYVdtbk1YZk9MRXg3NisxYkJtclMvZkJxSDZLb2FOSUE4SERmUjdCMzd4NGNQdnc3ZUo3SEw3LzhqTlNUSjlDelZ5L0ZIMGtJd0xBc2lvdUxzUG5UVGRMdmxHYUtpWXVQeDZHREI4RnhIUEpOSnE4MnJOWGlrNDgvd3VlZmJ3YkhjU2dxS3NTK2ZmOURzMmJOTHB2Q083WmoyOWRic1hUNXlwdkdVMWZWWTdyZGJ2eCs2Q0RtejV1RDRhKzhla3NvM2ZQejh4V0EwbWcwQ0FzTEs5Y1E1Y0tGOCtqYXRSdis3N21CbURaOUJqUWFyZUpqdXc2cFc3OSsvUmRIalJvVlc1Ry9qVkxLTUF6RHlGUmpIbzhISE04UnpzUEI0M2JEWVhmZ3pKa3ppSXFLZ3QxaFIxRlJFUW9LQ21BMEdQREhIMGV3Zk5rU1BQbFVhVjVGanVPdzZaT1BRWWlYeDYxYU5UWkJFSkNlbnE0RUMzd2pvQldrZFpBeWFSMkVVc3BFUjBkUElJUThlQ052dUVxbHdveVpzM0Q2VkNxKy9mWmJESDVoSUdiTm5vczZkZXZpN0prMDlGemhKZXhyMDZZdDNuVzVZRElhRVIxemJXbTlXcTBXT3IxZU1Wc0RBdlRnT1E2eHNYR0lqSXpDeEFsandUSXNERWF2MzlIcm00ckE2REhqOFBxcnIrRDVGd2FqU1pPbXR3VFV5aWJvTHBnL0Z3dm16OFdEUFh2aHJla3pVTDkrQTd3OWN4YmVXNzBTaHJ3ODFFNU14TUxGN3lJbXhwdGYxK2VoaDNIeTVBa01IZklDV0ZhRnh4N3ZoL3IxRzhCU3BseG96Smh4V0x4b0lUWnVXSWZhdFd0ajNZYVBvTkZvc0dEaFlxeGNzUXhmZlA0WjFHbzF1dDdmRFlNR3Y2ak1yVVVMdldiZ3MwLzNMMjBtYnRxTTJOaTRHejRlVlQzbXlOZGVCU0ZBWW1JU3hvNmJjRVB6MklLRGc2dThiMFpHQnNMQ3d0Q2pSdzhBd1BIang4djEwbWpldkFXYU4yK2hySXV4NDhiZklQL3J6bTZ0VzdmT0FMRENSMnNUQVZCQ2lEZEdTa1VxMTR2eVBFOFp3cEFTYXdubE9RNmhvV0dJam9tRjNXNkhXcVdHV3EzR3JsMDd3RElzbm5yNmFiU1hJdXVBbCtKOCtkSjMwYng1Uzh4ZnNMaENiYk95Y2JzbVlQT05nRmJHcVZZRzFHUUdBTGxjYWpnaDVOVWJQVUZQbno0Rm5VNkhSbzFUMEtoeENyNzl0akUrK0dBdDVzMWJvSmhHaXBuRU1LQzQ4VngwZi8xMUhMdDI3c0RTWlN1ZzFla3dZM3JwcWpDSHd3RzFXZzJYeTFudEFOYXJkeCs1UTNncHFWKy9BZjYzLzhwOVREdDI3RlRwd3RWcXRaajIxdHVsM3F1bzRXMmJ0dTBxWkhtdFY3OCtsaTVmV2VGdnN5eUx2ZnNPM0ZTZ3I4b3gvMm04YnNRNTJPMjJLa1VxNWFxYjY1VlBQL3ZpbXI2blZxdUhiTml3SWVQRkYxL2NCaS9GcmtnQktyV1NwL0NtZ1lpaUtGS0JGOEFURG9FQkFVU3IxVkdkWGdlMzJ3V253MXVOb0ZLcjBLMWJkOFRHeHFGV3Jkckl5TGlJT25YcUFnQTZkZXFNVHAwNlYzb2VkcHUxVWovb1ZadWllWGw1Q2dXUmIxcEhCUkZRK0lDYW9xM1o3Zll1TE10T3JJN0prWFhwRWhiT253ZTczVnQrWWk0b1FHaG9LTFE2SGVvM2FJZ2ZwYWplSDM4Y2dWcWxRblQwUDJ0cm9hR2hLTWd2cUxDN1ZFVmlOcHVoMSt1aDFtaVFuNS92ellXU2lva05oank4dDNvbDN2OWdBdzcvL2p1T1hFWDR1bkxIYmdEOGNuVmpjeXZIckxKalIwZEh3M0dGV3VlQWdLcVp2RlhkNzNwL0t5Z282SlYzMzMyM2hSSk1rSnJDeUNhcG5BSWlpZ0xoZVFFY3o0UGpQUEI0WkFaZUZ4d09CK3cyRzBxS1M3d012UGxHS2JtL2FrbnFkcHNWMGRIUjF3OXNEb2VqRkZ2SFB3UUx5aVhocHFXbGhXbTEydkVBcXFVT3FtZXYzdWpjcFN0ZUh2WWlubjNtS2FTZVBJSFhSM3BwM0taT200NXZkKzNFNEVFRHNYSDlPc3o0ejV3cU9WSVRhdFZDMjNidDhQU0FKL0hDd0dkaE5CcXV1SCtuVHAyaDArdngxSlA5TUgzYUZOU3RWeDkydXgwOHoyUG0yOVB4MHN1dm9GYnQycGo2MXR0WXZIRCtkZnM5NUNlOVg4cFArc3BLc0poYk5HWjJteFZzSlJwR1hGd2NLQldSYjh5cjhOeVM2OVQ3UjlBS0NBaEVjcDBieDFqN0Q4ZU1pNCtQSC9UQ0M0TnF5T0JHeTRNYlF5a2xvaWdRZ2VmQmNiemtiL1BBN1hMQjVYVEM3bkRBYXJPaXVMZ0lGck1GSnFNUjJWblpTbCtGeXNiUlpNZ0ZDQ290UDd3cWF2RFUxRlNrcGFVaE16TlRxUVgxTlVWOUtneUlyTFZKdmpWR29pR2F4VERNaEJzeDZMZUtTcm02cFRLcTQ4cjlMWmt3V3l4K29za3lZalRrSWpJeUFvbTF5M09mWldSbXdteSsrV05tTk9RaUlpSUNTVmZnWXpPWlREQVlET0I1SGxicjdjOVc0M0s1VnZYdTNYczlBSWUwdVFCNENDRWNBSjRRSWhKQ1JJbGFYS1l2b2xxdGwxbzhJQ0FBZ1lHQkNBNE9SbzBhTlJBUkVZRzR1RGpVcmwwYnljbko1VFhGNEdDb1ZTckV4c1pXcXExZGxZOHRLeXNMMmRuWk1KbE1NSnZORlFZTFBCNVB1ZFFPT1ZqZ2NybWV1RkdnZHJYTzFqdEpydmE2RWhOckl6L2ZCS01oVjJFNXVkczFOWnZOQ29Ibkt3UTFBRWhLVElUSmRQUEdURDRuVVJDdUNHcXlTWHFsQlhzYnltdFpXVmxuYTlXcXRWZjJ0eEZDbElBQ0FIaFpQd2hrY0ZPcFZOQm9OTkJxdGREcjlRcXdoWWFHSWp3OEhGRlJVWWlMaTBPZE9uVlFTMG9udWxxcEVyQlpyVmFsc3FBc3FQbldnUHFtZHZpYW9FYWpzWlphclI1N3E1eXRkOUtpdk5wRVZFSUlXclZxaFlzWm1iQll6Q2l5V09CeTNaMGNiWHA5QUJpV1JXUkVKQklUcjd3ZzJyUnVqY3pNUzhndktLaldNZFByQThDcVZQK29xZDNKVXJObXpjRmZmdm5sMmFlZWVpb2JsNk9rTXJCUk9aTGdKYWZrS2NNd2hHVlp5cklzWEM1WEtTSktHZXdDQWdJUUhKdGcwTndBQUNBQVNVUkJWQnlNc0xDd2ExSmlxclNLWk5QVE53bTNnc29DWDFDVHF3c0lwWlNKaUlnWUE2RFZqUnpNNk9ob0dBekdmeDJ3eGNkZmZUb0RJUVIxa3BOUUp6bkpiNE5lcGJhYitDOEZtNXNwaEpDV2ZmdjJIUUJnRlFCQjZvL2dqWlpLcEpUd0VsTlNDZHpBY1p3Q2JpcVZxa0p3Q3d3TVJFaElDSnI0a0M5VVZmNHhlSkNWbFlXY25CekZuMVlacUYzQkJPMWZIYWtkaXJQVlpJRGpEbmVlTyt3MnJ6TVU5SVp4c2ZuRkx6ZFRkRHJka096czdNNlF5cTBvcFJwSXlidStnUVJCRUlnRWJBcHV5QjJ1SEJMTlVVbUpOMHFhbjUrUG5Kd2NoZUxvaG1sc2RydTl3bncxWDhKSUdkaDRuaTluZ21ablo4ZXExZXJSMVRXWTk5NTdMNHhHSTR3bUU2d2x4WGNrTmJqc0RFMUlxSG1uK1ZiODRwZFNFaDhmUDJqanhvMnBRNFlNRVNSL20rQnJscFkxU2FYcUJPcExSR20zMnhXdFRRNHNoSVNFSUR3OC9LcXFQSzRJYkdYejFjcEVQbjN6MVNveVFVbE1UTXdvQVBkVjUyREd4TVJjZFM5T3YvakZMOVZpa3JZWU1HQkEveUZEaG53QWdQY3hTUVhKSkJYaFpkMVZURktHWVloS3BhSXlDNGh2WUtHb3FLaVVyNjFSbzBaVkI3Wk1uNkpUWDhuUHo4ZVpNMmRLTVhlVTlhK1ZEUno0Y3F5bHBhWDF6TXJLR3UyLzNYN3h5MTBsTCsvWnMrZG90MjdkRHN2Z0JpbFNLaGZMUzAxZzVLcDVoVlB1Y3Zlcnk2WnFXVE8xcWkzOFZJbGhQNVI3aytNRjVGL01BbkVhUU54bUVFOHhDR2NESTloQkJCY2d1QURCNDkxRWpsQlJBQ2dsOGpiNC85cXc5YVAzalBMZlk3LzQ1ZTZUaEdiaS85VkxydkgzK1l1RlBBQ0JBQUpBWmJPVWdSZk5BQ3FDaWp5RjZDWVFYQlNDQXhDc0lJSU9qR0FCNGZKQlBMa2c3a3dRNXpuQWxvcjQ1RnBRcS82NTkwV0Z3WU9zYkFzTXBtS1lMVFlVRlR0aHM3bmdjTHJoZEhKd3V6bDRQRHc4SEErT0Y4RHpJZ1NCUWhRcFJFb0pCWmozbHcwZUNlQUIveTMyaTErdVRTaTljOCtkWlptdWgvZE1md1J5SU1FYlJKQURDU3lWaUNsRmtVSVFLSGhlQk1jTDhIQThQQjRlYmpjSHA1T0R3K21HemVaQ1ViRVRab3NOQmxNeExtVlZyVktubkkrdHVNU0ozTHdpRkJSWVVWamtnTlhxaE4zaEJUV1htNFBidzhQakVjQnhBbmhlSkx4QUlRaVVpSlFTVUJETHhYY2JzQ3p6aG45cStzVXZWeWNpQlF5V1NKZ0t3eUNJTEd4M2RqcmlvQVVMRmh5Wk9ISGlSYTlKNmcwbWVFMVNpSklGU2tSS3dBdUVjZ0pEUER4TDNad0tUbzhhTnBjYUpVNHRDbTA2RkZqMU1CWUZJdHNjQkVOeENQSks0bEFuZ1VOY2VBRXFxNG9zQjJ3NXVZVXc1WmZBVW1oSGlkVUptOTBOaDlNRGw4c2pnUm9QanVQQisycHJGS0FVaEFKTVNJaitOUUFKL21ucUY3OWNIYWdkTzFjZllNTVFGSEpuOThtVnBHWkM3ZVRISjA2Y3VCb0FEMitFVkg0VlFRZ0Z2RzM4Q0NFZ1VyTmxJdEVkc1NvMVZDbzFWR29OMUJvdE5Gb2R0TG9BaUNRUXhUWTE4b29Ta0djT3c3MzF6MWNJYnFWTVVXTitDUXpHWWhSWWJDZ3Fkc0JxYzhIaDhNRHA0dUJ5eTZBbXlDWW80YjBtS0tFaUpaU0NPUEpXZENlRXZQSnZtbkRqcG0zQi9YM2Z1V0cveC9NQ1JrMytBdEgxeGlHMDlwc1lQbW9USEE2UGYyWGY1V0lvakFUWU1NVEV4djlya3M2MVd1MmdQYi91YTQ3TFZPSWFTdUZESmU3Tm5oQkZrUWlDQUY3Z0NjOTVBd2VjNS8vWk8rL3dLS28yaXY5bXRtVlRJRTE2Q1VoSGFWSkUwQUFmVWtSQkJDc2xJQWdxTFlMU2xkNkQ5TjVFcFNnSWlpQktFWkFlbENJSVVnVUVFdEo3c21WbXZqOW1kNUpOSXlCTjJmTTgrMEIyWm5idTNwMTU1MjMzSENzV3F3V0xROFpQMVQ1SUpENHVqdVNVRkhRNkErZ0tjelBlTDlkenV4aTJHeEVKUk1jbWs1Q2dHclhVTkF2cEdkYk12SnJEc05udHNtQzNPMEpRR1VFQkFSQ05Sc1A3N2tzMGZ3d2JzNUZOUC96T3VzOTZzV2wxSDNidStaTitnOWU2SitZUlIxUjhvZitjVGk1QXVmTGxPMlF4YkFaUURHU3FXNG5PMWpCSmxnWEpMbUczMndXYjNaWlpGYlZtVmtWVFVsSklURXdrTGphV3lKdVJlUHY0M3Rxdy9YMDlUZzFCNDFKSlRFb2pKZFZDZXBxVmpBd2JGb3VqV0pEcHJTRkpNcktzT0FzY1lrYlV2RGNFZ1JmZGwyamVTRTIxTUcvcGJzTEdkeUM0Y1NXQ0cxZGk4YXpPckZ4emtKaFlOL1hRb3dwRkFVblMzNUduZHViMEh3d012ZmNwN1ROblRoTTJiWXJHYWVqRXhvM2ZFTkxsTFVLNmRuSVI1SW1Pam1iZ0J3TjR1M3ZYbGkxYXRtcE1GaXB4UlZIVUlvS2lpQTdtSHhSSHE0Y2syYlYyRHlmRlVZYWo1U00xTlpYazVDU05Vand4TVFtN3JNKzEwQ0lDV0cxMk5RU05UU0VoS1kza0ZBdHBhUmJTblViTldUQ3dTOWp0a21DWFpDUVp4N0lweEk4L2FxMHo2SFh2UGVnTDVPbm1rd2tkOWhYQmJjSUlxakdjSnhxTzRmdXRKN1R0ZFp0TVpQallqVlN0UDRyaWxUL2k3UGxJTEJZYll5WnZwbnpORVhnVTdVTzlwaFBac2R0VktOZG1rK2dkK2lYZUpmdFR2UEpIZkRwdmUrWVBHSlBNSzUwWDRsZjJBN3hMOXVlRlYrZHc0VktVdHIxajEwWFViVElSZ0dPLy8wMTZ1bzNnUnBXMDdjODJWRVh2RDRaZmROL2hqeWdFQVZMU2hEczZ0bktWcW93YU0vYWVqbS8rdkxrc1c3cUVTeGN2YWlTdUFGZXZYbUhEK3ZVc1dMU1VaY3RYY3VMRU1ZMDhkZjY4T1RScjlqOVdmcjZLZDk5Ny8xVVBEN09ITXh6RlVTRVZCRUVIT0kyYnl0c21TVWlPVlV3Mm13MnJMWXV5ZkhvNnFTbXBKQ2FxSVdsMFZCUUppVkt1T1RZOXdJMGJDVVRISkJPZmtFcFNrbG9GVFhPMGRsaXNkcXlhcHliaHFJSTZ2RFUxRFAxNDhFdTlLS0NDKzczR2dtVy9zSFY5UDVvOVY0WE5QLzdPSzEwV2Nuam5VR3JYVUJjN3o1aS9rNVVMdW1FeTZxbFVvU2c5KzMzQmp6di9ZT0duYjFHcFFsR1dmcjZQRjE2ZHcvRzlJNmxXUmVYck9uRDRJdVhLQm5CMHp3aU9ucmhLajM2ZlU4akhUTSt1alFrZDlqVVdxNDN3bjRjQzBHL3dWNFM4OXhuN2YxSVptanEycTBOOGdscmV1aDZSZ05Hb0o4QS84OGxzTU9nSThQZmkybzBFOXgzdVJnN0V4c1l5Y2NJNFlxS2pFRVNSOTk3clE0T25HM0x0MmpVR2h2YkhaclBpNit2SGlwVmZaS1k3aG56RWpSdlhBVlYweWRQTGl6VnIxd0VxcmYrY1dUTklURXJFMzgrZndVT0hhVm9XQU91Ky9vb05HOVpyK3dQMGZLY1hScU9Sc0dsVFhNYjIrNGtUUEZXM0xwNmVudGp0ZHZ4OC9UaHgvRGoxNnRYbnhJbmpmUENCU3VqajYrdGJyMFNKNGkwdVhicTBHYkE1WGxvaFFWRVUyUkdTT2xZa1NPaDBkdXgyR3phYkhxdk4wYWlibms2YVNRMUpFeElTaUltTndXVEl2YWRObjU1dTFYcldFcE95VkVFMW8rYklxemx5YTQ0UTFPbXRDU2YyZlZ4SXB4TjdQU3dYd2xzZDY5SHNPWldBOHNWV05XamVwQ29MbC8vQ29wbXE5bVdiRmsveVdudVZhQ1F1UHBYUFZoOWcxWklldk5SYVZmMmVOcTRqaDM3OWl5bXpmbUxsQWxVNXZWalJRaXliMHhXVHlVQ2xDa1g1N2ZnVjVpemVSYyt1amJsOE5aYlNKZjBvV2R3UFQwOGp5K2QyNWRxTmVHMDhiM1NvcC8wL0xkMktoNGMrbHlTckhvdlY3cjZMM2NpQnI5YXVwa2FOR29SMGU1dExseTR4Zjk0Y0dqemRrRktsU3ZIMStnMmNQMytPaWVQSHVSd3phY28wQUJJVEUrajlUZzgrR1BnaG9NcjJUUncvbHZFVEoxTzhlSEYrK25FckMrYlBZL1NZek9OcjFxcVZnM2s0TDRIbHhNUkVQRHc4aUk2T1p0S0VjVWl5aEk4alQ1aVltSWpKdzRQdk4zM0hqaDNiOFBUMGZMVkh6M2YyTEZ1NnhPbzBiSTVWQ1pJajM2YklpaUlJYWtpcTJDVzdZTFByRkwwekpEV29JV2w2ZWpxcHFTbHFTQm9majBFdmtwNHVZemE3amxHOEVhbUdvUEdKbVQxckdlbVpCUU9iemRtemx0VmJBOW5oclZXdFhMd25VTzFodVJEcTFIU2xvYWxlcFRpbnp0elEvcTc0ZU9aQzh6Tm5JNUJsaFliMXlyc2MwL2pwQ3Z4eEpsTlhzMjd0SUV3bWcvWjMvYWZLOGVlNVNHUlpac2lBbG56LzQrOEVQajZRTnEvTjRic2ZUbEM5U3U3TXJHWVBBMWFybE9OOWk4V09sNmZSZlJlN2tRUDE2amRnNTQ3dHJQeHNCWmFNRE1LbXp5alFjYklzTTJiMEtOcTgySmI2OWRWZzZxKy9Mbkh0MnQ4TUh6cVk3aUZkV0wzNlM2SnV1dW9MVktwVW1WYzZkQ3p3K0U2Zi9vT1JJNGJ5VHU5M2FkclV0U2QvMG9SeFhMNzhGMkhUWjJJeW1hcDA2OTdqZVZ3S0NZNEtxWm9TRTFDOU5tUlpRckpMU0hhN1F5dEJyWkphTFJZeUxCbWtwNlZyaFlURXhFUnVSQ2JtOU5qVW5yVVVraHplV3JyVFc3TTRRbEJuejVva0M1SmQ5ZGFjemJobndzZjQ2WFJpejRmcFFwQ3phVnRtV096b2RKbkYzNndHSkx1Vnovb1pXWVYramRuY1hiMWVSSzhYRVVXUnRpL1U1UHFaS1h5LzlYZCszUGtIdzhkK3kveGx1em04WXhpZTJZeFZxUkorWkdUWVNFaE13N2V3cDVhL2k0MUxwV1J4WC9kZDdFWk93MWF2UG5QbkxTVDhTRGlmcjF5QjBXaGt6TGdKdHp4dTJkTEZlSGg0MExsTDF5eTVZaHZGaWhWekNWdi9DUW9YTGt4R1JnWmgwMmRTcUZBaFRwdzRUbUZmWDIzYk00MGEwNkpsSzgxYkxGNjgrS3U5ZXIyN2MvSGloZFlzNGFpZExMeHRMbDZiWFJKMGRydmlVaVcxV0VqUFNDYzFOWTNrNUdUME9vR29hSmxpUlF2aDVXbks5TmhpWXBOSlNFeFhlOWJTclZyQndLWlZRZVZNYjAxV3ZUVm5idTN4Y28rOURUeitNRjBJNFVjdnUveDk2TWdsYXRmSW5VMjFZdmtpNlBVaUI0OWNjbm4vUVBoRnFsVEt6RHVjdmVENlZEdCs4bStxVlZZSklZZU0yc0Q1aTFGMGVlTnBWaTNwd2Y2ZlB1TFU2UnNjUDVtVFE2cDJqZEtZelFiMkhqaXZ2YmZ2MEFWRVVlRHBiRjZqRzI0QVRKbzRudkFqNFRSdi9qekRoby9rMEtHRExnL2QzTEJ2MzE3MjdON044QkVmdXdnV1ZhaFFnYVNrSkg3WnMxdkx0MzIvNlR1WFk4K2ZQOGZHamQ4VWFHeFAxcWlCMVdyRlpESWhTUklIRCt5blppMVZ5N1JXcmRyYU9JLys5aHRCUWVVd21VemwrL1R0MTV4c1JZVHNYcHZzOU5yVVFrSm1sZFNtQ2k5Yk1qSklUMWR6YlNrcEtjVEVKaE41MDlWcjA4Y25xQ3NNVWgzZW1zVmlVOWRzT1VOUW04TmJrMXk5dGQvMkRQZlI2Y1MzSDdxY3hJWmZlYWIrNHp6ZnRDb3JWaDNnNU9ucnJGclNJOWQ5Zlh3ODZOZXJHWU5HcnNmYnkwU2xDa1ZaL3VWK0RvWmZZdXJXRDdYOS9qaHpnNFhMOS9EdTI4RWMvdlV2NWl6YXhkSTVYUnhHTDVJK0g2NWhYdGliQlBoN3NXTFZBYnk5VFpwaFhQdk5FZUlUMG5pdlJ6QmVYaVo2ZEdsTTM4RnI4Zkh4d0dqUTB6djBTN3AzZWdaL1B5LzNYZXhHRG5UdTNKV3dzQ21zWGIwS1daWVpPT2dqUkZGMEtSNGtKaWJ5V3NkWHFQUFVVd3dkTm9LNXMyZVNrWkZCbi9jeVU5OXo1eS9DeDhlSFNWT21NZlBUNlN4YXVBQlBUMDhHWmhOU1BuYjBLQnMycktkOSt3NjNIRnZac2tHMGI5K0JkM3YxUkVIaDJXZURxVmV2UGdEdjkrbkg1RWtUV1BmMVY1ak5ab1lNR3c2QW43OS9oL2F2ZE5pK2NjTTNOc0RxTUc1MlZHVXJsVzFYYmRwMTVOcFVyeTFybGRSaXRXcTliVG9SNGhNa29xS1RLVjdVVjR1U2hGbVRYK1ZHUkR4Uk1jbkV4NmVTbUt3dWVrOU5zMnBMcVRJc2ttQzFTdGp0aWlESmlxZ29pTmJvK2YxME9qSHNZYm9Jbm00K21TZXFsdURDWDlFY09uS0pHdFZMTVgxOFI1NTlSbTJwcU50a0lpKzNxY25Jajlwb3gxaXRka2FPLzQ0dnZqcEVRbUk2dFo0c3pmaVJiZmxmc01yOTlPSEk5Wnc1RjRHZnJ5Yy8vM0lXblU1a2FHZ3IrcnpUQkZEYlBRWU0vWXJ0dTg2UW5KSkJuWnBsbURhMkE0MmVWbVhRT25aZHhPV3JzZnk2ZTdnam4yWWpkTmpYclBubUNLSWcwTEZkSFdaUGVRTVBENFA3TG42RXNlZDQ1ZitrNmxwdWlJK1BuMWpqaWFyZkF5bEFLcEFtQ0lJRlZkM0s3bEMxa25VNm5XSXdHakVaVFlxSGh3a1BzeGxQc3lkZTNsNzQrQlRDdDdBdm9nZ05hMG1VRDNxTWFsVktVRDVJcFRVU3hvOTh5WFVabGNON1MwMnprcDVoSlNQREpsaXNFamFiSWtpU0xNZ3lZdWZYNitrL1c5RGpNUERrdzJiWVdqV3Z6dWloTHoyeU40aWlnQ0M0di92RE1tY0YvZXhIeWJBcGl2SkhvNFlOM3YvNzc2c3BEdU9XSmdoQ09tQkJsZXlUUkZHVVJWRlVEQWFEb2hKUGVpZ2VIaDZZUGMxNGVucmg3ZTFONFVLRkVRU0Zlay9LbENubFQ2VUt4YWo1UkdrOFBBem9VeHk1dFl3TUcxWkwxdFVGV1JhNVordGJXenFuVzVlSHphaGxoK0RiKzEvM2cwZWVtMGJSSXJlL3JFWlM5RnlPcWt4OGtoNUpGc2xJZnpSVnFqek1ablNpZ244aE8wRkZ6aUlLZWJmUXlBcGNpYWxNYklJSlNkYmRzemxUeHlRVFdOaEMyY2ZPM3RMSVhiOTI3Vkg0cWFvdldMajQyUmZidE5ycHlMWFpGRVd4Z1dBWEJMV1FJTXV5QUNnMm15M1RJT0pZNlNTckt4VThUQ2ExdVRsRklqRXBrOW9vcUV3Zyt0UTBpNE81STF0dVRaS1JKRm1RSk1XeHlrQjlvU0RxOWJvdUQvMVRJV0hSSTNFenA5djkrUDFDS2ZRR0Qzd0t1M1ZGVTFOVGlFOU9JaWFoS2pVZnY0cEpuNWlyVWZ2MTNCUG85T2I3TW1lcHFTbkVKaWNSRmY4RTlTcWR5dGU0bFN6MWFCRGpGQzlSb2czd2k4T3dXUUc5SUtESDBkZUdxbXdscU12UUJRVUVRUlFFUlJUVmJnUlJwOE5pdFNLZ2tKb21rWnljUVh4Q0dqRXh5WlFxNFllWW5tNVR2VFdyU3lNdWRydUVKTWxxSmRSQm5xU0FrSFp6Ym11ZzhjTTRXWWQyREgza3d0REl1Q0xvRFI3L0tWYUlmd0l2TDIrS0ZpdUJUdTlCUkZ6dWlsK1hvNnVoMDV2djI1eGxqc25NbFpqS3VBR2lLRGJjcy9kQUxUSkpLQTJLb3VoUUs2U3FOVk1VRkVWV0s2U3lNNHJNdXBaVWxTUklUN2VSa3BwQllsSWFzZkdwUkVZbElhWnJQR3RxejVyTkxtR1hIRWJOR1lKbU1uZ0lSb1B1VGZmUDh2QWdOdEgwbjJTRitLZnc5aWxFVEtJcDEyMXhpZm9ITW1mZVBvV0lTVEM1Znh3SFNwY3VuYjMxdzhuOG9YT3lmamhvalpBbHRmM0Q3bGdrYjdmWnNEcGFRTkl6cktTbVdVbE95U0FoSVkyWTJHVDBGa3NtZWFUV3M2Ym0xZ1MxYjAxeFdFNkVoQ3N6bnhRRTRkWGJDZ2tmNFdUMnZaNGZTZFloeVRxM3A1YUhsNVFZSDRzc2d5aTZ6dmVEbWpOMVRIRjM5SnNuSlNaeSthK0xwT2Fqb2V2bDVVMVF1Y2NwVkxqd1hSbnZ2VDZud1dCb3UvYXI5Vis5OFhySEMyUlNoK3NGUWJBN3dsRlpsZXhUQkVtU0ZVbVNCTWt1S1U2dnpXNnpBUW9XaTB4NnVwWFVWQXVKeWVuRXhhV2lWM05yV1pkTnlRNXZUVmFMQmdvNCtkYTh2RXl2RjJUQS96R0s0M3Y3RlBjRW5VNmlpRzlDdmxUSHVVRW5Tbzlzb2FBZ1NFOVBkekZxb0JxVUJ6bG42ZWxwZC9RZysrdlNCZExTVXZQZEp6VTFoY3QvWGFSR3JUcDNaYXozNDV5MTY5UitEcmlhSmRkbWRYaHRrcUtvdVRaRmtSVlZ4VXB5cFRheTJ4RlFzRmdsTWl3MjFXdEx6aUErTVExOUZ2MENOYTltenl3YXlBNVhFQVZoODFkOVBFUlJlTDBnUnUwL1JuRjh6NUdhbWtKRWdsKytWTWQzaXUzYmZtTEY4bVZFUmQya1JJa1NmUDdsR3M2ZlAwZVA3aUhhUGtPSGorU0ZGOXE0ZjRpSEdMY3lNRm12cFgvVE9UMDl2ZHEwZTduOSt1KyszV2pKekxWaEV3UkVVQnk1TmtGUUZCbEpraFZKbGdTN3VrZ2V1OTJHQUZpdE1oa1dHK25wVmxKU00waEtTa2VmblVEU25pVzNsblg1VlBPbTFWNEZTdDlxb0ZrcGp0MG9lSWppNWVYTnpVaVptL0YrRlBPUHZ5dWZlK1BHRGFaTW5zaVljUk9vVjY4K1NVbEpBRlNvVUpIdE8zY0Q4RTZQYnZmc2V5MWZ0cFIyTDdjbklDQWd4N2htelpqT3laTy9ZelFhYWY1OFM5NTd2NC9HS25IdDJqWG16SnJCeVZNbk1abE10R2pSa2w2OTM4dkJPbkUzY2F0elB0ZTRJUWFEQVVFUUNRb0tvbnVQbmpScTFOaDk4ZjV6bEJyNThhZ0czMzI3Y1JmYUVpdEZEMEttUG9KS0lhNWt6YldwaStRbFFNRnFrN0ZZN0dSWWJLU2xxN2syMFJtQ1NwS2MyZUloWjdaNDRHengwT2tLdE9UL3YwcHhmRi9DMG55b2p1OEVaLzg4UTJCZ0lJMGFOY1pvTkJJWUdPZ0l4d1JNSmhNbWs4bGxMZUhkeG1jcmxoRVhGNXZqL2RHalJsS3lWQ2syZnJlWnhVdVdjK2pnQVRadCtsYjErR1dab1lNL3BGTGxLbno3M1dibXpKblBudDI3MkxqaG0zczJ6b0tlYys3OGhYeS9aU3ZkZS9Ra2JPcGtObnl6L29GY0o0SWdVS2RPSFZxMGFFSHo1czBwVWVMMm5BaEprdGkvZngvRGhuekV0Yi8vdmk4cGdiRmpSdkhXRzYvUnZWc1h6cHcrclczNysrcFZ4bzhiMDR3czFWRWM2MGVkREx1U0pBbVNKQW1LSWd1U2F0d0VwN0N5SktrUnA5VnFkL0hhTk1QbTB0NGhPU20vMVJhUCtLc3puaEFFV3Q3cUMvd1RpbU0zVk04dEw2cmoyOEh4NDhkNHVXMGJwazJkVEdSa0pDKzNiY1BMYmR1dzhyTVZCZjZNUXdjUDBQbXROMmplTEpnZTNVUDQ0OVFwbCsxN2R1OGlwR3NuWG1qMVBOMjdkZUhRd1FQYXRuNTkzK2ZsdG1wbys4R0EvcnpjdGcxOTMzOVhNeUxCd1UzcEd0SU5rOGxFa2FKRnFWdXZIdWZPbmdVZ0xpNE9QMzkvT25YdWpORm9wRlRwMGpScS9DeC8vbm5tbnMzNzdaelRiRGJUcUZGamhnMGZ5WkxGQzEwWVplOFh5cFVyaDA2blk5dTJiZXpkdTVlYU5XdGlNQmh5TmRpNS9YOUEvNzc4c21jM1o4NmNScEtsMnpwMzQ4YU4wZXYxZVQ0Z2N2dDczZGRmNGVucHllcTFYek40OEZER2p4dUQ0cmpJWjg2WXpzdnRYMm0yWnUyNjBtVFRId1YwZ2lBSW9pZzYxNDRpYXpVQVNYczVxZFdzRmpzWkdUYlMwcXlJem9LQlhTc1lPTFVNdEtLQjRPM2wwYjVnVDVJN3B6aDJRMFZLcXZDUGMyeTFhdFhtMjAxYkdCQTZrSklsUy9IdHBpMTh1MmtMSWQyNkYrajRpeGN1OFBISTRielhweTlidG03ajFkZGVaK0FIL1RYdXJpdFhMak4rM0JpR0RCbk81aDkrNHFXWDJqRml4RERTMHRTay9KeTU4L2wyMHhZQVpzeWF6YmVidGpCMy9rSUFSRkdrVStjdStQcXFudWxmZjEzaXdQNzlOR2p3TkFDQmdZSE1tVHNmRHcremRuTWNQM2FNR2pWcTNyTTV2NU56MXF2ZkFLdk5waG5rKzRuQXdFQnUzTGpoY0NaVWlpMC9QMWRQLzhpUmNFWU1HNExOWmlNdUxvNTNlblFuTGs0VkcvNTB4aXlHRFI5NVJ3NUlRRUJBbmw3K2h3TkRPWDdzcUdiTUZzeWY1N2llem11L2I5VnExVEVhalZ5N3BucUs1OCtmbzBHRHA2bFZ1MWFEWEx3MkVSQVZCVUVRQkxYdFE4bGFSSEMwZ05pemVtMTIwak9zaUhaSjFzUlpuR0dvckdTeWVLQW9naWdLTC8rVEgyTFF3RkJlNjlpZWtDNXYwYlh6bTJ6Wi9MMlcxM2l0NHl1MGIvY2kzVVB1N1dLRzdpRmR1SGp4OW5RRnR2MzBJNjkxZklVWFdyZGc5cXk4Q2Y1MjdOak82RTlHL21lTTYrYk5td2h1MHBSR2pScGpNcGxvMWZvRnFsU3R5amFIa0VkQVFDRExWM3hPdGVyVkVVV1JsOXEydzJhMTh2ZmZWd3Q4amo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMHVYODZRUVU1cHlBSStQdjVrNUo2LzBWNGpFWWpraVFSRUJCQTQ4YU5rV1VaazhtMVA2NXUzWHI0QndRd1p2UW5EQm80Z1BhdmRNRGYzMTg3L2w2Z1Q5LytUSnd3bnJselpyUDFoeTEwNmFvV3FCNnZVSUZmOXV4QmxtVXVYYnJFelp1UnBDU3I4L2I0NHhYWXMzc1hYbDdlemJNWk5YMm1jY3ZzYVZOa1J6anExRWVRVk1kTVZaS1hzRmh0cEdmWUVMTVlOYTFnSUN1QW8yaVFHakczR1hlQklmZWpJY05ZK2NWcTVzeGJ3T2NyVjNEcDBpV04zbmhxMktjUDVRM2VvbVVydmw2L2dXN2QzdVpSUW1Sa0pNV0x1K1p0eXBRSklqSlNaUlgyOXZibXQ5OStwWGV2SG5SNjgzVzZkZTJjYXlpU0g2by84UVRiZHV6aXEzVWJpSWlJY0ZFNGN1THpsWjl4K1BBaEprNmNuR2Y0YzdkUjBITXFpa0pjZkJ6ZUR5anRVcTVjT2FwV3JjcisvZnUxb2xCMnc5dTc5M3NjL2UxWFRFYlRQM293bU0xbU9uYnNTTWVPSFRFWURMUnIxNDZPSFR2eTJHT1B1ZXozZUlVSzZqM3oxUnA2OVg2WFFvWFVYUHVycjcyQlRxK2plN2N1ZlBINVozaDdlMlAyVkwzalFSOE81dWVmZC9KMjk2NVZ1b2FFVkhFWXM2eDVOcDJpS0NwWG0zTTFnaXdqT1VOVFdkWTZPbFN2VGNKaXNhR1hzcXd5Y0RUa09zTlFBTUZrMHJlOW16OUk0Y0srUFBGa0RTNWVPRS81OG5tVEt5WW1KakI1NGdTaW9xS3cyMjEwNnR4VlkrTThjK1kwTTJkTUp6MHRqU0pGaXpGMDJBZ3RNYjU3MTgrc1h2MGxsb3dNcWoveEpCOE0vRkRMUCt6NmVTZGpSMzlNZW5vR2ZmdjExN3lFYjlhdlU1UFhpa0xUWnYralcvY2V0L3dlUjQ2RTgrbjBhWWlDU01sU0pmRTBlMnJiOGh0RDgyYkI5Qi93QVV1WExFSlI0UHN0V3g4NncxYTBhRkVpSXlKYzNydCsvUnExYTZ1OVNudC8yY09xTDc5Z3hzelpsQ3F0RnNxZmE5d3cxNXNydTdHelpHU3dkZXNQdEc3OUFpWVBENG9YTDA3ejVzK3piOTllbC8zV3IvdWE3ZHQrWXRhY2VYZXQ0ZlJXdUoxekhqa1NqdEZnb0ZMbCs3OUV5bXExWXJmYk9YcFVEZnQwT2gwV2k4VTFwWkdTd2tjZkRhUnpseERPbmYyVEtaTW5NblRZaURzcUZxV25wN04rdlZvb2FkZXVIVC84OEFOWkY2ZG5qWEIyNy9xWjhSTW1NVDFzR2hNbVRhWlNwY3FZeldhR0Roc0JRRkpTRW0rODFvRVNKVW9DVUtwMGFUNmRNY3R4Myt4cStQbktsWDlrTld5Q0lEakNVVVhJR25xcktUTUpSUkdRSkFXN1hmWGFiRFk3Rm90ZERVVlZiMDBXSEVVRFRhaEZVUlJSRUlTN0dnTkVSMFZ4NnVUdlZLbFNOZC85enAwN3gvK2FQOCt5RlN1Wk0zY0JzMmJPd09wWUd6YnE0eEdFaGc3azh5L1g4TXd6alZpeWFJR1dyMW0vZmgxejVzeG41UmVyQWZoaHkyYnRNMzE4ZkZqNXhXcEdqeG5IL1BsekFaVlliL1BtVFN4Y3RKUWx5ejdqdDk5K1k5ZlBPL01kbThWaVljSzRNWXdhUFpZdlY2K2xUT215MnJaYmpjRnV0eE1WRmNXNmI3NWwvVGNiSDVqeGNuWnZBeWl5ak4xdTE0eFFteGRmWXMrZVhZU0hIOFp1dC9Qenp6djU0OVJKV3JSVTYwZXhzYkVJQW9nNkhZbUpDYXhlOWFYamMxeXJIc1ZMbE9EUXdZUFliRGFpbzFSSlFxUEp4QmVmcjJUdDJ0WFliRFlTRXVMWnUvY1hhdFNva1JrS2Y3K0piemR1WU9ic3VWcjRkTS9EN3dLZTAyS3hjUGpRUVNaUG1rRHZkOS9IeSt2K0U0UkdSMGRyQnNwb05PTHI2MHRDZ3F2SzJjV0xGd2dPYnNwYm5Ub3o4cFBSR0kwbUxjZDJyM0R5NUVrK25UR0w1NEtiTU9MalQvanQxeU11MjVPU2twZzJkVEl2dnRRMlJ6ajg5OTlYV2JaMGNiTXNJYWhXUkhCNGJLSWdDQzdMckZRYU5kbFJJM0ROdGVuVlNxaXNlV3V5eW1FcEFFSjY1THpXUU1tNzhhV25oMDNGN0dIR2FETFNwMjkvU3BjcGsrLytOV3ZXWXZteUpXemI5aU02blI2TEpZUGs1R1FTNHVQeDl2YWhhclhxQUx6VXRoMU5telVENFBEaFExejcreXJ2OW41SGU3SjVlL3RrNWgwYzdKNVZxMVhURXVIaDRZZDQvdm1XbU0ycWEvemlpeThSSG42WXBzMytsK2ZZcmw2OXdtT1BGZEdNYzVWcTFkajN5NTRDalFHZ2EwaTNlNWJuS0FpeU4raE9tVHlSS1pNbjhueUxsbno4eVdncVZxekVxREhqV0RCL0xwRVJFWlFwVzVhcFlaOXFNbTJ0WDJqRHFWTW42ZEc5S3pxZG5uWXZ0NmRpeFVyRXhidmVPQU1IZmtqWXRLbXNXTDZVTW1YS3NIVDVTb3hHSTFPbWhqRjN6aXkrV3JzR2c4RkFjSk9taERqQ2ZVbVNtRFpWRFFQZmZOMjF3K2p6TDFkVHJGanh1ejRmQlQxbnZ6N3ZJd2dxYyt5Z0R3ZmZ0VDQyUlFGdno0S1h3aTlmdm95dnJ5L05temNINFBqeDQxaXQxaHozdzYyQXVRQUFJQUJKUkVGVVQ4MmFLazIzWHE5blVEYW0zRHZGZDk5OWwzY3VQY3M1YXRXcVRhMWF0YlcvRnk5YXdPNWR1L2hmOCtkekZMSDY5M3VmbE9RVVFycS9YV0wwMlBGUE5ubXUwYS9aOG13MlFiWGt6bkJVVVlzSU1vS2dlbXlTbzFiZ3pMWHBKYWZ5bEhQNWxKcGJBeENNUmwzcnUzWHhEUHB3c0VZYlhCQ3NYYk1LdTgzT2xLblRFUVJCYXg5d2hqaE9HQXdHL1B6VUo2ek5haU80U1ZOTmJpeS94Ry9XRUNtcmR5NElnbGFLemkrL2tsZXphRUhHSUdaZjUzT1AwTEpWYTFxMnl2a1RWcXhZaVYvMkhjejMyRWFOR3VkNTQ1cE1Ka1orUE1ybHZYZDY1ZVMvcTkvZ2FiNWV2eUhIK3hVcVZtVG03TG01ZnJaT3AyUFAzZ1AzMWRBWDVKeTNtcTkvQWtFQXZjNU9hbXBLZ1NxVmlxSnc3Tml4ZjN6ZVZXdSt1bTl6M0t2M2UvVHFuYnVtK3V3NTg3T21LdW9CeDdPRm83cHM0YWlneUxJaVNYWkVRVVNTQk1maWdreXZUWlNkWWFpakdxcVN1V2xoYUdzZUVLS2pZL0QyOFVZUUJJNGZQMFpTVWhLS29sQzZUQm1TazVNNWYvNGNBRC85dUZVVGNxMVh2ejQvNzl6SjlldXFXT3pPblRzNGVmTDNmTTlUdDI1OXRtL2JSbnA2T2phYmpSKzJiS2Erb3pTZEY4cVdEU0k2T2xvcnVVZmN5SlQzdTVNeC9KTW52VGxMYnMrTjdFbHZ6eHc5Z1E5NnpuSWJFMEFSM3dSU2svTVd6ZmIwTEZqSVc5RDk3dVpuM2Mxem1qdzhtbVR6MXB3OWJhTGo1U0RsVUFSSmtoQUV1eUE3bzg0c1hwdGVDME1WQlNWTEdKb1dNYmZwM1FwRDgwSitnaFN2dmZZNlk4ZU00b2N0VzZoY3BRb1ZLbFlrTVNHQndNQkF4b3diejZkaDA3QllMQVErRnNpUW9XcGlza3FWcXZUclA0Q2hnei9FWnJkUkxxZ2NnNGNPeTNjTVQ5V3RTOHRXclhtM2wxb3dlUGE1SmpSdDJreExoaTVkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR1A3SmsxNFU1UUkvNlI4bHBLWWtJNHB5anA1QWRjNmtCekpucVNuSjZFUXAxejdGWXY1eDNJajFKeXBTd2N2SEw4Zll5cFd2Y010RjZaNmVYcFFyWCtHdWpmZEJuQk1vc1gzSHJzclBOMjk2Z2l3MFJrNmpwaG8yQkZtV0hlNGJTTEtnZFhZNEs2UkNrVUF6RnF0ZHNGcGw3SklpeUtwWWk4NFdzMkNTS0FvZjNPNm9IaVh1OW51QmkrZi9KTGhXd1pzK0wwZFZKamE1a0h0dGJqYmNqTHhCUUtFa2doN0xPWmVYb3lzVG0zVC81eXkvTVRtOXlhajRRa1RHQjJDVGpLUStvc1F0NmVucFMxdTNicjBLVlE4aEdWWHdKZDBoK0dJVEJDUlJGR1NEWGxDTVJoR1RVYStZUFF5WXpRWTh6U2E4dkV6b25XR29rb1hKUTFFVVVSU0Y1dmM2Q2VwR1RuaDdLcmZGMTFVbThEeFI4ZFc1R1hrRGJ4ODNOWGhxU2pJcEtjblliUm1VQ1RpWGV5b2g4Q3hSY1UvZXR6bHpqa215cDFNMjhHeStIbmhSL3lTSytpYzk0cUk4U2tQZ3F5emhxTTdCOXFGV1J4RWNDK05CbGhWRlZwdDJGVWxTMUFxcFhVS2ZyU2tYQllTNHl6T3FjUWRpTGJlYkJIVWo1dzJnMTlsdjY0SVdSWm02bGM1d09ib3ljWWxXRXVMaXlNaDROQi8xWnJNbm9pZ1RVTmhHMmNmT0lRcEtudGRwdlVvbnVSSlRtWmdFeXoyZE03UFpFNTBvRWVCcm9XemcyUUwvdG84eU9hc2dDTlczcnU5YnZIWEh1WDlweGsxQmgrRElzWUVnS0tyTmttWFViZzVIWmRUNTBxdlUzOW5XaG5wN05MblRRUlh4VFNBaUljRnQyTzRBS1NtSmxQUzdmY29pVWJCVHZzZ2ZsQy9pbHQrN0hjTVI5TmhaZ2g1N09PVDMzSERGVTdXQ3FnRi9PdzJiQWpvaGF3RkJ6YlVwaXFOTlRYS3NSbkQwdHlFNnZEVUJiVzBvZ2s0VW43dlRBUlh6ajBPUkVvaTZlWTIwQjdDTzd0K0l0TlFVb2lLdWdwUklVYjkveHNYMmFEL3BINzQ1Y3h1MU80T3ZyMmN0MUtLQm5zd0NnaXIwb3RHcEtZS3NJRGk4TmtHV2xTd2VtNU9leU9HeERlclhUQ2NJQlArVEgvS3BTcGU0R2UvRHpmZ0FraE9OcEtTNmY2aTg0TzBGQnAyVlVvRnhGUEZOY2srSUcyNEFCcjJ1WWMzcXhRd24vb2pVWndsSFJRUkVCVVVBUVZBVXh4SXJ4Ykc0d0VHN0pza3lncGRaSjlqc2lpQ3AxVkF4K2Zyc3BwNW00NC91cVhYRERUY2VKSTZldU5MbnFlQ0pwOGhTSFJVRTBnR3JJQWcyUVVEV2FkVlJIUjRtdmVMaFljQnNOcUszUzFrV3ZpdUtjRE1xc2VIOTZveDN3dzAzM01qVGF6UG9LZ04vWmcxRkZRVlJFRkE3T0JDUVpRVzdCSUpOUmhEc2FzZ29nT0RoNFNIYTdYWkJVUlJSVVJTZDNXN2ZKQWpDOCs1cGRjTU5OeDRrN0hiN2JvUEJNREdMeDVZaUNFSXFZQkVFd1NvSWdpUUlncXpYNnhXajBhZzQ2TzRWczltTTZGd1hxU2lLOE9xcnIrb0VRV2pvbmxJMzNIRGpRVU92MTljdFc3WnMxc0tCVmtCd09HS3VWRVpaWG9MUmFCUWxTUklWUmRFbEppWTI5UGIyM3VXZVVqZmN1UDlRRklYSXlFaHUzb3hDa2lSU1VwSWYrVGs1ZGVwVTc3NTkrNTUxZW15T1Y3b2dDRmJBN3ZUYWREcWRvdGZyTVJnTWlzbGtRcCtWeWNMRHc2T3UrL0p5dzQwSFk5U09IVHVHZ3FDdGhuRHI4WUt2LzJQbGdRdGthZnR3a0U5cWpUU0NJQ0FJQXFLb1E2L1hvOWNiTWhlV0FvSk9wM3ZxMy9qbFEwTkRhZFdxVllIMlRVbEpRUkFFZHUvZWZjZm5xMVdyRnBNblQ3N1R2QUdob2FFVUtWS0V3b1VMMDd0M2IwMEV4WTFIRjVHUmtTZ0lGQzFXd3QzY25nVStQajZWczRXaG9wTjRNcXZ0VWhtSlpMV2ZUWkhWSEp0em5hZ2dDSFhjVTNsdk1XellNRFp0MnNTNmRldll0R2tUTzNmdXBGKy9mdTZKZWNRUkZSWHQxdVBOQlFhRDRRbHk1dGl5R1RVRmxXNU5RVkZrRkZuV2R1RDgrZk5GZ0VydXFieDNTRTFOWmQ2OGVZU0ZoUkVjSEV4d2NEQ0xGeTltNWNxVnhNVEV1Q2ZvRVlZa1NYZmtxWjA1L1FjRFEvdmY4L0dkT1hPYXNHbFQyTzVRS25OaTQ4WnZDT255RmlGZE83a0k4a1JIUnpQd2d3R0VkTzFFM3o3dmNmWHFGVzNiaVJQSDZmbDJON3FGZEdiMEp5UHoxV1lWQktIQ3lJOUhlZWRqM0FBRUhBc05uTTI2enFxb1VLSkVpU2YvS3hmSmQ5OTlSLzM2OVRHYnpYaDVlZEc4ZVhQT25YTmxldmpsbDErb1ZxMGFIaDRlTkd2V2pMLysra3ZiSnNzeVk4ZU9wWFRwMG5oN2U5T29VU1AyNzkrZjY3bWlvNk41NVpWWDhQUHp3OXZibXhkZWVJRUxGeTVvMndNREEvbndRNVZOOTlpeFk2U25weE1jbkxtdzQ5bG5ud1hnNE1HRDdydjdFVVp5OHAydE9xbGNwU3FqeG95OXAyT2JQMjh1eTVZdTRkTEZpeTVHNk9yVksyeFl2NTRGaTVheWJQbEtUcHc0eHBFajRZNWo1dENzMmY5WStma3F1blYvbXltVEptcXBtRWtUeGpIeWsxRjh0dkpMU3BVdW8ybG01SVZubndzdTRUQmtMb1NUanJCVVc0R2dLbGlwWHB2bTBoa01oditFWWZ2OTk5OTU1WlZYNk55NU0yZk9uR0hIamgzY3ZIbFRNeTVPekpvMWkwbVRKbkg4K0hHOHZiMXAxcXlacHJ3emNlSkVsaXhad3BJbFN6aDU4aVFkT25TZ2VmUG1uTTFGSERjME5CU0x4VUo0ZURqSGpoMURsbVZDUWpMMUJBWU5HcVJ4MDErL2ZoMmowVWhBUUVCV1Y1dUFnQUN1WGJ2bXZydmR5SUhZMkZnR0RRd2xwTXRiZEF2cHpPRkQ2Z1BRcWNuYm9YMWJRdnU3cGpLR0RmbEk5YUs2dkVXN2wxN2d6VGRlMWJaZHZIaVIwUDU5NmQ2dEM0TStHTURObTVFdXg2NzcraXVYL1FGNnZ0T0xzT2t6S1AvNDQ2NzMyb2tUUEZXM0xwNmVLc21xbjY4Zko0NGYxN3l5NTU1VEgrQ0ZDeGZtenovUFlMVmFpWXlJd01Oc0ppaW9IQUQrL3Y2Y09KNC96WG54WXNYS1pERnFqanhiMW5CVXlReEoxVHdiZWxCNzJIUTZYZlgvd29XZ0tBcWZmdm9wL2Z1cjdubFFVQkFoSVNFc1dMREFaYjlQUHZtRWR1M2FBYkJpeFFwS2xTckY1czJiZWVtbGw1ZzhlVExMbHkvWENoSURCdzVrMTY1ZHpKdzVNOGZuWEw1OG1kS2xTMU95WkVrOFBUMVp2bnk1aTVFYU5peVRQVGN0TFEwUEQ0OGNZemFaVERuazA5eHdBK0NydGF1cFVhTUdJZDNlNXRLbFM4eWZONGNHVHpmVU5IblBuei9IeFBIalhJNlpOR1Vhb0VwWTluNm5oNmEvWWJWYW1UaCtMT01uVHFaNDhlTDg5T05XRnN5ZngrZ3htY2ZYckZVcmg1NUhYc0pEaVltSmVIaDRFQjBkemFRSjQ1QmtDUjlIbmpBeE1SR1Rod2ZmYi9xT0hUdTJZVFFhU1VsSklTa3BDWlBKaE5WcVplNmNXZHk0Y1NPSHdsWjJlSGw3bDh0aTFCd0dUaEVkRkFPT1hqYWN0UUpGVVJSQjcyeHlFd1RoUDJIWWF0YXNTVUJBQU5PblQrZk1tVE9jUFh1V1gzLzlsYUpGWFl2bmpSdG5DcFVFQkFSUXZueDUvdmpqRDU1ODhrbFNVMVBwMXEwYmI3K2RLWlJzdFZwZGpuRml5SkFodlBubW13UUdCdEswYVZOZWZQRkZ1bmJ0bXV2WXpHWnpEalVoVUNYZEhvU01teHNQUCtyVmI4Q2NXVE1BZ2ZyMUd4QTJmVWFCanBObG1UR2pSOUhteGJiVXI5OEFVS1VocjEzN20rRkRCNnY3S0RKZTJmUUtLbFdxVEtWS0JkZEtQWDM2RDQ2TkdFcm9CNE00KytlZlhNeVNocGswWVJ3QmdZR0VUWi9KcXgxZWRqR0lBejhZd0lzdnZrU0hqcTh5WXRqUWZNOWhNQmdxWk11dDVjeXhvYUNBVmtEUVoyNmc2bi9oUWpoNDhDRE5taldqU1pNbU5HM2FsTmRlZTQzdzhIQ1dMbDJhNzFOSXI5ZGpOQm8xcmMwMWE5WlF2YnFycmMvTjIycmJ0aTNYcjEvbisrKy81OGNmZjJUNDhPSE1ueitmdzRjUGF5NjZFNlZLbFNJakk0T0VoQVI4ZlgwQnNObHN4TWJHVXJKa1NmZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEw1a1BXWnJOUnJGZ3hWcXo4NHE2TXJYRGh3bVJrWkJBMmZTYUZDaFhpeEluakZIWmMxNFVMRithWlJvMDFrWE5WaHRLYlFvVUtrWlNZeUlTSlUzajg4Y2M1ZS9aUDdWN0lDNElnVk02U1c4dWFaOHRlUUZDY0JRUVJFS0tpb2lvQnB2L0NoYkJnd1FMcTE2L1AxcTFiR1R4NE1DMWF0T0RHalJzNUpQV3k1c3VTazVPNWVQRWkxYXRYcDN6NThwaE1KaTVjdUVDRkNoVzAxNkpGaTlpeVpVdXVIdHY1OCtmcDBxVUxxMWF0WXYvKy9adzZkWXJqamx4RFZ0U3VYUnV6MmN6ZXZabXE1L3YyN1VNVVJaNSsrbW4zWGV4R0RreWFPSjd3SStFMGIvNDh3NGFQNU5DaGd5N1NrYmxoMzc2OTdObTltK0VqUG5hUnFxeFFvUUpKU1VuOHNtZTNsbS83ZnBPclR1ajU4K2ZZdVBHYkFvM3R5Um8xc0ZxdG1Fd21KRW5pNElIOTFLeWxhcG5XcWxWYkcrZlIzMzRqS0tnY1JxT1JZc1dMVTlqWEY1UERzZGkzZDY5MlRENHdMVjY2UERBWGc2YjFzQUZaUERaSGpzM2IyN3ZDZitWQzhQZjNaK2ZPblp3OGVaS1NKVXV5YnQwNmxpMWJocCtmbjh0KzQ4ZVBwM0hqeHZqNitoSWFHa3JGaWhWcDNibzFvaWd5Y09CQXhvNGRTN0ZpeFdqWXNDSHIxNjlueG93WmJOKytQY2Y1enA0OVM1OCtmWmczYng0QkFRR3NXTEVDYjI5dnFsUlJCVzBtVFpwRTdkcTFhZFdxRlY1ZVh2VG8wWU8rZmZ2aTQrT0QwV2lrZCsvZWRPL2UvYjRwbnJ2eDcwTG56bDBKQzV2QzJ0V3JrR1daZ1lNK1FoVEZmQlhlNXM2ZVNVWkdCbjNlNjZWOXp0ejVpL0R4OFdIU2xHbk0vSFE2aXhZdXdOUFRrNEhaaEpTUEhUM0toZzNyYWQrK3d5M0hWclpzRU8zYmQrRGRYajFSVUhqMjJXQk5PL2o5UHYyWVBHa0M2NzcrQ3JQWnpKQmh3N1hJYVBpSWp4azNialEycTQzU3BVc3plT2p3VzU2clFvV0tqd0hYYy9mWUhEb2hHcmVrZ2lDS29vZkZZaG1nMStzbi8xdC8vTkRRVVA3ODgwOSsvUEZIWW1OajZkbXpKenQzN3NSZ01QRFVVMC94eGh0djBMTm5UNjVldllxdnJ5OCtQajVNblRxVmxTdFg4dmZmZjlPb1VTTVdMbHhJR1ljNnZjMW1ZOHlZTVh6MjJXZkV4TVJRdVhKbFB2bmtFenAwNk9CNEd0WGlqVGZlWU9qUW9VUkhSek5nd0FDMmI5OU9jbkl5ZGVyVVlkcTBhVFJxMUFoUTJ6MjZkZXRHV0ZpWWxrOExEUTFselpvMWlLSkl4NDRkbVQxN2RxNWhyaHVQRHZiczJlTldkOHNIY2JHeFlUVnJWTitPdW1iVStVb1RCQ0VEVlNsZUVrVlJYVE5xTUNpQ0lBaG11OTArVXhURlh1N3BjOE1OdDJGN0dKR1JucjY2WW9WeVgyUXpiS2xaREp0ZEVFUlpweE1WdmNHZzZCM0p1YUIvNnhlZU4yOGVmZnYyL1UvOGVKR1JrVG1xdHdXQkxNdGN2bktWdUxnNEpFa2lJLzNSWEh2cVlUYWowK253OXdzZ0tLZ00rUkdtS29yaW1MTlk3UFo3TjJjZVpqTjZ2WjRBL3dDQ2dzcmVjdi9yN243R1hDRkpVbkVjVGJsWlg0cWlwaEhWN2c0WldRYkpMaUVJZ3VBcHkvSlJvTEo3K3Y1OXNGaXNuRGh4QXAxZTc5WVZCVkpUVTBoSlRrS1M3TlNxV1F1ajBaQ3JVZnYxMTk4UWRicjdveXZxR0pNc1M5U3JXOWZ0c2QwQkZFVTVYNlpVOFEvSUpKMTBFazg2cWNMdGpuQlUwZXYxaXJPNlVOWTlkZjlPUkVSR29OUHIzYXdRRG5oNWVWTzBXQWwwT2owM0ltN2t1czlmbDY4ZzZuVDNiYzZjWXhKRkhWZXVYSFZmdEhjQVFSQktaL1BZc3YvZnBWbFhQSC8rZkZIQW5ibitseUkySnRiTkNwRUx2SDBLRVJNVG0rdTJ1TGk0QnpKbjNqNkZpSWwxa3gzY2FWVC95ZWd4M3VUWjh1SFViUUZRMEFjRUJCUjN6OW0vMVQyL2MxYUlSOEZ6UzB5SXkzWGJnNW96THk5dkV1UGo3dWpZcE1SRUx2OTFrZFI4dEhxOXZMd0pLdmM0aFFvWGZtRHpmaS9IV2JWS3RVSkFUQzdlbXZPT3dObjZvVGVaVEVYdi9nM25wamd1S0h4OENxSFRpUlFwVW9UaXhXL3ZHU01Ja0o3dUpxbk1DK2w1RUhnK3lPTEtuZjVlZjEyNlFGcGEvZ0s5cWFrcFhQN3JJalZxUFRoYXhYczV6c2VLRkNtVTNWdHpGQThFMTNCVVVmUTZuZTZ1R2pZM3hmSHRJelUxaFJzUmtkeUlpT0NwT25mM290eSs3U2RXTEY5R1ZOUk5TcFFvd2VkZnJ1SDgrWFAwNko3SlFESjArRWhlZUtHTis0ZDRpSEVyWTVIMVd2cXZqck5Rb1VLRnNoZ3daM091NEZnTW56V1NFZlNpS0Q1Mk43OVlWb3BqTndvZW9uaDVlUk4xTTRMSXlFaUtGU3QyVno3M3hvMGJUSms4a1RIakpsQ3ZYbjJTa2xUT3J3b1ZLcko5NTI0QTN1blI3WjU5citYTGx0THU1Zll1TkUzT2NjMmFNWjJUSjMvSGFEVFMvUG1XdlBkK0g0MVY0dHExYTh5Wk5ZT1RwMDVpTXBsbzBhSWx2WHEvbDROMTRtN2lWdWQ4cm5GRERBWURnaUFTRkJSRTl4NDlhZFNvc2Z2aXZZOHdtejBLdVJxMUhDL0gwa2tGVVJURmdMdDVjamZGOFQ4d2NONCszTHg1ODY1OTN0ay96eEFZR0VpalJvMHhHbzBFQmdZNlFsZ0Jod2FqeTFyQ3U0M1BWaXdqTGk1bkFuLzBxSkdVTEZXS2pkOXRadkdTNVJ3NmVJQk5tNzRGMUo2OG9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuSWlEQi9ZVDByVVRyNy82Q2pNK0RkUFdkTnBzTnNLbVRTR2t5MXQwRCtuQ3ZuMlphNXJ6WThTOWQ1Rk1LcHUrKzVhaGcxWGFKWVBCbU4xakUzRVVEckpHakZhckZWRVFoTHU2U05HZHpQNW5ucHRka3Y3eDV4dy9mb3lYMjdaaDJ0VEpSRVpHOG5MYk5yemN0ZzByUDF0UjRNODRkUEFBbmQ5NmcrYk5ndW5SUFlRL1RwMXkyYjVuOXk1Q3VuYmloVmJQMDcxYkZ3NGRQS0J0NjlmM2ZWNXVxNGEySHd6b3o4dHQyOUQzL1hjMUl4SWMzSlN1SWQwd21Vd1VLVnFVdXZYcWNjNUJTaEFYRjRlZnZ6K2RPbmZHYURSU3FuUnBHalYrbGovL1BIUFA1djEyem1rMm0yblVxREhEaG85a3llS0YrZEphM3l1VUsxY09uVTdIdG0zYjJMdDNMelZyMXNSZ01PUnFzTFAvUHlNam5hbFRKakZ4MGxSV3IxMUhURXdNMjM3NkVZQ3RQMndoSXlPRGxWK3NadnFNV2N5ZSthbm01ZWZGaUZzUVBQSEVFOXBETmI4eFp2MDdKaWFHZDNwMDU4S0Y4OXJ2b05mckMrWGhxV2t2V1piUjYvV0lnTi9kblBRN3BUaDJRMFZLOGo4dnROU3FWWnR2TjIxaFFPaEFTcFlzeGJlYnR2RHRwaTJFZE90ZW9PTXZYcmpBeHlPSDgxNmZ2bXpadW8xWFgzdWRnUi8wSjhyaFRWNjVjcG54NDhZd1pNaHdOdi93RXkrOTFJNFJJNFpwYWx0ejVzN24yMDBxRThxTVdiUDVkdE1XNXM1ZkNJQW9pblRxM0FWZlgvV3krK3V2U3h6WXY1OEdEVlIyazhEQVFPYk1uWStIaDFtNzBJOGZPMGFOR2pYdjJaemZ5VG5yMVcrQTFXYlREUEw5UkdCZ0lEZHUzTkE4RkZtV2M1QThIRGtTem9oaFE3RFpiTVRGeGZGT2orN0V4Y1VSRVJHQnI2OGZKVXVXUktmVDBhcFZhdzRmUGdTb3JMZlBQdnVjNDNjU01CaU1uRHQzVnR1V0d5TnVBWE5qZVpKVkxsdTZXS01HUDNueWR3YjBWMWNSK2ZyNjhzV3FOWVIweStSRTFPbDB1WVdpdUlhaHFrY3JBdmM4Ymh3ME1KVFhPcllucE10YmRPMzhKbHMyZjYvbE5WN3IrQXJ0MjcxSTk1QXU5M1FNM1VPNmNQSGl4ZHM2WnR0UFAvSmF4MWQ0b1hVTFpzL0ttK0J2eDQ3dGpQNWs1SC9HdUc3ZXZJbmdKazFwMUtneEpwT0pWcTFmb0VyVnFteHpDSGtFQkFTeWZNWG5WS3RlSFZFVWVhbHRPMnhXSzMvL1hmRG0wejlPbmFKRjg2YUVkT2xFbGFwVmVTNjRTYTc3TFZ3d0Q3T25KeSswZWZHK2ZmK0NuRk1RQlB6OS9FbDVBTWw2bzlHSUpFa0VCQVRRdUhGalpGbkdaSEpsSGF0YnR4NytBUUdNR2YwSmd3WU9vUDBySGZEMzk2ZFlzZUxFeGNWeTZkSWw3SFk3NGVIaHBLU28zOEhKaUh2cTFFbUdEUDRRbzhsSVltS2l0czNKaUR0M3ppeU5FZmVmNHMyM09yTnIxOC9NbVQyVGNXTkcwN2RmZjZkM2xpT25LZ2lDZHo2NU5SY2pweGNFNGI0a3hENGFNb3g2OWVxVG1KaEFyNTV2VTdXYXluMldGNzN4dzRBV0xWdlJvbVVydnY1cUxaR1JFWStNMXhnWkdVbUZDaFZkM2l0VEpraWJBMjl2YjNaczM4YjQ4V05JU1U3Sk02eklEOVdmZUlKdE8zWVJFUkhCSngrUFlQbXlwZlI4eDVXSDRmT1ZuM0g0OENIbXpKbVBYcSsvTDkrOW9PZFVGSVc0K0RpOEgxRGF4Um1PN3QrL24xcTU4SmtKZ2tEdjN1L3h4dXNkS1ZPbXJHYWt6V1l6dzRhUFpQS2s4WTdmdFN5ZVpyTjIzUGZmYnlJOVBaMUprNmN4ZSthbkxwK1pGeU51WG1qVnFoWGUzdXI4T1BPQXAwK2Y1dlRwMDlvKzN0N2V2UHZ1KzN3UTJvODMzK3BFNWNwNUx5c1RSZEU3bnpCVU0ybzJtdzA5Y0Y4NXFRc1g5dVdKSjJ0dzhjSjV5cGN2bitkK2lZa0pUSjQ0Z2Fpb0tPeDJHNTA2ZDlYWU9NK2NPYzNNR2ROSlQwdWpTTkZpREIwMlFvdmhkKy82bWRXcnY4U1NrVUgxSjU3a2c0RWZhdm1IWFQvdlpPem9qMGxQejZCdnYvNmFsL0ROK25WcThscFJhTnJzZjNUcjN1T1czK1BJa1hBK25UNE5VUkFwV2Fva251Wk10dHo4eHRDOFdURDlCM3pBMGlXTFVCVDRmc3ZXaDg2d0ZTMWFsTWdJVjBOKy9mbzFhdGRXVzFIMi9yS0hWVjkrd1l5WnN5bFZ1alNnVmcxenU3bXlHenRMUmdaYnQvNUE2OVl2WVBMd29Iang0alJ2L3J4TG9ocGcvYnF2MmI3dEoyYk5tWGZmR2s1djU1eEhqb1JqTkJpb1ZQbitMN0cyV3EzWTdYYU9IajNxRE5GeWFHYWtwS1R3MFVjRDZkd2xoSE5uLzJUSzVJa01IVFlDUVJCNHV1RXpQTjN3R1VmdWJLNUdTMSs0Y0dITVpqTmp4MDFBRkVVc0ZndUZIZk9RRnlOdWZ2anhSelYzOTh3enozRDU4bVV0ZkhaSmUxeTh5T1JKRXhnN2JnSXJsaStsVE5rZzJ1VHRLWHRsTTJKWmpKcVFOV1JGQkR6djU0OFNIUlhGcVpPL1U2Vksva3prNTg2ZDQzL05uMmZaaXBYTW1idUFXVE5uWUxWYXNWcXRqUHA0QktHaEEvbjh5elU4ODB3amxpeGFvT1ZyMXE5Zng1dzU4MW41eFdvQWZ0aXlXZnRNSHg4ZlZuNnhtdEZqeGpGLy9seEFKZGJidkhrVEN4Y3RaY215ei9qdHQ5L1k5ZlBPZk1kbXNWaVlNRzRNbzBhUDVjdlZheWxUT25PcDdhM0dZTGZiaVlxS1l0MDMzN0wrbTQwUHpIalo3WGFOQmwyUlpleDJ1MmFFMnJ6NEVudjI3Q0k4L0RCMnU1MmZmOTdKSDZkTzBxSmxTMEJWVGhJRUVIVTZFaE1UdEJ5SklydXlGQmN2VVlKREJ3OWlzOW1Jam9wU3d5aVRpUzgrWDhuYXRhdXgyV3drSk1TemQrOHYxS2hSSXpNVS9uNFQzMjdjd016WmMrOGJBV2RCejJteFdEaDg2Q0NUSjAyZzk3dnZQeEN0aXVqb2FLMmFiVFFhOGZYMXpTR0ljdkhpQllLRG0vSldwODZNL0dRMFJxT0p1RGpYVlErSER4MWt4NDV0V2c5anJWcTFzZHZ0aUtKSVFrSThGeTllcEZMRlN0cTIzQmh4L3lsKysvVUlRNGVOb0VuVFpudzZjdzZuL3ppVmcrMDZ5NFBTbk0yb1pYMkd1cFQzOVlENWZ2d1kwOE9tWXZZd1l6UVo2ZE8zUDZVZHBJNTVvV2JOV2l4ZnRvUnQyMzVFcDlOanNXU1FuSnhNUW53ODN0NCtWSzJtNmhHODFMWWRUWnMxVTMrb3c0ZTQ5dmRWM3UzOVRwYW5pazltM3NIQjdsbTFXalV0RVI0ZWZvam5uMitKMmVHT3YvamlTNFNISDZacHMvL2xPYmFyVjYvdzJHTkZOT05jcFZvMTl2MnlwMEJqQU9nYTB1MnVYQlIzaXV3TnVsTW1UMlRLNUlrODM2SWxIMzh5bW9vVkt6RnF6RGdXeko5TFpFUUVaY3FXWldyWXB4UXRxdmJYdFg2aERhZE9uYVJIOTY3b2RIcmF2ZHllaWhVckVaZHR1ZERBZ1I4U05tMnEraVF1VTRhbHkxZGlOQnFaTWpXTXVYTm04ZFhhTlJnTUJvS2JOTldTeEpJa01XM3FaUFI2UFcrKzN0RTFUUHh5TmNXSzNmMFZnQVU5Wjc4Kzd5TUlLblBzb0E4SDM5VStOaDhmbndMdmUvbnlaWHg5ZlRWWngrUEhqK2RJNU5lc1dZdWFOV3RwK2FwQldaaHk0K1BqNk5XekI2VkxsMmJpcENrOFZxU0k5cnVlTzNkT3kzZjNHeENxZWE1NU1lSVdCQWNPSE1oejIydXZ2Nkg5UHlBZ2dJOEc1eXZzNHBGUEdPcXdjQ0tTSktFSDdzc2ROdWpEd1JwdGNFR3dkczBxN0RZN1U2Wk9SeEFFclgzQWFaNmRNQmdNK1BtcFQxaWIxVVp3azZhYTNGaCtpZCtzSVZMV1ZpNUJFUEo4WW1UTnIrVFZMRnFRTWVUSEUzWTMwYkpWYTFxMmFwM2ovWW9WSy9ITHZ2d0ZtaHMxYXB6bmpXc3ltUmo1OFNpWDk5N3AxVHZIZnZVYlBNM1g2emZrZUw5Q3hZck1uRDAzMTgvVzZYVHMyWHZndmhyNmdwenpWdk4xTjhhUW1wcFNvRllwNStxZU80V2Zuei9yY29rV3NodkFyQWdNREN5d1F0YmRSRUJBZ0ZaaHo4VldDZG50Z1NDQVRxZTJlenc0MXlGZmR6c0dieDl2QkVIZytQRmpKQ1Vsb1NnS3BjdVVJVGs1bWZQblZXWDNuMzdjU3RpMEtRRFVxMStmbjNmdTVQcjE2d0RzM0xtRGt5ZC96L2M4ZGV2V1ovdTJiYVNucDJPejJmaGh5MmJxTjhoZldLVnMyU0NpbzZPMW5FRkVsdHpCbll6aG44QnM5c1NOMjV1YkJ6bG5lWjI3U0pFaXBPV3pwdHJUczJBaGIwSDN1MWU0eCtNMDV1S3BDVW8ycjgwWml1b2UxQ1RrSjBqeDJtdXZNM2JNS0g3WXNvWEtWYXBRb1dKRkVoTVNDQXdNWk15NDhYd2FOZzJMeFVMZ1k0RU1HVHBDRFFtclZLVmYvd0VNSGZ3aE5ydU5ja0hsR0R4MFdMNWplS3B1WFZxMmFzMjd2ZFNDd2JQUE5hRnBVelcwM2ZiVGp5eGRzcGlVMUJSa1NXTGYzcjEwNlJyQ1MyM2JNWFQ0Q0VZTUc0S2Z2ejk2dlU0ckh0ekpHTzdYay81UlFtcEtjcDVldGZpQTVpdzFKUmxkSHBYVzRzV0xFeEVSUWZUTkNEeTlmWEtNclZ6NUNyZGNZTzdwNlVXNThnOVdsK2tlajFPWG04ZVdXOTVOVUc0VmQ5MG1qaDQ5U3BGaWJvM01PMFZVNUhYcTNNWkMrTXVYcnhBYkYrZGVtNXNOTnlOdkVCZ1lRTmxjY3JtWHIxd2hOdmIrejluTnlCc0VCQVFRVkRidi9ISlVWQlNSa1pIWTdYYVNrOTJzT05uUnBFbVQ5a0FhS29OdUVwbWlMaFkwN1FOQnZ1dk5RVzRQNHA4OTBXKzNYNnRzMlRKRVIwY2pudHFQQUFBZ0FFbEVRVlJ4TS9LR214cmNNWWNwS2NsSWRudXVSZzBncUd4Wm9xTHUzNXc1eHlSTFVyNUd6Um1TRm5Fazg5M0lGZG5EVHNHWll4TUVRVjExSUlxQ29DaUtoTHBFNGE0Z0lpS0N5TWliUEZiVXpWOTUrOTdhRFVxVUtIN2I3QjZLb3ZEWDVTdkV4Y1VpMldVeU1oNU5qamF6MlJOUnB5TXdJSkN5WlV2ZmNvSC9sU3RYaVk2SlFiSkw5MnpPekdaUGRIcjlMVDAxTndvRVdSQ0Vqa0JxRm84dFJSQ0VWTUFpQ0lKTkVBUzdLSXFLb0NpS0ZURGM3WEJVRUhWNGVYbmo2ZmJjYm9rMGg5Z0hLTGNWaHJyaHhpTUdteUFJcjJjeGJNbEFzaUFJYVVCR1ZzT21CKzY2WWF0VHB3NDNiOTdrWmxRVXlVbUpiZ2JkZk9EdDQ0TkJyNmRVcVpMdUVNUU5OL0tIdGFBN09nM2JYYThSRnkxYTlJNDBNdDF3d3cwM0NtallsR3ovYWhDQmRQZDh1ZUdHRy84Q1pCVFlZN3R5NVlwYkRjUU5OOXg0NktFb1Nub3UzcG1pT0JSZG5KMXJpcUlvK3JKbHk2YTZwOHdOTjl4NDJDSExjbXFXMEZNemNObmJQUVJCUUZRVXhVMTU2NFliYnZ3YlBMYnN6SlpLdHY5cmYrdFJlMEhjY01PTkIzL2p1dlY0ODRIZGJrL0pZc0NVTEtHb2tqVVVsV1VadmFJb0NmZFNxY2dOTjl3b21GRno2L0htRDR2RmtweWJ4K1pxdnpKRDBiaEhiWUpLbFNwRnRXclZjaFdqOFBiMjVyUFBQcnVYVHgxQ1EwTXBVcVFJaFFzWHBuZnYzcG9JaWh1UExyTHE4YnFYSStaNTd5Umw4OWdVY21uMUFOV3d4VDZLazNUbXpCa21UWnAwMzg4N2JOZ3dObTNheExwMTY5aTBhUk03ZCs2a1g3OSs3cXYyRVlkYmovZldzRnF0U1ZrOHRWenlhNExLclNpQUtFbFN6S000U2VYS2xXUGl4SW1jT1hQbXZwMHpOVFdWZWZQbUVSWVdSbkJ3TU1IQndTeGV2SmlWSzFjU0V4UGp2bklmWWR5cEh1K1owMzh3TUxUL2ZYQUVUaE0yYlFyYkhVcGxUbXpjK0EwaFhkNGlwR3NubGk5YnFyMmZuOER5aVJQSDZmbDJON3FGZEdiMEp5TUxyTTJhbnA2V2pHdFRicmJxcU5OZkE5Rm1zOTE4RkMrazNyMTdVNzE2ZGQ1NTU1MThHWFBYcjEvUGswOCtpZGxzcG5yMTZpeGR1dFJsKzg4Ly8weWRPblV3bTgzVXExZVBzTEF3RjNIWXdNQkFQdnhRWmRNOWR1d1k2ZW5wQkFjSGE5dWZmZlpaQUE0ZVBPaSt1eDloM0trZWIrVXFWUmsxWnV3OUhkdjhlWE5adG5RSmx5NWVkREZDVjY5ZVljUDY5U3hZdEpSbHkxZHk0c1F4amh3SmR4eVR1OEN5M1c1bjBvUnhqUHhrRkordC9KSlNwY3RvbWhtM1FsSmlVbDZoYUk0VkNQcU1qSXlvVzZuTi9CZWgwK2xZc21RSkRSbzBZTkdpUmJ6NzdyczU5dG03ZHkrZE9uVmk5dXpadEdyVmlxTkhqOUs3ZDI5ME9oM2R1M2ZuNHNXTHRHblRocjU5KzdKbXpScCsrZVVYK3Zmdjd5THdNV2pRSUdyWHJnM0E5ZXZYTVJxTkJBUUVhTnNOQmdNQkFRRmN1M2JOZlhlN2tRT3hzYkZNbkRDT21PZ29CRkhrdmZmNjBPRHBoaTRrcmI2K2ZxeFkrVVZtdW1QSVI5eTRvVEk0SnlRazRPbmx4WnExNndCVkZXck9yQmtrSmlYaTcrZlA0S0hETkMwTGdIVmZmOFdHRGV1MS9RRjZ2dE1MbzlHb01WVTc4ZnVKRXp4VnR5NmVucDdZN1hiOGZQMDRjZnc0OWVyVjU4U0o0M3p3d1NEQVZXQTU2dVpOUE14bWdvTEtBZUR2NzgvUE8zY1VhQzV1UnQxTUxvQlJVd0QwRVJFUkVYbkp6Ly9YOGRSVFR4RWFHc3FRSVVObzI3YXRwbjNveElRSkUralJvd2U5ZTZ0OC9tWExsdVhTcFV0TW5UcVY3dDI3czNEaFFxcFVxY0swYWRQVXAyZmx5cHc4ZVpMVnExZTc1TlNjU0V0THc4UERJOGM0VENaVER2azBOOXdBK0dydGFtclVxRUZJdDdlNWRPa1M4K2ZOb2NIVERTbFZxbFNlbXJ5VHBxalhZMkppQXIzZjZhSHBiMWl0VmlhT0g4djRpWk1wWHJ3NFAvMjRsUVh6NXpGNlRPYnhOV3ZWeXNFOG5KZndrRk5nT1RvNm1ra1R4aUhKRWo2T1BHRldnZVVkTzdacEFzdEpTVW1ZVENhc1ZpdHo1OHppeG8wYk9SUzI4ZzY3VHp2YlBlUzhQRFZuTUNyV3JGa3ppdHRZZy9WZnc5aXhZd2tJQ0tCdjM3NDV0cDA2ZFlwbHk1Ymg3ZTJ0dlVhT0hNbUZDeGVRSkluang0OVR2NzZyUUUyalJvM3lQSmZaYk02MUVtdXhXQjZJakpzYkR6L3ExVy9BemgzYldmblpDaXdaR1FVV1ZKRmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjlNOXBBdXJWMytwcWJVNVVhbFNaVjdwMExIQTR6dDkrZzlHamhqS083M2ZwV2xUVjJXM1NSUEdjZm55WDRSTm4rbWlWSitZbU1qQUR3WlFyVnAxK3ZVZlVOQlRaVXdZUHpZdG4xQlVNM1NDb0Rib0Fsd0ZLajJLRjQ2bnB5Y0xGeTZrWmN1V2JOem9xdHhqdDlzWk5HZ1FiNy85ZG83alJGRkVyOWZuRUFUT0wxOVhxbFFwTWpJeVNFaEl3TmZYRjFCVnEyTmpZeWxaMGsybjdrWXVocTFlZmViT1cwajRrWEErWDdrQ285SEltSEVUYm5uY3NxV0w4ZkR3b0hPWHJ0cDdOcHVOWXNXS3VZU3Qvd1NGQ3hjbUl5T0RzT2t6S1ZTb0VDZE9IS2V3NDdyT1MyQzVVS0ZDSkNVbU1tSGlGQjUvL0hIT252MVR1eGZ5ZzZJb2YyY3pZSElXenkzbi9ha2VvMXg1bEMrZUZpMWEwTGx6Wi9yMjdhdUpDQU5VcTFhTmt5ZFBVcUZDQmUxMTRNQUJaczJhaFNBSVBQbmtreHc1Y3NUbHM3TC9uUlcxYTlmR2JEYXpkMittNnZtK2Zmc1FSWkdubjM3YWZSZTdrUU9USm80bi9FZzR6WnMvejdEaEl6bDA2R0NPaDJsMjdOdTNsejI3ZHpOOHhNY3V6YXNWS2xRZ0tTbUpYL2JzMXZKdDMyLzZ6dVhZOCtmUHNYSGpOd1VhMjVNMWFtQzFXakdaVEVpU3hNRUQrNmxaUzlVeXpVdGd1Vmp4NGhUMjljWGtDRy8zN2QyckhaTWZKRW02bnMybzVlR3RxZjBlZWtDUlpmbHlYb28randwbXpKaEIxYXBWWFhKZFE0WU1vVldyVm93ZVBacE9uVHB4K3ZScCt2ZnZ6OENCQXdIbzI3Y3ZzMmZQWnVqUW9iejk5dHNjT25TSUJRc1d1SVNWa3laTm9uYnQyclJxMVFvdkx5OTY5T2hCMzc1OThmSHh3V2cwMHJ0M2I3cDM3MzdmRk0vZCtIZWhjK2V1aElWTlllM3FWY2l5ek1CQkh5R0tZcjRLYjNObnp5UWpJNE0rNy9YU1BtZnUvRVg0K1Bnd2FjbzBabjQ2blVVTEYrRHA2Y25BYkRxaXg0NGVaY09HOWJSdjMrR1dZeXRiTm9qMjdUdndicStlS0NnOCsyeXdwaDJjbDhDeVhxOW4rSWlQR1RkdU5EYXJqZEtsU3pONDZLM0ZsMjAyVzBRdUhwdWlxdSs1ZW0yQ2dDSUlndUNka1pIUnoyZzBUbnhVTHBaU3BVb1JHaHFxdFdFNDhjVVhYOUMxYTFkV3JGaEJ0MjdkQUZpMWFoVVRKMDdrd29VTEZDdFdqSjQ5ZXpKeTVFanRTZmpUVHo4eGNPQkFMbHk0UU8zYXRXblFvQUhyMTYvWGRFVURBd1BwMXEwYllXRmhXajR0TkRTVU5XdldJSW9pSFR0MlpQYnMyYmtXRmR4NGRMQm56eDRlcjFqRlBSRjVJQ1ltNXRQYU5aLzRCVmRhOEJRbkxUZ3FiYmdraXFLczArbFZ3NWFVbE5URzI5dDdyWHY2Ymc4blQ1NGtMUzJOQmcwYWFPK05IajJhSDM3NGdmRHc4UHMyRGxtV3VYemxLbkZ4Y1VpU1JFYjZvN2xFeThOc1JxZlQ0ZThYUUZCUUdVUlJ6QzluNDVpeldPejJlemRuSG1ZemVyMmVBUDhBZ29MS3VnM2JIZUxzbjM4T2EvNi9KcWZKS2VTU0RqaWs5MFJKRkVWWnI5Y3Bla0NKajQrLytDajBza21TZE52eWR2bmRHQmN1WEtCTGx5NnNXcldLV3JWcWNmTGtTZWJObThmdzRjUEpqUGNManNqSXlOdW1VN2RZckp3NGNRS2RYbzlQb2NKdStiM1VGT0lUNG9uNUxacGFOV3RoTkJweS9lMSsvZlUzUkowT2I1OTdQMmVwcVNuRXhzVVJIUk5OdmJwMTg5MzN1cnVmTVZjY09uZ2dsc3lDZ1ZZNGNEQjdPRUpSQlFVRldaWVJCRUh3Qkl6L1orKzc0NXVvLy8rZmQ1ZGNkdmVtcFlXMkRGR2dTQUUvRkJGL2JCemdGMFVGUkN4WWtDRWdJaFFVRkdRclFnc2lVNUNsSUdKWkFySmt5aXBZaG15UTBxYnBidE9SY1hlL1AyNDBTZE5Tb0dYbTlYaEVhZFpkM25mM3ZOZDhQbG1XMVFOUXVKYnc3bXpxMUtsWXZIZ3gwdExTRUJ3Y2pMaTRPSXdlUGJwU2I2RTY3V0dKL3o3cXhvc1RleUVzdEx5WGRPMzZEZVRtNWo0VXdXUWZiMitFT3BIaGMzbHNsZCsvUTJvRjlBRXZZMkIwQ0VWTEFKZ0ZvV1NHSkVsT0pwTnhKTXFTY1JkYzYzZjNGaDhmait2WHI4TmtNdUhxMWFzWU0yYk1Bd00xQU1qT3luWU5UenN4cmM0TldWbk8rUjF5Y25JZXlwcHBkVzdJeW5iTkJOOURxdVVpN0ZzOGJGczk3SXNISW9PdTZKMnpMSHZldFlTUGwzSGN2UTlQUCttbTBXakJza3lGS1ltSHNXWWFqUmFNbFhFZG5MczBpOFZ5RmVYNzF4ejcySGgyRHdIY1pBUkJjQnpIY1ZhcjlYeEZveE11ZXpTTklJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTckl6OGVONjFkUlZHU3NGRGpENm9URHpkMzlvZjIrbXRoUG83SHdwaE5BSytleEVVU1o3b0ZNZktHa3BPU2NDOWdxODQ1NDJtYUR3UUFydzhCWVdEMjB6VnF0RGpLNURINit2Z2dNREt6Mi9kNjFjd2VXTDFzS2d5RURRVUZCV0xscUxTNWZ2b1RZL3Yyazk0eU5uNEN1WGJ1NUR2SWpiTmV2WFVGeGNlWDBQa1ZGUnR5NGZoV05telo3b3Ziejl1MjAydzZBeGdCZ2hhSkJ1WWNJYkFEQVhicDA2VngwZExUckRLb0ExSktUa3dHQ2hFYXI0Mm1iQTZydis0dUtqRWpYWnlBOVBSM05tbFhmU1ptV2xvWVowNmZpeThsZkl6cTZCUW9LZUdxY2lJaEk3TnE5RHdBd01QYjlHbHUzWlV1WDRQWHVQZXpZVE1UOW1qdm5HNlNrL0FPYXB0RytReWNNL21pSU5IeWRtcHFLaExsemtISTJCUXFGQWgwN2RzS0hjWU5SazAza2Q5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBenNFN2dZWHR1ZlF3clNiMmMvKyt2UmtDYURFaXFObDdiYnlYQmx1VktoSGxXclpzbVFYZ3Nndkd5cHRlcndjSUVuNytnVFdTbTlGb3RQRHpEd1JBSUQwOXZkcSs5K0svRitEajQ0UFdyV05BMDdURUUwY1FCQlFLQlJRS0JXcFM3K0xINVV1UmsxTStnVDlwNGdUVUNnN0diNzl2d2FMRnkzRDB5R0VrSlcwQ3dQZmtqUjB6R3ZYcU44Q20zN2NnSVdFQjl1L2JpOTgyL2xwaisxblZiU1l1V0lqTlc3ZWpmK3dBeko0NUhSdC8zZUM2T0dyZXFiZ3ljOGEwa3NyQ1VJSVFRbEhZaDZJUTNzQ3lMSHVLSk1sSTEzTGFtOEdRQ1kxV1YrUGIwZWpjWURBWTdqc2tQWDA2R1pPK21BQ3oyWXppNG1KMGY0MFBNM3U4MFJQOTN1OWZwZTg0ZXVRd0VoUG1RYTlQUjJob0dFWjk4aWthUGZ1czdWMFV5NVl0UWFiQkFQK0FBTVRGRFVhckYvNEhBQmcyOUNQY0VoaFRSMzQ4SERJWmhlRGdFQ1F1V0FpV1pkRzJiVHQwZStVVktCUUsrUG43bzNsME5DNWR2QWlBcjFoNmVubWhkNTgrb0drYXdTRWhhQjNUQnYvK1czTkYrN3ZacGtxbFF1dldNWkRIVDhERUx5YWdVK2N1angwekM4TXdPSHIwQ0xZay9ZNGhRNGNqT0NRRUFEOGtQL2U3YjVIeXp4bVFKSVhZZ1I4aUpvWW5RczNNek1TMHFWT1FuWjBGbmM0Tll6NGJpOXExUXl2ZERrRVFpSXFLZ28rUEQxaVd4Zm56NTVHV2xsYmwvVnp4NDNMOHNYM2JPV2RoS0FDVzR6aTJMTDlHY0NBSXZrRzlvRUFxSGdBQVo3RllraFVLUlM4WGxObWJsYkUra0NxYVJxT0ZzU0R2dnIrbmFkTW9iRXJhaWgxL2JNZktGVDlpOWRxZjcrcnpWNjljd2VjVDRqSHBxeWxvM2p3YWUvZnN4cWlSdy9IVHFyWHc4L2ZIelpzM01HWHlsNWc3Yno0YU5HeUlUYjl0eFBqeDQ3QjV5M2FvMVdva0pDNlF3cmM1YytjaE1yS01PSVlrU2ZUdTA3Y3NKM1A5R2c0Zk9vU1BodkMwVVQ0K1B0TG5SVy9xZEhJeVh1L2VvOGJXL1Y2MkdkMmlKY3dXQ3k1ZHZJaW9aczBleWZPV1pWbXA5Y2oyM3g4UEg0cGF0V3Jod29YellHd3F4OXUzYlVWcGFTbFcvTFFHT1RrNUdQUmhMQm8zYmdJM056ZUpFZmVWVjEvRGlSUEhNV1BhVk16Ly9vZEt0MStuVGgxUUZJV2RPM2RDb1ZEZzVaZGZSbVptSml3V2k5Tjl0UDA3SmVVZjdOKzNGN05tZjN2bGhWYlJqbUdvYlk0TklvQVJBamhydFZxKzNVTk13aFVVRkp4eXdWaDVxNjVDUVpXMlpUUSs5Tis3WlVzUzJyN1VEcTFieDBDaFVLQnpsNjVvMExBaGRncDg5OTdlUGxpMmZDV2VhZFFJSkVuaTFkZGVoOFZzeHExYi8xVjVHK2ZPbmtYSDl1M1FyMjl2TkdqWUVDKzJmY25wK3haK1B4OHF0UnBkdTczeXdINS9WYlpKRUFTOFBMMWdMREkra3VmczhlUEhNSDdjWjdCWUxNakp5Y0hBMlA3SXllRUY2YjZkTXhmajRpZVV1MW1mT1hNYWJkcThLTnlBQ01qbE5DNWR1aWk5OXVLTFBLVzlMU1B1blc0WW9vZkdjZnhFZ0tlbnA5MTdsaTVaSkZHRHA2VDhnNCtIOHplNEs1Y3ZvV2xVRkc3eHJyK3R0OFk0Q1VmQmNad0VjSEk1YmRlZ3k3MzExbHVud0hmMnVxd1NPM1BtTkRwMWVCbDVlYm1TaDlPdjc3dFBWRTR4TU5DK0s3OTI3VERvOVh6K1Q2dlY0dVRKRTRqN01CYTkzK21GOTkvckk5MXRxMnFObm4wV08vL2NpNS9YYjBSNmVycWRFSWhvSzFmOGlMLy9Qb3FwVTZkWDJ5amNuYXlxMitRNERqbTVPZEErb2oyRXpadEh3OHZiRzE5TytnS2ZqUG9ZUGQ3NFA0bEI1azZNdUdmUHB1Q3pNYU5CSzJqazUrZExyNG1NdUlrSmN5VkczTXFNcG1rd0RBTnZiMi9FeE1TQVpWazd3a2tBZU9mZFB0aTdkdzhTNW4ySHlWOU93dEJodkRCTjNmQUluRHh4M0RoMHlFY1pEaUdvSGJBSllGWk8xSVVVa3NjY0FIYi8vdjBzeDNGSFhkQjFaeXNwS2NHYTFhdWZ5Ti9tNys4UHZVTVI0L2J0VklrYi84QmYrN0Y2MVUvNC9QTkpXTDMyNXdwRFhZSWd5b0dkcWJRVW0zN2JDRk1wVDlvY0dCaUk5dTA3NE15WjAzYnYyN0QrRit6YXVRTnp2a3Q0WUgxWmQ3UE40OGVQZ1piTFVhOSsvWWR5ZkRwMjdDZzlIRm1jeGJXUGl4dU1VeWRQUUVFcnF1enhidDZjaE9YTGxtTGE5RmtJZGNpaFZjU0llNmR3dEdIRGhqaDA2SkJVbGJjMXJWYUxRWU0rd3ZwZmZrYTdsMTlHL2ZyOFdGbVRKazNSdmtPbmt3WkRSbVdneHBiTmlZckJLSy96UU1LZU41eTFXcTB1WUt2aUFkdTdaN2ZrM3R2YXZyMTc4T0hBRDlDdjc3dVlPV09hbEZOSVMwdkRvQThIb1BjN3ZUQnI1blFwcWY5UThvWldxMFNxeWJFc3JGYXJCRUxkWG5rVisvZnZ4YkZqZjhOcXRXTFBudDA0ZHpZRkhUdDFBc0FMakJBRVFGSVU4dlB6cEZDQ1krM0pUQU9EZ25EMHlCRllMQlprR2d6OFhWeWh3RThyVjJEZHVqV3dXQ3pJeTh2RmdRTi9vWEhqeG1XaDhPWWtiUHB0STc2YmwvakFlT3FxdWsyVHlZUy9qeDdCOUdsZkkyN1FSdytsY0pDUmtZR2RPM2RLRDJkTU1rYWpFWjkrT2dwOSt2WkRRRUFBWmt5ZldpbTdzeGhpZW5oNFlOYnNiK0hsNVFXVHlRUjNBZUJGUnR4aHcwZEFMcGRMakxpVm1kbHNoc2xrd3NHREIyRXltVUJSVkRsdGo2dFhyMkw2dEsveDFlU3ZjZlRJWVd6ZHVrVjY3ZFZYWHp2ckpBeGxiSE5zb21OR0VJU1VxM056ZDRkTUtJOXlvbHRYV0ZoNHpFVjZlR2RUcXpYbzJLa0xWcTlhaVM1ZHlnRHErdlZyMkxCaFBSSVNGa0NoVkdMbWpHbll0blVMWHUvZUEzUG5mSVAySFRxaTU1dHY0ZGpmUjNIbzRJR0hzdStPRGJvenBrL0ZqT2xUMGFGakozeit4U1JFUnRiRHhDOG40L3NGaWRDbnA2TjJhQ2htenY1Vzh0aTZkTzJHczJkVEVOdi9QVkNVREs5Mzc0SEl5SHJJeWJVSCtWR2pSbVAyckpsWXZtd0phdGV1alNYTFZvQ21hY3lZT1J1SkNYUHg4N3Exa012bGFQdFNPL1I3bjZkZlp4Z0dzMmJ5WWVBN3ZleTU5MWV1V29PQWdPcHZZcTdxTm9jTitRZ0V3Uk1zZmpKNnpBUHRZN3RidTNyMUN0cTJiWWQzZS9lQjFXckYzTy9tSUNjbnAxeFBvYTAxYlJxRmMrZk9naVJKNU9YbDR1clZxNmduRkg0cVlzU3R6REl6TSszQ1h3OFBqM0xDTFNkUEhNZlljZVB4ZlBQbWVLNXhFeXhidWhoZHUzWURRUkM0ZHYzYXRZcEFEUTVUQnlSSlFTYWpZRFlERkVtVlRSNklIdHRISDMxMGROMjZkZmtBM0Yzd1ZibTk4WDg5MGE5dmI0azFGQUQrL3Zzb1VtLzloMEZ4QTZXN2xsWm9GVWxKK1FjVEJVV2c4SWlhNzZycDFMa0xPblh1VXU3NXlNaDYrT3RnNVRxbXJWdkhWSGpoS2hRS1RQaDhvdDF6QXorTUsvZStGaTFiNFpjTkc4czlIeEVaaWUvbUpUcjlib3Fpc1AvQTRRZDZIS3V5elR1dDEvMmFUbGU5N1VSTm1qUkZreVk4NWJaTUpzTW5Ea3k1enF4TDEyNjRkT2tTK3ZmanE5YkRQaDRoaGVRVk1lSldaamR1M0lDSGh3ZmF0MjhQQURoOStuUzVnc05idmQ2Vy91M3Q3WTFQeDR5VlVuNXhBMk5UbllJYVFiRGdPSllUakNSSmppUUpqaUJJYUxWYUxqYzNoL2ZZYkhPaXYvenlpM1hObWpVSFNKSjh4UVZkRlJ0QkVGQ3BWSGlqWjArc1dsVW1qbUV4VzlEMnBYYVM1Smxqd3JrbUcySmQ5dmdhUlZFb0tqSSswT0Y4eDl4b1pRRG80K05UWllVczIvTTlPVG41bnZiTllySDhyZGZyYmNOUXF3aHVCQTl1bkRSbFFKSWdDQklrU1lCV0tPRHU3c0VYRHh4bXJsaUx4WExRZGFyZEdkZ0FvRWYzTjNBNzlaYjBmSFNMRnRpemU3ZEVEYjU3OTU5SVNmbEhjdWUzYjl2S2g0TkNHZjErVGFWU3V3N0dYYTdOdzF5emlyYnQ1K2VIWW1OaHBhbVBxcVpJSG5hS3BqcmVsNXViKzA4bFlhaERLQ3FNVXBFa1NJSUVTWkpTVlJSQ0lvNEZ3R1ZrWkxpQXJZcW1VQ3JScDI5WnZxcEJnNFlZTnZ4ampCMHpHbS8zNm9rL2QrNUFjSEF3QUdENGlGSFl1ZU1QOUg2bkY3WnQyd3F5R21ZZnhUdTl5K3l0eUZoWTRXd3ArWkRXck1oWUNLcUNGcExBd0VCd0hJdk1qSFNuKzFhbmJzUWR3VUN0MXFCTzNZaUh1dTdWdForblRwNjQ2Z1RVeEVlWm1BdEI4SVVza2lnRE5aSUVvVktwQ0t2VlNyQXNTM0ljUjNFY0p3ZWdZRmwySDRCblhaY0ljUExVS2ZnSDNML3U1NFVMNTFHclZqRGMzTnl3Wjg5dWJOKzJGYk5tZjJ2M25nejliVHgvRjUzc04yN2NSSGFPaTBIWDBUTDBhZkR4OFVabzdmSnN0UStMZFpobjlmVkdtQk1HWGRFTUJnUDBlajJzVmlzS0gyQmorS05rSE1lZGI5ZXUzU1R3SWkyMjRpMUZBSW9KZ2hBMERnaUdJQWlXSkVtT29palFOTTNSTkEyRlFnRVpINTlLZVI4cEhMVmFyWHRrTXBrTDJBRElxaW4vVVZwU2lqR2pSL0hLNzFvdFBoczdydHdkWFM2WDM5VjNob2JXUm1hbUFSbjZOR2gxYmk3TkEyTWhqTVpDTUZhclUxQURnTERRVUJnTUQyN054SDFpR2FaU1VCTkRVajgvdjZmNkdCWVdGdjROSjdrMUFJd1lWWXF0SGhSRlFTNlhnNlpwS0pWS0tKVktxRlFxRUZxdGxyQllMQVRETUFUTHNoVEhjUlFBT2lzcjYyVXZMNitOTGxnRDB0UFRrYTdQRUJnNGFzNE1HZWtJRFBDLzZ5RjRqdU53L2NaTjVPUmtnN0d5S0MxOU9za25WU28xU0lxQ2o3Y1BRa05EN2xpb3VYbnpQMlJtWllHeE1qVzJaaXFWR3BSTWRrZFB6V1ZsZHVMRWlVK2pvNk92QWloR21jYUJrU0NJSXNHTE13djZCZ3hGVVp4Y0x1Y1VDZ1dVU2lXblZDcWhWcXRCdUxtNUVXYXpXUVEyMjNCVXliSnNNb0JhcnFVR1RwMUtCa0VRMEdoMVVGZnpIYjY0eUFoallRRUFybHI1MkZ6bXNzY3dERTBqU1hLa1RSaHFDMndsQUVvSmdyRFJFS1U0bXFZbFlGT3BWRkNyMVh3b1NwSWt4ekNNYlNqS0FXQVlodGxCVWRRSHJ1VUdtaldMUW5wNk9neUdUQlFXNUZYYnNMcE9wNE5NSmtOUVVDQUNBZ0pjQysyeXA5cEtTa3IrZ24wMTFDNFVkY0Fvb1llTnh6Q1NKRUZSRkNpS0tzdXhpVzBmd2xBcEM0QXRMQ3o4MDhQRHd3VnNnZ1VHQnRZSWZiZkxYT1l5M3E1Y3VYTEdBZFNzQUt3RVFkaTFlaEFPZld3aW9Jbi9Kc1h5cURoblpkUFR4bnA1ZWYwSjRMWnJ1VjNtTXBjOWlEQzBTWk1tMXdYd3NqbzhHRnRRQXdCYjdMSUZONHFpSUdOWmx1TTRyb3h0MHNaakE4QmV1M1p0TzBWUkExekw3aktYdWF5R3c5QjlqcDZhQTZpSnpMbWNHRjBLUEc4Y3d6QmdHQVpXcXhVV2l3VXloVUloa3JSSjAvOEMyTEVBR0hkMzkrM2UzdDR1WUhPWnkxeFdvM2I4K1BIa1NzSlFpZEZEOU5Ca01obmtjam1Fd2dIRXdvRldxd1ZwRzV2YWNMTko0YWl2cis5QnVGVGlYZVl5bDlWc0dIcXhSWXNXL3ptQW1nVVZNSG80NXRha0VGUW00eDgyRlFXQ0pFbU9aVmxDaUdGRnNRVEdiRFp2cG1tNm9XdjVYZWF5R3IyNG9kZnJrWkZoQU1Nd01CcWZuc21Ed3NMQ2ZiQnZ5cFVlSE1lSmpia2l3U1JZbHVVc0ZndHNkQS9BY1p3VWpzcHNQVGJCYStPSU1vVVhGZ0NUbHBhMkxTd3NiSXpyMUhPWnkyb08xSktUazhHQmtLWWgvSitpMzc5enh4OW5uSGhyVnZEVEJuYkVraVJKY3BSTUJscE9RNkdnb1ZBcW9WS3FvRktyb0ZGcm9OUHB5a0pSVzNCekRFZnIxcTE3bm1YWm5VL2FZaVltSmtLcFZEN1FiVnF0Vm93WU1RSitmbjV3ZDNkSFhGd2Npb3VMWFZmMlUyNTZ2UjRjQ1BnSEJEMTFZM0ZXcTNWdjdBZnZaOXNBbThYQmF5c2Zob29ENzdaaEtDV0RUQzZIWEM0SEtaUEpSRkRqYkR3MnpvYnRnd1hBRkJjWEo3bE92L3UzY2VQR0lTa3BDZXZYcjBkU1VoSjI3OTZOWWNPR3VSYm1LVGVESVJOYW5kdFQrZHZUMDlNT09RbEJMYWk0ZjAxb3hpVTVpaFNBVGNibjErUXlHZVEwWFJhS09oWVJDSUt3YS8xSVNFallQRzdjdU04QWhMaE93M3V6b3FJaXpKOC9INnRXclVMYnRyeVUyYUpGaTlDeFkwZk1tREZEVW1wMzJkTm5ETVBjazZkMjRmdzVMRjcwQTc3OWJsNk43dCtGQytleGRjdG1OR25TRkIwNmRwS2UvKzIzWDdGcDQ2OEFRYUJ0MjNiNElKWnZvS2hNWVBuTW1kTkltUHNkckl3VllhRmhxZGV1WDcvZzRLMUpZYWlJUDQ0TnVTUkZnaVFkdkRXaFNrclRkSm5IWmh1S2l1R29qZGZHakI4L3ZzUmlzZno2dEoxd2E5ZXVSWk1tVGFCU3FWQzNibDNNbTJkL0F1M1pzd2ZObWpXRFNxVkNkSFEwWnMrZWJRZFFQWHYyUlBQbXpRRUF5Y25KS0NrcGtVQU5BTnEwNFpXMmp4dzU0cnE2bjJJckxDeTRwOC9WYjlBUUU3Lzhxa2IzYmNIOFJDeGRzaGpYcmw1RlVWR1I5UHgvLzkzRXhnMGI4UDBQUzdCMDJRcWNPWk9NNDhlUENaL2hCWlpYckZ5TjkvdC9nQm5UcGtxcG1HbGZUOGFFTHliaXh4V3I0T1BydDJQdm50MFdaOTRhUU5oWFJFVndJMGxRdHVOVEFxako1SExJUmRvaXNUd3F2SW1qS0lwZ0dJWWpTUklNdzBoNU5nRFdXN2R1YmFwYnQrNklwK1ZrKyttbm54QWJHNHR2dnZrR25UdDN4bDkvL1lYaHc0ZERyVlpqd0lBQnVIcjFLcnAxNjRhaFE0ZGk3ZHExMHV1MnlrVTllL1pFYmk2dlAzcjc5bTNRTkcwbnFDR1h5K0h0N1kzVTFGVFgxZTJ5Y3BhZG5ZMnBYMDlHVnFZQkJFbGk4T0FoYU5ucUJhU21wbUxVaU9Hd1dNenc4UERFOGhWbDlQVGpQdnNVYVduOHdGQmVYaDdVR2czV3Jsc1BnRmVGU3BnN0Iva0YrZkR5OU1LWXNlTWtrUjRBV1AvTHo5aTRjWVAwZmdBWU1QQkQwRFNOMmJObTJPM2JQMmZPNFBubXphRldxMkcxV3VIcDRZa3pwMDhqT3JvRnpwdzVqWkVqUHdGZ0w3QnN5TWlBVXFWQ1dGZ2QwYk03VllHM1ppVUlNYjlHY0FEQkVRQkhrQ1JIa1NSSWt1S2tTRk1NUXdWdlRhRlFsZ0diVGE3Tk5oeTFteDJOaUlpNFlMVmFONUlrK2NiVGNGSjk4ODAzK09DREQ2UWNXR1JrSkc3Y3VJSEpreWRqd0lBQldMaHdJUm8wYUlCWnMyYnhkOC82OVpHU2tvSTFhOVpJMy9IMjIyVmlGY1hGeFU2TEZRcUZvcHdzbWN0Y0JnQS9yMXVEeG8wYm85LzdIK0RhdFd0WU1EOEJMVnU5Z09EZ1lQeXlZU011WDc2RXFWTW0yMzFtMmd6K2ZNelB6MFBjd0ZoSmY4TnNObVBxbEs4d1plcDBCQVlHWXNjZjIvSDlndm1ZOVBqTzdyUUFBQ0FBU1VSQlZHWFo1NXMwYlZxT2VmaE9Bc3VabVptWTl2VmtNQ3dEblpBbnRCVlkvdlBQblpMQWNrRkJBUlFLQmN4bU0rWis5KzJXWlVzWFp6bDRhcmJnSm9TaDRQaUhXRFN3U1ovSnlydzFXbWpXVmFtVUlPVnlPUnk4TmpnT3hndTlJZ3dBSmk4djc2a0pSOCtmUDQ4WFhuakI3cm1ZbUJqODk5OS9NQnFOT0gzNmREbXgydGF0VzFmNGZTcVZxcHhLRDhCclZUNE1mVXFYUGZvVzNhSWxkdis1Q3l0K1hBNVRhV21WQlZWWWxzV1hreWFpMnl1dm9VV0xsZ0I0YWNqVTFGdUlIenNHL2Z2MXhabzFxMkRJeUxEN1hMMTY5ZkhHLy9XOGkydmtIQ2FNSDR1QmNZUFFydDMvc3dmWUNnU1c4L1B6TVdya3gvQnc5empreEZ1ekxScEliQjYydVRXS3NnbERaUlJrTXJtTnQ2YUFTcVdHVEFRMnNXdFhERWNwaXVJRUhVSGIyVkhHeDhkbkQ4TXdod2lDYVAya24xUXFsY3JwQ1NQK1h5YVRsVk02cjB5VU5qZzRHS1dscGNqTHk0T0hod2NBd0dLeElEczdHN1ZxdVdqdlhPWUUyS0piSUhIK1FodzdmZ3dyVnl3SFRkUDRjdkxYZC96YzBpV0xvRlFxMGFmdmU5SnpGb3NGQVFFQmRtSHIvWmk3dXp0S1Mwc3grNXZ2NE9ibWhqTm5Uc05kT0s5RmdlV09uVHBMM3FKV3E0V2JteHNLOHZNeGVjcTBveSsvMU9aNkpkNmEyTHZHbG5WcENHRW9qMUdTUXlhWHlVREw1YUFWQ2lpVktxZzFhcEEwVFVNdTlINVVFSkxhRlJFQVdJdUtpbjUrR2s2cWhnMGJsa3ZxSHo1OEdJR0JnWEJ6YzhOenp6Mkg0OGVQMjczdStMZXRSVVZGUWFWUzRjQ0JNcUhrZ3djUGdpUkp0R3JWeW5VVnU2eWNUWnM2QmNlT0gwUDc5aDB3TG40Q2poNDlVdTVtNm1nSER4N0EvbjM3RUQvK2N6c1c0WWlJQ0JRVUZPQ3YvZnVrZk52bXBOL3RQbnY1OGlYODlsdlZnckxuR2plRzJXeUdRcUVBd3pBNGN2Z1FtalRsdFV3ckVsZ09DQXlFdTRjSDhuSnpkMWZrclFHRUhac0hRTmg0YkdWNU5jck9XMU5BcVZCQ3JWWkJxOUZDSmdKYlJVVUVtN1lQYVJLaGZmdjJ2eDQ1Y3VSRGdpQWVlMDBFbG1YeHh4OS9sSHUrYmR1MmlJK1BSOCtlUGZIc3M4K2ljK2ZPT0hqd0lPYk1tWU9KRTNteDRLRkRoMkxldkhrWU8zWXNQdmpnQXh3OWVoVGZmLys5WFZpNWJ0MDY1T2JtWXZEZ3dkQm9OSWlOamNYUW9VT2gwK2xBMHpUaTR1TFF2MzkvU1RIYlpTNnp0VDU5M3NQczJUT3diczFxc0N5TFVaOThDcElrN1lvSCtmbjVlS3ZuRzJqMi9QTVlPMjQ4RXVkOWg5TFNVZ3daL0tIMFBZa0xmb0JPcDhPMEdiUHczYmZmNEllRjMwT3RWbU9VZzQ1bzhxbFQyTGh4QTNyMCtMODc3bHRvYUJoNjlQZy9EUHB3QURod2FOT21yU1FlWHBIQXNrd213N2o0Q2VkZmU2WHIyUXE4TlF0QmlLQW1GQTBJOE40YVJZSWlLVTRtVlVMbFV0OGFyYUNoVkNtaEZpWVBpSjQ5ZXlJL1B4K0ZoWVVvS2lwQ2NYRXhTa3BLWURLWkNKUEpCQnM5QkpMak9Ca0FPUUJsVVZIUkFKVks5ZlhqZk5Ja0ppWlcyQng3L2ZwMWhJV0ZZZG15WlpneFl3WnUzTGlCc0xBd0RCOCtIRU9HREpIZXQyUEhEb3dhTlFwWHJseEJWRlFVV3Jac2lRMGJOa2k2b2oxNzlzU05HemR3NHNRSktaODJZc1FJckYyN0ZpUkpvbWZQbnBnM2I5NERuNEJ3MmFObCsvZnZSM2hrZzZmaXR4b01obStmajJwOEJEejl0NmhyWUFSUEJWNUNFRVFwRDNDRWxWZWhvamlaVENZcVVIRzJUQjRhclJZNm5RNmVucDd3OGZGRlVGQVF3c0xDUVBUdTNSdDVlWGtvS0NoQVVWRVJpb3FLVUZKU2d0TFNVcGhNSnNKc05zTnF0WklzeXhJMmVnajA0c1dMdldKalkvOEFFUDYwbm93cEtTa29MaTVHeTVZdHBlY21UWnFFYmR1MjRkaXhZdy9VNjd4eDh6L2s1T1NBWVJpVWxqeWRJMXBLbFFvVVJjSEwweHRoWWJVbDhsUm54bkdjc0diWnNGcHJiczJVS2hWa01obTh2YndSRmhiNjFBTWJ4M0hYUGhzemV1TGFOYXVMQUpTZ1ROZkFDRjVhcndTQVdRQTJScERXWTRWd2sxTW9GZnhjcUVvRnRVWURuVllMTjNkM2VIbDV3OS9mRDhIQklRaVBpSUJNcFZLaHBLUUVORTNEYkRaRExwZkRZckU0VmtodFExSUdBRE53NE1DQzNyMTcvNlJVS2ljOWpnczhiTmd3SkNZbTNzOEJ3cFVyVjlDM2IxK3NYcjBhVFpzMlJVcEtDdWJQbjQvNGVON3R2cE5La3FQcDlYcjQrOS9kNkxQSlpNYVpNMmRBeVdUUXVibTc1UGVLak1qTnkwWFd5VXcwYmRJVU5DMTNldXhPbkRnSmtxS2cxZFg4bWhVVkdaR2RrNFBNckV4RUM4M2FGZG50Sjd5Zk1UYzNkL1BhTmF0Tk5pR29XUVF5QUJZT1lBZ0hiUVB4UHh6SGdXTTVzQ3dMbG1WNUpnK0J6Y05xdGNCaXNjQmlOc05zTXZQQXBsUXFVVkpTWXBkcms4bGtzRnF0b0NnS0RNT0E0emlKTnB6ak9BWUFzM256NXAvZmZQUE45d0RVZmR3V09DRWhBUWtKQ2ZmMUhUMTY5RUI4ZkR4R2pCaUJ0TFEwQkFjSDQ5TlBQOFhISDM4c1hVQTFiZW42ZEZBeW1Vc3dXVENOUmd1TlJvc01mUnJTMHRNUUZscmVTN3ArNHlaSWlucGdhMmE3VHpkdi9vZlFTbVQ0YWdVSFA4bmUydldsUzVlY2RBQTFtOXhhV1l0SEdhRWtCYmxNMUEzbHE1Nml0NmJWYXVIdTdnNVBUeS80K2ZraE9EZ1lkY1BEMGFqUnN5QTFHZzJVU2lVVUNnVm9tb1p0TVVFb0lvQ2lLTTZtbjAxcy9iRDI2dFVydDZTa1pPWFRmQ0hGeDhmait2WHJNSmxNdUhyMUtzYU1HVk5wQ0ZUZGxwMlYvZFFPVDFkbVdwMGJzckt5bmI2V2s1UHpVTlpNcTNORFZuYldVM3RNc3JPemt4WXZXbGdLKzRLQkNHNFNrNGR0aXdjZmlwS2daQlJIVVE3TnVNS1VnVnF0a2tETzI4c2JNcGtNcEZhcmhWcXRobEtweEwyMGZxeGJ0MjR0eDNFdWh0MkhjZ2U4OStIcHA4RnpZMW5HNldzUGE4MDBHaTBZSy9PVW5xdmN4VzltenpyaEJOVEVmRm81d1JaZTZaMTBtQWZsUjZma0FxaXBWRXBvTkJxNHVibkJ3OU1Udm42K0FBQ1pUcWVUS3FKQ3djQXUxeWFUeVRpcjFVb3dET08wWVRjMk5qYi9yYmZlV3FIUmFLWS80UWNHZXIwZUJvTUJWb2FCc2JCNjJFMjFXaDFrY2huOGZIM3ZXdHFQSUlDU0VoZVhXMFZXVWdIUDNjTXNydHpyOFNLU00wSE1Ud2F1NU4zYmhpTTh3QTJKQWhmbFd5Mi9veUEvSHpldVgwVlJrYkZTSUErckV3NDNkM2RrWkdRa3JmcHBSWVc1TlRocHlDVkprdVA3MW1TY1RFYnhvQ2FUZzZiTGRBNTRqUU1kNzYxNSswQ2g0THNMWkI0ZUhpZ29LSURSYUpTcW9XYXpXUUkzcTlVS21Vd0dobUhFcEozVTB5YmsycXh2dmZYV21pMWJ0cnhCRUVTTEp4WFVrcE9UQVlLRVJxdmoyVTJyVWR1NHFNaUlkSDBHMHRQVHExMEpmdGZPSFZpK2JDa01oZ3dFQlFWaDVhcTF1SHo1RW1MNzk1UGVNelorQXJwMjdlWkN3a2ZaRXBPQnEzbjMvdmtyZVNEbUo0TmIwckZhZHVmNnRTc29MaTY2NDNsOTQvcFZQTnU0NllsM2VyMlo3QVRVbkhwcmtKaHliWWZjNVpETDVKRFRmRE91UXFHQVVxV0NSc05QTTNoNjhYazIwV1NlbnA3SXk4dERZV0doYlE4YmFKcm1xd3dPWHBzTjY0ZWsxcng5KzNaelFVSEJqKzd1N2s4a3NPbjFlb0FnNGVkZk0yTEpZbkxab0U5RGVucDZ0WWt5cDZXbFljYjBxZmh5OHRlSWptNkJnZ0tlR2ljaUloSzdkdThEQUF5TWZiL0cxbTNaMGlWNHZYc1BPellUY2IvbXp2a0dLU24vZ0tacHRPL1FDWU0vR2lJTlg2ZW1waUpoN2h5a25FMkJRcUZBeDQ2ZDhHSGM0SExEMmRWcGQ5cm1pekV2UUM2WGd5QkloSVdGb1gvc0FMUnVIZlBBemtIaWZrRE5CdHlxeSs0RWFyYmc5dC9ObTF1dlhMbHN2WU8zeHBUUHJWR1FVUlFualU3SjVUd2RPRTJYZVdzNkxkdzlQT0R0N1dNM0FrbjYrUGpBdzhNRE9wME9hclVhS3BVS0NvVkN5clU1eTdjNXk3VjVlSGhzWmxsMjI1TUliQVpESmpSYVhjM25ZSFJ1TUJnTTFmWjlGLys5QUI4Zkg3UnVIUU9hcGlXZU9JSWdvRkR3ZDcyN2JVbTVHL3R4K1ZMazVKUlA0RSthT0FHMWdvUHgyKzlic0dqeE1odzljaGhKU1pzQThEMTVZOGVNUnIzNkRiRHA5eTFJU0ZpQS9mdjI0cmVOTmNlOVVOVnRKaTVZaU0xYnQ2Ti83QURNbmprZEczL2Q0UElrNzJCV3EzVlhtNWdYTGpqeDFDcjAxa2c3YjYwTTFPVENQS2hDcVlSS3hjdnN1YnU1dzh2VEMvNDIzaG9Ba0g1K2Z2RHk4b0tibXh1MFdpM0U5Zyt4U21vRGJKd05oYmpkaUJYNGFYeUx3V0Q0OFlrOE9JejFnU1NiTlJvdHJGYnJmWC9QNmRQSjZQNWFOOHlhT1IxNnZSN2RYK3VHN3E5MXc0b2ZsMWY1TzQ0ZU9Zdys3NzZOOWkrM1JXei9mamgzOXF6ZDYvdjM3VVcvOTNxamErY082UDkrWHh3OWNsaDZiZGpRajlEOU5UNjBIZm54Y0hSL3JSdUdmalJJQXBHMmJkdmh2WDd2UTZGUXdNL2ZIODJqbzNIcDRrVUFmTVhTMDhzTHZmdjBBVTNUQ0E0SlFldVlOdmozMzVxclQ5M05ObFVxRlZxM2pzRzQrQWxZdkdpaEhmSGlrMkJGUlVWSStuMFR4bzRaWFQwaDYvWHJPMkUvRTJvSGJCekhXVG1PWXppT1kxbVc1UWhBOHRaS1NvcTVUSU1CcWJkdW9hQ2dvSXk5UTZtQ1JxT0dRcUhBZ3ZtSk9IandMNmpVYW50Z0N3b0tnbytQRHp3OVBhSFQ2ZURZL2xGSmxiU2MxeFlZR0hqWVlyRXNlZEtBcmJvS0JWWGFsdEY0MzkvUnRHa1VOaVZ0eGNjalJxRldyV0JzU3RxS1RVbGIwZS85L2xYNi9OVXJWL0Q1aEhnTUhqSVVXN2Z2eEp0djljS29rY01saXB1Yk4yOWd5dVF2OGRsbjhkaXliUWRlZmZWMWpCOC9UaEtsU1VoY2dFMUpXd0VBYytiT3c2YWtyVWhjc0pBLzRVZ1N2ZnYwaFllSHAzRGlYOFBoUTRmUXNpVlBBdURqNDRPRXhBVlFLbFVTRUo1T1RrYmp4azFxYk0zdlpadlJMVnJDYkxGSWdQdzRtZU1RdmZoM1ZsWVdCc2IyeDVVcmw2dmxSbEphV3JwbS9Qanh0eHhBemVUb3JmRmpVenllTUF3RGtxVEFzZ3dzRmdzL1NSQWVqc3lzVExBY0I2VkNDWlhRM25IczJGRW9sVXE0dWJtWDJ6YXBVcWtRRUJBQWIyOXZ1THU3dzdiOW96S3Z6VmxmRzBFUWxuUG56cTBFY052bGhEKyt0bVZMRXRxKzFBNnRXOGRBb1ZDZ2M1ZXVhTkN3SVhidTNBRUE4UGIyd2JMbEsvRk1vMFlnU1JLdnZ2WTZMR1l6YnQzNnI4cmJPSGYyTERxMmI0ZCtmWHVqUWNPR2VMSHRTMDdmdC9ENytWQ3AxZWphN1pVSDl2dXJzazJDSU9EbDZRVmprZkhST1hBRW9QMGdDbTZqL3dkQ0tZUHF0ZnB3RzljR2hKdkM3bTJqUjQzQTZlUlRBSGpHM084WHpBY0FlSGg0NEtmVmE5SHYvUStxWTI5dUh6dDI3SzhLUERYYjNqVVc0SE5yRkVWeEhNZHhGRVdCWlZsT29WQUl3KzBxZUh0NXdXZ3NoRW9vR09UbDVjRnNNdUhGRjErRVhGNSt1b1FFZ0tDZ0lQajYrc0xUMHhOdWJtN1FhRFJRcTlWU0hzWVpBMGhGdWJhb3FLaXJ4Y1hGUHp6cEYzL1h6aDFRV1Boa0N0cnE5WG9FQnRwMzVkZXVIUWE5UGgwQW9OVnFjZkxrQ2NSOUdJdmU3L1RDKysvMWNlb0pWR2FObm4wV08vL2NpNS9YYjBSNmVqcVdMUzN2Nks5YzhTUCsvdnNvcGs2ZERwbE05a0IrZTFXM3lYRWNjbkp6b0gyRWVnaVZIU05BcU9SZ2Mwcmd2ZlExcU45b2lOSS9yOEw5VTN2cXhDRkRoMlBxMTFPUW1EQVAyN2R0UmQvMytBcTVlRzFYaCtYbDVmMlNtSmlZNitDcG1aem4xaml1VE1vWWtNa29LSlJLbU0xbVVDU1BOY1hGeFNBSVFuQzZGRGg4NkJBR0RJaUR6czE1bzdVTTRLbC9Bd0lDa0pPVFUySHJoOFZpRVdheXJKekE5c0d4TEF1Q0lGaU80d2piWEZ1Yk5tMVdIajkrdkIxSmt1MWMvcy9qWi83Ky90Q25wOXZmZm0rbklpcUtiMFU1OE5kK3JGNzFFK1o4TncvQklieG8yWXN4THpqMWFoekJ6bFJhaXUzYnQ2RkxsNjVRS0pVSURBeEUrL1lkY1BEZ0FidjNiVmovQzNidDNJRzVDZlBoNXU3K1FINzMzV3p6K1BGam9PVnkxS3RmLzRFZkgwWHJFTGpIdnlqOWJmazNFN21mN0lTOG5qZEt0bDJHOVhvdWRNTmJJbmZrRHBpUHAwSDdnWDBMVVhoRUJEcDI2b3lWSzVaajVxeHY0T1oyNzFNWWNya2M3ZHJaWCtZN2R1dzRNSHIwNk9OVjhOWVlBVDlZcTlYS0NaRWdLSm1NVXlxVUlBa0NOMjVjbDRZSGVEWVBEVTZmVHNaTDdWNUd2UVlOOE8vRkN4VURHd0NFaElRZ0t5dkxhZXVIQ0d3aXVERU1JejJFR1ZJV0FDSDJ0U1VuSjVzTkJzT1NnSUNBcHhMWWZ0MnducS95Y1J6YXZmei84SDcvV0FCOG04TlhrNzVBWVdFaG1rWkY0ZERCQTFJdTZrR2JiWkdDWTFsWXJWWnB3cVRiSzY5aXlPQTRkT2pVQ2MyYVBZKy8vdHFQYzJkVDhOblljUUI0Z1JHQ0FFaUtRbjUrSHJadTJTSjhqLzFzYkdCUUVJNGVPWUs2ZGNPUmw1c0xYejgvMEFvRmZscTVBdm41ZVhpM2QxOFVGUmx4NE1CZmFOS2tMSisxWlhNU052MjJFWE1UNWo4d25ycXFidE5rTXVGMDhpbk1tREVOY1lNK2VpaVU3cVpEdDJEb3RycjhNYjJlQzdxSlArVFArY0Y2TXcrcVYrdkJjamtiY0RndU8zZjhnWDE3OTJESzE5UHd6ZXhaK0hyYWROU3JkMjhBYmJGWXNIT252WmI2dFd2WHRoWVVGRGhPRjRnZVd6bUdYSXFpUUZJVXdIRlMzNnhjTGtkQVlDQTBHZzEwV2gzKytlY00vUDBEUU5NS1hMMXlCWVVGaGJqNDd3WGs1R1NESkVuSTVYTDBldnVkOHNBbWhxUzV1Ym5JejgrSDBXaEVjWEV4VENhVEhialplbTBNdzNBY3gwRjRTTk1JQUN5QmdZRUhUQ2JUZkpxbWh6eE5vSlo4NmhTMmJFbkN3aCtXZ0tJb2ZESnFCRUpEdzlEdTVmK0h1WE8rUWZzT0hkSHp6YmR3N08rak9PVGdwVHdvYzJ6UW5URjlLbVpNbjRvT0hUdmg4eThtSVRLeUhpWitPUm5mTDBpRVBqMGR0VU5ETVhQMnQ1S2FVWmV1M1hEMmJBcGkrNzhIaXBMaDllNDlFQmxaRHptNU9YYmJHVFZxTkdiUG1vbmx5NWFnZHUzYVdMSnNCV2lheG95WnM1R1lNQmMvcjFzTHVWeU90aSsxay9JNkRNTmcxa3crREh5bmx6MzMvc3BWYXhBUVVQMjloRlhkNXJBaEg0RWdlSUxGVDBhUGVhQjliRld4a3UyWDRmYkovMEQ1cUpIVmV5TTBiejREOTg5aWtEL2pvTjM3VWxKUzhPMmN1ZkR6OTRlYnV6dE9uamgrejhCV2JoOUtTbjRjTjI3Y0RRRzh6STRGQTFRd1pRQ0FzMWdzMEdpMW5OeEd3MEF1cDVHV25nYVpUSVk2ZGVyQ3o4OFAwMmZPUm9QNkRlRGo2NHVGMzgrSFZxdXpBN1Z5d09idjc0L3M3R3prNWVWSndDYU9XWWtlbTQzWDVoaVMyazBqRUFSaDNyTm56L0pPblRyOWp5Q0lxS2NGMkk0ZE80b09IVHBKellLdnZQSXFqaDM3RysxZS9uOUlTZmtIRXdWRm9QQ0l5QnJmbDA2ZHU2QlQ1eTdsbm8rTXJJZS9EbGF1WTlxNmRVeUZGNjVDb2NDRXp5ZmFQVGZ3dzdoeTcydlJzaFYrMmJDeDNQTVJrWkg0YnA1enlpaUtvckQvd09FSGVzeXFzczA3cmRmOW1rNVhEWDJTREllQ21ZZWtQNDNMVHdQTFQ1ZDcyeWMyckxsTm0wYWhhZFBxdVR3NWpqdnp4eDkvT0JZTWJITnJaaW0zUmhDc1FQbk5XYTFXRGdDVVNpV24wK21rV2RDaW9tSmN1bmdSL3Y0QjZOQ3hFOC9rSVV3WStQaFdQaHBXTGp0YXExYXRjcmsyMFdOejhOcWtjSlJsV1Z2VmVJYmpPQktBdFV1WEx2cnM3T3dmdkx5OEZqNU5YcHR0ejZ2QVl5Y2xuR3V5SWRabGo2OVJGSVdpSXVNalFXamc3ZTE5VHltU3RMUzBqV3ZYcmpVNkFUV1RIYWp4bkdzc1FZQWpTWktuOXBielBXcmkySlNDcHVIdDVZWDY5ZXNMdEVTKzhQRHdnSStQajkxa3pxREJ6Z1BDY3Z3Njd1N3VjTmJiVmtIakxpZlNHMVhVdE92dDdiM2RZckVzZmxwTzBPYk5XMkRYenAwb0tTbUJ4V0xCdHExYjBFTG8wV3JhTkFyYnQvRW56T1ZMMWRQL3BGS3BYYWh3bDJ2ek1OZXNvbTM3K2ZtaDJGaHhsWjBMOTdoL2o2b2F2a00wdGRvK3QxaGFXcnA2NU1pUkYyMUNVSk9EdDJaWE1DQUlnaU9FWm44WnJ6akZ5ZVV5WVJhVWxtWkIrU0YzZ1NYWDJ4disvZ0dTZHVsZGVXd0FYMGdRdlRaYnFuQkhyODIyaUNCNmJTeGZCbU9FU2lsSkVBUjE2TkNoWlczYnRuMmVJSWhtVDlLRk0rQ0RmaUFFN2pWZlh6OGtKQzdBODgyYm8xUG5MaGowSVY4d2FQUGlTMmpYN21VQXdQQVJvL0RseE0veDY0YjFDSStJNEJPbVQ5Q2QvbEd5SW1OaGhhMEw1RU5hc3lKaklhZ0tXa2dDQXdPUm5wNk96SXgwcUFXaUJUc2JHZ1V1TWZtZVowYTVjQTlnYVBWbGhPclVqWkFHNFRtT083MW56NTY5VHZKcXR1MGRqa1VEZm5SS0hKdVN5eUNYQzU0YkxZNU5sUTI1ZTNsNndjL1hyOG95bFU1WFdTNlhJemc0Mks2SVlFdHBKSWFpanUwZlRnb0pWZ0NXZHUzYXBXWm1aaTcwOGZGWjlEaGVKRm9uK1k5dGYreXE4UDI5M242blhESVRBUEx5Y2pGejlyZHdjM1BEbmoyN1VWSlNVcVZ0M1Nsc3lNN0pjUUdiZ3htTmhmRHg5WEg2bW8rUE43S3pIL3lhR1kyRjVRZ0JiSzFaczJZd0dBelE2L1VvS3N5Mzc1UFVBaGhiRzBEdCs5aURiT0J5ZHZWZEYxb050Rm9OYnQ2OHVmSEhIMzhzcUNnRWhZT3lPNStWRVpUdk9BNGN5M0ljeTRKbEdUQ01sWDlZTGJCYXpMQ1lTMkV4bDhKVVdneFRhUkZ1WHI5eTc4QUdBQUVCQWNqTnpiWHoycHpsMm13OU5vZENndWkxV1FpQ0lIMTlmWGVXbHBiT1ZTZ1VIejl1RjRtc211N3dwU1dsR0RONkZLLzhydFZLN1JPMmQzUm5YZFNWV1dob2JXUm1HcENoVDROVzUrYlNQREFXd21nc0JHTzFJclMyY3hBSUN3MkZ3ZkRnMWt6Y0o1WmhFQlphT1RENStmblowZTg4NnBhZm43L2twWmRldWxTUnQwWVFoQWhzREVFUWpNamNJYXBPMFRRTmxVb2xlR2RsZE45ZVhsN3c5UzFUbldyUW9BRWFObXhZOVd1MnNoZHIxNjVkWVYrYm85ZkdzaXpoVUVnb1Z5VmR0V3JWMHY3OSt6Y2lTYkw5NDNTeCtQbjVJVjJmY2Q4WFFGU3pabGk0cU9KUjJxSWlJd0lEN2s3TWhTQUlORy9lSE5kdjNFUk9UamJ5Y25KUVd2cDBraytxVkdxUUZBVWZieCtFaG9aVSt0NFcwZEc0ZWZNL1pHWmwxZWlhcVZScVVESVp2TDI5N3docWo1dFpyZFo5RXlkT1BPQUFhcVVpc0FtZ1pwOVhFN1FNUkNWM3VWek95ZVZseEpHMkFPZmg0UUZ2YjI4RUJBU2dkdTI3V3p2aVRvSWp0Mjdkd3ZuejUzSHQyaldrcHFiQ1lEQWdKeWRIQWp4SExWSUI5QWlXWlFtV1pTbU80eWp3V3FRMHgzSEtHemR1dEFvTkRaMEw0TEZTSHpsMUtoa0VRVUNqMVVGZHpYZjQ0aUlqaklVRkFMaHFKNXAwbWN0cXlOSVBIVG8wT3lZbTVwWUFaQ1hnTlVLTFlLOFBhaXVseDloNmF3cUZncFAwUVRXODBMR0hod2U4dkd6RVdlcld4VFBQUElPUWtKQzdpN0x1OUlhUWtCQkpVTmt4MStiWStpSEtZbkc4MlU0a1dIbm5naUREd3NLT0Z4UVVKT3AwdXFtUDAxRnMxaXdLNmVucE1CZ3lVVmlRVnkwc0hBRGZ2eVNUeVJBVUZJaUFnQURYNWVLeXg4SnUzNzY5S2lZbUpsVUlNOFhRczlSSkNHb1Z2RFZwMEYwaWpSUkNVVnVhYjFHL1FBeEZhOVdxZGRlZ1ZpVmc0L000b1U1emJVNTYyc1JDZ21Odm16aHVaU0VJZ25KemMvdlpaRExWcFdsNndPTjBNQU1EQTZ1TjNkWmxMbnRjeldnMHJnNE9EajRGKzlZT3h4RFVZaE9Dc3M1QzBJcEFqVmQxOTBGUVVCQkNRMFB2YVIrcnBCT24wK2tRRWhKaVIyOWt5N2dyRHFrSy9XMTJ2VzJDMXliMXRva0xzV3ZYcmlVc3krNXhuU1l1YzlsamxWZmJ2M0Rod2oxd1hnR1ZQRFk0eklNSzVKR2NMYWpSQXNXM0dJN3FkS0lvQzU5WEN3a0p1ZWVKRE5uTm16ZXJqb0k4VlpIVDdubnhPZkYxNFNFbThGaWhBNThRd2UyVlYxNUpPM0Rnd1BjaElTR2hBTUpkcDR6TFhQWm9HOGR4MTA2Y09KSDA2YWVmRmpvSlFjdUJtaUNBYkNlblo0c2ZGZUVJTCtSQ2dtVlozQTArMlFIYjNiaDZ2cjYrVGljUmJBU1dZVU1mVHBoTUpoQUVBVUc2VDJvQklmaGZSTFpwMCtaRVRrNU9ncWVuNSt5cWhzVXVjNW5MSG82emR1M2F0VFZ2dnZsbXFvTzM1aXdFdGRxMmRvamhwOER2S0JVTXRGcXRYZWdwVmo4akl5UFJ1SEZqcU5YM1BpRnlWMkNpVnFzUkdocGFib2EwZ3ZsUmptVlpRaXdrY0J6SENnVUYyNmtFMHN2TGEzTnhjWEdRU3FVYTR6cDNYT2F5UjlPeXM3TVhoNGVIbjdYeDFFcHRId1JCbUd4QnpURUVGU1FHeXVYVmJNSE5WOURXRFEwTnZTOVF1MnRnQS9nRWVrVjhiYzdHck1UR1hRSGNPR0VxUWN5M2tRRElWcTFhTFRseDRvUy9YQzd2NXpxRlhQWVVoM3JRNi9YSXlEQ0FZUmdZalk4R1EzTnBhZW5QNzc3N3JtMi9XcmtRbE9NNENkUTRqbU1GUmx5T1pWbU9ZUmc3dmo4eHNoTWZZcFZVb1ZCQXJWWkRMcGZqMHFWTER4YllBQ0E4UE56cHFKV1RhUVJPNkdjVFI2M0VXVkxiRmhEaW4zLytJZmZzMmJPNGZmdjJmaFJGZFhHZDRpNTdHa0V0T1RrWkhBaHBHc0wvRWRndmk4WHk1MDhyVit6S3ljbXhPQUUxMndrRGZteUtJRmdDWVBsMEZLL2VMakIzY0VvbEw4U2kwV2o1bmpWM0QzaDVlOEhmUHdDMWdvTVJYamRjMHRHNFg3dW5iNkFvQ25YcjFrVndjREQ4L2YzaDVlVmxWeWxWS3BXMitUZE9aQUt4VmJZUzNGVXIrQllRYytmT25WTXZYYnEwa09PNFk0L3pDYnBwMHlZb2xjcUtFeFZXSzBhTUdBRS9Qeis0dTdzakxpNU9VbmR5MmROcmVyMGVIQWo0QndROU1tTnhMTXVlUEhUd1lOTEVMeVlVT09UVVNvUkhxUjJvU1hSRUpGZStDbHArdWtEbnBvT0hoNmRFUlZRN05MUmFRTzJlZ1EzZ0ZXM0N3c0lRRkJRRVIyMVNKeXBYb3BxelhRdUlBN2labm5ubW1aUzB0TFFGSE1kZGVWSlA0SEhqeGlFcEtRbnIxNjlIVWxJU2R1L2VqV0hEaHJtdTdLZmNESVpNYUhWdWo4eitjQngzOWR5NWMrdjc5bmtud3dIVWJDdWdKanRRRTNyV1NGS2FCNFZjSnVma3RDaDBySUJLWlQ5bDRPUGpBLytBQUlTRTFMNHY3WVZxQXpZQUNBNE9SbWhvS0FJREF5WCt0a3JBRGJiOWJRSi9tMFFsTGp4TXdjSEJCM0p5Y2hJQVpENXBKMjlSVVJIbXo1K1AyYk5ubzIzYnRtamJ0aTBXTFZxRUZTdFdJQ3NyeTNWMVA4WEdNTXc5ZVdvWHpwL0RxQkhEcTN0M3NtN2V2TG02YStjTzEyRS8yRzRIYkFSQldEaU9zNGlDeHh6SENSeHJGRWVRSklxS2pNak56VUdtd1FBQ3ZOaTBScTJHMldUQ2diLyt3cFl0bS9IbnJwM3c5dmF1OXNiMysvYjc2dFdyaDlxMWEwdmc1dUhoWVNmaFp3TnVZa2dxOXNPeHprSlNBQ1lmSDU5dCtmbjUzd2tMV0tQV3FsVXJUSmt5QlMrLy9ETFVhalVpSWlMd3h4OS9ZTzdjdVFnT0RvYTd1enNHREJnZ3FTMk5HREVDblR0M3R2dU83dDI3WTlDZ1FVNi92MmZQbm1qZXZEa0FJRGs1R1NVbEpXamJ0cTMwZXBzMmJRQUFSNDRjY1YzZFQ3RVZGaGJjMCtmcU4yaUlpVjkrVloyN1VxclhweTl2MDdyVmVaUzFkWlRhaEo2OHQyYlgya0V5SkVteEhNZXg0RGpJWkJUTUpoTlVLalVYRWxJYi9nRUJTRTlQaDFxdGdWcWpRVXJLUDNqbDFWY3hldlFZUkVSRTR2Q2hROVcrbnZmZE8wWVFCQ0lpSXB3cVdqbXJqb290SUFBSUFFNkxDUnpIa1I0ZUh1dU5ScU5HbzlIRTEvUkpOWDM2ZEd6ZXZCa3hNVEVZTkdnUWV2VG9nZTdkdStQQ2hRczRmLzQ4MnJWcmg2NWR1K0tOTjk2NDYrL3UyYk1uY25OekFRQzNiOThHVGROMm5GeHl1UnplM3Q1SVRVMTFYZDB1SzJmWjJkbVkrdlZrWkdVYVFKQWtCZzhlZ3BhdFhrQnFhaXBHalJnT2k4VU1EdzlQTEYveFUxbTY0N05Qa1piR2E1Ym41ZVZCcmRGZzdicjFBSUNyVjY4aVllNGM1QmZrdzh2VEMyUEdqcE5FZWdCZytiS2xpNy80ZlB3cEIxQXJ0UUUzdmxnQVdJUnJsaVVJc0FSSmNBUkhnT000VGlhVGdXVlp6dDNESFFxRkFnUkJRSitlRHJWS0RZcWlvRmFyVWI5QlF3VFZxb1dpSWlNT0hUejRNcm5Fd0FBQUlBQkpSRUZVNkFFYndJOWNoWWVIbHlPakZNdThUZ2JrYmZ2YklJU2s0bVNDQ0c2RVZxdGRXVnhjckZLcFZDTnI4dVRwMGFPSHBJMzR4aHR2WU5teVpaZzZkU3AwT2gxYXRteUpaNTk5RnVmT25ic25ZSHY3N2JlbGZ4Y1hGenN0TENnVUNwaE1KdGRWN0xKeTl2TzZOV2pjdURINnZmOEJybDI3aGdYekU5Q3kxUXNJRGc3R0x4czI0dkxsUzVnNlpiTGRaNmJObUFVQXlNL1BROXpBV0l3Y05Sb0FZRGFiTVhYS1Y1Z3lkVG9DQXdPeDQ0L3QrSDdCZkV3U0JJYnk4L04rK09MejhZZWRoSjRsZDhpcmNTekRpRlJsa010cFVad0ZSVVZGTUFwc3hrb1ZINzFwdEZyNCt2cGkrN2F0eU0vUFIxNWUzcU1KYkFDdmNHVkxJVzdidEd2anNkbjJ0VW5neHBhcDZqSUMwRW5nOXRaYmJ5MVp2MzQ5clZRcWEwekd6M2I2UXFGUVNQbEQwV2lhcmhiZ1VhbFVNSnZONVo0M21Vd1BSWi9TWlkrK1JiZG9pWVM1Y3dBUWFOR2lKV1ovTTZkS24yTlpGbDlPbW9odXI3eUdGaTFhQWdDdVg3K0cxTlJiaUIvTDk4S3pIQXVOb0YxUVdGaTQ3SjFlYisxSCtha0MreERVUmtKUEZEdG1HSWFUeStVYzc1eUFvMm1lTERYVFlJQkdvMFYwZEF2OC9mZFJ1THQ3UUtWVWdtVlpyUGh4T1hyMWVoc05uM2tHNDhlTmZYU0JEUURDd3NMc3RCRWNweEZzaUNoaDQ2MXhBdmlKa3drUW12MUFFQVN4WmNzV1l0cTBhVXZpNCtObENvVWlyaVpPSHBrVEh2cUsxS1NjUFcreFdLcTBuZURnWUpTV2xpSXZMdzhlSGg3U1o3T3pzNnZNNWU2eXB3ellvbHNnY2Y1Q0hEdCtEQ3RYTEFkTjAvaHk4dGQzL056U0pZdWdWQ3JScCs5N2R1ZHBRRUNBWGRnS0FFYWpjY1dFK0hGN1UxTCtjZXhUY3dRMU96WmNvZG1lb3hVS2pwYkxZYlpZUUpFa2FJVUNGRVhCMTljWGRlclVoYnU3QndpQ1FHQlFJSFJhSFJpckZSTStuNGp3OEhCY3ZQaXZkQzA4c3NBR0FQWHIxeStuUmVvWWpqcDRiU0s5RVd4eWJveVFneU1JZ2lDKyt1cXJQRjlmM3lVREJ3NGtGUXJGd0lkNW90RTBYYzUxdm5UcFVwVTRvNktpb3FCU3FYRGd3QUc4K3VxckFJQ0RCdytDSkVtMGF0WEtkUlc3ckp4Tm16b0YwUzFhb24zN0RtZ1IzUUp2OXV3QmxtVXI3ZmM2ZVBBQTl1L2JoNFdMbHRqZGlDTWlJbEJRVUlDLzl1L0RpMjFmd3RXclYzSHE1SW1menA0OXUyZmp4ZzBsTnA1YWljUERSQkNFV2NpcDJiSGhNaXpMeVNnWlpESTVTa3BLT0hjdmJ5aVZTdWgwYmxBbytQK1hta3I1SnR4YXdRZ0xEVU5BWUNBVU5NM3Y2NEVEYU5LMDZhTVBiQVJCb0g3OStoS3dPWHBzRE1QWWVteTI0QVpoRkFOQ3ZzM3VPNGNORzVaTjAvU1NmdjM2NFdHQ1c4dVdMVEY3OW13c1c3WU16WnMzeDZKRmk1Q2VubDdoKzlldFc0ZmMzRndNSGp3WUdvMEdzYkd4R0RwMEtIUTZIV2lhUmx4Y0hQcjM3dzh2THkvWFZleXljdGFuejN1WVBYc0cxcTFaRFpabE1lcVRUMEdTcEYzeElEOC9IMi8xZkFQTm5uOGVZOGVOUitLODcxQmFXb29oZ3orVXZpZHh3US9RNlhTWU5tTVd2dnYyRy95dzhIdlFOUDJUaDZmbm54dlcvMUlFKzBLQmJRT3V5WEVPVk9wWG95Z1FESU9Ta21LVWxwWndhclVhbmw1ZVVLbFVxRmUvUG03ZXVJR2pSdzlEcDlPaDE5dnZJaVE0QlBYcTEwZjgrTTh4ZWZJa1dNd1doSVNFWU16WStFY2YyTVJjVXIxNjlld3FwTGE1TmlHdlZxNllBUHRLcVMyNEVRUkJFSEZ4Y1prbWsyblJ3SUVEV2FWU0dmY3dUclRYWDM4ZEkwZU94T2pSbzhHeUxQcjE2NGNCQXdhZ3ROUjVaOHFHRFJ0dzQ4WU5EQjQ4R0FBd2UvWnNXSzFXZE8vZUhTUkpvbWZQbnBnN2Q2N3JDbmFaVXd1cFhSdHo1ODEzbXRiNFpjTkc1emZUWDM2dDhQc2FOR2lJaFl1V3dHZzBycGcxYzhhZVpVc1hWd1Jxa3FjbWdocEprZ3hRUmhvcG95aE9ybFNDcGhVYzMzd3JpTEtvTlhCemQwZGtaQ1Q4L1B3UUZGUUxZWFhxb0c1NE9KUktKWjU3cmpGK1dMUzBSdGZ0anBvSDkyTVpHUms0ZCs0Y3JseTVndFRVVk9qMWVtUm5aNWZUU3hCQ1YwSUFRRUpnNFNVNGppTnROQlBrSE1jcEFDZ25USmpnSGg4Zkg2dFNxWWE0VG4wK1VYemo1bi9JeWNrQnd6QW9MWGs2UjdTVUtoVW9pb0tYcHpmQ3dtcFhHcTV4SENlc1dUYXMxcHBiTTZWS0JabE1CbTh2YjRTRlZVd1J0bi8vZm9SSE5uZ2c2MVJZV0xoc1F2eTR2VGJocHpOUXMyWHNzSWlNSFdKelBVWEpPSUhlbXdjMXBiMjRzYWRubWNwVWFGZ1k2dGR2QUY5ZjN3ZDJMdFFvQjVxL3YzKzU0WGduRlZMWTVObWtTcWx3d2RyMnVJbUZCVXlaTWdVblQ1NzhZY09HRFdhMVduM1ByU0FkT25UQW4zLysrY2hjbUhxOUh2NytkemY2YkRLWmNlYk1HVkF5R1hSdTdpNzV2U0lqY3ZOeWtYVXlFMDJiTklWWW9YTUV0Uk1uVG9La0tHaDFOYjltUlVWR1pPZmtJRE1yRTlGQ3MzWkZkcnVHK3hrTENncCtHRHBrOFA1TGx5NmFLd00xbEZWQUpUMVFnVGhXVUpvaUlJeE9TYXdkSkNWUWYxTVU1RElaeFBsUXRWSUZzOGxVNDcvdGdRRWJ3SXZCaU9CV1dYVlVySkFLdld5YzFXb1Z3WTJ4RFV0RmNOdStmVHMwR3MzU3dzTENVcTFXT3hLQThtNzNiZGV1WFkvOWhaeXVUd2NsazhFL0lBZ3VBelFhTFRRYUxUTDBhVWhMVDBPWUV5TFY2emR1Z3FTb0I3Wm10dnQwOCtaL0NLMUVocStXVFp0Uk5WdHBkbmIyNGxZdG14OUdlZmJiaWp3MUt3aUNJUUNHRUR3MUdVVnhNcG5ncVlsRDdXbzF0Qm9OZEhha2tZR29YVHNVa1pHUkNBMExlK0Rud1FOaHJRMFBENjlJWUZrQ09KdTdxWlJyczFxdDRtdE93UTBBZERyZHF0emMzR0lQRDQvaEFIeWZ0Z3M1T3lzYldqZDNGNkk1bUZibmhxeXNiS2ZBbHBPVEE5MURXRE90emcxWjJWbVZBbHNOV1paZW43NDgrdm1vVTdDZi9YVDAwdXhCRFFLb0VTUkhFaVJIa1FKYkIyMURHQ25NZjJvRnZRSStCUFZEclZwOFh1MWhnTm9EQXpZK2FkbkFLYkE1ZW0yaTV5YUNHOEFQQ0ZjQ2JweW5wK2ZHakl5TUlsOWYzNDhJZ29oNFdpNWVqcnYzNGVtbndYUEx6OHR4K3RyRFdqT05Sb3Y4M0p4NytpeVJuQWxpZmpKdzVlNjY5RGx3VjIrYXNsYTMvbS95K1R0NGFxWnlvRVlJb0VZU0FndXVESEk1elNsb2thbERBRFdKQmRjTGJqb2RMT1pTNU9WbUl6TkRnOHlNTktmckVGWW5IRzd1N284L3NBRkFvMGFOeW9GYkJjQW1nWnVZY0tzSTNNUy8vZjM5LzdoKy9YcEI3ZHExNDBpU2pLNStFT0haVFEwR0E2d01BMk5oOWJDYmFyVTZ5T1F5K0FtMHlIZDFzaE5BU1ltTHk2MGlLNm1BNSs1aEZsZnUrWGdsSmdOWDd3N1VXSEFuejVYY1d0ODVkZloxbEovOXRHL3BzTXVwbFFjMW1RQnF0SUwzMUJ5TEJhTElzZFZpZ29lSFI2WEs3VVZGUnR5NGZoV05telo3TW9DTklBZzBhdFNvUXEvTkdaalllSEJPd1UzNFhvN2pPSzVPblRxSGs1T1Q4NTU3N3JrQkZFVjFyazVRUzA1T0JnZ1NHcTJPWnpldFJtM2pvaUlqMHZVWlNFOVByM1lsK0YwN2QyRDVzcVV3R0RJUUZCU0VsYXZXNHZMbFM0anRYOGJDUGpaK0FycDI3ZVpDd2tmWWlMc0VOUXZIL0htdzhHSlNuNHlGR1RiaHArUHNaNGtBYXVaeU9UVTdVSk9ERmdTT2xRcEJMay9qV0FIMVEyQlFFSXdGZVpXQ211MDUvMFNFb3FMSjVYSUozTzdnc2RubTJ5b0NOM0h3bGhORDA2aW9xSE1iTjI2YzFhMWJ0MHlhcHZ0V3h6N3I5WHFBSU9Iblh6Tml5V0p5MmFCUFEzcDZlclZ4VTZXbHBXSEc5S240Y3ZMWGlJNXVnWUlDbmhvbklpSVN1M2J2QXdBTWpIMi94bzcxc3FWTDhIcjNIblpzSnVKK3paM3pEVkpTL2dGTjAyamZvUk1HZnpRRUZFVUJBRkpUVTVFd2R3NVN6cVpBb1ZDZ1k4ZE8rREJ1c1BSNlRkaWR0dmxpekF1UXkrVWdDQkpoWVdIb0h6c0FyVnZIUEpxZUttditlVTMyb1YxZjVQMVdVQW1vbGZQVUJBTFlDa0NONzFWVHFrUVJGbDBacVBueGJSMWhvV0hJejh1dTBlTlVWU01meGthVlNpVWFOV3FFOFBCd0JBY0hTMExNdGx4dVlyT2ZRcUdReEZWbE1obG5JOFRNMkhLNUNUbUNVZ0FsYjd6eHh1MG1UWnA4YXpRYXZ4RmV2eTh6R0RLaDBlcHFmRjAwT2pjWURJWnErNzZMLzE2QWo0OFBXcmVPQVUzVDhQSHhrVHhuUVFxdHdwblk2ckFmbHk5RlRrNTJ1ZWNuVFp5QVdzSEIrTzMzTFZpMGVCbU9Iam1NcEtSTmZQakVzaGc3WmpUcTFXK0FUYjl2UVVMQ0F1emZ0eGUvYmZ5MXh2YXpxdHRNWExBUW03ZHVSLy9ZQVpnOWN6bzIvcnJob1Z5MDNqOTJoOXZvLzBsL2V5VjBoYkpUQkFCWWM2MUYzN2UrTnZIM0wvSit5M2ZJcFJVTGo3THFweTJvZ1dCZ1UvMmtLRms1VUFNSFpHWm1vcmk0V01xcCtmcjZJaWd3Q0tHaFlhaFh2ejVvWVZSS1BNK2FOV3VHamgwN29uMzc5Z2dLdXJzcTlJb2ZsNlAzTzczd2RxK2UyTHBsYzVrM2FyRmc5cXdaNk5mM1hmVHYxeGNIRHg1NCtCNWJtWmVpUWFOR2pad054WmNMUzBXeFZkaFVTNFVUMG5GQ2dSUEQwbi8vL1pmVjZYUXJNekl5OUw2K3ZvTUlncmhuVVdZclkzMGd5V2FOUmd0andmMVR1Sncrbll4SlgweUEyV3hHY1hFeHVyL0doNWs5M3VpSmZ1LzNyOUozSEQxeUdJa0o4NkRYcHlNME5BeWpQdmtValo1OVZucDkvNzY5V0xac0NUSU5CdmdIQkNBdWJqQmF2Y0JmYk1PR2ZvUmIvL0ZDdHlNL0hnNlpqRUp3Y0FnU0Z5d0V5N0pvMjdZZHVyM3lDaFFLQmZ6OC9kRThPaHFYTGw0RXdGY3NQYjI4MEx0UEg5QTBqZUNRRUxTT2FZTi8vNzFRWSt0K045dFVxVlJvM1RvRzh2Z0ptUGpGQkhUcTNPV2hNTE5vK2pTR2NWa3kySndTSVp6aHJ2MW56bHJ6d3MydnpzSmVUY29abjVvUWZoSldnQk5CamVVZEJ0S21VQ0RuYUtGUWtKK2ZEMFpRbXFKcEdsNWVaWjVhYUJnUGFvNlNlWFhxMUFGRlVkaTVjeWNVQ2dWZWZ2bGxaR1ptMnBGR09NNjlpbitucFB6RG4yUExWOEJrTWlFdWJnQ2ltajJQb0tBZ2JOKzJGYVdscFZqeDB4cms1T1JnMElleGFOeTRpVVF0bnA2ZS9uQThOdEYwT3AxVHo4M1QweE02bmM0WnhiaWRNSXlvbitEZ3Vaa0Z6NjBVUUxHL3YvOGYvLzc3N3lTR1lmYmU2MzVXVjZHZ1N0c3kzbi91b1duVEtHeEsyb3FQUjR4Q3JWckIySlMwRlp1U3RsWVoxSzVldVlMUEo4Umo4SkNoMkxwOUo5NThxeGRHalJ3T1EwWUdBT0RtelJ1WU12bExmUFpaUExaczI0RlhYMzBkNDhlUGswUnBFaElYWUZQU1ZnREFuTG56c0NscEt4SVhMT1JEQkpKRTd6NTk0ZUhoQ1lDbjBqbDg2QkJhdHVSSkFIeDhmSkNRdUFCS3BVbzYwVThuSjZOeDR5WTF0dWIzc3Mzb0ZpMWh0bGdrUUg3UVpqbHJnUGJENS9rYkwydmQvL2Z0Yy9OZnVQbFZDdXdaYjRzZEhxVUUvekFEaEFVRXlrQ056K3h3VnF1Rms4bDVDdis4dkh6STVES29WQ3JVQ2F1RHFHYlB3OHZiRzFxdEZyNitmcnluRmhhRyt2WHFRNnZWT2wzWHRMUTB5VmxoV1JhZW5wNTI3MW02WkJIV3JGNEZBRWhKK1FjZkR4OEtBTGh5K1JLYVJrVkJvVlRDemQwZEw3endQNXc0enVzOG5UbHpHbTNhdkNpY1R3VGtjaHFYTHBVZGgxa3pwejljWUFNQWQzZDNDZHhDUWtMc3dPME9GT08yWVNrcmhLYmluVW9FdHhJQXhjODg4OHlwbjMvK2VVcHBhZWx5VnhyNnpyWmxTeExhdnRRT3JWdkhRS0ZRb0hPWHJtalFzQ0YyN3R6QmgwTGVQbGkyZktVa2xmYnFhNi9EWWpiajFxMy9xcnlOYzJmUG9tUDdkdWpYdHpjYU5HeUlGOXUrNVBSOUM3K2ZENVZhamE3ZFhubGd2NzhxMnlRSUFsNmVYakRXY0JLOHdodmd5ak5RZFk1QWlTZTFPdUhYNVN1Ny9UYm1sZ09vT1FKYkNRR1VBb1NaZjhCS0NLcFNKTUNSSURpYXBqbVNKRkZTWE13VkZCVEEzY01kT3EyT24vMTBjNE83dXp0VUtoWGMzTno0bkpvQWFyb0tSRmhvbWdiRE1QRDI5a1pNVEF4WWxwWDREa1Y3NTkwKzJMdDNEeExtZllmSlgwN0MwR0c4ZmtQZDhBaWNQSEVjUnFNUkJRVUZPSGZ1ckhUVHo4L1BoMUtweE5tektmaHN6R2pRQ2hyNStma0FnS1RmTnlFOFBPTGhoYUsyNXVIaGdVYU5HbFY2RW9uL0Z4NGNRUkNFeFdMaGJPc01MTXR5dHYxdFlsZ0tnT3ZkdTNjYWdJVHM3T3diWGw1ZWd3RGNjNGIrd29YemlCc1lpMlhMVnlJaU1oSkxseXpHNXFSTmtwZFNrWDAzNXhzY1BuUUlPVGs1bURqcFM3UjVzZTBqQ1d4NnZSNFJFWkYyejlXdUhRYTlubWN4MFdxMStIUFhUa3laOGlXTWhVYTdNS0txMXVqWlo3SHp6NzFJVDAvSEY1K1B4N0tsU3pCZzRJZDI3MW01NGtmOC9mZFJKQ1FzY01xWlZ4TlcxVzF5SEllYzNCeG9IMUlQSVZka1NiODhmL2VxaHNlR25NSXhpZnhSQkRaVEJhR25CZUJFcFhhR0FNRUp3QVlLQkNlWHk2RlVxcmk4dkZ4UWxBd0IvZ0ZDOVZNSE56YzNlSGw1UWEvWHdOUExTd2cvRzl5eEYwME1SdzhkT29TbVR1aUp0Rm90QmczNkNDTkhETU03Ny9aRy9mcjh2R3lUSmszUnNWTVhEQnM2R081dTdsQ3IxRkNwVmRMbk5tOU9Ra2xKQ2FaTm40VjUzMzBMQU1qSTBHTnowdTlJblAvOW93RnNBT0RwNldrSGJqWWdWZzdZeEdPTHNpWmV3bWF1VkFRNmFhNE5BQ3VTNG5sN2UyODZmLzc4alhyMTZ2V2pLT3JsZTkxZnVWeU92LzdhajRqSVNCdytWRFhPOWhFalA4R0lrWjlnbk1CZytxaWF2NzgvOUE1VVRMZHZweUlxaW05Rk9mRFhmcXhlOVJQbWZEY1B3UUlQM1lzeEx6aTlJVG1DbmFtMEZOdTNiME9YTGwyaFVDb1JHQmlJOXUwN2xFc0FiMWovQzNidDNJRzVDZk5ydEpIelhyZDUvUGd4MEhJNTZ0V3YvOENQajVXeDd2dGJmMzV6dHgvalUxR0pPcnQ5Z1lDUWV0UUFnaVVKZ2lWQWNDVEhnZ0xKeVVCQ0pwTnorZmw1Y0hOM0IyTzF3bURJd0xQUE5TNmJLUER6aFZ2cUxmajYrcUYrL2YvZjNwbkhSMVhlKy8vem5HWDJ5YjRNeVlTRWtJUmN0dUNsd3JWaVhTNHVWRnNwdUsrWHFxMC8vZlc2SWxhOXJiVjFCWmNxeXExNlJhdTFldVVWYmRVZjlkNjZ3cjBnb2xHSkNZUWtKQ1FrSVNHUVpTYVptYk04dnovT2VVNmVPWmxKUUFGSnpQTjZIZVprTXBNWnpweDVuODkzTDBmcUtNZUlOWnY5N0xQUEFCanppTzJkcUJzYUd2REEvZmZpbnQvZWk3WFBQWXZKaFVVNDIxVEtsMTUyT1M2OXpFaHN1T2JxbjJMcTFCTEx5bk83M2JqbnQvZENFQVJFbzFHa3BxYmlyVGZmUkgrb0g5ZisvSnB2M3hTMXcyM216SmtvS1NsQlFVRkIzRmkvMU5SVXkrZm1kcnVaYVVyWjNGS2JXY3I4Ym9yTk5CMWdwdW1xVmF2dUhoZ1llUExydnRkL21ENERIMys4Q1hWMU94RGcwak0rM3J3Sks1YmZZdjM4NkNPcnZyWG8yWWhmRHJPN01RQlFYYmZhU2dIQTJlZjhDQjkrK0Q2MmJQa1lxcXJpdmZmZXhWZlYyM0RHbVdjQ01BYU1FQUlJb29qZTNoN0xSMEwxK0tEUHBMdzhiTjYwQ1lxaW9NdU05anFjVHJ6NHh4Znd5aXN2UTFFVTlQUWN3SVlOSDJIMjdObERwdkNiZjhVYnIxZmlzY2RYSDdVK2RRZjdtdEZvRkI5djNvUUg3cjhYUDcvMnVxTWVPT2pUQnArOS9mSGZyVDM3YjNlTVpub09BSWlZMDZSaUFCUkN6SUhHRkxvZ2lWUWtBcFVnVUJrQ0hFU2toQUIrZndyeTg0T1lWdjRQY0xuY2NMdmN5TWpJUkU1T0R2THo4cEdlbG82OHZMeFJvUVlZRVZRbVJCd09COUxTMG9ZMWFmMTA2eWU0L1pkMzRwUlRUOE1qanoyQm1xK3E0NEtIaXFMZ3BSZi9DRUtBV2JObVd6NWsxUXhrOVBRY1FFTkRBOHBLeTNEVjFkZmdsVmZYWWUwTEx4NDdpbzAzUzJmT25EbE1zWTJ3VVdJc0VFS3NOdU9ta3FOY2dxL09lclFEMEcrLy9YYjk5dHR2LzQrV2xwYTYvUHo4ZnlHRUhIY283OU1oeS9CNlBIanhqeTlnd1VrbjRhdnFiV1BHaDJaUDBIM3dnZnZ3NEFQMzRmUXp6c1MvL2VwdWxKYVc0ZGUvK1MzV1BMVWFIZTN0bUZ4WWlJZFdQV0pOTTFyMHc3TlJYYjBOVnkyN0FxSW80ZHpGUDBGcGFSbjIyOHFGYnI3NVZxeGErWkJ4Slo0OEdjOCs5d0ljRGdjZWZHZ1ZWai94ZTd6NnlwOGh5ekpPUHVWVVhQa3ZQd1ZnNUNtdWZPZ0JTSktFaXk4OEw5NU1mT2xsQkFLSFA1ZndZRi96RjlkZkIwS0F3c0lpM0hMcmJVYzFqMDBIL2J3aHNyZnlsSmI3NnRBNGxPSmtVMnJXTGNGUUh6VUFSaVVCaUE1UUtnQlVwSVJLZ2dCUkEyUWlVaWNrT05QU2gyby9mVDRVRkJRTTVhbVpnWUlkTzdZUGkzNG1XMDFOVFVoTFM4UENoUXNCQUo5Ly92bXdtUjhYWERnMDdDZ3pNeFBMYnh1YWY3Qng0d1k4L3RnanFLZzREZzg4dU1xQzVLSWZubzI2dWpvc3U5SlFjNys0NGNaaENsczZGcjk0cWFtcG1EVnJsdFVPaFJCaTNmTDczSDBXM0FCUXJxcEI1M3h3aVV4VHJhQ2c0TVBYWG51dDdweHp6cm5BNVhJdE85ajNxS2dxVHZ2bmhmajlZNC9naGh0dnhoL1dQSFhNSGNjenoxcUVNODlhTk96KzB0SXlmTFJ4NURtbUo1NjRJT2tYMStsMDRxNS8rM1hjZmRmOGJIamZ6M256L3lsaE04U1MwbEk4OXZqcWhIOWJGRVY4dU9GL2orcHhPcGpYSE8xNGZkUGw5eWZQa3h3SWgvLzAycjRQMzcvclFHVWZaM3JHRWdITjlLY3BBRFdnUmcyZ0VRcWRnRklDUWtVUUtpb2FKQUF5a1F5b1FZYmI0ekdTYi8xRFByWHM3QndqcGNQTVUvdmU5dzYrV3RHcTJQbWFhOEdDazdCZ3dVbkQ3cGNrQ2JmY3VuekU1eDZUWUdNZk5BODMrNVlBY0JiY0ZFV2hab1VDSDFTZ1hLVUNVMjhhQU8zODg4OXZCZkJrYTJ2cmwzbDVlVmNTUWtadHdxNXJHcjUvNGdJME5UWEZSWG9FVVlSK0JKdDNUcXp4dVVSUlJEZ2Npc3VYMUhYOWkxMjdkbFdlOG9NVGQ0QkxaeG9CYWpFeXBOSllkdzZkQUdhUWdFQUVvUklFeUJBc3FMa2d3K1gwd09QendlZnpXVDYxbkJ5alRLcW9NSEdlV3FMbDhYZ3hNQkErcU1jZHlTVWR5eCsyMSt2RjdObXpJWXFpdFkwQ09tb3FPQll4dFFjVm1HMnEyMDFUQUZvd0dQeGc3ZHExWDExd3dRWG5lVHllbjQzMi9qSXlNdkIvZi9HdjZPZnkzUEx6ZzlqZDNJUllMQWFxNjZpdHJVRmhZZEVSTzBadXQyZUNDb2Q0Ykw3Tlk1YnN0WE55Y3REUnNkY0NXeWpVLy93ZlgzaitvL3Z2dXpka1UybDg1SlBmZUtpWlppZDBFMmpVaUh3S1ZBS0JURVRxZ0FnSFpMaUlETGZEQTA5SkRueG1TZ2VER3QvOTFwNm1rV3hOS1M3QnJzYjZFZUhtOFhneHBiamt1d3Myd0NpL3NzUE5EcmtFSmlwVGIvWXFCY3I1M3BocHFwdW1xUVpBWGJac21iWnMyYkpuNnVycVBpMHVMcjVFRk1WRHlzbkl5OHZEcWFmOU15Ni85Q0trcEtSYVpVeEFmTHJIVjlYYjhNVGp2OGY5RHp5RXFTVmYvME5PZEtXZldFRFlITktiYUFuZjBqRUxoL29oSmtraG1UUnBFdHJiMjlIUjFycGhkMHZyMjB1WExHNUtvdEo0bnhvTGpNV0dWSm94UmNxNGNCczFuNElnVWtrU0lVbG1odzZIREFkckVtbk9LR0Q5MUN6ek16L2Z5Rk9iVm41SXFUWXBxYW1vT0c3dXQvNzVIOUdaQjRkelVVcXQrUWt0TFMzbzZPaEFWMWNYZW5wNjBOdmJpM0E0akhBNGpFZ2t3by8vSTl6Z1pxTHJPcHVsUUFDd2VRcWlDWGlaVXVvQTRBRGdCT0FzS1NseGJkbXk1VWVOdTNaZG1SczRPb00vOTNic3dkeEQ2UERSMU5TTTd2MzdKenJvRGp1T2Jjakt5a1JoZ2s0VFRjM042TzQrK3Nkc2IwY2JNak16VVpTZzBTU2xkRTluWitkL3pwa3o1NU9Pamc3RkJyVm9Jb1VHSzlwSlZCaU5JVFRURXFGc015dDBJRWtTSk1tYVV3QW5CemFQeHdPLzM0KzB0RFJrWkdRZ056Y1grZm41bURKbHloR3RKZjVPS3phTHdJUmc1c3laN0FNYXB0enN0K1kyTEdKS0NLRW0zTUFyTjJhYXdwaEdyd0ZRNit2cjFZeU1qTW9ubjN6eWt3VS9PR1Z4UmtibWxVZjZpaTdMOGlFOXA3QndNcnE2T3JHM293MCtmOHJFeklOUVAwS2hmbWlxbWhCcUFGQlVXSWpPenFOM3pOaDcwalV0SWRUQzRmRExiN3p4eGtlWFhYYlpnVkZVV3BSVGFOWkVkbE9sYVNiTWRBNW1Sc2RiMmRiSzI4MzFValBiZVdkblp5TVFDR0R5NU1rb0tTbEJlWG41bUQ0UHhveGk0MWREUXdQcTYrdlIzTnlNOXZaMjdOdTNEL3YzNzBkZlh4OUNvUkRDNFRBR0J3Y3Q1V2JPWENEY0dFQmV2UW1tZWhOTTBFc0FKRTY5V1FydS9RODJWRXdwTGw0cWl1S1pSK0wvMWJtM0haTUN1WWZjdG9oU2lsMU56ZGkvdnh1YXFpTVMrVzQybjNTN1BSQkVFVm1aV1Nnc0xCaFZiVFEzNzBiWHZuM1FWTzJJSFRPMzJ3TlJraElxTlVWUi9ydXFxdXEvNXMrZjM4SUJMUm5VRXBtZDZwRFphUUhObUUxZ0FzMG9aSTlYYUY2djE0SmFSa1lHc3JLeU1HblNKQlFXRnFLa3BBUlRwMDRkOCtmQ21BUWJBTFMwdEdEbnpwMFczRG83TzNIZ3dBSDA5dmFpdjc4ZkF3TUQvR2kvWVhEVE5JMll3NXZabUQ4R04yYWVzcEYvTWc4M0FNNVBQcTFha0pPVGUvN2g2dFE3RUE0aDFOOEhnQjcyUnBNVDY5aGJ1cTV2Yld4c2ZMdTB0TFRXVkZ4MmxSWkxvTktVQkNwTjV6WnFXakJKb2VZeDB6bjgxbnlDZENQeWFVS3R0TFFVQldZbHlWaGYwbGg5NHdVRkJUQ3JEbUFXeFZ1M2ljeFYwMFNsZ2lBUVFSQ2dLQW9saExDR2wvYkFnaFVwSllRdzA5UTZBWStmZTl6N0pTVWxteDUrK09FelVsSlN6aWVFZkczZDd2ZjdJVWtTOHZJbUlSQUlUSHpyeC9HaWxPNW9iMi8vNjhLRkM2dHFhMnNaek95K3RKak5oOFpEelJZY3NJWVhVMUVVcVNpSzF2ZEJsbVhLZXU0eHFIbTlYZ3RxUnBEQWJEdFVXSWl5c3JKREh2MDRBYllqdEhKemM4R2FVUEtBU3dRMXp2ZkdaaUVTUlZGQUNHRUp2WlFPRFRYVmJXa2hHZ0RWbkcrcW1QNDM1ZHh6ejMzcmpqdnUrUERXVzI4OVBTMHQ3WHhDU1BIRTEzZGlKUURhcnE2dXJyL2VmZmZkVzllc1dSUGxUTWxZQXRPVDNTcDJzNU9kaTh5WHhpYXkyMVdhTE1zVzBPeFFZd0VDbHM1UlZGU0Vzckt5WWUyRXhyd3AydFRVTk9iL0U1RklCSTJOalZhMGROKytmVmEwTkJRS1lXQmdBSU9EZzRoR281WlphaGJvRWxZenljeFNMbXBLYkthcFNDbVZtSW5LK2Q4Y0FKeTMzSEpMeWhWWFhMRXdKU1ZsNlRkcGFqbXh4aFhRR3ZmdjMvL21talZyUG4zMjJXY2pIS0NVSkVDTGNiQ3pSenVaVXJPaW5jejg1S3dVcTlzMFUydDhvQ0ExTlJWcGFXbm0zTThBQ2dvS1VGeGNESmZMTmU2Ty9aajFzU1U0aWJCanh3NDBOalppejU0OTJMdDNyd1U0RmxSZ2dPUDlic3ozeGdHT21GMTlDZk8vSVQ0MVJJUVJYRWdFT01meTVjdjlLMWFzT0RVakkrTmNRc2lNaWEvM2Q5S0hWdFBaMmZtM1gvM3FWMVhQUFBOTWRBU2cyVGZGTkR0VkRtWWFiM2JhVlpxcDFPS0FsaWp5eVlER1VqbUtpNHN4YmRxME1adk84WjBCRzF0TlRVMW9iR3hFYTJ1cnBkNE9IRGlBdnI2K3BFR0ZCSUdGdU1ncFUyOE1jaGpLZlVzS3VPTGlZc2ZHalJ0UHlzM05QVnNRaEJNbXZ1N2pmMm1hdHJtbHBlWGRrMDQ2cWJxMXRaWEJpUWVhY2hCQVk4K3pBZ01BS0IveFpDcU5EeEFrQ3hLa3hFMW5EeUFZREtLNHVCaEYzOUlnNHdrZjI5ZGNSVVZGZkZ1ak9CL2NLQUVHZGlWazZvMXFtbWJsdmNITWRUUFZXMXh3d2VaL2l3RndORFkyT3ZMeTh0NEY4RkZkWGQyY29xS2loYklzLzNqaTZ6LytWalFhZld2Nzl1My9NMmZPbkYwY3pIaVZGa3NBTlNVSjBQamdRRnlTTGEvU2VMUFQ0WEFNODZjeDA1TlA1eWdvS01EVXFWUEhWWkRnT3dNMndBZ3E4SDNiWEM0WCtKUEFEcmRJSkdJQkxoYUxXWkZUQmpjdXVFRDRrWCtzUXdpTWZDSVZnR0lxT0F0d0FCeGxaV1ZiQUh6KzdydnZ2anB2M3J3ZitIeStzd0VFSjVBd3BsMGZyZjM5L2UrOC8vNzdueTFldkhoZkVxQWxncG95a2tJekw1aDhsQjRzcHNXdGtKVHlBQUFUVGtsRVFWVG1CdWk2VG5WZGg2WnBWbDh5UlZHc0JIV202QndPQjhMaE1OeHVOL3I3KzlIYjI0dnQyN2RqKy9idGgrVVkrUDBwRUVYQlNobVpNRVdQb3QrdHJxNE96YzNOYUd0cnc5NjllN0YvLy80Ui9XNW1LVmJDNEFLWDFBdlROR1dsV1hGQkJwdUp5cHVxTWdESEpaZGM0bHE1Y3VYOG5KeWMweVJKT20wQ0UyTm5xYXI2Zmt0THkvL2NkTk5OdFgvNXkxK1Vnd1Nha2dCbzlxQUFnNWxPaUFDanhsT2dnaWhDRWtXSXJDUktraUU3WkRoa0I0eXA3S1pTYzd2aDhYcmg5L21Sa21xTXhzdkt5a0p1SUlCZzBBZ1NIQWwvV3BqTHdaeDdET1Znaml1d1hYVFJSWGoxMVZkeC9mWFhZL1hxb1g1ZnJhMnRhR3Bxd2cwMzNJRFBQdnNNNTU1N0xnb0tDcEw2M2JpRVhwaCt0NUdDQzJRVXdFbEpBQ2NEa0JjdFdsU3dkdTNhK1RrNU9RdS9TVDdjeERxaUY4Z2RQVDA5SDN6MDBVZGZMRjY4dUp1RFVpS2dLVW1BcGlZRG10a2prREpmR2hFRWlLWXZUUlFOb0VteVdSb2xPeUE3SEhDYVVITzdYSERINWFnWjZSeFoyZG1tK1RuNXFLaXB6cjN0eUpzVU9HWnlNY2VkS1NyTE10NTQ0dzA4OGNRVDFoVXFHQXhDRUFSVVYxY0RNRHAxQmdLQllUNDRleTVjTEJhREtJcFFGSVZsZFpORTVxbk5COGM2aFFpbWlTcHhKcXBrbnZBVzJOYXZYMThmQ0FTYUFieStiZHUyOHFsVHA1N2dkcnRQQXpCUjFmN3R3cXh0WUdEZ2c1cWFtcXA1OCtidFpqN1Znd0FhdjZtbVF0TVNtWndNYUlJZ1VFcXBtVjlwSk5xS2tnaEpaTFdlRW1UWllTZzFGaVJ3R3BGUHR4bjU5UHVOeUdkR1pnWnlzbk9SbDVlSHlZV0YxcXpOSTcyOFBqLzI3dDA3QWJZanRSWXNXSUFOR3paZ3k1WXRtRDkvdm5YL3hvMGJNV2ZPSEd6ZHV0VXE5alVuemNjQkxod09XMEdHU0NSaUFjNVViOVFlWE5CMW5ROHdKQW95YUFCRTg0b3RVVW9aMk94S1RwNDFhOWJuQUw0QzhQejI3ZHRuRlJZV0h1OXl1VTZaZ056Umc5bmc0T0JIOWZYMVgxUlVWT3ppMVZVU29La0hDYk9FUU9NREE3cXVVMW1XTVV5bHhabWVUcmo0ZEE2dkY3Rm9GRnMvK1FRWFgzSUpNak96a0dPbWN4UVZUWWtiUlB4TlYyMXREZDUrNjAxVVZNekI2V2NNTDVYMmVuMEk5ZmNlTTUvbHVBTmJSa1lHVGozMVZGUldWc2FCYmQyNmRiamdnZ3Z3NmFlZkloZ01vclMwRkI2UEJ6VTFOYWlzckVSUFR3L2NiamZLeTh1Um41K1B3Y0ZCU0pLRW5UdDNZdCsrZmRhZ0UwbVNhR1ptSmtSUkpLRlFDSkZJaElxaUNOYXhGd0FSUmRFQ25LN3JnbWwyaUdia1ZEUlBmR2FtU2dsQUo1V1hsMjhGOERtQXRWOSsrZVcwNHVMaU9SNlA1NFNKM0xqRHUzUmRyd21Id3gvdjJMR2o1dmpqaitlVm1jNkJhU1NncVJ6UTdPWW1pNXpUWkVCajZSdXFxc0xoY0VCa0hUa2swNEpnS3MzaGhOTTEzUFQwcDZSZ3puSEhJUmljYktSekZBU1JrM040bzU1UFBia2FqWTBOR0FpSGg0MWw1TmZSSEN6K25RTWJBQ3hkdWhRUFAvd3dIbnp3UVFEQTRPQWcxcTlmajVVclYyTEZpaFZJVDAvSDdObXpVVmRYaCtlZmZ4NlhYSElKQ2dvS1VGdGJpemZmZkJPeUxDTVlER0wzN3QzbzZ1cENhV2twWkZsR1QwOFA5dXpaZzRHQkFhU21wdEpZTElaSUpFSjBYWWZYNjZXYXBpRVNpVURYZFNwSkV1R2lxTVM4V2dzMk01V3ZhT0EzSG5UUzdObXp2ekNWM0t2cjE2K2ZOSGZ1M09scGFXbHpaRmsrQVVEcUJKNE9hZlVxaXZKeGQzZjNsNXMyYldwWXNtUkpONFlpa2NuVVdTS284UjAyVk50emRVNmhVYjQvR2t1d0ZTd2ZtaEhCRkFTQk9wMHVQajhOc3NNQmdSRHMzcjBibXFwQ2xDVE1ualViK2NFZ0tBWCszOXR2UVJBRXBLZG40SkhISHJlc2tGK3VXSTYydGowQWdKNmVIbmk4WHZ6NWxkY0FHSjF4bnZqOW8ranQ2MFZHZWdadXUvMlgxcEFlQUhqdFAxOUZaZVU2Ni9FQWNQVTFQNFBENGNDcWxRK09tUTk1WElKdDhlTEZ1TzY2NjFCZFhZMlpNMmRpL2ZyMW1ENTlPZ29MQzYzSGVEd2V2UHp5eTdqNDRvdHg3YlhYb3EydERjRmdFS0ZRQ0pzMmJVSkZSUVZ5YzNQaDkvdVJsWldGU0NRQ244K0hmZnYyUWRNMHVOMXVSQ0lSQUtEcDZla1FCTUV5VVZWVmhTaUtiTllDaTZJUzB6UVZ6UHNZNEVUeml5S1pxazYwUVk0SG5iUm8wYUpkQUZvQS9MMmlva0orN3JubmlvdUxpNmY1Zkw3WmtpUjlEOEJFSzEyYmtGQlY5ZE8rdnI3cXVycTZ4cXV1dXFxMXBxWkd0eWt6eldZNkpnTWFEelArT2JyTjNMUVVtcmtoR2RCWXp6UkNDRnd1MXpDVnRxZHREM0t5Y3pCOXhneW9xb3J0dGJXWS8wOG5JRDA5SGQvLy9vbUl4YUo0OVpVL1l4bzMzL1QrQjFjYUJPL3R3Yyt2dVFvMzNYd3JBR1BPNTMyL3V3ZS91KzhCVEpvMENlLzhiVDNXUFBVazd2N05iNjNuVnN5Wk02enpzTVBoR0hNZityak5ZMXV3WUFGZWYvMTF6Snc1RSt2V3JjTjU1NTAzN0hIVjFkWG82dXBDWldVbHVNbFcwSFVkMmRuWmNMbGNhR3hzeE02ZE82MDBFVVZSa0pLU0FxL1hpNEVCbzRlWDMrK0hwbWxVVlZVTURnNFNWVlVoeTdLVmEyUkdVVmsrRWpYSGFRMVRjS2FaYWxVMmNKQkxCRHZwaXkrK2tPYk9uVnNOWUR1QXR3b0xDOFdYWDM1NWNtbHBhWEZxYXVvMFdaWm5Fa0pLdmtzVW81VFd4Mkt4cnc0Y09GQy9mZnYyNXNzdnYzeHZhMnVyYmxObGlkUlpNcFZtL1k0bFk5ditCdTgzaXpNM2VhQnhDZUJ4UUdNS2pSQUN0OGM5bE1aaG1wN0JZQUYyMXUxQVcxc2JTa3BLY01sbGx5RWozWWg2QmdJQlJLTlJ1TjN1UkNZMmZuUDNyM0gyT1QvR3ZIbUdTMmJYcmthMHRyYmdEbk5ndDA1MWVHMURWY3JLcHFHc2JOcVlQdytrOFhxQ0wxMjZGR3ZYcnNWdHQ5Mkd0OTkrRy9mZWUrK3d4NmlxaWx0dXVRVS8vYWt4MDdLOXZkMXFPUzZLSXQ1NDR3Mjg4ODQ3S0M0dXh1VEprekZqeGd4VVZWVkJraVQ0ZkQ1cmlJdlg2N1ZTUTJSWnB0Rm9GRTZuazVqUlUycUxvREt3V1ZQc0thVzZlUitEbkFBalJZQXZ3QmR0Z0J1MjM5emNMSjU0NG9rN0FOUURlQmVBdUdyVkt0L3BwNStlbDUrZlA5bm44MDJSWmJsRUVJUnBNSHJMamVVVjFYVjlSeXdXYStqdjcyL2V2WHYzbm5mZWVXZnZuWGZlT1FndUoyd0VtQ1dEV3R3K3A4eml6RXliT3FNMm9GRytrd3pmWWNZT05MWUJnTmZqalE4UWVEekl5OHZIak9uVGNhQ25CenZyZHFDOXJRMDMzblFMSnVYbElTOHZEenQzMWlVOE9QL3g3Tk53dVZ5NDdQSXJyUHNVUlVFZ0VNRGFGMTRjOXhlNGNRdTJKVXVXNE1ZYmI4VFRUeitOc3JJeVRKa3laZGhqcGsrZmptM2J0cUhFSEtaU1VsS0NaNTU1QmhzM2JzUlZWMTJGVFpzMlllSENoVml3WUlHVjg3WjU4MmE0M1c3NC9YNXJxclhYNjdVaXB3NkhnNWtWbEc5b3FXa2FCRUdncXFxQ1VncFJGQ21sbEpoQkI4S3BPRlo0VHpqSUNTYmtoQVNRRzNILzFsdHZIUVRRRGFDR00zMkZ5c3JLclBMeTh1eXNyS3hjbjgrWEo4dnlKRkVVZzRTUUFnREhTcnVIQ0tXMFJkTzBQYkZZckQwVUNyVjNkbloyMWRUVWRGOTQ0WVVITUpTZHI0OENzMlFLTGVFK0J6UGREak1NRFFDaXlkUlpJcURaaXRhdGpVWGpBY0RuOThlVlJ2bDhQbXpkK2dtbVRTdkhxYWVlQnJmYmpYdC9kdyttbFpmRDUwdnVjZGk0Y1FNKy9PQUQvUHZUejhZbDVaYVVsS0N2cnc4ZmZmZ0JmbkR5S1dob2FFRE5WOVg0MFkvUHRSNnpjMmNkcXF1MzRTYy9XVG9CdG1OeEJZTkJ6SnMzRDNmZGRSZnV2UFBPaEk5WnNXSUZ6anJyTE54OTk5MjQ5TkpMVVZOVGcrWExsK1BtbTIvR2pCa3prSldWaFk2T0R2ajlmaWlLZ3ZmZWV3K1JTQVN5TENNOVBSMzc5eHVUejMwK24xV3h3RTVTdDlzTlZWV3hmLzkrcWlnS2ZENGZKRWtpZzRPRDBEU05NajhHU3hjUkJJRVYyNE1CYmdUSVdZQ3lkUjBaYWVPVGg0VWxTNVlNQU5qRC9WMzJHdVRSUngvMXpabzFLeVVRQ0tTa3BxYW1lRHllRklmRGtTSkpVb29vaWltQ0lQZ0lJVDVDaUpjUTRqWkJ5Qm9Bc05jQ0J3WnJiQnlsZEpCU0dxYVVoblJkRDJtYTFxK3FhbDgwR3UwYkdCam83K25wNld0dmIrLy84c3N2UTh1WEx4L2c0RVZ0SUtNandFeTNLU3h0dEkxMTBVZ0FzamlZOFNBRFM2ZzFwNlR4NWlhRG1hMnRVQnpRV044MHA5TUpTaWxTVTFOdHJidFRjZFpaUDhTNzcvNDNHaHZxNFhRNmNlZGR2NExQNTBOcmF5dHV2dkZmb1NneDlQYjI0b0x6bHVBZjU4N0Y3Yis4RTZzZmZ3eVJTQVRYLzUraENaS3JuL29EL0g0LzduOXdKUjU3NUdIODRkL1h3T1B4NEdiYjRPR3F6ejVEWmVXNk1RKzJjVmQ1b0tvcTFxMWJCd0JZdVhJbGJydnROalEwTktDNDJPZ0JLVWtTWG5ycEpWeDAwVVVBZ0QvOTZVKzQ3Nzc3VUY5ZmowQWdnS3V2dmhwMzNYVVhDQ0hZc21VTHJyNzZhdFRXMXNMajhhQzgzSml2V0ZWVmhXWExscUcydGhaLy8vdmZzWGp4WXF0cVlkZXVYV2h1YmtaRlJRVVVSY0hPblR1aHFpcUN3U0NibG9YdTdtNm0xQ0FJQWp1eENlZUxzeURIOWhOQUxnNTJuSm9URW9Fc3dUNS9tMmpqWDJla0RRbHU3ZnR4YnJBRSsvenRTSnNkWlBZdG1Vb2J0czhHOXlTQzJHZ3dZL3UyeHFVSEJUUmVwZkhOSUh0NmVqQnBVajY4UGkvOGZuTytwMW5BbnBzYlFINSsvaUdOd2ZzMlZzUE83VGo1NUpNbndEWldWbTl2TC9iczJXUDUzK3oxcG14NGpMMlpKVmR6Q200TW9GVzh6TXhVUHNqQXlyVzRzaTMrY3lJMjBNVkJqbElRZ0E2RDNTSCtuQWhzUE9DRUJGQWJDWEFqd2MwT05DU0EyRWdLVFUraTF1eU8vVkVoWm5zOTNtL0dZR2JkY3FhbmZYQTN0WGR0WmpCenVkeElTZkVQYXdMSkZGcDNkemNLSmhkWnpTQXpNak90NG5LL1AyVk1mRStPSmJDTkcxUDBoQk5Pd09iTm04ZGNFSSsveUtTbXBqTHpsSEpkSEFqWDNZRVFRdUpVSEl4eGdjVHcwMEVBQ0VrRUpVb2gyS0JIUmdIYVNIQTdGT1YyS0dBN0ZMTXpHZUNvRFdnakFVeTNBd3dnbEJCUWdJQVFDMlFHekFRQkFqRWhKZ29RK1JJb3RobWxVRU5xVFpZaENBUUNJVkExRGRtcHFjTWFRZnI5ZmhCQ0VBd0dvV2thZkQ0L1VsTlM0ZlY0MGRmYmg3N2V2bVArUk00UEhsdk5hc1lOMkRadDJuVFVYb3NmMk56ZDNSM1h5REljRG8vVXFkZFNib3FpV01yTlZHOThEU3JoRkJ6bGxCeTdwVFpUbGNGRTU5VWRyN0lJQVVrRVBRNlNvNEZNR0FWb3lhQkdFa0I4TkxWR2t5aTNaS0JqY05KSGVnNXo5ck9ac3B6elA1RXFzOEdNUUJEWTdGcUJDc0x3bVJxU0pCbGdrMlRJSnRRY1pxS3QwK0dBcnV1UUpCbVptWmxXNVFCckJDbUtJb3FMcHlMYm5FVXdzU2JBZHRSWFFVRUJjbk56MGRiV1puWHBUV1Nlc280aEl3R08zeGpZUm9NY0J6aG9ta1lKa3hoRFFJdURqVTNoeFVHUFN6MFpCakRUdEIwSlpFZlN4MmI3bVNtcHBNQ2ppWjdQZGM3QXNIMkQ5Z2JRQ0FFQkFSRUlGUWhCbkRvekZCb1ZCUUdDS0VLMFEwMlNJRW5NcDJaQVRYWTQ0SkJsT0V5ejA2Z3FFQ0dLQWdLQmdOV3VteldDbEdVWjAyZk1PT1NCMlJOckFteUhkVGtjRGhRVkZWbUE2K3pzdE5xUTkvVDBvTCsvZjBUL1d6TEFjZjQzcTRNSUR6a3VpZGlDbkdtZUluNjRQYS9jQ0V4QVlRaDJJT3c3bmd4WU5wVTNxaitOc24wNmltSWoxczNCUUc0VTRQRS9HK1lqLzNkc1RuOEFvTHBPSVFnQ0RKNFJhdlkvQTdHVW1jQUZCa1RUN0RSdmVZVW1Nb1hHQWMxVWFQSEJBVGM4SHNPWHBpb0tKaytlYkxYclp0T2lvdEhvaUZBalZWMGdUMVlCOVQySC8yUXVTUU85L2pqUTQ3SW53RFllRjZVVUhSMGQ2T3pzaEtwcGgxVFVHNGxFME4vZmI1bWpiRXZXeUpKdGxBSTZwWkFrQ1U2bmN5VEFRZE0wdnByQmdwd2dpS0JVcDdwT1RjRHBvQlNnb0t6OUtnQkNUUENaMzNlWUlCd09LaTZnUkVhNWpkdTNlSFZ3L1F6cElTcTUrRGVmNEhkY3poWmwrYytpS0ZyUFllYWxwbWtRUldrWXpBaWZnMmI0enl5b2plWkhrMDJ6MCtGd3d1RjB4QUhONHhtYXZENFE3a2RwYVNseWNuSVFDQVRnOVhvUDdnUmJYUVUwOUJ5WkU3KytCK1RKS3RCbno1Z0EyM2lFV2xWVkZVQUVlSDErZUwwKzVINk4xbEtEZzRQbzdPeEVkL2MrOUppVDZmdjYreEFPaFJBT0QyQndjQUNSd1FnaTBRaGlwbm9iR0J4RUpESUlWVkdNcTNwaTh6UnVZNHBOVlZWSWtnUmRwMFNuT3FpdXd3Q2NNUnFWUldWTkFCRFo0WUJ1bXJxTVJ5eTZOOFFuQWs3TklZbDV5WU1TQjJHQ2pnSTJBa0tTQWk0T1dQR1A0MzRtaEplYW9KUmFkWmpzLzBnSU1TcEVIQTdtTzZNTWFoYk1ERC9hY0xOelJLQ3h0a0l1dU53dXVOMGVlTDBlZUgwK3BKanBHMm5wNlFqMzk2S2lvZ0llaitlUXppdHlwS0RHd1czQ0ZCMkhxNk9qQXlBQ2NuSy9XYmRSdDl1TndzSkNCQUs1Nk9yc1F2ZCtNN2pRMjJ1WnB3TURZUXdNR0RDTFJxTndlenlJeFdMbzcrdUZKRWx3dTkwam1xaE10V21hQmtWUklFbnlVSkJoQ0c1RVZZMi80WFE2emNlWS9qaFJoSzRiMWxzMEdqV1VpaWhpeUpaRkhOZ1NwQVF4Zm1Bb2RrRVRYaXlTdGFObWJhRGkxWlQxUEdyL3ZablF6SVBOQWxnQ3B6OElJZEEwRFE2SHd3SWFNeThCd09sd3hxZHFpSUwxR1ZGSzRUTHJORjF1RjBSUndoZWZWMWwvMStQeG9LUzBGSG1abVhIcEczYUY1dmY3a1pLYWl2VDBkR1JtWkNJN0p4dXR1NXNPR1dvVGF3SnNYM3QxZG5iQjYvTWZ0ci9uZExvUUxDaEFZTklrTS9ldDIxSncvZjM5Q0lWREdEQVYzT0JnQk5Gb0JBNVp4dURnQUh3KzM0ZytPSDZMeFdLUVpVZGNBYjhKT0txR0ZCQkM0UGY3VFJWSENhVTZkTXBNVm1vTXJ5RUNaRW5pL1hTY3YyN0lGY1lCei9xSERPME5neDhiTkdLREcxVlYxWUlWcFlDbXFTQ0VRaENNYWd4RlVVQUVBWkpvdkNkVlZhRHJsQnJGNGtNcXpYTDYyemFCR0NhbXBxblU1WElOeXpkajRPS2hGZ3FGRUFxRlVGdzhGUzYzRzNzN090RFd0Z2V6WnMwR1UzM2ZPMzRlMHRMUzBOZlhoK3B0WDhMcGNHTEd6Rmx3bXdyTjQvWEE1L1daTGJvTmhaYVJrWW5zN096RG1seWIrZnhpS05XZDZGdjF2d0NBakNkK2lJRzM2aEI1cHo3cGMvelhIUS9uS1VYWWQ0SFJqc2g3K1d4SVU5TFJlOCtIQi8yNm96V2JQSmJXL3djYUx0Ynd1T0xUcXdBQUFBQkpSVTVFcmtKZ2dnPT0iXSxbInNyYyIsImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBVFlBQUFFMkNBWUFBQURydkw2cEFBQktvbnBVV0hSU1lYY2djSEp2Wm1sc1pTQjBlWEJsSUdWNGFXWUFBSGphcloxdGx1VzRyV1gvYXhSdkNCSy9PUnp4UTJ2MURIcjR2VGNqczF4VnRsLzdyVzZYcXlJejRzYTlFZ2tjbkFNQzBMWC85Ly82cnYvNnIvOTZTbXZoU3JtMjBrdTUrVi9xcVllWFA3VDc1My85L1BlNTAvbnYrVjhzdi83MC9QWDcxeDgvQ0h5TnZ2TG5CL1g5K2ZxOGZELy80eGQrZjhZei92cjlxLzM2U1dpLzN1alhEM2pqbnl2d2svM3ordk5GOHYzdzgvMG4vWHFqdm4vK1VIcXJmNzdVOGV1TjVxOFhua3Y1OVcvNjQ3Sit2dmozNnkvZnFLelN5bnhRREdISEo5N252K25uQ3VMUHZ5Ly8xdlBmd091ZUdQbnpFOXQxdnZ5K0pSYmtMN2YzKyt0OS8zbUIvckxJdi85MC9YMzEvL2pUM3hZL3ZMKytILysybHVYWEd0M2xYLy9neVgvN2Z2empZOEpmek9HUEt3cC8vY0VZNlo5djU5ZS8zN2ZhOSsyZnUzdFRZVVhMTDRzNmkvMzhmaHRlT0ZqeWVINnQ4RS9sMzh5ZjYvbW44MCs3MzN1eTVldWU5K0NmK2ZRbnNDdmY5YVJuUGUvelBmdDhuYy9rRWxQWW9mSTFoQm5pK1Y2TE5mUXdvL3VVL09mNVFvMDlydGpZeXhuMnhmYWxHUDY0bHVkOGJqK2ZONS9HSjYrSGw0YUhOM3Y0bFgvN3ovWGYvZkIvOHMvMWZkTWxldTcyeDFweFhVRzc1akxjT2YvTHE5aUQ1L3UxYi9rczhPOS9mbTMvL1NmN3dWVFp3WHlXdVhHRDd6MSszbUxrNXgrMkZjOCtSMTZYK2ZxenljOVYxNjgzWUluNDdNekZQSkVkdU1zVDgxT2V1NFpRbjRkMWJHelF5NVdIbU1KZ0I1NmN3K0lpUTRxeGhLdUdGdnhzZnFjKzU3VWhoeEw4TnRqRVJ1Ulk4SzNHRHIxc1Zrb1orNm1wWVVOdmpqbmxuRXV1dVYyNTU3ZkVra291cGRRaXlMMDExbFJ6TGJYV1ZudDlXMnlwNVZaYWJhMzE5dmJRSXhpWWUrbTF0OTc3KzRicjVZTmUzdXZsOVMvZkdXSEVrVVllWmRUUlJoL3Z4SHhtbW5tV1dXZWJmYjRyckxpQWlWVldYVzMxOWU3bjJpREZUanZ2c3V0dXUrLzN3OWErK0tVdmYrV3JYL3Y2OS82eGE3OTI5Wi8rK1IvczJ2TnIxOExaS1Y5WC85ZzF2bnZWK3ZzdEh1RWt1MmZzV0VnUE8xN2RBUXc2dUdkM2UxSUs3cHg3ZHZlQVUrVEFSV2IzNWxxUE84WVdwdjJFL0QxLzdOMC9kdTQvMnJjcnQvOW8zOEwvYmVjdXQrNy94ODVkYk4wLzc5dS8yTFZsbkp0bngzNjgwRFc5STk3SGE5N0FGWDFqZmZ5MXhDKy84YXZqMjdOdVlkSWYvK2MvdlY3dlo3LzE0VjdMdStwVGMwaWx2V3h1SEozTEdIUGlWMmxFTDJXL2laZU1IZExYV255NWc5bldNKzg5cmpCbkhMdTJKKzg2ZHN4ZmU0RzZiK3kxVjU0SmU5cVR6MXExMzJ2dDhYQWZNKzkzalRWQ0duenVFL29NcVY1UDQ2MG02NFgxM1h2WG1RWTJzTCtZNy81OE5lMzY4TE9ZNTczbUhwM3RIUFVlVDhwanMyT0EvOHN1WWxUWFRLTFZzK2FxTDhRa3gwMTRmZGZMT25RdU1lVEJubGJXSjR6U0FmWTN6L3FOVk4vd0xTeHJmaVhPWEVlNklEVjEzaXhHYlFtRDdrU1ozc3Yzc01GZjNTekdIUHh4eGEvTkw5eGNudjR6b0NGMThxNnh6b0J6enE5ZGJlV1MwbUtkWnI1SHVWc1A3UHNjUUg3ZnE0VTFTMXhoclB0TCtWc1kwRno0UVk5NXJ4cHEzeVd3RVNtWHE3U0hQZmxxNXVhTU4rdTcyWXpPNjl6WWY3UDV6OHlyY1RIQVFTejl1MGNxMXpEZ3hidVV0UWF3d3EyRnVQRWpEQk96aldzVXRqbHlLWFBFL1BJSkJjZC9CNSs4NDZoY3lvTWg4R3ZYR01lcS9qdUwreGMvbTZXTVdQYVk4Y09wOTJ6ZkZkWXFIZmVPaWJET1BXTWJLVXhYcHNjMlYvYlcxajYzK1h3dllQL0hXMk10SWJBaFJQcjJmQmVoL1FGOUZtQ0NLZlc1dWNmK3hsQXg0bWVYd1hLWDhSVSt2UlI4OHlQQ1l5ZnRUZmViV250NVQ4eDlyblcxOHVVSmlIM0huTXFMRFg3LzdncStmdlBpcjZWdngvcHhRVEdOc0h0Ym9PUDFzb1A4dFh3UkFNSzd1VXBRRE44SEZVYm5mbk1BU2NTczJPVis3N05lYkNBYUJSZi81bzlYNzY5ZVVoNHV2dGZ2aWQvWi9mMDFYZUZsaTJyQldwNVpndWF5ODRRbUxqeGs4LzZzSWV5R1QzMjBsVEJodFlTVHhJY2tQUXgzL1BhajV3NXNhb1JudlBWaks3aitZNWNkTUs2d0JSY3UxZGJmTC9MaGtYZTRObEc2bDhhT0R1Z1NLMVJUK2JCalhqbEhMOXQ3WHZ5aEZaYWtoNmZuRzJzTEtRZnViNy9TNzdyRzgxNnBqRldlZC9JcGdHdHZCQUt3R09OLzhsdnpSK0J2TlU3d2xML09BejR6cHhiM3lDek1malRIY1dOVTE4TTlWWnowVGJNMjdoNUhlOWRSRUptOWxJN0pMbExBMTBKZ0pmK2R5VjcvdVQwL1h2SEtHdzRYSmpmTkJSY2lUK2NlcERVM3hqZUJWVHhhT2xwRHdUS0pydlV0R3lOczd5N2xHNERBZ3BEbGN2ZlJpbXZFUlk5S0dKMVZUSG9IVjlRelZERUJwcE9RcHJrV1ByVHp5ZzF1d25uNC8vZXlpckVOWUpLVjRwNzUwekQyQVR2c3lWcFB2OHJUZExXT05RSlFmT0p1OGRDdXpYczloQzhDWWt4RXhNZFBHUnU4aWdSVklta3BzZDBFOC9SaUd2dGEvVTQ1Z28rZG5jZW5TOFpRSGx5clB4MThZSjltNUJjcWNjWlBXcVcrWHd0N0VqSW4vc1J2YmFJQWNZMzd3RnJaNWtCRVh1bmV4TS8rZU5zdmlBT3lEZEIxMTRKb1drRERBMFpoTWMvZ2QwZHEvVDdzRysrNVFPRmtWRFdDRFlKYzIxWGt4ZWkrQXRCa1FoUG9jRStDL2lEK3M3SjFQanZpOXgzR1V4OUR6cTQ1WFdQaTd2RVJFTURZeGtKeStiemxuQVQrR3JtaU1jcXp1TTNiMEFRUmdPaDhIU3dCL2lOK0dTQXJmTzlLOFNVOGNodjh6U1VocW1DNjVka3BHOGJBSlZaLzg0dG44VEdMbGdGckl4Vy9qemtsc0FFeUVhK1JGb3NPUUk2YXhTaG9GUHpxL25hQU9zQzI5b2RZTFFOQ1JkUWpYb3pBSGNBaXFtamEwaUljZjVOMXV6Wk9DSVpGU0VlcXdENlVZMGxDcHRZRGpFU1FzUzhpVFNHNFZqQ3NOTDZ1dlo4SmZNU1ZoYkV2dlZkSmE5OGd3ZDczT3dpM2tXQ2VYdXc4QXk4ZjcvSHRZcEM1VTJFbFo5dkljYkFLLzBPTHNWdllQcHp0SmtDK2hPUWJ1cGQwcHp1dnRVSW0zTDdiQ3dVRVNzejVXYmxCSE91SFMzUFJtTUtRSlJMU1lERWZzQkhZTlJ5K2x3eDI5bHN0QmJ6aVFSdkN4d2RqZmRBVUdDQXh6VVdGeExWYUNPRmpBOURneFFmZFpITUpKUmU2ekhDQ3pSUGVJVWg0TjVmUDRzUDFRSFo0M3MwTnNVNHBEYUltZG5BTEJqS24vdjVjRmplVzR4VXlSR2krSFhMWUMvNkN4QUtWY0NQOGpoc2hxT1pudndUbXNEYjJuRURWaVRNUVplL2FpWDdZS0phdjhJdlF4ZzVtOTRGNVlFejNCOW9BRzRtTDc4QXc5S2pnM1VSMGRoNEVaM1hlbk5oWjNwZGJ4V1Q3M250ZFMzNUJOQW9ZZDRzRHozZzdMdnBKQS9BYUtCWnZnQk1YMW4yOVdNbWNIZGJSY3lDWUpTVlc1WGQ2dmZTZVJQZ0k4QnRDOWF1ZHdDZ211QTZsSS83Y0IvV1FCa0FNWkJLK1dONVFGd3FoNUFGWTFjNlBCbS9VZVBsczNuWGlWckVNcENCMG5vMURYMWVNSXh2bmVvTkpnZ0VMcmM2YWFrdWJWWGxZbDRWbEJRSWtiTXJOVGMwZFJjZWtHZ2hvcUljMmMrdDU0b2tUTXdBdVFBYmVlMkUxaTFENlFNWUMwZ0NxU2VSWUY4eXVtU0tBanFVcUhpQkljQTU1R1ZFd3NaUlFwRGsvc0creElZU3JDVTBCUjNadVdncHNZY0w1MkRYQXZHdktQVWFpQXdJS2x3V3BXSFB6UGZ3V1ZCTmtqdEF3VENPV2I3NWdub3QrUWhXdndLbnJ2bnJDbTlZTDJ6VHlQVFVBeklRTDRESmtkQVdYRGdxaFBrQ1laMjNlSFJ3QmFOeHEyR3JxT0FnN2VvUFpnQWg0RHVKcWh2ZFRqVE5xc0JjSlhURENSSFI5Mk1EcFp3Z09OMkU3dzhwQmF3SXpEbG9ENEhvQjVIQ0xVREo0OVFiV0N4VGlBb24reUFEczVlMndpL0tDbkVRWGpIYjM1eDR2Q3h6QlVvSUlXOHJXb1VXZ3IwUWIvSE9OcEJXai8xaXhUdUJoWSsrcHo1NTBHeXNFUnR4dzVwNGpJVGRPSWhpVUFFSjhBL0lRclNlVmhZWUpRanM3N0gyK2NDUXVHWDhrSEJDOE96aUZIRzBoSmNJc1lWTWdMdGd2VXFVU1A5VU1GMFFwanU4dUh4NnNXZ256WXpIblU4SGtyK2NLeHpkU0FUeVREWUlrVHJidWdUQUNQQldUZnJHcmhHOWVMOUhLUDZKTStSTkdVSlArNnk5MWJpWEJzN2lxZ0o0QzFBSExoUVJDVmdTa1RKUTlZa2U0TE5RUHZJa2RKb0NPaWxJNUNkR0FrOVVYaEk0RUtaeDgrOEdHT3Q4WHFwYkN5OW9EVTVDS3lwSzFXY2VGZlV3WXdyY0NvaFg5M1JNc0VIN29Uc0FFMGJtOEFRZ3dDTVBwVWJSQjBJM0ZMNlFFbklhMHNNdDN2ZEFrMzBOY2hLR3lwSERhSmpYZXQxSWJVK3FUaTlrOVpKZ2Y5UGcxakhrRkV6S0dHNktGNzdJaDF3bmhSNmoxcGlEampTVU9vTklORkJwckJ5R08vK0JaZXN6NzVjNTFGUlRsQm9sYklPSmwvQnBKeDFaZUVjditqSTEzbDQrQ3dvRVk5TEsyUkVWZXlKMHZUTjBQWVZNSkZ4MlRhd2d4Z2pPWWl4SHRQSUNrQzdjWUgrOFA0bjFMVGY2OU4wNnZqZ1RtVW1oZ0M0dUh3NEVvMkNUT0FnRUQ2aUJWbnd1R1JZLzh0Z3MwakhzaEJGQUZEZmNObUVyMmN4QzRpK0J1S3F5ejZnTW43cUFRd1pOb2puYzExU3ZtR0hDOHVIRVJYZ2tNYnN4RzVNaUdZUUpRZmt0NkFOZTM0VkhObldjTkRpRDFrMVpFNDM1dk96RnA0akFENGNmSHNoTUp3aEpnNVRBRkZ1ZjgxZ0E4TUNlRFVkc0dJbHk1SnhPYUl4THAyRHN3Q3NrTW5zQjhMdmdBZkp4OU53b013UHJlSU4zTnZSQzdNZU1YTzRiRVRwWWZQdjZDZzF3Rmk4VjExd1RyZWdzYjJVYTRaSE1nQmFvZWlXc3VGYU5KWExNOHBCTnA5dEVvbU1lSUNlRDd5ckd6bDZWbEtURS9TRFpMUDVFUWdBdmsrTlhqbDJaRzRBZGxvQk80U0NWU3dmaUlJWlYvdi81RU16UklpVWVYSm1wT0JkNElZOHpyVFJnOGtRVyt6VzlYV0dFMFJUSkN4NGVKRWdBZ2R3SHlmRk41WHpFUzFQNDlzRnpvMzNvRVFaWWxYeTBaN0RHTDczTzdJakljVGNsNnZRQ0l2MDRVYmtab2ZpV1BEMUkrRXlTQmVBUEhiZnpwWFFpSkhTNTBZTTY5dzJ2TC9neTZCUFBLVnZ4YURoY2pFWWhRaWIyYmdJQUNzemhQVFRkUnFiRzF5QVFXdEpsaGYvZzczeFhIUzVBQmJLUXMxbzZqQ095QVVpb3plYkF3RVRWZlJnMzZTWWczS0czSk4rdk5HN1h3Qk5qZDRIS0krTUFQY2FraTVIQnRERGVqKzlnempHS1lNTVRKaUFBZzI1MzRYRmtOL0NHR2hjVmRFMHZlQ2s2azViY2lLLzF6UWR5RWx5VHFIYTcyNVVHWVFESHp1Wkcvb25wQjVZclNmUkNUZlVOR1lkWTNuSFBJWkFKeUQvNmNYendLQm9uUGNTUEFGWnJQZTRaVndqakdxTVh3U2lSOE5QRE94U0N6cXZENXI1YVZnSWlZUkpNVVJENWU4YjRxUHZpN0Y1TUM3MGNvYnhncGtwQXJZaStoS1lxTHBkOGs0aU4zK21IcGtLcWdac201aEhQa2xYbHYrSXFadEk0NzhUMkUyMjlidi83cFFoQWVLUEJ6SmdGU1lZNnNDT3h0QzNoM0FLSUQyaWplUmxsVys4R0xIaVJSdXZobDZUdWNLK0pWaElZTU9VSU9RRFVLWlA4TExNaG1sWEJzeURBaHlqd21sNy8rdGp2WDkzdHpjTkVjRGp2bURiaWhuUk9Pai9hUmZrYzJDeVoxQ0dEYmtERndGeFNxSzV2VUsxOVpGL3JtSVJ3VDdMeFRqMlpNRldmMkZpYi9uWk01S0J3b1FIamQzQlpzOWc5ei9jZEZzVWJiSzY4WksvbHUxRTh3ek8raDYwSzh3R3o4RFZuUmVLOGxyMFZheE5kTUw2UnU5M0diNlVXV2huakJmRk9ycHNyVVpWa1VoWEdFb2YzOXEwOG1aa2kxVFgraUxZQWErWEo5dUtKOW05dG1IV0NGSGJxeVppRFdvTGlBZkN6SENBZFlZcWNtdkJGUUQzK0R0MmJzR1Y0SHFRYW4wS2tROWc0VE80bW50eUpDUy93M1Y4SUs2TEd4d2poWXJGQU5mOHArSUJVeWVSR3VDdEVUTVlWQThKUjJtME1DODkrQi9YNTF3K2FnS093T2tmZE81dUtXeW1pZ0JBdnFMR2dLNE01MW44djQvdXlvZjc2UWp6MEc5cEN4alNoQzdNWVB3UisyRk9XTnIvRCtjUFRTRzhDR1ZtZ05KWHQvQlZZRyswUEJoeUdoQk53N0lUUEJBR1dxUlAveHFvMGdhWmdZNFA3ZUFEaWtBVFZ5N2VlRnR1NnQ5b0pPUWM0RkZSZzZ2UHJGMU1HZVhUL0UrZ1BxcGc5V2h0U0ZnQU8rQ0llWjNJc0t4RjdRUWVMMWN6d2ptM3NzQ01pQ2VxdlRvNVM0aHprbjJRMXZuRG82SFZva2hxc0x3VFRDMkFNRDJSZWhuc1dBTTNTbzJ3ZnRoeVpBR0Q1MzVYbjVWYVFsd211bXdtMFFOTUNGQ0QzQ05jdnU3RE1lRFV5T1pqNzdoeDdoNU5nSFV0SXMyRHNWaUliS2JDb2FWcDBDTWFoNWpBUDNmVEZMZUJVRWxpZ0hQK1NTTC9VdWxrelEzcmZISEpBT1VDeDZxdHkwY3lrQWVyc1hreVVUR0J6L0dnYXZoR1ErWndQbEhGaW5RLy9RTy9EQlYva0hjR1djQWRuVTRHNGdhekRCNFE3eWxqQmJyamRyLzNnL1AyTDFrVzltc0JBU1k2RllSTTEzNFpLWURmc2lBUUV2Q1NkOENqc1BpM2lmMjBUSVJHczh4T3pyZy8zaWhxQlBXRENMWVdvTUFOdmI3QmJMU3B5RzFTQ1FRRjVBR0NkcEd5Zi96TG1pVEovMkZjK3VJRnEvVHZtRnJNZGZPQm54eVdWTFc3RHZpVkVpa2VEeEExV0ZtMFhzaEhVQjV6QnJOTUdFMW02UE13aFJZRTB6dzVuUUhlemFEVmplSUJOdmpBNzU3cDhVNzRSakxQT2szUGQ0YnUrZlVCUlordlRHY3ZrbHY4bzlJbkJQNkErcEpKdmhrVmhCSXhkVGhCRGVneEJRTnFKa0lBaUdqLy80blR0ajhOKytWTHJmQ2JYdzU0VkJCUk9pR3dHQTViTmx2QzF2VE9BSkNpelRjWVowb2dJQjdtTmxaUTR2dGc4ZWdZVlFRUzQrZUtiTmRpRGNDYXNEQnpSTjVCRjlOK1dKVnVtSFBSVitCTWk4VC9tTWZxbDUxQzBiZWZkRVd3K3dybmt3QXkwRTR3bGhEeHdUaTBEVFdINHczRXZvWXovWkhSVjJCN3d6ZUkyd04rbnJZa1RQcjVROWlwWEYvektNaW5qL0lnTUJYV3hwdGladjczampvL0dDYVd5ZktRSzJjMEVUTDZ3Tklib251eFhEQUptTzNHa1JodEZ1ZHJpYWFrVko4NVkzOFNTWlJNZEF1RnpJVTN4dVhtK2VaMTRtYWowQnd5YUEvY3dPc3NxbUdFQlNMbjFnR2JlSG1oTkdVUU1CQ1ViS3k3aVUwUlZqTmNDU0FuZ0VhcmtzbWRYQUlWajNDblNqREpJL3hjeUJUR1F6TzZJOEI1MlIxZHk0YUdndUszZEFHa0JvL1dMVm9rZXFzczlzRHU0eFZ5QVBVR1crejhSK3NmUjFrc0VwbjNPdUFGQTB6NFYwanFtU2UrS0JFYWkvMG9WMVlGZkxCK2VEUFlNV3c2UUZ3UWQyakl3YmdOczM0RnFMSFlNSVJZVHZzOGRraitIUjE0S05OYzJkVDlDYkg4d285Qzk0Nk5XTS8rSXNzY25ySktCREx3TFhORjVvbm1lQmhJWkJuT3JKek9pUnpnTTZSaERrMzlpSmMwaG9FeDEzckhDOFdhYld2VytjQlRoN01pVFovRHJ4SVJIS3NEZENkb05ZOFJWSEtBRHo5cXpRUThlNUlBTlEvTytjbGo0QkdZQjhSSTQ4QVJUbmdyRW4zQnlGalJEYnJQaUZxK1VZQVdoQ1RabGRvd3d2OGNqTTJGNDNsMkMrK2I2SnQ4MWNYczluZllnb0EwWUlQZ0xzUU5wM2VmenRTVEJHMEhDYjZhSFdMSjV3dWtpN1JzKzhBYlNIVDRXRFpVVHBqU2NYZVlmcFhUNGNXQ3hnTnB1MWM0UVZFc0M1YTZ5ZHBSdjZnam93UG1xOGtuRUpOQURnNG5uQkIxT1FxZDBJbklEWUFzbS9xNThqTU5nMFBnakh3Tzg4cW5qalMrd0pVQjh3Q2c3WElKVlFIVURRT0xsMm5oMEhuYXpmbkh4YTdkWkUrS1hpWk1FY2p3b2MzdjZrS2tYNkNCQUxGaDFNc1dXdUFsVDk5b3ZwNEFiZklwUmcyMWdYNkh2bDBuTkpyWXNCSC94K21VZ3o1bnhvSG9nVkxHc1MzeXN3aGd4aGRTcUxGRTUwY2tzc0JZQkExK2ZpTS9PVFFDVElEUGpKZFhzWWlEMjl0YjFjVW9RYnd1WFBnY09ReTZBRmN5dG1nN2NudVI5V2g2eUx2Qkc4Q1JhYk1wSDlQV3dITzVkUUI1VDlGNUk2S21NZGt4Zy9DWnVZSGF2SkhzTjcwTFlZbzZ4bXNtdmZuYzA4WUtGcEhBVDRJTEVzRlIvVk52RVBzLzlraDZ3S09yT2hQelBXNFdGRGZXRHhlRG5zazhWTzdnWDZFd2FTWVdhK2NVbFI4WHR6U1dBcVhBNFhHY3Jld2QzazduRVE3N21RME85M2t0K3MvY1ZHSnBPa2tmODAxaGFWUWNTSXJpRU96SjVpeEN3OHpHTWNkYzdtQnZWU3ZORUxqOWlOQy9NcDJORURTOWtmWVFMVzBJRW1OSWVxSGw0VWpLVGJzeWJRdE4xNFdJdFlLMzhEcVRJYldHY2tKbVF6T0pjNmVucTRiVjFUelBMaURqUlg3TndFVFVvSk8wTGFjaG1JZkZuRmtxRkdrd090c3h6M1NvVVB2Z2pkY0FzVXlrbER3VEF3Tnk3VkUwK1dNSjZERytKc2d3MXpmNnNRdXNmTjlkK2Ztc0xqekd6S2ZsektRY0IvUXk5Z0o3RDNpZWEya3FZQWN1RlFBaHozeTZZb1AwOWNmMzBsM0RlTFQyN1l5Z3Qzdm9KT25ZMzloSTVVZ3A4Rnl1UVA2czc3d2lMeEI0SCtlVmpvZ28vaWIzdzFpSnVQQkxPSlYxaDI4SXY1V3lJN3NhaXVUckErQlJpeXZtYXhnV3lXV0liUVJnZ2h6bDVwNVZnUW1tWFVBc3NoaVZmUHBwb3RaeWp6M21iNVpHS3lnUVEvQWhNQVgwU2UvczV0VEVJSEVXY3JOV0dQT1cwMEgwSHJDOWZIdldZaURCYnZNWEQ3elZsdVM0OStjUllzOEpBV3YvNm1MWWg1L0l6bC8zNFkwT1Y1RUpkcmpVekdWcTJBeUlxUUxuRnFQNVVSNkJ6ZTMrTnBmQVU0Ky9XRFg5OW1PL2pCWmRWcU9uVUdlRW8za2Zld3ljU2pZS2tTenJKWTBZRGRBT2x3NUtWVCt4UGpuWnc2UVF1UTNPa0NRYUxSazlqbUFjTk0yWElsd2pZVXR2MmNTU1NEQXpIOHNXNGwrZG9Kbm52dUZzdDRUNlZKd3RlZ1RTVnNYcTJjWXk4TlJkd2ZGMi9RUWdkbWVBZ3VtTTM4UmVqSmhLVkhWd2w3KzlRcGlBYnprSXNZSU9oRU0vdGFFdW9HU01FOVZPc2VwN0xOZzQwSXJBWGhYbTRGa3JIcW5xeHREQno5QkI2aDlFSEM0QW5JVWoxOW9TVmpHd29DdkdpZXRkMFZydWpCN0NzMzBFL2VmRnNUZ1Q1Q1Q4WXhQWUx1VUdiYzRnVnlJK292L05iNlppd0paNE1ZV2N3NHhXYVZJandobitOd1pDZmlsMGpiUVhZbzk3cFlmZ2drNUFuVUp1S0JEb1ZZQUhzWWFncmVzSGwrRGl5VzVzY0JlRmh3U2FqVEczT0ZFOHdQMHZhdWE5MWNFaUlkY0s0cHZxYU1NWUxDQnNDWDJQM2pKQURMMTBYbUFNZ1JDRGNSZ3N1SGZTV0oyZ0l1TGd0N0lLZTNDSkNlMTN3anZqYlVDcDRhcWhMWnlqcFpKalllUU5NZXUwa0V6d3E0ZHpaMUxld0k0WlZiZ29SWVZRYlAzZENXNWYyZ1FSY1hrenlJQXdkeFYvUU0xTWxVVEFnblNuYlBrdkJzRER4Y3hJbHVMdWdHL2tDTmVKTGpyeUkvSUJwWnZWY2ptTTNnZ2t5VEk0VnpOdm15YmNDRnJLU3lJTmZSZDZnMUJGRXFUMHFZeDRDZG0zajF2Qnl1WkNHSmxIYXREd0dSY0ZIcmJLWlZYTkdqUWV5SnYxOGVGTTdpZ2ZYTEN5dVlnNTU4MkZ3UUZ2a0x1VFdCZzBJcGFYSi9jSXQ4dng2MGJqMHpHOU83U2RmcnVTWGphRTlNNyszcWNHVDlubnRDTEt6VllnOENieFB1VWFmbFkwMHJHcGlBRlJnRUJUZ2dhaTdBajVUQ1ZpWDI1Mlk5RFNYRTdJWnk1QmZoSjU0eEVtMkkxTkUxaDdFSGF3THdqQUlwK0Y3dkJ2NWFMamFQeFNkQWg2Y3ZyTUxqdVY4NnoyUnBSZXQ4ZWc4TURQYThDSENzQVJqU0lBNHhudFNoWlNQek10ZXdQbFFDV0RndGxVaXNNazZWd1pOUUxDK0J1UlBBOHBzOEl3Q05SM3JpMXVnOW8wSnllMnlkKzJYVm1qVTcwQ1BJUW1GaGtYZ3h3bTFhTE83SVBPVlJyRHU4RkRLNGdyQzA1Yjc4ZzZTMi9xTDE3MUlabm16NnRLcGtla3FIQ3NFaXNQYmFNaUNEN3hLVDhXb1kwSWhHR1NMK1l6VVJUSVJWZzR2dzI5ZkRqNkFzME5FR3UxK285S1A5UHp5WXkzeVFjMzE3d0tXZE5lUVRzb2RJSWlNUjEzRi9sQ29Xdks4eWRydk5hWUVHWFBDRzB6WlBYOTZBcDJZcjFtQm1XQnAweWxNbWdpWnVpc1FHS3daMytwMWpQbXdjcUlXQUZDQm40RFNTSzFIWlBJV25hUStoNFVQeVdVN1NNUC9rMFdnbGRPSHVPeGRVQjN0L2QwakF2RTQyQi9mUzRNRFpMeEQ0SmxweWU3S044V1lnazRpQW12M3dLSWdyOGR3Q0NmWWlXNTExRXpvZU5OcEY4SjRQU0pIUTBGNWt4S1BqQjg1akRBblJBdU41OWNKRFkxNVBnWEI5aE1zODVZSEVHZUJDMkxocWhmbUQrT3o3U3F3dmhKVDFqRStjMzcwOFd1ZTlFYWRWczRKaEdkQytVMWgxa3R5OUtPeDE5Q3RDTVZYRXBadGl5ZFkyQTRnbTF2c0E3Vm9hdC9rMjRlelR4aHZHM2l4WHdpOEpaTU55TzI0blhFUWYxTDVITCtZZmVWdDhJbkROQ09mUUJ1dVpWU2pkMCtpWndrOGQyd3hBeU1PMno0Z2ZIWkhiTUVoQ0N0ekhZZ0ZZVEZ2TjBtTkMxU0wyVmlVT3VMSUhqTnJpa3cxZlN3WmlZdDBIMENvd3VZSEFyUkd3WUJFQnNudnlsZWFNdVp6SGNsOVdlbHFJU3h5dHcwekhucm4vOEpaa2FZRkhJT003b3NqRFRIRDVaRVJZMGZNVkR2Mk5NSElBMllpTWgyMThZRDVzNjJSbldNbnp0Y0ozNEsyUTVHRFJIZXJvNXcyYXF2cHdFV0lGSENUOC9PRFAzNFpYRXd3ZVpEaTBMQ05GRTJ3N0FlZzNXRWFBQlBJSSsraVhCOUNLeVlOS1hOeVRTY2lKdVJURVp4andOWXZaaVpaRWJpQlpvMGsvbkNtejM1OTVTRlBYVnVBVFlxRURFTWdXOFE4enc1RC91QWlZNFpYNVZpZ1RkbW9SVDhBaXBiMmdLeTQ0WnVhS0NITUE2aXVmSDBiN1l2RU9ZZTlGejJHY2dNSE9saW53VGxDQTVkNFFjOU5YM2wwOStRVkRDUUR4YXJDb2hrNUE3dktHajNtS2x3L0hlT0Rsbms5K2ZncHk1ejBWM0hDOVlnVU11QldoTFZrakJCZ0dlSVFOVjlBRFVXUEppUTVIK014UTBVV2MvenduaFBkZ0hjWGNSUkVDaVRGcllYZ0VxUnVIUnZQaXhsY05uaktoQklnenNtSVFHSnd3YzVnc3ZIemhpTVAxZ0x2NFpaMzhCVGMzOS9aSTV5UkhhbHdXNkdaTUhPV3dNbmFER09KdGxmeVlKaDZJNTRscm5tOWtzMWMxSGNrN1gxNWlFYUhKM0w0VEYzNnhteXhreTNCN0FKV3dWNENRRE0rekJvOFFvRktLQ0NJUDhyOWR6Mms2b2loWk1vdFZnRkd2UlJuelFwNjQ3NW13bGphTW9pZ25QZHY0dXZLZExRSEtTdWNqVXJmMjB2cVNHeTNBbFFIakE1cGt6dVpOT0czMEhWK1BlamV1VDNUeXlKN3cwME1GbzJBY2pVMW0vL2tLQXB2M0JkUzlLU3RWTEpmMGlDQmYrU2xXVnVMVlpoQ3g1M21EcUFVL2dZZGJRVzdlZnB0T1dOWGFNNnYyVGY0cytTclVDbXFRaUlEemdwV1diWEVac1N5S0RwMlZHM3dHWVQ2WmpLOWY1ZFZkaFdOdHdjWk0wU0tvYm5odkRCNEF3cEZEdk41SC80R2VJK3pGU1U5MFhXZ2dUU3BIZUFraDVCdDA1aDFkb21xbEZ0d1VpRVAzWWFIcWpWUXYweUxGbnBVdmVvWnJ3aGh2KzFEQjhPd01zQzU3aXhEcTMydWxkaXQ0YkpGb0tURm15OFNJT1UyeWVPcGNMUnhKMW95cVdaRFZxa1pXNjMzTW9pcmRjT0JzMGNCandrT3JUNS90RG55RzlTb1FqWGhKYVYrMldlOENtRnMzdFhCYlYyZHhocFdQZUxGNVNuTVkxVkRIZHFOTXNhRjlKNlFKRWhlWGJOalJTYmhtT050VTdySjVzRHJpNC9Ra1pYbFloZmhBNVFIOXczd1ZvdlN6RlNGOEN2bHFRb2RYak1zNmxUWk9xNDh4MUNvL1VNNktHcVR3dWIvTmxYT0R5MmFnUkJodjVpM1IvamFOUUZiT3I1ZDJIVWpyMXNUMDkvRU0veFJYbmFRak1SRCsxUWpnWEhBTG51L0JzT1J0dUJEclY2eW16eWNmY3BkTC95REc0WlZKYmMvVkVDcDlPMjQyWlFGZzVJZGRzUjZNT0llRVlZa3c2Qml5cm9RdmhKTXJ1anl3eGdDMng2WkZhWlVzOWtWK2N1R2JXQkhiOXliUHVvcThXOGU3N1pSQkVjSkVWT29DQUpkMDNkOUo5QUtFSGx3UFAxVkZDS1MrWmdKaGFVSEx0M2o0c1cxdjJ3QlJvSkhZUDR1QnVYbSsvcXpMRTFsM2lrMEJ2RHBvMTB6TlFEUnY2eWNhUE5hVHdHTGhIZ1NZU01hL0NETm8yWHJWY1lYM2duZGREWjVQSU1TSVh1dmhlejVIMHVobnFIQ3N5end2SnZ3TjNyUGV3U0tmMjFSRVZrZmVrSDZDLzNvQXV3c3oyZ1ZDWVM4RWl3cnFZQUxaSlBPNHQxazJjQk0xaUh3SFlTMVg5elQxMjFCWTFtWS9Ia1N0RnllK2Jtemh0bHAydmVWV2I0YjJlVUx3SlF0UTlvc1VqQjllQ0dVS2NBQ2JIOWdRYzRhbklNbmNhSlNsWEF0MitMelFHbUV5V3ZFSGtQWU9WeUVTWTQ5Sk5meHBCekFXNVRCNmhMdkNVVjhFbkdrc3BHU0RSSnk0RDc5RkJKVTVVZUlzdHZtYkV1QWVqYjJ2cHVwTk1scVRYQzEzeHpxZ1U0UUZsdlFKMWRPU3VTL0xKSW5GbUVVbERJQVVjSHZUVzNWd3o3bjNXbGdza05naUQ2SWZFZXk5VHhVenFxdFkzeVl2aEFaY2lOK2Zia3dyZVRFbjhRRXdlSHN3bzNNYmdMY0ZtaG1pVGdSQXNZQm5BMTVrOUFGZlhHbndaVmxXYlVrWjhmdFU4eUs0Q1drS3FTZXRVM2VBSUlIUXNqQVQxUTJKOEtnakRmUk1oNTI3NTJ3eUNBalBQdFgwbGlUZU54b2RhZFYzdHRpaERvM05JdW0wakRLNVNuZUZKVnU4MnQ4eVRkZC9ubXI2dDVrbUlES25DK1BJcDRwKzNoN1lXYzVhMm8wL1AyaHV2L0hhai94Ly8zcjlKeS9FUUwrbXRBNjdib3MzUWR4NDloZXNjdU5tZXkvdUQ2V1BDbEQwZ1JJNXFxNEpaY0dNd2VrSEdxdlVvMVpQcVJwRVEraDNqMUh2dHFmczUwTkN3Snl6WjkrUXpXbDUvcFEwMitGUW9Sa1YvUE13YnMzWHVrRUxPT3A5aWh5TjE3Q1E1Rm51YThmV1pTbWVhRnR0QVNsVGtZWXJSUTgxS3NJaHZ4V3FBU0VBZzFCZEhnaWlrcERXdUdERFh3bGhmcnVuaS9oYjl5bFF0R1RXZzdueVUxYVIwS3daTmcwclRzMDJtdnNoVUJERlRPNWE4RSs0R3FqNXRPMjdhVmZmMmdvc3Q3SHBTNEsxUVo2QTV4eGJoOHBDUHN4L1ZHTFBUMFo1ZWtoeWpyYjVVSlFtU2ljL1Z3YWxyTHQ2ckZJREFQNWhQTmpVTC9PQm1tbEFmdFdBTkovOFZ3SHhwT3ZmQ0FoOGIySGY0QXVJWkdGRUJsRHVjenh1a3lBK3JFSjhna1NtVFVqUnhZNWk1eDU5MjdrUVpDV3RleWpYSUVVR3ptcllHelovZWZCK0UycUl3LzNlN0d1MEgrV3p5YUxlMTRaenhlR2gycHVoNXpnczRkM0RENXM3b2gxZ0ZqYTFJaUdDMHNMNHRnYklVc0lVSVZpSnV3ZHc3Y3kwemhEbW1LeGxKd3hvUmVqVkl4SU1UeS9raUlWOHZtTDhBazZnVndhRmRIK0laaERyNS9TWFhjdmFEc0RMaW9JNzlvRkhHWnRaSHl0eE5od0VqSUpDOHRiYlZ1TzFMSDM4aW9NS0NPTHBOYVYrM2VkMCtnNzRRclRPOUFVb3VXVVRHUGFDVEl0Tmk4ZUdxNEdIMktiY0ZQSG9ZZWhMa0xESkcxVmFMOHU4eHZzaG5UejVObWNhMzNkYVM1VE5pc3JncDgxTHJNT3cyQzE2VjRRTG5EZDUvdGVuRFJscFhqOFY1NmxteTdyWTdoMWdDY05PRUg0WC80UVVQZk93SmE4TTl2amFIT1JaU05WTzdaUE8vSGhkL0lkdHZLc25udUZXQVZiN3Y0TG50REpjWEJtdzl1aFZDUmM4cmJmWGdNQXk4ZVVNc0Z1cWtQTUZ0Vlh6QXJDc2Q3RTBJd1I3MUJJWHhNb2pRU2UveHR2aTR6REw1NjBRaUk1ck51MGh4Zzk5d0VhTnEyY0N1Y0s1bjQ2Qi9tcEFvMldQS203ZEtVNTc1bEZCSDRUL0ZWYzJGdTBwZWJ3Sm9xZVdGWnBEN0VldFFCclNZNDN4NmYrSW1DQ0tGcDV2VFkwbzVYa1h2TG9wcWdEenoycEtZak1xUzFVSDJNdVBoTHB2blB3b3Q5SHdvcG93RHVMYU9aMTRCU0MyRktLQmF5eGdEUzRNSDhNK0pXRlFvS2RCNXVCSFpaNXlTbUo4Wm1NOFhtTEZZTHhzT3BvanRQSGVmTWNRRGtMY0xnOUFjWHVtSW1TbzJjNVhTejJuYVlGbFVTTUJCYU9UUVdlcjBFR0swV1hucVgrYis5NW93enNFOWJrbEpETWFoOHhjNHliWFNnUmw3ZzNlYkRrYVpsVGE1dzVQdTA3Wk9LVDZkNXZ3WGFhTk1EM0NPWXJmUGpVK1BkU2Z2Rkh4WE1RU0dzbnB0bExIWE0yclhuNHRuRVI2b0dtZTZuRXhHdE9hWURTTnhWYnZ1b25YWU53Z1NBSXkxMk41VkxSYVB4TjFZR3hRTFN3cnZLYjRQUWMxdEkxNFRxZms3MkFHTG05REgyNkNxVmlZNXBuQ2xjL0Z3c3B2MDBlQk5VZmNOL2p6WStEeFhKTGJRbVRZOXhUUGVkZmNrR25yVHRHWllEeDB6MmtDbDZtZG5RNlBNTnRkVDRLbm1PRjVmNTFNL1NYRDg1M1dRZkg1QjUwUE5qc0w1UHBUZnVjSHRYL3lPei9ablpQYnNUVG5qK3pPN3h3T1FlZVAxSTdpRDZlVmV1SVVpeFY1YlpuL1VMakk3WjBscUY4TGxtRVppZE50WitZdHN3a1NTTVc3WndMRVBKSGhRdWg3QklBMnR3U0FuUXNtdzNNRnltMGtpV3pUR3NCR1BOM0ZNbDM3a2lyeExSTUk4YlRhUFcwY0Y1UUxYcVhZUnpCK3RwL2NNdEQ1M3RZNnZUYXZJcEpaUHhRb1FvWXJnQ2w3T3BXRzRpS0FyYTBDOGRkMFpVOTlpRjA0dDVvVXJ3aFdMdGhzQURZUUVvcWRMUTJaYzAvelJWdFRXcXphOE9BcFlMb1FkaFF1Sk5hZ2dneUdvNFNJaUo2akhXbUJVUFBVc3lUQlJDUWhaRUcxVjhSRDhmcmNUOCsvZlRMMWdzbWlZdkMzaytNaWltV1BkajBJRlZDdDlhMGIzMzhMZ3NQdXJXSFJIQ3JWRSsvYk9IQVRpcjhYY2R4TlRyS2lxSWFBWnhlNDlsZHFCcEc1ZUpqMU1uOUlyR3V2OVNQZGNvQTJyZkN5UldVb1hiNlJHNkxHUGxMUDgwYUI2VnREbGl3ditPYnRNUnErdk9SQ2FPRlRJem05Wlg2S3JNZGFvS0UyMUJHaFFyN1FyVVJpT0RoTEVrOXVHQ1FZZDdZUkZDVEJZZmtRQy9ROXM3TVNpQVY5OFZhNEdMYUVVV3picUV1OTJHSG9VN2NZSENIK0pxakVBcXFFWnB5WXo1QXMrMm53ZWpQYWIzREtRaUpZUnoweFB1VlVickZyWDdhZERTbldMVWZGTllqMnBkc2xBSnN3aHJNUkhtczBlY3lLL0xENVNTMzkycERubFhSRnQzOWhrOG1TSG1TTUtRTTdaSzFvYlRicDNnZEo4LzNIVjZ6NkJwMGhML2plSFo1b0RjRzhMM1ljaTl6Mzk0eTFJVDVyUTdGd3RpT0NXVXlUSkpXTCtDeU5lSDRUNG1DYlNEdDBlS2F2OFdhb0kvajNwMERLSnNqTVpTUTRoYjIrbUNwQXNDd3o2bTlWWjI1RFZKdldYWnNWcmVFemJNVVBMbkRaMTczNkdDWUlocXpOWG1ZWUwzelp5dExrb1lLdEZYcVNMYzNFQ0FESG1seHJrakMzdUxsSkZydXNaVTlMTEJrVnVvc0ZCN2pTeVc2Q2pmWnpkb2hWd2UvdEJPcjdIdGF3b3hJZUs3WkNMbVlQaU80WHEyTXUxS1JLOWppR1RjUENoMG1mYW9iWlRuWEwxNkVOeGZROS9Bb0RZWGZoTlhnMEcvVlk4ZGl1MC9xUzJUdjdwOUVxV0JDM1pYZFZ1QWZFeFdLdEdON3ErWkx1YTllYmRTK0liTWlrV2Nxa3BvV043T1VwYURTaFM0ejdxZmdiME5PRDJLUEdPM1FwNDJOM3BvWTkyZEZwQ2pRQ3NNbVpTOEQrd1B0L3VpVFp1MDYwWUM5WWVWdUg0UE8rMnRCRGxBUFdRN2Vub0VPM2hpWDdHNTVyZEZIMUUxYjdaUVVjM2dXdTRvZ2Y4Tlh0dFFuMkNPR25ZSWNqYTlnUlpQdXc5UlY3d0ZBa2xpZUt6OWNHZVJpaDNhdklhSFMwNGFoQ01oYmFOMzBlUzhjQlZUcDVMSHZPaUJnSUxXTEd3QnBxcS9DY2lZOXdrWjhXZjltWGg3TURiOHFMaEJvSFpqeFZ0RDBaQW5qYkJvMENaeHNBeG1FNUNsU0hCYnVmKy9Ub1JHTTRscDFodUJxTjgwRkt0dUVBRGRSKzhvK0xxSXFvUUZuY2xreDN4VjUyUnNyQ1B0aWpVNlpzVWU1VDltVWhaVFJ4aXluWEUreTM4cnoyMCtLRVcwTmoyVmpDWXZZOHN2MzVMOE5oV1orQ2E2WExHa2tMRGdQQjFKemViU1YwaFJ0dkR6R3NFYlR2UGllUEZrL040dW5SdCszSlVzc3h3eTQyKzBCR29jb3ZzWThvQkxDZHMvSWJ6bUVueU5MMnVFZVcwOGtoaFZVM0VmdHVBQVQvdGtldnl1RVF3ZDB5eHVIQkl2WVI3dHdxQk1DVCtmZ2tHM3JzNWcvOFB4RllIUDB3alZlWVN6THA5VVhBQXVqajkzRHlDNXJPajl3QVNGUDd3QzlpUk1JNHQrVlhIWE8zOE9KOTdqUVZpdkt3YytDRExUbE9BV00weTlIV2hTTEhKZ25wbnB0OU50MjJFdTdYSTJnLzJLSnAyeFVnSlhhcUNxU1BSN3AyT0Nkb0tWS2pnYVhodWV5R3g1a3hudWVyZzdqM3ZkK3BvdzBUVWJCNGp5U0JKT1NqWlorYkFMdk1QVUhvZ0tKNWl2UHg3NGJ3ZS9OeUhsaDdmaVo1Z0tyQTZZQXduVGFkYXBVMnY0VmZQeGp1UkpUQTMrMHBPdDIzN054cDRCcmo4aUlkSldFZFFuNklZZzRtd1I3NXRJRFdBNjdpK296Y0lOeEk3Q0pYSUFtMHN2QlVvVG04QUtPNlRsVVFIL0M2U3QzMHBiTmlHaXlEaFpYL2VsWmhKVEdMeDRJRTV4NndVNTVXNVJ2NVorbWFKeUtYZlRBQkxPdFdjTUdTMFozb1BrU2d4Uml3VGxRM0RERTYxYU1OOTZoNmhBUGdqMmRwUURZMVFkakNGWnVOWThsNDVrZ25HYUNESnJUY1J3VmFUNjRSNDhja3JTejc4MS9rM0dBenB2TFdDd0k5WlJ0UVpEemdCa0FncjdZWFk2Tld3VXZtTXpwRzFwK1QxUS9OQTdISFJvRGFSSkxHbmdXSDMvRkRhM3VKSHNSS0xUQkNuNU5kc3M4UDNxemJuZ3lMNElJVkFZWHdMc094cHdtZU9nMGMvYnYrakk1UVNHVEp6YkpNQTJxeU5BRHU5SjBnbDg1UWc1dXR1Z1cyZldhQUNGV3ZSd0g5VWhSOEFXRnpHci82R2dSZEM5bWlaMzJZZFNLOFlVRElVM1BGSnBXd1FidUJUbkV4ZnRRMlRtQmY5c09xT0Jya0NNTS9yYU9KUnJQR09KcEYxZyswM2VKZUdGU3h6aEl6OEt3ZXY2eEhrVGxLSlVsa1VmVm5KNGQ1M2drenQxN0hBenhFc0gyUXhWNWNhd3EzS05JZVI4bDRvQUpGQStnZk1MdStaNG9JNEdMSGJMUnAxcmlZUFZHNms0NXNpZitmY2JIeDQyWHpyNEhOUW1Uczhic2lVSm1zbCtINm9ZamRkUFNSY3BZZDN3TG5Qb1RjWmxKTG05My9aWVZycW56T3kxWGFZYmJqaGJERytzWW5nT3BKbm4rcml0ZjNUQk1yc0kzSERubUVZQnFuWlVpQ041RWhqN0tud0tCN2htcGVyS0F6Wmo3TFd1QWN4NUJlbTBtc2owQVdsUXBXMjJHVG1rSXlUWnRsVHBFMEROdUtYbXRQVTNOa0lXeWd5Vk4xbzNxYTA3SUNnS3RzWjU0T1FJRWtLRmJybUt0MGxrMHdqSjRwUWhGb3RUMitYaXpHK094YnJRdFVZRFhzclZtd2htRGJPOXUxZ2FWcWpTbmZYQkdHVXgzWTByRlI4Rzg1RU1WVlRSQ3RhU3J5ak9xeGhPTk1BYnFqZmNvZjlMM1pSYk9reVkxTGcvVEJxVzdMZng5bDF5bll1NjBPT3J0bTlTcWFuSHUxZHJWVm0yS1JYb252SVR0bWI2Y2ZGSmJTTnJHSXEzalhUNjZ3bnVFaHBwRHVkWUh3ZDdZQjlrVzl0cG9KTzl1NVFzUFhlTDZ1QklJOUlJb2VqTnloQU1zVUVPd2JGc0hXM3ZkSlplRWlQNk1WdUd0VWlBWE1kekluQW1kcDQ0ZGF4Ny9YUC95cjhvZnJmMXovQUg1YU9HUVpPM2JOeFJJZEg1dVhuUkFUUFVpOVpUWGJpbXJ6RGNzVGQvVGRBaEpxc2xFWE0vRmtEbmNoZGp2S3hzazVZWjVFMC8xYzUvVGFPc3p1U0pMUUdzUTdHeS81M0czbGFuRHdUYldIQWxjZml1OVJGcGJaaTUwdDNTaUJXQTVYc0VsYWlaUS9ITHlhRWljUUkvQk9TTWJWYjQ5Umt0VlFOc2VjbVQ1SVpNK0phbStZSnlMV1pOaUZnV0JpdTM0ZDQ3SmNuVEFTVGQzT0JWWERWenhDaHBKVmh3MHNQcU5uQzhuUElGRDkrSDVzbnJON0ZTVDJZb1pWT3RnenIzSll4eTBsZEJwQjk4RFpRVGhIdllQMUVWM0xkUk1aK0trZHlkbUVTTG1Lc3pYZ251Z3hqRG9IbEYrSGVFR1F1aE11Y0xzVnovVEQxMFdxVDdKUE1IdUF3R3VzNWp3ZGlTK1dqVXFyNHlIYUZQU0QxUkIyNFh5MUlna3NjSnEyWHp1OElKeVkrazAvMWNsLzBwNlJjZVE2MkFWTHp3Rit5N3lKY253aVc5QnRXUHlRRE9xK0FDRXl0VzM5MWpRTGpabUF2aXhpa2w5Tlc3WnNIMEN1VjhkL25lRlVMMWorVFJ1OTJOd1A3bzA5bVIwN2RiYjNaNHQyUkJTak00dlZaYytaUlFEbFJmek5jZG1SQmJXeGxmTzBRcldmd1hOSVdkNGd2dXhjRWpHKzNFVTlKSjFDMnV6cHRISktRaFNWQ00zaGQ2RE51S1hYWnVmQUFWc3VBQlRlM3g1T0lnbnNkbHF4bHh6Z1lGMUIxYldKeE9hVkliVTJBRjFsOE9sY20yVWFKWEo5ZGJQLzdIN0MwTHVwQzlNTlQ3Y3NoTldwOXM4OUZnNG9Lci9LZmdDb2hQaXJFWG1iTGQ0bXVyVmlHeWVkYVRvOVJiSlBmZndhN21IN0RQQU1TN0ZFWHJFMHpzZ1IxTk00TTFsZ3lyZWpSQ3A0UjZnd0dXSFZ4dlQ4dWhMV3FpMkg2QnRIM2ppSllscm5pWnNjb3BneXdZS1lNNi8zN3J6YWdRaE9hdUd1c1BlcThzOW13KzYxU2lVbzFRUWR0M3ZlbkdNaHlHS1U0WkVtaEFmayszSzRia3ZkTElqWjBhYks5NXlMejI3d05Zc0wrL1BZRGtGRE9QTzA4bFNnY2tmVlJZZDVSdXZkVUtTWGM0bFFsSXVBZzNpQU41eENjU3MrWCtnQVNoakw2bDRKS0FwZmY1VFh3WUtqS20zeTNGOWhOZVBGTzhPNzdHeDB5b1ZETk12SGhVQUE4UFhGeDhFbnAyT0F5bnRTOEN3aWEyZEZyeVB2SE5YRzMxQVQ0TkZXNGtEemw3eU9FRFhVaytha0F1NXo2aEU5TU5zcXlZMjZzeWkxdjkwalYvemI3aGRFMmszc1ArMnVOZG16MjI0ejVPS01LUUdQNmkwUUtrUTRPMEtTczhLU1V5ekRaK0hFTXpkRTFhcFMvZVZhZXptdkFDT0h3cnlaQzI0UUVIQUExMTJXNmVKZGtIQTdXZVA0R1hsa1NYeXc2cmJhQUV1WVF6c0wvazRKR1N0c3h6UWd2bXhQc0Z0NjJXQnUzUzUwVmNpcUd5cndnV2JOMlg2d2dkNHRjV0JYNEJiN0ptUURzRGR4OFN4c3MxNGRVL0N1TUZ1WW5LM2VqdmNzelpZdlFMTnpnNDdVTzNVaCtod3FFN2VEWjc5bmRxbWQvYkF2cStteEhKUVgvby9Mb3BvN24yRm5mSmxJczFqT1hMUElXdzUyTm0raDBwbGVsMVBnTEloK29ZSndBeFR4K0lnY0x3cDFPYXZGZ0dGeXhoUG1ZcFI0aTNYSmFhTmx4NWswWjRGWHlwYyttZXhhYVNkWHgzNVVzM1phcDZNeVc5V2hsbW5LZFVZSVd0RDdoTStJWVNQNDh0QWM1UUhQdG44bUJpZURmQjY2bm82TVd3NkpxRjNPbkgzc3hjMjREQjVwM1F5TVp6WUhYa0E5VXdJUjdaL3RGOXEybTU0bWFuK0NsbnEyT212bWxNNTBCd1FrU3dOTlJXNUhYam9FeGdoSlJMSlJIUm8vbGFRNExTUXhlcnBSN0pERWUrNkdmSHFKSzhFYVdPazNOM1I3S1o5OVJxZmt2cGpmeERiUTVOeThReit1RnUvdGRKZEtHRnpPN0pDa1RZZnVlWVJwMjhjMExYeWZZdHlLMk9HTnEvT01uSzRRUFQ2NHR6SGdzZ0VTSVpzd1l0VGdhNi81czdtWnluSTBTL1VkSFFzWXNCSFR1VFNkS0JSTXZ6d3FEWENVaU9JMHBHdEd1MFl0T0IyM2c4TEVIWWRSc01VT1FhbTh1L2xLTE96R2daRktFS0JvQ2drS21LRWhlcUhvY0ZrOGJMK1VmZ05MbTl0R01rZEx3UjZ4azk2emhjTmVSN2Z1MHg0NVp4amxKRHNCdTBSK3MyalgvMU5Mem9aaXoxZnpjaEp6OUFEanpPT0RIU0VEMGlNdnpXTTVHY0IyUVBndTI0Y202aGtiQ2VkSWVkbGxrMDgrdFNja3JYTzBWaE5CYlg5NzBVN0padjl6V284YXZKWE5CYUFDWDk3WFlpU3JkbzFWdHNWQWRYck5aK29BTGtKSWNtN0hlckl0N2NYWlFleE5pK3V6d1JBUEZtV3lsQTVjbDllWnNMQVNld0RmZ0prN2JUZkV0Vm4xT3Q1bytsSXl0dmRqVWYzS1lJQjE1UkNGYm5jTGhLZnAyVW9FaTVuU2l6Vmx0Nkp4L3dGZ0s5Qm5pOWo0TzdIS28rL0hVdlY2Y3EzQm9jcjJjeFMwUElqaTRCYXU2Sndxb0FHaXVkTzdtOHF6aHAwZGR3NGVETXhCWTNnOGtZK1kxcTNPTWp0bi9xZkhjMkZlUkROOTcvRElNVE1oMFBsNHRmYnJjZklJOHF6ZVZnRGNRUEhKODVnNUtJNERhZjloTWN2MSt3OThORzcyUmFVT1hCRFQ3eTlhaDh2YnJQZVlhSFBIQjVVelZUT1kzM1FqVUMvd3hNOUJBYWRlL3U0T2hTVnNPaEhyNlU2N08rZFcyQW9CMVNQSEl5U3l3d0N5cmpmL2lpMEo1bS9iQ1FSaW52R29lNnhwZXRLcWVaVFdaOHV2OUFYRkRsTkFISFkxaUQzczlwdUFDZmxNNVFYeDZ1WHM4ZWRNTVlDUERZSlJzZSsxbmxFM2RzMXVhRjZBa2lUbk5jQmliaWR4dmE3L0diTmlsc2Z4MSsxQ040VFRBV0RuVWJROWMvdkJYZ3hibzcwTkoxK3pTTzh3N1dMeGJIZXdYaWV1bnVvYVhCZi8xZnUzdllnT29iMm5rNHNjNmZYWnhJdzlnT2RGZUVNeERLQ3NPUmpxTTFMYi9QMFI5d2g2anI3emVMV2o4c3FwS3Q3Mm9pQ1duTGxjRllOZ1ZtZ2VURmhhdE02QXJoYndwK2JzUTJ1S0FJRFBDdnorMU12bzhqcUhwWG9WMXFJVUQvMXdOY2NkalhiS3kyRU9DWVd4UGZNbUppQXJwc1dObnZUZlo3ejNHeTZvMkQraFVScEswTDlxeWhjelE3NkowS3poR1c3V1hZb0pPMzN4NXN1RmN3VFY0L2dqTzJtS1F5VDNHVm50L0RuSXZQVXpVdVpodmFQZE9aSy9nYmRPcS84UVJRNXlRV1VUbDkya1plOEVhMm5DRFM5OEFYTEgyRVhWcFMxMDRUUXZUUk9iTUNNSCtVNUZwM2w0cTJhdXR3SEpBV3RJRHJSR0ZoYWJSQWg2emxvdEhsdHVod0U0d29hVmN6ajI3enFWdzhYQkRsUHJCV0JEZEExRmFQU1F5ZnFRR1J5TUxRNVh1TjFZRGpFdWpvU2RpZGR0MXBQZFc2WnhQNURXNTNhWTVyNmNFMXljaCtjMFJNelowNXB3TDJBU29zL2xwRE12ZFlHZjZSeVI4Z2M0K1RJTnptZG1TN2tKN2M5anliQ2VhSGNySzJxZ3Nya1BpY2oyZU52OEJKb0JCd25tOWp3dWNKWm82ZEdSSGl3Z2xNVXN1SThGV1phbmVJNTYwcnVaYnpnMUJEcTBDclJ0V3Bqd09wak4vQzRYSGR3U0lPV3hOR1E2NDhHcFYrdUtFRElmcllHMlFwQk9PeDJtSlR2TlVZTFd1Nk8zeStlUGNNQ2l1TDJkK0NBa0wraUNyVU1FREpoLytkZ2tEeENjelNCYjNQbFJ2RnNEQVgwTzlaU2lPc242N2JjbnF0bnhWQjJ1UFpKam0wR2JaWTN4aGRzL3MyUWtxN01XSWNUM0dlTmJZY2g1Yi9tUE8yVzFsbWVQVmc3ZERoTUowMkViYzhwNklSYmx1VHcyaTA3QTR6NHJmTlJCamtHVkg1MHpiOVlnclE3dk1WVU10MEpFSjhoRjZpQ2I5U0tJVFdoYlNlbWFMcDFIZHBBS3p6aXFoK2pCSTh4enlieE5VZzQ3VE0yVGRXeEVQaHlNdmc3WmNkWm5YSkM5aXdYTUdYNzBkc2Z0b1Q2Uk11aGFoN281RStBSTR0Y3lXQmFEbjVtSlBLVjFEbnE1WHlzRWlyMEZuU3VLWjc0SFJMUFlyVTBnOXNoWGQrTzMrNHlDdzdJa0p3Y2Y0MkVxMHRMMFBURS9iT0hCMmVaK3kzVnNidU8waHpIeDRhM1pydXhnT0V6YlRtM3I1bStWZGJLczMrSWw1elRDVkk3c2FNN05ubm5ad2ZKNUVqUk85aUtBUXdUWkRXS3hXbDkzd3VGZy80YWQ1Y0ZheERPNDdNT09paFZ3enNnOFIrL3pxaTNyanpiTmdkWFJtbVJFYVkybjZQdUZTamduU2ZZUXpvbU9mZVFZQktMTXJ2a3p3YzdPOFp3dngrNmY0ZllQQkVuY2VDVkt6NmxXVGFZcm0yMnBjVFJMRWRBOTJxdjFNYzVVdUNIYTIvNzJCUnNCTEIxMkFLNklIcFBMeHJQZjVCeGNCMGJaZUJmdEZMR1V6RWNCNUZkZXRVMzJFQmZMM1J4ZmlicTZBUElVcmI2MDJUNmZLZEtRdkFBdlk0M3Q1cTAyeWNWNVlPcWdYUHVzRERXcjlWcU44Slg5Ni9raTJJVFZVRDdVWVZvWG9QVG5zajMvYnR5Q2pjWWorUnFjeXpxTnh5NGJlZVhqbU1uYlUyV2c0eHFLci9zZFVYMktRSzAycnNleXA3eDNFSitSQ0M5ZlFLdmw1QitSZkczSG5kc1JsQWEzUXdBSW1WMUxKdmVlNHVobFFrUkc3N3dKS1pmc0NLM3pPUWZVWnlxbXd6QnRWMHFFTkxZV3VGeW1kcXFqVnNEc3dqM3NFdXd0Tmxub3RDS3ovVTZmSFVzbURPZGVHb2Z6czNlZDVzNm5kYXI3REdRTVcwbGVpTFErZ2NOUjJGeG9IUjBBZStDSVFMNkhTY1Y0RHgrWUUyWmVrYWtZRnJJS3NpY0xiQVpnRzdUdFJMN09JNEdzQkhwUTBRNmk5akVSblVoNFNtbE45Y1ZmcWZ4N1F1ZVFEaTk0VlFuRURvb01UdFhhbFNEREd0blBDb0lRMFZsc0E3V0gvMjg5WTV3czRmbHI2SFlpYzJ0U0FLRHdUSHpHQTlBczF5bnV0Q29wK2N3SVQvQlJiYXVlMlJaT0luSjhxVnhQbW50T1dKeEpqaUpiQlZWeGp1Q1FacWlDeTdaclowK1lQWWxPUkF5RVlQU2lGTHQxL2dWY3h6bDNzVFhrT1pPNG5NMW9sL1FaTHNSclBNKy93blF1SElEQ0lqcHVibHVKdno1QnpKNzZoQjYzTk5LWlhPOHI2eHZkWTRKa2Q1QkpxK0swYnJ0OHRtTS9Tbldvc01PRE1ERTA0SEppM0YyRHg0WFA4ckV2NXU4ZHd1TlFMdE1QM1Q2K25LeGJDY04raGl2RGIvT1ppZXVBR1FkT1pQMklHOTVvMWZjOHBNcVNwdFBicmZKVGdBWWZLR052a3ZPUnQwOGJtUmYyMFcxdHNMVHlTK0VwNDNhYzRuTzYvWjFJdnUwd1I3WEU2dXhpL05tU2FmNis3UUo4N0dpUzVUaXVHSmJrZFVySGlwTzJUanNoUHR1enRVMVdQRVZreG1zamtHY3NIdGE0eks5anBHQXhYRGtoWlY5V2hMUFFZMGhDUWZaWW5DOXZuc2xHRDBlblRvOE5MU3MyZUxDZ3RpRUxGa1FQTUJxL1FrM0VkS0VTQjl4M09HRy9PcXpiYytVN08vUU1FbXA5b3pNNVlYVk83UWtlM1Rrc0lVNGZJd005WklOWm16SHFaUmRldDM0WldVVTBIUVNheDBJQUVCMU9qSGtSOGZGQzNPWG4rVlV6TmJPd1RuTTJnZVRJN0dYZG5OUFBWdFdqOSsxSjhubUVUc3NlMVRUc09ZbWlxWnpKenQxQ1VqYkVrbGxJZ2hKcm5tZGJGUWRMWGVNOG1DRytDQ3M3M1ZzOFBVNTludEgwSGl3RmorM251VDByTjYyRWhxY2lxT2Vwc2JGWFFXUkNpd3l1M2NkVkNJUGd6SFNLbDlVVmhBLzdqWHlhRlZ4M255Rnh6dWNiRXVGRGFnZUNFZlJweHJLTEdNY0cxZWM4eG9WRkM1Wk1ycy8yVWdMSFo4TmRQc09hc3NZL0hPQVNwSnk5clFjZGhjL3NjeGg1V1JUOUFsa2VqQklDMkZySHJmTFNSY0NQOHVVV3dta25URTZPVjJEWTRGT3JKZzZkcmFkSDhDdlhxeGMvbmd3QXpNMm5YWlNOcEd2eWhHYUNncUJLV0o0d2xCTVVYck1hUGxmRE05MDVMYm5rWFV1NUhCeTFidDRob0ltY1EvUVltanhySDVBZGJzV1p5Q1U1QnM0SGpIbVVPOC9NaG16cnVNaGt3K0FMaHdUbXBKcnJnMVRwSDE4MVRMTnlNU0FmSVlUck5uK0VKWVIwQ29vOXdmS3dhNXhuUnRnd05DcVJGbnJpMEhtSFBVcmhjdjJpVTFvY2cyL2VIdk5uKzNCY1p6S2tkVW94WGdMa1poY01sT3E0TTB6NzRrMVpNMGNxUDdhR212WlhnSG00cEVOeDAzMDVUZUZrK2U0enN2UjliU2diVS9WT2pFZHNGd3d5M3phMm4yZVpmT1laNEp1dzVtQnZHMDd4Uk1mN1EyeFlSQ2RlV3B3Umc4Zmp6dUQwRVNMVG04TWpyd290ZEVobFErWkRmMTVQVTZFaHpZbmgzMm1FZGNLTUZkM2JpZ1VucDhYNzFORi90amxMTTFnT3BDalVhSnVIUkhSL1owNDNHR0MzeUxmOW44blFuUkVNSGk2Zkt2Nzl5VUJBdE1VRjMxYTRxYnFMYklTMVU3dHZITVhpVitkT090TEQ2aE5ZS2lFL3p1REpPRCtOTWpaN1BzOVAxOC9JSDJ3RXNMK2NZZ1NYeHRpakU4RXNOVHd0enE4QS9kMjJ4ei8yQ0hUMnhPWVdKQ09PQzJFR1grNC9xc2FKL1E3YlFRQlpvWWNHdWxXdTFlb3ZyTkU1cnRzcFI1OFliTVVMN0tBNm8vaDk2NWxydVRCTTFOWUdOODhBbkR0Z0E4RmhtUWpONlNEb0JlWkRCTE9QQmJEakhFTHdWZDVjZlltT3RwVUNUUUkzMm1kSTBoZlNaVzF2UDQvVklhcER4bDZrOW52TEFCT29LZkt1TTdOQ1BMQ2p2eUsxUk9xZWJjOTQ3QWhTdDkvWHVPMlVLSStqTW53Q0RqUXUyKzRFUEtsV05OdG4ydkl5dkVrdmRxVEVwUTROanQwN3ovMGc0TmpDTUIyK0RuVERtQkQwVHNmM0lWQnpnTnZRNi9ZemhsTmFycnBTbFVHZnUrZkZ6UUhGODhVZzQ4ZXRvV0E4Z0Ivd016dk1hem5WL0E3d3RxcnE3czZVZW4xMmhGMVF2TmR0SVZwWUJNa0owNnNGVE1SUkw3TzRsaFUyczhDQjJIWUdhRXF3VC9YZmFZSHljTWl4K1gzNGtNSk1KQjBPbkxjNDByWnJLZmdIclhGV2c2ak4rL3U0SE1UNjRjL2JLR2VXRFFKamdZeGo3NTA2aGlna0RGbkZBNEttZVZ0NURGZThRQllZOUxkNklNNWo4SGJUelBFTjA2MGQ4d1VvUFhFa2ZpMFBQUWlrUVA3eTJRanMybXpCL0ZWS2xudllIeDU4T0E5czNQeVNUVWZ1UjhGMUxBODNDVmk0TXdkTDMyOXdZcFd4M2o2K24vS29hdU1wck5idXNuNmU4VE1PaFhYV1BRcjljUWQ5TEJEczBVa25acG50MDRBOXFLelk0b25hOGF6VHFkZDVYczR3N2FhelFJd2tGQ0RwQUJBZ3dybWNyK2Mwc3BYWnpJdG11QnNSb0RvVUdnMmY1RGFuWWRFNUVkRklMbXFkZ3ZCbWR0RHhkTU5YMVdvTnZROXVFUWliZGFESlBEWHJMVUxiL0RESGVTYmFldzFqd3VOa2Z2aml5YXRidEdkQnVQWER5Tkg3VjVuYzU4RCs0UFMxQndMNUZvamg2WkU1VTdReHlONWZINVBuVThoWVRaOFFVY3lyQnlLb1RkWUJIKzRQd1luSTVxTWVzek95YlNhMU5zcHNNU0NUbk1kK2ZVS3lVMzU4SXBVUEV3aU9rcldiL05UaFkxQ0ZOVmJrMkZQc09CM0VySlZxYi9JNUtwYVB5S3pMTloxQWMwb2RvNDl1eUVGUXhxOFFDZmVaeER6RVRaOVQxcVd6RG5UY0hxQzlmRnIwak0wbjZPd0ZyUWxPRFN2MmZTVnJWc3JwaE1WSlVOZG55Q0NZMElGTUk5NlEySnc4M2o3UGw0eU9XSzhSZWZMQklaL3d0WHhTSGphVW0rb1o3N1FySldQeFhFNXhVQ3dLMUFlc2JLT1NUZkdPZlBtNlJQbk1nY1Y2ek5VU3d5MnNIaVhhTzB2NFNJTVhPZVFTTkR4SjB0UDRmYWJhcWZGaC9zdGFKQUlDdi9ZNGJ6dDlWeFlwSkZVTzBYWXVUenE1L25rb3UvSEExT3hKTEh2MnZKMjBCN05wNXJQR012QnhYeXhGZ3ZvdER3NlhCK2pGYnMrNStsaU8zTGZRR2VkSXArcmVzckc1N3VqYzNZM2RPc1lmWSsvZXZvTzE3OHZCRW5leUJBTWk1RUFSOWJRZEx1TzBjeW05enpSVnJNc0RUc05nUm01NkcvYlFtQ1k3UVlQRnZzRVczcHdMSkZaOVRrYVdJamh6eEVmdlFXS2NBdS80Y1hqVk5nZnBXU0ZyWFdkQnF2dUFoNG9kWHdnNmZvWFA1UHF3Ryt4b0JuejZ0SVJidE04aU9hU3BPZmZVc2JtT2tuak91SXpwdWZBY3lyZnc1c3NScnl5SkZQUFhzOU13eUdrVHVNODZlVEUrWU5iNXo0NHI4ZnpFZG9UUHlBdjRQVTVYbVYxMjRPZ0NxM2R1TUxuSWJDdG8rOGdGQUZtazFEcXpvM3pvbk95TEJlUm1wYU1lUmNGSnpUNlpQdnVlaTQxblM1N1hHdTNndVkvVFdRQlRLSGVGVjY5dFRaa0greW9taTJ6T2M5dWVIY2JuUXgvMEZ4K08xYS8zVENpMTFNaE9ZR0lIckxIN2JDZXJzdGxESjhkVkoraDZ6T2ZEUFJ3bGtwMDVXbndLVFBJdVRkMWNJN3BYenpQeVQ1bGVObHc2M2dKRzlxQUNsSENQTGZ0UWlzOENoalBQenc0NTYxRWNWcGxmUi9aZTJJbFBuWU9heEF3bjgzZ1pjSWdvQy9UNnlWcURiUFk4bktkZHpXb3Yrc05LQjRQUjgvajRGeTVzK3JBN2EzRjhvcFoxbXltY1pGeDAzTnVwdC9ZeGRQMHRVSDY4OVIxbldwV0hOdXdLTXVXUjBRTUhNNjdydTAvNUtmdnpoVlZPVnQvU041RFVKOFE1VU1hSFBWaHFOTXlVbU9xTHhCK1dtWS8zc1ljSWU3YTJYWTZYZGlpaWJXNDQ2ODlNWkd3YXh2dTVKeU9jeHpqc2JmL1RZMTdmTWp1YkN5Q2J6bW00bXdlYjR6cVJPL2xZWWVodzhyR1B5OVF3Nkg2eXNkc0gxK0syNTdBMjJoWmpoMlV4a3hOOWhBOE1FWmVFK0RwcmJOa3NrYU1QOCswK29jN1JURWZ3TGl2R2lJUmVDbmJoOFlIc3Zwc3ljSnc2RUlzZjVWUFNjNWxXVUxmNllMdm5IR0RZZUswY1JKN0FUeDdpQmN5TDNmUkpJdzQveFBNOUtYMGo3bHJzdXpsbmxsZER5dmlJaGVjMkxZMjVmUEZNQncvTFRyNWdmWVJUaHdnMnhBZTIydGtFNk96aFUrSFdjdjY0bytTMG8yMWZvTW1qZTV4SGU1YndGSityTVFGbHgxaDlCSE1mK3VSakhHQlIrZGVvcWZ2MHo1aVlQWDRNSGprU3gvTnFXR1VqMkcySEREcmdLeE5wWVhIZFpwWGlRNWtMdU9DY3NtYndSUUlhWHl5ejhEUGZlb204NlZjL0k0cnF0YXdmTmVxMFVqMkEzYkk0eDBjMzJibnNRMTdzUUQxUHViS3BHTnN3N3p6MlJiU1lSaFdIbnBxdDRyY3RteVo4RW9BbXhCYjVacnFia0Izbk14NWJhWHdpeE9jakhoM0RpVHBzRnVnQ2xzMnVNcXR3eTdiU0JEbjNzRGg4RWdCUHdQaFRUeVBCNVBuZG5WN0ZFdnYvZVo4eGg3Tjk3Q0tNU0NHZkFGc0pSaDZiblRHcll6cTVQWHVzV1oyQ0dJZlBkNElGL3IzaGtkVzR0a2Q0UG43cmtZR2JxSExlRU84QzZ6QllFMm5FVFpPZ1RqcVJRVHNJQ1hlSzJlZWNkc2M2eExhdVUxV3JCWml0T2dQYmEyMU9GL1NRenZHM1ZreGd1WHRHQjVXZHB5Q2RWdjd1V0NZVFV5THNlQzRIV0ZydFlNdEtkQW9RaXNRSjYrTnpOQ3ZZOFp5Ukt3NDh4UUNoYThnY09LTlpWQ3VLZ2s4cGZYekNRRlhLcnZBNUU5OE8yZXpqQjZyOXZpamY1VE4vRytLMU9QeTZPOG9TVW5JN0dyOURlN0Y4SStEc25tV2o5VDJmeHlpTEhJb0ZnSSs2OEo1NzRTeE8zYTdMNThQNGJKMEEvcjNxcFNSQi9FenhlUnFSZlFJVHhoaUFWcGpGbUQ3Y2JKdTI5Umpma3Ywelh1MDdCeCtPNXhDK2ZXNVdQdW1vZWNvWUVWOEFjcnYyUExOTWtHZndSVlpLVU1TSnN5VWlIakhHMTltSHFUdSszeDZUSHM2elNhQmV3SWZEK29vUGRBNzJISCtWdXh6V0o5bXBCdXQzakh5MnJRekYzQ3JvYW1JZm1MdWRNTUNOUWRSc3IvQTVqNXMzdzJCWnZldk1BU2svbGNTT0xEelBKNFdPTCtOR3NSbHlxRHpmWGoyMUR6NDJPUHRvaWNma2NiU21mSjJ6MjR1bEhvN0U1aXFRaWhha1R4K1RHcERlTXoxQzJVZjR6QjMxNWZOVUxQVzUyK05qcVo5NysxeW5ZQkhVNHlOVG5UUnpwamVpYzMwR2VmbDV4dGdwSC9MSkFzUVk0N3dkYVdDVkE0SldjVFRwTU4zdHdUVC9zbXU3VjgrKytDN3JBRGtFOXg3SENWaHc4bnBnN0lPcEhYWG84eHA5cU9PcC92Rmh5TDRZazM3VTA5RkJremJIM2FnREJ4dXdXdDI0T2thMU5XQWxqMElSRkQ2emFaWUdlWHJpT2NDM1dKL2xyY3VXdSs4ODdheWZydjdoZ2FYajhweStWeUptZDVxSEljMldyampNd0dNZ0tCZlUyTm84eStVcjB2aStjVnVqOCtWNGcyMEJrMCtzdzRZOWh1WENpVUdPVFhmcUdwVFpKeUY1K2o1Zm43c21mOXYyNHpxeC93VDR1dXBWUEhJZ05IZ1c1SUZ1UDdNOXZvUkxmZFZIRDhHSUFmZnNBY1I5R3ZlVEQwQWJCZG1IQTN5UGVlRVhMZEtHbTRyN29aN1BYRWY4QkNKdm5ScXY5eG1OVnQxR0h3NTlocDFqSDhSdEsxVXNpMkZsZllidERENnB3bno3emhIRWM1enpycWRRREJhbWhTenA1NW56WmFzWnZvRTVMZ25rNFpUSnMxdmxmRW5UY1h6ejFKZEVINXhta2lEeUJxOUQ4ckZqYkljRmwvTE94ZldiZzdRbXloSFdEd1NCejc0L2JxZjduR09zNnZVMHdRZk5BUm5Pckx0dDVhaHE2L2M4eFdQZU9UbmNzMFdUZkZZcjNSNHBwek9nVHp6QlJ5NnJuQUNFODh5MEp3MldNcW1uaStOOWJhYXhlOENHZm9tQ3d3THMvZmc4ZXpZVlBCeGtyaXRhZ1dDVGdnY3pQVHZFMzRkdUpwK2ltQjJ3ZFNyMVgydlpBRUZqNkRlQXpXS2F4SWR3UHpBM3Uza2lvdU02RDFKS1g1cWVmTXRLdWRKbGhwdG8ySDFNd1p1ZHR3WEVxdWVjOHd1YXNXT0FyR08rNjdRamkrVytQaDkvKzRxVEZpVzBEaUI2U05LRzAvaHR6MFc0d3BpMlJsODN1NUVTOGdQZHlmWjRQb2lSR2J2aVpibWxOWWFXZkZvbGlMQllwalNmZDNZRjRPdUVGTHVYMXZESnUydlk4dTJENnQvMlpXUUlkdTVVbTN3VkM5VzZjK1J0OGJQWkdtZGp5WjNZeEJyYk1YdGI3dm42Q0hFY3cvUDU2cEFWYktsWk9rQzQ1SXJTOVZrTWRkdVVaOE5Fc04za3RrTjN3YmJsN0dCcFF3QzJuZzArbm9vNDhqaWFyOGRqN0xVQVp2OFBQUGZ2RWE2TzBVNEFBQUdEYVVORFVFbERReUJ3Y205bWFXeGxBQUI0bkgyUlBVakRRQnpGWDFPbG9oVUZPNGc0WktoT0ZrUkZITFVLUmFnUWFvVldIVXd1L1lJbURVbUtpNlBnV25Ed1k3SHE0T0tzcTRPcklBaCtnRGc1T2ltNlNJbi9Td290WWp3NDdzZTdlNCs3ZDRCUUx6UE42aGdITk4wMlU0bTRtTW11aXFGWGhDQ2dIejBJeU13eTVpUXBDZC94ZFk4QVgrOWlQTXYvM0oralY4MVpEQWlJeExQTU1HM2lEZUxwVGR2Z3ZFOGNZVVZaSlQ0bkhqUHBnc1NQWEZjOGZ1TmNjRm5nbVJFem5ab25qaENMaFRaVzJwZ1ZUWTE0aWppcWFqcmxDeG1QVmM1Ym5MVnlsVFh2eVY4WXp1a3J5MXluT1l3RUZyRUVDU0lVVkZGQ0dUWml0T3FrV0VqUmZ0ekhQK1Q2SlhJcDVDcUJrV01CRldpUVhULzRIL3p1MXNwUFRuaEo0VGpRK2VJNEh5TkFhQmRvMUJ6bis5aHhHaWRBOEJtNDBsditTaDJZK1NTOTF0S2lSMERmTm5CeDNkS1VQZUJ5QnhoOE1tUlRkcVVnVFNHZkI5N1A2SnV5d01BdDBMM205ZGJjeCtrRGtLYXVramZBd1NFd1dxRHNkWjkzZDdYMzl1K1pabjgveHJ0eVl2RFJmRzhBQUFBR1lrdEhSQUQvQVA4QS82QzlwNU1BQUFBSmNFaFpjd0FBQ3hNQUFBc1RBUUNhbkJnQUFBQUhkRWxOUlFma0J3SVJFZytzaDBPcUFBQWdBRWxFUVZSNDJ1eGRkM2dVMWQ1K3oyekxwdmVFa0lSaUNDMFFhZ2hkT3FHSU5CRkVVY0VHSW9JRnBQaGh1VjdBY20zWDNwQXJLZ29pSUNBaXZZbDBFa3BDU085bGU1dlptZlA5c1R2RDdHWkRVVVRVL1QzUFBKdmR6Y3llT1hQbW5mZlhDYVVVZnZudFlyUFpVRjVlanVycWF0VFcxa0tuMDBHdjE4TmtNc0ZzTnNOaXNjQm1zOEZtczhIaGNNRGhjSUJsV2JBc0M0N2p3SEVjbkU2bnRQRThMNzN5UEE5QkVPUi9FMEVRSU44b3BlSXJvWlJDM0FBUTcxY0FvSlFTOTlDbFY2L1BTRjVlWGx4VVZGUVRqVVlUcDFBbzRoaUdpV0VZSm9vUUVna2dBa0FvSVNRVVFCQ0FRQUJhQUdyM3BnREF1SThuQU9BQnNPN05Cc0FLd0VJcE5RSXdVa3IxbE5KNlNta2R6L08xSE1kVjJlMzI2b3FLaW9yMDlQUnE5M0dvYkd2d25oRGkvWjM0R1FCUVFraURWOWxHR1lZQklRUU13MEFRQktqVmFqQU1BNFpocUVLaGdFS2hBTU13RVA5V0twWFNxN2lwVkNxb1ZDcW8xV3FvMVdwb05CcG9OQnBvdFZwb3RWb0VCUVVoT0RnWUlTRWhDQThQUjBSRUJLS2pveEViRzR1RWhBUm90VnIvelhRZGhmaUI3YmNKeTdJb0x5OUhaV1VsYW10clVWOWZENzFlRDZQUktBR2ExV3FGM1c2SDNXNi9JcURKd1V5K0NZSkFSSUR6QWpNUElCUEJTUTVTM29BbGYxOWRYWjBhSEJ5Y29sUXFiMkVZcGlVaHBEa2hwQm1BWmdBQ2JwSnB0Z01vcHBRV0NZSlF5UE44QWN1eUYzVTZYWDZ6WnMwdWVBRWN2UXpnTlFCQUVmZ0lJUjVBUnltbFNxVlNCRFlKME9RZ0o5L2s0TllZd0FVRUJDQWdJQUNCZ1lFU3dJV0doaUk4UEJ5UmtaR0lqbzVHZkh3OEVoSVNvRmFyL1RlWEg5aitIQ2twS1VGbFpTVnFhbXBRVjFjSG5VNEhvOUVJazhra0Fack5acnNzb0hFY0o3RXpiMUR6QldZaUt4T0JUYngyUG9ETTQzMWVYbDVzUWtKQ0I1VksxVUdoVUxRbmhMUUgwQmFBNXE5OERYaWVkNVNXbHA1TlNrbzY0M1E2ejloc3RwemMzTnljSGoxNjFMcVpvaHpVQkRkVDgyQjIza0FuQXBzSWFDS2J1eExJaWFDbVVDaWdVcWt1QzNCYXJWWUN1SkNRRUlTR2hpSWlJZ0pSVVZHSWlZbEJmSHc4a3BLUy9EZVpIOWh1bkZSVlZUVlFPdzBHZzZSMnlnSE5icmMzQUxRcnNEUWlxcDFlZ0VZYVlXVU5HTm5FaVJNVkgzMzBVZmVBZ0lCdUNvV2lLeUdrQzREVXYrTzE0SGtlcGFXbGFOYXNtZmRYZVlJZ0hPTTQ3cmpSYUR4Mnh4MTNITnU5ZTdjZ0F6c0o5QWdoZ2plamN3TmJBemJITUF6MUFYQlFLQlQwU3V4TkRuQWlleE1CVGxSUHc4TENHcWluY1hGeC9wdk9EMngvbkJnTUJwU1ZsVWtzelpmYTZjdU94bkVjV0phVkdKb1BPeHFSMjlGOE1EUGl3MTRtc2pMeXhCTlBLSll1WGRwSG85SDBaQmltRnlHa0o0RGdmOEkxdVF5d2VZdVpVbnJJNlhRZU1wbE1oMmZPbkhsb3pabzFUaDlBSjRqQTVnWTA2c011UjcyWm5KZjlqWHJiMzBRR3AxYXJKWUJyelA0bVYwOUY5dGEwYVZPRWhZWDViMEkvc0YwLzRUZ09KU1VsSGl4TnI5ZExMTzFxN0dpK25BTWlvSG14TTBuTmxERXl5SUdNVXNyVTE5ZTNDdzRPdmxXaFVQUWpoUFFIOEk5YzlkY0FiQTJlVTRJZzdPVTRibDlWVmRXKzVzMmJuM09EV3dOV0oyZDBJbnVUL3kwNkdPUWdKd0pjWTg2Rks5bmZSUFlXSGg3dXdkNlNrcEtnVXFuOE42VWYySDZmVkZaV29yUzB0SUZ6UUs1MmlxQW1zalNSb1YwdG9QRThMNm1aZ2lBMENtWldxM1dBV3EwZXpERE1ZQUFkL0ZmbmR3R2J0MlE3bmM0ZFJxTnhWM1IwOUQ2NHZMaUNOOWcxQm5JTXcwanFxa0tob0ZjTGNDS0RFOW1iQ0c1eTlkVGJ1WkNZbUlqNCtIai94ZmNEMjdXTHhXSkJjWEV4eXN2TFVWVlY1ZE01Y0tYd0RTKzFrM2c1QnVUc2pIZ3hOQW5NYkRaYmxscXR6aUtFWkFGbzZyOHlOMFRLZUo3LzBXUXliWStNak55T1MrRXFQa0ZPcHE1NnFLb2lpL1B5b05JcnNUZHY5ZFRidVJBWEY0ZUVoQVFrSnljaktDaklmN1g4d0haMVVsSlNJckUwdVMzTmwzUEEyNWJtZzZWZENkQ0l0ODNNWXJFTTFHZzB0eEZDUnZuQjdLWUF1UzE2dlg1TFRFeU15T1E4UU02YnhjbEFybEdBVXlxVmpRS2NuTDE1T3hlOGJXK0ppWWwrNzZrZjJDNHZKcE1KUlVWRktDc3I4MkJwQm9QQkl5YnRLb05zaWFoNml1cm1aZGdabzlQcDBvS0RnOGN5REhNN2dIYitKWGxUeWxtV1pUZVdsNWR2YnRteTVSa1p3UEV5a0tPeTF3WXNUcTZtdW9HTlhrMXdyenoyVGZTY2l1eXRhZE9tYU5hc0dVSkNRdnhYeUE5c0RWbWE2Q0R3NWZGc0xJUkRCRFZmZ0NiUEVwQURtZ2htbXpadENoZzhlUEJFcFZJNWdSQXl6TDhNL3pvaUNNSTJxOVc2NGEyMzN0cTRhTkVpR3dDbkhPUmtMRTRRMlp1M211b1ZIdUlCY0NLNE5SWWE0dTA1RlIwTGZ2Ym1CellBZ05WcVJVRkJRUU1IZ2NqU3pHYXpaRXU3UXViQTVRQ055TlZPdlY3ZklTZ29hQkxETUpNQStGZmlYL3laeUhIYzJwS1NrdlVwS1Nsblphb3E3NjJxeWdDT1hnbmdMaGZZcTlWcUVSd2NMTEUzYjhkQ2l4WXRFQmdZNkw4eS8xUmdxNmlva0ZUUDZ1cHFEd2ZCbGVMU1pLRG1FOURjQWJVZTZxYlZhczFTcTlXVENTRVQvVXZ1YjhuaTF1bjErclhSMGRFNzNBeE9EbkM4THpWVkZpYlNBT0FhczczNWluc1RWZFBZMkZoSk5XM1NwTWsvL3Bvby8wa255L004OHZQelVWeGNqSXFLQ2lrbHltQXd3R2cwd21LeFNLRG1jRGg4WmcrSWdDYXpvL2tFdEx2dnZsdngwVWNmM2ExVUt1OEcwTWQvKy85OWhXR1ljWkdSa2VONG50OXZzVmkrSGp4NDhOckRodzg3UlpDamxEYndyUEk4VHdWQm9HTGlQYy96VkI0UzVIUTZxVHhjU05RUTVLWVE4YUVyUG9TdFZpdk1aak5NSmhOdXVlVVdLQlNLZnk1akt5d3MvRWVjcU5GbzlBbG9vc2RUcm5aZXpvN21TK1dVc1RPeWFkT21rTmF0VzkrclVDaW13Ujl6OW84VVNtbTJ3K0g0Y3YzNjlXc1dMRmhnSklUd01pYlhRRTJWc1RodkJuZForNXRjUFJVRGU4V2MweVpObWlBNU9SbWhvYUgvVEdEak9PNXZmNUpsWldVb0xDeVV2SjVpQm9HMzZ0bFlHSWVYMmtsa2FVOFNxR1ZuWjBlMGJObnlmb1ZDY1QrQUZQL3Q3UmNBK1hhN2ZkV21UWnUrbmpKbGlzNUxUZVhkNENhcHFPNWdYeXJQUWZWV1QzMkZoWGluWkVWSFIwdGUwK2JObTZOcDAzOWU1TkRmMnNaR0tVVnViaTZLaW9xa2dOdkxlVDI5TXdnYVVUdEZMeWRES1NVblQ1NE1iZHUyN1F5RlFqRUR3QzMrZTlrdlB1U2l6V2I3L0t1dnZ2cHkrdlRwaHNzQkhDRkVrQ1hkZTJjdVVGOFpDNDE1VGNXQTNtYk5taUUxTlJYdWJBay9zUDJWeFdReTRjS0ZDNUw2V1YxZExYazk1UUczamVSNUV1OVVLQzlQSjdOa3lSTEZraVZMSGxRb0ZBL0NIMy9tbDZ0NzBKNjFXcTByNzdqamp0VmJ0bXhoM1FBbnFhZ3lnQlBrSGxUdjFDeVZTa1VieXplVnE2V1JrWkdJalkyVjFOS1VsSlIvVE16YjN4TFlxcXFxa0orZmo1S1NFbFJVVkRRSTVmQk9YcGZiMUx4WW1vZGpRUFJ5MnUzMk8xVXExU01BZXZodlY3LzhCb0E3YkRRYVB3c1BEOTlJQ09HOEFNNmJ3VkZaQmdQMVptL2VNVy9lQWIxaVNFaVRKazJRbEpTRVcyNjU1UjlSRHVsdjV4VXRMQ3pFeFlzWFBlTFQ1TG1lM3NucmNwWW1PZ3JrYXFmTWpzWllyZGFCYXJWNnBqdmx5UzkrK1cxc2dwQ01zTEN3REo3blIxVlhWMy9XcEVtVEEzS0E4L2FpOGp4UDNRSkJFS2hYL1Q3eFBYeDVVVVd6aXVoRnRkdnRzTmxzYU42OHVSL1kvaXIydFBQbnorUGl4WXVOT2drdVU5bTJBVXVUcTUzMTlmV3BvYUdoc3dnaEQvdHZTNzljTDJFWVprUjhmUHdJbG1VL3lzbkorYnh6NTg3NU1vQVR3MFI0QUlJZ0NJTFkzOEs5VVRGbFR3NXUzaUFuT3NDOHdjMXV0Nk4xNjlaL1c3dmIzd0xZYkRZYnpwOC83K0g1bE1lbk5XWlA4MlpwYmxDVDFNNTc3NzFYOGNFSEg4eFdLQlNQQVVqMDM0cCsrU05FcFZMTjZOU3BVNWJGWW5tL2I5KytueDgvZnB3RndMblpHeU9xcUpSU3FSaW0yNEZGNWNVVnZBSE91MXF6SE9CWWxwWEE3ZS9ZU09ZdkQydzZuUTY1dWJrb0xDeVVDa0xLcTNMNEtnYnBmb3JKUVUzTzBoaEtLYkZhclVNMUdzM2pBQWI1YnoyLzNBQnBHaGdZK1B5dnYvNDZvTHE2K3FNbVRacnNKWVN3TXZXVTRGSk9LdlZpY0hLQW83NmFBdmxTVDhVb2dOVFVWRVJFUlBpQjdXYVJxcW9xajNBT01ZbmRWNFZiV1NnSEVlbTVENWJHbEphV3hzZkZ4VDNPTU14Yy83M21sejlCUFIwUUh4OC93T0Z3L0hmSGpoMmZabVZsVmJyVlUwWU9jSzRLNWtSb2pMM0pWRlZjalpxYW1wcjZ0M0lxL0dXQnJhU2tCSGw1ZVNncUtwTENPZVROVlh3NUNieFpHcy96Y3BiRzJPMzJDU3FWYW03cHVlTmR5eDNCeUVodmRWT2RjMzE5UFdwcmE1R2FtdXBIZ0wrQTZQVjZiTnEwQ1E2SEE0TUdEYm9tZzcxYXJaNDFiTml3WG5WMWRlOUhSVVZ0SVlRbzNPb3BKN085RWJuOVRRNXdMTXNTbG1VYnRiMTVNemlPNDFCVFV3T3oyUXdBaUlpSVFPdldyWDgzOFNnb0tBQUF4TWZIWDlYNVYxUlV3T0Z3L0c3bkJ0UG9ONndlbnl4N0VvUDdaeUlqc3o4ZVdmZ3F5a3pPbTJMQjVPZm40OHlaTXg1eGFwZlltZzdGRjg3ZzJKRmZrWjJkZzhMaU1saHNkamdjRGlJQ25EczFpZ2lDd0FpQ29LaXNyRXgyT3AydnFWU3Evd0hvdXZvLzgzRFB3bmR1aW5NOWZQZ3czbnp6VFFEQWtTTkg4TnByci8ycFkvZzl3bkVjQmcwYUJJUEI4S2VONFhyTDJiTm5ZYmZiRzN6dWREb3hZY0lFRkJVVklUQXdFRmFyOVpxUFRRanBIQmtaK1I3THNvdDM3TmpSakZJYVFDblZ3TldZV2tVcFZWQktGWUlnS0FSQllIaWVKMDZuazdBc0M1UEpCS1BSU0VRdnFEeVAxR0F3U0ZXaUt5b3FVRnhjakFzWEx1RFFvVVA0K09PUDhmYmJiLy9tZGZiU1N5L2h6Smt6QUlDQ2dnS3NXN2NPSzFhc3dLcFZxNjVxUFd6WnNzWG4vMTdyZW1nVTJMWjk4Q3hlL0hRM1JrNS9CdiszNEQ3ay9mZ2VIbm4yNHo5OUlaMDdkdzVuejU1RmZuNitSN1Zia2ExVkZlY2h2NlFheXNCUWhBUUhnSE5ZU0gyOW5vaU16YzNVaUNBSUlrc2JGeDBkL1JVaFpPYk4rTlQvOHNzdmtaR1I4YmNZZzBxbHd2dnZ2LytidWk3ZERQUGdTK2JNbVlPU2twSUduK2ZsNVlFUWdrV0xGbUh5NU1sbzE2N2Q3NW0zQi9yMzcvL2ZFeWRPWkFIUXd0VVRWZ1EzcFJ2Z0dCSGMzTDAwQ00vemNEZ2N4RzYzRXhIY0xCWUxUQ1lUVHA0OGlZS0NBdFRVMUVqOVBWaVd4Wmd4WXpCdzRNRGZORTZUeVlUZHUzZWpUWnMyQUlETXpFeXNXTEVDdDkxMjJ3MWZENDBDVzFGUkVVaEVjMHlaTkFZamI3OFhMeTkvRWNPNkpNRUpRRjk0RkhQdm40Q01qRXpjTnZraDdENVhCUUE0dXY1TkRNKzZGM2syQUhEaXhZZEc0dUZsWDdwNStVbE15aHFPZDcvWWlEbFRiMGRtUmlZKzIxM29ZbUNIdnNjOTQ0WWlJNk1YcGo3NkhQSnJIU0p0eE5aUGxtUDBnTDdJN0RzWUR5NTRCYWZQblVOQlFZSFVEcys3SjBGRmVUWEFxQkFhRkFDVldrdlVTZ1dvNEhTQm10TkpPSTVsbkU0bjAyUEFpUEJ2OXAxNVFhVlNmUW1nMjRGdjM4VHcvcjB3OExaN2NMalFKS2V1SG1OWTh1WWFPRzdRVFdNMEduSDI3Rm4wNkhFcER0aHF0V0xldkhubzM3OC9IbnZzTVRnY3J0R1l6V1k4OWRSVEdEcDBLQ1pObW9SVHAwNEJBTDc0NGdzOCt1aWpHREJnQUJZdlhveXNyQ3pNbVROSGJMcU10V3ZYWXVUSWtjakt5dkw1cFBRMWhsOSsrUVhqeDQvSDRNR0RzV1RKRXRoc05nQkFiVzB0WnMrZWpheXNMSXdmUHg2Ly9QS0x0TTlkZDkyRmtTTkhZczZjT1pLNkk4cW5uMzZLNGNPSFk4aVFJWGp0dGRmZ0hUVHVQWWJ2di84ZTc3MzNudlQ5NmRPbnNXREJBb2twTFZ1MkRFT0hEc1hZc1dPbE1aak5aa3lmUGgydnYvNDZoZ3daZ29rVEo2S29xQWdBOE1JTEwyRC8vdjNTOFZhdlhvM1ZxMWRmOXRyczJiTUhFeWRPUkdscEtlYk9uWXVKRXlkaTU4NmRBSUNubjM0YVR6enhCQ29xS2pCeDRrUk1uRGdSTE10ZTluanIxNi9INjYrL2poa3pacUJmdjM1WXVuU3BOQS9MbHkvSHFGR2p1aXhjdVBDRFhidDJ6ZjN3d3crakthVUJBRFNVVWhXbFZDa0lncExuZVViYzNNQkdEQVlEYW10clVWdGJTMncyRzNRNkhVNmZQZzJqMFlqczdHeHMyN1lOUjQ4ZVJXVmxKY3JLeWxCUVVJRGk0bUxVMWRWSnY1K1hsNGQ3N3JrSGdpQkk0NTA5ZXphT0hqM3FjUTRiTjI3RXFGR2p3RERNRmRmMjVkYkR1WFBuTUdIQ0JBd1lNQUNmZnZycEZkZmtoUXNYTUhQbVREend3QVBvMzc4L0ZpNWNDTWgwYzQrdDhzUUc5R2pmRXAxNmpjRFNWOTdCNlJMWGlWTGVnRmtqT3FIN3NHbjRidE42ekpwd0sxcjNtSUFTTzhXdWorZWpSWXMrT0dtbW9KVERJNE5TTUd6Mlc2NzlxdmVoUzRzV2FObTZFMmJNbTQ5Rjg1L0Uzbnd6K0xvVEdOQytKVVkvK0N3MnJGK04wVDNiWXRUanJuMU9yRnVHbGkzYVl2N3JLL0hLMGpsSWlvbEMxclFuTUgvK2ZFeWZQaDNqeG8zRDRNR0RrWm1aaVk0ZE95STFOUlVhQlFGUmFoQVpHVWxDUWtLSVZxc2xhcldhVVNxVkN1S3lLYXBYcmZsMjhPSUhSLy9Zc20wZmVxeWFvNDdTUGJSclNnczY5cUdsZFAzYWxYUll0MVRhZXNUamxGSktUNnhiUmx1MmFFdWZlZXQvZE8ybksyaW5sSlowMmJvVDlFYklxbFdyNk50dnZ5MjkvL0hISDJuLy92MXBXVmtaZFRnYzlNNDc3NlJyMTY2bGxGSzZZTUVDK3E5Ly9Zc0tna0FQSHo1TWUvVG9RYTFXSzMzOTlkZnBmLzd6SDNya3lCRTZkT2hReW5FYzdkV3JGNjJ0cmFVSER4NmtJMGVPcEhxOW51cjFlanBreUJCNjh1VEp5NDVCcDlQUjd0MjcwN05uejFLZTUrbkNoUXZwRzIrOFFTbWw5UDMzMzZlZmYvNDVwWlRTUTRjTzBYNzkra243bVV3bWFqUWFhWHA2T2pVWUROTG41OCtmcC8zNjlhTVdpNFZhTEJZNlpjb1Urc3N2djF4MkREVTFOYlIzNzk2VTR6aEtLYVZMbGl5aGE5YXNvWlJTK3ZycnI5T25uMzZhT3AxT2V2YnNXWnFabVVudGRqczFHQXcwSlNXRkhqaHdnRkpLNllvVksrajgrZk9sZVowNWM2WjAvR0hEaHRIQ3dzS3J1a1pEaGd5aHVibTVEVDQvY2VJRUhUTm16RlZmNjQ4Ly9wamVkdHR0VktmVFViUFpUQWNPSEVoLy9mVlhTaW1sTnB1TkdvMUdPbVBHRFByamp6OVNudWQvS2l3c25BQ2dHWUFtQUtJSUlXRUFnZ0FFTUF5akpvUW9DU0VLdFZyTkJBUUVFQUFrTEN5TXhNZkhJems1R1FFQkFXamV2RGt5TXpNeGVQQmdqQnMzRHRPblQ4ZjgrZlB4MEVNUFllREFnVGgrL0RoWWxnV2xGR1BHak1IT25UdEJLY1c1YytmUXQyOWZPSjFPRDh3WU4yNGN5c3JLR21ESnA1OStpdWVmZjk3ak03ZXFqUFQwZEJnTUJ1bnpqei8rR0dQSGpvWFpiRVpWVlJVeU16T1JuWjN0c2UrcVZhdnc5dHR2Uys5UG56Nk5ybDI3b3F5c0RGYXJGUk1uVG15Y3NjV2xqOGJXcmQvanZxd08yUC9OZXhnemVBZysrZmtjaE9JRDJISFdnSWtQUG8zYlI0N0Jvc2Z1Qmx0OUZMdFAxbDhWQ3huMTZISjgrT295dkxqc1pmUnBHWVNDZzd0UmFHVXdmZDRpakI0ekdXKzgrd0ZtanV2dGVnSjh2d0UwTEFGOHhSbmtGQmtRb0hEaTlQR2pVcHlhZDBpSHpXWURUeWtnOEI2cXA4dnJLVEFVVU14K1k5UERVeWVPWDdsay9zeWhHbnNadHUzT1JmNnZoMURQQitEQnA1L0JtSEgzWUdDWGhFdFBvZTgzQUJGSlNGQVlVV1VMUkdJRWcxMjc5dDBReHJaMjdWcU1HemZPNDdNMmJkb2dJU0VCYXJVYTNicDFRMFZGQlFEZ3A1OSt3b3daTTBBSVFmZnUzWkdjbkl3VEowNEFnRlIxTlNRa0JFcWxFa0ZCUVdCWkZwczNiMGFUSmsyd2R1MWFyRjI3RmpFeE1UaDA2TkJseDNENDhHRjA2TkFCYmRxMEFjTXdXTEJnQWNhUEh3OEFtREZqQmhJU0V2RDIyMjlqNTg2ZHFLbXBrZllUZjk4N0lEUXVMZzRxbFFydnZQTU9UcDgralpVclZ6WlFNYnpIRUIwZGpTNWR1bUQzN3QxZ1dSYTdkKy9HcUZHdVpKQWZmdmdCSVNFaFdMbHlKUTRjT0FDR1lYRCsvSGxwREQxNzlnUUFaR1Jrb0tyS3BXa01IRGdRT1RrNTBPbDBPSG55Sk9MaTRxNUhXNzlybHU3ZHV5TThQQnhCUVVGbzM3NDlLaXNyQVFBQkFRRUlDUW1SNnFzeERETzRXYk5tYjN6enpUZFQzS3BwZ0tpYUFoQlZVd1VBUnN5ZUlZUVF0eU9OMk8xMjhEd1B1OTB1cWFaNnZSNTFkWFZTWUx2UmFFUnViaTVPblRvRnU5Mk9HVE5tNFBQUFB3Y0FmUFhWVjdqbm5uczg2cjNsNXVZaUpDUUVDUWtKVjNXdWphMEhBT2pjdVRPQ2dvSVFHeHVMWWNPR2VURC94dTZMaElRRUpDUWtRS3ZWNHE2Nzdtb00yRmhzVy9NWjloY3llR3p4TW16YnN4ZTNkMURobGRmZWQzbFFBR2cwcnVhdEt2Y3J4L0x1ZlFYSUdHc0RDZmVLbDJFNUJ3QUZOQnFYZzdaRmVoOWs5ZTNzb3B3bUN6aWJIaGZPbjBkaFlSSENrMUlSRzZLOFhQY29Ra0VJcFlKVU84M3A1QmllNTVuaXZPMEp2VnEyZUMxQXEzMERRSUpTbzRZQ0FNZXo0Snc4QUFXVW1vWk9ZcnZORGlYRG82YXlFcFdWMWVpU05RVlp2ZHJlRUZ0aWVIajRaYXVoTWd3anFRc2N4MEdqMFVqZmFiWGFLNm8vTnBzTm9hR2gwaloyN0ZqMDZkUG5zbVBnT0E1cXRWcDZIeElTSXBYRmVlMjExN0IrL1hyMDZORURJMGFNdUtyekRBc0x3OGFORzVHYW1vcHZ2dmtHdzRZTlExbFoyUlhuWWVyVXFmajIyMit4ZmZ0MkRCbzBTQW95dGRsc2lJeU1sTTVwN3R5NVB1ZFFQbmRLcFJMang0L0g5OTkvajNYcjF1R3V1Kzc2MDIxM2hCQmNJWTg3UWExV3Z6Uno1c3huTm0zYWxDaXFwaktBRTRHTmNkdVRJUWdDY1FmbkVrRVFpTVBoOEhBcTZQVjY2ZDZ5V0N3b0xDeVV3SzF2Mzc3SXo4L0h1WFBuc0czYk5reWFOTWxqTUd2V3JNR0VDUk91K3p5bzFXcklTNnRkelgyaDBXZ2FBellsanYrNEVrOHRlQlo3VCthanRMUVFlclByeGxFMDY0Wk8wU3I4c081L0tDd3R4YW92TndDQkxkR3RZd3ppWStJQTFPR1hnOW5JUDdrTEY2cjVLdzY4WlpjTVJDaFliUHBtSGNwSzgvRFl1RXowdnVkRm1Fd21ORW0rQlpiYUtnaWg4YmlsWlRNb0JSWUJha1dET0RWM3hWdkNzaXdVaEFCVUlDekxFWjduR1VHZ3pOQ0hYKzNYcEhubWg1bnR3MmJ1MnJnRzU0cEw4ZTJxTmJDUUVHUjBhWTFiT25SRUlDeFl2Mm9kQ3M4ZnhjbThPbWw4ZlhyM0JLZlhJU0VqQ3c4L09BMXQ0c09Ra2RIbEQxL1lhOWFzd1IxMzNIRk5UL3N0VzdaSWJ2YnM3R3gwN05qeGl2dFVWVlZoekpneG1EQmhBbHEzYnUyeFlIeU5vWFBuempoNjlDajBlcjMwUHg5ODhJSGt0UjAzYmh5NmQrOHVxUWxYa2wyN2R1SGxsMS9HYmJmZGhsZGVlUVZ0MjdiRndZTUhyemdQM2J0M1IybHBLVmF1WElrcFU2WkluMmRrWklCbFdVeVlNQUVUSmt4QVFrTENWUVdmVHBvMENldlhyOGZodzRldnlYaXUxV3BSVjFmM3A0QmZlbm82amg0OU9xTlhyMTR2RlJRVTlQRGxXQUNnRUFTQkVkbWI2RFdsbE1LWFUwSE0xckhaYkZJSi9ieThQSnc5ZXhhVEprM0NvNDgraXFGRGgzcFVDZUU0RHJ0MjdjTFFvVU92eTNrVkZoYUNVZ3FIdzRIZHUzZWpRNGNPVjF3UE9wMU9zamYvOU5OUGpjV3hNWGpzcGYraWV2NUN6QmczQkJ3Rm9sdDJ3Y3N2ejRGUzNRVExYdjhYWnM1N0hnUDdyWUk2ckNtZWVlVnRwSVVDR0h3blJxVjlnK1VQMzRaUFcvZERpNlpoMEYzaEpEVEovZkhLMGdmeDFMOFhvZSs3SEtLYWQ4VnpDNmZnOU9uVGlPNDRCSm10TCtEbmJ6NEQ2K1NoMElhZ1pZb0dBWEI2eDZoSjhXbFFLQWdSQkNJSVBBSEFESjc0eU5UWC8rL2had2pScGl4NCtYVVVQVElQSTI3dEIwVkFCTzViK2hxR3R0SUNHSW9sRHc3QnN4OCtqUjlYeDZKOXdxV3FvOE1mZmg2UGx6NkJOeDZmZ3VVOEVOMnFLMTdxUHhsQStCKzJZRm1XeFo0OWV5U0QrTlhJMHFWTE1YUG1UR3phdEFrVkZSVll1blRwRlcvbzhlUEg0L1RwMDhqS3lrSk1UQXdVQ29YazVtOXNEQWtKQ1pnN2R5NG1USmlBbUpnWUFKRGM3ak5tek1EQ2hRc1JHeHVMMk5oWUNJSUFnOEdBc0xBd2pCczNEdlgxOVRDWlRCZzFhaFNDZ29Ld1pjc1daR1ptWXZYcTFSZ3pab3pyd2FsUVNEZkk1ZWFCRUlLSkV5ZGl5NVl0U0VtNVZOZHo0Y0tGZVBUUlJ6RjI3RmhRU3RHdVhidXI4cWFLUFFOYXRXb0ZwZkxxd3p1blRwMktPWFBtb0huejVoZzllalNtVHAxNjNkZkQ4ODgvangwN2RxQzJ0aGJIamgzRFN5KzloUGZmZngrdFc3ZkcxS2xUTVdyVXFJRnhjWEhOQmcwYTlOYlBQLys4MFoyR0phL3N6QU1BcFZSd3gyNUNvVkJRa1JDbzFXb2FIeDhQczltTVU2ZE9TV3p4czg4K1EvdjI3VEZ5NUVnSWdvQTJiZHFndUxnWTk5NTdyOGY0ZnY3NVovVHQyOWVEeVFQQWhnMGI4TnBycjhGa01zSHBkT0xubjMvR0k0ODhna21USmpXNkhrU1FHanQyTFBSNlBYcjA2Q0daRHk2M0hod09CKzY5OTE0cDlPYUtaWXRZaHdsV0I0UHdVSy9PMDRJVDlYbzlna09qb2ZaWUJ3TDA5WG9FUjBaZVUvU3Z3RHFnTjlzQUJqaWJrK01SemxGZFhZWGFlaDBjTmx1RGJBSTVxTW15Q0pocGQwOVZMUC9QZnhkRWh3Y3Rna2Nnc210ODJ1QndhTlNlaE5WbTBRUEtZR2g5cUtTc3d3S2pqVWQwK0I5ZmF2bnMyYk00Y3VRSTdyNzc3bXZldDY2dURxR2hvVkNwVkZlOWo4MW1BOGR4SG1Xa3J6UUdsbVZoTnBzUkdSblpZSUhaYkRhRWgxOGI4SnRNSmhCQ0VCd2NmRjNtd1dBd1FLMVcvKzQ4eUNsVHBqU0l1OXU0Y2FPSDUwL3NrWEdsY3k0dUxzWWpqenppOFZuNzl1MnhZc1dLM3p5K21wb2FhTFZhTUF5RGYvM3JYODdFeE1UWDNudnZ2WTlPblRwbGQ2ZGtjZTdONmE3ekpoQkNCSGtoUzQxR0E3VmFUY1hhYm1McEk3Rm9aVlJVRk9MajQyRTBHcEdUazROVnExWjVuT3VubjM2S1BuMzZvRldyNnhmUUxpYnJ5ME5CR2xzUDJkblpXTGh3SWI3Nzdqdm85WHBFUmtiZVhQWFlkRG9kY3J4QVRYUVNpTTFXNU4yalpLQW1yNXZHVkZaV0prVkZSVDFEQ0prQnYvamxieXFDSU9EdXUrOUcwNlpOd2ZNOFRwMDZoYSsvL2hvaElTRXJkK3pZOGVIdzRjTkxDU0VPTDNEanZjQk5LajB1Z3B1OEc1WUlicVdscFNnb0tNQ3NXYlBRcDA4ZnRHL2YvcWJKTHhXQmJjT0dEWmNZL2MwQ2JISlFLeWtwOFFBMWVjTVZIMHhOVEkxaUJFRWdKcE9wbTFhclhlaXZtZWFYZndxNFpXZG53MjYzSXowOVhYSWc4VHkvSlRjMzk3MTI3ZHFkQnVDUXNUZW51N2tNNys2eElJaU5ZK1RnSnBZY0Y3MlhZZzIzbEpRVXFXRGx6UUp1VnFzVmhZV0ZIa0hRTndXdzZmVjZaR2RuK3dRMWthbjVVajlsV1FTRVVzclliTFpoYXJWNkVmeVZiZjNpRjFCS0Q1ZVhsNytUbUppNDF3dmNPRGU0U2N6TlhYNjhBYmcxcHBhSzRKYVdsbmJOWm9jYklYOTZFcnpCWVBESjFIUTZuYzhLSFY3cXB3UnFEb2Rqc2xLcFhBU2dsWDlKKzhVdnJrcTlDUWtKa2JXMXRXOUZSMGR2cHBReXhCVTRSaWlsSE54T0JjR2RVdUFtT1JRdXh3UDFBWlMrZmdOcGFXbS9LUzNxYnd0c0pwUEpwMDFOQkxYTHFaOXlVR05aOW1HRlFyRVlRSXgvT2Z2Rkx4N0FreElWRmJWWXI5Y0hoNGVIZitNdWQwUzhOVFlSM0p4T3AwOXdhd3pVeEsxRGh3NDNWYU1ZNXMvNllZdkYwcWlqd0VjVFk5SVlxSEVjOTVSQ29WanVCN1hHN1EvMzNYZmZUVFdtd3NKQy9OVWFkYi84OHN2bzNiczNoZzRkS3FVYVRaNDhHWk1uVDhiMDZkT3YrKy90Mzc4ZjE3SG5iMHhZV05nU3M5bDhMd0N0TEpoWG5xa2daU2s0blU3aXJscEpSN1FBQUNBQVNVUkJWTk1tSmREYmJEYVBRTjY2dWpvcGVUNC9QeDg1T1Rtd1dDdzRlL2FzbE5IaExmUG16Wk15WlJxVHpaczNTeGtPZnpsZ3M5dnQxK0w5SlBJT1VxSk43WjEzM2xGeEhQY3N3ekF2d3BWUzRoY2Z3dk04amh3NWNsT042Y1VYWDRURllwSGVHNDFHeko0OSs2YWR3NU1uVDJMTGxpMzQ2YWVmc0czYk5uVHExQWtxbFFxdnZQSUtubnZ1dWVzK3Z6VTFOVmkrZlBrMWhlejRrb3NYTCtLNTU1NFQzd1lFQlFVdHJLeXNmRWlqMFFRMUFtNEtRUkNJdlB5UnU5S3VCRzRXaXdWR283RlJjSHZpaVNjOFVxM2tjdXJVS2FsZ1FtTlNXVmtwRlNmNFM2bWlITWRkMXZ2cFpWTVRjejRoTDhmeTY2Ky9CcWVucHk5aUdPYkp2eU1ZSFRod0FNMmJOOGYrL2ZzUkZ4ZUh2bjM3U2psMVpyTVoyN2R2QndEMDZkTUgwZEhSMG43bDVlWFl0MjhmSWlNak1YRGdRSjlWRms2ZE9nV05SaU1WRWF5dHJjWE9uVHNSR0JpSWZ2MzZlYWdUUjQ4ZVJWNWVIdnIxNjRmYzNGemNldXV0a2xxeWI5OCtsSmVYbzNmdjNraE12TlFPb3F5c0RQdjI3VU5vYUNnR0Roem9rZVlGdUxJaWFtcHEwTDU5ZXdCQVRrNE96cDQ5aTkyN2QyUGJ0bTBBZ0w1OSswcnhaOFhGeFRodzRBQ1NrNVBScTFjdkNRZ3ZYTGlBbUpnWTdOKy9INm1wcWVqU3Bjc1Z4MEFweGQ2OWUxRlJVWUdlUFhzaU9UbFoyaWNuSndkUlVWRW9MUzFGYm00dSt2WHJoOFRFUk96Y3VST0hEaDFDUkVRRTl1M2JCN1ZhTGMxRDA2Wk5ZVEtaR21XbGh3NGRRbEpTRW5yMTZnVkNDSTRkTzRiVTFGUm90VnFjUG4wYW5UcDF3b1VMRnhBWUdPaVJZN2x1M1RxTUhUdjJpdXZoK1BIamlJNk9SbEpTRWdCSWViT0RCZzNDc1dQSGNQVG9VZXphdFVzS2NCMDZkQ2kwV3UzYzFxMWJxNGNORy9iUnl5Ky9ySGVybEtMZHplbFdTM2wzcVh4UkxZWEQ0U0NDSUZDajBRaTFXbzNFeEVRUFZaUVFncEtTRWdRRUJIalkyOFRyNTZ0czA5R2pSNUdibTR0dTNicDV4TUFKZ29BZE8zYWd2cjRlUTRZTWtZNzN5eSsvb0UyYk5nZ0xDd1BMc2podzRJQjBMZXgyTzdadDJ3YWxVb2wyN2RyZFdNWkdLZlVBTlhreXUzZlRGVmx2QWc5UU8zLytmRVI2ZXZyU3Z5dW9BYTR5T2s4KytTVDBlajJXTFZzbVpRUG9kRHJjZHR0dEtDMHRSV0ZoSVVhUEhvM2EybG9Bd0xGanh6QnAwaVRvOVhwczNyd1pEenp3UUlQamJ0bXlCZlBuejVmQThPTEZpNWc0Y2FLVS9EMW16QmdwTFdYMTZ0VjQrdW1uWVRRYXNXalJJano5OU5NZUtzWFhYMzhObzlHSUtWT21JRHM3R3dCdy9QaHgzSDMzM1RBYWpkaTVjeWNtVDU3Y3dEYXpidDA2andUbXVybzZsSmFXUWhBRUZCVVZvYWlvU0xUellPZk9uWGpnZ1FkZ3NWanc3cnZ2U29Hc3BhV2xtRFZyRnQ1NDR3M29kRHJNbWpVTHUzYnR1dUlZNXMyYmh5KysrQUlta3dsVHAwNzFLRlcwYXRVcVRKOCtIZSsrK3k1eWNuSlFYKzhxNmxCU1VvS2FtaHJZYkRZVUZSV2h0TFQwaXRkdjU4NmR1TysrKzJDeFdQRFJSeDlKa2ZJYk4yN0VrU05IY1Bic1dUenh4Qk1BZ1BmZmY5OURQYU9VNHZ2dnY4ZnR0OTkreGZWdy92eDVQUC84ODlML2JkMjZGWjkvL2prWWhrRjFkVFVxS3l2QnNxdzByNkt3TER2TDRYQThQSEhpeEdnQVl2RktGUUNsSUFnS0FBcEtLV0ZaVmxKTFRTWVRxcXFxWUxGWVVGMWRqWnljSEEvbVZsVlZoYTFidDZKZHUzYkl5Y2tCcFJSbnpwekIrUEhqVVYxZGpjOC8vOXhqN2w1OTlWVzgvdnJyc0ZxdGVPU1JSN0JqeHc3cHV3MGJOdURvMGFNNGZmbzB4b3daSTdINzVjdVhTeVlNbzlHSUo1OThVZ0xDcVZPbll2djI3Y2pQejNkbGZ6Uld0dWlQMkU2ZlBvMXZ2LzBXcjd6eUN1Yk5tNGVwVTZkaTVNaVI2Tk9uRHpwMTZvVFUxRlFrSlNVaE5qWVc0ZUhoSkNnb2lHZzBHa2FwVkNvVUNvV3lzTEF3VGhDRU4rbmZYSVlQSDA2enM3TXBwWlNXbHBiU0RoMDZVS2ZUU1d0cmErbXhZOGNvcFpTeUxFdG56SmhCdDJ6WlFpbWw5UDc3NzZlYk5tMmk3dExRZE1HQ0JWU24wMUdqMFVqVDB0TG8xcTFiNlpBaFEyaFZWWlgwTzZXbHBmVE1tVFBTOGJLeXN1anAwNmNwcFpUMjc5OWZHa041ZVRudDNyMDdwWlRTNDhlUDB4RWpSbEJYTldwS3Yvbm1HL3JVVTA5UlNpbjk5Tk5QNmV6WnM2blQ2WlMrczlsczB1OEpna0N6c3JLb1RxZnpPTithbWhyYXRXdlhCdk13ZVBCZ2FRd1dpNFYyN3R5Wk9od09tcE9UUXdjTkdpU040WU1QUHFEUFBmZmNaY2R3NXN3WmV1dXR0MUt4UitldVhidm8rUEhqcGQrYVAzOCtmZjc1NTMxZWowMmJOdEZaczJiNS9NNW9OTktPSFR0NmZEWnExQ2g2K1BCaFNpbWxITWZSbmoxNzB2ejhmUHJkZDkvUmQ5NTVoMzc0NFlkMDRNQ0J0TEt5a280ZE85WmpqbzRjT2RMZ3R4cGJEM2E3bldaa1pORGk0bUpLS2FWMzNua24zYkZqeDJWTEp4a01CcHFXbGtZNWpxTjJ1LzJEMmJOblp3Qm9BU0FCUUJTQVVFSklJTU13R2dCS2htRVVHbzJHSVlTUXdNQkFFaHNiaTRTRUJEQU1nMDZkT3FGUG56NFlPWElrSmsrZWpDWk5tbURGaWhYNDl0dHZwUnA1SDMvOHNYVC85K3ZYRC9uNSthaXNyRVJHUmdic2Rqc29wVGg0OENDbVRKa2lsUzFhdEdpUnRNLzA2ZE94ZnYxNlVFb3hkdXhZbkRoeEFwUlMxTlRVb0d2WHJxQ1U0cGRmZnNHSUVTTWdzc3kzM25ycnhxbWk1ODZkdzRVTEZ5VDFVOTd6VTdTcE5SSjhLekcxNU9Ua1JZU1EyZmdIaUppdjJMUnBVekFNQTZQUmlKQ1FFS3hldlJvclZxeEFhR2dvY25KeXBDZDdZV0docEY0U1F2RHZmLzhiZ012emJMZmJNWC8rZlBUczJWUEs3d1JjcFdPZWYvNTVXQ3dXQkFjSG82S2lBanpQUzZ4SVBKN2MxcE9ibTR2eThuS01IRGxTc3VHMWJldXFkako1OG1RVUZSVmgyTEJoU0UxTnhiUnAweEFRY01uOGVlVElFYVNrcEZ4VjNCUFA4OGpQejhkVFR6M2xNVjR4K1Y2cjFVcnFlWEJ3c0ZUSnBMRXhGQlFVb0czYnRwSjZucGFXSnRYakYrVjZwUVJkdkhoUlVyMlVTaVhhdEdtRHdzSkNwS2VuWStmT25YQTRISmc2ZFNvT0hqd0lwVkxwTVVlTkpYbjdXZzhSRVJHWU9uVXFWcTFhaGNtVEo2T21wZ2I5Ky9lL3FyWGwzaDRZTjI0Yzl1N2QrOEdKRXlmcXZiVXJkODRvTCthWDhqeFBXWllWKy8vQlpyTkphbWg1ZVRsaVkyTlJYVjBObFVvRmhVS0IwNmRQUytXazVPc29QejhmRm90RlVyY0ZRZkJZRTNMelJXcHFxa2UxRjE5U1ZsYm0wU05WcFZMZEdHREx6OC8zQ1dvK0tuUTBDT2tRYldvdFdyVDR4NENhWEl4R0kxaVdSWEJ3TUxaczJRS2owWWd2djNSVkpYNzAwVWVsLzR1T2prWkZSWVdVRUw1bnp4NTA3OTdkNVNGaUdHemV2Qm56NXMzRGUrKzlKK1Vycmw2OUdvbUppVml5WkFrQWVLZy9VVkZScUt5czlMQ2ZpWiszYmR2V1o0WFp2THc4UFB6d3czajIyV2R4N05neFBQamdnOWkyYlJ1aW9xSXVlOU1TUWp5cXN3S0FRcUZBZUhnNFB2endRNmtza2lpaSt1MUxHaHREVEV5TXh3MVNWbGJtQWZMWFU4VGZFcHZ1aUwvVnZIbHpWRlpXSWpBd0VJTUdEY0xpeFlzOUdxWllMQlljUDM1Y2VpaGRhVDBBcmlUOEVTTkdnR1ZaVEpzMnpjT3U2bXRldlVXdFZqL1FwazBiWWRTb1VlKy8rT0tMYUF6Y1JBRGlPRTRLQlJFZEFZUVFYTHg0RWQyNmRVTnRiUzBVQ29Ya1FEaCsvRGg2OSs0dEhVOWNROUhSMGRpMGFaTlBPN0I4ek9YbDVjak16QlRIS2ozQTVDYU9xS2lvQnVyOEh3NXNKU1VsVXRNVmI2Ym1iVlB6RmRMeHpqdnZxTnlPZ2puL0pFQjc3NzMzTUdYS0ZLeGF0UW9qUm95QVNxVkNiR3lzVkErcnVMZ1l1M2J0a2tyc1RKczJUZktrNWVibTRxdXZ2c0tHRFJ2Z2REcWhWcXVSa0pDQXQ5NTZDN2ZmZmp2YXRXdUgvdjM3SXlZbUJsdTNic1dPSFR0dzRzUUpuRGx6UnJLeFRabzBDUXNYTHNTRER6N29rWVBYdDI5ZnZQTEtLM2oxMVZmUnYzOS83Tml4QTBsSlNaZzhlVEtPSERtQ2JkdTJZYzZjT2FpcHFZRmFyWmFldm1MbGlPWExsemM0MS9Ed2NDZ1VDbnoxMVZkbzBxUUoyclZyaDVpWUdEend3QU9ZTTJjTzVzMmJoN3E2T216WnNnWC8vZTkvTHp0dmpZMmhhOWV1SUlUZzdiZmZSa1pHQnBZdFc5YWdTc1cxZXBzM2JOZ0F1OTBPanVQdzNYZmZJVFEwRklNR0RjTDk5OStQSlV1VzRNa25uOFRldlhzUkZoYUd0TFEwRUVJUUdCaUl0bTNiSWprNUdVVkZSUjc5QURadjNvemh3NGY3dk5sOXJRZkExVTFxOE9EQjJMQmhBL2J0OHl5QW1wU1VoT0xpWXZ6d3d3OElDQWlRQU1KYkZBckZRd3NYTG5UdTNMbnovZjM3OXpld2k3cmY4NElnU0hGdWxGTGljRGdvSVFUeXB1TjZ2VjRDdHRUVVZMejc3cnVJakl5RXpXWkRjWEV4QUtCMTY5Wm8zcnc1RmkxYWhQSGp4K1BZc1dPd1dDeVlPM2V1TkE5ZHUzYUZ5V1RDL3YzN3NYanhZZ0JBMTY1ZDhmbm5uOFBoY09DSEgzNlF4cGVabVluLys3Ly93M3Z2dllkV3JWcGh6Wm8xVUN4ZHV2UVB1em1ycXFwd3p0MmpRTjdNMkdBd2VCU0k5RTZUa3NlcHJWKy9mZ25ETUF2K1NhRDJ4UmRmWU5Tb1VUaDQ4Q0JhdEdpQnVYUG5RcVZTSVRFeEVZbUppZGkzYngvaTQrTXhZY0lFUkVWRklURXhFYTFhdFVKU1VwS3JGcFZTaVJkZWVFSHlMQ29VQ25UdjNoMUJRVUhvMGFNSHpwdzVnL1QwZExScjF3NHFsUXFIRGgxQ1dsb2FoZzRkaW9TRUJNVEV4Q0FqSXdOV3F4VkhqaHhCdDI3ZGNPalFJVXlmUGgwS2hRSzMzWFliY25OemNmVG9VYlJwMHdZVEprd0F3ekJJVDA5SFVGQVFkdTdjQ1l2RmdzV0xGMHU5S3RldFc0Y21UWnBJSGpxNU1BeURYcjE2WWQrK2ZhaW9xRUJhV2hwQ1EwT2xpcktpK2pacjFpeUpxUVFHQm5yVTZZcUxpME9MRmkwYUhRTWhCQ05IamtSMmRqYU9IeitPaVJNbk5tZ3kwckpsUzhUR3h2cThKbEZSVVEwOGQ5dTNiNGZGWWtHM2J0MWdNQmpnZERxUm5wNk85UFIwaElXRllmdjI3WWlLaXNLenp6NHJsZlNKaUloQXQyN2RFQjBkamVqb2FHUm1aa3FlNk9lZWV3NlBQLzU0Z3lqK3h0YURuRHcwYjk0Y0F3WU04TmhQcTlXaVk4ZU8yTE5uRDNRNkhUcDE2b1NBZ0FBb0ZBcDA2OVpOK3Ird3NEQjA3Tmd4NDg0Nzc3Uy85TkpMcDJXTVQwUTRLcXFjY2lhblZDcUo2TlFLQ1FueHFLUkNLVVZrWkNTYU5XdUdFeWRPSUNrcENWbFpXVWhMUzROV3EwVldWaGFxcTZ0eDhPQkJ4TWJHNHQ1Nzc1WFU3ZDY5ZXlNdkx3OWxaV1Y0OXRsbkplOTF0MjdkVUZwYWlweWNIRXlhTkFteHNiSG8ycldyVk9ycThPSERxS3FxUW54OC9CK1hLNnJUNlpDZG5lM0Ixcnl6Q3J6RE91UnhhbUx3clR0T3pTOSs4Y3NORUxQWi9PK1FrSkQvQWJDNUs0TTRBTENRVlFZUmMwdVZTaVYxTTJJcTVwV0tTZk1SRVJGU1htbHljakpTVWxLUWxwWjJ3NUxtL3hCVjFHYXpTUjNhS3lvcVVGdGJLN1hIdTV6NnlmTTg1R2xTRE1NczlpODF2L2pseGtsd2NQQmNuVTVuallpSVdPZG1aaFR1V0RhdjlDdnFJblhFbGFORkNHVVlCZ3pEZ0JBQzhXK2xVZ21WU2dWM2NqMDZkdXo0dTJ2ay9TbkFSaW5GK2ZQblVWaFk2S0YreXF0MGlCNVFlWkZJdDZ1V0VSUGEzYm1mL293Q3Yvamx4a3BBZUhqNFkxVlZWWmE0dUxpdDFKVmM2bTF2Zzd1SGd1QjBPa1hQcUFoeUlJUklkalp4RXdGT285RWdQVDNkWnhPWG14clk1S0FtTmpJV0hRVVdpK1d5bFc4RlFTQTJtMjJZdTBxSFAvZlRMMzc1Y3lRbUppWm1aa0ZCZ2JGRml4WUh2SmdiQlVBRlFSQzlvNUFCR2hHTFY0cWJITlJFWUFzSUNKQ2FLdjhsZ0syd3NCQVhMMTVFV1ZtWlQwZUIzVzV2a0ZVZ0MrdGdUQ1pUTjNjOU5YL3BJYi80NVU4VVFraEtjbkx5UThlUEg5ZDM3dHc1eDgzY1JKV1VpbjBSUk5ZR21ZTkJWRVc5R1p0U3FZUmFyWVphclpiNm12NVJjdDI4b2xWVlZaSmRyYnk4M0tkZHJURVBxRmpPT3pRMDlDVkN5RUQvc3ZLTFgyNEtjR3NhRXhNVDJxbFRwOU5mZi8yMXpRMWVrcWNVUG1xMnVWVlM4Vy81NTVCL0xvYSt5SHRjWEZmR2RqMWFoNW5OWnB3NWMwWmlhMklPcUhlYlBJZkQ0ZUVCRmRYUHUrNjZTd0hnbWZyNmVuODViNy80NWVhUzRabVptVFVwS1NtdlhiaHdRWkF4TjFmNmdmc1A5eXZjV1FuRW5VSUgrZVowT3FYTlhUVUU3ZHExKzBQQVRmbDdhejVSU3BHWGw0Zmk0bUpVVkZRMHNLczFWdExiN1N3Z0FKaGx5NVl0Y0RxZE42VHhpdGhUMGJ2cXhKWEVZckVnTUZBTFFoai9VdmZMUDQyNTNiMTE2OWJxbEpTVXo5MDRKc2pCalJBUnh3VEs4enpoT0k2NmFSc1Z2YVJ5RmRYYlk5cStmZnZyN2t4UUJnVUYvcTRENU9YbG9iYTJCbnE5RG1hekNWYXJCWGE3cEhMS0tuUTRpUmlkTFBlQTF0YldUSFU3QzI2SThMd1RUaWVQYXoxdm5VNkh5TWlJYStvNWFUQVlFUklTN0RPUzNDOSsrU3RKVUZEZ25QejhDNVczM0pLeUZZQTNjNVArVHhBRWdlZDVPSjFPS0JRTTRUaU9LcFZLaWFIWjdUWllyUmFZelNibzlUclUxdGFnb3FMOHVyYnVBd0RsdGR5bzNsSldWb2F5c25KVVY5ZWd2bDRIZzhFSXM3bEJqd0kzdUVtZ1J0eFVsZFRXMXZRTkNBaDRCamV3THB6cmFTSGd0NXkzYUFDOVdqR1pUQWdMQzhYdm1XTy8rT1VtRVdWOGZQekR4NDhmcSt6Y3Vjc3hYOHpOL1VvRVFRRFA4NVRqbkdBWXppdmtRd21WU2cyMVdnT05KZ0JhYlNDQ2dvSVJHaHJhSUNmNGR3MjJzV3FYVjVMUzhqSWNQM3NCT25kR2djRndLYW5kYkxiQWJMV0J2UVJzSWxzanZDQVFLbENtcUtnd0lTZ29hRDZBbEJ0THF4a3B6dVphVlc1NWN1OGZ0YzhmSWZwamU2Qm9sb0dRcUJzVEZrZzVPNncxOVZCR1JFT2pWUU53b21Mckp0aHNnS3BwR3lSbHRQbGIzT20vWlY1dGhUbXdPS01SblJMWHlIL1lVYlhqTUNKdjdRZVZtK2c3aWs2ajdGZytBSUxZUWFNUkhNcGN4N0ZFSURvbDRXcDN1YVYxNjliM3IxeTVzbnphdEdubEFNUkFYZkdWaXA1U251ZmhEdHFWUWtBdWVVY3Q3dEFQdGJzVGxoYkJ3VUVJQ3d1N3BxWXdqdEpjR0l4YXhMWkxhbkJPeW10V2s2Z1ZpejdZZ1AxRjVTQjFaU2l2cVVmWHVGQW9MU1pZTEdhVWxKV2hzTjRNd3RrZ0NFQ0lFc1RwZE1MSmNjVEJPUW5nc3F1OWsydCsrcm40K0NIa1QxaVFsT0thMVVNeFArNWE5dnN0Ky93UlV2TFpjZ1JOL2d4aHZRUC84TitxMi9ZWkRyL3lKYlROV3NCUlZvQm04OTlGbS81SlVBVUV3bkp1Tjg0ZHFFS3p6SFovQzJEN0xmTnFPTEFHaGZwTXhLYU9iSXpuSS8rOXp4RFk5MVpvM0VTZlVXcWcxZ2JnNHRzdlFKMStHMExERzY2bnl1OC9Sc0R0YVFpTDhSeEx3ZnRMb2V6MUdKSTZSRGJZeDN6aVI1UVlPaU0yTmZGYU5KNEI0OGFOSzV3MmJkcGJNdFlteUZnYjRJcHpnMXNscFF6REVJV0NvUTZIQWtxbGF4TXpFZFRxUzIzK2dvT0QwYkZqeDZzbUFwYmptM0gyVkJMaTA1bzFPS2RyQnphbzBUK3REWG8yRFVGaG9ScTc5cFppN3prZHVrY29ZTmJYNFdLZEZZbmhnZUR0UUVWMUhURXJsVkFJVG5DdUNHVkNBTVpTbS8vUXlEZjJ6TXpKVEVYSEc1eGJJRGRpL2pZMWx2bkQ5d0VFVURCdzZxdkEwU0FFUm5oNmpTZ0VFREN3VjVWRDBJUWpNUHpTWXJaWGxZSlhoaUlvS3ZUU0Rxd2RvQVRPdW1vSW1qQUVoSHFtdERpTmRiQVpIUWlNaTRkQzlkdEJtQy9kai8yTFY2TEgybzFvMGl3VUVHeXcxbk5nR0EzaUI0OUFNRk9PL0FLTGova1E0S2lwQnNjcEVKUVFBOCtISFE5YmVRVUVWVEFDWThJOXZxTU9LOHhWdGRERXhFR3QxZHhrOCtyN25BalBnVG9GVUtzQk5nc1FIQmZoT1Q1bkRQcCsreG1JYkk2MHpkcWhlYk4ycVB4b0NZQ0dhNWM2bldqLzNDb1FaY1BQemFjT1FObHFPb2dRRGlpVjBqaW80RVQ4N2ZNUUwvdnMwakE0V01zcndFVEdJU0JRMDJDdDhFYkhmVlVWVllWeFRlTFdBK0I5cWFTQ0lBaUVFT3AwT3NFd0JBNGJKWVF3MUtYQktLRlV1dE9zVkdvRWFOUlFPT3pRS0xVSURRMTEyOXNFMkNyTFFRTWlQYTREQUhDNktuQWtCRVRnUUoyOE5CL3ljMUplcXplaW9xSWVhazZQa3FwSzFOWFZnemhaMk13bVdOUXExT29NSUFvQ2NDNjdtb0pRY0N3TEVFcW9xNlk2c1ZoTS9aVE91dmtjbzBTd2tvQ1FHdzFzbHdEdXR6QzJhOW52dCt3REFPZWZtWWlMdVNvd1NpV0V5b3NJdm4waCtzNGQ3ZnJTZUFycit6K0RwR0V4cUR5bEE4dzZkUGprSnpSTE11TFFmVk5SWjQyRXlsSUdrallSdDc0Nkd5b0dvRTRPaFcvTlI3RktBWHZCR2NUUFhvSHVkN2tLRWhiKzUxR2MzRlNDaU9ZUk1GNm9ROFozR3hFclBkd2RPUG5rVEtnR3pVSzdyQzVYWGhzL3JJZXErd1FrTkhlckU0cEFCTW55UndnVlFIbkJhejZxc1hQd2VMQXhMYUdDQVNaZEtQcXUraENSTVJwUVV6SDJUTGtIOXRDV1VBczYyQk1HSXV0VlYwaysvZTdQc1dmUkp3aHRtd0o3MlVVa1Ava0oyZzFzZnBQTWErUG5CSUdIOGVlVjJIN2dLekNXTXFEMW5SajR4aXdvQVZTdSt5OU9mYmtEK21OMUdIeG1MeUs5c1pyakFIaXVKL2JzejlqOS9FZXduUDRWcmQvZWk3YTNObkdwWk1jMllkL0xYOENTVXdKUzhEaktQOUVpK3JaSDBHVnlQd0JsT0hEM2s5QVZua2ZJN1l2Ui8rbExwZHJ0dVh1d2U5WWlNRTFhZ1MzTVE5eERMNkhiWFgxOXJaV0g5eHpJTHV6WEsrMllTeFdsQWtBRVVTMTF1MGtKejdKdzJ1MVVTUWpzT2gzNDZIZzNhMU9DNk10UTlRdUxXcFVkUWVwZ1hGVCtpSUIzWGtDZ3ZReDV6endITnJRWlVIOFJRVVBub3ZjVDQwQWc0T0pyczNGeVl5SENZalhnV0FkSW0yVDNmSGllMHpVQm05VnFsY0k2YW12cm9LK3Z4dkhDU3NRRmg3cmFjOW5zSUx3QW85RUdvOE5KRkZRQUZTaWhEQWhEd0l4YnNpTDhrVFU3bjZxdjB5ZE1HejhZS2VvL1F4SDliY0QyZS9hN1poRGxuWEJHOXNLb2o1NENNZVhoaDh6eHFKZ3lBZ254U2hldnFEa0ZSZVptakY3ZUVRQUxKNnRFMWVvM1VhWHFoOUhmTDRiQ2FjQ3VJWm5JMnpNTzdRY2tBcndUeXJRc0RINXVDcHpsZTdGK3dCSzBHcmNMRVlIVk9QZmhYbVRzT29XRU9BQk9GandqZjlnSU1KdzZBazE3M1ZXZGcrWENCUVFuOTJ6OGY2a0F3ZWtOYkJIb3MzNDcxQ0V1NnA3M3doU2MrV29YK2o0MkhPWURQNkErYkRER2ZlRXFoTW16ckxSdjRlY2ZvTm5UbjZIVEdOZlRuV2VGSzQ3eHhzMXI0K2NFZ1ljVnlSajc3WnRRQ3dic0hOUUQrWWZ1UUp1ZXNXZ3lmZzZhakIrTEg5cE1kQU9ZMS9pZEhFQTlnVTNUYmpDR2ZqVVlSKzdxQnRCTGF5Mnc2MmdNL1dvMGp0L2ZHNm83MzBMYTBHVFprUkxSNTh1dlVQTCtZN2hRVDJYSHMrTElZM09Rc09CcmRCemNHb0xwUERiM200SDZNWHNSRmRKZ3JUUmhxV0xhc21YL0xsaXc0Qm1CVWdpRVFJRE1ZMG9wQlFVRXlpaWcwQVpRRlp6RVhGdER0YUdCVUNqc0lDd0xjMTAxNG9lUFJHeUxKb2lMamtadFJRVjIvdWRWSkkxOEdjTm5EUUdjT3V3WU9BQ2w0MGFpcWZvUWpuNXlBVU1QYjBWNGtJRGo5dzlHbGZTZzlEeW5hM0xYRlJRVW9Lek1uUU5hWDR1REo4N0FvUXBDc3NJSnM5a09qbVVoY0FLYzFFbkFTNG50RUFRUVFhREVrZHpweWJuOTJ3MnRMem1QVjdjZndhalVFWWhUd1M4K0pMWlBMMWVublpCV2lHa0QxSjhxUjBLOGUzRnFVbkhMNkk2U2FVQ3BCblFuVHlLdTc1TlFBSUF5REUxNnQwZjE2ZFBBQUpmOUpLNm5xNHFwTXFFN29xSXVvajdmam9nT2tZanZHWWtqRDB4RDhwQitpQjg0RFBIdDVmYVdRUFQvNmRRZmZLWU1xamUrZzl6dmRzTm10b090TGtLSXU1eTBOcTBybUZNUFlOY2NCK0o2ZEVYeXlKRUlVcnZucDJjdkhQalhMRGpQamtCVWozNUlIdERsSnBwWFphUG5CQUJSbVpsUU13Q1lNTVIzYjRYNjdHeWc1MDJRY0dQS1JYVzJEWXE5MytEWVFaZHFUcDJsMEJXWUVkWFI1MW9aT0h2MjdMTUxGanp6c1ZzbDViM3NiZFNOMEpUbmVUQXFCZ0xsaWMzT1VxVkNBY0p5Y0FaR1FDQXNqRVlqTkJvTkFtc0tVSCtzQ0h6MGVoeXIvd1VVQU90MG9ENm5CQkdxTTJEU01oQWV4QUJnRU4rM0o2ck9OTGFxcnRaUVdsS0MwdEpTVkZkWG9hNnVGa2RPbkVLSlE0SFdvVXJZN2E1cUhWUVFJSEFjR01KQXpRQzhRQWxBQ2FXVW1mYjhmOFpOSGRybjZaN040ekd5YngrMDV3cXhyZERpUjdCRzZjVmx2dE1HNGZkRmtCRDNsVmVpODBmYjBIdnhkS2k1TXV3ZlB4UjV4MnArODFHRFdqYUhzYUQ0bXZheDdGK0pneCtmUkpkMy9vZVJXN2FnNi8xRDNkb01vRXpzZ2RIN2ZrTEtrRTR3N1ZxRkgyNS9ES3g3djZZUHZJd1JYNjVBZUh3QXppKzVCNGZlMzNIVHpPdmx6c25uWG96aUpsbDBBcUNLUlB6SUxDUm1aU0VwYXlSNmZMb1dUVzhKYkhTdEJBWUd6aW9wS2U0TFZ5VWVEYVZVRFZmNGxvSlNxcUFBUXlsMTl5cmx3UVBnT0JZczY0Q0Q0OEJCZ05WcWhjbGtoc0ZnUUYyZERqcU9BZHVxTFVpWExrakt5a0tYTi8rSGxGN1hGZ3B5VmNCbU1wazhlb0FlUDNVS1o0d1VIYUkwWU8wMjJPME9zS3dEQ2dDVXRST0hLMmFOVUVFZ0JHQ3Fxa3FUUWdQVlR4VFZHbHpUWnplZ3hFSVFIT0NQNzJwTXF2Y2VjQmtyVEhtb09RZEVkcnk4U3o0aXZRT3E5dTRGRHdCT0F5cjI1eUJTVm1HMjZ1QmVsL0czL0ZmVTZWb2hxa1VBQUJhc1JVQlVSaiswbS9jc1V2ckZ3cGd2NytMTkl1Zi81dUQ4OXF0amJRbWp4NEhkdHhwbEJRYjNmV0tGcGRwd3llMFVHUW0yckFST3VYbWpyQXdCcmRJUkhoTUVDQmFVL2JUM2txSGFaQUxDNHBBNGFnSzZ2N1lVeXBKenNMcDNaazBtQk4zU0NTbjNQb3hPRDk0Ry9ibThtMlplTDNkT0FGQzNieDlZd1hXOHlsL3pFTmtoN2VyY2RwSGhzRnloc1ltM0tEVWFzSFgxVi9mUElXMFEyOW9HcXlrY3NkMjZJclpiVjRTM2FBWlZFSFBadGRLMGFkTjd2L2xtVFJNUjNBQkk0QWFBb1FMUHVPeHRUc0lUUUhCeWhHVTVPRGduV040Sm04MFZ0T3NDTnc2MGFTREtDcXRnaXdpSHRuVXFvbHEzaERva0VFR2RPb0JtSDRiZUlnQndvbkx2d2NiUCsyck8xNVhZN2k0WVdWT0tBM21Wc0xGMjdDbTNRV0R0Z0FBa0JDbmhwQ0FxeHRXOUJ0UlZoNDRCbUtpb3VIbVBqdXpkN1lGdk4rTG9rUmpvYTJ1UjBMRW5SaVJwL0FqV2lDaHFEK0xIY1hlQXI3NkkwQWRlY051QkdwZjRPeDlIM0E5MzRvY1JKNkN5bFlHa1BZUlcvUytwbGR6SkxkZzZjU3ZzQldmUWZNbGJjRG1hcXJGcjJGandDYWxRb3g1Rzh5MFlPRlFlaXNHaGN0TTNVTWNPUit2QkhhOThFeVgzUjc5L1Q4SCsyL3Nqb0VVTE9FcUxrZkxTYW5RWTZuSW1hTHFNUkt1V1gyRjl0OTdRZEJtQjBSOHNRdFNnU1ZDL2RSZTJURHdLeGxhUGdPaExEZ0R6d2YvaDU4VmZJcUpOQzlnS3ppQjY1Z0tFdWFmaDdJSTdVSFJSaTVBWU5YUzUxZWo2d2VNM3pid0tsemtuQU5BcXl2SFQ3ZVBBV01yQWRIb010MlJFQWREaDREMzNRRmZ2Z05GUWdRUGpSa09wYllFK2E5K0UyTUs2OWR6NTJQbllPT1F2RFViN2w3OUVxNTRKeUZ2eEtQTDJGTUdhV3cxU2NpOEtYOU1pYmZuL2tOemV0VmZ5UFE5ajF4T1BvT3lURU1UZCtUUXlwZzlHN2RaM2NQanRMV0FyTDhMQi9Zck4rMWVpeVgwTDBYbDhUM1I3ODNYc2ZuQXFTdDVMZ1pLcmhkbVNnQ0UvZll6Z3k2d1ZRa2puVWFORzNRSGd2ektWbEhmVFZJRlNTZ1dua3dvQVZTclZjRHFkNERpT0VKNm5uRUJodDl2ZHdidXV5aDlSUFFlZ2F2dEtiRHorRTNJaUF4QmxEVVBmRGQ4akpyNHZ1ajdRRWo4UEc0N1FXQzE0cW5FMURBUWFuQk9oR21uUWdRQUFJQUJKUkVGVVZMaWlDaW9tdUplV2l1V0k2cURYRzN4MW1YSW51SE9FNXdWQ0tWWFk3YmFKS3BYcWZ5N3JMNGR5Z3dVYWJSQ2l0SCtPY2EyNnVob3N5eUV4OGRxb2JYWjJEbEpUVzBtMTYvK29mUURnN0ZPalllbTZGQjJISllJVGdoRVVGWFRWKzdyQ0VrSVFGTlV3ME5GUlV3a2hJQlRha0VBUDljTldXUWtuVkFpT2o4SDFjT2RRMWdwemVUVlVNZkVJQ0xxS2VCNkJoYW00RXVyWUJHZ0NsVjVmV1dHcHJJVXFJaFlCSVo3SFlnMDFjQmdjQ0V4SWhFSjVrODNyWmM0SkFIaExIV3hteGl2YzQyWVJBZGJ5VWxCTkJJS2lRcTU2clpTVmxjMU5URXphQmNBQ1YybHhPNldVSllSdzdyTGl2SGRKY2ExV2k4REFRQVFGQlNFa0pBVGg0V0dJakl4Q2JHd3M0a0lEMGF4WkszVHVuWW5rcEV0QnVHeGRGWnhNTUFJamduNGJZN05ZTENndExVVlZsYnkybWdrV2k5V2REM29wYmNycGxISkJpU0M0Z25CTFMwdmlWU3JWM0V1UFN4VVNJc1BobDZzVGRVUWMxTmU0VDBCYzQ4R1dtcGg0bjlZSWJYekNkUjAzVVFjaTVGcHFiVEZxaERSUGJ1U3JRSVFrKy81T0hSWURkZGhOT3ErWE9TY0FVQVJGSVRqb1psMTVEQUlUa3E5NXJTUWtKRXo3OU5OUGN1Njc3MzRlQUE5UWliWGhVb0ZLTVplVUtoUUt3cklzZFdVa0tLQlNLV0d4cUtUT1lvR0JXaGhZTzhwS1N4RVZHWW1nSU5lRXFhT3VmUDB1YTJPNzFJVEYxVEpQQkRWWGFXOEhIQTRXSE9lUk1pVjZRZ21sbE1URnhUME9vS3Nmb3E1TkVtZjhIMUp1VGZGUGhIOWUvMUpDQ09sMHh4MTNUSERiMlRTVVF1NUlZRVJja0dVbGdPTTR3bkVzSEE0V2Ryc0ROcHNORm92Vm5TU3ZSMTFkTFNvcks2WFdmVmR0VzJ6c2k4cktTcS95M2lhWXpSYlliRllQcHNheW5GUmpTUkI0S2NIZGFyVU1aUmhtcnY5eVg3dUV0TzdtbndUL3ZQNGxKVEF3OE1IYzNQTkhVMU5iSHdiZ2RERzNTN1kyU0lueVVyb1ZXSmFEUXNGS1NmSTJtd3BtczlxZEpLOURVRkFRUWtOREVSRVJnZmo0K0t2a25ENkU0emd2RmRSVlc4MW1zOEptczd1OW9LeFUybHV1Z2xKS3liMzNUbE5vTkpySC9aZlpMMzc1NTBuTGxpMm5wS1NreUQya0tqZUpZdUFPL3hBRU1RVEVDYWZUU1RpT0E4dUtyTTBPbTgwS3M5a01nOEdJK3ZwNlZGVlZvN1MwRkZkYlA5SW5zTGxDTzZyY0txaEJxck5tczhtWkd1dlJBZHBkSlpOUVNwa1BQdmhnTm9CQi9rdDg3VkpkWFkzUzBqTC9SUGpsTHlzS2hhTC80Y08vakJhQmpWS3FFc0dOVXFxZ2xETHU2dGx5bFZUQ0ZZZkRCVzZYNnJZWjNDcHBGVXBLU240YnNCa01CbmZQZ2hyb2RIcVlUSzYyZVdMTFBIbU5OYWVUSS9JdVV3QklmWDFkcWtLaGVNeC9lZjNpbDMrdVJFUkVUTnV5WlhPU0Y3aEpzVzBBaUNBSU10YkdTYXpOVlpEUzdyYTNXV0F5R2FIVDZWRmJXNFB5OG5JWURJWnJCelo1aHlsWGVXOExyRlpQVURPYXpLZzFtS0EzV1dGak9ibkRnQkU0NjZ4WE51eE1YTEJ1TC9hV21TNGQyR25ITjdzUDRjbXZ0dUhmMjArZ3lrSDlWLzk2aTlPQzJ0UG5YY0drdjFNcVZyK0FnKzl2dSs1RDVDdC94WTdaeXozR2FEaTJIY2VXek1lKzJYTng1cnU5RUg3WEx3alFuOWlQOHgrK2d4TnZyb1RENjd1cXJTdHhjUFpqT1BMS2g3QmFaYi9rck1PKysyZkM1RStHdVY3UzlOWmJiNzNkRFd3ZVFic2lhL04wSkhneU54SGNyRlliekdZTGpFYVhTbHBkWFkyeXF3aFM5Z0MycXFvcVZGWld1aExjM1hGcUxoWFVKck9yMldHdzJNRVFWeUVQd2NrUnB5dG1qVmdORlFObmY3VDVZUzRxRVNOYi9qOTc1eDBmUlozLy8rZk1sdXhtMDNzMmdTUWtoQllnR0NEU0lRS0NvS0FDSXZZR25PVzhzNWV2RFU4NXozTHF6M1lxbGtOUkViRmdwQmNGUktRSENNMlFoUFJlTjl0bmZuL3NKdGtVVWhDVTAzazl6QU96bTVuNXpPZnptZmU4Nit0dDRLSDN2dUZBdldzTGY1VCtIVXR6Yk13ZE1Zamcyanh1WHZIenI5ekFDdHJBZEpRdDF6N2FWSGIwcTJSa1hSbVd5dHF6UHNUakx6MUw4TVV6OFN3aXl2bGlKWDdESnhFM1l4VFpqOTlNNW9iY1gzR0ZLakpmZUlYcXpEMWt2dnB4aTdtbzN2dzJQL3pqYTZMblhvZTJhQ09iN251MXVjSktIVXpNRUMwSDN0K2c3S096QkoxT2QwTm01dUhCSGxyYjZhS2tMYlMybHY2Mnhxb0VsMGxhWGw1QmNYRXhKU1VsWFJkc2hZV3VaaXpWMVZVdFRGQ3IxWUxOMWlqWUpQeTl0WUpXRkJBRkJORlZ4aThBWXVISjdOdVArTVZ5LzZqZWpFbStnTGtKQWl2MkZ3QldOaHd1NGRaSkl4a2FFOEg4UzBkZ1AzYVVnMlpsOGM4V2lyNWV3djZYbHVLb084bmh4WXZadi9oNXFpcWtSaWxGMXB2UHMvMk9POW43OGhJYVRGMTdwY2gxaFJ4YS9BamI3MzJFZ294OFQ2bEg5anN2c2YyT085bjkwcEtXbWsrSGd2Y0l4OWFhaUp2Y3A4WEhnNTk1ZzRSTEp4STFjUmFSS1NHWUNvdC94VXdFTS9LajVhVGVmdzJ0S3pDelAxeEs3TUtINlRGcUdJTVdQWUw5dS85UzVtSFZSTTIrbk9ML3ZvZEZlZU9lTmZUdTNmdEtXZ1lSTkI3bWFLUFcxbFJMNmhsSXNObXNXSzB0VGRMcTZpckt5c29vTEN6cW1tREx5M01WdUxlT2dycE1VRmRhaDBlVDQrYUFnU3VDSzFvczVybkh5NnVuSjBTRTRHeW81MVNkbGNTSUVJNlhWZ0ZPSEpLTVN1VytuS2hDSmRkenN0S3VyUHhaZ2svL1lZU05HWUtvQ1NJNExZMnd0TEhvOWE3NVB2SDBBbzd1cVNIK3RsdlI1RzlrdzkwdmRrbGJMbHJ4R2VvaDA0aWRFTWRQMTh5anZNSUJPTWk0ZXc2L1pEcEpXREFmSC9NZU52NzEzMTA2WDkzUFAyQlBISTdmYWJJcmk1Y3RJanUzRi8wdUgzWU9ac2hDOWRFOC9Qc25Vbi95R0RhdlJBSWl5cW5KYW5hWGlCRXBCSWw3S2M2eUtSdnFMRUd0VmwrY241ODNtcWJjdG1aZlcyTkRKemVkZUl0QWdrdTQyZDM1YlcyanBLV2xKZVRsNVhjczJHdzJHOFhGcmxyUTZ1cHF0d25hNEJFRlBVMTZoOU1weUxJczN2SFFZeXFOUnZNWHM4Mkd0MWJGcDJ2V2NzMktuOUZyMU5UYUhZQTNJK0tEV1BGakJtWDFEYXpkdW85Y1djQnNkU2dyZjViZzIzc1F4bUZKaUxvQUlsSlRNYWFtb3ZNR0tDTjc1UzZTSG4yY2lPUmtCaTU2Rk9lNjVWVFVkMzVPLzZsWDAzZktLS0ttMzBiOE1DYzVHektRUzNkeWJLT1RvWXZ1SWlneGtmaTc3MFhjc1lLcWhzN1BWM3Z5Sklib21IYS9hOWkvZ20ydjdTTnQrUkw4Zk04Rmxib0pteGxVbW1LMlRCeExabm91YWowNDZqek5CaDk4WW5UVVpSVXJHK29zSWpJeWNuWktTb3JPcmJXMUNTUTBtcVh0cFgrNHRMYkdLR21EMnlTdHByeThuT0xpSW15MjlsOUNhcGNKV3RpaUg2aXIvck94WktwWlcydE14SFU2bmE0MmRwSWtDSUlndlBMMFkvT0JWTDFXUzRQSnlkWFRMK0VTcDVxOU96ZmpwM0hWaE40Mll3cld0VHU1ZldrV0EvdjBaWHpRQ2J3VmRvOXpEMGMxRGRYK2VJZTUxU1R2VVBTKzFWZ3FnVTc2MUJvOGtpSDF4a2pLSzh0eGxOWml0UlN5NjlZYm05UjlyNlFrc0FLZFVQL0xPT0EwTk9rVk83WVJjUEZzQWtQUEZWZThBYTBlblBZSUp2NjBEMDFJRUQ4c0JyV3Z2dTJmU2s1bDM1eEZpS0k0Yk0yYTFaTkRROE8rQmV6dUh3ZHVXbkZjeWJ1Q3V5OXBrNXp4MU5xMFdsY2dRYWR6QlJLcXFocE4wa0ppMnluZlU1dk41aVk2SWxjdHFHZVQ0NWI1YWc2SFEzQUxOY0h1Y0FtMWpBUDcvVlFxMVh5QVBxR0IvSEswSE5Gck1LSEE4ZUp5RW51NE9oSnB2UU80NS9LTDNTNmFRaVpzOCtYK1VJVmw4dXp1SUFGQmNyYWtIRk1INEIxUVEwT3BEZUswWUNyRFhCZUFMcWdMT282SHI4dGNXSVIrc0JGMW1BRXZRenlqUHY0VVF6ZmZTMzZSY1pnM3RKK0hGRFR4V3BKc29lMGJrU1g1NEIySXp2ZlhGRmZxQ09qZmc1ck00K2d1R0FhbURLcEx3eGdRNzl2Q1hHMG9NQkVTRjludUdKeGFmd3lCdnNvK094UFBaM0R3N0VjZWVmajdaNTlkYkFQc3NpdzczQXdnVHJmVzFxSjFuOXN5bEp1anBEWjNsTFRSSksyaG9zSVZTQWdQRDBldmIvbUNFcHZvaUtvYTIrYzFlRFE4dGpiV2d1SndOUHJXSE5oc0RnQUJXUmIyMURodVhiYi9WSCtBMkw1OTZWZWJ3L1BiVDdCbC8xNCt6WktabGV3cUhpNDZsY3RIZTA2dzZlQXgvcjUwRTRNdUhFcWNJdGZPc2xJU2c2LzZCSm52ZlVIZXVnMDBtQUJDaWIxaUdJZWUrUWZGR2ZzNStNUmlWSlBuRU96VCtlbHExbjdNMFRYYktmajJIYkwyYU9nNXNUOUNXQ3A5eHRyNDhmN25LZDZmUWRIbU5leCs0WjB1cFpqNGpSaUprTGtIVXpzZWlNcE5Lem0rZW5lN3grMjVkZ3piWDE3VjVXa28rdllqam55K0FhZTluS3dQUGlSNyt5RUFlbDEzUFRsdlBFUHU5enM1OFBpemFLWmNTNmhIRWIxY2NZQnkweUFpK3JUVkdnL2NNWVh2bjEydTdMRXpoQ0FJZmUrNzc3NUp0SzFHOEV6OWFKRzA2M0EwK3ZXYlRWS0x4VlZMV2xkWDU4NXRLMjgza0tDYU8vY3FqOXkxS21wcmE5cHBlbXpGWm5PRllwME9SeE43eHlQdmZSYWs5dlo1M1NwcWc0WkhCNEhLaTdSK1VSdzRsa1ZHcFpNN0x4M0hNSGVmUTZmTndwYk1iUGFYMURJd2FUQVBqSW5uOStBTk5abE1PSjBTZm41KzNUcXV0TFNNNE9EZ2J2VUlQWk5qem5SOHJ0M2pqWEhTaFppT0hxUWh2d2pEd0F2UmV3c0VqNW1NcXV3d2VhdTNJTWFPWlBpamYwSGJoWDRUd2VNbVl6dXdscExNV2dZKy9VL0NZL3dBa2ZBcE0xQ1ZIaVF2ZlFPMWhiVUVqeHhMVUZ4azU1Ukgra2pzR1V1cDhSNURXSytXTEMrU3RRRjFXQ3hCY2ExcUFhVmlEdi96Yll4M1BFWlliTmVZWWFwKzJrUkRyWmF3NFFNUkdreUlmajBKN20xRUYzY0JJVkYyVHFXdlJZZ2V6ZkJIRnFEVk5JKzY2SlBYYU9nMW5jUXg3ZmM5OVJzd2pPRDRTRVZLbmFuT3JOTVpOUnJOK2syYk5sdHgxNDgyVW9rTGd0RFlXZDZ6azV3Z2lnS2lxSEwvaU80T1Z5cDNseXMxV3EwV25jNkxvS0NnRnZSZ3dqZmZmTzNSeTZCUnVOVzZtVHdhazNQTldDeU5YR3NPd2VsMGlySXNpemFiOVY2VlN2WHMvOUxrbnU5OGJHYzZ2djhWMkxJMnNQSHBINW44d2VOZGVySFpNcjVnMVNNL00rUGI1emluSGxsSEJWdXUrQXVEUHZ5VW9FQlJrVUxuQ05YVjFmOEtEQXhhaVl1enpTUUlRZ011RDYxTkVBU0hJQWlTU3FXU0dqbmJkRG92V2FmVDQrMnR4MkF3NE9Qamk1K2ZIMEZCZ1lTR2hoRVZaU1F1TG83Ky9mc1RIeC9mYklwNkJnemNaSkdOR2hwMnU4T3RFam9GZDNwSFUrblVuajI3ZlZVcTFjM0tVaW5vRHJUeEU1bmFSYUVHb0UyYXdlVmZMZWFjaDVuVXdZei9acmtpMU00eC9QMzlyN3ovL3Z0OEc4MVJkNFJVUmF0U0szZHVHdzZISzFKcXR6dXcyZXdlVVZKWGJsdGpJS0cwdEpTR2h1YlF2T2dxY3E5dlpYcTJ6RmxyajJ0dDRNQ0JOd0lLdVpXQ2N3dFJqYWhXaE0wZnlOY1cvK0NERDA1d0M3WjJmVzJ0T2R2YTVyWlpXd1FTWEVYeXJrQkMwN1pwV2VUZW1LL1dOaExxWnU0UUFPRzY2NjVWcVZTcUc1UmxVcUJBUVhjUkZCUTBvMWV2WHRwMnREYXhVV3Z6cUVob3lwMXREaVI0a2xJMkZzbTcwajhzRm90THNMbTBOVmVSZXp0Q3paT1NxRWxiZS9mZGQ2OERCaXBMZFBiaEl0VlRVZ29VL0tHMXRnSGJ0bTBkMHhXdHJYM05yVkc0TlJiSnQwei9BQkJicG5mWVd2alduRTZuTzIrdG1Sa1hFTlZxOVhYSzhweEx3ZWFuVElTQ1B6VEN3OE9udVFWYW85YW1waFVaWldNMVFxTU1hdWxyczUwMi9jUGhjS0J1ckFkdDFOWWE4OVdhS3d5YWZHdTRLYituQXFPcmEydXBzWXRFQmZyUXJndkVLWU9xZFFLQWs2S3FPZ3pldnZoNXFaVFZQUTJLMTN4S1ZiRVZNYVFYZmFhUDZkSXh0dndqbEJTSzlCamVwOHZYc1JjZklXdk56OGhBK01RckNJbytWNXFpaE9Sb1cwMHFxTlZucFN0V2l5dFY1Wkt6dDR4ZUYzV0RCcnd1bjJOZmJFUUNBbE12SnFKZjEraW5LN2F2UnRWN0hBRmgzbDIrVk1YV2RFcXp5aEYwNGNUUG5jTFpTdVdVR2lvbzNMSU5xMG5FZU9tbDZIVy8zWDQxbmRoTnJUV1V5S1NZTGg4aml1S0k0OGVQSmJzcHhCdUw0KzF1cmMzcE5rZWJORGFuMDRuRFpzRlVYNDlUcTRYUVNMeTh2RnJWa1RacWJTV0lybnJRNWdvREQyMnRUY0FBRUxScTI5VjMvZnNEcHIzMUxYLy82RXRHdjdTQ0hhV045WFpXbnZ2b0MwWSs5UjhTRmkzSHMwVFZZYXBnL2lzZnNlQ3p6Vno2NGxJK1BGS21TTERUUU9WbFFGTnpoRDJ2Zk43bFl4cjJmY3UrRDlaMnp5UVF0V2dNQm9vL2VaSEN6S3B6ZGorbjNubVlsU2xEV1ptU3pDZkdhRDRmTXBTVktVUForTVJIditxOCtSOHQ1c2lHSXkxZm5RVzcrUG1GLzNidlJLSWFqY0ZBNWRvUHlmN3hlSmNQeTM3ak1Zb09WWGZ2VWw1NnRHSTUrNTk2bmJOWGF1OWc5MDJYOE11bVE1aEx5NUhPSVR2SndZZHVvcml3NVFVcU55MGo4OHRkM1Q1WGJHenNSRTl6dEZXRVZHZ2RTSEE2blRobEdXdDFPZldWZFUwVkNXYXpwVWxyYzlXUmxpRTJVaEo1Q2pWM2hZRm4wQUJabG9YcTZxcUJna283ZThHc21XeC9ZQjRyNzc2T0IvcDdzV2pEd2NaSGtza2pMMlRWZ290by9lNWY5ZjJQMVBVY3pEY0xMMmZsTlVONSthdnRWQ2owTU8waWRNS2w5SnFjZW5ydHJLS0UybE9GT051WlAyZERIWFg1cGJTaDhaUnNtRTdsWURGWm1qNVNoOFVUUDNzV2dWRytwMzFnR3ZKUFVWOVN4YStoQmUxNTIzUE1PckNmV1FkVzRlY2R5S2kxKzVsMVlEOFRuN3EyZVhpU1M3TXo1ZWRncWJOMHJxRTRISmlPSGFEbVZEbVN3MEdiOXJpU2picWNmT3kyTG13eVF3UzlaczhpTlBFMHJlVWNOa3o1cHpCVnRNL2NhaTB0eEZ6VDBNNWExRkNiazk5aW5RS0hweEUvNHlKT0YraVZMQ1pxYzNLd05saTZPTHNTa2lPZnNuMGlTWXNlcFA5ZmJzRGdvVUE2VFJYVW5jcHZkNi9JQUE0TGRUazVYWm9ueWVHZ2V1Y1dURFUyMTV5M3UvZUsyeks5dUs5aGJXaFpjcUxSYUM3YnVIRkREdytOcmNrY2JmSzF1VnNPdUlRYWd1anREUm9WRG1kakxha0h0VkZkRGFVNTJSUms1NkgyVE85b0xwdHk0blJLU0ZLenhnYUlCb1BoS2hCSjh1amczalBJSDB0SkkvMlFtaUc5b3FBbXA4MFU3c2dxWk1KRll3RUlqdWxGUDhkV2RwWTV1U1JjTVVtN1k5THR2R29NWmVaSXZIMGxxck1iU0gzL0U2TDZ1SnJ1Mmc2dlpzMnN6V2lvd3F3Znh1UlBua2V2QmZPeExXeWUveUFxWXlMVzdPTkUzUDR2aGw4L3JzTXJ5WFc1YkprOUQ0dHZMN1J5Slphb1NVeDdwYmsvaiszWUpyWXVXazd5RzI4UjdQOHI3K3JJbDN5eTRITVNldFZSVmlSaHIzSXdldjFhTEovZXcvSFNrVnowMkN6QXdwYVIvWWo5T0pzWXpRN1cvZTFGTENjT1lqYzhSZlYzQVJoR3ptSE1QWFBjNW1nV1c2NmJpNjJ1bnVwU1B5YXZYMEhBR1ZyWjloUHJXSFhOMC9qMjdvVlVmaElwYmpvWHZmRWdXcmRneW43MVhuTFZLaXpabVVUZS9SS3AxNDhISkU2OTh3aTdsL3lFZjN3UXRmbDJSbjY0alBEWWpnZFJ2Zmw5TmovNEx2NzlFN0FVWkJIejRGSUdUSXpyOEppODkvN0I0VzkyVWx0VHhFL3o1cUpXQnpEcy9YY0o5b1dDOXg3aHB6ZTJFUkFYU0hXdWpaR2ZmVXBrbkd1eENwZmN6NEdkRW1MMkxwd2FiNnoreWN6ODVKK25kUTJVci9zUHU5OWVRMTIybVlwN3J1YUVRVVhQK1UvUmYvSUFBTXo3dm1iOXRjdVJLbjVCNm5NTlU5KytGeFZRdldNNVA5ejlQUG8rZlRFZCs0WEVmN3piZEF6QThPR3BZNEZUYnEzTkJySU5CQld5N0pSbFdaUkFscHhPV1JCRTFHcVg1aVpMTW9Ma2JKSCswVkJ5Z3IwcnZpUXkya2lKMUlDNnRXK3QwVkhuMHRhYVRkQnZ2LzFXSjRyaVZTMVgzY1I3TzdPWU0rbXlUcmFIbGJJNkJ5UDhSRjc0YkEzSm8wY1I3Z05sdFdZSTkxSGtWZGNOR1lhOHV3YXRyK3NCS2ZyZ0VmYS9zNUtvRjI1eHpYSzFscWxydjhTZ3M3SDdxbEZrZnIyZmxObUo3UDdyMzRoKzdETUdUZXlEVkhlTTc4YmVTc1hsV3dudTREbXIzNTVPVmZBVXJ2ajRNZGZidUJVOWpMT3VsSXI5aDdDZEpYdEtQckdId0JjMmt6cmNDQTRMVHFEd2RDWjA5QWltckZqQjhTZm1VaFgzZDFKdmJLbmRTcVVtQnE3OW1tQi9rZDFYRFNmMyt5d0Nwc2VmbVZzZ2FnU1gvcmdWalJyQXdyWXBROG5kUFovZXcxMHZFKzNnUzVuNDFEd2NoVnY1YXNKakpNN2FnaUY3TlR2L2M0eUxOMi9DejFlay9JdG4rT241OTVuK2VzZXRRTEtYdmt2Y294K1FQS00zSU9Ic2doYlY0K2JINlhIektWWWxYTTNJRlNzSWFzeGtyc3ZnNTMrdVovUzJyWVNINmNoLy9XNTJQZmMrbDczVi9IS3Eybm1VU3phdEl5QlloOU5pNmREZkdUSjVBVk1tTDJEcmhEaWlYdjJjWHIxYnBreWJIVVl1LytZNTFKWWMwZ2ZOcEt6aVhpSjhDOWw1K3o5SVdycVJYa21oMlBPMzhQWE1wNGlidUJ3M1ZTQStQb1pwOCtiTlc3RnMyVEtyeXh4Rkl5RGJaUkFGd2ZXZjRDS3p4ZWwweWs2blU1QWxXUmFjVG5jdHFic0JqQ0dBNk5temlJd01wMmZQQ05TTlVWQ1hHZXIwU1BGbzZWK2JPSEhpYktDNXo3eGs1L1V2VnVOSVNHVkIvK0N1ZW5VdzZEUm9SRUdSVVdlSW11MHJ5Znc0SFZORkhZN3FFcVMremU4YVE4cG9ERG9BTFNHamgzSDh3Q0dZQXFXSHpLaTJmczdlSFNBaklUdnlxY3F1SjNqUTZWOHErcVFVeEl6YjJISzNsZkRVRkhwT200YkJvekpNUDNRdWN3N1BQWHMzRm5NaHZZYTdUVUcxN2xmVkVhdmlrd2oyZHoxNGh1aEk2cXFyei9oY2dtamh4UE9MeWQ5NUFMdFZ3cHhUUzBCbERlQVNiT0VqUnJtR2JCeEdjUEJKS3JNc21IZHZBMi9JZXZsWlZ3djB5aFBVSFBUQzZYWWVuUTVoSTBieTR6TjM0RGh5Q2NHcFkrazU0WUl6SHJmbFdBYm1xR0dFaGJtaUNCRmp4MUM3TkwzRkdBSW16aVRBWGN1dDB2MjZhRU5neWhCWGRZZ3VBa05JRFpaYWNKYnZvcnpHaTZBdi8wUFZsNEJrUnF6TXBLWUs5TTBpSS9yNTUvK1Z1bXpac3MyTjVxanNNa2NkSUR0bEdjbmxiNU5rU1hLMjB0ZzhvcVJhTThVL2JhR2lwcDRDalJmcVJoUFU2V3lkNHRHY2tBdUlhclZxbHNmN21rOVhyV2FyR01mN1UvdlRlVjY0RjZHK2FzcHFuZnhseGtWQUEvK3BoMUEvdlNLcE9yWThXN29xVHE1ank2UExHZmZGZndtTERhYnE2eGZaOHJXdEl3WFBkUkpORUJIVHB1TGpYcWdlVTZmakcrL2Q0YlhVMGFsY3VtMDlSVnUzVXZqTlV0TGZXY3ZNelcraFBVZTNLdW9OcDlsSFV0Ty9jaGQ1U1FWUEIxWTNpaGJhZTkxbXYvb1ErYVVwakYyMkNKMjNtdDNYRFVPVzVOT2Z3WDA5cjVqQlJFMmQ2djU4S2oxdkRtZ3hsUGF1RlhYYjgxeVN0cCtpclQ5eDdMSHJLYnp1VlVZdFNEdG4yMHZyYy9hZVAwRThUZEdiZnpSUlU2YzJsY1QxbURhN2pWc2dMQ3dzRGRqV3l0Zm1tYkFydTFJL1hKUkdzb3dnT0oyeVMyYTUzR2hWbVlkQk5qSmdTaHJSUFl5SXpjbTR6dmJTTzVCbFdhaXFxa3dTQk9IaVJuOVordnIxZkZZWHdqdFhwalNwbEoxdG1aR0pSallmeXdhZ0xQY2t4OVNScElZcS9yWFR6bGh3Q09yeVhFd2Vjc3RlVklRYzJaZmcyR0RBUWQ2NmxvMUhUSHUyVVc4QnNGRytiUmVoQXdlQmIxL0MrcGhwcUFzZ2JHZ0tZVU5UQ0lpTFFXTm9Yamh0U0FoMUJTMGJxRGpxNnNBL25PanBzeGoyMHBPbzg0N2k2ZnUxWlcxbCsxMFBVMWwzN3ViQUt5Q0FCamY5czdQNEFKVkZMY21SMUhvRGxzcnlzL2VnaHdSaE90V1NicnFob0lDQUljUFFlYXR4Vmh5aWFHZExQcm1TSFZ0ZDgxVzRpNHFxM2dUSDZRZ1pQaHByMWlIMC9ZWTB6Ym1mTWFoWm1CbUMwRHFLTVZXMWxOUzJ1am9NOGNrazNMaVE1UG1YVVgzMHhCbmZpNjdQSUhRRnV5Z3RkUVVoaW4vWWlsL3k0Ri9OcUtQMjFXTXI3MW9FWFJVM2pCQnlzUnBpbStjaExncE5xN2VqV3ExTzI3QmhmWTkyQkp1cTBXSnNsRWVTSkNFTDRMRFpXblMyc3BnYUVQejljVGl0MUpkbm8yNFVhbTJyREpxQ0JvS1BqOC9semNaMENZczNaVkdyOHlMdFdWZW9YUnZhaSswTEp3RHc1TnNma0Y1c284N21ZTWFpSlNRTkhzYUhNd1l4ZmN3b3ZudG5GWmU5ZVpLYXFscitldmswZ3BVU3dOTUx0ckFSREo0Wnd1b0xSNkEycG5EeHQ2K2hIellWSTIremV1WmN0R0lkdXFDUWxvSWdTT0tIV1planBncUw3MFFtenhnRXdOQlhYK2I3K2RlUzkxWUNhbnM1OVNZams5WXZhU0xRN1hYTFBXeTYrVDYrZkY5SDNOOWZKUG5Lb2RUditJaU4vL2NKZ1gzak1HZG5Fbkw3US9oN3ZKU2Q1U2ZKL3V3clloNWJUTkE1U244TG1YZ0Zxbi9PSVgzbVQ2ajlJdEdGdE5SempKZGZ6OUZiSCtLYjFhL2dOLzU2eGo5NjdhKzZYdlRjQlp5WU41K1ZJOThrNHBxSEdIbkhOR0t1dVpYMUN4WlF0M0VnbGhyUUo3UmtYYkVmV00yYTJXdXdaR2NTKzlqL0k4QWJHRENWMUp1MnMzN0NPUHo3eFdJK2xZM2ZwUTh5OXA1TDNVOXlUd2JmZHhGYjAwYWc4b3RoVFBvS2duM2d5RU56eUQycHh6ZFVTOVh4VWxMZS90dVozNHp2SUZJZnVwanQweWZqSHg5TWRiYU5rWjhzK3RWcmtuRFRRcmJmUFpOZi9BM0UzUDBTQTZjbmRmQ21NSkw2MmtOc3ZXa0tKK0w3SWxlVllnbEtaZnBIaTlvSTJHSERocVVDdVo3Q1RaWmx1K0NLa0VxeUlMak5VUW1WbHc3SlZFOVZ0Z2xiWURqYVdDOTA0VVpxTTM4aXEvd2tKWUlPWWZEZ3dlNytCbVlzRm90Z3RWcXgyKzJDdytFUTNDRlhsZFBwMkFQMFB4dTJWVWxWUFhxREFUL3Q3Nk90bmUrMFJaM0RnU2svSDFWZ0JEcERXNytJczZHT2hsb0xQaEdocmN3ZGlZYkNmR1N2UUF6QlhaTkVrcTBCVTNFNW1zQXdkTDY2MzJXOVpKdUordEk2dktNaitMMzBlMmRESFEybE5YajNqRWJWenN2WVdsYU1wUE5ENzl2U3ZKY3NKa3lsRlhpRlJhRFZkVzBQMkdyS3NOWlk4VFpHb3pvTGxDWk9VdzBORlNhOG80M3RqdjIzY2FuWU1PVVhJL3FIb1BkdlA1bFpsdVdqb3FpNkE2Z0g2bkJSR3BrQmk0QmdGMFRCS1FpQ3BGYXJaWTFHSTN0NWVhSFQ2V1M5WG8rM3Q3ZUwwc2hiajQ5V1QxalBIaTZOcmRrRWJkYlljQ2ZJbVV6MWFXZEhxTGtjSHVHQlNyblFyelFHTUVUSG5sNzk5L2JGMTl1MzNibjNOdmJzM21wcHZmSHQyZk4zdlZ0QmE4QTMydkM3amtIbDdZdHZCNmthWHFIdFZ5cUlPZ08rUGJzM2RxMS9LRnIvc3poMmd6KytCdi9mZDh1S1dneWQ3Q05CRVBvZVBKalJkK0RBUWZ2Ym1LUElUbVFrUVJBRVNYSnBiWTJCQk04NlVvY2tJMm5WMkd3V3hNYkdMTTI1YTgzK05VRHc4dks2VEJFbUNoUW9PTmVJajQ4ZjBjb1ViYzM0UVhPWmxZU243UElza0xkYWJZZ2V2alhCN1ZzVFBCeDJvaUFJMDVVcFY2QkF3Ym1HWHE5UG83bjZvTjBXZmE0ZnFaSDVRMmloc1RWMXRySTFhbXlTUitEQXBha0JndG5jTUJXSVVxWmNnUUlGdndHTVI0OGVHVWpMOHFwR3hvL0cxRE5Ca2p5TDQ1czF0MmIyanliQjFvWnp6ZVhlMEdxbktuUDkyNkswdEpUOC9BSmxJaFQ4S1JFVEV6UE1VMk56bTZPcVZ1Wm9DNjQyTjRWNEM2MU5kQWNNbWxTN3hnUGRacWdpMkJRb1VQQ2JRYWZUalcrbHJiVm5qcmFRV2EwRENYYTdIZEhUREczVTFBQ2hvY0Uwb1gwejFNbk9qTU1zV3JtQmU1ZHY0djE5dVI3MEt6SlplWGw4dW0wdnIyNDhTSzNIVVE1ckE5c1BIZWV0alR0Wm5sbWlyT0J2aUVQM1hjR0pIY1hud1Vna2ZyNTZQQVduL2poemF5dk5wYnF3NGd5UHJtUGJaWmRTMnFYRGJWUmxITUorRmhoeGFqY3RZY01UUzgvcVBNZ05GWlFleVczeitjL1hqQ1V2cDN2bWFFYkdnVDRlV2xzTGphM3hweVZYbTlRbVFpcTJNa1B4TUVNbnRyODM2L2hxYnlGOVltUEV6UktVQUFBZ0FFbEVRVlM0dEg4VW03ZHM0UEVmR2tkdTVyMzFlemhTWE1KYlAyUzJFR3lsZVRtOHN6ZWIvYitjNUl0amltRDdMV0V0SzhCdXRwMEhJeEdKbnJjUXY4QS9rT3RnMVN2c1diTCtqQVc5cFNBUFIxZTZUVlBPanF0dnBOcDhGbDR2cGtvYXlzNHUvNTZVK3dNYi92cGltODh0ZVRuWTdkMDdWNjlldlpJOU5iYlRtS040bXFQTldwdExzS21ibzZHTlRCNHVNMVFVeGZZRm14akE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5TekdjMEo4UEV2cXplc05hUHFoVGhNMjVRUFhPZEk0dlg0OGREUUVqcDlIL3l2Rk5TYnEyNHFQc2UreDF6RlpmRXY5Mk55RkdYOEJDM3JJUEtkcDdGTHRkVGZDa1dmU1pub29BVlArY1RtV2xub1k5RzZpcEZJbTc2WGFNU2U0aWRVY2QyZSsvUStIK2szakZENkgvd3B2dzl1NDQrOU4wNkFkT3JOb09vaGJ2MGEwRWI4NStNcGQ4Z3FuYWlpRitDSDBYM3RBNUEreHB4bEN6ZHcxRkJmNzB2WFFFQUpXYlYxSWxKUkovVVJKbDZ6NmlRVzJrY25NNkZtY3dDZlB2SURUVzMvMndsM0w4blhlb3lDckJrRFNPL3JkY2lWYmRxSTJVY2VLOTl5ZzdVb0JYejBRU2JyNlZBUDlxTWw5K240bzlHZFRWbGJGL2NUWkNaREtEYjNSNWJ4d1ZXUng5OTBPcVQ5VVNNUFl5K2wyVjVrNHd0cEgzMFZ1YzJubVNnTFRKZEVVQnEveCtCYWQrM0kvWlZNT0pGeFpUb0JXSm5MT1E4SGgvMS9tV3ZVdmVqcU9valFra3pwL2ZWTmplc1FKWXpiR1huNlU4dTRySVdUZlRhMHkvSnMwdy8vUDN5UHZoRUtxSVJCSVhkbjYrM0E5ZW92TGdBZVRpWFBZdFhveWdDcVQzM3hZMmtTYVlUK3hrOTVKUHNYdEZNK0NldS9Gemw3Qlk4ak00OXM3SDFGVTdDSjE2TllsVGhpSUEzdDdlSTREUFdwdWlqZVlvc2lRNUpVbkE2VVFscW1WSkl3bE91MDAyMWRSZ2t5UXNYdDZJalZMUG5aU0xMQ05VVmxiMHA0dk5XbzZVbHBOb0RGR2t5dThNdVdRbkcrWS9UK2pNYStsejNSVUk1cG9XUklBbmwzOUY2Q1d6Q2RCbHMvWEIxNXBNb1pwQ08xR3pyNlAzdkdrVXZYSTdCOWNjQTZCbVZ6bzcvdlk0bXBScHhFN293WTZycjZXaVJnSWNaTnc5aDE4eW5TUXNtSStQZVE4Yi8vcnZUaDlRVFhnc1lXbWpLZm44VlZxU2JUU3c4NmJyY2ZhNW1IN3piOFEvUU1MYTZSdis5R1B3Nnp1SXdsZnY0OFR1UW14Wlcvbmg0ZjhRTUNqUnBmT3MvNHdkRDd4STRPUzVHQk1kYkxuMlRzd09seFd5ODVvWmxKbU1KTjUySXh6OWpCK2VXOTVrb2Z3MDd6SUtDbjFKdUcwKzRiMjhxTTJ0QkxVdndlUFM4RThNUXh2ZGw3QzBOTUtISnJwdktaOHRNK2ZRRUpCQ245dXVvdjdiWjluOXdYWUFTajU5bGwyZkhpTHVwaHNSOXEya3JMRHp5bjVkM0VEQzBsSlJhNzBJSEpOR1dOcDRmSUpjbklpRlN4NWoxNmNaeE41ME13R2FrNnlmZDErWG1IbnIxbjFLUStTRnhNOGN5YUU3cnlMM21JdEVNK3U1djdCL1ZUYXhOODBuTkt5VXpkYzkxT241L0llT0lXUllFdmhHRUo2V1J0aTRDOTAwVHk2dE5HZEZPc1paMTZBdDNjSlB6eTl6T2JSSzk3TnU1aTJJZ3liUlo5NWxGTDU4QjRjM1pRR3VaaStyVjM4WDJaNmZEVmtXWkFSQkVBUVFhSEtqT2UxV25LalJCSWVpRGRDaGJsM3dqcXMyZEh4WEhxWlQyWWQ1ODdDVGQrN3NwMGlXMzl0NzFWQ0p3NkZIYjR3bUpENkNrT1NXMzhkZGR5ZlJJL29qUjExTnh1VWZZQU8waERMZ3J6ZFJzWDgvNW1vYi9vUGlLTjkxRUthNCtpWUVYSHdOZmFhTUFrWVJ0K0k5Y2pjZEkyaFVKY2MyT3BtNDZ5NThOQkIwOTcxa3BWNUxWY085QkhkQS9hOE43WWt4MU1ndmJUUTdLNVpxSzRGaFlRUU1TQ0o0WUhMblFyeDBad2RqTURMeXRhZFpjOHR0NUJocTZmdmlSd1NITnBjelJjNWJTT3lZWVRCbU1Ma2ZEaUIvYnhVeDZ2WGtsdmRuNXIxWG93TDg3NzJEcjJlOGp1WFJPWWdacThrcFR1REtyMjUzTVpza045ZEdocWVtWWo4VVFaazJIbU5xTXlkYzFmcmwxQmluTWY2R2k1R0JRWGZkeUtwRlh6SDh4bEhrcmxoSjc3OStqZkdDT0l6OTcrZkVoMWQyZXIvZVBmdmczZE1YalVaSFNHb3FvWVptb1pHOTRpdjZQdlE5eGdzaUlQa0pjcFplUU1HSmw0anIzWEVKbCthQ1MwbStLZzBCNkRmek0zTFRmeUFtZmpCSGx1d2llZE9QaElhb2tmdmZUKzdTRVJSbE9ZaUpQMzE5VjBEU01IeFYrUWlHdkJiejBJamVDLytPY1dnZ2dmWlpySHJPVlY5ZThQbjdhTWJmU3Y5cG81R0FnUXV1WU1meWRKTFNYSngxS1NrcC9ZRThUM05VRUlTbVpGMEVRVUFVWlVIRXBaaHB2TkQ1YW5BNnJOZ0ZMNWRnYSt6dTN2aWpVcW5HZGpiWkZVVTVMUGo4QUl0dW1FbWlRYWxtLzcyaGlwdkV5SHN5T0hEbkhING90R0s4NXUrTWVHQnVVMzJsVjZDcjVGM1FhUkVjRGlUQVdaSEoraGszNFQxeUtnRVIvalFVMXlQNU5GTlNlMGVFTnYyL1BqU002c29TSEtYbFdDMkY3THIxeGlZYUhxK2tKTEFDM21jeThrQ0d2Zm9NKzE5OW1DLytua2ZBaU1zWThjcVQrSGF3cHh5bFJSMk9RZGRuUERHSml6aGVNSmp4bzFvMkdOR0hOZEovYS9FMit0TlFYazJEc3hpcE1vTnROOXpZUEtvQjhVaUF0YkFZVFV4OHQraWE2b3Z6Y1J6ZHc1WWJtdnNuQlBjZTdqcGZhUjFCWVdGdVZTd0NROEN2S1FnMVl5azFvMnUwbU1SQURHRmdxNndET3VaSTFJVkZOYmtwZE1Zd0dySXFvYVlJczluTW9YdHY1V2pUbStBQ1ZOamM4dVhNL0tycVFKZFRWYVZSSVZ1dHJwRVhGV0Q2OFFpYmI5amNyUGtOYVM1eUNnZ0lTQVkyZUdocnJoOEJBVmtXSktkVGtKMlNJSW9xSkVtU0hlWmFvYWJVS2h0OGZCRjB0cllhMjczMzNxc1NCS0ZEM3VpNmlnSnUrV2diZDg2ZHdiZ0liMFdxbkJkUTAvT1dCK2w1eTRQWVNqTllOMjQyUmRmT0pkcllnZTltNHdvY1EyNWc3TDl1QitENEU3dndERmcyRkRjMzNER1hsZUoxWVRqcU1BMWVobmhHZmZ3cEJ2WFpHWG5nbUZsTUdETUwyVkxGam5tVE9mN2RIRkptbjU0MVFoMFcyZUVZeXI5NWtkenFJY1QzK29XZlg5L0FxRHVhM2NYbTRrSWdCYkRSVUZoRFpFZ0EzdW9JVkpHcFRQanN0VGFGOWpaakJQYmNuZGdrbXVqQVBTRUlBbktyN2lrK0VkRjRwWVF5OGIySDJ3cVVjSC9NcGFWQUhGaUtNVlU3dWl3Z0JGRnExZHRCank1TWo2V3dISHBIZ0ZTRnFSU01YYUJic1pRV0lMczFHVXRoS2Q0UlFlQWZqdDdnejVDM2xoRWVlQWJLU2plNnlPZ2pqZmhmTkpPSlQ3ZlB5S0xSYUVZTUhqeEljK0JBUnF0RVhVRjA2V3VDZ0N6aHROdVJOR3JzWmdzYW4yQjBZZjdvdkhXb1c1bWhQUG5rRTZPQjAxZk4ydXU0YzBrNnV1ZytWQlprczdRQVZQb0E1aVc3aWx5M0h6akV5WXB5ckU0elgyN1BJQ0U4a3FrSm9VZ04xU3c3Y0lyRHA2b3B0VWtzM1FHcEEvcVI2S2RSWk5KWmdDMXJPMGMyRlJDWk9nQkgvazZzMmhoOEFqb3hjYUo2MExBbm5ZS2ZSMFB4TG81OXV3Lzk5RXVhZ3hGclArYm9ta0g0T2c2UnZjL0ErRmY2SVBoTDlCbHI0OGY3bjJmZ0RSY2pWeFZTc0NlUElmZmQxaUg3UnRYKzdaaHFySmhOVGlwM2JrRjl5b3VRMUJIb2RLVWMvTmNLZ3NhTlJFc2w5YVYyZ21QQ094eTNFSlo2MmpFNHM3YXo3UjlyR2ZYTk40VDRsckYreWh4T3BQYW45MUNYaEMvNjVDMXlVaU1Rc2xkVFlyK1FZUmNFb2hXbjB0UDNSYlkvczRRK2w2YmlLRHhHU2JiRUJYK1pqWGJRVkdJai9zMzIvM3VEL25QSFlzdmRneHc1aVo3dTgvbkg5NlhxZzY4NE9UUUliV2dNMGNQN0VUaHBEajR2WE03UGIvWW1ia3dpNXF4RFZKdkNHRFJ2SWpGenJtVGJxNHNKQ2JtZHFxL2VvTDZyY28wUUFtSWNuSGh6S2Ria1NBSlNSdU1ickNOdTFreCtldkZKQW53WFVyL3BBMm9pcGhIVnUzUDkwcjQzblgyZlhZd3hvb1lqM3h4bHlLZmpRZTFMdjVzR3N2dXVoMG4rNnpXbzdlVVViZHBQd21QMzBCbUJ2eW82SG4zQk14ejZmQlgrZ1VHRWp4L1ZGSHhwRDFHemIrVEFKWDhobzM4SXhnRkc2bzd1eE9xVFROOUxoalVwY08rOTkzNnZsSlNVUXpRM1UxWUpJQ0lJSXJMc1JFWkFGR1JabHBGRkFidTVGbHVEQnJtNkZKVmFyUmJjaWJrQ0lENzExSk5YaTZKNGVoK2JaS2ZLcGlMY29NRmlkMkN4TzdDS1dvWkhCd0Z3TFBjVWVWWTFRMk5Ed2VGQXJmY2xLY3dYMlZyUEQ5bGwrUGdIMGkvSUc0dmRRVlI0QkJINjM1YU14bVF5NFhSSzNXNUtYRnBhUm5Cd01DcVY2cHdlYzZialEzQlN0V3M3UlpzMlUxc3FNSERSMDRRYW03ZWpiNzhVRElIdTZKWW1nTEJoL2RIMUhFeGdVQTA1WDY3QmpKR2syMlpqNkpGQVlGdzROYnZTY2NSY2hMNXNENlhIVFF4OCtwK0U5L0FGUk1LbnpFQlZlcEM4OUEzVUZ0WVNQSElzUVhHUkhYTG1sNjFiU2RYeGZIeVRVaEZyQ3pFWGxPQnpRU282THpCbkhhQm8weWJLRHVjUWZjdWpKSTVONkZSN09kMFl5cmR2Sm5UMlh6RDJqVURRQmhBNW9pOFZod3NKR1JoUHhmcFAwSTJkaStQZ0pxcktmRWg1N2duOEEzUWdlQkYxMlV4c1I3ZVR2KzRIVEZWMndzYU93ejhxQkFRdm9pK2JnVDE3Si9scmY4RHFDTUE0WVFRNmI5ZFRxNDBkVEVpVVFQWGg0MWpNV3NJSDl3YU5IejFuVEtMdTU4MFViTnlLMWFvbFl1eDRmTU44TVF3WWdhK1lUKzQzbTlHTm1VMU1TaStDaGc3RnExTlpKQkkrTVExYjFpSHE4L0xSeFNWakNOTGhlOEU0Zk9RQ1RxMWFqODBRei9Cbkg4YmczYmtxYlJpZWhsZkJ6K1QvbkVYQy9jOFNrK3dTMUVHakw4RkhLQ0l2L1R1cXNvcnh1MkEwWWYxaU9pY2k5Z29uYW13L2FqSU9ZUzZzeG45NENvM01aQUhKSTlDN0RUdkJONXl3UVFtSWhraGlMeGxCeFpZMUZHNzdDWWNZVE9UWTBYZ0hORnVBZXIwKzY3bm5uanVCcTkrb0hYQUk0QUNjZ0NRSW9peXFSRmtRQk5SZU9sU1NFNm5CZ3RvUWlLRFQ2VVJQN2pXSHcvNk5JQWlUL3FpYXpmbk94M2FtNHp2YnlIMzlkckpOa3hqL3dPVi9tTFUvY3YrbG1GS2VaT2pjRkVYRi94K0F3K0hZb3RGb242V1pvNjFlRUFRVFlCVUV3U1lJelJ4dFdxMkxvODNMeThYUkpyb1RjcEZsV1pnOWU1WktFSVFSeXBRcThBcUx3eWNpNkE5MVQ3cVlSTHhERkovdy80elhXSzBlR2hNVDB4dzRhTmxNV1d4MG43bVNkUnQvWEtscmFzODBqM2ZmZlhjWW9QVERVMERFN1B1SitJUGRVOXlkTHlvTCs3OEZuMlhMUHU0NWF0VG9ZelQzUUJEZGFSK05wVldDTE11eUxEZm40MHFTMUt5eEFlaDB1cUhLWENwUW9PQjhRZS9ldlh1NWhacG4ya2VqWUtPbHh1YnExU0pKVXN2Q1VwVktwVGdmemlMQ3drSzdGVGdBTUJnTStQbjVLcE9uUUFIZzcrL2ZwNVVaS25yOENLMDBOeVRKUldtazlxQXBFZ1JCdUVDWnlyTXAyTUs2Zll6QllGQW1Ub0VDTnpRYVRSSnRmV3lOeGZCTlRCK2VSZkdlR2hzblRod1BBeEs3ZXNIcTJscHlLK3B4bkM0bno5bTJxYXpWYkNhM3JCcXpRMVpXVElFQ0JaMUNFSVNFRjE1NDNxZWxZSk5ibTZOQ2N6NnVSL0FBRUl4R1k1ZUszcEhxdWV1VkZleTFhd24zY2xKbzEvUHY2NmN4SWt3UFdIbnVvMi81T3F1Y1VpbUFMVTlkUmJUN3NQZFhydVNOekRwNkJIaVJWMlZod1JXWGNPdUFNR1hsRkNoUTBDRW1UWnBrQkNwb0lweEVGQVFFRDgwTmFQYTF5YktFdXRGRzFXaTBYUk5zb29ZRnMyYVMxTU9WMXI3eXUxVXMybkNRMWZPR0F5b21qN3lRV3llYW1mam1uaGFIalVnZHhUVXp3OUdLa0g5MEQ1TlhiT1B5QVZkMFV0R21RSUdDUHp1aW9xSjZBcGx1UWRhaWN4VnRvcU11NFNhNkpaMmdVb2tEdW5ZWnJ5YWhCdEF6eUI5TEU4K01taUc5b2dqV3Q4MTg3aHNWM2xSckZ4YmtoK2l3WTVXVVJWT2dRRUhIOFBIeGlmTVFhcTFiOGpYbHNyazdXQ0ZKa3RDVTVDWUl3b0J1WDlGdTRyMmRXY3hKN2R1TmcyUSsyWHFRWWNPVE1DcWtJQW9VS09nRUdvMG1vWlZRYStGamE1Mm9LOHR5VXdtWUFIU1BWRTJ5OC9vWHEzRWtwTEtnZjljTnloMC9iK1hqY2o5ZW1EUkFXVEVGQ2hSMENsRVUrM2hvYVc2aEpudWFvOUFpZ09BU2JFSnBhVWtpNE5YMVN6bjVkTlZxdG9weHZESzFQMTFWdkE1bTdPS3huMnA1NTdvMGdoVlNEd1VLRkhRTlhpdFhmaEhpSWR4RVdhWUZoNlJuQUVHV1hla2UrUGo0SkhUOUdqTHA2OWZ6V1YwSTcxeVpncjZMVXUzRThRUDhmVk1CYjl3MGhSaHZ4UVpWb0VCQjE5RzNiOTlRVHArazZ5SFVYT2FvR2hEVWFuVjhsNjlnTG1IeHBpeHFkVjZrUGV1aStkV0c5bUw3d2drQVBQbjJCNlFYMjZpek9aaXhhQWxKZzRmeDRZeEIvR2YxRGdvclJhNTUrVVAzaWZTOGQ5ODhCdXFWUlZPZ1FFSEhDQWtKRFc5cmpyYlUyanpNVVZrUUJFSHZjTmhmRmtWeC9wOWhnbjVMMmlJRkNoU2NIWmpONW1YZTNvYWx1T2lMNm9BNk40V1JCYkFMZ3VBUVJWRlNxOVd5UnFPUlJRQkJFR0tWcVZPZ1FNSDVDbzFHRStuV3lzVFRtS0tlYVIrdUx3UkJpRkdtVG9FQ0JlY3JWQ3BWOUdtRW11QWgzQUFaa0p1K1ZBU2JBZ1VLemxzSWd0Q2psY1lteUhLTGxBOTM5UUhJTW9nblRod1BCM1RLMUNsUW9PQThodTdmLzM3SnAzT056V1dPaXNIQndaSEtuQ2xRb09COHg4Q0JBLzA4QkZtYmRJOUdvU2JMTXFLWGwxZjRtVnprVEdpTHpPWUdjc3VxTWRuL1BMUkZzdVJBa3BTaVdBVUtmaTBpSWlMOFRxT3R0ZjVCclZLcHVpZll6cEMyNktPdlZ2TG1VUlBodmxvS0swM2NPR01xQ3dmOXdaWEZ3azBzVDc0ZVZZOElaSnNGcjdnVWhyLzRFaEc5T3k5Qk0rMyttZ1BiSFl5OCswcGxSeXRRQVBqNys3ZlcyRTVuaWdxaUtJcWgzVHE3bTdabyt3UHpXSG4zZFR6UTM0dEZHdzY2djNUUkZxMWFjQkd0eWEydm5EcWQ3UTlkeDhvN3JpTDkycUc4K3MxUFZQd1pWc01ya1VsN2RqUDc0SDc2RG5Hdy9mLytYNHV2SFRWbDFPWVhJN1hROGlUc3hkbVVIdndGeWRFOWpVOEdjRmlveThuQmJwUGM1M045WjZzcW83NjBwczB4OXBveWFrL2w0N0FwbXFXQzh4ZmUzdDUrcHhGcVRkVGdqYVZWYWxFVXUwbUo1a1ZTaitheTBwNUIvbGhLV3RJV1VaUFQ1aWk5UjBkWUNWQ3J4QTRiN1A3eG9DWnNlQXFXelVkeEFpb3NISHY2TGc1dnlNTS9WRU50YlJBVFBsdENRR0FkTytmZlJzV0pIQnJLSk5iTjNRVUJTVXg0OTBtOEtDUzk3K1VNMzdPVFVBTlVmcm1ZYmVzTlhQYkdYMTBLNHBMN09iQlRRc3plaFZQampkVS9tWm1mL0pPOU42VlNJUXhCTmxYVGNEU0RpTCsveFlpYnh3S1EvY0pDOW4yVFMyQnNFTFcvbEhQaHFyV0VOKzBJQy92L3ZnRDFSWGVSTkYzcDg2UGc5NFZXcSszVXgrYlcyRkFMZ25EbXpTTWJhWXNtWGRhbFAvOXB6eTVlM1pYTnlRb3IvNWgzS1VGL2h0V1E2aWpldElscVN3MG5YL3VDdUd1ZVFnVlViM2lQakIwYUx0dTRCaTgxNUx3OG4zMXZyV0xDdzVkejRic3JxUG51VlRaL1pXWEsyL2QzNjNKVk80OXl5YVoxQkFUcmNGb3NUYXV1NlRlVkNRL093TEo3R1YvZXU0emhONDlGUlNsSGwvekloVnN5TUlZRERodk9GbVc4RWpXSDl1RTFzRnA1cWhUOC9xcUJXdTFIeDc0MW9WbU5nTUF6ZTJDN1QxczBzRzgvbmpMR3NHM3ZIbDdkdUorTGJoM1BINzUxaVZSTDhhcHZFWXFQVWFNZnl1UWJKZ0pRdG4wN0drUXlGLzhEQ2JEblZsQmxQUVQ4dXM3ckFSTm5FaERzeXQ1UjZacXplTUtHREFaQUZ4Mk5XRjJOSFZBUlJNU0lJSGJmZGdNOUo0MGxJdTFpSWdaRWV5ci9qRnVmb1R4UkNzNExxRlNxZGt4UkdSQ0UxZzRaRWZEci9pWE9qTGJJWVBDaGQyUVlOMDBkalYvK01YNnMrQk5FUjlWUkpQLzdKY1orc29wZWtjZlk5VnA2MCtRYmtsS0ptanFWSGxPbjBtdmhJNHg5L0phdVNNcm01V3NuSkszMWFaOVZRRkM3VjBsc2FSNFBlWGNkby83dkZyVDJBclpmT1prVGU4dVVKMGpCZVFsUkZIMW80MXRyV1ZMbC9neFJFSVJ1Q3JZem9TMlNLS294TmYxV1dWcE1ua05Mb083UDVHVVQ2WGYvQTVRc2VaN0tHb25RVVNPcHpUeUJmM0lLWVVOVENCczZHRU5Rcy82cTlqVmdMNitrcGVqeXhjdW5sb2JDQnBmV3QyL1ByeHlURFp0SkluajRXUHJmOHpnSlk4T296U3BwOGYzaEorN20yQVpGYTFQdyswTVFCSjlPVE5BbVhqWTFkTk1hUENQYW9yNjhzdlF6dHB0MWhPcEZjaXRNekpsK0VVUC9aQzAwTmJGcDlCMy9MQWYvazg2NEIyNGxhY2ZkcEkrYlRFQ3ZjT3B6ZnlIcWpwZEl1V3FFUzd0Tm1Vb2tOL0xOdUlsb0lsSzQ2TFBuME9GTDcrc25zWFBXeFJ4TENFZHJFTUhuMTR5b2xDMFhYNDdUbUlpV1NtcnI0MG1iM04vamV6dkYzMzZPTm13S2ZTWU9VcDRzQmIrM1lEUFFzdWk5VGFvSHpSSk9LZ0NNdjhYQVRBMG1LaXdPZ24xOU1XaCtIN0xKODQyMnlHbXFvYUdxRG4yWUViVzJhM05pTFN0RTBnV2c5L1UrQ3lPUU1CY1g0MENEVDBUb255eFNyZUIvREVXQ0lDNEVUTGlvaTJxQmVrRVF6SUJWRUFTN0lBaE9sVW9scVlIZmpPclI0RzNBNEsyc2ppZFVCbjk4RGY3ZE9zWXI5R3kraDBUMEVVWmxJUlQ4TDBEWGdSbnFBVmZ3UUdGT1ZLQkF3ZjhDV3N1cWRnME1XVVlSYkFvVUtQaWZFbXh0QWdidENiaEcvbkFGQ2hRb09OK2g2a0JqYXlIZ0dzc1NGSndESERwMEdKdk5wa3lFQWdWbkIySkhXbHA3ZjZoQWdRSUYvd3NRT3ZrZFFCQ0JibEk2T05tWmNaaEZLemR3Ny9KTnZMOHZsMmFkUkNZckw0OVB0KzNsMVkwSHFXM3ZjSWVKOXpmK3hKYjhHbVdKT29LdG1NeC9QVWZlL3R6ZjVmSy92SFF2NlpkTVl2bm9HMmc0aDljeFo2U1RQdjFTVmc0Znd0SHY4My9YS2EvUE9vU3BSdEd3ejJOMFdWYUpnTE43cDY3anE3MkY5SW1ONGRMK1VXemVzb0hIZjhocDNLYTh0MzRQUjRwTGVPdUh6SFlGMitvdDIzamp4d3kyRk5RcXk5VFJRN2JqYXc1OXNKVDkvL255ZDdsK3dqMHZNdTJUNXhHcktqbVhoVy82UWRPWTl1MHFlaVY1NDdEK3ZyUkpKNTVaUVBiT1ltWHpuYjl3bmtaYmE2TzFxUUVib09tNmxSdkE0aHNuTmYwYTJGREdYL2Jud3RoWXdKdG5icDRKTlRsOGMzQm5tME5yaTdOWld1akQ3RGp2YzZvRi9CR1F0M29OdmU1OWlQeVhQNmJXOWpmOHVoQzdydDZaenZIbDY3R2pJV0RrTlBwZk9iNXB4VTFIdG5OczJUZVlheVg4TDd5WWZsZFBSSVdGdkdVZlVyVDNLSGE3bXVCSnMrZ3pQYlhUSk4ySzdhdklYZjBqRFZVbWZBZU5vZTlOczJsa3BhcmJ1NDdTbWlDOFNuNGlkK3RSZk1aY3dlQzVhV2Y4Z2k3NWJpblphM2VCWHhUeHR5d2tOTmJGMlNBM2xITHM3WGNvUDFHRWx6R0dYamNzSkRqYXhRSm9PcnlWSXgrdXhHb1Y4UmswbHY2M3pPaHdnMXV6ZG5GaytRWktqcFlqcm5nVHh4NC8vRVplU3E5eFNVM25PN2IwSzh4V0xWRnpieVEydFE4QWhWKzhnMndjUk9sM0t6RmJmVW44MjkyRUdGMWpzT2JzSjNQSko1aXFyUmppaDlCMzRRM29kUjNmRTVnNDhmcFNncWRjU002U3BWZ2N2dlQ1Mi8wRUd3M0tBK0cyWTdxanNmMHEzZnRJYVRtSnhwQXU3RkViejMzN013dW5Ec05MU1cvdlpLNnF5RitYVGVUVU9VUW1scERmQlMxQ0x0bkpodm5QRXpyeld2cGNkd1dDdWFaSjA3SWNXY09hZVErZ0czb3hmVzZhZzFEVzZENm9vNmJRVHRUczYrZzlieHBGcjl6T3dUWEhPcjFXWFZZdWdXblQ2YmZnZXFUTXovamhtWSthdjl1M25yMzMvWTFUMlY3RXpKcUoybEYzeGhwZjlZYlgrT0haZEtMbTNreGtuSk10Vjk1RXJmdU5lUHpaMjhrdkRLVHY3UXVKSE5JRFM2VzdGdG1Xei9mejdzSTdiUTU5YjVtTEhoT09UcTZqRG9vaUxDME43eEFEUG9NdUpDd3REZis0OE9hNXUvNVJmTkpta25ERk9JN2VlejNaQjZzQUtQcm1YWFkrOXlHaGw4d21RSmZOMWdkZmM1K3hnWjAzWFkreno4WDBtMzhqL2dFU1Zudm45d1Ftc2w1N2tSLy83elg4UjE1TTlLZ0VMT1YxeXZOd2VzRW10L3EzaGNabTVneXBpMDVsSCtiTncwN2V1Yk5mcDMvNzg4NGRWUGRJWm15b2xuM0tBblVJYThaR0tueFNDVGRxa2RMR2NHVHRPdnFQdWI1aldkaFFpY09oUjIrTUppUStncERrNXU5eWxyNU42SFdQMG4rR1MzTUtTUjdtL2lhVUFYKzlpWXI5K3pGWDIvQWZGRWY1cm9Nd3BVK0gxNHE5L25acWoreW5wcUFjLzZUK0hGdXhHN2kyK1cyWmtNYUloMjlEQUtKL3hUemtMbDlCM08wdjBXUEVCVEJpRUlVckI1SDNVejREMHFLeFZsYWlpUXJCTDc0dklRT1NQTForTlZhVENsMVlCSUdENGdnZU5LelQ2NmdDalJoVGpaU0U2TkVrRHNHWTJyTjU3dDcvRDJFM1BFU3ZzY09RZ2I2emg1R2R2b200Z1M3SzlyanI3aVI2Ukgva3FLdkp1UHdEYklBV0s1WnFLNEZoWVFRTVNDSjRZSEtYN3NuMWlKcnBjKzl6eEE4TlZoNkV0ckIwUjJNN0k2dXdvaWlIQlo4ZllORU5VMGswZEJKY3RWWHdqNDNaREEzWHNQN3dTVTdXMk1rckxPWlFoVWxacW5aUXVHNHRHcjJGbzYrL1FVVmVQV1ZyMTJMdDdPR01tOFRJZThaejRNNDVMQitjeXJaL2ZkcmtrREFYRk9BYkY5ZldZVkdSeWRxME5ESlhyS2ZxMEdFYWl1dVJISjN0SFJPN3I3K1lINS85TDVYN0QxT1hYWVJrczdWNFpmb21KcDZWbWxOTFpTWGVJV0ZONzJCOVdDQ1cwbklBK2p6d0FsNTVYL1B0aUtGOGZjbTFGSjV3RTgzN0pESHlwZHM0K2VRQ3ZoaVF6S1lIWHNicU9QTXhtRW9LS2Z2eVRiYmNjQ1BmMzNBanYveFlqazl3czJub0ZlaGlJUkIwV2dTSHcrM2REbVRZcTg5US9zN0RmREV3bVhXM1BrNmRTZXIwbmx3TEdZSnZ2Q0xVMnJWS1pObmNqbmJXbmtFZ3EzRVZsSFlMZFJVRjNQTFJOdTZjTzROeEVWMG8vcFJWakIwWVMyN3VLWEtCN0hvNzl0SlNUbFRFa2hTcytBOWF2NVR5MTI4bGZNSzlxQXhhVkgxSEVwRCtUd29PbXVnMXNLTzVVdFB6bGdmcGVjdUQyRW96V0RkdU5rWFh6aVhhQ1BvZVVaUmtad010TmV2S2pTdHdETG1Cc2YrNjNXWGVQYkdMVXkya3BSclI0V2l4YytUOEhadzRITUdWZTE1R0M5UnVlSTNET3pKZGRIK05iOHN6U0NJUzFDcWtSbnZORFYxUUVBM2xwVUJQd0lHNXRBcS9NSmZid3l2MkFpNTg2MlBBUWRiaUJleC9hd1hHRnhjQUVIN1pRc0l2VzRpekpwOHQweWFRcy9jRytnenZvbEhTcXIrRUlkeEk1T2g3R0hIYm1HN2RUK0NZV1V3WU13dlpVc1dPZVpNNS90MGNVbVluZFhoUGRESi90b3BpYkE0dmZNSUQvNnlDemVRaHpEcjBjS2hsV2E0VmhHNjhYKzExM0xra0hWMTBIeW9Mc2xsYUFDcDlBUE9TWGVyNzlnT0hPRmxSanRWcDVzdnRHU1NFUnpJMUlaVDdab3h2T3NVckgrZFRsVENJeXhOREZUbldXb3ZLLzVIQzNKNU12ZSsycG9DQmZQQXI4amQrVDYrQmw1eGVLYzdhenBGTkJVU21Ec0NSdnhPck5nYWZBTGZwZU0xOERzOTdpc3g0SFdGeHZwUituMEhjWGJmZ0hkV0RoajNwRlB3OEdvcDNjZXpiZmVpbmUxekRweGVoc1VWa3ZQQWhFWDBpTVU2ZGpDNHdDbS96UWJMVzdTRFlZT0x3cXg4RFEzNzFmWWVtam1EWGYxL0JJRTNDZjlDRmhNU0YwblBPTERZOCtTL0M0eDVDeWxwTmZsRWlGMS9vTXRteVAzZ1ZvZWN3ZkVNMVZKekl3eWY1S3JjcGNZZ0R5L1lRUGlZRm9TYUxCcE12dmwxMHZ2djFUdURZOG5meEZjZmlIVGVJME40UnhONndnTU0zUE1iUnlDY0o2ZWxIOWQ0ZkVIdlBvTmVvdUE3T1ZNckJmNjBnYU54SXRGUlNYMm9uT01ibHMrdm9uanJETDA5ZVQyYnBTR1o5OXVTZlZiRFZkNkN0dFJCMnFpZWVlT0pLUVJBU3UrN1l0bE5sVXhGdTBHQ3hPN0RZSFZoRkxjT2pYUjBNanVXZUlzK3FabWhzS0RnY3FQVytKSVg1dGpsTmRIZzRzWDYvZmJjT3Npd0FBQ0FBU1VSQlZBTjZrOG1FMHluaDU5YzlmczNTMGpLQ2c0TlJxVlRuOUJoclFTSHF2c1Bva1J6ZjlKbDNsQkdIWFVOby85Z09WQjRuVmJ1MlU3UnBNN1dsQWdNWFBVMm8wV1VtcVVNVGlCazNnSksxNlJUL2ZBaDk3MVRDQjhiaTFYTXdnVUUxNUh5NUJqTkdrbTZiamFGSEFvRnhqUjBaTlJndnZnanpzUXdzSlNZQ2hxYWc5UTdGbUJwTHdjb3ZxY3F0cDk5ZHQrTWRIa1Y0Y3JQNTZSVVo3M0dPcnNFM2VRdytZaVcxV2Jtb0l4UHhqd3hBMzJzWW9VWWJwNzVLeDFRZnhKQi9MaUlvMUVWRzQ2ak1wV2pUWmtwKzNJY2hkUzdKdDE2Q1NnUkVnZHFNSFJSdDJVVGxMMVVrUHZnMDBmM0N1cVpsRFJ1UDJseE0zUzg1NEJkRllHd1k2ckFFWXNiMHBuaE5Pc1UvSFVEd2pjVTRiamc2Z3l2TzZ0c3ZCVU9nZXg5ckFnZ2I1bUtVTm1jZG9HalRKc29PNXhCOXk2TWtqazBBNlBDZVhOQVNOR3dvV25YN1l6VDBIa3pvZ05nLzUwdmY2VHo2OU5QLytCbFhFTUhhK0s4Z0NIYkFLUWlDSkFpQ0xBaUNMRGlkam85RVViem16ekk1dnlVZjI3bmljRk9nNEUvcHBMRllWdXIxM3YrbExSOWJBeTM0MkVSSmxHVzVVcGt5QlFvVW5POXdPQnkxSGlhbmZIcGZtNEFveTNLRk1tVUtGQ2c0MzJHMVdodkxsVm9MdERZQ1RuUTZuZVhLbENsUW9PQjhSME5EUXgwdGszSlBHeDBWN1haN2lUSmw1d1poWWFIZENod29VS0RnOUtpdXJqNmRLZG9rN0JvelBFU0x4VktxVE5tNUVteGhpbUJUb09Bc29haW9xSzYxUUJPRU5tVlZzaUNBV0ZSVVhIUkcwck8ybHR5S2VoeW5JMlJ3dHRJUUpSbUhVMnI2a2FRL3o0TEk3bngwdVIzV2xkTVZ1elY5TGlrYldvRUNnSXlNZy9YdVIwTnFGbTVDTzQrUGdIcnc0TUdsa3VTMDRPb0Ewem1rZXU1NlpRVjc3VnJDdlp3VTJ2WDgrL3BwakFqVEExYWUrK2hidnM0cXAxUUtZTXRUVnpYVkNuNjFialdQN0NqQXo1MmdNL3JDVWJ4d1VlSWZmelZxOXZERnBIOHo0K2NuU0I5d0Q1TU9yMnBxNUpxLzVCNU8xa3lnbi9FQUI0NGtNUEdwdVUySGJadVFST3lIaHlpOEo1blFwM2ZUcTU5YTJka0svc3l3M0gvLy9RMGRtS0l0L0cyTlQ4c3BvR3RTUnRTd1lOWk1rbnE0MHRwWGZyZUtSUnNPc25yZWNFREY1SkVYY3V0RU14UGZiTnVsZk9xRUNidzRQa0ZaSWdVS0ZIVFA2cEhsdkZZQ1RQTFEzRnJxYTRLQTZEcEc3Z1pOcTFlVFVBUG9HZVNQcGFuR1Q4MlFYbEVFNjl2WExxcXJxOWh5Sklmc0dzdWZhRWtFVkY1ZWdJaEtyMjlSSEM2cXZCQzFJb0pLaGRncTFWelU2MEVFMFV2djRqbFdvT0JQREtmVFdkQktxTFh5dFFteUlBZzBCZy9VZ0N4SlVzNFpPYm50SnQ3Ym1jV2NTWmQxK3FjYUx4MzJrbkpXN1M5aDYvSjFUSjh5aGNjOTZHSCtzUEMvZ011M0xnSGcwdDNMVzN4bHZIRXhybGJGMDJoTnhUanF1MTBBOVBoNGg3S3JGZnpwWWJQWml0clIyTnBOK1JBRVFWWURzdFBwek82MllKUHN2UDdGYWh3SnFTem8zem5OeXJRSmFVeHovMzlaN21FbXZMZWQ2eS9vU2F4R1dUUUZDaFIwalByNitxSjJUTkRUK3RsRXR6UTgyVTNGa0U5WHJXYXJHTWNyVS90M3U5VlZhSFFrVVk1NlRpbjg0QW9VS09nQ1NrdEx5K2lDajYzUkhCVUJ1YXFxS3F2cmw1QkpYNytleitwQ2VPZktGUFJpMTQ2cHJEYzMvWloxN0NRRittRDYrQ2dMcGtDQmdzNlJtWmxaNFNITXBFNU1VUVJCRUx3QnJTUTVpd0d2VHE5Z0xtYjBvaStvMVhuaEpib2NkZHJRWG14Zk9BR0FKOS8rZ1BSaUcxVm1CLzU2TDVJR0QrUERHUU80NzVYMzJPUHd3Vjhqa1ZjcmNlL3NxY3pyRS9LYlQ5QnZ5ZTZoUUlHQ3N3S3JJSWpYNG1walVJK0wyYU5PRUlSNjkyYzJRUkFjb2lnNlZTcFIxbWcwc2lBSWd0NHQyTFlBeWVkdWJCSmwxZldZblFMaEFiNTQvVTRKK1lwZ1U2RGdmd3VTSkdXb1ZPcEZ1Tm9ZZUFvMms0ZGdjN29FbTByV2FEUnlZNDZCTEVsU3BpaUs1MUN3aVlRRytDbXJwRUNCZ203QlpyTmwwZGEzMXRySEpudVlvWWlDSU1pQTdIQTRNcFVwVktCQXdmbUd1cnE2M0hZRVdwT1ByWFVPVzFQd0FKRE5adk5oWlFvVktGQnd2dUhVcVZNRnJRU2FrOU9rZkRRS3VjYVlwbno4K0FsRnNDbFFvT0M4dzlxMTYwcmNnc3ZwSWRUYXBIczBtYUdpNEtvOEFPVFUxTlJ5U1hLZUFIci9wcU4rNTlLMm4xMXdOYVRNVTFaVWdZSS9PV1JaL3VYUlJ4ODF0elpEM1hSRm5wcWFoM0FUbTRyZ1pVQ1NKR212S0lxOS84Z1Q1VldUaTZvd0U2cTcxNVRXNzlRcFJNY0pVQ3NzR3dvVS9GYXcyZXlIMnpWRFpTUUVXUUpCUnBaQmxtUkJsaEdjSURqa3B1QUJnR3kzMi9kMWZpa25Pek1PczJqbEJ1NWR2b24zOStWaWE1YXZaT1hsOGVtMnZieTY4U0MxclczbC9CeWUrWElqOTYzWXpFZVpoWCs2UlNyZnQ1bXhUMzdSNHJPVDI3NWwrcjlXdC92M1A2NVp3ZWpaZDVFODYxSDIxbmg4NGFobDBaUC9ZTkFWZDNQSjRxOS8yNXR3RkhQdFRROHk5SXFGWFB2R0QxMCs3SVVuSCtHL2U2dTZkYWxsLzNtTjBkZituZWdaejNBMjJWQy9XN242LzdOMzduRlIxZm4vZjU0ekY0WmhHRVlZWUVSRVJGSkRSRU15SkRVemM4M016Rnh6eTh5MXNqSXoxM1ZiYTExei9mVTF0MjI3bUd0bWRqTXoxOHpNVE0xWU5EUFh5c3pJQzVrUklSSWlJZ3pETU16bGZINS96SVVad0d2cVZzNzc4VGdQWmM3bDh6bm44em12ODc2K1BwelI3SE0zc0t1b2xCTXRLTC9talpmSkdUV1pubVAvU2NWNWUvQXU5dTByeHRhTW4yLzVpMDh6NS8xdnoraEtCYXRmcCsrNDZhUmQrd2QyMjg1aEZ4VWJVNmJQNDREOTNKRUlIcmZhRHJaaWhnYjcyUENUVFVwSXlGSlQ4QUIvWk5ScXRlNDZkZWZyV0xPcm5DNnBIYmdob3gyYnQrUXphMnVKYjJjREwzLzRCZnNyanJCbzY3NFFZRHRXZG9EZnZicU51TGJKREwwMEdkbmx2dWlBemUyb3AvUm9iY2h2c1IweXVPdnFMcTBjWGNmc2Y3N0h6UGxQc252Vi81RWQwN1NuL0xPUGVMazhnWjJybjJYOXd6ZGUySnRRVzFqMnl0K1pOeXFMR3J2cjlFSDlhQ1ZXdStlTW1ycjFuc2xzV3pnSmRhMlZjL0dxNUc5NGo0SUR4eml3NXh1cTdjZVovL0phcWs1bkd0cExHWDcvaTdTNk9JaTltQmt2RnJKczZiUHNYdlpITE9mdHdkY3ljZEpjaXBvUjQxaXJxNm11ZDUzUmxRYU92SjF0Uy85Q2txdnV4RVN4WnlHRm05YXlyMDBXbmZYbmpvNm1xUGpRRDgyMHRXQWZtNUQ4NE9ZRE9GK3FoMUFIMjZtalI5K3lhL1BtQWh0dzRtSW4yY1RqNDY4Ti9ObkdmcFQ3ZHY4QS9WTUJQZjgzWVFUVWxyRDI2MDlEVGx1eGJSZlhEUnJJdmJsSkZ4V1lPWTRmNXNtWDExSmNyMlZvdWk3a0M3enN0YmNvc2lwWUxzME9PV2ZudHYrdzVzdHZLYXgyczNybFcyeFRSVEx4enB0SmliU3orTVYzMkxYM2F4eFZHdVk4dDR6WWpwbE1HOWJ6WjNHdmJsc1ZpMWZtcy92N0NoU2RrZEUzM2NEZ2pQZ21jQ3Y5aG9mbXZJbE5uOENVMzQrZ2E1eTMwTVYrL0RBTDN0aklubklibWJsOW1UcThGNmRLZzFZYWpyTm8yWHZzK1A0WXNZbUpqQnM5Z3V5MitwTy8wQU91WXRuS3RiejhTU0ZibERVOE5QNG16S2Z3TEd6NVlCMzVYeGRqclQvTUU4OHRRNC9NcldQSGtORkdKdi85dFd6Wjh5MWxqZ2FXdlBRbWVsMGMwKzYrRHRNSnI5YkkwdGMzVWVPcTVxQTlnYUdkbkt6OC9CalQ3NytkakRnTnV6Ly9oQlVGZXlpdmJTRHQwaDVNSFhNMUpnM3MvdTltVnUwOFNJbTlua1dMbG1IUlNBeTk0VWJ5VWcwK0JiNktKeGNzWnM5UkdELzJ0d3k0cE0xUEdFUTd5OTlZdzZadmptRHBlQWxUYnh1S3hRZFVaVVc3ZVdMRlJ5aHRraG1lRlk4anRoUERlN1FMV0hLTC9sM0FyVk9mRHJIdVZpeC9CMk5xZTlaLzhDbTZ4STVNLy8zMVdIeDFtRFVsKzFtMjMwbU85a2VXRkJTUjBPa3laazY0Q2owdTFxOWV4Nm92ZnJDOXNXSHJrV1phbWdkUWhOY2M5Vk9EQzBsQ0tJcUNyY0dEcmRHRjdITzZDVUQ1NktPUEZDSEVqak41RHZzcnEraWNkS3JTS0JkN1MydUpFY2U1Yy9GYjNQcnlCajc0b2VaaThCQXdmZHBzRHVxN01HbFlOc3ZleVEvYXB5STdweWRkdFVkWmxCK2FRcGpjSVowaHVkMHdTUkhrNVdZekpLODdSZzJBaHQ2OUx5T3ZjeUlHY3lKRHJzeW0vNlZ0VDlvRDY2RUR6Rm40SnJPYmJadUt6djNpWk03cUNxcTFDWXkvWlRoais3Vm42b04vWVh0Vms1YTI1SjB0REJvMmhOeW9IeG55aHhleEF6UWNaZFNFUjZtTTZjeVVXNitoWk5QclRQLzMxNmRzYThuOHAxaC9KSnBwZDl6STBPNEpWQjF2T09VNXhRZjJzK09IT3BMajQwblFPZGoweWQ0V3BsMXpTZXQ4S1VONlg0Sk9ZNlQvbGRrTXViSW5DVHJ2aTVuZTlWS0c1S1NqMHhrWWVHVTJneS92Y2dvYTZrYVd2dkltY3FmZWxIKzhuTVY3dGVSR1ZmREV1MThCY0xDa2dwd3I4NWcyZGdnY0tHRE1zNXNBU0VycHhKQXJNNGpWYU9qZE81c2hWMTVHU3BzbTZGKzk3aitrOWVyTHNJNkMwWDk1aVovQ0xmSHFNLzlnZm1FOUUyOGRSdXlQWHpENHJ5dTg2bEZ0TVVNbnpTY2w5eXBHOXpJeWJmWjhWbjhaWk5EYmZtRFRnU2o2ZG9zT0FiWlZiNzdCak5jL1ovU282NGl0M01uSXVVMnVrNW9maXBqOTVIUE0vMjhOSTYrL2lsU2RDd2RRc0h3SlU5NzlqdHQrZTkwWFRwZGJhY1VFOVp1aGlpS0VrUERxYlkxdUJZMUdUWXhlRzRpS0JzRE43WGJ2MEdnMGcwN25JWlIrdjVmbjkzcDRjZktscC9vTVlITzVXYi92Q00rUEdZYXQvQnNtdkxhUmpnK040ZGRNRHE1VTdHWEY5M0hzZVdrZ0ZobG0zdDZmVVIvNEg3ZE1ScmNNNU1PNzRmdlE4eXp0TzJCcHI4T2dpU0NuVndhWkFhMUNRODhlR2FqTGQyTW9qNlJ2ZHNhcExVZU5sZ1J6U3gzQ29EbjNOVzM2bEV5bUQ2L2hzMisrd3laTVpDUTQrR3hmTlhuOXZWcmJtTnQreStEc1M2RG5IYno4MW4xc09UeUoxRDBGN0V2c3c2clJWeUFEYys0Y1NzYlRXNWwvUy9lVHRsVjkzSXErYlF4cHFSM28yU1h0dFBvbkd5ek1lK1ErWHA3N0RFTm0zQWRGM3lPZndtcEs2ZGlKbERnM1dtMDB1ZGtaSWFabWFxZExTSTJwUnhjUlRWNTJ4a2swdGVEdldSeUQrbDJLODBNelNxL0xHT0NwWjlVWDNvL01xTi9lUlBHM0J5bjZzWmJNcnFuTVgxY0VEQ2FoWFFvSjdmUVlOVnF5c3pQSWFhYVlEaHgySFNQN1pNRGwwY3hlT0k4U0oyU2NWZVZmRFV2WDcyZm1xNCtRbDZJaHI5TTRsdlNmeTI3N3JjZ2ZmNEl6YXhEVGgzaXRnd2xYZjBoaDhFZnR4ekxLWXhKSWFVVUR2dmZPMituZlBZYitLV05ZK0p0RkZEOTZFMm0rNCt5R05CYlBIT00xRWZNQUZKYS8vekZUSmovSFpSMjFlMW94UXoyQVI1Szg0Q1lFSUNIOGE3cW8xU29pSXlKUSszSS9oUGNnSWVycTZqNkxqWTA5NVNNNDltTUo5N3oxRlhQdUdFSG5xRlBaMUdyMGFoalcrekpTalpGZ3pLSlAxSFkrSzdmL3FvSE5XVk9MclUwY1p0L2pzY1RHQXhkMlVUQTVRb2ZGM05JME1lcFBIZDFkdHVCSlpxN2REOGc4OGR4OFJuZUpQUG1IYmxjK2cyYSt5NUJCdVNSRXFhbXllM0M0bS93L3lXYmZ2SktOV0dKY1ZOWTBJbGRXWWozNERTTWZQQlE0cm5mSFMxSGdwSFJZOTk1L1A0OHNXRUgyc05mUkpYWmsvditieXNDT0p5L1pTK3ZVQVlBaE4xOVBFbURzMnZIQ1R3cFpqVm9HV2FWQzFraG9aUlgyUmdFME1IUEtJMndScVF6cVpvSGpWVGhjcHhlQk54dDk5NjFXb1ZhNVVjUloreEtvckRWZ01mdElFaU5OSkVUWktEOE82dG9hTE9ZbVd2K0UySmpRanppZ3lGSXJGOVdRbE9BN05pYVdCTWxLcFIzU2ZGMU83cGpjek8vVlNFVlZJME1zSmc2VWZGdmNHcWdGKzllRWQwT1NaYlFvMURjNHNOa2RoUGpZQUdYU3BQdDNyRmp4WmkwUWM2TDdyenQybUR1WGJXUHltQnU1eXFJL2pTZW1vV09pQVpmYkhYZ01MbytFUnY1MUwwMm5qVFZoUEg2TUtnVXNNbFJVSGIzd1ByN3FvNnovNlBNV3p2Y2hwbFF5MjBhZjlOeXhrNmN6ZHZJSjdrMmp4dUVLRFFhc2VtY0RJeWRPWmQ2SVRvQ0w0aTN2aE93dnE2b0N6S0JZcWFqVmtSUWJRWEpDQWdsWmJkajQxTmdUYURncVpMZW5SVVRTMUw0ekMvOCtDL0N3YlA0L21QbmFGcmJQSG41YXo2UnJ0elBNYUpJbFpNVnp4Z0VNbTdXV0tyc2cxWElhdXR5UGUxbjRUUnlsSHp5SUFTaloralpQZkZFU2RJQUUwcG12N3VhMDJ5Zy8za2h5dXppYWtjK2pWU2s0Z29kUWJTQWh4a1pGbFF0U05HQ3ZvYkxlUUZJYjBKbmpLZDNXRlBNdHF6Z0tRZDhSWFdJOENjY3JLVmNnVFE1MVE1VWZxWUVVRTlSV1V5bU1tSU1nUTI0QmhoRll6QkdVVjlUVVB2cjRNMlVuQUxXUWtpclpWM0VRcWRQU1Jxc1JHaFZlalMxSXhNcVZLOTNMbDcveHNTekx3MXAzbDlVeCthWDMwU1Yzb2Zydzk3eCtHRlNSSm03dDZhWDUvdVNyUFJRZnE2TFIwOEE3bnhTU250aVc2OUxqdWJIWHBVd28rQzg5alRuVUh6N0k1NHFGdjdhTCtGVURtNXlRd2EzcHg1anh3bVltWDJIaXNUYytob1MrWHNDcFBjcTJmWWNwUGZBajlxTnE4dis3RzFOQ01qbWR6aTJWazZsVGR4Yi9yZnM1djdlczd0MG9ldWtkRm1mcFNVMXV6K0FlSFVocGw4Q0tyVnZZMlZWaTM4Y2ZzUDRISlVRalgvbkcyd3hPR1UzbHArOVQycUVmZmR2SzZFMERTVnYwQ05OZWE4ZXRWNlJRV1ZMTUhuc2JIaHFaNHowcHFoMEQyaDlqenZNYkdOekp6TUNCbHhPcmhsWC9YZ1h0dXRMWnJHYm45NVdrWjE1ei9nWlNuMGhYZFJrTFZueEVYdHNvY2k3UDRYUys1eHZmWE15WWRSNXM3ODA0OVJKd01mRWtPYjVqMlVkN3lORTdlT0tsRHduTmxUZVIwZDdEb3FVYnFleG1KaU1yaTdRMnA3WTNDemU5emVWemQvSHRaODhTdW94U0RQMTdSUEhVb3JjcDcyVWhMNjhQeVFZVDQ0WmV5bVBQTGlYMnp2NXNXL1VtdXY1WDAxTVBjcjkrSkQ4OWsrbXZwWkFUV2NXcm54NGhOM2h3amVrTTdsakw5cUlHMGpKQ05mdEZMeThqTS9JM2JGKzFrdVJyQjVCK1VrVlU1dGJyKzNIUDh5OTlldkQ3OG1BejFCMENic0svTXFXdlJsUW8xRHNFa2lTanVEMm8xR3ExSklSQUNDSDV0SC81NFljZlRsQ3IxYTM3MlJRWHg1MHFFcU0wT0Z4dUhDNDNqYktXM3NsZU0rT2JIMG81MUtnbUp6VWUzRzdVa2RGa0prUmpUa3lpbTc2UkRWLy93STlLSkErUDZFY25neHAydmRteWpiYmRJYW43ZVptampkWGxLSFZIMGV2MVozUmViVzB0MGRIUnlQS1poTEpWRE9pWHc0R2RPL2pQL3FQY2Njc3dPcVVra2R1NUxiYUtVbFordklkYUtab2VTVkdVVmxSaDE1ckk3aGdNYkZwNlpYY21xaFVOUHlvdWdaeU84Zjh6ME5hWlV4amMxY2dYUlQ5UXI0bWhkM29pR2QyekVPVUhlUHVqUXFJdTdjdTkxM1NrVTNwblV0cDRQMkRYWDNVNS84bmZ6QTlTSWd2K2ZDdUprU3JRUkhIemIzTDQ5c3N2V2ZmSlYxUTZ0UXpzY3hrZDR2UUJOOFkxQTNMNDhidGlTcW9hNk5HakM5RnFzTmRVc09tVFhlUi9mb0NVN0VITXZqV1hpUE8xNkkyazR6Zjl1MUY4c0pqaThtT2tYWnBCZkdUUW9HZ005T21SU212dmEzeFNDbGQxVHdreXExWDA2SkZPSkpEY3NSUEpNVnAwSmpPWFhaTEc0T3kyckZ1L2xjL0xHbmhnd2syMGl6ZlRyMXY3d0F0L1ZiOWVWSlY4ejdlSGo1S1lrazU3azlZWFhPaElla0pVWU03a1pIY2gyRHNVYmJZd29OY2xOSGNrOUwzeUN1b3JTdmp1eCtPa2RlMUdnbDZpWisvZTZLdS9aK1htTDlFa1o3TGd3WnVJMWtpZ01YTFRvQ3dPZkYxRWpiNDkvUklhT0dycXlnM2RMWUg3U2hCVkxOaFZ6MjE5T2dhQ0J5dmZmSThieG81aWUvNFdHaTBaTEhqZ0JxSTBUYzlPWnpMVE96MDBTYVpqOTU3RVdnKzk4ODcydlljQUo5QUlPSHovT2dHWEgrQlVzcXlvSkFtMVNrWlJCRTYzQjZjaUllbDBPdG50ZGt0Q0NGa0lvUkpDYUV0S3Z1K2VrcEt5N1lLOElSZTRwS3IyMjg5eGwrOGpMdTdNS2c5S1MwdEpTa3BDSGE0OENNdEZLa1hmZkVkcXAwNm9uY2U1OWZkL1pPak1weG5mUGNoajVhcGgxTDFQTWVmWjJXUVlaTURKcUJ2R01YYlJDa2FjR2YwaDcrUnZ2Mi9rSCtiOVNDZ0htMDJDZWlRYUpTU25KT0dSSkVsUnk3TFFxbVVSb2RVUUVhRVIvdUNCa0NRSjRZMHZDRUJKVGUxWXBDaWVQVUJtZURqREVwYXdBR3o5Y0EzalpwZWhTSkVNSFRXSmNkMmJ1ZUUxSmxhOU5DZkVMNWpldFJPeFo3aGdreUxFdnBGL21IZXNtUm5xcG1XNmg1QjhPV3orSUtoS2tsSEpFbXBabGdueXN3WEF6ZTEyRjZqVjZsOGRzTGtqWW5ESHBrRkM0cG1ac0xVU0lqNFZOT0ZsdGNKeWNjckVPUzh3OFF6UG1mZmFXMmZjVHIydC90TVQrTlk4U0pJWDFDUUVrb1FreTk0SXMxcUxTcU5GMWtZZ1IrZ0M2UjVJa3VSVDJyeUlhTFZhdDhUR3hrNzV0UTJPUjJmQ0pVZEJ3cG5weG8yVkxrVDhKUkNtQmc5TFdNNnJmRk82Y3graGFSNXV3Q05KVXBER0ppRkpzcEJrRlpKS2c2elJJbXQxeUZvZHFnaDlrOGJXTEo5Tk1admp0eW1LNXpEUTdyemVSZmJ2V3Y3V3RudDRkTU1TbG90UWhCRGxsMS9ldTdTWkNlcmZmSlJGVWdocnJpekxnVTJsVXFGU3lWNWdrMlZaZUR5ZVlGTlVBQjZQeC9PQlNxV2FjRjd2Sk15N0ZwYXdoTVVuRFEwTlcxdlQxb0syRUI0MldaYUZIOE84d09ZRk43azFqYzJQakhWMXR2d1RkYURHYXVXSFk3WVRzd040UXRPZkZVWEI3UW5kZnZXaVZMTmk4U0lXTFZyRSt1MUZ2N3JicXlrdll2V0s1U3hmZHlFQzZFNEtWcSttMG5FUnZOMk9LdGJuZjNiQzNmdTJiNlN3TkxUV2V2ZVdOUlJWdEY0bFdsbThrNVhMbDdObXkrNW04OVBKWndWcldiNXNHWHRLbTdoNFBpdFlUNVh6ZjNQckJ3OSs5MVV6VUhNRDdsQXpsQllhV3hPZ3FWQ3AxRjVnODI4UTREWVNnQkliRzVzUEhBNTlHRFllZVBwVnJsKzBqajhzZTRlK1Q2M2l2NVgrQXVSRy9yN3NiZkwrOWdMcGMxWlNGampKeFVQL2VvMis4M3piNHk5ejZjd2xmRlFqZnVVelZNWmdNRkM2NHkwV3J0N3hpK3U5dTJRTG82YzgxZnBPNng0RzVWM1A5cUpTS2lwck9QK2ZLVHRQVEh1UXdvdUFPMkhkTTM5aS9iNFRFNld0WC93d3E3ZVhoZnkyOGRXL3MrMkF0U1ZHbG13aWQrQ2Q3Q2t0bzdJNjlPR3RuZmQ3N24zaWJjcktLN0RhbTJvN2JIdldNSDMreHYrSkdkcWpSNC92ZmVEVjNBeHRLcVh5RllZR1k1Y1gwSm8ydFUrRms1clNQaVFoU1NoQ0NBVlFQQjdQQnBWS2RWZlR1NnJobmxFanlHenZMUk5admY0OTV1Ui96WVpiZXdNcUJ1ZmxjdGVnQmdZOS8wVlFselU4K2NEdkEzK1ZGMzNKeU0zSDZXT1NmdVc0Wm1MWXJXUFJWWDlDWWNrSnRKN0tNbXJjT2xLYk02UW9Uc3BLeTVBTlpwTE1vVFdRRGxzMTVaVld6RW5KR0hYbkthOU9VWERVbExGcCsxZTQzVzZRWmRUKzVHUkZ3VnEwazFMTFFPYk5uTzZkV0tkMVRVQUdlMDBWbFRaSVRXNjZaNmU5aHJJS0swbXBLZWlDTCtaMlVGSldpU1hsREpkdVZKeVVsWmFqajdVUWE5U0ZkS0t5ckJTMzNreFNyT0gwQU41aHBjb0dsbGd0WmVVMUpDVmJtdTdYTjA0NmN4Sm1RMmc3MVJYbFdKMXFVbElzSWM5SEFSUzdsYklxRzhrcFNhR0p2YzVTNWkzWnljTGRyN1I0ZUJXbHBlak1MV20vRkxlYjZVcytRYTJXVzFoSnhUdDJZT2g3QzdPbVQwT1cxU0huYk4rK2czRlROak41Y0doKzVzRHhrNWlhL1FDbFU0YVFjZ0ZqWlhhN2Zjc0pmR3VlSVArYUFnRWZXOEFNOVd0c2FyVUt0VnFOMm1lUEVteVMrc0tqQ3VDcHFhblpFQmNYMXdSc1JKRFp2cWtVS2lVMkJzY1JmNkd6bXN2UzJrRnR5VWx2NEsyZGV4bVdmVFVYZFh4UnNURjMvQTI4V3VnbVJWOURsYkV2RzljOGowVUg5cklkREI1MEc3cjBuc2pXTW1MNzM4K0t4OFlCc09YVnYzRFgzUFZrWmFaUWV1QUFNNVovenFnc3d6bnYzaE9UaDdOKzV3L1lEbFF4YU1oMXFPVkVGcTVkUm1jZFBEWnhDSnQySDZibVlBMURobHlIbkhvVkc1Zk1QQ1c0amUvZEJuMy9DV3pOMzRKZWRqQmd5Z3M4TVNHUHRmTWZaT3FDcldSME5sTlUyc2lyYTliVE44MklyWFE3Z3diOURsMTZGZzZIaTVvZ2pxRXhtWkdNV3RYQXFLNVFzMk1KWGFkK1NzV09Gd0U0c0cwcG84Yy9TbXpuTEp4VkpReWE5aUt6eC9UR1hyNkwwU051bzhxWUJsVUhTQjN4S010bmp6MXB2OGZudHFYRW5FdnBycy9vbXRzSGEvRlg5Sno0QWdzbURhUnkzeVpHanJrZmJYSUdOUWYzTVhENjh6dzVjUkJRd2Npc2ZsUW1kQ2FXR2c1VW0xaTUvbTJ5TERvMlBuTTNqNnc5UWl5TjJLdUtjR2JjeWZZVnN3THZRa25CS2lvNi80YVFJWFZXTVduRU5XeXJTY0NFQTdldG1zRkRmSXB6NFRwR1RudVdvbDNibUw3OFc2WU9TZmFkVk1XVWtiOWo1OEVERkZmS0RCbXlHVXZ1TFN4NzdDNUt0eTVqd3B6WEtOcFZqcUg4TnRZOXBXUGNySmNZMTk5YkZvbXhKNE03bDdPcW9JUnBRMUl2MkN1eGI5LytMMDlpaGdacGJLRkJneVlUMUd1R3F0VnFTRTV1aDlsc2xxS2pvNldJaUFoWnJWYXJaRm5XU0pJVUtVbVNVWktrQkNHVWZVSW9vc1htckJQM1BmT1NXTGozYU9qdk5jV2k1NnczeGFGV3puSFZIUko1czVlSy9RMnRYTzhDYkVlT1ZJaERodzZkOFhsZmYvMjFhR3gwbkZXYkh6NTNqN2orankrSC9QYkRCMCtLeEY2M2lGcVBJb1J3aUQ5ZmY2bDQ4SVd0UWdoRi9PZTVlOFhWOXkwTUhCdmM3dTJYeFloWFByZjYvbmFLeGtiM1Nkdis4YVBGb20xaW9raHN0ajM2eG1lbjdIZkQxOHRGVEs4N1d0MTMvUE9YUmVLVjk1elJjN2lqVjVTNDVyNW5oTXQvL1FhN3FQMXFsVWpzZUpYNHZ0WjdIMSs4TVVQMHVuMnVFRUlSejk3ZFIvenU4VFhlOXI1YUlXS2tSUEhoajk1emIra1dJZDdhNyt2TGZ4ZUx4Q3Z1OUxiaktoTlh0NDhYcjN4UzVtdlhMWTRkcnhGQ0tPTFJtN3VMKzU3Tjl4MVhKVzdzMWs2OCs2Mzk1SDIrSWxHOHRkOHBYdnZ6OWVMMmY2d1J4ejVaSXJyOWRvNFF3aVorZjNrNzhmZjM5d2doRk9HcDNTTjZ0YjlVZkZIckhjL2EycWJydnZibjY4VHR2dnZZOFBTZG9sMi9lMFc5VUlSb09DaDZ0V2tuUGo3YTFONWJmN3RGM1BqdzBwQStmUEhHSTZManRkTkVvMUNFYUNnVlY3WFRpRWZmTEF3NTVzL1hkeEJQYnlodE9XL2ZuQ1Y2M1BGRXEvZjJ4K3M3aU9jK0xHOTEzK3NQM3lodStkdktDL1plS29xbkNCZ05EQWNHQWJsQU55QlZrcVFFSHhaRnlyS3NVYXZWcW9pSUNEazZPbG95bTgxU2NuSTcwdFBUeWNyS29rK2ZQbHg3N2JXb1pWbmxqeWhJc2l3TFJWRWtYeERCYjQ1Nm5FN25lMXF0TnBSMFRYSHhyN2MzNEU2L2duc3lUcjg4YWR2Ty9jUmYycFd1T2k1cTJiWHJTM3IydlFhakRLQmx3T0E4SHR1NUd5YjJKYk4zZnc3TS9UUGo1Ukw2NXZWbDVNaWgrSW1rQmd6c3k1eTdidVRBeU92b08yZ29RL05PenNsbTZYOFg1UlYzL1d4OGptUEdqZzJZWGpxZGpoM2JDbEQwc0dqdVg3elRxcXFJUGJ0MEtNQ3VuWHNZT01GTEdtREtHa0JQODZrTlh2ZUJiWHdtOTJadFhsS2d6VmlURWFoa3k5WUR4Sm8vWU1hTUQ3MDZqZHRCNGU0U2hxZDNQY2tWOVJnTWFqQWFNQmxpTVJqdE9PdzJzTzVqeTI0N2NzSHJ6TmpxTlJXZDdsTDJITFNSbmExang2b25XYmppUXlxdERtb3Fpa2tkZFhQZ2lqMXplNk1IMENXUm1sQkRWUTNnczhxcnE2c3dKWWV5Z1JUdS9wSzhBWGQ2dFRwZE1nUHowcys3VDlNWWE2S3E3TUk1Tkd0cWFyYlFzdElneEJTVkpFa0pyQnNhRWcwTjhxMnAxV2cwR3E4cDJzd2NGVkpUdHE0Q2VNckx5OWVucHFZK0ZCVHlaTVY3Ry9oWTdzZ3IxMlZ3MnJYSFNpTXJzU09ncEFBQUlBQkpSRUZVZHhZemNzUkZsdUp4aHNYWkNiM0hzRzkzTGdYNUJheGUramVlWExHZGZXdm5JZ01Ubm55WC9ydTJVYkJsQ3pORzlXUDN3bzk0Wk1TSkMwUXFkNnhnOEwxL2IvSDd1Tm12TVcxRTFvVVBwaGhia2c5WTBub3hZb1IvN1lZYkdUVTU5cFNQek92Vjh6cnRGRVZwZXRGUGVxS2VBVU52b25lQzk2OFJJMjRrSlQzbDlBWlA5akZFZU9FVFVGQzBaZ2FQdkpFVTJYKzltMG5ycktkOHkwSW1MUGlDL0kzdjBUWEJ3UG9uNzJSK1JSTVVxZVVUKzBXTkpoTldxN1dWUHNnWGRLUnNWaXNtaytHQ3RiZDE2OGRmTlFNMTEwbk1VQkdhdHhia1cvTUJtK3hQYUdzQ3R3QlZlQ0E2bXBiV2FaK2lLSnQ4c1F2ZS8vQkQvbDFuNXNXYmV4RjVCcy83NkEvZjhJbW5MY1BUREJjVnJsbGkyMUpjWEJMeWxjM092b3pkMi82RFZRRndzbVhqZG5KeWVnWW1sU0VobFJHM1RtRHhNdzlUc1c4L0RwOEQyV3ExazU3ZG40blRadkhRK0w3czJYZmdwRzJiczRlemZ0MTdyR3UyM1RXNDZ5bjdyZFhwVUtxcmZIMDhmVm4yeEJUbUxzMC9yV096K3c2azZzQlhKR1gySmpjM2w5emNYTko4UVlYczNKNFViUEdta3RRVWJtRlhWVk5IWXMxR1NrdThrY0VkMjNZRW5xMDZ2Uys5bGM5WUdZZ2FLdFRVV0lFRUJ2UlA1bUNGTTlCT2RrYm5Wb0gyOUZTYVRBWm0yQ20xeGdhdWw1bWVodEVnVTFGYVNrTFhYblJOTUlCaVkrMjZndE8rYkU1MkwvYnRDYVdLejg2K2pPMWJ0bmxYZzNPVWtiLzk0UG4zZCszWlEwNTJ6Z1Y1UDl4dTkrWVJJMFljQ3dJMkZ5MFRjNE55MTZTUVpOeGczNXBHbzBhcjFhSldxOVYrVVBORlIyVWhTUXJOelZHN3ZXR3R3UkExbUlZalBGN3dIVlpkQkFQbjd2ZStBUEZwZkhMdjFRRE1YdndxNzFjNHFYTzZ1WEhPUzJUMnVKelhidlJxQm05L3ZwOSt2WHBoa2k4cVhDTnorQVR5WHI2SnRLNXZrVFgwUHRZK05abVVRUk9ac3Z4OWNuS3VJa1ZucGNyWW40M2p2R2JYWnl0bU0vR1pqOG5zbWtKeDRXNG1QZktTMTNUQnpVUERlN0JMU1NmSjZLU3d4TTN5OVlOUHJtOW85U1FsbjkzTEs2Y1BaR3J2WjhuSnVneWpJWlZsQmUvUTlUUXV0V1BUVyt4Tzc4d2o0MDdOTUcvTUdzSGlTUjh4c0dkM3VtYW1VMVZ5a0s2ai9zYXJNMGR4MXlOL1orWGczekZnNjRzNDNZTGtJRk4wM01TN0dUcStINXV5T21NeFJ5RGpXL3RCbmNTaTVmOWd6TGlyV05ZMUU2V3FqRUZUbjJmbW1ONDhOUDhWeG82OG5aemx5VmkwRGc2V0NaWnQzVXJPV1ZIZzZabjM2a3VNSG5NRGE1L3FpczVaU2FtdEhmazdWNUUxZER6bUo2NG5iL0NuNk94VldCTFNUdnVxNllOR1lwaDJHd2NkaitGZit5ZHIxQlNHTGIyR25MeHJpWlZkS09ZbW1wK1haOS9CeS9uRkZPK3JRRmR5RTZzZTB6Tmo0WHNNeXpLZS9ZUzFIMkRqTGlQTGw2VmZrUGZqMEtHeVQxb3hRVjBuTUVPRkpNbEIwZEFtVGMydnJXbTFXcVJ1M2JyUjBOQkFRME1EalkwT3FiSFJpY3Zsa2hSRmtSVkZrWVVRYWtEN2YvLzNtUEhoaHgvZUJyVC9KWU5NWldVbFRxZUw1T1F6cXhUYnMyY3ZuVHRmZ3ZZYzE0cldWSlZqZFd0SnNZUytYVTY3bGZMS2Frd0pTWmowMmhiblZOdGxVcEl0cUg4bEh3bTN3MFo1UlJXeGxpUU1PbTN3RHNyS3FraElTVWJiN0Y1dFZlWFlNR0l4dDJJQktFN0tTOHZSbVMzRUdrSWR1dFVWcFRqUVk3R1l6NEdCcDFCUlZncTZXQ3pCYVRtS2s5S1Njb3lXWkV6Nk0wdkpXVDdySm5hblBjd1Q0M3VIdEZOWlhvYk9sSFJhdE80L1JiWXZtY2FUcFRtc25uUCtYVVpDaUxLYmJocjU1M2ZmZmRkT0UwV1JEYkJKa21USHk4UG1sQ1RKTGN1eUlzdXlvdEZvUkVTRWxvZ0luWWlNakNReU1wS29xQ2dNQmdOR281SFkyRFpJUFhyMHdHNjMwOURRZ01QaGtCb2JHM0c1WEZJempqWU5vR3RzZER5aTBXaW1ob0V0TEdFNWY2SllpMW02cVlUeG93YitUOW92V1BVcTZVUEdrV0k0LzE5TnE5WDZVa3lNNlFPZ2dWRHV0WHBKa2hvQWh5UkpMa21Tdk54cmFyWHdBbHNFT3AwWDJQUjZQVkZSVVVSSFJ4TVRFME5jWEp6WEZQV2JveXFWU3FoVUtzbmo4UWhabHZCNFJIQ0psZnZRb1VOcjB0TFNwb2FuWGxoK1BWTEQ4b1hMcUc3Rmoyako3TXVvQVJkK3pWYlptTWI0VVduL3N5Y3ljTlQ0QzliVzVzMWJkalh6clozUXZ5YkxrdkNibno2c0NqSkIxV2kxR2lJaUlvaU0xUG1CVFVXUXI4MFhIWlh4eGtZRDBWRWxQZjJTL1c2M2E3VXN5eVBETDBSWWZoMWk0dFpKazhPUDRYOGdqWTJONjBhTUdGRkZxRi9OQmJna1NRcXdlUkNvRFExbDhRakdMcjl2VGFlTElESlNqNnpSYUFJSEJLZCtCQmZHK3dJSkhyeVZDRytIaHlRc1lRbkxUNVdpb3FKUFd0SFdnb01HbnRZb2lwcW5lR2cwR2pRYUxWcHRCRHFkRHIwK0FHeWFRTGpVcitLcFZMSm96dllCZU16bStBSWh4Q2ZoWVFsTFdNSnl0dUx4ZUhiMDdIblo5eWZSMWxxd2VhaFVUV2FvRjZ2VXFOV2FGdHFhd1JDRldxdlZvTkY0YlZTWHk0dUFicmNiYjBXQ2dxSW9BWEFUUW5nQWQzMTkvYi9kaW5KbHJVdW1YUnRENjVFNWp3QlZzeUozajR2eTR6WWlvZ3pFUllZcHRuL09zcnRnTlRzT1ZJSXVpWEhqaDZNUFA1S3duRU01ZEtqc1B5ZlIxdnlNdVVwb3Nic3F4QVQxNDViZnQ2YlRlUU1KMGRIUnFMVmFMUnFORnJYYTJVb1F3ZDFpb1JmQWs5SWw4KzFMSDV3N01USENrMW51aXVUcGNkZlRKeUVTTDIzUk90Nzlyb3BLeGNTV3Y5MkN2eVQzeUtGdkdiOXNHM0dXZUk1WEhxVnpyenorT2FnTGNuaU1XNVh5SFRCbkN5eWE4YjlwWDZ2VFk1QXJtZnJRRzR3SUExdFl6cUVvaXJLdlg3KytlMXJYMXBxVzFzTy9ZSXNrQ1ZtV1dna2ErRTFRdjdZV2ljRVFoZEVZZ3h3UkVZRlhhL09hcEUzZ0p2dTBOam1Rck9zSHR1UGxoOXo1RDl6MDV1b0hiK2VoakFqbTVIL3Q2N0tYdHVpOWU2NmgrUnJqYjJ6OWxPNTVWN1BzOThONGQ5SzFmTHA1TzE4MVhDUUQ2ZnZYV2dWbEZhSDc3RFZRWEVySVN1ZUtBclp5MkxvTDNHN09hUFZ2QmU5VUtTa0d1ek8wQTdicWx1MmZTREx5aGpCMjlGQk9GUEYzTzZ3VUY1ZGdkN2JzWEUxbEdTV2w1YlRZcFRncEt5bW12TW9hZnJzdllxbXNyTnhZVm5ZNEdOU2NCTllMRFNtaFVrSzF0ZUNnZ2Q4RWJkTFdvcUs4MmxxYk5pYmtpQWdkV20yRXp3SFhsTUdyVXFtRnZ5SWhLSWpnYXd6Mzh1WExWd0xmcGNURzRHZ01wUzJLaTJ5WlFHalFhbEg1bDdPWEFMVVdnK3JpR01qK0ZwajJFT1FOZ3VHRFlJR3ZPRzN4RE9qWkg2Wk1nS3plVUZUdC9mMmhNVEJ1TnBSc2dTRkRZUEFZOE8waTF3eTdmUnlFZTFaQXo3Rk43ZVF2Z0FGallIQXVqQmtMMlNPOHY4OFlDVU5Hd3NneE1DZ2JKaS84aVdicTJtZm8zTGtYVTZiY1E5Zk9QVmk1bzlTM3g4bVRFNitoNzlBN21EcjU5L1RNSG81L2o3MXNCMzB6TG1YODVEOHhmdVMxakptNU5QeUdYNFFpaENpZU5ldlJMMDloaHJZb2VQZVZUWW5nOUE0dnNFVVFFYUh6SmVrYWlJbUpJVFkyRm5Wa3BJNkdCcTg2NTNScWZMNDJkZk1JYWJCSjZnRThkOTg5MFhyYjZCR3Z2L3pwZDdOSFh6djhsRGQweDNYWDhNRHJteGhmdkpmcVl6WGNPZnBhTHJsWWNsM2RFdFd4Z2owK1ptYUhBNHJYdzJOYm9YQVhtTlN3ZGk0ODlCU3NmUXllWEFrSDE4Q0lGWkMvNHN5YTJya05kdTZHRExPM25jQ0hKUk5XellHYUhaQTZFWjZaQkdlVnY2NVVNbTNTLytPeHRkOXdhN2FaZmF0bU0yRGFZNHpZdmhodHpXNFdyTEt5cGVwelVtVlFuTTZBdHJwanpWSzBBLzlFL3NKN3ZSRG9kSWJmOG90UWpoNDkrdDZMTDc3WTJKcTJKa21TM3d6MTBFVC9MVUlqb2NHZ3BpVWlRa3RrcEM2Z3JabE1Kc3ptZU9USVNEMDZuWTRtWDV1R1prbTd3ZWtmSWFrZmsyYiszNy9kNlZjVW53NXQwWmJQdnFCU1orR2VxN0s1NS9KMnZKRy9rd0EvNWE5ZFpNR3RRWnFWVGdmYnRvQWVtRGNUWnN5QWpidGhUK0ZQYjZyblVDK28rZHZ4UzU2dk9zZVVBcnBxYjNyMzJUbi9DaW0wWnpBZzI5dEl4c0JCcUFzL3AxUUJqT24wVDY5a3pMRGJtZnZNSW5hWDFRVEFNN04zZnc2c2VaenhrMmV3WlBrNmJJbzYvSlpmZk5yYTkwODg4Y1FYelVBdFdHTnJrZUxSSE5SYSt0WjB2a2lvSVZCMVlMRWtJa2RGNmRIcEl2SDYyclQ0bzZTaHFSOHFFUVJxQ3Q0SXFmdVYrYzhjLy91QWprdFBIUUJvWk9XbjMzTGJ0VmZTSjlYQzlmMzYwczFWd3FhUytvc0UyTUJvYU9rTFMra0pJMFo0dDNIVFlOVVRaK2F6VTl3dDl4bFBVUHNjWU1vNW45RWFPWmFsMi9jeWYvb3R5Qlc3R056N2NyYVdlVFV6THhYVFI0ekk2OHpXcFg4amIvUk1sUEM3ZnJGcGEydi8rYytuSE0xTVVMKzIxdW9TZThFWUZGeGg0TlhXV3ZyV3pHWXphclVhMldBd29OZEhobWh0VFVtNzZ0YTQybnpnSm5ra1NYS3ZXYm5pVFNIRS9wUGZrZ3BEaElvZnFtcTlMNlNqbGtQMUVnYmR4ZnZWN2o4QURoUkMxeHpJemZWdUtVRjE4SG9qV0N0RGd3b0FDVVlvOVRIeWJQdnNQSGZTWU1ic0xxZWtPcWdYU1psazZmZXhaVmNWQVBzSzhuRm5YZTdsSkhQYXNMcjE5QjQ0akJuekZqSWkzVUZSaVZjM1BERVZVMWd1RW0zdG05bXpaKzlzQmRTY1FmNjFWbEk4WkVKTHAwSzFOYjArc3BtMjVtVStVVWRIRzZtcnE2TyszbzdEMFVCall5Tk9weGFOeG9YTDVVS3RWZ3UzMnkxNVBCNmhlTU56UWdnVUVJb1FlQ1pNdUxQMmhUckxhenVtWERjUFRreGJOUG42SzdsNzFYdDhzVE9lbXFvcWtyTDZNRFJvN1lTTFRkS0d3c3l0a0pNRm1lbmVLT2JRaDJEdU9COSs1SHI1a2JPeXdKQUVHemRDTERCaEl0dzFDQloyQmJNQk9KL1VkdXBVWnM4YXlxMDl1NkEzcGJGaSs0ZGtHaXc4dGVDdmpCclpoK1daYWV6WlY4NkM1ZTk3MlYxckN1bWZlenZtakN6a21oSnFFc1l3TDlmTC9YdGlLcWF3WEF6eTQ0OC9ybjMrK1VXbjhxMkZKT1FHMFJLSmxxQVdFV0QxaUk0MjBxWk5HK0xqNDlINS9DL1NhNis5U21scEtSVVZSemgycklxYW1scnE2cXpZYlBXbnkvcWh2ZTY2SWZwMTY5YXRraVNwOTBudnp1T2l2TGFlaU1pby8xbUM3cytOM2NOaGc0cHFzRmhBZDVxWHJxNEVSUWRtNC85dW9yb2ROc29xcWtoSVRrRWZuS0d0T0ttb0tNZXROcEdjRUVweGZUSXFwckQ4ZWtWUmxKMlptZDJmMnI5L3Z3TXZpMGU5YjdNQmRoK0xoL04wV0R3TUJpK1FtVXd4eE1XWnNWZ1NTVWxKNFpKTExxRkhqeDdvOWQ3UHBicE5temJVMU5SUVYyZkRicStub2NGQlkyTUVXcTBUbDhzYklWV3JWY0x0OXJOK3lIZzhua0N5THVEWnNHR2owMnExdmhvVEUzTnlZRk5wU0lvMWhVYzZTSFFHU0QxRHJTczI0WC9mYjdYT1FHcHJIWmUxV0pKU1d6MUhxemVTbW1vTUQvcEZKc1hGeGUvdjM3L2Z6YWtqb1FwTnE3djd0TFhtdnJVSUg0T0hWMXN6R3IzYVdrSkNRZ0RVQUdTejJZekpaQ0k2Mm9CZUgwVmtwSTZJaUFpZnI2MTFmMXRRMUNLdytJTEoxT1k5UlZIV2g0Y3hMR0VKaTE5Y0x0ZUhsMXpTZVg4elFEdWxiNjAxdjVwR293M1FFdW4xVVVSSEczenBIZWFBYnkwQWJBa0ppY1RHeG1JMHhtQXdST0ZOLzRpZ3FTSkI3VXNCVVlrZ0N2R1FFaXU4aXk2NEtpc3JYdzBQWlZqQ0VoYS9mUG5sbDVzSVRjWU5BSnRQVzNPZlhGdlROS3NIYlNwME54cTl5YmdKQ1lsRVJVV0ZBbHRTVWx2TVpqTnQycGlJam80bU5QMGpJa2hyMHpTUGtyYlEydHEyVGRydWNybVdoSWN6TEdFSlMzMTkvZklycnNnOTFBelVHaytrcmZtWDFHdGVOdVduSkRwUmVrZFNVdHVXSHBISXlFZ3NGZ3R4Y1hIRXhNVGdUZi93SnUxR1JHaDlLU0FCY3pTNHpFbzBxeUYxUzVMazJydDM3MUxnOEs5dGtESXp1NFZwd2NNU2x0TVVJY1RoTld2V2JHMU5VMnVtcllYa3JiVVdDZlZYR1BpNTFwcW5kMFJHUnJZRU5vQ2twQ1RpNCtOcDA2WU5ScU9ScUtnbzlQcElJaUw4NEtZNWJWL2JaWmRsZjJlMzIxOElEMjFZd25MeFNtVmw1Y3F4WTI4LzNreFRPNkcyZGlMZm10Y0UxUklSNGMxWkN3NFl4TWZIazVTVTFHcjczblhJdFZvc0ZxOUo2ZzBrUktQWDZ3T0JCSzAySWxoekU0b1FPTjBlNGZZb1FoRk5yQjkrZE83YUkzdnBzL21GbTBNNEhOd08zdnBvQjlOWGJPTHgvTjBjYVJUaDBROUxXSDZGNG5hN1A4N0p5Zm44TkxTMWtLWDEvTlVGdmxRUFh5VlVSRkRBSUxnZTFJekYwdmFFVmxRZ0FhbDkrMlQ4Z1lTWUdDTUdnd0YvSFdtdzFxYlJ5RGpkb05ab1VLbFVJQVRDMXprL3VCMDZlTUM1WU1OL2x3UUQyN0wzMS9ONmlaTXhmYktJc3g1aXdxclB3aVUxWVFuTHIxQUtDd3ZmTHlzNzNMeTZvQkZvREFZMUg2QXB3VFdoVFZIUUptMHR0QjdVR0FnWXRHK2ZmTUkraEZRT0ppVzFKVDQrSHBPcERkSFJYcE0wTXRKcmtqWnBiVHJNYmFLRklUS0NDSzFHcUZTeThHSmJ3RmIyU0JLdWcwL2Q5N0hMNmZ5WDk4cU41Tzg5d2wzWDVwSFR3Y0xFRy9yZytxYUlyeHZDa3lBc1lmazFpZFZxZmJWWHI1d1NIM2dGZzFwd3dYdHp2aldmdHFacVJWdlRoVlFZbUV4K0U3VHRTZnNSQW15SmlZbFlMQmJNNWpoTXBoaWZTZW9GTjUydXlSejFSVW1GV3ExR0JOR0xOR2x0a2h0d2Jpc29lRVVJOFNWNGNDc0NsY3JYbkt4Q0pXd1VWN3ZDTXlFc1lmbVZpS0lvWHozLy9LTG1BWU9BYjAyU0pDZXQrOVo4SnFoR05HbHJUV1ZUM3B5MWFFeW1HTXhtYjhBZ01USHg5SUVOb0YyN2RpUWtKUGh5MjR3WURGR0JJbmsvQTRnL2tBQUtpcEJRYTlRQklrcEpDakJndXNkZE43VGkrUEhqTDRDZVBwMWlXYlc5a0tNMk94OTgvQ1UvQ0ltR1JuZDROb1FsTEw4UytmYmJiMWZQbURIRDFncW8rVFUyUDZnRnAzaTBXSEdxaWJuRFgrUWU1VnZoUFphRWhBVGF0VHQxT1dRTFlJdUppU0VwS1Ftek9kNlgyOVpra2dhRG15eEJuY01qZEhvOUdwV3ExYVJkSk1rVkYyZmU0SEs1WHJ6N3hpRjA1d2lUWHQvQXAwb2lBMkpWNkhWaFRxNndoT1hYSURhYjdZMnVYUy85SnNnRWJXeW1yYldhak5zVU1OQ0k1cUFXV3VUdUpaQk1Ta29pSmlibWxQMXBGVm5hdDI5UGRYVTFWcXVWK3ZwNlh5RjhJMDZuRTZmVGlhT2huaU8yUm93bUUycVBrOFpHQlVWUkVFSUlSVkVVRUI0aGtDU1FrU1RWSjU5ODh2SlZWMTNWYTlwTnY4a0djTmVWYy9XMmFQNFVIMTZwS2l4aCtSV1lvTHRmZmZXMXphMzQxWUpCellVMzE5VWpTWkxTUEJtM3lhOFdXalpsTUVTSEZMeTNiOS8rdFByVUtyQnBOQnFTazVPcHJhM0ZacXZEYnJmamNEaThsRWFPQnI0K1ZvY3FNZ3BKdUdod0s4SXRKRW10VWdraEZEd2U4TklhU1lvQU53TFgxVmNQTE52ejVhNUZYM3FpRmlkcEZkNzUrSE95Y252VE1ZeHJZUW5MTDE2KytlYWIxUTg4OElEMUpDWm9pMlJjMzZwVExkSTd2SDYxbGxIUXhNUUVrcE9UMFdoT0R6Uk95S2Rxc1ZpYUplNUcrMnBKSTRtUGk4T2tqd0NWQ2ttbFFwSzlxQ3ZMS2lGSkNDUkpTSkt2WWwvQ0pVbVNNL095N0UybEpTWFByaTg2VE0vZWZYbDZjT2Z3akFoTFdIN2hVbHRidXlRam85dUJrMmhyZm1Eeis5WjhBWU1BcUlVdzRucWpvUDVhME9pUVJOem1oZTVuckxINUpTVWxKWWpTeU82ak5Hb2tQVm54Y2JiWnFLKzMwOURRSUJvYkd5V1B4NE5hcmNiajhRaWZCQlpabGlUSm1WaFQrdEtNMy8rK215ekxnOEpUSWl4aCtXV0wyKzNlOHVpanN6OXVCbW9PbW5MV1RoUUZEVFpCaFplMUk1ZzhVdTh6UVUwK0U5UkNTa3JLR2ZYdHBBejRVVkZSSkNjbms1aVk0RXZjamNGZ0NDNlVid29tK0d1N1ZMNUFnbitwUG9JcUV1NjY2KzdqaHc0ZGVnRW9EMCtMc0lUbEZ5MC9mdnJwcCs4OSsreXpEYTJZb0k1bUptaWd3aUEwWUtBV3dacWF2OERkWUlnT0xLUG5OMEdiczNmOEpJME52SUdFMnRyYWdOWVc4TFU1dmRUaGJyY2J0OXVOeCtOQlVacUNDRUlJZk9BbUNTSGNnQ1JKa3B5YTJ2RnpxN1YyUVhSMDlOenczQWhMV0g2WmN2anc0V1Y5Ky9Zcjg0RlhNS0ExTjBIZFFSVUdvbWxSbHRCZ2diL0FQU3JLNEV2dGFFTjh2RGUxNDNRREJtY0ViQUFkT25Ud1JVaHRORFEwME5qb3dPbDA0bkk1ZzRETmpjZmpFUjZQUndvR09KL1dKdmxNVXBja1NTcWpNZWJmalkyT05LMVdlMWQ0aW9RbExMOHNzZGxzYnlRbnQ5OUZhR3BIY3hQVVJXalpWQXNUdElsakxiakFQWlNPcUVPSERtZlZ4OU5hakMwNk9wcjI3ZHNIMFJzRk0rNzZxeEw4eEpTYVU1bWtUcUR4d3cvemx5aUtVaENlSm1FSnl5OUgzRzczUjRzV0xTcWc5UWhvUUdNN21RbnFCeld0TnFKWmRZR0JtQmhUZ0k2b2ZmdjJSRWRIbjFVL1R6dER0bjM3OWxpdDNrVmVRclUydjBucXdlUHg0UEVvSnpKSkVVSklQdFhVT1d6WXNQTHZ2eTkrdmtPSDFBNlNSS2Z3bEFsTFdIN2VJb1FvM3JGang5by8vZW1odWxaTVVBY3RBd2FlRTV1Z1hrMU5wNHYwc1hiNE9kYThCZTdKeWNsblpZS2VrY2JtbDQ0ZE85S3VuVGNGSkZLdkIwMGsrcWlvSUdMS0NMUWFEWklzQzFubFgwaytoRzAzRUVpUUpNblpzV1BhenBxYTQ4L1Jjdm5NaTBhc3BYdFl2MjNQdWJuTzluMFhwTS9iMXErZ3pQcHpmNjZ3ZnR1RmFzMU93Zm90T0g4aGM2VzVmTFpwTlFlclQva0t1b3UvL3UveWZ2MzZselhUMWxvelFmMkp1TDdxQXE4SnF0SDR0YlZRdjVxL1pLcE5tMWppNCtOcDF5NkpqaDA3L3FSN09pTmcwK3YxZEdodjVxMVBDbm45NnpJK0tTbG4wM2VWTktpOU5ySWtQSlJVMTNITTdzUnFkd2k3UzBGV3FZVXNTMEtTVUJUaFhZdFVDT0VXQXBja1NZMnhzWEh2TlRRMFBQVkxBYUluSm85a1c5bTVJMXlxTE16bm1aVmJmdkoxeWo5YnhTTUwxMTZRZTFydzBPL1o4VE9QYTFjV3dqTXJXM2xPTytEZWVlZTJyZDByNS9Ga3dVRzB2NUM1MGx4ZW5uTS8yNHB0SnozbTJMSHFGOU43OU4wVHBLazVnamRKa2hxRFFhM0pCSldFU3FVV1hsRFRpaFBWZ1hyejFjeTBiWnRFaHc0ZFFsYWNPdS9BQnRDMlhYc20vbTRNODM4L2dnZHVHRVMvOWtiMjF6aUppb3JDRUIzRHBSM2FrWjZVUUx1RU5raEN3WVdNTEt1RUlvUUFTY2l5djFCZStCa0FHbk56YzVlNFhLN1hmZ0grQlFxM2ZVaFpqVGRvRWlyZUNhdzRiQlFYbCtJTW1zLzJtaXFLaTB1d3UwTW51YUlvcEE2WnpNYjVrMXU5bHNOV1JVbFoxWm4xMFc2bHBMU2lCZGVkdzFaRFNYRXhOb2Y3RE83SnUzNW9jVWtwZG1mTEY3U21zb3lLNnBZdmhLMnF2TlYrSzA0N0pjWEZWRm50NTNXY0ZBVlNoOERHK1MxL3Q1WEQxbDNnZG52L0R0bnZnSklTc0xlaWVpbDQ3WXFTNHViNzdUejV4QnRNbWpUMmx6VlhGQ2RsSlNYWVdoblg1dU5rdDl2LzNhTkhqK0I4dFJZbUtDMVRPM3hyR0toRU1NZGE4MkNCbnppeUtWK3RQVzNidHYzSmMrQXNxdEFqdUs1dlQ3NzZTc1p1YnlERmtzQ250ZFVZREJHNFhHNGtXY2FHZ3NmalFhMVJDNkZTUzJvWkhJMU9aRmtTRWlLUUFpSzhLU0JTWWVIWGNrRkJ3WXVEQmcxS1VLbFUxLzBjUWExdzNUTk1lK1pkQ2cvYTJYM1hkU3d4cUJrMjlaOU1IWllGd0t2VGIyUjFUVWNxUDlzTWVoM3F6SnZadG1RR1Q5dzdpR1c3UGFRbDZOaXpyNXpacjc3TjJMN3BnSU5aNDRhVFgvZ050cXo3MkxOc1JxQ3RSVk4vdzRvRGNhamR4Nms2V0VqSzZNZFpPMi84S2Z0WVhiaUdBWU0rUUVjMUZmbzhDdFkvVDRJV1ZzNFp5NnpWMzlNNTFjekJ3aUxHUC9FR0Q0M0tPZVU5clZ2d0lGT2Uya1JHVm1mS0R4UXpkKzBYREVuMzZpWExabzluc2ZVSSszYnVZdXJMLzJINnNFeHdWek5yL00yc0xGSkkwZHVwTnZSbTNlcC9ZZEZCeGU0MURCNzFKMUl5czdCVkhpUjcvTk04TlhIZ2VSbXJXZU1ndnhCc1diQm5XZFB2RDQyQmJVVlFVZ0ZEaGdDeHNISWx4QUk3VnNMNEdaQ2VDUWVLWU81eUdKWGpQUzkvQWN6WkJycURZTlZDalFtS2ZBdE5Pb3JXVTJEUFlVbWE3aGN6VjVTYWc0d2MvQnNxREYyUjdRMDRLcDNrK3ZZMUg2ZWV0LzhqUDgzMXpZZUhEeDl1TFZldE5STlVDYTRGOWE4SnF0Rm9SZE1xVTVHQk90Q1lHQk94c1hFa0ppYVNuTnllVHAzT2tidGRDT1dzdHVQSHEvbDQ4d2YwdjJVODE5My9aKzY3N3o1R2ovNHQxMTU3TFZkY2NRV2RMMGxETnNRUmIybExiR3diU1ZLcEpKVldLMHV5ckpKa1dRTlNCSklVSlVtU1NaS2tSS0REdm4xN2h5dUs1MU52d2NMNTJZNGNxUkNIRGgwNjYvTnY2eEVsM3RydmJQSDdLMys4WHNUM0dpVitySGNMSVJUUjBHZ1hRaWlpdHJZbWNNejNHNTRRSGE2ZEduTGUvcmRtaVc2M3pRMzU3ZmtIcnhHWDN6WlhlSVFpWEljTFJMdTRLOFFQbnBQM2EvOWJzNFNtWFQ5eHFFRVJRampFSDMvVFVmenA5YzlhOUtGdS95b1IzK1ZtVVgrS2U2cjlhcFdJYTNlRjJIL000ZjJ0c1VZY3IvUGUyeTNkVk9LUEwyNFhRaWhpNzc5bmlrNDN6QkJDS0dMemM1TkVqNXNmRVkxQ0VVSzR4ZE4zWHluKzhPSTIzL081VHR6eGo3V0I2emMyT2s3K3JCdjNpVDV0RTBWaVl1aDI5ZjN6VDJ1YzlyK2xpRzYzdGZ6OTIzY1UwZTJXME44OFJ4WFJLVkVSbnh6Mi92M2p4NHBvMzA4Ukx0LytENTlUUkdRN1Jldzk2djI3b2FIcDNDOWVteUc2Lys2eFg5UmNlZmZ4c2FMZmZkN24ySGhraCtnVXFSS3ZmRjdkWXB6Y2J0Zk85OTViK3dEd1cyQTRNQmpvQzJRRFhZRU9raVFsK3Q3aEtGbVdJMVFxbFVhdFZxc2lJaUprZzhFZ3hjYkdTbTNidGlVdHJTT1ptZDI0NG9vcnVQYmFheGs5K3JmY2Q5OTkvTzF2ZitPVlYxN200NCszY3Z4NDlWbmpVZlB0ckhtRFRNWW90dXd0SnJKYkg0YkZleWd2Sy9ORlNOMDBOdFJ6eU9yQ2toaUh4dDJJUTNpRUpNbVNKS3VFMS95V0ZDRjVrTHhxcXdUSWtpUkpHUm5kdmk0ck83UXdLU2twVnBLazlGOWFJR0R3eUZ1eDZMM1d2VTdyL1lKWEZHNWk4ak92Y0tDc0dzVlJSYVdjZDFyWDZwMlhpd3pJU2NtWW5kVlluWUR1NU9lazVWNU5zZzVBUy8rQmVTemN1UnZHNW1BcjNjbU1lZjlpOThFS0ZMZU5tbW9qVnVCa1hveGRPd3BJSFhRelhXTjluaU90RVpPMlNkSHZuZWRWWjVKU1VyQlZmUTdBMXEyYjBkcHptRFhqWVFCS1MreFU2QXFCUExMNzltUEc1RDl4YjhWbjVQWHR6NmhoZ3pqcG1sL2FybXd2Ly9HQ2pGdkpkaWhYdzVyNXNOWnJwV0hkNHkyUDhSZnk5QndLR1didi8zVkI0MUJaZlJTak1ma1hOVmQyN2Z5Yy9pT25leDl6UWc1OU00eUJmVTNqOU9sM1NXMlQzbnAwK3YxSG1nVUtnaU9nSi9DcnlhSnBCWGQvc0tBcEFtb3dHSHhyZ3JZaEljRmJCNXFhbW9ySlpEcG5ZM3FXd09aaHhYc2IyQk9md3hQWEdQaitteUtjUGxvamg3Mk9UNDdXMFM0NW1XakZRWDI5MXo4Z3ExUklzcG9JTGNMamNlTlVFRWlTZ2k5eDF3OXd5Y250UDY2cU92cGNYRnpjVENEK2x3UnNPcU9obWJPcGtGR2ovc3BqNno5Z1dIWUs5bDFMc1V6NDhQUUdSZzRhR3ZuTUhkQ0szNE9xVkRGaCtHME1XL1FoOHdkbm9xN2NnaVh6cno4NURDMEg5OC9uckZLQXJOeHJHVEhZOTAwYWNTUEdoRlFBc2tiTVlGL09jUEkzRmJCMDNuMHMzZkpIOHArNTk4UU5PQTh5SXUrM2xEVHJhTmRoRDdEaXNRbm5mT3lNeVRCeVJOUGZJOGRBUXZCK1krdm5tWTNSMk96V1g5WmNrZVhXM0hUQjQxUzE3UFYvdi9IZzlQdS9KN1N3M2RHS1h5MUE5UjIwMkxId3J3bmFNZ0pxOEFVTHZQeHFiZHQ2azNDVGs1UFA2WGllQmJBSjN2L3dRLzVkWjJicDczcGhrQVdlaGdZY0RnY09XdzNyZGh3ak9TMmRSQnhZcmJWNHpGTmlBQUFnQUVsRVFWU0JVcXVveUFoUjV4U1NUcTFHOGJnQlNaRWxDUUY0Q3hTOC9qWWhoR1EyeDYrdnFUbHVpSW1KK2V1cDlaUUxLd2FqbnFyS2F1aWFjT3FEcThzb1ZhZlF0MmNLTXJCK3pidTQwWiszdmhYdjJFeVpZemJKT2lmYkNyYVRNL1lQNEs2a3ROcEkvN3hNMU1DTzlldXBWRTU5VDltNUF5bVo4dytLcXFkNHRUYTNsUnFIQVpQaHhQR21BZjJ2NXFGdHhXVFBHdXZWeGhRN1ZUWGV4cXhXSzdISkdZeWVrRUZ1a3B1OEo0dE9malBhVkJhdmZZL212bTJ0NGFkOTFmVkdzRlo2dmR6K3laK2FCNFpTa0ZPaHQ0OUFvcXJxOUNaZTE1NDVsRCt6QVNlMDBFQi9ybk9sZDA0djVtM2JDcmRtNGF6Y3liWWlLd044KzZ4V3E2TkJpbm5sd1VmKzN6NmEwam9jUUVNSXFMVk03ZkJyYThIOGFxSzF5Z0wvS2xOdDIxcElTZWxBNTg3bm51bm56SUd0NFFpUEYzeUhWUmZCd0xuN0FWQkZXM2lxZHdxRmhWOXlTTkdpUG5LTWIreDF1QnZzdE5GSFl0YnBpRFhGVUgva21LaHY5RWpDSTRSS3JaWmsvTVNVSWZXa2toQkNOcG5hdkdXejFVVkZSVVU5OG5NQ3RnbVQvc0Q0Q1ZleDJHUmd6Q012OHRESW5pYytPR1VBVS9JZXBXL3VOYVFaRk13cDhZRUhYckZqQmFPbS93dDdWUWtsVlRKOSs3NVA1ckFIV1RSajFGbjN6V0wyTUhiUTFhaXBwdEk0bElMUjJhQlZtRDZoTThOeis5QXpXWStjMUI2TGZPcDdNbWFONE5VWkh6RTBwd2NaV1oycExDM2xzWldmTWpqOXhBYmtnSWx6R1ByWmI4bnNlU1VaS1NZT0hpaG04b0wzdVhlUWdiVlBqT2V4OVVmSlNJMWxYMkVSanl4OCs1UlRNeUhwekwvaUZUdGcxSFN3VjBGSkZmVHRDNW5EWUpIUDM1NlVDNE9BckN3d0pNSEdqUkJyaHVYellWeWVOM2hnTFFkdER1UXZPbzBQWGMraDVMa2ZaV3VaazBISjJsL0VYQmx5N3l4ZUhuUTl1UU0vUU8xMFliUTBxYVBMSHYzZGkvYy9zMkZYTTFCekJJR2J0eGEwbFdDQmY2RmpYd1JVdEJZQmpZa3hCZFl0YU44K2hmVDBUa2lTZE03ZlUwbUljNU5uYytUSUVmYnUzY3QzMzMzSG9VTmxIRGxTd2JGanh6aCt2SWE2dWpycTY3MUY5UFgxRFRoZFRzbnRMYUNYUEI2UEpJU1FmWnNhMEFCYUlZUU9pTFRiNisrSmpJejh3N202NGNyS1NweE9GOG5KN1M0WUdGYVZsZURXbTdIRUdzNTdXMjY3bGZJYUI4bEpDU0c1UERXVlpkZ3drSnh3WmhxUDIyR2p2TElhc3lVWnZmYjBzb1BzTlpWVVdkMVlrcExRQm4wNkhiWXF5cXRzV0pKU1R2dGFGMUlVTjVTVmdkRU1wak1ZcW0xTHBqSy9OSStWYzBiL2d1YUttL0xTY2t4QjQzcjgrUEVYWW1QanRqUXpQUnNBdSs5ZnI5WW1TVTdKbTJRZkFEWmZaWUUvVDAwMEFacUI2R2h2L1dkY1hCeUppUmJhdDArbVU2ZE9kT3ZXN1pTTHNweXRxR2JQZnZUY21HZ0dBNUlrMGRqb0xZNTN1ZnlGOFFxSzR2R1hXUGxEc1Q1UUZVMi9CZHU2WHMwTmdLKysrbXJQeUpFalVhdlZ2YzlGUCt2cjYvRjRGSXduY3BxY0I5RWJUUmdpdFJla0xWa1RRVXgwRk0yL2dib29JOGFvTTdmcVpiV1dtSmdZTktyVC82cHFkRkhFeEVTamFvWmRhcTJlTmliVEdWM3JRb29rUTR3SmRHYzRWQ2xadldrOFhFYlhIbDFSL1dMbWlreDAwTGpXMXRhK1BHalF0WnQvL1BGSFZ5dkE1azNDOWZuVkpFbHlOVE0vQTZEbU56LzlDeHo3QXdWdDJyVHhyVm5RTm1CK25tdS8yamtJSHJRdXFhbXBPQndPbkU0dnJaSGI3UXBRR25rOGlnL2t2R0RXQkdwQ2VKTWxGY1ZYVjRvUXd1VjN1cTFiOTc3MCtPUHpsanp5eU1QcWlJaUllN2hvcFlibEM1ZFIzWXFDYmNuc3k2Z0JQUW5MLzBqVXNZd2ROK0lYTzFmcTZ1cGVlK0NCQnpaLzhjVVh6ZlBVbWtETkd3SDFhMm9lZk13ZC9naG84d1JjYndUVW42c1d1c0pVV2xwSFVsTlR6KytRbk9zTGR1blN4Y2ZaNWd5a2YvZ0w1UDJhbTI4VFFnaWYxa1pBbFZNVTRXY0NrZncrdHpsejV0VEV4NXVYM0gzMzNYSkVSTVRkRitmYlkrTFdTWlBESUJLV2N6cFg2dXJxWHYvclgyY1Z2UDc2c29ZZ1RhMGhlUE9ER2tHVkJiSXN0UllCRGZqVnZJU1JocUFhMElSQVdrZVhMbDNPLzdmbW5Ldnpra1NYTGwxb2JHejA4Ylc1L0Z4dEFjMnRLWkZPQklHYlFBaWgrSWhBUWt4VVNaSjQ0SUVweDdSYTdaSTc3cmlEaXhmY3doS1djeWQxZFhXdlAvYllZL25QUHZ0c1BhR0Jnb0EvelFkcUlmbHFYaE5VYmhFQjlTL0UwcHd3MHB1cjFwYlUxQTUwNmRMbHZBUUx6anV3QVVSR1J0SzVjK2NnV2lPdjF0YmthL09hcEQ2ejFBOXV3cWVsK1NPbHdlQW1TUkxTUGZmY2U3U3hzWEh4M1hmZnJlaDB1bnZDVXpNc1lUbHJVSHZ0cjMrZFZYQVNVR3VRcE5CVnBvS1h6Z3VPZ0RacGFrMEp1REV4eG9CZnpaK3Ixcmx6WnlJakl5L0kvWjJ6NEVGcjRLYlQ2UUxnNXZINHdTM0ExZWJYMnZ5YkQ4YkZpWFJCQWJCaHcwYVhKRWw3K3ZUSmRXczBtak1PS1B3dmdnZGhDY3ZQU1dwcmExK2VQSGx5d2VMRkw5cFBwS25SU21WQkU2akp3ci9BY1dnRU5LckZlZ1YrbjlxbGwxNksyV3krWVBkNEZqRjNENThXN21YTzZueit1TEtBVjc3OEljQkQxVmhmdy9LUFBtWEd2emZ4bDNlM1U2eEVjY2tsbDlDaFF3b0o1amdhRkluRDlZM1VDSzF2ZFhsOThPcnlRcVBSb0ZLcGhUK0QyUjkxb1luRHJSRndQUGJZWTdVMzN6enFCYnZkL3ZTRm5oUUg5K3lrMm5HdXJ1WmszNjdkMkU0NzQ2YWNrVG0vNGNCWkVIOVpLNG9wT2dQMmgyMnZQc0s5VDY3NTJiK2tJM09ncUpYbnNXOFhaL0JjVDBmY3pMdHJORnRLN0QvcHVaNUtLa3VMS0trOFM3STc5d0dHWk45TTJVa09PWDc4K0F2WFhETW9QOGluMWtKVG95VU5VWEJodTQrR0tOU25GaG1wOXlYZ2Vxc0s0dVBOV0N4dDZkQWhoVXN1dWVTOHBYV2NPMkJUNmxpenE1d3VxUjI0SWFNZG03ZmtNMnRyQ1FBL0ZKZndkYjNNMWQwN2t4MHJlT0NGVlJ3MnRDVTlQWjFvblliOURSTDFIc0VSUllQUmFNUmdhRVpTNlFNM3Rkb1BibDV5eW1ZRWxZMkFZOE9HRGZWUlVZYVhiRGJiNDc2QnVTQXllK3pWRkpTY0sxN01TaVlPdllraSsra0RZV2xKTWM2emVHRS9XL1U0MHhlc08rM2piVFZIcWFpeS9leUJiZnhVU0dobEZrOGN5aGs4MTlNWXFSMUxXVkdSUnY5VS9VOTZycWVTdGZQL3dMelZoV2Y5b1N3cExqMVJ1WnpqNk5Hano4WEd4bTBKaW42ZURxaDVKRW55K0lNRkxjM1BVTEpJZjFXQm40SW9QVDM5SnpIaFhqZ2ZtMnppOGZIWEJ2NXNZei9LZmJ0L2dQNnBkTzdlazhlNysvZWtzbXZ2ZnJaK1g4MUQyWjF3dVFZU2s5Q085emV1cDZEY2dja2srY3pTUU5vSFByOWF3TmZtZHVNckpjVVQ3SFB6cFlRQUVCMXRYSGI4ZUxYZFpESk40VHpXbHBidVhNZmlOWjlTV09IRS9zeWo3RGJMNUk2NG0yRTUzakxwZlZ0WHMyVDUrMWpsTm95NWR5cURzcnc1T29xOWdrWFB6R2RIMFdGaWt6c3k3dDVwWktjWTJaMi9qRlZidnFERVZzT2lPWC9Gb3BVWk91NFA1SFUrZFFMdDd2eWx6RisxbVlTTXE1ZytiVHdtTmJpdFpTeGU5REs3aTc1SDBjY3hlc0lVQm1lbmdMT2NwK1krejg0ZHV6aGdyV1Rtek8vUUpmZGk1cjBqQWk5RC9zckZyTnI0QlJqYU1tckNKQWIxOVBYZFdjMlN1WSt3N2VBeGhrMzRJNlA2K2twZjNGWldMSnpQcHAzZmt0RDVjcVpPbXhRbzZONjNiVFdMbHI2UERTMFpBMjVpMnEyRE9SK3B1UHUyd3ZKTjNobmNPK1Rad0tvdFVHS0RSWFBBb29XaDR5RFAxL1h0NjJEWkduQWJZT0kweVBGWHVUdmdtUVV3WkRBc1hnQjJBMHlmQmVtKzRYaDE4UXNNSC90QzA3MmM0cm5hcXc2d1lQNGk5cFRVa2pub3Qwd2ROeVJRY3JWajNXSmVYZjFmbkZvamVjTnY0NjZodlZHcTlqSG4vN2QzN3VGUmxIZjcvOHpzSVp2TlpyTXNJUWtoaVRGZ2lDSEVpQmdSSXlJaUlsSkVSS1NJaUpRaVdxcldvclZLS1M4dlB6elVJcVVVclZJOElaNFFFUkVwSXFVVUVSQVJNVWFNTWNRUVlnZ2hoR1d6MmV6T3p2UDdZL1l3dXptQWVLSytQdGMxMTU1blptZWV1ZWYrbnU3dndoZll0YldDdXJLL002dm1uNlFWWHNhTWNZTlB3TkpjTEYvNENCdEx2MkxJMkl1amtheWhnb1VMRjFOV2Zhd2hQam45cVNjZWZXQTMwYldmTFRIbVo3dWdwbXR3SEFWcWtVQkJBb21KMGFDbVZSWDArdlpraUw1ellJc1puOVkza0p0K1Z0c1AvTWVwT0tJeUtUVUpnTHk4UEJSRm9WdEtOK0piV2toT1J1ZHJDeTFoOEFxREcwQWcwQ200aVM1ZG5Lc09IYXByN3RhdDIyM2ZsU3FJUFNPUDRjTnRiSC94RVlwS0xtTkl0cG0wRE0xUFY3NWhFU1B1ZkkwRmkvNlhaRjhsTThaY3hkSnQ3MU9jWW1icGZUZXl6bmNGODJhT283NXlEdzBOYnNpeWs5NnJIOE10RnRZc2VaSGlJVmVRYjRPczVKTklvRldxV1BaeU9RL2Uva3RXekwrRHlYTXNySjQzSGw5OUpZMldiQ2JmTmdwZi9XNXVHMzBaUzNkK3lzQVVPNE9HWG9IczJrMWxiUitHRDc4QzJSYXBYWHh4OWczTTIyWm53Wnhic1hwcUtOMVhIZ2EyTFM4L3g4Z2xEekVoZXhzVHh0NU1jZlc3WkprVkhweHlCWnZOVnpEN3pqc29YZmtvSXlZM3N1dmwyVkMzbFJIai80Y0Z6LzZkYkx1UGJYczB3Y3ZPZ0czYnFzZlpzUGRRek0yeks3ZmRONE9VVG1ablNqWU1Id3BUUjhQWWV5RXQrTjMwWGpEY0FtdVdRUEVRZ3NjMWFGNHZnNmxQd01KSGdGb1lQd3cyN1lFc1N4RFk1c0c2N1RCMU10QUlqUzdBQWREQSt2V1YzRGV2VUhmbGRISmNQZFdNSFh3RitWTWY0dlpSYVN5Yit4dG1laXdzbWo2WXh0MHJHRDN6RlpZdmV3aUgyc0R1YXMyTWxhMHBEQjErQmQ3eURjaFpGekI4ZUJIVzVCTTNDVjQ1N3hjczNKdkJvdnQreWJwRjkxS2hvMnR6cHY2TStuTm5mWEg5OWJiblI0NjhKbFQ3R1p1bkZscGFPd0sxVUZWQlorYW5CbXBkU1V0TEpUTXprMTY5ZXBLWGwvZURNZmx2Qkd6Vit6L2hzVThDUERuajdGaDdsV2ZXYkNUdTdBRmMyU011L0c2ZlBuMUlUMDhub2JtWjFGUTZDaUlFdnkwRWhLT2xIWUliYUlDWW1wcTJmdi8rL2E2c3JNeGJaRmsrLzlzK1VJNjBYcFNrOVNMTlppUy8veUJLOGlLSGJ1bkN2ekJ4MXF1TUtNa0Qrak4xNkZPc1dMdUw0aWtEYVd4b3dKcVZRazV1QVVXRlJib0xNNStVYkR0MnM0VitKU1gwUDlrS0d0bkt6TGx6S000MlVqajN0NlNNZWc3WHZQSFlldzFpNXFROGR1N1pqVnROSVQvZHpjN2R0UXdja1VYL2toS2E5cVNUYk02bHBLUkVCNUxWTEZ5OGxRVjd2bVJZbGhrb1J2Y3BCU052Wk5xb0lVQXhBMmY5bWIyMWtHWFp5c0oxQ3Bzcjd5WGJEUDN1K3dOUDlQb1pwWjdaNUxzYmFGS3NwR1JrMFM4M25YNzlUL3gzTEE0bmFXbHRiaU1ZVDBEemtyT2dKQXRzeHJhQWw1SU5kalAwS3lIcXVDNTZCTzU2QWdZSDkydjAwN0I2Szl3K05QZ0ZEOXk3Q0lha3gyeXNxWkpLVndiWitpSmIyZGJoY1MxYit5eGxHZGV3Y3Zvb1pHRHV2YmVTZjgrTExKbytHRzlESTZyRlJscEdOZ1ZaL1FnZkltc3lKU1VsN0Z2dHBLbFhVZlI1NnRoaHdQSVZHNW01NmlBREM2d1V6NzJISmF2L0VQR25IV3I4b0xYVi9jcklrVGZ1cDIzdHA2NUVpbGFKamtITllEQUlrOG1JMld6U2dWcHNVWHVvWENvelhDNzFRNDVUQnJZalgxVnh5eXNmTWZlbTBlUW02R2VoWU1PbWpieDZQSm5sTnhaRzNhMGxTU0k3TzV2RTR5NHlNOUNab21xVU9ScGFqOGJnb0RQbUJoSWFlUlBpekRQUDNQYmhoN3ViK3ZidE85VmdNQXovdmc1aWRYVXRaWXQveDY1blEvL1d3dENoMnZQcGMvL09mYlArbDM2NTkyUEpLR0xSc3FjWWt2Y05va055Q3VsQmVtSkp5OERhVkU4ajBMVDFhWVpPZnBUaFk2NG14VzZtd2EzZzlaMGd5dUN1cFVaTkl5ZXIvUktlWkljelBFM01aZ1ZGQVc5ZERZM2VHdTRjZDAza2UwWG5vSHJCMkdza3o4N2F6YXhKVjFCZTQyWDQxUHQ1Zk03a1RuWFhiSTRVMHRKaXZpSGJ2NU04cE9wYVdEb0xWdW1JY1QvOWhoeVFtOTZ1WXhsRi9qcmIrUkpYNlhiR2pQNDAvRjV4M2tXb1FQclF5VHc0cG9LcEl5K2syaVV6K2Q1SG1ULzlWS2RxRTNYMUZqS1NOYitmTVMwTlozQS8vWDcveG9zbjNyN214aG0zSHRLWm4zcFFDeGUxUzdSUjZvZ0JOUk1tVTNzTldFS3kzbTFCN2Z2SVZmdldnZTM0a1lQOFl2bFdab3kvbWt2U29wMnA3NzczSC83eXVjelROMStNdlozQ09ZUFJnQ09ySnozUEZLaHFJSWF0aFlBczVHOExtNlFkZ1ZzSURVWElORDMzM0g2ZnJGcjE2cCt1dXVxcXcyYXorY1p2UGRvaXk2Z3hZdmxaV1JrVVRmOGI5NDVxYXdVN2NvcFpzdUlOUUdINXJKOHphOEZ5dGoxeFp5UjJJNnR0dFBjN0Q5N1VVMU9yVUpSanhGdFhnOGVaUVRMd3hMTEhHRFByS1I2YzNBL3dVYm5tejdFNzNtYS9zYVdUSWRkUldlMmpWOWJKMVNlYTB6Sncybko1ZXUxYllmTlBQNTFHelpqTHFCbHpjZFh0Wm5EaDVXeWVPcGxoblpRRVZ1N1p3dHB0QjJKV2swcnhpQ0hZdjRselRtN2IweUFySGNZc2h2RUZYek9VNXNnbXgxSkhUUVAwU3VHRXh6VXIvUXhTQnFTeWZ1VzhkclpoWThyc2hVeVp2WkQ2MGxVVURmdzlVNllPcDVkUlA3OU9OampsSUQzRlMwMkRCOUtzS0hWMU5LclE0dkc4OU5qU2Y3eDl4eDEvY0hVQ2FsNmRXYXFQZnJZQnRVaGhlN3hPcWNPdTYxV1FHaXhzejZGUG56NllUS1lmUEtqMDlZSE5mNXdaLzNnVFMwWnZHZy91NTdtRFlJaDNNS0VvaS8zbGU3ajFyYys1NGRMK3JQOUFpK3ljZGNhWkRFaFBSUFUwc2VLamFqNnBidUtJVDJWdk55ZjJ0RFBJVUtOOWJEcFFDejBYSWF2VDc5ZHkyYlJFWHdJUmJBc3pRaUdFRUdQR1hIc3dMeTl2d2Z2djc2eTMyV3gzOEMwbUl1Zm45Mkw1b2dWWVJoYlFxM0FnK1ZsT3B0NzVLNGJmOVV0eXpQOURybE5tNTZiMTVJeTZoNkg1ZGxZKy9pQmtEeVEzemN5dWZWWDA2bitUM25BaVAwZmg4UVZQVU44L2cvd0JROGc1a1o5TjliSmd6aXhTYmgvRml2bC9adGpFMzJFRHNyS3plWEh0OCt3cWtpbGI5d1RyeWhYMEtsZTV1WDNZdmVRbFhoeVFqQ010aCtFREM4Q1l4WjB6U3JocnlxMHNtUE1yck40YTlqWGFtRHF1NDE0RWNsb0pkdzcxTVhuNkhHWk5Id1dOTmF6ZFhzWGMyYmZqSzkvTW92WFZEQ2twd2xPOWxRWnpEdG5PenYvTzhDbXpHWDRLdXBHN3QwS2pGMXcrMkw0Skdxd3djSEJFRlRnL0J4NWZBUFg5SVg4QTVDVEQ3VE5oNmpTd3pkZUNDbHZXdytEYm9kOEpDWFFhdzRhbXNHMTdPWU5IUld1SHRYZGM4MGRPSW1mdXBkeTFJSThKUS9LcEw5OURxVHVOZTZhTW9HcnJhbGFWK3hqY0w1ZmEzYnVRczdKSjFzM092RjVuOCtDS2Y3QXF3MDF5Umg2RCtuWG1Ncll4Y2VKdzVzKytuNno3ZnM2YVJZOG94eFhseVV0emUvL25VTnNlQlhwQTgwcVMxQ3FFYUNmNVZoOG9NSWFZbW9pUEQ1bWZOaDFUMDBBdDFLdWdUNTgrV0N5bmgzemkxMC9RVmYwYzlSbElUVERoOVN0NC9RcXRzcG5pRENmSG0xdXcybXlZUkNEOFdWSVhKemxKRmtTcm15MzdEMk5MNnNMWlRpdCtJWkdYbTR2VEtGQVVCVldObEZ1cHFnaWJvanF5Um9pOUNkSGgzZ2xKa2dRZ0dob2ExQWNlZUtEc3R0dHVyYkphclQwbFNYTENOMC9RTFI1eUZVcmRQajZ0cUNLK1J4OXkwNVBvMm5NQVZ4WTVXZlBxcTJ4K3Z3eHJabCtHWG53ZWlYRXlub1pLTnF6L0p4czM3eVNyWkRKemZqMmFPRGxDRVM0WmNTVU41WHY0Zkg4MXFiMzZrOW4xQkJORFRtWFVzRE40L3BtVk9NLzlPUS9kTTU0NEdmSXZ1QlJSdFlOWDMvZ1hDZjNHTVgxMEVUMzdGSk9WckdWNkorV2N4NEFzaWQwZmZVcWR4OHpGNTJtTzNZSkxSNU5ycWVPMVYxL240Mm9YRncrOWd1eFU3ZGc0TTNwVGtKTWEzdGMreFJlVEhDOVRNbW9jbHJvUFdiVnFIWjhlT0VhL1M0WnlUcThlR0NTRkQ3ZjlpdzNyLzBuWlZ4Si9XUEFvNS9WSS9FNG03dHN2dzBjVjBQZENjQitFNmhvNGQxQUUyQzRaQVEzbDhQbCtTTzBGbVYwaDYxd1kwQjFXdlFvN1BvSzBQakQ0ZkxBWUlyZjVBUU1ocnAzdFpYZnhNK2ZwWFV3YmUwblUrKzBlVjFNUzE0Njdpcy9mWGMvYXR6WlIzeHJIa0tIRE9DUFZqb3lYN1p2ZjVxMzE3L0JsU3pjZS9zc0RuSmtVT2VlWjU1WndWdHd4UGl3cngyMTBjbjUrZHFmSDRleUxobUUvOUFFdnJYdTNNbWZ3MVkrdFgvblkrODNIajNlazBLRlA1L0FGQVMwcStUWTIraGxxdmhJZnI1bWZpWW4yb0FTUkpoU3BCUXA2VVZCUWdNMW00M1FaMzVvZTI2bU9ZOGVPVVZwYVNrWEZGeHc0Y0lDNnVqcU9IR21JMFhGckNSYld0K0x6K1NSL1VNdE5WVlZKVmRXUW5wc0JNS0RwdVptRUVIRm9jOVJTVnZaSlVXNXU3aFNEd1hEcEQ2SEg5dFA0TVF3UGQ0NitrbEVMMzJKSXR2VzAyak5GVWY2OWZmdjJOUjAwTSs2Z1Q0SHdDMEZBbHVXQVB2bTIvVHkxV0YyMVVFcUhGdjBzS0NnZ0tTbnB0RG9teGg5NkI1S1NrdWpUcDQvTzlOU2JsbEZFVFUvZkpOQjZKMmltYWRqSklVSit0NkJacWdKcWZuNmYzYzgvLzN6dG1ESFhWQUUzbjg2WFQvbXVUZXl0YW16bkV6dkR4ZzdqcDBLd0gycFlXYmo2MzkvN1ZuME5GYXpadktmZHozS0xoNUxqTkQ3LytPT1BiN3I3N251T0U1M09FV3QrNnR2aytTVkpEa2dTcXI1TXFyMktnbENlV3F6NXFSZUxQTjFBN2JRQU5nQ0h3MEdmUHZrNlVKTjBqMUlZNENSSkNpMUNraVJKODdrcFFVQlRVVlVoOVBsdElaOGJJRzY0NFlaYTRLK2ZmYmF2eW1wTm1BNTBQeDB2bjR5OEl1d1o3VVF6WlNPMm45RGwvOXd3MmpNWVZHS2pIYnZxSzdmSHRUd3hNVHNrNDYxUDU5Q2JvTzMxL2d3QUFhMnlSMWJiTDJqWGZHb2g4ek1VL2RTWVdnalU4ci9WemxJL09tQUQ2TktsU3pEM0pRSm1Hb2lGbUpzVWZoM0wzQUJKVlNVVlZDa0VhbnJtQnFoQjlpWjY5ODVidlduVHBxcnUzZE51TWhnTVEwNjNFMksxT2JIK2hHQS9qZEQ5ekd3aEpTYlJUMUdVelR0MjdIaWpwT1RpR2pydnpxNnZKR2l2OFVxb3FYR2Jpb0pJOG0xSGdZSjh1blRwY3RvZXQrOU0zZU5VUm54OFBIYTdQYXpmRmdva2hMSTZPZ2dhZEpZd0U3WnRRd0FIaUdlZWVlYXcxV3JkMGE5ZlA4K3BLSVQ4Tkg0YVA5UTRkdXpZMHZ2dXUvLzFXMjY1NVlqTzlEeFJ6V2RVTWJ0T2VpZ21uY09pNjlJZUt6Mms5Nm4xT2ExQkRVNkQ0RUVISjQ5UFBpbmppeSsrb0tibUFIVjFoemh5NUFoTlRVMjRYQzZhbTV2eGVEenRCQlQ4S0VvZ0ZGQ0lEU29ZMFlJS1pvSkJCU0R1d0lIcWkzdjA2REZaa3FSemY3cHNmaHFuNjFCVmRjOW5uMzIyS2orL1QzbVFwY1g2MC9RbWFKVHBpU2JqSFdKcUl0TFEyRVRIUGpXOStSbk4xRTVIbjlxM3h0aWFYQzRPdWYzWUxHWmtQV2NLS05RMkhzTWpETmpNMFJtNnJTMHRIR3hxSmk0dURwUGNNZEd5V0N3NEhJNXdUOUxvNmdUQ3ZyaVk1R2FwSS9JV1NnSFJtNmFoMTQ4Kyt1akJnb0tDblRrNU9YNmowZmk5ZzV1cnVwUjNQcTduckt5VWsvK1J0NTVWYTNiUTgrd3p2M0h6a05OcFZPM2R5dnAzdGxEWFlpR25SOWZ2ZndkTzhiaHVYZnNpY2xvQjlyanZacmZjYnZmelR6NjU5T1dSSTBjZXBQMTZUMzBxaDFmcXVPZW5ydTdUSEdacVF2Rmh0am13MnhKSVRJdzBYd2xKRDRWVU9nb0tDazZZSnJWM3l6b0NYWHVTYUpaQWJlVEZKNTloNi91N3FQZlpPQ3Z6KzlOaisvbytOdFhOci8reWt0MStNNmx4QVdyOThUdzY2U291VEltbjV2T1B1ZTdGSFRnZGRqeXU0M1R2MVplL1gxZE1vZ3hQclZyRmtyTGpaRHJpT0hEVXl5MWpSakMxVDhjWGMySmlJbjM3OWtXV1pXVFpFSHlNTEpLa2Y0d0VGQ1JKd3UvM2kyQ0ZnaEJDb0twcVZDQWhxUEdtQ2swNkpIRGRkZU5xZ0wvVjFCelltNTZlZnBNa1NkOXFaNVQxUzJkUmtUNmVHU1BhcHJ6WDc5M0l3ZzFHUnBRVW5Qd0tQVlhNZjNBcGc4Y013ZmxmQkZ4NzFpeGtWV01CY3ljUGJmTlozYlluR0RUbE9hWlAvaGx5aXVjNzI0ZmE3Uzh6ZDdQQzQvZE8rSmFPcThxS0JYOWtWTUY0TXI3bGtMV3FxaDk5L3ZubnEvTHl6djVNeDlKaU83TjN4TklVU1pJQ1FxaXFFQWpaYUZJTkJnT1JFcWxJbmxyZG9hOHdkYzBpTVRFeHFxQTlVaWFsVlJRa0pDUjBmbCtvM3N6a1dTK3daY3VJa0ljUW04M0czZzFQc2JiQ3dvaUJlYWN4c01rbWJoazdtb0pNTFJxeWF0MGJ6TjM0TVc5TktNYnFUT2ZWMzk1RXV0V0U2bk16YWNGenZGU2V4OVE4T3hkZWNCRTNqRTdGTEVQTnZnOFl0bklyMS9RWlEyZjM1WVNFQkFvTEM5Rk9pSXpCMEI3SVNVRmdrd21LVTZKRlRQM0JvRUs0SVROaHBOTVlteXBKVWlpb29BS0JqSXpNelU4OXRleVRjZVBHamJWYXJkUGF2WHMyMVZQdlVzbktTb3M2ZUNyZ2RUWFE0SmJKU285Y0ZxcWlVRjMyQWFXK0lTaUtnaXdia2VYd3hDVjcrQXpXanpTMnVWamNqZlg0ekU3c3NvYzZ0MHhHaWozOG1XTHZ4ODd0eTl0VUFDbEtkQ21PYkRSR3ZxUDZxS211d1pLY1RyTE5FcnM1a0ZYcXFxc3dPdEpKdG4vNzJlT3FxbEJYOVFtN2ErenRIQWVGbmR2ZW85L1lXN2huNW5oazQ4bE5TOFhyb3JxMmtiU01tRDZsS3FpS20rcmFKdEt6TThLMXFxcXE0cTZ0WU10dWIzQWZ0RGwwd3VQcWRkSGdoalNubVpyYUp0SXowc0xmVVJTVlJScy9iVk8wcnlwS1ZDUlQvMzhCbXVxcWNjdjJObjFlUTJvb0IvZVhQLzIzZjZ6WThzRC9tK3NtRWlEUWwwZnB6ZEQyVEU5VmtpUlZWVFhyUktnaXVwbXgyWXdzeThSWnJKaGtpRSt3NFhBNHRNVnV3MktPSXkwOWc5emNzNElWQldadER0VTJrcDZSUmtOTk5iYTBMS3k2VS9Yc3dnY1lNdmwvSXRGNzJjSElDUk94Tkw3TDNxb083dEZOOWRTNUZMS3kwcU91SjhYcnBxYTJIa2RLT283WStSbzhTbzIxMWZnc3pxZ2VyS3JQUTNWdHc2bEVSZU1veUl4dzdpeG5FdDVEZmdDY1hTTXdKWnNUeUxBYmFmRnBGMXRlajRpQ1pvclRqcXo0YVQyUnBrM1FMSTJBbXlFRzVDS3NMY0xncEJEQVNaSWtpZERGSGdRNGdTNWkyZzU3VTI2K2VVcmc1cHVuUEZsZS90a0hPVGs1RXd3R3d5V2hnL24wZlQ5bnp1cEs4dE5rS3R6cHJGNzNFdm5KWmxZL2NpT3pWaDdBYmpRZ2U2b3hGOTNDdW1Vek1WZHZZZmlVLzZWbTMyNmFiSGRUc2NwSjl1QWJXVHByRXVCbDlxUlJiTno3R2U3Q1d5bGRIbXhWN3Q1RGJ0YlBLQ2pKWS92ZVJnYjBTMlBmN3IzTVcvMHhZNG9jckh4NEJvK3YyY0cyS2lmVk5XOFRKdmMxV3hnKy92Nmc0cWFQMHAyN1diVDlLSlA2MmFndjI4Q1k4Yi9DbkpGUFUwVVpRMlkreGlQVE5OYWtsTDZJWS94elRNazl4dFlhZ2FkUlljV3VIZlQ3TnFQNDNuSW1qZm9WWmRXbFZMbTNNWHozQzFoeUwyZnRrbnZBVmNyNHNiK2h2THlVR25VWHc3Yy9ROUhvTzNoa3hzZ1Rzcjh4TS81R2ZtRU9lMHRyZWVURk54azNJSXVtN1V2Sm1mQVlSU2xXTEZhRmZlNTBObXg4aFY3Mkp1NFpmejFiOTFWUVZhY3lmUGg3NER5SGwxOStCQ2QwZUZ3bkQraE9WZklBcW5mdkpHL0FoYmdxUDZKbzJ0OVpmTnNReWpjczViYUhuMmZ2OXUwczJkUEMySEQxazR1N3h2Mk1YZlVhdEZYdjI4M1FXYSt3N000UnFLNUtwbzI5anQwZUp3NWZQUlQ4bkxYTDdnMVdUTlJ4Y1dyLy81d3hyT2pORjVhdnErcUFwZW5OVUY4UTBIeDZsaGE2YVV0YXVFM0VtUXlpVlZFSjlmMDBHK0dyMm9Pb0JoUHlWNGVRVkxBbUp0RzFxNU5Ebi95SDF5czlaR2VrOFB3enk3bmwwWmM1N3p3THkrKzlodm1ibXJHN1A4V1ljUjQyNVN2cWs2OWs5OHR6Z3BkSFBTKytYTWJzZTA4MkZ1ZmxpYWN4dkRnQUFDQUFTVVJCVkh0djRwRjFWZVNtbUtsMEpiTnEvU3ZrT1kxc2ZmbytKai84TmdXNTZWU1hsVEx3dHIrdytNN2dmR2phUlhiZXJZd2RuY3FHWFVkUVhJM01XL01SK2FXUE1QemhMUlE1QkUxTnRlZzZScDNDNGp2T3JRdi93WkpQRHJmNXJIWi9LUmZPZjRVRDN0amZCWGg2NVVvbXYvbngxOXFXcWdiNCtPTzl2UGJhYXl4YTlCZnV1Ky8zL1BLWHYrUzY2OFl5Yk5nd0xycG9JRVZGUmVUbDlTWTdPNXZ1M2J1VG5Kd3NKU1VsU1FrSlZpa3VMazQybVV3R2c4RmdsR1haSk10eW5DUkpWa21TRWlWSjZpSkpVZ3FRQWVRQVp3TkZ2WHIxR3REWWVPVC9DYUhXTkgrNlNuVHRmcUhZMzZ3SUlWVHh0MTlkS241Mi83TkNDRlc4OXFjYlJMY0xKb3ZqQVZVSWY0TzQrdXl1NHFrZERVSUlWUWloaWlkL2U0VzQ1YkV0NGRmNjVkTlhab3MrTjh5UHZIZDh0emlyeDZYaXNGREV6ZWNsaVgrODN5aGVlK0FHOGF2SE5rVytjM2lMNk5Iak1uRzRuZlVKb1lwM0h2dTFPUGZxZTdUOUVXNXg4L2s5eEVOdmxnb2hWQkU0VmlyT3l6eGJmSEJNKzY3LzR4WENZT2dpbm5xM1d2dTkzeU5hL08ydlZ3aFZ2UC84YkpHYW1ocXpkQmRQL3J1Mnc5K0VscmYvK2d0eDFlK1d0ZnZaRzMrNlNWejd4eFVuWEljUXFoQ0JPbkZwank3aStRL3FoUkNxK09TVjJhTGJoVk5GcTFERjBmZWVFSWI0czhTT3cxNGhoQ3IrL011THhFMFByUTMvOXZQWDVvcysxODl1ZjczdEhOZWJMa2dWcjN6cUU4Lzg3aXB4NDU5V2l5UHZMaFY5cnB1cis1MVBYTjhuUWJ6eWVmdjcrdFdISzBYdjNpWGk0K0QrUEhYM1ZlTEszeTRUQWFFS0lUemlqc3ZPRW45NXAxcW9hcUNtcnU2akJUTDhIQmdMakFhdUFpNEhCZ0VYQUVYQnVaa0RaRWlTbEJLY3U0bVNKRmxsV1k2VFpkbGtNQmlNSnBQSllKUWxHY2tnSmRrVEpBa2taMnAzc3JPelNYUEVZYktuY3RGRkE3bDg4UG1ZSkNpNWVoTDMzZmQ3SG5yb0lWNTc3VFUrL25ndnJyS1ZkT3Q5TGMxQzVibmZYYzJ2SDl2TWwyODhUT1pWZHlJQzVaeDc1aVVjQ2w2ZmdmM3I2Tkw5TWc2M2MrMisvZGRidU9xM3k2TGUrK0xOaDhtODhBYU8rclhYci8rLzYvblovU3NRUXVYNHNTWUNvZlVlM1U3UHJ1ZnlSZkI3NHVoT3pqQ1orTU1MdTRMcjh0TFNxdkRwSzNPSlAvTUtEcldxQ09INkJubHNxcCsvdmZvV1NxOEx1Q1UvMnFCc2J2eUtXMS8rZ1B0dnVJYU1HSWZxZXp2L3cvTU5kbDZZOHZYMG1pUkpvcUNnQUtQUmlORm93R0F3aGhtY0xPc2ZvM3h4WWIrYkpDa2g5aVpVVlEwcmh1allXNmkvUWlERTNpb3FLaFNucyt1cXQ5NWE5MzdYUTl0SE93ZGNlbE4yVUNsMjZKRExtUC9FYm1BaUFNV0RCbUdUQWRuSjRJRTU3TnBkeXVUaVFhZDBhR1diSFJzeWRvY2R1ODJPeldiRDdUazVtZTdxcmM4eWZVazU2N2E4b2UyUHE0ek5lenpJbTU3ajNpMGE4L1FwMVpSV3VPblhUNlB3NXB4QmpCOFlsT0F3V3VqTUVPMC9ZUTUxRStiOHNNNjYycjNzOWVRek9GaTluajlrS01iSnY2WmFoV1RBbmorUS9zbWFBVHBrME1Vc1c3c0xHSEdLRzdOaXN4bkJic05oYzJLemUvQ2U1TG53TlpReWJ2ejl6SC94WHhRRTkyZlR4aTM0Y3JPNTc5N1BBQ2gzcXh4NWYvdUtGVisxYnBrNDhjYWpKMkJwb1JwUG55UkpvVFNPZ0M3cUtmVDVhVDdGTDR4eDhaamo0akViUEtMVkQ5YXU4YmdQK2VuYW96dDJleEoyZXlLWjl0MGtkVTJoUjQ4TUVrUWpMeTVkVEhXREIxVngwOVJvSjlTQndXNnpZM1hZY2RvOElOdXc0aWJrRGZVMk5lQ3hPemhab3I5MTg3K3hJdlBnck45ckhMZXlubEx2SG1BOGFsTUY5OTcxSjNhV1ZlRlZmZFM3RzJod1EwNW81Wlo4Sm8zdEYzeGh4aEwwTldUM3Y0QVVNNER0VklFdHdJdHZ2TVYvNURONTZzcjhLR3V5MWQzQXJjOXU1TnFycitLcXJPaE0wNC8zdnM4ZnRydjR4OVFSZEQxRlpaTzh2RHhDemsrajBZakJFQUs2aUptcStlSEN2amdSZkpTQ0VWR2RiellLNEZRZHdJWEFMUUFvVjE0NVlqK3dKUE95WDc2cktNcTFScVB4aXBOeEtuL3pJVWRzOVpOWW5hZDJOK09uL0puRnEvOUZMNGN4dkIrcU9abGhZNjRtSzdpcTBhT3ZKU2MzVXU4b1cyMmNyRmR0NytvRlRKcnpYSnYzNzMzOG40d2ZrTUtQYjhqaGg4alpPQWxaSWFXSjI4ZmZRTW5zcHhoVGxCYTF2Z0ZEcjJaa2dRMUZVZDQrNjZ4ZUc2Wk9IWGRnZVFUUU9nSTF2WTlOMFptZVlYOXhxRStJTEJ1RTBTRHdla0gxdWtWRGF6TUlnYi9GUzBLQ2pUaXpqTWxxbzB1WExqaWREcXhHaWE2cFBlaDVabGZtL2ZJUFhMOXNNOU9IRldDczMweGF3UjlpL20zN2M5Sml0MlAydUhCQjI4Q0wzTjdWb1pKVmRER2pSNGR1L2xjejFaRUJLTnczNldvc2s1NW53eE9ETUZOTmNmSkYwZFBmYXNQU0RuTEpzdkViQkE4UXZQbjIyN3gwUEpsbmYzNGU4YnFkVmp4TjNQSFVlZ1lPR2NhTnZhUC8zdWZsSC9HYlRRZFo4b3VSbkdIOVppcjRQWHYyeEd3MkJ3SE9pTWtVRFhEdE1MY2d3RWxTUkhvOFVxRVFZbTI2d0VKQXg5N0NrK2pBTzA5K1lESTlXVnBUYytDZHQ5L1plRjIvL2xQQ1NyMDd0MnpCclU3R3BqYXllVnNsbzZaR1pLUnRWaHVORGZYZjdmWG5xMmY2dUJzWStlQUxETXZYSFh0N0FVUHlQVlM3bkl3YnJrbnV1QnNhTU5wTzdSemtEWnZLMnY3ajJzeGNaOHFKUS9sV2F5SU5EViszbzVPUGhUT25ZeDB5ZzJramduZnA5QUlLcldWczN0M0FoSDdKbEczYWlGSjRQbGt5ZUFCWDJWWjJOZmdvVGphemFjdC82Ti92OTVGOXNOdHcxZGVnOEYyVzNhZ3N2ZWRHYWdwL3paSUpBNkkrR1RKMElLOStYck5yMHVDU04zdWZsZnRwNk9ZWkEyanRnSnJrbHlRTitJUVFBUUVCT1p4d2l4b0lxQUxKZ05sb0VrYWpFZUZyQnRra3pzaE0xd1FpWlM4ZmYvWVZSbHNpNmFsZCtkenRvVnUzYmppdFhnNDJCUmllY1NiNXVRa2NjWGRsME1BQ2pNRDJkZXVvUDhuN3M1emRqMExmUHNvYW9TUUcyZEtjM2FuY1dCVWxFejlvOENYTW1mOFplZjN2UWJzSEs1cHNQaDZxcXoxTUxTbkdMRVBWcGpYc1BZV21YVi8vM0xZYzRvRk5YK0N5eERGa3ZxWVFhdTZXdzd2VEwyWEhoeCt5c2U0NEg3eStsbis4SG1RSGx3L2ovZ0daL1AydDk2aHRsTGxoNFRQQkZjV3piT1lFK3A1aS85VE16RXdkdUpuUWtnMk5ZVk0xbXNXRmdVNElJYVJnUGFtUXBFQW9WeTRjV05DeHR4REFSYkUzd0orUmtma3YyUmovM3I4L2VYNllFT0k2SUMrRlNvWU51Z3lqcHdaenllK1pNQ0J5ZG9lTnY0VkY0MzVGMGVvSHlCdDJDeS9PbjByZDloY1pPL052ZUJxcXFHcVFLU2w1azRLUmQvRDRqRTcwdDd6N0dEZnNsOVI2WGRUWFZ6T3k1R0xNR1JlejhjWDUxRzk2a2VXNzZpaWNlek12ejlWTzdid1YvMlprdnBVSG4vNEg0OGIvakRVTDhyRDQ2cWwyOTJEanJwVmtuTUp4TjF2dFpGaFBMYStoLzhoSk9CNi9nWUtpRjNBV1hjT1dwMmVkRkxCdFhQa2NqclJSRVdDVDAxaXcrQStNSFhNaEt3cHlLQzJyWmZHS056R2pBWnM5emM2OUl5L0ZhbFVwZDJldzdwR0lRbTM2Z05FTTVSb0tDOC9EbG40QjY5Y3Z3ZG5KY2Uxc3pKOTJCZXZLM095cjlMQjMzRVVzdERwWXNPcE5pdTE3ZVhEUmVzaXJvVi9SMzdUcllPWmYrZU1ORjMwMjlCZXoxdnlxNzZBUGV6OGNVSFJSVEwwaWh5K1dvVW5nRjVvYWh4S2NoMm9FMUNRaHl3aEZFVUpJTW1hemRqMGNiM1lKYzBKeXVBdWMxZXJFWVR5QXF6V080dUtMYUZqM1QxNSt6VVc4MFlTemF6d1pQZlBJN05tTG1WTnlHVFhnUW9veXJNanBtYVNkN1AxUHptRGM2Q3pXYjloRHlmam9iS21DVVZNWXVPd2Fjdkplb1hERXJheFpNSU9jRWJjemE4dk45Qzg4bjRKZTZWUlY3bVBFUFU4eWY5SWdicnR6QWxPSFg4Q3lnalM4MXU3ME9vV2NwdE95OHVEcmpLTkhqMUplWGs1VjFaZlUxdFpTWDE5UFkrTVJtcHFPQldXUFFsVUtMWGk5clhnOEhudytIMEtva3RhaFhpRVFDRWpCL2d1aGFnVXBXTEVnQjhIZkNCaURWUXNtdE1vRk14QjMzMzIvVHp6YlVuSDU2c0ExMXkyL2EyaE9nMWNtSStWMHpDNVRxYXVwQm91VHRPUWZoMGFJNG5WVFU5ZEFTa1lXMW1DK1JkUDJwZVROL0lEYVRYK2lwczVGZWt3YXdROHhoQkQ3RHg4K3ZHYk9uRG03SG52czhWYWRLZWxyeC9RTVBmcURFVTlGdDZoNlgxcXdpb0JnMG0zUWVqR0hHaGxqc1VTNnMydXF0NGs0SEVrNG5WMUpTZWxLdk5uQzJlZWNSMkdmM2xFbFVrMzFOYml4dFVsRk9kRndsYTJoWk1ZR2RtNWFmTkt1RGErN2licEdGMmxwR1ZoMEtUdnV4bm9hUERKWkdjbW4xT1hNK044K3VidDA2VUpoWVNGeGNYSEV4Wm5EZHl3OWc5TXpOeUhVVUljckljdCtTWlpsRkVVUmdVQVVld3NWMThzeDVta0FVSUxtcVIvd3o1Ly9nQTk0cmZjZzhZNzN6dUZEZTNSTHVoYm9lZm9kS1ptMGpPd2ZsZmZMYUxHUm5kMitZb0JzdHBHVlpmdWhBYTN5OE9IRGJ6ejg4TU1mL1BuUEM3dzZnUEozQUdpeGdRRkZIeHdJQXBzSWxVVUY1YnZSUUUzTFR3dFdFMFNCbXMybXFkNG1KWVg2RTJnZDJyT3pzK25kdXpmeDhkRm1reU1sZzFQSjlySG5qMkxoakVacVhTbzVKNm5yYnJFNXlMYTEzWnJObVlMdEcvQ0QvM3JHcHB0RWZQYlpaMVJXN3VmZ3dSb09IVHBFUTBPa3Z0VHRkdVB4ZUhDNWp0SFM0a1VJZ2MvbncrZno0ZmY3SlVWcGw3MUpRZ2c1Q0hDaG1sTkRrTDJaZ3V6TnJGL3V2bnRtNHU5Kzk3dExuVTduMVpJazllR244ZjJ5dUtZYXR1eHpNV1JBL2cvSGpWVzFyTDYrZnYzczJYLzg4TWtubjJ6dEJOQmlGMzhRMU5vRE5EMm9oVmxhRU5SRU1FY052ZVJRQk5UMDFRU3A5T2lSUVU3T21mVHUzZnNIYjdyeVhZMGZEYkNGUmxWVkZaV1ZsZFRVMUZCWFYwZERnNmJHNjNJZDQvaHhOMGVQSHNYajhTQ0VDQmJRdCtMeitmSDcvU0ZsM2lCekMwaXFLcVJnNURSa29vWkNRZ2FkZWRvdXdPWGs1SmkzYnYzUHhhbXBxVmZKc256aFQ1RHo0eCtCUUdEN2dRTTE3MXg4Y1VscFRjMUJKU1l3MEJtbzZRRXQ3RWNMVlE4QVFoL3hiTXZTVEpqTmNlZ1ZiNjFXZmQxbnBKRnhSa1lHT1RrNVpHZG4vNmpQaGZISDlvZXlzN09KajQvSFlva25MaTRPc3prdUhHUXdHazBFQWdGa1dVWUlvVE5UV3pFWURLRTdZWWk5aVVBZ2dDUkpvYnkza0VrcXh3WVhZc3hUSDJDdXJLdzBwNmYzZUFmWVVsNytXVkYyZHZaUWs4azA2cWZMLzhjM1dsdGIxKzdidCsvZG9xSno5K3ZBVE0vU2ZPMkFtcjhEUUF2b1VqakNabWNzU3pNYWpVR1dwb0dheFdMUnlYZ25ZTE1sa3BTVWhOT3BseDNLb21mUEhGSlRVMy8wNThUNFkveFRxYW1wV0szV0lNQlpzRmdpQUJjSUtCZ01CbFJWRFVkUXZWNWpDTnp3K1h4Q2x1WDJmRzhpYUpyR1JrOERCSnRpb0lYaVRYcUFBOHk1dWIxM0FudmVlV2ZqUzhYRkZ3eXkyUkt1Z2xNS1N2NDBUaC9YUjgzeDQ4Zi8rYTkvYmQ0OWV2VG9oZzRBclQxUTgzZkcwRG95TzBNc3JYM1RVKzlQMDRJRVNVa09uRTRuS1NuZDZONjlPMWxaWjlDclYwOFNFeFAvVDV5ZlV6WkZtMXd1anZsbGVuU3hSUmNBQnhScWp4N0hFSjlBYWtKMHI4cVdGZy8xYmgvSmppUVNUTkwzTWZrb0x5L255eSsxaU9taFEvVWNPRkROMGFOTnFHb0F0MXVMbUxhMFJKckZ0TGEyNHZmNzhQbTBoakU2M3h1aDVqRnFRS0FLSVFmYm1ZWk0xSTU4Y0hwVDFRU1lKMHlZWVBuVG54NitJQ1VsWllqUmFPeFF4WGZQNXRWWThvYVJsM2J5elVOcXk2QkNnVUdGUDY2SldyRnJNMnBHTWJuaFk2R2lLRkZsNWhpREUvRkVKY2lxcXVxSzM2TStvYjZtR3AvWjBTWWkyTlJRUTZNYjB0TFQvblhvWU0yN3Yvbk5iejU5L2ZYWC9TY0phUDUyQUMzUUFVTlRRL1hPd1FBQjBTd3Qwcnk0clQ4dG9xUG1kR3BCZ3ZUMGRNNDQ0d3h5YzNPL1UzOWE5ZDZ0dUoyRjVHZWNIaEgzNzAyMmFQbnFWVHkycjVuVVJETzFqYzFNdnZwS3BoZCt0MjBISkVtaWQrL2VKQ1FrQlBONTR2SDcvUmdNUmxRMUVKWGtHNWs4QmxwYmpSZ01QdngrdjlDK0wwdUtFa0JSRktINEF2aFZGVWtTS3RwTk5hd1dFc3gzTXdRbmE0akJHWU9BNWdzQjI0b1ZLMXBYckZqeEwyRHJ4bzF2UDNYKytlZGZrSmlZT0ZTU3BDaGRsL1ZQUDBUeWxBRmZDOWoyYllNVmpUOHVZRk5kNVV5Wit2OVlzZjN0OEhzcjU5M0F4QWZYayt5d2hhZnlJMnMrWW55L1JvcHQ1ekp2MzFHR3Q4ZUpQV1VVcEJWZ0gvY3cyNWZPakFCWHhWYkdqYnVKV21NR2RxVWV1ZkJtdGo1OUQzanJ1V1BDMVordC9zUzNPY25RL05ISG41WWYwWUZTZTREbTd3RFFsQk1BbW1nL09HREFhRFRwcFlhSWl6TVRGMmRweDUrbUtkNTI3WnBNYW1vcUdSazkyUDM2WXR6WExhTDNkeHdrc0NrMWpKbStsbTFySDhSOEdzeVpVMkJzclpRZWFJbVNMWHF5S1pXM0poVFRlT1FJM25oN2xHelI0TkUzTURYUFRrdXJqL2c0N1M4ZjJiK1hpNS8vZ3YvTXVvYnZTMDZ3cWFtSnlzcjlsSmFXVWx0YlN5QVE0T2pSUm80ZDA0SUtzZmx1UVdYZVVOUVVSVkh3Ky8xUzgvRUFmalZBbkRrU1BkVUZHQ1Foa0tGTmtNRVFaSERHR0JZWHRYejg4ZDY4bmoxN1hoZ2ZIejlFVlpSMFZjZENUZ29BVkcyUmpUR01KVWhoM0kzUTVJT010SzhKTEY2b3FvV01iQWlsR25tYW9LNFIwcktJa3E0SjFiNVVWMEZ5QmxoMXMxenhRblVkWkdXM3ZhT3F3YzlTMHFOL0E3QngwVFNXTkE1aDFaenhPbUQ3T1F0ckxtSHI0OU5qMWxSRi8wNkFyWEx0ZzR4ZHNndDMyV0UyVi95YmRDT0FtMG45ZTJLZjloS0xwdzBHb0xTMHJQYk1NOC9ZL05KRDB6Nzh4ZisrVUIzeXFaNEVvT2tYSmNqUUF1MlpuQVNGVDRNMXpURm1wd0dEd1JSc1dteWlJOU16SVNHQlJKc1ZDWWt1S2VuMHpNNElCZ2t5eWM3SzRwRnBBM0ZNZnBPN1JtUkh5MWdCN29aYUdyeG1zak9TMjh5VnhycHFGR3N5S2Zib202cW5xWjY2Smk5cDZSblJVbEg0bUQ2b0Q0TVh2cy80Zmo5OGc1ZnZUYllvQkdxaFkyYzB5SHlmZ1dhSHc4RTU1eFRTMnVyRlpES2hLSDdpNHkzRXhWbUNRUWJORWR2Y2JNSm9iTUZrTXVMMWFpek81L1BoYi9WenBNRWdWRldSQkFxdHJZcVE1QUJtazRxRUpIeCtEZHhDUVFaWkRnY1pBa0pnQUNsWXhTTkN6SzBOeVBYdFc3Z0grQVI0K29JTEx1aDc0TE1QejcvN2hZckJkdzdQU0QrWi96aHRPT3lxZ093SnNIcGU1UDE3eDhBZUdWUTNWSmZDMEZtdytMWVRyKy9wbWJDcUNlcDNBbFl3RnNEV3BmRHdkRmkrQjNKU29MUU01andORTB2QXZRY3l4c0hJWEdod3daNDYyTElMY3UxUXR4c0dqNGFNUXUyZjc5c01XNXNnRzlqK01reStGM29WUVBrK21MOEN4dllQd3lFclZyek82RVVQZnl2ellNM3FOeGc2NFZHOFM2OWw3ZllHcHBVazQ5MjNudFVWV2V5WmZFbXR4K1BaVWxIeHhVZm5uSFBPZmoyNzZnRFEyZ08yMEh1aG9GSWdER2l5ckVwQ3FHcW9JemdJSkVrWVRTWU1zaVM4TFMzSTVnUzZXT1BBM3l3YWpyckl6TTdHYXRGQXpXS0pJeTR1MUpIZFNrS0NqWGpKemVzdnY0RTE3UXppMUdaU2lzZng1SnpCMkJwMk0yNzhQWlR2cWNGWWVSTWJGbGtaTVA1dTVrMGRCa29qc3lkZnk4djdWTEtzSGhwdHhheGQ5VGZTTERCelJDYmJQSDB4bWczVVYrNWw5T3puZUhDeVZzLzU0dHdibVBWeUpZVzlrcW5ZVjg4VFczY3dJSXlKWmthTnVvZ2xMNjlsZkwrSlVjZmNWYmFlQ2ZjOHk3emxLeWh5bkxiQXBoditacGJ0K0lKeGw3Y045bjFWOVNsYmpqbDVXVmN6dXYyRDkxbjAvbjRxajdReWI4TFB2bmYxVjRQQlFNK2VQWW1McytEenRXSzFKZ1M3WE1jQ25KbVdGaTJLMnRyYXFvR2IwY2NaMlVhTzF2bUZLK0NuUzZJV1BRMEVBcUxGRndCSnhXeFNoYXFxa3FJZ0NSQ1NGSTZpQmdDREpLR0FaQWhPZkdQUVREVzJBM1RHSFR0MjdBTDIvT2JLcktjdTIvdFI3NXljbkNLcjFYcGhaN2x4U3pmQTJvV3d0SjF5VEZzQnJKd0xUZHNoZXhvc3ZPM2tUdjcyUGJCM082Ulp3UnZzQ2pqOVliZ242RXFwV2crRDU4TEVEY0U3ZWgzY3N4TUtIWERQY0ZpNUVlNGJBdy9mQzJNZmhIa1RvR29EOU5vWXZNazF3TVRiNGRuZE1EQWQ2clpDOFYwd2VrdHcvM3dWN0N5MWMzdEIyeXVpZE0xZkdGcnhxamFSMHk1ZzlmSjVuV2U4cTNXc1hsZkY3SG45OGRSZXl1TnIxekYxNE1TeThnLzM3ZkIwY1pUMWpEUG9tWm1xWTFtZEFacWlZMmVLSHN3a0NUWFlsRmhvaWd1U2tHUkpHTU9SVG9sV2I2dFFoWUY0czRuNE9CT05UY2RGZ0hpT0hXc2hMYXNuU2JiNHNEOHQwajNLaXMybXFkMGUrYlNVaEw0amVmaXVjZlRva1U1NmVqcFpXVm1RbTh2R2plT1pOZlpzSEpPZlorYkk3UEJoMlB6NGJOWjRMMkx2cm5tWVVWazQ3UkllWHI2TkJWTUhhaVJnd0RqV1BUd1pUL1ZHZXZXL20ybmpkNUJqcVdQSjRzMHMyM3VRUVdtQTRzTVhZMHdVRmhheDY4R2RoQlJ2d3JjbVZ4MjdkbjJFMi9mZkVCVTlCZG1pdm5sbjh6L3BaN0IxOXdjc2VtY1BsMDBkVE1JUFFGTlRVbEp3T3J1UW1KaUl6WllRRlVIVkp0RngzRzR6WnJPSGxoYU40WVZNMDJhekQ4bHZ4R0x4aTJCZ1FmSzRGUXltZ0RBYXRSNE5BVVVWSUNSWkRrZFJKUTNraEJ5OFVPVGdoV0FJbXFuaHNxMTJnTTVZV0hqT1IwRW05OUpiYjYzcmZ0NTU1K1U3SEk0aWs4bDBJWEJTblRVR0J2WC9IRmxnYVFRM25GUjIrYkF4R3FnQllYbVl1cjB3WXlHVTEyZ21aTDF1Z3R0eU5WQUR5TXFDVU8vblhidGg5dFBhOCt5QmtCR2NlVlhib05ZSXF4ZkJHa0QxZ2FzVWFvRXNBRmNEalVZSGpuYmNqRG1Ecm1QeG5LREV0OUYyUXQ5TzQvYTFsS1pkZHV6OHJvRWQ5VVhGZTkrWjlOY3ZEQTlOUGhMeWtYYkN6dG9ETmIzQ1JyVHZERlNCcEdxUFFvUjdic2l5TU1nSTdZYW9DSkMwM3BFR0l4YUxSUmlOUnRLTmNQQndBL2JVYkxwM3Rlc0NCQnFvMld6UnFSelpDZWZ6K3FLVlBMc3lnV0hEUnBCYmRHS2h4eTFiL29YWjA1L1o5LzQrNkRid1VHZlpDMmpBTm1TUVpvNWJzd1pTYkM5bGQ1VkNUbDR5UXdZbGM5dTRheGczOGpJR0R4L0ZvTUtzcVBYYW5RNWM5VWZhYk04NVlESjFkWk5QZDFNVVRsVzJLQ0hCeGxrSk5zNjZzb1EzNXE1ZzI1Rkx1THpyRDVQNWJMVmE2ZE9uRDNhN25jVEVSQklTYkZpdFZxeldlSnFhTkFibmRzZGhOamRqTnB2d2VrMTR2YTBjTnhzeDRDYytQdXg3RTdMa0IyTkFNcHMxQnVkcjFSaWNMR3NwSW9HQVFKS0ZoQWdIN0tUZ1hWM1dtSnprMS9uaURERWdwd2M2WTFCQzZRQ3c4Wnh6Q2szTGxqMlZrNU56Wm0rYnpWWm9OQnI3US90OWxjT0tMbCt6OE00U0crUnl3OWl4TUc4ZGpPd0hudDJRTnFXZDdjUnNTemFDVDRuNEl2U2VYWHNHakJrZGVUMW1QSVFGa093TzdJb0xseGRpNlpqVmtVNWUzZ2wxOU4yS29uemdjcmxLRno3K1ZPV1JEN2ZYMk0zTDFSaG1Gb2p4ZzNVRWFIb3cwLzlHMWZ2UGdvMGlWVWxDSUJDeUxLTUdBa0tXRGFoS3F4RElKTm9UTVp1TUhHdHNFQWFUQmw0bWt3bVA1d2l5TE9Ieks5Z1NiY1RIdE1RTDlmbDBPcDEwNjVaQ2V2cUZiTHZtSmo3NzlGTldQZnNnZjMzdEE4cld6Tzg4S2d3VURyaWMwY09DZ2d1anI4YWVrbjFDcUpqejh2dU0zcjZGTFpzMk1ISEkrVHk0N21NbUZFZWtxdHhOTG16TzA2T0QxZmNrVzZUeTFiRVd1aWRwL0t5eHZvNERpcGt1bGgrK25DTXpNeE9Id3hFRU9Gc1k0T0xqajJLeGFPQ21CUlphTUpsYU9CWm53b0NQaEFSanFHS0JoRGdqTHNVdkxIWURpaThndVlXQ3lSd1FKbGtsRUFqZzk2dElraURZVHliVTZGbHZwc3JCQzhRZ1NWSTQ2S0FEdWZiQXp2alJSM3VONTUxM1hpbXdEMWg3eGhsbkdHNGI5WHhXcStHc0hKOHZxYmZKWkNxUUpLblh0M3JBR3FIYUNDVkYyazZ2VzMxUzZtUU1HZ2pyMThDSUdiQjNQZFFvRWZabXF3WTVHNHFEUVkyR0JoMkdtWE1wem0ya3ROeERZZUdKbzhOQ2lBcFZpRStPSHE2cjJGeXg3OHNiYjV4MHFLYW1SbzFoWmUyeHM0NVlXdml6b05LTEVyTU9WUWloVDlVUVdndGNTY2d5QkZTRXdXQkE4ZnVGd1dSQ1ZWb3htT0t4eHNjSmd4UkFVU0UrVG10N0o3eE5mSFZNMEsrNG1PcTlIMURqeXViOE5JY3U0VllmOWRUcVBidDI2VUpxang2Y2ZlNkZETy9uSUcza2MzZzFsNmpHb0MwVzZoc2EwTHlaMmhnODZGTHUyVnBKdjlrVE5aYXJlbWhvaXR4cU5tM1p4TXlSVS9CVWIyT25xNEFGMlViQWg4dXRValJ3S0VVRGg5SlUray9LeW10QkIyeGxaYVVVOVcvTEdOM2xtNWd4ZnhYM0xGcE12djEwQmJaVGtpMUs1Uy9QdmNTN0xSYTZ4Y3Q4ZWFTWmNTTXZvMy9DYVFIdUpDWW1VbEJRUUZKU2tnN2dFckJhRzJscWlzZGljUkVYMTB4Y25KbkdPRE1tNGNWbU05SGFxa1ZOMHpKOXVDdE0xQi8ySTFSRnlHWUZlNElpQlpON2hkY2JRRGFxUWhhcUZFcjAxUVVhUWlBWFpuSEJ2RGcvMGJseGhoaUFhL1A4eXkrL05QenVyeVdmQVJWeEMza0hNRHp5eUo5c2g1b3VUMDkwOWNocWJiV2RhUkttWGlEM1JsTW8rZm9qQzI0ZkNDVURJTWNHeVZrbk40bnVlaGhHajRIOHBaRGJIN0tDZHFPY0RDc1d3YVNCV3ZEQVZRdm0vckR4OFloVGV1eTRLMWk1ZmlNVENrZEZoK2VGK016cjlYNXgvUGp4TDZ1cnF3Lys4NThiRHQxLy8vMHRnRHFoWDdvNEFaaDFCR3F4ejhOTDhQeEVKZElHMndNSmlLUnJJRWxDUXNKb2tJUmYwZEtLZksxZVRPWTRMQ1pWSEdseWM3akJDMExDYUpBd3g4VmpOY1BlZlhYazlSdElhbGM3R1lNdjR1Mk5PL0hrOXlhN1czSlFsY05KdDI3ZHdxVlJtWm1aYkhyaUxpNWUrQjhLOHJLbzNMdUgyKzc3QjNyNEh6dnRONHlkZGdNYkY5c1pQUGwvV0RCakJJT256V1hFenVzb0tMcUkvQ3dIRmVXVnpGajhKdE9IYW1TL2FmdkxEQnI2R2syVnBVeDYrQmx5TEFCMWpDKytGSGRHUG5ZYXFIVG5zbVprWVJSNVdidm0zNHlkTzYvTnVmZldsL1BNTXk4eDhjSHZEOWkrMTFyUlprOHpSN3dLWFJNVFNUREpQd2lJMWRmWDQvUDV5Y2pvMGY0K05qZFRYVjBkVHVnOWNpUlVhK29LeXlDMXRHaSt0OVpXYnhEY3RIcFRqOXVISWhTRXFxV0hoSXJxUTlVTHdScFVnaldvb1VKN1FrQ25lNVNEZ0NmcmxwQ01raUdtQ2ZTSm5odGlmdy9JcTFhOW1weVhsOWN0T2JsYnFzMldrRzR5bWJvYkRJWU1TWkl5MnhwOWJVZEREU2hXU1B1YUVTQkZBV29oYXlpVWwwZnNabFdCbWhxd0o0TWpZa3g3aFJBSFdnL3ZPamh3K0IrL1dySDI2YStVeHZyRFpXVmxSNjYvZnZ4UklocDY0ZlNKRHNDc0k0Ylc0Zk5ROGJudTkvb1VqWENxUnVneDJCMHRxTllzaVpCY3ZXNkpsRU1aWkFRUzFnUWJscmhRbmFjNUdQRU1CUWdTd3Uzd3VuUnhoRmxhS0RpZ2I0WG44N2lvclcvVU9qcFpUejZMek5OVVQ0TkxJUzA5SFhQdzdqUnplQ2JaTTk5bllxR0NZbkdTSEpYdW9kSlFXNHNiTTFucEtkR3BJL3ZXTW5ENk9yWnZYb0wxTkNBclA3b2krRzhLYktGUlYxY1hMS1EvUkVQRFlSb2JHNE1hYnhHbEVJK24vWW9Gdjk4ZnpuM1RWeTRFQW9vVUNLaGhnQXNFMUNDd3FhaHFHTlRRTWJxT1FDNE1VREdxSTUwdGNzeHpPZVo1YUJ2U280OHVzUFh0MjllZWxwWm1UMHBLc2x1dFZydlpiTFlialVhN3dXQ3d5N0pza3lUSkprbFNnaVJKOFVFZ0RBa0FHSFRldFJBdytHcTM0cHY1TE41emU0dVdiYStKNXZRSndyM3dsNm83RUFnY1Z4VEYxZHJhNnZKNFBNZWJtcHBjWDMzMTFmRzllejkyMzMzMzNSNGRlSWtZSUJPZGIrLzA0Z0FBQzh4SlJFRlVnSmtleURwaWFsRkxKMEFXQldaNklBT0VMRXRDNjVJbVlURElPa0NUTVJpTXNaVURSQkp0MjFZUWFNbTJtaUpIWXFJOXpOS1NrN3NGdTdGck9XcmY1UWdCMjR5aFgyODcrN2F0cGNGUlRFbis2U0VQL3hPd2RaYk40dmR6NE1DQnNJQ2xKb04wbEdQSFhPMktXRWFyaGZpQ0FLZTBBM0FSRnFkMXVsZEQ1VnJFTUxqT1FLNWRzTk9WZDhtZGdKcWhIV0NMWGZUYjZXeWhuY2ZZNTlGTzJyYlA5WStkTGJGQUZydDB4TkxhUEE5SnY3Y0hZaWNDczlEem1KNGFVZXlzTGFDRlFDMVN1TjZSR0dSU2toMkhvd3ZKeVYxeHlHNys4MkVsRG1jWERJYm8vdlQ5aDQxblFPNjMyMTE5Mzg3TldIc05KTXRwL3ErK3puOEN0cE1ZeDQ0ZDQrREJnOVRWMVhINGNJaTlSWFRlbXBzOU92TTBVclVRcVRtTkJyaEFJQkJscHFxcUdnVnlRcWlTcW9xd3FVcTQ0Yk9RaEVBUGRGSTdJQlFEVU1LZ1ZVTzB5OUk2QXplcEE0Q1Qyd0cxemdDdU0zQ0xCVFRhQWJIT0dKcmFBVnVMZXEybDJraWRnbGpRWjZick54djJtNFhBTEdocVNraFNOSmpwUUUyRUZHUDBnR1kwUmhoYXFIcWdiVjZhVFZmbkdmR2w5ZWpSZzZTa0pINGEzM2xVOVAvZVNFcEtJaWtwaWE1ZHUxSmIreFgxOVllQ09tOUhneVZaeDRNRjljM2hnbnF2VjErU3BXZHZJUk0xRUtVZW9nbGNCZ2dFVkZSVkZVR1FFNnFxU3FGK00xcS9CcUpZWFBBQ2ptVjBPZ0NTWkVtS0JUd2hCd0d5TTBEckROeStEblA3T3NEMmRjek9kZ0V1Q0VpZEFoalJ6YkxEb0tyM21ZVmVCd0V0aXBscFFDYUgyajZLRUZPTDFIWWF3d3JPRVpZV3FSNndSS1Z3aEZoYUVsMjZkQ0U1T1ptVWxGVFMwN3YvbjVBWCtnbllmdUJSV3ZvSnVibG5rWnFheW9FRE5kVFZmY1hodzRjNWN1UklsSkJseUR6Vks0Ym9hMDQxMzVzR2NvRkFHT0FJQkFKNmlTUkp4K0JFaE1tSjBLT0lNVlhSUjFjamJGeEk3WU5TRk5oRmZhY2RjMWM2QWJCMXhOcGlUVkxSQ2JoMUJuQnFlNjkxb05RWnM0djlUZFMyOUs5alRFMWtXZFlGQS9TQVppQ2t1aEVMYUFaRGhLSHBpOWJiVTdiVnpNNklFR1RYcmwyRExLMDdtWmsvS1ZyOUJHdy93TWpNekNBMU5ZWGEydHF3U205Yjg3UTVHRndJQVp3dnh2L1docjJGQWd4QmtGTTdCRGtkd0JITjVxUllvSXQ2M3M1bmJaWmdIbDBuekV4TDB2b3VmV3hCMW5XeVRLNmpCYjFwR2ZPYTlsaFppSm5wL0dmdGdGbkk3RFIyd3RMMGZqUnpVQk13WGljQ0dXMTJodFJ0MDlQVE1adk5QMTFnUHd5d0JkaXhkeC8vclBpS1k0cE13Vms5dWVIY016QURyYzFOdkxyck0vYldIY05nc1RHeXVKQUx1OGNrd2l2TlBQWHZqem16OTlrTXp2anY5UjJZeldheXM3TkpUVTF0WTU3cW82ZlIvamM5ZytzNGVxb29Db3EvbFpaV0NZdFppZ0k1WGJDaFBaQWowaVlWS2ZaUlZWVWtXUTRKMk1ReU96cGhZcnJYVWtqVzYyVEJyQ1BHRnZXZUNOblpKMlp5ZEFKZ2tkOExJVlJWWURESVVVeE01eTlEbjZJUkMyYWh3SUMrQ2JlZW9YVVc3WXo0MFN4dC9HaWhhR2VzMlJuYlVLVzlVYllic29xZzNaYXc3aW9tVEhtWXhTdVc0TlJkMWJYbGU1QlQ4a2x6ZkR1QTZTbGR4ZUM1dTlqNTh2eHZ2SjRoYzNleC9SVFdjekwvNlJUMDJJNnplbmN0UllYWnBKcFZscjI5a2MrT1g4YURnN0w1c3JLS2o1dGxMdTJiaS92SVFYNzk5NVVzdm1NaUE3cEVOdlBXNXEwc2VlOUxyckwxK0s4R3R0Q0lqNCtuWjg4YzB0SlNxYXVybzc2K1BtaWU2djF2SVlCcmFTT0wxRkgwdExuaENJY2JBK1JrcGVqVFE0VE9ENmNIT1lSUWhSWndVQWtHSHNKQUY3ek9KU0VFa2l3alJjQ09rMkZkTWNCM0lqQTcyWEtTTnFhcGlQdzRDcVJDN0tvanRxY0h4UER6NFA4ekdBemg5Mk1DQUVRZVk4Rk0xalhkMWdPYUlkaVl1Nk5vWjdTc1VFaUZRd08waUIrdGE5ZXVwS1Nra0phV0ZwV1BkcUl4YlFRc3JJRCs3UlROclZzeUI4dUE4VkdnQnJEa3ZwL2ptUHhXVkJIOE43cWhweFZ3KzZSdm50S2hlbDFVVlI4K3BkK2V6SC82K3NBbU8zaGc4dVhobDEwOGg3bDF6NWN3S0p2Y3ZrVTgwRGYwU1RhN1AvbVVMZnNiR2RCRk94Q3V1djA4VjJ2anVqT3RlSDVrMURjaElZR2VQWHZTdlh2M2NQVDBTTzFuUFAvQ2UvUXRLY0hlY2h6WG9VbzJmVkpMbjc2NUpMUzJCQU1Nc1F6T3k0RXZ2cURwV0ROQ0VSdzVjZ1JWTXBHUzRvUkFnSURpNWZEaFkxaXRSbkhNNVVKRnhwN2tRQloreWVWeW93UzBXSUlwemlKTVJna2hCQUcvRDE4Z0lBQkpsZzFJaE1CT1JWRlVMU0NocXFDeGxwTUZyVFlBcGtYWXBUQ2xDNmJrSTdjdmNpakMzd21CclBiOVlGNFlZWUFLN20yUTFXbUFKSVFxaE5CK0wwa3lScU1oQkhBRUZEOENDVW5Xb3BRaFVBdjRXMUV4b3JTMkVoQmd0ZG14eHBuQ1FOWk8yZ1p0ZldudE16U3Q3MEFRMEl6eDdQbkVTdTRaTm5ac1M2UmJUaEkzVDNTUTNrM3pveDJ0U09OdnoxaHh5VEIrT2d3dEJEeXdjQkdNdnhQU0xPQ3JoMGVlaFJsM1FlVW1XTGtacXR6dytGeElNOE9JU1RBd040UVNqU3grNGwvY3RXVnArT0EybFc5andiTnZzYm0wSHN2eVA5TzAzVUhlNEd1Wk9GUnJabHk1Y3kxYm01SkpxZDNDaTVzK0lYZkl6N2x2OG5BcWQyM2c2WmZmb3JxdWtmVGM4NWx4KzNUUzdScE1ySHY2WWJaVkhNZWFkWDdVaWF6WXZvYnRqWGE4ZXphd3RlSUlJNmY4bHJFbHVTZHgxZmhZdldRZWEzWitTYitSTjNIYjJCSmtvTDU4TzB1ZlhVVjU5U0djR2IyWmR2dWQ1S1ZaVC9pZlZFODl5eFl2Wm12cEFiNXgrdituOVEza3ByZVRTK00vVHNVUmxUNnBRVmFtK25obzdVNm1YM2srY1QvT2psK0FWbHlmazVQRE9lZWNRLzY1Z3pqSDBjQ0xHOHZJeWtwangvbzFtRFB5eVV4THBWdTNGSktUdStKME9uRTR1b1RMdWV4Mk82azlNa2gxSmlLWkUwaExTeU0xcFNzSlZvMEJ4TWNaY0x1UGMrUm9NM2FIRTd2Tmd0RWNSNXhSRnJJcFR0aVRrb1F0d1N4OExjMWdER2EwV3pRNUpzMDJNd21UeVNTTVJxTXdHaVFSQkFoaE1CcUUxc1JCVWcwR2d5ckxjbnRMSUxpRUd2ZEdMNXIybkNKSmtxWjRvZFZWaGwvSExBRkprZ0t5SkFWa1dRNG15V3JybG1VcHZCMkJVSVdHdW1wd3U2ckJZRkFsdEk1TkpwTlJTS2hDQ2FqQ2FEUUtrOGtrVENhek1FaUlnQ3AwaXJOeGlJQkNhMnVyc0NRa0NwdFpGbTdYY1JFWHIvbS9Jbzc5NEhHT2o4ZHF0WEM4c1o1RGh3NVJWMWRIYlcwdEJ3OGU1S3NqYnV4Mk8wbEpTVGdjWFlKK3NxNTA2NVpDYW1vcTZjbmRlVzlMQm1VTlozRDk5VGswN3N4bFcxMCs1NXh6RGtwRkR0ZmVhYVZrTEV3YUNYZU5nWjMxZ0JXeWZERHBIazBzZE5ZVWNLV0JYWWIwWGpCOE9Eak5VRHhFZTU2bHUrUjg1WnZZS2ZkblFIcUVwMWlTc3hnMi9BcXlVMnowNm5jeHc0ZGZRYjllRVZtL3lwMXZjdCswWDdDcXdzTDRpZGRqVlZ3QVZGV1UwMnZBbGR4KzF4MWt1ZDlqMkpSNVljR0N2SDZES2NrSzhNaXlOMktBN1ExbVRMc2J0V0FvRTRabU1uM3N6VlNmaEVSUjArNVZiSEQxWXZxVWExazkrem9XYjZnRW9LYXlBbWQrQ1hmZWRRY2xLWWNZTnVJVzNDZjZUNnFMR1NNdVpsMk5uV20zMy9ITmdnZlYrei9oc1U4Q1BEbmo3RmlpeVROck5oSjM5Z0N1N0tHVkpPN2M4UjVObVVVTTZtYm13LzhEemt1THhVSjJkalozTFg2QlR5Ky9tTWNmLzRER3pKSE12dTRTM0M1OWlvaW5UWW1XMVpxSVRiaW85UGpKeU1pSTlzRVp0Um1UY1ZadkVnMUNaNlphTU1mN2FQWTBvMGp4eUhLTFVERVFGMmRHbU0zRVdWUWFXcjJTMFJ4SG5DRm9zaXFDRnE5ZnhOc1NrSVdndGFVWlJZRFJhQ1Jpd1lxUU9Sb21Xa0VpRmtXK2hORGlwcW8vQUxLTWpDb0ZBbUF3R0pHbGprMVFqV1JKK0gwK0pJTVJveHg1RDBBRUFnUWtDWXNsTHNxa05KdE5CQlNGZ0Nvd0dtUjhBVUZjbkJsSmtwRXNGcFFXRjY1V1NWZ3NjV0Z6cy9XNGhDa3VpV1NuQTFsSzRIaGxMWEpjUFBGR2ZiV0FQakFnMDJwTEpJNW9jOVNjMkFXbnMwdVVEMDNmU01WT0VpYWpnOS8rMFVtLzFHNTBQNTdLcXpWR0xCWll1aEFtem9JUkpkci9uem9VVnF5RjRpa3daaFpzSGdGanhrQlRDbXdNeXBxbFpHdUwzUXo5U3RxYW9yWGxWVmh5TXFOa1hTek9ERXBLTWxpZllzV1JYMHhKU1Z1enpaaDNCWS9QdXgwWkdCNThiOGo0R2RSVzdHVnZlUTBaaGVkUzkreGJOQUxKUUU1aE1TbStNdVJsYlUzSWdwRTNNbTNVRUtDWWdiUCt6TjVhVFNtNTA1RStpUG4zanNjQnpKcHhEZmU4dUlyYmg4MmszL0NKWkZmdlkwOVpKZVplNTJDcGZJQUtOeFIxOHA5Y3UxZXp2RGFQbXMwenNRUC9IM2l4Z0ptUU81d3VBQUFBQUVsRlRrU3VRbUNDIl0sWzEsImRldGFpbHMtY29udGFpbmVyIl0sWzEsImRldGFpbHMiXSxbImhyZWYiLCJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9hcGlfZG9jcy9weXRob24vdGYvZGVidWdnaW5nL2V4cGVyaW1lbnRhbC9lbmFibGVfZHVtcF9kZWJ1Z19pbmZvIiwidGFyZ2V0IiwiYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEQoMiwiRGVidWdnZXIgVjIgaXMgaW5hY3RpdmUgYmVjYXVzZSBubyBkYXRhIGlzIGF2YWlsYWJsZS4iKSx2KCksZygzLCJkaXYiKSxEKDQsIlRvIHVzZSB0aGUgZGVidWdnZXIsIiksdigpLGcoNSwiZGl2IikoNiwib2wiKSg3LCJsaSIpLEQoOCwiIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIGJlZ2lubmluZyBvZiB5b3VyIHByb2dyYW06ICIpLGcoOSwiZGl2IiwyKSgxMCwic3BhbiIpLEQoMTEsInRmLmRlYnVnZ2luZy5leHBlcmltZW50YWwuZW5hYmxlX2R1bXBfZGVidWdfaW5mbygiKSx2KCksZygxMiwic3BhbiIsMyksRCgxMywibG9nZGlyIiksdigpLEQoMTQsIiwgIiksZygxNSwic3BhbiIsMyksRCgxNiwndGVuc29yX2RlYnVnX21vZGU9IkZVTExfSEVBTFRIIicpLHYoKSxEKDE3LCIsICIpLGcoMTgsInNwYW4iLDMpLEQoMTksImNpcmN1bGFyX2J1ZmZlcl9zaXplPS0xIiksdigpLGcoMjAsInNwYW4iKSxEKDIxLCIpIiksdigpKCkoKSxnKDIyLCJsaSIpLEQoMjMsIlJlLXJ1biB0aGUgcHJvZ3JhbS4iKSx2KCkoKSgpLGcoMjQsImRpdiIsNCkoMjUsImRpdiIsNSkoMjYsImRpdiIsNiksTigyNywiaW1nIiw3KSx2KCksZygyOCwiZGl2Iiw4KSxEKDI5LCJBdXRvLWFsZXJ0cyBmb3IgcHJvYmxlbXMgZm91bmQiKSx2KCkoKSxnKDMwLCJkaXYiLDUpKDMxLCJkaXYiLDYpLE4oMzIsImltZyIsOSksdigpLGcoMzMsImRpdiIsOCksRCgzNCwiIEludGVncmF0ZWQgZGVidWdnaW5nIHRvIHRyYWNlIHByb2JsZW1zIHRvIHRoZWlyIGNhdXNlcyAiKSx2KCkoKSxnKDM1LCJkaXYiLDUpKDM2LCJkaXYiLDYpLE4oMzcsImltZyIsMTApLHYoKSxnKDM4LCJkaXYiLDgpLEQoMzksIkxpbmsgbG9nIHRvIGNvZGUiKSx2KCkoKSgpLGcoNDAsImRpdiIsMTEpKDQxLCJkaXYiLDEyKSxEKDQyLCIgVGhlIGxvZyBkaXJlY3RvcnkgbXVzdCBjb250YWluIFRlbnNvckZsb3cgRGVidWdnZXIgKFYyKSBkYXRhLiB0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oKSB3aWxsIGNvbGxlY3QgdGVuc29yIGRhdGEsIGdyYXBoIHN0cnVjdHVyZXMsIHRoZSBhc3NvY2lhdGVkIHN0YWNrIHRyYWNlcywgYW5kIHNvdXJjZSBjb2RlIHRvIHRoZSBzcGVjaWZpY2VkIGRpcmVjdG9yeSBsb2dkaXIgYXMgdGhlIGluc3RydW1lbnRlZCBUZW5zb3JGbG93IHByb2dyYW0gZXhlY3V0ZXMuICIpLHYoKSxnKDQzLCJkaXYiLDEyKSg0NCwiZGl2IiksRCg0NSwiIFNlZSAiKSxnKDQ2LCJhIiwxMyksRCg0NywiIGRvY3VtZW50YXRpb24gIiksdigpLEQoNDgsIiBvZiB0aGUgUHl0aG9uIEFQSSBvZiBEZWJ1Z2dlciBWMi4gIiksdigpLGcoNDksImRpdiIpLEQoNTAsIiBTZWUgIiksZyg1MSwiYSIsMTQpLEQoNTIsIiBoZXJlICIpLHYoKSxEKDUzLCIgZm9yIG90aGVyIFRlbnNvckZsb3cgZGVidWdnaW5nIEFQSXMuICIpLHYoKSgpKCkoKSl9LHN0eWxlczpbIi5hcmdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgY29sb3I6IGxpZ2h0Ymx1ZTtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBtYXJnaW46IDJweDtcbn1cblxuLmNvZGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgbWFyZ2luOiAxMHB4O1xufVxuXG4uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMTAwJTtcbiAgZm9udC1mYW1pbHk6IFJvYm90bztcbiAgZm9udC1zaXplOiAxNXB4O1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBwYWRkaW5nOiA1MHB4O1xufVxuXG4uZGV0YWlscy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbjogMTBweCA2MHB4O1xuICB3aWR0aDogNTAlO1xufVxuXG4uZXhoaWJpdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi5leGhpYml0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuZGVzY3JpcHRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2lkdGg6IDMxMHB4O1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0gICAuc2NyZWVuc2hvdFtfbmdjb250ZW50LSVDT01QJV0gICBjYW52YXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAyMDBweDtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksbn0pKCksTnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItaW5hY3RpdmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk4oMCwiaW5hY3RpdmUtY29tcG9uZW50Iil9LGRlcGVuZGVuY2llczpbRnRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxCdGVfZ2V0V2luZG93PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd307ZnVuY3Rpb24gTHRlKG4pe2xldCB0PUJ0ZV9nZXRXaW5kb3coKS5yZXF1aXJlO3JldHVybiBuZXcgUHJvbWlzZShlPT57dChuLGUpfSl9dmFyIGo1X2xvYWRNb25hY289YXN5bmMgZnVuY3Rpb24oKXtsZXQgbj1CdGVfZ2V0V2luZG93KCk7aWYodm9pZCAwPT09bi5tb25hY28pe2lmKCFuLnJlcXVpcmUpdGhyb3cgbmV3IEVycm9yKCJsb2FkTW9uYWNvKCkgZmFpbGVkIGJlY2F1c2UgZnVuY3Rpb24gcmVxdWlyZSgpIGlzIHVuYXZhaWxhYmxlIik7bi5yZXF1aXJlLmNvbmZpZyh7cGF0aHM6e3ZzOiIvdGYtaW1wb3J0cy92cyJ9fSksYXdhaXQgTHRlKFsidnMvZWRpdG9yL2VkaXRvci5tYWluIl0pLGF3YWl0IEx0ZShbInZzL3B5dGhvbi9weXRob24uY29udHJpYnV0aW9uIl0pfX07ZnVuY3Rpb24gWUkobil7cmV0dXJuIG4/InZzLWRhcmsiOiJ2cyJ9dmFyIF9tPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5yZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5Ncz0xMDAsdGhpcy5vblJlc2l6ZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uUmVzaXplJD1uZXcgVGU7bGV0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57dGhpcy5vblJlc2l6ZSQubmV4dCgpfSk7aS5vYnNlcnZlKGUubmF0aXZlRWxlbWVudCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5zdWJzY3JpYmUoKCk9PntpLnVub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpfSl9bmdPbkluaXQoKXt0aGlzLm9uUmVzaXplJC5waXBlKENhKDEpLEFyKHRoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMpLG90KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm9uUmVzaXplLmVtaXQoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlJC5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlJC5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEFlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImRldGVjdFJlc2l6ZSIsIiJdXSxpbnB1dHM6e3Jlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zOiJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyJ9LG91dHB1dHM6e29uUmVzaXplOiJvblJlc2l6ZSJ9fSksbn0pKCksTU9lPVsiY29kZVZpZXdlckNvbnRhaW5lciJdLHp0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMubW9uYWNvPW51bGwsdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmRlY29yYXRpb25zPVtdLHRoaXMuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TPTUwfW9uUmVzaXplKCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmxheW91dCgpfW5nT25DaGFuZ2VzKGUpe2lmKG51bGw9PT10aGlzLm1vbmFjbylyZXR1cm47bGV0IGk9ZS5tb25hY28mJm51bGw9PT10aGlzLmVkaXRvcjtudWxsPT09dGhpcy5lZGl0b3ImJih0aGlzLmVkaXRvcj10aGlzLm1vbmFjby5lZGl0b3IuY3JlYXRlKHRoaXMuY29kZVZpZXdlckNvbnRhaW5lci5uYXRpdmVFbGVtZW50LHt2YWx1ZToodGhpcy5saW5lcz8/W10pLmpvaW4oIlxuIiksbGFuZ3VhZ2U6InB5dGhvbiIscmVhZE9ubHk6ITAsZm9udFNpemU6MTAsbWluaW1hcDp7ZW5hYmxlZDohMH0sdGhlbWU6WUkodGhpcy51c2VEYXJrTW9kZSl9KSksZS5saW5lcyYmdGhpcy5saW5lcyYmdGhpcy5lZGl0b3Iuc2V0VmFsdWUodGhpcy5saW5lcy5qb2luKCJcbiIpKTtsZXQgcj1pfHxlLmZvY3VzZWRMaW5lbm8/dGhpcy5mb2N1c2VkTGluZW5vOm51bGw7aWYociYmdGhpcy5saW5lcyl7dGhpcy5lZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKHIsdGhpcy5tb25hY28uZWRpdG9yLlNjcm9sbFR5cGUuU21vb3RoKTtsZXQgbz10aGlzLmxpbmVzW3ItMV0ubGVuZ3RoO3RoaXMuZGVjb3JhdGlvbnM9dGhpcy5lZGl0b3IuZGVsdGFEZWNvcmF0aW9ucyh0aGlzLmRlY29yYXRpb25zLFt7cmFuZ2U6bmV3IHRoaXMubW9uYWNvLlJhbmdlKHIsMSxyLDEpLG9wdGlvbnM6e2lzV2hvbGVMaW5lOiEwLGxpbmVzRGVjb3JhdGlvbnNDbGFzc05hbWU6ImhpZ2hsaWdodC1ndXR0ZXIifX0se3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEscixvKzEpLG9wdGlvbnM6e2lubGluZUNsYXNzTmFtZToiaGlnaGxpZ2h0LWxpbmUifX1dKX1lLnVzZURhcmtNb2RlJiZ0aGlzLm1vbmFjby5lZGl0b3Iuc2V0VGhlbWUoWUkodGhpcy51c2VEYXJrTW9kZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChNT2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5jb2RlVmlld2VyQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLG1vbmFjbzoibW9uYWNvIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLDEsImNvZGUtdmlld2VyLWNvbnRhaW5lciIsMywicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsiY29kZVZpZXdlckNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzaXplKCl9KSx2KCkpLDImZSYmYigicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLGkuUkVTSVpFX0RFQk9VTkNFX0lOVEVSVkFMX01TKX0sZGVwZW5kZW5jaWVzOltfbV0sc3R5bGVzOlsiLmNvZGUtdmlld2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgIC5oaWdobGlnaHQtZ3V0dGVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC43KTtcbiAgd2lkdGg6IDVweCAhaW1wb3J0YW50O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWxpbmUge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTExLCAwLCAwLjMpO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksanRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmxpbmVzPW51bGwsdGhpcy5mb2N1c2VkTGluZW5vPW51bGwsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLm1vbmFjbyQ9bnVsbH1uZ09uSW5pdCgpe3RoaXMubW9uYWNvJD1sbyhqNV9sb2FkTW9uYWNvKCkpLnBpcGUoQigoKT0+d2luZG93Lm1vbmFjbykpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzb3VyY2UtY29kZSJdXSxpbnB1dHM6e2xpbmVzOiJsaW5lcyIsZm9jdXNlZExpbmVubzoiZm9jdXNlZExpbmVubyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6Mix2YXJzOjYsY29uc3RzOltbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwibW9uYWNvIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsInNvdXJjZS1jb2RlLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImxpbmVzIixpLmxpbmVzKSgiZm9jdXNlZExpbmVubyIsaS5mb2N1c2VkTGluZW5vKSgibW9uYWNvIixXKDEsNCxpLm1vbmFjbyQpKSgidXNlRGFya01vZGUiLGkudXNlRGFya01vZGUpfSxkZXBlbmRlbmNpZXM6W3p0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24gVE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDYpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIgIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5maWxlX3BhdGgsIiAiKX19ZnVuY3Rpb24gRE9lKG4sdCl7MSZuJiYoZygwLCJkaXYiLDcpLEQoMSwiIE5vIGZpbGUgc2VsZWN0ZWQuIENsaWNrIGEgbGluZSBudW1iZXIgaW4gdGhlIFN0YWNrIFRyYWNlIHNlY3Rpb24gdG8gc2hvdyB0aGUgc291cmNlIGNvZGUuICIpLHYoKSl9ZnVuY3Rpb24gQU9lKG4sdCl7aWYoMSZuJiZOKDAsInNvdXJjZS1jb2RlIiw4KSwyJm4pe2xldCBlPU0oKTtiKCJsaW5lcyIsZS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpKCJmb2N1c2VkTGluZW5vIixlLmZvY3VzZWRTb3VyY2VMaW5lU3BlYy5saW5lbm8pKCJ1c2VEYXJrTW9kZSIsZS51c2VEYXJrTW9kZSl9fXZhciBHdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50PW51bGwsdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWM9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWZpbGVzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRTb3VyY2VGaWxlQ29udGVudDoiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50Iixmb2N1c2VkU291cmNlTGluZVNwZWM6ImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZGVjbHM6OCx2YXJzOjMsY29uc3RzOltbMSwic291cmNlLWZpbGVzLWNvbnRhaW5lciJdLFsxLCJoZWFkZXItc2VjdGlvbiJdLFsxLCJ0aXRsZS10YWciXSxbImNsYXNzIiwiZmlsZS1sYWJlbCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ZpbGVTZWxlY3RlZCIsIiJdLFszLCJsaW5lcyIsImZvY3VzZWRMaW5lbm8iLCJ1c2VEYXJrTW9kZSIsNCwibmdJZiJdLFsxLCJmaWxlLWxhYmVsIl0sWzEsIm5vLWZpbGUtc2VsZWN0ZWQiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJkaXYiLDIpLEQoMywiU291cmNlIENvZGUiKSx2KCksRSg0LFRPZSwyLDEsImRpdiIsMyksRSg1LERPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsQU9lLDEsMywic291cmNlLWNvZGUiLDUpLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDQpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYykoIm5nSWZFbHNlIixyKSx4KDMpLGIoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUxpbmVTcGVjJiZudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQubGluZXMpfX0sZGVwZW5kZW5jaWVzOltYZSxqdGVdLHN0eWxlczpbJy5oZWFkZXItc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI0cHg7cGFkZGluZy1ib3R0b206NnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmZpbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3JtYWw7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtvdmVyZmxvdy15OmF1dG87cGFkZGluZzowIDIwcHh9Lm5vLWZpbGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiM2NjY7cGFkZGluZzowIDIwcHg7d2hpdGUtc3BhY2U6bm9ybWFsfS5zb3VyY2UtZmlsZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxMDAlfS50aXRsZS10YWdbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OjEwMCU7cGFkZGluZy1sZWZ0OjZweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9c291cmNlLWNvZGVbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3dpZHRoOjEwMCV9J119KSxufSkoKSxXdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkPXRoaXMuc3RvcmUuc2VsZWN0KGpJKSx0aGlzLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQ9dGhpcy5zdG9yZS5zZWxlY3QoR0kpLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQiLCJmb2N1c2VkU291cmNlTGluZVNwZWMiLCJ1c2VEYXJrTW9kZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwic291cmNlLWZpbGVzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IixXKDEsMyxpLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCQpKSgiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIixXKDIsNSxpLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyQpKSgidXNlRGFya01vZGUiLFcoMyw3LGkudXNlRGFya01vZGUkKSl9LGRlcGVuZGVuY2llczpbR3RlLGZ0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxST2U9WyJzdGFja0ZyYW1lQXJyYXkiXTtmdW5jdGlvbiBPT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDEzKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAjIixlLmV4ZWN1dGlvbkluZGV4LCI6ICIpfX1mdW5jdGlvbiBrT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE0KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoIiAiLGUub3BUeXBlLCIgIil9fWZ1bmN0aW9uIEZPZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRCgxLCIgRWFnZXIgZXhlY3V0aW9uICIpLEUoMixPT2UsMiwxLCJzcGFuIiwxMSksRSgzLGtPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wVHlwZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBOT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE2KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMSkscWUoJyAiJyxlLm9wTmFtZSwnIiAnKX19ZnVuY3Rpb24gTE9lKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwxNCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgzKTt4KDEpLHFlKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBCT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSwiIENyZWF0aW9uIG9mIGdyYXBoIG9wICIpLEUoMixOT2UsMiwxLCJzcGFuIiwxNSksRSgzLExPZSwyLDEsInNwYW4iLDEyKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLG51bGwhPT1lLm9wTmFtZSkseCgxKSxiKCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpfX1mdW5jdGlvbiBWT2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO3goMSkscWUoIiAoSG9zdCBuYW1lOiAiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5WzBdLmhvc3RfbmFtZSwiKSAiKX19ZnVuY3Rpb24gSE9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDcpKDEsInNwYW4iKSgyLCJzcGFuIiw4KSxFKDMsRk9lLDQsMiwiZGl2Iiw5KSxFKDQsQk9lLDQsMiwiZGl2Iiw5KSx2KCkoKSxnKDUsImRpdiIpLEUoNixWT2UsMiwxLCJzcGFuIiwxMCksdigpKCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdTd2l0Y2giLGUuY29kZUxvY2F0aW9uVHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuQ29kZUxvY2F0aW9uVHlwZS5FWEVDVVRJT04pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuR1JBUEhfT1BfQ1JFQVRJT04pLHgoMiksYigibmdJZiIsbnVsbCE9PWUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JiZlLnN0YWNrRnJhbWVzRm9yRGlzcGxheS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFVPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxOCksRCgxLCIgQ2xpY2sgYW4gZWFnZXIgZXhlY3V0aW9uIG9yIGdyYXBoIG9wIHRvIHNob3cgaXRzIG9yaWdpbmFsIHN0YWNrIHRyYWNlLiAiKSx2KCkpfWZ1bmN0aW9uIHpPZShuLHQpezEmbiYmKGcoMCwiZGl2IiwyOCksRCgxLCIgXHUyOTEzICIpLHYoKSl9dmFyIGpPZT1mdW5jdGlvbihuLHQpe3JldHVybltuLHRdfTtmdW5jdGlvbiBHT2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIyKSgxLCJkaXYiLDIzKSxEKDIpLHYoKSxnKDMsImRpdiIsMjQpLEUoNCx6T2UsMiwwLCJkaXYiLDI1KSxnKDUsImRpdiIsMjYpLFAoImNsaWNrIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5vblNvdXJjZUxpbmVDbGlja2VkLmVtaXQobykpfSksRCg2KSx2KCksZyg3LCJkaXYiLDI3KSxEKDgpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixqT2UsZS5iZWxvbmdzVG9Gb2N1c2VkRmlsZT8iZm9jdXNlZC1maWxlIjoiIixlLmZvY3VzZWQ/ImZvY3VzZWQtc3RhY2stZnJhbWUiOiIiKSkseCgxKSx4cigidGl0bGUiLGUuZmlsZV9wYXRoKSx4KDEpLHFlKCIgIixlLmNvbmNpc2VfZmlsZV9wYXRoLCIgIikseCgyKSxiKCJuZ0lmIixpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJiZlLmZvY3VzZWQpLHgoMikscWUoIiBMaW5lICIsZS5saW5lbm8sIiAiKSx4KDIpLHFlKCIgIixlLmZ1bmN0aW9uX25hbWUsIiAiKX19ZnVuY3Rpb24gV09lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5LDIwKSxFKDIsR09lLDksOSwiZGl2IiwyMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDIpLGIoIm5nRm9yT2YiLGUuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KX19ZnVuY3Rpb24gcU9lKG4sdCl7fXZhciBxdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5PW51bGwsdGhpcy5vblNvdXJjZUxpbmVDbGlja2VkPW5ldyBHLHRoaXMuQ29kZUxvY2F0aW9uVHlwZT10c31uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih2b2lkIDA9PT10aGlzLnN0YWNrRnJhbWVBcnJheSlyZXR1cm47bGV0IGU9dGhpcy5zdGFja0ZyYW1lQXJyYXkubmF0aXZlRWxlbWVudCxpPWUucXVlcnlTZWxlY3RvcigiLmZvY3VzZWQtc3RhY2stZnJhbWUiKTtpZihudWxsIT09aSlyZXR1cm4gdm9pZCB0aGlzLnNjcm9sbFRvRWxlbWVudChlLGkpO2xldCByPWUucXVlcnlTZWxlY3RvcigiLnN0YWNrLWZyYW1lLWNvbnRhaW5lcjpsYXN0LWNoaWxkIik7bnVsbCE9PXImJnRoaXMuc2Nyb2xsVG9FbGVtZW50KGUscil9c2Nyb2xsVG9FbGVtZW50KGUsaSl7ZS5zY3JvbGxUb3A9aS5vZmZzZXRUb3B9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInN0YWNrLXRyYWNlLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KFJPZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YWNrRnJhbWVBcnJheT1yLmZpcnN0KX19LGlucHV0czp7Y29kZUxvY2F0aW9uVHlwZToiY29kZUxvY2F0aW9uVHlwZSIsb3BUeXBlOiJvcFR5cGUiLG9wTmFtZToib3BOYW1lIixleGVjdXRpb25JbmRleDoiZXhlY3V0aW9uSW5kZXgiLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsc3RhY2tGcmFtZXNGb3JEaXNwbGF5OiJzdGFja0ZyYW1lc0ZvckRpc3BsYXkifSxvdXRwdXRzOntvblNvdXJjZUxpbmVDbGlja2VkOiJvblNvdXJjZUxpbmVDbGlja2VkIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsInN0YWNrLXRyYWNlLWNvbnRhaW5lciJdLFsxLCJzdGFjay10cmFjZS1oZWFkZXIiXSxbMSwic3RhY2stdHJhY2UtdGl0bGUiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtYXV4LWluZm8iLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9TdGFja1RyYWNlIiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWFycmF5Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdTZWN0aW9uIiwiIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIl0sWzEsImNvZGUtbG9jYXRpb24tb3JpZ2luIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwic3RhY2stdHJhY2UtaG9zdC1uYW1lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcC10eXBlIiw0LCJuZ0lmIl0sWzEsImVhZ2VyLWV4ZWN1dGlvbi1pbmRleCJdLFsxLCJvcC10eXBlIl0sWyJjbGFzcyIsIm9wLW5hbWUiLDQsIm5nSWYiXSxbMSwib3AtbmFtZSJdLFsxLCJzdGFjay10cmFjZS1ob3N0LW5hbWUiXSxbMSwic3RhY2stdHJhY2UtYXV4LWluZm8iLCJuby1zdGFjay10cmFjZSJdLFsxLCJzdGFjay1mcmFtZS1hcnJheSJdLFsic3RhY2tGcmFtZUFycmF5IiwiIl0sWyJjbGFzcyIsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInN0YWNrLWZyYW1lLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJzdGFjay1mcmFtZS1maWxlLXBhdGgiLDMsInRpdGxlIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVuby1mdW5jdGlvbiJdLFsiY2xhc3MiLCJzdGljay10by1ib3R0b21tb3N0LWluZGljYXRvciIsInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDQsIm5nSWYiXSxbMSwic3RhY2stZnJhbWUtbGluZW5vIiwzLCJjbGljayJdLFsxLCJzdGFjay1mcmFtZS1mdW5jdGlvbiJdLFsidGl0bGUiLCJTdGlja2luZyB0byB0aGUgYm90dG9tbW9zdCBmcmFtZSBpbiB0aGUgY3VycmVudCBzb3VyY2UgZmlsZSB3aGVuIG5hdmlnYXRpbmcgZXhlY3V0aW9ucyBhbmQgZ3JhcGggb3BzLiBUbyByZW1vdmUgdGhpcyBzdGlja2luZywgY2xpY2sgYW55IG5vbi1ib3R0b21tb3N0IHN0YWNrIGZyYW1lLiIsMSwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxEKDMsIiBTdGFjayBUcmFjZSAiKSx2KCksRSg0LEhPZSw3LDQsImRpdiIsMyksRSg1LFVPZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLHYoKSxFKDcsV09lLDMsMSwiZGl2Iiw1KSxFKDgscU9lLDAsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKSwyJmUpe2xldCByPXN0KDYpLG89c3QoOSk7eCg0KSxiKCJuZ0lmIixudWxsIT09aS5jb2RlTG9jYXRpb25UeXBlKSgibmdJZkVsc2UiLHIpLHgoMyksYigibmdJZiIsbnVsbCE9PWkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5KSgibmdJZkVsc2UiLG8pfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxocixJcl0sc3R5bGVzOlsnLmZvY3VzZWQtZmlsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uZm9jdXNlZC1zdGFjay1mcmFtZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxMTEsMCwuMyl9Lm5vLXN0YWNrLXRyYWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLXdyYXA6YW55d2hlcmV9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc3RhY2stZnJhbWUtYXJyYXlbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6YXV0bzt3aWR0aDpjYWxjKDEwMCUgLSA4cHgpfS5zdGFjay1mcmFtZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNhMGEwYTB9LnN0YWNrLWZyYW1lLWZpbGUtcGF0aFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjE4MHB4O3dpZHRoOjE4MHB4fS5zdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm93cmFwfS5zdGFjay1mcmFtZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmctbGVmdDoxMHB4O3RleHQtYWxpZ246bGVmdDt3aGl0ZS1zcGFjZTpub3JtYWw7d2lkdGg6MjAwcHg7d29yZC13cmFwOmFueXdoZXJlfS5zdGFjay1mcmFtZS1saW5lbm9bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDo4MHB4O3RleHQtYWxpZ246bGVmdDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3dpZHRoOjgwcHh9LnN0YWNrLXRyYWNlLWF1eC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE1cHg7cGFkZGluZy1sZWZ0OjI0cHh9LnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6Y29sdW1uO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDttYXgtaGVpZ2h0OjM2MHB4O292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuO3BhZGRpbmctbGVmdDo4cHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RhY2stdHJhY2UtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9LnN0YWNrLXRyYWNlLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjNweH0uc3RhY2stdHJhY2UtaG9zdC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpncmF5fS5zdGFjay10cmFjZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZH0uc3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEycHg7cGFkZGluZy1yaWdodDozcHh9J119KSxufSkoKSxZdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jb2RlTG9jYXRpb25UeXBlJD10aGlzLnN0b3JlLnBpcGUoZm4oWShndyxpPT5udWxsPT09aT9udWxsOmkuY29kZUxvY2F0aW9uVHlwZSkpKSx0aGlzLm9wVHlwZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWk/bnVsbDppLm9wVHlwZSkpKSx0aGlzLm9wTmFtZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkdSQVBIX09QX0NSRUFUSU9OP251bGw6aS5vcE5hbWUpKSksdGhpcy5leGVjdXRpb25JbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ3csaT0+bnVsbD09PWl8fGkuY29kZUxvY2F0aW9uVHlwZSE9PXRzLkVYRUNVVElPTj9udWxsOmkuZXhlY3V0aW9uSW5kZXgpKSksdGhpcy5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFN0ZSkpLHRoaXMuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh3dGUsR0ksKGkscik9PntpZihudWxsPT09aSlyZXR1cm4gbnVsbDtsZXQgbz1bXTtmb3IobGV0IHMgb2YgaSl7bGV0e2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6dX09cyxkPWwuc3BsaXQoIi8iKSxoPW51bGwhPT1yJiZhPT09ci5ob3N0X25hbWUmJmw9PT1yLmZpbGVfcGF0aDtvLnB1c2goe2hvc3RfbmFtZTphLGZpbGVfcGF0aDpsLGNvbmNpc2VfZmlsZV9wYXRoOmRbZC5sZW5ndGgtMV0sbGluZW5vOmMsZnVuY3Rpb25fbmFtZTp1LGJlbG9uZ3NUb0ZvY3VzZWRGaWxlOmgsZm9jdXNlZDpoJiZjPT09ci5saW5lbm99KX1yZXR1cm4gb30pKSl9b25Tb3VyY2VMaW5lQ2xpY2tlZChlKXtsZXR7aG9zdF9uYW1lOmksZmlsZV9wYXRoOnIsbGluZW5vOm8sZnVuY3Rpb25fbmFtZTpzfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2gocnYoe3N0YWNrRnJhbWU6e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c319KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSJdXSxkZWNsczo3LHZhcnM6MTgsY29uc3RzOltbMywiY29kZUxvY2F0aW9uVHlwZSIsIm9wVHlwZSIsIm9wTmFtZSIsImV4ZWN1dGlvbkluZGV4Iiwic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLCJvblNvdXJjZUxpbmVDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzdGFjay10cmFjZS1jb21wb25lbnQiLDApLFAoIm9uU291cmNlTGluZUNsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU291cmNlTGluZUNsaWNrZWQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY29kZUxvY2F0aW9uVHlwZSIsVygxLDYsaS5jb2RlTG9jYXRpb25UeXBlJCkpKCJvcFR5cGUiLFcoMiw4LGkub3BUeXBlJCkpKCJvcE5hbWUiLFcoMywxMCxpLm9wTmFtZSQpKSgiZXhlY3V0aW9uSW5kZXgiLFcoNCwxMixpLmV4ZWN1dGlvbkluZGV4JCkpKCJzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSIsVyg1LDE0LGkuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkKSkoInN0YWNrRnJhbWVzRm9yRGlzcGxheSIsVyg2LDE2LGkuc3RhY2tGcmFtZXNGb3JEaXNwbGF5JCkpfSxkZXBlbmRlbmNpZXM6W3F0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksUU9lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3RlbnNvckRlYnVnTW9kZTpuLGFycmF5OnR9fTtmdW5jdGlvbiBLT2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLGcoMywiZGl2IiwxNCksTig0LCJkZWJ1Zy10ZW5zb3ItdmFsdWUiLDE1KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDMpO3goMikscWUoIk91dHB1dCBzbG90ICIsaSwiOiIpLHgoMiksYigiZGVidWdUZW5zb3JWYWx1ZSIsci5wYXJzZURlYnVnVGVuc29yVmFsdWUodG8oMixRT2Usci50ZW5zb3JEZWJ1Z01vZGUsZSkpKX19ZnVuY3Rpb24gWk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEwKSxFKDEsS09lLDUsNSwiZGl2IiwxMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmRlYnVnVGVuc29yVmFsdWVzKX19ZnVuY3Rpb24gSk9lKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSgxLCJkaXYiKSgyLCJkaXYiLDMpKDMsInNwYW4iLDQpLEQoNCwiIE9wOiAiKSx2KCksZyg1LCJzcGFuIiw1KSxEKDYpLHYoKSgpLGcoNywiZGl2IiwzKSg4LCJzcGFuIiw0KSxEKDksIiAjIG9mIGlucHV0IHRlbnNvcnM6ICIpLHYoKSxnKDEwLCJzcGFuIiw2KSxEKDExKSx2KCkoKSxnKDEyLCJkaXYiLDMpKDEzLCJzcGFuIiw0KSxEKDE0LCIgIyBvZiBvdXRwdXQgdGVuc29yczogIiksdigpLGcoMTUsInNwYW4iLDcpLEQoMTYpLHYoKSxnKDE3LCJzcGFuIiw4KSxEKDE4KSx2KCkoKSxFKDE5LFpPZSwyLDEsImRpdiIsOSksdigpKCkpLDImbil7bGV0IGU9TSgpO3goNikscWUoIiAiLGUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3BfdHlwZSwiICIpLHgoNSkscWUoIiAiLG51bGw9PWUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEuaW5wdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDUpLHFlKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLm91dHB1dF90ZW5zb3JfaWRzPzA6ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcy5sZW5ndGgsIiAiKSx4KDIpLHFlKCIgKGRlYnVnIG1vZGU6ICIsZS5UZW5zb3JEZWJ1Z01vZGVbZS50ZW5zb3JEZWJ1Z01vZGVdLCIpICIpLHgoMSksYigibmdJZiIsZS5oYXNEZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uICRPZShuLHQpe312YXIgWHRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRlbnNvckRlYnVnTW9kZT16by5VTlNQRUNJRklFRCx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzPSExLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXM9bnVsbCx0aGlzLmRlYnVnVGVuc29yRHR5cGVzPW51bGwsdGhpcy5UZW5zb3JEZWJ1Z01vZGU9em8sdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9V0l9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImV4ZWN1dGlvbi1kYXRhLWNvbXBvbmVudCJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Iixmb2N1c2VkRXhlY3V0aW9uRGF0YToiZm9jdXNlZEV4ZWN1dGlvbkRhdGEiLHRlbnNvckRlYnVnTW9kZToidGVuc29yRGVidWdNb2RlIixoYXNEZWJ1Z1RlbnNvclZhbHVlczoiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yVmFsdWVzOiJkZWJ1Z1RlbnNvclZhbHVlcyIsZGVidWdUZW5zb3JEdHlwZXM6ImRlYnVnVGVuc29yRHR5cGVzIn0sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwiZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImxvYWRpbmdfc2VjdGlvbiIsIiJdLFsxLCJleGVjdXRpb24tZGF0YS1maWVsZCJdLFsxLCJleGVjdXRpb24tZGF0YS1rZXkiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvcC10eXBlIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwiaW5wdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsIm91dHB1dC10ZW5zb3JzIl0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90cyIsNCwibmdJZiJdLFsxLCJvdXRwdXQtc2xvdHMiXSxbImNsYXNzIiwib3V0cHV0LXNsb3QtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwib3V0cHV0LXNsb3QtY29udGFpbmVyIl0sWzEsIm91dHB1dC1zbG90LW51bWJlciJdLFsxLCJvdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJkaXYiKSgyLCJzcGFuIiksRCgzKSx2KCkoKSxFKDQsSk9lLDIwLDUsImRpdiIsMSksRSg1LCRPZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLHYoKSksMiZlKXtsZXQgcj1zdCg2KTt4KDMpLHFlKCIgUHl0aG9uIEV4ZWN1dGlvbiAjIixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCwiICIpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuZm9jdXNlZEV4ZWN1dGlvbkRhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLHFJXSxzdHlsZXM6WycuZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZGVidWctdGVuc29yLXZhbHVlcy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt0ZXh0LWFsaWduOmxlZnR9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdH0uZXhlY3V0aW9uLWRhdGEtZmllbGRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZXhlY3V0aW9uLWRhdGEta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6MTIwcHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDoxMjBweH0uZXhlY3V0aW9uLWRhdGEtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjEwcHh9LmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmY2M4MDtib3JkZXItcmFkaXVzOjRweDtmb250LXNpemU6MTJweDtoZWlnaHQ6MTIwcHg7cGFkZGluZzo1cHg7d2lkdGg6MzYwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZm9jdXMtZXhlY3V0aW9uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTY1MTAwfS5vdXRwdXQtc2xvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo2MHB4O292ZXJmbG93LXg6YXV0bztvdmVyZmxvdy15OmF1dG99Lm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjttYXJnaW4tdG9wOjVweDtwYWRkaW5nOjJweCAwO3ZlcnRpY2FsLWFsaWduOnRvcH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3V0cHV0LXNsb3QtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0ub3V0cHV0LXNsb3QtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlfS5vdXRwdXQtc2xvdC1kZWJ1Zy10ZW5zb3ItdmFsdWVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjNweCAwIDNweCAzMHB4fS5vdXRwdXQtdGVuc29yc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1cHh9J119KSxufSkoKSxRdGU9IlVua25vd24gZHR5cGUiLEt0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhJD10aGlzLnN0b3JlLnBpcGUoZm4oZ20pKSx0aGlzLnRlbnNvckRlYnVnTW9kZSQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/em8uVU5TUEVDSUZJRUQ6aS50ZW5zb3JfZGVidWdfbW9kZSkpKSx0aGlzLmhhc0RlYnVnVGVuc29yVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShnbSxpPT57aWYobnVsbD09PWl8fG51bGw9PT1pLmRlYnVnX3RlbnNvcl92YWx1ZXMpcmV0dXJuITE7Zm9yKGxldCByIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsIT09ciYmci5sZW5ndGg+MClyZXR1cm4hMDtyZXR1cm4hMX0pKSksdGhpcy5kZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+bnVsbD09PWk/bnVsbDppLmRlYnVnX3RlbnNvcl92YWx1ZXMpKSksdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZ20saT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzfHxpLnRlbnNvcl9kZWJ1Z19tb2RlIT09em8uRlVMTF9IRUFMVEgmJmkudGVuc29yX2RlYnVnX21vZGUhPT16by5TSEFQRSlyZXR1cm4gbnVsbDtsZXQgcj1bXTtmb3IobGV0IG8gb2YgaS5kZWJ1Z190ZW5zb3JfdmFsdWVzKWlmKG51bGw9PT1vKXIucHVzaChRdGUpO2Vsc2V7bGV0IHM9U3RyaW5nKGkudGVuc29yX2RlYnVnX21vZGU9PT16by5GVUxMX0hFQUxUSD9vWzJdOm9bMV0pO3IucHVzaChfd1tzXXx8UXRlKX1yZXR1cm4gcn0pKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSJdXSxpbnB1dHM6e2ZvY3VzZWRFeGVjdXRpb25JbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkluZGV4In0sZGVjbHM6Nix2YXJzOjE2LGNvbnN0czpbWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EYXRhIiwidGVuc29yRGVidWdNb2RlIiwiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvclZhbHVlcyIsImRlYnVnVGVuc29yRHR5cGVzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIikpLDImZSYmYigiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixpLmZvY3VzZWRFeGVjdXRpb25JbmRleCkoImZvY3VzZWRFeGVjdXRpb25EYXRhIixXKDEsNixpLmZvY3VzZWRFeGVjdXRpb25EYXRhJCkpKCJ0ZW5zb3JEZWJ1Z01vZGUiLFcoMiw4LGkudGVuc29yRGVidWdNb2RlJCkpKCJoYXNEZWJ1Z1RlbnNvclZhbHVlcyIsVygzLDEwLGkuaGFzRGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yVmFsdWVzIixXKDQsMTIsaS5kZWJ1Z1RlbnNvclZhbHVlcyQpKSgiZGVidWdUZW5zb3JEdHlwZXMiLFcoNSwxNCxpLmRlYnVnVGVuc29yRHR5cGVzJCkpfSxkZXBlbmRlbmNpZXM6W1h0ZSxmdF0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkscmtlPVsic2xpZGVyV3JhcHBlciJdLFBsPU5zKHtwYXNzaXZlOiExfSksY2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT5UZCksbXVsdGk6ITB9LHVrZT1xcChwcyhnbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksImFjY2VudCIpKSxUZD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdWtle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9hbmltYXRpb25Nb2RlPWMsdGhpcy5faW52ZXJ0PSExLHRoaXMuX21heD0xMDAsdGhpcy5fbWluPTAsdGhpcy5fc3RlcD0xLHRoaXMuX3RodW1iTGFiZWw9ITEsdGhpcy5fdGlja0ludGVydmFsPTAsdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmlucHV0PW5ldyBHLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3BlcmNlbnQ9MCx0aGlzLl9pc1NsaWRpbmc9bnVsbCx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PTAsdGhpcy5fc2xpZGVyRGltZW5zaW9ucz1udWxsLHRoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49KCk9Pnt9LHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9wb2ludGVyRG93bj11PT57dGhpcy5kaXNhYmxlZHx8dGhpcy5faXNTbGlkaW5nfHwhdncodSkmJjAhPT11LmJ1dHRvbnx8dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX3RvdWNoSWQ9dncodSk/ZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4udG91Y2hlcy5sZW5ndGg7ZSsrKXtsZXQgaT1uLnRvdWNoZXNbZV0udGFyZ2V0O2lmKHQ9PT1pfHx0LmNvbnRhaW5zKGkpKXJldHVybiBuLnRvdWNoZXNbZV0uaWRlbnRpZmllcn19KHUsdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTp2b2lkIDA7bGV0IGQ9SnRlKHUsdGhpcy5fdG91Y2hJZCk7aWYoZCl7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9pc1NsaWRpbmc9InBvaW50ZXIiLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fb25Nb3VzZWVudGVyKCksdGhpcy5fYmluZEdsb2JhbEV2ZW50cyh1KSx0aGlzLl9mb2N1c0hvc3RFbGVtZW50KCksdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9cCx1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX0pfSx0aGlzLl9wb2ludGVyTW92ZT11PT57aWYoInBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nKXtsZXQgZD1KdGUodSx0aGlzLl90b3VjaElkKTtpZihkKXt1LmNhbmNlbGFibGUmJnUucHJldmVudERlZmF1bHQoKTtsZXQgcD10aGlzLnZhbHVlO3RoaXMuX2xhc3RQb2ludGVyRXZlbnQ9dSx0aGlzLl91cGRhdGVWYWx1ZUZyb21Qb3NpdGlvbihkKSxwIT10aGlzLnZhbHVlJiZ0aGlzLl9lbWl0SW5wdXRFdmVudCgpfX19LHRoaXMuX3BvaW50ZXJVcD11PT57InBvaW50ZXIiPT09dGhpcy5faXNTbGlkaW5nJiYoIXZ3KHUpfHwibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3RvdWNoSWR8fFc1KHUuY2hhbmdlZFRvdWNoZXMsdGhpcy5fdG91Y2hJZCkpJiYodS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCksdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5fdG91Y2hJZD12b2lkIDAsdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQhPXRoaXMudmFsdWUmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSx0aGlzLl92YWx1ZU9uU2xpZGVTdGFydD10aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwpfSx0aGlzLl93aW5kb3dCbHVyPSgpPT57dGhpcy5fbGFzdFBvaW50ZXJFdmVudCYmdGhpcy5fcG9pbnRlclVwKHRoaXMuX2xhc3RQb2ludGVyRXZlbnQpfSx0aGlzLl9kb2N1bWVudD1sLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocyl8fDAsYS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCB1PWUubmF0aXZlRWxlbWVudDt1LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpfSl9Z2V0IGludmVydCgpe3JldHVybiB0aGlzLl9pbnZlcnR9c2V0IGludmVydChlKXt0aGlzLl9pbnZlcnQ9V3QoZSl9Z2V0IG1heCgpe3JldHVybiB0aGlzLl9tYXh9c2V0IG1heChlKXt0aGlzLl9tYXg9UGkoZSx0aGlzLl9tYXgpLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IG1pbigpe3JldHVybiB0aGlzLl9taW59c2V0IG1pbihlKXt0aGlzLl9taW49UGkoZSx0aGlzLl9taW4pLHRoaXMuX3BlcmNlbnQ9dGhpcy5fY2FsY3VsYXRlUGVyY2VudGFnZSh0aGlzLl92YWx1ZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHN0ZXAoKXtyZXR1cm4gdGhpcy5fc3RlcH1zZXQgc3RlcChlKXt0aGlzLl9zdGVwPVBpKGUsdGhpcy5fc3RlcCksdGhpcy5fc3RlcCUxIT0wJiYodGhpcy5fcm91bmRUb0RlY2ltYWw9dGhpcy5fc3RlcC50b1N0cmluZygpLnNwbGl0KCIuIikucG9wKCkubGVuZ3RoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1nZXQgdGh1bWJMYWJlbCgpe3JldHVybiB0aGlzLl90aHVtYkxhYmVsfXNldCB0aHVtYkxhYmVsKGUpe3RoaXMuX3RodW1iTGFiZWw9V3QoZSl9Z2V0IHRpY2tJbnRlcnZhbCgpe3JldHVybiB0aGlzLl90aWNrSW50ZXJ2YWx9c2V0IHRpY2tJbnRlcnZhbChlKXt0aGlzLl90aWNrSW50ZXJ2YWw9ImF1dG8iPT09ZT8iYXV0byI6Im51bWJlciI9PXR5cGVvZiBlfHwic3RyaW5nIj09dHlwZW9mIGU/UGkoZSx0aGlzLl90aWNrSW50ZXJ2YWwpOjB9Z2V0IHZhbHVlKCl7cmV0dXJuIG51bGw9PT10aGlzLl92YWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5fbWluKSx0aGlzLl92YWx1ZX1zZXQgdmFsdWUoZSl7aWYoZSE9PXRoaXMuX3ZhbHVlKXtsZXQgaT1QaShlLDApO3RoaXMuX3JvdW5kVG9EZWNpbWFsJiZpIT09dGhpcy5taW4mJmkhPT10aGlzLm1heCYmKGk9cGFyc2VGbG9hdChpLnRvRml4ZWQodGhpcy5fcm91bmRUb0RlY2ltYWwpKSksdGhpcy5fdmFsdWU9aSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCBkaXNwbGF5VmFsdWUoKXtyZXR1cm4gdGhpcy5kaXNwbGF5V2l0aD90aGlzLmRpc3BsYXlXaXRoKHRoaXMudmFsdWUpOnRoaXMuX3JvdW5kVG9EZWNpbWFsJiZ0aGlzLnZhbHVlJiZ0aGlzLnZhbHVlJTEhPTA/dGhpcy52YWx1ZS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKTp0aGlzLnZhbHVlfHwwfWZvY3VzKGUpe3RoaXMuX2ZvY3VzSG9zdEVsZW1lbnQoZSl9Ymx1cigpe3RoaXMuX2JsdXJIb3N0RWxlbWVudCgpfWdldCBwZXJjZW50KCl7cmV0dXJuIHRoaXMuX2NsYW1wKHRoaXMuX3BlcmNlbnQpfV9zaG91bGRJbnZlcnRBeGlzKCl7cmV0dXJuIHRoaXMudmVydGljYWw/IXRoaXMuaW52ZXJ0OnRoaXMuaW52ZXJ0fV9pc01pblZhbHVlKCl7cmV0dXJuIDA9PT10aGlzLnBlcmNlbnR9X2dldFRodW1iR2FwKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Nzp0aGlzLl9pc01pblZhbHVlKCkmJiF0aGlzLnRodW1iTGFiZWw/dGhpcy5faXNBY3RpdmU/MTA6NzowfV9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKXtsZXQgaT10aGlzLnZlcnRpY2FsP2AxLCAkezEtdGhpcy5wZXJjZW50fSwgMWA6MS10aGlzLnBlcmNlbnQrIiwgMSwgMSI7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iLSI6IiJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7aX0pYH19X2dldFRyYWNrRmlsbFN0eWxlcygpe2xldCBlPXRoaXMucGVyY2VudCxyPXRoaXMudmVydGljYWw/YDEsICR7ZX0sIDFgOmAke2V9LCAxLCAxYDtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpPyIiOiItIn0ke3RoaXMuX2dldFRodW1iR2FwKCl9cHgpIHNjYWxlM2QoJHtyfSlgLGRpc3BsYXk6MD09PWU/Im5vbmUiOiIifX1fZ2V0VGlja3NDb250YWluZXJTdHlsZXMoKXtyZXR1cm57dHJhbnNmb3JtOmB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/Ii0iOiIifSR7dGhpcy5fdGlja0ludGVydmFsUGVyY2VudC8yKjEwMH0lKWB9fV9nZXRUaWNrc1N0eWxlcygpe2xldCBlPTEwMCp0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50LGE9e2JhY2tncm91bmRTaXplOnRoaXMudmVydGljYWw/YDJweCAke2V9JWA6YCR7ZX0lIDJweGAsdHJhbnNmb3JtOmB0cmFuc2xhdGVaKDApIHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiLSJ9JHtlLzJ9JSkke3RoaXMudmVydGljYWx8fCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKT8iIjoiIHJvdGF0ZSgxODBkZWcpIn1gfTtpZih0aGlzLl9pc01pblZhbHVlKCkmJnRoaXMuX2dldFRodW1iR2FwKCkpe2xldCBjLGw9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO2M9dGhpcy52ZXJ0aWNhbD9sPyJCb3R0b20iOiJUb3AiOmw/IlJpZ2h0IjoiTGVmdCIsYVtgcGFkZGluZyR7Y31gXT1gJHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4YH1yZXR1cm4gYX1fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKXtsZXQgZT10aGlzLl9zaG91bGRJbnZlcnRBeGlzKCk7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KC0kezEwMCooKCJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlKT90aGlzLnBlcmNlbnQ6MS10aGlzLnBlcmNlbnQpfSUpYH19X3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybiJydGwiIT10aGlzLl9nZXREaXJlY3Rpb24oKXx8dGhpcy52ZXJ0aWNhbD9lOiFlfV9nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57dGhpcy5faXNBY3RpdmU9ISFlJiYia2V5Ym9hcmQiIT09ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9KSx0aGlzLl9kaXImJih0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249dGhpcy5fZGlyLmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24sUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sUGwpLHRoaXMuX2xhc3RQb2ludGVyRXZlbnQ9bnVsbCx0aGlzLl9yZW1vdmVHbG9iYWxFdmVudHMoKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X29uTW91c2VlbnRlcigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zbGlkZXJEaW1lbnNpb25zPXRoaXMuX2dldFNsaWRlckRpbWVuc2lvbnMoKSx0aGlzLl91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCkpfV9vbkZvY3VzKCl7dGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpfV9vbkJsdXIoKXt0aGlzLm9uVG91Y2hlZCgpfV9vbktleWRvd24oZSl7aWYodGhpcy5kaXNhYmxlZHx8TXIoZSl8fHRoaXMuX2lzU2xpZGluZyYmImtleWJvYXJkIiE9PXRoaXMuX2lzU2xpZGluZylyZXR1cm47bGV0IGk9dGhpcy52YWx1ZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDMzOnRoaXMuX2luY3JlbWVudCgxMCk7YnJlYWs7Y2FzZSAzNDp0aGlzLl9pbmNyZW1lbnQoLTEwKTticmVhaztjYXNlIDM1OnRoaXMudmFsdWU9dGhpcy5tYXg7YnJlYWs7Y2FzZSAzNjp0aGlzLnZhbHVlPXRoaXMubWluO2JyZWFrO2Nhc2UgMzc6dGhpcy5faW5jcmVtZW50KCJydGwiPT10aGlzLl9nZXREaXJlY3Rpb24oKT8xOi0xKTticmVhaztjYXNlIDM4OnRoaXMuX2luY3JlbWVudCgxKTticmVhaztjYXNlIDM5OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/LTE6MSk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9pbmNyZW1lbnQoLTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWkhPXRoaXMudmFsdWUmJih0aGlzLl9lbWl0SW5wdXRFdmVudCgpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKSx0aGlzLl9pc1NsaWRpbmc9ImtleWJvYXJkIixlLnByZXZlbnREZWZhdWx0KCl9X29uS2V5dXAoKXsia2V5Ym9hcmQiPT09dGhpcy5faXNTbGlkaW5nJiYodGhpcy5faXNTbGlkaW5nPW51bGwpfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fYmluZEdsb2JhbEV2ZW50cyhlKXtsZXQgaT10aGlzLl9kb2N1bWVudCxyPXZ3KGUpLHM9cj8idG91Y2hlbmQiOiJtb3VzZXVwIjtpLmFkZEV2ZW50TGlzdGVuZXIocj8idG91Y2htb3ZlIjoibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxQbCksaS5hZGRFdmVudExpc3RlbmVyKHMsdGhpcy5fcG9pbnRlclVwLFBsKSxyJiZpLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsUGwpO2xldCBhPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBhPCJ1IiYmYSYmYS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1fcmVtb3ZlR2xvYmFsRXZlbnRzKCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMuX3BvaW50ZXJVcCxQbCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BvaW50ZXJNb3ZlLFBsKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoZW5kIix0aGlzLl9wb2ludGVyVXAsUGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hjYW5jZWwiLHRoaXMuX3BvaW50ZXJVcCxQbCk7bGV0IGk9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGk8InUiJiZpJiZpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXIpfV9pbmNyZW1lbnQoZSl7bGV0IGk9dGhpcy5fY2xhbXAodGhpcy52YWx1ZXx8MCx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy52YWx1ZT10aGlzLl9jbGFtcChpK3RoaXMuc3RlcCplLHRoaXMubWluLHRoaXMubWF4KX1fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZSl7aWYoIXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBzPXRoaXMuX2NsYW1wKCgodGhpcy52ZXJ0aWNhbD9lLnk6ZS54KS0odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLnRvcDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLmxlZnQpKS8odGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoKSk7aWYodGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKSYmKHM9MS1zKSwwPT09cyl0aGlzLnZhbHVlPXRoaXMubWluO2Vsc2UgaWYoMT09PXMpdGhpcy52YWx1ZT10aGlzLm1heDtlbHNle2xldCBhPXRoaXMuX2NhbGN1bGF0ZVZhbHVlKHMpLGw9TWF0aC5yb3VuZCgoYS10aGlzLm1pbikvdGhpcy5zdGVwKSp0aGlzLnN0ZXArdGhpcy5taW47dGhpcy52YWx1ZT10aGlzLl9jbGFtcChsLHRoaXMubWluLHRoaXMubWF4KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy52YWx1ZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoKSl9X2VtaXRJbnB1dEV2ZW50KCl7dGhpcy5pbnB1dC5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV91cGRhdGVUaWNrSW50ZXJ2YWxQZXJjZW50KCl7aWYoIXRoaXMudGlja0ludGVydmFsfHwhdGhpcy5fc2xpZGVyRGltZW5zaW9ucylyZXR1cm47bGV0IGU7aWYoImF1dG8iPT10aGlzLnRpY2tJbnRlcnZhbCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD90aGlzLl9zbGlkZXJEaW1lbnNpb25zLmhlaWdodDp0aGlzLl9zbGlkZXJEaW1lbnNpb25zLndpZHRoO2U9TWF0aC5jZWlsKDMwLyhpKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pKSkqdGhpcy5zdGVwL2l9ZWxzZSBlPXRoaXMudGlja0ludGVydmFsKnRoaXMuc3RlcC8odGhpcy5tYXgtdGhpcy5taW4pO3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQ9WnRlKGUpP2U6MH1fY3JlYXRlQ2hhbmdlRXZlbnQoZT10aGlzLnZhbHVlKXtsZXQgaT1uZXcgY2xhc3N7fTtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLnZhbHVlPWUsaX1fY2FsY3VsYXRlUGVyY2VudGFnZShlKXtsZXQgaT0oKGV8fDApLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pO3JldHVybiBadGUoaSk/aTowfV9jYWxjdWxhdGVWYWx1ZShlKXtyZXR1cm4gdGhpcy5taW4rZSoodGhpcy5tYXgtdGhpcy5taW4pfV9jbGFtcChlLGk9MCxyPTEpe3JldHVybiBNYXRoLm1heChpLE1hdGgubWluKGUscikpfV9nZXRTbGlkZXJEaW1lbnNpb25zKCl7cmV0dXJuIHRoaXMuX3NsaWRlcldyYXBwZXI/dGhpcy5fc2xpZGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOm51bGx9X2ZvY3VzSG9zdEVsZW1lbnQoZSl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9ibHVySG9zdEVsZW1lbnQoKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoenIpLHcobm4pLHcoaXIsOCksS28oInRhYmluZGV4IiksdyhwdCksdyhCdCksdyhMaSw4KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNsaWRlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KHJrZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9zbGlkZXJXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInNsaWRlciIsMSwibWF0LXNsaWRlciIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoyOSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25CbHVyKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uS2V5ZG93bihvKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25LZXl1cCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uTW91c2VlbnRlcigpfSkoInNlbGVjdHN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksMiZlJiYoQWEoInRhYkluZGV4IixpLnRhYkluZGV4KSx6ZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoImFyaWEtdmFsdWVtYXgiLGkubWF4KSgiYXJpYS12YWx1ZW1pbiIsaS5taW4pKCJhcmlhLXZhbHVlbm93IixpLnZhbHVlKSgiYXJpYS12YWx1ZXRleHQiLG51bGw9PWkudmFsdWVUZXh0P2kuZGlzcGxheVZhbHVlOmkudmFsdWVUZXh0KSgiYXJpYS1vcmllbnRhdGlvbiIsaS52ZXJ0aWNhbD8idmVydGljYWwiOiJob3Jpem9udGFsIiksYXQoIm1hdC1zbGlkZXItZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtc2xpZGVyLWhhcy10aWNrcyIsaS50aWNrSW50ZXJ2YWwpKCJtYXQtc2xpZGVyLWhvcml6b250YWwiLCFpLnZlcnRpY2FsKSgibWF0LXNsaWRlci1heGlzLWludmVydGVkIixpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJtYXQtc2xpZGVyLWludmVydC1tb3VzZS1jb29yZHMiLGkuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkpKCJtYXQtc2xpZGVyLXNsaWRpbmciLGkuX2lzU2xpZGluZykoIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyIsaS50aHVtYkxhYmVsKSgibWF0LXNsaWRlci12ZXJ0aWNhbCIsaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItbWluLXZhbHVlIixpLl9pc01pblZhbHVlKCkpKCJtYXQtc2xpZGVyLWhpZGUtbGFzdC10aWNrIixpLmRpc2FibGVkfHxpLl9pc01pblZhbHVlKCkmJmkuX2dldFRodW1iR2FwKCkmJmkuX3Nob3VsZEludmVydEF4aXMoKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgiLGludmVydDoiaW52ZXJ0IixtYXg6Im1heCIsbWluOiJtaW4iLHN0ZXA6InN0ZXAiLHRodW1iTGFiZWw6InRodW1iTGFiZWwiLHRpY2tJbnRlcnZhbDoidGlja0ludGVydmFsIix2YWx1ZToidmFsdWUiLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsdmFsdWVUZXh0OiJ2YWx1ZVRleHQiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIixpbnB1dDoiaW5wdXQiLHZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U2xpZGVyIl0sZmVhdHVyZXM6WyR0KFtja2VdKSx0dF0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsIm1hdC1zbGlkZXItd3JhcHBlciJdLFsic2xpZGVyV3JhcHBlciIsIiJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXIiXSxbMSwibWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stZmlsbCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRpY2tzIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyIiwzLCJuZ1N0eWxlIl0sWzEsIm1hdC1zbGlkZXItZm9jdXMtcmluZyJdLFsxLCJtYXQtc2xpZGVyLXRodW1iIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwiXSxbMSwibWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSkoMiwiZGl2IiwyKSxOKDMsImRpdiIsMykoNCwiZGl2Iiw0KSx2KCksZyg1LCJkaXYiLDUpLE4oNiwiZGl2Iiw2KSx2KCksZyg3LCJkaXYiLDcpLE4oOCwiZGl2Iiw4KSg5LCJkaXYiLDkpLGcoMTAsImRpdiIsMTApKDExLCJzcGFuIiwxMSksRCgxMiksdigpKCkoKSgpKSwyJmUmJih4KDMpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrQmFja2dyb3VuZFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRyYWNrRmlsbFN0eWxlcygpKSx4KDEpLGIoIm5nU3R5bGUiLGkuX2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCkpLHgoMSksYigibmdTdHlsZSIsaS5fZ2V0VGlja3NTdHlsZXMoKSkseCgxKSxiKCJuZ1N0eWxlIixpLl9nZXRUaHVtYkNvbnRhaW5lclN0eWxlcygpKSx4KDUpLHl0KGkuZGlzcGxheVZhbHVlKSl9LGRlcGVuZGVuY2llczpbd3BdLHN0eWxlczpbJy5tYXQtc2xpZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjhweDtvdXRsaW5lOm5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6YWN0aXZlLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItc2xpZGluZzpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpe2N1cnNvcjpncmFiYmluZ30ubWF0LXNsaWRlci13cmFwcGVyey13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OmV4YWN0O2NvbG9yLWFkanVzdDpleGFjdDtwb3NpdGlvbjphYnNvbHV0ZX0ubWF0LXNsaWRlci10cmFjay13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdHJhY2stZmlsbHtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO292ZXJmbG93OmhpZGRlbn0ubWF0LXNsaWRlci10aWNrc3std2Via2l0LWJhY2tncm91bmQtY2xpcDpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItZm9jdXMtcmluZ3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMHB4O2hlaWdodDozMHB4O2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgxKTtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKTpub3QoLm1hdC1zbGlkZXItc2xpZGluZykgLm1hdC1zbGlkZXItdGh1bWJ7Y3Vyc29yOmdyYWJ9Lm1hdC1zbGlkZXItdGh1bWJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTEwcHg7Ym90dG9tOi0xMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O2JvcmRlcjozcHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMC43KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJvcmRlci1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItcmFkaXVzIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3otaW5kZXg6MTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7dHJhbnNpdGlvbi1kdXJhdGlvbjowbXN9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItaGFzLXRpY2tzLmNkay1mb2N1c2VkOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXIsLm1hdC1zbGlkZXItaGFzLXRpY2tzOmhvdmVyOm5vdCgubWF0LXNsaWRlci1oaWRlLWxhc3QtdGljaykgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7b3BhY2l0eToxfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tzLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpIC5tYXQtc2xpZGVyLXRpY2tze29wYWNpdHk6MX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7ZGlzcGxheTpub25lfS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpmbGV4fS5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7dHJhbnNmb3JtLW9yaWdpbjowIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWJ7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym9yZGVyLXJhZGl1czo1MCUgNTAlIDB9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e29wYWNpdHk6MX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1tb3VzZS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXRvdWNoLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci13aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlKDEpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dHJhbnNmb3JtOnNjYWxlKDApO29wYWNpdHk6MH0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6NHB4O3RyYW5zZm9ybTpzY2FsZSgwLjUpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci1ob3Jpem9udGFse2hlaWdodDo0OHB4O21pbi13aWR0aDoxMjhweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7aGVpZ2h0OjJweDt0b3A6MjNweDtsZWZ0OjhweDtyaWdodDo4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntoZWlnaHQ6MnB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweDtyaWdodDowO3RvcDowfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoycHg7d2lkdGg6MTAwJTt0cmFuc2Zvcm06c2NhbGVYKDApfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgxKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MnB4O3dpZHRoOjEwMCV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcntoZWlnaHQ6MDtvdXRsaW5lOnNvbGlkIDJweDt0b3A6MXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGlja3N7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjA7dG9wOjUwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7dG9wOi0xNXB4O3JpZ2h0Oi0xNXB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7cmlnaHQ6LTE0cHg7dG9wOi00MHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI2cHgpIHNjYWxlKDAuMDEpIHJvdGF0ZSg0NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06bm9uZX0ubWF0LXNsaWRlci12ZXJ0aWNhbHt3aWR0aDo0OHB4O21pbi1oZWlnaHQ6MTI4cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcnt3aWR0aDoycHg7dG9wOjhweDtib3R0b206OHB4O2xlZnQ6MjNweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt3aWR0aDoycHg7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym90dG9tOjA7bGVmdDowfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtoZWlnaHQ6MTAwJTt3aWR0aDoycHg7dHJhbnNmb3JtOnNjYWxlWSgxKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjA7b3V0bGluZTpzb2xpZCAycHg7bGVmdDoxcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tib3R0b206LTE1cHg7bGVmdDotMTVweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3t3aWR0aDoycHg7aGVpZ2h0OjEwMCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye2hlaWdodDoxMDAlO3dpZHRoOjA7bGVmdDo1MCV9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWJ7LXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbn0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtib3R0b206LTE0cHg7bGVmdDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoLTQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLXZlcnRpY2FsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7bGVmdDowO3JpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1maWxse3RyYW5zZm9ybS1vcmlnaW46MCAwfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsLm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlfS5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1jb250YWluZXIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItZm9jdXMtcmluZywubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0LC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcnt0cmFuc2l0aW9uOm5vbmV9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gWnRlKG4pe3JldHVybiFpc05hTihuKSYmaXNGaW5pdGUobil9ZnVuY3Rpb24gdncobil7cmV0dXJuInQiPT09bi50eXBlWzBdfWZ1bmN0aW9uIEp0ZShuLHQpe2xldCBlO3JldHVybiBlPXZ3KG4pPyJudW1iZXIiPT10eXBlb2YgdD9XNShuLnRvdWNoZXMsdCl8fFc1KG4uY2hhbmdlZFRvdWNoZXMsdCk6bi50b3VjaGVzWzBdfHxuLmNoYW5nZWRUb3VjaGVzWzBdOm4sZT97eDplLmNsaWVudFgseTplLmNsaWVudFl9OnZvaWQgMH1mdW5jdGlvbiBXNShuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKWlmKG5bZV0uaWRlbnRpZmllcj09PXQpcmV0dXJuIG5bZV19dmFyIGloPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkbixkbl19KSxufSkoKTtmdW5jdGlvbiBwa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtc2xpZGVyIiwxMSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVyQ2hhbmdlLmVtaXQoci52YWx1ZSkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJtaW4iLDApKCJtYXgiLGUuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQpKCJ2YWx1ZSIsZS5zY3JvbGxCZWdpbkluZGV4KX19ZnVuY3Rpb24gaGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSgxLCJidXR0b24iLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25OYXZpZ2F0ZUxlZnQuZW1pdCgpKX0pLEQoMiwiIDwgIiksdigpLGcoMywiZGl2Iiw4KSxEKDQpLHYoKSxnKDUsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk5hdmlnYXRlUmlnaHQuZW1pdCgpKX0pLEQoNiwiID4gIiksdigpLEUoNyxwa2UsMSwzLCJtYXQtc2xpZGVyIiwxMCksdigpfWlmKDImbil7bGV0IGU9TSgpO3goNCksV0UoIiAiLGUuc2Nyb2xsQmVnaW5JbmRleCwiIH4gIixlLnNjcm9sbEJlZ2luSW5kZXgrZS5kaXNwbGF5Q291bnQtMSwiIG9mICIsZS5udW1FeGVjdXRpb25zLCIgIikseCgzKSxiKCJuZ0lmIixlLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0PjApfX12YXIgZmtlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm5bbix0LGVdfTtmdW5jdGlvbiBta2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS5pbmRleDtyZXR1cm4gb2UoTSgyKS5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQuZW1pdChvKSl9KSxnKDEsImRpdiIsMTUpLEQoMiksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXgscj1NKDIpO3goMSkseHIoInRpdGxlIixlLm9wX3R5cGUpLGIoIm5nQ2xhc3MiLGtiKDMsZmtlLGUuaXNfZ3JhcGg/ImZ1bmMtZ3JhcGgtZXhlY3V0aW9uIjoiIixpPT09ci5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PyJmb2N1c2VkIjoiIixyLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlc1tpXXx8IiIpKSx4KDEpLHFlKCIgIixlLnNob3J0X29wX3R5cGUsIiAiKX19ZnVuY3Rpb24gZ2tlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDEyKSxFKDEsbWtlLDMsNywiZGl2IiwxMyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nRm9yT2YiLGUuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMpfX1mdW5jdGlvbiBfa2Uobix0KXtpZigxJm4mJihLdCgwKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWV4ZWN1dGlvbi1kYXRhIiwxNiksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGUuZm9jdXNlZEV4ZWN1dGlvbkluZGV4KX19dmFyICR0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmVSdW5JZD1udWxsLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnM9ITEsdGhpcy5udW1FeGVjdXRpb25zPTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4PTAsdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD0wLHRoaXMucGFnZVNpemU9MCx0aGlzLmRpc3BsYXlDb3VudD0wLHRoaXMuZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM9W10sdGhpcy5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM9W10sdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg9bnVsbCx0aGlzLmZvY3VzZWRFeGVjdXRpb25EYXRhPW51bGwsdGhpcy5vbk5hdmlnYXRlTGVmdD1uZXcgRyx0aGlzLm9uTmF2aWdhdGVSaWdodD1uZXcgRyx0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZD1uZXcgRyx0aGlzLm9uU2xpZGVyQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0aW1lbGluZS1jb21wb25lbnQiXV0saW5wdXRzOnthY3RpdmVSdW5JZDoiYWN0aXZlUnVuSWQiLGxvYWRpbmdOdW1FeGVjdXRpb25zOiJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsbnVtRXhlY3V0aW9uczoibnVtRXhlY3V0aW9ucyIsc2Nyb2xsQmVnaW5JbmRleDoic2Nyb2xsQmVnaW5JbmRleCIsc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ6InNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixwYWdlU2l6ZToicGFnZVNpemUiLGRpc3BsYXlDb3VudDoiZGlzcGxheUNvdW50IixkaXNwbGF5RXhlY3V0aW9uRGlnZXN0czoiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLGRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlczoiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleDoiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIn0sb3V0cHV0czp7b25OYXZpZ2F0ZUxlZnQ6Im9uTmF2aWdhdGVMZWZ0Iixvbk5hdmlnYXRlUmlnaHQ6Im9uTmF2aWdhdGVSaWdodCIsb25FeGVjdXRpb25EaWdlc3RDbGlja2VkOiJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLG9uU2xpZGVyQ2hhbmdlOiJvblNsaWRlckNoYW5nZSJ9LGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzEsInRpbWVsaW5lLXRpdGxlIl0sWzEsImV4ZWN1dGlvbi1jb3VudCJdLFsxLCJ0b3AtbGV2ZWwtZXhlY3V0aW9ucyJdLFsiY2xhc3MiLCJuYXZpZ2F0aW9uLXNlY3Rpb24iLDQsIm5nSWYiXSxbImNsYXNzIiwiZXhlY3V0aW9uLXRpbWVsaW5lIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibmF2aWdhdGlvbi1zZWN0aW9uIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1sZWZ0IiwzLCJjbGljayJdLFsxLCJuYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm8iXSxbIm1hdC1idXR0b24iLCIiLDEsIm5hdmlnYXRpb24tYnV0dG9uLXJpZ2h0IiwzLCJjbGljayJdLFsiY2xhc3MiLCJ0aW1lbGluZS1zbGlkZXIiLCJzdGVwIiwiMSIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiJdLFsic3RlcCIsIjEiLDEsInRpbWVsaW5lLXNsaWRlciIsMywibWluIiwibWF4IiwidmFsdWUiLCJpbnB1dCJdLFsxLCJleGVjdXRpb24tdGltZWxpbmUiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJleGVjdXRpb24tZGlnZXN0IiwzLCJuZ0NsYXNzIiwidGl0bGUiXSxbMywiZm9jdXNlZEV4ZWN1dGlvbkluZGV4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSgxLCJkaXYiLDApLEQoMiwiIFB5dGhvbiBFeGVjdXRpb24gVGltZWxpbmUgIiksZygzLCJzcGFuIiwxKSxEKDQpLHYoKSgpLGcoNSwiZGl2IiwyKSxFKDYsaGtlLDgsNCwiZGl2IiwzKSxFKDcsZ2tlLDIsMSwiZGl2Iiw0KSxFKDgsX2tlLDIsMSwibmctY29udGFpbmVyIiw1KSx2KCkoKSksMiZlJiYoeCg0KSxxZSgiICgiLGkubnVtRXhlY3V0aW9ucywiKSAiKSx4KDIpLGIoIm5nSWYiLGkubnVtRXhlY3V0aW9ucykseCgxKSxiKCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLHgoMSksYigibmdJZiIsbnVsbCE9PWkuYWN0aXZlUnVuSWQmJm51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25JbmRleCkpfSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLEt0ZSwkbixUZF0sc3R5bGVzOlsiLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgY29sb3I6ICM0MjUwNjY7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxMHB4O1xuICBoZWlnaHQ6IDE1cHg7XG4gIHBhZGRpbmc6IDFweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTJweDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZnVuYy1ncmFwaC1leGVjdXRpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M3ZGJmNTtcbiAgY29sb3I6ICM0ZTU2NjQ7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmQ0YjM7XG4gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4uZXhlY3V0aW9uLWRpZ2VzdC5JbmZOYW5BbGVydFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTUyNTkyO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuXG4uZXhlY3V0aW9uLWRpZ2VzdFtfbmdjb250ZW50LSVDT01QJV06aG92ZXIge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBvdmVyZmxvdy14OiBoaWRkZW47XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW4tdG9wOiA1cHg7XG4gIG1hcmdpbi1ib3R0b206IDVweDtcbn1cblxuLnRpbWVsaW5lLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGhlaWdodDogNDhweDtcbiAgbGVmdDogMzQwcHg7IFxuICBwYWRkaW5nOiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiA0MHB4O1xufVxuXG4gIC50aW1lbGluZS1zbGlkZXIgLm1hdC1zbGlkZXItdGh1bWIge1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHJpZ2h0OiAtNDBweDtcbiAgd2lkdGg6IDgwcHg7XG59XG5cblxuLm5hdmlnYXRpb24tcG9zaXRpb24taW5mb1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBtYXgtd2lkdGg6IDIwMHB4O1xuICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm5hdmlnYXRpb24tc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxpbmUtaGVpZ2h0OiA0OHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIHdpZHRoOiAxMDAlO1xufSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseWtlPVsiX19mb3J3YXJkXyIsIl9fYmFja3dhcmRfIiwiX19pbmZlcmVuY2VfIl0sZW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZShmbihtcykpLHRoaXMubG9hZGluZ051bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZShmbihZKEhJLGk9Pmkuc3RhdGU9PUVlLkxPQURJTkcpKSksdGhpcy5zY3JvbGxCZWdpbkluZGV4JD10aGlzLnN0b3JlLnBpcGUoZm4oZncpKSx0aGlzLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0JD10aGlzLnN0b3JlLnBpcGUoZm4oWSh0aCxsdiwoaSxyKT0+TWF0aC5tYXgoMCxpLXIpKSkpLHRoaXMucGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZShmbihhdikpLHRoaXMuZGlzcGxheUNvdW50JD10aGlzLnN0b3JlLnBpcGUoZm4obHYpKSx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJD10aGlzLnN0b3JlLnBpcGUoZm4oWShkdGUsaT0+aS5tYXAocj0+ZnVuY3Rpb24obix0PTEpe2lmKCFuKXJldHVybntvcF90eXBlOiIoTi9BKSIsc2hvcnRfb3BfdHlwZToiLi4iLGlzX2dyYXBoOiExfTtsZXQgZT15a2UuZmlsdGVyKGk9Pm4ub3BfdHlwZS5zdGFydHNXaXRoKGkpKTtpZihlLmxlbmd0aCl7bGV0IGk9bi5vcF90eXBlLnNsaWNlKGVbMF0ubGVuZ3RoKTtyZXR1cm57b3BfdHlwZTpuLm9wX3R5cGUsc2hvcnRfb3BfdHlwZTppLnNsaWNlKDAsdCksaXNfZ3JhcGg6ITB9fXJldHVybntvcF90eXBlOm4ub3BfdHlwZSxzaG9ydF9vcF90eXBlOm4ub3BfdHlwZS5zbGljZSgwLHQpLGlzX2dyYXBoOiExfX0ocikpKSkpLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzJD10aGlzLnN0b3JlLnBpcGUoZm4oYnRlKSksdGhpcy5mb2N1c2VkRXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZShmbihMNSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQ9dGhpcy5zdG9yZS5waXBlKGZuKHh0ZSkpLHRoaXMubnVtRXhlY3V0aW9ucyQ9dGhpcy5zdG9yZS5waXBlKGZuKHRoKSl9b25OYXZpZ2F0ZUxlZnQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFpfKCkpfW9uTmF2aWdhdGVSaWdodCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSl8oKSl9b25FeGVjdXRpb25EaWdlc3RDbGlja2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZXYoe2Rpc3BsYXlJbmRleDplfSkpfW9uU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJF8oe2luZGV4OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSJdXSxkZWNsczoxMix2YXJzOjMzLGNvbnN0czpbWzMsImFjdGl2ZVJ1bklkIiwibG9hZGluZ051bUV4ZWN1dGlvbnMiLCJudW1FeGVjdXRpb25zIiwic2Nyb2xsQmVnaW5JbmRleCIsInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IiwicGFnZVNpemUiLCJkaXNwbGF5Q291bnQiLCJkaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyIsImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsImZvY3VzZWRFeGVjdXRpb25JbmRleCIsImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLCJvbk5hdmlnYXRlTGVmdCIsIm9uTmF2aWdhdGVSaWdodCIsIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsIm9uU2xpZGVyQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0aW1lbGluZS1jb21wb25lbnQiLDApLFAoIm9uTmF2aWdhdGVMZWZ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVMZWZ0KCl9KSgib25OYXZpZ2F0ZVJpZ2h0IixmdW5jdGlvbigpe3JldHVybiBpLm9uTmF2aWdhdGVSaWdodCgpfSkoIm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25FeGVjdXRpb25EaWdlc3RDbGlja2VkKG8pfSkoIm9uU2xpZGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNsaWRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksaig5LCJhc3luYyIpLGooMTAsImFzeW5jIiksaigxMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiYWN0aXZlUnVuSWQiLFcoMSwxMSxpLmFjdGl2ZVJ1bklkJCkpKCJsb2FkaW5nTnVtRXhlY3V0aW9ucyIsVygyLDEzLGkubG9hZGluZ051bUV4ZWN1dGlvbnMkKSkoIm51bUV4ZWN1dGlvbnMiLFcoMywxNSxpLm51bUV4ZWN1dGlvbnMkKSkoInNjcm9sbEJlZ2luSW5kZXgiLFcoNCwxNyxpLnNjcm9sbEJlZ2luSW5kZXgkKSkoInNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0IixXKDUsMTksaS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQpKSgicGFnZVNpemUiLFcoNiwyMSxpLnBhZ2VTaXplJCkpKCJkaXNwbGF5Q291bnQiLFcoNywyMyxpLmRpc3BsYXlDb3VudCQpKSgiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLFcoOCwyNSxpLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzJCkpKCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLFcoOSwyNyxpLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQpKSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixXKDEwLDI5LGkuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JCkpKCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4IixXKDExLDMxLGkuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCQpKX0sZGVwZW5kZW5jaWVzOlskdGUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIENrZShuLHQpezEmbiYmTigwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIpfWZ1bmN0aW9uIHdrZShuLHQpezEmbiYmKGcoMCwiZGl2IiwzKSxOKDEsInRmLWRlYnVnZ2VyLXYyLWFsZXJ0cyIpLGcoMiwiZGl2Iiw0KSxOKDMsInRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lIikoNCwidGYtZGVidWdnZXItdjItZ3JhcGgiKSx2KCksTig1LCJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zIiksdigpLGcoNiwiZGl2Iiw1KSxOKDcsInRmLWRlYnVnZ2VyLXYyLXNvdXJjZS1maWxlcyIpKDgsInRmLWRlYnVnZ2VyLXYyLXN0YWNrLXRyYWNlIiksdigpKX12YXIgdG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJ1bnM9e30sdGhpcy5ydW5JZHM9W10sdGhpcy5hY3RpdmVSdW5JZD1udWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Z2dlci1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixydW5JZHM6InJ1bklkcyIsYWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIn0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiZGVidWdnZXItY29udGFpbmVyIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZGF0YUF2YWlsYWJsZSIsIiJdLFsxLCJ0b3Atc2VjdGlvbiJdLFsxLCJ0b3AtY2VudGVyLXNlY3Rpb24iXSxbMSwiYm90dG9tLXNlY3Rpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCksRSgxLENrZSwxLDAsInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIiwxKSxFKDIsd2tlLDksMCwibmctdGVtcGxhdGUiLG51bGwsMixlbiksdigpKSwyJmUpe2xldCByPXN0KDMpO3goMSksYigibmdJZiIsMD09PWkucnVuSWRzLmxlbmd0aCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbRHRlLFhlLFB0ZSxrdGUsTnRlLFd0ZSxZdGUsZW5lXSxzdHlsZXM6WyIuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MTtoZWlnaHQ6MzQlO3BhZGRpbmctdG9wOjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYm90dG9tLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9LmRlYnVnZ2VyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0udG9wLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjY2JTtwYWRkaW5nOjZweCAwfXRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoxMHB4O21pbi13aWR0aDoxNjBweDt3aWR0aDpjYWxjKDE1JSAtIDExcHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWFsZXJ0c1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjNTU1fXRmLWRlYnVnZ2VyLXYyLWdyYXBoLWV4ZWN1dGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH10Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjcwJX10Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjU0MHB4O3dpZHRoOjU0MHB4fS50b3AtY2VudGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmF1dG87d2lkdGg6NTUlfXRmLWRlYnVnZ2VyLXYyLXRpbWVsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG5uZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJ1bnMkPXRoaXMuc3RvcmUucGlwZShmbihmbSkpLHRoaXMucnVuc0lkcyQ9dGhpcy5zdG9yZS5waXBlKGZuKFkoZm0saT0+T2JqZWN0LmtleXMoaSkpKSksdGhpcy5hY3RpdmVSdW5JZCQ9dGhpcy5zdG9yZS5waXBlKGZuKG1zKSl9bmdPbkluaXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKF9JKCkpfW5nT25EZXN0cm95KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh2SSgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bnMiLCJydW5JZHMiLCJhY3RpdmVSdW5JZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiZGVidWdnZXItY29tcG9uZW50IiwwKSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSksMiZlJiZiKCJydW5zIixXKDEsMyxpLnJ1bnMkKSkoInJ1bklkcyIsVygyLDUsaS5ydW5zSWRzJCkpKCJhY3RpdmVSdW5JZCIsVygzLDcsaS5hY3RpdmVSdW5JZCQpKX0sZGVwZW5kZW5jaWVzOlt0bmUsZnRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdfSksbn0pKCksS0k9ImRlYnVnZ2VyLXYyIjtmdW5jdGlvbiBxNShuLHQsZSxpLHIpe2lmKGU8PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYWdlU2l6ZTogJHtlfWApO2lmKHQ+aSl0aHJvdyBuZXcgRXJyb3IoYGVuZCBpbmRleCAoJHt0fSkgZXhjZWVkcyB0b3RhbCBudW1iZXIgb2YgaXRlbXMgKCR7aX0pYCk7aWYodC1uPmUpdGhyb3cgbmV3IEVycm9yKCJiZWdpbi1lbmQgc3BhbiBleGNlZWRzIHBhZ2Ugc2l6ZSwgd2hpY2ggaXMgbm90IGFsbG93ZWQiKTtsZXQgbz1bXSxzPU1hdGguZmxvb3Iobi9lKTsoIShzIGluIHIpfHxyW3NdPGUmJnMqZStyW3NdPGkpJiZvLnB1c2gocyk7bGV0IGE9TWF0aC5mbG9vcigodC0xKS9lKTtyZXR1cm4gYSE9PXMmJighKGEgaW4gcil8fGEqZStyW2FdPHQmJnQ8aSkmJm8ucHVzaChhKSxvfXZhciBvbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmxvYWREYXRhJD1VcigoKT0+e2xldCBvPXRoaXMubG9hZERlYnVnZ2VyUnVucyh1bih0aGlzLm9uRGVidWdnZXJEYXRhUG9sbCgpLHRoaXMub25Db3JlUmVsb2FkKCkpKS5waXBlKFhzKCkpLHM9dGhpcy5sb2FkU291cmNlRmlsZUxpc3QobyksYT10aGlzLmNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihvKSxsPXRoaXMuY3JlYXRlTnVtQWxlcnRzQW5kQnJlYWtkb3duTG9hZGVyKG8pLGM9dGhpcy5vbkFsZXJ0VHlwZUZvY3VzZWQoKSx1PXRoaXMuZmV0Y2hFeGVjdXRpb25EaWdlc3RzRm9yQWxlcnRUeXBlRm9jdXMoYyksZD10aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihhKS5waXBlKFhzKCkpLHA9dGhpcy5jcmVhdGVFeGVjdXRpb25EaWdlc3RMb2FkZXIodW4odGhpcy5vbkV4ZWN1dGlvblNjcm9sbCgpLHRoaXMuY3JlYXRlSW5pdGlhbEV4ZWN1dGlvbkRpZ2VzdChkKSx1KSksaD10aGlzLmNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcih1bih0aGlzLm9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpLGQucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QoQjUpKSxCKChbLHksSV0pPT4oe2FjdGl2ZVJ1bklkOnksbG9hZGVkRXhlY3V0aW9uRGF0YTpJLGZvY3VzSW5kZXg6MH0pKSkpKTtyZXR1cm4gdW4obCxwLGgsdGhpcy5jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihvKSxzLHRoaXMub25Tb3VyY2VGaWxlRm9jdXNlZCgpLHRoaXMubG9hZEdyYXBoRXhlY3V0aW9uUGFnZXModGhpcy5vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCkpLHRoaXMubG9hZEdyYXBoT3BTdGFja0ZyYW1lcyh0aGlzLmxvYWRHcmFwaE9wSW5mbygpKSkucGlwZShCKCgpPT4oe30pKSl9LHtkaXNwYXRjaDohMX0pfW9uRGVidWdnZXJEYXRhUG9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoX0kpLHZpKGU9PmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5waXBlKGZ1bmN0aW9uKG4pe3JldHVybiBxdCgodCxlKT0+e2xldCBpLG8scj0hMSxzPSExLGE9ITEsbD0oKT0+YSYmcyYmKGUuY29tcGxldGUoKSwhMCksdT0oKT0+e2E9ITEsaT10LnN1YnNjcmliZShMdChlLHZvaWQgMCwoKT0+e2E9ITAsIWwoKSYmKG98fChvPW5ldyBUZSxuKG8pLnN1YnNjcmliZShMdChlLCgpPT57aT91KCk6cj0hMH0sKCk9PntzPSEwLGwoKX0pKSksbykubmV4dCgpfSkpLHImJihpLnVuc3Vic2NyaWJlKCksaT1udWxsLHI9ITEsdSgpKX07dSgpfSl9KGk9PmkucGlwZShHdCh0KSx2ZygoWyxyXSk9PnhhKHIpKSkpLG90KGUpLEIoKCk9Pnt9KSl9KGp0KGUpLHRoaXMuc3RvcmUuc2VsZWN0KHN0ZSkucGlwZShCKGk9PmZ1bmN0aW9uKG4pe3JldHVybiBuPjZlND82ZTQ6bj40ZTM/bjoyZTN9KGkpKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKHZJKSkpKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChsdygpKSksQigoKT0+e30pKX1vbkNvcmVSZWxvYWQoKXtyZXR1cm4gdW4odGhpcy5hY3Rpb25zJC5waXBlKFRpKHdsLEhhKSksdGhpcy5hY3Rpb25zJC5waXBlKFRpKF91KSkucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLGVdKT0+ZS5zdGF0ZT09PUVlLk5PVF9MT0FERUR8fGUuc3RhdGU9PT1FZS5GQUlMRUQmJm51bGw9PT1lLmxhc3RMb2FkZWRUaW1lSW5NcykpKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssZV0pPT5lPT09S0kpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGx3KCkpKSxCKCgpPT57fSkpfWxvYWREZWJ1Z2dlclJ1bnMoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdChJNSkpLEhlKChbLHtzdGF0ZTppfV0pPT5pIT09RWUuTE9BRElORyksTnQoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goeUkoKSkpLF9uKCgpPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hSdW5zKCkucGlwZShOdChpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChiSSh7cnVuczppfSkpfSksQigoKT0+e30pKSkpfWNyZWF0ZU51bUV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChISSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHdJKCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChNSSh7bnVtRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksQigoKT0+e30pKX0pKX1jcmVhdGVOdW1HcmFwaEV4ZWN1dGlvbkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChwdGUpKSxIZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChESSgpKSksX24oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGlnZXN0cyhyLDAsMCkucGlwZShOdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChBSSh7bnVtR3JhcGhFeGVjdXRpb25zOmEubnVtX2RpZ2VzdHN9KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KGZtKSx0aGlzLnN0b3JlLnNlbGVjdChQNSkpLEhlKChbLGkscl0pPT5PYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmci5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxpXSk9PntsZXQgcj1PYmplY3Qua2V5cyhpKVswXTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKHIsMCwwKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhJKHtudW1BbGVydHM6YS5udW1fYWxlcnRzLGFsZXJ0c0JyZWFrZG93bjphLmFsZXJ0c19icmVha2Rvd259KSl9KSxCKCgpPT57fSkpfSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EZXRlY3RvcihlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KHRoKSx0aGlzLnN0b3JlLnNlbGVjdChodykpLEhlKChbLGkscl0pPT5pPjAmJjA9PT1PYmplY3Qua2V5cyhyLnBhZ2VMb2FkZWRTaXplcykubGVuZ3RoKSxCKCgpPT57fSkpfWNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QoZSl7cmV0dXJuIGUucGlwZShHdCh0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFssLGldKT0+bnVsbCE9PWkpLEIoKFssaSxyLG9dKT0+KHtiZWdpbjowLGVuZDpNYXRoLm1pbihpLG8pLHJ1bklkOnJ9KSkpfW9uRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaShaXyxKXywkXyksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KGZ3KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QobHYpLHRoaXMuc3RvcmUuc2VsZWN0KGF2KSksSGUoKFtlXSk9Pm51bGwhPT1lKSxCKChbLGUsaSxyLG8sc10pPT4oe3J1bklkOmUsYmVnaW46aSxlbmQ6TWF0aC5taW4ocixpK28pLHBhZ2VTaXplOnN9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxCKChbZSxpXSk9Pih7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cTUoZS5iZWdpbixlLmVuZCxlLnBhZ2VTaXplLGkubnVtRXhlY3V0aW9ucyxpLnBhZ2VMb2FkZWRTaXplcyl9KSksSGUoKHttaXNzaW5nUGFnZXM6ZX0pPT5lLmxlbmd0aD4wKSxCKCh7cHJvcHM6ZSxsb2FkZWQ6aSxtaXNzaW5nUGFnZXM6cn0pPT57bGV0e3J1bklkOm8scGFnZVNpemU6c309ZTtyZXR1cm57YmVnaW46clswXSpzLGVuZDpNYXRoLm1pbihpLm51bUV4ZWN1dGlvbnMsKHJbci5sZW5ndGgtMV0rMSkqcykscnVuSWQ6b319KSl9Y3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoaHcpKSxIZSgoW3tiZWdpbjppLGVuZDpyfSxvXSk9PnI+aSYmIWZ1bmN0aW9uKG4sdCxlKXtpZih0Pj1lKXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYmVnaW4gdG8gYmUgbGVzcyB0aGFuIGVuZCwgYnV0IGdvdCBiZWdpbj0ke3R9LCBlbmQ9JHtlfWApO3JldHVybi0xIT09bi5maW5kSW5kZXgoaT0+aS5iZWdpbj49dCYmaS5lbmQ8PWUpfShvLmxvYWRpbmdSYW5nZXMsaSxyKSksTnQoKFt7YmVnaW46aSxlbmQ6cn1dKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goU0koe2JlZ2luOmksZW5kOnJ9KSl9KSxfbigoW3tydW5JZDppLGJlZ2luOnIsZW5kOm99XSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoaSxyLG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goRUkocykpfSksQigoKT0+e30pKSkpfW9uRXhlY3V0aW9uRGlnZXN0Rm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoZXYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChCNSksdGhpcy5zdG9yZS5zZWxlY3QoZncpKSxCKChbZSxpLHIsb10pPT4oe2FjdGl2ZVJ1bklkOmksbG9hZGVkRXhlY3V0aW9uRGF0YTpyLGZvY3VzSW5kZXg6bytlLmRpc3BsYXlJbmRleH0pKSl9Y3JlYXRlRXhlY3V0aW9uRGF0YUFuZFN0YWNrRnJhbWVzTG9hZGVyKGUpe3JldHVybiBlLnBpcGUoSGUoKHthY3RpdmVSdW5JZDppLGxvYWRlZEV4ZWN1dGlvbkRhdGE6cixmb2N1c0luZGV4Om99KT0+bnVsbCE9PWkmJm51bGwhPT1vJiZ2b2lkIDA9PT1yW29dKSxfbigoe2FjdGl2ZVJ1bklkOmksZm9jdXNJbmRleDpyfSk9PntsZXQgbz1yLHM9bysxO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EYXRhKGksbyxzKS5waXBlKE50KGE9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFRJKGEpKX0pLEIoYT0+KHtleGVjdXRpb25EYXRhOmEsYmVnaW46byxlbmQ6c30pKSl9KSxCKCh7ZXhlY3V0aW9uRGF0YTppfSk9PmkuZXhlY3V0aW9uc1swXSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXMpLHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksSGUoKFtpLHIsb10pPT57aWYobnVsbD09PXIpcmV0dXJuITE7Zm9yKGxldCBzIG9mIGkuc3RhY2tfZnJhbWVfaWRzKWlmKHZvaWQgMD09PW9bc10pcmV0dXJuITA7cmV0dXJuITF9KSxfbigoW2kscl0pPT57bGV0IG89aS5zdGFja19mcmFtZV9pZHM7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKHIsbykucGlwZShOdChzPT57bGV0IGE9e307Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDsrK2wpYVtvW2xdXT1zLnN0YWNrX2ZyYW1lc1tsXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczphfSkpfSksQigoKT0+e30pKX0pKX1vbkdyYXBoRXhlY3V0aW9uU2Nyb2xsKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShUaSh0diksQXIoMTAwKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChtcyksdGhpcy5zdG9yZS5zZWxlY3QobXcpLHRoaXMuc3RvcmUuc2VsZWN0KGh0ZSkpLEhlKChbLGUsaV0pPT5udWxsIT09ZSYmaT4wKSxCKChbLGUsaSxyXSk9Pih7cnVuSWQ6ZSxudW1HcmFwaEV4ZWN1dGlvbnM6aSxzY3JvbGxCZWdpbkluZGV4OnJ9KSksR3QodGhpcy5zdG9yZS5zZWxlY3QobXRlKSx0aGlzLnN0b3JlLnNlbGVjdChmdGUpLHRoaXMuc3RvcmUuc2VsZWN0KGd0ZSksdGhpcy5zdG9yZS5zZWxlY3QoX3RlKSksQigoW3tydW5JZDplLG51bUdyYXBoRXhlY3V0aW9uczppLHNjcm9sbEJlZ2luSW5kZXg6cn0sbyxzLGEsbF0pPT57bGV0IGM9cTUocixNYXRoLm1pbihyK3MsaSksbyxpLGwpO3JldHVybiBjPWMuZmlsdGVyKHU9Pi0xPT09YS5pbmRleE9mKHUpKSx7cnVuSWQ6ZSxtaXNzaW5nUGFnZXM6YyxwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczppfX0pKX1sb2FkR3JhcGhFeGVjdXRpb25QYWdlcyhlKXtyZXR1cm4gZS5waXBlKEhlKCh7bWlzc2luZ1BhZ2VzOml9KT0+aS5sZW5ndGg+MCksTnQoKHttaXNzaW5nUGFnZXM6aX0pPT57aS5mb3JFYWNoKHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKElJKHtwYWdlSW5kZXg6cn0pKX0pfSksX24oKHtydW5JZDppLG1pc3NpbmdQYWdlczpyLHBhZ2VTaXplOm8sbnVtR3JhcGhFeGVjdXRpb25zOnN9KT0+e2xldCBhPXJbMF0qbyxsPU1hdGgubWluKChyW3IubGVuZ3RoLTFdKzEpKm8scyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShpLGEsbCkucGlwZShOdChjPT57dGhpcy5zdG9yZS5kaXNwYXRjaChQSShjKSl9KSxCKCgpPT57fSkpfSkpfWxvYWRHcmFwaE9wSW5mbygpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoaXYsbnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChDdGUpKSxIZSgoW2UsaSxyXSk9PntsZXR7Z3JhcGhfaWQ6byxvcF9uYW1lOnN9PWU7cmV0dXJuIShudWxsPT09aXx8dm9pZCAwIT09cltvXSYmcltvXS5oYXMocykmJihyW29dLmdldChzKT09PUVlLkxPQURJTkd8fHJbb10uZ2V0KHMpPT09RWUuTE9BREVEKSl9KSxOdCgoW3tncmFwaF9pZDplLG9wX25hbWU6aX1dKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChSSSh7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9KSkpLF9uKChbZSxpXSk9PntsZXR7Z3JhcGhfaWQ6cixvcF9uYW1lOm99PWU7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEdyYXBoT3BJbmZvKGkscixvKS5waXBlKE50KHM9PnRoaXMuc3RvcmUuZGlzcGF0Y2goT0koe2dyYXBoT3BJbmZvUmVzcG9uc2U6c30pKSksQihzPT4oe3J1bklkOmksc3RhY2tGcmFtZUlkczpzLnN0YWNrX2ZyYW1lX2lkc30pKSl9KSl9bG9hZEdyYXBoT3BTdGFja0ZyYW1lcyhlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFY1KSksQigoW3tydW5JZDppLHN0YWNrRnJhbWVJZHM6cn0sb10pPT4oe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6ci5maWx0ZXIoYT0+dm9pZCAwPT09b1thXSl9KSksSGUoKHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnJ9KT0+bnVsbCE9PWkmJnIubGVuZ3RoPjApLF9uKCh7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFN0YWNrRnJhbWVzKGkscikucGlwZShOdChvPT57bGV0IHM9e307Zm9yKGxldCBhPTA7YTxyLmxlbmd0aDsrK2Epc1tyW2FdXT1vLnN0YWNrX2ZyYW1lc1thXTt0aGlzLnN0b3JlLmRpc3BhdGNoKHV3KHtzdGFja0ZyYW1lczpzfSkpfSksQigoKT0+e30pKSkpfW9uQWxlcnRUeXBlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkoS18pLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChWSSksdGhpcy5zdG9yZS5zZWxlY3QobHRlKSx0aGlzLnN0b3JlLnNlbGVjdChjdGUpLHRoaXMuc3RvcmUuc2VsZWN0KFA1KSksSGUoKFssZSxpLHIsbyxzXSk9Pm51bGwhPT1lJiZudWxsIT09aSYmcj4wJiYobnVsbD09PW98fE9iamVjdC5rZXlzKG8pLmxlbmd0aDxyKSYmcy5zdGF0ZSE9PUVlLkxPQURJTkcpLE50KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGN3KCkpKSxfbigoWyxlLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoQWxlcnRzKGUsMCwtMSxpKSksTnQoKHtudW1fYWxlcnRzOmUsYWxlcnRzX2JyZWFrZG93bjppLGFsZXJ0X3R5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKENJKHtudW1BbGVydHM6ZSxhbGVydHNCcmVha2Rvd246aSxhbGVydFR5cGU6cixiZWdpbjpvLGVuZDpzLGFsZXJ0czphfSkpfSkpfWZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGUpe3JldHVybiBlLnBpcGUoR3QodGhpcy5zdG9yZS5zZWxlY3QoYXYpLHRoaXMuc3RvcmUuc2VsZWN0KGx2KSx0aGlzLnN0b3JlLnNlbGVjdCh0aCksdGhpcy5zdG9yZS5zZWxlY3QoaHcpLHRoaXMuc3RvcmUuc2VsZWN0KG1zKSksQigoW2kscixvLHMsYSxsXSk9PntsZXQgdT1pLmFsZXJ0c1swXS5leGVjdXRpb25faW5kZXgsZD1xNShNYXRoLm1heCgwLHUtTWF0aC5mbG9vcihvLzIpKSxNYXRoLm1pbih1K01hdGguZmxvb3Ioby8yKSxzKSxyLHMsYS5wYWdlTG9hZGVkU2l6ZXMpO3JldHVybiAwPT09ZC5sZW5ndGg/e3J1bklkOmwsYmVnaW46MCxlbmQ6MH06e3J1bklkOmwsYmVnaW46ZFswXSpyLGVuZDpNYXRoLm1pbihhLm51bUV4ZWN1dGlvbnMsKGRbZC5sZW5ndGgtMV0rMSkqcil9fSkpfWxvYWRTb3VyY2VGaWxlTGlzdChlKXtyZXR1cm4gZS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChNdGUpKSxIZSgoWyxpLHJdKT0+bnVsbCE9PWkmJnIuc3RhdGUhPT1FZS5MT0FESU5HKSxOdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChrSSgpKSksX24oKFssaV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlTGlzdChpKS5waXBlKE50KHI9PntsZXQgbz1bXTtyLmZvckVhY2goKFtzLGFdKT0+e28ucHVzaCh7aG9zdF9uYW1lOnMsZmlsZV9wYXRoOmF9KX0pLHRoaXMuc3RvcmUuZGlzcGF0Y2goRkkoe3NvdXJjZUZpbGVzOm99KSl9KSxCKCgpPT57fSkpKSl9b25Tb3VyY2VGaWxlRm9jdXNlZCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoVGkocnYpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KG1zKSx0aGlzLnN0b3JlLnNlbGVjdChINSksdGhpcy5zdG9yZS5zZWxlY3QoakkpKSxCKChbZSxpLHIsb10pPT4oe3J1bklkOmksc3RhY2tGcmFtZTplLnN0YWNrRnJhbWUsZmlsZUluZGV4OnIsZmlsZUNvbnRlbnQ6b30pKSxIZSgoe3J1bklkOmUsZmlsZUNvbnRlbnQ6aX0pPT5udWxsIT09ZSYmbnVsbCE9PWkmJmkubG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRCksTnQoKHtzdGFja0ZyYW1lOmV9KT0+dGhpcy5zdG9yZS5kaXNwYXRjaChOSSh7aG9zdF9uYW1lOmUuaG9zdF9uYW1lLGZpbGVfcGF0aDplLmZpbGVfcGF0aH0pKSksX24oKHtmaWxlSW5kZXg6ZSxydW5JZDppfSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFNvdXJjZUZpbGUoaSxlKS5waXBlKE50KHI9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKExJKHIpKX0pLEIoKCk9Pnt9KSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUihnSSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLHNuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksYW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZV19KSxufSkoKSxaST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksbG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxaSSxDZF19KSxufSkoKSxjbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLHJoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxKST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UscmhdfSksbn0pKCksdW5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxKSV19KSxufSkoKSxkbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLEpJXX0pLG59KSgpLHBuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsWkldfSksbn0pKCksaG5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxwbmUsUmksaWhdfSksbn0pKCksZm5lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltzbmUsa2UsTWwsbG5lLGFuZSxjbmUsdW5lLGRuZSxldGUsaG5lLFJyLmZvckZlYXR1cmUoZHcsb3RlKSxMby5mb3JGZWF0dXJlKFtvbmVdKSxSdS5mb3JQbHVnaW4oS0ksbm5lKV19KSxufSkoKSwkST13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBDbG9zZWQiKSxlUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgUGFuZSBUb2dnbGVkIiksdFA9d2UoIltNZXRyaWNzXSBTbGlkZSBvdXQgc2V0dGluZ3MgbWVudSB0b2dnbGVkIiksblA9d2UoIltNZXRyaWNzXSBVc2VyIHJlcXVlc3RlZCB0byBvcGVuIHRoZSBzbGlkZSBvdXQgbWVudSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGlQPXdlKCJbTWV0cmljc10gVXNlciBjaGFuZ2VkIHRoZSB0YWIgaW4gdGhlIHRhYmxlIGVkaXRvciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHJQPXdlKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgY2xvc2VkIiksb1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBSZXF1ZXN0ZWQiKSxzUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgRmFpbGVkIiksbFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIENhcmQgU3RhdGUgVXBkYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGN2PXdlKCJbTWV0cmljc10gTWV0cmljcyBDYXJkIEZ1bGwgU2l6ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIENoYW5nZSBUb29sdGlwIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdVA9KHdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBUb2dnbGUgU2hvdyBEYXRhIERvd25sb2FkIiksd2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgVG9nZ2xlIElnbm9yZSBPdXRsaWVyIikpLGRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBYIEF4aXMgVHlwZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBDYXJkIFdpZHRoIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUmVzZXQgQ2FyZCBXaWR0aCIpLGZQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBTY2FsYXIgU21vb3RoaW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbVA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgUGFydGl0aW9uIE5vbiBNb25vdG9uaWMgWCBUb2dnbGVkIiksZ1A9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIEJyaWdodG5lc3MiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxfUD13ZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgSW1hZ2UgQ29udHJhc3QiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2UD13ZSgiW01ldHJpY3NdIEltYWdlIEJyaWdodG5lc3MgU2V0dGluZyBSZXNldCIpLHlQPXdlKCJbTWV0cmljc10gSW1hZ2UgQ29udHJhc3QgU2V0dGluZyBSZXNldCIpLGJQPXdlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJbWFnZSBTaG93IEFjdHVhbCBTaXplIikseFA9d2UoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEhpc3RvZ3JhbSBNb2RlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksQ1A9d2UoIltNZXRyaWNzXSBNdWx0aXBsZSBUaW1lIFNlcmllcyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx3UD13ZSgiW01ldHJpY3NdIEZldGNoIFRpbWUgU2VyaWVzIFJlcXVlc3QgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTVA9d2UoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXNwb25zZSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx1dj13ZSgiW01ldHJpY3NdIENhcmQgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksU1A9d2UoIltNZXRyaWNzXSBDYXJkIFN0ZXAgU2xpZGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxFUD13ZSgiW01ldHJpY3NdIFRhZyBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFRQPXdlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgR3JvdXAgRXhwYW5zaW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkdj13ZSgiW01ldHJpY3NdIENhcmQgUGluIFN0YXRlIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxEUD13ZSgiW01ldHJpY3NdIFRvZ2dsZSBWaXNpYmxlIFBsdWdpbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEFQPXdlKCJbTWV0cmljc10gVG9nZ2xlIFNob3cgQWxsIFBsdWdpbnMiKSxvaD13ZSgiW01ldHJpY3NdIFRpbWUgU2VsZWN0aW9uIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJUD13ZSgiW01ldHJpY3NdIENhcmQgVmlldyBCb3ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1uZT13ZSgiW01ldHJpY3NdIExpbmtlZCBUaW1lIFNlbGVjdGlvbiBDbGVhcmVkIiksUFA9d2UoIltNZXRyaWNzXSBMaW5rZWQgVGltZSBFbmFibGUgVG9nZ2xlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZ25lPXdlKCJbTWV0cmljc10gU29ydGluZyBEYXRhIFRhYmxlIEJ5IEhlYWRlciIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHB2PXdlKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSUD13ZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc2g9d2UoIltNZXRyaWNzXSBUaW1lIFNlbGVjdG9yIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPUD13ZSgiW01ldHJpY3NdIFJhbmdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX25lPXdlKCJbTWV0cmljc10gSGlkZSBFbXB0eSBDYXJkcyBDaGFuZ2VkIik7ZnVuY3Rpb24geXcobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIEdvPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uU0VUVElOR1NfVEVYVD0ic2V0dGluZ3NUZXh0IixuLlNFVFRJTkdTX1NMSURFUj0ic2V0dGluZ3NTbGlkZXIiLG4uQ0hBTkdFX1RPX1NJTkdMRT0iY2hhbmdlVG9TaW5nbGUiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KEdvfHwoR289e30pKSxHbykpKCksV2E9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShXYXx8KFdhPXt9KSksV2EpKSgpLFZzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0oVnN8fChWcz17fSkpLFZzKSkoKTtmdW5jdGlvbiBrUChuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9PmJ3KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUFrZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gQWtlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiBidyhuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYodm0obltlXSkmJnZtKHRbaV0pKXtsZXQgcj1lLG89aTtlPXZuZShuLGUrMSksaT12bmUodCxpKzEpO2xldCBzPU51bWJlcihuLnNsaWNlKHIsZSkpLGE9TnVtYmVyKHQuc2xpY2UobyxpKSk7aWYoczxhKXJldHVybi0xO2lmKHM+YSlyZXR1cm4gMX1lbHNle2lmKFk1KG5bZV0pKXtpZighWTUodFtpXSkpcmV0dXJuLTF9ZWxzZXtpZihZNSh0W2ldKSlyZXR1cm4gMTtpZihuW2VdPHRbaV0pcmV0dXJuLTE7aWYobltlXT50W2ldKXJldHVybiAxfWUrKyxpKyt9fX1mdW5jdGlvbiB2bmUobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighdm0obltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIXZtKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIXZtKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhdm0obltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gdm0obil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gWTUobil7cmV0dXJuIi8iPT09bnx8dm0obil9dmFyIGZ2PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oZnZ8fChmdj17fSkpLGZ2KSkoKSxtdD0oKCk9PihmdW5jdGlvbihuKXtuLkNPTE9SPSJDT0xPUiIsbi5SRUxBVElWRV9USU1FPSJSRUxBVElWRV9USU1FIixuLlJVTj0iUlVOIixuLlNURVA9IlNURVAiLG4uVElNRT0iVElNRSIsbi5WQUxVRT0iVkFMVUUiLG4uU01PT1RIRUQ9IlNNT09USEVEIixuLlZBTFVFX0NIQU5HRT0iVkFMVUVfQ0hBTkdFIixuLlNUQVJUX1NURVA9IlNUQVJUX1NURVAiLG4uRU5EX1NURVA9IkVORF9TVEVQIixuLlNUQVJUX1ZBTFVFPSJTVEFSVF9WQUxVRSIsbi5FTkRfVkFMVUU9IkVORF9WQUxVRSIsbi5NSU5fVkFMVUU9Ik1JTl9WQUxVRSIsbi5NQVhfVkFMVUU9Ik1BWF9WQUxVRSIsbi5QRVJDRU5UQUdFX0NIQU5HRT0iUEVSQ0VOVEFHRV9DSEFOR0UiLG4uU1RFUF9BVF9NQVg9IlNURVBfQVRfTUFYIixuLlNURVBfQVRfTUlOPSJTVEVQX0FUX01JTiIsbi5NRUFOPSJNRUFOIixuLlJBV19DSEFOR0U9IlJBV19DSEFOR0UifShtdHx8KG10PXt9KSksbXQpKSgpLF9vPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TSU5HTEU9MF09IlNJTkdMRSIsbltuLlJBTkdFPTFdPSJSQU5HRSJ9KF9vfHwoX289e30pKSxfbykpKCkscWE9KCgpPT4oZnVuY3Rpb24obil7bltuLkFTQ0VORElORz0wXT0iQVNDRU5ESU5HIixuW24uREVTQ0VORElORz0xXT0iREVTQ0VORElORyJ9KHFhfHwocWE9e30pKSxxYSkpKCk7ZnVuY3Rpb24gWDUobix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9X2QoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIFBrZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPVg1KG8sbixlKTtpZihudWxsPT09cyljb250aW51ZTtsZXQgYT10Lmhhc093blByb3BlcnR5KG8pP3Rbb10uaW5kZXg6bnVsbCxsPVg1KG8sbixpKSxjPW51bGwhPT1hJiZhPT09bDsobnVsbCE9PWEmJmE+c3x8bnVsbD09PWF8fGMpJiYocltvXT17aW5kZXg6cyxpc0Nsb3Nlc3Q6ITF9KX1yZXR1cm4gcn1mdW5jdGlvbiB5bmUobil7bGV0IHQ9eXcobi5ydW5Ub0xvYWRTdGF0ZSxlPT5lPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQpO3JldHVybnsuLi5uLHJ1blRvTG9hZFN0YXRlOnR9fWZ1bmN0aW9uIGJuZShuLHQsZSxpKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoW24sdCxlfHwiIixpXSl9dmFye2luaXRpYWxTdGF0ZTpDbmUscmVkdWNlcnM6UmtlfT1ZZih7dGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRUb1Bpbm5lZENvcHk6bmV3IE1hcCxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6bmV3IE1hcCxwaW5uZWRDYXJkVG9PcmlnaW5hbDpuZXcgTWFwLHVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzOltdLGNhcmRNZXRhZGF0YU1hcDp7fSxjYXJkU3RhdGVNYXA6e30sY2FyZFN0ZXBJbmRleDp7fSx0YWdGaWx0ZXI6IiIsdGFnR3JvdXBFeHBhbmRlZDpuZXcgTWFwLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbCxsaW5rZWRUaW1lRW5hYmxlZDohMSxzdGVwU2VsZWN0b3JFbmFibGVkOiExLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDohMSxzaW5nbGVTZWxlY3Rpb25IZWFkZXJzOlt7dHlwZTptdC5SVU4sbmFtZToicnVuIixkaXNwbGF5TmFtZToiUnVuIixlbmFibGVkOiEwfSx7dHlwZTptdC5TTU9PVEhFRCxuYW1lOiJzbW9vdGhlZCIsZGlzcGxheU5hbWU6IlNtb290aGVkIixlbmFibGVkOiEwfSx7dHlwZTptdC5WQUxVRSxuYW1lOiJ2YWx1ZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5TVEVQLG5hbWU6InN0ZXAiLGRpc3BsYXlOYW1lOiJTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5SRUxBVElWRV9USU1FLG5hbWU6InJlbGF0aXZlIixkaXNwbGF5TmFtZToiUmVsYXRpdmUiLGVuYWJsZWQ6ITB9XSxyYW5nZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOm10LlJVTixuYW1lOiJydW4iLGRpc3BsYXlOYW1lOiJSdW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1JTl9WQUxVRSxuYW1lOiJtaW4iLGRpc3BsYXlOYW1lOiJNaW4iLGVuYWJsZWQ6ITB9LHt0eXBlOm10Lk1BWF9WQUxVRSxuYW1lOiJtYXgiLGRpc3BsYXlOYW1lOiJNYXgiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNUQVJUX1ZBTFVFLG5hbWU6InN0YXJ0IixkaXNwbGF5TmFtZToiU3RhcnQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LkVORF9WQUxVRSxuYW1lOiJlbmQiLGRpc3BsYXlOYW1lOiJFbmQgVmFsdWUiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlZBTFVFX0NIQU5HRSxuYW1lOiJ2YWx1ZUNoYW5nZSIsZGlzcGxheU5hbWU6IlZhbHVlIixlbmFibGVkOiEwfSx7dHlwZTptdC5QRVJDRU5UQUdFX0NIQU5HRSxuYW1lOiJwZXJjZW50YWdlQ2hhbmdlIixkaXNwbGF5TmFtZToiJSIsZW5hYmxlZDohMH0se3R5cGU6bXQuU1RBUlRfU1RFUCxuYW1lOiJzdGFydFN0ZXAiLGRpc3BsYXlOYW1lOiJTdGFydCBTdGVwIixlbmFibGVkOiEwfSx7dHlwZTptdC5FTkRfU1RFUCxuYW1lOiJlbmRTdGVwIixkaXNwbGF5TmFtZToiRW5kIFN0ZXAiLGVuYWJsZWQ6ITB9LHt0eXBlOm10LlNURVBfQVRfTUFYLG5hbWU6InN0ZXBBdE1heCIsZGlzcGxheU5hbWU6IlN0ZXAgQXQgTWF4IixlbmFibGVkOiExfSx7dHlwZTptdC5TVEVQX0FUX01JTixuYW1lOiJzdGVwQXRNaW4iLGRpc3BsYXlOYW1lOiJTdGVwIEF0IE1pbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuTUVBTixuYW1lOiJtZWFuIixkaXNwbGF5TmFtZToiTWVhbiIsZW5hYmxlZDohMX0se3R5cGU6bXQuUkFXX0NIQU5HRSxuYW1lOiJyYXdDaGFuZ2UiLGRpc3BsYXlOYW1lOiJSYXciLGVuYWJsZWQ6ITF9XSxmaWx0ZXJlZFBsdWdpblR5cGVzOm5ldyBTZXQsc3RlcE1pbk1heDp7bWluOjEvMCxtYXg6LTEvMH19LHtpc1NldHRpbmdzUGFuZU9wZW46ITAsaXNTbGlkZW91dE1lbnVPcGVuOiExLHRhYmxlRWRpdG9yU2VsZWN0ZWRUYWI6X28uU0lOR0xFLHRpbWVTZXJpZXNEYXRhOntzY2FsYXJzOnt9LGhpc3RvZ3JhbXM6e30saW1hZ2VzOnt9fSxzZXR0aW5nczpxRCxzZXR0aW5nT3ZlcnJpZGVzOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9LChuLHQsZSk9PnVzKHQsZSk/bjp7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6RWUuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sdGFnTWV0YWRhdGE6e3NjYWxhcnM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGhpc3RvZ3JhbXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdUb1J1bnM6e319LGltYWdlczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fX0sY2FyZExpc3Q6W10sY2FyZE1ldGFkYXRhTWFwOnt9LHZpc2libGVDYXJkTWFwOm5ldyBNYXB9KSxRNT1DbmUsT2tlPXdyKENuZSxTZShLMCwobix7cm91dGVLaW5kOnQscGFydGlhbFN0YXRlOmV9KT0+e2lmKHQhPT1maS5FWFBFUklNRU5UJiZ0IT09ZmkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybiBuO2xldCBpPW5ldyBTZXQ7Zm9yKGxldCB1IG9mIG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwua2V5cygpKXtsZXR7cGx1Z2luOmQsdGFnOnAscnVuSWQ6aCxzYW1wbGU6Zn09bi5jYXJkTWV0YWRhdGFNYXBbdV07aS5hZGQoYm5lKGQscCxoLGYpKX1sZXQgcj1lLG89W107Zm9yKGxldCB1IG9mWy4uLm4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsLi4uci5tZXRyaWNzLnBpbm5lZENhcmRzXSl7bGV0IGQ9Ym5lKHUucGx1Z2luLHUudGFnLHUucnVuSWQsdS5zYW1wbGUpO2kuaGFzKGQpfHwoaS5hZGQoZCksby5wdXNoKHUpKX1sZXQgcz12VihvLG4uY2FyZExpc3Qsbi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkVG9QaW5uZWRDb3B5LG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLG4ucGlubmVkQ2FyZFRvT3JpZ2luYWwsbi5jYXJkU3RlcEluZGV4LG4uY2FyZFN0YXRlTWFwKSxhPXIubWV0cmljcy5zbW9vdGhpbmcsbD1uLnNldHRpbmdPdmVycmlkZXM7aWYoTnVtYmVyLmlzRmluaXRlKGEpJiZudWxsIT09YSl7bGV0IHU9TWF0aC5tYXgoMCxNYXRoLm1pbiguOTk5LE51bWJlcihhLnRvUHJlY2lzaW9uKDMpKSkpO2w9ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dX19bGV0IGM9ey4uLm4sLi4ucyxzZXR0aW5nT3ZlcnJpZGVzOmx9O3JldHVybiBudWxsIT09ci5tZXRyaWNzLnRhZ0ZpbHRlciYmKGMudGFnRmlsdGVyPXIubWV0cmljcy50YWdGaWx0ZXIpLGN9KSxTZShmYywobix7cGFydGlhbFNldHRpbmdzOnR9KT0+e2xldCBlPXt9O3QudG9vbHRpcFNvcnQmJk9iamVjdC52YWx1ZXMobW8pLmluY2x1ZGVzKHQudG9vbHRpcFNvcnQpJiYoZS50b29sdGlwU29ydD10LnRvb2x0aXBTb3J0KSwibnVtYmVyIj09dHlwZW9mIHQudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGUuY2FyZE1pbldpZHRoPXQudGltZVNlcmllc0NhcmRNaW5XaWR0aCksImJvb2xlYW4iPT10eXBlb2YgdC5pZ25vcmVPdXRsaWVycyYmKGUuaWdub3JlT3V0bGllcnM9dC5pZ25vcmVPdXRsaWVycyksIm51bWJlciI9PXR5cGVvZiB0LnNjYWxhclNtb290aGluZyYmKGUuc2NhbGFyU21vb3RoaW5nPXQuc2NhbGFyU21vb3RoaW5nKTtsZXQgaT10LnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ/P24uaXNTZXR0aW5nc1BhbmVPcGVuLHI9dC5zdGVwU2VsZWN0b3JFbmFibGVkPz9uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz10LnJhbmdlU2VsZWN0aW9uRW5hYmxlZD8/bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQscz10LmxpbmtlZFRpbWVFbmFibGVkPz9uLmxpbmtlZFRpbWVFbmFibGVkLGE9dC5zaW5nbGVTZWxlY3Rpb25IZWFkZXJzPz9uLnNpbmdsZVNlbGVjdGlvbkhlYWRlcnMsbD10LnJhbmdlU2VsZWN0aW9uSGVhZGVycz8/bi5yYW5nZVNlbGVjdGlvbkhlYWRlcnM7cmV0dXJuey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOmksc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpvLGxpbmtlZFRpbWVFbmFibGVkOnMsc2luZ2xlU2VsZWN0aW9uSGVhZGVyczphLHJhbmdlU2VsZWN0aW9uSGVhZGVyczpsLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLC4uLmV9fX0pLFNlKEhhLHdsLG49PntsZXQgdD1uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLnN0YXRlPT09RWUuTE9BRElORz9FZS5MT0FESU5HOkVlLk5PVF9MT0FERUQsZT15dyhuLnRpbWVTZXJpZXNEYXRhLChpLHIpPT55dyhpLG89PlVhKHIpP3l3KG8scz0+eW5lKHMpKTp5bmUobykpKTtyZXR1cm57Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTp0fSx0aW1lU2VyaWVzRGF0YTplfX0pLFNlKG9QLG49Pih7Li4ubix0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7Li4ubi50YWdNZXRhZGF0YUxvYWRTdGF0ZSxzdGF0ZTpFZS5MT0FESU5HfX0pKSxTZShhUCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6RWUuRkFJTEVEfX0pKSxTZShzUCwobix7dGFnTWV0YWRhdGE6dH0pPT57bGV0IGU9e3NjYWxhcnM6eG5lKHQsV24uU0NBTEFSUyksaGlzdG9ncmFtczp4bmUodCxXbi5ISVNUT0dSQU1TKSxpbWFnZXM6dFtXbi5JTUFHRVNdfSxpPXt9LHI9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgcixpPWU7aWYoVWEoaSkpe2lmKCF6YShpKSl0aHJvdyBuZXcgRXJyb3IoIk11bHRpLXJ1biwgc2FtcGxlZCBwbHVnaW4gc3VwcG9ydCBub3QgeWV0IGltcGxlbWVudGVkIik7e2xldCBvPW5baV0udGFnUnVuU2FtcGxlZEluZm87Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKG8pKWZvcihsZXQgYSBvZiBPYmplY3Qua2V5cyhvW3NdKSl7bGV0e21heFNhbXBsZXNQZXJTdGVwOmx9PW9bc11bYV07Zm9yKGxldCBjPTA7YzxsO2MrKyl0LnB1c2goe3BsdWdpbjppLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmMsbnVtU2FtcGxlOmx9KX19fWVsc2UgaWYoemEoaSkpe3I9bltpXS50YWdUb1J1bnM7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHIpKWZvcihsZXQgcyBvZiByW29dKXQucHVzaCh7cGx1Z2luOmksdGFnOm8scnVuSWQ6c30pfWVsc2V7cj1uW2ldLnRhZ1RvUnVucztmb3IobGV0IG8gb2YgT2JqZWN0LmtleXMocikpdC5wdXNoKHtwbHVnaW46aSx0YWc6byxydW5JZDpudWxsfSl9fXJldHVybiB0fShlKSxvPVtdO2ZvcihsZXQgaCBvZiByKXtsZXQgZj1fVihoKTtpW2ZdPWgsby5wdXNoKGYpfWxldCBzPW4udGFnR3JvdXBFeHBhbmRlZDtpZigwPT09bi50YWdHcm91cEV4cGFuZGVkLnNpemUpe2xldCBmPWtQKG8ubWFwKG09Pih7Li4uaVttXSxjYXJkSWQ6bX0pKS5maWx0ZXIoQm9vbGVhbikpO3M9bmV3IE1hcChuLnRhZ0dyb3VwRXhwYW5kZWQpO2ZvcihsZXQgbSBvZiBmLnNsaWNlKDAsMikpcy5zZXQobS5ncm91cE5hbWUsITApfWxldHtuZXh0Q2FyZFRvUGlubmVkQ29weTphLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpsLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpjfT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IE1hcCxyPW5ldyBNYXAsbz17fTtyZXR1cm4gbi5mb3JFYWNoKChzLGEpPT57LTEhPT1lLmluZGV4T2YoYSkmJihpLnNldChhLHMpLHIuc2V0KHMsYSksb1tzXT10W2FdKX0pLHtuZXh0Q2FyZFRvUGlubmVkQ29weTppLG5leHRQaW5uZWRDYXJkVG9PcmlnaW5hbDpyLHBpbm5lZENhcmRNZXRhZGF0YU1hcDpvfX0obi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsaSxvKSx1PXsuLi5pLC4uLmN9LGQ9ZnVuY3Rpb24obix0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikuZm9yRWFjaCgoW2kscl0pPT57dFtpXSYmKGVbaV09cil9KSxlfShuLmNhcmRTdGVwSW5kZXgsdSkscD12VihuLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLG8sdSxhLG4uY2FyZFRvUGlubmVkQ29weUNhY2hlLGwsZCxuLmNhcmRTdGF0ZU1hcCk7cmV0dXJuey4uLm4sLi4ucCx0YWdHcm91cEV4cGFuZGVkOnMsdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOkVlLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sdGFnTWV0YWRhdGE6ZSxjYXJkTGlzdDpvfX0pLFNlKGxQLChuLHtjYXJkSWQ6dCxzZXR0aW5nczplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLC4uLmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKGN2LChuLHtjYXJkSWQ6dH0pPT57bGV0IGU9ey4uLm4uY2FyZFN0YXRlTWFwfTtyZXR1cm4gZVt0XT17Li4uZVt0XSxmdWxsV2lkdGg6IWVbdF0/LmZ1bGxXaWR0aCx0YWJsZUV4cGFuZGVkOiFlW3RdPy5mdWxsV2lkdGh9LHsuLi5uLGNhcmRTdGF0ZU1hcDplfX0pLFNlKEVQLChuLHt0YWdGaWx0ZXI6dH0pPT4oey4uLm4sdGFnRmlsdGVyOnR9KSksU2UoY1AsKG4se3NvcnQ6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHRvb2x0aXBTb3J0OnR9fSkpLFNlKHVQLG49PntsZXQgdD0hKG4uc2V0dGluZ092ZXJyaWRlcy5pZ25vcmVPdXRsaWVycz8/bi5zZXR0aW5ncy5pZ25vcmVPdXRsaWVycyk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGlnbm9yZU91dGxpZXJzOnR9fX0pLFNlKGRQLChuLHt4QXhpc1R5cGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHhBeGlzVHlwZTp0fX0pKSxTZShmUCwobix7c21vb3RoaW5nOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxzY2FsYXJTbW9vdGhpbmc6dH19KSksU2UobVAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g/P24uc2V0dGluZ3Muc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWCk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6dH19fSksU2UoZ1AsKG4se2JyaWdodG5lc3NJbk1pbGxpOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnR9fSkpLFNlKF9QLChuLHtjb250cmFzdEluTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQ29udHJhc3RJbk1pbGxpOnR9fSkpLFNlKHZQLG49PntsZXR7aW1hZ2VCcmlnaHRuZXNzSW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoeVAsbj0+e2xldHtpbWFnZUNvbnRyYXN0SW5NaWxsaTp0LC4uLmV9PW4uc2V0dGluZ092ZXJyaWRlcztyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOmV9fSksU2UoYlAsbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmltYWdlU2hvd0FjdHVhbFNpemU/P24uc2V0dGluZ3MuaW1hZ2VTaG93QWN0dWFsU2l6ZSk7cmV0dXJuey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlU2hvd0FjdHVhbFNpemU6dH19fSksU2UoeFAsKG4se2hpc3RvZ3JhbU1vZGU6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpc3RvZ3JhbU1vZGU6dH19KSksU2UocFAsKG4se2NhcmRNaW5XaWR0aDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOnR9fSkpLFNlKGhQLG49Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsY2FyZE1pbldpZHRoOm51bGx9fSkpLFNlKF9uZSxuPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGhpZGVFbXB0eUNhcmRzOiFuLnNldHRpbmdPdmVycmlkZXMuaGlkZUVtcHR5Q2FyZHN9fSkpLFNlKENQLChuLHtyZXF1ZXN0czp0fSk9PntpZighdC5sZW5ndGgpcmV0dXJuIG47bGV0IGU9ey4uLm4udGltZVNlcmllc0RhdGF9O2ZvcihsZXQgaSBvZiB0KXtsZXR7cGx1Z2luOnIsdGFnOm8sc2FtcGxlOnN9PWk7ZVtyXT1ZRChlLHIsbyxzKTtsZXQgYT1fZChlLHIsbyxzKSxsPXVWKGkpP1tpLnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLHIsbyxzKTthLnJ1blRvTG9hZFN0YXRlPVhEKEVlLkxPQURJTkcsbCxhLnJ1blRvTG9hZFN0YXRlKX1yZXR1cm57Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKHdQLChuLHtyZXF1ZXN0OnR9KT0+e2xldCBlPXsuLi5uLnRpbWVTZXJpZXNEYXRhfSx7cGx1Z2luOmksdGFnOnIsc2FtcGxlOm99PXQ7ZVtpXT1ZRChlLGkscixvKTtsZXQgcz1fZChlLGkscixvKSxhPXVWKHQpP1t0LnJ1bklkXTpwXyhuLnRhZ01ldGFkYXRhLGkscixvKTtyZXR1cm4gcy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsYSxzLnJ1blRvTG9hZFN0YXRlKSx7Li4ubix0aW1lU2VyaWVzRGF0YTplfX0pLFNlKE1QLChuLHtyZXNwb25zZTp0fSk9PntsZXQgZT17Li4ubi5zdGVwTWluTWF4fSxpPXsuLi5uLmNhcmRTdGF0ZU1hcH0scj17Li4ubi50aW1lU2VyaWVzRGF0YX0se3BsdWdpbjpvLHRhZzpzLHJ1bklkOmEsc2FtcGxlOmx9PXQ7cltvXT1ZRChyLG8scyxsKTtsZXQgYz1fZChyLG8scyxsKTtpZihIRCh0KSl7bGV0IGQ9YT9bYV06cF8obi50YWdNZXRhZGF0YSxvLHMsbCk7Yy5ydW5Ub0xvYWRTdGF0ZT1YRChFZS5GQUlMRUQsZCxjLnJ1blRvTG9hZFN0YXRlKX1lbHNle2xldCBkPXQucnVuVG9TZXJpZXM7Yy5ydW5Ub1Nlcmllcz17Li4uYy5ydW5Ub1Nlcmllc30sYy5ydW5Ub0xvYWRTdGF0ZT17Li4uYy5ydW5Ub0xvYWRTdGF0ZX07Zm9yKGxldCBwIGluIGQpaWYoZC5oYXNPd25Qcm9wZXJ0eShwKSl7Yy5ydW5Ub1Nlcmllc1twXT1kW3BdLGMucnVuVG9Mb2FkU3RhdGVbcF09RWUuTE9BREVEO2ZvcihsZXQgaCBvZiBkW3BdKWUubWluPU1hdGgubWluKGUubWluLGguc3RlcCksZS5tYXg9TWF0aC5tYXgoZS5tYXgsaC5zdGVwKX19aWYodC5ydW5Ub1NlcmllcyYmdC5wbHVnaW49PT1Xbi5TQ0FMQVJTKXtsZXQgZD1fVih7cGx1Z2luOm8sdGFnOnMscnVuSWQ6bnVsbH0pLHA9ZnVuY3Rpb24obil7bGV0IHQ9T2JqZWN0LnZhbHVlcyhuKS5mbGF0KCkubWFwKGU9PmUuc3RlcCk7cmV0dXJue21pblN0ZXA6TWF0aC5taW4oLi4udCksbWF4U3RlcDpNYXRoLm1heCguLi50KX19KGMucnVuVG9TZXJpZXMpO2lbZF09ey4uLmlbZF0sZGF0YU1pbk1heDpwfTtsZXQgaD1uLmNhcmRUb1Bpbm5lZENvcHkuZ2V0KGQpO2gmJihpW2hdPXsuLi5pW2hdLGRhdGFNaW5NYXg6cH0pfXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOnIsY2FyZFN0ZXBJbmRleDpQa2Uobi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkU3RlcEluZGV4LHIsbi50aW1lU2VyaWVzRGF0YSksc3RlcE1pbk1heDplLGNhcmRTdGF0ZU1hcDppfX0pLFNlKFNQLChuLHtjYXJkSWQ6dCxzdGVwSW5kZXg6ZX0pPT57bGV0IGk9WDUodCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhKSxyPWU7cmV0dXJuIG51bGw9PT1pP3I9bnVsbDplPmkmJihyPWkpLHsuLi5uLGNhcmRTdGVwSW5kZXg6ey4uLm4uY2FyZFN0ZXBJbmRleCxbdF06e2luZGV4OnIsaXNDbG9zZXN0OiExfX19fSksU2UoVFAsKG4se3RhZ0dyb3VwOnR9KT0+e2xldCBlPW5ldyBNYXAobi50YWdHcm91cEV4cGFuZGVkKTtyZXR1cm4gZS5zZXQodCwhZS5nZXQodCkpLHsuLi5uLHRhZ0dyb3VwRXhwYW5kZWQ6ZX19KSxTZSh1diwobix7ZW50ZXJlZENhcmRzOnQsZXhpdGVkQ2FyZHM6ZX0pPT57aWYoIXQubGVuZ3RoJiYhZS5sZW5ndGgpcmV0dXJuIG47bGV0IGk9bmV3IE1hcChuLnZpc2libGVDYXJkTWFwKTtyZXR1cm4gdC5mb3JFYWNoKCh7ZWxlbWVudElkOnIsY2FyZElkOm99KT0+e2xldCBzPWkuZ2V0KHIpPz9udWxsO2lmKG51bGwhPT1zJiZzIT09byl0aHJvdyBuZXcgRXJyb3IoIkEgRE9NIGVsZW1lbnQgY2Fubm90IGJlIHJldXNlZCBmb3IgbW9yZSB0aGFuIDEgdW5pcXVlIGNhcmQgbWV0YWRhdGEiKTtpLnNldChyLG8pfSksZS5mb3JFYWNoKCh7ZWxlbWVudElkOnJ9KT0+e2kuZGVsZXRlKHIpfSksey4uLm4sdmlzaWJsZUNhcmRNYXA6aX19KSxTZShkdiwobix7Y2FyZElkOnR9KT0+e2xldCBlPW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKHQpLGk9IWUmJiFuLmNhcmRUb1Bpbm5lZENvcHkuaGFzKHQpO2lmKGkmJiFRRChuKSlyZXR1cm4gbjtsZXQgcj1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weSksbz1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weUNhY2hlKSxzPW5ldyBNYXAobi5waW5uZWRDYXJkVG9PcmlnaW5hbCksYT17Li4ubi5jYXJkTWV0YWRhdGFNYXB9LGw9ey4uLm4uY2FyZFN0ZXBJbmRleH0sYz17Li4ubi5jYXJkU3RhdGVNYXB9O2lmKGUpe2xldCB1PW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuZ2V0KHQpO3IuZGVsZXRlKHUpLG8uZGVsZXRlKHUpLHMuZGVsZXRlKHQpLGRlbGV0ZSBhW3RdLGRlbGV0ZSBsW3RdLGRlbGV0ZSBjW3RdfWVsc2UgaWYoaSl7bGV0IHU9eVYodCxyLG8scyxsLGEsYyk7cj11LmNhcmRUb1Bpbm5lZENvcHksbz11LmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxzPXUucGlubmVkQ2FyZFRvT3JpZ2luYWwsYT11LmNhcmRNZXRhZGF0YU1hcCxsPXUuY2FyZFN0ZXBJbmRleCxjPXUuY2FyZFN0YXRlTWFwfWVsc2V7bGV0IHU9bi5jYXJkVG9QaW5uZWRDb3B5LmdldCh0KTtyLmRlbGV0ZSh0KSxvLmRlbGV0ZSh0KSxzLmRlbGV0ZSh1KSxkZWxldGUgYVt1XSxkZWxldGUgbFt1XSxkZWxldGUgY1t0XX1yZXR1cm57Li4ubixjYXJkTWV0YWRhdGFNYXA6YSxjYXJkU3RhdGVNYXA6YyxjYXJkU3RlcEluZGV4OmwsY2FyZFRvUGlubmVkQ29weTpyLGNhcmRUb1Bpbm5lZENvcHlDYWNoZTpvLHBpbm5lZENhcmRUb09yaWdpbmFsOnN9fSksU2UoUFAsbj0+e2xldCB0PSFuLmxpbmtlZFRpbWVFbmFibGVkLGU9ey4uLm4uY2FyZFN0ZXBJbmRleH0saT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24scj1uLnN0ZXBTZWxlY3RvckVuYWJsZWQsbz1uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtpZih0KXtsZXR7bWluOnN9PW4uc3RlcE1pbk1heCxhPXM9PT0xLzA/MDpzO2k9bi5saW5rZWRUaW1lU2VsZWN0aW9uPz97c3RhcnQ6e3N0ZXA6YX0sZW5kOm51bGx9LGU9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsaSkscj10LG89Qm9vbGVhbihpLmVuZCl9cmV0dXJuey4uLm4sY2FyZFN0ZXBJbmRleDplLGxpbmtlZFRpbWVFbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6cixyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6b319KSxTZShPUCxuPT57bGV0IHQ9IW4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLGU9bi5zdGVwU2VsZWN0b3JFbmFibGVkLGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9T2JqZWN0LmVudHJpZXMobi5jYXJkU3RhdGVNYXApLnJlZHVjZSgobyxbcyxhXSk9PihvW3NdPXsuLi5hLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FLHJhbmdlU2VsZWN0aW9uT3ZlcnJpZGU6c2EuTk9ORX0sbykse30pO3JldHVybiB0PyhlPXQsaXx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDp7c3RlcDpuLnN0ZXBNaW5NYXgubWF4fX0pLGkuZW5kfHwoaT17Li4uaSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSk6aSYmKGk9ey4uLmksZW5kOm51bGx9KSx7Li4ubixzdGVwU2VsZWN0b3JFbmFibGVkOmUscmFuZ2VTZWxlY3Rpb25FbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLGNhcmRTdGF0ZU1hcDpyfX0pLFNlKG9oLChuLHQpPT57bGV0e2NhcmRJZDplLHRpbWVTZWxlY3Rpb246aX09dCxyPWkuc3RhcnQuc3RlcCxvPWkuZW5kPy5zdGVwLGE9bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7bi5saW5rZWRUaW1lRW5hYmxlZCYmKGE9dm9pZCAwIT09byk7bGV0IGw9e3N0YXJ0OntzdGVwOnJ9LGVuZDp2b2lkIDA9PT1vP251bGw6e3N0ZXA6cj5vP3I6b319LGM9YlYobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsbCksdT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBlJiYodVtlXT17Li4udVtlXSx0aW1lU2VsZWN0aW9uOmwsc3RlcFNlbGVjdGlvbk92ZXJyaWRlOnNhLk9WRVJSSURFX0FTX0VOQUJMRUQscmFuZ2VTZWxlY3Rpb25PdmVycmlkZTp2b2lkIDA9PT1sLmVuZD8uc3RlcD9zYS5PVkVSUklERV9BU19ESVNBQkxFRDpzYS5PVkVSUklERV9BU19FTkFCTEVEfSksey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpsLGNhcmRTdGVwSW5kZXg6YyxjYXJkU3RhdGVNYXA6dSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6YX19KSxTZShJUCwobix7Y2FyZElkOnQsdmlld0JveDplfSk9PntsZXQgaT17Li4ubi5jYXJkU3RhdGVNYXB9O3JldHVybiBpW3RdPXsuLi5pW3RdLHVzZXJWaWV3Qm94OmV9LHsuLi5uLGNhcmRTdGF0ZU1hcDppfX0pLFNlKHNoLChuLHthZmZvcmRhbmNlOnQsY2FyZElkOmV9KT0+e2xldCBpPXsuLi5uLmNhcmRTdGF0ZU1hcH07aWYoZSl7bGV0e3RpbWVTZWxlY3Rpb246YSwuLi5sfT1pW2VdfHx7fTtpW2VdPXsuLi5sLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5PVkVSUklERV9BU19ESVNBQkxFRH19ZWxzZSBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGE9PntpW2FdPXsuLi5pW2FdLHN0ZXBTZWxlY3Rpb25PdmVycmlkZTpzYS5OT05FfX0pO2lmKCFuLmxpbmtlZFRpbWVFbmFibGVkJiZ0IT09V2EuQ0hFQ0tfQk9YKXJldHVybnsuLi5uLGNhcmRTdGF0ZU1hcDppfTtsZXQgcj0hbi5zdGVwU2VsZWN0b3JFbmFibGVkLG89ciYmbi5saW5rZWRUaW1lRW5hYmxlZCxzPXImJm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkO3JldHVybnsuLi5uLGxpbmtlZFRpbWVFbmFibGVkOm8sc3RlcFNlbGVjdG9yRW5hYmxlZDpyLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDpzLGNhcmRTdGF0ZU1hcDppfX0pLFNlKG1uZSxuPT4oey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjpudWxsfSkpLFNlKGlQLChuLHt0YWI6dH0pPT4oey4uLm4sdGFibGVFZGl0b3JTZWxlY3RlZFRhYjp0fSkpLFNlKHB2LChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PV9vLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSxTZShSUCwobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlclR5cGU6ZX0pPT57bGV0IGk9dD09PV9vLlJBTkdFP24ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyxyPWkuZmluZEluZGV4KGE9PmEudHlwZT09PWUpLG89ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGkpO2lbcl0uZW5hYmxlZCYmby0tO2xldCBzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KHIsbyxpKTtyZXR1cm4gc1tvXT17Li4uc1tvXSxlbmFibGVkOiFzW29dLmVuYWJsZWR9LHQ9PT1fby5SQU5HRT97Li4ubixyYW5nZVNlbGVjdGlvbkhlYWRlcnM6c306ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczpzfX0pLFNlKERQLChuLHtwbHVnaW46dH0pPT57bGV0IGU9bmV3IFNldChuLmZpbHRlcmVkUGx1Z2luVHlwZXMpO3JldHVybiBlLmhhcyh0KT9lLmRlbGV0ZSh0KTplLmFkZCh0KSxPYmplY3QudmFsdWVzKFduKS5ldmVyeShpPT5lLmhhcyhpKSkmJihlPW5ldyBTZXQpLHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6ZX19KSxTZShBUCxuPT4oey4uLm4sZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0fSkpLFNlKGVQLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46IW4uaXNTZXR0aW5nc1BhbmVPcGVufSkpLFNlKCRJLG49Pih7Li4ubixpc1NldHRpbmdzUGFuZU9wZW46ITF9KSksU2UodFAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3Blbjohbi5pc1NsaWRlb3V0TWVudU9wZW59KSksU2UoblAsKG4se21vZGU6dH0pPT4oey4uLm4saXNTbGlkZW91dE1lbnVPcGVuOiEwLGlzU2V0dGluZ3NQYW5lT3BlbjohMCx0YWJsZUVkaXRvclNlbGVjdGVkVGFiOnR9KSksU2UoclAsbj0+KHsuLi5uLGlzU2xpZGVvdXRNZW51T3BlbjohMX0pKSk7ZnVuY3Rpb24gd25lKG4sdCl7cmV0dXJuIFhmKE9rZSxSa2UpKG4sdCl9ZnVuY3Rpb24geG5lKG4sdCl7cmV0dXJue3RhZ0Rlc2NyaXB0aW9uczpuW3RdLnRhZ0Rlc2NyaXB0aW9ucyx0YWdUb1J1bnM6a2tlKG5bdF0ucnVuVGFnSW5mbyl9fWZ1bmN0aW9uIGtrZShuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbilmb3IobGV0IGkgb2YgbltlXSl0W2ldPVsuLi50W2ldfHxbXSxlXTtyZXR1cm4gdH12YXIgTGtlPVkoTnAsU2wsKG4sdCxlKT0+dD97Li4udCxsb2FkU3RhdGU6bixpZDplfTpudWxsKSxNbmU9d2UoIltNZXRyaWNzIEVmZmVjdHNdIEluaXQiKSxTbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkPXRoaXMuYWN0aW9ucyQucGlwZShUaShNbmUsX3UscWYseGwpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSx0aGlzLnN0b3JlLnNlbGVjdChTQykpLEhlKChbLG8sc10pPT5vPT09Q0MmJnMuc3RhdGU9PT1FZS5OT1RfTE9BREVEKSksdGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJD10aGlzLmFjdGlvbnMkLnBpcGUoVGkoSGEsd2wpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGRzKSksSGUoKFssb10pPT5vPT09Q0MpKSx0aGlzLmxvYWRUYWdNZXRhZGF0YSQ9dW4odGhpcy5kYXNoYm9hcmRTaG93bldpdGhvdXREYXRhJCx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kKS5waXBlKEd0KHRoaXMuc3RvcmUuc2VsZWN0KFNDKSx0aGlzLnN0b3JlLnNlbGVjdCgkbykpLEhlKChbLG8sc10pPT5vLnN0YXRlIT09RWUuTE9BRElORyYmbnVsbCE9PXMpLE50KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChvUCgpKX0pLHZpKChbLCxvXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaFRhZ01ldGFkYXRhKG8pLnBpcGUoTnQocz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goc1Aoe3RhZ01ldGFkYXRhOnN9KSl9KSxDbygoKT0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goYVAoKSksanQobnVsbCkpKSkpKSx0aGlzLnZpc2libGVDYXJkc1dpdGhvdXREYXRhQ2hhbmdlZCQ9dGhpcy5hY3Rpb25zJC5waXBlKFRpKHV2KSxHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGU9PT1FZS5OT1RfTE9BREVEKSkpLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkPXRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQucGlwZShHdCh0aGlzLmdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpKSxCKChbLG9dKT0+by5maWx0ZXIocz0+cy5sb2FkU3RhdGUhPT1FZS5MT0FESU5HKSkpLHRoaXMubG9hZFRpbWVTZXJpZXMkPXVuKHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJCx0aGlzLnZpc2libGVDYXJkc1JlbG9hZGVkJCkucGlwZShIZShvPT5vLmxlbmd0aD4wKSxHdCh0aGlzLnN0b3JlLnNlbGVjdCgkbykucGlwZShIZShvPT5udWxsIT09bykpKSxfbigoW28sc10pPT50aGlzLmZldGNoVGltZVNlcmllc0ZvckNhcmRzKG8scykpKSx0aGlzLmRhdGFFZmZlY3RzJD1VcigoKT0+dW4odGhpcy5sb2FkVGFnTWV0YWRhdGEkLHRoaXMubG9hZFRpbWVTZXJpZXMkKSx7ZGlzcGF0Y2g6ITF9KX1uZ3J4T25Jbml0RWZmZWN0cygpe3JldHVybiBNbmUoKX1nZXRWaXNpYmxlQ2FyZEZldGNoSW5mb3MoKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3Qob1opLnBpcGUodmkoaT0+aS5zaXplP3hvKFsuLi5pXS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoTGtlLG8pLnBpcGUoSHQoMSkpKSk6anQoW10pKSxCKGk9PmkuZmlsdGVyKEJvb2xlYW4pKSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hUaW1lU2VyaWVzKFtlXSkucGlwZShOdChpPT57bGV0IHI9aS5maWx0ZXIoSEQpO3IubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUaW1lIHNlcmllcyByZXNwb25zZSBjb250YWluZWQgZXJyb3JzOiIsciksdGhpcy5zdG9yZS5kaXNwYXRjaChNUCh7cmVzcG9uc2U6aVswXX0pKX0pLENvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaCh3UCh7cmVxdWVzdDplfSkpLGp0KG51bGwpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKGUsaSl7cmV0dXJuIGp0KGUubWFwKG89PntsZXR7cGx1Z2luOnMsdGFnOmEscnVuSWQ6bCxzYW1wbGU6Y309byx1PXphKHMpP3twbHVnaW46cyx0YWc6YSxydW5JZDpsfTp7cGx1Z2luOnMsdGFnOmEsZXhwZXJpbWVudElkczppfTtyZXR1cm4gdm9pZCAwIT09YyYmKHUuc2FtcGxlPWMpLHV9KSkucGlwZShOdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaChDUCh7cmVxdWVzdHM6b30pKX0pLF9uKG89PnVuKC4uLm8ubWFwKGE9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzKGEpKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoUihjcyksUihQZSksUih5dSkpfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEs1PW5ldyBzZSgiTWV0cmljcyBTdG9yZSBDb25maWciKSxaNT1uZXcgc2UoIk1ldHJpY3MgSW5pdGlhbCBTZXR0aW5ncyBDb25maWciKTtmdW5jdGlvbiBFbmUobil7cmV0dXJuIG4/e2luaXRpYWxTdGF0ZTp7Li4uUTUsc2V0dGluZ3M6bn19Ontpbml0aWFsU3RhdGU6UTV9fXZhciBZYT0oKCk9PihmdW5jdGlvbihuKXtuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCIsbltuLk1JRERMRT00XT0iTUlERExFIixuW24uRk9VUlRIPThdPSJGT1VSVEgiLG5bbi5GSUZUSD0zMl09IkZJRlRIIn0oWWF8fChZYT17fSkpLFlhKSkoKSxUbmU9MDtmdW5jdGlvbiBCa2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuZXhwYW5kU2lkZWJhcigpKX0pLE4oMSwibWF0LWljb24iLDQpLHYoKX19ZnVuY3Rpb24gVmtlKG4sdCl7aWYoMSZuJiYoZygwLCJuYXYiLDUpLGooMSwiYXN5bmMiKSxObigyLDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7T3QoIndpZHRoIixXKDEsNCxlLndpZHRoJCksIiUiKSgibWluLXdpZHRoIixlLk1JTklNVU1fU0lERUJBUl9XSURUSF9JTl9QWCwicHgiKX19ZnVuY3Rpb24gSGtlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw2KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5yZXNpemVHcmFiYmVkKCkpfSksdigpfX12YXIgVWtlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLHprZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLEFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMud2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KHhEKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMucmVzaXppbmc9ITEsdGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg9NzUsbGkoaS5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUoKCk9PnRoaXMucmVzaXppbmcpKS5zdWJzY3JpYmUocj0+e2lmKChyLmJ1dHRvbnMmWWEuTEVGVCkhPT1ZYS5MRUZUKXJldHVybiB2b2lkKHRoaXMucmVzaXppbmc9ITEpO3IucHJldmVudERlZmF1bHQoKTtsZXR7d2lkdGg6b309aS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RvcmUuZGlzcGF0Y2gocl8oe3dpZHRoSW5QZXJjZW50OnIuY2xpZW50WDw9dGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg/MDpyLmNsaWVudFgvbyoxMDB9KSl9KSxsaShpLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlc2l6aW5nPSExfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfWV4cGFuZFNpZGViYXIoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJfKHt3aWR0aEluUGVyY2VudDoyMH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhc2hib2FyZC1sYXlvdXQiXV0sbmdDb250ZW50U2VsZWN0b3JzOnprZSxkZWNsczo3LHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJleHBhbmQiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDMsIndpZHRoIiwibWluV2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYod2koVWtlKSxFKDAsQmtlLDIsMCwiYnV0dG9uIiwwKSxqKDEsImFzeW5jIiksRSgyLFZrZSwzLDYsIm5hdiIsMSksaigzLCJhc3luYyIpLEUoNCxIa2UsMSwwLCJkaXYiLDIpLGooNSwiYXN5bmMiKSxObig2KSksMiZlJiYoYigibmdJZiIsMD09PVcoMSwzLGkud2lkdGgkKSkseCgyKSxiKCJuZ0lmIixXKDMsNSxpLndpZHRoJCk+MCkseCgyKSxiKCJuZ0lmIixXKDUsNyxpLndpZHRoJCk+MCkpfSxkZXBlbmRlbmNpZXM6W1hlLFpuLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjgwdnd9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleDowIDA7anVzdGlmeS1zZWxmOnN0cmV0Y2h9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4O2N1cnNvcjpldy1yZXNpemU7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNofS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjY2M7b3V0bGluZTozcHggc29saWQgI2NjYzt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3V0bGluZS1jb2xvcjojNzc3O2JvcmRlci1jb2xvcjojNzc3fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDFweCAwIDA7Y29sb3I6aW5oZXJpdDtjb250YWluOmNvbnRlbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKNT1uZXcgV2Vha01hcCx4dz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBXZWFrU2V0fWluaXRpYWxpemUodCl7aWYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcilyZXR1cm47dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10O2xldCBlPXt0aHJlc2hvbGQ6MCxyb290OnRoaXMucm9vdD8/bnVsbH07dGhpcy5idWZmZXImJihlLnJvb3RNYXJnaW49dGhpcy5idWZmZXIpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksZSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKHIsbyk9PnIudGltZS1vLnRpbWUpO2xldCBlPW5ldyBTZXQsaT1uZXcgU2V0O2ZvcihsZXR7aXNJbnRlcnNlY3Rpbmc6cix0YXJnZXQ6b31vZiB0KXI/KGUuYWRkKG8pLGkuZGVsZXRlKG8pKTooZS5kZWxldGUobyksaS5hZGQobykpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXMobykmJiFyJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZShvKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShvKSk7dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLGkpfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fSxJbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1KNS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaCh1dih7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O0o1LnNldChlLHtlbGVtZW50SWQ6KFRuZSsrLFN5bWJvbChUbmUpKSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSx0aGlzLmNhcmRPYnNlcnZlcnx8KHRoaXMuY2FyZE9ic2VydmVyPW5ldyB4dyksdGhpcy5jYXJkT2JzZXJ2ZXIuaW5pdGlhbGl6ZSh0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpKSx0aGlzLmNhcmRPYnNlcnZlci5hZGQoZSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQZSkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjYXJkTGF6eUxvYWRlciIsIiJdXSxpbnB1dHM6e2NhcmRJZDpbImNhcmRMYXp5TG9hZGVyIiwiY2FyZElkIl0sY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifX0pLG59KSgpO2Z1bmN0aW9uIFdrZShuLHQpezEmbiYmKEt0KDApLE5uKDEpLFp0KCkpfXZhciBxa2U9WyIqIl0sUG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1pfW5nT25Jbml0KCl7aWYodGhpcy5jdXN0b21pemFibGVDb21wb25lbnQpe2xldCBlPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY3VzdG9taXphYmxlQ29tcG9uZW50LmNvbnN0cnVjdG9yKTt0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGUpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh5aSksdyhFbykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWN1c3RvbWl6YXRpb24iXV0saW5wdXRzOntjdXN0b21pemFibGVDb21wb25lbnQ6ImN1c3RvbWl6YWJsZUNvbXBvbmVudCJ9LG5nQ29udGVudFNlbGVjdG9yczpxa2UsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksRSgwLFdrZSwyLDAsIm5nLWNvbnRhaW5lciIsMCkpLDImZSYmYigibmdJZiIsIWkuY3VzdG9taXphYmxlQ29tcG9uZW50KX0sZGVwZW5kZW5jaWVzOltYZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWGtlPVsiYnV0dG9uIl0sUWtlPVsiKiJdLFJuZT1uZXcgc2UoIk1BVF9CVVRUT05fVE9HR0xFX0RFRkFVTFRfT1BUSU9OUyIpLE9uZT1uZXcgc2UoIk1hdEJ1dHRvblRvZ2dsZUdyb3VwIiksS2tlPXtwcm92aWRlOkhvLHVzZUV4aXN0aW5nOnJpKCgpPT4kNSksbXVsdGk6ITB9LGtuZT0wLEZQPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLnZhbHVlPWV9fSwkNT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLl92ZXJ0aWNhbD0hMSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX25hbWU9Im1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLSIra25lKyssdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmNoYW5nZT1uZXcgRyx0aGlzLmFwcGVhcmFuY2U9aSYmaS5hcHBlYXJhbmNlP2kuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuX25hbWV9c2V0IG5hbWUoZSl7dGhpcy5fbmFtZT1lLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5fdmVydGljYWx9c2V0IHZlcnRpY2FsKGUpe3RoaXMuX3ZlcnRpY2FsPVd0KGUpfWdldCB2YWx1ZSgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2UubWFwKGk9PmkudmFsdWUpOmVbMF0/ZVswXS52YWx1ZTp2b2lkIDB9c2V0IHZhbHVlKGUpe3RoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfWdldCBzZWxlY3RlZCgpe2xldCBlPXRoaXMuX3NlbGVjdGlvbk1vZGVsP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkOltdO3JldHVybiB0aGlzLm11bHRpcGxlP2U6ZVswXXx8bnVsbH1nZXQgbXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fbXVsdGlwbGV9c2V0IG11bHRpcGxlKGUpe3RoaXMuX211bHRpcGxlPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpLHRoaXMuX21hcmtCdXR0b25zRm9yQ2hlY2soKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBGXyh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KC4uLnRoaXMuX2J1dHRvblRvZ2dsZXMuZmlsdGVyKGU9PmUuY2hlY2tlZCkpfXdyaXRlVmFsdWUoZSl7dGhpcy52YWx1ZT1lLHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV9lbWl0Q2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IEZQKGUsdGhpcy52YWx1ZSk7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbihpLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KGkpfV9zeW5jQnV0dG9uVG9nZ2xlKGUsaSxyPSExLG89ITEpeyF0aGlzLm11bHRpcGxlJiZ0aGlzLnNlbGVjdGVkJiYhZS5jaGVja2VkJiYodGhpcy5zZWxlY3RlZC5jaGVja2VkPSExKSx0aGlzLl9zZWxlY3Rpb25Nb2RlbD9pP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlKTp0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChlKTpvPSEwLG8/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5fdXBkYXRlTW9kZWxWYWx1ZShlLHIpKTp0aGlzLl91cGRhdGVNb2RlbFZhbHVlKGUscil9X2lzU2VsZWN0ZWQoZSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpfV9pc1ByZWNoZWNrZWQoZSl7cmV0dXJuISh0eXBlb2YgdGhpcy5fcmF3VmFsdWU+InUiKSYmKHRoaXMubXVsdGlwbGUmJkFycmF5LmlzQXJyYXkodGhpcy5fcmF3VmFsdWUpP3RoaXMuX3Jhd1ZhbHVlLnNvbWUoaT0+bnVsbCE9ZS52YWx1ZSYmaT09PWUudmFsdWUpOmUudmFsdWU9PT10aGlzLl9yYXdWYWx1ZSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSl7dGhpcy5fcmF3VmFsdWU9ZSx0aGlzLl9idXR0b25Ub2dnbGVzJiYodGhpcy5tdWx0aXBsZSYmZT8oQXJyYXkuaXNBcnJheShlKSx0aGlzLl9jbGVhclNlbGVjdGlvbigpLGUuZm9yRWFjaChpPT50aGlzLl9zZWxlY3RWYWx1ZShpKSkpOih0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuX3NlbGVjdFZhbHVlKGUpKSl9X2NsZWFyU2VsZWN0aW9uKCl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLl9idXR0b25Ub2dnbGVzLmZvckVhY2goZT0+ZS5jaGVja2VkPSExKX1fc2VsZWN0VmFsdWUoZSl7bGV0IGk9dGhpcy5fYnV0dG9uVG9nZ2xlcy5maW5kKHI9Pm51bGwhPXIudmFsdWUmJnIudmFsdWU9PT1lKTtpJiYoaS5jaGVja2VkPSEwLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpKSl9X3VwZGF0ZU1vZGVsVmFsdWUoZSxpKXtpJiZ0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoZSksdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpfV9tYXJrQnV0dG9uc0ZvckNoZWNrKCl7dGhpcy5fYnV0dG9uVG9nZ2xlcz8uZm9yRWFjaChlPT5lLl9tYXJrRm9yQ2hlY2soKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoUm5lLDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmTmkocixKa2UsNSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5fYnV0dG9uVG9nZ2xlcz1vKX19LGhvc3RBdHRyczpbInJvbGUiLCJncm91cCIsMSwibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09aS5hcHBlYXJhbmNlKSl9LGlucHV0czp7YXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsbmFtZToibmFtZSIsdmVydGljYWw6InZlcnRpY2FsIix2YWx1ZToidmFsdWUiLG11bHRpcGxlOiJtdWx0aXBsZSIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlR3JvdXAiXSxmZWF0dXJlczpbJHQoW0trZSx7cHJvdmlkZTpPbmUsdXNlRXhpc3Rpbmc6bn1dKV19KSxufSkoKSxaa2U9THMoY2xhc3N7fSksSmtlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaa2V7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9lbGVtZW50UmVmPXIsdGhpcy5fZm9jdXNNb25pdG9yPW8sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5jaGFuZ2U9bmV3IEc7bGV0IGw9TnVtYmVyKHMpO3RoaXMudGFiSW5kZXg9bHx8MD09PWw/bDpudWxsLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA9ZSx0aGlzLmFwcGVhcmFuY2U9YSYmYS5hcHBlYXJhbmNlP2EuYXBwZWFyYW5jZToic3RhbmRhcmQifWdldCBidXR0b25JZCgpe3JldHVybmAke3RoaXMuaWR9LWJ1dHRvbmB9Z2V0IGFwcGVhcmFuY2UoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmFwcGVhcmFuY2U6dGhpcy5fYXBwZWFyYW5jZX1zZXQgYXBwZWFyYW5jZShlKXt0aGlzLl9hcHBlYXJhbmNlPWV9Z2V0IGNoZWNrZWQoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cD90aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9pc1NlbGVjdGVkKHRoaXMpOnRoaXMuX2NoZWNrZWR9c2V0IGNoZWNrZWQoZSl7bGV0IGk9V3QoZSk7aSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWksdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmdGhpcy5idXR0b25Ub2dnbGVHcm91cC5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVd0KGUpfW5nT25Jbml0KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLmlkPXRoaXMuaWR8fCJtYXQtYnV0dG9uLXRvZ2dsZS0iK2tuZSsrLGUmJihlLl9pc1ByZWNoZWNrZWQodGhpcyk/dGhpcy5jaGVja2VkPSEwOmUuX2lzU2VsZWN0ZWQodGhpcykhPT10aGlzLl9jaGVja2VkJiZlLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5idXR0b25Ub2dnbGVHcm91cDt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksZSYmZS5faXNTZWxlY3RlZCh0aGlzKSYmZS5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLCExLCExLCEwKX1mb2N1cyhlKXt0aGlzLl9idXR0b25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X29uQnV0dG9uQ2xpY2soKXtsZXQgZT0hIXRoaXMuX2lzU2luZ2xlU2VsZWN0b3IoKXx8IXRoaXMuX2NoZWNrZWQ7ZSE9PXRoaXMuX2NoZWNrZWQmJih0aGlzLl9jaGVja2VkPWUsdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmKHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkLCEwKSx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9vblRvdWNoZWQoKSkpLHRoaXMuY2hhbmdlLmVtaXQobmV3IEZQKHRoaXMsdGhpcy52YWx1ZSkpfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fZ2V0QnV0dG9uTmFtZSgpe3JldHVybiB0aGlzLl9pc1NpbmdsZVNlbGVjdG9yKCk/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5uYW1lOnRoaXMubmFtZXx8bnVsbH1faXNTaW5nbGVTZWxlY3Rvcigpe3JldHVybiB0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiYhdGhpcy5idXR0b25Ub2dnbGVHcm91cC5tdWx0aXBsZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhPbmUsOCksdyhubiksdyhBZSksdyh6ciksS28oInRhYmluZGV4IiksdyhSbmUsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmbHQoWGtlLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2J1dHRvbkVsZW1lbnQ9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZSJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pLDImZSYmKHplKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgiaWQiLGkuaWQpKCJuYW1lIixudWxsKSxhdCgibWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSIsIWkuYnV0dG9uVG9nZ2xlR3JvdXApKCJtYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQiLCJzdGFuZGFyZCI9PT1pLmFwcGVhcmFuY2UpKX0saW5wdXRzOntkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGlkOiJpZCIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIix0YWJJbmRleDoidGFiSW5kZXgiLGFwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLGNoZWNrZWQ6ImNoZWNrZWQiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e2NoYW5nZToiY2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRCdXR0b25Ub2dnbGUiXSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpRa2UsZGVjbHM6Nix2YXJzOjksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsIm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbiIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiLDMsImlkIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiYnV0dG9uIiwiIl0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQiXSxbMSwibWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheSJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKHdpKCksZygwLCJidXR0b24iLDAsMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2soKX0pLGcoMiwic3BhbiIsMiksTm4oMyksdigpKCksTig0LCJzcGFuIiwzKSg1LCJzcGFuIiw0KSksMiZlKXtsZXQgcj1zdCgxKTtiKCJpZCIsaS5idXR0b25JZCkoImRpc2FibGVkIixpLmRpc2FibGVkfHxudWxsKSx6ZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/LTE6aS50YWJJbmRleCkoImFyaWEtcHJlc3NlZCIsaS5jaGVja2VkKSgibmFtZSIsaS5fZ2V0QnV0dG9uTmFtZSgpKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpLHgoNSksYigibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpfX0sZGVwZW5kZW5jaWVzOltlc10sc3R5bGVzOlsiLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLm1hdC1idXR0b24tdG9nZ2xlLWdyb3Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlci1yYWRpdXM6NHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke291dGxpbmU6MH0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWx7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtkaXNwbGF5OmJsb2NrfS5tYXQtYnV0dG9uLXRvZ2dsZXt3aGl0ZS1zcGFjZTpub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfS5tYXQtYnV0dG9uLXRvZ2dsZS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjF9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCkgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkKTpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtkaXNwbGF5Om5vbmV9fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7cGFkZGluZzowIDEycHh9Lm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnQ+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCAzNnB4O29wYWNpdHk6LjU7aGVpZ2h0OjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZDpob3ZlciAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi42fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtib3JkZXItYm90dG9tOnNvbGlkIDUwMHB4fS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxle3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntib3JkZXI6MDtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6aW5oZXJpdDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udDppbmhlcml0O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlO2N1cnNvcjpwb2ludGVyfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2RuLHhjLGRuXX0pLG59KSgpO2Z1bmN0aW9uIGVGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJhbmltYXRpb24tbmFtZSIsIm1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtIitlLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpKCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fWZ1bmN0aW9uIHRGZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJjaXJjbGUiLDQpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDEpO090KCJzdHJva2UtZGFzaG9mZnNldCIsZS5fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpLCJweCIpKCJzdHJva2UtZGFzaGFycmF5IixlLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCksInB4IikoInN0cm9rZS13aWR0aCIsZS5fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKSwiJSIpKCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4oaSkpLHplKCJyIixlLl9nZXRDaXJjbGVSYWRpdXMoKSl9fXZhciBpRmU9cHMoY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0sInByaW1hcnkiKSxyRmU9bmV3IHNlKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2RpYW1ldGVyOjEwMH19fSksdm89Y2xhc3MgZXh0ZW5kcyBpRmV7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXtzdXBlcih0KSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2RpYW1ldGVyPTEwMCx0aGlzLl92YWx1ZT0wLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLm1vZGU9ImRldGVybWluYXRlIjtsZXQgYz12by5fZGlhbWV0ZXJzO3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSxjLmhhcyhpLmhlYWQpfHxjLnNldChpLmhlYWQsbmV3IFNldChbMTAwXSkpLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1yJiYhIW8mJiFvLl9mb3JjZUFuaW1hdGlvbnMsIm1hdC1zcGlubmVyIj09PXQubmF0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYodGhpcy5tb2RlPSJpbmRldGVybWluYXRlIiksbyYmKG8uY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPW8uY29sb3IpLG8uZGlhbWV0ZXImJih0aGlzLmRpYW1ldGVyPW8uZGlhbWV0ZXIpLG8uc3Ryb2tlV2lkdGgmJih0aGlzLnN0cm9rZVdpZHRoPW8uc3Ryb2tlV2lkdGgpKSxlLmlzQnJvd3NlciYmZS5TQUZBUkkmJmEmJnMmJmwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249YS5jaGFuZ2UoMTUwKS5zdWJzY3JpYmUoKCk9PnsiaW5kZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGUmJmwucnVuKCgpPT5zLm1hcmtGb3JDaGVjaygpKX0pKX1nZXQgZGlhbWV0ZXIoKXtyZXR1cm4gdGhpcy5fZGlhbWV0ZXJ9c2V0IGRpYW1ldGVyKHQpe3RoaXMuX2RpYW1ldGVyPVBpKHQpLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbD10aGlzLl9nZXRTcGlubmVyQW5pbWF0aW9uTGFiZWwoKSx0aGlzLl9zdHlsZVJvb3QmJnRoaXMuX2F0dGFjaFN0eWxlTm9kZSgpfWdldCBzdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLl9zdHJva2VXaWR0aHx8dGhpcy5kaWFtZXRlci8xMH1zZXQgc3Ryb2tlV2lkdGgodCl7dGhpcy5fc3Ryb2tlV2lkdGg9UGkodCl9Z2V0IHZhbHVlKCl7cmV0dXJuImRldGVybWluYXRlIj09PXRoaXMubW9kZT90aGlzLl92YWx1ZTowfXNldCB2YWx1ZSh0KXt0aGlzLl92YWx1ZT1NYXRoLm1heCgwLE1hdGgubWluKDEwMCxQaSh0KSkpfW5nT25Jbml0KCl7bGV0IHQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3N0eWxlUm9vdD1NQSh0KXx8dGhpcy5fZG9jdW1lbnQuaGVhZCx0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKSx0LmNsYXNzTGlzdC5hZGQoIm1hdC1wcm9ncmVzcy1zcGlubmVyLWluZGV0ZXJtaW5hdGUtYW5pbWF0aW9uIil9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fZ2V0Q2lyY2xlUmFkaXVzKCl7cmV0dXJuKHRoaXMuZGlhbWV0ZXItMTApLzJ9X2dldFZpZXdCb3goKXtsZXQgdD0yKnRoaXMuX2dldENpcmNsZVJhZGl1cygpK3RoaXMuc3Ryb2tlV2lkdGg7cmV0dXJuYDAgMCAke3R9ICR7dH1gfV9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCl7cmV0dXJuIDIqTWF0aC5QSSp0aGlzLl9nZXRDaXJjbGVSYWRpdXMoKX1fZ2V0U3Ryb2tlRGFzaE9mZnNldCgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpKigxMDAtdGhpcy5fdmFsdWUpLzEwMDpudWxsfV9nZXRDaXJjbGVTdHJva2VXaWR0aCgpe3JldHVybiB0aGlzLnN0cm9rZVdpZHRoL3RoaXMuZGlhbWV0ZXIqMTAwfV9nZXRDaXJjbGVUcmFuc2Zvcm1PcmlnaW4odCl7bGV0IGU9NTAqKHQuY3VycmVudFNjYWxlPz8xKTtyZXR1cm5gJHtlfSUgJHtlfSVgfV9hdHRhY2hTdHlsZU5vZGUoKXtsZXQgdD10aGlzLl9zdHlsZVJvb3QsZT10aGlzLl9kaWFtZXRlcixpPXZvLl9kaWFtZXRlcnMscj1pLmdldCh0KTtpZighcnx8IXIuaGFzKGUpKXtsZXQgbz10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO28uc2V0QXR0cmlidXRlKCJtYXQtc3Bpbm5lci1hbmltYXRpb24iLHRoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbCksby50ZXh0Q29udGVudD10aGlzLl9nZXRBbmltYXRpb25UZXh0KCksdC5hcHBlbmRDaGlsZChvKSxyfHwocj1uZXcgU2V0LGkuc2V0KHQscikpLHIuYWRkKGUpfX1fZ2V0QW5pbWF0aW9uVGV4dCgpe2xldCB0PXRoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKTtyZXR1cm4iXG4gQGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLURJQU1FVEVSIHtcbiAgICAwJSAgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMCk7IH1cbiAgICAxMi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyk7IH1cbiAgICAyNSUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG5cbiAgICAyNS4wMDAxJSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOyB9XG4gICAgMzcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuICAgIDUwJSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpOyB9XG5cbiAgICA1MC4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7IH1cbiAgICA2Mi41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG4gICAgNzUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyk7IH1cblxuICAgIDc1LjAwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsgfVxuICAgIDg3LjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41MDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gICAgMTAwJSAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyk7IH1cbiAgfVxuIi5yZXBsYWNlKC9TVEFSVF9WQUxVRS9nLCIiKy45NSp0KS5yZXBsYWNlKC9FTkRfVkFMVUUvZywiIisuMip0KS5yZXBsYWNlKC9ESUFNRVRFUi9nLGAke3RoaXMuX3NwaW5uZXJBbmltYXRpb25MYWJlbH1gKX1fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCl7cmV0dXJuIHRoaXMuZGlhbWV0ZXIudG9TdHJpbmcoKS5yZXBsYWNlKCIuIiwiXyIpfX07dm8uX2RpYW1ldGVycz1uZXcgV2Vha01hcCx2by5cdTAyNzVmYWM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyh0fHx2bykodyhBZSksdyh1aSksdyhCdCw4KSx3KExpLDgpLHcockZlKSx3KG5uKSx3KGRhKSx3KHB0KSl9LHZvLlx1MDI3NWNtcD1rKHt0eXBlOnZvLHNlbGVjdG9yczpbWyJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciJdLFsibWF0LXNwaW5uZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsInByb2dyZXNzYmFyIiwidGFiaW5kZXgiLCItMSIsMSwibWF0LXByb2dyZXNzLXNwaW5uZXIiLCJtYXQtc3Bpbm5lciJdLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbih0LGUpezImdCYmKHplKCJhcmlhLXZhbHVlbWluIiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlPzA6bnVsbCkoImFyaWEtdmFsdWVtYXgiLCJkZXRlcm1pbmF0ZSI9PT1lLm1vZGU/MTAwOm51bGwpKCJhcmlhLXZhbHVlbm93IiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlP2UudmFsdWU6bnVsbCkoIm1vZGUiLGUubW9kZSksT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixlLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsZGlhbWV0ZXI6ImRpYW1ldGVyIixzdHJva2VXaWR0aDoic3Ryb2tlV2lkdGgiLG1vZGU6Im1vZGUiLHZhbHVlOiJ2YWx1ZSJ9LGV4cG9ydEFzOlsibWF0UHJvZ3Jlc3NTcGlubmVyIl0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6OCxjb25zdHM6W1sicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiLCJmb2N1c2FibGUiLCJmYWxzZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywibmdTd2l0Y2giXSxbInN2ZyIsIiJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSIsMywiYW5pbWF0aW9uLW5hbWUiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLCJ0cmFuc2Zvcm0tb3JpZ2luIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS13aWR0aCIsInRyYW5zZm9ybS1vcmlnaW4iLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY3giLCI1MCUiLCJjeSIsIjUwJSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbih0LGUpezEmdCYmKGpuKCksZygwLCJzdmciLDAsMSksRSgyLGVGZSwxLDExLCJjaXJjbGUiLDIpLEUoMyx0RmUsMSw5LCJjaXJjbGUiLDMpLHYoKSksMiZ0JiYoT3QoIndpZHRoIixlLmRpYW1ldGVyLCJweCIpKCJoZWlnaHQiLGUuZGlhbWV0ZXIsInB4IiksYigibmdTd2l0Y2giLCJpbmRldGVybWluYXRlIj09PWUubW9kZSksemUoInZpZXdCb3giLGUuX2dldFZpZXdCb3goKSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLCEwKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsITEpKX0sZGVwZW5kZW5jaWVzOltocixJcl0sc3R5bGVzOlsiLm1hdC1wcm9ncmVzcy1zcGlubmVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBzdmd7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO3RvcDowO2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7ZmlsbDpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246c3Ryb2tlLWRhc2hvZmZzZXQgMjI1bXMgbGluZWFyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZXtzdHJva2U6Q2FudmFzVGV4dH0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBzdmd7YW5pbWF0aW9uOm1hdC1wcm9ncmVzcy1zcGlubmVyLWxpbmVhci1yb3RhdGUgMjAwMG1zIGxpbmVhciBpbmZpbml0ZX0ubWF0LXByb2dyZXNzLXNwaW5uZXJbbW9kZT1pbmRldGVybWluYXRlXSBjaXJjbGV7dHJhbnNpdGlvbi1wcm9wZXJ0eTpzdHJva2U7YW5pbWF0aW9uLWR1cmF0aW9uOjQwMDBtczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKTthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBzdmcsLm1hdC1wcm9ncmVzcy1zcGlubmVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIGNpcmNsZXthbmltYXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9QGtleWZyYW1lcyBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlezAle3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS0xMDB7MCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMCl9MTIuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoNzIuNWRlZyl9MjUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTM3LjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyl9NTAuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfTYyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgyNTEuNWRlZyl9NzUuMDAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTg3LjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpfTEwMCV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX19Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSk7dmFyIGt1PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltkbixrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBhRmUobix0KXtpZigxJm4mJihnKDAsImIiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCkuJGltcGxpY2l0O3goMSkscWUoIiIsZS5kaXNwbGF5QWxpYXMsIjoiKX19ZnVuY3Rpb24gbEZlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwyKSgxLCJzcGFuIiwzKSxFKDIsYUZlLDIsMSwiYiIsNCksRCgzKSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJ2YWx1ZSIsZS52YWx1ZSkoImRpc2FibGVkIixlLmRpc2FibGVkKSx4KDEpLEdFKCJ0aXRsZSIsIiIsZS5kaXNwbGF5QWxpYXMsIjogIixlLmRpc3BsYXlUZXh0LCIiKSx4KDEpLGIoIm5nSWYiLGUuZGlzcGxheUFsaWFzKSx4KDEpLHFlKCIgIixlLmRpc3BsYXlUZXh0LCIgIil9fXZhciBGbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9IiIsdGhpcy5vcHRpb25zPVtdLHRoaXMuc2VsZWN0aW9uQ2hhbmdlPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kcm9wZG93biJdXSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsb3B0aW9uczoib3B0aW9ucyJ9LG91dHB1dHM6e3NlbGVjdGlvbkNoYW5nZToic2VsZWN0aW9uQ2hhbmdlIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbMywidmFsdWUiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbMywidmFsdWUiLCJkaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiXSxbMSwib3B0aW9uLWNvbnRlbnQiLDMsInRpdGxlIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1hdC1zZWxlY3QiLDApLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoby52YWx1ZSl9KSxFKDEsbEZlLDQsNiwibWF0LW9wdGlvbiIsMSksdigpKSwyJmUmJihiKCJ2YWx1ZSIsaS52YWx1ZSkseCgxKSxiKCJuZ0Zvck9mIixpLm9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSxKcCx1YV0sc3R5bGVzOlsibWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjZweH1tYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG99ICAubWF0LXNlbGVjdC1wYW5lbHttYXgtd2lkdGg6NzB2d30gIG1hdC1vcHRpb24ubWF0LW9wdGlvbntoZWlnaHQ6YXV0b30gIC5tYXQtb3B0aW9uLXRleHR7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5vcHRpb24tY29udGVudFtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSJdfSksbn0pKCk7ZnVuY3Rpb24gdUZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzMikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLnJhbmdlU2VsZWN0aW9uVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgUmFuZ2UgU2VsZWN0aW9uICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKTt4KDEpLGIoImNoZWNrZWQiLGUuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSl9fWZ1bmN0aW9uIGRGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzMpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5saW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksRCgyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJjaGVja2VkIixlLmlzTGlua2VkVGltZUVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSkseCgxKSxxZSgiTGluayBieSBzdGVwICIsZS5nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCksIiAiKX19dmFyIHBGZT1mdW5jdGlvbihuKXtyZXR1cm57ImNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlIjohMCwidG9nZ2xlLW9wZW5lZCI6bn19O2Z1bmN0aW9uIGhGZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMzQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uU2xpZGVPdXRUb2dnbGVkLmVtaXQoKSl9KSxOKDEsIm1hdC1pY29uIiwzNSksRCgyLCIgRWRpdCBUYWJsZSBDb2x1bW5zICIpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigibmdDbGFzcyIsSG4oMSxwRmUsZS5pc1NsaWRlT3V0TWVudU9wZW4pKX19ZnVuY3Rpb24gZkZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwyNikoMSwibWF0LWNoZWNrYm94IiwyNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuc3RlcFNlbGVjdG9yVG9nZ2xlZC5lbWl0KCkpfSksRCgyLCJFbmFibGUgc3RlcCBzZWxlY3Rpb24gYW5kIGRhdGEgdGFibGUgIiksdigpLGcoMywic3BhbiIsMjgpLEQoNCwiKFNjYWxhcnMgb25seSkiKSx2KCksRSg1LHVGZSwzLDIsImRpdiIsMjkpLEUoNixkRmUsMywzLCJkaXYiLDMwKSxFKDcsaEZlLDMsMywiYnV0dG9uIiwzMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoInRpdGxlIixlLmlzQXhpc1R5cGVTdGVwKCk/IiI6Ik9ubHkgYXZhaWxhYmxlIHdoZW4gSG9yaXpvbnRhbCBBeGlzIGlzIHNldCB0byBzdGVwIikseCgxKSxiKCJjaGVja2VkIixlLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCkoImRpc2FibGVkIiwhZS5pc0F4aXNUeXBlU3RlcCgpKSx4KDQpLGIoIm5nSWYiLGUuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQpLHgoMSksYigibmdJZiIsZS5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCkseCgxKSxiKCJuZ0lmIixlLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpfX1mdW5jdGlvbiBtRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzZWN0aW9uIiwzNikoMSwiaDMiLDEpLEQoMiwiSW1hZ2VzIiksdigpLGcoMywiZGl2IiwzNykoNCwiZGl2IiwzOCksRCg1LCJCcmlnaHRuZXNzIiksdigpLGcoNiwiZGl2Iiw4KSg3LCJtYXQtc2xpZGVyIiwzOSksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSx2KCksZyg4LCJidXR0b24iLDQwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQnJpZ2h0bmVzc1Jlc2V0LmVtaXQoKSl9KSxOKDksIm1hdC1pY29uIiwxMSksdigpKCkoKSxnKDEwLCJkaXYiLDQxKSgxMSwiZGl2Iiw0MiksRCgxMiwiQ29udHJhc3QiKSx2KCksZygxMywiZGl2Iiw4KSgxNCwibWF0LXNsaWRlciIsNDMpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5lbWl0KHIudmFsdWUpKX0pLHYoKSxnKDE1LCJidXR0b24iLDQ0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmltYWdlQ29udHJhc3RSZXNldC5lbWl0KCkpfSksTigxNiwibWF0LWljb24iLDExKSx2KCkoKSgpLGcoMTcsImRpdiIsNDUpKDE4LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQuZW1pdChyLmNoZWNrZWQpKX0pLEQoMTksIlNob3cgYWN0dWFsIGltYWdlIHNpemUiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goNyksYigibWF4IiwyZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkpKCJ0aHVtYkxhYmVsIiwhMCkoImRpc3BsYXlXaXRoIixlLmZvcm1hdE1pbGxpVG9aZXJvdGgpLHgoNyksYigibWF4Iiw1ZTMpKCJtaW4iLDApKCJzdGVwIiwxMCkoInZhbHVlIixlLmltYWdlQ29udHJhc3RJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSx4KDQpLGIoImNoZWNrZWQiLGUuaW1hZ2VTaG93QWN0dWFsU2l6ZSl9fXZhciBMbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmxvY2FsZT1lLHRoaXMubGlua2VkVGltZVRvZ2dsZWQ9bmV3IEcsdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLnN0ZXBTZWxlY3RvclRvZ2dsZWQ9bmV3IEcsdGhpcy5yYW5nZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5vblNsaWRlT3V0VG9nZ2xlZD1uZXcgRyx0aGlzLlRvb2x0aXBTb3J0RHJvcGRvd25PcHRpb25zPVt7dmFsdWU6bW8uQUxQSEFCRVRJQ0FMLGRpc3BsYXlUZXh0OiJBbHBoYWJldGljYWwifSx7dmFsdWU6bW8uQVNDRU5ESU5HLGRpc3BsYXlUZXh0OiJBc2NlbmRpbmcifSx7dmFsdWU6bW8uREVTQ0VORElORyxkaXNwbGF5VGV4dDoiRGVzY2VuZGluZyJ9LHt2YWx1ZTptby5ORUFSRVNULGRpc3BsYXlUZXh0OiJOZWFyZXN0IFBpeGVsIn0se3ZhbHVlOm1vLk5FQVJFU1RfWSxkaXNwbGF5VGV4dDoiTmVhcmVzdCBZIn1dLHRoaXMudG9vbHRpcFNvcnRDaGFuZ2VkPW5ldyBHLHRoaXMuaWdub3JlT3V0bGllcnNDaGFuZ2VkPW5ldyBHLHRoaXMuWEF4aXNUeXBlPVlpLHRoaXMuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zPVt7dmFsdWU6WWkuU1RFUCxkaXNwbGF5VGV4dDoiU3RlcCJ9LHt2YWx1ZTpZaS5SRUxBVElWRSxkaXNwbGF5VGV4dDoiUmVsYXRpdmUifSx7dmFsdWU6WWkuV0FMTF9USU1FLGRpc3BsYXlUZXh0OiJXYWxsIn1dLHRoaXMueEF4aXNUeXBlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRT03MzUsdGhpcy5NSU5fQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9MzM1LHRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5jYXJkV2lkdGhDaGFuZ2VkPXRoaXMuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLmNhcmRXaWR0aFJlc2V0PW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOk9yLk9GRlNFVCxkaXNwbGF5VGV4dDoiT2Zmc2V0In0se3ZhbHVlOk9yLk9WRVJMQVksZGlzcGxheVRleHQ6Ik92ZXJsYXkifV0sdGhpcy5oaXN0b2dyYW1Nb2RlQ2hhbmdlZD1uZXcgRyx0aGlzLk1BWF9TTU9PVEhJTkdfVkFMVUU9Ljk5OSx0aGlzLk1BWF9TTU9PVEhJTkdfU0xJREVSX1ZBTFVFPS45OSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJD1uZXcgRyx0aGlzLnNjYWxhclNtb290aGluZ0NoYW5nZWQ9dGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQucGlwZSh6YygyNTApKSx0aGlzLnNjYWxhclBhcnRpdGlvblhUb2dnbGVkPW5ldyBHLHRoaXMuaW1hZ2VCcmlnaHRuZXNzU2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLnBpcGUoemMoMjUwKSksdGhpcy5pbWFnZUJyaWdodG5lc3NSZXNldD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJD1uZXcgRyx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZD10aGlzLmltYWdlQ29udHJhc3RTbGlkZXJDaGFuZ2VkJC5waXBlKHpjKDI1MCkpLHRoaXMuaW1hZ2VDb250cmFzdFJlc2V0PW5ldyBHLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ9bmV3IEd9b25TY2FsYXJTbW9vdGhpbmdJbnB1dChlKXtsZXQgaT1lLnRhcmdldDtpZighaS52YWx1ZSlyZXR1cm47bGV0IHI9TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUZsb2F0KGkudmFsdWUpKSwuOTk5KTtyIT09cGFyc2VGbG9hdChpLnZhbHVlKSYmKGkudmFsdWU9U3RyaW5nKHIpKSx0aGlzLnNjYWxhclNtb290aGluZ0NvbnRyb2xDaGFuZ2VkJC5lbWl0KHIpfWZvcm1hdE1pbGxpVG9aZXJvdGgoZSl7cmV0dXJuIEEzKGUvMWUzLHRoaXMubG9jYWxlfHwiZW4tVVMiLCIxLjAtMiIpfWdldExpbmtlZFRpbWVTZWxlY3Rpb25TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkfHxudWxsPT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHxudWxsIT09dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8iIjp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcH1pc0F4aXNUeXBlU3RlcCgpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PVlpLlNURVB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcocmQpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZDoiaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQiLGlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkOiJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsaXNMaW5rZWRUaW1lRW5hYmxlZDoiaXNMaW5rZWRUaW1lRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkOiJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsc3RlcE1pbk1heDoic3RlcE1pbk1heCIsaXNTbGlkZU91dE1lbnVPcGVuOiJpc1NsaWRlT3V0TWVudU9wZW4iLGlzSW1hZ2VTdXBwb3J0RW5hYmxlZDoiaXNJbWFnZVN1cHBvcnRFbmFibGVkIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLGlnbm9yZU91dGxpZXJzOiJpZ25vcmVPdXRsaWVycyIseEF4aXNUeXBlOiJ4QXhpc1R5cGUiLGNhcmRNaW5XaWR0aDoiY2FyZE1pbldpZHRoIixoaXN0b2dyYW1Nb2RlOiJoaXN0b2dyYW1Nb2RlIixzY2FsYXJTbW9vdGhpbmc6InNjYWxhclNtb290aGluZyIsc2NhbGFyUGFydGl0aW9uWDoic2NhbGFyUGFydGl0aW9uWCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsaW1hZ2VDb250cmFzdEluTWlsbGk6ImltYWdlQ29udHJhc3RJbk1pbGxpIixpbWFnZVNob3dBY3R1YWxTaXplOiJpbWFnZVNob3dBY3R1YWxTaXplIn0sb3V0cHV0czp7bGlua2VkVGltZVRvZ2dsZWQ6ImxpbmtlZFRpbWVUb2dnbGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZDoibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLHN0ZXBTZWxlY3RvclRvZ2dsZWQ6InN0ZXBTZWxlY3RvclRvZ2dsZWQiLHJhbmdlU2VsZWN0aW9uVG9nZ2xlZDoicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixvblNsaWRlT3V0VG9nZ2xlZDoib25TbGlkZU91dFRvZ2dsZWQiLHRvb2x0aXBTb3J0Q2hhbmdlZDoidG9vbHRpcFNvcnRDaGFuZ2VkIixpZ25vcmVPdXRsaWVyc0NoYW5nZWQ6Imlnbm9yZU91dGxpZXJzQ2hhbmdlZCIseEF4aXNUeXBlQ2hhbmdlZDoieEF4aXNUeXBlQ2hhbmdlZCIsY2FyZFdpZHRoQ2hhbmdlZDoiY2FyZFdpZHRoQ2hhbmdlZCIsY2FyZFdpZHRoUmVzZXQ6ImNhcmRXaWR0aFJlc2V0IixoaXN0b2dyYW1Nb2RlQ2hhbmdlZDoiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLHNjYWxhclNtb290aGluZ0NoYW5nZWQ6InNjYWxhclNtb290aGluZ0NoYW5nZWQiLHNjYWxhclBhcnRpdGlvblhUb2dnbGVkOiJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixpbWFnZUJyaWdodG5lc3NSZXNldDoiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLGltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZDoiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixpbWFnZUNvbnRyYXN0UmVzZXQ6ImltYWdlQ29udHJhc3RSZXNldCIsaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQ6ImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIn0sZGVjbHM6NDMsdmFyczoyMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGk7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgY2FyZCB3aWR0aCBzZXR0aW5n4pCfY2NkYzk2YjAwM2ZiYmE5MGRiN2E2OTU5YjViMjZlM2NjNThmN2Q4MOKQnzUyMjMxMTEwNDc5NjgxMDI0NjY6UmVzZXQgY2FyZCB3aWR0aGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBicmlnaHRuZXNzIHNldHRpbmfikJ9jNDgyYjNhNDdlYTA5NzVmYThiZTAxYWZiM2ZiZWM5Yjc2NjI4YmQ34pCfMTE4OTE2MTg1NzI0MDM3ODM5NTpSZXNldCBicmlnaHRuZXNzYCxpPSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGltYWdlIGNvbnRyYXN0IHNldHRpbmfikJ9lZDcxMmE4YjkyNzA0MWJlMTUyNTJiMjllYjUyMWViYjEzNzRiYWQ44pCfNTM3MDcwMzM0MjkyMzYxMTk1NTpSZXNldCBjb250cmFzdGAsW1sxLCJnZW5lcmFsIl0sWzEsInNlY3Rpb24tdGl0bGUiXSxbMSwiY29udHJvbC1yb3ciLCJ4LWF4aXMtdHlwZSJdLFsiaWQiLCJ4LWF4aXMtdHlwZS1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzMsInZhbHVlIiwib3B0aW9ucyIsInNlbGVjdGlvbkNoYW5nZSJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93IiwiY2FyZC13aWR0aCJdLFsiaWQiLCJjYXJkLXdpZHRoLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbMSwic2xpZGVyLXJvdyJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiY2FyZC13aWR0aC1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIlJlc2V0IGNhcmQgd2lkdGgiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19iYWNrdXBfcmVzdG9yZV8yNHB4Il0sWzEsInNjYWxhcnMiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXNtb290aGluZyJdLFsiaWQiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsImNvbG9yIiwicHJpbWFyeSIsMywibWF4IiwibWluIiwic3RlcCIsInZhbHVlIiwidGh1bWJMYWJlbCIsImlucHV0Il0sWyJhcmlhLWxhYmVsbGVkYnkiLCJzY2FsYXJzLXNtb290aGluZy1sYWJlbCIsInR5cGUiLCJudW1iZXIiLCJtaW4iLCIwIiwic3RlcCIsIjAuMDAxIiwxLCJzbGlkZXItaW5wdXQiLDMsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udHJvbC1yb3ciLCJ0b29sdGlwLXNvcnQiXSxbMSwiY29udHJvbC1uYW1lIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1pZ25vcmUtb3V0bGllcnMiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtcGFydGl0aW9uLXgiXSxbInN2Z0ljb24iLCJoZWxwX291dGxpbmVfMjRweCIsInRpdGxlIiwiTm9uLW1vbm90b25pYyBzdGVwcyBjYW4gb2NjdXIgd2hlbiByZXVzaW5nIGEgbG9nZGlyIHdpdGggbXVsdGlwbGUgc3VtbWFyeSB3cml0ZXJzIGFuZCBvdmVybGFwcGluZyBzdGVwcy4gTGluZSBjaGFydHMsIHdpdGhvdXQgdGhpcyBvcHRpb24gZW5hYmxlZCwgY2FuIGFwcGVhciB6aWcgemFnZ2VkLiBUaGlzIGlzIGNvbW1vbiB3aGVuIHJlc3RhcnRpbmcgZnJvbSBhIGNoZWNrcG9pbnQuXG5cbldoZW4gZW5hYmxlZCwgYSBub24tbW9ub3RvbmljIHRpbWUgc2VyaWVzIGNvbXBvc2VkIG9mIE4gbW9ub3RvbmljIHBpZWNlcyB3aWxsIGJlIHNob3duIGFzIE4gbW9ub3RvbmljIGxpbmVzLiIsMSwiaW5mbyJdLFsxLCJIaXN0b2dyYW1zIl0sWzEsImNvbnRyb2wtcm93IiwiaGlzdG9ncmFtLW1vZGUiXSxbImNsYXNzIiwiaW1hZ2UiLDQsIm5nSWYiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXN0ZXAtc2VsZWN0b3IiLDMsInRpdGxlIl0sWzMsImNoZWNrZWQiLCJkaXNhYmxlZCIsImNoYW5nZSJdLFsxLCJpbmRlbnQiXSxbImNsYXNzIiwiaW5kZW50IHJhbmdlLXNlbGVjdGlvbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb250cm9sLXJvdyBsaW5rZWQtdGltZSBpbmRlbnQiLDQsIm5nSWYiXSxbIm1hdC1idXR0b24iLCIiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsibWF0LWJ1dHRvbiIsIiIsMywibmdDbGFzcyIsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1jb250cmFzdCJdLFsiaWQiLCJpbWFnZS1jb25zdHJhc3QtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZXNldCBjb250cmFzdCIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLXNob3ctYWN0dWFsLXNpemUiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzZWN0aW9uIiwwKSgxLCJoMyIsMSksRCgyLCJHZW5lcmFsIiksdigpLGcoMywiZGl2IiwyKSg0LCJkaXYiLDMpLEQoNSwiSG9yaXpvbnRhbCBBeGlzIiksdigpLGcoNiwidGItZHJvcGRvd24iLDQpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkueEF4aXNUeXBlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCksRSg3LGZGZSw4LDYsImRpdiIsNSksZyg4LCJkaXYiLDYpKDksImRpdiIsNyksRCgxMCwiQ2FyZCBXaWR0aCIpLHYoKSxnKDExLCJkaXYiLDgpKDEyLCJtYXQtc2xpZGVyIiw5KSxQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDEzLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jYXJkV2lkdGhSZXNldC5lbWl0KCl9KSxOKDE0LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCkoKSxnKDE1LCJzZWN0aW9uIiwxMikoMTYsImgzIiwxKSxEKDE3LCJTY2FsYXJzIiksdigpLGcoMTgsImRpdiIsMTMpKDE5LCJkaXYiLDE0KSxEKDIwLCJTbW9vdGhpbmciKSx2KCksZygyMSwiZGl2Iiw4KSgyMiwibWF0LXNsaWRlciIsMTUpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxnKDIzLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksdigpKCkoKSxnKDI0LCJkaXYiLDE3KSgyNSwiZGl2IiwxOCksRCgyNiwiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLHYoKSxnKDI3LCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLHYoKSgpLGcoMjgsImRpdiIsMTkpKDI5LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxEKDMwLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLHYoKSgpLGcoMzEsImRpdiIsMjEpKDMyLCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksRCgzMywiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksdigpLE4oMzQsIm1hdC1pY29uIiwyMiksdigpKCksZygzNSwic2VjdGlvbiIsMjMpKDM2LCJoMyIsMSksRCgzNywiSGlzdG9ncmFtcyIpLHYoKSxnKDM4LCJkaXYiLDI0KSgzOSwiZGl2IiwxOCksRCg0MCwiTW9kZSIpLHYoKSxnKDQxLCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCkoKSxFKDQyLG1GZSwyMCwxMywic2VjdGlvbiIsMjUpKSwyJmUmJih4KDYpLGIoInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCkseCg1KSxiKCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLHgoMTApLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSx4KDEpLGIoIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSx4KDQpLGIoInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucykseCgyKSxiKCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSx4KDMpLGIoImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCkseCg5KSxiKCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSx4KDEpLGIoIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsRm5lLCRuLEVkLFpuLFRkXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowIDAgMTJweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbToxMnB4fS5jb250cm9sLW5hbWVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyOHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNldC1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjZweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjEycHg7cGFkZGluZzowIDRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM0MjUwNjZ9LnNjYWxhcnMtc21vb3RoaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTt3aWR0aDo1ZW19LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVdICAgLmluZm9bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O21hcmdpbi1sZWZ0OjVweDt3aWR0aDoxNXB4O21pbi13aWR0aDoxNXB4fW1hdC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDotOHB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MjhweDtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6MTJweH0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUubWF0LWJ1dHRvbi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGUudG9nZ2xlLW9wZW5lZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZS50b2dnbGUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlLnRvZ2dsZS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE1cHg7bWFyZ2luLXJpZ2h0OjZweH10Yi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30ubGlua2VkLXRpbWVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6NXB4IDB9LmNvbnRyb2wtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbmRlbnRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjI1cHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxiRmU9T2JqZWN0LmZyZWV6ZSh7U0xJREVSOkdvLlNFVFRJTkdTX1NMSURFUixURVhUOkdvLlNFVFRJTkdTX1RFWFQsVEVYVF9ERUxFVEVEOkdvLkNIQU5HRV9UT19TSU5HTEV9KSxCbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3Qob0spLHRoaXMuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGNLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGFLKSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVEMpLHRoaXMuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEhwKSx0aGlzLmlzTGlua2VkVGltZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KFZwKSx0aGlzLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KEVWKSx0aGlzLnN0ZXBNaW5NYXgkPXRoaXMuc3RvcmUuc2VsZWN0KFNWKSx0aGlzLmlzU2xpZGVPdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3Qob0EpLHRoaXMuaXNJbWFnZVN1cHBvcnRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChQcCkucGlwZShIZShCb29sZWFuKSxIdCgxKSxHdCh0aGlzLnN0b3JlLnNlbGVjdChhRCkpLEIoKFssaV0pPT5pKSksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KG1fKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYnUpLHRoaXMuY2FyZE1pbldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChoXyksdGhpcy5oaXN0b2dyYW1Nb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy5zY2FsYXJTbW9vdGhpbmckPXRoaXMuc3RvcmUuc2VsZWN0KHZkKSx0aGlzLnNjYWxhclBhcnRpdGlvblgkPXRoaXMuc3RvcmUuc2VsZWN0KCREKSx0aGlzLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmltYWdlQ29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdCh0QSksdGhpcy5pbWFnZVNob3dBY3R1YWxTaXplJD10aGlzLnN0b3JlLnNlbGVjdChuQSl9b25Ub29sdGlwU29ydENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChjUCh7c29ydDplfSkpfW9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1UCgpKX1vblhBeGlzVHlwZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChkUCh7eEF4aXNUeXBlOmV9KSl9b25DYXJkV2lkdGhDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocFAoe2NhcmRNaW5XaWR0aDplfSkpfW9uQ2FyZFdpZHRoUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGhQKCkpfW9uSGlzdG9ncmFtTW9kZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh4UCh7aGlzdG9ncmFtTW9kZTplfSkpfW9uU2NhbGFyU21vb3RoaW5nQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGZQKHtzbW9vdGhpbmc6ZX0pKX1vblNjYWxhclBhcnRpdGlvblhUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChtUCgpKX1vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZ1Aoe2JyaWdodG5lc3NJbk1pbGxpOmV9KSl9b25JbWFnZUJyaWdodG5lc3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godlAoKSl9b25JbWFnZUNvbnRyYXN0UmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHlQKCkpfW9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goX1Aoe2NvbnRyYXN0SW5NaWxsaTplfSkpfW9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJQKCkpfW9uTGlua2VkVGltZVRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFBQKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOldhLkNIRUNLX0JPWH0pKX1vblJhbmdlU2VsZWN0aW9uVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT1Aoe2FmZm9yZGFuY2U6V2EuQ0hFQ0tfQk9YfSkpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoe3RpbWVTZWxlY3Rpb246ZSxzb3VyY2U6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goe3RpbWVTZWxlY3Rpb246ZSxhZmZvcmRhbmNlOmJGZVtpXX0pKX1vblNsaWRlT3V0VG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFAoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyJdXSxkZWNsczoyMix2YXJzOjYzLGNvbnN0czpbWzMsImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsInRvb2x0aXBTb3J0IiwiaWdub3JlT3V0bGllcnMiLCJ4QXhpc1R5cGUiLCJjYXJkTWluV2lkdGgiLCJoaXN0b2dyYW1Nb2RlIiwic2NhbGFyU21vb3RoaW5nIiwic2NhbGFyUGFydGl0aW9uWCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsImltYWdlU2hvd0FjdHVhbFNpemUiLCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIiwiaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIiwiaXNMaW5rZWRUaW1lRW5hYmxlZCIsImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE1pbk1heCIsImlzU2xpZGVPdXRNZW51T3BlbiIsInRvb2x0aXBTb3J0Q2hhbmdlZCIsImlnbm9yZU91dGxpZXJzQ2hhbmdlZCIsInhBeGlzVHlwZUNoYW5nZWQiLCJjYXJkV2lkdGhDaGFuZ2VkIiwiY2FyZFdpZHRoUmVzZXQiLCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsInNjYWxhclNtb290aGluZ0NoYW5nZWQiLCJzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCIsImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIiwiaW1hZ2VCcmlnaHRuZXNzUmVzZXQiLCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLCJpbWFnZUNvbnRyYXN0UmVzZXQiLCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsImxpbmtlZFRpbWVUb2dnbGVkIiwibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJzdGVwU2VsZWN0b3JUb2dnbGVkIiwicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIiwib25TbGlkZU91dFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtZGFzaGJvYXJkLXNldHRpbmdzLWNvbXBvbmVudCIsMCksUCgidG9vbHRpcFNvcnRDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvb2x0aXBTb3J0Q2hhbmdlZChvKX0pKCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JZ25vcmVPdXRsaWVyc0NoYW5nZWQoKX0pKCJ4QXhpc1R5cGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblhBeGlzVHlwZUNoYW5nZWQobyl9KSgiY2FyZFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DYXJkV2lkdGhDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2FyZFdpZHRoUmVzZXQoKX0pKCJoaXN0b2dyYW1Nb2RlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IaXN0b2dyYW1Nb2RlQ2hhbmdlZChvKX0pKCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0NoYW5nZWQobyl9KSgic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpfSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQnJpZ2h0bmVzc1Jlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKX0pKCJpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkKG8pfSkoImltYWdlQ29udHJhc3RSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RSZXNldCgpfSkoImltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQoKX0pKCJsaW5rZWRUaW1lVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVUb2dnbGVkKCl9KSgibGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQobyl9KSgic3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblN0ZXBTZWxlY3RvclRvZ2dsZWQoKX0pKCJyYW5nZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKX0pKCJvblNsaWRlT3V0VG9nZ2xlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNsaWRlT3V0VG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksdigpKSwyJmUmJmIoImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsVygxLDIxLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkJCkpKCJ0b29sdGlwU29ydCIsVygyLDIzLGkudG9vbHRpcFNvcnQkKSkoImlnbm9yZU91dGxpZXJzIixXKDMsMjUsaS5pZ25vcmVPdXRsaWVycyQpKSgieEF4aXNUeXBlIixXKDQsMjcsaS54QXhpc1R5cGUkKSkoImNhcmRNaW5XaWR0aCIsVyg1LDI5LGkuY2FyZE1pbldpZHRoJCkpKCJoaXN0b2dyYW1Nb2RlIixXKDYsMzEsaS5oaXN0b2dyYW1Nb2RlJCkpKCJzY2FsYXJTbW9vdGhpbmciLFcoNywzMyxpLnNjYWxhclNtb290aGluZyQpKSgic2NhbGFyUGFydGl0aW9uWCIsVyg4LDM1LGkuc2NhbGFyUGFydGl0aW9uWCQpKSgiaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSIsVyg5LDM3LGkuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaSQpKSgiaW1hZ2VDb250cmFzdEluTWlsbGkiLFcoMTAsMzksaS5pbWFnZUNvbnRyYXN0SW5NaWxsaSQpKSgiaW1hZ2VTaG93QWN0dWFsU2l6ZSIsVygxMSw0MSxpLmltYWdlU2hvd0FjdHVhbFNpemUkKSkoImlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkIixXKDEyLDQzLGkuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQkKSkoImlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkIixXKDEzLDQ1LGkuaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLFcoMTQsNDcsaS5pc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLFcoMTUsNDksaS5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkKSkoImlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkIixXKDE2LDUxLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQkKSkoImlzTGlua2VkVGltZUVuYWJsZWQiLFcoMTcsNTMsaS5pc0xpbmtlZFRpbWVFbmFibGVkJCkpKCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixXKDE4LDU1LGkuaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxOSw1NyxpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInN0ZXBNaW5NYXgiLFcoMjAsNTksaS5zdGVwTWluTWF4JCkpKCJpc1NsaWRlT3V0TWVudU9wZW4iLFcoMjEsNjEsaS5pc1NsaWRlT3V0TWVudU9wZW4kKSl9LGRlcGVuZGVuY2llczpbTG5lLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxWbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSJdXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTigwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncyIpfSxkZXBlbmRlbmNpZXM6W0JuZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gd0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw0KX1mdW5jdGlvbiBNRmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDQpfWZ1bmN0aW9uIFNGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsNCl9ZnVuY3Rpb24gRUZlKG4sdCl7MSZuJiZOKDAsImRpdiIsNSl9dmFyIEJQPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkNvbHVtbkhlYWRlclR5cGU9bXR9Z2V0SGVhZGVyVGV4dENvbHVtbihlKXtzd2l0Y2goZSl7Y2FzZSBtdC5SVU46cmV0dXJuIlJ1biI7Y2FzZSBtdC5WQUxVRTpyZXR1cm4iVmFsdWUiO2Nhc2UgbXQuU1RFUDpyZXR1cm4iU3RlcCI7Y2FzZSBtdC5USU1FOnJldHVybiJUaW1lIjtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIlJlbGF0aXZlIjtjYXNlIG10LlNNT09USEVEOnJldHVybiJTbW9vdGhlZCI7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIlZhbHVlIjtjYXNlIG10LlNUQVJUX1NURVA6cmV0dXJuIlN0YXJ0IFN0ZXAiO2Nhc2UgbXQuRU5EX1NURVA6cmV0dXJuIkVuZCBTdGVwIjtjYXNlIG10LlNUQVJUX1ZBTFVFOnJldHVybiJTdGFydCBWYWx1ZSI7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIkVuZCBWYWx1ZSI7Y2FzZSBtdC5NSU5fVkFMVUU6cmV0dXJuIk1pbiI7Y2FzZSBtdC5NQVhfVkFMVUU6cmV0dXJuIk1heCI7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4iJSI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4iU3RlcCBhdCBNYXgiO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIlN0ZXAgYXQgTWluIjtjYXNlIG10Lk1FQU46cmV0dXJuIk1lYW4iO2Nhc2UgbXQuUkFXX0NIQU5HRTpyZXR1cm4iUmVhbCBWYWx1ZSI7ZGVmYXVsdDpyZXR1cm4iIn19Z2V0U3BlY2lhbFR5cGVDbGFzc2VzKGUpe3N3aXRjaChlKXtjYXNlIG10LlNURVBfQVRfTUlOOnJldHVybiJzdGVwLWF0LW1pbiI7Y2FzZSBtdC5TVEVQX0FUX01BWDpyZXR1cm4ic3RlcC1hdC1tYXgiO2RlZmF1bHQ6cmV0dXJuIiJ9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1kYXRhLXRhYmxlLWhlYWRlciJdXSxpbnB1dHM6e2hlYWRlcjoiaGVhZGVyIn0sZGVjbHM6Nyx2YXJzOjYsY29uc3RzOltbMSwiaGVhZGVyLWNvbnRhaW5lciIsMywibmdTd2l0Y2giXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiZXh0cmEtcmlnaHQtcGFkZGluZyIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJjaGFuZ2VfaGlzdG9yeV8yNHB4Il0sWzEsImV4dHJhLXJpZ2h0LXBhZGRpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksRSgxLHdGZSwxLDAsIm1hdC1pY29uIiwxKSxFKDIsTUZlLDEsMCwibWF0LWljb24iLDEpLEUoMyxTRmUsMSwwLCJtYXQtaWNvbiIsMSksRSg0LEVGZSwxLDAsImRpdiIsMiksZyg1LCJzcGFuIiwzKSxEKDYpLHYoKSgpKSwyJmUmJihiKCJuZ1N3aXRjaCIsaS5oZWFkZXIudHlwZSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuQ29sdW1uSGVhZGVyVHlwZS5WQUxVRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUEVSQ0VOVEFHRV9DSEFOR0UpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuUkFXX0NIQU5HRSkseCgyKSxiKCJuZ0NsYXNzIixpLmdldFNwZWNpYWxUeXBlQ2xhc3NlcyhpLmhlYWRlci50eXBlKSkseCgxKSx5dChpLmdldEhlYWRlclRleHRDb2x1bW4oaS5oZWFkZXIudHlwZSkpKX0sZGVwZW5kZW5jaWVzOltQbixocixJcixDcCxabl0sc3R5bGVzOlsiLmhlYWRlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O21pbi13aWR0aDoxMnB4O2xpbmUtaGVpZ2h0OjEycHh9LnN0ZXAtYXQtbWluW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MzdweH0uc3RlcC1hdC1tYXhbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDo0MHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gVEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw5KSxQKCJkcmFnc3RhcnQiLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmRyYWdTdGFydChvKSl9KSgiZHJhZ2VuZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbmQocikpfSkoImRyYWdlbnRlciIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQscz1NKCkuZGF0YVRhYmxlTW9kZTtyZXR1cm4gb2UoTSgpLmRyYWdFbnRlcihvLHMpKX0pLGcoMSwibWF0LWNoZWNrYm94IiwxMCksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oKS5kYXRhVGFibGVNb2RlO3JldHVybiBvZShNKCkudG9nZ2xlSGVhZGVyKG8scykpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsMTEpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigibmdDbGFzcyIsTSgyKS5nZXRIaWdobGlnaHRDbGFzc2VzKGUpKSx4KDEpLGIoImNoZWNrZWQiLGUuZW5hYmxlZCkseCgxKSxiKCJoZWFkZXIiLGUpfX1mdW5jdGlvbiBERmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNyksRSgxLFRGZSwzLDMsImRpdiIsOCksdigpKSwyJm4pe2xldCBlPXQuaGVhZGVyczt4KDEpLGIoIm5nRm9yT2YiLGUpfX12YXIgVW5lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue2hlYWRlcnM6bixkYXRhVGFibGVNb2RlOnR9fSx0SD1uPT57bi5wcmV2ZW50RGVmYXVsdCgpfSxBRmU9KG4sdCxlKT0+e2xldCBpPVsuLi5lXTtyZXR1cm4gaS5zcGxpY2UobiwxKSxpLnNwbGljZSh0LDAsZVtuXSksaX0sVlA9KG4sdCk9PnQuZmluZEluZGV4KGU9PmUudHlwZT09PW4pLGFoPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5UT1A9MF09IlRPUCIsbltuLkJPVFRPTT0xXT0iQk9UVE9NIn0oYWh8fChhaD17fSkpLGFoKSkoKSx6bmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmhvc3RFbGVtZW50PWUsdGhpcy5EYXRhVGFibGVNb2RlPV9vLHRoaXMuaGlnaGxpZ2h0RWRnZT1haC5UT1AsdGhpcy5vblNjYWxhclRhYmxlQ29sdW1uRWRpdD1uZXcgRyx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBHLHRoaXMub25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZD1uZXcgRyx0aGlzLm9uVGFiQ2hhbmdlPW5ldyBHfW5nT25EZXN0cm95KCl7dGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9dGFiQ2hhbmdlKGUpe3RoaXMub25UYWJDaGFuZ2UuZW1pdCgwPT09ZS5pbmRleD9fby5TSU5HTEU6X28uUkFOR0UpfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VuZChlKXtpZighdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGV8fCF0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSlyZXR1cm47bGV0IGk9dGhpcy5nZXRIZWFkZXJzRm9yTW9kZShlKTt0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0LmVtaXQoe2RhdGFUYWJsZU1vZGU6ZSxoZWFkZXJzOkFGZShWUCh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSxpKSxWUCh0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZSxpKSxpKX0pLHRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlPXZvaWQgMCx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT12b2lkIDAsdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix0SCl9ZHJhZ0VudGVyKGUsaSl7aWYoIXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlKXJldHVybjtsZXQgcj10aGlzLmdldEhlYWRlcnNGb3JNb2RlKGkpO3RoaXMuaGlnaGxpZ2h0RWRnZT1WUChlLnR5cGUscik8VlAodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUscik/YWguVE9QOmFoLkJPVFRPTSx0aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT1lLnR5cGV9dG9nZ2xlSGVhZGVyKGUsaSl7dGhpcy5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZC5lbWl0KHtkYXRhVGFibGVNb2RlOmksaGVhZGVyVHlwZTplLnR5cGV9KX1nZXRIaWdobGlnaHRDbGFzc2VzKGUpe3JldHVybiBlLnR5cGUhPT10aGlzLmhpZ2hsaWdodGVkSGVhZGVyVHlwZT97fTp7aGlnaGxpZ2h0ZWQ6ITAsImhpZ2hsaWdodC10b3AiOnRoaXMuaGlnaGxpZ2h0RWRnZT09PWFoLlRPUCwiaGlnaGxpZ2h0LWJvdHRvbSI6dGhpcy5oaWdobGlnaHRFZGdlPT09YWguQk9UVE9NfX1nZXRTZWxlY3RlZFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWI9PT1fby5TSU5HTEU/MDoxfWdldEhlYWRlcnNGb3JNb2RlKGUpe3JldHVybiBlPT09X28uU0lOR0xFP3RoaXMuc2luZ2xlSGVhZGVyczp0aGlzLnJhbmdlSGVhZGVyc319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMiLHNlbGVjdGVkVGFiOiJzZWxlY3RlZFRhYiJ9LG91dHB1dHM6e29uU2NhbGFyVGFibGVDb2x1bW5FZGl0OiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdCIsb25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQ6Im9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkOiJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixvblRhYkNoYW5nZToib25UYWJDaGFuZ2UifSxkZWNsczoxMSx2YXJzOjEzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIGNvbHVtbiBlZGl0b3Iu4pCfY2I2MTZjZTliNDMyN2I0MWU2YmRiOTM0NDY2OWJhN2M3MmUyYzcwZeKQnzcyMDU2MzU3NjQ3MTMwMzQ4NDI6Q2xvc2UgY29sdW1uIGVkaXRvcmAsW1sxLCJlZGl0b3ItY29udHJvbHMiXSxbMSwidGFiLWdyb3VwIiwzLCJzZWxlY3RlZEluZGV4Iiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxbMywibGFiZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImZvb3RlciJdLFsibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsiaGVhZGVyTGlzdCIsIiJdLFsxLCJoZWFkZXItbGlzdCJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiwiZHJhZ2dhYmxlIiwidHJ1ZSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZHJhZ2dhYmxlIiwidHJ1ZSIsMSwiaGVhZGVyLWxpc3QtaXRlbSIsMywibmdDbGFzcyIsImRyYWdzdGFydCIsImRyYWdlbmQiLCJkcmFnZW50ZXIiXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFszLCJoZWFkZXIiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsIm1hdC10YWItZ3JvdXAiLDEpLFAoInNlbGVjdGVkVGFiQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50YWJDaGFuZ2Uobyl9KSxnKDIsIm1hdC10YWIiLDIpLE4oMywibmdDb250ZXh0IiwzKSx2KCksZyg0LCJtYXQtdGFiIiwyKSxOKDUsIm5nQ29udGV4dCIsMyksdigpKCkoKSxnKDYsImRpdiIsNCkoNywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkLmVtaXQoKX0pLEQoOCwiIENsb3NlICIpLHYoKSgpLEUoOSxERmUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw2LGVuKSksMiZlKXtsZXQgcj1zdCgxMCk7eCgxKSxiKCJzZWxlY3RlZEluZGV4IixpLmdldFNlbGVjdGVkVGFiSW5kZXgoKSkseCgxKSxiKCJsYWJlbCIsIlNpbmdsZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0byg3LFVuZSxpLnNpbmdsZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlNJTkdMRSkpLHgoMSksYigibGFiZWwiLCJSYW5nZSIpLHgoMSksYigibmdUZW1wbGF0ZU91dGxldCIscikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix0bygxMCxVbmUsaS5yYW5nZUhlYWRlcnMsaS5EYXRhVGFibGVNb2RlLlJBTkdFKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLE5vLEJQLEVkLGhJLGF3LCRuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgICAubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6MDtwYWRkaW5nOjAgMzBweH0uZWRpdG9yLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gNDVweCl9LnRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowO2hlaWdodDoxMDAlfS5oZWFkZXItbGlzdFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1JTttYXJnaW4tbGVmdDo1JX0uaGVhZGVyLWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9LmhpZ2hsaWdodGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LmhpZ2hsaWdodC1ib3R0b21bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNmZjk4MDB9LmhpZ2hsaWdodC10b3BbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MnB4IHNvbGlkICNmZjk4MDB9LmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6NHB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZvb3Rlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5mb290ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5jbG9zZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2lkdGg6ODRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9ICAubWF0LXRhYi1ib2R5LXdyYXBwZXJ7ZmxleDoxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksam5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2luZ2xlSGVhZGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMucmFuZ2VIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChfXyksdGhpcy5zZWxlY3RlZFRhYiQ9dGhpcy5zdG9yZS5zZWxlY3QocFopfW9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUlAoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0KGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHJQKCkpfW9uVGFiQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goaVAoe3RhYjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvciJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJzaW5nbGVIZWFkZXJzIiwicmFuZ2VIZWFkZXJzIiwic2VsZWN0ZWRUYWIiLCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCIsIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0Iiwib25TY2FsYXJUYWJsZUNvbHVtbkVkaXRvckNsb3NlZCIsIm9uVGFiQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yLWNvbXBvbmVudCIsMCksUCgib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkKG8pfSkoIm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uRWRpdChvKX0pKCJvblNjYWxhclRhYmxlQ29sdW1uRWRpdG9yQ2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyVGFibGVDb2x1bW5FZGl0b3JDbG9zZWQoKX0pKCJvblRhYkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UYWJDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigic2luZ2xlSGVhZGVycyIsVygxLDMsaS5zaW5nbGVIZWFkZXJzJCkpKCJyYW5nZUhlYWRlcnMiLFcoMiw1LGkucmFuZ2VIZWFkZXJzJCkpKCJzZWxlY3RlZFRhYiIsVygzLDcsaS5zZWxlY3RlZFRhYiQpKX0sZGVwZW5kZW5jaWVzOlt6bmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFJGZT1ZKHJaLGVtLChuLHQpPT5uZXcgU2V0KE9iamVjdC5lbnRyaWVzKG4uc2NhbGFycy50YWdUb1J1bnMpLmZpbHRlcigoWyxlXSk9PiF0fHwhdC5zaXplfHxlLnNvbWUoaT0+dD8uZ2V0KGkpKSkubWFwKChbZV0pPT5lKSkpLE9GZT1ZKFpELGVtLGRaLFJGZSwobix0LGUsaSk9PntsZXQgcj1BcnJheS5mcm9tKHQ/LnZhbHVlcygpfHxbXSkuc29tZShCb29sZWFuKTtyZXR1cm4gbi5maWx0ZXIobz0+emEoby5wbHVnaW4pP0Jvb2xlYW4odCYmdC5nZXQoby5ydW5JZCkpOiFlfHwhcnx8by5wbHVnaW4hPT1Xbi5TQ0FMQVJTfHxpLmhhcyhvLnRhZykpfSkseW09WShPRmUsbj0+bi5zb3J0KCh0LGUpPT5idyh0LnRhZyxlLnRhZykpKSxtdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5yZWY9ZSx0aGlzLmNka1Njcm9sbGFibGU9aSx0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZT1uZXcgRyx0aGlzLm5nVW5zdWJzY3JpYmUkPW5ldyBUZSx0aGlzLm9uRXZlbnQkPW5ldyBUZX1uZ09uSW5pdCgpe2xldCBlPXtyb290OnRoaXMuY2RrU2Nyb2xsYWJsZT90aGlzLmNka1Njcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ6bnVsbH07dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiYmKGUucm9vdE1hcmdpbj10aGlzLmludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luKTtsZXQgaT1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIocj0+e3RoaXMub25FdmVudCQubmV4dChyKX0sZSk7aS5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUodGhpcy5yZWYubmF0aXZlRWxlbWVudCl9KSx0aGlzLm9uRXZlbnQkLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShyPT57bGV0IG89ci5zbGljZSgtMSlbMF07dGhpcy5vblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7dmlzaWJsZTpvLmlzSW50ZXJzZWN0aW5nfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX13YWl0Rm9yRXZlbnRGb3JUZXN0T25seSgpe3JldHVybiBuZXcgUHJvbWlzZShlPT50aGlzLm9uRXZlbnQkLnBpcGUoSHQoMSkpLnN1YnNjcmliZSgoKT0+e2UoKX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhZcCw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiXV0saW5wdXRzOntpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbjoiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4ifSxvdXRwdXRzOntvblZpc2liaWxpdHlDaGFuZ2U6Im9uVmlzaWJpbGl0eUNoYW5nZSJ9fSksbn0pKCksR25lPSIvc2NhbGFyX3N1bW1hcnkiO2Z1bmN0aW9uIGd2KG4sdCl7bGV0IGU9bjtyZXR1cm4gdCYmbi5zdGFydHNXaXRoKHQrIi8iKSYmKGU9bi5zbGljZSh0Lmxlbmd0aCsxKSksZS5lbmRzV2l0aChHbmUpJiYoZT1lLnNsaWNlKDAsLUduZS5sZW5ndGgpKSxlfHxufXZhciBIUD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmhyZWZBdHRyPXZvaWQgMCx0aGlzLnNyY0F0dHI9dm9pZCAwLHRoaXMuaW5jbHVkZUZlYXR1cmVGbGFncz0hMH1nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChuXykucGlwZShCKGk9PntpZihPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCl7bGV0IHI9bmV3IFVSTFNlYXJjaFBhcmFtcyhbWyJ0ZW5zb3JCb2FyZEZlYXR1cmVGbGFncyIsSlNPTi5zdHJpbmdpZnkoaSldXSksbz1lLmluY2x1ZGVzKCI/Iik/IiYiOiI/IjtyZXR1cm4gZStvK1N0cmluZyhyKX1yZXR1cm4gZX0pKX1zZXQgaHJlZihlKXtlJiZQUyh0aGlzLmdldFVybFdpdGhGZWF0dXJlRmxhZ3MoZSkpLnRoZW4oaT0+e3RoaXMuaHJlZkF0dHI9aX0pfXNldCBzcmMoZSl7ZSYmUFModGhpcy5nZXRVcmxXaXRoRmVhdHVyZUZsYWdzKGUpKS50aGVuKGk9Pnt0aGlzLnNyY0F0dHI9aX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl0sWyJpbWciLCJpbmNsdWRlRmVhdHVyZUZsYWdzIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiaHJlZiIsaS5ocmVmQXR0cixkbCkoInNyYyIsaS5zcmNBdHRyLGRsKX0saW5wdXRzOntpbmNsdWRlRmVhdHVyZUZsYWdzOiJpbmNsdWRlRmVhdHVyZUZsYWdzIixocmVmOiJocmVmIixzcmM6InNyYyJ9fSksbn0pKCksa0ZlPVsibWVhc3VyZXIiXSxGRmU9WyJpbnB1dCJdLHFuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuc3R5bGU9ImRlZmF1bHQiLHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAoIi4qIiksdGhpcy5pc1ZhbGlkPSEwLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmJsdXI9bmV3IEcsdGhpcy5mb2N1cz1uZXcgRyx0aGlzLmtleWRvd249bmV3IEcsdGhpcy5rZXl1cD1uZXcgRyx0aGlzLmludGVybmFsVmFsdWU9IiIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXI9dGhpcy51cGRhdGVJbnB1dFdpZHRoLmJpbmQodGhpcyl9bmdPbkluaXQoKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uRGVzdHJveSgpe2RvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkaW5nZG9uZSIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXIpfW5nT25DaGFuZ2VzKGUpe2UucGF0dGVybiYmKHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuPz8iIikpLGUudmFsdWUmJih0aGlzLmludGVybmFsVmFsdWU9dGhpcy52YWx1ZSksdGhpcy5pc1ZhbGlkPXRoaXMucGF0dGVyblJlZ2V4LnRlc3QodGhpcy5pbnRlcm5hbFZhbHVlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX1vbklucHV0KGUpe2xldCBpPXRoaXMuaW50ZXJuYWxWYWx1ZTt0aGlzLmludGVybmFsVmFsdWU9dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5pbnRlcm5hbFZhbHVlIT09aSYmKHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSksdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3ZhbHVlOnRoaXMuaW50ZXJuYWxWYWx1ZX0pfXVwZGF0ZUlucHV0V2lkdGgoKXtsZXR7d2lkdGg6ZX09dGhpcy5tZWFzdXJlckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjb250ZW50LXdyYXBwaW5nLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGtGZSw3LEFlKSxsdChGRmUsNyxBZSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWVhc3VyZXJFbFJlZj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5pbnB1dEVsUmVmPXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmVhKGkuc3R5bGUpfSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixzdHlsZToic3R5bGUiLHBhdHRlcm46InBhdHRlcm4ifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIixibHVyOiJibHVyIixmb2N1czoiZm9jdXMiLGtleWRvd246ImtleWRvd24iLGtleXVwOiJrZXl1cCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWVhc3VyZXIiXSxbIm1lYXN1cmVyIiwiIl0sWyJhdXRvY29tcGxldGUiLCJvZmYiLCJzcGVsbGNoZWNrIiwiZmFsc2UiLCJ0eXBlIiwidGV4dCIsMywidmFsdWUiLCJwbGFjZWhvbGRlciIsImJsdXIiLCJmb2N1cyIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwic3BhbiIpKDEsInNwYW4iLDAsMSksRCgzKSx2KCksZyg0LCJpbnB1dCIsMiwzKSxQKCJibHVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5ibHVyLmVtaXQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZvY3VzLmVtaXQobyl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5ZG93bi5lbWl0KG8pfSkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5rZXl1cC5lbWl0KG8pfSksdigpKCkpLDImZSYmKGF0KCJjb250YWluZXIiLCEwKSgiaXMtdmFsaWQiLGkuaXNWYWxpZCkseCgzKSx5dChpLmludGVybmFsVmFsdWV8fGkucGxhY2Vob2xkZXIpLHgoMSksYigidmFsdWUiLGkudmFsdWUpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6bWF4LWNvbnRlbnR9W19uZ2hvc3QtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2Y1N2MwMH0uZGVmYXVsdFtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYn0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKXtib3JkZXItY29sb3I6I2VmOWE5YX0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIC5lcnJvcltfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpob3ZlciwgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOm5vdCguaXMtdmFsaWQpOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6I2VmOWE5YX0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2JkYmRiZH0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItY29sb3I6Izc1NzU3NX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7cGFkZGluZzoxcHggMnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZWFzdXJlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbn0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdLCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzowO3doaXRlLXNwYWNlOnByZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5LCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7d2lkdGg6MmNofWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdDtvdXRsaW5lOjB9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze3BhZGRpbmctcmlnaHQ6MWNofSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiY29udGVudC13cmFwcGluZy1pbnB1dCIsMyksUCgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5hbGlhc0NoYW5nZWQuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7cGwoZS5pc0FsaWFzTmFtZUxlZ2FsPyJoaWdoLWNvbnRyYXN0IjoiZXJyb3IiKSxiKCJ2YWx1ZSIsZS5hbGlhcy5hbGlhc1RleHQpfX1mdW5jdGlvbiBCRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTthdCgiaWxsZWdhbCIsIWUuaXNBbGlhc05hbWVMZWdhbCksYigidGl0bGUiLGUudGl0bGUpLHgoMSkseXQoZS5hbGlhcy5hbGlhc1RleHQpfX12YXIgX3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNBbGlhc05hbWVMZWdhbD0hMCx0aGlzLmFsaWFzQ2hhbmdlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZXhwZXJpbWVudC1hbGlhcyJdXSxpbnB1dHM6e2FsaWFzOiJhbGlhcyIsYWxpYXNFZGl0YWJsZToiYWxpYXNFZGl0YWJsZSIsdGl0bGU6InRpdGxlIixpc0FsaWFzTmFtZUxlZ2FsOiJpc0FsaWFzTmFtZUxlZ2FsIn0sb3V0cHV0czp7YWxpYXNDaGFuZ2VkOiJhbGlhc0NoYW5nZWQifSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJhbGlhcy1udW1iZXIiXSxbInBsYWNlaG9sZGVyIiwiQWxpYXMgZm9yIGV4cGVyaW1lbnQiLDMsInN0eWxlIiwidmFsdWUiLCJvblZhbHVlQ2hhbmdlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRWRpdEFsaWFzTmFtZSIsIiJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywidmFsdWUiLCJvblZhbHVlQ2hhbmdlIl0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJzcGFuIiwwKSxEKDEpLHYoKSxFKDIsTEZlLDEsMywiY29udGVudC13cmFwcGluZy1pbnB1dCIsMSksRSgzLEJGZSwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUpe2xldCByPXN0KDQpO3goMSkseXQoaS5hbGlhcy5hbGlhc051bWJlcikseCgxKSxiKCJuZ0lmIixpLmFsaWFzRWRpdGFibGUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLHFuZV0sc3R5bGVzOlsiLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojMjEyMTIxO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoycHg7cGFkZGluZzowIDJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfSJdfSksbn0pKCk7ZnVuY3Rpb24gVkZlKG4sdCl7MSZuJiZOKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDIpLDImbiYmYigiYWxpYXMiLE0oKS5leHBlcmltZW50QWxpYXMpfWZ1bmN0aW9uIEhGZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwiLyIpLHYoKSl9dmFyIFluZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxWRmUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxFKDEsSEZlLDIsMCwic3BhbiIsMSksZygyLCJzcGFuIiksRCgzKSx2KCkpLDImZSYmKGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDEpLGIoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSx4KDIpLHl0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W1hlLF92XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVVA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChjQSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShCKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpXSkucGlwZShCKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpKSwyJmUmJihiKCJuYW1lIixXKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVygzLDcsaS5leHBlcmltZW50QWxpYXMkKSksemUoInRpdGxlIixXKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6W1luZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gekZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLmZpcnN0VGV4dFBhcnQoKSl9fXZhciB2dj0oKCk9PntjbGFzcyBue3BhcnNlVmFsdWUoKXtsZXQgZT10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lP3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCxlKSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZShlKX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXRydW5jYXRlZC1wYXRoIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiZmlyc3QtdGV4dC1wYXJ0Iiw0LCJuZ0lmIl0sWzEsInNlY29uZC10ZXh0LXBhcnQiXSxbMSwiZmlyc3QtdGV4dC1wYXJ0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLHpGZSwyLDEsInNwYW4iLDApLGcoMSwic3BhbiIsMSksRCgyKSx2KCkpLDImZSYmKGIoIm5nSWYiLGkuZmlyc3RUZXh0UGFydCgpLmxlbmd0aD4wKSx4KDIpLHl0KGkuc2Vjb25kVGV4dFBhcnQoKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLG59KSgpO2Z1bmN0aW9uIGpGZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMil9ZnVuY3Rpb24gR0ZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiwzKX12YXIgeXY9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNDbGlwcGVkPSExLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciXV0saW5wdXRzOntpc0NsaXBwZWQ6ImlzQ2xpcHBlZCIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siZGF0YS12YWx1ZSIsImNsaXBwZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJEYXRhIGlzIG5vdCBmb3VuZCBvbiBzZWxlY3RlZCBzdGVwLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIiw0LCJuZ0lmIl0sWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsakZlLDEsMCwibWF0LWljb24iLDApLEUoMSxHRmUsMSwwLCJtYXQtaWNvbiIsMSkpLDImZSYmKGIoIm5nSWYiLGkuaXNDbGlwcGVkKSx4KDEpLGIoIm5nSWYiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSl9LGRlcGVuZGVuY2llczpbWGUsWm5dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZjtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjA7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZn1bX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBXRmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE5KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJTdGVwICIsVygyLDEsZS5zdGVwc1tlLnN0ZXBJbmRleF0pLCIiKX19ZnVuY3Rpb24gcUZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMCksRCgxKSxqKDIsIm51bWJlciIpLGooMywibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGFwKCJTYW1wbGUgIixXKDIsMixlLnNhbXBsZSsxKSwiLyIsVygzLDQsZS5udW1TYW1wbGUpLCIiKX19ZnVuY3Rpb24gWUZlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyMSl9ZnVuY3Rpb24gWEZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJzcGFuIiwzMCkoMiwic3BhbiIsMzEpLHYoKSksMiZuKXtsZXQgZT1NKDMpO3goMiksT3QoImxlZnQiLGUuc2xpZGVyU3RhcnRQb3NpdGlvbikoIndpZHRoIixlLnNsaWRlclRyYWNrV2lkdGgpfX1mdW5jdGlvbiBRRmUobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzMiksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMyk7T3QoImxlZnQiLGkuZ2V0TGlua2VkVGltZVRpY2tMZWZ0U3R5bGUoZSkpKCJtYXJnaW4tbGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja01hcmdpbkxlZnRTdHlsZShlKSl9fWZ1bmN0aW9uIEtGZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyNyksRSgxLFhGZSwzLDQsInNwYW4iLDI4KSxFKDIsUUZlLDEsNCwiZGl2IiwyOSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0lmIixudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApLHgoMSksYigibmdGb3JPZiIsZS5zZWxlY3RlZFN0ZXBzKX19dmFyIFpGZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LEpGZT1mdW5jdGlvbihuKXtyZXR1cm57ZmlsdGVyOm59fTtmdW5jdGlvbiAkRmUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDIyKSgyLCJtYXQtc2xpZGVyIiwyMyksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25TbGlkZXJJbnB1dChyKSl9KSx2KCksRSgzLEtGZSwzLDIsImRpdiIsMjQpLHYoKSxnKDQsImRpdiIsMjUpLE4oNSwiaW1nIiwyNiksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgyKSxiKCJuZ0NsYXNzIixIbigxMSxaRmUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSx4KDEpLGIoIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbikseCgyKSxQYigiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSx4cigic3JjIixlLmltYWdlVXJsLGRsKSxiKCJuZ1N0eWxlIixIbigxMyxKRmUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBlTmUobix0KXsxJm4mJihnKDAsImRpdiIsMzQpLEQoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24gdE5lKG4sdCl7aWYoMSZuJiZFKDAsZU5lLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT1NKCk7YigibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIG5OZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSxRbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1FZSx0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249IiIsdGhpcy5zbGlkZXJUcmFja1dpZHRoPSIiLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbj1udWxsLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBHLHRoaXMuc3RlcEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHfWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KGUpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQoZS52YWx1ZSl9Y2hhbmdlRGlzdGluY3QoZSl7cmV0dXJuIGUuY3VycmVudFZhbHVlIT09ZS5wcmV2aW91c1ZhbHVlfW5nT25DaGFuZ2VzKGUpeyhlLnNlbGVjdGVkU3RlcHMmJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5zZWxlY3RlZFN0ZXBzKXx8ZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZ0aGlzLmNoYW5nZURpc3RpbmN0KGUubGlua2VkVGltZVNlbGVjdGlvbikpJiZ0aGlzLnJlbmRlclJhbmdlU2xpZGVyKCl9cmVuZGVyUmFuZ2VTbGlkZXIoKXtpZighdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHwhdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApcmV0dXJuO2xldCBlPXRoaXMuc3RlcHMubGVuZ3RoLTEsaT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwPHRoaXMuc3RlcHNbMF0/dGhpcy5zdGVwc1swXTp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwLHI9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA+dGhpcy5zdGVwc1tlXT90aGlzLnN0ZXBzW2VdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwLHtzdGFydFBvc2l0aW9uOm8sd2lkdGg6c309dGhpcy5nZXRUcmFja1N0YXJ0UG9zaXRpb25BbmRXaWR0aChpLHIsZSk7dGhpcy5zbGlkZXJTdGFydFBvc2l0aW9uPTEwMCpvKyIlIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9MTAwKnMrIiUifWdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGUsaSxyKXtsZXQgbz0xL3Iscz0wLGE9MCxsPTA7Zm9yKDtsPHRoaXMuc3RlcHMubGVuZ3RoLTE7bCsrKXtsZXQgYz10aGlzLnN0ZXBzW2xdLHU9dGhpcy5zdGVwc1tsKzFdO2lmKGM8PWUmJmU8PXUpe3MrPShlLWMpLyh1LWMpO2JyZWFrfX1mb3Iocz0ocytsKSpvO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sdT10aGlzLnN0ZXBzW2wrMV07aWYoZT49YyYmaTw9dSl7YT0oaS1lKS8odS1jKTticmVha31pZihlPj1jJiZpPj11KWErPSh1LWUpLyh1LWMpO2Vsc2V7aWYoIShpPj11KSl7YSs9KGktYykvKHUtYyk7YnJlYWt9YSs9MX19cmV0dXJuIGEqPW8sKHM+MXx8czwwKSYmKHM9MCkse3N0YXJ0UG9zaXRpb246cyx3aWR0aDphfX1nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKXtpZigtMT09dGhpcy5zdGVwcy5pbmRleE9mKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGVwSW5kZXg6IHN0ZXBJbmRleCB2YWx1ZSBpcyBub3QgaW5jbHVkZWQgaW4gc3RlcHMiKTtyZXR1cm4gdGhpcy5zdGVwcy5pbmRleE9mKGUpLyh0aGlzLnN0ZXBzLmxlbmd0aC0xKSoxMDArIiUifWdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybmAtJHt0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjE0fXB4YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZC1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJhY3R1YWwtc2l6ZSIsaS5zaG93QWN0dWFsU2l6ZSl9LGlucHV0czp7bG9hZFN0YXRlOiJsb2FkU3RhdGUiLHRpdGxlOiJ0aXRsZSIsdGFnOiJ0YWciLHJ1bklkOiJydW5JZCIsc2FtcGxlOiJzYW1wbGUiLG51bVNhbXBsZToibnVtU2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwczoic3RlcHMiLGJyaWdodG5lc3NJbk1pbGxpOiJicmlnaHRuZXNzSW5NaWxsaSIsY29udHJhc3RJbk1pbGxpOiJjb250cmFzdEluTWlsbGkiLHNob3dBY3R1YWxTaXplOiJzaG93QWN0dWFsU2l6ZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsYWxsb3dUb2dnbGVBY3R1YWxTaXplOiJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsc2VsZWN0ZWRTdGVwczoic2VsZWN0ZWRTdGVwcyIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMSx2YXJzOjE2LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYW4gaW1hZ2UgY2FyZCB0aGF0IHRvZ2dsZXMgYWN0dWFsIGltYWdlIHNpemUu4pCfM2NhMDVlZjNhNmUzYTM3MDY1ZjVlMGY2OWM1ZDVhMjE3OGQ5MDc5MeKQnzc2MzUxMDE5MzY2NjQ3ODkxNDA6VG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplYCxbWzEsImhlYWRpbmciXSxbMSwibGluZSJdLFsxLCJ0YWciXSxbMSwidGFnLXBhdGgiLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwiaW1hZ2Vfc2VhcmNoXzI0cHgiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwibWV0YWRhdGEiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYW1wbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ltYWdlRGF0YSIsIiJdLFsxLCJzdGVwIl0sWzEsInNhbXBsZSJdLFsiZGlhbWV0ZXIiLCIxOCIsMSwibG9hZGluZyJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidGlja0ludGVydmFsIiwidmFsdWUiLCJpbnB1dCJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSIsImluY2x1ZGVGZWF0dXJlRmxhZ3MiXSxbMSwibGlua2VkLXRpbWUtd3JhcHBlciJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImxpbmtlZC10aW1lLXRpY2siLDMsImxlZnQiLCJtYXJnaW4tbGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJsaW5rZWQtdGltZS10aWNrIl0sWyJjbGFzcyIsImVtcHR5LW1lc3NhZ2UiLDQsIm5nSWYiXSxbMSwiZW1wdHktbWVzc2FnZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTig3LCJtYXQtaWNvbiIsNyksdigpLGcoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFjdHVhbFNpemVUb2dnbGUuZW1pdCgpfSksTig5LCJtYXQtaWNvbiIsOSksdigpKCkoKSxnKDEwLCJkaXYiLDEpKDExLCJzcGFuIiwxMCksTigxMiwic3BhbiIsMTEpKDEzLCJjYXJkLXJ1bi1uYW1lIiwxMiksdigpLGcoMTQsImRpdiIsMTMpLEUoMTUsV0ZlLDMsMywic3BhbiIsMTQpLEUoMTYscUZlLDQsNiwic3BhbiIsMTUpLEUoMTcsWUZlLDEsMCwibWF0LXNwaW5uZXIiLDE2KSx2KCkoKSgpLEUoMTgsJEZlLDYsMTUsIm5nLWNvbnRhaW5lciIsMTcpLEUoMTksdE5lLDEsMSwibmctdGVtcGxhdGUiLG51bGwsMTgsZW4pKSwyJmUpe2xldCByPXN0KDIwKTt4KDMpLHhyKCJ0aXRsZSIsaS50YWcpLHhyKCJ2YWx1ZSIsaS50aXRsZSkseCgxKSxiKCJpc0NsaXBwZWQiLGkubGlua2VkVGltZVNlbGVjdGlvbiYmaS5saW5rZWRUaW1lU2VsZWN0aW9uLmNsaXBwZWQpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSx4KDIpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMSksYigiZGlzYWJsZWQiLCFpLmFsbG93VG9nZ2xlQWN0dWFsU2l6ZSkseCg0KSxiKCJuZ1N0eWxlIixIbigxNCxuTmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLGkubnVtU2FtcGxlPjEpLHgoMSksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJuZ0lmIixudWxsIT09aS5zdGVwSW5kZXgmJmkuc3RlcEluZGV4PGkuc3RlcHMubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSx3cCxIUCwkbixabix2byxUZCxVUCx2dix5dix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uYWN0dWFsLXNpemVbX25naG9zdC0lQ09NUCVde2hlaWdodDphdXRvfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHg7cG9zaXRpb246cmVsYXRpdmV9LmxpbmVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBtYXgtY29udGVudH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2dhcDo1cHh9Lm1ldGFkYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LXdpZHRoOjE3NXB4O3RleHQtYWxpZ246ZW5kfS50YWctcGF0aFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOmJhc2VsaW5lO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdLCAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ydW5bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2FtcGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc3RlcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTtvdmVyZmxvdy15OmF1dG87cG9zaXRpb246cmVsYXRpdmV9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtpbWFnZS1yZW5kZXJpbmc6LW1vei1jcmlzcC1lZGdlcztpbWFnZS1yZW5kZXJpbmc6cGl4ZWxhdGVkfS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV0gICAuaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bztmbGV4Om5vbmV9W19uZ2hvc3QtJUNPTVAlXTpub3QoLmFjdHVhbC1zaXplKSAgIGltZ1tfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bWF4LWhlaWdodDoxMDAlO21heC13aWR0aDoxMDAlO3dpZHRoOmF1dG87aGVpZ2h0OjEwMCU7b2JqZWN0LWZpdDpjb250YWlufS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyNHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5zdGVwLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfVtfbmdob3N0LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDowfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0ubGlua2VkLXRpbWUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDt3aWR0aDoxMDAlfS5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjE0cHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubGlua2VkLXRpbWUtdGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjF9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjJweDt0b3A6NnB4O3Bvc2l0aW9uOmFic29sdXRlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2xlZnQ6N3B4O3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksS25lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kYXRhU291cmNlPWksdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHLHRoaXMuYnJpZ2h0bmVzc0luTWlsbGkkPXRoaXMuc3RvcmUuc2VsZWN0KGVBKSx0aGlzLmNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QodEEpLHRoaXMuYWN0dWFsU2l6ZUdsb2JhbFNldHRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KG5BKSx0aGlzLnNob3dBY3R1YWxTaXplPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hMSx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3Q9bmV3IFZyKHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCksdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1vblN0ZXBJbmRleENoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChTUCh7Y2FyZElkOnRoaXMuY2FyZElkLHN0ZXBJbmRleDplfSkpfWlzSW1hZ2VDYXJkTWV0YWRhdGEoZSl7bGV0e3BsdWdpbjppfT1lO3JldHVybiBpPT09V24uSU1BR0VTfW9uQWN0dWFsU2l6ZVRvZ2dsZSgpe3RoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZD0hdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdC5uZXh0KHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlZCl9bmdPbkluaXQoKXtwbihbdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0XSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbbCxjXSk9Pnt0aGlzLnNob3dBY3R1YWxTaXplPWx8fGMsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5zaG93QWN0dWFsU2l6ZSl9KSkuc3Vic2NyaWJlKCgpPT57fSk7bGV0IGk9dGhpcy5zdG9yZS5zZWxlY3QoU2wsdGhpcy5jYXJkSWQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxIZShsPT4hIWwmJnRoaXMuaXNJbWFnZUNhcmRNZXRhZGF0YShsKSksQihsPT5sKSxRcygxKSksbz1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksQigoW2wsY10pPT57bGV0IHU9bC5ydW5JZDtyZXR1cm4gYyYmYy5oYXNPd25Qcm9wZXJ0eSh1KT9jW3VdOltdfSksZGkoKGwsYyk9PmwubGVuZ3RoPT09Yy5sZW5ndGgmJjA9PT1sLmxlbmd0aHx8bD09PWMpLFFzKDEpKTt0aGlzLnN0ZXBJbmRleCQ9dGhpcy5zdG9yZS5zZWxlY3QoTVYsdGhpcy5jYXJkSWQpLnBpcGUoQihsPT5sP2wuaW5kZXg6bnVsbCkpLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJD10aGlzLnN0b3JlLnNlbGVjdChNVix0aGlzLmNhcmRJZCkucGlwZShCKGw9PiEhbCYmbC5pc0Nsb3Nlc3QpKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihsPT5sLnJ1bklkKSksdGhpcy5zYW1wbGUkPWkucGlwZShCKGw9Pmwuc2FtcGxlKSksdGhpcy5udW1TYW1wbGUkPWkucGlwZShCKGw9PmwubnVtU2FtcGxlKSksdGhpcy5zdGVwcyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc1osdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KFVwKS5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/Y18obCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKHNyKHRoaXMuc3RlcHMkKSxCKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcih1PT51Pj1sLnN0YXJ0U3RlcCYmdTw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPXBuKFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoQigoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoQihsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpLHcoeXUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksUCgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLGooNiwiYXN5bmMiKSxqKDcsImFzeW5jIiksaig4LCJhc3luYyIpLGooOSwiYXN5bmMiKSxqKDEwLCJhc3luYyIpLGooMTEsImFzeW5jIiksaigxMiwiYXN5bmMiKSxqKDEzLCJhc3luYyIpLGooMTQsImFzeW5jIiksaigxNSwiYXN5bmMiKSxqKDE2LCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFcoMywyMixpLnRhZyQpKSgicnVuSWQiLFcoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFcoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixXKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixXKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixXKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixXKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixXKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVygxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFcoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVcoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFcoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVygxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFcoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W1FuZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHJyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KHJyfHwocnI9e30pKSxycikpKCksU3I9KCgpPT4oZnVuY3Rpb24obil7bltuLkxJTkVBUj0wXT0iTElORUFSIixuW24uTE9HMTA9MV09IkxPRzEwIixuW24uVElNRT0yXT0iVElNRSJ9KFNyfHwoU3I9e30pKSxTcikpKCksa3I9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJOT05FIixuLkRSQUdfWk9PTUlORz0iRFJBR19aT09NSU5HIixuLlNDUk9MTF9aT09NSU5HPSJTQ1JPTExfWk9PTUlORyIsbi5QQU5OSU5HPSJQQU5OSU5HIn0oa3J8fChrcj17fSkpLGtyKSkoKTtmdW5jdGlvbiBzTmUobix0KXsxJm4mJihnKDAsInNwYW4iKSxEKDEsInNjYWxhciIpLHYoKSl9ZnVuY3Rpb24gYU5lKG4sdCl7MSZuJiYoZygwLCJzcGFuIiksRCgxLCJoaXN0b2dyYW0iKSx2KCkpfWZ1bmN0aW9uIGxOZShuLHQpezEmbiYmKGcoMCwic3BhbiIpLEQoMSwidW5rbm93biIpLHYoKSl9ZnVuY3Rpb24gY05lKG4sdCl7aWYoMSZuJiYoS3QoMCwxMyksRSgxLHNOZSwyLDAsInNwYW4iLDE0KSxFKDIsYU5lLDIsMCwic3BhbiIsMTQpLEUoMyxsTmUsMiwwLCJzcGFuIiwxNSksWnQoKSksMiZuKXtsZXQgZT1NKDIpO2IoIm5nU3dpdGNoIixlLmNhcmRNZXRhZGF0YS5wbHVnaW4pLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUykseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gdU5lKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBkTmUobix0KXtpZigxJm4mJihnKDAsIm9wdGlvbiIsMTYpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlLmlkKSx4KDEpLHl0KGUubmFtZSl9fWZ1bmN0aW9uIHBOZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImgyIiksRSgyLGNOZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pLGcoNCwic3BhbiIpLEQoNSwiRG93bmxvYWRceGEwIiksdigpLEUoNix1TmUsMSwwLCJuZy1jb250YWluZXIiLDMpLGcoNywic3BhbiIpLEQoOCwiXHhhMGRhdGEgZm9yXHhhMCIpLHYoKSxnKDksImNvZGUiLDQpLEQoMTApLHYoKSgpLGcoMTEsIm1hdC1kaWFsb2ctY29udGVudCIpKDEyLCJtYXQtZm9ybS1maWVsZCIsNSkoMTMsIm1hdC1sYWJlbCIpLEQoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksdigpLGcoMTUsInNlbGVjdCIsNiksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLGcoMTYsIm9wdGlvbiIsNyksRCgxNywiLSIpLHYoKSxFKDE4LGROZSwyLDIsIm9wdGlvbiIsOCksdigpKCksZygxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLEQoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksdigpLEQoMjIsIlx4YTAiKSxnKDIzLCJhIiwxMCksRCgyNCwiSlNPTiIpLHYoKSxnKDI1LCJhIiwxMCksRCgyNiwiQ1NWIiksdigpKCkoKSxnKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksRCgyOSwiQ2xvc2UiKSx2KCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoMyksaT1NKCk7eCg2KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlKSx4KDMpLGIoInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLHgoMSkseXQoaS5jYXJkTWV0YWRhdGEudGFnKSx4KDUpLGIoInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSx4KDEpLGIoInZhbHVlIiwiIikseCgyKSxiKCJuZ0Zvck9mIixpLnJ1bnMpLHgoNSksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24sZGwpLHgoMiksYigiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSkoImhyZWYiLGkuZG93bmxvYWRVcmxDc3YsZGwpfX1mdW5jdGlvbiBoTmUobix0KXsxJm4mJkQoMCwiTG9hZGluZy4uLiIpfXZhciBKbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEcsdGhpcy5QbHVnaW5UeXBlPVdufWdldERvd25sb2FkTmFtZShlKXtsZXQgaT10aGlzLnJ1bnMuZmluZChyPT5yLmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKTtyZXR1cm4gaT9gJHtpLm5hbWV9LiR7ZX1gOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCIsImhyZWYiLCJpbmNsdWRlRmVhdHVyZUZsYWdzIl0sWyJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIk5nU3dpdGNoRGVmYXVsdCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKEUoMCxwTmUsMzAsMTIsIm5nLWNvbnRhaW5lciIsMCksRSgxLGhOZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDEsZW4pKSwyJmUpe2xldCByPXN0KDIpO2IoIm5nSWYiLGkuY2FyZE1ldGFkYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxObyxocixJcixIUCxBJCxQJCwkbixGQSxqQSxHQSxXQSxEdSx6XyxRX10sc3R5bGVzOlsiaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksJG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IFZyKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD1lLnNlbGVjdChTbCxyLmNhcmRJZCkucGlwZShIZShvPT5Cb29sZWFuKG8pKSksdGhpcy5kb3dubG9hZFVybENzdiQ9cG4oW2Uuc2VsZWN0KFNsLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShCKChbbyxzXSk9Pm8mJnM/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxzLCJjc3YiKTpudWxsKSxWbihudWxsKSksdGhpcy5kb3dubG9hZFVybEpzb24kPXBuKFtlLnNlbGVjdChTbCxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoQigoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywianNvbiIpOm51bGwpLFZuKG51bGwpKSx0aGlzLnJ1bnMkPXBuKFtlLnNlbGVjdChDWiksZS5zZWxlY3QoTHAsci5jYXJkSWQpXSkucGlwZShCKChbbyxzXSk9PnM/T2JqZWN0LmtleXMocykubWFwKGE9Pm8uZ2V0KGEpKS5maWx0ZXIoQm9vbGVhbik6W10pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyh5dSksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksUCgicnVuU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkUnVuSWQkLm5leHQobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSxqKDQsImFzeW5jIiksaig1LCJhc3luYyIpLHYoKSksMiZlJiZiKCJjYXJkTWV0YWRhdGEiLFcoMSw1LGkuY2FyZE1ldGFkYXRhJCkpKCJydW5zIixXKDIsNyxpLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFcoMyw5LGkuc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLFcoNCwxMSxpLmRvd25sb2FkVXJsQ3N2JCkpKCJkb3dubG9hZFVybEpzb24iLFcoNSwxMyxpLmRvd25sb2FkVXJsSnNvbiQpKX0sZGVwZW5kZW5jaWVzOltKbmUsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJsKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIHd3KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiBSbChuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgRnU9d3coUmwpLnJpZ2h0LHNIPU1hdGguc3FydCg1MCksYUg9TWF0aC5zcXJ0KDEwKSxsSD1NYXRoLnNxcnQoMik7ZnVuY3Rpb24gTXcobix0LGUpe3ZhciBpLG8scyxhLHI9LTE7aWYoZT0rZSwobj0rbik9PSh0PSt0KSYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYobz1uLG49dCx0PW8pLDA9PT0oYT1idihuLHQsZSkpfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKHQtbisxKSk7KytyPG87KXNbcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLHM9bmV3IEFycmF5KG89TWF0aC5jZWlsKG4tdCsxKSk7KytyPG87KXNbcl09KG4tcikvYTtyZXR1cm4gaSYmcy5yZXZlcnNlKCksc31mdW5jdGlvbiBidihuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxvPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KG8+PXNIPzEwOm8+PWFIPzU6bz49bEg/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhvPj1zSD8xMDpvPj1hSD81Om8+PWxIPzI6MSl9ZnVuY3Rpb24gRGQobix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSksbz1pL3I7cmV0dXJuIG8+PXNIP3IqPTEwOm8+PWFIP3IqPTU6bz49bEgmJihyKj0yKSx0PG4/LXI6cn12YXIgalA9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIG9pZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBNTmUobil7cmV0dXJuInRyYW5zbGF0ZSgiKyhuKy41KSsiLDApIn1mdW5jdGlvbiBTTmUobil7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKG4rLjUpKyIpIn1mdW5jdGlvbiBFTmUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybituKHQpfX1mdW5jdGlvbiBUTmUobil7dmFyIHQ9TWF0aC5tYXgoMCxuLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIG4ucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24oZSl7cmV0dXJuK24oZSkrdH19ZnVuY3Rpb24gRE5lKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIGFpZShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD0xPT09bnx8ND09PW4/LTE6MSxjPTQ9PT1ufHwyPT09bj8ieCI6InkiLHU9MT09PW58fDM9PT1uP01OZTpTTmU7ZnVuY3Rpb24gZChwKXt2YXIgaD1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksZj1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOm9pZSksbT1NYXRoLm1heChvLDApK2EsQz10LnJhbmdlKCksXz0rQ1swXSsuNSx5PStDW0MubGVuZ3RoLTFdKy41LEk9KHQuYmFuZHdpZHRoP1ROZTpFTmUpKHQuY29weSgpKSxBPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxPPUEuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLGVlPUEuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCx0KS5vcmRlcigpLFg9ZWUuZXhpdCgpLHhlPWVlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksZmU9ZWUuc2VsZWN0KCJsaW5lIiksdmU9ZWUuc2VsZWN0KCJ0ZXh0Iik7Tz1PLm1lcmdlKE8uZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLGVlPWVlLm1lcmdlKHhlKSxmZT1mZS5tZXJnZSh4ZS5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMrIjIiLGwqbykpLHZlPXZlLm1lcmdlKHhlLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKGMsbCptKS5hdHRyKCJkeSIsMT09PW4/IjBlbSI6Mz09PW4/IjAuNzFlbSI6IjAuMzJlbSIpKSxwIT09QSYmKE89Ty50cmFuc2l0aW9uKHApLGVlPWVlLnRyYW5zaXRpb24ocCksZmU9ZmUudHJhbnNpdGlvbihwKSx2ZT12ZS50cmFuc2l0aW9uKHApLFg9WC50cmFuc2l0aW9uKHApLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oVCl7cmV0dXJuIGlzRmluaXRlKFQ9SShUKSk/dShUKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSx4ZS5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKFQpe3ZhciBuZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KG5lJiZpc0Zpbml0ZShuZT1uZShUKSk/bmU6SShUKSl9KSksWC5yZW1vdmUoKSxPLmF0dHIoImQiLDQ9PT1ufHwyPT1uP3M/Ik0iK2wqcysiLCIrXysiSDAuNVYiK3krIkgiK2wqczoiTTAuNSwiK18rIlYiK3k6cz8iTSIrXysiLCIrbCpzKyJWMC41SCIreSsiViIrbCpzOiJNIitfKyIsMC41SCIreSksZWUuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihUKXtyZXR1cm4gdShJKFQpKX0pLGZlLmF0dHIoYysiMiIsbCpvKSx2ZS5hdHRyKGMsbCptKS50ZXh0KGYpLEEuZmlsdGVyKEROZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PW4/InN0YXJ0Ijo0PT09bj8iZW5kIjoibWlkZGxlIiksQS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9SX0pfXJldHVybiBkLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXAsZCk6dH0sZC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPWpQLmNhbGwoYXJndW1lbnRzKSxkfSxkLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09cD9bXTpqUC5jYWxsKHApLGQpOmUuc2xpY2UoKX0sZC50aWNrVmFsdWVzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXA/bnVsbDpqUC5jYWxsKHApLGQpOmkmJmkuc2xpY2UoKX0sZC50aWNrRm9ybWF0PWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZCk6cn0sZC50aWNrU2l6ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPStwLGQpOm99LGQudGlja1NpemVJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rcCxkKTpvfSxkLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3AsZCk6c30sZC50aWNrUGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rcCxkKTphfSxkfXZhciBBTmU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gY2llKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IHFQKGUpfWZ1bmN0aW9uIHFQKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIElOZShuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfWZ1bmN0aW9uIFBOZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGxpZShuLHQsZSl7Zm9yKHZhciBpPTAscj1uLmxlbmd0aDtpPHI7KytpKWlmKG5baV0ubmFtZT09PXQpe25baV09QU5lLG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn1xUC5wcm90b3R5cGU9Y2llLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cVAsb246ZnVuY3Rpb24obix0KXt2YXIgcixlPXRoaXMuXyxpPUlOZShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZihudWxsPT10KWZvcihyIGluIGUpZVtyXT1saWUoZVtyXSxuLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288czspaWYoKHI9KG49aVtvXSkudHlwZSkmJihyPVBOZShlW3JdLG4ubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sdD10aGlzLl87Zm9yKHZhciBlIGluIHQpbltlXT10W2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBxUChuKX0sY2FsbDpmdW5jdGlvbihuLHQpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbyxlPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSllW2ldPWFyZ3VtZW50c1tpKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKGk9MCxyPShvPXRoaXMuX1tuXSkubGVuZ3RoO2k8cjsrK2kpb1tpXS52YWx1ZS5hcHBseSh0LGUpfSxhcHBseTpmdW5jdGlvbihuLHQsZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IodmFyIGk9dGhpcy5fW25dLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseSh0LGUpfX07dmFyIGZIPWNpZSxZUD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbUg9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOllQLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gQWQobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksbUguaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOm1IW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gUk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09WVAmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVlQP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBPTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gWFAobil7dmFyIHQ9QWQobik7cmV0dXJuKHQubG9jYWw/T05lOlJOZSkodCl9ZnVuY3Rpb24ga05lKCl7fWZ1bmN0aW9uIGJtKG4pe3JldHVybiBudWxsPT1uP2tOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIEZOZSgpe3JldHVybltdfWZ1bmN0aW9uIEV3KG4pe3JldHVybiBudWxsPT1uP0ZOZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIFR3KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIFFQKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIER3KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWZ1bmN0aW9uIE5OZShuLHQsZSxpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPXQubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT10W3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6ZVtzXT1uZXcgRHcobixvW3NdKTtmb3IoO3M8bDsrK3MpKGE9dFtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIExOZShuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGgsYz17fSx1PXQubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkodSk7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYocFthXT1oPSIkIitzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksaCBpbiBjP3JbYV09bDpjW2hdPWwpO2ZvcihhPTA7YTxkOysrYSkobD1jW2g9IiQiK3MuY2FsbChuLG9bYV0sYSxvKV0pPyhpW2FdPWwsbC5fX2RhdGFfXz1vW2FdLGNbaF09bnVsbCk6ZVthXT1uZXcgRHcobixvW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbcFthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBCTmUobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gVk5lKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBITmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBVTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiB6TmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX19ZnVuY3Rpb24gak5lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0dHJpYnV0ZShuLGUpfX1mdW5jdGlvbiBHTmUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gS1Aobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFdOZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBxTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBZTmUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4saSxlKX19ZnVuY3Rpb24gbGgobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxLUChuKS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBYTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uIFFOZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gS05lKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9fWZ1bmN0aW9uIFBpZShuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gZ0gobil7cmV0dXJuIG4uY2xhc3NMaXN0fHxuZXcgUmllKG4pfWZ1bmN0aW9uIFJpZShuKXt0aGlzLl9ub2RlPW4sdGhpcy5fbmFtZXM9UGllKG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gT2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24ga2llKG4sdCl7Zm9yKHZhciBlPWdIKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gWk5lKG4pe3JldHVybiBmdW5jdGlvbigpe09pZSh0aGlzLG4pfX1mdW5jdGlvbiBKTmUobil7cmV0dXJuIGZ1bmN0aW9uKCl7a2llKHRoaXMsbil9fWZ1bmN0aW9uICROZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9PaWU6a2llKSh0aGlzLG4pfX1mdW5jdGlvbiBlTGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHRMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIG5MZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX1mdW5jdGlvbiBpTGUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiByTGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gb0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ/PyIifX1mdW5jdGlvbiBzTGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gYUxlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbExlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gY0xlKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdUxlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBkTGUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufUR3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6RHcsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX0sUmllLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRoaXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIHFpZT17fSxfSD1udWxsO2Z1bmN0aW9uIHBMZShuLHQsZSl7cmV0dXJuIG49WWllKG4sdCxlKSxmdW5jdGlvbihpKXt2YXIgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHxyIT09dGhpcyYmISg4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpKSYmbi5jYWxsKHRoaXMsaSl9fWZ1bmN0aW9uIFlpZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPV9IO19IPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e19IPXJ9fX1mdW5jdGlvbiBoTGUobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixpPXQuaW5kZXhPZigiLiIpO3JldHVybiBpPj0wJiYoZT10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHt0eXBlOnQsbmFtZTplfX0pfWZ1bmN0aW9uIGZMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBvLGU9MCxpPS0xLHI9dC5sZW5ndGg7ZTxyOysrZSlvPXRbZV0sbi50eXBlJiZvLnR5cGUhPT1uLnR5cGV8fG8ubmFtZSE9PW4ubmFtZT90WysraV09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gbUxlKG4sdCxlKXt2YXIgaT1xaWUuaGFzT3duUHJvcGVydHkobi50eXBlKT9wTGU6WWllO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgdT0wLGQ9YS5sZW5ndGg7dTxkOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFFpZShuLHQsZSl7dmFyIGk9S1Aobikscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gZ0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFpZSh0aGlzLG4sdCl9fWZ1bmN0aW9uIF9MZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRaWUodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwocWllPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgdkg9W251bGxdO2Z1bmN0aW9uIFFyKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIFppZSgpe3JldHVybiBuZXcgUXIoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSx2SCl9UXIucHJvdG90eXBlPVppZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFyLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Ym0obikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KShsPW9bdV0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbdV09Yyk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPUV3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBRcihpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVR3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBRcihpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGg9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihlZSl7aFsrK2NdPWVlfSksaDt2YXIgZT10P0xOZTpOTmUsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19KG4pKTtmb3IodmFyIG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PWlbY10sZD1yW2NdLHA9ZC5sZW5ndGgsaD1uLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsaSksZj1oLmxlbmd0aCxtPWFbY109bmV3IEFycmF5KGYpLEM9c1tjXT1uZXcgQXJyYXkoZik7ZSh1LGQsbSxDLGxbY109bmV3IEFycmF5KHApLGgsdCk7Zm9yKHZhciBBLE8seT0wLEk9MDt5PGY7Kyt5KWlmKEE9bVt5XSl7Zm9yKHk+PUkmJihJPXkrMSk7IShPPUNbSV0pJiYrK0k8ZjspO0EuX25leHQ9T3x8bnVsbH19cmV0dXJuKHM9bmV3IFFyKHMsaSkpLl9lbnRlcj1hLHMuX2V4aXQ9bCxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgUXIodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoUVApLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBRcih0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKFFQKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBpPSJmdW5jdGlvbiI9PXR5cGVvZiBuP24oaSk6aS5hcHBlbmQobisiIiksbnVsbCE9dCYmKHI9dChyKSksbnVsbD09ZT9vLnJlbW92ZSgpOmUobyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn0sbWVyZ2U6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgUXIocyx0aGlzLl9wYXJlbnRzKX0sb3JkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9LTEsZT1uLmxlbmd0aDsrK3Q8ZTspZm9yKHZhciBzLGk9blt0XSxyPWkubGVuZ3RoLTEsbz1pW3JdOy0tcj49MDspKHM9aVtyXSkmJihvJiY0XnMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obykmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxvKSxvPXMpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQoZCxwKXtyZXR1cm4gZCYmcD9uKGQuX19kYXRhX18scC5fX2RhdGFfXyk6IWQtIXB9bnx8KG49Qk5lKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLGk9ZS5sZW5ndGgscj1uZXcgQXJyYXkoaSksbz0wO288aTsrK28pe2Zvcih2YXIgYyxzPWVbb10sYT1zLmxlbmd0aCxsPXJbb109bmV3IEFycmF5KGEpLHU9MDt1PGE7Kyt1KShjPXNbdV0pJiYobFt1XT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBRcihyLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgbj1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLG4uYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLG89aS5sZW5ndGg7cjxvOysrcil7dmFyIHM9aVtyXTtpZihzKXJldHVybiBzfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPTAsaT10Lmxlbmd0aDtlPGk7KytlKWZvcih2YXIgYSxyPXRbZV0sbz0wLHM9ci5sZW5ndGg7bzxzOysrbykoYT1yW29dKSYmbi5jYWxsKGEsYS5fX2RhdGFfXyxvLHIpO3JldHVybiB0aGlzfSxhdHRyOmZ1bmN0aW9uKG4sdCl7dmFyIGU9QWQobik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgaT10aGlzLm5vZGUoKTtyZXR1cm4gZS5sb2NhbD9pLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6aS5nZXRBdHRyaWJ1dGUoZSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09dD9lLmxvY2FsP0hOZTpWTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZS5sb2NhbD9HTmU6ak5lOmUubG9jYWw/ek5lOlVOZSkoZSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09dD9XTmU6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/WU5lOnFOZSkobix0LGU/PyIiKSk6bGgodGhpcy5ub2RlKCksbil9LHByb3BlcnR5OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/WE5lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P0tOZTpRTmUpKG4sdCkpOnRoaXMubm9kZSgpW25dfSxjbGFzc2VkOmZ1bmN0aW9uKG4sdCl7dmFyIGU9UGllKG4rIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBpPWdIKHRoaXMubm9kZSgpKSxyPS0xLG89ZS5sZW5ndGg7KytyPG87KWlmKCFpLmNvbnRhaW5zKGVbcl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0PyROZTp0P1pOZTpKTmUpKGUsdCkpfSx0ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2VMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/bkxlOnRMZSkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1sOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1uP2lMZTooImZ1bmN0aW9uIj09dHlwZW9mIG4/b0xlOnJMZSkobikpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKHNMZSl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChhTGUpfSxhcHBlbmQ6ZnVuY3Rpb24obil7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpYUChuKSxpPW51bGw9PXQ/bExlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Ym0odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGNMZSl9LGNsb25lOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNlbGVjdChuP2RMZTp1TGUpfSxkYXR1bTpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsbik6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKG4sdCxlKXt2YXIgcixzLGk9aExlKG4rIiIpLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoYT10P21MZTpmTGUsbnVsbD09ZSYmKGU9ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChhKGlbcl0sdCxlKSk7cmV0dXJuIHRoaXN9dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKWZvcih2YXIgdSxsPTAsYz1hLmxlbmd0aDtsPGM7KytsKWZvcihyPTAsdT1hW2xdO3I8bzsrK3IpaWYoKHM9aVtyXSkudHlwZT09PXUudHlwZSYmcy5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P19MZTpnTGUpKG4sdCkpfX07dmFyIElkPVppZTtmdW5jdGlvbiBaUChuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bmV3IFFyKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgUXIoW1tuXV0sdkgpfWZ1bmN0aW9uIHhtKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiB4dihuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBjaCgpe312YXIgJFA9MS8uNyxDdj0iXFxzKihbKy1dP1xcZCspXFxzKiIsSXc9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTHU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLHZMZT0vXiMoWzAtOWEtZl17Myw4fSkkLyx5TGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0N2LEN2LEN2XSsiXFwpJCIpLGJMZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTHUsTHUsTHVdKyJcXCkkIikseExlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbQ3YsQ3YsQ3YsSXddKyJcXCkkIiksQ0xlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbTHUsTHUsTHUsSXddKyJcXCkkIiksd0xlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tJdyxMdSxMdV0rIlxcKSQiKSxNTGU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tJdyxMdSxMdSxJd10rIlxcKSQiKSxKaWU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gJGllKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gZXJlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gVGMobil7dmFyIHQsZTtyZXR1cm4gbj0obisiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9dkxlLmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksNj09PWU/dHJlKHQpOjM9PT1lP25ldyBncyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKDE1JnQpPDw0fDE1JnQsMSk6OD09PWU/SlAodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwoMjU1JnQpLzI1NSk6ND09PWU/SlAodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fDI0MCZ0LCgoMTUmdCk8PDR8MTUmdCkvMjU1KTpudWxsKToodD15TGUuZXhlYyhuKSk/bmV3IGdzKHRbMV0sdFsyXSx0WzNdLDEpOih0PWJMZS5leGVjKG4pKT9uZXcgZ3MoMjU1KnRbMV0vMTAwLDI1NSp0WzJdLzEwMCwyNTUqdFszXS8xMDAsMSk6KHQ9eExlLmV4ZWMobikpP0pQKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PUNMZS5leGVjKG4pKT9KUCgyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCx0WzRdKToodD13TGUuZXhlYyhuKSk/cnJlKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9TUxlLmV4ZWMobikpP3JyZSh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkppZS5oYXNPd25Qcm9wZXJ0eShuKT90cmUoSmllW25dKToidHJhbnNwYXJlbnQiPT09bj9uZXcgZ3MoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB0cmUobil7cmV0dXJuIG5ldyBncyhuPj4xNiYyNTUsbj4+OCYyNTUsMjU1Jm4sMSl9ZnVuY3Rpb24gSlAobix0LGUsaSl7cmV0dXJuIGk8PTAmJihuPXQ9ZT1OYU4pLG5ldyBncyhuLHQsZSxpKX1mdW5jdGlvbiB4SChuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNofHwobj1UYyhuKSksbj9uZXcgZ3MoKG49bi5yZ2IoKSkucixuLmcsbi5iLG4ub3BhY2l0eSk6bmV3IGdzfWZ1bmN0aW9uIHd2KG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD94SChuKTpuZXcgZ3Mobix0LGUsaT8/MSl9ZnVuY3Rpb24gZ3Mobix0LGUsaSl7dGhpcy5yPStuLHRoaXMuZz0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIG5yZSgpe3JldHVybiIjIit5SCh0aGlzLnIpK3lIKHRoaXMuZykreUgodGhpcy5iKX1mdW5jdGlvbiBpcmUoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKDE9PT1uPyIpIjoiLCAiK24rIikiKX1mdW5jdGlvbiB5SChuKXtyZXR1cm4oKG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpKTwxNj8iMCI6IiIpK24udG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHJyZShuLHQsZSxpKXtyZXR1cm4gaTw9MD9uPXQ9ZT1OYU46ZTw9MHx8ZT49MT9uPXQ9TmFOOnQ8PTAmJihuPU5hTiksbmV3IE51KG4sdCxlLGkpfWZ1bmN0aW9uIG9yZShuKXtpZihuIGluc3RhbmNlb2YgTnUpcmV0dXJuIG5ldyBOdShuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBjaHx8KG49VGMobikpLCFuKXJldHVybiBuZXcgTnU7aWYobiBpbnN0YW5jZW9mIE51KXJldHVybiBuO3ZhciB0PShuPW4ucmdiKCkpLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSksbz1NYXRoLm1heCh0LGUsaSkscz1OYU4sYT1vLXIsbD0obytyKS8yO3JldHVybiBhPyhzPXQ9PT1vPyhlLWkpL2ErNiooZTxpKTplPT09bz8oaS10KS9hKzI6KHQtZSkvYSs0LGEvPWw8LjU/bytyOjItby1yLHMqPTYwKTphPWw+MCYmbDwxPzA6cyxuZXcgTnUocyxhLGwsbi5vcGFjaXR5KX1mdW5jdGlvbiBDbShuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/b3JlKG4pOm5ldyBOdShuLHQsZSxpPz8xKX1mdW5jdGlvbiBOdShuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5zPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gYkgobix0LGUpe3JldHVybiAyNTUqKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpfXhtKGNoLFRjLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OiRpZSxmb3JtYXRIZXg6JGllLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBvcmUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjplcmUsdG9TdHJpbmc6ZXJlfSkseG0oZ3Msd3YseHYoY2gse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/JFA6TWF0aC5wb3coJFAsbiksbmV3IGdzKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBncyh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Om5yZSxmb3JtYXRIZXg6bnJlLGZvcm1hdFJnYjppcmUsdG9TdHJpbmc6aXJlfSkpLHhtKE51LENtLHh2KGNoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPyRQOk1hdGgucG93KCRQLG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1udWxsPT1uPy43Ok1hdGgucG93KC43LG4pLG5ldyBOdSh0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IGdzKGJIKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLGJIKG4scixpKSxiSChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0obj1pc05hTihuKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxuKSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09bj8iKSI6IiwgIituKyIpIil9fSkpO3ZhciBzcmU9TWF0aC5QSS8xODAsYXJlPTE4MC9NYXRoLlBJLGRyZT00LzI5LE12PTYvMjkscHJlPTMqTXYqTXY7ZnVuY3Rpb24gaHJlKG4pe2lmKG4gaW5zdGFuY2VvZiBCdSlyZXR1cm4gbmV3IEJ1KG4ubCxuLmEsbi5iLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIFBkKXJldHVybiBmcmUobik7biBpbnN0YW5jZW9mIGdzfHwobj14SChuKSk7dmFyIG8scyx0PVNIKG4uciksZT1TSChuLmcpLGk9U0gobi5iKSxyPUNIKCguMjIyNTA0NSp0Ky43MTY4Nzg2KmUrLjA2MDYxNjkqaSkvMSk7cmV0dXJuIHQ9PT1lJiZlPT09aT9vPXM9cjoobz1DSCgoLjQzNjA3NDcqdCsuMzg1MDY0OSplKy4xNDMwODA0KmkpLy45NjQyMikscz1DSCgoLjAxMzkzMjIqdCsuMDk3MTA0NSplKy43MTQxNzMzKmkpLy44MjUyMSkpLG5ldyBCdSgxMTYqci0xNiw1MDAqKG8tciksMjAwKihyLXMpLG4ub3BhY2l0eSl9ZnVuY3Rpb24gQnUobix0LGUsaSl7dGhpcy5sPStuLHRoaXMuYT0rdCx0aGlzLmI9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIENIKG4pe3JldHVybiBuPi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3cobiwxLzMpOm4vcHJlK2RyZX1mdW5jdGlvbiB3SChuKXtyZXR1cm4gbj5Ndj9uKm4qbjpwcmUqKG4tZHJlKX1mdW5jdGlvbiBNSChuKXtyZXR1cm4gMjU1KihuPD0uMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIFNIKG4pe3JldHVybihuLz0yNTUpPD0uMDQwNDU/bi8xMi45MjpNYXRoLnBvdygobisuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFRMZShuKXtpZihuIGluc3RhbmNlb2YgUGQpcmV0dXJuIG5ldyBQZChuLmgsbi5jLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBCdXx8KG49aHJlKG4pKSwwPT09bi5hJiYwPT09bi5iKXJldHVybiBuZXcgUGQoTmFOLDA8bi5sJiZuLmw8MTAwPzA6TmFOLG4ubCxuLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIobi5iLG4uYSkqYXJlO3JldHVybiBuZXcgUGQodDwwP3QrMzYwOnQsTWF0aC5zcXJ0KG4uYSpuLmErbi5iKm4uYiksbi5sLG4ub3BhY2l0eSl9ZnVuY3Rpb24gd20obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1RMZShuKTpuZXcgUGQobix0LGUsaT8/MSl9ZnVuY3Rpb24gUGQobix0LGUsaSl7dGhpcy5oPStuLHRoaXMuYz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfWZ1bmN0aW9uIGZyZShuKXtpZihpc05hTihuLmgpKXJldHVybiBuZXcgQnUobi5sLDAsMCxuLm9wYWNpdHkpO3ZhciB0PW4uaCpzcmU7cmV0dXJuIG5ldyBCdShuLmwsTWF0aC5jb3ModCkqbi5jLE1hdGguc2luKHQpKm4uYyxuLm9wYWNpdHkpfWZ1bmN0aW9uIFRIKG4sdCxlLGkscil7dmFyIG89bipuLHM9bypuO3JldHVybigoMS0zKm4rMypvLXMpKnQrKDQtNipvKzMqcykqZSsoMSszKm4rMypvLTMqcykqaStzKnIpLzZ9ZnVuY3Rpb24gU3Yobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIF9yZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbitlKnR9fWZ1bmN0aW9uIHRSKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP19yZShuLGU+MTgwfHxlPC0xODA/ZS0zNjAqTWF0aC5yb3VuZChlLzM2MCk6ZSk6U3YoaXNOYU4obik/dDpuKX1mdW5jdGlvbiBmYShuLHQpe3ZhciBlPXQtbjtyZXR1cm4gZT9fcmUobixlKTpTdihpc05hTihuKT90Om4pfXhtKEJ1LGZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9ocmUobik6bmV3IEJ1KG4sdCxlLGk/PzEpfSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBCdSh0aGlzLmwrMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgQnUodGhpcy5sLTE4KihuPz8xKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPSh0aGlzLmwrMTYpLzExNix0PWlzTmFOKHRoaXMuYSk/bjpuK3RoaXMuYS81MDAsZT1pc05hTih0aGlzLmIpP246bi10aGlzLmIvMjAwO3JldHVybiBuZXcgZ3MoTUgoMy4xMzM4NTYxKih0PS45NjQyMip3SCh0KSktMS42MTY4NjY3KihuPTEqd0gobikpLS40OTA2MTQ2KihlPS44MjUyMSp3SChlKSkpLE1IKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSpuKy4wMzM0NTQqZSksTUgoLjA3MTk0NTMqdC0uMjI4OTkxNCpuKzEuNDA1MjQyNyplKSx0aGlzLm9wYWNpdHkpfX0pKSx4bShQZCx3bSx4dihjaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBQZCh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobj8/MSksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgUGQodGhpcy5oLHRoaXMuYyx0aGlzLmwtMTgqKG4/PzEpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBmcmUodGhpcykucmdiKCl9fSkpO3ZhciBNbT1mdW5jdGlvbiBuKHQpe3ZhciBlPWZ1bmN0aW9uKG4pe3JldHVybiAxPT0obj0rbik/ZmE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10P2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbj1NYXRoLnBvdyhuLGUpLHQ9TWF0aC5wb3codCxlKS1uLGU9MS9lLGZ1bmN0aW9uKGkpe3JldHVybiBNYXRoLnBvdyhuK2kqdCxlKX19KHQsZSxuKTpTdihpc05hTih0KT9lOnQpfX0odCk7ZnVuY3Rpb24gaShyLG8pe3ZhciBzPWUoKHI9d3YocikpLnIsKG89d3YobykpLnIpLGE9ZShyLmcsby5nKSxsPWUoci5iLG8uYiksYz1mYShyLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHIucj1zKHUpLHIuZz1hKHUpLHIuYj1sKHUpLHIub3BhY2l0eT1jKHUpLHIrIiJ9fXJldHVybiBpLmdhbW1hPW4saX0oMSk7ZnVuY3Rpb24geXJlKG4pe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcyxhLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkoZSk7Zm9yKHM9MDtzPGU7KytzKWE9d3YodFtzXSksaVtzXT1hLnJ8fDAscltzXT1hLmd8fDAsb1tzXT1hLmJ8fDA7cmV0dXJuIGk9bihpKSxyPW4ociksbz1uKG8pLGEub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBhLnI9aShsKSxhLmc9cihsKSxhLmI9byhsKSxhKyIifX19ZnVuY3Rpb24gYnJlKG4sdCl7dHx8KHQ9W10pO3ZhciByLGU9bj9NYXRoLm1pbih0Lmxlbmd0aCxuLmxlbmd0aCk6MCxpPXQuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1vKSt0W3JdKm87cmV0dXJuIGl9fWZ1bmN0aW9uIENyZShuLHQpe3ZhciBzLGU9dD90Lmxlbmd0aDowLGk9bj9NYXRoLm1pbihlLG4ubGVuZ3RoKTowLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGUpO2ZvcihzPTA7czxpOysrcylyW3NdPVNtKG5bc10sdFtzXSk7Zm9yKDtzPGU7KytzKW9bc109dFtzXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHM9MDtzPGk7KytzKW9bc109cltzXShhKTtyZXR1cm4gb319ZnVuY3Rpb24gd3JlKG4sdCl7dmFyIGU9bmV3IERhdGU7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihpKXtyZXR1cm4gZS5zZXRUaW1lKG4qKDEtaSkrdCppKSxlfX1mdW5jdGlvbiBucyhuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIG4qKDEtZSkrdCplfX1mdW5jdGlvbiBNcmUobix0KXt2YXIgcixlPXt9LGk9e307Zm9yKHIgaW4obnVsbD09PW58fCJvYmplY3QiIT10eXBlb2YgbikmJihuPXt9KSwobnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdCkmJih0PXt9KSx0KXIgaW4gbj9lW3JdPVNtKG5bcl0sdFtyXSk6aVtyXT10W3JdO3JldHVybiBmdW5jdGlvbihvKXtmb3IociBpbiBlKWlbcl09ZVtyXShvKTtyZXR1cm4gaX19eXJlKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0sbz1uW2krMV07cmV0dXJuIFRIKChlLWkvdCkqdCxpPjA/bltpLTFdOjIqci1vLHIsbyxpPHQtMT9uW2krMl06MipvLXIpfX0pLHlyZShmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBUSCgoZS1pL3QpKnQsblsoaSt0LTEpJXRdLG5baSV0XSxuWyhpKzEpJXRdLG5bKGkrMikldF0pfX0pO3ZhciBBSD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csREg9bmV3IFJlZ0V4cChBSC5zb3VyY2UsImciKTtmdW5jdGlvbiBQdyhuLHQpe3ZhciBpLHIsbyxlPUFILmxhc3RJbmRleD1ESC5sYXN0SW5kZXg9MCxzPS0xLGE9W10sbD1bXTtmb3Iobis9IiIsdCs9IiI7KGk9QUguZXhlYyhuKSkmJihyPURILmV4ZWModCkpOykobz1yLmluZGV4KT5lJiYobz10LnNsaWNlKGUsbyksYVtzXT9hW3NdKz1vOmFbKytzXT1vKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbc10/YVtzXSs9cjphWysrc109cjooYVsrK3NdPW51bGwsbC5wdXNoKHtpOnMseDpucyhpLHIpfSkpLGU9REgubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYobz10LnNsaWNlKGUpLGFbc10/YVtzXSs9bzphWysrc109byksYS5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIGQsdT0wO3U8dDsrK3UpYVsoZD1sW3VdKS5pXT1kLngoYyk7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlvbiBTbShuLHQpe3ZhciBpLGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWU/U3YodCk6KCJudW1iZXIiPT09ZT9uczoic3RyaW5nIj09PWU/KGk9VGModCkpPyh0PWksTW0pOlB3OnQgaW5zdGFuY2VvZiBUYz9NbTp0IGluc3RhbmNlb2YgRGF0ZT93cmU6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT9icmU6QXJyYXkuaXNBcnJheSh0KT9DcmU6ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmd8fGlzTmFOKHQpP01yZTpucykobix0KX1mdW5jdGlvbiBJSChuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgUncsUkgsRXJlLGlSLFNyZT0xODAvTWF0aC5QSSxuUj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBQSChuLHQsZSxpLHIsbyl7dmFyIHMsYSxsO3JldHVybihzPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1zLHQvPXMpLChsPW4qZSt0KmkpJiYoZS09bipsLGktPXQqbCksKGE9TWF0aC5zcXJ0KGUqZStpKmkpKSYmKGUvPWEsaS89YSxsLz1hKSxuKmk8dCplJiYobj0tbix0PS10LGw9LWwscz0tcykse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxuKSpTcmUsc2tld1g6TWF0aC5hdGFuKGwpKlNyZSxzY2FsZVg6cyxzY2FsZVk6YX19ZnVuY3Rpb24gQXJlKG4sdCxlLGkpe2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBkPVtdLHA9W107cmV0dXJuIGM9bihjKSx1PW4odSksZnVuY3Rpb24oYyx1LGQscCxoLGYpe2lmKGMhPT1kfHx1IT09cCl7dmFyIG09aC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTtmLnB1c2goe2k6bS00LHg6bnMoYyxkKX0se2k6bS0yLHg6bnModSxwKX0pfWVsc2UoZHx8cCkmJmgucHVzaCgidHJhbnNsYXRlKCIrZCt0K3ArZSl9KGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxkLHApLGZ1bmN0aW9uKGMsdSxkLHApe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKHIoZCkrInJvdGF0ZSgiLG51bGwsaSktMix4Om5zKGMsdSl9KSk6dSYmZC5wdXNoKHIoZCkrInJvdGF0ZSgiK3UraSl9KGMucm90YXRlLHUucm90YXRlLGQscCksZnVuY3Rpb24oYyx1LGQscCl7YyE9PXU/cC5wdXNoKHtpOmQucHVzaChyKGQpKyJza2V3WCgiLG51bGwsaSktMix4Om5zKGMsdSl9KTp1JiZkLnB1c2gocihkKSsic2tld1goIit1K2kpfShjLnNrZXdYLHUuc2tld1gsZCxwKSxmdW5jdGlvbihjLHUsZCxwLGgsZil7aWYoYyE9PWR8fHUhPT1wKXt2YXIgbT1oLnB1c2gocihoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zi5wdXNoKHtpOm0tNCx4Om5zKGMsZCl9LHtpOm0tMix4Om5zKHUscCl9KX1lbHNlKDEhPT1kfHwxIT09cCkmJmgucHVzaChyKGgpKyJzY2FsZSgiK2QrIiwiK3ArIikiKX0oYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksZCxwKSxjPXU9bnVsbCxmdW5jdGlvbihoKXtmb3IodmFyIEMsZj0tMSxtPXAubGVuZ3RoOysrZjxtOylkWyhDPXBbZl0pLmldPUMueChoKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBPSD1BcmUoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9uUjooUnd8fChSdz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxSSD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsRXJlPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxSdy5zdHlsZS50cmFuc2Zvcm09bixuPUVyZS5nZXRDb21wdXRlZFN0eWxlKFJILmFwcGVuZENoaWxkKFJ3KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxSSC5yZW1vdmVDaGlsZChSdyksUEgoKyhuPW4uc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksa0g9QXJlKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP25SOihpUnx8KGlSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLGlSLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1pUi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9QSCgobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTpuUil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gSXJlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9Q20odCkpLmgsKGU9Q20oZSkpLmgpLHI9ZmEodC5zLGUucyksbz1mYSh0LmwsZS5sKSxzPWZhKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gdC5oPWkoYSksdC5zPXIoYSksdC5sPW8oYSksdC5vcGFjaXR5PXMoYSksdCsiIn19fXZhciBGSD1JcmUodFIpO2Z1bmN0aW9uIFByZShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PXdtKHQpKS5oLChlPXdtKGUpKS5oKSxyPWZhKHQuYyxlLmMpLG89ZmEodC5sLGUubCkscz1mYSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX1JcmUoZmEpO3ZhciByUixGdyxOSD1QcmUodFIpLEV2PShQcmUoZmEpLDApLGt3PTAsT3c9MCxvUj0wLEVtPTAsc1I9MCxOdz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxrcmU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24gVHYoKXtyZXR1cm4gRW18fChrcmUoRkxlKSxFbT1Ody5ub3coKStzUil9ZnVuY3Rpb24gRkxlKCl7RW09MH1mdW5jdGlvbiBMdygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gYVIobix0LGUpe3ZhciBpPW5ldyBMdztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIFJyZSgpe0VtPShvUj1Ody5ub3coKSkrc1IsRXY9a3c9MDt0cnl7IWZ1bmN0aW9uKCl7VHYoKSwrK0V2O2Zvcih2YXIgdCxuPXJSO247KSh0PUVtLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1Fdn0oKX1maW5hbGx5e0V2PTAsZnVuY3Rpb24oKXtmb3IodmFyIG4sZSx0PXJSLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpyUj1lKTtGdz1uLExIKGkpfSgpLEVtPTB9fWZ1bmN0aW9uIE5MZSgpe3ZhciBuPU53Lm5vdygpLHQ9bi1vUjt0PjFlMyYmKHNSLT10LG9SPW4pfWZ1bmN0aW9uIExIKG4pe0V2fHwoa3cmJihrdz1jbGVhclRpbWVvdXQoa3cpKSxuLUVtPjI0PyhuPDEvMCYmKGt3PXNldFRpbWVvdXQoUnJlLG4tTncubm93KCktc1IpKSxPdyYmKE93PWNsZWFySW50ZXJ2YWwoT3cpKSk6KE93fHwob1I9Tncubm93KCksT3c9c2V0SW50ZXJ2YWwoTkxlLDFlMykpLEV2PTEsa3JlKFJyZSkpKX1mdW5jdGlvbiBsUihuLHQsZSl7dmFyIGk9bmV3IEx3O3JldHVybiBpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0PW51bGw9PXQ/MDordCxlKSxpfUx3LnByb3RvdHlwZT1hUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkx3LHJlc3RhcnQ6ZnVuY3Rpb24obix0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT9UdigpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmRnchPT10aGlzJiYoRnc/RncuX25leHQ9dGhpczpyUj10aGlzLEZ3PXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsTEgoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsTEgoKSl9fTt2YXIgQkxlPWZIKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLFZMZT1bXTtmdW5jdGlvbiB1aChuLHQsZSxpLHIsbyl7dmFyIHM9bi5fX3RyYW5zaXRpb247aWYocyl7aWYoZSBpbiBzKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbihuLHQsZSl7dmFyIHIsaT1uLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBzKGMpe3ZhciB1LGQscCxoO2lmKDEhPT1lLnN0YXRlKXJldHVybiBsKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09ZS5uYW1lKXtpZigzPT09aC5zdGF0ZSlyZXR1cm4gbFIocyk7ND09PWguc3RhdGU/KGguc3RhdGU9NixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PHQmJihoLnN0YXRlPTYsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihsUihmdW5jdGlvbigpezM9PT1lLnN0YXRlJiYoZS5zdGF0ZT00LGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxhKGMpKX0pLGUuc3RhdGU9MixlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSwyPT09ZS5zdGF0ZSl7Zm9yKGUuc3RhdGU9MyxyPW5ldyBBcnJheShwPWUudHdlZW4ubGVuZ3RoKSx1PTAsZD0tMTt1PHA7Kyt1KShoPWUudHdlZW5bdV0udmFsdWUuY2FsbChuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrZF09aCk7ci5sZW5ndGg9ZCsxfX1mdW5jdGlvbiBhKGMpe2Zvcih2YXIgdT1jPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxjL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobCksZS5zdGF0ZT01LDEpLGQ9LTEscD1yLmxlbmd0aDsrK2Q8cDspcltkXS5jYWxsKG4sdSk7NT09PWUuc3RhdGUmJihlLm9uLmNhbGwoImVuZCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBjIGluIGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVt0XSxpKXJldHVybjtkZWxldGUgbi5fX3RyYW5zaXRpb259aVt0XT1lLGUudGltZXI9YVIoZnVuY3Rpb24oYyl7ZS5zdGF0ZT0xLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOkJMZSx0d2VlbjpWTGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIFZ3KG4sdCl7dmFyIGU9RG8obix0KTtpZihlLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBIcyhuLHQpe3ZhciBlPURvKG4sdCk7aWYoZS5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIERvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gVUxlKG4sdCl7dmFyIGUsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLG4pLG89ci50d2VlbjtpZihvIT09ZSlmb3IodmFyIHM9MCxhPShpPWU9bykubGVuZ3RoO3M8YTsrK3MpaWYoaVtzXS5uYW1lPT09dCl7KGk9aS5zbGljZSgpKS5zcGxpY2UocywxKTticmVha31yLnR3ZWVuPWl9fWZ1bmN0aW9uIHpMZShuLHQsZSl7dmFyIGkscjtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SHModGhpcyxuKSxzPW8udHdlZW47aWYocyE9PWkpe3I9KGk9cykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfW8udHdlZW49cn19ZnVuY3Rpb24gRHYobix0LGUpe3ZhciBpPW4uX2lkO3JldHVybiBuLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1Icyh0aGlzLGkpOyhyLnZhbHVlfHwoci52YWx1ZT17fSkpW3RdPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24ocil7cmV0dXJuIERvKHIsaSkudmFsdWVbdF19fWZ1bmN0aW9uIHBSKG4sdCl7dmFyIGU7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgdD9uczp0IGluc3RhbmNlb2YgVGM/TW06KGU9VGModCkpPyh0PWUsTW0pOlB3KShuLHQpfWZ1bmN0aW9uIGpMZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKX19ZnVuY3Rpb24gR0xlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gV0xlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZShuKTtyZXR1cm4gcz09PXI/bnVsbDpzPT09aT9vOm89dChpPXMsZSl9fWZ1bmN0aW9uIHFMZShuLHQsZSl7dmFyIGksbyxyPWUrIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gWUxlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToocz10aGlzLmdldEF0dHJpYnV0ZShuKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFhMZShuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzLGwsYT1lKHRoaXMpO3JldHVybiBudWxsPT1hP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOihzPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKSk9PT0obD1hKyIiKT9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fWZ1bmN0aW9uIFFMZShuLHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gS0xlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gWkxlKG4sdCl7dmFyIGUsaTtmdW5jdGlvbiByKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1pJiYoZT0oaT1vKSYmS0xlKG4sbykpLGV9cmV0dXJuIHIuX3ZhbHVlPXQscn1mdW5jdGlvbiBKTGUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiZRTGUobixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uICRMZShuLHQpe3JldHVybiBmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBlM2Uobix0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe1Z3KHRoaXMsbikuZGVsYXk9dH19ZnVuY3Rpb24gdDNlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG4zZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7SHModGhpcyxuKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBpM2Uobix0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7SHModGhpcyxuKS5lYXNlPXR9fWZ1bmN0aW9uIG8zZShuLHQsZSl7dmFyIGkscixvPWZ1bmN0aW9uKG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fCJzdGFydCI9PT10fSl9KHQpP1Z3OkhzO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPW8odGhpcyxuKSxhPXMub247YSE9PWkmJihyPShpPWEpLmNvcHkoKSkub24odCxlKSxzLm9uPXJ9fXZhciBhM2U9SWQucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEpyZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBwM2Uobix0LGUpe3JldHVybiBmdW5jdGlvbihpKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4sdC5jYWxsKHRoaXMsaSksZSl9fWZ1bmN0aW9uIGgzZShuLHQsZSl7dmFyIGkscjtmdW5jdGlvbiBvKCl7dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMhPT1yJiYoaT0ocj1zKSYmcDNlKG4scyxlKSksaX1yZXR1cm4gby5fdmFsdWU9dCxvfWZ1bmN0aW9uIGczZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1uLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gXzNlKG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJmczZShyKSksdH1yZXR1cm4gaS5fdmFsdWU9bixpfXZhciB2M2U9MDtmdW5jdGlvbiBfcyhuLHQsZSxpKXt0aGlzLl9ncm91cHM9bix0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1lLHRoaXMuX2lkPWl9ZnVuY3Rpb24gaFIoKXtyZXR1cm4rK3YzZX12YXIgQXY9SWQucHJvdG90eXBlO19zLnByb3RvdHlwZT1mdW5jdGlvbihuKXtyZXR1cm4gSWQoKS50cmFuc2l0aW9uKG4pfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9zLHNlbGVjdDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPWJtKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1uZXcgQXJyYXkocikscz0wO3M8cjsrK3MpZm9yKHZhciB1LGQsYT1pW3NdLGw9YS5sZW5ndGgsYz1vW3NdPW5ldyBBcnJheShsKSxwPTA7cDxsOysrcCkodT1hW3BdKSYmKGQ9bi5jYWxsKHUsdS5fX2RhdGFfXyxwLGEpKSYmKCJfX2RhdGFfXyJpbiB1JiYoZC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW3BdPWQsdWgoY1twXSx0LGUscCxjLERvKHUsZSkpKTtyZXR1cm4gbmV3IF9zKG8sdGhpcy5fcGFyZW50cyx0LGUpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1FdyhuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89W10scz1bXSxhPTA7YTxyOysrYSlmb3IodmFyIHUsbD1pW2FdLGM9bC5sZW5ndGgsZD0wO2Q8YzsrK2QpaWYodT1sW2RdKXtmb3IodmFyIGgscD1uLmNhbGwodSx1Ll9fZGF0YV9fLGQsbCksZj1Ebyh1LGUpLG09MCxDPXAubGVuZ3RoO208QzsrK20pKGg9cFttXSkmJnVoKGgsdCxlLG0scCxmKTtvLnB1c2gocCkscy5wdXNoKHUpfXJldHVybiBuZXcgX3MobyxzLHQsZSl9LGZpbHRlcjpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49VHcobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsbz10W3JdLHM9by5sZW5ndGgsYT1pW3JdPVtdLGM9MDtjPHM7KytjKShsPW9bY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJmEucHVzaChsKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24obil7aWYobi5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPW4uX2dyb3VwcyxpPXQubGVuZ3RoLG89TWF0aC5taW4oaSxlLmxlbmd0aCkscz1uZXcgQXJyYXkoaSksYT0wO2E8bzsrK2EpZm9yKHZhciBwLGw9dFthXSxjPWVbYV0sdT1sLmxlbmd0aCxkPXNbYV09bmV3IEFycmF5KHUpLGg9MDtoPHU7KytoKShwPWxbaF18fGNbaF0pJiYoZFtoXT1wKTtmb3IoO2E8aTsrK2Epc1thXT10W2FdO3JldHVybiBuZXcgX3Mocyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEzZSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24oKXtmb3IodmFyIG49dGhpcy5fbmFtZSx0PXRoaXMuX2lkLGU9aFIoKSxpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYylpZihsPXNbY10pe3ZhciB1PURvKGwsdCk7dWgobCxuLGUsYyxzLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyBfcyhpLHRoaXMuX3BhcmVudHMsbixlKX0sY2FsbDpBdi5jYWxsLG5vZGVzOkF2Lm5vZGVzLG5vZGU6QXYubm9kZSxzaXplOkF2LnNpemUsZW1wdHk6QXYuZW1wdHksZWFjaDpBdi5lYWNoLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9Ebyh0aGlzLm5vZGUoKSxlKS5vbi5vbihuKTp0aGlzLmVhY2gobzNlKGUsbix0KSl9LGF0dHI6ZnVuY3Rpb24obix0KXt2YXIgZT1BZChuKSxpPSJ0cmFuc2Zvcm0iPT09ZT9rSDpwUjtyZXR1cm4gdGhpcy5hdHRyVHdlZW4obiwiZnVuY3Rpb24iPT10eXBlb2YgdD8oZS5sb2NhbD9YTGU6WUxlKShlLGksRHYodGhpcywiYXR0ci4iK24sdCkpOm51bGw9PXQ/KGUubG9jYWw/R0xlOmpMZSkoZSk6KGUubG9jYWw/cUxlOldMZSkoZSxpLHQpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9ImF0dHIuIituO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjt2YXIgaT1BZChuKTtyZXR1cm4gdGhpcy50d2VlbihlLChpLmxvY2FsP1pMZTpKTGUpKGksdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InRyYW5zZm9ybSI9PShuKz0iIik/T0g6cFI7cmV0dXJuIG51bGw9PXQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89bGgodGhpcyxuKSxzPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGxoKHRoaXMsbikpO3JldHVybiBvPT09cz9udWxsOm89PT1lJiZzPT09aT9yOnI9dChlPW8saT1zKX19KG4saSkpLm9uKCJlbmQuc3R5bGUuIituLEpyZShuKSk6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pLGE9ZSh0aGlzKSxsPWErIiI7cmV0dXJuIG51bGw9PWEmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLGw9YT1saCh0aGlzLG4pKSxzPT09bD9udWxsOnM9PT1pJiZsPT09cj9vOihyPWwsbz10KGk9cyxhKSl9fShuLGksRHYodGhpcywic3R5bGUuIituLHQpKSkuZWFjaChmdW5jdGlvbihuLHQpe3ZhciBlLGkscixhLG89InN0eWxlLiIrdCxzPSJlbmQuIitvO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUhzKHRoaXMsbiksYz1sLm9uLHU9bnVsbD09bC52YWx1ZVtvXT9hfHwoYT1KcmUodCkpOnZvaWQgMDsoYyE9PWV8fHIhPT11KSYmKGk9KGU9YykuY29weSgpKS5vbihzLHI9dSksbC5vbj1pfX0odGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLGZ1bmN0aW9uKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz1saCh0aGlzLG4pO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbihuLHQsZSl7dmFyIGk9InN0eWxlLiIrKG4rPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGk9dGhpcy50d2VlbihpKSkmJmkuX3ZhbHVlO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMudHdlZW4oaSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oaSxoM2Uobix0LGU/PyIiKSl9LHRleHQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10Pz8iIn19KER2KHRoaXMsInRleHQiLG4pKTpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fShudWxsPT1uPyIiOm4rIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uKG4pe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKG51bGw9PW4pcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxfM2UobikpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbigiZW5kLnJlbW92ZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbihuLHQpe3ZhciBlPXRoaXMuX2lkO2lmKG4rPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBzLGk9RG8odGhpcy5ub2RlKCksZSkudHdlZW4scj0wLG89aS5sZW5ndGg7cjxvOysrcilpZigocz1pW3JdKS5uYW1lPT09bilyZXR1cm4gcy52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT10P1VMZTp6TGUpKGUsbix0KSl9LGRlbGF5OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/JExlOmUzZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZGVsYXl9LGR1cmF0aW9uOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIG4/dDNlOm4zZSkodCxuKSk6RG8odGhpcy5ub2RlKCksdCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGkzZSh0LG4pKTpEbyh0aGlzLm5vZGUoKSx0KS5lYXNlfSxlbmQ6ZnVuY3Rpb24oKXt2YXIgbix0LGU9dGhpcyxpPWUuX2lkLHI9ZS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scyl7dmFyIGE9e3ZhbHVlOnN9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1yJiZvKCl9fTtlLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1Icyh0aGlzLGkpLHU9Yy5vbjt1IT09biYmKCh0PShuPXUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChhKSx0Ll8uaW50ZXJydXB0LnB1c2goYSksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfX07dmFyIEhIPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbihuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn19O2Z1bmN0aW9uIHkzZShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBISC50aW1lPVR2KCksSEg7cmV0dXJuIGV9ZnVuY3Rpb24gVUgobil7cmV0dXJue3R5cGU6bn19SWQucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG4sdCl7dmFyIGkscixzLGU9bi5fX3RyYW5zaXRpb24sbz0hMDtpZihlKXtmb3IocyBpbiB0PW51bGw9PXQ/bnVsbDp0KyIiLGUpKGk9ZVtzXSkubmFtZT09PXQ/KHI9aS5zdGF0ZT4yJiZpLnN0YXRlPDUsaS5zdGF0ZT02LGkudGltZXIuc3RvcCgpLGkub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLG4sbi5fX2RhdGFfXyxpLmluZGV4LGkuZ3JvdXApLGRlbGV0ZSBlW3NdKTpvPSExO28mJmRlbGV0ZSBuLl9fdHJhbnNpdGlvbn19KHRoaXMsbil9KX0sSWQucHJvdG90eXBlLnRyYW5zaXRpb249ZnVuY3Rpb24obil7dmFyIHQsZTtuIGluc3RhbmNlb2YgX3M/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1oUigpLChlPUhIKS50aW1lPVR2KCksbj1udWxsPT1uP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLG89MDtvPHI7KytvKWZvcih2YXIgbCxzPWlbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmdWgobCxuLHQsYyxzLGV8fHkzZShsLHQpKTtyZXR1cm4gbmV3IF9zKGksdGhpcy5fcGFyZW50cyxuLHQpfSxbInciLCJlIl0ubWFwKFVIKSxbIm4iLCJzIl0ubWFwKFVIKSxbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChVSCksTWF0aDt2YXIgWGE9IiQiO2Z1bmN0aW9uIG1SKCl7fWZ1bmN0aW9uIGxvZShuLHQpe3ZhciBlPW5ldyBtUjtpZihuIGluc3RhbmNlb2YgbVIpbi5lYWNoKGZ1bmN0aW9uKGEsbCl7ZS5zZXQobCxhKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShuKSl7dmFyIG8saT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5zZXQoaSxuW2ldKTtlbHNlIGZvcig7KytpPHI7KWUuc2V0KHQobz1uW2ldLGksbiksbyl9ZWxzZSBpZihuKWZvcih2YXIgcyBpbiBuKWUuc2V0KHMsbltzXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZ1IoKXt9bVIucHJvdG90eXBlPWxvZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1SLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gWGErbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbWGErbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW1hhK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PVhhK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PVhhJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1YYSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1YYSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09WGEmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07dmFyIERtPWxvZS5wcm90b3R5cGU7ZnVuY3Rpb24gQW0obix0KXtpZigoZT0obj10P24udG9FeHBvbmVudGlhbCh0LTEpOm4udG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGUsaT1uLnNsaWNlKDAsZSk7cmV0dXJuW2kubGVuZ3RoPjE/aVswXStpLnNsaWNlKDIpOmksK24uc2xpY2UoZSsxKV19ZnVuY3Rpb24gVnUobil7cmV0dXJuKG49QW0oTWF0aC5hYnMobikpKT9uWzFdOk5hTn1nUi5wcm90b3R5cGU9ZnVuY3Rpb24obix0KXt2YXIgZT1uZXcgZ1I7aWYobiBpbnN0YW5jZW9mIGdSKW4uZWFjaChmdW5jdGlvbihvKXtlLmFkZChvKX0pO2Vsc2UgaWYobil7dmFyIGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuYWRkKG5baV0pO2Vsc2UgZm9yKDsrK2k8cjspZS5hZGQodChuW2ldLGksbikpfXJldHVybiBlfS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdSLGhhczpEbS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW1hhKyhuKz0iIildPW4sdGhpc30scmVtb3ZlOkRtLnJlbW92ZSxjbGVhcjpEbS5jbGVhcix2YWx1ZXM6RG0ua2V5cyxzaXplOkRtLnNpemUsZW1wdHk6RG0uZW1wdHksZWFjaDpEbS5lYWNofSxNYXRoLE1hdGguc3FydCg1KTt2YXIgekgsRDNlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIGRoKG4pe2lmKCEodD1EM2UuZXhlYyhuKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIituKTt2YXIgdDtyZXR1cm4gbmV3IF9SKHtmaWxsOnRbMV0sYWxpZ246dFsyXSxzaWduOnRbM10sc3ltYm9sOnRbNF0semVybzp0WzVdLHdpZHRoOnRbNl0sY29tbWE6dFs3XSxwcmVjaXNpb246dFs4XSYmdFs4XS5zbGljZSgxKSx0cmltOnRbOV0sdHlwZTp0WzEwXX0pfWZ1bmN0aW9uIF9SKG4pe3RoaXMuZmlsbD12b2lkIDA9PT1uLmZpbGw/IiAiOm4uZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PW4uYWxpZ24/Ij4iOm4uYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PW4uc2lnbj8iLSI6bi5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PW4uc3ltYm9sPyIiOm4uc3ltYm9sKyIiLHRoaXMuemVybz0hIW4uemVybyx0aGlzLndpZHRoPXZvaWQgMD09PW4ud2lkdGg/dm9pZCAwOituLndpZHRoLHRoaXMuY29tbWE9ISFuLmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PW4ucHJlY2lzaW9uP3ZvaWQgMDorbi5wcmVjaXNpb24sdGhpcy50cmltPSEhbi50cmltLHRoaXMudHlwZT12b2lkIDA9PT1uLnR5cGU/IiI6bi50eXBlKyIifWZ1bmN0aW9uIGpIKG4sdCl7dmFyIGU9QW0obix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXTtyZXR1cm4gcjwwPyIwLiIrbmV3IEFycmF5KC1yKS5qb2luKCIwIikraTppLmxlbmd0aD5yKzE/aS5zbGljZSgwLHIrMSkrIi4iK2kuc2xpY2UocisxKTppK25ldyBBcnJheShyLWkubGVuZ3RoKzIpLmpvaW4oIjAiKX1kaC5wcm90b3R5cGU9X1IucHJvdG90eXBlLF9SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O3ZhciBHSD17IiUiOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKDEwMCpuKS50b0ZpeGVkKHQpfSxiOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKG4pe3JldHVybiBuKyIifSxkOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gakgoMTAwKm4sdCl9LHI6akgsczpmdW5jdGlvbihuLHQpe3ZhciBlPUFtKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV0sbz1yLSh6SD0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyLzMpKSkpKzEscz1pLmxlbmd0aDtyZXR1cm4gbz09PXM/aTpvPnM/aStuZXcgQXJyYXkoby1zKzEpLmpvaW4oIjAiKTpvPjA/aS5zbGljZSgwLG8pKyIuIitpLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK0FtKG4sTWF0aC5tYXgoMCx0K28tMSkpWzBdfSxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIFdIKG4pe3JldHVybiBufXZhciB2Uixybyx5Uixnb2U9QXJyYXkucHJvdG90eXBlLm1hcCxfb2U9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gT2woKXtyZXR1cm4gTWF0aC5yYW5kb20oKX12Uj1mdW5jdGlvbihuKXt2YXIgdD12b2lkIDA9PT1uLmdyb3VwaW5nfHx2b2lkIDA9PT1uLnRob3VzYW5kcz9XSDpmdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxvPVtdLHM9MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxvLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW3M9KHMrMSklbi5sZW5ndGhdO3JldHVybiBvLnJldmVyc2UoKS5qb2luKHQpfX0oZ29lLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVswXSsiIixpPXZvaWQgMD09PW4uY3VycmVuY3k/IiI6bi5jdXJyZW5jeVsxXSsiIixyPXZvaWQgMD09PW4uZGVjaW1hbD8iLiI6bi5kZWNpbWFsKyIiLG89dm9pZCAwPT09bi5udW1lcmFscz9XSDpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19KGdvZS5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSkscz12b2lkIDA9PT1uLnBlcmNlbnQ/IiUiOm4ucGVyY2VudCsiIixhPXZvaWQgMD09PW4ubWludXM/Ii0iOm4ubWludXMrIiIsbD12b2lkIDA9PT1uLm5hbj8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGQpe3ZhciBwPShkPWRoKGQpKS5maWxsLGg9ZC5hbGlnbixmPWQuc2lnbixtPWQuc3ltYm9sLEM9ZC56ZXJvLF89ZC53aWR0aCx5PWQuY29tbWEsST1kLnByZWNpc2lvbixBPWQudHJpbSxPPWQudHlwZTsibiI9PT1PPyh5PSEwLE89ImciKTpHSFtPXXx8KHZvaWQgMD09PUkmJihJPTEyKSxBPSEwLE89ImciKSwoQ3x8IjAiPT09cCYmIj0iPT09aCkmJihDPSEwLHA9IjAiLGg9Ij0iKTt2YXIgZWU9IiQiPT09bT9lOiIjIj09PW0mJi9bYm94WF0vLnRlc3QoTyk/IjAiK08udG9Mb3dlckNhc2UoKToiIixYPSIkIj09PW0/aTovWyVwXS8udGVzdChPKT9zOiIiLHhlPUdIW09dLGZlPS9bZGVmZ3BycyVdLy50ZXN0KE8pO2Z1bmN0aW9uIHZlKFQpe3ZhciBoZSx5ZSxKLG5lPWVlLGxlPVg7aWYoImMiPT09TylsZT14ZShUKStsZSxUPSIiO2Vsc2V7dmFyIGFlPShUPStUKTwwfHwxL1Q8MDtpZihUPWlzTmFOKFQpP2w6eGUoTWF0aC5hYnMoVCksSSksQSYmKFQ9ZnVuY3Rpb24obil7ZTpmb3IodmFyIHIsdD1uLmxlbmd0aCxlPTEsaT0tMTtlPHQ7KytlKXN3aXRjaChuW2VdKXtjYXNlIi4iOmk9cj1lO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPWUpLHI9ZTticmVhaztkZWZhdWx0OmlmKCErbltlXSlicmVhayBlO2k+MCYmKGk9MCl9cmV0dXJuIGk+MD9uLnNsaWNlKDAsaSkrbi5zbGljZShyKzEpOm59KFQpKSxhZSYmMD09K1QmJiIrIiE9PWYmJihhZT0hMSksbmU9KGFlPyIoIj09PWY/ZjphOiItIj09PWZ8fCIoIj09PWY/IiI6ZikrbmUsbGU9KCJzIj09PU8/X29lWzgrekgvM106IiIpK2xlKyhhZSYmIigiPT09Zj8iKSI6IiIpLGZlKWZvcihoZT0tMSx5ZT1ULmxlbmd0aDsrK2hlPHllOylpZig0OD4oSj1ULmNoYXJDb2RlQXQoaGUpKXx8Sj41Nyl7bGU9KDQ2PT09Sj9yK1Quc2xpY2UoaGUrMSk6VC5zbGljZShoZSkpK2xlLFQ9VC5zbGljZSgwLGhlKTticmVha319eSYmIUMmJihUPXQoVCwxLzApKTt2YXIgbWU9bmUubGVuZ3RoK1QubGVuZ3RoK2xlLmxlbmd0aCxqZT1tZTxfP25ldyBBcnJheShfLW1lKzEpLmpvaW4ocCk6IiI7c3dpdGNoKHkmJkMmJihUPXQoamUrVCxqZS5sZW5ndGg/Xy1sZS5sZW5ndGg6MS8wKSxqZT0iIiksaCl7Y2FzZSI8IjpUPW5lK1QrbGUramU7YnJlYWs7Y2FzZSI9IjpUPW5lK2plK1QrbGU7YnJlYWs7Y2FzZSJeIjpUPWplLnNsaWNlKDAsbWU9amUubGVuZ3RoPj4xKStuZStUK2xlK2plLnNsaWNlKG1lKTticmVhaztkZWZhdWx0OlQ9amUrbmUrVCtsZX1yZXR1cm4gbyhUKX1yZXR1cm4gST12b2lkIDA9PT1JPzY6L1tncHJzXS8udGVzdChPKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLEkpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLEkpKSx2ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBkKyIifSx2ZX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKGQscCl7dmFyIGg9YygoKGQ9ZGgoZCkpLnR5cGU9ImYiLGQpKSxmPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFZ1KHApLzMpKSksbT1NYXRoLnBvdygxMCwtZiksQz1fb2VbOCtmLzNdO3JldHVybiBmdW5jdGlvbihfKXtyZXR1cm4gaChtKl8pK0N9fX19KHtkZWNpbWFsOiIuIix0aG91c2FuZHM6IiwiLGdyb3VwaW5nOlszXSxjdXJyZW5jeTpbIiQiLCIiXSxtaW51czoiLSJ9KSxybz12Ui5mb3JtYXQseVI9dlIuZm9ybWF0UHJlZml4LGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3JldHVybiBpPW51bGw9PWk/MDoraSxyPW51bGw9PXI/MTorciwxPT09YXJndW1lbnRzLmxlbmd0aD8ocj1pLGk9MCk6ci09aSxmdW5jdGlvbigpe3JldHVybiB0KCkqcitpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCk7dmFyIEtIPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpLHIpe3ZhciBvLHM7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9bylhPW8sbz1udWxsO2Vsc2UgZG97bz0yKnQoKS0xLGE9Mip0KCktMSxzPW8qbythKmF9d2hpbGUoIXN8fHM+MSk7cmV0dXJuIGkrciphKk1hdGguc3FydCgtMipNYXRoLmxvZyhzKS9zKX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpLFpIPShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoKXt2YXIgaT1LSC5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChpKCkpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj0wLG89MDtvPGk7KytvKXIrPXQoKTtyZXR1cm4gcn19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpKTtmdW5jdGlvbiBtYShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKX1yZXR1cm4gdGhpc30oZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3ZhciByPVpILnNvdXJjZSh0KShpKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcigpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KShPbCksZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0oT2wpO3ZhciB5b2U9QXJyYXkucHJvdG90eXBlLHp3PXlvZS5tYXAsSW09eW9lLnNsaWNlO2Z1bmN0aW9uIEpIKG4pe3JldHVybitufXZhciB4b2U9WzAsMV07ZnVuY3Rpb24gZ2Eobil7cmV0dXJuIG59ZnVuY3Rpb24gJEgobix0KXtyZXR1cm4odC09bj0rbik/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH06ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIENvZShuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIGszZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPSRIKHIsaSksbz1lKHMsbykpOihpPSRIKGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBGM2Uobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPSRIKG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1GdShuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBwaChuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiBqdygpe3ZhciBpLHIsbyxhLGwsYyxuPXhvZSx0PXhvZSxlPVNtLHM9Z2E7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP0YzZTprM2UsbD1jPW51bGwsZH1mdW5jdGlvbiBkKHApe3JldHVybiBpc05hTihwPStwKT9vOihsfHwobD1hKG4ubWFwKGkpLHQsZSkpKShpKHMocCkpKX1yZXR1cm4gZC5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHMocigoY3x8KGM9YSh0LG4ubWFwKGkpLG5zKSkpKHApKSl9LGQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXp3LmNhbGwocCxKSCkscz09PWdhfHwocz1Db2UobikpLHUoKSk6bi5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUltLmNhbGwocCksdSgpKTp0LnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD1JbS5jYWxsKHApLGU9SUgsdSgpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/Q29lKG4pOmdhLGQpOnMhPT1nYX0sZC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLHUoKSk6ZX0sZC51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsZCk6b30sZnVuY3Rpb24ocCxoKXtyZXR1cm4gaT1wLHI9aCx1KCl9fWZ1bmN0aW9uIEd3KG4sdCl7cmV0dXJuIGp3KCkobix0KX1mdW5jdGlvbiBQbShuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIE13KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj1EZChuLHQsZSk7c3dpdGNoKChpPWRoKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoVnUodCkvMykpKS1WdShNYXRoLmFicyhuKSkpfShyLHMpKSYmKGkucHJlY2lzaW9uPW8pLHlSKGkscyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsVnUodCktVnUobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC1WdShNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiBybyhpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEscz1pW3JdLGE9aVtvXTtyZXR1cm4gYTxzJiYobD1zLHM9YSxhPWwsbD1yLHI9byxvPWwpLChsPWJ2KHMsYSxlKSk+MD9sPWJ2KHM9TWF0aC5mbG9vcihzL2wpKmwsYT1NYXRoLmNlaWwoYS9sKSpsLGUpOmw8MCYmKGw9YnYocz1NYXRoLmNlaWwocypsKS9sLGE9TWF0aC5mbG9vcihhKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKHMvbCkqbCxpW29dPU1hdGguY2VpbChhL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwocypsKS9sLGlbb109TWF0aC5mbG9vcihhKmwpL2wsdChpKSksbn0sbn1mdW5jdGlvbiBEYygpe3ZhciBuPUd3KGdhLGdhKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKG4sRGMoKSl9LG1hLmFwcGx5KG4sYXJndW1lbnRzKSxQbShuKX1mdW5jdGlvbiBiUihuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIHdvZShuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gTW9lKG4pe3JldHVybiBNYXRoLmV4cChuKX1mdW5jdGlvbiBOM2Uobil7cmV0dXJuLU1hdGgubG9nKC1uKX1mdW5jdGlvbiBMM2Uobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiBCM2Uobil7cmV0dXJuIGlzRmluaXRlKG4pPysoIjFlIituKTpuPDA/MDpufWZ1bmN0aW9uIFNvZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiB0NChuKXt2YXIgcixvLHQ9bih3b2UsTW9lKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP0IzZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9U29lKHIpLG89U29lKG8pLG4oTjNlLEwzZSkpOm4od29lLE1vZSksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSthLHMoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUoYSkscygpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24oYSl7dmFyIGQsbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXTsoZD11PGMpJiYocD1jLGM9dSx1PXApO3ZhciBmLG0sQyxwPXIoYyksaD1yKHUpLF89bnVsbD09YT8xMDorYSx5PVtdO2lmKCEoaSUxKSYmaC1wPF8pe2lmKHA9TWF0aC5yb3VuZChwKS0xLGg9TWF0aC5yb3VuZChoKSsxLGM+MCl7Zm9yKDtwPGg7KytwKWZvcihtPTEsZj1vKHApO208aTsrK20paWYoISgoQz1mKm0pPGMpKXtpZihDPnUpYnJlYWs7eS5wdXNoKEMpfX1lbHNlIGZvcig7cDxoOysrcClmb3IobT1pLTEsZj1vKHApO20+PTE7LS1tKWlmKCEoKEM9ZiptKTxjKSl7aWYoQz51KWJyZWFrO3kucHVzaChDKX19ZWxzZSB5PU13KHAsaCxNYXRoLm1pbihoLXAsXykpLm1hcChvKTtyZXR1cm4gZD95LnJldmVyc2UoKTp5fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9cm8obCkpLGE9PT0xLzApcmV0dXJuIGw7bnVsbD09YSYmKGE9MTApO3ZhciBjPU1hdGgubWF4KDEsaSphL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgZD11L28oTWF0aC5yb3VuZChyKHUpKSk7cmV0dXJuIGQqaTxpLS41JiYoZCo9aSksZDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUoYlIoZSgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIoYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmNlaWwocihhKSkpfX0pKX0sdH1mdW5jdGlvbiBXdygpe3ZhciBuPXQ0KGp3KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcGgobixXdygpKS5iYXNlKG4uYmFzZSgpKX0sbWEuYXBwbHkobixhcmd1bWVudHMpLG59dmFyIG40PW5ldyBEYXRlLGk0PW5ldyBEYXRlO2Z1bmN0aW9uIHVyKG4sdCxlLGkpe2Z1bmN0aW9uIHIobyl7cmV0dXJuIG4obz0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZSgrbykpLG99LHIuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxuKG8pLG99LHIucm91bmQ9ZnVuY3Rpb24obyl7dmFyIHM9cihvKSxhPXIuY2VpbChvKTtyZXR1cm4gby1zPGEtbz9zOmF9LHIub2Zmc2V0PWZ1bmN0aW9uKG8scyl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksbnVsbD09cz8xOk1hdGguZmxvb3IocykpLG99LHIucmFuZ2U9ZnVuY3Rpb24obyxzLGEpe3ZhciBjLGw9W107aWYobz1yLmNlaWwobyksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG88cyYmYT4wKSlyZXR1cm4gbDtkb3tsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxhKSxuKG8pfXdoaWxlKGM8byYmbzxzKTtyZXR1cm4gbH0sci5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHVyKGZ1bmN0aW9uKHMpe2lmKHM+PXMpZm9yKDtuKHMpLCFvKHMpOylzLnNldFRpbWUocy0xKX0sZnVuY3Rpb24ocyxhKXtpZihzPj1zKWlmKGE8MClmb3IoOysrYTw9MDspZm9yKDt0KHMsLTEpLCFvKHMpOyk7ZWxzZSBmb3IoOy0tYT49MDspZm9yKDt0KHMsMSksIW8ocyk7KTt9KX0sZSYmKHIuY291bnQ9ZnVuY3Rpb24obyxzKXtyZXR1cm4gbjQuc2V0VGltZSgrbyksaTQuc2V0VGltZSgrcyksbihuNCksbihpNCksTWF0aC5mbG9vcihlKG40LGk0KSl9LHIuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSxpc0Zpbml0ZShvKSYmbz4wP28+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKHMpe3JldHVybiBpKHMpJW89PTB9OmZ1bmN0aW9uKHMpe3JldHVybiByLmNvdW50KDAscyklbz09MH0pOnI6bnVsbH0pLHJ9dmFyIHhSPXVyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC1ufSk7eFIuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5mbG9vcihuKSxpc0Zpbml0ZShuKSYmbj4wP24+MT91cihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L24pKm4pfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKm4pfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL259KTp4UjpudWxsfTt2YXIgQ1I9eFIsUmQ9NmU0LE1SPTYwNDhlNSxUb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLFNSPVRvZSxBb2U9dXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKS0xZTMqbi5nZXRTZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlJkKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9SZH0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksbzQ9QW9lLElvZT11cihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSpSZCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLHM0PUlvZSxQb2U9dXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqUmQpLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLEl2PVBvZTtmdW5jdGlvbiBPbShuKXtyZXR1cm4gdXIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpSZCkvTVJ9KX12YXIga209T20oMCksUHY9T20oMSksaGg9KE9tKDIpLE9tKDMpLE9tKDQpKSxMb2U9KE9tKDUpLE9tKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0RGF0ZSgxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldE1vbnRoKCktbi5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pKSxhND1Mb2UsbDQ9dXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtsNC5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP3VyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciBPZD1sNCxCb2U9dXIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksRVI9Qm9lO2Z1bmN0aW9uIEZtKG4pe3JldHVybiB1cihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1uKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL01SfSl9dmFyIHF3PUZtKDApLFJ2PUZtKDEpLGZoPShGbSgyKSxGbSgzKSxGbSg0KSksYzQ9KEZtKDUpLEZtKDYpLHVyKGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSkpO2M0LmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBpc0Zpbml0ZShuPU1hdGguZmxvb3IobikpJiZuPjA/dXIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9uKSpuKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKm4pfSk6bnVsbH07dmFyIE5tPWM0O2Z1bmN0aW9uIHU0KG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKX1mdW5jdGlvbiBkNChuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKX1mdW5jdGlvbiBZdyhuLHQsZSl7cmV0dXJue3k6bixtOnQsZDplLEg6MCxNOjAsUzowLEw6MH19dmFyIE92LGt2LEdvZT17Ii0iOiIiLF86IiAiLDA6IjAifSxXbz0vXlxzKlxkKy8sc0JlPS9eJS8sYUJlPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBIaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBsQmUobil7cmV0dXJuIG4ucmVwbGFjZShhQmUsIlxcJCYiKX1mdW5jdGlvbiBYdyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAobEJlKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gUXcobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gY0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGhCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZkJlKG4sdCxlKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPTMqaVswXS0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGdCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ubT1pWzBdLTEsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWW9lKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIF9CZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYb2Uobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdkJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHlCZShuLHQsZSl7dmFyIGk9V28uZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiQmUobix0LGUpe3ZhciBpPVdvLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geEJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENCZShuLHQsZSl7dmFyIGk9c0JlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gd0JlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTUJlKG4sdCxlKXt2YXIgaT1Xby5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUW9lKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gU0JlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIEVCZShuLHQpe3JldHVybiBIaShuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gVEJlKG4sdCl7cmV0dXJuIEhpKDErSXYuY291bnQoT2QobiksbiksdCwzKX1mdW5jdGlvbiBlc2Uobix0KXtyZXR1cm4gSGkobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIERCZShuLHQpe3JldHVybiBlc2Uobix0KSsiMDAwIn1mdW5jdGlvbiBBQmUobix0KXtyZXR1cm4gSGkobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBJQmUobix0KXtyZXR1cm4gSGkobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBQQmUobix0KXtyZXR1cm4gSGkobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBSQmUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIE9CZShuLHQpe3JldHVybiBIaShrbS5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gdHNlKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P2hoKG4pOmhoLmNlaWwobil9ZnVuY3Rpb24ga0JlKG4sdCl7cmV0dXJuIG49dHNlKG4pLEhpKGhoLmNvdW50KE9kKG4pLG4pKyg0PT09T2QobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gRkJlKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIE5CZShuLHQpe3JldHVybiBIaShQdi5jb3VudChPZChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gTEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBCQmUobix0KXtyZXR1cm4gSGkoKG49dHNlKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFZCZShuLHQpe3JldHVybiBIaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSEJlKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gSGkoKG49ZT49NHx8MD09PWU/aGgobik6aGguY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBVQmUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStIaSh0LzYwfDAsIjAiLDIpK0hpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIEtvZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHpCZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiBqQmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIEdCZShuLHQpe3JldHVybiBIaSgxK0VSLmNvdW50KE5tKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbnNlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBXQmUobix0KXtyZXR1cm4gbnNlKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gcUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gWUJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gWEJlKG4sdCl7cmV0dXJuIEhpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gUUJlKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBLQmUobix0KXtyZXR1cm4gSGkocXcuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGlzZShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHwwPT09dD9maChuKTpmaC5jZWlsKG4pfWZ1bmN0aW9uIFpCZShuLHQpe3JldHVybiBuPWlzZShuKSxIaShmaC5jb3VudChObShuKSxuKSsoND09PU5tKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIEpCZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiAkQmUobix0KXtyZXR1cm4gSGkoUnYuY291bnQoTm0obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGVWZShuLHQpe3JldHVybiBIaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdFZlKG4sdCl7cmV0dXJuIEhpKChuPWlzZShuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBuVmUobix0KXtyZXR1cm4gSGkobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGlWZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEhpKChuPWU+PTR8fDA9PT1lP2ZoKG4pOmZoLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gclZlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBab2UoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gSm9lKG4pe3JldHVybitufWZ1bmN0aW9uICRvZShuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfU92PWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMscz1uLnNob3J0RGF5cyxhPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPVh3KHIpLHU9UXcociksZD1YdyhvKSxwPVF3KG8pLGg9WHcocyksZj1RdyhzKSxtPVh3KGEpLEM9UXcoYSksXz1YdyhsKSx5PVF3KGwpLEk9e2E6ZnVuY3Rpb24oQ2Upe3JldHVybiBzW0NlLmdldERheSgpXX0sQTpmdW5jdGlvbihDZSl7cmV0dXJuIG9bQ2UuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKENlKXtyZXR1cm4gbFtDZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihDZSl7cmV0dXJuIGFbQ2UuZ2V0TW9udGgoKV19LGM6bnVsbCxkOlFvZSxlOlFvZSxmOkRCZSxnOkJCZSxHOkhCZSxIOlNCZSxJOkVCZSxqOlRCZSxMOmVzZSxtOkFCZSxNOklCZSxwOmZ1bmN0aW9uKENlKXtyZXR1cm4gclsrKENlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24oQ2Upe3JldHVybiAxK35+KENlLmdldE1vbnRoKCkvMyl9LFE6Sm9lLHM6JG9lLFM6UEJlLHU6UkJlLFU6T0JlLFY6a0JlLHc6RkJlLFc6TkJlLHg6bnVsbCxYOm51bGwseTpMQmUsWTpWQmUsWjpVQmUsIiUiOlpvZX0sQT17YTpmdW5jdGlvbihDZSl7cmV0dXJuIHNbQ2UuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKENlKXtyZXR1cm4gb1tDZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24oQ2Upe3JldHVybiBsW0NlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKENlKXtyZXR1cm4gYVtDZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6S29lLGU6S29lLGY6V0JlLGc6dFZlLEc6aVZlLEg6ekJlLEk6akJlLGo6R0JlLEw6bnNlLG06cUJlLE06WUJlLHA6ZnVuY3Rpb24oQ2Upe3JldHVybiByWysoQ2UuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihDZSl7cmV0dXJuIDErfn4oQ2UuZ2V0VVRDTW9udGgoKS8zKX0sUTpKb2Usczokb2UsUzpYQmUsdTpRQmUsVTpLQmUsVjpaQmUsdzpKQmUsVzokQmUseDpudWxsLFg6bnVsbCx5OmVWZSxZOm5WZSxaOnJWZSwiJSI6Wm9lfSxPPXthOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9aC5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS53PWZbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbihDZSx2dCxfdCl7dmFyIGllPWQuZXhlYyh2dC5zbGljZShfdCkpO3JldHVybiBpZT8oQ2Uudz1wW2llWzBdLnRvTG93ZXJDYXNlKCldLF90K2llWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oQ2UsdnQsX3Qpe3ZhciBpZT1fLmV4ZWModnQuc2xpY2UoX3QpKTtyZXR1cm4gaWU/KENlLm09eVtpZVswXS50b0xvd2VyQ2FzZSgpXSxfdCtpZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9bS5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5tPUNbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLHQsdnQsX3QpfSxkOllvZSxlOllvZSxmOnhCZSxnOnFvZSxHOldvZSxIOlhvZSxJOlhvZSxqOl9CZSxMOmJCZSxtOmdCZSxNOnZCZSxwOmZ1bmN0aW9uKENlLHZ0LF90KXt2YXIgaWU9Yy5leGVjKHZ0LnNsaWNlKF90KSk7cmV0dXJuIGllPyhDZS5wPXVbaWVbMF0udG9Mb3dlckNhc2UoKV0sX3QraWVbMF0ubGVuZ3RoKTotMX0scTptQmUsUTp3QmUsczpNQmUsUzp5QmUsdTp1QmUsVTpkQmUsVjpwQmUsdzpjQmUsVzpoQmUseDpmdW5jdGlvbihDZSx2dCxfdCl7cmV0dXJuIHhlKENlLGUsdnQsX3QpfSxYOmZ1bmN0aW9uKENlLHZ0LF90KXtyZXR1cm4geGUoQ2UsaSx2dCxfdCl9LHk6cW9lLFk6V29lLFo6ZkJlLCIlIjpDQmV9O2Z1bmN0aW9uIGVlKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBodCxzbixTbixpZT1bXSxjdD0tMSxZZT0wLHh0PUNlLmxlbmd0aDtmb3IoX3QgaW5zdGFuY2VvZiBEYXRlfHwoX3Q9bmV3IERhdGUoK190KSk7KytjdDx4dDspMzc9PT1DZS5jaGFyQ29kZUF0KGN0KSYmKGllLnB1c2goQ2Uuc2xpY2UoWWUsY3QpKSxudWxsIT0oc249R29lW2h0PUNlLmNoYXJBdCgrK2N0KV0pP2h0PUNlLmNoYXJBdCgrK2N0KTpzbj0iZSI9PT1odD8iICI6IjAiLChTbj12dFtodF0pJiYoaHQ9U24oX3Qsc24pKSxpZS5wdXNoKGh0KSxZZT1jdCsxKTtyZXR1cm4gaWUucHVzaChDZS5zbGljZShZZSxjdCkpLGllLmpvaW4oIiIpfX1mdW5jdGlvbiBYKENlLHZ0KXtyZXR1cm4gZnVuY3Rpb24oX3Qpe3ZhciBZZSx4dCxpZT1ZdygxOTAwLHZvaWQgMCwxKTtpZih4ZShpZSxDZSxfdCs9IiIsMCkhPV90Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBpZSlyZXR1cm4gbmV3IERhdGUoaWUuUSk7aWYoInMiaW4gaWUpcmV0dXJuIG5ldyBEYXRlKDFlMyppZS5zKygiTCJpbiBpZT9pZS5MOjApKTtpZih2dCYmISgiWiJpbiBpZSkmJihpZS5aPTApLCJwImluIGllJiYoaWUuSD1pZS5IJTEyKzEyKmllLnApLHZvaWQgMD09PWllLm0mJihpZS5tPSJxImluIGllP2llLnE6MCksIlYiaW4gaWUpe2lmKGllLlY8MXx8aWUuVj41MylyZXR1cm4gbnVsbDsidyJpbiBpZXx8KGllLnc9MSksIloiaW4gaWU/KHh0PShZZT1kNChZdyhpZS55LDAsMSkpKS5nZXRVVENEYXkoKSxZZT14dD40fHwwPT09eHQ/UnYuY2VpbChZZSk6UnYoWWUpLFllPUVSLm9mZnNldChZZSw3KihpZS5WLTEpKSxpZS55PVllLmdldFVUQ0Z1bGxZZWFyKCksaWUubT1ZZS5nZXRVVENNb250aCgpLGllLmQ9WWUuZ2V0VVRDRGF0ZSgpKyhpZS53KzYpJTcpOih4dD0oWWU9dTQoWXcoaWUueSwwLDEpKSkuZ2V0RGF5KCksWWU9eHQ+NHx8MD09PXh0P1B2LmNlaWwoWWUpOlB2KFllKSxZZT1Jdi5vZmZzZXQoWWUsNyooaWUuVi0xKSksaWUueT1ZZS5nZXRGdWxsWWVhcigpLGllLm09WWUuZ2V0TW9udGgoKSxpZS5kPVllLmdldERhdGUoKSsoaWUudys2KSU3KX1lbHNlKCJXImluIGllfHwiVSJpbiBpZSkmJigidyJpbiBpZXx8KGllLnc9InUiaW4gaWU/aWUudSU3OiJXImluIGllPzE6MCkseHQ9IloiaW4gaWU/ZDQoWXcoaWUueSwwLDEpKS5nZXRVVENEYXkoKTp1NChZdyhpZS55LDAsMSkpLmdldERheSgpLGllLm09MCxpZS5kPSJXImluIGllPyhpZS53KzYpJTcrNyppZS5XLSh4dCs1KSU3OmllLncrNyppZS5VLSh4dCs2KSU3KTtyZXR1cm4iWiJpbiBpZT8oaWUuSCs9aWUuWi8xMDB8MCxpZS5NKz1pZS5aJTEwMCxkNChpZSkpOnU0KGllKX19ZnVuY3Rpb24geGUoQ2UsdnQsX3QsaWUpe2Zvcih2YXIgaHQsc24sY3Q9MCxZZT12dC5sZW5ndGgseHQ9X3QubGVuZ3RoO2N0PFllOyl7aWYoaWU+PXh0KXJldHVybi0xO2lmKDM3PT09KGh0PXZ0LmNoYXJDb2RlQXQoY3QrKykpKXtpZihodD12dC5jaGFyQXQoY3QrKyksIShzbj1PW2h0IGluIEdvZT92dC5jaGFyQXQoY3QrKyk6aHRdKXx8KGllPXNuKENlLF90LGllKSk8MClyZXR1cm4tMX1lbHNlIGlmKGh0IT1fdC5jaGFyQ29kZUF0KGllKyspKXJldHVybi0xfXJldHVybiBpZX1yZXR1cm4gSS54PWVlKGUsSSksSS5YPWVlKGksSSksSS5jPWVlKHQsSSksQS54PWVlKGUsQSksQS5YPWVlKGksQSksQS5jPWVlKHQsQSkse2Zvcm1hdDpmdW5jdGlvbihDZSl7dmFyIHZ0PWVlKENlKz0iIixJKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSxwYXJzZTpmdW5jdGlvbihDZSl7dmFyIHZ0PVgoQ2UrPSIiLCExKTtyZXR1cm4gdnQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gQ2V9LHZ0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1lZShDZSs9IiIsQSk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH0sdXRjUGFyc2U6ZnVuY3Rpb24oQ2Upe3ZhciB2dD1YKENlKz0iIiwhMCk7cmV0dXJuIHZ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIENlfSx2dH19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLGt2PU92LmZvcm1hdDt2YXIgWnc9NmU0LEp3PTYwKlp3LCR3PTI0Kkp3LGY0PTM2NSokdztmdW5jdGlvbiBzVmUobil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIGFWZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGU/K246K25ldyBEYXRlKCtuKX1mdW5jdGlvbiBtNChuLHQsZSxpLHIsbyxzLGEsbCl7dmFyIGM9R3coZ2EsZ2EpLHU9Yy5pbnZlcnQsZD1jLmRvbWFpbixwPWwoIi4lTCIpLGg9bCgiOiVTIiksZj1sKCIlSTolTSIpLG09bCgiJUkgJXAiKSxDPWwoIiVhICVkIiksXz1sKCIlYiAlZCIpLHk9bCgiJUIiKSxJPWwoIiVZIiksQT1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsWnddLFtvLDUsNSpad10sW28sMTUsMTUqWnddLFtvLDMwLDMwKlp3XSxbciwxLEp3XSxbciwzLDMqSnddLFtyLDYsNipKd10sW3IsMTIsMTIqSnddLFtpLDEsJHddLFtpLDIsMiokd10sW2UsMSw2MDQ4ZTVdLFt0LDEsMjU5MmU2XSxbdCwzLDc3NzZlNl0sW24sMSxmNF1dO2Z1bmN0aW9uIE8oWCl7cmV0dXJuKHMoWCk8WD9wOm8oWCk8WD9oOnIoWCk8WD9mOmkoWCk8WD9tOnQoWCk8WD9lKFgpPFg/QzpfOm4oWCk8WD95OkkpKFgpfWZ1bmN0aW9uIGVlKFgseGUsZmUsdmUpe2lmKG51bGw9PVgmJihYPTEwKSwibnVtYmVyIj09dHlwZW9mIFgpe3ZhciBUPU1hdGguYWJzKGZlLXhlKS9YLG5lPXd3KGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGVbMl19KS5yaWdodChBLFQpO25lPT09QS5sZW5ndGg/KHZlPURkKHhlL2Y0LGZlL2Y0LFgpLFg9bik6bmU/KHZlPShuZT1BW1QvQVtuZS0xXVsyXTxBW25lXVsyXS9UP25lLTE6bmVdKVsxXSxYPW5lWzBdKToodmU9TWF0aC5tYXgoRGQoeGUsZmUsWCksMSksWD1hKX1yZXR1cm4gbnVsbD09dmU/WDpYLmV2ZXJ5KHZlKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBEYXRlKHUoWCkpfSxjLmRvbWFpbj1mdW5jdGlvbihYKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9kKHp3LmNhbGwoWCxhVmUpKTpkKCkubWFwKHNWZSl9LGMudGlja3M9ZnVuY3Rpb24oWCx4ZSl7dmFyIGxlLGZlPWQoKSx2ZT1mZVswXSxUPWZlW2ZlLmxlbmd0aC0xXSxuZT1UPHZlO3JldHVybiBuZSYmKGxlPXZlLHZlPVQsVD1sZSksbGU9KGxlPWVlKFgsdmUsVCx4ZSkpP2xlLnJhbmdlKHZlLFQrMSk6W10sbmU/bGUucmV2ZXJzZSgpOmxlfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oWCx4ZSl7cmV0dXJuIG51bGw9PXhlP086bCh4ZSl9LGMubmljZT1mdW5jdGlvbihYLHhlKXt2YXIgZmU9ZCgpO3JldHVybihYPWVlKFgsZmVbMF0sZmVbZmUubGVuZ3RoLTFdLHhlKSk/ZChiUihmZSxYKSk6Y30sYy5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHBoKGMsbTQobix0LGUsaSxyLG8scyxhLGwpKX0sY31mdW5jdGlvbiBMbSgpe3JldHVybiBtYS5hcHBseShtNChPZCxhNCxrbSxJdixzNCxvNCxTUixDUixrdikuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZzQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBGdihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIGVNKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiB0TShuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY3NlKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1nNC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmc0LGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y3NlKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoZU0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsdE0odGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYodE0odGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsZU0odGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8scyx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9jc2Uocik6aTpyLHQ/dC5MPT09bj90Lkw9bzp0LlI9bzp0aGlzLl89byxpJiZyPyhzPW8uQyxvLkM9bi5DLG8uTD1pLGkuVT1vLG8hPT1yPyh0PW8uVSxvLlU9bi5VLHQuTD1uPW8uUixvLlI9cixyLlU9byk6KG8uVT10LHQ9byxuPW8uUikpOihzPW4uQyxuPW8pLG4mJihuLlU9dCksIXMpe2lmKG4mJm4uQylyZXR1cm4gdm9pZChuLkM9ITEpO2Rve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoKGU9dC5SKS5DJiYoZS5DPSExLHQuQz0hMCxlTSh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCx0TSh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSxlTSh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPXQuTCkuQyYmKGUuQz0hMSx0LkM9ITAsdE0odGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsZU0odGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsdE0odGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O3ZhciBfND1nNDtmdW5jdGlvbiBOdihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxvPXFvLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJm5NKHIsbix0LGUpLGkmJm5NKHIsdCxuLGkpLFVzW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLFVzW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLHJ9ZnVuY3Rpb24gTHYobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIG5NKG4sdCxlLGkpe25bMF18fG5bMV0/bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pOihuWzBdPWksbi5sZWZ0PXQsbi5yaWdodD1lKX1mdW5jdGlvbiB1VmUobix0LGUsaSxyKXt2YXIgbSxvPW5bMF0scz1uWzFdLGE9b1swXSxsPW9bMV0sZD0wLHA9MSxoPXNbMF0tYSxmPXNbMV0tbDtpZihtPXQtYSxofHwhKG0+MCkpe2lmKG0vPWgsaDwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihoPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPWktYSxofHwhKG08MCkpe2lmKG0vPWgsaDwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihoPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1pZihtPWUtbCxmfHwhKG0+MCkpe2lmKG0vPWYsZjwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihmPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPXItbCxmfHwhKG08MCkpe2lmKG0vPWYsZjwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihmPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1yZXR1cm4hKGQ+MCkmJiEocDwxKXx8KGQ+MCYmKG5bMF09W2ErZCpoLGwrZCpmXSkscDwxJiYoblsxXT1bYStwKmgsbCtwKmZdKSksITB9fX19fWZ1bmN0aW9uIGRWZShuLHQsZSxpLHIpe3ZhciBvPW5bMV07aWYobylyZXR1cm4hMDt2YXIgbSxDLHM9blswXSxhPW4ubGVmdCxsPW4ucmlnaHQsYz1hWzBdLHU9YVsxXSxkPWxbMF0scD1sWzFdLGg9KGMrZCkvMjtpZihwPT09dSl7aWYoaDx0fHxoPj1pKXJldHVybjtpZihjPmQpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1baCxlXTtvPVtoLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9W2gscl07bz1baCxlXX19ZWxzZSBpZihDPSh1K3ApLzItKG09KGMtZCkvKHAtdSkpKmgsbTwtMXx8bT4xKWlmKGM+ZCl7aWYocyl7aWYoc1sxXT49cilyZXR1cm59ZWxzZSBzPVsoZS1DKS9tLGVdO289WyhyLUMpL20scl19ZWxzZXtpZihzKXtpZihzWzFdPGUpcmV0dXJufWVsc2Ugcz1bKHItQykvbSxyXTtvPVsoZS1DKS9tLGVdfWVsc2UgaWYodTxwKXtpZihzKXtpZihzWzBdPj1pKXJldHVybn1lbHNlIHM9W3QsbSp0K0NdO289W2ksbSppK0NdfWVsc2V7aWYocyl7aWYoc1swXTx0KXJldHVybn1lbHNlIHM9W2ksbSppK0NdO289W3QsbSp0K0NdfXJldHVybiBuWzBdPXMsblsxXT1vLCEwfWZ1bmN0aW9uIHBWZShuLHQpe3ZhciBlPW4uc2l0ZSxpPXQubGVmdCxyPXQucmlnaHQ7cmV0dXJuIGU9PT1yJiYocj1pLGk9ZSkscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihlPT09aT8oaT10WzFdLHI9dFswXSk6KGk9dFswXSxyPXRbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uIHY0KG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQhPT1uLnNpdGUpXX1mdW5jdGlvbiBoVmUobix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfXZhciBUUixmc2U9W107ZnVuY3Rpb24gZlZlKCl7RnYodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEJtKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLHU9b1swXS1zLGQ9b1sxXS1hLHA9MioobCpkLWMqdSk7aWYoIShwPj0tbXNlKSl7dmFyIGg9bCpsK2MqYyxmPXUqdStkKmQsbT0oZCpoLWMqZikvcCxDPShsKmYtdSpoKS9wLF89ZnNlLnBvcCgpfHxuZXcgZlZlO18uYXJjPW4sXy5zaXRlPXIsXy54PW0rcyxfLnk9KF8uY3k9QythKStNYXRoLnNxcnQobSptK0MqQyksbi5jaXJjbGU9Xztmb3IodmFyIHk9bnVsbCxJPUJ2Ll87STspaWYoXy55PEkueXx8Xy55PT09SS55JiZfLng8PUkueCl7aWYoIUkuTCl7eT1JLlA7YnJlYWt9ST1JLkx9ZWxzZXtpZighSS5SKXt5PUk7YnJlYWt9ST1JLlJ9QnYuaW5zZXJ0KHksXykseXx8KFRSPV8pfX19fWZ1bmN0aW9uIFZtKG4pe3ZhciB0PW4uY2lyY2xlO3QmJih0LlB8fChUUj10Lk4pLEJ2LnJlbW92ZSh0KSxmc2UucHVzaCh0KSxGdih0KSxuLmNpcmNsZT1udWxsKX12YXIgX3NlPVtdO2Z1bmN0aW9uIG1WZSgpe0Z2KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBnc2Uobil7dmFyIHQ9X3NlLnBvcCgpfHxuZXcgbVZlO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIHk0KG4pe1ZtKG4pLEhtLnJlbW92ZShuKSxfc2UucHVzaChuKSxGdihuKX1mdW5jdGlvbiB2c2Uobil7dmFyIHQ9bi5jaXJjbGUsZT10LngsaT10LmN5LHI9W2UsaV0sbz1uLlAscz1uLk4sYT1bbl07eTQobik7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKGUtbC5jaXJjbGUueCk8b3ImJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPG9yOylvPWwuUCxhLnVuc2hpZnQobCkseTQobCksbD1vO2EudW5zaGlmdChsKSxWbShsKTtmb3IodmFyIGM9cztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxvciYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8b3I7KXM9Yy5OLGEucHVzaChjKSx5NChjKSxjPXM7YS5wdXNoKGMpLFZtKGMpO3ZhciBkLHU9YS5sZW5ndGg7Zm9yKGQ9MTtkPHU7KytkKW5NKChjPWFbZF0pLmVkZ2UsKGw9YVtkLTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1hW3UtMV0pLmVkZ2U9TnYoKGw9YVswXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxCbShsKSxCbShjKX1mdW5jdGlvbiB5c2Uobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1IbS5fO2E7KWlmKChvPWJzZShhLGUpLXQpPm9yKWE9YS5MO2Vsc2V7aWYoISgocz10LWdWZShhLGUpKT5vcikpe28+LW9yPyhpPWEuUCxyPWEpOnM+LW9yPyhpPWEscj1hLk4pOmk9cj1hO2JyZWFrfWlmKCFhLlIpe2k9YTticmVha31hPWEuUn0hZnVuY3Rpb24obil7VXNbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1nc2Uobik7aWYoSG0uaW5zZXJ0KGksbCksaXx8cil7aWYoaT09PXIpcmV0dXJuIFZtKGkpLHI9Z3NlKGkuc2l0ZSksSG0uaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSxCbShpKSx2b2lkIEJtKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1OdihpLnNpdGUsbC5zaXRlKSk7Vm0oaSksVm0ocik7dmFyIGM9aS5zaXRlLHU9Y1swXSxkPWNbMV0scD1uWzBdLXUsaD1uWzFdLWQsZj1yLnNpdGUsbT1mWzBdLXUsQz1mWzFdLWQsXz0yKihwKkMtaCptKSx5PXAqcCtoKmgsST1tKm0rQypDLEE9WyhDKnktaCpJKS9fK3UsKHAqSS1tKnkpL18rZF07bk0oci5lZGdlLGMsZixBKSxsLmVkZ2U9TnYoYyxuLG51bGwsQSksci5lZGdlPU52KG4sZixudWxsLEEpLEJtKGkpLEJtKHIpfX1mdW5jdGlvbiBic2Uobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgcz1uLlA7aWYoIXMpcmV0dXJuLTEvMDt2YXIgYT0oZT1zLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksZD0xL28tMS9jLHA9dS9jO3JldHVybiBkPygtcCtNYXRoLnNxcnQocCpwLTIqZCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9kK2k6KGkrYSkvMn1mdW5jdGlvbiBnVmUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gYnNlKGUsdCk7dmFyIGk9bi5zaXRlO3JldHVybiBpWzFdPT09dD9pWzBdOjEvMH12YXIgSG0sVXMsQnYscW8sb3I9MWUtNixtc2U9MWUtMTI7ZnVuY3Rpb24gX1ZlKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiB2VmUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gRFIobix0KXt2YXIgaSxyLG8sZT1uLnNvcnQodlZlKS5wb3AoKTtmb3IocW89W10sVXM9bmV3IEFycmF5KG4ubGVuZ3RoKSxIbT1uZXcgXzQsQnY9bmV3IF80OzspaWYobz1UUixlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih5c2UoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7dnNlKG8uYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgZSxpLHIsbyxuPTAsdD1Vcy5sZW5ndGg7bjx0OysrbilpZigoZT1Vc1tuXSkmJihvPShpPWUuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgcz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPG87KytyKXNbcl09cixhW3JdPXBWZShlLHFvW2lbcl1dKTtmb3Iocy5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGFbY10tYVtsXX0pLHI9MDtyPG87KytyKWFbcl09aVtzW3JdXTtmb3Iocj0wO3I8bzsrK3IpaVtyXT1hW3JdfX0oKSx0KXt2YXIgcz0rdFswXVswXSxhPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTsoZnVuY3Rpb24obix0LGUsaSl7Zm9yKHZhciBvLHI9cW8ubGVuZ3RoO3ItLTspZFZlKG89cW9bcl0sbix0LGUsaSkmJnVWZShvLG4sdCxlLGkpJiYoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5vcnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5vcil8fGRlbGV0ZSBxb1tyXX0pKHMsYSxsLGMpLGZ1bmN0aW9uKG4sdCxlLGkpe3ZhciBvLHMsYSxsLGMsdSxkLHAsaCxmLG0sQyxyPVVzLmxlbmd0aCxfPSEwO2ZvcihvPTA7bzxyOysrbylpZihzPVVzW29dKXtmb3IoYT1zLnNpdGUsbD0oYz1zLmhhbGZlZGdlcykubGVuZ3RoO2wtLTspcW9bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspbT0oZj1oVmUocyxxb1tjW2xdXSkpWzBdLEM9ZlsxXSxwPShkPXY0KHMscW9bY1srK2wldV1dKSlbMF0saD1kWzFdLChNYXRoLmFicyhtLXApPm9yfHxNYXRoLmFicyhDLWgpPm9yKSYmKGMuc3BsaWNlKGwsMCxxby5wdXNoKEx2KGEsZixNYXRoLmFicyhtLW4pPG9yJiZpLUM+b3I/W24sTWF0aC5hYnMocC1uKTxvcj9oOmldOk1hdGguYWJzKEMtaSk8b3ImJmUtbT5vcj9bTWF0aC5hYnMoaC1pKTxvcj9wOmUsaV06TWF0aC5hYnMobS1lKTxvciYmQy10Pm9yP1tlLE1hdGguYWJzKHAtZSk8b3I/aDp0XTpNYXRoLmFicyhDLXQpPG9yJiZtLW4+b3I/W01hdGguYWJzKGgtdCk8b3I/cDpuLHRdOm51bGwpKS0xKSwrK3UpO3UmJihfPSExKX1pZihfKXt2YXIgeSxJLEEsTz0xLzA7Zm9yKG89MCxfPW51bGw7bzxyOysrbykocz1Vc1tvXSkmJihBPSh5PShhPXMuc2l0ZSlbMF0tbikqeSsoST1hWzFdLXQpKkkpPE8mJihPPUEsXz1zKTtpZihfKXt2YXIgZWU9W24sdF0sWD1bbixpXSx4ZT1bZSxpXSxmZT1bZSx0XTtfLmhhbGZlZGdlcy5wdXNoKHFvLnB1c2goTHYoYT1fLnNpdGUsZWUsWCkpLTEscW8ucHVzaChMdihhLFgseGUpKS0xLHFvLnB1c2goTHYoYSx4ZSxmZSkpLTEscW8ucHVzaChMdihhLGZlLGVlKSktMSl9fWZvcihvPTA7bzxyOysrbykocz1Vc1tvXSkmJihzLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBVc1tvXSl9KHMsYSxsLGMpfXRoaXMuZWRnZXM9cW8sdGhpcy5jZWxscz1VcyxIbT1Cdj1xbz1Vcz1udWxsfWZ1bmN0aW9uIFVtKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1EUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkRSLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB2NCh0LG5baV0pfSk7cmV0dXJuIGUuZGF0YT10LnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBuPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7aWYoYT0obz1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgbyxhLGwscj1lLnNpdGUscz0tMSxjPXRbb1thLTFdXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQ7KytzPGE7KWw9dSx1PShjPXRbb1tzXV0pLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJmk8bC5pbmRleCYmaTx1LmluZGV4JiZfVmUocixsLHUpPDAmJm4ucHVzaChbci5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLG59LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybntzb3VyY2U6bi5sZWZ0LmRhdGEsdGFyZ2V0Om4ucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihuLHQsZSl7Zm9yKHZhciByLGEsaT10aGlzLG89aS5fZm91bmR8fDAscz1pLmNlbGxzLmxlbmd0aDshKGE9aS5jZWxsc1tvXSk7KWlmKCsrbz49cylyZXR1cm4gbnVsbDt2YXIgbD1uLWEuc2l0ZVswXSxjPXQtYS5zaXRlWzFdLHU9bCpsK2MqYztkb3thPWkuY2VsbHNbcj1vXSxvPW51bGwsYS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2VzW2RdLGg9cC5sZWZ0O2lmKGghPT1hLnNpdGUmJmh8fChoPXAucmlnaHQpKXt2YXIgZj1uLWhbMF0sbT10LWhbMV0sQz1mKmYrbSptO0M8dSYmKHU9QyxvPWguaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gaS5fZm91bmQ9cixudWxsPT1lfHx1PD1lKmU/YS5zaXRlOm51bGx9fSxVbS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVtLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiAxPT09bj90aGlzOm5ldyBVbSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1uJjA9PT10P3RoaXM6bmV3IFVtKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IFVtKDEsMCwwKTt2YXIgTXNlPXJvKCIuMn5lIikseVZlPXJvKCIuNH5yIikseHNlPXJvKCIsfiIpO2Z1bmN0aW9uIENzZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp5VmUobil9dmFyIHptPXtmb3JtYXRUaWNrOkNzZSxmb3JtYXRTaG9ydDpDc2UsZm9ybWF0UmVhZGFibGUobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP01zZShuKTp4c2Uobil9LGZvcm1hdExvbmc6eHNlfSxiVmU9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjR9KTtmdW5jdGlvbiBBUihuKXtyZXR1cm4gYlZlLmZvcm1hdChuKX12YXIgdnM9e2Zvcm1hdFRpY2s6QVIsZm9ybWF0U2hvcnQ6QVIsZm9ybWF0UmVhZGFibGU6QVIsZm9ybWF0TG9uZzpBUn0seFZlPXJvKCIwLjN+cyIpLENWZT1ybygiLC4zfmYiKTtmdW5jdGlvbiBJUihuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49MWU0fHx0PC4wMDE/eFZlKG4pOkNWZShuKX12YXIgU3NlPXtmb3JtYXRUaWNrOklSLGZvcm1hdFNob3J0OklSLGZvcm1hdFJlYWRhYmxlOklSLGZvcm1hdExvbmc6SVJ9LEU0PTM2ZTUsVnY9cm8oIi40fiIpO2Z1bmN0aW9uIFBSKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTwxZTM/YCR7VnYoZSl9IG1zYDplPDZlND9gJHtWdihlLzFlMyl9IHNlY2A6ZTxFND9gJHtWdihlLzZlNCl9IG1pbmA6ZTw4NjRlNT9gJHtWdihlL0U0KX0gaHJgOmU8MzE1MzZlNj9gJHtWdihlLzg2NGU1KX0gZGF5YDpgJHtWdihlLzMxNTM2ZTYpfSB5cmAsdH12YXIgdzQsaU09e2Zvcm1hdFRpY2s6UFIsZm9ybWF0U2hvcnQ6UFIsZm9ybWF0UmVhZGFibGU6UFIsZm9ybWF0TG9uZzpQUn0sd1ZlPUxtKCkudGlja0Zvcm1hdCgpLEVzZT17Zm9ybWF0VGljazpuPT53VmUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcodzQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHc0LHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIEFjKG4pe3N3aXRjaChuKXtjYXNlIFNyLkxJTkVBUjpyZXR1cm4gbmV3IHJNO2Nhc2UgU3IuTE9HMTA6cmV0dXJuIG5ldyBJNDtjYXNlIFNyLlRJTUU6cmV0dXJuIG5ldyBvTTtkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgck09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1EYygpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIERjKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sSTQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9em19dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbCxkPWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSxkLyh1K051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybSh1LyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1XdygpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sb009Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPUxtKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUVzZX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sUDQ9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57UDQ9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO1A0PUJvb2xlYW4odCl9dmFyIEljX2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxJY19pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiBQNH0sSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtpZighc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIikpcmV0dXJuITE7bGV0IG49bmV3IE9mZnNjcmVlbkNhbnZhcygwLDApLmdldENvbnRleHQoIndlYmdsMiIpO3JldHVybiBCb29sZWFuKG4pfSxJY19hcmVQb2x5bGluZXNFcXVhbD1mdW5jdGlvbihuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9LEh2PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy54U2NhbGU9QWMoU3IuTElORUFSKSx0aGlzLnlTY2FsZT1BYyhTci5MSU5FQVIpLHRoaXMuZG9tQ29udGFpbmVyUmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmxhc3RVcGRhdGVkPTAsdGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX19Z2V0VXBkYXRlSWRlbnRpZmllcigpe3JldHVybiB0aGlzLmxhc3RVcGRhdGVkfXVwZGF0ZUlkZW50aWZpZXIoKXt0aGlzLmxhc3RVcGRhdGVkKyt9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITB9c2V0WFNjYWxlKHQpe3RoaXMueFNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0WVNjYWxlKHQpe3RoaXMueVNjYWxlPXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9Z2V0Q3VycmVudFZpZXdCb3hSZWN0KCl7cmV0dXJuIHRoaXMuY3VycmVudFZpZXdCb3hSZWN0fXNldFZpZXdCb3hSZWN0KHQpe3RoaXMuY3VycmVudFZpZXdCb3hSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXt0aGlzLmRvbUNvbnRhaW5lclJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX10cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsZSl7bGV0IGk9dCxyPUljX2NvbnZlcnRSZWN0VG9FeHRlbnQodGhpcy5jdXJyZW50Vmlld0JveFJlY3QpO3JldHVyblt0aGlzLnhTY2FsZS5mb3J3YXJkKHIueCxbaS54LGkueCtpLndpZHRoXSxlWzBdKSx0aGlzLnlTY2FsZS5mb3J3YXJkKHIueSx0aGlzLmlzWUF4aXNQb2ludGVkRG93bigpP1tpLnkraS5oZWlnaHQsaS55XTpbaS55LGkueStpLmhlaWdodF0sZVsxXSldfX07ZnVuY3Rpb24gUlIobix0LGUsaSl7bGV0e2NvbG9yOnIsdmlzaWJsZTpvLG9wYWNpdHk6c309aSxhPW47cmV0dXJuIGF8fG8/KGE9YT8/dCgpLGE9ZShhKSxhLnN0eWxlLmRpc3BsYXk9bz8iIjoibm9uZSIsYS5zdHlsZS5zdHJva2U9cixhLnN0eWxlLm9wYWNpdHk9U3RyaW5nKHM/PzEpLGEpOm51bGx9dmFyIFphPTEwMDEsSW89MTAwMyxicz0xMDA2LFNoPTEwMDksd009MTAxMixZbT0xMDE1LHV5PTEwMTYsZHk9MTAyMCx6cz0xMDIzLFFtPTEwMjYsbXk9MTAyNyxheT0yNDAwLGx5PTI0MDEsRGg9M2UzLEZyPTMwMDEsTU09MzUwNDQsZzI9MzUwNDgsSGQ9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3ZvaWQgMD09PXRoaXMuX2xpc3RlbmVycyYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3ZvaWQgMD09PWlbdF0mJihpW3RdPVtdKSwtMT09PWlbdF0uaW5kZXhPZihlKSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuITE7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3JldHVybiB2b2lkIDAhPT1pW3RdJiYtMSE9PWlbdF0uaW5kZXhPZihlKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnNbdF07aWYodm9pZCAwIT09cil7bGV0IG89ci5pbmRleE9mKGUpOy0xIT09byYmci5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKHZvaWQgMCE9PWkpe3QudGFyZ2V0PXRoaXM7bGV0IHI9aS5zbGljZSgwKTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxpcz1bXTtmb3IobGV0IG49MDtuPDI1NjtuKyspaXNbbl09KG48MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KTt2YXIgQjQ9TWF0aC5QSS8xODAsd1U9MTgwL01hdGguUEk7ZnVuY3Rpb24gRmMoKXtsZXQgbj00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCx0PTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLGU9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsaT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oaXNbMjU1Jm5dK2lzW24+PjgmMjU1XStpc1tuPj4xNiYyNTVdK2lzW24+PjI0JjI1NV0rIi0iK2lzWzI1NSZ0XStpc1t0Pj44JjI1NV0rIi0iK2lzW3Q+PjE2JjE1fDY0XStpc1t0Pj4yNCYyNTVdKyItIitpc1s2MyZlfDEyOF0raXNbZT4+OCYyNTVdKyItIitpc1tlPj4xNiYyNTVdK2lzW2U+PjI0JjI1NV0raXNbMjU1JmldK2lzW2k+PjgmMjU1XStpc1tpPj4xNiYyNTVdK2lzW2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gX2Eobix0LGUpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfWZ1bmN0aW9uIFY0KG4sdCxlKXtyZXR1cm4oMS1lKSpuK2UqdH1mdW5jdGlvbiBpYWUobil7cmV0dXJuIDA9PShuJm4tMSkmJjAhPT1ufWZ1bmN0aW9uIEE1ZShuKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4yKSl9dmFyIEplPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPXRoaXMueC10Lngscz10aGlzLnktdC55O3JldHVybiB0aGlzLng9byppLXMqcit0LngsdGhpcy55PW8qcitzKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0plLnByb3RvdHlwZS5pc1ZlY3RvcjI9ITA7dmFyIFBvPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwxLDAsMCwwLDFdLGFyZ3VtZW50cy5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4iKX1zZXQodCxlLGkscixvLHMsYSxsLGMpe2xldCB1PXRoaXMuZWxlbWVudHM7cmV0dXJuIHVbMF09dCx1WzFdPXIsdVsyXT1hLHVbM109ZSx1WzRdPW8sdVs1XT1sLHVbNl09aSx1WzddPXMsdVs4XT1jLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwxLDAsMCwwLDEpLHRoaXN9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sdGhpc31leHRyYWN0QmFzaXModCxlLGkpe3JldHVybiB0LnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywyKSx0aGlzfXNldEZyb21NYXRyaXg0KHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVs0XSxlWzhdLGVbMV0sZVs1XSxlWzldLGVbMl0sZVs2XSxlWzEwXSksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxvPXRoaXMuZWxlbWVudHMscz1pWzBdLGE9aVszXSxsPWlbNl0sYz1pWzFdLHU9aVs0XSxkPWlbN10scD1pWzJdLGg9aVs1XSxmPWlbOF0sbT1yWzBdLEM9clszXSxfPXJbNl0seT1yWzFdLEk9cls0XSxBPXJbN10sTz1yWzJdLGVlPXJbNV0sWD1yWzhdO3JldHVybiBvWzBdPXMqbSthKnkrbCpPLG9bM109cypDK2EqSStsKmVlLG9bNl09cypfK2EqQStsKlgsb1sxXT1jKm0rdSp5K2QqTyxvWzRdPWMqQyt1KkkrZCplZSxvWzddPWMqXyt1KkErZCpYLG9bMl09cCptK2gqeStmKk8sb1s1XT1wKkMraCpJK2YqZWUsb1s4XT1wKl8raCpBK2YqWCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIGVbMF0qPXQsZVszXSo9dCxlWzZdKj10LGVbMV0qPXQsZVs0XSo9dCxlWzddKj10LGVbMl0qPXQsZVs1XSo9dCxlWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdO3JldHVybiBlKnMqdS1lKmEqYy1pKm8qdStpKmEqbCtyKm8qYy1yKnMqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSxpPXRbMV0scj10WzJdLG89dFszXSxzPXRbNF0sYT10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGQ9dSpzLWEqYyxwPWEqbC11Km8saD1jKm8tcypsLGY9ZSpkK2kqcCtyKmg7aWYoMD09PWYpcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgbT0xL2Y7cmV0dXJuIHRbMF09ZCptLHRbMV09KHIqYy11KmkpKm0sdFsyXT0oYSppLXIqcykqbSx0WzNdPXAqbSx0WzRdPSh1KmUtcipsKSptLHRbNV09KHIqby1hKmUpKm0sdFs2XT1oKm0sdFs3XT0oaSpsLWMqZSkqbSx0WzhdPShzKmUtaSpvKSptLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQsZT10aGlzLmVsZW1lbnRzO3JldHVybiB0PWVbMV0sZVsxXT1lWzNdLGVbM109dCx0PWVbMl0sZVsyXT1lWzZdLGVbNl09dCx0PWVbNV0sZVs1XT1lWzddLGVbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVszXSx0WzJdPWVbNl0sdFszXT1lWzFdLHRbNF09ZVs0XSx0WzVdPWVbN10sdFs2XT1lWzJdLHRbN109ZVs1XSx0WzhdPWVbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LGUsaSxyLG8scyxhKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChpKmwsaSpjLC1pKihsKnMrYyphKStzK3QsLXIqYyxyKmwsLXIqKC1jKnMrbCphKSthK2UsMCwwLDEpLHRoaXN9c2NhbGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKj10LGlbM10qPXQsaVs2XSo9dCxpWzFdKj1lLGlbNF0qPWUsaVs3XSo9ZSx0aGlzfXJvdGF0ZSh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLHI9dGhpcy5lbGVtZW50cyxvPXJbMF0scz1yWzNdLGE9cls2XSxsPXJbMV0sYz1yWzRdLHU9cls3XTtyZXR1cm4gclswXT1lKm8raSpsLHJbM109ZSpzK2kqYyxyWzZdPWUqYStpKnUsclsxXT0taSpvK2UqbCxyWzRdPS1pKnMrZSpjLHJbN109LWkqYStlKnUsdGhpc310cmFuc2xhdGUodCxlKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiBpWzBdKz10KmlbMl0saVszXSs9dCppWzVdLGlbNl0rPXQqaVs4XSxpWzFdKz1lKmlbMl0saVs0XSs9ZSppWzVdLGlbN10rPWUqaVs4XSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfX07ZnVuY3Rpb24gbWxlKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gU00obil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9UG8ucHJvdG90eXBlLmlzTWF0cml4Mz0hMDt2YXIgcmFlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LFBjPXtoOjAsczowLGw6MH0sT1I9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBINChuLHQsZSl7cmV0dXJuIGU8MCYmKGUrPTEpLGU+MSYmKGUtPTEpLGU8MS82P24rNioodC1uKSplOmU8LjU/dDplPDIvMz9uKzYqKHQtbikqKDIvMy1lKTpufWZ1bmN0aW9uIHB5KG4pe3JldHVybiBuPC4wNDA0NT8uMDc3Mzk5MzgwOCpuOk1hdGgucG93KC45NDc4NjcyOTg2Km4rLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBVNChuKXtyZXR1cm4gbjwuMDAzMTMwOD8xMi45MipuOjEuMDU1Kk1hdGgucG93KG4sLjQxNjY2KS0uMDU1fXZhciBhbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXtyZXR1cm4gdm9pZCAwPT09aSYmdm9pZCAwPT09cj90aGlzLnNldChlKTp0aGlzLnNldFJHQihlLGkscil9c2V0KGUpe3JldHVybiBlJiZlLmlzQ29sb3I/dGhpcy5jb3B5KGUpOiJudW1iZXIiPT10eXBlb2YgZT90aGlzLnNldEhleChlKToic3RyaW5nIj09dHlwZW9mIGUmJnRoaXMuc2V0U3R5bGUoZSksdGhpc31zZXRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1lLHRoaXMuYj1lLHRoaXN9c2V0SGV4KGUpe3JldHVybiBlPU1hdGguZmxvb3IoZSksdGhpcy5yPShlPj4xNiYyNTUpLzI1NSx0aGlzLmc9KGU+PjgmMjU1KS8yNTUsdGhpcy5iPSgyNTUmZSkvMjU1LHRoaXN9c2V0UkdCKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUsdGhpcy5nPWksdGhpcy5iPXIsdGhpc31zZXRIU0woZSxpLHIpe2lmKGU9ZnVuY3Rpb24obix0KXtyZXR1cm4obiUxKzEpJTF9KGUpLGk9X2EoaSwwLDEpLHI9X2EociwwLDEpLDA9PT1pKXRoaXMucj10aGlzLmc9dGhpcy5iPXI7ZWxzZXtsZXQgbz1yPD0uNT9yKigxK2kpOnIraS1yKmkscz0yKnItbzt0aGlzLnI9SDQocyxvLGUrMS8zKSx0aGlzLmc9SDQocyxvLGUpLHRoaXMuYj1INChzLG8sZS0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKGUpe2Z1bmN0aW9uIGkobyl7dm9pZCAwIT09byYmcGFyc2VGbG9hdChvKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIitlKyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCByO2lmKHI9L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWMoZSkpe2xldCBvLGE9clsyXTtzd2l0Y2goclsxXSl7Y2FzZSJyZ2IiOmNhc2UicmdiYSI6aWYobz0vXlxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bMV0sMTApKS8yNTUsdGhpcy5nPU1hdGgubWluKDI1NSxwYXJzZUludChvWzJdLDEwKSkvMjU1LHRoaXMuYj1NYXRoLm1pbigyNTUscGFyc2VJbnQob1szXSwxMCkpLzI1NSxpKG9bNF0pLHRoaXM7aWYobz0vXlxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXJldHVybiB0aGlzLnI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bMV0sMTApKS8xMDAsdGhpcy5nPU1hdGgubWluKDEwMCxwYXJzZUludChvWzJdLDEwKSkvMTAwLHRoaXMuYj1NYXRoLm1pbigxMDAscGFyc2VJbnQob1szXSwxMCkpLzEwMCxpKG9bNF0pLHRoaXM7YnJlYWs7Y2FzZSJoc2wiOmNhc2UiaHNsYSI6aWYobz0vXlxzKihcZCpcLj9cZCspXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSl7bGV0IGw9cGFyc2VGbG9hdChvWzFdKS8zNjAsYz1wYXJzZUludChvWzJdLDEwKS8xMDAsdT1wYXJzZUludChvWzNdLDEwKS8xMDA7cmV0dXJuIGkob1s0XSksdGhpcy5zZXRIU0wobCxjLHUpfX19ZWxzZSBpZihyPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyhlKSl7bGV0IG89clsxXSxzPW8ubGVuZ3RoO2lmKDM9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMSkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKDY9PT1zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoby5jaGFyQXQoMCkrby5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoby5jaGFyQXQoMikrby5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoby5jaGFyQXQoNCkrby5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiBlJiZlLmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKGUpOnRoaXN9c2V0Q29sb3JOYW1lKGUpe2xldCBpPXJhZVtlLnRvTG93ZXJDYXNlKCldO3JldHVybiB2b2lkIDAhPT1pP3RoaXMuc2V0SGV4KGkpOmNvbnNvbGUud2FybigiVEhSRUUuQ29sb3I6IFVua25vd24gY29sb3IgIitlKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMucix0aGlzLmcsdGhpcy5iKX1jb3B5KGUpe3JldHVybiB0aGlzLnI9ZS5yLHRoaXMuZz1lLmcsdGhpcy5iPWUuYix0aGlzfWNvcHlTUkdCVG9MaW5lYXIoZSl7cmV0dXJuIHRoaXMucj1weShlLnIpLHRoaXMuZz1weShlLmcpLHRoaXMuYj1weShlLmIpLHRoaXN9Y29weUxpbmVhclRvU1JHQihlKXtyZXR1cm4gdGhpcy5yPVU0KGUuciksdGhpcy5nPVU0KGUuZyksdGhpcy5iPVU0KGUuYiksdGhpc31jb252ZXJ0U1JHQlRvTGluZWFyKCl7cmV0dXJuIHRoaXMuY29weVNSR0JUb0xpbmVhcih0aGlzKSx0aGlzfWNvbnZlcnRMaW5lYXJUb1NSR0IoKXtyZXR1cm4gdGhpcy5jb3B5TGluZWFyVG9TUkdCKHRoaXMpLHRoaXN9Z2V0SGV4KCl7cmV0dXJuIDI1NSp0aGlzLnI8PDE2XjI1NSp0aGlzLmc8PDheMjU1KnRoaXMuYjw8MH1nZXRIZXhTdHJpbmcoKXtyZXR1cm4oIjAwMDAwMCIrdGhpcy5nZXRIZXgoKS50b1N0cmluZygxNikpLnNsaWNlKC02KX1nZXRIU0woZSl7bGV0IGwsYyxpPXRoaXMucixyPXRoaXMuZyxvPXRoaXMuYixzPU1hdGgubWF4KGkscixvKSxhPU1hdGgubWluKGkscixvKSx1PShhK3MpLzI7aWYoYT09PXMpbD0wLGM9MDtlbHNle2xldCBkPXMtYTtzd2l0Y2goYz11PD0uNT9kLyhzK2EpOmQvKDItcy1hKSxzKXtjYXNlIGk6bD0oci1vKS9kKyhyPG8/NjowKTticmVhaztjYXNlIHI6bD0oby1pKS9kKzI7YnJlYWs7Y2FzZSBvOmw9KGktcikvZCs0fWwvPTZ9cmV0dXJuIGUuaD1sLGUucz1jLGUubD11LGV9Z2V0U3R5bGUoKXtyZXR1cm4icmdiKCIrKDI1NSp0aGlzLnJ8MCkrIiwiKygyNTUqdGhpcy5nfDApKyIsIisoMjU1KnRoaXMuYnwwKSsiKSJ9b2Zmc2V0SFNMKGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRIU0woUGMpLFBjLmgrPWUsUGMucys9aSxQYy5sKz1yLHRoaXMuc2V0SFNMKFBjLmgsUGMucyxQYy5sKSx0aGlzfWFkZChlKXtyZXR1cm4gdGhpcy5yKz1lLnIsdGhpcy5nKz1lLmcsdGhpcy5iKz1lLmIsdGhpc31hZGRDb2xvcnMoZSxpKXtyZXR1cm4gdGhpcy5yPWUucitpLnIsdGhpcy5nPWUuZytpLmcsdGhpcy5iPWUuYitpLmIsdGhpc31hZGRTY2FsYXIoZSl7cmV0dXJuIHRoaXMucis9ZSx0aGlzLmcrPWUsdGhpcy5iKz1lLHRoaXN9c3ViKGUpe3JldHVybiB0aGlzLnI9TWF0aC5tYXgoMCx0aGlzLnItZS5yKSx0aGlzLmc9TWF0aC5tYXgoMCx0aGlzLmctZS5nKSx0aGlzLmI9TWF0aC5tYXgoMCx0aGlzLmItZS5iKSx0aGlzfW11bHRpcGx5KGUpe3JldHVybiB0aGlzLnIqPWUucix0aGlzLmcqPWUuZyx0aGlzLmIqPWUuYix0aGlzfW11bHRpcGx5U2NhbGFyKGUpe3JldHVybiB0aGlzLnIqPWUsdGhpcy5nKj1lLHRoaXMuYio9ZSx0aGlzfWxlcnAoZSxpKXtyZXR1cm4gdGhpcy5yKz0oZS5yLXRoaXMucikqaSx0aGlzLmcrPShlLmctdGhpcy5nKSppLHRoaXMuYis9KGUuYi10aGlzLmIpKmksdGhpc31sZXJwQ29sb3JzKGUsaSxyKXtyZXR1cm4gdGhpcy5yPWUucisoaS5yLWUucikqcix0aGlzLmc9ZS5nKyhpLmctZS5nKSpyLHRoaXMuYj1lLmIrKGkuYi1lLmIpKnIsdGhpc31sZXJwSFNMKGUsaSl7dGhpcy5nZXRIU0woUGMpLGUuZ2V0SFNMKE9SKTtsZXQgcj1WNChQYy5oLE9SLmgsaSksbz1WNChQYy5zLE9SLnMsaSkscz1WNChQYy5sLE9SLmwsaSk7cmV0dXJuIHRoaXMuc2V0SFNMKHIsbyxzKSx0aGlzfWVxdWFscyhlKXtyZXR1cm4gZS5yPT09dGhpcy5yJiZlLmc9PT10aGlzLmcmJmUuYj09PXRoaXMuYn1mcm9tQXJyYXkoZSxpPTApe3JldHVybiB0aGlzLnI9ZVtpXSx0aGlzLmc9ZVtpKzFdLHRoaXMuYj1lW2krMl0sdGhpc310b0FycmF5KGU9W10saT0wKXtyZXR1cm4gZVtpXT10aGlzLnIsZVtpKzFdPXRoaXMuZyxlW2krMl09dGhpcy5iLGV9ZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGkpe3JldHVybiB0aGlzLnI9ZS5nZXRYKGkpLHRoaXMuZz1lLmdldFkoaSksdGhpcy5iPWUuZ2V0WihpKSwhMD09PWUubm9ybWFsaXplZCYmKHRoaXMuci89MjU1LHRoaXMuZy89MjU1LHRoaXMuYi89MjU1KSx0aGlzfXRvSlNPTigpe3JldHVybiB0aGlzLmdldEhleCgpfX1yZXR1cm4gbi5OQU1FUz1yYWUsbn0pKCk7YW4ucHJvdG90eXBlLmlzQ29sb3I9ITAsYW4ucHJvdG90eXBlLnI9MSxhbi5wcm90b3R5cGUuZz0xLGFuLnByb3RvdHlwZS5iPTE7dmFyIFV2LFVkPWNsYXNze3N0YXRpYyBnZXREYXRhVVJMKHQpe2lmKC9eZGF0YTovaS50ZXN0KHQuc3JjKXx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PiJ1IilyZXR1cm4gdC5zcmM7bGV0IGU7aWYodCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50KWU9dDtlbHNle3ZvaWQgMD09PVV2JiYoVXY9U00oImNhbnZhcyIpKSxVdi53aWR0aD10LndpZHRoLFV2LmhlaWdodD10LmhlaWdodDtsZXQgaT1Vdi5nZXRDb250ZXh0KCIyZCIpO3QgaW5zdGFuY2VvZiBJbWFnZURhdGE/aS5wdXRJbWFnZURhdGEodCwwLDApOmkuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpLGU9VXZ9cmV0dXJuIGUud2lkdGg+MjA0OHx8ZS5oZWlnaHQ+MjA0OD8oY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmdldERhdGFVUkw6IEltYWdlIGNvbnZlcnRlZCB0byBqcGcgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMiLHQpLGUudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwuNikpOmUudG9EYXRhVVJMKCJpbWFnZS9wbmciKX1zdGF0aWMgc1JHQlRvTGluZWFyKHQpe2lmKHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmdCBpbnN0YW5jZW9mIEltYWdlQml0bWFwKXtsZXQgZT1TTSgiY2FudmFzIik7ZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPWUuZ2V0Q29udGV4dCgiMmQiKTtpLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KTtsZXQgcj1pLmdldEltYWdlRGF0YSgwLDAsdC53aWR0aCx0LmhlaWdodCksbz1yLmRhdGE7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspb1tzXT0yNTUqcHkob1tzXS8yNTUpO3JldHVybiBpLnB1dEltYWdlRGF0YShyLDAsMCksZX1pZih0LmRhdGEpe2xldCBlPXQuZGF0YS5zbGljZSgwKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyllW2ldPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxlIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/TWF0aC5mbG9vcigyNTUqcHkoZVtpXS8yNTUpKTpweShlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLnNSR0JUb0xpbmVhcigpOiBVbnN1cHBvcnRlZCBpbWFnZSB0eXBlLiBObyBjb2xvciBzcGFjZSBjb252ZXJzaW9uIGFwcGxpZWQuIiksdH19LEk1ZT0wLGJvPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodD1iby5ERUZBVUxUX0lNQUdFLGU9Ym8uREVGQVVMVF9NQVBQSU5HLGk9WmEscj1aYSxvPWJzLHM9MTAwOCxhPXpzLGw9U2gsYz0xLHU9RGgpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6STVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9ZSx0aGlzLndyYXBTPWksdGhpcy53cmFwVD1yLHRoaXMubWFnRmlsdGVyPW8sdGhpcy5taW5GaWx0ZXI9cyx0aGlzLmFuaXNvdHJvcHk9Yyx0aGlzLmZvcm1hdD1hLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9bCx0aGlzLm9mZnNldD1uZXcgSmUoMCwwKSx0aGlzLnJlcGVhdD1uZXcgSmUoMSwxKSx0aGlzLmNlbnRlcj1uZXcgSmUoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBQbyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMCx0aGlzLnByZW11bHRpcGx5QWxwaGE9ITEsdGhpcy5mbGlwWT0hMCx0aGlzLnVucGFja0FsaWdubWVudD00LHRoaXMuZW5jb2Rpbmc9dSx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMSx0aGlzLm5lZWRzUE1SRU1VcGRhdGU9ITF9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5uYW1lPXQubmFtZSx0aGlzLmltYWdlPXQuaW1hZ2UsdGhpcy5taXBtYXBzPXQubWlwbWFwcy5zbGljZSgwKSx0aGlzLm1hcHBpbmc9dC5tYXBwaW5nLHRoaXMud3JhcFM9dC53cmFwUyx0aGlzLndyYXBUPXQud3JhcFQsdGhpcy5tYWdGaWx0ZXI9dC5tYWdGaWx0ZXIsdGhpcy5taW5GaWx0ZXI9dC5taW5GaWx0ZXIsdGhpcy5hbmlzb3Ryb3B5PXQuYW5pc290cm9weSx0aGlzLmZvcm1hdD10LmZvcm1hdCx0aGlzLmludGVybmFsRm9ybWF0PXQuaW50ZXJuYWxGb3JtYXQsdGhpcy50eXBlPXQudHlwZSx0aGlzLm9mZnNldC5jb3B5KHQub2Zmc2V0KSx0aGlzLnJlcGVhdC5jb3B5KHQucmVwZWF0KSx0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLmdlbmVyYXRlTWlwbWFwcz10LmdlbmVyYXRlTWlwbWFwcyx0aGlzLnByZW11bHRpcGx5QWxwaGE9dC5wcmVtdWx0aXBseUFscGhhLHRoaXMuZmxpcFk9dC5mbGlwWSx0aGlzLnVucGFja0FsaWdubWVudD10LnVucGFja0FsaWdubWVudCx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcsdGhpcy51c2VyRGF0YT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQudXNlckRhdGEpKSx0aGlzfXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7aWYoIWUmJnZvaWQgMCE9PXQudGV4dHVyZXNbdGhpcy51dWlkXSlyZXR1cm4gdC50ZXh0dXJlc1t0aGlzLnV1aWRdO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiVGV4dHVyZSIsZ2VuZXJhdG9yOiJUZXh0dXJlLnRvSlNPTiJ9LHV1aWQ6dGhpcy51dWlkLG5hbWU6dGhpcy5uYW1lLG1hcHBpbmc6dGhpcy5tYXBwaW5nLHJlcGVhdDpbdGhpcy5yZXBlYXQueCx0aGlzLnJlcGVhdC55XSxvZmZzZXQ6W3RoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueV0sY2VudGVyOlt0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnldLHJvdGF0aW9uOnRoaXMucm90YXRpb24sd3JhcDpbdGhpcy53cmFwUyx0aGlzLndyYXBUXSxmb3JtYXQ6dGhpcy5mb3JtYXQsdHlwZTp0aGlzLnR5cGUsZW5jb2Rpbmc6dGhpcy5lbmNvZGluZyxtaW5GaWx0ZXI6dGhpcy5taW5GaWx0ZXIsbWFnRmlsdGVyOnRoaXMubWFnRmlsdGVyLGFuaXNvdHJvcHk6dGhpcy5hbmlzb3Ryb3B5LGZsaXBZOnRoaXMuZmxpcFkscHJlbXVsdGlwbHlBbHBoYTp0aGlzLnByZW11bHRpcGx5QWxwaGEsdW5wYWNrQWxpZ25tZW50OnRoaXMudW5wYWNrQWxpZ25tZW50fTtpZih2b2lkIDAhPT10aGlzLmltYWdlKXtsZXQgcj10aGlzLmltYWdlO2lmKHZvaWQgMD09PXIudXVpZCYmKHIudXVpZD1GYygpKSwhZSYmdm9pZCAwPT09dC5pbWFnZXNbci51dWlkXSl7bGV0IG87aWYoQXJyYXkuaXNBcnJheShyKSl7bz1bXTtmb3IobGV0IHM9MCxhPXIubGVuZ3RoO3M8YTtzKyspby5wdXNoKHo0KHJbc10uaXNEYXRhVGV4dHVyZT9yW3NdLmltYWdlOnJbc10pKX1lbHNlIG89ejQocik7dC5pbWFnZXNbci51dWlkXT17dXVpZDpyLnV1aWQsdXJsOm99fWkuaW1hZ2U9ci51dWlkfXJldHVybiJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1pKSxpfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9dHJhbnNmb3JtVXYodCl7aWYoMzAwIT09dGhpcy5tYXBwaW5nKXJldHVybiB0O2lmKHQuYXBwbHlNYXRyaXgzKHRoaXMubWF0cml4KSx0Lng8MHx8dC54PjEpc3dpdGNoKHRoaXMud3JhcFMpe2Nhc2UgMWUzOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgWmE6dC54PXQueDwwPzA6MTticmVhaztjYXNlIDEwMDI6dC54PTE9PT1NYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik/TWF0aC5jZWlsKHQueCktdC54OnQueC1NYXRoLmZsb29yKHQueCl9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIDFlMzp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVhaztjYXNlIFphOnQueT10Lnk8MD8wOjE7YnJlYWs7Y2FzZSAxMDAyOnQueT0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpP01hdGguY2VpbCh0LnkpLXQueTp0LnktTWF0aC5mbG9vcih0LnkpfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07ZnVuY3Rpb24gejQobil7cmV0dXJuIHR5cGVvZiBIVE1MSW1hZ2VFbGVtZW50PCJ1IiYmbiBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmbiBpbnN0YW5jZW9mIEltYWdlQml0bWFwP1VkLmdldERhdGFVUkwobik6bi5kYXRhP3tkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4uZGF0YSksd2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHQsdHlwZTpuLmRhdGEuY29uc3RydWN0b3IubmFtZX06KGNvbnNvbGUud2FybigiVEhSRUUuVGV4dHVyZTogVW5hYmxlIHRvIHNlcmlhbGl6ZSBUZXh0dXJlLiIpLHt9KX1iby5ERUZBVUxUX0lNQUdFPXZvaWQgMCxiby5ERUZBVUxUX01BUFBJTkc9MzAwLGJvLnByb3RvdHlwZS5pc1RleHR1cmU9ITA7dmFyIHRyPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9MSl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpcy53PXJ9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dm9pZCAwIT09dC53P3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXRoaXMudyxzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1s0XSppK3NbOF0qcitzWzEyXSpvLHRoaXMueT1zWzFdKmUrc1s1XSppK3NbOV0qcitzWzEzXSpvLHRoaXMuej1zWzJdKmUrc1s2XSppK3NbMTBdKnIrc1sxNF0qbyx0aGlzLnc9c1szXSplK3NbN10qaStzWzExXSpyK3NbMTVdKm8sdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgZT1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gZTwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10LngvZSx0aGlzLnk9dC55L2UsdGhpcy56PXQuei9lKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZSxpLHIsbyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxkPWxbOF0scD1sWzFdLGg9bFs1XSxmPWxbOV0sbT1sWzJdLEM9bFs2XSxfPWxbMTBdO2lmKE1hdGguYWJzKHUtcCk8LjAxJiZNYXRoLmFicyhkLW0pPC4wMSYmTWF0aC5hYnMoZi1DKTwuMDEpe2lmKE1hdGguYWJzKHUrcCk8LjEmJk1hdGguYWJzKGQrbSk8LjEmJk1hdGguYWJzKGYrQyk8LjEmJk1hdGguYWJzKGMraCtfLTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtsZXQgST0oYysxKS8yLEE9KGgrMSkvMixPPShfKzEpLzIsZWU9KHUrcCkvNCxYPShkK20pLzQseGU9KGYrQykvNDtyZXR1cm4gST5BJiZJPk8/STwuMDE/KGk9MCxyPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoSSkscj1lZS9pLG89WC9pKTpBPk8/QTwuMDE/KGk9LjcwNzEwNjc4MSxyPTAsbz0uNzA3MTA2NzgxKToocj1NYXRoLnNxcnQoQSksaT1lZS9yLG89eGUvcik6TzwuMDE/KGk9LjcwNzEwNjc4MSxyPS43MDcxMDY3ODEsbz0wKToobz1NYXRoLnNxcnQoTyksaT1YL28scj14ZS9vKSx0aGlzLnNldChpLHIsbyxlKSx0aGlzfWxldCB5PU1hdGguc3FydCgoQy1mKSooQy1mKSsoZC1tKSooZC1tKSsocC11KSoocC11KSk7cmV0dXJuIE1hdGguYWJzKHkpPC4wMDEmJih5PTEpLHRoaXMueD0oQy1mKS95LHRoaXMueT0oZC1tKS95LHRoaXMuej0ocC11KS95LHRoaXMudz1NYXRoLmFjb3MoKGMraCtfLTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oZS53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzLnc9dC53KyhlLnctdC53KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gdm9pZCAwIT09aSYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O3RyLnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIHZhPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgdHIoMCwwLHQsZSksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyB0cigwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IGJvKHZvaWQgMCxpLm1hcHBpbmcsaS53cmFwUyxpLndyYXBULGkubWFnRmlsdGVyLGkubWluRmlsdGVyLGkuZm9ybWF0LGkudHlwZSxpLmFuaXNvdHJvcHksaS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz12b2lkIDAhPT1pLmdlbmVyYXRlTWlwbWFwcyYmaS5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLmludGVybmFsRm9ybWF0PXZvaWQgMCE9PWkuaW50ZXJuYWxGb3JtYXQ/aS5pbnRlcm5hbEZvcm1hdDpudWxsLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09aS5taW5GaWx0ZXI/aS5taW5GaWx0ZXI6YnMsdGhpcy5kZXB0aEJ1ZmZlcj12b2lkIDA9PT1pLmRlcHRoQnVmZmVyfHxpLmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj12b2lkIDAhPT1pLnN0ZW5jaWxCdWZmZXImJmkuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT12b2lkIDAhPT1pLmRlcHRoVGV4dHVyZT9pLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LGUsaT0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9aSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuY29weSh0LnZpZXdwb3J0KSx0aGlzLnRleHR1cmU9dC50ZXh0dXJlLmNsb25lKCksdGhpcy50ZXh0dXJlLmltYWdlPU9iamVjdC5hc3NpZ24oe30sdC50ZXh0dXJlLmltYWdlKSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTt2YS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlclRhcmdldD0hMCxjbGFzcyBleHRlbmRzIHZhe2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpO2xldCByPXRoaXMudGV4dHVyZTt0aGlzLnRleHR1cmU9W107Zm9yKGxldCBvPTA7bzxpO28rKyl0aGlzLnRleHR1cmVbb109ci5jbG9uZSgpfXNldFNpemUodCxlLGk9MSl7aWYodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aTtmb3IobGV0IHI9MCxvPXRoaXMudGV4dHVyZS5sZW5ndGg7cjxvO3IrKyl0aGlzLnRleHR1cmVbcl0uaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmRlcHRoPWk7dGhpcy5kaXNwb3NlKCl9cmV0dXJuIHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSksdGhpc31jb3B5KHQpe3RoaXMuZGlzcG9zZSgpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzLmRlcHRoPXQuZGVwdGgsdGhpcy52aWV3cG9ydC5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpLHRoaXMuZGVwdGhCdWZmZXI9dC5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dC5zdGVuY2lsQnVmZmVyLHRoaXMuZGVwdGhUZXh0dXJlPXQuZGVwdGhUZXh0dXJlLHRoaXMudGV4dHVyZS5sZW5ndGg9MDtmb3IobGV0IGU9MCxpPXQudGV4dHVyZS5sZW5ndGg7ZTxpO2UrKyl0aGlzLnRleHR1cmVbZV09dC50ZXh0dXJlW2VdLmNsb25lKCk7cmV0dXJuIHRoaXN9fS5wcm90b3R5cGUuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz0hMDt2YXIgRU09Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaT17fSl7c3VwZXIodCxlLGkpLHRoaXMuc2FtcGxlcz00LHRoaXMuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHk9dm9pZCAwPT09aS5pZ25vcmVEZXB0aHx8aS5pZ25vcmVEZXB0aCx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT12b2lkIDAhPT1pLnVzZVJlbmRlclRvVGV4dHVyZSYmaS51c2VSZW5kZXJUb1RleHR1cmUsdGhpcy51c2VSZW5kZXJidWZmZXI9ITE9PT10aGlzLnVzZVJlbmRlclRvVGV4dHVyZX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtFTS5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciBDcz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cn1zdGF0aWMgc2xlcnAodCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLGkuc2xlcnBRdWF0ZXJuaW9ucyh0LGUscil9c3RhdGljIHNsZXJwRmxhdCh0LGUsaSxyLG8scyxhKXtsZXQgbD1pW3IrMF0sYz1pW3IrMV0sdT1pW3IrMl0sZD1pW3IrM10scD1vW3MrMF0saD1vW3MrMV0sZj1vW3MrMl0sbT1vW3MrM107aWYoMD09PWEpcmV0dXJuIHRbZSswXT1sLHRbZSsxXT1jLHRbZSsyXT11LHZvaWQodFtlKzNdPWQpO2lmKDE9PT1hKXJldHVybiB0W2UrMF09cCx0W2UrMV09aCx0W2UrMl09Zix2b2lkKHRbZSszXT1tKTtpZihkIT09bXx8bCE9PXB8fGMhPT1ofHx1IT09Zil7bGV0IEM9MS1hLF89bCpwK2MqaCt1KmYrZCptLHk9Xz49MD8xOi0xLEk9MS1fKl87aWYoST5OdW1iZXIuRVBTSUxPTil7bGV0IE89TWF0aC5zcXJ0KEkpLGVlPU1hdGguYXRhbjIoTyxfKnkpO0M9TWF0aC5zaW4oQyplZSkvTyxhPU1hdGguc2luKGEqZWUpL099bGV0IEE9YSp5O2lmKGw9bCpDK3AqQSxjPWMqQytoKkEsdT11KkMrZipBLGQ9ZCpDK20qQSxDPT09MS1hKXtsZXQgTz0xL01hdGguc3FydChsKmwrYypjK3UqdStkKmQpO2wqPU8sYyo9Tyx1Kj1PLGQqPU99fXRbZV09bCx0W2UrMV09Yyx0W2UrMl09dSx0W2UrM109ZH1zdGF0aWMgbXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxlLGkscixvLHMpe2xldCBhPWlbcl0sbD1pW3IrMV0sYz1pW3IrMl0sdT1pW3IrM10sZD1vW3NdLHA9b1tzKzFdLGg9b1tzKzJdLGY9b1tzKzNdO3JldHVybiB0W2VdPWEqZit1KmQrbCpoLWMqcCx0W2UrMV09bCpmK3UqcCtjKmQtYSpoLHRbZSsyXT1jKmYrdSpoK2EqcC1sKmQsdFtlKzNdPXUqZi1hKmQtbCpwLWMqaCx0fWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB3KCl7cmV0dXJuIHRoaXMuX3d9c2V0IHcodCl7dGhpcy5fdz10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLl94LHRoaXMuX3ksdGhpcy5feix0aGlzLl93KX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQueCx0aGlzLl95PXQueSx0aGlzLl96PXQueix0aGlzLl93PXQudyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tRXVsZXIodCxlKXtpZighdHx8IXQuaXNFdWxlcil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX29yZGVyLGE9TWF0aC5jb3MsbD1NYXRoLnNpbixjPWEoaS8yKSx1PWEoci8yKSxkPWEoby8yKSxwPWwoaS8yKSxoPWwoci8yKSxmPWwoby8yKTtzd2l0Y2gocyl7Y2FzZSJYWVoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9cCp1KmQrYypoKmYsdGhpcy5feT1jKmgqZCtwKnUqZix0aGlzLl96PWMqdSpmLXAqaCpkLHRoaXMuX3c9Yyp1KmQtcCpoKmY7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9cCp1KmQtYypoKmYsdGhpcy5feT1jKmgqZC1wKnUqZix0aGlzLl96PWMqdSpmK3AqaCpkLHRoaXMuX3c9Yyp1KmQrcCpoKmY7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK3MpfXJldHVybiExIT09ZSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUF4aXNBbmdsZSh0LGUpe2xldCBpPWUvMixyPU1hdGguc2luKGkpO3JldHVybiB0aGlzLl94PXQueCpyLHRoaXMuX3k9dC55KnIsdGhpcy5fej10Lnoqcix0aGlzLl93PU1hdGguY29zKGkpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZT10LmVsZW1lbnRzLGk9ZVswXSxyPWVbNF0sbz1lWzhdLHM9ZVsxXSxhPWVbNV0sbD1lWzldLGM9ZVsyXSx1PWVbNl0sZD1lWzEwXSxwPWkrYStkO2lmKHA+MCl7bGV0IGg9LjUvTWF0aC5zcXJ0KHArMSk7dGhpcy5fdz0uMjUvaCx0aGlzLl94PSh1LWwpKmgsdGhpcy5feT0oby1jKSpoLHRoaXMuX3o9KHMtcikqaH1lbHNlIGlmKGk+YSYmaT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2ktYS1kKTt0aGlzLl93PSh1LWwpL2gsdGhpcy5feD0uMjUqaCx0aGlzLl95PShyK3MpL2gsdGhpcy5fej0obytjKS9ofWVsc2UgaWYoYT5kKXtsZXQgaD0yKk1hdGguc3FydCgxK2EtaS1kKTt0aGlzLl93PShvLWMpL2gsdGhpcy5feD0ocitzKS9oLHRoaXMuX3k9LjI1KmgsdGhpcy5fej0obCt1KS9ofWVsc2V7bGV0IGg9MipNYXRoLnNxcnQoMStkLWktYSk7dGhpcy5fdz0ocy1yKS9oLHRoaXMuX3g9KG8rYykvaCx0aGlzLl95PShsK3UpL2gsdGhpcy5fej0uMjUqaH1yZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVVuaXRWZWN0b3JzKHQsZSl7bGV0IGk9dC5kb3QoZSkrMTtyZXR1cm4gaTxOdW1iZXIuRVBTSUxPTj8oaT0wLE1hdGguYWJzKHQueCk+TWF0aC5hYnModC56KT8odGhpcy5feD0tdC55LHRoaXMuX3k9dC54LHRoaXMuX3o9MCx0aGlzLl93PWkpOih0aGlzLl94PTAsdGhpcy5feT0tdC56LHRoaXMuX3o9dC55LHRoaXMuX3c9aSkpOih0aGlzLl94PXQueSplLnotdC56KmUueSx0aGlzLl95PXQueiplLngtdC54KmUueix0aGlzLl96PXQueCplLnktdC55KmUueCx0aGlzLl93PWkpLHRoaXMubm9ybWFsaXplKCl9YW5nbGVUbyh0KXtyZXR1cm4gMipNYXRoLmFjb3MoTWF0aC5hYnMoX2EodGhpcy5kb3QodCksLTEsMSkpKX1yb3RhdGVUb3dhcmRzKHQsZSl7bGV0IGk9dGhpcy5hbmdsZVRvKHQpO2lmKDA9PT1pKXJldHVybiB0aGlzO2xldCByPU1hdGgubWluKDEsZS9pKTtyZXR1cm4gdGhpcy5zbGVycCh0LHIpLHRoaXN9aWRlbnRpdHkoKXtyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMSl9aW52ZXJ0KCl7cmV0dXJuIHRoaXMuY29uanVnYXRlKCl9Y29uanVnYXRlKCl7cmV0dXJuIHRoaXMuX3gqPS0xLHRoaXMuX3kqPS0xLHRoaXMuX3oqPS0xLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy5feCp0Ll94K3RoaXMuX3kqdC5feSt0aGlzLl96KnQuX3ordGhpcy5fdyp0Ll93fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fd31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuX3gqdGhpcy5feCt0aGlzLl95KnRoaXMuX3krdGhpcy5feip0aGlzLl96K3RoaXMuX3cqdGhpcy5fdyl9bm9ybWFsaXplKCl7bGV0IHQ9dGhpcy5sZW5ndGgoKTtyZXR1cm4gMD09PXQ/KHRoaXMuX3g9MCx0aGlzLl95PTAsdGhpcy5fej0wLHRoaXMuX3c9MSk6KHQ9MS90LHRoaXMuX3g9dGhpcy5feCp0LHRoaXMuX3k9dGhpcy5feSp0LHRoaXMuX3o9dGhpcy5feip0LHRoaXMuX3c9dGhpcy5fdyp0KSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5UXVhdGVybmlvbnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpKTp0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHQsdGhpcyl9bXVsdGlwbHlRdWF0ZXJuaW9ucyh0LGUpe2xldCBpPXQuX3gscj10Ll95LG89dC5feixzPXQuX3csYT1lLl94LGw9ZS5feSxjPWUuX3osdT1lLl93O3JldHVybiB0aGlzLl94PWkqdStzKmErcipjLW8qbCx0aGlzLl95PXIqdStzKmwrbyphLWkqYyx0aGlzLl96PW8qdStzKmMraSpsLXIqYSx0aGlzLl93PXMqdS1pKmEtcipsLW8qYyx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycCh0LGUpe2lmKDA9PT1lKXJldHVybiB0aGlzO2lmKDE9PT1lKXJldHVybiB0aGlzLmNvcHkodCk7bGV0IGk9dGhpcy5feCxyPXRoaXMuX3ksbz10aGlzLl96LHM9dGhpcy5fdyxhPXMqdC5fdytpKnQuX3grcip0Ll95K28qdC5fejtpZihhPDA/KHRoaXMuX3c9LXQuX3csdGhpcy5feD0tdC5feCx0aGlzLl95PS10Ll95LHRoaXMuX3o9LXQuX3osYT0tYSk6dGhpcy5jb3B5KHQpLGE+PTEpcmV0dXJuIHRoaXMuX3c9cyx0aGlzLl94PWksdGhpcy5feT1yLHRoaXMuX3o9byx0aGlzO2xldCBsPTEtYSphO2lmKGw8PU51bWJlci5FUFNJTE9OKXtsZXQgaD0xLWU7cmV0dXJuIHRoaXMuX3c9aCpzK2UqdGhpcy5fdyx0aGlzLl94PWgqaStlKnRoaXMuX3gsdGhpcy5feT1oKnIrZSp0aGlzLl95LHRoaXMuX3o9aCpvK2UqdGhpcy5feix0aGlzLm5vcm1hbGl6ZSgpLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWxldCBjPU1hdGguc3FydChsKSx1PU1hdGguYXRhbjIoYyxhKSxkPU1hdGguc2luKCgxLWUpKnUpL2MscD1NYXRoLnNpbihlKnUpL2M7cmV0dXJuIHRoaXMuX3c9cypkK3RoaXMuX3cqcCx0aGlzLl94PWkqZCt0aGlzLl94KnAsdGhpcy5feT1yKmQrdGhpcy5feSpwLHRoaXMuX3o9bypkK3RoaXMuX3oqcCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zbGVycFF1YXRlcm5pb25zKHQsZSxpKXtyZXR1cm4gdGhpcy5jb3B5KHQpLnNsZXJwKGUsaSl9cmFuZG9tKCl7bGV0IHQ9TWF0aC5yYW5kb20oKSxlPU1hdGguc3FydCgxLXQpLGk9TWF0aC5zcXJ0KHQpLHI9MipNYXRoLlBJKk1hdGgucmFuZG9tKCksbz0yKk1hdGguUEkqTWF0aC5yYW5kb20oKTtyZXR1cm4gdGhpcy5zZXQoZSpNYXRoLmNvcyhyKSxpKk1hdGguc2luKG8pLGkqTWF0aC5jb3MobyksZSpNYXRoLnNpbihyKSl9ZXF1YWxzKHQpe3JldHVybiB0Ll94PT09dGhpcy5feCYmdC5feT09PXRoaXMuX3kmJnQuX3o9PT10aGlzLl96JiZ0Ll93PT09dGhpcy5fd31mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLl94PXRbZV0sdGhpcy5feT10W2UrMV0sdGhpcy5fej10W2UrMl0sdGhpcy5fdz10W2UrM10sdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fdyx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKXtyZXR1cm4gdGhpcy5feD10LmdldFgoZSksdGhpcy5feT10LmdldFkoZSksdGhpcy5fej10LmdldFooZSksdGhpcy5fdz10LmdldFcoZSksdGhpc31fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07Q3MucHJvdG90eXBlLmlzUXVhdGVybmlvbj0hMDt2YXIgJD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWl9c2V0KHQsZSxpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9dGhpcy56KSx0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztjYXNlIDI6dGhpcy56PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5VmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseVZlY3RvcnModCxlKSk6KHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMpfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXMueio9dCx0aGlzfW11bHRpcGx5VmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54KmUueCx0aGlzLnk9dC55KmUueSx0aGlzLno9dC56KmUueix0aGlzfWFwcGx5RXVsZXIodCl7cmV0dXJuIHQmJnQuaXNFdWxlcnx8Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLmFwcGx5RXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpLHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKG9hZS5zZXRGcm9tQXhpc0FuZ2xlKHQsZSkpfWFwcGx5TWF0cml4Myh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bM10qaStvWzZdKnIsdGhpcy55PW9bMV0qZStvWzRdKmkrb1s3XSpyLHRoaXMuej1vWzJdKmUrb1s1XSppK29bOF0qcix0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4Myh0KS5ub3JtYWxpemUoKX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dGhpcy56LG89dC5lbGVtZW50cyxzPTEvKG9bM10qZStvWzddKmkrb1sxMV0qcitvWzE1XSk7cmV0dXJuIHRoaXMueD0ob1swXSplK29bNF0qaStvWzhdKnIrb1sxMl0pKnMsdGhpcy55PShvWzFdKmUrb1s1XSppK29bOV0qcitvWzEzXSkqcyx0aGlzLno9KG9bMl0qZStvWzZdKmkrb1sxMF0qcitvWzE0XSkqcyx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10Lngscz10LnksYT10LnosbD10LncsYz1sKmUrcypyLWEqaSx1PWwqaSthKmUtbypyLGQ9bCpyK28qaS1zKmUscD0tbyplLXMqaS1hKnI7cmV0dXJuIHRoaXMueD1jKmwrcCotbyt1Ki1hLWQqLXMsdGhpcy55PXUqbCtwKi1zK2QqLW8tYyotYSx0aGlzLno9ZCpsK3AqLWErYyotcy11Ki1vLHRoaXN9cHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZEludmVyc2UpLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXgpfXVucHJvamVjdCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpfXRyYW5zZm9ybURpcmVjdGlvbih0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9b1swXSplK29bNF0qaStvWzhdKnIsdGhpcy55PW9bMV0qZStvWzVdKmkrb1s5XSpyLHRoaXMuej1vWzJdKmUrb1s2XSppK29bMTBdKnIsdGhpcy5ub3JtYWxpemUoKX1kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXMuei89dC56LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzLno9TWF0aC5tYXgodGhpcy56LHQueiksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpcy56PU1hdGguZmxvb3IodGhpcy56KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpcy56PU1hdGgucm91bmQodGhpcy56KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQuen1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMuen1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueil9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzLnorPSh0LnotdGhpcy56KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzfWNyb3NzKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmNyb3NzKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuY3Jvc3NWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmNyb3NzVmVjdG9ycyh0LGUpKTp0aGlzLmNyb3NzVmVjdG9ycyh0aGlzLHQpfWNyb3NzVmVjdG9ycyh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPWUueCxhPWUueSxsPWUuejtyZXR1cm4gdGhpcy54PXIqbC1vKmEsdGhpcy55PW8qcy1pKmwsdGhpcy56PWkqYS1yKnMsdGhpc31wcm9qZWN0T25WZWN0b3IodCl7bGV0IGU9dC5sZW5ndGhTcSgpO2lmKDA9PT1lKXJldHVybiB0aGlzLnNldCgwLDAsMCk7bGV0IGk9dC5kb3QodGhpcykvZTtyZXR1cm4gdGhpcy5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKGkpfXByb2plY3RPblBsYW5lKHQpe3JldHVybiBqNC5jb3B5KHRoaXMpLnByb2plY3RPblZlY3Rvcih0KSx0aGlzLnN1YihqNCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoajQuY29weSh0KS5tdWx0aXBseVNjYWxhcigyKnRoaXMuZG90KHQpKSl9YW5nbGVUbyh0KXtsZXQgZT1NYXRoLnNxcnQodGhpcy5sZW5ndGhTcSgpKnQubGVuZ3RoU3EoKSk7aWYoMD09PWUpcmV0dXJuIE1hdGguUEkvMjtsZXQgaT10aGlzLmRvdCh0KS9lO3JldHVybiBNYXRoLmFjb3MoX2EoaSwtMSwxKSl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55LHI9dGhpcy56LXQuejtyZXR1cm4gZSplK2kqaStyKnJ9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSkrTWF0aC5hYnModGhpcy56LXQueil9c2V0RnJvbVNwaGVyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQucmFkaXVzLHQucGhpLHQudGhldGEpfXNldEZyb21TcGhlcmljYWxDb29yZHModCxlLGkpe2xldCByPU1hdGguc2luKGUpKnQ7cmV0dXJuIHRoaXMueD1yKk1hdGguc2luKGkpLHRoaXMueT1NYXRoLmNvcyhlKSp0LHRoaXMuej1yKk1hdGguY29zKGkpLHRoaXN9c2V0RnJvbUN5bGluZHJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnRoZXRhLHQueSl9c2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQqTWF0aC5zaW4oZSksdGhpcy55PWksdGhpcy56PXQqTWF0aC5jb3MoZSksdGhpc31zZXRGcm9tTWF0cml4UG9zaXRpb24odCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PWVbMTJdLHRoaXMueT1lWzEzXSx0aGlzLno9ZVsxNF0sdGhpc31zZXRGcm9tTWF0cml4U2NhbGUodCl7bGV0IGU9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMCkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwxKS5sZW5ndGgoKSxyPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDIpLmxlbmd0aCgpO3JldHVybiB0aGlzLng9ZSx0aGlzLnk9aSx0aGlzLno9cix0aGlzfXNldEZyb21NYXRyaXhDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyw0KmUpfXNldEZyb21NYXRyaXgzQ29sdW1uKHQsZSl7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMsMyplKX1lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55JiZ0Lno9PT10aGlzLnp9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiB2b2lkIDAhPT1pJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpcy56PXQuZ2V0WihlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzfXJhbmRvbURpcmVjdGlvbigpe2xldCB0PTIqKE1hdGgucmFuZG9tKCktLjUpLGU9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsaT1NYXRoLnNxcnQoMS10KioyKTtyZXR1cm4gdGhpcy54PWkqTWF0aC5jb3MoZSksdGhpcy55PWkqTWF0aC5zaW4oZSksdGhpcy56PXQsdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMuen19OyQucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgajQ9bmV3ICQsb2FlPW5ldyBDcyxKYT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkKDEvMCwxLzAsMS8wKSxlPW5ldyAkKC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5sZW5ndGg7bDxjO2wrPTMpe2xldCB1PXRbbF0sZD10W2wrMV0scD10W2wrMl07dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5jb3VudDtsPGM7bCsrKXtsZXQgdT10LmdldFgobCksZD10LmdldFkobCkscD10LmdldFoobCk7dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9am0uY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9c2V0RnJvbU9iamVjdCh0LGU9ITEpe3JldHVybiB0aGlzLm1ha2VFbXB0eSgpLHRoaXMuZXhwYW5kQnlPYmplY3QodCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYodm9pZCAwIT09aSlpZihlJiZudWxsIT1pLmF0dHJpYnV0ZXMmJnZvaWQgMCE9PWkuYXR0cmlidXRlcy5wb3NpdGlvbil7bGV0IG89aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGE9by5jb3VudDtzPGE7cysrKWptLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KGptKX1lbHNlIG51bGw9PT1pLmJvdW5kaW5nQm94JiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLEc0LmNvcHkoaS5ib3VuZGluZ0JveCksRzQuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oRzQpO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltvXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLGptKSxqbS5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoYU0pLGtSLnN1YlZlY3RvcnModGhpcy5tYXgsYU0pLHp2LnN1YlZlY3RvcnModC5hLGFNKSxqdi5zdWJWZWN0b3JzKHQuYixhTSksR3Yuc3ViVmVjdG9ycyh0LmMsYU0pLG1oLnN1YlZlY3RvcnMoanYsenYpLGdoLnN1YlZlY3RvcnMoR3YsanYpLEdtLnN1YlZlY3RvcnMoenYsR3YpO2xldCBlPVswLC1taC56LG1oLnksMCwtZ2gueixnaC55LDAsLUdtLnosR20ueSxtaC56LDAsLW1oLngsZ2gueiwwLC1naC54LEdtLnosMCwtR20ueCwtbWgueSxtaC54LDAsLWdoLnksZ2gueCwwLC1HbS55LEdtLngsMF07cmV0dXJuISghVzQoZSx6dixqdixHdixrUil8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIVc0KGUsenYsanYsR3Ysa1IpKSkmJihGUi5jcm9zc1ZlY3RvcnMobWgsZ2gpLGU9W0ZSLngsRlIueSxGUi56XSxXNChlLHp2LGp2LEd2LGtSKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gam0uY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKGptKS5sZW5ndGgoKSx0fWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCl8fChrZFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxrZFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxrZFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoa2QpKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O0phLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIGtkPVtuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJCxuZXcgJF0sam09bmV3ICQsRzQ9bmV3IEphLHp2PW5ldyAkLGp2PW5ldyAkLEd2PW5ldyAkLG1oPW5ldyAkLGdoPW5ldyAkLEdtPW5ldyAkLGFNPW5ldyAkLGtSPW5ldyAkLEZSPW5ldyAkLFdtPW5ldyAkO2Z1bmN0aW9uIFc0KG4sdCxlLGkscil7Zm9yKGxldCBvPTAscz1uLmxlbmd0aC0zO288PXM7bys9Myl7V20uZnJvbUFycmF5KG4sbyk7bGV0IGE9ci54Kk1hdGguYWJzKFdtLngpK3IueSpNYXRoLmFicyhXbS55KStyLnoqTWF0aC5hYnMoV20ueiksbD10LmRvdChXbSksYz1lLmRvdChXbSksdT1pLmRvdChXbSk7aWYoTWF0aC5tYXgoLU1hdGgubWF4KGwsYyx1KSxNYXRoLm1pbihsLGMsdSkpPmEpcmV0dXJuITF9cmV0dXJuITB9dmFyIFA1ZT1uZXcgSmEsc2FlPW5ldyAkLE5SPW5ldyAkLHE0PW5ldyAkLEFoPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7dm9pZCAwIT09ZT9pLmNvcHkoZSk6UDVlLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10Lmxlbmd0aDtvPHM7bysrKXI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHIpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IGU9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9ZSplfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxlKXtsZXQgaT10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gZS5jb3B5KHQpLGk+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihlLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksZS5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSksZX1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7cTQuc3ViVmVjdG9ycyh0LHRoaXMuY2VudGVyKTtsZXQgZT1xNC5sZW5ndGhTcSgpO2lmKGU+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMpe2xldCBpPU1hdGguc3FydChlKSxyPS41KihpLXRoaXMucmFkaXVzKTt0aGlzLmNlbnRlci5hZGQocTQubXVsdGlwbHlTY2FsYXIoci9pKSksdGhpcy5yYWRpdXMrPXJ9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuITA9PT10aGlzLmNlbnRlci5lcXVhbHModC5jZW50ZXIpP05SLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOk5SLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoc2FlLmNvcHkodC5jZW50ZXIpLmFkZChOUikpLHRoaXMuZXhwYW5kQnlQb2ludChzYWUuY29weSh0LmNlbnRlcikuc3ViKE5SKSksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuY2VudGVyLmVxdWFscyh0aGlzLmNlbnRlcikmJnQucmFkaXVzPT09dGhpcy5yYWRpdXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fSxGZD1uZXcgJCxZND1uZXcgJCxMUj1uZXcgJCxfaD1uZXcgJCxYND1uZXcgJCxCUj1uZXcgJCxRND1uZXcgJCxJaD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQoMCwwLC0xKSl7dGhpcy5vcmlnaW49dCx0aGlzLmRpcmVjdGlvbj1lfXNldCh0LGUpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQpLHRoaXMuZGlyZWN0aW9uLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHQub3JpZ2luKSx0aGlzLmRpcmVjdGlvbi5jb3B5KHQuZGlyZWN0aW9uKSx0aGlzfWF0KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMub3JpZ2luKX1sb29rQXQodCl7cmV0dXJuIHRoaXMuZGlyZWN0aW9uLmNvcHkodCkuc3ViKHRoaXMub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzfXJlY2FzdCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uY29weSh0aGlzLmF0KHQsRmQpKSx0aGlzfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtlLnN1YlZlY3RvcnModCx0aGlzLm9yaWdpbik7bGV0IGk9ZS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBpPDA/ZS5jb3B5KHRoaXMub3JpZ2luKTplLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLm9yaWdpbil9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0KSl9ZGlzdGFuY2VTcVRvUG9pbnQodCl7bGV0IGU9RmQuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKS5kb3QodGhpcy5kaXJlY3Rpb24pO3JldHVybiBlPDA/dGhpcy5vcmlnaW4uZGlzdGFuY2VUb1NxdWFyZWQodCk6KEZkLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGUpLmFkZCh0aGlzLm9yaWdpbiksRmQuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlU3FUb1NlZ21lbnQodCxlLGkscil7WTQuY29weSh0KS5hZGQoZSkubXVsdGlwbHlTY2FsYXIoLjUpLExSLmNvcHkoZSkuc3ViKHQpLm5vcm1hbGl6ZSgpLF9oLmNvcHkodGhpcy5vcmlnaW4pLnN1YihZNCk7bGV0IGQscCxoLGYsbz0uNSp0LmRpc3RhbmNlVG8oZSkscz0tdGhpcy5kaXJlY3Rpb24uZG90KExSKSxhPV9oLmRvdCh0aGlzLmRpcmVjdGlvbiksbD0tX2guZG90KExSKSxjPV9oLmxlbmd0aFNxKCksdT1NYXRoLmFicygxLXMqcyk7aWYodT4wKWlmKGQ9cypsLWEscD1zKmEtbCxmPW8qdSxkPj0wKWlmKHA+PS1mKWlmKHA8PWYpe2xldCBtPTEvdTtkKj1tLHAqPW0saD1kKihkK3MqcCsyKmEpK3AqKHMqZCtwKzIqbCkrY31lbHNlIHA9byxkPU1hdGgubWF4KDAsLShzKnArYSkpLGg9LWQqZCtwKihwKzIqbCkrYztlbHNlIHA9LW8sZD1NYXRoLm1heCgwLC0ocypwK2EpKSxoPS1kKmQrcCoocCsyKmwpK2M7ZWxzZSBwPD0tZj8oZD1NYXRoLm1heCgwLC0oLXMqbythKSkscD1kPjA/LW86TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk6cDw9Zj8oZD0wLHA9TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9cCoocCsyKmwpK2MpOihkPU1hdGgubWF4KDAsLShzKm8rYSkpLHA9ZD4wP286TWF0aC5taW4oTWF0aC5tYXgoLW8sLWwpLG8pLGg9LWQqZCtwKihwKzIqbCkrYyk7ZWxzZSBwPXM+MD8tbzpvLGQ9TWF0aC5tYXgoMCwtKHMqcCthKSksaD0tZCpkK3AqKHArMipsKStjO3JldHVybiBpJiZpLmNvcHkodGhpcy5kaXJlY3Rpb24pLm11bHRpcGx5U2NhbGFyKGQpLmFkZCh0aGlzLm9yaWdpbiksciYmci5jb3B5KExSKS5tdWx0aXBseVNjYWxhcihwKS5hZGQoWTQpLGh9aW50ZXJzZWN0U3BoZXJlKHQsZSl7RmQuc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLm9yaWdpbik7bGV0IGk9RmQuZG90KHRoaXMuZGlyZWN0aW9uKSxyPUZkLmRvdChGZCktaSppLG89dC5yYWRpdXMqdC5yYWRpdXM7aWYocj5vKXJldHVybiBudWxsO2xldCBzPU1hdGguc3FydChvLXIpLGE9aS1zLGw9aStzO3JldHVybiBhPDAmJmw8MD9udWxsOnRoaXMuYXQoYTwwP2w6YSxlKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9ZGlzdGFuY2VUb1BsYW5lKHQpe2xldCBlPXQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbik7aWYoMD09PWUpcmV0dXJuIDA9PT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik/MDpudWxsO2xldCBpPS0odGhpcy5vcmlnaW4uZG90KHQubm9ybWFsKSt0LmNvbnN0YW50KS9lO3JldHVybiBpPj0wP2k6bnVsbH1pbnRlcnNlY3RQbGFuZSh0LGUpe2xldCBpPXRoaXMuZGlzdGFuY2VUb1BsYW5lKHQpO3JldHVybiBudWxsPT09aT9udWxsOnRoaXMuYXQoaSxlKX1pbnRlcnNlY3RzUGxhbmUodCl7bGV0IGU9dC5kaXN0YW5jZVRvUG9pbnQodGhpcy5vcmlnaW4pO3JldHVybiAwPT09ZXx8dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKSplPDB9aW50ZXJzZWN0Qm94KHQsZSl7bGV0IGkscixvLHMsYSxsLGM9MS90aGlzLmRpcmVjdGlvbi54LHU9MS90aGlzLmRpcmVjdGlvbi55LGQ9MS90aGlzLmRpcmVjdGlvbi56LHA9dGhpcy5vcmlnaW47cmV0dXJuIGM+PTA/KGk9KHQubWluLngtcC54KSpjLHI9KHQubWF4LngtcC54KSpjKTooaT0odC5tYXgueC1wLngpKmMscj0odC5taW4ueC1wLngpKmMpLHU+PTA/KG89KHQubWluLnktcC55KSp1LHM9KHQubWF4LnktcC55KSp1KToobz0odC5tYXgueS1wLnkpKnUscz0odC5taW4ueS1wLnkpKnUpLGk+c3x8bz5yfHwoKG8+aXx8aSE9aSkmJihpPW8pLChzPHJ8fHIhPXIpJiYocj1zKSxkPj0wPyhhPSh0Lm1pbi56LXAueikqZCxsPSh0Lm1heC56LXAueikqZCk6KGE9KHQubWF4LnotcC56KSpkLGw9KHQubWluLnotcC56KSpkKSxpPmx8fGE+cil8fCgoYT5pfHxpIT1pKSYmKGk9YSksKGw8cnx8ciE9cikmJihyPWwpLHI8MCk/bnVsbDp0aGlzLmF0KGk+PTA/aTpyLGUpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIG51bGwhPT10aGlzLmludGVyc2VjdEJveCh0LEZkKX1pbnRlcnNlY3RUcmlhbmdsZSh0LGUsaSxyLG8pe1g0LnN1YlZlY3RvcnMoZSx0KSxCUi5zdWJWZWN0b3JzKGksdCksUTQuY3Jvc3NWZWN0b3JzKFg0LEJSKTtsZXQgYSxzPXRoaXMuZGlyZWN0aW9uLmRvdChRNCk7aWYocz4wKXtpZihyKXJldHVybiBudWxsO2E9MX1lbHNle2lmKCEoczwwKSlyZXR1cm4gbnVsbDthPS0xLHM9LXN9X2guc3ViVmVjdG9ycyh0aGlzLm9yaWdpbix0KTtsZXQgbD1hKnRoaXMuZGlyZWN0aW9uLmRvdChCUi5jcm9zc1ZlY3RvcnMoX2gsQlIpKTtpZihsPDApcmV0dXJuIG51bGw7bGV0IGM9YSp0aGlzLmRpcmVjdGlvbi5kb3QoWDQuY3Jvc3MoX2gpKTtpZihjPDB8fGwrYz5zKXJldHVybiBudWxsO2xldCB1PS1hKl9oLmRvdChRNCk7cmV0dXJuIHU8MD9udWxsOnRoaXMuYXQodS9zLG8pfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5vcmlnaW4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5vcmlnaW4uZXF1YWxzKHRoaXMub3JpZ2luKSYmdC5kaXJlY3Rpb24uZXF1YWxzKHRoaXMuZGlyZWN0aW9uKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19LE1uPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5lbGVtZW50cz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSxDKXtsZXQgXz10aGlzLmVsZW1lbnRzO3JldHVybiBfWzBdPXQsX1s0XT1lLF9bOF09aSxfWzEyXT1yLF9bMV09byxfWzVdPXMsX1s5XT1hLF9bMTNdPWwsX1syXT1jLF9bNl09dSxfWzEwXT1kLF9bMTRdPXAsX1szXT1oLF9bN109ZixfWzExXT1tLF9bMTVdPUMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyBNbikuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLGVbOV09aVs5XSxlWzEwXT1pWzEwXSxlWzExXT1pWzExXSxlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSxlWzE1XT1pWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxpLngsMCx0LnksZS55LGkueSwwLHQueixlLnosaS56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHMscj0xL1d2LnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxvPTEvV3Yuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHM9MS9Xdi5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIGVbMF09aVswXSpyLGVbMV09aVsxXSpyLGVbMl09aVsyXSpyLGVbM109MCxlWzRdPWlbNF0qbyxlWzVdPWlbNV0qbyxlWzZdPWlbNl0qbyxlWzddPTAsZVs4XT1pWzhdKnMsZVs5XT1pWzldKnMsZVsxMF09aVsxMF0qcyxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lnoscz1NYXRoLmNvcyhpKSxhPU1hdGguc2luKGkpLGw9TWF0aC5jb3MociksYz1NYXRoLnNpbihyKSx1PU1hdGguY29zKG8pLGQ9TWF0aC5zaW4obyk7aWYoIlhZWiI9PT10Lm9yZGVyKXtsZXQgcD1zKnUsaD1zKmQsZj1hKnUsbT1hKmQ7ZVswXT1sKnUsZVs0XT0tbCpkLGVbOF09YyxlWzFdPWgrZipjLGVbNV09cC1tKmMsZVs5XT0tYSpsLGVbMl09bS1wKmMsZVs2XT1mK2gqYyxlWzEwXT1zKmx9ZWxzZSBpZigiWVhaIj09PXQub3JkZXIpe2xldCBwPWwqdSxoPWwqZCxmPWMqdSxtPWMqZDtlWzBdPXArbSphLGVbNF09ZiphLWgsZVs4XT1zKmMsZVsxXT1zKmQsZVs1XT1zKnUsZVs5XT0tYSxlWzJdPWgqYS1mLGVbNl09bStwKmEsZVsxMF09cypsfWVsc2UgaWYoIlpYWSI9PT10Lm9yZGVyKXtsZXQgcD1sKnUsaD1sKmQsZj1jKnUsbT1jKmQ7ZVswXT1wLW0qYSxlWzRdPS1zKmQsZVs4XT1mK2gqYSxlWzFdPWgrZiphLGVbNV09cyp1LGVbOV09bS1wKmEsZVsyXT0tcypjLGVbNl09YSxlWzEwXT1zKmx9ZWxzZSBpZigiWllYIj09PXQub3JkZXIpe2xldCBwPXMqdSxoPXMqZCxmPWEqdSxtPWEqZDtlWzBdPWwqdSxlWzRdPWYqYy1oLGVbOF09cCpjK20sZVsxXT1sKmQsZVs1XT1tKmMrcCxlWzldPWgqYy1mLGVbMl09LWMsZVs2XT1hKmwsZVsxMF09cypsfWVsc2UgaWYoIllaWCI9PT10Lm9yZGVyKXtsZXQgcD1zKmwsaD1zKmMsZj1hKmwsbT1hKmM7ZVswXT1sKnUsZVs0XT1tLXAqZCxlWzhdPWYqZCtoLGVbMV09ZCxlWzVdPXMqdSxlWzldPS1hKnUsZVsyXT0tYyp1LGVbNl09aCpkK2YsZVsxMF09cC1tKmR9ZWxzZSBpZigiWFpZIj09PXQub3JkZXIpe2xldCBwPXMqbCxoPXMqYyxmPWEqbCxtPWEqYztlWzBdPWwqdSxlWzRdPS1kLGVbOF09Yyp1LGVbMV09cCpkK20sZVs1XT1zKnUsZVs5XT1oKmQtZixlWzJdPWYqZC1oLGVbNl09YSp1LGVbMTBdPW0qZCtwfXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UoUjVlLHQsTzVlKX1sb29rQXQodCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIFFhLnN1YlZlY3RvcnModCxlKSwwPT09UWEubGVuZ3RoU3EoKSYmKFFhLno9MSksUWEubm9ybWFsaXplKCksdmguY3Jvc3NWZWN0b3JzKGksUWEpLDA9PT12aC5sZW5ndGhTcSgpJiYoMT09PU1hdGguYWJzKGkueik/UWEueCs9MWUtNDpRYS56Kz0xZS00LFFhLm5vcm1hbGl6ZSgpLHZoLmNyb3NzVmVjdG9ycyhpLFFhKSksdmgubm9ybWFsaXplKCksVlIuY3Jvc3NWZWN0b3JzKFFhLHZoKSxyWzBdPXZoLngscls0XT1WUi54LHJbOF09UWEueCxyWzFdPXZoLnkscls1XT1WUi55LHJbOV09UWEueSxyWzJdPXZoLnoscls2XT1WUi56LHJbMTBdPVFhLnosdGhpc31tdWx0aXBseSh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LGUpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxzPWlbMF0sYT1pWzRdLGw9aVs4XSxjPWlbMTJdLHU9aVsxXSxkPWlbNV0scD1pWzldLGg9aVsxM10sZj1pWzJdLG09aVs2XSxDPWlbMTBdLF89aVsxNF0seT1pWzNdLEk9aVs3XSxBPWlbMTFdLE89aVsxNV0sZWU9clswXSxYPXJbNF0seGU9cls4XSxmZT1yWzEyXSx2ZT1yWzFdLFQ9cls1XSxuZT1yWzldLGxlPXJbMTNdLGhlPXJbMl0seWU9cls2XSxKPXJbMTBdLGFlPXJbMTRdLG1lPXJbM10samU9cls3XSxNZT1yWzExXSxGZT1yWzE1XTtyZXR1cm4gb1swXT1zKmVlK2EqdmUrbCpoZStjKm1lLG9bNF09cypYK2EqVCtsKnllK2MqamUsb1s4XT1zKnhlK2EqbmUrbCpKK2MqTWUsb1sxMl09cypmZSthKmxlK2wqYWUrYypGZSxvWzFdPXUqZWUrZCp2ZStwKmhlK2gqbWUsb1s1XT11KlgrZCpUK3AqeWUraCpqZSxvWzldPXUqeGUrZCpuZStwKkoraCpNZSxvWzEzXT11KmZlK2QqbGUrcCphZStoKkZlLG9bMl09ZiplZSttKnZlK0MqaGUrXyptZSxvWzZdPWYqWCttKlQrQyp5ZStfKmplLG9bMTBdPWYqeGUrbSpuZStDKkorXypNZSxvWzE0XT1mKmZlK20qbGUrQyphZStfKkZlLG9bM109eSplZStJKnZlK0EqaGUrTyptZSxvWzddPXkqWCtJKlQrQSp5ZStPKmplLG9bMTFdPXkqeGUrSSpuZStBKkorTypNZSxvWzE1XT15KmZlK0kqbGUrQSphZStPKkZlLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGQ9dFs2XSxwPXRbMTBdLGg9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqZC1yKmMqZC1vKmEqcCtpKmMqcCtyKmEqaC1pKmwqaCkrdFs3XSooK2UqbCpoLWUqYypwK28qcypwLXIqcypoK3IqYyp1LW8qbCp1KSt0WzExXSooK2UqYypkLWUqYSpoLW8qcypkK2kqcypoK28qYSp1LWkqYyp1KSt0WzE1XSooLXIqYSp1LWUqbCpkK2UqYSpwK3IqcypkLWkqcypwK2kqbCp1KX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGY9dFsxMl0sbT10WzEzXSxDPXRbMTRdLF89dFsxNV0seT1kKkMqYy1tKnAqYyttKmwqaC1hKkMqaC1kKmwqXythKnAqXyxJPWYqcCpjLXUqQypjLWYqbCpoK3MqQypoK3UqbCpfLXMqcCpfLEE9dSptKmMtZipkKmMrZiphKmgtcyptKmgtdSphKl8rcypkKl8sTz1mKmQqbC11Km0qbC1mKmEqcCtzKm0qcCt1KmEqQy1zKmQqQyxlZT1lKnkraSpJK3IqQStvKk87aWYoMD09PWVlKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgWD0xL2VlO3JldHVybiB0WzBdPXkqWCx0WzFdPShtKnAqby1kKkMqby1tKnIqaCtpKkMqaCtkKnIqXy1pKnAqXykqWCx0WzJdPShhKkMqby1tKmwqbyttKnIqYy1pKkMqYy1hKnIqXytpKmwqXykqWCx0WzNdPShkKmwqby1hKnAqby1kKnIqYytpKnAqYythKnIqaC1pKmwqaCkqWCx0WzRdPUkqWCx0WzVdPSh1KkMqby1mKnAqbytmKnIqaC1lKkMqaC11KnIqXytlKnAqXykqWCx0WzZdPShmKmwqby1zKkMqby1mKnIqYytlKkMqYytzKnIqXy1lKmwqXykqWCx0WzddPShzKnAqby11Kmwqbyt1KnIqYy1lKnAqYy1zKnIqaCtlKmwqaCkqWCx0WzhdPUEqWCx0WzldPShmKmQqby11Km0qby1mKmkqaCtlKm0qaCt1KmkqXy1lKmQqXykqWCx0WzEwXT0ocyptKm8tZiphKm8rZippKmMtZSptKmMtcyppKl8rZSphKl8pKlgsdFsxMV09KHUqYSpvLXMqZCpvLXUqaSpjK2UqZCpjK3MqaSpoLWUqYSpoKSpYLHRbMTJdPU8qWCx0WzEzXT0odSptKnItZipkKnIrZippKnAtZSptKnAtdSppKkMrZSpkKkMpKlgsdFsxNF09KGYqYSpyLXMqbSpyLWYqaSpsK2UqbSpsK3MqaSpDLWUqYSpDKSpYLHRbMTVdPShzKmQqci11KmEqcit1KmkqbC1lKmQqbC1zKmkqcCtlKmEqcCkqWCx0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyx1PW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCx1KmEraSx1KmwtcipzLDAsYypsLXIqYSx1KmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyx1PXMrcyxkPWErYSxwPW8qYyxoPW8qdSxmPW8qZCxtPXMqdSxDPXMqZCxfPWEqZCx5PWwqYyxJPWwqdSxBPWwqZCxPPWkueCxlZT1pLnksWD1pLno7cmV0dXJuIHJbMF09KDEtKG0rXykpKk8sclsxXT0oaCtBKSpPLHJbMl09KGYtSSkqTyxyWzNdPTAscls0XT0oaC1BKSplZSxyWzVdPSgxLShwK18pKSplZSxyWzZdPShDK3kpKmVlLHJbN109MCxyWzhdPShmK0kpKlgscls5XT0oQy15KSpYLHJbMTBdPSgxLShwK20pKSpYLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxvPVd2LnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCkscz1Xdi5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9V3Yuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihvPS1vKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxSYy5jb3B5KHRoaXMpO2xldCBjPTEvbyx1PTEvcyxkPTEvYTtyZXR1cm4gUmMuZWxlbWVudHNbMF0qPWMsUmMuZWxlbWVudHNbMV0qPWMsUmMuZWxlbWVudHNbMl0qPWMsUmMuZWxlbWVudHNbNF0qPXUsUmMuZWxlbWVudHNbNV0qPXUsUmMuZWxlbWVudHNbNl0qPXUsUmMuZWxlbWVudHNbOF0qPWQsUmMuZWxlbWVudHNbOV0qPWQsUmMuZWxlbWVudHNbMTBdKj1kLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KFJjKSxpLng9byxpLnk9cyxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLG8scyl7dm9pZCAwPT09cyYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxjPTIqby8oaS1yKSx1PShlK3QpLyhlLXQpLGQ9KGkrcikvKGktcikscD0tKHMrbykvKHMtbyksaD0tMipzKm8vKHMtbyk7cmV0dXJuIGFbMF09MipvLyhlLXQpLGFbNF09MCxhWzhdPXUsYVsxMl09MCxhWzFdPTAsYVs1XT1jLGFbOV09ZCxhWzEzXT0wLGFbMl09MCxhWzZdPTAsYVsxMF09cCxhWzE0XT1oLGFbM109MCxhWzddPTAsYVsxMV09LTEsYVsxNV09MCx0aGlzfW1ha2VPcnRob2dyYXBoaWModCxlLGkscixvLHMpe2xldCBhPXRoaXMuZWxlbWVudHMsbD0xLyhlLXQpLGM9MS8oaS1yKSx1PTEvKHMtbyksZD0oZSt0KSpsLHA9KGkrcikqYyxoPShzK28pKnU7cmV0dXJuIGFbMF09MipsLGFbNF09MCxhWzhdPTAsYVsxMl09LWQsYVsxXT0wLGFbNV09MipjLGFbOV09MCxhWzEzXT0tcCxhWzJdPTAsYVs2XT0wLGFbMTBdPS0yKnUsYVsxNF09LWgsYVszXT0wLGFbN109MCxhWzExXT0wLGFbMTVdPTEsdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjwxNjtyKyspaWYoZVtyXSE9PWlbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnJvbUFycmF5KHQsZT0wKXtmb3IobGV0IGk9MDtpPDE2O2krKyl0aGlzLmVsZW1lbnRzW2ldPXRbaStlXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0W2VdPWlbMF0sdFtlKzFdPWlbMV0sdFtlKzJdPWlbMl0sdFtlKzNdPWlbM10sdFtlKzRdPWlbNF0sdFtlKzVdPWlbNV0sdFtlKzZdPWlbNl0sdFtlKzddPWlbN10sdFtlKzhdPWlbOF0sdFtlKzldPWlbOV0sdFtlKzEwXT1pWzEwXSx0W2UrMTFdPWlbMTFdLHRbZSsxMl09aVsxMl0sdFtlKzEzXT1pWzEzXSx0W2UrMTRdPWlbMTRdLHRbZSsxNV09aVsxNV0sdH19O01uLnByb3RvdHlwZS5pc01hdHJpeDQ9ITA7dmFyIFd2PW5ldyAkLFJjPW5ldyBNbixSNWU9bmV3ICQoMCwwLDApLE81ZT1uZXcgJCgxLDEsMSksdmg9bmV3ICQsVlI9bmV3ICQsUWE9bmV3ICQsYWFlPW5ldyBNbixsYWU9bmV3IENzLFBoPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9UGguRGVmYXVsdE9yZGVyKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX29yZGVyKX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQuX3gsdGhpcy5feT10Ll95LHRoaXMuX3o9dC5feix0aGlzLl9vcmRlcj10Ll9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCxlPXRoaXMuX29yZGVyLGk9ITApe2xldCByPXQuZWxlbWVudHMsbz1yWzBdLHM9cls0XSxhPXJbOF0sbD1yWzFdLGM9cls1XSx1PXJbOV0sZD1yWzJdLHA9cls2XSxoPXJbMTBdO3N3aXRjaChlKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4oX2EoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxoKSx0aGlzLl96PU1hdGguYXRhbjIoLXMsbykpOih0aGlzLl94PU1hdGguYXRhbjIocCxjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtX2EodSwtMSwxKSksTWF0aC5hYnModSk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMihhLGgpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGMpKToodGhpcy5feT1NYXRoLmF0YW4yKC1kLG8pLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9TWF0aC5hc2luKF9hKHAsLTEsMSkpLE1hdGguYWJzKHApPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLWQsaCksdGhpcy5fej1NYXRoLmF0YW4yKC1zLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLV9hKGQsLTEsMSkpLE1hdGguYWJzKGQpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxoKSx0aGlzLl96PU1hdGguYXRhbjIobCxvKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLXMsYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihfYShsLC0xLDEpKSxNYXRoLmFicyhsKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGMpLHRoaXMuX3k9TWF0aC5hdGFuMigtZCxvKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoYSxoKSk7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3o9TWF0aC5hc2luKC1fYShzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKHAsYyksdGhpcy5feT1NYXRoLmF0YW4yKGEsbykpOih0aGlzLl94PU1hdGguYXRhbjIoLXUsaCksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLCEwPT09aSYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLGkpe3JldHVybiBhYWUubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5zZXRGcm9tUm90YXRpb25NYXRyaXgoYWFlLGUsaSl9c2V0RnJvbVZlY3RvcjModCxlPXRoaXMuX29yZGVyKXtyZXR1cm4gdGhpcy5zZXQodC54LHQueSx0LnosZSl9cmVvcmRlcih0KXtyZXR1cm4gbGFlLnNldEZyb21FdWxlcih0aGlzKSx0aGlzLnNldEZyb21RdWF0ZXJuaW9uKGxhZSx0KX1lcXVhbHModCl7cmV0dXJuIHQuX3g9PT10aGlzLl94JiZ0Ll95PT09dGhpcy5feSYmdC5fej09PXRoaXMuX3omJnQuX29yZGVyPT09dGhpcy5fb3JkZXJ9ZnJvbUFycmF5KHQpe3JldHVybiB0aGlzLl94PXRbMF0sdGhpcy5feT10WzFdLHRoaXMuX3o9dFsyXSx2b2lkIDAhPT10WzNdJiYodGhpcy5fb3JkZXI9dFszXSksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy5feCx0W2UrMV09dGhpcy5feSx0W2UrMl09dGhpcy5feix0W2UrM109dGhpcy5fb3JkZXIsdH10b1ZlY3RvcjModCl7cmV0dXJuIHQ/dC5zZXQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opOm5ldyAkKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07UGgucHJvdG90eXBlLmlzRXVsZXI9ITAsUGguRGVmYXVsdE9yZGVyPSJYWVoiLFBoLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIF8yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxrNWU9MCxjYWU9bmV3ICQscXY9bmV3IENzLE5kPW5ldyBNbixIUj1uZXcgJCxsTT1uZXcgJCxGNWU9bmV3ICQsTjVlPW5ldyBDcyx1YWU9bmV3ICQoMSwwLDApLGRhZT1uZXcgJCgwLDEsMCkscGFlPW5ldyAkKDAsMCwxKSxMNWU9e3R5cGU6ImFkZGVkIn0saGFlPXt0eXBlOiJyZW1vdmVkIn0sR2k9Y2xhc3MgZXh0ZW5kcyBIZHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6azVlKyt9KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJPYmplY3QzRCIsdGhpcy5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuPVtdLHRoaXMudXA9R2kuRGVmYXVsdFVwLmNsb25lKCk7bGV0IHQ9bmV3ICQsZT1uZXcgUGgsaT1uZXcgQ3Mscj1uZXcgJCgxLDEsMSk7ZS5fb25DaGFuZ2UoZnVuY3Rpb24oKXtpLnNldEZyb21FdWxlcihlLCExKX0pLGkuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBNbn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgUG99fSksdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMubWF0cml4V29ybGQ9bmV3IE1uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT1HaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IF8yLHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319b25CZWZvcmVSZW5kZXIoKXt9b25BZnRlclJlbmRlcigpe31hcHBseU1hdHJpeDQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX1hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0KSx0aGlzfXNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZSh0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9c2V0Um90YXRpb25Gcm9tRXVsZXIodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX1zZXRSb3RhdGlvbkZyb21NYXRyaXgodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KX1zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfXJvdGF0ZU9uQXhpcyh0LGUpe3JldHVybiBxdi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KHF2KSx0aGlzfXJvdGF0ZU9uV29ybGRBeGlzKHQsZSl7cmV0dXJuIHF2LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXModWFlLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGRhZSx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhwYWUsdCl9dHJhbnNsYXRlT25BeGlzKHQsZSl7cmV0dXJuIGNhZS5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGNhZS5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh1YWUsdCl9dHJhbnNsYXRlWSh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoZGFlLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHBhZSx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9IUi5jb3B5KHQpOkhSLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksbE0uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9OZC5sb29rQXQobE0sSFIsdGhpcy51cCk6TmQubG9va0F0KEhSLGxNLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoTmQpLHImJihOZC5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCkscXYuc2V0RnJvbVJvdGF0aW9uTWF0cml4KE5kKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkocXYuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChMNWUpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7cmV0dXJuIHRoaXN9bGV0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoaGFlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIG51bGwhPT10JiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCBlPXRoaXMuY2hpbGRyZW5bdF07ZS5wYXJlbnQ9bnVsbCxlLmRpc3BhdGNoRXZlbnQoaGFlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksTmQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChOZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSx0LEY1ZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShsTSxONWUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksdT1zKHQuaW1hZ2VzKSxkPXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksaD1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGQubGVuZ3RoPjAmJihpLnNoYXBlcz1kKSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksaC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1oKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07R2kuRGVmYXVsdFVwPW5ldyAkKDAsMSwwKSxHaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMCxHaS5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgT2M9bmV3ICQsTGQ9bmV3ICQsSzQ9bmV3ICQsQmQ9bmV3ICQsWXY9bmV3ICQsWHY9bmV3ICQsZmFlPW5ldyAkLFo0PW5ldyAkLEo0PW5ldyAkLCQ0PW5ldyAkLEtyPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXt0aGlzLmE9dCx0aGlzLmI9ZSx0aGlzLmM9aX1zdGF0aWMgZ2V0Tm9ybWFsKHQsZSxpLHIpe3Iuc3ViVmVjdG9ycyhpLGUpLE9jLnN1YlZlY3RvcnModCxlKSxyLmNyb3NzKE9jKTtsZXQgbz1yLmxlbmd0aFNxKCk7cmV0dXJuIG8+MD9yLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KG8pKTpyLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LGUsaSxyLG8pe09jLnN1YlZlY3RvcnMocixlKSxMZC5zdWJWZWN0b3JzKGksZSksSzQuc3ViVmVjdG9ycyh0LGUpO2xldCBzPU9jLmRvdChPYyksYT1PYy5kb3QoTGQpLGw9T2MuZG90KEs0KSxjPUxkLmRvdChMZCksdT1MZC5kb3QoSzQpLGQ9cypjLWEqYTtpZigwPT09ZClyZXR1cm4gby5zZXQoLTIsLTEsLTEpO2xldCBwPTEvZCxoPShjKmwtYSp1KSpwLGY9KHMqdS1hKmwpKnA7cmV0dXJuIG8uc2V0KDEtaC1mLGYsaCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxlLGkscil7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQsZSxpLHIsQmQpLEJkLng+PTAmJkJkLnk+PTAmJkJkLngrQmQueTw9MX1zdGF0aWMgZ2V0VVYodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixCZCksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihvLEJkLngpLGwuYWRkU2NhbGVkVmVjdG9yKHMsQmQueSksbC5hZGRTY2FsZWRWZWN0b3IoYSxCZC56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQsZSxpLHIpe3JldHVybiBPYy5zdWJWZWN0b3JzKGksZSksTGQuc3ViVmVjdG9ycyh0LGUpLE9jLmNyb3NzKExkKS5kb3Qocik8MH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShlKSx0aGlzLmMuY29weShpKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuY29weSh0W2VdKSx0aGlzLmIuY29weSh0W2ldKSx0aGlzLmMuY29weSh0W3JdKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQsZSxpLHIpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsaSksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBPYy5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLExkLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksLjUqT2MuY3Jvc3MoTGQpLmxlbmd0aCgpfWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIEtyLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiBLci5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlKX1nZXRVVih0LGUsaSxyLG8pe3JldHVybiBLci5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsaSxyLG8pfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIEtyLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gS3IuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7bGV0IHMsYSxpPXRoaXMuYSxyPXRoaXMuYixvPXRoaXMuYztZdi5zdWJWZWN0b3JzKHIsaSksWHYuc3ViVmVjdG9ycyhvLGkpLFo0LnN1YlZlY3RvcnModCxpKTtsZXQgbD1Zdi5kb3QoWjQpLGM9WHYuZG90KFo0KTtpZihsPD0wJiZjPD0wKXJldHVybiBlLmNvcHkoaSk7SjQuc3ViVmVjdG9ycyh0LHIpO2xldCB1PVl2LmRvdChKNCksZD1Ydi5kb3QoSjQpO2lmKHU+PTAmJmQ8PXUpcmV0dXJuIGUuY29weShyKTtsZXQgcD1sKmQtdSpjO2lmKHA8PTAmJmw+PTAmJnU8PTApcmV0dXJuIHM9bC8obC11KSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpOyQ0LnN1YlZlY3RvcnModCxvKTtsZXQgaD1Zdi5kb3QoJDQpLGY9WHYuZG90KCQ0KTtpZihmPj0wJiZoPD1mKXJldHVybiBlLmNvcHkobyk7bGV0IG09aCpjLWwqZjtpZihtPD0wJiZjPj0wJiZmPD0wKXJldHVybiBhPWMvKGMtZiksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihYdixhKTtsZXQgQz11KmYtaCpkO2lmKEM8PTAmJmQtdT49MCYmaC1mPj0wKXJldHVybiBmYWUuc3ViVmVjdG9ycyhvLHIpLGE9KGQtdSkvKGQtdSsoaC1mKSksZS5jb3B5KHIpLmFkZFNjYWxlZFZlY3RvcihmYWUsYSk7bGV0IF89MS8oQyttK3ApO3JldHVybiBzPW0qXyxhPXAqXyxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKFl2LHMpLmFkZFNjYWxlZFZlY3RvcihYdixhKX1lcXVhbHModCl7cmV0dXJuIHQuYS5lcXVhbHModGhpcy5hKSYmdC5iLmVxdWFscyh0aGlzLmIpJiZ0LmMuZXF1YWxzKHRoaXMuYyl9fSxCNWU9MCxYbz1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpCNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik1hdGVyaWFsIix0aGlzLmZvZz0hMCx0aGlzLmJsZW5kaW5nPTEsdGhpcy5zaWRlPTAsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPTIwNCx0aGlzLmJsZW5kRHN0PTIwNSx0aGlzLmJsZW5kRXF1YXRpb249MTAwLHRoaXMuYmxlbmRTcmNBbHBoYT1udWxsLHRoaXMuYmxlbmREc3RBbHBoYT1udWxsLHRoaXMuYmxlbmRFcXVhdGlvbkFscGhhPW51bGwsdGhpcy5kZXB0aEZ1bmM9Myx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPTUxOSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD03NjgwLHRoaXMuc3RlbmNpbFpGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWlBhc3M9NzY4MCx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih2b2lkIDAhPT10KWZvcihsZXQgZSBpbiB0KXtsZXQgaT10W2VdO2lmKHZvaWQgMD09PWkpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK2UrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZigic2hhZGluZyI9PT1lKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPTE9PT1pO2NvbnRpbnVlfWxldCByPXRoaXNbZV07dm9pZCAwIT09cj9yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWk6Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAnIitlKyInIGlzIG5vdCBhIHByb3BlcnR5IG9mIHRoaXMgbWF0ZXJpYWwuIil9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQ7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2Z1bmN0aW9uIHIobyl7bGV0IHM9W107Zm9yKGxldCBhIGluIG8pe2xldCBsPW9bYV07ZGVsZXRlIGwubWV0YWRhdGEscy5wdXNoKGwpfXJldHVybiBzfWlmKGkudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5yb3VnaG5lc3MmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdm9pZCAwIT09dGhpcy5tZXRhbG5lc3MmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdm9pZCAwIT09dGhpcy5zaGVlbiYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hlZW5Sb3VnaG5lc3MmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmMSE9PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zcGVjdWxhckludGVuc2l0eSYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2hpbmluZXNzJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0JiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHZvaWQgMCE9PXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHZvaWQgMCE9PXRoaXMuY29tYmluZSYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx2b2lkIDAhPT10aGlzLmVudk1hcEludGVuc2l0eSYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx2b2lkIDAhPT10aGlzLnJlZmxlY3Rpdml0eSYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx2b2lkIDAhPT10aGlzLnJlZnJhY3Rpb25SYXRpbyYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy50cmFuc21pc3Npb24mJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRoaWNrbmVzcyYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHZvaWQgMCE9PXRoaXMuYXR0ZW51YXRpb25Db2xvciYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuc2l6ZSYmKGkuc2l6ZT10aGlzLnNpemUpLG51bGwhPT10aGlzLnNoYWRvd1NpZGUmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx2b2lkIDAhPT10aGlzLnNpemVBdHRlbnVhdGlvbiYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSwxIT09dGhpcy5ibGVuZGluZyYmKGkuYmxlbmRpbmc9dGhpcy5ibGVuZGluZyksMCE9PXRoaXMuc2lkZSYmKGkuc2lkZT10aGlzLnNpZGUpLHRoaXMudmVydGV4Q29sb3JzJiYoaS52ZXJ0ZXhDb2xvcnM9ITApLHRoaXMub3BhY2l0eTwxJiYoaS5vcGFjaXR5PXRoaXMub3BhY2l0eSksITA9PT10aGlzLnRyYW5zcGFyZW50JiYoaS50cmFuc3BhcmVudD10aGlzLnRyYW5zcGFyZW50KSxpLmRlcHRoRnVuYz10aGlzLmRlcHRoRnVuYyxpLmRlcHRoVGVzdD10aGlzLmRlcHRoVGVzdCxpLmRlcHRoV3JpdGU9dGhpcy5kZXB0aFdyaXRlLGkuY29sb3JXcml0ZT10aGlzLmNvbG9yV3JpdGUsaS5hbHBoYVdyaXRlPXRoaXMuYWxwaGFXcml0ZSxpLnN0ZW5jaWxXcml0ZT10aGlzLnN0ZW5jaWxXcml0ZSxpLnN0ZW5jaWxXcml0ZU1hc2s9dGhpcy5zdGVuY2lsV3JpdGVNYXNrLGkuc3RlbmNpbEZ1bmM9dGhpcy5zdGVuY2lsRnVuYyxpLnN0ZW5jaWxSZWY9dGhpcy5zdGVuY2lsUmVmLGkuc3RlbmNpbEZ1bmNNYXNrPXRoaXMuc3RlbmNpbEZ1bmNNYXNrLGkuc3RlbmNpbEZhaWw9dGhpcy5zdGVuY2lsRmFpbCxpLnN0ZW5jaWxaRmFpbD10aGlzLnN0ZW5jaWxaRmFpbCxpLnN0ZW5jaWxaUGFzcz10aGlzLnN0ZW5jaWxaUGFzcyx0aGlzLnJvdGF0aW9uJiYwIT09dGhpcy5yb3RhdGlvbiYmKGkucm90YXRpb249dGhpcy5yb3RhdGlvbiksITA9PT10aGlzLnBvbHlnb25PZmZzZXQmJihpLnBvbHlnb25PZmZzZXQ9ITApLDAhPT10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3ImJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yKSwwIT09dGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHMmJihpLnBvbHlnb25PZmZzZXRVbml0cz10aGlzLnBvbHlnb25PZmZzZXRVbml0cyksdGhpcy5saW5ld2lkdGgmJjEhPT10aGlzLmxpbmV3aWR0aCYmKGkubGluZXdpZHRoPXRoaXMubGluZXdpZHRoKSx2b2lkIDAhPT10aGlzLmRhc2hTaXplJiYoaS5kYXNoU2l6ZT10aGlzLmRhc2hTaXplKSx2b2lkIDAhPT10aGlzLmdhcFNpemUmJihpLmdhcFNpemU9dGhpcy5nYXBTaXplKSx2b2lkIDAhPT10aGlzLnNjYWxlJiYoaS5zY2FsZT10aGlzLnNjYWxlKSwhMD09PXRoaXMuZGl0aGVyaW5nJiYoaS5kaXRoZXJpbmc9ITApLHRoaXMuYWxwaGFUZXN0PjAmJihpLmFscGhhVGVzdD10aGlzLmFscGhhVGVzdCksITA9PT10aGlzLmFscGhhVG9Db3ZlcmFnZSYmKGkuYWxwaGFUb0NvdmVyYWdlPXRoaXMuYWxwaGFUb0NvdmVyYWdlKSwhMD09PXRoaXMucHJlbXVsdGlwbGllZEFscGhhJiYoaS5wcmVtdWx0aXBsaWVkQWxwaGE9dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEpLCEwPT09dGhpcy53aXJlZnJhbWUmJihpLndpcmVmcmFtZT10aGlzLndpcmVmcmFtZSksdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg+MSYmKGkud2lyZWZyYW1lTGluZXdpZHRoPXRoaXMud2lyZWZyYW1lTGluZXdpZHRoKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lY2FwJiYoaS53aXJlZnJhbWVMaW5lY2FwPXRoaXMud2lyZWZyYW1lTGluZWNhcCksInJvdW5kIiE9PXRoaXMud2lyZWZyYW1lTGluZWpvaW4mJihpLndpcmVmcmFtZUxpbmVqb2luPXRoaXMud2lyZWZyYW1lTGluZWpvaW4pLCEwPT09dGhpcy5mbGF0U2hhZGluZyYmKGkuZmxhdFNoYWRpbmc9dGhpcy5mbGF0U2hhZGluZyksITE9PT10aGlzLnZpc2libGUmJihpLnZpc2libGU9ITEpLCExPT09dGhpcy50b25lTWFwcGVkJiYoaS50b25lTWFwcGVkPSExKSwie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGUpe2xldCBvPXIodC50ZXh0dXJlcykscz1yKHQuaW1hZ2VzKTtvLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1vKSxzLmxlbmd0aD4wJiYoaS5pbWFnZXM9cyl9cmV0dXJuIGl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgZT10LmNsaXBwaW5nUGxhbmVzLGk9bnVsbDtpZihudWxsIT09ZSl7bGV0IHI9ZS5sZW5ndGg7aT1uZXcgQXJyYXkocik7Zm9yKGxldCBvPTA7byE9PXI7KytvKWlbb109ZVtvXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPWksdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O1hvLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBLbT1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTtLbS5wcm90b3R5cGUuaXNNZXNoQmFzaWNNYXRlcmlhbD0hMDt2YXIgZnI9bmV3ICQsVVI9bmV3IEplLExyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9TU0sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgYW4pLGVbaSsrXT1zLnIsZVtpKytdPXMuZyxlW2krK109cy5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgSmUpLGVbaSsrXT1zLngsZVtpKytdPXMueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3ICQpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56fXJldHVybiB0aGlzfWNvcHlWZWN0b3I0c0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjRzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgdHIpLGVbaSsrXT1zLngsZVtpKytdPXMueSxlW2krK109cy56LGVbaSsrXT1zLnd9cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXgzKHQpe2lmKDI9PT10aGlzLml0ZW1TaXplKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKVVSLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxVUi5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWShlLFVSLngsVVIueSk7ZWxzZSBpZigzPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksZnIuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFlaKGUsZnIueCxmci55LGZyLnopO3JldHVybiB0aGlzfWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylmci54PXRoaXMuZ2V0WChlKSxmci55PXRoaXMuZ2V0WShlKSxmci56PXRoaXMuZ2V0WihlKSxmci5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspZnIueD10aGlzLmdldFgoZSksZnIueT10aGlzLmdldFkoZSksZnIuej10aGlzLmdldFooZSksZnIuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxmci54LGZyLnksZnIueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKWZyLng9dGhpcy5nZXRYKGUpLGZyLnk9dGhpcy5nZXRZKGUpLGZyLno9dGhpcy5nZXRaKGUpLGZyLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLGZyLngsZnIueSxmci56KTtyZXR1cm4gdGhpc31zZXQodCxlPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LGUpLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdfXNldFgodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemVdPWUsdGhpc31nZXRZKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXX1zZXRZKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdPWUsdGhpc31nZXRaKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXX1zZXRaKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdPWUsdGhpc31nZXRXKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXX1zZXRXKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdPWUsdGhpc31zZXRYWSh0LGUsaSl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIsbyl7cmV0dXJuIHRoaXMuYXJyYXlbMCsodCo9dGhpcy5pdGVtU2l6ZSldPWUsdGhpcy5hcnJheVt0KzFdPWksdGhpcy5hcnJheVt0KzJdPXIsdGhpcy5hcnJheVt0KzNdPW8sdGhpc31vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmFycmF5LHRoaXMuaXRlbVNpemUpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e2l0ZW1TaXplOnRoaXMuaXRlbVNpemUsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5hcnJheSksbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9O3JldHVybiIiIT09dGhpcy5uYW1lJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PU1NJiYodC51c2FnZT10aGlzLnVzYWdlKSwoMCE9PXRoaXMudXBkYXRlUmFuZ2Uub2Zmc2V0fHwtMSE9PXRoaXMudXBkYXRlUmFuZ2UuY291bnQpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07THIucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciB2Mj1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19LHkyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MzJBcnJheSh0KSxlLGkpfX07KGNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX0pLnByb3RvdHlwZS5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdyPWNsYXNzIGV4dGVuZHMgTHJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBGbG9hdDMyQXJyYXkodCksZSxpKX19LFY1ZT0wLGtsPW5ldyBNbixlVT1uZXcgR2ksUXY9bmV3ICQsS2E9bmV3IEphLGNNPW5ldyBKYSxZbz1uZXcgJCxLaT1jbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpWNWUrK30pLHRoaXMudXVpZD1GYygpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhtbGUodCk/eTI6djIpKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgUG8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4ga2wubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31yb3RhdGVZKHQpe3JldHVybiBrbC5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KGtsKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIGtsLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4ga2wubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChrbCksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIGtsLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQoa2wpLHRoaXN9bG9va0F0KHQpe3JldHVybiBlVS5sb29rQXQodCksZVUudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoZVUubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKFF2KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShRdi54LFF2LnksUXYueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgSmEpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3ICQoLTEvMCwtMS8wLC0xLzApLG5ldyAkKDEvMCwxLzAsMS8wKSk7aWYodm9pZCAwIT09dCl7aWYodGhpcy5ib3VuZGluZ0JveC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKUthLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtpXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1pbixLYS5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbyksWW8uYWRkVmVjdG9ycyh0aGlzLmJvdW5kaW5nQm94Lm1heCxLYS5tYXgpLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChZbykpOih0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoS2EubWF4KSl9ZWxzZSB0aGlzLmJvdW5kaW5nQm94Lm1ha2VFbXB0eSgpOyhpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi54KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueSl8fGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLnopKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IENvbXB1dGVkIG1pbi9tYXggaGF2ZSBOYU4gdmFsdWVzLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfWNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpe251bGw9PT10aGlzLmJvdW5kaW5nU3BoZXJlJiYodGhpcy5ib3VuZGluZ1NwaGVyZT1uZXcgQWgpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIHNwaGVyZS4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3ICQsMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihLYS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAscz1lLmxlbmd0aDtvPHM7bysrKWNNLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8oWW8uYWRkVmVjdG9ycyhLYS5taW4sY00ubWluKSxLYS5leHBhbmRCeVBvaW50KFlvKSxZby5hZGRWZWN0b3JzKEthLm1heCxjTS5tYXgpLEthLmV4cGFuZEJ5UG9pbnQoWW8pKTooS2EuZXhwYW5kQnlQb2ludChjTS5taW4pLEthLmV4cGFuZEJ5UG9pbnQoY00ubWF4KSk7S2EuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10LmNvdW50O288cztvKyspWW8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSk7aWYoZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspe2xldCBhPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9YS5jb3VudDtjPHU7YysrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxsJiYoUXYuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLFlvLmFkZChRdikpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKFlvKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXkscz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgTHIobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgdmU9MDt2ZTxhO3ZlKyspY1t2ZV09bmV3ICQsdVt2ZV09bmV3ICQ7bGV0IGQ9bmV3ICQscD1uZXcgJCxoPW5ldyAkLGY9bmV3IEplLG09bmV3IEplLEM9bmV3IEplLF89bmV3ICQseT1uZXcgJDtmdW5jdGlvbiBJKHZlLFQsbmUpe2QuZnJvbUFycmF5KHIsMyp2ZSkscC5mcm9tQXJyYXkociwzKlQpLGguZnJvbUFycmF5KHIsMypuZSksZi5mcm9tQXJyYXkocywyKnZlKSxtLmZyb21BcnJheShzLDIqVCksQy5mcm9tQXJyYXkocywyKm5lKSxwLnN1YihkKSxoLnN1YihkKSxtLnN1YihmKSxDLnN1YihmKTtsZXQgbGU9MS8obS54KkMueS1DLngqbS55KTshaXNGaW5pdGUobGUpfHwoXy5jb3B5KHApLm11bHRpcGx5U2NhbGFyKEMueSkuYWRkU2NhbGVkVmVjdG9yKGgsLW0ueSkubXVsdGlwbHlTY2FsYXIobGUpLHkuY29weShoKS5tdWx0aXBseVNjYWxhcihtLngpLmFkZFNjYWxlZFZlY3RvcihwLC1DLngpLm11bHRpcGx5U2NhbGFyKGxlKSxjW3ZlXS5hZGQoXyksY1tUXS5hZGQoXyksY1tuZV0uYWRkKF8pLHVbdmVdLmFkZCh5KSx1W1RdLmFkZCh5KSx1W25lXS5hZGQoeSkpfWxldCBBPXRoaXMuZ3JvdXBzOzA9PT1BLmxlbmd0aCYmKEE9W3tzdGFydDowLGNvdW50OmkubGVuZ3RofV0pO2ZvcihsZXQgdmU9MCxUPUEubGVuZ3RoO3ZlPFQ7Kyt2ZSl7bGV0IG5lPUFbdmVdLGxlPW5lLnN0YXJ0O2ZvcihsZXQgeWU9bGUsSj1sZStuZS5jb3VudDt5ZTxKO3llKz0zKUkoaVt5ZSswXSxpW3llKzFdLGlbeWUrMl0pfWxldCBPPW5ldyAkLGVlPW5ldyAkLFg9bmV3ICQseGU9bmV3ICQ7ZnVuY3Rpb24gZmUodmUpe1guZnJvbUFycmF5KG8sMyp2ZSkseGUuY29weShYKTtsZXQgVD1jW3ZlXTtPLmNvcHkoVCksTy5zdWIoWC5tdWx0aXBseVNjYWxhcihYLmRvdChUKSkpLm5vcm1hbGl6ZSgpLGVlLmNyb3NzVmVjdG9ycyh4ZSxUKTtsZXQgbGU9ZWUuZG90KHVbdmVdKTwwPy0xOjE7bFs0KnZlXT1PLngsbFs0KnZlKzFdPU8ueSxsWzQqdmUrMl09Ty56LGxbNCp2ZSszXT1sZX1mb3IobGV0IHZlPTAsVD1BLmxlbmd0aDt2ZTxUOysrdmUpe2xldCBuZT1BW3ZlXSxsZT1uZS5zdGFydDtmb3IobGV0IHllPWxlLEo9bGUrbmUuY291bnQ7eWU8Sjt5ZSs9MylmZShpW3llKzBdKSxmZShpW3llKzFdKSxmZShpW3llKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgTHIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsaD1pLmNvdW50O3A8aDtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3ICQsbz1uZXcgJCxzPW5ldyAkLGE9bmV3ICQsbD1uZXcgJCxjPW5ldyAkLHU9bmV3ICQsZD1uZXcgJDtpZih0KWZvcihsZXQgcD0wLGg9dC5jb3VudDtwPGg7cCs9Myl7bGV0IGY9dC5nZXRYKHArMCksbT10LmdldFgocCsxKSxDPXQuZ2V0WChwKzIpO3IuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLG0pLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLEMpLHUuc3ViVmVjdG9ycyhzLG8pLGQuc3ViVmVjdG9ycyhyLG8pLHUuY3Jvc3MoZCksYS5mcm9tQnVmZmVyQXR0cmlidXRlKGksZiksbC5mcm9tQnVmZmVyQXR0cmlidXRlKGksbSksYy5mcm9tQnVmZmVyQXR0cmlidXRlKGksQyksYS5hZGQodSksbC5hZGQodSksYy5hZGQodSksaS5zZXRYWVooZixhLngsYS55LGEueiksaS5zZXRYWVoobSxsLngsbC55LGwueiksaS5zZXRYWVooQyxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IHA9MCxoPWUuY291bnQ7cDxoO3ArPTMpci5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzEpLHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMiksdS5zdWJWZWN0b3JzKHMsbyksZC5zdWJWZWN0b3JzKHIsbyksdS5jcm9zcyhkKSxpLnNldFhZWihwKzAsdS54LHUueSx1LnopLGkuc2V0WFlaKHArMSx1LngsdS55LHUueiksaS5zZXRYWVoocCsyLHUueCx1LnksdS56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxpLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LGUpe2lmKCF0fHwhdC5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3ZvaWQgMD09PWUmJihlPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgciBpbiBpKXtpZih2b2lkIDA9PT10LmF0dHJpYnV0ZXNbcl0pY29udGludWU7bGV0IHM9aVtyXS5hcnJheSxhPXQuYXR0cmlidXRlc1tyXSxsPWEuYXJyYXksYz1hLml0ZW1TaXplKmUsdT1NYXRoLm1pbihsLmxlbmd0aCxzLmxlbmd0aC1jKTtmb3IobGV0IGQ9MCxwPWM7ZDx1O2QrKyxwKyspc1twXT1sW2RdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgZT0wLGk9dC5jb3VudDtlPGk7ZSsrKVlvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxlKSxZby5ub3JtYWxpemUoKSx0LnNldFhZWihlLFlvLngsWW8ueSxZby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KGEsbCl7bGV0IGM9YS5hcnJheSx1PWEuaXRlbVNpemUsZD1hLm5vcm1hbGl6ZWQscD1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCp1KSxoPTAsZj0wO2ZvcihsZXQgbT0wLEM9bC5sZW5ndGg7bTxDO20rKyl7aD1hLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/bFttXSphLmRhdGEuc3RyaWRlK2Eub2Zmc2V0OmxbbV0qdTtmb3IobGV0IF89MDtfPHU7XysrKXBbZisrXT1jW2grK119cmV0dXJuIG5ldyBMcihwLHUsZCl9aWYobnVsbD09PXRoaXMuaW5kZXgpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgS2ksaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgYz10KHJbYV0saSk7ZS5zZXRBdHRyaWJ1dGUoYSxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGEgaW4gbyl7bGV0IGw9W10sYz1vW2FdO2ZvcihsZXQgdT0wLGQ9Yy5sZW5ndGg7dTxkO3UrKyl7bGV0IGg9dChjW3VdLGkpO2wucHVzaChoKX1lLm1vcnBoQXR0cmlidXRlc1thXT1sfWUubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtsZXQgcz10aGlzLmdyb3Vwcztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2E8bDthKyspe2xldCBjPXNbYV07ZS5hZGRHcm91cChjLnN0YXJ0LGMuY291bnQsYy5tYXRlcmlhbEluZGV4KX1yZXR1cm4gZX10b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkJ1ZmZlckdlb21ldHJ5IixnZW5lcmF0b3I6IkJ1ZmZlckdlb21ldHJ5LnRvSlNPTiJ9fTtpZih0LnV1aWQ9dGhpcy51dWlkLHQudHlwZT10aGlzLnR5cGUsIiIhPT10aGlzLm5hbWUmJih0Lm5hbWU9dGhpcy5uYW1lKSxPYmplY3Qua2V5cyh0aGlzLnVzZXJEYXRhKS5sZW5ndGg+MCYmKHQudXNlckRhdGE9dGhpcy51c2VyRGF0YSksdm9pZCAwIT09dGhpcy5wYXJhbWV0ZXJzKXtsZXQgbD10aGlzLnBhcmFtZXRlcnM7Zm9yKGxldCBjIGluIGwpdm9pZCAwIT09bFtjXSYmKHRbY109bFtjXSk7cmV0dXJuIHR9dC5kYXRhPXthdHRyaWJ1dGVzOnt9fTtsZXQgZT10aGlzLmluZGV4O251bGwhPT1lJiYodC5kYXRhLmluZGV4PXt0eXBlOmUuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFycmF5KX0pO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGwgaW4gaSl0LmRhdGEuYXR0cmlidXRlc1tsXT1pW2xdLnRvSlNPTih0LmRhdGEpO2xldCByPXt9LG89ITE7Zm9yKGxldCBsIGluIHRoaXMubW9ycGhBdHRyaWJ1dGVzKXtsZXQgYz10aGlzLm1vcnBoQXR0cmlidXRlc1tsXSx1PVtdO2ZvcihsZXQgZD0wLHA9Yy5sZW5ndGg7ZDxwO2QrKyl1LnB1c2goY1tkXS50b0pTT04odC5kYXRhKSk7dS5sZW5ndGg+MCYmKHJbbF09dSxvPSEwKX1vJiYodC5kYXRhLm1vcnBoQXR0cmlidXRlcz1yLHQuZGF0YS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlKTtsZXQgcz10aGlzLmdyb3VwcztzLmxlbmd0aD4wJiYodC5kYXRhLmdyb3Vwcz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHMpKSk7bGV0IGE9dGhpcy5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWEmJih0LmRhdGEuYm91bmRpbmdTcGhlcmU9e2NlbnRlcjphLmNlbnRlci50b0FycmF5KCkscmFkaXVzOmEucmFkaXVzfSksdH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7bnVsbCE9PWkmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXRoaXMuc2V0QXR0cmlidXRlKGMscltjXS5jbG9uZShlKSk7bGV0IG89dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIG8pe2xldCB1PVtdLGQ9b1tjXTtmb3IobGV0IHA9MCxoPWQubGVuZ3RoO3A8aDtwKyspdS5wdXNoKGRbcF0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPXV9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrKyl7bGV0IGQ9c1tjXTt0aGlzLmFkZEdyb3VwKGQuc3RhcnQsZC5jb3VudCxkLm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7bnVsbCE9PWEmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbnVsbCE9PWwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHZvaWQgMCE9PXQucGFyYW1ldGVycyYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O0tpLnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBtYWU9bmV3IE1uLEt2PW5ldyBJaCx0VT1uZXcgQWgseWg9bmV3ICQsYmg9bmV3ICQseGg9bmV3ICQsblU9bmV3ICQsaVU9bmV3ICQsclU9bmV3ICQselI9bmV3ICQsalI9bmV3ICQsR1I9bmV3ICQsV1I9bmV3IEplLHFSPW5ldyBKZSxZUj1uZXcgSmUsb1U9bmV3ICQsWFI9bmV3ICQseW89Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBLbSl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2giLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzJiYodGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9dC5tb3JwaFRhcmdldEluZmx1ZW5jZXMuc2xpY2UoKSksdm9pZCAwIT09dC5tb3JwaFRhcmdldERpY3Rpb25hcnkmJih0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT1PYmplY3QuYXNzaWduKHt9LHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5KSksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fXJheWNhc3QodCxlKXtsZXQgcyxpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdGVyaWFsLG89dGhpcy5tYXRyaXhXb3JsZDtpZih2b2lkIDAhPT1yJiYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdFUuY29weShpLmJvdW5kaW5nU3BoZXJlKSx0VS5hcHBseU1hdHJpeDQobyksITEhPT10LnJheS5pbnRlcnNlY3RzU3BoZXJlKHRVKSkmJihtYWUuY29weShvKS5pbnZlcnQoKSxLdi5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQobWFlKSxudWxsPT09aS5ib3VuZGluZ0JveHx8ITEhPT1Ldi5pbnRlcnNlY3RzQm94KGkuYm91bmRpbmdCb3gpKSlpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBhPWkuaW5kZXgsbD1pLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1pLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PWkubW9ycGhUYXJnZXRzUmVsYXRpdmUsZD1pLmF0dHJpYnV0ZXMudXYscD1pLmF0dHJpYnV0ZXMudXYyLGg9aS5ncm91cHMsZj1pLmRyYXdSYW5nZTtpZihudWxsIT09YSlpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbT0wLEM9aC5sZW5ndGg7bTxDO20rKyl7bGV0IF89aFttXSx5PXJbXy5tYXRlcmlhbEluZGV4XTtmb3IobGV0IE89TWF0aC5tYXgoXy5zdGFydCxmLnN0YXJ0KSxlZT1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKF8uc3RhcnQrXy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtPPGVlO08rPTMpe2xldCBYPWEuZ2V0WChPKSx4ZT1hLmdldFgoTysxKSxmZT1hLmdldFgoTysyKTtzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxYLHhlLGZlKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihPLzMpLHMuZmFjZS5tYXRlcmlhbEluZGV4PV8ubWF0ZXJpYWxJbmRleCxlLnB1c2gocykpfX1lbHNlIGZvcihsZXQgXz1NYXRoLm1heCgwLGYuc3RhcnQpLHk9TWF0aC5taW4oYS5jb3VudCxmLnN0YXJ0K2YuY291bnQpO188eTtfKz0zKXtsZXQgST1hLmdldFgoXyksQT1hLmdldFgoXysxKSxPPWEuZ2V0WChfKzIpO3M9UVIodGhpcyxyLHQsS3YsbCxjLHUsZCxwLEksQSxPKSxzJiYocy5mYWNlSW5kZXg9TWF0aC5mbG9vcihfLzMpLGUucHVzaChzKSl9ZWxzZSBpZih2b2lkIDAhPT1sKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBtPTAsQz1oLmxlbmd0aDttPEM7bSsrKXtsZXQgXz1oW21dLHk9cltfLm1hdGVyaWFsSW5kZXhdO2ZvcihsZXQgTz1NYXRoLm1heChfLnN0YXJ0LGYuc3RhcnQpLGVlPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oXy5zdGFydCtfLmNvdW50LGYuc3RhcnQrZi5jb3VudCkpO088ZWU7Tys9MylzPVFSKHRoaXMseSx0LEt2LGwsYyx1LGQscCxPLE8rMSxPKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKE8vMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Xy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IF89TWF0aC5tYXgoMCxmLnN0YXJ0KSx5PU1hdGgubWluKGwuY291bnQsZi5zdGFydCtmLmNvdW50KTtfPHk7Xys9MylzPVFSKHRoaXMscix0LEt2LGwsYyx1LGQscCxfLF8rMSxfKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKF8vMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIFFSKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkKXt5aC5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYyksYmguZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLHhoLmZyb21CdWZmZXJBdHRyaWJ1dGUocixkKTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXt6Ui5zZXQoMCwwLDApLGpSLnNldCgwLDAsMCksR1Iuc2V0KDAsMCwwKTtmb3IobGV0IGY9MCxtPW8ubGVuZ3RoO2Y8bTtmKyspe2xldCBDPXBbZl0sXz1vW2ZdOzAhPT1DJiYoblUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShfLGMpLGlVLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyx1KSxyVS5mcm9tQnVmZmVyQXR0cmlidXRlKF8sZCkscz8oelIuYWRkU2NhbGVkVmVjdG9yKG5VLEMpLGpSLmFkZFNjYWxlZFZlY3RvcihpVSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUsQykpOih6Ui5hZGRTY2FsZWRWZWN0b3IoblUuc3ViKHloKSxDKSxqUi5hZGRTY2FsZWRWZWN0b3IoaVUuc3ViKGJoKSxDKSxHUi5hZGRTY2FsZWRWZWN0b3IoclUuc3ViKHhoKSxDKSkpfXloLmFkZCh6UiksYmguYWRkKGpSKSx4aC5hZGQoR1IpfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLHloKSxuLmJvbmVUcmFuc2Zvcm0odSxiaCksbi5ib25lVHJhbnNmb3JtKGQseGgpKTtsZXQgaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9MT09PXQuc2lkZT9pLmludGVyc2VjdFRyaWFuZ2xlKHMsbyxyLCEwLGEpOmkuaW50ZXJzZWN0VHJpYW5nbGUocixvLHMsMiE9PXQuc2lkZSxhKSxudWxsPT09bClyZXR1cm4gbnVsbDtYUi5jb3B5KGEpLFhSLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhYUik7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6WFIuY2xvbmUoKSxvYmplY3Q6bn19KG4sdCxlLGkseWgsYmgseGgsb1UpO2lmKGgpe2EmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxkKSxoLnV2PUtyLmdldFVWKG9VLHloLGJoLHhoLFdSLHFSLFlSLG5ldyBKZSkpLGwmJihXUi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYykscVIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLFlSLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxkKSxoLnV2Mj1Lci5nZXRVVihvVSx5aCxiaCx4aCxXUixxUixZUixuZXcgSmUpKTtsZXQgZj17YTpjLGI6dSxjOmQsbm9ybWFsOm5ldyAkLG1hdGVyaWFsSW5kZXg6MH07S3IuZ2V0Tm9ybWFsKHloLGJoLHhoLGYubm9ybWFsKSxoLmZhY2U9Zn1yZXR1cm4gaH15by5wcm90b3R5cGUuaXNNZXNoPSEwO3ZhciBabT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSxvPTEscz0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSxkZXB0aDppLHdpZHRoU2VnbWVudHM6cixoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6c307bGV0IGE9dGhpcztyPU1hdGguZmxvb3Iociksbz1NYXRoLmZsb29yKG8pLHM9TWF0aC5mbG9vcihzKTtsZXQgbD1bXSxjPVtdLHU9W10sZD1bXSxwPTAsaD0wO2Z1bmN0aW9uIGYobSxDLF8seSxJLEEsTyxlZSxYLHhlLGZlKXtsZXQgdmU9QS9YLFQ9Ty94ZSxuZT1BLzIsbGU9Ty8yLGhlPWVlLzIseWU9WCsxLEo9eGUrMSxhZT0wLG1lPTAsamU9bmV3ICQ7Zm9yKGxldCBNZT0wO01lPEo7TWUrKyl7bGV0IEZlPU1lKlQtbGU7Zm9yKGxldCB1dD0wO3V0PHllO3V0KyspamVbbV09KHV0KnZlLW5lKSp5LGplW0NdPUZlKkksamVbX109aGUsYy5wdXNoKGplLngsamUueSxqZS56KSxqZVttXT0wLGplW0NdPTAsamVbX109ZWU+MD8xOi0xLHUucHVzaChqZS54LGplLnksamUueiksZC5wdXNoKHV0L1gpLGQucHVzaCgxLU1lL3hlKSxhZSs9MX1mb3IobGV0IE1lPTA7TWU8eGU7TWUrKylmb3IobGV0IEZlPTA7RmU8WDtGZSsrKXtsZXQgU3Q9cCtGZSt5ZSooTWUrMSksZ3Q9cCsoRmUrMSkreWUqKE1lKzEpLFJlPXArKEZlKzEpK3llKk1lO2wucHVzaChwK0ZlK3llKk1lLFN0LFJlKSxsLnB1c2goU3QsZ3QsUmUpLG1lKz02fWEuYWRkR3JvdXAoaCxtZSxmZSksaCs9bWUscCs9YWV9ZigieiIsInkiLCJ4IiwtMSwtMSxpLGUsdCxzLG8sMCksZigieiIsInkiLCJ4IiwxLC0xLGksZSwtdCxzLG8sMSksZigieCIsInoiLCJ5IiwxLDEsdCxpLGUscixzLDIpLGYoIngiLCJ6IiwieSIsMSwtMSx0LGksLWUscixzLDMpLGYoIngiLCJ5IiwieiIsMSwtMSx0LGUsaSxyLG8sNCksZigieCIsInkiLCJ6IiwtMSwtMSx0LGUsLWkscixvLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKGQsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFptKHQud2lkdGgsdC5oZWlnaHQsdC5kZXB0aCx0LndpZHRoU2VnbWVudHMsdC5oZWlnaHRTZWdtZW50cyx0LmRlcHRoU2VnbWVudHMpfX07ZnVuY3Rpb24gZ3kobil7bGV0IHQ9e307Zm9yKGxldCBlIGluIG4pe3RbZV09e307Zm9yKGxldCBpIGluIG5bZV0pe2xldCByPW5bZV1baV07dFtlXVtpXT1yJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlfHxyLmlzUXVhdGVybmlvbik/ci5jbG9uZSgpOkFycmF5LmlzQXJyYXkocik/ci5zbGljZSgpOnJ9fXJldHVybiB0fWZ1bmN0aW9uIHlzKG4pe2xldCB0PXt9O2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1neShuW2VdKTtmb3IobGV0IHIgaW4gaSl0W3JdPWlbcl19cmV0dXJuIHR9dmFyIFU1ZT17Y2xvbmU6Z3ksbWVyZ2U6eXN9LHpkPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj0idm9pZCBtYWluKCkge1xuXHRnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG59Iix0aGlzLmZyYWdtZW50U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApO1xufSIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdm9pZCAwIT09dCYmKHZvaWQgMCE9PXQuYXR0cmlidXRlcyYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9Z3kodC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO2UuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixlLnVuaWZvcm1zPXt9O2ZvcihsZXQgciBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgcz10aGlzLnVuaWZvcm1zW3JdLnZhbHVlO2UudW5pZm9ybXNbcl09cyYmcy5pc1RleHR1cmU/e3R5cGU6InQiLHZhbHVlOnMudG9KU09OKHQpLnV1aWR9OnMmJnMuaXNDb2xvcj97dHlwZToiYyIsdmFsdWU6cy5nZXRIZXgoKX06cyYmcy5pc1ZlY3RvcjI/e3R5cGU6InYyIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjM/e3R5cGU6InYzIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc1ZlY3RvcjQ/e3R5cGU6InY0Iix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDM/e3R5cGU6Im0zIix2YWx1ZTpzLnRvQXJyYXkoKX06cyYmcy5pc01hdHJpeDQ/e3R5cGU6Im00Iix2YWx1ZTpzLnRvQXJyYXkoKX06e3ZhbHVlOnN9fU9iamVjdC5rZXlzKHRoaXMuZGVmaW5lcykubGVuZ3RoPjAmJihlLmRlZmluZXM9dGhpcy5kZWZpbmVzKSxlLnZlcnRleFNoYWRlcj10aGlzLnZlcnRleFNoYWRlcixlLmZyYWdtZW50U2hhZGVyPXRoaXMuZnJhZ21lbnRTaGFkZXI7bGV0IGk9e307Zm9yKGxldCByIGluIHRoaXMuZXh0ZW5zaW9ucykhMD09PXRoaXMuZXh0ZW5zaW9uc1tyXSYmKGlbcl09ITApO3JldHVybiBPYmplY3Qua2V5cyhpKS5sZW5ndGg+MCYmKGUuZXh0ZW5zaW9ucz1pKSxlfX07emQucHJvdG90eXBlLmlzU2hhZGVyTWF0ZXJpYWw9ITA7dmFyIFRNPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ2FtZXJhIix0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZT1uZXcgTW4sdGhpcy5wcm9qZWN0aW9uTWF0cml4PW5ldyBNbix0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlPW5ldyBNbn1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHQubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLnByb2plY3Rpb25NYXRyaXguY29weSh0LnByb2plY3Rpb25NYXRyaXgpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKSx0aGlzfWdldFdvcmxkRGlyZWN0aW9uKHQpe3RoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpO2xldCBlPXRoaXMubWF0cml4V29ybGQuZWxlbWVudHM7cmV0dXJuIHQuc2V0KC1lWzhdLC1lWzldLC1lWzEwXSkubm9ybWFsaXplKCl9dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe3N1cGVyLnVwZGF0ZVdvcmxkTWF0cml4KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O1RNLnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgeHM9Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PTUwLGU9MSxpPS4xLHI9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPWksdGhpcy5mYXI9cix0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PWUsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9bnVsbD09PXQudmlldz9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IGU9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj0yKndVKk1hdGguYXRhbihlKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKC41KkI0KnRoaXMuZm92KTtyZXR1cm4uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiAyKndVKk1hdGguYXRhbihNYXRoLnRhbiguNSpCNCp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQsZSxpLHIsbyxzKXt0aGlzLmFzcGVjdD10L2UsbnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIsZT10Kk1hdGgudGFuKC41KkI0KnRoaXMuZm92KS90aGlzLnpvb20saT0yKmUscj10aGlzLmFzcGVjdCppLG89LS41KnIscz10aGlzLnZpZXc7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPXMuZnVsbFdpZHRoLGM9cy5mdWxsSGVpZ2h0O28rPXMub2Zmc2V0WCpyL2wsZS09cy5vZmZzZXRZKmkvYyxyKj1zLndpZHRoL2wsaSo9cy5oZWlnaHQvY31sZXQgYT10aGlzLmZpbG1PZmZzZXQ7MCE9PWEmJihvKz10KmEvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShvLG8rcixlLGUtaSx0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5mb3Y9dGhpcy5mb3YsZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLGUub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsZS5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LG51bGwhPT10aGlzLnZpZXcmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZS5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLGUub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LGV9fTt4cy5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgRE09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0LGUsaSl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLCEwIT09aS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTt0aGlzLnJlbmRlclRhcmdldD1pO2xldCByPW5ldyB4cyg5MCwxLHQsZSk7ci5sYXllcnM9dGhpcy5sYXllcnMsci51cC5zZXQoMCwtMSwwKSxyLmxvb2tBdChuZXcgJCgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBvPW5ldyB4cyg5MCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgJCgtMSwwLDApKSx0aGlzLmFkZChvKTtsZXQgcz1uZXcgeHMoOTAsMSx0LGUpO3MubGF5ZXJzPXRoaXMubGF5ZXJzLHMudXAuc2V0KDAsMCwxKSxzLmxvb2tBdChuZXcgJCgwLDEsMCkpLHRoaXMuYWRkKHMpO2xldCBhPW5ldyB4cyg5MCwxLHQsZSk7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLC0xKSxhLmxvb2tBdChuZXcgJCgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgeHMoOTAsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3ICQoMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgeHMoOTAsMSx0LGUpO2MubGF5ZXJzPXRoaXMubGF5ZXJzLGMudXAuc2V0KDAsLTEsMCksYy5sb29rQXQobmV3ICQoMCwwLC0xKSksdGhpcy5hZGQoYyl9dXBkYXRlKHQsZSl7bnVsbD09PXRoaXMucGFyZW50JiZ0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCk7bGV0IGk9dGhpcy5yZW5kZXJUYXJnZXQsW3IsbyxzLGEsbCxjXT10aGlzLmNoaWxkcmVuLHU9dC54ci5lbmFibGVkLGQ9dC5nZXRSZW5kZXJUYXJnZXQoKTt0LnhyLmVuYWJsZWQ9ITE7bGV0IHA9aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcztpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPSExLHQuc2V0UmVuZGVyVGFyZ2V0KGksMCksdC5yZW5kZXIoZSxyKSx0LnNldFJlbmRlclRhcmdldChpLDEpLHQucmVuZGVyKGUsbyksdC5zZXRSZW5kZXJUYXJnZXQoaSwyKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMyksdC5yZW5kZXIoZSxhKSx0LnNldFJlbmRlclRhcmdldChpLDQpLHQucmVuZGVyKGUsbCksaS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1wLHQuc2V0UmVuZGVyVGFyZ2V0KGksNSksdC5yZW5kZXIoZSxjKSx0LnNldFJlbmRlclRhcmdldChkKSx0LnhyLmVuYWJsZWQ9dSxpLnRleHR1cmUubmVlZHNQTVJFTVVwZGF0ZT0hMH19LF95PWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIodD12b2lkIDAhPT10P3Q6W10sZT12b2lkIDAhPT1lP2U6MzAxLGkscixvLHMsYSxsLGMsdSksdGhpcy5mbGlwWT0hMX1nZXQgaW1hZ2VzKCl7cmV0dXJuIHRoaXMuaW1hZ2V9c2V0IGltYWdlcyh0KXt0aGlzLmltYWdlPXR9fTtfeS5wcm90b3R5cGUuaXNDdWJlVGV4dHVyZT0hMDt2YXIgYjI9Y2xhc3MgZXh0ZW5kcyB2YXtjb25zdHJ1Y3Rvcih0LGUsaSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xDdWJlUmVuZGVyVGFyZ2V0OiBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaXMgbm93IFdlYkdMQ3ViZVJlbmRlclRhcmdldCggc2l6ZSwgb3B0aW9ucyApIiksZT1pKSxzdXBlcih0LHQsZSksdGhpcy50ZXh0dXJlPW5ldyBfeSh2b2lkIDAsKGU9ZXx8e30pLm1hcHBpbmcsZS53cmFwUyxlLndyYXBULGUubWFnRmlsdGVyLGUubWluRmlsdGVyLGUuZm9ybWF0LGUudHlwZSxlLmFuaXNvdHJvcHksZS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXZvaWQgMCE9PWUuZ2VuZXJhdGVNaXBtYXBzJiZlLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWUubWluRmlsdGVyP2UubWluRmlsdGVyOmJzfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9enMsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGlfdW5pZm9ybXM9e3RFcXVpcmVjdDp7dmFsdWU6bnVsbH19LGlfdmVydGV4U2hhZGVyPSJcblxuXHRcdFx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuXG5cdFx0XHRcdHZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9ybWFsaXplKCAoIG1hdHJpeCAqIHZlYzQoIGRpciwgMC4wICkgKS54eXogKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdFx0dldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdFx0XHRcdFx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXG5cdFx0XHRcdH1cblx0XHRcdCIsaV9mcmFnbWVudFNoYWRlcj0iXG5cblx0XHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0O1xuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0I2luY2x1ZGUgPGNvbW1vbj5cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHR2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7XG5cblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTtcblxuXHRcdFx0XHR9XG5cdFx0XHQiLHI9bmV3IFptKDUsNSw1KSxvPW5ldyB6ZCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6Z3koaV91bmlmb3JtcyksdmVydGV4U2hhZGVyOmlfdmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmlfZnJhZ21lbnRTaGFkZXIsc2lkZToxLGJsZW5kaW5nOjB9KTtvLnVuaWZvcm1zLnRFcXVpcmVjdC52YWx1ZT1lO2xldCBzPW5ldyB5byhyLG8pLGE9ZS5taW5GaWx0ZXI7cmV0dXJuIDEwMDg9PT1lLm1pbkZpbHRlciYmKGUubWluRmlsdGVyPWJzKSxuZXcgRE0oMSwxMCx0aGlzKS51cGRhdGUodCxzKSxlLm1pbkZpbHRlcj1hLHMuZ2VvbWV0cnkuZGlzcG9zZSgpLHMubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxlLGkscil7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IHM9MDtzPDY7cysrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMscyksdC5jbGVhcihlLGkscik7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtiMi5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIHNVPW5ldyAkLEc1ZT1uZXcgJCxXNWU9bmV3IFBvLGtjPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3ICQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9c1Uuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKEc1ZS5zdWJWZWN0b3JzKHQsZSkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHIsdCksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQubm9ybWFsKSx0aGlzLmNvbnN0YW50PXQuY29uc3RhbnQsdGhpc31ub3JtYWxpemUoKXtsZXQgdD0xL3RoaXMubm9ybWFsLmxlbmd0aCgpO3JldHVybiB0aGlzLm5vcm1hbC5tdWx0aXBseVNjYWxhcih0KSx0aGlzLmNvbnN0YW50Kj10LHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMuY29uc3RhbnQqPS0xLHRoaXMubm9ybWFsLm5lZ2F0ZSgpLHRoaXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0aGlzLm5vcm1hbC5kb3QodCkrdGhpcy5jb25zdGFudH1kaXN0YW5jZVRvU3BoZXJlKHQpe3JldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmNlbnRlciktdC5yYWRpdXN9cHJvamVjdFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0aGlzLm5vcm1hbCkubXVsdGlwbHlTY2FsYXIoLXRoaXMuZGlzdGFuY2VUb1BvaW50KHQpKS5hZGQodCl9aW50ZXJzZWN0TGluZSh0LGUpe2xldCBpPXQuZGVsdGEoc1UpLHI9dGhpcy5ub3JtYWwuZG90KGkpO2lmKDA9PT1yKXJldHVybiAwPT09dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCk/ZS5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvcjtyZXR1cm4gbzwwfHxvPjE/bnVsbDplLmNvcHkoaSkubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCBlPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLGk9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiBlPDAmJmk+MHx8aTwwJiZlPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQsZSl7bGV0IGk9ZXx8VzVlLmdldE5vcm1hbE1hdHJpeCh0KSxyPXRoaXMuY29wbGFuYXJQb2ludChzVSkuYXBwbHlNYXRyaXg0KHQpLG89dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXgzKGkpLm5vcm1hbGl6ZSgpO3JldHVybiB0aGlzLmNvbnN0YW50PS1yLmRvdChvKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jb25zdGFudC09dC5kb3QodGhpcy5ub3JtYWwpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm5vcm1hbC5lcXVhbHModGhpcy5ub3JtYWwpJiZ0LmNvbnN0YW50PT09dGhpcy5jb25zdGFudH1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19O2tjLnByb3RvdHlwZS5pc1BsYW5lPSEwO3ZhciAkdj1uZXcgQWgsS1I9bmV3ICQsdnk9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcga2MsZT1uZXcga2MsaT1uZXcga2Mscj1uZXcga2Msbz1uZXcga2Mscz1uZXcga2Mpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGQ9aVs3XSxwPWlbOF0saD1pWzldLGY9aVsxMF0sbT1pWzExXSxDPWlbMTJdLF89aVsxM10seT1pWzE0XSxJPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGQtbCxtLXAsSS1DKS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGQrbCxtK3AsSStDKS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLGQrYyxtK2gsSStfKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLGQtYyxtLWgsSS1fKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLGQtdSxtLWYsSS15KS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLGQrdSxtK2YsSSt5KS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksJHYuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKCR2KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiAkdi5jZW50ZXIuc2V0KDAsMCwwKSwkdi5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsJHYuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZSgkdil9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoS1IueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LEtSLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxLUi56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoS1IpPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBnbGUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIHE1ZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgZD1pLmdldChjKTt2b2lkIDA9PT1kP2kuc2V0KGMsZnVuY3Rpb24oYyx1KXtsZXQgZD1jLmFycmF5LHA9Yy51c2FnZSxoPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsaCksbi5idWZmZXJEYXRhKHUsZCxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZj01MTI2O3JldHVybiBkIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Y9NTEyNjpkIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpkIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9mPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmY9NTEyMzpkIGluc3RhbmNlb2YgSW50MTZBcnJheT9mPTUxMjI6ZCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Y9NTEyNTpkIGluc3RhbmNlb2YgSW50MzJBcnJheT9mPTUxMjQ6ZCBpbnN0YW5jZW9mIEludDhBcnJheT9mPTUxMjA6KGQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxkIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZj01MTIxKSx7YnVmZmVyOmgsdHlwZTpmLGJ5dGVzUGVyRWxlbWVudDpkLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyx1KSk6ZC52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsdSxkKXtsZXQgcD11LmFycmF5LGg9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoZCxjKSwtMT09PWguY291bnQ/bi5idWZmZXJTdWJEYXRhKGQsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEoZCxoLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsaC5vZmZzZXQsaC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGQsaC5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K2guY291bnQpKSxoLmNvdW50PS0xKX0oZC5idWZmZXIsYyx1KSxkLnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBBTT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsdT1sKzEsZD10L2EscD1lL2wsaD1bXSxmPVtdLG09W10sQz1bXTtmb3IobGV0IF89MDtfPHU7XysrKXtsZXQgeT1fKnAtcztmb3IobGV0IEk9MDtJPGM7SSsrKWYucHVzaChJKmQtbywteSwwKSxtLnB1c2goMCwwLDEpLEMucHVzaChJL2EpLEMucHVzaCgxLV8vbCl9Zm9yKGxldCBfPTA7XzxsO18rKylmb3IobGV0IHk9MDt5PGE7eSsrKXtsZXQgQT15K2MqKF8rMSksTz15KzErYyooXysxKSxlZT15KzErYypfO2gucHVzaCh5K2MqXyxBLGVlKSxoLnB1c2goQSxPLGVlKX10aGlzLnNldEluZGV4KGgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBHcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBHcihDLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBBTSh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LGJpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sUHQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGFuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBQb30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEplKDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IFBvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgYW4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBKZSguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99fX0sVXU9e2Jhc2ljOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuc3BlY3VsYXJtYXAsUHQuZW52bWFwLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmZvZyxQdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgYW4oMCl9fV0pLHZlcnRleFNoYWRlcjpiaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LnNwZWN1bGFybWFwLFB0LmVudm1hcCxQdC5hb21hcCxQdC5saWdodG1hcCxQdC5lbWlzc2l2ZW1hcCxQdC5idW1wbWFwLFB0Lm5vcm1hbG1hcCxQdC5kaXNwbGFjZW1lbnRtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBhbigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5lbnZtYXAsUHQuYW9tYXAsUHQubGlnaHRtYXAsUHQuZW1pc3NpdmVtYXAsUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LnJvdWdobmVzc21hcCxQdC5tZXRhbG5lc3NtYXAsUHQuZm9nLFB0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBhbigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmFvbWFwLFB0LmxpZ2h0bWFwLFB0LmVtaXNzaXZlbWFwLFB0LmJ1bXBtYXAsUHQubm9ybWFsbWFwLFB0LmRpc3BsYWNlbWVudG1hcCxQdC5ncmFkaWVudG1hcCxQdC5mb2csUHQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGFuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpiaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLFB0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3Jtczp5cyhbUHQucG9pbnRzLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3Jtczp5cyhbUHQuY29tbW9uLFB0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpiaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6eXMoW1B0LmNvbW1vbixQdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6YmkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuYnVtcG1hcCxQdC5ub3JtYWxtYXAsUHQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3Jtczp5cyhbUHQuc3ByaXRlLFB0LmZvZ10pLHZlcnRleFNoYWRlcjpiaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgUG99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpiaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6YmkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3Jtczp5cyhbUHQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6YmkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YmkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpiaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOnlzKFtQdC5jb21tb24sUHQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3ICR9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOnlzKFtQdC5saWdodHMsUHQuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IGFuKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6Ymkuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6Ymkuc2hhZG93X2ZyYWd9fTtmdW5jdGlvbiB5VWUobix0LGUsaSxyLG8pe2xldCBsLGMscz1uZXcgYW4oMCksYT0hMD09PXI/MDoxLHU9bnVsbCxkPTAscD1udWxsO2Z1bmN0aW9uIGYobSxDKXtlLmJ1ZmZlcnMuY29sb3Iuc2V0Q2xlYXIobS5yLG0uZyxtLmIsQyxvKX1yZXR1cm57Z2V0Q2xlYXJDb2xvcjpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckNvbG9yOmZ1bmN0aW9uKG0sQz0xKXtzLnNldChtKSxhPUMsZihzLGEpfSxnZXRDbGVhckFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldENsZWFyQWxwaGE6ZnVuY3Rpb24obSl7YT1tLGYocyxhKX0scmVuZGVyOmZ1bmN0aW9uKG0sQyl7bGV0IF89ITEseT0hMD09PUMuaXNTY2VuZT9DLmJhY2tncm91bmQ6bnVsbDt5JiZ5LmlzVGV4dHVyZSYmKHk9dC5nZXQoeSkpO2xldCBJPW4ueHIsQT1JLmdldFNlc3Npb24mJkkuZ2V0U2Vzc2lvbigpO0EmJiJhZGRpdGl2ZSI9PT1BLmVudmlyb25tZW50QmxlbmRNb2RlJiYoeT1udWxsKSxudWxsPT09eT9mKHMsYSk6eSYmeS5pc0NvbG9yJiYoZih5LDEpLF89ITApLChuLmF1dG9DbGVhcnx8XykmJm4uY2xlYXIobi5hdXRvQ2xlYXJDb2xvcixuLmF1dG9DbGVhckRlcHRoLG4uYXV0b0NsZWFyU3RlbmNpbCkseSYmKHkuaXNDdWJlVGV4dHVyZXx8MzA2PT09eS5tYXBwaW5nKT8odm9pZCAwPT09YyYmKGM9bmV3IHlvKG5ldyBabSgxLDEsMSksbmV3IHpkKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpneShVdS5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6VXUuY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6VXUuY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOjEsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKE8sZWUsWCl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oWC5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXksYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXkuaXNDdWJlVGV4dHVyZSYmITE9PT15LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTp5JiZ5LmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyB5byhuZXcgQU0oMiwyKSxuZXcgemQoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6Z3koVXUuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOlV1LmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlV1LmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxpLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9eSwhMD09PXkubWF0cml4QXV0b1VwZGF0ZSYmeS51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoeS5tYXRyaXgpLCh1IT09eXx8ZCE9PXkudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXksZD15LnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIGJVZShuLHQsZSxpKXtsZXQgcj1uLmdldFBhcmFtZXRlcigzNDkyMSksbz1pLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikscz1pLmlzV2ViR0wyfHxudWxsIT09byxhPXt9LGw9bShudWxsKSxjPWw7ZnVuY3Rpb24gcChsZSl7cmV0dXJuIGkuaXNXZWJHTDI/bi5iaW5kVmVydGV4QXJyYXkobGUpOm8uYmluZFZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBoKGxlKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmRlbGV0ZVZlcnRleEFycmF5KGxlKTpvLmRlbGV0ZVZlcnRleEFycmF5T0VTKGxlKX1mdW5jdGlvbiBtKGxlKXtsZXQgaGU9W10seWU9W10sSj1bXTtmb3IobGV0IGFlPTA7YWU8cjthZSsrKWhlW2FlXT0wLHllW2FlXT0wLEpbYWVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOmhlLGVuYWJsZWRBdHRyaWJ1dGVzOnllLGF0dHJpYnV0ZURpdmlzb3JzOkosb2JqZWN0OmxlLGF0dHJpYnV0ZXM6e30saW5kZXg6bnVsbH19ZnVuY3Rpb24geSgpe2xldCBsZT1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKWxlW2hlXT0wfWZ1bmN0aW9uIEkobGUpe0EobGUsMCl9ZnVuY3Rpb24gQShsZSxoZSl7bGV0IEo9Yy5lbmFibGVkQXR0cmlidXRlcyxhZT1jLmF0dHJpYnV0ZURpdmlzb3JzO2MubmV3QXR0cmlidXRlc1tsZV09MSwwPT09SltsZV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxlKSxKW2xlXT0xKSxhZVtsZV0hPT1oZSYmKChpLmlzV2ViR0wyP246dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbaS5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKGxlLGhlKSxhZVtsZV09aGUpfWZ1bmN0aW9uIE8oKXtsZXQgbGU9Yy5uZXdBdHRyaWJ1dGVzLGhlPWMuZW5hYmxlZEF0dHJpYnV0ZXM7Zm9yKGxldCB5ZT0wLEo9aGUubGVuZ3RoO3llPEo7eWUrKyloZVt5ZV0hPT1sZVt5ZV0mJihuLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh5ZSksaGVbeWVdPTApfWZ1bmN0aW9uIGVlKGxlLGhlLHllLEosYWUsbWUpeyEwIT09aS5pc1dlYkdMMnx8NTEyNCE9PXllJiY1MTI1IT09eWU/bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKGxlLGhlLHllLEosYWUsbWUpOm4udmVydGV4QXR0cmliSVBvaW50ZXIobGUsaGUseWUsYWUsbWUpfWZ1bmN0aW9uIFQoKXtuZSgpLGMhPT1sJiYoYz1sLHAoYy5vYmplY3QpKX1mdW5jdGlvbiBuZSgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6ZnVuY3Rpb24obGUsaGUseWUsSixhZSl7bGV0IG1lPSExO2lmKHMpe2xldCBqZT1mdW5jdGlvbihsZSxoZSx5ZSl7bGV0IEo9ITA9PT15ZS53aXJlZnJhbWUsYWU9YVtsZS5pZF07dm9pZCAwPT09YWUmJihhZT17fSxhW2xlLmlkXT1hZSk7bGV0IG1lPWFlW2hlLmlkXTt2b2lkIDA9PT1tZSYmKG1lPXt9LGFlW2hlLmlkXT1tZSk7bGV0IGplPW1lW0pdO3JldHVybiB2b2lkIDA9PT1qZSYmKGplPW0oaS5pc1dlYkdMMj9uLmNyZWF0ZVZlcnRleEFycmF5KCk6by5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpKSxtZVtKXT1qZSksamV9KEoseWUsaGUpO2MhPT1qZSYmKGM9amUscChjLm9iamVjdCkpLG1lPWZ1bmN0aW9uKGxlLGhlKXtsZXQgeWU9Yy5hdHRyaWJ1dGVzLEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPXllW21lXSxNZT1KW21lXTtpZih2b2lkIDA9PT1qZXx8amUuYXR0cmlidXRlIT09TWV8fGplLmRhdGEhPT1NZS5kYXRhKXJldHVybiEwO2FlKyt9cmV0dXJuIGMuYXR0cmlidXRlc051bSE9PWFlfHxjLmluZGV4IT09aGV9KEosYWUpLG1lJiZmdW5jdGlvbihsZSxoZSl7bGV0IHllPXt9LEo9bGUuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbWUgaW4gSil7bGV0IGplPUpbbWVdLE1lPXt9O01lLmF0dHJpYnV0ZT1qZSxqZS5kYXRhJiYoTWUuZGF0YT1qZS5kYXRhKSx5ZVttZV09TWUsYWUrK31jLmF0dHJpYnV0ZXM9eWUsYy5hdHRyaWJ1dGVzTnVtPWFlLGMuaW5kZXg9aGV9KEosYWUpfWVsc2V7bGV0IGplPSEwPT09aGUud2lyZWZyYW1lOyhjLmdlb21ldHJ5IT09Si5pZHx8Yy5wcm9ncmFtIT09eWUuaWR8fGMud2lyZWZyYW1lIT09amUpJiYoYy5nZW9tZXRyeT1KLmlkLGMucHJvZ3JhbT15ZS5pZCxjLndpcmVmcmFtZT1qZSxtZT0hMCl9ITA9PT1sZS5pc0luc3RhbmNlZE1lc2gmJihtZT0hMCksbnVsbCE9PWFlJiZlLnVwZGF0ZShhZSwzNDk2MyksbWUmJihmdW5jdGlvbihsZSxoZSx5ZSxKKXtpZighMT09PWkuaXNXZWJHTDImJihsZS5pc0luc3RhbmNlZE1lc2h8fEouaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjt5KCk7bGV0IGFlPUouYXR0cmlidXRlcyxtZT15ZS5nZXRBdHRyaWJ1dGVzKCksamU9aGUuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IE1lIGluIG1lKXtsZXQgRmU9bWVbTWVdO2lmKEZlLmxvY2F0aW9uPj0wKXtsZXQgdXQ9YWVbTWVdO2lmKHZvaWQgMD09PXV0JiYoImluc3RhbmNlTWF0cml4Ij09PU1lJiZsZS5pbnN0YW5jZU1hdHJpeCYmKHV0PWxlLmluc3RhbmNlTWF0cml4KSwiaW5zdGFuY2VDb2xvciI9PT1NZSYmbGUuaW5zdGFuY2VDb2xvciYmKHV0PWxlLmluc3RhbmNlQ29sb3IpKSx2b2lkIDAhPT11dCl7bGV0IFN0PXV0Lm5vcm1hbGl6ZWQsZ3Q9dXQuaXRlbVNpemUsUmU9ZS5nZXQodXQpO2lmKHZvaWQgMD09PVJlKWNvbnRpbnVlO2xldCBBbj1SZS5idWZmZXIsRXQ9UmUudHlwZSxvbj1SZS5ieXRlc1BlckVsZW1lbnQ7aWYodXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IENlPXV0LmRhdGEsdnQ9Q2Uuc3RyaWRlLF90PXV0Lm9mZnNldDtpZihDZSYmQ2UuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcil7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUEoRmUubG9jYXRpb24raWUsQ2UubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PUNlLm1lc2hQZXJBdHRyaWJ1dGUqQ2UuY291bnQpfWVsc2UgZm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKUkoRmUubG9jYXRpb24raWUpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBpZT0wO2llPEZlLmxvY2F0aW9uU2l6ZTtpZSsrKWVlKEZlLmxvY2F0aW9uK2llLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCx2dCpvbiwoX3QrZ3QvRmUubG9jYXRpb25TaXplKmllKSpvbil9ZWxzZXtpZih1dC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZSl7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUEoRmUubG9jYXRpb24rQ2UsdXQubWVzaFBlckF0dHJpYnV0ZSk7ITAhPT1sZS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PUouX21heEluc3RhbmNlQ291bnQmJihKLl9tYXhJbnN0YW5jZUNvdW50PXV0Lm1lc2hQZXJBdHRyaWJ1dGUqdXQuY291bnQpfWVsc2UgZm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKUkoRmUubG9jYXRpb24rQ2UpO24uYmluZEJ1ZmZlcigzNDk2MixBbik7Zm9yKGxldCBDZT0wO0NlPEZlLmxvY2F0aW9uU2l6ZTtDZSsrKWVlKEZlLmxvY2F0aW9uK0NlLGd0L0ZlLmxvY2F0aW9uU2l6ZSxFdCxTdCxndCpvbixndC9GZS5sb2NhdGlvblNpemUqQ2Uqb24pfX1lbHNlIGlmKHZvaWQgMCE9PWplKXtsZXQgU3Q9amVbTWVdO2lmKHZvaWQgMCE9PVN0KXN3aXRjaChTdC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihGZS5sb2NhdGlvbixTdCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KEZlLmxvY2F0aW9uLFN0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoRmUubG9jYXRpb24sU3QpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoRmUubG9jYXRpb24sU3QpfX19fU8oKX0obGUsaGUseWUsSiksbnVsbCE9PWFlJiZuLmJpbmRCdWZmZXIoMzQ5NjMsZS5nZXQoYWUpLmJ1ZmZlcikpfSxyZXNldDpULHJlc2V0RGVmYXVsdFN0YXRlOm5lLGRpc3Bvc2U6ZnVuY3Rpb24oKXtUKCk7Zm9yKGxldCBsZSBpbiBhKXtsZXQgaGU9YVtsZV07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGVdfX0scmVsZWFzZVN0YXRlc09mR2VvbWV0cnk6ZnVuY3Rpb24obGUpe2lmKHZvaWQgMD09PWFbbGUuaWRdKXJldHVybjtsZXQgaGU9YVtsZS5pZF07Zm9yKGxldCB5ZSBpbiBoZSl7bGV0IEo9aGVbeWVdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSBoZVt5ZV19ZGVsZXRlIGFbbGUuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKGxlKXtmb3IobGV0IGhlIGluIGEpe2xldCB5ZT1hW2hlXTtpZih2b2lkIDA9PT15ZVtsZS5pZF0pY29udGludWU7bGV0IEo9eWVbbGUuaWRdO2ZvcihsZXQgYWUgaW4gSiloKEpbYWVdLm9iamVjdCksZGVsZXRlIEpbYWVdO2RlbGV0ZSB5ZVtsZS5pZF19fSxpbml0QXR0cmlidXRlczp5LGVuYWJsZUF0dHJpYnV0ZTpJLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOk99fWZ1bmN0aW9uIHhVZShuLHQsZSxpKXtsZXQgbyxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGMpe289Y30sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oYyx1KXtuLmRyYXdBcnJheXMobyxjLHUpLGUudXBkYXRlKHUsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oYyx1LGQpe2lmKDA9PT1kKXJldHVybjtsZXQgcCxoO2lmKHIpcD1uLGg9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYocD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGg9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXApcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cFtoXShvLGMsdSxkKSxlLnVwZGF0ZSh1LG8sZCl9fWZ1bmN0aW9uIENVZShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gbyhYKXtpZigiaGlnaHAiPT09WCl7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtYPSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT1YJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBzPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPXZvaWQgMCE9PWUucHJlY2lzaW9uP2UucHJlY2lzaW9uOiJoaWdocCIsbD1vKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1zfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT0hMD09PWUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixkPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxwPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGY9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLG09bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLEM9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLF89bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLHk9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLEk9cD4wLEE9c3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cmV0dXJue2lzV2ViR0wyOnMsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09aSlyZXR1cm4gaTtpZighMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IFg9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2k9bi5nZXRQYXJhbWV0ZXIoWC5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpfWVsc2UgaT0wO3JldHVybiBpfSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6ZCxtYXhWZXJ0ZXhUZXh0dXJlczpwLG1heFRleHR1cmVTaXplOmgsbWF4Q3ViZW1hcFNpemU6ZixtYXhBdHRyaWJ1dGVzOm0sbWF4VmVydGV4VW5pZm9ybXM6QyxtYXhWYXJ5aW5nczpfLG1heEZyYWdtZW50VW5pZm9ybXM6eSx2ZXJ0ZXhUZXh0dXJlczpJLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpBLGZsb2F0VmVydGV4VGV4dHVyZXM6SSYmQSxtYXhTYW1wbGVzOnM/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjB9fWZ1bmN0aW9uIHdVZShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxvPSExLHM9bmV3IGtjLGE9bmV3IFBvLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoZCxwLGgsZil7bGV0IG09bnVsbCE9PWQ/ZC5sZW5ndGg6MCxDPW51bGw7aWYoMCE9PW0pe2lmKEM9bC52YWx1ZSwhMCE9PWZ8fG51bGw9PT1DKXtsZXQgXz1oKzQqbSx5PXAubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KHkpLChudWxsPT09Q3x8Qy5sZW5ndGg8XykmJihDPW5ldyBGbG9hdDMyQXJyYXkoXykpO2ZvcihsZXQgST0wLEE9aDtJIT09bTsrK0ksQSs9NClzLmNvcHkoZFtJXSkuYXBwbHlNYXRyaXg0KHksYSkscy5ub3JtYWwudG9BcnJheShDLEEpLENbQSszXT1zLmNvbnN0YW50fWwudmFsdWU9QyxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1tLHQubnVtSW50ZXJzZWN0aW9uPTAsQ310aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGQscCxoKXtsZXQgZj0wIT09ZC5sZW5ndGh8fHB8fDAhPT1pfHxyO3JldHVybiByPXAsZT11KGQsaCwwKSxpPWQubGVuZ3RoLGZ9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihkLHAsaCl7bGV0IGY9ZC5jbGlwcGluZ1BsYW5lcyxtPWQuY2xpcEludGVyc2VjdGlvbixDPWQuY2xpcFNoYWRvd3MsXz1uLmdldChkKTtpZighcnx8bnVsbD09PWZ8fDA9PT1mLmxlbmd0aHx8byYmIUMpbz91KG51bGwpOmMoKTtlbHNle2xldCB5PW8/MDppLEk9NCp5LEE9Xy5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9QSxBPXUoZixwLEksaCk7Zm9yKGxldCBPPTA7TyE9PUk7KytPKUFbT109ZVtPXTtfLmNsaXBwaW5nU3RhdGU9QSx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXl9fX1mdW5jdGlvbiBNVWUobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShzLGEpe3JldHVybiAzMDM9PT1hP3MubWFwcGluZz0zMDE6MzA0PT09YSYmKHMubWFwcGluZz0zMDIpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKDMwMz09PWF8fDMwND09PWEpe2lmKHQuaGFzKHMpKXJldHVybiBlKHQuZ2V0KHMpLnRleHR1cmUscy5tYXBwaW5nKTt7bGV0IGw9cy5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgYjIobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixzKSx0LnNldChzLGMpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUscy5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcH19fVV1LnBoeXNpY2FsPXt1bmlmb3Jtczp5cyhbVXUuc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBKZSgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgSmV9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgYW4oMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IGFuKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmJpLm1lc2hwaHlzaWNhbF9mcmFnfTt2YXIgSm09Y2xhc3MgZXh0ZW5kcyBUTXtjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxvPS4xLHM9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1vLHRoaXMuZmFyPXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsbz1pLXQscz1pK3QsYT1yK2UsbD1yLWU7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtvKz1jKnRoaXMudmlldy5vZmZzZXRYLHM9bytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMobyxzLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07Sm0ucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciB5eT1jbGFzcyBleHRlbmRzIHpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07eXkucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIEh1PU1hdGgucG93KDIsOCksX2xlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSx2bGU9NStfbGUubGVuZ3RoLGFVPW5ldyBKbSx7X2xvZFBsYW5lczp1TSxfc2l6ZUxvZHM6Z2FlLF9zaWdtYXM6WlJ9PVNVZSgpLF9hZT1uZXcgYW4sbFU9bnVsbCxxbT0oMStNYXRoLnNxcnQoNSkpLzIsdHk9MS9xbSx2YWU9W25ldyAkKDEsMSwxKSxuZXcgJCgtMSwxLDEpLG5ldyAkKDEsMSwtMSksbmV3ICQoLTEsMSwtMSksbmV3ICQoMCxxbSx0eSksbmV3ICQoMCxxbSwtdHkpLG5ldyAkKHR5LDAscW0pLG5ldyAkKC10eSwwLHFtKSxuZXcgJChxbSx0eSwwKSxuZXcgJCgtcW0sdHksMCldLHgyPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IEZsb2F0MzJBcnJheSgyMCksZT1uZXcgJCgwLDEsMCk7cmV0dXJuIG5ldyB5eSh7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntuOjIwfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdFx0dW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuXHRcdFx0dW5pZm9ybSBpbnQgc2FtcGxlcztcblx0XHRcdHVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdO1xuXHRcdFx0dW5pZm9ybSBib29sIGxhdGl0dWRpbmFsO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCBkVGhldGE7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IG1pcEludDtcblx0XHRcdHVuaWZvcm0gdmVjMyBwb2xlQXhpcztcblxuXHRcdFx0I2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWXG5cdFx0XHQjaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuXG5cdFx0XHR2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHtcblxuXHRcdFx0XHRmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTtcblx0XHRcdFx0Ly8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uXG5cdFx0XHRcdHZlYzMgc2FtcGxlRGlyZWN0aW9uID0gdk91dHB1dERpcmVjdGlvbiAqIGNvc1RoZXRhXG5cdFx0XHRcdFx0KyBjcm9zcyggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogc2luKCB0aGV0YSApXG5cdFx0XHRcdFx0KyBheGlzICogZG90KCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiAoIDEuMCAtIGNvc1RoZXRhICk7XG5cblx0XHRcdFx0cmV0dXJuIGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpcmVjdGlvbiwgbWlwSW50ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdHZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHtcblxuXHRcdFx0XHRcdGF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApO1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7XG5cblx0XHRcdFx0Zm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkge1xuXG5cdFx0XHRcdFx0aWYgKCBpID49IHNhbXBsZXMgKSB7XG5cblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZmxvYXQgdGhldGEgPSBkVGhldGEgKiBmbG9hdCggaSApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCAtMS4wICogdGhldGEsIGF4aXMgKTtcblx0XHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggdGhldGEsIGF4aXMgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX0oKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxlPTAsaT0uMSxyPTEwMCl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG89dGhpcy5fYWxsb2NhdGVUYXJnZXRzKCk7cmV0dXJuIHRoaXMuX3NjZW5lVG9DdWJlVVYodCxpLHIsbyksZT4wJiZ0aGlzLl9ibHVyKG8sMCwwLGUpLHRoaXMuX2FwcGx5UE1SRU0obyksdGhpcy5fY2xlYW51cChvKSxvfWZyb21FcXVpcmVjdGFuZ3VsYXIodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWZyb21DdWJlbWFwKHQsZT1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxlKX1jb21waWxlQ3ViZW1hcFNoYWRlcigpe251bGw9PT10aGlzLl9jdWJlbWFwU2hhZGVyJiYodGhpcy5fY3ViZW1hcFNoYWRlcj14YWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fY3ViZW1hcFNoYWRlcikpfWNvbXBpbGVFcXVpcmVjdGFuZ3VsYXJTaGFkZXIoKXtudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fY3ViZW1hcFNoYWRlciYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksbnVsbCE9PXRoaXMuX2VxdWlyZWN0U2hhZGVyJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDx1TS5sZW5ndGg7dCsrKXVNW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQobFUpLHQuc2Npc3NvclRlc3Q9ITEsSlIodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQsZSl7bFU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IGk9ZXx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxpKSx0aGlzLl9hcHBseVBNUkVNKGkpLHRoaXMuX2NsZWFudXAoaSksaX1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCBlPXttYWdGaWx0ZXI6YnMsbWluRmlsdGVyOmJzLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOnV5LGZvcm1hdDp6cyxlbmNvZGluZzpEaCxkZXB0aEJ1ZmZlcjohMX0saT15YWUoZSk7cmV0dXJuIGkuZGVwdGhCdWZmZXI9IXQsbnVsbD09PXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0JiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9eWFlKGUpKSxpfV9jb21waWxlTWF0ZXJpYWwodCl7bGV0IGU9bmV3IHlvKHVNWzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUoZSxhVSl9X3NjZW5lVG9DdWJlVVYodCxlLGkscil7bGV0IGE9bmV3IHhzKDkwLDEsZSxpKSxsPVsxLC0xLDEsMSwxLDFdLGM9WzEsMSwxLC0xLC0xLC0xXSx1PXRoaXMuX3JlbmRlcmVyLGQ9dS5hdXRvQ2xlYXIscD11LnRvbmVNYXBwaW5nO3UuZ2V0Q2xlYXJDb2xvcihfYWUpLHUudG9uZU1hcHBpbmc9MCx1LmF1dG9DbGVhcj0hMTtsZXQgaD1uZXcgS20oe25hbWU6IlBNUkVNLkJhY2tncm91bmQiLHNpZGU6MSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGY9bmV3IHlvKG5ldyBabSxoKSxtPSExLEM9dC5iYWNrZ3JvdW5kO0M/Qy5pc0NvbG9yJiYoaC5jb2xvci5jb3B5KEMpLHQuYmFja2dyb3VuZD1udWxsLG09ITApOihoLmNvbG9yLmNvcHkoX2FlKSxtPSEwKTtmb3IobGV0IF89MDtfPDY7XysrKXtsZXQgeT1fJTM7MD09PXk/KGEudXAuc2V0KDAsbFtfXSwwKSxhLmxvb2tBdChjW19dLDAsMCkpOjE9PT15PyhhLnVwLnNldCgwLDAsbFtfXSksYS5sb29rQXQoMCxjW19dLDApKTooYS51cC5zZXQoMCxsW19dLDApLGEubG9va0F0KDAsMCxjW19dKSksSlIocix5Kkh1LF8+Mj9IdTowLEh1LEh1KSx1LnNldFJlbmRlclRhcmdldChyKSxtJiZ1LnJlbmRlcihmLGEpLHUucmVuZGVyKHQsYSl9Zi5nZW9tZXRyeS5kaXNwb3NlKCksZi5tYXRlcmlhbC5kaXNwb3NlKCksdS50b25lTWFwcGluZz1wLHUuYXV0b0NsZWFyPWQsdC5iYWNrZ3JvdW5kPUN9X3RleHR1cmVUb0N1YmVVVih0LGUpe2xldCBpPXRoaXMuX3JlbmRlcmVyLHI9MzAxPT09dC5tYXBwaW5nfHwzMDI9PT10Lm1hcHBpbmc7cj8obnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPXhhZSgpKSx0aGlzLl9jdWJlbWFwU2hhZGVyLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9ITE9PT10LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxKTpudWxsPT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJih0aGlzLl9lcXVpcmVjdFNoYWRlcj1iYWUoKSk7bGV0IG89cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLHM9bmV3IHlvKHVNWzBdLG8pLGE9by51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksSlIoZSwwLDAsMypIdSwyKkh1KSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihzLGFVKX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8dmxlO3IrKyl7bGV0IG89TWF0aC5zcXJ0KFpSW3JdKlpSW3JdLVpSW3ItMV0qWlJbci0xXSk7dGhpcy5fYmx1cih0LHItMSxyLG8sdmFlWyhyLTEpJXZhZS5sZW5ndGhdKX1lLmF1dG9DbGVhcj1pfV9ibHVyKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxzLGUsaSxyLCJsYXRpdHVkaW5hbCIsbyksdGhpcy5faGFsZkJsdXIocyx0LGksaSxyLCJsb25naXR1ZGluYWwiLG8pfV9oYWxmQmx1cih0LGUsaSxyLG8scyxhKXtsZXQgbD10aGlzLl9yZW5kZXJlcixjPXRoaXMuX2JsdXJNYXRlcmlhbDsibGF0aXR1ZGluYWwiIT09cyYmImxvbmdpdHVkaW5hbCIhPT1zJiZjb25zb2xlLmVycm9yKCJibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhIik7bGV0IGQ9bmV3IHlvKHVNW3JdLGMpLHA9Yy51bmlmb3JtcyxoPWdhZVtpXS0xLGY9aXNGaW5pdGUobyk/TWF0aC5QSS8oMipoKToyKk1hdGguUEkvMzksbT1vL2YsQz1pc0Zpbml0ZShvKT8xK01hdGguZmxvb3IoMyptKToyMDtDPjIwJiZjb25zb2xlLndhcm4oYHNpZ21hUmFkaWFucywgJHtvfSwgaXMgdG9vIGxhcmdlIGFuZCB3aWxsIGNsaXAsIGFzIGl0IHJlcXVlc3RlZCAke0N9IHNhbXBsZXMgd2hlbiB0aGUgbWF4aW11bSBpcyBzZXQgdG8gMjBgKTtsZXQgXz1bXSx5PTA7Zm9yKGxldCBlZT0wO2VlPDIwOysrZWUpe2xldCBYPWVlL20seGU9TWF0aC5leHAoLVgqWC8yKTtfLnB1c2goeGUpLDA9PT1lZT95Kz14ZTplZTxDJiYoeSs9Mip4ZSl9Zm9yKGxldCBlZT0wO2VlPF8ubGVuZ3RoO2VlKyspX1tlZV09X1tlZV0veTtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPUMscC53ZWlnaHRzLnZhbHVlPV8scC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1mLHAubWlwSW50LnZhbHVlPTgtaTtsZXQgST1nYWVbcl07SlIoZSwzKk1hdGgubWF4KDAsSHUtMipJKSwoMD09PXI/MDoyKkh1KSsyKkkqKHI+ND9yLTgrNDowKSwzKkksMipJKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihkLGFVKX19O2Z1bmN0aW9uIFNVZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPTg7Zm9yKGxldCByPTA7cjx2bGU7cisrKXtsZXQgbz1NYXRoLnBvdygyLGkpO3QucHVzaChvKTtsZXQgcz0xL287cj40P3M9X2xlW3ItOCs0LTFdOjA9PT1yJiYocz0wKSxlLnB1c2gocyk7bGV0IGE9MS8oby0xKSxsPS1hLzIsYz0xK2EvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10sZD02LHA9NixoPTMsZj0yLG09MSxDPW5ldyBGbG9hdDMyQXJyYXkoaCpwKmQpLF89bmV3IEZsb2F0MzJBcnJheShmKnAqZCkseT1uZXcgRmxvYXQzMkFycmF5KG0qcCpkKTtmb3IobGV0IEE9MDtBPGQ7QSsrKXtsZXQgTz1BJTMqMi8zLTEsZWU9QT4yPzA6LTE7Qy5zZXQoW08sZWUsMCxPKzIvMyxlZSwwLE8rMi8zLGVlKzEsMCxPLGVlLDAsTysyLzMsZWUrMSwwLE8sZWUrMSwwXSxoKnAqQSksXy5zZXQodSxmKnAqQSkseS5zZXQoW0EsQSxBLEEsQSxBXSxtKnAqQSl9bGV0IEk9bmV3IEtpO0kuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKEMsaCkpLEkuc2V0QXR0cmlidXRlKCJ1diIsbmV3IExyKF8sZikpLEkuc2V0QXR0cmlidXRlKCJmYWNlSW5kZXgiLG5ldyBMcih5LG0pKSxuLnB1c2goSSksaT40JiZpLS19cmV0dXJue19sb2RQbGFuZXM6bixfc2l6ZUxvZHM6dCxfc2lnbWFzOmV9fWZ1bmN0aW9uIHlhZShuKXtsZXQgdD1uZXcgdmEoMypIdSwzKkh1LG4pO3JldHVybiB0LnRleHR1cmUubWFwcGluZz0zMDYsdC50ZXh0dXJlLm5hbWU9IlBNUkVNLmN1YmVVdiIsdC5zY2lzc29yVGVzdD0hMCx0fWZ1bmN0aW9uIEpSKG4sdCxlLGkscil7bi52aWV3cG9ydC5zZXQodCxlLGksciksbi5zY2lzc29yLnNldCh0LGUsaSxyKX1mdW5jdGlvbiBiYWUoKXtsZXQgbj1uZXcgSmUoMSwxKTtyZXR1cm4gbmV3IHl5KHtuYW1lOiJFcXVpcmVjdGFuZ3VsYXJUb0N1YmVVViIsdW5pZm9ybXM6e2Vudk1hcDp7dmFsdWU6bnVsbH0sdGV4ZWxTaXplOnt2YWx1ZTpufX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIHZlYzIgdGV4ZWxTaXplO1xuXG5cdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cblx0XHRcdFx0dmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTtcblx0XHRcdFx0dmVjMiB1diA9IGVxdWlyZWN0VXYoIG91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdHZlYzIgZiA9IGZyYWN0KCB1diAvIHRleGVsU2l6ZSAtIDAuNSApO1xuXHRcdFx0XHR1diAtPSBmICogdGV4ZWxTaXplO1xuXHRcdFx0XHR2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueCArPSB0ZXhlbFNpemUueDtcblx0XHRcdFx0dmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnkgKz0gdGV4ZWxTaXplLnk7XG5cdFx0XHRcdHZlYzMgYnIgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54IC09IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblxuXHRcdFx0XHR2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApO1xuXHRcdFx0XHR2ZWMzIGJtID0gbWl4KCBibCwgYnIsIGYueCApO1xuXHRcdFx0XHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24geGFlKCl7cmV0dXJuIG5ldyB5eSh7bmFtZToiQ3ViZW1hcFRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjoiXG5cblx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcblx0XHRhdHRyaWJ1dGUgdmVjMiB1djtcblx0XHRhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4O1xuXG5cdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHQvLyBSSCBjb29yZGluYXRlIHN5c3RlbTsgUE1SRU0gZmFjZS1pbmRleGluZyBjb252ZW50aW9uXG5cdFx0dmVjMyBnZXREaXJlY3Rpb24oIHZlYzIgdXYsIGZsb2F0IGZhY2UgKSB7XG5cblx0XHRcdHV2ID0gMi4wICogdXYgLSAxLjA7XG5cblx0XHRcdHZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApO1xuXG5cdFx0XHRpZiAoIGZhY2UgPT0gMC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7IC8vICggMSwgdiwgdSApIHBvcyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi54ICo9IC0xLjA7IC8vICggLXUsIHYsIDEgKSBwb3MgelxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHpcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGlyZWN0aW9uO1xuXG5cdFx0fVxuXG5cdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHR2T3V0cHV0RGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uKCB1diwgZmFjZUluZGV4ICk7XG5cdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcblxuXHRcdH1cblx0IixmcmFnbWVudFNoYWRlcjoiXG5cblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXJDdWJlIGVudk1hcDtcblxuXHRcdFx0dm9pZCBtYWluKCkge1xuXG5cdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApO1xuXG5cdFx0XHR9XG5cdFx0IixibGVuZGluZzowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gVFVlKG4pe2xldCB0PW5ldyBXZWFrTWFwLGU9bnVsbDtmdW5jdGlvbiBvKGEpe2xldCBsPWEudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7dm9pZCAwIT09YyYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1yZXR1cm57Z2V0OmZ1bmN0aW9uKGEpe2lmKGEmJmEuaXNUZXh0dXJlKXtsZXQgbD1hLm1hcHBpbmcsYz0zMDM9PT1sfHwzMDQ9PT1sLHU9MzAxPT09bHx8MzAyPT09bDtpZihjfHx1KXtpZihhLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSYmITA9PT1hLm5lZWRzUE1SRU1VcGRhdGUpe2EubmVlZHNQTVJFTVVwZGF0ZT0hMTtsZXQgZD10LmdldChhKTtyZXR1cm4gbnVsbD09PWUmJihlPW5ldyB4MihuKSksZD1jP2UuZnJvbUVxdWlyZWN0YW5ndWxhcihhLGQpOmUuZnJvbUN1YmVtYXAoYSxkKSx0LnNldChhLGQpLGQudGV4dHVyZX1pZih0LmhhcyhhKSlyZXR1cm4gdC5nZXQoYSkudGV4dHVyZTt7bGV0IGQ9YS5pbWFnZTtpZihjJiZkJiZkLmhlaWdodD4wfHx1JiZkJiZmdW5jdGlvbihhKXtsZXQgbD0wO2ZvcihsZXQgdT0wO3U8Njt1Kyspdm9pZCAwIT09YVt1XSYmbCsrO3JldHVybiA2PT09bH0oZCkpe251bGw9PT1lJiYoZT1uZXcgeDIobikpO2xldCBwPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEpOmUuZnJvbUN1YmVtYXAoYSk7cmV0dXJuIHQuc2V0KGEscCksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxwLnRleHR1cmV9cmV0dXJuIG51bGx9fX1yZXR1cm4gYX0sZGlzcG9zZTpmdW5jdGlvbigpe3Q9bmV3IFdlYWtNYXAsbnVsbCE9PWUmJihlLmRpc3Bvc2UoKSxlPW51bGwpfX19ZnVuY3Rpb24gRFVlKG4pe2xldCB0PXt9O2Z1bmN0aW9uIGUoaSl7aWYodm9pZCAwIT09dFtpXSlyZXR1cm4gdFtpXTtsZXQgcjtzd2l0Y2goaSl7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6cj1uLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6cj1uLmdldEV4dGVuc2lvbihpKX1yZXR1cm4gdFtpXT1yLHJ9cmV0dXJue2hhczpmdW5jdGlvbihpKXtyZXR1cm4gbnVsbCE9PWUoaSl9LGluaXQ6ZnVuY3Rpb24oaSl7aS5pc1dlYkdMMj9lKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KGUoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxlKCJPRVNfdGV4dHVyZV9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLGUoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLGUoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxlKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGUoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSksZSgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiksZSgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiksZSgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihpKXtsZXQgcj1lKGkpO3JldHVybiBudWxsPT09ciYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2krIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxyfX19ZnVuY3Rpb24gQVVlKG4sdCxlLGkpe2xldCByPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcyhkKXtsZXQgcD1kLnRhcmdldDtudWxsIT09cC5pbmRleCYmdC5yZW1vdmUocC5pbmRleCk7Zm9yKGxldCBmIGluIHAuYXR0cmlidXRlcyl0LnJlbW92ZShwLmF0dHJpYnV0ZXNbZl0pO3AucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscyksZGVsZXRlIHJbcC5pZF07bGV0IGg9by5nZXQocCk7aCYmKHQucmVtb3ZlKGgpLG8uZGVsZXRlKHApKSxpLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KHApLCEwPT09cC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5JiZkZWxldGUgcC5fbWF4SW5zdGFuY2VDb3VudCxlLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gYyhkKXtsZXQgcD1bXSxoPWQuaW5kZXgsZj1kLmF0dHJpYnV0ZXMucG9zaXRpb24sbT0wO2lmKG51bGwhPT1oKXtsZXQgeT1oLmFycmF5O209aC52ZXJzaW9uO2ZvcihsZXQgST0wLEE9eS5sZW5ndGg7STxBO0krPTMpe2xldCBPPXlbSSswXSxlZT15W0krMV0sWD15W0krMl07cC5wdXNoKE8sZWUsZWUsWCxYLE8pfX1lbHNle209Zi52ZXJzaW9uO2ZvcihsZXQgST0wLEE9Zi5hcnJheS5sZW5ndGgvMy0xO0k8QTtJKz0zKXtsZXQgTz1JKzAsZWU9SSsxLFg9SSsyO3AucHVzaChPLGVlLGVlLFgsWCxPKX19bGV0IEM9bmV3KG1sZShwKT95Mjp2MikocCwxKTtDLnZlcnNpb249bTtsZXQgXz1vLmdldChkKTtfJiZ0LnJlbW92ZShfKSxvLnNldChkLEMpfXJldHVybntnZXQ6ZnVuY3Rpb24oZCxwKXtyZXR1cm4hMD09PXJbcC5pZF18fChwLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHJbcC5pZF09ITAsZS5tZW1vcnkuZ2VvbWV0cmllcysrKSxwfSx1cGRhdGU6ZnVuY3Rpb24oZCl7bGV0IHA9ZC5hdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBwKXQudXBkYXRlKHBbZl0sMzQ5NjIpO2xldCBoPWQubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZiBpbiBoKXtsZXQgbT1oW2ZdO2ZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl0LnVwZGF0ZShtW0NdLDM0OTYyKX19LGdldFdpcmVmcmFtZUF0dHJpYnV0ZTpmdW5jdGlvbihkKXtsZXQgcD1vLmdldChkKTtpZihwKXtsZXQgaD1kLmluZGV4O251bGwhPT1oJiZwLnZlcnNpb248aC52ZXJzaW9uJiZjKGQpfWVsc2UgYyhkKTtyZXR1cm4gby5nZXQoZCl9fX1mdW5jdGlvbiBJVWUobix0LGUsaSl7bGV0IG8sYSxsLHI9aS5pc1dlYkdMMjt0aGlzLnNldE1vZGU9ZnVuY3Rpb24ocCl7bz1wfSx0aGlzLnNldEluZGV4PWZ1bmN0aW9uKHApe2E9cC50eXBlLGw9cC5ieXRlc1BlckVsZW1lbnR9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKHAsaCl7bi5kcmF3RWxlbWVudHMobyxoLGEscCpsKSxlLnVwZGF0ZShoLG8sMSl9LHRoaXMucmVuZGVySW5zdGFuY2VzPWZ1bmN0aW9uKHAsaCxmKXtpZigwPT09ZilyZXR1cm47bGV0IG0sQztpZihyKW09bixDPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYobT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLEM9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixudWxsPT09bSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTEluZGV4ZWRCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7bVtDXShvLGgsYSxwKmwsZiksZS51cGRhdGUoaCxvLGYpfX1mdW5jdGlvbiBQVWUobil7bGV0IGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtyZXR1cm57bWVtb3J5OntnZW9tZXRyaWVzOjAsdGV4dHVyZXM6MH0scmVuZGVyOmUscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6ZnVuY3Rpb24oKXtlLmZyYW1lKyssZS5jYWxscz0wLGUudHJpYW5nbGVzPTAsZS5wb2ludHM9MCxlLmxpbmVzPTB9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7c3dpdGNoKGUuY2FsbHMrKyxzKXtjYXNlIDQ6ZS50cmlhbmdsZXMrPWEqKG8vMyk7YnJlYWs7Y2FzZSAxOmUubGluZXMrPWEqKG8vMik7YnJlYWs7Y2FzZSAzOmUubGluZXMrPWEqKG8tMSk7YnJlYWs7Y2FzZSAyOmUubGluZXMrPWEqbzticmVhaztjYXNlIDA6ZS5wb2ludHMrPWEqbzticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixzKX19fX12YXIgSU09Y2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPUlvLHRoaXMubWluRmlsdGVyPUlvLHRoaXMud3JhcFI9WmEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07ZnVuY3Rpb24gUlVlKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBPVWUobix0KXtyZXR1cm4gTWF0aC5hYnModFsxXSktTWF0aC5hYnMoblsxXSl9ZnVuY3Rpb24gQ2FlKG4sdCl7bGV0IGU9MSxpPXQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT90LmRhdGEuYXJyYXk6dC5hcnJheTtpIGluc3RhbmNlb2YgSW50OEFycmF5P2U9MTI3OmkgaW5zdGFuY2VvZiBJbnQxNkFycmF5P2U9MzI3Njc6aSBpbnN0YW5jZW9mIEludDMyQXJyYXk/ZT0yMTQ3NDgzNjQ3OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMTW9ycGh0YXJnZXRzOiBVbnN1cHBvcnRlZCBtb3JwaCBhdHRyaWJ1dGUgZGF0YSB0eXBlOiAiLGkpLG4uZGl2aWRlU2NhbGFyKGUpfWZ1bmN0aW9uIGtVZShuLHQsZSl7bGV0IGk9e30scj1uZXcgRmxvYXQzMkFycmF5KDgpLG89bmV3IFdlYWtNYXAscz1uZXcgJCxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGMsdSxkLHApe2xldCBoPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKCEwPT09dC5pc1dlYkdMMil7bGV0IGY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLG09by5nZXQodSk7aWYodm9pZCAwPT09bXx8bS5jb3VudCE9PWYpe2xldCBuZT1mdW5jdGlvbigpe3ZlLmRpc3Bvc2UoKSxvLmRlbGV0ZSh1KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX07dm9pZCAwIT09bSYmbS50ZXh0dXJlLmRpc3Bvc2UoKTtsZXQgeT12b2lkIDAhPT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsST11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixBPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbHx8W10sZWU9ITA9PT15PzI6MSxYPXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCplZSx4ZT0xO1g+dC5tYXhUZXh0dXJlU2l6ZSYmKHhlPU1hdGguY2VpbChYL3QubWF4VGV4dHVyZVNpemUpLFg9dC5tYXhUZXh0dXJlU2l6ZSk7bGV0IGZlPW5ldyBGbG9hdDMyQXJyYXkoWCp4ZSo0KmYpLHZlPW5ldyBJTShmZSxYLHhlLGYpO3ZlLmZvcm1hdD16cyx2ZS50eXBlPVltLHZlLm5lZWRzVXBkYXRlPSEwO2xldCBUPTQqZWU7Zm9yKGxldCBsZT0wO2xlPGY7bGUrKyl7bGV0IGhlPUlbbGVdLHllPUFbbGVdLEo9WCp4ZSo0KmxlO2ZvcihsZXQgYWU9MDthZTxoZS5jb3VudDthZSsrKXtzLmZyb21CdWZmZXJBdHRyaWJ1dGUoaGUsYWUpLCEwPT09aGUubm9ybWFsaXplZCYmQ2FlKHMsaGUpO2xldCBtZT1hZSpUO2ZlW0orbWUrMF09cy54LGZlW0orbWUrMV09cy55LGZlW0orbWUrMl09cy56LGZlW0orbWUrM109MCwhMD09PXkmJihzLmZyb21CdWZmZXJBdHRyaWJ1dGUoeWUsYWUpLCEwPT09eWUubm9ybWFsaXplZCYmQ2FlKHMseWUpLGZlW0orbWUrNF09cy54LGZlW0orbWUrNV09cy55LGZlW0orbWUrNl09cy56LGZlW0orbWUrN109MCl9fW09e2NvdW50OmYsdGV4dHVyZTp2ZSxzaXplOm5ldyBKZShYLHhlKX0sby5zZXQodSxtKSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG5lKX1sZXQgQz0wO2ZvcihsZXQgeT0wO3k8aC5sZW5ndGg7eSsrKUMrPWhbeV07bGV0IF89dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEtQztwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixfKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixoKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZSIsbS50ZXh0dXJlLGUpLHAuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZSIsbS5zaXplKX1lbHNle2xldCBmPXZvaWQgMD09PWg/MDpoLmxlbmd0aCxtPWlbdS5pZF07aWYodm9pZCAwPT09bXx8bS5sZW5ndGghPT1mKXttPVtdO2ZvcihsZXQgQT0wO0E8ZjtBKyspbVtBXT1bQSwwXTtpW3UuaWRdPW19Zm9yKGxldCBBPTA7QTxmO0ErKyl7bGV0IE89bVtBXTtPWzBdPUEsT1sxXT1oW0FdfW0uc29ydChPVWUpO2ZvcihsZXQgQT0wO0E8ODtBKyspQTxmJiZtW0FdWzFdPyhhW0FdWzBdPW1bQV1bMF0sYVtBXVsxXT1tW0FdWzFdKTooYVtBXVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixhW0FdWzFdPTApO2Euc29ydChSVWUpO2xldCBDPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLF89dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHk9MDtmb3IobGV0IEE9MDtBPDg7QSsrKXtsZXQgTz1hW0FdLGVlPU9bMF0sWD1PWzFdO2VlIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJlg/KEMmJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkhPT1DW2VlXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitBLENbZWVdKSxfJiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpIT09X1tlZV0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrQSxfW2VlXSkscltBXT1YLHkrPVgpOihDJiYhMD09PXUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSkmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrQSksXyYmITA9PT11Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK0EpLHJbQV09MCl9bGV0IEk9dS5tb3JwaFRhcmdldHNSZWxhdGl2ZT8xOjEteTtwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlIixJKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIixyKX19fX1mdW5jdGlvbiBGVWUobix0LGUsaSl7bGV0IHI9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLG51bGwhPT1jLmluc3RhbmNlQ29sb3ImJmUucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihsKXtsZXQgYz1pLnJlbmRlci5mcmFtZSxkPXQuZ2V0KGwsbC5nZW9tZXRyeSk7cmV0dXJuIHIuZ2V0KGQpIT09YyYmKHQudXBkYXRlKGQpLHIuc2V0KGQsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYoITE9PT1sLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGUudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLG51bGwhPT1sLmluc3RhbmNlQ29sb3ImJmUudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGR9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtyPW5ldyBXZWFrTWFwfX19SU0ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO3ZhciBDMj1jbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy53cmFwUj1aYSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtDMi5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZTNEPSEwO3ZhciB5bGU9bmV3IGJvLGJsZT1uZXcgSU0seGxlPW5ldyBDMixDbGU9bmV3IF95LHdhZT1bXSxNYWU9W10sU2FlPW5ldyBGbG9hdDMyQXJyYXkoMTYpLEVhZT1uZXcgRmxvYXQzMkFycmF5KDkpLFRhZT1uZXcgRmxvYXQzMkFycmF5KDQpO2Z1bmN0aW9uIER5KG4sdCxlKXtsZXQgaT1uWzBdO2lmKGk8PTB8fGk+MClyZXR1cm4gbjtsZXQgcj10KmUsbz13YWVbcl07aWYodm9pZCAwPT09byYmKG89bmV3IEZsb2F0MzJBcnJheShyKSx3YWVbcl09byksMCE9PXQpe2kudG9BcnJheShvLDApO2ZvcihsZXQgcz0xLGE9MDtzIT09dDsrK3MpYSs9ZSxuW3NdLnRvQXJyYXkobyxhKX1yZXR1cm4gb31mdW5jdGlvbiBqcyhuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKWlmKG5bZV0hPT10W2VdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHdzKG4sdCl7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKW5bZV09dFtlXX1mdW5jdGlvbiBXMihuLHQpe2xldCBlPU1hZVt0XTt2b2lkIDA9PT1lJiYoZT1uZXcgSW50MzJBcnJheSh0KSxNYWVbdF09ZSk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKWVbaV09bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIGV9ZnVuY3Rpb24gTlVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTFmKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIExVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55KSYmKG4udW5pZm9ybTJmKHRoaXMuYWRkcix0LngsdC55KSxlWzBdPXQueCxlWzFdPXQueSk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm0yZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEJVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodm9pZCAwIT09dC54KShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56KSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LngsdC55LHQueiksZVswXT10LngsZVsxXT10LnksZVsyXT10LnopO2Vsc2UgaWYodm9pZCAwIT09dC5yKShlWzBdIT09dC5yfHxlWzFdIT09dC5nfHxlWzJdIT09dC5iKSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LnIsdC5nLHQuYiksZVswXT10LnIsZVsxXT10LmcsZVsyXT10LmIpO2Vsc2V7aWYoanMoZSx0KSlyZXR1cm47bi51bmlmb3JtM2Z2KHRoaXMuYWRkcix0KSx3cyhlLHQpfX1mdW5jdGlvbiBWVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQuenx8ZVszXSE9PXQudykmJihuLnVuaWZvcm00Zih0aGlzLmFkZHIsdC54LHQueSx0LnosdC53KSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlWzNdPXQudyk7ZWxzZXtpZihqcyhlLHQpKXJldHVybjtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLHQpLHdzKGUsdCl9fWZ1bmN0aW9uIEhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1RhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxUYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIFVVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO0VhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxFYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIHpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGUsaT10LmVsZW1lbnRzO2lmKHZvaWQgMD09PWkpe2lmKGpzKGUsdCkpcmV0dXJuO24udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsdCksd3MoZSx0KX1lbHNle2lmKGpzKGUsaSkpcmV0dXJuO1NhZS5zZXQoaSksbi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxTYWUpLHdzKGUsaSl9fWZ1bmN0aW9uIGpVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBHVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2pzKGUsdCl8fChuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFdVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTNpdih0aGlzLmFkZHIsdCksd3MoZSx0KSl9ZnVuY3Rpb24gcVVlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtqcyhlLHQpfHwobi51bmlmb3JtNGl2KHRoaXMuYWRkcix0KSx3cyhlLHQpKX1mdW5jdGlvbiBZVWUobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMXVpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIFhVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFFVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIEtVZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7anMoZSx0KXx8KG4udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpLHdzKGUsdCkpfWZ1bmN0aW9uIFpVZShuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zYWZlU2V0VGV4dHVyZTJEKHR8fHlsZSxyKX1mdW5jdGlvbiBKVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTNEKHR8fHhsZSxyKX1mdW5jdGlvbiAkVWUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmVDdWJlKHR8fENsZSxyKX1mdW5jdGlvbiBlemUobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTJEQXJyYXkodHx8YmxlLHIpfWZ1bmN0aW9uIG56ZShuLHQpe24udW5pZm9ybTFmdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaXplKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsMik7bi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiByemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSwzKTtuLnVuaWZvcm0zZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIG96ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDQpO24udW5pZm9ybTRmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gc3plKG4sdCl7bGV0IGU9RHkodCx0aGlzLnNpemUsNCk7bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBhemUobix0KXtsZXQgZT1EeSh0LHRoaXMuc2l6ZSw5KTtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGx6ZShuLHQpe2xldCBlPUR5KHQsdGhpcy5zaXplLDE2KTtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLGUpfWZ1bmN0aW9uIGN6ZShuLHQpe24udW5pZm9ybTFpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gdXplKG4sdCl7bi51bmlmb3JtMml2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBkemUobix0KXtuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHB6ZShuLHQpe24udW5pZm9ybTRpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gaHplKG4sdCl7bi51bmlmb3JtMXVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZnplKG4sdCl7bi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gbXplKG4sdCl7bi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gZ3plKG4sdCl7bi51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gX3plKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZTJEKHRbb118fHlsZSxyW29dKX1mdW5jdGlvbiB2emUobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9VzIoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUzRCh0W29dfHx4bGUscltvXSl9ZnVuY3Rpb24geXplKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVcyKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zYWZlU2V0VGV4dHVyZUN1YmUodFtvXXx8Q2xlLHJbb10pfWZ1bmN0aW9uIGJ6ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1XMihlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2V0VGV4dHVyZTJEQXJyYXkodFtvXXx8YmxlLHJbb10pfWZ1bmN0aW9uIEN6ZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBOVWU7Y2FzZSAzNTY2NDpyZXR1cm4gTFVlO2Nhc2UgMzU2NjU6cmV0dXJuIEJVZTtjYXNlIDM1NjY2OnJldHVybiBWVWU7Y2FzZSAzNTY3NDpyZXR1cm4gSFVlO2Nhc2UgMzU2NzU6cmV0dXJuIFVVZTtjYXNlIDM1Njc2OnJldHVybiB6VWU7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGpVZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIEdVZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIFdVZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIHFVZTtjYXNlIDUxMjU6cmV0dXJuIFlVZTtjYXNlIDM2Mjk0OnJldHVybiBYVWU7Y2FzZSAzNjI5NTpyZXR1cm4gUVVlO2Nhc2UgMzYyOTY6cmV0dXJuIEtVZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFpVZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gSlVlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuICRVZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBlemV9fSh0LnR5cGUpfWZ1bmN0aW9uIHdsZShuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIG56ZTtjYXNlIDM1NjY0OnJldHVybiBpemU7Y2FzZSAzNTY2NTpyZXR1cm4gcnplO2Nhc2UgMzU2NjY6cmV0dXJuIG96ZTtjYXNlIDM1Njc0OnJldHVybiBzemU7Y2FzZSAzNTY3NTpyZXR1cm4gYXplO2Nhc2UgMzU2NzY6cmV0dXJuIGx6ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gY3plO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gdXplO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gZHplO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gcHplO2Nhc2UgNTEyNTpyZXR1cm4gaHplO2Nhc2UgMzYyOTQ6cmV0dXJuIGZ6ZTtjYXNlIDM2Mjk1OnJldHVybiBtemU7Y2FzZSAzNjI5NjpyZXR1cm4gZ3plO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gX3plO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB2emU7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4geXplO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIGJ6ZX19KHQudHlwZSl9ZnVuY3Rpb24gTWxlKG4pe3RoaXMuaWQ9bix0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX13bGUucHJvdG90eXBlLnVwZGF0ZUNhY2hlPWZ1bmN0aW9uKG4pe2xldCB0PXRoaXMuY2FjaGU7biBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSYmdC5sZW5ndGghPT1uLmxlbmd0aCYmKHRoaXMuY2FjaGU9bmV3IEZsb2F0MzJBcnJheShuLmxlbmd0aCkpLHdzKHQsbil9LE1sZS5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRoaXMuc2VxO2ZvcihsZXQgcj0wLG89aS5sZW5ndGg7ciE9PW87KytyKXtsZXQgcz1pW3JdO3Muc2V0VmFsdWUobix0W3MuaWRdLGUpfX07dmFyIGNVPS8oXHcrKShcXSk/KFxbfFwuKT8vZztmdW5jdGlvbiBEYWUobix0KXtuLnNlcS5wdXNoKHQpLG4ubWFwW3QuaWRdPXR9ZnVuY3Rpb24gd3plKG4sdCxlKXtsZXQgaT1uLm5hbWUscj1pLmxlbmd0aDtmb3IoY1UubGFzdEluZGV4PTA7Oyl7bGV0IG89Y1UuZXhlYyhpKSxzPWNVLmxhc3RJbmRleCxhPW9bMV0sYz1vWzNdO2lmKCJdIj09PW9bMl0mJihhfD0wKSx2b2lkIDA9PT1jfHwiWyI9PT1jJiZzKzI9PT1yKXtEYWUoZSx2b2lkIDA9PT1jP25ldyBDemUoYSxuLHQpOm5ldyB3bGUoYSxuLHQpKTticmVha317bGV0IGQ9ZS5tYXBbYV07dm9pZCAwPT09ZCYmKGQ9bmV3IE1sZShhKSxEYWUoZSxkKSksZT1kfX19ZnVuY3Rpb24gVGgobix0KXt0aGlzLnNlcT1bXSx0aGlzLm1hcD17fTtsZXQgZT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcxOCk7Zm9yKGxldCBpPTA7aTxlOysraSl7bGV0IHI9bi5nZXRBY3RpdmVVbmlmb3JtKHQsaSk7d3plKHIsbi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpLHRoaXMpfX1mdW5jdGlvbiBBYWUobix0LGUpe2xldCBpPW4uY3JlYXRlU2hhZGVyKHQpO3JldHVybiBuLnNoYWRlclNvdXJjZShpLGUpLG4uY29tcGlsZVNoYWRlcihpKSxpfVRoLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj10aGlzLm1hcFt0XTt2b2lkIDAhPT1yJiZyLnNldFZhbHVlKG4sZSxpKX0sVGgucHJvdG90eXBlLnNldE9wdGlvbmFsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10W2VdO3ZvaWQgMCE9PWkmJnRoaXMuc2V0VmFsdWUobixlLGkpfSxUaC51cGxvYWQ9ZnVuY3Rpb24obix0LGUsaSl7Zm9yKGxldCByPTAsbz10Lmxlbmd0aDtyIT09bzsrK3Ipe2xldCBzPXRbcl0sYT1lW3MuaWRdOyExIT09YS5uZWVkc1VwZGF0ZSYmcy5zZXRWYWx1ZShuLGEudmFsdWUsaSl9fSxUaC5zZXFXaXRoVmFsdWU9ZnVuY3Rpb24obix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MCxyPW4ubGVuZ3RoO2khPT1yOysraSl7bGV0IG89bltpXTtvLmlkIGluIHQmJmUucHVzaChvKX1yZXR1cm4gZX07dmFyIE16ZT0wO2Z1bmN0aW9uIElhZShuLHQsZSl7bGV0IGk9bi5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMykscj1uLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBpJiYiIj09PXI/IiI6ZS50b1VwcGVyQ2FzZSgpKyJcblxuIityKyJcblxuIitmdW5jdGlvbihuKXtsZXQgdD1uLnNwbGl0KCJcbiIpO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKCJcbiIpfShuLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24gVHplKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgRGg6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIEZyOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fSh0KTtyZXR1cm4idmVjNCAiK24rIiggdmVjNCB2YWx1ZSApIHsgcmV0dXJuIExpbmVhclRvIitlWzBdK2VbMV0rIjsgfSJ9ZnVuY3Rpb24gRHplKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMTplPSJMaW5lYXIiO2JyZWFrO2Nhc2UgMjplPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSAzOmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSA0OmU9IkFDRVNGaWxtaWMiO2JyZWFrO2Nhc2UgNTplPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCksZT0iTGluZWFyIn1yZXR1cm4idmVjMyAiK24rIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrZSsiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIF9NKG4pe3JldHVybiIiIT09bn1mdW5jdGlvbiBQYWUobix0KXtyZXR1cm4gbi5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLHQubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyx0Lm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csdC5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLHQubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLHQubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csdC5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csdC5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gUmFlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgUnplPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gRVUobil7cmV0dXJuIG4ucmVwbGFjZShSemUsT3plKX1mdW5jdGlvbiBPemUobix0KXtsZXQgZT1iaVt0XTtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBFcnJvcigiQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwiK3QrIj4iKTtyZXR1cm4gRVUoZSl9dmFyIGt6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcFtcc10rP2ZvciBcKCBpbnQgaSBcPSAoXGQrKVw7IGkgPCAoXGQrKVw7IGkgXCtcKyBcKSBceyhbXHNcU10rPykoPz1cfSlcfS9nLEZ6ZT0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIE9hZShuKXtyZXR1cm4gbi5yZXBsYWNlKEZ6ZSxTbGUpLnJlcGxhY2Uoa3plLE56ZSl9ZnVuY3Rpb24gTnplKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxTbGUoMCx0LGUsaSl9ZnVuY3Rpb24gU2xlKG4sdCxlLGkpe2xldCByPSIiO2ZvcihsZXQgbz1wYXJzZUludCh0KTtvPHBhcnNlSW50KGUpO28rKylyKz1pLnJlcGxhY2UoL1xbXHMqaVxzKlxdL2csIlsgIitvKyIgXSIpLnJlcGxhY2UoL1VOUk9MTEVEX0xPT1BfSU5ERVgvZyxvKTtyZXR1cm4gcn1mdW5jdGlvbiBrYWUobil7bGV0IHQ9InByZWNpc2lvbiAiK24ucHJlY2lzaW9uKyIgZmxvYXQ7XG5wcmVjaXNpb24gIituLnByZWNpc2lvbisiIGludDsiO3JldHVybiJoaWdocCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIEhJR0hfUFJFQ0lTSU9OIjoibWVkaXVtcCI9PT1uLnByZWNpc2lvbj90Kz0iXG4jZGVmaW5lIE1FRElVTV9QUkVDSVNJT04iOiJsb3dwIj09PW4ucHJlY2lzaW9uJiYodCs9IlxuI2RlZmluZSBMT1dfUFJFQ0lTSU9OIiksdH1mdW5jdGlvbiBVemUobix0LGUsaSl7bGV0IG0sQyxyPW4uZ2V0Q29udGV4dCgpLG89ZS5kZWZpbmVzLHM9ZS52ZXJ0ZXhTaGFkZXIsYT1lLmZyYWdtZW50U2hhZGVyLGw9ZnVuY3Rpb24obil7bGV0IHQ9IlNIQURPV01BUF9UWVBFX0JBU0lDIjtyZXR1cm4gMT09PW4uc2hhZG93TWFwVHlwZT90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOjI9PT1uLnNoYWRvd01hcFR5cGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOjM9PT1uLnNoYWRvd01hcFR5cGUmJih0PSJTSEFET1dNQVBfVFlQRV9WU00iKSx0fShlKSxjPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfVFlQRV9DVUJFIjtpZihuLmVudk1hcClzd2l0Y2gobi5lbnZNYXBNb2RlKXtjYXNlIDMwMTpjYXNlIDMwMjp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIDMwNjpjYXNlIDMwNzp0PSJFTlZNQVBfVFlQRV9DVUJFX1VWIn1yZXR1cm4gdH0oZSksdT1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX01PREVfUkVGTEVDVElPTiI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSAzMDI6Y2FzZSAzMDc6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiJ9cmV0dXJuIHR9KGUpLGQ9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9CTEVORElOR19OT05FIjtpZihuLmVudk1hcClzd2l0Y2gobi5jb21iaW5lKXtjYXNlIDA6dD0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIDE6dD0iRU5WTUFQX0JMRU5ESU5HX01JWCI7YnJlYWs7Y2FzZSAyOnQ9IkVOVk1BUF9CTEVORElOR19BREQifXJldHVybiB0fShlKSxwPWUuaXNXZWJHTDI/IiI6ZnVuY3Rpb24obil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8InBoeXNpY2FsIj09PW4uc2hhZGVySUQ/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcihfTSkuam9pbigiXG4iKX0oZSksaD1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbil7bGV0IGk9bltlXTshMSE9PWkmJnQucHVzaCgiI2RlZmluZSAiK2UrIiAiK2kpfXJldHVybiB0LmpvaW4oIlxuIil9KG8pLGY9ci5jcmVhdGVQcm9ncmFtKCksXz1lLmdsc2xWZXJzaW9uPyIjdmVyc2lvbiAiK2UuZ2xzbFZlcnNpb24rIlxuIjoiIjtlLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KG09W2hdLmZpbHRlcihfTSkuam9pbigiXG4iKSxtLmxlbmd0aD4wJiYobSs9IlxuIiksQz1bcCxoXS5maWx0ZXIoX00pLmpvaW4oIlxuIiksQy5sZW5ndGg+MCYmKEMrPSJcbiIpKToobT1ba2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS5pbnN0YW5jaW5nPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HIjoiIixlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfSU5TVEFOQ0lOR19DT0xPUiI6IiIsZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFZFUlRFWF9URVhUVVJFUyI6IiIsIiNkZWZpbmUgTUFYX0JPTkVTICIrZS5tYXhCb25lcyxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLmRpc3BsYWNlbWVudE1hcCYmZS5zdXBwb3J0c1ZlcnRleFRleHR1cmVzPyIjZGVmaW5lIFVTRV9ESVNQTEFDRU1FTlRNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnM/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5za2lubmluZz8iI2RlZmluZSBVU0VfU0tJTk5JTkciOiIiLGUudXNlVmVydGV4VGV4dHVyZT8iI2RlZmluZSBCT05FX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzPyIjZGVmaW5lIFVTRV9NT1JQSFRBUkdFVFMiOiIiLGUubW9ycGhOb3JtYWxzJiYhMT09PWUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgVVNFX01PUlBITk9STUFMUyI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX1RFWFRVUkUiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19DT1VOVCAiK2UubW9ycGhUYXJnZXRzQ291bnQ6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUuc2l6ZUF0dGVudWF0aW9uPyIjZGVmaW5lIFVTRV9TSVpFQVRURU5VQVRJT04iOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4OyIsInVuaWZvcm0gbWF0NCBtb2RlbFZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHByb2plY3Rpb25NYXRyaXg7IiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSBtYXQzIG5vcm1hbE1hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lORyIsIlx0YXR0cmlidXRlIG1hdDQgaW5zdGFuY2VNYXRyaXg7IiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SIiwiXHRhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCJcdGF0dHJpYnV0ZSB2ZWM0IHRhbmdlbnQ7IiwiI2VuZGlmIiwiI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApIiwiXHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjsiLCIjZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSIsIlx0YXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDA7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDE7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiXHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDM7IiwiXHQjaWZkZWYgVVNFX01PUlBITk9STUFMUyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDA7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwyOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDM7IiwiXHQjZWxzZSIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDQ7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ2OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDc7IiwiXHQjZW5kaWYiLCIjZW5kaWYiLCIjaWZkZWYgVVNFX1NLSU5OSU5HIiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiXHRhdHRyaWJ1dGUgdmVjNCBza2luV2VpZ2h0OyIsIiNlbmRpZiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpLEM9W3Asa2FlKGUpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrZS5zaGFkZXJOYW1lLGgsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrYzoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitkOiIiLGUubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixlLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsZS5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLGUuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsZS5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsZS5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsZS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLGUuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLGUuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsZS52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsZS52ZXJ0ZXhDb2xvcnN8fGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKGUuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ZS5lbnZNYXApJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsMCE9PWUudG9uZU1hcHBpbmc/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIiwwIT09ZS50b25lTWFwcGluZz9iaS50b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIiLDAhPT1lLnRvbmVNYXBwaW5nP0R6ZSgidG9uZU1hcHBpbmciLGUudG9uZU1hcHBpbmcpOiIiLGUuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsZS5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsYmkuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsVHplKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsIlxuIl0uZmlsdGVyKF9NKS5qb2luKCJcbiIpKSxzPUVVKHMpLHM9UGFlKHMsZSkscz1SYWUocyxlKSxhPUVVKGEpLGE9UGFlKGEsZSksYT1SYWUoYSxlKSxzPU9hZShzKSxhPU9hZShhKSxlLmlzV2ViR0wyJiYhMCE9PWUuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKF89IiN2ZXJzaW9uIDMwMCBlc1xuIixtPVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oIlxuIikrIlxuIittLEM9WyIjZGVmaW5lIHZhcnlpbmcgaW4iLCIzMDAgZXMiPT09ZS5nbHNsVmVyc2lvbj8iIjoibGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IGhpZ2hwIHZlYzQgcGNfZnJhZ0NvbG9yOyIsIjMwMCBlcyI9PT1lLmdsc2xWZXJzaW9uPyIiOiIjZGVmaW5lIGdsX0ZyYWdDb2xvciBwY19mcmFnQ29sb3IiLCIjZGVmaW5lIGdsX0ZyYWdEZXB0aEVYVCBnbF9GcmFnRGVwdGgiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZSB0ZXh0dXJlIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qIHRleHR1cmVQcm9qIiwiI2RlZmluZSB0ZXh0dXJlMkRMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakxvZEVYVCB0ZXh0dXJlUHJvakxvZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVMb2RFWFQgdGV4dHVyZUxvZCIsIiNkZWZpbmUgdGV4dHVyZTJER3JhZEVYVCB0ZXh0dXJlR3JhZCIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvakdyYWRFWFQgdGV4dHVyZVByb2pHcmFkIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUdyYWRFWFQgdGV4dHVyZUdyYWQiXS5qb2luKCJcbiIpKyJcbiIrQyk7bGV0IGVlLFgsST1fK0MrYSxBPUFhZShyLDM1NjMzLF8rbStzKSxPPUFhZShyLDM1NjMyLEkpO2lmKHIuYXR0YWNoU2hhZGVyKGYsQSksci5hdHRhY2hTaGFkZXIoZixPKSx2b2lkIDAhPT1lLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1lLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZiksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IHhlPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZikudHJpbSgpLGZlPXIuZ2V0U2hhZGVySW5mb0xvZyhBKS50cmltKCksdmU9ci5nZXRTaGFkZXJJbmZvTG9nKE8pLnRyaW0oKSxUPSEwLG5lPSEwO2lmKCExPT09ci5nZXRQcm9ncmFtUGFyYW1ldGVyKGYsMzU3MTQpKXtUPSExO2xldCBsZT1JYWUocixBLCJ2ZXJ0ZXgiKSxoZT1JYWUocixPLCJmcmFnbWVudCIpO2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICIrci5nZXRFcnJvcigpKyIgLSBWQUxJREFURV9TVEFUVVMgIityLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNSkrIlxuXG5Qcm9ncmFtIEluZm8gTG9nOiAiK3hlKyJcbiIrbGUrIlxuIitoZSl9ZWxzZSIiIT09eGU/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6Iix4ZSk6KCIiPT09ZmV8fCIiPT09dmUpJiYobmU9ITEpO25lJiYodGhpcy5kaWFnbm9zdGljcz17cnVubmFibGU6VCxwcm9ncmFtTG9nOnhlLHZlcnRleFNoYWRlcjp7bG9nOmZlLHByZWZpeDptfSxmcmFnbWVudFNoYWRlcjp7bG9nOnZlLHByZWZpeDpDfX0pfXJldHVybiByLmRlbGV0ZVNoYWRlcihBKSxyLmRlbGV0ZVNoYWRlcihPKSx0aGlzLmdldFVuaWZvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWVlJiYoZWU9bmV3IFRoKHIsZikpLGVlfSx0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9ZnVuY3Rpb24obix0KXtsZXQgZT17fSxpPW4uZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzIxKTtmb3IobGV0IHI9MDtyPGk7cisrKXtsZXQgbz1uLmdldEFjdGl2ZUF0dHJpYih0LHIpLHM9by5uYW1lLGE9MTszNTY3ND09PW8udHlwZSYmKGE9MiksMzU2NzU9PT1vLnR5cGUmJihhPTMpLDM1Njc2PT09by50eXBlJiYoYT00KSxlW3NdPXt0eXBlOm8udHlwZSxsb2NhdGlvbjpuLmdldEF0dHJpYkxvY2F0aW9uKHQscyksbG9jYXRpb25TaXplOmF9fXJldHVybiBlfShyLGYpKSxYfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLnJlbGVhc2VTdGF0ZXNPZlByb2dyYW0odGhpcyksci5kZWxldGVQcm9ncmFtKGYpLHRoaXMucHJvZ3JhbT12b2lkIDB9LHRoaXMubmFtZT1lLnNoYWRlck5hbWUsdGhpcy5pZD1NemUrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09Zix0aGlzLnZlcnRleFNoYWRlcj1BLHRoaXMuZnJhZ21lbnRTaGFkZXI9Tyx0aGlzfXZhciB6emU9MDtmdW5jdGlvbiBqemUobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IF8yLGw9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgaT10LmZyYWdtZW50U2hhZGVyLHI9dGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLG89dGhpcy5fZ2V0U2hhZGVyU3RhZ2UoaSkscz10aGlzLl9nZXRTaGFkZXJDYWNoZUZvck1hdGVyaWFsKHQpO3JldHVybiExPT09cy5oYXMocikmJihzLmFkZChyKSxyLnVzZWRUaW1lcysrKSwhMT09PXMuaGFzKG8pJiYocy5hZGQobyksby51c2VkVGltZXMrKyksdGhpc31yZW1vdmUodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlLmdldCh0KTtmb3IobGV0IGkgb2YgZSlpLnVzZWRUaW1lcy0tLDA9PT1pLnVzZWRUaW1lcyYmdGhpcy5zaGFkZXJDYWNoZS5kZWxldGUoaSk7cmV0dXJuIHRoaXMubWF0ZXJpYWxDYWNoZS5kZWxldGUodCksdGhpc31nZXRWZXJ0ZXhTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC52ZXJ0ZXhTaGFkZXIpLmlkfWdldEZyYWdtZW50U2hhZGVySUQodCl7cmV0dXJuIHRoaXMuX2dldFNoYWRlclN0YWdlKHQuZnJhZ21lbnRTaGFkZXIpLmlkfWRpc3Bvc2UoKXt0aGlzLnNoYWRlckNhY2hlLmNsZWFyKCksdGhpcy5tYXRlcmlhbENhY2hlLmNsZWFyKCl9X2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCl7bGV0IGU9dGhpcy5tYXRlcmlhbENhY2hlO3JldHVybiExPT09ZS5oYXModCkmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoITE9PT1lLmhhcyh0KSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5pZD16emUrKyx0aGlzLnVzZWRUaW1lcz0wfX07ZS5zZXQodCxpKX1yZXR1cm4gZS5nZXQodCl9fSxjPVtdLHU9ci5pc1dlYkdMMixkPXIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixwPXIuZmxvYXRWZXJ0ZXhUZXh0dXJlcyxoPXIubWF4VmVydGV4VW5pZm9ybXMsZj1yLnZlcnRleFRleHR1cmVzLG09ci5wcmVjaXNpb24sQz17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9O3JldHVybntnZXRQYXJhbWV0ZXJzOmZ1bmN0aW9uKFQsbmUsbGUsaGUseWUpe2xldCBGZSx1dCxTdCxndCxKPWhlLmZvZyxtZT0oVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KFQuZW52TWFwfHwoVC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2hlLmVudmlyb25tZW50Om51bGwpKSxqZT1DW1QudHlwZV0sTWU9eWUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbihUKXtsZXQgbGU9VC5za2VsZXRvbi5ib25lcztpZihwKXJldHVybiAxMDI0O3tsZXQgeWU9TWF0aC5mbG9vcigoaC0yMCkvNCksSj1NYXRoLm1pbih5ZSxsZS5sZW5ndGgpO3JldHVybiBKPGxlLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitsZS5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitKKyIuIiksMCk6Sn19KHllKTowO2lmKG51bGwhPT1ULnByZWNpc2lvbiYmKG09ci5nZXRNYXhQcmVjaXNpb24oVC5wcmVjaXNpb24pLG0hPT1ULnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLFQucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsbSwiaW5zdGVhZC4iKSksamUpe2xldCBDZT1VdVtqZV07RmU9Q2UudmVydGV4U2hhZGVyLHV0PUNlLmZyYWdtZW50U2hhZGVyfWVsc2UgRmU9VC52ZXJ0ZXhTaGFkZXIsdXQ9VC5mcmFnbWVudFNoYWRlcixsLnVwZGF0ZShUKSxTdD1sLmdldFZlcnRleFNoYWRlcklEKFQpLGd0PWwuZ2V0RnJhZ21lbnRTaGFkZXJJRChUKTtsZXQgUmU9bi5nZXRSZW5kZXJUYXJnZXQoKSxFdD1ULmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOmplLHNoYWRlck5hbWU6VC50eXBlLHZlcnRleFNoYWRlcjpGZSxmcmFnbWVudFNoYWRlcjp1dCxkZWZpbmVzOlQuZGVmaW5lcyxjdXN0b21WZXJ0ZXhTaGFkZXJJRDpTdCxjdXN0b21GcmFnbWVudFNoYWRlcklEOmd0LGlzUmF3U2hhZGVyTWF0ZXJpYWw6ITA9PT1ULmlzUmF3U2hhZGVyTWF0ZXJpYWwsZ2xzbFZlcnNpb246VC5nbHNsVmVyc2lvbixwcmVjaXNpb246bSxpbnN0YW5jaW5nOiEwPT09eWUuaXNJbnN0YW5jZWRNZXNoLGluc3RhbmNpbmdDb2xvcjohMD09PXllLmlzSW5zdGFuY2VkTWVzaCYmbnVsbCE9PXllLmluc3RhbmNlQ29sb3Isc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczpmLG91dHB1dEVuY29kaW5nOm51bGw9PT1SZT9uLm91dHB1dEVuY29kaW5nOiEwPT09UmUuaXNYUlJlbmRlclRhcmdldD9SZS50ZXh0dXJlLmVuY29kaW5nOkRoLG1hcDohIVQubWFwLG1hdGNhcDohIVQubWF0Y2FwLGVudk1hcDohIW1lLGVudk1hcE1vZGU6bWUmJm1lLm1hcHBpbmcsZW52TWFwQ3ViZVVWOiEhbWUmJigzMDY9PT1tZS5tYXBwaW5nfHwzMDc9PT1tZS5tYXBwaW5nKSxsaWdodE1hcDohIVQubGlnaHRNYXAsYW9NYXA6ISFULmFvTWFwLGVtaXNzaXZlTWFwOiEhVC5lbWlzc2l2ZU1hcCxidW1wTWFwOiEhVC5idW1wTWFwLG5vcm1hbE1hcDohIVQubm9ybWFsTWFwLG9iamVjdFNwYWNlTm9ybWFsTWFwOjE9PT1ULm5vcm1hbE1hcFR5cGUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOjA9PT1ULm5vcm1hbE1hcFR5cGUsZGVjb2RlVmlkZW9UZXh0dXJlOiEhVC5tYXAmJiEwPT09VC5tYXAuaXNWaWRlb1RleHR1cmUmJlQubWFwLmVuY29kaW5nPT09RnIsY2xlYXJjb2F0OkV0LGNsZWFyY29hdE1hcDpFdCYmISFULmNsZWFyY29hdE1hcCxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6RXQmJiEhVC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsY2xlYXJjb2F0Tm9ybWFsTWFwOkV0JiYhIVQuY2xlYXJjb2F0Tm9ybWFsTWFwLGRpc3BsYWNlbWVudE1hcDohIVQuZGlzcGxhY2VtZW50TWFwLHJvdWdobmVzc01hcDohIVQucm91Z2huZXNzTWFwLG1ldGFsbmVzc01hcDohIVQubWV0YWxuZXNzTWFwLHNwZWN1bGFyTWFwOiEhVC5zcGVjdWxhck1hcCxzcGVjdWxhckludGVuc2l0eU1hcDohIVQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsc3BlY3VsYXJDb2xvck1hcDohIVQuc3BlY3VsYXJDb2xvck1hcCxhbHBoYU1hcDohIVQuYWxwaGFNYXAsYWxwaGFUZXN0OlQuYWxwaGFUZXN0PjAsYWxwaGFXcml0ZTpULmFscGhhV3JpdGV8fFQudHJhbnNwYXJlbnQsZ3JhZGllbnRNYXA6ISFULmdyYWRpZW50TWFwLHNoZWVuOlQuc2hlZW4+MCxzaGVlbkNvbG9yTWFwOiEhVC5zaGVlbkNvbG9yTWFwLHNoZWVuUm91Z2huZXNzTWFwOiEhVC5zaGVlblJvdWdobmVzc01hcCx0cmFuc21pc3Npb246VC50cmFuc21pc3Npb24+MCx0cmFuc21pc3Npb25NYXA6ISFULnRyYW5zbWlzc2lvbk1hcCx0aGlja25lc3NNYXA6ISFULnRoaWNrbmVzc01hcCxjb21iaW5lOlQuY29tYmluZSx2ZXJ0ZXhUYW5nZW50czohIVQubm9ybWFsTWFwJiYhIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6VC52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOiEwPT09VC52ZXJ0ZXhDb2xvcnMmJiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvciYmND09PXllLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemUsdmVydGV4VXZzOiEhKFQubWFwfHxULmJ1bXBNYXB8fFQubm9ybWFsTWFwfHxULnNwZWN1bGFyTWFwfHxULmFscGhhTWFwfHxULmVtaXNzaXZlTWFwfHxULnJvdWdobmVzc01hcHx8VC5tZXRhbG5lc3NNYXB8fFQuY2xlYXJjb2F0TWFwfHxULmNsZWFyY29hdFJvdWdobmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQuZGlzcGxhY2VtZW50TWFwfHxULnRyYW5zbWlzc2lvbk1hcHx8VC50aGlja25lc3NNYXB8fFQuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fFQuc3BlY3VsYXJDb2xvck1hcHx8VC5zaGVlbkNvbG9yTWFwfHxULnNoZWVuUm91Z2huZXNzTWFwKSx1dnNWZXJ0ZXhPbmx5OiEoVC5tYXB8fFQuYnVtcE1hcHx8VC5ub3JtYWxNYXB8fFQuc3BlY3VsYXJNYXB8fFQuYWxwaGFNYXB8fFQuZW1pc3NpdmVNYXB8fFQucm91Z2huZXNzTWFwfHxULm1ldGFsbmVzc01hcHx8VC5jbGVhcmNvYXROb3JtYWxNYXB8fFQudHJhbnNtaXNzaW9uPjB8fFQudHJhbnNtaXNzaW9uTWFwfHxULnRoaWNrbmVzc01hcHx8VC5zcGVjdWxhckludGVuc2l0eU1hcHx8VC5zcGVjdWxhckNvbG9yTWFwfHxULnNoZWVuPjB8fFQuc2hlZW5Db2xvck1hcHx8VC5zaGVlblJvdWdobmVzc01hcHx8IVQuZGlzcGxhY2VtZW50TWFwKSxmb2c6ISFKLHVzZUZvZzpULmZvZyxmb2dFeHAyOkomJkouaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhVC5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246VC5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpkLHNraW5uaW5nOiEwPT09eWUuaXNTa2lubmVkTWVzaCYmTWU+MCxtYXhCb25lczpNZSx1c2VWZXJ0ZXhUZXh0dXJlOnAsbW9ycGhUYXJnZXRzOiEheWUuZ2VvbWV0cnkmJiEheWUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIXllLmdlb21ldHJ5JiYhIXllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsbW9ycGhUYXJnZXRzQ291bnQ6eWUuZ2VvbWV0cnkmJnllLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj95ZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsbnVtRGlyTGlnaHRzOm5lLmRpcmVjdGlvbmFsLmxlbmd0aCxudW1Qb2ludExpZ2h0czpuZS5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpuZS5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpuZS5yZWN0QXJlYS5sZW5ndGgsbnVtSGVtaUxpZ2h0czpuZS5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6bmUuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOm5lLnBvaW50U2hhZG93TWFwLmxlbmd0aCxudW1TcG90TGlnaHRTaGFkb3dzOm5lLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOnMubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246cy5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOlQuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6bi5zaGFkb3dNYXAuZW5hYmxlZCYmbGUubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTpuLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOlQudG9uZU1hcHBlZD9uLnRvbmVNYXBwaW5nOjAscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6bi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6VC5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6Mj09PVQuc2lkZSxmbGlwU2lkZWQ6MT09PVQuc2lkZSxkZXB0aFBhY2tpbmc6dm9pZCAwIT09VC5kZXB0aFBhY2tpbmcmJlQuZGVwdGhQYWNraW5nLGluZGV4MEF0dHJpYnV0ZU5hbWU6VC5pbmRleDBBdHRyaWJ1dGVOYW1lLGV4dGVuc2lvbkRlcml2YXRpdmVzOlQuZXh0ZW5zaW9ucyYmVC5leHRlbnNpb25zLmRlcml2YXRpdmVzLGV4dGVuc2lvbkZyYWdEZXB0aDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5mcmFnRGVwdGgsZXh0ZW5zaW9uRHJhd0J1ZmZlcnM6VC5leHRlbnNpb25zJiZULmV4dGVuc2lvbnMuZHJhd0J1ZmZlcnMsZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRDpULmV4dGVuc2lvbnMmJlQuZXh0ZW5zaW9ucy5zaGFkZXJUZXh0dXJlTE9ELHJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoOnV8fGkuaGFzKCJFWFRfZnJhZ19kZXB0aCIpLHJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM6dXx8aS5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZDp1fHxpLmhhcygiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpLGN1c3RvbVByb2dyYW1DYWNoZUtleTpULmN1c3RvbVByb2dyYW1DYWNoZUtleSgpfX0sZ2V0UHJvZ3JhbUNhY2hlS2V5OmZ1bmN0aW9uKFQpe2xldCBuZT1bXTtpZihULnNoYWRlcklEP25lLnB1c2goVC5zaGFkZXJJRCk6KG5lLnB1c2goVC5jdXN0b21WZXJ0ZXhTaGFkZXJJRCksbmUucHVzaChULmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSx2b2lkIDAhPT1ULmRlZmluZXMpZm9yKGxldCBsZSBpbiBULmRlZmluZXMpbmUucHVzaChsZSksbmUucHVzaChULmRlZmluZXNbbGVdKTtyZXR1cm4hMT09PVQuaXNSYXdTaGFkZXJNYXRlcmlhbCYmKGZ1bmN0aW9uKFQsbmUpe1QucHVzaChuZS5wcmVjaXNpb24pLFQucHVzaChuZS5vdXRwdXRFbmNvZGluZyksVC5wdXNoKG5lLmVudk1hcE1vZGUpLFQucHVzaChuZS5jb21iaW5lKSxULnB1c2gobmUudmVydGV4VXZzKSxULnB1c2gobmUuZm9nRXhwMiksVC5wdXNoKG5lLnNpemVBdHRlbnVhdGlvbiksVC5wdXNoKG5lLm1heEJvbmVzKSxULnB1c2gobmUubW9ycGhUYXJnZXRzQ291bnQpLFQucHVzaChuZS5udW1EaXJMaWdodHMpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodHMpLFQucHVzaChuZS5udW1IZW1pTGlnaHRzKSxULnB1c2gobmUubnVtUmVjdEFyZWFMaWdodHMpLFQucHVzaChuZS5udW1EaXJMaWdodFNoYWRvd3MpLFQucHVzaChuZS5udW1Qb2ludExpZ2h0U2hhZG93cyksVC5wdXNoKG5lLm51bVNwb3RMaWdodFNoYWRvd3MpLFQucHVzaChuZS5zaGFkb3dNYXBUeXBlKSxULnB1c2gobmUudG9uZU1hcHBpbmcpLFQucHVzaChuZS5udW1DbGlwcGluZ1BsYW5lcyksVC5wdXNoKG5lLm51bUNsaXBJbnRlcnNlY3Rpb24pLFQucHVzaChuZS5hbHBoYVdyaXRlKX0obmUsVCksZnVuY3Rpb24oVCxuZSl7YS5kaXNhYmxlQWxsKCksbmUuaXNXZWJHTDImJmEuZW5hYmxlKDApLG5lLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJmEuZW5hYmxlKDEpLG5lLmluc3RhbmNpbmcmJmEuZW5hYmxlKDIpLG5lLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksbmUubWFwJiZhLmVuYWJsZSg0KSxuZS5tYXRjYXAmJmEuZW5hYmxlKDUpLG5lLmVudk1hcCYmYS5lbmFibGUoNiksbmUuZW52TWFwQ3ViZVVWJiZhLmVuYWJsZSg3KSxuZS5saWdodE1hcCYmYS5lbmFibGUoOCksbmUuYW9NYXAmJmEuZW5hYmxlKDkpLG5lLmVtaXNzaXZlTWFwJiZhLmVuYWJsZSgxMCksbmUuYnVtcE1hcCYmYS5lbmFibGUoMTEpLG5lLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLG5lLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxMyksbmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxNCksbmUuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksbmUuY2xlYXJjb2F0TWFwJiZhLmVuYWJsZSgxNiksbmUuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZhLmVuYWJsZSgxNyksbmUuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksbmUuZGlzcGxhY2VtZW50TWFwJiZhLmVuYWJsZSgxOSksbmUuc3BlY3VsYXJNYXAmJmEuZW5hYmxlKDIwKSxuZS5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxuZS5tZXRhbG5lc3NNYXAmJmEuZW5hYmxlKDIyKSxuZS5ncmFkaWVudE1hcCYmYS5lbmFibGUoMjMpLG5lLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksbmUuYWxwaGFUZXN0JiZhLmVuYWJsZSgyNSksbmUudmVydGV4Q29sb3JzJiZhLmVuYWJsZSgyNiksbmUudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksbmUudmVydGV4VXZzJiZhLmVuYWJsZSgyOCksbmUudmVydGV4VGFuZ2VudHMmJmEuZW5hYmxlKDI5KSxuZS51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksbmUuZm9nJiZhLmVuYWJsZSgzMSksVC5wdXNoKGEubWFzayksYS5kaXNhYmxlQWxsKCksbmUudXNlRm9nJiZhLmVuYWJsZSgwKSxuZS5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksbmUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmYS5lbmFibGUoMiksbmUuc2tpbm5pbmcmJmEuZW5hYmxlKDMpLG5lLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLG5lLm1vcnBoVGFyZ2V0cyYmYS5lbmFibGUoNSksbmUubW9ycGhOb3JtYWxzJiZhLmVuYWJsZSg2KSxuZS5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLG5lLnNoYWRvd01hcEVuYWJsZWQmJmEuZW5hYmxlKDgpLG5lLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzJiZhLmVuYWJsZSg5KSxuZS5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLG5lLmZsaXBTaWRlZCYmYS5lbmFibGUoMTEpLG5lLmRlcHRoUGFja2luZyYmYS5lbmFibGUoMTIpLG5lLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLG5lLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZhLmVuYWJsZSgxNCksbmUuc3BlY3VsYXJDb2xvck1hcCYmYS5lbmFibGUoMTUpLG5lLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLG5lLnRyYW5zbWlzc2lvbk1hcCYmYS5lbmFibGUoMTcpLG5lLnRoaWNrbmVzc01hcCYmYS5lbmFibGUoMTgpLG5lLnNoZWVuJiZhLmVuYWJsZSgxOSksbmUuc2hlZW5Db2xvck1hcCYmYS5lbmFibGUoMjApLG5lLnNoZWVuUm91Z2huZXNzTWFwJiZhLmVuYWJsZSgyMSksbmUuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMiksVC5wdXNoKGEubWFzayl9KG5lLFQpLG5lLnB1c2gobi5vdXRwdXRFbmNvZGluZykpLG5lLnB1c2goVC5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLG5lLmpvaW4oKX0sZ2V0VW5pZm9ybXM6ZnVuY3Rpb24oVCl7bGV0IGxlLG5lPUNbVC50eXBlXTtyZXR1cm4gbGU9bmU/VTVlLmNsb25lKFV1W25lXS51bmlmb3Jtcyk6VC51bmlmb3JtcyxsZX0sYWNxdWlyZVByb2dyYW06ZnVuY3Rpb24oVCxuZSl7bGV0IGxlO2ZvcihsZXQgaGU9MCx5ZT1jLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1jW2hlXTtpZihKLmNhY2hlS2V5PT09bmUpe2xlPUosKytsZS51c2VkVGltZXM7YnJlYWt9fXJldHVybiB2b2lkIDA9PT1sZSYmKGxlPW5ldyBVemUobixuZSxULG8pLGMucHVzaChsZSkpLGxlfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbihUKXtpZigwPT0tLVQudXNlZFRpbWVzKXtsZXQgbmU9Yy5pbmRleE9mKFQpO2NbbmVdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSxULmRlc3Ryb3koKX19LHJlbGVhc2VTaGFkZXJDYWNoZTpmdW5jdGlvbihUKXtsLnJlbW92ZShUKX0scHJvZ3JhbXM6YyxkaXNwb3NlOmZ1bmN0aW9uKCl7bC5kaXNwb3NlKCl9fX1mdW5jdGlvbiBHemUoKXtsZXQgbj1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8pe2xldCBzPW4uZ2V0KG8pO3JldHVybiB2b2lkIDA9PT1zJiYocz17fSxuLnNldChvLHMpKSxzfSxyZW1vdmU6ZnVuY3Rpb24obyl7bi5kZWxldGUobyl9LHVwZGF0ZTpmdW5jdGlvbihvLHMsYSl7bi5nZXQobylbc109YX0sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBXemUobix0KXtyZXR1cm4gbi5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP24uZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6bi5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/bi5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOm4ubWF0ZXJpYWwuaWQhPT10Lm1hdGVyaWFsLmlkP24ubWF0ZXJpYWwuaWQtdC5tYXRlcmlhbC5pZDpuLnohPT10Lno/bi56LXQuejpuLmlkLXQuaWR9ZnVuY3Rpb24gRmFlKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLnohPT10Lno/dC56LW4uejpuLmlkLXQuaWR9ZnVuY3Rpb24gTmFlKCl7bGV0IG49W10sdD0wLGU9W10saT1bXSxyPVtdO2Z1bmN0aW9uIHMoZCxwLGgsZixtLEMpe2xldCBfPW5bdF07cmV0dXJuIHZvaWQgMD09PV8/KF89e2lkOmQuaWQsb2JqZWN0OmQsZ2VvbWV0cnk6cCxtYXRlcmlhbDpoLGdyb3VwT3JkZXI6ZixyZW5kZXJPcmRlcjpkLnJlbmRlck9yZGVyLHo6bSxncm91cDpDfSxuW3RdPV8pOihfLmlkPWQuaWQsXy5vYmplY3Q9ZCxfLmdlb21ldHJ5PXAsXy5tYXRlcmlhbD1oLF8uZ3JvdXBPcmRlcj1mLF8ucmVuZGVyT3JkZXI9ZC5yZW5kZXJPcmRlcixfLno9bSxfLmdyb3VwPUMpLHQrKyxffXJldHVybntvcGFxdWU6ZSx0cmFuc21pc3NpdmU6aSx0cmFuc3BhcmVudDpyLGluaXQ6ZnVuY3Rpb24oKXt0PTAsZS5sZW5ndGg9MCxpLmxlbmd0aD0wLHIubGVuZ3RoPTB9LHB1c2g6ZnVuY3Rpb24oZCxwLGgsZixtLEMpe2xldCBfPXMoZCxwLGgsZixtLEMpO2gudHJhbnNtaXNzaW9uPjA/aS5wdXNoKF8pOiEwPT09aC50cmFuc3BhcmVudD9yLnB1c2goXyk6ZS5wdXNoKF8pfSx1bnNoaWZ0OmZ1bmN0aW9uKGQscCxoLGYsbSxDKXtsZXQgXz1zKGQscCxoLGYsbSxDKTtoLnRyYW5zbWlzc2lvbj4wP2kudW5zaGlmdChfKTohMD09PWgudHJhbnNwYXJlbnQ/ci51bnNoaWZ0KF8pOmUudW5zaGlmdChfKX0sZmluaXNoOmZ1bmN0aW9uKCl7Zm9yKGxldCBkPXQscD1uLmxlbmd0aDtkPHA7ZCsrKXtsZXQgaD1uW2RdO2lmKG51bGw9PT1oLmlkKWJyZWFrO2guaWQ9bnVsbCxoLm9iamVjdD1udWxsLGguZ2VvbWV0cnk9bnVsbCxoLm1hdGVyaWFsPW51bGwsaC5ncm91cD1udWxsfX0sc29ydDpmdW5jdGlvbihkLHApe2UubGVuZ3RoPjEmJmUuc29ydChkfHxXemUpLGkubGVuZ3RoPjEmJmkuc29ydChwfHxGYWUpLHIubGVuZ3RoPjEmJnIuc29ydChwfHxGYWUpfX19ZnVuY3Rpb24gcXplKCl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihpLHIpe2xldCBvO3JldHVybiExPT09bi5oYXMoaSk/KG89bmV3IE5hZSxuLnNldChpLFtvXSkpOnI+PW4uZ2V0KGkpLmxlbmd0aD8obz1uZXcgTmFlLG4uZ2V0KGkpLnB1c2gobykpOm89bi5nZXQoaSlbcl0sb30sZGlzcG9zZTpmdW5jdGlvbigpe249bmV3IFdlYWtNYXB9fX1mdW5jdGlvbiBZemUoKXtsZXQgbj17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PW5bdC5pZF0pcmV0dXJuIG5bdC5pZF07bGV0IGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjplPXtkaXJlY3Rpb246bmV3ICQsY29sb3I6bmV3IGFufTticmVhaztjYXNlIlNwb3RMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsZGlyZWN0aW9uOm5ldyAkLGNvbG9yOm5ldyBhbixkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17cG9zaXRpb246bmV3ICQsY29sb3I6bmV3IGFuLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgJCxza3lDb2xvcjpuZXcgYW4sZ3JvdW5kQ29sb3I6bmV3IGFufTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyBhbixwb3NpdGlvbjpuZXcgJCxoYWxmV2lkdGg6bmV3ICQsaGFsZkhlaWdodDpuZXcgJH19cmV0dXJuIG5bdC5pZF09ZSxlfX19dmFyIFF6ZT0wO2Z1bmN0aW9uIEt6ZShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gWnplKG4sdCl7bGV0IGU9bmV3IFl6ZSxpPWZ1bmN0aW9uKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgSmV9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBKZSxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIG5bdC5pZF09ZSxlfX19KCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgJCk7bGV0IG89bmV3ICQscz1uZXcgTW4sYT1uZXcgTW47cmV0dXJue3NldHVwOmZ1bmN0aW9uKHUsZCl7bGV0IHA9MCxoPTAsZj0wO2ZvcihsZXQgZmU9MDtmZTw5O2ZlKyspci5wcm9iZVtmZV0uc2V0KDAsMCwwKTtsZXQgbT0wLEM9MCxfPTAseT0wLEk9MCxBPTAsTz0wLGVlPTA7dS5zb3J0KEt6ZSk7bGV0IFg9ITAhPT1kP01hdGguUEk6MTtmb3IobGV0IGZlPTAsdmU9dS5sZW5ndGg7ZmU8dmU7ZmUrKyl7bGV0IFQ9dVtmZV0sbmU9VC5jb2xvcixsZT1ULmludGVuc2l0eSxoZT1ULmRpc3RhbmNlLHllPVQuc2hhZG93JiZULnNoYWRvdy5tYXA/VC5zaGFkb3cubWFwLnRleHR1cmU6bnVsbDtpZihULmlzQW1iaWVudExpZ2h0KXArPW5lLnIqbGUqWCxoKz1uZS5nKmxlKlgsZis9bmUuYipsZSpYO2Vsc2UgaWYoVC5pc0xpZ2h0UHJvYmUpZm9yKGxldCBKPTA7Sjw5O0orKylyLnByb2JlW0pdLmFkZFNjYWxlZFZlY3RvcihULnNoLmNvZWZmaWNpZW50c1tKXSxsZSk7ZWxzZSBpZihULmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5jb2xvci5jb3B5KFQuY29sb3IpLm11bHRpcGx5U2NhbGFyKFQuaW50ZW5zaXR5KlgpLFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1ttXT1tZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW21dPXllLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbbV09VC5zaGFkb3cubWF0cml4LEErK31yLmRpcmVjdGlvbmFsW21dPUosbSsrfWVsc2UgaWYoVC5pc1Nwb3RMaWdodCl7bGV0IEo9ZS5nZXQoVCk7aWYoSi5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksSi5jb2xvci5jb3B5KG5lKS5tdWx0aXBseVNjYWxhcihsZSpYKSxKLmRpc3RhbmNlPWhlLEouY29uZUNvcz1NYXRoLmNvcyhULmFuZ2xlKSxKLnBlbnVtYnJhQ29zPU1hdGguY29zKFQuYW5nbGUqKDEtVC5wZW51bWJyYSkpLEouZGVjYXk9VC5kZWNheSxULmNhc3RTaGFkb3cpe2xldCBhZT1ULnNoYWRvdyxtZT1pLmdldChUKTttZS5zaGFkb3dCaWFzPWFlLmJpYXMsbWUuc2hhZG93Tm9ybWFsQmlhcz1hZS5ub3JtYWxCaWFzLG1lLnNoYWRvd1JhZGl1cz1hZS5yYWRpdXMsbWUuc2hhZG93TWFwU2l6ZT1hZS5tYXBTaXplLHIuc3BvdFNoYWRvd1tfXT1tZSxyLnNwb3RTaGFkb3dNYXBbX109eWUsci5zcG90U2hhZG93TWF0cml4W19dPVQuc2hhZG93Lm1hdHJpeCxlZSsrfXIuc3BvdFtfXT1KLF8rK31lbHNlIGlmKFQuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLmNvbG9yLmNvcHkobmUpLm11bHRpcGx5U2NhbGFyKGxlKSxKLmhhbGZXaWR0aC5zZXQoLjUqVC53aWR0aCwwLDApLEouaGFsZkhlaWdodC5zZXQoMCwuNSpULmhlaWdodCwwKSxyLnJlY3RBcmVhW3ldPUoseSsrfWVsc2UgaWYoVC5pc1BvaW50TGlnaHQpe2xldCBKPWUuZ2V0KFQpO2lmKEouY29sb3IuY29weShULmNvbG9yKS5tdWx0aXBseVNjYWxhcihULmludGVuc2l0eSpYKSxKLmRpc3RhbmNlPVQuZGlzdGFuY2UsSi5kZWNheT1ULmRlY2F5LFQuY2FzdFNoYWRvdyl7bGV0IGFlPVQuc2hhZG93LG1lPWkuZ2V0KFQpO21lLnNoYWRvd0JpYXM9YWUuYmlhcyxtZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbWUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxtZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsbWUuc2hhZG93Q2FtZXJhTmVhcj1hZS5jYW1lcmEubmVhcixtZS5zaGFkb3dDYW1lcmFGYXI9YWUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W0NdPW1lLHIucG9pbnRTaGFkb3dNYXBbQ109eWUsci5wb2ludFNoYWRvd01hdHJpeFtDXT1ULnNoYWRvdy5tYXRyaXgsTysrfXIucG9pbnRbQ109SixDKyt9ZWxzZSBpZihULmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgSj1lLmdldChUKTtKLnNreUNvbG9yLmNvcHkoVC5jb2xvcikubXVsdGlwbHlTY2FsYXIobGUqWCksSi5ncm91bmRDb2xvci5jb3B5KFQuZ3JvdW5kQ29sb3IpLm11bHRpcGx5U2NhbGFyKGxlKlgpLHIuaGVtaVtJXT1KLEkrK319eT4wJiYodC5pc1dlYkdMMnx8ITA9PT1uLmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik/KHIucmVjdEFyZWFMVEMxPVB0LkxUQ19GTE9BVF8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19GTE9BVF8yKTohMD09PW4uaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpPyhyLnJlY3RBcmVhTFRDMT1QdC5MVENfSEFMRl8xLHIucmVjdEFyZWFMVEMyPVB0LkxUQ19IQUxGXzIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVuYWJsZSB0byB1c2UgUmVjdEFyZWFMaWdodC4gTWlzc2luZyBXZWJHTCBleHRlbnNpb25zLiIpKSxyLmFtYmllbnRbMF09cCxyLmFtYmllbnRbMV09aCxyLmFtYmllbnRbMl09ZjtsZXQgeGU9ci5oYXNoOyh4ZS5kaXJlY3Rpb25hbExlbmd0aCE9PW18fHhlLnBvaW50TGVuZ3RoIT09Q3x8eGUuc3BvdExlbmd0aCE9PV98fHhlLnJlY3RBcmVhTGVuZ3RoIT09eXx8eGUuaGVtaUxlbmd0aCE9PUl8fHhlLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PUF8fHhlLm51bVBvaW50U2hhZG93cyE9PU98fHhlLm51bVNwb3RTaGFkb3dzIT09ZWUpJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9bSxyLnNwb3QubGVuZ3RoPV8sci5yZWN0QXJlYS5sZW5ndGg9eSxyLnBvaW50Lmxlbmd0aD1DLHIuaGVtaS5sZW5ndGg9SSxyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1BLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPUEsci5wb2ludFNoYWRvdy5sZW5ndGg9TyxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1PLHIuc3BvdFNoYWRvdy5sZW5ndGg9ZWUsci5zcG90U2hhZG93TWFwLmxlbmd0aD1lZSxyLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4Lmxlbmd0aD1BLHIucG9pbnRTaGFkb3dNYXRyaXgubGVuZ3RoPU8sci5zcG90U2hhZG93TWF0cml4Lmxlbmd0aD1lZSx4ZS5kaXJlY3Rpb25hbExlbmd0aD1tLHhlLnBvaW50TGVuZ3RoPUMseGUuc3BvdExlbmd0aD1fLHhlLnJlY3RBcmVhTGVuZ3RoPXkseGUuaGVtaUxlbmd0aD1JLHhlLm51bURpcmVjdGlvbmFsU2hhZG93cz1BLHhlLm51bVBvaW50U2hhZG93cz1PLHhlLm51bVNwb3RTaGFkb3dzPWVlLHIudmVyc2lvbj1RemUrKyl9LHNldHVwVmlldzpmdW5jdGlvbih1LGQpe2xldCBwPTAsaD0wLGY9MCxtPTAsQz0wLF89ZC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB5PTAsST11Lmxlbmd0aDt5PEk7eSsrKXtsZXQgQT11W3ldO2lmKEEuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgTz1yLmRpcmVjdGlvbmFsW3BdO08uZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLnRhcmdldC5tYXRyaXhXb3JsZCksTy5kaXJlY3Rpb24uc3ViKG8pLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxwKyt9ZWxzZSBpZihBLmlzU3BvdExpZ2h0KXtsZXQgTz1yLnNwb3RbZl07Ty5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oQS5tYXRyaXhXb3JsZCksTy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoXyksTy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEudGFyZ2V0Lm1hdHJpeFdvcmxkKSxPLmRpcmVjdGlvbi5zdWIobyksTy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKF8pLGYrK31lbHNlIGlmKEEuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgTz1yLnJlY3RBcmVhW21dO08ucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8ucG9zaXRpb24uYXBwbHlNYXRyaXg0KF8pLGEuaWRlbnRpdHkoKSxzLmNvcHkoQS5tYXRyaXhXb3JsZCkscy5wcmVtdWx0aXBseShfKSxhLmV4dHJhY3RSb3RhdGlvbihzKSxPLmhhbGZXaWR0aC5zZXQoLjUqQS53aWR0aCwwLDApLE8uaGFsZkhlaWdodC5zZXQoMCwuNSpBLmhlaWdodCwwKSxPLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQoYSksTy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChhKSxtKyt9ZWxzZSBpZihBLmlzUG9pbnRMaWdodCl7bGV0IE89ci5wb2ludFtoXTtPLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihBLm1hdHJpeFdvcmxkKSxPLnBvc2l0aW9uLmFwcGx5TWF0cml4NChfKSxoKyt9ZWxzZSBpZihBLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgTz1yLmhlbWlbQ107Ty5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLE8uZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbihfKSxPLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxDKyt9fX0sc3RhdGU6cn19ZnVuY3Rpb24gTGFlKG4sdCl7bGV0IGU9bmV3IFp6ZShuLHQpLGk9W10scj1bXTtyZXR1cm57aW5pdDpmdW5jdGlvbigpe2kubGVuZ3RoPTAsci5sZW5ndGg9MH0sc3RhdGU6e2xpZ2h0c0FycmF5Omksc2hhZG93c0FycmF5OnIsbGlnaHRzOmV9LHNldHVwTGlnaHRzOmZ1bmN0aW9uKGQpe2Uuc2V0dXAoaSxkKX0sc2V0dXBMaWdodHNWaWV3OmZ1bmN0aW9uKGQpe2Uuc2V0dXBWaWV3KGksZCl9LHB1c2hMaWdodDpmdW5jdGlvbihkKXtpLnB1c2goZCl9LHB1c2hTaGFkb3c6ZnVuY3Rpb24oZCl7ci5wdXNoKGQpfX19ZnVuY3Rpb24gSnplKG4sdCl7bGV0IGU9bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihvLHM9MCl7bGV0IGE7cmV0dXJuITE9PT1lLmhhcyhvKT8oYT1uZXcgTGFlKG4sdCksZS5zZXQobyxbYV0pKTpzPj1lLmdldChvKS5sZW5ndGg/KGE9bmV3IExhZShuLHQpLGUuZ2V0KG8pLnB1c2goYSkpOmE9ZS5nZXQobylbc10sYX0sZGlzcG9zZTpmdW5jdGlvbigpe2U9bmV3IFdlYWtNYXB9fX12YXIgdzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPTMyMDAsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVwdGhQYWNraW5nPXQuZGVwdGhQYWNraW5nLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzfX07dzIucHJvdG90eXBlLmlzTWVzaERlcHRoTWF0ZXJpYWw9ITA7dmFyIE0yPWNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hEaXN0YW5jZU1hdGVyaWFsIix0aGlzLnJlZmVyZW5jZVBvc2l0aW9uPW5ldyAkLHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX07ZnVuY3Rpb24gRWxlKG4sdCxlKXtsZXQgaT1uZXcgdnkscj1uZXcgSmUsbz1uZXcgSmUscz1uZXcgdHIsYT1uZXcgdzIoe2RlcHRoUGFja2luZzozMjAxfSksbD1uZXcgTTIsYz17fSx1PWUubWF4VGV4dHVyZVNpemUsZD17MDoxLDE6MCwyOjJ9LHA9bmV3IHpkKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBKZX0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6InVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG51bmlmb3JtIGZsb2F0IHJhZGl1cztcbiNpbmNsdWRlIDxwYWNraW5nPlxudm9pZCBtYWluKCkge1xuXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xuXHRmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDtcblx0Zm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7XG5cdFx0ZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlO1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGVwdGg7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcblx0XHQjZW5kaWZcblx0fVxuXHRtZWFuID0gbWVhbiAvIHNhbXBsZXM7XG5cdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7XG5cdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xufSJ9KSxoPXAuY2xvbmUoKTtoLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGY9bmV3IEtpO2Yuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IExyKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgbT1uZXcgeW8oZixwKSxDPXRoaXM7ZnVuY3Rpb24gXyhBLE8pe2xldCBlZT10LnVwZGF0ZShtKTtwLmRlZmluZXMuVlNNX1NBTVBMRVMhPT1BLmJsdXJTYW1wbGVzJiYocC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMsaC5kZWZpbmVzLlZTTV9TQU1QTEVTPUEuYmx1clNhbXBsZXMscC5uZWVkc1VwZGF0ZT0hMCxoLm5lZWRzVXBkYXRlPSEwKSxwLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPUEubWFwLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcFBhc3MpLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChPLG51bGwsZWUscCxtLG51bGwpLGgudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9QS5tYXBQYXNzLnRleHR1cmUsaC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPUEubWFwU2l6ZSxoLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1BLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChBLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KE8sbnVsbCxlZSxoLG0sbnVsbCl9ZnVuY3Rpb24geShBLE8sZWUsWCx4ZSxmZSx2ZSl7bGV0IFQ9bnVsbCxuZT0hMD09PVguaXNQb2ludExpZ2h0P0EuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpBLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoVD12b2lkIDAhPT1uZT9uZTohMD09PVguaXNQb2ludExpZ2h0P2w6YSxuLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiYhMD09PWVlLmNsaXBTaGFkb3dzJiYwIT09ZWUuY2xpcHBpbmdQbGFuZXMubGVuZ3RofHxlZS5kaXNwbGFjZW1lbnRNYXAmJjAhPT1lZS5kaXNwbGFjZW1lbnRTY2FsZXx8ZWUuYWxwaGFNYXAmJmVlLmFscGhhVGVzdD4wKXtsZXQgbGU9VC51dWlkLGhlPWVlLnV1aWQseWU9Y1tsZV07dm9pZCAwPT09eWUmJih5ZT17fSxjW2xlXT15ZSk7bGV0IEo9eWVbaGVdO3ZvaWQgMD09PUomJihKPVQuY2xvbmUoKSx5ZVtoZV09SiksVD1KfXJldHVybiBULnZpc2libGU9ZWUudmlzaWJsZSxULndpcmVmcmFtZT1lZS53aXJlZnJhbWUsVC5zaWRlPTM9PT12ZT9udWxsIT09ZWUuc2hhZG93U2lkZT9lZS5zaGFkb3dTaWRlOmVlLnNpZGU6bnVsbCE9PWVlLnNoYWRvd1NpZGU/ZWUuc2hhZG93U2lkZTpkW2VlLnNpZGVdLFQuYWxwaGFNYXA9ZWUuYWxwaGFNYXAsVC5hbHBoYVRlc3Q9ZWUuYWxwaGFUZXN0LFQuY2xpcFNoYWRvd3M9ZWUuY2xpcFNoYWRvd3MsVC5jbGlwcGluZ1BsYW5lcz1lZS5jbGlwcGluZ1BsYW5lcyxULmNsaXBJbnRlcnNlY3Rpb249ZWUuY2xpcEludGVyc2VjdGlvbixULmRpc3BsYWNlbWVudE1hcD1lZS5kaXNwbGFjZW1lbnRNYXAsVC5kaXNwbGFjZW1lbnRTY2FsZT1lZS5kaXNwbGFjZW1lbnRTY2FsZSxULmRpc3BsYWNlbWVudEJpYXM9ZWUuZGlzcGxhY2VtZW50QmlhcyxULndpcmVmcmFtZUxpbmV3aWR0aD1lZS53aXJlZnJhbWVMaW5ld2lkdGgsVC5saW5ld2lkdGg9ZWUubGluZXdpZHRoLCEwPT09WC5pc1BvaW50TGlnaHQmJiEwPT09VC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsJiYoVC5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oWC5tYXRyaXhXb3JsZCksVC5uZWFyRGlzdGFuY2U9eGUsVC5mYXJEaXN0YW5jZT1mZSksVH1mdW5jdGlvbiBJKEEsTyxlZSxYLHhlKXtpZighMT09PUEudmlzaWJsZSlyZXR1cm47aWYoQS5sYXllcnMudGVzdChPLmxheWVycykmJihBLmlzTWVzaHx8QS5pc0xpbmV8fEEuaXNQb2ludHMpJiYoQS5jYXN0U2hhZG93fHxBLnJlY2VpdmVTaGFkb3cmJjM9PT14ZSkmJighQS5mcnVzdHVtQ3VsbGVkfHxpLmludGVyc2VjdHNPYmplY3QoQSkpKXtBLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKGVlLm1hdHJpeFdvcmxkSW52ZXJzZSxBLm1hdHJpeFdvcmxkKTtsZXQgVD10LnVwZGF0ZShBKSxuZT1BLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkobmUpKXtsZXQgbGU9VC5ncm91cHM7Zm9yKGxldCBoZT0wLHllPWxlLmxlbmd0aDtoZTx5ZTtoZSsrKXtsZXQgSj1sZVtoZV0sYWU9bmVbSi5tYXRlcmlhbEluZGV4XTtpZihhZSYmYWUudmlzaWJsZSl7bGV0IG1lPXkoQSwwLGFlLFgsZWUubmVhcixlZS5mYXIseGUpO24ucmVuZGVyQnVmZmVyRGlyZWN0KGVlLG51bGwsVCxtZSxBLEopfX19ZWxzZSBpZihuZS52aXNpYmxlKXtsZXQgbGU9eShBLDAsbmUsWCxlZS5uZWFyLGVlLmZhcix4ZSk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoZWUsbnVsbCxULGxlLEEsbnVsbCl9fWxldCB2ZT1BLmNoaWxkcmVuO2ZvcihsZXQgVD0wLG5lPXZlLmxlbmd0aDtUPG5lO1QrKylJKHZlW1RdLE8sZWUsWCx4ZSl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT0xLHRoaXMucmVuZGVyPWZ1bmN0aW9uKEEsTyxlZSl7aWYoITE9PT1DLmVuYWJsZWR8fCExPT09Qy5hdXRvVXBkYXRlJiYhMT09PUMubmVlZHNVcGRhdGV8fDA9PT1BLmxlbmd0aClyZXR1cm47bGV0IFg9bi5nZXRSZW5kZXJUYXJnZXQoKSx4ZT1uLmdldEFjdGl2ZUN1YmVGYWNlKCksZmU9bi5nZXRBY3RpdmVNaXBtYXBMZXZlbCgpLHZlPW4uc3RhdGU7dmUuc2V0QmxlbmRpbmcoMCksdmUuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSx2ZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLHZlLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IFQ9MCxuZT1BLmxlbmd0aDtUPG5lO1QrKyl7bGV0IGxlPUFbVF0saGU9bGUuc2hhZG93O2lmKHZvaWQgMD09PWhlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsbGUsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoITE9PT1oZS5hdXRvVXBkYXRlJiYhMT09PWhlLm5lZWRzVXBkYXRlKWNvbnRpbnVlO3IuY29weShoZS5tYXBTaXplKTtsZXQgeWU9aGUuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseSh5ZSksby5jb3B5KGhlLm1hcFNpemUpLChyLng+dXx8ci55PnUpJiYoci54PnUmJihvLng9TWF0aC5mbG9vcih1L3llLngpLHIueD1vLngqeWUueCxoZS5tYXBTaXplLng9by54KSxyLnk+dSYmKG8ueT1NYXRoLmZsb29yKHUveWUueSksci55PW8ueSp5ZS55LGhlLm1hcFNpemUueT1vLnkpKSxudWxsPT09aGUubWFwJiYhaGUuaXNQb2ludExpZ2h0U2hhZG93JiYzPT09dGhpcy50eXBlKXtsZXQgYWU9e21pbkZpbHRlcjpicyxtYWdGaWx0ZXI6YnMsZm9ybWF0OnpzfTtoZS5tYXA9bmV3IHZhKHIueCxyLnksYWUpLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUubWFwUGFzcz1uZXcgdmEoci54LHIueSxhZSksaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1udWxsPT09aGUubWFwJiYoaGUubWFwPW5ldyB2YShyLngsci55LHttaW5GaWx0ZXI6SW8sbWFnRmlsdGVyOklvLGZvcm1hdDp6c30pLGhlLm1hcC50ZXh0dXJlLm5hbWU9bGUubmFtZSsiLnNoYWRvd01hcCIsaGUuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksbi5zZXRSZW5kZXJUYXJnZXQoaGUubWFwKSxuLmNsZWFyKCk7bGV0IEo9aGUuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgYWU9MDthZTxKO2FlKyspe2xldCBtZT1oZS5nZXRWaWV3cG9ydChhZSk7cy5zZXQoby54Km1lLngsby55Km1lLnksby54Km1lLnosby55Km1lLncpLHZlLnZpZXdwb3J0KHMpLGhlLnVwZGF0ZU1hdHJpY2VzKGxlLGFlKSxpPWhlLmdldEZydXN0dW0oKSxJKE8sZWUsaGUuY2FtZXJhLGxlLHRoaXMudHlwZSl9IWhlLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSYmXyhoZSxlZSksaGUubmVlZHNVcGRhdGU9ITF9Qy5uZWVkc1VwZGF0ZT0hMSxuLnNldFJlbmRlclRhcmdldChYLHhlLGZlKX19ZnVuY3Rpb24gdDhlKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyLGE9bmV3IGZ1bmN0aW9uKCl7bGV0IHVlPSExLEp0PW5ldyB0cixVdD1udWxsLFRuPW5ldyB0cigwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihHZSl7VXQhPT1HZSYmIXVlJiYobi5jb2xvck1hc2soR2UsR2UsR2UsR2UpLFV0PUdlKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2UsQ24sbWksbXIsb3MpeyEwPT09b3MmJihHZSo9bXIsQ24qPW1yLG1pKj1tciksSnQuc2V0KEdlLENuLG1pLG1yKSwhMT09PVRuLmVxdWFscyhKdCkmJihuLmNsZWFyQ29sb3IoR2UsQ24sbWksbXIpLFRuLmNvcHkoSnQpKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxVdD1udWxsLFRuLnNldCgtMSwwLDAsMCl9fX0sbD1uZXcgZnVuY3Rpb24oKXtsZXQgdWU9ITEsSnQ9bnVsbCxVdD1udWxsLFRuPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oR2Upe0dlP1JlKDI5MjkpOkFuKDI5MjkpfSxzZXRNYXNrOmZ1bmN0aW9uKEdlKXtKdCE9PUdlJiYhdWUmJihuLmRlcHRoTWFzayhHZSksSnQ9R2UpfSxzZXRGdW5jOmZ1bmN0aW9uKEdlKXtpZihVdCE9PUdlKXtpZihHZSlzd2l0Y2goR2Upe2Nhc2UgMDpuLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgMTpuLmRlcHRoRnVuYyg1MTkpO2JyZWFrO2Nhc2UgMjpuLmRlcHRoRnVuYyg1MTMpO2JyZWFrO2Nhc2UgMzpkZWZhdWx0Om4uZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSA0Om4uZGVwdGhGdW5jKDUxNCk7YnJlYWs7Y2FzZSA1Om4uZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSA2Om4uZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSA3Om4uZGVwdGhGdW5jKDUxNyl9ZWxzZSBuLmRlcHRoRnVuYyg1MTUpO1V0PUdlfX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEdlKXt1ZT1HZX0sc2V0Q2xlYXI6ZnVuY3Rpb24oR2Upe1RuIT09R2UmJihuLmNsZWFyRGVwdGgoR2UpLFRuPUdlKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbH19fSxjPW5ldyBmdW5jdGlvbigpe2xldCB1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGw7cmV0dXJue3NldFRlc3Q6ZnVuY3Rpb24oVHIpe3VlfHwoVHI/UmUoMjk2MCk6QW4oMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKFRyKXtKdCE9PVRyJiYhdWUmJihuLnN0ZW5jaWxNYXNrKFRyKSxKdD1Ucil9LHNldEZ1bmM6ZnVuY3Rpb24oVHIsZWwsV3MpeyhVdCE9PVRyfHxUbiE9PWVsfHxHZSE9PVdzKSYmKG4uc3RlbmNpbEZ1bmMoVHIsZWwsV3MpLFV0PVRyLFRuPWVsLEdlPVdzKX0sc2V0T3A6ZnVuY3Rpb24oVHIsZWwsV3MpeyhDbiE9PVRyfHxtaSE9PWVsfHxtciE9PVdzKSYmKG4uc3RlbmNpbE9wKFRyLGVsLFdzKSxDbj1UcixtaT1lbCxtcj1Xcyl9LHNldExvY2tlZDpmdW5jdGlvbihUcil7dWU9VHJ9LHNldENsZWFyOmZ1bmN0aW9uKFRyKXtvcyE9PVRyJiYobi5jbGVhclN0ZW5jaWwoVHIpLG9zPVRyKX0scmVzZXQ6ZnVuY3Rpb24oKXt1ZT0hMSxKdD1udWxsLFV0PW51bGwsVG49bnVsbCxHZT1udWxsLENuPW51bGwsbWk9bnVsbCxtcj1udWxsLG9zPW51bGx9fX0sdT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsbGU9bi5nZXRQYXJhbWV0ZXIoMzU2NjEpLGhlPSExLHllPTAsSj1uLmdldFBhcmFtZXRlcig3OTM4KTstMSE9PUouaW5kZXhPZigiV2ViR0wiKT8oeWU9cGFyc2VGbG9hdCgvXldlYkdMIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0xKTotMSE9PUouaW5kZXhPZigiT3BlbkdMIEVTIikmJih5ZT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoSilbMV0pLGhlPXllPj0yKTtsZXQgYWU9bnVsbCxtZT17fSxqZT1uLmdldFBhcmFtZXRlcigzMDg4KSxNZT1uLmdldFBhcmFtZXRlcigyOTc4KSxGZT0obmV3IHRyKS5mcm9tQXJyYXkoamUpLHV0PShuZXcgdHIpLmZyb21BcnJheShNZSk7ZnVuY3Rpb24gU3QodWUsSnQsVXQpe2xldCBUbj1uZXcgVWludDhBcnJheSg0KSxHZT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKHVlLEdlKSxuLnRleFBhcmFtZXRlcmkodWUsMTAyNDEsOTcyOCksbi50ZXhQYXJhbWV0ZXJpKHVlLDEwMjQwLDk3MjgpO2ZvcihsZXQgQ249MDtDbjxVdDtDbisrKW4udGV4SW1hZ2UyRChKdCtDbiwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLFRuKTtyZXR1cm4gR2V9bGV0IGd0PXt9O2Z1bmN0aW9uIFJlKHVlKXshMCE9PXVbdWVdJiYobi5lbmFibGUodWUpLHVbdWVdPSEwKX1mdW5jdGlvbiBBbih1ZSl7ITEhPT11W3VlXSYmKG4uZGlzYWJsZSh1ZSksdVt1ZV09ITEpfWd0WzM1NTNdPVN0KDM1NTMsMzU1MywxKSxndFszNDA2N109U3QoMzQwNjcsMzQwNjksNiksYS5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksUmUoMjkyOSksbC5zZXRGdW5jKDMpLFllKCExKSx4dCgxKSxSZSgyODg0KSxpZSgwKTtsZXQgdnQ9ezEwMDozMjc3NCwxMDE6MzI3NzgsMTAyOjMyNzc5fTtpZihpKXZ0WzEwM109MzI3NzUsdnRbMTA0XT0zMjc3NjtlbHNle2xldCB1ZT10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO251bGwhPT11ZSYmKHZ0WzEwM109dWUuTUlOX0VYVCx2dFsxMDRdPXVlLk1BWF9FWFQpfWxldCBfdD17MjAwOjAsMjAxOjEsMjAyOjc2OCwyMDQ6NzcwLDIxMDo3NzYsMjA4Ojc3NCwyMDY6NzcyLDIwMzo3NjksMjA1Ojc3MSwyMDk6Nzc1LDIwNzo3NzN9O2Z1bmN0aW9uIGllKHVlLEp0LFV0LFRuLEdlLENuLG1pLG1yKXtpZigwIT09dWUpe2lmKCExPT09bSYmKFJlKDMwNDIpLG09ITApLDU9PT11ZSlHZT1HZXx8SnQsQ249Q258fFV0LG1pPW1pfHxUbiwoSnQhPT1ffHxHZSE9PUEpJiYobi5ibGVuZEVxdWF0aW9uU2VwYXJhdGUodnRbSnRdLHZ0W0dlXSksXz1KdCxBPUdlKSwoVXQhPT15fHxUbiE9PUl8fENuIT09T3x8bWkhPT1lZSkmJihuLmJsZW5kRnVuY1NlcGFyYXRlKF90W1V0XSxfdFtUbl0sX3RbQ25dLF90W21pXSkseT1VdCxJPVRuLE89Q24sZWU9bWkpLEM9dWUsWD1udWxsO2Vsc2UgaWYodWUhPT1DfHxtciE9PVgpe2lmKCgxMDAhPT1ffHwxMDAhPT1BKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksXz0xMDAsQT0xMDApLG1yKXN3aXRjaCh1ZSl7Y2FzZSAxOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSA0Om4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9ZWxzZSBzd2l0Y2godWUpe2Nhc2UgMTpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIDQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIix1ZSl9eT1udWxsLEk9bnVsbCxPPW51bGwsZWU9bnVsbCxDPXVlLFg9bXJ9fWVsc2UhMD09PW0mJihBbigzMDQyKSxtPSExKX1mdW5jdGlvbiBZZSh1ZSl7eGUhPT11ZSYmKG4uZnJvbnRGYWNlKHVlPzIzMDQ6MjMwNSkseGU9dWUpfWZ1bmN0aW9uIHh0KHVlKXswIT09dWU/KFJlKDI4ODQpLHVlIT09ZmUmJm4uY3VsbEZhY2UoMT09PXVlPzEwMjk6Mj09PXVlPzEwMjg6MTAzMikpOkFuKDI4ODQpLGZlPXVlfWZ1bmN0aW9uIHNuKHVlLEp0LFV0KXt1ZT8oUmUoMzI4MjMpLChUIT09SnR8fG5lIT09VXQpJiYobi5wb2x5Z29uT2Zmc2V0KEp0LFV0KSxUPUp0LG5lPVV0KSk6QW4oMzI4MjMpfWZ1bmN0aW9uIG9pKHVlKXt2b2lkIDA9PT11ZSYmKHVlPTMzOTg0K2xlLTEpLGFlIT09dWUmJihuLmFjdGl2ZVRleHR1cmUodWUpLGFlPXVlKX1yZXR1cm57YnVmZmVyczp7Y29sb3I6YSxkZXB0aDpsLHN0ZW5jaWw6Y30sZW5hYmxlOlJlLGRpc2FibGU6QW4sYmluZEZyYW1lYnVmZmVyOmZ1bmN0aW9uKHVlLEp0KXtyZXR1cm4gZFt1ZV0hPT1KdCYmKG4uYmluZEZyYW1lYnVmZmVyKHVlLEp0KSxkW3VlXT1KdCxpJiYoMzYwMDk9PT11ZSYmKGRbMzYxNjBdPUp0KSwzNjE2MD09PXVlJiYoZFszNjAwOV09SnQpKSwhMCl9LGRyYXdCdWZmZXJzOmZ1bmN0aW9uKHVlLEp0KXtsZXQgVXQ9aCxUbj0hMTtpZih1ZSlpZihVdD1wLmdldChKdCksdm9pZCAwPT09VXQmJihVdD1bXSxwLnNldChKdCxVdCkpLHVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpe2xldCBHZT11ZS50ZXh0dXJlO2lmKFV0Lmxlbmd0aCE9PUdlLmxlbmd0aHx8MzYwNjQhPT1VdFswXSl7Zm9yKGxldCBDbj0wLG1pPUdlLmxlbmd0aDtDbjxtaTtDbisrKVV0W0NuXT0zNjA2NCtDbjtVdC5sZW5ndGg9R2UubGVuZ3RoLFRuPSEwfX1lbHNlIDM2MDY0IT09VXRbMF0mJihVdFswXT0zNjA2NCxUbj0hMCk7ZWxzZSAxMDI5IT09VXRbMF0mJihVdFswXT0xMDI5LFRuPSEwKTtUbiYmKGUuaXNXZWJHTDI/bi5kcmF3QnVmZmVycyhVdCk6dC5nZXQoIldFQkdMX2RyYXdfYnVmZmVycyIpLmRyYXdCdWZmZXJzV0VCR0woVXQpKX0sdXNlUHJvZ3JhbTpmdW5jdGlvbih1ZSl7cmV0dXJuIGYhPT11ZSYmKG4udXNlUHJvZ3JhbSh1ZSksZj11ZSwhMCl9LHNldEJsZW5kaW5nOmllLHNldE1hdGVyaWFsOmZ1bmN0aW9uKHVlLEp0KXsyPT09dWUuc2lkZT9BbigyODg0KTpSZSgyODg0KTtsZXQgVXQ9MT09PXVlLnNpZGU7SnQmJihVdD0hVXQpLFllKFV0KSwxPT09dWUuYmxlbmRpbmcmJiExPT09dWUudHJhbnNwYXJlbnQ/aWUoMCk6aWUodWUuYmxlbmRpbmcsdWUuYmxlbmRFcXVhdGlvbix1ZS5ibGVuZFNyYyx1ZS5ibGVuZERzdCx1ZS5ibGVuZEVxdWF0aW9uQWxwaGEsdWUuYmxlbmRTcmNBbHBoYSx1ZS5ibGVuZERzdEFscGhhLHVlLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKHVlLmRlcHRoRnVuYyksbC5zZXRUZXN0KHVlLmRlcHRoVGVzdCksbC5zZXRNYXNrKHVlLmRlcHRoV3JpdGUpLGEuc2V0TWFzayh1ZS5jb2xvcldyaXRlKTtsZXQgVG49dWUuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChUbiksVG4mJihjLnNldE1hc2sodWUuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKHVlLnN0ZW5jaWxGdW5jLHVlLnN0ZW5jaWxSZWYsdWUuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKHVlLnN0ZW5jaWxGYWlsLHVlLnN0ZW5jaWxaRmFpbCx1ZS5zdGVuY2lsWlBhc3MpKSxzbih1ZS5wb2x5Z29uT2Zmc2V0LHVlLnBvbHlnb25PZmZzZXRGYWN0b3IsdWUucG9seWdvbk9mZnNldFVuaXRzKSwhMD09PXVlLmFscGhhVG9Db3ZlcmFnZT9SZSgzMjkyNik6QW4oMzI5MjYpfSxzZXRGbGlwU2lkZWQ6WWUsc2V0Q3VsbEZhY2U6eHQsc2V0TGluZVdpZHRoOmZ1bmN0aW9uKHVlKXt1ZSE9PXZlJiYoaGUmJm4ubGluZVdpZHRoKHVlKSx2ZT11ZSl9LHNldFBvbHlnb25PZmZzZXQ6c24sc2V0U2Npc3NvclRlc3Q6ZnVuY3Rpb24odWUpe3VlP1JlKDMwODkpOkFuKDMwODkpfSxhY3RpdmVUZXh0dXJlOm9pLGJpbmRUZXh0dXJlOmZ1bmN0aW9uKHVlLEp0KXtudWxsPT09YWUmJm9pKCk7bGV0IFV0PW1lW2FlXTt2b2lkIDA9PT1VdCYmKFV0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sbWVbYWVdPVV0KSwoVXQudHlwZSE9PXVlfHxVdC50ZXh0dXJlIT09SnQpJiYobi5iaW5kVGV4dHVyZSh1ZSxKdHx8Z3RbdWVdKSxVdC50eXBlPXVlLFV0LnRleHR1cmU9SnQpfSx1bmJpbmRUZXh0dXJlOmZ1bmN0aW9uKCl7bGV0IHVlPW1lW2FlXTt2b2lkIDAhPT11ZSYmdm9pZCAwIT09dWUudHlwZSYmKG4uYmluZFRleHR1cmUodWUudHlwZSxudWxsKSx1ZS50eXBlPXZvaWQgMCx1ZS50ZXh0dXJlPXZvaWQgMCl9LGNvbXByZXNzZWRUZXhJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4SW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKHVlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsdWUpfX0sdGV4U3RvcmFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3RvcmFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHRleFN0b3JhZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTJEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSx0ZXhTdWJJbWFnZTNEOmZ1bmN0aW9uKCl7dHJ5e24udGV4U3ViSW1hZ2UzRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2godWUpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6Iix1ZSl9fSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaCh1ZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLHVlKX19LHNjaXNzb3I6ZnVuY3Rpb24odWUpeyExPT09RmUuZXF1YWxzKHVlKSYmKG4uc2Npc3Nvcih1ZS54LHVlLnksdWUueix1ZS53KSxGZS5jb3B5KHVlKSl9LHZpZXdwb3J0OmZ1bmN0aW9uKHVlKXshMT09PXV0LmVxdWFscyh1ZSkmJihuLnZpZXdwb3J0KHVlLngsdWUueSx1ZS56LHVlLncpLHV0LmNvcHkodWUpKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSwhMD09PWkmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHU9e30sYWU9bnVsbCxtZT17fSxkPXt9LHA9bmV3IFdlYWtNYXAsaD1bXSxmPW51bGwsbT0hMSxDPW51bGwsXz1udWxsLHk9bnVsbCxJPW51bGwsQT1udWxsLE89bnVsbCxlZT1udWxsLFg9ITEseGU9bnVsbCxmZT1udWxsLHZlPW51bGwsVD1udWxsLG5lPW51bGwsRmUuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHV0LnNldCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxhLnJlc2V0KCksbC5yZXNldCgpLGMucmVzZXQoKX19fWZ1bmN0aW9uIG44ZShuLHQsZSxpLHIsbyxzKXtsZXQgbSxhPXIuaXNXZWJHTDIsbD1yLm1heFRleHR1cmVzLGM9ci5tYXhDdWJlbWFwU2l6ZSx1PXIubWF4VGV4dHVyZVNpemUsZD1yLm1heFNhbXBsZXMsaD10LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik/dC5nZXQoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpOnZvaWQgMCxmPW5ldyBXZWFrTWFwLEM9ITE7dHJ5e0M9dHlwZW9mIE9mZnNjcmVlbkNhbnZhczwidSImJm51bGwhPT1uZXcgT2Zmc2NyZWVuQ2FudmFzKDEsMSkuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaHt9ZnVuY3Rpb24gXyhRLEYpe3JldHVybiBDP25ldyBPZmZzY3JlZW5DYW52YXMoUSxGKTpTTSgiY2FudmFzIil9ZnVuY3Rpb24geShRLEYsVmUsQ3Qpe2xldCB0bj0xO2lmKChRLndpZHRoPkN0fHxRLmhlaWdodD5DdCkmJih0bj1DdC9NYXRoLm1heChRLndpZHRoLFEuaGVpZ2h0KSksdG48MXx8ITA9PT1GKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJlEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZRIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJlEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IEJlPUY/QTVlOk1hdGguZmxvb3IsZ249QmUodG4qUS53aWR0aCksbG49QmUodG4qUS5oZWlnaHQpO3ZvaWQgMD09PW0mJihtPV8oZ24sbG4pKTtsZXQgRnQ9VmU/Xyhnbixsbik6bTtyZXR1cm4gRnQud2lkdGg9Z24sRnQuaGVpZ2h0PWxuLEZ0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKFEsMCwwLGduLGxuKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK1Eud2lkdGgrIngiK1EuaGVpZ2h0KyIpIHRvICgiK2duKyJ4IitsbisiKS4iKSxGdH1yZXR1cm4iZGF0YSJpbiBRJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrUS53aWR0aCsieCIrUS5oZWlnaHQrIikuIiksUX1yZXR1cm4gUX1mdW5jdGlvbiBJKFEpe3JldHVybiBpYWUoUS53aWR0aCkmJmlhZShRLmhlaWdodCl9ZnVuY3Rpb24gTyhRLEYpe3JldHVybiBRLmdlbmVyYXRlTWlwbWFwcyYmRiYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1ic31mdW5jdGlvbiBlZShRKXtuLmdlbmVyYXRlTWlwbWFwKFEpfWZ1bmN0aW9uIFgoUSxGLFZlLEN0LHRuPSExKXtpZighMT09PWEpcmV0dXJuIEY7aWYobnVsbCE9PVEpe2lmKHZvaWQgMCE9PW5bUV0pcmV0dXJuIG5bUV07Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIHVzZSBub24tZXhpc3RpbmcgV2ViR0wgaW50ZXJuYWwgZm9ybWF0ICciK1ErIiciKX1sZXQgQmU9RjtyZXR1cm4gNjQwMz09PUYmJig1MTI2PT09VmUmJihCZT0zMzMyNiksNTEzMT09PVZlJiYoQmU9MzMzMjUpLDUxMjE9PT1WZSYmKEJlPTMzMzIxKSksMzMzMTk9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzMzMjgpLDUxMzE9PT1WZSYmKEJlPTMzMzI3KSw1MTIxPT09VmUmJihCZT0zMzMyMykpLDY0MDg9PT1GJiYoNTEyNj09PVZlJiYoQmU9MzQ4MzYpLDUxMzE9PT1WZSYmKEJlPTM0ODQyKSw1MTIxPT09VmUmJihCZT1DdD09PUZyJiYhMT09PXRuPzM1OTA3OjMyODU2KSwzMjgxOT09PVZlJiYoQmU9MzI4NTQpLDMyODIwPT09VmUmJihCZT0zMjg1NSkpLCgzMzMyNT09PUJlfHwzMzMyNj09PUJlfHwzMzMyNz09PUJlfHwzMzMyOD09PUJlfHwzNDg0Mj09PUJlfHwzNDgzNj09PUJlKSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxCZX1mdW5jdGlvbiB4ZShRLEYsVmUpe3JldHVybiEwPT09TyhRLFZlKXx8US5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmUS5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icz9NYXRoLmxvZzIoTWF0aC5tYXgoRi53aWR0aCxGLmhlaWdodCkpKzE6dm9pZCAwIT09US5taXBtYXBzJiZRLm1pcG1hcHMubGVuZ3RoPjA/US5taXBtYXBzLmxlbmd0aDpRLmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkoUS5pbWFnZSk/Ri5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIGZlKFEpe3JldHVybiBRPT09SW98fDEwMDQ9PT1RfHwxMDA1PT09UT85NzI4Ojk3Mjl9ZnVuY3Rpb24gdmUoUSl7bGV0IEY9US50YXJnZXQ7Ri5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix2ZSksZnVuY3Rpb24oUSl7bGV0IEY9aS5nZXQoUSk7dm9pZCAwIT09Ri5fX3dlYmdsSW5pdCYmKG4uZGVsZXRlVGV4dHVyZShGLl9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShRKSl9KEYpLEYuaXNWaWRlb1RleHR1cmUmJmYuZGVsZXRlKEYpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gVChRKXtsZXQgRj1RLnRhcmdldDtGLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFQpLGZ1bmN0aW9uKFEpe2xldCBGPVEudGV4dHVyZSxWZT1pLmdldChRKSxDdD1pLmdldChGKTtpZihRKXtpZih2b2lkIDAhPT1DdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShDdC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksUS5kZXB0aFRleHR1cmUmJlEuZGVwdGhUZXh0dXJlLmRpc3Bvc2UoKSxRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgdG49MDt0bjw2O3RuKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXJbdG5dKSxWZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlclt0bl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihWZS5fX3dlYmdsRnJhbWVidWZmZXIpLFZlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoVmUuX193ZWJnbERlcHRoYnVmZmVyKSxWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoVmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihWZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKFEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cylmb3IobGV0IHRuPTAsQmU9Ri5sZW5ndGg7dG48QmU7dG4rKyl7bGV0IGduPWkuZ2V0KEZbdG5dKTtnbi5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShnbi5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUoRlt0bl0pfWkucmVtb3ZlKEYpLGkucmVtb3ZlKFEpfX0oRil9bGV0IGhlPTA7ZnVuY3Rpb24gYWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7aWYoUS5pc1ZpZGVvVGV4dHVyZSYmZnVuY3Rpb24oUSl7bGV0IEY9cy5yZW5kZXIuZnJhbWU7Zi5nZXQoUSkhPT1GJiYoZi5zZXQoUSxGKSxRLnVwZGF0ZSgpKX0oUSksUS52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbil7bGV0IEN0PVEuaW1hZ2U7aWYodm9pZCAwPT09Q3QpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09Q3QuY29tcGxldGUpcmV0dXJuIHZvaWQgUmUoVmUsUSxGKTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgbWFya2VkIGZvciB1cGRhdGUgYnV0IGltYWdlIGlzIGluY29tcGxldGUiKX19ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU1MyxWZS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gTWUoUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9mdW5jdGlvbihRLEYsVmUpe2lmKDYhPT1GLmltYWdlLmxlbmd0aClyZXR1cm47Z3QoUSxGKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVmUpLGUuYmluZFRleHR1cmUoMzQwNjcsUS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCxGLmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLEYucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LEYudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBDdD1GJiYoRi5pc0NvbXByZXNzZWRUZXh0dXJlfHxGLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLHRuPUYuaW1hZ2VbMF0mJkYuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxCZT1bXTtmb3IobGV0IEdlPTA7R2U8NjtHZSsrKUJlW0dlXT1DdHx8dG4/dG4/Ri5pbWFnZVtHZV0uaW1hZ2U6Ri5pbWFnZVtHZV06eShGLmltYWdlW0dlXSwhMSwhMCxjKSxCZVtHZV09c24oRixCZVtHZV0pO2xldCBUbixnbj1CZVswXSxsbj1JKGduKXx8YSxGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPWEmJiEwIT09Ri5pc1ZpZGVvVGV4dHVyZSxKdD12b2lkIDA9PT1RLl9fdmVyc2lvbixVdD14ZShGLGduLGxuKTtpZihTdCgzNDA2NyxGLGxuKSxDdCl7dWUmJkp0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxVdCxMbixnbi53aWR0aCxnbi5oZWlnaHQpO2ZvcihsZXQgR2U9MDtHZTw2O0dlKyspe1RuPUJlW0dlXS5taXBtYXBzO2ZvcihsZXQgQ249MDtDbjxUbi5sZW5ndGg7Q24rKyl7bGV0IG1pPVRuW0NuXTtGLmZvcm1hdCE9PXpzP251bGwhPT1GdD91ZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsbWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStHZSxDbixMbixtaS53aWR0aCxtaS5oZWlnaHQsMCxtaS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuLDAsMCxtaS53aWR0aCxtaS5oZWlnaHQsRnQsa3QsbWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuLExuLG1pLndpZHRoLG1pLmhlaWdodCwwLEZ0LGt0LG1pLmRhdGEpfX19ZWxzZXtUbj1GLm1pcG1hcHMsdWUmJkp0JiYoVG4ubGVuZ3RoPjAmJlV0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsVXQsTG4sQmVbMF0ud2lkdGgsQmVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBHZT0wO0dlPDY7R2UrKylpZih0bil7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEJlW0dlXS53aWR0aCxCZVtHZV0uaGVpZ2h0LEZ0LGt0LEJlW0dlXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrR2UsMCxMbixCZVtHZV0ud2lkdGgsQmVbR2VdLmhlaWdodCwwLEZ0LGt0LEJlW0dlXS5kYXRhKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtcj1UbltDbl0uaW1hZ2VbR2VdLmltYWdlO3VlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStHZSxDbisxLDAsMCxtci53aWR0aCxtci5oZWlnaHQsRnQsa3QsbXIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sbXIud2lkdGgsbXIuaGVpZ2h0LDAsRnQsa3QsbXIuZGF0YSl9fWVsc2V7dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLDAsMCwwLEZ0LGt0LEJlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLDAsTG4sRnQsa3QsQmVbR2VdKTtmb3IobGV0IENuPTA7Q248VG4ubGVuZ3RoO0NuKyspe2xldCBtaT1UbltDbl07dWU/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K0dlLENuKzEsMCwwLEZ0LGt0LG1pLmltYWdlW0dlXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K0dlLENuKzEsTG4sRnQsa3QsbWkuaW1hZ2VbR2VdKX19fU8oRixsbikmJmVlKDM0MDY3KSxRLl9fdmVyc2lvbj1GLnZlcnNpb24sRi5vblVwZGF0ZSYmRi5vblVwZGF0ZShGKX0oVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzQwNjcsVmUuX193ZWJnbFRleHR1cmUpKX1sZXQgRmU9ezFlMzoxMDQ5NyxbWmFdOjMzMDcxLDEwMDI6MzM2NDh9LHV0PXtbSW9dOjk3MjgsMTAwNDo5OTg0LDEwMDU6OTk4NixbYnNdOjk3MjksMTAwNzo5OTg1LDEwMDg6OTk4N307ZnVuY3Rpb24gU3QoUSxGLFZlKXtpZihWZT8obi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsRmVbRi53cmFwU10pLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLEZlW0Yud3JhcFRdKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MixGZVtGLndyYXBSXSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDAsdXRbRi5tYWdGaWx0ZXJdKSxuLnRleFBhcmFtZXRlcmkoUSwxMDI0MSx1dFtGLm1pbkZpbHRlcl0pKToobi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDIsMzMwNzEpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQzLDMzMDcxKSwoMzI4Nzk9PT1RfHwzNTg2Nj09PVEpJiZuLnRleFBhcmFtZXRlcmkoUSwzMjg4MiwzMzA3MSksKEYud3JhcFMhPT1aYXx8Ri53cmFwVCE9PVphKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUud3JhcFMgYW5kIFRleHR1cmUud3JhcFQgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5DbGFtcFRvRWRnZVdyYXBwaW5nLiIpLG4udGV4UGFyYW1ldGVyaShRLDEwMjQwLGZlKEYubWFnRmlsdGVyKSksbi50ZXhQYXJhbWV0ZXJpKFEsMTAyNDEsZmUoRi5taW5GaWx0ZXIpKSxGLm1pbkZpbHRlciE9PUlvJiZGLm1pbkZpbHRlciE9PWJzJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS5taW5GaWx0ZXIgc2hvdWxkIGJlIHNldCB0byBUSFJFRS5OZWFyZXN0RmlsdGVyIG9yIFRIUkVFLkxpbmVhckZpbHRlci4iKSksITA9PT10LmhhcygiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikpe2xldCBDdD10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7aWYoRi50eXBlPT09WW0mJiExPT09dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpfHwhMT09PWEmJkYudHlwZT09PXV5JiYhMT09PXQuaGFzKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKXJldHVybjsoRi5hbmlzb3Ryb3B5PjF8fGkuZ2V0KEYpLl9fY3VycmVudEFuaXNvdHJvcHkpJiYobi50ZXhQYXJhbWV0ZXJmKFEsQ3QuVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQsTWF0aC5taW4oRi5hbmlzb3Ryb3B5LHIuZ2V0TWF4QW5pc290cm9weSgpKSksaS5nZXQoRikuX19jdXJyZW50QW5pc290cm9weT1GLmFuaXNvdHJvcHkpfX1mdW5jdGlvbiBndChRLEYpe3ZvaWQgMD09PVEuX193ZWJnbEluaXQmJihRLl9fd2ViZ2xJbml0PSEwLEYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdmUpLFEuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gUmUoUSxGLFZlKXtsZXQgQ3Q9MzU1MztGLmlzRGF0YVRleHR1cmUyREFycmF5JiYoQ3Q9MzU4NjYpLEYuaXNEYXRhVGV4dHVyZTNEJiYoQ3Q9MzI4NzkpLGd0KFEsRiksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1ZlKSxlLmJpbmRUZXh0dXJlKEN0LFEuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsRi5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSxGLnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyxGLnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgdG49ZnVuY3Rpb24oUSl7cmV0dXJuIWEmJihRLndyYXBTIT09WmF8fFEud3JhcFQhPT1aYXx8US5taW5GaWx0ZXIhPT1JbyYmUS5taW5GaWx0ZXIhPT1icyl9KEYpJiYhMT09PUkoRi5pbWFnZSksQmU9eShGLmltYWdlLHRuLCExLHUpO0JlPXNuKEYsQmUpO2xldCBnbj1JKEJlKXx8YSxsbj1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksRnQ9by5jb252ZXJ0KEYudHlwZSksa3Q9WChGLmludGVybmFsRm9ybWF0LGxuLEZ0LEYuZW5jb2RpbmcsRi5pc1ZpZGVvVGV4dHVyZSk7U3QoQ3QsRixnbik7bGV0IExuLHVlPUYubWlwbWFwcyxKdD1hJiYhMCE9PUYuaXNWaWRlb1RleHR1cmUsVXQ9dm9pZCAwPT09US5fX3ZlcnNpb24sVG49eGUoRixCZSxnbik7aWYoRi5pc0RlcHRoVGV4dHVyZSlrdD02NDAyLGE/a3Q9Ri50eXBlPT09WW0/MzYwMTI6MTAxND09PUYudHlwZT8zMzE5MDpGLnR5cGU9PT1keT8zNTA1NjozMzE4OTpGLnR5cGU9PT1ZbSYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksRi5mb3JtYXQ9PT1RbSYmNjQwMj09PWt0JiZGLnR5cGUhPT13TSYmMTAxNCE9PUYudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLEYudHlwZT13TSxGdD1vLmNvbnZlcnQoRi50eXBlKSksRi5mb3JtYXQ9PT1teSYmNjQwMj09PWt0JiYoa3Q9MzQwNDEsRi50eXBlIT09ZHkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksRi50eXBlPWR5LEZ0PW8uY29udmVydChGLnR5cGUpKSksSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxrdCxCZS53aWR0aCxCZS5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LDAsbG4sRnQsbnVsbCk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUpaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKTtGLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIEp0PyhVdCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNDb21wcmVzc2VkVGV4dHVyZSl7SnQmJlV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LHVlWzBdLndpZHRoLHVlWzBdLmhlaWdodCk7Zm9yKGxldCBHZT0wLENuPXVlLmxlbmd0aDtHZTxDbjtHZSsrKUxuPXVlW0dlXSxGLmZvcm1hdCE9PXpzP251bGwhPT1sbj9KdD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixMbi5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM1NTMsR2Usa3QsTG4ud2lkdGgsTG4uaGVpZ2h0LDAsTG4uZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6SnQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsR2UsMCwwLExuLndpZHRoLExuLmhlaWdodCxsbixGdCxMbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxHZSxrdCxMbi53aWR0aCxMbi5oZWlnaHQsMCxsbixGdCxMbi5kYXRhKX1lbHNlIGlmKEYuaXNEYXRhVGV4dHVyZTJEQXJyYXkpSnQ/KFV0JiZlLnRleFN0b3JhZ2UzRCgzNTg2NixUbixrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzNTg2NiwwLDAsMCwwLEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCxsbixGdCxCZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsa3QsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLDAsbG4sRnQsQmUuZGF0YSk7ZWxzZSBpZihGLmlzRGF0YVRleHR1cmUzRClKdD8oVXQmJmUudGV4U3RvcmFnZTNEKDMyODc5LFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCxCZS5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAsQmUud2lkdGgsQmUuaGVpZ2h0LEJlLmRlcHRoLGxuLEZ0LEJlLmRhdGEpKTplLnRleEltYWdlM0QoMzI4NzksMCxrdCxCZS53aWR0aCxCZS5oZWlnaHQsQmUuZGVwdGgsMCxsbixGdCxCZS5kYXRhKTtlbHNlIGlmKEYuaXNGcmFtZWJ1ZmZlclRleHR1cmUpSnQmJlV0P2UudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsQmUud2lkdGgsQmUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLGt0LEJlLndpZHRoLEJlLmhlaWdodCwwLGxuLEZ0LG51bGwpO2Vsc2UgaWYodWUubGVuZ3RoPjAmJmduKXtKdCYmVXQmJmUudGV4U3RvcmFnZTJEKDM1NTMsVG4sa3QsdWVbMF0ud2lkdGgsdWVbMF0uaGVpZ2h0KTtmb3IobGV0IEdlPTAsQ249dWUubGVuZ3RoO0dlPENuO0dlKyspTG49dWVbR2VdLEp0P2UudGV4U3ViSW1hZ2UyRCgzNTUzLEdlLDAsMCxsbixGdCxMbik6ZS50ZXhJbWFnZTJEKDM1NTMsR2Usa3QsbG4sRnQsTG4pO0YuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgSnQ/KFV0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLFRuLGt0LEJlLndpZHRoLEJlLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsbG4sRnQsQmUpKTplLnRleEltYWdlMkQoMzU1MywwLGt0LGxuLEZ0LEJlKTtPKEYsZ24pJiZlZShDdCksUS5fX3ZlcnNpb249Ri52ZXJzaW9uLEYub25VcGRhdGUmJkYub25VcGRhdGUoRil9ZnVuY3Rpb24gRXQoUSxGLFZlLEN0LHRuKXtsZXQgQmU9by5jb252ZXJ0KFZlLmZvcm1hdCxWZS5lbmNvZGluZyksZ249by5jb252ZXJ0KFZlLnR5cGUpLGxuPVgoVmUuaW50ZXJuYWxGb3JtYXQsQmUsZ24sVmUuZW5jb2RpbmcpO2kuZ2V0KEYpLl9faGFzRXh0ZXJuYWxUZXh0dXJlc3x8KDMyODc5PT09dG58fDM1ODY2PT09dG4/ZS50ZXhJbWFnZTNEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCxGLmRlcHRoLDAsQmUsZ24sbnVsbCk6ZS50ZXhJbWFnZTJEKHRuLDAsbG4sRi53aWR0aCxGLmhlaWdodCwwLEJlLGduLG51bGwpKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxRKSxGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDAseHQoRikpOm4uZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsQ3QsdG4saS5nZXQoVmUpLl9fd2ViZ2xUZXh0dXJlLDApLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIG9uKFEsRixWZSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLFEpLEYuZGVwdGhCdWZmZXImJiFGLnN0ZW5jaWxCdWZmZXIpe2xldCBDdD0zMzE4OTtpZihWZXx8Ri51c2VSZW5kZXJUb1RleHR1cmUpe2xldCB0bj1GLmRlcHRoVGV4dHVyZTt0biYmdG4uaXNEZXB0aFRleHR1cmUmJih0bi50eXBlPT09WW0/Q3Q9MzYwMTI6MTAxND09PXRuLnR5cGUmJihDdD0zMzE5MCkpO2xldCBCZT14dChGKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxCZSxDdCxGLndpZHRoLEYuaGVpZ2h0KX1lbHNlIG4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxDdCxGLndpZHRoLEYuaGVpZ2h0KTtuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLFEpfWVsc2UgaWYoRi5kZXB0aEJ1ZmZlciYmRi5zdGVuY2lsQnVmZmVyKXtsZXQgQ3Q9eHQoRik7VmUmJkYudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOkYudXNlUmVuZGVyVG9UZXh0dXJlP2gucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLEN0LDM1MDU2LEYud2lkdGgsRi5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSxGLndpZHRoLEYuaGVpZ2h0KSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLFEpfWVsc2V7bGV0IEN0PSEwPT09Ri5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP0YudGV4dHVyZVswXTpGLnRleHR1cmUsdG49by5jb252ZXJ0KEN0LmZvcm1hdCxDdC5lbmNvZGluZyksQmU9by5jb252ZXJ0KEN0LnR5cGUpLGduPVgoQ3QuaW50ZXJuYWxGb3JtYXQsdG4sQmUsQ3QuZW5jb2RpbmcpLGxuPXh0KEYpO1ZlJiZGLnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpGLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSxsbixnbixGLndpZHRoLEYuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZ24sRi53aWR0aCxGLmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIHZ0KFEpe2xldCBGPWkuZ2V0KFEpLFZlPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihRLmRlcHRoVGV4dHVyZSYmIUYuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYoVmUpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpOyFmdW5jdGlvbihRLEYpe2lmKEYmJkYuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsUSksIUYuZGVwdGhUZXh0dXJlfHwhRi5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7KCFpLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmV8fEYuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoIT09Ri53aWR0aHx8Ri5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0IT09Ri5oZWlnaHQpJiYoRi5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9Ri53aWR0aCxGLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9Ri5oZWlnaHQsRi5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLGFlKEYuZGVwdGhUZXh0dXJlLDApO2xldCBDdD1pLmdldChGLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsdG49eHQoRik7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0PT09UW0pRi51c2VSZW5kZXJUb1RleHR1cmU/aC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsQ3QsMCx0bik6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLEN0LDApO2Vsc2V7aWYoRi5kZXB0aFRleHR1cmUuZm9ybWF0IT09bXkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTtGLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzMzMDYsMzU1MyxDdCwwLHRuKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsQ3QsMCl9fShGLl9fd2ViZ2xGcmFtZWJ1ZmZlcixRKX1lbHNlIGlmKFZlKXtGLl9fd2ViZ2xEZXB0aGJ1ZmZlcj1bXTtmb3IobGV0IEN0PTA7Q3Q8NjtDdCsrKWUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEYuX193ZWJnbEZyYW1lYnVmZmVyW0N0XSksRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXJbQ3RdLFEsITEpfWVsc2UgZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRi5fX3dlYmdsRnJhbWVidWZmZXIpLEYuX193ZWJnbERlcHRoYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oRi5fX3dlYmdsRGVwdGhidWZmZXIsUSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24geHQoUSl7cmV0dXJuIGEmJihRLnVzZVJlbmRlcmJ1ZmZlcnx8US51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGQsUS5zYW1wbGVzKTowfWZ1bmN0aW9uIHNuKFEsRil7bGV0IFZlPVEuZW5jb2RpbmcsQ3Q9US5mb3JtYXQsdG49US50eXBlO3JldHVybiEwPT09US5pc0NvbXByZXNzZWRUZXh0dXJlfHwhMD09PVEuaXNWaWRlb1RleHR1cmV8fDEwMzU9PT1RLmZvcm1hdHx8VmUhPT1EaCYmKFZlPT09RnI/ITE9PT1hPyEwPT09dC5oYXMoIkVYVF9zUkdCIikmJkN0PT09enM/KFEuZm9ybWF0PTEwMzUsUS5taW5GaWx0ZXI9YnMsUS5nZW5lcmF0ZU1pcG1hcHM9ITEpOkY9VWQuc1JHQlRvTGluZWFyKEYpOihDdCE9PXpzfHx0biE9PVNoKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsVmUpKSxGfWxldCBTbj0hMSxvaT0hMTt0aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9ZnVuY3Rpb24oKXtsZXQgUT1oZTtyZXR1cm4gUT49bCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICIrUSsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLGhlKz0xLFF9LHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9ZnVuY3Rpb24oKXtoZT0wfSx0aGlzLnNldFRleHR1cmUyRD1hZSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKFEsRil7bGV0IFZlPWkuZ2V0KFEpO1EudmVyc2lvbj4wJiZWZS5fX3ZlcnNpb24hPT1RLnZlcnNpb24/UmUoVmUsUSxGKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K0YpLGUuYmluZFRleHR1cmUoMzU4NjYsVmUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlM0Q9ZnVuY3Rpb24oUSxGKXtsZXQgVmU9aS5nZXQoUSk7US52ZXJzaW9uPjAmJlZlLl9fdmVyc2lvbiE9PVEudmVyc2lvbj9SZShWZSxRLEYpOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrRiksZS5iaW5kVGV4dHVyZSgzMjg3OSxWZS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmVDdWJlPU1lLHRoaXMucmViaW5kVGV4dHVyZXM9ZnVuY3Rpb24oUSxGLFZlKXtsZXQgQ3Q9aS5nZXQoUSk7dm9pZCAwIT09RiYmRXQoQ3QuX193ZWJnbEZyYW1lYnVmZmVyLFEsUS50ZXh0dXJlLDM2MDY0LDM1NTMpLHZvaWQgMCE9PVZlJiZ2dChRKX0sdGhpcy5zZXR1cFJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtsZXQgRj1RLnRleHR1cmUsVmU9aS5nZXQoUSksQ3Q9aS5nZXQoRik7US5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixUKSwhMCE9PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyYmKHZvaWQgMD09PUN0Ll9fd2ViZ2xUZXh0dXJlJiYoQ3QuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkpLEN0Ll9fdmVyc2lvbj1GLnZlcnNpb24scy5tZW1vcnkudGV4dHVyZXMrKyk7bGV0IHRuPSEwPT09US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCxCZT0hMD09PVEuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyxnbj1GLmlzRGF0YVRleHR1cmUzRHx8Ri5pc0RhdGFUZXh0dXJlMkRBcnJheSxsbj1JKFEpfHxhO2lmKHRuKXtWZS5fX3dlYmdsRnJhbWVidWZmZXI9W107Zm9yKGxldCBGdD0wO0Z0PDY7RnQrKylWZS5fX3dlYmdsRnJhbWVidWZmZXJbRnRdPW4uY3JlYXRlRnJhbWVidWZmZXIoKX1lbHNlIGlmKFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCksQmUpaWYoci5kcmF3QnVmZmVycyl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1pLmdldChGdFtrdF0pO3ZvaWQgMD09PXVlLl9fd2ViZ2xUZXh0dXJlJiYodWUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtWZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9bi5jcmVhdGVGcmFtZWJ1ZmZlcigpLFZlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBGdD1vLmNvbnZlcnQoRi5mb3JtYXQsRi5lbmNvZGluZyksa3Q9by5jb252ZXJ0KEYudHlwZSksTG49WChGLmludGVybmFsRm9ybWF0LEZ0LGt0LEYuZW5jb2RpbmcpLHVlPXh0KFEpO24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHVlLExuLFEud2lkdGgsUS5oZWlnaHQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLFZlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksbi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxWZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSxRLmRlcHRoQnVmZmVyJiYoVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksb24oVmUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyLFEsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKHRuKXtlLmJpbmRUZXh0dXJlKDM0MDY3LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdCgzNDA2NyxGLGxuKTtmb3IobGV0IEZ0PTA7RnQ8NjtGdCsrKUV0KFZlLl9fd2ViZ2xGcmFtZWJ1ZmZlcltGdF0sUSxGLDM2MDY0LDM0MDY5K0Z0KTtPKEYsbG4pJiZlZSgzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihCZSl7bGV0IEZ0PVEudGV4dHVyZTtmb3IobGV0IGt0PTAsTG49RnQubGVuZ3RoO2t0PExuO2t0Kyspe2xldCB1ZT1GdFtrdF0sSnQ9aS5nZXQodWUpO2UuYmluZFRleHR1cmUoMzU1MyxKdC5fX3dlYmdsVGV4dHVyZSksU3QoMzU1Myx1ZSxsbiksRXQoVmUuX193ZWJnbEZyYW1lYnVmZmVyLFEsdWUsMzYwNjQra3QsMzU1MyksTyh1ZSxsbikmJmVlKDM1NTMpfWUudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IEZ0PTM1NTM7Z24mJihhP0Z0PUYuaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxlLmJpbmRUZXh0dXJlKEZ0LEN0Ll9fd2ViZ2xUZXh0dXJlKSxTdChGdCxGLGxuKSxFdChWZS5fX3dlYmdsRnJhbWVidWZmZXIsUSxGLDM2MDY0LEZ0KSxPKEYsbG4pJiZlZShGdCksZS51bmJpbmRUZXh0dXJlKCl9US5kZXB0aEJ1ZmZlciYmdnQoUSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKFEpe2xldCBGPUkoUSl8fGEsVmU9ITA9PT1RLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/US50ZXh0dXJlOltRLnRleHR1cmVdO2ZvcihsZXQgQ3Q9MCx0bj1WZS5sZW5ndGg7Q3Q8dG47Q3QrKyl7bGV0IEJlPVZlW0N0XTtpZihPKEJlLEYpKXtsZXQgZ249US5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLGxuPWkuZ2V0KEJlKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKGduLGxuKSxlZShnbiksZS51bmJpbmRUZXh0dXJlKCl9fX0sdGhpcy51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldD1mdW5jdGlvbihRKXtpZihRLnVzZVJlbmRlcmJ1ZmZlcilpZihhKXtsZXQgRj1RLndpZHRoLFZlPVEuaGVpZ2h0LEN0PTE2Mzg0LHRuPVszNjA2NF0sQmU9US5zdGVuY2lsQnVmZmVyPzMzMzA2OjM2MDk2O1EuZGVwdGhCdWZmZXImJnRuLnB1c2goQmUpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fChRLmRlcHRoQnVmZmVyJiYoQ3R8PTI1NiksUS5zdGVuY2lsQnVmZmVyJiYoQ3R8PTEwMjQpKTtsZXQgZ249aS5nZXQoUSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsZ24uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxnbi5fX3dlYmdsRnJhbWVidWZmZXIpLFEuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHkmJihuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxbQmVdKSxuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOSxbQmVdKSksbi5ibGl0RnJhbWVidWZmZXIoMCwwLEYsVmUsMCwwLEYsVmUsQ3QsOTcyOCksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsdG4pLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LGduLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX0sdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPXZ0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9RXQsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPWZ1bmN0aW9uKFEsRil7USYmUS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoITE9PT1TbiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZTJEOiBkb24ndCB1c2UgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLFNuPSEwKSxRPVEudGV4dHVyZSksYWUoUSxGKX0sdGhpcy5zYWZlU2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oUSxGKXtRJiZRLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiYoITE9PT1vaSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlcy5zYWZlU2V0VGV4dHVyZUN1YmU6IGRvbid0IHVzZSBjdWJlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxvaT0hMCksUT1RLnRleHR1cmUpLE1lKFEsRil9fWZ1bmN0aW9uIGk4ZShuLHQsZSl7bGV0IGk9ZS5pc1dlYkdMMjtyZXR1cm57Y29udmVydDpmdW5jdGlvbihvLHM9bnVsbCl7bGV0IGE7aWYobz09PVNoKXJldHVybiA1MTIxO2lmKDEwMTc9PT1vKXJldHVybiAzMjgxOTtpZigxMDE4PT09bylyZXR1cm4gMzI4MjA7aWYoMTAxMD09PW8pcmV0dXJuIDUxMjA7aWYoMTAxMT09PW8pcmV0dXJuIDUxMjI7aWYobz09PXdNKXJldHVybiA1MTIzO2lmKDEwMTM9PT1vKXJldHVybiA1MTI0O2lmKDEwMTQ9PT1vKXJldHVybiA1MTI1O2lmKG89PT1ZbSlyZXR1cm4gNTEyNjtpZihvPT09dXkpcmV0dXJuIGk/NTEzMTooYT10LmdldCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLG51bGwhPT1hP2EuSEFMRl9GTE9BVF9PRVM6bnVsbCk7aWYoMTAyMT09PW8pcmV0dXJuIDY0MDY7aWYobz09PXpzKXJldHVybiA2NDA4O2lmKDEwMjQ9PT1vKXJldHVybiA2NDA5O2lmKDEwMjU9PT1vKXJldHVybiA2NDEwO2lmKG89PT1RbSlyZXR1cm4gNjQwMjtpZihvPT09bXkpcmV0dXJuIDM0MDQxO2lmKDEwMjg9PT1vKXJldHVybiA2NDAzO2lmKDEwMzU9PT1vKXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLG51bGwhPT1hP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZigxMDI5PT09bylyZXR1cm4gMzYyNDQ7aWYoMTAzMD09PW8pcmV0dXJuIDMzMzE5O2lmKDEwMzE9PT1vKXJldHVybiAzMzMyMDtpZigxMDMzPT09bylyZXR1cm4gMzYyNDk7aWYoMzM3NzY9PT1vfHwzMzc3Nz09PW98fDMzNzc4PT09b3x8MzM3Nzk9PT1vKWlmKHM9PT1Gcil7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDMzNzc2PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX0VYVDtpZigzMzc3Nz09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzg9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfRVhUO2lmKDMzNzc5PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X0VYVH1lbHNle2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzM3NzY9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzc9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUO2lmKDMzNzc4PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDtpZigzMzc3OT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFR9aWYoMzU4NDA9PT1vfHwzNTg0MT09PW98fDM1ODQyPT09b3x8MzU4NDM9PT1vKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNTg0MD09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZigzNTg0MT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZigzNTg0Mj09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDM9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWlmKDM2MTk2PT09bylyZXR1cm4gYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YzEiKSxudWxsIT09YT9hLkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0w6bnVsbDtpZigzNzQ5Mj09PW98fDM3NDk2PT09byl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDM3NDkyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9FVEMyOmEuQ09NUFJFU1NFRF9SR0I4X0VUQzI7aWYoMzc0OTY9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzphLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9aWYoMzc4MDg9PT1vfHwzNzgwOT09PW98fDM3ODEwPT09b3x8Mzc4MTE9PT1vfHwzNzgxMj09PW98fDM3ODEzPT09b3x8Mzc4MTQ9PT1vfHwzNzgxNT09PW98fDM3ODE2PT09b3x8Mzc4MTc9PT1vfHwzNzgxOD09PW98fDM3ODE5PT09b3x8Mzc4MjA9PT1vfHwzNzgyMT09PW8pe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzc4MDg9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ180eDRfS0hSO2lmKDM3ODA5PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZigzNzgxMD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFI7aWYoMzc4MTE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ182eDVfS0hSO2lmKDM3ODEyPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZigzNzgxMz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFI7aWYoMzc4MTQ9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDZfS0hSO2lmKDM3ODE1PT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZigzNzgxNj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg1X0tIUjtpZigzNzgxNz09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4Nl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2X0tIUjtpZigzNzgxOD09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZigzNzgxOT09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSO2lmKDM3ODIwPT09bylyZXR1cm4gcz09PUZyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMF9LSFI7aWYoMzc4MjE9PT1vKXJldHVybiBzPT09RnI/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1pZigzNjQ5Mj09PW8pe2lmKGE9dC5nZXQoIkVYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2JwdGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNjQ5Mj09PW8pcmV0dXJuIHM9PT1Gcj9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1yZXR1cm4gbz09PWR5P2k/MzQwNDI6KGE9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxudWxsIT09YT9hLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpOnZvaWQgMH19fU0yLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBTMj1jbGFzcyBleHRlbmRzIHhze2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtTMi5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgWG09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtYbS5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgcjhlPXt0eXBlOiJtb3ZlIn0seU09Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiBudWxsPT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQ9bmV3IFhtLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheT1uZXcgWG0sdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3ICQpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyBYbSx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgJCx0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgJCksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiBudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSxudWxsIT09dGhpcy5fZ3JpcCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9oYW5kJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksbnVsbCE9PXRoaXMuX3RhcmdldFJheSYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSxudWxsIT09dGhpcy5fZ3JpcCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksbnVsbCE9PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQsZSxpKXtsZXQgcj1udWxsLG89bnVsbCxzPW51bGwsYT10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiYidmlzaWJsZS1ibHVycmVkIiE9PWUuc2Vzc2lvbi52aXNpYmlsaXR5U3RhdGUpaWYobnVsbCE9PWEmJihyPWUuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLGkpLG51bGwhPT1yJiYoYS5tYXRyaXguZnJvbUFycmF5KHIudHJhbnNmb3JtLm1hdHJpeCksYS5tYXRyaXguZGVjb21wb3NlKGEucG9zaXRpb24sYS5yb3RhdGlvbixhLnNjYWxlKSxyLmxpbmVhclZlbG9jaXR5PyhhLmhhc0xpbmVhclZlbG9jaXR5PSEwLGEubGluZWFyVmVsb2NpdHkuY29weShyLmxpbmVhclZlbG9jaXR5KSk6YS5oYXNMaW5lYXJWZWxvY2l0eT0hMSxyLmFuZ3VsYXJWZWxvY2l0eT8oYS5oYXNBbmd1bGFyVmVsb2NpdHk9ITAsYS5hbmd1bGFyVmVsb2NpdHkuY29weShyLmFuZ3VsYXJWZWxvY2l0eSkpOmEuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChyOGUpKSksYyYmdC5oYW5kKXtzPSEwO2ZvcihsZXQgbSBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBDPWUuZ2V0Sm9pbnRQb3NlKG0saSk7aWYodm9pZCAwPT09Yy5qb2ludHNbbS5qb2ludE5hbWVdKXtsZXQgeT1uZXcgWG07eS5tYXRyaXhBdXRvVXBkYXRlPSExLHkudmlzaWJsZT0hMSxjLmpvaW50c1ttLmpvaW50TmFtZV09eSxjLmFkZCh5KX1sZXQgXz1jLmpvaW50c1ttLmpvaW50TmFtZV07bnVsbCE9PUMmJihfLm1hdHJpeC5mcm9tQXJyYXkoQy50cmFuc2Zvcm0ubWF0cml4KSxfLm1hdHJpeC5kZWNvbXBvc2UoXy5wb3NpdGlvbixfLnJvdGF0aW9uLF8uc2NhbGUpLF8uam9pbnRSYWRpdXM9Qy5yYWRpdXMpLF8udmlzaWJsZT1udWxsIT09Q31sZXQgcD1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLnBvc2l0aW9uLmRpc3RhbmNlVG8oYy5qb2ludHNbInRodW1iLXRpcCJdLnBvc2l0aW9uKSxoPS4wMixmPS4wMDU7Yy5pbnB1dFN0YXRlLnBpbmNoaW5nJiZwPmgrZj8oYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSExLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hlbmQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpOiFjLmlucHV0U3RhdGUucGluY2hpbmcmJnA8PWgtZiYmKGMuaW5wdXRTdGF0ZS5waW5jaGluZz0hMCx0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6InBpbmNoc3RhcnQiLGhhbmRlZG5lc3M6dC5oYW5kZWRuZXNzLHRhcmdldDp0aGlzfSkpfWVsc2UgbnVsbCE9PWwmJnQuZ3JpcFNwYWNlJiYobz1lLmdldFBvc2UodC5ncmlwU3BhY2UsaSksbnVsbCE9PW8mJihsLm1hdHJpeC5mcm9tQXJyYXkoby50cmFuc2Zvcm0ubWF0cml4KSxsLm1hdHJpeC5kZWNvbXBvc2UobC5wb3NpdGlvbixsLnJvdGF0aW9uLGwuc2NhbGUpLG8ubGluZWFyVmVsb2NpdHk/KGwuaGFzTGluZWFyVmVsb2NpdHk9ITAsbC5saW5lYXJWZWxvY2l0eS5jb3B5KG8ubGluZWFyVmVsb2NpdHkpKTpsLmhhc0xpbmVhclZlbG9jaXR5PSExLG8uYW5ndWxhclZlbG9jaXR5PyhsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxsLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KG8uYW5ndWxhclZlbG9jaXR5KSk6bC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEpKTtyZXR1cm4gbnVsbCE9PWEmJihhLnZpc2libGU9bnVsbCE9PXIpLG51bGwhPT1sJiYobC52aXNpYmxlPW51bGwhPT1vKSxudWxsIT09YyYmKGMudmlzaWJsZT1udWxsIT09cyksdGhpc319LFBNPWNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSl7aWYoKHU9dm9pZCAwIT09dT91OlFtKSE9PVFtJiZ1IT09bXkpdGhyb3cgbmV3IEVycm9yKCJEZXB0aFRleHR1cmUgZm9ybWF0IG11c3QgYmUgZWl0aGVyIFRIUkVFLkRlcHRoRm9ybWF0IG9yIFRIUkVFLkRlcHRoU3RlbmNpbEZvcm1hdCIpO3ZvaWQgMD09PWkmJnU9PT1RbSYmKGk9d00pLHZvaWQgMD09PWkmJnU9PT1teSYmKGk9ZHkpLHN1cGVyKG51bGwscixvLHMsYSxsLHUsaSxjKSx0aGlzLmltYWdlPXt3aWR0aDp0LGhlaWdodDplfSx0aGlzLm1hZ0ZpbHRlcj12b2lkIDAhPT1hP2E6SW8sdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09bD9sOklvLHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtQTS5wcm90b3R5cGUuaXNEZXB0aFRleHR1cmU9ITA7dmFyIEFVPWNsYXNzIGV4dGVuZHMgSGR7Y29uc3RydWN0b3IodCxlKXtzdXBlcigpO2xldCBpPXRoaXMscj1udWxsLG89MSxzPW51bGwsYT0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxkPW51bGwscD1udWxsLGg9ITEsZj1udWxsLG09ZS5nZXRDb250ZXh0QXR0cmlidXRlcygpLEM9bnVsbCxfPW51bGwseT1bXSxJPW5ldyBNYXAsQT1uZXcgeHM7QS5sYXllcnMuZW5hYmxlKDEpLEEudmlld3BvcnQ9bmV3IHRyO2xldCBPPW5ldyB4cztPLmxheWVycy5lbmFibGUoMiksTy52aWV3cG9ydD1uZXcgdHI7bGV0IGVlPVtBLE9dLFg9bmV3IFMyO1gubGF5ZXJzLmVuYWJsZSgxKSxYLmxheWVycy5lbmFibGUoMik7bGV0IHhlPW51bGwsZmU9bnVsbDtmdW5jdGlvbiB2ZShNZSl7bGV0IEZlPUkuZ2V0KE1lLmlucHV0U291cmNlKTtGZSYmRmUuZGlzcGF0Y2hFdmVudCh7dHlwZTpNZS50eXBlLGRhdGE6TWUuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiBUKCl7SS5mb3JFYWNoKGZ1bmN0aW9uKE1lLEZlKXtNZS5kaXNjb25uZWN0KEZlKX0pLEkuY2xlYXIoKSx4ZT1udWxsLGZlPW51bGwsdC5zZXRSZW5kZXJUYXJnZXQoQykscD1udWxsLGQ9bnVsbCx1PW51bGwscj1udWxsLF89bnVsbCxqZS5zdG9wKCksaS5pc1ByZXNlbnRpbmc9ITEsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uZW5kIn0pfWZ1bmN0aW9uIG5lKE1lKXtsZXQgRmU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCB1dD0wO3V0PHkubGVuZ3RoO3V0KyspSS5zZXQoRmVbdXRdLHlbdXRdKTtmb3IobGV0IHV0PTA7dXQ8TWUucmVtb3ZlZC5sZW5ndGg7dXQrKyl7bGV0IFN0PU1lLnJlbW92ZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmKGd0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpTdH0pLEkuZGVsZXRlKFN0KSl9Zm9yKGxldCB1dD0wO3V0PE1lLmFkZGVkLmxlbmd0aDt1dCsrKXtsZXQgU3Q9TWUuYWRkZWRbdXRdLGd0PUkuZ2V0KFN0KTtndCYmZ3QuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOlN0fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKE1lKXtsZXQgRmU9eVtNZV07cmV0dXJuIHZvaWQgMD09PUZlJiYoRmU9bmV3IHlNLHlbTWVdPUZlKSxGZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKE1lKXtvPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKE1lKXthPU1lLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZDpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKE1lKXtpZihyPU1lLG51bGwhPT1yKXtpZihDPXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0Iix2ZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLHZlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsdmUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIixUKSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIsbmUpLCEwIT09bS54ckNvbXBhdGlibGUmJmF3YWl0IGUubWFrZVhSQ29tcGF0aWJsZSgpLHZvaWQgMD09PXIucmVuZGVyU3RhdGUubGF5ZXJzfHwhMT09PXQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyKXA9bmV3IFhSV2ViR0xMYXllcihyLGUse2FudGlhbGlhczp2b2lkIDAhPT1yLnJlbmRlclN0YXRlLmxheWVyc3x8bS5hbnRpYWxpYXMsYWxwaGE6bS5hbHBoYSxkZXB0aDptLmRlcHRoLHN0ZW5jaWw6bS5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6b30pLHIudXBkYXRlUmVuZGVyU3RhdGUoe2Jhc2VMYXllcjpwfSksXz1uZXcgdmEocC5mcmFtZWJ1ZmZlcldpZHRoLHAuZnJhbWVidWZmZXJIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTtlbHNle2g9bS5hbnRpYWxpYXM7bGV0IEZlPW51bGwsdXQ9bnVsbCxTdD1udWxsO20uZGVwdGgmJihTdD1tLnN0ZW5jaWw/MzUwNTY6MzMxOTAsRmU9bS5zdGVuY2lsP215OlFtLHV0PW0uc3RlbmNpbD9keTp3TSk7bGV0IGd0PXtjb2xvckZvcm1hdDp0Lm91dHB1dEVuY29kaW5nPT09RnI/MzU5MDc6MzI4NTYsZGVwdGhGb3JtYXQ6U3Qsc2NhbGVGYWN0b3I6b307dT1uZXcgWFJXZWJHTEJpbmRpbmcocixlKSxkPXUuY3JlYXRlUHJvamVjdGlvbkxheWVyKGd0KSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtsYXllcnM6W2RdfSksXz1oP25ldyBFTShkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQse2Zvcm1hdDp6cyx0eXBlOlNoLGRlcHRoVGV4dHVyZTpuZXcgUE0oZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHV0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLEZlKSxzdGVuY2lsQnVmZmVyOm0uc3RlbmNpbCxpZ25vcmVEZXB0aDpkLmlnbm9yZURlcHRoVmFsdWVzLHVzZVJlbmRlclRvVGV4dHVyZTpsLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KTpuZXcgdmEoZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6enMsdHlwZTpTaCxkZXB0aFRleHR1cmU6bmV3IFBNKGQudGV4dHVyZVdpZHRoLGQudGV4dHVyZUhlaWdodCx1dCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxGZSksc3RlbmNpbEJ1ZmZlcjptLnN0ZW5jaWwsaWdub3JlRGVwdGg6ZC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9Xy5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLHM9YXdhaXQgci5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoYSksamUuc2V0Q29udGV4dChyKSxqZS5zdGFydCgpLGkuaXNQcmVzZW50aW5nPSEwLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX07bGV0IGxlPW5ldyAkLGhlPW5ldyAkO2Z1bmN0aW9uIEooTWUsRmUpe251bGw9PT1GZT9NZS5tYXRyaXhXb3JsZC5jb3B5KE1lLm1hdHJpeCk6TWUubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyhGZS5tYXRyaXhXb3JsZCxNZS5tYXRyaXgpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKX10aGlzLnVwZGF0ZUNhbWVyYT1mdW5jdGlvbihNZSl7aWYobnVsbD09PXIpcmV0dXJuO1gubmVhcj1PLm5lYXI9QS5uZWFyPU1lLm5lYXIsWC5mYXI9Ty5mYXI9QS5mYXI9TWUuZmFyLCh4ZSE9PVgubmVhcnx8ZmUhPT1YLmZhcikmJihyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6WC5uZWFyLGRlcHRoRmFyOlguZmFyfSkseGU9WC5uZWFyLGZlPVguZmFyKTtsZXQgRmU9TWUucGFyZW50LHV0PVguY2FtZXJhcztKKFgsRmUpO2ZvcihsZXQgZ3Q9MDtndDx1dC5sZW5ndGg7Z3QrKylKKHV0W2d0XSxGZSk7WC5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoWC5wb3NpdGlvbixYLnF1YXRlcm5pb24sWC5zY2FsZSksTWUucG9zaXRpb24uY29weShYLnBvc2l0aW9uKSxNZS5xdWF0ZXJuaW9uLmNvcHkoWC5xdWF0ZXJuaW9uKSxNZS5zY2FsZS5jb3B5KFguc2NhbGUpLE1lLm1hdHJpeC5jb3B5KFgubWF0cml4KSxNZS5tYXRyaXhXb3JsZC5jb3B5KFgubWF0cml4V29ybGQpO2xldCBTdD1NZS5jaGlsZHJlbjtmb3IobGV0IGd0PTAsUmU9U3QubGVuZ3RoO2d0PFJlO2d0KyspU3RbZ3RdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTsyPT09dXQubGVuZ3RoP2Z1bmN0aW9uKE1lLEZlLHV0KXtsZS5zZXRGcm9tTWF0cml4UG9zaXRpb24oRmUubWF0cml4V29ybGQpLGhlLnNldEZyb21NYXRyaXhQb3NpdGlvbih1dC5tYXRyaXhXb3JsZCk7bGV0IFN0PWxlLmRpc3RhbmNlVG8oaGUpLGd0PUZlLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsUmU9dXQucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxBbj1ndFsxNF0vKGd0WzEwXS0xKSxFdD1ndFsxNF0vKGd0WzEwXSsxKSxvbj0oZ3RbOV0rMSkvZ3RbNV0sQ2U9KGd0WzldLTEpL2d0WzVdLHZ0PShndFs4XS0xKS9ndFswXSxfdD0oUmVbOF0rMSkvUmVbMF0saWU9QW4qdnQsY3Q9QW4qX3QsWWU9U3QvKC12dCtfdCkseHQ9WWUqLXZ0O0ZlLm1hdHJpeFdvcmxkLmRlY29tcG9zZShNZS5wb3NpdGlvbixNZS5xdWF0ZXJuaW9uLE1lLnNjYWxlKSxNZS50cmFuc2xhdGVYKHh0KSxNZS50cmFuc2xhdGVaKFllKSxNZS5tYXRyaXhXb3JsZC5jb21wb3NlKE1lLnBvc2l0aW9uLE1lLnF1YXRlcm5pb24sTWUuc2NhbGUpLE1lLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KE1lLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgaHQ9QW4rWWUsc249RXQrWWU7TWUucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUoaWUteHQsY3QrKFN0LXh0KSxvbipFdC9zbipodCxDZSpFdC9zbipodCxodCxzbil9KFgsQSxPKTpYLnByb2plY3Rpb25NYXRyaXguY29weShBLnByb2plY3Rpb25NYXRyaXgpfSx0aGlzLmdldENhbWVyYT1mdW5jdGlvbigpe3JldHVybiBYfSx0aGlzLmdldEZvdmVhdGlvbj1mdW5jdGlvbigpe3JldHVybiBudWxsIT09ZD9kLmZpeGVkRm92ZWF0aW9uOm51bGwhPT1wP3AuZml4ZWRGb3ZlYXRpb246dm9pZCAwfSx0aGlzLnNldEZvdmVhdGlvbj1mdW5jdGlvbihNZSl7bnVsbCE9PWQmJihkLmZpeGVkRm92ZWF0aW9uPU1lKSxudWxsIT09cCYmdm9pZCAwIT09cC5maXhlZEZvdmVhdGlvbiYmKHAuZml4ZWRGb3ZlYXRpb249TWUpfTtsZXQgYWU9bnVsbCxqZT1uZXcgZ2xlO2plLnNldEFuaW1hdGlvbkxvb3AoZnVuY3Rpb24oTWUsRmUpe2lmKGM9RmUuZ2V0Vmlld2VyUG9zZShzKSxmPUZlLG51bGwhPT1jKXtsZXQgU3Q9Yy52aWV3cztudWxsIT09cCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIoXyxwLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldChfKSk7bGV0IGd0PSExO1N0Lmxlbmd0aCE9PVguY2FtZXJhcy5sZW5ndGgmJihYLmNhbWVyYXMubGVuZ3RoPTAsZ3Q9ITApO2ZvcihsZXQgUmU9MDtSZTxTdC5sZW5ndGg7UmUrKyl7bGV0IEFuPVN0W1JlXSxFdD1udWxsO2lmKG51bGwhPT1wKUV0PXAuZ2V0Vmlld3BvcnQoQW4pO2Vsc2V7bGV0IENlPXUuZ2V0Vmlld1N1YkltYWdlKGQsQW4pO0V0PUNlLnZpZXdwb3J0LDA9PT1SZSYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoXyxDZS5jb2xvclRleHR1cmUsZC5pZ25vcmVEZXB0aFZhbHVlcz92b2lkIDA6Q2UuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQoXykpfWxldCBvbj1lZVtSZV07b24ubWF0cml4LmZyb21BcnJheShBbi50cmFuc2Zvcm0ubWF0cml4KSxvbi5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShBbi5wcm9qZWN0aW9uTWF0cml4KSxvbi52aWV3cG9ydC5zZXQoRXQueCxFdC55LEV0LndpZHRoLEV0LmhlaWdodCksMD09PVJlJiZYLm1hdHJpeC5jb3B5KG9uLm1hdHJpeCksITA9PT1ndCYmWC5jYW1lcmFzLnB1c2gob24pfX1sZXQgdXQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBTdD0wO1N0PHkubGVuZ3RoO1N0KyspeVtTdF0udXBkYXRlKHV0W1N0XSxGZSxzKTthZSYmYWUoTWUsRmUpLGY9bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihNZSl7YWU9TWV9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBvOGUobil7ZnVuY3Rpb24gaShfLHkpe18ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHkseS5jb2xvciYmXy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvcikseS5lbWlzc2l2ZSYmXy5lbWlzc2l2ZS52YWx1ZS5jb3B5KHkuZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKHkuZW1pc3NpdmVJbnRlbnNpdHkpLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuc3BlY3VsYXJNYXAmJihfLnNwZWN1bGFyTWFwLnZhbHVlPXkuc3BlY3VsYXJNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCk7bGV0IEEsTyxJPW4uZ2V0KHkpLmVudk1hcDtJJiYoXy5lbnZNYXAudmFsdWU9SSxfLmZsaXBFbnZNYXAudmFsdWU9SS5pc0N1YmVUZXh0dXJlJiYhMT09PUkuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsXy5yZWZsZWN0aXZpdHkudmFsdWU9eS5yZWZsZWN0aXZpdHksXy5pb3IudmFsdWU9eS5pb3IsXy5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eS5yZWZyYWN0aW9uUmF0aW8pLHkubGlnaHRNYXAmJihfLmxpZ2h0TWFwLnZhbHVlPXkubGlnaHRNYXAsXy5saWdodE1hcEludGVuc2l0eS52YWx1ZT15LmxpZ2h0TWFwSW50ZW5zaXR5KSx5LmFvTWFwJiYoXy5hb01hcC52YWx1ZT15LmFvTWFwLF8uYW9NYXBJbnRlbnNpdHkudmFsdWU9eS5hb01hcEludGVuc2l0eSkseS5tYXA/QT15Lm1hcDp5LnNwZWN1bGFyTWFwP0E9eS5zcGVjdWxhck1hcDp5LmRpc3BsYWNlbWVudE1hcD9BPXkuZGlzcGxhY2VtZW50TWFwOnkubm9ybWFsTWFwP0E9eS5ub3JtYWxNYXA6eS5idW1wTWFwP0E9eS5idW1wTWFwOnkucm91Z2huZXNzTWFwP0E9eS5yb3VnaG5lc3NNYXA6eS5tZXRhbG5lc3NNYXA/QT15Lm1ldGFsbmVzc01hcDp5LmFscGhhTWFwP0E9eS5hbHBoYU1hcDp5LmVtaXNzaXZlTWFwP0E9eS5lbWlzc2l2ZU1hcDp5LmNsZWFyY29hdE1hcD9BPXkuY2xlYXJjb2F0TWFwOnkuY2xlYXJjb2F0Tm9ybWFsTWFwP0E9eS5jbGVhcmNvYXROb3JtYWxNYXA6eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/QT15LmNsZWFyY29hdFJvdWdobmVzc01hcDp5LnNwZWN1bGFySW50ZW5zaXR5TWFwP0E9eS5zcGVjdWxhckludGVuc2l0eU1hcDp5LnNwZWN1bGFyQ29sb3JNYXA/QT15LnNwZWN1bGFyQ29sb3JNYXA6eS50cmFuc21pc3Npb25NYXA/QT15LnRyYW5zbWlzc2lvbk1hcDp5LnRoaWNrbmVzc01hcD9BPXkudGhpY2tuZXNzTWFwOnkuc2hlZW5Db2xvck1hcD9BPXkuc2hlZW5Db2xvck1hcDp5LnNoZWVuUm91Z2huZXNzTWFwJiYoQT15LnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1BJiYoQS5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoQT1BLnRleHR1cmUpLCEwPT09QS5tYXRyaXhBdXRvVXBkYXRlJiZBLnVwZGF0ZU1hdHJpeCgpLF8udXZUcmFuc2Zvcm0udmFsdWUuY29weShBLm1hdHJpeCkpLHkuYW9NYXA/Tz15LmFvTWFwOnkubGlnaHRNYXAmJihPPXkubGlnaHRNYXApLHZvaWQgMCE9PU8mJihPLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihPPU8udGV4dHVyZSksITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51djJUcmFuc2Zvcm0udmFsdWUuY29weShPLm1hdHJpeCkpfWZ1bmN0aW9uIGQoXyx5KXtfLnJvdWdobmVzcy52YWx1ZT15LnJvdWdobmVzcyxfLm1ldGFsbmVzcy52YWx1ZT15Lm1ldGFsbmVzcyx5LnJvdWdobmVzc01hcCYmKF8ucm91Z2huZXNzTWFwLnZhbHVlPXkucm91Z2huZXNzTWFwKSx5Lm1ldGFsbmVzc01hcCYmKF8ubWV0YWxuZXNzTWFwLnZhbHVlPXkubWV0YWxuZXNzTWFwKSx5LmVtaXNzaXZlTWFwJiYoXy5lbWlzc2l2ZU1hcC52YWx1ZT15LmVtaXNzaXZlTWFwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldCh5KS5lbnZNYXAmJihfLmVudk1hcEludGVuc2l0eS52YWx1ZT15LmVudk1hcEludGVuc2l0eSl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3JtczpmdW5jdGlvbihfLHkpe18uZm9nQ29sb3IudmFsdWUuY29weSh5LmNvbG9yKSx5LmlzRm9nPyhfLmZvZ05lYXIudmFsdWU9eS5uZWFyLF8uZm9nRmFyLnZhbHVlPXkuZmFyKTp5LmlzRm9nRXhwMiYmKF8uZm9nRGVuc2l0eS52YWx1ZT15LmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbihfLHksSSxBLE8pe3kuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKF8seSk6eS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkoXyx5KSxmdW5jdGlvbihfLHkpe3kuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApfShfLHkpKTp5LmlzTWVzaFRvb25NYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7eS5ncmFkaWVudE1hcCYmKF8uZ3JhZGllbnRNYXAudmFsdWU9eS5ncmFkaWVudE1hcCkseS5lbWlzc2l2ZU1hcCYmKF8uZW1pc3NpdmVNYXAudmFsdWU9eS5lbWlzc2l2ZU1hcCkseS5idW1wTWFwJiYoXy5idW1wTWFwLnZhbHVlPXkuYnVtcE1hcCxfLmJ1bXBTY2FsZS52YWx1ZT15LmJ1bXBTY2FsZSwxPT09eS5zaWRlJiYoXy5idW1wU2NhbGUudmFsdWUqPS0xKSkseS5ub3JtYWxNYXAmJihfLm5vcm1hbE1hcC52YWx1ZT15Lm5vcm1hbE1hcCxfLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeS5ub3JtYWxTY2FsZSksMT09PXkuc2lkZSYmXy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSkseS5kaXNwbGFjZW1lbnRNYXAmJihfLmRpc3BsYWNlbWVudE1hcC52YWx1ZT15LmRpc3BsYWNlbWVudE1hcCxfLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXkuZGlzcGxhY2VtZW50U2NhbGUsXy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXkuZGlzcGxhY2VtZW50Qmlhcyl9KF8seSkpOnkuaXNNZXNoUGhvbmdNYXRlcmlhbD8oaShfLHkpLGZ1bmN0aW9uKF8seSl7Xy5zcGVjdWxhci52YWx1ZS5jb3B5KHkuc3BlY3VsYXIpLF8uc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KHkuc2hpbmluZXNzLDFlLTQpLHkuZW1pc3NpdmVNYXAmJihfLmVtaXNzaXZlTWFwLnZhbHVlPXkuZW1pc3NpdmVNYXApLHkuYnVtcE1hcCYmKF8uYnVtcE1hcC52YWx1ZT15LmJ1bXBNYXAsXy5idW1wU2NhbGUudmFsdWU9eS5idW1wU2NhbGUsMT09PXkuc2lkZSYmKF8uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHkubm9ybWFsTWFwJiYoXy5ub3JtYWxNYXAudmFsdWU9eS5ub3JtYWxNYXAsXy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkubm9ybWFsU2NhbGUpLDE9PT15LnNpZGUmJl8ubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHkuZGlzcGxhY2VtZW50TWFwJiYoXy5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eS5kaXNwbGFjZW1lbnRNYXAsXy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT15LmRpc3BsYWNlbWVudFNjYWxlLF8uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT15LmRpc3BsYWNlbWVudEJpYXMpfShfLHkpKTp5LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoXyx5KSx5LmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEkpe2QoXyx5KSxfLmlvci52YWx1ZT15Lmlvcix5LnNoZWVuPjAmJihfLnNoZWVuQ29sb3IudmFsdWUuY29weSh5LnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKHkuc2hlZW4pLF8uc2hlZW5Sb3VnaG5lc3MudmFsdWU9eS5zaGVlblJvdWdobmVzcyx5LnNoZWVuQ29sb3JNYXAmJihfLnNoZWVuQ29sb3JNYXAudmFsdWU9eS5zaGVlbkNvbG9yTWFwKSx5LnNoZWVuUm91Z2huZXNzTWFwJiYoXy5zaGVlblJvdWdobmVzc01hcC52YWx1ZT15LnNoZWVuUm91Z2huZXNzTWFwKSkseS5jbGVhcmNvYXQ+MCYmKF8uY2xlYXJjb2F0LnZhbHVlPXkuY2xlYXJjb2F0LF8uY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPXkuY2xlYXJjb2F0Um91Z2huZXNzLHkuY2xlYXJjb2F0TWFwJiYoXy5jbGVhcmNvYXRNYXAudmFsdWU9eS5jbGVhcmNvYXRNYXApLHkuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoXy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9eS5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLHkuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoXy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KHkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLF8uY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPXkuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT15LnNpZGUmJl8uY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSx5LnRyYW5zbWlzc2lvbj4wJiYoXy50cmFuc21pc3Npb24udmFsdWU9eS50cmFuc21pc3Npb24sXy50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPUkudGV4dHVyZSxfLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChJLndpZHRoLEkuaGVpZ2h0KSx5LnRyYW5zbWlzc2lvbk1hcCYmKF8udHJhbnNtaXNzaW9uTWFwLnZhbHVlPXkudHJhbnNtaXNzaW9uTWFwKSxfLnRoaWNrbmVzcy52YWx1ZT15LnRoaWNrbmVzcyx5LnRoaWNrbmVzc01hcCYmKF8udGhpY2tuZXNzTWFwLnZhbHVlPXkudGhpY2tuZXNzTWFwKSxfLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9eS5hdHRlbnVhdGlvbkRpc3RhbmNlLF8uYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHkuYXR0ZW51YXRpb25Db2xvcikpLF8uc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9eS5zcGVjdWxhckludGVuc2l0eSxfLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSh5LnNwZWN1bGFyQ29sb3IpLHkuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihfLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXkuc3BlY3VsYXJJbnRlbnNpdHlNYXApLHkuc3BlY3VsYXJDb2xvck1hcCYmKF8uc3BlY3VsYXJDb2xvck1hcC52YWx1ZT15LnNwZWN1bGFyQ29sb3JNYXApfShfLHksTyk6ZChfLHkpKTp5LmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5Lm1hdGNhcCYmKF8ubWF0Y2FwLnZhbHVlPXkubWF0Y2FwKSx5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKSxfLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoeS5yZWZlcmVuY2VQb3NpdGlvbiksXy5uZWFyRGlzdGFuY2UudmFsdWU9eS5uZWFyRGlzdGFuY2UsXy5mYXJEaXN0YW5jZS52YWx1ZT15LmZhckRpc3RhbmNlfShfLHkpKTp5LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKF8seSksZnVuY3Rpb24oXyx5KXt5LmJ1bXBNYXAmJihfLmJ1bXBNYXAudmFsdWU9eS5idW1wTWFwLF8uYnVtcFNjYWxlLnZhbHVlPXkuYnVtcFNjYWxlLDE9PT15LnNpZGUmJihfLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSx5Lm5vcm1hbE1hcCYmKF8ubm9ybWFsTWFwLnZhbHVlPXkubm9ybWFsTWFwLF8ubm9ybWFsU2NhbGUudmFsdWUuY29weSh5Lm5vcm1hbFNjYWxlKSwxPT09eS5zaWRlJiZfLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx5LmRpc3BsYWNlbWVudE1hcCYmKF8uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXkuZGlzcGxhY2VtZW50TWFwLF8uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eS5kaXNwbGFjZW1lbnRTY2FsZSxfLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eS5kaXNwbGFjZW1lbnRCaWFzKX0oXyx5KSk6eS5pc0xpbmVCYXNpY01hdGVyaWFsPyhmdW5jdGlvbihfLHkpe18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHl9KF8seSkseS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmZnVuY3Rpb24oXyx5KXtfLmRhc2hTaXplLnZhbHVlPXkuZGFzaFNpemUsXy50b3RhbFNpemUudmFsdWU9eS5kYXNoU2l6ZSt5LmdhcFNpemUsXy5zY2FsZS52YWx1ZT15LnNjYWxlfShfLHkpKTp5LmlzUG9pbnRzTWF0ZXJpYWw/ZnVuY3Rpb24oXyx5LEksQSl7bGV0IE87Xy5kaWZmdXNlLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSxfLnNpemUudmFsdWU9eS5zaXplKkksXy5zY2FsZS52YWx1ZT0uNSpBLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/Tz15Lm1hcDp5LmFscGhhTWFwJiYoTz15LmFscGhhTWFwKSx2b2lkIDAhPT1PJiYoITA9PT1PLm1hdHJpeEF1dG9VcGRhdGUmJk8udXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KE8ubWF0cml4KSl9KF8seSxJLEEpOnkuaXNTcHJpdGVNYXRlcmlhbD9mdW5jdGlvbihfLHkpe2xldCBJO18uZGlmZnVzZS52YWx1ZS5jb3B5KHkuY29sb3IpLF8ub3BhY2l0eS52YWx1ZT15Lm9wYWNpdHksXy5yb3RhdGlvbi52YWx1ZT15LnJvdGF0aW9uLHkubWFwJiYoXy5tYXAudmFsdWU9eS5tYXApLHkuYWxwaGFNYXAmJihfLmFscGhhTWFwLnZhbHVlPXkuYWxwaGFNYXApLHkuYWxwaGFUZXN0PjAmJihfLmFscGhhVGVzdC52YWx1ZT15LmFscGhhVGVzdCkseS5tYXA/ST15Lm1hcDp5LmFscGhhTWFwJiYoST15LmFscGhhTWFwKSx2b2lkIDAhPT1JJiYoITA9PT1JLm1hdHJpeEF1dG9VcGRhdGUmJkkudXBkYXRlTWF0cml4KCksXy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEkubWF0cml4KSl9KF8seSk6eS5pc1NoYWRvd01hdGVyaWFsPyhfLmNvbG9yLnZhbHVlLmNvcHkoeS5jb2xvciksXy5vcGFjaXR5LnZhbHVlPXkub3BhY2l0eSk6eS5pc1NoYWRlck1hdGVyaWFsJiYoeS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gWmkobj17fSl7bGV0IHQ9dm9pZCAwIT09bi5jYW52YXM/bi5jYW52YXM6ZnVuY3Rpb24oKXtsZXQgbj1TTSgiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59KCksZT12b2lkIDAhPT1uLmNvbnRleHQ/bi5jb250ZXh0Om51bGwsaT12b2lkIDAhPT1uLmFscGhhJiZuLmFscGhhLHI9dm9pZCAwPT09bi5kZXB0aHx8bi5kZXB0aCxvPXZvaWQgMD09PW4uc3RlbmNpbHx8bi5zdGVuY2lsLHM9dm9pZCAwIT09bi5hbnRpYWxpYXMmJm4uYW50aWFsaWFzLGE9dm9pZCAwPT09bi5wcmVtdWx0aXBsaWVkQWxwaGF8fG4ucHJlbXVsdGlwbGllZEFscGhhLGw9dm9pZCAwIT09bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJm4ucHJlc2VydmVEcmF3aW5nQnVmZmVyLGM9dm9pZCAwIT09bi5wb3dlclByZWZlcmVuY2U/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9dm9pZCAwIT09bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsZD1udWxsLHA9bnVsbCxoPVtdLGY9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1EaCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9MCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgbT10aGlzLEM9ITEsXz0wLHk9MCxJPW51bGwsQT0tMSxPPW51bGwsZWU9bmV3IHRyLFg9bmV3IHRyLHhlPW51bGwsZmU9dC53aWR0aCx2ZT10LmhlaWdodCxUPTEsbmU9bnVsbCxsZT1udWxsLGhlPW5ldyB0cigwLDAsZmUsdmUpLHllPW5ldyB0cigwLDAsZmUsdmUpLEo9ITEsYWU9bmV3IHZ5LG1lPSExLGplPSExLE1lPW51bGwsRmU9bmV3IE1uLHV0PW5ldyAkLFN0PXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gZ3QoKXtyZXR1cm4gbnVsbD09PUk/VDoxfWxldCBFdCxvbixDZSx2dCxfdCxpZSxjdCxZZSx4dCxodCxzbixTbixvaSxVaSx6aSxRLEYsVmUsQ3QsdG4sQmUsZ24sbG4sUmU9ZTtmdW5jdGlvbiBBbihTLEwpe2ZvcihsZXQgcT0wO3E8Uy5sZW5ndGg7cSsrKXtsZXQgY2U9dC5nZXRDb250ZXh0KFNbcV0sTCk7aWYobnVsbCE9PWNlKXJldHVybiBjZX1yZXR1cm4gbnVsbH10cnl7bGV0IFM9e2FscGhhOiEwLGRlcHRoOnIsc3RlbmNpbDpvLGFudGlhbGlhczpzLHByZW11bHRpcGxpZWRBbHBoYTphLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLCJ0aHJlZS5qcyByMTM3IiksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixMbiwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsdWUsITEpLG51bGw9PT1SZSl7bGV0IEw9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKCEwPT09bS5pc1dlYkdMMVJlbmRlcmVyJiZMLnNoaWZ0KCksUmU9QW4oTCxTKSxudWxsPT09UmUpdGhyb3cgQW4oTCk/bmV3IEVycm9yKCJFcnJvciBjcmVhdGluZyBXZWJHTCBjb250ZXh0IHdpdGggeW91ciBzZWxlY3RlZCBhdHRyaWJ1dGVzLiIpOm5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dC4iKX12b2lkIDA9PT1SZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQmJihSZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm57cmFuZ2VNaW46MSxyYW5nZU1heDoxLHByZWNpc2lvbjoxfX0pfWNhdGNoKFMpe3Rocm93IGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIrUy5tZXNzYWdlKSxTfWZ1bmN0aW9uIEZ0KCl7RXQ9bmV3IERVZShSZSksb249bmV3IENVZShSZSxFdCxuKSxFdC5pbml0KG9uKSxnbj1uZXcgaThlKFJlLEV0LG9uKSxDZT1uZXcgdDhlKFJlLEV0LG9uKSx2dD1uZXcgUFVlKFJlKSxfdD1uZXcgR3plLGllPW5ldyBuOGUoUmUsRXQsQ2UsX3Qsb24sZ24sdnQpLGN0PW5ldyBNVWUobSksWWU9bmV3IFRVZShtKSx4dD1uZXcgcTVlKFJlLG9uKSxsbj1uZXcgYlVlKFJlLEV0LHh0LG9uKSxodD1uZXcgQVVlKFJlLHh0LHZ0LGxuKSxzbj1uZXcgRlVlKFJlLGh0LHh0LHZ0KSxDdD1uZXcga1VlKFJlLG9uLGllKSxRPW5ldyB3VWUoX3QpLFNuPW5ldyBqemUobSxjdCxZZSxFdCxvbixsbixRKSxvaT1uZXcgbzhlKF90KSxVaT1uZXcgcXplLHppPW5ldyBKemUoRXQsb24pLFZlPW5ldyB5VWUobSxjdCxDZSxzbixpLGEpLEY9bmV3IEVsZShtLHNuLG9uKSx0bj1uZXcgeFVlKFJlLEV0LHZ0LG9uKSxCZT1uZXcgSVVlKFJlLEV0LHZ0LG9uKSx2dC5wcm9ncmFtcz1Tbi5wcm9ncmFtcyxtLmNhcGFiaWxpdGllcz1vbixtLmV4dGVuc2lvbnM9RXQsbS5wcm9wZXJ0aWVzPV90LG0ucmVuZGVyTGlzdHM9VWksbS5zaGFkb3dNYXA9RixtLnN0YXRlPUNlLG0uaW5mbz12dH1GdCgpO2xldCBrdD1uZXcgQVUobSxSZSk7ZnVuY3Rpb24gTG4oUyl7Uy5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIiksQz0hMH1mdW5jdGlvbiB1ZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLEM9ITE7bGV0IFM9dnQuYXV0b1Jlc2V0LEw9Ri5lbmFibGVkLHE9Ri5hdXRvVXBkYXRlLFo9Ri5uZWVkc1VwZGF0ZSxjZT1GLnR5cGU7RnQoKSx2dC5hdXRvUmVzZXQ9UyxGLmVuYWJsZWQ9TCxGLmF1dG9VcGRhdGU9cSxGLm5lZWRzVXBkYXRlPVosRi50eXBlPWNlfWZ1bmN0aW9uIEp0KFMpe2xldCBMPVMudGFyZ2V0O0wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsSnQpLGZ1bmN0aW9uKFMpeyhmdW5jdGlvbihTKXtsZXQgTD1fdC5nZXQoUykucHJvZ3JhbXM7dm9pZCAwIT09TCYmKEwuZm9yRWFjaChmdW5jdGlvbihxKXtTbi5yZWxlYXNlUHJvZ3JhbShxKX0pLFMuaXNTaGFkZXJNYXRlcmlhbCYmU24ucmVsZWFzZVNoYWRlckNhY2hlKFMpKX0pKFMpLF90LnJlbW92ZShTKX0oTCl9dGhpcy54cj1rdCx0aGlzLmdldENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gUmV9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gUmUuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IFM9RXQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtTJiZTLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBTPUV0LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7UyYmUy5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gVH0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKFMpe3ZvaWQgMCE9PVMmJihUPVMsdGhpcy5zZXRTaXplKGZlLHZlLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihTKXtyZXR1cm4gUy5zZXQoZmUsdmUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oUyxMLHEpe2t0LmlzUHJlc2VudGluZz9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IENhbid0IGNoYW5nZSBzaXplIHdoaWxlIFZSIGRldmljZSBpcyBwcmVzZW50aW5nLiIpOihmZT1TLHZlPUwsdC53aWR0aD1NYXRoLmZsb29yKFMqVCksdC5oZWlnaHQ9TWF0aC5mbG9vcihMKlQpLCExIT09cSYmKHQuc3R5bGUud2lkdGg9UysicHgiLHQuc3R5bGUuaGVpZ2h0PUwrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuc2V0KGZlKlQsdmUqVCkuZmxvb3IoKX0sdGhpcy5zZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihTLEwscSl7ZmU9Uyx2ZT1MLFQ9cSx0LndpZHRoPU1hdGguZmxvb3IoUypxKSx0LmhlaWdodD1NYXRoLmZsb29yKEwqcSksdGhpcy5zZXRWaWV3cG9ydCgwLDAsUyxMKX0sdGhpcy5nZXRDdXJyZW50Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShlZSl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weShoZSl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oUyxMLHEsWil7Uy5pc1ZlY3RvcjQ/aGUuc2V0KFMueCxTLnksUy56LFMudyk6aGUuc2V0KFMsTCxxLFopLENlLnZpZXdwb3J0KGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuY29weSh5ZSl9LHRoaXMuc2V0U2Npc3Nvcj1mdW5jdGlvbihTLEwscSxaKXtTLmlzVmVjdG9yND95ZS5zZXQoUy54LFMueSxTLnosUy53KTp5ZS5zZXQoUyxMLHEsWiksQ2Uuc2Npc3NvcihYLmNvcHkoeWUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIEp9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oUyl7Q2Uuc2V0U2Npc3NvclRlc3QoSj1TKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKFMpe25lPVN9LHRoaXMuc2V0VHJhbnNwYXJlbnRTb3J0PWZ1bmN0aW9uKFMpe2xlPVN9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihTKXtyZXR1cm4gUy5jb3B5KFZlLmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe1ZlLnNldENsZWFyQ29sb3IuYXBwbHkoVmUsYXJndW1lbnRzKX0sdGhpcy5nZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cmV0dXJuIFZlLmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7VmUuc2V0Q2xlYXJBbHBoYS5hcHBseShWZSxhcmd1bWVudHMpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKFMsTCxxKXtsZXQgWj0wOyh2b2lkIDA9PT1TfHxTKSYmKFp8PTE2Mzg0KSwodm9pZCAwPT09THx8TCkmJihafD0yNTYpLCh2b2lkIDA9PT1xfHxxKSYmKFp8PTEwMjQpLFJlLmNsZWFyKFopfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsTG4sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHVlLCExKSxVaS5kaXNwb3NlKCksemkuZGlzcG9zZSgpLF90LmRpc3Bvc2UoKSxjdC5kaXNwb3NlKCksWWUuZGlzcG9zZSgpLHNuLmRpc3Bvc2UoKSxsbi5kaXNwb3NlKCksU24uZGlzcG9zZSgpLGt0LmRpc3Bvc2UoKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLG1pKSxrdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixtciksTWUmJihNZS5kaXNwb3NlKCksTWU9bnVsbCksb3Muc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihTLEwscSxaLGNlLFVlKXtudWxsPT09TCYmKEw9U3QpO2xldCAkZT1jZS5pc01lc2gmJmNlLm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCxXZT1mdW5jdGlvbihTLEwscSxaLGNlKXshMCE9PUwuaXNTY2VuZSYmKEw9U3QpLGllLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFVlPUwuZm9nLFdlPW51bGw9PT1JP20ub3V0cHV0RW5jb2Rpbmc6ITA9PT1JLmlzWFJSZW5kZXJUYXJnZXQ/SS50ZXh0dXJlLmVuY29kaW5nOkRoLHJ0PShaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/WWU6Y3QpLmdldChaLmVudk1hcHx8KFouaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9MLmVudmlyb25tZW50Om51bGwpKSxkdD0hMD09PVoudmVydGV4Q29sb3JzJiYhIXEuYXR0cmlidXRlcy5jb2xvciYmND09PXEuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxUdD0hIVoubm9ybWFsTWFwJiYhIXEuYXR0cmlidXRlcy50YW5nZW50LEF0PSEhcS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sY249ISFxLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwsSmk9cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAseGk9Wi50b25lTWFwcGVkP20udG9uZU1hcHBpbmc6MCxtbj1fdC5nZXQoWiksUm49cC5zdGF0ZS5saWdodHM7ITAhPT1tZXx8ITAhPT1qZSYmUz09PU98fFEuc2V0U3RhdGUoWixTLFM9PT1PJiZaLmlkPT09QSk7bGV0IER0PSExO1oudmVyc2lvbj09PW1uLl9fdmVyc2lvbj8obW4ubmVlZHNMaWdodHMmJm1uLmxpZ2h0c1N0YXRlVmVyc2lvbiE9PVJuLnN0YXRlLnZlcnNpb258fG1uLm91dHB1dEVuY29kaW5nIT09V2V8fGNlLmlzSW5zdGFuY2VkTWVzaCYmITE9PT1tbi5pbnN0YW5jaW5nfHwhY2UuaXNJbnN0YW5jZWRNZXNoJiYhMD09PW1uLmluc3RhbmNpbmd8fGNlLmlzU2tpbm5lZE1lc2gmJiExPT09bW4uc2tpbm5pbmd8fCFjZS5pc1NraW5uZWRNZXNoJiYhMD09PW1uLnNraW5uaW5nfHxtbi5lbnZNYXAhPT1ydHx8Wi5mb2cmJm1uLmZvZyE9PVVlfHx2b2lkIDAhPT1tbi5udW1DbGlwcGluZ1BsYW5lcyYmKG1uLm51bUNsaXBwaW5nUGxhbmVzIT09US5udW1QbGFuZXN8fG1uLm51bUludGVyc2VjdGlvbiE9PVEubnVtSW50ZXJzZWN0aW9uKXx8bW4udmVydGV4QWxwaGFzIT09ZHR8fG1uLnZlcnRleFRhbmdlbnRzIT09VHR8fG1uLm1vcnBoVGFyZ2V0cyE9PUF0fHxtbi5tb3JwaE5vcm1hbHMhPT1jbnx8bW4udG9uZU1hcHBpbmchPT14aXx8ITA9PT1vbi5pc1dlYkdMMiYmbW4ubW9ycGhUYXJnZXRzQ291bnQhPT1KaSkmJihEdD0hMCk6KER0PSEwLG1uLl9fdmVyc2lvbj1aLnZlcnNpb24pO2xldCBnaT1tbi5jdXJyZW50UHJvZ3JhbTshMD09PUR0JiYoZ2k9QnkoWixMLGNlKSk7bGV0IGVpPSExLFVuPSExLFhuPSExLFZ0PWdpLmdldFVuaWZvcm1zKCksamk9bW4udW5pZm9ybXM7aWYoQ2UudXNlUHJvZ3JhbShnaS5wcm9ncmFtKSYmKGVpPSEwLFVuPSEwLFhuPSEwKSxaLmlkIT09QSYmKEE9Wi5pZCxVbj0hMCksZWl8fE8hPT1TKXtpZihWdC5zZXRWYWx1ZShSZSwicHJvamVjdGlvbk1hdHJpeCIsUy5wcm9qZWN0aW9uTWF0cml4KSxvbi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZWdC5zZXRWYWx1ZShSZSwibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coUy5mYXIrMSkvTWF0aC5MTjIpKSxPIT09UyYmKE89UyxVbj0hMCxYbj0hMCksWi5pc1NoYWRlck1hdGVyaWFsfHxaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouZW52TWFwKXtsZXQgd249VnQubWFwLmNhbWVyYVBvc2l0aW9uO3ZvaWQgMCE9PXduJiZ3bi5zZXRWYWx1ZShSZSx1dC5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCkpfShaLmlzTWVzaFBob25nTWF0ZXJpYWx8fFouaXNNZXNoVG9vbk1hdGVyaWFsfHxaLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8Wi5pc01lc2hCYXNpY01hdGVyaWFsfHxaLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFouaXNTaGFkZXJNYXRlcmlhbCkmJlZ0LnNldFZhbHVlKFJlLCJpc09ydGhvZ3JhcGhpYyIsITA9PT1TLmlzT3J0aG9ncmFwaGljQ2FtZXJhKSwoWi5pc01lc2hQaG9uZ01hdGVyaWFsfHxaLmlzTWVzaFRvb25NYXRlcmlhbHx8Wi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fFouaXNNZXNoQmFzaWNNYXRlcmlhbHx8Wi5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxaLmlzU2hhZGVyTWF0ZXJpYWx8fFouaXNTaGFkb3dNYXRlcmlhbHx8Y2UuaXNTa2lubmVkTWVzaCkmJlZ0LnNldFZhbHVlKFJlLCJ2aWV3TWF0cml4IixTLm1hdHJpeFdvcmxkSW52ZXJzZSl9aWYoY2UuaXNTa2lubmVkTWVzaCl7VnQuc2V0T3B0aW9uYWwoUmUsY2UsImJpbmRNYXRyaXgiKSxWdC5zZXRPcHRpb25hbChSZSxjZSwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgd249Y2Uuc2tlbGV0b247d24mJihvbi5mbG9hdFZlcnRleFRleHR1cmVzPyhudWxsPT09d24uYm9uZVRleHR1cmUmJnduLmNvbXB1dGVCb25lVGV4dHVyZSgpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZSIsd24uYm9uZVRleHR1cmUsaWUpLFZ0LnNldFZhbHVlKFJlLCJib25lVGV4dHVyZVNpemUiLHduLmJvbmVUZXh0dXJlU2l6ZSkpOlZ0LnNldE9wdGlvbmFsKFJlLHduLCJib25lTWF0cmljZXMiKSl9cmV0dXJuISFxJiYodm9pZCAwIT09cS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb258fHZvaWQgMCE9PXEubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCkmJkN0LnVwZGF0ZShjZSxxLFosZ2kpLChVbnx8bW4ucmVjZWl2ZVNoYWRvdyE9PWNlLnJlY2VpdmVTaGFkb3cpJiYobW4ucmVjZWl2ZVNoYWRvdz1jZS5yZWNlaXZlU2hhZG93LFZ0LnNldFZhbHVlKFJlLCJyZWNlaXZlU2hhZG93IixjZS5yZWNlaXZlU2hhZG93KSksVW4mJihWdC5zZXRWYWx1ZShSZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxtbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oUyxMKXtTLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPUwsUy5saWdodFByb2JlLm5lZWRzVXBkYXRlPUwsUy5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9TCxTLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPUwsUy5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1MLFMuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1MLFMucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9TCxTLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9TH0oamksWG4pLFVlJiZaLmZvZyYmb2kucmVmcmVzaEZvZ1VuaWZvcm1zKGppLFVlKSxvaS5yZWZyZXNoTWF0ZXJpYWxVbmlmb3JtcyhqaSxaLFQsdmUsTWUpLFRoLnVwbG9hZChSZSxtbi51bmlmb3Jtc0xpc3QsamksaWUpKSxaLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09Wi51bmlmb3Jtc05lZWRVcGRhdGUmJihUaC51cGxvYWQoUmUsbW4udW5pZm9ybXNMaXN0LGppLGllKSxaLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSksWi5pc1Nwcml0ZU1hdGVyaWFsJiZWdC5zZXRWYWx1ZShSZSwiY2VudGVyIixjZS5jZW50ZXIpLFZ0LnNldFZhbHVlKFJlLCJtb2RlbFZpZXdNYXRyaXgiLGNlLm1vZGVsVmlld01hdHJpeCksVnQuc2V0VmFsdWUoUmUsIm5vcm1hbE1hdHJpeCIsY2Uubm9ybWFsTWF0cml4KSxWdC5zZXRWYWx1ZShSZSwibW9kZWxNYXRyaXgiLGNlLm1hdHJpeFdvcmxkKSxnaX0oUyxMLHEsWixjZSk7Q2Uuc2V0TWF0ZXJpYWwoWiwkZSk7bGV0IHJ0PXEuaW5kZXgsZHQ9cS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGw9PT1ydCl7aWYodm9pZCAwPT09ZHR8fDA9PT1kdC5jb3VudClyZXR1cm59ZWxzZSBpZigwPT09cnQuY291bnQpcmV0dXJuO2xldCBUdD0xOyEwPT09Wi53aXJlZnJhbWUmJihydD1odC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUocSksVHQ9MiksbG4uc2V0dXAoY2UsWixXZSxxLHJ0KTtsZXQgQXQsY249dG47bnVsbCE9PXJ0JiYoQXQ9eHQuZ2V0KHJ0KSxjbj1CZSxjbi5zZXRJbmRleChBdCkpO2xldCBKaT1udWxsIT09cnQ/cnQuY291bnQ6ZHQuY291bnQseGk9cS5kcmF3UmFuZ2Uuc3RhcnQqVHQsbW49cS5kcmF3UmFuZ2UuY291bnQqVHQsUm49bnVsbCE9PVVlP1VlLnN0YXJ0KlR0OjAsRHQ9bnVsbCE9PVVlP1VlLmNvdW50KlR0OjEvMCxnaT1NYXRoLm1heCh4aSxSbiksZWk9TWF0aC5taW4oSmkseGkrbW4sUm4rRHQpLTEsVW49TWF0aC5tYXgoMCxlaS1naSsxKTtpZigwIT09VW4pe2lmKGNlLmlzTWVzaCkhMD09PVoud2lyZWZyYW1lPyhDZS5zZXRMaW5lV2lkdGgoWi53aXJlZnJhbWVMaW5ld2lkdGgqZ3QoKSksY24uc2V0TW9kZSgxKSk6Y24uc2V0TW9kZSg0KTtlbHNlIGlmKGNlLmlzTGluZSl7bGV0IFhuPVoubGluZXdpZHRoO3ZvaWQgMD09PVhuJiYoWG49MSksQ2Uuc2V0TGluZVdpZHRoKFhuKmd0KCkpLGNuLnNldE1vZGUoY2UuaXNMaW5lU2VnbWVudHM/MTpjZS5pc0xpbmVMb29wPzI6Myl9ZWxzZSBjZS5pc1BvaW50cz9jbi5zZXRNb2RlKDApOmNlLmlzU3ByaXRlJiZjbi5zZXRNb2RlKDQpO2lmKGNlLmlzSW5zdGFuY2VkTWVzaCljbi5yZW5kZXJJbnN0YW5jZXMoZ2ksVW4sY2UuY291bnQpO2Vsc2UgaWYocS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgWG49TWF0aC5taW4ocS5pbnN0YW5jZUNvdW50LHEuX21heEluc3RhbmNlQ291bnQpO2NuLnJlbmRlckluc3RhbmNlcyhnaSxVbixYbil9ZWxzZSBjbi5yZW5kZXIoZ2ksVW4pfX0sdGhpcy5jb21waWxlPWZ1bmN0aW9uKFMsTCl7cD16aS5nZXQoUykscC5pbml0KCksZi5wdXNoKHApLFMudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKHEpe3EuaXNMaWdodCYmcS5sYXllcnMudGVzdChMLmxheWVycykmJihwLnB1c2hMaWdodChxKSxxLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhxKSl9KSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLFMudHJhdmVyc2UoZnVuY3Rpb24ocSl7bGV0IFo9cS5tYXRlcmlhbDtpZihaKWlmKEFycmF5LmlzQXJyYXkoWikpZm9yKGxldCBjZT0wO2NlPFoubGVuZ3RoO2NlKyspQnkoWltjZV0sUyxxKTtlbHNlIEJ5KFosUyxxKX0pLGYucG9wKCkscD1udWxsfTtsZXQgR2U9bnVsbDtmdW5jdGlvbiBtaSgpe29zLnN0b3AoKX1mdW5jdGlvbiBtcigpe29zLnN0YXJ0KCl9bGV0IG9zPW5ldyBnbGU7ZnVuY3Rpb24gVHIoUyxMLHEsWil7aWYoITE9PT1TLnZpc2libGUpcmV0dXJuO2lmKFMubGF5ZXJzLnRlc3QoTC5sYXllcnMpKWlmKFMuaXNHcm91cClxPVMucmVuZGVyT3JkZXI7ZWxzZSBpZihTLmlzTE9EKSEwPT09Uy5hdXRvVXBkYXRlJiZTLnVwZGF0ZShMKTtlbHNlIGlmKFMuaXNMaWdodClwLnB1c2hMaWdodChTKSxTLmNhc3RTaGFkb3cmJnAucHVzaFNoYWRvdyhTKTtlbHNlIGlmKFMuaXNTcHJpdGUpe2lmKCFTLmZydXN0dW1DdWxsZWR8fGFlLmludGVyc2VjdHNTcHJpdGUoUykpe1omJnV0LnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRmUpO2xldCAkZT1zbi51cGRhdGUoUyksV2U9Uy5tYXRlcmlhbDtXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9fWVsc2UgaWYoKFMuaXNNZXNofHxTLmlzTGluZXx8Uy5pc1BvaW50cykmJihTLmlzU2tpbm5lZE1lc2gmJlMuc2tlbGV0b24uZnJhbWUhPT12dC5yZW5kZXIuZnJhbWUmJihTLnNrZWxldG9uLnVwZGF0ZSgpLFMuc2tlbGV0b24uZnJhbWU9dnQucmVuZGVyLmZyYW1lKSwhUy5mcnVzdHVtQ3VsbGVkfHxhZS5pbnRlcnNlY3RzT2JqZWN0KFMpKSl7WiYmdXQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLmFwcGx5TWF0cml4NChGZSk7bGV0ICRlPXNuLnVwZGF0ZShTKSxXZT1TLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoV2UpKXtsZXQgcnQ9JGUuZ3JvdXBzO2ZvcihsZXQgZHQ9MCxUdD1ydC5sZW5ndGg7ZHQ8VHQ7ZHQrKyl7bGV0IEF0PXJ0W2R0XSxjbj1XZVtBdC5tYXRlcmlhbEluZGV4XTtjbiYmY24udmlzaWJsZSYmZC5wdXNoKFMsJGUsY24scSx1dC56LEF0KX19ZWxzZSBXZS52aXNpYmxlJiZkLnB1c2goUywkZSxXZSxxLHV0LnosbnVsbCl9bGV0IFVlPVMuY2hpbGRyZW47Zm9yKGxldCAkZT0wLFdlPVVlLmxlbmd0aDskZTxXZTskZSsrKVRyKFVlWyRlXSxMLHEsWil9ZnVuY3Rpb24gZWwoUyxMLHEsWil7bGV0IGNlPVMub3BhcXVlLFVlPVMudHJhbnNtaXNzaXZlLCRlPVMudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcocSksVWUubGVuZ3RoPjAmJmZ1bmN0aW9uKFMsTCxxKXtudWxsPT09TWUmJihNZT1uZXcoITA9PT1zJiYhMD09PW9uLmlzV2ViR0wyP0VNOnZhKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT1nbi5jb252ZXJ0KHV5KT91eTpTaCxtaW5GaWx0ZXI6MTAwOCxtYWdGaWx0ZXI6SW8sd3JhcFM6WmEsd3JhcFQ6WmEsdXNlUmVuZGVyVG9UZXh0dXJlOkV0LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KSk7bGV0IFo9bS5nZXRSZW5kZXJUYXJnZXQoKTttLnNldFJlbmRlclRhcmdldChNZSksbS5jbGVhcigpO2xldCBjZT1tLnRvbmVNYXBwaW5nO20udG9uZU1hcHBpbmc9MCxWbChTLEwscSksbS50b25lTWFwcGluZz1jZSxpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChNZSksaWUudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKE1lKSxtLnNldFJlbmRlclRhcmdldChaKX0oY2UsTCxxKSxaJiZDZS52aWV3cG9ydChlZS5jb3B5KFopKSxjZS5sZW5ndGg+MCYmVmwoY2UsTCxxKSxVZS5sZW5ndGg+MCYmVmwoVWUsTCxxKSwkZS5sZW5ndGg+MCYmVmwoJGUsTCxxKX1mdW5jdGlvbiBWbChTLEwscSl7bGV0IFo9ITA9PT1MLmlzU2NlbmU/TC5vdmVycmlkZU1hdGVyaWFsOm51bGw7Zm9yKGxldCBjZT0wLFVlPVMubGVuZ3RoO2NlPFVlO2NlKyspe2xldCAkZT1TW2NlXSxXZT0kZS5vYmplY3QscnQ9JGUuZ2VvbWV0cnksZHQ9bnVsbD09PVo/JGUubWF0ZXJpYWw6WixUdD0kZS5ncm91cDtXZS5sYXllcnMudGVzdChxLmxheWVycykmJkNPKFdlLEwscSxydCxkdCxUdCl9fWZ1bmN0aW9uIENPKFMsTCxxLFosY2UsVWUpe1Mub25CZWZvcmVSZW5kZXIobSxMLHEsWixjZSxVZSksUy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhxLm1hdHJpeFdvcmxkSW52ZXJzZSxTLm1hdHJpeFdvcmxkKSxTLm5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoUy5tb2RlbFZpZXdNYXRyaXgpLGNlLm9uQmVmb3JlUmVuZGVyKG0sTCxxLFosUyxVZSksITA9PT1jZS50cmFuc3BhcmVudCYmMj09PWNlLnNpZGU/KGNlLnNpZGU9MSxjZS5uZWVkc1VwZGF0ZT0hMCxtLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxjZS5zaWRlPTAsY2UubmVlZHNVcGRhdGU9ITAsbS5yZW5kZXJCdWZmZXJEaXJlY3QocSxMLFosY2UsUyxVZSksY2Uuc2lkZT0yKTptLnJlbmRlckJ1ZmZlckRpcmVjdChxLEwsWixjZSxTLFVlKSxTLm9uQWZ0ZXJSZW5kZXIobSxMLHEsWixjZSxVZSl9ZnVuY3Rpb24gQnkoUyxMLHEpeyEwIT09TC5pc1NjZW5lJiYoTD1TdCk7bGV0IFo9X3QuZ2V0KFMpLGNlPXAuc3RhdGUubGlnaHRzLCRlPWNlLnN0YXRlLnZlcnNpb24sV2U9U24uZ2V0UGFyYW1ldGVycyhTLGNlLnN0YXRlLHAuc3RhdGUuc2hhZG93c0FycmF5LEwscSkscnQ9U24uZ2V0UHJvZ3JhbUNhY2hlS2V5KFdlKSxkdD1aLnByb2dyYW1zO1ouZW52aXJvbm1lbnQ9Uy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0wuZW52aXJvbm1lbnQ6bnVsbCxaLmZvZz1MLmZvZyxaLmVudk1hcD0oUy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1llOmN0KS5nZXQoUy5lbnZNYXB8fFouZW52aXJvbm1lbnQpLHZvaWQgMD09PWR0JiYoUy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixKdCksZHQ9bmV3IE1hcCxaLnByb2dyYW1zPWR0KTtsZXQgVHQ9ZHQuZ2V0KHJ0KTtpZih2b2lkIDAhPT1UdCl7aWYoWi5jdXJyZW50UHJvZ3JhbT09PVR0JiZaLmxpZ2h0c1N0YXRlVmVyc2lvbj09PSRlKXJldHVybiBuUyhTLFdlKSxUdH1lbHNlIFdlLnVuaWZvcm1zPVNuLmdldFVuaWZvcm1zKFMpLFMub25CdWlsZChxLFdlLG0pLFMub25CZWZvcmVDb21waWxlKFdlLG0pLFR0PVNuLmFjcXVpcmVQcm9ncmFtKFdlLHJ0KSxkdC5zZXQocnQsVHQpLFoudW5pZm9ybXM9V2UudW5pZm9ybXM7bGV0IEF0PVoudW5pZm9ybXM7KCFTLmlzU2hhZGVyTWF0ZXJpYWwmJiFTLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09Uy5jbGlwcGluZykmJihBdC5jbGlwcGluZ1BsYW5lcz1RLnVuaWZvcm0pLG5TKFMsV2UpLFoubmVlZHNMaWdodHM9ZnVuY3Rpb24oUyl7cmV0dXJuIFMuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxTLmlzTWVzaFRvb25NYXRlcmlhbHx8Uy5pc01lc2hQaG9uZ01hdGVyaWFsfHxTLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFMuaXNTaGFkb3dNYXRlcmlhbHx8Uy5pc1NoYWRlck1hdGVyaWFsJiYhMD09PVMubGlnaHRzfShTKSxaLmxpZ2h0c1N0YXRlVmVyc2lvbj0kZSxaLm5lZWRzTGlnaHRzJiYoQXQuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9Y2Uuc3RhdGUuYW1iaWVudCxBdC5saWdodFByb2JlLnZhbHVlPWNlLnN0YXRlLnByb2JlLEF0LmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsLEF0LmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LEF0LnNwb3RMaWdodHMudmFsdWU9Y2Uuc3RhdGUuc3BvdCxBdC5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPWNlLnN0YXRlLnNwb3RTaGFkb3csQXQucmVjdEFyZWFMaWdodHMudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWEsQXQubHRjXzEudmFsdWU9Y2Uuc3RhdGUucmVjdEFyZWFMVEMxLEF0Lmx0Y18yLnZhbHVlPWNlLnN0YXRlLnJlY3RBcmVhTFRDMixBdC5wb2ludExpZ2h0cy52YWx1ZT1jZS5zdGF0ZS5wb2ludCxBdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvdyxBdC5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPWNlLnN0YXRlLmhlbWksQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsQXQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsQXQuc3BvdFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5zcG90U2hhZG93TWFwLEF0LnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9Y2Uuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxBdC5wb2ludFNoYWRvd01hcC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hcCxBdC5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1jZS5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IGNuPVR0LmdldFVuaWZvcm1zKCksSmk9VGguc2VxV2l0aFZhbHVlKGNuLnNlcSxBdCk7cmV0dXJuIFouY3VycmVudFByb2dyYW09VHQsWi51bmlmb3Jtc0xpc3Q9SmksVHR9ZnVuY3Rpb24gblMoUyxMKXtsZXQgcT1fdC5nZXQoUyk7cS5vdXRwdXRFbmNvZGluZz1MLm91dHB1dEVuY29kaW5nLHEuaW5zdGFuY2luZz1MLmluc3RhbmNpbmcscS5za2lubmluZz1MLnNraW5uaW5nLHEubW9ycGhUYXJnZXRzPUwubW9ycGhUYXJnZXRzLHEubW9ycGhOb3JtYWxzPUwubW9ycGhOb3JtYWxzLHEubW9ycGhUYXJnZXRzQ291bnQ9TC5tb3JwaFRhcmdldHNDb3VudCxxLm51bUNsaXBwaW5nUGxhbmVzPUwubnVtQ2xpcHBpbmdQbGFuZXMscS5udW1JbnRlcnNlY3Rpb249TC5udW1DbGlwSW50ZXJzZWN0aW9uLHEudmVydGV4QWxwaGFzPUwudmVydGV4QWxwaGFzLHEudmVydGV4VGFuZ2VudHM9TC52ZXJ0ZXhUYW5nZW50cyxxLnRvbmVNYXBwaW5nPUwudG9uZU1hcHBpbmd9b3Muc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihTKXtHZSYmR2UoUyl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmb3Muc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihTKXtHZT1TLGt0LnNldEFuaW1hdGlvbkxvb3AoUyksbnVsbD09PVM/b3Muc3RvcCgpOm9zLnN0YXJ0KCl9LGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsbWkpLGt0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLG1yKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihTLEwpe2lmKHZvaWQgMD09PUx8fCEwPT09TC5pc0NhbWVyYSl7aWYoITAhPT1DKXtpZighMD09PVMuYXV0b1VwZGF0ZSYmUy51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1MLnBhcmVudCYmTC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09a3QuZW5hYmxlZCYmITA9PT1rdC5pc1ByZXNlbnRpbmcmJighMD09PWt0LmNhbWVyYUF1dG9VcGRhdGUmJmt0LnVwZGF0ZUNhbWVyYShMKSxMPWt0LmdldENhbWVyYSgpKSwhMD09PVMuaXNTY2VuZSYmUy5vbkJlZm9yZVJlbmRlcihtLFMsTCxJKSxwPXppLmdldChTLGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksRmUubXVsdGlwbHlNYXRyaWNlcyhMLnByb2plY3Rpb25NYXRyaXgsTC5tYXRyaXhXb3JsZEludmVyc2UpLGFlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KEZlKSxqZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLG1lPVEuaW5pdCh0aGlzLmNsaXBwaW5nUGxhbmVzLGplLEwpLGQ9VWkuZ2V0KFMsaC5sZW5ndGgpLGQuaW5pdCgpLGgucHVzaChkKSxUcihTLEwsMCxtLnNvcnRPYmplY3RzKSxkLmZpbmlzaCgpLCEwPT09bS5zb3J0T2JqZWN0cyYmZC5zb3J0KG5lLGxlKSwhMD09PW1lJiZRLmJlZ2luU2hhZG93cygpLEYucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LFMsTCksITA9PT1tZSYmUS5lbmRTaGFkb3dzKCksITA9PT10aGlzLmluZm8uYXV0b1Jlc2V0JiZ0aGlzLmluZm8ucmVzZXQoKSxWZS5yZW5kZXIoZCxTKSxwLnNldHVwTGlnaHRzKG0ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMpLEwuaXNBcnJheUNhbWVyYSl7bGV0IFo9TC5jYW1lcmFzO2ZvcihsZXQgY2U9MCxVZT1aLmxlbmd0aDtjZTxVZTtjZSsrKXtsZXQgJGU9WltjZV07ZWwoZCxTLCRlLCRlLnZpZXdwb3J0KX19ZWxzZSBlbChkLFMsTCk7bnVsbCE9PUkmJihpZS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChJKSxpZS51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoSSkpLCEwPT09Uy5pc1NjZW5lJiZTLm9uQWZ0ZXJSZW5kZXIobSxTLEwpLENlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQ2UuYnVmZmVycy5kZXB0aC5zZXRNYXNrKCEwKSxDZS5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLENlLnNldFBvbHlnb25PZmZzZXQoITEpLGxuLnJlc2V0RGVmYXVsdFN0YXRlKCksQT0tMSxPPW51bGwsZi5wb3AoKSxwPWYubGVuZ3RoPjA/ZltmLmxlbmd0aC0xXTpudWxsLGgucG9wKCksZD1oLmxlbmd0aD4wP2hbaC5sZW5ndGgtMV06bnVsbH19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuIil9LHRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gX30sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB5fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKFMsTCxxKXtfdC5nZXQoUy50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1MLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9cTtsZXQgWj1fdC5nZXQoUyk7Wi5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsWi5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9dm9pZCAwPT09cSxaLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fFMudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxTLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxTLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKFMsTCl7bGV0IHE9X3QuZ2V0KFMpO3EuX193ZWJnbEZyYW1lYnVmZmVyPUwscS5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1MfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihTLEw9MCxxPTApe0k9UyxfPUwseT1xO2xldCBaPSEwO2lmKFMpe2xldCBydD1fdC5nZXQoUyk7dm9pZCAwIT09cnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXI/KENlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxaPSExKTp2b2lkIDA9PT1ydC5fX3dlYmdsRnJhbWVidWZmZXI/aWUuc2V0dXBSZW5kZXJUYXJnZXQoUyk6cnQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiZpZS5yZWJpbmRUZXh0dXJlcyhTLF90LmdldChTLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLF90LmdldChTLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBjZT1udWxsLFVlPSExLCRlPSExO2lmKFMpe2xldCBydD1TLnRleHR1cmU7KHJ0LmlzRGF0YVRleHR1cmUzRHx8cnQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpJiYoJGU9ITApO2xldCBkdD1fdC5nZXQoUykuX193ZWJnbEZyYW1lYnVmZmVyO1MuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/KGNlPWR0W0xdLFVlPSEwKTpjZT1TLnVzZVJlbmRlcmJ1ZmZlcj9fdC5nZXQoUykuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOmR0LGVlLmNvcHkoUy52aWV3cG9ydCksWC5jb3B5KFMuc2Npc3NvcikseGU9Uy5zY2lzc29yVGVzdH1lbHNlIGVlLmNvcHkoaGUpLm11bHRpcGx5U2NhbGFyKFQpLmZsb29yKCksWC5jb3B5KHllKS5tdWx0aXBseVNjYWxhcihUKS5mbG9vcigpLHhlPUo7aWYoQ2UuYmluZEZyYW1lYnVmZmVyKDM2MTYwLGNlKSYmb24uZHJhd0J1ZmZlcnMmJlomJkNlLmRyYXdCdWZmZXJzKFMsY2UpLENlLnZpZXdwb3J0KGVlKSxDZS5zY2lzc29yKFgpLENlLnNldFNjaXNzb3JUZXN0KHhlKSxVZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM0MDY5K0wscnQuX193ZWJnbFRleHR1cmUscSl9ZWxzZSBpZigkZSl7bGV0IHJ0PV90LmdldChTLnRleHR1cmUpO1JlLmZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKDM2MTYwLDM2MDY0LHJ0Ll9fd2ViZ2xUZXh0dXJlLHF8fDAsTHx8MCl9QT0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKFMsTCxxLFosY2UsVWUsJGUpe2lmKCFTfHwhUy5pc1dlYkdMUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4iKTtsZXQgV2U9X3QuZ2V0KFMpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihTLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT0kZSYmKFdlPVdlWyRlXSksV2Upe0NlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXZSk7dHJ5e2xldCBydD1TLnRleHR1cmUsZHQ9cnQuZm9ybWF0LFR0PXJ0LnR5cGU7aWYoZHQhPT16cyYmZ24uY29udmVydChkdCkhPT1SZS5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2xldCBBdD1UdD09PXV5JiYoRXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8b24uaXNXZWJHTDImJkV0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZighKFR0PT09U2h8fGduLmNvbnZlcnQoVHQpPT09UmUuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8VHQ9PT1ZbSYmKG9uLmlzV2ViR0wyfHxFdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fEV0LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxBdCkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09UmUuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/TD49MCYmTDw9Uy53aWR0aC1aJiZxPj0wJiZxPD1TLmhlaWdodC1jZSYmUmUucmVhZFBpeGVscyhMLHEsWixjZSxnbi5jb252ZXJ0KGR0KSxnbi5jb252ZXJ0KFR0KSxVZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IHJ0PW51bGwhPT1JP190LmdldChJKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtDZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAscnQpfX19LHRoaXMuY29weUZyYW1lYnVmZmVyVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxPTApe2lmKCEwIT09TC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO2xldCBaPU1hdGgucG93KDIsLXEpLGNlPU1hdGguZmxvb3IoTC5pbWFnZS53aWR0aCpaKSxVZT1NYXRoLmZsb29yKEwuaW1hZ2UuaGVpZ2h0KlopO2llLnNldFRleHR1cmUyRChMLDApLFJlLmNvcHlUZXhTdWJJbWFnZTJEKDM1NTMscSwwLDAsUy54LFMueSxjZSxVZSksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlPWZ1bmN0aW9uKFMsTCxxLFo9MCl7bGV0IGNlPUwuaW1hZ2Uud2lkdGgsVWU9TC5pbWFnZS5oZWlnaHQsJGU9Z24uY29udmVydChxLmZvcm1hdCksV2U9Z24uY29udmVydChxLnR5cGUpO2llLnNldFRleHR1cmUyRChxLDApLFJlLnBpeGVsU3RvcmVpKDM3NDQwLHEuZmxpcFkpLFJlLnBpeGVsU3RvcmVpKDM3NDQxLHEucHJlbXVsdGlwbHlBbHBoYSksUmUucGl4ZWxTdG9yZWkoMzMxNyxxLnVucGFja0FsaWdubWVudCksTC5pc0RhdGFUZXh0dXJlP1JlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksY2UsVWUsJGUsV2UsTC5pbWFnZS5kYXRhKTpMLmlzQ29tcHJlc3NlZFRleHR1cmU/UmUuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksTC5taXBtYXBzWzBdLndpZHRoLEwubWlwbWFwc1swXS5oZWlnaHQsJGUsTC5taXBtYXBzWzBdLmRhdGEpOlJlLnRleFN1YkltYWdlMkQoMzU1MyxaLFMueCxTLnksJGUsV2UsTC5pbWFnZSksMD09PVomJnEuZ2VuZXJhdGVNaXBtYXBzJiZSZS5nZW5lcmF0ZU1pcG1hcCgzNTUzKSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihTLEwscSxaLGNlPTApe2lmKG0uaXNXZWJHTDFSZW5kZXJlcilyZXR1cm4gdm9pZCBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtsZXQgVHQsVWU9Uy5tYXgueC1TLm1pbi54KzEsJGU9Uy5tYXgueS1TLm1pbi55KzEsV2U9Uy5tYXguei1TLm1pbi56KzEscnQ9Z24uY29udmVydChaLmZvcm1hdCksZHQ9Z24uY29udmVydChaLnR5cGUpO2lmKFouaXNEYXRhVGV4dHVyZTNEKWllLnNldFRleHR1cmUzRChaLDApLFR0PTMyODc5O2Vsc2V7aWYoIVouaXNEYXRhVGV4dHVyZTJEQXJyYXkpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IG9ubHkgc3VwcG9ydHMgVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5LiIpO2llLnNldFRleHR1cmUyREFycmF5KFosMCksVHQ9MzU4NjZ9UmUucGl4ZWxTdG9yZWkoMzc0NDAsWi5mbGlwWSksUmUucGl4ZWxTdG9yZWkoMzc0NDEsWi5wcmVtdWx0aXBseUFscGhhKSxSZS5waXhlbFN0b3JlaSgzMzE3LFoudW5wYWNrQWxpZ25tZW50KTtsZXQgQXQ9UmUuZ2V0UGFyYW1ldGVyKDMzMTQpLGNuPVJlLmdldFBhcmFtZXRlcigzMjg3OCksSmk9UmUuZ2V0UGFyYW1ldGVyKDMzMTYpLHhpPVJlLmdldFBhcmFtZXRlcigzMzE1KSxtbj1SZS5nZXRQYXJhbWV0ZXIoMzI4NzcpLFJuPXEuaXNDb21wcmVzc2VkVGV4dHVyZT9xLm1pcG1hcHNbMF06cS5pbWFnZTtSZS5waXhlbFN0b3JlaSgzMzE0LFJuLndpZHRoKSxSZS5waXhlbFN0b3JlaSgzMjg3OCxSbi5oZWlnaHQpLFJlLnBpeGVsU3RvcmVpKDMzMTYsUy5taW4ueCksUmUucGl4ZWxTdG9yZWkoMzMxNSxTLm1pbi55KSxSZS5waXhlbFN0b3JlaSgzMjg3NyxTLm1pbi56KSxxLmlzRGF0YVRleHR1cmV8fHEuaXNEYXRhVGV4dHVyZTNEP1JlLnRleFN1YkltYWdlM0QoVHQsY2UsTC54LEwueSxMLnosVWUsJGUsV2UscnQsZHQsUm4uZGF0YSk6cS5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLFJlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LFJuLmRhdGEpKTpSZS50ZXhTdWJJbWFnZTNEKFR0LGNlLEwueCxMLnksTC56LFVlLCRlLFdlLHJ0LGR0LFJuKSxSZS5waXhlbFN0b3JlaSgzMzE0LEF0KSxSZS5waXhlbFN0b3JlaSgzMjg3OCxjbiksUmUucGl4ZWxTdG9yZWkoMzMxNixKaSksUmUucGl4ZWxTdG9yZWkoMzMxNSx4aSksUmUucGl4ZWxTdG9yZWkoMzI4NzcsbW4pLDA9PT1jZSYmWi5nZW5lcmF0ZU1pcG1hcHMmJlJlLmdlbmVyYXRlTWlwbWFwKFR0KSxDZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oUyl7aWUuc2V0VGV4dHVyZTJEKFMsMCksQ2UudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXtfPTAseT0wLEk9bnVsbCxDZS5yZXNldCgpLGxuLnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1aaS5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwLGNsYXNzIGV4dGVuZHMgWml7fS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgUk09Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IFJNKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtSTS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciBPTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IGFuKHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IE9NKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTtPTS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIGJ5PWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07YnkucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyICRtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPU1NLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9RmMoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLG89dGhpcy5zdHJpZGU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPUZjKCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07JG0ucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIG9vPW5ldyAkLGVnPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHI9ITEpe3RoaXMubmFtZT0iIix0aGlzLmRhdGE9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5vZmZzZXQ9aSx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1yfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmRhdGEuY291bnR9Z2V0IGFycmF5KCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheX1zZXQgbmVlZHNVcGRhdGUodCl7dGhpcy5kYXRhLm5lZWRzVXBkYXRlPXR9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5kYXRhLmNvdW50O2U8aTtlKyspb28ueD10aGlzLmdldFgoZSksb28ueT10aGlzLmdldFkoZSksb28uej10aGlzLmdldFooZSksb28uYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKW9vLng9dGhpcy5nZXRYKGUpLG9vLnk9dGhpcy5nZXRZKGUpLG9vLno9dGhpcy5nZXRaKGUpLG9vLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsb28ueCxvby55LG9vLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylvby54PXRoaXMuZ2V0WChlKSxvby55PXRoaXMuZ2V0WShlKSxvby56PXRoaXMuZ2V0WihlKSxvby50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxvby54LG9vLnksb28ueik7cmV0dXJuIHRoaXN9c2V0WCh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XT1lLHRoaXN9c2V0WSh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdPWUsdGhpc31zZXRaKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl09ZSx0aGlzfXNldFcodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXT1lLHRoaXN9Z2V0WCh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF19Z2V0WSh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXX1nZXRaKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdfWdldFcodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM119c2V0WFkodCxlLGkpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpc31zZXRYWVoodCxlLGkscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVsodD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQpKzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLG8pe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzLmRhdGEuYXJyYXlbdCszXT1vLHRoaXN9Y2xvbmUodCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLmNsb25lKCk6IENsb25pbmcgYW4gaW50ZXJsYXZlZCBidWZmZXIgYXR0cmlidXRlIHdpbGwgZGVpbnRlcmxlYXZlIGJ1ZmZlciBkYXRhLiIpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb3VudDtpKyspe2xldCByPWkqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldDtmb3IobGV0IG89MDtvPHRoaXMuaXRlbVNpemU7bysrKWUucHVzaCh0aGlzLmRhdGEuYXJyYXlbcitvXSl9cmV0dXJuIG5ldyBMcihuZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3RvcihlKSx0aGlzLml0ZW1TaXplLHRoaXMubm9ybWFsaXplZCl9cmV0dXJuIHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHZvaWQgMD09PXQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXSYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyBlZyh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih2b2lkIDA9PT10KXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OmUsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fTtlZy5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgRTI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnJvdGF0aW9uPTAsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtFMi5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDt2YXIgbnksZE09bmV3ICQsaXk9bmV3ICQscnk9bmV3ICQsb3k9bmV3IEplLHBNPW5ldyBKZSxUbGU9bmV3IE1uLCRSPW5ldyAkLGhNPW5ldyAkLGUyPW5ldyAkLEJhZT1uZXcgSmUsdVU9bmV3IEplLFZhZT1uZXcgSmU7ZnVuY3Rpb24gdDIobix0LGUsaSxyLG8pe295LnN1YlZlY3RvcnMobixlKS5hZGRTY2FsYXIoLjUpLm11bHRpcGx5KGkpLHZvaWQgMCE9PXI/KHBNLng9bypveS54LXIqb3kueSxwTS55PXIqb3kueCtvKm95LnkpOnBNLmNvcHkob3kpLG4uY29weSh0KSxuLngrPXBNLngsbi55Kz1wTS55LG4uYXBwbHlNYXRyaXg0KFRsZSl9KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZSIsdm9pZCAwPT09bnkpe255PW5ldyBLaTtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxpPW5ldyAkbShlLDUpO255LnNldEluZGV4KFswLDEsMiwwLDIsM10pLG55LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZyhpLDMsMCwhMSkpLG55LnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZyhpLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9bnksdGhpcy5tYXRlcmlhbD12b2lkIDAhPT10P3Q6bmV3IEUyLHRoaXMuY2VudGVyPW5ldyBKZSguNSwuNSl9cmF5Y2FzdCh0LGUpe251bGw9PT10LmNhbWVyYSYmY29uc29sZS5lcnJvcignVEhSRUUuU3ByaXRlOiAiUmF5Y2FzdGVyLmNhbWVyYSIgbmVlZHMgdG8gYmUgc2V0IGluIG9yZGVyIHRvIHJheWNhc3QgYWdhaW5zdCBzcHJpdGVzLicpLGl5LnNldEZyb21NYXRyaXhTY2FsZSh0aGlzLm1hdHJpeFdvcmxkKSxUbGUuY29weSh0LmNhbWVyYS5tYXRyaXhXb3JsZCksdGhpcy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyh0LmNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UsdGhpcy5tYXRyaXhXb3JsZCkscnkuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubW9kZWxWaWV3TWF0cml4KSx0LmNhbWVyYS5pc1BlcnNwZWN0aXZlQ2FtZXJhJiYhMT09PXRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uJiZpeS5tdWx0aXBseVNjYWxhcigtcnkueik7bGV0IHIsbyxpPXRoaXMubWF0ZXJpYWwucm90YXRpb247MCE9PWkmJihvPU1hdGguY29zKGkpLHI9TWF0aC5zaW4oaSkpO2xldCBzPXRoaXMuY2VudGVyO3QyKCRSLnNldCgtLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihoTS5zZXQoLjUsLS41LDApLHJ5LHMsaXkscixvKSx0MihlMi5zZXQoLjUsLjUsMCkscnkscyxpeSxyLG8pLEJhZS5zZXQoMCwwKSx1VS5zZXQoMSwwKSxWYWUuc2V0KDEsMSk7bGV0IGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoJFIsaE0sZTIsITEsZE0pO2lmKG51bGw9PT1hJiYodDIoaE0uc2V0KC0uNSwuNSwwKSxyeSxzLGl5LHIsbyksdVUuc2V0KDAsMSksYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZSgkUixlMixoTSwhMSxkTSksbnVsbD09PWEpKXJldHVybjtsZXQgbD10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhkTSk7bDx0Lm5lYXJ8fGw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6bCxwb2ludDpkTS5jbG9uZSgpLHV2OktyLmdldFVWKGRNLCRSLGhNLGUyLEJhZSx1VSxWYWUsbmV3IEplKSxmYWNlOm51bGwsb2JqZWN0OnRoaXN9KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHZvaWQgMCE9PXQuY2VudGVyJiZ0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpc319KS5wcm90b3R5cGUuaXNTcHJpdGU9ITA7dmFyIEhhZT1uZXcgJCxVYWU9bmV3IHRyLHphZT1uZXcgdHIsYThlPW5ldyAkLGphZT1uZXcgTW4sVDI9Y2xhc3MgZXh0ZW5kcyB5b3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgTW4sdGhpcy5iaW5kTWF0cml4SW52ZXJzZT1uZXcgTW59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2xldCB0PW5ldyB0cixlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgaT0wLHI9ZS5jb3VudDtpPHI7aSsrKXt0Lng9ZS5nZXRYKGkpLHQueT1lLmdldFkoaSksdC56PWUuZ2V0WihpKSx0Lnc9ZS5nZXRXKGkpO2xldCBvPTEvdC5tYW5oYXR0YW5MZW5ndGgoKTtvIT09MS8wP3QubXVsdGlwbHlTY2FsYXIobyk6dC5zZXQoMSwwLDAsMCksZS5zZXRYWVpXKGksdC54LHQueSx0LnosdC53KX19dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX1ib25lVHJhbnNmb3JtKHQsZSl7bGV0IGk9dGhpcy5za2VsZXRvbixyPXRoaXMuZ2VvbWV0cnk7VWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSx6YWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxIYWUuY29weShlKS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCBvPTA7bzw0O28rKyl7bGV0IHM9emFlLmdldENvbXBvbmVudChvKTtpZigwIT09cyl7bGV0IGE9VWFlLmdldENvbXBvbmVudChvKTtqYWUubXVsdGlwbHlNYXRyaWNlcyhpLmJvbmVzW2FdLm1hdHJpeFdvcmxkLGkuYm9uZUludmVyc2VzW2FdKSxlLmFkZFNjYWxlZFZlY3RvcihhOGUuY29weShIYWUpLmFwcGx5TWF0cml4NChqYWUpLHMpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fTtUMi5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMCxjbGFzcyBleHRlbmRzIEdpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIsbyxzLGEsbCxjPUlvLHU9SW8sZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBrTT1jbGFzcyBleHRlbmRzIExye2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7Im51bWJlciI9PXR5cGVvZiBpJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtrTS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdhZT1uZXcgTW4sV2FlPW5ldyBNbixuMj1bXSxmTT1uZXcgeW87KGNsYXNzIGV4dGVuZHMgeW97Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcga00obmV3IEZsb2F0MzJBcnJheSgxNippKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihmTS5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LGZNLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09Zk0ubWF0ZXJpYWwpZm9yKGxldCBvPTA7bzxyO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLEdhZSksV2FlLm11bHRpcGx5TWF0cmljZXMoaSxHYWUpLGZNLm1hdHJpeFdvcmxkPVdhZSxmTS5yYXljYXN0KHQsbjIpO2ZvcihsZXQgcz0wLGE9bjIubGVuZ3RoO3M8YTtzKyspe2xldCBsPW4yW3NdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfW4yLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcga00obmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBqZD1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtqZC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgcWFlPW5ldyAkLFlhZT1uZXcgJCxYYWU9bmV3IE1uLGRVPW5ldyBJaCxpMj1uZXcgQWgsRk09Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0PW5ldyBLaSxlPW5ldyBqZCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmUiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bMF07Zm9yKGxldCByPTEsbz1lLmNvdW50O3I8bztyKyspcWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyLTEpLFlhZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUsciksaVtyXT1pW3ItMV0saVtyXSs9cWFlLmRpc3RhbmNlVG8oWWFlKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgR3IoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLGkyLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksaTIuYXBwbHlNYXRyaXg0KHIpLGkyLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoaTIpKXJldHVybjtYYWUuY29weShyKS5pbnZlcnQoKSxkVS5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQoWGFlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphLGM9bmV3ICQsdT1uZXcgJCxkPW5ldyAkLHA9bmV3ICQsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBmPWkuaW5kZXgsQz1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWYpZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihmLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7bGV0IE89Zi5nZXRYKEkpLGVlPWYuZ2V0WChJKzEpO2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLE8pLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShDLGVlKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IHhlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO3hlPHQubmVhcnx8eGU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6eGUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfWVsc2UgZm9yKGxldCBJPU1hdGgubWF4KDAscy5zdGFydCksQT1NYXRoLm1pbihDLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtJPEE7SSs9aCl7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSksdS5mcm9tQnVmZmVyQXR0cmlidXRlKEMsSSsxKSxkVS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxwLGQpPmwpY29udGludWU7cC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IGVlPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO2VlPHQubmVhcnx8ZWU+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6ZWUscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpJLGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtGTS5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBRYWU9bmV3ICQsS2FlPW5ldyAkLE5NPWNsYXNzIGV4dGVuZHMgRk17Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKG51bGw9PT10LmluZGV4KXtsZXQgZT10LmF0dHJpYnV0ZXMucG9zaXRpb24saT1bXTtmb3IobGV0IHI9MCxvPWUuY291bnQ7cjxvO3IrPTIpUWFlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxLYWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIrMSksaVtyXT0wPT09cj8wOmlbci0xXSxpW3IrMV09aVtyXStRYWUuZGlzdGFuY2VUbyhLYWUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBHcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O05NLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMCxjbGFzcyBleHRlbmRzIEZNe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVMb29wIn19LnByb3RvdHlwZS5pc0xpbmVMb29wPSEwO3ZhciBEMj1jbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuc2l6ZT0xLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtEMi5wcm90b3R5cGUuaXNQb2ludHNNYXRlcmlhbD0hMDt2YXIgWmFlPW5ldyBNbixOVT1uZXcgSWgscjI9bmV3IEFoLG8yPW5ldyAkO2Z1bmN0aW9uIEphZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1OVS5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyAkO05VLmNsb3Nlc3RQb2ludFRvUG9pbnQobixsKSxsLmFwcGx5TWF0cml4NChpKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPHIubmVhcnx8Yz5yLmZhcilyZXR1cm47by5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KGEpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0OnN9KX19KGNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodD1uZXcgS2ksZT1uZXcgRDIpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQsbz10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkLHM9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCkscjIuY29weShpLmJvdW5kaW5nU3BoZXJlKSxyMi5hcHBseU1hdHJpeDQocikscjIucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShyMikpcmV0dXJuO1phZS5jb3B5KHIpLmludmVydCgpLE5VLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChaYWUpO2xldCBhPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1pLmluZGV4LGQ9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKG51bGwhPT1jKWZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oYy5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspe2xldCBDPWMuZ2V0WChmKTtvMi5mcm9tQnVmZmVyQXR0cmlidXRlKGQsQyksSmFlKG8yLEMsbCxyLHQsZSx0aGlzKX1lbHNlIGZvcihsZXQgZj1NYXRoLm1heCgwLHMuc3RhcnQpLG09TWF0aC5taW4oZC5jb3VudCxzLnN0YXJ0K3MuY291bnQpO2Y8bTtmKyspbzIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShkLGYpLEphZShvMixmLGwscix0LGUsdGhpcyl9ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZih2b2lkIDAhPT1yKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspe2xldCBhPXJbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09b319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO3ZvaWQgMCE9PWUmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fSkucHJvdG90eXBlLmlzUG9pbnRzPSEwLGNsYXNzIGV4dGVuZHMgYm97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1zP3M6YnMsdGhpcy5tYWdGaWx0ZXI9dm9pZCAwIT09bz9vOmJzLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdCYmdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGZ1bmN0aW9uIGQoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhkKX0pfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuaW1hZ2UpLmNvcHkodGhpcyl9dXBkYXRlKCl7bGV0IHQ9dGhpcy5pbWFnZTsicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0PT0wJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19LnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih7d2lkdGg6dCxoZWlnaHQ6ZX0pLHRoaXMuZm9ybWF0PWksdGhpcy5tYWdGaWx0ZXI9SW8sdGhpcy5taW5GaWx0ZXI9SW8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5uZWVkc1VwZGF0ZT0hMH19LnByb3RvdHlwZS5pc0ZyYW1lYnVmZmVyVGV4dHVyZT0hMCxjbGFzcyBleHRlbmRzIGJve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXt3aWR0aDplLGhlaWdodDppfSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX0ucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBib3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyl7c3VwZXIodCxlLGkscixvLHMsYSxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciB4eT1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9MSxlPTgsaT0wLHI9MipNYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmksdGhldGFMZW5ndGg6cn0sZT1NYXRoLm1heCgzLGUpO2xldCBvPVtdLHM9W10sYT1bXSxsPVtdLGM9bmV3ICQsdT1uZXcgSmU7cy5wdXNoKDAsMCwwKSxhLnB1c2goMCwwLDEpLGwucHVzaCguNSwuNSk7Zm9yKGxldCBkPTAscD0zO2Q8PWU7ZCsrLHArPTMpe2xldCBoPWkrZC9lKnI7Yy54PXQqTWF0aC5jb3MoaCksYy55PXQqTWF0aC5zaW4oaCkscy5wdXNoKGMueCxjLnksYy56KSxhLnB1c2goMCwwLDEpLHUueD0oc1twXS90KzEpLzIsdS55PShzW3ArMV0vdCsxKS8yLGwucHVzaCh1LngsdS55KX1mb3IobGV0IGQ9MTtkPD1lO2QrKylvLnB1c2goZCxkKzEsMCk7dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBHcihzLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgR3IoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgR3IobCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgeHkodC5yYWRpdXMsdC5zZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSx5YT0obmV3ICQsbmV3ICQsbmV3ICQsbmV3IEtyLGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KGksZSl9Z2V0UG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIGV9Z2V0U3BhY2VkUG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChpL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1nZXRMZW5ndGhzKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpe2lmKHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2xldCBpLGU9W10scj10aGlzLmdldFBvaW50KDApLG89MDtlLnB1c2goMCk7Zm9yKGxldCBzPTE7czw9dDtzKyspaT10aGlzLmdldFBvaW50KHMvdCksbys9aS5kaXN0YW5jZVRvKHIpLGUucHVzaChvKSxyPWk7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX1nZXRVdG9UbWFwcGluZyh0LGUpe2xldCBzLGk9dGhpcy5nZXRMZW5ndGhzKCkscj0wLG89aS5sZW5ndGg7cz1lfHx0Kmlbby0xXTtsZXQgYyxhPTAsbD1vLTE7Zm9yKDthPD1sOylpZihyPU1hdGguZmxvb3IoYSsobC1hKS8yKSxjPWlbcl0tcyxjPDApYT1yKzE7ZWxzZXtpZighKGM+MCkpe2w9cjticmVha31sPXItMX1pZihyPWwsaVtyXT09PXMpcmV0dXJuIHIvKG8tMSk7bGV0IHU9aVtyXTtyZXR1cm4ocisocy11KS8oaVtyKzFdLXUpKS8oby0xKX1nZXRUYW5nZW50KHQsZSl7bGV0IHI9dC0xZS00LG89dCsxZS00O3I8MCYmKHI9MCksbz4xJiYobz0xKTtsZXQgcz10aGlzLmdldFBvaW50KHIpLGE9dGhpcy5nZXRQb2ludChvKSxsPWV8fChzLmlzVmVjdG9yMj9uZXcgSmU6bmV3ICQpO3JldHVybiBsLmNvcHkoYSkuc3ViKHMpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyAkLHI9W10sbz1bXSxzPVtdLGE9bmV3ICQsbD1uZXcgTW47Zm9yKGxldCBoPTA7aDw9dDtoKyspcltoXT10aGlzLmdldFRhbmdlbnRBdChoL3QsbmV3ICQpO29bMF09bmV3ICQsc1swXT1uZXcgJDtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoclswXS54KSxkPU1hdGguYWJzKHJbMF0ueSkscD1NYXRoLmFicyhyWzBdLnopO3U8PWMmJihjPXUsaS5zZXQoMSwwLDApKSxkPD1jJiYoYz1kLGkuc2V0KDAsMSwwKSkscDw9YyYmaS5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKHJbMF0saSkubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoclswXSxhKSxzWzBdLmNyb3NzVmVjdG9ycyhyWzBdLG9bMF0pO2ZvcihsZXQgaD0xO2g8PXQ7aCsrKXtpZihvW2hdPW9baC0xXS5jbG9uZSgpLHNbaF09c1toLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMocltoLTFdLHJbaF0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7bGV0IGY9TWF0aC5hY29zKF9hKHJbaC0xXS5kb3QocltoXSksLTEsMSkpO29baF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhhLGYpKX1zW2hdLmNyb3NzVmVjdG9ycyhyW2hdLG9baF0pfWlmKCEwPT09ZSl7bGV0IGg9TWF0aC5hY29zKF9hKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtoLz10LHJbMF0uZG90KGEuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihoPS1oKTtmb3IobGV0IGY9MTtmPD10O2YrKylvW2ZdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMocltmXSxoKmYpKSxzW2ZdLmNyb3NzVmVjdG9ycyhyW2ZdLG9bZl0pfXJldHVybnt0YW5nZW50czpyLG5vcm1hbHM6byxiaW5vcm1hbHM6c319Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc310b0pTT04oKXtsZXQgdD17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IkN1cnZlIixnZW5lcmF0b3I6IkN1cnZlLnRvSlNPTiJ9fTtyZXR1cm4gdC5hcmNMZW5ndGhEaXZpc2lvbnM9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMsdC50eXBlPXRoaXMudHlwZSx0fWZyb21KU09OKHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfX0pLEN5PWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD0wLGU9MCxpPTEscj0xLG89MCxzPTIqTWF0aC5QSSxhPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9ZSx0aGlzLnhSYWRpdXM9aSx0aGlzLnlSYWRpdXM9cix0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9cyx0aGlzLmFDbG9ja3dpc2U9YSx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplLHI9MipNYXRoLlBJLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxzPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1yO2Zvcig7bz5yOylvLT1yO288TnVtYmVyLkVQU0lMT04mJihvPXM/MDpyKSwhMD09PXRoaXMuYUNsb2Nrd2lzZSYmIXMmJihvPT09cj9vPS1yOm8tPXIpO2xldCBhPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MoYSksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihhKTtpZigwIT09dGhpcy5hUm90YXRpb24pe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxkPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxwPWwtdGhpcy5hWCxoPWMtdGhpcy5hWTtsPXAqdS1oKmQrdGhpcy5hWCxjPXAqZCtoKnUrdGhpcy5hWX1yZXR1cm4gaS5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtDeS5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIEEyPWNsYXNzIGV4dGVuZHMgQ3l7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpLGkscixvLHMpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07ZnVuY3Rpb24gRnooKXtsZXQgbj0wLHQ9MCxlPTAsaT0wO2Z1bmN0aW9uIHIobyxzLGEsbCl7bj1vLHQ9YSxlPS0zKm8rMypzLTIqYS1sLGk9MipvLTIqcythK2x9cmV0dXJue2luaXRDYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyl7cihzLGEsYyooYS1vKSxjKihsLXMpKX0saW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tOmZ1bmN0aW9uKG8scyxhLGwsYyx1LGQpe2xldCBwPShzLW8pL2MtKGEtbykvKGMrdSkrKGEtcykvdSxoPShhLXMpL3UtKGwtcykvKHUrZCkrKGwtYSkvZDtwKj11LGgqPXUscihzLGEscCxoKX0sY2FsYzpmdW5jdGlvbihvKXtsZXQgcz1vKm87cmV0dXJuIG4rdCpvK2UqcytpKihzKm8pfX19QTIucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7dmFyIHMyPW5ldyAkLHBVPW5ldyBGeixoVT1uZXcgRnosZlU9bmV3IEZ6LEkyPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IodD1bXSxlPSExLGk9ImNlbnRyaXBldGFsIixyPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPWksdGhpcy50ZW5zaW9uPXJ9Z2V0UG9pbnQodCxlPW5ldyAkKXtsZXQgYyx1LGk9ZSxyPXRoaXMucG9pbnRzLG89ci5sZW5ndGgscz0oby0odGhpcy5jbG9zZWQ/MDoxKSkqdCxhPU1hdGguZmxvb3IocyksbD1zLWE7dGhpcy5jbG9zZWQ/YSs9YT4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMoYSkvbykrMSkqbzowPT09bCYmYT09PW8tMSYmKGE9by0yLGw9MSksdGhpcy5jbG9zZWR8fGE+MD9jPXJbKGEtMSklb106KHMyLnN1YlZlY3RvcnMoclswXSxyWzFdKS5hZGQoclswXSksYz1zMik7bGV0IGQ9clthJW9dLHA9clsoYSsxKSVvXTtpZih0aGlzLmNsb3NlZHx8YSsyPG8/dT1yWyhhKzIpJW9dOihzMi5zdWJWZWN0b3JzKHJbby0xXSxyW28tMl0pLmFkZChyW28tMV0pLHU9czIpLCJjZW50cmlwZXRhbCI9PT10aGlzLmN1cnZlVHlwZXx8ImNob3JkYWwiPT09dGhpcy5jdXJ2ZVR5cGUpe2xldCBoPSJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlPy41Oi4yNSxmPU1hdGgucG93KGMuZGlzdGFuY2VUb1NxdWFyZWQoZCksaCksbT1NYXRoLnBvdyhkLmRpc3RhbmNlVG9TcXVhcmVkKHApLGgpLEM9TWF0aC5wb3cocC5kaXN0YW5jZVRvU3F1YXJlZCh1KSxoKTttPDFlLTQmJihtPTEpLGY8MWUtNCYmKGY9bSksQzwxZS00JiYoQz1tKSxwVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy54LGQueCxwLngsdS54LGYsbSxDKSxoVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGQueSxwLnksdS55LGYsbSxDKSxmVS5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy56LGQueixwLnosdS56LGYsbSxDKX1lbHNlImNhdG11bGxyb20iPT09dGhpcy5jdXJ2ZVR5cGUmJihwVS5pbml0Q2F0bXVsbFJvbShjLngsZC54LHAueCx1LngsdGhpcy50ZW5zaW9uKSxoVS5pbml0Q2F0bXVsbFJvbShjLnksZC55LHAueSx1LnksdGhpcy50ZW5zaW9uKSxmVS5pbml0Q2F0bXVsbFJvbShjLnosZC56LHAueix1LnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIGkuc2V0KHBVLmNhbGMobCksaFUuY2FsYyhsKSxmVS5jYWxjKGwpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXRoaXMucG9pbnRzLnB1c2godC5wb2ludHNbZV0uY2xvbmUoKSk7cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyAkKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fTtmdW5jdGlvbiAkYWUobix0LGUsaSxyKXtsZXQgbz0uNSooaS10KSxzPS41KihyLWUpLGE9bipuO3JldHVybigyKmUtMippK28rcykqKG4qYSkrKC0zKmUrMyppLTIqby1zKSphK28qbitlfWZ1bmN0aW9uIGJNKG4sdCxlLGkpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtyZXR1cm4gMiooMS1uKSpuKnR9KG4sZSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKnR9KG4saSl9ZnVuY3Rpb24geE0obix0LGUsaSxyKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSplKnR9KG4sdCkrZnVuY3Rpb24obix0KXtsZXQgZT0xLW47cmV0dXJuIDMqZSplKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiAzKigxLW4pKm4qbip0fShuLGkpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIG4qbipuKnR9KG4scil9STIucHJvdG90eXBlLmlzQ2F0bXVsbFJvbUN1cnZlMz0hMDt2YXIgTE09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyBKZSxlPW5ldyBKZSxpPW5ldyBKZSxyPW5ldyBKZSl7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IEplKXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyLGE9dGhpcy52MztyZXR1cm4gaS5zZXQoeE0odCxyLngsby54LHMueCxhLngpLHhNKHQsci55LG8ueSxzLnksYS55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtMTS5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlPSEwO3ZhciBQMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkLHI9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHhNKHQsci54LG8ueCxzLngsYS54KSx4TSh0LHIueSxvLnkscy55LGEueSkseE0odCxyLnosby56LHMueixhLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O1AyLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmUzPSEwO3ZhciB3eT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlIix0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWU7cmV0dXJuIDE9PT10P2kuY29weSh0aGlzLnYyKTooaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxpLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksaX1nZXRQb2ludEF0KHQsZSl7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxlKX1nZXRUYW5nZW50KHQsZSl7bGV0IGk9ZXx8bmV3IEplO3JldHVybiBpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07d3kucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwO3ZhciBCTT1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3IEplLGU9bmV3IEplLGk9bmV3IEplKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pfWdldFBvaW50KHQsZT1uZXcgSmUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O0JNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciBSMj1jbGFzcyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKHQ9bmV3ICQsZT1uZXcgJCxpPW5ldyAkKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3ICQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjI7cmV0dXJuIGkuc2V0KGJNKHQsci54LG8ueCxzLngpLGJNKHQsci55LG8ueSxzLnkpLGJNKHQsci56LG8ueixzLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O1IyLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgVk09Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBKZSl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLG89KHIubGVuZ3RoLTEpKnQscz1NYXRoLmZsb29yKG8pLGE9by1zLGw9clswPT09cz9zOnMtMV0sYz1yW3NdLHU9cltzPnIubGVuZ3RoLTI/ci5sZW5ndGgtMTpzKzFdLGQ9cltzPnIubGVuZ3RoLTM/ci5sZW5ndGgtMTpzKzJdO3JldHVybiBpLnNldCgkYWUoYSxsLngsYy54LHUueCxkLngpLCRhZShhLGwueSxjLnksdS55LGQueSkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspdGhpcy5wb2ludHMucHVzaCh0LnBvaW50c1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXQucG9pbnRzLnB1c2godGhpcy5wb2ludHNbZV0udG9BcnJheSgpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgSmUpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXN9fTtWTS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgRGxlPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOkEyLENhdG11bGxSb21DdXJ2ZTM6STIsQ3ViaWNCZXppZXJDdXJ2ZTpMTSxDdWJpY0JlemllckN1cnZlMzpQMixFbGxpcHNlQ3VydmU6Q3ksTGluZUN1cnZlOnd5LExpbmVDdXJ2ZTM6Y2xhc3MgZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcih0PW5ldyAkLGU9bmV3ICQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUzIix0aGlzLmlzTGluZUN1cnZlMz0hMCx0aGlzLnYxPXQsdGhpcy52Mj1lfWdldFBvaW50KHQsZT1uZXcgJCl7bGV0IGk9ZTtyZXR1cm4gMT09PXQ/aS5jb3B5KHRoaXMudjIpOihpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLGkubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxpfWdldFBvaW50QXQodCxlKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LGUpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319LFF1YWRyYXRpY0JlemllckN1cnZlOkJNLFF1YWRyYXRpY0JlemllckN1cnZlMzpSMixTcGxpbmVDdXJ2ZTpWTX0pLGpVPWNsYXNzIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtsZXQgdD10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTt0LmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgd3koZSx0KSl9Z2V0UG9pbnQodCxlKXtsZXQgaT10KnRoaXMuZ2V0TGVuZ3RoKCkscj10aGlzLmdldEN1cnZlTGVuZ3RocygpLG89MDtmb3IoO288ci5sZW5ndGg7KXtpZihyW29dPj1pKXtsZXQgcz1yW29dLWksYT10aGlzLmN1cnZlc1tvXSxsPWEuZ2V0TGVuZ3RoKCk7cmV0dXJuIGEuZ2V0UG9pbnRBdCgwPT09bD8wOjEtcy9sLGUpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxlPTA7Zm9yKGxldCBpPTAscj10aGlzLmN1cnZlcy5sZW5ndGg7aTxyO2krKyllKz10aGlzLmN1cnZlc1tpXS5nZXRMZW5ndGgoKSx0LnB1c2goZSk7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZlLnB1c2goZVswXSksZX1nZXRQb2ludHModD0xMil7bGV0IGksZT1bXTtmb3IobGV0IHI9MCxvPXRoaXMuY3VydmVzO3I8by5sZW5ndGg7cisrKXtsZXQgcz1vW3JdLGw9cy5nZXRQb2ludHMocyYmcy5pc0VsbGlwc2VDdXJ2ZT8yKnQ6cyYmKHMuaXNMaW5lQ3VydmV8fHMuaXNMaW5lQ3VydmUzKT8xOnMmJnMuaXNTcGxpbmVDdXJ2ZT90KnMucG9pbnRzLmxlbmd0aDp0KTtmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXTtpJiZpLmVxdWFscyh1KXx8KGUucHVzaCh1KSxpPXUpfX1yZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUubGVuZ3RoPjEmJiFlW2UubGVuZ3RoLTFdLmVxdWFscyhlWzBdKSYmZS5wdXNoKGVbMF0pLGV9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdGhpcy5jdXJ2ZXMucHVzaCh0LmN1cnZlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LmF1dG9DbG9zZT10aGlzLmF1dG9DbG9zZSx0LmN1cnZlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuY3VydmVzLmxlbmd0aDtlPGk7ZSsrKXQuY3VydmVzLnB1c2godGhpcy5jdXJ2ZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXMuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dC5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuY3VydmVzW2VdO3RoaXMuY3VydmVzLnB1c2goKG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpfXJldHVybiB0aGlzfX0sSE09Y2xhc3MgZXh0ZW5kcyBqVXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUGF0aCIsdGhpcy5jdXJyZW50UG9pbnQ9bmV3IEplLHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtsZXQgaT1uZXcgd3kodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSmUodCxlKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2goaSksdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQsZSxpLHIpe2xldCBvPW5ldyBCTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChvKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQoaSxyKSx0aGlzfWJlemllckN1cnZlVG8odCxlLGkscixvLHMpe2xldCBhPW5ldyBMTSh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBKZSh0LGUpLG5ldyBKZShpLHIpLG5ldyBKZShvLHMpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChhKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQobyxzKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxpPW5ldyBWTShlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5hYnNhcmModCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxzKSx0aGlzfWFic2FyYyh0LGUsaSxyLG8scyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsaSxpLHIsbyxzKSx0aGlzfWVsbGlwc2UodCxlLGkscixvLHMsYSxsKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrdGhpcy5jdXJyZW50UG9pbnQueCxlK3RoaXMuY3VycmVudFBvaW50LnksaSxyLG8scyxhLGwpLHRoaXN9YWJzZWxsaXBzZSh0LGUsaSxyLG8scyxhLGwpe2xldCBjPW5ldyBDeSh0LGUsaSxyLG8scyxhLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgZD1jLmdldFBvaW50KDApO2QuZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oZC54LGQueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sR2Q9Y2xhc3MgZXh0ZW5kcyBITXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9RmMoKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dGhpcy5ob2xlcy5sZW5ndGg7aTxyO2krKyllW2ldPXRoaXMuaG9sZXNbaV0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmhvbGVzLnB1c2godC5ob2xlc1tlXS5jbG9uZSgpKTtyZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXQuaG9sZXMucHVzaCh0aGlzLmhvbGVzW2VdLnRvSlNPTigpKTtyZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaCgobmV3IEhNKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBBbGUobix0LGUsaSxyKXtsZXQgbyxzO2lmKHI9PT1mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0wO2ZvcihsZXQgbz10LHM9ZS1pO288ZTtvKz1pKXIrPShuW3NdLW5bb10pKihuW28rMV0rbltzKzFdKSxzPW87cmV0dXJuIHJ9KG4sdCxlLGkpPjApZm9yKG89dDtvPGU7bys9aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO2Vsc2UgZm9yKG89ZS1pO28+PXQ7by09aSlzPWVsZShvLG5bb10sbltvKzFdLHMpO3JldHVybiBzJiZxMihzLHMubmV4dCkmJihqTShzKSxzPXMubmV4dCksc31mdW5jdGlvbiBSaChuLHQpe2lmKCFuKXJldHVybiBuO3R8fCh0PW4pO2xldCBpLGU9bjtkb3tpZihpPSExLGUuc3RlaW5lcnx8IXEyKGUsZS5uZXh0KSYmMCE9PWpyKGUucHJldixlLGUubmV4dCkpZT1lLm5leHQ7ZWxzZXtpZihqTShlKSxlPXQ9ZS5wcmV2LGU9PT1lLm5leHQpYnJlYWs7aT0hMH19d2hpbGUoaXx8ZSE9PXQpO3JldHVybiB0fWZ1bmN0aW9uIFVNKG4sdCxlLGkscixvLHMpe2lmKCFuKXJldHVybjshcyYmbyYmZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bjtkb3tudWxsPT09ci56JiYoci56PUdVKHIueCxyLnksdCxlLGkpKSxyLnByZXZaPXIucHJldixyLm5leHRaPXIubmV4dCxyPXIubmV4dH13aGlsZShyIT09bik7ci5wcmV2Wi5uZXh0Wj1udWxsLHIucHJldlo9bnVsbCxmdW5jdGlvbihuKXtsZXQgdCxlLGkscixvLHMsYSxsLGM9MTtkb3tmb3IoZT1uLG49bnVsbCxvPW51bGwscz0wO2U7KXtmb3IocysrLGk9ZSxhPTAsdD0wO3Q8YyYmKGErKyxpPWkubmV4dFosaSk7dCsrKTtmb3IobD1jO2E+MHx8bD4wJiZpOykwIT09YSYmKDA9PT1sfHwhaXx8ZS56PD1pLnopPyhyPWUsZT1lLm5leHRaLGEtLSk6KHI9aSxpPWkubmV4dFosbC0tKSxvP28ubmV4dFo9cjpuPXIsci5wcmV2Wj1vLG89cjtlPWl9by5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUocz4xKX0ocil9KG4saSxyLG8pO2xldCBsLGMsYT1uO2Zvcig7bi5wcmV2IT09bi5uZXh0OylpZihsPW4ucHJldixjPW4ubmV4dCxvP184ZShuLGkscixvKTpnOGUobikpdC5wdXNoKGwuaS9lKSx0LnB1c2gobi5pL2UpLHQucHVzaChjLmkvZSksak0obiksbj1jLm5leHQsYT1jLm5leHQ7ZWxzZSBpZigobj1jKT09PWEpe3M/MT09PXM/VU0obj12OGUoUmgobiksdCxlKSx0LGUsaSxyLG8sMik6Mj09PXMmJnk4ZShuLHQsZSxpLHIsbyk6VU0oUmgobiksdCxlLGkscixvLDEpO2JyZWFrfX1mdW5jdGlvbiBnOGUobil7bGV0IHQ9bi5wcmV2LGU9bixpPW4ubmV4dDtpZihqcih0LGUsaSk+PTApcmV0dXJuITE7bGV0IHI9bi5uZXh0Lm5leHQ7Zm9yKDtyIT09bi5wcmV2Oyl7aWYoY3kodC54LHQueSxlLngsZS55LGkueCxpLnksci54LHIueSkmJmpyKHIucHJldixyLHIubmV4dCk+PTApcmV0dXJuITE7cj1yLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gXzhlKG4sdCxlLGkpe2xldCByPW4ucHJldixvPW4scz1uLm5leHQ7aWYoanIocixvLHMpPj0wKXJldHVybiExO2xldCBjPXIueD5vLng/ci54PnMueD9yLng6cy54Om8ueD5zLng/by54OnMueCx1PXIueT5vLnk/ci55PnMueT9yLnk6cy55Om8ueT5zLnk/by55OnMueSxkPUdVKHIueDxvLng/ci54PHMueD9yLng6cy54Om8ueDxzLng/by54OnMueCxyLnk8by55P3IueTxzLnk/ci55OnMueTpvLnk8cy55P28ueTpzLnksdCxlLGkpLHA9R1UoYyx1LHQsZSxpKSxoPW4ucHJldlosZj1uLm5leHRaO2Zvcig7aCYmaC56Pj1kJiZmJiZmLno8PXA7KXtpZihoIT09bi5wcmV2JiZoIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxoLngsaC55KSYmanIoaC5wcmV2LGgsaC5uZXh0KT49MHx8KGg9aC5wcmV2WixmIT09bi5wcmV2JiZmIT09bi5uZXh0JiZjeShyLngsci55LG8ueCxvLnkscy54LHMueSxmLngsZi55KSYmanIoZi5wcmV2LGYsZi5uZXh0KT49MCkpcmV0dXJuITE7Zj1mLm5leHRafWZvcig7aCYmaC56Pj1kOyl7aWYoaCE9PW4ucHJldiYmaCE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksaC54LGgueSkmJmpyKGgucHJldixoLGgubmV4dCk+PTApcmV0dXJuITE7aD1oLnByZXZafWZvcig7ZiYmZi56PD1wOyl7aWYoZiE9PW4ucHJldiYmZiE9PW4ubmV4dCYmY3koci54LHIueSxvLngsby55LHMueCxzLnksZi54LGYueSkmJmpyKGYucHJldixmLGYubmV4dCk+PTApcmV0dXJuITE7Zj1mLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIHY4ZShuLHQsZSl7bGV0IGk9bjtkb3tsZXQgcj1pLnByZXYsbz1pLm5leHQubmV4dDshcTIocixvKSYmSWxlKHIsaSxpLm5leHQsbykmJnpNKHIsbykmJnpNKG8scikmJih0LnB1c2goci5pL2UpLHQucHVzaChpLmkvZSksdC5wdXNoKG8uaS9lKSxqTShpKSxqTShpLm5leHQpLGk9bj1vKSxpPWkubmV4dH13aGlsZShpIT09bik7cmV0dXJuIFJoKGkpfWZ1bmN0aW9uIHk4ZShuLHQsZSxpLHIsbyl7bGV0IHM9bjtkb3tsZXQgYT1zLm5leHQubmV4dDtmb3IoO2EhPT1zLnByZXY7KXtpZihzLmkhPT1hLmkmJkQ4ZShzLGEpKXtsZXQgbD1QbGUocyxhKTtyZXR1cm4gcz1SaChzLHMubmV4dCksbD1SaChsLGwubmV4dCksVU0ocyx0LGUsaSxyLG8pLHZvaWQgVU0obCx0LGUsaSxyLG8pfWE9YS5uZXh0fXM9cy5uZXh0fXdoaWxlKHMhPT1uKX1mdW5jdGlvbiB4OGUobix0KXtyZXR1cm4gbi54LXQueH1mdW5jdGlvbiBDOGUobix0KXtpZih0PWZ1bmN0aW9uKG4sdCl7bGV0IHMsZT10LGk9bi54LHI9bi55LG89LTEvMDtkb3tpZihyPD1lLnkmJnI+PWUubmV4dC55JiZlLm5leHQueSE9PWUueSl7bGV0IHA9ZS54KyhyLWUueSkqKGUubmV4dC54LWUueCkvKGUubmV4dC55LWUueSk7aWYocDw9aSYmcD5vKXtpZihvPXAscD09PWkpe2lmKHI9PT1lLnkpcmV0dXJuIGU7aWYocj09PWUubmV4dC55KXJldHVybiBlLm5leHR9cz1lLng8ZS5uZXh0Lng/ZTplLm5leHR9fWU9ZS5uZXh0fXdoaWxlKGUhPT10KTtpZighcylyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcztsZXQgZCxhPXMsbD1zLngsYz1zLnksdT0xLzA7ZT1zO2Rve2k+PWUueCYmZS54Pj1sJiZpIT09ZS54JiZjeShyPGM/aTpvLHIsbCxjLHI8Yz9vOmkscixlLngsZS55KSYmKGQ9TWF0aC5hYnMoci1lLnkpLyhpLWUueCksek0oZSxuKSYmKGQ8dXx8ZD09PXUmJihlLng+cy54fHxlLng9PT1zLngmJk04ZShzLGUpKSkmJihzPWUsdT1kKSksZT1lLm5leHR9d2hpbGUoZSE9PWEpO3JldHVybiBzfShuLHQpLHQpe2xldCBlPVBsZSh0LG4pO1JoKHQsdC5uZXh0KSxSaChlLGUubmV4dCl9fWZ1bmN0aW9uIE04ZShuLHQpe3JldHVybiBqcihuLnByZXYsbix0LnByZXYpPDAmJmpyKHQubmV4dCxuLG4ubmV4dCk8MH1mdW5jdGlvbiBHVShuLHQsZSxpLHIpe3JldHVybihuPTE0MzE2NTU3NjUmKChuPTg1ODk5MzQ1OSYoKG49MjUyNjQ1MTM1Jigobj0xNjcxMTkzNSYoKG49MzI3NjcqKG4tZSkqcil8bjw8OCkpfG48PDQpKXxuPDwyKSl8bjw8MSkpfCh0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtaSkqcil8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpPDwxfWZ1bmN0aW9uIFQ4ZShuKXtsZXQgdD1uLGU9bjtkb3sodC54PGUueHx8dC54PT09ZS54JiZ0Lnk8ZS55KSYmKGU9dCksdD10Lm5leHR9d2hpbGUodCE9PW4pO3JldHVybiBlfWZ1bmN0aW9uIGN5KG4sdCxlLGkscixvLHMsYSl7cmV0dXJuKHItcykqKHQtYSktKG4tcykqKG8tYSk+PTAmJihuLXMpKihpLWEpLShlLXMpKih0LWEpPj0wJiYoZS1zKSooby1hKS0oci1zKSooaS1hKT49MH1mdW5jdGlvbiBEOGUobix0KXtyZXR1cm4gbi5uZXh0LmkhPT10LmkmJm4ucHJldi5pIT09dC5pJiYhZnVuY3Rpb24obix0KXtsZXQgZT1uO2Rve2lmKGUuaSE9PW4uaSYmZS5uZXh0LmkhPT1uLmkmJmUuaSE9PXQuaSYmZS5uZXh0LmkhPT10LmkmJklsZShlLGUubmV4dCxuLHQpKXJldHVybiEwO2U9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4hMX0obix0KSYmKHpNKG4sdCkmJnpNKHQsbikmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bixpPSExLHI9KG4ueCt0LngpLzIsbz0obi55K3QueSkvMjtkb3tlLnk+byE9ZS5uZXh0Lnk+byYmZS5uZXh0LnkhPT1lLnkmJnI8KGUubmV4dC54LWUueCkqKG8tZS55KS8oZS5uZXh0LnktZS55KStlLngmJihpPSFpKSxlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuIGl9KG4sdCkmJihqcihuLnByZXYsbix0LnByZXYpfHxqcihuLHQucHJldix0KSl8fHEyKG4sdCkmJmpyKG4ucHJldixuLG4ubmV4dCk+MCYmanIodC5wcmV2LHQsdC5uZXh0KT4wKX1mdW5jdGlvbiBqcihuLHQsZSl7cmV0dXJuKHQueS1uLnkpKihlLngtdC54KS0odC54LW4ueCkqKGUueS10LnkpfWZ1bmN0aW9uIHEyKG4sdCl7cmV0dXJuIG4ueD09PXQueCYmbi55PT09dC55fWZ1bmN0aW9uIElsZShuLHQsZSxpKXtsZXQgcj1sMihqcihuLHQsZSkpLG89bDIoanIobix0LGkpKSxzPWwyKGpyKGUsaSxuKSksYT1sMihqcihlLGksdCkpO3JldHVybiEhKHIhPT1vJiZzIT09YXx8MD09PXImJmEyKG4sZSx0KXx8MD09PW8mJmEyKG4saSx0KXx8MD09PXMmJmEyKGUsbixpKXx8MD09PWEmJmEyKGUsdCxpKSl9ZnVuY3Rpb24gYTIobix0LGUpe3JldHVybiB0Lng8PU1hdGgubWF4KG4ueCxlLngpJiZ0Lng+PU1hdGgubWluKG4ueCxlLngpJiZ0Lnk8PU1hdGgubWF4KG4ueSxlLnkpJiZ0Lnk+PU1hdGgubWluKG4ueSxlLnkpfWZ1bmN0aW9uIGwyKG4pe3JldHVybiBuPjA/MTpuPDA/LTE6MH1mdW5jdGlvbiB6TShuLHQpe3JldHVybiBqcihuLnByZXYsbixuLm5leHQpPDA/anIobix0LG4ubmV4dCk+PTAmJmpyKG4sbi5wcmV2LHQpPj0wOmpyKG4sdCxuLnByZXYpPDB8fGpyKG4sbi5uZXh0LHQpPDB9ZnVuY3Rpb24gUGxlKG4sdCl7bGV0IGU9bmV3IFdVKG4uaSxuLngsbi55KSxpPW5ldyBXVSh0LmksdC54LHQueSkscj1uLm5leHQsbz10LnByZXY7cmV0dXJuIG4ubmV4dD10LHQucHJldj1uLGUubmV4dD1yLHIucHJldj1lLGkubmV4dD1lLGUucHJldj1pLG8ubmV4dD1pLGkucHJldj1vLGl9ZnVuY3Rpb24gZWxlKG4sdCxlLGkpe2xldCByPW5ldyBXVShuLHQsZSk7cmV0dXJuIGk/KHIubmV4dD1pLm5leHQsci5wcmV2PWksaS5uZXh0LnByZXY9cixpLm5leHQ9cik6KHIucHJldj1yLHIubmV4dD1yKSxyfWZ1bmN0aW9uIGpNKG4pe24ubmV4dC5wcmV2PW4ucHJldixuLnByZXYubmV4dD1uLm5leHQsbi5wcmV2WiYmKG4ucHJldloubmV4dFo9bi5uZXh0Wiksbi5uZXh0WiYmKG4ubmV4dFoucHJldlo9bi5wcmV2Wil9ZnVuY3Rpb24gV1Uobix0LGUpe3RoaXMuaT1uLHRoaXMueD10LHRoaXMueT1lLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfXZhciB6dT1jbGFzc3tzdGF0aWMgYXJlYSh0KXtsZXQgZT10Lmxlbmd0aCxpPTA7Zm9yKGxldCByPWUtMSxvPTA7bzxlO3I9bysrKWkrPXRbcl0ueCp0W29dLnktdFtvXS54KnRbcl0ueTtyZXR1cm4uNSppfXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4genUuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7bGV0IGk9W10scj1bXSxvPVtdO3RsZSh0KSxubGUoaSx0KTtsZXQgcz10Lmxlbmd0aDtlLmZvckVhY2godGxlKTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrKylyLnB1c2gocykscys9ZVtsXS5sZW5ndGgsbmxlKGksZVtsXSk7bGV0IGE9ZnVuY3Rpb24obix0LGU9Mil7bGV0IGEsbCxjLHUsZCxwLGgsaT10JiZ0Lmxlbmd0aCxyPWk/dFswXSplOm4ubGVuZ3RoLG89QWxlKG4sMCxyLGUsITApLHM9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gcztpZihpJiYobz1mdW5jdGlvbihuLHQsZSxpKXtsZXQgbyxzLGEsbCxjLHI9W107Zm9yKG89MCxzPXQubGVuZ3RoO288cztvKyspYT10W29dKmksbD1vPHMtMT90W28rMV0qaTpuLmxlbmd0aCxjPUFsZShuLGEsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2goVDhlKGMpKTtmb3Ioci5zb3J0KHg4ZSksbz0wO288ci5sZW5ndGg7bysrKUM4ZShyW29dLGUpLGU9UmgoZSxlLm5leHQpO3JldHVybiBlfShuLHQsbyxlKSksbi5sZW5ndGg+ODAqZSl7YT1jPW5bMF0sbD11PW5bMV07Zm9yKGxldCBmPWU7ZjxyO2YrPWUpZD1uW2ZdLHA9bltmKzFdLGQ8YSYmKGE9ZCkscDxsJiYobD1wKSxkPmMmJihjPWQpLHA+dSYmKHU9cCk7aD1NYXRoLm1heChjLWEsdS1sKSxoPTAhPT1oPzEvaDowfXJldHVybiBVTShvLHMsZSxhLGwsaCksc30oaSxyKTtmb3IobGV0IGw9MDtsPGEubGVuZ3RoO2wrPTMpby5wdXNoKGEuc2xpY2UobCxsKzMpKTtyZXR1cm4gb319O2Z1bmN0aW9uIHRsZShuKXtsZXQgdD1uLmxlbmd0aDt0PjImJm5bdC0xXS5lcXVhbHMoblswXSkmJm4ucG9wKCl9ZnVuY3Rpb24gbmxlKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKHRbZV0ueCksbi5wdXNoKHRbZV0ueSl9dmFyIE9oPWNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IodD1uZXcgR2QoW25ldyBKZSguNSwuNSksbmV3IEplKC0uNSwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT17fSl7c3VwZXIoKSx0aGlzLnR5cGU9IkV4dHJ1ZGVHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtzaGFwZXM6dCxvcHRpb25zOmV9LHQ9QXJyYXkuaXNBcnJheSh0KT90Olt0XTtsZXQgaT10aGlzLHI9W10sbz1bXTtmb3IobGV0IGE9MCxsPXQubGVuZ3RoO2E8bDthKyspcyh0W2FdKTtmdW5jdGlvbiBzKGEpe2xldCBsPVtdLGM9dm9pZCAwIT09ZS5jdXJ2ZVNlZ21lbnRzP2UuY3VydmVTZWdtZW50czoxMix1PXZvaWQgMCE9PWUuc3RlcHM/ZS5zdGVwczoxLGQ9dm9pZCAwIT09ZS5kZXB0aD9lLmRlcHRoOjEscD12b2lkIDA9PT1lLmJldmVsRW5hYmxlZHx8ZS5iZXZlbEVuYWJsZWQsaD12b2lkIDAhPT1lLmJldmVsVGhpY2tuZXNzP2UuYmV2ZWxUaGlja25lc3M6LjIsZj12b2lkIDAhPT1lLmJldmVsU2l6ZT9lLmJldmVsU2l6ZTpoLS4xLG09dm9pZCAwIT09ZS5iZXZlbE9mZnNldD9lLmJldmVsT2Zmc2V0OjAsQz12b2lkIDAhPT1lLmJldmVsU2VnbWVudHM/ZS5iZXZlbFNlZ21lbnRzOjMsXz1lLmV4dHJ1ZGVQYXRoLHk9dm9pZCAwIT09ZS5VVkdlbmVyYXRvcj9lLlVWR2VuZXJhdG9yOlI4ZTt2b2lkIDAhPT1lLmFtb3VudCYmKGNvbnNvbGUud2FybigiVEhSRUUuRXh0cnVkZUJ1ZmZlckdlb21ldHJ5OiBhbW91bnQgaGFzIGJlZW4gcmVuYW1lZCB0byBkZXB0aC4iKSxkPWUuYW1vdW50KTtsZXQgSSxPLGVlLFgseGUsQT0hMTtfJiYoST1fLmdldFNwYWNlZFBvaW50cyh1KSxBPSEwLHA9ITEsTz1fLmNvbXB1dGVGcmVuZXRGcmFtZXModSwhMSksZWU9bmV3ICQsWD1uZXcgJCx4ZT1uZXcgJCkscHx8KEM9MCxoPTAsZj0wLG09MCk7bGV0IGZlPWEuZXh0cmFjdFBvaW50cyhjKSx2ZT1mZS5zaGFwZSxUPWZlLmhvbGVzO2lmKCF6dS5pc0Nsb2NrV2lzZSh2ZSkpe3ZlPXZlLnJldmVyc2UoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO3p1LmlzQ2xvY2tXaXNlKFllKSYmKFRbaWVdPVllLnJldmVyc2UoKSl9fWxldCBsZT16dS50cmlhbmd1bGF0ZVNoYXBlKHZlLFQpLGhlPXZlO2ZvcihsZXQgaWU9MCxjdD1ULmxlbmd0aDtpZTxjdDtpZSsrKXZlPXZlLmNvbmNhdChUW2llXSk7ZnVuY3Rpb24geWUoaWUsY3QsWWUpe3JldHVybiBjdHx8Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiB2ZWMgZG9lcyBub3QgZXhpc3QiKSxjdC5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKFllKS5hZGQoaWUpfWxldCBKPXZlLmxlbmd0aCxhZT1sZS5sZW5ndGg7ZnVuY3Rpb24gbWUoaWUsY3QsWWUpe2xldCB4dCxodCxzbixTbj1pZS54LWN0Lngsb2k9aWUueS1jdC55LFVpPVllLngtaWUueCx6aT1ZZS55LWllLnksUT1TbipTbitvaSpvaTtpZihNYXRoLmFicyhTbip6aS1vaSpVaSk+TnVtYmVyLkVQU0lMT04pe2xldCBWZT1NYXRoLnNxcnQoUSksQ3Q9TWF0aC5zcXJ0KFVpKlVpK3ppKnppKSx0bj1jdC54LW9pL1ZlLEJlPWN0LnkrU24vVmUsRnQ9KChZZS54LXppL0N0LXRuKSp6aS0oWWUueStVaS9DdC1CZSkqVWkpLyhTbip6aS1vaSpVaSk7eHQ9dG4rU24qRnQtaWUueCxodD1CZStvaSpGdC1pZS55O2xldCBrdD14dCp4dCtodCpodDtpZihrdDw9MilyZXR1cm4gbmV3IEplKHh0LGh0KTtzbj1NYXRoLnNxcnQoa3QvMil9ZWxzZXtsZXQgVmU9ITE7U24+TnVtYmVyLkVQU0lMT04/VWk+TnVtYmVyLkVQU0lMT04mJihWZT0hMCk6U248LU51bWJlci5FUFNJTE9OP1VpPC1OdW1iZXIuRVBTSUxPTiYmKFZlPSEwKTpNYXRoLnNpZ24ob2kpPT09TWF0aC5zaWduKHppKSYmKFZlPSEwKSxWZT8oeHQ9LW9pLGh0PVNuLHNuPU1hdGguc3FydChRKSk6KHh0PVNuLGh0PW9pLHNuPU1hdGguc3FydChRLzIpKX1yZXR1cm4gbmV3IEplKHh0L3NuLGh0L3NuKX1sZXQgamU9W107Zm9yKGxldCBpZT0wLGN0PWhlLmxlbmd0aCxZZT1jdC0xLHh0PWllKzE7aWU8Y3Q7aWUrKyxZZSsrLHh0KyspWWU9PT1jdCYmKFllPTApLHh0PT09Y3QmJih4dD0wKSxqZVtpZV09bWUoaGVbaWVdLGhlW1llXSxoZVt4dF0pO2xldCBGZSxNZT1bXSx1dD1qZS5jb25jYXQoKTtmb3IobGV0IGllPTAsY3Q9VC5sZW5ndGg7aWU8Y3Q7aWUrKyl7bGV0IFllPVRbaWVdO0ZlPVtdO2ZvcihsZXQgeHQ9MCxodD1ZZS5sZW5ndGgsc249aHQtMSxTbj14dCsxO3h0PGh0O3h0Kyssc24rKyxTbisrKXNuPT09aHQmJihzbj0wKSxTbj09PWh0JiYoU249MCksRmVbeHRdPW1lKFllW3h0XSxZZVtzbl0sWWVbU25dKTtNZS5wdXNoKEZlKSx1dD11dC5jb25jYXQoRmUpfWZvcihsZXQgaWU9MDtpZTxDO2llKyspe2xldCBjdD1pZS9DLFllPWgqTWF0aC5jb3MoY3QqTWF0aC5QSS8yKSx4dD1mKk1hdGguc2luKGN0Kk1hdGguUEkvMikrbTtmb3IobGV0IGh0PTAsc249aGUubGVuZ3RoO2h0PHNuO2h0Kyspe2xldCBTbj15ZShoZVtodF0samVbaHRdLHh0KTtFdChTbi54LFNuLnksLVllKX1mb3IobGV0IGh0PTAsc249VC5sZW5ndGg7aHQ8c247aHQrKyl7bGV0IFNuPVRbaHRdO0ZlPU1lW2h0XTtmb3IobGV0IG9pPTAsVWk9U24ubGVuZ3RoO29pPFVpO29pKyspe2xldCB6aT15ZShTbltvaV0sRmVbb2ldLHh0KTtFdCh6aS54LHppLnksLVllKX19fWxldCBTdD1mK207Zm9yKGxldCBpZT0wO2llPEo7aWUrKyl7bGV0IGN0PXA/eWUodmVbaWVdLHV0W2llXSxTdCk6dmVbaWVdO0E/KFguY29weShPLm5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LngpLGVlLmNvcHkoTy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGN0LnkpLHhlLmNvcHkoSVswXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChjdC54LGN0LnksMCl9Zm9yKGxldCBpZT0xO2llPD11O2llKyspZm9yKGxldCBjdD0wO2N0PEo7Y3QrKyl7bGV0IFllPXA/eWUodmVbY3RdLHV0W2N0XSxTdCk6dmVbY3RdO0E/KFguY29weShPLm5vcm1hbHNbaWVdKS5tdWx0aXBseVNjYWxhcihZZS54KSxlZS5jb3B5KE8uYmlub3JtYWxzW2llXSkubXVsdGlwbHlTY2FsYXIoWWUueSkseGUuY29weShJW2llXSkuYWRkKFgpLmFkZChlZSksRXQoeGUueCx4ZS55LHhlLnopKTpFdChZZS54LFllLnksZC91KmllKX1mb3IobGV0IGllPUMtMTtpZT49MDtpZS0tKXtsZXQgY3Q9aWUvQyxZZT1oKk1hdGguY29zKGN0Kk1hdGguUEkvMikseHQ9ZipNYXRoLnNpbihjdCpNYXRoLlBJLzIpK207Zm9yKGxldCBodD0wLHNuPWhlLmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249eWUoaGVbaHRdLGplW2h0XSx4dCk7RXQoU24ueCxTbi55LGQrWWUpfWZvcihsZXQgaHQ9MCxzbj1ULmxlbmd0aDtodDxzbjtodCsrKXtsZXQgU249VFtodF07RmU9TWVbaHRdO2ZvcihsZXQgb2k9MCxVaT1Tbi5sZW5ndGg7b2k8VWk7b2krKyl7bGV0IHppPXllKFNuW29pXSxGZVtvaV0seHQpO0E/RXQoemkueCx6aS55K0lbdS0xXS55LElbdS0xXS54K1llKTpFdCh6aS54LHppLnksZCtZZSl9fX1mdW5jdGlvbiBBbihpZSxjdCl7bGV0IFllPWllLmxlbmd0aDtmb3IoOy0tWWU+PTA7KXtsZXQgeHQ9WWUsaHQ9WWUtMTtodDwwJiYoaHQ9aWUubGVuZ3RoLTEpO2ZvcihsZXQgc249MCxTbj11KzIqQztzbjxTbjtzbisrKXtsZXQgb2k9SipzbixVaT1KKihzbisxKTtDZShjdCt4dCtvaSxjdCtodCtvaSxjdCtodCtVaSxjdCt4dCtVaSl9fX1mdW5jdGlvbiBFdChpZSxjdCxZZSl7bC5wdXNoKGllKSxsLnB1c2goY3QpLGwucHVzaChZZSl9ZnVuY3Rpb24gb24oaWUsY3QsWWUpe3Z0KGllKSx2dChjdCksdnQoWWUpO2xldCB4dD1yLmxlbmd0aC8zLGh0PXkuZ2VuZXJhdGVUb3BVVihpLHIseHQtMyx4dC0yLHh0LTEpO190KGh0WzBdKSxfdChodFsxXSksX3QoaHRbMl0pfWZ1bmN0aW9uIENlKGllLGN0LFllLHh0KXt2dChpZSksdnQoY3QpLHZ0KHh0KSx2dChjdCksdnQoWWUpLHZ0KHh0KTtsZXQgaHQ9ci5sZW5ndGgvMyxzbj15LmdlbmVyYXRlU2lkZVdhbGxVVihpLHIsaHQtNixodC0zLGh0LTIsaHQtMSk7X3Qoc25bMF0pLF90KHNuWzFdKSxfdChzblszXSksX3Qoc25bMV0pLF90KHNuWzJdKSxfdChzblszXSl9ZnVuY3Rpb24gdnQoaWUpe3IucHVzaChsWzMqaWUrMF0pLHIucHVzaChsWzMqaWUrMV0pLHIucHVzaChsWzMqaWUrMl0pfWZ1bmN0aW9uIF90KGllKXtvLnB1c2goaWUueCksby5wdXNoKGllLnkpfShmdW5jdGlvbigpe2xldCBpZT1yLmxlbmd0aC8zO2lmKHApe2xldCBjdD0wLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMl0rWWUsaHRbMV0rWWUsaHRbMF0rWWUpfWN0PXUrMipDLFllPUoqY3Q7Zm9yKGxldCB4dD0wO3h0PGFlO3h0Kyspe2xldCBodD1sZVt4dF07b24oaHRbMF0rWWUsaHRbMV0rWWUsaHRbMl0rWWUpfX1lbHNle2ZvcihsZXQgY3Q9MDtjdDxhZTtjdCsrKXtsZXQgWWU9bGVbY3RdO29uKFllWzJdLFllWzFdLFllWzBdKX1mb3IobGV0IGN0PTA7Y3Q8YWU7Y3QrKyl7bGV0IFllPWxlW2N0XTtvbihZZVswXStKKnUsWWVbMV0rSip1LFllWzJdK0oqdSl9fWkuYWRkR3JvdXAoaWUsci5sZW5ndGgvMy1pZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgaWU9ci5sZW5ndGgvMyxjdD0wO0FuKGhlLGN0KSxjdCs9aGUubGVuZ3RoO2ZvcihsZXQgWWU9MCx4dD1ULmxlbmd0aDtZZTx4dDtZZSsrKXtsZXQgaHQ9VFtZZV07QW4oaHQsY3QpLGN0Kz1odC5sZW5ndGh9aS5hZGRHcm91cChpZSxyLmxlbmd0aC8zLWllLDEpfSgpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEdyKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKG8sMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2lmKGUuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBpPTAscj1uLmxlbmd0aDtpPHI7aSsrKWUuc2hhcGVzLnB1c2gobltpXS51dWlkKTtlbHNlIGUuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdm9pZCAwIT09dC5leHRydWRlUGF0aCYmKGUub3B0aW9ucy5leHRydWRlUGF0aD10LmV4dHJ1ZGVQYXRoLnRvSlNPTigpKSxlfSh0aGlzLnBhcmFtZXRlcnMuc2hhcGVzLHRoaXMucGFyYW1ldGVycy5vcHRpb25zLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgbz0wLHM9dC5zaGFwZXMubGVuZ3RoO288cztvKyspaS5wdXNoKGVbdC5zaGFwZXNbb11dKTtsZXQgcj10Lm9wdGlvbnMuZXh0cnVkZVBhdGg7cmV0dXJuIHZvaWQgMCE9PXImJih0Lm9wdGlvbnMuZXh0cnVkZVBhdGg9KG5ldyBEbGVbci50eXBlXSkuZnJvbUpTT04ocikpLG5ldyBPaChpLHQub3B0aW9ucyl9fSxSOGU9e2dlbmVyYXRlVG9wVVY6ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgYT10WzMqaV0sbD10WzMqaSsxXSxjPXRbMypyXSx1PXRbMypyKzFdO3JldHVybltuZXcgSmUodFszKmVdLHRbMyplKzFdKSxuZXcgSmUoYSxsKSxuZXcgSmUoYyx1KV19LGdlbmVyYXRlU2lkZVdhbGxVVjpmdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9dFszKmVdLGE9dFszKmUrMV0sbD10WzMqZSsyXSxjPXRbMyppXSx1PXRbMyppKzFdLGQ9dFszKmkrMl0scD10WzMqcl0saD10WzMqcisxXSxmPXRbMypyKzJdLG09dFszKm9dLEM9dFszKm8rMV0sXz10WzMqbysyXTtyZXR1cm4gTWF0aC5hYnMoYS11KTxNYXRoLmFicyhzLWMpP1tuZXcgSmUocywxLWwpLG5ldyBKZShjLDEtZCksbmV3IEplKHAsMS1mKSxuZXcgSmUobSwxLV8pXTpbbmV3IEplKGEsMS1sKSxuZXcgSmUodSwxLWQpLG5ldyBKZShoLDEtZiksbmV3IEplKEMsMS1fKV19fSx0Zz1jbGFzcyBleHRlbmRzIEtpe2NvbnN0cnVjdG9yKHQ9bmV3IEdkKFtuZXcgSmUoMCwuNSksbmV3IEplKC0uNSwtLjUpLG5ldyBKZSguNSwtLjUpXSksZT0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czplfTtsZXQgaT1bXSxyPVtdLG89W10scz1bXSxhPTAsbD0wO2lmKCExPT09QXJyYXkuaXNBcnJheSh0KSljKHQpO2Vsc2UgZm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspYyh0W3VdKSx0aGlzLmFkZEdyb3VwKGEsbCx1KSxhKz1sLGw9MDtmdW5jdGlvbiBjKHUpe2xldCBkPXIubGVuZ3RoLzMscD11LmV4dHJhY3RQb2ludHMoZSksaD1wLnNoYXBlLGY9cC5ob2xlczshMT09PXp1LmlzQ2xvY2tXaXNlKGgpJiYoaD1oLnJldmVyc2UoKSk7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKXtsZXQgeT1mW0NdOyEwPT09enUuaXNDbG9ja1dpc2UoeSkmJihmW0NdPXkucmV2ZXJzZSgpKX1sZXQgbT16dS50cmlhbmd1bGF0ZVNoYXBlKGgsZik7Zm9yKGxldCBDPTAsXz1mLmxlbmd0aDtDPF87QysrKWg9aC5jb25jYXQoZltDXSk7Zm9yKGxldCBDPTAsXz1oLmxlbmd0aDtDPF87QysrKXtsZXQgeT1oW0NdO3IucHVzaCh5LngseS55LDApLG8ucHVzaCgwLDAsMSkscy5wdXNoKHkueCx5LnkpfWZvcihsZXQgQz0wLF89bS5sZW5ndGg7QzxfO0MrKyl7bGV0IHk9bVtDXTtpLnB1c2goeVswXStkLHlbMV0rZCx5WzJdK2QpLGwrPTN9fXRoaXMuc2V0SW5kZXgoaSksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IEdyKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IEdyKHMsMikpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBlPTAsaT1uLmxlbmd0aDtlPGk7ZSsrKXQuc2hhcGVzLnB1c2gobltlXS51dWlkKTtlbHNlIHQuc2hhcGVzLnB1c2gobi51dWlkKTtyZXR1cm4gdH0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHI9MCxvPXQuc2hhcGVzLmxlbmd0aDtyPG87cisrKWkucHVzaChlW3Quc2hhcGVzW3JdXSk7cmV0dXJuIG5ldyB0ZyhpLHQuY3VydmVTZWdtZW50cyl9fTsoY2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZG93TWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDApLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpc319KS5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgTzI9Y2xhc3MgZXh0ZW5kcyBYb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGFuKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnJvdWdobmVzc01hcD1udWxsLHRoaXMubWV0YWxuZXNzTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5lbnZNYXBJbnRlbnNpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyx0aGlzLm1ldGFsbmVzcz10Lm1ldGFsbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnJvdWdobmVzc01hcD10LnJvdWdobmVzc01hcCx0aGlzLm1ldGFsbmVzc01hcD10Lm1ldGFsbmVzc01hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTtPMi5wcm90b3R5cGUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIE8ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy50eXBlPSJNZXNoUGh5c2ljYWxNYXRlcmlhbCIsdGhpcy5jbGVhcmNvYXRNYXA9bnVsbCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz0wLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPW51bGwsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZT1uZXcgSmUoMSwxKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD1udWxsLHRoaXMuaW9yPTEuNSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicmVmbGVjdGl2aXR5Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIF9hKDIuNSoodGhpcy5pb3ItMSkvKHRoaXMuaW9yKzEpLDAsMSl9LHNldDpmdW5jdGlvbihlKXt0aGlzLmlvcj0oMSsuNCplKS8oMS0uNCplKX19KSx0aGlzLnNoZWVuQ29sb3I9bmV3IGFuKDApLHRoaXMuc2hlZW5Db2xvck1hcD1udWxsLHRoaXMuc2hlZW5Sb3VnaG5lc3M9MSx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPW51bGwsdGhpcy50cmFuc21pc3Npb25NYXA9bnVsbCx0aGlzLnRoaWNrbmVzcz0wLHRoaXMudGhpY2tuZXNzTWFwPW51bGwsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPTAsdGhpcy5hdHRlbnVhdGlvbkNvbG9yPW5ldyBhbigxLDEsMSksdGhpcy5zcGVjdWxhckludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9bnVsbCx0aGlzLnNwZWN1bGFyQ29sb3I9bmV3IGFuKDEsMSwxKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9bnVsbCx0aGlzLl9zaGVlbj0wLHRoaXMuX2NsZWFyY29hdD0wLHRoaXMuX3RyYW5zbWlzc2lvbj0wLHRoaXMuc2V0VmFsdWVzKHQpfWdldCBzaGVlbigpe3JldHVybiB0aGlzLl9zaGVlbn1zZXQgc2hlZW4odCl7dGhpcy5fc2hlZW4+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9zaGVlbj10fWdldCBjbGVhcmNvYXQoKXtyZXR1cm4gdGhpcy5fY2xlYXJjb2F0fXNldCBjbGVhcmNvYXQodCl7dGhpcy5fY2xlYXJjb2F0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fY2xlYXJjb2F0PXR9Z2V0IHRyYW5zbWlzc2lvbigpe3JldHVybiB0aGlzLl90cmFuc21pc3Npb259c2V0IHRyYW5zbWlzc2lvbih0KXt0aGlzLl90cmFuc21pc3Npb24+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl90cmFuc21pc3Npb249dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMuY2xlYXJjb2F0PXQuY2xlYXJjb2F0LHRoaXMuY2xlYXJjb2F0TWFwPXQuY2xlYXJjb2F0TWFwLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXQuY2xlYXJjb2F0Um91Z2huZXNzTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPXQuY2xlYXJjb2F0Tm9ybWFsTWFwLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUuY29weSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSx0aGlzLmlvcj10Lmlvcix0aGlzLnNoZWVuPXQuc2hlZW4sdGhpcy5zaGVlbkNvbG9yLmNvcHkodC5zaGVlbkNvbG9yKSx0aGlzLnNoZWVuQ29sb3JNYXA9dC5zaGVlbkNvbG9yTWFwLHRoaXMuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyx0aGlzLnNoZWVuUm91Z2huZXNzTWFwPXQuc2hlZW5Sb3VnaG5lc3NNYXAsdGhpcy50cmFuc21pc3Npb249dC50cmFuc21pc3Npb24sdGhpcy50cmFuc21pc3Npb25NYXA9dC50cmFuc21pc3Npb25NYXAsdGhpcy50aGlja25lc3M9dC50aGlja25lc3MsdGhpcy50aGlja25lc3NNYXA9dC50aGlja25lc3NNYXAsdGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlPXQuYXR0ZW51YXRpb25EaXN0YW5jZSx0aGlzLmF0dGVudWF0aW9uQ29sb3IuY29weSh0LmF0dGVudWF0aW9uQ29sb3IpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPXQuc3BlY3VsYXJJbnRlbnNpdHlNYXAsdGhpcy5zcGVjdWxhckNvbG9yLmNvcHkodC5zcGVjdWxhckNvbG9yKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXA9dC5zcGVjdWxhckNvbG9yTWFwLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IGFuKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGFuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgYW4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBhbigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmdyYWRpZW50TWFwPXQuZ3JhZGllbnRNYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoVG9vbk1hdGVyaWFsPSEwLGNsYXNzIGV4dGVuZHMgWG97Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hOb3JtYWxNYXRlcmlhbCIsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IEplKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgYW4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPTAsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaExhbWJlcnRNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIFhve2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBhbigxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBKZSgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hdGNhcD10Lm1hdGNhcCx0aGlzLm1hcD10Lm1hcCx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319LnByb3RvdHlwZS5pc01lc2hNYXRjYXBNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGpke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319LnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgTnI9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBOci5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LHZvaWQgMCE9PWU/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246Im51bWJlciI9PXR5cGVvZiB0LkJZVEVTX1BFUl9FTEVNRU5UP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2xldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydChmdW5jdGlvbihyLG8pe3JldHVybiBuW3JdLW5bb119KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IG89MCxzPTA7cyE9PWk7KytvKXtsZXQgYT1lW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbcysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEsbz1uWzBdO2Zvcig7dm9pZCAwIT09byYmdm9pZCAwPT09b1tpXTspbz1uW3IrK107aWYodm9pZCAwPT09bylyZXR1cm47bGV0IHM9b1tpXTtpZih2b2lkIDAhPT1zKWlmKEFycmF5LmlzQXJyYXkocykpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2guYXBwbHkoZSxzKSksbz1uW3IrK119d2hpbGUodm9pZCAwIT09byk7ZWxzZSBpZih2b2lkIDAhPT1zLnRvQXJyYXkpZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxzLnRvQXJyYXkoZSxlLmxlbmd0aCkpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgZG97cz1vW2ldLHZvaWQgMCE9PXMmJih0LnB1c2goby50aW1lKSxlLnB1c2gocykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IG89bi5jbG9uZSgpO28ubmFtZT10O2xldCBzPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGQ9W10scD1bXTtmb3IobGV0IGg9MDtoPGMudGltZXMubGVuZ3RoOysraCl7bGV0IGY9Yy50aW1lc1toXSpyO2lmKCEoZjxlfHxmPj1pKSl7ZC5wdXNoKGMudGltZXNbaF0pO2ZvcihsZXQgbT0wO208dTsrK20pcC5wdXNoKGMudmFsdWVzW2gqdSttXSl9fTAhPT1kLmxlbmd0aCYmKGMudGltZXM9TnIuY29udmVydEFycmF5KGQsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9TnIuY29udmVydEFycmF5KHAsYy52YWx1ZXMuY29uc3RydWN0b3IpLHMucHVzaChjKSl9by50cmFja3M9cztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKWE+by50cmFja3NbbF0udGltZXNbMF0mJihhPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgsbz10L2k7Zm9yKGxldCBzPTA7czxyOysrcyl7bGV0IGE9ZS50cmFja3Nbc10sbD1hLlZhbHVlVHlwZU5hbWU7aWYoImJvb2wiPT09bHx8InN0cmluZyI9PT1sKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24oXyl7cmV0dXJuIF8ubmFtZT09PWEubmFtZSYmXy5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKHZvaWQgMD09PWMpY29udGludWU7bGV0IHU9MCxkPWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9ZC8zKTtsZXQgcD0wLGg9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYocD1oLzMpO2xldCBtLGY9YS50aW1lcy5sZW5ndGgtMTtpZihvPD1hLnRpbWVzWzBdKW09TnIuYXJyYXlTbGljZShhLnZhbHVlcyx1LGQtdSk7ZWxzZSBpZihvPj1hLnRpbWVzW2ZdKXtsZXQgXz1mKmQrdTttPU5yLmFycmF5U2xpY2UoYS52YWx1ZXMsXyxfK2QtdSl9ZWxzZXtsZXQgXz1hLmNyZWF0ZUludGVycG9sYW50KCkseT11LEk9ZC11O18uZXZhbHVhdGUobyksbT1Oci5hcnJheVNsaWNlKF8ucmVzdWx0QnVmZmVyLHksSSl9InF1YXRlcm5pb24iPT09bCYmKG5ldyBDcykuZnJvbUFycmF5KG0pLm5vcm1hbGl6ZSgpLmNvbmp1Z2F0ZSgpLnRvQXJyYXkobSk7bGV0IEM9Yy50aW1lcy5sZW5ndGg7Zm9yKGxldCBfPTA7XzxDOysrXyl7bGV0IHk9XypoK3A7aWYoInF1YXRlcm5pb24iPT09bClDcy5tdWx0aXBseVF1YXRlcm5pb25zRmxhdChjLnZhbHVlcyx5LG0sMCxjLnZhbHVlcyx5KTtlbHNle2xldCBJPWgtMipwO2ZvcihsZXQgQT0wO0E8STsrK0EpYy52YWx1ZXNbeStBXS09bVtBXX19fXJldHVybiBuLmJsZW5kTW9kZT0yNTAxLG59fSxqdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9dm9pZCAwIT09cj9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLG89ZVtpLTFdO2U6e3Q6e2xldCBzO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHZvaWQgMD09PXIpe2lmKHQ8bylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQsbyl9aWYoaT09PWEpYnJlYWs7aWYobz1yLHI9ZVsrK2ldLHQ8cilicmVhayB0fXM9ZS5sZW5ndGg7YnJlYWsgbn1pZih0Pj1vKWJyZWFrIGU7e2xldCBhPWVbMV07dDxhJiYoaT0yLG89YSk7Zm9yKGxldCBsPWktMjs7KXtpZih2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihpPT09bClicmVhaztpZihyPW8sbz1lWy0taS0xXSx0Pj1vKWJyZWFrIHR9cz1pLGk9MH19Zm9yKDtpPHM7KXtsZXQgYT1pK3M+Pj4xO3Q8ZVthXT9zPWE6aT1hKzF9aWYocj1lW2ldLG89ZVtpLTFdLHZvaWQgMD09PW8pcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LHIpO2lmKHZvaWQgMD09PXIpcmV0dXJuIGk9ZS5sZW5ndGgsdGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmFmdGVyRW5kXyhpLTEsbyx0KX10aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuaW50ZXJ2YWxDaGFuZ2VkXyhpLG8scil9cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGVfKGksbyx0LHIpfWdldFNldHRpbmdzXygpe3JldHVybiB0aGlzLnNldHRpbmdzfHx0aGlzLkRlZmF1bHRTZXR0aW5nc199Y29weVNhbXBsZVZhbHVlXyh0KXtsZXQgZT10aGlzLnJlc3VsdEJ1ZmZlcixpPXRoaXMuc2FtcGxlVmFsdWVzLHI9dGhpcy52YWx1ZVNpemUsbz10KnI7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWVbc109aVtvK3NdO3JldHVybiBlfWludGVycG9sYXRlXygpe3Rocm93IG5ldyBFcnJvcigiY2FsbCB0byBhYnN0cmFjdCBtZXRob2QiKX1pbnRlcnZhbENoYW5nZWRfKCl7fX07anUucHJvdG90eXBlLmJlZm9yZVN0YXJ0Xz1qdS5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXyxqdS5wcm90b3R5cGUuYWZ0ZXJFbmRfPWp1LnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO3ZhciBlej1jbGFzcyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpLHRoaXMuX3dlaWdodFByZXY9LTAsdGhpcy5fb2Zmc2V0UHJldj0tMCx0aGlzLl93ZWlnaHROZXh0PS0wLHRoaXMuX29mZnNldE5leHQ9LTAsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXtlbmRpbmdTdGFydDpheSxlbmRpbmdFbmQ6YXl9fWludGVydmFsQ2hhbmdlZF8odCxlLGkpe2xldCByPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLG89dC0yLHM9dCsxLGE9cltvXSxsPXJbc107aWYodm9pZCAwPT09YSlzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdTdGFydCl7Y2FzZSBseTpvPXQsYT0yKmUtaTticmVhaztjYXNlIDI0MDI6bz1yLmxlbmd0aC0yLGE9ZStyW29dLXJbbysxXTticmVhaztkZWZhdWx0Om89dCxhPWl9aWYodm9pZCAwPT09bClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgbHk6cz10LGw9MippLWU7YnJlYWs7Y2FzZSAyNDAyOnM9MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6cz10LTEsbD1lfWxldCBjPS41KihpLWUpLHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PW8qdSx0aGlzLl9vZmZzZXROZXh0PXMqdX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIscz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLHU9dGhpcy5fb2Zmc2V0UHJldixkPXRoaXMuX29mZnNldE5leHQscD10aGlzLl93ZWlnaHRQcmV2LGg9dGhpcy5fd2VpZ2h0TmV4dCxmPShpLWUpLyhyLWUpLG09ZipmLEM9bSpmLF89LXAqQysyKnAqbS1wKmYseT0oMStwKSpDKygtMS41LTIqcCkqbSsoLS41K3ApKmYrMSxJPSgtMS1oKSpDKygxLjUraCkqbSsuNSpmLEE9aCpDLWgqbTtmb3IobGV0IE89MDtPIT09YTsrK08pb1tPXT1fKnNbdStPXSt5KnNbYytPXStJKnNbbCtPXStBKnNbZCtPXTtyZXR1cm4gb319LGsyPWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PShpLWUpLyhyLWUpLGQ9MS11O2ZvcihsZXQgcD0wO3AhPT1hOysrcClvW3BdPXNbYytwXSpkK3NbbCtwXSp1O3JldHVybiBvfX0sdHo9Y2xhc3MgZXh0ZW5kcyBqdXtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sRmw9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1Oci5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1Oci5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGksZT10LmNvbnN0cnVjdG9yO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOk5yLmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6TnIuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IHR6KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBrMih0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgZXoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgMjMwMDplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU7YnJlYWs7Y2FzZSAyMzAxOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSAyMzAyOmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGh9aWYodm9pZCAwPT09ZSl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodm9pZCAwPT09dGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7aWYodD09PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO3RoaXMuc2V0SW50ZXJwb2xhdGlvbih0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1yZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiIsaSksdGhpc31yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGFudD1lLHRoaXN9Z2V0SW50ZXJwb2xhdGlvbigpe3N3aXRjaCh0aGlzLmNyZWF0ZUludGVycG9sYW50KXtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGU6cmV0dXJuIDIzMDA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gMjMwMTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiAyMzAyfX1nZXRWYWx1ZVNpemUoKXtyZXR1cm4gdGhpcy52YWx1ZXMubGVuZ3RoL3RoaXMudGltZXMubGVuZ3RofXNoaWZ0KHQpe2lmKDAhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0rPXR9cmV0dXJuIHRoaXN9c2NhbGUodCl7aWYoMSE9PXQpe2xldCBlPXRoaXMudGltZXM7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpZVtpXSo9dH1yZXR1cm4gdGhpc310cmltKHQsZSl7bGV0IGk9dGhpcy50aW1lcyxyPWkubGVuZ3RoLG89MCxzPXItMTtmb3IoO28hPT1yJiZpW29dPHQ7KSsrbztmb3IoOy0xIT09cyYmaVtzXT5lOyktLXM7aWYoKytzLDAhPT1vfHxzIT09cil7bz49cyYmKHM9TWF0aC5tYXgocywxKSxvPXMtMSk7bGV0IGE9dGhpcy5nZXRWYWx1ZVNpemUoKTt0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UoaSxvLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsbyphLHMqYSl9cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMCxlPXRoaXMuZ2V0VmFsdWVTaXplKCk7ZS1NYXRoLmZsb29yKGUpIT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IGk9dGhpcy50aW1lcyxyPXRoaXMudmFsdWVzLG89aS5sZW5ndGg7MD09PW8mJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBzPW51bGw7Zm9yKGxldCBhPTA7YSE9PW87YSsrKXtsZXQgbD1pW2FdO2lmKCJudW1iZXIiPT10eXBlb2YgbCYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGwpLHQ9ITE7YnJlYWt9aWYobnVsbCE9PXMmJnM+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLGEsbCxzKSx0PSExO2JyZWFrfXM9bH1pZih2b2lkIDAhPT1yJiZOci5pc1R5cGVkQXJyYXkocikpZm9yKGxldCBhPTAsbD1yLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPXJbYV07aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcyksZT1Oci5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxpPXRoaXMuZ2V0VmFsdWVTaXplKCkscj0yMzAyPT09dGhpcy5nZXRJbnRlcnBvbGF0aW9uKCksbz10Lmxlbmd0aC0xLHM9MTtmb3IobGV0IGE9MTthPG87KythKXtsZXQgbD0hMSxjPXRbYV07aWYoYyE9PXRbYSsxXSYmKDEhPT1hfHxjIT09dFswXSkpaWYocilsPSEwO2Vsc2V7bGV0IGQ9YSppLHA9ZC1pLGg9ZCtpO2ZvcihsZXQgZj0wO2YhPT1pOysrZil7bGV0IG09ZVtkK2ZdO2lmKG0hPT1lW3ArZl18fG0hPT1lW2grZl0pe2w9ITA7YnJlYWt9fX1pZihsKXtpZihhIT09cyl7dFtzXT10W2FdO2xldCBkPWEqaSxwPXMqaTtmb3IobGV0IGg9MDtoIT09aTsrK2gpZVtwK2hdPWVbZCtoXX0rK3N9fWlmKG8+MCl7dFtzXT10W29dO2ZvcihsZXQgYT1vKmksbD1zKmksYz0wO2MhPT1pOysrYyllW2wrY109ZVthK2NdOysrc31yZXR1cm4gcyE9PXQubGVuZ3RoPyh0aGlzLnRpbWVzPU5yLmFycmF5U2xpY2UodCwwLHMpLHRoaXMudmFsdWVzPU5yLmFycmF5U2xpY2UoZSwwLHMqaSkpOih0aGlzLnRpbWVzPXQsdGhpcy52YWx1ZXM9ZSksdGhpc31jbG9uZSgpe2xldCB0PU5yLmFycmF5U2xpY2UodGhpcy50aW1lcywwKSxlPU5yLmFycmF5U2xpY2UodGhpcy52YWx1ZXMsMCkscj1uZXcoMCx0aGlzLmNvbnN0cnVjdG9yKSh0aGlzLm5hbWUsdCxlKTtyZXR1cm4gci5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LHJ9fTtGbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5LEZsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxO3ZhciBraD1jbGFzcyBleHRlbmRzIEZse307a2gucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiLGtoLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksa2gucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsa2gucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEYyPWNsYXNzIGV4dGVuZHMgRmx7fTtGMi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0iY29sb3IiO3ZhciBNeT1jbGFzcyBleHRlbmRzIEZse307TXkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9Im51bWJlciI7dmFyIG56PWNsYXNzIGV4dGVuZHMganV7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPShpLWUpLyhyLWUpLGM9dCphO2ZvcihsZXQgdT1jK2E7YyE9PXU7Yys9NClDcy5zbGVycEZsYXQobywwLHMsYy1hLHMsYyxsKTtyZXR1cm4gb319LG5nPWNsYXNzIGV4dGVuZHMgRmx7SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgbnoodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfX07bmcucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InF1YXRlcm5pb24iLG5nLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAxLG5nLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBGaD1jbGFzcyBleHRlbmRzIEZse307RmgucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyIsRmgucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheSxGaC5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMCxGaC5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgU3k9Y2xhc3MgZXh0ZW5kcyBGbHt9O1N5LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBOMj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPTI1MDApe3RoaXMubmFtZT10LHRoaXMudHJhY2tzPWksdGhpcy5kdXJhdGlvbj1lLHRoaXMuYmxlbmRNb2RlPXIsdGhpcy51dWlkPUZjKCksdGhpcy5kdXJhdGlvbjwwJiZ0aGlzLnJlc2V0RHVyYXRpb24oKX1zdGF0aWMgcGFyc2UodCl7bGV0IGU9W10saT10LnRyYWNrcyxyPTEvKHQuZnBzfHwxKTtmb3IobGV0IHM9MCxhPWkubGVuZ3RoO3MhPT1hOysrcyllLnB1c2goTjhlKGlbc10pLnNjYWxlKHIpKTtsZXQgbz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gby51dWlkPXQudXVpZCxvfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBvPTAscz1pLmxlbmd0aDtvIT09czsrK28pZS5wdXNoKEZsLnRvSlNPTihpW29dKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBvPWUubGVuZ3RoLHM9W107Zm9yKGxldCBhPTA7YTxvO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErby0xKSVvLGEsKGErMSklbyksYy5wdXNoKDAsMSwwKTtsZXQgdT1Oci5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9TnIuc29ydGVkQXJyYXkobCwxLHUpLGM9TnIuc29ydGVkQXJyYXkoYywxLHUpLCFyJiYwPT09bFswXSYmKGwucHVzaChvKSxjLnB1c2goY1swXSkpLHMucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEscyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtsZXQgcj10O2k9ci5nZW9tZXRyeSYmci5nZW9tZXRyeS5hbmltYXRpb25zfHxyLmFuaW1hdGlvbnN9Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LG89L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXtsZXQgYz10W2FdLHU9Yy5uYW1lLm1hdGNoKG8pO2lmKHUmJnUubGVuZ3RoPjEpe2xldCBkPXVbMV0scD1yW2RdO3B8fChyW2RdPXA9W10pLHAucHVzaChjKX19bGV0IHM9W107Zm9yKGxldCBhIGluIHIpcy5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoYSxyW2FdLGUsaSkpO3JldHVybiBzfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24oZCxwLGgsZixtKXtpZigwIT09aC5sZW5ndGgpe2xldCBDPVtdLF89W107TnIuZmxhdHRlbkpTT04oaCxDLF8sZiksMCE9PUMubGVuZ3RoJiZtLnB1c2gobmV3IGQocCxDLF8pKX19LHI9W10sbz10Lm5hbWV8fCJkZWZhdWx0IixzPXQuZnBzfHwzMCxhPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgcD1jW2RdLmtleXM7aWYocCYmMCE9PXAubGVuZ3RoKWlmKHBbMF0ubW9ycGhUYXJnZXRzKXtsZXQgZixoPXt9O2ZvcihmPTA7ZjxwLmxlbmd0aDtmKyspaWYocFtmXS5tb3JwaFRhcmdldHMpZm9yKGxldCBtPTA7bTxwW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7bSsrKWhbcFtmXS5tb3JwaFRhcmdldHNbbV1dPS0xO2ZvcihsZXQgbSBpbiBoKXtsZXQgQz1bXSxfPVtdO2ZvcihsZXQgeT0wO3khPT1wW2ZdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt5KXtsZXQgST1wW2ZdO0MucHVzaChJLnRpbWUpLF8ucHVzaChJLm1vcnBoVGFyZ2V0PT09bT8xOjApfXIucHVzaChuZXcgTXkoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK20rIl0iLEMsXykpfWw9aC5sZW5ndGgqKHN8fDEpfWVsc2V7bGV0IGg9Ii5ib25lc1siK2VbZF0ubmFtZSsiXSI7aShTeSxoKyIucG9zaXRpb24iLHAsInBvcyIsciksaShuZyxoKyIucXVhdGVybmlvbiIscCwicm90IixyKSxpKFN5LGgrIi5zY2FsZSIscCwic2NsIixyKX19cmV0dXJuIDA9PT1yLmxlbmd0aD9udWxsOm5ldyB0aGlzKG8sbCxyLGEpfXJlc2V0RHVyYXRpb24oKXtsZXQgZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy50cmFja3MubGVuZ3RoO2khPT1yOysraSl7bGV0IG89dGhpcy50cmFja3NbaV07ZT1NYXRoLm1heChlLG8udGltZXNbby50aW1lcy5sZW5ndGgtMV0pfXJldHVybiB0aGlzLmR1cmF0aW9uPWUsdGhpc310cmltKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLnRyaW0oMCx0aGlzLmR1cmF0aW9uKTtyZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0PXQmJnRoaXMudHJhY2tzW2VdLnZhbGlkYXRlKCk7cmV0dXJuIHR9b3B0aW1pemUoKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0ub3B0aW1pemUoKTtyZXR1cm4gdGhpc31jbG9uZSgpe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8dGhpcy50cmFja3MubGVuZ3RoO2UrKyl0LnB1c2godGhpcy50cmFja3NbZV0uY2xvbmUoKSk7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMubmFtZSx0aGlzLmR1cmF0aW9uLHQsdGhpcy5ibGVuZE1vZGUpfXRvSlNPTigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnRvSlNPTih0aGlzKX19O2Z1bmN0aW9uIE44ZShuKXtpZih2b2lkIDA9PT1uLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayB0eXBlIHVuZGVmaW5lZCwgY2FuIG5vdCBwYXJzZSIpO2xldCB0PWZ1bmN0aW9uKG4pe3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2Uic2NhbGFyIjpjYXNlImRvdWJsZSI6Y2FzZSJmbG9hdCI6Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6cmV0dXJuIE15O2Nhc2UidmVjdG9yIjpjYXNlInZlY3RvcjIiOmNhc2UidmVjdG9yMyI6Y2FzZSJ2ZWN0b3I0IjpyZXR1cm4gU3k7Y2FzZSJjb2xvciI6cmV0dXJuIEYyO2Nhc2UicXVhdGVybmlvbiI6cmV0dXJuIG5nO2Nhc2UiYm9vbCI6Y2FzZSJib29sZWFuIjpyZXR1cm4ga2g7Y2FzZSJzdHJpbmciOnJldHVybiBGaH10aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFVuc3VwcG9ydGVkIHR5cGVOYW1lOiAiK24pfShuLnR5cGUpO2lmKHZvaWQgMD09PW4udGltZXMpe2xldCBlPVtdLGk9W107TnIuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdm9pZCAwIT09dC5wYXJzZT90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIEV5PXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpeyExIT09dGhpcy5lbmFibGVkJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKCExIT09dGhpcy5lbmFibGVkKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LEw4ZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCBsLHI9dGhpcyxvPSExLHM9MCxhPTAsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPWUsdGhpcy5vbkVycm9yPWksdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24odSl7YSsrLCExPT09byYmdm9pZCAwIT09ci5vblN0YXJ0JiZyLm9uU3RhcnQodSxzLGEpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbih1KXtzKyssdm9pZCAwIT09ci5vblByb2dyZXNzJiZyLm9uUHJvZ3Jlc3ModSxzLGEpLHM9PT1hJiYobz0hMSx2b2lkIDAhPT1yLm9uTG9hZCYmci5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKHUpe3ZvaWQgMCE9PXIub25FcnJvciYmci5vbkVycm9yKHUpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24odSl7cmV0dXJuIGw/bCh1KTp1fSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKHUpe3JldHVybiBsPXUsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKHUsZCl7cmV0dXJuIGMucHVzaCh1LGQpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbih1KXtsZXQgZD1jLmluZGV4T2YodSk7cmV0dXJuLTEhPT1kJiZjLnNwbGljZShkLDIpLHRoaXN9LHRoaXMuZ2V0SGFuZGxlcj1mdW5jdGlvbih1KXtmb3IobGV0IGQ9MCxwPWMubGVuZ3RoO2Q8cDtkKz0yKXtsZXQgaD1jW2RdLGY9Y1tkKzFdO2lmKGguZ2xvYmFsJiYoaC5sYXN0SW5kZXg9MCksaC50ZXN0KHUpKXJldHVybiBmfXJldHVybiBudWxsfX19LEd1PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj12b2lkIDAhPT10P3Q6TDhlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LGUpe2xldCBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsbyl7aS5sb2FkKHQscixlLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LFZkPXt9LHJ6PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz1FeS5nZXQodCk7aWYodm9pZCAwIT09bylyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ZSYmZShvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZih2b2lkIDAhPT1WZFt0XSlyZXR1cm4gdm9pZCBWZFt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7VmRbdF09W10sVmRbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO2xldCBzPW5ldyBSZXF1ZXN0KHQse2hlYWRlcnM6bmV3IEhlYWRlcnModGhpcy5yZXF1ZXN0SGVhZGVyKSxjcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscz8iaW5jbHVkZSI6InNhbWUtb3JpZ2luIn0pLGE9dGhpcy5taW1lVHlwZSxsPXRoaXMucmVzcG9uc2VUeXBlO2ZldGNoKHMpLnRoZW4oYz0+e2lmKDIwMD09PWMuc3RhdHVzfHwwPT09Yy5zdGF0dXMpe2lmKDA9PT1jLnN0YXR1cyYmY29uc29sZS53YXJuKCJUSFJFRS5GaWxlTG9hZGVyOiBIVFRQIFN0YXR1cyAwIHJlY2VpdmVkLiIpLHR5cGVvZiBSZWFkYWJsZVN0cmVhbT4idSJ8fHZvaWQgMD09PWMuYm9keS5nZXRSZWFkZXIpcmV0dXJuIGM7bGV0IHU9VmRbdF0sZD1jLmJvZHkuZ2V0UmVhZGVyKCkscD1jLmhlYWRlcnMuZ2V0KCJDb250ZW50LUxlbmd0aCIpLGg9cD9wYXJzZUludChwKTowLGY9MCE9PWgsbT0wLEM9bmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydChfKXshZnVuY3Rpb24geSgpe2QucmVhZCgpLnRoZW4oKHtkb25lOkksdmFsdWU6QX0pPT57aWYoSSlfLmNsb3NlKCk7ZWxzZXttKz1BLmJ5dGVMZW5ndGg7bGV0IE89bmV3IFByb2dyZXNzRXZlbnQoInByb2dyZXNzIix7bGVuZ3RoQ29tcHV0YWJsZTpmLGxvYWRlZDptLHRvdGFsOmh9KTtmb3IobGV0IGVlPTAsWD11Lmxlbmd0aDtlZTxYO2VlKyspe2xldCB4ZT11W2VlXTt4ZS5vblByb2dyZXNzJiZ4ZS5vblByb2dyZXNzKE8pfV8uZW5xdWV1ZShBKSx5KCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZShDKX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PWEpcmV0dXJuIGMudGV4dCgpO3tsZXQgZD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSkscD1kJiZkWzFdP2RbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsaD1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGY9PmguZGVjb2RlKGYpKX19fSkudGhlbihjPT57RXkuYWRkKHQsYyk7bGV0IHU9VmRbdF07ZGVsZXRlIFZkW3RdO2ZvcihsZXQgZD0wLHA9dS5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9dVtkXTtoLm9uTG9hZCYmaC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVZkW3RdO2lmKHZvaWQgMD09PXUpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBWZFt0XTtmb3IobGV0IGQ9MCxwPXUubGVuZ3RoO2Q8cDtkKyspe2xldCBoPXVbZF07aC5vbkVycm9yJiZoLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sTDI9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPVNNKCJpbWciKTtmdW5jdGlvbiBsKCl7dSgpLEV5LmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyhkKXt1KCksciYmcihkKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIHUoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoYS5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLGEuc3JjPXQsYX19LG96PWNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgX3kscz1uZXcgTDIodGhpcy5tYW5hZ2VyKTtzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBhPTA7ZnVuY3Rpb24gbChjKXtzLmxvYWQodFtjXSxmdW5jdGlvbih1KXtvLmltYWdlc1tjXT11LGErKyw2PT09YSYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sc3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBibyxzPW5ldyBMMih0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMubG9hZCh0LGZ1bmN0aW9uKGEpe28uaW1hZ2U9YSxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LE5sPWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgYW4odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O05sLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgYW4oZSl9Y29weSh0KXtyZXR1cm4gTmwucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBpbGU9bmV3IE1uLHJsZT1uZXcgJCxvbGU9bmV3ICQsR009Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEplKDUxMiw1MTIpLHRoaXMubWFwPW51bGwsdGhpcy5tYXBQYXNzPW51bGwsdGhpcy5tYXRyaXg9bmV3IE1uLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMuX2ZydXN0dW09bmV3IHZ5LHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSmUoMSwxKSx0aGlzLl92aWV3cG9ydENvdW50PTEsdGhpcy5fdmlld3BvcnRzPVtuZXcgdHIoMCwwLDEsMSldfWdldFZpZXdwb3J0Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRDb3VudH1nZXRGcnVzdHVtKCl7cmV0dXJuIHRoaXMuX2ZydXN0dW19dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT10aGlzLm1hdHJpeDtybGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShybGUpLG9sZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC50YXJnZXQubWF0cml4V29ybGQpLGUubG9va0F0KG9sZSksZS51cGRhdGVNYXRyaXhXb3JsZCgpLGlsZS5tdWx0aXBseU1hdHJpY2VzKGUucHJvamVjdGlvbk1hdHJpeCxlLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChpbGUpLGkuc2V0KC41LDAsMCwuNSwwLC41LDAsLjUsMCwwLC41LC41LDAsMCwwLDEpLGkubXVsdGlwbHkoZS5wcm9qZWN0aW9uTWF0cml4KSxpLm11bHRpcGx5KGUubWF0cml4V29ybGRJbnZlcnNlKX1nZXRWaWV3cG9ydCh0KXtyZXR1cm4gdGhpcy5fdmlld3BvcnRzW3RdfWdldEZyYW1lRXh0ZW50cygpe3JldHVybiB0aGlzLl9mcmFtZUV4dGVudHN9ZGlzcG9zZSgpe3RoaXMubWFwJiZ0aGlzLm1hcC5kaXNwb3NlKCksdGhpcy5tYXBQYXNzJiZ0aGlzLm1hcFBhc3MuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHRoaXMuY2FtZXJhPXQuY2FtZXJhLmNsb25lKCksdGhpcy5iaWFzPXQuYmlhcyx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLm1hcFNpemUuY29weSh0Lm1hcFNpemUpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9e307cmV0dXJuIDAhPT10aGlzLmJpYXMmJih0LmJpYXM9dGhpcy5iaWFzKSwwIT09dGhpcy5ub3JtYWxCaWFzJiYodC5ub3JtYWxCaWFzPXRoaXMubm9ybWFsQmlhcyksMSE9PXRoaXMucmFkaXVzJiYodC5yYWRpdXM9dGhpcy5yYWRpdXMpLCg1MTIhPT10aGlzLm1hcFNpemUueHx8NTEyIT09dGhpcy5tYXBTaXplLnkpJiYodC5tYXBTaXplPXRoaXMubWFwU2l6ZS50b0FycmF5KCkpLHQuY2FtZXJhPXRoaXMuY2FtZXJhLnRvSlNPTighMSkub2JqZWN0LGRlbGV0ZSB0LmNhbWVyYS5tYXRyaXgsdH19LEIyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoNTAsMSwuNSw1MDApKSx0aGlzLmZvY3VzPTF9dXBkYXRlTWF0cmljZXModCl7bGV0IGU9dGhpcy5jYW1lcmEsaT0yKndVKnQuYW5nbGUqdGhpcy5mb2N1cyxyPXRoaXMubWFwU2l6ZS53aWR0aC90aGlzLm1hcFNpemUuaGVpZ2h0LG89dC5kaXN0YW5jZXx8ZS5mYXI7KGkhPT1lLmZvdnx8ciE9PWUuYXNwZWN0fHxvIT09ZS5mYXIpJiYoZS5mb3Y9aSxlLmFzcGVjdD1yLGUuZmFyPW8sZS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHN1cGVyLnVwZGF0ZU1hdHJpY2VzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mb2N1cz10LmZvY3VzLHRoaXN9fTtCMi5wcm90b3R5cGUuaXNTcG90TGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBObHtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLG89MCxzPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9cyx0aGlzLnNoYWRvdz1uZXcgQjJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBzbGU9bmV3IE1uLG1NPW5ldyAkLG1VPW5ldyAkLFYyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgeHMoOTAsMSwuNSw1MDApKSx0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEplKDQsMiksdGhpcy5fdmlld3BvcnRDb3VudD02LHRoaXMuX3ZpZXdwb3J0cz1bbmV3IHRyKDIsMSwxLDEpLG5ldyB0cigwLDEsMSwxKSxuZXcgdHIoMywxLDEsMSksbmV3IHRyKDEsMSwxLDEpLG5ldyB0cigzLDAsMSwxKSxuZXcgdHIoMSwwLDEsMSldLHRoaXMuX2N1YmVEaXJlY3Rpb25zPVtuZXcgJCgxLDAsMCksbmV3ICQoLTEsMCwwKSxuZXcgJCgwLDAsMSksbmV3ICQoMCwwLC0xKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwtMSwwKV0sdGhpcy5fY3ViZVVwcz1bbmV3ICQoMCwxLDApLG5ldyAkKDAsMSwwKSxuZXcgJCgwLDEsMCksbmV3ICQoMCwxLDApLG5ldyAkKDAsMCwxKSxuZXcgJCgwLDAsLTEpXX11cGRhdGVNYXRyaWNlcyh0LGU9MCl7bGV0IGk9dGhpcy5jYW1lcmEscj10aGlzLm1hdHJpeCxvPXQuZGlzdGFuY2V8fGkuZmFyO28hPT1pLmZhciYmKGkuZmFyPW8saS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLG1NLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxpLnBvc2l0aW9uLmNvcHkobU0pLG1VLmNvcHkoaS5wb3NpdGlvbiksbVUuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW2VdKSxpLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tlXSksaS5sb29rQXQobVUpLGkudXBkYXRlTWF0cml4V29ybGQoKSxyLm1ha2VUcmFuc2xhdGlvbigtbU0ueCwtbU0ueSwtbU0ueiksc2xlLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHNsZSl9fTtWMi5wcm90b3R5cGUuaXNQb2ludExpZ2h0U2hhZG93PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBWMn1nZXQgcG93ZXIoKXtyZXR1cm4gNCp0aGlzLmludGVuc2l0eSpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319LnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIEgyPWNsYXNzIGV4dGVuZHMgR017Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgSm0oLTUsNSw1LC01LC41LDUwMCkpfX07SDIucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShHaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IEdpLHRoaXMuc2hhZG93PW5ldyBIMn1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgTmx7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iQW1iaWVudExpZ2h0In19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodD0hMCxjbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19LnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIFUyPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyAkKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzJdLC40ODg2MDMqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0saSpyKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLHIqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s2XSwuMzE1MzkyKigzKm8qby0xKSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSxpKm8qMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShzWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihzWzFdLDEuMDIzMzI4KnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sMS4wMjMzMjgqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1szXSwxLjAyMzMyOCppKSxlLmFkZFNjYWxlZFZlY3RvcihzWzRdLC44NTgwODYqaSpyKSxlLmFkZFNjYWxlZFZlY3RvcihzWzVdLC44NTgwODYqcipvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbN10sLjg1ODA4NippKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQsZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0uZnJvbUFycmF5KHQsZSszKnIpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS50b0FycmF5KHQsZSszKnIpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56O2VbMF09LjI4MjA5NSxlWzFdPS40ODg2MDMqcixlWzJdPS40ODg2MDMqbyxlWzNdPS40ODg2MDMqaSxlWzRdPTEuMDkyNTQ4KmkqcixlWzVdPTEuMDkyNTQ4KnIqbyxlWzZdPS4zMTUzOTIqKDMqbypvLTEpLGVbN109MS4wOTI1NDgqaSpvLGVbOF09LjU0NjI3NCooaSppLXIqcil9fTtVMi5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciBXTT1jbGFzcyBleHRlbmRzIE5se2NvbnN0cnVjdG9yKHQ9bmV3IFUyLGU9MSl7c3VwZXIodm9pZCAwLGUpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLGV9fTtXTS5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBoej1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXJldHVybihuZXcgVGV4dERlY29kZXIpLmRlY29kZSh0KTtsZXQgZT0iIjtmb3IobGV0IGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZSkpfWNhdGNoe3JldHVybiBlfX1zdGF0aWMgZXh0cmFjdFVybEJhc2UodCl7bGV0IGU9dC5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiJzdHJpbmciIT10eXBlb2YgdHx8IiI9PT10PyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChlKSYmL15cLy8udGVzdCh0KSYmKGU9ZS5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDplK3QpfX07KGNsYXNzIGV4dGVuZHMgS2l7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX0pLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLGNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD4idSImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPUV5LmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPXt9O2EuY3JlZGVudGlhbHM9ImFub255bW91cyI9PT10aGlzLmNyb3NzT3JpZ2luPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLGEuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxhKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7RXkuYWRkKHQsbCksZSYmZShsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe3ImJnIobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgYzIsZ3o9Y2xhc3MgZXh0ZW5kcyBHdXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPXRoaXMscz1uZXcgcnoodGhpcy5tYW5hZ2VyKTtzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscykscy5sb2FkKHQsZnVuY3Rpb24oYSl7dHJ5e2xldCBsPWEuc2xpY2UoMCk7KHZvaWQgMD09PWMyJiYoYzI9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxjMikuZGVjb2RlQXVkaW9EYXRhKGwsZnVuY3Rpb24odSl7ZSh1KX0pfWNhdGNoKGwpe3I/cihsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxpLHIpfX07KGNsYXNzIGV4dGVuZHMgV017Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPShuZXcgYW4pLnNldCh0KSxvPShuZXcgYW4pLnNldChlKSxzPW5ldyAkKHIucixyLmcsci5iKSxhPW5ldyAkKG8ucixvLmcsby5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShzKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShzKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIoYyl9fSkucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITAsY2xhc3MgZXh0ZW5kcyBXTXtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPShuZXcgYW4pLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19LnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciB4ej1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHIsbyxzO3N3aXRjaCh0aGlzLmJpbmRpbmc9dCx0aGlzLnZhbHVlU2l6ZT1pLGUpe2Nhc2UicXVhdGVybmlvbiI6cj10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDYqaSksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6cj10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3Qscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KDUqaSk7YnJlYWs7ZGVmYXVsdDpyPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUscz10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KDUqaSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPXIsdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1zLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxlKXtsZXQgaT10aGlzLmJ1ZmZlcixyPXRoaXMudmFsdWVTaXplLG89dCpyK3Iscz10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoMD09PXMpe2ZvcihsZXQgYT0wO2EhPT1yOysrYSlpW28rYV09aVthXTtzPWV9ZWxzZSBzKz1lLHRoaXMuX21peEJ1ZmZlclJlZ2lvbihpLG8sMCxlL3Mscik7dGhpcy5jdW11bGF0aXZlV2VpZ2h0PXN9YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4OzA9PT10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLGE9dGhpcy5iaW5kaW5nO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsbzwxJiZ0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGUqdGhpcy5fb3JpZ0luZGV4LDEtbyxlKSxzPjAmJnRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKGkscix0aGlzLl9hZGRJbmRleCplLDEsZSk7Zm9yKGxldCBsPWUsYz1lK2U7bCE9PWM7KytsKWlmKGlbbF0hPT1pW2wrZV0pe2Euc2V0VmFsdWUoaSxyKTticmVha319c2F2ZU9yaWdpbmFsU3RhdGUoKXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9vcmlnSW5kZXg7dGhpcy5iaW5kaW5nLmdldFZhbHVlKGUscik7Zm9yKGxldCBvPWkscz1yO28hPT1zOysrbyllW29dPWVbcitvJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe3RoaXMuYmluZGluZy5zZXRWYWx1ZSh0aGlzLmJ1ZmZlciwzKnRoaXMudmFsdWVTaXplKX1fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKXtsZXQgdD10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXQrdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPXQ7aTxlO2krKyl0aGlzLmJ1ZmZlcltpXT0wfV9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbigpe3RoaXMuX3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCksdGhpcy5idWZmZXJbdGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUrM109MX1fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyKCl7bGV0IHQ9dGhpcy5fb3JpZ0luZGV4KnRoaXMudmFsdWVTaXplLGU9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemU7Zm9yKGxldCBpPTA7aTx0aGlzLnZhbHVlU2l6ZTtpKyspdGhpcy5idWZmZXJbZStpXT10aGlzLmJ1ZmZlclt0K2ldfV9zZWxlY3QodCxlLGkscixvKXtpZihyPj0uNSlmb3IobGV0IHM9MDtzIT09bzsrK3MpdFtlK3NdPXRbaStzXX1fc2xlcnAodCxlLGkscil7Q3Muc2xlcnBGbGF0KHQsZSx0LGUsdCxpLHIpfV9zbGVycEFkZGl0aXZlKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fd29ya0luZGV4Km87Q3MubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQodCxzLHQsZSx0LGkpLENzLnNsZXJwRmxhdCh0LGUsdCxlLHQscyxyKX1fbGVycCh0LGUsaSxyLG8pe2xldCBzPTEtcjtmb3IobGV0IGE9MDthIT09bzsrK2Epe2xldCBsPWUrYTt0W2xdPXRbbF0qcyt0W2krYV0qcn19X2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2ZvcihsZXQgcz0wO3MhPT1vOysrcyl7bGV0IGE9ZStzO3RbYV09dFthXSt0W2krc10qcn19fSxOej0iXFxbXFxdXFwuOlxcLyIsVjhlPW5ldyBSZWdFeHAoIlsiK056KyJdIiwiZyIpLEx6PSJbXiIrTnorIl0iLEg4ZT0iW14iK056LnJlcGxhY2UoIlxcLiIsIiIpKyJdIixVOGU9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixMeiksejhlPS8oV0NPRCspPy8uc291cmNlLnJlcGxhY2UoIldDT0QiLEg4ZSksajhlPS8oPzpcLihXQyspKD86XFsoLispXF0pPyk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxHOGU9L1wuKFdDKykoPzpcWyguKylcXSk/Ly5zb3VyY2UucmVwbGFjZSgiV0MiLEx6KSxXOGU9bmV3IFJlZ0V4cCgiXiIrVThlK3o4ZStqOGUrRzhlKyIkIikscThlPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLEN6PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj1pfHxFci5wYXJzZVRyYWNrTmFtZShlKTt0aGlzLl90YXJnZXRHcm91cD10LHRoaXMuX2JpbmRpbmdzPXQuc3Vic2NyaWJlXyhlLHIpfWdldFZhbHVlKHQsZSl7dGhpcy5iaW5kKCk7bGV0IHI9dGhpcy5fYmluZGluZ3NbdGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfXTt2b2lkIDAhPT1yJiZyLmdldFZhbHVlKHQsZSl9c2V0VmFsdWUodCxlKXtsZXQgaT10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG89aS5sZW5ndGg7ciE9PW87KytyKWlbcl0uc2V0VmFsdWUodCxlKX1iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLmJpbmQoKX11bmJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0udW5iaW5kKCl9fSxFcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnBhdGg9aSx0aGlzLnBhcnNlZFBhdGg9cnx8bi5wYXJzZVRyYWNrTmFtZShpKSx0aGlzLm5vZGU9bi5maW5kTm9kZShlLHRoaXMucGFyc2VkUGF0aC5ub2RlTmFtZSl8fGUsdGhpcy5yb290Tm9kZT1lLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9c3RhdGljIGNyZWF0ZShlLGkscil7cmV0dXJuIGUmJmUuaXNBbmltYXRpb25PYmplY3RHcm91cD9uZXcgbi5Db21wb3NpdGUoZSxpLHIpOm5ldyBuKGUsaSxyKX1zdGF0aWMgc2FuaXRpemVOb2RlTmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZShWOGUsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZShlKXtsZXQgaT1XOGUuZXhlYyhlKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlByb3BlcnR5QmluZGluZzogQ2Fubm90IHBhcnNlIHRyYWNrTmFtZTogIitlKTtsZXQgcj17bm9kZU5hbWU6aVsyXSxvYmplY3ROYW1lOmlbM10sb2JqZWN0SW5kZXg6aVs0XSxwcm9wZXJ0eU5hbWU6aVs1XSxwcm9wZXJ0eUluZGV4OmlbNl19LG89ci5ub2RlTmFtZSYmci5ub2RlTmFtZS5sYXN0SW5kZXhPZigiLiIpO2lmKHZvaWQgMCE9PW8mJi0xIT09byl7bGV0IHM9ci5ub2RlTmFtZS5zdWJzdHJpbmcobysxKTstMSE9PXE4ZS5pbmRleE9mKHMpJiYoci5ub2RlTmFtZT1yLm5vZGVOYW1lLnN1YnN0cmluZygwLG8pLHIub2JqZWN0TmFtZT1zKX1pZihudWxsPT09ci5wcm9wZXJ0eU5hbWV8fDA9PT1yLnByb3BlcnR5TmFtZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IGNhbiBub3QgcGFyc2UgcHJvcGVydHlOYW1lIGZyb20gdHJhY2tOYW1lOiAiK2UpO3JldHVybiByfXN0YXRpYyBmaW5kTm9kZShlLGkpe2lmKCFpfHwiIj09PWl8fCIuIj09PWl8fC0xPT09aXx8aT09PWUubmFtZXx8aT09PWUudXVpZClyZXR1cm4gZTtpZihlLnNrZWxldG9uKXtsZXQgcj1lLnNrZWxldG9uLmdldEJvbmVCeU5hbWUoaSk7aWYodm9pZCAwIT09cilyZXR1cm4gcn1pZihlLmNoaWxkcmVuKXtsZXQgcj1mdW5jdGlvbihzKXtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErKyl7bGV0IGw9c1thXTtpZihsLm5hbWU9PT1pfHxsLnV1aWQ9PT1pKXJldHVybiBsO2xldCBjPXIobC5jaGlsZHJlbik7aWYoYylyZXR1cm4gY31yZXR1cm4gbnVsbH0sbz1yKGUuY2hpbGRyZW4pO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9X2dldFZhbHVlX3VuYXZhaWxhYmxlKCl7fV9zZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fZ2V0VmFsdWVfZGlyZWN0KGUsaSl7ZVtpXT10aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV19X2dldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKWVbaSsrXT1yW29dfV9nZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXtlW2ldPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdfV9nZXRWYWx1ZV90b0FycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LnRvQXJyYXkoZSxpKX1fc2V0VmFsdWVfZGlyZWN0KGUsaSl7dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdPWVbaV19X3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5KGUsaSl7bGV0IHI9dGhpcy5yZXNvbHZlZFByb3BlcnR5O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7byE9PXM7KytvKXJbb109ZVtpKytdfV9zZXRWYWx1ZV9hcnJheV9zZXROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXTt0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnQoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eVt0aGlzLnByb3BlcnR5SW5kZXhdPWVbaV0sdGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZnJvbUFycmF5KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHkuZnJvbUFycmF5KGUsaSksdGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X2dldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLmdldFZhbHVlKGUsaSl9X3NldFZhbHVlX3VuYm91bmQoZSxpKXt0aGlzLmJpbmQoKSx0aGlzLnNldFZhbHVlKGUsaSl9YmluZCgpe2xldCBlPXRoaXMubm9kZSxpPXRoaXMucGFyc2VkUGF0aCxyPWkub2JqZWN0TmFtZSxvPWkucHJvcGVydHlOYW1lLHM9aS5wcm9wZXJ0eUluZGV4O2lmKGV8fChlPW4uZmluZE5vZGUodGhpcy5yb290Tm9kZSxpLm5vZGVOYW1lKXx8dGhpcy5yb290Tm9kZSx0aGlzLm5vZGU9ZSksdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmF2YWlsYWJsZSx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYXZhaWxhYmxlLCFlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO2lmKHIpe2xldCB1PWkub2JqZWN0SW5kZXg7c3dpdGNoKHIpe2Nhc2UibWF0ZXJpYWxzIjppZighZS5tYXRlcmlhbClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbCBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBtYXRlcmlhbC4iLHRoaXMpO2lmKCFlLm1hdGVyaWFsLm1hdGVyaWFscylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtYXRlcmlhbC5tYXRlcmlhbHMgYXMgbm9kZS5tYXRlcmlhbCBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWxzIGFycmF5LiIsdGhpcyk7ZT1lLm1hdGVyaWFsLm1hdGVyaWFsczticmVhaztjYXNlImJvbmVzIjppZighZS5za2VsZXRvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO2U9ZS5za2VsZXRvbi5ib25lcztmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylpZihlW2RdLm5hbWU9PT11KXt1PWQ7YnJlYWt9YnJlYWs7ZGVmYXVsdDppZih2b2lkIDA9PT1lW3JdKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG9iamVjdE5hbWUgb2Ygbm9kZSB1bmRlZmluZWQuIix0aGlzKTtlPWVbcl19aWYodm9pZCAwIT09dSl7aWYodm9pZCAwPT09ZVt1XSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byBiaW5kIHRvIG9iamVjdEluZGV4IG9mIG9iamVjdE5hbWUsIGJ1dCBpcyB1bmRlZmluZWQuIix0aGlzLGUpO2U9ZVt1XX19bGV0IGE9ZVtvXTtpZih2b2lkIDA9PT1hKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBwcm9wZXJ0eSBmb3IgdHJhY2s6ICIraS5ub2RlTmFtZSsiLiIrbysiIGJ1dCBpdCB3YXNuJ3QgZm91bmQuIixlKTtsZXQgbD10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD1lLHZvaWQgMCE9PWUubmVlZHNVcGRhdGU/bD10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dm9pZCAwIT09ZS5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlJiYobD10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGM9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYodm9pZCAwIT09cyl7aWYoIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyI9PT1vKXtpZighZS5nZW9tZXRyeSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO2lmKCFlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcylyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBtb3JwaFRhcmdldEluZmx1ZW5jZXMgYmVjYXVzZSBub2RlIGRvZXMgbm90IGhhdmUgYSBnZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMuIix0aGlzKTt2b2lkIDAhPT1lLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSYmKHM9ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10pfWM9dGhpcy5CaW5kaW5nVHlwZS5BcnJheUVsZW1lbnQsdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEsdGhpcy5wcm9wZXJ0eUluZGV4PXN9ZWxzZSB2b2lkIDAhPT1hLmZyb21BcnJheSYmdm9pZCAwIT09YS50b0FycmF5PyhjPXRoaXMuQmluZGluZ1R5cGUuSGFzRnJvbVRvQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOkFycmF5LmlzQXJyYXkoYSk/KGM9dGhpcy5CaW5kaW5nVHlwZS5FbnRpcmVBcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6dGhpcy5wcm9wZXJ0eU5hbWU9bzt0aGlzLmdldFZhbHVlPXRoaXMuR2V0dGVyQnlCaW5kaW5nVHlwZVtjXSx0aGlzLnNldFZhbHVlPXRoaXMuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmdbY11bbF19dW5iaW5kKCl7dGhpcy5ub2RlPW51bGwsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH19cmV0dXJuIG4uQ29tcG9zaXRlPUN6LG59KSgpO0VyLnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfSxFci5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfSxFci5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsRXIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxFci5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxFci5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldLEVyLnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtFci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsRXIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0VyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLEVyLnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXSxjbGFzcyBleHRlbmRzIEhke2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLG89ci5sZW5ndGgscz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt2b2lkIDA9PT11JiYodT17fSxjW2xdPXUpO2ZvcihsZXQgZD0wO2QhPT1vOysrZCl7bGV0IHA9cltkXSxoPXAubmFtZSxmPXVbaF07aWYodm9pZCAwIT09ZikrK2YucmVmZXJlbmNlQ291bnQsc1tkXT1mO2Vsc2V7aWYoZj1zW2RdLHZvaWQgMCE9PWYpe251bGw9PT1mLl9jYWNoZUluZGV4JiYoKytmLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhmLGwsaCkpO2NvbnRpbnVlfWY9bmV3IHh6KEVyLmNyZWF0ZShpLGgsZSYmZS5fcHJvcGVydHlCaW5kaW5nc1tkXS5iaW5kaW5nLnBhcnNlZFBhdGgpLHAuVmFsdWVUeXBlTmFtZSxwLmdldFZhbHVlU2l6ZSgpKSwrK2YucmVmZXJlbmNlQ291bnQsdGhpcy5fYWRkSW5hY3RpdmVCaW5kaW5nKGYsbCxoKSxzW2RdPWZ9YVtkXS5yZXN1bHRCdWZmZXI9Zi5idWZmZXJ9fV9hY3RpdmF0ZUFjdGlvbih0KXtpZighdGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2lmKG51bGw9PT10Ll9jYWNoZUluZGV4KXtsZXQgaT0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkLHI9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcFtyXTt0aGlzLl9iaW5kQWN0aW9uKHQsbyYmby5rbm93bkFjdGlvbnNbMF0pLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHQscixpKX1sZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PW8udXNlQ291bnQrKyYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnVzZUNvdW50JiYoby5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3Rha2VCYWNrQmluZGluZyhvKSl9dGhpcy5fdGFrZUJhY2tBY3Rpb24odCl9fV9pbml0TWVtb3J5TWFuYWdlcigpe3RoaXMuX2FjdGlvbnM9W10sdGhpcy5fbkFjdGl2ZUFjdGlvbnM9MCx0aGlzLl9hY3Rpb25zQnlDbGlwPXt9LHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX25BY3RpdmVCaW5kaW5ncz0wLHRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZT17fSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzPVtdLHRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzPTA7bGV0IHQ9dGhpczt0aGlzLnN0YXRzPXthY3Rpb25zOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYWN0aW9ucy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0Ll9uQWN0aXZlQWN0aW9uc319LGJpbmRpbmdzOntnZXQgdG90YWwoKXtyZXR1cm4gdC5fYmluZGluZ3MubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUJpbmRpbmdzfX0sY29udHJvbEludGVycG9sYW50czp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2NvbnRyb2xJbnRlcnBvbGFudHMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHN9fX19X2lzQWN0aXZlQWN0aW9uKHQpe2xldCBlPXQuX2NhY2hlSW5kZXg7cmV0dXJuIG51bGwhPT1lJiZlPHRoaXMuX25BY3RpdmVBY3Rpb25zfV9hZGRJbmFjdGl2ZUFjdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5fYWN0aW9ucyxvPXRoaXMuX2FjdGlvbnNCeUNsaXAscz1vW2VdO2lmKHZvaWQgMD09PXMpcz17a25vd25BY3Rpb25zOlt0XSxhY3Rpb25CeVJvb3Q6e319LHQuX2J5Q2xpcENhY2hlSW5kZXg9MCxvW2VdPXM7ZWxzZXtsZXQgYT1zLmtub3duQWN0aW9uczt0Ll9ieUNsaXBDYWNoZUluZGV4PWEubGVuZ3RoLGEucHVzaCh0KX10Ll9jYWNoZUluZGV4PXIubGVuZ3RoLHIucHVzaCh0KSxzLmFjdGlvbkJ5Um9vdFtpXT10fV9yZW1vdmVJbmFjdGl2ZUFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9ZVtlLmxlbmd0aC0xXSxyPXQuX2NhY2hlSW5kZXg7aS5fY2FjaGVJbmRleD1yLGVbcl09aSxlLnBvcCgpLHQuX2NhY2hlSW5kZXg9bnVsbDtsZXQgbz10Ll9jbGlwLnV1aWQscz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9c1tvXSxsPWEua25vd25BY3Rpb25zLGM9bFtsLmxlbmd0aC0xXSx1PXQuX2J5Q2xpcENhY2hlSW5kZXg7Yy5fYnlDbGlwQ2FjaGVJbmRleD11LGxbdV09YyxsLnBvcCgpLHQuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkZWxldGUgYS5hY3Rpb25CeVJvb3RbKHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZF0sMD09PWwubGVuZ3RoJiZkZWxldGUgc1tvXSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKHQpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPWVbaV07MD09LS1vLnJlZmVyZW5jZUNvdW50JiZ0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcobyl9fV9sZW5kQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUFjdGlvbnMrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0FjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUFjdGlvbnMsbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fYWRkSW5hY3RpdmVCaW5kaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz10aGlzLl9iaW5kaW5ncyxzPXJbZV07dm9pZCAwPT09cyYmKHM9e30scltlXT1zKSxzW2ldPXQsdC5fY2FjaGVJbmRleD1vLmxlbmd0aCxvLnB1c2godCl9X3JlbW92ZUluYWN0aXZlQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuYmluZGluZyxyPWkucm9vdE5vZGUudXVpZCxvPWkucGF0aCxzPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxhPXNbcl0sbD1lW2UubGVuZ3RoLTFdLGM9dC5fY2FjaGVJbmRleDtsLl9jYWNoZUluZGV4PWMsZVtjXT1sLGUucG9wKCksZGVsZXRlIGFbb10sMD09PU9iamVjdC5rZXlzKGEpLmxlbmd0aCYmZGVsZXRlIHNbcl19X2xlbmRCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVCaW5kaW5ncysrLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X3Rha2VCYWNrQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVCaW5kaW5ncyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV9sZW5kQ29udHJvbEludGVycG9sYW50KCl7bGV0IHQ9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxlPXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzKyssaT10W2VdO3JldHVybiB2b2lkIDA9PT1pJiYoaT1uZXcgazIobmV3IEZsb2F0MzJBcnJheSgyKSxuZXcgRmxvYXQzMkFycmF5KDIpLDEsdGhpcy5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlciksaS5fX2NhY2hlSW5kZXg9ZSx0W2VdPWkpLGl9X3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpe2xldCBlPXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsaT10Ll9fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMsbz1lW3JdO3QuX19jYWNoZUluZGV4PXIsZVtyXT10LG8uX19jYWNoZUluZGV4PWksZVtpXT1vfWNsaXBBY3Rpb24odCxlLGkpe2xldCByPWV8fHRoaXMuX3Jvb3Qsbz1yLnV1aWQscz0ic3RyaW5nIj09dHlwZW9mIHQ/TjIuZmluZEJ5TmFtZShyLHQpOnQsYT1udWxsIT09cz9zLnV1aWQ6dCxsPXRoaXMuX2FjdGlvbnNCeUNsaXBbYV0sYz1udWxsO2lmKHZvaWQgMD09PWkmJihpPW51bGwhPT1zP3MuYmxlbmRNb2RlOjI1MDApLHZvaWQgMCE9PWwpe2xldCBkPWwuYWN0aW9uQnlSb290W29dO2lmKHZvaWQgMCE9PWQmJmQuYmxlbmRNb2RlPT09aSlyZXR1cm4gZDtjPWwua25vd25BY3Rpb25zWzBdLG51bGw9PT1zJiYocz1jLl9jbGlwKX1pZihudWxsPT09cylyZXR1cm4gbnVsbDtsZXQgdT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyPWUuYmxlbmRNb2RlKXt0aGlzLl9taXhlcj10LHRoaXMuX2NsaXA9ZSx0aGlzLl9sb2NhbFJvb3Q9aSx0aGlzLmJsZW5kTW9kZT1yO2xldCBvPWUudHJhY2tzLHM9by5sZW5ndGgsYT1uZXcgQXJyYXkocyksbD17ZW5kaW5nU3RhcnQ6YXksZW5kaW5nRW5kOmF5fTtmb3IobGV0IGM9MDtjIT09czsrK2Mpe2xldCB1PW9bY10uY3JlYXRlSW50ZXJwb2xhbnQobnVsbCk7YVtjXT11LHUuc2V0dGluZ3M9bH10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzPWwsdGhpcy5faW50ZXJwb2xhbnRzPWEsdGhpcy5fcHJvcGVydHlCaW5kaW5ncz1uZXcgQXJyYXkocyksdGhpcy5fY2FjaGVJbmRleD1udWxsLHRoaXMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCx0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5sb29wPTIyMDEsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJjAhPT10aGlzLnRpbWVTY2FsZSYmbnVsbD09PXRoaXMuX3N0YXJ0VGltZSYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixhPXIvbzt0LndhcnAoMSxvL3IsZSksdGhpcy53YXJwKGEsMSxlKX1yZXR1cm4gdGhpc31jcm9zc0ZhZGVUbyh0LGUsaSl7cmV0dXJuIHQuY3Jvc3NGYWRlRnJvbSh0aGlzLGUsaSl9c3RvcEZhZGluZygpe2xldCB0PXRoaXMuX3dlaWdodEludGVycG9sYW50O3JldHVybiBudWxsIT09dCYmKHRoaXMuX3dlaWdodEludGVycG9sYW50PW51bGwsdGhpcy5fbWl4ZXIuX3Rha2VCYWNrQ29udHJvbEludGVycG9sYW50KHQpKSx0aGlzfXNldEVmZmVjdGl2ZVRpbWVTY2FsZSh0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dCx0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9dGhpcy5wYXVzZWQ/MDp0LHRoaXMuc3RvcFdhcnBpbmcoKX1nZXRFZmZlY3RpdmVUaW1lU2NhbGUoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlfXNldER1cmF0aW9uKHQpe3JldHVybiB0aGlzLnRpbWVTY2FsZT10aGlzLl9jbGlwLmR1cmF0aW9uL3QsdGhpcy5zdG9wV2FycGluZygpfXN5bmNXaXRoKHQpe3JldHVybiB0aGlzLnRpbWU9dC50aW1lLHRoaXMudGltZVNjYWxlPXQudGltZVNjYWxlLHRoaXMuc3RvcFdhcnBpbmcoKX1oYWx0KHQpe3JldHVybiB0aGlzLndhcnAodGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlLDAsdCl9d2FycCh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUscz10aGlzLnRpbWVTY2FsZSxhPXRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50O251bGw9PT1hJiYoYT1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9YSk7bGV0IGw9YS5wYXJhbWV0ZXJQb3NpdGlvbnMsYz1hLnNhbXBsZVZhbHVlcztyZXR1cm4gbFswXT1vLGxbMV09bytpLGNbMF09dC9zLGNbMV09ZS9zLHRoaXN9c3RvcFdhcnBpbmcoKXtsZXQgdD10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31nZXRNaXhlcigpe3JldHVybiB0aGlzLl9taXhlcn1nZXRDbGlwKCl7cmV0dXJuIHRoaXMuX2NsaXB9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9sb2NhbFJvb3R8fHRoaXMuX21peGVyLl9yb290fV91cGRhdGUodCxlLGkscil7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLl91cGRhdGVXZWlnaHQodCk7bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG51bGwhPT1vKXtsZXQgbD0odC1vKSppO2lmKGw8MHx8MD09PWkpcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgcz10aGlzLl91cGRhdGVUaW1lKGUpLGE9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKGE+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztpZigyNTAxPT09dGhpcy5ibGVuZE1vZGUpZm9yKGxldCB1PTAsZD1sLmxlbmd0aDt1IT09ZDsrK3UpbFt1XS5ldmFsdWF0ZShzKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShhKTtlbHNlIGZvcihsZXQgdT0wLGQ9bC5sZW5ndGg7dSE9PWQ7Kyt1KWxbdV0uZXZhbHVhdGUocyksY1t1XS5hY2N1bXVsYXRlKHIsYSl9fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYobnVsbCE9PWkpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCksMD09PXImJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsIT09aSYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSwwPT09ZT90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LG89dGhpcy5fbG9vcENvdW50LHM9MjIwMj09PWk7aWYoMD09PXQpcmV0dXJuLTE9PT1vP3I6cyYmMT09KDEmbyk/ZS1yOnI7aWYoMjIwMD09PWkpey0xPT09byYmKHRoaXMuX2xvb3BDb3VudD0wLHRoaXMuX3NldEVuZGluZ3MoITAsITAsITEpKTtlOntpZihyPj1lKXI9ZTtlbHNle2lmKCEocjwwKSl7dGhpcy50aW1lPXI7YnJlYWsgZX1yPTB9dGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PDA/LTE6MX0pfX1lbHNle2lmKC0xPT09byYmKHQ+PTA/KG89MCx0aGlzLl9zZXRFbmRpbmdzKCEwLDA9PT10aGlzLnJlcGV0aXRpb25zLHMpKTp0aGlzLl9zZXRFbmRpbmdzKDA9PT10aGlzLnJlcGV0aXRpb25zLCEwLHMpKSxyPj1lfHxyPDApe2xldCBhPU1hdGguZmxvb3Ioci9lKTtyLT1lKmEsbys9TWF0aC5hYnMoYSk7bGV0IGw9dGhpcy5yZXBldGl0aW9ucy1vO2lmKGw8PTApdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD90aGlzLnBhdXNlZD0hMDp0aGlzLmVuYWJsZWQ9ITEscj10PjA/ZTowLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dD4wPzE6LTF9KTtlbHNle2lmKDE9PT1sKXtsZXQgYz10PDA7dGhpcy5fc2V0RW5kaW5ncyhjLCFjLHMpfWVsc2UgdGhpcy5fc2V0RW5kaW5ncyghMSwhMSxzKTt0aGlzLl9sb29wQ291bnQ9byx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJsb29wIixhY3Rpb246dGhpcyxsb29wRGVsdGE6YX0pfX1lbHNlIHRoaXMudGltZT1yO2lmKHMmJjE9PSgxJm8pKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD1seSxyLmVuZGluZ0VuZD1seSk6KHIuZW5kaW5nU3RhcnQ9dD90aGlzLnplcm9TbG9wZUF0U3RhcnQ/bHk6YXk6MjQwMixyLmVuZGluZ0VuZD1lP3RoaXMuemVyb1Nsb3BlQXRFbmQ/bHk6YXk6MjQwMil9X3NjaGVkdWxlRmFkaW5nKHQsZSxpKXtsZXQgcj10aGlzLl9taXhlcixvPXIudGltZSxzPXRoaXMuX3dlaWdodEludGVycG9sYW50O251bGw9PT1zJiYocz1yLl9sZW5kQ29udHJvbEludGVycG9sYW50KCksdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9cyk7bGV0IGE9cy5wYXJhbWV0ZXJQb3NpdGlvbnMsbD1zLnNhbXBsZVZhbHVlcztyZXR1cm4gYVswXT1vLGxbMF09ZSxhWzFdPW8rdCxsWzFdPWksdGhpc319KHRoaXMscyxlLGkpO3JldHVybiB0aGlzLl9iaW5kQWN0aW9uKHUsYyksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odSxhLG8pLHV9ZXhpc3RpbmdBY3Rpb24odCxlKXtsZXQgaT1lfHx0aGlzLl9yb290LHI9aS51dWlkLG89InN0cmluZyI9PXR5cGVvZiB0P04yLmZpbmRCeU5hbWUoaSx0KTp0LGE9dGhpcy5fYWN0aW9uc0J5Q2xpcFtvP28udXVpZDp0XTtyZXR1cm4gdm9pZCAwIT09YSYmYS5hY3Rpb25CeVJvb3Rbcl18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnM7Zm9yKGxldCBpPXRoaXMuX25BY3RpdmVBY3Rpb25zLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCo9dGhpcy50aW1lU2NhbGUsbz1NYXRoLnNpZ24odCkscz10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PWk7KytjKWVbY10uX3VwZGF0ZShyLHQsbyxzKTtsZXQgYT10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2MpYVtjXS5hcHBseShzKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgZT0wO2U8dGhpcy5fYWN0aW9ucy5sZW5ndGg7ZSsrKXRoaXMuX2FjdGlvbnNbZV0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQudXVpZCxyPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1yW2ldO2lmKHZvaWQgMCE9PW8pe2xldCBzPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgYT0wLGw9cy5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1zW2FdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxkPWVbZS5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxkLl9jYWNoZUluZGV4PXUsZVt1XT1kLGUucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgcltpXX19dW5jYWNoZVJvb3QodCl7bGV0IGU9dC51dWlkLGk9dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IHMgaW4gaSl7bGV0IGw9aVtzXS5hY3Rpb25CeVJvb3RbZV07dm9pZCAwIT09bCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCBvPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZVtlXTtpZih2b2lkIDAhPT1vKWZvcihsZXQgcyBpbiBvKXtsZXQgYT1vW3NdO2EucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcoYSl9fXVuY2FjaGVBY3Rpb24odCxlKXtsZXQgaT10aGlzLmV4aXN0aW5nQWN0aW9uKHQsZSk7bnVsbCE9PWkmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGkpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGkpKX19LnByb3RvdHlwZS5fY29udHJvbEludGVycG9sYW50c1Jlc3VsdEJ1ZmZlcj1uZXcgRmxvYXQzMkFycmF5KDEpO3ZhciBxTT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXsic3RyaW5nIj09dHlwZW9mIHQmJihjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IFR5cGUgcGFyYW1ldGVyIGlzIG5vIGxvbmdlciBuZWVkZWQuIiksdD1hcmd1bWVudHNbMV0pLHRoaXMudmFsdWU9dH1jbG9uZSgpe3JldHVybiBuZXcgcU0odm9pZCAwPT09dGhpcy52YWx1ZS5jbG9uZT90aGlzLnZhbHVlOnRoaXMudmFsdWUuY2xvbmUoKSl9fTsoY2xhc3MgZXh0ZW5kcyAkbXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgYWxlPW5ldyBKZSxpZz1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBKZSgxLzAsMS8wKSxlPW5ldyBKZSgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9YWxlLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBhbGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O2lnLnByb3RvdHlwZS5pc0JveDI9ITA7dmFyIENoPW5ldyAkLGQyPW5ldyBNbixnVT1uZXcgTW47ZnVuY3Rpb24gUmxlKG4pe2xldCB0PVtdO24mJm4uaXNCb25lJiZ0LnB1c2gobik7Zm9yKGxldCBlPTA7ZTxuLmNoaWxkcmVuLmxlbmd0aDtlKyspdC5wdXNoLmFwcGx5KHQsUmxlKG4uY2hpbGRyZW5bZV0pKTtyZXR1cm4gdH12YXIgWThlPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gQnoobix0LGUpe2lmKDE9PT1lKXJldHVybiBuZXcgYW4odCk7bGV0IGk9Q20odCk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBkMyBmYWlsZWQgdG8gcmVjb2duaXplIHRoZSBjb2xvcjogJHt0fWApO3JldHVybiBuZXcgYW4oRkgoaSxuKSgxLWUpKX1uZXcgSW50MzJBcnJheShZOGUuYnVmZmVyKSx5YS5jcmVhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHlhLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5nZXRQb2ludD10LG59LEhNLnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhuKX0sY2xhc3MgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcih0PTEwLGU9MTAsaT00NDczOTI0LHI9ODk0Nzg0OCl7aT1uZXcgYW4oaSkscj1uZXcgYW4ocik7bGV0IG89ZS8yLHM9dC9lLGE9dC8yLGw9W10sYz1bXTtmb3IobGV0IHA9MCxoPTAsZj0tYTtwPD1lO3ArKyxmKz1zKXtsLnB1c2goLWEsMCxmLGEsMCxmKSxsLnB1c2goZiwwLC1hLGYsMCxhKTtsZXQgbT1wPT09bz9pOnI7bS50b0FycmF5KGMsaCksaCs9MyxtLnRvQXJyYXkoYyxoKSxoKz0zLG0udG9BcnJheShjLGgpLGgrPTMsbS50b0FycmF5KGMsaCksaCs9M31sZXQgdT1uZXcgS2k7dS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IobCwzKSksdS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IoYywzKSksc3VwZXIodSxuZXcgamQoe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfSxjbGFzcyBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKHQpe2xldCBlPVJsZSh0KSxpPW5ldyBLaSxyPVtdLG89W10scz1uZXcgYW4oMCwwLDEpLGE9bmV3IGFuKDAsMSwwKTtmb3IobGV0IGM9MDtjPGUubGVuZ3RoO2MrKyl7bGV0IHU9ZVtjXTt1LnBhcmVudCYmdS5wYXJlbnQuaXNCb25lJiYoci5wdXNoKDAsMCwwKSxyLnB1c2goMCwwLDApLG8ucHVzaChzLnIscy5nLHMuYiksby5wdXNoKGEucixhLmcsYS5iKSl9aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgR3IociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgR3IobywzKSksc3VwZXIoaSxuZXcgamQoe3ZlcnRleENvbG9yczohMCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExLHRyYW5zcGFyZW50OiEwfSkpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtnVS5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAscz0wO288ZS5sZW5ndGg7bysrKXtsZXQgYT1lW29dO2EucGFyZW50JiZhLnBhcmVudC5pc0JvbmUmJihkMi5tdWx0aXBseU1hdHJpY2VzKGdVLGEubWF0cml4V29ybGQpLENoLnNldEZyb21NYXRyaXhQb3NpdGlvbihkMiksci5zZXRYWVoocyxDaC54LENoLnksQ2gueiksZDIubXVsdGlwbHlNYXRyaWNlcyhnVSxhLnBhcmVudC5tYXRyaXhXb3JsZCksQ2guc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGQyKSxyLnNldFhZWihzKzEsQ2gueCxDaC55LENoLnopLHMrPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNrZWxldG9uSGVscGVyOiB1cGRhdGUoKSBubyBsb25nZXIgbmVlZHMgdG8gYmUgY2FsbGVkLiIpfSxHdS5wcm90b3R5cGUuZXh0cmFjdFVybEJhc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTG9hZGVyOiAuZXh0cmFjdFVybEJhc2UoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuTG9hZGVyVXRpbHMuZXh0cmFjdFVybEJhc2UoKSBpbnN0ZWFkLiIpLGh6LmV4dHJhY3RVcmxCYXNlKG4pfSxHdS5IYW5kbGVycz17YWRkOmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5hZGQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuYWRkSGFuZGxlcigpIGluc3RlYWQuIil9LGdldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkxvYWRlcjogSGFuZGxlcnMuZ2V0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIExvYWRpbmdNYW5hZ2VyLmdldEhhbmRsZXIoKSBpbnN0ZWFkLiIpfX0saWcucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LGlnLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0saWcucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LGlnLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0sSmEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9LEphLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX0sSmEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEphLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKG4pfSxKYS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUobil9LEFoLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSx2eS5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChuKX0sUG8ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sUG8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFBvLnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDMoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDModGhpcyl9LFBvLnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxQby5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfSxNbi5wcm90b3R5cGUuZXh0cmFjdFBvc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5leHRyYWN0UG9zaXRpb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5jb3B5UG9zaXRpb24oKS4iKSx0aGlzLmNvcHlQb3NpdGlvbihuKX0sTW4ucHJvdG90eXBlLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmZsYXR0ZW5Ub0FycmF5T2Zmc2V0KCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC50b0FycmF5KCkgaW5zdGVhZC4iKSx0aGlzLnRvQXJyYXkobix0KX0sTW4ucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLChuZXcgJCkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxNbi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sTW4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxNbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxNbi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sTW4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE1uLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LE1uLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LGtjLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LENzLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LENzLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LEloLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sSWgucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sS3IucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LEtyLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LEtyLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxLci5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sS3IucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LEtyLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksS3IuZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LEtyLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLEtyLmdldE5vcm1hbChuLHQsZSxpKX0sR2QucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LEdkLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBPaCh0aGlzLG4pfSxHZC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyB0Zyh0aGlzLG4pfSxKZS5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sSmUucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSxKZS5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVJvdGF0aW9uTWF0cml4KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLnNldEV1bGVyRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUXVhdGVybmlvbigpIGluc3RlYWQuIil9LCQucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LCQucHJvdG90eXBlLmdldFNjYWxlRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0U2NhbGVGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFNjYWxlKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4U2NhbGUobil9LCQucHJvdG90eXBlLmdldENvbHVtbkZyb21NYXRyaXg9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0Q29sdW1uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhDb2x1bW4oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCxuKX0sJC5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LCQucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LCQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSwkLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sdHIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LHRyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sR2kucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0sR2kucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LEdpLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0sR2kucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxHaS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHaS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLHlvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHlvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksVDIucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSx4cy5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTmwucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTHIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09ZzJ9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShnMil9fX0pLExyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9nMjpNTSksdGhpc30sTHIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sTHIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sS2kucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sS2kucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBMcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxLaS5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxLaS5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxLaS5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxLaS5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LEtpLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEtpLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksJG0ucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/ZzI6TU0pLHRoaXN9LCRtLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sT2gucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LE9oLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxPaC5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGJ5LnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0scU0ucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWG8ucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyBhbn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoemQucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxaaS5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxaaS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxaaS5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxaaS5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0sWmkucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxaaS5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LFppLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LFppLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LFppLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0sWmkucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxaaS5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LFppLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxaaS5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sWmkucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxaaS5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFppLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFppLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP0ZyOkRofX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRWxlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh2YS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IGd6KS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxETS5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxETS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0sVWQuY3Jvc3NPcmlnaW49dm9pZCAwLFVkLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IHN6O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30sVWQubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgb3o7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxVZC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFVkLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246IjEzNyJ9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSIxMzciKTt2YXIgTmM9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0oTmN8fChOYz17fSkpLE5jKSkoKTtmdW5jdGlvbiBrbGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBMcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBGbGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLHM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghc3x8cy5jb3VudCE9PXIpJiYocz1uZXcgTHIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLHMpKTtsZXQgYT1zLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsZCxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxoPW5ldyBKZShjLHUpLGY9bmV3IEplKGQscCksbT1uZXcgSmUoZC1jLHAtdSksQz1uZXcgSmUoLW0ueSxtLngpLnNldExlbmd0aChlLzIpLF89aC5jbG9uZSgpLmFkZChDKSx5PWguY2xvbmUoKS5zdWIoQyksST1mLmNsb25lKCkuYWRkKEMpLEE9Zi5jbG9uZSgpLnN1YihDKSxPPVtfLngsXy55LDAseS54LHkueSwwLEkueCxJLnksMCxJLngsSS55LDAseS54LHkueSwwLEEueCxBLnksMF07YS5zZXQoTyxsKk8ubGVuZ3RoKX1zLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBZMihuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTpzfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1CeihuLG8scz8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgUTI9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sc109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09c319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LEF5PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0oQXl8fChBeT17fSkpLEF5KSkoKSxLMj1jbGFzcyBleHRlbmRzIFEye3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6QXkuTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOkF5Lk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxzPXt4Om9bMF0seTpvWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGQ9aXNOYU4oYyl8fGlzTmFOKHUpO2QhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PWE/e3g6Yyx5OnV9OmEpKSxpPWwpLGR8fChhPXt4OmMseTp1fSkscj1kfXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYT8/cykpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6cyxwb2x5bGluZTphfV1vZiByLmVudHJpZXMoKSlpZihzPT09QXkuTlVNQkVSKTI9PT1hLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDphWzBdLHk6YVsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLGEse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsYVtsXSxhW2wrMV1dKSx7eDphW2xdLHk6YVtsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sWjI9Y2xhc3MgZXh0ZW5kcyBIdntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IEptKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxKMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIHJyLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBIdix0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9UlIodD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixzKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFJY19hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgcz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixzKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWkscz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrcy8zLGUueCtyLzIsZS55K3MvMyxlLngsZS55LTIqcy8zXSksbD1SUih0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWkscz1SUih0Py5kb20sKCk9PntsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGEpLGF9LGE9PihhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxhKSxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDp7ZG9tOnMsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOnN9PXIsYT0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LWEvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCthLzIsaS55K28vMl0pLGM9UlIodD8uZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx1fSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPXMse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSByci5XRUJHTDp7bGV0IGU9bmV3IFoyO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgYnksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLEljX2lzV2ViR2wyT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IFppKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2YgeW8pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IHU9QnoodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLGQ9bmV3IEtpLHA9bmV3IGpkKHtjb2xvcjp1fSksaD1uZXcgeW8oZCxwKTtyZXR1cm4gcC52aXNpYmxlPXIsRmxlKGQsZSxvKSx0aGlzLnNjZW5lLmFkZChoKSx7dHlwZTpOYy5MSU5FLGRhdGE6ZSxvYmozZDpoLHdpZHRoOm99fWxldHtkYXRhOnMsb2JqM2Q6YSx3aWR0aDpsfT10O3JldHVybiBZMih0aGlzLmJhY2tncm91bmRDb2xvcixhLHU9PigobyE9PWx8fCFzfHwhSWNfYXJlUG9seWxpbmVzRXF1YWwocyxlKSkmJkZsZSh1LGUsbyksdSksaSk/e3R5cGU6TmMuTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUscz1Ceih0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLGE9bmV3IEttKHtjb2xvcjpzLHZpc2libGU6aX0pO3JldHVybiBuZXcgeW8odCxhKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixzPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgS2k7a2xlKGwscyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KGtsZShsLHMpLGwpLGkpP3t0eXBlOk5jLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgeHkoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gWTIodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpOYy5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIscz0yL01hdGguc3FydCgzKSpvLGE9bmV3IEdkKFtuZXcgSmUoZS54LXMvMixlLnktby8yKSxuZXcgSmUoZS54LGUueStvLzIpLG5ldyBKZShpLngsaS55K28vMiksbmV3IEplKGkueCtzLzIsaS55LW8vMildKTthLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgdGcoYSk7aWYoIXQpe2xldCB1PXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09dT9udWxsOih0aGlzLnNjZW5lLmFkZCh1KSx7dHlwZTpOYy5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp1fSl9cmV0dXJuIFkyKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6TmMuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgSzIoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUoQWModCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShBYyh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSwkYT0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KCRhfHwoJGE9e30pKSwkYSkpKCksSXk9KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KEl5fHwoSXk9e30pKSxJeSkpKCk7ZnVuY3Rpb24gTGxlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciByZz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1yci5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtyclt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9cmcud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6JGEuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTokYS5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8scyk9Pm8rcy5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgcz0wO3M8by5wb2ludHMubGVuZ3RoO3MrKylpW2UrK109by5wb2ludHNbc10ueCxpW2UrK109by5wb2ludHNbc10ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6JGEuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOiRhLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBJeS5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgSXkuT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBXdShuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uIEtNKG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBlTyhuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fXJnLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPUxsZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9MmMxZTcxYzUiKTt2YXIgSHo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTtmdW5jdGlvbiBVbGUobil7Zm9yKGxldCB0IG9mIG4paWYoU3RyaW5nKHQpLmluY2x1ZGVzKCJlIikpcmV0dXJuITA7cmV0dXJuITF9dmFyIFpNPXtnZXRTdGFuZGFyZFRpY2tzOmVPLGdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLHM9bi50aWNrcyhpLDIpO2lmKG8tcj49ODY0ZTV8fHMubGVuZ3RoPjIpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBhPW4udGlja3MoaSxlKTtyZXR1cm57bWFqb3I6cy5tYXAobD0+KHtzdGFydDpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRTaG9ydChsKX0pKSxtaW5vcjphLm1hcChsPT4oe3ZhbHVlOmwsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobCl9KSl9fSxnZXRUaWNrc0ZvckxpbmVhclNjYWxlOmZ1bmN0aW9uKG4sdCxlLGkpe2xldFtyLG9dPWkscz1NYXRoLmFicyhvLXIpO2lmKHM+LjAwMSlyZXR1cm4gZU8obix0LGUsaSk7bGV0IGE9bi50aWNrcyhbcixvXSxlKSxsPW4udGlja3MoW3Isb10sMik7aWYoVWxlKGEpfHxVbGUobCkpcmV0dXJuIGVPKG4sdCxlLGkpO2xldCBjPVtdLHU9ZnVuY3Rpb24obil7bGV0IHQ9bi50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUtIiwyKTtyZXR1cm4gMj09PXQubGVuZ3RoP051bWJlcih0WzFdKS0xOjB9KHMpO3M8MSYmbC5ldmVyeShoPT57bGV0IGY9TWF0aC5hYnMoaCk7cmV0dXJuIGY+PTAmJmY8MX0pJiYodSs9MSk7bGV0IGQ9bmV3IE1hcDtmb3IobGV0IGggb2YgbCl7bGV0W2YsbT0iIl09U3RyaW5nKGgpLnNwbGl0KCIuIiwyKSxDPU51bWJlcihmKyIuIittLnNsaWNlKDAsdSkpO2Quc2V0KEMse3N0YXJ0OkMsdGlja0Zvcm1hdHRlZFN0cmluZzowPT09Qz8iXHUyMDE0Ijp0LmZvcm1hdFJlYWRhYmxlKEMpfSl9bGV0IHA9MTAqTWF0aC5wb3coMTAsLXUpO2ZvcihsZXQgaCBvZiBhKWZvcihsZXQgZiBvZlsuLi5kLmtleXMoKV0ucmV2ZXJzZSgpKXtsZXQgbT1oLWY7aWYobT49MCYmbTxwKXtpZigwPT09ZiljLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2soaCl9KTtlbHNle2xldCBDPVN0cmluZyhoKS5zbGljZShTdHJpbmcoZikubGVuZ3RoKTtjLnB1c2goe3ZhbHVlOmgsdGlja0Zvcm1hdHRlZFN0cmluZzpgXHUyMDI2JHtDfHwiMCJ9YH0pfWJyZWFrfX1yZXR1cm57bWFqb3I6QXJyYXkuZnJvbShkLnZhbHVlcygpKSxtaW5vcjpjfX0sZmlsdGVyVGlja3NCeVZpc2liaWxpdHk6ZnVuY3Rpb24obix0LGUsaSxyPTUpe2lmKCFuLmxlbmd0aHx8IUh6KXJldHVybiBuO2xldCBvPSJ4Ij09PWU/MTotMSxzPW51bGw7cmV0dXJuIG4uZmlsdGVyKGE9PntsZXQgbD10KGEpO0h6LmZvbnQ9aTtsZXQgYz1Iei5tZWFzdXJlVGV4dChhLnRpY2tGb3JtYXR0ZWRTdHJpbmcpLHU9IngiPT09ZT9jLndpZHRoOmMuYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQtYy5hY3R1YWxCb3VuZGluZ0JveERlc2NlbnQ7cmV0dXJuIG51bGw9PT1zPyEobCtvKnU8MHx8KHM9bCtvKnUsMCkpOiEobyoocytvKnItbCk+MHx8KHM9bCtvKnUsMCkpfSl9fTtmdW5jdGlvbiBlamUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsMTcpKDEsInRleHQiKSxEKDIpLHYoKSxnKDMsInRpdGxlIiksRCg0KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLE90KCJmb250IixpLmF4aXNGb250KSx6ZSgieCIsaS50ZXh0WFBvc2l0aW9uKGUudmFsdWUpKSgieSIsaS50ZXh0WVBvc2l0aW9uKGUudmFsdWUpKSx4KDEpLHFlKCIgIixlLnRpY2tGb3JtYXR0ZWRTdHJpbmcsIiAiKSx4KDIpLHl0KGkuZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnZhbHVlKSl9fWZ1bmN0aW9uIHRqZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjApKDEsInNwYW4iKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9dC5pbmRleCxyPXQubGFzdCxvPU0oMik7T3QoImxlZnQiLG8uZ2V0TWFqb3JYUG9zaXRpb24oZSksInB4IikoIndpZHRoIixvLmdldE1ham9yV2lkdGhTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImJvdHRvbSIsby5nZXRNYWpvcllQb3NpdGlvbihlKSwicHgiKSgiaGVpZ2h0IixvLmdldE1ham9ySGVpZ2h0U3RyaW5nKGUscixvLm1ham9yVGlja3NbaSsxXSkpKCJmb250IixvLmF4aXNGb250KSxhdCgibWFqb3ItbGFiZWwiLCEwKSgibGFzdCIsciksYigidGl0bGUiLG8uZ2V0Rm9ybWF0dGVyKCkuZm9ybWF0TG9uZyhlLnN0YXJ0KSkseCgyKSx5dChlLnRpY2tGb3JtYXR0ZWRTdHJpbmcpfX1mdW5jdGlvbiBuamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSx0amUsMywxNiwic3BhbiIsMTkpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLm1ham9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGUudHJhY2tCeU1ham9yVGljayl9fXZhciB6bGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBHLHRoaXMuZWRpdE1lbnVPcGVuZWQ9ITEsdGhpcy5tYWpvclRpY2tzPVtdLHRoaXMubWlub3JUaWNrcz1bXX1uZ09uQ2hhbmdlcygpe2xldCBlPW51bGwscj1LTSgieCI9PT10aGlzLmF4aXM/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMuZ3JpZENvdW50KTtlPXRoaXMuc2NhbGUgaW5zdGFuY2VvZiByTT9aTS5nZXRUaWNrc0ZvckxpbmVhclNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6dGhpcy5zY2FsZSBpbnN0YW5jZW9mIG9NP1pNLmdldFRpY2tzRm9yVGVtcG9yYWxTY2FsZSh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpOlpNLmdldFN0YW5kYXJkVGlja3ModGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KSx0aGlzLm1ham9yVGlja3M9ZS5tYWpvcix0aGlzLm1pbm9yVGlja3M9Wk0uZmlsdGVyVGlja3NCeVZpc2liaWxpdHkoZS5taW5vcixvPT50aGlzLmdldERvbVBvcyhvLnZhbHVlKSx0aGlzLmF4aXMsIjExcHggUm9ib3RvLCBzYW5zLXNlcmlmIil9Z2V0Rm9ybWF0dGVyKCl7cmV0dXJuIHRoaXMuY3VzdG9tRm9ybWF0dGVyPz90aGlzLnNjYWxlLmRlZmF1bHRGb3JtYXR0ZXJ9dHJhY2tCeU1pbm9yVGljayhlKXtyZXR1cm4gZS52YWx1ZX10cmFja0J5TWFqb3JUaWNrKGUpe3JldHVybiBlLnN0YXJ0fWdldERvbVBvcyhlKXtyZXR1cm4gdGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMuYXhpc0V4dGVudCxXdSh0aGlzLmRvbURpbSx0aGlzLmF4aXMpLGUpfXRleHRYUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzP1N0cmluZyh0aGlzLmdldERvbVBvcyhlKSk6IjEwMCUifXRleHRZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPyIiOlN0cmluZyh0aGlzLmdldERvbVBvcyhlKSl9Z2V0TWFqb3JYUG9zaXRpb24oZSl7cmV0dXJuInkiPT09dGhpcy5heGlzPzA6TWF0aC5taW4odGhpcy5kb21EaW0ud2lkdGgsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9yV2lkdGhTdHJpbmcoZSxpLHIpe3JldHVybiJ5Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0ud2lkdGg6dGhpcy5nZXRNYWpvclhQb3NpdGlvbihyKSktdGhpcy5nZXRNYWpvclhQb3NpdGlvbihlKSsicHgifWdldE1ham9yWVBvc2l0aW9uKGUpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8wOnRoaXMuZG9tRGltLmhlaWdodC1NYXRoLm1pbih0aGlzLmRvbURpbS5oZWlnaHQsTWF0aC5tYXgoMCx0aGlzLmdldERvbVBvcyhlLnN0YXJ0KSkpfWdldE1ham9ySGVpZ2h0U3RyaW5nKGUsaSxyKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6KGl8fCFyP3RoaXMuZG9tRGltLmhlaWdodDp0aGlzLmdldE1ham9yWVBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWVBvc2l0aW9uKGUpKyJweCJ9a2V5ZG93blByZXZlbnRDbG9zZShlKXsiRXNjYXBlIiE9PWUua2V5JiZlLnN0b3BQcm9wYWdhdGlvbigpfWV4dGVudENoYW5nZWQoZSxpKXtsZXQgcj1OdW1iZXIoZSksbz1OdW1iZXIoaSk7aWYobzxyKXtsZXQgcz1yO3I9byxvPXN9IU51bWJlci5pc0Zpbml0ZShyKXx8IU51bWJlci5pc0Zpbml0ZShvKXx8dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdChbcixvXSl9b25BeGlzVXBkYXRlTWVudU9wZW4oZSxpLHIpe2UudmFsdWU9U3RyaW5nKHJbMF0pLGkudmFsdWU9U3RyaW5nKHJbMV0pLGUuZm9jdXMoKX1zZXRFZGl0TWVudU9wZW5lZChlKXt0aGlzLmVkaXRNZW51T3BlbmVkPWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtYXhpcyJdXSxpbnB1dHM6e2F4aXNFeHRlbnQ6ImF4aXNFeHRlbnQiLGF4aXM6ImF4aXMiLHNjYWxlOiJzY2FsZSIsZ3JpZENvdW50OiJncmlkQ291bnQiLGRvbURpbToiZG9tRGltIixjdXN0b21Gb3JtYXR0ZXI6ImN1c3RvbUZvcm1hdHRlciJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyNix2YXJzOjEzLGNvbnN0czpbWzEsImxpbmUiXSxbMSwibWlub3IiXSxbMSwidGlja3MiXSxbImNsYXNzIiwibWlub3ItdGljay1sYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIG1hbnVhbGx5IHNldCBtaW4gJiBtYXggdmFsdWVzIiwzLCJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnVPcGVuZWQiLCJtZW51Q2xvc2VkIl0sWyJtYXRNZW51VHJpZ2dlciIsIm1hdE1lbnVUcmlnZ2VyIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWyJjbGFzcyIsIm1ham9yIHRpY2tzIiw0LCJuZ0lmIl0sWyJ4UG9zaXRpb24iLCJiZWZvcmUiLDMsInlQb3NpdGlvbiJdLFsibWFudWFsQ29udHJvbCIsIm1hdE1lbnUiXSxbMSwiZXh0ZW50LWVkaXQtaW5wdXQiLDMsImNsaWNrIiwia2V5ZG93biJdLFsidHlwZSIsIm51bWJlciIsMywidmFsdWUiXSxbIm1pbklucHV0IiwiIl0sWyJtYXhJbnB1dCIsIiJdLFsxLCJleHRlbnQtZWRpdC1jb250cm9sIiwzLCJrZXlkb3duIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsMSwiZXh0ZW50LWVkaXQtY2hhbmdlIiwzLCJjbGljayJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwxLCJleHRlbnQtZWRpdC1jYW5jZWwiLDMsImNsaWNrIl0sWzEsIm1pbm9yLXRpY2stbGFiZWwiXSxbMSwibWFqb3IiLCJ0aWNrcyJdLFszLCJtYWpvci1sYWJlbCIsImxhc3QiLCJsZWZ0Iiwid2lkdGgiLCJib3R0b20iLCJoZWlnaHQiLCJmb250IiwidGl0bGUiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFszLCJ0aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIpLE4oMSwiZGl2IiwwKSxnKDIsImRpdiIsMSksam4oKSxnKDMsInN2ZyIsMiksRSg0LGVqZSw1LDYsImciLDMpLHYoKSxTYSgpLGcoNSwiYnV0dG9uIiw0LDUpLFAoIm1lbnVPcGVuZWQiLGZ1bmN0aW9uKCl7cmUocik7bGV0IHM9c3QoMTUpLGE9c3QoMjApO3JldHVybiBpLm9uQXhpc1VwZGF0ZU1lbnVPcGVuKHMsYSxpLmF4aXNFeHRlbnQpLG9lKGkuc2V0RWRpdE1lbnVPcGVuZWQoITApKX0pKCJtZW51Q2xvc2VkIixmdW5jdGlvbigpe3JldHVybiBpLnNldEVkaXRNZW51T3BlbmVkKCExKX0pLE4oNywibWF0LWljb24iLDYpLHYoKSgpLEUoOCxuamUsMiwyLCJkaXYiLDcpLHYoKSxnKDksIm1hdC1tZW51Iiw4LDkpKDExLCJkaXYiLDEwKSxQKCJjbGljayIsZnVuY3Rpb24ocyl7cmV0dXJuIHMuc3RvcFByb3BhZ2F0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMTIsImxhYmVsIiksRCgxMywibWluIiksdigpLE4oMTQsImlucHV0IiwxMSwxMiksdigpLGcoMTYsImRpdiIsMTApLFAoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksZygxNywibGFiZWwiKSxEKDE4LCJtYXgiKSx2KCksTigxOSwiaW5wdXQiLDExLDEzKSx2KCksZygyMSwiZGl2IiwxNCksUCgia2V5ZG93biIsZnVuY3Rpb24ocyl7cmV0dXJuIGkua2V5ZG93blByZXZlbnRDbG9zZShzKX0pLGcoMjIsImJ1dHRvbiIsMTUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDE1KSxhPXN0KDIwKSxsPXN0KDYpO3JldHVybiBpLmV4dGVudENoYW5nZWQocy52YWx1ZSxhLnZhbHVlKSxvZShsLmNsb3NlTWVudSgpKX0pLEQoMjMsIiBDaGFuZ2UgIiksdigpLGcoMjQsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShyKSxvZShzdCg2KS5jbG9zZU1lbnUoKSl9KSxEKDI1LCIgQ2FuY2VsICIpLHYoKSgpKCl9aWYoMiZlKXtsZXQgcj1zdCgxMCk7ZWEoaS5heGlzKyItYXhpcyBheGlzIikseCg0KSxiKCJuZ0Zvck9mIixpLm1pbm9yVGlja3MpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeU1pbm9yVGljaykseCgxKSxhdCgiZXh0ZW50LWVkaXQtYnV0dG9uIiwhMCkoImV4dGVudC1lZGl0LW1lbnUtb3BlbmVkIixpLmVkaXRNZW51T3BlbmVkKSxiKCJtYXRNZW51VHJpZ2dlckZvciIscikseCgzKSxiKCJuZ0lmIixpLm1ham9yVGlja3MubGVuZ3RoKSx4KDEpLGIoInlQb3NpdGlvbiIsInkiPT09aS5heGlzPyJhYm92ZSI6ImJlbG93IikseCg1KSxiKCJ2YWx1ZSIsaS5heGlzRXh0ZW50WzBdKSx4KDUpLGIoInZhbHVlIixpLmF4aXNFeHRlbnRbMV0pfX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixabixJdSxQdV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO2ZvbnQtc2l6ZToxMXB4O3VzZXItc2VsZWN0Om5vbmV9LmF4aXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0sIC5taW5vcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDA7b3ZlcmZsb3c6aGlkZGVufS5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWE7ZmxleDowIDAgMXB4O2p1c3RpZnktY29udGVudDpzdHJldGNofS50aWNrc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbTozcHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTp0ZXh0LWJlZm9yZS1lZGdlO3RleHQtYW5jaG9yOm1pZGRsZX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubGluZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6NXB4fS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6Y2VudHJhbDt0ZXh0LWFuY2hvcjplbmR9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAudGlja3NbX25nY29udGVudC0lQ09NUCVdey13ZWJraXQtbWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlO2ZvbnQtc2l6ZTowO2hlaWdodDoyNHB4O2xpbmUtaGVpZ2h0OjI0cHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB4O3RvcDo1cHg7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjRweH0uZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O2xpbmUtaGVpZ2h0OjE2cHh9LmV4dGVudC1lZGl0LWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sdW1uLWdhcDo1cHg7ZGlzcGxheTpncmlkO2ZvbnQtc2l6ZToxMnB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczozMHB4IG1pbm1heChhdXRvLCAxMDBweCk7aGVpZ2h0OjMwcHg7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItc3R5bGU6c29saWQ7Y29sb3I6aW5oZXJpdH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZTtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bWFyZ2luOjEwcHggMjBweH0uZXh0ZW50LWVkaXQtY29udHJvbFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjEuNDttYXJnaW4tbGVmdDo1cHg7cGFkZGluZzowIDEwcHh9LmF4aXNbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLmV4dGVudC1lZGl0LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmV4dGVudC1lZGl0LW1lbnUtb3BlbmVkW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OnZpc2libGV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW47Y29udGFpbjpzdHJpY3R9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3doaXRlLXNwYWNlOm5vd3JhcH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzllOWU5ZTtwYWRkaW5nOjAgNXB4fS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsLmxhc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzllOWU5ZTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjVweCAwO3dpZHRoOjEwMCV9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzllOWU5ZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBKTShuLHQpe2xldCBlPU1hdGgubWluKEZ1KG4ubWFwKCh7eDpvfSk9Pm8pLHQpLG4ubGVuZ3RoLTEpLGk9TWF0aC5tYXgoMCxlLTEpO3JldHVybiBNYXRoLmFicyhuW2ldLngtdCktTWF0aC5hYnMobltlXS54LXQpPD0wP2k6ZX1mdW5jdGlvbiBqbGUobix0LGUsaSxyLG8pe2xldCBzO3N3aXRjaChuLmRlbHRhTW9kZSl7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9QSVhFTDpzPTE7YnJlYWs7Y2FzZSBXaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FOnM9ODticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BBR0U6cz0yMDticmVhaztkZWZhdWx0OnM9MSxjb25zb2xlLndhcm4oYFVua25vd24gV2hlZWxFdmVudCBkZWx0YU1vZGU6ICR7bi5kZWx0YU1vZGV9LmApfWxldCBhPW4uZGVsdGFZKnMsbD1hPDA/TWF0aC5tYXgoYSppLC0uOTUpOmEqaSx7d2lkdGg6YyxoZWlnaHQ6dX09ZSxkPVtyLnJldmVyc2UodC54LFswLGNdLC1uLm9mZnNldFgqbCksci5yZXZlcnNlKHQueCxbMCxjXSxjKyhjLW4ub2Zmc2V0WCkqbCldLHA9W28ucmV2ZXJzZSh0LnksW3UsMF0sLW4ub2Zmc2V0WSpsKSxvLnJldmVyc2UodC55LFt1LDBdLHUrKHUtbi5vZmZzZXRZKSpsKV07cmV0dXJue3g6ZFsxXTxkWzBdP1tkWzFdLGRbMF1dOmQseTpwWzFdPHBbMF0/W3BbMV0scFswXV06cH19dmFyIG9qZT1bImRvdHMiXTtmdW5jdGlvbiBzamUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwxMikpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oMik7emUoImN4IixpLmdldERvbVgoZS5kYXRhUG9pbnQueCkpKCJjeSIsaS5nZXREb21ZKGUuZGF0YVBvaW50LnkpKSgiZmlsbCIsZS5tZXRhZGF0YS5jb2xvcil9fWZ1bmN0aW9uIGFqZShuLHQpe2lmKDEmbiYmKGpuKCksS3QoMCksRSgxLHNqZSwxLDMsImNpcmNsZSIsMTEpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO3goMSksYigibmdJZiIsaS5zaG91bGRSZW5kZXJUb29sdGlwUG9pbnQoZS5kYXRhUG9pbnQpKX19ZnVuY3Rpb24gbGplKG4sdCl7aWYoMSZuJiYoam4oKSxLdCgwKSxFKDEsYWplLDIsMSwibmctY29udGFpbmVyIiwxMCksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0Zvck9mIixlLmN1cnNvcmVkRGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5U2VyaWVzTmFtZSl9fWZ1bmN0aW9uIGNqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJyZWN0IiwxMykpLDImbil7bGV0IGU9TSgpO3plKCJ4IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS54KSgid2lkdGgiLGUuem9vbUJveEluVWlDb29yZGluYXRlLndpZHRoKSgieSIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUueSkoImhlaWdodCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUuaGVpZ2h0KX19dmFyIHVqZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJue2RhdGE6bixjdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkOnQsY3Vyc29yTG9jYXRpb246ZX19O2Z1bmN0aW9uIGRqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxNCksQWkoMSwxNSksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDExKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUudG9vbHRpcFRlbXBsYXRlP2UudG9vbHRpcFRlbXBsYXRlOmkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsa2IoMix1amUsZS5jdXJzb3JlZERhdGEsZS5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLGUuY3Vyc29yTG9jYXRpb24pKX19ZnVuY3Rpb24gcGplKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMTcpKDIsInRkIiwxOCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDE5KSxEKDUpLHYoKSxnKDYsInRkIiksRCg3KSx2KCksZyg4LCJ0ZCIpLEQoOSksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt4KDMpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLHl0KGUubWV0YWRhdGEuZGlzcGxheU5hbWUpLHgoMikseXQoZS5kYXRhUG9pbnQueSkseCgyKSx5dChlLmRhdGFQb2ludC54KX19ZnVuY3Rpb24gaGplKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIpKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwxNiksZyg0LCJ0aCIpLEQoNSwiTmFtZSIpLHYoKSxnKDYsInRoIiksRCg3LCJZIiksdigpLGcoOCwidGgiKSxEKDksIlgiKSx2KCkoKSgpLGcoMTAsInRib2R5IiksRSgxMSxwamUsMTAsNSwibmctY29udGFpbmVyIiwxMCksdigpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9TSgpO3goMTEpLGIoIm5nRm9yT2YiLGUpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeVNlcmllc05hbWUpfX1mdW5jdGlvbiBtamUobil7cmV0dXJuIG4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9dmFyIEdsZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuc2Nyb2xsU3RyYXRlZ3k9aSx0aGlzLm9uVmlld0V4dGVudENoYW5nZT1uZXcgRyx0aGlzLm9uVmlld0V4dGVudFJlc2V0PW5ldyBHLHRoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlPW5ldyBHLHRoaXMuSW50ZXJhY3Rpb25TdGF0ZT1rcix0aGlzLnN0YXRlPW5ldyBWcihrci5OT05FKSx0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPSExLHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OjAsd2lkdGg6MCxoZWlnaHQ6MCx5OjB9LHRoaXMudG9vbHRpcFBvc2l0aW9ucz1be29mZnNldFk6NSxvcmlnaW5YOiJzdGFydCIsb3ZlcmxheVg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTo1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WToidG9wIn0se29mZnNldFk6LTE1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRZOi0xNSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvZmZzZXRYOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRYOi01LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlZOiJ0b3AifV0sdGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPW51bGwsdGhpcy5jdXJzb3JMb2NhdGlvbj1udWxsLHRoaXMuY3Vyc29yZWREYXRhPVtdLHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSx0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZS5zdWJzY3JpYmUoZT0+e3RoaXMub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlLmVtaXQoZSl9KSksdGhpcy5uZ1Vuc3Vic2NyaWJlLnBpcGUoQigoKT0+e3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGU9PmUudW5zdWJzY3JpYmUoKSl9KSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsImRibGNsaWNrIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblZpZXdFeHRlbnRSZXNldC5lbWl0KCksdGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh3aW5kb3csImtleWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc2hvdWxkUGFuKGUpO2khPT10aGlzLnNwZWNpYWxLZXlQcmVzc2VkJiYodGhpcy5zcGVjaWFsS2V5UHJlc3NlZD1pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkod2luZG93LCJrZXl1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIix7cGFzc2l2ZTohMH0pLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnN0YXRlLmdldFZhbHVlKCkscj10aGlzLnNob3VsZFBhbihlKT9rci5QQU5OSU5HOmtyLkRSQUdfWk9PTUlORztpPT09a3IuTk9ORSYmcj09PWtyLkRSQUdfWk9PTUlORyYmKHRoaXMuZHJhZ1N0YXJ0Q29vcmQ9e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZT17eDplLm9mZnNldFgsd2lkdGg6MCx5OmUub2Zmc2V0WSxoZWlnaHQ6MH0pLGkhPT1yJiYodGhpcy5zdGF0ZS5uZXh0KHIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZUO3RoaXMuZHJhZ1N0YXJ0Q29vcmQ9bnVsbDtsZXQgcj10aGlzLnpvb21Cb3hJblVpQ29vcmRpbmF0ZTtpZighaSYmdGhpcy5zdGF0ZS5nZXRWYWx1ZSgpPT09a3IuRFJBR19aT09NSU5HJiZyLndpZHRoPjAmJnIuaGVpZ2h0PjApe2xldCBvPXRoaXMuZ2V0RGF0YVgoci54KSxzPXRoaXMuZ2V0RGF0YVgoci54K3Iud2lkdGgpLGE9dGhpcy5nZXREYXRhWShyLnkrci5oZWlnaHQpLGw9dGhpcy5nZXREYXRhWShyLnkpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W28sc10seTpbYSxsXX19KX10aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5OT05FJiYodGhpcy5zdGF0ZS5uZXh0KGtyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCkpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNDdXJzb3JJbnNpZGU9ITAsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxsaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsLHRoaXMuaXNDdXJzb3JJbnNpZGU9ITEsdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuc3RhdGUubmV4dChrci5OT05FKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksbGkodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57c3dpdGNoKHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSl7Y2FzZSBrci5TQ1JPTExfWk9PTUlORzp0aGlzLnN0YXRlLm5leHQoa3IuTk9ORSksdGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBrci5OT05FOnRoaXMudXBkYXRlVG9vbHRpcChlKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO2JyZWFrO2Nhc2Uga3IuUEFOTklORzp7bGV0IGk9LWUubW92ZW1lbnRYLHI9LWUubW92ZW1lbnRZLHt3aWR0aDpvLGhlaWdodDpzfT10aGlzLmRvbURpbSxhPXRoaXMuZ2V0RGF0YVgoaSksbD10aGlzLmdldERhdGFYKG8raSksYz10aGlzLmdldERhdGFZKHMrciksdT10aGlzLmdldERhdGFZKHIpO3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6e3g6W2EsbF0seTpbYyx1XX19KTticmVha31jYXNlIGtyLkRSQUdfWk9PTUlORzp7aWYoIXRoaXMuZHJhZ1N0YXJ0Q29vcmQpYnJlYWs7bGV0IGk9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueCxlLm9mZnNldFhdLHI9W3RoaXMuZHJhZ1N0YXJ0Q29vcmQueSxlLm9mZnNldFldO3RoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4Ok1hdGgubWluKC4uLmkpLHdpZHRoOk1hdGgubWF4KC4uLmkpLU1hdGgubWluKC4uLmkpLHk6TWF0aC5taW4oLi4uciksaGVpZ2h0Ok1hdGgubWF4KC4uLnIpLU1hdGgubWluKC4uLnIpfX10aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfX0pLGxpKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJ3aGVlbCIse3Bhc3NpdmU6ITF9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksdmkoZT0+e2xldCBpPSFlLmN0cmxLZXkmJiFlLnNoaWZ0S2V5JiZlLmFsdEtleTtyZXR1cm4gdGhpcy5zaG93Wm9vbUluc3RydWN0aW9uPSFpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksaT8oZS5wcmV2ZW50RGVmYXVsdCgpLGp0KGUpKTp4YSgzZTMpLnBpcGUoTnQoKCk9Pnt0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249ITEsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLEIoKCk9Pm51bGwpKX0pLEhlKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMub25WaWV3RXh0ZW50Q2hhbmdlLmVtaXQoe2RhdGFFeHRlbnQ6amxlKGUsdGhpcy52aWV3RXh0ZW50LHRoaXMuZG9tRGltLC4wMSx0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSl9KSx0aGlzLnN0YXRlLmdldFZhbHVlKCkhPT1rci5TQ1JPTExfWk9PTUlORyYmKHRoaXMuc3RhdGUubmV4dChrci5TQ1JPTExfWk9PTUlORyksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KX1uZ09uQ2hhbmdlcygpe3RoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9c2hvdWxkUGFuKGUpe2xldCBpPWUuc2hpZnRLZXl8fGUuYWx0S2V5O2lmKGUgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KXJldHVybiBpO2xldCByPShlLmJ1dHRvbnMmWWEuTEVGVCk9PT1ZYS5MRUZULG89KGUuYnV0dG9ucyZZYS5NSURETEUpPT09WWEuTUlERExFO3JldHVybiEoIXImJiFvKSYmKG8mJiFyfHxpKX10cmFja0J5U2VyaWVzTmFtZShlLGkpe3JldHVybiBpLmlkfWdldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsV3UodGhpcy5kb21EaW0sIngiKSxlKX1nZXREYXRhWChlKXtyZXR1cm4gdGhpcy54U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueCxXdSh0aGlzLmRvbURpbSwieCIpLGUpfWdldERvbVkoZSl7cmV0dXJuIHRoaXMueVNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LnksV3UodGhpcy5kb21EaW0sInkiKSxlKX1nZXREYXRhWShlKXtyZXR1cm4gdGhpcy55U2NhbGUucmV2ZXJzZSh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfXNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlKXtyZXR1cm4gbnVsbCE9PWUmJiFpc05hTihlLngpJiYhaXNOYU4oZS55KX11cGRhdGVUb29sdGlwKGUpe3RoaXMuY3Vyc29yTG9jYXRpb25JbkRhdGFDb29yZD17eDp0aGlzLmdldERhdGFYKGUub2Zmc2V0WCkseTp0aGlzLmdldERhdGFZKGUub2Zmc2V0WSl9LHRoaXMuY3Vyc29yTG9jYXRpb249e3g6ZS5vZmZzZXRYLHk6ZS5vZmZzZXRZfSx0aGlzLnVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl9b25Ub29sdGlwRGlzcGxheURldGFjaGVkKCl7dGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExfXVwZGF0ZUN1cnNvcmVkRGF0YUFuZFRvb2x0aXBWaXNpYmlsaXR5KCl7bGV0IGU9dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkO2lmKG51bGw9PT1lKXJldHVybiB0aGlzLmN1cnNvcmVkRGF0YT1bXSx2b2lkKHRoaXMudG9vbHRpcERpc3BsYXlBdHRhY2hlZD0hMSk7dGhpcy5jdXJzb3JlZERhdGE9dGhpcy5pc0N1cnNvckluc2lkZT90aGlzLnNlcmllc0RhdGEubWFwKGk9Pih7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTp0aGlzLnNlcmllc01ldGFkYXRhTWFwW2kuaWRdfSkpLmZpbHRlcigoe21ldGFkYXRhOml9KT0+aSYmaS52aXNpYmxlJiYhQm9vbGVhbihpLmF1eCkpLm1hcCgoe3Nlcmllc0RhdHVtOmksbWV0YWRhdGE6cn0pPT57bGV0IG89Sk0oaS5wb2ludHMsZS54KSxzPWkucG9pbnRzW29dO3JldHVybntpZDppLmlkLGNsb3Nlc3RQb2ludEluZGV4Om8sZGF0YVBvaW50OnMsZG9tUG9pbnQ6e3g6dGhpcy5nZXREb21YKHMueCkseTp0aGlzLmdldERvbVkocy55KX0sbWV0YWRhdGE6cn19KS5maWx0ZXIoaT0+aSk6W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPUJvb2xlYW4odGhpcy5jdXJzb3JlZERhdGEubGVuZ3RoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhubiksdyhvbSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChvamUsNyxBZSksbHQoUXAsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuZG90c0NvbnRhaW5lcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5vdmVybGF5PXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJzaG93LXpvb20taW5zdHJ1Y3Rpb24iLGkuc2hvd1pvb21JbnN0cnVjdGlvbil9LGlucHV0czp7c2VyaWVzRGF0YToic2VyaWVzRGF0YSIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix2aWV3RXh0ZW50OiJ2aWV3RXh0ZW50Iix4U2NhbGU6InhTY2FsZSIseVNjYWxlOiJ5U2NhbGUiLGRvbURpbToiZG9tRGltIix0b29sdGlwT3JpZ2luRWw6InRvb2x0aXBPcmlnaW5FbCIsdG9vbHRpcFRlbXBsYXRlOiJ0b29sdGlwVGVtcGxhdGUifSxvdXRwdXRzOntvblZpZXdFeHRlbnRDaGFuZ2U6Im9uVmlld0V4dGVudENoYW5nZSIsb25WaWV3RXh0ZW50UmVzZXQ6Im9uVmlld0V4dGVudFJlc2V0IixvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2U6Im9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6b20sdXNlRmFjdG9yeTptamUsZGVwczpbUWldfV0pLHp0XSxkZWNsczoxMix2YXJzOjE1LGNvbnN0czpbWzEsImRvdHMiXSxbImRvdHMiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJ6b29tLWJveCIsNCwibmdJZiJdLFsxLCJ6b29tLWluc3RydWN0aW9uIl0sWzEsImluc3RydWN0aW9uLWNvbnRlbnQiXSxbImNka092ZXJsYXlPcmlnaW4iLCIiLDEsInRvb2x0aXAtb3JpZ2luIl0sWyJ0b29sdGlwT3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiJdLFsiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsImNka0Nvbm5lY3RlZE92ZXJsYXlMb2NrUG9zaXRpb24iLCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJkZXRhY2giXSxbImRlZmF1bHRUb29sdGlwIiwiIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiciIsIjQiLDQsIm5nSWYiXSxbInIiLCI0Il0sWzEsInpvb20tYm94Il0sWzEsInRvb2x0aXAtY29udGFpbmVyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzEsInRvb2x0aXAtcm93Il0sWzEsInRvb2x0aXAtcm93LWNpcmNsZSJdLFsxLCJuYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoam4oKSxnKDAsInN2ZyIsMCwxKSxFKDIsbGplLDIsMiwibmctY29udGFpbmVyIiwyKSxFKDMsY2plLDEsNCwicmVjdCIsMyksdigpLFNhKCksZyg0LCJkaXYiLDQpKDUsInNwYW4iLDUpLEQoNiwiQWx0ICsgU2Nyb2xsIHRvIFpvb20iKSx2KCkoKSxOKDcsImRpdiIsNiw3KSxFKDksZGplLDIsNiwibmctdGVtcGxhdGUiLDgpLFAoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKX0pLEUoMTAsaGplLDEyLDIsIm5nLXRlbXBsYXRlIixudWxsLDksZW4pKSwyJmUmJihhdCgicGFubmFibGUiLGkuc3BlY2lhbEtleVByZXNzZWQpKCJkcmFnZ2FibGUiLGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FfHxpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuRFJBR19aT09NSU5HKSgicGFubmluZyIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLlBBTk5JTkcpLHgoMiksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkUpLHgoMSksYigibmdJZiIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLkRSQUdfWk9PTUlORykseCg2KSxiKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixpLnRvb2x0aXBPcmlnaW5FbCkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcGVuIixpLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQmJmkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5OT05FKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS50b29sdGlwUG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IixpLnNjcm9sbFN0cmF0ZWd5KSgiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsITEpKCJjZGtDb25uZWN0ZWRPdmVybGF5RmxleGlibGVEaW1lbnNpb25zIiwhMCkoImNka0Nvbm5lY3RlZE92ZXJsYXlHcm93QWZ0ZXJPcGVuIiwhMCkpfSxkZXBlbmRlbmNpZXM6W3luLFhlLE5vLFFwLHNtXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZTt1c2VyLXNlbGVjdDpub25lfS5kb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5kb3RzLmRyYWdnYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmNyb3NzaGFpcn0uZG90cy5wYW5uYWJsZVtfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJ9LmRvdHMucGFubmluZ1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOmdyYWJiaW5nfS50b29sdGlwLXJvdy1jaXJjbGVbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjYpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LnRvb2x0aXAtb3JpZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udG9vbHRpcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuODUpO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7Y29udGFpbjpwYWludCBzdHlsZSBsYXlvdXQ7Zm9udC1zaXplOi45ZW07b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjVweDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCV9dGhbX25nY29udGVudC0lQ09NUCVdLCB0ZFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoycHggNXB4O3RleHQtYWxpZ246bGVmdH10aFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmctYm90dG9tOjVweH0uem9vbS1ib3hbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTouMDM7ZmlsbDojMDAwO3N0cm9rZTojY2NjfS56b29tLWluc3RydWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGVmdDowO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjEwcHg7dHJhbnNpdGlvbjpvcGFjaXR5IC41czt6LWluZGV4OjF9Lmluc3RydWN0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuNik7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjVweCAxMHB4O3VzZXItc2VsZWN0Om5vbmV9LnNob3ctem9vbS1pbnN0cnVjdGlvbltfbmdob3N0LSVDT01QJV0gICAuem9vbS1pbnN0cnVjdGlvbltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gX2plKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImxpbmUiLDIpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO2F0KCJ6ZXJvIiwwPT09ZSksemUoIngxIixpLmdldERvbVgoZSkpKCJ4MiIsaS5nZXREb21YKGUpKSgieTIiLGkuZG9tRGltLmhlaWdodCl9fWZ1bmN0aW9uIHZqZShuLHQpe2lmKDEmbiYmKGpuKCksTigwLCJsaW5lIiwzKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTthdCgiemVybyIsMD09PWUpLHplKCJ5MSIsaS5nZXREb21ZKGUpKSgieDIiLGkuZG9tRGltLndpZHRoKSgieTIiLGkuZ2V0RG9tWShlKSl9fXZhciBXbGU9KCgpPT57Y2xhc3MgbntnZXREb21YKGUpe3JldHVybiB0aGlzLnhTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC54LFd1KHRoaXMuZG9tRGltLCJ4IiksZSl9Z2V0RG9tWShlKXtyZXR1cm4gdGhpcy55U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueSxXdSh0aGlzLmRvbURpbSwieSIpLGUpfWdldFhUaWNrcygpe3JldHVybiB0aGlzLnhTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueCxLTSh0aGlzLmRvbURpbS53aWR0aCx0aGlzLnhHcmlkQ291bnQpKX1nZXRZVGlja3MoKXtyZXR1cm4gdGhpcy55U2NhbGUudGlja3ModGhpcy52aWV3RXh0ZW50LnksS00odGhpcy5kb21EaW0uaGVpZ2h0LHRoaXMueUdyaWRDb3VudCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0LWdyaWQtdmlldyJdXSxpbnB1dHM6e3ZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix4R3JpZENvdW50OiJ4R3JpZENvdW50Iix5U2NhbGU6InlTY2FsZSIseUdyaWRDb3VudDoieUdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0ifSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1sieTEiLCIwIiwzLCJ6ZXJvIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIngxIiwiMCIsMywiemVybyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ5MSIsIjAiXSxbIngxIiwiMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGpuKCksZygwLCJzdmciKSxFKDEsX2plLDEsNSwibGluZSIsMCksRSgyLHZqZSwxLDUsImxpbmUiLDEpLHYoKSksMiZlJiYoeCgxKSxiKCJuZ0Zvck9mIixpLmdldFhUaWNrcygpKSx4KDEpLGIoIm5nRm9yT2YiLGkuZ2V0WVRpY2tzKCkpKX0sZGVwZW5kZW5jaWVzOlt5bl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICBsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2NjYztcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC56ZXJvW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHN0cm9rZTogI2FhYTtcbiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGJqZT1bInNlcmllc1ZpZXciXSx4amU9WyJ4QXhpcyJdLENqZT1bInlBeGlzIl0sd2plPVsiY2hhcnRFbCJdO2Z1bmN0aW9uIE1qZShuLHQpe2lmKDEmbiYmTigwLCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsMTYpLDImbil7bGV0IGU9TSgpO2IoInZpZXdFeHRlbnQiLGUudmlld0JveCkoInhTY2FsZSIsZS54U2NhbGUpKCJ5U2NhbGUiLGUueVNjYWxlKSgieEdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJ5R3JpZENvdW50IixlLllfR1JJRF9DT1VOVCkoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLm1haW4pfX1mdW5jdGlvbiBTamUobix0KXsxJm4mJihqbigpLE4oMCwic3ZnIixudWxsLDE3KSl9ZnVuY3Rpb24gRWplKG4sdCl7MSZuJiZOKDAsImNhbnZhcyIsbnVsbCwxNyl9ZnVuY3Rpb24gVGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFNqZSwyLDAsInN2ZyIsNSksRSgyLEVqZSwyLDAsImNhbnZhcyIsNSksWnQoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJuZ0lmIixlLmdldFJlbmRlcmVyVHlwZSgpPT09ZS5SZW5kZXJlclR5cGUuU1ZHKSx4KDEpLGIoIm5nSWYiLGUuZ2V0UmVuZGVyZXJUeXBlKCk9PT1lLlJlbmRlcmVyVHlwZS5XRUJHTCl9fWZ1bmN0aW9uIERqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsMTgpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkKHIpKX0pKCJvblZpZXdFeHRlbnRSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLnZpZXdCb3hSZXNldCgpKX0pKCJvbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKSxpPXN0KDEpO2IoInNlcmllc0RhdGEiLGUuc2VyaWVzRGF0YSkoInNlcmllc01ldGFkYXRhTWFwIixlLnNlcmllc01ldGFkYXRhTWFwKSgidmlld0V4dGVudCIsZS52aWV3Qm94KSgieFNjYWxlIixlLnhTY2FsZSkoInlTY2FsZSIsZS55U2NhbGUpKCJ0b29sdGlwT3JpZ2luRWwiLGkpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy5tYWluKSgidG9vbHRpcFRlbXBsYXRlIixlLnRvb2x0aXBUZW1wbGF0ZSl9fXZhciBBamU9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aX19O2Z1bmN0aW9uIElqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOSksQWkoMSwyMCksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuY3VzdG9tVmlzVGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbU4oMixBamUsZS54U2NhbGUsZS55U2NhbGUsZS5kb21EaW1lbnNpb25zLm1haW4sZS52aWV3Qm94KSl9fWZ1bmN0aW9uIFBqZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImxpbmUtY2hhcnQtYXhpcyIsMjEpLFAoIm9uVmlld0V4dGVudENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblZpZXdCb3hDaGFuZ2VkRnJvbUF4aXMociwieSIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJheGlzRXh0ZW50IixlLnZpZXdCb3gueSkoImN1c3RvbUZvcm1hdHRlciIsZS5jdXN0b21ZRm9ybWF0dGVyKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMueUF4aXMpKCJncmlkQ291bnQiLGUuWV9HUklEX0NPVU5UKSgic2NhbGUiLGUueVNjYWxlKX19ZnVuY3Rpb24gUmplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibGluZS1jaGFydC1heGlzIiwyMiksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhyLCJ4IikpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImF4aXNFeHRlbnQiLGUudmlld0JveC54KSgiY3VzdG9tRm9ybWF0dGVyIixlLmN1c3RvbVhGb3JtYXR0ZXIpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy54QXhpcykoImdyaWRDb3VudCIsZS5YX0dSSURfQ09VTlQpKCJzY2FsZSIsZS54U2NhbGUpfX1mdW5jdGlvbiBPamUobix0KXsxJm4mJihnKDAsImRpdiIsMjMpLE4oMSwic3BhbiIsMjQpLHYoKSl9dmFyIGtqZT1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybnt4U2NhbGU6bix5U2NhbGU6dCxkb21EaW1lbnNpb246ZSx2aWV3RXh0ZW50OmksaW50ZXJhY3Rpb25TdGF0ZTpyfX07ZnVuY3Rpb24gRmplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDI1LDI2KSxBaSgyLDIwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMiksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixnTigyLGtqZSxlLnhTY2FsZSxlLnlTY2FsZSxlLmRvbURpbWVuc2lvbnMubWFpbixlLnZpZXdCb3gsZS5pbnRlcmFjdGlvblN0YXRlKSl9fXZhciBOamU9ZnVuY3Rpb24obix0KXtyZXR1cm57Y29udGFpbmVyOiEwLCJkYXJrLW1vZGUiOm4sImxpbmUtb25seS1tb2RlIjp0LCJsaW5lLWNoYXJ0IjohMH19LFV6PXt4OlswLDFdLHk6WzAsMV19LHRPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMuUmVuZGVyZXJUeXBlPXJyLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGU9cnIuV0VCR0wsdGhpcy54U2NhbGVUeXBlPVNyLkxJTkVBUix0aGlzLnlTY2FsZVR5cGU9U3IuTElORUFSLHRoaXMubGluZU9ubHk9ITEsdGhpcy52aWV3Qm94Q2hhbmdlZD1uZXcgRyx0aGlzLm9uVmlld0JveE92ZXJyaWRkZW49bmV3IFVoKDEpLHRoaXMuaWdub3JlWU91dGxpZXJzPSExLHRoaXMuWV9HUklEX0NPVU5UPTYsdGhpcy5YX0dSSURfQ09VTlQ9MTAsdGhpcy54U2NhbGU9QWModGhpcy54U2NhbGVUeXBlKSx0aGlzLnlTY2FsZT1BYyh0aGlzLnhTY2FsZVR5cGUpLHRoaXMudmlld0JveD1Veix0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOjAsaGVpZ2h0OjB9LHhBeGlzOnt3aWR0aDowLGhlaWdodDowfSx5QXhpczp7d2lkdGg6MCxoZWlnaHQ6MH19LHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuaW50ZXJhY3Rpb25TdGF0ZT1rci5OT05FLHRoaXMubGluZUNoYXJ0PW51bGwsdGhpcy5pc0RhdGFVcGRhdGVkPSExLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnNjYWxlVXBkYXRlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITF9bmdPbkluaXQoKXt0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dCh0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4pfW5nT25DaGFuZ2VzKGUpe2UueFNjYWxlVHlwZSYmKHRoaXMueFNjYWxlPUFjKHRoaXMueFNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUueVNjYWxlVHlwZSYmKHRoaXMueVNjYWxlPUFjKHRoaXMueVNjYWxlVHlwZSksdGhpcy5zY2FsZVVwZGF0ZWQ9ITApLGUuc2VyaWVzRGF0YSYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMCksZS5maXhlZFZpZXdCb3gmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMCksZS5zZXJpZXNNZXRhZGF0YU1hcCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITApLGUudXNlRGFya01vZGUmJih0aGlzLnVzZURhcmtNb2RlVXBkYXRlZD0hMCksdGhpcy5zY2FsZVVwZGF0ZWQmJnRoaXMuc2V0SXNWaWV3Qm94T3ZlcnJpZGRlbighMSksdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPXRoaXMuaXNWaWV3Qm94Q2hhbmdlZHx8dGhpcy5zY2FsZVVwZGF0ZWR8fCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuc2hvdWxkVXBkYXRlRGVmYXVsdFZpZXdCb3goZSksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMudXBkYXRlTGluZUNoYXJ0KCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9cmVjb3ZlclJlbmRlcmVySWZOZWVkZWQoKXshdGhpcy5pc1JlbmRlcmluZ0NvbnRleHRMb3N0fHx0aGlzLmRpc2FibGVVcGRhdGV8fCh0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudD0hMCx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRpYWxpemVDaGFydCgpLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITAsdGhpcy5pc0RhdGFVcGRhdGVkPSEwLHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwLHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITEpfW9uVmlld1Jlc2l6ZSgpeyF0aGlzLmxpbmVDaGFydHx8KHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSx0aGlzLmxpbmVDaGFydC5yZXNpemUodGhpcy5kb21EaW1lbnNpb25zLm1haW4pLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX1zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKXtpZihlLnhTY2FsZVR5cGV8fGUueVNjYWxlVHlwZXx8ZS5pZ25vcmVZT3V0bGllcnN8fGUuc2VyaWVzRGF0YSlyZXR1cm4hMDtsZXQgcj1lLnNlcmllc01ldGFkYXRhTWFwO2lmKHIpe2xldCBvPXIucHJldmlvdXNWYWx1ZTtpZihPYmplY3Qua2V5cyh0aGlzLnNlcmllc01ldGFkYXRhTWFwKS5sZW5ndGghPT1PYmplY3Qua2V5cyhvPz97fSkubGVuZ3RoKXJldHVybiEwO2ZvcihsZXRbcyxhXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKXtsZXQgbD1vJiZvW3NdO2lmKCFsfHxhLnZpc2libGUhPT1sLnZpc2libGUpcmV0dXJuITB9fXJldHVybiExfW9uQ29udGV4dExvc3QoKXt0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3Q9ITAsdGhpcy5saW5lQ2hhcnQmJih0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCksdGhpcy5saW5lQ2hhcnQ9bnVsbCl9dHJpZ2dlckNvbnRleHRMb3N0Rm9yVGVzdCgpe3RoaXMub25Db250ZXh0TG9zdCgpfWdldExpbmVDaGFydEZvclRlc3QoKXtyZXR1cm4gdGhpcy5saW5lQ2hhcnR9aW5pdGlhbGl6ZUNoYXJ0KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKTtsZXQgZT10aGlzLmdldFJlbmRlcmVyVHlwZSgpLGk9e29uRHJhd0VuZDooKT0+e30sb25Db250ZXh0TG9zdDp0aGlzLm9uQ29udGV4dExvc3QuYmluZCh0aGlzKX0scj1udWxsO3N3aXRjaCh0aGlzLnJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCksZSl7Y2FzZSByci5TVkc6cj17dHlwZTpyci5TVkcsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGNhbGxiYWNrczppLGRvbURpbWVuc2lvbjp0aGlzLmRvbURpbWVuc2lvbnMubWFpbix1c2VEYXJrTW9kZTp0aGlzLnVzZURhcmtNb2RlfTticmVhaztjYXNlIHJyLldFQkdMOnI9e3R5cGU6cnIuV0VCR0wsY29udGFpbmVyOnRoaXMuY2hhcnRFbC5uYXRpdmVFbGVtZW50LGRldmljZVBpeGVsUmF0aW86d2luZG93LmRldmljZVBpeGVsUmF0aW8sY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGA8bGluZS1jaGFydD4gZG9lcyBub3QgeWV0IHN1cHBvcnQgcmVuZGVyZXJUeXBlOiAke2V9YCl9bGV0IHM9ZSE9PXJyLlNWRyYmSWNfaXNXZWJHbDJPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKT9yZzpKMjt0aGlzLmxpbmVDaGFydD1uZXcgcyhyKX1uZ09uRGVzdHJveSgpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC5kaXNwb3NlKCl9Z2V0UmVuZGVyZXJUeXBlKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIHJyLlNWRzpyZXR1cm4gcnIuU1ZHO2Nhc2UgcnIuV0VCR0w6cmV0dXJuIEljX2lzV2ViR2wyU3VwcG9ydGVkKCk/cnIuV0VCR0w6cnIuU1ZHO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlbmRlcmVyVHlwZTogJHtufWApfX0odGhpcy5wcmVmZXJyZWRSZW5kZXJlclR5cGUpfXJlYWRBbmRVcGRhdGVEb21EaW1lbnNpb25zKCl7dGhpcy5kb21EaW1lbnNpb25zPXttYWluOnt3aWR0aDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy5zZXJpZXNWaWV3Lm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx4QXhpczp7d2lkdGg6dGhpcy54QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fSx5QXhpczp7d2lkdGg6dGhpcy55QXhpcy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0fX19dXBkYXRlTGluZUNoYXJ0KCl7aWYodGhpcy5yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpLHRoaXMubGluZUNoYXJ0JiYhdGhpcy5kaXNhYmxlVXBkYXRlKXtpZih0aGlzLnNjYWxlVXBkYXRlZCYmKHRoaXMuc2NhbGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFhTY2FsZVR5cGUodGhpcy54U2NhbGVUeXBlKSx0aGlzLmxpbmVDaGFydC5zZXRZU2NhbGVUeXBlKHRoaXMueVNjYWxlVHlwZSkpLHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQmJih0aGlzLmlzTWV0YWRhdGFVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldE1ldGFkYXRhKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApKSx0aGlzLmlzRGF0YVVwZGF0ZWQmJih0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0RGF0YSh0aGlzLnNlcmllc0RhdGEpKSx0aGlzLnVzZURhcmtNb2RlVXBkYXRlZCYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSExLHRoaXMubGluZUNoYXJ0LnNldFVzZURhcmtNb2RlKHRoaXMudXNlRGFya01vZGUpKSwhdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmZpeGVkVmlld0JveCl0aGlzLnZpZXdCb3g9dGhpcy5maXhlZFZpZXdCb3g7ZWxzZSBpZighdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuJiZ0aGlzLmlzVmlld0JveENoYW5nZWQpe2xldCBpPWZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89bnVsbCxzPW51bGwsYT1bXTtmb3IobGV0e2lkOmQscG9pbnRzOnB9b2Ygbil7bGV0IGg9dFtkXTtpZihoJiYhaC5hdXgmJmgudmlzaWJsZSlmb3IobGV0IGY9MDtmPHAubGVuZ3RoO2YrKyl7bGV0e3g6bSx5OkN9PXBbZl07aShtKSYmKG89bnVsbD09PW98fG08bz9tOm8scz1udWxsPT09c3x8bT5zP206cykscihDKSYmYS5wdXNoKEMpfX1hLnNvcnQoUmwpO2xldCBjPWFbMF0sdT1hW2EubGVuZ3RoLTFdO3JldHVybiBlJiZhLmxlbmd0aD4yJiYoYz1hW01hdGguY2VpbCguMDUqKGEubGVuZ3RoLTEpKV0sdT1hW01hdGguZmxvb3IoLjk1KihhLmxlbmd0aC0xKSldKSx7eDpudWxsIT09byYmbnVsbCE9PXM/W28sc106dm9pZCAwLHk6dm9pZCAwIT09YyYmdm9pZCAwIT09dT9bYyx1XTp2b2lkIDB9fSh0aGlzLnNlcmllc0RhdGEsdGhpcy5zZXJpZXNNZXRhZGF0YU1hcCx0aGlzLmlnbm9yZVlPdXRsaWVycyx0aGlzLnhTY2FsZS5pc1NhZmVOdW1iZXIsdGhpcy55U2NhbGUuaXNTYWZlTnVtYmVyKTt0aGlzLnZpZXdCb3g9e3g6dGhpcy54U2NhbGUubmljZURvbWFpbihpLng/P1V6LngpLHk6dGhpcy55U2NhbGUubmljZURvbWFpbihpLnk/P1V6LnkpfX0odGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWR8fHRoaXMuaXNWaWV3Qm94Q2hhbmdlZCkmJih0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0Vmlld0JveCh0aGlzLnZpZXdCb3gpLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpKX19b25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDplfSl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCEwKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy52aWV3Qm94PWUsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQoZSl9dmlld0JveFJlc2V0KCl7dGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9ITAsdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLnZpZXdCb3hDaGFuZ2VkLmVtaXQodGhpcy52aWV3Qm94KX1zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKGUpe2xldCBpPXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbjt0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ZSxpIT09ZSYmdGhpcy5vblZpZXdCb3hPdmVycmlkZGVuLm5leHQoZSl9b25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlKGUpe3RoaXMuaW50ZXJhY3Rpb25TdGF0ZT1lfWdldElzVmlld0JveE92ZXJyaWRkZW4oKXtyZXR1cm4gdGhpcy5vblZpZXdCb3hPdmVycmlkZGVufW9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhlLGkpe2xldCByPXsuLi50aGlzLnZpZXdCb3gsW2ldOmV9O3RoaXMub25WaWV3Qm94Q2hhbmdlZCh7ZGF0YUV4dGVudDpyfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJsaW5lLWNoYXJ0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KGJqZSw3LEFlKSxsdCh4amUsNyxBZSksbHQoQ2plLDcsQWUpLGx0KHdqZSw1LEFlKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zZXJpZXNWaWV3PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNoYXJ0RWw9ci5maXJzdCl9fSxpbnB1dHM6e2N1c3RvbVZpc1RlbXBsYXRlOiJjdXN0b21WaXNUZW1wbGF0ZSIsY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGU6ImN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLHByZWZlcnJlZFJlbmRlcmVyVHlwZToicHJlZmVycmVkUmVuZGVyZXJUeXBlIixzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixmaXhlZFZpZXdCb3g6ImZpeGVkVmlld0JveCIsc2VyaWVzTWV0YWRhdGFNYXA6InNlcmllc01ldGFkYXRhTWFwIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix5U2NhbGVUeXBlOiJ5U2NhbGVUeXBlIixjdXN0b21YRm9ybWF0dGVyOiJjdXN0b21YRm9ybWF0dGVyIixjdXN0b21ZRm9ybWF0dGVyOiJjdXN0b21ZRm9ybWF0dGVyIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSIsbGluZU9ubHk6ImxpbmVPbmx5IixkaXNhYmxlVXBkYXRlOiJkaXNhYmxlVXBkYXRlIixpZ25vcmVZT3V0bGllcnM6Imlnbm9yZVlPdXRsaWVycyJ9LG91dHB1dHM6e3ZpZXdCb3hDaGFuZ2VkOiJ2aWV3Qm94Q2hhbmdlZCJ9LGZlYXR1cmVzOlt6dF0sZGVjbHM6MTYsdmFyczoxMyxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMywibmdDbGFzcyIsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbIm92ZXJsYXlUYXJnZXQiLCJjZGtPdmVybGF5T3JpZ2luIl0sWzEsInNlcmllcy12aWV3Il0sWyJzZXJpZXNWaWV3IiwiIl0sWzMsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ4R3JpZENvdW50IiwieUdyaWRDb3VudCIsImRvbURpbSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIiw0LCJuZ0lmIl0sWzEsInktYXhpcyJdLFsieUF4aXMiLCIiXSxbImF4aXMiLCJ5IiwzLCJheGlzRXh0ZW50IiwiY3VzdG9tRm9ybWF0dGVyIiwiZG9tRGltIiwiZ3JpZENvdW50Iiwic2NhbGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLDQsIm5nSWYiXSxbMSwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkb3QiLDQsIm5nSWYiXSxbImNsYXNzIiwiY3VzdG9tLXZpcyBjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiLDQsIm5nSWYiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIl0sWyJjaGFydEVsIiwiIl0sWzMsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInZpZXdFeHRlbnQiLCJ4U2NhbGUiLCJ5U2NhbGUiLCJ0b29sdGlwT3JpZ2luRWwiLCJkb21EaW0iLCJ0b29sdGlwVGVtcGxhdGUiLCJvblZpZXdFeHRlbnRDaGFuZ2UiLCJvblZpZXdFeHRlbnRSZXNldCIsIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSJdLFsxLCJjdXN0b20tdmlzIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsiYXhpcyIsIngiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSJdLFsxLCJkb3QiXSxbMSwicmVjdCJdLFsxLCJjdXN0b20tdmlzIiwiY3VzdG9tLWNoYXJ0LW92ZXJsYXktdmlzIl0sWyJjdXN0b21DaGFydE92ZXJsYXkiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblZpZXdSZXNpemUoKX0pLGcoMiwiZGl2IiwyLDMpLEUoNCxNamUsMSw2LCJsaW5lLWNoYXJ0LWdyaWQtdmlldyIsNCksRSg1LFRqZSwzLDIsIm5nLWNvbnRhaW5lciIsNSksRSg2LERqZSwxLDgsImxpbmUtY2hhcnQtaW50ZXJhY3RpdmUtdmlldyIsNiksRSg3LElqZSwyLDcsImRpdiIsNyksdigpLGcoOCwiZGl2Iiw4LDkpLEUoMTAsUGplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMCksdigpLGcoMTEsImRpdiIsMTEsMTIpLEUoMTMsUmplLDEsNSwibGluZS1jaGFydC1heGlzIiwxMyksdigpLEUoMTQsT2plLDIsMCwiZGl2IiwxNCksRSgxNSxGamUsMyw4LCJkaXYiLDE1KSx2KCkpLDImZSYmKGIoIm5nQ2xhc3MiLHRvKDEwLE5qZSxpLnVzZURhcmtNb2RlLGkubGluZU9ubHkpKSgicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLDApLHgoNCksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQpLHgoMSksYigibmdJZiIsIWkubGluZU9ubHkpLHgoMSksYigibmdJZiIsaS5jdXN0b21WaXNUZW1wbGF0ZSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgzKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIiwhaS5saW5lT25seSkseCgxKSxiKCJuZ0lmIixpLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbUG4sWGUsTm8sc20semxlLEdsZSxXbGUsX21dLHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV17Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1bX25naG9zdC0lQ09NUCVdICAgICAubGluZS1jaGFydDpoYXMoLmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYTpob3ZlcikgLngtYXhpcyAuZXh0ZW50LWVkaXQtYnV0dG9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bX25naG9zdC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtmbGV4LWdyb3c6MTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiICIuIGN1c3RvbUNoYXJ0T3ZlcmxheSI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjUwcHggMWZyO2dyaWQtYXV0by1yb3dzOjFmciAzMHB4IDBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uY29udGFpbmVyLmxpbmUtb25seS1tb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDB9LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2VyaWVzO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWdyaWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzO3Bvc2l0aW9uOnJlbGF0aXZlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9LmN1c3RvbS1jaGFydC1vdmVybGF5LXZpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmN1c3RvbUNoYXJ0T3ZlcmxheTtncmlkLXJvdy1lbmQ6MjtncmlkLXJvdy1zdGFydDoxfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gQmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMCksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gVmplKG4sdCl7aWYoMSZuJiZOKDAsIm1hdC1pY29uIiwxMSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKTtiKCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gSGplKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwidGgiLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5oZWFkZXJDbGlja2VkKHIudHlwZSkpfSksZygxLCJkaXYiLDUpLFAoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCkuJGltcGxpY2l0O3JldHVybiBvZShNKCkuZHJhZ1N0YXJ0KHIpKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLmRyYWdFbmQoKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS5kcmFnRW50ZXIocikpfSksTigyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsNiksZygzLCJkaXYiLDcpLEUoNCxCamUsMSwxLCJtYXQtaWNvbiIsOCksRSg1LFZqZSwxLDEsIm1hdC1pY29uIiw5KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoImRyYWdnYWJsZSIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoIm5nQ2xhc3MiLGkuZ2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZS50eXBlKSkseCgxKSxiKCJoZWFkZXIiLGUpLHgoMiksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS50eXBlIT09aS5zb3J0aW5nSW5mby5oZWFkZXIpLHgoMSksYigibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkRFU0NFTkRJTkcmJmUudHlwZT09PWkuc29ydGluZ0luZm8uaGVhZGVyKX19ZnVuY3Rpb24gVWplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEhqZSw2LDUsInRoIiwzKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO3goMSksYigibmdJZiIsaS5zaG93Q29sdW1uKGUpKX19ZnVuY3Rpb24gemplKG4sdCl7MSZuJiZBaSgwKX12YXIgcWxlPWZ1bmN0aW9uKG4pe3JldHVybnskaW1wbGljaXQ6bn19O2Z1bmN0aW9uIGpqZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxOCksRSgxLHpqZSwxLDAsIm5nLWNvbnRhaW5lciIsMTkpLEQoMiksdigpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0LGk9TSgpLiRpbXBsaWNpdCxyPU0oKSxvPXN0KDkpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsbykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixIbigzLHFsZSxpLlZBTFVFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gR2plKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBXamUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTgpLEUoMSxHamUsMSwwLCJuZy1jb250YWluZXIiLDE5KSxEKDIpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCksbz1zdCg5KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMyxxbGUsaS5QRVJDRU5UQUdFX0NIQU5HRSkpLHgoMSkscWUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gcWplKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDIwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpLiRpbXBsaWNpdCxpPU0oKS4kaW1wbGljaXQscj1NKCk7eCgxKSxxZSgiICIsci5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKGUudHlwZSxpKSwiICIpfX1mdW5jdGlvbiBZamUobix0KXtpZigxJm4mJihnKDAsInRkIiwxNSksRSgxLGpqZSwzLDUsImRpdiIsMTYpLEUoMixXamUsMyw1LCJkaXYiLDE2KSxFKDMscWplLDIsMSwiZGl2IiwxNyksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO2IoIm5nU3dpdGNoIixlLnR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlcnMuVkFMVUVfQ0hBTkdFKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJzLlBFUkNFTlRBR0VfQ0hBTkdFKX19ZnVuY3Rpb24gWGplKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFlqZSw0LDMsInRkIiwxNCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxiKCJuZ0lmIixpLnNob3dDb2x1bW4oZSkpfX1mdW5jdGlvbiBRamUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsInRyIiwxMikoMiwidGQiLDEzKSxOKDMsInNwYW4iKSx2KCksRSg0LFhqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKCk7eCgzKSxPdCgiYmFja2dyb3VuZC1jb2xvciIsZS5DT0xPUikseCgxKSxiKCJuZ0Zvck9mIixpLmhlYWRlcnMpfX1mdW5jdGlvbiBLamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDIzKX1mdW5jdGlvbiBaamUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDI0KX1mdW5jdGlvbiBKamUobix0KXtpZigxJm4mJihFKDAsS2plLDEsMCwibWF0LWljb24iLDIxKSxFKDEsWmplLDEsMCwibWF0LWljb24iLDIyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ0lmIixlPj0wKSx4KDEpLGIoIm5nSWYiLGU8MCl9fXZhciBXZD0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KFdkfHwoV2Q9e30pKSxXZCkpKCkseno9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSxZbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRyx0aGlzLkNvbHVtbkhlYWRlcnM9bXQsdGhpcy5Tb3J0aW5nT3JkZXI9cWEsdGhpcy5TaWRlPVdkLHRoaXMuaGlnaGxpZ2h0U2lkZT1XZC5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIix6eil9Z2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLGkpe3N3aXRjaChlKXtjYXNlIG10LlJVTjpyZXR1cm4gdm9pZCAwPT09aS5SVU4/IiI6aS5SVU47Y2FzZSBtdC5WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLlZBTFVFKTtjYXNlIG10LlNURVA6cmV0dXJuIHZvaWQgMD09PWkuU1RFUD8iIjp2cy5mb3JtYXRTaG9ydChpLlNURVApO2Nhc2UgbXQuVElNRTpyZXR1cm4gdm9pZCAwPT09aS5USU1FPyIiOm5ldyBEYXRlKGkuVElNRSkudG9JU09TdHJpbmcoKTtjYXNlIG10LlJFTEFUSVZFX1RJTUU6cmV0dXJuIHZvaWQgMD09PWkuUkVMQVRJVkVfVElNRT8iIjppTS5mb3JtYXRSZWFkYWJsZShpLlJFTEFUSVZFX1RJTUUpO2Nhc2UgbXQuU01PT1RIRUQ6cmV0dXJuIHZvaWQgMD09PWkuU01PT1RIRUQ/IiI6dnMuZm9ybWF0U2hvcnQoaS5TTU9PVEhFRCk7Y2FzZSBtdC5WQUxVRV9DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuVkFMVUVfQ0hBTkdFPyIiOnZzLmZvcm1hdFNob3J0KE1hdGguYWJzKGkuVkFMVUVfQ0hBTkdFKSk7Y2FzZSBtdC5TVEFSVF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLlNUQVJUX1NURVA/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9TVEVQKTtjYXNlIG10LkVORF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLkVORF9TVEVQPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1NURVApO2Nhc2UgbXQuU1RBUlRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuU1RBUlRfVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEFSVF9WQUxVRSk7Y2FzZSBtdC5FTkRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuRU5EX1ZBTFVFPyIiOnZzLmZvcm1hdFNob3J0KGkuRU5EX1ZBTFVFKTtjYXNlIG10Lk1JTl9WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5NSU5fVkFMVUU/IiI6dnMuZm9ybWF0U2hvcnQoaS5NSU5fVkFMVUUpO2Nhc2UgbXQuTUFYX1ZBTFVFOnJldHVybiB2b2lkIDA9PT1pLk1BWF9WQUxVRT8iIjp2cy5mb3JtYXRTaG9ydChpLk1BWF9WQUxVRSk7Y2FzZSBtdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4gdm9pZCAwPT09aS5QRVJDRU5UQUdFX0NIQU5HRT8iIjpNYXRoLnJvdW5kKDEwMCppLlBFUkNFTlRBR0VfQ0hBTkdFKS50b1N0cmluZygpKyIlIjtjYXNlIG10LlNURVBfQVRfTUFYOnJldHVybiB2b2lkIDA9PT1pLlNURVBfQVRfTUFYPyIiOnZzLmZvcm1hdFNob3J0KGkuU1RFUF9BVF9NQVgpO2Nhc2UgbXQuU1RFUF9BVF9NSU46cmV0dXJuIHZvaWQgMD09PWkuU1RFUF9BVF9NSU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5TVEVQX0FUX01JTik7Y2FzZSBtdC5NRUFOOnJldHVybiB2b2lkIDA9PT1pLk1FQU4/IiI6dnMuZm9ybWF0U2hvcnQoaS5NRUFOKTtjYXNlIG10LlJBV19DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuUkFXX0NIQU5HRT8iIjp6bS5mb3JtYXRTaG9ydChNYXRoLmFicyhpLlJBV19DSEFOR0UpKTtkZWZhdWx0OnJldHVybiIifX1oZWFkZXJDbGlja2VkKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8uaGVhZGVyIT09ZXx8dGhpcy5zb3J0aW5nSW5mby5vcmRlciE9PXFhLkFTQ0VORElORz97aGVhZGVyOmUsb3JkZXI6cWEuQVNDRU5ESU5HfTp7aGVhZGVyOmUsb3JkZXI6cWEuREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHp6KX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZSh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsenopKX1kcmFnRW50ZXIoZSl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwodGhpcy5oaWdobGlnaHRTaWRlPXRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhUeXBlKGUudHlwZSk8dGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUpP1dkLkxFRlQ6V2QuUklHSFQsdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGU9ZS50eXBlKX1tb3ZlSGVhZGVyKGUsaSl7bGV0IHI9Wy4uLnRoaXMuaGVhZGVyc107cmV0dXJuIHIuc3BsaWNlKGUsMSksci5zcGxpY2UoaSwwLHRoaXMuaGVhZGVyc1tlXSkscn1nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShlKXtyZXR1cm4gZSE9PXRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlP3t9OntoaWdobGlnaHQ6ITAsImhpZ2hsaWdodC1ib3JkZXItcmlnaHQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLlJJR0hULCJoaWdobGlnaHQtYm9yZGVyLWxlZnQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVdkLkxFRlR9fXNob3dDb2x1bW4oZSl7cmV0dXJuIGUuZW5hYmxlZCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8ZS50eXBlIT09bXQuU01PT1RIRUQpfWdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZShlKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmZpbmRJbmRleChpPT5lPT09aS50eXBlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMifSxkZWNsczoxMCx2YXJzOjIsY29uc3RzOltbMSwiZGF0YS10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFycm93IiwiIl0sWzMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImNlbGwiLDMsImRyYWdnYWJsZSIsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImhlYWRlciJdLFsxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWzEsInJvdyJdLFsxLCJyb3ctY2lyY2xlIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsxLCJjZWxsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjZWxsIiwiZXh0cmEtcmlnaHQtcGFkZGluZyJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Iiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IikoMSwidGFibGUiLDApKDIsInRoZWFkIikoMywidHIiKSxOKDQsInRoIiksRSg1LFVqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpKCksZyg2LCJ0Ym9keSIpLEUoNyxRamUsNSwzLCJuZy1jb250YWluZXIiLDEpLHYoKSgpKCksRSg4LEpqZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsZW4pKSwyJmUmJih4KDUpLGIoIm5nRm9yT2YiLGkuaGVhZGVycykseCgyKSxiKCJuZ0Zvck9mIixpLmRhdGEpKX0sZGVwZW5kZW5jaWVzOltQbix5bixYZSxObyxocixJcixDcCxabixCUF0sc3R5bGVzOlsiLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweDt3aWR0aDoxMDAlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246c3RpY2t5O3RleHQtYWxpZ246bGVmdDt0b3A6MDt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnJvd1tfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4fS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbFtfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc29ydGluZy1pY29uLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTJweDtoZWlnaHQ6MTJweDtib3JkZXItcmFkaXVzOjVweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc2hvd1tfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eToxfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgLnNob3ctb24taG92ZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjN9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWVlfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHQtYm9yZGVyLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZjk4MDB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmhpZ2hsaWdodC1ib3JkZXItbGVmdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmZjk4MDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxRbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHfWdldE1pblBvaW50SW5SYW5nZShlLGkscil7bGV0IG89ZVtpXS55LHM9ZVtpXTtmb3IobGV0IGE9aTthPD1yO2ErKylvPmVbYV0ueSYmKG89ZVthXS55LHM9ZVthXSk7cmV0dXJuIHN9Z2V0TWF4UG9pbnRJblJhbmdlKGUsaSxyKXtsZXQgbz1lW2ldLnkscz1lW2ldO2ZvcihsZXQgYT1pO2E8PXI7YSsrKW88ZVthXS55JiYobz1lW2FdLnkscz1lW2FdKTtyZXR1cm4gc31nZXRNZWFuKGUsaSxyKXtsZXQgbz0wO2ZvcihsZXQgcz1pO3M8PXI7cysrKW8rPWVbc10udmFsdWU7cmV0dXJuIG8vKHItaSsxKX1nZXRUaW1lU2VsZWN0aW9uVGFibGVEYXRhKCl7aWYoIXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbilyZXR1cm5bXTtsZXQgZT10aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxpPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAscj10aGlzLmRhdGFTZXJpZXMuZmlsdGVyKG89PkJEKG8sdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubWFwKG89PntsZXQgcz10aGlzLmNoYXJ0TWV0YWRhdGFNYXBbby5pZF0sYT1KTShvLnBvaW50cyxlKSxsPW8ucG9pbnRzW2FdLGM9bnVsbCx1PW51bGw7bnVsbCE9aSYmKHU9Sk0oby5wb2ludHMsaSksYz1vLnBvaW50c1t1XSk7bGV0IGQ9e2lkOm8uaWR9O2QuQ09MT1I9cy5jb2xvcjtmb3IobGV0IHAgb2YgdGhpcy5jb2x1bW5IZWFkZXJzKXN3aXRjaChwLnR5cGUpe2Nhc2UgbXQuUlVOOmxldCBoPSIiO3MuYWxpYXMmJihoPWAke3MuYWxpYXMuYWxpYXNOdW1iZXJ9ICR7cy5hbGlhcy5hbGlhc1RleHR9L2ApLGQuUlVOPWAke2h9JHtzLmRpc3BsYXlOYW1lfWA7Y29udGludWU7Y2FzZSBtdC5TVEVQOmQuU1RFUD1sLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5WQUxVRTpkLlZBTFVFPWwudmFsdWU7Y29udGludWU7Y2FzZSBtdC5SRUxBVElWRV9USU1FOmQuUkVMQVRJVkVfVElNRT1sLnJlbGF0aXZlVGltZUluTXM7Y29udGludWU7Y2FzZSBtdC5TTU9PVEhFRDpkLlNNT09USEVEPWwueTtjb250aW51ZTtjYXNlIG10LlZBTFVFX0NIQU5HRTppZighYyljb250aW51ZTtkLlZBTFVFX0NIQU5HRT1jLnktbC55O2NvbnRpbnVlO2Nhc2UgbXQuU1RBUlRfU1RFUDpkLlNUQVJUX1NURVA9bC5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuRU5EX1NURVA6aWYoIWMpY29udGludWU7ZC5FTkRfU1RFUD1jLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5TVEFSVF9WQUxVRTpkLlNUQVJUX1ZBTFVFPWwueTtjb250aW51ZTtjYXNlIG10LkVORF9WQUxVRTppZighYyljb250aW51ZTtkLkVORF9WQUxVRT1jLnk7Y29udGludWU7Y2FzZSBtdC5NSU5fVkFMVUU6aWYoIXUpY29udGludWU7ZC5NSU5fVkFMVUU9dGhpcy5nZXRNaW5Qb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS55O2NvbnRpbnVlO2Nhc2UgbXQuTUFYX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO2QuTUFYX1ZBTFVFPXRoaXMuZ2V0TWF4UG9pbnRJblJhbmdlKG8ucG9pbnRzLGEsdSkueTtjb250aW51ZTtjYXNlIG10LlBFUkNFTlRBR0VfQ0hBTkdFOmlmKCFjKWNvbnRpbnVlO2QuUEVSQ0VOVEFHRV9DSEFOR0U9KGMueS1sLnkpL2wueTtjb250aW51ZTtjYXNlIG10LlNURVBfQVRfTUFYOmlmKCF1KWNvbnRpbnVlO2QuU1RFUF9BVF9NQVg9dGhpcy5nZXRNYXhQb2ludEluUmFuZ2Uoby5wb2ludHMsYSx1KS5zdGVwO2NvbnRpbnVlO2Nhc2UgbXQuU1RFUF9BVF9NSU46aWYoIXUpY29udGludWU7ZC5TVEVQX0FUX01JTj10aGlzLmdldE1pblBvaW50SW5SYW5nZShvLnBvaW50cyxhLHUpLnN0ZXA7Y29udGludWU7Y2FzZSBtdC5NRUFOOmlmKCF1KWNvbnRpbnVlO2QuTUVBTj10aGlzLmdldE1lYW4oby5wb2ludHMsYSx1KTtjb250aW51ZTtjYXNlIG10LlJBV19DSEFOR0U6aWYoIWMpY29udGludWU7ZC5SQVdfQ0hBTkdFPWMudmFsdWUtbC52YWx1ZTtjb250aW51ZTtkZWZhdWx0OmNvbnRpbnVlfXJldHVybiBkfSk7cmV0dXJuIHIuc29ydCgobyxzKT0+e2xldCBhPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShvLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKSxsPXRoaXMuZ2V0U29ydGFibGVWYWx1ZShzLHRoaXMuc29ydGluZ0luZm8uaGVhZGVyKTtyZXR1cm4gYTxsP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT1xYS5BU0NFTkRJTkc/LTE6MTphPmw/dGhpcy5zb3J0aW5nSW5mby5vcmRlcj09PXFhLkFTQ0VORElORz8xOi0xOjB9KSxyfWdldFNvcnRhYmxlVmFsdWUoZSxpKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIE51bWJlci5pc05hTihuKXx8Ik5hTiI9PT1ufHxudWxsPT1uPy0xLzA6bn0oaT09PW10LlJVTj90aGlzLmNoYXJ0TWV0YWRhdGFNYXBbZS5pZF0uZGlzcGxheU5hbWU6ZVtpXSl9b3JkZXJDb2x1bW5zKGUpe3RoaXMuZWRpdENvbHVtbkhlYWRlcnMuZW1pdCh7aGVhZGVyczplLGRhdGFUYWJsZU1vZGU6dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9fby5SQU5HRTpfby5TSU5HTEV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sic2NhbGFyLWNhcmQtZGF0YS10YWJsZSJdXSxpbnB1dHM6e2NoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGRhdGFTZXJpZXM6ImRhdGFTZXJpZXMiLHN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb246InN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGNvbHVtbkhlYWRlcnM6ImNvbHVtbkhlYWRlcnMiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsZWRpdENvbHVtbkhlYWRlcnM6ImVkaXRDb2x1bW5IZWFkZXJzIn0sZGVjbHM6MSx2YXJzOjUsY29uc3RzOltbMywiaGVhZGVycyIsImRhdGEiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsInRiLWRhdGEtdGFibGUiLDApLFAoInNvcnREYXRhQnkiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNvcnREYXRhQnkuZW1pdChvKX0pKCJvcmRlckNvbHVtbnMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9yZGVyQ29sdW1ucyhvKX0pLHYoKSksMiZlJiZiKCJoZWFkZXJzIixpLmNvbHVtbkhlYWRlcnMpKCJkYXRhIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixpLnNtb290aGluZ0VuYWJsZWQpfSxkZXBlbmRlbmNpZXM6W1lsZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7dmFyIHRHZT1bInN0ZXBTcGFuIl07ZnVuY3Rpb24gbkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDUpLHYoKX19ZnVuY3Rpb24gaUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE4oMSwibWF0LWljb24iLDYpLHYoKX19dmFyIHJHZT1mdW5jdGlvbihuLHQpe3JldHVybntmb2I6ITAsdW5yZW1vdmFibGU6bixwcm9zcGVjdGl2ZTp0fX0sS2xlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsbG93UmVtb3ZhbD0hMCx0aGlzLmlzUHJvc3BlY3RpdmU9ITEsdGhpcy5zdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmZvYlJlbW92ZWQ9bmV3IEd9bmdPbkNoYW5nZXMoZSl7ZS5zdGVwJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50JiZ0aGlzLnN0ZXBTcGFuLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXZhbGlkYXRlU3RlcChlKXtsZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpOygiICI9PT1lLmtleXx8aXNOYU4oTnVtYmVyKGkpKSkmJmUucHJldmVudERlZmF1bHQoKX1zdGVwVHlwZWQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPWUudGFyZ2V0LmlubmVyVGV4dDt0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoIiIhPT1pP051bWJlcihpKTpudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh0R2UsNyxBZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGVwU3Bhbj1yLmZpcnN0KX19LGlucHV0czp7c3RlcDoic3RlcCIsYWxsb3dSZW1vdmFsOiJhbGxvd1JlbW92YWwiLGlzUHJvc3BlY3RpdmU6ImlzUHJvc3BlY3RpdmUifSxvdXRwdXRzOntzdGVwQ2hhbmdlZDoic3RlcENoYW5nZWQiLGZvYlJlbW92ZWQ6ImZvYlJlbW92ZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjUsdmFyczo3LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbImNvbnRlbnRlZGl0YWJsZSIsIiIsInJvbGUiLCJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCIsIkVkaXQgc3RlcCIsMywiaW5uZXJIVE1MIiwiYmx1ciIsImtleXByZXNzIiwia2V5ZG93bi5lbnRlciIsImtleWRvd24uc2hpZnQuZW50ZXIiXSxbInN0ZXBTcGFuIiwiIl0sWyJhcmlhLWxhYmVsIiwiRGVzZWxlY3QgZm9iIiwzLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEsMiksUCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleXByZXNzIixmdW5jdGlvbihvKXtyZXR1cm4gaS52YWxpZGF0ZVN0ZXAobyl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleWRvd24uc2hpZnQuZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBvLnByZXZlbnREZWZhdWx0KCl9KSx2KCksRSgzLG5HZSwyLDAsImJ1dHRvbiIsMyksRSg0LGlHZSwyLDAsImJ1dHRvbiIsMyksdigpKSwyJmUmJihiKCJuZ0NsYXNzIix0byg0LHJHZSwhaS5hbGxvd1JlbW92YWwsaS5pc1Byb3NwZWN0aXZlKSkseCgxKSxiKCJpbm5lckhUTUwiLGkuc3RlcCxYRikseCgyKSxiKCJuZ0lmIixpLmFsbG93UmVtb3ZhbCkseCgxKSxiKCJuZ0lmIixpLmlzUHJvc3BlY3RpdmUpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7cGFkZGluZzoycHggMnB4IDJweCA0cHg7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6bWluLWNvbnRlbnR9LmZvYltfbmdjb250ZW50LSVDT01QJV0gPiAucHJvc3BlY3RpdmVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctdG9wOjFweH0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6Z3JhYn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlci5wcm9zcGVjdGl2ZXtjdXJzb3I6cG9pbnRlcn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS5mb2IudW5yZW1vdmFibGVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDRweH0uZm9iLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggZGFzaGVkICM5ZTllOWU7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTdweH1zcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtmb250LXNpemU6MTFweDt3aWR0aDoxMXB4O2hlaWdodDoxMXB4O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjb2xvcjppbmhlcml0fWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjExMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOWU5ZTllO2NvbG9yOiNlZWU7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2UwZTBlMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHNHZT1bInN0YXJ0Rm9iV3JhcHBlciJdLGFHZT1bImVuZEZvYldyYXBwZXIiXSxsR2U9WyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiXTtmdW5jdGlvbiBjR2Uobix0KXsxJm4mJk4oMCwiZGl2Iiw3KX1mdW5jdGlvbiB1R2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMyw0KSxFKDIsY0dlLDEsMCwiZGl2Iiw1KSxOKDMsImNhcmQtZm9iIiw2KSx2KCkpLDImbil7bGV0IGU9TSgyKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gZEdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLEUoMSx1R2UsNCw3LCJkaXYiLDEpLGcoMiwiZGl2IiwyKSxQKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkubW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKHIpKX0pKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5wcm9zcGVjdGl2ZUZvYkNsaWNrZWQocikpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKSl9KSx2KCksWnQoKX1pZigyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLG51bGwhPT1lLnByb3NwZWN0aXZlU3RlcCkseCgxKSxiKCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpfX1mdW5jdGlvbiBwR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMik7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRVhURU5ERURfTElORSxyKSl9KSx2KCl9fWZ1bmN0aW9uIGhHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMyw4KSxFKDIscEdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMCksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSkseCgyKSxiKCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLHgoMSksYigibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gZkdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxMSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDIpO3JldHVybiBvZShvLnN0YXJ0RHJhZyhvLkZvYi5FTkQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLHYoKX19ZnVuY3Rpb24gbUdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwzLDEyKSxFKDIsZkdlLDEsMCwiZGl2Iiw5KSxnKDMsImNhcmQtZm9iIiwxMyksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKCk7cmV0dXJuIG9lKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKTtyZXR1cm4gb2Uoci5vbkZvYlJlbW92ZWQoci5Gb2IuRU5EKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCkpLHgoMiksYigibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSx4KDEpLGIoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX12YXIgQnI9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5TVEFSVD0xXT0iU1RBUlQiLG5bbi5FTkQ9Ml09IkVORCJ9KEJyfHwoQnI9e30pKSxCcikpKCksZ0dlPXtzdGFydDpCci5TVEFSVCxlbmQ6QnIuRU5EfSxuTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lLHRoaXMuc2hvd0V4dGVuZGVkTGluZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZD0hMSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsLHRoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uPW51bGwsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRyx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmhhc0ZvYk1vdmVkPSExLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPUJyLk5PTkUsdGhpcy5hZmZvcmRhbmNlPUdvLk5PTkUsdGhpcy5tb3VzZUxpc3RlbmVyPXRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksdGhpcy5zdG9wTGlzdGVuZXI9dGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpLHRoaXMuRm9iPUJyLHRoaXMuVGltZVNlbGVjdGlvbkFmZm9yZGFuY2U9R299Z2V0Q3NzVHJhbnNsYXRlUHhGb3JTdGFydEZvYigpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbj8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvclByb3NwZWN0aXZlRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9c3RvcEV2ZW50UHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9c3RhcnREcmFnKGUsaSxyKXtpIT09R28uRk9CJiZ0aGlzLnN0b3BFdmVudFByb3BhZ2F0aW9uKHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9ZSx0aGlzLmFmZm9yZGFuY2U9aX1zdG9wRHJhZygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9QnIuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkJiZ0aGlzLnRpbWVTZWxlY3Rpb24mJnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnRoaXMudGltZVNlbGVjdGlvbixhZmZvcmRhbmNlOnRoaXMuYWZmb3JkYW5jZX0pLHRoaXMuYWZmb3JkYW5jZT1Hby5OT05FLHRoaXMuaGFzRm9iTW92ZWQ9ITF9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1Wcy5WRVJUSUNBTH1zaG91bGRTd2FwRm9icyhlKXtyZXR1cm4hKCF0aGlzLnRpbWVTZWxlY3Rpb258fCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKSYmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP2U8dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA6dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5TVEFSVCYmZT50aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldE5ld1RpbWVTZWxlY3Rpb24oZSxpKXtsZXQgcj17Li4uaX07aWYoIXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm4gcjtpZighdGhpcy50aW1lU2VsZWN0aW9uLmVuZClyZXR1cm4gci5zdGFydD17c3RlcDplfSxyO2lmKHRoaXMuc2hvdWxkU3dhcEZvYnMoZSkpe2xldFtvLHNdPXRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl07cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPWdHZVtzXSxyW29dPXRoaXMudGltZVNlbGVjdGlvbltzXSxyW3NdPXtzdGVwOmV9LHJ9cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuRU5EPyhyLmVuZD17c3RlcDplfSxyKTooci5zdGFydD17c3RlcDplfSxyKX1nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSl7bGV0IGk9bnVsbCxyPXRoaXMuZ2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKSxvPXRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2UubW92ZW1lbnRZOmUubW92ZW1lbnRYO3JldHVybiB0aGlzLmlzTW92aW5nSGlnaGVyKHIsbyk/aT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24ocik6dGhpcy5pc01vdmluZ0xvd2VyKHIsbykmJihpPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKHIpKSxudWxsPT09aT9udWxsOml9bW91c2VNb3ZlKGUpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSlyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7aWYobnVsbD09PWl8fCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuO2xldCByPXRoaXMuZ2V0TmV3VGltZVNlbGVjdGlvbihpLHRoaXMudGltZVNlbGVjdGlvbik7dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cn0pLHRoaXMuaGFzRm9iTW92ZWQ9ITB9bW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKGUpe2lmKG51bGwhPXRoaXMudGltZVNlbGVjdGlvbj8uZW5kKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtudWxsIT09aSYmdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChpKX1pc01vdmluZ0xvd2VyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Cci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPHRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaTwwJiZyPnRoaXMubG93ZXN0U3RlcH1pc01vdmluZ0hpZ2hlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09QnIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZT50aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk+MCYmcjx0aGlzLmhpZ2hlc3RTdGVwfWdldERyYWdnaW5nRm9iQ2VudGVyKCl7bGV0IGU9dGhpcy5nZXRDdXJyZW50Rm9iKCk/Lm5hdGl2ZUVsZW1lbnQ7aWYoIWUpcmV0dXJuIDA7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ascj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PVZzLlZFUlRJQ0FMP2ktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnItdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1nZXRDdXJyZW50Rm9iKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnN0YXJ0Rm9iV3JhcHBlcjtjYXNlIEJyLkVORDpyZXR1cm4gdGhpcy5lbmRGb2JXcmFwcGVyO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZUZvYldyYXBwZXJ9fWdldEN1cnJlbnRGb2JTdGVwKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIEJyLlNUQVJUOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA7Y2FzZSBCci5FTkQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwO2Nhc2UgQnIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZVN0ZXA/P3ZvaWQgMH19Z2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09VnMuVkVSVElDQUw/ZS5jbGllbnRZLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLmNsaWVudFgtdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1zdGVwVHlwZWQoZSxpKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZCYmdGhpcy5vbkZvYlJlbW92ZWQoZSkpO2xldCByPXsuLi50aGlzLnRpbWVTZWxlY3Rpb259O2U9PT1Cci5TVEFSVD9yLnN0YXJ0PXtzdGVwOml9OmU9PT1Cci5FTkQmJihyLmVuZD17c3RlcDppfSksbnVsbCE9PXIuZW5kJiZyLnN0YXJ0LnN0ZXA+ci5lbmQuc3RlcCYmKHI9e3N0YXJ0OnIuZW5kLGVuZDpyLnN0YXJ0fSksdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cixhZmZvcmRhbmNlOkdvLkZPQl9URVhUfSl9cHJvc3BlY3RpdmVGb2JDbGlja2VkKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGk9dGhpcy5nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKTshaXx8KHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9BRERFRCx0aW1lU2VsZWN0aW9uOml9KSx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpKX1nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKXtpZih0aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3tzdGFydDp7c3RlcDpNYXRoLm1pbih0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9LGVuZDp7c3RlcDpNYXRoLm1heCh0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9fTp7c3RhcnQ6e3N0ZXA6dGhpcy5wcm9zcGVjdGl2ZVN0ZXB9LGVuZDpudWxsfX1vbkZvYlJlbW92ZWQoZSl7ZSE9PUJyLkVORD9udWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOkdvLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246e3N0YXJ0OnRoaXMudGltZVNlbGVjdGlvbi5lbmQsZW5kOm51bGx9fSk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6R28uRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7Li4udGhpcy50aW1lU2VsZWN0aW9uLGVuZDpudWxsfX0pfW9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpe3RoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLWZvYi1jb250cm9sbGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KHNHZSw1KSxsdChhR2UsNSksbHQobEdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YXJ0Rm9iV3JhcHBlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5lbmRGb2JXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnByb3NwZWN0aXZlRm9iV3JhcHBlcj1yLmZpcnN0KX19LGlucHV0czp7YXhpc0RpcmVjdGlvbjoiYXhpc0RpcmVjdGlvbiIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsY2FyZEZvYkhlbHBlcjoiY2FyZEZvYkhlbHBlciIsc3RhcnRTdGVwQXhpc1Bvc2l0aW9uOiJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGVuZFN0ZXBBeGlzUG9zaXRpb246ImVuZFN0ZXBBeGlzUG9zaXRpb24iLGhpZ2hlc3RTdGVwOiJoaWdoZXN0U3RlcCIsbG93ZXN0U3RlcDoibG93ZXN0U3RlcCIsc2hvd0V4dGVuZGVkTGluZToic2hvd0V4dGVuZGVkTGluZSIsaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkOiJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLHByb3NwZWN0aXZlU3RlcDoicHJvc3BlY3RpdmVTdGVwIixwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb246InByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLG9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZDoib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiKSxFKDEsZEdlLDMsMiwibmctY29udGFpbmVyIiwwKSxFKDIsaEdlLDQsNSwiZGl2IiwxKSxFKDMsbUdlLDQsNSwiZGl2IiwxKSx2KCkpLDImZSYmKHgoMSksYigibmdJZiIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpLHgoMSksYigibmdJZiIsaS50aW1lU2VsZWN0aW9uKSx4KDEpLGIoIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLEtsZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkPSExLHRoaXMuZGlzYWJsZUludGVyYWN0aW9uPSExLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLkhPUklaT05UQUwsdGhpcy5jYXJkRm9iSGVscGVyPXtnZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyksZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKX0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCk6IiJ9Z2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQuc3RlcD8/dGhpcy5taW5NYXhTdGVwLm1heFN0ZXApOm51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/bnVsbDp0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnByb3NwZWN0aXZlU3RlcCl9b25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKGUpe3RoaXMucHJvc3BlY3RpdmVTdGVwPWV9Z2V0SGlnaGVzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1heFN0ZXB9Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWluU3RlcH1nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpe2xldCBpPU1hdGgucm91bmQodGhpcy5zY2FsZS5yZXZlcnNlKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sZSkpO3JldHVybiBpPnRoaXMuZ2V0SGlnaGVzdFN0ZXAoKT90aGlzLmdldEhpZ2hlc3RTdGVwKCk6aTx0aGlzLmdldExvd2VzdFN0ZXAoKT90aGlzLmdldExvd2VzdFN0ZXAoKTppfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3RpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLHNjYWxlOiJzY2FsZSIsbWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQ6Im1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIixheGlzU2l6ZToiYXhpc1NpemUiLGlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZDoiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixkaXNhYmxlSW50ZXJhY3Rpb246ImRpc2FibGVJbnRlcmFjdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6MTMsY29uc3RzOltbMywiYXhpc0RpcmVjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLCJlbmRTdGVwQXhpc1Bvc2l0aW9uIiwicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIiwiaGlnaGVzdFN0ZXAiLCJsb3dlc3RTdGVwIiwicHJvc3BlY3RpdmVTdGVwIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiY2FyZEZvYkhlbHBlciIsInNob3dFeHRlbmRlZExpbmUiLCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiY2FyZC1mb2ItY29udHJvbGxlciIsMCksUCgib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdChvKX0pLHYoKSksMiZlJiYoT3QoInBvaW50ZXItZXZlbnRzIixpLmRpc2FibGVJbnRlcmFjdGlvbj8ibm9uZSI6ImFsbCIpLGIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpKSgiaGlnaGVzdFN0ZXAiLGkuZ2V0SGlnaGVzdFN0ZXAoKSkoImxvd2VzdFN0ZXAiLGkuZ2V0TG93ZXN0U3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwIixpLnByb3NwZWN0aXZlU3RlcCkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpKCJzaG93RXh0ZW5kZWRMaW5lIiwhMCkpfSxkZXBlbmRlbmNpZXM6W25PXSxzdHlsZXM6WyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciAudGltZS1mb2Itd3JhcHBlcntoZWlnaHQ6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHZHZT1bImRhdGFUYWJsZUNvbnRhaW5lciJdO2Z1bmN0aW9uIHlHZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMjcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub3BlblRhYmxlRWRpdE1lbnUoKSl9KSxOKDEsIm1hdC1pY29uIiwyOCksZygyLCJzcGFuIiksRCgzLCJFZGl0IFRhYmxlIENvbHVtbnMiKSx2KCkoKX19ZnVuY3Rpb24gYkdlKG4sdCl7MSZuJiZOKDAsIm1hdC1zcGlubmVyIiwyOSl9ZnVuY3Rpb24geEdlKG4sdCl7MSZuJiYoZygwLCJ0aCIpLEQoMSwiU21vb3RoZWQiKSx2KCkpfWZ1bmN0aW9uIENHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwidGItZXhwZXJpbWVudC1hbGlhcyIsMzUpLEQoMiwiLyIpLFp0KCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDEpLGIoImFsaWFzIixlLm1ldGFkYXRhLmFsaWFzKX19ZnVuY3Rpb24gd0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0ZCIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKDIpO3goMSkscWUoIiAiLGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQueSksIiAiKX19ZnVuY3Rpb24gTUdlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJ0ciIsMzMpKDIsInRkIiwzNCksTigzLCJzcGFuIiksdigpLGcoNCwidGQiLDIpLEUoNSxDR2UsMywxLCJuZy1jb250YWluZXIiLDI0KSxEKDYpLHYoKSxFKDcsd0dlLDIsMSwidGQiLDI0KSxnKDgsInRkIiksRCg5KSx2KCksZygxMCwidGQiKSxEKDExKSx2KCksZygxMiwidGQiKSxEKDEzKSxqKDE0LCJkYXRlIiksdigpLGcoMTUsInRkIiksRCgxNiksdigpKCksWnQoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7eCgxKSxhdCgiY2xvc2VzdCIsZS5tZXRhZGF0YS5jbG9zZXN0KSx4KDIpLE90KCJiYWNrZ3JvdW5kLWNvbG9yIixlLm1ldGFkYXRhLmNvbG9yKSx4KDIpLGIoIm5nSWYiLGUubWV0YWRhdGEuYWxpYXMpLHgoMSkscWUoIiIsZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSwiICIpLHgoMSksYigibmdJZiIsaS5zbW9vdGhpbmdFbmFibGVkKSx4KDIpLHl0KGkudmFsdWVGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQudmFsdWUpKSx4KDIpLHl0KGkuc3RlcEZvcm1hdHRlci5mb3JtYXRTaG9ydChlLmRhdGFQb2ludC5zdGVwKSkseCgyKSx5dChuZigxNCwxMSxlLmRhdGFQb2ludC53YWxsVGltZSwic2hvcnQiKSkseCgzKSxxZSgiICIsaS5yZWxhdGl2ZVhGb3JtYXR0ZXIuZm9ybWF0UmVhZGFibGUoZS5kYXRhUG9pbnQucmVsYXRpdmVUaW1lSW5NcyksIiAiKX19ZnVuY3Rpb24gU0dlKG4sdCl7aWYoMSZuJiYoZygwLCJ0YWJsZSIsMzApKDEsInRoZWFkIikoMiwidHIiKSxOKDMsInRoIiwzMSksZyg0LCJ0aCIpLEQoNSwiUnVuIiksdigpLEUoNix4R2UsMiwwLCJ0aCIsMjQpLGcoNywidGgiKSxEKDgsIlZhbHVlIiksdigpLGcoOSwidGgiKSxEKDEwLCJTdGVwIiksdigpLGcoMTEsInRoIiksRCgxMiwiVGltZSIpLHYoKSxnKDEzLCJ0aCIpLEQoMTQsIlJlbGF0aXZlIiksdigpKCkoKSxnKDE1LCJ0Ym9keSIpLEUoMTYsTUdlLDE3LDE0LCJuZy1jb250YWluZXIiLDMyKSx2KCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT10LmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQscj10LmN1cnNvckxvY2F0aW9uLG89TSgpO3goNiksYigibmdJZiIsby5zbW9vdGhpbmdFbmFibGVkKSx4KDEwKSxiKCJuZ0Zvck9mIixvLmdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpKSgibmdGb3JUcmFja0J5IixvLnRyYWNrQnlUb29sdGlwRGF0dW0pfX1mdW5jdGlvbiBFR2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDQxKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS50b2dnbGVUYWJsZUV4cGFuZGVkKCkpfSksTigxLCJtYXQtaWNvbiIsOSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJ0aXRsZSIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJFeHBhbmQgVGFibGUiOiJDb2xsYXBzZSBUYWJsZSIpLHgoMSksYigic3ZnSWNvbiIsZS5zaG91bGRFeHBhbmRUYWJsZSgpPyJleHBhbmRfbW9yZV8yNHB4IjoiZXhwYW5kX2xlc3NfMjRweCIpfX12YXIgVEdlPWZ1bmN0aW9uKG4pe3JldHVybnsiZGF0YS10YWJsZS1jb250YWluZXIiOiEwLGV4cGFuZGVkOm59fTtmdW5jdGlvbiBER2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJkaXYiLDM2LDM3KSgzLCJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIiwzOCksUCgic29ydERhdGFCeSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5zb3J0RGF0YUJ5KHIpKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5lZGl0Q29sdW1uSGVhZGVycy5lbWl0KHIpKX0pLHYoKSgpLGcoNCwiZGl2IiwzOSksRSg1LEVHZSwyLDIsImJ1dHRvbiIsNDApLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibmdDbGFzcyIsSG4oOSxUR2UsZS5jYXJkU3RhdGUudGFibGVFeHBhbmRlZCkpLHgoMiksYigiY2hhcnRNZXRhZGF0YU1hcCIsZS5jaGFydE1ldGFkYXRhTWFwKSgiZGF0YVNlcmllcyIsZS5kYXRhU2VyaWVzKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsZS5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKSgiY29sdW1uSGVhZGVycyIsZS5jb2x1bW5IZWFkZXJzKSgic29ydGluZ0luZm8iLGUuc29ydGluZ0luZm8pKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsZS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoInNtb290aGluZ0VuYWJsZWQiLGUuc21vb3RoaW5nRW5hYmxlZCkseCgyKSxiKCJuZ0lmIixlLmNhbkV4cGFuZFRhYmxlKCkpfX12YXIgQUdlPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSxJR2U9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBQR2Uobix0KXtpZigxJm4mJk4oMCwiZGl2IiwzNiksMiZuKXtsZXQgZT1NKDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTtPdCgibGVmdCIsby5mb3J3YXJkKGkueCxIbigzLEFHZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSxiKCJuZ0NsYXNzIixscCg1LElHZSkpfX12YXIgUkdlPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSxPR2U9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIGtHZShuLHQpe2lmKDEmbiYmKEt0KDApLE4oMSwiZGl2IiwzNiksRSgyLFBHZSwxLDYsImRpdiIsNDIpLFp0KCkpLDImbil7bGV0IGU9TSgpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPU0oKTt4KDEpLE90KCJyaWdodCIsby5mb3J3YXJkKGkueCxIbig0LFJHZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IiksYigibmdDbGFzcyIsSG4oNixPR2UsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLHgoMSksYigibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIEZHZShuLHQpezEmbiYmRSgwLGtHZSwzLDgsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIE5HZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiw0MyksUCgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uRm9iUmVtb3ZlZCgpKX0pLHYoKSxadCgpfWlmKDImbil7bGV0IGU9TSgpLGk9ZS5pbnRlcmFjdGlvblN0YXRlLHI9ZS54U2NhbGUsbz1lLnZpZXdFeHRlbnQscz1lLmRvbURpbWVuc2lvbixhPU0oKTt4KDEpLGIoImRpc2FibGVJbnRlcmFjdGlvbiIsIk5PTkUiIT09aSkoInRpbWVTZWxlY3Rpb24iLGEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoInNjYWxlIixyKSgibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG8ueCkoIm1pbk1heFN0ZXAiLGEubWluTWF4U3RlcCkoImF4aXNTaXplIixzLndpZHRoKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixhLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fWZ1bmN0aW9uIExHZShuLHQpezEmbiYmRSgwLE5HZSwyLDcsIm5nLWNvbnRhaW5lciIsMjQpLDImbiYmYigibmdJZiIsTSgpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciAkbGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5SZW5kZXJlclR5cGU9cnIsdGhpcy5TY2FsZVR5cGU9U3IsdGhpcy5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ9ITEsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgRyx0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgRyx0aGlzLmVkaXRDb2x1bW5IZWFkZXJzPW5ldyBHLHRoaXMub3BlblRhYmxlRWRpdE1lbnVUb01vZGU9bmV3IEcsdGhpcy5vbkxpbmVDaGFydFpvb209bmV3IEcsdGhpcy5vbkNhcmRTdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5zb3J0aW5nSW5mbz17aGVhZGVyOm10LlJVTixvcmRlcjpxYS5BU0NFTkRJTkd9LHRoaXMueVNjYWxlVHlwZT1Tci5MSU5FQVIsdGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuPSExLHRoaXMucmVsYXRpdmVYRm9ybWF0dGVyPWlNLHRoaXMudmFsdWVGb3JtYXR0ZXI9em0sdGhpcy5zdGVwRm9ybWF0dGVyPXZzfXRvZ2dsZVlTY2FsZVR5cGUoKXt0aGlzLnlTY2FsZVR5cGU9dGhpcy55U2NhbGVUeXBlPT09U3IuTElORUFSP1NyLkxPRzEwOlNyLkxJTkVBUn1zb3J0RGF0YUJ5KGUpe3RoaXMuc29ydGluZ0luZm89ZSx0aGlzLm9uRGF0YVRhYmxlU29ydGluZy5lbWl0KGUpfXJlc2V0RG9tYWluKCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LnZpZXdCb3hSZXNldCgpfXRyYWNrQnlUb29sdGlwRGF0dW0oZSxpKXtyZXR1cm4gaS5pZH1nZXRDdXN0b21YRm9ybWF0dGVyKCl7c3dpdGNoKHRoaXMueEF4aXNUeXBlKXtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBpTTtjYXNlIFlpLlNURVA6cmV0dXJuIFNzZTtkZWZhdWx0OnJldHVybn19Z2V0Q3Vyc29yQXdhcmVUb29sdGlwRGF0YShlLGkscil7bGV0IG89ZS5tYXAobD0+KHsuLi5sLG1ldGFkYXRhOnsuLi5sLm1ldGFkYXRhLGNsb3Nlc3Q6ITEsZGlzdFRvQ3Vyc29yUGl4ZWxzOk1hdGguaHlwb3QobC5kb21Qb2ludC54LXIueCxsLmRvbVBvaW50Lnktci55KSxkaXN0VG9DdXJzb3JYOmwuZGF0YVBvaW50LngtaS54LGRpc3RUb0N1cnNvclk6bC5kYXRhUG9pbnQueS1pLnl9fSkpLHM9MS8wLGE9MDtmb3IobGV0IGw9MDtsPG8ubGVuZ3RoO2wrKylzPm9bbF0ubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzJiYocz1vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyxhPWwpO3N3aXRjaChvLmxlbmd0aCYmKG9bYV0ubWV0YWRhdGEuY2xvc2VzdD0hMCksdGhpcy50b29sdGlwU29ydCl7Y2FzZSBtby5BU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5kYXRhUG9pbnQueS1jLmRhdGFQb2ludC55KTtjYXNlIG1vLkRFU0NFTkRJTkc6cmV0dXJuIG8uc29ydCgobCxjKT0+Yy5kYXRhUG9pbnQueS1sLmRhdGFQb2ludC55KTtjYXNlIG1vLk5FQVJFU1Q6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMtYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMpO2Nhc2UgbW8uTkVBUkVTVF9ZOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yWS1jLm1ldGFkYXRhLmRpc3RUb0N1cnNvclkpO2Nhc2UgbW8uREVGQVVMVDpjYXNlIG1vLkFMUEhBQkVUSUNBTDpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3BsYXlOYW1lPGMubWV0YWRhdGEuZGlzcGxheU5hbWU/LTE6bC5tZXRhZGF0YS5kaXNwbGF5TmFtZT5jLm1ldGFkYXRhLmRpc3BsYXlOYW1lPzE6MCl9fW9wZW5EYXRhRG93bmxvYWREaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50LHtkYXRhOntjYXJkSWQ6dGhpcy5jYXJkSWR9fSl9b25Gb2JSZW1vdmVkKCl7dGhpcy5vblN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdChXYS5GT0JfREVTRUxFQ1QpfXNob3dEYXRhVGFibGUoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb259c2hvd0ZvYkNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1ZaS5TVEVQJiZ0aGlzLm1pbk1heFN0ZXAmJih0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb258fHRoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkKX1jYW5FeHBhbmRUYWJsZSgpe3JldHVybiB0aGlzLmRhdGFTZXJpZXMuZmlsdGVyKGk9PkJEKGksdGhpcy5jaGFydE1ldGFkYXRhTWFwKSkubGVuZ3RoPjN9c2hvdWxkRXhwYW5kVGFibGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHR8fCF0aGlzLmNhcmRTdGF0ZT8udGFibGVFeHBhbmRlZCl9dG9nZ2xlVGFibGVFeHBhbmRlZCgpe3RoaXMub25DYXJkU3RhdGVDaGFuZ2VkLmVtaXQoey4uLnRoaXMuY2FyZFN0YXRlLHRhYmxlRXhwYW5kZWQ6dGhpcy5zaG91bGRFeHBhbmRUYWJsZSgpfSksdGhpcy5kYXRhVGFibGVDb250YWluZXImJih0aGlzLmRhdGFUYWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodD0iIil9b3BlblRhYmxlRWRpdE1lbnUoKXt0aGlzLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlLmVtaXQodGhpcy5yYW5nZUVuYWJsZWQ/X28uUkFOR0U6X28uU0lOR0xFKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhNYykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdCh0Tyw1KSxsdCh2R2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubGluZUNoYXJ0PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmRhdGFUYWJsZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGNoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLGNhcmRTdGF0ZToiY2FyZFN0YXRlIixEYXRhRG93bmxvYWRDb21wb25lbnQ6IkRhdGFEb3dubG9hZENvbXBvbmVudCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsaWdub3JlT3V0bGllcnM6Imlnbm9yZU91dGxpZXJzIixpc0NhcmRWaXNpYmxlOiJpc0NhcmRWaXNpYmxlIixpc1Bpbm5lZDoiaXNQaW5uZWQiLGxvYWRTdGF0ZToibG9hZFN0YXRlIixzaG93RnVsbFdpZHRoOiJzaG93RnVsbFdpZHRoIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIix0YWc6InRhZyIsdGl0bGU6InRpdGxlIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLHhBeGlzVHlwZToieEF4aXNUeXBlIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLGZvcmNlU3ZnOiJmb3JjZVN2ZyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ6ImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIscmFuZ2VFbmFibGVkOiJyYW5nZUVuYWJsZWQifSxvdXRwdXRzOntvbkZ1bGxTaXplVG9nZ2xlOiJvbkZ1bGxTaXplVG9nZ2xlIixvblBpbkNsaWNrZWQ6Im9uUGluQ2xpY2tlZCIsb25UaW1lU2VsZWN0aW9uQ2hhbmdlZDoib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsb25TdGVwU2VsZWN0b3JUb2dnbGVkOiJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLG9uRGF0YVRhYmxlU29ydGluZzoib25EYXRhVGFibGVTb3J0aW5nIixlZGl0Q29sdW1uSGVhZGVyczoiZWRpdENvbHVtbkhlYWRlcnMiLG9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlOiJvcGVuVGFibGVFZGl0TWVudVRvTW9kZSIsb25MaW5lQ2hhcnRab29tOiJvbkxpbmVDaGFydFpvb20iLG9uQ2FyZFN0YXRlQ2hhbmdlZDoib25DYXJkU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MzgsdmFyczoyOCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlLGkscixvLHM7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGk9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAscj0kbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxvPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAscz0kbG9jYWxpemVgOkV4cGFuZCBUYWJsZeKQnzllNTlmZjUwYmZjYjQ3OTI3MmUyYjEwM2UxZTliMTE1MThlMmU0Y2XikJ82Mzc0ODgwMzQxMzkzMDIwNjEwOkV4cGFuZCBUYWJsZWAsW1sxLCJhbHdheXMtdmlzaWJsZSJdLFsxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsInRpdGxlIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsciwidGl0bGUiLCJNb3JlIGxpbmUgY2hhcnQgb3B0aW9ucyIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIixvLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibGluZV93ZWlnaHRfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIGRpYWxvZyB0byBkb3dubG9hZCBkYXRhIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImdldF9hcHBfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIG1lbnUgdG8gZWRpdCBkYXRhIHRhYmxlIGNvbHVtbnMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNoYXJ0LWNvbnRhaW5lciJdLFsiY2hhcnRDb250YWluZXIiLCIiXSxbImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbMywiZGlzYWJsZVVwZGF0ZSIsInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInhTY2FsZVR5cGUiLCJ5U2NhbGVUeXBlIiwiY3VzdG9tWEZvcm1hdHRlciIsImlnbm9yZVlPdXRsaWVycyIsInRvb2x0aXBUZW1wbGF0ZSIsInVzZURhcmtNb2RlIiwiY3VzdG9tVmlzVGVtcGxhdGUiLCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iLCJ2aWV3Qm94Q2hhbmdlZCJdLFsidG9vbHRpcCIsIiJdLFs0LCJuZ0lmIl0sWyJsaW5lQ2hhcnRDdXN0b21WaXMiLCIiXSxbImxpbmVDaGFydEN1c3RvbVhBeGlzVmlzIiwiIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwiYXJpYS1sYWJlbCIsIk9wZW4gbWVudSB0byBlZGl0IGRhdGEgdGFibGUgY29sdW1ucyIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImRpYW1ldGVyIiwiMTgiXSxbMSwidG9vbHRpcCJdLFsxLCJjaXJjbGUtaGVhZGVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJ0b29sdGlwLXJvdyJdLFsxLCJ0b29sdGlwLXJvdy1jaXJjbGUiXSxbMywiYWxpYXMiXSxbMywibmdDbGFzcyJdLFsiZGF0YVRhYmxlQ29udGFpbmVyIiwiIl0sWzMsImNoYXJ0TWV0YWRhdGFNYXAiLCJkYXRhU2VyaWVzIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImNvbHVtbkhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJlZGl0Q29sdW1uSGVhZGVycyJdLFsxLCJib3R0b20tYXJlYSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiY2xhc3MiLCJleHBhbmQtYnV0dG9uIiwiYXJpYS1sYWJlbCIscywzLCJ0aXRsZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixzLDEsImV4cGFuZC1idXR0b24iLDMsInRpdGxlIiwiY2xpY2siXSxbMywibmdDbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMywiZGlzYWJsZUludGVyYWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInNjYWxlIiwibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLCJtaW5NYXhTdGVwIiwiYXhpc1NpemUiLCJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJzcGFuIiwyKSxOKDMsInRiLXRydW5jYXRlZC1wYXRoIiwzKSg0LCJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciLDQpLHYoKSxnKDUsInNwYW4iLDUpKDYsImJ1dHRvbiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzZXREb21haW4oKX0pLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIiksTig5LCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5DbGlja2VkLmVtaXQoIWkuaXNQaW5uZWQpfSksTigxMSwibWF0LWljb24iLDkpLHYoKSxnKDEyLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlLmVtaXQoKX0pLE4oMTMsIm1hdC1pY29uIiw5KSx2KCksZygxNCwiYnV0dG9uIiwxMSksTigxNSwibWF0LWljb24iLDEyKSx2KCksZygxNiwibWF0LW1lbnUiLG51bGwsMTMpKDE4LCJidXR0b24iLDE0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVZU2NhbGVUeXBlKCl9KSxOKDE5LCJtYXQtaWNvbiIsMTUpLGcoMjAsInNwYW4iKSxEKDIxLCJUb2dnbGUgWS1heGlzIGxvZyBzY2FsZSIpLHYoKSgpLGcoMjIsImJ1dHRvbiIsMTYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EYXRhRG93bmxvYWREaWFsb2coKX0pLE4oMjMsIm1hdC1pY29uIiwxNyksZygyNCwic3BhbiIpLEQoMjUsIkRvd25sb2FkIGRhdGEiKSx2KCkoKSxFKDI2LHlHZSw0LDAsImJ1dHRvbiIsMTgpLHYoKSgpKCksZygyNywiZGl2IiwxOSwyMCksRSgyOSxiR2UsMSwwLCJtYXQtc3Bpbm5lciIsMjEpLGcoMzAsImxpbmUtY2hhcnQiLDIyKSxQKCJvblZpZXdCb3hPdmVycmlkZGVuIixmdW5jdGlvbihvKXtyZXR1cm4gaS5pc1ZpZXdCb3hPdmVycmlkZGVuPW99KSgidmlld0JveENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbS5lbWl0KG8pfSksdigpLEUoMzEsU0dlLDE3LDMsIm5nLXRlbXBsYXRlIixudWxsLDIzLGVuKSx2KCkoKSxFKDMzLERHZSw2LDExLCJuZy1jb250YWluZXIiLDI0KSxFKDM0LEZHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI1LGVuKSxFKDM2LExHZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI2LGVuKSksMiZlKXtsZXQgcj1zdCgxNyksbz1zdCgzMikscz1zdCgzNSksYT1zdCgzNyk7eCgzKSx4cigidGl0bGUiLGkudGFnKSx4cigidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSx4KDIpLGIoImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFXKDcsMjQsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVyg4LDI2LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSx4KDQpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIikseCgxKSxiKCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLHgoMiksYigic3ZnSWNvbiIsaS5zaG93RnVsbFdpZHRoPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLHgoMSksYigibWF0TWVudVRyaWdnZXJGb3IiLHIpLHgoMTIpLGIoIm5nSWYiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpLHgoMyksYigibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORykseCgxKSxiKCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgiY3VzdG9tVmlzVGVtcGxhdGUiLHMpKCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsYSkseCgzKSxiKCJuZ0lmIixpLnNob3dEYXRhVGFibGUoKSl9fSxkZXBlbmRlbmNpZXM6W1BuLHluLFhlLF92LHRPLCRuLFpuLEl1LEVjLFB1LHZvLHZ2LHl2LFFsZSxKbGUsZnQsVTBdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH1bX25naG9zdC0lQ09NUCVdOmhhcyguZXhwYW5kLWJ1dHRvbil7cGFkZGluZzo0cHggMTZweCAwfS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWJhc2lzOjI5OHB4fS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV06bm90KDpoYXMoLmV4cGFuZC1idXR0b24pKXtmbGV4LWdyb3c6MX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MTRweDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6NXB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczphdXRvIGF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEuMmVtO2xpbmUtaGVpZ2h0OjB9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVufS5waW4tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MThweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzpoaWRkZW47cmVzaXplOnZlcnRpY2FsfS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjExcHg7dG9wOjExcHh9LmNoYXJ0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMHB4O21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDo1MGVtO292ZXJmbG93OmF1dG87cmVzaXplOnZlcnRpY2FsfS5kYXRhLXRhYmxlLWNvbnRhaW5lci5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99LmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0uYm90dG9tLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBWR2Uobix0KXtyZXR1cm4gbi5sZW5ndGg9PT10Lmxlbmd0aCYmbi5ldmVyeSgoZSxpKT0+e2xldCByPXRbaV0sbz1lLnBvaW50cyxzPXIucG9pbnRzO3JldHVybiBlLnJ1bklkPT09ci5ydW5JZCYmby5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+e2xldCBjPXNbbF07cmV0dXJuIGEueD09PWMueCYmYS55PT09Yy55fSl9KX12YXIgZWNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuRGF0YURvd25sb2FkQ29tcG9uZW50PSRuZSx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRyx0aGlzLmlzVmlzaWJsZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodUspLHRoaXMudXNlRGFya01vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KG11KSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChtXyksdGhpcy50b29sdGlwU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoZl8pLHRoaXMueEF4aXNUeXBlJD10aGlzLnN0b3JlLnNlbGVjdChidSksdGhpcy5mb3JjZVN2ZyQ9dGhpcy5zdG9yZS5zZWxlY3Qoc0spLHRoaXMuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGxEKSx0aGlzLnhTY2FsZVR5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KS5waXBlKEIoaT0+e3N3aXRjaChpKXtjYXNlIFlpLlNURVA6Y2FzZSBZaS5SRUxBVElWRTpyZXR1cm4gU3IuTElORUFSO2Nhc2UgWWkuV0FMTF9USU1FOnJldHVybiBTci5USU1FO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHhBeGlzVHlwZSBmb3IgbGluZSBjaGFydC4gJHtpfWApfX0pKSx0aGlzLnNjYWxhclNtb290aGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLHRoaXMuc21vb3RoaW5nRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QodmQpLnBpcGUoQihpPT5pPjApKSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksQihsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KExwLHRoaXMuY2FyZElkKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksSGUobD0+Qm9vbGVhbihsKSksQihsPT5sKSxRcygxKSkucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLGRpKFZHZSkpLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoJEQpKSxvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEIoKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcCh1PT4oey4uLnUsc2VyaWVzSWQ6dS5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksQihsPT5sLm1hcChjPT57bGV0IHU9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAoZD0+KHsuLi5kLHJlbGF0aXZlVGltZUluTXM6ZC53YWxsVGltZS11fSkpfX0pKSxzcih0aGlzLnN0b3JlLnNlbGVjdChidSkpLEIoKFtsLGNdKT0+bC5tYXAodT0+KHsuLi51LHBvaW50czp1LnBvaW50cy5tYXAoZD0+e2xldCBwO3N3aXRjaChjKXtjYXNlIFlpLlJFTEFUSVZFOnA9ZC5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgWWkuV0FMTF9USU1FOnA9ZC53YWxsVGltZTticmVhaztkZWZhdWx0OnA9ZC5zdGVwfXJldHVybnsuLi5kLHg6cH19KX0pKSksUXMoMSkpO3RoaXMubWluTWF4U3RlcHMkPXBuKFt0aGlzLnN0b3JlLnNlbGVjdChmWix0aGlzLmNhcmRJZCksdGhpcy5zdG9yZS5zZWxlY3QobVosdGhpcy5jYXJkSWQpXSkucGlwZShCKChbbCxjXSk9PntpZihsJiZjKXJldHVybnttaW5TdGVwOk1hdGgubWF4KGw/Lm1pblN0ZXAsYz8ubWluU3RlcCksbWF4U3RlcDpNYXRoLm1pbihsPy5tYXhTdGVwLGM/Lm1heFN0ZXApfX0pKSx0aGlzLmRhdGFTZXJpZXMkPWEucGlwZShzcih0aGlzLnN0b3JlLnNlbGVjdCh2ZCkpLHZpKChbbCxjXSk9PntsZXQgdT1sLm1hcCgoe3Nlcmllc0lkOmQscG9pbnRzOnB9KT0+KHtpZDpkLHBvaW50czpwfSkpO3JldHVybiBjPD0wP2p0KHUpOmxvKGFzeW5jIGZ1bmN0aW9uKG4sdCl7TnVtYmVyLmlzRmluaXRlKHQpfHwodD0wKSx0PU1hdGgubWF4KDAsTWF0aC5taW4odCwxKSk7bGV0IGU9W107Zm9yKGxldCBpIG9mIG4pe2xldCByPWkucG9pbnRzWzBdPy55O2lmKGkucG9pbnRzLmV2ZXJ5KGM9PmMueT09cikpe2UucHVzaChpKTtjb250aW51ZX1sZXQgcz1pLnBvaW50cy5sZW5ndGg+MD8wOk5hTixhPTAsbD1pLnBvaW50cy5tYXAoYz0+e2xldCB1PWMueTtpZihOdW1iZXIuaXNGaW5pdGUodSkpe3M9cyp0KygxLXQpKnUsYSsrO2xldCBkPTE9PT10PzE6MS1NYXRoLnBvdyh0LGEpO3JldHVybnt4OmMueCx5OnMvZH19cmV0dXJue3g6Yy54LHk6dX19KTtlLnB1c2goe2lkOmkuaWQscG9pbnRzOmx9KX1yZXR1cm4gZX0odSxjKSkucGlwZShCKGQ9PntsZXQgcD11Lm1hcCgoaCxmKT0+KHtpZDpzKGguaWQpLHBvaW50czpkW2ZdLnBvaW50cy5tYXAoKHt5Om19LEMpPT4oey4uLmgucG9pbnRzW0NdLHk6bX0pKX0pKTtyZXR1cm5bLi4udSwuLi5wXX0pKX0pLFZuKFtdKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1wbihbdGhpcy5taW5NYXhTdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoVnApLHRoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0b3JlLnNlbGVjdChidSldKS5waXBlKEIoKFtsLGMsdSxkXSk9PmwmJmMmJmQ9PT1ZaS5TVEVQJiZ1P2NfKHUsbC5taW5TdGVwLGwubWF4U3RlcCk6bnVsbCkpLHRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoZ1osdGhpcy5jYXJkSWQpLHRoaXMuY29sdW1uSGVhZGVycyQ9cG4oW3RoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoZ18pLHRoaXMuc3RvcmUuc2VsZWN0KF9fKV0pLnBpcGUoQigoW2wsYyx1XSk9PmwmJm51bGwhPT1sLmVuZD91OmMpKSx0aGlzLmNoYXJ0TWV0YWRhdGFNYXAkPWEucGlwZSh2aShsPT5wbihsLm1hcChjPT50aGlzLmdldFJ1bkRpc3BsYXlOYW1lQW5kQWxpYXMoYy5ydW5JZCkucGlwZShCKHU9Pih7Li4uYywuLi51fSkpKSkpKSxzcih0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KHZkKSksQXIoMCksQigoW2wsYyx1LGRdKT0+e2xldCBwPXt9LGg9ZD4wO2ZvcihsZXQgZiBvZiBsKXtsZXR7c2VyaWVzSWQ6bSxydW5JZDpDLGRpc3BsYXlOYW1lOl8sYWxpYXM6eSxwYXJ0aXRpb25JbmRleDpJLHBhcnRpdGlvblNpemU6QX09ZjtwW21dPXt0eXBlOmZ2Lk9SSUdJTkFMLGlkOm0sYWxpYXM6eSxkaXNwbGF5TmFtZTpBPjE/YCR7X306ICR7SX1gOl8sdmlzaWJsZTpCb29sZWFuKGMmJmMuZ2V0KEMpKSxjb2xvcjp1W0NdPz8iI2ZmZiIsYXV4OiExLG9wYWNpdHk6MX19aWYoIWgpcmV0dXJuIHA7Zm9yKGxldFtmLG1db2YgT2JqZWN0LmVudHJpZXMocCkpe2xldCBDPXMoZik7cFtDXT17Li4ubSxpZDpDLHR5cGU6ZnYuREVSSVZFRCxhdXg6ITEsb3JpZ2luYWxTZXJpZXNJZDpmfSxtLmF1eD0hMCxtLm9wYWNpdHk9LjI1fXJldHVybiBwfSksVm4oe30pKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihsPT5sLnRhZykpLHRoaXMuY2FyZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChtYykucGlwZShCKGw9PmxbdGhpcy5jYXJkSWRdfHx7fSkpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobD0+Z3YobCx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLmlzUGlubmVkJD10aGlzLnN0b3JlLnNlbGVjdChCcCx0aGlzLmNhcmRJZCksdGhpcy5yYW5nZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGhaLHRoaXMuY2FyZElkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0UnVuRGlzcGxheU5hbWVBbmRBbGlhcyhlKXtyZXR1cm4gcG4oW3RoaXMuc3RvcmUuc2VsZWN0KGxBLHtydW5JZDplfSksdGhpcy5zdG9yZS5zZWxlY3QoaHUpLHRoaXMuc3RvcmUuc2VsZWN0KGNBLHtydW5JZDplfSldKS5waXBlKEIoKFtpLHIsb10pPT57bGV0IHM9bnVsbCE9PWk/cltpXT8/bnVsbDpudWxsO3JldHVybntkaXNwbGF5TmFtZTpvfHxzP28/Lm5hbWU/PyIuLi4iOmUsYWxpYXM6c319KSl9c3RlcFNlcmllc1RvTGluZVNlcmllcyhlLGkpe2xldCByPWk9PT1ZaS5TVEVQO3JldHVybiBlLm1hcChvPT57bGV0IHM9MWUzKm8ud2FsbFRpbWU7cmV0dXJuey4uLm8seDpyP28uc3RlcDpzLHk6by52YWx1ZSx3YWxsVGltZTpzLHJlbGF0aXZlVGltZUluTXM6MH19KX1vbkRhdGFUYWJsZVNvcnRpbmcoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChnbmUoZSkpfW9uQ2FyZFN0YXRlQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxQKHtjYXJkSWQ6dGhpcy5jYXJkSWQsc2V0dGluZ3M6ZX0pKX1vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gob2goey4uLmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uU3RlcFNlbGVjdG9yVG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHNoKHthZmZvcmRhbmNlOmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfW9uTGluZUNoYXJ0Wm9vbShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKElQKHt2aWV3Qm94OmUsY2FyZElkOnRoaXMuY2FyZElkfSkpfWVkaXRDb2x1bW5IZWFkZXJzKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gocHYoZSkpfW9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goblAoe21vZGU6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e3BpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MjMsdmFyczo2OSxjb25zdHM6W1sib2JzZXJ2ZUludGVyc2VjdGlvbiIsIiIsMywiY2FyZElkIiwiY2hhcnRNZXRhZGF0YU1hcCIsIkRhdGFEb3dubG9hZENvbXBvbmVudCIsImRhdGFTZXJpZXMiLCJpZ25vcmVPdXRsaWVycyIsImlzQ2FyZFZpc2libGUiLCJpc1Bpbm5lZCIsImxvYWRTdGF0ZSIsInNob3dGdWxsV2lkdGgiLCJzbW9vdGhpbmdFbmFibGVkIiwidGFnIiwidGl0bGUiLCJjYXJkU3RhdGUiLCJ0b29sdGlwU29ydCIsInhBeGlzVHlwZSIsInhTY2FsZVR5cGUiLCJ1c2VEYXJrTW9kZSIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiZm9yY2VTdmciLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsIm1pbk1heFN0ZXAiLCJjb2x1bW5IZWFkZXJzIiwicmFuZ2VFbmFibGVkIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLCJvbkRhdGFUYWJsZVNvcnRpbmciLCJvbkxpbmVDaGFydFpvb20iLCJlZGl0Q29sdW1uSGVhZGVycyIsIm9uQ2FyZFN0YXRlQ2hhbmdlZCIsIm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJzY2FsYXItY2FyZC1jb21wb25lbnQiLDApLFAoIm9uRnVsbFNpemVUb2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSgib25WaXNpYmlsaXR5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblZpc2liaWxpdHlDaGFuZ2Uobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZChvKX0pKCJvblN0ZXBTZWxlY3RvclRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZChvKX0pKCJvbkRhdGFUYWJsZVNvcnRpbmciLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRGF0YVRhYmxlU29ydGluZyhvKX0pKCJvbkxpbmVDaGFydFpvb20iLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTGluZUNoYXJ0Wm9vbShvKX0pKCJlZGl0Q29sdW1uSGVhZGVycyIsZnVuY3Rpb24obyl7cmV0dXJuIGkuZWRpdENvbHVtbkhlYWRlcnMobyl9KSgib25DYXJkU3RhdGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNhcmRTdGF0ZUNoYW5nZWQobyl9KSgib3BlblRhYmxlRWRpdE1lbnVUb01vZGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9wZW5UYWJsZUVkaXRNZW51VG9Nb2RlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLGooMTIsImFzeW5jIiksaigxMywiYXN5bmMiKSxqKDE0LCJhc3luYyIpLGooMTUsImFzeW5jIiksaigxNiwiYXN5bmMiKSxqKDE3LCJhc3luYyIpLGooMTgsImFzeW5jIiksaigxOSwiYXN5bmMiKSxqKDIwLCJhc3luYyIpLGooMjEsImFzeW5jIiksaigyMiwiYXN5bmMiKSx2KCkpLDImZSYmYigiY2FyZElkIixpLmNhcmRJZCkoImNoYXJ0TWV0YWRhdGFNYXAiLFcoMSwyNSxpLmNoYXJ0TWV0YWRhdGFNYXAkKSkoIkRhdGFEb3dubG9hZENvbXBvbmVudCIsaS5EYXRhRG93bmxvYWRDb21wb25lbnQpKCJkYXRhU2VyaWVzIixXKDIsMjcsaS5kYXRhU2VyaWVzJCkpKCJpZ25vcmVPdXRsaWVycyIsVygzLDI5LGkuaWdub3JlT3V0bGllcnMkKSkoImlzQ2FyZFZpc2libGUiLGkuaXNWaXNpYmxlKSgiaXNQaW5uZWQiLFcoNCwzMSxpLmlzUGlubmVkJCkpKCJsb2FkU3RhdGUiLFcoNSwzMyxpLmxvYWRTdGF0ZSQpKSgic2hvd0Z1bGxXaWR0aCIsVyg2LDM1LGkuc2hvd0Z1bGxXaWR0aCQpKSgic21vb3RoaW5nRW5hYmxlZCIsVyg3LDM3LGkuc21vb3RoaW5nRW5hYmxlZCQpKSgidGFnIixXKDgsMzksaS50YWckKSkoInRpdGxlIixXKDksNDEsaS50aXRsZSQpKSgiY2FyZFN0YXRlIixXKDEwLDQzLGkuY2FyZFN0YXRlJCkpKCJ0b29sdGlwU29ydCIsVygxMSw0NSxpLnRvb2x0aXBTb3J0JCkpKCJ4QXhpc1R5cGUiLFcoMTIsNDcsaS54QXhpc1R5cGUkKSkoInhTY2FsZVR5cGUiLFcoMTMsNDksaS54U2NhbGVUeXBlJCkpKCJ1c2VEYXJrTW9kZSIsVygxNCw1MSxpLnVzZURhcmtNb2RlJCkpKCJsaW5rZWRUaW1lU2VsZWN0aW9uIixXKDE1LDUzLGkubGlua2VkVGltZVNlbGVjdGlvbiQpKSgic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsVygxNiw1NSxpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsVygxNyw1NyxpLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCQpKSgiZm9yY2VTdmciLFcoMTgsNTksaS5mb3JjZVN2ZyQpKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLFcoMTksNjEsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQpKSgibWluTWF4U3RlcCIsVygyMCw2MyxpLm1pbk1heFN0ZXBzJCkpKCJjb2x1bW5IZWFkZXJzIixXKDIxLDY1LGkuY29sdW1uSGVhZGVycyQpKSgicmFuZ2VFbmFibGVkIixXKDIyLDY3LGkucmFuZ2VFbmFibGVkJCkpfSxkZXBlbmRlbmNpZXM6W212LCRsZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB6R2Uobix0LGUpe2xldCBpPVtdLHtsZWZ0OnIscmlnaHQ6b309dCxzPShvLXIpL2UsYT0wLGw9MDtmb3IobGV0IGM9MDtjPGU7YysrKXtsZXQgdT1yK2MqcyxkPXUrcyxwPWM9PT1lLTEsaD1sO2ZvcihsPTA7YTxuLmxlbmd0aDspe2xldCBmPW5bYV0sbT1qR2UoZix1LGQsIXApO2lmKGgrPW0uY3VycixsKz1tLm5leHQsZi54K2YuZHg+ZClicmVhazthKyt9aS5wdXNoKHt4OnUsZHg6cyx5Omh9KX1yZXR1cm4gaX1mdW5jdGlvbiBqR2Uobix0LGUsaSl7bGV0IHI9bi54LG89bi54K24uZHg7aWYocj5lfHxvPHQpcmV0dXJue2N1cnI6MCxuZXh0OjB9O2lmKDA9PT1uLmR4KXJldHVybiBpJiZvPj1lP3tjdXJyOjAsbmV4dDpuLnl9OntjdXJyOm4ueSxuZXh0OjB9O2xldCBzPU1hdGgubWluKG8sZSktTWF0aC5tYXgocix0KTtyZXR1cm57Y3VycjpuLnkqcy9uLmR4LG5leHQ6MH19dmFyIHFHZT1ybygiLjJ+cyIpLFlHZT1ybygiLjR+ciIpLFhHZT1ybygiLjJ+ZSIpO2Z1bmN0aW9uIG5jZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlND9xR2Uobik6dDwuMDAxP1hHZShuKTpZR2Uobil9dmFyIFFHZT1bIm1haW4iXSxLR2U9WyJ4QXhpcyJdLFpHZT1bInlBeGlzIl0sSkdlPVsiY29udGVudCJdLCRHZT1bImhpc3RvZ3JhbXMiXTtmdW5jdGlvbiBlNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIpKDEsInRleHQiKSxEKDIpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTtPdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLHgoMikseXQoZS50b29sdGlwRGF0YS54QXhpcy5sYWJlbCl9fWZ1bmN0aW9uIHQ2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIikoMSwidGV4dCIpLEQoMiksdigpKCkpLDImbil7bGV0IGU9TSgpO090KCJ0cmFuc2Zvcm0iLGUuZ2V0R3JvdXBUcmFuc2Zvcm0oZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSx4KDEpLHplKCJ5IixlLnRvb2x0aXBEYXRhLnlBeGlzLnBvc2l0aW9uKSx4KDEpLHFlKCIgIixlLnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIG42ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLFNhKCksS3QoMCksZygxLCJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciIsMTYpLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpLFp0KCl9aWYoMiZuKXtsZXQgZT1NKCk7eCgxKSxiKCJ0aW1lU2VsZWN0aW9uIixlLnRpbWVTZWxlY3Rpb24pKCJzdGVwcyIsZS5nZXRTdGVwcygpKSgidGVtcG9yYWxTY2FsZSIsZS5zY2FsZXMudGVtcG9yYWxTY2FsZSl9fWZ1bmN0aW9uIGk2ZShuLHQpe2lmKDEmbiYmKGpuKCksZygwLCJnIiksTigxLCJsaW5lIiwxNyksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O090KCJ0cmFuc2Zvcm0iLE0oKS5nZXRDc3NUcmFuc2xhdGVQeCgwLGUpKX19ZnVuY3Rpb24gcjZlKG4sdCl7MSZuJiYoam4oKSxOKDAsImxpbmUiLDIxKSl9ZnVuY3Rpb24gbzZlKG4sdCl7aWYoMSZuJiYoam4oKSxOKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPU0oKS4kaW1wbGljaXQsaT1NKCk7T3QoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeChpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLngsaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS55KSl9fWZ1bmN0aW9uIHM2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtqbigpLGcoMCwiZyIsMTgpLFAoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHIpe2xldCBzPXJlKGUpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLHMsITApKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKCkub25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKG8pKX0pLEUoMSxyNmUsMSwwLCJsaW5lIiwxOSksTigyLCJwYXRoIiksRSgzLG82ZSwxLDIsImNpcmNsZSIsMjApLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpO090KCJ0cmFuc2Zvcm0iLGkuZ2V0R3JvdXBUcmFuc2Zvcm0oZSkpKCJjb2xvciIsaS5nZXRIaXN0b2dyYW1GaWxsKGUpKSxhdCgiaGlzdG9ncmFtIiwhMCkoIm5vLWNvbG9yIiwhaS5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSkpLHgoMSksYigibmdJZiIsaS5tb2RlPT09aS5IaXN0b2dyYW1Nb2RlLk9GRlNFVCkseCgxKSx6ZSgiZCIsaS5nZXRIaXN0b2dyYW1QYXRoKGUpKSx4KDEpLGIoIm5nSWYiLGkudG9vbHRpcERhdGEpfX1mdW5jdGlvbiBhNmUobix0KXtpZigxJm4mJihqbigpLE4oMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9TSgyKTt6ZSgiY3giLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBsNmUobix0KXtpZigxJm4mJihqbigpLGcoMCwiZyIsNCkoMSwiZyIpLE4oMiwicGF0aCIpLEUoMyxhNmUsMSwyLCJjaXJjbGUiLDIzKSx2KCksZyg0LCJnIiwyNCkoNSwidGV4dCIsMjUpLEQoNiksdigpKCkoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxPdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSx6ZSgiZCIsZS5nZXRIaXN0b2dyYW1QYXRoKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSkseCgxKSxiKCJuZ0lmIixlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLHgoMSksT3QoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLngsZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi55KSkseCgyKSx5dChlLnRvb2x0aXBEYXRhLnZhbHVlLmxhYmVsKX19dmFyIGlPPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMubW9kZT1Pci5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9Zm8uU1RFUCx0aGlzLnRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZT1Pcix0aGlzLlRpbWVQcm9wZXJ0eT1mbyx0aGlzLnRvb2x0aXBEYXRhPW51bGwsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOm5jZSxjb3VudDpybygiLjNuIiksd2FsbFRpbWU6a3YoIiVtLyVkICVYIiksc3RlcDpybygiLjBmIikscmVsYXRpdmU6aT0+cm8oIi4xciIpKGkvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe2xpKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+dGhpcy5vbk1vdXNlTW92ZShlKSl9Z2V0Q3NzVHJhbnNsYXRlUHgoZSxpKXtyZXR1cm5gdHJhbnNsYXRlKCR7ZX1weCwgJHtpfXB4KWB9Z2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaSl7aWYoIWUuYmlucy5sZW5ndGgpcmV0dXJue3g6MCxkeDowLHk6MH07bGV0IHI9ZS5iaW5zWzBdLG89ZS5iaW5zLnNsaWNlKC0xKVswXTtyZXR1cm4gaTxyLng/cjppPj1vLngrby5keD9vOmUuYmlucy5maW5kKGE9PmEueDw9aSYmaTxhLngrYS5keCl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZSgkTShlKSkseTp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKGUueSl9Ont4OjAseTowfX1nZXRIaXN0b2dyYW1QYXRoKGUpe2lmKCF0aGlzLnNjYWxlc3x8IWUuYmlucy5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUscj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89ZS5iaW5zWzBdLHM9ZS5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7aSgkTShvKSl9LCR7cigwKX1gXTtmb3IobGV0IGwgb2YgZS5iaW5zKWEucHVzaChgTCR7aSgkTShsKSl9LCR7cihsLnkpfWApO3JldHVybiBhLnB1c2goYEwke2koJE0ocykpfSwke3IoMCl9YCksYS5qb2luKCIiKX10cmFja0J5V2FsbFRpbWUoZSl7cmV0dXJuIGUud2FsbFRpbWV9Z2V0R3JvdXBUcmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuc2NhbGVzJiZ0aGlzLm1vZGUhPT1Pci5PVkVSTEFZP3RoaXMuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKSk6IiJ9Z2V0U3RlcHMoKXtyZXR1cm4gdGhpcy5kYXRhLm1hcChlPT5lLnN0ZXApfWlzVGltZVNlbGVjdGlvbkVuYWJsZWQoZSl7cmV0dXJuIEJvb2xlYW4odGhpcy5tb2RlPT09T3IuT0ZGU0VUJiZ0aGlzLnRpbWVQcm9wZXJ0eT09PWZvLlNURVAmJnRoaXMuc2NhbGVzJiZlKX1pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSl7cmV0dXJuIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHwobnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA9PT1lLnN0ZXA6dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA8PWUuc3RlcCYmdGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwPj1lLnN0ZXApfWdldEhpc3RvZ3JhbUZpbGwoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSk6IiJ9dXBkYXRlQ29sb3JPbkhvdmVyKGUsaSxyKXshdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fHRoaXMuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGkpfHwocj9lLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJuby1jb2xvciIpOmUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm5vLWNvbG9yIikpfWdldEdyaWRUaWNrWUxvY3MoKXtpZighdGhpcy5zY2FsZXN8fHRoaXMubW9kZT09PU9yLk9GRlNFVClyZXR1cm5bXTtsZXQgZT10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiBlLnRpY2tzKCkubWFwKGk9PmUoaSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuZG9tVmlzaWJsZT1lLGUmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQoZSl7aWYoIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pKXJldHVybjtsZXQgaT10aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxyPXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAsbz1lLnN0ZXA8aT9lLnN0ZXA6aSxzPXI7cz12b2lkIDA9PT1zP2Uuc3RlcD5pP2Uuc3RlcDppOmUuc3RlcD5zP2Uuc3RlcDpzLChvIT09aXx8cyE9PXIpJiZvIT09cyYmdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOm99LGVuZDp7c3RlcDpzfX0sYWZmb3JkYW5jZTpHby5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0V9KX1nZXRUaW1lVmFsdWUoZSl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIGZvLldBTExfVElNRTpyZXR1cm4gZS53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIGUuc3RlcDtjYXNlIGZvLlJFTEFUSVZFOnJldHVybiBlLndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXshdGhpcy5kb21WaXNpYmxlfHwodGhpcy5zY2FsZXM9dGhpcy5jb21wdXRlU2NhbGVzKHRoaXMuZGF0YSksdGhpcy5yZW5kZXJYQXhpcygpLHRoaXMucmVuZGVyWUF4aXMoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9Y29tcHV0ZVNjYWxlcyhlKXtsZXR7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDpzfT1pY2UoZSxfPT5mdW5jdGlvbihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5taW4oZSxpLngpLDEvMCl9KF8uYmlucyksXz0+anooXy5iaW5zLCh7eDp5LGR4Okl9KT0+eStJKSksYT1qeihlLF89Pmp6KF8uYmlucywoe3k6eX0pPT55KSksbD1EYygpLmRvbWFpbihbbyxzXSkubmljZSgpLGM9dGhpcy5tb2RlIT09T3IuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PWZvLldBTExfVElNRT9MbSgpOkRjKCksdT1lLm1hcChfPT50aGlzLmdldFRpbWVWYWx1ZShfKSkse21pbjpkLG1heDpwfT1pY2UodSxfPT5fKSxoPVtkLHBdO2MuZG9tYWluKGgpO2xldCBmPURjKCk7Zi5kb21haW4oWzAsYV0pO2xldCBtPXdtKHRoaXMuY29sb3J8fCIjMDAwIiksQz1EYygpO3JldHVybiBDLmRvbWFpbihoKSxsLnJhbmdlKFswLGldKSxDLnJhbmdlKFttLmJyaWdodGVyKCksbS5kYXJrZXIoKV0pLEMuaW50ZXJwb2xhdGUoTkgpLHRoaXMubW9kZT09PU9yLk9WRVJMQVk/KGMucmFuZ2UoW3Iscl0pLGYucmFuZ2UoW3IsMF0pKTooYy5yYW5nZShbci0odGhpcy5tb2RlPT09T3IuT0ZGU0VUP3ItdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLHJdKSxmLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOmwsZDNDb2xvclNjYWxlOkMsY291bnRTY2FsZTpmLHRlbXBvcmFsU2NhbGU6Y319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldHt3aWR0aDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxpPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMyxuKX0odGhpcy5zY2FsZXMuYmluU2NhbGUpLnRpY2tzKE1hdGgubWF4KDIsZS8yMCkpO2kudGlja0Zvcm1hdCh0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKSxpKFpQKHRoaXMueEF4aXMubmF0aXZlRWxlbWVudCkpfWdldFlBeGlzRm9ybWF0dGVyKCl7aWYodGhpcy5tb2RlPT09T3IuT1ZFUkxBWSlyZXR1cm4gdGhpcy5mb3JtYXR0ZXJzLmNvdW50O3N3aXRjaCh0aGlzLnRpbWVQcm9wZXJ0eSl7Y2FzZSBmby5XQUxMX1RJTUU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy53YWxsVGltZTtjYXNlIGZvLlNURVA6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5zdGVwO2Nhc2UgZm8uUkVMQVRJVkU6cmV0dXJuIHRoaXMuZm9ybWF0dGVycy5yZWxhdGl2ZTtkZWZhdWx0OnRocm93IFJhbmdlRXJyb3IoYFkgYXhpcyBmb3JtYXR0ZXIgZm9yICR7dGhpcy50aW1lUHJvcGVydHl9IG11c3QgYmUgaW1wbGVtZW50ZWRgKX19Z2V0TWF4VGlja3MoZSl7bGV0e2hlaWdodDppfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxyPWkvMTU7aWYodGhpcy50aW1lUHJvcGVydHk9PT1mby5TVEVQKXtsZXRbbyxzXT1lLmRvbWFpbigpLGE9TWF0aC5tYXgocy1vKzEsMSk7cmV0dXJuIE1hdGgubWluKGEscil9cmV0dXJuIHJ9cmVuZGVyWUF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBlPXRoaXMubW9kZT09PU9yLk9WRVJMQVk/dGhpcy5zY2FsZXMuY291bnRTY2FsZTp0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlLGk9dGhpcy5nZXRNYXhUaWNrcyhlKSxyPWZ1bmN0aW9uKG4pe3JldHVybiBhaWUoMixuKX0oZSkudGlja3MoTWF0aC5tYXgoMixpKSk7ci50aWNrRm9ybWF0KHRoaXMuZ2V0WUF4aXNGb3JtYXR0ZXIoKSkscihaUCh0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQpKX1maW5kQ2xvc2VzdERhdHVtSW5kZXgoZSl7bGV0IGk9ZS50YXJnZXQscj1pO2Zvcig7aSYmaSE9PXRoaXMuaGlzdG9ncmFtcy5uYXRpdmVFbGVtZW50OylyPWksaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGk/QXJyYXkuZnJvbShpLmNoaWxkcmVuKS5pbmRleE9mKHIpOi0xfW9uTW91c2VNb3ZlRm9yVGVzdE9ubHkoZSl7cmV0dXJuIHRoaXMub25Nb3VzZU1vdmUoZSl9b25Nb3VzZU1vdmUoZSl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgaT1lLm9mZnNldFgscj1lLm9mZnNldFksbz10aGlzLmZpbmRDbG9zZXN0RGF0dW1JbmRleChlKTtpZihvPDApcmV0dXJuO2xldCBzPXRoaXMuc2NhbGVzLmJpblNjYWxlLmludmVydChpKSxhPXRoaXMuZGF0YVtvXSxsPXRoaXMuZ2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGEscyk7dGhpcy50b29sdGlwRGF0YT17dmFsdWU6e3Bvc2l0aW9uOnt4OmkseTpyfSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5mb3JtYXR0ZXJzLmNvdW50KGwueSk6YFN0ZXA6ICR7dGhpcy5mb3JtYXR0ZXJzLnN0ZXAoYS5zdGVwKX1gfSx4QXhpczp7cG9zaXRpb246dGhpcy5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQobCkueCxsYWJlbDp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKCRNKGwpKX0seUF4aXM6e3Bvc2l0aW9uOnRoaXMuc2NhbGVzLmNvdW50U2NhbGUodGhpcy5tb2RlPT09T3IuT0ZGU0VUPzA6bC55KSxsYWJlbDp0aGlzLm1vZGU9PT1Pci5PRkZTRVQ/dGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKHRoaXMuZ2V0VGltZVZhbHVlKGEpKTp0aGlzLmZvcm1hdHRlcnMuYmluTnVtYmVyKGwueSl9LHhQb3NpdGlvbkluQmluQ29vcmQ6cyxjbG9zZXN0RGF0dW06YSxjbG9zZXN0QmluOmx9LHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItaGlzdG9ncmFtIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFFHZSw1KSxsdChLR2UsNSksbHQoWkdlLDUpLGx0KEpHZSw1KSxsdCgkR2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWFpbj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS54QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS55QXhpcz1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5jb250ZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmhpc3RvZ3JhbXM9ci5maXJzdCl9fSxpbnB1dHM6e21vZGU6Im1vZGUiLHRpbWVQcm9wZXJ0eToidGltZVByb3BlcnR5Iixjb2xvcjoiY29sb3IiLGRhdGE6ImRhdGEiLHRpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24ifSxvdXRwdXRzOntvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZmVhdHVyZXM6W3p0XSxkZWNsczoyMix2YXJzOjE1LGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJvblJlc2l6ZSIsIm9uVmlzaWJpbGl0eUNoYW5nZSJdLFsibWFpbiIsIiJdLFsxLCJheGlzIiwieC1heGlzIl0sWyJ4QXhpcyIsIiJdLFsxLCJ0b29sdGlwIl0sWzMsInRyYW5zZm9ybSIsNCwibmdJZiJdLFsxLCJheGlzIiwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQiXSxbImNvbnRlbnQiLCIiXSxbMSwiZ3JpZCJdLFszLCJ0cmFuc2Zvcm0iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiaGlzdG9ncmFtcyIsIiJdLFszLCJ0cmFuc2Zvcm0iLCJoaXN0b2dyYW0iLCJuby1jb2xvciIsImNvbG9yIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJjbGFzcyIsInRvb2x0aXAiLDQsIm5nSWYiXSxbMSwiaGlzdG9ncmFtLWNhcmQtZm9iIiwzLCJ0aW1lU2VsZWN0aW9uIiwic3RlcHMiLCJ0ZW1wb3JhbFNjYWxlIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXSxbIngyIiwiMTAwJSIsMSwidGljayJdLFszLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIl0sWyJjbGFzcyIsImJhc2VsaW5lIiwieDIiLCIxMDAlIiw0LCJuZ0lmIl0sWyJyIiwiMiIsMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWyJ4MiIsIjEwMCUiLDEsImJhc2VsaW5lIl0sWyJyIiwiMiJdLFsiciIsIjIiLDQsIm5nSWYiXSxbMSwidmFsdWUtbGFiZWwiXSxbIngiLCIzIiwieSIsIi0zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDAsMSksUCgib25SZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGpuKCksZygyLCJzdmciLDIpLE4oMywiZyIsbnVsbCwzKSxnKDUsImciLDQpLEUoNixlNmUsMywzLCJnIiw1KSx2KCkoKSxTYSgpLGcoNywiZGl2Iiw2KSxqbigpLGcoOCwic3ZnIiksTig5LCJnIixudWxsLDcpLGcoMTEsImciLDQpLEUoMTIsdDZlLDMsNCwiZyIsNSksdigpKCksRSgxMyxuNmUsMiwzLCJuZy1jb250YWluZXIiLDgpLHYoKSxnKDE0LCJzdmciLDksMTApKDE2LCJnIiwxMSksRSgxNyxpNmUsMiwyLCJnIiwxMiksdigpLGcoMTgsImciLG51bGwsMTMpLEUoMjAsczZlLDQsMTEsImciLDE0KSx2KCksRSgyMSxsNmUsNyw3LCJnIiwxNSksdigpKCkpLDImZSYmKGVhKCJtYWluICIraS5tb2RlKyIgIitpLnRpbWVQcm9wZXJ0eSkseCg2KSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDUpLE90KCJ0cmFuc2Zvcm0iLGkuZ2V0Q3NzVHJhbnNsYXRlUHgoOSwwKSkseCgxKSxiKCJuZ0lmIixpLnRvb2x0aXBEYXRhKSx4KDEpLGIoIm5nSWYiLGkuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZChpLnRpbWVTZWxlY3Rpb24pKSx4KDQpLGIoIm5nRm9yT2YiLGkuZ2V0R3JpZFRpY2tZTG9jcygpKSx4KDEpLGF0KCJoaXN0b2dyYW1zIiwhMCkoImxpbmtlZC10aW1lLXNpbmdsZS1zdGVwIixpLnRpbWVTZWxlY3Rpb24mJiFpLnRpbWVTZWxlY3Rpb24uZW5kKSx4KDIpLGIoIm5nRm9yT2YiLGkuZGF0YSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5V2FsbFRpbWUpLHgoMSksYigibmdJZiIsaS50b29sdGlwRGF0YSkpfSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX1bX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjEwcHh9Lm1haW5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJjb250ZW50IHktYXhpcyIgIngtYXhpcyAuIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDUwcHg7Z3JpZC10ZW1wbGF0ZS1yb3dzOjFmciAzMHB4fS5tYWluLndhbGxfdGltZVtfbmdjb250ZW50LSVDT01QJV17Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciA3NXB4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjEwcHh9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcn0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17ZG9taW5hbnQtYmFzZWxpbmU6aWRlb2dyYXBoaWM7dGV4dC1hbmNob3I6c3RhcnR9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgIHtjb2xvcjojNjE2MTYxO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmRvbWFpbiwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayB0ZXh0e2Rpc3BsYXk6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrOm50aC1jaGlsZCgybisxKSB0ZXh0e2Rpc3BsYXk6aW5pdGlhbH1zdmdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9pbnRlci1ldmVudHM6dmlzaWJsZVBhaW50ZWR9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSwgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czpub25lfXN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBnW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOngtYXhpc30ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpoYW5naW5nO3RleHQtYW5jaG9yOm1pZGRsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eS1heGlzO292ZXJmbG93OmNsaXAgdmlzaWJsZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTptaWRkbGU7dGV4dC1hbmNob3I6c3RhcnR9Lmhpc3RvZ3JhbS1jYXJkLWZvYltfbmdjb250ZW50LSVDT01QJV17bGVmdDo5cHg7cG9zaXRpb246YWJzb2x1dGV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiNkZGR9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAudGljayBsaW5lLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7c3Ryb2tlOiM1NTV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpjb250ZW50O292ZXJmbG93OnZpc2libGU7ei1pbmRleDoxfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZS1kYXNoYXJyYXk6Mn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWxsOmN1cnJlbnRDb2xvcjtzdHJva2Utb3BhY2l0eTouNjtzdHJva2Utd2lkdGg6MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZmlsdGVyOmRyb3Atc2hhZG93KDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjYpKTtzdHJva2U6I2ZmZjt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmJhc2VsaW5lW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMTtzdHJva2Utd2lkdGg6MXB4O3N0cm9rZTpjdXJyZW50Q29sb3I7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eToxO3N0cm9rZTpjdXJyZW50Q29sb3I7ZmlsbDpyZ2JhKDAsMCwwLDApfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyMjEsMjIxLDIyMSwuNCkgIWltcG9ydGFudH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlLW9wYWNpdHk6LjJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDUxLDUxLDUxLC40KSAhaW1wb3J0YW50fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXNbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX0ub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzAwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtcy5saW5rZWQtdGltZS1zaW5nbGUtc3RlcFtfbmdjb250ZW50LSVDT01QJV0gICBbX25nY29udGVudC0lQ09NUCVdOm5vdCgubm8tY29sb3IpICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOiNmZmZ9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmV7ZGlzcGxheTpub25lfS5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGwtb3BhY2l0eTowO3N0cm9rZTpjdXJyZW50Q29sb3J9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCAubWFpbltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGp6KG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkpPT5NYXRoLm1heChlLHQoaSkpLC0xLzApfWZ1bmN0aW9uIGljZShuLHQsZSl7ZXx8KGU9dCk7bGV0IGk9MS8wLHI9LTEvMDtmb3IobGV0IG8gb2YgbilpPU1hdGgubWluKGksdChvKSkscj1NYXRoLm1heChyLGUobykpO3JldHVybnttaW46aSxtYXg6cn19ZnVuY3Rpb24gJE0obil7cmV0dXJuIG4ueCsuNSpuLmR4fWZ1bmN0aW9uIGQ2ZShuLHQpezEmbiYmKGcoMCwic3BhbiIsMTQpLE4oMSwibWF0LXNwaW5uZXIiLDE1KSx2KCkpfWZ1bmN0aW9uIHA2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInRiLWhpc3RvZ3JhbSIsMTYpLFAoIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvbkxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgpO2IoImRhdGEiLGUuZGF0YSkoIm1vZGUiLGUubW9kZSkoInRpbWVQcm9wZXJ0eSIsZS50aW1lUHJvcGVydHkoZS54QXhpc1R5cGUpKSgiY29sb3IiLGUucnVuQ29sb3JTY2FsZShlLnJ1bklkKSkoInRpbWVTZWxlY3Rpb24iLGUuY29udmVydFRvVGltZVNlbGVjdGlvbihlLmxpbmtlZFRpbWVTZWxlY3Rpb24pKX19ZnVuY3Rpb24gaDZlKG4sdCl7MSZuJiYoZygwLCJkaXYiLDE4KSxEKDEsIiBEYXRhIGZhaWxlZCB0byBsb2FkLiAiKSx2KCkpfWZ1bmN0aW9uIGY2ZShuLHQpe2lmKDEmbiYmRSgwLGg2ZSwyLDAsImRpdiIsMTcpLDImbil7bGV0IGU9TSgpO2IoIm5nSWYiLGUubG9hZFN0YXRlPT09ZS5EYXRhTG9hZFN0YXRlLkZBSUxFRCl9fXZhciBtNmU9ZnVuY3Rpb24obil7cmV0dXJue2JhY2tncm91bmRDb2xvcjpufX0scmNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhdGFMb2FkU3RhdGU9RWUsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uTGlua2VkVGltZVRvZ2dsZWQ9bmV3IEd9dGltZVByb3BlcnR5KGUpe3N3aXRjaChlKXtjYXNlIFlpLlNURVA6cmV0dXJuIGZvLlNURVA7Y2FzZSBZaS5XQUxMX1RJTUU6cmV0dXJuIGZvLldBTExfVElNRTtjYXNlIFlpLlJFTEFUSVZFOnJldHVybiBmby5SRUxBVElWRTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCB4QXhpc1R5cGUgZm9yIGhpc3RvZ3JhbSB0aW1lIHByb3BlcnR5LiIpfX1jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUpe3JldHVybiBudWxsPT09ZT9udWxsOntzdGFydDp7c3RlcDplLnN0YXJ0U3RlcH0sZW5kOmUuZW5kU3RlcD97c3RlcDplLmVuZFN0ZXB9Om51bGx9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiXV0saW5wdXRzOntsb2FkU3RhdGU6ImxvYWRTdGF0ZSIsdGl0bGU6InRpdGxlIix0YWc6InRhZyIscnVuSWQ6InJ1bklkIixkYXRhOiJkYXRhIixtb2RlOiJtb2RlIix4QXhpc1R5cGU6InhBeGlzVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsc2hvd0Z1bGxXaWR0aDoic2hvd0Z1bGxXaWR0aCIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksTigyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSx2KCksZyg0LCJkaXYiLDQpLE4oNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksdigpLGcoNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxOKDksIm1hdC1pY29uIiw5KSx2KCksZygxMCwiYnV0dG9uIiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxOKDExLCJtYXQtaWNvbiIsOSksdigpKCksRSgxMixkNmUsMiwwLCJzcGFuIiwxMSksdigpLEUoMTMscDZlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksRSgxNCxmNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxlbikpLDImZSl7bGV0IHI9c3QoMTUpO3goMiksYigidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLHgoMSksYigiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCkseCgyKSxiKCJuZ1N0eWxlIixIbigxMixtNmUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSkseCgxKSxiKCJydW5JZCIsaS5ydW5JZCkseCgyKSx6ZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLHgoMSksYigic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSx4KDIpLGIoInN2Z0ljb24iLGkuc2hvd0Z1bGxXaWR0aD8iZnVsbHNjcmVlbl9leGl0XzI0cHgiOiJmdWxsc2NyZWVuXzI0cHgiKSx4KDEpLGIoIm5nSWYiLGkubG9hZFN0YXRlPT09aS5EYXRhTG9hZFN0YXRlLkxPQURJTkcpLHgoMSksYigibmdJZiIsaS5kYXRhJiZpLmRhdGEubGVuZ3RoKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSx3cCxpTywkbixabix2byxVUCx2dix5dl0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6MzE4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87cGFkZGluZzoxNnB4O3BhZGRpbmctdG9wOjRweH0uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWFyZWFzOiJ0YWcgY29udHJvbHMiICJydW4gc3Bpbm5lciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciBhdXRvO2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1ib3R0b206NHB4fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweDtncmlkLWFyZWE6dGFnO292ZXJmbG93OmhpZGRlbn0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHZpcy1zZWxlY3RlZC10aW1lLWNsaXBwZWRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjB9LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTpydW47ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtmb250LXNpemU6MTNweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kb3RbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxM3B4O2hlaWdodDoxM3B4O2JvcmRlci1yYWRpdXM6NTAlO21hcmdpbi1yaWdodDo0cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAucnVuLXRleHRbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO21heC13aWR0aDoxMjBweH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7d2hpdGUtc3BhY2U6bm93cmFwO2dyaWQtYXJlYTpjb250cm9scztqdXN0aWZ5LXNlbGY6ZmxleC1lbmQ7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dyaWQtYXJlYTpzcGlubmVyO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9bWF0LXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde3RvcDowO3JpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGV9dGItaGlzdG9ncmFtW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxZW07Zm9udC1zaXplOjEzcHh9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxvY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5tb2RlJD10aGlzLnN0b3JlLnNlbGVjdChKRCksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJ1KSx0aGlzLnNob3dGdWxsV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KG1jKS5waXBlKEIoaT0+aVt0aGlzLmNhcmRJZF0/LmZ1bGxXaWR0aCkpfWlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PVduLkhJU1RPR1JBTVN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY3Yoe2NhcmRJZDp0aGlzLmNhcmRJZH0pKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KFNsLHRoaXMuY2FyZElkKS5waXBlKEhlKG89PiEhbyYmdGhpcy5pc0hpc3RvZ3JhbUNhcmRNZXRhZGF0YShvKSksQihvPT5vKSkscj1wbihbaSx0aGlzLnN0b3JlLnNlbGVjdChMcCx0aGlzLmNhcmRJZCldKTt0aGlzLmRhdGEkPXIucGlwZShCKChbbyxzXSk9PntsZXQgYT1vLnJ1bklkO3JldHVybiBzJiZzLmhhc093blByb3BlcnR5KGEpP2Z1bmN0aW9uKG4sdD0zMCl7aWYoIW4ubGVuZ3RofHx0PDEpcmV0dXJuW107bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bnVsbCxlPW51bGw7Zm9yKGxldHtiaW5zOml9b2Ygbil7aWYoIWkubGVuZ3RoKWNvbnRpbnVlO2xldCByPWlbaS5sZW5ndGgtMV0sbz1pWzBdLngscz1yLngrci5keDsobnVsbD09PXR8fG88dCkmJih0PW8pLChudWxsPT09ZXx8cz5lKSYmKGU9cyl9cmV0dXJuIG51bGw9PT10fHxudWxsPT09ZT9udWxsOntsZWZ0OnQscmlnaHQ6ZX19KG4pO3JldHVybiBlJiZlLmxlZnQ9PT1lLnJpZ2h0JiYoZS5yaWdodD0xLjEqZS5yaWdodCsxLGUubGVmdD1lLmxlZnQvMS4xLTEpLG4ubWFwKGk9Pih7c3RlcDppLnN0ZXAsd2FsbFRpbWU6aS53YWxsVGltZSxiaW5zOmU/ekdlKGkuYmlucyxlLHQpOltdfSkpfShzW2FdLm1hcCh1PT57bGV0e3dhbGxUaW1lOmQsc3RlcDpwfT11O3JldHVybnt3YWxsVGltZTpkLHN0ZXA6cCxiaW5zOnUuYmlucy5tYXAoZj0+KHt4OmYubWluLGR4OmYubWF4LWYubWluLHk6Zi5jb3VudH0pKX19KSk6W119KSksdGhpcy5zdGVwcyQ9dGhpcy5kYXRhJC5waXBlKEIobz0+by5tYXAocz0+cy5zdGVwKSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLnN0ZXBzJCx0aGlzLnN0b3JlLnNlbGVjdChIcCldKS5waXBlKEIoKFtvLHMsYV0pPT57aWYoIW8pcmV0dXJuIG51bGw7bGV0IGw9MS8wLGM9LTEvMDtmb3IobGV0IHAgb2YgcylsPU1hdGgubWluKHAsbCksYz1NYXRoLm1heChwLGMpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKG51bGwhPT1uLmVuZFN0ZXApcmV0dXJuIG47bGV0IGU9ZnVuY3Rpb24obix0KXtsZXQgZT0xLzAsaT1udWxsO2ZvcihsZXQgciBvZiB0KXtsZXQgbz1NYXRoLmFicyhuLXIpO288ZSYmKGU9byxpPXIpfXJldHVybiBpfShuLnN0YXJ0U3RlcCx0KTtyZXR1cm4gbnVsbCE9PWU/ey4uLm4sc3RhcnRTdGVwOmV9Om59KGNfKGxWKG8sYSksbCxjKSxzKX0pKSx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQ9cG4oW3RoaXMuc3RvcmUuc2VsZWN0KFVwKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kXSkucGlwZShCKChbbyxzXSk9Pm8mJnMmJiFzLmNsaXBwZWQmJm51bGw9PT1vLmVuZCYmby5zdGFydC5zdGVwIT09cy5zdGFydFN0ZXApKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTnAsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoQihvPT5vLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEIobz0+Z3Yobyx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoQihvPT5vLnJ1bklkKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQnAsdGhpcy5jYXJkSWQpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChvaChlKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goc2goe2FmZm9yZGFuY2U6V2EuRk9CX0RFU0VMRUNUfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siaGlzdG9ncmFtLWNhcmQiXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntwaW5TdGF0ZUNoYW5nZWQ6InBpblN0YXRlQ2hhbmdlZCJ9LGRlY2xzOjEyLHZhcnM6MzQsY29uc3RzOltbMywibG9hZFN0YXRlIiwidGl0bGUiLCJ0YWciLCJydW5JZCIsImRhdGEiLCJtb2RlIiwieEF4aXNUeXBlIiwicnVuQ29sb3JTY2FsZSIsInNob3dGdWxsV2lkdGgiLCJpc1Bpbm5lZCIsImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJvbkZ1bGxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCIsMCksUCgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25MaW5rZWRUaW1lVG9nZ2xlZCgpfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSxqKDExLCJhc3luYyIpLHYoKSksMiZlJiZiKCJsb2FkU3RhdGUiLFcoMSwxMixpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFcoMiwxNCxpLnRpdGxlJCkpKCJ0YWciLFcoMywxNixpLnRhZyQpKSgicnVuSWQiLFcoNCwxOCxpLnJ1bklkJCkpKCJkYXRhIixXKDUsMjAsaS5kYXRhJCkpKCJtb2RlIixXKDYsMjIsaS5tb2RlJCkpKCJ4QXhpc1R5cGUiLFcoNywyNCxpLnhBeGlzVHlwZSQpKSgicnVuQ29sb3JTY2FsZSIsaS5ydW5Db2xvclNjYWxlKSgic2hvd0Z1bGxXaWR0aCIsVyg4LDI2LGkuc2hvd0Z1bGxXaWR0aCQpKSgiaXNQaW5uZWQiLFcoOSwyOCxpLmlzUGlubmVkJCkpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLFcoMTAsMzAsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFcoMTEsMzIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpfSxkZXBlbmRlbmNpZXM6W3JjZSxmdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImltYWdlLWNhcmQiLDYpLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKDIpLm9uUGluU3RhdGVDaGFuZ2VkKCkpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLGUucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIHk2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNjYWxhci1jYXJkIiw3KSxQKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMikub25QaW5TdGF0ZUNoYW5nZWQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19ZnVuY3Rpb24gYjZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaGlzdG9ncmFtLWNhcmQiLDgpLFAoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpKCJydW5Db2xvclNjYWxlIixlLnJ1bkNvbG9yU2NhbGUpfX1mdW5jdGlvbiB4NmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxxZSgiUGxhY2Vob2xkZXIgZXJyb3IgZm9yOiAiLGUuY2FyZElkLCIiKX19ZnVuY3Rpb24gQzZlKG4sdCl7aWYoMSZuJiYoS3QoMCwxKSxFKDEsdjZlLDEsMywiaW1hZ2UtY2FyZCIsMiksRSgyLHk2ZSwxLDIsInNjYWxhci1jYXJkIiwzKSxFKDMsYjZlLDEsMywiaGlzdG9ncmFtLWNhcmQiLDQpLEUoNCx4NmUsMiwxLCJkaXYiLDUpLFp0KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpblR5cGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSU1BR0VTKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5UeXBlLlNDQUxBUlMpLHgoMSksYigibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9fXZhciBzY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgR31vbkZ1bGxXaWR0aENoYW5nZWQoZSl7dGhpcy5mdWxsV2lkdGhDaGFuZ2VkLmVtaXQoZSl9b25GdWxsSGVpZ2h0Q2hhbmdlZChlKXt0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkLmVtaXQoZSl9b25QaW5TdGF0ZUNoYW5nZWQoKXt0aGlzLnBpblN0YXRlQ2hhbmdlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbImNhcmQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0V2ZXJWaXNpYmxlOiJpc0V2ZXJWaXNpYmxlIixjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHBsdWdpblR5cGU6InBsdWdpblR5cGUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBpblN0YXRlQ2hhbmdlZCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwicGluU3RhdGVDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAsQzZlLDUsNCwibmctY29udGFpbmVyIiwwKSwyJmUmJmIoIm5nSWYiLGkuaXNFdmVyVmlzaWJsZSl9LGRlcGVuZGVuY2llczpbWGUsaHIsSXIsQ3AsS25lLGVjZSxvY2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGFjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzRXZlclZpc2libGU9ITEsdGhpcy5mdWxsV2lkdGhDaGFuZ2VkPW5ldyBHLHRoaXMuZnVsbEhlaWdodENoYW5nZWQ9bmV3IEcsdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdCh2XykucGlwZShiZygzNTAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSksQihpPT5yPT5pLmhhc093blByb3BlcnR5KHIpP2lbcl06IiNmZmYiKSl9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzRXZlclZpc2libGU9dGhpcy5pc0V2ZXJWaXNpYmxlfHxlfW9uRnVsbFdpZHRoQ2hhbmdlZChlKXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdChlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdChlKX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMuc3RvcmUuc2VsZWN0KEJwLHRoaXMuY2FyZElkKS5waXBlKEh0KDEpLEd0KHRoaXMuc3RvcmUuc2VsZWN0KGNaKSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkdih7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6aSx3YXNQaW5uZWQ6ZX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRnVsbFdpZHRoQ2hhbmdlZChvKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsSGVpZ2h0Q2hhbmdlZChvKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigiaXNFdmVyVmlzaWJsZSIsaS5pc0V2ZXJWaXNpYmxlKSgiY2FyZElkIixpLmNhcmRJZCkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIixpLnBsdWdpblR5cGUpKCJydW5Db2xvclNjYWxlIixXKDEsNSxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbbXYsc2NlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gRTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgVDZlPWZ1bmN0aW9uKG4sdCl7cmV0dXJueyJmdWxsLXdpZHRoIjpuLCJmdWxsLWhlaWdodCI6dH19O2Z1bmN0aW9uIEQ2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNSkoMSwiY2FyZC12aWV3Iiw2KSxQKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtsZXQgcz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9cmUoZSkuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocy5jYXJkSWQscikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsdG8oNixUNmUsaS5jYXJkc0F0RnVsbFdpZHRoLmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0uZnVsbFdpZHRoKSxpLmNhcmRzQXRGdWxsSGVpZ2h0LmhhcyhlLmNhcmRJZCl8fChudWxsPT1pLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0/bnVsbDppLmNhcmRTdGF0ZU1hcFtlLmNhcmRJZF0udGFibGVFeHBhbmRlZCkpKSx4KDEpLGIoImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGkuZ3JvdXBOYW1lKSgicGx1Z2luVHlwZSIsZS5wbHVnaW4pKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSgiY2FyZExhenlMb2FkZXIiLGUuY2FyZElkKX19ZnVuY3Rpb24gQTZlKG4sdCl7MSZuJiZBaSgwKX12YXIgSTZlPWZ1bmN0aW9uKCl7cmV0dXJue2lzQm90dG9tQ29udHJvbDohMX19LFA2ZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITB9fTtmdW5jdGlvbiBSNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIpLEUoMSxFNmUsMSwwLCJuZy1jb250YWluZXIiLDIpLGcoMiwiZGl2IiwzKSxFKDMsRDZlLDIsOSwiZGl2Iiw0KSx2KCksRSg0LEE2ZSwxLDAsIm5nLWNvbnRhaW5lciIsMiksdigpKSwyJm4pe2xldCBlPU0oKSxpPXN0KDIpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCg4LEk2ZSkpLHgoMSksT3QoImdyaWQtdGVtcGxhdGUtY29sdW1ucyIsZS5ncmlkVGVtcGxhdGVDb2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlDYXJkcykseCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDksUDZlKSl9fWZ1bmN0aW9uIE82ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImJ1dHRvbiIsMTIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZShlKTtsZXQgbz1NKDMpO3JldHVybiBvZShvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgtMSxyLnRhcmdldCkpfSksRCgxLCIgUHJldmlvdXMgIiksdigpfTImbiYmYigiZGlzYWJsZWQiLDA9PT1NKDMpLnBhZ2VJbmRleCl9ZnVuY3Rpb24gazZlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwic3BhbiIsMTUpKDEsImlucHV0IiwxNiksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDQpLm9uUGFnaW5hdGlvbklucHV0Q2hhbmdlKHIpKX0pLHYoKSxEKDIpLHYoKX1pZigyJm4pe2xldCBlPU0oNCk7eCgxKSxiKCJ2YWx1ZSIsZS5wYWdlSW5kZXgrMSkoIm1heCIsZS5udW1QYWdlcykseCgxKSxxZSgiIG9mICIsZS5udW1QYWdlcywiIil9fWZ1bmN0aW9uIEY2ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsInNwYW4iKSxFKDEsazZlLDMsMywic3BhbiIsMTMpLGcoMiwiYnV0dG9uIiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMyk7cmV0dXJuIG9lKG8uaGFuZGxlUGFnZUNoYW5nZShvLnBhZ2VJbmRleCsxLHIudGFyZ2V0KSl9KSxEKDMsIiBOZXh0ICIpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pc0JvdHRvbUNvbnRyb2wsaT1NKCk7eCgxKSxiKCJuZ0lmIixpLnNob3dQYWdpbmF0aW9uSW5wdXQoZSkpLHgoMSksYigiZGlzYWJsZWQiLGkucGFnZUluZGV4KzE+PWkubnVtUGFnZXMpfX1mdW5jdGlvbiBONmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsOCkoMSwic3BhbiIsOSksRSgyLE82ZSwyLDEsImJ1dHRvbiIsMTApLHYoKSxnKDMsInNwYW4iLDExKSxFKDQsRjZlLDQsMiwic3BhbiIsMCksdigpKCkpLDImbil7bGV0IGU9TSgyKTt4KDIpLGIoIm5nSWYiLGUuc2hvd1BhZ2luYXRpb25Db250cm9scykseCgyKSxiKCJuZ0lmIixlLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfX1mdW5jdGlvbiBMNmUobix0KXsxJm4mJkUoMCxONmUsNSwyLCJkaXYiLDcpLDImbiYmYigibmdJZiIsTSgpLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpfXZhciBsY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNka1Njcm9sbGFibGU9ZSx0aGlzLlBsdWdpblR5cGU9V24sdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49IiIsdGhpcy5jYXJkc0F0RnVsbFdpZHRoPW5ldyBTZXQsdGhpcy5jYXJkc0F0RnVsbEhlaWdodD1uZXcgU2V0LHRoaXMucGFnZUluZGV4Q2hhbmdlZD1uZXcgR31uZ09uSW5pdCgpe3RoaXMuaXNDYXJkV2lkdGhWYWxpZCh0aGlzLmNhcmRNaW5XaWR0aCkmJih0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj1gcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KCR7dGhpcy5jYXJkTWluV2lkdGh9cHgsIDFmcikpYCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5jYXJkTWluV2lkdGgpe2xldCBpPWUuY2FyZE1pbldpZHRoLmN1cnJlbnRWYWx1ZTt0aGlzLmlzQ2FyZFdpZHRoVmFsaWQoaSk/KHRoaXMuY2FyZE1pbldpZHRoPWksdGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49YHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgke3RoaXMuY2FyZE1pbldpZHRofXB4LCAxZnIpKWApOnRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPSIifX1pc0NhcmRXaWR0aFZhbGlkKGUpe3JldHVybiBlJiZlPj0zMzUmJmU8PTczNX1zaG93UGFnaW5hdGlvbklucHV0KGUpe3JldHVybiBlfWhhbmRsZVBhZ2VDaGFuZ2UoZSxpKXtsZXQgcj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtzZXRUaW1lb3V0KCgpPT57dGhpcy5zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihpLHIpfSwwKSx0aGlzLnBhZ2VJbmRleENoYW5nZWQuZW1pdChlKX1zY3JvbGxUb0tlZXBUYXJnZXRQb3NpdGlvbihlLGkpe2xldCByPXRoaXMuY2RrU2Nyb2xsYWJsZT8uZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ciYmci5zY3JvbGxUbygwLGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWkrci5zY3JvbGxUb3ApfXRyYWNrQnlDYXJkcyhlLGkpe3JldHVybiBpLmNhcmRJZH1vblBhZ2luYXRpb25JbnB1dENoYW5nZShlKXtsZXQgaT1lLnRhcmdldDtpZigiaW5wdXQiPT09ZS50eXBlJiYiIj09PWkudmFsdWUpcmV0dXJuO2xldCByPU51bWJlcihpLnZhbHVlKS0xLG89TWF0aC5taW4oTWF0aC5tYXgoMCxyKSx0aGlzLm51bVBhZ2VzLTEpO2kudmFsdWUhPT1TdHJpbmcobysxKSYmKGkudmFsdWU9U3RyaW5nKG8rMSkpLHRoaXMuaGFuZGxlUGFnZUNoYW5nZShvLGkpfW9uRnVsbFdpZHRoQ2hhbmdlZChlLGkpe2k/dGhpcy5jYXJkc0F0RnVsbFdpZHRoLmFkZChlKTp0aGlzLmNhcmRzQXRGdWxsV2lkdGguZGVsZXRlKGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSxpKXtpP3RoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuYWRkKGUpOnRoaXMuY2FyZHNBdEZ1bGxIZWlnaHQuZGVsZXRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFlwLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiXV0saW5wdXRzOntpc0dyb3VwRXhwYW5kZWQ6ImlzR3JvdXBFeHBhbmRlZCIscGFnZUluZGV4OiJwYWdlSW5kZXgiLG51bVBhZ2VzOiJudW1QYWdlcyIsY2FyZElkc1dpdGhNZXRhZGF0YToiY2FyZElkc1dpdGhNZXRhZGF0YSIsY2FyZE1pbldpZHRoOiJjYXJkTWluV2lkdGgiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixzaG93UGFnaW5hdGlvbkNvbnRyb2xzOiJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixjYXJkU3RhdGVNYXA6ImNhcmRTdGF0ZU1hcCJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQifSxmZWF0dXJlczpbenRdLGRlY2xzOjMsdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdJZiJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWyJjbGFzcyIsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLXNwYWNlIiwzLCJuZ0NsYXNzIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInByZXYiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFI2ZSw1LDEwLCJkaXYiLDApLEUoMSxMNmUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLGVuKSksMiZlJiZiKCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCl9LGRlcGVuZGVuY2llczpbSW5lLGFjZSxQbix5bixYZSxObywkbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOmNvbnRlbnR9LmNhcmQtZ3JpZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzM1cHgsIDFmcikpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH0uY2FyZC1zcGFjZS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWNvbHVtbi1zdGFydDoxO2dyaWQtY29sdW1uLWVuZDotMX0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo0ODBweH0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfWNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250YWluOmxheW91dCBwYWludDtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MzIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpjZW50ZXI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0fS5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNjE2MTYxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmdyb3VwTmFtZSQ9bmV3IFZyKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgVnIoMCksdGhpcy5pdGVtcyQ9bmV3IFZyKFtdKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlLHRoaXMuY2FyZFN0YXRlTWFwJD10aGlzLnN0b3JlLnNlbGVjdChtYyksdGhpcy5udW1QYWdlcyQ9cG4oW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KGFhLmdldFBhZ2VTaXplKV0pLnBpcGUoQigoW2kscl0pPT5NYXRoLmNlaWwoaS5sZW5ndGgvcikpKSx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9dGhpcy5ncm91cE5hbWUkLnBpcGUodmkoaT0+bnVsbCE9PWk/dGhpcy5zdG9yZS5zZWxlY3QoaUEsaSk6anQoITApKSksdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJD10aGlzLm51bVBhZ2VzJC5waXBlKEIoaT0+aT4xKSksdGhpcy5ub3JtYWxpemVkUGFnZUluZGV4JD1wbihbdGhpcy5wYWdlSW5kZXgkLHRoaXMubnVtUGFnZXMkXSkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLE50KChbaSxyXSk9PnswIT09ciYmKGk+PXI/dGhpcy5wYWdlSW5kZXgkLm5leHQoci0xKTppPDAmJnRoaXMucGFnZUluZGV4JC5uZXh0KDApKX0pLEIoKFtpLHJdKT0+TWF0aC5taW4oTWF0aC5tYXgoaSwwKSxyLTEpKSxRcygxKSksdGhpcy5wYWdlZEl0ZW1zJD1wbihbdGhpcy5pdGVtcyQsdGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0UGFnZVNpemUpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQsdGhpcy5pc0dyb3VwRXhwYW5kZWQkXSkucGlwZShCKChbaSxyLG8sc10pPT5pLnNsaWNlKHIqbyxyKm8rKHM/cjowKSkpKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoaF8pfW5nT25DaGFuZ2VzKGUpe2UuY2FyZElkc1dpdGhNZXRhZGF0YSYmdGhpcy5pdGVtcyQubmV4dCh0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEpLGUuZ3JvdXBOYW1lJiZ0aGlzLmdyb3VwTmFtZSQubmV4dCh0aGlzLmdyb3VwTmFtZSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW9uUGFnZUluZGV4Q2hhbmdlZChlKXt0aGlzLnBhZ2VJbmRleCQubmV4dChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtY2FyZC1ncmlkIl1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZmVhdHVyZXM6W3p0XSxkZWNsczo4LHZhcnM6MjIsY29uc3RzOltbMywiaXNHcm91cEV4cGFuZGVkIiwicGFnZUluZGV4IiwibnVtUGFnZXMiLCJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRNaW5XaWR0aCIsImNhcmRPYnNlcnZlciIsImNhcmRTdGF0ZU1hcCIsInBhZ2VJbmRleENoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsIm1ldHJpY3MtY2FyZC1ncmlkLWNvbXBvbmVudCIsMCksUCgicGFnZUluZGV4Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlSW5kZXhDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLHYoKSksMiZlJiZiKCJpc0dyb3VwRXhwYW5kZWQiLFcoMSw4LGkuaXNHcm91cEV4cGFuZGVkJCkpKCJwYWdlSW5kZXgiLFcoMiwxMCxpLm5vcm1hbGl6ZWRQYWdlSW5kZXgkKSkoIm51bVBhZ2VzIixXKDMsMTIsaS5udW1QYWdlcyQpKSgic2hvd1BhZ2luYXRpb25Db250cm9scyIsVyg0LDE0LGkuc2hvd1BhZ2luYXRpb25Db250cm9scyQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVyg1LDE2LGkucGFnZWRJdGVtcyQpKSgiY2FyZE1pbldpZHRoIixXKDYsMTgsaS5jYXJkTWluV2lkdGgkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJjYXJkU3RhdGVNYXAiLFcoNywyMCxpLmNhcmRTdGF0ZU1hcCQpKX0sZGVwZW5kZW5jaWVzOltsY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFU2ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNyksRCgxKSxqKDIsIm51bWJlciIpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIixXKDIsMSxlLm51bWJlck9mQ2FyZHMpLCIgY2FyZHMiKX19ZnVuY3Rpb24gejZlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBqNmUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDkpfXZhciBjY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhci1jb21wb25lbnQiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyIsaXNHcm91cEV4cGFuZGVkOiJpc0dyb3VwRXhwYW5kZWQifSxvdXRwdXRzOntncm91cEV4cGFuc2lvblRvZ2dsZWQ6Imdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJ9LGRlY2xzOjksdmFyczo1LGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBhbGxvd3MgdXNlciB0byBleHBhbmQgYSB0YWcgZ3JvdXAu4pCfZmZhYTExNDcxYjg3OGE2ZGZmZTJlNjhjNmYzNzA2NGE5ZTA3NDg1M+KQnzUzODYwNTQzMjUyNzQ3NzkyNTg6RXhwYW5kIGdyb3VwYCxbWyJhcmlhLWxhYmVsIix0LDEsImdyb3VwLXRvb2xiYXIiLDMsImNsaWNrIl0sWzEsImdyb3VwLXRpdGxlLXdyYXBwZXIiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiLDMsInRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbMSwiZXhwYW5kLWdyb3VwLWljb24iXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImV4cGFuZE1vcmUiLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsic3ZnSWNvbiIsImV4cGFuZF9sZXNzXzI0cHgiXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiYnV0dG9uIiwwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5ncm91cEV4cGFuc2lvblRvZ2dsZWQuZW1pdCgpfSksZygxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxEKDMpLHYoKSxFKDQsVTZlLDMsMywic3BhbiIsMyksdigpLGcoNSwic3BhbiIsNCksRSg2LHo2ZSwxLDAsIm1hdC1pY29uIiw1KSxFKDcsajZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNixlbiksdigpKCkpLDImZSl7bGV0IHI9c3QoOCk7eCgyKSx4cigidGl0bGUiLGkuZ3JvdXBOYW1lKSx4KDEpLHl0KGkuZ3JvdXBOYW1lKSx4KDEpLGIoIm5nSWYiLGkubnVtYmVyT2ZDYXJkcz4xKSx4KDIpLGIoIm5nSWYiLGkuaXNHcm91cEV4cGFuZGVkKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltYZSxabix2bF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7Y29sb3I6IzIxMjEyMTt0b3A6LTFweDtkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtmb250OmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmNhcmQtZ3JvdXA6Zmlyc3Qtb2YtdHlwZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDowfVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmV4cGFuZC1ncm91cC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNzU3NTc1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWQsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6IzYxNjE2MX0uZ3JvdXAtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7dGV4dC1hbGlnbjpsZWZ0fS5ncm91cC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYxNjE2MTttYXJnaW4tbGVmdDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx1Y2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmlzR3JvdXBFeHBhbmRlZCQ9anQoITEpfW5nT25Jbml0KCl7dGhpcy5pc0dyb3VwRXhwYW5kZWQkPW51bGwhPT10aGlzLmdyb3VwTmFtZT90aGlzLnN0b3JlLnNlbGVjdChpQSx0aGlzLmdyb3VwTmFtZSk6anQoITEpfW9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl7aWYobnVsbD09PXRoaXMuZ3JvdXBOYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IGV4cGFuc2lvbiBjYW5ub3QgYmUgdG9nZ2xlZCB3aGVuIGdyb3VwTmFtZSBpcyBudWxsIik7dGhpcy5zdG9yZS5kaXNwYXRjaChUUCh7dGFnR3JvdXA6dGhpcy5ncm91cE5hbWV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixudW1iZXJPZkNhcmRzOiJudW1iZXJPZkNhcmRzIn0sZGVjbHM6Mix2YXJzOjUsY29uc3RzOltbMywibnVtYmVyT2ZDYXJkcyIsImlzR3JvdXBFeHBhbmRlZCIsImdyb3VwTmFtZSIsImdyb3VwRXhwYW5zaW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50IiwwKSxQKCJncm91cEV4cGFuc2lvblRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Hcm91cEV4cGFuc2lvblRvZ2dsZWQoKX0pLGooMSwiYXN5bmMiKSx2KCkpLDImZSYmYigibnVtYmVyT2ZDYXJkcyIsaS5udW1iZXJPZkNhcmRzKSgiaXNHcm91cEV4cGFuZGVkIixXKDEsMyxpLmlzR3JvdXBFeHBhbmRlZCQpKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSl9LGRlcGVuZGVuY2llczpbY2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBxNmUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMSksTigxLCJtZXRyaWNzLWNhcmQtZ3JvdXAtdG9vbGJhciIsMikoMiwibWV0cmljcy1jYXJkLWdyaWQiLDMpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKTt4KDEpLGIoIm51bWJlck9mQ2FyZHMiLGUuaXRlbXMubGVuZ3RoKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkseCgxKSxiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixlLml0ZW1zKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX12YXIgZGNlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9V259dHJhY2tCeUdyb3VwKGUsaSl7cmV0dXJuIGkuZ3JvdXBOYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRHcm91cHM6ImNhcmRHcm91cHMiLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6MSx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiY2FyZC1ncm91cCIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsImNhcmQtZ3JvdXAiXSxbMywibnVtYmVyT2ZDYXJkcyIsImdyb3VwTmFtZSJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIiwiZ3JvdXBOYW1lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZFKDAscTZlLDMsNSwiZGl2IiwwKSwyJmUmJmIoIm5nRm9yT2YiLGkuY2FyZEdyb3VwcykoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5R3JvdXApfSxkZXBlbmRlbmNpZXM6W3luLFB5LHVjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Rpc3BsYXk6ZmxleDtmbGV4Om5vbmU7aGVpZ2h0OjQycHg7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnN0aWNreTt0b3A6MDt6LWluZGV4OjE7Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgwLDAsMCwuMTUpfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMjU1LDI1NSwyNTUsLjE1KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRHcm91cHMkPXRoaXMuc3RvcmUuc2VsZWN0KHltKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxCKGk9PmtQKGkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JvdXBzIl1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJjYXJkR3JvdXBzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLWNhcmQtZ3JvdXBzLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpKSwyJmUmJmIoImNhcmRHcm91cHMiLFcoMSwyLGkuY2FyZEdyb3VwcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbZGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBRNmUobix0KXtpZigxJm4mJihnKDAsInNwYW4iKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSxxZSgiIGFuZCAiLGUuZ2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlLnBsdWdpblR5cGVzKSwiIHZpc3VhbGl6YXRpb24gZmlsdGVyIil9fXZhciBoY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmxpc3RGb3JtYXR0ZXI9bmV3IEludGwuTGlzdEZvcm1hdCh2b2lkIDAse3N0eWxlOiJsb25nIix0eXBlOiJkaXNqdW5jdGlvbiJ9KX1nZXRQbHVnaW5UeXBlRmlsdGVyU3RyaW5nKGUpe2xldCBpPVsuLi5lXS5tYXAocj0+e3N3aXRjaChyKXtjYXNlIFduLlNDQUxBUlM6cmV0dXJuInNjYWxhciI7Y2FzZSBXbi5JTUFHRVM6cmV0dXJuImltYWdlIjtjYXNlIFduLkhJU1RPR1JBTVM6cmV0dXJuImhpc3RvZ3JhbSI7ZGVmYXVsdDp0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUGxlYXNlIGltcGxlbWVudCBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBwbHVnaW4gdHlwZTogJHtyfWApfX0pO3JldHVybiB0aGlzLmxpc3RGb3JtYXR0ZXIuZm9ybWF0KGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiXV0saW5wdXRzOntwbHVnaW5UeXBlczoicGx1Z2luVHlwZXMiLHRhZ0ZpbHRlclJlZ2V4OiJ0YWdGaWx0ZXJSZWdleCIsdGFnQ291bnRzOiJ0YWdDb3VudHMifSxkZWNsczo2LHZhcnM6NSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRCgwLCJObyBtYXRjaGVzIGZvciB0YWcgZmlsdGVyICIpLGcoMSwiY29kZSIpLEQoMiksdigpLEUoMyxRNmUsMiwxLCJzcGFuIiwwKSxEKDQpLGooNSwibnVtYmVyIikpLDImZSYmKHgoMikscWUoIi8iLGkudGFnRmlsdGVyUmVnZXgsIi8iKSx4KDEpLGIoIm5nSWYiLGkucGx1Z2luVHlwZXMuc2l6ZSkseCgxKSxxZSgiIG91dCBvZiAiLFcoNSwzLGkudGFnQ291bnRzKSwiIHRhZ3MuIikpfSxkZXBlbmRlbmNpZXM6W1hlLHZsXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5wbHVnaW5UeXBlcyQ9dGhpcy5zdG9yZS5zZWxlY3QoeHUpLHRoaXMudGFnRmlsdGVyUmVnZXgkPXRoaXMuc3RvcmUuc2VsZWN0KF9jKSx0aGlzLnRhZ0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoQihpPT5uZXcgU2V0KGkubWFwKCh7dGFnOnJ9KT0+cikpLnNpemUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInBsdWdpblR5cGVzIiwidGFnRmlsdGVyUmVnZXgiLCJ0YWdDb3VudHMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoLWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIikpLDImZSYmYigicGx1Z2luVHlwZXMiLFcoMSwzLGkucGx1Z2luVHlwZXMkKSkoInRhZ0ZpbHRlclJlZ2V4IixXKDIsNSxpLnRhZ0ZpbHRlclJlZ2V4JCkpKCJ0YWdDb3VudHMiLFcoMyw3LGkudGFnQ291bnRzJCkpfSxkZXBlbmRlbmNpZXM6W2hjZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gSjZlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiw2KSxEKDEpLGooMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLFcoMiwxLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpLCIgY2FyZHMiKX19ZnVuY3Rpb24gJDZlKG4sdCl7MSZuJiZOKDAsIm1ldHJpY3MtZW1wdHktdGFnLW1hdGNoIiw3KX12YXIgbWNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntpc0VtcHR5TWF0Y2g6ImlzRW1wdHlNYXRjaCIsY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEifSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sxLCJncm91cC10b29sYmFyIl0sWzEsImdyb3VwLXRleHQiXSxbImFyaWEtcm9sZSIsImhlYWRpbmciLCJhcmlhLWxldmVsIiwiMyIsMSwiZ3JvdXAtdGl0bGUiXSxbImNsYXNzIiwiZ3JvdXAtY2FyZC1jb3VudCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ3YXJuIiw0LCJuZ0lmIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsxLCJ3YXJuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsInNwYW4iLDEpKDIsInNwYW4iLDIpLEQoMywiVGFncyBtYXRjaGluZyBmaWx0ZXIiKSx2KCksRSg0LEo2ZSwzLDMsInNwYW4iLDMpLHYoKSgpLEUoNSwkNmUsMSwwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNCksTig2LCJtZXRyaWNzLWNhcmQtZ3JpZCIsNSkpLDImZSYmKHgoNCksYigibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aD4xKSx4KDEpLGIoIm5nSWYiLGkuaXNFbXB0eU1hdGNoKSx4KDEpLGIoImNhcmRJZHNXaXRoTWV0YWRhdGEiLGkuY2FyZElkc1dpdGhNZXRhZGF0YSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKX0sZGVwZW5kZW5jaWVzOltYZSxQeSxmY2UsdmxdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfW1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtc3R5bGU6aXRhbGljO3BhZGRpbmc6MTZweDt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWV0cmljcy1lbXB0eS10YWctbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoeW0pLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeHUpKSxCKChbaSxyXSk9PnIuc2l6ZT9pLmZpbHRlcihvPT5yLmhhcyhvLnBsdWdpbikpOmkpLHNyKHRoaXMuc3RvcmUuc2VsZWN0KF9jKSksQXIoMjAwKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJue2NhcmRMaXN0OmkscmVnZXg6bmV3IFJlZ0V4cChyLCJpIil9fWNhdGNoe3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om51bGx9fX0pLEhlKCh7cmVnZXg6aX0pPT5udWxsIT09aSksQigoe2NhcmRMaXN0OmkscmVnZXg6cn0pPT5pLmZpbHRlcigoe3RhZzpvfSk9PnIudGVzdChvKSkpLGRpKChpLHIpPT5pLmxlbmd0aD09PXIubGVuZ3RoJiZpLmV2ZXJ5KChvLHMpPT5vLmNhcmRJZD09PXJbc10uY2FyZElkKSksWHMoKSxWbihbXSkpLHRoaXMuaXNFbXB0eU1hdGNoJD10aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkLnBpcGUoc3IodGhpcy5zdG9yZS5zZWxlY3QoeW0pKSxCKChbaSxyXSk9PkJvb2xlYW4oci5sZW5ndGgpJiYwPT09aS5sZW5ndGgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZmlsdGVyZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiaXNFbXB0eU1hdGNoIiwiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJpc0VtcHR5TWF0Y2giLFcoMSwzLGkuaXNFbXB0eU1hdGNoJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDIsNSxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W21jZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaVdlPVsicGFuZWwiXTtmdW5jdGlvbiByV2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMCwxKSxObigyKSx2KCkpLDImbil7bGV0IGU9dC5pZCxpPU0oKTtiKCJpZCIsaS5pZCkoIm5nQ2xhc3MiLGkuX2NsYXNzTGlzdCksemUoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsfHxudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9nZXRQYW5lbEFyaWFMYWJlbGxlZGJ5KGUpKX19dmFyIG9XZT1bIioiXSxzV2U9MCxhV2U9THMoY2xhc3N7fSksX2NlPW5ldyBzZSgibWF0LWF1dG9jb21wbGV0ZS1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue2F1dG9BY3RpdmVGaXJzdE9wdGlvbjohMSxhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiExfX19KSxjV2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGFXZXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2FjdGl2ZU9wdGlvbkNoYW5nZXM9dm4uRU1QVFksdGhpcy5zaG93UGFuZWw9ITEsdGhpcy5faXNPcGVuPSExLHRoaXMuZGlzcGxheVdpdGg9bnVsbCx0aGlzLm9wdGlvblNlbGVjdGVkPW5ldyBHLHRoaXMub3BlbmVkPW5ldyBHLHRoaXMuY2xvc2VkPW5ldyBHLHRoaXMub3B0aW9uQWN0aXZhdGVkPW5ldyBHLHRoaXMuX2NsYXNzTGlzdD17fSx0aGlzLmlkPSJtYXQtYXV0b2NvbXBsZXRlLSIrc1dlKyssdGhpcy5pbmVydEdyb3Vwcz1vPy5TQUZBUkl8fCExLHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj0hIXIuYXV0b0FjdGl2ZUZpcnN0T3B0aW9uLHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249ISFyLmF1dG9TZWxlY3RBY3RpdmVPcHRpb259Z2V0IGlzT3Blbigpe3JldHVybiB0aGlzLl9pc09wZW4mJnRoaXMuc2hvd1BhbmVsfWdldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9ufXNldCBhdXRvQWN0aXZlRmlyc3RPcHRpb24oZSl7dGhpcy5fYXV0b0FjdGl2ZUZpcnN0T3B0aW9uPVd0KGUpfWdldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb259c2V0IGF1dG9TZWxlY3RBY3RpdmVPcHRpb24oZSl7dGhpcy5fYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbj1XdChlKX1zZXQgY2xhc3NMaXN0KGUpe3RoaXMuX2NsYXNzTGlzdD1lJiZlLmxlbmd0aD9mdW5jdGlvbihuLHQ9L1xzKy8pe2xldCBlPVtdO2lmKG51bGwhPW4pe2xldCBpPUFycmF5LmlzQXJyYXkobik/bjpgJHtufWAuc3BsaXQodCk7Zm9yKGxldCByIG9mIGkpe2xldCBvPWAke3J9YC50cmltKCk7byYmZS5wdXNoKG8pfX1yZXR1cm4gZX0oZSkucmVkdWNlKChpLHIpPT4oaVtyXT0hMCxpKSx7fSk6e30sdGhpcy5fc2V0VmlzaWJpbGl0eUNsYXNzZXModGhpcy5fY2xhc3NMaXN0KSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NOYW1lPSIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IERfKHRoaXMub3B0aW9ucykud2l0aFdyYXAoKSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPXRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnN1YnNjcmliZShlPT57dGhpcy5pc09wZW4mJnRoaXMub3B0aW9uQWN0aXZhdGVkLmVtaXQoe3NvdXJjZTp0aGlzLG9wdGlvbjp0aGlzLm9wdGlvbnMudG9BcnJheSgpW2VdfHxudWxsfSl9KSx0aGlzLl9zZXRWaXNpYmlsaXR5KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCl9X3NldFNjcm9sbFRvcChlKXt0aGlzLnBhbmVsJiYodGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD1lKX1fZ2V0U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMucGFuZWw/dGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcDowfV9zZXRWaXNpYmlsaXR5KCl7dGhpcy5zaG93UGFuZWw9ISF0aGlzLm9wdGlvbnMubGVuZ3RoLHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2VtaXRTZWxlY3RFdmVudChlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMub3B0aW9uPWV9fSh0aGlzLGUpO3RoaXMub3B0aW9uU2VsZWN0ZWQuZW1pdChpKX1fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShlKXtyZXR1cm4gdGhpcy5hcmlhTGFiZWw/bnVsbDp0aGlzLmFyaWFMYWJlbGxlZGJ5PyhlP2UrIiAiOiIiKSt0aGlzLmFyaWFMYWJlbGxlZGJ5OmV9X3NldFZpc2liaWxpdHlDbGFzc2VzKGUpe2VbdGhpcy5fdmlzaWJsZUNsYXNzXT10aGlzLnNob3dQYW5lbCxlW3RoaXMuX2hpZGRlbkNsYXNzXT0hdGhpcy5zaG93UGFuZWx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoQWUpLHcoX2NlKSx3KHVpKSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoT2ksNyksbHQoaVdlLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnRlbXBsYXRlPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGRpc3BsYXlXaXRoOiJkaXNwbGF5V2l0aCIsYXV0b0FjdGl2ZUZpcnN0T3B0aW9uOiJhdXRvQWN0aXZlRmlyc3RPcHRpb24iLGF1dG9TZWxlY3RBY3RpdmVPcHRpb246ImF1dG9TZWxlY3RBY3RpdmVPcHRpb24iLHBhbmVsV2lkdGg6InBhbmVsV2lkdGgiLGNsYXNzTGlzdDpbImNsYXNzIiwiY2xhc3NMaXN0Il19LG91dHB1dHM6e29wdGlvblNlbGVjdGVkOiJvcHRpb25TZWxlY3RlZCIsb3BlbmVkOiJvcGVuZWQiLGNsb3NlZDoiY2xvc2VkIixvcHRpb25BY3RpdmF0ZWQ6Im9wdGlvbkFjdGl2YXRlZCJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx2Y2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNXZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9aGkobikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihOaShyLEdDLDUpLE5pKHIsdWEsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLE5lKG89TGUoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6akMsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOm9XZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1hdXRvY29tcGxldGUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih3aSgpLEUoMCxyV2UsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltQbl0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHljZT1uZXcgc2UoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksZFdlPXtwcm92aWRlOnljZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LHBXZT17cHJvdmlkZTpIbyx1c2VFeGlzdGluZzpyaSgoKT0+ZVMpLG11bHRpOiEwfSxoV2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PXUsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj12bi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcgVGUsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9YmEoKCk9PntsZXQgaD10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGg/aC5jaGFuZ2VzLnBpcGUoVm4oaCksdmkoKCk9PnVuKC4uLmgubWFwKGY9PmYub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShIdCgxKSx2aSgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9V3QoZSl9bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5lLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSl9bmdPbkNoYW5nZXMoZSl7ZS5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKX0pLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSExLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJih0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZHx8dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfWdldCBwYW5lbENsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIHVuKHRoaXMub3B0aW9uU2VsZWN0aW9ucyx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci50YWJPdXQucGlwZShIZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKEhlKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKTpqdCgpKS5waXBlKEIoZT0+ZSBpbnN0YW5jZW9mIHpDP2U6bnVsbCkpfWdldCBhY3RpdmVPcHRpb24oKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW06bnVsbH1fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCl7cmV0dXJuIHVuKGxpKHRoaXMuX2RvY3VtZW50LCJjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJhdXhjbGljayIpLGxpKHRoaXMuX2RvY3VtZW50LCJ0b3VjaGVuZCIpKS5waXBlKEhlKGU9PntsZXQgaT12YyhlKSxyPXRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsLG89dGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJmkhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJighcnx8IXIuY29udGFpbnMoaSkpJiYoIW98fCFvLmNvbnRhaW5zKGkpKSYmISF0aGlzLl9vdmVybGF5UmVmJiYhdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhpKX0pKX13cml0ZVZhbHVlKGUpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT50aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShlKSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPWV9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9TXIoZSk7aWYoMjc9PT1pJiYhciYmZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiYxMz09PWkmJnRoaXMucGFuZWxPcGVuJiYhcil0aGlzLmFjdGl2ZU9wdGlvbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih0aGlzLmF1dG9jb21wbGV0ZSl7bGV0IG89dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSxzPTM4PT09aXx8NDA9PT1pOzk9PT1pfHxzJiYhciYmdGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKGUpOnMmJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwoc3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW8pJiYodGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKSx0aGlzLmF1dG9jb21wbGV0ZS5hdXRvU2VsZWN0QWN0aXZlT3B0aW9uJiZ0aGlzLmFjdGl2ZU9wdGlvbiYmKHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb258fCh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb249dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPXRoaXMuYWN0aXZlT3B0aW9uLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlKSkpfX1faGFuZGxlSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQscj1pLnZhbHVlOyJudW1iZXIiPT09aS50eXBlJiYocj0iIj09cj9udWxsOnBhcnNlRmxvYXQocikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1yJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1yLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vbkNoYW5nZShyKSx0aGlzLl9jYW5PcGVuKCkmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lLnRhcmdldCYmdGhpcy5vcGVuUGFuZWwoKSl9X2hhbmRsZUZvY3VzKCl7dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzP3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCEwKSk6dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwfV9oYW5kbGVDbGljaygpe3RoaXMuX2Nhbk9wZW4oKSYmIXRoaXMucGFuZWxPcGVuJiZ0aGlzLm9wZW5QYW5lbCgpfV9mbG9hdExhYmVsKGU9ITEpe3RoaXMuX2Zvcm1GaWVsZCYmImF1dG8iPT09dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWwmJihlP3RoaXMuX2Zvcm1GaWVsZC5fYW5pbWF0ZUFuZExvY2tMYWJlbCgpOnRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMCl9X3Jlc2V0TGFiZWwoKXt0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWwmJih0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYXV0byIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiB1bih0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoSHQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKE50KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSksbmwoMCkpKS5waXBlKHZpKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSxIdCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGhzKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IERsKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgcyxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07cz0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKHMpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9V0MoZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBzPW8uX2dldEhvc3RFbGVtZW50KCksYT1rQShzLm9mZnNldFRvcCxzLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3AoYSl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIU1yKGkpfHwzOD09PWkua2V5Q29kZSYmTXIoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpLHcoUWkpLHcoeWkpLHcocHQpLHcobm4pLHcoeWNlKSx3KGlyLDgpLHcodW0sOSksdyhCdCw4KSx3KGRhKSx3KF9jZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLGVTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBoV2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1c2luIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uVG91Y2hlZCgpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSwyJmUmJnplKCJhdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5wYW5lbE9wZW4mJmkuYWN0aXZlT3B0aW9uP2kuYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6aS5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsaS5hdXRvY29tcGxldGVEaXNhYmxlZHx8IWkucGFuZWxPcGVufHxudWxsPT1pLmF1dG9jb21wbGV0ZT9udWxsOmkuYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0Ym94Iil9LGV4cG9ydEFzOlsibWF0QXV0b2NvbXBsZXRlVHJpZ2dlciJdLGZlYXR1cmVzOlskdChbcFdlXSksdHRdfSksbn0pKCksck89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbZFdlXSxpbXBvcnRzOltWbyxPXyxkbixrZSxTdSxPXyxkbl19KSxufSkoKSxvTz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLnBsYWNlaG9sZGVyPSIifW9uSW5wdXRLZXlVcChlKXsiRW50ZXIiPT09ZS5rZXkmJnRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGVTLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuYXV0b2NvbXBsZXRlVHJpZ2dlcj1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixtYXRBdXRvY29tcGxldGU6Im1hdEF1dG9jb21wbGV0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsInBsYWNlaG9sZGVyIiwibWF0QXV0b2NvbXBsZXRlIiwibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJ2YWx1ZSIsImtleXVwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtYXQtaWNvbiIsMCksZygxLCJpbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXRLZXlVcChvKX0pLHYoKSksMiZlJiYoeCgxKSxiKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikoIm1hdEF1dG9jb21wbGV0ZSIsaS5tYXRBdXRvY29tcGxldGUpKCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsIWkubWF0QXV0b2NvbXBsZXRlKSgidmFsdWUiLGkudmFsdWUpKX0sZGVwZW5kZW5jaWVzOltlUyxabl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCk7ZnVuY3Rpb24gZldlKG4sdCl7MSZuJiZOKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBtV2Uobix0KXtpZigxJm4mJihnKDAsIm1hdC1vcHRpb24iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O2IoInZhbHVlIixlKSx6ZSgidGl0bGUiLGUpLHgoMSkseXQoZSl9fWZ1bmN0aW9uIGdXZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw5KSgxLCJlbSIpLEQoMiksaigzLCJudW1iZXIiKSx2KCkoKSksMiZuKXtsZXQgZT1NKCk7eCgyKSxxZSgiYW5kICIsVygzLDEsZS5jb21wbGV0aW9ucy5sZW5ndGgtMjUpLCIgbW9yZSB0YWdzIG1hdGNoZWQiKX19dmFyIENjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9b25Db21wbGV0aW9uQWNjZXB0ZWQoZSl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKFBEZSwiXFwkJiIpfShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJ2YWxpZCIsaS5pc1JlZ2V4RmlsdGVyVmFsaWQpfSxpbnB1dHM6e3JlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIixjb21wbGV0aW9uczoiY29tcGxldGlvbnMifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjcsdmFyczo1LGNvbnN0czpbWzEsInRhZy1maWx0ZXIiXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHRhZ3MgKHJlZ2V4KSIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJjbGFzcyIsImVycm9yLWljb24iLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbMSwidGFnLW9wdGlvbnMiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWyJjbGFzcyIsIm9wdGlvbiIsMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJhbmQtbW9yZSIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMSwib3B0aW9uIiwzLCJ2YWx1ZSJdLFsxLCJhbmQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChvLnRhcmdldC52YWx1ZSl9KSx2KCksRSgyLGZXZSwxLDAsIm1hdC1pY29uIiwyKSx2KCksZygzLCJtYXQtYXV0b2NvbXBsZXRlIiwzLDQpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbXBsZXRpb25BY2NlcHRlZChvLm9wdGlvbi52YWx1ZSl9KSxFKDUsbVdlLDIsMywibWF0LW9wdGlvbiIsNSksRSg2LGdXZSw0LDMsImRpdiIsNiksdigpKSwyJmUpe2xldCByPXN0KDQpO3goMSksYigidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIscikseCgxKSxiKCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLHgoMyksYigibmdGb3JPZiIsbnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLHgoMSksYigibmdJZiIsKG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLmxlbmd0aCk+MjUpfX0sZGVwZW5kZW5jaWVzOlt5bixYZSxvTyx2Y2UsdWEsWm4sdmxdLHN0eWxlczpbIi50YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9dGItZmlsdGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX1bX25naG9zdC0lQ09NUCVde2NvbG9yOiMyMTIxMjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICAuZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2M2MjgyODtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfSAgLnRhZy1vcHRpb25zIC5vcHRpb24sICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1saW5lLWNsYW1wOjM7ZGlzcGxheTotd2Via2l0LWJveDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzo4cHggMTZweH0gIC50YWctb3B0aW9ucyAuYW5kLW1vcmV7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAgIC50YWctb3B0aW9ucyAuYW5kLW1vcmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHdjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnRhZ0ZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLHRoaXMuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJD10aGlzLnRhZ0ZpbHRlciQucGlwZShCKGk9Pnt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoaSksITB9Y2F0Y2h7cmV0dXJuITF9fSkpLHRoaXMuY29tcGxldGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFpEKS5waXBlKHNyKHRoaXMuc3RvcmUuc2VsZWN0KHh1KSksQigoW2kscl0pPT5pLmZpbHRlcigoe3BsdWdpbjpvfSk9PiFyLnNpemV8fHIuaGFzKG8pKS5tYXAoKHt0YWc6b30pPT5vKSksQihpPT5bLi4ubmV3IFNldChpKV0pLEIoaT0+aS5zb3J0KGJ3KSksc3IodGhpcy5zdG9yZS5zZWxlY3QoX2MpKSxCKChbaSxyXSk9Pnt0cnl7cmV0dXJuW2ksbmV3IFJlZ0V4cChyLCJpIildfWNhdGNoe3JldHVybltpLG51bGxdfX0pLEhlKChbLGldKT0+bnVsbCE9PWkpLEIoKFtpLHJdKT0+aS5maWx0ZXIobz0+ci50ZXN0KG8pKSkpfW9uVGFnRmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRVAoe3RhZ0ZpbHRlcjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy10YWctZmlsdGVyIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJjb21wbGV0aW9ucyIsIm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwibWV0cmljcy10YWctZmlsdGVyLWNvbXBvbmVudCIsMCksUCgib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRhZ0ZpbHRlckNoYW5nZShvKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLHYoKSksMiZlJiZiKCJyZWdleEZpbHRlclZhbHVlIixXKDEsMyxpLnRhZ0ZpbHRlciQpKSgiaXNSZWdleEZpbHRlclZhbGlkIixXKDIsNSxpLmlzVGFnRmlsdGVyUmVnZXhWYWxpZCQpKSgiY29tcGxldGlvbnMiLFcoMyw3LGkuY29tcGxldGlvbnMkKSl9LGRlcGVuZGVuY2llczpbQ2NlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB5V2Uobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDgpLEQoMSksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCIiLGUuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgsIiBjYXJkcyIpfX1mdW5jdGlvbiBiV2Uobix0KXsxJm4mJihnKDAsInNwYW4iLDkpLEQoMSwiTmV3IGNhcmQgcGlubmVkIiksdigpKSwyJm4mJnplKCJkYXRhLWlkIix0LiRpbXBsaWNpdCl9ZnVuY3Rpb24geFdlKG4sdCl7aWYoMSZuJiZOKDAsIm1ldHJpY3MtY2FyZC1ncmlkIiwxMCksMiZuKXtsZXQgZT1NKCk7YigiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhKSgiY2FyZE9ic2VydmVyIixlLmNhcmRPYnNlcnZlcil9fWZ1bmN0aW9uIENXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxMSksRCgxLCJQaW4gY2FyZHMgZm9yIGEgcXVpY2sgdmlldyBhbmQgY29tcGFyaXNvbiIpLHYoKSl9dmFyIE1jZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixuZXdDYXJkUGlubmVkSWRzOiJuZXdDYXJkUGlubmVkSWRzIn0sZGVjbHM6MTAsdmFyczo0LGNvbnN0czpbWzEsImdyb3VwLXRvb2xiYXIiXSxbInN2Z0ljb24iLCJrZWVwXzI0cHgiXSxbMSwiZ3JvdXAtdGV4dCJdLFsiYXJpYS1yb2xlIiwiaGVhZGluZyIsImFyaWEtbGV2ZWwiLCIzIiwxLCJncm91cC10aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5ldy1jYXJkLXBpbm5lZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiZW1wdHlQaW5uZWRWaWV3IiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwibmV3LWNhcmQtcGlubmVkIl0sWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXSxbMSwiZW1wdHktbWVzc2FnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwKSxOKDEsIm1hdC1pY29uIiwxKSxnKDIsInNwYW4iLDIpKDMsInNwYW4iLDMpLEQoNCwiUGlubmVkIiksdigpLEUoNSx5V2UsMiwxLCJzcGFuIiw0KSxFKDYsYldlLDIsMSwic3BhbiIsNSksdigpKCksRSg3LHhXZSwxLDIsIm1ldHJpY3MtY2FyZC1ncmlkIiw2KSxFKDgsQ1dlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNyxlbikpLDImZSl7bGV0IHI9c3QoOSk7eCg1KSxiKCJuZ0lmIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoPjEpLHgoMSksYigibmdGb3JPZiIsaS5uZXdDYXJkUGlubmVkSWRzKSx4KDEpLGIoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W3luLFhlLFpuLFB5XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Z2FwOjZweH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEzcHg7Zm9udC1zdHlsZTppdGFsaWM7cGFkZGluZzoxNnB4O3RleHQtYWxpZ246Y2VudGVyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5uZXctY2FyZC1waW5uZWRbX25nY29udGVudC0lQ09NUCVde2FuaW1hdGlvbjpwaW5uZWQtdmlldy1mYWRlLW91dCAzcyBsaW5lYXI7YmFja2dyb3VuZDojZjQ0MzM2O2JvcmRlci1yYWRpdXM6NXB4O2NvbG9yOiNmZmY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7b3BhY2l0eTowO3BhZGRpbmc6M3B4IDVweH1Aa2V5ZnJhbWVzIHBpbm5lZC12aWV3LWZhZGUtb3V0e2Zyb217b3BhY2l0eToxfTY2JXtvcGFjaXR5Oi45OX10b3tvcGFjaXR5OjB9fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksU2NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY2FyZElkc1dpdGhNZXRhZGF0YSQ9dGhpcy5zdG9yZS5zZWxlY3QoRUMpLnBpcGUoVm4oW10pKSx0aGlzLm5ld0NhcmRQaW5uZWRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KEVDKS5waXBlKENhKDEpLEIoaT0+aS5tYXAocj0+ci5jYXJkSWQpKSx5ZygpLEIoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQoaSkscz1uZXcgU2V0KHIpO2ZvcihsZXQgYSBvZiBzKWlmKCFvLmhhcyhhKSlyZXR1cm4gRGF0ZS5ub3coKTtyZXR1cm4gbnVsbH0pLFZuKG51bGwpLHlnKCksQigoW2kscl0pPT5udWxsPT09aSYmbnVsbD09PXI/bnVsbDpudWxsPT09cj9baV06W3JdKSxIZShpPT5udWxsIT09aSksQihpPT5baVswXV0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJuZXdDYXJkUGlubmVkSWRzIiwiY2FyZE9ic2VydmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTigwLCJtZXRyaWNzLXBpbm5lZC12aWV3LWNvbXBvbmVudCIsMCksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSksMiZlJiZiKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixXKDEsMyxpLmNhcmRJZHNXaXRoTWV0YWRhdGEkKSkoIm5ld0NhcmRQaW5uZWRJZHMiLFcoMiw1LGkubmV3Q2FyZFBpbm5lZElkcyQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbTWNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBTV2Uobix0KXsxJm4mJk4oMCwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMyksMiZuJiZiKCJjYXJkT2JzZXJ2ZXIiLE0oKS5jYXJkT2JzZXJ2ZXIpfWZ1bmN0aW9uIEVXZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNyksTigxLCJtYXQtc3Bpbm5lciIsMTgpLHYoKSl9dmFyIFRXZT1mdW5jdGlvbihuKXtyZXR1cm57InNsaWRlLW91dC1tZW51LWV4cGFuZGVkIjpufX07ZnVuY3Rpb24gRFdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDE5KSxOKDEsIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3IiKSx2KCkpLDImbil7bGV0IGU9TSgpO2IoIm5nQ2xhc3MiLEhuKDEsVFdlLGUuc2xpZGVPdXRNZW51T3BlbikpfX1mdW5jdGlvbiBBV2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDIwKSgxLCJkaXYiLDIxKSgyLCJoMiIsMjIpLEQoMywiU2V0dGluZ3MiKSx2KCksZyg0LCJidXR0b24iLDIzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQuZW1pdCgpKX0pLE4oNSwibWF0LWljb24iLDI0KSx2KCkoKSxOKDYsIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiKSx2KCl9fXZhciBJV2U9ZnVuY3Rpb24obil7cmV0dXJue2NoZWNrZWQ6biwic2V0dGluZ3MtYnV0dG9uIjohMH19LFBXZT1uZXcgc2UoIkN1c3RvbWl6YWJsZSBTaGFyZSBCdXR0b24iKSxFY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuY3VzdG9tU2hhcmVCdXR0b249aSx0aGlzLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkPW5ldyBHLHRoaXMub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZD1uZXcgRyx0aGlzLm9uUGx1Z2luVHlwZVRvZ2dsZWQ9bmV3IEcsdGhpcy5vblBsdWdpblR5cGVBbGxUb2dnbGVkPW5ldyBHLHRoaXMuUGx1Z2luVHlwZT1Xbix0aGlzLmNhcmRPYnNlcnZlcj1uZXcgeHcodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIjYwMHB4IDBweCA2MDBweCAwcHgiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhBZSksdyhQV2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e3Nob3dGaWx0ZXJlZFZpZXc6InNob3dGaWx0ZXJlZFZpZXciLGlzU2lkZXBhbmVPcGVuOiJpc1NpZGVwYW5lT3BlbiIsZmlsdGVyZWRQbHVnaW5UeXBlczoiZmlsdGVyZWRQbHVnaW5UeXBlcyIsaW5pdGlhbFRhZ3NMb2FkaW5nOiJpbml0aWFsVGFnc0xvYWRpbmciLHNsaWRlT3V0TWVudU9wZW46InNsaWRlT3V0TWVudU9wZW4ifSxvdXRwdXRzOntvblNldHRpbmdzQnV0dG9uQ2xpY2tlZDoib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLG9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ6Im9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQiLG9uUGx1Z2luVHlwZVRvZ2dsZWQ6Im9uUGx1Z2luVHlwZVRvZ2dsZWQiLG9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQ6Im9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQifSxkZWNsczoyNCx2YXJzOjIzLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBvbiBhIHRvb2xiYXIgYnV0dG9uIHRvIHRvZ2dsZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQn2QzNTE2ZGI2YmJlNjg2MGE1NWJlYWI2NmU0OTY5ZGFjNjI1YjhkNzLikJ83NjU5Mjg1NDQ1NTgwODM4OTI1OlRvZ2dsZSBzZXR0aW5ncyBzaWRlIHBhbmVgLGU9JGxvY2FsaXplYDpMYWJlbCBvbiBhIGJ1dHRvbiB0byBjbG9zZSB0aGUgc2V0dGluZ3Mgc2lkZSBwYW5lLuKQnzA0NTIxZGMwYjZhNjVjZjVjMzgyOTQ0YzlhOGI0Yjg0NGEzZTk1OTjikJ84MTU2NzY2OTk3NzQ3MTY1ODcxOkNsb3NlIHNpZGUgcGFuZWAsW1sxLCJ0b29sYmFyIl0sWyJtdWx0aXBsZSIsIiIsImFwcGVhcmFuY2UiLCJzdGFuZGFyZCIsMSwiZmlsdGVyLXZpZXciXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiYWxsIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsInNjYWxhcnMiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaW1hZ2UiLDEsImZpbHRlci12aWV3LWJ1dHRvbiIsMywiY2xpY2siXSxbIm1hdC1idXR0b24iLCIiLCJyb2xlIiwiY2hlY2tib3giLCJkYXRhLXZhbHVlIiwiaGlzdG9ncmFtIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWzMsImN1c3RvbWl6YWJsZUNvbXBvbmVudCJdLFsxLCJyaWdodC1pdGVtcyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il0sWzEsInNwbGl0LWNvbnRlbnQiXSxbImNka1Njcm9sbGFibGUiLCIiXSxbMywiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIl0sWzMsImNhcmRPYnNlcnZlciJdLFsiY2xhc3MiLCJsb2FkaW5nLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiw0LCJuZ0lmIl0sWzEsImxvYWRpbmctY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjM2Il0sWzEsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIl0sWzEsInNpZGViYXIiXSxbMSwiaGVhZGVyIl0sWzEsInRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCksTigxLCJtZXRyaWNzLXRhZy1maWx0ZXIiKSxnKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSgzLCJidXR0b24iLDIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSksRCg0LCIgQWxsICIpLHYoKSxnKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5TQ0FMQVJTKX0pLEQoNiwiIFNjYWxhcnMgIiksdigpLGcoNywiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLklNQUdFUyl9KSxEKDgsIiBJbWFnZSAiKSx2KCksZyg5LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSxEKDEwLCIgSGlzdG9ncmFtICIpLHYoKSgpLE4oMTEsInRiLWN1c3RvbWl6YXRpb24iLDYpLGcoMTIsImRpdiIsNykoMTMsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSksTigxNCwibWF0LWljb24iLDkpLEQoMTUsIiBTZXR0aW5ncyAiKSx2KCkoKSgpLGcoMTYsImRpdiIsMTApKDE3LCJkaXYiLDExKSxFKDE4LFNXZSwxLDEsIm1ldHJpY3MtZmlsdGVyZWQtdmlldyIsMTIpLE4oMTksIm1ldHJpY3MtcGlubmVkLXZpZXciLDEzKSxFKDIwLEVXZSwyLDAsImRpdiIsMTQpLE4oMjEsIm1ldHJpY3MtY2FyZC1ncm91cHMiLDEzKSx2KCksRSgyMixEV2UsMiwzLCJkaXYiLDE1KSxFKDIzLEFXZSw3LDAsImRpdiIsMTYpLHYoKSksMiZlJiYoeCgzKSx6ZSgiYXJpYS1jaGVja2VkIiwwPT09aS5maWx0ZXJlZFBsdWdpblR5cGVzLnNpemUpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuU0NBTEFSUykpLHgoMiksemUoImFyaWEtY2hlY2tlZCIsaS5maWx0ZXJlZFBsdWdpblR5cGVzLmhhcyhpLlBsdWdpblR5cGUuSU1BR0VTKSkseCgyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKSkseCgyKSxiKCJjdXN0b21pemFibGVDb21wb25lbnQiLGkuY3VzdG9tU2hhcmVCdXR0b24pLHgoMiksYigibmdDbGFzcyIsSG4oMjEsSVdlLGkuaXNTaWRlcGFuZU9wZW4pKSx6ZSgiYXJpYS1wcmVzc2VkIixpLmlzU2lkZXBhbmVPcGVuKSx4KDQpLGF0KCJtYWluIiwhMCkoImZpbHRlci12aWV3IixpLnNob3dGaWx0ZXJlZFZpZXcpLHgoMSksYigibmdJZiIsaS5zaG93RmlsdGVyZWRWaWV3KSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaW5pdGlhbFRhZ3NMb2FkaW5nKSx4KDEpLE90KCJkaXNwbGF5IixpLnNob3dGaWx0ZXJlZFZpZXc/Im5vbmUiOiIiKSxiKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSx4KDEpLGIoIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pLHgoMSksYigibmdJZiIsaS5pc1NpZGVwYW5lT3BlbikpfSxkZXBlbmRlbmNpZXM6W1BuLFhlLFBuZSxZcCwkbiwkNSxabix2byxWbmUsam5lLHBjZSxnY2Usd2NlLFNjZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy10YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAxMDBweH0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO21hcmdpbi1sZWZ0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweDttaW4td2lkdGg6dW5zZXQ7cGFkZGluZzowIDEycHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9LnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OmNhbGMoMTAwJSAtIDQ5cHgpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjUwcHg7dG9wOjQ5cHg7dHJhbnNpdGlvbjphbGwgLjc1cyBlYXNlO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjIwMHB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZS1vdXQtbWVudVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LnNsaWRlLW91dC1tZW51LWV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtyaWdodDoyNTBweDt2aXNpYmlsaXR5OnZpc2libGV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxUY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5pc1NpZGVwYW5lT3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QockEpLHRoaXMuaW5pdGlhbFRhZ3NMb2FkaW5nJD10aGlzLnN0b3JlLnNlbGVjdChTQykucGlwZShZeShpPT5udWxsPT09aS5sYXN0TG9hZGVkVGltZUluTXMsITApLEIoaT0+aS5zdGF0ZT09PUVlLkxPQURJTkcmJm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcykpLHRoaXMuc2hvd0ZpbHRlcmVkVmlldyQ9dGhpcy5zdG9yZS5zZWxlY3QoX2MpLnBpcGUoQihpPT5pLmxlbmd0aD4wKSksdGhpcy5maWx0ZXJlZFBsdWdpblR5cGVzJD10aGlzLnN0b3JlLnNlbGVjdCh4dSksdGhpcy5pc1NsaWRlb3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KG9BKX1vblNldHRpbmdzQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goZVAoKSl9b25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goJEkoKSl9b25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKERQKHtwbHVnaW46ZX0pKX1vblNob3dBbGxQbHVnaW5zKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChBUCgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtbWFpbi12aWV3Il1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJzaG93RmlsdGVyZWRWaWV3IiwiaXNTaWRlcGFuZU9wZW4iLCJpbml0aWFsVGFnc0xvYWRpbmciLCJmaWx0ZXJlZFBsdWdpblR5cGVzIiwic2xpZGVPdXRNZW51T3BlbiIsIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIiwib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsIm9uUGx1Z2luVHlwZVRvZ2dsZWQiLCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiLDApLFAoIm9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl9KSgib25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl9KSgib25QbHVnaW5UeXBlVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QbHVnaW5WaXNpYmlsaXR5VG9nZ2xlZChvKX0pKCJvblBsdWdpblR5cGVBbGxUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2hvd0FsbFBsdWdpbnMoKX0pLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksdigpKSwyJmUmJmIoInNob3dGaWx0ZXJlZFZpZXciLFcoMSw1LGkuc2hvd0ZpbHRlcmVkVmlldyQpKSgiaXNTaWRlcGFuZU9wZW4iLFcoMiw3LGkuaXNTaWRlcGFuZU9wZW4kKSkoImluaXRpYWxUYWdzTG9hZGluZyIsVygzLDksaS5pbml0aWFsVGFnc0xvYWRpbmckKSkoImZpbHRlcmVkUGx1Z2luVHlwZXMiLFcoNCwxMSxpLmZpbHRlcmVkUGx1Z2luVHlwZXMkKSkoInNsaWRlT3V0TWVudU9wZW4iLFcoNSwxMyxpLmlzU2xpZGVvdXRNZW51T3BlbiQpKX0sZGVwZW5kZW5jaWVzOltFY2UsZnRdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEdzPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ0hFQ0tCT1g9ImNoZWNrYm94IixuLlJVTl9OQU1FPSJydW5fbmFtZSIsbi5FWFBFUklNRU5UX05BTUU9ImV4cGVyaW1lbnRfbmFtZSIsbi5SVU5fQ09MT1I9InJ1bl9jb2xvciJ9KEdzfHwoR3M9e30pKSxHcykpKCksTmg9e307U08oTmgse2dldEV4cGVyaW1lbnRzSHBhcmFtc0FuZE1ldHJpY3NTcGVjczooKT0+eldlLGdldEhwYXJhbUZpbHRlck1hcDooKT0+TldlLGdldEhwYXJhbUZpbHRlck1hcEZyb21FeHBlcmltZW50SWRzOigpPT5MV2UsZ2V0TWV0cmljRmlsdGVyTWFwOigpPT5IV2UsZ2V0TWV0cmljRmlsdGVyTWFwRnJvbUV4cGVyaW1lbnRJZHM6KCk9PlVXZX0pO3ZhciBxZD1QcihSRCk7ZnVuY3Rpb24gQWNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLmhwYXJhbS5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIHhDKGUpfXZhciBrV2U9WShxZCxBY2UpO2Z1bmN0aW9uIEljZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5ocGFyYW1zPz9bXV0pfXZhciBOV2U9WShxZCxrV2UsSWNlKTtmdW5jdGlvbiBMV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+QWNlKHQsbikpfShuKSwodCxlKT0+SWNlKHQsZSxuKSl9ZnVuY3Rpb24gUGNlKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLm1ldHJpYy5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIFBEKGUpfXZhciBCV2U9WShxZCxQY2UpO2Z1bmN0aW9uIFJjZShuLHQsZSl7bGV0IGk9S2YoZSk7cmV0dXJuIG5ldyBNYXAoWy4uLnQsLi4ubi5maWx0ZXJzW2ldPy5tZXRyaWNzPz9bXV0pfXZhciBIV2U9WShxZCxCV2UsUmNlKTtmdW5jdGlvbiBVV2Uobil7cmV0dXJuIFkocWQsZnVuY3Rpb24obil7cmV0dXJuIFkocWQsdD0+UGNlKHQsbikpfShuKSwodCxlKT0+UmNlKHQsZSxuKSl9dmFyIHpXZT1ZKHFkLChuLHQpPT5mdW5jdGlvbiguLi5uKXtsZXQgdD1uZXcgTWFwLGU9bmV3IE1hcCxpPW5ldyBNYXAscj1uZXcgTWFwLG89W107Zm9yKGxldCBzIG9mIG4pe2ZvcihsZXQgYSBvZiBzLmhwYXJhbXMpaWYoZS5oYXMoYS5uYW1lKXx8ZS5zZXQoYS5uYW1lLG5ldyBTZXQpLGUuZ2V0KGEubmFtZSkuYWRkKGEuZGlzcGxheU5hbWUpLHQuaGFzKGEubmFtZSkpe2xldCBsPXQuZ2V0KGEubmFtZSksYz1hO2lmKGwudHlwZSE9PWMudHlwZSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgdHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wudHlwZX0gdnMuICR7Yy50eXBlfWApLGwuZG9tYWluLnR5cGU9PT1Lbi5JTlRFUlZBTCYmYy5kb21haW4udHlwZT09PUtuLklOVEVSVkFMKShsLmRvbWFpbi5taW5WYWx1ZSE9PWMuZG9tYWluLm1pblZhbHVlfHxsLmRvbWFpbi5tYXhWYWx1ZSE9PWMuZG9tYWluLm1heFZhbHVlKSYmby5wdXNoKGBIcGFyYW0sICR7Yy5uYW1lfSwgZG9tYWlucyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC5kb21haW59IHZzLiAke2MuZG9tYWlufWApO2Vsc2UgaWYobC5kb21haW4udHlwZT09PUtuLkRJU0NSRVRFJiZjLmRvbWFpbi50eXBlPT09S24uRElTQ1JFVEUpe2xldCB1PW5ldyBTZXQoWy4uLmwuZG9tYWluLnZhbHVlcywuLi5jLmRvbWFpbi52YWx1ZXNdKTsobC5kb21haW4udmFsdWVzLmxlbmd0aCE9PWMuZG9tYWluLnZhbHVlcy5sZW5ndGh8fGwuZG9tYWluLnZhbHVlcy5sZW5ndGghPT11LnNpemUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSBvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCl9ZWxzZSB0LnNldChhLm5hbWUsey4uLmF9KTtmb3IobGV0IGEgb2Ygcy5tZXRyaWNzKWlmKHIuaGFzKGEudGFnKXx8ci5zZXQoYS50YWcsbmV3IFNldCksci5nZXQoYS50YWcpLmFkZChhLmRpc3BsYXlOYW1lKSxpLmhhcyhhLnRhZykpe2xldCBsPWkuZ2V0KGEudGFnKSxjPWE7bC5kYXRhc2V0VHlwZSE9PWMuZGF0YXNldFR5cGUmJm8ucHVzaChgTWV0cmljLCAke2MudGFnfSwgZGF0YXNldFR5cGVzIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRhdGFzZXRUeXBlfSB2cy4gJHtjLmRhdGFzZXRUeXBlfWApfWVsc2UgaS5zZXQoYS50YWcsey4uLmF9KX1pZihvLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFZhbGlkYXRpb24gZXJyb3I6XG4ke28uam9pbigiXG4iKX1gKTtyZXR1cm57aHBhcmFtczpbLi4udF0ubWFwKChbcyxhXSk9Pih7Li4uYSxkaXNwbGF5TmFtZTpbLi4uZS5nZXQocyldLmpvaW4oIiBvciAiKX0pKSxtZXRyaWNzOlsuLi5pXS5tYXAoKFtzLGFdKT0+KHsuLi5hLGRpc3BsYXlOYW1lOlsuLi5yLmdldChzKV0uam9pbigiIG9yICIpfSkpfX0oLi4udC5leHBlcmltZW50SWRzLm1hcChlPT57bGV0IGk9bi5zcGVjc1tlXTtyZXR1cm4gaT97aHBhcmFtczppLmhwYXJhbS5zcGVjcyxtZXRyaWNzOmkubWV0cmljLnNwZWNzfTpudWxsfSkuZmlsdGVyKEJvb2xlYW4pKSksaldlPVsidG9vbHRpcCJdLE9jZT0idG9vbHRpcC1wYW5lbCIsa2NlPU5zKHtwYXNzaXZlOiEwfSksRmNlPW5ldyBzZSgibWF0LXRvb2x0aXAtc2Nyb2xsLXN0cmF0ZWd5IiksWVdlPXtwcm92aWRlOkZjZSxkZXBzOltRaV0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oe3Njcm9sbFRocm90dGxlOjIwfSl9fSxYV2U9bmV3IHNlKCJtYXQtdG9vbHRpcC1kZWZhdWx0LW9wdGlvbnMiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJue3Nob3dEZWxheTowLGhpZGVEZWxheTowLHRvdWNoZW5kSGlkZURlbGF5OjE1MDB9fX0pLEtXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX3Njcm9sbERpc3BhdGNoZXI9cix0aGlzLl92aWV3Q29udGFpbmVyUmVmPW8sdGhpcy5fbmdab25lPXMsdGhpcy5fcGxhdGZvcm09YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fZm9jdXNNb25pdG9yPWMsdGhpcy5fZGlyPWQsdGhpcy5fZGVmYXVsdE9wdGlvbnM9cCx0aGlzLl9wb3NpdGlvbj0iYmVsb3ciLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3ZpZXdJbml0aWFsaXplZD0hMSx0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSExLHRoaXMuX3ZpZXdwb3J0TWFyZ2luPTgsdGhpcy5fY3NzQ2xhc3NQcmVmaXg9Im1hdCIsdGhpcy5fc2hvd0RlbGF5PXRoaXMuX2RlZmF1bHRPcHRpb25zLnNob3dEZWxheSx0aGlzLl9oaWRlRGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuaGlkZURlbGF5LHRoaXMudG91Y2hHZXN0dXJlcz0iYXV0byIsdGhpcy5fbWVzc2FnZT0iIix0aGlzLl9wYXNzaXZlTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD1uZXcgVGUsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9dSx0aGlzLl9kb2N1bWVudD1oLHAmJihwLnBvc2l0aW9uJiYodGhpcy5wb3NpdGlvbj1wLnBvc2l0aW9uKSxwLnRvdWNoR2VzdHVyZXMmJih0aGlzLnRvdWNoR2VzdHVyZXM9cC50b3VjaEdlc3R1cmVzKSksZC5jaGFuZ2UucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKX0pfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oZSl7ZSE9PXRoaXMuX3Bvc2l0aW9uJiYodGhpcy5fcG9zaXRpb249ZSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fdXBkYXRlUG9zaXRpb24odGhpcy5fb3ZlcmxheVJlZiksdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5zaG93KDApLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSkpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9V3QoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5oaWRlKDApOnRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKX1nZXQgc2hvd0RlbGF5KCl7cmV0dXJuIHRoaXMuX3Nob3dEZWxheX1zZXQgc2hvd0RlbGF5KGUpe3RoaXMuX3Nob3dEZWxheT1QaShlKX1nZXQgaGlkZURlbGF5KCl7cmV0dXJuIHRoaXMuX2hpZGVEZWxheX1zZXQgaGlkZURlbGF5KGUpe3RoaXMuX2hpZGVEZWxheT1QaShlKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5KX1nZXQgbWVzc2FnZSgpe3JldHVybiB0aGlzLl9tZXNzYWdlfXNldCBtZXNzYWdlKGUpe3RoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24odGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMuX21lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9tZXNzYWdlPW51bGwhPWU/U3RyaW5nKGUpLnRyaW0oKToiIiwhdGhpcy5fbWVzc2FnZSYmdGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgwKToodGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2FyaWFEZXNjcmliZXIuZGVzY3JpYmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHRoaXMubWVzc2FnZSwidG9vbHRpcCIpfSl9KSl9Z2V0IHRvb2x0aXBDbGFzcygpe3JldHVybiB0aGlzLl90b29sdGlwQ2xhc3N9c2V0IHRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwQ2xhc3M9ZSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3ZpZXdJbml0aWFsaXplZD0hMCx0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZikucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoZT0+e2U/ImtleWJvYXJkIj09PWUmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuc2hvdygpKTp0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpfSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGwpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMuZm9yRWFjaCgoW2kscl0pPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscixrY2UpfSksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5sZW5ndGg9MCx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2FyaWFEZXNjcmliZXIucmVtb3ZlRGVzY3JpcHRpb24oZSx0aGlzLm1lc3NhZ2UsInRvb2x0aXAiKSx0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcoZSl9c2hvdyhlPXRoaXMuc2hvd0RlbGF5KXtpZih0aGlzLmRpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHx0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5fdG9vbHRpcEluc3RhbmNlPy5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKTtsZXQgaT10aGlzLl9jcmVhdGVPdmVybGF5KCk7dGhpcy5fZGV0YWNoKCksdGhpcy5fcG9ydGFsPXRoaXMuX3BvcnRhbHx8bmV3IENjKHRoaXMuX3Rvb2x0aXBDb21wb25lbnQsdGhpcy5fdmlld0NvbnRhaW5lclJlZik7bGV0IHI9dGhpcy5fdG9vbHRpcEluc3RhbmNlPWkuYXR0YWNoKHRoaXMuX3BvcnRhbCkuaW5zdGFuY2U7ci5fdHJpZ2dlckVsZW1lbnQ9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHIuX21vdXNlTGVhdmVIaWRlRGVsYXk9dGhpcy5faGlkZURlbGF5LHIuYWZ0ZXJIaWRkZW4oKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX3NldFRvb2x0aXBDbGFzcyh0aGlzLl90b29sdGlwQ2xhc3MpLHRoaXMuX3VwZGF0ZVRvb2x0aXBNZXNzYWdlKCksci5zaG93KGUpfWhpZGUoZT10aGlzLmhpZGVEZWxheSl7bGV0IGk9dGhpcy5fdG9vbHRpcEluc3RhbmNlO2kmJihpLmlzVmlzaWJsZSgpP2kuaGlkZShlKTooaS5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9kZXRhY2goKSkpfXRvZ2dsZSgpe3RoaXMuX2lzVG9vbHRpcFZpc2libGUoKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX1faXNUb29sdGlwVmlzaWJsZSgpe3JldHVybiEhdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCl9X2NyZWF0ZU92ZXJsYXkoKXtpZih0aGlzLl9vdmVybGF5UmVmKXJldHVybiB0aGlzLl9vdmVybGF5UmVmO2xldCBlPXRoaXMuX3Njcm9sbERpc3BhdGNoZXIuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKHRoaXMuX2VsZW1lbnRSZWYpLGk9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZikud2l0aFRyYW5zZm9ybU9yaWdpbk9uKGAuJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcGApLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoITEpLndpdGhWaWV3cG9ydE1hcmdpbih0aGlzLl92aWV3cG9ydE1hcmdpbikud2l0aFNjcm9sbGFibGVDb250YWluZXJzKGUpO3JldHVybiBpLnBvc2l0aW9uQ2hhbmdlcy5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5fdXBkYXRlQ3VycmVudFBvc2l0aW9uQ2xhc3Moci5jb25uZWN0aW9uUGFpciksdGhpcy5fdG9vbHRpcEluc3RhbmNlJiZyLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcy5pc092ZXJsYXlDbGlwcGVkJiZ0aGlzLl90b29sdGlwSW5zdGFuY2UuaXNWaXNpYmxlKCkmJnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuaGlkZSgwKSl9KSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX292ZXJsYXkuY3JlYXRlKHtkaXJlY3Rpb246dGhpcy5fZGlyLHBvc2l0aW9uU3RyYXRlZ3k6aSxwYW5lbENsYXNzOmAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX1gLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCl9KSx0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2RldGFjaCgpKSx0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkucGlwZShvdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Rvb2x0aXBJbnN0YW5jZT8uX2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpKSx0aGlzLl9vdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShyPT57dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpJiYyNz09PXIua2V5Q29kZSYmIU1yKHIpJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKSl9KSx0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZVRvb2x0aXBJbnRlcmFjdGl2aXR5JiZ0aGlzLl9vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoYCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LXRvb2x0aXAtcGFuZWwtbm9uLWludGVyYWN0aXZlYCksdGhpcy5fb3ZlcmxheVJlZn1fZGV0YWNoKCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZT1udWxsfV91cGRhdGVQb3NpdGlvbihlKXtsZXQgaT1lLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kscj10aGlzLl9nZXRPcmlnaW4oKSxvPXRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpO2kud2l0aFBvc2l0aW9ucyhbdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLm1haW4sLi4uby5tYWlufSksdGhpcy5fYWRkT2Zmc2V0KHsuLi5yLmZhbGxiYWNrLC4uLm8uZmFsbGJhY2t9KV0pfV9hZGRPZmZzZXQoZSl7cmV0dXJuIGV9X2dldE9yaWdpbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aXx8ImJlbG93Ij09aT9yPXtvcmlnaW5YOiJjZW50ZXIiLG9yaWdpblk6ImFib3ZlIj09aT8idG9wIjoiYm90dG9tIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e29yaWdpblg6ImVuZCIsb3JpZ2luWToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm9yaWdpblgsci5vcmlnaW5ZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvcmlnaW5YOm8sb3JpZ2luWTpzfX19X2dldE92ZXJsYXlQb3NpdGlvbigpe2xldCByLGU9IXRoaXMuX2Rpcnx8Imx0ciI9PXRoaXMuX2Rpci52YWx1ZSxpPXRoaXMucG9zaXRpb247ImFib3ZlIj09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToiYm90dG9tIn06ImJlbG93Ij09aT9yPXtvdmVybGF5WDoiY2VudGVyIixvdmVybGF5WToidG9wIn06ImJlZm9yZSI9PWl8fCJsZWZ0Ij09aSYmZXx8InJpZ2h0Ij09aSYmIWU/cj17b3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImNlbnRlciJ9OigiYWZ0ZXIiPT1pfHwicmlnaHQiPT1pJiZlfHwibGVmdCI9PWkmJiFlKSYmKHI9e292ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImNlbnRlciJ9KTtsZXR7eDpvLHk6c309dGhpcy5faW52ZXJ0UG9zaXRpb24oci5vdmVybGF5WCxyLm92ZXJsYXlZKTtyZXR1cm57bWFpbjpyLGZhbGxiYWNrOntvdmVybGF5WDpvLG92ZXJsYXlZOnN9fX1fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UubWVzc2FnZT10aGlzLm1lc3NhZ2UsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSx0aGlzLl9uZ1pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKEh0KDEpLG90KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfSkpfV9zZXRUb29sdGlwQ2xhc3MoZSl7dGhpcy5fdG9vbHRpcEluc3RhbmNlJiYodGhpcy5fdG9vbHRpcEluc3RhbmNlLnRvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbWFya0ZvckNoZWNrKCkpfV9pbnZlcnRQb3NpdGlvbihlLGkpe3JldHVybiJhYm92ZSI9PT10aGlzLnBvc2l0aW9ufHwiYmVsb3ciPT09dGhpcy5wb3NpdGlvbj8idG9wIj09PWk/aT0iYm90dG9tIjoiYm90dG9tIj09PWkmJihpPSJ0b3AiKToiZW5kIj09PWU/ZT0ic3RhcnQiOiJzdGFydCI9PT1lJiYoZT0iZW5kIikse3g6ZSx5Oml9fV91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhlKXtsZXQgcyx7b3ZlcmxheVk6aSxvcmlnaW5YOnIsb3JpZ2luWTpvfT1lO2lmKHM9ImNlbnRlciI9PT1pP3RoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ImVuZCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJzdGFydCI9PT1yPyJsZWZ0IjoicmlnaHQiOiJib3R0b20iPT09aSYmInRvcCI9PT1vPyJhYm92ZSI6ImJlbG93IixzIT09dGhpcy5fY3VycmVudFBvc2l0aW9uKXtsZXQgYT10aGlzLl9vdmVybGF5UmVmO2lmKGEpe2xldCBsPWAke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS0ke09jZX0tYDthLnJlbW92ZVBhbmVsQ2xhc3MobCt0aGlzLl9jdXJyZW50UG9zaXRpb24pLGEuYWRkUGFuZWxDbGFzcyhsK3MpfXRoaXMuX2N1cnJlbnRQb3NpdGlvbj1zfX1fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpe3RoaXMuX2Rpc2FibGVkfHwhdGhpcy5tZXNzYWdlfHwhdGhpcy5fdmlld0luaXRpYWxpemVkfHx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aHx8KHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpP3RoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbIm1vdXNlZW50ZXIiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksdGhpcy5zaG93KCl9XSk6Im9mZiIhPT10aGlzLnRvdWNoR2VzdHVyZXMmJih0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaChbInRvdWNoc3RhcnQiLCgpPT57dGhpcy5fc2V0dXBQb2ludGVyRXhpdEV2ZW50c0lmTmVlZGVkKCksY2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLl90b3VjaHN0YXJ0VGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLnNob3coKSw1MDApfV0pKSx0aGlzLl9hZGRMaXN0ZW5lcnModGhpcy5fcGFzc2l2ZUxpc3RlbmVycykpfV9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKXtpZih0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkKXJldHVybjt0aGlzLl9wb2ludGVyRXhpdEV2ZW50c0luaXRpYWxpemVkPSEwO2xldCBlPVtdO2lmKHRoaXMuX3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpKWUucHVzaChbIm1vdXNlbGVhdmUiLGk9PntsZXQgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHwhdGhpcy5fb3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQuY29udGFpbnMocikpJiZ0aGlzLmhpZGUoKX1dLFsid2hlZWwiLGk9PnRoaXMuX3doZWVsTGlzdGVuZXIoaSldKTtlbHNlIGlmKCJvZmYiIT09dGhpcy50b3VjaEdlc3R1cmVzKXt0aGlzLl9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpO2xldCBpPSgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0KSx0aGlzLmhpZGUodGhpcy5fZGVmYXVsdE9wdGlvbnMudG91Y2hlbmRIaWRlRGVsYXkpfTtlLnB1c2goWyJ0b3VjaGVuZCIsaV0sWyJ0b3VjaGNhbmNlbCIsaV0pfXRoaXMuX2FkZExpc3RlbmVycyhlKSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLnB1c2goLi4uZSl9X2FkZExpc3RlbmVycyhlKXtlLmZvckVhY2goKFtpLHJdKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGkscixrY2UpfSl9X3BsYXRmb3JtU3VwcG9ydHNNb3VzZUV2ZW50cygpe3JldHVybiF0aGlzLl9wbGF0Zm9ybS5JT1MmJiF0aGlzLl9wbGF0Zm9ybS5BTkRST0lEfV93aGVlbExpc3RlbmVyKGUpe2lmKHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsZS5jbGllbnRZKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpIT09ciYmIXIuY29udGFpbnMoaSkmJnRoaXMuaGlkZSgpfX1fZGlzYWJsZU5hdGl2ZUdlc3R1cmVzSWZOZWNlc3NhcnkoKXtsZXQgZT10aGlzLnRvdWNoR2VzdHVyZXM7aWYoIm9mZiIhPT1lKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQscj1pLnN0eWxlOygib24iPT09ZXx8IklOUFVUIiE9PWkubm9kZU5hbWUmJiJURVhUQVJFQSIhPT1pLm5vZGVOYW1lKSYmKHIudXNlclNlbGVjdD1yLm1zVXNlclNlbGVjdD1yLndlYmtpdFVzZXJTZWxlY3Q9ci5Nb3pVc2VyU2VsZWN0PSJub25lIiksKCJvbiI9PT1lfHwhaS5kcmFnZ2FibGUpJiYoci53ZWJraXRVc2VyRHJhZz0ibm9uZSIpLHIudG91Y2hBY3Rpb249Im5vbmUiLHIud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtKbCgpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLGlucHV0czp7cG9zaXRpb246WyJtYXRUb29sdGlwUG9zaXRpb24iLCJwb3NpdGlvbiJdLGRpc2FibGVkOlsibWF0VG9vbHRpcERpc2FibGVkIiwiZGlzYWJsZWQiXSxzaG93RGVsYXk6WyJtYXRUb29sdGlwU2hvd0RlbGF5Iiwic2hvd0RlbGF5Il0saGlkZURlbGF5OlsibWF0VG9vbHRpcEhpZGVEZWxheSIsImhpZGVEZWxheSJdLHRvdWNoR2VzdHVyZXM6WyJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsInRvdWNoR2VzdHVyZXMiXSxtZXNzYWdlOlsibWF0VG9vbHRpcCIsIm1lc3NhZ2UiXSx0b29sdGlwQ2xhc3M6WyJtYXRUb29sdGlwQ2xhc3MiLCJ0b29sdGlwQ2xhc3MiXX19KSxufSkoKSxOY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEtXZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7c3VwZXIoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpLHRoaXMuX3Rvb2x0aXBDb21wb25lbnQ9SldlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFFpKSx3KEFlKSx3KGltKSx3KHlpKSx3KHB0KSx3KHVpKSx3KElBKSx3KHpyKSx3KEZjZSksdyhpciw4KSx3KFhXZSw4KSx3KEJ0KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRvb2x0aXAiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtdG9vbHRpcC10cmlnZ2VyIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLFpXZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZSx0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITEsdGhpcy5faXNWaXNpYmxlPSExLHRoaXMuX29uSGlkZT1uZXcgVGUsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSJOb29wQW5pbWF0aW9ucyI9PT1pfXNob3coZSl7Y2xlYXJUaW1lb3V0KHRoaXMuX2hpZGVUaW1lb3V0SWQpLHRoaXMuX3Nob3dUaW1lb3V0SWQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX3RvZ2dsZVZpc2liaWxpdHkoITApLHRoaXMuX3Nob3dUaW1lb3V0SWQ9dm9pZCAwfSxlKX1oaWRlKGUpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSx0aGlzLl9oaWRlVGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCExKSx0aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH0sZSl9YWZ0ZXJIaWRkZW4oKXtyZXR1cm4gdGhpcy5fb25IaWRlfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl9pc1Zpc2libGV9bmdPbkRlc3Ryb3koKXt0aGlzLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX29uSGlkZS5jb21wbGV0ZSgpLHRoaXMuX3RyaWdnZXJFbGVtZW50PW51bGx9X2hhbmRsZUJvZHlJbnRlcmFjdGlvbigpe3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbiYmdGhpcy5oaWRlKDApfV9tYXJrRm9yQ2hlY2soKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGFuZGxlTW91c2VMZWF2ZSh7cmVsYXRlZFRhcmdldDplfSl7KCFlfHwhdGhpcy5fdHJpZ2dlckVsZW1lbnQuY29udGFpbnMoZSkpJiYodGhpcy5pc1Zpc2libGUoKT90aGlzLmhpZGUodGhpcy5fbW91c2VMZWF2ZUhpZGVEZWxheSk6dGhpcy5fZmluYWxpemVBbmltYXRpb24oITEpKX1fb25TaG93KCl7fV9oYW5kbGVBbmltYXRpb25FbmQoe2FuaW1hdGlvbk5hbWU6ZX0peyhlPT09dGhpcy5fc2hvd0FuaW1hdGlvbnx8ZT09PXRoaXMuX2hpZGVBbmltYXRpb24pJiZ0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlPT09dGhpcy5fc2hvd0FuaW1hdGlvbil9X2NhbmNlbFBlbmRpbmdBbmltYXRpb25zKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3Nob3dUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXRoaXMuX2hpZGVUaW1lb3V0SWQ9dm9pZCAwfV9maW5hbGl6ZUFuaW1hdGlvbihlKXtlP3RoaXMuX2Nsb3NlT25JbnRlcmFjdGlvbj0hMDp0aGlzLmlzVmlzaWJsZSgpfHx0aGlzLl9vbkhpZGUubmV4dCgpfV90b2dnbGVWaXNpYmlsaXR5KGUpe2xldCBpPXRoaXMuX3Rvb2x0aXAubmF0aXZlRWxlbWVudCxyPXRoaXMuX3Nob3dBbmltYXRpb24sbz10aGlzLl9oaWRlQW5pbWF0aW9uO2lmKGkuY2xhc3NMaXN0LnJlbW92ZShlP286ciksaS5jbGFzc0xpc3QuYWRkKGU/cjpvKSx0aGlzLl9pc1Zpc2libGU9ZSxlJiYhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZSl7bGV0IHM9Z2V0Q29tcHV0ZWRTdHlsZShpKTsoIjBzIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLWR1cmF0aW9uIil8fCJub25lIj09PXMuZ2V0UHJvcGVydHlWYWx1ZSgiYW5pbWF0aW9uLW5hbWUiKSkmJih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9ITApfWUmJnRoaXMuX29uU2hvdygpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmKGkuY2xhc3NMaXN0LmFkZCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiKSx0aGlzLl9maW5hbGl6ZUFuaW1hdGlvbihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pLHcoTGksOCkpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpufSksbn0pKCksSldlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBaV2V7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsciksdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPWksdGhpcy5faXNIYW5kc2V0PXRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKCIobWF4LXdpZHRoOiA1OTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpLCAobWF4LXdpZHRoOiA5NTkuOThweCkgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSIpLHRoaXMuX3Nob3dBbmltYXRpb249Im1hdC10b29sdGlwLXNob3ciLHRoaXMuX2hpZGVBbmltYXRpb249Im1hdC10b29sdGlwLWhpZGUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KG5uKSx3KG5tKSx3KExpLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbHRpcC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdChqV2UsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fdG9vbHRpcD1yLmZpcnN0KX19LGhvc3RBdHRyczpbImFyaWEtaGlkZGVuIiwidHJ1ZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJtb3VzZWxlYXZlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlTW91c2VMZWF2ZShvKX0pLDImZSYmT3QoInpvb20iLGkuaXNWaXNpYmxlKCk/MTpudWxsKX0sZmVhdHVyZXM6W3R0XSxkZWNsczo0LHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtdG9vbHRpcCIsMywibmdDbGFzcyIsImFuaW1hdGlvbmVuZCJdLFsidG9vbHRpcCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGcoMCwiZGl2IiwwLDEpLFAoImFuaW1hdGlvbmVuZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUFuaW1hdGlvbkVuZChvKX0pLGooMiwiYXN5bmMiKSxEKDMpLHYoKSksMiZlKXtsZXQgcjthdCgibWF0LXRvb2x0aXAtaGFuZHNldCIsbnVsbD09KHI9VygyLDQsaS5faXNIYW5kc2V0KSk/bnVsbDpyLm1hdGNoZXMpLGIoIm5nQ2xhc3MiLGkudG9vbHRpcENsYXNzKSx4KDMpLHl0KGkubWVzc2FnZSl9fSxkZXBlbmRlbmNpZXM6W1BuLGZ0XSxzdHlsZXM6WyIubWF0LXRvb2x0aXB7Y29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweDttYXJnaW46MTRweDttYXgtd2lkdGg6MjUwcHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjhweDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0cmFuc2Zvcm06c2NhbGUoMCl9Lm1hdC10b29sdGlwLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle2FuaW1hdGlvbjpub25lO3RyYW5zZm9ybTpzY2FsZSgxKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtdG9vbHRpcHtvdXRsaW5lOnNvbGlkIDFweH0ubWF0LXRvb2x0aXAtaGFuZHNldHttYXJnaW46MjRweDtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjE2cHh9Lm1hdC10b29sdGlwLXBhbmVsLW5vbi1pbnRlcmFjdGl2ZXtwb2ludGVyLWV2ZW50czpub25lfUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDApfTUwJXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpzY2FsZSgwLjk5KX0xMDAle29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgbWF0LXRvb2x0aXAtaGlkZXswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm1hdC10b29sdGlwLXNob3d7YW5pbWF0aW9uOm1hdC10b29sdGlwLXNob3cgMjAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Lm1hdC10b29sdGlwLWhpZGV7YW5pbWF0aW9uOm1hdC10b29sdGlwLWhpZGUgMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkgZm9yd2FyZHN9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTGNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtwcm92aWRlcnM6W1lXZV0saW1wb3J0czpbUF8sa2UsVm8sZG4sZG4sU3VdfSksbn0pKCk7ZnVuY3Rpb24gZTdlKG4sdCl7aWYoMSZuJiYoZygwLCJtYXQtb3B0aW9uIiwxOSksRCgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7YigidmFsdWUiLGUpLHgoMSkscWUoIiAiLGUsIiAiKX19ZnVuY3Rpb24gdDdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LWZvcm0tZmllbGQiLDE2KSgxLCJtYXQtc2VsZWN0IiwxNyksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5fY2hhbmdlUGFnZVNpemUoci52YWx1ZSkpfSksRSgyLGU3ZSwyLDIsIm1hdC1vcHRpb24iLDE4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMik7YigiYXBwZWFyYW5jZSIsZS5fZm9ybUZpZWxkQXBwZWFyYW5jZSkoImNvbG9yIixlLmNvbG9yKSx4KDEpLGIoInZhbHVlIixlLnBhZ2VTaXplKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJwYW5lbENsYXNzIixlLnNlbGVjdENvbmZpZy5wYW5lbENsYXNzfHwiIikoImRpc2FibGVPcHRpb25DZW50ZXJpbmciLGUuc2VsZWN0Q29uZmlnLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpKCJhcmlhLWxhYmVsIixlLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsKSx4KDEpLGIoIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIG43ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwyMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDEpLHl0KGUucGFnZVNpemUpfX1mdW5jdGlvbiBpN2Uobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEQoMiksdigpLEUoMyx0N2UsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLEUoNCxuN2UsMiwxLCJkaXYiLDE1KSx2KCkpLDImbil7bGV0IGU9TSgpO3goMikscWUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSx4KDEpLGIoIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSkseCgxKSxiKCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gcjdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiwyMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5maXJzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDIyKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKX19ZnVuY3Rpb24gbzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2puKCksU2EoKSxnKDAsImJ1dHRvbiIsMjMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkubGFzdFBhZ2UoKSl9KSxqbigpLGcoMSwic3ZnIiw3KSxOKDIsInBhdGgiLDI0KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJtYXRUb29sdGlwIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpfX1Icigic3RhdGUiLFtFaSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixybih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkifSkpLEVpKCJ2aXNpYmxlIixybih7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSksSWkoIiogPT4gdmlzaWJsZSIsVmkoIjIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixPZihbcm4oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIixvZmZzZXQ6MH0pLHJuKHtvcGFjaXR5Oi41LHRyYW5zZm9ybToic2NhbGUoMC45OSkiLG9mZnNldDouNX0pLHJuKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSIsb2Zmc2V0OjF9KV0pKSksSWkoIiogPT4gaGlkZGVuIixWaSgiMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLHJuKHtvcGFjaXR5OjB9KSkpXSk7dmFyIG9nPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IFRlLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9KGUsaSxyKT0+e2lmKDA9PXJ8fDA9PWkpcmV0dXJuYDAgb2YgJHtyfWA7bGV0IG89ZSppO3JldHVybmAke28rMX0gXHUyMDEzICR7bzwocj1NYXRoLm1heChyLDApKT9NYXRoLm1pbihvK2kscik6bytpfSBvZiAke3J9YH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGE3ZT17cHJvdmlkZTpvZyxkZXBzOltbbmV3IE9vLG5ldyBUYSxvZ11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBvZ319LGM3ZT1uZXcgc2UoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksdTdlPWdvKE9BKGNsYXNze30pKSxkN2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHU3ZXtjb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRyx0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoUGkoZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9UGkoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChQaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5QaShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9V3QoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1XdChlKX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4KzEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1wcmV2aW91c1BhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5wYWdlSW5kZXgtMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWZpcnN0UGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLmdldE51bWJlck9mUGFnZXMoKS0xLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4Pj0xJiYwIT10aGlzLnBhZ2VTaXplfWhhc05leHRQYWdlKCl7bGV0IGU9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMTtyZXR1cm4gdGhpcy5wYWdlSW5kZXg8ZSYmMCE9dGhpcy5wYWdlU2l6ZX1nZXROdW1iZXJPZlBhZ2VzKCl7cmV0dXJuIHRoaXMucGFnZVNpemU/TWF0aC5jZWlsKHRoaXMubGVuZ3RoL3RoaXMucGFnZVNpemUpOjB9X2NoYW5nZVBhZ2VTaXplKGUpe2xldCByPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS9lKXx8MCx0aGlzLnBhZ2VTaXplPWUsdGhpcy5fZW1pdFBhZ2VFdmVudChyKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7IXRoaXMuX2luaXRpYWxpemVkfHwodGhpcy5wYWdlU2l6ZXx8KHRoaXMuX3BhZ2VTaXplPTAhPXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aD90aGlzLnBhZ2VTaXplT3B0aW9uc1swXTo1MCksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zPXRoaXMucGFnZVNpemVPcHRpb25zLnNsaWNlKCksLTE9PT10aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuaW5kZXhPZih0aGlzLnBhZ2VTaXplKSYmdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5wYWdlU2l6ZSksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGUsaSk9PmUtaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9lbWl0UGFnZUV2ZW50KGUpe3RoaXMucGFnZS5lbWl0KHtwcmV2aW91c1BhZ2VJbmRleDplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLGxlbmd0aDp0aGlzLmxlbmd0aH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7SmwoKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixpbnB1dHM6e2NvbG9yOiJjb2xvciIscGFnZUluZGV4OiJwYWdlSW5kZXgiLGxlbmd0aDoibGVuZ3RoIixwYWdlU2l6ZToicGFnZVNpemUiLHBhZ2VTaXplT3B0aW9uczoicGFnZVNpemVPcHRpb25zIixoaWRlUGFnZVNpemU6ImhpZGVQYWdlU2l6ZSIsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6InNob3dGaXJzdExhc3RCdXR0b25zIixzZWxlY3RDb25maWc6InNlbGVjdENvbmZpZyJ9LG91dHB1dHM6e3BhZ2U6InBhZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksc089KCgpPT57Y2xhc3MgbiBleHRlbmRzIGQ3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpLHImJm51bGwhPXIuZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9ci5mb3JtRmllbGRBcHBlYXJhbmNlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhvZyksdyhubiksdyhjN2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwicGFuZWxDbGFzcyIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJhcmlhLWxhYmVsIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJkaXYiLDApKDEsImRpdiIsMSksRSgyLGk3ZSw1LDMsImRpdiIsMiksZygzLCJkaXYiLDMpKDQsImRpdiIsNCksRCg1KSx2KCksRSg2LHI3ZSwzLDUsImJ1dHRvbiIsNSksZyg3LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksam4oKSxnKDgsInN2ZyIsNyksTig5LCJwYXRoIiw4KSx2KCkoKSxTYSgpLGcoMTAsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLGpuKCksZygxMSwic3ZnIiw3KSxOKDEyLCJwYXRoIiwxMCksdigpKCksRSgxMyxvN2UsMyw1LCJidXR0b24iLDExKSx2KCkoKSgpKSwyJmUmJih4KDIpLGIoIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSkseCgzKSxxZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIikseCgxKSxiKCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSx4KDEpLGIoIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksemUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLHgoMyksYigibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSx6ZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSx4KDMpLGIoIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSwkbixEdSxKcCx1YSxOY2VdLHN0eWxlczpbIi5tYXQtcGFnaW5hdG9ye2Rpc3BsYXk6YmxvY2t9Lm1hdC1wYWdpbmF0b3Itb3V0ZXItY29udGFpbmVye2Rpc3BsYXk6ZmxleH0ubWF0LXBhZ2luYXRvci1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7cGFkZGluZzowIDhweDtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlO3dpZHRoOjEwMCV9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXple2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6OHB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbHttYXJnaW46MCA0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdHttYXJnaW46NnB4IDRweCAwIDRweDt3aWR0aDo1NnB4fS5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5le3dpZHRoOjY0cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGx7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbHttYXJnaW46MCAzMnB4IDAgMjRweH0ubWF0LXBhZ2luYXRvci1yYW5nZS1hY3Rpb25ze2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9Lm1hdC1wYWdpbmF0b3ItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyOHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LXBhZ2luYXRvci1pY29ue3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcGFnaW5hdG9yLWljb257ZmlsbDpDYW52YXNUZXh0fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEJjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOlthN2VdLGltcG9ydHM6W2tlLFJpLElsLExjZSxkbl19KSxufSkoKSxoN2U9WyJtYXQtc29ydC1oZWFkZXIiLCIiXTtmdW5jdGlvbiBmN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDMpLFAoIkBhcnJvd1Bvc2l0aW9uLnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfSkoIkBhcnJvd1Bvc2l0aW9uLmRvbmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oKS5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSl9KSxOKDEsImRpdiIsNCksZygyLCJkaXYiLDUpLE4oMywiZGl2Iiw2KSg0LCJkaXYiLDcpKDUsImRpdiIsOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7YigiQGFycm93T3BhY2l0eSIsZS5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhcnJvd1Bvc2l0aW9uIixlLl9nZXRBcnJvd1ZpZXdTdGF0ZSgpKSgiQGFsbG93Q2hpbGRyZW4iLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSkseCgyKSxiKCJAaW5kaWNhdG9yIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQGxlZnRQb2ludGVyIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLHgoMSksYigiQHJpZ2h0UG9pbnRlciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKX19dmFyIG03ZT1bIioiXSxWY2U9bmV3IHNlKCJNQVRfU09SVF9ERUZBVUxUX09QVElPTlMiKSxnN2U9T0EoZ28oY2xhc3N7fSkpLHRTPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBnN2V7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1lLHRoaXMuc29ydGFibGVzPW5ldyBNYXAsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBUZSx0aGlzLnN0YXJ0PSJhc2MiLHRoaXMuX2RpcmVjdGlvbj0iIix0aGlzLnNvcnRDaGFuZ2U9bmV3IEd9Z2V0IGRpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXJlY3Rpb259c2V0IGRpcmVjdGlvbihlKXt0aGlzLl9kaXJlY3Rpb249ZX1nZXQgZGlzYWJsZUNsZWFyKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVDbGVhcn1zZXQgZGlzYWJsZUNsZWFyKGUpe3RoaXMuX2Rpc2FibGVDbGVhcj1XdChlKX1yZWdpc3RlcihlKXt0aGlzLnNvcnRhYmxlcy5zZXQoZS5pZCxlKX1kZXJlZ2lzdGVyKGUpe3RoaXMuc29ydGFibGVzLmRlbGV0ZShlLmlkKX1zb3J0KGUpe3RoaXMuYWN0aXZlIT1lLmlkPyh0aGlzLmFjdGl2ZT1lLmlkLHRoaXMuZGlyZWN0aW9uPWUuc3RhcnQ/ZS5zdGFydDp0aGlzLnN0YXJ0KTp0aGlzLmRpcmVjdGlvbj10aGlzLmdldE5leHRTb3J0RGlyZWN0aW9uKGUpLHRoaXMuc29ydENoYW5nZS5lbWl0KHthY3RpdmU6dGhpcy5hY3RpdmUsZGlyZWN0aW9uOnRoaXMuZGlyZWN0aW9ufSl9Z2V0TmV4dFNvcnREaXJlY3Rpb24oZSl7aWYoIWUpcmV0dXJuIiI7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1bImFzYyIsImRlc2MiXTtyZXR1cm4iZGVzYyI9PW4mJmUucmV2ZXJzZSgpLHR8fGUucHVzaCgiIiksZX0oZS5zdGFydHx8dGhpcy5zdGFydCxlPy5kaXNhYmxlQ2xlYXI/P3RoaXMuZGlzYWJsZUNsZWFyPz8hIXRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlQ2xlYXIpLG89ci5pbmRleE9mKHRoaXMuZGlyZWN0aW9uKSsxO3JldHVybiBvPj1yLmxlbmd0aCYmKG89MCkscltvXX1uZ09uSW5pdCgpe3RoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFZjZSw4KSl9LG4uXHUwMjc1ZGlyPU9lKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFNvcnQiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc29ydCJdLGlucHV0czp7ZGlzYWJsZWQ6WyJtYXRTb3J0RGlzYWJsZWQiLCJkaXNhYmxlZCJdLGFjdGl2ZTpbIm1hdFNvcnRBY3RpdmUiLCJhY3RpdmUiXSxzdGFydDpbIm1hdFNvcnRTdGFydCIsInN0YXJ0Il0sZGlyZWN0aW9uOlsibWF0U29ydERpcmVjdGlvbiIsImRpcmVjdGlvbiJdLGRpc2FibGVDbGVhcjpbIm1hdFNvcnREaXNhYmxlQ2xlYXIiLCJkaXNhYmxlQ2xlYXIiXX0sb3V0cHV0czp7c29ydENoYW5nZToibWF0U29ydENoYW5nZSJ9LGV4cG9ydEFzOlsibWF0U29ydCJdLGZlYXR1cmVzOlt0dCx6dF19KSxufSkoKSxMaD1ySi5FTlRFUklORysiICIraUouU1RBTkRBUkRfQ1VSVkUsUnk9e2luZGljYXRvcjpIcigiaW5kaWNhdG9yIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwcHgpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTBweCkifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLGxlZnRQb2ludGVyOkhyKCJsZWZ0UG9pbnRlciIsW0VpKCJhY3RpdmUtYXNjLCBhc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxFaSgiYWN0aXZlLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLElpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsVmkoTGgpKV0pLHJpZ2h0UG9pbnRlcjpIcigicmlnaHRQb2ludGVyIixbRWkoImFjdGl2ZS1hc2MsIGFzYyIscm4oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksRWkoImFjdGl2ZS1kZXNjLCBkZXNjIixybih7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksSWkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixWaShMaCkpXSksYXJyb3dPcGFjaXR5OkhyKCJhcnJvd09wYWNpdHkiLFtFaSgiZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe29wYWNpdHk6MX0pKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCIscm4oe29wYWNpdHk6LjU0fSkpLEVpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjLCBoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjLCB2b2lkIixybih7b3BhY2l0eTowfSkpLElpKCIqID0+IGFzYywgKiA9PiBkZXNjLCAqID0+IGFjdGl2ZSwgKiA9PiBoaW50LCAqID0+IHZvaWQiLFZpKCIwbXMiKSksSWkoIiogPD0+ICoiLFZpKExoKSldKSxhcnJvd1Bvc2l0aW9uOkhyKCJhcnJvd1Bvc2l0aW9uIixbSWkoIiogPT4gZGVzYy10by1oaW50LCAqID0+IGRlc2MtdG8tYWN0aXZlIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWRlc2MsICogPT4gYWN0aXZlLXRvLWRlc2MiLFZpKExoLE9mKFtybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KV0pKSksSWkoIiogPT4gYXNjLXRvLWhpbnQsICogPT4gYXNjLXRvLWFjdGl2ZSIsVmkoTGgsT2YoW3JuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxJaSgiKiA9PiBoaW50LXRvLWFzYywgKiA9PiBhY3RpdmUtdG8tYXNjIixWaShMaCxPZihbcm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pXSkpKSxFaSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCwgZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIscm4oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSksRWkoImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MiLHJuKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSkpLEVpKCJoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjIixybih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSkpXSksYWxsb3dDaGlsZHJlbjpIcigiYWxsb3dDaGlsZHJlbiIsW0lpKCIqIDw9PiAqIixbRmYoIkAqIixrZigpLHtvcHRpb25hbDohMH0pXSldKX0sYU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcgVGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9Z2Uoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLHk3ZT17cHJvdmlkZTphTyxkZXBzOltbbmV3IE9vLG5ldyBUYSxhT11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBhT319LGI3ZT1nbyhjbGFzc3t9KSxIY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGI3ZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5faW50bD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc29ydD1yLHRoaXMuX2NvbHVtbkRlZj1vLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEsdGhpcy5fdmlld1N0YXRlPXt9LHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPSJTb3J0IixjPy5hcnJvd1Bvc2l0aW9uJiYodGhpcy5hcnJvd1Bvc2l0aW9uPWM/LmFycm93UG9zaXRpb24pLHRoaXMuX2hhbmRsZVN0YXRlQ2hhbmdlcygpfWdldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVd0KGUpfW5nT25Jbml0KCl7IXRoaXMuaWQmJnRoaXMuX2NvbHVtbkRlZiYmKHRoaXMuaWQ9dGhpcy5fY29sdW1uRGVmLm5hbWUpLHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHt0b1N0YXRlOnRoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZSI6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSx0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpLHRoaXMuX3NvcnRCdXR0b249dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiksdGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntsZXQgaT0hIWU7aSE9PXRoaXMuX3Nob3dJbmRpY2F0b3JIaW50JiYodGhpcy5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKGUpe3RoaXMuX2lzRGlzYWJsZWQoKSYmZXx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PWUsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoZSl7dGhpcy5fdmlld1N0YXRlPWV8fHt9LHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24mJih0aGlzLl92aWV3U3RhdGU9e3RvU3RhdGU6ZS50b1N0YXRlfSl9X3RvZ2dsZU9uSW50ZXJhY3Rpb24oKXt0aGlzLl9zb3J0LnNvcnQodGhpcyksKCJoaW50Ij09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlKSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKGUpeyF0aGlzLl9pc0Rpc2FibGVkKCkmJigzMj09PWUua2V5Q29kZXx8MTM9PT1lLmtleUNvZGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2xldCBlPXRoaXMuX3ZpZXdTdGF0ZS5mcm9tU3RhdGU7cmV0dXJuKGU/YCR7ZX0tdG8tYDoiIikrdGhpcy5fdmlld1N0YXRlLnRvU3RhdGV9X3VwZGF0ZUFycm93RGlyZWN0aW9uKCl7dGhpcy5fYXJyb3dEaXJlY3Rpb249dGhpcy5faXNTb3J0ZWQoKT90aGlzLl9zb3J0LmRpcmVjdGlvbjp0aGlzLnN0YXJ0fHx0aGlzLl9zb3J0LnN0YXJ0fV9pc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZWR9X2dldEFyaWFTb3J0QXR0cmlidXRlKCl7cmV0dXJuIHRoaXMuX2lzU29ydGVkKCk/ImFzYyI9PXRoaXMuX3NvcnQuZGlyZWN0aW9uPyJhc2NlbmRpbmciOiJkZXNjZW5kaW5nIjoibm9uZSJ9X3JlbmRlckFycm93KCl7cmV0dXJuIXRoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5faXNTb3J0ZWQoKX1fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpe3RoaXMuX3NvcnRCdXR0b24mJih0aGlzLl9hcmlhRGVzY3JpYmVyPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9zb3J0QnV0dG9uLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbiksdGhpcy5fYXJpYURlc2NyaWJlcj8uZGVzY3JpYmUodGhpcy5fc29ydEJ1dHRvbixlKSksdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPWV9X2hhbmRsZVN0YXRlQ2hhbmdlcygpe3RoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uPXVuKHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0Ll9zdGF0ZUNoYW5nZXMsdGhpcy5faW50bC5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc1NvcnRlZCgpJiYodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoYU8pLHcobm4pLHcodFMsOCksdygiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLDgpLHcoenIpLHcoQWUpLHcoSUEsOCksdyhWY2UsOCkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSksMiZlJiYoemUoImFyaWEtc29ydCIsaS5fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSksYXQoIm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCIsaS5faXNEaXNhYmxlZCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDpbIm1hdC1zb3J0LWhlYWRlciIsImlkIl0sYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsc3RhcnQ6InN0YXJ0Iixzb3J0QWN0aW9uRGVzY3JpcHRpb246InNvcnRBY3Rpb25EZXNjcmlwdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmg3ZSxuZ0NvbnRlbnRTZWxlY3RvcnM6bTdlLGRlY2xzOjQsdmFyczo3LGNvbnN0czpbWzEsIm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1jb250ZW50Il0sWyJjbGFzcyIsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyIsNCwibmdJZiJdLFsxLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciXSxbMSwibWF0LXNvcnQtaGVhZGVyLXN0ZW0iXSxbMSwibWF0LXNvcnQtaGVhZGVyLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHdpKCksZygwLCJkaXYiLDApKDEsImRpdiIsMSksTm4oMiksdigpLEUoMyxmN2UsNiw2LCJkaXYiLDIpLHYoKSksMiZlJiYoYXQoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLGkuX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09PWkuYXJyb3dQb3NpdGlvbiksemUoInRhYmluZGV4IixpLl9pc0Rpc2FibGVkKCk/bnVsbDowKSgicm9sZSIsaS5faXNEaXNhYmxlZCgpP251bGw6ImJ1dHRvbiIpLHgoMyksYigibmdJZiIsaS5fcmVuZGVyQXJyb3coKSkpfSxkZXBlbmRlbmNpZXM6W1hlXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc29ydC1oZWFkZXItY29udGVudHt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3Jle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7b3BhY2l0eTowfS5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgMCAwIDZweH0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDZweCAwIDB9Lm1hdC1zb3J0LWhlYWRlci1zdGVte2JhY2tncm91bmQ6Y3VycmVudENvbG9yO2hlaWdodDoxMHB4O3dpZHRoOjJweDttYXJnaW46YXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1zdGVte3dpZHRoOjA7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItaW5kaWNhdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle21hcmdpbjphdXRvO2hlaWdodDoycHg7d2lkdGg6MnB4O2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXt3aWR0aDowO2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7d2lkdGg6NnB4O2hlaWdodDoycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OnNvbGlkIDZweDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0O2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0O3JpZ2h0OjB9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUnkuaW5kaWNhdG9yLFJ5LmxlZnRQb2ludGVyLFJ5LnJpZ2h0UG9pbnRlcixSeS5hcnJvd09wYWNpdHksUnkuYXJyb3dQb3NpdGlvbixSeS5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxVY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbeTdlXSxpbXBvcnRzOltrZSxkbl19KSxufSkoKTtmdW5jdGlvbiBReihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3N0aWNreT0hMSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfWdldCBzdGlja3koKXtyZXR1cm4gdGhpcy5fc3RpY2t5fXNldCBzdGlja3kodCl7bGV0IGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1XdCh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9aGFzU3RpY2t5Q2hhbmdlZCgpe2xldCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19dmFyIEt6PW5ldyBzZSgiQ0RLX1RBQkxFIiksemNlPShuZXcgc2UoInRleHQtY29sdW1uLW9wdGlvbnMiKSxReihjbGFzc3t9KSxuZXcgc2UoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIiksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPWl9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuX2NvbHVtbnNEaWZmZXIpe2xldCBpPWUuY29sdW1ucyYmZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoaSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGkpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgamNlP2UuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgR2NlP2UuZm9vdGVyQ2VsbC50ZW1wbGF0ZTplLmNlbGwudGVtcGxhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoT2kpLHcodGMpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixmZWF0dXJlczpbenRdfSksbn0pKCkpLHc3ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxqY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHc3ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLE03ZT1ReihjbGFzcyBleHRlbmRzIHpjZXt9KSxHY2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE03ZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE9pKSx3KHRjKSx3KEt6LDgpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LHp0XX0pLG59KSgpLFdjZT0obmV3IHNlKCJDREtfU1BMIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0NkXX0pLG59KSgpKSxxY2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W1djZSxkbixkbl19KSxufSkoKSxaej1jbGFzcyBleHRlbmRzIGtfe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgVnIoW10pLHRoaXMuX2ZpbHRlcj1uZXcgVnIoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IFRlLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKE5WKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLHU9dHlwZW9mIGwsZD10eXBlb2YgYzt1IT09ZCYmKCJudW1iZXIiPT09dSYmKGwrPSIiKSwibnVtYmVyIj09PWQmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBWcih0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfXNldCBkYXRhKHQpe3Q9QXJyYXkuaXNBcnJheSh0KT90OltdLHRoaXMuX2RhdGEubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHQpfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5fZmlsdGVyLnZhbHVlfXNldCBmaWx0ZXIodCl7dGhpcy5fZmlsdGVyLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0aGlzLmRhdGEpfWdldCBzb3J0KCl7cmV0dXJuIHRoaXMuX3NvcnR9c2V0IHNvcnQodCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBwYWdpbmF0b3IoKXtyZXR1cm4gdGhpcy5fcGFnaW5hdG9yfXNldCBwYWdpbmF0b3IodCl7dGhpcy5fcGFnaW5hdG9yPXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9X3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpe2xldCB0PXRoaXMuX3NvcnQ/dW4odGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOmp0KG51bGwpLGU9dGhpcy5fcGFnaW5hdG9yP3VuKHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpqdChudWxsKSxyPXBuKFt0aGlzLl9kYXRhLHRoaXMuX2ZpbHRlcl0pLnBpcGUoQigoW2FdKT0+dGhpcy5fZmlsdGVyRGF0YShhKSkpLG89cG4oW3IsdF0pLnBpcGUoQigoW2FdKT0+dGhpcy5fb3JkZXJEYXRhKGEpKSkscz1wbihbbyxlXSkucGlwZShCKChbYV0pPT50aGlzLl9wYWdlRGF0YShhKSkpO3RoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1zLnN1YnNjcmliZShhPT50aGlzLl9yZW5kZXJEYXRhLm5leHQoYSkpfV9maWx0ZXJEYXRhKHQpe3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT1udWxsPT10aGlzLmZpbHRlcnx8IiI9PT10aGlzLmZpbHRlcj90OnQuZmlsdGVyKGU9PnRoaXMuZmlsdGVyUHJlZGljYXRlKGUsdGhpcy5maWx0ZXIpKSx0aGlzLnBhZ2luYXRvciYmdGhpcy5fdXBkYXRlUGFnaW5hdG9yKHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCksdGhpcy5maWx0ZXJlZERhdGF9X29yZGVyRGF0YSh0KXtyZXR1cm4gdGhpcy5zb3J0P3RoaXMuc29ydERhdGEodC5zbGljZSgpLHRoaXMuc29ydCk6dH1fcGFnZURhdGEodCl7aWYoIXRoaXMucGFnaW5hdG9yKXJldHVybiB0O2xldCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtsZXQgaT1NYXRoLmNlaWwoZS5sZW5ndGgvZS5wYWdlU2l6ZSktMXx8MCxyPU1hdGgubWluKGUucGFnZUluZGV4LGkpO3IhPT1lLnBhZ2VJbmRleCYmKGUucGFnZUluZGV4PXIsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcy5uZXh0KCkpfX0pfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPW51bGx9fSxsTz1jbGFzcyBleHRlbmRzIFp6e30sVDdlPVsiZGlhbG9nUG9wdXAiXSxEN2U9WyJodWVTbGlkZXIiXSxBN2U9WyJhbHBoYVNsaWRlciJdO2Z1bmN0aW9uIEk3ZShuLHQpe2lmKDEmbiYmTigwLCJkaXYiKSwyJm4pe2xldCBlPU0oKTtSYigiYXJyb3cgYXJyb3ctIixlLmNwVXNlUG9zaXRpb24sIiIpLE90KCJ0b3AiLGUuYXJyb3dUb3AsInB4Iil9fWZ1bmN0aW9uIFA3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMjgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25EcmFnRW5kKCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pLE4oMSwiZGl2IiwxNCksdigpfWlmKDImbil7bGV0IGU9TSgpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmh1ZVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpKCJyZ1kiLDEpLHgoMSksT3QoInRvcCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIFI3ZShuLHQpezEmbiYmKGpuKCksZygwLCJzdmciLDI5KSxOKDEsInBhdGgiLDMwKSgyLCJwYXRoIiwzMSksdigpKX1mdW5jdGlvbiBPN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLEQoMSksdigpfWlmKDImbil7bGV0IGU9TSgpO2VhKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSxiKCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLHgoMSkscWUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gazdlKG4sdCl7MSZuJiZOKDAsImRpdiIsMzMpfWZ1bmN0aW9uIEY3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gTjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEw3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsMzQpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25DeWFuSW5wdXQocikpfSksdigpLGcoMywiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbk1hZ2VudGFJbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uWWVsbG93SW5wdXQocikpfSksdigpLGcoNSwiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vbkJsYWNrSW5wdXQocikpfSksdigpLEUoNixGN2UsMSwyLCJpbnB1dCIsMzcpLHYoKSxnKDcsImRpdiIsMzUpKDgsImRpdiIpLEQoOSwiQyIpLHYoKSxnKDEwLCJkaXYiKSxEKDExLCJNIiksdigpLGcoMTIsImRpdiIpLEQoMTMsIlkiKSx2KCksZygxNCwiZGl2IiksRCgxNSwiSyIpLHYoKSxFKDE2LE43ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLHgoMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSkseCgxKSxiKCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDEwKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIEI3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gVjdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IdWVJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLHYoKSxnKDQsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25MaWdodG5lc3NJbnB1dChyKSl9KSx2KCksRSg1LEI3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNiwiZGl2IiwzNSkoNywiZGl2IiksRCg4LCJIIiksdigpLGcoOSwiZGl2IiksRCgxMCwiUyIpLHYoKSxnKDExLCJkaXYiKSxEKDEyLCJMIiksdigpLEUoMTMsVjdlLDIsMCwiZGl2IiwzOCksdigpKCl9aWYoMiZuKXtsZXQgZT1NKCk7T3QoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIikseCgyKSxiKCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLHgoMSksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSx4KDEpLGIoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCkseCgxKSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCkseCg4KSxiKCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFU3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9TSgyKTtiKCJyZyIsMSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gejdlKG4sdCl7MSZuJiYoZygwLCJkaXYiKSxEKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIGo3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDIpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MyksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25SZWRJbnB1dChyKSl9KSx2KCksZygzLCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uR3JlZW5JbnB1dChyKSl9KSx2KCksZyg0LCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uQmx1ZUlucHV0KHIpKX0pLHYoKSxFKDUsVTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg2LCJkaXYiLDM1KSg3LCJkaXYiKSxEKDgsIlIiKSx2KCksZyg5LCJkaXYiKSxEKDEwLCJHIiksdigpLGcoMTEsImRpdiIpLEQoMTIsIkIiKSx2KCksRSgxMyx6N2UsMiwwLCJkaXYiLDM4KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTtPdCgiZGlzcGxheSIsMSE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSx4KDIpLGIoInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQucikseCgxKSxiKCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmcpLHgoMSksYigicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5iKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSx4KDgpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gRzdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiaW5wdXQiLDM5KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWxwaGFJbnB1dChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2IoInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBXN2Uobix0KXsxJm4mJihnKDAsImRpdiIpLEQoMSwiQSIpLHYoKSl9ZnVuY3Rpb24gcTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxQKCJibHVyIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChudWxsKSl9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25IZXhJbnB1dChyKSl9KSx2KCksRSgzLEc3ZSwxLDIsImlucHV0IiwzNyksdigpLGcoNCwiZGl2IiwzNSkoNSwiZGl2IiksRCg2LCJIZXgiKSx2KCksRSg3LFc3ZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO090KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGF0KCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCgyKSxiKCJ2YWx1ZSIsZS5oZXhUZXh0KSx4KDEpLGIoIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCkseCg0KSxiKCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBZN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJpbnB1dCIsMzkpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gcmUoZSksb2UoTSgyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25BbHBoYUlucHV0KHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMik7YigicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIFg3ZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkub25WYWx1ZUlucHV0KHIpKX0pLHYoKSxFKDMsWTdlLDEsMiwiaW5wdXQiLDM3KSx2KCksZyg0LCJkaXYiLDM1KSg1LCJkaXYiKSxEKDYsIlYiKSx2KCksZyg3LCJkaXYiKSxEKDgsIkEiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMiksYigicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSx4KDEpLGIoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gUTdlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2Iiw0NykoMSwic3BhbiIsNDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiByZShlKSxvZShNKCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLHYoKSxnKDIsInNwYW4iLDQ4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gcmUoZSksb2UoTSgpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLHYoKSgpfX1mdW5jdGlvbiBLN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1NSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykub25SZW1vdmVQcmVzZXRDb2xvcihyLG8pKX0pLHYoKX0yJm4mJmVhKE0oNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBaN2Uobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJkaXYiLDUzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1yZShlKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLEUoMSxLN2UsMSwzLCJzcGFuIiw1NCksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDMpO090KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uIEo3ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiksRSgxLFo3ZSwyLDMsImRpdiIsNTIpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRDb2xvcnNDbGFzcykseCgxKSxiKCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gJDdlKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcykseCgxKSx5dChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gZTllKG4sdCl7aWYoMSZuJiYoZygwLCJkaXYiLDQ5KSxOKDEsImhyIiksZygyLCJkaXYiLDUwKSxEKDMpLHYoKSxFKDQsSjdlLDIsNCwiZGl2Iiw1MSksRSg1LCQ3ZSwyLDQsImRpdiIsNTEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgzKSx5dChlLmNwUHJlc2V0TGFiZWwpLHgoMSksYigibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiB0OWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDU4KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oMikub25DYW5jZWxDb2xvcihyKSl9KSxEKDEpLHYoKX1pZigyJm4pe2xldCBlPU0oMik7ZWEoZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gbjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiYnV0dG9uIiw1OCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKDIpLm9uQWNjZXB0Q29sb3IocikpfSksRCgxKSx2KCl9aWYoMiZuKXtsZXQgZT1NKDIpO2VhKGUuY3BPS0J1dHRvbkNsYXNzKSx4KDEpLHl0KGUuY3BPS0J1dHRvblRleHQpfX1mdW5jdGlvbiBpOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTYpLEUoMSx0OWUsMiw0LCJidXR0b24iLDU3KSxFKDIsbjllLDIsNCwiYnV0dG9uIiw1NyksdigpKSwyJm4pe2xldCBlPU0oKTt4KDEpLGIoIm5nSWYiLGUuY3BDYW5jZWxCdXR0b24pLHgoMSksYigibmdJZiIsZS5jcE9LQnV0dG9uKX19ZnVuY3Rpb24gcjllKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBvOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNTkpLEUoMSxyOWUsMSwwLCJuZy1jb250YWluZXIiLDYwKSx2KCkpLDImbil7bGV0IGU9TSgpO3goMSksYigibmdUZW1wbGF0ZU91dGxldCIsZS5jcEV4dHJhVGVtcGxhdGUpfX12YXIgcnM9KCgpPT4oZnVuY3Rpb24obil7bltuLkhFWD0wXT0iSEVYIixuW24uUkdCQT0xXT0iUkdCQSIsbltuLkhTTEE9Ml09IkhTTEEiLG5bbi5DTVlLPTNdPSJDTVlLIn0ocnN8fChycz17fSkpLHJzKSkoKSxMYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzLmE9cn19LE95PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sWWQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy5sPWksdGhpcy5hPXJ9fSxzZz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PWksdGhpcy5rPXIsdGhpcy5hPW99fSxsOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEd9aW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoaSk7ZWxzZXtsZXQgcj1wYXJzZUZsb2F0KGkpO3RoaXMubmV3VmFsdWUuZW1pdCh7djpyLHJnOnRoaXMucmd9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJ0ZXh0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlucHV0Q2hhbmdlKG8pfSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjOWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsUmVmPWUsdGhpcy5kcmFnRW5kPW5ldyBHLHRoaXMuZHJhZ1N0YXJ0PW5ldyBHLHRoaXMubmV3VmFsdWU9bmV3IEcsdGhpcy5saXN0ZW5lck1vdmU9aT0+dGhpcy5tb3ZlKGkpLHRoaXMubGlzdGVuZXJTdG9wPSgpPT50aGlzLnN0b3AoKX1tb3VzZURvd24oZSl7dGhpcy5zdGFydChlKX10b3VjaFN0YXJ0KGUpe3RoaXMuc3RhcnQoZSl9bW92ZShlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDdXJzb3IoZSl9c3RhcnQoZSl7dGhpcy5zZXRDdXJzb3IoZSksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdTdGFydC5lbWl0KCl9c3RvcCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ0VuZC5lbWl0KCl9Z2V0WChlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVg/ZS5wYWdlWDplLnRvdWNoZXNbMF0ucGFnZVgpLWkubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WShlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVk/ZS5wYWdlWTplLnRvdWNoZXNbMF0ucGFnZVkpLWkudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHI9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxvPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRYKGUpLGkpKSxzPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRZKGUpLHIpKTt2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHtzOm8vaSx2OjEtcy9yLHJnWDp0aGlzLnJnWCxyZ1k6dGhpcy5yZ1l9KTp2b2lkIDA9PT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnMvcixyZ1k6dGhpcy5yZ1l9KTp2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwPT09dGhpcy5yZ1kmJnRoaXMubmV3VmFsdWUuZW1pdCh7djpvL2kscmdYOnRoaXMucmdYfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoQWUpKX0sbi5cdTAyNzVkaXI9T2Uoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZURvd24obyl9KSgidG91Y2hzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIGkudG91Y2hTdGFydChvKX0pfSxpbnB1dHM6e3JnWDoicmdYIixyZ1k6InJnWSIsc2xpZGVyOiJzbGlkZXIifSxvdXRwdXRzOntkcmFnRW5kOiJkcmFnRW5kIixkcmFnU3RhcnQ6ImRyYWdTdGFydCIsbmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSxjTz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LHVPPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sSno9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKGUpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PWUmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPWV9aHN2YTJoc2xhKGUpe2xldCBpPWUuaCxyPWUucyxvPWUudixzPWUuYTtpZigwPT09bylyZXR1cm4gbmV3IFlkKGksMCwwLHMpO2lmKDA9PT1yJiYxPT09bylyZXR1cm4gbmV3IFlkKGksMSwxLHMpO3tsZXQgYT1vKigyLXIpLzI7cmV0dXJuIG5ldyBZZChpLG8qci8oMS1NYXRoLmFicygyKmEtMSkpLGEscyl9fWhzbGEyaHN2YShlKXtsZXQgaT1NYXRoLm1pbihlLmgsMSkscj1NYXRoLm1pbihlLnMsMSksbz1NYXRoLm1pbihlLmwsMSkscz1NYXRoLm1pbihlLmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyBPeShpLDAsMCxzKTt7bGV0IGE9bytyKigxLU1hdGguYWJzKDIqby0xKSkvMjtyZXR1cm4gbmV3IE95KGksMiooYS1vKS9hLGEscyl9fWhzdmFUb1JnYmEoZSl7bGV0IGkscixvLHM9ZS5oLGE9ZS5zLGw9ZS52LGM9ZS5hLHU9TWF0aC5mbG9vcig2KnMpLGQ9NipzLXUscD1sKigxLWEpLGg9bCooMS1kKmEpLGY9bCooMS0oMS1kKSphKTtzd2l0Y2godSU2KXtjYXNlIDA6aT1sLHI9ZixvPXA7YnJlYWs7Y2FzZSAxOmk9aCxyPWwsbz1wO2JyZWFrO2Nhc2UgMjppPXAscj1sLG89ZjticmVhaztjYXNlIDM6aT1wLHI9aCxvPWw7YnJlYWs7Y2FzZSA0Omk9ZixyPXAsbz1sO2JyZWFrO2Nhc2UgNTppPWwscj1wLG89aDticmVhaztkZWZhdWx0Omk9MCxyPTAsbz0wfXJldHVybiBuZXcgTGMoaSxyLG8sYyl9Y215a1RvUmdiKGUpe3JldHVybiBuZXcgTGMoKDEtZS5jKSooMS1lLmspLCgxLWUubSkqKDEtZS5rKSwoMS1lLnkpKigxLWUuayksZS5hKX1yZ2JhVG9DbXlrKGUpe2xldCBpPTEtTWF0aC5tYXgoZS5yLGUuZyxlLmIpO3JldHVybiAxPT09aT9uZXcgc2coMCwwLDAsMSxlLmEpOm5ldyBzZygoMS1lLnItaSkvKDEtaSksKDEtZS5nLWkpLygxLWkpLCgxLWUuYi1pKS8oMS1pKSxpLGUuYSl9cmdiYVRvSHN2YShlKXtsZXQgaSxyLG89TWF0aC5taW4oZS5yLDEpLHM9TWF0aC5taW4oZS5nLDEpLGE9TWF0aC5taW4oZS5iLDEpLGw9TWF0aC5taW4oZS5hLDEpLGM9TWF0aC5tYXgobyxzLGEpLHU9TWF0aC5taW4obyxzLGEpLGQ9YyxwPWMtdTtpZihyPTA9PT1jPzA6cC9jLGM9PT11KWk9MDtlbHNle3N3aXRjaChjKXtjYXNlIG86aT0ocy1hKS9wKyhzPGE/NjowKTticmVhaztjYXNlIHM6aT0oYS1vKS9wKzI7YnJlYWs7Y2FzZSBhOmk9KG8tcykvcCs0O2JyZWFrO2RlZmF1bHQ6aT0wfWkvPTZ9cmV0dXJuIG5ldyBPeShpLHIsZCxsKX1yZ2JhVG9IZXgoZSxpKXtsZXQgcj0iIyIrKDE2Nzc3MjE2fGUucjw8MTZ8ZS5nPDw4fGUuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gaSYmKHIrPSgyNTZ8TWF0aC5yb3VuZCgyNTUqZS5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkscn1ub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgc2coZS5jLzEwMCxlLm0vMTAwLGUueS8xMDAsZS5rLzEwMCxlLmEpfWRlbm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IHNnKE1hdGguZmxvb3IoMTAwKmUuYyksTWF0aC5mbG9vcigxMDAqZS5tKSxNYXRoLmZsb29yKDEwMCplLnkpLE1hdGguZmxvb3IoMTAwKmUuayksZS5hKX1kZW5vcm1hbGl6ZVJHQkEoZSl7cmV0dXJuIG5ldyBMYyhNYXRoLnJvdW5kKDI1NSplLnIpLE1hdGgucm91bmQoMjU1KmUuZyksTWF0aC5yb3VuZCgyNTUqZS5iKSxlLmEpfXN0cmluZ1RvSHN2YShlPSIiLGk9ITEpe2xldCByPW51bGw7ZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCk7bGV0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgTGMocGFyc2VJbnQoc1syXSwxMCkvMjU1LHBhcnNlSW50KHNbM10sMTApLzI1NSxwYXJzZUludChzWzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IFlkKHBhcnNlSW50KHNbMl0sMTApLzM2MCxwYXJzZUludChzWzNdLDEwKS8xMDAscGFyc2VJbnQoc1s0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQoc1s1XSkpPzE6cGFyc2VGbG9hdChzWzVdKSl9fV07by5wdXNoKGk/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LHBhcnNlSW50KHNbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IExjKHBhcnNlSW50KHNbMV0rc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0rc1syXSwxNikvMjU1LHBhcnNlSW50KHNbM10rc1szXSwxNikvMjU1LDEpfX0pO2ZvcihsZXQgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykpe2xldCBhPW9bc10sbD1hLnJlLmV4ZWMoZSksYz1sJiZhLnBhcnNlKGwpO2lmKGMpcmV0dXJuIGMgaW5zdGFuY2VvZiBMYz9yPXRoaXMucmdiYVRvSHN2YShjKTpjIGluc3RhbmNlb2YgWWQmJihyPXRoaXMuaHNsYTJoc3ZhKGMpKSxyfXJldHVybiByfW91dHB1dEZvcm1hdChlLGkscil7c3dpdGNoKCJhdXRvIj09PWkmJihpPWUuYTwxPyJyZ2JhIjoiaGV4IiksaSl7Y2FzZSJoc2xhIjpsZXQgbz10aGlzLmhzdmEyaHNsYShlKSxzPW5ldyBZZChNYXRoLnJvdW5kKDM2MCpvLmgpLE1hdGgucm91bmQoMTAwKm8ucyksTWF0aC5yb3VuZCgxMDAqby5sKSxNYXRoLnJvdW5kKDEwMCpvLmEpLzEwMCk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/ImhzbGEoIitzLmgrIiwiK3MucysiJSwiK3MubCsiJSwiK3MuYSsiKSI6ImhzbCgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlKSI7Y2FzZSJyZ2JhIjpsZXQgYT10aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIrTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDArIikiOiJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIjtkZWZhdWx0OmxldCBsPSJhbHdheXMiPT09cnx8ImZvcmNlZCI9PT1yO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpLGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWWNlPXR5cGVvZiB3aW5kb3c8InUiJiYib250b3VjaHN0YXJ0ImluIHdpbmRvdyx1OWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5uZ1pvbmU9ZSx0aGlzLmVsUmVmPWksdGhpcy5jZFJlZj1yLHRoaXMuZG9jdW1lbnQ9byx0aGlzLnBsYXRmb3JtSWQ9cyx0aGlzLnNlcnZpY2U9YSx0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W3JzLkhFWCxycy5SR0JBLHJzLkhTTEEscnMuQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmV5ZURyb3BwZXJTdXBwb3J0ZWQ9cFQodGhpcy5wbGF0Zm9ybUlkKSYmIkV5ZURyb3BwZXIiaW4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld31oYW5kbGVFc2MoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcihlKX1oYW5kbGVFbnRlcihlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKGUpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3IGNPKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyB1Tyh0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP3JzLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD9ycy5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/cnMuSFNMQTpycy5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj1yPT57dGhpcy5vbk1vdXNlRG93bihyKX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgdU8odGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKGUsaT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IoZSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSxpKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2coZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLEMsXyx5LEksQSxPLGVlLFgseGUsZmUsdmUsVCxuZSxsZSxoZSx5ZSxKLGFlLG1lLGplLE1lLEZlLHV0LFN0KXt0aGlzLnNldEluaXRpYWxDb2xvcihyKSx0aGlzLnNldENvbG9yTW9kZShjKSx0aGlzLmlzSUUxMD0xMD09PWZ1bmN0aW9uKCl7bGV0IG49IiI7dHlwZW9mIG5hdmlnYXRvcjwidSImJihuPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7bGV0IHQ9bi5pbmRleE9mKCJtc2llICIpO3JldHVybiB0PjAmJnBhcnNlSW50KG4uc3Vic3RyaW5nKHQrNSxuLmluZGV4T2YoIi4iLHQpKSwxMCl9KCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZT1lLHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZj1pLHRoaXMuY3BEaXNhYmxlSW5wdXQ9aCx0aGlzLmNwQ215a0VuYWJsZWQ9dSx0aGlzLmNwQWxwaGFDaGFubmVsPWQsdGhpcy5jcE91dHB1dEZvcm1hdD1wLHRoaXMuY3BEaWFsb2dEaXNwbGF5PWEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1mLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPW0sdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlPUMsdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj1fLHRoaXMud2lkdGg9dGhpcy5jcFdpZHRoPXBhcnNlSW50KG8sMTApLHRoaXMuaGVpZ2h0PXRoaXMuY3BIZWlnaHQ9cGFyc2VJbnQocywxMCksdGhpcy5jcFBvc2l0aW9uPXksdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PXBhcnNlSW50KEksMTApLHRoaXMuY3BPS0J1dHRvbj1ULHRoaXMuY3BPS0J1dHRvblRleHQ9bGUsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9bmUsdGhpcy5jcENhbmNlbEJ1dHRvbj1oZSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD1KLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz15ZSx0aGlzLmNwRXllRHJvcHBlcj1GZSx0aGlzLmZhbGxiYWNrQ29sb3I9bHx8IiNmZmYiLHRoaXMuc2V0UHJlc2V0Q29uZmlnKE8sZWUpLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcz1YLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9eGUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT1mZSx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9dmUsdGhpcy5jcEFkZENvbG9yQnV0dG9uPWFlLHRoaXMuY3BBZGRDb2xvckJ1dHRvblRleHQ9amUsdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3M9bWUsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9TWUsdGhpcy5jcFRyaWdnZXJFbGVtZW50PXV0LHRoaXMuY3BFeHRyYVRlbXBsYXRlPVN0LEF8fCh0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTApLCJpbmxpbmUiPT09YSYmKHRoaXMuZGlhbG9nQXJyb3dTaXplPTAsdGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaGV4Ij09PXAmJiJhbHdheXMiIT09ZCYmImZvcmNlZCIhPT1kJiYodGhpcy5jcEFscGhhQ2hhbm5lbD0iZGlzYWJsZWQiKX1zZXRDb2xvck1vZGUoZSl7c3dpdGNoKGUudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpKXtjYXNlIjEiOmNhc2UiQyI6Y2FzZSJDT0xPUiI6ZGVmYXVsdDp0aGlzLmNwQ29sb3JNb2RlPTE7YnJlYWs7Y2FzZSIyIjpjYXNlIkciOmNhc2UiR1JBWVNDQUxFIjp0aGlzLmNwQ29sb3JNb2RlPTI7YnJlYWs7Y2FzZSIzIjpjYXNlIlAiOmNhc2UiUFJFU0VUUyI6dGhpcy5jcENvbG9yTW9kZT0zfX1zZXRJbml0aWFsQ29sb3IoZSl7dGhpcy5pbml0aWFsQ29sb3I9ZX1zZXRQcmVzZXRDb25maWcoZSxpKXt0aGlzLmNwUHJlc2V0TGFiZWw9ZSx0aGlzLmNwUHJlc2V0Q29sb3JzPWl9c2V0Q29sb3JGcm9tU3RyaW5nKGUsaT0hMCxyPSEwKXtsZXQgbzsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbD8obz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITApLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpKSk6bz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKGUsITEpLCFvJiYhdGhpcy5oc3ZhJiYobz10aGlzLnNlcnZpY2Uuc3RyaW5nVG9Ic3ZhKHRoaXMuZmFsbGJhY2tDb2xvciwhMSkpLG8mJih0aGlzLmhzdmE9byx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsImhleCI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiYiZGlzYWJsZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKHRoaXMuaHN2YS5hPTEpLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoaSxyKSl9b25SZXNpemUoKXsiZml4ZWQiPT09dGhpcy5wb3NpdGlvbj90aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCk6ImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25EcmFnRW5kKGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ0VuZCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uRHJhZ1N0YXJ0KGUpe3RoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyRHJhZ1N0YXJ0KHtzbGlkZXI6ZSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25Nb3VzZURvd24oZSl7dGhpcy5zaG93JiYhdGhpcy5pc0lFMTAmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmZS50YXJnZXQhPT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCYmIXRoaXMuaXNEZXNjZW5kYW50KHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxlLnRhcmdldCkmJjA9PT10aGlzLmNwSWdub3JlZEVsZW1lbnRzLmZpbHRlcihpPT5pPT09ZS50YXJnZXQpLmxlbmd0aCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jcFNhdmVDbGlja091dHNpZGU/dGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpOih0aGlzLmhzdmE9bnVsbCx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMSksdGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNhbmNlbGVkKCkpLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9KX1vbkFjY2VwdENvbG9yKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vdXRwdXRDb2xvciYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvclNlbGVjdGVkKHRoaXMub3V0cHV0Q29sb3IpLCJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9b25DYW5jZWxDb2xvcihlKXt0aGlzLmhzdmE9bnVsbCxlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKHRoaXMuaW5pdGlhbENvbG9yLCEwKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJih0aGlzLmNwQ215a0VuYWJsZWQmJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY215a0NoYW5nZWQodGhpcy5jbXlrQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDaGFuZ2VkKHRoaXMuaW5pdGlhbENvbG9yLCEwKSx0aGlzLmNsb3NlQ29sb3JQaWNrZXIoKSl9b25FeWVEcm9wcGVyKCl7dGhpcy5leWVEcm9wcGVyU3VwcG9ydGVkJiYobmV3IHdpbmRvdy5FeWVEcm9wcGVyKS5vcGVuKCkudGhlbihpPT57dGhpcy5zZXRDb2xvckZyb21TdHJpbmcoaS5zUkdCSGV4LCEwKX0pfW9uRm9ybWF0VG9nZ2xlKGUpe2xldCBpPXRoaXMuZGlhbG9nSW5wdXRGaWVsZHMubGVuZ3RoLSh0aGlzLmNwQ215a0VuYWJsZWQ/MDoxKSxyPSgodGhpcy5kaWFsb2dJbnB1dEZpZWxkcy5pbmRleE9mKHRoaXMuZm9ybWF0KStlKSVpK2kpJWk7dGhpcy5mb3JtYXQ9dGhpcy5kaWFsb2dJbnB1dEZpZWxkc1tyXX1vbkNvbG9yQ2hhbmdlKGUpe3RoaXMuaHN2YS5zPWUucy9lLnJnWCx0aGlzLmhzdmEudj1lLnYvZS5yZ1ksdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJsaWdodG5lc3MiLHZhbHVlOnRoaXMuaHN2YS52LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoic2F0dXJhdGlvbiIsdmFsdWU6dGhpcy5oc3ZhLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS5oPWUudi9lLnJnWCx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJodWUiLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlQ2hhbmdlKGUpe3RoaXMuaHN2YS52PWUudi9lLnJnWCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InZhbHVlIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUNoYW5nZShlKXt0aGlzLmhzdmEuYT1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJhbHBoYSIsdmFsdWU6dGhpcy5oc3ZhLmEsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uSGV4SW5wdXQoZSl7aWYobnVsbD09PWUpdGhpcy51cGRhdGVDb2xvclBpY2tlcigpO2Vsc2V7ZSYmIiMiIT09ZVswXSYmKGU9IiMiK2UpO2xldCBpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fSkkL2dpOyJhbHdheXMiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGk9L14jKFthLWYwLTldezN9fFthLWYwLTldezZ9fFthLWYwLTldezh9KSQvZ2kpO2xldCByPWkudGVzdChlKTtyJiYoZS5sZW5ndGg8NSYmKGU9IiMiK2Uuc3Vic3RyaW5nKDEpLnNwbGl0KCIiKS5tYXAobz0+bytvKS5qb2luKCIiKSksImZvcmNlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsJiYoZSs9TWF0aC5yb3VuZCgyNTUqdGhpcy5oc3ZhLmEpLnRvU3RyaW5nKDE2KSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSwhMCwhMSkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaGV4Iix2YWxpZDpyLHZhbHVlOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfX1vblJlZElucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkucj1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLnJnYmFUb0hzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJyZWQiLHZhbGlkOnIsdmFsdWU6aS5yLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsdWVJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmx1ZSIsdmFsaWQ6cix2YWx1ZTppLmIsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uR3JlZW5JbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLmc9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiZ3JlZW4iLHZhbGlkOnIsdmFsdWU6aS5nLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmg9ZS52L2UucmcsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJodWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLmgsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uVmFsdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS52PWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ2YWx1ZSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BbHBoYUlucHV0KGUpe2xldCBpPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztpJiYodGhpcy5oc3ZhLmE9ZS52L2UucmcsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImFscGhhIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkxpZ2h0bmVzc0lucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5sPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibGlnaHRuZXNzIix2YWxpZDpyLHZhbHVlOmkubCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25TYXR1cmF0aW9uSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnM9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5oc2xhMmhzdmEoaSksdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJzYXR1cmF0aW9uIix2YWxpZDpyLHZhbHVlOmkucyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25DeWFuSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLmM9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImN5YW4iLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5jLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbk1hZ2VudGFJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsubT1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoibWFnZW50YSIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLm0sY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uWWVsbG93SW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLnk9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6InllbGxvdyIsdmFsaWQ6ITAsdmFsdWU6dGhpcy5jbXlrLnksY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQmxhY2tJbnB1dChlKXshaXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmcmJih0aGlzLmNteWsuaz1lLnYsdGhpcy51cGRhdGVDb2xvclBpY2tlcighMSwhMCwhMCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiYmxhY2siLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5rLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkFkZFByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzLmZpbHRlcihyPT5yPT09aSkubGVuZ3RofHwodGhpcy5jcFByZXNldENvbG9ycz10aGlzLmNwUHJlc2V0Q29sb3JzLmNvbmNhdChpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycykpfW9uUmVtb3ZlUHJlc2V0Q29sb3IoZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+ciE9PWkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UucHJlc2V0Q29sb3JzQ2hhbmdlZCh0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuQ29sb3JQaWNrZXIoKXt0aGlzLnNob3d8fCh0aGlzLnNob3c9ITAsdGhpcy5oaWRkZW49ITAsc2V0VGltZW91dCgoKT0+e3RoaXMuaGlkZGVuPSExLHRoaXMuc2V0RGlhbG9nUG9zaXRpb24oKSx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKX0sMCksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITApLHRoaXMuaXNJRTEwfHx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1ljZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5saXN0ZW5lclJlc2l6ZSkpfWNsb3NlQ29sb3JQaWNrZXIoKXt0aGlzLnNob3cmJih0aGlzLnNob3c9ITEsdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zdGF0ZUNoYW5nZWQoITEpLHRoaXMuaXNJRTEwfHwoWWNlP2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMubGlzdGVuZXJNb3VzZURvd24pOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5saXN0ZW5lck1vdXNlRG93bikpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpLHRoaXMuY2RSZWYuZGVzdHJveWVkfHx0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKSl9dXBkYXRlQ29sb3JQaWNrZXIoZT0hMCxpPSEwLHI9ITEpe2lmKHRoaXMuc2xpZGVyRGltTWF4KXsyPT09dGhpcy5jcENvbG9yTW9kZSYmKHRoaXMuaHN2YS5zPTApO2xldCBvLHMsYSxsPXRoaXMub3V0cHV0Q29sb3I7aWYocz10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSksdGhpcy5jcENteWtFbmFibGVkPyhyPyhhPXRoaXMuc2VydmljZS5jbXlrVG9SZ2IodGhpcy5zZXJ2aWNlLm5vcm1hbGl6ZUNNWUsodGhpcy5jbXlrKSksdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGEpKTooYT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHRoaXMuY215az10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVDTVlLKHRoaXMuc2VydmljZS5yZ2JhVG9DbXlrKGEpKSksYT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKGEpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCk6YT10aGlzLnNlcnZpY2UuZGVub3JtYWxpemVSR0JBKHRoaXMuc2VydmljZS5oc3ZhVG9SZ2JhKHRoaXMuaHN2YSkpLG89dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYShuZXcgT3kodGhpcy5zbGlkZXJIfHx0aGlzLmhzdmEuaCwxLDEsMSkpKSxpJiYodGhpcy5oc2xhVGV4dD1uZXcgWWQoTWF0aC5yb3VuZCgzNjAqcy5oKSxNYXRoLnJvdW5kKDEwMCpzLnMpLE1hdGgucm91bmQoMTAwKnMubCksTWF0aC5yb3VuZCgxMDAqcy5hKS8xMDApLHRoaXMucmdiYVRleHQ9bmV3IExjKGEucixhLmcsYS5iLE1hdGgucm91bmQoMTAwKmEuYSkvMTAwKSx0aGlzLmNwQ215a0VuYWJsZWQmJih0aGlzLmNteWtUZXh0PW5ldyBzZyh0aGlzLmNteWsuYyx0aGlzLmNteWsubSx0aGlzLmNteWsueSx0aGlzLmNteWsuayxNYXRoLnJvdW5kKDEwMCp0aGlzLmNteWsuYSkvMTAwKSksdGhpcy5oZXhUZXh0PXRoaXMuc2VydmljZS5yZ2JhVG9IZXgoYSwiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuaGV4QWxwaGE9dGhpcy5yZ2JhVGV4dC5hKSwiYXV0byI9PT10aGlzLmNwT3V0cHV0Rm9ybWF0JiZ0aGlzLmZvcm1hdCE9PXJzLlJHQkEmJnRoaXMuZm9ybWF0IT09cnMuQ01ZSyYmdGhpcy5mb3JtYXQhPT1ycy5IU0xBJiZ0aGlzLmhzdmEuYTwxJiYodGhpcy5mb3JtYXQ9dGhpcy5oc3ZhLmE8MT9ycy5SR0JBOnJzLkhFWCksdGhpcy5odWVTbGlkZXJDb2xvcj0icmdiKCIrby5yKyIsIitvLmcrIiwiK28uYisiKSIsdGhpcy5hbHBoYVNsaWRlckNvbG9yPSJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIix0aGlzLm91dHB1dENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLHRoaXMuY3BPdXRwdXRGb3JtYXQsdGhpcy5jcEFscGhhQ2hhbm5lbCksdGhpcy5zZWxlY3RlZENvbG9yPXRoaXMuc2VydmljZS5vdXRwdXRGb3JtYXQodGhpcy5oc3ZhLCJyZ2JhIixudWxsKSx0aGlzLmZvcm1hdCE9PXJzLkNNWUspdGhpcy5jbXlrQ29sb3I9IiI7ZWxzZSBpZigiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJlbmFibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWx8fCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCl7bGV0IGM9TWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMDt0aGlzLmNteWtDb2xvcj1gY215a2EoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30sJHtjfSlgfWVsc2UgdGhpcy5jbXlrQ29sb3I9YGNteWsoJHt0aGlzLmNteWsuY30sJHt0aGlzLmNteWsubX0sJHt0aGlzLmNteWsueX0sJHt0aGlzLmNteWsua30pYDt0aGlzLnNsaWRlcj1uZXcgY08oKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgpKnRoaXMuc2xpZGVyRGltTWF4LmgtOCx0aGlzLmhzdmEucyp0aGlzLnNsaWRlckRpbU1heC5zLTgsKDEtdGhpcy5oc3ZhLnYpKnRoaXMuc2xpZGVyRGltTWF4LnYtOCx0aGlzLmhzdmEuYSp0aGlzLnNsaWRlckRpbU1heC5hLTgpLGUmJmwhPT10aGlzLm91dHB1dENvbG9yJiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLm91dHB1dENvbG9yKSl9fXNldERpYWxvZ1Bvc2l0aW9uKCl7aWYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSl0aGlzLnBvc2l0aW9uPSJyZWxhdGl2ZSI7ZWxzZXtsZXQgcixlPSJzdGF0aWMiLGk9IiIsbz1udWxsLHM9bnVsbCxhPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUsbD10aGlzLmRpYWxvZ0VsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7Zm9yKDtudWxsIT09YSYmIkhUTUwiIT09YS50YWdOYW1lOyl7aWYocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKSxlPXIuZ2V0UHJvcGVydHlWYWx1ZSgicG9zaXRpb24iKSxpPXIuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksInN0YXRpYyIhPT1lJiZudWxsPT09byYmKG89YSksaSYmIm5vbmUiIT09aSYmbnVsbD09PXMmJihzPWEpLCJmaXhlZCI9PT1lKXtvPXM7YnJlYWt9YT1hLnBhcmVudE5vZGV9bGV0IGM9dGhpcy5jcmVhdGVEaWFsb2dCb3godGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImZpeGVkIiE9PWUpO2lmKHRoaXMudXNlUm9vdFZpZXdDb250YWluZXJ8fCJmaXhlZCI9PT1lJiYoIW98fG8gaW5zdGFuY2VvZiBIVE1MVW5rbm93bkVsZW1lbnQpKXRoaXMudG9wPWMudG9wLHRoaXMubGVmdD1jLmxlZnQ7ZWxzZXtudWxsPT09byYmKG89YSk7bGV0IGQ9dGhpcy5jcmVhdGVEaWFsb2dCb3gobywiZml4ZWQiIT09ZSk7dGhpcy50b3A9Yy50b3AtZC50b3AsdGhpcy5sZWZ0PWMubGVmdC1kLmxlZnR9ImZpeGVkIj09PWUmJih0aGlzLnBvc2l0aW9uPSJmaXhlZCIpO2xldCB1PXRoaXMuY3BQb3NpdGlvbjsiYXV0byI9PT10aGlzLmNwUG9zaXRpb24mJih1PWZ1bmN0aW9uKG4sdCl7bGV0IGU9InJpZ2h0IixpPSJib3R0b20iLHtoZWlnaHQ6cix3aWR0aDpvfT1uLHt0b3A6cyxsZWZ0OmF9PXQsbD1zK3QuaGVpZ2h0LGM9YSt0LndpZHRoLHU9cy1yPDAsZD1sK3I+KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkscD1hLW88MCxoPWMrbz4od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCk7cmV0dXJuIGQmJihpPSJ0b3AiKSx1JiYoaT0iYm90dG9tIikscCYmKGU9InJpZ2h0IiksaCYmKGU9ImxlZnQiKSx1JiZkJiZwJiZoP1sibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0ucmVkdWNlKChDLF8pPT5uW0NdPm5bX10/QzpfKTpwJiZoP3U/ImJvdHRvbSI6ZHx8cz5sPyJ0b3AiOiJib3R0b20iOnUmJmQ/cD8icmlnaHQiOmh8fGE+Yz8ibGVmdCI6InJpZ2h0IjpgJHtpfS0ke2V9YH0odGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jcFRyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSwidG9wIj09PXU/KHRoaXMuYXJyb3dUb3A9bC0xLHRoaXMudG9wLT1sK3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0K3RoaXMuZGlhbG9nQXJyb3dTaXplLHRoaXMubGVmdCs9dGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCpjLndpZHRoLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtbGVmdCI9PT11fHwibGVmdC10b3AiPT09dT8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJ0b3AtcmlnaHQiPT09dXx8InJpZ2h0LXRvcCI9PT11Pyh0aGlzLnRvcC09bC1jLmhlaWdodCtjLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLHRoaXMubGVmdCs9Yy53aWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQpOiJsZWZ0Ij09PXV8fCJib3R0b20tbGVmdCI9PT11fHwibGVmdC1ib3R0b20iPT09dT8odGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQtPXRoaXMuY3BXaWR0aCt0aGlzLmRpYWxvZ0Fycm93U2l6ZS0yKToodGhpcy50b3ArPWMuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAtdGhpcy5kaWFsb2dBcnJvd09mZnNldCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMiksdGhpcy5jcFVzZVBvc2l0aW9uPXV9fWlzRGVzY2VuZGFudChlLGkpe2xldCByPWkucGFyZW50Tm9kZTtmb3IoO251bGwhPT1yOyl7aWYocj09PWUpcmV0dXJuITA7cj1yLnBhcmVudE5vZGV9cmV0dXJuITF9Y3JlYXRlRGlhbG9nQm94KGUsaSl7bGV0e3RvcDpyLGxlZnQ6b309ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnIrKGk/d2luZG93LnBhZ2VZT2Zmc2V0OjApLGxlZnQ6bysoaT93aW5kb3cucGFnZVhPZmZzZXQ6MCksd2lkdGg6ZS5vZmZzZXRXaWR0aCxoZWlnaHQ6ZS5vZmZzZXRIZWlnaHR9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KHB0KSx3KEFlKSx3KG5uKSx3KEJ0KSx3KGlkKSx3KEp6KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1siY29sb3ItcGlja2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKGx0KFQ3ZSw3KSxsdChEN2UsNyksbHQoQTdlLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmRpYWxvZ0VsZW1lbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuaHVlU2xpZGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmFscGhhU2xpZGVyPXIuZmlyc3QpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJrZXl1cC5lc2MiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUVzYyhvKX0sMCxGRSkoImtleXVwLmVudGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFbnRlcihvKX0sITEsRkUpfSxkZWNsczozMCx2YXJzOjUxLGNvbnN0czpbWzEsImNvbG9yLXBpY2tlciIsMywiY2xpY2siXSxbImRpYWxvZ1BvcHVwIiwiIl0sWzMsImNsYXNzIiwidG9wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJiYWNrZ3JvdW5kLWNvbG9yIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIiw0LCJuZ0lmIl0sWzEsImh1ZS1hbHBoYSIsImJveCJdLFsxLCJsZWZ0Il0sWzEsInNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmQiXSxbMSwic2VsZWN0ZWQtY29sb3IiLDMsImNsaWNrIl0sWyJjbGFzcyIsImV5ZWRyb3BwZXItaWNvbiIsInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicmlnaHQiXSxbInN0eWxlIiwiaGVpZ2h0OiAxNnB4OyIsNCwibmdJZiJdLFsxLCJodWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiaHVlU2xpZGVyIiwiIl0sWzEsImN1cnNvciJdLFsxLCJ2YWx1ZSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ2YWx1ZVNsaWRlciIsIiJdLFsxLCJhbHBoYSIsMywic2xpZGVyIiwicmdYIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJhbHBoYVNsaWRlciIsIiJdLFsiY2xhc3MiLCJjbXlrLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaHNsYS10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInJnYmEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoZXgtdGV4dCIsMywiaGV4LWFscGhhIiwiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJ2YWx1ZS10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInR5cGUtcG9saWN5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJ1dHRvbi1hcmVhIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4dHJhLXRlbXBsYXRlIiw0LCJuZ0lmIl0sWzEsInNhdHVyYXRpb24tbGlnaHRuZXNzIiwzLCJzbGlkZXIiLCJyZ1giLCJyZ1kiLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJoZWlnaHQiLCIyNHB4Iiwidmlld0JveCIsIjAgMCAyNCAyNCIsIndpZHRoIiwiMjRweCIsImZpbGwiLCIjMDAwMDAwIiwxLCJleWVkcm9wcGVyLWljb24iXSxbImQiLCJNMCAwaDI0djI0SDBWMHoiLCJmaWxsIiwibm9uZSJdLFsiZCIsIk0xNy42NiA1LjQxbC45Mi45Mi0yLjY5IDIuNjktLjkyLS45MiAyLjY5LTIuNjlNMTcuNjcgM2MtLjI2IDAtLjUxLjEtLjcxLjI5bC0zLjEyIDMuMTItMS45My0xLjkxLTEuNDEgMS40MSAxLjQyIDEuNDJMMyAxNi4yNVYyMWg0Ljc1bDguOTItOC45MiAxLjQyIDEuNDIgMS40MS0xLjQxLTEuOTItMS45MiAzLjEyLTMuMTJjLjQtLjQuNC0xLjAzLjAxLTEuNDJsLTIuMzQtMi4zNGMtLjItLjE5LS40NS0uMjktLjctLjI5ek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiJdLFsidHlwZSIsImJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsyLCJoZWlnaHQiLCIxNnB4Il0sWzEsImNteWstdGV4dCJdLFsxLCJib3giXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjEwMCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKyhbXFwuLF1bMC05XXsxLDJ9KT8iLCJtaW4iLCIwIiwibWF4IiwiMSIsInN0ZXAiLCIwLjEiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJoc2xhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjM2MCIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInJnYmEtdGV4dCJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSoiLCJtaW4iLCIwIiwibWF4IiwiMjU1IiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaGV4LXRleHQiXSxbMywidGV4dCIsInZhbHVlIiwiYmx1ciIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwidmFsdWUtdGV4dCJdLFsxLCJ0eXBlLXBvbGljeSJdLFsxLCJ0eXBlLXBvbGljeS1hcnJvdyIsMywiY2xpY2siXSxbMSwicHJlc2V0LWFyZWEiXSxbMSwicHJlc2V0LWxhYmVsIl0sWzMsImNsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInByZXNldC1jb2xvciIsMywiYmFja2dyb3VuZENvbG9yIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJwcmVzZXQtY29sb3IiLDMsImNsaWNrIl0sWzMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwiYnV0dG9uLWFyZWEiXSxbInR5cGUiLCJidXR0b24iLDMsImNsYXNzIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDMsImNsaWNrIl0sWzEsImV4dHJhLXRlbXBsYXRlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImRpdiIsMCwxKSxQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIG8uc3RvcFByb3BhZ2F0aW9uKCl9KSxFKDIsSTdlLDEsNSwiZGl2IiwyKSxFKDMsUDdlLDIsOCwiZGl2IiwzKSxnKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxOKDYsImRpdiIsNiksZyg3LCJkaXYiLDcpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyJiZpLm9uRXllRHJvcHBlcigpfSksRSg4LFI3ZSwzLDAsInN2ZyIsOCksdigpLEUoOSxPN2UsMiw1LCJidXR0b24iLDkpLHYoKSxnKDEwLCJkaXYiLDEwKSxFKDExLGs3ZSwxLDAsImRpdiIsMTEpLGcoMTIsImRpdiIsMTIsMTMpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkh1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoImh1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJodWUiKX0pLE4oMTQsImRpdiIsMTQpLHYoKSxnKDE1LCJkaXYiLDE1LDE2KSxQKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WYWx1ZUNoYW5nZShvKX0pKCJkcmFnU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnU3RhcnQoInZhbHVlIil9KSgiZHJhZ0VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdFbmQoInZhbHVlIil9KSxOKDE3LCJkaXYiLDE0KSx2KCksZygxOCwiZGl2IiwxNywxOCksUCgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxwaGFDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJhbHBoYSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJhbHBoYSIpfSksTigyMCwiZGl2IiwxNCksdigpKCkoKSxFKDIxLEw3ZSwxNywxMiwiZGl2IiwxOSksRSgyMixIN2UsMTQsMTAsImRpdiIsMjApLEUoMjMsajdlLDE0LDEwLCJkaXYiLDIxKSxFKDI0LHE3ZSw4LDcsImRpdiIsMjIpLEUoMjUsWDdlLDksMywiZGl2IiwyMyksRSgyNixRN2UsMywwLCJkaXYiLDI0KSxFKDI3LGU5ZSw2LDMsImRpdiIsMjUpLEUoMjgsaTllLDMsMiwiZGl2IiwyNiksRSgyOSxvOWUsMiwxLCJkaXYiLDI3KSx2KCkpLDImZSYmKE90KCJkaXNwbGF5IixpLnNob3c/ImJsb2NrIjoibm9uZSIpKCJ2aXNpYmlsaXR5IixpLmhpZGRlbj8iaGlkZGVuIjoidmlzaWJsZSIpKCJ0b3AiLGkudG9wLCJweCIpKCJsZWZ0IixpLmxlZnQsInB4IikoInBvc2l0aW9uIixpLnBvc2l0aW9uKSgiaGVpZ2h0IixpLmNwSGVpZ2h0LCJweCIpKCJ3aWR0aCIsaS5jcFdpZHRoLCJweCIpLGF0KCJvcGVuIixpLnNob3cpLHgoMiksYigibmdJZiIsInBvcHVwIj09PWkuY3BEaWFsb2dEaXNwbGF5KSx4KDEpLGIoIm5nSWYiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSkpLHgoNCksT3QoImJhY2tncm91bmQtY29sb3IiLGkuc2VsZWN0ZWRDb2xvcikoImN1cnNvciIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlcj8icG9pbnRlciI6bnVsbCkseCgxKSxiKCJuZ0lmIixpLmV5ZURyb3BwZXJTdXBwb3J0ZWQmJmkuY3BFeWVEcm9wcGVyKSx4KDEpLGIoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbikseCgyKSxiKCJuZ0lmIiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbCkseCgxKSxPdCgiZGlzcGxheSIsMT09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmgsInB4IikseCgxKSxPdCgiZGlzcGxheSIsMj09PShpLmNwQ29sb3JNb2RlfHwxKT8iYmxvY2siOiJub25lIiksYigicmdYIiwxKSx4KDIpLE90KCJyaWdodCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci52LCJweCIpLHgoMSksT3QoImRpc3BsYXkiLCJkaXNhYmxlZCI9PT1pLmNwQWxwaGFDaGFubmVsPyJub25lIjoiYmxvY2siKSgiYmFja2dyb3VuZC1jb2xvciIsaS5hbHBoYVNsaWRlckNvbG9yKSxiKCJyZ1giLDEpLHgoMiksT3QoImxlZnQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIuYSwicHgiKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYyPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLCFpLmNwRGlzYWJsZUlucHV0JiYxPT09KGkuY3BDb2xvck1vZGV8fDEpKSx4KDEpLGIoIm5nSWYiLChudWxsPT1pLmNwUHJlc2V0Q29sb3JzP251bGw6aS5jcFByZXNldENvbG9ycy5sZW5ndGgpfHxpLmNwQWRkQ29sb3JCdXR0b24pLHgoMSksYigibmdJZiIsaS5jcE9LQnV0dG9ufHxpLmNwQ2FuY2VsQnV0dG9uKSx4KDEpLGIoIm5nSWYiLGkuY3BFeHRyYVRlbXBsYXRlKSl9LGRlcGVuZGVuY2llczpbeW4sWGUsTm8sbDllLGM5ZV0sc3R5bGVzOlsnLmNvbG9yLXBpY2tlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7d2lkdGg6MjMwcHg7aGVpZ2h0OmF1dG87Ym9yZGVyOiM3Nzcgc29saWQgMXB4O2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uY29sb3ItcGlja2VyICp7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgaW5wdXR7d2lkdGg6MDtoZWlnaHQ6MjZweDttaW4td2lkdGg6MDtmb250LXNpemU6MTNweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojMDAwfS5jb2xvci1waWNrZXIgaW5wdXQ6aW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otdWktaW52YWxpZCwuY29sb3ItcGlja2VyIGlucHV0Oi1tb3otc3VibWl0LWludmFsaWR7Ym94LXNoYWRvdzpub25lfS5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmNvbG9yLXBpY2tlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbnttYXJnaW46MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uY29sb3ItcGlja2VyIC5hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTk5OTt3aWR0aDowO2hlaWdodDowO2JvcmRlci1zdHlsZTpzb2xpZH0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3B7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjojNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbXt0b3A6LTIwcHg7bGVmdDo4cHg7Ym9yZGVyLXdpZHRoOjEwcHggNXB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApfS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtdG9we3JpZ2h0Oi0yMXB4O2JvdHRvbTo4cHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXRvcC1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC10b3B7Ym90dG9tOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWxlZnQtYm90dG9tLC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LWJvdHRvbS1sZWZ0e3RvcDo4cHg7cmlnaHQ6LTIxcHg7Ym9yZGVyLXdpZHRoOjVweCAxMHB4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKSAjNzc3fS5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LC5jb2xvci1waWNrZXIgLmFycm93LmFycm93LXJpZ2h0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tcmlnaHR7dG9wOjhweDtsZWZ0Oi0yMHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSAjNzc3IHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5jdXJzb3J7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6IzIyMiBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOmRlZmF1bHR9LmNvbG9yLXBpY2tlciAuYm94e2Rpc3BsYXk6ZmxleDtwYWRkaW5nOjRweCA4cHh9LmNvbG9yLXBpY2tlciAubGVmdHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjE2cHggOHB4fS5jb2xvci1waWNrZXIgLnJpZ2h0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxMnB4IDhweH0uY29sb3ItcGlja2VyIC5idXR0b24tYXJlYXtwYWRkaW5nOjAgMTZweCAxNnB4O3RleHQtYWxpZ246cmlnaHR9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWEgYnV0dG9ue21hcmdpbi1sZWZ0OjhweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYXtwYWRkaW5nOjRweCAxNXB4fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtbGFiZWx7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7cGFkZGluZzo0cHg7Zm9udC1zaXplOjExcHg7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1jb2xvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O21hcmdpbjo0cHggNnB4IDhweDtib3JkZXI6I2E5YTlhOSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czoyNSU7Y3Vyc29yOnBvaW50ZXJ9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWEgLnByZXNldC1lbXB0eS1tZXNzYWdle21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjRweDttYXJnaW4tYm90dG9tOjhweDtmb250LXN0eWxlOml0YWxpYzt0ZXh0LWFsaWduOmNlbnRlcn0uY29sb3ItcGlja2VyIC5oZXgtdGV4dHt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4IDhweDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBkaXZ7ZmxvYXQ6bGVmdDtmbGV4OjEgMSBhdXRvO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTU7Y2xlYXI6bGVmdH0uY29sb3ItcGlja2VyIC5oZXgtdGV4dCAuYm94IGlucHV0e2ZsZXg6MSAxIGF1dG87cGFkZGluZzoxcHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmhleC1hbHBoYSAuYm94IGRpdjpmaXJzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBpbnB1dDpmaXJzdC1jaGlsZHtmbGV4LWdyb3c6MzttYXJnaW4tcmlnaHQ6OHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3gsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3h7cGFkZGluZzowIDI0cHggOHB4IDhweH0uY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3h7cGFkZGluZzowIDhweCA4cHh9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdntmbGV4OjEgMSBhdXRvO21hcmdpbi1yaWdodDo4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzU1NX0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBkaXY6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGlucHV0e2Zsb2F0OmxlZnQ7ZmxleDoxO3BhZGRpbmc6MXB4O21hcmdpbjowIDhweCAwIDA7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC5yZ2JhLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmh1ZS1hbHBoYXthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbTozcHh9LmNvbG9yLXBpY2tlciAuaHVle2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDttYXJnaW4tYm90dG9tOjE2cHg7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUpZQUFBQVFDQVlBQUFEMDZJWW5BQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a1VGV2JDQ0FBQUFGeEpSRUZVYU43dDBrRUtnMEFRQU1FMng4My9uMnF1NXFDZ0QxaURoQ29ZZHBuYlFDOWJiWTFxVk8vanZjNmszYWQ5MXM3LzdGMS9jc2dQcnVqdVExN0JEWVNGc0JBV3dnSmhJU3lFQmNKQ1dBZ0xoSVd3RUJZSWkyZjdBci8xVENnRkgyWDlBQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC52YWx1ZXtkaXJlY3Rpb246cnRsO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQ1RrbEVRVlI0MnUzU1lVY3JBQmhBNFUyU2ttUkpNbVdTSmtsS0ppV1pacEtVSkpza0tVbWFURkltS1pPVXpNeVNwR1JtbGlSTkppbEpTcEtTSkV0bVNwSXBtV21TZE83MzYvNkQreDdPUDNnVUNvV0N2MWNxbFNRbEpaR2NuRXhLU2dxcHFhbWtwYVdSbnA1T1JrWUdtWm1acUZRcXNyS3l5TTdPSmljbmg5emNYTlJxTlhsNWVlVG41NlBSYUNnb0tLQ3dzSkNpb2lLMFdpM0Z4Y1dVbEpSUVdscEtXVmtaNWVYbFZGUlVVRmxaaVU2bm82cXFpdXJxYW1wcWFxaXRyYVd1cmc2OVhrOTlmVDBHZ3dHajBVaERRd09OalkwME5UWFIzTnhNUzBzTHJhMnR0TFcxMGQ3ZWpzbGt3bXcyMDlIUlFXZG5KMTFkWFhSM2Q5UFQwME52Ynk5OWZYMzA5L2N6TUREQTRPQWdGb3VGb2FFaHJGWXJ3OFBEakl5TU1EbzZ5dGpZR0RhYmpmSHhjU1ltSnBpY25HUnFhZ3E3M2M3MDlEUXpNelBNenM0eU56ZkgvUHc4RG9jRHA5T0p5K1hDN1hhenNMREE0dUlpUzB0TExDOHZzN0t5d3VycUttdHJhM2c4SHJ4ZUx6NmZENy9mei9yNk9oc2JHMnh1YnJLMXRjWDI5amFCUUlDZG5SMkN3U0M3dTd2czdlMnh2Ny9Qd2NFQmg0ZUhIQjBkY1h4OHpNbkpDYWVucDV5ZG5YRitmczdGeFFXWGw1ZGNYVjF4ZlgzTnpjME50N2UzM04zZEVRcUZ1TCsvNStIaGdYQTRUQ1FTNGZIeGthZW5KNTZmbjNsNWVlSDE5WlZvTk1yYjJ4dnY3Kzk4Zkh3UWk4V0l4K044Zm42U1NDVDQrdnJpKy91Ym41OGZmbjkvK1ZjS2dTV3dCSmJBRWxnQ1MyQUpMSUVsc0FTV3dCSllBa3RnQ1N5QkpiQUVsc0FTV0FKTFlBa3NnU1d3QkpiQUVsZ0NTMkFKTElFbHNQNC9XSDhBbUo1WjZqSFM0aDhBQUFBQVNVVk9SSzVDWUlJPSl9LmNvbG9yLXBpY2tlciAuYWxwaGF7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd1lRbFpNYTNnQUFBV1ZKUkVGVWFON3RtRUdPNmpBUVJDc09BckhnQnB5QUpZR2pjR29jeEFtNEEySUhwbW9XRTBlQkgrZXptRmxOdlUwNnNoSjNXNlZFZWxXTVVRQUlJRjlmNnFacGltc0ExTFl0UzJ1RjUxL3UyN1lWQUZaVlJVa0VvR0hkUFYvc0ljYklFSUlrVWRJLzlYYTduZXl2NjErU1dGVVZBVkNTY3QwMFRXbjJmdjZ1MytFY2ZkM3RYenkvMCtuRVV1K1NQam8va3F6cm1pUXBTY042djk4WGV3ZkE4L2xNa2lMSjJXeEdTVW9wY1Q2Zk02VTBOWDkvZnJmYmpldjFXdGZybFpmTGhZZkRRUUhHL0FJT2xuR3dqSU5sSEN4akhDempZSm0vVEpXZEN3cXVKWHNlRkZ6R3dETk5laUtNT0pUTzh4UWREUWFlQjI5K0s5ZWZlTGFCbzlKN3ZkdnRKajFSakZGamZpdjdxdjk1dGp4LzdsZVNRZ2g5M2UxZmZNZUlwNk8rWVFqaG8vTjc5MXQxWFZPU1NJN04vL0srNC9Hb3hXTEJ4K1BCNS9PcDVYTEorLzNPbEpKV3F4VTNtODNvdnY1aUdmOEtqWU5sSEN4akhDempZQmtIeTVnZjVndXN2UVU3VTM3alRBQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjE4cHg7cmlnaHQ6MTJweDt3aWR0aDoxNnB4O2hlaWdodDoyNHB4O2JhY2tncm91bmQtc2l6ZTo4cHggMTZweDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJJQUFBQWdDQVlBQUFBZmZDanhBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUNld0FBQW5zQjAxQ08zQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUFJQVNVUkJWRWlKN1pZOWF4UlJGSWFmc3hNU3RyTFFKcEFncEJGaGkrQzl3MVlTbzAwSTZSWi9nOXZacEJmL1FPcjRHeVJna1NLTlNyQWFkc1pxUUd3Q2t1QVd5UlpKc3lTd3ZoWjdOL3ZoenJnYkxIM0xkODU5N2pseno1MHpKb2t5eFhIOERxRFZhcjBxaTZ2OEJiSXRxU0dwRWNmeGRsbXNGV1hrdlg4QWZBVldnM1VLUEVuVDlHS3VqTXpzQUZnWnNWYUNOMVZUUWQ3N1hVbnJnRTFrdis2OTM1MjY4V1JwenJuSFp2WVJXQzdZdkMzcFJaWmwzd296cXRWcWl5SDlJZ2pBc3BrZDFHcTF4VUpRdFZyZEI5WktJQU90aGRnL1FjNjVMVWs3d05JTW9DVkpPODY1cllGaGtxalg2L2Q3dlY0R1BKd0JNcW9mVVJTNUpFazZGWUJlci9lZVliL01vOVd3Rm5QT3ZRYmVBdmZ1QUFLNEJONHNBSnRBRy9nSklFbG1OdWlKeWJhM0VHTm1aaVBlWnVFVm1WZWxsL1kvNk4rQ3pEbjNBWGhFT09vN0h2LzNCZUF6OEl6UWtNUG5KYnVQeDF3Qyt5WUo3LzBuWUlQNVMvMEZIS2RwK3J3Q0VFWFJTL3JmNUhsMUd0YjJNMGlTcENPcENaelBBVG1YMUV5U3BITUxBc2l5N01qTURvSHJHU0RYWm5hWVpkblJ3Qmg3SjkxdXR3bWN6QUE2Q2JHM0dnUGxlWDRqcVVIL2ExQ2t0cVJHbnVjM2hTQ0FNQjMyZ0tzcGtDdGdiM0tDUU1ta2plUDRXTkpUaHJOTlp2YWwxV3B0VElzdjdKdFE0dG1JZFJhOHFTb0VwV2w2WVdaTm9BTjB6S3haTlBlaHBMU0JadjJ0K1EwQ0o5bExuQVJRTEFBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcn0uY29sb3ItcGlja2VyIC50eXBlLXBvbGljeSAudHlwZS1wb2xpY3ktYXJyb3d7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjE2cHg7bGVmdDo4cHg7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXI6MXB4IHNvbGlkICNhOWE5YTk7Ym9yZGVyLXJhZGl1czo1MCV9LmNvbG9yLXBpY2tlciAuc2VsZWN0ZWQtY29sb3ItYmFja2dyb3VuZHt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2dBQUFBb0NBWUFBQUNNL3JodEFBQUFoMGxFUVZSWVIrMlcwUWxBTVFnRDYwemRmd09kcWE4VG1JL3dRTXI1SzBJNWJaTEl6TE9hMm50MzdWVlZiZCtkRHg1b2JnQ0MzS0JMd0oyZmY0UG5WaWRrZit1Y0lodzgwSFFhQ0xvM0RNSDNDUkszaUZzbUFXVmw2aFBORHd0OEV2TkU1cStZdUVYY01na29uVk02U2R5Q29FdkFuWjh2MUhqeDgxN01pbG14U1VCNXJkTEpEeWNaZ1VBWlVjaC9BQUFBQUVsRlRrU3VRbUNDKX0uY29sb3ItcGlja2VyIC5zYXR1cmF0aW9uLWxpZ2h0bmVzc3tkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjEzMHB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU9ZQUFBQ0NDQVlBQUFCU0Q3VDNBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINEFJV0R3a3NQV1I2bGdBQUlBQkpSRUZVZU5ydG5WdVQ0N2dSckFITitQLy9Pci82MVk1d09OWjdtWjF1M1hBZUxNakpaR1pWZ2RLc2ZjNXhSM1MwUklJVVcrQ0h6Q3BjMk1jWW83WEd2M2V4N1VpWmQ1N3JqeXp6dit2KzMzWC9SLyszci9mN3ZSMzg2WStUdktOY2Yvd2RoVExQY3Y5cVUyd1pkNzR1dGgwdDE4MjFqa0laTFBjc0kvNm5XYTRYdnV0cXVVMFo4NW1ueDgwUy9aemdwbkxuT3RITnQ3L29meDFUS1hjU056Ti83cWJNUTNqdTdyTlFtTVlZZC80czJqOWFhK1ArZ0dhTWNacmIxTS90ZHJ2ZjcvZDJ2OTlQOS90OTNPLzNjYnZkeHUxMkc5ZnJkVnd1bDNFK244Yy8vL25QKzIrLy9YYjY2YWVmeGwvLyt0Zng1ei8vMllLNUFsMnJndmY0VXNicGRHckI1MmJBdkFyWHB1emptaXFBVlNHejVlRG1HWVh6aGJBWm1Dcm5temRkcFVVKzhZMWRBT1llWEN0RFV3VndWN1lDR0g2dUFteU1jWjlsNXZrVWFCUEdNVVo3L0o1dy83OTIvZnZ2OVhxOTMyNjNkci9mVHhQRUNlTUU4bks1ak0vUHovSFRUei9kdjMzN2R2cmxsMS9HUC83eGovRzN2LzF0L09VdmZ3a1Zzd29uZ2pkT3A5UHpIM1UzRDN6bVdHblpWWG40akNxczd3QzJCS1A0Lzh0QXprWnNvV3g2WHJxZUhaeW12cDRBQkNCSmhUUXdLZkRUOGd6clpDSXFpNUFoaUFDakJmRUIyclA4L1g2M01NN2Y2L1Y2djkvdjdYYTdiWUM4M1c3amNybHNWSElxNWZmdjMwKy8vZmJiK09XWFg4WlBQLzAwL3Y3M3Y0K2ZmLzc1SlN2YmV1K2JMMldNTWFGYkFscEJOTTg1UVgrY3Q2cW9TcWtQQXd1UWxCVktxR05GU1VPQUEzQm11N2dDNWhOT2QxNW5Td3ZBT1VXN0M0Z2lVQ1Y4U2duNUw5aE5GSXFUc3AwR3hJMHlzaW95akFqa1kvdEdKVkVweitmeitPV1hYKzdmdjM4Ly9mNzc3K1BidDIvajExOS9IVC8vL1BQNDlkZGZ4OGZIUndybVRqVjc3OUVYdTJweDJ4aGp3dGRKWlFjQVdRSVBMUElTc01KYVN3aUQ4Z3pJS3J3U3lBVEU1ajVuQWJSNWMxZEJVd0Jsc0VXVzBoNkxxaVlzcUZQQVF4Q3lSWjN3T1NBUnhtbFhNWDVrNjRwUWZ2djI3Zjc1K2RrK1BqNU9IeDhmNC92MzcrUGJ0Mi9qdDk5K0c5KytmUnNmSHgvamNybVVGTE8zMWdZRFdibHhSSXMvVHFmVDdvdXN4SnNBeFhBMkdjN1RBOVhkZ2Zkb0hiRnNqNzZYMisxV0FyZ0kxYWdlR3dBM3F1cHFvSHNtY2JJNkZ1OTNxdWdnRmE5ZDdMZUR0Z0tmQUZIQkorTkVCeUlrY0o1S2VydmRUbWhoR2NnSkpTWjV2bi8vZmorZnorMThQcDgrUHovSDUrZm5tR0QrL3Z2djQvdjM3K1BqNDJOOGZuNk8yKzFXczdKampQNndyYU1JNUU0Ulo4eDJ2VjVUU3drcXVvdFY3L2Q3VHo2SEZXc0QvcU5jZHcwQ1EzcS8zMjFjNjg2VHdEVklkYnV5NzN6TmxkaFNIYjhJMmtsWnpubStJbkJTNFU2bjAzMDJhQkZzTGhIREFLSlZKVmdsZkk5amh2dTUzVzUzc0xBTllOeEFpREE2TUNlVUh4OGY5K3YxMmk2WFM3dGNMcWNaVzU3UDV5ZVk4L2Z6ODNPY3orZm5zU21ZVXlrbldFRzg1V0JzdDlzdHpTTHlNZGZyOVFpMDhpWTE1VVowTGxER0xoUjNvNXpLMmo3T1BVVEQwRStuVTN0azdYYi8xNk5GYmhsb0FNdVkxempMVU9PM0JLZUlEZStaOHMzL0o0Z0ZvNFRNNWpQbXVSZzI4Zm9VS0tWU3dvMTZUZ0E1bnB5d2NXTEhnWWwvUHo4LzczLzYwNS9hYjcvOTFtNjNXN3RjTGllMHNaajRtYW81Z1R5Zno4OEUwZjErajhFY1l6d1RQRUcyY3FqeWZITkYwTThmdXFFaWFPVm5SelpaUU5oNWZ3UXlIZy9IREdmSm84OVExemIvcXV1NVhDNjc3M0kyWEtmVHFkL3Y5K2Qzd3VxV3ZhL1lUZFVkRVYzZmhJdi9WaXlwczZZRTN4M3I0M0s1YkpRUzY2emF4VkdGc3ZkKy8vajRhRisvZm0zZnYzOXZ0OXV0ZmYzNnRmMysrKy90ZHJ1ZHZuMzdadU5MQmFhQ01nVXpDK3JaUmlGb3d4VXVKSThZTXFjQ3A5T3BxNXZhZ2FZVTZsR0pBMVhRcWVqY2h3NkNqMEd3NW5ZQnJHdzAxQTJPMjA2bjA0QkdvdU5OeVRmcC9Gd0VsaFVleTZuWHJJS3c3UVFXZGR4dU4ybGRMNWZMODM5Z1NQRjhhaHUvSnZCTzQ4Q1BTdXFNZjhWcDkvUDUzTDU4K2RMdTkzczduOC90ZnI4LzM5L3Y5L2I1K1RraFBKM1A1Nm1RNDM2L2orL2Z2Ky9pU2diemVyMCtBWngvNSs4OGJ2Nk9NZGE2UzV6NmtkMjFmWUM5ZHh2N2NJSkoyZDlBT1MzMGZQTXp5SGlUTThCNERGNlhVbFlIcDRLUVczVysxdDc3TU5CMXZHSHhXcTdYYTd2Zjc4K3k1L041QStIMWV0Mjl4dVA1ZGJZdHlhUnU0QWtzYlBxNjkzNmZqUnpYUnhCYlByL2IrYjE4K2ZLbGpUSGFCQkJmbjgvbjAvMStIMSsrZkJubjh6bTBzQjhmSDV1NGNyNUd1QmhNVmswRUVuOVJzY3RnVmhNK2l4bEp0TUEyM1I4QjZ5eXNBc3RCT2dGWElLS0NNSWdUb01xTkV1MmZZTUg3enRjNzMyZFFLa0NqMXl0QVp0WTBLeDhwSXI4R0dKK0FUM1YrMkhpcmhsKytmQm1YeTJXejczdytiMTdQOHArZm44L3RVd0dWbGVWa1R5VWI2OERrZmF5V1k0enhOUmloVTRFcExKUFpWcksrdTdKNC9tZ2ZLcWVMVzlYMlJFV2xJdEwxZGl5bmJERGIzK2pYZ1lqUXFuMHJyeFdjK05rSUxQN0Y3eEliTXZ4N3ZWNTN4NDB4bmxiV0pGMTJaU2FnL04wcFc2dCtaem1PTXpIamFqS3dEZm9uZDc4ellUZGZxMTh1cDk3enIycTh2M0lpb0JwclJ0QmwwRVo5b2c1V0JSR09kT0hqSWpYRjdVb3RGYmdPV25YeklKeXpZdmpHNUlZZ3NtTU94SGt6OE9zTVNyVk5XZXE1VDhEYU9jYkV2MU9kNXJiczlhTzdZdk1ldDYzRWtGKytmTUV4cStNUmw0L0w1YkxaTi8rZXorZm5aNkthenVNcVhTUVZPNXNwSlhmbEhBSXplcy94SnNlY2tSSmlETW9nOWQ2VmZScnFYTXI2S3BWVjI3alJ3SmFjR292T0FNMXpNZFFNbndLMUF1Yks2M2tkQ0NodkkxQzdnMHo5bmYvRCtYemUyVmo4SDdHeDRQOWR1UWxzWUNycXlOOFhxRzNIbS8xME9qM2p3L24rY3Jsc3R1TStqUG1teFQyZFR1UHo4M1B6dDJwbjFYc0VIWC9iblBhVnFWbWgweHdPdDBvNlhMTEFIZVBVVTIwM3dIZmNyc3BDd21WM1RyeUI1czBNc2VlZzk3eC9Cd3pDakJsYkIrcFJBUGxhMEJWUXVUNlY2UUhkQmxqM2QwS0cxNDdiK0RxeFFlVXltRE80M1c0ZFFhcitUSWp3bUFkMHo4L2g2NXZmMC95THYzUGI1WExwcnUveWREbzlzN0VUMEkrUGo2ZEtLOVZVRUllS1dRV1BBT3JKOExLZDR2RSt0OTFZM2U3VUZsV2F0ZzJWd0puYitIUG10dm0vc2ZLNTkvT2FXRjN4L2VQMVVQSHZBNUREWURwWVhmYjBkcnYxVjJEa0JreHR3L3RFV1ZWbFhXZEM5cEZZczUvamZoOWRTLzE2dlc3czZsVEcrVGZxc3hTSkh4a1hYcS9YZHIxZXU0THNmRDZQM3ZzVDNONzdEa0wrelBtNWpTZEtMNHpSM0F4UWQ2ckhrTGtZbFNvd3NycTd6bnp1NndTd2RzTUpPWG1BNWZCY2p4dGdNR0JZSGxyNXpva2h0c01DVGdYTFFPVzRYQzZkRXlFTXByTDhtQVF6WFJnZHVpeDJ5WnpvcnhrWXNEbjNoQjFWZU1MR3NYc1Z0Z2wycFc4UzNzdmswdnc3UjRoTmFIdnY0Y0FDbDVIRnp3SUgwS2M2enU0WGpEUFIvanBBVnhXek8xWGsyRERiM3ZUY3hlR1UxaVdaSGttSURXemlXS3ZpckNKNERyYXZzNklKL0dHNmNUcVdkWER5K2ZBclFEVlZrTHFrVmpBb1pJSVRkbW1JcVh3cWE5NU4zK01HWW9aUWRSVk5PNTNZMXhSa2hPMTZ2WTdldTUwN0NhOWxKbmJHcHhPZW1RaFN3L0FRc21tcDV6VTlCaVU4RzZ3dlg3Nk02L1U2UGo0K2RvMEJ6NENwZ2lrblRVZURxd2xLQm1nM3U0T1ZqcloxQStyQWNnYWVqV3E2ZUpDdkNZRkRPTlN3T2dIWDRFUVJ3OGx4YnpET2RFSzZnWjNIazFiKzhnMm8xSkZ0S1h5di9mRWRUWHVXaldYZEFaaUJwNkFEZURyQ0ZpaW03QjZaRm5lZUk3R3ZtL1BNa1VEWDY3Vzd4SThiMEQ3L3Y4ZEE5cWZONW9hQ2Y3NFdaakgwbWYxY21mWTFZMEpVRm1WclRXdTh1emtOY0x0RWo3dTVGWEJUa2ZDNkdPQTVxOFlNeE84S1Z2RjZzQVZHZGNyVWJzS09EY1FLa0xNT01kbWx4dW02NDJZclBtMjZBbGhaVzFZQjFSK3JyR3N3RThUYVlBV2VVTXhkZitXandTdloyRWYzeXRPeWZuNStQcFZQQWFxT240M010TkJxdm1qanhiak00bFpqWlk0Z3FOTUk1a3RhVy9zWUtOd1MrOWxGUXpHaWhtTUNLUGE3K1owVjZFYjBHUm1vYnRwWDhKbGpXdTVGTUxONWphNmhHOWt3UWdacWY1KzFOSDVVeHprRlJlQ2RXaEo4WGRsR1VreE83SFJsWVJtNG1WTzQzVzd0ZXIxMlRQSkV3L3JtRU4zTDVTS0hJV1pnOW16K3BVb0tPWXE1YkpUSmRYMmdtZTFVY3hNWlFGYUVRSWxIY3QzMk0rWTFCekdrR3V6Zml5QU45eit1Z3BsWjFzeW1DckRDWVlrR3hEVHBJOVJ6Qnkwckh5ZURVQzFuV2FlVWFEOW40eGtOeVlNQkRadHpaM0IrK2ZKbFkyMVhGRE9jQVJKbGFiT3lpUzN1Q3BMSTlqclpqQ0RrYVZ2Y0NDandvZ25LU2hXZHpYWldsWk12VlRnRDhMcHFsQ0xycWdiY0IrcVl3cmdLWXBUMGNjQ3FiS3lDVmFsa0VhYm4vRnlub2dDclBLZnFmNTF4SjdzR0IyWlhjWm14b1NPenRqeDMwMERaaTdhMC8yQUlSMFVsQmFnOVN1RHc2S2NBemxhQjd2SFp2V3BqSzkwZHlycTZiS3lEVVpRYlIwQjA1YmlMUWtISWNTVW1nSUsrU3d1cWdIQ25vaW8yUlFVMXlqK0JuQnk5cHBoVktMR3lDN1p6RksxcHhXSytFOEloVkNXTE4vdUx0blVVNGF5b1lMb2FBTno4RmR0YVN2WTRwVjBCRVcybHM2MWN6cWxsQktwVHlLZ01BaHJaMWNkYzFSUk90UG12V05rZGNLWjdaS3hhV2ppUExKTXBwN09aS3hBK3JxRy9vSkxqeGYwcG5KbHFMb0RabzNneVUwbUtHeXMydGFLZWNqL2QxQytySlNwbEJxbFR5QXFnUitEOEtqS2xtUkwyZ3RVY0FkQ3RzTCtpakNOVDFvcXFxa0gyT0hFYkc1c0RGblVnNUFhK3lMb3UyVlUxcHRqMVMyWlFxdjFPUlpOOUlXelJmZ2FSQnhLb0JFOFVXeXFsSkZ0ckljMEF4TmpTamVkOTlDVFkvWERmU3pDejVNMElab1ZFc1duUEZOVHNsOG9vVkMxVHpiR2dxRlpORFNnVndLSysxc0dETUtxeFpDV0dWTUR5c2lFcjFqVlNRSlVZd2o1aUhPbFRoZEh0NDRTUWc5Q04rbmw4RDkwTk1JZ0FkZ3I0NkpxUmlSOUk4dlJkRnZicjE3bS95eFVNS2pOTE1pVlVBRHd1MkNXR2hoaStGNTVUV005TTljb2d6bXMxZG5NNHVPRi9MQUVZV2RjcW5NN3lGbXlxM0lmd21PUk9kN1kxaUZXdE9qb1k4VG80MW1UVjVJeXNnRkZ1UnpzYldGR2JOSUlKQ0R2MWRPbzRsWkc3aldCd1JGdFZUS3VXeWVDQnlKS09hbjhvWjNlcDlYZGRObDB0RHVheXdMejljWFBZZURBQTBTcGtCTzlzYlZjVE9WV2xkUHY0dXl6RWt6eEh0anZvbkhvU2tGRVdOb28xZDhEaGNRcHV0ZDJwcE5vbjRCem9BaUoxaEJGUWcwZFZ0ZGJHSEhEUVd1c2htTkVRdWtMTTJRTzFHMlk4YmdUWHFGaGNCSmo3RWpQZ2NQdHM4VVM4cVBwUEIvZFh6bk9oNVo0Mzh0ekg1ZWM2UWdyT0tyUlJmS215c0JtVURCK1BoWWFiTWxWUEVSK0dDU0lUVHpyN2FtMnRBckgzYmdjRXpQSm0rY3I1ako0Tm5ITkZEVnJGWGNJNUxlOWs1Sm53K2JlZGJWK0ZmUnpaSUhhT09hT3NMWTAvN1VHczU4RGpyR3dLTUlNRklHek9FVzEvakdzZEF0Q042aEVBSTRoQmU5WVhlUlJPQlNWUEFWUEFxdklNNWJ4NWhWS1dBTVA2ekJSeTNpZXNjcmlkVmRGQmluQnhYRG5HMkdSWTJYYkN2cDFsaHZHdE85Qnh1NWg5MDhYUXU0MmxuU0FyTUZkaXpNaW04dXdSQ3hQR25uT1M4bHdwbmJPaURxVEFqc3JSTi9QY29BU2NDYmFBQ3FWTTQweWxuampUQnMrYndXbEFHMjMvVUtiZGtpd0tXSVFQR3pXYWN6cG9TbHhQRWo4MjJjTldrcFM3Rnl6c0RycXBmZ3BHM2phaHcydmdiYVNRQXh1TFdaWXQ3Snp5TmU4Sm9acE5BY3ZERk9kdzB3cVlUOUFLMXJaei9EZGJTbExQcDByeUl4Z1FKbEs5QVpsRXE3SU9YcG9oZzlQSWhyQ25nODhKc094aVY0WldBWWZnNHNpa3gvOGt5Mlo5bDg2MnVxd3Jmc2NJSDgrdWdUbVZHeWlkZGVWWVVnRU1uNEdaemcxNEV3SXNoOXN4MmNLS2lXWFJldU9FNWd6R09RZ2RsUktWVmRsZXZxYjI3OVhxMFFuc3RzMlZEYUJPMGNvZXpzcnVXdEhBcHU2c0tHNElCaE4wYUdVMmtMck1LR1JUTjNIbWJDRHdLVjE0enZrTUVERzRRZlpWc3BWbGFOVTJtaGM1VEVaM04xaC96cVRoZXVMcFcwNVpXVEdWamIzZGJuTm14S1pCbk44SnFpZGFWTEtBT3lBUk5MUytNQjU0WjIrVmFxb01MS3JvVkJsbmdlZm5UUEFjb0hOV0NTdmxmQThDSTBIRW1CTkJuQmxYeU1yelU3QTdXVm05NFBQcVEyZ21xS3grV0RHc252aWxtY1NPQkpxT0sxbll5QUl6dUF5ZXNxM1VkU0szS2ZXY1lLRDk1SG1mWU9VM3FzZXIyQ3RZRVVBK0ZwZnFkTnZnUEJaVUJoRHJHT05SVmxRc2g4ckxjYVVDeWtIRzBPT1V3VGxMQnJzaDVzb0VNR2V6aTFFNEhSVnQxaWNwNXdaRUZYZGliQ2tHOFk4dlg3NXNiTzRFMGlvbTl6K2hqU2lPZnkzRGhwWEl0cFZoRStVR1Fkdm9XanRDaG1yR0hmNFlBektnQk5uR3R1SnhGQ2VHZGhVQWZRTExLOGtCWUFQNmd2RkpaYWpNRzNYa3ljeThLdUMwcTRFeXltd3R3ZHhkdjJNMG1JQnRLMExLbmY2NDBqMDBBdXE0Z1VrZFdHbGhzMjJxSmM2ZFpDc0wxOW94bmxUSkc0U1lWUklHcEQ4VFBGQnVNNk9FbGJTMXBsZGlkNG1HQXlONlpJdXBiQzViWEpOOWZkcGJUaFN4TFVhSThJRzFYSVlCeFczVGpzNktRb3NLY3hmeGNRbWRud1JHTTEwR25GY0N5MlhZdW5MTXlBa2RnazRtZVBpY3pzTHlndGhjQnV0NmdvT3FTN1lWRlhBRExqYW9zQjZzNm9mY1pXQVpTSVJZcVNVa2l6WXd0dFlhYjN2VU9ROXcySFJ4SUlnOFd3UlZlRTY4eGk0VXRMM3pScGh4cGx6d3VacmNxWUNxMUkzalBJNWRuSkl5Z0VvaE1iUHFWSlN6cnd6eEJKVHM1ek4rUmVVU2d4aWtQUVZGM0pWQmVOUXhiSEVOckVNTnZFZEZaVlY5bEg5K09SR0VzTlpRcHlUTmM0QzNBRzdYRjRuZ3pxK0RyTzJ6YnVhYU9YZ2RhRmNka0VvdG9TRkJWWDJxSjBDOE9XWmVHNEtHbHBnaEEwWGZUT1BDcVYycXF3UTI2UVdmRjJQTUxoSTJ3MWxWQWEyYVBzWWQwemEyNU1RUndnY1pONnVRRENpK1p4aUQ0WEVNMmtaeE9UNDFGblpuYVJsY3Bab3V6bFJxcWRiUVZXb3BRb1NCNThSVjUwbEJOckhpL0F3WFM1THJ3RFZscFkzRmMzQnlpWUdjNTJUcmlzdDZrT1hkd0luQVF0SnBwNVFjaHlhcXVZT1Y3U3UrZnhWTWFWM2RjMFJFMlM2bVVZMGdMdDJwTWNZcXJLSVE5dzJsMWdwUVVNdFFZY21tYnQ1RFROeGRoblVDalFxdGJLOVNVU3p2ckMwbW1oaEUxZTJGUzIrb3h5cHkvWkFTdXRrbXRqeDN2Y0JDMjRQWDY1bmJxa0JDUmhmalM5a0lZUG5lZThjTWFnVk9oSS8zVDFmQW1kdEFXWnNDc3dUSkNrUVZOYTBxV0tTS1BPcEhBVWhEOURyYlZjeW9Za3dxaHZoMTd2WUFheVhMUXlLR1lkeGxVREZwNDk0ckJYUmpZZ08xN0REWWV0TklVai9lenA2UzBsbmxwRXdzV21KTWtPd3NLWGVaS0VBaklIbjBFUUpJU2FSQmNPNlVNSU56N3AvYkVqam53NGZ0K3htRHZrc3hYNEcycklyaXM3cWFlS3dBRk1QMk9pN240Y3JpdVp3dHBTVXdwZkx4U25PUlNySXF1c2M1WkZhWHlzcVJXamlaMkR5QVdFSUwzNXRWU29RRWxGQUNqT2VHR1NFN0FIRVFnZG8vTFN2Q09nR0J2a3hzbURidmxTM0ZwNXZoYUIyVEFHcVJLcktLTXJoTFZwYUd6RVZqWjBPUXhEaGFDVEErUXlSUjFkMTVhUXpySm50TDNSaWJzaXBqRzZqbGdMNHlxYlMwc05ZZzFlODR2aGJCVnJFbEs2NENVY1dZWERmS3hocEl1eGlWSlpVeHNiTXkvdVJCS1ROUlE0a1EzTGRSWUxTMHJKalJQbFRQcVk2Z2RKc0VEYythUVhBbitIZ3NOVUNiUnVGME9qMHp3bkE3YldEa2JoTzVFbnMwMHFlUWhTMWxhQk1sNU0vY0FheHNMRjhyS3lxbCtUZjdFTExFR3UvaXhpaW1kQ3ZvMFRqZnBqS3dhZ2dlbjRlaDV2N0xva0xLYkx1eXZIaGNaRzhkaEdyRUR4N0hnOTNacHBKRjdxQnFPM2lWdmVYRURRTkluemVvZThZcTZlUGFaQloySnZpTTNXMlVBR290ZWtSQ0FHcTRFa0YxWDNET25SMTF5UnNCTDF0UmEwUFZjWmlORlhaMmMzNEZza3ZvbUluUVE2bHpwSm9aYkp4azQzTndLSkZCcXVKU3NyQnlIeWR4S09uVHhRQVNCbVMzaitKTW5zSFNsYTNFYzZLOVZXb0pWbjl6Zmp3T003aHFZQUFxSlF3RTJhM25BNDhKMlFHZWdSa3BaTml2U1kreXMzRWtLZDRvSkl3c3ZJSGwzY1dnTHQ1azROSDZPbXRMV2RwdXJPa3dFTXVwWWM3ZU10RFJoT2NJMnVpNUpoVkl6WHpMeXRvL0dBUHVab3lvOHdrb2R1VmdKZ2xDdDdPaEdiZ0lENE1xNHNpKzYzelVTMUZ1RkZYRmxxeWFqMmVtSGxMTWNCcVl1MEZNdVIyOEJiQjdsT3hSTVNpQ1FYRmhDS3V3a2haK3BZRGlHU2dic0tLVjhNaVNSc3VIU0lXTTlya2xSaUlsWlp1cVhqc1FLOG9vWUpNZ3EzSktXVmtoSGJoc1Z4RlV6dGhPV1BrWWlqY2J4NTRJS3NTZFQrdUxyM2NyR0t5b1lnRmlHUjlpQms0a2Zsb1VYK0pJbFFSUXFhYm1wZ25ocXRwUXBiNlJWUTFXSDVEbnJTNGhFb0dacWFlclEyZGhGYno4WGVQeFNobURibzcwZUlTam9vck8ydks4U0pYSTRTVW1FVTR6V0tEelVEdFdUWXc3eFhsYlNURWo0RlJnN3pLbktvR1JBTHYwR3M5VGdjMUJwQ3l3R1pSUUF0cVZ6MnhyQmNBTXpFcGZad0ZTYTJHNVcwUUJGalNNYXBXQUVGYTNIY0dON0N4RHpFQ3lJa0o5N3F3cnFXTlRXVm84NzZQUHNqUGtqMnd2Z3JvTTVsTFpLTUVUS1ZxbC9Ddm5XVkZpRmEvU3pKVVF3a29ac3I2N1k2dmxTUlYzLzJ0bU5UT1kzdm5heFl3TXVvUEtxZHpSMXc3SXFIeW1sUHhhQVRoZlU3S28yWlhZajRBWUpITCtrTmRLd1JRWUVTVFJhNWZzVVovclZDMVRNVHlXVnlZb3FOdHV6YUhzTXl2MnR2b2FyeGRmcXdZZ1UxYXhGby9jbnFsMUZHc3FLK3VBUk9WOEJYNEdVOFdjWlRBVGkycTdRY3lpME8wVitHaFdCTU5SVWtuOEgxU3NXVkU1QnkzR2kwRUNxVWVKb0JmQXREYTRhbWtkWEczN0FHUDVHZ2ViODRwN1VhenBvS1J6ZEZ6ZVE4SGtvSEd4cHJLeS9IcG01dDEycDQ3SjZ4VFlERXo3dUlORVhTdXhZWHZGc2tZQWMreVN4SDlzZjVmdEt6VTZJYndWQmNVR2c1ZTVGTUNFWFNFclpSMHdHYXlWMTl3b005Z3VQalRxSmRWVHFSNHVFNG5KbkxsZFdWa0VDQ1pMZDJWTEYreHRhbWV4N0lwaXJpU0RVcHZycG45bHJ3R01DSHlwcE1IK3BzNkxJTHN1RkdVajFYRU9YaXFicVNIUFVLbkNscFdWNjhrcXRVUlZORFk0VE5hb2N5a29ZZVRVNW5nR0VRYS9TMURubkU0QWVYTWNLakhQQW1GVmpDQkVOYWV5TFZOSGZyM3B4OHhVc3RKOTRoSXBmSDRIS0UvZURhQXJLNmxTeVZWRmJkdDFneFRJVmszcHBwVmxGWGk0cEVoVkJUT2JxdW9oVTg1TUxYbjFpYWh2VWtISmpTQ01jMDF0TEZ2ZVZWQngwRG9kTTZqZnRDdTdET3RJell4cmMwcXAxSkdQMmF5WUZ6MkdiNkh2TXJPOGNuR3RWNkdqbTN1SW1TZkQyR3BXSzZ1b3diWkdNeEZLUUNvMXBPTXRjTVhGcFJzdCtoWEdvQW9tRjNzU1RCR2dUZ2xiQktXd3NRM3RacWFZU3AwWjFDaW1SRFdGY0NKVVBZSjAwQkk1RmtLWU5vaWZ1UXhtTjg4U1dWWFdMTWFVcXFxZ0MwQm1RSlI2c2szdTlOQ2Y2allMWHhBZnFzWUVnVkxBaFJZMkF0Z3RmbFpORm1GeWh4ZHJMa0FkV2xrNEQ4OE0yaXhIeWVwSWRoTUhyRy9pUjFaR3RxME1HcGJEYlJQWU9YZVNZMU02Tnk0WnN0dkdTa3RLK1hiRlBBVGoyRDM3MXNhUEVzQU1YaFhyc1owa20vWFN0a2hoTXlCZnNhNnVYRlplMlZDZStZTXIxK0dLZ3dyUXlOWXExVlJyQitFaXpBb3c2TnNkTktjeVZFa1llTTczeXM2cTRrQUhwNkJpRmtsVGtJclZDNW9ZVjd1endPR0N6NFVKMFN0cTJsV01KeTR3dGIrUmV0TDZ0WkZpY25KbUJ3NVVqQ3ZYWE1aVkpYMk1Ra2JmK1hONUVXZDc4Vno4L0pFc01aVEJpS056c20xaW5MUlVRNzRINE5pZGFxSTY4ajVzQUZneGNSdmVDN2llTEpYZlFZeGpaWjJDc2lXRmV3WlhKbUJJbFoxdGR0clg0aFN1YXRlS3NvL1JaT3RPS1cybm1xMW9UemVLNmRSV0FXdTJOUlZiNGhxMFNYbTFHdnR1Z0hyYnI1SVhxbVNrdGc1Q3VERTJNU2xQd3NZNWtORTJXcDNBcWlaYldWTEF4aUJGKzJpQlpidU5qNk1CNnJzTUxDN0Z5YXNhWUR5bzdLa29QeUV0dzNwRU1YZlB2eEFKaTJqQVFRZ2pyejByTElaU1dabElvTmh3ZDV4SzRBUjltWU5qV0FhTHJudUltSmVCVk45ekJPUk9iVnZicittVFRmRlNFSkxTUm5IbzdoRUpvSWk4TUZxanhtdmdtRjVVUlp6NHpMRmdaWjhDdHUyWDdnZ1ZjY0ttOWdWeElzT0hxeFhnTk1LbkZXWlluZjFkQm5PaGF5WHExN1F3RmxXVzA5ZU5LeVZKRm1YcWFPTkdBNWFDZWdNYkozVVVrR1kxaWMzbktXZ2pxOHFmVllHUUcxZ1J0NnJzNjJhNkhpcXFVT3FkZXNLNU5tWDRuR29mSm9pRTFkMGRGOWxWVmt2VDEva0VFYWFDb1lPd0ZwY1Zjb0xNKzc2NjlQeEM5cldxa3RIMHNXVVlsZDBWQ3B1Qlovc3RWUmNHZ3k5V1gyK1UxUXRoaTlTekFxU3h6WnN5K09pRnpCWW55U0dWNkdrdTQ0ckQ4QkNPWkJWM0J2RDUrQUtSSE53TUVzQjZFekhuSnBrVEFlaVVsRUdrY0VDZUI2R0RaVHA1WUVKVGx2ZHJrbnhZalRsbE1rZk50WHdEak03dVZqSzVKWFVVbjQzcnJxcEsyanl0YXhIVzBNNUc4REM4cnRITVlzN0tTZ2R1VlFNR1RZRnFGdlZTNnJrRDNzREo0NmFmZFlGd29xMTFBT0tDQkxodndvVWdjOElHQU55Y1I2a25acmRKUGRzdXhueWpmZDNGb3ZUbFJNZEVkdE9sNUNNVjVFSHNYUUJpczdUT3d2SURaYUdqMlZucGJoN2NwSzYzVndZRU1Md3Fianp5bDY5OXNhd0ZGa0YxeXFqVVUzMUhmQzZzVzFaRlZGdVhWWFZnejlrZUVhdzB5czFsV2ZtK2F6UUFRU1dBK2hLWVZmc1pqUG5jQWNVQjlvSWF5eS9VWlhSTmNrREdqaTc3R3NXYnZCbzZ0UHJXUHFPeVZrQlVxK0lOZXFwek5kWXMvdTBpZmg1cW1wcUlXKzMzSlZTVWN3WTcwS0w0VTlsWWRVNmxqdFNsczdsbWZpOWczWXplUWZWa2FHRmFWM09EQ25hRDJOOHdzRURGa2xFM1J6TTNaZ2hkWWtXSHNzenE3MEZJZWNuS2tWa3Q4ZXpNelJxOWJrR3VLb2pSTEJWU29kM1kxeVBxS2dZVzdKUlFUUFZ5eTV4SVlMak9neGdUNTJSS0pVWTFkT3JJaVJkNGZ1dFF4L0E1QWNTbUVqejB2Rldya0x6dmJXQXU5SE9XYkdneEZrMVZOVHBuQktrNlRnd2lzSS9IY3hZWFAxdUFXTzcyVUxGbEJUcSthU3UyVlRVczZocnhNMkNGK2hFb3IxVklBOVptRlVhYWIxbFNTZ1pzVnM0c3h6SGxWTG9KSHI5SDREaE9OVGtJMVhDMC93aVkyTm9XQUc1UmxuSEZucTZvTGNjcFFkZE11Si9PMTdKVkE1T0hMaTBCcUN6dHE3WTErK3VjQ2Q5OHFMSThNSUhCVi9jS2p4UVRtZTNoRkJTM015Q3FuRHN1eW0ybzgwSGp2RkZUdHJVUm1OYUdKc21WYWhJbWpUc1VYS3RRWlRBVnM3TXZ2OC8rZnpVclpBWGNMSjZNNGtvZTZYUDBiNlNtV1dORHp5VXBROGJsK0x0V3g0dHVxWjM2Y1JZVjN5dVZ4UE53dklpcWlRQ1NtdTdzcmdUelI2bmt5aHBDYXJYd0Z5MXZHZDVpUDJjWTA2bEZyNU5qaGhnMVk2K05CMjhmdGJLODNzOHJmN2tMSmJLd0RGUGJMZzI1YTBBZFpKRWlxcjVwaGl4S01EbFJVdGNzc3ExaHJpTHFHb0gremVOZ1ZtOU9lbWpzRVRWOEpkRjBOSG5rSUZ4V1kxT0I0WXJwN3J0V0o3TmdBQUFQWGtsRVFWUTNvTnM1bnBseVZmOHUyRm9MdTFKckh2ZWFaV1FqcUFrc2h0RmEyZ3pzU0czWnBrYnZnM0hhZkY5c2xQUGxsZGpGbEs4MEd5c204TXI0TVBobmVOV0VOUEdqQUlwbWlsVFBBVGRUUlRYbENCWUhZQVF1UHdBMzZ4SXBXdEdONHEzWTJNaGlHc1VwdVNTbmxFSlJEOFBvckM3Q0ZZVncrRjUxcVRoZ2FieHNUeFd6Q0dZMFpTc2IzbGZxQXkwT1BOak55OHhpUVFLc0hZRlEySEJaVnZWYkJ1cTNtMW9XS2FqcWFvbnNNNnVaVXI2Q2pYV05aMGw1RTNoM2pVUm1hNmtQM01KSWl5MUxtK2thaFFxNDFOMmlaamE1c2p0bExZTlpIWnJINnFVR200dk1iRHA2UncyQ0ZtdnV5RmtyQmNDeU10RnFCYUVDbXNIb0s5QloyTEEvbEpjUnFTYURxbmFXYnJaZEdhejNETGdJdkJsbjR3b0d6dGJ5Skdxc2x3eGtoaEhyVGpUWUZYQ3RPb0tTOHVMZG9mVmRBYk95bEdVNm5sWXBYV1p0czRuWEJxNld4Sml0TU5va0hVSm5ibkpwbFFtK2FHcFkyYTVHTVYyUUQxaFJ1YkJQRktkdW1mNU9Ia0xIejBGOWx1RTVrakJqUmEwbkZFNUNVR3FIdzMyTW1qWjZ4a2dJTlZuU25aMVZaU3RLMnFLbFJhTGxRZ0s3dVRxN0pGWEp3TSszU09FS3loWk5JK3RKMEk1cU1ZeTlrMnFKRDdkVldkcUtYYTBDS05SMENjamcrQjJJWXUyZmNCWkpaa01GZ00xMXIwWDkyd2lsZ2hGR2d6Vm5leGxxQjd4TDltUzI5U2lZVVZZMm5YT1pqTkJSc3lEc1FQUldXNWhyWjRYY2RDNEhWV1JiamdKcjRzRm9mSzVTempRN3JoSTFVZWJkUGRFYmo2c3FJdlRaUVo1dmEwOHJBQnNBVzBVeGVXeXRBazdBMktKOVpweHpDaW9CMjRYRnRZQWVYWXhyNmFuU3FoTGdwcEVxV2JHd0x1blRnclYrSWpXbEwyOWxqYUFsNEVRTUdzRXJwNGFwZVppcXV3UlhMWEFxT0NlcnUzMm1teWRjNm9XVFNXcEZBR2R6ZVRCOFJUSFZNRXRsTTkwQ2JiUUNZaFBqcTNlZ1lyMUZHZFlJUWppdURHWjV6Wi9Bem9iS0dPeUx4dGk2YzRSd3R2MmFueVdsTElDbmxMaHhKUlh0NkE1ZWJEQldGTk9OYnhXWjJkMDJtbnU0UzlZRUNwZXBwVjF6U1dSQld4SFl6Vkl2MUNYU291d3FxWDNqQkJCRFpkWVFicFRRVzRaUWxTOHI1a0g0c3VTUm1nMisrM0pOMTB4MVBhQW1Fa210WWxFZGVHcEpFTTZrT3VDcUNSMjJvU3VqajVJVjJIZFQwemo1cHJMS1RqWEZBUGpkUWx5cTd4SUJ4QVFQNXlNY3pHNFZ4QUt3MG42aWxaMlFCY2UycEx1bGt1eHhxbm9JekZmZ3F5cWppbDlTMVZOd0JyRm1leWVvcHM4eU9qWlV5YlpkZlM4Q3VhVElKdW16czV0T0RhTnRMcEZEUS9QY0pHd2VMaG1lTDFuQjBLcWlVRFNjc2lVVkQ4OURpM0h0ckt0U1VMdzNSTGl5Z1pEKzdzRjhKVE9iZ1lzckd2RE5VRlJHbDFpeTBMbDFZa1VjMmFKWU1vZzkyMEk4cVc2WURDZzFNcWswSkhKRktYa2JnYlJyZUkrcXBZTk9aSHJWY0RVYmE3cGpzcGhTSk50SzZ1cGdSTkFWb09TMG11Z0JlTjRiSVpnSGh1UFovczFFTmFYNktzVnIrWU5yaDFOYjdpcFIwUEU1emJOUmVnQ2JySFJVdzZZZjA3ZExCSmwxZjhLQjlhczJWMW5OcUFzbDYyTEJCaGVod2FsZXJrSG1CMUpGSUVaS1NFdXNkbDVKUWoxbkpsSFhTQ0YzNDJnSjlDWUdyWGVsa25KSVhxVlA4c0QrcXRwbENSM1hIMnFmS3EweWdNcCtLblZrS3hObFo4bTJZa0lsVk1pQ25YVXdsN3F6bkJLU3ZRejNtM1B0Nm9RYlhPNWI1Rml4Q2gvZkh4VVFXL0FFY0s2ekNOcUtRbkw5c3l3cW1LdXd2cVNZelQvYVBWTk5wVnlodlJXMjFhcWNpQ3NqZFd2QndJTFV2aDVWeUN6YldvQzFwSmpKNjgwQ1dzbCt1ZEtCNlQ1UndHMW1sb2hubHBiZzQ3aXo1VTloYTBGR3RtUkxGWUJ0Tzk5eTk3QXAweitaRFRBb2c2a1NMWnNNSGcvSUZra2dwNkNwdlUyVTBjWVZTZG5ta2p3QmRPbVhieFRXTld6dUliaXBNaW9WeEVja1pFb2FoU09peTJNM0swamNDMUxoVkR3YXFHMFp2a2NXcUNuckc0R0l4eWtycWxiV2R3NkxReUJhWlI4SG1MUkloUVdzSHN3RDQyWlhWTE5rZjlsK0ZsVzBIVlEybHdGc0MvWjFGZHpsUVIwS2FQZm8rRmRmdSsvZHdWUklDdTFDR1I3QUVJaUFoYytBWlVGMGtPQmFQeG1VcWc0aTY0dlFuVTRuRkRZSjlOeisxZlZYdmVIOXFtcitrUElMeDhvS2NSVi9CRmJ4YkUwSk1UMGtTRDR3NkwvbE5ZOG9jc3FhZ1ZkVTNBM01qeGh4Y0d1cXpzUEg0aXJwYW93MXE2T3lyVmp2cDlOcGM1OUU5MUxsZGJvWVZ6SldkaW1XZkFXMlNORUtjRGFYMkZtQkxMQS91S3hsbWhoNjEzSXMxVVJRQXBiS2Z0dHd4TDAycTZPbng1cFF4U2JQb2pBZyt2NWhBbk42TEhWUkRYSXN2S3RSamlTMHFKVXlaVEFYVmJBSzgyRWxGSldhUWRWb3FVQzFVbnQ3QlZhVFF1ZE02U3VxZXhqUUpONCswaWNheHYvdXRiS3Y4M0VUYlQ4SDhnamNPS3hPSm1iVWE2T09WWGh0M2RGWTZySHY5WG9OekZMY2VFQTFvOCtwS20wTEFIUEhaMnJZS2pGcTBoZlpGaXhzcUhKZ0QzZUQ1bitVMGtiMW1GalhrbjJsdk1TU09zTkUvQ2RJQUtGMFN5dHE2dXJPSFVONWd3ZzRHWm9zZ2JtZ2dNNXVjcmEycXJTMklnMWNiaUJCY3hZemd6VUROTEN2TDhHYlpYTnA2T1J5M0xtUytLazgzelJJQUs2QTFpb0thMkk5TmFwSXVpVUZkZkM5NzY2UEZaVXRxVXI2S2JXayt6WlUxYS9acklYRXp0cmpUT2Z6N2h3S3ppQ2VYSWFyYUh0YlpJTXorMnBHZ2F6Q213NHFXQUZ2RWRob2RZcDBYcTBwVjdHMVlXWVdiTzRxaEdxNDIrWjhCWXRyTFd2bHVOUHBaQWVhRkZTMXZ1YlBnYmd4c3FjcG5BYXN6Qm92S2FGb0RROEJHdGpmVU9sNE5BRzJubVFWMDRmZUpndW12WDJmc3JRRVdaZ2hMMEpuVmRZa24zRE9aSWVSTjg2UnFQV0Ntc3ZHVnFFTVJud3hRQXh3UzhFTVlvM0l6bVkyK0JDY0xwNE1LaXV5dWhJbWFtbGJaRmNOb05sN3RwK1JIZDE4WmpRSVJLeVhkRlJoTjk4L2h5S3F3WFdObzdPMXdpYVhvSE4xMDhSRVpaV0VxNmdybklmanplZzhqZFJmMVhFTDRra1hhNWJCakt4b0thbGpCamVIbFZ4UTRHYXljcFc0bERPQUt0blR4SEF0T2Z6T3Rad0hBTTdzcVZYa1Y2eXU2a2FwMW5Ia1hLcVdGLzRYSHFqZW5OS3FCanBSM2wxY2gzRWpnMStFc2dkUWhzZEcwQjRGTTlzV0FWV3B1QXlpd1RQbGVaeHQ5VnlaVlMycVhmUmVXcVRBaWxwcjlBcG9XVGp4eW1pdDdOd1Y0SlRyaVp5T0E5QjBrN0hGZlVMb3VybUtZSFZuUlF2cUdMNUhNSGRxRmNSMnFXcG1jSzZlVHd4MmRpcFdydmlEaWxyK2ZLV3EzT1dSV2RIS3dBNGV1OHdqY2hiZVJ6RmlscWpqWk4zdWZDcGZrSjAvc2NWcG5ZazZMMFBJNzdseGRXQ1o4N1dpV203Qi9BR3F1UVNudWpHS3NCOENKbWlKcThxMXBLSVZXeXFPaVRLNjZyMThCTjhyNzQvQUU3MWZkQzN5UFMyTXhkT3BuRTF0bFZ4RDlKbVZPb2dnTityNFBqQVhWRlBhM0VnNWpWSkdGVlVHTm9sSDIwR1ZyVUI3Qk95U1dxNldxWVFkV1I5MnBjRk1ZTXdja2JTZ0NLQ3FENjdEaWlXdTFnOE1RQzlCeWZjRnFXMUwrakw3MTRxTkN1em5vU3h0MGRhMmd0V04xRzhGMEJLME5OMG51aW1lbFVGOWRJZEFmak80NFVUM0NqUUxvVWVMSEpGVE8zZ21wUnVJSU92d0JRQ2JxTmVvM3F0WjlpRjZ4VksxM0dSbG80enFpbXErQ0dkVGlSMXVSWThvcWdFMDJoWkJhNzlrWlhQTXF1eFJIS2xhMnNhWldONG1ScVpVajB2TENLaGtqS25xT1FITnVTWlZKb0t2QXFTMXdwRXF1dldEQzFCMnlwd3JDUHNSTUVQVlRPRE1MSk1EdjZxZUtYd2kySllWNVNxNHFLeXZnR3NIQ0xpdWoyalI1OVY4Z01xU0oyRkpaUlhFSFZSSGozc0ZQcmN0Nk9wcWxXMUdwYXRRZHQwR3Z3Zk02bjYzSW5zR1ZGaEpHYUJxZ3FxSVY2SXNYbGxaZ3lTUHE0UjNibnQzd2k1Y3YrY04yeXFRTFcxVDk1S1lWc1dXdEtrNGNCOVc1M1dRUWZsUVlSNldsNEhhSlpqdlZFMEQ1eXZxK1JLZ1pDczVxZEJFUDVzRDk0Y0F2UUxsU2dOYVNNQXRIeDg4QnVOUTQxemRGc1gzMHpLYmNzME1MRC9paGtwUXpsMHdpVHFLTFRmYkttQ215WUlDbkswSWJhaWVDNENHOWlTeUxRN2NJTUdRd2F1NlRLb3E2MEFwbDNXTjQwTFpwY2ExQ0tLSzlWUXl5SUVuOHcwRjhGNkNMMmg4bzNpeEd3QzdzN0VXekNPcW1jQXBZeFlENGpzQXpWUzBzbDJ0OThwQTd2cktvcGhDVlNvbmJZcGdINm12U24yNHBUQlY0c2R0VjNCdE1xNWs4MnkrSUFEdlVKMHVBbGtDVlR4SWFQbStVTnUvcWtWNEYxVHpIWENHclhJQXFJdEJLeXBxSzk5VnRBT1ZzNjRPNE9iWDdwSExWQ3BZSGNSbXd2TFI3VHZZQUtCQk41OExHVnpEdUZ6K2hRYldnbmNReUNaQWsrVmJzUFNvdWY5MzI2MWlaZ21mQ3B3UmJBdnFtU3FyaVUyUHdoamFvT3lZcXRJZWdWWFZpVHNteXRhNmJHeVNwWTNneVJycEl5QWVhV0REeHRwc1h3S3lhbE1ES05QN1lCWE1xRXNrVXNpMnVDOEZOQVB4QUtUVmZUMW82VnpNMEUwakYrMXJXY1V1SHZkeWc3dmdvRnBsWDhIcHZIcE1DT01SVVBIelprSW5zcWxGS05YL0VJTzUyRTBTeFN6T3dvYjJWbVJMVzVEMVhJVTByYmdNMUF6V2d5QzdmZThHN3hVQUsvdGFFQmF0N2x1cXR5UDdFbXNhSlFPajVGK21yblpmQ3VZQ2ZCVUFXd1NoeWQ2cE1ZL3ZBSEcxVXFPWXBiSS9neTVUMENNS20rVU8zZ0Z1Qzg1ZGdmRFZlZ3VQRGZJVHJJQkxzTHJjZ2RoM0NGZ0ZaamFLSjRJdjNGOEFORXF2dXhSMXRWS09nTG9DYTFqeGJvQkFrajZ2N2ovaWNGYkE3ZjRyZlJuUURMUlZpRzEzaTB2cUJRcllWcUJiQURaVDBacGlIb1N6dlFwb3BLSUZTM3NFMUhmQldsSFhkMEg3TG5BcnF2b3VnTXRsakhCZ1puaDNFb3ovQktqTE1MNFoyQXEwK2hFSnI5amFWVUJidk56Q0lVaXJvQzdBV21tRnc0bzVBSzNNdEI1VnlwWk1TRmdzMDVKeUdWd2x3QnFzRUdBQWEyWlUxQ2pVZXhYR3NFNHJLcmlpbEJ2RnpPS0tvM0F1QXJvRTZRRlFVM3U4WXBOWHdTNWsrMVRadDVVcndvdU40S2lVRXcrazNaV0RwMVJYSE5ScVhiMjFUczM5OTQ1eVpTZzNWblpGTlE5Q0YzWGVaeXI1RGdCWEtpd0NNYTJNeGVURFlYZ1AxRnNmOVFOS1pjMGs4MVJKazNyNkVRM3JDbUJWeUxMNzVFaloxcElWREhvRnRpT0FIb0IwQmRUVnlscUJzS0tLUytBZUJYSlZMWStDWEFTdUd2Ty9BdXE3R3VFakRmR0tnMW9LYTF6L2RtbWk5STlTVUdOaGwwQXRmdWxIQWF3b1lyblNrbU5YQVZ1R0VockVWWHZVRitBNUN0MlBxTk9qRGV0eW5hNENtZVVvbG1lWExONEFxN0M1U2oxMFE3eWpnbCt0NkNOeFNSSG1JNVgrQ3B3cmVZQjNRZmRxbmE0cTIxS2RCdWM0R29ac240OVpPT2lWaW53SHFLOVd6anZnZXdlRWgyQVU1K3Z0eFo5Q2Q5V3FraDQ5VjE4RTVvajZ2VnluMFJTdEF5R0lPNWVkWFJLZDVCMFZHVlhxMnlyM3hZcCs1VXQrQzRRSjRQMU4zMzlwUU1qUmVqajR2Yi9EY3I2clFjM08vMHJqbXRacGVZQ0JpQ0hmQ2VtUmJOaGJLL3BOVVBjM3dmS3k1ZjJEN09sTDMvdVBodmUvb1U0VDBGOGYrVk5NMnZ5b2l2MGpLK0tIUWZkSHErMGJuY3o0b3o3My8rWTZMYkt3MW8vNUI3ZU9mMVJsLzBkdTlCOXRuLzlidnJmL2ordjBoNnR0bjJ0cC9yLzQ4MTl5NC96djUzOTF1dnp6ZndEaWZ6NnBoVDFNUGdBQUFBQkpSVTVFcmtKZ2dnPT0pfS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmU7cGFkZGluZzowO21hcmdpbjozcHggLTNweDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojOTk5fS5jb2xvci1waWNrZXIgLmNwLWFkZC1jb2xvci1idXR0b24tY2xhc3M6ZGlzYWJsZWQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNvbG9yLXBpY2tlciAuY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTVweDtyaWdodDotNXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmZmY7Ym94LXNoYWRvdzoxcHggMXB4IDVweCAjMzMzfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3M6YmVmb3Jle2NvbnRlbnQ6IngiO3Bvc2l0aW9uOnJlbGF0aXZlO2JvdHRvbTozLjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTBweH0uY29sb3ItcGlja2VyIC5leWVkcm9wcGVyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7ZmlsbDojZmZmO21peC1ibGVuZC1tb2RlOmV4Y2x1c2lvbn1cbiddLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFhjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLmluamVjdG9yPWUsdGhpcy5jZnI9aSx0aGlzLmFwcFJlZj1yLHRoaXMudmNSZWY9byx0aGlzLmVsUmVmPXMsdGhpcy5fc2VydmljZT1hLHRoaXMuZGlhbG9nQ3JlYXRlZD0hMSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwV2lkdGg9IjIzMHB4Iix0aGlzLmNwSGVpZ2h0PSJhdXRvIix0aGlzLmNwVG9nZ2xlPSExLHRoaXMuY3BEaXNhYmxlZD0hMSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPVtdLHRoaXMuY3BGYWxsYmFja0NvbG9yPSIiLHRoaXMuY3BDb2xvck1vZGU9ImNvbG9yIix0aGlzLmNwQ215a0VuYWJsZWQ9ITEsdGhpcy5jcE91dHB1dEZvcm1hdD0iYXV0byIsdGhpcy5jcEFscGhhQ2hhbm5lbD0iZW5hYmxlZCIsdGhpcy5jcERpc2FibGVJbnB1dD0hMSx0aGlzLmNwRGlhbG9nRGlzcGxheT0icG9wdXAiLHRoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlPSEwLHRoaXMuY3BDbG9zZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXI9ITEsdGhpcy5jcFBvc2l0aW9uPSJhdXRvIix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9IjAlIix0aGlzLmNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c9ITEsdGhpcy5jcE9LQnV0dG9uPSExLHRoaXMuY3BPS0J1dHRvblRleHQ9Ik9LIix0aGlzLmNwT0tCdXR0b25DbGFzcz0iY3Atb2stYnV0dG9uLWNsYXNzIix0aGlzLmNwQ2FuY2VsQnV0dG9uPSExLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PSJDYW5jZWwiLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcz0iY3AtY2FuY2VsLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcEV5ZURyb3BwZXI9ITEsdGhpcy5jcFByZXNldExhYmVsPSJQcmVzZXQgY29sb3JzIix0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9ImNwLXByZXNldC1jb2xvcnMtY2xhc3MiLHRoaXMuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg9Nix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlPSJObyBjb2xvcnMgYWRkZWQiLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcz0icHJlc2V0LWVtcHR5LW1lc3NhZ2UiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj0hMSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PSJBZGQgY29sb3IiLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPSJjcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzIix0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcz0iY3AtcmVtb3ZlLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcElucHV0Q2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwVG9nZ2xlQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyQ2hhbmdlPW5ldyBHKCEwKSx0aGlzLmNwU2xpZGVyRHJhZ0VuZD1uZXcgRyghMCksdGhpcy5jcFNsaWRlckRyYWdTdGFydD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlck9wZW49bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDbG9zZT1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNhbmNlbD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlclNlbGVjdD1uZXcgRyghMCksdGhpcy5jb2xvclBpY2tlckNoYW5nZT1uZXcgRyghMSksdGhpcy5jcENteWtDb2xvckNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFByZXNldENvbG9yc0NoYW5nZT1uZXcgRyghMCl9aGFuZGxlQ2xpY2soKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVGb2N1cygpe3RoaXMuaW5wdXRGb2N1cygpfWhhbmRsZUlucHV0KGUpe3RoaXMuaW5wdXRDaGFuZ2UoZSl9bmdPbkRlc3Ryb3koKXtudWxsIT10aGlzLmNtcFJlZiYmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYmJnRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLHRoaXMuY21wUmVmLmRlc3Ryb3koKSx0aGlzLmNtcFJlZj1udWxsLHRoaXMuZGlhbG9nPW51bGwpfW5nT25DaGFuZ2VzKGUpe2UuY3BUb2dnbGUmJiF0aGlzLmNwRGlzYWJsZWQmJihlLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZT90aGlzLm9wZW5EaWFsb2coKTplLmNwVG9nZ2xlLmN1cnJlbnRWYWx1ZXx8dGhpcy5jbG9zZURpYWxvZygpKSxlLmNvbG9yUGlja2VyJiYodGhpcy5kaWFsb2cmJiF0aGlzLmlnbm9yZUNoYW5nZXMmJigiaW5saW5lIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmRpYWxvZy5zZXRJbml0aWFsQ29sb3IoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUpLHRoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLmNvbG9yUGlja2VyLmN1cnJlbnRWYWx1ZSwhMSksdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyJiYiaW5saW5lIiE9PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCkpLHRoaXMuaWdub3JlQ2hhbmdlcz0hMSksKGUuY3BQcmVzZXRMYWJlbHx8ZS5jcFByZXNldENvbG9ycykmJnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zZXRQcmVzZXRDb25maWcodGhpcy5jcFByZXNldExhYmVsLHRoaXMuY3BQcmVzZXRDb2xvcnMpfW9wZW5EaWFsb2coKXtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQpdGhpcy5kaWFsb2cmJnRoaXMuZGlhbG9nLm9wZW5EaWFsb2codGhpcy5jb2xvclBpY2tlcik7ZWxzZXtsZXQgZT10aGlzLnZjUmVmO2lmKHRoaXMuZGlhbG9nQ3JlYXRlZD0hMCx0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmPSExLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSl7bGV0IG89dGhpcy5pbmplY3Rvci5nZXQodGhpcy5hcHBSZWYuY29tcG9uZW50VHlwZXNbMF0sem4uTlVMTCk7byE9PXpuLk5VTEw/ZT1vLnZjUmVmfHxvLnZpZXdDb250YWluZXJSZWZ8fHRoaXMudmNSZWY6dGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMH1sZXQgaT10aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh1OWUpO2lmKHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWYpdGhpcy5jbXBSZWY9aS5jcmVhdGUodGhpcy5pbmplY3RvciksdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNtcFJlZi5ob3N0VmlldyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNtcFJlZi5ob3N0Vmlldy5yb290Tm9kZXNbMF0pO2Vsc2V7bGV0IHI9em4uY3JlYXRlKHtwcm92aWRlcnM6W10scGFyZW50OmUuaW5qZWN0b3J9KTt0aGlzLmNtcFJlZj1lLmNyZWF0ZUNvbXBvbmVudChpLDAscixbXSl9dGhpcy5jbXBSZWYuaW5zdGFuY2Uuc2V0dXBEaWFsb2codGhpcyx0aGlzLmVsUmVmLHRoaXMuY29sb3JQaWNrZXIsdGhpcy5jcFdpZHRoLHRoaXMuY3BIZWlnaHQsdGhpcy5jcERpYWxvZ0Rpc3BsYXksdGhpcy5jcEZhbGxiYWNrQ29sb3IsdGhpcy5jcENvbG9yTW9kZSx0aGlzLmNwQ215a0VuYWJsZWQsdGhpcy5jcEFscGhhQ2hhbm5lbCx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BEaXNhYmxlSW5wdXQsdGhpcy5jcElnbm9yZWRFbGVtZW50cyx0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyLHRoaXMuY3BQb3NpdGlvbix0aGlzLmNwUG9zaXRpb25PZmZzZXQsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93LHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzLHRoaXMuY3BQcmVzZXRDb2xvcnNDbGFzcyx0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2UsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzLHRoaXMuY3BPS0J1dHRvbix0aGlzLmNwT0tCdXR0b25DbGFzcyx0aGlzLmNwT0tCdXR0b25UZXh0LHRoaXMuY3BDYW5jZWxCdXR0b24sdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0LHRoaXMuY3BBZGRDb2xvckJ1dHRvbix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0LHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzLHRoaXMuY3BFeWVEcm9wcGVyLHRoaXMuZWxSZWYsdGhpcy5jcEV4dHJhVGVtcGxhdGUpLHRoaXMuZGlhbG9nPXRoaXMuY21wUmVmLmluc3RhbmNlLHRoaXMudmNSZWYhPT1lJiZ0aGlzLmNtcFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9fWNsb3NlRGlhbG9nKCl7dGhpcy5kaWFsb2cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuY2xvc2VEaWFsb2coKX1jbXlrQ2hhbmdlZChlKXt0aGlzLmNwQ215a0NvbG9yQ2hhbmdlLmVtaXQoZSl9c3RhdGVDaGFuZ2VkKGUpe3RoaXMuY3BUb2dnbGVDaGFuZ2UuZW1pdChlKSxlP3RoaXMuY29sb3JQaWNrZXJPcGVuLmVtaXQodGhpcy5jb2xvclBpY2tlcik6dGhpcy5jb2xvclBpY2tlckNsb3NlLmVtaXQodGhpcy5jb2xvclBpY2tlcil9Y29sb3JDaGFuZ2VkKGUsaT0hMCl7dGhpcy5pZ25vcmVDaGFuZ2VzPWksdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KGUpfWNvbG9yU2VsZWN0ZWQoZSl7dGhpcy5jb2xvclBpY2tlclNlbGVjdC5lbWl0KGUpfWNvbG9yQ2FuY2VsZWQoKXt0aGlzLmNvbG9yUGlja2VyQ2FuY2VsLmVtaXQoKX1pbnB1dEZvY3VzKCl7bGV0IGU9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIocj0+cj09PWUpOyF0aGlzLmNwRGlzYWJsZWQmJiFpLmxlbmd0aCYmKHR5cGVvZiBkb2N1bWVudDwidSImJmU9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50P3RoaXMub3BlbkRpYWxvZygpOnRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5zaG93P3RoaXMuY2xvc2VEaWFsb2coKTp0aGlzLm9wZW5EaWFsb2coKSl9aW5wdXRDaGFuZ2UoZSl7dGhpcy5kaWFsb2c/dGhpcy5kaWFsb2cuc2V0Q29sb3JGcm9tU3RyaW5nKGUudGFyZ2V0LnZhbHVlLCEwKToodGhpcy5jb2xvclBpY2tlcj1lLnRhcmdldC52YWx1ZSx0aGlzLmNvbG9yUGlja2VyQ2hhbmdlLmVtaXQodGhpcy5jb2xvclBpY2tlcikpfWlucHV0Q2hhbmdlZChlKXt0aGlzLmNwSW5wdXRDaGFuZ2UuZW1pdChlKX1zbGlkZXJDaGFuZ2VkKGUpe3RoaXMuY3BTbGlkZXJDaGFuZ2UuZW1pdChlKX1zbGlkZXJEcmFnRW5kKGUpe3RoaXMuY3BTbGlkZXJEcmFnRW5kLmVtaXQoZSl9c2xpZGVyRHJhZ1N0YXJ0KGUpe3RoaXMuY3BTbGlkZXJEcmFnU3RhcnQuZW1pdChlKX1wcmVzZXRDb2xvcnNDaGFuZ2VkKGUpe3RoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2UuZW1pdChlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyh6biksdyhFbyksdyhKYyksdyh5aSksdyhBZSksdyhKeikpfSxuLlx1MDI3NWRpcj1PZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjb2xvclBpY2tlciIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUNsaWNrKCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXMoKX0pKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlSW5wdXQobyl9KX0saW5wdXRzOntjb2xvclBpY2tlcjoiY29sb3JQaWNrZXIiLGNwV2lkdGg6ImNwV2lkdGgiLGNwSGVpZ2h0OiJjcEhlaWdodCIsY3BUb2dnbGU6ImNwVG9nZ2xlIixjcERpc2FibGVkOiJjcERpc2FibGVkIixjcElnbm9yZWRFbGVtZW50czoiY3BJZ25vcmVkRWxlbWVudHMiLGNwRmFsbGJhY2tDb2xvcjoiY3BGYWxsYmFja0NvbG9yIixjcENvbG9yTW9kZToiY3BDb2xvck1vZGUiLGNwQ215a0VuYWJsZWQ6ImNwQ215a0VuYWJsZWQiLGNwT3V0cHV0Rm9ybWF0OiJjcE91dHB1dEZvcm1hdCIsY3BBbHBoYUNoYW5uZWw6ImNwQWxwaGFDaGFubmVsIixjcERpc2FibGVJbnB1dDoiY3BEaXNhYmxlSW5wdXQiLGNwRGlhbG9nRGlzcGxheToiY3BEaWFsb2dEaXNwbGF5IixjcFNhdmVDbGlja091dHNpZGU6ImNwU2F2ZUNsaWNrT3V0c2lkZSIsY3BDbG9zZUNsaWNrT3V0c2lkZToiY3BDbG9zZUNsaWNrT3V0c2lkZSIsY3BVc2VSb290Vmlld0NvbnRhaW5lcjoiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsY3BQb3NpdGlvbjoiY3BQb3NpdGlvbiIsY3BQb3NpdGlvbk9mZnNldDoiY3BQb3NpdGlvbk9mZnNldCIsY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdzoiY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyIsY3BPS0J1dHRvbjoiY3BPS0J1dHRvbiIsY3BPS0J1dHRvblRleHQ6ImNwT0tCdXR0b25UZXh0IixjcE9LQnV0dG9uQ2xhc3M6ImNwT0tCdXR0b25DbGFzcyIsY3BDYW5jZWxCdXR0b246ImNwQ2FuY2VsQnV0dG9uIixjcENhbmNlbEJ1dHRvblRleHQ6ImNwQ2FuY2VsQnV0dG9uVGV4dCIsY3BDYW5jZWxCdXR0b25DbGFzczoiY3BDYW5jZWxCdXR0b25DbGFzcyIsY3BFeWVEcm9wcGVyOiJjcEV5ZURyb3BwZXIiLGNwUHJlc2V0TGFiZWw6ImNwUHJlc2V0TGFiZWwiLGNwUHJlc2V0Q29sb3JzOiJjcFByZXNldENvbG9ycyIsY3BQcmVzZXRDb2xvcnNDbGFzczoiY3BQcmVzZXRDb2xvcnNDbGFzcyIsY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGg6ImNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoIixjcFByZXNldEVtcHR5TWVzc2FnZToiY3BQcmVzZXRFbXB0eU1lc3NhZ2UiLGNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M6ImNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3MiLGNwQWRkQ29sb3JCdXR0b246ImNwQWRkQ29sb3JCdXR0b24iLGNwQWRkQ29sb3JCdXR0b25UZXh0OiJjcEFkZENvbG9yQnV0dG9uVGV4dCIsY3BBZGRDb2xvckJ1dHRvbkNsYXNzOiJjcEFkZENvbG9yQnV0dG9uQ2xhc3MiLGNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzczoiY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzIixjcEV4dHJhVGVtcGxhdGU6ImNwRXh0cmFUZW1wbGF0ZSJ9LG91dHB1dHM6e2NwSW5wdXRDaGFuZ2U6ImNwSW5wdXRDaGFuZ2UiLGNwVG9nZ2xlQ2hhbmdlOiJjcFRvZ2dsZUNoYW5nZSIsY3BTbGlkZXJDaGFuZ2U6ImNwU2xpZGVyQ2hhbmdlIixjcFNsaWRlckRyYWdFbmQ6ImNwU2xpZGVyRHJhZ0VuZCIsY3BTbGlkZXJEcmFnU3RhcnQ6ImNwU2xpZGVyRHJhZ1N0YXJ0Iixjb2xvclBpY2tlck9wZW46ImNvbG9yUGlja2VyT3BlbiIsY29sb3JQaWNrZXJDbG9zZToiY29sb3JQaWNrZXJDbG9zZSIsY29sb3JQaWNrZXJDYW5jZWw6ImNvbG9yUGlja2VyQ2FuY2VsIixjb2xvclBpY2tlclNlbGVjdDoiY29sb3JQaWNrZXJTZWxlY3QiLGNvbG9yUGlja2VyQ2hhbmdlOiJjb2xvclBpY2tlckNoYW5nZSIsY3BDbXlrQ29sb3JDaGFuZ2U6ImNwQ215a0NvbG9yQ2hhbmdlIixjcFByZXNldENvbG9yc0NoYW5nZToiY3BQcmVzZXRDb2xvcnNDaGFuZ2UifSxleHBvcnRBczpbIm5neENvbG9yUGlja2VyIl0sZmVhdHVyZXM6W3p0XX0pLG59KSgpLFFjZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7cHJvdmlkZXJzOltKel0saW1wb3J0czpba2VdfSksbn0pKCksaDllPVsiY29udGFpbmVyIl07ZnVuY3Rpb24gZjllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwibWF0LXNsaWRlciIsNCksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiByZShlKSxvZShNKCkuaGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKHIudmFsdWUpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oKTtiKCJkaXNhYmxlZCIsIWUuZW5hYmxlZCkoIm1pbiIsZS5taW4pKCJtYXgiLGUubWF4KSgic3RlcCIsMSkoInZhbHVlIixlLmxvd2VyVmFsdWUpfX1mdW5jdGlvbiBtOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIiw1LDYpLE4oMiwic3BhbiIsNykoMywic3BhbiIsOCksZyg0LCJzcGFuIiw5KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oKTtyZXR1cm4gb2Uoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLkxFRlQpKX0pLHYoKSxnKDUsInNwYW4iLDkpLFAoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpO3JldHVybiBvZShvLmhhbmRsZU1vdXNlRG93bihyLG8uUG9zaXRpb24uUklHSFQpKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMyksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLmxvd2VyVmFsdWUpKSgid2lkdGgiLGUuZ2V0VHJhY2tXaWR0aCgpKSx4KDEpLE90KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSksYXQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uTEVGVCkpLHgoMSksT3QoImxlZnQiLGUuZ2V0VGh1bWJQb3NpdGlvbihlLnVwcGVyVmFsdWUpKSxhdCgiYWN0aXZlIixlLmlzVGh1bWJBY3RpdmUoZS5Qb3NpdGlvbi5SSUdIVCkpfX12YXIgTGw9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5MRUZUPTFdPSJMRUZUIixuW24uUklHSFQ9Ml09IlJJR0hUIn0oTGx8fChMbD17fSkpLExsKSkoKSxLY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy50aWNrQ291bnQ9MjAsdGhpcy5lbmFibGVkPSEwLHRoaXMucmV0dXJuSW50ZWdlcnM9ITEsdGhpcy5yYW5nZVZhbHVlc0NoYW5nZWQ9bmV3IEcsdGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQ9bmV3IEcsdGhpcy5Qb3NpdGlvbj1MbCx0aGlzLmFjdGl2ZVRodW1iPUxsLk5PTkUsdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9MCx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IFRlfWdldFRodW1iUG9zaXRpb24oZSl7bGV0IGk9dGhpcy5nZXRDbGlwcGVkVmFsdWUoZSkscj10aGlzLm1heC10aGlzLm1pbjtyZXR1cm4gcjw9MD8iNTAlIjooaS10aGlzLm1pbikvcioxMDArIiUifWdldFRyYWNrV2lkdGgoKXtpZihudWxsPT09dGhpcy51cHBlclZhbHVlKXJldHVybiIwJSI7bGV0IGU9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIGU8PTA/IjAlIjoodGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy51cHBlclZhbHVlKS10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLmxvd2VyVmFsdWUpKS9lKjEwMCsiJSJ9Z2V0Q2xpcHBlZFZhbHVlKGUpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLHRoaXMubWluKSx0aGlzLm1heCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nT25Jbml0KCl7bGkoZG9jdW1lbnQsIm1vdXNlbW92ZSIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU1vdmUoZSl9KSxsaShkb2N1bWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5oYW5kbGVNb3VzZU91dChlKX0pfWhhbmRsZU1vdXNlRG93bihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlVGh1bWI9aSx0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYj02LWUub2Zmc2V0WH1jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpe2xldCBhLHtsZWZ0OmkscmlnaHQ6cn09dGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWUuY2xpZW50WC1pK3RoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iO2lmKG51bGwhPT10aGlzLnRpY2tDb3VudCYmdGhpcy50aWNrQ291bnQ+MCl7bGV0IGM9KHItaSkvdGhpcy50aWNrQ291bnQ7YT1NYXRoLnJvdW5kKHMvYykqYy8oci1pKX1lbHNlIGE9cy8oci1pKTtsZXQgbD10aGlzLmdldENsaXBwZWRWYWx1ZSh0aGlzLm1pbisodGhpcy5tYXgtdGhpcy5taW4pKmEpO3JldHVybiB0aGlzLnJldHVybkludGVnZXJzP01hdGgucm91bmQobCk6TnVtYmVyKGwudG9GaXhlZCgxMCkpfWhhbmRsZU1vdXNlTW92ZShlKXtpZih0aGlzLmFjdGl2ZVRodW1iPT09TGwuTk9ORXx8bnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm47bGV0IGk9dGhpcy5jYWxjdWxhdGVWYWx1ZUZyb21Nb3VzZUV2ZW50KGUpLHI9W3RoaXMubG93ZXJWYWx1ZSx0aGlzLnVwcGVyVmFsdWVdO3RoaXMuYWN0aXZlVGh1bWI9PT1MbC5MRUZUPyhpPnRoaXMudXBwZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuUklHSFQpLHI9W2ksdGhpcy51cHBlclZhbHVlXSk6KGk8dGhpcy5sb3dlclZhbHVlJiYodGhpcy5hY3RpdmVUaHVtYj1MbC5MRUZUKSxyPVt0aGlzLmxvd2VyVmFsdWUsaV0pLHRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMociwiU0xJREVSIiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX1tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhlLGkpe2xldFtyLG9dPWUuc29ydCgocyxhKT0+cy1hKTsodGhpcy5sb3dlclZhbHVlIT09cnx8dGhpcy51cHBlclZhbHVlIT09bykmJnRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkLmVtaXQoe2xvd2VyVmFsdWU6cix1cHBlclZhbHVlOm8sc291cmNlOml9KX1oYW5kbGVNb3VzZU91dChlKXt0aGlzLmFjdGl2ZVRodW1iIT09TGwuTk9ORSYmKHRoaXMuYWN0aXZlVGh1bWI9TGwuTk9ORSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX1oYW5kbGVTaW5nbGVTbGlkZXJDaGFuZ2UoZSl7dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6ZSxzb3VyY2U6IlNMSURFUiJ9KX1oYW5kbGVJbnB1dENoYW5nZShlLGkpe2xldCByPWUudGFyZ2V0LG89dGhpcy5nZXRDbGlwcGVkVmFsdWUoTnVtYmVyKHIudmFsdWUpKTtpc05hTihvKXx8KGk9PT1MbC5MRUZUP251bGw9PT10aGlzLnVwcGVyVmFsdWU/dGhpcy5zaW5nbGVWYWx1ZUNoYW5nZWQuZW1pdCh7dmFsdWU6byxzb3VyY2U6IlRFWFQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbbyx0aGlzLnVwcGVyVmFsdWVdLCJURVhUIik6IiI9PT1yLnZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOnRoaXMubG93ZXJWYWx1ZSxzb3VyY2U6IlRFWFRfREVMRVRFRCJ9KTp0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKFt0aGlzLmxvd2VyVmFsdWUsb10sIlRFWFQiKSl9aXNUaHVtYkFjdGl2ZShlKXtyZXR1cm4gdGhpcy5hY3RpdmVUaHVtYj09PWV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcobm4pKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1yYW5nZS1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJmx0KGg5ZSw1LEFlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7bWluOiJtaW4iLG1heDoibWF4Iixsb3dlclZhbHVlOiJsb3dlclZhbHVlIix1cHBlclZhbHVlOiJ1cHBlclZhbHVlIix0aWNrQ291bnQ6InRpY2tDb3VudCIsZW5hYmxlZDoiZW5hYmxlZCIscmV0dXJuSW50ZWdlcnM6InJldHVybkludGVnZXJzIn0sb3V0cHV0czp7cmFuZ2VWYWx1ZXNDaGFuZ2VkOiJyYW5nZVZhbHVlc0NoYW5nZWQiLHNpbmdsZVZhbHVlQ2hhbmdlZDoic2luZ2xlVmFsdWVDaGFuZ2VkIn0sZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbInR5cGUiLCJudW1iZXIiLDEsImxvd2VyLWlucHV0IiwzLCJkaXNhYmxlZCIsInZhbHVlIiwiY2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwxLCJ1cHBlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsiY2xhc3MiLCJzaW5nbGUtc2xpZGVyIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Iiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbInJhbmdlIiwiIl0sWyJjb2xvciIsInByaW1hcnkiLDEsInNpbmdsZS1zbGlkZXIiLDMsImRpc2FibGVkIiwibWluIiwibWF4Iiwic3RlcCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiY29udGFpbmVyIl0sWyJjb250YWluZXIiLCIiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsInRodW1iIiwzLCJtb3VzZWRvd24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImlucHV0IiwwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5MRUZUKX0pLHYoKSxnKDEsImlucHV0IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0Q2hhbmdlKG8saS5Qb3NpdGlvbi5SSUdIVCl9KSx2KCksRSgyLGY5ZSwxLDUsIm1hdC1zbGlkZXIiLDIpLEUoMyxtOWUsNiwxMiwibmctdGVtcGxhdGUiLG51bGwsMyxlbikpLDImZSl7bGV0IHI9c3QoNCk7YigiZGlzYWJsZWQiLCFpLmVuYWJsZWQpKCJ2YWx1ZSIsaS5sb3dlclZhbHVlKSx4KDEpLGIoImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLG51bGwhPT1pLnVwcGVyVmFsdWU/aS51cHBlclZhbHVlOiIiKSx4KDEpLGIoIm5nSWYiLG51bGw9PT1pLnVwcGVyVmFsdWUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1hlLFRkXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmlubGluZS1ncmlkO2dyaWQtZ2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1hcmVhczoibG93ZXItaW5wdXQgdXBwZXItaW5wdXQiICJzbGlkZXIgc2xpZGVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtmb250LXNpemU6MDttaW4td2lkdGg6MTAwcHg7cGFkZGluZzo2cHh9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9Lmxvd2VyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6bG93ZXItaW5wdXR9LnVwcGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6dXBwZXItaW5wdXQ7anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO3BhZGRpbmc6MHB4fS5zaW5nbGUtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItd3JhcHBlcnt0b3A6NXB4O2xlZnQ6MHB4O3JpZ2h0OjBweH0gIC5zaW5nbGUtc2xpZGVyLm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6MTJweH0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2xpZGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTJweDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjMpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjJweH0udGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMCwwLDAsLjI2KTtib3JkZXItcmFkaXVzOjEwMCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZTt3aWR0aDoxMnB4O3dpbGwtY2hhbmdlOnRyYW5zZm9ybX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JveC1zYWRob3c6MCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjMpfS50aHVtYltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOmdyYWJ9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS50aHVtYi5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpzY2FsZSgxLjIpfS5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZjU3YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2stZmlsbFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50aHVtYltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZWY2YzAwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdjllPVsicmVnZXhTdHJpbmdJbnB1dCJdO2Z1bmN0aW9uIHk5ZShuLHQpe2lmKDEmbiYmKEt0KDApLGcoMSwibGkiLDIyKSxEKDIpLHYoKSxadCgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3goMSksYigidGl0bGUiLGUubmFtZSkseCgxKSx5dChlLm5hbWUpfX1mdW5jdGlvbiBiOWUobix0KXtpZigxJm4mJihnKDAsImxpIiwyMykoMSwiZW0iKSxEKDIpLGooMywibnVtYmVyIiksdigpKCkpLDImbil7bGV0IGU9TSgpLiRpbXBsaWNpdDt4KDIpLHFlKCJhbmQgIixXKDMsMSxlLnJ1bnMubGVuZ3RoLTUpLCIgbW9yZSIpfX1mdW5jdGlvbiB4OWUobix0KXsxJm4mJihnKDAsImxpIiwyNCkoMSwiZW0iKSxEKDIsIk5vIHJ1bnMgYXJlIGluIHRoZSBncm91cCIpLHYoKSgpKX12YXIgQzllPWZ1bmN0aW9uKG4pe3JldHVybntib3JkZXJDb2xvcjpufX0sdzllPWZ1bmN0aW9uKG4pe3JldHVybntiYWNrZ3JvdW5kQ29sb3I6bn19O2Z1bmN0aW9uIE05ZShuLHQpe2lmKDEmbiYmKGcoMCwidWwiLDE2KSgxLCJsaSIpKDIsImxhYmVsIiksTigzLCJzcGFuIiwxNyksZyg0LCJjb2RlIiwxOCksRCg1KSx2KCkoKSxnKDYsInVsIiksRSg3LHk5ZSwzLDIsIm5nLWNvbnRhaW5lciIsMTkpLGooOCwic2xpY2UiKSxFKDksYjllLDQsMywibGkiLDIwKSxFKDEwLHg5ZSwzLDAsImxpIiwyMSksdigpKCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtiKCJuZ1N0eWxlIixIbigxMSxDOWUsZS5jb2xvcikpLHgoMyksYigibmdTdHlsZSIsSG4oMTMsdzllLGUuY29sb3IpKSx4KDEpLGIoInRpdGxlIixlLmdyb3VwSWQpLHgoMSkseXQoZS5ncm91cElkKSx4KDIpLGIoIm5nRm9yT2YiLF9OKDgsNyxlLnJ1bnMsMCw1KSkseCgyKSxiKCJuZ0lmIixlLnJ1bnMubGVuZ3RoPjUpLHgoMSksYigibmdJZiIsMD09PWUucnVucy5sZW5ndGgpfX1mdW5jdGlvbiBTOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTQpLEUoMSxNOWUsMTEsMTUsInVsIiwxNSksdigpKSwyJm4pe2xldCBlPU0oMik7eCgxKSxiKCJuZ0Zvck9mIixlLmNvbG9yUnVuUGFpckxpc3QpfX1mdW5jdGlvbiBFOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMjUpLEQoMSwiIFRoZXJlIGFyZSBubyBydW5zIG1hdGNoaW5nIHRoZSByZWdleCwgIiksZygyLCJjb2RlIiksRCgzKSx2KCksRCg0LCIuIFBsZWFzZSBjaGVjayBpZiB5b3VyIHJlZ2V4IHN0cmluZyBpcyBjb3JyZWN0LiAiKSx2KCkpLDImbil7bGV0IGU9TSgyKTt4KDMpLHFlKCIvIixlLnJlZ2V4U3RyaW5nLCIvIil9fWZ1bmN0aW9uIFQ5ZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2IiwxMCkoMSwiaDQiKSxEKDIsIkNvbG9yIGdyb3VwIHByZXZpZXciKSx2KCksZygzLCJkaXYiLDExKSxFKDQsUzllLDIsMSwiZGl2IiwxMiksRSg1LEU5ZSw1LDEsIm5nLXRlbXBsYXRlIixudWxsLDEzLGVuKSx2KCkoKSksMiZuKXtsZXQgZT1zdCg2KSxpPU0oKTt4KDQpLGIoIm5nSWYiLGkuY29sb3JSdW5QYWlyTGlzdC5sZW5ndGgpKCJuZ0lmRWxzZSIsZSl9fXZhciBaY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5ob3N0RWxSZWY9aSx0aGlzLm9uU2F2ZT1uZXcgRyx0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZT1uZXcgRyx0aGlzLnRpbWVPdXRJZD0wfXJlc2V0Rm9jdXMoKXt0aGlzLmhvc3RFbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx0aGlzLnJlZ2V4U3RyaW5nSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRW50ZXIoZSl7dGhpcy5vblNhdmVDbGljayhlKSx0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfW9uU2F2ZUNsaWNrKGUpe3RoaXMub25TYXZlLmVtaXQoZSl9ZmlsbEV4YW1wbGUoZSl7dGhpcy5yZWdleFN0cmluZz1lLHRoaXMucmVnZXhJbnB1dENoYW5nZShlKX1yZWdleElucHV0Q2hhbmdlKGUpe3RoaXMucmVnZXhJbnB1dE9uQ2hhbmdlLmVtaXQoZSl9aGFuZGxlRm9jdXNPdXQoKXtjbGVhclRpbWVvdXQodGhpcy50aW1lT3V0SWQpLHRoaXMudGltZU91dElkPXNldFRpbWVvdXQodGhpcy5yZXNldEZvY3VzLmJpbmQodGhpcyksMCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoTWQpLHcoQWUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJyZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZsdCh2OWUsNyksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yZWdleFN0cmluZ0lucHV0PXIuZmlyc3QpfX0saW5wdXRzOntyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLGNvbG9yUnVuUGFpckxpc3Q6ImNvbG9yUnVuUGFpckxpc3QifSxvdXRwdXRzOntvblNhdmU6Im9uU2F2ZSIscmVnZXhJbnB1dE9uQ2hhbmdlOiJyZWdleElucHV0T25DaGFuZ2UifSxkZWNsczozMCx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpDb2xvciBSdW5zIGJ5IFJlZ2V4IFF1ZXJ54pCfMTVlZDlmNmZkMmQ0OTA2YTQ4MDNmYzEyNTVkZTNjNWRiMmM1NjUzMOKQnzkwODg5ODUxMTM5NjAzMTI4MDg6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeWAsW1sxLCJyZWdleC1lZGl0LWRpYWxvZyIsMywiZm9jdXNvdXQiXSxbIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIm1hdElucHV0IiwiIiwiYXJpYS1sYWJlbCIsdCwiY2RrRm9jdXNJbml0aWFsIiwiIiwzLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJpbnB1dCJdLFsicmVnZXhTdHJpbmdJbnB1dCIsIiJdLFsxLCJleGFtcGxlLWRldGFpbHMiXSxbMywiY2xpY2siXSxbImNsYXNzIiwiZ3JvdXAtY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJtYXQtZGlhbG9nLWFjdGlvbnMiLCIiLCJhbGlnbiIsImVuZCJdLFsibWF0LWJ1dHRvbiIsIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwibWF0LWRpYWxvZy1jbG9zZSIsIiIsMywiY2xpY2siXSxbMSwiZ3JvdXAtY29udGFpbmVyIl0sWzEsImdyb3VwaW5nLXByZXZpZXciXSxbImNsYXNzIiwibWF0Y2gtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImVtcHR5IiwiIl0sWzEsIm1hdGNoLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJncm91cCIsMywibmdTdHlsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImdyb3VwIiwzLCJuZ1N0eWxlIl0sWzEsImNvbG9yLXN3YXRjaCIsMywibmdTdHlsZSJdLFsxLCJncm91cC1pZCIsMywidGl0bGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vcmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tbWF0Y2giLDQsIm5nSWYiXSxbMywidGl0bGUiXSxbMSwibW9yZSJdLFsxLCJuby1tYXRjaCJdLFsxLCJ3YXJuaW5nIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSl7bGV0IHI9SWUoKTtnKDAsImRpdiIsMCksUCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlRm9jdXNPdXQoKX0pLGcoMSwiaDEiLDEpLEQoMiwiQ29sb3IgcnVucyBieSByZWdleCIpLHYoKSxnKDMsIm1hdC1kaWFsb2ctY29udGVudCIpKDQsInAiKSxEKDUsIkVudGVyIGEgcmVnZXggd2l0aCBjYXB0dXJpbmcgZ3JvdXBzIHRvIG1hdGNoIGFnYWluc3QgcnVuIG5hbWVzOiIpLHYoKSxnKDYsIm1hdC1mb3JtLWZpZWxkIikoNywiaW5wdXQiLDIsMyksUCgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24ocyl7cmV0dXJuIGkub25FbnRlcihzLnRhcmdldC52YWx1ZSl9KSgiaW5wdXQiLGZ1bmN0aW9uKHMpe3JldHVybiBpLnJlZ2V4SW5wdXRDaGFuZ2Uocy50YXJnZXQudmFsdWUpfSksdigpKCkoKSxnKDksImRpdiIsNCkoMTAsInAiKSxEKDExLCcgRWFjaCBtYXRjaGluZyBydW4gd2lsbCBiZSBhc3NpZ25lZCBhIGNvbG9yIGJhc2VkIG9uIHRoZSAia2V5IiBmb3JtZWQgYnkgaXRzIG1hdGNoZXMgdG8gdGhlIGNhcHR1cmluZyBncm91cHMuICcpLE4oMTIsImJyIiksZygxMywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5maWxsRXhhbXBsZSgiKHRyYWlufGV2YWwpIil9KSxEKDE0LCIgVHJ5ICIpLGcoMTUsImNvZGUiKSxEKDE2LCIodHJhaW58ZXZhbCkiKSx2KCkoKSxEKDE3LCIgdG8gYXNzaWduIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygxOCwiY29kZSIpLEQoMTksInRyYWluIiksdigpLEQoMjAsIiB0byBvbmUgY29sb3IgYW5kIGFsbCBydW5zIGNvbnRhaW5pbmcgIiksZygyMSwiY29kZSIpLEQoMjIsImV2YWwiKSx2KCksRCgyMywiIHRvIGFub3RoZXIgY29sb3IuICIpLHYoKSgpLEUoMjQsVDllLDcsMiwiZGl2Iiw2KSxnKDI1LCJkaXYiLDcpKDI2LCJidXR0b24iLDgpLEQoMjcsIkNhbmNlbCIpLHYoKSxnKDI4LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JlKHIpO2xldCBzPXN0KDgpO3JldHVybiBvZShpLm9uU2F2ZUNsaWNrKHMudmFsdWUpKX0pLEQoMjksIiBTYXZlICIpLHYoKSgpKCl9MiZlJiYoeCg3KSx4cigidmFsdWUiLGkucmVnZXhTdHJpbmcpLHgoMTcpLGIoIm5nSWYiLGkucmVnZXhTdHJpbmcpKX0sZGVwZW5kZW5jaWVzOlt5bixYZSx3cCxEdSwkbixqQSxGSixHQSxXQSxRXyxCWSx2bF0sc3R5bGVzOlsiLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjb2xvcjojMTk3NmQyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM0MmE1ZjV9LmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6IzdiMWZhMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwfS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgaDRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MTBweH0uZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO21heC1oZWlnaHQ6NTB2aDtvdmVyZmxvdy15OmF1dG87cGFkZGluZzoyMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0ubWF0Y2gtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6Z3JpZDtmbGV4LXdyYXA6d3JhcDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDIsIG1pbm1heCg1MCUsIDFmcikpfS5jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaGFkb3c6MCAwIDJweCAjMDAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNXB4O3dpZHRoOjE1cHh9dWxbX25nY29udGVudC0lQ09NUCVde2xpc3Qtc3R5bGUtdHlwZTpub25lO3BhZGRpbmc6MH1tYXQtZm9ybS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDttYXJnaW46MDtwYWRkaW5nOjEwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmdyaWQ7Z2FwOjEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1heC1jb250ZW50IGF1dG87cGFkZGluZzo1cHggMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ncm91cC1pZFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45NWVtO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgdWxbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV0gICBsaVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubW9yZVtfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7bWFyZ2luLXRvcDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKY2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nUmVmPWksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQ9bmV3IFRlLHRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJD1iYSgoKT0+dW4odGhpcy5zdG9yZS5zZWxlY3QodUEpLnBpcGUoSHQoMSkpLHRoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckKSkucGlwZShWbigiIikpLHRoaXMuY29sb3JSdW5QYWlyTGlzdCQ9YmEoKCk9PnRoaXMuZ3JvdXBCeVJlZ2V4U3RyaW5nJC5waXBlKEFyKDUwMCksSGUobz0+e3RyeXtsZXQgcz1uZXcgUmVnRXhwKG8pO3JldHVybiBCb29sZWFuKHMpfWNhdGNoe3JldHVybiExfX0pLHNyKHRoaXMuYWxsUnVucyQsdGhpcy5ydW5JZFRvRWlkJCx0aGlzLnN0b3JlLnNlbGVjdChhYS5nZXRDb2xvclBhbGV0dGUpLHRoaXMuc3RvcmUuc2VsZWN0KG11KSksQigoW28scyxhLGwsY10pPT57bGV0IGQ9QUMoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzpvfSxzLGEpLHA9bmV3IE1hcCxoPVtdO2ZvcihsZXRbZixtXW9mIE9iamVjdC5lbnRyaWVzKGQubWF0Y2hlcykpe2xldCBDPXAuZ2V0KGYpO2lmKCFDKXtsZXQgXz1sLmNvbG9yc1twLnNpemUlbC5jb2xvcnMubGVuZ3RoXTtDPWM/Xy5kYXJrSGV4Ol8ubGlnaHRIZXgscC5zZXQoZixDKX1oLnB1c2goe2dyb3VwSWQ6Zixjb2xvcjpDLHJ1bnM6bX0pfXJldHVybiBofSkpKS5waXBlKFZuKFtdKSksdGhpcy5leHBlcmltZW50SWRzPXIuZXhwZXJpbWVudElkcyx0aGlzLnJ1bklkVG9FaWQkPXBuKHRoaXMuZXhwZXJpbWVudElkcy5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QoeFose2V4cGVyaW1lbnRJZDpvfSkucGlwZShCKHM9Pih7ZXhwZXJpbWVudElkOm8scnVuSWRzOnN9KSkpKSkucGlwZShCKG89PntsZXQgcz17fTtmb3IobGV0e3J1bklkczphLGV4cGVyaW1lbnRJZDpsfW9mIG8pZm9yKGxldCBjIG9mIGEpc1tjXT1sO3JldHVybiBzfSkpLHRoaXMuYWxsUnVucyQ9cG4odGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoQihvPT5vLmZsYXQoKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQoZSl9b25TYXZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobF8oe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTplci5SRUdFWCxyZWdleFN0cmluZzplfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSksdyhNZCksdyhLQykpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwiY29sb3JSdW5QYWlyTGlzdCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IiwwKSxQKCJvblNhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2F2ZShvKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSwyLGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixXKDIsNCxpLmNvbG9yUnVuUGFpckxpc3QkKSl9LGRlcGVuZGVuY2llczpbWmNlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBJOWUobix0KXsxJm4mJk4oMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBQOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJidXR0b24iLDEzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZShlKTtsZXQgcj1NKCk7cmV0dXJuIG9lKHIub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpyLkdyb3VwQnlLZXkuRVhQRVJJTUVOVH0pKX0pLGcoMSwic3BhbiIpLEUoMixJOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMywibGFiZWwiKSxEKDQsIkV4cGVyaW1lbnQiKSx2KCkoKX1pZigyJm4pe2xldCBlPU0oKTt6ZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCkseCgyKSxiKCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIFI5ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIE85ZShuLHQpezEmbiYmTigwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGs5ZShuLHQpe2lmKDEmbiYmKGcoMCwibGFiZWwiKSxEKDEpLHYoKSksMiZuKXtsZXQgZT1NKCk7eCgxKSx5dChlLnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24gRjllKG4sdCl7MSZuJiYoZygwLCJsYWJlbCIsMTUpLEQoMSwiKG5vbmUgc2V0KSIpLHYoKSl9dmFyICRjZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWUsdGhpcy5Hcm91cEJ5S2V5PWVyLHRoaXMub25Hcm91cEJ5Q2hhbmdlPW5ldyBHfW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihKY2Use21heEhlaWdodDoiOTV2aCIsbWF4V2lkdGg6IjgwdnciLGRhdGE6e2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfX0pfW9uR3JvdXBCeVJlZ2V4Q2xpY2soKXt0aGlzLnJlZ2V4U3RyaW5nP3RoaXMub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTplci5SRUdFWCxyZWdleFN0cmluZzp0aGlzLnJlZ2V4U3RyaW5nfSk6dGhpcy5vblJlZ2V4U3RyaW5nRWRpdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KE1jKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RXhwZXJpbWVudHNHcm91cEJ5OiJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoyMix2YXJzOjgsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ29sb3IgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJleHBlcmltZW50IiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsInJ1biIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJyZWdleCIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJkYXRhLXZhbHVlIiwicmVnZXgtZWRpdCIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiXSxbMSwibm9uZS1zZXQtc3RyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJidXR0b24iLDApLE4oMSwibWF0LWljb24iLDEpLHYoKSxnKDIsIm1hdC1tZW51IiwyLDMpKDQsImRpdiIsNCksRCg1LCJDb2xvciBydW5zIGJ5IiksdigpLEUoNixQOWUsNSwyLCJidXR0b24iLDUpLGcoNywiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OmkuR3JvdXBCeUtleS5SVU59KX0pLGcoOCwic3BhbiIpLEUoOSxSOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTAsImxhYmVsIiksRCgxMSwiUnVuIiksdigpKCksZygxMiwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSxnKDEzLCJzcGFuIiksRSgxNCxPOWUsMSwwLCJtYXQtaWNvbiIsNyksdigpLGcoMTUsImxhYmVsIiksRCgxNiwiUmVnZXgiKSx2KCkoKSxnKDE3LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVnZXhTdHJpbmdFZGl0KCl9KSxnKDE4LCJzcGFuIiksTigxOSwibWF0LWljb24iLDEwKSx2KCksRSgyMCxrOWUsMiwxLCJsYWJlbCIsMTEpLEUoMjEsRjllLDIsMCwibGFiZWwiLDEyKSx2KCkoKSksMiZlJiYoYigibWF0TWVudVRyaWdnZXJGb3IiLHN0KDMpKSx4KDYpLGIoIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSkseCgxKSx6ZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLHgoMyksemUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSx4KDIpLGIoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCkseCg2KSxiKCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSx4KDEpLGIoIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbWGUsJG4sWm4sSXUsRWMsUHVdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgYnV0dG9ue2Rpc3BsYXk6Z3JpZDtnYXA6MnB4IDEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjIwcHggYXV0b30gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoRlEpLnBpcGUoQihpPT5pLmhhcyhmaS5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KHdaKSx0aGlzLmdyb3VwQnlSZWdleFN0cmluZyQ9dGhpcy5zdG9yZS5zZWxlY3QodUEpfW9uR3JvdXBCeUNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGxfKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxncm91cEJ5OmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIl1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJyZWdleFN0cmluZyIsInNlbGVjdGVkR3JvdXBCeSIsInNob3dFeHBlcmltZW50c0dyb3VwQnkiLCJleHBlcmltZW50SWRzIiwib25Hcm91cEJ5Q2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uLWNvbXBvbmVudCIsMCksUCgib25Hcm91cEJ5Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2Uobyl9KSxqKDEsImFzeW5jIiksaigyLCJhc3luYyIpLGooMywiYXN5bmMiKSx2KCkpLDImZSYmYigicmVnZXhTdHJpbmciLFcoMSw0LGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJzZWxlY3RlZEdyb3VwQnkiLFcoMiw2LGkuc2VsZWN0ZWRHcm91cEJ5JCkpKCJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixXKDMsOCxpLnNob3dFeHBlcmltZW50c0dyb3VwQnkkKSkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcyl9LGRlcGVuZGVuY2llczpbJGNlLGZ0XSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCOWU9WyJmaWx0ZXIiXTtmdW5jdGlvbiBWOWUobix0KXsxJm4mJkFpKDApfWZ1bmN0aW9uIEg5ZShuLHQpezEmbiYmQWkoMCl9dmFyIFU5ZT1mdW5jdGlvbihuKXtyZXR1cm57aXRlbTpufX07ZnVuY3Rpb24gejllKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLEg5ZSwxLDAsIm5nLWNvbnRhaW5lciIsMTIpLFp0KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7TSgpO2xldCBpPXN0KDE0KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsSG4oMixVOWUsZSkpfX1mdW5jdGlvbiBqOWUobix0KXsxJm4mJihnKDAsImRpdiIsMTMpLE4oMSwibWF0LXNwaW5uZXIiLDE0KSx2KCkpfWZ1bmN0aW9uIEc5ZShuLHQpezEmbiYmKGcoMCwiZGl2IiwxNSksRCgxLCJObyBSdW5zIiksdigpKX1mdW5jdGlvbiBXOWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsMTUpKDEsInNwYW4iKSxEKDIsJ05vIHJ1bnMgbWF0Y2ggIicpLGcoMywiY29kZSIpLEQoNCksdigpLEQoNSwnIicpLHYoKSgpKSwyJm4pe2xldCBlPU0oKTt4KDQpLHl0KGUucmVnZXhGaWx0ZXIpfX12YXIgcTllPWZ1bmN0aW9uKCl7cmV0dXJuWzUsMTAsMjBdfTtmdW5jdGlvbiBZOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtcGFnaW5hdG9yIiwxNiksUCgicGFnZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5vblBhZ2luYXRpb25DaGFuZ2UuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1NKCk7YigicGFnZVNpemVPcHRpb25zIixscCg0LHE5ZSkpKCJwYWdlSW5kZXgiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlSW5kZXgpKCJwYWdlU2l6ZSIsZS5wYWdpbmF0aW9uT3B0aW9uLnBhZ2VTaXplKSgibGVuZ3RoIixlLmZpbHRlcmVkSXRlbXNMZW5ndGgpfX1mdW5jdGlvbiBYOWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJtYXQtY2hlY2tib3giLDI2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHJlKGUpLG9lKE0oMykuaGFuZGxlUGFnZVRvZ2dsZSgpKX0pLHYoKX1pZigyJm4pe2xldCBlPU0oMyk7YigiY2hlY2tlZCIsZS5hbGxQYWdlSXRlbXNTZWxlY3RlZCgpKSgiaW5kZXRlcm1pbmF0ZSIsIWUuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSYmZS5zb21lUGFnZUl0ZW1zU2VsZWN0ZWQoKSl9fXZhciB0dWU9ZnVuY3Rpb24obil7cmV0dXJue3R5cGU6bn19O2Z1bmN0aW9uIFE5ZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjcpLEQoMSwiRXhwZXJpbWVudCIpLHYoKSksMiZuKXtsZXQgZT1NKDMpO2IoIm1hdC1zb3J0LWhlYWRlciIsSG4oMSx0dWUsZS5Tb3J0VHlwZS5FWFBFUklNRU5UX05BTUUpKX19ZnVuY3Rpb24gSzllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyNyksRCgxLCJSdW4iKSx2KCkpLDImbil7bGV0IGU9TSgzKTtiKCJtYXQtc29ydC1oZWFkZXIiLEhuKDEsdHVlLGUuU29ydFR5cGUuUlVOX05BTUUpKX19ZnVuY3Rpb24gWjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiksTigxLCJydW5zLWdyb3VwLW1lbnUtYnV0dG9uIiwyOCksdigpKSwyJm4pe2xldCBlPU0oMyk7eCgxKSxiKCJleHBlcmltZW50SWRzIixlLmV4cGVyaW1lbnRJZHMpfX12YXIgbnVlPWZ1bmN0aW9uKG4pe3JldHVyblsiY29sdW1uIixuXX07ZnVuY3Rpb24gSjllKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwyMSksS3QoMSwyMiksRSgyLFg5ZSwxLDIsIm1hdC1jaGVja2JveCIsMjMpLEUoMyxROWUsMiwzLCJzcGFuIiwyNCksRSg0LEs5ZSwyLDMsInNwYW4iLDI0KSxFKDUsWjllLDIsMSwic3BhbiIsMjUpLFp0KCksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgyKTtiKCJuZ0NsYXNzIixIbig2LG51ZSwidGItY29sdW1uLSIrZSkpLHgoMSksYigibmdTd2l0Y2giLGUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5DSEVDS0JPWCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkVYUEVSSU1FTlRfTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9OQU1FKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX0NPTE9SKX19ZnVuY3Rpb24gJDllKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO0t0KDApLGcoMSwiZGl2IiwzNyksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZygyLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgyKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKG8scikpfSksdigpKCksWnQoKX1pZigyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMiksYigibWluIixlLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsZS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixlLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fWZ1bmN0aW9uIGVxZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtnKDAsImRpdiIsNDApLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoMSwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPXJlKGUpLiRpbXBsaWNpdCxzPU0oMykuJGltcGxpY2l0O3JldHVybiBvZShNKDIpLmhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChzLG8pKX0pLGcoMiwic3BhbiIpLEQoMyksdigpKCkoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgzKS4kaW1wbGljaXQ7eCgxKSxiKCJjaGVja2VkIixpLmZpbHRlci5maWx0ZXJWYWx1ZXMuaW5jbHVkZXMoZSkpLHgoMikseXQoZSl9fWZ1bmN0aW9uIHRxZShuLHQpe2lmKDEmbiYmKEt0KDApLEUoMSxlcWUsNCwyLCJkaXYiLDM5KSxadCgpKSwyJm4pe2xldCBlPU0oMikuJGltcGxpY2l0O3goMSksYigibmdGb3JPZiIsZS5maWx0ZXIucG9zc2libGVWYWx1ZXMpfX1mdW5jdGlvbiBucWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7S3QoMCksZygxLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxOKDIsIm1hdC1pY29uIiwzMyksdigpLGcoMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLGcoNiwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oKS4kaW1wbGljaXQ7cmV0dXJuIG9lKE0oMikuaGFuZGxlSHBhcmFtSW5jbHVkZVVuZGVmaW5lZFRvZ2dsZWQocikpfSksZyg3LCJzcGFuIiksRCg4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSx2KCkoKSgpLEUoOSwkOWUsMyw0LCJuZy1jb250YWluZXIiLDMxKSxFKDEwLHRxZSwyLDEsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0LHI9TSgyKTt4KDEpLGIoIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSx6ZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBocGFyYW0gIisoaS5kaXNwbGF5TmFtZXx8aS5uYW1lKSkseCg1KSxiKCJjaGVja2VkIixpLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkKSx4KDMpLGIoIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1yLkRvbWFpblR5cGUuSU5URVJWQUwpLHgoMSksYigibmdJZiIsaS5maWx0ZXIudHlwZT09PXIuRG9tYWluVHlwZS5ESVNDUkVURSl9fXZhciBpcWU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLG5hbWU6dH19O2Z1bmN0aW9uIHJxZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsMjkpKDEsInNwYW4iLDMwKSxEKDIpLHYoKSxFKDMsbnFlLDExLDUsIm5nLWNvbnRhaW5lciIsMzEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibWF0LXNvcnQtaGVhZGVyIix0bygzLGlxZSxpLlNvcnRUeXBlLkhQQVJBTSxlLm5hbWUpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUubmFtZSkseCgxKSxiKCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIG9xZShuLHQpe2lmKDEmbil7bGV0IGU9SWUoKTtLdCgwKSxnKDEsImJ1dHRvbiIsMzIpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLE4oMiwibWF0LWljb24iLDMzKSx2KCksZygzLCJtYXQtbWVudSIsbnVsbCwzNCkoNSwiZGl2IiwzNSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksZyg2LCJtYXQtY2hlY2tib3giLDM2KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmUoZSk7bGV0IHI9TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChyKSl9KSxnKDcsInNwYW4iKSxEKDgsIihzaG93IGVtcHR5IHZhbHVlKSIpLHYoKSgpKCksZyg5LCJkaXYiLDM3KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxnKDEwLCJ0Yi1yYW5nZS1pbnB1dCIsMzgpLFAoInJhbmdlVmFsdWVzQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmUoZSk7bGV0IG89TSgpLiRpbXBsaWNpdDtyZXR1cm4gb2UoTSgyKS5oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKG8scikpfSksdigpKCkoKSxadCgpfWlmKDImbil7bGV0IGU9c3QoNCksaT1NKCkuJGltcGxpY2l0O3goMSksYigibWF0TWVudVRyaWdnZXJGb3IiLGUpLHplKCJhcmlhLWxhYmVsIiwiRmlsdGVyIG1ldHJpYyAiKyhpLmRpc3BsYXlOYW1lfHxpLnRhZykpLHgoNSksYigiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCkseCg0KSxiKCJtaW4iLGkuZmlsdGVyLm1pblZhbHVlKSgibWF4IixpLmZpbHRlci5tYXhWYWx1ZSkoImxvd2VyVmFsdWUiLGkuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUpKCJ1cHBlclZhbHVlIixpLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlKX19dmFyIHNxZT1mdW5jdGlvbihuLHQpe3JldHVybnt0eXBlOm4sdGFnOnR9fTtmdW5jdGlvbiBhcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksRCgyKSx2KCksRSgzLG9xZSwxMSw3LCJuZy1jb250YWluZXIiLDMxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1NKDIpO2IoIm1hdC1zb3J0LWhlYWRlciIsdG8oMyxzcWUsaS5Tb3J0VHlwZS5NRVRSSUMsZS50YWcpKSx4KDIpLHl0KGUuZGlzcGxheU5hbWV8fGUudGFnKSx4KDEpLGIoIm5nSWYiLGUuZmlsdGVyKX19ZnVuY3Rpb24gbHFlKG4sdCl7aWYoMSZuKXtsZXQgZT1JZSgpO2coMCwiZGl2IiwxNykoMSwiZGl2IiwxOCksUCgibWF0U29ydENoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIHJlKGUpLG9lKE0oKS5oYW5kbGVTb3J0Q2hhbmdlKHIpKX0pLEUoMixKOWUsNiw4LCJzcGFuIiwxOSksRSgzLHJxZSw0LDYsInNwYW4iLDIwKSxFKDQsYXFlLDQsNiwic3BhbiIsMjApLHYoKSgpfWlmKDImbil7bGV0IGU9TSgpO3goMSksYigibWF0U29ydEFjdGl2ZSIsZS5zb3J0T3B0aW9uLmNvbHVtbikseCgxKSxiKCJuZ0Zvck9mIixlLmNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsZS5ocGFyYW1Db2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlIcGFyYW1Db2x1bW4pLHgoMSksYigibmdGb3JPZiIsZS5tZXRyaWNDb2x1bW5zKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlNZXRyaWNDb2x1bW4pfX1mdW5jdGlvbiBjcWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwibWF0LWNoZWNrYm94Iiw0NyksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uVG9nZ2xlLmVtaXQocikpfSkoImRibGNsaWNrIixmdW5jdGlvbigpe3JlKGUpO2xldCByPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uU2VsZWN0aW9uRGJsQ2xpY2suZW1pdChyKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPU0oMikuaXRlbTt4KDEpLGIoImNoZWNrZWQiLGUuc2VsZWN0ZWQpfX1mdW5jdGlvbiB1cWUobix0KXtpZigxJm4mJk4oMCwidGItZXhwZXJpbWVudC1hbGlhcyIsNDgpLDImbil7bGV0IGU9TSgyKS5pdGVtO2IoImFsaWFzIixlLmV4cGVyaW1lbnRBbGlhcykoInRpdGxlIixlLmV4cGVyaW1lbnROYW1lKX19ZnVuY3Rpb24gZHFlKG4sdCl7aWYoMSZuJiYoZygwLCJzcGFuIiwzMCksRCgxKSx2KCkpLDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSkseXQoZS5ydW4ubmFtZSl9fXZhciBwcWU9ZnVuY3Rpb24obil7cmV0dXJueyJydW4tY29sb3Itc3dhdGNoIjohMCwibm8tY29sb3IiOm59fTtmdW5jdGlvbiBocWUobix0KXtpZigxJm4pe2xldCBlPUllKCk7ZygwLCJzcGFuIikoMSwiYnV0dG9uIiw0OSksUCgiY29sb3JQaWNrZXJDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JlKGUpO2xldCBvPU0oMikuaXRlbTtyZXR1cm4gb2UoTSgpLm9uUnVuQ29sb3JDaGFuZ2UuZW1pdCh7cnVuSWQ6by5ydW4uaWQsbmV3Q29sb3I6cn0pKX0pLHYoKSgpfWlmKDImbil7bGV0IGU9TSgyKS5pdGVtO3goMSksT3QoImJhY2tncm91bmQiLGUucnVuQ29sb3IpLGIoIm5nQ2xhc3MiLEhuKDgscHFlLCFlLnJ1bkNvbG9yKSkoImNvbG9yUGlja2VyIixlLnJ1bkNvbG9yKSgiY3BEaWFsb2dEaXNwbGF5IiwicG9wdXAiKSgiY3BQb3NpdGlvbk9mZnNldCIsLTIwKSgiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsITApKCJjcE91dHB1dEZvcm1hdCIsImhleCIpfX1mdW5jdGlvbiBmcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDQ0KSxLdCgxLDIyKSxFKDIsY3FlLDIsMSwic3BhbiIsMjUpLEUoMyx1cWUsMSwyLCJ0Yi1leHBlcmltZW50LWFsaWFzIiw0NSksRSg0LGRxZSwyLDEsInNwYW4iLDQ2KSxFKDUsaHFlLDIsMTAsInNwYW4iLDI1KSxadCgpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oMik7YigibmdDbGFzcyIsSG4oNixudWUsInRiLWNvbHVtbi0iK2UpKSx4KDEpLGIoIm5nU3dpdGNoIixlKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLHgoMSksYigibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIG1xZShuLHQpe2lmKDEmbiYmKGcoMCwic3BhbiIsNTApLEQoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9TSgpLml0ZW07eCgxKSx5dChpLmhwYXJhbXMuZ2V0KGUubmFtZSkpfX1mdW5jdGlvbiBncWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDUwKSxEKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPU0oKS5pdGVtO3goMSkseXQoaS5tZXRyaWNzLmdldChlLnRhZykpfX1mdW5jdGlvbiBfcWUobix0KXtpZigxJm4mJihnKDAsImRpdiIsNDEpLEUoMSxmcWUsNiw4LCJzcGFuIiw0MiksRSgyLG1xZSwyLDEsInNwYW4iLDQzKSxFKDMsZ3FlLDIsMSwic3BhbiIsNDMpLHYoKSksMiZuKXtsZXQgZT10Lml0ZW0saT1NKCk7emUoImRhdGEtaWQiLGUucnVuLmlkKSx4KDEpLGIoIm5nRm9yT2YiLGkuY29sdW1ucykseCgxKSxiKCJuZ0Zvck9mIixpLmhwYXJhbUNvbHVtbnMpLHgoMSksYigibmdGb3JPZiIsaS5tZXRyaWNDb2x1bW5zKX19dmFyIHZxZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgb2d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9IlNob3cgcnVuczoifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PWhpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaXVlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmRhdGFTb3VyY2U9bmV3IGxPLHRoaXMuRG9tYWluVHlwZT1Lbix0aGlzLlJ1bnNUYWJsZUNvbHVtbj1Hcyx0aGlzLlNvcnRUeXBlPUN1LHRoaXMub25SZWdleEZpbHRlckNoYW5nZT1uZXcgRyx0aGlzLm9uU2VsZWN0aW9uVG9nZ2xlPW5ldyBHLHRoaXMub25TZWxlY3Rpb25EYmxDbGljaz1uZXcgRyx0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZT1uZXcgRyx0aGlzLm9uUGFnaW5hdGlvbkNoYW5nZT1uZXcgRyx0aGlzLm9uU29ydENoYW5nZT1uZXcgRyx0aGlzLm9uUnVuQ29sb3JDaGFuZ2U9bmV3IEcsdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZD1uZXcgRyx0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkPW5ldyBHLHRoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkPW5ldyBHfW5nT25DaGFuZ2VzKCl7dGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5wYWdlSXRlbXN9Z2V0SHBhcmFtQ29sdW1uSWQoZSl7cmV0dXJuYGg6JHtlLm5hbWV9YH1nZXRNZXRyaWNDb2x1bW5JZChlKXtyZXR1cm5gbToke2UudGFnfWB9Z2V0Q29sdW1uSWRzKCl7cmV0dXJuWy4uLnRoaXMuY29sdW1ucywuLi50aGlzLmhwYXJhbUNvbHVtbnMubWFwKHRoaXMuZ2V0SHBhcmFtQ29sdW1uSWQpLC4uLnRoaXMubWV0cmljQ29sdW1ucy5tYXAodGhpcy5nZXRNZXRyaWNDb2x1bW5JZCldfWFsbFBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5wYWdlSXRlbXMubGVuZ3RoKSYmdGhpcy5wYWdlSXRlbXMuZXZlcnkoZT0+ZS5zZWxlY3RlZCl9c29tZVBhZ2VJdGVtc1NlbGVjdGVkKCl7cmV0dXJuIHRoaXMucGFnZUl0ZW1zLnNvbWUoZT0+ZS5zZWxlY3RlZCl9aGFuZGxlUGFnZVRvZ2dsZSgpe3RoaXMub25QYWdlU2VsZWN0aW9uVG9nZ2xlLmVtaXQoe2l0ZW1zOnRoaXMucGFnZUl0ZW1zfSl9aGFuZGxlU29ydENoYW5nZShlKXtsZXQgaTtzd2l0Y2goZS5kaXJlY3Rpb24pe2Nhc2UiYXNjIjppPUVsLkFTQzticmVhaztjYXNlImRlc2MiOmk9RWwuREVTQzticmVhaztkZWZhdWx0Omk9RWwuVU5TRVR9dGhpcy5vblNvcnRDaGFuZ2UuZW1pdCh7a2V5OmUuYWN0aXZlLGRpcmVjdGlvbjppfSl9b25GaWx0ZXJLZXlVcChlKXt0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2UuZW1pdChlLnRhcmdldC52YWx1ZSl9dGFibGVUcmFja0J5KGUsaSl7cmV0dXJuIGkucnVuLmlkfWhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKGUpe2xldHtuYW1lOmksZmlsdGVyOnJ9PWU7aWYoIXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3IudHlwZT09PUtuLkRJU0NSRVRFP3RoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTppLGluY2x1ZGVVbmRlZmluZWQ6IXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJWYWx1ZXM6ci5maWx0ZXJWYWx1ZXN9KTp0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTpyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTpyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1JbnRlcnZhbENoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6cixpbmNsdWRlVW5kZWZpbmVkOm8uaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfWhhbmRsZUhwYXJhbURpc2NyZXRlQ2hhbmdlZChlLGkpe2xldHtuYW1lOnIsZmlsdGVyOm99PWU7aWYoIW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO2lmKG8udHlwZSE9PUtuLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGV4cGVjdGVkIGRpc2NyZXRlIGRvbWFpbiBmb3IgJHtyfWApO2xldCBzPW5ldyBTZXQoWy4uLm8uZmlsdGVyVmFsdWVzXSk7cy5oYXMoaSk/cy5kZWxldGUoaSk6cy5hZGQoaSksdGhpcy5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZC5lbWl0KHtocGFyYW1OYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOlsuLi5zXX0pfWhhbmRsZU1ldHJpY0luY2x1ZGVVbmRlZmluZWRDaGFuZ2VkKGUpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOiFlLmZpbHRlci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWV9KX1oYW5kbGVNZXRyaWNGaWx0ZXJDaGFuZ2VkKGUsaSl7aWYoIWUuZmlsdGVyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTt0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmUudGFnLGluY2x1ZGVVbmRlZmluZWQ6ZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmkubG93ZXJWYWx1ZSxmaWx0ZXJVcHBlclZhbHVlOmkudXBwZXJWYWx1ZX0pfXRyYWNrQnlIcGFyYW1Db2x1bW4oZSl7cmV0dXJuIGUubmFtZX10cmFja0J5TWV0cmljQ29sdW1uKGUpe3JldHVybiBlLnRhZ319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy10YWJsZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYobHQoQjllLDcsQWUpLGx0KHNPLDcpLGx0KHRTLDcpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmZpbHRlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5wYWdpbmF0b3I9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuc29ydD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZhdCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dFeHBlcmltZW50TmFtZToic2hvd0V4cGVyaW1lbnROYW1lIixjb2x1bW5zOiJjb2x1bW5zIixocGFyYW1Db2x1bW5zOiJocGFyYW1Db2x1bW5zIixtZXRyaWNDb2x1bW5zOiJtZXRyaWNDb2x1bW5zIixhbGxJdGVtc0xlbmd0aDoiYWxsSXRlbXNMZW5ndGgiLGZpbHRlcmVkSXRlbXNMZW5ndGg6ImZpbHRlcmVkSXRlbXNMZW5ndGgiLHVzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIscGFnZUl0ZW1zOiJwYWdlSXRlbXMiLGxvYWRpbmc6ImxvYWRpbmciLG51bVNlbGVjdGVkSXRlbXM6Im51bVNlbGVjdGVkSXRlbXMiLHNvcnRPcHRpb246InNvcnRPcHRpb24iLHBhZ2luYXRpb25PcHRpb246InBhZ2luYXRpb25PcHRpb24iLHJlZ2V4RmlsdGVyOiJyZWdleEZpbHRlciJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJDaGFuZ2UiLG9uU2VsZWN0aW9uVG9nZ2xlOiJvblNlbGVjdGlvblRvZ2dsZSIsb25TZWxlY3Rpb25EYmxDbGljazoib25TZWxlY3Rpb25EYmxDbGljayIsb25QYWdlU2VsZWN0aW9uVG9nZ2xlOiJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLG9uUGFnaW5hdGlvbkNoYW5nZToib25QYWdpbmF0aW9uQ2hhbmdlIixvblNvcnRDaGFuZ2U6Im9uU29ydENoYW5nZSIsb25SdW5Db2xvckNoYW5nZToib25SdW5Db2xvckNoYW5nZSIsb25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZDoib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLG9uTWV0cmljRmlsdGVyQ2hhbmdlZDoib25NZXRyaWNGaWx0ZXJDaGFuZ2VkIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpvZyx1c2VDbGFzczp2cWV9XSksenRdLGRlY2xzOjE1LHZhcnM6OCxjb25zdHM6W1sxLCJmaWx0ZXItcm93Il0sWyJwbGFjZWhvbGRlciIsIkZpbHRlciBydW5zIChyZWdleCkiLDEsInJ1bi1maWx0ZXIiLDMsInZhbHVlIiwia2V5dXAiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJyb2xlIiwidGFibGUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJyb3dzIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsiY2xhc3MiLCJsb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXJ1bnMiLDQsIm5nSWYiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiLDQsIm5nSWYiXSxbImhlYWRlciIsIiJdLFsicm93IiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJsb2FkaW5nIl0sWyJtb2RlIiwiaW5kZXRlcm1pbmF0ZSIsImRpYW1ldGVyIiwiMjgiXSxbMSwibm8tcnVucyJdLFsic2hvd0ZpcnN0TGFzdEJ1dHRvbnMiLCIiLDMsInBhZ2VTaXplT3B0aW9ucyIsInBhZ2VJbmRleCIsInBhZ2VTaXplIiwibGVuZ3RoIiwicGFnZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJoZWFkZXIiXSxbIm1hdFNvcnQiLCIiLCJyb2xlIiwicm93IiwzLCJtYXRTb3J0QWN0aXZlIiwibWF0U29ydENoYW5nZSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nU3dpdGNoIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIiw0LCJuZ1N3aXRjaENhc2UiXSxbMywibWF0LXNvcnQtaGVhZGVyIiw0LCJuZ1N3aXRjaENhc2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNoZWNrZWQiLCJpbmRldGVybWluYXRlIiwiY2hhbmdlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciJdLFszLCJleHBlcmltZW50SWRzIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJjb2x1bW4iLDMsIm1hdC1zb3J0LWhlYWRlciJdLFsxLCJuYW1lIl0sWzQsIm5nSWYiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsMywibWF0TWVudVRyaWdnZXJGb3IiLCJjbGljayJdLFsic3ZnSWNvbiIsImZpbHRlcl9hbHRfMjRweCJdLFsiZmlsdGVyTWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsImRpc2FibGVSaXBwbGUiLCIiLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbMywiY2hlY2tlZCIsImNoYW5nZSJdLFsiZGlzYWJsZVJpcHBsZSIsIiIsIm1hdC1tZW51LWl0ZW0iLCIiLDEsInJhbmdlLWlucHV0LWNvbnRhaW5lciIsMywiY2xpY2siXSxbMywibWluIiwibWF4IiwibG93ZXJWYWx1ZSIsInVwcGVyVmFsdWUiLCJyYW5nZVZhbHVlc0NoYW5nZWQiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJjbGFzcyIsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwzLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLDEsImZpbHRlci1tZW51LWNoZWNrYm94LXJvdyIsMywiY2xpY2siXSxbInJvbGUiLCJyb3ciXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwiY2xhc3MiLCJjb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNlbGwiLDMsIm5nQ2xhc3MiXSxbMywiYWxpYXMiLCJ0aXRsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsIm5hbWUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsidGl0bGUiLCJDbGljayB0byB0b2dnbGUgcnVuIHNlbGVjdGlvbiBvciBkb3VibGUgY2xpY2sgdG8gc2VsZWN0IG9ubHkgdGhpcyBydW4uIiwzLCJjaGVja2VkIiwiY2hhbmdlIiwiZGJsY2xpY2siXSxbMywiYWxpYXMiLCJ0aXRsZSJdLFszLCJuZ0NsYXNzIiwiY29sb3JQaWNrZXIiLCJjcERpYWxvZ0Rpc3BsYXkiLCJjcFBvc2l0aW9uT2Zmc2V0IiwiY3BVc2VSb290Vmlld0NvbnRhaW5lciIsImNwT3V0cHV0Rm9ybWF0IiwiY29sb3JQaWNrZXJDaGFuZ2UiXSxbInJvbGUiLCJjZWxsIiwxLCJjb2x1bW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihnKDAsImRpdiIsMCkoMSwidGItZmlsdGVyLWlucHV0IiwxKSxQKCJrZXl1cCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GaWx0ZXJLZXlVcChvKX0pLHYoKSgpLGcoMiwiZGl2IiwyKSgzLCJkaXYiLDMpLEUoNCxWOWUsMSwwLCJuZy1jb250YWluZXIiLDQpLGcoNSwiZGl2Iiw1KSxFKDYsejllLDIsNCwibmctY29udGFpbmVyIiw2KSx2KCkoKSxFKDcsajllLDIsMCwiZGl2Iiw3KSxFKDgsRzllLDIsMCwiZGl2Iiw4KSxFKDksVzllLDYsMSwiZGl2Iiw4KSx2KCksRSgxMCxZOWUsMSw1LCJtYXQtcGFnaW5hdG9yIiw5KSxFKDExLGxxZSw1LDYsIm5nLXRlbXBsYXRlIixudWxsLDEwLGVuKSxFKDEzLF9xZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDExLGVuKSksMiZlKXtsZXQgcj1zdCgxMik7eCgxKSx4cigidmFsdWUiLGkucmVnZXhGaWx0ZXIpLHgoMyksYigibmdUZW1wbGF0ZU91dGxldCIscikseCgyKSxiKCJuZ0Zvck9mIixpLnBhZ2VJdGVtcykoIm5nRm9yVHJhY2tCeSIsaS50YWJsZVRyYWNrQnkpLHgoMSksYigibmdJZiIsaS5sb2FkaW5nKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJjA9PT1pLmFsbEl0ZW1zTGVuZ3RoKSx4KDEpLGIoIm5nSWYiLCFpLmxvYWRpbmcmJmkuYWxsSXRlbXNMZW5ndGg+MCYmMD09PWkuZmlsdGVyZWRJdGVtc0xlbmd0aCkseCgxKSxiKCJuZ0lmIixpLnVzZVBhZ2luYXRpb24pfX0sZGVwZW5kZW5jaWVzOltYY2UsUG4seW4sWGUsTm8saHIsSXIsX3Ysb08sJG4sRWQsWm4sSXUsRWMsUHUsc08sdm8sdFMsSGNlLEtjZSxldWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LXNpemU6MTNweDtvdmVyZmxvdzpoaWRkZW59LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmxheW91dCBwYWludDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259LmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmctYm90dG9tOjEycHh9Ym9keS5kYXJrLW1vZGUgICAuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPWNvbHVtbmhlYWRlcl1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6dGFibGUtcm93O2hlaWdodDo0M3B4fVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MjRweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke3BhZGRpbmctcmlnaHQ6MjRweH1bcm9sZT1yb3dncm91cF1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtcm93LWdyb3VwfVtyb2xlPXJvd2dyb3VwXS5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dGFibGUtaGVhZGVyLWdyb3VwfS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMjRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm5vLXJ1bnNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnNlbGVjdC1hbGxbX25nY29udGVudC0lQ09NUCVdICAgdGhbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjEycHg7cGFkZGluZy10b3A6MTJweH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpsZWZ0fS5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZzowIDRweH0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4IDAgMjFweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRiLWZpbHRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjF9LnRiLWNvbHVtbi1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0sIC50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMHB4fS50Yi1jb2x1bW4tcnVuX2NvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ucnVuLWNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O291dGxpbmU6bm9uZX0ucnVuLWNvbG9yLXN3YXRjaC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiNjNmNhZDE7Ym9yZGVyLXdpZHRoOjJweH0ucmFuZ2UtaW5wdXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6YXV0b31bX25naG9zdC0lQ09NUCVdICAgICBtYXQtcGFnaW5hdG9yIG1hdC1mb3JtLWZpZWxke21hcmdpbjowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWx7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcn0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVsIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OjB9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWxhYmVse292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxicWU9WShJQyxuPT5uLnN0YXRlPT09RWUuTE9BRElORyk7ZnVuY3Rpb24gcnVlKG4sdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBDdS5FWFBFUklNRU5UX05BTUU6cmV0dXJuW24uZXhwZXJpbWVudEFsaWFzLG4ucnVuLm5hbWUsbi5ydW4uaWRdO2Nhc2UgQ3UuUlVOX05BTUU6cmV0dXJuW24ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgQ3UuSFBBUkFNOnJldHVybltuLmhwYXJhbXMuZ2V0KHQubmFtZSksbi5ydW4ubmFtZSxuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5pZF07Y2FzZSBDdS5NRVRSSUM6cmV0dXJuW24ubWV0cmljcy5nZXQodC50YWcpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkOiAke3R9YCl9fWZ1bmN0aW9uIG91ZShuLHQpe3JldHVybiB2b2lkIDA9PT10P24uaW5jbHVkZVVuZGVmaW5lZDpuLnR5cGU9PT1Lbi5ESVNDUkVURT9uLmZpbHRlclZhbHVlcy5pbmNsdWRlcyh0KTpuLnR5cGU9PT1Lbi5JTlRFUlZBTCYmbi5maWx0ZXJMb3dlclZhbHVlPD10JiZ0PD1uLmZpbHRlclVwcGVyVmFsdWV9dmFyIHN1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmxvYWRpbmckPW51bGwsdGhpcy5ocGFyYW1Db2x1bW5zJD1qdChbXSksdGhpcy5tZXRyaWNDb2x1bW5zJD1qdChbXSksdGhpcy51c2VGbGV4aWJsZUxheW91dD0hMSx0aGlzLnVzZVBhZ2luYXRpb249ITEsdGhpcy5jb2x1bW5zPVtHcy5SVU5fTkFNRV0sdGhpcy5zaG93SHBhcmFtc0FuZE1ldHJpY3M9ITEsdGhpcy5zb3J0T3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChJViksdGhpcy5wYWdpbmF0aW9uT3B0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChBViksdGhpcy5yZWdleEZpbHRlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSmYpLHRoaXMubmdVbnN1YnNjcmliZT1uZXcgVGV9aXNFeHBlcmltZW50TmFtZVZpc2libGUoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLnNvbWUoZT0+ZT09PUdzLkVYUEVSSU1FTlRfTkFNRSl9bmdPbkluaXQoKXtsZXQgaT1wbih0aGlzLmV4cGVyaW1lbnRJZHMubWFwKHM9PnRoaXMuZ2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQocykpKS5waXBlKEIocz0+W10uY29uY2F0KC4uLnMpKSk7dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkPWkucGlwZShvdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFFzKDEpKSx0aGlzLmFsbEl0ZW1zTGVuZ3RoJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShCKHM9PnMubGVuZ3RoKSk7bGV0IHI9dGhpcy5nZXRGaWx0ZXJlZEl0ZW1zJCh0aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxRcygxKSk7dGhpcy5maWx0ZXJlZEl0ZW1zTGVuZ3RoJD1yLnBpcGUoQihzPT5zLmxlbmd0aCkpLHRoaXMucGFnZUl0ZW1zJD10aGlzLnNvcnRlZEFuZFNsaWNlZEl0ZW1zJChyKSx0aGlzLm51bVNlbGVjdGVkSXRlbXMkPXRoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJC5waXBlKEIocz0+cy5yZWR1Y2UoKGEsbCk9PmErTnVtYmVyKGwuc2VsZWN0ZWQpLDApKSk7bGV0IG89dGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLnN0b3JlLnNlbGVjdChicWUse2V4cGVyaW1lbnRJZDpzfSkpO2lmKHRoaXMubG9hZGluZyQ9cG4obykucGlwZShCKHM9PnMuc29tZShhPT5hKSkpLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzKXtsZXQgcz10aGlzLnN0b3JlLnNlbGVjdChOaC5nZXRFeHBlcmltZW50c0hwYXJhbXNBbmRNZXRyaWNzU3BlY3Mse2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfSk7dGhpcy5ocGFyYW1Db2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0SHBhcmFtRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese2hwYXJhbXM6bH1dKT0+bC5tYXAoKHtuYW1lOmMsZGlzcGxheU5hbWU6dX0pPT57bGV0IHA9YS5nZXQoYyk7aWYoIXApdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBocGFyYW0gZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOnUsbmFtZTpjLGZpbHRlcjpwfX0pKSksdGhpcy5tZXRyaWNDb2x1bW5zJD1wbihbdGhpcy5zdG9yZS5zZWxlY3QoTmguZ2V0TWV0cmljRmlsdGVyTWFwLHRoaXMuZXhwZXJpbWVudElkcyksc10pLnBpcGUoQigoW2Ese21ldHJpY3M6bH1dKT0+bC5tYXAoKHt0YWc6YyxkaXNwbGF5TmFtZTp1fSk9PntsZXQgZD1hLmdldChjKTtpZighZCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGZpbHRlciBmb3IgJHtjfSBtdXN0IGV4aXN0IHdoZW4gdGhlIG1ldHJpYyBleGlzdHNgKTtyZXR1cm57ZGlzcGxheU5hbWU6dSx0YWc6YyxmaWx0ZXI6ZH19KSkpfXRoaXMuY29sdW1ucy5pbmNsdWRlcyhHcy5DSEVDS0JPWCkmJnRoaXMuc3RvcmUuc2VsZWN0KHJhKS5waXBlKG90KHRoaXMubmdVbnN1YnNjcmliZSksZGkoKGEsbCk9PnVzKGEsbCkpLHZpKCgpPT5pLnBpcGUoSGUoYT0+YS5sZW5ndGg+NTAwKSxIdCgxKSkpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHhfKHtsb2NhbGl6ZWRNZXNzYWdlOiJUaGUgbnVtYmVyIG9mIHJ1bnMgZXhjZWVkcyA1MDAuIE5ldyBydW5zIGFyZSB1bnNlbGVjdGVkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiJ9KSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKEFEKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9Z2V0RmlsdGVyZWRJdGVtcyQoZSl7cmV0dXJuIHBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KEpmKV0pLnBpcGUoQigoW2kscl0pPT57aWYoIXIpcmV0dXJuIGk7bGV0IG89dGhpcy5jb2x1bW5zLmluY2x1ZGVzKEdzLkVYUEVSSU1FTlRfTkFNRSk7cmV0dXJuIGkuZmlsdGVyKHM9Pm1BKHtydW5OYW1lOnMucnVuLm5hbWUsZXhwZXJpbWVudEFsaWFzOnMuZXhwZXJpbWVudEFsaWFzfSxyLG8pKX0pLHZpKGk9PnRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzP3BuKHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHRoaXMuc3RvcmUuc2VsZWN0KE5oLmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpKS5waXBlKEIoKFtyLG9dKT0+aS5maWx0ZXIoKHtocGFyYW1zOnMsbWV0cmljczphfSk9PlsuLi5yLmVudHJpZXMoKV0uZXZlcnkoKFtjLHVdKT0+b3VlKHUscy5nZXQoYykpKSYmWy4uLm8uZW50cmllcygpXS5ldmVyeSgoW2MsdV0pPT5vdWUodSxhLmdldChjKSkpKSkpOmp0KGkpKSl9c29ydGVkQW5kU2xpY2VkSXRlbXMkKGUpe2xldCBpPXBuKFtlLHRoaXMuc3RvcmUuc2VsZWN0KElWKV0pLnBpcGUoQigoW28sc10pPT5mdW5jdGlvbihuLHQpe2xldCBlPXQua2V5LGk9Wy4uLm5dO3JldHVybiBudWxsPT09ZXx8dC5kaXJlY3Rpb249PT1FbC5VTlNFVHx8aS5zb3J0KChyLG8pPT57bGV0IHM9cnVlKHIsZSksYT1ydWUobyxlKTtpZihzLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YXJpYW50IGVycm9yOiBhIGdpdmVuIHNvcnQgc2hvdWxkIHJlc3VsdCBpbiBzYW1lIG51bWJlciBvZiBpdGVtczogJHt0fWApO2ZvcihsZXQgbD0wO2w8cy5sZW5ndGg7bCsrKXtsZXQgYz1zW2xdLHU9YVtsXTtpZihjIT09dSl7aWYodm9pZCAwPT09Y3x8dm9pZCAwPT09dSlyZXR1cm4gdm9pZCAwPT09dT8tMToxO2lmKHR5cGVvZiBjIT10eXBlb2YgdSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb21wYXJlIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXM6ICR7dHlwZW9mIGN9IHZzLiAke3R5cGVvZiB1fWApO3JldHVybiBjPHU9PSh0LmRpcmVjdGlvbj09PUVsLkFTQyk/LTE6MX19cmV0dXJuIDB9KSxpfShvLHMpKSk7cmV0dXJuIHBuKFtpLHRoaXMuc3RvcmUuc2VsZWN0KEFWKV0pLnBpcGUoQigoW28sc10pPT57aWYoIXRoaXMudXNlUGFnaW5hdGlvbilyZXR1cm4gby5zbGljZSgpO2xldHtwYWdlU2l6ZTphLHBhZ2VJbmRleDpsfT1zO3JldHVybiBvLnNsaWNlKGwqYSwobCsxKSphKX0pLFZuKFtdKSl9Z2V0UnVuVGFibGVJdGVtc0ZvckV4cGVyaW1lbnQoZSl7cmV0dXJuIHBuKFt0aGlzLnN0b3JlLnNlbGVjdCh3dSx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChORCx7ZXhwZXJpbWVudElkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChlbSksdGhpcy5zdG9yZS5zZWxlY3Qodl8pLHRoaXMuc3RvcmUuc2VsZWN0KGh1KV0pLnBpcGUoQigoW2kscixvLHMsYV0pPT5pLm1hcChsPT57bGV0IGM9bmV3IE1hcDsobC5ocGFyYW1zfHxbXSkuZm9yRWFjaChkPT57Yy5zZXQoZC5uYW1lLGQudmFsdWUpfSk7bGV0IHU9bmV3IE1hcDtyZXR1cm4obC5tZXRyaWNzfHxbXSkuZm9yRWFjaChkPT57dS5zZXQoZC50YWcsZC52YWx1ZSl9KSx7cnVuOmwsZXhwZXJpbWVudE5hbWU6cj8ubmFtZXx8IiIsZXhwZXJpbWVudEFsaWFzOmFbZV0sc2VsZWN0ZWQ6Qm9vbGVhbihvJiZvLmdldChsLmlkKSkscnVuQ29sb3I6c1tsLmlkXSxocGFyYW1zOmMsbWV0cmljczp1fX0pKSl9b25SdW5TZWxlY3Rpb25Ub2dnbGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3RCh7cnVuSWQ6ZS5ydW4uaWR9KSl9b25SdW5TZWxlY3Rpb25EYmxDbGljayhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKE1EKHtydW5JZDplLnJ1bi5pZH0pKX1vblBhZ2VTZWxlY3Rpb25Ub2dnbGUoZSl7bGV0e2l0ZW1zOml9PWUscj1pLm1hcCgoe3J1bjpvfSk9Pm8uaWQpO3RoaXMuc3RvcmUuZGlzcGF0Y2goU0Qoe3J1bklkczpyfSkpfW9uUGFnaW5hdGlvbkNoYW5nZShlKXtpZighdGhpcy51c2VQYWdpbmF0aW9uKXRocm93IG5ldyBFcnJvcigiUGFnaW5hdGlvbiBldmVudHMgY2Fubm90IGJlIGRpc3BhdGNoZWQgd2hlbiBwYWdpbmF0aW9uIGlzIGRpc2FibGVkIik7bGV0e3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChFRCh7cGFnZUluZGV4OmkscGFnZVNpemU6cn0pKX1vblNvcnRDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChURChlKSl9b25SZWdleEZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGJDKHtyZWdleFN0cmluZzplfSkpfW9uUnVuQ29sb3JDaGFuZ2Uoe3J1bklkOmUsbmV3Q29sb3I6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2goREQoe3J1bklkOmUsbmV3Q29sb3I6aX0pKX1vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChlKXtsZXR7aHBhcmFtTmFtZTppLGZpbHRlclZhbHVlczpyLGluY2x1ZGVVbmRlZmluZWQ6b309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNEaXNjcmV0ZUhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99KSl9b25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNJbnRlcnZhbEhwYXJhbUZpbHRlckNoYW5nZWQoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGhwYXJhbU5hbWU6aSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvLGluY2x1ZGVVbmRlZmluZWQ6c30pKX1vbk1ldHJpY0ZpbHRlckNoYW5nZWQoZSl7bGV0e25hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKFFmLmhwYXJhbXNNZXRyaWNGaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxtZXRyaWNUYWc6aSxpbmNsdWRlVW5kZWZpbmVkOnIsZmlsdGVyTG93ZXJWYWx1ZTpvLGZpbHRlclVwcGVyVmFsdWU6c30pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikodyhQZSkpfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtdGFibGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmF0KCJmbGV4LWxheW91dCIsaS51c2VGbGV4aWJsZUxheW91dCl9LGlucHV0czp7dXNlRmxleGlibGVMYXlvdXQ6InVzZUZsZXhpYmxlTGF5b3V0Iix1c2VQYWdpbmF0aW9uOiJ1c2VQYWdpbmF0aW9uIixjb2x1bW5zOiJjb2x1bW5zIixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93SHBhcmFtc0FuZE1ldHJpY3M6InNob3dIcGFyYW1zQW5kTWV0cmljcyJ9LGRlY2xzOjExLHZhcnM6MzUsY29uc3RzOltbMywiZXhwZXJpbWVudElkcyIsInVzZUZsZXhpYmxlTGF5b3V0IiwibnVtU2VsZWN0ZWRJdGVtcyIsImNvbHVtbnMiLCJocGFyYW1Db2x1bW5zIiwibWV0cmljQ29sdW1ucyIsInNob3dFeHBlcmltZW50TmFtZSIsInBhZ2VJdGVtcyIsImZpbHRlcmVkSXRlbXNMZW5ndGgiLCJhbGxJdGVtc0xlbmd0aCIsImxvYWRpbmciLCJwYWdpbmF0aW9uT3B0aW9uIiwicmVnZXhGaWx0ZXIiLCJzb3J0T3B0aW9uIiwidXNlUGFnaW5hdGlvbiIsIm9uU2VsZWN0aW9uVG9nZ2xlIiwib25TZWxlY3Rpb25EYmxDbGljayIsIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsIm9uUGFnaW5hdGlvbkNoYW5nZSIsIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLCJvblNvcnRDaGFuZ2UiLCJvblJ1bkNvbG9yQ2hhbmdlIiwib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLCJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwicnVucy10YWJsZS1jb21wb25lbnQiLDApLFAoIm9uU2VsZWN0aW9uVG9nZ2xlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvblRvZ2dsZShvKX0pKCJvblNlbGVjdGlvbkRibENsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJ1blNlbGVjdGlvbkRibENsaWNrKG8pfSkoIm9uUGFnZVNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdlU2VsZWN0aW9uVG9nZ2xlKG8pfSkoIm9uUGFnaW5hdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25QYWdpbmF0aW9uQ2hhbmdlKG8pfSkoIm9uUmVnZXhGaWx0ZXJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhGaWx0ZXJDaGFuZ2Uobyl9KSgib25Tb3J0Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNvcnRDaGFuZ2Uobyl9KSgib25SdW5Db2xvckNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5Db2xvckNoYW5nZShvKX0pKCJvbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQobyl9KSgib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkKG8pfSkoIm9uTWV0cmljRmlsdGVyQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25NZXRyaWNGaWx0ZXJDaGFuZ2VkKG8pfSksaigxLCJhc3luYyIpLGooMiwiYXN5bmMiKSxqKDMsImFzeW5jIiksaig0LCJhc3luYyIpLGooNSwiYXN5bmMiKSxqKDYsImFzeW5jIiksaig3LCJhc3luYyIpLGooOCwiYXN5bmMiKSxqKDksImFzeW5jIiksaigxMCwiYXN5bmMiKSx2KCkpLDImZSYmYigiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgidXNlRmxleGlibGVMYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpKCJudW1TZWxlY3RlZEl0ZW1zIixXKDEsMTUsaS5udW1TZWxlY3RlZEl0ZW1zJCkpKCJjb2x1bW5zIixpLmNvbHVtbnMpKCJocGFyYW1Db2x1bW5zIixXKDIsMTcsaS5ocGFyYW1Db2x1bW5zJCkpKCJtZXRyaWNDb2x1bW5zIixXKDMsMTksaS5tZXRyaWNDb2x1bW5zJCkpKCJzaG93RXhwZXJpbWVudE5hbWUiLGkuaXNFeHBlcmltZW50TmFtZVZpc2libGUoKSkoInBhZ2VJdGVtcyIsVyg0LDIxLGkucGFnZUl0ZW1zJCkpKCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIixXKDUsMjMsaS5maWx0ZXJlZEl0ZW1zTGVuZ3RoJCkpKCJhbGxJdGVtc0xlbmd0aCIsVyg2LDI1LGkuYWxsSXRlbXNMZW5ndGgkKSkoImxvYWRpbmciLFcoNywyNyxpLmxvYWRpbmckKSkoInBhZ2luYXRpb25PcHRpb24iLFcoOCwyOSxpLnBhZ2luYXRpb25PcHRpb24kKSkoInJlZ2V4RmlsdGVyIixXKDksMzEsaS5yZWdleEZpbHRlciQpKSgic29ydE9wdGlvbiIsVygxMCwzMyxpLnNvcnRPcHRpb24kKSkoInVzZVBhZ2luYXRpb24iLGkudXNlUGFnaW5hdGlvbil9LGRlcGVuZGVuY2llczpbaXVlLGZ0XSxzdHlsZXM6WyIuZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIH1cblxuICAgICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgICA+IHJ1bnMtdGFibGUtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1rKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtc2VsZWN0b3ItY29tcG9uZW50Il1dLGlucHV0czp7ZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MiLGNvbHVtbnM6ImNvbHVtbnMifSxkZWNsczoxLHZhcnM6NCxjb25zdHM6W1szLCJ1c2VGbGV4aWJsZUxheW91dCIsImNvbHVtbnMiLCJleHBlcmltZW50SWRzIiwic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInJ1bnMtdGFibGUiLDApLDImZSYmYigidXNlRmxleGlibGVMYXlvdXQiLCEwKSgiY29sdW1ucyIsaS5jb2x1bW5zKSgiZXhwZXJpbWVudElkcyIsaS5leHBlcmltZW50SWRzKSgic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixpLnNob3dIcGFyYW1zQW5kTWV0cmljcyl9LGRlcGVuZGVuY2llczpbc3VlXSxzdHlsZXM6WyJydW5zLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGx1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmV4cGVyaW1lbnRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+aT8/W10pKSx0aGlzLmNvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KCRvKS5waXBlKEIoaT0+W0dzLkNIRUNLQk9YLEdzLlJVTl9OQU1FLGkmJmkubGVuZ3RoPjE/R3MuRVhQRVJJTUVOVF9OQU1FOm51bGwsR3MuUlVOX0NPTE9SXS5maWx0ZXIocj0+bnVsbCE9PXIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIikpLDImZSYmYigiZXhwZXJpbWVudElkcyIsVygxLDMsaS5leHBlcmltZW50SWRzJCkpKCJjb2x1bW5zIixXKDIsNSxpLmNvbHVtbnMkKSkoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W2F1ZSxmdF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksY3VlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzJD10aGlzLnN0b3JlLnNlbGVjdChkSyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKHcoUGUpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWRhc2hib2FyZCJdXSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sic2lkZWJhciIsIiIsMywic2hvd0hwYXJhbXNBbmRNZXRyaWNzIl0sWyJtYWluIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoZygwLCJ0Yi1kYXNoYm9hcmQtbGF5b3V0IiksTigxLCJydW5zLXNlbGVjdG9yIiwwKSxqKDIsImFzeW5jIiksTigzLCJtZXRyaWNzLW1haW4tdmlldyIsMSksdigpKSwyJmUmJih4KDEpLGIoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsVygyLDEsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MkKSkpfSxkZXBlbmRlbmNpZXM6W0FuZSxUY2UsbHVlLGZ0XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7b3ZlcmZsb3c6aGlkZGVufS5ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjQ1LDE1NywuODUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmViM2I7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwfXRiLWRhc2hib2FyZC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxO292ZXJmbG93OmhpZGRlbn1uYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO3dpZHRoOjM0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2JvcmRlci1yaWdodC1jb2xvcjojNTU1fW1ldHJpY3MtbWFpbi12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCR6PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaSxSaV19KSxufSkoKSxkTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2VdfSksbn0pKCksdXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHt9KSxufSkoKSxreT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsdXVlXX0pLG59KSgpLHBPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxyTyxTaV19KSxufSkoKSxoTz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsaWhdfSksbn0pKCksZHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltRY2Usa2Usa3kscE8sZG0sUmksJHAsSF8sQXUsU2ksZWgsQmNlLGt1LFVjZSxxY2UsaE8sekFdfSksbn0pKCkscHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkdWVdfSksbn0pKCksRnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxTaV19KSxufSkoKSxodWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPVZzLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihnKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksdigpKSwyJmUmJmIoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W25PXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxmdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2ZPLGtlLHJoLEZ5XX0pLG59KSgpO2JiKGlPLFt5bixYZSxfbSxtdixodWVdLFtdKTt2YXIgTnk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlXX0pLG59KSgpLG1PPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxreV19KSxufSkoKSxMeT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ldfSksbn0pKCksbXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxmdWUsUmksU2ksa3UsbU8sTnksTHldfSksbn0pKCksZ089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLGd1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsZ08sUmksU2ksa3UsaWgsbU8sTnksTHldfSksbn0pKCksX089KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFNpXX0pLG59KSgpLF91ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsU2ksX09dfSksbn0pKCksdnVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxWbyxSaSxTaSxBdSxlaF19KSxufSkoKSx5dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLFZvLHZ1ZSxyaF19KSxufSkoKSxidWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLGdPLHJJLFJpLEhfLEF1LElsLEdEXX0pLG59KSgpLHh1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZk8sa2UsYnVlLF91ZSxreSxGeSx5dWUsUmksU2ksZWgsa3UscmgsTnksTHldfSksbn0pKCksQ3VlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxndWUseHVlLG11ZSxGeV19KSxufSkoKSx3dWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W2tlLElsXX0pLG59KSgpLHZPPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSx3dWUsUmksTlAsJHAsU2ksSWwsaWgsZF8saE9dfSksbn0pKCksTXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxfTywkcCxmSSxTaSxSaV19KSxufSkoKSxTdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W0N1ZSxrZSxkTyxwTyxyTyxSaSxOUCxTaSxBdSxrdSx2TyxNdWUsQ2RdfSksbn0pKCksRXVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltrZSxkTywkeixTdWUsU2ksdk8scHVlXX0pLG59KSgpO2Z1bmN0aW9uIEVxZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpkdixhbGVydEZyb21BY3Rpb246bj0+e2xldHt3YXNQaW5uZWQ6dCxjYW5DcmVhdGVOZXdQaW5zOmV9PW47cmV0dXJuIHR8fGU/bnVsbDp7bG9jYWxpemVkTWVzc2FnZToiTWF4IHBpbiBsaW1pdCBleGNlZWRlZC4gUmVtb3ZlIGV4aXN0aW5nIHBpbnMgYmVmb3JlIGFkZGluZyBtb3JlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQyNDIifX19XX1mdW5jdGlvbiBUcWUoKXtyZXR1cm4gWSh2ZCxuPT4oe3NjYWxhclNtb290aGluZzpufSkpfWZ1bmN0aW9uIERxZSgpe3JldHVybiBZKG1fLG49Pih7aWdub3JlT3V0bGllcnM6bn0pKX1mdW5jdGlvbiBBcWUoKXtyZXR1cm4gWShmXyxuPT4oe3Rvb2x0aXBTb3J0OlN0cmluZyhuKX0pKX1mdW5jdGlvbiBJcWUoKXtyZXR1cm4gWShyQSxuPT4oe3RpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQ6bn0pKX1mdW5jdGlvbiBQcWUoKXtyZXR1cm4gWShoXyxuPT4oe3RpbWVTZXJpZXNDYXJkTWluV2lkdGg6bn0pKX1mdW5jdGlvbiBScWUoKXtyZXR1cm4gWShUQyxuPT4oe3N0ZXBTZWxlY3RvckVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBPcWUoKXtyZXR1cm4gWShIcCxuPT4oe3JhbmdlU2VsZWN0aW9uRW5hYmxlZDpufSkpfWZ1bmN0aW9uIGtxZSgpe3JldHVybiBZKFZwLG49Pih7bGlua2VkVGltZUVuYWJsZWQ6bn0pKX1mdW5jdGlvbiBGcWUoKXtyZXR1cm4gWShnXyxuPT4oe3NpbmdsZVNlbGVjdGlvbkhlYWRlcnM6bn0pKX1mdW5jdGlvbiBOcWUoKXtyZXR1cm4gWShfXyxuPT4oe3JhbmdlU2VsZWN0aW9uSGVhZGVyczpufSkpfXZhciBUdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6SzUsdXNlRmFjdG9yeTpFbmUsZGVwczpbWjVdfSx7cHJvdmlkZTpaNSx1c2VWYWx1ZTpxRH1dLGltcG9ydHM6W2tlLCQwLE1sLFJ1LmZvclBsdWdpbihDQyxjdWUpLEdELEV1ZSxSci5mb3JGZWF0dXJlKFdELHduZSxLNSksTG8uZm9yRmVhdHVyZShbU25lXSksdnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoRXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKFRxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhEcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoQXFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKElxZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhQcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoUnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE9xZSksbnIuZGVmaW5lR2xvYmFsU2V0dGluZyhrcWUpLG5yLmRlZmluZUdsb2JhbFNldHRpbmcoRnFlKSxuci5kZWZpbmVHbG9iYWxTZXR0aW5nKE5xZSldfSksbn0pKCksRHVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm59KSxuLlx1MDI3NWluaj1VKHtpbXBvcnRzOltmbmUsVHVlXX0pLG59KSgpLFhkPSgoKT0+KGZ1bmN0aW9uKG4pe24uQ1VTVE9NX0VMRU1FTlQ9IkNVU1RPTV9FTEVNRU5UIixuLklGUkFNRT0iSUZSQU1FIixuLk5HX0NPTVBPTkVOVD0iTkdfQ09NUE9ORU5UIixuLk5PTkU9Ik5PTkUifShYZHx8KFhkPXt9KSksWGQpKSgpLExxZT1bInBsdWdpbkNvbnRhaW5lciJdLEJxZT1bIm5nUGx1Z2luQ29udGFpbmVyIl07ZnVuY3Rpb24gVnFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBIcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsVnFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIFVxZShuLHQpezEmbiYmQWkoMCl9ZnVuY3Rpb24genFlKG4sdCl7aWYoMSZuJiYoS3QoMCksRSgxLFVxZSwxLDAsIm5nLWNvbnRhaW5lciIsOSksWnQoKSksMiZuKXtsZXQgZT1NKDIpLGk9c3QoNik7eCgxKSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZTppKX19ZnVuY3Rpb24ganFlKG4sdCl7MSZuJiZBaSgwKX1mdW5jdGlvbiBHcWUobix0KXtpZigxJm4mJihLdCgwKSxFKDEsanFlLDEsMCwibmctY29udGFpbmVyIiw5KSxadCgpKSwyJm4pe2xldCBlPU0oMiksaT1zdCg2KTt4KDEpLGIoIm5nVGVtcGxhdGVPdXRsZXQiLGUuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlP2UuZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOmkpfX1mdW5jdGlvbiBXcWUobix0KXtpZigxJm4mJihLdCgwKSxnKDEsImgzIiwxMCksRCgyLCIgVGhlcmVcdTIwMTlzIG5vIGRhc2hib2FyZCBieSB0aGUgbmFtZSBvZiBcdTIwMWMiKSxnKDMsImNvZGUiKSxEKDQpLHYoKSxEKDUsIlx1MjAxZC4gIiksdigpLGcoNiwicCIpLEQoNywiWW91IGNhbiBzZWxlY3QgYSBkYXNoYm9hcmQgZnJvbSB0aGUgbGlzdCBhYm92ZS4iKSx2KCksZyg4LCJwIiksQWkoOSwxMSksdigpLFp0KCkpLDImbil7bGV0IGU9TSgyKSxpPXN0KDgpO3goNCkseXQoZS5hY3RpdmVQbHVnaW5JZCkseCg1KSxiKCJuZ1RlbXBsYXRlT3V0bGV0IixpKX19ZnVuY3Rpb24gcXFlKG4sdCl7aWYoMSZuJiYoS3QoMCksZygxLCJoMyIsMTIpLEQoMiwiIE5vIGRhc2hib2FyZHMgYXJlIGFjdGl2ZSBmb3IgdGhlIGN1cnJlbnQgZGF0YSBzZXQuICIpLHYoKSxnKDMsInAiKSxEKDQsIlByb2JhYmxlIGNhdXNlczoiKSx2KCksZyg1LCJ1bCIpKDYsImxpIiksRCg3LCJZb3UgaGF2ZW5cdTIwMTl0IHdyaXR0ZW4gYW55IGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4iKSx2KCksZyg4LCJsaSIpLEQoOSwiVGVuc29yQm9hcmQgY2FuXHUyMDE5dCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuIiksdigpKCksRCgxMCwiIElmIHlvdVx1MjAxOXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZSAiKSxnKDExLCJhIiwxMyksRCgxMiwiUkVBRE1FIiksdigpLEQoMTMsIiBhbmQgcGVyaGFwcyB0aGUgIiksZygxNCwiYSIsMTQpLEQoMTUsIlRlbnNvckJvYXJkIHR1dG9yaWFsIiksdigpLEQoMTYsIi4gIiksZygxNywicCIpLEQoMTgsIiBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZSAiKSxnKDE5LCJhIiwxNSksRCgyMCwidGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtcyIpLHYoKSxEKDIxLCIgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuICIpLHYoKSxnKDIyLCJwIiksQWkoMjMsMTEpLHYoKSxadCgpKSwyJm4pe00oMik7bGV0IGU9c3QoOCk7eCgyMyksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFlxZShuLHQpe2lmKDEmbiYmKGcoMCwiZGl2Iiw2KSgxLCJkaXYiLDcpLEUoMixIcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoMyx6cWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNCxHcWUsMiwxLCJuZy1jb250YWluZXIiLDgpLEUoNSxXcWUsMTAsMiwibmctY29udGFpbmVyIiw4KSxFKDYscXFlLDI0LDEsIm5nLWNvbnRhaW5lciIsOCksdigpKCkpLDImbil7bGV0IGU9TSgpO2IoIm5nU3dpdGNoIixlLnBsdWdpbkxvYWRTdGF0ZSkseCgyKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCkseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTikseCgxKSxiKCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLlVOS05PV05fUExVR0lOX0lEKSx4KDEpLGIoIm5nU3dpdGNoQ2FzZSIsZS5QbHVnaW5Mb2FkU3RhdGUuTk9fRU5BQkxFRF9QTFVHSU5TKX19ZnVuY3Rpb24gWHFlKG4sdCl7aWYoMSZuJiYoZygwLCJoMyIsMTYpLEQoMSwiRGF0YSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpLHYoKSxnKDIsInAiKSxEKDMsIlRoZSBUZW5zb3JCb2FyZCBzZXJ2ZXIgbWF5IGJlIGRvd24gb3IgaW5hY2Nlc3NpYmxlLiIpLHYoKSxnKDQsInAiKSxBaSg1LDExKSx2KCkpLDImbil7TSgpO2xldCBlPXN0KDgpO3goNSksYigibmdUZW1wbGF0ZU91dGxldCIsZSl9fWZ1bmN0aW9uIFFxZShuLHQpe2lmKDEmbiYmKGcoMCwicCIsMTkpKDEsImkiKSxEKDIsIkxvZyBkaXJlY3Rvcnk6ICIpLGcoMywic3BhbiIpLEQoNCksdigpKCkoKSksMiZuKXtsZXQgZT1NKDIpO3goNCkseXQoZS5kYXRhTG9jYXRpb24pfX1mdW5jdGlvbiBLcWUobix0KXtpZigxJm4mJihnKDAsInNwYW4iLDE3KSxEKDEpLGooMiwiZGF0ZSIpLHYoKSxFKDMsUXFlLDUsMSwicCIsMTgpKSwyJm4pe2xldCBlPU0oKTt4KDEpLHFlKCJMYXN0IHJlbG9hZDogIixuZigyLDIsZS5sYXN0VXBkYXRlZCwibWVkaXVtIiksIiIpLHgoMiksYigibmdJZiIsZS5kYXRhTG9jYXRpb24pfX12YXIgWnFlPWZ1bmN0aW9uKG4pe3JldHVybntwbHVnaW5zOiEwLCJpcy1maXJzdC1wYXJ0eS1wbHVnaW4iOm59fSxCbD0oKCk9PihmdW5jdGlvbihuKXtuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ9MF09IkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EIixuW24uRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRD0xXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTj0yXT0iRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOIixuW24uTk9fRU5BQkxFRF9QTFVHSU5TPTNdPSJOT19FTkFCTEVEX1BMVUdJTlMiLG5bbi5VTktOT1dOX1BMVUdJTl9JRD00XT0iVU5LTk9XTl9QTFVHSU5fSUQiLG5bbi5MT0FERUQ9NV09IkxPQURFRCIsbltuLkxPQURJTkc9Nl09IkxPQURJTkcifShCbHx8KEJsPXt9KSksQmwpKSgpLEF1ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMucGx1Z2luUmVnaXN0cnk9aSx0aGlzLnBsdWdpbkFwaUhvc3Q9cix0aGlzLlBsdWdpbkxvYWRTdGF0ZT1CbCx0aGlzLkxvYWRpbmdNZWNoYW5pc21UeXBlPVhkLHRoaXMucGx1Z2luSW5zdGFuY2VzPW5ldyBNYXB9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fCF0aGlzLmFjdGl2ZUtub3duUGx1Z2lufHx0aGlzLnNldHRpbmdzTG9hZFN0YXRlPT09RWUuTk9UX0xPQURFRHx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PUVlLkxPQURJTkcpcmV0dXJuO2xldCBpPUJvb2xlYW4odGhpcy5hY3RpdmVLbm93blBsdWdpbiYmIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkKSk7aWYoZS5hY3RpdmVLbm93blBsdWdpbnx8ZS5pc0ZlYXR1cmVGbGFnc0xvYWRlZHx8ZS5zZXR0aW5nc0xvYWRTdGF0ZSl7bGV0IHI9ZS5hY3RpdmVLbm93blBsdWdpbj8ucHJldmlvdXNWYWx1ZTtpZihyJiZyLmlkIT09dGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCYmdGhpcy5oaWRlUGx1Z2luKHIpLGkpe2xldCBvPXRoaXMuY3JlYXRlUGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pO28mJnRoaXMucGx1Z2luSW5zdGFuY2VzLnNldCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luLmlkLG8pfWVsc2UgdGhpcy5zaG93UGx1Z2luKHRoaXMuYWN0aXZlS25vd25QbHVnaW4pfShpfHxlLmxhc3RVcGRhdGVkKSYmdGhpcy5yZWxvYWQodGhpcy5hY3RpdmVLbm93blBsdWdpbixpKX1oaWRlUGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDowLG92ZXJmbG93OiJoaWRkZW4iLHZpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pfXNob3dQbHVnaW4oZSl7aWYoIXRoaXMucGx1Z2luSW5zdGFuY2VzLmhhcyhlLmlkKSlyZXR1cm47bGV0IGk9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO09iamVjdC5hc3NpZ24oaS5zdHlsZSx7bWF4SGVpZ2h0Om51bGwsb3ZlcmZsb3c6bnVsbCx2aXNpYmlsaXR5Om51bGwscG9zaXRpb246bnVsbH0pfWNyZWF0ZVBsdWdpbihlKXtsZXQgaT1udWxsO3N3aXRjaChlLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpe2Nhc2UgWGQuQ1VTVE9NX0VMRU1FTlQ6aT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUubG9hZGluZ19tZWNoYW5pc20uZWxlbWVudF9uYW1lKSxpLnJlbG9hZE9uUmVhZHk9ITEsaS5mZWF0dXJlRmxhZ3M9dGhpcy5mZWF0dXJlRmxhZ3MsdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5JRlJBTUU6aWYoIXRoaXMucGx1Z2luQXBpSG9zdCl0aHJvdyBFcnJvcihgSUZSQU1FLWJhc2VkIHBsdWdpbnMgbm90IHN1cHBvcnRlZDogJHtlLmlkfWApO2k9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksaS5zZXRBdHRyaWJ1dGUoInNyYyIsYGRhdGEvcGx1Z2luX2VudHJ5Lmh0bWw/bmFtZT0ke2UuaWR9YCksdGhpcy5wbHVnaW5BcGlIb3N0LnJlZ2lzdGVyUGx1Z2luSWZyYW1lKGksZS5pZCksdGhpcy5wbHVnaW5zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoaSk7YnJlYWs7Y2FzZSBYZC5OR19DT01QT05FTlQ6bGV0IHI9dGhpcy5wbHVnaW5SZWdpc3RyeS5nZXRDb21wb25lbnQoZS5pZCk7aWYocil7bGV0IG89dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkocik7aT10aGlzLm5nUGx1Z2luQ29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChvKS5sb2NhdGlvbi5uYXRpdmVFbGVtZW50fWVsc2UgY29uc29sZS5lcnJvcihgTm8gcmVnaXN0ZXJlZCBBbmd1bGFyIGNvbXBvbmVudCBmb3IgcGx1Z2luOiAke2UuaWR9YCk7YnJlYWs7Y2FzZSBYZC5OT05FOmJyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBwbHVnaW4iKX1yZXR1cm4gaX1yZWxvYWQoZSxpKXtpZighaSYmZS5kaXNhYmxlX3JlbG9hZClyZXR1cm47bGV0IHI9dGhpcy5wbHVnaW5JbnN0YW5jZXMuZ2V0KGUuaWQpO3ImJnIucmVsb2FkJiZyLnJlbG9hZCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KEVvKSx3KFJ1KSx3KHhBLDgpKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJwbHVnaW5zLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihsdChMcWUsNyxBZSksbHQoQnFlLDcseWkpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnBsdWdpbnNDb250YWluZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkubmdQbHVnaW5Db250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e2FjdGl2ZVBsdWdpbklkOiJhY3RpdmVQbHVnaW5JZCIsYWN0aXZlS25vd25QbHVnaW46ImFjdGl2ZUtub3duUGx1Z2luIixwbHVnaW5Mb2FkU3RhdGU6InBsdWdpbkxvYWRTdGF0ZSIsZGF0YUxvY2F0aW9uOiJkYXRhTG9jYXRpb24iLGlzRmVhdHVyZUZsYWdzTG9hZGVkOiJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsc2V0dGluZ3NMb2FkU3RhdGU6InNldHRpbmdzTG9hZFN0YXRlIixmZWF0dXJlRmxhZ3M6ImZlYXR1cmVGbGFncyIsbGFzdFVwZGF0ZWQ6Imxhc3RVcGRhdGVkIixlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxmZWF0dXJlczpbenRdLGRlY2xzOjksdmFyczo0LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbInBsdWdpbkNvbnRhaW5lciIsIiJdLFsibmdQbHVnaW5Db250YWluZXIiLCIiXSxbImNsYXNzIiwid2FybmluZyIsMywibmdTd2l0Y2giLDQsIm5nSWYiXSxbImVudmlyb25tZW50RmFpbHVyZURlZmF1bHRUZW1wbGF0ZSIsIiJdLFsiZGF0ZUFuZERhdGFMb2NhdGlvbiIsIiJdLFsxLCJ3YXJuaW5nIiwzLCJuZ1N3aXRjaCJdLFsxLCJ3YXJuaW5nLW1lc3NhZ2UiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidW5rbm93bi1wbHVnaW4iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJuby1hY3RpdmUtcGx1Z2luIl0sWyJocmVmIiwiaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciXSxbMSwiZW52aXJvbm1lbnQtbm90LWxvYWRlZCJdLFsxLCJsYXN0LXJlbG9hZC10aW1lIl0sWyJjbGFzcyIsImRhdGEtbG9jYXRpb24iLDQsIm5nSWYiXSxbMSwiZGF0YS1sb2NhdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKGcoMCwiZGl2IiwwLDEpLEFpKDIsbnVsbCwyKSx2KCksRSg0LFlxZSw3LDYsImRpdiIsMyksRSg1LFhxZSw2LDEsIm5nLXRlbXBsYXRlIixudWxsLDQsZW4pLEUoNyxLcWUsNCw1LCJuZy10ZW1wbGF0ZSIsbnVsbCw1LGVuKSksMiZlJiYoYigibmdDbGFzcyIsSG4oMixacWUsKG51bGw9PWkuYWN0aXZlS25vd25QbHVnaW4/bnVsbDppLmFjdGl2ZUtub3duUGx1Z2luLmxvYWRpbmdfbWVjaGFuaXNtLnR5cGUpIT09aS5Mb2FkaW5nTWVjaGFuaXNtVHlwZS5JRlJBTUUpKSx4KDQpLGIoIm5nSWYiLGkucGx1Z2luTG9hZFN0YXRlIT09aS5QbHVnaW5Mb2FkU3RhdGUuTE9BREVEJiZpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURJTkcpKX0sZGVwZW5kZW5jaWVzOltQbixYZSxObyxocixJcixVMF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5wbHVnaW5zLmlzLWZpcnN0LXBhcnR5LXBsdWdpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2NvbG9yOiNmZmZ9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmZmY7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzAzMDMwfS53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMyMTIxMjE7bWFyZ2luOjgwcHggYXV0byAwO21heC13aWR0aDo1NDBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0ubGFzdC1yZWxvYWQtdGltZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zdHlsZTppdGFsaWN9LnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdICAgICBpZnJhbWV7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSnFlPVkoc18sZHMsKG4sdCk9PnQmJm5bdF0/T2JqZWN0LmFzc2lnbih7aWQ6dH0sblt0XSk6bnVsbCkseU89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVLbm93blBsdWdpbiQ9dGhpcy5zdG9yZS5zZWxlY3QoSnFlKSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnNlbGVjdChkcyksdGhpcy5wbHVnaW5Mb2FkU3RhdGUkPXBuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4kLHRoaXMuYWN0aXZlUGx1Z2luSWQkLHRoaXMuc3RvcmUuc2VsZWN0KHlEKSkucGlwZShCKChbaSxyLG9dKT0+bnVsbCE9PW8uZmFpbHVyZUNvZGU/by5mYWlsdXJlQ29kZT09PUNsLk5PVF9GT1VORD9CbC5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORDpvLmZhaWx1cmVDb2RlPT09Q2wuUEVSTUlTU0lPTl9ERU5JRUQ/QmwuRU5WSVJPTk1FTlRfRkFJTFVSRV9QRVJNSVNTSU9OX0RFTklFRDpCbC5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV046bnVsbCE9PWk/QmwuTE9BREVEOm51bGw9PT1vLmxhc3RMb2FkZWRUaW1lSW5NcyYmby5zdGF0ZT09PUVlLkxPQURJTkc/QmwuTE9BRElORzpyP0JsLlVOS05PV05fUExVR0lOX0lEOkJsLk5PX0VOQUJMRURfUExVR0lOUykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChvXyksdGhpcy5kYXRhTG9jYXRpb24kPXRoaXMuc3RvcmUuc2VsZWN0KGJEKS5waXBlKEIoaT0+aS5kYXRhX2xvY2F0aW9uKSksdGhpcy5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoUHApLHRoaXMuZmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChCbyksdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYWEuZ2V0U2V0dGluZ3NMb2FkU3RhdGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucyJdXSxpbnB1dHM6e2Vudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJ9LGRlY2xzOjksdmFyczoyNyxjb25zdHM6W1szLCJhY3RpdmVLbm93blBsdWdpbiIsImFjdGl2ZVBsdWdpbklkIiwiZGF0YUxvY2F0aW9uIiwibGFzdFVwZGF0ZWQiLCJwbHVnaW5Mb2FkU3RhdGUiLCJpc0ZlYXR1cmVGbGFnc0xvYWRlZCIsInNldHRpbmdzTG9hZFN0YXRlIiwiZmVhdHVyZUZsYWdzIiwiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE4oMCwicGx1Z2lucy1jb21wb25lbnQiLDApLGooMSwiYXN5bmMiKSxqKDIsImFzeW5jIiksaigzLCJhc3luYyIpLGooNCwiYXN5bmMiKSxqKDUsImFzeW5jIiksaig2LCJhc3luYyIpLGooNywiYXN5bmMiKSxqKDgsImFzeW5jIikpLDImZSYmYigiYWN0aXZlS25vd25QbHVnaW4iLFcoMSwxMSxpLmFjdGl2ZUtub3duUGx1Z2luJCkpKCJhY3RpdmVQbHVnaW5JZCIsVygyLDEzLGkuYWN0aXZlUGx1Z2luSWQkKSkoImRhdGFMb2NhdGlvbiIsVygzLDE1LGkuZGF0YUxvY2F0aW9uJCkpKCJsYXN0VXBkYXRlZCIsVyg0LDE3LGkubGFzdExvYWRlZFRpbWVJbk1zJCkpKCJwbHVnaW5Mb2FkU3RhdGUiLFcoNSwxOSxpLnBsdWdpbkxvYWRTdGF0ZSQpKSgiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLFcoNiwyMSxpLmlzRmVhdHVyZUZsYWdzTG9hZGVkJCkpKCJzZXR0aW5nc0xvYWRTdGF0ZSIsVyg3LDIzLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSkoImZlYXR1cmVGbGFncyIsVyg4LDI1LGkuZmVhdHVyZUZsYWdzJCkpKCJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUpKCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGkuZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSl9LHN0eWxlczpbInBsdWdpbnMtY29tcG9uZW50W19uZ2NvbnRlbnQtJUNPTVAlXSB7IGhlaWdodDogMTAwJTsgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYk89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe2ltcG9ydHM6W01sLGtlLFJ1XX0pLG59KSgpO2JiKHlPLFtBdWVdLFtmdF0pO3ZhciBJdWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRvY3VtZW50PWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9dGhpcy5vblZpc2liaWxpdHlDaGFuZ2VJbXBsLmJpbmQodGhpcyksdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnBpcGUoZm4oYWEuZ2V0UmVsb2FkRW5hYmxlZCkpLHRoaXMucmVsb2FkUGVyaW9kSW5NcyQ9dGhpcy5zdG9yZS5waXBlKGZuKGFhLmdldFJlbG9hZFBlcmlvZEluTXMpKSx0aGlzLnJlbG9hZFRpbWVySWQ9bnVsbCx0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBUZX1uZ09uSW5pdCgpe3RoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdGhpcy5vblZpc2liaWxpdHlDaGFuZ2UpLHBuKHRoaXMucmVsb2FkRW5hYmxlZCQucGlwZShkaSgpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkLnBpcGUoZGkoKSkpLnBpcGUob3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChbZSxpXSk9Pnt0aGlzLmNhbmNlbExvYWQoKSxlJiZ0aGlzLmxvYWQoaSl9KX1vblZpc2liaWxpdHlDaGFuZ2VJbXBsKCl7InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJnRoaXMubWlzc2VkQXV0b1JlbG9hZCYmKHRoaXMubWlzc2VkQXV0b1JlbG9hZD0hMSx0aGlzLnN0b3JlLmRpc3BhdGNoKEhhKCkpKX1sb2FkKGUpe3RoaXMucmVsb2FkVGltZXJJZD1zZXRUaW1lb3V0KCgpPT57InZpc2libGUiPT09dGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5zdG9yZS5kaXNwYXRjaChIYSgpKTp0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITAsdGhpcy5sb2FkKGUpfSxlKX1jYW5jZWxMb2FkKCl7bnVsbCE9PXRoaXMucmVsb2FkVGltZXJJZCYmY2xlYXJUaW1lb3V0KHRoaXMucmVsb2FkVGltZXJJZCksdGhpcy5yZWxvYWRUaW1lcklkPW51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLmNhbmNlbExvYWQoKSx0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSx0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh3KFBlKSx3KEJ0KSl9LG4uXHUwMjc1Y21wPWsoe3R5cGU6bixzZWxlY3RvcnM6W1sicmVsb2FkZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFB1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9ayh7dHlwZTpuLHNlbGVjdG9yczpbWyJ0ZW5zb3Jib2FyZC13cmFwcGVyLWNvbXBvbmVudCJdXSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJwbHVnaW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZOKDAsInBsdWdpbnMiLDApKDEsInJlbG9hZGVyIil9LGRlcGVuZGVuY2llczpbeU8sSXVlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4OiAxIDE7XG4gICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxSdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj1nZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksZTg9InNtb290aGluZyIsdDg9InJ1bkNvbG9yR3JvdXAiLG44PSJ0YWdGaWx0ZXIiLGk4PSJydW5GaWx0ZXIiLHI4PSJyZWdleDoiLHhPPWNsYXNzIGV4dGVuZHMgUnVle2dldE1ldHJpY3NQaW5uZWRDYXJkcyh0KXtyZXR1cm4gcG4oW3Quc2VsZWN0KEVDKSx0LnNlbGVjdChsWildKS5waXBlKEIoKFtlLGldKT0+e2lmKCFlLmxlbmd0aCYmIWkubGVuZ3RoKXJldHVybltdO2xldCBvPVsuLi5lLm1hcCgoe3BsdWdpbjpzLHRhZzphLHNhbXBsZTpsLHJ1bklkOmN9KT0+e2xldCB1PXtwbHVnaW46cyx0YWc6YX07cmV0dXJuIHphKHMpJiYodS5ydW5JZD1jKSxVYShzKSYmKHUuc2FtcGxlPWwpLHV9KSwuLi5pXTtyZXR1cm5be2tleToicGlubmVkQ2FyZHMiLHZhbHVlOkpTT04uc3RyaW5naWZ5KG8pfV19KSl9c2VyaWFsaXplU3RhdGVUb1F1ZXJ5UGFyYW1zKHQpe3JldHVybiBwbihbdGhpcy5nZXRNZXRyaWNzUGlubmVkQ2FyZHModCksdC5zZWxlY3QoX2MpLnBpcGUoQihlPT5lP1t7a2V5Om44LHZhbHVlOmV9XTpbXSkpLHBuKFt0LnNlbGVjdChnQyksdC5zZWxlY3QoV2YpXSkucGlwZShCKChbZSxpXSk9PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT57aWYodm9pZCAwPT09aSlyZXR1cm57fTtsZXQgcj10W2VdO3JldHVybiByJiZyLnF1ZXJ5UGFyYW1PdmVycmlkZT97a2V5OnIucXVlcnlQYXJhbU92ZXJyaWRlLHZhbHVlOmk/LnRvU3RyaW5nKCl9Ont9fSkuZmlsdGVyKCh7a2V5OmUsdmFsdWU6aX0pPT5lJiZ2b2lkIDAhPT1pKX0oZSxpKSkpLHQuc2VsZWN0KHVaKS5waXBlKEIoZT0+TnVtYmVyLmlzRmluaXRlKGUuc2NhbGFyU21vb3RoaW5nKT9be2tleTplOCx2YWx1ZTpTdHJpbmcoZS5zY2FsYXJTbW9vdGhpbmcpfV06W10pKSx0LnNlbGVjdChUVikucGlwZShCKGU9PntpZighZSlyZXR1cm5bXTtsZXQgaTtzd2l0Y2goZS5rZXkpe2Nhc2UgZXIuRVhQRVJJTUVOVDppPSJleHBlcmltZW50IjticmVhaztjYXNlIGVyLlJVTjppPSJydW4iO2JyZWFrO2Nhc2UgZXIuUkVHRVg6aT1gJHtyOH0ke2UucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5OnQ4LHZhbHVlOml9XX0pKSx0LnNlbGVjdChKZikucGlwZShCKGU9PmU/W3trZXk6aTgsdmFsdWU6ZX1dOltdKSldKS5waXBlKEIoZT0+ZS5mbGF0KCkpKX1kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHQpe2xldCBlPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwscz1udWxsO2ZvcihsZXR7a2V5OmEsdmFsdWU6bH1vZiB0KXN3aXRjaChhKXtjYXNlInBpbm5lZENhcmRzIjplPXRZZShsKTticmVhaztjYXNlIGU4Omk9TnVtYmVyKGwpO2JyZWFrO2Nhc2UgdDg6c3dpdGNoKGwpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OmVyLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6ZXIuUlVOfX1pZihsLnN0YXJ0c1dpdGgocjgpKXtsZXQgYz1sLnNsaWNlKHI4Lmxlbmd0aCk7bz17a2V5OmVyLlJFR0VYLHJlZ2V4U3RyaW5nOmN9fWJyZWFrO2Nhc2Ugbjg6cj1sO2JyZWFrO2Nhc2UgaTg6cz1sfXJldHVybnttZXRyaWNzOntwaW5uZWRDYXJkczplfHxbXSxzbW9vdGhpbmc6aSx0YWdGaWx0ZXI6cn0scnVuczp7Z3JvdXBCeTpvLHJlZ2V4RmlsdGVyOnN9fX19O2Z1bmN0aW9uIHRZZShuKXtsZXQgdDt0cnl7dD1KU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBudWxsO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIGkucnVuSWQscz0ibnVtYmVyIj09dHlwZW9mIGkuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiBpLnRhZyxsPW98fHR5cGVvZiBpLnJ1bklkPiJ1IixjPXN8fHR5cGVvZiBpLnNhbXBsZT4idSI7aWYoISgic3RyaW5nIj09dHlwZW9mIGkucGx1Z2luJiZhJiZsJiZjJiZMSyhpLnBsdWdpbikmJmkudGFnKSljb250aW51ZTtpZih6YShpLnBsdWdpbikpe2lmKCFpLnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYoaS5ydW5JZCljb250aW51ZTtpZihzJiYoIVVhKGkucGx1Z2luKXx8IU51bWJlci5pc0ludGVnZXIoaS5zYW1wbGUpfHxpLnNhbXBsZTwwKSljb250aW51ZTtsZXQgdT17cGx1Z2luOmkucGx1Z2luLHRhZzppLnRhZ307byYmKHUucnVuSWQ9aS5ydW5JZCkscyYmKHUuc2FtcGxlPWkuc2FtcGxlKSxlLnB1c2godSl9cmV0dXJuIGV9ZnVuY3Rpb24ga3VlKCl7cmV0dXJuW3tyb3V0ZUtpbmQ6ZmkuRVhQRVJJTUVOVCxwYXRoOiIvIixuZ0NvbXBvbmVudDpQdWUsZGVmYXVsdFJvdXRlOiEwLGRlZXBMaW5rUHJvdmlkZXI6bmV3IHhPfV19ZnVuY3Rpb24gblllKG4pe3JldHVybih0LGUpPT57bGV0IGk9bih0LGUpO3JldHVybiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGUudHlwZSksY29uc29sZS5sb2coInByZXYgc3RhdGUiLHQpLGNvbnNvbGUubG9nKCJhY3Rpb24iLGUpLGNvbnNvbGUubG9nKCJuZXh0IHN0YXRlIixpKSxjb25zb2xlLmdyb3VwRW5kKCksaX19ZnVuY3Rpb24gRnVlKCl7cmV0dXJuIEJiKCk/blllOm49Pih0LGUpPT5uKHQsZSl9eE89WTgoW0g2KCldLHhPKTt2YXIgTnVlPW5ldyBzZSgiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KSxMdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6VzAsdXNlRmFjdG9yeTpGdWUsbXVsdGk6ITB9XSxpbXBvcnRzOltSci5mb3JSb290KE51ZSx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxMby5mb3JSb290KFtdKV19KSxufSkoKSxCdWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPXooe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVUoe30pLG59KSgpLFZ1ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9eih7dHlwZTpufSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpba2UsYk8sQnVlXX0pLG59KSgpLG84PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD16KHt0eXBlOm4sYm9vdHN0cmFwOltWZWVdfSksbi5cdTAyNzVpbmo9VSh7aW1wb3J0czpbZF8sUWVlLHlULE5YLCQwLEhlZSxoYy5yZWdpc3RlclJvdXRlcyhrdWUpLHpBLFVBLFVlZSxWdWUsTWwsWWVlLGplZSxaZWUsT0QsSmVlLEdlZSxZQix4QSxiTyxnQSxtSSxMdWUsRHVlXX0pLG59KSgpOyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/QjMoKS5ib290c3RyYXBNb2R1bGUobzgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKT0+e0IzKCkuYm9vdHN0cmFwTW9kdWxlKG84KX0pLGZ1bmN0aW9uKCl7aWYoajcpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTt6Nz0hMX0oKX0pKCk7Ci8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAogKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4zLjYgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuCiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9ibG9iL21hc3Rlci9MSUNFTlNFCiAqLwovL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5MiwgYW5kIGNhdXNlcwovL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4KLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCi8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KCnZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKGZ1bmN0aW9uIChnbG9iYWwsIHNldFRpbWVvdXQpIHsKICAgIHZhciByZXEsIHMsIGhlYWQsIGJhc2VFbGVtZW50LCBkYXRhTWFpbiwgc3JjLAogICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCiAgICAgICAgdmVyc2lvbiA9ICcyLjMuNicsCiAgICAgICAgY29tbWVudFJlZ0V4cCA9IC9cL1wqW1xzXFNdKj9cKlwvfChbXjoiJz1dfF4pXC9cLy4qJC9tZywKICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAogICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKICAgICAgICBjdXJyRGlyUmVnRXhwID0gL15cLlwvLywKICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCiAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAogICAgICAgIGhhc093biA9IG9wLmhhc093blByb3BlcnR5LAogICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGUKICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAogICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRlLCBidXQgbm90IHN1cmUgaG93CiAgICAgICAgLy90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCiAgICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwogICAgICAgICAgICAgICAgICAgICAgL15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAogICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAogICAgICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCiAgICAgICAgaXNPcGVyYSA9IHR5cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT3BlcmFdJywKICAgICAgICBjb250ZXh0cyA9IHt9LAogICAgICAgIGNmZyA9IHt9LAogICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCiAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKCiAgICAvL0NvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlICcpLy9jb21tZW50JywgZG8gbm90IGxvc2UgdGhlIHByZWZpeCB0byBjb21tZW50LgogICAgZnVuY3Rpb24gY29tbWVudFJlcGxhY2UobWF0Y2gsIHNpbmdsZVByZWZpeCkgewogICAgICAgIHJldHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKICAgICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCiAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOwogICAgfQoKICAgIC8qKgogICAgICogQ3ljbGVzIG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gKICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKICAgICAgICB2YXIgcHJvcDsKICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7CiAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKICAgICAgICAgICAgICAgIGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgewogICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFpc0FycmF5KHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZhbHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAogICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgogICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihlcnIpIHsKICAgICAgICB0aHJvdyBlcnI7CiAgICB9CgogICAgLy9BbGxvdyBnZXR0aW5nIGEgZ2xvYmFsIHRoYXQgaXMgZXhwcmVzc2VkIGluCiAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgogICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHZhciBnID0gZ2xvYmFsOwogICAgICAgIGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKICAgICAgICAgICAgZyA9IGdbcGFydF07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGVycm9yIElEIHRoYXQgbWFwcyB0byBhbiBJRCBvbiBhIHdlYiBwYWdlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KICAgICAqCiAgICAgKiBAcmV0dXJucyB7RXJyb3J9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihpZCwgbXNnLCBlcnIsIHJlcXVpcmVNb2R1bGVzKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0cHM6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjJyArIGlkKTsKICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7CiAgICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZTsKICAgIH0KCiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAogICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVvZiByZXF1aXJlanMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkgewogICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3RhbmNlLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNmZyA9IHJlcXVpcmVqczsKICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKICAgICAgICAvL2Fzc3VtZSBpdCBpcyBhIGNvbmZpZyBvYmplY3QuCiAgICAgICAgY2ZnID0gcmVxdWlyZTsKICAgICAgICByZXF1aXJlID0gdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKICAgICAgICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0LCBoYW5kbGVycywKICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCiAgICAgICAgICAgIGNvbmZpZyA9IHsKICAgICAgICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBkZWZhdWx0IGZvciBtYXAKICAgICAgICAgICAgICAgIC8vY29uZmlnIHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAogICAgICAgICAgICAgICAgLy93aWxsIHJ1biBmYXN0ZXIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KICAgICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAogICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHt9LAogICAgICAgICAgICAgICAgcGtnczoge30sCiAgICAgICAgICAgICAgICBzaGltOiB7fSwKICAgICAgICAgICAgICAgIGNvbmZpZzoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgLy9yZWdpc3RyeSBvZiBqdXN0IGVuYWJsZWQgbW9kdWxlcywgdG8gc3BlZWQKICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCiAgICAgICAgICAgIC8vYXJlIHJlZ2lzdGVyZWQsIGJ1dCBub3QgYWN0aXZhdGVkLgogICAgICAgICAgICBlbmFibGVkUmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKICAgICAgICAgICAgZGVmUXVldWUgPSBbXSwKICAgICAgICAgICAgZGVmaW5lZCA9IHt9LAogICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCiAgICAgICAgICAgIGJ1bmRsZXNNYXAgPSB7fSwKICAgICAgICAgICAgcmVxdWlyZUNvdW50ZXIgPSAxLAogICAgICAgICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lCiAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCiAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKICAgICAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgogICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS4KICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpLCBwYXJ0OwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwogICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgewogICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLiwKICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CiAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgd29yayB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGgsIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnQKICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgogICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChpID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCiAgICAgICAgICogdG8uCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcCBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgdmFsdWUuIFNob3VsZAogICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciBwa2dNYWluLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwgbGFzdEluZGV4LAogICAgICAgICAgICAgICAgZm91bmRNYXAsIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgbm9ybWFsaXplZEJhc2VQYXJ0cywKICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpKSwKICAgICAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsCiAgICAgICAgICAgICAgICBzdGFyTWFwID0gbWFwICYmIG1hcFsnKiddOwoKICAgICAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKCiAgICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQgY29tcGF0aWJpbGl0eSwgc3RyaXAgLmpzIGZyb20gZW5kCiAgICAgICAgICAgICAgICAvLyBvZiBJRHMuIEhhdmUgdG8gZG8gdGhpcyBoZXJlLCBhbmQgbm90IGluIG5hbWVUb1VybAogICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBub2RlIGFsbG93cyBlaXRoZXIgLmpzIG9yIG5vbiAuanMgdG8gbWFwCiAgICAgICAgICAgICAgICAvLyB0byBzYW1lIGZpbGUuCiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm5vZGVJZENvbXBhdCAmJiBqc1N1ZmZpeFJlZ0V4cC50ZXN0KG5hbWVbbGFzdEluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lW2xhc3RJbmRleF0gPSBuYW1lW2xhc3RJbmRleF0ucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lCiAgICAgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCiAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwogICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bwogICAgICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yCiAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuam9pbignLycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgogICAgICAgICAgICBpZiAoYXBwbHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1hcCkpIHsKICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKCiAgICAgICAgICAgICAgICBvdXRlckxvb3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lU2VnbWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24gdGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJMb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBmb3IgYSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCwKICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rhck1hcCAmJiBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3VuZFN0YXJNYXApIHsKICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmFtZSBwb2ludHMgdG8gYSBwYWNrYWdlJ3MgbmFtZSwgdXNlCiAgICAgICAgICAgIC8vIHRoZSBwYWNrYWdlIG1haW4gaW5zdGVhZC4KICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbmFtZSk7CgogICAgICAgICAgICByZXR1cm4gcGtnTWFpbiA/IHBrZ01haW4gOiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KG5hbWUpIHsKICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKSA9PT0gbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYXNQYXRoRmFsbGJhY2soaWQpIHsKICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CiAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJyYXkocGF0aENvbmZpZykgJiYgcGF0aENvbmZpZy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvL1BvcCBvZmYgdGhlIGZpcnN0IGFycmF5IHZhbHVlLCBzaW5jZSBpdCBmYWlsZWQsIGFuZAogICAgICAgICAgICAgICAgLy9yZXRyeQogICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOwogICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlLnVuZGVmKGlkKTsKCiAgICAgICAgICAgICAgICAvL0N1c3RvbSByZXF1aXJlIHRoYXQgZG9lcyBub3QgZG8gbWFwIHRyYW5zbGF0aW9uLCBzaW5jZQogICAgICAgICAgICAgICAgLy9JRCBpcyAiYWJzb2x1dGUiLCBhbHJlYWR5IG1hcHBlZC9yZXNvbHZlZC4KICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUobnVsbCwgewogICAgICAgICAgICAgICAgICAgIHNraXBNYXA6IHRydWUKICAgICAgICAgICAgICAgIH0pKFtpZF0pOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL1R1cm5zIGEgcGx1Z2luIXJlc291cmNlIHRvIFtwbHVnaW4sIHJlc291cmNlXQogICAgICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQogICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KICAgICAgICBmdW5jdGlvbiBzcGxpdFByZWZpeChuYW1lKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXgsCiAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVmaXgsIG1vZHVsZQogICAgICAgICAqIG5hbWUsIGFuZCBwYXRoLiBJZiBwYXJlbnRNb2R1bGVNYXAgaXMgcHJvdmlkZWQgaXQgd2lsbAogICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbW9kdWxlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKICAgICAgICAgKiBmb3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc05vcm1hbGl6ZWQ6IGlzIHRoZSBJRCBhbHJlYWR5IG5vcm1hbGl6ZWQuCiAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCiAgICAgICAgICogU2hvdWxkIG9ubHkgYmUgdHJ1ZSBpZiB0aGlzIG1hcCBpcyBmb3IgYSBkZXBlbmRlbmN5LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRzLAogICAgICAgICAgICAgICAgcHJlZml4ID0gbnVsbCwKICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSB0cnVlLAogICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKCiAgICAgICAgICAgIC8vSWYgbm8gbmFtZSwgdGhlbiBpdCBtZWFucyBpdCBpcyBhIHJlcXVpcmUgY2FsbCwgZ2VuZXJhdGUgYW4KICAgICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgogICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOwogICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHNbMV07CgogICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBub3JtYWxpemUocHJlZml4LCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbk1vZHVsZSAmJiBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXN0ZWQgcGx1Z2luIHJlZmVyZW5jZXMsIHRoZW4gZG8gbm90IHRyeSB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFzIGl0IHdpbGwgbm90IG5vcm1hbGl6ZSBjb3JyZWN0bHkuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGxhY2VzIGEgcmVzdHJpY3Rpb24gb24gcmVzb3VyY2VJZHMsIGFuZCB0aGUgbG9uZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm0gc29sdXRpb24gaXMgbm90IHRvIG5vcm1hbGl6ZSB1bnRpbCBwbHVnaW5zIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgYW5kIGFsbCBub3JtYWxpemF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGluZyBvZiBhIGxvYWRlciBwbHVnaW4uIEJ1dCBmb3Igbm93LCBmaXhlcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIHVzZXMuIERldGFpbHMgaW4gIzExMzEKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lLmluZGV4T2YoJyEnKSA9PT0gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgcmVndWxhciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwoKICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZWQgbmFtZSBtYXkgYmUgYSBwbHVnaW4gSUQgZHVlIHRvIG1hcCBjb25maWcKICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QKICAgICAgICAgICAgICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQuCiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKICAgICAgICAgICAgICAgICAgICBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgdGhlIGlkIGlzIGEgcGx1Z2luIGlkIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgaXQgbmVlZHMKICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQogICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUuCiAgICAgICAgICAgIHN1ZmZpeCA9IHByZWZpeCAmJiAhcGx1Z2luTW9kdWxlICYmICFpc05vcm1hbGl6ZWQgPwogICAgICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CiAgICAgICAgICAgICAgICAgICAgICcnOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAogICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsCiAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgsCiAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAogICAgICAgICAgICAgICAgaWQ6IChwcmVmaXggPwogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0TW9kdWxlKGRlcE1hcCkgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1vZDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwgbmFtZSwgZm4pIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoaGFzUHJvcChkZWZpbmVkLCBpZCkgJiYKICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgewogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgIGZuKGRlZmluZWRbaWRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1vZCA9IGdldE1vZHVsZShkZXBNYXApOwogICAgICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIsIGVycmJhY2spIHsKICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRoaXMgY29udGV4dCdzCiAgICAgICAgICogZGVmUXVldWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgewogICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZRdWV1ZSBpdGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgZWFjaChnbG9iYWxEZWZRdWV1ZSwgZnVuY3Rpb24ocXVldWVJdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gcXVldWVJdGVtWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBoYW5kbGVycyA9IHsKICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLnJlcXVpcmUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1vZC5tYXApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2V4cG9ydHMnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5leHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFttb2QubWFwLmlkXSA9IG1vZC5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5leHBvcnRzID0gZGVmaW5lZFttb2QubWFwLmlkXSA9IHt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QubW9kdWxlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtb2QubWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCkgfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1vZC5leHBvcnRzIHx8IChtb2QuZXhwb3J0cyA9IHt9KQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgewogICAgICAgICAgICAvL0NsZWFuIHVwIG1hY2hpbmVyeSB1c2VkIGZvciB3YWl0aW5nIG1vZHVsZXMuCiAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CiAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7CiAgICAgICAgICAgIHZhciBpZCA9IG1vZC5tYXAuaWQ7CgogICAgICAgICAgICBpZiAobW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICBlYWNoKG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7CiAgICAgICAgICAgIHZhciBlcnIsIHVzaW5nUGF0aEZhbGxiYWNrLAogICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwKICAgICAgICAgICAgICAgIC8vSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0U2Vjb25kcyBvZiAwLgogICAgICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCiAgICAgICAgICAgICAgICByZXFDYWxscyA9IFtdLAogICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7CgogICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgogICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgogICAgICAgICAgICBlYWNoUHJvcChlbmFibGVkUmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtb2QubWFwLAogICAgICAgICAgICAgICAgICAgIG1vZElkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNob3VsZCBiZSBleGVjdXRlZCwgYW5kIGl0IGhhcyBub3QKICAgICAgICAgICAgICAgICAgICAvL2JlZW4gaW5pdGVkIGFuZCB0aW1lIGlzIHVwLCByZW1lbWJlciBpdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQYXRoRmFsbGJhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTG9hZHMucHVzaChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW9kLmluaXRlZCAmJiBtb2QuZmV0Y2hlZCAmJiBtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAucHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vIHJlYXNvbiB0byBrZWVwIGxvb2tpbmcgZm9yIHVuZmluaXNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmVjYXVzZSBpdCBtYXkgYmUgdGhhdCBhIHBsdWdpbiByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5Y2xlQ2hlY2sgPSBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGV4cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vSWYgd2FpdCB0aW1lIGV4cGlyZWQsIHRocm93IGVycm9yIG9mIHVubG9hZGVkIG1vZHVsZXMuCiAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CiAgICAgICAgICAgICAgICBlcnIuY29udGV4dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Ob3QgZXhwaXJlZCwgY2hlY2sgZm9yIGEgY3ljbGUuCiAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgewogICAgICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUobW9kLCB7fSwge30pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCiAgICAgICAgICAgIC8vb3RoZXIgdGhhbiBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5kaW5nCiAgICAgICAgICAgIC8vc2NyaXB0cywgdGhlbiBqdXN0IHRyeSBiYWNrIGxhdGVyLgogICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcgdG8gbG9hZC4gV2FpdCBmb3IgaXQsIGJ1dCBvbmx5CiAgICAgICAgICAgICAgICAvL2lmIGEgdGltZW91dCBpcyBub3QgYWxyZWFkeSBpbiBlZmZlY3QuCiAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTW9kdWxlID0gZnVuY3Rpb24gKG1hcCkgewogICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7CiAgICAgICAgICAgIHRoaXMuc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbWFwLmlkKTsKICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWQgPSBbXTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CiAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOwoKICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQogICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXSwKICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkLCB0aGlzLmZldGNoZWQKICAgICAgICAgICAgKi8KICAgICAgICB9OwoKICAgICAgICBNb2R1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENhbiBoYXBwZW4gaWYgdGhlcmUKICAgICAgICAgICAgICAgIC8vYXJlIG11bHRpcGxlIGRlZmluZSBjYWxscyBmb3IgdGhlIHNhbWUgbW9kdWxlLiBUaGF0IGlzIG5vdAogICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ2lzdGVyIGZvciBlcnJvcnMgb24gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG5vIGVycmJhY2sgYWxyZWFkeSwgYnV0IHRoZXJlIGFyZSBlcnJvciBsaXN0ZW5lcnMKICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgogICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKICAgICAgICAgICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3IgZXhhbXBsZQogICAgICAgICAgICAgICAgLy8ic2hpbSIgZGVwcyBhcmUgcGFzc2VkIGluIGhlcmUgZGlyZWN0bHksIGFuZAogICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0IHRoYXQgY29uZmlnLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gZGVwTWFwcyAmJiBkZXBNYXBzLnNsaWNlKDApOwoKICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJhY2s7CgogICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwoKICAgICAgICAgICAgICAgIC8vQ291bGQgaGF2ZSBvcHRpb24gdG8gaW5pdCB0aGlzIG1vZHVsZSBpbiBlbmFibGVkIG1vZGUsCiAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAogICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCiAgICAgICAgICAgICAgICAvL2lmIGVuYWJsZWQgcHJldmlvdXNseSwgbm93IHRyaWdnZXIgZGVwZW5kZW5jaWVzIGFzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgLy9XaWxsIGNhbGwgdGhpcy5jaGVjaygpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxsYmFjayBmb3IgYSBnaXZlbgogICAgICAgICAgICAgICAgLy9leHBvcnQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50IC09IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5mZXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5mZXRjaGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOwoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1hbmFnZXIgaXMgZm9yIGEgcGx1Z2luIG1hbmFnZWQgcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUodGhpcy5tYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8IFtdLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMubWFwLnVybDsKCiAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgIGlmICghdXJsRmV0Y2hlZFt1cmxdKSB7CiAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAogICAgICAgICAgICAgKiBkZWZpbmUgaXQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgdGhpcy5lbmFibGluZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZXJyLCBjanNNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICBkZXBFeHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCBpZiBub3QgYWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGNvbnRleHQuZGVmUXVldWVNYXAsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykgewogICAgICAgICAgICAgICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2FsbAogICAgICAgICAgICAgICAgICAgIC8vdGhhdCB3b3VsZCByZXN1bHQgaW4gY2hlY2tpbmcgdGhpcyBtb2R1bGUgdG8KICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5nIHRoYXQsIHNraXAgdGhpcyB3b3JrLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYgIXRoaXMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmYWN0b3J5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29ubHkgZG8gaXQgZm9yIGRlZmluZSgpJ2QgIG1vZHVsZXMuIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25FcnJvciBpcyBzZXQsIHVzZSB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvciAhPT0gZGVmYXVsdE9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF2b3IgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cy4gSWYgbm9kZS9janMgaW4gcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIEZhdm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBhc3NpZ25tZW50IG92ZXIgZXhwb3J0cyBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgZXhwb3J0cyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzaW5nRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IHRoaXMubWFwLmlzRGVmaW5lID8gW3RoaXMubWFwLmlkXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIGxpdGVyYWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmICF0aGlzLmlnbm9yZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEub25SZXNvdXJjZUxvYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1hcHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNMb2FkTWFwcy5wdXNoKGRlcE1hcC5ub3JtYWxpemVkTWFwIHx8IGRlcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCByZXNMb2FkTWFwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBjYWxsaW5nIGNoZWNrIGFnYWluCiAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBhCiAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCwKICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXgpOwoKICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CgogICAgICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCB0aGlzLm1hcC5pZCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLm1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vSWYgY3VycmVudCBtYXAgaXMgbm90IG5vcm1hbGl6ZWQsIHdhaXQgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBpZiB0aGUgcGx1Z2luIGFsbG93cyBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4ICsgJyEnICsgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5ub3JtYWxpemVkTWFwID0gbm9ybWFsaXplZE1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZCA9IGdldE93bihyZWdpc3RyeSwgbm9ybWFsaXplZE1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0lmIGEgcGF0aHMgY29uZmlnLCB0aGVuIGp1c3QgbG9hZCB0aGF0IGZpbGUgaW5zdGVhZCB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVzb2x2ZSB0aGUgcGx1Z2luLCBhcyBpdCBpcyBidWlsdCBpbnRvIHRoYXQgcGF0aHMgbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnVybCA9IGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRlbXAgdW5ub3JtYWxpemVkIG1vZHVsZXMgZm9yIHRoaXMgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaWQuaW5kZXhPZihpZCArICdfdW5ub3JtYWxpemVkJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQogICAgICAgICAgICAgICAgICAgIC8vY29udGV4dCBvciBob3cgdG8gJ2NvbXBsZXRlJyB0aGUgbG9hZC4KICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byByZWluZm9yY2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zdXBwb3J0IG9sZCBzdHlsZSBvZiBwYXNzaW5nIG1vZHVsZU5hbWUgYnV0IGRpc2NhcmQKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGludGVybmFsIHJlZi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QWx0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb2ZmIGludGVyYWN0aXZlIHNjcmlwdCBtYXRjaGluZyBmb3IgSUUgZm9yIGFueSBkZWZpbmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1ByaW1lIHRoZSBzeXN0ZW0gYnkgY3JlYXRpbmcgYSBtb2R1bGUgaW5zdGFuY2UgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jb25maWdbbW9kdWxlTmFtZV0gPSBjb25maWcuY29uZmlnW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ2Zyb210ZXh0ZXZhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBldmFsIGZvciAnICsgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2luCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3VwcG9ydCBhbm9ueW1vdXMgbW9kdWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIHZhbHVlIG9mIHRoYXQgbW9kdWxlIHRvIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKICAgICAgICAgICAgICAgICAgICAvL2NvdWxkIGJlIHNvbWUgd2VpcmQgc3RyaW5nIHdpdGggbm8gcGF0aCB0aGF0IGFjdHVhbGx5IHdhbnRzIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwc1twbHVnaW5NYXAuaWRdID0gcGx1Z2luTWFwOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBlbmFibGVkUmVnaXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhlIG1vZHVsZSBpcyBlbmFibGluZywKICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAvL2ZvciBkZXBlbmRlbmNpZXMgZG8gbm90IHRyaWdnZXIgaW5hZHZlcnRlbnQgbG9hZAogICAgICAgICAgICAgICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtb2QsIGhhbmRsZXI7CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0RlcGVuZGVuY3kgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgZGVwTWFwCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdpcmVkIHVwIHRvIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXAuaXNEZWZpbmUgPyB0aGlzLm1hcCA6IHRoaXMubWFwLnBhcmVudE1hcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwc1tpXSA9IGRlcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCArPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuZGVmZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIHRoaXMuZXJyYmFjaykpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkaXJlY3QgZXJyYmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpcyBsaXN0ZW5pbmcgZm9yIGVycm9ycywgc28gYmUgc3VyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvciBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOwogICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9kdWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJwogICAgICAgICAgICAgICAgICAgIC8vQWxzbywgZG9uJ3QgY2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAogICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYgbW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShkZXBNYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoUHJvcCh0aGlzLnBsdWdpbk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsKICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIGlmICghY2JzKSB7CiAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNbbmFtZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNicy5wdXNoKGNiKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHsKICAgICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9uIChjYikgewogICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMgYnJva2VuIE1vZHVsZSBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZvciBhIHdoaWxlIGluIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgogICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKGFyZ3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsKICAgICAgICAgICAgLy9GYXZvciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQogICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZlbnQvYWRkRXZlbnRMaXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQogICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCB3aGljaCB3aWxsIGJlCiAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgogICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5vZGUuZGV0YWNoRXZlbnQoaWVOYW1lLCBmdW5jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAogICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgbm9kZS4KICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7CiAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQ7CgogICAgICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOwogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGludGFrZURlZmluZXMoKSB7CiAgICAgICAgICAgIHZhciBhcmdzOwoKICAgICAgICAgICAgLy9BbnkgZGVmaW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCiAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogJyArCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXplZCBieSB0aGUKICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgY29uZmlnOiBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSwKICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAogICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVkLAogICAgICAgICAgICB1cmxGZXRjaGVkOiB1cmxGZXRjaGVkLAogICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCiAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKICAgICAgICAgICAgTW9kdWxlOiBNb2R1bGUsCiAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCiAgICAgICAgICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCiAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogU2V0IGEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb25maWd1cmU6IGZ1bmN0aW9uIChjZmcpIHsKICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybC5jaGFyQXQoY2ZnLmJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgb2xkIHN0eWxlIHVybEFyZ3Mgc3RyaW5nIHRvIGEgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNmZy51cmxBcmdzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHZhciB1cmxBcmdzID0gY2ZnLnVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgY2ZnLnVybEFyZ3MgPSBmdW5jdGlvbihpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJnczsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcsCiAgICAgICAgICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgogICAgICAgICAgICAgICAgdmFyIHNoaW0gPSBjb25maWcuc2hpbSwKICAgICAgICAgICAgICAgICAgICBvYmpzID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9ianNbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhlIGJ1bmRsZXMKICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5idW5kbGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlc01hcFt2XSA9IHByb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQogICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLnNoaW0sIGZ1bmN0aW9uICh2YWx1ZSwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hpbSA9IHNoaW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9BZGp1c3QgcGFja2FnZXMgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiwgbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBwa2dPYmo7CgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGtnT2JqLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1tuYW1lXSA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TYXZlIHBvaW50ZXIgdG8gbWFpbiBtb2R1bGUgSUQgZm9yIHBrZyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWluIHBhdGhzIGFyZSBub3JtYWxpemVkLAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmlsZSBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGtnc1tuYW1lXSA9IHBrZ09iai5uYW1lICsgJy8nICsgKHBrZ09iai5tYWluIHx8ICdtYWluJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAvL3VwZGF0ZSB0aGUgbWFwcyBmb3IgdGhlbSwgc2luY2UgdGhlaXIgaW5mbywgbGlrZSBVUkxzIHRvIGxvYWQsCiAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG1vZHVsZSBhbHJlYWR5IGhhcyBpbml0IGNhbGxlZCwgc2luY2UgaXQgaXMgdG9vCiAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCiAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmICFtb2QubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKICAgICAgICAgICAgICAgIC8vcmVxdWlyZSB3aXRoIHRob3NlIGFyZ3MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmVxdWlyZSBpcyBkZWZpbmVkIGFzIGEKICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlKGNmZy5kZXBzIHx8IFtdLCBjZmcuY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmbjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VSZXF1aXJlOiBmdW5jdGlvbiAocmVsTWFwLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2NhbFJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQnVpbGRDYWxsYmFjayAmJiBjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ludmFsaWQgY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZlYXQ6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBvbmx5IHdvcmtzIHdoaWxlIG1vZHVsZSBpcyBiZWluZyBkZWZpbmVkLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYXZhaWxhYmxlIChhcyBpbiB0aGUgTm9kZSBhZGFwdGVyKSwgcHJlZmVyIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxNYXAsIGxvY2FsUmVxdWlyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVsZSBuYW1lLCBpZiBpdCBjb250YWlucyAuIG9yIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwcywgcmVsTWFwLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQgZm9yIGNvbnRleHQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbE1hcCA/ICcnIDogJy4gVXNlIHJlcXVpcmUoW10pJykpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCiAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU29tZSBkZWZpbmVzIGNvdWxkIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KICAgICAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdG9yZSBpZiBtYXAgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9ucy5za2lwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBtaXhpbihsb2NhbFJlcXVpcmUsIHsKICAgICAgICAgICAgICAgICAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlciwKCiAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSArIC5leHRlbnNpb24gaW50byBhbiBVUkwgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIHBsYWluIFVSTHMgbGlrZSBuYW1lVG9VcmwuCiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtb2R1bGVOYW1lUGx1c0V4dC5sYXN0SW5kZXhPZignLicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQgPT09ICcuLic7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBleHQsICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIGlkKSB8fCBoYXNQcm9wKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCiAgICAgICAgICAgICAgICBpZiAoIXJlbE1hcCkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZS51bmRlZiA9IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZpeCBmb3IgIzQwOAogICAgICAgICAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIHRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBtb2QudW5kZWZlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cmxGZXRjaGVkW21hcC51cmxdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiBxdWV1ZWQgZGVmaW5lcyB0b28uIEdvIGJhY2t3YXJkcwogICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWVzcyB1cCB0aGUgaXRlcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUmV2ZXJzZShkZWZRdWV1ZSwgZnVuY3Rpb24oYXJncywgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gYmUgcmVsb2FkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmRXZlbnRzW2lkXSA9IG1vZC5ldmVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGVkIHRvIGVuYWJsZSBhIG1vZHVsZSBpZiBpdCBpcyBzdGlsbCBpbiB0aGUgcmVnaXN0cnkKICAgICAgICAgICAgICogYXdhaXRpbmcgZW5hYmxlbWVudC4gQSBzZWNvbmQgYXJnLCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAogICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieQogICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qgc2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCiAgICAgICAgICAgICAqIEEgbG9hZCBldmVudCBjb3VsZCBiZSBhIHNjcmlwdCBsb2FkIG9yIGp1c3QgYSBsb2FkIHBhc3MgZnJvbSBhIHN5bmNocm9ub3VzCiAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAogICAgICAgICAgICAgICAgICAgIHNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1vZHVsZU5hbWUpIHx8IHt9LAogICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKCiAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYWxyZWFkeSBmb3VuZCBhbiBhbm9ueW1vdXMgbW9kdWxlIGFuZCBib3VuZCBpdAogICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIHRoaXMgYWZ0ZXIgdGhlIGN5Y2xlIG9mIGNhbGxHZXRNb2R1bGUgaW4gY2FzZSB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub2RlZmluZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9BIHNjcmlwdCB0aGF0IGRvZXMgbm90IGNhbGwgZGVmaW5lKCksIHNvIGp1c3Qgc2ltdWxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCiAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgogICAgICAgICAgICAgKiBOb3RlIHRoYXQgaXQgKipkb2VzIG5vdCoqIGNhbGwgbm9ybWFsaXplIG9uIHRoZSBtb2R1bGVOYW1lLAogICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CiAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAogICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGgsIGJ1bmRsZUlkLAogICAgICAgICAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChwa2dNYWluKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBrZ01haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkLCBleHQsIHNraXBFeHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgYSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMgYSBwcm90b2NvbCBpcyB1c2VkIGFuZCBpdCBpcyBqdXN0CiAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCiAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMsIHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4KICAgICAgICAgICAgICAgIC8vVGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wtbGVzcyBVUkxzIGFzIHdlbGwgYXMgZnVsbCBwYXRocy4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0LgogICAgICAgICAgICAgICAgICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRlZC4gVGhpcyBpcyBhIGJpdCB3b25reSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCiAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0IHx8ICcnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7CgogICAgICAgICAgICAgICAgICAgIHN5bXMgPSBtb2R1bGVOYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKICAgICAgICAgICAgICAgICAgICAvL2FuZCB3b3JrIHVwIGZyb20gaXQuCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbiBhcnJheSwgaXQgbWVhbnMgdGhlcmUgYXJlIGEgZmV3IGNob2ljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gcGFyZW50UGF0aFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSm9pbiB0aGUgcGF0aCBwYXJ0cyB0b2dldGhlciwgdGhlbiBmaWd1cmUgb3V0IGlmIGJhc2VVcmwgaXMgbmVlZGVkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwogICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDogJy5qcycpKTsKICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVybCkgKyB1cmw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdzICYmICEvXmJsb2JcOi8udGVzdCh1cmwpID8KICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJncyhtb2R1bGVOYW1lLCB1cmwpIDogdXJsOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bwogICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4KICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxiYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAogICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgYXJncywgZXhwb3J0cykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIGNhbGxiYWNrIGZvciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAogICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2FkZWQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19AcicpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBNYXAuaWQgPT09IGRhdGEuaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdzY3JpcHRlcnJvcicsICdTY3JpcHQgZXJyb3IgZm9yICInICsgZGF0YS5pZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciLCBuZWVkZWQgYnk6ICcgKyBwYXJlbnRzLmpvaW4oJywgJykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIicpLCBldnQsIFtkYXRhLmlkXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOwogICAgICAgIHJldHVybiBjb250ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogTWFpbiBlbnRyeSBwb2ludC4KICAgICAqCiAgICAgKiBJZiB0aGUgb25seSBhcmd1bWVudCB0byByZXF1aXJlIGlzIGEgc3RyaW5nLCB0aGVuIHRoZSBtb2R1bGUgdGhhdAogICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGVuIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBhcnJheQogICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgogICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCiAgICAgKgogICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAogICAgICogbmFtZSBmb3IgbWluaWZpY2F0aW9uL2xvY2FsIHNjb3BlIHVzZS4KICAgICAqLwogICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgewoKICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CiAgICAgICAgdmFyIGNvbnRleHQsIGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBkZWZDb250ZXh0TmFtZTsKCiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykgJiYgdHlwZW9mIGRlcHMgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0CiAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJiYWNrOwogICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CiAgICAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcpIHsKICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spOwogICAgfTsKCiAgICAvKioKICAgICAqIFN1cHBvcnQgcmVxdWlyZS5jb25maWcoKSB0byBtYWtlIGl0IGVhc2llciB0byBjb29wZXJhdGUgd2l0aCBvdGhlcgogICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgogICAgICovCiAgICByZXEuY29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykgewogICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNrCiAgICAgKiBvZiB0aGUgZXZlbnQgbG9vcC4gT3ZlcnJpZGUgZm9yIG90aGVyIGVudnMKICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KICAgICAqLwogICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CiAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CiAgICB9IDogZnVuY3Rpb24gKGZuKSB7IGZuKCk7IH07CgogICAgLyoqCiAgICAgKiBFeHBvcnQgcmVxdWlyZSBhcyBhIGdsb2JhbCwgYnV0IG9ubHkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAqLwogICAgaWYgKCFyZXF1aXJlKSB7CiAgICAgICAgcmVxdWlyZSA9IHJlcTsKICAgIH0KCiAgICByZXEudmVyc2lvbiA9IHZlcnNpb247CgogICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCiAgICByZXEuanNFeHRSZWdFeHAgPSAvXlwvfDp8XD98XC5qcyQvOwogICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKICAgIHMgPSByZXEucyA9IHsKICAgICAgICBjb250ZXh0czogY29udGV4dHMsCiAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAogICAgfTsKCiAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCiAgICByZXEoe30pOwoKICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCiAgICBlYWNoKFsKICAgICAgICAndG9VcmwnLAogICAgICAgICd1bmRlZicsCiAgICAgICAgJ2RlZmluZWQnLAogICAgICAgICdzcGVjaWZpZWQnCiAgICBdLCBmdW5jdGlvbiAocHJvcCkgewogICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKICAgICAgICAvL3NvIHRoYXQgZHVyaW5nIGJ1aWxkcywgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBjb250ZXh0CiAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgogICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IGNvbnRleHRzW2RlZkNvbnRleHROYW1lXTsKICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfSk7CgogICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgIGhlYWQgPSBzLmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwogICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCiAgICAgICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1ZXJ5IGJ1ZzoKICAgICAgICAvL2h0dHA6Ly9kZXYuanF1ZXJ5LmNvbS90aWNrZXQvMjcwOQogICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGJhc2VFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcwogICAgICogZnVuY3Rpb24uIEludGVyY2VwdC9vdmVycmlkZSBpdCBpZiB5b3Ugd2FudCBjdXN0b20gZXJyb3IgaGFuZGxpbmcuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KICAgICAqLwogICAgcmVxLm9uRXJyb3IgPSBkZWZhdWx0T25FcnJvcjsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIG5vZGUgZm9yIHRoZSBsb2FkIGNvbW1hbmQuIE9ubHkgdXNlZCBpbiBicm93c2VyIGVudnMuCiAgICAgKi8KICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIG5vZGUgPSBjb25maWcueGh0bWwgPwogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgbm9kZS50eXBlID0gY29uZmlnLnNjcmlwdFR5cGUgfHwgJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKICAgICAgICBub2RlLmFzeW5jID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCiAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBlbnZpcm9ubWVudHMKICAgICAqIHRvIG92ZXJyaWRlIGl0LgogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KICAgICAqLwogICAgcmVxLmxvYWQgPSBmdW5jdGlvbiAoY29udGV4dCwgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwogICAgICAgICAgICBub2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwoKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKICAgICAgICAgICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBmaXJpbmdzCiAgICAgICAgICAgIC8vdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGFsbCBvdGhlciBicm93c2VycyB3aXRoCiAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKICAgICAgICAgICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKICAgICAgICAgICAgLy9odHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzY0ODA1Ny9zY3JpcHQtb25sb2FkLWV2ZW50LWlzLW5vdC1maXJlZC1pbW1lZGlhdGVseS1hZnRlci1zY3JpcHQtZXhlY3V0aW9uCiAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAogICAgICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNoRXZlbnQgJiYKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKICAgICAgICAgICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCiAgICAgICAgICAgICAgICAgICAgLy9yZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8xODcKICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgICAgICAgIC8vaW4gSUU4LCBub2RlLmF0dGFjaEV2ZW50IGRvZXMgbm90IGhhdmUgdG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6CiAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMjczCiAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCiAgICAgICAgICAgICAgICAgICAgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJlCiAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCiAgICAgICAgICAgICAgICAvL3dlIGNhbm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCiAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElFIHJlcG9ydHMgdGhlIHNjcmlwdCBhcyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCiAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgogICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAogICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2ZXIsIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aWxsIGZpcmUgYmVmb3JlCiAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJRSB3aWxsIGZpcmUgZXJyb3IgYmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCiAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3JpcHQgbG9hZCBldmVudCBsaXN0ZW5lciBiZWZvcmUgZXhlY3V0ZQogICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4KICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCiAgICAgICAgICAgICAgICAvL2FuZCB0aGVuIGRlc3Ryb3lzIGFsbCBpbnN0YWxscyBvZiBJRSA2LTkuCiAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29udGV4dC5vblNjcmlwdExvYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKCiAgICAgICAgICAgIC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlIGhhdmUgYmVlbgogICAgICAgICAgICAvL3NldCwgYnV0IGJlZm9yZSBpdCBpcyBwbGFjZWQgaW4gdGhlIERPTS4KICAgICAgICAgICAgaWYgKGNvbmZpZy5vbk5vZGVDcmVhdGVkKSB7CiAgICAgICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCiAgICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlvbiwgc28gdG8gdGllIGFuIGFub255bW91cyBkZWZpbmUKICAgICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgogICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBub2RlOwogICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VFbGVtZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CiAgICAgICAgICAgICAgICAvL2VmZmljaWVudCB1c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2NrIHVudGlsCiAgICAgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVhdGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycwogICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25lIHNvCiAgICAgICAgICAgICAgICAvL3RoYXQgb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMgbWF5IG5lZWQKICAgICAgICAgICAgICAgIC8vdG8gYmUgcmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNhc2VzIGJlY29tZSBjb21tb24uCgogICAgICAgICAgICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGV2ZW50IGxvb3AgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2ViS2l0CiAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMgZ2FyYmFnZS1jb2xsZWN0ZWQgYWZ0ZXIgY2FsbGluZwogICAgICAgICAgICAgICAgLy8gaW1wb3J0U2NyaXB0cygpOiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTMzMTcKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgMCk7CiAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CgogICAgICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihtYWtlRXJyb3IoJ2ltcG9ydHNjcmlwdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKSB7CiAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgICAgIH0KCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICB9CgogICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KICAgIGlmIChpc0Jyb3dzZXIgJiYgIWNmZy5za2lwRGF0YU1haW4pIHsKICAgICAgICAvL0ZpZ3VyZSBvdXQgYmFzZVVybC4gR2V0IGl0IGZyb20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0LgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKICAgICAgICAgICAgLy91c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgogICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgIGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQogICAgICAgICAgICAvL3RvIGxvYWQuIElmIGl0IGlzIHRoZXJlLCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYWluJyk7CiAgICAgICAgICAgIGlmIChkYXRhTWFpbikgewogICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CgogICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCiAgICAgICAgICAgICAgICAvL2J1dCBvbmx5IGRvIHNvIGlmIHRoZSBkYXRhLW1haW4gdmFsdWUgaXMgbm90IGEgbG9hZGVyIHBsdWdpbgogICAgICAgICAgICAgICAgLy9tb2R1bGUgSUQuCiAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9yIHVzZSBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2Jhc2VVcmwuCiAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IHNyYy5sZW5ndGggPyBzcmMuam9pbignLycpICArICcvJyA6ICcuLyc7CgogICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3JpcHQgaXMgbm93CiAgICAgICAgICAgICAgICAvL2xpa2UgYSBtb2R1bGUgbmFtZS4KICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKCiAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkgewogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4KICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcuZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCiAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAogICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAogICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRoZSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncwogICAgICogbmFtZS4KICAgICAqLwogICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7CgogICAgICAgIC8vQWxsb3cgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbmFtZTsKICAgICAgICAgICAgbmFtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBhCiAgICAgICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVuY2llcy4KICAgICAgICBpZiAoIWRlcHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICAvL1JlbW92ZSBjb21tZW50cyBmcm9tIHRoZSBjYWxsYmFjayBzdHJpbmcsCiAgICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCiAgICAgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UmVnRXhwLCBjb21tZW50UmVwbGFjZSkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKICAgICAgICAgICAgICAgIC8vY291bGQgdXNlIGV4cG9ydHMsIGFuZCBtb2R1bGUuIEF2b2lkIGRvaW5nIGV4cG9ydHMgYW5kIG1vZHVsZQogICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUuCiAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKICAgICAgICAgICAgICAgIC8vb3JkZXIgbGlzdGVkIGJlbG93LgogICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBbJ3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVwcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQogICAgICAgIC8vd29yay4KICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOwogICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KICAgICAgICAvL1RoaXMgYWxsb3dzIG11bHRpcGxlIG1vZHVsZXMgdG8gYmUgaW4gYSBmaWxlIHdpdGhvdXQgcHJlbWF0dXJlbHkKICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZvciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCiAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CiAgICAgICAgLy9vY2N1cnMuIElmIG5vIGNvbnRleHQsIHVzZSB0aGUgZ2xvYmFsIHF1ZXVlLCBhbmQgZ2V0IGl0IHByb2Nlc3NlZAogICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCiAgICAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW25hbWVdID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgIH0KICAgIH07CgogICAgZGVmaW5lLmFtZCA9IHsKICAgICAgICBqUXVlcnk6IHRydWUKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyB0aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1lbnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwogICAgICogbG9hZGVyIHBsdWdpbnMsIG5vdCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZhbHVhdGUuCiAgICAgKi8KICAgIHJlcS5leGVjID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7CiAgICB9OwoKICAgIC8vU2V0IHVwIHdpdGggY29uZmlnIGluZm8uCiAgICByZXEoY2ZnKTsKfSh0aGlzLCAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogc2V0VGltZW91dCkpKTsKCg==", + "headers": [ + [ + "content-type", + "text/javascript; charset=utf-8" + ] + ], + "ok": true, + "status": 200, + "status_text": "" + } + } + }, + "executionInfo": { + "elapsed": 299, + "status": "ok", + "timestamp": 1695286012665, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "z54EU64egkCp", + "outputId": "083545da-4c72-48b9-f3d6-b92014981564" + }, + "outputs": [], + "source": [ + "#%load_ext tensorboard\n", + "%reload_ext tensorboard\n", + "%tensorboard --logdir logs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 361, + "status": "ok", + "timestamp": 1695286714300, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "eNks2RKujFYM" + }, + "outputs": [], + "source": [ + "# tensorboard\n", + "from torch.utils.tensorboard import SummaryWriter\n", + "writer = SummaryWriter('./logs/experimental_interface_original_single_node_{}_BS{}_ldata{}'.format(unique_id_stand_alone, BS, ldata), flush_secs=5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 4, + "status": "ok", + "timestamp": 1695286715139, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "nLw2lNuRjFip" + }, + "outputs": [], + "source": [ + "def write_metric(node_name, task_name, metric_name, metric, round_number):\n", + " writer.add_scalar(\"{}/{}/{}\".format(node_name, task_name, metric_name),\n", + " metric, round_number)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 295, + "status": "ok", + "timestamp": 1695286717930, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "j8FNf16hjFrS" + }, + "outputs": [], + "source": [ + "# Model defintion\n", + "class GNN(torch.nn.Module):\n", + " def __init__(\n", + " self,\n", + " in_features: int = 32,\n", + " out_features: int = 1, # it should be dataset[0].y.numel()).to(device)\n", + " hidden: int = 512,\n", + " num_layers: int = 3):\n", + " super(GNN, self).__init__()\n", + " # Initial layer to map features -> hidden\n", + " self.lin0 = nn.Linear(in_features, hidden)\n", + " # Define GNN layers\n", + " self.convs = nn.ModuleList([GCNConv(hidden * 2, hidden) for _ in range(num_layers)])\n", + " # Define norm layers\n", + " self.norms = nn.ModuleList([LayerNorm(hidden) for _ in range(num_layers)])\n", + " # Final linear layers\n", + " self.lin1 = nn.Linear(hidden * 2, hidden * 4)\n", + " self.lin2 = nn.Linear(hidden * 4, hidden * 4)\n", + " self.lin3 = nn.Linear(hidden * 4, out_features)\n", + "\n", + " def forward(self, x, edge_index, edge_attr, batch):\n", + " # First feature transform layer\n", + " x = F.leaky_relu(self.lin0(x))\n", + " for i, conv in enumerate(self.convs):\n", + " x_glob = torch.index_select(gap(x, batch), 0, batch) # Virtual global node\n", + " x = torch.cat((x, x_glob), dim=1)\n", + " x = conv(x=x, edge_index=edge_index)\n", + " x = self.norms[i](x, batch)\n", + " x = F.leaky_relu(x)\n", + " if i == 0:\n", + " x_pooled = torch.cat([gmp(x, batch), gap(x, batch)], dim=1) # Global pooling after each layer\n", + " else:\n", + " x_pooled = x_pooled + torch.cat([gmp(x, batch), gap(x, batch)], dim=1)\n", + " x = F.leaky_relu(self.lin1(x_pooled))\n", + " x = F.dropout(x, p=0.5, training=self.training)\n", + " x = F.leaky_relu(self.lin2(x))\n", + " x = F.dropout(x, p=0.5, training=self.training)\n", + " x = self.lin3(x) # shape: (batch_size, out_features)\n", + " x = torch.sigmoid(x)\n", + " return x" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1695286718982, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "7kYvtK81jFxP" + }, + "outputs": [], + "source": [ + "# loss function definition and metrics\n", + "def myloss(output, target):\n", + " return (output - target).abs().mean() #torch.mul((output - target), target*10).abs().mean()\n", + " #return torch.mul((output - target), (1 + target*40)).abs().mean()\n", + "\n", + "def true_pos(y_true, y_pred):\n", + " return (y_pred * y_true).sum()\n", + "\n", + "def precision(y_true, y_pred): #Precision = TruePositives / (TruePositives + FalsePositives)\n", + " true_positives = true_pos(y_true, y_pred)\n", + " predicted_positives = y_pred.sum()\n", + " return true_positives / (predicted_positives + 1e-8)\n", + "\n", + "def recall(y_true, y_pred): #Recall = TruePositives / (TruePositives + FalseNegatives)\n", + " true_positives = true_pos(y_true, y_pred)\n", + " actual_positives = y_true.sum()\n", + " return true_positives / (actual_positives + 1e-8)\n", + "\n", + "def f1_score(y_true, y_pred):\n", + " prec = precision(y_true, y_pred)\n", + " rec = recall(y_true, y_pred)\n", + " return 2 * (prec * rec) / (prec + rec + 1e-8)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 2, + "status": "ok", + "timestamp": 1695286719247, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "mA0_pZkajF0x" + }, + "outputs": [], + "source": [ + "# evaluation/test function\n", + "def inference(network, test_loader):\n", + " network.eval()\n", + " total_error = 0\n", + " correct = 0\n", + " for data in test_loader:\n", + " data = data.to(device)\n", + " out = network(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n", + " total_error += (out - data.y).abs().sum().item()\n", + " correct += ((out.data - data.y).abs() < 0.5).sum() # binary classification\n", + " accuracy = correct / len(test_loader.dataset)\n", + " print(\"###################### Eval/Test accuracy is: \", accuracy)\n", + " return total_error / len(test_loader.dataset)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 2, + "status": "ok", + "timestamp": 1695286719923, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "UzBqD2tojF4V" + }, + "outputs": [], + "source": [ + "model = GNN(hidden=hidden,\n", + " in_features=dataset.num_features,\n", + " num_layers=3,\n", + " out_features=dataset[0].y.numel()).to(device)\n", + "\n", + "optimizer = torch.optim.Adam(model.parameters(), lr=lr)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1695286720840, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "W3wvVvgvjF7n" + }, + "outputs": [], + "source": [ + "def train(epoch):\n", + " model.train()\n", + " total_loss = 0\n", + " for idx, data in enumerate(train_loader):\n", + " data = data.to(device)\n", + " optimizer.zero_grad()\n", + " out = model(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n", + " loss = myloss(out, data.y)\n", + " loss.backward()\n", + " total_loss += loss.item() * data.num_graphs\n", + " optimizer.step()\n", + " if idx % log_interval == 0:\n", + " identity = \"Original\"\n", + " write_metric(identity, \"train\", \"loss\", loss.item(), epoch * len(train_loader) + idx)\n", + " print(\"Loss at epoch {} batch {} is: {}\".format(epoch, idx, loss.item()))\n", + "\n", + " # metrics\n", + " # predicted_labels = (out > 0.5).float()\n", + " # labels = data.y\n", + " # rcll = recall(labels, predicted_labels).item()\n", + " # prcs = precision(labels, predicted_labels).item()\n", + " # f1sc = f1_score(labels, predicted_labels).item()\n", + " # correct = ((out.data - data.y).abs() < 0.5).sum() # binary classification\n", + " # accuracy = correct / len(data)\n", + " # print(\"Recall: {}\\nPrecision: {}\\nF1_Score: {}\\nAccuracy: {} \".format(\n", + " # rcll, prcs, f1sc, accuracy))\n", + "\n", + " # write_metric(identity, \"train\", \"recall\", rcll,\n", + " # epoch * len(train_loader) + idx)\n", + " # write_metric(identity, \"train\", \"precision\", prcs,\n", + " # epoch * len(train_loader) + idx)\n", + " # write_metric(identity, \"train\", \"f1_score\", f1sc,\n", + " # epoch * len(train_loader) + idx)\n", + " # write_metric(identity, \"train\", \"accuracy\", accuracy,\n", + " # epoch * len(train_loader) + idx)\n", + "\n", + " return total_loss / len(train_loader.dataset)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 4, + "status": "ok", + "timestamp": 1695286721782, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "nkLFPMFujF-m" + }, + "outputs": [], + "source": [ + "@torch.no_grad()\n", + "def test(loader):\n", + " model.eval()\n", + " total_error = 0\n", + " # correct = 0\n", + " for data in loader:\n", + " data = data.to(device)\n", + " out = model(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n", + " total_error += (out.squeeze() - data.y).abs().sum().item()\n", + " return total_error / len(loader.dataset)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 333628, + "status": "ok", + "timestamp": 1695287056227, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "jkZXNm6OjGBO", + "outputId": "a555bbc3-7600-42a9-f39d-4039d13dbcc1" + }, + "outputs": [], + "source": [ + "for epoch in range(0, n_epochs):\n", + " loss = train(epoch)\n", + " val_mae = test(val_loader)\n", + " test_mae = test(test_loader)\n", + " print(f'Epoch: {epoch:02d}, Loss: {loss:.4f}, Val: {val_mae:.4f}, '\n", + " f'Test: {test_mae:.4f}')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ea0B58NNsJ-V" + }, + "source": [ + "#OpenFL" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 276, + "status": "ok", + "timestamp": 1695287304288, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "HgmIP9F9s_FX" + }, + "outputs": [], + "source": [ + "#openFL imports\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 440, + "status": "ok", + "timestamp": 1695287306033, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "dRrEK6UNsi73", + "outputId": "ceb3d7e8-1320-4a67-c60e-284a746463fb" + }, + "outputs": [], + "source": [ + "unique_id_openfl = random.randint(10,2000000)\n", + "print(unique_id_openfl)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 295, + "status": "ok", + "timestamp": 1695287308231, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "6u8GL78cjGEP", + "outputId": "873c93a0-2456-4074-b7ba-4fc5693a330d" + }, + "outputs": [], + "source": [ + "writer = SummaryWriter('./logs/experimental_interface_openFL_{}_BS{}_ldata{}'.format(unique_id_openfl, BS, ldata), flush_secs=5)\n", + "print(writer)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 3, + "status": "ok", + "timestamp": 1695287309516, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "Yw9t2crsjGHF" + }, + "outputs": [], + "source": [ + "# OpenFL: Averaging all parameter vectors\n", + "def FedAvg(models): \n", + " new_model = models[0]\n", + " state_dict_keys = new_model.state_dict().keys()\n", + " model_dict_list = [mdl.state_dict() for mdl in models]\n", + " state_dict = new_model.state_dict()\n", + " num_models = len(models)\n", + " for key in state_dict_keys:\n", + " state_dict[key] = torch.sum(\n", + " torch.stack(\n", + " [mdldict[key]/num_models for mdldict in model_dict_list]), dim=0)\n", + " new_model.load_state_dict(state_dict)\n", + " return new_model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 531, + "status": "ok", + "timestamp": 1695287311290, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "d6yvOhPsjGKA", + "outputId": "4cc03019-3006-4da0-fa64-13da85eb1078" + }, + "outputs": [], + "source": [ + "#OpenFL: definition of compute flow\n", + "class FederatedFlow(FLSpec):\n", + " def __init__(self, model = None, optimizer = None, rounds=3, **kwargs):\n", + " super().__init__(**kwargs)\n", + " if model is not None:\n", + " self.model = model\n", + " self.optimizer = optimizer \n", + " else:\n", + " self.model = Net() #assuming Net() is defined somewhere else.\n", + " self.optimizer = optim.SGD(self.model.parameters(), lr=learning_rate,\n", + " momentum=momentum)\n", + " self.rounds = rounds\n", + " self.aggr_training_value_list = []\n", + "\n", + " @aggregator\n", + " def start(self):\n", + " print(f'Performing initialization for model')\n", + " self.collaborators = self.runtime.collaborators\n", + " self.private = 10\n", + " self.current_round = 0\n", + " self.next(self.aggregated_model_validation,foreach='collaborators',exclude=['private'])\n", + "\n", + " @collaborator\n", + " def aggregated_model_validation(self):\n", + " print(f'########################## Performing aggregated model validation for collaborator {self.input}')\n", + " self.agg_validation_score = inference(self.model, self.test_loader)\n", + " #print(f'{self.input} value of {self.agg_validation_score}')\n", + " self.next(self.train)\n", + "\n", + " @collaborator\n", + " def train(self):\n", + " self.model.train()\n", + " # self.optimizer = optim.SGD(self.model.parameters(), lr=learning_rate,\n", + " # momentum=momentum)\n", + " self.optimizer = optim.Adam(self.model.parameters(), lr=lr)\n", + " # NOTE: optimizer seems to be defined here to be able to act on collaborator parameters\n", + " total_loss = 0\n", + " # print(\"Collaborator self.model params example BEFORE a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n", + "\n", + " ll = len(self.train_loader)\n", + " for batch_idx, data in enumerate(self.train_loader):\n", + " data = data.to(device)\n", + " self.optimizer.zero_grad()\n", + " out = self.model(data.x.float(), data.edge_index, data.edge_attr.float(), data.batch)\n", + " loss = myloss(out, data.y)\n", + " loss.backward()\n", + " total_loss += loss.item() #* data.num_graphs\n", + " self.optimizer.step()\n", + " if batch_idx % log_interval == 0:\n", + " print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(self.current_round,\n", + " batch_idx * len(data), len(self.train_loader.dataset),\n", + " 100. * batch_idx / len(self.train_loader), loss.item()))\n", + " self.loss = loss.item()\n", + " # torch.save(self.model.state_dict(), 'model.pth')\n", + " # torch.save(self.optimizer.state_dict(), 'optimizer.pth')\n", + " write_metric(self.input, \"train\", \"loss\", loss.item(),\n", + " self.current_round * ll + batch_idx)\n", + "\n", + " print(\"Wrote TensorBoard information for collaborator \", self.input)\n", + "\n", + " # print(\"Collaborator self.model params example AFTER a round of training:\\n \", self.model.state_dict()[\"lin0.weight\"])\n", + " self.training_completed = True\n", + " self.next(self.local_model_validation)\n", + "\n", + " @collaborator\n", + " def local_model_validation(self):\n", + " self.local_validation_score = inference(self.model, self.test_loader)\n", + " print(f'Doing local model validation for collaborator {self.input}: {self.local_validation_score}')\n", + " self.next(self.join, exclude=['training_completed'])\n", + "\n", + " @aggregator\n", + " def join(self, inputs):\n", + " print(f'############## AGGREGATOR NOW: time to join!! for Epoch {self.current_round}')\n", + " self.average_loss = sum(input.loss for input in inputs)/len(inputs)\n", + " self.aggr_training_value_list.append(self.average_loss)\n", + " self.aggregated_model_accuracy = sum(input.agg_validation_score for input in inputs)/len(inputs)\n", + " self.local_model_accuracy = sum(input.local_validation_score for input in inputs)/len(inputs)\n", + " print(f'Average aggregated model validation values = {self.aggregated_model_accuracy}')\n", + " print(f'Average training loss = {self.average_loss}')\n", + " print(f'Average local model validation values = {self.local_model_accuracy}')\n", + "\n", + " self.model = FedAvg([input.model for input in inputs])\n", + " self.optimizer = [input.optimizer for input in inputs][0] # this is ok for sgd, for adaptive algos... maybe tricky\n", + "\n", + " write_metric(\"Aggregator\", \"train\", \"avg_loss\", self.average_loss, self.current_round)\n", + " print(\"Wrote TensorBoard information for Aggregator \")\n", + "\n", + " self.current_round += 1\n", + " if self.current_round < self.rounds:\n", + " self.next(self.aggregated_model_validation, foreach='collaborators', exclude=['private'])\n", + " else:\n", + " self.next(self.end)\n", + "\n", + " @aggregator\n", + " def end(self):\n", + " print(\"List of averaged training losses :\\n\", self.aggr_training_value_list)\n", + " print(f'This is the end of the flow')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 320, + "status": "ok", + "timestamp": 1695287312701, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "Ys03u1oZjGMr" + }, + "outputs": [], + "source": [ + "# Setup participants\n", + "aggregator = Aggregator()\n", + "aggregator.private_attributes = {}\n", + "\n", + "# Setup collaborators with private attributes\n", + "collaborator_names = ['Coll_1', 'Coll_2']\n", + "collaborators = [Collaborator(name=name) for name in collaborator_names]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 19815, + "status": "ok", + "timestamp": 1695287333716, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "TZtUP430tbR1", + "outputId": "e807d7fc-2310-4326-ed52-5eb96fc7e3fd" + }, + "outputs": [], + "source": [ + "for idx, collaborator in enumerate(collaborators):\n", + " local_train = deepcopy(train_dataset)\n", + " local_test = deepcopy(test_dataset)\n", + " test_l = len(local_test)\n", + " train_l = len(local_train)\n", + " local_train = train_dataset[idx*train_l//2: (idx+1)*train_l//2] # this is ok only for 2 collaborators....\n", + " local_test = test_dataset[idx*test_l//2: (idx+1)*test_l//2]\n", + " collaborator.private_attributes = {\n", + " 'train_loader': DataLoader(local_train, batch_size=BS, shuffle=True),\n", + " 'test_loader': DataLoader(local_test, batch_size=BS)\n", + " }\n", + "\n", + "local_runtime = LocalRuntime(aggregator=aggregator, collaborators=collaborators, backend='single_process')\n", + "print(f'Local runtime collaborators = {local_runtime.collaborators}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 12, + "status": "ok", + "timestamp": 1695287333716, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "88N3GHTgtbcw" + }, + "outputs": [], + "source": [ + "model = GNN(hidden=hidden,\n", + " in_features=dataset.num_features,\n", + " num_layers=3,\n", + " out_features=dataset[0].y.numel()).to(device)\n", + "best_model = None" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionInfo": { + "elapsed": 12, + "status": "ok", + "timestamp": 1695287333717, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "bNZmmlIRtbmQ" + }, + "outputs": [], + "source": [ + "optimizer = None\n", + "flflow = FederatedFlow(model, optimizer, rounds=n_epochs)\n", + "flflow.runtime = local_runtime" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "executionInfo": { + "elapsed": 188331, + "status": "ok", + "timestamp": 1695287522036, + "user": { + "displayName": "Andrea Zanetti", + "userId": "06472537082834906245" + }, + "user_tz": -120 + }, + "id": "E_LT7sPhuZAE", + "outputId": "b53b90e5-c938-4c46-fae9-48168006d0d9" + }, + "outputs": [], + "source": [ + "print(\"NOW CALLING .run -----------------------------------------------------------------------------------------------------\")\n", + "flflow.run()\n", + "print(\".run has finished-----------------------------------------------------------------------------------------------------\")\n", + "\n", + "print(f'\\nFinal aggregated model accuracy for {flflow.rounds} rounds of training: {flflow.aggregated_model_accuracy}')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "y6QOFkL3u6Eh" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyMXkR5CCf17dupZUmM/Nd1c", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/openfl-tutorials/experimental/Vertical_FL/Intro.ipynb b/openfl-tutorials/experimental/workflow/Vertical_FL/Intro.ipynb similarity index 96% rename from openfl-tutorials/experimental/Vertical_FL/Intro.ipynb rename to openfl-tutorials/experimental/workflow/Vertical_FL/Intro.ipynb index b456c2126e..9ccf62886b 100644 --- a/openfl-tutorials/experimental/Vertical_FL/Intro.ipynb +++ b/openfl-tutorials/experimental/workflow/Vertical_FL/Intro.ipynb @@ -27,9 +27,9 @@ "metadata": {}, "outputs": [], "source": [ - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator" + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator" ] }, { @@ -283,7 +283,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "openfl_env", "language": "python", "name": "python3" }, @@ -297,7 +297,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.16" + "version": "3.8.20" } }, "nbformat": 4, diff --git a/openfl-tutorials/experimental/Vertical_FL/TwoParty.ipynb b/openfl-tutorials/experimental/workflow/Vertical_FL/TwoParty.ipynb similarity index 96% rename from openfl-tutorials/experimental/Vertical_FL/TwoParty.ipynb rename to openfl-tutorials/experimental/workflow/Vertical_FL/TwoParty.ipynb index 96473e4491..a1e2886253 100644 --- a/openfl-tutorials/experimental/Vertical_FL/TwoParty.ipynb +++ b/openfl-tutorials/experimental/workflow/Vertical_FL/TwoParty.ipynb @@ -28,9 +28,9 @@ "from torchvision import datasets, transforms\n", "from torch import nn, optim\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "# Data preprocessing\n", "transform = transforms.Compose([transforms.ToTensor(),\n", @@ -254,7 +254,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "openfl_org", "language": "python", "name": "python3" }, @@ -268,7 +268,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.17" + "version": "3.8.20" } }, "nbformat": 4, diff --git a/openfl-tutorials/experimental/Vertical_FL/TwoPartyWorkspaceCreation.ipynb b/openfl-tutorials/experimental/workflow/Vertical_FL/TwoPartyWorkspaceCreation.ipynb similarity index 97% rename from openfl-tutorials/experimental/Vertical_FL/TwoPartyWorkspaceCreation.ipynb rename to openfl-tutorials/experimental/workflow/Vertical_FL/TwoPartyWorkspaceCreation.ipynb index 142db60fa4..733985d4aa 100644 --- a/openfl-tutorials/experimental/Vertical_FL/TwoPartyWorkspaceCreation.ipynb +++ b/openfl-tutorials/experimental/workflow/Vertical_FL/TwoPartyWorkspaceCreation.ipynb @@ -20,7 +20,7 @@ "##### High Level Overview of Methodology\n", "1. User annotates the relevant cells of the Jupyter notebook with `#| export` directive\n", "2. We then Leverage `nbdev` functionality to export these annotated cells of Jupyter notebook into a Python script\n", - "3. Utilize OpenFL experimental module `WorkspaceExport` to convert the Python script into a OpenFL workspace\n", + "3. Utilize OpenFL experimental workflow module `WorkspaceExport` to convert the Python script into a OpenFL workspace\n", "4. User can utilize the experimental `fx` commands to deploy and run the federation seamlessly\n", "\n", "\n", @@ -106,9 +106,9 @@ "from torchvision import datasets, transforms\n", "from torch import nn, optim\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "# Data preprocessing\n", "transform = transforms.Compose([transforms.ToTensor(),\n", @@ -353,7 +353,7 @@ "outputs": [], "source": [ "import os\n", - "from openfl.experimental.workspace_export import WorkspaceExport\n", + "from openfl.experimental.workflow.workspace_export import WorkspaceExport\n", "\n", "WorkspaceExport.export(\n", " notebook_path='./TwoPartyWorkspaceCreation.ipynb',\n", diff --git a/openfl-tutorials/experimental/Vision_Transformer/Workflow_Interface_102_Vision_Transformer.ipynb b/openfl-tutorials/experimental/workflow/Vision_Transformer/Workflow_Interface_102_Vision_Transformer.ipynb similarity index 98% rename from openfl-tutorials/experimental/Vision_Transformer/Workflow_Interface_102_Vision_Transformer.ipynb rename to openfl-tutorials/experimental/workflow/Vision_Transformer/Workflow_Interface_102_Vision_Transformer.ipynb index 55c6314a69..fcb174e39b 100644 --- a/openfl-tutorials/experimental/Vision_Transformer/Workflow_Interface_102_Vision_Transformer.ipynb +++ b/openfl-tutorials/experimental/workflow/Vision_Transformer/Workflow_Interface_102_Vision_Transformer.ipynb @@ -55,8 +55,8 @@ "!pip install -r requirements_vision_transformer.txt\n", "\n", "# Uncomment this if running in Google Colab\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow_interface_requirements.txt\n", - "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/Vision_Transformer/requirements_vision_transformer.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt\n", + "#!pip install -r https://raw.githubusercontent.com/intel/openfl/develop/openfl-tutorials/experimental/workflow/Vision_Transformer/requirements_vision_transformer.txt\n", "\n", "#import os\n", "#os.environ[\"USERNAME\"] = \"colab\"" @@ -295,9 +295,9 @@ "source": [ "from copy import deepcopy\n", "\n", - "from openfl.experimental.interface import FLSpec, Aggregator, Collaborator\n", - "from openfl.experimental.runtime import LocalRuntime\n", - "from openfl.experimental.placement import aggregator, collaborator\n", + "from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator\n", + "from openfl.experimental.workflow.runtime import LocalRuntime\n", + "from openfl.experimental.workflow.placement import aggregator, collaborator\n", "\n", "\n", "def FedAvg(models, weights=None):\n", diff --git a/openfl-tutorials/experimental/Vision_Transformer/images/pathmnist.png b/openfl-tutorials/experimental/workflow/Vision_Transformer/images/pathmnist.png similarity index 100% rename from openfl-tutorials/experimental/Vision_Transformer/images/pathmnist.png rename to openfl-tutorials/experimental/workflow/Vision_Transformer/images/pathmnist.png diff --git a/openfl-tutorials/experimental/Vision_Transformer/images/vision_transformer.png b/openfl-tutorials/experimental/workflow/Vision_Transformer/images/vision_transformer.png similarity index 100% rename from openfl-tutorials/experimental/Vision_Transformer/images/vision_transformer.png rename to openfl-tutorials/experimental/workflow/Vision_Transformer/images/vision_transformer.png diff --git a/openfl-tutorials/experimental/Vision_Transformer/images/workflow.png b/openfl-tutorials/experimental/workflow/Vision_Transformer/images/workflow.png similarity index 100% rename from openfl-tutorials/experimental/Vision_Transformer/images/workflow.png rename to openfl-tutorials/experimental/workflow/Vision_Transformer/images/workflow.png diff --git a/openfl-tutorials/experimental/Vision_Transformer/requirements_vision_transformer.txt b/openfl-tutorials/experimental/workflow/Vision_Transformer/requirements_vision_transformer.txt similarity index 100% rename from openfl-tutorials/experimental/Vision_Transformer/requirements_vision_transformer.txt rename to openfl-tutorials/experimental/workflow/Vision_Transformer/requirements_vision_transformer.txt diff --git a/openfl-tutorials/experimental/workflow_interface_requirements.txt b/openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt similarity index 100% rename from openfl-tutorials/experimental/workflow_interface_requirements.txt rename to openfl-tutorials/experimental/workflow/workflow_interface_requirements.txt diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/.workspace similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/.workspace diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/cols.yaml diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/data.yaml diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/defaults similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/defaults diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/plan.yaml similarity index 91% rename from openfl-workspace/experimental/101_torch_cnn_mnist/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/plan.yaml index 159d747cf3..b4a50d8c62 100644 --- a/openfl-workspace/experimental/101_torch_cnn_mnist/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.Aggregator + template : openfl.experimental.workflow.component.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.Collaborator + template : openfl.experimental.workflow.component.Collaborator settings : {} diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/requirements.txt similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/requirements.txt diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/__init__.py diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/src/collaborator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/collaborator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/src/collaborator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/collaborator_private_attrs.py diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/src/flow.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/flow.py similarity index 93% rename from openfl-workspace/experimental/101_torch_cnn_mnist/src/flow.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/flow.py index d7f5bb953c..277fe0d78f 100644 --- a/openfl-workspace/experimental/101_torch_cnn_mnist/src/flow.py +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/flow.py @@ -7,8 +7,8 @@ import torch import numpy as np -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator learning_rate = 0.01 momentum = 0.5 @@ -68,14 +68,14 @@ def inference(network, test_loader): return accuracy -def fedavg(models): +def fedavg(models, weights=None): new_model = models[0] state_dicts = [model.state_dict() for model in models] state_dict = new_model.state_dict() for key in models[1].state_dict(): - state_dict[key] = np.sum( - np.array([state[key] for state in state_dicts], dtype=object), axis=0 - ) / len(models) + state_dict[key] = torch.from_numpy(np.average([state[key].numpy() for state in state_dicts], + axis=0, + weights=weights)) new_model.load_state_dict(state_dict) return new_model diff --git a/openfl-workspace/experimental/101_torch_cnn_mnist/src/utils.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/utils.py similarity index 100% rename from openfl-workspace/experimental/101_torch_cnn_mnist/src/utils.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/101_torch_cnn_mnist/src/utils.py diff --git a/openfl-workspace/experimental/102_aggregator_validation/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/.workspace similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/.workspace diff --git a/openfl-workspace/experimental/102_aggregator_validation/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/cols.yaml diff --git a/openfl-workspace/experimental/102_aggregator_validation/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/data.yaml diff --git a/openfl-workspace/experimental/102_aggregator_validation/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/defaults similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/defaults diff --git a/openfl-workspace/experimental/102_aggregator_validation/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/plan.yaml similarity index 83% rename from openfl-workspace/experimental/102_aggregator_validation/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/plan.yaml index 11d15ec013..c42ce135c9 100644 --- a/openfl-workspace/experimental/102_aggregator_validation/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.Aggregator + template : openfl.experimental.workflow.component.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.Collaborator + template : openfl.experimental.workflow.component.Collaborator settings : {} diff --git a/openfl-workspace/experimental/102_aggregator_validation/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/requirements.txt similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/requirements.txt diff --git a/openfl-workspace/experimental/102_aggregator_validation/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/__init__.py diff --git a/openfl-workspace/experimental/102_aggregator_validation/src/aggregator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/aggregator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/src/aggregator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/aggregator_private_attrs.py diff --git a/openfl-workspace/experimental/102_aggregator_validation/src/collaborator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/collaborator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/src/collaborator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/collaborator_private_attrs.py diff --git a/openfl-workspace/experimental/102_aggregator_validation/src/flow.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/flow.py similarity index 97% rename from openfl-workspace/experimental/102_aggregator_validation/src/flow.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/flow.py index 451b39d131..1b6b7f65a2 100644 --- a/openfl-workspace/experimental/102_aggregator_validation/src/flow.py +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/flow.py @@ -5,8 +5,8 @@ from torch import nn from torch.nn import functional as F from torch import optim -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator import numpy as np diff --git a/openfl-workspace/experimental/102_aggregator_validation/src/utils.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/utils.py similarity index 100% rename from openfl-workspace/experimental/102_aggregator_validation/src/utils.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/102_aggregator_validation/src/utils.py diff --git a/openfl-workspace/experimental/104_keras_mnist/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/.workspace similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/.workspace diff --git a/openfl-workspace/experimental/104_keras_mnist/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/cols.yaml diff --git a/openfl-workspace/experimental/104_keras_mnist/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/data.yaml diff --git a/openfl-workspace/experimental/104_keras_mnist/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/defaults similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/defaults diff --git a/openfl-workspace/experimental/104_keras_mnist/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/plan.yaml similarity index 82% rename from openfl-workspace/experimental/104_keras_mnist/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/plan.yaml index 5418331059..dca3c92bbf 100644 --- a/openfl-workspace/experimental/104_keras_mnist/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.Aggregator + template : openfl.experimental.workflow.component.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.Collaborator + template : openfl.experimental.workflow.component.Collaborator settings : {} diff --git a/openfl-workspace/experimental/104_keras_mnist/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/requirements.txt similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/requirements.txt diff --git a/openfl-workspace/experimental/104_keras_mnist/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/__init__.py diff --git a/openfl-workspace/experimental/104_keras_mnist/src/collaborator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/collaborator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/src/collaborator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/collaborator_private_attrs.py diff --git a/openfl-workspace/experimental/104_keras_mnist/src/flow.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/flow.py similarity index 96% rename from openfl-workspace/experimental/104_keras_mnist/src/flow.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/flow.py index b5e183eb3a..6c59a87577 100644 --- a/openfl-workspace/experimental/104_keras_mnist/src/flow.py +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/flow.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator from tensorflow.keras.layers import Flatten, Dense, Dropout, Conv2D, MaxPool2D from tensorflow.keras.models import Sequential import numpy as np diff --git a/openfl-workspace/experimental/104_keras_mnist/src/utils.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/utils.py similarity index 100% rename from openfl-workspace/experimental/104_keras_mnist/src/utils.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/104_keras_mnist/src/utils.py diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/.workspace similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/.workspace diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/cols.yaml diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/data.yaml diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/defaults similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/defaults diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/plan.yaml similarity index 82% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/plan.yaml index 79b13ee2c1..0f37dc3a77 100644 --- a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.Aggregator + template : openfl.experimental.workflow.component.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.Collaborator + template : openfl.experimental.workflow.component.Collaborator settings : {} diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/requirements.txt similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/requirements.txt diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/__init__.py diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/aggregator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/aggregator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/aggregator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/aggregator_private_attrs.py diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/collaborator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/collaborator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/collaborator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/collaborator_private_attrs.py diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/flow.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/flow.py similarity index 98% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/flow.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/flow.py index 429412c209..593ac13d10 100644 --- a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/flow.py +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/flow.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator import torch.nn as nn import torch.nn.functional as F diff --git a/openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/utils.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/utils.py similarity index 100% rename from openfl-workspace/experimental/301_torch_cnn_mnist_watermarking/src/utils.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/301_torch_cnn_mnist_watermarking/src/utils.py diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/.workspace similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/.workspace diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/cols.yaml diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/data.yaml diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/defaults similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/defaults diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/plan.yaml similarity index 91% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/plan.yaml index 9be6450562..7f3a47bb39 100644 --- a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.Aggregator + template : openfl.experimental.workflow.component.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.Collaborator + template : openfl.experimental.workflow.component.Collaborator settings : {} diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/requirements.txt similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/requirements.txt diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/__init__.py diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/aggregator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/aggregator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/aggregator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/aggregator_private_attrs.py diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/collaborator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/collaborator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/collaborator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/collaborator_private_attrs.py diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/flow.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/flow.py similarity index 99% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/flow.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/flow.py index ef06c2cb84..d933d34a81 100644 --- a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/flow.py +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/flow.py @@ -16,8 +16,8 @@ import torch.optim as optim from torch import Tensor -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator device = 'cuda' if torch.cuda.is_available() else 'cpu' diff --git a/openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/utils.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/utils.py similarity index 100% rename from openfl-workspace/experimental/501_pytorch_tinyimagenet_transfer_learning/src/utils.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/501_pytorch_tinyimagenet_transfer_learning/src/utils.py diff --git a/openfl-workspace/experimental/template_workspace/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/.workspace similarity index 100% rename from openfl-workspace/experimental/template_workspace/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/.workspace diff --git a/openfl-workspace/experimental/template_workspace/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/template_workspace/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/cols.yaml diff --git a/openfl-workspace/experimental/template_workspace/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/template_workspace/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/data.yaml diff --git a/openfl-workspace/experimental/template_workspace/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/defaults similarity index 100% rename from openfl-workspace/experimental/template_workspace/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/defaults diff --git a/openfl-workspace/experimental/template_workspace/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/plan.yaml similarity index 78% rename from openfl-workspace/experimental/template_workspace/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/plan.yaml index f8892f66d8..302815dc54 100644 --- a/openfl-workspace/experimental/template_workspace/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/plan/plan.yaml @@ -3,13 +3,13 @@ aggregator: defaults: plan/defaults/aggregator.yaml - template: openfl.experimental.component.Aggregator + template: openfl.experimental.workflow.component.Aggregator settings: rounds_to_train: 1 collaborator: defaults: plan/defaults/collaborator.yaml - template: openfl.experimental.component.Collaborator + template: openfl.experimental.workflow.component.Collaborator settings: {} federated_flow: diff --git a/openfl-workspace/experimental/template_workspace/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/requirements.txt similarity index 100% rename from openfl-workspace/experimental/template_workspace/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/requirements.txt diff --git a/openfl-workspace/experimental/template_workspace/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/template_workspace/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/template_workspace/src/__init__.py diff --git a/openfl-workspace/experimental/vertical_fl/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/.workspace similarity index 100% rename from openfl-workspace/experimental/vertical_fl/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/.workspace diff --git a/openfl-workspace/experimental/vertical_fl/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/vertical_fl/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/cols.yaml diff --git a/openfl-workspace/experimental/vertical_fl/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/vertical_fl/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/data.yaml diff --git a/openfl-workspace/experimental/vertical_fl/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/defaults similarity index 100% rename from openfl-workspace/experimental/vertical_fl/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/defaults diff --git a/openfl-workspace/experimental/vertical_fl/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/plan.yaml similarity index 79% rename from openfl-workspace/experimental/vertical_fl/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/plan.yaml index 37b2c4be28..061afcc41d 100644 --- a/openfl-workspace/experimental/vertical_fl/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/openfl-workspace/experimental/vertical_fl/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/requirements.txt similarity index 100% rename from openfl-workspace/experimental/vertical_fl/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/requirements.txt diff --git a/openfl-workspace/experimental/vertical_fl/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/vertical_fl/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/src/__init__.py diff --git a/openfl-workspace/experimental/vertical_fl/src/utils.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/src/utils.py similarity index 100% rename from openfl-workspace/experimental/vertical_fl/src/utils.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/src/utils.py diff --git a/openfl-workspace/experimental/vertical_fl/src/workflow_interface_vertical_fl.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/src/workflow_interface_vertical_fl.py similarity index 95% rename from openfl-workspace/experimental/vertical_fl/src/workflow_interface_vertical_fl.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/src/workflow_interface_vertical_fl.py index 9b915e2e80..daee5c5cef 100644 --- a/openfl-workspace/experimental/vertical_fl/src/workflow_interface_vertical_fl.py +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl/src/workflow_interface_vertical_fl.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator class VerticalFlow(FLSpec): diff --git a/openfl-workspace/experimental/vertical_fl_two_party/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/.workspace similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/.workspace diff --git a/openfl-workspace/experimental/vertical_fl_two_party/plan/cols.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/cols.yaml similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/plan/cols.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/cols.yaml diff --git a/openfl-workspace/experimental/vertical_fl_two_party/plan/data.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/data.yaml similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/plan/data.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/data.yaml diff --git a/openfl-workspace/experimental/vertical_fl_two_party/plan/defaults b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/defaults similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/plan/defaults rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/defaults diff --git a/openfl-workspace/experimental/vertical_fl_two_party/plan/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/plan.yaml similarity index 80% rename from openfl-workspace/experimental/vertical_fl_two_party/plan/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/plan.yaml index 13a9d70088..f30c5481ea 100644 --- a/openfl-workspace/experimental/vertical_fl_two_party/plan/plan.yaml +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 10 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/openfl-workspace/experimental/vertical_fl_two_party/requirements.txt b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/requirements.txt similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/requirements.txt rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/requirements.txt diff --git a/openfl-workspace/experimental/vertical_fl_two_party/src/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/__init__.py similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/src/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/__init__.py diff --git a/openfl-workspace/experimental/vertical_fl_two_party/src/aggregator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/aggregator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/src/aggregator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/aggregator_private_attrs.py diff --git a/openfl-workspace/experimental/vertical_fl_two_party/src/collaborator_private_attrs.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/collaborator_private_attrs.py similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/src/collaborator_private_attrs.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/collaborator_private_attrs.py diff --git a/openfl-workspace/experimental/vertical_fl_two_party/src/utils.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/utils.py similarity index 100% rename from openfl-workspace/experimental/vertical_fl_two_party/src/utils.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/utils.py diff --git a/openfl-workspace/experimental/vertical_fl_two_party/src/workflow_interface_vertical_fl_two_party.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/workflow_interface_vertical_fl_two_party.py similarity index 94% rename from openfl-workspace/experimental/vertical_fl_two_party/src/workflow_interface_vertical_fl_two_party.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/workflow_interface_vertical_fl_two_party.py index 5066fbf92e..2efc7c70a8 100644 --- a/openfl-workspace/experimental/vertical_fl_two_party/src/workflow_interface_vertical_fl_two_party.py +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/vertical_fl_two_party/src/workflow_interface_vertical_fl_two_party.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator from torch import nn, optim diff --git a/openfl-workspace/experimental/workspace/.workspace b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/.workspace similarity index 100% rename from openfl-workspace/experimental/workspace/.workspace rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/.workspace diff --git a/openfl-workspace/experimental/workspace/__init__.py b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/__init__.py similarity index 100% rename from openfl-workspace/experimental/workspace/__init__.py rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/__init__.py diff --git a/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml new file mode 100644 index 0000000000..3750465e6b --- /dev/null +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml @@ -0,0 +1 @@ +template : openfl.experimental.workflow.component.Aggregator \ No newline at end of file diff --git a/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml new file mode 100644 index 0000000000..b0b0e15d22 --- /dev/null +++ b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml @@ -0,0 +1 @@ +template : openfl.experimental.workflow.component.Collaborator \ No newline at end of file diff --git a/openfl-workspace/experimental/workspace/plan/defaults/network.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/network.yaml similarity index 100% rename from openfl-workspace/experimental/workspace/plan/defaults/network.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/network.yaml diff --git a/openfl-workspace/experimental/workspace/plan/plans/default/base_plan_interactive_api.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/base_plan_interactive_api.yaml similarity index 100% rename from openfl-workspace/experimental/workspace/plan/plans/default/base_plan_interactive_api.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/base_plan_interactive_api.yaml diff --git a/openfl-workspace/experimental/workspace/plan/plans/default/plan.yaml b/openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/plan.yaml similarity index 100% rename from openfl-workspace/experimental/workspace/plan/plans/default/plan.yaml rename to openfl-workspace/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/plan.yaml diff --git a/openfl-workspace/experimental/workspace/plan/defaults/aggregator.yaml b/openfl-workspace/experimental/workspace/plan/defaults/aggregator.yaml deleted file mode 100644 index 78f0242dc6..0000000000 --- a/openfl-workspace/experimental/workspace/plan/defaults/aggregator.yaml +++ /dev/null @@ -1 +0,0 @@ -template : openfl.experimental.component.Aggregator \ No newline at end of file diff --git a/openfl-workspace/experimental/workspace/plan/defaults/collaborator.yaml b/openfl-workspace/experimental/workspace/plan/defaults/collaborator.yaml deleted file mode 100644 index 1c561cf5f5..0000000000 --- a/openfl-workspace/experimental/workspace/plan/defaults/collaborator.yaml +++ /dev/null @@ -1 +0,0 @@ -template : openfl.experimental.component.Collaborator \ No newline at end of file diff --git a/openfl/experimental/component/__init__.py b/openfl/experimental/component/__init__.py deleted file mode 100644 index 5de52dcfaa..0000000000 --- a/openfl/experimental/component/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.component package.""" - -# FIXME: Too much recursion -from openfl.experimental.component.aggregator import Aggregator -from openfl.experimental.component.collaborator import Collaborator diff --git a/openfl/experimental/component/aggregator/__init__.py b/openfl/experimental/component/aggregator/__init__.py deleted file mode 100644 index fd2f3482a0..0000000000 --- a/openfl/experimental/component/aggregator/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.component.aggregator package.""" - -# FIXME: Too much recursion. -from openfl.experimental.component.aggregator.aggregator import Aggregator diff --git a/openfl/experimental/component/collaborator/__init__.py b/openfl/experimental/component/collaborator/__init__.py deleted file mode 100644 index 9df89ee6f8..0000000000 --- a/openfl/experimental/component/collaborator/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.component.collaborator package.""" - -# FIXME: Too much recursion. -from openfl.experimental.component.collaborator.collaborator import Collaborator diff --git a/openfl/experimental/federated/__init__.py b/openfl/experimental/federated/__init__.py deleted file mode 100644 index 295380a6b6..0000000000 --- a/openfl/experimental/federated/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.federated package.""" - -# FIXME: Recursion! -from openfl.experimental.federated.plan import Plan diff --git a/openfl/experimental/interface/__init__.py b/openfl/experimental/interface/__init__.py deleted file mode 100644 index b2818a9a3d..0000000000 --- a/openfl/experimental/interface/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.interface package.""" - -from openfl.experimental.interface.fl_spec import FLSpec -from openfl.experimental.interface.participants import Aggregator, Collaborator diff --git a/openfl/experimental/placement/__init__.py b/openfl/experimental/placement/__init__.py deleted file mode 100644 index f5b65bd749..0000000000 --- a/openfl/experimental/placement/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.placement package.""" - -# FIXME: Unnecessary recursion. -from openfl.experimental.placement.placement import aggregator, collaborator diff --git a/openfl/experimental/runtime/__init__.py b/openfl/experimental/runtime/__init__.py deleted file mode 100644 index 1337f2cdbd..0000000000 --- a/openfl/experimental/runtime/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -""" openfl.experimental.runtime package Runtime class.""" - -from openfl.experimental.runtime.federated_runtime import FederatedRuntime -from openfl.experimental.runtime.local_runtime import LocalRuntime -from openfl.experimental.runtime.runtime import Runtime diff --git a/openfl/experimental/transport/__init__.py b/openfl/experimental/transport/__init__.py deleted file mode 100644 index b99fc5d1c0..0000000000 --- a/openfl/experimental/transport/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.transport package.""" -from openfl.experimental.transport.grpc import AggregatorGRPCClient, AggregatorGRPCServer diff --git a/openfl/experimental/transport/grpc/__init__.py b/openfl/experimental/transport/grpc/__init__.py deleted file mode 100644 index 10fe1042f9..0000000000 --- a/openfl/experimental/transport/grpc/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.transport.grpc package.""" - -from openfl.experimental.transport.grpc.aggregator_client import AggregatorGRPCClient -from openfl.experimental.transport.grpc.aggregator_server import AggregatorGRPCServer - - -# FIXME: Not the right place for exceptions -class ShardNotFoundError(Exception): - """Indicates that director has no information about that shard.""" diff --git a/openfl/experimental/utilities/__init__.py b/openfl/experimental/utilities/__init__.py deleted file mode 100644 index 650b0e2e13..0000000000 --- a/openfl/experimental/utilities/__init__.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2020-2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - - -"""openfl.experimental.utilities package.""" - -from openfl.experimental.utilities.exceptions import ( - ResourcesAllocationError, - ResourcesNotAvailableError, - SerializationError, -) -from openfl.experimental.utilities.metaflow_utils import MetaflowInterface -from openfl.experimental.utilities.resources import get_number_of_gpus -from openfl.experimental.utilities.runtime_utils import ( - check_resource_allocation, - checkpoint, - filter_attributes, - generate_artifacts, - parse_attrs, -) -from openfl.experimental.utilities.stream_redirect import ( - RedirectStdStream, - RedirectStdStreamBuffer, - RedirectStdStreamContext, -) -from openfl.experimental.utilities.transitions import ( - aggregator_to_collaborator, - collaborator_to_aggregator, - should_transfer, -) diff --git a/openfl/experimental/protocols/__init__.py b/openfl/experimental/workflow/__init__.py similarity index 64% rename from openfl/experimental/protocols/__init__.py rename to openfl/experimental/workflow/__init__.py index d92521aa47..a2700e94fc 100644 --- a/openfl/experimental/protocols/__init__.py +++ b/openfl/experimental/workflow/__init__.py @@ -2,4 +2,4 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.protocols module.""" +"""openfl experimental workflow package.""" diff --git a/openfl/experimental/workflow/component/__init__.py b/openfl/experimental/workflow/component/__init__.py new file mode 100644 index 0000000000..db588c6130 --- /dev/null +++ b/openfl/experimental/workflow/component/__init__.py @@ -0,0 +1,9 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.component package.""" + +# FIXME: Too much recursion +from openfl.experimental.workflow.component.aggregator import Aggregator +from openfl.experimental.workflow.component.collaborator import Collaborator diff --git a/openfl/experimental/workflow/component/aggregator/__init__.py b/openfl/experimental/workflow/component/aggregator/__init__.py new file mode 100644 index 0000000000..a0d6c0158c --- /dev/null +++ b/openfl/experimental/workflow/component/aggregator/__init__.py @@ -0,0 +1,8 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.component.aggregator package.""" + +# FIXME: Too much recursion. +from openfl.experimental.workflow.component.aggregator.aggregator import Aggregator diff --git a/openfl/experimental/component/aggregator/aggregator.py b/openfl/experimental/workflow/component/aggregator/aggregator.py similarity index 98% rename from openfl/experimental/component/aggregator/aggregator.py rename to openfl/experimental/workflow/component/aggregator/aggregator.py index 080190ac64..1e4d7b48e4 100644 --- a/openfl/experimental/component/aggregator/aggregator.py +++ b/openfl/experimental/workflow/component/aggregator/aggregator.py @@ -11,10 +11,10 @@ from threading import Event from typing import Any, Callable, Dict, List, Tuple -from openfl.experimental.interface import FLSpec -from openfl.experimental.runtime import FederatedRuntime -from openfl.experimental.utilities import aggregator_to_collaborator, checkpoint -from openfl.experimental.utilities.metaflow_utils import MetaflowInterface +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.runtime import FederatedRuntime +from openfl.experimental.workflow.utilities import aggregator_to_collaborator, checkpoint +from openfl.experimental.workflow.utilities.metaflow_utils import MetaflowInterface class Aggregator: diff --git a/openfl/experimental/workflow/component/collaborator/__init__.py b/openfl/experimental/workflow/component/collaborator/__init__.py new file mode 100644 index 0000000000..ebb1ff5e3a --- /dev/null +++ b/openfl/experimental/workflow/component/collaborator/__init__.py @@ -0,0 +1,8 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.component.collaborator package.""" + +# FIXME: Too much recursion. +from openfl.experimental.workflow.component.collaborator.collaborator import Collaborator diff --git a/openfl/experimental/component/collaborator/collaborator.py b/openfl/experimental/workflow/component/collaborator/collaborator.py similarity index 100% rename from openfl/experimental/component/collaborator/collaborator.py rename to openfl/experimental/workflow/component/collaborator/collaborator.py diff --git a/openfl/experimental/workflow/federated/__init__.py b/openfl/experimental/workflow/federated/__init__.py new file mode 100644 index 0000000000..f04dc01f87 --- /dev/null +++ b/openfl/experimental/workflow/federated/__init__.py @@ -0,0 +1,8 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.federated package.""" + +# FIXME: Recursion! +from openfl.experimental.workflow.federated.plan import Plan diff --git a/openfl/experimental/federated/plan/__init__.py b/openfl/experimental/workflow/federated/plan/__init__.py similarity index 70% rename from openfl/experimental/federated/plan/__init__.py rename to openfl/experimental/workflow/federated/plan/__init__.py index ee5325e40c..0db73072be 100644 --- a/openfl/experimental/federated/plan/__init__.py +++ b/openfl/experimental/workflow/federated/plan/__init__.py @@ -5,4 +5,4 @@ """Experimental Plan package.""" # FIXME: Too much recursion in namespace -from openfl.experimental.federated.plan.plan import Plan +from openfl.experimental.workflow.federated.plan.plan import Plan diff --git a/openfl/experimental/federated/plan/plan.py b/openfl/experimental/workflow/federated/plan/plan.py similarity index 98% rename from openfl/experimental/federated/plan/plan.py rename to openfl/experimental/workflow/federated/plan/plan.py index b184ad12e7..22f2e2e2cd 100644 --- a/openfl/experimental/federated/plan/plan.py +++ b/openfl/experimental/workflow/federated/plan/plan.py @@ -13,8 +13,8 @@ from yaml import SafeDumper, dump, safe_load -from openfl.experimental.interface.cli.cli_helper import WORKSPACE -from openfl.experimental.transport import AggregatorGRPCClient, AggregatorGRPCServer +from openfl.experimental.workflow.interface.cli.cli_helper import WORKSPACE +from openfl.experimental.workflow.transport import AggregatorGRPCClient, AggregatorGRPCServer from openfl.utilities.utils import getfqdn_env SETTINGS = "settings" @@ -249,7 +249,7 @@ def get_aggregator(self): """Get federation aggregator.""" defaults = self.config.get( "aggregator", - {TEMPLATE: "openfl.experimental.Aggregator", SETTINGS: {}}, + {TEMPLATE: "openfl.experimental.workflow.Aggregator", SETTINGS: {}}, ) defaults[SETTINGS]["aggregator_uuid"] = self.aggregator_uuid @@ -296,7 +296,7 @@ def get_collaborator( """Get collaborator.""" defaults = self.config.get( "collaborator", - {TEMPLATE: "openfl.experimental.Collaborator", SETTINGS: {}}, + {TEMPLATE: "openfl.experimental.workflow.Collaborator", SETTINGS: {}}, ) defaults[SETTINGS]["collaborator_name"] = collaborator_name diff --git a/openfl/experimental/workflow/interface/__init__.py b/openfl/experimental/workflow/interface/__init__.py new file mode 100644 index 0000000000..95bba172f6 --- /dev/null +++ b/openfl/experimental/workflow/interface/__init__.py @@ -0,0 +1,8 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.interface package.""" + +from openfl.experimental.workflow.interface.fl_spec import FLSpec +from openfl.experimental.workflow.interface.participants import Aggregator, Collaborator diff --git a/openfl/experimental/workspace_export/__init__.py b/openfl/experimental/workflow/interface/cli/__init__.py similarity index 52% rename from openfl/experimental/workspace_export/__init__.py rename to openfl/experimental/workflow/interface/cli/__init__.py index 6270cc890a..4137252704 100644 --- a/openfl/experimental/workspace_export/__init__.py +++ b/openfl/experimental/workflow/interface/cli/__init__.py @@ -2,4 +2,4 @@ # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.workspace_export.export import WorkspaceExport +"""openfl.experimental.workflow.interface.cli package.""" diff --git a/openfl/experimental/interface/cli/aggregator.py b/openfl/experimental/workflow/interface/cli/aggregator.py similarity index 98% rename from openfl/experimental/interface/cli/aggregator.py rename to openfl/experimental/workflow/interface/cli/aggregator.py index 707eacbabc..2af60af020 100644 --- a/openfl/experimental/interface/cli/aggregator.py +++ b/openfl/experimental/workflow/interface/cli/aggregator.py @@ -17,8 +17,8 @@ from openfl.cryptography.ca import sign_certificate from openfl.cryptography.io import get_csr_hash, read_crt, read_csr, read_key, write_crt, write_key from openfl.cryptography.participant import generate_csr -from openfl.experimental.federated.plan import Plan -from openfl.experimental.interface.cli.cli_helper import CERT_DIR +from openfl.experimental.workflow.federated.plan import Plan +from openfl.experimental.workflow.interface.cli.cli_helper import CERT_DIR from openfl.utilities import click_types from openfl.utilities.path_check import is_directory_traversal from openfl.utilities.utils import getfqdn_env diff --git a/openfl/experimental/interface/cli/cli_helper.py b/openfl/experimental/workflow/interface/cli/cli_helper.py similarity index 97% rename from openfl/experimental/interface/cli/cli_helper.py rename to openfl/experimental/workflow/interface/cli/cli_helper.py index 8cf992543e..65692d6c22 100644 --- a/openfl/experimental/interface/cli/cli_helper.py +++ b/openfl/experimental/workflow/interface/cli/cli_helper.py @@ -16,8 +16,8 @@ FX = argv[0] -SITEPACKS = Path(__file__).parent.parent.parent.parent.parent -WORKSPACE = SITEPACKS / "openfl-workspace" / "experimental" +SITEPACKS = Path(__file__).parent.parent.parent.parent.parent.parent +WORKSPACE = SITEPACKS / "openfl-workspace" / "experimental" / "workflow" / "AggregatorBasedWorkflow" TUTORIALS = SITEPACKS / "openfl-tutorials" OPENFL_USERDIR = Path.home() / ".openfl" CERT_DIR = Path("cert").absolute() diff --git a/openfl/experimental/interface/cli/collaborator.py b/openfl/experimental/workflow/interface/cli/collaborator.py similarity index 98% rename from openfl/experimental/interface/cli/collaborator.py rename to openfl/experimental/workflow/interface/cli/collaborator.py index 2b0911b523..7398f01536 100644 --- a/openfl/experimental/interface/cli/collaborator.py +++ b/openfl/experimental/workflow/interface/cli/collaborator.py @@ -22,8 +22,8 @@ from openfl.cryptography.ca import sign_certificate from openfl.cryptography.io import get_csr_hash, read_crt, read_csr, read_key, write_crt, write_key from openfl.cryptography.participant import generate_csr -from openfl.experimental.federated import Plan -from openfl.experimental.interface.cli.cli_helper import CERT_DIR +from openfl.experimental.workflow.federated import Plan +from openfl.experimental.workflow.interface.cli.cli_helper import CERT_DIR from openfl.utilities.path_check import is_directory_traversal from openfl.utilities.utils import rmtree diff --git a/openfl/experimental/interface/cli/experimental.py b/openfl/experimental/workflow/interface/cli/experimental.py similarity index 100% rename from openfl/experimental/interface/cli/experimental.py rename to openfl/experimental/workflow/interface/cli/experimental.py diff --git a/openfl/experimental/interface/cli/plan.py b/openfl/experimental/workflow/interface/cli/plan.py similarity index 98% rename from openfl/experimental/interface/cli/plan.py rename to openfl/experimental/workflow/interface/cli/plan.py index cb85406f97..532350aa92 100644 --- a/openfl/experimental/interface/cli/plan.py +++ b/openfl/experimental/workflow/interface/cli/plan.py @@ -10,7 +10,7 @@ from click import Path as ClickPath from click import echo, group, option, pass_context -from openfl.experimental.federated import Plan +from openfl.experimental.workflow.federated import Plan from openfl.utilities.path_check import is_directory_traversal from openfl.utilities.utils import getfqdn_env diff --git a/openfl/experimental/interface/cli/workspace.py b/openfl/experimental/workflow/interface/cli/workspace.py similarity index 98% rename from openfl/experimental/interface/cli/workspace.py rename to openfl/experimental/workflow/interface/cli/workspace.py index 21d5625f68..b2f7f54a73 100644 --- a/openfl/experimental/interface/cli/workspace.py +++ b/openfl/experimental/workflow/interface/cli/workspace.py @@ -22,15 +22,15 @@ from cryptography.hazmat.primitives import serialization from openfl.cryptography.ca import generate_root_cert, generate_signing_csr, sign_certificate -from openfl.experimental.federated.plan import Plan -from openfl.experimental.interface.cli.cli_helper import ( +from openfl.experimental.workflow.federated.plan import Plan +from openfl.experimental.workflow.interface.cli.cli_helper import ( CERT_DIR, OPENFL_USERDIR, WORKSPACE, print_tree, ) -from openfl.experimental.interface.cli.plan import freeze_plan -from openfl.experimental.workspace_export import WorkspaceExport +from openfl.experimental.workflow.interface.cli.plan import freeze_plan +from openfl.experimental.workflow.workspace_export import WorkspaceExport from openfl.utilities.path_check import is_directory_traversal from openfl.utilities.utils import rmtree from openfl.utilities.workspace import dump_requirements_file diff --git a/openfl/experimental/interface/fl_spec.py b/openfl/experimental/workflow/interface/fl_spec.py similarity index 98% rename from openfl/experimental/interface/fl_spec.py rename to openfl/experimental/workflow/interface/fl_spec.py index 273b356402..766dea553e 100644 --- a/openfl/experimental/interface/fl_spec.py +++ b/openfl/experimental/workflow/interface/fl_spec.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.interface.flspec module.""" +"""openfl.experimental.workflow.interface.flspec module.""" from __future__ import annotations @@ -10,7 +10,7 @@ from copy import deepcopy from typing import Callable, List, Type -from openfl.experimental.utilities import ( +from openfl.experimental.workflow.utilities import ( MetaflowInterface, SerializationError, aggregator_to_collaborator, diff --git a/openfl/experimental/interface/participants.py b/openfl/experimental/workflow/interface/participants.py similarity index 99% rename from openfl/experimental/interface/participants.py rename to openfl/experimental/workflow/interface/participants.py index f9ac7f5e93..618f40161d 100644 --- a/openfl/experimental/interface/participants.py +++ b/openfl/experimental/workflow/interface/participants.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.interface.participants module.""" +"""openfl.experimental.workflow.interface.participants module.""" from typing import Any, Callable, Dict, Optional diff --git a/openfl/experimental/workflow/placement/__init__.py b/openfl/experimental/workflow/placement/__init__.py new file mode 100644 index 0000000000..807d70dfb5 --- /dev/null +++ b/openfl/experimental/workflow/placement/__init__.py @@ -0,0 +1,8 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.placement package.""" + +# FIXME: Unnecessary recursion. +from openfl.experimental.workflow.placement.placement import aggregator, collaborator diff --git a/openfl/experimental/placement/placement.py b/openfl/experimental/workflow/placement/placement.py similarity index 97% rename from openfl/experimental/placement/placement.py rename to openfl/experimental/workflow/placement/placement.py index e2d37ef311..67458a0fca 100644 --- a/openfl/experimental/placement/placement.py +++ b/openfl/experimental/workflow/placement/placement.py @@ -5,7 +5,7 @@ import functools from typing import Callable -from openfl.experimental.utilities import RedirectStdStreamContext +from openfl.experimental.workflow.utilities import RedirectStdStreamContext def aggregator(f: Callable = None) -> Callable: diff --git a/openfl/experimental/protocols/README.md b/openfl/experimental/workflow/protocols/README.md similarity index 100% rename from openfl/experimental/protocols/README.md rename to openfl/experimental/workflow/protocols/README.md diff --git a/openfl/experimental/interface/cli/__init__.py b/openfl/experimental/workflow/protocols/__init__.py similarity index 60% rename from openfl/experimental/interface/cli/__init__.py rename to openfl/experimental/workflow/protocols/__init__.py index d792ffb54d..5ec3ea2877 100644 --- a/openfl/experimental/interface/cli/__init__.py +++ b/openfl/experimental/workflow/protocols/__init__.py @@ -2,4 +2,4 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.interface.cli package.""" +"""openfl.experimental.workflow.protocols module.""" diff --git a/openfl/experimental/protocols/aggregator.proto b/openfl/experimental/workflow/protocols/aggregator.proto similarity index 100% rename from openfl/experimental/protocols/aggregator.proto rename to openfl/experimental/workflow/protocols/aggregator.proto diff --git a/openfl/experimental/protocols/interceptors.py b/openfl/experimental/workflow/protocols/interceptors.py similarity index 100% rename from openfl/experimental/protocols/interceptors.py rename to openfl/experimental/workflow/protocols/interceptors.py diff --git a/openfl/experimental/workflow/runtime/__init__.py b/openfl/experimental/workflow/runtime/__init__.py new file mode 100644 index 0000000000..991792046e --- /dev/null +++ b/openfl/experimental/workflow/runtime/__init__.py @@ -0,0 +1,9 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +""" openfl.experimental.workflow.runtime package Runtime class.""" + +from openfl.experimental.workflow.runtime.federated_runtime import FederatedRuntime +from openfl.experimental.workflow.runtime.local_runtime import LocalRuntime +from openfl.experimental.workflow.runtime.runtime import Runtime diff --git a/openfl/experimental/runtime/federated_runtime.py b/openfl/experimental/workflow/runtime/federated_runtime.py similarity index 89% rename from openfl/experimental/runtime/federated_runtime.py rename to openfl/experimental/workflow/runtime/federated_runtime.py index 625d8d5716..d07d477580 100644 --- a/openfl/experimental/runtime/federated_runtime.py +++ b/openfl/experimental/workflow/runtime/federated_runtime.py @@ -2,17 +2,17 @@ # SPDX-License-Identifier: Apache-2.0 -""" openfl.experimental.runtime package LocalRuntime class.""" +""" openfl.experimental.workflow.runtime package LocalRuntime class.""" from __future__ import annotations from typing import TYPE_CHECKING -from openfl.experimental.runtime.runtime import Runtime +from openfl.experimental.workflow.runtime.runtime import Runtime if TYPE_CHECKING: - from openfl.experimental.interface import Aggregator - from openfl.experimental.interface import Collaborator + from openfl.experimental.workflow.interface import Aggregator + from openfl.experimental.workflow.interface import Collaborator from typing import List, Type diff --git a/openfl/experimental/runtime/local_runtime.py b/openfl/experimental/workflow/runtime/local_runtime.py similarity index 98% rename from openfl/experimental/runtime/local_runtime.py rename to openfl/experimental/workflow/runtime/local_runtime.py index 0e98b6b949..978a684d65 100644 --- a/openfl/experimental/runtime/local_runtime.py +++ b/openfl/experimental/workflow/runtime/local_runtime.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -""" openfl.experimental.runtime package LocalRuntime class.""" +""" openfl.experimental.workflow.runtime package LocalRuntime class.""" from __future__ import annotations import gc @@ -15,10 +15,10 @@ import ray -from openfl.experimental.interface.fl_spec import FLSpec -from openfl.experimental.interface.participants import Aggregator, Collaborator -from openfl.experimental.runtime.runtime import Runtime -from openfl.experimental.utilities import ( +from openfl.experimental.workflow.interface.fl_spec import FLSpec +from openfl.experimental.workflow.interface.participants import Aggregator, Collaborator +from openfl.experimental.workflow.runtime.runtime import Runtime +from openfl.experimental.workflow.utilities import ( ResourcesNotAvailableError, aggregator_to_collaborator, check_resource_allocation, @@ -419,7 +419,7 @@ def __get_aggregator_object(self, aggregator: Type[Aggregator]) -> Any: ({agg_cpus} < {total_available_cpus})." ) - interface_module = importlib.import_module("openfl.experimental.interface") + interface_module = importlib.import_module("openfl.experimental.workflow.interface") aggregator_class = getattr(interface_module, "Aggregator") aggregator_actor = ray.remote(aggregator_class).options( diff --git a/openfl/experimental/runtime/runtime.py b/openfl/experimental/workflow/runtime/runtime.py similarity index 92% rename from openfl/experimental/runtime/runtime.py rename to openfl/experimental/workflow/runtime/runtime.py index 3c8dd49a75..3cffeccafc 100644 --- a/openfl/experimental/runtime/runtime.py +++ b/openfl/experimental/workflow/runtime/runtime.py @@ -2,12 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 -""" openfl.experimental.runtime module Runtime class.""" +""" openfl.experimental.workflow.runtime module Runtime class.""" from typing import Callable, List -from openfl.experimental.interface.fl_spec import FLSpec -from openfl.experimental.interface.participants import Aggregator, Collaborator +from openfl.experimental.workflow.interface.fl_spec import FLSpec +from openfl.experimental.workflow.interface.participants import Aggregator, Collaborator class Runtime: diff --git a/openfl/experimental/workflow/transport/__init__.py b/openfl/experimental/workflow/transport/__init__.py new file mode 100644 index 0000000000..83c441b84f --- /dev/null +++ b/openfl/experimental/workflow/transport/__init__.py @@ -0,0 +1,6 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.transport package.""" +from openfl.experimental.workflow.transport.grpc import AggregatorGRPCClient, AggregatorGRPCServer diff --git a/openfl/experimental/workflow/transport/grpc/__init__.py b/openfl/experimental/workflow/transport/grpc/__init__.py new file mode 100644 index 0000000000..e849e35af9 --- /dev/null +++ b/openfl/experimental/workflow/transport/grpc/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.transport.grpc package.""" + +from openfl.experimental.workflow.transport.grpc.aggregator_client import AggregatorGRPCClient +from openfl.experimental.workflow.transport.grpc.aggregator_server import AggregatorGRPCServer + + +# FIXME: Not the right place for exceptions +class ShardNotFoundError(Exception): + """Indicates that director has no information about that shard.""" diff --git a/openfl/experimental/transport/grpc/aggregator_client.py b/openfl/experimental/workflow/transport/grpc/aggregator_client.py similarity index 98% rename from openfl/experimental/transport/grpc/aggregator_client.py rename to openfl/experimental/workflow/transport/grpc/aggregator_client.py index effdb105ae..61ee141323 100644 --- a/openfl/experimental/transport/grpc/aggregator_client.py +++ b/openfl/experimental/workflow/transport/grpc/aggregator_client.py @@ -10,8 +10,8 @@ import grpc -from openfl.experimental.protocols import aggregator_pb2, aggregator_pb2_grpc -from openfl.experimental.transport.grpc.grpc_channel_options import channel_options +from openfl.experimental.workflow.protocols import aggregator_pb2, aggregator_pb2_grpc +from openfl.experimental.workflow.transport.grpc.grpc_channel_options import channel_options from openfl.utilities import check_equal diff --git a/openfl/experimental/transport/grpc/aggregator_server.py b/openfl/experimental/workflow/transport/grpc/aggregator_server.py similarity index 97% rename from openfl/experimental/transport/grpc/aggregator_server.py rename to openfl/experimental/workflow/transport/grpc/aggregator_server.py index 5b6a18eb3c..557ae03cf2 100644 --- a/openfl/experimental/transport/grpc/aggregator_server.py +++ b/openfl/experimental/workflow/transport/grpc/aggregator_server.py @@ -12,8 +12,8 @@ from grpc import StatusCode, server, ssl_server_credentials -from openfl.experimental.protocols import aggregator_pb2, aggregator_pb2_grpc -from openfl.experimental.transport.grpc.grpc_channel_options import channel_options +from openfl.experimental.workflow.protocols import aggregator_pb2, aggregator_pb2_grpc +from openfl.experimental.workflow.transport.grpc.grpc_channel_options import channel_options from openfl.utilities import check_equal, check_is_in logger = logging.getLogger(__name__) diff --git a/openfl/experimental/transport/grpc/exceptions.py b/openfl/experimental/workflow/transport/grpc/exceptions.py similarity index 100% rename from openfl/experimental/transport/grpc/exceptions.py rename to openfl/experimental/workflow/transport/grpc/exceptions.py diff --git a/openfl/experimental/transport/grpc/grpc_channel_options.py b/openfl/experimental/workflow/transport/grpc/grpc_channel_options.py similarity index 100% rename from openfl/experimental/transport/grpc/grpc_channel_options.py rename to openfl/experimental/workflow/transport/grpc/grpc_channel_options.py diff --git a/openfl/experimental/workflow/utilities/__init__.py b/openfl/experimental/workflow/utilities/__init__.py new file mode 100644 index 0000000000..6b7069bc66 --- /dev/null +++ b/openfl/experimental/workflow/utilities/__init__.py @@ -0,0 +1,30 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +"""openfl.experimental.workflow.utilities package.""" + +from openfl.experimental.workflow.utilities.exceptions import ( + ResourcesAllocationError, + ResourcesNotAvailableError, + SerializationError, +) +from openfl.experimental.workflow.utilities.metaflow_utils import MetaflowInterface +from openfl.experimental.workflow.utilities.resources import get_number_of_gpus +from openfl.experimental.workflow.utilities.runtime_utils import ( + check_resource_allocation, + checkpoint, + filter_attributes, + generate_artifacts, + parse_attrs, +) +from openfl.experimental.workflow.utilities.stream_redirect import ( + RedirectStdStream, + RedirectStdStreamBuffer, + RedirectStdStreamContext, +) +from openfl.experimental.workflow.utilities.transitions import ( + aggregator_to_collaborator, + collaborator_to_aggregator, + should_transfer, +) diff --git a/openfl/experimental/utilities/exceptions.py b/openfl/experimental/workflow/utilities/exceptions.py similarity index 100% rename from openfl/experimental/utilities/exceptions.py rename to openfl/experimental/workflow/utilities/exceptions.py diff --git a/openfl/experimental/utilities/metaflow_utils.py b/openfl/experimental/workflow/utilities/metaflow_utils.py similarity index 99% rename from openfl/experimental/utilities/metaflow_utils.py rename to openfl/experimental/workflow/utilities/metaflow_utils.py index e13d4f1f90..21f567a88f 100644 --- a/openfl/experimental/utilities/metaflow_utils.py +++ b/openfl/experimental/workflow/utilities/metaflow_utils.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.utilities.metaflow_utils module.""" +"""openfl.experimental.workflow.utilities.metaflow_utils module.""" from __future__ import annotations @@ -29,7 +29,7 @@ from metaflow.task import MetaDatum if TYPE_CHECKING: - from openfl.experimental.interface import FLSpec + from openfl.experimental.workflow.interface import FLSpec import base64 import json diff --git a/openfl/experimental/utilities/resources.py b/openfl/experimental/workflow/utilities/resources.py similarity index 93% rename from openfl/experimental/utilities/resources.py rename to openfl/experimental/workflow/utilities/resources.py index c173439e5f..c1e9785829 100644 --- a/openfl/experimental/utilities/resources.py +++ b/openfl/experimental/workflow/utilities/resources.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.utilities.resources module.""" +"""openfl.experimental.workflow.utilities.resources module.""" from logging import getLogger from subprocess import PIPE, run diff --git a/openfl/experimental/utilities/runtime_utils.py b/openfl/experimental/workflow/utilities/runtime_utils.py similarity index 98% rename from openfl/experimental/utilities/runtime_utils.py rename to openfl/experimental/workflow/utilities/runtime_utils.py index d83de70086..bd4ce92cb0 100644 --- a/openfl/experimental/utilities/runtime_utils.py +++ b/openfl/experimental/workflow/utilities/runtime_utils.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.utilities package.""" +"""openfl.experimental.workflow.utilities package.""" import inspect import itertools @@ -10,7 +10,7 @@ import numpy as np -from openfl.experimental.utilities import ResourcesAllocationError +from openfl.experimental.workflow.utilities import ResourcesAllocationError def parse_attrs(ctx, exclude=[], reserved_words=["next", "runtime", "input"]): diff --git a/openfl/experimental/utilities/stream_redirect.py b/openfl/experimental/workflow/utilities/stream_redirect.py similarity index 97% rename from openfl/experimental/utilities/stream_redirect.py rename to openfl/experimental/workflow/utilities/stream_redirect.py index bbc8717633..a2f7b7fc3a 100644 --- a/openfl/experimental/utilities/stream_redirect.py +++ b/openfl/experimental/workflow/utilities/stream_redirect.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -"""openfl.experimental.utilities.stream_redirect module.""" +"""openfl.experimental.workflow.utilities.stream_redirect module.""" import io import sys diff --git a/openfl/experimental/utilities/transitions.py b/openfl/experimental/workflow/utilities/transitions.py similarity index 100% rename from openfl/experimental/utilities/transitions.py rename to openfl/experimental/workflow/utilities/transitions.py diff --git a/openfl/experimental/utilities/ui.py b/openfl/experimental/workflow/utilities/ui.py similarity index 96% rename from openfl/experimental/utilities/ui.py rename to openfl/experimental/workflow/utilities/ui.py index 7a670b05dc..1ac59d1f93 100644 --- a/openfl/experimental/utilities/ui.py +++ b/openfl/experimental/workflow/utilities/ui.py @@ -6,7 +6,7 @@ import webbrowser from pathlib import Path -from openfl.experimental.utilities.metaflow_utils import DefaultCard, FlowGraph +from openfl.experimental.workflow.utilities.metaflow_utils import DefaultCard, FlowGraph class InspectFlow: diff --git a/openfl/experimental/workflow/workspace_export/__init__.py b/openfl/experimental/workflow/workspace_export/__init__.py new file mode 100644 index 0000000000..f947a0fc36 --- /dev/null +++ b/openfl/experimental/workflow/workspace_export/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2020-2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +from openfl.experimental.workflow.workspace_export.export import WorkspaceExport diff --git a/openfl/experimental/workspace_export/export.py b/openfl/experimental/workflow/workspace_export/export.py similarity index 97% rename from openfl/experimental/workspace_export/export.py rename to openfl/experimental/workflow/workspace_export/export.py index aff53a59cd..e0cc893f17 100644 --- a/openfl/experimental/workspace_export/export.py +++ b/openfl/experimental/workflow/workspace_export/export.py @@ -17,7 +17,7 @@ import yaml from nbdev.export import nb_export -from openfl.experimental.interface.cli.cli_helper import print_tree +from openfl.experimental.workflow.interface.cli.cli_helper import print_tree class WorkspaceExport: @@ -44,8 +44,12 @@ def __init__(self, notebook_path: str, output_workspace: str) -> None: self.template_workspace_path = ( Path(f"{__file__}") - .parent.parent.parent.parent.joinpath( - "openfl-workspace", "experimental", "template_workspace" + .parent.parent.parent.parent.parent.joinpath( + "openfl-workspace", + "experimental", + "workflow", + "AggregatorBasedWorkflow", + "template_workspace", ) .resolve(strict=True) ) @@ -290,7 +294,9 @@ def generate_plan_yaml(self): """ Generates plan.yaml """ - flspec = getattr(importlib.import_module("openfl.experimental.interface"), "FLSpec") + flspec = getattr( + importlib.import_module("openfl.experimental.workflow.interface"), "FLSpec" + ) # Get flow classname _, self.flow_class_name = self.__get_class_name_and_sourcecode_from_parent_class(flspec) # Get expected arguments of flow class @@ -338,7 +344,7 @@ def generate_data_yaml(self): # If flow classname is not yet found if not hasattr(self, "flow_class_name"): flspec = getattr( - importlib.import_module("openfl.experimental.interface"), + importlib.import_module("openfl.experimental.workflow.interface"), "FLSpec", ) _, self.flow_class_name = self.__get_class_name_and_sourcecode_from_parent_class(flspec) diff --git a/openfl/interface/cli.py b/openfl/interface/cli.py index ff26eddc57..e497f47e9e 100755 --- a/openfl/interface/cli.py +++ b/openfl/interface/cli.py @@ -319,7 +319,7 @@ def entry(): root = Path(__file__).parent.resolve() if experimental.exists(): - root = root.parent.joinpath("experimental", "interface", "cli").resolve() + root = root.parent.joinpath("experimental", "workflow", "interface", "cli").resolve() work = Path.cwd().resolve() path.append(str(root)) diff --git a/openfl/interface/experimental.py b/openfl/interface/experimental.py index ead4c765a7..e2cf08aa78 100644 --- a/openfl/interface/experimental.py +++ b/openfl/interface/experimental.py @@ -35,6 +35,7 @@ def activate(): .joinpath( "openfl-tutorials", "experimental", + "workflow", "workflow_interface_requirements.txt", ) .resolve() diff --git a/setup.py b/setup.py index 9f87bf694c..4133fb69d0 100644 --- a/setup.py +++ b/setup.py @@ -102,20 +102,21 @@ def run(self): 'openfl.databases', 'openfl.databases.utilities', 'openfl.experimental', - 'openfl.experimental.workspace_export', - 'openfl.experimental.federated', - 'openfl.experimental.federated.plan', - 'openfl.experimental.component', - 'openfl.experimental.component.aggregator', - 'openfl.experimental.component.collaborator', - 'openfl.experimental.interface.cli', - 'openfl.experimental.interface', - 'openfl.experimental.placement', - 'openfl.experimental.runtime', - 'openfl.experimental.protocols', - 'openfl.experimental.transport', - 'openfl.experimental.transport.grpc', - 'openfl.experimental.utilities', + 'openfl.experimental.workflow', + 'openfl.experimental.workflow.workspace_export', + 'openfl.experimental.workflow.federated', + 'openfl.experimental.workflow.federated.plan', + 'openfl.experimental.workflow.component', + 'openfl.experimental.workflow.component.aggregator', + 'openfl.experimental.workflow.component.collaborator', + 'openfl.experimental.workflow.interface.cli', + 'openfl.experimental.workflow.interface', + 'openfl.experimental.workflow.placement', + 'openfl.experimental.workflow.runtime', + 'openfl.experimental.workflow.protocols', + 'openfl.experimental.workflow.transport', + 'openfl.experimental.workflow.transport.grpc', + 'openfl.experimental.workflow.utilities', 'openfl.federated', 'openfl.federated.data', 'openfl.federated.plan', diff --git a/tests/github/experimental/workspace/test_experimental_agg_based_workflow.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/test_experimental_agg_based_workflow.py similarity index 85% rename from tests/github/experimental/workspace/test_experimental_agg_based_workflow.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/test_experimental_agg_based_workflow.py index a92ac36a9b..0afd6aaa23 100644 --- a/tests/github/experimental/workspace/test_experimental_agg_based_workflow.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/test_experimental_agg_based_workflow.py @@ -8,16 +8,16 @@ from subprocess import check_call from concurrent.futures import ProcessPoolExecutor from openfl.utilities.utils import rmtree -from tests.github.experimental.workspace.utils import create_collaborator -from tests.github.experimental.workspace.utils import create_certified_workspace -from tests.github.experimental.workspace.utils import certify_aggregator +from tests.github.experimental.workflow.AggregatorBasedWorkflow.utils import create_collaborator +from tests.github.experimental.workflow.AggregatorBasedWorkflow.utils import create_certified_workspace +from tests.github.experimental.workflow.AggregatorBasedWorkflow.utils import certify_aggregator from openfl.utilities.utils import getfqdn_env if __name__ == '__main__': # Test the pipeline parser = argparse.ArgumentParser() workspace_choice = [] - with os.scandir('tests/github/experimental/workspace') as iterator: + with os.scandir('tests/github/experimental/workflow/AggregatorBasedWorkflow') as iterator: for entry in iterator: if entry.name not in ['__init__.py', 'workspace', 'default']: workspace_choice.append(entry.name) diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/.workspace diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/plan.yaml similarity index 82% rename from tests/github/experimental/workspace/testcase_datastore_cli/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/plan.yaml index b73d17e6d8..80cbd3833b 100644 --- a/tests/github/experimental/workspace/testcase_datastore_cli/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.Aggregator + template : openfl.experimental.workflow.component.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.Collaborator + template : openfl.experimental.workflow.component.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/src/collaborator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/collaborator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/src/collaborator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/collaborator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/src/testflow_datastore_cli.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/testflow_datastore_cli.py similarity index 98% rename from tests/github/experimental/workspace/testcase_datastore_cli/src/testflow_datastore_cli.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/testflow_datastore_cli.py index 4517ef0e87..69a07c448f 100644 --- a/tests/github/experimental/workspace/testcase_datastore_cli/src/testflow_datastore_cli.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/testflow_datastore_cli.py @@ -6,8 +6,8 @@ import torch.optim as optim import torch -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator batch_size_train = 64 learning_rate = 0.01 diff --git a/tests/github/experimental/workspace/testcase_datastore_cli/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_datastore_cli/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_datastore_cli/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_include_exclude/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_include_exclude/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/.workspace diff --git a/tests/github/experimental/workspace/testcase_include_exclude/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_include_exclude/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_include_exclude/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_include_exclude/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_include_exclude/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_include_exclude/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_include_exclude/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_include_exclude/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/plan.yaml index b0ccdd65c7..5f5550c1b7 100644 --- a/tests/github/experimental/workspace/testcase_include_exclude/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 10 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_include_exclude/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_include_exclude/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_include_exclude/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_include_exclude/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_include_exclude/src/testflow_include_exclude.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/src/testflow_include_exclude.py similarity index 98% rename from tests/github/experimental/workspace/testcase_include_exclude/src/testflow_include_exclude.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/src/testflow_include_exclude.py index 77eb7b9274..7e936dd329 100644 --- a/tests/github/experimental/workspace/testcase_include_exclude/src/testflow_include_exclude.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/src/testflow_include_exclude.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/workspace/testcase_include_exclude/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_include_exclude/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_include_exclude/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_internalloop/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_internalloop/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/.workspace diff --git a/tests/github/experimental/workspace/testcase_internalloop/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_internalloop/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_internalloop/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_internalloop/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_internalloop/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_internalloop/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_internalloop/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_internalloop/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/plan.yaml index 24327dce52..a1a80e633a 100644 --- a/tests/github/experimental/workspace/testcase_internalloop/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_internalloop/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_internalloop/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_internalloop/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_internalloop/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_internalloop/src/testflow_internalloop.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/src/testflow_internalloop.py similarity index 97% rename from tests/github/experimental/workspace/testcase_internalloop/src/testflow_internalloop.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/src/testflow_internalloop.py index 3661b1c4d0..219324eb2b 100644 --- a/tests/github/experimental/workspace/testcase_internalloop/src/testflow_internalloop.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/src/testflow_internalloop.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface.fl_spec import FLSpec -from openfl.experimental.placement.placement import aggregator, collaborator +from openfl.experimental.workflow.interface.fl_spec import FLSpec +from openfl.experimental.workflow.placement.placement import aggregator, collaborator import numpy as np diff --git a/tests/github/experimental/workspace/testcase_internalloop/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_internalloop/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_internalloop/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/.workspace diff --git a/tests/github/experimental/workspace/testcase_private_attributes/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_private_attributes/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_private_attributes/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/plan.yaml index b5ab688b84..affeffa55e 100644 --- a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 10 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_private_attributes/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_private_attributes/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes/src/aggregator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/aggregator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/src/aggregator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/aggregator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes/src/collaborator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/collaborator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/src/collaborator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/collaborator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes/src/testflow_privateattributes.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/testflow_privateattributes.py similarity index 97% rename from tests/github/experimental/workspace/testcase_private_attributes/src/testflow_privateattributes.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/testflow_privateattributes.py index d59f9b1100..0c7c9cf5ad 100644 --- a/tests/github/experimental/workspace/testcase_private_attributes/src/testflow_privateattributes.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/testflow_privateattributes.py @@ -1,9 +1,9 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.component import Aggregator -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.component import Aggregator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/workspace/testcase_private_attributes/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/.workspace diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_private_attributes/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_private_attributes/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/plan.yaml index b5ab688b84..affeffa55e 100644 --- a/tests/github/experimental/workspace/testcase_private_attributes/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 10 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/aggregator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/aggregator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/aggregator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/aggregator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/collaborator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/collaborator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/collaborator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/collaborator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/testflow_privateattributes.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/testflow_privateattributes.py similarity index 97% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/testflow_privateattributes.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/testflow_privateattributes.py index 70a600a2e7..2e7b64e09c 100644 --- a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/testflow_privateattributes.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/testflow_privateattributes.py @@ -1,9 +1,9 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.component import Aggregator -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.component import Aggregator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_with_both_options/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/.workspace diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/plan.yaml index b5ab688b84..affeffa55e 100644 --- a/tests/github/experimental/workspace/testcase_private_attributes_initialization_with_both_options/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 10 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/aggregator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/aggregator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/aggregator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/aggregator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/collaborator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/collaborator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/collaborator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/collaborator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/testflow_privateattributes.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/testflow_privateattributes.py similarity index 97% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/testflow_privateattributes.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/testflow_privateattributes.py index f9888657b0..5796de9ded 100644 --- a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/testflow_privateattributes.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/testflow_privateattributes.py @@ -1,9 +1,9 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.component import Aggregator -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.component import Aggregator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_private_attributes_initialization_without_callable/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_private_attributes_initialization_without_callable/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_reference/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/.workspace diff --git a/tests/github/experimental/workspace/testcase_reference/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_reference/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_reference/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_reference/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/plan.yaml similarity index 78% rename from tests/github/experimental/workspace/testcase_reference/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/plan.yaml index 9a62ceb8fb..cde9d0aa5f 100644 --- a/tests/github/experimental/workspace/testcase_reference/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 2 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_reference/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_reference/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_reference/src/collaborator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/collaborator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/src/collaborator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/collaborator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_reference/src/testflow_reference.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/testflow_reference.py similarity index 98% rename from tests/github/experimental/workspace/testcase_reference/src/testflow_reference.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/testflow_reference.py index 98ad6686b4..55b08a7323 100644 --- a/tests/github/experimental/workspace/testcase_reference/src/testflow_reference.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/testflow_reference.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator import io import math diff --git a/tests/github/experimental/workspace/testcase_reference/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_reference/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/.workspace diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/plan.yaml index d54aed913a..0188de3557 100644 --- a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 2 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/src/testflow_reference_with_include_exclude.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/src/testflow_reference_with_include_exclude.py similarity index 98% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/src/testflow_reference_with_include_exclude.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/src/testflow_reference_with_include_exclude.py index 7799c493bc..cfc8b18f78 100644 --- a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/src/testflow_reference_with_include_exclude.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/src/testflow_reference_with_include_exclude.py @@ -1,8 +1,8 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator import torch.nn as nn import torch.optim as optim diff --git a/tests/github/experimental/workspace/testcase_reference_with_include_exclude/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_reference_with_include_exclude/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_reference_with_include_exclude/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/.workspace diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/plan.yaml index ff8ae1a463..a64ef584f3 100644 --- a/tests/github/experimental/workspace/testcase_subset_of_collaborators/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 1 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/src/collaborator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/collaborator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/src/collaborator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/collaborator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/src/testflow_subset_of_collaborators.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/testflow_subset_of_collaborators.py similarity index 96% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/src/testflow_subset_of_collaborators.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/testflow_subset_of_collaborators.py index a6aa013e4e..22fa7e2836 100644 --- a/tests/github/experimental/workspace/testcase_subset_of_collaborators/src/testflow_subset_of_collaborators.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/testflow_subset_of_collaborators.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: Apache-2.0 from metaflow import Flow -from openfl.experimental.interface.fl_spec import FLSpec -from openfl.experimental.placement.placement import aggregator, collaborator +from openfl.experimental.workflow.interface.fl_spec import FLSpec +from openfl.experimental.workflow.placement.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/workspace/testcase_subset_of_collaborators/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_subset_of_collaborators/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_subset_of_collaborators/src/utils.py diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/.workspace similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/.workspace diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/plan/cols.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/cols.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/plan/cols.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/cols.yaml diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/plan/data.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/data.yaml similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/plan/data.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/data.yaml diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/plan/defaults b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/defaults similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/plan/defaults rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/defaults diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/plan/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/plan.yaml similarity index 79% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/plan/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/plan.yaml index 26c25f2c62..ba8f6490e8 100644 --- a/tests/github/experimental/workspace/testcase_validate_particpant_names/plan/plan.yaml +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/plan/plan.yaml @@ -3,7 +3,7 @@ aggregator : defaults : plan/defaults/aggregator.yaml - template : openfl.experimental.component.aggregator.Aggregator + template : openfl.experimental.workflow.component.aggregator.Aggregator settings : rounds_to_train : 10 log_metric_callback : @@ -12,7 +12,7 @@ aggregator : collaborator : defaults : plan/defaults/collaborator.yaml - template : openfl.experimental.component.collaborator.Collaborator + template : openfl.experimental.workflow.component.collaborator.Collaborator settings : {} diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/requirements.txt b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/requirements.txt similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/requirements.txt rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/requirements.txt diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/src/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/__init__.py similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/src/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/__init__.py diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/src/aggregator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/aggregator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/src/aggregator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/aggregator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/src/collaborator_private_attrs.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/collaborator_private_attrs.py similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/src/collaborator_private_attrs.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/collaborator_private_attrs.py diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/src/testflow_participant_name.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/testflow_participant_name.py similarity index 97% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/src/testflow_participant_name.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/testflow_participant_name.py index 5767d2162b..5b79dd5544 100644 --- a/tests/github/experimental/workspace/testcase_validate_particpant_names/src/testflow_participant_name.py +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/testflow_participant_name.py @@ -1,9 +1,9 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.component import Aggregator -from openfl.experimental.interface import FLSpec -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.component import Aggregator +from openfl.experimental.workflow.interface import FLSpec +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/workspace/testcase_validate_particpant_names/src/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/utils.py similarity index 100% rename from tests/github/experimental/workspace/testcase_validate_particpant_names/src/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/testcase_validate_particpant_names/src/utils.py diff --git a/tests/github/experimental/workspace/utils.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/utils.py similarity index 100% rename from tests/github/experimental/workspace/utils.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/utils.py diff --git a/tests/github/experimental/workspace/workspace/.workspace b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/.workspace similarity index 100% rename from tests/github/experimental/workspace/workspace/.workspace rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/.workspace diff --git a/tests/github/experimental/workspace/workspace/__init__.py b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/__init__.py similarity index 100% rename from tests/github/experimental/workspace/workspace/__init__.py rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/__init__.py diff --git a/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml new file mode 100644 index 0000000000..3750465e6b --- /dev/null +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/aggregator.yaml @@ -0,0 +1 @@ +template : openfl.experimental.workflow.component.Aggregator \ No newline at end of file diff --git a/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml new file mode 100644 index 0000000000..b0b0e15d22 --- /dev/null +++ b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/collaborator.yaml @@ -0,0 +1 @@ +template : openfl.experimental.workflow.component.Collaborator \ No newline at end of file diff --git a/tests/github/experimental/workspace/workspace/plan/defaults/network.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/network.yaml similarity index 100% rename from tests/github/experimental/workspace/workspace/plan/defaults/network.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/defaults/network.yaml diff --git a/tests/github/experimental/workspace/workspace/plan/plans/default/base_plan_interactive_api.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/base_plan_interactive_api.yaml similarity index 100% rename from tests/github/experimental/workspace/workspace/plan/plans/default/base_plan_interactive_api.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/base_plan_interactive_api.yaml diff --git a/tests/github/experimental/workspace/workspace/plan/plans/default/plan.yaml b/tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/plan.yaml similarity index 100% rename from tests/github/experimental/workspace/workspace/plan/plans/default/plan.yaml rename to tests/github/experimental/workflow/AggregatorBasedWorkflow/workspace/plan/plans/default/plan.yaml diff --git a/tests/github/experimental/requirements_experimental_localruntime_tests.txt b/tests/github/experimental/workflow/LocalRuntime/requirements_experimental_localruntime_tests.txt similarity index 100% rename from tests/github/experimental/requirements_experimental_localruntime_tests.txt rename to tests/github/experimental/workflow/LocalRuntime/requirements_experimental_localruntime_tests.txt diff --git a/tests/github/experimental/testflow_datastore_cli.py b/tests/github/experimental/workflow/LocalRuntime/testflow_datastore_cli.py similarity index 98% rename from tests/github/experimental/testflow_datastore_cli.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_datastore_cli.py index 6a51d1364b..1dc792a413 100644 --- a/tests/github/experimental/testflow_datastore_cli.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_datastore_cli.py @@ -9,9 +9,9 @@ from copy import deepcopy -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator batch_size_train = 64 learning_rate = 0.01 diff --git a/tests/github/experimental/testflow_exclude.py b/tests/github/experimental/workflow/LocalRuntime/testflow_exclude.py similarity index 96% rename from tests/github/experimental/testflow_exclude.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_exclude.py index 1b5b14f1ff..306960d1ca 100644 --- a/tests/github/experimental/testflow_exclude.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_exclude.py @@ -2,9 +2,9 @@ # SPDX-License-Identifier: Apache-2.0 import sys -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/testflow_include.py b/tests/github/experimental/workflow/LocalRuntime/testflow_include.py similarity index 96% rename from tests/github/experimental/testflow_include.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_include.py index 8403b557c3..8b5ce29c6f 100644 --- a/tests/github/experimental/testflow_include.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_include.py @@ -2,9 +2,9 @@ # SPDX-License-Identifier: Apache-2.0 import sys -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/testflow_include_exclude.py b/tests/github/experimental/workflow/LocalRuntime/testflow_include_exclude.py similarity index 97% rename from tests/github/experimental/testflow_include_exclude.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_include_exclude.py index 7561605d10..4754a48426 100644 --- a/tests/github/experimental/testflow_include_exclude.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_include_exclude.py @@ -2,9 +2,9 @@ # SPDX-License-Identifier: Apache-2.0 import sys -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/testflow_internalloop.py b/tests/github/experimental/workflow/LocalRuntime/testflow_internalloop.py similarity index 96% rename from tests/github/experimental/testflow_internalloop.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_internalloop.py index 140bae5214..a27af8c3ad 100644 --- a/tests/github/experimental/testflow_internalloop.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_internalloop.py @@ -1,10 +1,10 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface.fl_spec import FLSpec -from openfl.experimental.interface.participants import Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement.placement import aggregator, collaborator +from openfl.experimental.workflow.interface.fl_spec import FLSpec +from openfl.experimental.workflow.interface.participants import Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement.placement import aggregator, collaborator import numpy as np import sys diff --git a/tests/github/experimental/testflow_privateattributes.py b/tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes.py similarity index 97% rename from tests/github/experimental/testflow_privateattributes.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes.py index 56e3abccff..2b4be06f15 100644 --- a/tests/github/experimental/testflow_privateattributes.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes.py @@ -3,9 +3,9 @@ import sys import numpy as np -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/testflow_privateattributes_initialization_with_both_options.py b/tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes_initialization_with_both_options.py similarity index 97% rename from tests/github/experimental/testflow_privateattributes_initialization_with_both_options.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes_initialization_with_both_options.py index 54c7dcdfe4..168a4953c2 100644 --- a/tests/github/experimental/testflow_privateattributes_initialization_with_both_options.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes_initialization_with_both_options.py @@ -3,9 +3,9 @@ import sys import numpy as np -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/testflow_privateattributes_initialization_without_callable.py b/tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes_initialization_without_callable.py similarity index 97% rename from tests/github/experimental/testflow_privateattributes_initialization_without_callable.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes_initialization_without_callable.py index dba021eb68..3f0da6060e 100644 --- a/tests/github/experimental/testflow_privateattributes_initialization_without_callable.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_privateattributes_initialization_without_callable.py @@ -3,9 +3,9 @@ import sys import numpy as np -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator class bcolors: # NOQA: N801 diff --git a/tests/github/experimental/testflow_reference.py b/tests/github/experimental/workflow/LocalRuntime/testflow_reference.py similarity index 98% rename from tests/github/experimental/testflow_reference.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_reference.py index ed93d1c7ca..de9b100d50 100644 --- a/tests/github/experimental/testflow_reference.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_reference.py @@ -1,9 +1,9 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator import sys import io diff --git a/tests/github/experimental/testflow_reference_with_exclude.py b/tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_exclude.py similarity index 97% rename from tests/github/experimental/testflow_reference_with_exclude.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_exclude.py index 0b5ffa93b7..ce6aeb1701 100644 --- a/tests/github/experimental/testflow_reference_with_exclude.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_exclude.py @@ -1,9 +1,9 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator import sys import torch.nn as nn diff --git a/tests/github/experimental/testflow_reference_with_include.py b/tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_include.py similarity index 97% rename from tests/github/experimental/testflow_reference_with_include.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_include.py index 954b20ae5a..c3757d9f96 100644 --- a/tests/github/experimental/testflow_reference_with_include.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_reference_with_include.py @@ -1,9 +1,9 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface import FLSpec, Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement import aggregator, collaborator +from openfl.experimental.workflow.interface import FLSpec, Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement import aggregator, collaborator import sys import torch.nn as nn diff --git a/tests/github/experimental/testflow_subset_of_collaborators.py b/tests/github/experimental/workflow/LocalRuntime/testflow_subset_of_collaborators.py similarity index 95% rename from tests/github/experimental/testflow_subset_of_collaborators.py rename to tests/github/experimental/workflow/LocalRuntime/testflow_subset_of_collaborators.py index 3344dbc9ad..cb031900c1 100644 --- a/tests/github/experimental/testflow_subset_of_collaborators.py +++ b/tests/github/experimental/workflow/LocalRuntime/testflow_subset_of_collaborators.py @@ -1,10 +1,10 @@ # Copyright (C) 2020-2023 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -from openfl.experimental.interface.fl_spec import FLSpec -from openfl.experimental.interface.participants import Aggregator, Collaborator -from openfl.experimental.runtime import LocalRuntime -from openfl.experimental.placement.placement import aggregator, collaborator +from openfl.experimental.workflow.interface.fl_spec import FLSpec +from openfl.experimental.workflow.interface.participants import Aggregator, Collaborator +from openfl.experimental.workflow.runtime import LocalRuntime +from openfl.experimental.workflow.placement.placement import aggregator, collaborator from metaflow import Step import random import sys diff --git a/tests/github/experimental/workspace/workspace/plan/defaults/aggregator.yaml b/tests/github/experimental/workspace/workspace/plan/defaults/aggregator.yaml deleted file mode 100644 index 78f0242dc6..0000000000 --- a/tests/github/experimental/workspace/workspace/plan/defaults/aggregator.yaml +++ /dev/null @@ -1 +0,0 @@ -template : openfl.experimental.component.Aggregator \ No newline at end of file diff --git a/tests/github/experimental/workspace/workspace/plan/defaults/collaborator.yaml b/tests/github/experimental/workspace/workspace/plan/defaults/collaborator.yaml deleted file mode 100644 index 1c561cf5f5..0000000000 --- a/tests/github/experimental/workspace/workspace/plan/defaults/collaborator.yaml +++ /dev/null @@ -1 +0,0 @@ -template : openfl.experimental.component.Collaborator \ No newline at end of file From c25d144e4c8d0911d9b1615729ce7e0c5d4f69c9 Mon Sep 17 00:00:00 2001 From: Shailesh Tanwar <135304487+tanwarsh@users.noreply.github.com> Date: Sat, 30 Nov 2024 16:05:32 +0530 Subject: [PATCH 3/3] Fix for 'importlib' has no attribute 'util' (#1180) * fix for AttributeError: module 'importlib' has no attribute 'util' Signed-off-by: yes * formatting fix Signed-off-by: yes --------- Signed-off-by: yes --- openfl/federated/__init__.py | 8 ++++---- openfl/federated/data/__init__.py | 10 +++++----- openfl/federated/task/__init__.py | 10 +++++----- openfl/native/native.py | 4 ++-- openfl/pipelines/__init__.py | 4 ++-- openfl/utilities/optimizers/keras/__init__.py | 4 ++-- openfl/utilities/optimizers/torch/__init__.py | 4 ++-- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/openfl/federated/__init__.py b/openfl/federated/__init__.py index ea24e0ddfa..369ca3b54f 100644 --- a/openfl/federated/__init__.py +++ b/openfl/federated/__init__.py @@ -4,23 +4,23 @@ """openfl.federated package.""" -import importlib +from importlib import util from openfl.federated.data import DataLoader # NOQA from openfl.federated.plan import Plan # NOQA from openfl.federated.task import TaskRunner # NOQA -if importlib.util.find_spec("tensorflow") is not None: +if util.find_spec("tensorflow") is not None: from openfl.federated.data import FederatedDataSet # NOQA from openfl.federated.data import KerasDataLoader, TensorFlowDataLoader from openfl.federated.task import FederatedModel # NOQA from openfl.federated.task import KerasTaskRunner, TensorFlowTaskRunner -if importlib.util.find_spec("torch") is not None: +if util.find_spec("torch") is not None: from openfl.federated.data import FederatedDataSet # NOQA from openfl.federated.data import PyTorchDataLoader from openfl.federated.task import FederatedModel # NOQA from openfl.federated.task import PyTorchTaskRunner -if importlib.util.find_spec("xgboost") is not None: +if util.find_spec("xgboost") is not None: from openfl.federated.data import FederatedDataSet # NOQA from openfl.federated.data import XGBoostDataLoader from openfl.federated.task import FederatedModel # NOQA diff --git a/openfl/federated/data/__init__.py b/openfl/federated/data/__init__.py index 91bb604b62..67cfcc094e 100644 --- a/openfl/federated/data/__init__.py +++ b/openfl/federated/data/__init__.py @@ -4,26 +4,26 @@ """Data package.""" -import importlib +from importlib import util from warnings import catch_warnings, simplefilter with catch_warnings(): simplefilter(action="ignore", category=FutureWarning) - if importlib.util.find_spec("tensorflow") is not None: + if util.find_spec("tensorflow") is not None: # ignore deprecation warnings in command-line interface import tensorflow # NOQA from openfl.federated.data.loader import DataLoader # NOQA -if importlib.util.find_spec("tensorflow") is not None: +if util.find_spec("tensorflow") is not None: from openfl.federated.data.federated_data import FederatedDataSet # NOQA from openfl.federated.data.loader_keras import KerasDataLoader # NOQA from openfl.federated.data.loader_tf import TensorFlowDataLoader # NOQA -if importlib.util.find_spec("torch") is not None: +if util.find_spec("torch") is not None: from openfl.federated.data.federated_data import FederatedDataSet # NOQA from openfl.federated.data.loader_pt import PyTorchDataLoader # NOQA -if importlib.util.find_spec("xgboost") is not None: +if util.find_spec("xgboost") is not None: from openfl.federated.data.federated_data import FederatedDataSet # NOQA from openfl.federated.data.loader_xgb import XGBoostDataLoader # NOQA diff --git a/openfl/federated/task/__init__.py b/openfl/federated/task/__init__.py index 8b29264128..bdb6313e61 100644 --- a/openfl/federated/task/__init__.py +++ b/openfl/federated/task/__init__.py @@ -4,24 +4,24 @@ """Task package.""" -import importlib +from importlib import util from warnings import catch_warnings, simplefilter with catch_warnings(): simplefilter(action="ignore", category=FutureWarning) - if importlib.util.find_spec("tensorflow") is not None: + if util.find_spec("tensorflow") is not None: # ignore deprecation warnings in command-line interface import tensorflow # NOQA from openfl.federated.task.runner import TaskRunner # NOQA -if importlib.util.find_spec("tensorflow") is not None: +if util.find_spec("tensorflow") is not None: from openfl.federated.task.fl_model import FederatedModel # NOQA from openfl.federated.task.runner_keras import KerasTaskRunner # NOQA from openfl.federated.task.runner_tf import TensorFlowTaskRunner # NOQA -if importlib.util.find_spec("torch") is not None: +if util.find_spec("torch") is not None: from openfl.federated.task.fl_model import FederatedModel # NOQA from openfl.federated.task.runner_pt import PyTorchTaskRunner # NOQA -if importlib.util.find_spec("xgboost") is not None: +if util.find_spec("xgboost") is not None: from openfl.federated.task.fl_model import FederatedModel # NOQA from openfl.federated.task.runner_xgb import XGBoostTaskRunner # NOQA diff --git a/openfl/native/native.py b/openfl/native/native.py index 88b8c5f426..c266c73ac8 100644 --- a/openfl/native/native.py +++ b/openfl/native/native.py @@ -7,11 +7,11 @@ This file defines openfl entrypoints to be used directly through python (not CLI) """ -import importlib import json import logging import os from copy import copy +from importlib import util from logging import basicConfig, getLogger from pathlib import Path from sys import path @@ -164,7 +164,7 @@ def setup_logging(level="INFO", log_file=None): """ # Setup logging - if importlib.util.find_spec("tensorflow") is not None: + if util.find_spec("tensorflow") is not None: import tensorflow as tf # pylint: disable=import-outside-toplevel tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) diff --git a/openfl/pipelines/__init__.py b/openfl/pipelines/__init__.py index f8e7b3e549..1e549fd3c4 100644 --- a/openfl/pipelines/__init__.py +++ b/openfl/pipelines/__init__.py @@ -1,6 +1,6 @@ # Copyright 2022 VMware, Inc. # SPDX-License-Identifier: Apache-2.0 -import importlib +from importlib import util from openfl.pipelines.kc_pipeline import KCPipeline from openfl.pipelines.no_compression_pipeline import NoCompressionPipeline @@ -9,5 +9,5 @@ from openfl.pipelines.stc_pipeline import STCPipeline from openfl.pipelines.tensor_codec import TensorCodec -if importlib.util.find_spec("torch") is not None: +if util.find_spec("torch") is not None: from openfl.pipelines.eden_pipeline import EdenPipeline # NOQA diff --git a/openfl/utilities/optimizers/keras/__init__.py b/openfl/utilities/optimizers/keras/__init__.py index 39f450df05..2ae100ebcc 100644 --- a/openfl/utilities/optimizers/keras/__init__.py +++ b/openfl/utilities/optimizers/keras/__init__.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 -import importlib +from importlib import util -if importlib.util.find_spec("tensorflow") is not None: +if util.find_spec("tensorflow") is not None: from openfl.utilities.optimizers.keras.fedprox import FedProxOptimizer # NOQA diff --git a/openfl/utilities/optimizers/torch/__init__.py b/openfl/utilities/optimizers/torch/__init__.py index a6cd0c95f6..77e989cdd4 100644 --- a/openfl/utilities/optimizers/torch/__init__.py +++ b/openfl/utilities/optimizers/torch/__init__.py @@ -3,8 +3,8 @@ """PyTorch optimizers package.""" -import importlib +from importlib import util -if importlib.util.find_spec("torch") is not None: +if util.find_spec("torch") is not None: from openfl.utilities.optimizers.torch.fedprox import FedProxAdam # NOQA from openfl.utilities.optimizers.torch.fedprox import FedProxOptimizer # NOQA